doublecmd-1.1.30/0000755000175000001440000000000015104114162012565 5ustar alexxusersdoublecmd-1.1.30/units/0000755000175000001440000000000015104114162013727 5ustar alexxusersdoublecmd-1.1.30/units/dcrevision.inc0000644000175000001440000000012615104114162016566 0ustar alexxusers// Created by Git2RevisionInc const dcRevision = '815'; const dcCommit = '8f007810d'; doublecmd-1.1.30/tools/0000755000175000001440000000000015104114162013725 5ustar alexxusersdoublecmd-1.1.30/tools/jsonpack/0000755000175000001440000000000015104114162015535 5ustar alexxusersdoublecmd-1.1.30/tools/jsonpack/jsonpack.lpr0000644000175000001440000000211615104114162020064 0ustar alexxusersprogram jsonpack; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, {$ENDIF} SysUtils, Classes, JsonParser, fpJson; var AFileName: String; AConfig: TJSONData; AStream: TFileStream; AOptions: TFormatOptions; begin if ParamStr(1) = '-c' then begin AOptions:= AsCompactJSON; end else if ParamStr(1) = '-d' then begin AOptions:= [foDoNotQuoteMembers] end else begin WriteLn; WriteLn(ExtractFileName(ParamStr(0)), ' '); WriteLn; WriteLn('Options:'); WriteLn(' -c compress json-file'); WriteLn(' -d decompress json-file'); WriteLn; Exit; end; AFileName:= ParamStr(2); AStream:= TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone); try AConfig:= GetJSON(AStream, True); finally AStream.Free; end; try with TStringList.Create do try Text:= AConfig.FormatJSON(AOptions); SaveToFile(AFileName); finally Free; end; finally AConfig.Free; end; end. doublecmd-1.1.30/tools/jsonpack/jsonpack.lpi0000644000175000001440000000275015104114162020057 0ustar alexxusers <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes> <Item Name="Default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <Units> <Unit> <Filename Value="jsonpack.lpr"/> <IsPartOfProject Value="True"/> </Unit> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="jsonpack"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> </CompilerOptions> <Debugging> <Exceptions> <Item> <Name Value="EAbort"/> </Item> <Item> <Name Value="ECodetoolError"/> </Item> <Item> <Name Value="EFOpenError"/> </Item> </Exceptions> </Debugging> </CONFIG> ������������������������doublecmd-1.1.30/tools/fsgenerator/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016244� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/tools/fsgenerator/fsgenerator.lpr��������������������������������������������������0000644�0001750�0000144�00000006376�15104114162�021316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Filesystem traffic generator ------------------------------------------------------------------------- Creates, modifies, removes files, quickly and in large quantities. Useful for testing how a program behaves when there's a lot of traffic happening on the file system. Copyright (C) 2010-2012 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } program fsgenerator; {$mode objfpc}{$H+} uses SysUtils, Classes, Windows; var Path: UTF8String; fs: TFileStream; filenames: TStringList; nr: Integer; buffer: array[0..16383] of byte; procedure GenNames; var i, j: Integer; name: String; begin for i := 0 to Random(1000) do begin name := ''; for j := 0 to random(100) do name := name + chr(random(ord('z') - ord('a')) + ord('a')); filenames.Add(name); end; end; function RandomName: String; begin Result := Path + filenames[Random(Filenames.Count)]; end; procedure Create(name: String); begin fs := TFileStream.Create(name, fmCreate); fs.Write(buffer, random(sizeof(buffer))); fs.Free; end; procedure Modify(name: String); var P: Int64; count: Int64; Mode: Word; size: int64; begin if not FileExists(name) then mode := fmCreate else mode := fmOpenReadWrite; fs := TFileStream.Create(Name, mode); if mode = fmCreate then begin fs.Write(buffer, random(sizeof(buffer))); fs.Seek(0, soBeginning); end; size := fs.size; p := random(size); fs.Seek(p, soBeginning); count := min(sizeof(buffer),random(size-p)); fs.Write(buffer, count); //writeln('writing ',count, ' p=',p,' size=',size); fs.Free; end; procedure Delete(name: String); begin if FileExists(Name) then Sysutils.DeleteFile(Name); end; begin if Paramcount = 0 then begin WriteLn('File system traffic generator.'); WriteLn('Creates, modifies, removes files, quickly and in large quantities.'); Writeln; WriteLn('Usage:'); WriteLn(ExtractFileName(ParamStr(0)) + ' <destination_path>'); Exit; end; FileNames := TStringList.Create; GenNames; Path := IncludeTrailingPathDelimiter(ParamStr(1)); ForceDirectories(Path); WriteLn('Starting changing ', Path); while True do begin case Random(6) of 0: Sleep(10); 1: Modify(RandomName); 2: Create(RandomName); 3: Modify(RandomName); 4: Delete(RandomName); 5: Modify(RandomName); end; Sleep(10); if (GetKeyState(VK_SPACE) < 0) or (GetKeyState(VK_SHIFT) < 0) or (GetKeyState(VK_ESCAPE) < 0) then Break; end; WriteLn('Finished changing'); Filenames.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/tools/fsgenerator/fsgenerator.lpi��������������������������������������������������0000644�0001750�0000144�00000003630�15104114162�021273� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <SaveOnlyProjectUnits Value="True"/> <MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="Default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="fsgenerator.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="fsgenerator"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="fsgen"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <UnitOutputDirectory Value="out\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������doublecmd-1.1.30/tools/extractdwrflnfo.lpr����������������������������������������������������������0000755�0001750�0000144�00000004401�15104114162�017662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These (as of Jan. 2008 / FPC 2.2.0) both didn't work and had several limitations (e.g. inability to be used from a DLL) } {note: DON'T FORGET to compile your program with the -gw key Lazarus: you must type it in Project -> Compiler Options -> Other -> User parameters } {$mode delphi} {$longstrings on} {$ifndef unix} {$apptype console} {$endif} //extracts the line info in the dwarf format from the executable program extractdwrflnfo; uses SysUtils, Classes, un_xtrctdwrflnfo, zstream; var _dwarf: pointer; DwarfSize, CompressedDwarfSize: QWord; base_addr: QWord; f: TFileStream; CS: TCompressionStream; dllname, iname: ansistring; begin if Paramcount = 0 then begin WriteLn('Usage: ' + ExtractFileName(GetModuleName(0)) + ' <executable name>'); exit; end; dllname:= ParamStr(1); WriteLn('Extracting Dwarf line info from ', dllname); try iname:= DlnNameByExename(dllname); if ExtractDwarfLineInfo(dllname, _dwarf, DwarfSize, base_addr) then begin f:= TFileStream.Create(iname , fmCreate); CS:= TCompressionStream.Create(clMax, f); CS.Write(dwarfsize, sizeof(dwarfsize)); // 8 bytes (QWORD) CS.Write(base_addr, sizeof(base_addr)); // 8 bytes (QWORD) CS.Write(_dwarf^, dwarfsize); CS.Free; CompressedDwarfSize := f.Size; f.free; WriteLn('Ok, saved ', CompressedDwarfSize, ' bytes to ', iname); end else begin if FileExists(iname) then DeleteFile(iname); WriteLn('Error: ' + ExtractDwarfLineInfoError); end; except WriteLn((ExceptObject as Exception).Message); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/tools/extractdwrflnfo.lpi����������������������������������������������������������0000644�0001750�0000144�00000003572�15104114162�017656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <SaveClosedFiles Value="False"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <SaveJumpHistory Value="False"/> <SaveFoldState Value="False"/> </Flags> <SessionStorage Value="None"/> <MainUnit Value="0"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="Default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="extractdwrflnfo.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="extractdwrflnfo"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\src"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> <UseLineInfoUnit Value="False"/> </Debugging> </Linking> <Other> <Verbosity> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�013354� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwlxprototypes.pas�������������������������������������������������������������0000644�0001750�0000144�00000003505�15104114162�017234� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uwlxprototypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, WlxPlugin, LCLType; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory } TListLoad = function (ParentWin: HWND; FileToLoad: PAnsiChar; ShowFlags: Integer): HWND; { Optional } TListLoadNext = function (ParentWin, PluginWin: HWND; FileToLoad: PAnsiChar; ShowFlags: Integer): Integer; TListCloseWindow = procedure (ListWin: HWND); TListGetDetectString = procedure (DetectString: PAnsiChar; MaxLen: Integer); TListSearchText = function (ListWin: HWND; SearchString: PAnsiChar; SearchParameter: Integer): Integer; TListSearchDialog = function (ListWin: HWND; FindNext: Integer): Integer; TListSendCommand = function (ListWin: HWND; Command, Parameter: Integer): Integer; TListPrint = function (ListWin: HWND; FileToPrint, DefPrinter: PAnsiChar; PrintFlags: Integer; var Margins: TRect): Integer; TListNotificationReceived = function (ListWin: HWND; Message, wParam, lParam: Integer): Integer; TListSetDefaultParams = procedure (dps: PListDefaultParamStruct); TListGetPreviewBitmap = function (FileToLoad: PAnsiChar; Width, Height: Integer; ContentBuf: PByte; ContentBufLen: Integer): HBITMAP; { Unicode } TListLoadW = function (ParentWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): HWND; TListLoadNextW = function (ParentWin, PluginWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): Integer; TListSearchTextW = function (ListWin: HWND; SearchString: PWideChar; SearchParameter: Integer): Integer; TListPrintW = function (ListWin: HWND; FileToPrint, DefPrinter: PWideChar; PrintFlags: Integer; var Margins: TRect): Integer; TListGetPreviewBitmapW = function (FileToLoad: PWideChar; Width, Height: Integer; ContentBuf: PByte; ContentBufLen: Integer): HBITMAP; {$CALLING DEFAULT} implementation end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwlxmodule.pas�����������������������������������������������������������������0000644�0001750�0000144�00000061175�15104114162�016300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- WLX-API implementation (TC WLX-API v2.0). Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uWlxModule; {$mode objfpc}{$H+} {$IFDEF DARWIN} {$modeswitch objectivec1} {$ENDIF} interface uses Classes, SysUtils, dynlibs, uDetectStr, uWlxPrototypes, WlxPlugin, DCClassesUtf8, uDCUtils, LCLProc, LCLType, DCXmlConfig {$IFDEF MSWINDOWS} , Windows, LCLIntf, Controls {$ENDIF} {$IFDEF LCLGTK} , gtk, glib, gdk, gtkproc {$ENDIF} {$IFDEF LCLGTK2} , gtk2, glib2, gtk2proc {$ENDIF} {$IFDEF LCLQT} , qt4, qtwidgets // The Qt widgetset must be used to load plugins on qt {$ENDIF} {$IFDEF LCLQT5} , qt5, qtwidgets {$ENDIF} {$IFDEF LCLQT6} , qt6, qtwidgets {$ENDIF} {$IFDEF LCLCOCOA} , CocoaAll {$ENDIF} {$IF DEFINED(MSWINDOWS) and (DEFINED(LCLQT5) or DEFINED(DARKWIN))} , uDarkStyle {$ENDIF} ; type { TWlxModule } TWlxModule = class protected // a) Mandatory (must be implemented) ListLoad: TListLoad; // b) Optional (must NOT be implemented if unsupported!) ListLoadNext: TListLoadNext; ListCloseWindow: TListCloseWindow; ListGetDetectString: TListGetDetectString; ListSearchText: TListSearchText; ListSearchDialog: TListSearchDialog; ListSendCommand: TListSendCommand; ListPrint: TListPrint; ListNotificationReceived: TListNotificationReceived; ListSetDefaultParams: TListSetDefaultParams; ListGetPreviewBitmap: TListGetPreviewBitmap; // c) Unicode ListLoadW: TListLoadW; ListLoadNextW: TListLoadNextW; ListSearchTextW: TListSearchTextW; ListPrintW: TListPrintW; ListGetPreviewBitmapW: TListGetPreviewBitmapW; private FModuleHandle: TLibHandle; // Handle to .DLL or .so FParser: TParserControl; FPluginWindow: HWND; function GetCanCommand: Boolean; function GetCanPreview: Boolean; function GetCanPrint: Boolean; function GetCanSearch: Boolean; function GetDetectStr: String; function GIsLoaded: Boolean; procedure SetDetectStr(const AValue: String); procedure WlxPrepareContainer(var {%H-}ParentWin: HWND); public Name: String; FileName: String; pShowFlags: Integer; QuickView: Boolean; Enabled: Boolean; //--------------------- constructor Create; destructor Destroy; override; //--------------------- function LoadModule: Boolean; procedure UnloadModule; //--------------------- function CallListLoad(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): HWND; function CallListLoadNext(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): Integer; function CallListGetDetectString: String; procedure CallListSetDefaultParams; procedure CallListCloseWindow; function CallListGetPreviewBitmap(FileToLoad: String; Width, Height: Integer; ContentBuf: String): HBITMAP; function CallListNotificationReceived(Msg, wParam, lParam: Integer): Integer; function CallListPrint(FileToPrint, DefPrinter: String; PrintFlags: Integer; var Margins: trect): Integer; function CallListSearchDialog(FindNext: Integer): Integer; function CallListSearchText(SearchString: String; SearchParameter: Integer): Integer; function CallListSendCommand(Command, Parameter: Integer): Integer; //--------------------- function FileParamVSDetectStr(AFileName: String; bForce: Boolean): Boolean; //--------------------- procedure SetFocus; procedure ResizeWindow(aRect: TRect); //--------------------- property IsLoaded: Boolean read GIsLoaded; property DetectStr: String read GetDetectStr write SetDetectStr; property ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; property CanPreview: Boolean read GetCanPreview; property CanCommand: Boolean read GetCanCommand; property PluginWindow: HWND read FPluginWindow; property CanSearch: Boolean read GetCanSearch; property CanPrint: Boolean read GetCanPrint; end; { TWLXModuleList } TWLXModuleList = class private Flist: TStringList; function GetCount: Integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Move(CurIndex, NewIndex: Integer); procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function ComputeSignature(seed: dword): dword; procedure DeleteItem(Index: Integer); //--------------------- function Add(Item: TWlxModule): Integer; overload; function Add(FileName: String): Integer; overload; function Add(AName, FileName, DetectStr: String): Integer; overload; //--------------------- procedure Assign(OtherList: TWLXModuleList); function IndexOfName(const AName: string): Integer; //--------------------- function IsLoaded(AName: String): Boolean; overload; function IsLoaded(Index: Integer): Boolean; overload; function LoadModule(AName: String): Boolean; overload; function LoadModule(Index: Integer): Boolean; overload; //--------------------- function GetWlxModule(Index: Integer): TWlxModule; overload; function GetWlxModule(AName: String): TWlxModule; overload; //--------------------- //--------------------- //property WlxList:TStringList read Flist; property Count: Integer read GetCount; end; implementation uses //Lazarus, Free-Pascal, etc. FileUtil, //DC uComponentsSignature, uDebug, DCOSUtils, DCConvertEncoding, uOSUtils, uGlobsPaths, uGlobs; const WlxIniFileName = 'wlx.ini'; {$IF DEFINED(LCLWIN32)} var WindowProcAtom: PWideChar; function PluginProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var WindowProc: WNDPROC; begin WindowProc := WNDPROC(GetPropW(hWnd, WindowProcAtom)); if Assigned(WindowProc) then Result := CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam) else begin Result := DefWindowProc(hWnd, Msg, wParam, lParam); end; if (Result = 0) and (Msg = WM_KEYDOWN) then begin PostMessage(GetParent(hWnd), Msg, wParam, lParam); end; end; function ListerProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var Lister: TControl; WindowProc: WNDPROC; begin WindowProc := WNDPROC(GetPropW(hWnd, WindowProcAtom)); if Assigned(WindowProc) then Result := CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam) else begin Result := DefWindowProcW(hWnd, Msg, wParam, lParam); end; if (Result = 0) and (Msg = WM_COMMAND) and (lParam <> 0) then begin Lister:= TControl(GetLCLOwnerObject(hWnd)); if Assigned(Lister) then Lister.Perform(Msg, wParam, lParam); end; end; {$ENDIF} { TWlxModule } procedure TWlxModule.WlxPrepareContainer(var {%H-}ParentWin: HWND); begin {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} ParentWin := HWND(QWidget_winId(TQtWidget(ParentWin).GetContainerWidget)); if QuickView then ParentWin := Windows.GetAncestor(ParentWin, GA_PARENT) else begin ParentWin := Windows.GetAncestor(ParentWin, GA_ROOT); end; {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} ParentWin := HWND(GetFixedWidget(Pointer(ParentWin))); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} ParentWin := HWND(TQtWidget(ParentWin).GetContainerWidget); {$ENDIF} end; function TWlxModule.GIsLoaded: Boolean; begin Result := FModuleHandle <> 0; end; procedure TWlxModule.SetDetectStr(const AValue: String); begin FParser.DetectStr:= AValue; end; function TWlxModule.GetCanPrint: Boolean; begin Result := Assigned(ListPrint) or Assigned(ListPrintW); end; function TWlxModule.GetCanSearch: Boolean; begin Result:= Assigned(ListSearchText) or Assigned(ListSearchDialog) or Assigned(ListSearchTextW); end; function TWlxModule.GetDetectStr: String; begin Result:= FParser.DetectStr; end; function TWlxModule.GetCanPreview: Boolean; begin Result:= Assigned(ListGetPreviewBitmap) or Assigned(ListGetPreviewBitmapW); end; function TWlxModule.GetCanCommand: Boolean; begin Result := Assigned(ListSendCommand); end; constructor TWlxModule.Create; begin Enabled := True; FParser := TParserControl.Create; end; destructor TWlxModule.Destroy; begin {$IF NOT DEFINED(LCLWIN32)} if GIsLoaded then UnloadModule; {$ENDIF} if Assigned(FParser) then FParser.Free; inherited Destroy; end; function TWlxModule.LoadModule: Boolean; begin // DCDebug('WLXM LoadModule entered'); if (FModuleHandle <> NilHandle) then Exit(True); FModuleHandle := mbLoadLibrary(mbExpandFileName(Self.FileName)); Result := (FModuleHandle <> NilHandle); if FModuleHandle = NilHandle then Exit; { Mandatory } ListLoad := TListLoad(GetProcAddress(FModuleHandle, 'ListLoad')); { Optional } ListLoadNext := TListLoadNext(GetProcAddress(FModuleHandle, 'ListLoadNext')); ListCloseWindow := TListCloseWindow(GetProcAddress(FModuleHandle, 'ListCloseWindow')); ListGetDetectString := TListGetDetectString(GetProcAddress(FModuleHandle, 'ListGetDetectString')); ListSearchText := TListSearchText(GetProcAddress(FModuleHandle, 'ListSearchText')); ListSearchDialog := TListSearchDialog(GetProcAddress(FModuleHandle, 'ListSearchDialog')); ListSendCommand := TListSendCommand(GetProcAddress(FModuleHandle, 'ListSendCommand')); ListPrint := TListPrint(GetProcAddress(FModuleHandle, 'ListPrint')); ListNotificationReceived := TListNotificationReceived(GetProcAddress(FModuleHandle, 'ListNotificationReceived')); ListSetDefaultParams := TListSetDefaultParams(GetProcAddress(FModuleHandle, 'ListSetDefaultParams')); ListGetPreviewBitmap := TListGetPreviewBitmap(GetProcAddress(FModuleHandle, 'ListGetPreviewBitmap')); { Unicode } ListLoadW := TListLoadW(GetProcAddress(FModuleHandle, 'ListLoadW')); ListLoadNextW := TListLoadNextW(GetProcAddress(FModuleHandle, 'ListLoadNextW')); ListSearchTextW := TListSearchTextW(GetProcAddress(FModuleHandle, 'ListSearchTextW')); ListPrintW := TListPrintW(GetProcAddress(FModuleHandle, 'ListPrintW')); ListGetPreviewBitmapW := TListGetPreviewBitmapW(GetProcAddress(FModuleHandle, 'ListGetPreviewBitmapW')); // ListSetDefaultParams must be called immediately after loading the DLL, before ListLoad. CallListSetDefaultParams; // DCDebug('WLXM LoadModule Leaved'); end; procedure TWlxModule.UnloadModule; begin {$IF NOT (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6) or DEFINED(LCLGTK2))} {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; { Mandatory } ListLoad := nil; { Optional } ListLoadNext := nil; ListCloseWindow := nil; ListGetDetectString := nil; ListSearchText := nil; ListSearchDialog := nil; ListSendCommand := nil; ListPrint := nil; ListNotificationReceived := nil; ListSetDefaultParams := nil; ListGetPreviewBitmap := nil; { Unicode } ListLoadW := nil; ListLoadNextW := nil; ListSearchTextW := nil; ListPrintW := nil; ListGetPreviewBitmapW := nil; {$ENDIF} end; function TWlxModule.CallListLoad(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): HWND; begin WlxPrepareContainer(ParentWin); {$IF DEFINED(MSWINDOWS) and (DEFINED(LCLQT5) or DEFINED(DARKWIN))} if g_darkModeEnabled then begin ShowFlags:= ShowFlags or lcp_darkmode; if g_darkModeSupported then ShowFlags:= ShowFlags or lcp_darkmodenative; end; {$ENDIF} if Assigned(ListLoadW) then FPluginWindow := ListLoadW(ParentWin, PWideChar(CeUtf8ToUtf16(FileToLoad)), ShowFlags) else if Assigned(ListLoad) then FPluginWindow := ListLoad(ParentWin, PAnsiChar(CeUtf8ToSys(FileToLoad)), ShowFlags) else Exit(wlxInvalidHandle); {$IF DEFINED(LCLWIN32)} if FPluginWindow <> 0 then begin // Subclass viewer window to catch WM_COMMAND message. Result:= HWND(SetWindowLongPtrW(ParentWin, GWL_WNDPROC, LONG_PTR(@ListerProc))); Windows.SetPropW(ParentWin, WindowProcAtom, Result); // Subclass plugin window to catch some hotkeys like 'n' or 'p'. Result := HWND(SetWindowLongPtr(FPluginWindow, GWL_WNDPROC, LONG_PTR(@PluginProc))); Windows.SetPropW(FPluginWindow, WindowProcAtom, Result); end; {$ENDIF} {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} if FPluginWindow <> 0 then begin SetWindowLongPtr(FPluginWindow, GWL_HWNDPARENT, ParentWin); end; {$ENDIF} Result := FPluginWindow; end; function TWlxModule.CallListLoadNext(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): Integer; begin WlxPrepareContainer(ParentWin); {$IF DEFINED(MSWINDOWS) and (DEFINED(LCLQT5) or DEFINED(DARKWIN))} if g_darkModeEnabled then begin ShowFlags:= ShowFlags or lcp_darkmode; if g_darkModeSupported then ShowFlags:= ShowFlags or lcp_darkmodenative; end; {$ENDIF} if Assigned(ListLoadNextW) then Result := ListLoadNextW(ParentWin, FPluginWindow, PWideChar(CeUtf8ToUtf16(FileToLoad)), ShowFlags) else if Assigned(ListLoadNext) then Result := ListLoadNext(ParentWin, FPluginWindow, PAnsiChar(CeUtf8ToSys(FileToLoad)), ShowFlags) else Result := LISTPLUGIN_ERROR; end; procedure TWlxModule.CallListCloseWindow; begin // DCDebug('Try to call ListCloseWindow'); try {$IF DEFINED(LCLWIN32)} SetWindowLongPtr(FPluginWindow, GWL_WNDPROC, LONG_PTR(RemovePropW(FPluginWindow, WindowProcAtom))); SetWindowLongPtrW(GetParent(FPluginWindow), GWL_WNDPROC, LONG_PTR(RemovePropW(GetParent(FPluginWindow), WindowProcAtom))); {$ENDIF} if Assigned(ListCloseWindow) then ListCloseWindow(FPluginWindow) {$IF DEFINED(MSWINDOWS)} else DestroyWindow(FPluginWindow) {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} else gtk_widget_destroy(PGtkWidget(FPluginWindow)); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} else QWidget_Destroy(QWidgetH(FPluginWindow)); {$ENDIF} finally FPluginWindow := 0; {$IF DEFINED(MSWINDOWS)} // Reset current directory SetCurrentDirectoryW(PWideChar(CeUtf8ToUtf16(gpExePath))); {$ENDIF} end; // DCDebug('Call ListCloseWindow success'); end; function TWlxModule.CallListGetDetectString: String; const MAX_LEN = 2048; // See listplugin.hlp for details begin if not Assigned(ListGetDetectString) then Result := EmptyStr else begin Result := StringOfChar(#0, MAX_LEN); ListGetDetectString(PAnsiChar(Result), MAX_LEN); Result := Trim(PAnsiChar(Result)); end; end; function TWlxModule.CallListSearchText(SearchString: String; SearchParameter: Integer): Integer; begin if Assigned(ListSearchTextW) then Result := ListSearchTextW(FPluginWindow, PWideChar(CeUtf8ToUtf16(SearchString)), SearchParameter) else if Assigned(ListSearchText) then Result := ListSearchText(FPluginWindow, PAnsiChar(CeUtf8ToSys(SearchString)), SearchParameter) else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListSearchDialog(FindNext: Integer): Integer; begin if Assigned(ListSearchDialog) then begin Result := ListSearchDialog(FPluginWindow, FindNext); end else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListSendCommand(Command, Parameter: Integer): Integer; begin if Assigned(ListSendCommand) then begin Result := ListSendCommand(FPluginWindow, Command, Parameter); end else Result := LISTPLUGIN_ERROR; end; function TWlxModule.FileParamVSDetectStr(AFileName: String; bForce: Boolean): Boolean; begin if not Enabled then Exit(False); FParser.IsForce:= bForce; // DCDebug('DetectStr = ' + FParser.DetectStr); // DCDebug('AFileName = ' + AFileName); Result := FParser.TestFileResult(AFileName); end; procedure TWlxModule.SetFocus; begin {$IF DEFINED(MSWINDOWS)} Windows.SetFocus(FPluginWindow); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} QWidget_setFocus(QWidgetH(FPluginWindow)); {$ELSEIF DEFINED(LCLGTK2)} gtk_widget_grab_focus(PGtkWidget(FPluginWindow)); {$ENDIF} end; procedure TWlxModule.ResizeWindow(aRect: TRect); begin //ToDo: Implement for other widgetsets with aRect do begin {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} if not QuickView then begin OffsetRect(aRect, 0, GetSystemMetrics(SM_CYMENU)); end; MoveWindow(FPluginWindow, Left, Top, Right - Left, Bottom - Top, True); {$ELSEIF DEFINED(LCLWIN32)} MoveWindow(FPluginWindow, Left, Top, Right - Left, Bottom - Top, True); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} QWidget_move(QWidgetH(FPluginWindow), Left, Top); QWidget_resize(QWidgetH(FPluginWindow), Right - Left, Bottom - Top); {$ELSEIF DEFINED(LCLGTK2)} gtk_widget_set_uposition(PGtkWidget(FPluginWindow), Left, -1); gtk_widget_set_usize(PGtkWidget(FPluginWindow), Right - Left, Bottom - Top); {$ELSEIF DEFINED(LCLCOCOA)} NSView(FPluginWindow).setFrame( NSMakeRect(Left,Top,Width,Height) ); {$ENDIF} end; end; function TWlxModule.CallListPrint(FileToPrint, DefPrinter: String; PrintFlags: Integer; var Margins: trect): Integer; begin if Assigned(ListPrintW) then Result := ListPrintW(FPluginWindow, PWideChar(CeUtf8ToUtf16(FileToPrint)), PWideChar(CeUtf8ToUtf16(DefPrinter)), PrintFlags, Margins) else if Assigned(ListPrint) then Result := ListPrint(FPluginWindow, PAnsiChar(CeUtf8ToSys(FileToPrint)), PAnsiChar(CeUtf8ToSys(DefPrinter)), PrintFlags, Margins) else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListNotificationReceived(Msg, wParam, lParam: Integer): Integer; begin if Assigned(ListNotificationReceived) then begin Result := ListNotificationReceived(FPluginWindow, Msg, wParam, lParam); end; end; procedure TWlxModule.CallListSetDefaultParams; var dps: TListDefaultParamStruct; begin if Assigned(ListSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WlxIniFileName); dps.PluginInterfaceVersionHi := 2; dps.PluginInterfaceVersionLow := 0; dps.Size := SizeOf(TListDefaultParamStruct); ListSetDefaultParams(@dps); end; end; function TWlxModule.CallListGetPreviewBitmap(FileToLoad: String; Width, Height: Integer; ContentBuf: String): HBITMAP; begin if Assigned(ListGetPreviewBitmapW) then Result := ListGetPreviewBitmapW(PWideChar(CeUtf8ToUtf16(FileToLoad)), Width, Height, PByte(ContentBuf), Length(ContentBuf)) else if Assigned(ListGetPreviewBitmap) then Result := ListGetPreviewBitmap(PAnsiChar(CeUtf8ToSys(FileToLoad)), Width, Height, PByte(ContentBuf), Length(ContentBuf)) else Result := 0; end; { TWLXModuleList } function TWLXModuleList.GetCount: Integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TWLXModuleList.Create; begin Flist := TStringList.Create; end; destructor TWLXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TWLXModuleList.Clear; begin while Flist.Count > 0 do begin TWlxModule(Flist.Objects[0]).Free; Flist.Delete(0); end; end; procedure TWLXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TWLXModuleList.Move(CurIndex, NewIndex: Integer); begin FList.Move(CurIndex, NewIndex); end; procedure TWLXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; AWlxModule: TWlxModule; begin Clear; ANode := ANode.FindNode('WlxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WlxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin AWlxModule := TWlxModule.Create; Flist.AddObject(UpCase(AName), AWlxModule); AWlxModule.Name := AName; AWlxModule.FileName := APath; AWlxModule.DetectStr := AConfig.GetValue(ANode, 'DetectString', ''); AWlxModule.Enabled:= AConfig.GetAttr(ANode, 'Enabled', True); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWLXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WlxPlugins', True); AConfig.ClearNode(ANode); for i := 0 to Flist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WlxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', TWlxModule(Flist.Objects[I]).Enabled); AConfig.AddValue(SubNode, 'Name', TWlxModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', TWlxModule(Flist.Objects[I]).FileName); AConfig.AddValue(SubNode, 'DetectString', TWlxModule(Flist.Objects[I]).DetectStr); end; end; { TWLXModuleList.ComputeSignature } function TWLXModuleList.ComputeSignature(seed: dword): dword; var iIndex: integer; begin result := seed; for iIndex := 0 to pred(Count) do begin result := ComputeSignatureBoolean(result, TWlxModule(Flist.Objects[iIndex]).Enabled); result := ComputeSignatureString(result, TWlxModule(Flist.Objects[iIndex]).Name); result := ComputeSignatureString(result, TWlxModule(Flist.Objects[iIndex]).FileName); result := ComputeSignatureString(result, TWlxModule(Flist.Objects[iIndex]).DetectStr); end; end; procedure TWLXModuleList.DeleteItem(Index: Integer); begin if (Index > -1) and (Index < Flist.Count) then begin TWlxModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TWLXModuleList.Add(Item: TWlxModule): Integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TWLXModuleList.Add(FileName: String): Integer; var s: String; begin // DCDebug('WLXLIST Add entered'); s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); Result := Flist.AddObject(UpCase(s), TWlxModule.Create); TWlxModule(Flist.Objects[Result]).Name := s; TWlxModule(Flist.Objects[Result]).FileName := FileName; if TWlxModule(Flist.Objects[Result]).LoadModule then begin TWlxModule(Flist.Objects[Result]).DetectStr := TWlxModule(Flist.Objects[Result]).CallListGetDetectString; TWlxModule(Flist.Objects[Result]).UnloadModule; end; // DCDebug('WLXLIST ADD Leaved'); end; function TWLXModuleList.Add(AName, FileName, DetectStr: String): Integer; begin Result := Flist.AddObject(UpCase(AName), TWlxModule.Create); TWlxModule(Flist.Objects[Result]).Name := AName; TWlxModule(Flist.Objects[Result]).DetectStr := DetectStr; TWlxModule(Flist.Objects[Result]).FileName := FileName; end; procedure TWLXModuleList.Assign(OtherList: TWLXModuleList); var I, J: Integer; begin Clear; for I := 0 to OtherList.Flist.Count - 1 do begin with TWlxModule(OtherList.Flist.Objects[I]) do begin J:= Add(Name, FileName, DetectStr); GetWlxModule(J).Enabled:= Enabled; end; end; end; function TWLXModuleList.IndexOfName(const AName: string): Integer; begin Result := Flist.IndexOf(UpCase(AName)); end; function TWLXModuleList.IsLoaded(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetWlxModule(x).IsLoaded; end; end; function TWLXModuleList.IsLoaded(Index: Integer): Boolean; begin Result := GetWlxModule(Index).IsLoaded; end; function TWLXModuleList.LoadModule(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetWlxModule(x).LoadModule; end; end; function TWLXModuleList.LoadModule(Index: Integer): Boolean; begin Result := GetWlxModule(Index).LoadModule; end; function TWLXModuleList.GetWlxModule(Index: Integer): TWlxModule; begin Result := TWlxModule(Flist.Objects[Index]); end; function TWLXModuleList.GetWlxModule(AName: String): TWlxModule; var tmp: Integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp > -1 then Result := TWlxModule(Flist.Objects[tmp]); end; {$IF DEFINED(LCLWIN32)}{$WARNINGS OFF} initialization WindowProcAtom := Pointer(GlobalAddAtomW('Double Commander')); finalization Windows.GlobalDeleteAtom(ATOM(WindowProcAtom)); {$ENDIF} end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwfxprototypes.pas�������������������������������������������������������������0000644�0001750�0000144�00000012472�15104114162�017231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWFXprototypes; {$mode objfpc}{$H+} interface uses WfxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { File system plugins API (version 2.0) for TC } {R} //Realized {U} //Unrealized { Mandatory } {R} TFsInit=function(PluginNr:Integer; pProgressProc:tProgressProc; pLogProc:tlogProc; pRequestProc:tRequestProc):integer; {R} TFsFindFirst=function(path :pansichar;var FindData:tWIN32FINDDATA):thandle; {R} TFsFindNext=function(Hdl:thandle;var FindData:tWIN32FINDDATA):bool; {R} TFsFindClose=function(Hdl:thandle):integer; { Optional } {R} TFsSetCryptCallback = procedure(pCryptProc:TCryptProc;CryptoNr,Flags:integer); {R} TFsMkDir = function(RemoteDir:pansichar):bool; {R} TFsGetFile = function(RemoteName,LocalName:pansichar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {R} TFsPutFile=function(LocalName,RemoteName:pansichar;CopyFlags:integer):integer; {R} TFsDeleteFile=function(RemoteName:pansichar):bool; {R} TFsRemoveDir=function(RemoteName:pansichar):bool; {R} TFsStatusInfo = procedure(RemoteDir:pansichar;InfoStartEnd,InfoOperation:integer); {R} TFsSetDefaultParams = procedure (dps:pFsDefaultParamStruct); {R} TFsExecuteFile=Function(MainWin:HWND;RemoteName,Verb:pansichar):integer; {R} TFsGetDefRootName=procedure (DefRootName:pansichar;maxlen:integer); //------------------------------------------------------ {R} TFsSetAttr=function (RemoteName:pansichar;NewAttr:integer):bool; {R} TFsSetTime=Function(RemoteName:pansichar;CreationTime,LastAccessTime,LastWriteTime:PWfxFileTime):bool; {U} TFsExtractCustomIcon=function(RemoteName:pansichar;ExtractFlags:integer;var TheIcon:hicon):integer; {R} TFsRenMovFile= function(OldName,NewName:pansichar; Move, OverWrite:bool; ri:pRemoteInfo):Integer; {U} TFsDisconnect = function (DisconnectRoot:pansichar):bool; {U} TFsGetPreviewBitmap = function ( RemoteName:pansichar; width,height:integer; ReturnedBitmap:HBITMAP):integer; {R} TFsLinksToLocalFiles = function:bool; {R} TFsGetLocalName = function (RemoteName:pansichar;maxlen:integer):bool; //------------------------------------------------------ TFsGetBackgroundFlags = function: integer; //------------------------------------------------------ {R} TFsContentPluginUnloading = procedure; {U} TFsContentGetDetectString = procedure (DetectString:pansichar;maxlen:integer); {U} TFsContentGetSupportedField = function (FieldIndex:integer;FieldName:pansichar; Units:pansichar;maxlen:integer):integer; {U} TFsContentGetValue = function (FileName:pansichar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {U} TFsContentSetDefaultParams = procedure (dps:pContentDefaultParamStruct); {U} TFsContentStopGetValue = procedure (FileName:pansichar); {U} TFsContentGetDefaultSortOrder = function (FieldIndex:integer):integer; {U} TFsContentGetSupportedFieldFlags = function (FieldIndex:integer):integer; {U} TFsContentSetValue = function (FileName:pansichar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {U} TFsContentGetDefaultView = function (ViewContents,ViewHeaders,ViewWidths, ViewOptions:pansichar;maxlen:integer):bool; { Unicode } TFsInitW = function(PluginNr:integer;pProgressProcW:tProgressProcW;pLogProcW:tLogProcW; pRequestProcW:tRequestProcW):integer; TFsFindFirstW = function(path :pwidechar;var FindData:tWIN32FINDDATAW):thandle; TFsFindNextW = function(Hdl:thandle;var FindDataW:tWIN32FINDDATAW):bool; //------------------------------------------------------ TFsSetCryptCallbackW = procedure(CryptProcW:TCryptProcW;CryptoNr,Flags:integer); TFsMkDirW = function(RemoteDir:pwidechar):bool; TFsExecuteFileW = function(MainWin:HWND;RemoteName,Verb:pwidechar):integer; TFsRenMovFileW = function(OldName,NewName:pwidechar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; TFsGetFileW = function(RemoteName,LocalName:pwidechar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; TFsPutFileW = function(LocalName,RemoteName:pwidechar;CopyFlags:integer):integer; TFsDeleteFileW = function(RemoteName:pwidechar):bool; TFsRemoveDirW = function(RemoteName:pwidechar):bool; TFsDisconnectW = function(DisconnectRoot:pwidechar):bool; TFsSetAttrW = function(RemoteName:pwidechar;NewAttr:integer):bool; TFsSetTimeW = function(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PWfxFileTime):bool; TFsStatusInfoW = procedure(RemoteDir:pwidechar;InfoStartEnd,InfoOperation:integer); TFsExtractCustomIconW = function(RemoteName:pwidechar;ExtractFlags:integer; var TheIcon:hicon):integer; TFsGetPreviewBitmapW = function(RemoteName:pwidechar;width,height:integer; var ReturnedBitmap:hbitmap):integer; TFsGetLocalNameW = function(RemoteName:pwidechar;maxlen:integer):bool; //------------------------------------------------------ TFsContentGetValueW = function(FileName:pwidechar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; TFsContentStopGetValueW = procedure(FileName:pwidechar); TFsContentSetValueW = function(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TFsContentGetDefaultViewW = function(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pwidechar;maxlen:integer):bool; //------------------------------------------------------ {$CALLING DEFAULT} implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwfxmodule.pas�����������������������������������������������������������������0000644�0001750�0000144�00000101536�15104114162�016266� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Virtual File System - class for manage WFX plugins (Version 1.3) Copyright (C) 2007-2018 Alexander Koblov (alexx2000@mail.ru) Callback functions based on: Total Commander filesystem plugins debugger Author: Pavel Dubrovsky This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uWFXmodule; {$mode objfpc}{$H+} interface uses SysUtils, Classes, WfxPlugin, uWFXprototypes, dynlibs, DCClassesUtf8, Extension, DCBasicTypes, DCXmlConfig, uWdxPrototypes, uWdxModule, uFileSource; const WFX_SUCCESS = 0; WFX_NOTSUPPORTED = -10; WFX_ERROR = -20; type { TWfxFindData } TWfxFindData = record FileAttributes : TFileAttrs; CreationTime, LastAccessTime, LastWriteTime : TDateTime; FileSize : Int64; Reserved0, Reserved1 : LongWord; FileName : String; AlternateFileName : String; case Boolean of True: ( FindDataA: TWin32FindData; ); False: ( FindDataW: TWin32FindDataW; ); end; { TWFXModule } TWFXModule = class(TPluginWDX) private FBackgroundFlags: Integer; public { Mandatory } FsInit : TFsInit; FsFindFirst : TFsFindFirst; FsFindNext : TFsFindNext; FsFindClose : TFsFindClose; { Optional } FsSetCryptCallback: TFsSetCryptCallback; FsGetDefRootName : TFsGetDefRootName; FsGetFile : TFsGetFile; FsPutFile : TFsPutFile; FsDeleteFile : TFsDeleteFile; FsRemoveDir : TFsRemoveDir; FsExecuteFile : TFsExecuteFile; FsMkDir : TFsMkDir; FsStatusInfo : TFsStatusInfo; FsSetDefaultParams : TFsSetDefaultParams; //--------------------- FsSetAttr:TFsSetAttr; FsSetTime:TFsSetTime; FsExtractCustomIcon:TFsExtractCustomIcon; FsRenMovFile:TFsRenMovFile; FsDisconnect:TFsDisconnect; FsGetPreviewBitmap:TFsGetPreviewBitmap; FsLinksToLocalFiles:TFsLinksToLocalFiles; FsGetLocalName:TFsGetLocalName; //--------------------- FsGetBackgroundFlags: TFsGetBackgroundFlags; //--------------------- FsContentGetDefaultView:TFsContentGetDefaultView; { Unicode } FsInitW: TFsInitW; FsFindFirstW: TFsFindFirstW; FsFindNextW: TFsFindNextW; //--------------------- FsSetCryptCallbackW: TFsSetCryptCallbackW; FsMkDirW: TFsMkDirW; FsExecuteFileW: TFsExecuteFileW; FsRenMovFileW: TFsRenMovFileW; FsGetFileW: TFsGetFileW; FsPutFileW: TFsPutFileW; FsDeleteFileW: TFsDeleteFileW; FsRemoveDirW: TFsRemoveDirW; FsDisconnectW: TFsDisconnectW; FsSetAttrW: TFsSetAttrW; FsSetTimeW: TFsSetTimeW; FsStatusInfoW: TFsStatusInfoW; FsExtractCustomIconW: TFsExtractCustomIconW; FsGetPreviewBitmapW: TFsGetPreviewBitmapW; FsGetLocalNameW: TFsGetLocalNameW; //----------------------- FsContentGetDefaultViewW: TFsContentGetDefaultViewW; { Extension API } ExtensionInitialize: TExtensionInitializeProc; ExtensionFinalize: TExtensionFinalizeProc; public function WfxFindFirst(Path: String; var FindData: TWfxFindData): THandle; function WfxFindNext(Hdl: THandle; var FindData: TWfxFindData): Boolean; procedure WfxStatusInfo(RemoteDir: String; InfoStartEnd, InfoOperation: Integer); function WfxExecuteFile(MainWin: HWND; var RemoteName: String; Verb: String): Integer; function WfxRenMovFile(OldName, NewName: String; Move, OverWrite: Boolean; RemoteInfo: PRemoteInfo): Integer; function WfxGetFile(RemoteName, LocalName: String; CopyFlags: Integer; RemoteInfo: PRemoteInfo): Integer; function WfxPutFile(LocalName, RemoteName: String; CopyFlags: Integer): Integer; function WfxSetAttr(RemoteName: String; NewAttr: LongInt): Boolean; {en Each of CreationTime, LastAccessTime, LastWriteTime may be @nil to leave the value unchanged. } function WfxSetTime(RemoteName: String; pCreationTime, pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean; function WfxMkDir(const sBasePath, sDirName: String): LongInt; function WfxRemoveDir(const sDirName: String): Boolean; function WfxDeleteFile(const sFileName: String): Boolean; function WfxGetLocalName(var sFileName: String): Boolean; function WfxDisconnect(const DisconnectRoot: String): Boolean; function WfxContentGetDefaultView(out DefaultView: TFileSourceFields): Boolean; private function LoadModule(const sName: String):Boolean; overload; {Load plugin} procedure UnloadModule; override; public constructor Create; override; destructor Destroy; override; procedure VFSInit; function VFSConfigure(Parent: HWND):Boolean; function VFSRootName: String; function ContentPlugin: Boolean; property BackgroundFlags: Integer read FBackgroundFlags write FBackgroundFlags; end; { TWFXModuleList } TWFXModuleList = class(TStringList) private FModuleList: TStringListEx; private function GetAEnabled(Index: Integer): Boolean; function GetAFileName(Index: Integer): String; function GetAName(Index: Integer): String; procedure SetAEnabled(Index: Integer; const AValue: Boolean); procedure SetAFileName(Index: Integer; const AValue: String); procedure SetAName(Index: Integer; const AValue: String); public constructor Create; reintroduce; destructor Destroy; override; public procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function ComputeSignature(seed: dword): dword; function Add(Ext: String; FileName: String): Integer; reintroduce; function FindFirstEnabledByName(Name: String): Integer; function LoadModule(const FileName: String): TWfxModule; property Name[Index: Integer]: String read GetAName write SetAName; property FileName[Index: Integer]: String read GetAFileName write SetAFileName; property Enabled[Index: Integer]: Boolean read GetAEnabled write SetAEnabled; end; function GetErrorMsg(iErrorMsg: LongInt): String; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, FileUtil, //DC uDCUtils, uLng, uGlobsPaths, uOSUtils, uWfxPluginUtil, fDialogBox, DCOSUtils, DCStrUtils, DCConvertEncoding, uComponentsSignature, uOSForms, uExtension; const WfxIniFileName = 'wfx.ini'; function GetErrorMsg(iErrorMsg: LongInt): String; begin case iErrorMsg of WFX_ERROR: Result:= 'Unknown error!'; WFX_NOTSUPPORTED, FS_FILE_NOTSUPPORTED: Result:= rsMsgErrNotSupported; FS_FILE_NOTFOUND: Result:= 'File not found!'; FS_FILE_READERROR: Result:= rsMsgErrERead; FS_FILE_WRITEERROR: Result:= rsMsgErrEWrite; FS_FILE_USERABORT: Result:= rsMsgErrEAborted; end; end; function ConvertString(const S: String): TStringArray; var Item: String = ''; Index: Integer = 1; begin Result:= Default(TStringArray); while Index < High(S) do begin if S[Index] = '\' then begin case S[Index + 1] of '\': begin Item += '\'; Inc(Index, 2); Continue; end; 'n': begin AddString(Result, Item); Item:= EmptyStr; Inc(Index, 2); Continue; end; end; end; Item += S[Index]; Inc(Index); end; if Length(Item) > 0 then begin AddString(Result, Item + S[High(S)]); end; end; function ConvertFunction(const S: String): String; var AValues: TStringArray; Plugin, Field, Arg: String; begin Result:= EmptyStr; if Length(S) < 3 then Exit; if not StrBegins(S, '[=') then Exit(S); if (S[Low(S)] = '[') and (S[High(S)] = ']') then begin AValues:= (Copy(S, 2, Length(S) - 2)).Split(['.']); if (Length(AValues) > 1) then begin Plugin:= LowerCase(AValues[0]); if (Plugin = '=<fs>') then Result:= 'Plugin(FS)' else if (Plugin = '=tc') then begin Result:= 'DC()'; Field:= LowerCase(AValues[1]); if (Field = 'writedate') then AValues[1]:= 'GETFILETIME' else if (Field = 'attributestr') then AValues[1]:= 'GETFILEATTR' else if (Field = 'writetime') then begin AValues[1]:= 'GETFILETIME'; if (Length(AValues) = 2) then begin AddString(AValues, DefaultFormatSettings.LongTimeFormat); end; end else if (Field = 'size') then begin AValues[1]:= 'GETFILESIZE'; if (Length(AValues) = 3) then begin Arg:= LowerCase(AValues[2]); if (Arg = 'bytes') then AValues[2]:= 'BYTE' else if (Arg = 'kbytes') then AValues[2]:= 'KILO' else if (Arg = 'mbytes') then AValues[2]:= 'MEGA' else if (Arg = 'gbytes') then AValues[2]:= 'GIGA' else AValues[2]:= 'FLOAT'; end; end; end; if (Length(AValues) = 2) then Result+= '.' + AValues[1] + '{}' else begin Result+= '.' + AValues[1] + '{' + AValues[2] + '}'; end; Result:= '[' + Result + ']'; end; end; end; { TWfxFindData } procedure ConvertFindData(var FindData: TWfxFindData; AnsiData: Boolean); begin with FindData do begin // Convert file attributes FileAttributes:= FindDataW.dwFileAttributes; CreationTime:= WfxFileTimeToDateTime(FindDataW.ftCreationTime); LastAccessTime:= WfxFileTimeToDateTime(FindDataW.ftLastAccessTime); LastWriteTime:= WfxFileTimeToDateTime(FindDataW.ftLastWriteTime); Int64Rec(FileSize).Lo:= FindDataW.nFileSizeLow; Int64Rec(FileSize).Hi:= FindDataW.nFileSizeHigh; Reserved0:= FindDataW.dwReserved0; Reserved1:= FindDataW.dwReserved1; // Convert file name if AnsiData then begin FileName:= CeSysToUtf8(FindDataA.cFileName); AlternateFileName:= CeSysToUtf8(FindDataA.cAlternateFileName); end else begin FileName:= UTF16ToUTF8(UnicodeString(FindDataW.cFileName)); AlternateFileName:= UTF16ToUTF8(UnicodeString(FindDataW.cAlternateFileName)); end; end; end; { TWFXModule } function TWFXModule.WfxFindFirst(Path: String; var FindData: TWfxFindData): THandle; begin try if Assigned(FsFindFirstW) then begin Result:= FsFindFirstW(PWideChar(CeUtf8ToUtf16(Path)), FindData.FindDataW); if Result <> wfxInvalidHandle then ConvertFindData(FindData, False); end else if Assigned(FsFindFirst) then begin Result:= FsFindFirst(PAnsiChar(CeUtf8ToSys(Path)), FindData.FindDataA); if Result <> wfxInvalidHandle then ConvertFindData(FindData, True); end; except on E: Exception do begin Result:= wfxInvalidHandle; end; end; end; function TWFXModule.WfxFindNext(Hdl: THandle; var FindData: TWfxFindData): Boolean; begin if Assigned(FsFindFirstW) then begin Result:= FsFindNextW(Hdl, FindData.FindDataW); if Result then ConvertFindData(FindData, False); end else if Assigned(FsFindFirst) then begin Result:= FsFindNext(Hdl, FindData.FindDataA); if Result then ConvertFindData(FindData, True); end else Result:= False; end; procedure TWFXModule.WfxStatusInfo(RemoteDir: String; InfoStartEnd, InfoOperation: Integer); begin if Assigned(FsStatusInfoW) then FsStatusInfoW(PWideChar(CeUtf8ToUtf16(RemoteDir)), InfoStartEnd, InfoOperation) else if Assigned(FsStatusInfo) then FsStatusInfo(PAnsiChar(CeUtf8ToSys(RemoteDir)), InfoStartEnd, InfoOperation); end; function TWFXModule.WfxExecuteFile(MainWin: HWND; var RemoteName: String; Verb: String): Integer; var pacRemoteName: PAnsiChar; pwcRemoteName: PWideChar; begin Result:= WFX_NOTSUPPORTED; MainWin:= GetWindowHandle(MainWin); if Assigned(FsExecuteFileW) then begin pwcRemoteName:= GetMem(MAX_PATH * SizeOf(WideChar)); StrPCopyW(pwcRemoteName, CeUtf8ToUtf16(RemoteName)); Result:= FsExecuteFileW(MainWin, pwcRemoteName, PWideChar(CeUtf8ToUtf16(Verb))); if Result = FS_EXEC_SYMLINK then RemoteName:= UTF16ToUTF8(UnicodeString(pwcRemoteName)); FreeMem(pwcRemoteName); end else if Assigned(FsExecuteFile) then begin pacRemoteName:= GetMem(MAX_PATH); StrPCopy(pacRemoteName, CeUtf8ToSys(RemoteName)); Result:= FsExecuteFile(MainWin, pacRemoteName, PAnsiChar(CeUtf8ToSys(Verb))); if Result = FS_EXEC_SYMLINK then RemoteName:= CeSysToUtf8(StrPas(pacRemoteName)); FreeMem(pacRemoteName); end; end; function TWFXModule.WfxRenMovFile(OldName, NewName: String; Move, OverWrite: Boolean; RemoteInfo: PRemoteInfo): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsRenMovFileW) then Result:= FsRenMovFileW(PWideChar(CeUtf8ToUtf16(OldName)), PWideChar(CeUtf8ToUtf16(NewName)), Move, OverWrite, RemoteInfo) else if Assigned(FsRenMovFile) then Result:= FsRenMovFile(PAnsiChar(CeUtf8ToSys(OldName)), PAnsiChar(CeUtf8ToSys(NewName)), Move, OverWrite, RemoteInfo); end; function TWFXModule.WfxGetFile(RemoteName, LocalName: String; CopyFlags: Integer; RemoteInfo: PRemoteInfo): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsGetFileW) then Result:= FsGetFileW(PWideChar(CeUtf8ToUtf16(RemoteName)), PWideChar(CeUtf8ToUtf16(LocalName)), CopyFlags, RemoteInfo) else if Assigned(FsGetFile) then Result:= FsGetFile(PAnsiChar(CeUtf8ToSys(RemoteName)), PAnsiChar(CeUtf8ToSys(LocalName)), CopyFlags, RemoteInfo); end; function TWFXModule.WfxPutFile(LocalName, RemoteName: String; CopyFlags: Integer): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsPutFileW) then Result:= FsPutFileW(PWideChar(CeUtf8ToUtf16(LocalName)), PWideChar(CeUtf8ToUtf16(RemoteName)), CopyFlags) else if Assigned(FsPutFile) then Result:= FsPutFile(PAnsiChar(CeUtf8ToSys(LocalName)), PAnsiChar(CeUtf8ToSys(RemoteName)), CopyFlags); end; function TWFXModule.WfxSetAttr(RemoteName: String; NewAttr: LongInt): Boolean; begin Result:= False; if Assigned(FsSetAttrW) then Result:= FsSetAttrW(PWideChar(CeUtf8ToUtf16(RemoteName)), NewAttr) else if Assigned(FsSetAttr) then Result:= FsSetAttr(PAnsiChar(CeUtf8ToSys(RemoteName)), NewAttr); end; function TWFXModule.WfxSetTime(RemoteName: String; pCreationTime, pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean; begin Result:= False; if Assigned(FsSetTimeW) then Result:= FsSetTimeW(PWideChar(CeUtf8ToUtf16(RemoteName)), pCreationTime, pLastAccessTime, pLastWriteTime) else if Assigned(FsSetTime) then Result:= FsSetTime(PAnsiChar(CeUtf8ToSys(RemoteName)), pCreationTime, pLastAccessTime, pLastWriteTime); end; function TWFXModule.WfxMkDir(const sBasePath, sDirName: String): LongInt; begin Result:= WFX_NOTSUPPORTED; if Assigned(FsMkDirW) then begin WfxStatusInfo(sBasePath, FS_STATUS_START, FS_STATUS_OP_MKDIR); if FsMkDirW(PWideChar(CeUtf8ToUtf16(sDirName))) then Result:= WFX_SUCCESS else Result:= WFX_ERROR; WfxStatusInfo(sBasePath, FS_STATUS_END, FS_STATUS_OP_MKDIR); end else if Assigned(FsMkDir) then begin WfxStatusInfo(sBasePath, FS_STATUS_START, FS_STATUS_OP_MKDIR); if FsMkDir(PAnsiChar(CeUtf8ToSys(sDirName))) then Result:= WFX_SUCCESS else Result:= WFX_ERROR; WfxStatusInfo(sBasePath, FS_STATUS_END, FS_STATUS_OP_MKDIR); end; end; function TWFXModule.WfxRemoveDir(const sDirName: String): Boolean; begin Result:= False; if Assigned(FsRemoveDirW) then Result:= FsRemoveDirW(PWideChar(CeUtf8ToUtf16(sDirName))) else if Assigned(FsRemoveDir) then Result:= FsRemoveDir(PAnsiChar(CeUtf8ToSys(sDirName))); end; function TWFXModule.WfxDeleteFile(const sFileName: String): Boolean; begin Result:= False; if Assigned(FsDeleteFileW) then Result:= FsDeleteFileW(PWideChar(CeUtf8ToUtf16(sFileName))) else if Assigned(FsDeleteFile) then Result:= FsDeleteFile(PAnsiChar(CeUtf8ToSys(sFileName))); end; function TWFXModule.WfxGetLocalName(var sFileName: String): Boolean; var pacRemoteName: PAnsiChar; pwcRemoteName: PWideChar; begin Result:= False; if Assigned(FsGetLocalNameW) then begin pwcRemoteName:= GetMem(MAX_PATH * SizeOf(WideChar)); StrPCopyW(pwcRemoteName, CeUtf8ToUtf16(sFileName)); Result:= FsGetLocalNameW(pwcRemoteName, MAX_PATH); if Result = True then sFileName:= UTF16ToUTF8(UnicodeString(pwcRemoteName)); FreeMem(pwcRemoteName); end else if Assigned(FsGetLocalName) then begin pacRemoteName:= GetMem(MAX_PATH); StrPCopy(pacRemoteName, CeUtf8ToSys(sFileName)); Result:= FsGetLocalName(pacRemoteName, MAX_PATH); if Result = True then sFileName:= CeSysToUtf8(StrPas(pacRemoteName)); FreeMem(pacRemoteName); end; end; function TWFXModule.WfxDisconnect(const DisconnectRoot: String): Boolean; begin if Assigned(FsDisconnectW) then Result:= FsDisconnectW(PWideChar(CeUtf8ToUtf16(DisconnectRoot))) else if Assigned(FsDisconnect) then Result:= FsDisconnect(PAnsiChar(CeUtf8ToSys(DisconnectRoot))) else Result:= False; end; function TWFXModule.WfxContentGetDefaultView(out DefaultView: TFileSourceFields): Boolean; const MAX_LEN = 4096; var Index: Integer; ViewContents, ViewHeaders, ViewWidths, ViewOptions: TStringArray; usContents, usHeaders, usWidths, usOptions: String; asContents, asHeaders, asWidths, asOptions: array[0..MAX_LEN] of AnsiChar; wsContents, wsHeaders, wsWidths, wsOptions: array[0..MAX_LEN] of WideChar; begin Result:= False; DefaultView:= Default(TFileSourceFields); if Assigned(FsContentGetDefaultViewW) then begin Result:= FsContentGetDefaultViewW(wsContents, wsHeaders, wsWidths, wsOptions, MAX_LEN); if Result then begin usContents:= CeUtf16ToUtf8(wsContents); usHeaders:= CeUtf16ToUtf8(wsHeaders); usWidths:= CeUtf16ToUtf8(wsWidths); usOptions:= CeUtf16ToUtf8(wsOptions); end; end else if Assigned(FsContentGetDefaultView) then begin Result:= FsContentGetDefaultView(asContents, asHeaders, asWidths, asOptions, MAX_LEN); if Result then begin usContents:= CeSysToUtf8(asContents); usHeaders:= CeSysToUtf8(asHeaders); usWidths:= CeSysToUtf8(asWidths); usOptions:= CeSysToUtf8(asOptions); end; end; if Result then begin ViewHeaders:= ConvertString(usHeaders); ViewWidths:= SplitString(usWidths, ','); ViewOptions:= SplitString(usOptions,'|'); ViewContents:= ConvertString(usContents); SetLength(DefaultView, Length(ViewWidths)); for Index:= Low(DefaultView) to High(DefaultView) do begin if (Index = 0) then begin DefaultView[Index].Header:= rsColName; DefaultView[Index].Content:= '[DC().GETFILENAMENOEXT{}]'; end else if (Index = 1) then begin DefaultView[Index].Header:= rsColExt; DefaultView[Index].Content:= '[DC().GETFILEEXT{}]'; end else begin DefaultView[Index].Header:= ViewHeaders[Index - 2]; DefaultView[Index].Content:= ConvertFunction(ViewContents[Index - 2]); end; DefaultView[Index].Width:= StrToInt(ViewWidths[Index]); if (DefaultView[Index].Width < 0) then begin DefaultView[Index].Align:= taRightJustify; DefaultView[Index].Width:= Abs(DefaultView[Index].Width); end else begin DefaultView[Index].Align:= taLeftJustify; end; end; end; end; constructor TWFXModule.Create; begin inherited; FName:= 'FS'; end; destructor TWFXModule.Destroy; begin if IsLoaded then begin if Assigned(ContentPluginUnloading) then ContentPluginUnloading; if Assigned(ExtensionFinalize) then ExtensionFinalize(nil); end; inherited Destroy; end; function TWFXModule.LoadModule(const sName: String): Boolean; var AHandle: TLibHandle; begin EnterCriticalSection(FMutex); try if FModuleHandle <> NilHandle then Exit(True); FModulePath:= mbExpandFileName(sName); AHandle := mbLoadLibrary(FModulePath); Result := AHandle <> NilHandle; if not Result then Exit; { Mandatory } FsInit := TFsInit(GetProcAddress(AHandle,'FsInit')); FsFindFirst := TFsFindFirst(GetProcAddress(AHandle,'FsFindFirst')); FsFindNext := TFsFindNext(GetProcAddress(AHandle,'FsFindNext')); FsFindClose := TFsFindClose(GetProcAddress(AHandle,'FsFindClose')); { Unicode } FsInitW := TFsInitW(GetProcAddress(AHandle,'FsInitW')); FsFindFirstW := TFsFindFirstW(GetProcAddress(AHandle,'FsFindFirstW')); FsFindNextW := TFsFindNextW(GetProcAddress(AHandle,'FsFindNextW')); Result:= (FsInit <> nil) and (FsFindFirst <> nil) and (FsFindNext <> nil); if (Result = False) then begin FsInit:= nil; FsFindFirst:= nil; FsFindNext:= nil; Result:= (FsInitW <> nil) and (FsFindFirstW <> nil) and (FsFindNextW <> nil); end; if (Result = False) or (FsFindClose = nil) then begin FsInitW:= nil; FsFindFirstW:= nil; FsFindNextW:= nil; FsFindClose:= nil; FreeLibrary(AHandle); Exit(False); end; { Optional } FsSetCryptCallback:= TFsSetCryptCallback(GetProcAddress(AHandle,'FsSetCryptCallback')); FsGetDefRootName := TFsGetDefRootName(GetProcAddress(AHandle,'FsGetDefRootName')); FsExecuteFile := TFsExecuteFile(GetProcAddress(AHandle,'FsExecuteFile')); FsGetFile := TFsGetFile(GetProcAddress(AHandle,'FsGetFile')); FsPutFile := TFsPutFile(GetProcAddress(AHandle,'FsPutFile')); FsDeleteFile := TFsDeleteFile(GetProcAddress(AHandle,'FsDeleteFile')); FsMkDir := TFsMkDir(GetProcAddress(AHandle,'FsMkDir')); FsRemoveDir := TFsRemoveDir(GetProcAddress(AHandle,'FsRemoveDir')); FsStatusInfo := TFsStatusInfo(GetProcAddress(AHandle,'FsStatusInfo')); FsSetDefaultParams := TFsSetDefaultParams(GetProcAddress(AHandle,'FsSetDefaultParams')); //--------------------- FsSetAttr := TFsSetAttr (GetProcAddress(AHandle,'FsSetAttr')); FsSetTime := TFsSetTime (GetProcAddress(AHandle,'FsSetTime')); FsExtractCustomIcon := TFsExtractCustomIcon (GetProcAddress(AHandle,'FsExtractCustomIcon')); FsRenMovFile := TFsRenMovFile (GetProcAddress(AHandle,'FsRenMovFile')); FsDisconnect := TFsDisconnect (GetProcAddress(AHandle,'FsDisconnect')); FsGetPreviewBitmap := TFsGetPreviewBitmap (GetProcAddress(AHandle,'FsGetPreviewBitmap')); FsLinksToLocalFiles := TFsLinksToLocalFiles (GetProcAddress(AHandle,'FsLinksToLocalFiles')); FsGetLocalName := TFsGetLocalName (GetProcAddress(AHandle,'FsGetLocalName')); //--------------------- FsGetBackgroundFlags := TFsGetBackgroundFlags (GetProcAddress(AHandle,'FsGetBackgroundFlags')); //--------------------- FsContentGetDefaultView := TFsContentGetDefaultView (GetProcAddress(AHandle,'FsContentGetDefaultView')); ContentSetDefaultParams := TContentSetDefaultParams (GetProcAddress(AHandle,'FsContentSetDefaultParams')); ContentGetDetectString := TFsContentGetDetectString (GetProcAddress(AHandle,'FsContentGetDetectString')); ContentGetSupportedField := TFsContentGetSupportedField (GetProcAddress(AHandle,'FsContentGetSupportedField')); ContentGetValue := TFsContentGetValue (GetProcAddress(AHandle,'FsContentGetValue')); ContentStopGetValue := TFsContentStopGetValue (GetProcAddress(AHandle,'FsContentStopGetValue')); ContentGetDefaultSortOrder := TFsContentGetDefaultSortOrder (GetProcAddress(AHandle,'FsContentGetDefaultSortOrder')); ContentGetSupportedFieldFlags := TFsContentGetSupportedFieldFlags (GetProcAddress(AHandle,'FsContentGetSupportedFieldFlags')); ContentSetValue := TFsContentSetValue (GetProcAddress(AHandle,'FsContentSetValue')); ContentPluginUnloading := TFsContentPluginUnloading(GetProcAddress(AHandle,'FsContentPluginUnloading')); { Unicode } FsSetCryptCallbackW:= TFsSetCryptCallbackW(GetProcAddress(AHandle,'FsSetCryptCallbackW')); FsMkDirW := TFsMkDirW(GetProcAddress(AHandle,'FsMkDirW')); FsExecuteFileW := TFsExecuteFileW(GetProcAddress(AHandle,'FsExecuteFileW')); FsRenMovFileW := TFsRenMovFileW(GetProcAddress(AHandle,'FsRenMovFileW')); FsGetFileW := TFsGetFileW(GetProcAddress(AHandle,'FsGetFileW')); FsPutFileW := TFsPutFileW(GetProcAddress(AHandle,'FsPutFileW')); FsDeleteFileW := TFsDeleteFileW(GetProcAddress(AHandle,'FsDeleteFileW')); FsRemoveDirW := TFsRemoveDirW(GetProcAddress(AHandle,'FsRemoveDirW')); FsDisconnectW := TFsDisconnectW(GetProcAddress(AHandle,'FsDisconnectW')); FsSetAttrW := TFsSetAttrW (GetProcAddress(AHandle,'FsSetAttrW')); FsSetTimeW := TFsSetTimeW (GetProcAddress(AHandle,'FsSetTimeW')); FsStatusInfoW := TFsStatusInfoW(GetProcAddress(AHandle,'FsStatusInfoW')); FsExtractCustomIconW := TFsExtractCustomIconW(GetProcAddress(AHandle,'FsExtractCustomIconW')); FsGetLocalNameW := TFsGetLocalNameW(GetProcAddress(AHandle,'FsGetLocalNameW')); //-------------------------- FsContentGetDefaultViewW := TFsContentGetDefaultViewW(GetProcAddress(AHandle,'FsContentGetDefaultViewW')); ContentGetValueW := TFsContentGetValueW(GetProcAddress(AHandle, 'FsContentGetValueW')); ContentStopGetValueW := TFsContentStopGetValueW(GetProcAddress(AHandle, 'FsContentStopGetValueW')); ContentSetValueW := TFsContentSetValueW(GetProcAddress(AHandle, 'FsContentSetValueW')); { Extension API } ExtensionInitialize:= TExtensionInitializeProc(GetProcAddress(AHandle,'ExtensionInitialize')); ExtensionFinalize:= TExtensionFinalizeProc(GetProcAddress(AHandle,'ExtensionFinalize')); VFSInit; FModuleHandle := AHandle; finally LeaveCriticalSection(FMutex); end; end; procedure TWFXModule.UnloadModule; var AHandle: TLibHandle; begin EnterCriticalSection(FMutex); try if FModuleHandle <> NilHandle then begin AHandle:= FModuleHandle; FModuleHandle := NilHandle; FreeLibrary(AHandle); end; { Mandatory } FsInit := nil; FsFindFirst := nil; FsFindNext := nil; FsFindClose := nil; { Optional } FsSetCryptCallback := nil; FsGetDefRootName := nil; FsGetFile := nil; FsPutFile := nil; FsDeleteFile := nil; FsRemoveDir := nil; FsExecuteFile := nil; FsMkDir := nil; FsStatusInfo := nil; FsSetDefaultParams:=nil; //--------------------- FsSetAttr := nil; FsSetTime := nil; FsExtractCustomIcon := nil; FsRenMovFile := nil; FsDisconnect := nil; FsGetPreviewBitmap := nil; FsLinksToLocalFiles := nil; FsGetLocalName := nil; //--------------------- FsGetBackgroundFlags := nil; //--------------------- FsContentGetDefaultView := nil; ContentGetDetectString := nil; ContentGetSupportedField := nil; ContentGetValue := nil; ContentSetDefaultParams := nil; ContentStopGetValue := nil; ContentGetDefaultSortOrder := nil; ContentGetSupportedFieldFlags := nil; ContentSetValue := nil; ContentPluginUnloading := nil; { Unicode } FsInitW := nil; FsFindFirstW := nil; FsFindNextW := nil; //--------------------- FsSetCryptCallbackW:= nil; FsMkDirW := nil; FsExecuteFileW := nil; FsRenMovFileW := nil; FsGetFileW := nil; FsPutFileW := nil; FsDeleteFileW := nil; FsRemoveDirW := nil; FsDisconnectW := nil; FsSetAttrW := nil; FsSetTimeW := nil; FsStatusInfoW := nil; FsExtractCustomIconW := nil; FsGetLocalNameW := nil; //--------------------- FsContentGetDefaultViewW := nil; ContentGetValueW := nil; ContentStopGetValueW := nil; ContentSetValueW := nil; // Extension API ExtensionInitialize:= nil; ExtensionFinalize:= nil; finally LeaveCriticalSection(FMutex); end; end; procedure TWFXModule.VFSInit; var dps: tFsDefaultParamStruct; StartupInfo: TExtensionStartupInfo; begin if Assigned(FsSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WfxIniFileName); dps.PluginInterfaceVersionHi:= 2; dps.PluginInterfaceVersionLow:= 0; dps.Size:= SizeOf(dps); FsSetDefaultParams(@dps); end; if not Assigned(FsGetBackgroundFlags) then FBackgroundFlags:= 0 else FBackgroundFlags:= FsGetBackgroundFlags(); // Extension API if Assigned(ExtensionInitialize) then begin InitializeExtension(@StartupInfo); ExtensionInitialize(@StartupInfo); end; CallContentSetDefaultParams; CallContentGetSupportedField; if Length(Self.DetectStr) = 0 then Self.DetectStr := CallContentGetDetectString; end; function TWFXModule.VFSConfigure(Parent: HWND): Boolean; var RemoteName: String; begin try RemoteName:= PathDelim; WFXStatusInfo(PathDelim, FS_STATUS_START, FS_STATUS_OP_EXEC); Result:= (WfxExecuteFile(Parent, RemoteName, 'properties') = FS_EXEC_OK); WFXStatusInfo(PathDelim, FS_STATUS_END, FS_STATUS_OP_EXEC); except on E: Exception do begin Result:= False; end; end; end; function TWFXModule.VFSRootName: String; var pcRootName : PAnsiChar; begin Result:= EmptyStr; if Assigned(FsGetDefRootName) then begin pcRootName:= GetMem(MAX_PATH); Assert(Assigned(pcRootName)); try FsGetDefRootName(pcRootName, MAX_PATH); Result := RepairPluginName(StrPas(pcRootName)); finally FreeMem(pcRootName); end; end; end; function TWFXModule.ContentPlugin: Boolean; begin Result:= Assigned(ContentGetValue) or Assigned(ContentGetValueW); end; { TWFXModuleList } function TWFXModuleList.GetAEnabled(Index: Integer): Boolean; begin Result:= Boolean(PtrInt(Objects[Index])); end; function TWFXModuleList.GetAFileName(Index: Integer): String; begin Result:= ValueFromIndex[Index]; end; function TWFXModuleList.GetAName(Index: Integer): String; begin Result:= Names[Index]; end; procedure TWFXModuleList.SetAEnabled(Index: Integer; const AValue: Boolean); begin Objects[Index]:= TObject(PtrInt(AValue)); end; procedure TWFXModuleList.SetAFileName(Index: Integer; const AValue: String); begin ValueFromIndex[Index]:= AValue; end; procedure TWFXModuleList.SetAName(Index: Integer; const AValue: String); var sValue : String; begin sValue:= ValueFromIndex[Index]; Self[Index]:= AValue + '=' + sValue; end; constructor TWFXModuleList.Create; begin FModuleList:= TStringListEx.Create; FModuleList.Sorted:= True; end; destructor TWFXModuleList.Destroy; var I: Integer; begin for I:= 0 to FModuleList.Count - 1 do begin TWfxModule(FModuleList.Objects[I]).Free; end; FreeAndNil(FModuleList); inherited Destroy; end; procedure TWFXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; AName, APath: String; begin Clear; ANode := ANode.FindNode('WfxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WfxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin I := Add(RepairPluginName(AName), APath); Enabled[I] := AConfig.GetAttr(ANode, 'Enabled', True); end; end; ANode := ANode.NextSibling; end; end; end; procedure TWFXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WfxPlugins', True); AConfig.ClearNode(ANode); for I := 0 to Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WfxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', Enabled[I]); AConfig.AddValue(SubNode, 'Name', Name[I]); AConfig.AddValue(SubNode, 'Path', FileName[I]); end; end; { TWFXModuleList.ComputeSignature } function TWFXModuleList.ComputeSignature(seed: dword): dword; var iIndex: integer; begin result := seed; for iIndex := 0 to pred(Count) do begin result := ComputeSignatureBoolean(result, Enabled[iIndex]); result := ComputeSignatureString(result, Name[iIndex]); result := ComputeSignatureString(result, FileName[iIndex]); end; end; function TWFXModuleList.Add(Ext: String; FileName: String): Integer; begin Result:= AddObject(Ext + '=' + FileName, TObject(True)); end; function TWFXModuleList.FindFirstEnabledByName(Name: String): Integer; begin for Result := 0 to Count - 1 do if Enabled[Result] and (DoCompareText(Names[Result], Name) = 0) then Exit; Result := -1; end; function TWFXModuleList.LoadModule(const FileName: String): TWfxModule; var Index: Integer; begin if FModuleList.Find(FileName, Index) then Result := TWfxModule(FModuleList.Objects[Index]) else begin Result := TWfxModule.Create; if not Result.LoadModule(FileName) then FreeAndNil(Result) else begin FModuleList.AddObject(FileName, Result); end; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwdxprototypes.pas�������������������������������������������������������������0000644�0001750�0000144�00000004007�15104114162�017222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uwdxprototypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, WdxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory (must be implemented) } TContentGetSupportedField = function (FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; TContentGetValue = function (FileName:pchar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; { Optional (must NOT be implemented if unsupported!) } TContentGetDetectString = procedure (DetectString:pchar;maxlen:integer); TContentSetDefaultParams = procedure (dps:pContentDefaultParamStruct); TContentStopGetValue = procedure (FileName:pchar); TContentGetDefaultSortOrder = function (FieldIndex:integer):integer; TContentPluginUnloading = procedure; TContentGetSupportedFieldFlags = function (FieldIndex:integer):integer; TContentSetValue = function (FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TContentEditValue = function (handle:thandle;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pchar;maxlen:integer;flags:integer; langidentifier:pchar):integer; TContentSendStateInformation = procedure (state:integer;path:pchar); { Unicode } TContentGetValueW = function (FileName:pwidechar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; TContentStopGetValueW = procedure (FileName:pwidechar); TContentSetValueW = function (FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TContentSendStateInformationW = procedure (state:integer;path:pwidechar); {$CALLING DEFAULT} implementation end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwdxmodule.pas�����������������������������������������������������������������0000644�0001750�0000144�00000125657�15104114162�016276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- WDX-API implementation. (TC WDX-API v1.5) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2024 Alexander Koblov (alexx2000@mail.ru) Some ideas were found in sources of WdxGuide by Alexey Torgashin and SuperWDX by Pavel Dubrovsky and Dmitry Vorotilin. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uWDXModule; {$mode delphi}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, dynlibs, //DC uLng, uWdxPrototypes, WdxPlugin, uDetectStr, lua, uFile, DCXmlConfig, uExtension; const WDX_MAX_LEN = 2048; type { TWdxField } TWdxField = class private OUnits: String; // Units (original) public FName: String; // Field name (english) LName: String; // Field name (localized) FType: Integer; FUnits: TStringArray; // Units (english) LUnits: TStringArray; // Units (localized) function GetUnitIndex(UnitName: String): Integer; end; { TWDXModule } TWDXModule = class(TDcxModule) private FFieldsList: TStringList; FParser: TParserControl; protected FFileName: String; FMutex: TRTLCriticalSection; protected procedure Translate; function GetADetectStr: String; virtual; procedure SetADetectStr(const AValue: String); virtual; procedure AddField(const AName, AUnits: String; AType: Integer); protected function GetAName: String; virtual; abstract; function GetAFileName: String; virtual; abstract; procedure SetAName(AValue: String); virtual; abstract; procedure SetAFileName(AValue: String); virtual; abstract; public //--------------------- constructor Create; virtual; destructor Destroy; override; //--------------------- function LoadModule: Boolean; virtual; abstract; procedure UnloadModule; virtual; abstract; function IsLoaded: Boolean; virtual; abstract; //--------------------- function FieldList: TStringList; virtual; function WdxFieldType(n: Integer): String; function GetFieldIndex(FieldName: String): Integer; virtual; function FileParamVSDetectStr(const aFile: TFile): Boolean; virtual; //------------------------------------------------------ procedure CallContentGetSupportedField; virtual; abstract; procedure CallContentSetDefaultParams; virtual; abstract; procedure CallContentStopGetValue(FileName: String); virtual; abstract; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; virtual; abstract; function CallContentGetDetectString: String; virtual; abstract; function CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; overload; virtual; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; virtual; abstract; function CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; overload; virtual; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; virtual; abstract; function CallContentGetValue(FileName: String; FieldIndex: Integer; var UnitIndex: Integer): String; overload; virtual; abstract; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; virtual; abstract; {ContentSetValue ContentEditValue ContentSendStateInformation} //------------------------------------------------------ property Name: String read GetAName write SetAName; property FileName: String read GetAFileName write SetAFileName; property DetectStr: String read GetADetectStr write SetADetectStr; //--------------------- end; { TPluginWDX } TPluginWDX = class(TWDXModule) protected FForce: Boolean; FName: String; protected function GetAName: String; override; function GetAFileName: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; protected //a) Mandatory (must be implemented) ContentGetSupportedField: TContentGetSupportedField; ContentGetValue: TContentGetValue; //b) Optional (must NOT be implemented if unsupported!) ContentGetDetectString: TContentGetDetectString; ContentSetDefaultParams: TContentSetDefaultParams; ContentStopGetValue: TContentStopGetValue; ContentGetDefaultSortOrder: TContentGetDefaultSortOrder; ContentPluginUnloading: TContentPluginUnloading; ContentGetSupportedFieldFlags: TContentGetSupportedFieldFlags; ContentSetValue: TContentSetValue; ContentEditValue: TContentEditValue; ContentSendStateInformation: TContentSendStateInformation; //c) Unicode ContentGetValueW: TContentGetValueW; ContentStopGetValueW: TContentStopGetValueW; ContentSetValueW: TContentSetValueW; ContentSendStateInformationW: TContentSendStateInformationW; public //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; override; //--------------------- procedure CallContentGetSupportedField; override; procedure CallContentSetDefaultParams; override; procedure CallContentStopGetValue(FileName: String); override; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; override; function CallContentGetDetectString: String; override; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; override; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; override; function CallContentGetValue(FileName: String; FieldIndex: Integer; var UnitIndex: Integer): String; overload; override; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; override; {ContentSetValue ContentEditValue ContentSendStateInformation} //------------------------------------------------------ property ModuleHandle: TLibHandle read FModuleHandle; property Force: Boolean read FForce write FForce; //--------------------- end; { TLuaWdx } TLuaWdx = class(TWdxModule) private L: Plua_State; FForce: Boolean; FName: String; protected function GetAName: String; override; function GetAFileName: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; function DoScript(AName: String): Integer; function WdxLuaContentGetSupportedField(Index: Integer; var xFieldName, xUnits: String): Integer; procedure WdxLuaContentPluginUnloading; public constructor Create; override; //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; override; //--------------------- procedure CallContentGetSupportedField; override; procedure CallContentSetDefaultParams; override; procedure CallContentStopGetValue(FileName: String); override; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; override; function CallContentGetDetectString: String; override; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; override; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; override; function CallContentGetValue(FileName: String; FieldIndex: Integer; var UnitIndex: Integer): String; overload; override; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; override; //--------------------- property Force: Boolean read FForce write FForce; end; { TEmbeddedWDX } TEmbeddedWDX = class(TWDXModule) protected function GetAName: String; override; function GetAFileName: String; override; procedure SetAName({%H-}AValue: String); override; procedure SetAFileName({%H-}AValue: String); override; protected procedure AddField(const AName, XName: String; AType: Integer); public //--------------------- constructor Create; override; //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; override; //--------------------- function GetFieldIndex(FieldName: String): Integer; override; end; { TWDXModuleList } TWDXModuleList = class private Flist: TStringList; function GetCount: Integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Assign(Source: TWDXModuleList); function IndexOfName(const AName: String): Integer; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Move(CurIndex, NewIndex: Integer); procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function ComputeSignature(seed: dword): dword; procedure DeleteItem(Index: Integer); //--------------------- function Add(Item: TWDXModule): Integer; overload; function Add(FileName: String): Integer; overload; function Add(AName, FileName, DetectStr: String): Integer; overload; function IsLoaded(AName: String): Boolean; overload; function IsLoaded(Index: Integer): Boolean; overload; function LoadModule(AName: String): Boolean; overload; function LoadModule(Index: Integer): Boolean; overload; function GetWdxModule(Index: Integer): TWDXModule; overload; function GetWdxModule(AName: String): TWDXModule; overload; //--------------------- //property WdxList:TStringList read Flist; property Count: Integer read GetCount; end; function StrToVar(const Value: String; FieldType: Integer): Variant; implementation uses //Lazarus, Free-Pascal, etc. Math, StrUtils, LazUTF8, FileUtil, //DC DCClassesUtf8, DCStrUtils, uComponentsSignature, uGlobs, uGlobsPaths, uDebug, uDCUtils, uOSUtils, DCBasicTypes, DCOSUtils, DCDateTimeUtils, DCConvertEncoding, uLuaPas; const WdxIniFileName = 'wdx.ini'; type TWdxModuleClass = class of TWdxModule; // Language code conversion table // Double Commander <-> Total Commander const WdxLangTable: array[0..30, 0..1] of String = ( ('be', 'BEL'), ('bg', 'BUL'), ('ca', 'CAT'), ('zh_CN', 'CHN'), ('cs', 'CZ' ), ('da', 'DAN'), ('de', 'DEU'), ('nl', 'DUT'), ('el', 'ELL'), ('es', 'ESP'), ('fr', 'FRA'), ('hr', 'HR' ), ('hu', 'HUN'), ('it', 'ITA'), ('ja', 'JPN'), ('ko', 'KOR'), ('nb', 'NOR'), ('nn', 'NOR'), ('pl', 'POL'), ('pt', 'POR'), ('pt_BR', 'PTG'), ('ro', 'ROM'), ('ru', 'RUS'), ('sk', 'SK' ), ('sr', 'SRB'), ('sr@latin', 'SRL'), ('sl', 'SVN'), ('sv', 'SWE'), ('tr', 'TUR'), ('zh_TW', 'TW' ), ('uk', 'UKR') ); function GetWdxLang(const Code: String): String; var Index: Integer; begin for Index:= Low(WdxLangTable) to High(WdxLangTable) do begin if CompareStr(WdxLangTable[Index, 0], Code) = 0 then begin Exit(WdxLangTable[Index, 1]); end; end; Result:= Code; end; function StrToVar(const Value: String; FieldType: Integer): Variant; begin case FieldType of ft_fieldempty: Result := Unassigned; ft_numeric_32: Result := StrToInt(Value); ft_numeric_64: Result := StrToInt64(Value); ft_numeric_floating: Result := StrToFloat(Value); ft_date: Result := StrToDate(Value); ft_time: Result := StrToTime(Value); ft_datetime: Result := StrToDateTime(Value); ft_boolean: Result := ((LowerCase(Value) = 'true') OR (Value = rsSimpleWordTrue)); ft_multiplechoice, ft_string, ft_fulltext, ft_stringw: Result := Value; else Result := Unassigned; end; end; { TWDXModuleList } function TWDXModuleList.GetCount: Integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TWDXModuleList.Create; begin Flist := TStringList.Create; end; destructor TWDXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TWDXModuleList.Assign(Source: TWDXModuleList); var I: Integer; Module: TWDXModule; begin if Assigned(Source) then begin Clear; for I := 0 to Source.Flist.Count - 1 do begin with TWdxModule(Source.Flist.Objects[I]) do begin Module:= TWdxModuleClass(ClassType).Create; Module.Name:= Name; Module.FileName:= FileName; Module.DetectStr:= DetectStr; Add(Module); end; end; end; end; function TWDXModuleList.IndexOfName(const AName: String): Integer; begin Result := Flist.IndexOf(UpCase(AName)); end; procedure TWDXModuleList.Clear; var i: Integer; begin for i := 0 to Flist.Count - 1 do TWDXModule(Flist.Objects[i]).Free; Flist.Clear; end; procedure TWDXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TWDXModuleList.Move(CurIndex, NewIndex: Integer); begin FList.Move(CurIndex, NewIndex); end; procedure TWDXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; AWdxModule: TWDXModule; begin Self.Clear; ANode := ANode.FindNode('WdxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WdxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin // Create a correct object based on plugin file extension. if UpCase(ExtractFileExt(APath)) = '.LUA' then AWdxModule := TLuaWdx.Create else AWdxModule := TPluginWDX.Create; AWdxModule.Name := AName; AWdxModule.FileName := APath; AWdxModule.DetectStr := AConfig.GetValue(ANode, 'DetectString', ''); Flist.AddObject(UpCase(AName), AWdxModule); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWDXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WdxPlugins', True); AConfig.ClearNode(ANode); For i := 0 to Flist.Count - 1 do begin if not (Flist.Objects[I] is TEmbeddedWDX) then begin SubNode := AConfig.AddNode(ANode, 'WdxPlugin'); AConfig.AddValue(SubNode, 'Name', TWDXModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', TWDXModule(Flist.Objects[I]).FileName); AConfig.AddValue(SubNode, 'DetectString', TWDXModule(Flist.Objects[I]).DetectStr); end; end; end; { TWDXModuleList.ComputeSignature } function TWDXModuleList.ComputeSignature(seed: dword): dword; var iIndex: integer; begin result := seed; for iIndex := 0 to pred(Count) do begin result := ComputeSignatureString(result, TWDXModule(Flist.Objects[iIndex]).Name); result := ComputeSignatureString(result, TWDXModule(Flist.Objects[iIndex]).FileName); result := ComputeSignatureString(result, TWDXModule(Flist.Objects[iIndex]).DetectStr); end; end; procedure TWDXModuleList.DeleteItem(Index: Integer); begin if (Index > -1) and (Index < Flist.Count) then begin TWDXModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TWDXModuleList.Add(Item: TWDXModule): Integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TWDXModuleList.Add(FileName: String): Integer; var s: String; begin s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); if UpCase(ExtractFileExt(FileName)) = '.LUA' then Result := Flist.AddObject(UpCase(s), TLuaWdx.Create) else Result := Flist.AddObject(UpCase(s), TPluginWDX.Create); TWDXModule(Flist.Objects[Result]).Name := s; TWDXModule(Flist.Objects[Result]).FileName := FileName; if TWDXModule(Flist.Objects[Result]).LoadModule then begin TWDXModule(Flist.Objects[Result]).DetectStr := TWDXModule(Flist.Objects[Result]).CallContentGetDetectString; TWDXModule(Flist.Objects[Result]).UnloadModule; end; end; function TWDXModuleList.Add(AName, FileName, DetectStr: String): Integer; begin if UpCase(ExtractFileExt(FileName)) = '.LUA' then Result := Flist.AddObject(UpCase(AName), TLuaWdx.Create) else Result := Flist.AddObject(UpCase(AName), TPluginWDX.Create); TWDXModule(Flist.Objects[Result]).Name := AName; TWDXModule(Flist.Objects[Result]).DetectStr := DetectStr; TWDXModule(Flist.Objects[Result]).FileName := FileName; end; function TWDXModuleList.IsLoaded(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetWdxModule(x).IsLoaded; end; end; function TWDXModuleList.IsLoaded(Index: Integer): Boolean; begin Result := GetWdxModule(Index).IsLoaded; end; function TWDXModuleList.LoadModule(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetWdxModule(x).LoadModule; end; end; function TWDXModuleList.LoadModule(Index: Integer): Boolean; begin Result := GetWdxModule(Index).LoadModule; end; function TWDXModuleList.GetWdxModule(Index: Integer): TWDXModule; begin Result := TWDXModule(Flist.Objects[Index]); end; function TWDXModuleList.GetWdxModule(AName: String): TWDXModule; var tmp: Integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp < 0 then Exit(nil); Result := TWDXModule(Flist.Objects[tmp]) end; { TPluginWDX } function TPluginWDX.IsLoaded: Boolean; begin Result := FModuleHandle <> NilHandle; end; function TPluginWDX.GetAName: String; begin Result := FName; end; function TPluginWDX.GetAFileName: String; begin Result := FFileName; end; procedure TPluginWDX.SetAName(AValue: String); begin FName := AValue; end; procedure TPluginWDX.SetAFileName(AValue: String); begin FFileName := AValue; end; function TPluginWDX.LoadModule: Boolean; var AHandle: TLibHandle; begin EnterCriticalSection(FMutex); try if FModuleHandle <> NilHandle then Exit(True); AHandle := mbLoadLibrary(mbExpandFileName(Self.FileName)); Result := (AHandle <> NilHandle); if not Result then Exit; { Mandatory } ContentGetSupportedField := TContentGetSupportedField(GetProcAddress(AHandle, 'ContentGetSupportedField')); ContentGetValue := TContentGetValue(GetProcAddress(AHandle, 'ContentGetValue')); { Optional (must NOT be implemented if unsupported!) } ContentGetDetectString := TContentGetDetectString(GetProcAddress(AHandle, 'ContentGetDetectString')); ContentSetDefaultParams := TContentSetDefaultParams(GetProcAddress(AHandle, 'ContentSetDefaultParams')); ContentStopGetValue := TContentStopGetValue(GetProcAddress(AHandle, 'ContentStopGetValue')); ContentGetDefaultSortOrder := TContentGetDefaultSortOrder(GetProcAddress(AHandle, 'ContentGetDefaultSortOrder')); ContentPluginUnloading := TContentPluginUnloading(GetProcAddress(AHandle, 'ContentPluginUnloading')); ContentGetSupportedFieldFlags := TContentGetSupportedFieldFlags(GetProcAddress(AHandle, 'ContentGetSupportedFieldFlags')); ContentSetValue := TContentSetValue(GetProcAddress(AHandle, 'ContentSetValue')); ContentEditValue := TContentEditValue(GetProcAddress(AHandle, 'ContentEditValue')); ContentSendStateInformation := TContentSendStateInformation(GetProcAddress(AHandle, 'ContentSendStateInformation')); { Unicode } ContentGetValueW := TContentGetValueW(GetProcAddress(AHandle, 'ContentGetValueW')); ContentStopGetValueW := TContentStopGetValueW(GetProcAddress(AHandle, 'ContentStopGetValueW')); ContentSetValueW := TContentSetValueW(GetProcAddress(AHandle, 'ContentSetValueW')); ContentSendStateInformationW := TContentSendStateInformationW(GetProcAddress(AHandle, 'ContentSendStateInformationW')); CallContentSetDefaultParams; CallContentGetSupportedField; if Length(Self.DetectStr) = 0 then Self.DetectStr := CallContentGetDetectString; FModuleHandle := AHandle; finally LeaveCriticalSection(FMutex); end; end; procedure TPluginWDX.CallContentSetDefaultParams; var dps: tContentDefaultParamStruct; begin if assigned(ContentSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WdxIniFileName); dps.PluginInterfaceVersionHi := 1; dps.PluginInterfaceVersionLow := 50; dps.size := SizeOf(tContentDefaultParamStruct); ContentSetDefaultParams(@dps); end; end; procedure TPluginWDX.CallContentStopGetValue(FileName: String); begin if Assigned(ContentStopGetValueW) then ContentStopGetValueW(PWideChar(CeUtf8ToUtf16(FileName))) else if Assigned(ContentStopGetValue) then ContentStopGetValue(PAnsiChar(CeUtf8ToSys(FileName))); end; function TPluginWDX.CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; var x: Integer; begin if Assigned(ContentGetDefaultSortOrder) then begin x := ContentGetDefaultSortOrder(FieldIndex); case x of 1: Result := False; //a..z 1..9 -1: Result := True; //z..a 9..1 end; end; end; procedure TPluginWDX.UnloadModule; var AHandle: TLibHandle; begin EnterCriticalSection(FMutex); try if Assigned(ContentPluginUnloading) then ContentPluginUnloading; if FModuleHandle <> NilHandle then begin AHandle:= FModuleHandle; FModuleHandle := NilHandle; FreeLibrary(AHandle); end; { Mandatory } ContentGetSupportedField := nil; ContentGetValue := nil; { Optional (must NOT be implemented if unsupported!) } ContentGetDetectString := nil; ContentSetDefaultParams := nil; ContentStopGetValue := nil; ContentGetDefaultSortOrder := nil; ContentPluginUnloading := nil; ContentGetSupportedFieldFlags := nil; ContentSetValue := nil; ContentEditValue := nil; ContentSendStateInformation := nil; { Unicode } ContentGetValueW := nil; ContentStopGetValueW := nil; ContentSetValueW := nil; ContentSendStateInformationW := nil; finally LeaveCriticalSection(FMutex); end; end; procedure TPluginWDX.CallContentGetSupportedField; const MAX_LEN = 256; var sFieldName: String; Index, Rez: Integer; xFieldName, xUnits: array[0..Pred(MAX_LEN)] of AnsiChar; begin FFieldsList.Clear; if Assigned(ContentGetSupportedField) then begin Index := 0; xUnits[0] := #0; xFieldName[0] := #0; repeat Rez := ContentGetSupportedField(Index, xFieldName, xUnits, MAX_LEN); if Rez > ft_nomorefields then begin sFieldName := CeSysToUtf8(xFieldName); AddField(sFieldName, xUnits, Rez); end; Inc(Index); until (Rez <= ft_nomorefields); Translate; end; end; function TPluginWDX.CallContentGetDetectString: String; const MAX_LEN = 2048; // See contentplugin.hlp for details begin if not Assigned(ContentGetDetectString) then Result := EmptyStr else begin Result := StringOfChar(#0, MAX_LEN); ContentGetDetectString(PAnsiChar(Result), MAX_LEN); Result := Trim(PAnsiChar(Result)); end; end; function TPluginWDX.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; var Rez: Integer; ATime: TDateTime; Buf: array[0..WDX_MAX_LEN] of Byte; fnval: Integer absolute buf; fnval64: Int64 absolute buf; ffval: Double absolute buf; fdate: TDateFormat absolute buf; ftime: TTimeFormat absolute buf; wtime: TWinFileTime absolute buf; begin EnterCriticalSection(FMutex); try if Assigned(ContentGetValueW) then Rez := ContentGetValueW(PWideChar(CeUtf8ToUtf16(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags) else if Assigned(ContentGetValue) then Rez := ContentGetValue(PAnsiChar(mbFileNameToSysEnc(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags); case Rez of ft_fieldempty: Result := Unassigned; ft_numeric_32: Result := fnval; ft_numeric_64: Result := fnval64; ft_numeric_floating: Result := ffval; ft_date: begin if TryEncodeDate(fdate.wYear, fdate.wMonth, fdate.wDay, ATime) then Result := ATime else Result := Unassigned; end; ft_time: begin if TryEncodeTime(ftime.wHour, ftime.wMinute, ftime.wSecond, 0, ATime) then Result := ATime else Result := Unassigned; end; ft_datetime: Result := WinFileTimeToDateTime(wtime); ft_boolean: Result := Boolean(fnval); ft_multiplechoice, ft_string, ft_fulltext: Result := CeSysToUtf8(AnsiString(PAnsiChar(@Buf[0]))); ft_stringw, ft_fulltextw: Result := UTF16ToUTF8(UnicodeString(PWideChar(@Buf[0]))); else Result := Unassigned; end; finally LeaveCriticalSection(FMutex); end; end; function TPluginWDX.CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; var Rez: Integer; Buf: array[0..WDX_MAX_LEN] of Byte; fnval: Integer absolute buf; fnval64: Int64 absolute buf; ffval: Double absolute buf; fdate: TDateFormat absolute buf; ftime: TTimeFormat absolute buf; wtime: TWinFileTime absolute buf; begin EnterCriticalSection(FMutex); try if Assigned(ContentGetValueW) then Rez := ContentGetValueW(PWideChar(CeUtf8ToUtf16(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags) else if Assigned(ContentGetValue) then Rez := ContentGetValue(PAnsiChar(mbFileNameToSysEnc(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags); case Rez of ft_fieldempty: Result := ''; ft_numeric_32: Result := IntToStr(fnval); ft_numeric_64: Result := IntToStr(fnval64); ft_numeric_floating: Result := FloatToStr(ffval); ft_date: Result := Format('%2.2d.%2.2d.%4.4d', [fdate.wDay, fdate.wMonth, fdate.wYear]); ft_time: Result := Format('%2.2d:%2.2d:%2.2d', [ftime.wHour, ftime.wMinute, ftime.wSecond]); ft_datetime: Result := DateTimeToStr(WinFileTimeToDateTime(wtime)); ft_boolean: Result := ifThen((fnval = 0), rsSimpleWordFalse, rsSimpleWordTrue); ft_multiplechoice, ft_string, ft_fulltext: Result := CeSysToUtf8(AnsiString(PAnsiChar(@Buf[0]))); ft_stringw, ft_fulltextw: Result := UTF16ToUTF8(UnicodeString(PWideChar(@Buf[0]))); //TODO: FT_DELAYED,ft_ondemand else Result := ''; end; finally LeaveCriticalSection(FMutex); end; end; function TPluginWDX.CallContentGetValue(FileName: String; FieldIndex: Integer; var UnitIndex: Integer): String; var Rez: Integer; ValueA: AnsiString; ValueW: UnicodeString; Buf: array[0..WDX_MAX_LEN] of Byte; begin EnterCriticalSection(FMutex); try if Assigned(ContentGetValueW) then Rez := ContentGetValueW(PWideChar(CeUtf8ToUtf16(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), 0) else if Assigned(ContentGetValue) then Rez := ContentGetValue(PAnsiChar(mbFileNameToSysEnc(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), 0); case Rez of ft_fieldempty: Result := EmptyStr; ft_fulltext: begin ValueA:= AnsiString(PAnsiChar(@Buf[0])); Inc(UnitIndex, Length(ValueA)); Result := CeSysToUtf8(ValueA); end; ft_fulltextw: begin ValueW:= UnicodeString(PWideChar(@Buf[0])); Inc(UnitIndex, Length(ValueW) * SizeOf(WideChar)); Result := UTF16ToUTF8(ValueW); end; else begin Result := EmptyStr; end; end; finally LeaveCriticalSection(FMutex); end; end; function TPluginWDX.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin if assigned(ContentGetSupportedFieldFlags) then Result := ContentGetSupportedFieldFlags(FieldIndex); end; { TLuaWdx } function TLuaWdx.GetAName: String; begin Result := FName; end; function TLuaWdx.GetAFileName: String; begin Result := FFileName; end; procedure TLuaWdx.SetAName(AValue: String); begin FName := AValue; end; procedure TLuaWdx.SetAFileName(AValue: String); begin FFileName := AValue; end; function TLuaWdx.DoScript(AName: String): Integer; begin Result := LUA_ERRRUN; if not Assigned(L) then Exit; Result := luaL_dofile(L, PChar(AName)); if Result <> 0 then begin DCDebug('TLuaWdx.DoScript: ', lua_tostring(L, -1)); end; end; constructor TLuaWdx.Create; begin inherited Create; if not IsLuaLibLoaded then LoadLuaLib(mbExpandFileName(gLuaLib)); //Todo вынести загрузку либы в VmClass end; function TLuaWdx.LoadModule: Boolean; var sAbsolutePathFilename: string; begin EnterCriticalSection(FMutex); try Result := False; if (not IsLuaLibLoaded) or (L <> nil) then exit; L := lua_open; if not Assigned(L) then exit; luaL_openlibs(L); RegisterPackages(L); sAbsolutePathFilename := mbExpandFileName(FFilename); SetPackagePath(L, ExtractFilePath(sAbsolutePathFilename)); if DoScript(sAbsolutePathFilename) = 0 then Result := True else Result := False; CallContentSetDefaultParams; CallContentGetSupportedField; if Length(Self.DetectStr) = 0 then Self.DetectStr := CallContentGetDetectString; finally LeaveCriticalSection(FMutex); end; end; procedure TLuaWdx.UnloadModule; begin WdxLuaContentPluginUnloading; if Assigned(L) then begin lua_close(L); L := nil; end; end; function TLuaWdx.IsLoaded: Boolean; begin Result := IsLuaLibLoaded and Assigned(L); end; function TLuaWdx.WdxLuaContentGetSupportedField(Index: Integer; var xFieldName, xUnits: String): Integer; begin Result := ft_nomorefields; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetSupportedField'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, Index); LuaPCall(L, 1, 3); xFieldName := lua_tostring(L, -3); xUnits := lua_tostring(L, -2); Result := Integer(lua_tointeger(L, -1)); lua_pop(L, 3); end; procedure TLuaWdx.WdxLuaContentPluginUnloading; begin if not assigned(L) then exit; lua_getglobal(L, 'ContentPluginUnloading'); if not lua_isfunction(L, -1) then exit; LuaPCall(L, 0, 0); end; procedure TLuaWdx.CallContentGetSupportedField; var Index, Rez: Integer; xFieldName, xUnits: String; begin FFieldsList.Clear; Index := 0; repeat Rez := WdxLuaContentGetSupportedField(Index, xFieldName, xUnits); DCDebug('WDX:CallGetSupFields:' + IntToStr(Rez)); if Rez <> ft_nomorefields then begin AddField(xFieldName, xUnits, Rez); end; Inc(Index); until Rez = ft_nomorefields; Translate; end; procedure TLuaWdx.CallContentSetDefaultParams; begin if not assigned(L) then exit; lua_getglobal(L, 'ContentSetDefaultParams'); if not lua_isfunction(L, -1) then exit; lua_pushstring(L, PAnsiChar(gpCfgDir + WdxIniFileName)); lua_pushinteger(L, 1); lua_pushinteger(L, 50); LuaPCall(L, 3, 0); end; procedure TLuaWdx.CallContentStopGetValue(FileName: String); begin if not assigned(L) then exit; lua_getglobal(L, 'ContentStopGetValue'); if not lua_isfunction(L, -1) then exit; lua_pushstring(L, PAnsiChar(FileName)); LuaPCall(L, 1, 0); end; function TLuaWdx.CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; var x: Integer; begin Result := False; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetDefaultSortOrder'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, FieldIndex); LuaPCall(L, 1, 1); x := lua_tointeger(L, -1); case x of 1: Result := False; //a..z 1..9 -1: Result := True; //z..a 9..1 end; lua_pop(L, 1); end; function TLuaWdx.CallContentGetDetectString: String; begin Result := ''; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetDetectString'); if not lua_isfunction(L, -1) then exit; LuaPCall(L, 0, 1); Result := lua_tostring(L, -1); lua_pop(L, 1); end; function TLuaWdx.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; begin EnterCriticalSection(FMutex); try Result := Unassigned; if not Assigned(L) then Exit; lua_getglobal(L, 'ContentGetValue'); if not lua_isfunction(L, -1) then Exit; lua_pushstring(L, PAnsiChar(FileName)); lua_pushinteger(L, FieldIndex); lua_pushinteger(L, UnitIndex); lua_pushinteger(L, flags); LuaPCall(L, 4, 1); if not lua_isnil(L, -1) then begin case TWdxField(FieldList.Objects[FieldIndex]).FType of ft_string, ft_fulltext, ft_multiplechoice: Result := lua_tostring(L, -1); ft_numeric_32: Result := Int32(lua_tointeger(L, -1)); ft_numeric_64: Result := Int64(lua_tointeger(L, -1)); ft_boolean: Result := lua_toboolean(L, -1); ft_numeric_floating: Result := lua_tonumber(L, -1); ft_datetime: Result := WinFileTimeToDateTime(TWinFileTime(lua_tointeger(L, -1))); end; end; lua_pop(L, 1); finally LeaveCriticalSection(FMutex); end; end; function TLuaWdx.CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; begin EnterCriticalSection(FMutex); try Result := ''; if not Assigned(L) then Exit; lua_getglobal(L, 'ContentGetValue'); if not lua_isfunction(L, -1) then Exit; lua_pushstring(L, PAnsiChar(FileName)); lua_pushinteger(L, FieldIndex); lua_pushinteger(L, UnitIndex); lua_pushinteger(L, flags); LuaPCall(L, 4, 1); if not lua_isnil(L, -1) then begin case TWdxField(FieldList.Objects[FieldIndex]).FType of ft_string, ft_fulltext, ft_multiplechoice: Result := lua_tostring(L, -1); ft_numeric_32: Result := IntToStr(Int32(lua_tointeger(L, -1))); ft_numeric_64: Result := IntToStr(Int64(lua_tointeger(L, -1))); ft_numeric_floating: Result := FloatToStr(lua_tonumber(L, -1)); ft_boolean: Result := IfThen(lua_toboolean(L, -1), rsSimpleWordTrue, rsSimpleWordFalse); ft_datetime: Result := DateTimeToStr(WinFileTimeToDateTime(TWinFileTime(lua_tointeger(L, -1)))); end; end; lua_pop(L, 1); finally LeaveCriticalSection(FMutex); end; end; function TLuaWdx.CallContentGetValue(FileName: String; FieldIndex: Integer; var UnitIndex: Integer): String; begin EnterCriticalSection(FMutex); try Result := EmptyStr; if not Assigned(L) then Exit; lua_getglobal(L, 'ContentGetValue'); if not lua_isfunction(L, -1) then Exit; lua_pushstring(L, PAnsiChar(FileName)); lua_pushinteger(L, FieldIndex); lua_pushinteger(L, UnitIndex); lua_pushinteger(L, 0); LuaPCall(L, 4, 1); if not lua_isnil(L, -1) then begin Result := lua_tostring(L, -1); Inc(UnitIndex, Length(Result)); end; lua_pop(L, 1); finally LeaveCriticalSection(FMutex); end; end; function TLuaWdx.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin Result := 0; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetSupportedFieldFlags'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, FieldIndex); LuaPCall(L, 1, 1); Result := lua_tointeger(L, -1); lua_pop(L, 1); end; { TEmbeddedWDX } function TEmbeddedWDX.GetAName: String; begin Result:= EmptyStr; end; function TEmbeddedWDX.GetAFileName: String; begin Result:= ParamStrUTF8(0); end; procedure TEmbeddedWDX.SetAName(AValue: String); begin end; procedure TEmbeddedWDX.SetAFileName(AValue: String); begin end; procedure TEmbeddedWDX.AddField(const AName, XName: String; AType: Integer); var I: Integer; begin I := FFieldsList.AddObject(AName, TWdxField.Create); with TWdxField(FFieldsList.Objects[I]) do begin FName := AName; LName := XName; FType := AType; end; end; constructor TEmbeddedWDX.Create; begin inherited Create; CallContentGetSupportedField; end; function TEmbeddedWDX.LoadModule: Boolean; begin Result:= True; end; procedure TEmbeddedWDX.UnloadModule; begin end; function TEmbeddedWDX.IsLoaded: Boolean; begin Result:= True; end; function TEmbeddedWDX.GetFieldIndex(FieldName: String): Integer; var Index: Integer; begin Result:= inherited GetFieldIndex(FieldName); if Result < 0 then begin for Index:= 0 to FFieldsList.Count - 1 do begin if AnsiSameText(FieldName, TWdxField(FFieldsList.Objects[Index]).LName) then Exit(Index); end; end; end; { TWDXModule } procedure TWDXModule.Translate; var I: Integer; SUnits: String; Ini: TIniFileEx; UserLang: String; AFileName: String; AUnits: TStringArray; begin AFileName:= mbExpandFileName(ChangeFileExt(Self.FileName, '.lng')); if mbFileExists(AFileName) then begin UserLang:= GetWdxLang(ExtractDelimited(2, gpoFileName, ['.'])); if Length(UserLang) > 0 then try Ini:= TIniFileEx.Create(AFileName, fmOpenRead); try for I:= 0 to FFieldsList.Count - 1 do begin with TWdxField(FFieldsList.Objects[I]) do begin LName:= CeRawToUtf8(Ini.ReadString(UserLang, FName, FName)); if Length(OUnits) > 0 then begin SUnits:= CeRawToUtf8(Ini.ReadString(UserLang, OUnits, OUnits)); AUnits:= SplitString(sUnits, '|'); // Check that translation is valid if Length(AUnits) = Length(FUnits) then LUnits:= CopyArray(AUnits); end; end; end; finally Ini.Free; end; except // Skip end; end; end; function TWDXModule.GetADetectStr: String; begin Result:= FParser.DetectStr; end; procedure TWDXModule.SetADetectStr(const AValue: String); begin FParser.DetectStr:= AValue; end; procedure TWDXModule.AddField(const AName, AUnits: String; AType: Integer); var WdxField: TWdxField; begin WdxField:= TWdxField.Create; FFieldsList.AddObject(AName, WdxField); with WdxField do begin FName := AName; LName := FName; OUnits := AUnits; FUnits := SplitString(OUnits, '|'); LUnits := CopyArray(FUnits); FType := AType; end; end; constructor TWDXModule.Create; begin InitCriticalSection(FMutex); FParser:= TParserControl.Create; FFieldsList:= TStringList.Create; FFieldsList.OwnsObjects:= True; end; destructor TWDXModule.Destroy; begin FParser.Free; FFieldsList.Free; Self.UnloadModule; inherited Destroy; DoneCriticalSection(FMutex); end; function TWDXModule.FieldList: TStringList; begin Result:= FFieldsList; end; function TWDXModule.WdxFieldType(n: Integer): String; begin case n of FT_NUMERIC_32: Result := 'FT_NUMERIC_32'; FT_NUMERIC_64: Result := 'FT_NUMERIC_64'; FT_NUMERIC_FLOATING: Result := 'FT_NUMERIC_FLOATING'; FT_DATE: Result := 'FT_DATE'; FT_TIME: Result := 'FT_TIME'; FT_DATETIME: Result := 'FT_DATETIME'; FT_BOOLEAN: Result := 'FT_BOOLEAN'; FT_MULTIPLECHOICE: Result := 'FT_MULTIPLECHOICE'; FT_STRING: Result := 'FT_STRING'; FT_FULLTEXT: Result := 'FT_FULLTEXT'; FT_NOSUCHFIELD: Result := 'FT_NOSUCHFIELD'; FT_FILEERROR: Result := 'FT_FILEERROR'; FT_FIELDEMPTY: Result := 'FT_FIELDEMPTY'; FT_DELAYED: Result := 'FT_DELAYED'; else Result := '?'; end; end; function TWDXModule.GetFieldIndex(FieldName: String): Integer; begin Result := FFieldsList.IndexOf(FieldName); end; function TWDXModule.FileParamVSDetectStr(const aFile: TFile): Boolean; begin EnterCriticalSection(FMutex); try Result := FParser.TestFileResult(aFile); finally LeaveCriticalsection(FMutex); end; end; function TWDXModule.CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; var FieldIndex, UnitIndex: Integer; begin FieldIndex := GetFieldIndex(FieldName); if FieldIndex <> -1 then begin UnitIndex := TWdxField(FieldList.Objects[FieldIndex]).GetUnitIndex(UnitName); Result := CallContentGetValueV(FileName, FieldIndex, UnitIndex, flags); end else Result := Unassigned; end; function TWDXModule.CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; var FieldIndex, UnitIndex: Integer; begin FieldIndex := GetFieldIndex(FieldName); if FieldIndex <> -1 then begin UnitIndex := TWdxField(FieldList.Objects[FieldIndex]).GetUnitIndex(UnitName); Result := CallContentGetValue(FileName, FieldIndex, UnitIndex, flags); end else Result := EmptyStr; end; { TWdxField } function TWdxField.GetUnitIndex(UnitName: String): Integer; var Index: Integer; begin for Index:= 0 to High(FUnits) do begin if SameText(UnitName, FUnits[Index]) then Exit(Index); end; Result := IfThen(FType = FT_MULTIPLECHOICE, -1, 0); end; end. ���������������������������������������������������������������������������������doublecmd-1.1.30/src/uwcxprototypes.pas�������������������������������������������������������������0000644�0001750�0000144�00000005162�15104114162�017224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWCXprototypes; {$mode objfpc}{$H+} interface uses LCLType, WcxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory } TOpenArchive = function (var ArchiveData : tOpenArchiveData): TArcHandle; TReadHeader = function (hArcData: TArcHandle; var HeaderData : THeaderData): Integer; TProcessFile = function (hArcData: TArcHandle; Operation: Integer; DestPath: PAnsiChar; DestName: PAnsiChar): Integer; TCloseArchive = function (hArcData: TArcHandle): Integer; { Optional } TPackFiles = function (PackedFile: PAnsiChar; SubPath: PAnsiChar; SrcPath: PAnsiChar; AddList: PAnsiChar; Flags: Integer): Integer; TDeleteFiles = function (PackedFile: PAnsiChar; DeleteList: PAnsiChar): Integer; TGetPackerCaps = function () : Integer; TConfigurePacker = procedure (Parent: HWND; DllInstance: THandle); TSetChangeVolProc = procedure (hArcData: TArcHandle; ChangeVolProc: tChangeVolProc); TSetProcessDataProc = procedure (hArcData: TArcHandle; ProcessDataProc: TProcessDataProc); TStartMemPack = function (Options: Integer; FileName: PAnsiChar): TArcHandle; TPackToMem = function (hMemPack: TArcHandle; BufIn: PByte; InLen: Integer; Taken: pInteger; BufOut: PByte; OutLen: Integer; Written: pInteger; SeekBy: pInteger): Integer; TDoneMemPack = function (hMemPack: TArcHandle): Integer; TCanYouHandleThisFile = function (FileName: PAnsiChar): boolean; TPackSetDefaultParams = procedure (dps: pPackDefaultParamStruct); TReadHeaderEx = function (hArcData: TArcHandle; var HeaderDataEx : THeaderDataEx): Integer; TPkSetCryptCallback = procedure (PkCryptProc: TPkCryptProc; CryptoNr, Flags: Integer); TGetBackgroundFlags = function(): Integer; { Unicode } TOpenArchiveW = function (var ArchiveData : tOpenArchiveDataW): TArcHandle; TReadHeaderExW = function (hArcData: TArcHandle; var HeaderDataExW : THeaderDataExW): Integer; TProcessFileW = function (hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; TSetChangeVolProcW = procedure (hArcData: TArcHandle; ChangeVolProc: tChangeVolProcW); TSetProcessDataProcW = procedure (hArcData: TArcHandle; ProcessDataProc: TProcessDataProcW); TPackFilesW = function (PackedFile, SubPath, SrcPath, AddList: PWideChar; Flags: Integer): Integer; TDeleteFilesW = function (PackedFile, DeleteList: PWideChar): Integer; TStartMemPackW = function (Options: Integer; FileName: PWideChar): TArcHandle; TCanYouHandleThisFileW = function (FileName: PWideChar): boolean; TPkSetCryptCallbackW = procedure (PkCryptProc: TPkCryptProcW; CryptoNr, Flags: Integer); {$CALLING DEFAULT} implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uwcxmodule.pas�����������������������������������������������������������������0000644�0001750�0000144�00000071764�15104114162�016274� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Archive File support - class for manage WCX plugins (Version 2.20) Copyright (C) 2006-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uWCXmodule; {$mode objfpc}{$H+} {$include calling.inc} interface uses LCLType, Classes, Dialogs, DCClassesUtf8, dynlibs, SysUtils, uExtension, uWCXprototypes, WcxPlugin, Extension, DCBasicTypes, DCXmlConfig, uClassesEx; Type TWCXOperation = (OP_EXTRACT, OP_PACK, OP_DELETE); { EWcxModuleException } EWcxModuleException = class(EOSError) public constructor Create(AErrorCode: Integer); end; { TWCXHeaderData } { Handles THeaderData and THeaderDataEx } TWCXHeader = class(TObjectEx) private FileTime: LongInt; FDateTime: TDateTime; FNanoTime: TWinFileTime; private function GetDateTime: TDateTime; function PCharLToUTF8(CharString: PChar; MaxSize: Integer): String; public ArcName: String; FileName: String; Flags, HostOS, FileCRC, UnpVer, Method: Longint; FileAttr: TFileAttrs; PackSize, UnpSize: Int64; Cmt: String; CmtState: Longint; function Clone: TWCXHeader; override; constructor Create(const Data: PHeaderData); overload; constructor Create(const Data: PHeaderDataEx); overload; constructor Create(const Data: PHeaderDataExW); overload; constructor Create; overload; // allows creating empty record property DateTime: TDateTime read GetDateTime write FDateTime; end; { TWcxModule } TWcxModule = class(TDcxModule) private FModuleName: String; FBackgroundFlags: Integer; public // module's functions { Mandatory } OpenArchive : TOpenArchive; ReadHeader : TReadHeader; ProcessFile : TProcessFile; CloseArchive : TCloseArchive; { Optional } ReadHeaderEx : TReadHeaderEx; PackFiles : TPackFiles; DeleteFiles : TDeleteFiles; GetPackerCaps : TGetPackerCaps; ConfigurePacker : TConfigurePacker; SetChangeVolProc : TSetChangeVolProc; SetProcessDataProc : TSetProcessDataProc; StartMemPack : TStartMemPack; PackToMem : TPackToMem; DoneMemPack : TDoneMemPack; CanYouHandleThisFile : TCanYouHandleThisFile; PackSetDefaultParams : TPackSetDefaultParams; PkSetCryptCallback : TPkSetCryptCallback; GetBackgroundFlags: TGetBackgroundFlags; { Unicode } OpenArchiveW: TOpenArchiveW; ReadHeaderExW: TReadHeaderExW; ProcessFileW: TProcessFileW; SetChangeVolProcW: TSetChangeVolProcW; SetProcessDataProcW:TSetProcessDataProcW; PackFilesW: TPackFilesW; DeleteFilesW: TDeleteFilesW; StartMemPackW: TStartMemPackW; CanYouHandleThisFileW: TCanYouHandleThisFileW; PkSetCryptCallbackW : TPkSetCryptCallbackW; { Extension API } ExtensionInitialize: TExtensionInitializeProc; ExtensionFinalize: TExtensionFinalizeProc; private function LoadModule(const sName:String):Boolean; {Load WCX plugin} procedure UnloadModule; {UnLoad WCX plugin} public constructor Create; destructor Destroy; override; { Reads WCX header using ReadHeaderEx if available or ReadHeader. } function ReadWCXHeader(hArcData: TArcHandle; out HeaderData: TWCXHeader): Integer; function OpenArchiveHandle(FileName: String; anOpenMode: Longint; out OpenResult: Longint): TArcHandle; function WcxProcessFile(hArcData: TArcHandle; Operation: LongInt; DestPath, DestName: String): LongInt; function WcxPackFiles(PackedFile, SubPath, SrcPath, AddList: String; Flags: LongInt): LongInt; function WcxDeleteFiles(PackedFile, DeleteList: String): LongInt; function WcxCanYouHandleThisFile(FileName: String): Boolean; function WcxStartMemPack(Options: LongInt; FileName: String): TArcHandle; procedure WcxSetChangeVolProc(hArcData: TArcHandle); overload; procedure WcxSetChangeVolProc(hArcData: TArcHandle; ChangeVolProcA: TChangeVolProc; ChangeVolProcW: TChangeVolProcW); overload; procedure WcxSetProcessDataProc(hArcData: TArcHandle; ProcessDataProcA: TProcessDataProc; ProcessDataProcW: TProcessDataProcW); procedure WcxSetCryptCallback(CryptoNr, Flags: Integer; PkCryptProcA: TPkCryptProc; PkCryptProcW: TPkCryptProcW); procedure VFSConfigure(Parent: HWND); function GetPluginCapabilities: Integer; function IsLoaded: Boolean; property ModuleName: String read FModuleName; property BackgroundFlags: Integer read FBackgroundFlags write FBackgroundFlags; end; { TWCXModuleList } TWCXModuleList = class(TStringList) private FModuleList: TStringListEx; private function GetAEnabled(Index: Integer): Boolean; function GetAExt(Index: Integer): String; function GetAFileName(Index: Integer): String; function GetAFlags(Index: Integer): PtrInt; procedure SetAEnabled(Index: Integer; const AValue: Boolean); procedure SetAFileName(Index: Integer; const AValue: String); procedure SetAFlags(Index: Integer; const AValue: PtrInt); procedure SetExt(Index: Integer; const AValue: String); public constructor Create; reintroduce; destructor Destroy; override; public procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); function ComputeSignature(seed: dword): dword; function Add(Ext: String; Flags: PtrInt; FileName: String): Integer; reintroduce; function FindFirstEnabledByName(Name: String): Integer; function Find(const aFileName, aExt: String): Integer; overload; function LoadModule(const FileName: String): TWcxModule; property FileName[Index: Integer]: String read GetAFileName write SetAFileName; property Flags[Index: Integer]: PtrInt read GetAFlags write SetAFlags; property Ext[Index: Integer]: String read GetAExt write SetExt; property Enabled[Index: Integer]: Boolean read GetAEnabled write SetAEnabled; end; function GetErrorMsg(iErrorMsg : Integer): String; implementation uses //Lazarus, Free-Pascal, etc. SysConst, LazUTF8, FileUtil, //DC uDCUtils, uComponentsSignature, uGlobsPaths, uLng, uOSUtils, DCOSUtils, uOSForms, DCDateTimeUtils, DCConvertEncoding, fDialogBox, uDebug, uShowMsg, uLog, uGlobs; const WcxIniFileName = 'wcx.ini'; function ChangeVolProc(var ArcName : String; Mode: LongInt): LongInt; begin Result:= 1; case Mode of PK_VOL_ASK: begin if not ShowInputQuery('Double Commander', rsMsgSelLocNextVol, ArcName) then Result := 0; // Abort operation end; PK_VOL_NOTIFY: if log_arc_op in gLogOptions then LogWrite(rsMsgNextVolUnpack + #32 + ArcName); end; end; function ChangeVolProcA(ArcName : PAnsiChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= CeSysToUtf8(StrPas(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if (Mode = PK_VOL_ASK) and (Result <> 0) then StrPLCopy(ArcName, CeUtf8ToSys(sArcName), MAX_PATH); end; function ChangeVolProcW(ArcName : PWideChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= UTF16ToUTF8(UnicodeString(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if (Mode = PK_VOL_ASK) and (Result <> 0) then StrPLCopy(ArcName, CeUtf8ToUtf16(sArcName), MAX_PATH); end; { EWcxModuleException } constructor EWcxModuleException.Create(AErrorCode: Integer); begin ErrorCode:= AErrorCode; inherited Create(GetErrorMsg(ErrorCode)); end; constructor TWcxModule.Create; begin FModuleHandle := 0; end; destructor TWcxModule.Destroy; begin if IsLoaded then begin if Assigned(ExtensionFinalize) then ExtensionFinalize(nil); //------------------------------------------------------ UnloadModule; end; inherited Destroy; end; function TWcxModule.OpenArchiveHandle(FileName: String; anOpenMode: Longint; out OpenResult: Longint): TArcHandle; var ArcFile: tOpenArchiveData; ArcFileW: tOpenArchiveDataW; AnsiFileName: AnsiString; WideFileName: WideString; begin if (anOpenMode >= PK_OM_LIST) and (anOpenMode <= PK_OM_EXTRACT) then begin if Assigned(OpenArchiveW) then begin FillChar(ArcFileW, SizeOf(ArcFileW), #0); WideFileName := CeUtf8ToUtf16(FileName); ArcFileW.ArcName := PWideChar(WideFileName); // Pointer to local variable. ArcFileW.OpenMode := anOpenMode; Result := OpenArchiveW(ArcFileW); if Result = 0 then OpenResult := ArcFileW.OpenResult else OpenResult := E_SUCCESS; end else if Assigned(OpenArchive) then begin FillChar(ArcFile, SizeOf(ArcFile), #0); AnsiFileName := mbFileNameToSysEnc(FileName); ArcFile.ArcName := PAnsiChar(AnsiFileName); // Pointer to local variable. ArcFile.OpenMode := anOpenMode; Result := OpenArchive(ArcFile); if Result = 0 then OpenResult := ArcFile.OpenResult else OpenResult := E_SUCCESS; end; end else raise Exception.Create('Invalid WCX open mode'); end; function TWcxModule.WcxProcessFile(hArcData: TArcHandle; Operation: LongInt; DestPath, DestName: String): LongInt; begin if Assigned(ProcessFileW) then begin if DestPath = EmptyStr then Result:= ProcessFileW(hArcData, Operation, nil, PWideChar(CeUtf8ToUtf16(DestName))) else Result:= ProcessFileW(hArcData, Operation, PWideChar(CeUtf8ToUtf16(DestPath)), PWideChar(CeUtf8ToUtf16(DestName))); end else if Assigned(ProcessFile) then begin if DestPath = EmptyStr then Result:= ProcessFile(hArcData, Operation, nil, PAnsiChar(CeUtf8ToSys(DestName))) else Result:= ProcessFile(hArcData, Operation, PAnsiChar(CeUtf8ToSys(DestPath)), PAnsiChar(CeUtf8ToSys(DestName))); end; end; function TWcxModule.WcxPackFiles(PackedFile, SubPath, SrcPath, AddList: String; Flags: LongInt): LongInt; begin if Assigned(PackFilesW) then begin if SubPath = EmptyStr then Result:= PackFilesW(PWideChar(CeUtf8ToUtf16(PackedFile)), nil, PWideChar(CeUtf8ToUtf16(SrcPath)), PWideChar(CeUtf8ToUtf16(AddList)), Flags) else Result:= PackFilesW(PWideChar(CeUtf8ToUtf16(PackedFile)), PWideChar(CeUtf8ToUtf16(SubPath)), PWideChar(CeUtf8ToUtf16(SrcPath)), PWideChar(CeUtf8ToUtf16(AddList)), Flags); end else if Assigned(PackFiles) then begin if SubPath = EmptyStr then Result:= PackFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), nil, PAnsiChar(CeUtf8ToSys(SrcPath)), PAnsiChar(CeUtf8ToSys(AddList)), Flags) else Result:= PackFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), PAnsiChar(CeUtf8ToSys(SubPath)), PAnsiChar(CeUtf8ToSys(SrcPath)), PAnsiChar(CeUtf8ToSys(AddList)), Flags); end; end; function TWcxModule.WcxDeleteFiles(PackedFile, DeleteList: String): LongInt; begin if Assigned(DeleteFilesW) then Result:= DeleteFilesW(PWideChar(CeUtf8ToUtf16(PackedFile)), PWideChar(CeUtf8ToUtf16(DeleteList))) else if Assigned(DeleteFiles) then Result:= DeleteFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), PAnsiChar(CeUtf8ToSys(DeleteList))); end; function TWcxModule.WcxCanYouHandleThisFile(FileName: String): Boolean; begin if Assigned(CanYouHandleThisFileW) then Result:= CanYouHandleThisFileW(PWideChar(CeUtf8ToUtf16(FileName))) else if Assigned(CanYouHandleThisFile) then Result:= CanYouHandleThisFile(PAnsiChar(CeUtf8ToSys(FileName))) else Result:= True; end; function TWcxModule.WcxStartMemPack(Options: LongInt; FileName: String): TArcHandle; begin if Assigned(StartMemPackW) then Result:= StartMemPackW(Options, PWideChar(CeUtf8ToUtf16(FileName))) else if Assigned(StartMemPack) then Result:= StartMemPack(Options, PAnsiChar(CeUtf8ToSys(FileName))); end; procedure TWcxModule.WcxSetChangeVolProc(hArcData: TArcHandle); begin WcxSetChangeVolProc(hArcData, @ChangeVolProcA, @ChangeVolProcW); end; procedure TWcxModule.WcxSetChangeVolProc(hArcData: TArcHandle; ChangeVolProcA: TChangeVolProc; ChangeVolProcW: TChangeVolProcW); begin if Assigned(SetChangeVolProcW) then SetChangeVolProcW(hArcData, ChangeVolProcW); if Assigned(SetChangeVolProc) then SetChangeVolProc(hArcData, ChangeVolProcA); end; procedure TWcxModule.WcxSetProcessDataProc(hArcData: TArcHandle; ProcessDataProcA: TProcessDataProc; ProcessDataProcW: TProcessDataProcW); begin if Assigned(SetProcessDataProcW) then SetProcessDataProcW(hArcData, ProcessDataProcW); if Assigned(SetProcessDataProc) then SetProcessDataProc(hArcData, ProcessDataProcA); end; procedure TWcxModule.WcxSetCryptCallback(CryptoNr, Flags: Integer; PkCryptProcA: TPkCryptProc; PkCryptProcW: TPkCryptProcW); begin if Assigned(PkSetCryptCallbackW) then PkSetCryptCallbackW(PkCryptProcW, CryptoNr, Flags); if Assigned(PkSetCryptCallback) then PkSetCryptCallback(PkCryptProcA, CryptoNr, Flags); end; function TWcxModule.LoadModule(const sName:String):Boolean; var StartupInfo: TExtensionStartupInfo; PackDefaultParamStruct : TPackDefaultParamStruct; begin FModuleName := ExtractFileName(sName); FModulePath := mbExpandFileName(sName); FModuleHandle := mbLoadLibrary(FModulePath); if FModuleHandle = 0 then Exit(False); DCDebug('WCX module loaded ' + sName + ' at ' + hexStr(Pointer(FModuleHandle))); // Mandatory functions OpenArchive:= TOpenArchive(GetProcAddress(FModuleHandle,'OpenArchive')); ReadHeader:= TReadHeader(GetProcAddress(FModuleHandle,'ReadHeader')); ReadHeaderEx:= TReadHeaderEx(GetProcAddress(FModuleHandle,'ReadHeaderEx')); ProcessFile:= TProcessFile(GetProcAddress(FModuleHandle,'ProcessFile')); CloseArchive:= TCloseArchive(GetProcAddress(FModuleHandle,'CloseArchive')); // Unicode OpenArchiveW:= TOpenArchiveW(GetProcAddress(FModuleHandle,'OpenArchiveW')); ReadHeaderExW:= TReadHeaderExW(GetProcAddress(FModuleHandle,'ReadHeaderExW')); ProcessFileW:= TProcessFileW(GetProcAddress(FModuleHandle,'ProcessFileW')); Result:= (OpenArchive <> nil) and (ReadHeader <> nil) and (ProcessFile <> nil); if (Result = False) then begin OpenArchive:= nil; ReadHeader:= nil; ProcessFile:= nil; Result:= (OpenArchiveW <> nil) and (ReadHeaderExW <> nil) and (ProcessFileW <> nil); end; if (Result = False) or (CloseArchive = nil) then begin OpenArchiveW:= nil; ReadHeaderExW:= nil; ProcessFileW:= nil; CloseArchive:= nil; Exit(False); end; // Optional functions PackFiles:= TPackFiles(GetProcAddress(FModuleHandle,'PackFiles')); DeleteFiles:= TDeleteFiles(GetProcAddress(FModuleHandle,'DeleteFiles')); GetPackerCaps:= TGetPackerCaps(GetProcAddress(FModuleHandle,'GetPackerCaps')); ConfigurePacker:= TConfigurePacker(GetProcAddress(FModuleHandle,'ConfigurePacker')); SetChangeVolProc:= TSetChangeVolProc(GetProcAddress(FModuleHandle,'SetChangeVolProc')); SetProcessDataProc:= TSetProcessDataProc(GetProcAddress(FModuleHandle,'SetProcessDataProc')); StartMemPack:= TStartMemPack(GetProcAddress(FModuleHandle,'StartMemPack')); PackToMem:= TPackToMem(GetProcAddress(FModuleHandle,'PackToMem')); DoneMemPack:= TDoneMemPack(GetProcAddress(FModuleHandle,'DoneMemPack')); CanYouHandleThisFile:= TCanYouHandleThisFile(GetProcAddress(FModuleHandle,'CanYouHandleThisFile')); PackSetDefaultParams:= TPackSetDefaultParams(GetProcAddress(FModuleHandle,'PackSetDefaultParams')); PkSetCryptCallback:= TPkSetCryptCallback(GetProcAddress(FModuleHandle,'PkSetCryptCallback')); GetBackgroundFlags:= TGetBackgroundFlags(GetProcAddress(FModuleHandle,'GetBackgroundFlags')); // Unicode SetChangeVolProcW:= TSetChangeVolProcW(GetProcAddress(FModuleHandle,'SetChangeVolProcW')); SetProcessDataProcW:= TSetProcessDataProcW(GetProcAddress(FModuleHandle,'SetProcessDataProcW')); PackFilesW:= TPackFilesW(GetProcAddress(FModuleHandle,'PackFilesW')); DeleteFilesW:= TDeleteFilesW(GetProcAddress(FModuleHandle,'DeleteFilesW')); StartMemPackW:= TStartMemPackW(GetProcAddress(FModuleHandle,'StartMemPackW')); CanYouHandleThisFileW:= TCanYouHandleThisFileW(GetProcAddress(FModuleHandle,'CanYouHandleThisFileW')); PkSetCryptCallbackW:= TPkSetCryptCallbackW(GetProcAddress(FModuleHandle,'PkSetCryptCallbackW')); // Extension API ExtensionInitialize:= TExtensionInitializeProc(GetProcAddress(FModuleHandle,'ExtensionInitialize')); ExtensionFinalize:= TExtensionFinalizeProc(GetProcAddress(FModuleHandle,'ExtensionFinalize')); if Assigned(PackSetDefaultParams) then begin with PackDefaultParamStruct do begin Size := SizeOf(PackDefaultParamStruct); PluginInterfaceVersionLow := 22; PluginInterfaceVersionHi := 2; DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WcxIniFileName); end; PackSetDefaultParams(@PackDefaultParamStruct); end; if not Assigned(GetBackgroundFlags) then FBackgroundFlags:= 0 else FBackgroundFlags:= GetBackgroundFlags(); // Extension API if Assigned(ExtensionInitialize) then begin InitializeExtension(@StartupInfo); ExtensionInitialize(@StartupInfo); end; end; procedure TWcxModule.UnloadModule; begin if FModuleHandle <> NilHandle then begin FreeLibrary(FModuleHandle); FModuleHandle := NilHandle; end; // Mandatory OpenArchive:= nil; ReadHeader:= nil; ReadHeaderEx:= nil; ProcessFile:= nil; CloseArchive:= nil; // Optional PackFiles:= nil; DeleteFiles:= nil; GetPackerCaps:= nil; ConfigurePacker:= nil; SetChangeVolProc:= nil; SetProcessDataProc:= nil; StartMemPack:= nil; PackToMem:= nil; DoneMemPack:= nil; CanYouHandleThisFile:= nil; PackSetDefaultParams:= nil; PkSetCryptCallback:= nil; GetBackgroundFlags:= nil; // Unicode OpenArchiveW:= nil; ReadHeaderExW:= nil; ProcessFileW:= nil; SetChangeVolProcW:= nil; SetProcessDataProcW:= nil; PackFilesW:= nil; DeleteFilesW:= nil; StartMemPackW:= nil; CanYouHandleThisFileW:= nil; PkSetCryptCallbackW:= nil; // Extension API ExtensionInitialize:= nil; ExtensionFinalize:= nil; end; function GetErrorMsg(iErrorMsg : Integer): String; begin case iErrorMsg of E_END_ARCHIVE : Result := rsMsgErrEndArchive; E_NO_MEMORY : Result := rsMsgErrNoMemory; E_BAD_DATA : Result := rsMsgErrBadData; E_BAD_ARCHIVE : Result := rsMsgErrBadArchive; E_UNKNOWN_FORMAT : Result := rsMsgErrUnknownFormat; E_EOPEN : Result := rsMsgErrEOpen; E_ECREATE : Result := rsMsgErrECreate; E_ECLOSE : Result := rsMsgErrEClose; E_EREAD : Result := rsMsgErrERead; E_EWRITE : Result := rsMsgErrEWrite; E_SMALL_BUF : Result := rsMsgErrSmallBuf; E_EABORTED : Result := rsMsgErrEAborted; E_NO_FILES : Result := rsMsgErrNoFiles; E_TOO_MANY_FILES : Result := rsMsgErrTooManyFiles; E_NOT_SUPPORTED : Result := rsMsgErrNotSupported; else Result := Format(SUnknownErrorCode, [iErrorMsg]); end; end; procedure TWcxModule.VFSConfigure(Parent: HWND); begin if Assigned(ConfigurePacker) then ConfigurePacker(GetWindowHandle(Parent), FModuleHandle); end; function TWcxModule.ReadWCXHeader(hArcData: TArcHandle; out HeaderData: TWCXHeader): Integer; var ArcHeader : THeaderData; ArcHeaderEx : THeaderDataEx; ArcHeaderExW : THeaderDataExW; begin HeaderData := nil; if Assigned(ReadHeaderExW) then begin FillChar(ArcHeaderExW, SizeOf(ArcHeaderExW), #0); Result := ReadHeaderExW(hArcData, ArcHeaderExW); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderDataExW(@ArcHeaderExW)); end; end else if Assigned(ReadHeaderEx) then begin FillChar(ArcHeaderEx, SizeOf(ArcHeaderEx), #0); Result := ReadHeaderEx(hArcData, ArcHeaderEx); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderDataEx(@ArcHeaderEx)); end; end else if Assigned(ReadHeader) then begin FillChar(ArcHeader, SizeOf(ArcHeader), #0); Result := ReadHeader(hArcData, ArcHeader); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderData(@ArcHeader)); end; end else begin Result := E_NOT_SUPPORTED; end; end; function TWcxModule.GetPluginCapabilities: Integer; begin if Assigned(GetPackerCaps) then Result := GetPackerCaps() else Result := 0; end; function TWcxModule.IsLoaded: Boolean; begin Result := (FModuleHandle <> NilHandle); end; { TWCXModuleList } function TWCXModuleList.GetAEnabled(Index: Integer): Boolean; begin Result:= Boolean(PtrInt(Objects[Index])); end; function TWCXModuleList.GetAExt(Index: Integer): String; begin Result:= Names[Index]; end; function TWCXModuleList.GetAFileName(Index: Integer): String; var sCurrPlugin: String; iPosComma : Integer; begin sCurrPlugin:= ValueFromIndex[Index]; iPosComma:= Pos(',', sCurrPlugin); //get file name Result:= Copy(sCurrPlugin, iPosComma + 1, Length(sCurrPlugin) - iPosComma); end; function TWCXModuleList.GetAFlags(Index: Integer): PtrInt; var sCurrPlugin: String; iPosComma : Integer; begin sCurrPlugin:= ValueFromIndex[Index]; iPosComma:= Pos(',', sCurrPlugin); // get packer flags Result:= StrToInt(Copy(sCurrPlugin, 1, iPosComma-1)); end; procedure TWCXModuleList.SetAEnabled(Index: Integer; const AValue: Boolean); begin Objects[Index]:= TObject(PtrInt(AValue)); end; procedure TWCXModuleList.SetAFileName(Index: Integer; const AValue: String); begin ValueFromIndex[Index]:= IntToStr(GetAFlags(Index)) + #44 + AValue; end; procedure TWCXModuleList.SetAFlags(Index: Integer; const AValue: PtrInt); begin ValueFromIndex[Index]:= IntToStr(AValue) + #44 + GetAFileName(Index); end; procedure TWCXModuleList.SetExt(Index: Integer; const AValue: String); var sValue : String; begin sValue:= ValueFromIndex[Index]; Self[Index]:= AValue + '=' + sValue; end; constructor TWCXModuleList.Create; begin FModuleList:= TStringListEx.Create; FModuleList.Sorted:= True; end; destructor TWCXModuleList.Destroy; var I: Integer; begin for I:= 0 to FModuleList.Count - 1 do begin TWcxModule(FModuleList.Objects[I]).Free; end; FreeAndNil(FModuleList); inherited Destroy; end; procedure TWCXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; AExt, APath: String; AFlags: Integer; begin Clear; ANode := ANode.FindNode('WcxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WcxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'ArchiveExt', AExt) and AConfig.TryGetValue(ANode, 'Path', APath) then begin AFlags := AConfig.GetValue(ANode, 'Flags', 0); I := Add(AExt, AFlags, APath); Enabled[I] := AConfig.GetAttr(ANode, 'Enabled', True); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWCXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WcxPlugins', True); AConfig.ClearNode(ANode); for I := 0 to Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WcxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', Enabled[I]); AConfig.AddValue(SubNode, 'ArchiveExt', Ext[I]); AConfig.AddValue(SubNode, 'Path', FileName[I]); AConfig.AddValue(SubNode, 'Flags', Flags[I]); end; end; { TWCXModuleList.ComputeSignature } function TWCXModuleList.ComputeSignature(seed: dword): dword; var iIndex: integer; begin result := seed; for iIndex := 0 to pred(Count) do begin result := ComputeSignatureBoolean(result, Enabled[iIndex]); result := ComputeSignatureString(result, Ext[iIndex]); result := ComputeSignatureString(result, FileName[iIndex]); result := ComputeSignaturePtrInt(result, Flags[iIndex]); end; end; { TWCXModuleList.Add } function TWCXModuleList.Add(Ext: String; Flags: PtrInt; FileName: String): Integer; begin Result:= AddObject(Ext + '=' + IntToStr(Flags) + #44 + FileName, TObject(True)); end; function TWCXModuleList.FindFirstEnabledByName(Name: String): Integer; begin Result:=0; while Result < Count do begin if Enabled[Result] and (DoCompareText(Names[Result], Name) = 0) then Exit else Result := Result + 1; end; if Result=Count then Result:=-1; end; function TWCXModuleList.Find(const aFileName, aExt: String): Integer; begin Result:=0; while Result < Count do begin if (DoCompareText(Ext[Result], aExt) = 0) and (DoCompareText(FileName[Result], aFileName) = 0) then Exit else Result := Result + 1; end; if Result=Count then Result:=-1; end; function TWCXModuleList.LoadModule(const FileName: String): TWcxModule; var Index: Integer; begin if FModuleList.Find(FileName, Index) then Result := TWcxModule(FModuleList.Objects[Index]) else begin Result := TWcxModule.Create; if not Result.LoadModule(FileName) then FreeAndNil(Result) else begin FModuleList.AddObject(FileName, Result); end; end; end; { TWCXHeader } constructor TWCXHeader.Create(const Data: PHeaderData); begin ArcName := PCharLToUTF8(Data^.ArcName, SizeOf(Data^.ArcName)); FileName := PCharLToUTF8(Data^.FileName, SizeOf(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Data^.PackSize; UnpSize := Data^.UnpSize; if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; end; constructor TWCXHeader.Create(const Data: PHeaderDataEx); function Combine64(High, Low: LongWord): Int64; begin Result := Int64(High) shl (SizeOf(Int64) shl 2); Result := Result + Int64(Low); end; begin ArcName := PCharLToUTF8(Data^.ArcName, SizeOf(Data^.ArcName)); FileName := PCharLToUTF8(Data^.FileName, SizeOf(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Combine64(Data^.PackSizeHigh, Data^.PackSize); UnpSize := Combine64(Data^.UnpSizeHigh, Data^.UnpSize); if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; end; constructor TWCXHeader.Create(const Data: PHeaderDataExW); function Combine64(High, Low: LongWord): Int64; begin Result := Int64(High) shl (SizeOf(Int64) shl 2); Result := Result + Int64(Low); end; begin ArcName := UTF16ToUTF8(UnicodeString(Data^.ArcName)); FileName := UTF16ToUTF8(UnicodeString(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Combine64(Data^.PackSizeHigh, Data^.PackSize); UnpSize := Combine64(Data^.UnpSizeHigh, Data^.UnpSize); if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; FNanoTime:= Data^.MfileTime; end; constructor TWCXHeader.Create; begin end; function TWCXHeader.GetDateTime: TDateTime; begin if FDateTime <> 0 then Result:= FDateTime else begin if (FNanoTime > 0) then FDateTime:= WinFileTimeToDateTime(FNanoTime) else begin if (FileTime = 0) then FDateTime:= DATE_TIME_NULL else begin FDateTime:= WcxFileTimeToDateTime(FileTime); end; end; Result:= FDateTime; end; end; function TWCXHeader.PCharLToUTF8(CharString: PChar; MaxSize: Integer): String; var NameLength: Integer; TempString: AnsiString; begin NameLength := strlen(CharString); if NameLength > MaxSize then NameLength := MaxSize; SetString(TempString, CharString, NameLength); Result := CeSysToUtf8(TempString); end; function TWCXHeader.Clone: TWCXHeader; begin Result:= TWCXHeader.Create; Result.ArcName:= ArcName; Result.FileName:= FileName; Result.Flags:= Flags; Result.HostOS:= HostOS; Result.FileCRC:= FileCRC; Result.FileTime:= FileTime; Result.UnpVer:= UnpVer; Result.Method:= Method; Result.FileAttr:=FileAttr; Result.PackSize:= PackSize; Result.UnpSize:= UnpSize; Result.Cmt:= Cmt; Result.CmtState:= CmtState; Result.FNanoTime:= FNanoTime; Result.FDateTime:= FDateTime; end; end. ������������doublecmd-1.1.30/src/uvfsmodule.pas�����������������������������������������������������������������0000644�0001750�0000144�00000005010�15104114162�016246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVfsModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type { TFileSourceClass } TFileSourceClass = class of TFileSource; { TVfsModule } TVfsModule = class Visible: Boolean; FileSourceClass: TFileSourceClass; end; { TVfsModuleList } TVfsModuleList = class(TStringList) private function GetVfsModule(const S: String): TVfsModule; public destructor Destroy; override; function GetFileSource(const Path: String): TFileSourceClass; function FindFileSource(const AClassName: String): TFileSourceClass; property VfsModule[const S: String]: TVfsModule read GetVfsModule; end; procedure RegisterVirtualFileSource(AName: String; AFileSourceClass: TFileSourceClass; Visible: Boolean = True); var // All of file sources from this list will be displayed // in the Virtual File System List. It can be used for example // for system specific virtual folders (Control Panel, Desktop, etc.) gVfsModuleList: TVfsModuleList; implementation procedure RegisterVirtualFileSource(AName: String; AFileSourceClass: TFileSourceClass; Visible: Boolean = True); var VfsModule: TVfsModule; begin VfsModule:= TVfsModule.Create; VfsModule.Visible:= Visible; VfsModule.FileSourceClass:= AFileSourceClass; gVfsModuleList.AddObject(AName, VfsModule); end; { TVfsModuleList } function TVfsModuleList.GetVfsModule(const S: String): TVfsModule; var I: Integer; begin I:= IndexOf(S); if I < 0 then Exit(nil); Result:= TVfsModule(Objects[I]); end; destructor TVfsModuleList.Destroy; var I: Integer; begin for I:= 0 to Count - 1 do TVfsModule(Objects[I]).Free; inherited Destroy; end; function TVfsModuleList.GetFileSource(const Path: String): TFileSourceClass; var I: Integer; begin Result:= nil; for I:= 0 to Count - 1 do with TVfsModule(Objects[I]) do begin if FileSourceClass.IsSupportedPath(Path) then begin Result:= FileSourceClass; Break; end; end; end; function TVfsModuleList.FindFileSource(const AClassName: String): TFileSourceClass; var I: Integer; begin Result:= nil; for I:= 0 to Count - 1 do with TVfsModule(Objects[I]) do begin if FileSourceClass.ClassNameIs(AClassName) then begin Result:= FileSourceClass; Break; end; end; end; initialization gVfsModuleList := TVfsModuleList.Create; finalization FreeAndNil(gVfsModuleList); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uvectorimage.pas���������������������������������������������������������������0000644�0001750�0000144�00000004026�15104114162�016555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVectorImage; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Graphics, FPImage; type { TVectorReader } TVectorReader = class(TFPCustomImageReader) public class function CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; virtual; abstract; end; { TVectorImage } TVectorImage = class(TFPImageBitmap) protected class function GetSharedImageClass: TSharedRasterImageClass; override; public class procedure RegisterReaderClass(AReaderClass: TFPCustomImageReaderClass); virtual; abstract; class function CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; virtual; end; { TScalableVectorGraphics } TScalableVectorGraphics = class(TVectorImage) protected FReaderClass: TFPCustomImageReaderClass; static; public class function GetFileExtensions: String; override; class function GetReaderClass: TFPCustomImageReaderClass; override; class procedure RegisterReaderClass(AReaderClass: TFPCustomImageReaderClass); override; end; implementation uses uIconTheme; type TVectorReaderClass = class of TVectorReader; { TVectorImage } class function TVectorImage.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TVectorImage.CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; begin Result:= TVectorReaderClass(GetReaderClass).CreateBitmap(FileName, AWidth, AHeight); end; { TScalableVectorGraphics } class function TScalableVectorGraphics.GetReaderClass: TFPCustomImageReaderClass; begin Result:= FReaderClass; end; class function TScalableVectorGraphics.GetFileExtensions: String; begin Result:= 'svg;svgz'; end; class procedure TScalableVectorGraphics.RegisterReaderClass(AReaderClass: TFPCustomImageReaderClass); begin FReaderClass:= AReaderClass; end; procedure Initialize; begin TIconTheme.RegisterExtension('svg;svgz'); TPicture.RegisterFileFormat('svg;svgz', 'Scalable Vector Graphics', TScalableVectorGraphics); end; initialization Initialize; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uvariablemenusupport.pas�������������������������������������������������������0000644�0001750�0000144�00000031365�15104114162�020365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Support for popup menu to help to enter percent variable parameters. The idea here is: -Have something to help user who wants to use "%..." variable to have a quick hint built-in the application instead of having to seach in help of doc files. -Next to an edit box where we could type in "%...", have a speed button that would popup a menu where user sees to possible percent variables available. -User sees what he could use, select one and then it would type in the edit box the select "%...". -This unit is to build that popup instead of having it in different unit. -It creates the popup only the first time use click on "%" button. -If in the main session use again a "%" button, the popup menu is already created and almost ready. -"Almost", because we simply need to re-assign the possible different target edit box. Copyright (C) 2015-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uVariableMenuSupport; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, Menus, StdCtrls, //DC dmHelpManager; type TVariableMenuItem = class(TMenuItem) private FSubstitutionText: string; public constructor MyCreate(TheOwner: TComponent; ParamCaption, ParamSubstitutionText: string); procedure VariableHelperClick(Sender: TObject); procedure HelpOnVariablesClick(Sender: TObject); end; TPercentVariablePopupMenu = class(TPopUpMenu) private FAssociatedComponent: TComponent; procedure PopulateMenuWithVariableHelper; public constructor Create(AOnwer: TComponent); override; property AssociatedTComponent: TComponent read FAssociatedComponent write FAssociatedComponent; end; procedure BringPercentVariablePopupMenu(AComponent: TComponent); implementation uses //Lazarus, Free-Pascal, etc. EditBtn, SysUtils, Dialogs, //DC uLng; var PercentVariablePopupMenu: TPercentVariablePopupMenu = nil; { TPercentVariablePopupMenu.Create } constructor TPercentVariablePopupMenu.Create(AOnwer: TComponent); begin inherited Create(AOnwer); FAssociatedComponent := nil; PopulateMenuWithVariableHelper; end; { TPercentVariablePopupMenu.PopulateMenuWithVariableHelper } procedure TPercentVariablePopupMenu.PopulateMenuWithVariableHelper; type tHelperMenuDispatcher = set of (hmdNothing, hmdSeparator, hmdListLevel); tFunctionHelper = record sLetter: string; sDescription: string; HelperMenuDispatcher: tHelperMenuDispatcher; end; tFirstSubLevelHelper = record sLetter: string; sDescription: string; HelperMenuDispatcher: tHelperMenuDispatcher; end; const NbOfFunctions = 12; FunctionHelper: array[1..NbOfFunctions] of tFunctionHelper = ( (sLetter: 'f'; sDescription: rsVarOnlyFilename; HelperMenuDispatcher: []), (sLetter: 'd'; sDescription: rsVarPath; HelperMenuDispatcher: []), (sLetter: 'z'; sDescription: rsVarLastDirOfPath; HelperMenuDispatcher: []), (sLetter: 'p'; sDescription: rsVarFullPath; HelperMenuDispatcher: []), (sLetter: 'o'; sDescription: rsVarFilenameNoExt; HelperMenuDispatcher: []), (sLetter: 'e'; sDescription: rsVarOnlyExtension; HelperMenuDispatcher: []), (sLetter: 'v'; sDescription: rsVarRelativePathAndFilename; HelperMenuDispatcher: [hmdSeparator]), (sLetter: 'D'; sDescription: rsVarCurrentPath; HelperMenuDispatcher: []), (sLetter: 'Z'; sDescription: rsVarLastDirCurrentPath; HelperMenuDispatcher: [hmdSeparator]), (sLetter: 'L'; sDescription: rsVarListFullFilename; HelperMenuDispatcher: [hmdListLevel]), (sLetter: 'F'; sDescription: rsVarListFilename; HelperMenuDispatcher: [hmdListLevel]), (sLetter: 'R'; sDescription: rsVarListRelativeFilename; HelperMenuDispatcher: [hmdListLevel, hmdSeparator])); NbOfSubListLevel = 4; SubListLevelHelper: array[1..NbOfSubListLevel] of tFirstSubLevelHelper = ( (sLetter: 'U'; sDescription: rsVarListInUTF8; HelperMenuDispatcher: []), (sLetter: 'W'; sDescription: rsVarListInUTF16; HelperMenuDispatcher: []), (sLetter: 'UQ'; sDescription: rsVarListInUTF8Quoted; HelperMenuDispatcher: []), (sLetter: 'WQ'; sDescription: rsVarListInUTF16Quoted; HelperMenuDispatcher: [])); NbOfSubLevel = 6; SubLevelHelper: array[1..NbOfSubLevel] of tFirstSubLevelHelper = ( (sLetter: 's'; sDescription: rsVarSourcePanel; HelperMenuDispatcher: []), (sLetter: 't'; sDescription: rsVarTargetPanel; HelperMenuDispatcher: [hmdSeparator]), (sLetter: 'l'; sDescription: rsVarLeftPanel; HelperMenuDispatcher: []), (sLetter: 'r'; sDescription: rsVarRightPanel; HelperMenuDispatcher: [hmdSeparator]), (sLetter: 'b'; sDescription: rsVarBothPanelLeftToRight; HelperMenuDispatcher: []), (sLetter: 'p'; sDescription: rsVarBothPanelActiveToInactive; HelperMenuDispatcher: [])); NbOfSubLevelExamples = 15; SubLevelHelperExamples: array[1..NbOfSubLevelExamples] of tFirstSubLevelHelper = ( (sLetter: '%?'; sDescription: rsVarShowCommandPrior; HelperMenuDispatcher: []), (sLetter: '%%'; sDescription: rsVarPercentSign; HelperMenuDispatcher: []), (sLetter: '%#'; sDescription: rsVarPercentChangeToPound; HelperMenuDispatcher: []), (sLetter: '#%'; sDescription: rsVarPoundChangeToPercent; HelperMenuDispatcher: [hmdSeparator]), (sLetter: '%"0'; sDescription: rsVarWillNotBeQuoted; HelperMenuDispatcher: []), (sLetter: '%"1'; sDescription: rsVarWillBeQuoted; HelperMenuDispatcher: []), (sLetter: '%/0'; sDescription: rsVarWillNotHaveEndingDelimiter; HelperMenuDispatcher: []), (sLetter: '%/1'; sDescription: rsVarWillHaveEndingDelimiter; HelperMenuDispatcher: []), (sLetter: '%t0'; sDescription: rsVarWillNotDoInTerminal; HelperMenuDispatcher: []), (sLetter: '%t1'; sDescription: rsVarWillDoInTerminal; HelperMenuDispatcher: [hmdSeparator]), (sLetter: rsVarSimpleMessage; sDescription: rsVarSimpleShowMessage; HelperMenuDispatcher: []), (sLetter: rsVarPromptUserForParam; sDescription: rsVarInputParam; HelperMenuDispatcher: [hmdSeparator]), (sLetter: '%f{-a }'; sDescription: rsVarPrependElement; HelperMenuDispatcher: []), (sLetter: '%f{[}{]} '; sDescription: rsVarEncloseElement; HelperMenuDispatcher: []), (sLetter: '%pr2'; sDescription: rsVarSecondElementRightPanel; HelperMenuDispatcher: [])); var miMainTree, miSubTree, miSubListTree: TVariableMenuItem; iFunction, iSubLevel, iSubListLevel: integer; procedure InsertSeparatorInMainMenu; begin miMainTree := TVariableMenuItem.MyCreate(Self, '-', ''); Self.Items.Add(miMainTree); end; procedure InsertSeparatorInSubMenu; begin miSubTree := TVariableMenuItem.MyCreate(Self, '-', ''); miMainTree.Add(miSubTree); end; procedure InsertSeparatorInSubListMenu; begin miSubTree := TVariableMenuItem.MyCreate(Self, '-', ''); miSubListTree.Add(miSubTree); end; begin //Add the automatic helper for iFunction := 1 to NbOfFunctions do begin miMainTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, ''); TPopupMenu(Self).Items.Add(miMainTree); miSubTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, '%' + FunctionHelper[iFunction].sLetter); miMainTree.Add(miSubTree); InsertSeparatorInSubMenu; for iSubLevel := 1 to NbOfSubLevel do begin miSubTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + SubLevelHelper[iSubLevel].sLetter + ' - ' + '...' + SubLevelHelper[iSubLevel].sDescription, '%' + FunctionHelper[iFunction].sLetter + SubLevelHelper[iSubLevel].sLetter); miMainTree.Add(miSubTree); if hmdSeparator in SubLevelHelper[iSubLevel].HelperMenuDispatcher then InsertSeparatorInSubMenu; end; if hmdListLevel in FunctionHelper[iFunction].HelperMenuDispatcher then begin InsertSeparatorInSubMenu; for iSubListLevel := 1 to NbOfSubListLevel do begin miSubListTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter + ' - ' + '...' + SubListLevelHelper[iSubListLevel].sDescription + '...', ''); miMainTree.Add(miSubListTree); miSubTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter + ' - ' + SubListLevelHelper[iSubListLevel].sDescription, '%' + FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter); miSubListTree.Add(miSubTree); InsertSeparatorInSubListMenu; for iSubLevel := 1 to NbOfSubLevel do begin miSubTree := TVariableMenuItem.MyCreate(Self, '%' + FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter + SubLevelHelper[iSubLevel].sLetter + ' - ' + '...' + SubLevelHelper[iSubLevel].sDescription, '%' + FunctionHelper[iFunction].sLetter + SubListLevelHelper[iSubListLevel].sLetter + SubLevelHelper[iSubLevel].sLetter); miSubListTree.Add(miSubTree); if hmdSeparator in SubLevelHelper[iSubLevel].HelperMenuDispatcher then InsertSeparatorInSubListMenu; end; end; end; if hmdSeparator in FunctionHelper[iFunction].HelperMenuDispatcher then InsertSeparatorInMainMenu; end; //Add the more complex-not-so-complex other examples miMainTree := TVariableMenuItem.MyCreate(Self, rsVarOtherExamples, ''); TPopupMenu(Self).Items.Add(miMainTree); for iSubLevel := 1 to NbOfSubLevelExamples do begin miSubTree := TVariableMenuItem.MyCreate(Self, SubLevelHelperExamples[iSubLevel].sLetter + ' - ' + SubLevelHelperExamples[iSubLevel].sDescription, SubLevelHelperExamples[iSubLevel].sLetter); miMainTree.Add(miSubTree); if hmdSeparator in SubLevelHelperExamples[iSubLevel].HelperMenuDispatcher then InsertSeparatorInSubMenu; end; //Add link for the help at the end InsertSeparatorInMainMenu; miMainTree := TVariableMenuItem.MyCreate(Self, rsVarHelpWith, ''); TPopupMenu(Self).Items.Add(miMainTree); end; { TVariableMenuItem.MyCreate } constructor TVariableMenuItem.MyCreate(TheOwner: TComponent; ParamCaption, ParamSubstitutionText: string); begin inherited Create(TheOwner); Caption := ParamCaption; if ParamCaption <> rsVarHelpWith then begin if ParamSubstitutionText <> '' then begin FSubstitutionText := ParamSubstitutionText; OnClick := @VariableHelperClick; end; end else begin OnClick := @HelpOnVariablesClick; end; end; { TVariableMenuItem.VariableHelperClick } //Our intention: //-If something is selected, we replace what's selected by the helper string //-If nothing is selected, we insert our helper string at the current cursor pos //-If nothing is there at all, we add, simply //Since "TDirectoryEdit" is not a descendant of "TCustomEdit", we need to treat it separately. procedure TVariableMenuItem.VariableHelperClick(Sender: TObject); begin if TPercentVariablePopupMenu(Owner).FAssociatedComponent.ClassNameIs('TDirectoryEdit') then TDirectoryEdit(TPercentVariablePopupMenu(Owner).FAssociatedComponent).SelText := FSubstitutionText else TCustomEdit(TPercentVariablePopupMenu(Owner).FAssociatedComponent).SelText := FSubstitutionText; end; { TVariableMenuItem.HelpOnVariablesClick } procedure TVariableMenuItem.HelpOnVariablesClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/variables.html'); end; { BringPercentVariablePopupMenu } procedure BringPercentVariablePopupMenu(AComponent: TComponent); begin if PercentVariablePopupMenu = nil then PercentVariablePopupMenu := TPercentVariablePopupMenu.Create(nil); PercentVariablePopupMenu.AssociatedTComponent := AComponent; PercentVariablePopupMenu.PopUp; end; initialization //JEDI code formatter doesn't like a "finalization" section without prior an "initialization" one... finalization if PercentVariablePopupMenu <> nil then FreeAndNil(PercentVariablePopupMenu); end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/utypes.pas���������������������������������������������������������������������0000644�0001750�0000144�00000003443�15104114162�015416� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Definitions of some common types. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2018 Alexander Koblov (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uTypes; // This unit should depend on as little other units as possible. interface type TCaseSensitivity = ( cstNotSensitive, // According to locale collation specs. Usually it means linguistic sorting // of character case "aAbBcC" taking numbers into consideration (aa1, aa2, aa10, aA1, aA2, aA10, ...). cstLocale, // Depending on character value, direct comparison of bytes, so usually ABCabc. // Might not work correctly for Unicode, just for Ansi. cstCharValue); TRange = record First: Integer; Last: Integer; end; //Note: If we add a format here, don't forget to update also "FILE_SIZE" string table in "uFileFunctions". TFileSizeFormat = (fsfFloat, fsfByte, fsfKilo, fsfMega, fsfGiga, fsfTera, fsfPersonalizedFloat, fsfPersonalizedByte, fsfPersonalizedKilo, fsfPersonalizedMega, fsfPersonalizedGiga, fsfPersonalizedTera); implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/utranslator.pas����������������������������������������������������������������0000644�0001750�0000144�00000004637�15104114162�016451� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit is needed for using translated form strings made by Lazarus IDE. It loads localized form strings from .po file. Copyright (C) 2007-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uTranslator; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, TypInfo, Translations; type { TTranslator } TTranslator = class(TAbstractTranslator) private FPOFile: TPOFile; public constructor Create(const FileName: String); destructor Destroy; override; procedure TranslateStringProperty(Sender: TObject; const Instance: TPersistent; PropInfo: PPropInfo; var Content: String); override; property POFile: TPOFile read FPOFile; end; implementation uses LCLProc; { TTranslator } constructor TTranslator.Create(const FileName: String); begin inherited Create; FPOFile := TPOFile.Create(FileName); end; destructor TTranslator.Destroy; begin FPOFile.Free; inherited Destroy; end; procedure TTranslator.TranslateStringProperty(Sender: TObject; const Instance: TPersistent; PropInfo: PPropInfo; var Content: String); var Reader: TReader; Identifier: String; begin if (PropInfo = nil) then Exit; if (CompareText(PropInfo^.PropType^.Name, 'TTRANSLATESTRING') <> 0) then Exit; if (Sender is TReader) then begin Reader := TReader(Sender); if Reader.Driver is TLRSObjectReader then Identifier := TLRSObjectReader(Reader.Driver).GetStackPath else begin Identifier := Instance.ClassName + '.' + PropInfo^.Name; end; // DebugLn(UpperCase(Identifier) + '=' + Content); Content := FPOFile.Translate(Identifier, Content); end; end; end. �������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uthumbnails.pas����������������������������������������������������������������0000644�0001750�0000144�00000030064�15104114162�016417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uThumbnails; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Types, fgl, DCClassesUtf8, uFile; type { TCreatePreviewHandler } TCreatePreviewHandler = function(const aFileName: String; aSize: TSize): TBitmap; { TBitmapList } TBitmapList = specialize TFPGObjectList<TBitmap>; { TThumbnailManager } TThumbnailManager = class private FBitmap: TBitmap; FBackColor: TColor; FFileName: String; FThumbPath: String; FProviderList: array of TCreatePreviewHandler; static; private procedure DoCreatePreviewText; function GetPreviewFileExt(const sFileExt: String): String; function GetPreviewFileName(const sFileName: String): String; function CreatePreviewImage(const Graphic: TGraphic): TBitmap; function ReadMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; function WriteMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; class function ReadFileName(const aThumb: String; out aFileName: String): Boolean; public constructor Create(BackColor: TColor); function CreatePreview(const aFile: TFile): TBitmap; function CreatePreview(const FullPathToFile: String): TBitmap; function RemovePreview(const FullPathToFile: String): Boolean; public class procedure CompactCache; class function RegisterProvider(Provider: TCreatePreviewHandler): Integer; class function GetPreviewScaleSize(aWidth, aHeight: Integer): TSize; class function GetPreviewFromProvider(const aFileName: String; aSize: TSize; aSkip: Integer): TBitmap; end; implementation uses StreamEx, URIParser, MD5, FileUtil, LazFileUtils, Forms, DCOSUtils, DCStrUtils, uDebug, uReSample, uGlobsPaths, uGlobs, uPixmapManager, uFileSystemFileSource, uGraphics, uFileProcs; const ThumbSign: QWord = $0000235448554D42; // '#0 #0 # T H U M B' function TThumbnailManager.GetPreviewFileExt(const sFileExt: String): String; begin if (sFileExt = 'jpg') or (sFileExt = 'jpeg') or (sFileExt = 'bmp') then Result:= 'jpg' else Result:= 'png'; end; function TThumbnailManager.GetPreviewFileName(const sFileName: String): String; begin Result:= MD5Print(MD5String(sFileName)); end; function TThumbnailManager.CreatePreviewImage(const Graphic: TGraphic): TBitmap; var aSize: TSize; bmpTemp: TBitmap = nil; begin try // Calculate aspect width and height of thumb aSize:= GetPreviewScaleSize(Graphic.Width, Graphic.Height); bmpTemp:= TBitMap.Create; bmpTemp.Assign(Graphic); Result:= TBitMap.Create; Result.SetSize(aSize.cx, aSize.cy); Stretch(bmpTemp, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width); finally FreeAndNil(bmpTemp); end; end; procedure TThumbnailManager.DoCreatePreviewText; var S: String; Y: Integer; Stream: TFileStreamEx; Reader: TStreamReader; begin FBitmap:= TBitmap.Create; with FBitmap do begin SetSize(gThumbSize.cx, gThumbSize.cy); Canvas.Brush.Color:= clWindow; Canvas.FillRect(Canvas.ClipRect); Canvas.Font.Color:= clWindowText; Canvas.Font.Size := gThumbSize.cy div 16; try Stream:= TFileStreamEx.Create(FFileName, fmOpenRead or fmShareDenyNone); try Y:= 0; Reader:= TStreamReader.Create(Stream, BUFFER_SIZE, True); repeat S:= Reader.ReadLine; Canvas.TextOut(0, Y, S); Y += Canvas.TextHeight(S) + 2; until (Y >= gThumbSize.cy) or Reader.Eof; finally Reader.Free; end; except // Ignore end; end; end; function TThumbnailManager.ReadMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; var sFileName: AnsiString; begin Result:= True; try // Read metadata position from last 4 byte of file FileStream.Seek(-4, soEnd); FileStream.Seek(FileStream.ReadDWord, soBeginning); // Check signature if (FileStream.ReadQWord <> NtoBE(ThumbSign)) then Exit(False); // Read thumbnail metadata Result:= (URIToFilename(FileStream.ReadAnsiString, sFileName) and SameText(sFileName, aFile.FullPath)); if not Result then Exit; Result:= (aFile.Size = FileStream.ReadQWord) and (QWord(aFile.ModificationTime) = FileStream.ReadQWord); if not Result then Exit; Result:= (gThumbSize.cx = FileStream.ReadWord) and (gThumbSize.cy = FileStream.ReadWord); except Result:= False; end; end; function TThumbnailManager.WriteMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; var iEnd: Int64; begin Result:= True; try // Get original file size iEnd:= FileStream.Seek(0, soEnd); // Write signature FileStream.WriteQWord(NtoBE(ThumbSign)); // Write thumbnail meta data FileStream.WriteAnsiString(FilenameToURI(aFile.FullPath)); FileStream.WriteQWord(aFile.Size); FileStream.WriteQWord(QWord(aFile.ModificationTime)); FileStream.WriteWord(gThumbSize.cx); FileStream.WriteWord(gThumbSize.cy); // Write original file size FileStream.WriteDWord(iEnd); except Result:= False; end; end; class function TThumbnailManager.ReadFileName(const aThumb: String; out aFileName: String): Boolean; var fsFileStream: TFileStreamEx; begin try fsFileStream:= TFileStreamEx.Create(aThumb, fmOpenRead or fmShareDenyNone); try // Read metadata position from last 4 byte of file fsFileStream.Seek(-4, soEnd); fsFileStream.Seek(fsFileStream.ReadDWord, soBeginning); // Check signature if (fsFileStream.ReadQWord <> NtoBE(ThumbSign)) then Exit(False); // Read source file name Result:= URIToFilename(fsFileStream.ReadAnsiString, aFileName); finally fsFileStream.Free; end; except Result:= False; end; end; constructor TThumbnailManager.Create(BackColor: TColor); begin FBackColor:= BackColor; FThumbPath:= gpThumbCacheDir; // If directory not exists then create it if not mbDirectoryExists(FThumbPath) then mbForceDirectory(FThumbPath); end; function TThumbnailManager.RemovePreview(const FullPathToFile: String): Boolean; var sExt, sName: String; begin sExt:= GetPreviewFileExt(ExtractOnlyFileExt(FullPathToFile)); sName:= GetPreviewFileName(FullPathToFile); // Delete thumb from cache Result:= mbDeleteFile(FThumbPath + PathDelim + sName + '.' + sExt); end; function TThumbnailManager.CreatePreview(const aFile: TFile): TBitmap; var I: Integer; sFullPathToFile, sThumbFileName, sExt: String; fsFileStream: TFileStreamEx = nil; Picture: TPicture = nil; ABitmap: TBitmap; begin Result:= nil; try Picture:= TPicture.Create; try sFullPathToFile:= aFile.FullPath; sExt:= GetPreviewFileExt(ExtractOnlyFileExt(sFullPathToFile)); sThumbFileName:= FThumbPath + PathDelim + GetPreviewFileName(sFullPathToFile) + '.' + sExt; // If thumbnail already exists in cache for this file then load it if mbFileExists(sThumbFileName) then begin fsFileStream:= TFileStreamEx.Create(sThumbFileName, fmOpenRead or fmShareDenyNone or fmOpenNoATime); try if ReadMetaData(aFile, fsFileStream) then begin fsFileStream.Position:= 0; Picture.LoadFromStreamWithFileExt(fsFileStream, sExt); Result:= TBitmap.Create; Result.Assign(Picture.Graphic); Exit; end; finally FreeAndNil(fsFileStream); end; end; // Try to create thumnail using providers for I:= Low(FProviderList) to High(FProviderList) do begin Result:= FProviderList[I](sFullPathToFile, gThumbSize); if Assigned(Result) then Break; end; if Assigned(Result) then begin if (Result.Width > gThumbSize.cx) or (Result.Height > gThumbSize.cy) then begin ABitmap:= CreatePreviewImage(Result); BitmapAssign(Result, ABitmap); ABitmap.Free; end; end; if not Assigned(Result) then begin sExt:= ExtractOnlyFileExt(sFullPathToFile); // Create thumb for image files if GetGraphicClassForFileExtension(sExt) <> nil then begin fsFileStream:= TFileStreamEx.Create(sFullPathToFile, fmOpenRead or fmShareDenyNone or fmOpenNoATime); with Picture do try LoadFromStreamWithFileExt(fsFileStream, sExt); if (Graphic.Width > gThumbSize.cx) or (Graphic.Height > gThumbSize.cy) then Result:= CreatePreviewImage(Graphic) else begin Result:= TBitmap.Create; Result.Assign(Graphic); Exit; // No need to save in cache end; finally FreeAndNil(fsFileStream); end end // Create thumb for text files else if (mbFileExists(sFullPathToFile)) and (FileIsText(sFullPathToFile)) then begin FFileName:= sFullPathToFile; // Some widgetsets can not draw from background // thread so call draw text function from main thread TThread.Synchronize(nil, @DoCreatePreviewText); Exit(FBitmap); // No need to save in cache end; end; // Save created thumb to cache if gThumbSave and Assigned(Result) and not IsInPath(FThumbPath, sFullPathToFile, False, False) then begin Picture.Bitmap.Assign(Result); sExt:= GetPreviewFileExt(sExt); try fsFileStream:= TFileStreamEx.Create(sThumbFileName, fmCreate); try Picture.SaveToStreamWithFileExt(fsFileStream, sExt); WriteMetaData(aFile, fsFileStream); finally FreeAndNil(fsFileStream); end; except on e: EStreamError do DCDebug(['Cannot save thumbnail to file "', sThumbFileName, '": ', e.Message]); end; end; finally FreeAndNil(Picture); end; except Result:= nil; end; if not Assigned(Result) then Result:= PixMapManager.LoadBitmapEnhanced(sFullPathToFile, gIconsSize, True, FBackColor); end; function TThumbnailManager.CreatePreview(const FullPathToFile: String): TBitmap; var aFile: TFile; begin aFile := TFileSystemFileSource.CreateFileFromFile(FullPathToFile); try Result:= CreatePreview(aFile); finally FreeAndNil(AFile); end; end; class procedure TThumbnailManager.CompactCache; var I: Integer; aFileName: String; aFileList: TStringList; begin aFileList:= FindAllFiles(gpThumbCacheDir); for I:= 0 to Pred(aFileList.Count) do begin if not (ReadFileName(aFileList[I], aFileName) and mbFileExists(aFileName)) then begin mbDeleteFile(aFileList[I]); end; end; aFileList.Free; end; class function TThumbnailManager.RegisterProvider(Provider: TCreatePreviewHandler): Integer; begin SetLength(FProviderList, Length(FProviderList) + 1); FProviderList[High(FProviderList)]:= Provider; Result:= High(FProviderList); end; class function TThumbnailManager.GetPreviewScaleSize(aWidth, aHeight: Integer): TSize; begin if aWidth > aHeight then begin Result.cx:= gThumbSize.cx; Result.cy:= Result.cx * aHeight div aWidth; if Result.cy > gThumbSize.cy then begin Result.cy:= gThumbSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end else begin Result.cy:= gThumbSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end; class function TThumbnailManager.GetPreviewFromProvider(const aFileName: String; aSize: TSize; aSkip: Integer): TBitmap; var Index: Integer; begin for Index:= Low(FProviderList) to High(FProviderList) do begin if (Index <> aSkip) then begin Result:= FProviderList[Index](aFileName, aSize); if Assigned(Result) then Exit; end; end; Result:= nil; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/usyndiffcontrols.pas�����������������������������������������������������������0000644�0001750�0000144�00000045105�15104114162�017501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSynDiffControls; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, SynEdit, LCLVersion, SynEditMiscClasses, SynGutterBase, SynGutter, LazSynEditText, uDiffOND {$IF DEFINED(LCL_VER_499)} , LazEditTextGridPainter, LazEditTextAttributes {$ELSE} , SynTextDrawer {$ENDIF} ; const { Default differ colors } clPaleGreen: TColor = $AAFFAA; clPaleRed : TColor = $AAAAFF; clPaleBlue : TColor = $FFAAAA; type TPaintStyle = (psForeground, psBackground); {$IF NOT DEFINED(LCL_VER_499)} type TLazEditTextGridPainter = TheTextDrawer; {$ENDIF} type { TDiffColors } TDiffColors = class(TPersistent) private fColors: array [TChangeKind] of TColor; fOnChange: TNotifyEvent; function GetColor(const AIndex: TChangeKind): TColor; procedure SetColor(const AIndex: TChangeKind; const AValue: TColor); public constructor Create; procedure Assign(aSource: TPersistent); override; property Colors[const aIndex: TChangeKind]: TColor read GetColor write SetColor; default; property OnChange: TNotifyEvent read fOnChange write fOnChange; published property Added: TColor index ckAdd read GetColor write SetColor; property Modified: TColor index ckModify read GetColor write SetColor; property Deleted: TColor index ckDelete read GetColor write SetColor; end; { TSynDiffGutter } TSynDiffGutter = class(TSynGutter) protected procedure CreateDefaultGutterParts; override; end; { TSynDiffGutterLineNumber } TSynDiffGutterLineNumber = class(TSynGutterPartBase) private FTextDrawer: TLazEditTextGridPainter; FDigitCount: integer; FAutoSizeDigitCount: integer; FLeadingZeros: boolean; procedure SetDigitCount(AValue : integer); procedure SetLeadingZeros(const AValue : boolean); function FormatLineNumber(Line: PtrInt; Kind: TChangeKind): string; protected procedure Init; override; function PreferedWidth: Integer; override; procedure LineCountChanged(Sender: TSynEditStrings; AIndex, ACount: Integer); procedure BufferChanged(Sender: TObject); procedure FontChanged(Sender: TObject{$IF DEFINED(LCL_VER_499)}; Changes: TSynStatusChanges{$ENDIF}); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); override; published property MarkupInfo; property DigitCount: integer read FDigitCount write SetDigitCount; property LeadingZeros: boolean read FLeadingZeros write SetLeadingZeros; end; { TSynDiffGutterChanges } TSynDiffGutterChanges = class(TSynGutterPartBase) protected function PreferedWidth: Integer; override; public constructor Create(AOwner: TComponent); override; procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); override; end; { TSynDiffEdit } TSynDiffEdit = class(TSynEdit) private FPaintStyle: TPaintStyle; FEncoding: String; FColors: TDiffColors; FOriginalFile, FModifiedFile: TSynDiffEdit; private procedure SetModifiedFile(const AValue: TSynDiffEdit); procedure SetOriginalFile(const AValue: TSynDiffEdit); procedure SetPaintStyle(const AValue: TPaintStyle); protected function CreateGutter(AOwner: TSynEditBase; ASide: TSynGutterSide; ATextDrawer: TLazEditTextGridPainter): TSynGutter; override; procedure SpecialLineMarkupEvent(Sender: TObject; Line: Integer; var Special: boolean; AMarkup: TSynSelectedColor); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; public procedure Renumber; procedure StartCompare; procedure FinishCompare; function DiffBegin(ALine: Integer): Integer; function DiffEnd(ALine: Integer): Integer; property PaintStyle: TPaintStyle read FPaintStyle write SetPaintStyle; property Encoding: String read FEncoding write FEncoding; property Colors: TDiffColors read FColors write FColors; property OriginalFile: TSynDiffEdit read FOriginalFile write SetOriginalFile; property ModifiedFile: TSynDiffEdit read FModifiedFile write SetModifiedFile; published property OnStatusChange; end; { TStringsHelper } TStringsHelper = class helper for TStrings private function GetKind(AIndex: Integer): TChangeKind; function GetNumber(AIndex: Integer): PtrInt; procedure SetKind(AIndex: Integer; AValue: TChangeKind); procedure SetNumber(AIndex: Integer; AValue: PtrInt); public procedure Renumber; procedure RemoveFake; procedure Append(const S: String; AKind: TChangeKind); procedure InsertFake(AIndex: Integer; AKind: TChangeKind); procedure SetKindAndNumber(AIndex: Integer; AKind: TChangeKind; ANumber: PtrInt); public property Kind[AIndex: Integer]: TChangeKind read GetKind write SetKind; property Number[AIndex: Integer]: PtrInt read GetNumber write SetNumber; end; implementation uses LCLIntf, LCLType, SynEditMiscProcs, SynEditTypes; const KindShift = 8; // Line kind shift KindMask = $FF; // Line kind mask FakeLine = PtrInt(High(PtrUInt) shr KindShift); { TDiffColors } function TDiffColors.GetColor(const AIndex: TChangeKind): TColor; begin Result:= fColors[AIndex]; end; procedure TDiffColors.SetColor(const AIndex: TChangeKind; const AValue: TColor); begin if fColors[AIndex] <> AValue then begin fColors[AIndex] := AValue; if Assigned(OnChange) then OnChange(Self); end; end; constructor TDiffColors.Create; begin fColors[ckAdd] := clPaleGreen; fColors[ckModify] := clPaleBlue; fColors[ckDelete] := clPaleRed; end; procedure TDiffColors.Assign(aSource: TPersistent); begin if (aSource is TDiffColors) then with (aSource as TDiffColors) do begin fColors[ckAdd]:= Added; fColors[ckModify]:= Modified; fColors[ckDelete]:= Deleted; end; end; { TSynDiffGutter } procedure TSynDiffGutter.CreateDefaultGutterParts; begin if Side <> gsLeft then Exit; with TSynDiffGutterLineNumber.Create(Parts) do Name:= 'SynDiffGutterLineNumber'; with TSynDiffGutterChanges.Create(Parts) do Name:= 'SynDiffGutterChanges'; end; { TSynDiffEdit } procedure TSynDiffEdit.SetModifiedFile(const AValue: TSynDiffEdit); begin if FModifiedFile <> AValue then begin if (AValue <> nil) and (FOriginalFile <> nil) then raise Exception.Create('Having both ModifiedFile and OriginalFile is not supported'); FModifiedFile := AValue; end; end; procedure TSynDiffEdit.SetOriginalFile(const AValue: TSynDiffEdit); begin if FOriginalFile <> AValue then begin if (AValue <> nil) and (FModifiedFile <> nil) then raise Exception.Create('Having both OriginalFile and ModifiedFile is not supported'); FOriginalFile := AValue; end; end; procedure TSynDiffEdit.SetPaintStyle(const AValue: TPaintStyle); begin if FPaintStyle <> AValue then begin FPaintStyle := AValue; Invalidate; end; end; function TSynDiffEdit.CreateGutter(AOwner: TSynEditBase; ASide: TSynGutterSide; ATextDrawer: TLazEditTextGridPainter): TSynGutter; begin Result := TSynDiffGutter.Create(AOwner, ASide, ATextDrawer); end; procedure TSynDiffEdit.SpecialLineMarkupEvent(Sender: TObject; Line: Integer; var Special: boolean; AMarkup: TSynSelectedColor); var Kind: TChangeKind; LineColor: TColor; begin if Line > Lines.Count then Exit; Kind:= Lines.Kind[Line - 1]; if (Kind <> ckNone) then with AMarkup do begin case Kind of ckDelete: LineColor := FColors.Deleted; ckAdd: LineColor := FColors.Added; ckModify: if Assigned(Highlighter) then Exit else LineColor := FColors.Modified; end; Special:= True; if FPaintStyle = psForeground then begin Foreground := LineColor; Background := clWindow; end else begin Foreground:= clWindowText; Background := LineColor; end; end; end; procedure TSynDiffEdit.StartCompare; begin BeginUpdate; // Remove fake lines Lines.RemoveFake; end; procedure TSynDiffEdit.FinishCompare; begin EndUpdate; Invalidate; end; function TSynDiffEdit.DiffBegin(ALine: Integer): Integer; var Kind: TChangeKind; begin Result:= ALine; if ALine = 0 then Exit; // Skip lines with current difference type Kind := Lines.Kind[ALine]; while (ALine > 0) and (Lines.Kind[ALine] = Kind) do Dec(ALine); Result:= ALine + 1; end; function TSynDiffEdit.DiffEnd(ALine: Integer): Integer; var Kind: TChangeKind; begin Result:= ALine; if ALine = Lines.Count - 1 then Exit; // Skip lines with current difference type Kind := Lines.Kind[ALine]; while (ALine < Lines.Count - 1) and (Lines.Kind[ALine] = Kind) do Inc(ALine); Result:= ALine - 1; end; constructor TSynDiffEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); Color:= clWindow; Font.Color:= clWindowText; FPaintStyle:= psBackground; FColors:= TDiffColors.Create; OnSpecialLineMarkup:= @SpecialLineMarkupEvent; end; destructor TSynDiffEdit.Destroy; begin FreeAndNil(FColors); inherited Destroy; end; procedure TSynDiffEdit.Renumber; begin Lines.Renumber; Repaint; end; { TSynDiffGutterChanges } function TSynDiffGutterChanges.PreferedWidth: Integer; begin Result := 4; end; constructor TSynDiffGutterChanges.Create(AOwner: TComponent); begin inherited Create(AOwner); MarkupInfo.Background := clNone; end; procedure TSynDiffGutterChanges.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); var rcLine: TRect; LineCount: Integer; LineHeight: Integer; I, LineNumber: Integer; SynDiffEdit: TSynDiffEdit; LineTop: Integer; AliasMode: TAntialiasingMode; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight:= SynDiffEdit.LineHeight; LineCount:= SynDiffEdit.Lines.Count; LineTop:= ToIdx(GutterArea.TextArea.TopLine); if MarkupInfo.Background <> clNone then begin Canvas.Brush.Color := MarkupInfo.Background; Canvas.FillRect(AClip); end; Canvas.Pen.Width := Width; Canvas.Pen.EndCap:= pecFlat; AliasMode:= Canvas.AntialiasingMode; Canvas.AntialiasingMode:= amOff; rcLine := AClip; rcLine.Left := rcLine.Left + Width div 2; rcLine.Bottom := AClip.Top; for I := LineTop + FirstLine to LineTop + LastLine do begin LineNumber := ViewedTextBuffer.DisplayView.ViewToTextIndex(I); // next line rect rcLine.Top := rcLine.Bottom; Inc(rcLine.Bottom, LineHeight); if (LineNumber >= 0) and (LineNumber < LineCount) then begin case SynDiffEdit.Lines.Kind[LineNumber] of ckNone: Continue; ckAdd: Canvas.Pen.Color := SynDiffEdit.FColors.Added; ckDelete: Canvas.Pen.Color := SynDiffEdit.FColors.Deleted; ckModify: Canvas.Pen.Color := SynDiffEdit.FColors.Modified; end; Canvas.Line(rcLine.Left, rcLine.Top + 1, rcLine.Left, rcLine.Bottom - 1); end; end; Canvas.AntialiasingMode := AliasMode; end; { TSynDiffGutterLineNumber } procedure TSynDiffGutterLineNumber.SetDigitCount(AValue: integer); begin AValue := MinMax(AValue, 2, 12); if FDigitCount <> AValue then begin FDigitCount := AValue; if AutoSize then begin FAutoSizeDigitCount := Max(FDigitCount, FAutoSizeDigitCount); DoAutoSize; end else FAutoSizeDigitCount := FDigitCount; DoChange(Self); end; end; procedure TSynDiffGutterLineNumber.SetLeadingZeros(const AValue: boolean); begin if FLeadingZeros <> AValue then begin FLeadingZeros := AValue; DoChange(Self); end; end; function TSynDiffGutterLineNumber.FormatLineNumber(Line: PtrInt; Kind: TChangeKind): string; var I: Integer; begin Result := EmptyStr; // if a symbol must be showed if (Line = 0) or (Line = FakeLine) then begin case Kind of ckAdd: Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '+'; ckDelete: Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '-'; else Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '.'; end; end // else format the line number else begin Str(Line : FAutoSizeDigitCount, Result); if FLeadingZeros then for I := 1 to FAutoSizeDigitCount - 1 do begin if (Result[I] <> ' ') then Break; Result[I] := '0'; end; end; end; function TSynDiffGutterLineNumber.PreferedWidth: Integer; begin Result := FAutoSizeDigitCount * FTextDrawer.CharWidth + 1; end; procedure TSynDiffGutterLineNumber.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount: Integer); var nDigits: Integer; begin if not (Visible and AutoSize) then Exit; nDigits := Max(Length(IntToStr(TextBuffer.Count)), FDigitCount); if FAutoSizeDigitCount <> nDigits then begin FAutoSizeDigitCount := nDigits; DoAutoSize; end; end; procedure TSynDiffGutterLineNumber.BufferChanged(Sender: TObject); begin LineCountChanged(nil, 0, 0); end; procedure TSynDiffGutterLineNumber.FontChanged(Sender: TObject{$IF DEFINED(LCL_VER_499)}; Changes: TSynStatusChanges{$ENDIF}); begin DoAutoSize; end; procedure TSynDiffGutterLineNumber.Init; begin inherited Init; FTextDrawer := Gutter.TextDrawer; ViewedTextBuffer.AddChangeHandler(senrLineCount, @LineCountChanged); ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @BufferChanged); {$IF DEFINED(LCL_VER_499)} FriendEdit.RegisterStatusChangedHandler(@FontChanged, [scFontOrStyleChanged]); {$ELSE} FTextDrawer.RegisterOnFontChangeHandler(@FontChanged); {$ENDIF} LineCountchanged(nil, 0, 0); end; constructor TSynDiffGutterLineNumber.Create(AOwner: TComponent); begin FDigitCount := 4; FAutoSizeDigitCount := FDigitCount; FLeadingZeros := False; inherited Create(AOwner); end; destructor TSynDiffGutterLineNumber.Destroy; begin {$IF DEFINED(LCL_VER_499)} ViewedTextBuffer.RemoveHandlers(Self); FriendEdit.UnRegisterStatusChangedHandler(@FontChanged); {$ELSE} ViewedTextBuffer.RemoveHanlders(Self); FTextDrawer.UnRegisterOnFontChangeHandler(@FontChanged); {$ENDIF} inherited Destroy; end; procedure TSynDiffGutterLineNumber.Assign(Source: TPersistent); var Src: TSynDiffGutterLineNumber; begin if Assigned(Source) and (Source is TSynDiffGutterLineNumber) then begin Src := TSynDiffGutterLineNumber(Source); FLeadingZeros := Src.FLeadingZeros; FDigitCount := Src.FDigitCount; FAutoSizeDigitCount := Src.FAutoSizeDigitCount; end; inherited Assign(Source); end; procedure TSynDiffGutterLineNumber.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); var S: String; rcLine: TRect; LineNumber: PtrInt; LineKind: TChangeKind; I, LineHeight: Integer; SynDiffEdit: TSynDiffEdit; LineCount: Integer; IRange: TLineRange; LineTop: TLinePos; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight:= SynDiffEdit.LineHeight; LineCount:= SynDiffEdit.Lines.Count; LineTop:= ToIdx(GutterArea.TextArea.TopLine); // Changed to use fTextDrawer.BeginDrawing and fTextDrawer.EndDrawing only // when absolutely necessary. Note: Never change brush / pen / font of the // canvas inside of this block (only through methods of fTextDrawer)! {$IF DEFINED(LCL_VER_499)} FTextDrawer.BeginCustomCanvas(Canvas); try fTextDrawer.SetFrame(MarkupInfoInternal.FrameColor, slsSolid); {$ELSE} FTextDrawer.BeginDrawing(Canvas.Handle); try fTextDrawer.SetFrameColor(MarkupInfo.FrameColor); {$ENDIF} if MarkupInfo.Background <> clNone then FTextDrawer.BackColor := MarkupInfo.Background else begin FTextDrawer.BackColor := Gutter.Color; end; if MarkupInfo.Foreground <> clNone then fTextDrawer.ForeColor := MarkupInfo.Foreground else begin fTextDrawer.ForeColor := SynDiffEdit.Font.Color; end; fTextDrawer.Style := MarkupInfo.Style; // prepare the rect initially rcLine := AClip; rcLine.Bottom := AClip.Top; for I := LineTop + FirstLine to LineTop + LastLine do begin LineNumber := ToPos(ViewedTextBuffer.DisplayView.ViewToTextIndexEx(I, IRange)); if (LineNumber < 1) or (LineNumber > LineCount) then Break; LineKind := SynDiffEdit.Lines.Kind[LineNumber - 1]; LineNumber:= SynDiffEdit.Lines.Number[LineNumber - 1]; // next line rect rcLine.Top := rcLine.Bottom; // Get the formatted line number or dot S := FormatLineNumber(LineNumber, LineKind); Inc(rcLine.Bottom, LineHeight); if I <> IRange.Top then S := ''; // erase the background and draw the line number string in one go fTextDrawer.ExtTextOut(rcLine.Left, rcLine.Top, ETO_OPAQUE or ETO_CLIPPED, rcLine, PChar(Pointer(S)),Length(S)); end; // now erase the remaining area if any if AClip.Bottom > rcLine.Bottom then begin rcLine.Top := rcLine.Bottom; rcLine.Bottom := AClip.Bottom; with rcLine do fTextDrawer.ExtTextOut(Left, Top, ETO_OPAQUE, rcLine, nil, 0); end; finally {$IF DEFINED(LCL_VER_499)} fTextDrawer.EndCustomCanvas; {$ELSE} fTextDrawer.EndDrawing; {$ENDIF} end; end; { TStringsHelper } function TStringsHelper.GetKind(AIndex: Integer): TChangeKind; var AKind: PtrInt; begin AKind:= PtrInt(Objects[AIndex]); Result:= TChangeKind(AKind and KindMask); end; function TStringsHelper.GetNumber(AIndex: Integer): PtrInt; begin Result:= PtrInt(Objects[AIndex]) shr KindShift; end; procedure TStringsHelper.SetKind(AIndex: Integer; AValue: TChangeKind); var ANumber: PtrInt; begin ANumber:= GetNumber(AIndex); Objects[AIndex]:= TObject(PtrInt(AValue) or (ANumber shl KindShift)); end; procedure TStringsHelper.SetNumber(AIndex: Integer; AValue: PtrInt); var AKind: TChangeKind; begin AKind:= GetKind(AIndex); Objects[AIndex]:= TObject(PtrInt(AKind) or (AValue shl KindShift)); end; procedure TStringsHelper.RemoveFake; var I: Integer; begin for I:= Count - 1 downto 0 do begin if ((PtrInt(Objects[I]) shr KindShift) = FakeLine) and (Self[I] = EmptyStr) then Delete(I); end; end; procedure TStringsHelper.Renumber; var I, N: Integer; begin N:= 1; for I:= 0 to Count - 1 do begin if ((PtrInt(Objects[I]) shr KindShift) <> FakeLine) then begin Number[I] := N; Inc(N); end; end; end; procedure TStringsHelper.Append(const S: String; AKind: TChangeKind); begin InsertObject(Count, S, TObject(PtrInt(AKind) or (Count shl KindShift))); end; procedure TStringsHelper.InsertFake(AIndex: Integer; AKind: TChangeKind); begin InsertObject(AIndex, EmptyStr, TObject(PtrInt(AKind) or PtrInt(FakeLine shl KindShift))); end; procedure TStringsHelper.SetKindAndNumber(AIndex: Integer; AKind: TChangeKind; ANumber: PtrInt); begin Objects[AIndex]:= TObject(PtrInt(AKind) or (ANumber shl KindShift)); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uspecialdir.pas����������������������������������������������������������������0000644�0001750�0000144�00000076466�15104114162�016410� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Working with SpecialDir Copyright (C) 2009-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -This unit has been added in 2014. -Inspired a lot from "usearchtemplate" -Icon used for button to work with path is called "folder_wrench.png" and was taken from "http://www.famfamfam.com/lab/icons/silk/". It is already mentionned in the "about" section of the application that icons are coming from this site. } unit uSpecialDir; {$mode objfpc}{$H+} interface uses Menus, Classes, SysUtils; const TAGOFFSET_FORHOTDIRUSEINPATHHELPER = $10000; TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER = $20000; type { TKindOfPathFile } TKindOfPathFile = (pfFILE, pfPATH); { TKindOfSpecialDir } TKindOfSpecialDir = (sd_NULL, sd_DOUBLECOMMANDER, sd_WINDOWSTC, sd_WINDOWSNONTC, sd_ENVIRONMENTVARIABLE); { TKindSpecialDirMenuPopulation } TKindSpecialDirMenuPopulation = (mp_PATHHELPER, mp_CHANGEDIR); { TProcedureWithJustASender } TProcedureWithJustASender = procedure(Sender: TObject) of Object; { TSpecialDir } TSpecialDir = class private fDispatcher: TKindOfSpecialDir; fVariableName: string; fPathValue: string; public constructor Create; property Dispatcher: TKindOfSpecialDir read fDispatcher write fDispatcher; property VariableName: string read fVariableName write fVariableName; property PathValue: string read fPathValue write fPathValue; end; { TSpecialDirList } TSpecialDirList = class(TList) private fIndexOfSpecialDirComptibleTC:longint; //Index of first windows SpecialDir compatible with TC fIndexOfNewVariableNotInTC:longint; //Index of first SpecialDir non-compatible TC fIndexOfEnvironmentVariable:longint; //Index of first EnvironmentVariable fRecipientComponent:TComponent; fRecipientType:TKindOfPathFile; function GetSpecialDir(Index: Integer): TSpecialDir; public constructor Create; procedure Clear; override; procedure PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate:TComponent; KindSpecialDirMenuPopulation:TKindSpecialDirMenuPopulation; ProcedureIfChangeDirClick:TProcedureWithJustASender); procedure SpecialDirMenuClick(Sender: TObject); procedure PopulateSpecialDir; procedure SetSpecialDirRecipientAndItsType(ParamComponent:TComponent; ParamKindOfPathFile:TKindOfPathFile); property SpecialDir[Index: Integer]: TSpecialDir read GeTSpecialDir; property IndexOfSpecialDirComptibleTC: longint read fIndexOfSpecialDirComptibleTC write fIndexOfSpecialDirComptibleTC; //Index of first windows Special Dir compatible with TC property IndexOfNewVariableNotInTC: longint read fIndexOfNewVariableNotInTC write fIndexOfNewVariableNotInTC; //Index of first non-compatible Total Commander path property IndexOfEnvironmentVariable: longint read fIndexOfEnvironmentVariable write fIndexOfEnvironmentVariable; //Index of first EnvironmentVariable end; function GetMenuCaptionAccordingToOptions(const WantedCaption:string; const MatchingPath:string):string; procedure LoadWindowsSpecialDir; implementation uses //Lazarus, Free-Pascal, etc. EditBtn, Dialogs, ExtCtrls, StrUtils, StdCtrls, lazutf8, {$IFDEF MSWINDOWS} ShlObj, uShellFolder, {$ENDIF} //DC DCOSUtils, uDCUtils, uGlobsPaths, fmain, uLng, uGlobs, uHotDir, uOSUtils, DCStrUtils; { The special path are sorted first by type of special path they represent (DC, Windows, Environment...) Then, by alphabetical order. But also, the most commun useful path could be placed first to be more user friendly.} function CompareSpecialDir(Item1,Item2:Pointer):integer; function GetWeigth(sSpecialDir:string):longint; begin result:=10; if sSpecialDir='%$PERSONAL%' then result:=1; if sSpecialDir='%$DESKTOP%' then result:=2; if sSpecialDir='%$APPDATA%' then result:=3; end; var Weight1,Weight2:longint; begin if TSpecialDir(Item1).Dispatcher<>TSpecialDir(Item2).Dispatcher then begin if TSpecialDir(Item1).Dispatcher<TSpecialDir(Item2).Dispatcher then result:=-1 else result:=1; end else begin Weight1:=GetWeigth(TSpecialDir(Item1).VariableName); Weight2:=GetWeigth(TSpecialDir(Item2).VariableName); if Weight1<>Weight2 then begin if Weight1<Weight2 then result:=-1 else result:=1; end else begin result:=CompareText(TSpecialDir(Item1).VariableName,TSpecialDir(Item2).VariableName); end; end; end; { TSpecialDir.Create } constructor TSpecialDir.Create; begin inherited Create; fDispatcher:=sd_NULL; fVariableName:=''; fPathValue:=''; end; { TSpecialDirList.Create } constructor TSpecialDirList.Create; begin inherited Create; fIndexOfSpecialDirComptibleTC:=0; fIndexOfNewVariableNotInTC:=0; fIndexOfEnvironmentVariable:=0; end; { TSpecialDirList.GetSpecialDir } function TSpecialDirList.GetSpecialDir(Index: Integer): TSpecialDir; begin Result:= TSpecialDir(Items[Index]); end; { TSpecialDirList.Clear } procedure TSpecialDirList.Clear; var i: Integer; begin for i := pred(Count) downto 0 do SpecialDir[i].Free; inherited Clear; end; { TSpecialDirList.PopulatePopupMenuWithSpecialDir } procedure TSpecialDirList.PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate:TComponent; KindSpecialDirMenuPopulation:TKindSpecialDirMenuPopulation; ProcedureIfChangeDirClick:TProcedureWithJustASender); var miMainTree:TMenuItem; IndexVariable:longint; procedure AddStraightToMainTree(CaptionForMenuItem:string; TagForMenuItem:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); begin miMainTree:=TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption:=CaptionForMenuItem; if (CaptionForMenuItem<>'-') AND (ProcedureWhenClickOnMenuItem<>nil) then begin miMainTree.Tag:=TagForMenuItem; miMainTree.OnClick:=ProcedureWhenClickOnMenuItem; end; if mncmpMenuComponentToPopulate.ClassType=TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType=TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; procedure AddToSubMenu(ParamMenuItem:TMenuItem; TagRequested:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); var localmi:TMenuItem; begin localmi:=TMenuItem.Create(ParamMenuItem); localmi.Caption:=GetMenuCaptionAccordingToOptions(SpecialDir[IndexVariable].VariableName,SpecialDir[IndexVariable].PathValue); localmi.tag:=TagRequested; localmi.OnClick:=ProcedureWhenClickOnMenuItem; ParamMenuItem.Add(localmi); end; procedure AddBatchOfMenuItems(SubMenuTitle:string; StartingIndex,StopIndex,TagOffset:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); begin if StopIndex>StartingIndex then begin miMainTree:=TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption:=SubMenuTitle; if mncmpMenuComponentToPopulate.ClassType=TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType=TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); IndexVariable:=StartingIndex; while IndexVariable<StopIndex do begin AddToSubMenu(miMainTree,TagOffset+IndexVariable,ProcedureWhenClickOnMenuItem); inc(IndexVariable); end; end; end; begin case KindSpecialDirMenuPopulation of mp_PATHHELPER: begin //1o) "Use special path...", we add the special path used by TC AddBatchOfMenuItems(rsMsgSpecialDirUseDC,0,IndexOfSpecialDirComptibleTC,100,@SpecialDirMenuClick); //2o) "Use special path...", if in Windows, we add the Windows special folder beginning with TC compatible ones and then the newer ones we introduce in DC {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirUseTC,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,100,@SpecialDirMenuClick); AddBatchOfMenuItems(rsMsgSpecialDirUseOther,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,100,@SpecialDirMenuClick); {$ENDIF} //3o) "Use special path...", then, the ones from environment variable AddBatchOfMenuItems(rsMsgSpecialDirEnvVar,IndexOfEnvironmentVariable,Count,100,@SpecialDirMenuClick); //4o) "Use hotdir path...", then the ones user might have with his HotDir AddStraightToMainTree(rsMsgSpecialDirUseHotDir, 0, nil); gDirectoryHotlist.PopulateMenuWithHotDir(miMainTree,@SpecialDirMenuClick,nil,mpPATHHELPER,TAGOFFSET_FORHOTDIRUSEINPATHHELPER); AddStraightToMainTree('-',0,nil); //5o) "Make relative to special path...", we add the special path used by TC AddBatchOfMenuItems(rsMsgSpecialDirMkDCRel,0,IndexOfSpecialDirComptibleTC,1100,@SpecialDirMenuClick); //6o) "Make relative to special path...", if in Windows, we add the Windows special folder beginning with TC compatible ones and then the newer ones we introduce in DC {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirMkTCTel,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,1100,@SpecialDirMenuClick); AddBatchOfMenuItems(rsMsgSpecialDirMkWnRel,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,1100,@SpecialDirMenuClick); {$ENDIF} //7o) "Make relative to special path...", then, the ones from environment variable AddBatchOfMenuItems(rsMsgSpecialDirMkEnvRel,IndexOfEnvironmentVariable,Count,1100,@SpecialDirMenuClick); //8o) "Make relative to HotDir path...", then, the ones from hotdir AddStraightToMainTree(rsMsgSpecialDirMakeRelToHotDir, 0, nil); gDirectoryHotlist.PopulateMenuWithHotDir(miMainTree,@SpecialDirMenuClick,nil,mpPATHHELPER,TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER); AddStraightToMainTree('-',0,nil); //9o) Then add the item to make the path in absolute format AddStraightToMainTree(rsMsgSpecialDirMkAbso,1,@SpecialDirMenuClick); AddStraightToMainTree('-',0,nil); //10o) Then allow to indicate the one from the active and non-active panel AddStraightToMainTree(rsMsgSpecialDirAddActi,2,@SpecialDirMenuClick); AddStraightToMainTree(rsMsgSpecialDirAddNonActi,3,@SpecialDirMenuClick); //11o) Finally, offer the possibility to browse into folder AddStraightToMainTree(rsMsgSpecialDirBrowsSel,4,@SpecialDirMenuClick); end; //mp_PATHHELPER: mp_CHANGEDIR: begin AddStraightToMainTree(rsMsgSpecialDir,0,nil); mncmpMenuComponentToPopulate:=miMainTree; AddBatchOfMenuItems(rsMsgSpecialDirGotoDC,0,IndexOfSpecialDirComptibleTC,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirGotoTC,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); AddBatchOfMenuItems(rsMsgSpecialDirGotoOther,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); {$ENDIF} AddBatchOfMenuItems(rsMsgSpecialDirGotoEnvVar,IndexOfEnvironmentVariable,Count,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); end; //mp_CHANGEDIR end; //case KindSpecialDirMenuPopulation of end; { TSpecialDirList.SpecialDirMenuClick } procedure TSpecialDirList.SpecialDirMenuClick(Sender: TObject); function GetCorrectPathForHotDirFromHints(AnyPath, WindowsVariableName, WindowsPathName:String):String; var SubWorkingPath,MaybeSubstitionPossible:String; begin result:=AnyPath; SubWorkingPath:=IncludeTrailingPathDelimiter(mbExpandFileName(AnyPath)); MaybeSubstitionPossible:=ExtractRelativePath(IncludeTrailingPathDelimiter(WindowsPathName),SubWorkingPath); if MaybeSubstitionPossible<>SubWorkingPath then result:=IncludeTrailingPathDelimiter(WindowsVariableName)+MaybeSubstitionPossible; end; var Dispatcher:longint; //Indicate wich menuitem user selected RememberFilename, OriginalPath, MaybeResultingOutputPath, sSelectedPath:string; begin with Sender as TComponent do Dispatcher:=tag; OriginalPath:=''; if fRecipientComponent.ClassType=TLabeledEdit then OriginalPath:=TLabeledEdit(fRecipientComponent).Text else if fRecipientComponent.ClassType=TFileNameEdit then OriginalPath:=TFileNameEdit(fRecipientComponent).FileName else if fRecipientComponent.ClassType=TEdit then OriginalPath:=TEdit(fRecipientComponent).Text else if fRecipientComponent.ClassType=TDirectoryEdit then OriginalPath:=TDirectoryEdit(fRecipientComponent).Text; if fRecipientType=pfFILE then begin RememberFilename:=ExtractFilename(OriginalPath); OriginalPath:=ExtractFilePath(OriginalPath); end; MaybeResultingOutputPath:=OriginalPath; //Let's play safe: returned path, by default, if nothing is trig, is the same as the original one, so, no change... case Dispatcher of 1: //Make path absolute begin MaybeResultingOutputPath:=mbExpandFileName(OriginalPath); end; 2: //Add path from active frame begin MaybeResultingOutputPath:=frmMain.ActiveFrame.CurrentLocation; end; 3: //Add path from inactive frame begin MaybeResultingOutputPath:=frmMain.NotActiveFrame.CurrentLocation; end; 4: //Browse and use selected path begin //by default, let's try to initialise dir browser to current dir value and if it's not present, let's take the current path of the active frame if MaybeResultingOutputPath='' then MaybeResultingOutputPath:=frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, mbExpandFileName(MaybeResultingOutputPath), sSelectedPath, False) then MaybeResultingOutputPath:=sSelectedPath; end; 100..1099: //Use... begin MaybeResultingOutputPath:=gSpecialDirList.SpecialDir[Dispatcher-100].VariableName; end; 1100..2099: //Make relative to... begin MaybeResultingOutputPath:=GetCorrectPathForHotDirFromHints(OriginalPath,gSpecialDirList.SpecialDir[Dispatcher-1100].VariableName,gSpecialDirList.SpecialDir[Dispatcher-1100].PathValue); end; TAGOFFSET_FORHOTDIRUSEINPATHHELPER..(TAGOFFSET_FORHOTDIRUSEINPATHHELPER+$FFFF): begin MaybeResultingOutputPath:=gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRUSEINPATHHELPER].HotDirPath; end; TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER..(TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER+$FFFF): begin MaybeResultingOutputPath:=GetCorrectPathForHotDirFromHints(OriginalPath,gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER].HotDirPath,gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER].HotDirPath); end; end; if (MaybeResultingOutputPath<>'') then MaybeResultingOutputPath:=IncludeTrailingPathDelimiter(MaybeResultingOutputPath); if fRecipientType=pfFILE then MaybeResultingOutputPath:=MaybeResultingOutputPath+RememberFilename; if lowercase(OriginalPath)<>lowercase(MaybeResultingOutputPath) then begin if fRecipientComponent.ClassType=TLabeledEdit then TLabeledEdit(fRecipientComponent).Text:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TFileNameEdit then TFileNameEdit(fRecipientComponent).FileName:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TEdit then TEdit(fRecipientComponent).Text:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TDirectoryEdit then TDirectoryEdit(fRecipientComponent).Text:=MaybeResultingOutputPath; end; end; { TSpecialDirList.PopulateSpecialDir } procedure TSpecialDirList.PopulateSpecialDir; var NbOfEnvVar, IndexVar, EqualPos:integer; EnvVar, EnvValue:string; LocalSpecialDir:TSpecialDir; MyYear,MyMonth,MyDay:word; {$IFDEF MSWINDOWS} procedure GetAndStoreSpecialDirInfos(SpecialConstant:integer; VariableName:string; ParamKindOfSpecialDir: TKindOfSpecialDir); var FilePath: array [0..Pred(MAX_PATH)] of WideChar; begin FillChar(FilePath, MAX_PATH, 0); SHGetSpecialFolderPathW(0, @FilePath[0], SpecialConstant, FALSE); if FilePath<>'' then begin LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=ParamKindOfSpecialDir; LocalSpecialDir.VariableName:=VariableName; LocalSpecialDir.PathValue:= UTF16ToUTF8(UnicodeString(FilePath)); Add(LocalSpecialDir); end; end; procedure GetAndStoreKnownDirInfos(const rfid: TGUID; VariableName: String; ParamKindOfSpecialDir: TKindOfSpecialDir); var FilePath: String; begin if GetKnownFolderPath(rfid, FilePath) then begin LocalSpecialDir:= TSpecialDir.Create; LocalSpecialDir.fDispatcher:= ParamKindOfSpecialDir; LocalSpecialDir.VariableName:= VariableName; LocalSpecialDir.PathValue:= FilePath; Add(LocalSpecialDir); end; end; {$ENDIF} begin //Since in configuration we might need to recall this routine, let's clear the list if gSpecialDirList.Count>0 then gSpecialDirList.Clear; LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'COMMANDER_PATH'+VARDELIMITER_END; LocalSpecialDir.PathValue:=ExcludeTrailingPathDelimiter(gpExePath); Add(LocalSpecialDir); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'DC_CONFIG_PATH'+VARDELIMITER_END; LocalSpecialDir.PathValue:=ExcludeTrailingPathDelimiter(gpCfgDir); Add(LocalSpecialDir); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=ENVVARTODAYSDATE; LocalSpecialDir.PathValue:=Format('%d-%2.2d-%2.2d',[1980,01,01]); //Don't worry for the exact date: the routine "ReplaceEnvVars" will substitue for the correct date value Add(LocalSpecialDir); DecodeDate(now,MyYear,MyMonth,MyDay); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'CURRENTUSER'+VARDELIMITER_END; LocalSpecialDir.PathValue:=GetCurrentUserName; Add(LocalSpecialDir); IndexOfSpecialDirComptibleTC:=count; {$IFDEF MSWINDOWS} //Done with the help of: http://stackoverflow.com/questions/471123/accessing-localapplicationdata-equivalent-in-delphi //Also with the help of: http://www.ghisler.ch/board/viewtopic.php?t=12709 //The following ones are compatible with Total Commander //The first three ones are the most susceptible to be used so to speed up time when searching, we'll placed them first in the list //Please note that TC is using this convention for variable name: %$varname% GetAndStoreSpecialDirInfos(CSIDL_PERSONAL,'%$PERSONAL%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_DESKTOP,'%$DESKTOP%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_APPDATA,'%$APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_APPDATA,'%$COMMON_APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_DESKTOPDIRECTORY,'%$COMMON_DESKTOPDIRECTORY%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_DOCUMENTS,'%$COMMON_DOCUMENTS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_PICTURES,'%$COMMON_PICTURES%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_PROGRAMS,'%$COMMON_PROGRAMS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_STARTMENU,'%$COMMON_STARTMENU%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_STARTUP,'%$COMMON_STARTUP%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_FONTS,'%$FONTS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_LOCAL_APPDATA,'%$LOCAL_APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYMUSIC,'%$MYMUSIC%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYPICTURES,'%$MYPICTURES%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYVIDEO,'%$MYVIDEO%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_PROGRAMS,'%$PROGRAMS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTMENU,'%$STARTMENU%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTUP,'%$STARTUP%',sd_WINDOWSTC); if Win32MajorVersion > 5 then begin GetAndStoreKnownDirInfos(FOLDERID_AccountPictures, '%$AccountPictures%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_CameraRoll, '%$CameraRoll%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Contacts, '%$Contacts%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_DeviceMetadataStore, '%$DeviceMetadataStore%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Downloads, '%$Downloads%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_GameTasks, '%$GameTasks%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_ImplicitAppShortcuts, '%$ImplicitAppShortcuts%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Libraries, '%$Libraries%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Links, '%$Links%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_LocalAppDataLow, '%$LocalAppDataLow%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_OriginalImages, '%$OriginalImages%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PhotoAlbums, '%$PhotoAlbums%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Playlists, '%$Playlists%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_ProgramFilesCommonX64, '%$ProgramFilesCommonX64%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_ProgramFilesX64, '%$ProgramFilesX64%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Public, '%$Public%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PublicDownloads, '%$PublicDownloads%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PublicGameTasks, '%$PublicGameTasks%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PublicLibraries, '%$PublicLibraries%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PublicRingtones, '%$PublicRingtones%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_PublicUserTiles, '%$PublicUserTiles%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_QuickLaunch, '%$QuickLaunch%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Ringtones, '%$Ringtones%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_RoamedTileImages, '%$RoamedTileImages%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_RoamingTiles, '%$RoamingTiles%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SampleMusic, '%$SampleMusic%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SamplePictures, '%$SamplePictures%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SamplePlaylists, '%$SamplePlaylists%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SampleVideos, '%$SampleVideos%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SavedGames, '%$SavedGames%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SavedPictures, '%$SavedPictures%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SavedSearches, '%$SavedSearches%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_Screenshots, '%$Screenshots%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SearchHistory, '%$SearchHistory%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SearchTemplates, '%$SearchTemplates%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SidebarDefaultParts, '%$SidebarDefaultParts%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SidebarParts, '%$SidebarParts%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SkyDrive, '%$SkyDrive%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SkyDriveCameraRoll, '%$SkyDriveCameraRoll%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SkyDriveDocuments, '%$SkyDriveDocuments%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_SkyDrivePictures, '%$SkyDrivePictures%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_UserPinned, '%$UserPinned%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_UserProfiles, '%$UserProfiles%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_UserProgramFiles, '%$UserProgramFiles%', sd_WINDOWSTC); GetAndStoreKnownDirInfos(FOLDERID_UserProgramFilesCommon, '%$UserProgramFilesCommon%', sd_WINDOWSTC); end; //These ones are new ones non-compatible on 2014-05-21 with Total Commander IndexOfNewVariableNotInTC:=count; GetAndStoreSpecialDirInfos(CSIDL_ADMINTOOLS,'%$ADMINTOOLS%',sd_WINDOWSNONTC); // { <user name>\Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_ALTSTARTUP,'%$ALTSTARTUP%',sd_WINDOWSNONTC); //{ non localized startup } GetAndStoreSpecialDirInfos(CSIDL_BITBUCKET,'%$BITBUCKET%',sd_WINDOWSNONTC); //{ <desktop>\Recycle Bin } GetAndStoreSpecialDirInfos(CSIDL_CDBURN_AREA,'%$CDBURN_AREA%',sd_WINDOWSNONTC); // { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ADMINTOOLS,'%$COMMON_ADMINTOOLS%',sd_WINDOWSNONTC); // { All Users\Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ALTSTARTUP,'%$COMMON_ALTSTARTUP%',sd_WINDOWSNONTC); // { non localized common startup } GetAndStoreSpecialDirInfos(CSIDL_COMMON_FAVORITES,'%$COMMON_FAVORITES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_COMMON_MUSIC,'%$COMMON_MUSIC%',sd_WINDOWSNONTC); // { All Users\My Music } GetAndStoreSpecialDirInfos(CSIDL_COMMON_OEM_LINKS,'%$COMMON_OEM_LINKS%',sd_WINDOWSNONTC); // { Links to All Users OEM specific apps } GetAndStoreSpecialDirInfos(CSIDL_COMMON_TEMPLATES,'%$COMMON_TEMPLATES%',sd_WINDOWSNONTC); // { All Users\Templates } GetAndStoreSpecialDirInfos(CSIDL_COMMON_VIDEO,'%$COMMON_VIDEO%',sd_WINDOWSNONTC); // { All Users\My Video } GetAndStoreSpecialDirInfos(CSIDL_COMPUTERSNEARME,'%$COMPUTERSNEARME%',sd_WINDOWSNONTC); // { Computers Near Me (computered from Workgroup membership) } GetAndStoreSpecialDirInfos(CSIDL_CONNECTIONS,'%$CONNECTIONS%',sd_WINDOWSNONTC); // { Network and Dial-up Connections } GetAndStoreSpecialDirInfos(CSIDL_CONTROLS,'%$CONTROLS%',sd_WINDOWSNONTC); //{ My Computer\Control Panel } GetAndStoreSpecialDirInfos(CSIDL_COOKIES,'%$COOKIES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_DESKTOPDIRECTORY,'%$DESKTOPDIRECTORY%',sd_WINDOWSNONTC); //{ <user name>\Desktop } GetAndStoreSpecialDirInfos(CSIDL_DRIVES,'%$DRIVES%',sd_WINDOWSNONTC); //{ My Computer } GetAndStoreSpecialDirInfos(CSIDL_FAVORITES,'%$FAVORITES%',sd_WINDOWSNONTC); //{ <user name>\Favorites } GetAndStoreSpecialDirInfos(CSIDL_HISTORY,'%$HISTORY%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_INTERNET,'%$INTERNET%',sd_WINDOWSNONTC); //{ Internet Explorer (icon on desktop) } GetAndStoreSpecialDirInfos(CSIDL_INTERNET_CACHE,'%$INTERNET_CACHE%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_NETHOOD,'%$NETHOOD%',sd_WINDOWSNONTC); //{ <user name>\nethood } GetAndStoreSpecialDirInfos(CSIDL_NETWORK,'%$NETWORK%',sd_WINDOWSNONTC); //{ Network Neighborhood (My Network Places) } GetAndStoreSpecialDirInfos(CSIDL_PERSONAL,'%$PERSONALXP%',sd_WINDOWSNONTC); //{ My Documents. This is equivalent to CSIDL_MYDOCUMENTS in XP and above } GetAndStoreSpecialDirInfos(CSIDL_PRINTERS,'%$PRINTERS%',sd_WINDOWSNONTC); //{ My Computer\Printers } GetAndStoreSpecialDirInfos(CSIDL_PRINTHOOD,'%$PRINTHOOD%',sd_WINDOWSNONTC); //{ <user name>\PrintHood } GetAndStoreSpecialDirInfos(CSIDL_PROFILE,'%$PROFILE%',sd_WINDOWSNONTC); // { USERPROFILE } //GetAndStoreSpecialDirInfos(CSIDL_PROFILES,'%PROFILES%'); //Does not work everywhere, let's remove it. GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES,'%$PROGRAM_FILES%',sd_WINDOWSNONTC); // { C:\Program Files } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILESX86,'%$PROGRAM_FILESX86%',sd_WINDOWSNONTC); // { x86 C:\Program Files on RISC } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES_COMMON,'%$PROGRAM_FILES_COMMON%',sd_WINDOWSNONTC); // { C:\Program Files\Common } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES_COMMONX86,'%$PROGRAM_FILES_COMMONX86%',sd_WINDOWSNONTC); // { x86 C:\Program Files\Common on RISC } GetAndStoreSpecialDirInfos(CSIDL_RECENT,'%$RECENT%',sd_WINDOWSNONTC); //{ <user name>\Recent } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES,'%$RESOURCES%',sd_WINDOWSNONTC); // { Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES_LOCALIZED,'%$RESOURCES_LOCALIZED%',sd_WINDOWSNONTC); // { Localized Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_SENDTO,'%$SENDTO%',sd_WINDOWSNONTC); //{ <user name>\SendTo } GetAndStoreSpecialDirInfos(CSIDL_SYSTEM,'%$SYSTEM%',sd_WINDOWSNONTC); // { GetSystemDirectory() } GetAndStoreSpecialDirInfos(CSIDL_SYSTEMX86,'%$SYSTEMX86%',sd_WINDOWSNONTC); //{ x86 system directory on RISC } GetAndStoreSpecialDirInfos(CSIDL_TEMPLATES,'%$TEMPLATES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_WINDOWS,'%$WINDOWS%',sd_WINDOWSNONTC); // { GetWindowsDirectory() } if Win32MajorVersion > 5 then begin GetAndStoreKnownDirInfos(FOLDERID_ApplicationShortcuts, '%$ApplicationShortcuts%', sd_WINDOWSNONTC); end; {$ENDIF} IndexOfEnvironmentVariable:=count; //Let's store environment variable. It will be possible to search in faster eventually, if required NbOfEnvVar:= GetEnvironmentVariableCount; if NbOfEnvVar>0 then begin for IndexVar:= 1 to NbOfEnvVar do begin EnvVar:= mbGetEnvironmentString(IndexVar); EqualPos:= PosEx('=', EnvVar, 2); if EqualPos <> 0 then begin EnvValue:=copy(EnvVar, EqualPos + 1, MaxInt); {$IFDEF MSWINDOWS} if (not gShowOnlyValidEnv) OR (ExtractFileDrive(EnvValue)<>'') then {$ELSE} if (not gShowOnlyValidEnv) OR (UTF8LeftStr(EnvValue,1)=PathDelim) then {$ENDIF} begin LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_ENVIRONMENTVARIABLE; LocalSpecialDir.VariableName:=VARDELIMITER+copy(EnvVar, 1, EqualPos - 1)+VARDELIMITER_END; LocalSpecialDir.PathValue:=ExcludeTrailingPathDelimiter(EnvValue); // Other path variable values, like the few from DC or the ones from Windows, don't have the trailing path delimiter. So we do the same with path from environment variables. Add(LocalSpecialDir); end; end; end; end; Sort(@CompareSpecialDir); end; { TSpecialDirList.SetSpecialDirRecipientAndItsType } procedure TSpecialDirList.SetSpecialDirRecipientAndItsType(ParamComponent:TComponent; ParamKindOfPathFile:TKindOfPathFile); begin fRecipientComponent:=ParamComponent; fRecipientType:=ParamKindOfPathFile; end; function GetMenuCaptionAccordingToOptions(const WantedCaption:string; const MatchingPath:string):string; begin result:=WantedCaption; if gShowPathInPopup then begin if UTF8length(MatchingPath)<100 then result:=result + ' - ['+IncludeTrailingPathDelimiter(MatchingPath)+']' else result:=result + ' - ['+IncludeTrailingPathDelimiter('...'+UTF8RightStr(MatchingPath,100))+']'; end; end; procedure LoadWindowsSpecialDir; begin gSpecialDirList:=TSpecialDirList.Create; gSpecialDirList.PopulateSpecialDir; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/ushowform.pas������������������������������������������������������������������0000644�0001750�0000144�00000074527�15104114162�016131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Execute internal or external viewer, editor or differ Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uShowForm; {$mode objfpc}{$H+} interface uses Classes, Forms, DCBasicTypes, uFileSource, uFileSourceOperation, uFile, uFileSourceCopyOperation; type { TWaitData } TWaitData = class private procedure ShowOnTopAsync(Data: PtrInt); public procedure ShowOnTop(AForm: TCustomForm); procedure ShowWaitForm; virtual; abstract; procedure Done; virtual; abstract; end; { TViewerWaitData } TViewerWaitData = class(TWaitData) private FFileSource: IFileSource; public constructor Create(aFileSource: IFileSource); destructor Destroy; override; procedure ShowWaitForm; override; procedure Done; override; end; { TEditorWaitData } TEditorWaitData = class(TWaitData) public Files: TFiles; function GetFileList: TStringList; protected FileTimes: array of TFileTime; TargetPath: String; SourceFileSource: IFileSource; TargetFileSource: IFileSource; FModal: Boolean; function GetRelativeFileName(const FullPath: string): string; function GetRelativeFileNames: string; function GetFromPath: string; public constructor Create(aCopyOutOperation: TFileSourceCopyOperation; Modal: Boolean = False); destructor Destroy; override; procedure ShowWaitForm; override; procedure Done; override; protected procedure OnCopyInStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); end; { TViewerModeData } TViewerModeData = class private FMode: Integer; public constructor Create(AMode: Integer); procedure OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); end; TToolDataPreparedProc = procedure(const FileList: TStringList; WaitData: TWaitData; Modal: Boolean = False); // Callback may be called either asynchoronously or synchronously (for modal operations) // pdrInCallback is returned when FunctionToCall either will be called or was already called TPrepareDataResult = (pdrFailed, pdrSynchronous, pdrInCallback); function PrepareData(FileSource: IFileSource; var SelectedFiles: TFiles; FunctionToCall: TFileSourceOperationStateChangedNotify; Modal: Boolean = False): TPrepareDataResult; procedure PrepareToolData(FileSource: IFileSource; var SelectedFiles: TFiles; FunctionToCall: TToolDataPreparedProc); overload; procedure PrepareToolData(FileSource1: IFileSource; var SelectedFiles1: TFiles; FileSource2: IFileSource; var SelectedFiles2: TFiles; FunctionToCall: TToolDataPreparedProc); overload; procedure PrepareToolData(FileSource1: IFileSource; File1: TFile; FileSource2: IFileSource; File2: TFile; FunctionToCall: TToolDataPreparedProc; Modal: Boolean = False); overload; procedure RunExtDiffer(CompareList: TStringList); procedure ShowEditorByGlob(const sFileName: String); procedure ShowEditorByGlob(WaitData: TEditorWaitData); overload; procedure ShowDifferByGlob(const LeftName, RightName: String); procedure ShowDifferByGlobList(const CompareList: TStringList; WaitData: TWaitData; Modal: Boolean = False); procedure ShowViewerByGlob(const sFileName: String); procedure ShowViewerByGlobList(const FilesToView: TStringList; const aFileSource: IFileSource); implementation uses SysUtils, Process, DCProcessUtf8, Dialogs, LCLIntf, DCDateTimeUtils, uShellExecute, uGlobs, uOSUtils, fEditor, fViewer, uDCUtils, uTempFileSystemFileSource, uLng, fDiffer, uDebug, DCOSUtils, uShowMsg, DCStrUtils, uFileSourceProperty, uWfxPluginCopyOutOperation, uFileSourceOperationOptions, uOperationsManager, uFileSourceOperationTypes, uMultiArchiveFileSource, fFileExecuteYourSelf, uFileProcs, uFileSystemFileSource; type { TWaitDataDouble } TWaitDataDouble = class(TWaitData) private FWaitData1, FWaitData2: TEditorWaitData; public constructor Create(WaitData1: TEditorWaitData; WaitData2: TEditorWaitData); procedure ShowWaitForm; override; procedure Done; override; destructor Destroy; override; end; { TViewerWaitThread } TViewerWaitThread = class(TThread) private FFileList : TStringList; FFileSource: IFileSource; protected procedure Execute; override; public constructor Create(const FilesToView: TStringList; const aFileSource: IFileSource); destructor Destroy; override; end; { TExtToolWaitThread } TExtToolWaitThread = class(TThread) private FExternalTool: TExternalTool; FFileList: TStringList; FWaitData: TWaitData; private procedure RunEditDone; procedure ShowWaitForm; protected procedure Execute; override; public constructor Create(ExternalTool: TExternalTool; const FileList: TStringList; WaitData: TWaitData); destructor Destroy; override; end; procedure RunExtTool(const ExtTool: TExternalToolOptions; sFileName: String); var sCmd: String; sParams: String = ''; begin sCmd := ExtTool.Path; sParams := ExtTool.Parameters; // If there is %p already configured in the parameter, we assume user configured it the way he wants. // This might be in non-common case where there are parameters AFTER the filename to open. // If there is not %p, let's do thing like legacy was and let's add the filename received as parameter. if (Pos('%p', sParams) = 0) and (Pos('%f', sParams) = 0) then begin sParams := ConcatenateStrWithSpace(sParams, '%' + ASCII_DLE); sParams := ConcatenateStrWithSpace(sParams, QuoteStr(sFileName)); end; ProcessExtCommandFork(sCmd, sParams, '', nil, ExtTool.RunInTerminal, ExtTool.KeepTerminalOpen); end; procedure RunExtDiffer(CompareList: TStringList); var i : Integer; sCmd: String; sParams:string=''; begin with gExternalTools[etDiffer] do begin sCmd := QuoteStr(ReplaceEnvVars(Path)); if Parameters <> EmptyStr then begin sParams := sParams + ' ' + Parameters; end; sParams := ConcatenateStrWithSpace(sParams, '%' + ASCII_DLE); for i := 0 to CompareList.Count - 1 do sParams := sParams + ' ' + QuoteStr(CompareList.Strings[i]); try ProcessExtCommandFork(sCmd, sParams, '', nil, RunInTerminal, KeepTerminalOpen); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningDiffer, rsMsgInvalidCommandLine + ' (' + rsToolDiffer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; end; procedure ShowEditorByGlob(const sFileName: String); begin if gExternalTools[etEditor].Enabled then begin try RunExtTool(gExternalTools[etEditor], sFileName); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end else ShowEditor(sFileName); end; procedure ShowEditorByGlob(WaitData: TEditorWaitData); var FileList: TStringList; begin if gExternalTools[etEditor].Enabled then begin FileList := TStringList.Create; try FileList.Add(WaitData.Files[0].FullPath); with TExtToolWaitThread.Create(etEditor, FileList, WaitData) do Start; finally FileList.Free end; end else begin ShowEditor(WaitData.Files[0].FullPath, WaitData); end; end; procedure ShowViewerByGlob(const sFileName: String); var sl:TStringList; begin if gExternalTools[etViewer].Enabled then begin try RunExtTool(gExternalTools[etViewer], sFileName); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end else begin sl:=TStringList.Create; try sl.Add(sFileName); ShowViewer(sl); finally FreeAndNil(sl); end; end; end; procedure ShowDifferByGlob(const LeftName, RightName: String); var sl: TStringList; begin if gExternalTools[etDiffer].Enabled then begin sl:= TStringList.Create; try sl.add(LeftName); sl.add(RightName); RunExtDiffer(sl); finally sl.free; end; end else ShowDiffer(LeftName, RightName); end; procedure ShowDifferByGlobList(const CompareList: TStringList; WaitData: TWaitData; Modal: Boolean = False); begin if gExternalTools[etDiffer].Enabled then begin if Assigned(WaitData) then with TExtToolWaitThread.Create(etDiffer, CompareList, WaitData) do Start else RunExtDiffer(CompareList); end else ShowDiffer(CompareList[0], CompareList[1], WaitData, Modal); end; procedure ShowViewerByGlobList(const FilesToView : TStringList; const aFileSource: IFileSource); var I : Integer; WaitThread : TViewerWaitThread; begin if gExternalTools[etViewer].Enabled then begin if aFileSource.IsClass(TTempFileSystemFileSource) then begin WaitThread := TViewerWaitThread.Create(FilesToView, aFileSource); WaitThread.Start; end else begin // TODO: If possible should run one instance of external viewer // with multiple file names as parameters. for i:=0 to FilesToView.Count-1 do RunExtTool(gExternalTools[etViewer], FilesToView.Strings[i]); end; end // gUseExtView else begin if aFileSource.IsClass(TTempFileSystemFileSource) then ShowViewer(FilesToView, TViewerWaitData.Create(aFileSource)) else ShowViewer(FilesToView); end; end; { TWaitData } procedure TWaitData.ShowOnTopAsync(Data: PtrInt); var Form: TCustomForm absolute Data; begin Form.ShowOnTop; end; procedure TWaitData.ShowOnTop(AForm: TCustomForm); var Data: PtrInt absolute AForm; begin Application.QueueAsyncCall(@ShowOnTopAsync, Data); end; { TViewerWaitData } constructor TViewerWaitData.Create(aFileSource: IFileSource); begin FFileSource:= aFileSource; end; destructor TViewerWaitData.Destroy; begin inherited Destroy; FFileSource:= nil; end; procedure TViewerWaitData.ShowWaitForm; begin end; procedure TViewerWaitData.Done; begin end; { TWaitDataDouble } constructor TWaitDataDouble.Create(WaitData1: TEditorWaitData; WaitData2: TEditorWaitData); begin FWaitData1 := WaitData1; FWaitData2 := WaitData2; end; procedure TWaitDataDouble.ShowWaitForm; begin try if Assigned(FWaitData1) then FWaitData1.ShowWaitForm; finally if Assigned(FWaitData2) then FWaitData2.ShowWaitForm; end; end; procedure TWaitDataDouble.Done; begin try if Assigned(FWaitData1) then FWaitData1.Done; finally FWaitData1 := nil; try if Assigned(FWaitData2) then FWaitData2.Done; finally FWaitData2 := nil; Free; end; end; end; destructor TWaitDataDouble.Destroy; begin inherited Destroy; if Assigned(FWaitData1) then FWaitData1.Free; if Assigned(FWaitData2) then FWaitData2.Free; end; { TEditorWaitData } constructor TEditorWaitData.Create(aCopyOutOperation: TFileSourceCopyOperation; Modal: Boolean = False); var I: Integer; aFileSource: ITempFileSystemFileSource; begin aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; TargetPath := aCopyOutOperation.SourceFiles.Path; Files := aCopyOutOperation.SourceFiles.Clone; ChangeFileListRoot(aFileSource.FileSystemRoot, Files); SetLength(FileTimes, Files.Count); for I := 0 to Files.Count - 1 do FileTimes[I] := mbFileAge(Files[I].FullPath); // Special case for bzip2 like archivers which don't store file size if Files.Count = 1 then Files[0].Size := mbFileSize(Files[0].FullPath); SourceFileSource := aFileSource; TargetFileSource := aCopyOutOperation.FileSource as IFileSource; FModal := Modal; end; destructor TEditorWaitData.Destroy; begin inherited Destroy; Files.Free; SourceFileSource:= nil; TargetFileSource:= nil; end; function TEditorWaitData.GetRelativeFileName(const FullPath: string): string; begin Result := ExtractDirLevel(IncludeTrailingPathDelimiter(Files.Path), FullPath); end; function TEditorWaitData.GetRelativeFileNames: string; var I: Integer; begin Result := GetRelativeFileName(Files[0].FullPath); for I := 1 to Files.Count - 1 do Result := Result + ', ' + GetRelativeFileName(Files[I].FullPath); end; function TEditorWaitData.GetFromPath: string; begin if StrBegins(TargetPath, TargetFileSource.CurrentAddress) then Result := TargetPath // Workaround for TGioFileSource else Result := TargetFileSource.CurrentAddress + TargetPath; end; procedure TEditorWaitData.ShowWaitForm; begin ShowFileEditExternal(GetRelativeFileNames, GetFromPath, Self, FModal); end; procedure TEditorWaitData.Done; var I: Integer; Msg: String; FileTime: TFileTime; DoNotFreeYet: Boolean = False; Operation: TFileSourceCopyOperation; begin try for I := Files.Count - 1 downto 0 do begin FileTime:= mbFileAge(Files[I].FullPath); if (FileTime = FileTimes[I]) or (not msgYesNo(Format(rsMsgCopyBackward, [GetRelativeFileName(Files[I].FullPath)]) + LineEnding + LineEnding + GetFromPath)) then begin Files.Delete(I); end else begin Files[I].ModificationTime:= FileTimeToDateTime(FileTime); end; end; // Files were modified if Files.Count > 0 then begin if (fsoCopyIn in TargetFileSource.GetOperationsTypes) and (not (TargetFileSource is TMultiArchiveFileSource)) then begin Operation:= TargetFileSource.CreateCopyInOperation(SourceFileSource, Files, TargetPath) as TFileSourceCopyOperation; // Copy files back if Assigned(Operation) then begin Operation.AddStateChangedListener([fsosStopped], @OnCopyInStateChanged); Operation.FileExistsOption:= fsoofeOverwrite; if FModal then OperationsManager.AddOperationModal(Operation) else OperationsManager.AddOperation(Operation); DoNotFreeYet:= True; // Will be free in operation end; end else begin Msg := rsMsgCouldNotCopyBackward + LineEnding; for I := 0 to Files.Count-1 do Msg := Msg + LineEnding + Files[I].FullPath; if msgYesNo(Msg) then (SourceFileSource as ITempFileSystemFileSource).DeleteOnDestroy:= False; end; end; finally if not DoNotFreeYet then Free; end; end; procedure TEditorWaitData.OnCopyInStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var I: Integer; Msg: string; aFileSource: ITempFileSystemFileSource; aCopyOperation: TFileSourceCopyOperation; begin if (State = fsosStopped) then begin aCopyOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOperation.SourceFileSource as ITempFileSystemFileSource; with aCopyOperation.RetrieveStatistics do begin if DoneFiles <> TotalFiles then begin Msg := rsMsgCouldNotCopyBackward + LineEnding; for I := 0 to aCopyOperation.SourceFiles.Count-1 do Msg := Msg + LineEnding + aCopyOperation.SourceFiles[I].FullPath; if msgYesNo(Operation.Thread, Msg) then begin aFileSource.DeleteOnDestroy:= False; end; end; end; Free; end; end; function TEditorWaitData.GetFileList: TStringList; var I: Integer; begin Result := TStringList.Create; for I := 0 to Files.Count - 1 do Result.Add(Files[I].FullPath); end; { TViewerModeData } constructor TViewerModeData.Create(AMode: Integer); begin FMode:= AMode; end; procedure TViewerModeData.OnCopyOutStateChanged( Operation: TFileSourceOperation; State: TFileSourceOperationState); var aFileList: TStringList; aFileSource: ITempFileSystemFileSource; aCopyOutOperation: TFileSourceCopyOperation; begin try if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin aFileList := TStringList.Create; try aCopyOutOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; ChangeFileListRoot(aFileSource.FileSystemRoot, aCopyOutOperation.SourceFiles); aFileList.Add(aCopyOutOperation.SourceFiles[0].FullPath); ShowViewer(aFileList, FMode, TViewerWaitData.Create(aFileSource)); finally aFileList.Free; end; end; finally Free; end; end; { TExtToolWaitThread } procedure TExtToolWaitThread.RunEditDone; begin FWaitData.Done; end; procedure TExtToolWaitThread.ShowWaitForm; begin FWaitData.ShowWaitForm; end; procedure TExtToolWaitThread.Execute; var I: Integer; StartTime: QWord; Process : TProcessUTF8; sCmd, sSecureEmptyStr: String; begin try Process := TProcessUTF8.Create(nil); try with gExternalTools[FExternalTool] do begin sCmd := ReplaceEnvVars(Path); // TProcess arguments must be enclosed with double quotes and not escaped. if RunInTerminal then begin sCmd := QuoteStr(sCmd); if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; for I := 0 to FFileList.Count - 1 do sCmd := sCmd + ' ' + QuoteStr(FFileList[I]); sSecureEmptyStr := EmptyStr; // Let's play safe and don't let EmptyStr being passed as "VAR" parameter of "FormatTerminal" FormatTerminal(sCmd, sSecureEmptyStr, False); end else begin sCmd := '"' + sCmd + '"'; if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; for I := 0 to FFileList.Count - 1 do sCmd := sCmd + ' "' + FFileList[I] + '"'; end; end; Process.CommandLine := sCmd; Process.Options := [poWaitOnExit]; StartTime:= GetTickCount64; Process.Execute; // If an editor closes within gEditWaitTime amount of milliseconds, // assume that it's a multiple document editor and show dialog where // user can confirm when editing has ended. if GetTickCount64 - StartTime < gEditWaitTime then begin Synchronize(@ShowWaitForm); end else begin Synchronize(@RunEditDone); end; finally Process.Free; end; except FWaitData.Free; end; end; constructor TExtToolWaitThread.Create(ExternalTool: TExternalTool; const FileList: TStringList; WaitData: TWaitData); begin inherited Create(True); FreeOnTerminate := True; FExternalTool := ExternalTool; FFileList := TStringList.Create; // Make a copy of list elements. FFileList.Assign(FileList); FWaitData := WaitData; end; destructor TExtToolWaitThread.Destroy; begin FFileList.Free; inherited Destroy; end; { TViewerWaitThread } constructor TViewerWaitThread.Create(const FilesToView: TStringList; const aFileSource: IFileSource); begin inherited Create(True); FreeOnTerminate := True; FFileList := TStringList.Create; // Make a copy of list elements. FFileList.Assign(FilesToView); FFileSource := aFileSource; end; destructor TViewerWaitThread.Destroy; begin if Assigned(FFileList) then FreeAndNil(FFileList); // Delete the temporary file source and all files inside. FFileSource := nil; inherited Destroy; end; procedure TViewerWaitThread.Execute; var Process : TProcessUTF8; sCmd, sSecureEmptyStr: String; begin Process := TProcessUTF8.Create(nil); with gExternalTools[etViewer] do begin sCmd := ReplaceEnvVars(Path); // TProcess arguments must be enclosed with double quotes and not escaped. if RunInTerminal then begin sCmd := QuoteStr(sCmd); if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' ' + QuoteStr(FFileList.Strings[0]); sSecureEmptyStr := EmptyStr; //Let's play safe and don't let EmptyStr being passed as "VAR" parameter of "FormatTerminal" FormatTerminal(sCmd, sSecureEmptyStr, False); end else begin sCmd := '"' + sCmd + '"'; if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' "' + FFileList.Strings[0] + '"'; end; end; Process.CommandLine := sCmd; Process.Options := [poWaitOnExit]; Process.Execute; Process.Free; end; { PrepareData } function PrepareData(FileSource: IFileSource; var SelectedFiles: TFiles; FunctionToCall: TFileSourceOperationStateChangedNotify; Modal: Boolean = False): TPrepareDataResult; var I: Integer; aFile: TFile; Directory: String; TempFiles: TFiles = nil; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation; begin // If files are links to local files if (fspLinksToLocalFiles in FileSource.Properties) then begin for I := 0 to SelectedFiles.Count - 1 do begin aFile := SelectedFiles[I]; FileSource.GetLocalName(aFile); end; end // If files not directly accessible copy them to temp file source. else if not (fspDirectAccess in FileSource.Properties) then begin if not (fsoCopyOut in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit(pdrFailed); end; Directory := GetTempName(GetTempFolderDeletableAtTheEnd, EmptyStr); if not mbForceDirectory(Directory) then begin MessageDlg(mbSysErrorMessage(GetLastOSError), mtError, [mbOK], 0); Exit(pdrFailed); end; TempFileSource := TTempFileSystemFileSource.Create(Directory); TempFiles := SelectedFiles.Clone; try Operation := FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if Operation is TWfxPluginCopyOutOperation then (Operation as TWfxPluginCopyOutOperation).NeedsConnection := False; // use separate connection finally TempFiles.Free; end; if not Assigned(Operation) then begin msgWarning(rsMsgErrNotSupported); Exit(pdrFailed); end; Operation.AddStateChangedListener([fsosStopped], FunctionToCall); if Modal then OperationsManager.AddOperationModal(Operation) else OperationsManager.AddOperation(Operation); Exit(pdrInCallback); end; Exit(pdrSynchronous); end; { TToolDataPreparator } type TToolDataPreparator = class protected FFunc: TToolDataPreparedProc; FCallOnFail: Boolean; procedure OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); public constructor Create(FunctionToCall: TToolDataPreparedProc; CallOnFail: Boolean = False); procedure Prepare(FileSource: IFileSource; var SelectedFiles: TFiles); end; constructor TToolDataPreparator.Create(FunctionToCall: TToolDataPreparedProc; CallOnFail: Boolean = False); begin FFunc := FunctionToCall; FCallOnFail := CallOnFail; end; procedure TToolDataPreparator.Prepare(FileSource: IFileSource; var SelectedFiles: TFiles); var I: Integer; FileList: TStringList; begin case PrepareData(FileSource, SelectedFiles, @OnCopyOutStateChanged) of pdrSynchronous: try FileList := TStringList.Create; for I := 0 to SelectedFiles.Count - 1 do FileList.Add(SelectedFiles[i].FullPath); FFunc(FileList, nil); finally Free; end; pdrFailed: try if FCallOnFail then FFunc(nil, nil); finally Free; end; end; end; procedure TToolDataPreparator.OnCopyOutStateChanged( Operation: TFileSourceOperation; State: TFileSourceOperationState); var WaitData: TEditorWaitData; begin if (State <> fsosStopped) then Exit; try if Operation.Result = fsorFinished then begin WaitData := TEditorWaitData.Create(Operation as TFileSourceCopyOperation); FFunc(WaitData.GetFileList, WaitData); end else begin if FCallOnFail then FFunc(nil, nil); end; finally Free; end; end; { TToolDataPreparator2 } type TToolDataPreparator2 = class protected FFunc: TToolDataPreparedProc; FCallOnFail: Boolean; FModal: Boolean; FFailed: Boolean; FFileList1: TStringList; FFileList2: TStringList; FPrepared1: Boolean; FPrepared2: Boolean; FWaitData1: TEditorWaitData; FWaitData2: TEditorWaitData; procedure OnCopyOutStateChanged1(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnCopyOutStateChanged2(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure TryFinish; public constructor Create(FunctionToCall: TToolDataPreparedProc; CallOnFail: Boolean = False); procedure Prepare(FileSource1: IFileSource; var SelectedFiles1: TFiles; FileSource2: IFileSource; var SelectedFiles2: TFiles; Modal: Boolean = False); destructor Destroy; override; end; constructor TToolDataPreparator2.Create(FunctionToCall: TToolDataPreparedProc; CallOnFail: Boolean = False); begin FFunc := FunctionToCall; FCallOnFail := CallOnFail; end; procedure TToolDataPreparator2.Prepare(FileSource1: IFileSource; var SelectedFiles1: TFiles; FileSource2: IFileSource; var SelectedFiles2: TFiles; Modal: Boolean = False); var I: Integer; begin FModal := Modal; case PrepareData(FileSource1, SelectedFiles1, @OnCopyOutStateChanged1, Modal) of pdrSynchronous: begin FFileList1 := TStringList.Create; for I := 0 to SelectedFiles1.Count - 1 do FFileList1.Add(SelectedFiles1[I].FullPath); FPrepared1 := True; end; pdrFailed: begin try if FCallOnFail then FFunc(nil, nil, FModal); finally Free; end; Exit; end; end; case PrepareData(FileSource2, SelectedFiles2, @OnCopyOutStateChanged2, Modal) of pdrSynchronous: begin FFileList2 := TStringList.Create; for I := 0 to SelectedFiles2.Count - 1 do FFileList2.Add(SelectedFiles2[I].FullPath); FPrepared2 := True; TryFinish; end; pdrFailed: begin FPrepared2 := True; FFailed := True; TryFinish; end; end; end; procedure TToolDataPreparator2.OnCopyOutStateChanged1( Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if (State <> fsosStopped) then Exit; FPrepared1 := True; if not FFailed then begin if Operation.Result = fsorFinished then begin FWaitData1 := TEditorWaitData.Create(Operation as TFileSourceCopyOperation, FModal); FFileList1 := FWaitData1.GetFileList; end else begin FFailed := True; // if not FPrepared2 and Assigned(FOperation2) then // FOperation2.Stop(); end; end; TryFinish; end; procedure TToolDataPreparator2.OnCopyOutStateChanged2( Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if (State <> fsosStopped) then Exit; FPrepared2 := True; if not FFailed then begin if Operation.Result = fsorFinished then begin FWaitData2 := TEditorWaitData.Create(Operation as TFileSourceCopyOperation, FModal); FFileList2 := FWaitData2.GetFileList; end else begin FFailed := True; // if not FPrepared1 and Assigned(FOperation1) then // FOperation1.Stop(); end; end; TryFinish; end; procedure TToolDataPreparator2.TryFinish; var s: string; WaitData: TWaitDataDouble; begin if FPrepared1 and FPrepared2 then try if FFailed then begin if FCallOnFail then FFunc(nil, nil, FModal); Exit; end; if Assigned(FFileList2) then for s in FFileList2 do FFileList1.Append(s); if Assigned(FWaitData1) or Assigned(FWaitData2) then begin WaitData := TWaitDataDouble.Create(FWaitData1, FWaitData2); FWaitData1 := nil; FWaitData2 := nil; FFunc(FFileList1, WaitData, FModal); end else FFunc(FFileList1, nil, FModal); finally Free; end; end; destructor TToolDataPreparator2.Destroy; begin inherited Destroy; if Assigned(FFileList1) then FFileList1.Free; if Assigned(FFileList2) then FFileList2.Free; if Assigned(FWaitData1) then FWaitData1.Free; if Assigned(FWaitData2) then FWaitData2.Free; end; procedure PrepareToolData(FileSource: IFileSource; var SelectedFiles: TFiles; FunctionToCall: TToolDataPreparedProc); begin with TToolDataPreparator.Create(FunctionToCall) do Prepare(FileSource, SelectedFiles); end; procedure PrepareToolData(FileSource1: IFileSource; var SelectedFiles1: TFiles; FileSource2: IFileSource; var SelectedFiles2: TFiles; FunctionToCall: TToolDataPreparedProc); begin with TToolDataPreparator2.Create(FunctionToCall) do Prepare(FileSource1, SelectedFiles1, FileSource2, SelectedFiles2); end; procedure PrepareToolData(FileSource1: IFileSource; File1: TFile; FileSource2: IFileSource; File2: TFile; FunctionToCall: TToolDataPreparedProc; Modal: Boolean = False); var Files1, Files2: TFiles; begin Files1 := TFiles.Create(File1.Path); try Files1.Add(File1.Clone); Files2 := TFiles.Create(File2.Path); try Files2.Add(File2.Clone); with TToolDataPreparator2.Create(FunctionToCall) do Prepare(FileSource1, Files1, FileSource2, Files2, Modal); finally Files2.Free; end; finally Files1.Free; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/ushellexecute.pas��������������������������������������������������������������0000644�0001750�0000144�00000116357�15104114162�016755� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains some functions for open files in associated applications. Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uShellExecute; {$mode objfpc}{$H+} interface uses Classes, uFile, uFileView, fMain; const ASCII_DLE = #16; type TPrepareParameterOption = (ppoNormalizePathDelims, ppoReplaceTilde); TPrepareParameterOptions = set of TPrepareParameterOption; procedure PrepareOutput(var sParams: String; const sWorkPath: String; const ATemp: String = ''); function PrepareParameter(sParam: string; paramFile: TFile = nil; options: TPrepareParameterOptions = []; pbShowCommandLinePriorToExecute: PBoolean = nil; pbRunInTerminal: PBoolean = nil; pbKeepTerminalOpen: PBoolean = nil; pbAbortOperation: PBoolean = nil): string; overload; {en Replace variable parameters that depend on files in panels. } function ReplaceVarParams(sSourceStr: string; paramFile: TFile = nil; pbShowCommandLinePriorToExecute: PBoolean = nil; pbRunInTerminal: PBoolean = nil; pbKeepTerminalOpen: PBoolean = nil; pbAbortOperation: PBoolean = nil): string; overload; {en Replace variable parameters that depend on the file in active dir. } function ProcessExtCommandFork(sCmd: string; sParams: string = ''; sWorkPath: string = ''; paramFile: TFile = nil; bTerm: boolean = False; bKeepTerminalOpen: boolean = False): boolean; function ShellExecuteEx(sActionName, sFileName, sActiveDir: string): boolean; implementation uses //Notes: StrUtils is here first, so because of visibility rules, if a called // routine name is present both in "StrUtils" and one of the following // it will be one of the following that will be used and not the one // "StrUtils". Make sure to let "StrUtils" at the first position. // "StrUtils" is here to have the "PosEx". //Lazarus, Free-Pascal, etc. StrUtils, Dialogs, SysUtils, Process, UTF8Process, LazUTF8, LConvEncoding, DCUnicodeUtils, DCConvertEncoding, //DC uShowMsg, uDCUtils, uLng, uFormCommands, fViewer, fEditor, uShowForm, uGlobs, uOSUtils, uFileSystemFileSource, DCOSUtils, DCStrUtils, DCClassesUtf8; //Dialogs, //LConvEncoding; (* Functions (without parameters they give output for all selected files): Miscellaneous: %? - as first parameter only, it will show report to show command line prior to execute %% - to use one time the percent sign "File related": ------------------------------------------------------------------------------ %f - only filename %d - only path of the file %z - last directory of path of the file %p - path + filename %o - only the filename with no extension %e - only the file extension %v - only relative path + filename %D - current path in active or chosen panel %Z - last directory of path of active or chosen panel %a - address + path + filename %A - current address in active or chosen panel %F - file list with file name only %L - file list with full file name %R - file list with relative path + file name %F, %L and %R - create a list file in the TEMP directory with the names of the selected files and directories, and appends the name of the list file to the command line "Choosing encoding" for %F, $L and %R (if not given, system encoding used): --------------------------------------------------------------------------- %X[U|W|Q] - where X is function %F, %L or %R U - UTF-8, W - UTF-16 (with byte order marker), Q - quote file name by double quotes "Choosing panel" (if not given, active panel is used): ------------------------------------------------------------------------------ %X[l|r|s|t] - where X is function (l - left, r - right, s - source, t - target) s - source or active panel (no matter if it's left or right) t - target or inactive panel (no matter if it's left or right) l - left panel r - right panel b - both panels, left first, right second p - both panels, active first, inactive second "Choosing selected files" (only for %f, %d, %p, %o and %e): ------------------------------------------------------------------------------ %X[<nr>] - where X is function <nr> is 1..n, where n is number of selected files. Also <nr> can be 0, file under cursor is used in this case. If there are no selected files, currently active file is nr 1. If <nr> is invalid or there is no selected file by that number the result for the whole function will be empty string. "Adding prefix, postfix before or after the result string": ------------------------------------------------------------------------------ %X[{<prefix>}][{<postfix>}] If applied to multiple files, each name is prefixed/postfixed. Control if %f, %d, etc... will return name between quotes or not ---------------------------------------------------------------- %" - will set default. For DC legacy is quoted %"0 - will make the result unquoted %"1 - will make the result quoted Control if %D, %d etc... will return path name with the ending delimiter or not ------------------------------------------------------------------------------- %/ - will set default. For DC legacy it was without ending delimited %/0 - will exclude the ending delimiter %/1 - will include the ending delimiter Prompt the user with a sentence, propose a default, and use what the user typed ------------------------------------------------------------------------------- %[This required the \\DB-2010\ server to be online!] - if no default value is given, DC will simply shows the message, assuming it's simply to echo a message. %[Enter with required;1024] - This is an example. The text following the ";" indicates that default value is 1024 %[First name;%o] - The text proposed in the parameter value may be parsed prior to be displayed to user. For example here, the %o will be substituted to the filename with no extension prior to be displayed to user. Control what will be the effective "%" char (for situation where we want the "%" to be the "#" sign instead ----------------------------------------------------------------------------------------------------------- %# - Will set the percent-variable indicator to be the "#" character from now on when evaluating the line. Note that it will be evaluated -only- when the current percent-variable indicator is "%". #% - Will set the percent-variable indicator to be the "%" character from now on when evaluating the line. Note that it will be evaluated -only- when the current percent-variable indicator is "#". Control if it run in terminal, if it close it at the end or not --------------------------------------------------------------- %t - Will have it run in terminal for sure, close or not depend of the action requested %t0 - Will run in terminal AND request to close it at the end %t1 - Will run in terminal AND let it run at the end Above parameters can be combined together. ------------------------------------------------------------------------------ Order of params: - %function - quoting and encoding (only for %F, %L and %R) - left or right or source or target panel (optional) - nr of file (optional) - prefix, postfix (optional) Examples: %f1 - first selected file in active panel %pr2 - full path of second selected file in right panel %fl - only filenames from left panel %pr - full filenames from right panel %Dl - current path in left panel %f{-f } - prepend each name with "-f " (ex.: -f <file_1> -f <file_2>) %f{"}{"} - enclose each name in quotes (ex.: "<file_1>" "<file_2>") %f1{-first }%f2{ -second } - if only 1 file selected : -first <file_1> - if 2 (or more) files selected: -first <file_1> -second <file_2> *) function ReplaceVarParams(sSourceStr: string; paramFile: TFile; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean; pbAbortOperation: PBoolean = nil): string; type TFunctType = (ftNone, ftName, ftDir, ftLastDir, ftPath, ftSingleDir, ftLastSingleDir, ftSource, ftSourcePath, ftFileFullList, ftFileNameList, ftRelativeFileNameList, ftNameNoExt, ftExtension, ftRelativePath, ftProcessPercentSignIndicator, ftJustSetTheShowFlag, ftSetTrailingDelimiter, ftSetQuoteOrNot, ftSetTerminalOptions, ftEchoSimpleMessage, ftPromptUserForParam, ftExecuteConsoleCommand); TFuncModifiers = set of (fmQuote, fmUTF8, fmUTF16); TStatePos = (spNone, spPercent, spFunction, spPrefix, spPostfix, spGotPrefix, spSide, spIndex, spUserInputOrEcho, spGotInputHintWaitEndDefaultVal, spGetExecuteConsoleCommand, spComplete); var leftFiles: TFiles = nil; rightFiles: TFiles = nil; singleFileFiles: TFiles = nil; leftFile: TFile; rightFile: TFile; activeFile: TFile; inactiveFile: TFile; activeFiles: TFiles; inactiveFiles: TFiles; activeDir: string; inactiveDir: string; activeAddress: string; inactiveAddress: string; bTrailingDelimiter: boolean = False; bQuoteOrNot: boolean = True; CurrentPercentIndicator: char = '%'; bKeepProcessParameter:boolean = true; // There is a inside recursive function because of the %[ that could have a parameter that could be parsed using the same function. // It would have been possible to simply call again "ReplaceVarParams" without an inner function... // ...but there are a few things that would have not work as what the user would expect. // For example, if user would have wrote previously %"0 to have the following not include the quote, by simply recalling "ReplaceVarParams" itself, if he would have used then a %o in the default parameter value for the %[ , the filename would have been quoted again since it's the default when entering into the "ReplaceVarParams" function originally... // Same similar problem with the bTrailingDelimiter, etc. // So that's why there is an inner recursive functions where the kind of local-global flag like the ones mentionned above have to be global for the current parsed string. function InnerRecursiveReplaceVarParams(sSourceStr: string; paramFile: TFile; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean; pbAbortOperation: PBoolean = nil): string; type Tstate = record pos: TStatePos; functStartIndex: integer; funct: TFunctType; functMod: TFuncModifiers; files: TFiles; otherfiles: TFiles; fil: TFile; otherfil: TFile; dir: string; address: string; sFileIndex: string; prefix, postfix: string; // a string to add before/after each output // (for functions giving output of multiple strings) sSubParam: string; sUserMessage: string; end; var index: integer; state: Tstate; sOutput: string = ''; parseStartIndex: integer; function BuildName(aFile: TFile): string; begin //1. Processing according to function requested case state.funct of ftName, ftDir, ftLastDir, ftPath, ftNameNoExt, ftExtension, ftSingleDir, ftLastSingleDir, ftRelativePath, ftSource, ftSourcePath: begin case state.funct of ftName: Result := aFile.Name; ftDir: Result := aFile.Path; ftLastDir: Result := GetLastDir(aFile.Path); ftPath: Result := aFile.FullPath; ftNameNoExt: Result := aFile.NameNoExt; ftExtension: Result := aFile.Extension; ftRelativePath: Result := ExtractRelativepath(state.dir, aFile.FullPath); ftSingleDir: Result := state.dir; ftLastSingleDir: Result := GetLastDir(state.dir); ftSource: Result := state.address; ftSourcePath: Result := state.address + aFile.FullPath; end; end; else Exit(''); end; //2. Processing the prefix/postfix requested Result := state.prefix + Result + state.postfix; //3. Processing the trailing path delimiter requested case state.funct of ftDir, ftLastDir, ftSingleDir, ftLastSingleDir: begin if bTrailingDelimiter then Result := IncludeTrailingPathDelimiter(Result) else Result := ExcludeBackPathDelimiter(Result); end; end; //4. Processing the quotes requested if bQuoteOrNot then Result := QuoteStr(Result); end; function BuildAllNames: string; var i: integer; begin Result := ''; if Assigned(state.files) then for i := 0 to pred(state.files.Count) do Result := ConcatenateStrWithSpace(Result, BuildName(state.files[i])); if Assigned(state.otherfiles) then for i := 0 to pred(state.otherfiles.Count) do Result := ConcatenateStrWithSpace(Result, BuildName(state.otherfiles[i])); end; function BuildFile(aFile: TFile): string; begin case state.funct of ftFileFullList: Result := aFile.FullPath; ftFileNameList: Result := aFile.Name; ftRelativeFileNameList: Result := ExtractRelativepath(state.dir, aFile.FullPath); else Result := aFile.Name; end; if aFile.isDirectory then begin if bTrailingDelimiter then Result := IncludeTrailingPathDelimiter(Result) else Result := ExcludeBackPathDelimiter(Result); end; if (fmQuote in state.functMod) then Result := '"' + Result + '"'; if (fmUTF16 in state.functMod) then Result := Utf8ToUtf16LE(Result) else if not (fmUTF8 in state.functMod) then Result := CeUtf8ToSys(Result); end; function BuildFileList: String; var I: integer; FileName: ansistring; FileList: TFileStreamEx; LineEndingA: ansistring = LineEnding; begin Result := GetTempName(GetTempFolderDeletableAtTheEnd + 'Filelist', 'lst'); try FileList := TFileStreamEx.Create(Result, fmCreate); try if fmUTF16 in state.functMod then begin FileName := UTF16LEBOM; LineEndingA := Utf8ToUtf16LE(LineEnding); end; if Assigned(state.files) then begin if state.files.Count > 0 then begin for I := 0 to state.files.Count - 1 do FileName += BuildFile(state.files[I]) + LineEndingA; end; end; if Assigned(state.otherfiles) then begin if state.otherfiles.Count > 0 then begin FileName += LineEndingA; for I := 0 to state.otherfiles.Count - 1 do FileName += BuildFile(state.otherfiles[I]) + LineEndingA; end; end; FileList.Write(FileName[1], Length(FileName)); finally FileList.Free; end; except Result := EmptyStr; end; end; procedure ResetState(var aState: TState); begin with aState do begin pos := spNone; fil := activeFile; otherfil := nil; if paramFile <> nil then files := singleFileFiles else files := activeFiles; otherfiles := nil; dir := activeDir; address := activeAddress; sFileIndex := ''; funct := ftNone; functMod := []; functStartIndex := 0; prefix := ''; postfix := ''; sSubParam := ''; sUserMessage := ''; end; end; procedure AddParsedText(limit: integer); begin // Copy [parseStartIndex .. limit - 1]. if limit > parseStartIndex then sOutput := sOutput + Copy(sSourceStr, parseStartIndex, limit - parseStartIndex); parseStartIndex := index; end; procedure SetTrailingPathDelimiter; begin bTrailingDelimiter := state.sSubParam = '1'; // Currently in the code, anything else than "0" will include the trailing delimiter. // BUT, officially, in the documentation, just state that 0 or 1 is required. // This could give room for future addition maybe. end; procedure SetQuoteOrNot; begin bQuoteOrNot := not (state.sSubParam = '0'); // Currently in the code, anything else than "0" will indicate we want to quote // BUT, officially, in the documentation, just state that 0 or 1 is required. // This could give room for future addition maybe. end; procedure SetTerminalOptions; begin if pbRunInTerminal <> nil then begin pbRunInTerminal^ := True; if pbKeepTerminalOpen <> nil then pbKeepTerminalOpen^ := not (state.sSubParam = '0'); end; end; procedure JustEchoTheMessage; begin state.sUserMessage := InnerRecursiveReplaceVarParams(state.sUserMessage, paramFile, pbShowCommandLinePriorToExecute, pbRunInTerminal, pbKeepTerminalOpen, pbAbortOperation); msgOK(state.sUserMessage); end; procedure AskUserParamAndReplace; begin state.sSubParam := InnerRecursiveReplaceVarParams(state.sSubParam, paramFile, pbShowCommandLinePriorToExecute, pbRunInTerminal, pbKeepTerminalOpen, pbAbortOperation); if ShowInputQuery(rsMsgCofirmUserParam, state.sUserMessage, state.sSubParam) then begin sOutput := sOutput + state.sSubParam; end else begin bKeepProcessParameter:=False; end; end; procedure ExecuteConsoleCommand; var sTmpFilename, sShellCmdLine: string; Process: TProcessUTF8; begin sTmpFilename := GetTempName(GetTempFolderDeletableAtTheEnd); //sShellCmdLine := Copy(state.sSubParam, 3, length(state.sSubParam)-2) + ' > ' + QuoteStr(sTmpFilename); sShellCmdLine := state.sSubParam + ' > ' + QuoteStr(sTmpFilename); Process := TProcessUTF8.Create(nil); try Process.CommandLine := FormatShell(sShellCmdLine); Process.Options := [poNoConsole, poWaitOnExit]; Process.Execute; finally Process.Free; end; sOutput := sOutput + sTmpFilename; end; procedure ProcessPercentSignIndicator; begin if CurrentPercentIndicator = state.sSubParam then sOutput := sOutput + state.sSubParam else if CurrentPercentIndicator = '%' then CurrentPercentIndicator := '#' else CurrentPercentIndicator := '%'; end; procedure DoFunction; var fileIndex: integer = -2; OffsetFromStart: integer = 0; begin AddParsedText(state.functStartIndex); if state.sFileIndex <> '' then try fileIndex := StrToInt(state.sFileIndex); fileIndex := fileIndex - 1; // Files are counted from 0, but user enters 1..n. except on EConvertError do fileIndex := -2; end; if fileIndex = -1 then begin if Assigned(state.fil) then sOutput := sOutput + BuildName(state.fil); if Assigned(state.otherfil) then sOutput := ConcatenateStrWithSpace(sOutput, BuildName(state.otherfil)); end else if fileIndex > -1 then begin if (fileIndex >= 0) and Assigned(state.files) then begin if fileIndex < state.files.Count then sOutput := sOutput + BuildName(state.files[fileIndex]); OffsetFromStart := state.files.Count; end; if ((fileIndex - OffsetFromStart) >= 0) and Assigned(state.otherfiles) then if (fileIndex - OffsetFromStart) < state.otherfiles.Count then sOutput := sOutput + BuildName(state.otherfiles[fileIndex - OffsetFromStart]); end else begin if state.funct in [ftName, ftPath, ftDir, ftLastDir, ftNameNoExt, ftSourcePath, ftExtension, ftRelativePath] then sOutput := sOutput + BuildAllNames else if state.funct in [ftSingleDir, ftLastSingleDir, ftSource] then // only single current dir sOutput := sOutput + BuildName(nil) else if state.funct in [ftFileFullList, ftFileNameList, ftRelativeFileNameList] then // for list of file sOutput := sOutput + BuildFileList else if state.funct in [ftProcessPercentSignIndicator] then // only add % sign ProcessPercentSignIndicator else if state.funct in [ftJustSetTheShowFlag] then //only set the flag to show the params prior to execute begin if pbShowCommandLinePriorToExecute <> nil then pbShowCommandLinePriorToExecute^ := True; end else if state.funct in [ftSetTrailingDelimiter] then //set the trailing path delimiter SetTrailingPathDelimiter else if state.funct in [ftSetQuoteOrNot] then SetQuoteOrNot else if state.funct in [ftEchoSimpleMessage] then JustEchoTheMessage else if state.funct in [ftPromptUserForParam] then AskUserParamAndReplace else if state.funct in [ftSetTerminalOptions] then SetTerminalOptions else if state.funct in [ftExecuteConsoleCommand] then ExecuteConsoleCommand; end; ResetState(state); end; procedure ProcessNumber; begin case state.funct of ftSingleDir, ftLastSingleDir: state.pos := spComplete; // Numbers not allowed for %D and %Z ftSetTrailingDelimiter, ftSetQuoteOrNot, ftSetTerminalOptions: begin state.sSubParam := state.sSubParam + sSourceStr[index]; state.pos := spComplete; Inc(Index); end; else begin state.sFileIndex := state.sFileIndex + sSourceStr[index]; state.pos := spIndex; end; end; end; procedure ProcessOpenBracket; // '{' begin if state.pos <> spGotPrefix then state.pos := spPrefix else state.pos := spPostfix; end; begin index := 1; parseStartIndex := index; ResetState(state); while (index <= Length(sSourceStr)) AND (bKeepProcessParameter) do begin case state.pos of spNone: if sSourceStr[index] = CurrentPercentIndicator then begin state.pos := spPercent; state.functStartIndex := index; end; spPercent: case sSourceStr[index] of '?': begin state.funct := ftJustSetTheShowFlag; state.pos := spComplete; Inc(Index); end; ASCII_DLE: begin AddParsedText(state.functStartIndex); parseStartIndex := Index + 1; Index := Length(sSourceStr) + 1; state.pos := spComplete; Break; end; '%', '#': begin state.funct := ftProcessPercentSignIndicator; state.sSubParam := sSourceStr[index]; state.pos := spComplete; Inc(Index); end; 'f', 'd', 'z', 'p', 'o', 'e', 'v', 'D', 'Z', 'A', 'a', 'n', 'h', '/', '"', 't': begin case sSourceStr[index] of 'f': state.funct := ftName; 'd': state.funct := ftDir; 'z': state.funct := ftLastDir; 'p': state.funct := ftPath; 'o': state.funct := ftNameNoExt; 'e': state.funct := ftExtension; 'v': state.funct := ftRelativePath; 'D': state.funct := ftSingleDir; 'Z': state.funct := ftLastSingleDir; 'A': state.funct := ftSource; 'a': state.funct := ftSourcePath; '/': state.funct := ftSetTrailingDelimiter; '"': state.funct := ftSetQuoteOrNot; 't': state.funct := ftSetTerminalOptions; end; state.pos := spFunction; end; 'L', 'F', 'R': begin case sSourceStr[index] of 'L': state.funct := ftFileFullList; 'F': state.funct := ftFileNameList; 'R': state.funct := ftRelativeFileNameList; end; state.pos := spFunction; end; '[': begin state.pos := spUserInputOrEcho; end; '<': begin state.pos := spGetExecuteConsoleCommand; end; else ResetState(state); end; spFunction: case sSourceStr[index] of 'l', 'b': begin state.files := leftFiles; state.fil := leftFile; state.dir := frmMain.FrameLeft.CurrentPath; state.address := frmMain.FrameLeft.CurrentAddress; state.pos := spSide; if sSourceStr[index] = 'b' then begin state.otherfiles := rightFiles; state.otherfil := rightFile; end; end; 'r': begin state.files := rightFiles; state.fil := rightFile; state.dir := frmMain.FrameRight.CurrentPath; state.address := frmMain.FrameRight.CurrentAddress; state.pos := spSide; end; 's', 'p': begin state.files := activeFiles; state.fil := activeFile; state.dir := activeDir; state.address := activeAddress; state.pos := spSide; if sSourceStr[index] = 'p' then begin state.otherfil := inactiveFile; state.otherfiles := inactiveFiles; end; end; 't': begin state.files := inactiveFiles; state.fil := inactiveFile; state.dir := inactiveDir; state.address := inactiveAddress; state.pos := spSide; end; 'U': begin state.functMod += [fmUTF8]; state.pos := spFunction; end; 'W': begin state.functMod += [fmUTF16]; state.pos := spFunction; end; 'Q': begin state.functMod += [fmQuote]; state.pos := spFunction; end; '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spSide: case sSourceStr[index] of '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spIndex: case sSourceStr[index] of '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spPrefix, spPostfix: case sSourceStr[index] of '}': begin if state.pos = spPostfix then begin Inc(index); // include closing bracket in the function state.pos := spComplete; end else state.pos := spGotPrefix; end; else begin case state.pos of spPrefix: state.prefix := state.prefix + sSourceStr[index]; spPostfix: state.postfix := state.postfix + sSourceStr[index]; end; end; end; spGotPrefix: case sSourceStr[index] of '{': ProcessOpenBracket; else state.pos := spComplete; end; spUserInputOrEcho: begin case sSourceStr[index] of ';': begin state.pos := spGotInputHintWaitEndDefaultVal; end; ']': begin state.funct := ftEchoSimpleMessage; state.pos := spComplete; Inc(Index); end; else State.sUserMessage := State.sUserMessage + sSourceStr[index]; end; end; spGotInputHintWaitEndDefaultVal: begin case sSourceStr[index] of ']': begin state.funct := ftPromptUserForParam; state.pos := spComplete; Inc(Index); end; else State.sSubParam := State.sSubParam + sSourceStr[index]; end; end; spGetExecuteConsoleCommand: begin case sSourceStr[index] of '>': begin state.funct := ftExecuteConsoleCommand; state.pos := spComplete; Inc(Index); end; else State.sSubParam := State.sSubParam + sSourceStr[index]; end; end; end; if state.pos <> spComplete then Inc(index) // check next character else // Process function and then check current character again after resetting state. DoFunction; end; // Finish current parse. if bKeepProcessParameter then begin if state.pos in [spFunction, spSide, spIndex, spGotPrefix] then DoFunction else AddParsedText(index); end; if bKeepProcessParameter then Result := sOutput else if pbAbortOperation<>nil then pbAbortOperation^ := True; end; begin result := ''; try leftFiles := frmMain.FrameLeft.CloneSelectedOrActiveFiles; rightFiles := frmMain.FrameRight.CloneSelectedOrActiveFiles; if paramFile <> nil then begin singleFileFiles := TFiles.Create(paramFile.Path); singleFileFiles.Add(paramFile.Clone); end; leftFile:= frmMain.FrameLeft.CloneActiveFile; rightFile:= frmMain.FrameRight.CloneActiveFile; if Assigned(leftFile) and (not leftFile.IsNameValid) then FreeAndNil(leftFile); if Assigned(rightFile) and (not rightFile.IsNameValid) then FreeAndNil(rightFile); if frmMain.ActiveFrame = frmMain.FrameLeft then begin activeFiles := leftFiles; activeFile:= leftFile; inactiveFile:= rightFile; activeDir := frmMain.FrameLeft.CurrentPath; activeAddress := frmMain.FrameLeft.CurrentAddress; inactiveFiles := rightFiles; inactiveDir := frmMain.FrameRight.CurrentPath; inactiveAddress := frmMain.FrameRight.CurrentAddress; end else begin activeFiles := rightFiles; activeFile:= rightFile; inactiveFile:= leftFile; activeDir := frmMain.FrameRight.CurrentPath; activeAddress := frmMain.FrameRight.CurrentAddress; inactiveFiles := leftFiles; inactiveDir := frmMain.FrameLeft.CurrentPath; inactiveAddress := frmMain.FrameLeft.CurrentAddress; end; result:=InnerRecursiveReplaceVarParams(sSourceStr, paramFile, pbShowCommandLinePriorToExecute, pbRunInTerminal, pbKeepTerminalOpen, pbAbortOperation); finally FreeAndNil(leftFile); FreeAndNil(rightFile); FreeAndNil(leftFiles); FreeAndNil(rightFiles); FreeAndNil(singleFileFiles); end; end; procedure PrepareOutput(var sParams: String; const sWorkPath: String; const ATemp: String); var Process: TProcessUTF8; iStart, iCount: Integer; sTmpFile, sShellCmdLine: String; iLastConsoleCommandPos: Integer = 0; begin repeat iStart := Posex('<?', sParams, (iLastConsoleCommandPos + 1)) + 2; iCount := Posex('?>', sParams, iStart) - iStart; if (iStart <> 0) and (iCount >= 0) then begin if Length(ATemp) > 0 then sTmpFile:= ATemp else begin sTmpFile:= GetTempFolderDeletableAtTheEnd; end; sTmpFile := GetTempName(sTmpFile); sShellCmdLine := Copy(sParams, iStart, iCount) + ' > ' + QuoteStr(sTmpFile); Process := TProcessUTF8.Create(nil); try Process.CommandLine := FormatShell(sShellCmdLine); Process.CurrentDirectory := sWorkPath; Process.Options := [poWaitOnExit]; Process.ShowWindow := swoHide; Process.Execute; finally Process.Free; end; sParams := Copy(sParams, 1, iStart - 3) + sTmpFile + Copy(sParams, iStart + iCount + 2, MaxInt); iLastConsoleCommandPos := iStart; end; until ((iStart = 0) or (iCount < 0)); end; { PrepareParameter } function PrepareParameter(sParam: string; paramFile: TFile; options: TPrepareParameterOptions; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean; pbAbortOperation: PBoolean = nil): string; overload; begin Result := sParam; if ppoNormalizePathDelims in Options then Result := NormalizePathDelimiters(Result); if ppoReplaceTilde in Options then Result := ReplaceTilde(Result); Result := ReplaceEnvVars(Result); Result := ReplaceVarParams(Result, paramFile, pbShowCommandLinePriorToExecute, pbRunInTerminal, pbKeepTerminalOpen,pbAbortOperation); Result := Trim(Result); end; { ProcessExtCommandFork } function ProcessExtCommandFork(sCmd, sParams, sWorkPath: string; paramFile: TFile; bTerm: boolean; bKeepTerminalOpen: boolean): boolean; var sl: TStringList; bShowCommandLinePriorToExecute: boolean = False; bAbortOperationFlag: boolean = false; begin Result := False; // 1. Parse the command, parameters and working directory for the percent-variable substitution. sCmd := PrepareParameter(sCmd, paramFile, [ppoReplaceTilde]); sParams := PrepareParameter(sParams, paramFile, [], @bShowCommandLinePriorToExecute, @bTerm, @bKeepTerminalOpen, @bAbortOperationFlag); if not bAbortOperationFlag then sWorkPath := PrepareParameter(sWorkPath, paramFile, [ppoNormalizePathDelims, ppoReplaceTilde]); if not bAbortOperationFlag then begin // 2. If working directory has been specified, let's switch to it. if sWorkPath <> '' then mbSetCurrentDir(sWorkPath); // 3. If user has command-line to execute and get the result to a file, let's execute it. // Check for <? ?> command. // This command is used to put output of some console program to a file so // that the file can then be viewed. The command is between '<?' and '?>'. // The whole <?...?> expression is replaced with a path to the temporary file // containing output of the command. // For example: // {!VIEWER} <?rpm -qivlp --scripts %p?> // Show in Viewer information about RPM package PrepareOutput(sParams, sWorkPath); //4. If user user wanted to execute an internal command, let's do it. if frmMain.Commands.Commands.ExecuteCommand(sCmd, [sParams]) = cfrSuccess then begin Result := True; exit; end; //5. From legacy, invoking shell seems to be similar to "run in terminal with stay open" with param as-is if Pos('{!SHELL}', sCmd) > 0 then begin sCmd := sParams; sParams := ''; bTerm := True; bKeepTerminalOpen := True; end; //6. If user wants to process via terminal (and close at the end), let's flag it. if Pos('{!TERMANDCLOSE}', sCmd) > 0 then begin sCmd := RemoveQuotation(sParams); sParams := ''; bTerm := True; end; //7. If user wants to process via terminal (and close at the end), let's flag it. if Pos('{!TERMSTAYOPEN}', sCmd) > 0 then begin sCmd := RemoveQuotation(sParams); sParams := ''; bTerm := True; bKeepTerminalOpen := True; end; //8. If our end-job is to EDIT a file via what's configured as editor, let's do it. if Pos('{!EDITOR}', sCmd) > 0 then begin uShowForm.ShowEditorByGlob(RemoveQuotation(sParams)); Result := True; Exit; end; //9. If our end-job is to EDIT a file via internal editor, let's do it. if Pos('{!DC-EDITOR}', sCmd) > 0 then begin fEditor.ShowEditor(RemoveQuotation(sParams)); Result := True; Exit; end; //10. If our end-job is to VIEW a file via what's configured as viewer, let's do it. if Pos('{!VIEWER}', sCmd) > 0 then begin uShowForm.ShowViewerByGlob(RemoveQuotation(sParams)); Result := True; Exit; end; //11. If our end-job is to VIEW a file or files via internal viewer, let's do it. if Pos('{!DC-VIEWER}', sCmd) > 0 then begin sl := TStringList.Create; try sl.Add(RemoveQuotation(sParams)); fViewer.ShowViewer(sl); Result := True; finally FreeAndNil(sl); end; Exit; end; //12. Ok. If we're here now it's to execute something external so let's launch it! try Result := ExecCmdFork(sCmd, sParams, sWorkPath, bShowCommandLinePriorToExecute, bTerm, bKeepTerminalOpen); except on e: EInvalidCommandLine do begin MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); Result := False; end; end; end; //if not bAbortOperationFlag end; function ShellExecuteEx(sActionName, sFileName, sActiveDir: string): boolean; var aFile: TFile; sCmd, sParams, sStartPath: string; begin Result := False; // Executing files directly only works for FileSystem. aFile := TFileSystemFileSource.CreateFileFromFile(sFileName); try if gExts.GetExtActionCmd(aFile, sActionName, sCmd, sParams, sStartPath) then begin Result := ProcessExtCommandFork(sCmd, sParams, sStartPath, aFile); end; if not Result then begin mbSetCurrentDir(sActiveDir); Result := ShellExecute(sFileName); end; finally FreeAndNil(aFile); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/usearchtemplate.pas������������������������������������������������������������0000644�0001750�0000144�00000034520�15104114162�017253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Load/Save search templates Copyright (C) 2009-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uSearchTemplate; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, uFile, DCXmlConfig, uFindFiles; type { TSearchTemplate } TSearchTemplate = class private FTemplateName: String; FSearchRecord: TSearchTemplateRec; FFileChecks: TFindFileChecks; procedure MakeFileChecks; procedure SetSearchRecord(const AValue: TSearchTemplateRec); public constructor Create; function CheckFile(const AFile: TFile): Boolean; property FileChecks: TFindFileChecks read FFileChecks; property SearchRecord: TSearchTemplateRec read FSearchRecord write SetSearchRecord; property TemplateName: String read FTemplateName write FTemplateName; end; { TSearchTemplateList } TSearchTemplateList = class(TList) private function GetTemplate(Index: Integer): TSearchTemplate; function GetTemplate(const AName: String): TSearchTemplate; public procedure Clear; override; function Add(SearchTemplate: TSearchTemplate): Integer; procedure DeleteTemplate(Index: Integer); procedure LoadToStringList(StringList: TStrings); procedure LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); property TemplateByName[const AName: String]: TSearchTemplate read GetTemplate; property Templates[Index: Integer]: TSearchTemplate read GetTemplate; end; const cTemplateSign = '>'; function IsMaskSearchTemplate(const sMask: String): Boolean; inline; implementation uses Variants, DCFileAttributes, DCBasicTypes, WdxPlugin, uWdxModule; function IsMaskSearchTemplate(const sMask: String): Boolean; inline; begin Result:= (Length(sMask) > 0) and (sMask[1] = cTemplateSign); end; { TSearchTemplate } constructor TSearchTemplate.Create; begin inherited Create; FillByte(FSearchRecord, SizeOf(FSearchRecord), 0); end; procedure TSearchTemplate.MakeFileChecks; begin SearchTemplateToFindFileChecks(FSearchRecord, FFileChecks); end; procedure TSearchTemplate.SetSearchRecord(const AValue: TSearchTemplateRec); begin FSearchRecord := AValue; MakeFileChecks; end; function TSearchTemplate.CheckFile(const AFile: TFile): Boolean; begin // If template has IsNotOlderThan option then DateTime checks must be recalculated // everytime because they depend on current time. if FSearchRecord.IsNotOlderThan then DateTimeOptionsToChecks(FSearchRecord, FFileChecks); Result := uFindFiles.CheckFile(FSearchRecord, FFileChecks, AFile); end; { TSearchTemplateList } function TSearchTemplateList.GetTemplate(Index: Integer): TSearchTemplate; begin Result:= TSearchTemplate(Items[Index]); end; function TSearchTemplateList.GetTemplate(const AName: String): TSearchTemplate; var I: Integer; sName: String; begin Result:= nil; if IsMaskSearchTemplate(AName) then sName:= PChar(AName) + 1 // skip template sign else sName:= AName; for I:= 0 to Count - 1 do if SameText(TSearchTemplate(Items[I]).TemplateName, sName) then begin Result:= TSearchTemplate(Items[I]); Exit; end; end; procedure TSearchTemplateList.Clear; var i: Integer; begin for i := 0 to Count - 1 do Templates[i].Free; inherited Clear; end; function TSearchTemplateList.Add(SearchTemplate: TSearchTemplate): Integer; begin Result:= inherited Add(SearchTemplate); end; procedure TSearchTemplateList.DeleteTemplate(Index: Integer); begin Templates[Index].Free; Delete(Index); end; procedure TSearchTemplateList.LoadToStringList(StringList: TStrings); var I: Integer; begin StringList.Clear; for I:= 0 to Count - 1 do StringList.Add(Templates[I].TemplateName); end; const cSection = 'SearchTemplates'; procedure TSearchTemplateList.LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); var Index: Integer; SearchTemplate: TSearchTemplate; FloatNotOlderThan: Double; Node: TXmlNode; begin Clear; ANode := ANode.FindNode(cSection); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Template') = 0 then begin SearchTemplate:= TSearchTemplate.Create; with SearchTemplate.FSearchRecord do begin SearchTemplate.TemplateName:= AConfig.GetValue(ANode, 'Name', ''); StartPath:= AConfig.GetValue(ANode, 'StartPath', ''); ExcludeDirectories:= AConfig.GetValue(ANode, 'ExcludeDirectories', ''); FilesMasks:= AConfig.GetValue(ANode, 'FilesMasks', '*'); ExcludeFiles:= AConfig.GetValue(ANode, 'ExcludeFiles', ''); SearchDepth:= AConfig.GetValue(ANode, 'SearchDepth', -1); IsPartialNameSearch:= AConfig.GetValue(ANode, 'IsPartialNameSearch', False); RegExp:= AConfig.GetValue(ANode, 'RegExp', False); FollowSymLinks:= AConfig.GetValue(ANode, 'FollowSymLinks', False); FindInArchives:= AConfig.GetValue(ANode, 'FindInArchives', False); AttributesPattern:= AConfig.GetValue(ANode, 'AttributesPattern', ''); // date/time IsDateFrom:= AConfig.GetValue(ANode, 'IsDateFrom', False); IsDateTo:= AConfig.GetValue(ANode, 'IsDateTo', False); IsTimeFrom:= AConfig.GetValue(ANode, 'IsTimeFrom', False); IsTimeTo:= AConfig.GetValue(ANode, 'IsTimeTo', False); if IsDateFrom or IsTimeFrom then DateTimeFrom:= AConfig.GetValue(ANode, 'DateTimeFrom', TDateTime(0)); if IsDateTo or IsTimeTo then DateTimeTo:= AConfig.GetValue(ANode, 'DateTimeTo', Now); // not older than IsNotOlderThan:= AConfig.GetValue(ANode, 'IsNotOlderThan', False); if IsNotOlderThan then begin // Workaround because old value was floating point. FloatNotOlderThan:= AConfig.GetValue(ANode, 'NotOlderThan', Double(0)); NotOlderThan:= Trunc(FloatNotOlderThan); NotOlderThanUnit:= TTimeUnit(AConfig.GetValue(ANode, 'NotOlderThanUnit', 0)); end; // file size IsFileSizeFrom:= AConfig.GetValue(ANode, 'IsFileSizeFrom', False); IsFileSizeTo:= AConfig.GetValue(ANode, 'IsFileSizeTo', False); if IsFileSizeFrom then FileSizeFrom:= AConfig.GetValue(ANode, 'FileSizeFrom', Int64(0)); if IsFileSizeTo then FileSizeTo:= AConfig.GetValue(ANode, 'FileSizeTo', High(Int64)); FileSizeUnit:= TFileSizeUnit(AConfig.GetValue(ANode, 'FileSizeUnit', 0)); // find text IsFindText:= AConfig.GetValue(ANode, 'IsFindText', False); if IsFindText then FindText:= AConfig.GetValue(ANode, 'FindText', ''); // replace text IsReplaceText:= AConfig.GetValue(ANode, 'IsReplaceText', False); if IsReplaceText then ReplaceText:= AConfig.GetValue(ANode, 'ReplaceText', ''); // text search options HexValue:= AConfig.GetValue(ANode, 'HexValue', False); CaseSensitive:= AConfig.GetValue(ANode, 'CaseSensitive', False); NotContainingText:= AConfig.GetValue(ANode, 'NotContainingText', False); TextRegExp:= AConfig.GetValue(ANode, 'TextRegExp', False); OfficeXML:= AConfig.GetValue(ANode, 'OfficeXML', False); TextEncoding:= AConfig.GetValue(ANode, 'TextEncoding', ''); if TextEncoding = 'UTF-8BOM' then TextEncoding:= 'UTF-8'; if TextEncoding = 'UCS-2LE' then TextEncoding:= 'UTF-16LE'; if TextEncoding = 'UCS-2BE' then TextEncoding:= 'UTF-16BE'; // duplicates Node := AConfig.FindNode(ANode, 'Duplicates', True); Duplicates:= AConfig.GetAttr(Node, 'Enabled', False); if Duplicates then begin DuplicateName:= AConfig.GetValue(Node, 'Name', False); DuplicateSize:= AConfig.GetValue(Node, 'Size', False); DuplicateHash:= AConfig.GetValue(Node, 'Hash', False); DuplicateContent:= AConfig.GetValue(Node, 'Content', False); end; // plugins SearchPlugin:= AConfig.GetValue(ANode, 'SearchPlugin', ''); Node := AConfig.FindNode(ANode, 'ContentPlugins', True); ContentPlugin:= AConfig.GetAttr(Node, 'Enabled', False); if ContentPlugin then begin ContentPluginCombine:= AConfig.GetAttr(Node, 'Combine', True); Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Plugin') = 0 then begin Index:= Length(ContentPlugins); SetLength(ContentPlugins, Index + 1); ContentPlugins[Index].Plugin:= AConfig.GetValue(Node, 'Name', EmptyStr); ContentPlugins[Index].Field:= AConfig.GetValue(Node, 'Field', EmptyStr); ContentPlugins[Index].UnitName:= AConfig.GetValue(Node, 'Unit', EmptyStr); ContentPlugins[Index].FieldType:= AConfig.GetValue(Node, 'FieldType', ft_string); ContentPlugins[Index].Compare:= TPluginOperator(AConfig.GetValue(Node, 'Compare', 0)); ContentPlugins[Index].Value:= StrToVar(AConfig.GetValue(Node, 'Value', EmptyStr), ContentPlugins[Index].FieldType); end; Node := Node.NextSibling; end; end; end; SearchTemplate.MakeFileChecks; Add(SearchTemplate); end; ANode := ANode.NextSibling; end; end; end; procedure TSearchTemplateList.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); var I, J: Integer; Node, SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, cSection, True); AConfig.ClearNode(ANode); for I:= 0 to Count - 1 do with Templates[I].SearchRecord do begin SubNode := AConfig.AddNode(ANode, 'Template'); AConfig.AddValue(SubNode, 'Name', Templates[I].TemplateName); AConfig.AddValue(SubNode, 'StartPath', StartPath); AConfig.AddValue(SubNode, 'ExcludeDirectories', ExcludeDirectories); AConfig.AddValue(SubNode, 'FilesMasks', FilesMasks); AConfig.AddValue(SubNode, 'ExcludeFiles', ExcludeFiles); AConfig.AddValue(SubNode, 'SearchDepth', SearchDepth); AConfig.AddValue(SubNode, 'IsPartialNameSearch', IsPartialNameSearch); AConfig.AddValue(SubNode, 'RegExp', RegExp); AConfig.AddValue(SubNode, 'FollowSymLinks', FollowSymLinks); AConfig.AddValue(SubNode, 'FindInArchives', FindInArchives); AConfig.AddValue(SubNode, 'AttributesPattern', AttributesPattern); // date/time AConfig.AddValue(SubNode, 'IsDateFrom', IsDateFrom); AConfig.AddValue(SubNode, 'IsDateTo', IsDateTo); AConfig.AddValue(SubNode, 'IsTimeFrom', IsTimeFrom); AConfig.AddValue(SubNode, 'IsTimeTo', IsTimeTo); if IsDateFrom or IsTimeFrom then AConfig.AddValue(SubNode, 'DateTimeFrom', DateTimeFrom); if IsDateTo or IsTimeTo then AConfig.AddValue(SubNode, 'DateTimeTo', DateTimeTo); // not older than AConfig.AddValue(SubNode, 'IsNotOlderThan', IsNotOlderThan); if IsNotOlderThan then begin AConfig.AddValue(SubNode, 'NotOlderThan', NotOlderThan); AConfig.AddValue(SubNode, 'NotOlderThanUnit', Integer(NotOlderThanUnit)); end; // file size AConfig.AddValue(SubNode, 'IsFileSizeFrom', IsFileSizeFrom); AConfig.AddValue(SubNode, 'IsFileSizeTo', IsFileSizeTo); if IsFileSizeFrom then AConfig.AddValue(SubNode, 'FileSizeFrom', FileSizeFrom); if IsFileSizeTo then AConfig.AddValue(SubNode, 'FileSizeTo', FileSizeTo); AConfig.AddValue(SubNode, 'FileSizeUnit', Integer(FileSizeUnit)); // find text AConfig.AddValue(SubNode, 'IsFindText', IsFindText); if IsFindText then AConfig.AddValue(SubNode, 'FindText', FindText); // replace text AConfig.AddValue(SubNode, 'IsReplaceText', IsReplaceText); if IsReplaceText then AConfig.AddValue(SubNode, 'ReplaceText', ReplaceText); // text search options AConfig.AddValue(SubNode, 'HexValue', HexValue); AConfig.AddValue(SubNode, 'CaseSensitive', CaseSensitive); AConfig.AddValue(SubNode, 'NotContainingText', NotContainingText); AConfig.AddValue(SubNode, 'TextRegExp', TextRegExp); AConfig.AddValue(SubNode, 'TextEncoding', TextEncoding); AConfig.AddValue(SubNode, 'OfficeXML', OfficeXML); // duplicates Node := AConfig.AddNode(SubNode, 'Duplicates'); AConfig.SetAttr(Node, 'Enabled', Duplicates); if Duplicates then begin AConfig.AddValue(Node, 'Name', DuplicateName); AConfig.AddValue(Node, 'Size', DuplicateSize); AConfig.AddValue(Node, 'Hash', DuplicateHash); AConfig.AddValue(Node, 'Content', DuplicateContent); end; // plugins AConfig.AddValue(SubNode, 'SearchPlugin', SearchPlugin); Node := AConfig.FindNode(SubNode, 'ContentPlugins', True); AConfig.SetAttr(Node, 'Enabled', ContentPlugin); if ContentPlugin then begin AConfig.SetAttr(Node, 'Combine', ContentPluginCombine); for J:= Low(ContentPlugins) to High(ContentPlugins) do begin SubNode := AConfig.AddNode(Node, 'Plugin'); AConfig.SetValue(SubNode, 'Name', ContentPlugins[J].Plugin); AConfig.SetValue(SubNode, 'Field', ContentPlugins[J].Field); AConfig.SetValue(SubNode, 'Unit', ContentPlugins[J].UnitName); AConfig.SetValue(SubNode, 'FieldType', ContentPlugins[J].FieldType); AConfig.SetValue(SubNode, 'Compare', Integer(ContentPlugins[J].Compare)); AConfig.SetValue(SubNode, 'Value', VarToStr(ContentPlugins[J].Value)); end; end; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/usearchcontent.pas�������������������������������������������������������������0000644�0001750�0000144�00000031330�15104114162�017106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Content plugin search control Copyright (C) 2014-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uSearchContent; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, ExtCtrls, LCLType, uFindFiles; type { TPluginPanel } TPluginPanel = class(TPanel) private FComboPlugin, FComboField, // <---The text of this combo is filled from localized string. The "objects" pointed from the its list are "TWdxField" type. FComboOperator, FComboValue, FComboUnit: TComboBox; private function GetCompare: TPluginOperator; function GetField: String; function GetFieldType: Integer; function GetPlugin: String; function GetUnitName: String; function GetValue: Variant; procedure PluginChange(Sender: TObject); procedure FieldChange(Sender: TObject); procedure SetCompare(AValue: TPluginOperator); procedure SetField(AValue: String); procedure SetPlugin(AValue: String); procedure SetUnitName(AValue: String); procedure SetValue(AValue: Variant); procedure SetComboBox(ComboBox: TComboBox; const Value, Error: String); procedure ComboValueKeyPress(Sender: TObject; var Key: Char); procedure ComboValueUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; public property Plugin: String read GetPlugin write SetPlugin; property Field: String read GetField write SetField; property UnitName: String read GetUnitName write SetUnitName; property FieldType: Integer read GetFieldType; property Compare: TPluginOperator read GetCompare write SetCompare; property Value: Variant read GetValue write SetValue; end; implementation uses uLng, Variants, WdxPlugin, uGlobs, uWDXModule, Graphics, uShowMsg; { TPluginPanel } function TPluginPanel.GetCompare: TPluginOperator; begin Result:= TPluginOperator(PtrInt(FComboOperator.Items.Objects[FComboOperator.ItemIndex])); end; function TPluginPanel.GetField: String; begin Result := TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]).FName; end; function TPluginPanel.GetFieldType: Integer; begin Result := TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]).FType end; function TPluginPanel.GetPlugin: String; begin Result:= FComboPlugin.Text; end; function TPluginPanel.GetUnitName: String; begin if (FComboField.ItemIndex < 0) or (FComboUnit.ItemIndex < 0) then Result:= FComboUnit.Text else begin Result:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]).FUnits[FComboUnit.ItemIndex]; end; end; function TPluginPanel.GetValue: Variant; var WdxField: TWdxField; begin WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); if (WdxField.FType <> ft_multiplechoice) then Result:= StrToVar(FComboValue.Text, WdxField.FType) else begin Result:= StrToVar(WdxField.FUnits[FComboValue.ItemIndex], WdxField.FType) end; end; // When a plugin is selected from the plugin combo, we populate the others in cascade. // In the field combo, each element references a corresding "TWdxField" object. // Since this combo is for the user we populate text of it from localized strings. procedure TPluginPanel.PluginChange(Sender: TObject); var I: Integer; Module: TWDXModule; begin if FComboPlugin.ItemIndex < 0 then Exit; FComboField.Clear; Module:= gWdxPlugins.GetWdxModule(FComboPlugin.Text); if Assigned(Module) then for I:= 0 to Module.FieldList.Count - 1 do FComboField.Items.AddObject(TWdxField(Module.FieldList.Objects[I]).LName, TObject(Module.FieldList.Objects[I])); if FComboField.Items.Count > 0 then begin FComboField.ItemIndex:= 0; FieldChange(FComboField); end; end; procedure TPluginPanel.FieldChange(Sender: TObject); var WdxField: TWdxField; begin FComboUnit.Items.Clear; FComboValue.Items.Clear; FComboOperator.Items.Clear; FComboValue.Text:= EmptyStr; if (FComboField.ItemIndex < 0) then Exit; WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); if (WdxField.FType <> FT_MULTIPLECHOICE) then begin FComboUnit.Items.AddStrings(WdxField.LUnits); end; FComboUnit.Enabled := (WdxField.FType <> FT_MULTIPLECHOICE) and (FComboUnit.Items.Count > 0); if FComboUnit.Enabled then FComboUnit.ItemIndex:= 0; case WdxField.FType of FT_NUMERIC_32, FT_NUMERIC_64, FT_NUMERIC_FLOATING, FT_DATE, FT_TIME, FT_DATETIME: begin FComboValue.Style:= csDropDown; FComboOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); FComboOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqualCaseSensitive))); FComboOperator.Items.AddObject('>', TObject(PtrInt(poMore))); FComboOperator.Items.AddObject('<', TObject(PtrInt(poLess))); FComboOperator.Items.AddObject('>=', TObject(PtrInt(poMoreEqual))); FComboOperator.Items.AddObject('<=', TObject(PtrInt(poLessEqual))); end; FT_BOOLEAN: begin FComboValue.Items.Add(rsSimpleWordTrue); FComboValue.Items.Add(rsSimpleWordFalse); FComboValue.ItemIndex:= 0; FComboValue.Style:= csDropDownList; FComboOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); end; FT_MULTIPLECHOICE: begin begin FComboValue.Style:= csDropDownList; FComboOperator.Items.AddObject('=', TObject(PtrInt(poEqualCaseSensitive))); FComboOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqualCaseSensitive))); FComboValue.Items.AddStrings(WdxField.LUnits); if FComboValue.Items.Count > 0 then FComboValue.ItemIndex:= 0; end; end; FT_STRING, FT_STRINGW: begin FComboValue.Style:= csDropDown; FComboOperator.Items.AddObject(rsPluginSearchEqualNotCase, TObject(PtrInt(poEqualCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotEqualNotCase, TObject(PtrInt(poNotEqualCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchEqualCaseSensitive, TObject(PtrInt(poEqualCaseSensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotEquaCaseSensitive, TObject(PtrInt(poNotEqualCaseSensitive))); FComboOperator.Items.AddObject(rsPluginSearchContainsNotCase, TObject(PtrInt(poContainsCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotContainsNotCase, TObject(PtrInt(poNotContainsCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchContainsCaseSenstive, TObject(PtrInt(poContainsCaseSensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotContainsCaseSenstive, TObject(PtrInt(poNotContainsCaseSensitive))); FComboOperator.Items.AddObject(rsPluginSearchRegExpr, TObject(PtrInt(poRegExpr))); FComboOperator.Items.AddObject(rsPluginSearchNotRegExpr, TObject(PtrInt(poNotRegExpr))); end; FT_FULLTEXT, FT_FULLTEXTW: begin FComboValue.Style:= csDropDown; FComboOperator.Items.AddObject(rsPluginSearchContainsNotCase, TObject(PtrInt(poContainsCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotContainsNotCase, TObject(PtrInt(poNotContainsCaseInsensitive))); FComboOperator.Items.AddObject(rsPluginSearchContainsCaseSenstive, TObject(PtrInt(poContainsCaseSensitive))); FComboOperator.Items.AddObject(rsPluginSearchNotContainsCaseSenstive, TObject(PtrInt(poNotContainsCaseSensitive))); end; end; if FComboOperator.Items.Count > 0 then FComboOperator.ItemIndex:= 0; end; procedure TPluginPanel.SetCompare(AValue: TPluginOperator); var Index: Integer; begin Index:= FComboOperator.Items.IndexOfObject(TObject(PtrInt(AValue))); if Index >= 0 then FComboOperator.ItemIndex:= Index; end; // The "AValue" parameter received here is not localized. // We can't search it in combo box directly so we go by index. procedure TPluginPanel.SetField(AValue: String); var Module: TWDXModule; begin Module := gWdxPlugins.GetWdxModule(FComboPlugin.Text); if Module = nil then exit; FComboField.ItemIndex := Module.GetFieldIndex(AValue); if FComboField.ItemIndex <> -1 then begin if Assigned(FComboField.OnChange) then FComboField.OnChange(FComboField); end else begin msgError(rsPluginSearchFieldNotFound); end; end; procedure TPluginPanel.SetPlugin(AValue: String); begin SetComboBox(FComboPlugin, AValue, Format(rsPluginSearchPluginNotFound, [AValue])); end; procedure TPluginPanel.SetUnitName(AValue: String); var Index: Integer; WdxField: TWdxField; begin if FComboUnit.Enabled then begin WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); Index := WdxField.GetUnitIndex(AValue); if Index >= 0 then AValue:= WdxField.LUnits[Index]; SetComboBox(FComboUnit, AValue, Format(rsPluginSearchUnitNotFoundForField, [AValue, Self.Field])); end; end; procedure TPluginPanel.SetValue(AValue: Variant); var Index: Integer; WdxField: TWdxField; begin if VarIsBool(AValue) then begin if AValue then FComboValue.Text := rsSimpleWordTrue else FComboValue.Text := rsSimpleWordFalse; end else begin WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); if (WdxField.FType <> FT_MULTIPLECHOICE) then FComboValue.Text := AValue else begin Index:= WdxField.GetUnitIndex(AValue); if Index < 0 then FComboValue.Text := AValue else FComboValue.Text := WdxField.LUnits[Index]; end; end; end; procedure TPluginPanel.SetComboBox(ComboBox: TComboBox; const Value, Error: String); var Index: Integer; begin Index:= ComboBox.Items.IndexOf(Value); if Index < 0 then msgError(Error) else begin ComboBox.ItemIndex:= Index; if Assigned(ComboBox.OnChange) then ComboBox.OnChange(ComboBox); end; end; procedure TPluginPanel.ComboValueKeyPress(Sender: TObject; var Key: Char); var WdxField: TWdxField; begin if (FComboField.ItemIndex < 0) then Exit; WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); case WdxField.FType of FT_NUMERIC_32, FT_NUMERIC_64: begin if not (Key in ['0'..'9', Chr(VK_BACK)]) then Key:= #0; end; FT_NUMERIC_FLOATING: begin if not (Key in ['0'..'9', Chr(VK_BACK), DefaultFormatSettings.DecimalSeparator]) then Key:= #0; end; end; end; procedure TPluginPanel.ComboValueUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); var WdxField: TWdxField; begin if (FComboField.ItemIndex < 0) then Exit; WdxField:= TWdxField(FComboField.Items.Objects[FComboField.ItemIndex]); case WdxField.FType of FT_NUMERIC_32, FT_NUMERIC_64, FT_NUMERIC_FLOATING: begin if (Length(UTF8Key) > 1) then UTF8Key:= #0; end; end; end; constructor TPluginPanel.Create(TheOwner: TComponent); var I: Integer; begin inherited Create(TheOwner); AutoSize:= True; BevelOuter:= bvNone; ChildSizing.ControlsPerLine:= 5; ChildSizing.Layout:= cclLeftToRightThenTopToBottom; ChildSizing.EnlargeHorizontal:= crsScaleChilds; FComboPlugin:= TComboBox.Create(Self); FComboPlugin.Parent:= Self; FComboPlugin.Style:= csDropDownList; FComboPlugin.OnChange:= @PluginChange; FComboField:= TComboBox.Create(Self); FComboField.Parent:= Self; FComboField.Style:= csDropDownList; FComboField.OnChange:= @FieldChange; FComboOperator:= TComboBox.Create(Self); FComboOperator.Parent:= Self; FComboOperator.Style:= csDropDownList; FComboValue:= TComboBox.Create(Self); FComboValue.OnKeyPress:= @ComboValueKeyPress; FComboValue.OnUTF8KeyPress:= @ComboValueUTF8KeyPress; FComboValue.Parent:= Self; FComboUnit:= TComboBox.Create(Self); FComboUnit.Style:= csDropDownList; FComboUnit.Parent:= Self; for I:= 0 to gWDXPlugins.Count - 1do begin if gWdxPlugins.GetWdxModule(I).IsLoaded or gWdxPlugins.GetWdxModule(I).LoadModule then begin FComboPlugin.Items.Add(gWdxPlugins.GetWdxModule(I).Name); end; end; if FComboPlugin.Items.Count > 0 then begin FComboPlugin.ItemIndex:= 0; PluginChange(FComboPlugin); end; end; destructor TPluginPanel.Destroy; begin FComboPlugin.Free; FComboField.Free; FComboOperator.Free; FComboValue.Free; FComboUnit.Free; inherited Destroy; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uresample.pas������������������������������������������������������������������0000644�0001750�0000144�00000047765�15104114162�016101� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// ----------------------------------------------------------------------------- // Project: bitmap resampler // Module: resample // Description: Interpolated Bitmap Resampling using filters. // Version: 01.03 // Release: 1 // Date: 19-DEC-2009 // Target: Free Pascal 2.2.4, Lazarus 0.9.29 // Author(s): anme: Anders Melander, anders@melander.dk // Alexx2000: Alexander Koblov, alexx2000@mail.ru // Copyright (c) 1997,98 by Anders Melander // Copyright (c) 2009 by Alexander Koblov // Formatting: 2 space indent, 8 space tabs, 80 columns. // ----------------------------------------------------------------------------- // This software is copyrighted as noted above. It may be freely copied, // modified, and redistributed, provided that the copyright notice(s) is // preserved on all copies. // // There is no warranty or other guarantee of fitness for this software, // it is provided solely "as is". Bug reports or fixes may be sent // to the author, who may or may not act on them as he desires. // // You may not include this software in a program or other software product // without supplying the source, or without informing the end-user that the // source is available for no extra charge. // // If you modify this software, you should include a notice in the "Revision // history" section giving the name of the person performing the modification, // the date of modification, and the reason for such modification. // ----------------------------------------------------------------------------- // Here's some additional copyrights for you: // // From filter.c: // The authors and the publisher hold no copyright restrictions // on any of these files; this source code is public domain, and // is freely available to the entire computer graphics community // for study, use, and modification. We do request that the // comment at the top of each file, identifying the original // author and its original publication in the book Graphics // Gems, be retained in all programs that use these files. // // ----------------------------------------------------------------------------- // Revision history: // // 0100 110997 anme - Adapted from fzoom v0.20 by Dale Schumacher. // // 0101 110198 anme - Added Lanczos3 and Mitchell filters. // - Fixed range bug. // Min value was not checked on conversion from Single to // byte. // - Numerous optimizations. // - Added TImage stretch on form resize. // - Added support for Delphi 2 via TCanvas.Pixels. // - Renamed module from stretch to resample. // - Moved demo code to separate module. // // 0102 150398 anme - Fixed a problem that caused all pixels to be shifted // 1/2 pixel down and to the right (in source // coordinates). Thanks to David Ullrich for the // solution. // 0103 191209 Alexx2000 // - Ported to FreePascal/Lazarus // - Added alpha channel support // ----------------------------------------------------------------------------- // Credits: // The algorithms and methods used in this library are based on the article // "General Filtered Image Rescaling" by Dale Schumacher which appeared in the // book Graphics Gems III, published by Academic Press, Inc. // // The edge offset problem was fixed by: // * David Ullrich <ullrich@hardy.math.okstate.edu> // ----------------------------------------------------------------------------- // To do (in rough order of priority): // * Implement Dale Schumacher's "Optimized Bitmap Scaling Routines". // * Fix BoxFilter. // * Optimize to use integer math instead of floating point where possible. // ----------------------------------------------------------------------------- unit uReSample; interface {$mode delphi}{$R-} {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} {$POINTERMATH ON} {$ENDIF} uses SysUtils, Classes, Graphics; type // Type of a filter for use with Stretch() TFilterProc = function(Value: Single): Single; // Sample filters for use with Stretch() function SplineFilter(Value: Single): Single; function BellFilter(Value: Single): Single; function TriangleFilter(Value: Single): Single; function BoxFilter(Value: Single): Single; function HermiteFilter(Value: Single): Single; function Lanczos3Filter(Value: Single): Single; function MitchellFilter(Value: Single): Single; // Interpolator // Src: Source bitmap // Dst: Destination bitmap // filter: Weight calculation filter // fwidth: Relative sample radius procedure Stretch(Src, Dst: TRasterImage; filter: TFilterProc; fwidth: single); // ----------------------------------------------------------------------------- // // List of Filters // // ----------------------------------------------------------------------------- const ResampleFilters: array[0..6] of record Name: string; // Filter name Filter: TFilterProc;// Filter implementation Width: Single; // Suggested sampling width/radius end = ( (Name: 'Box'; Filter: BoxFilter; Width: 0.5), (Name: 'Triangle'; Filter: TriangleFilter; Width: 1.0), (Name: 'Hermite'; Filter: HermiteFilter; Width: 1.0), (Name: 'Bell'; Filter: BellFilter; Width: 1.5), (Name: 'B-Spline'; Filter: SplineFilter; Width: 2.0), (Name: 'Lanczos3'; Filter: Lanczos3Filter; Width: 3.0), (Name: 'Mitchell'; Filter: MitchellFilter; Width: 2.0) ); implementation uses Math, IntfGraphics, GraphType, FPImage; // ----------------------------------------------------------------------------- // // Filter functions // // ----------------------------------------------------------------------------- // Hermite filter function HermiteFilter(Value: Single): Single; begin // f(t) = 2|t|^3 - 3|t|^2 + 1, -1 <= t <= 1 if (Value < 0.0) then Value := -Value; if (Value < 1.0) then Result := (2.0 * Value - 3.0) * Sqr(Value) + 1.0 else Result := 0.0; end; // Box filter // a.k.a. "Nearest Neighbour" filter // anme: I have not been able to get acceptable // results with this filter for subsampling. function BoxFilter(Value: Single): Single; begin if (Value > -0.5) and (Value <= 0.5) then Result := 1.0 else Result := 0.0; end; // Triangle filter // a.k.a. "Linear" or "Bilinear" filter function TriangleFilter(Value: Single): Single; begin if (Value < 0.0) then Value := -Value; if (Value < 1.0) then Result := 1.0 - Value else Result := 0.0; end; // Bell filter function BellFilter(Value: Single): Single; begin if (Value < 0.0) then Value := -Value; if (Value < 0.5) then Result := 0.75 - Sqr(Value) else if (Value < 1.5) then begin Value := Value - 1.5; Result := 0.5 * Sqr(Value); end else Result := 0.0; end; // B-spline filter function SplineFilter(Value: Single): Single; var tt : single; begin if (Value < 0.0) then Value := -Value; if (Value < 1.0) then begin tt := Sqr(Value); Result := 0.5*tt*Value - tt + 2.0 / 3.0; end else if (Value < 2.0) then begin Value := 2.0 - Value; Result := 1.0/6.0 * Sqr(Value) * Value; end else Result := 0.0; end; // Lanczos3 filter function Lanczos3Filter(Value: Single): Single; function SinC(Value: Single): Single; begin if (Value <> 0.0) then begin Value := Value * Pi; Result := sin(Value) / Value end else Result := 1.0; end; begin if (Value < 0.0) then Value := -Value; if (Value < 3.0) then Result := SinC(Value) * SinC(Value / 3.0) else Result := 0.0; end; function MitchellFilter(Value: Single): Single; const B = (1.0 / 3.0); C = (1.0 / 3.0); var tt : single; begin if (Value < 0.0) then Value := -Value; tt := Sqr(Value); if (Value < 1.0) then begin Value := (((12.0 - 9.0 * B - 6.0 * C) * (Value * tt)) + ((-18.0 + 12.0 * B + 6.0 * C) * tt) + (6.0 - 2 * B)); Result := Value / 6.0; end else if (Value < 2.0) then begin Value := (((-1.0 * B - 6.0 * C) * (Value * tt)) + ((6.0 * B + 30.0 * C) * tt) + ((-12.0 * B - 48.0 * C) * Value) + (8.0 * B + 24 * C)); Result := Value / 6.0; end else Result := 0.0; end; // ----------------------------------------------------------------------------- // // Interpolator // // ----------------------------------------------------------------------------- type // Contributor for a pixel TContributor = record pixel: integer; // Source pixel weight: single; // Pixel weight end; TContributorList = array[0..0] of TContributor; PContributorList = ^TContributorList; // List of source pixels contributing to a destination pixel TCList = record n : integer; p : PContributorList; end; TCListList = array[0..0] of TCList; PCListList = ^TCListList; TRGBA = packed record r, g, b, a : single; end; // Physical bitmap pixel TColorRGBA = packed record r, g, b, a : BYTE; end; PColorRGBA = ^TColorRGBA; // Physical bitmap scanline (row) TRGBAList = packed array[0..0] of TColorRGBA; PRGBAList = ^TRGBAList; function CreateAlphaFromMask(Bitmap: TRasterImage): TLazIntfImage; var SrcIntfImage: TLazIntfImage; x, y, xStop, yStop: Integer; Color: TFPColor; begin SrcIntfImage := TLazIntfImage.Create(Bitmap.RawImage, False); with SrcIntfImage do begin if MaskData = nil then Exit(SrcIntfImage); Result := TLazIntfImage.Create(Width, Height, [riqfRGB, riqfAlpha]); Result.CreateData; xStop := Width - 1; yStop := Height - 1; end; for x:= 0 to xStop do for y:= 0 to yStop do begin Color := SrcIntfImage.Colors[x, y]; if SrcIntfImage.Masked[x, y] then Color.Alpha := Low(Color.Alpha) else Color.Alpha := High(Color.Alpha); Result.Colors[x, y] := Color; end; SrcIntfImage.Free; end; procedure Stretch(Src, Dst: TRasterImage; filter: TFilterProc; fwidth: single); var xscale, yscale : single; // Zoom scale factors i, j, k : integer; // Loop variables center : single; // Filter calculation variables width, fscale, weight : single; // Filter calculation variables left, right : integer; // Filter calculation variables n : integer; // Pixel number Work : PRGBAList; contrib : PCListList; rgba : TRGBA; color : TColorRGBA; SourceLine , DestLine : PRGBAList; SrcDelta : integer; SrcIntfImage, DstIntfImage : TLazIntfImage; SrcWidth , SrcHeight , DstWidth , DstHeight : integer; ARawImage : TRawImage; function Color2RGBA(Color: TFPColor): TColorRGBA; inline; begin Result.r := Color.Red shr 8; Result.g := Color.Green shr 8; Result.b := Color.Blue shr 8; Result.a := Color.Alpha shr 8; end; function RGBA2Color(Color: TColorRGBA): TFPColor; inline; begin Result.Red := Color.r shl 8; Result.Green := Color.g shl 8; Result.Blue := Color.b shl 8; Result.Alpha := Color.a shl 8; end; begin DstWidth := Dst.Width; DstHeight := Dst.Height; SrcWidth := Src.Width; SrcHeight := Src.Height; if (SrcWidth < 1) or (SrcHeight < 1) then raise Exception.Create('Source bitmap too small'); // Create intermediate buffer to hold horizontal zoom Work := GetMem(DstWidth * SrcHeight * SizeOf(TColorRGBA)); try // xscale := DstWidth / SrcWidth; // yscale := DstHeight / SrcHeight; // Improvement suggested by David Ullrich: if (SrcWidth = 1) then xscale:= DstWidth / SrcWidth else xscale:= (DstWidth - 1) / (SrcWidth - 1); if (SrcHeight = 1) then yscale:= DstHeight / SrcHeight else yscale:= (DstHeight - 1) / (SrcHeight - 1); {++++++++++++++++++++} if Src.RawImage.Description.AlphaPrec = 0 then // if bitmap has not alpha channel SrcIntfImage := CreateAlphaFromMask(Src) else begin SrcIntfImage := TLazIntfImage.Create(Src.RawImage, False); end; DstIntfImage := TLazIntfImage.Create(DstWidth, DstHeight, [riqfRGB, riqfAlpha]); DstIntfImage.CreateData; {++++++++++++++++++++} // -------------------------------------------- // Pre-calculate filter contributions for a row // ----------------------------------------------- GetMem(contrib, DstWidth* sizeof(TCList)); // Horizontal sub-sampling // Scales from bigger to smaller width if (xscale < 1.0) then begin width := fwidth / xscale; fscale := 1.0 / xscale; for i := 0 to DstWidth-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor)); center := i / xscale; // Original code: // left := ceil(center - width); // right := floor(center + width); left := floor(center - width); right := ceil(center + width); for j := left to right do begin weight := filter((center - j) / fscale) / fscale; if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcWidth) then n := SrcWidth - j + SrcWidth - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end else // Horizontal super-sampling // Scales from smaller to bigger width begin for i := 0 to DstWidth-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor)); center := i / xscale; // Original code: // left := ceil(center - fwidth); // right := floor(center + fwidth); left := floor(center - fwidth); right := ceil(center + fwidth); for j := left to right do begin weight := filter(center - j); if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcWidth) then n := SrcWidth - j + SrcWidth - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end; // ---------------------------------------------------- // Apply filter to sample horizontally from Src to Work // ---------------------------------------------------- for k := 0 to SrcHeight-1 do begin {++++++++++++++++++++} DestLine := Work + k * DstWidth; {++++++++++++++++++++} for i := 0 to DstWidth-1 do begin rgba.r := 0.0; rgba.g := 0.0; rgba.b := 0.0; rgba.a := 0.0; for j := 0 to contrib^[i].n-1 do begin {++++++++++++++++++++} color := Color2RGBA(SrcIntfImage.Colors[contrib^[i].p^[j].pixel, k]); {++++++++++++++++++++} weight := contrib^[i].p^[j].weight; if (weight = 0.0) then continue; rgba.r := rgba.r + color.r * weight; rgba.g := rgba.g + color.g * weight; rgba.b := rgba.b + color.b * weight; rgba.a := rgba.a + color.a * weight; end; if (rgba.r > 255.0) then color.r := 255 else if (rgba.r < 0.0) then color.r := 0 else color.r := round(rgba.r); if (rgba.g > 255.0) then color.g := 255 else if (rgba.g < 0.0) then color.g := 0 else color.g := round(rgba.g); if (rgba.b > 255.0) then color.b := 255 else if (rgba.b < 0.0) then color.b := 0 else color.b := round(rgba.b); if (rgba.a > 255.0) then color.a := 255 else if (rgba.a < 0.0) then color.a := 0 else color.a := round(rgba.a); {++++++++++++++++++++} // Set new pixel value DestLine^[i] := color; {++++++++++++++++++++} end; end; // Free the memory allocated for horizontal filter weights for i := 0 to DstWidth-1 do FreeMem(contrib^[i].p); FreeMem(contrib); // ----------------------------------------------- // Pre-calculate filter contributions for a column // ----------------------------------------------- GetMem(contrib, DstHeight* sizeof(TCList)); // Vertical sub-sampling // Scales from bigger to smaller height if (yscale < 1.0) then begin width := fwidth / yscale; fscale := 1.0 / yscale; for i := 0 to DstHeight-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor)); center := i / yscale; // Original code: // left := ceil(center - width); // right := floor(center + width); left := floor(center - width); right := ceil(center + width); for j := left to right do begin weight := filter((center - j) / fscale) / fscale; if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcHeight) then n := SrcHeight - j + SrcHeight - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end end else // Vertical super-sampling // Scales from smaller to bigger height begin for i := 0 to DstHeight-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor)); center := i / yscale; // Original code: // left := ceil(center - fwidth); // right := floor(center + fwidth); left := floor(center - fwidth); right := ceil(center + fwidth); for j := left to right do begin weight := filter(center - j); if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcHeight) then n := SrcHeight - j + SrcHeight - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end; // -------------------------------------------------- // Apply filter to sample vertically from Work to Dst // -------------------------------------------------- {++++++++++++++++++++} SourceLine := Work; SrcDelta := DstWidth; {++++++++++++++++++++} for k := 0 to DstWidth-1 do begin for i := 0 to DstHeight-1 do begin rgba.r := 0; rgba.g := 0; rgba.b := 0; rgba.a := 0; // weight := 0.0; for j := 0 to contrib^[i].n-1 do begin {++++++++++++++++++++} color := PColorRGBA(SourceLine+contrib^[i].p^[j].pixel*SrcDelta)^; {++++++++++++++++++++} weight := contrib^[i].p^[j].weight; if (weight = 0.0) then continue; rgba.r := rgba.r + color.r * weight; rgba.g := rgba.g + color.g * weight; rgba.b := rgba.b + color.b * weight; rgba.a := rgba.a + color.a * weight; end; if (rgba.r > 255.0) then color.r := 255 else if (rgba.r < 0.0) then color.r := 0 else color.r := round(rgba.r); if (rgba.g > 255.0) then color.g := 255 else if (rgba.g < 0.0) then color.g := 0 else color.g := round(rgba.g); if (rgba.b > 255.0) then color.b := 255 else if (rgba.b < 0.0) then color.b := 0 else color.b := round(rgba.b); if (rgba.a > 255.0) then color.a := 255 else if (rgba.a < 0.0) then color.a := 0 else color.a := round(rgba.a); {++++++++++++++++++++} DstIntfImage.Colors[k, i]:= RGBA2Color(color); {++++++++++++++++++++} end; {++++++++++++++++++++} Inc(SourceLine); {++++++++++++++++++++} end; // Free the memory allocated for vertical filter weights for i := 0 to DstHeight-1 do FreeMem(contrib^[i].p); FreeMem(contrib); DstIntfImage.GetRawImage(ARawImage, True); Dst.LoadFromRawImage(ARawImage, True); finally FreeMem(Work); DstIntfImage.Free; SrcIntfImage.Free; end; end; end. �����������doublecmd-1.1.30/src/uregexprw.pas������������������������������������������������������������������0000644�0001750�0000144�00000000232�15104114162�016106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$define unicode} {$macro on} {$define FastUnicodeData} {$define uRegExprA := uRegExprW} {$define TRegExpr := TRegExprW} {$include uregexpra.pas} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uregexpru.pas������������������������������������������������������������������0000644�0001750�0000144�00000031344�15104114162�016114� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- PCRE - Perl Compatible Regular Expressions Copyright (C) 2019-2024 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit uRegExprU; {$mode delphi} interface uses Classes, SysUtils, CTypes; type { TRegExprU } TRegExprU = class private FCode: Pointer; FMatch: Pointer; FOptions: UInt32; FInput: PAnsiChar; FVector: pcsize_t; FVectorLength: cint; FExpression: String; FInputLength: UIntPtr; FOvector: array[Byte] of cint; function GetModifierI: Boolean; procedure SetModifierI(AValue: Boolean); procedure SetExpression(const AValue: String); function GetMatchLen(Idx : integer): PtrInt; function GetMatchPos(Idx : integer): PtrInt; public destructor Destroy; override; class function Available: Boolean; class function AvailableNew: Boolean; function Exec(AOffset: UIntPtr): Boolean; procedure SetInputString(AInputString : PAnsiChar; ALength : UIntPtr); function ReplaceAll(const Replacement: AnsiString; out Output: AnsiString): Boolean; public property Expression : String read FExpression write SetExpression; property MatchPos [Idx : integer] : PtrInt read GetMatchPos; property MatchLen [Idx : integer] : PtrInt read GetMatchLen; property ModifierI: Boolean read GetModifierI write SetModifierI; end; function ExecRegExpr(const ARegExpr, AInputStr: String): Boolean; implementation uses DynLibs, DCOSUtils, uDebug; // PCRE 2 const libpcre2 = {$IF DEFINED(MSWINDOWS)} 'libpcre2-8.dll' {$ELSEIF DEFINED(DARWIN)} 'libpcre2-8.dylib' {$ELSEIF DEFINED(UNIX)} 'libpcre2-8.so.0' {$IFEND}; const PCRE2_CONFIG_UNICODE = 9; PCRE2_CASELESS = $00000008; PCRE2_UTF = $00080000; PCRE2_SUBSTITUTE_GLOBAL = $00000100; //PCRE2_SUBSTITUTE_EXTENDED = $00000200; PCRE2_SUBSTITUTE_UNSET_EMPTY = $00000400; PCRE2_SUBSTITUTE_UNKNOWN_UNSET = $00000800; PCRE2_SUBSTITUTE_OVERFLOW_LENGTH = $00001000; PCRE2_ERROR_NOMEMORY = -48; var pcre2_compile: function(pattern: PAnsiChar; length: csize_t; options: cuint32; errorcode: pcint; erroroffset: pcsize_t; ccontext: Pointer): Pointer; cdecl; pcre2_code_free: procedure(code: Pointer); cdecl; pcre2_get_error_message: function(errorcode: cint; buffer: PAnsiChar; bufflen: csize_t): cint; cdecl; pcre2_match: function(code: Pointer; subject: PAnsiChar; length: csize_t; startoffset: csize_t; options: cuint32; match_data: Pointer; mcontext: Pointer): cint; cdecl; pcre2_get_ovector_pointer: function(match_data: Pointer): pcsize_t; cdecl; pcre2_match_data_create_from_pattern: function(code: Pointer; gcontext: Pointer): Pointer; cdecl; pcre2_match_data_free: procedure(match_data: Pointer); cdecl; pcre2_config: function(what: cuint32; where: pointer): cint; cdecl; pcre2_substitute: function(code: Pointer; subject: PAnsiChar; length: csize_t; startoffset: csize_t; options: cuint32; match_data: Pointer; mcontext: Pointer; replacement: PAnsiChar; rlength: csize_t; outputbuffer: PAnsiChar; var outlength: csize_t): cint; cdecl; // PCRE 1 const libpcre = {$IF DEFINED(MSWINDOWS)} 'libpcre.dll' {$ELSEIF DEFINED(DARWIN)} 'libpcre.dylib' {$ELSEIF DEFINED(UNIX)} 'libpcre.so.1' {$IFEND}; const PCRE_CONFIG_UTF8 = 0; PCRE_CASELESS = $00000001; PCRE_UTF8 = $00000800; var pcre_compile: function(pattern: PAnsiChar; options: cint; errptr: PPAnsiChar; erroffset: pcint; tableptr: PAnsiChar): pointer; cdecl; pcre_exec: function(code: pointer; extra: Pointer; subject: PAnsiChar; length: cint; startoffset: cint; options: cint; ovector: pcint; ovecsize: cint): cint; cdecl; pcre_free: procedure(code: pointer); cdecl; pcre_study: function(code: Pointer; options: cint; errptr: PPAnsiChar): Pointer; cdecl; pcre_free_study: procedure(extra: Pointer); cdecl; pcre_config: function(what: cint; where: pointer): cint; cdecl; var pcre_new: Boolean; hLib: TLibHandle = NilHandle; { TRegExprU } procedure TRegExprU.SetExpression(const AValue: String); var Message: String; error: PAnsiChar; errornumber: cint; erroroffset: cint; len: cint; begin FExpression:= AValue; if pcre_new then begin FOptions := FOptions or PCRE2_UTF; FCode := pcre2_compile(PAnsiChar(AValue), Length(AValue), FOptions, @errornumber, @erroroffset, nil); if Assigned(FCode) then FMatch := pcre2_match_data_create_from_pattern(FCode, nil) else begin SetLength(Message, MAX_PATH + 1); len := pcre2_get_error_message(errornumber, PAnsiChar(Message), MAX_PATH); if len < 0 then len := Length(PAnsiChar(Message)); // PCRE2_ERROR_NOMEMORY SetLength(Message, len); raise Exception.Create(Message); end; end else begin FOptions := FOptions or PCRE_UTF8; FCode := pcre_compile(PAnsiChar(AValue), cint(FOptions), @error, @erroroffset, nil); if Assigned(FCode) then FMatch:= pcre_study(FCode, 0, @error) else raise Exception.Create(StrPas(error)); end; end; function TRegExprU.GetMatchLen(Idx : integer): PtrInt; begin if (Idx < FVectorLength) then begin if pcre_new then Result := UIntPtr(FVector[Idx * 2 + 1]) - UIntPtr(FVector[Idx * 2]) else Result := UIntPtr(FOvector[Idx * 2 + 1]) - UIntPtr(FOvector[Idx * 2]); end else Result:= 0; end; function TRegExprU.GetMatchPos(Idx : integer): PtrInt; begin if (Idx < FVectorLength) then begin if pcre_new then Result := UIntPtr(FVector[Idx * 2]) + 1 else Result := UIntPtr(FOvector[Idx * 2]) + 1; end else Result:= 0; end; function TRegExprU.GetModifierI: Boolean; begin if pcre_new then begin Result:= (FOptions and PCRE2_CASELESS) <> 0; end else begin Result:= (FOptions and PCRE_CASELESS) <> 0; end; end; procedure TRegExprU.SetModifierI(AValue: Boolean); begin if GetModifierI <> AValue then begin if pcre_new then begin if AValue then FOptions:= FOptions or PCRE2_CASELESS else begin FOptions:= FOptions and (not PCRE2_CASELESS); end; end else begin if AValue then FOptions:= FOptions or PCRE_CASELESS else begin FOptions:= FOptions and (not PCRE_CASELESS); end; end; SetExpression(FExpression); end; end; destructor TRegExprU.Destroy; begin if Assigned(FCode) then begin if pcre_new then pcre2_code_free(FCode) else pcre_free(FCode); end; if Assigned(FMatch) then begin if pcre_new then pcre2_match_data_free(FMatch) else pcre_free_study(FMatch); end; inherited Destroy; end; class function TRegExprU.Available: Boolean; begin Result:= (hLib <> NilHandle); end; class function TRegExprU.AvailableNew: Boolean; begin Result:= (hLib <> NilHandle) and pcre_new; end; function TRegExprU.Exec(AOffset: UIntPtr): Boolean; begin Dec(AOffset); if pcre_new then begin FVectorLength:= pcre2_match(FCode, FInput, FInputLength, AOffset, 0, FMatch, nil); Result:= (FVectorLength >= 0); if Result then FVector := pcre2_get_ovector_pointer(FMatch); end else begin FVectorLength := pcre_exec(FCode, FMatch, FInput, FInputLength, AOffset, 0, FOvector, SizeOf(FOvector)); // The output vector wasn't big enough if (FVectorLength = 0) then FVectorLength:= SizeOf(FOvector) div 3; Result:= (FVectorLength >= 0); end; end; procedure TRegExprU.SetInputString(AInputString: PAnsiChar; ALength: UIntPtr); begin FInput:= AInputString; FInputLength:= ALength; end; function TRegExprU.ReplaceAll(const Replacement: AnsiString; out Output: AnsiString): Boolean; var outlength: csize_t; options: cuint32; res: cint; begin if not pcre_new then begin Output := ''; Exit(False); end; if FInputLength = 0 then begin Output := ''; Exit(True); end; options := PCRE2_SUBSTITUTE_OVERFLOW_LENGTH or PCRE2_SUBSTITUTE_UNKNOWN_UNSET or PCRE2_SUBSTITUTE_UNSET_EMPTY; //options := options or PCRE2_SUBSTITUTE_EXTENDED; options := options or PCRE2_SUBSTITUTE_GLOBAL; outlength := FInputLength * 2 + 1; // + space for #0 if outlength < 2048 then outlength := 2048; SetLength(Output, outlength - 1); res := pcre2_substitute(FCode, FInput, FInputLength, 0, options, FMatch, nil, PAnsiChar(Replacement), Length(Replacement), PAnsiChar(Output), outlength); if res >= 0 then // if res = 0 then nothing found SetLength(Output, outlength) else if res = PCRE2_ERROR_NOMEMORY then begin SetLength(Output, outlength - 1); res := pcre2_substitute(FCode, FInput, FInputLength, 0, options, FMatch, nil, PAnsiChar(Replacement), Length(Replacement), PAnsiChar(Output), outlength); end; Result := res >= 0; end; function ExecRegExpr(const ARegExpr, AInputStr: String): Boolean; var r: TRegExprU; begin r := TRegExprU.Create; try r.Expression := ARegExpr; r.SetInputString(PChar(AInputStr), Length(AInputStr)); Result := r.Exec(1); finally r.Free; end; end; procedure Initialize; var Where: IntPtr; begin hLib:= LoadLibrary(libpcre2); if (hLib <> NilHandle) then begin pcre_new:= True; try @pcre2_config:= SafeGetProcAddress(hLib, 'pcre2_config_8'); if (pcre2_config(PCRE2_CONFIG_UNICODE, @Where) <> 0) or (Where = 0) then raise Exception.Create('pcre2_config(PCRE2_CONFIG_UNICODE)'); @pcre2_compile:= SafeGetProcAddress(hLib, 'pcre2_compile_8'); @pcre2_code_free:= SafeGetProcAddress(hLib, 'pcre2_code_free_8'); @pcre2_get_error_message:= SafeGetProcAddress(hLib, 'pcre2_get_error_message_8'); @pcre2_match:= SafeGetProcAddress(hLib, 'pcre2_match_8'); @pcre2_get_ovector_pointer:= SafeGetProcAddress(hLib, 'pcre2_get_ovector_pointer_8'); @pcre2_match_data_create_from_pattern:= SafeGetProcAddress(hLib, 'pcre2_match_data_create_from_pattern_8'); @pcre2_match_data_free:= SafeGetProcAddress(hLib, 'pcre2_match_data_free_8'); @pcre2_substitute:= SafeGetProcAddress(hLib, 'pcre2_substitute_8'); except on E: Exception do begin FreeLibrary(hLib); hLib:= NilHandle; DCDebug(E.Message); end; end; end else begin hLib:= LoadLibrary(libpcre); {$IF DEFINED(LINUX)} // Debian use another library name if (hLib = NilHandle) then hLib:= LoadLibrary('libpcre.so.3'); {$ENDIF} if (hLib <> NilHandle) then begin pcre_new:= False; try @pcre_config:= SafeGetProcAddress(hLib, 'pcre_config'); if (pcre_config(PCRE_CONFIG_UTF8, @Where) <> 0) or (Where = 0) then raise Exception.Create('pcre_config(PCRE_CONFIG_UTF8)'); @pcre_compile:= SafeGetProcAddress(hLib, 'pcre_compile'); @pcre_exec:= SafeGetProcAddress(hLib, 'pcre_exec'); @pcre_free:= PPointer(SafeGetProcAddress(hLib, 'pcre_free'))^; @pcre_study:= SafeGetProcAddress(hLib, 'pcre_study'); @pcre_free_study:= SafeGetProcAddress(hLib, 'pcre_free_study'); except on E: Exception do begin FreeLibrary(hLib); hLib:= NilHandle; DCDebug(E.Message); end; end; end; end; end; initialization Initialize; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uregexpra.pas������������������������������������������������������������������0000644�0001750�0000144�00000616350�15104114162�016076� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uRegExprA; { TRegExpr class library Delphi Regular Expressions Copyright (c) 1999-2004 Andrey V. Sorokin, St.Petersburg, Russia You can choose to use this Pascal unit in one of the two following licenses: Option 1> You may use this software in any kind of development, including comercial, redistribute, and modify it freely, under the following restrictions : 1. This software is provided as it is, without any kind of warranty given. Use it at Your own risk.The author is not responsible for any consequences of use of this software. 2. The origin of this software may not be mispresented, You must not claim that You wrote the original software. If You use this software in any kind of product, it would be appreciated that there in a information box, or in the documentation would be an acknowledgement like Partial Copyright (c) 2004 Andrey V. Sorokin https://sorokin.engineer/ andrey@sorokin.engineer 3. You may not have any income from distributing this source (or altered version of it) to other developers. When You use this product in a comercial package, the source may not be charged seperatly. 4. Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. 5. RegExp Studio application and all the visual components as well as documentation is not part of the TRegExpr library and is not free for usage. https://sorokin.engineer/ andrey@sorokin.engineer Option 2> The same modified LGPL with static linking exception as the Free Pascal RTL } { program is essentially a linear encoding of a nondeterministic finite-state machine (aka syntax charts or "railroad normal form" in parsing technology). Each node is an opcode plus a "next" pointer, possibly plus an operand. "Next" pointers of all nodes except BRANCH implement concatenation; a "next" pointer with a BRANCH on both ends of it connects two alternatives. (Here we have one of the subtle syntax dependencies: an individual BRANCH (as opposed to a collection of them) is never concatenated with anything because of operator precedence.) The operand of some types of node is a literal string; for others, it is a node leading into a sub-FSM. In particular, the operand of a BRANCH node is the first node of the branch. (NB this is *not* a tree structure: the tail of the branch connects to the thing following the set of BRANCHes.) } interface { off $DEFINE DebugSynRegExpr } // ======== Determine compiler {.$I regexpr_compilers.inc} // ======== Define base compiler options {$BOOLEVAL OFF} {$EXTENDEDSYNTAX ON} {$LONGSTRINGS ON} {$OPTIMIZATION ON} {$IFDEF FPC} {$MODE DELPHI} // Delphi-compatible mode in FreePascal {$INLINE ON} {$ENDIF} // ======== Define options for TRegExpr engine {.$DEFINE Unicode} // Use WideChar for characters and UnicodeString/WideString for strings { off $DEFINE UnicodeEx} // Support Unicode >0xFFFF, e.g. emoji, e.g. "." must find 2 WideChars of 1 emoji { off $DEFINE UseWordChars} // Use WordChars property, otherwise fixed list 'a'..'z','A'..'Z','0'..'9','_' { off $DEFINE UseSpaceChars} // Use SpaceChars property, otherwise fixed list { off $DEFINE UseLineSep} // Use LineSeparators property, otherwise fixed line-break chars {.$DEFINE FastUnicodeData} // Use arrays for UpperCase/LowerCase/IsWordChar, they take 320K more memory {$DEFINE UseFirstCharSet} // Enable optimization, which finds possible first chars of input string {$DEFINE RegExpPCodeDump} // Enable method Dump() to show opcode as string {$IFNDEF FPC} // Not supported in FreePascal {$DEFINE reRealExceptionAddr} // Exceptions will point to appropriate source line, not to Error procedure {$ENDIF} {$DEFINE ComplexBraces} // Support braces in complex cases {$IFNDEF Unicode} {$UNDEF UnicodeEx} {$UNDEF FastUnicodeData} {$ENDIF} // ======== Define Pascal-language options // Define 'UseAsserts' option (do not edit this definitions). // Asserts used to catch 'strange bugs' in TRegExpr implementation (when something goes // completely wrong). You can swith asserts on/off with help of {$C+}/{$C-} compiler options. {$IFDEF D3} {$DEFINE UseAsserts} {$ENDIF} {$IFDEF FPC} {$DEFINE UseAsserts} {$ENDIF} // Define 'use subroutine parameters default values' option (do not edit this definition). {$IFDEF D4} {$DEFINE DefParam} {$ENDIF} {$IFDEF FPC} {$DEFINE DefParam} {$ENDIF} // Define 'OverMeth' options, to use method overloading (do not edit this definitions). {$IFDEF D5} {$DEFINE OverMeth} {$ENDIF} {$IFDEF FPC} {$DEFINE OverMeth} {$ENDIF} // Define 'InlineFuncs' options, to use inline keyword (do not edit this definitions). {$IFDEF D8} {$DEFINE InlineFuncs} {$ENDIF} {$IFDEF FPC} {$DEFINE InlineFuncs} {$ENDIF} uses Classes, // TStrings in Split method SysUtils, // Exception {$IFDEF D2009} {$IFDEF D_XE}System.{$ENDIF}Character, {$ENDIF} Math; {$IFNDEF UniCode} type TRecodeTable = array[Byte] of Byte; {$ENDIF} type {$IFNDEF FPC} // Delphi doesn't have PtrInt but has NativeInt PtrInt = NativeInt; PtrUInt = NativeInt; {$ENDIF} {$IFDEF UniCode} PRegExprChar = PUnicodeChar; {$IFDEF FPC} RegExprString = UnicodeString; {$ELSE} {$IFDEF D2009} RegExprString = UnicodeString; {$ELSE} RegExprString = WideString; {$ENDIF} {$ENDIF} REChar = UnicodeChar; {$ELSE} PRegExprChar = PAnsiChar; RegExprString = AnsiString; REChar = AnsiChar; {$ENDIF} TREOp = REChar; // internal opcode type PREOp = ^TREOp; type TRegExprCharset = set of byte; const // Escape char ('\' in common r.e.) used for escaping metachars (\w, \d etc) EscChar = '\'; // Substitute method: prefix of group reference: $1 .. $9 and $<name> SubstituteGroupChar = '$'; RegExprModifierI: boolean = False; // default value for ModifierI RegExprModifierR: boolean = True; // default value for ModifierR RegExprModifierS: boolean = True; // default value for ModifierS RegExprModifierG: boolean = True; // default value for ModifierG RegExprModifierM: boolean = False; // default value for ModifierM RegExprModifierX: boolean = False; // default value for ModifierX {$IFDEF UseSpaceChars} // default value for SpaceChars RegExprSpaceChars: RegExprString = ' '#$9#$A#$D#$C; {$ENDIF} {$IFDEF UseWordChars} // default value for WordChars RegExprWordChars: RegExprString = '0123456789' + 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'; {$ENDIF} {$IFDEF UseLineSep} // default value for LineSeparators RegExprLineSeparators: RegExprString = #$d#$a#$b#$c {$IFDEF UniCode} + #$2028#$2029#$85 {$ENDIF}; {$ENDIF} // Tab and Unicode category "Space Separator": // https://www.compart.com/en/unicode/category/Zs RegExprHorzSeparators: RegExprString = #9#$20#$A0 {$IFDEF UniCode} + #$1680#$2000#$2001#$2002#$2003#$2004#$2005#$2006#$2007#$2008#$2009#$200A#$202F#$205F#$3000 {$ENDIF}; RegExprUsePairedBreak: boolean = True; RegExprReplaceLineBreak: RegExprString = sLineBreak; RegExprLookaheadIsAtomic: boolean = False; RegExprLookbehindIsAtomic: boolean = True; const RegexMaxGroups = 90; // Max number of groups. // Be carefull - don't use values which overflow OP_CLOSE* opcode // (in this case you'll get compiler error). // Big value causes slower work and more stack required. RegexMaxMaxGroups = 255; // Max possible value for RegexMaxGroups. // Don't change it! It's defined by internal TRegExpr design. {$IFDEF ComplexBraces} const LoopStackMax = 10; // max depth of loops stack //###0.925 type TRegExprLoopStack = array [1 .. LoopStackMax] of integer; {$ENDIF} type TRegExprModifiers = record I: boolean; // Case-insensitive. R: boolean; // Extended syntax for Russian ranges in []. // If True, then а-я additionally includes letter 'ё', // А-Я additionally includes 'Ё', and а-Я includes all Russian letters. // Turn it off if it interferes with your national alphabet. S: boolean; // Dot '.' matches any char, otherwise only [^\n]. G: boolean; // Greedy. Switching it off switches all operators to non-greedy style, // so if G=False, then '*' works like '*?', '+' works like '+?' and so on. M: boolean; // Treat string as multiple lines. It changes `^' and `$' from // matching at only the very start/end of the string to the start/end // of any line anywhere within the string. X: boolean; // Allow comments in regex using # char. end; function IsModifiersEqual(const A, B: TRegExprModifiers): boolean; type TRegExpr = class; TRegExprReplaceFunction = function(ARegExpr: TRegExpr): RegExprString of object; TRegExprCharChecker = function(ch: REChar): boolean of object; TRegExprCharCheckerArray = array[0 .. 30] of TRegExprCharChecker; TRegExprCharCheckerInfo = record CharBegin, CharEnd: REChar; CheckerIndex: integer; end; TRegExprCharCheckerInfos = array of TRegExprCharCheckerInfo; { TRegExpr } TRegExpr = class private GrpStart: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to group start in InputString GrpEnd: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to group end in InputString GrpIndexes: array [0 .. RegexMaxGroups - 1] of integer; // map global group index to _capturing_ group index GrpNames: array [0 .. RegexMaxGroups - 1] of RegExprString; // names of groups, if non-empty GrpAtomic: array [0 .. RegexMaxGroups - 1] of boolean; // group[i] is atomic (filled in Compile) GrpAtomicDone: array [0 .. RegexMaxGroups - 1] of boolean; // atomic group[i] is "done" (used in Exec* only) GrpOpCodes: array [0 .. RegexMaxGroups - 1] of PRegExprChar; // pointer to opcode of group[i] (used by OP_SUBCALL*) GrpSubCalled: array [0 .. RegexMaxGroups - 1] of boolean; // group[i] is called by OP_SUBCALL* GrpCount: integer; {$IFDEF ComplexBraces} LoopStack: TRegExprLoopStack; // state before entering loop LoopStackIdx: integer; // 0 - out of all loops {$ENDIF} // The "internal use only" fields to pass info from compile // to execute that permits the execute phase to run lots faster on // simple cases. regAnchored: REChar; // is the match anchored (at beginning-of-line only)? // regAnchored permits very fast decisions on suitable starting points // for a match, cutting down the work a lot. regMust permits fast rejection // of lines that cannot possibly match. The regMust tests are costly enough // that regcomp() supplies a regMust only if the r.e. contains something // potentially expensive (at present, the only such thing detected is * or + // at the start of the r.e., which can involve a lot of backup). regMustLen is // supplied because the test in regexec() needs it and regcomp() is computing // it anyway. regMust: PRegExprChar; // string (pointer into program) that match must include, or nil regMustLen: integer; // length of regMust string regMustString: RegExprString; // string which must occur in match (got from regMust/regMustLen) regLookahead: boolean; // regex has _some_ lookahead regLookaheadNeg: boolean; // regex has _nagative_ lookahead regLookaheadGroup: integer; // index of group for lookahead regLookbehind: boolean; // regex has positive lookbehind regNestedCalls: integer; // some attempt to prevent 'catastrophic backtracking' but not used {$IFDEF UseFirstCharSet} FirstCharSet: TRegExprCharset; FirstCharArray: array[byte] of boolean; {$ENDIF} // work variables for Exec routines - save stack in recursion regInput: PRegExprChar; // pointer to currently handling char of input string fInputStart: PRegExprChar; // pointer to first char of input string fInputEnd: PRegExprChar; // pointer after last char of input string fRegexStart: PRegExprChar; // pointer to first char of regex fRegexEnd: PRegExprChar; // pointer after last char of regex regCurrentGrp: integer; // index of group handling by OP_OPEN* opcode // work variables for compiler's routines regParse: PRegExprChar; // pointer to currently handling char of regex regNumBrackets: integer; // count of () brackets regDummy: REChar; // dummy pointer, used to detect 1st/2nd pass of Compile // if p=@regDummy, it is pass-1: opcode memory is not yet allocated programm: PRegExprChar; // pointer to opcode, =nil in pass-1 regCode: PRegExprChar; // pointer to last emitted opcode; changing in pass-2, but =@regDummy in pass-1 regCodeSize: integer; // total opcode size in REChars regCodeWork: PRegExprChar; // pointer to opcode, to first code after MAGIC regExactlyLen: PLongInt; // pointer to length of substring of OP_EXACTLY* inside opcode fSecondPass: boolean; // true inside pass-2 of Compile fExpression: RegExprString; // regex string fInputString: RegExprString; // input string fInputLength : UIntPtr; // input string length fLastError: integer; // Error call sets code of LastError fLastErrorOpcode: TREOp; fLastErrorSymbol: REChar; fModifiers: TRegExprModifiers; // regex modifiers fCompModifiers: TRegExprModifiers; // compiler's copy of modifiers fProgModifiers: TRegExprModifiers; // modifiers values from last programm compilation {$IFDEF UseSpaceChars} fSpaceChars: RegExprString; {$ENDIF} {$IFDEF UseWordChars} fWordChars: RegExprString; {$ENDIF} {$IFDEF UseLineSep} fLineSeparators: RegExprString; {$ENDIF} fUsePairedBreak: boolean; fReplaceLineEnd: RegExprString; // string to use for "\n" in Substitute method fSlowChecksSizeMax: integer; // Exec() param ASlowChecks is set to True, when Length(InputString)<SlowChecksSizeMax // This ASlowChecks enables to use regMustString optimization {$IFDEF UseLineSep} {$IFNDEF UniCode} fLineSepArray: array[byte] of boolean; {$ENDIF} {$ENDIF} CharCheckers: TRegExprCharCheckerArray; CharCheckerInfos: TRegExprCharCheckerInfos; CheckerIndex_Word: byte; CheckerIndex_NotWord: byte; CheckerIndex_Digit: byte; CheckerIndex_NotDigit: byte; CheckerIndex_Space: byte; CheckerIndex_NotSpace: byte; CheckerIndex_HorzSep: byte; CheckerIndex_NotHorzSep: byte; CheckerIndex_VertSep: byte; CheckerIndex_NotVertSep: byte; CheckerIndex_LowerAZ: byte; CheckerIndex_UpperAZ: byte; fHelper: TRegExpr; fHelperLen: integer; procedure InitCharCheckers; function CharChecker_Word(ch: REChar): boolean; function CharChecker_NotWord(ch: REChar): boolean; function CharChecker_Space(ch: REChar): boolean; function CharChecker_NotSpace(ch: REChar): boolean; function CharChecker_Digit(ch: REChar): boolean; function CharChecker_NotDigit(ch: REChar): boolean; function CharChecker_HorzSep(ch: REChar): boolean; function CharChecker_NotHorzSep(ch: REChar): boolean; function CharChecker_VertSep(ch: REChar): boolean; function CharChecker_NotVertSep(ch: REChar): boolean; function CharChecker_LowerAZ(ch: REChar): boolean; function CharChecker_UpperAZ(ch: REChar): boolean; function DumpCheckerIndex(N: byte): RegExprString; function DumpCategoryChars(ch, ch2: REChar; Positive: boolean): RegExprString; procedure ClearMatches; {$IFDEF InlineFuncs}inline;{$ENDIF} procedure ClearInternalIndexes; {$IFDEF InlineFuncs}inline;{$ENDIF} function FindInCharClass(ABuffer: PRegExprChar; AChar: REChar; AIgnoreCase: boolean): boolean; procedure GetCharSetFromCharClass(ABuffer: PRegExprChar; AIgnoreCase: boolean; var ARes: TRegExprCharset); procedure GetCharSetFromSpaceChars(var ARes: TRegExprCharset); {$IFDEF InlineFuncs}inline;{$ENDIF} procedure GetCharSetFromWordChars(var ARes: TRegExprCharSet); {$IFDEF InlineFuncs}inline;{$ENDIF} function IsWordChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} function IsSpaceChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} function IsCustomLineSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} {$IFDEF UseLineSep} procedure InitLineSepArray; {$ENDIF} procedure FindGroupName(APtr, AEndPtr: PRegExprChar; AEndChar: REChar; var AName: RegExprString); // Mark programm as having to be [re]compiled procedure InvalidateProgramm; // Check if we can use compiled regex, compile it if something changed function IsProgrammOk: boolean; procedure SetExpression(const AStr: RegExprString); function GetModifierStr: RegExprString; procedure SetModifierStr(const AStr: RegExprString); function GetModifierG: boolean; function GetModifierI: boolean; function GetModifierM: boolean; function GetModifierR: boolean; function GetModifierS: boolean; function GetModifierX: boolean; procedure SetModifierG(AValue: boolean); procedure SetModifierI(AValue: boolean); procedure SetModifierM(AValue: boolean); procedure SetModifierR(AValue: boolean); procedure SetModifierS(AValue: boolean); procedure SetModifierX(AValue: boolean); // Default handler raises exception ERegExpr with // Message = ErrorMsg (AErrorID), ErrorCode = AErrorID // and CompilerErrorPos = value of property CompilerErrorPos. procedure Error(AErrorID: integer); virtual; // error handler. { ==================== Compiler section =================== } // compile a regular expression into internal code function CompileRegExpr(ARegExp: PRegExprChar): boolean; // set the next-pointer at the end of a node chain procedure Tail(p: PRegExprChar; val: PRegExprChar); // regoptail - regtail on operand of first argument; nop if operandless procedure OpTail(p: PRegExprChar; val: PRegExprChar); // regnode - emit a node, return location function EmitNode(op: TREOp): PRegExprChar; // emit (if appropriate) a byte of code procedure EmitC(ch: REChar); {$IFDEF InlineFuncs}inline;{$ENDIF} // emit LongInt value procedure EmitInt(AValue: LongInt); {$IFDEF InlineFuncs}inline;{$ENDIF} // emit back-reference to group function EmitGroupRef(AIndex: integer; AIgnoreCase: boolean): PRegExprChar; {$IFDEF FastUnicodeData} procedure FindCategoryName(var scan: PRegExprChar; var ch1, ch2: REChar); function EmitCategoryMain(APositive: boolean): PRegExprChar; {$ENDIF} // insert an operator in front of already-emitted operand // Means relocating the operand. procedure InsertOperator(op: TREOp; opnd: PRegExprChar; sz: integer); // ###0.90 // regular expression, i.e. main body or parenthesized thing function ParseReg(InBrackets: boolean; var FlagParse: integer): PRegExprChar; // one alternative of an | operator function ParseBranch(var FlagParse: integer): PRegExprChar; // something followed by possible [*+?] function ParsePiece(var FlagParse: integer): PRegExprChar; function HexDig(Ch: REChar): integer; function UnQuoteChar(var APtr: PRegExprChar): REChar; // the lowest level function ParseAtom(var FlagParse: integer): PRegExprChar; // current pos in r.e. - for error hanling function GetCompilerErrorPos: PtrInt; {$IFDEF UseFirstCharSet} // ###0.929 procedure FillFirstCharSet(prog: PRegExprChar); {$ENDIF} { ===================== Matching section =================== } // repeatedly match something simple, report how many function FindRepeated(p: PRegExprChar; AMax: IntPtr): IntPtr; // dig the "next" pointer out of a node function regNext(p: PRegExprChar): PRegExprChar; // recursively matching routine function MatchPrim(prog: PRegExprChar): boolean; // match at specific position only, called from ExecPrim function MatchAtOnePos(APos: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} // Exec for stored InputString function ExecPrim(AOffset: IntPtr; ATryOnce, ASlowChecks, ABackward: boolean): boolean; function GetSubExprCount: integer; function GetMatchPos(Idx: integer): PtrInt; function GetMatchLen(Idx: integer): PtrInt; function GetMatch(Idx: integer): RegExprString; procedure SetInputString(const AInputString: RegExprString); procedure SetInputRange(AStart, AEnd: PRegExprChar); {$IFDEF UseLineSep} procedure SetLineSeparators(const AStr: RegExprString); {$ENDIF} procedure SetUsePairedBreak(AValue: boolean); function _LowerCase(Ch: REChar): REChar; function _UpperCase(Ch: REChar): REChar; function InvertCase(const Ch: REChar): REChar; public constructor Create; overload; {$IFDEF UNICODE} public constructor Create(const AExpression : RegExprString); overload; {$ELSE} private FLowerCase, FUpperCase: TRecodeTable; public constructor Create(const AEncoding: String); overload; procedure ChangeEncoding(const AEncoding: String); {$ENDIF} destructor Destroy; override; class function VersionMajor: integer; class function VersionMinor: integer; // match a programm against a string AInputString // !!! Exec store AInputString into InputString property // For Delphi 5 and higher available overloaded versions - first without // parameter (uses already assigned to InputString property value) // and second that has IntPtr parameter and is same as ExecPos function Exec(const AInputString: RegExprString): boolean; {$IFDEF OverMeth} overload; function Exec: boolean; overload; function Exec(AOffset: IntPtr): boolean; overload; {$ENDIF} // find next match: // ExecNext; // works the same as // if MatchLen [0] = 0 then ExecPos (MatchPos [0] + 1) // else ExecPos (MatchPos [0] + MatchLen [0]); // but it's more simpler ! // Raises exception if used without preceeding SUCCESSFUL call to // Exec* (Exec, ExecPos, ExecNext). So You always must use something like // if Exec (InputString) then repeat { proceed results} until not ExecNext; function ExecNext(ABackward: boolean {$IFDEF DefParam} = False{$ENDIF}): boolean; // find match for InputString starting from AOffset position // (AOffset=1 - first char of InputString) function ExecPos(AOffset: IntPtr {$IFDEF DefParam} = 1{$ENDIF}): boolean; {$IFDEF OverMeth} overload; function ExecPos(AOffset: IntPtr; ATryOnce, ABackward: boolean): boolean; overload; {$ENDIF} // set pointer to input string and input string length procedure SetInputString(AInputString : PRegExprChar; ALength : UIntPtr); overload; // Returns ATemplate with '$&' or '$0' replaced by whole r.e. // occurence and '$1'...'$nn' replaced by subexpression with given index. // Symbol '$' is used instead of '\' (for future extensions // and for more Perl-compatibility) and accepts more than one digit. // If you want to place into template raw '$' or '\', use prefix '\'. // Example: '1\$ is $2\\rub\\' -> '1$ is <Match[2]>\rub\' // If you want to place any number after '$' you must enclose it // with curly braces: '${12}'. // Example: 'a$12bc' -> 'a<Match[12]>bc' // 'a${1}2bc' -> 'a<Match[1]>2bc'. function Substitute(const ATemplate: RegExprString): RegExprString; // Splits AInputStr to list by positions of all r.e. occurencies. // Internally calls Exec, ExecNext. procedure Split(const AInputStr: RegExprString; APieces: TStrings); function Replace(const AInputStr: RegExprString; const AReplaceStr: RegExprString; AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}) // ###0.946 : RegExprString; {$IFDEF OverMeth} overload; function Replace(const AInputStr: RegExprString; AReplaceFunc: TRegExprReplaceFunction): RegExprString; overload; {$ENDIF} // Returns AInputStr with r.e. occurencies replaced by AReplaceStr. // If AUseSubstitution is true, then AReplaceStr will be used // as template for Substitution methods. // For example: // Expression := '({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*'; // Replace ('BLOCK( test1)', 'def "$1" value "$2"', True); // will return: def 'BLOCK' value 'test1' // Replace ('BLOCK( test1)', 'def "$1" value "$2"') // will return: def "$1" value "$2" // Internally calls Exec, ExecNext. // Overloaded version and ReplaceEx operate with callback function, // so you can implement really complex functionality. function ReplaceEx(const AInputStr: RegExprString; AReplaceFunc: TRegExprReplaceFunction): RegExprString; // Returns ID of last error, 0 if no errors (unusable if // Error method raises exception) and clear internal status // into 0 (no errors). function LastError: integer; // Returns Error message for error with ID = AErrorID. function ErrorMsg(AErrorID: integer): RegExprString; virtual; // Re-compile regex procedure Compile; {$IFDEF RegExpPCodeDump} // Show compiled regex in textual form function Dump: RegExprString; // Show single opcode in textual form function DumpOp(op: TREOp): RegExprString; {$ENDIF} function IsCompiled: boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} // Opcode contains only operations for fixed match length: EXACTLY*, ANY*, etc function IsFixedLength(var op: TREOp; var ALen: integer): boolean; // Regular expression. // For optimization, TRegExpr will automatically compiles it into 'P-code' // (You can see it with help of Dump method) and stores in internal // structures. Real [re]compilation occures only when it really needed - // while calling Exec, ExecNext, Substitute, Dump, etc // and only if Expression or other P-code affected properties was changed // after last [re]compilation. // If any errors while [re]compilation occures, Error method is called // (by default Error raises exception - see below) property Expression: RegExprString read fExpression write SetExpression; // Set/get default values of r.e.syntax modifiers. Modifiers in // r.e. (?ismx-ismx) will replace this default values. // If you try to set unsupported modifier, Error will be called // (by defaul Error raises exception ERegExpr). property ModifierStr: RegExprString read GetModifierStr write SetModifierStr; property ModifierI: boolean read GetModifierI write SetModifierI; property ModifierR: boolean read GetModifierR write SetModifierR; property ModifierS: boolean read GetModifierS write SetModifierS; property ModifierG: boolean read GetModifierG write SetModifierG; property ModifierM: boolean read GetModifierM write SetModifierM; property ModifierX: boolean read GetModifierX write SetModifierX; // returns current input string (from last Exec call or last assign // to this property). // Any assignment to this property clear Match* properties ! property InputString: RegExprString read fInputString write SetInputString; // Number of subexpressions has been found in last Exec* call. // If there are no subexpr. but whole expr was found (Exec* returned True), // then SubExprMatchCount=0, if no subexpressions nor whole // r.e. found (Exec* returned false) then SubExprMatchCount=-1. // Note, that some subexpr. may be not found and for such // subexpr. MathPos=MatchLen=-1 and Match=''. // For example: Expression := '(1)?2(3)?'; // Exec ('123'): SubExprMatchCount=2, Match[0]='123', [1]='1', [2]='3' // Exec ('12'): SubExprMatchCount=1, Match[0]='12', [1]='1' // Exec ('23'): SubExprMatchCount=2, Match[0]='23', [1]='', [2]='3' // Exec ('2'): SubExprMatchCount=0, Match[0]='2' // Exec ('7') - return False: SubExprMatchCount=-1 property SubExprMatchCount: integer read GetSubExprCount; // pos of entrance subexpr. #Idx into tested in last Exec* // string. First subexpr. has Idx=1, last - MatchCount, // whole r.e. has Idx=0. // Returns -1 if in r.e. no such subexpr. or this subexpr. // not found in input string. property MatchPos[Idx: integer]: PtrInt read GetMatchPos; // len of entrance subexpr. #Idx r.e. into tested in last Exec* // string. First subexpr. has Idx=1, last - MatchCount, // whole r.e. has Idx=0. // Returns -1 if in r.e. no such subexpr. or this subexpr. // not found in input string. // Remember - MatchLen may be 0 (if r.e. match empty string) ! property MatchLen[Idx: integer]: PtrInt read GetMatchLen; // == copy (InputString, MatchPos [Idx], MatchLen [Idx]) // Returns '' if in r.e. no such subexpr. or this subexpr. // not found in input string. property Match[Idx: integer]: RegExprString read GetMatch; // get index of group (subexpression) by name, to support named groups // like in Python: (?P<name>regex) function MatchIndexFromName(const AName: RegExprString): integer; function MatchFromName(const AName: RegExprString): RegExprString; // Returns position in r.e. where compiler stopped. // Useful for error diagnostics property CompilerErrorPos: PtrInt read GetCompilerErrorPos; {$IFDEF UseSpaceChars} // Contains chars, treated as /s (initially filled with RegExprSpaceChars // global constant) property SpaceChars: RegExprString read fSpaceChars write fSpaceChars; // ###0.927 {$ENDIF} {$IFDEF UseWordChars} // Contains chars, treated as /w (initially filled with RegExprWordChars // global constant) property WordChars: RegExprString read fWordChars write fWordChars; // ###0.929 {$ENDIF} {$IFDEF UseLineSep} // line separators (like \n in Unix) property LineSeparators: RegExprString read fLineSeparators write SetLineSeparators; // ###0.941 {$ENDIF} // support paired line-break CR LF property UseLinePairedBreak: boolean read fUsePairedBreak write SetUsePairedBreak; property ReplaceLineEnd: RegExprString read fReplaceLineEnd write fReplaceLineEnd; property SlowChecksSizeMax: integer read fSlowChecksSizeMax write fSlowChecksSizeMax; public function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): Boolean; function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; AUseSubstitution: Boolean = False): RegExprString; end; type ERegExpr = class(Exception) public ErrorCode: integer; CompilerErrorPos: PtrInt; end; // true if string AInputString match regular expression ARegExpr // ! will raise exeption if syntax errors in ARegExpr function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): boolean; // Split AInputStr into APieces by r.e. ARegExpr occurencies procedure SplitRegExpr(const ARegExpr, AInputStr: RegExprString; APieces: TStrings); // Returns AInputStr with r.e. occurencies replaced by AReplaceStr // If AUseSubstitution is true, then AReplaceStr will be used // as template for Substitution methods. // For example: // ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*', // 'BLOCK( test1)', 'def "$1" value "$2"', True) // will return: def 'BLOCK' value 'test1' // ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*', // 'BLOCK( test1)', 'def "$1" value "$2"') // will return: def "$1" value "$2" function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; {$IFDEF OverMeth}overload; // ###0.947 // Alternate form allowing to set more parameters. type TRegexReplaceOption = ( rroModifierI, rroModifierR, rroModifierS, rroModifierG, rroModifierM, rroModifierX, rroUseSubstitution, rroUseOsLineEnd ); TRegexReplaceOptions = set of TRegexReplaceOption; function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; Options: TRegexReplaceOptions): RegExprString; overload; {$ENDIF} // Replace all metachars with its safe representation, // for example 'abc$cd.(' converts into 'abc\$cd\.\(' // This function useful for r.e. autogeneration from // user input function QuoteRegExprMetaChars(const AStr: RegExprString): RegExprString; // Makes list of subexpressions found in ARegExpr r.e. // In ASubExps every item represent subexpression, // from first to last, in format: // String - subexpression text (without '()') // low word of Object - starting position in ARegExpr, including '(' // if exists! (first position is 1) // high word of Object - length, including starting '(' and ending ')' // if exist! // AExtendedSyntax - must be True if modifier /m will be On while // using the r.e. // Useful for GUI editors of r.e. etc (You can find example of using // in TestRExp.dpr project) // Returns // 0 Success. No unbalanced brackets was found; // -1 There are not enough closing brackets ')'; // -(n+1) At position n was found opening '[' without //###0.942 // corresponding closing ']'; // n At position n was found closing bracket ')' without // corresponding opening '('. // If Result <> 0, then ASubExpr can contain empty items or illegal ones function RegExprSubExpressions(const ARegExpr: string; ASubExprs: TStrings; AExtendedSyntax: boolean{$IFDEF DefParam} = False{$ENDIF}): integer; implementation {$IFDEF FastUnicodeData} uses unicodedata; {$ENDIF} {$IFNDEF UNICODE} uses LazUTF8, LConvEncoding, uConvEncoding; {$ENDIF} const // TRegExpr.VersionMajor/Minor return values of these constants: REVersionMajor = 1; REVersionMinor = 153; OpKind_End = REChar(1); OpKind_MetaClass = REChar(2); OpKind_Range = REChar(3); OpKind_Char = REChar(4); OpKind_CategoryYes = REChar(5); OpKind_CategoryNo = REChar(6); RegExprAllSet = [0 .. 255]; RegExprWordSet = [Ord('a') .. Ord('z'), Ord('A') .. Ord('Z'), Ord('0') .. Ord('9'), Ord('_')]; RegExprDigitSet = [Ord('0') .. Ord('9')]; RegExprLowerAzSet = [Ord('a') .. Ord('z')]; RegExprUpperAzSet = [Ord('A') .. Ord('Z')]; RegExprAllAzSet = RegExprLowerAzSet + RegExprUpperAzSet; RegExprSpaceSet = [Ord(' '), $9, $A, $D, $C]; RegExprLineSeparatorsSet = [$d, $a, $b, $c] {$IFDEF UniCode} + [$85] {$ENDIF}; RegExprHorzSeparatorsSet = [9, $20, $A0]; MaxBracesArg = $7FFFFFFF - 1; // max value for {n,m} arguments //###0.933 type TRENextOff = PtrInt; // internal Next "pointer" (offset to current p-code) //###0.933 PRENextOff = ^TRENextOff; // used for extracting Next "pointers" from compiled r.e. //###0.933 TREBracesArg = integer; // type of {m,n} arguments PREBracesArg = ^TREBracesArg; TREGroupKind = ( gkNormalGroup, gkNonCapturingGroup, gkNamedGroupReference, gkComment, gkModifierString, gkLookahead, gkLookaheadNeg, gkLookbehind, gkLookbehindNeg, gkRecursion, gkSubCall ); const REOpSz = SizeOf(TREOp) div SizeOf(REChar); // size of OP_ command in REChars {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} // add space for aligning pointer // -1 is the correct max size but also needed for InsertOperator that needs a multiple of pointer size RENextOffSz = (2 * SizeOf(TRENextOff) div SizeOf(REChar)) - 1; REBracesArgSz = (2 * SizeOf(TREBracesArg) div SizeOf(REChar)); // add space for aligning pointer {$ELSE} RENextOffSz = (SizeOf(TRENextOff) div SizeOf(REChar)); // size of Next pointer in REChars REBracesArgSz = SizeOf(TREBracesArg) div SizeOf(REChar); // size of BRACES arguments in REChars {$ENDIF} RENumberSz = SizeOf(LongInt) div SizeOf(REChar); function IsPairedBreak(p: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} const cBreak = {$IFDEF Unicode} $000D000A; {$ELSE} $0D0A; {$ENDIF} type PtrPair = {$IFDEF Unicode} ^LongInt; {$ELSE} ^Word; {$ENDIF} begin Result := PtrPair(p)^ = cBreak; end; function _FindCharInBuffer(SBegin, SEnd: PRegExprChar; Ch: REChar): PRegExprChar; {$IFDEF InlineFuncs}inline;{$ENDIF} begin while SBegin < SEnd do begin if SBegin^ = Ch then begin Result := SBegin; Exit; end; Inc(SBegin); end; Result := nil; end; function IsIgnoredChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case AChar of ' ', #9, #$d, #$a: Result := True else Result := False; end; end; function _IsMetaChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case AChar of 'd', 'D', 's', 'S', 'w', 'W', 'v', 'V', 'h', 'H': Result := True else Result := False; end; end; function AlignToPtr(const p: Pointer): Pointer; {$IFDEF InlineFuncs}inline;{$ENDIF} begin {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} Result := Align(p, SizeOf(Pointer)); {$ELSE} Result := p; {$ENDIF} end; function AlignToInt(const p: Pointer): Pointer; {$IFDEF InlineFuncs}inline;{$ENDIF} begin {$IFDEF FPC_REQUIRES_PROPER_ALIGNMENT} Result := Align(p, SizeOf(integer)); {$ELSE} Result := p; {$ENDIF} end; function TRegExpr._UpperCase(Ch: REChar): REChar; begin Result := Ch; if (Ch >= 'a') and (Ch <= 'z') then begin Dec(Result, 32); Exit; end; if Ord(Ch) < 128 then Exit; {$IFDEF FPC} {$IFDEF UniCode} Result := UnicodeUpperCase(Ch)[1]; {$ELSE} Result := Chr(FUpperCase[Ord(Ch)]); {$ENDIF} {$ELSE} {$IFDEF UniCode} {$IFDEF D_XE4} Result := Ch.ToUpper; {$ELSE} {$IFDEF D2009} Result := TCharacter.ToUpper(Ch); {$ENDIF} {$ENDIF} {$ELSE} Result := AnsiUpperCase(Ch)[1]; {$ENDIF} {$ENDIF} end; function TRegExpr._LowerCase(Ch: REChar): REChar; begin Result := Ch; if (Ch >= 'A') and (Ch <= 'Z') then begin Inc(Result, 32); Exit; end; if Ord(Ch) < 128 then Exit; {$IFDEF FPC} {$IFDEF UniCode} Result := UnicodeLowerCase(Ch)[1]; {$ELSE} Result := Chr(FLowerCase[Ord(Ch)]); {$ENDIF} {$ELSE} {$IFDEF UniCode} {$IFDEF D_XE4} Result := Ch.ToLower; {$ELSE} {$IFDEF D2009} Result := TCharacter.ToLower(Ch); {$ENDIF} {$ENDIF} {$ELSE} Result := AnsiLowerCase(Ch)[1]; {$ENDIF} {$ENDIF} end; function TRegExpr.InvertCase(const Ch: REChar): REChar; {$IFDEF InlineFuncs}inline;{$ENDIF} begin Result := _UpperCase(Ch); if Result = Ch then Result := _LowerCase(Ch); end; function _FindClosingBracket(P, PEnd: PRegExprChar): PRegExprChar; var Level: integer; begin Result := nil; Level := 1; repeat if P >= PEnd then Exit; case P^ of EscChar: Inc(P); '(': begin Inc(Level); end; ')': begin Dec(Level); if Level = 0 then begin Result := P; Exit; end; end; end; Inc(P); until False; end; {$IFDEF UNICODEEX} procedure IncUnicode(var p: PRegExprChar); {$IFDEF InlineFuncs}inline;{$ENDIF} // make additional increment if we are on low-surrogate char // no need to check p<fInputEnd, at the end of string we have chr(0) var ch: REChar; begin Inc(p); ch := p^; if (Ord(ch) >= $DC00) and (Ord(ch) <= $DFFF) then Inc(p); end; procedure IncUnicode2(var p: PRegExprChar; var N: integer); {$IFDEF InlineFuncs}inline;{$ENDIF} var ch: REChar; begin Inc(p); Inc(N); ch := p^; if (Ord(ch) >= $DC00) and (Ord(ch) <= $DFFF) then begin Inc(p); Inc(N); end; end; {$ENDIF} { ============================================================= } { ===================== Global functions ====================== } { ============================================================= } function IsModifiersEqual(const A, B: TRegExprModifiers): boolean; begin Result := (A.I = B.I) and (A.G = B.G) and (A.M = B.M) and (A.S = B.S) and (A.R = B.R) and (A.X = B.X); end; function ParseModifiers(const APtr: PRegExprChar; ALen: integer; var AValue: TRegExprModifiers): boolean; // Parse string and set AValue if it's in format 'ismxrg-ismxrg' var IsOn: boolean; i: integer; begin Result := True; IsOn := True; for i := 0 to ALen-1 do case APtr[i] of '-': IsOn := False; 'I', 'i': AValue.I := IsOn; 'R', 'r': AValue.R := IsOn; 'S', 's': AValue.S := IsOn; 'G', 'g': AValue.G := IsOn; 'M', 'm': AValue.M := IsOn; 'X', 'x': AValue.X := IsOn; else begin Result := False; Exit; end; end; end; function ExecRegExpr(const ARegExpr, AInputStr: RegExprString): boolean; var r: TRegExpr; begin r := TRegExpr.Create; try r.Expression := ARegExpr; Result := r.Exec(AInputStr); finally r.Free; end; end; { of function ExecRegExpr -------------------------------------------------------------- } procedure SplitRegExpr(const ARegExpr, AInputStr: RegExprString; APieces: TStrings); var r: TRegExpr; begin APieces.Clear; r := TRegExpr.Create; try r.Expression := ARegExpr; r.Split(AInputStr, APieces); finally r.Free; end; end; { of procedure SplitRegExpr -------------------------------------------------------------- } function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; begin with TRegExpr.Create do try Expression := ARegExpr; Result := Replace(AInputStr, AReplaceStr, AUseSubstitution); finally Free; end; end; { of function ReplaceRegExpr -------------------------------------------------------------- } {$IFDEF OverMeth} function ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; Options: TRegexReplaceOptions): RegExprString; overload; begin with TRegExpr.Create do try ModifierI := (rroModifierI in Options); ModifierR := (rroModifierR in Options); ModifierS := (rroModifierS in Options); ModifierG := (rroModifierG in Options); ModifierM := (rroModifierM in Options); ModifierX := (rroModifierX in Options); // Set this after the above, if the regex contains modifiers, they will be applied. Expression := ARegExpr; if rroUseOsLineEnd in Options then ReplaceLineEnd := sLineBreak else ReplaceLineEnd := #10; Result := Replace(AInputStr, AReplaceStr, rroUseSubstitution in Options); finally Free; end; end; {$ENDIF} (* const MetaChars_Init = '^$.[()|?+*' + EscChar + '{'; MetaChars = MetaChars_Init; // not needed to be a variable, const is faster MetaAll = MetaChars_Init + ']}'; // Very similar to MetaChars, but slighly changed. *) function _IsMetaSymbol1(ch: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case ch of '^', '$', '.', '[', '(', ')', '|', '?', '+', '*', EscChar, '{': Result := True else Result := False end; end; function _IsMetaSymbol2(ch: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case ch of '^', '$', '.', '[', '(', ')', '|', '?', '+', '*', EscChar, '{', ']', '}': Result := True else Result := False end; end; function QuoteRegExprMetaChars(const AStr: RegExprString): RegExprString; var i, i0, Len: integer; ch: REChar; begin Result := ''; Len := Length(AStr); i := 1; i0 := i; while i <= Len do begin ch := AStr[i]; if _IsMetaSymbol2(ch) then begin Result := Result + System.Copy(AStr, i0, i - i0) + EscChar + ch; i0 := i + 1; end; Inc(i); end; Result := Result + System.Copy(AStr, i0, MaxInt); // Tail end; { of function QuoteRegExprMetaChars -------------------------------------------------------------- } function RegExprSubExpressions(const ARegExpr: string; ASubExprs: TStrings; AExtendedSyntax: boolean{$IFDEF DefParam} = False{$ENDIF}): integer; type TStackItemRec = record // ###0.945 SubExprIdx: integer; StartPos: PtrInt; end; TStackArray = packed array [0 .. RegexMaxMaxGroups - 1] of TStackItemRec; var Len, SubExprLen: integer; i, i0: integer; Modif: TRegExprModifiers; Stack: ^TStackArray; // ###0.945 StackIdx, StackSz: integer; begin Result := 0; // no unbalanced brackets found at this very moment FillChar(Modif, SizeOf(Modif), 0); ASubExprs.Clear; // I don't think that adding to non empty list // can be useful, so I simplified algorithm to work only with empty list Len := Length(ARegExpr); // some optimization tricks // first we have to calculate number of subexpression to reserve // space in Stack array (may be we'll reserve more than needed, but // it's faster then memory reallocation during parsing) StackSz := 1; // add 1 for entire r.e. for i := 1 to Len do if ARegExpr[i] = '(' then Inc(StackSz); // SetLength (Stack, StackSz); //###0.945 GetMem(Stack, SizeOf(TStackItemRec) * StackSz); try StackIdx := 0; i := 1; while (i <= Len) do begin case ARegExpr[i] of '(': begin if (i < Len) and (ARegExpr[i + 1] = '?') then begin // this is not subexpression, but comment or other // Perl extension. We must check is it (?ismxrg-ismxrg) // and change AExtendedSyntax if /x is changed. Inc(i, 2); // skip '(?' i0 := i; while (i <= Len) and (ARegExpr[i] <> ')') do Inc(i); if i > Len then Result := -1 // unbalansed '(' else if ParseModifiers(@ARegExpr[i0], i - i0, Modif) then // Alexey-T: original code had copy from i, not from i0 AExtendedSyntax := Modif.X; end else begin // subexpression starts ASubExprs.Add(''); // just reserve space with Stack[StackIdx] do begin SubExprIdx := ASubExprs.Count - 1; StartPos := i; end; Inc(StackIdx); end; end; ')': begin if StackIdx = 0 then Result := i // unbalanced ')' else begin Dec(StackIdx); with Stack[StackIdx] do begin SubExprLen := i - StartPos + 1; ASubExprs.Objects[SubExprIdx] := TObject(StartPos or (SubExprLen ShL 16)); ASubExprs[SubExprIdx] := System.Copy(ARegExpr, StartPos + 1, SubExprLen - 2); // add without brackets end; end; end; EscChar: Inc(i); // skip quoted symbol '[': begin // we have to skip character ranges at once, because they can // contain '#', and '#' in it must NOT be recognized as eXtended // comment beginning! i0 := i; Inc(i); if ARegExpr[i] = ']' // first ']' inside [] treated as simple char, no need to check '[' then Inc(i); while (i <= Len) and (ARegExpr[i] <> ']') do if ARegExpr[i] = EscChar // ###0.942 then Inc(i, 2) // skip 'escaped' char to prevent stopping at '\]' else Inc(i); if (i > Len) or (ARegExpr[i] <> ']') // ###0.942 then Result := -(i0 + 1); // unbalansed '[' //###0.942 end; '#': if AExtendedSyntax then begin // skip eXtended comments while (i <= Len) and (ARegExpr[i] <> #$d) and (ARegExpr[i] <> #$a) // do not use [#$d, #$a] due to UniCode compatibility do Inc(i); while (i + 1 <= Len) and ((ARegExpr[i + 1] = #$d) or (ARegExpr[i + 1] = #$a)) do Inc(i); // attempt to work with different kinds of line separators // now we are at the line separator that must be skipped. end; // here is no 'else' clause - we simply skip ordinary chars end; // of case Inc(i); // skip scanned char // ! can move after Len due to skipping quoted symbol end; // check brackets balance if StackIdx <> 0 then Result := -1; // unbalansed '(' // check if entire r.e. added if (ASubExprs.Count = 0) or ((PtrInt(ASubExprs.Objects[0]) and $FFFF) <> 1) or (((PtrInt(ASubExprs.Objects[0]) ShR 16) and $FFFF) <> Len) // whole r.e. wasn't added because it isn't bracketed // well, we add it now: then ASubExprs.InsertObject(0, ARegExpr, TObject((Len ShL 16) or 1)); finally FreeMem(Stack); end; end; { of function RegExprSubExpressions -------------------------------------------------------------- } const OP_MAGIC = TREOp(216); // programm signature // name opcode opnd? meaning OP_EEND = TREOp(0); // - End of program OP_BOL = TREOp(1); // - Match "" at beginning of line OP_EOL = TREOp(2); // - Match "" at end of line OP_ANY = TREOp(3); // - Match any one character OP_ANYOF = TREOp(4); // Str Match any character in string Str OP_ANYBUT = TREOp(5); // Str Match any char. not in string Str OP_BRANCH = TREOp(6); // Node Match this alternative, or the next OP_BACK = TREOp(7); // - Jump backward (Next < 0) OP_EXACTLY = TREOp(8); // Str Match string Str OP_NOTHING = TREOp(9); // - Match empty string OP_STAR = TREOp(10); // Node Match this (simple) thing 0 or more times OP_PLUS = TREOp(11); // Node Match this (simple) thing 1 or more times OP_ANYDIGIT = TREOp(12); // - Match any digit (equiv [0-9]) OP_NOTDIGIT = TREOp(13); // - Match not digit (equiv [0-9]) OP_ANYLETTER = TREOp(14); // - Match any letter from property WordChars OP_NOTLETTER = TREOp(15); // - Match not letter from property WordChars OP_ANYSPACE = TREOp(16); // - Match any space char (see property SpaceChars) OP_NOTSPACE = TREOp(17); // - Match not space char (see property SpaceChars) OP_BRACES = TREOp(18); // Node,Min,Max Match this (simple) thing from Min to Max times. // Min and Max are TREBracesArg OP_COMMENT = TREOp(19); // - Comment ;) OP_EXACTLYCI = TREOp(20); // Str Match string Str case insensitive OP_ANYOFCI = TREOp(21); // Str Match any character in string Str, case insensitive OP_ANYBUTCI = TREOp(22); // Str Match any char. not in string Str, case insensitive OP_LOOPENTRY = TREOp(23); // Node Start of loop (Node - LOOP for this loop) OP_LOOP = TREOp(24); // Node,Min,Max,LoopEntryJmp - back jump for LOOPENTRY. // Min and Max are TREBracesArg // Node - next node in sequence, // LoopEntryJmp - associated LOOPENTRY node addr OP_EOL2 = TReOp(25); // like OP_EOL but also matches before final line-break OP_BSUBEXP = TREOp(28); // Idx Match previously matched subexpression #Idx (stored as REChar) //###0.936 OP_BSUBEXPCI = TREOp(29); // Idx -"- in case-insensitive mode // Non-Greedy Style Ops //###0.940 OP_STARNG = TREOp(30); // Same as OP_START but in non-greedy mode OP_PLUSNG = TREOp(31); // Same as OP_PLUS but in non-greedy mode OP_BRACESNG = TREOp(32); // Same as OP_BRACES but in non-greedy mode OP_LOOPNG = TREOp(33); // Same as OP_LOOP but in non-greedy mode // Multiline mode \m OP_BOLML = TREOp(34); // - Match "" at beginning of line OP_EOLML = TREOp(35); // - Match "" at end of line OP_ANYML = TREOp(36); // - Match any one character // Word boundary OP_BOUND = TREOp(37); // Match "" between words //###0.943 OP_NOTBOUND = TREOp(38); // Match "" not between words //###0.943 OP_ANYHORZSEP = TREOp(39); // Any horizontal whitespace \h OP_NOTHORZSEP = TREOp(40); // Not horizontal whitespace \H OP_ANYVERTSEP = TREOp(41); // Any vertical whitespace \v OP_NOTVERTSEP = TREOp(42); // Not vertical whitespace \V OP_ANYCATEGORY = TREOp(43); // \p{L} OP_NOTCATEGORY = TREOp(44); // \P{L} OP_STAR_POSS = TReOp(45); OP_PLUS_POSS = TReOp(46); OP_BRACES_POSS = TReOp(47); OP_RECUR = TReOp(48); // !!! Change OP_OPEN value if you add new opcodes !!! OP_OPEN = TREOp(50); // Opening of group; OP_OPEN+i is for group i OP_OPEN_FIRST = Succ(OP_OPEN); OP_OPEN_LAST = TREOp(Ord(OP_OPEN) + RegexMaxGroups - 1); OP_CLOSE = Succ(OP_OPEN_LAST); // Closing of group; OP_CLOSE+i is for group i OP_CLOSE_FIRST = Succ(OP_CLOSE); OP_CLOSE_LAST = TReOp(Ord(OP_CLOSE) + RegexMaxGroups - 1); OP_SUBCALL = Succ(OP_CLOSE_LAST); // Call of subroutine; OP_SUBCALL+i is for group i OP_SUBCALL_FIRST = Succ(OP_SUBCALL); OP_SUBCALL_LAST = {$IFDEF Unicode} TReOp(Ord(OP_SUBCALL) + RegexMaxGroups - 1); {$ELSE} High(REChar); // must fit to 0..255 range {$ENDIF} // We work with p-code through pointers, compatible with PRegExprChar. // Note: all code components (TRENextOff, TREOp, TREBracesArg, etc) // must have lengths that can be divided by SizeOf (REChar) ! // A node is TREOp of opcode followed Next "pointer" of TRENextOff type. // The Next is a offset from the opcode of the node containing it. // An operand, if any, simply follows the node. (Note that much of // the code generation knows about this implicit relationship!) // Using TRENextOff=PtrInt speed up p-code processing. // Opcodes description: // // BRANCH The set of branches constituting a single choice are hooked // together with their "next" pointers, since precedence prevents // anything being concatenated to any individual branch. The // "next" pointer of the last BRANCH in a choice points to the // thing following the whole choice. This is also where the // final "next" pointer of each individual branch points; each // branch starts with the operand node of a BRANCH node. // BACK Normal "next" pointers all implicitly point forward; BACK // exists to make loop structures possible. // STAR,PLUS,BRACES '?', and complex '*' and '+', are implemented as // circular BRANCH structures using BACK. Complex '{min,max}' // - as pair LOOPENTRY-LOOP (see below). Simple cases (one // character per match) are implemented with STAR, PLUS and // BRACES for speed and to minimize recursive plunges. // LOOPENTRY,LOOP {min,max} are implemented as special pair // LOOPENTRY-LOOP. Each LOOPENTRY initialize loopstack for // current level. // OPEN,CLOSE are numbered at compile time. { ============================================================= } { ================== Error handling section =================== } { ============================================================= } const reeOk = 0; reeCompNullArgument = 100; reeUnknownMetaSymbol = 101; reeCompParseRegTooManyBrackets = 102; reeCompParseRegUnmatchedBrackets = 103; reeCompParseRegUnmatchedBrackets2 = 104; reeCompParseRegJunkOnEnd = 105; reePlusStarOperandCouldBeEmpty = 106; reeNestedQuantif = 107; reeBadHexDigit = 108; reeInvalidRange = 109; reeParseAtomTrailingBackSlash = 110; reeNoHexCodeAfterBSlashX = 111; reeHexCodeAfterBSlashXTooBig = 112; reeUnmatchedSqBrackets = 113; reeInternalUrp = 114; reeQuantifFollowsNothing = 115; reeTrailingBackSlash = 116; reeNoLetterAfterBSlashC = 117; reeMetaCharAfterMinusInRange = 118; reeRarseAtomInternalDisaster = 119; reeIncorrectSpecialBrackets = 120; reeIncorrectBraces = 121; reeBRACESArgTooBig = 122; reeUnknownOpcodeInFillFirst = 123; reeBracesMinParamGreaterMax = 124; reeUnclosedComment = 125; reeComplexBracesNotImplemented = 126; reeUnrecognizedModifier = 127; reeBadLinePairedSeparator = 128; reeBadUnicodeCategory = 129; reeTooSmallCheckersArray = 130; reePossessiveAfterComplexBraces = 131; reeBadRecursion = 132; reeBadSubCall = 133; reeNamedGroupBad = 140; reeNamedGroupBadName = 141; reeNamedGroupBadRef = 142; reeNamedGroupDupName = 143; reeLookaheadBad = 150; reeLookbehindBad = 152; reeLookbehindTooComplex = 153; reeLookaroundNotAtEdge = 154; // Runtime errors must be >= reeFirstRuntimeCode reeFirstRuntimeCode = 1000; reeRegRepeatCalledInappropriately = 1000; reeMatchPrimMemoryCorruption = 1001; reeMatchPrimCorruptedPointers = 1002; reeNoExpression = 1003; reeCorruptedProgram = 1004; reeOffsetMustBePositive = 1006; reeExecNextWithoutExec = 1007; reeBadOpcodeInCharClass = 1008; reeDumpCorruptedOpcode = 1011; reeModifierUnsupported = 1013; reeLoopStackExceeded = 1014; reeLoopWithoutEntry = 1015; function TRegExpr.ErrorMsg(AErrorID: integer): RegExprString; begin case AErrorID of reeOk: Result := 'No errors'; reeCompNullArgument: Result := 'TRegExpr compile: null argument'; reeUnknownMetaSymbol: Result := 'TRegExpr compile: unknown meta-character: \' + fLastErrorSymbol; reeCompParseRegTooManyBrackets: Result := 'TRegExpr compile: ParseReg: too many ()'; reeCompParseRegUnmatchedBrackets: Result := 'TRegExpr compile: ParseReg: unmatched ()'; reeCompParseRegUnmatchedBrackets2: Result := 'TRegExpr compile: ParseReg: unmatched ()'; reeCompParseRegJunkOnEnd: Result := 'TRegExpr compile: ParseReg: junk at end'; reePlusStarOperandCouldBeEmpty: Result := 'TRegExpr compile: *+ operand could be empty'; reeNestedQuantif: Result := 'TRegExpr compile: nested quantifier *?+'; reeBadHexDigit: Result := 'TRegExpr compile: bad hex digit'; reeInvalidRange: Result := 'TRegExpr compile: invalid [] range'; reeParseAtomTrailingBackSlash: Result := 'TRegExpr compile: parse atom trailing \'; reeNoHexCodeAfterBSlashX: Result := 'TRegExpr compile: no hex code after \x'; reeNoLetterAfterBSlashC: Result := 'TRegExpr compile: no letter "A".."Z" after \c'; reeMetaCharAfterMinusInRange: Result := 'TRegExpr compile: metachar after "-" in [] range'; reeHexCodeAfterBSlashXTooBig: Result := 'TRegExpr compile: hex code after \x is too big'; reeUnmatchedSqBrackets: Result := 'TRegExpr compile: unmatched []'; reeInternalUrp: Result := 'TRegExpr compile: internal fail on char "|", ")"'; reeQuantifFollowsNothing: Result := 'TRegExpr compile: quantifier ?+*{ follows nothing'; reeTrailingBackSlash: Result := 'TRegExpr compile: trailing \'; reeRarseAtomInternalDisaster: Result := 'TRegExpr compile: RarseAtom internal disaster'; reeIncorrectSpecialBrackets: Result := 'TRegExpr compile: incorrect expression in (?...) brackets'; reeIncorrectBraces: Result := 'TRegExpr compile: incorrect {} braces'; reeBRACESArgTooBig: Result := 'TRegExpr compile: braces {} argument too big'; reeUnknownOpcodeInFillFirst: Result := 'TRegExpr compile: unknown opcode in FillFirstCharSet ('+DumpOp(fLastErrorOpcode)+')'; reeBracesMinParamGreaterMax: Result := 'TRegExpr compile: braces {} min param greater then max'; reeUnclosedComment: Result := 'TRegExpr compile: unclosed (?#comment)'; reeComplexBracesNotImplemented: Result := 'TRegExpr compile: if you use braces {} and non-greedy ops *?, +?, ?? for complex cases, enable {$DEFINE ComplexBraces}'; reeUnrecognizedModifier: Result := 'TRegExpr compile: incorrect modifier in (?...)'; reeBadLinePairedSeparator: Result := 'TRegExpr compile: LinePairedSeparator must countain two different chars or be empty'; reeBadUnicodeCategory: Result := 'TRegExpr compile: invalid category after \p or \P'; reeTooSmallCheckersArray: Result := 'TRegExpr compile: too small CharCheckers array'; reePossessiveAfterComplexBraces: Result := 'TRegExpr compile: possessive + after complex braces: (foo){n,m}+'; reeBadRecursion: Result := 'TRegExpr compile: bad recursion (?R)'; reeBadSubCall: Result := 'TRegExpr compile: bad subroutine call'; reeNamedGroupBad: Result := 'TRegExpr compile: bad named group'; reeNamedGroupBadName: Result := 'TRegExpr compile: bad identifier in named group'; reeNamedGroupBadRef: Result := 'TRegExpr compile: bad back-reference to named group'; reeNamedGroupDupName: Result := 'TRegExpr compile: named group defined more than once'; reeLookaheadBad: Result := 'TRegExpr compile: bad lookahead'; reeLookbehindBad: Result := 'TRegExpr compile: bad lookbehind'; reeLookbehindTooComplex: Result := 'TRegExpr compile: lookbehind (?<!foo) must have fixed length'; reeLookaroundNotAtEdge: Result := 'TRegExpr compile: lookaround brackets must be at the very beginning/ending'; reeRegRepeatCalledInappropriately: Result := 'TRegExpr exec: RegRepeat called inappropriately'; reeMatchPrimMemoryCorruption: Result := 'TRegExpr exec: MatchPrim memory corruption'; reeMatchPrimCorruptedPointers: Result := 'TRegExpr exec: MatchPrim corrupted pointers'; reeNoExpression: Result := 'TRegExpr exec: empty expression'; reeCorruptedProgram: Result := 'TRegExpr exec: corrupted opcode (no magic byte)'; reeOffsetMustBePositive: Result := 'TRegExpr exec: offset must be >0'; reeExecNextWithoutExec: Result := 'TRegExpr exec: ExecNext without Exec(Pos)'; reeBadOpcodeInCharClass: Result := 'TRegExpr exec: invalid opcode in char class'; reeDumpCorruptedOpcode: Result := 'TRegExpr dump: corrupted opcode'; reeLoopStackExceeded: Result := 'TRegExpr exec: loop stack exceeded'; reeLoopWithoutEntry: Result := 'TRegExpr exec: loop without loop entry'; else Result := 'Unknown error'; end; end; { of procedure TRegExpr.Error -------------------------------------------------------------- } function TRegExpr.LastError: integer; begin Result := fLastError; fLastError := reeOk; end; { of function TRegExpr.LastError -------------------------------------------------------------- } { ============================================================= } { ===================== Common section ======================== } { ============================================================= } class function TRegExpr.VersionMajor: integer; begin Result := REVersionMajor; end; class function TRegExpr.VersionMinor: integer; begin Result := REVersionMinor; end; constructor TRegExpr.Create; begin inherited; programm := nil; fExpression := ''; fInputString := ''; FillChar(fModifiers, SizeOf(fModifiers), 0); fModifiers.I := RegExprModifierI; fModifiers.R := RegExprModifierR; fModifiers.S := RegExprModifierS; fModifiers.G := RegExprModifierG; fModifiers.M := RegExprModifierM; fModifiers.X := RegExprModifierX; {$IFDEF UseSpaceChars} SpaceChars := RegExprSpaceChars; {$ENDIF} {$IFDEF UseWordChars} WordChars := RegExprWordChars; {$ENDIF} {$IFDEF UseLineSep} fLineSeparators := RegExprLineSeparators; {$ENDIF} fUsePairedBreak := RegExprUsePairedBreak; fReplaceLineEnd := RegExprReplaceLineBreak; fSlowChecksSizeMax := 2000; {$IFDEF UseLineSep} InitLineSepArray; {$ENDIF} InitCharCheckers; end; { of constructor TRegExpr.Create -------------------------------------------------------------- } {$IFDEF UNICODE} constructor TRegExpr.Create(const AExpression : RegExprString); begin Create; Expression := AExpression; end; {$ELSE} type TUTF8ChangeCase = function(const AInStr: String; ALanguage: String = ''): String; function InitRecodeTable(const Encoding: String; AChangeCase: TUTF8ChangeCase): TRecodeTable; var I: Byte; C: String; begin for I:= 0 to 255 do begin C:= ConvertEncoding(Chr(I), Encoding, EncodingUTF8); C:= AChangeCase(C); C:= ConvertEncoding(C, EncodingUTF8, Encoding); if Length(C) > 0 then Result[I]:= Ord(C[1]); end; end; procedure TRegExpr.ChangeEncoding(const AEncoding: String); begin FLowerCase:= InitRecodeTable(AEncoding, @UTF8LowerCase); FUpperCase:= InitRecodeTable(AEncoding, @UTF8UpperCase); end; constructor TRegExpr.Create(const AEncoding: String); begin Create; ChangeEncoding(AEncoding); end; {$ENDIF} destructor TRegExpr.Destroy; begin if programm <> nil then begin FreeMem(programm); programm := nil; end; if Assigned(fHelper) then FreeAndNil(fHelper); end; procedure TRegExpr.SetExpression(const AStr: RegExprString); begin if (AStr <> fExpression) or not IsCompiled then begin fExpression := AStr; UniqueString(fExpression); fRegexStart := PRegExprChar(fExpression); fRegexEnd := fRegexStart + Length(fExpression); InvalidateProgramm; end; end; { of procedure TRegExpr.SetExpression -------------------------------------------------------------- } function TRegExpr.GetSubExprCount: integer; begin // if nothing found, we must return -1 per TRegExpr docs if GrpStart[0] = nil then Result := -1 else Result := GrpCount; end; function TRegExpr.GetMatchPos(Idx: integer): PtrInt; begin Idx := GrpIndexes[Idx]; if (Idx >= 0) and (GrpStart[Idx] <> nil) then Result := GrpStart[Idx] - fInputStart + 1 else Result := -1; end; { of function TRegExpr.GetMatchPos -------------------------------------------------------------- } function TRegExpr.GetMatchLen(Idx: integer): PtrInt; begin Idx := GrpIndexes[Idx]; if (Idx >= 0) and (GrpStart[Idx] <> nil) then Result := GrpEnd[Idx] - GrpStart[Idx] else Result := -1; end; { of function TRegExpr.GetMatchLen -------------------------------------------------------------- } function TRegExpr.GetMatch(Idx: integer): RegExprString; begin Result := ''; Idx := GrpIndexes[Idx]; if (Idx >= 0) and (GrpEnd[Idx] > GrpStart[Idx]) then SetString(Result, GrpStart[Idx], GrpEnd[Idx] - GrpStart[Idx]); end; { of function TRegExpr.GetMatch -------------------------------------------------------------- } function TRegExpr.MatchIndexFromName(const AName: RegExprString): integer; var i: integer; begin for i := 1 {not 0} to GrpCount do if GrpNames[i] = AName then begin Result := i; Exit; end; Result := -1; end; function TRegExpr.MatchFromName(const AName: RegExprString): RegExprString; var Idx: integer; begin Idx := MatchIndexFromName(AName); if Idx >= 0 then Result := GetMatch(Idx) else Result := ''; end; function TRegExpr.ExecRegExpr(const ARegExpr, AInputStr: RegExprString): Boolean; begin Self.Expression:= ARegExpr; Result:= Self.Exec(AInputStr); end; function TRegExpr.ReplaceRegExpr(const ARegExpr, AInputStr, AReplaceStr: RegExprString; AUseSubstitution: Boolean): RegExprString; begin Self.Expression:= ARegExpr; Result:= Self.Replace(AInputStr, AReplaceStr, AUseSubstitution); end; function TRegExpr.GetModifierStr: RegExprString; begin Result := '-'; if ModifierI then Result := 'i' + Result else Result := Result + 'i'; if ModifierR then Result := 'r' + Result else Result := Result + 'r'; if ModifierS then Result := 's' + Result else Result := Result + 's'; if ModifierG then Result := 'g' + Result else Result := Result + 'g'; if ModifierM then Result := 'm' + Result else Result := Result + 'm'; if ModifierX then Result := 'x' + Result else Result := Result + 'x'; if Result[Length(Result)] = '-' // remove '-' if all modifiers are 'On' then System.Delete(Result, Length(Result), 1); end; { of function TRegExpr.GetModifierStr -------------------------------------------------------------- } procedure TRegExpr.SetModifierG(AValue: boolean); begin if fModifiers.G <> AValue then begin fModifiers.G := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierI(AValue: boolean); begin if fModifiers.I <> AValue then begin fModifiers.I := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierM(AValue: boolean); begin if fModifiers.M <> AValue then begin fModifiers.M := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierR(AValue: boolean); begin if fModifiers.R <> AValue then begin fModifiers.R := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierS(AValue: boolean); begin if fModifiers.S <> AValue then begin fModifiers.S := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierX(AValue: boolean); begin if fModifiers.X <> AValue then begin fModifiers.X := AValue; InvalidateProgramm; end; end; procedure TRegExpr.SetModifierStr(const AStr: RegExprString); begin if ParseModifiers(PRegExprChar(AStr), Length(AStr), fModifiers) then InvalidateProgramm else Error(reeModifierUnsupported); end; { ============================================================= } { ==================== Compiler section ======================= } { ============================================================= } {$IFDEF FastUnicodeData} function TRegExpr.IsWordChar(AChar: REChar): boolean; var NType: Byte; begin if AChar = '_' then Exit(True); if Ord(AChar) >= LOW_SURROGATE_BEGIN then Exit(False); NType := GetProps(Ord(AChar))^.Category; Result := (NType <= UGC_OtherNumber); end; (* // Unicode General Category UGC_UppercaseLetter = 0; Lu UGC_LowercaseLetter = 1; Ll UGC_TitlecaseLetter = 2; Lt UGC_ModifierLetter = 3; Lm UGC_OtherLetter = 4; Lo UGC_NonSpacingMark = 5; Mn UGC_CombiningMark = 6; Mc UGC_EnclosingMark = 7; Me UGC_DecimalNumber = 8; Nd UGC_LetterNumber = 9; Nl UGC_OtherNumber = 10; No UGC_ConnectPunctuation = 11; Pc UGC_DashPunctuation = 12; Pd UGC_OpenPunctuation = 13; Ps UGC_ClosePunctuation = 14; Pe UGC_InitialPunctuation = 15; Pi UGC_FinalPunctuation = 16; Pf UGC_OtherPunctuation = 17; Po UGC_MathSymbol = 18; Sm UGC_CurrencySymbol = 19; Sc UGC_ModifierSymbol = 20; Sk UGC_OtherSymbol = 21; So UGC_SpaceSeparator = 22; Zs UGC_LineSeparator = 23; Zl UGC_ParagraphSeparator = 24; Zp UGC_Control = 25; Cc UGC_Format = 26; Cf UGC_Surrogate = 27; Cs UGC_PrivateUse = 28; Co UGC_Unassigned = 29; Cn *) const CategoryNames: array[0..29] of array[0..1] of REChar = ( ('L', 'u'), ('L', 'l'), ('L', 't'), ('L', 'm'), ('L', 'o'), ('M', 'n'), ('M', 'c'), ('M', 'e'), ('N', 'd'), ('N', 'l'), ('N', 'o'), ('P', 'c'), ('P', 'd'), ('P', 's'), ('P', 'e'), ('P', 'i'), ('P', 'f'), ('P', 'o'), ('S', 'm'), ('S', 'c'), ('S', 'k'), ('S', 'o'), ('Z', 's'), ('Z', 'l'), ('Z', 'p'), ('C', 'c'), ('C', 'f'), ('C', 's'), ('C', 'o'), ('C', 'n') ); function IsCategoryFirstChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case AChar of 'L', 'M', 'N', 'P', 'S', 'C', 'Z': Result := True; else Result := False; end; end; function IsCategoryChars(AChar, AChar2: REChar): boolean; var i: integer; begin for i := Low(CategoryNames) to High(CategoryNames) do if (AChar = CategoryNames[i][0]) then if (AChar2 = CategoryNames[i][1]) then begin Result := True; Exit end; Result := False; end; function CheckCharCategory(AChar: REChar; Ch0, Ch1: REChar): boolean; // AChar: check this char against opcode // Ch0, Ch1: opcode operands after OP_*CATEGORY var N: byte; Name0, Name1: REChar; begin Result := False; N := GetProps(Ord(AChar))^.Category; if N <= High(CategoryNames) then begin Name0 := CategoryNames[N][0]; Name1 := CategoryNames[N][1]; if Ch0 <> Name0 then Exit; if Ch1 <> #0 then if Ch1 <> Name1 then Exit; Result := True; end; end; function MatchOneCharCategory(opnd, scan: PRegExprChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} // opnd: points to opcode operands after OP_*CATEGORY // scan: points into InputString begin Result := CheckCharCategory(scan^, opnd^, (opnd + 1)^); end; {$ELSE} function TRegExpr.IsWordChar(AChar: REChar): boolean; begin {$IFDEF UseWordChars} Result := Pos(AChar, fWordChars) > 0; {$ELSE} case AChar of 'a' .. 'z', 'A' .. 'Z', '0' .. '9', '_': Result := True else Result := False; end; {$ENDIF} end; {$ENDIF} function TRegExpr.IsSpaceChar(AChar: REChar): boolean; begin {$IFDEF UseSpaceChars} Result := Pos(AChar, fSpaceChars) > 0; {$ELSE} case AChar of ' ', #$9, #$A, #$D, #$C: Result := True else Result := False; end; {$ENDIF} end; function TRegExpr.IsCustomLineSeparator(AChar: REChar): boolean; begin {$IFDEF UseLineSep} {$IFDEF UniCode} Result := Pos(AChar, fLineSeparators) > 0; {$ELSE} Result := fLineSepArray[byte(AChar)]; {$ENDIF} {$ELSE} case AChar of #$d, #$a, {$IFDEF UniCode} #$85, #$2028, #$2029, {$ENDIF} #$b, #$c: Result := True; else Result := False; end; {$ENDIF} end; function IsDigitChar(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case AChar of '0' .. '9': Result := True; else Result := False; end; end; function IsHorzSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin // Tab and Unicode categoty "Space Separator": https://www.compart.com/en/unicode/category/Zs case AChar of #9, #$20, #$A0: Result := True; {$IFDEF UniCode} #$1680, #$2000 .. #$200A, #$202F, #$205F, #$3000: Result := True; {$ENDIF} else Result := False; end; end; function IsVertLineSeparator(AChar: REChar): boolean; {$IFDEF InlineFuncs}inline;{$ENDIF} begin case AChar of #$d, #$a, #$b, #$c: Result := True; {$IFDEF UniCode} #$2028, #$2029, #$85: Result := True; {$ENDIF} else Result := False; end; end; procedure TRegExpr.InvalidateProgramm; begin if programm <> nil then begin FreeMem(programm); programm := nil; end; end; { of procedure TRegExpr.InvalidateProgramm -------------------------------------------------------------- } procedure TRegExpr.Compile; begin if fExpression = '' then begin Error(reeNoExpression); Exit; end; CompileRegExpr(fRegexStart); end; { of procedure TRegExpr.Compile -------------------------------------------------------------- } {$IFDEF UseLineSep} procedure TRegExpr.InitLineSepArray; {$IFNDEF UniCode} var i: integer; {$ENDIF} begin {$IFNDEF UniCode} FillChar(fLineSepArray, SizeOf(fLineSepArray), 0); for i := 1 to Length(fLineSeparators) do fLineSepArray[byte(fLineSeparators[i])] := True; {$ENDIF} end; {$ENDIF} function TRegExpr.IsProgrammOk: boolean; begin Result := False; // check modifiers if not IsModifiersEqual(fModifiers, fProgModifiers) then InvalidateProgramm; // compile if needed if programm = nil then begin Compile; // Check compiled programm if programm = nil then Exit; end; if programm[0] <> OP_MAGIC then Error(reeCorruptedProgram) else Result := True; end; { of function TRegExpr.IsProgrammOk -------------------------------------------------------------- } procedure TRegExpr.Tail(p: PRegExprChar; val: PRegExprChar); // set the next-pointer at the end of a node chain var scan: PRegExprChar; temp: PRegExprChar; begin if p = @regDummy then Exit; // Find last node. scan := p; repeat temp := regNext(scan); if temp = nil then Break; scan := temp; until False; // Set Next 'pointer' if val < scan then PRENextOff(AlignToPtr(scan + REOpSz))^ := -(scan - val) // ###0.948 // work around PWideChar subtraction bug (Delphi uses // shr after subtraction to calculate widechar distance %-( ) // so, if difference is negative we have .. the "feature" :( // I could wrap it in $IFDEF UniCode, but I didn't because // "P – Q computes the difference between the address given // by P (the higher address) and the address given by Q (the // lower address)" - Delphi help quotation. else PRENextOff(AlignToPtr(scan + REOpSz))^ := val - scan; // ###0.933 end; { of procedure TRegExpr.Tail -------------------------------------------------------------- } procedure TRegExpr.OpTail(p: PRegExprChar; val: PRegExprChar); // regtail on operand of first argument; nop if operandless begin // "Operandless" and "op != OP_BRANCH" are synonymous in practice. if (p = nil) or (p = @regDummy) or (PREOp(p)^ <> OP_BRANCH) then Exit; Tail(p + REOpSz + RENextOffSz, val); // ###0.933 end; { of procedure TRegExpr.OpTail -------------------------------------------------------------- } function TRegExpr.EmitNode(op: TREOp): PRegExprChar; // ###0.933 // emit a node, return location begin Result := regCode; if Result <> @regDummy then begin PREOp(regCode)^ := op; Inc(regCode, REOpSz); PRENextOff(AlignToPtr(regCode))^ := 0; // Next "pointer" := nil Inc(regCode, RENextOffSz); if (op = OP_EXACTLY) or (op = OP_EXACTLYCI) then regExactlyLen := PLongInt(regCode) else regExactlyLen := nil; {$IFDEF DebugSynRegExpr} if regcode - programm > regsize then raise Exception.Create('TRegExpr.EmitNode buffer overrun'); {$ENDIF} end else Inc(regCodeSize, REOpSz + RENextOffSz); // compute code size without code generation end; { of function TRegExpr.EmitNode -------------------------------------------------------------- } procedure TRegExpr.EmitC(ch: REChar); begin if regCode <> @regDummy then begin regCode^ := ch; Inc(regCode); {$IFDEF DebugSynRegExpr} if regcode - programm > regsize then raise Exception.Create('TRegExpr.EmitC buffer overrun'); {$ENDIF} end else Inc(regCodeSize, REOpSz); // Type of p-code pointer always is ^REChar end; { of procedure TRegExpr.EmitC -------------------------------------------------------------- } procedure TRegExpr.EmitInt(AValue: LongInt); begin if regCode <> @regDummy then begin PLongInt(regCode)^ := AValue; Inc(regCode, RENumberSz); {$IFDEF DebugSynRegExpr} if regcode - programm > regsize then raise Exception.Create('TRegExpr.EmitInt buffer overrun'); {$ENDIF} end else Inc(regCodeSize, RENumberSz); end; function TRegExpr.EmitGroupRef(AIndex: integer; AIgnoreCase: boolean): PRegExprChar; begin if AIgnoreCase then Result := EmitNode(OP_BSUBEXPCI) else Result := EmitNode(OP_BSUBEXP); EmitC(REChar(AIndex)); end; {$IFDEF FastUnicodeData} procedure TRegExpr.FindCategoryName(var scan: PRegExprChar; var ch1, ch2: REChar); // scan: points into regex string after '\p', to find category name // ch1, ch2: 2-char name of category; ch2 can be #0 var ch: REChar; pos1, pos2, namePtr: PRegExprChar; nameLen: integer; begin ch1 := #0; ch2 := #0; ch := scan^; if IsCategoryFirstChar(ch) then begin ch1 := ch; Exit; end; if ch = '{' then begin pos1 := scan; pos2 := pos1; while (pos2 < fRegexEnd) and (pos2^ <> '}') do Inc(pos2); if pos2 >= fRegexEnd then Error(reeIncorrectBraces); namePtr := pos1+1; nameLen := pos2-pos1-1; Inc(scan, nameLen+1); if nameLen<1 then Error(reeBadUnicodeCategory); if nameLen>2 then Error(reeBadUnicodeCategory); if nameLen = 1 then begin ch1 := namePtr^; ch2 := #0; if not IsCategoryFirstChar(ch1) then Error(reeBadUnicodeCategory); Exit; end; if nameLen = 2 then begin ch1 := namePtr^; ch2 := (namePtr+1)^; if not IsCategoryChars(ch1, ch2) then Error(reeBadUnicodeCategory); Exit; end; end else Error(reeBadUnicodeCategory); end; function TRegExpr.EmitCategoryMain(APositive: boolean): PRegExprChar; var ch, ch2: REChar; begin Inc(regParse); if regParse >= fRegexEnd then Error(reeBadUnicodeCategory); FindCategoryName(regParse, ch, ch2); if APositive then Result := EmitNode(OP_ANYCATEGORY) else Result := EmitNode(OP_NOTCATEGORY); EmitC(ch); EmitC(ch2); end; {$ENDIF} procedure TRegExpr.InsertOperator(op: TREOp; opnd: PRegExprChar; sz: integer); // insert an operator in front of already-emitted operand // Means relocating the operand. var src, dst, place: PRegExprChar; i: integer; begin if regCode = @regDummy then begin Inc(regCodeSize, sz); Exit; end; // move code behind insert position src := regCode; Inc(regCode, sz); {$IFDEF DebugSynRegExpr} if regCode - programm > regCodeSize then raise Exception.Create('TRegExpr.InsertOperator buffer overrun'); // if (opnd<regCode) or (opnd-regCode>regCodeSize) then // raise Exception.Create('TRegExpr.InsertOperator invalid opnd'); {$ENDIF} dst := regCode; while src > opnd do begin Dec(dst); Dec(src); dst^ := src^; end; place := opnd; // Op node, where operand used to be. PREOp(place)^ := op; Inc(place, REOpSz); for i := 1 + REOpSz to sz do begin place^ := #0; Inc(place); end; end; { of procedure TRegExpr.InsertOperator -------------------------------------------------------------- } function FindSkippedMetaLen(PStart, PEnd: PRegExprChar): integer; {$IFDEF InlineFuncs}inline;{$ENDIF} // find length of initial segment of PStart string consisting // entirely of characters not from IsMetaSymbol1. begin Result := 0; while PStart < PEnd do begin if _IsMetaSymbol1(PStart^) then Exit; Inc(Result); Inc(PStart) end; end; const // Flags to be passed up and down. FLAG_WORST = 0; // Worst case FLAG_HASWIDTH = 1; // Cannot match empty string FLAG_SIMPLE = 2; // Simple enough to be OP_STAR/OP_PLUS/OP_BRACES operand FLAG_SPECSTART = 4; // Starts with * or + {$IFDEF UniCode} RusRangeLoLow = #$430; // 'а' RusRangeLoHigh = #$44F; // 'я' RusRangeHiLow = #$410; // 'А' RusRangeHiHigh = #$42F; // 'Я' {$ELSE} RusRangeLoLow = #$E0; // 'а' in cp1251 RusRangeLoHigh = #$FF; // 'я' in cp1251 RusRangeHiLow = #$C0; // 'А' in cp1251 RusRangeHiHigh = #$DF; // 'Я' in cp1251 {$ENDIF} function TRegExpr.FindInCharClass(ABuffer: PRegExprChar; AChar: REChar; AIgnoreCase: boolean): boolean; // Buffer contains char pairs: (Kind, Data), where Kind is one of OpKind_ values, // and Data depends on Kind var OpKind: REChar; ch, ch2: REChar; N, i: integer; begin if AIgnoreCase then AChar := _UpperCase(AChar); repeat OpKind := ABuffer^; case OpKind of OpKind_End: begin Result := False; Exit; end; OpKind_Range: begin Inc(ABuffer); ch := ABuffer^; Inc(ABuffer); ch2 := ABuffer^; Inc(ABuffer); { // if AIgnoreCase, ch, ch2 are upcased in opcode if AIgnoreCase then begin ch := _UpperCase(ch); ch2 := _UpperCase(ch2); end; } if (AChar >= ch) and (AChar <= ch2) then begin Result := True; Exit; end; end; OpKind_MetaClass: begin Inc(ABuffer); N := Ord(ABuffer^); Inc(ABuffer); if CharCheckers[N](AChar) then begin Result := True; Exit end; end; OpKind_Char: begin Inc(ABuffer); N := PLongInt(ABuffer)^; Inc(ABuffer, RENumberSz); for i := 1 to N do begin ch := ABuffer^; Inc(ABuffer); { // already upcased in opcode if AIgnoreCase then ch := _UpperCase(ch); } if ch = AChar then begin Result := True; Exit; end; end; end; {$IFDEF FastUnicodeData} OpKind_CategoryYes, OpKind_CategoryNo: begin Inc(ABuffer); ch := ABuffer^; Inc(ABuffer); ch2 := ABuffer^; Inc(ABuffer); Result := CheckCharCategory(AChar, ch, ch2); if OpKind = OpKind_CategoryNo then Result := not Result; if Result then Exit; end; {$ENDIF} else Error(reeBadOpcodeInCharClass); end; until False; // assume that Buffer is ended correctly end; procedure TRegExpr.GetCharSetFromWordChars(var ARes: TRegExprCharSet); {$IFDEF UseWordChars} var i: integer; ch: REChar; {$ENDIF} begin {$IFDEF UseWordChars} ARes := []; for i := 1 to Length(fWordChars) do begin ch := fWordChars[i]; {$IFDEF UniCode} if Ord(ch) <= $FF then {$ENDIF} Include(ARes, byte(ch)); end; {$ELSE} ARes := RegExprWordSet; {$ENDIF} end; procedure TRegExpr.GetCharSetFromSpaceChars(var ARes: TRegExprCharset); {$IFDEF UseSpaceChars} var i: integer; ch: REChar; {$ENDIF} begin {$IFDEF UseSpaceChars} ARes := []; for i := 1 to Length(fSpaceChars) do begin ch := fSpaceChars[i]; {$IFDEF UniCode} if Ord(ch) <= $FF then {$ENDIF} Include(ARes, byte(ch)); end; {$ELSE} ARes := RegExprSpaceSet; {$ENDIF} end; procedure TRegExpr.GetCharSetFromCharClass(ABuffer: PRegExprChar; AIgnoreCase: boolean; var ARes: TRegExprCharset); var ch, ch2: REChar; TempSet: TRegExprCharSet; N, i: integer; begin ARes := []; TempSet := []; repeat case ABuffer^ of OpKind_End: Exit; OpKind_Range: begin Inc(ABuffer); ch := ABuffer^; Inc(ABuffer); ch2 := ABuffer^; Inc(ABuffer); for i := Ord(ch) to {$IFDEF UniCode} Min(Ord(ch2), $FF) {$ELSE} Ord(ch2) {$ENDIF} do begin Include(ARes, byte(i)); if AIgnoreCase then Include(ARes, byte(InvertCase(REChar(i)))); end; end; OpKind_MetaClass: begin Inc(ABuffer); N := Ord(ABuffer^); Inc(ABuffer); if N = CheckerIndex_Word then begin GetCharSetFromWordChars(TempSet); ARes := ARes + TempSet; end else if N = CheckerIndex_NotWord then begin GetCharSetFromWordChars(TempSet); ARes := ARes + (RegExprAllSet - TempSet); end else if N = CheckerIndex_Space then begin GetCharSetFromSpaceChars(TempSet); ARes := ARes + TempSet; end else if N = CheckerIndex_NotSpace then begin GetCharSetFromSpaceChars(TempSet); ARes := ARes + (RegExprAllSet - TempSet); end else if N = CheckerIndex_Digit then ARes := ARes + RegExprDigitSet else if N = CheckerIndex_NotDigit then ARes := ARes + (RegExprAllSet - RegExprDigitSet) else if N = CheckerIndex_VertSep then ARes := ARes + RegExprLineSeparatorsSet else if N = CheckerIndex_NotVertSep then ARes := ARes + (RegExprAllSet - RegExprLineSeparatorsSet) else if N = CheckerIndex_HorzSep then ARes := ARes + RegExprHorzSeparatorsSet else if N = CheckerIndex_NotHorzSep then ARes := ARes + (RegExprAllSet - RegExprHorzSeparatorsSet) else if N = CheckerIndex_LowerAZ then begin if AIgnoreCase then ARes := ARes + RegExprAllAzSet else ARes := ARes + RegExprLowerAzSet; end else if N = CheckerIndex_UpperAZ then begin if AIgnoreCase then ARes := ARes + RegExprAllAzSet else ARes := ARes + RegExprUpperAzSet; end else Error(reeBadOpcodeInCharClass); end; OpKind_Char: begin Inc(ABuffer); N := PLongInt(ABuffer)^; Inc(ABuffer, RENumberSz); for i := 1 to N do begin ch := ABuffer^; Inc(ABuffer); {$IFDEF UniCode} if Ord(ch) <= $FF then {$ENDIF} begin Include(ARes, byte(ch)); if AIgnoreCase then Include(ARes, byte(InvertCase(ch))); end; end; end; {$IFDEF FastUnicodeData} OpKind_CategoryYes, OpKind_CategoryNo: begin // usage of FirstCharSet makes no sense for regex with \p \P ARes := RegExprAllSet; Exit; end; {$ENDIF} else Error(reeBadOpcodeInCharClass); end; until False; // assume that Buffer is ended correctly end; function TRegExpr.GetModifierG: boolean; begin Result := fModifiers.G; end; function TRegExpr.GetModifierI: boolean; begin Result := fModifiers.I; end; function TRegExpr.GetModifierM: boolean; begin Result := fModifiers.M; end; function TRegExpr.GetModifierR: boolean; begin Result := fModifiers.R; end; function TRegExpr.GetModifierS: boolean; begin Result := fModifiers.S; end; function TRegExpr.GetModifierX: boolean; begin Result := fModifiers.X; end; function TRegExpr.CompileRegExpr(ARegExp: PRegExprChar): boolean; // Compile a regular expression into internal code // We can't allocate space until we know how big the compiled form will be, // but we can't compile it (and thus know how big it is) until we've got a // place to put the code. So we cheat: we compile it twice, once with code // generation turned off and size counting turned on, and once "for real". // This also means that we don't allocate space until we are sure that the // thing really will compile successfully, and we never have to move the // code and thus invalidate pointers into it. (Note that it has to be in // one piece because free() must be able to free it all.) // Beware that the optimization-preparation code in here knows about some // of the structure of the compiled regexp. var scan, longest, longestTemp: PRegExprChar; Len, LenTemp: integer; FlagTemp: integer; begin Result := False; FlagTemp := 0; regParse := nil; // for correct error handling regExactlyLen := nil; ClearInternalIndexes; fLastError := reeOk; fLastErrorOpcode := TREOp(0); if Assigned(fHelper) then FreeAndNil(fHelper); fHelperLen := 0; try if programm <> nil then begin FreeMem(programm); programm := nil; end; if ARegExp = nil then begin Error(reeCompNullArgument); Exit; end; fProgModifiers := fModifiers; // well, may it's paranoia. I'll check it later. // First pass: calculate opcode size, validate regex fSecondPass := False; fCompModifiers := fModifiers; regParse := ARegExp; regNumBrackets := 1; regCodeSize := 0; regCode := @regDummy; regCodeWork := nil; regLookahead := False; regLookaheadNeg := False; regLookaheadGroup := -1; regLookbehind := False; EmitC(OP_MAGIC); if ParseReg(False, FlagTemp) = nil then Exit; // Allocate memory GetMem(programm, regCodeSize * SizeOf(REChar)); // Second pass: emit opcode fSecondPass := True; fCompModifiers := fModifiers; regParse := ARegExp; regNumBrackets := 1; regCode := programm; regCodeWork := programm + REOpSz; EmitC(OP_MAGIC); if ParseReg(False, FlagTemp) = nil then Exit; // Dig out information for optimizations. {$IFDEF UseFirstCharSet} // ###0.929 FirstCharSet := []; FillFirstCharSet(regCodeWork); for Len := 0 to 255 do FirstCharArray[Len] := byte(Len) in FirstCharSet; {$ENDIF} regAnchored := #0; regMust := nil; regMustLen := 0; regMustString := ''; scan := regCodeWork; // First OP_BRANCH. if PREOp(regNext(scan))^ = OP_EEND then begin // Only one top-level choice. scan := scan + REOpSz + RENextOffSz; // Starting-point info. if PREOp(scan)^ = OP_BOL then Inc(regAnchored); // If there's something expensive in the r.e., find the longest // literal string that must appear and make it the regMust. Resolve // ties in favor of later strings, since the regstart check works // with the beginning of the r.e. and avoiding duplication // strengthens checking. Not a strong reason, but sufficient in the // absence of others. if (FlagTemp and FLAG_SPECSTART) <> 0 then begin longest := nil; Len := 0; while scan <> nil do begin if PREOp(scan)^ = OP_EXACTLY then begin longestTemp := scan + REOpSz + RENextOffSz + RENumberSz; LenTemp := PLongInt(scan + REOpSz + RENextOffSz)^; if LenTemp >= Len then begin longest := longestTemp; Len := LenTemp; end; end; scan := regNext(scan); end; regMust := longest; regMustLen := Len; if regMustLen > 1 then // don't use regMust if too short SetString(regMustString, regMust, regMustLen); end; end; Result := True; finally begin if not Result then InvalidateProgramm; end; end; end; { of function TRegExpr.CompileRegExpr -------------------------------------------------------------- } function TRegExpr.ParseReg(InBrackets: boolean; var FlagParse: integer): PRegExprChar; // regular expression, i.e. main body or parenthesized thing // Caller must absorb opening parenthesis. // Combining parenthesis handling with the base level of regular expression // is a trifle forced, but the need to tie the tails of the branches to what // follows makes it hard to avoid. var ret, br, ender: PRegExprChar; NBrackets: integer; FlagTemp: integer; SavedModifiers: TRegExprModifiers; begin Result := nil; FlagTemp := 0; FlagParse := FLAG_HASWIDTH; // Tentatively. NBrackets := 0; SavedModifiers := fCompModifiers; // Make an OP_OPEN node, if parenthesized. if InBrackets then begin if regNumBrackets >= RegexMaxGroups then begin Error(reeCompParseRegTooManyBrackets); Exit; end; NBrackets := regNumBrackets; Inc(regNumBrackets); ret := EmitNode(TREOp(Ord(OP_OPEN) + NBrackets)); GrpOpCodes[NBrackets] := ret; end else ret := nil; // Pick up the branches, linking them together. br := ParseBranch(FlagTemp); if br = nil then begin Result := nil; Exit; end; if ret <> nil then Tail(ret, br) // OP_OPEN -> first. else ret := br; if (FlagTemp and FLAG_HASWIDTH) = 0 then FlagParse := FlagParse and not FLAG_HASWIDTH; FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART; while (regParse^ = '|') do begin Inc(regParse); br := ParseBranch(FlagTemp); if br = nil then begin Result := nil; Exit; end; Tail(ret, br); // OP_BRANCH -> OP_BRANCH. if (FlagTemp and FLAG_HASWIDTH) = 0 then FlagParse := FlagParse and not FLAG_HASWIDTH; FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART; end; // Make a closing node, and hook it on the end. if InBrackets then ender := EmitNode(TREOp(Ord(OP_CLOSE) + NBrackets)) else ender := EmitNode(OP_EEND); Tail(ret, ender); // Hook the tails of the branches to the closing node. br := ret; while br <> nil do begin OpTail(br, ender); br := regNext(br); end; // Check for proper termination. if InBrackets then if regParse^ <> ')' then begin Error(reeCompParseRegUnmatchedBrackets); Exit; end else Inc(regParse); // skip trailing ')' if (not InBrackets) and (regParse < fRegexEnd) then begin if regParse^ = ')' then Error(reeCompParseRegUnmatchedBrackets2) else Error(reeCompParseRegJunkOnEnd); Exit; end; fCompModifiers := SavedModifiers; // restore modifiers of parent Result := ret; end; { of function TRegExpr.ParseReg -------------------------------------------------------------- } function TRegExpr.ParseBranch(var FlagParse: integer): PRegExprChar; // one alternative of an | operator // Implements the concatenation operator. var ret, chain, latest: PRegExprChar; FlagTemp: integer; begin FlagTemp := 0; FlagParse := FLAG_WORST; // Tentatively. ret := EmitNode(OP_BRANCH); chain := nil; while (regParse < fRegexEnd) and (regParse^ <> '|') and (regParse^ <> ')') do begin latest := ParsePiece(FlagTemp); if latest = nil then begin Result := nil; Exit; end; FlagParse := FlagParse or FlagTemp and FLAG_HASWIDTH; if chain = nil // First piece. then FlagParse := FlagParse or FlagTemp and FLAG_SPECSTART else Tail(chain, latest); chain := latest; end; if chain = nil // Loop ran zero times. then EmitNode(OP_NOTHING); Result := ret; end; { of function TRegExpr.ParseBranch -------------------------------------------------------------- } function TRegExpr.ParsePiece(var FlagParse: integer): PRegExprChar; // something followed by possible [*+?{] // Note that the branching code sequences used for ? and the general cases // of * and + and { are somewhat optimized: they use the same OP_NOTHING node as // both the endmarker for their branch list and the body of the last branch. // It might seem that this node could be dispensed with entirely, but the // endmarker role is not redundant. function ParseNumber(AStart, AEnd: PRegExprChar): TREBracesArg; begin Result := 0; if AEnd - AStart + 1 > 8 then begin // prevent stupid scanning Error(reeBRACESArgTooBig); Exit; end; while AStart <= AEnd do begin Result := Result * 10 + (Ord(AStart^) - Ord('0')); Inc(AStart); end; if (Result > MaxBracesArg) or (Result < 0) then begin Error(reeBRACESArgTooBig); Exit; end; end; var TheOp: TREOp; NextNode: PRegExprChar; procedure EmitComplexBraces(ABracesMin, ABracesMax: TREBracesArg; ANonGreedyOp: boolean); // ###0.940 {$IFDEF ComplexBraces} var off: TRENextOff; {$ENDIF} begin {$IFNDEF ComplexBraces} Error(reeComplexBracesNotImplemented); {$ELSE} if ANonGreedyOp then TheOp := OP_LOOPNG else TheOp := OP_LOOP; InsertOperator(OP_LOOPENTRY, Result, REOpSz + RENextOffSz); NextNode := EmitNode(TheOp); if regCode <> @regDummy then begin off := (Result + REOpSz + RENextOffSz) - (regCode - REOpSz - RENextOffSz); // back to Atom after OP_LOOPENTRY PREBracesArg(AlignToInt(regCode))^ := ABracesMin; Inc(regCode, REBracesArgSz); PREBracesArg(AlignToInt(regCode))^ := ABracesMax; Inc(regCode, REBracesArgSz); PRENextOff(AlignToPtr(regCode))^ := off; Inc(regCode, RENextOffSz); {$IFDEF DebugSynRegExpr} if regcode - programm > regsize then raise Exception.Create ('TRegExpr.ParsePiece.EmitComplexBraces buffer overrun'); {$ENDIF} end else Inc(regCodeSize, REBracesArgSz * 2 + RENextOffSz); Tail(Result, NextNode); // OP_LOOPENTRY -> OP_LOOP if regCode <> @regDummy then Tail(Result + REOpSz + RENextOffSz, NextNode); // Atom -> OP_LOOP {$ENDIF} end; procedure EmitSimpleBraces(ABracesMin, ABracesMax: TREBracesArg; ANonGreedyOp, APossessive: boolean); begin if APossessive then TheOp := OP_BRACES_POSS else if ANonGreedyOp then TheOp := OP_BRACESNG else TheOp := OP_BRACES; InsertOperator(TheOp, Result, REOpSz + RENextOffSz + REBracesArgSz * 2); if regCode <> @regDummy then begin PREBracesArg(AlignToInt(Result + REOpSz + RENextOffSz))^ := ABracesMin; PREBracesArg(AlignToInt(Result + REOpSz + RENextOffSz + REBracesArgSz))^ := ABracesMax; end; end; var op, nextch: REChar; NonGreedyOp, NonGreedyCh, PossessiveCh: boolean; FlagTemp: integer; BracesMin, BracesMax: TREBracesArg; p: PRegExprChar; begin FlagTemp := 0; Result := ParseAtom(FlagTemp); if Result = nil then Exit; op := regParse^; if not ((op = '*') or (op = '+') or (op = '?') or (op = '{')) then begin FlagParse := FlagTemp; Exit; end; if ((FlagTemp and FLAG_HASWIDTH) = 0) and (op <> '?') then begin Error(reePlusStarOperandCouldBeEmpty); Exit; end; case op of '*': begin FlagParse := FLAG_WORST or FLAG_SPECSTART; nextch := (regParse + 1)^; PossessiveCh := nextch = '+'; if PossessiveCh then begin NonGreedyCh := False; NonGreedyOp := False; end else begin NonGreedyCh := nextch = '?'; NonGreedyOp := NonGreedyCh or not fCompModifiers.G; end; if (FlagTemp and FLAG_SIMPLE) = 0 then begin if NonGreedyOp then EmitComplexBraces(0, MaxBracesArg, NonGreedyOp) else begin // Emit x* as (x&|), where & means "self". InsertOperator(OP_BRANCH, Result, REOpSz + RENextOffSz); // Either x OpTail(Result, EmitNode(OP_BACK)); // and loop OpTail(Result, Result); // back Tail(Result, EmitNode(OP_BRANCH)); // or Tail(Result, EmitNode(OP_NOTHING)); // nil. end end else begin // Simple if PossessiveCh then TheOp := OP_STAR_POSS else if NonGreedyOp then TheOp := OP_STARNG else TheOp := OP_STAR; InsertOperator(TheOp, Result, REOpSz + RENextOffSz); end; if NonGreedyCh or PossessiveCh then Inc(regParse); // Skip extra char ('?') end; { of case '*' } '+': begin FlagParse := FLAG_WORST or FLAG_SPECSTART or FLAG_HASWIDTH; nextch := (regParse + 1)^; PossessiveCh := nextch = '+'; if PossessiveCh then begin NonGreedyCh := False; NonGreedyOp := False; end else begin NonGreedyCh := nextch = '?'; NonGreedyOp := NonGreedyCh or not fCompModifiers.G; end; if (FlagTemp and FLAG_SIMPLE) = 0 then begin if NonGreedyOp then EmitComplexBraces(1, MaxBracesArg, NonGreedyOp) else begin // Emit x+ as x(&|), where & means "self". NextNode := EmitNode(OP_BRANCH); // Either Tail(Result, NextNode); Tail(EmitNode(OP_BACK), Result); // loop back Tail(NextNode, EmitNode(OP_BRANCH)); // or Tail(Result, EmitNode(OP_NOTHING)); // nil. end end else begin // Simple if PossessiveCh then TheOp := OP_PLUS_POSS else if NonGreedyOp then TheOp := OP_PLUSNG else TheOp := OP_PLUS; InsertOperator(TheOp, Result, REOpSz + RENextOffSz); end; if NonGreedyCh or PossessiveCh then Inc(regParse); // Skip extra char ('?') end; { of case '+' } '?': begin FlagParse := FLAG_WORST; nextch := (regParse + 1)^; PossessiveCh := nextch = '+'; if PossessiveCh then begin NonGreedyCh := False; NonGreedyOp := False; end else begin NonGreedyCh := nextch = '?'; NonGreedyOp := NonGreedyCh or not fCompModifiers.G; end; if NonGreedyOp or PossessiveCh then begin // ###0.940 // We emit x?? as x{0,1}? if (FlagTemp and FLAG_SIMPLE) = 0 then begin if PossessiveCh then Error(reePossessiveAfterComplexBraces); EmitComplexBraces(0, 1, NonGreedyOp); end else EmitSimpleBraces(0, 1, NonGreedyOp, PossessiveCh); end else begin // greedy '?' InsertOperator(OP_BRANCH, Result, REOpSz + RENextOffSz); // Either x Tail(Result, EmitNode(OP_BRANCH)); // or NextNode := EmitNode(OP_NOTHING); // nil. Tail(Result, NextNode); OpTail(Result, NextNode); end; if NonGreedyCh or PossessiveCh then Inc(regParse); // Skip extra char ('?') end; { of case '?' } '{': begin Inc(regParse); p := regParse; while IsDigitChar(regParse^) do // <min> MUST appear Inc(regParse); if (regParse^ <> '}') and (regParse^ <> ',') or (p = regParse) then begin Error(reeIncorrectBraces); Exit; end; BracesMin := ParseNumber(p, regParse - 1); if regParse^ = ',' then begin Inc(regParse); p := regParse; while IsDigitChar(regParse^) do Inc(regParse); if regParse^ <> '}' then begin Error(reeIncorrectBraces); Exit; end; if p = regParse then BracesMax := MaxBracesArg else BracesMax := ParseNumber(p, regParse - 1); end else BracesMax := BracesMin; // {n} == {n,n} if BracesMin > BracesMax then begin Error(reeBracesMinParamGreaterMax); Exit; end; if BracesMin > 0 then FlagParse := FLAG_WORST; if BracesMax > 0 then FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SPECSTART; nextch := (regParse + 1)^; PossessiveCh := nextch = '+'; if PossessiveCh then begin NonGreedyCh := False; NonGreedyOp := False; end else begin NonGreedyCh := nextch = '?'; NonGreedyOp := NonGreedyCh or not fCompModifiers.G; end; if (FlagTemp and FLAG_SIMPLE) <> 0 then EmitSimpleBraces(BracesMin, BracesMax, NonGreedyOp, PossessiveCh) else begin if PossessiveCh then Error(reePossessiveAfterComplexBraces); EmitComplexBraces(BracesMin, BracesMax, NonGreedyOp); end; if NonGreedyCh or PossessiveCh then Inc(regParse); // Skip extra char '?' end; // of case '{' // else // here we can't be end; { of case op } Inc(regParse); op := regParse^; if (op = '*') or (op = '+') or (op = '?') or (op = '{') then Error(reeNestedQuantif); end; { of function TRegExpr.ParsePiece -------------------------------------------------------------- } function TRegExpr.HexDig(Ch: REChar): integer; begin case Ch of '0' .. '9': Result := Ord(Ch) - Ord('0'); 'a' .. 'f': Result := Ord(Ch) - Ord('a') + 10; 'A' .. 'F': Result := Ord(Ch) - Ord('A') + 10; else begin Result := 0; Error(reeBadHexDigit); end; end; end; function TRegExpr.UnQuoteChar(var APtr: PRegExprChar): REChar; var Ch: REChar; begin case APtr^ of 't': Result := #$9; // \t => tab (HT/TAB) 'n': Result := #$a; // \n => newline (NL) 'r': Result := #$d; // \r => carriage return (CR) 'f': Result := #$c; // \f => form feed (FF) 'a': Result := #$7; // \a => alarm (bell) (BEL) 'e': Result := #$1b; // \e => escape (ESC) 'c': begin // \cK => code for Ctrl+K Result := #0; Inc(APtr); if APtr >= fRegexEnd then Error(reeNoLetterAfterBSlashC); Ch := APtr^; case Ch of 'a' .. 'z': Result := REChar(Ord(Ch) - Ord('a') + 1); 'A' .. 'Z': Result := REChar(Ord(Ch) - Ord('A') + 1); else Error(reeNoLetterAfterBSlashC); end; end; 'x': begin // \x: hex char Result := #0; Inc(APtr); if APtr >= fRegexEnd then begin Error(reeNoHexCodeAfterBSlashX); Exit; end; if APtr^ = '{' then begin // \x{nnnn} //###0.936 repeat Inc(APtr); if APtr >= fRegexEnd then begin Error(reeNoHexCodeAfterBSlashX); Exit; end; if APtr^ <> '}' then begin if (Ord(Result) ShR (SizeOf(REChar) * 8 - 4)) and $F <> 0 then begin Error(reeHexCodeAfterBSlashXTooBig); Exit; end; Result := REChar((Ord(Result) ShL 4) or HexDig(APtr^)); // HexDig will cause Error if bad hex digit found end else Break; until False; end else begin Result := REChar(HexDig(APtr^)); // HexDig will cause Error if bad hex digit found Inc(APtr); if APtr >= fRegexEnd then begin Error(reeNoHexCodeAfterBSlashX); Exit; end; Result := REChar((Ord(Result) ShL 4) or HexDig(APtr^)); // HexDig will cause Error if bad hex digit found end; end; else begin Result := APtr^; if (Result <> '_') and IsWordChar(Result) then begin fLastErrorSymbol := Result; Error(reeUnknownMetaSymbol); end; end; end; end; function TRegExpr.ParseAtom(var FlagParse: integer): PRegExprChar; // the lowest level // Optimization: gobbles an entire sequence of ordinary characters so that // it can turn them into a single node, which is smaller to store and // faster to run. Backslashed characters are exceptions, each becoming a // separate node; the code is simpler that way and it's not worth fixing. var ret: PRegExprChar; RangeBeg, RangeEnd: REChar; CanBeRange: boolean; AddrOfLen: PLongInt; procedure EmitExactly(Ch: REChar); begin if fCompModifiers.I then ret := EmitNode(OP_EXACTLYCI) else ret := EmitNode(OP_EXACTLY); EmitInt(1); EmitC(Ch); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; procedure EmitRangeChar(Ch: REChar; AStartOfRange: boolean); begin CanBeRange := AStartOfRange; if fCompModifiers.I then Ch := _UpperCase(Ch); if AStartOfRange then begin AddrOfLen := nil; RangeBeg := Ch; end else begin if AddrOfLen = nil then begin EmitC(OpKind_Char); Pointer(AddrOfLen) := regCode; EmitInt(0); end; Inc(AddrOfLen^); EmitC(Ch); end; end; procedure EmitRangePacked(ch1, ch2: REChar); var ChkIndex: integer; begin AddrOfLen := nil; CanBeRange := False; if fCompModifiers.I then begin ch1 := _UpperCase(ch1); ch2 := _UpperCase(ch2); end; for ChkIndex := Low(CharCheckerInfos) to High(CharCheckerInfos) do if (CharCheckerInfos[ChkIndex].CharBegin = ch1) and (CharCheckerInfos[ChkIndex].CharEnd = ch2) then begin EmitC(OpKind_MetaClass); EmitC(REChar(CharCheckerInfos[ChkIndex].CheckerIndex)); Exit; end; EmitC(OpKind_Range); EmitC(ch1); EmitC(ch2); end; {$IFDEF FastUnicodeData} procedure EmitCategoryInCharClass(APositive: boolean); var ch, ch2: REChar; begin AddrOfLen := nil; CanBeRange := False; Inc(regParse); FindCategoryName(regParse, ch, ch2); if APositive then EmitC(OpKind_CategoryYes) else EmitC(OpKind_CategoryNo); EmitC(ch); EmitC(ch2); end; {$ENDIF} var FlagTemp: integer; Len: integer; SavedPtr: PRegExprChar; EnderChar, TempChar: REChar; DashForRange: Boolean; GrpKind: TREGroupKind; GrpName: RegExprString; GrpIndex: integer; NextCh: REChar; begin Result := nil; FlagTemp := 0; FlagParse := FLAG_WORST; AddrOfLen := nil; Inc(regParse); case (regParse - 1)^ of '^': begin if not fCompModifiers.M {$IFDEF UseLineSep} or (fLineSeparators = '') {$ENDIF} then ret := EmitNode(OP_BOL) else ret := EmitNode(OP_BOLML); end; '$': begin if not fCompModifiers.M {$IFDEF UseLineSep} or (fLineSeparators = '') {$ENDIF} then ret := EmitNode(OP_EOL) else ret := EmitNode(OP_EOLML); end; '.': begin if fCompModifiers.S then begin ret := EmitNode(OP_ANY); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end else begin // not /s, so emit [^:LineSeparators:] ret := EmitNode(OP_ANYML); FlagParse := FlagParse or FLAG_HASWIDTH; // not so simple ;) end; end; '[': begin if regParse^ = '^' then begin // Complement of range. if fCompModifiers.I then ret := EmitNode(OP_ANYBUTCI) else ret := EmitNode(OP_ANYBUT); Inc(regParse); end else if fCompModifiers.I then ret := EmitNode(OP_ANYOFCI) else ret := EmitNode(OP_ANYOF); CanBeRange := False; if regParse^ = ']' then begin // first ']' inside [] treated as simple char, no need to check '[' EmitRangeChar(regParse^, (regParse + 1)^ = '-'); Inc(regParse); end; while (regParse < fRegexEnd) and (regParse^ <> ']') do begin // last '-' inside [] treated as simple dash if (regParse^ = '-') and ((regParse + 1) < fRegexEnd) and ((regParse + 1)^ = ']') then begin EmitRangeChar('-', False); Inc(regParse); Break; end; // char '-' which (maybe) makes a range if (regParse^ = '-') and ((regParse + 1) < fRegexEnd) and CanBeRange then begin Inc(regParse); RangeEnd := regParse^; if RangeEnd = EscChar then begin if _IsMetaChar((regParse + 1)^) then begin Error(reeMetaCharAfterMinusInRange); Exit; end; Inc(regParse); RangeEnd := UnQuoteChar(regParse); end; // special handling for Russian range a-YA, add 2 ranges: a-ya and A-YA if fCompModifiers.R and (RangeBeg = RusRangeLoLow) and (RangeEnd = RusRangeHiHigh) then begin EmitRangePacked(RusRangeLoLow, RusRangeLoHigh); EmitRangePacked(RusRangeHiLow, RusRangeHiHigh); end else begin // standard r.e. handling if RangeBeg > RangeEnd then begin Error(reeInvalidRange); Exit; end; EmitRangePacked(RangeBeg, RangeEnd); end; Inc(regParse); end else begin if regParse^ = EscChar then begin Inc(regParse); if regParse >= fRegexEnd then begin Error(reeParseAtomTrailingBackSlash); Exit; end; if _IsMetaChar(regParse^) then begin AddrOfLen := nil; CanBeRange := False; EmitC(OpKind_MetaClass); case regParse^ of 'w': EmitC(REChar(CheckerIndex_Word)); 'W': EmitC(REChar(CheckerIndex_NotWord)); 's': EmitC(REChar(CheckerIndex_Space)); 'S': EmitC(REChar(CheckerIndex_NotSpace)); 'd': EmitC(REChar(CheckerIndex_Digit)); 'D': EmitC(REChar(CheckerIndex_NotDigit)); 'v': EmitC(REChar(CheckerIndex_VertSep)); 'V': EmitC(REChar(CheckerIndex_NotVertSep)); 'h': EmitC(REChar(CheckerIndex_HorzSep)); 'H': EmitC(REChar(CheckerIndex_NotHorzSep)); else Error(reeBadOpcodeInCharClass); end; end else {$IFDEF FastUnicodeData} if regParse^ = 'p' then EmitCategoryInCharClass(True) else if regParse^ = 'P' then EmitCategoryInCharClass(False) else {$ENDIF} begin TempChar := UnQuoteChar(regParse); // False if '-' is last char in [] DashForRange := (regParse + 2 < fRegexEnd) and ((regParse + 1)^ = '-') and ((regParse + 2)^ <> ']'); EmitRangeChar(TempChar, DashForRange); end; end else begin // False if '-' is last char in [] DashForRange := (regParse + 2 < fRegexEnd) and ((regParse + 1)^ = '-') and ((regParse + 2)^ <> ']'); EmitRangeChar(regParse^, DashForRange); end; Inc(regParse); end; end; { of while } AddrOfLen := nil; CanBeRange := False; EmitC(OpKind_End); if regParse^ <> ']' then begin Error(reeUnmatchedSqBrackets); Exit; end; Inc(regParse); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; '(': begin GrpKind := gkNormalGroup; GrpName := ''; // A: detect kind of expression in brackets if regParse^ = '?' then begin NextCh := (regParse + 1)^; case NextCh of ':': begin // non-capturing group: (?:regex) GrpKind := gkNonCapturingGroup; Inc(regParse, 2); end; '>': begin // atomic group: (?>regex) GrpKind := gkNonCapturingGroup; Inc(regParse, 2); GrpAtomic[regNumBrackets] := True; end; 'P': begin if (regParse + 4 >= fRegexEnd) then Error(reeNamedGroupBad); case (regParse + 2)^ of '<': begin // named group: (?P<name>regex) GrpKind := gkNormalGroup; FindGroupName(regParse + 3, fRegexEnd, '>', GrpName); Inc(regParse, Length(GrpName) + 4); end; '=': begin // back-reference to named group: (?P=name) GrpKind := gkNamedGroupReference; FindGroupName(regParse + 3, fRegexEnd, ')', GrpName); Inc(regParse, Length(GrpName) + 4); end; '>': begin // subroutine call to named group: (?P>name) GrpKind := gkSubCall; FindGroupName(regParse + 3, fRegexEnd, ')', GrpName); Inc(regParse, Length(GrpName) + 4); GrpIndex := MatchIndexFromName(GrpName); if GrpIndex < 1 then Error(reeNamedGroupBadRef); end; else Error(reeNamedGroupBad); end; end; '<': begin // lookbehind: (?<=foo)bar if (regParse + 4 >= fRegexEnd) then Error(reeLookbehindBad); case (regParse + 2)^ of '=': begin // allow lookbehind only at the beginning if regParse <> fRegexStart + 1 then Error(reeLookaroundNotAtEdge); GrpKind := gkLookbehind; GrpAtomic[regNumBrackets] := RegExprLookbehindIsAtomic; regLookbehind := True; Inc(regParse, 3); end; '!': begin // allow lookbehind only at the beginning if regParse <> fRegexStart + 1 then Error(reeLookaroundNotAtEdge); GrpKind := gkLookbehindNeg; Inc(regParse, 3); SavedPtr := _FindClosingBracket(regParse, fRegexEnd); if SavedPtr = nil then Error(reeCompParseRegUnmatchedBrackets); // for '(?<!foo)bar', we make our regex 'bar' and make Helper object with 'foo' if not fSecondPass then begin Len := SavedPtr - fRegexStart - 4; if Len = 0 then Error(reeLookbehindBad); if fHelper = nil then fHelper := TRegExpr.Create; fHelper.Expression := Copy(fExpression, 5, Len); try fHelper.Compile; except Len := fHelper.LastError; FreeAndNil(fHelper); Error(Len); end; if fHelper.IsFixedLength(TempChar, Len) then fHelperLen := Len else begin FreeAndNil(fHelper); Error(reeLookbehindTooComplex); end; end; // jump to closing bracket, don't make opcode for (?<!foo) regParse := SavedPtr + 1; end; else Error(reeLookbehindBad); end; end; '=', '!': begin // lookaheads: foo(?=bar) and foo(?!bar) if (regParse + 3 >= fRegexEnd) then Error(reeLookaheadBad); regLookahead := True; regLookaheadGroup := regNumBrackets; if NextCh = '=' then begin GrpKind := gkLookahead; end else begin GrpKind := gkLookaheadNeg; regLookaheadNeg := True; end; GrpAtomic[regNumBrackets] := RegExprLookaheadIsAtomic; // check that these brackets are last in regex SavedPtr := _FindClosingBracket(regParse + 1, fRegexEnd); if (SavedPtr <> fRegexEnd - 1) then Error(reeLookaroundNotAtEdge); Inc(regParse, 2); end; '#': begin // (?#comment) GrpKind := gkComment; Inc(regParse, 2); end; 'a'..'z', '-': begin // modifiers string like (?mxr) GrpKind := gkModifierString; Inc(regParse); end; 'R', '0': begin // recursion (?R), (?0) GrpKind := gkRecursion; Inc(regParse, 2); if regParse^ <> ')' then Error(reeBadRecursion); Inc(regParse); end; '1'..'9': begin // subroutine call (?1)..(?99) GrpKind := gkSubCall; GrpIndex := Ord(NextCh) - Ord('0'); Inc(regParse, 2); // support 2-digit group numbers case regParse^ of ')': begin Inc(regParse); end; '0'..'9': begin GrpIndex := GrpIndex * 10 + Ord(regParse^) - Ord('0'); if GrpIndex >= RegexMaxGroups then Error(reeBadSubCall); Inc(regParse); if regParse^ <> ')' then Error(reeBadSubCall); Inc(regParse); end else Error(reeBadRecursion); end; end; '''': begin // named group: (?'name'regex) if (regParse + 4 >= fRegexEnd) then Error(reeNamedGroupBad); GrpKind := gkNormalGroup; FindGroupName(regParse + 2, fRegexEnd, '''', GrpName); Inc(regParse, Length(GrpName) + 3); end; '&': begin // subroutine call to named group: (?&name) if (regParse + 2 >= fRegexEnd) then Error(reeBadSubCall); GrpKind := gkSubCall; FindGroupName(regParse + 2, fRegexEnd, ')', GrpName); Inc(regParse, Length(GrpName) + 3); GrpIndex := MatchIndexFromName(GrpName); if GrpIndex < 1 then Error(reeNamedGroupBadRef); end; else Error(reeIncorrectSpecialBrackets); end; end; // B: process found kind of brackets case GrpKind of gkNormalGroup, gkNonCapturingGroup, gkLookahead, gkLookaheadNeg, gkLookbehind: begin // skip this block for one of passes, to not double groups count; // must take first pass (we need GrpNames filled) if (GrpKind = gkNormalGroup) and not fSecondPass then if GrpCount < RegexMaxGroups - 1 then begin Inc(GrpCount); GrpIndexes[GrpCount] := regNumBrackets; if GrpName <> '' then begin if MatchIndexFromName(GrpName) >= 0 then Error(reeNamedGroupDupName); GrpNames[GrpCount] := GrpName; end; end; ret := ParseReg(True, FlagTemp); if ret = nil then begin Result := nil; Exit; end; FlagParse := FlagParse or FlagTemp and (FLAG_HASWIDTH or FLAG_SPECSTART); end; gkLookbehindNeg: begin // don't make opcode ret := EmitNode(OP_COMMENT); FlagParse := FLAG_WORST; end; gkNamedGroupReference: begin Len := MatchIndexFromName(GrpName); if Len < 0 then Error(reeNamedGroupBadRef); ret := EmitGroupRef(Len, fCompModifiers.I); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; gkModifierString: begin SavedPtr := regParse; while (regParse < fRegexEnd) and (regParse^ <> ')') do Inc(regParse); if (regParse^ <> ')') or not ParseModifiers(SavedPtr, regParse - SavedPtr, fCompModifiers) then begin Error(reeUnrecognizedModifier); Exit; end; Inc(regParse); // skip ')' ret := EmitNode(OP_COMMENT); // comment // Error (reeQuantifFollowsNothing); // Exit; end; gkComment: begin while (regParse < fRegexEnd) and (regParse^ <> ')') do Inc(regParse); if regParse^ <> ')' then begin Error(reeUnclosedComment); Exit; end; Inc(regParse); // skip ')' ret := EmitNode(OP_COMMENT); // comment end; gkRecursion: begin // set FLAG_HASWIDTH to allow compiling of such regex: b(?:m|(?R))*e FlagParse := FlagParse or FLAG_HASWIDTH; ret := EmitNode(OP_RECUR); end; gkSubCall: begin // set FLAG_HASWIDTH like for (?R) FlagParse := FlagParse or FLAG_HASWIDTH; ret := EmitNode(TReOp(Ord(OP_SUBCALL) + GrpIndex)); end; end; // case GrpKind of end; '|', ')': begin // Supposed to be caught earlier. Error(reeInternalUrp); Exit; end; '?', '+', '*': begin Error(reeQuantifFollowsNothing); Exit; end; EscChar: begin if regParse >= fRegexEnd then begin Error(reeTrailingBackSlash); Exit; end; case regParse^ of 'b': ret := EmitNode(OP_BOUND); 'B': ret := EmitNode(OP_NOTBOUND); 'A': ret := EmitNode(OP_BOL); 'z': ret := EmitNode(OP_EOL); 'Z': ret := EmitNode(OP_EOL2); 'd': begin // r.e.extension - any digit ('0' .. '9') ret := EmitNode(OP_ANYDIGIT); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'D': begin // r.e.extension - not digit ('0' .. '9') ret := EmitNode(OP_NOTDIGIT); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 's': begin // r.e.extension - any space char ret := EmitNode(OP_ANYSPACE); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'S': begin // r.e.extension - not space char ret := EmitNode(OP_NOTSPACE); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'w': begin // r.e.extension - any english char / digit / '_' ret := EmitNode(OP_ANYLETTER); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'W': begin // r.e.extension - not english char / digit / '_' ret := EmitNode(OP_NOTLETTER); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'v': begin ret := EmitNode(OP_ANYVERTSEP); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'V': begin ret := EmitNode(OP_NOTVERTSEP); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'h': begin ret := EmitNode(OP_ANYHORZSEP); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'H': begin ret := EmitNode(OP_NOTHORZSEP); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; '1' .. '9': begin ret := EmitGroupRef(Ord(regParse^) - Ord('0'), fCompModifiers.I); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; {$IFDEF FastUnicodeData} 'p': begin ret := EmitCategoryMain(True); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; 'P': begin ret := EmitCategoryMain(False); FlagParse := FlagParse or FLAG_HASWIDTH or FLAG_SIMPLE; end; {$ENDIF} else EmitExactly(UnQuoteChar(regParse)); end; { of case } Inc(regParse); end; else begin Dec(regParse); if fCompModifiers.X and // check for eXtended syntax ((regParse^ = '#') or IsIgnoredChar(regParse^)) then begin // ###0.941 \x if regParse^ = '#' then begin // Skip eXtended comment // find comment terminator (group of \n and/or \r) while (regParse < fRegexEnd) and (regParse^ <> #$d) and (regParse^ <> #$a) do Inc(regParse); while (regParse^ = #$d) or (regParse^ = #$a) // skip comment terminator do Inc(regParse); // attempt to support different type of line separators end else begin // Skip the blanks! while IsIgnoredChar(regParse^) do Inc(regParse); end; ret := EmitNode(OP_COMMENT); // comment end else begin Len := FindSkippedMetaLen(regParse, fRegexEnd); if Len <= 0 then if regParse^ <> '{' then begin Error(reeRarseAtomInternalDisaster); Exit; end else Len := FindSkippedMetaLen(regParse + 1, fRegexEnd) + 1; // bad {n,m} - compile as EXACTLY EnderChar := (regParse + Len)^; if (Len > 1) and ((EnderChar = '*') or (EnderChar = '+') or (EnderChar = '?') or (EnderChar = '{')) then Dec(Len); // back off clear of ?+*{ operand. FlagParse := FlagParse or FLAG_HASWIDTH; if Len = 1 then FlagParse := FlagParse or FLAG_SIMPLE; if fCompModifiers.I then ret := EmitNode(OP_EXACTLYCI) else ret := EmitNode(OP_EXACTLY); EmitInt(0); while (Len > 0) and ((not fCompModifiers.X) or (regParse^ <> '#')) do begin if not fCompModifiers.X or not IsIgnoredChar(regParse^) then begin EmitC(regParse^); if regCode <> @regDummy then Inc(regExactlyLen^); end; Inc(regParse); Dec(Len); end; end; { of if not comment } end; { of case else } end; { of case } Result := ret; end; { of function TRegExpr.ParseAtom -------------------------------------------------------------- } function TRegExpr.GetCompilerErrorPos: PtrInt; begin Result := 0; if (fRegexStart = nil) or (regParse = nil) then Exit; // not in compiling mode ? Result := regParse - fRegexStart; end; { of function TRegExpr.GetCompilerErrorPos -------------------------------------------------------------- } { ============================================================= } { ===================== Matching section ====================== } { ============================================================= } procedure TRegExpr.FindGroupName(APtr, AEndPtr: PRegExprChar; AEndChar: REChar; var AName: RegExprString); // check that group name is valid identifier, started from non-digit // this is to be like in Python regex var P: PRegExprChar; begin P := APtr; if IsDigitChar(P^) or not IsWordChar(P^) then Error(reeNamedGroupBadName); repeat if P >= AEndPtr then Error(reeNamedGroupBad); if P^ = AEndChar then Break; if not IsWordChar(P^) then Error(reeNamedGroupBadName); Inc(P); until False; SetString(AName, APtr, P-APtr); end; function TRegExpr.FindRepeated(p: PRegExprChar; AMax: IntPtr): IntPtr; // repeatedly match something simple, report how many // p: points to current opcode var scan: PRegExprChar; opnd: PRegExprChar; TheMax: PtrInt; // PtrInt, gets diff of 2 pointers InvChar: REChar; CurStart, CurEnd: PRegExprChar; ArrayIndex, i: integer; begin Result := 0; scan := regInput; // points into InputString opnd := p + REOpSz + RENextOffSz; // points to operand of opcode (after OP_nnn code) TheMax := fInputEnd - scan; if TheMax > AMax then TheMax := AMax; case PREOp(p)^ of OP_ANY: begin // note - OP_ANYML cannot be proceeded in FindRepeated because can skip // more than one char at once {$IFDEF UnicodeEx} for i := 1 to TheMax do IncUnicode2(scan, Result); {$ELSE} Result := TheMax; Inc(scan, Result); {$ENDIF} end; OP_EXACTLY: begin // in opnd can be only ONE char !!! { // Alexey: commented because of https://github.com/andgineer/TRegExpr/issues/145 NLen := PLongInt(opnd)^; if TheMax > NLen then TheMax := NLen; } Inc(opnd, RENumberSz); while (Result < TheMax) and (opnd^ = scan^) do begin Inc(Result); Inc(scan); end; end; OP_EXACTLYCI: begin // in opnd can be only ONE char !!! { // Alexey: commented because of https://github.com/andgineer/TRegExpr/issues/145 NLen := PLongInt(opnd)^; if TheMax > NLen then TheMax := NLen; } Inc(opnd, RENumberSz); while (Result < TheMax) and (opnd^ = scan^) do begin // prevent unneeded InvertCase //###0.931 Inc(Result); Inc(scan); end; if Result < TheMax then begin // ###0.931 InvChar := InvertCase(opnd^); // store in register while (Result < TheMax) and ((opnd^ = scan^) or (InvChar = scan^)) do begin Inc(Result); Inc(scan); end; end; end; OP_BSUBEXP: begin // ###0.936 ArrayIndex := GrpIndexes[Ord(opnd^)]; if ArrayIndex < 0 then Exit; CurStart := GrpStart[ArrayIndex]; if CurStart = nil then Exit; CurEnd := GrpEnd[ArrayIndex]; if CurEnd = nil then Exit; repeat opnd := CurStart; while opnd < CurEnd do begin if (scan >= fInputEnd) or (scan^ <> opnd^) then Exit; Inc(scan); Inc(opnd); end; Inc(Result); regInput := scan; until Result >= AMax; end; OP_BSUBEXPCI: begin // ###0.936 ArrayIndex := GrpIndexes[Ord(opnd^)]; if ArrayIndex < 0 then Exit; CurStart := GrpStart[ArrayIndex]; if CurStart = nil then Exit; CurEnd := GrpEnd[ArrayIndex]; if CurEnd = nil then Exit; repeat opnd := CurStart; while opnd < CurEnd do begin if (scan >= fInputEnd) or ((scan^ <> opnd^) and (scan^ <> InvertCase(opnd^))) then Exit; Inc(scan); Inc(opnd); end; Inc(Result); regInput := scan; until Result >= AMax; end; OP_ANYDIGIT: while (Result < TheMax) and IsDigitChar(scan^) do begin Inc(Result); Inc(scan); end; OP_NOTDIGIT: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not IsDigitChar(scan^) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not IsDigitChar(scan^) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYLETTER: while (Result < TheMax) and IsWordChar(scan^) do // ###0.940 begin Inc(Result); Inc(scan); end; OP_NOTLETTER: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not IsWordChar(scan^) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not IsWordChar(scan^) do // ###0.940 begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYSPACE: while (Result < TheMax) and IsSpaceChar(scan^) do begin Inc(Result); Inc(scan); end; OP_NOTSPACE: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not IsSpaceChar(scan^) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not IsSpaceChar(scan^) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYVERTSEP: while (Result < TheMax) and IsVertLineSeparator(scan^) do begin Inc(Result); Inc(scan); end; OP_NOTVERTSEP: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not IsVertLineSeparator(scan^) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not IsVertLineSeparator(scan^) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYHORZSEP: while (Result < TheMax) and IsHorzSeparator(scan^) do begin Inc(Result); Inc(scan); end; OP_NOTHORZSEP: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not IsHorzSeparator(scan^) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not IsHorzSeparator(scan^) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYOF: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and FindInCharClass(opnd, scan^, False) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and FindInCharClass(opnd, scan^, False) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYBUT: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not FindInCharClass(opnd, scan^, False) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not FindInCharClass(opnd, scan^, False) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYOFCI: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and FindInCharClass(opnd, scan^, True) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and FindInCharClass(opnd, scan^, True) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_ANYBUTCI: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not FindInCharClass(opnd, scan^, True) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not FindInCharClass(opnd, scan^, True) do begin Inc(Result); Inc(scan); end; {$ENDIF} {$IFDEF FastUnicodeData} OP_ANYCATEGORY: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and MatchOneCharCategory(opnd, scan) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and MatchOneCharCategory(opnd, scan) do begin Inc(Result); Inc(scan); end; {$ENDIF} OP_NOTCATEGORY: {$IFDEF UNICODEEX} begin i := 0; while (i < TheMax) and not MatchOneCharCategory(opnd, scan) do begin Inc(i); IncUnicode2(scan, Result); end; end; {$ELSE} while (Result < TheMax) and not MatchOneCharCategory(opnd, scan) do begin Inc(Result); Inc(scan); end; {$ENDIF} {$ENDIF} else begin // Oh dear. Called inappropriately. Result := 0; Error(reeRegRepeatCalledInappropriately); Exit; end; end; { of case } regInput := scan; end; { of function TRegExpr.FindRepeated -------------------------------------------------------------- } function TRegExpr.regNext(p: PRegExprChar): PRegExprChar; // dig the "next" pointer out of a node var offset: TRENextOff; begin if p = @regDummy then begin Result := nil; Exit; end; offset := PRENextOff(AlignToPtr(p + REOpSz))^; // ###0.933 inlined NEXT if offset = 0 then Result := nil else Result := p + offset; end; { of function TRegExpr.regNext -------------------------------------------------------------- } function TRegExpr.MatchPrim(prog: PRegExprChar): boolean; // recursively matching routine // Conceptually the strategy is simple: check to see whether the current // node matches, call self recursively to see whether the rest matches, // and then act accordingly. In practice we make some effort to avoid // recursion, in particular by going through "ordinary" nodes (that don't // need to know whether the rest of the match failed) by a loop instead of // by recursion. var scan: PRegExprChar; // Current node. next: PRegExprChar; // Next node. Len: PtrInt; opnd: PRegExprChar; no: integer; save: PRegExprChar; saveCurrentGrp: integer; nextch: REChar; BracesMin, BracesMax: integer; // we use integer instead of TREBracesArg for better support */+ {$IFDEF ComplexBraces} SavedLoopStack: TRegExprLoopStack; // :(( very bad for recursion SavedLoopStackIdx: integer; // ###0.925 {$ENDIF} bound1, bound2: boolean; checkAtomicGroup: boolean; begin Result := False; { // Alexey: not sure it's ok for long searches in big texts, so disabled if regNestedCalls > MaxRegexBackTracking then Exit; Inc(regNestedCalls); } scan := prog; while scan <> nil do begin Len := PRENextOff(AlignToPtr(scan + 1))^; // ###0.932 inlined regNext if Len = 0 then next := nil else next := scan + Len; case scan^ of OP_BOUND: begin bound1 := (regInput = fInputStart) or not IsWordChar((regInput - 1)^); bound2 := (regInput >= fInputEnd) or not IsWordChar(regInput^); if bound1 = bound2 then Exit; end; OP_NOTBOUND: begin bound1 := (regInput = fInputStart) or not IsWordChar((regInput - 1)^); bound2 := (regInput >= fInputEnd) or not IsWordChar(regInput^); if bound1 <> bound2 then Exit; end; OP_BOL: begin if regInput <> fInputStart then Exit; end; OP_EOL: begin // \z matches at the very end if regInput < fInputEnd then Exit; end; OP_EOL2: begin // \Z matches at the very and + before the final line-break (LF and CR LF) if regInput < fInputEnd then begin if (regInput = fInputEnd - 1) and (regInput^ = #10) then begin end else if (regInput = fInputEnd - 2) and (regInput^ = #13) and ((regInput + 1) ^ = #10) then begin end else Exit; end; end; OP_BOLML: if regInput > fInputStart then begin if ((regInput - 1) <= fInputStart) or not IsPairedBreak(regInput - 2) then begin // don't stop between paired separator if IsPairedBreak(regInput - 1) then Exit; if not IsCustomLineSeparator((regInput - 1)^) then Exit; end; end; OP_EOLML: if regInput < fInputEnd then begin if not IsPairedBreak(regInput) then begin // don't stop between paired separator if (regInput > fInputStart) and IsPairedBreak(regInput - 1) then Exit; if not IsCustomLineSeparator(regInput^) then Exit; end; end; OP_ANY: begin if regInput >= fInputEnd then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYML: begin if (regInput >= fInputEnd) or IsPairedBreak(regInput) or IsCustomLineSeparator(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYDIGIT: begin if (regInput >= fInputEnd) or not IsDigitChar(regInput^) then Exit; Inc(regInput); end; OP_NOTDIGIT: begin if (regInput >= fInputEnd) or IsDigitChar(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYLETTER: begin if (regInput >= fInputEnd) or not IsWordChar(regInput^) then Exit; Inc(regInput); end; OP_NOTLETTER: begin if (regInput >= fInputEnd) or IsWordChar(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYSPACE: begin if (regInput >= fInputEnd) or not IsSpaceChar(regInput^) then Exit; Inc(regInput); end; OP_NOTSPACE: begin if (regInput >= fInputEnd) or IsSpaceChar(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYVERTSEP: begin if (regInput >= fInputEnd) or not IsVertLineSeparator(regInput^) then Exit; Inc(regInput); end; OP_NOTVERTSEP: begin if (regInput >= fInputEnd) or IsVertLineSeparator(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYHORZSEP: begin if (regInput >= fInputEnd) or not IsHorzSeparator(regInput^) then Exit; Inc(regInput); end; OP_NOTHORZSEP: begin if (regInput >= fInputEnd) or IsHorzSeparator(regInput^) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_EXACTLYCI: begin opnd := scan + REOpSz + RENextOffSz; // OPERAND Len := PLongInt(opnd)^; Inc(opnd, RENumberSz); // Inline the first character, for speed. if (opnd^ <> regInput^) and (InvertCase(opnd^) <> regInput^) then Exit; // ###0.929 begin no := Len; save := regInput; while no > 1 do begin Inc(save); Inc(opnd); if (opnd^ <> save^) and (InvertCase(opnd^) <> save^) then Exit; Dec(no); end; // ###0.929 end Inc(regInput, Len); end; OP_EXACTLY: begin opnd := scan + REOpSz + RENextOffSz; // OPERAND Len := PLongInt(opnd)^; Inc(opnd, RENumberSz); // Inline the first character, for speed. if opnd^ <> regInput^ then Exit; // ###0.929 begin no := Len; save := regInput; while no > 1 do begin Inc(save); Inc(opnd); if opnd^ <> save^ then Exit; Dec(no); end; // ###0.929 end Inc(regInput, Len); end; OP_BSUBEXP: begin // ###0.936 no := Ord((scan + REOpSz + RENextOffSz)^); no := GrpIndexes[no]; if no < 0 then Exit; if GrpStart[no] = nil then Exit; if GrpEnd[no] = nil then Exit; save := regInput; opnd := GrpStart[no]; while opnd < GrpEnd[no] do begin if (save >= fInputEnd) or (save^ <> opnd^) then Exit; Inc(save); Inc(opnd); end; regInput := save; end; OP_BSUBEXPCI: begin // ###0.936 no := Ord((scan + REOpSz + RENextOffSz)^); no := GrpIndexes[no]; if no < 0 then Exit; if GrpStart[no] = nil then Exit; if GrpEnd[no] = nil then Exit; save := regInput; opnd := GrpStart[no]; while opnd < GrpEnd[no] do begin if (save >= fInputEnd) or ((save^ <> opnd^) and (save^ <> InvertCase(opnd^))) then Exit; Inc(save); Inc(opnd); end; regInput := save; end; OP_ANYOF: begin if (regInput >= fInputEnd) or not FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, False) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYBUT: begin if (regInput >= fInputEnd) or FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, False) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYOFCI: begin if (regInput >= fInputEnd) or not FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, True) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_ANYBUTCI: begin if (regInput >= fInputEnd) or FindInCharClass(scan + REOpSz + RENextOffSz, regInput^, True) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_NOTHING: ; OP_COMMENT: ; OP_BACK: ; OP_OPEN_FIRST .. OP_OPEN_LAST: begin no := Ord(scan^) - Ord(OP_OPEN); regCurrentGrp := no; save := GrpStart[no]; // ###0.936 GrpStart[no] := regInput; // ###0.936 Result := MatchPrim(next); if not Result then // ###0.936 GrpStart[no] := save; // handle negative lookahead if regLookaheadNeg then if no = regLookaheadGroup then begin Result := not Result; if Result then begin // we need zero length of "lookahead group", // it is later used to adjust the match GrpStart[no] := regInput; GrpEnd[no]:= regInput; end else GrpStart[no] := save; end; Exit; end; OP_CLOSE_FIRST .. OP_CLOSE_LAST: begin no := Ord(scan^) - Ord(OP_CLOSE); regCurrentGrp := -1; // handle atomic group, mark it as "done" // (we are here because some OP_BRANCH is matched) if GrpAtomic[no] then GrpAtomicDone[no] := True; save := GrpEnd[no]; // ###0.936 GrpEnd[no] := regInput; // ###0.936 // if we are in OP_SUBCALL* call, it called OP_OPEN*, so we must return // in OP_CLOSE, without going to next opcode if GrpSubCalled[no] then begin Result := True; Exit; end; Result := MatchPrim(next); if not Result then // ###0.936 GrpEnd[no] := save; Exit; end; OP_BRANCH: begin saveCurrentGrp := regCurrentGrp; checkAtomicGroup := (regCurrentGrp >= 0) and GrpAtomic[regCurrentGrp]; if (next^ <> OP_BRANCH) // No next choice in group then next := scan + REOpSz + RENextOffSz // Avoid recursion else begin repeat save := regInput; Result := MatchPrim(scan + REOpSz + RENextOffSz); regCurrentGrp := saveCurrentGrp; if Result then Exit; // if branch worked until OP_CLOSE, and marked atomic group as "done", then exit if checkAtomicGroup then if GrpAtomicDone[regCurrentGrp] then Exit; regInput := save; scan := regNext(scan); until (scan = nil) or (scan^ <> OP_BRANCH); Exit; end; end; {$IFDEF ComplexBraces} OP_LOOPENTRY: begin // ###0.925 no := LoopStackIdx; Inc(LoopStackIdx); if LoopStackIdx > LoopStackMax then begin Error(reeLoopStackExceeded); Exit; end; save := regInput; LoopStack[LoopStackIdx] := 0; // init loop counter Result := MatchPrim(next); // execute loop LoopStackIdx := no; // cleanup if Result then Exit; regInput := save; Exit; end; OP_LOOP, OP_LOOPNG: begin // ###0.940 if LoopStackIdx <= 0 then begin Error(reeLoopWithoutEntry); Exit; end; opnd := scan + PRENextOff(AlignToPtr(scan + REOpSz + RENextOffSz + 2 * REBracesArgSz))^; BracesMin := PREBracesArg(AlignToInt(scan + REOpSz + RENextOffSz))^; BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; save := regInput; if LoopStack[LoopStackIdx] >= BracesMin then begin // Min alredy matched - we can work if scan^ = OP_LOOP then begin // greedy way - first try to max deep of greed ;) if LoopStack[LoopStackIdx] < BracesMax then begin Inc(LoopStack[LoopStackIdx]); no := LoopStackIdx; Result := MatchPrim(opnd); LoopStackIdx := no; if Result then Exit; regInput := save; end; Dec(LoopStackIdx); // Fail. May be we are too greedy? ;) Result := MatchPrim(next); if not Result then regInput := save; Exit; end else begin // non-greedy - try just now Result := MatchPrim(next); if Result then Exit else regInput := save; // failed - move next and try again if LoopStack[LoopStackIdx] < BracesMax then begin Inc(LoopStack[LoopStackIdx]); no := LoopStackIdx; Result := MatchPrim(opnd); LoopStackIdx := no; if Result then Exit; regInput := save; end; Dec(LoopStackIdx); // Failed - back up Exit; end end else begin // first match a min_cnt times Inc(LoopStack[LoopStackIdx]); no := LoopStackIdx; Result := MatchPrim(opnd); LoopStackIdx := no; if Result then Exit; Dec(LoopStack[LoopStackIdx]); regInput := save; Exit; end; end; {$ENDIF} OP_STAR, OP_PLUS, OP_BRACES, OP_STARNG, OP_PLUSNG, OP_BRACESNG: begin // Lookahead to avoid useless match attempts when we know // what character comes next. nextch := #0; if next^ = OP_EXACTLY then nextch := (next + REOpSz + RENextOffSz + RENumberSz)^; BracesMax := MaxInt; // infinite loop for * and + //###0.92 if (scan^ = OP_STAR) or (scan^ = OP_STARNG) then BracesMin := 0 // star else if (scan^ = OP_PLUS) or (scan^ = OP_PLUSNG) then BracesMin := 1 // plus else begin // braces BracesMin := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; end; save := regInput; opnd := scan + REOpSz + RENextOffSz; if (scan^ = OP_BRACES) or (scan^ = OP_BRACESNG) then Inc(opnd, 2 * REBracesArgSz); if (scan^ = OP_PLUSNG) or (scan^ = OP_STARNG) or (scan^ = OP_BRACESNG) then begin // non-greedy mode BracesMax := FindRepeated(opnd, BracesMax); // don't repeat more than BracesMax // Now we know real Max limit to move forward (for recursion 'back up') // In some cases it can be faster to check only Min positions first, // but after that we have to check every position separtely instead // of fast scannig in loop. no := BracesMin; while no <= BracesMax do begin regInput := save + no; // If it could work, try it. if (nextch = #0) or (regInput^ = nextch) then begin {$IFDEF ComplexBraces} System.Move(LoopStack, SavedLoopStack, SizeOf(LoopStack)); // ###0.925 SavedLoopStackIdx := LoopStackIdx; {$ENDIF} if MatchPrim(next) then begin Result := True; Exit; end; {$IFDEF ComplexBraces} System.Move(SavedLoopStack, LoopStack, SizeOf(LoopStack)); LoopStackIdx := SavedLoopStackIdx; {$ENDIF} end; Inc(no); // Couldn't or didn't - move forward. end; { of while } Exit; end else begin // greedy mode no := FindRepeated(opnd, BracesMax); // don't repeat more than max_cnt while no >= BracesMin do begin // If it could work, try it. if (nextch = #0) or (regInput^ = nextch) then begin {$IFDEF ComplexBraces} System.Move(LoopStack, SavedLoopStack, SizeOf(LoopStack)); // ###0.925 SavedLoopStackIdx := LoopStackIdx; {$ENDIF} if MatchPrim(next) then begin Result := True; Exit; end; {$IFDEF ComplexBraces} System.Move(SavedLoopStack, LoopStack, SizeOf(LoopStack)); LoopStackIdx := SavedLoopStackIdx; {$ENDIF} end; Dec(no); // Couldn't or didn't - back up. regInput := save + no; end; { of while } Exit; end; end; OP_STAR_POSS, OP_PLUS_POSS, OP_BRACES_POSS: begin // Lookahead to avoid useless match attempts when we know // what character comes next. nextch := #0; if next^ = OP_EXACTLY then nextch := (next + REOpSz + RENextOffSz + RENumberSz)^; opnd := scan + REOpSz + RENextOffSz; case scan^ of OP_STAR_POSS: begin BracesMin := 0; BracesMax := MaxInt; end; OP_PLUS_POSS: begin BracesMin := 1; BracesMax := MaxInt; end; else begin // braces BracesMin := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; BracesMax := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz))^; Inc(opnd, 2 * REBracesArgSz); end; end; no := FindRepeated(opnd, BracesMax); if no >= BracesMin then if (nextch = #0) or (regInput^ = nextch) then Result := MatchPrim(next); Exit; end; OP_EEND: begin Result := True; // Success! Exit; end; {$IFDEF FastUnicodeData} OP_ANYCATEGORY: begin if (regInput >= fInputEnd) then Exit; if not MatchOneCharCategory(scan + REOpSz + RENextOffSz, regInput) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; OP_NOTCATEGORY: begin if (regInput >= fInputEnd) then Exit; if MatchOneCharCategory(scan + REOpSz + RENextOffSz, regInput) then Exit; {$IFDEF UNICODEEX} IncUnicode(regInput); {$ELSE} Inc(regInput); {$ENDIF} end; {$ENDIF} OP_RECUR: begin // call opcode start if not MatchPrim(regCodeWork) then Exit; end; OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: begin // call subroutine no := GrpIndexes[Ord(scan^) - Ord(OP_SUBCALL)]; if no < 0 then Exit; save := GrpOpCodes[no]; if save = nil then Exit; checkAtomicGroup := GrpSubCalled[no]; // mark group in GrpSubCalled array so opcode can detect subcall GrpSubCalled[no] := True; if not MatchPrim(save) then begin GrpSubCalled[no] := checkAtomicGroup; Exit; end; GrpSubCalled[no] := checkAtomicGroup; end; else begin Error(reeMatchPrimMemoryCorruption); Exit; end; end; { of case scan^ } scan := next; end; { of while scan <> nil } // We get here only if there's trouble -- normally "case EEND" is the // terminating point. Error(reeMatchPrimCorruptedPointers); end; { of function TRegExpr.MatchPrim -------------------------------------------------------------- } function TRegExpr.Exec(const AInputString: RegExprString): boolean; begin InputString := AInputString; Result := ExecPrim(1, False, False, False); end; { of function TRegExpr.Exec -------------------------------------------------------------- } {$IFDEF OverMeth} function TRegExpr.Exec: boolean; var SlowChecks: boolean; begin SlowChecks := fInputLength < fSlowChecksSizeMax; Result := ExecPrim(1, False, SlowChecks, False); end; { of function TRegExpr.Exec -------------------------------------------------------------- } function TRegExpr.Exec(AOffset: IntPtr): boolean; begin Result := ExecPrim(AOffset, False, False, False); end; { of function TRegExpr.Exec -------------------------------------------------------------- } {$ENDIF} function TRegExpr.ExecPos(AOffset: IntPtr {$IFDEF DefParam} = 1{$ENDIF}): boolean; begin Result := ExecPrim(AOffset, False, False, False); end; { of function TRegExpr.ExecPos -------------------------------------------------------------- } {$IFDEF OverMeth} function TRegExpr.ExecPos(AOffset: IntPtr; ATryOnce, ABackward: boolean): boolean; begin Result := ExecPrim(AOffset, ATryOnce, False, ABackward); end; {$ENDIF} procedure TRegExpr.SetInputString(AInputString: PRegExprChar; ALength: UIntPtr); begin fInputString := ''; fInputLength := ALength; fInputStart := AInputString; fInputEnd := fInputStart + fInputLength; end; { of procedure TRegExpr.SetInputString --------------------------------------------------------------} function TRegExpr.MatchAtOnePos(APos: PRegExprChar): boolean; begin // test for lookbehind '(?<!foo)bar' before running actual MatchPrim if Assigned(fHelper) then if (APos - fHelperLen) >= fInputStart then begin fHelper.SetInputRange(APos - fHelperLen, APos); if fHelper.MatchAtOnePos(APos - fHelperLen) then begin Result := False; Exit; end; end; regInput := APos; regCurrentGrp := -1; regNestedCalls := 0; Result := MatchPrim(regCodeWork); if Result then begin GrpStart[0] := APos; GrpEnd[0] := regInput; // with lookbehind, increase found position by the len of group=1 if regLookbehind then Inc(GrpStart[0], GrpEnd[1] - GrpStart[1]); // with lookahead, decrease ending by the len of group=regLookaheadGroup if regLookahead and (regLookaheadGroup > 0) then Dec(GrpEnd[0], GrpEnd[regLookaheadGroup] - GrpStart[regLookaheadGroup]); end; end; procedure TRegExpr.ClearMatches; begin FillChar(GrpStart, SizeOf(GrpStart), 0); FillChar(GrpEnd, SizeOf(GrpEnd), 0); FillChar(GrpAtomicDone, SizeOf(GrpAtomicDone), 0); FillChar(GrpSubCalled, SizeOf(GrpSubCalled), 0); end; procedure TRegExpr.ClearInternalIndexes; var i: integer; begin FillChar(GrpStart, SizeOf(GrpStart), 0); FillChar(GrpEnd, SizeOf(GrpEnd), 0); FillChar(GrpAtomic, SizeOf(GrpAtomic), 0); FillChar(GrpAtomicDone, SizeOf(GrpAtomicDone), 0); FillChar(GrpSubCalled, SizeOf(GrpSubCalled), 0); FillChar(GrpOpCodes, SizeOf(GrpOpCodes), 0); for i := 0 to RegexMaxGroups - 1 do begin GrpIndexes[i] := -1; GrpNames[i] := ''; end; GrpIndexes[0] := 0; GrpCount := 0; end; function TRegExpr.ExecPrim(AOffset: IntPtr; ATryOnce, ASlowChecks, ABackward: boolean): boolean; var Ptr: PRegExprChar; begin Result := False; // Ensure that Match cleared either if optimization tricks or some error // will lead to leaving ExecPrim without actual search. That is // important for ExecNext logic and so on. ClearMatches; // Don't check IsProgrammOk here! it causes big slowdown in test_benchmark! if programm = nil then begin Compile; if programm = nil then Exit; end; if fInputLength = 0 then begin // Empty string can match e.g. '^$' if regMustLen > 0 then Exit; end; // Check that the start position is not negative if AOffset < 1 then begin Error(reeOffsetMustBePositive); Exit; end; // Check that the start position is not longer than the line if AOffset > (fInputLength + 1) then Exit; Ptr := fInputStart + AOffset - 1; // If there is a "must appear" string, look for it. if ASlowChecks then if regMustString <> '' then if StrPos(PRegExprChar(regMustString), fInputStart) = nil then Exit; {$IFDEF ComplexBraces} // no loops started LoopStackIdx := 0; // ###0.925 {$ENDIF} // ATryOnce or anchored match (it needs to be tried only once). if ATryOnce or (regAnchored <> #0) then begin {$IFDEF UseFirstCharSet} {$IFDEF UniCode} if Ord(Ptr^) <= $FF then {$ENDIF} if not FirstCharArray[byte(Ptr^)] then Exit; {$ENDIF} Result := MatchAtOnePos(Ptr); Exit; end; // Messy cases: unanchored match. if ABackward then Inc(Ptr, 2) else Dec(Ptr); repeat if ABackward then begin Dec(Ptr); if Ptr < fInputStart then Exit; end else begin Inc(Ptr); if Ptr > fInputEnd then Exit; end; {$IFDEF UseFirstCharSet} {$IFDEF UniCode} if Ord(Ptr^) <= $FF then {$ENDIF} if not FirstCharArray[byte(Ptr^)] then Continue; {$ENDIF} Result := MatchAtOnePos(Ptr); // Exit on a match or after testing the end-of-string if Result then Exit; until False; end; { of function TRegExpr.ExecPrim -------------------------------------------------------------- } function TRegExpr.ExecNext(ABackward: boolean {$IFDEF DefParam} = False{$ENDIF}): boolean; var PtrBegin, PtrEnd: PRegExprChar; Offset: PtrInt; begin PtrBegin := GrpStart[0]; PtrEnd := GrpEnd[0]; if (PtrBegin = nil) or (PtrEnd = nil) then begin Error(reeExecNextWithoutExec); Result := False; Exit; end; Offset := PtrEnd - fInputStart + 1; // prevent infinite looping if empty string matches r.e. if PtrBegin = PtrEnd then Inc(Offset); Result := ExecPrim(Offset, False, False, ABackward); end; { of function TRegExpr.ExecNext -------------------------------------------------------------- } procedure TRegExpr.SetInputString(const AInputString: RegExprString); begin ClearMatches; fInputString := AInputString; UniqueString(fInputString); fInputLength := Length(fInputString); fInputStart := PRegExprChar(fInputString); fInputEnd := fInputStart + Length(fInputString); end; procedure TRegExpr.SetInputRange(AStart, AEnd: PRegExprChar); begin fInputLength := 0; fInputString := ''; fInputStart := AStart; fInputEnd := AEnd; end; {$IFDEF UseLineSep} procedure TRegExpr.SetLineSeparators(const AStr: RegExprString); begin if AStr <> fLineSeparators then begin fLineSeparators := AStr; InitLineSepArray; InvalidateProgramm; end; end; { of procedure TRegExpr.SetLineSeparators -------------------------------------------------------------- } {$ENDIF} procedure TRegExpr.SetUsePairedBreak(AValue: boolean); begin if AValue <> fUsePairedBreak then begin fUsePairedBreak := AValue; InvalidateProgramm; end; end; function TRegExpr.Substitute(const ATemplate: RegExprString): RegExprString; // perform substitutions after a regexp match var TemplateBeg, TemplateEnd: PRegExprChar; function ParseVarName(var APtr: PRegExprChar): integer; // extract name of variable: $1 or ${1} or ${name} // from APtr^, uses TemplateEnd var p: PRegExprChar; Delimited: boolean; GrpName: RegExprString; begin Result := 0; p := APtr; Delimited := (p < TemplateEnd) and (p^ = '{'); if Delimited then Inc(p); // skip left curly brace if (p < TemplateEnd) and (p^ = '&') then Inc(p) // this is '$&' or '${&}' else begin if IsDigitChar(p^) then begin while (p < TemplateEnd) and IsDigitChar(p^) do begin Result := Result * 10 + (Ord(p^) - Ord('0')); Inc(p); end end else if Delimited then begin FindGroupName(p, TemplateEnd, '}', GrpName); Result := MatchIndexFromName(GrpName); Inc(p, Length(GrpName)); end; end; if Delimited then if (p < TemplateEnd) and (p^ = '}') then Inc(p) // skip right curly brace else p := APtr; // isn't properly terminated if p = APtr then Result := -1; // no valid digits found or no right curly brace APtr := p; end; procedure FindSubstGroupIndex(var p: PRegExprChar; var Idx: integer); begin Idx := ParseVarName(p); if (Idx >= 0) and (Idx <= High(GrpIndexes)) then Idx := GrpIndexes[Idx]; end; type TSubstMode = (smodeNormal, smodeOneUpper, smodeOneLower, smodeAllUpper, smodeAllLower); var Mode: TSubstMode; p, p0, p1, ResultPtr: PRegExprChar; ResultLen, n: integer; Ch, QuotedChar: REChar; begin // Check programm and input string if not IsProgrammOk then Exit; // Note: don't check for empty fInputString, it's valid case, // e.g. user needs to replace regex "\b" to "_", it's zero match length if ATemplate = '' then begin Result := ''; Exit; end; TemplateBeg := PRegExprChar(ATemplate); TemplateEnd := TemplateBeg + Length(ATemplate); // Count result length for speed optimization. ResultLen := 0; p := TemplateBeg; while p < TemplateEnd do begin Ch := p^; Inc(p); n := -1; if Ch = SubstituteGroupChar then FindSubstGroupIndex(p, n); if n >= 0 then begin Inc(ResultLen, GrpEnd[n] - GrpStart[n]); end else begin if (Ch = EscChar) and (p < TemplateEnd) then begin // quoted or special char followed Ch := p^; Inc(p); case Ch of 'n': Inc(ResultLen, Length(fReplaceLineEnd)); 'u', 'l', 'U', 'L': { nothing } ; 'x': begin Inc(ResultLen); if (p^ = '{') then begin // skip \x{....} while ((p^ <> '}') and (p < TemplateEnd)) do p := p + 1; p := p + 1; end else p := p + 2 // skip \x.. end; else Inc(ResultLen); end; end else Inc(ResultLen); end; end; // Get memory. We do it once and it significant speed up work ! if ResultLen = 0 then begin Result := ''; Exit; end; SetLength(Result, ResultLen); // Fill Result ResultPtr := PRegExprChar(Result); p := TemplateBeg; Mode := smodeNormal; while p < TemplateEnd do begin Ch := p^; p0 := p; Inc(p); p1 := p; n := -1; if Ch = SubstituteGroupChar then FindSubstGroupIndex(p, n); if (n >= 0) then begin p0 := GrpStart[n]; p1 := GrpEnd[n]; end else begin if (Ch = EscChar) and (p < TemplateEnd) then begin // quoted or special char followed Ch := p^; Inc(p); case Ch of 'n': begin p0 := PRegExprChar(fReplaceLineEnd); p1 := p0 + Length(fReplaceLineEnd); end; 'x', 't', 'r', 'f', 'a', 'e': begin p := p - 1; // UnquoteChar expects the escaped char under the pointer QuotedChar := UnQuoteChar(p); p := p + 1; // Skip after last part of the escaped sequence - UnquoteChar stops on the last symbol of it p0 := @QuotedChar; p1 := p0 + 1; end; 'l': begin Mode := smodeOneLower; p1 := p0; end; 'L': begin Mode := smodeAllLower; p1 := p0; end; 'u': begin Mode := smodeOneUpper; p1 := p0; end; 'U': begin Mode := smodeAllUpper; p1 := p0; end; else begin Inc(p0); Inc(p1); end; end; end end; if p0 < p1 then begin while p0 < p1 do begin case Mode of smodeOneLower: begin ResultPtr^ := _LowerCase(p0^); Mode := smodeNormal; end; smodeAllLower: begin ResultPtr^ := _LowerCase(p0^); end; smodeOneUpper: begin ResultPtr^ := _UpperCase(p0^); Mode := smodeNormal; end; smodeAllUpper: begin ResultPtr^ := _UpperCase(p0^); end; else ResultPtr^ := p0^; end; Inc(ResultPtr); Inc(p0); end; Mode := smodeNormal; end; end; end; { of function TRegExpr.Substitute -------------------------------------------------------------- } procedure TRegExpr.Split(const AInputStr: RegExprString; APieces: TStrings); var PrevPos: PtrInt; begin PrevPos := 1; if Exec(AInputStr) then repeat APieces.Add(System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos)); PrevPos := MatchPos[0] + MatchLen[0]; until not ExecNext; APieces.Add(System.Copy(AInputStr, PrevPos, MaxInt)); // Tail end; { of procedure TRegExpr.Split -------------------------------------------------------------- } function TRegExpr.Replace(const AInputStr: RegExprString; const AReplaceStr: RegExprString; AUseSubstitution: boolean{$IFDEF DefParam} = False{$ENDIF}): RegExprString; var PrevPos: PtrInt; begin Result := ''; PrevPos := 1; if Exec(AInputStr) then repeat Result := Result + System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos); if AUseSubstitution // ###0.946 then Result := Result + Substitute(AReplaceStr) else Result := Result + AReplaceStr; PrevPos := MatchPos[0] + MatchLen[0]; until not ExecNext; Result := Result + System.Copy(AInputStr, PrevPos, MaxInt); // Tail end; { of function TRegExpr.Replace -------------------------------------------------------------- } function TRegExpr.ReplaceEx(const AInputStr: RegExprString; AReplaceFunc: TRegExprReplaceFunction): RegExprString; var PrevPos: PtrInt; begin Result := ''; PrevPos := 1; if Exec(AInputStr) then repeat Result := Result + System.Copy(AInputStr, PrevPos, MatchPos[0] - PrevPos) + AReplaceFunc(Self); PrevPos := MatchPos[0] + MatchLen[0]; until not ExecNext; Result := Result + System.Copy(AInputStr, PrevPos, MaxInt); // Tail end; { of function TRegExpr.ReplaceEx -------------------------------------------------------------- } {$IFDEF OverMeth} function TRegExpr.Replace(const AInputStr: RegExprString; AReplaceFunc: TRegExprReplaceFunction): RegExprString; begin Result := ReplaceEx(AInputStr, AReplaceFunc); end; { of function TRegExpr.Replace -------------------------------------------------------------- } {$ENDIF} { ============================================================= } { ====================== Debug section ======================== } { ============================================================= } {$IFDEF UseFirstCharSet} procedure TRegExpr.FillFirstCharSet(prog: PRegExprChar); var scan: PRegExprChar; // Current node. Next: PRegExprChar; // Next node. opnd: PRegExprChar; Oper: TREOp; ch: REChar; min_cnt, i: integer; TempSet: TRegExprCharset; begin TempSet := []; scan := prog; while scan <> nil do begin Next := regNext(scan); Oper := PREOp(scan)^; case Oper of OP_BSUBEXP, OP_BSUBEXPCI: begin // we cannot optimize r.e. if it starts with back reference FirstCharSet := RegExprAllSet; //###0.930 Exit; end; OP_BOL, OP_BOLML: ; // Exit; //###0.937 OP_EOL, OP_EOL2, OP_EOLML: begin //###0.948 was empty in 0.947, was EXIT in 0.937 Include(FirstCharSet, 0); if ModifierM then begin {$IFDEF UseLineSep} for i := 1 to Length(LineSeparators) do Include(FirstCharSet, byte(LineSeparators[i])); {$ELSE} FirstCharSet := FirstCharSet + RegExprLineSeparatorsSet; {$ENDIF} end; Exit; end; OP_BOUND, OP_NOTBOUND: ; //###0.943 ?!! OP_ANY, OP_ANYML: begin // we can better define ANYML !!! FirstCharSet := RegExprAllSet; //###0.930 Exit; end; OP_ANYDIGIT: begin FirstCharSet := FirstCharSet + RegExprDigitSet; Exit; end; OP_NOTDIGIT: begin FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprDigitSet); Exit; end; OP_ANYLETTER: begin GetCharSetFromWordChars(TempSet); FirstCharSet := FirstCharSet + TempSet; Exit; end; OP_NOTLETTER: begin GetCharSetFromWordChars(TempSet); FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); Exit; end; OP_ANYSPACE: begin GetCharSetFromSpaceChars(TempSet); FirstCharSet := FirstCharSet + TempSet; Exit; end; OP_NOTSPACE: begin GetCharSetFromSpaceChars(TempSet); FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); Exit; end; OP_ANYVERTSEP: begin FirstCharSet := FirstCharSet + RegExprLineSeparatorsSet; Exit; end; OP_NOTVERTSEP: begin FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprLineSeparatorsSet); Exit; end; OP_ANYHORZSEP: begin FirstCharSet := FirstCharSet + RegExprHorzSeparatorsSet; Exit; end; OP_NOTHORZSEP: begin FirstCharSet := FirstCharSet + (RegExprAllSet - RegExprHorzSeparatorsSet); Exit; end; OP_EXACTLYCI: begin ch := (scan + REOpSz + RENextOffSz + RENumberSz)^; {$IFDEF UniCode} if Ord(ch) <= $FF then {$ENDIF} begin Include(FirstCharSet, byte(ch)); Include(FirstCharSet, byte(InvertCase(ch))); end; Exit; end; OP_EXACTLY: begin ch := (scan + REOpSz + RENextOffSz + RENumberSz)^; {$IFDEF UniCode} if Ord(ch) <= $FF then {$ENDIF} Include(FirstCharSet, byte(ch)); Exit; end; OP_ANYOF: begin GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, False, TempSet); FirstCharSet := FirstCharSet + TempSet; Exit; end; OP_ANYBUT: begin GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, False, TempSet); FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); Exit; end; OP_ANYOFCI: begin GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, True, TempSet); FirstCharSet := FirstCharSet + TempSet; Exit; end; OP_ANYBUTCI: begin GetCharSetFromCharClass(scan + REOpSz + RENextOffSz, True, TempSet); FirstCharSet := FirstCharSet + (RegExprAllSet - TempSet); Exit; end; OP_NOTHING: ; OP_COMMENT: ; OP_BACK: ; OP_OPEN_FIRST .. OP_OPEN_LAST: begin FillFirstCharSet(Next); Exit; end; OP_CLOSE_FIRST .. OP_CLOSE_LAST: begin FillFirstCharSet(Next); Exit; end; OP_BRANCH: begin if (PREOp(Next)^ <> OP_BRANCH) // No choice. then Next := scan + REOpSz + RENextOffSz // Avoid recursion. else begin repeat FillFirstCharSet(scan + REOpSz + RENextOffSz); scan := regNext(scan); until (scan = nil) or (PREOp(scan)^ <> OP_BRANCH); Exit; end; end; {$IFDEF ComplexBraces} OP_LOOPENTRY: begin //###0.925 //LoopStack [LoopStackIdx] := 0; //###0.940 line removed FillFirstCharSet(Next); // execute LOOP Exit; end; OP_LOOP, OP_LOOPNG: begin //###0.940 opnd := scan + PRENextOff(AlignToPtr(scan + REOpSz + RENextOffSz + REBracesArgSz * 2))^; min_cnt := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; FillFirstCharSet(opnd); if min_cnt = 0 then FillFirstCharSet(Next); Exit; end; {$ENDIF} OP_STAR, OP_STARNG, OP_STAR_POSS: //###0.940 FillFirstCharSet(scan + REOpSz + RENextOffSz); OP_PLUS, OP_PLUSNG, OP_PLUS_POSS: begin //###0.940 FillFirstCharSet(scan + REOpSz + RENextOffSz); Exit; end; OP_BRACES, OP_BRACESNG, OP_BRACES_POSS: begin //###0.940 opnd := scan + REOpSz + RENextOffSz + REBracesArgSz * 2; min_cnt := PREBracesArg(AlignToPtr(scan + REOpSz + RENextOffSz))^; // BRACES FillFirstCharSet(opnd); if min_cnt > 0 then Exit; end; OP_EEND: begin FirstCharSet := RegExprAllSet; //###0.948 Exit; end; OP_ANYCATEGORY, OP_NOTCATEGORY: begin FirstCharSet := RegExprAllSet; Exit; end; OP_RECUR, OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: begin end else begin fLastErrorOpcode := Oper; Error(reeUnknownOpcodeInFillFirst); Exit; end; end; { of case scan^} scan := Next; end; { of while scan <> nil} end; { of procedure FillFirstCharSet --------------------------------------------------------------} {$ENDIF} procedure TRegExpr.InitCharCheckers; var Cnt: integer; // function Add(AChecker: TRegExprCharChecker): byte; begin Inc(Cnt); if Cnt > High(CharCheckers) then Error(reeTooSmallCheckersArray); CharCheckers[Cnt - 1] := AChecker; Result := Cnt - 1; end; // begin Cnt := 0; FillChar(CharCheckers, SizeOf(CharCheckers), 0); CheckerIndex_Word := Add(CharChecker_Word); CheckerIndex_NotWord := Add(CharChecker_NotWord); CheckerIndex_Space := Add(CharChecker_Space); CheckerIndex_NotSpace := Add(CharChecker_NotSpace); CheckerIndex_Digit := Add(CharChecker_Digit); CheckerIndex_NotDigit := Add(CharChecker_NotDigit); CheckerIndex_VertSep := Add(CharChecker_VertSep); CheckerIndex_NotVertSep := Add(CharChecker_NotVertSep); CheckerIndex_HorzSep := Add(CharChecker_HorzSep); CheckerIndex_NotHorzSep := Add(CharChecker_NotHorzSep); //CheckerIndex_AllAZ := Add(CharChecker_AllAZ); CheckerIndex_LowerAZ := Add(CharChecker_LowerAZ); CheckerIndex_UpperAZ := Add(CharChecker_UpperAZ); SetLength(CharCheckerInfos, 3); with CharCheckerInfos[0] do begin CharBegin := 'a'; CharEnd:= 'z'; CheckerIndex := CheckerIndex_LowerAZ; end; with CharCheckerInfos[1] do begin CharBegin := 'A'; CharEnd := 'Z'; CheckerIndex := CheckerIndex_UpperAZ; end; with CharCheckerInfos[2] do begin CharBegin := '0'; CharEnd := '9'; CheckerIndex := CheckerIndex_Digit; end; end; function TRegExpr.CharChecker_Word(ch: REChar): boolean; begin Result := IsWordChar(ch); end; function TRegExpr.CharChecker_NotWord(ch: REChar): boolean; begin Result := not IsWordChar(ch); end; function TRegExpr.CharChecker_Space(ch: REChar): boolean; begin Result := IsSpaceChar(ch); end; function TRegExpr.CharChecker_NotSpace(ch: REChar): boolean; begin Result := not IsSpaceChar(ch); end; function TRegExpr.CharChecker_Digit(ch: REChar): boolean; begin Result := IsDigitChar(ch); end; function TRegExpr.CharChecker_NotDigit(ch: REChar): boolean; begin Result := not IsDigitChar(ch); end; function TRegExpr.CharChecker_VertSep(ch: REChar): boolean; begin Result := IsVertLineSeparator(ch); end; function TRegExpr.CharChecker_NotVertSep(ch: REChar): boolean; begin Result := not IsVertLineSeparator(ch); end; function TRegExpr.CharChecker_HorzSep(ch: REChar): boolean; begin Result := IsHorzSeparator(ch); end; function TRegExpr.CharChecker_NotHorzSep(ch: REChar): boolean; begin Result := not IsHorzSeparator(ch); end; function TRegExpr.CharChecker_LowerAZ(ch: REChar): boolean; begin case ch of 'a' .. 'z': Result := True; else Result := False; end; end; function TRegExpr.CharChecker_UpperAZ(ch: REChar): boolean; begin case ch of 'A' .. 'Z': Result := True; else Result := False; end; end; {$IFDEF RegExpPCodeDump} function TRegExpr.DumpOp(op: TREOp): RegExprString; // printable representation of opcode begin case op of OP_BOL: Result := 'BOL'; OP_EOL: Result := 'EOL'; OP_EOL2: Result := 'EOL2'; OP_BOLML: Result := 'BOLML'; OP_EOLML: Result := 'EOLML'; OP_BOUND: Result := 'BOUND'; OP_NOTBOUND: Result := 'NOTBOUND'; OP_ANY: Result := 'ANY'; OP_ANYML: Result := 'ANYML'; OP_ANYLETTER: Result := 'ANYLETTER'; OP_NOTLETTER: Result := 'NOTLETTER'; OP_ANYDIGIT: Result := 'ANYDIGIT'; OP_NOTDIGIT: Result := 'NOTDIGIT'; OP_ANYSPACE: Result := 'ANYSPACE'; OP_NOTSPACE: Result := 'NOTSPACE'; OP_ANYHORZSEP: Result := 'ANYHORZSEP'; OP_NOTHORZSEP: Result := 'NOTHORZSEP'; OP_ANYVERTSEP: Result := 'ANYVERTSEP'; OP_NOTVERTSEP: Result := 'NOTVERTSEP'; OP_ANYOF: Result := 'ANYOF'; OP_ANYBUT: Result := 'ANYBUT'; OP_ANYOFCI: Result := 'ANYOF/CI'; OP_ANYBUTCI: Result := 'ANYBUT/CI'; OP_BRANCH: Result := 'BRANCH'; OP_EXACTLY: Result := 'EXACTLY'; OP_EXACTLYCI: Result := 'EXACTLY/CI'; OP_NOTHING: Result := 'NOTHING'; OP_COMMENT: Result := 'COMMENT'; OP_BACK: Result := 'BACK'; OP_EEND: Result := 'END'; OP_BSUBEXP: Result := 'BSUBEXP'; OP_BSUBEXPCI: Result := 'BSUBEXP/CI'; OP_OPEN_FIRST .. OP_OPEN_LAST: Result := Format('OPEN[%d]', [Ord(op) - Ord(OP_OPEN)]); OP_CLOSE_FIRST .. OP_CLOSE_LAST: Result := Format('CLOSE[%d]', [Ord(op) - Ord(OP_CLOSE)]); OP_STAR: Result := 'STAR'; OP_PLUS: Result := 'PLUS'; OP_BRACES: Result := 'BRACES'; {$IFDEF ComplexBraces} OP_LOOPENTRY: Result := 'LOOPENTRY'; OP_LOOP: Result := 'LOOP'; OP_LOOPNG: Result := 'LOOPNG'; {$ENDIF} OP_STARNG: Result := 'STARNG'; OP_PLUSNG: Result := 'PLUSNG'; OP_BRACESNG: Result := 'BRACESNG'; OP_STAR_POSS: Result := 'STAR_POSS'; OP_PLUS_POSS: Result := 'PLUS_POSS'; OP_BRACES_POSS: Result := 'BRACES_POSS'; OP_ANYCATEGORY: Result := 'ANYCATEG'; OP_NOTCATEGORY: Result := 'NOTCATEG'; OP_RECUR: Result := 'RECURSION'; OP_SUBCALL_FIRST .. OP_SUBCALL_LAST: Result := Format('SUBCALL[%d]', [Ord(op) - Ord(OP_SUBCALL)]); else Error(reeDumpCorruptedOpcode); end; end; { of function TRegExpr.DumpOp -------------------------------------------------------------- } function TRegExpr.IsCompiled: boolean; begin Result := programm <> nil; end; function PrintableChar(AChar: REChar): RegExprString; {$IFDEF InlineFuncs}inline;{$ENDIF} begin if AChar < ' ' then Result := '#' + IntToStr(Ord(AChar)) else Result := AChar; end; function TRegExpr.DumpCheckerIndex(N: byte): RegExprString; begin Result := '?'; if N = CheckerIndex_Word then Result := '\w' else if N = CheckerIndex_NotWord then Result := '\W' else if N = CheckerIndex_Digit then Result := '\d' else if N = CheckerIndex_NotDigit then Result := '\D' else if N = CheckerIndex_Space then Result := '\s' else if N = CheckerIndex_NotSpace then Result := '\S' else if N = CheckerIndex_HorzSep then Result := '\h' else if N = CheckerIndex_NotHorzSep then Result := '\H' else if N = CheckerIndex_VertSep then Result := '\v' else if N = CheckerIndex_NotVertSep then Result := '\V' else if N = CheckerIndex_LowerAZ then Result := 'az' else if N = CheckerIndex_UpperAZ then Result := 'AZ' else ; end; function TRegExpr.DumpCategoryChars(ch, ch2: REChar; Positive: boolean): RegExprString; const S: array[boolean] of RegExprString = ('P', 'p'); begin Result := '\' + S[Positive] + '{' + ch; if ch2 <> #0 then Result := Result + ch2; Result := Result + '} '; end; function TRegExpr.Dump: RegExprString; // dump a regexp in vaguely comprehensible form var s: PRegExprChar; op: TREOp; // Arbitrary non-END op. next: PRegExprChar; i, NLen: integer; Diff: PtrInt; iByte: byte; ch, ch2: REChar; begin if not IsProgrammOk then Exit; op := OP_EXACTLY; Result := ''; s := regCodeWork; while op <> OP_EEND do begin // While that wasn't END last time... op := s^; Result := Result + Format('%2d: %s', [s - programm, DumpOp(s^)]); // Where, what. next := regNext(s); if next = nil // Next ptr. then Result := Result + ' (0)' else begin if next > s // ###0.948 PWideChar subtraction workaround (see comments in Tail method for details) then Diff := next - s else Diff := -(s - next); Result := Result + Format(' (%d) ', [(s - programm) + Diff]); end; Inc(s, REOpSz + RENextOffSz); if (op = OP_ANYOF) or (op = OP_ANYOFCI) or (op = OP_ANYBUT) or (op = OP_ANYBUTCI) then begin repeat case s^ of OpKind_End: begin Inc(s); Break; end; OpKind_Range: begin Result := Result + 'Rng('; Inc(s); Result := Result + PrintableChar(s^) + '-'; Inc(s); Result := Result + PrintableChar(s^); Result := Result + ') '; Inc(s); end; OpKind_MetaClass: begin Inc(s); Result := Result + DumpCheckerIndex(byte(s^)) + ' '; Inc(s); end; OpKind_Char: begin Inc(s); NLen := PLongInt(s)^; Inc(s, RENumberSz); Result := Result + 'Ch('; for i := 1 to NLen do begin Result := Result + PrintableChar(s^); Inc(s); end; Result := Result + ') '; end; OpKind_CategoryYes: begin Inc(s); ch := s^; Inc(s); ch2 := s^; Result := Result + DumpCategoryChars(ch, ch2, True); Inc(s); end; OpKind_CategoryNo: begin Inc(s); ch := s^; Inc(s); ch2 := s^; Result := Result + DumpCategoryChars(ch, ch2, False); Inc(s); end; else Error(reeDumpCorruptedOpcode); end; until false; end; if (op = OP_EXACTLY) or (op = OP_EXACTLYCI) then begin // Literal string, where present. NLen := PLongInt(s)^; Inc(s, RENumberSz); for i := 1 to NLen do begin Result := Result + PrintableChar(s^); Inc(s); end; end; if (op = OP_BSUBEXP) or (op = OP_BSUBEXPCI) then begin Result := Result + ' \' + IntToStr(Ord(s^)); Inc(s); end; if (op = OP_BRACES) or (op = OP_BRACESNG) or (op = OP_BRACES_POSS) then begin // ###0.941 // show min/max argument of braces operator Result := Result + Format('{%d,%d}', [PREBracesArg(AlignToInt(s))^, PREBracesArg(AlignToInt(s + REBracesArgSz))^]); Inc(s, REBracesArgSz * 2); end; {$IFDEF ComplexBraces} if (op = OP_LOOP) or (op = OP_LOOPNG) then begin // ###0.940 Result := Result + Format(' -> (%d) {%d,%d}', [(s - programm - (REOpSz + RENextOffSz)) + PRENextOff(AlignToPtr(s + 2 * REBracesArgSz))^, PREBracesArg(AlignToInt(s))^, PREBracesArg(AlignToInt(s + REBracesArgSz))^]); Inc(s, 2 * REBracesArgSz + RENextOffSz); end; {$ENDIF} if (op = OP_ANYCATEGORY) or (op = OP_NOTCATEGORY) then begin ch := s^; Inc(s); ch2 := s^; Inc(s); if ch2<>#0 then Result := Result + '{' + ch + ch2 + '}' else Result := Result + '{' + ch + '}'; end; Result := Result + #$d#$a; end; { of while } // Header fields of interest. if regAnchored <> #0 then Result := Result + 'Anchored; '; if regMustString <> '' then Result := Result + 'Must have: "' + regMustString + '"; '; {$IFDEF UseFirstCharSet} // ###0.929 Result := Result + #$d#$a'First charset: '; if FirstCharSet = [] then Result := Result + '<empty set>' else if FirstCharSet = RegExprAllSet then Result := Result + '<all chars>' else for iByte := 0 to 255 do if iByte in FirstCharSet then Result := Result + PrintableChar(REChar(iByte)); {$ENDIF} Result := Result + #$d#$a; end; { of function TRegExpr.Dump -------------------------------------------------------------- } {$ENDIF} function TRegExpr.IsFixedLength(var op: TREOp; var ALen: integer): boolean; var s, next: PRegExprChar; N, N2: integer; begin Result := False; ALen := 0; if not IsCompiled then Exit; s := regCodeWork; repeat next := regNext(s); op := s^; Inc(s, REOpSz + RENextOffSz); case op of OP_EEND: begin Result := True; Exit; end; OP_BRANCH: begin op := next^; if op <> OP_EEND then Exit; end; OP_COMMENT, OP_BOUND, OP_NOTBOUND: Continue; OP_ANY, OP_ANYML, OP_ANYDIGIT, OP_NOTDIGIT, OP_ANYLETTER, OP_NOTLETTER, OP_ANYSPACE, OP_NOTSPACE, OP_ANYHORZSEP, OP_NOTHORZSEP, OP_ANYVERTSEP, OP_NOTVERTSEP: begin Inc(ALen); Continue; end; OP_ANYOF, OP_ANYOFCI, OP_ANYBUT, OP_ANYBUTCI: begin Inc(ALen); repeat case s^ of OpKind_End: begin Inc(s); Break; end; OpKind_Range: begin Inc(s); Inc(s); Inc(s); end; OpKind_MetaClass: begin Inc(s); Inc(s); end; OpKind_Char: begin Inc(s); Inc(s, RENumberSz + PLongInt(s)^); end; OpKind_CategoryYes, OpKind_CategoryNo: begin Inc(s); Inc(s); Inc(s); end; end; until False; end; OP_EXACTLY, OP_EXACTLYCI: begin N := PLongInt(s)^; Inc(ALen, N); Inc(s, RENumberSz + N); Continue; end; OP_ANYCATEGORY, OP_NOTCATEGORY: begin Inc(ALen); Inc(s, 2); Continue; end; OP_BRACES, OP_BRACESNG, OP_BRACES_POSS: begin // allow only d{n,n} N := PREBracesArg(AlignToInt(s))^; N2 := PREBracesArg(AlignToInt(s + REBracesArgSz))^; if N <> N2 then Exit; Inc(ALen, N-1); Inc(s, REBracesArgSz * 2); end; else Exit; end; until False; end; {$IFDEF reRealExceptionAddr} {$OPTIMIZATION ON} // ReturnAddr works correctly only if compiler optimization is ON // I placed this method at very end of unit because there are no // way to restore compiler optimization flag ... {$ENDIF} procedure TRegExpr.Error(AErrorID: integer); {$IFDEF reRealExceptionAddr} function ReturnAddr: Pointer; // ###0.938 asm mov eax,[ebp+4] end; {$ENDIF} var e: ERegExpr; Msg: string; begin fLastError := AErrorID; // dummy stub - useless because will raise exception Msg := ErrorMsg(AErrorID); // compilation error ? if AErrorID < reeFirstRuntimeCode then Msg := Msg + ' (pos ' + IntToStr(CompilerErrorPos) + ')'; e := ERegExpr.Create(Msg); e.ErrorCode := AErrorID; e.CompilerErrorPos := CompilerErrorPos; raise e {$IFDEF reRealExceptionAddr} at ReturnAddr {$ENDIF}; end; { of procedure TRegExpr.Error -------------------------------------------------------------- } end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uregexpr.pas�������������������������������������������������������������������0000644�0001750�0000144�00000010673�15104114162�015731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uRegExpr; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LConvEncoding, uConvEncoding, uRegExprA, uRegExprW, uRegExprU; type TRegExprType = (retAnsi, retUtf16le, retUtf8); type { TRegExprEx } TRegExprEx = class private FEncoding: String; FRegExpA: TRegExpr; FRegExpW: TRegExprW; FRegExpU: TRegExprU; FType: TRegExprType; function GetModifierI: Boolean; procedure SetModifierI(AValue: Boolean); procedure SetExpression(const AValue: String); function GetMatchLen(Idx : Integer): PtrInt; function GetMatchPos(Idx : Integer): PtrInt; public constructor Create(const AEncoding: String = EncodingDefault; ASetEncoding: Boolean = False); destructor Destroy; override; function Exec(AOffset: UIntPtr = 1): Boolean; function ReplaceAll(const AExpression, AStr, AReplacement: String): String; procedure ChangeEncoding(const AEncoding: String); procedure SetInputString(AInputString : Pointer; ALength : UIntPtr); public property Expression : String write SetExpression; property MatchPos [Idx : Integer] : PtrInt read GetMatchPos; property MatchLen [Idx : Integer] : PtrInt read GetMatchLen; property ModifierI: Boolean read GetModifierI write SetModifierI; end; implementation uses LazUTF8; { TRegExprEx } function TRegExprEx.GetModifierI: Boolean; begin case FType of retAnsi: Result:= FRegExpA.ModifierI; retUtf8: Result:= FRegExpU.ModifierI; retUtf16le: Result:= FRegExpW.ModifierI; end; end; procedure TRegExprEx.SetModifierI(AValue: Boolean); begin case FType of retAnsi: FRegExpA.ModifierI:= AValue; retUtf8: FRegExpU.ModifierI:= AValue; retUtf16le: FRegExpW.ModifierI:= AValue; end; end; procedure TRegExprEx.SetExpression(const AValue: String); begin case FType of retUtf8: FRegExpU.Expression:= AValue; retUtf16le: FRegExpW.Expression:= UTF8ToUTF16(AValue); retAnsi: FRegExpA.Expression:= ConvertEncoding(AValue, EncodingUTF8, FEncoding); end; end; function TRegExprEx.GetMatchLen(Idx: Integer): PtrInt; begin case FType of retAnsi: Result:= FRegExpA.MatchLen[Idx]; retUtf8: Result:= FRegExpU.MatchLen[Idx]; retUtf16le: Result:= FRegExpW.MatchLen[Idx] * SizeOf(WideChar); end; end; function TRegExprEx.GetMatchPos(Idx: Integer): PtrInt; begin case FType of retAnsi: Result:= FRegExpA.MatchPos[Idx]; retUtf8: Result:= FRegExpU.MatchPos[Idx]; retUtf16le: Result:= FRegExpW.MatchPos[Idx] * SizeOf(WideChar); end; end; constructor TRegExprEx.Create(const AEncoding: String; ASetEncoding: Boolean = False); begin FRegExpW:= TRegExprW.Create; FRegExpU:= TRegExprU.Create; FRegExpA:= TRegExpr.Create(AEncoding); if ASetEncoding then ChangeEncoding(AEncoding); end; destructor TRegExprEx.Destroy; begin FRegExpA.Free; FRegExpW.Free; FRegExpU.Free; inherited Destroy; end; function TRegExprEx.Exec(AOffset: UIntPtr): Boolean; begin case FType of retAnsi: Result:= FRegExpA.Exec(AOffset); retUtf8: Result:= FRegExpU.Exec(AOffset); retUtf16le: Result:= FRegExpW.Exec((AOffset + 1) div SizeOf(WideChar)); end; end; function TRegExprEx.ReplaceAll(const AExpression, AStr, AReplacement: String): String; var InputString: String; begin case FType of retAnsi: Result := FRegExpA.ReplaceRegExpr(AExpression, AStr, AReplacement, True); retUtf8: begin FRegExpU.Expression := AExpression; InputString := AStr; FRegExpU.SetInputString(PAnsiChar(InputString), Length(InputString)); if not FRegExpU.ReplaceAll(AReplacement, Result) then Result := InputString; end; retUtf16le: Result := AStr; // TODO : Implement ReplaceAll for TRegExprW end; end; procedure TRegExprEx.ChangeEncoding(const AEncoding: String); begin FEncoding:= NormalizeEncoding(AEncoding); if FEncoding = EncodingDefault then FEncoding:= GetDefaultTextEncoding; if FEncoding = EncodingUTF16LE then FType:= retUtf16le else if (FEncoding = EncodingUTF8) or (FEncoding = EncodingUTF8BOM) then FType:= retUtf8 else begin FType:= retAnsi; FRegExpA.ChangeEncoding(FEncoding); end; end; procedure TRegExprEx.SetInputString(AInputString: Pointer; ALength: UIntPtr); begin case FType of retAnsi: FRegExpA.SetInputString(AInputString, ALength); retUtf8: FRegExpU.SetInputString(AInputString, ALength); retUtf16le: FRegExpW.SetInputString(AInputString, ALength div SizeOf(WideChar)); end; end; end. ���������������������������������������������������������������������doublecmd-1.1.30/src/uquickviewpanel.pas������������������������������������������������������������0000644�0001750�0000144�00000024205�15104114162�017300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Quick view panel Copyright (C) 2009-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uQuickViewPanel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, fViewer, uFileViewNotebook, uFile, uFileSource, uFileView; type { TQuickViewPanel } TQuickViewPanel = class(TPanel) private FFirstFile: Boolean; FFileViewPage: TFileViewPage; FFileView: TFileView; FFileSource: IFileSource; FViewer: TfrmViewer; FFileName: String; FTempFileSource: IFileSource; FLastFocusedControl: TWinControl; private procedure LoadFile(const aFileName: String); procedure OnChangeFileView(Sender: TObject); procedure CreateViewer(aFileView: TFileView); procedure FileViewChangeActiveFile(Sender: TFileView; const aFile : TFile); function handleLinksToLocal( const Sender:TFileView; const aFile:TFile; var fullPath:String; var showMsg:String ): Boolean; function handleNotDirect( const Sender:TFileView; const aFile:TFile; var fullPath:String; var showMsg:String ): TDuplicates; function handleDirect( const Sender:TFileView; const aFile:TFile; var fullPath:String; var showMsg:String ): Boolean; procedure PrepareView(const aFile: TFile; var FileName: String); protected procedure DoOnShowHint(HintInfo: PHintInfo) override; public constructor Create(TheOwner: TComponent; aParent: TFileViewPage); reintroduce; destructor Destroy; override; end; procedure QuickViewShow(aFileViewPage: TFileViewPage; aFileView: TFileView); procedure QuickViewClose; var QuickViewPanel: TQuickViewPanel; implementation uses LCLProc, Forms, DCOSUtils, DCStrUtils, fMain, uTempFileSystemFileSource, uLng, uFileSourceProperty, uFileSourceOperation, uFileSourceOperationTypes, uGlobs, uShellExecute; procedure QuickViewShow(aFileViewPage: TFileViewPage; aFileView: TFileView); var aFile: TFile; begin frmMain.actQuickView.Enabled:= False; try QuickViewPanel:= TQuickViewPanel.Create(Application, aFileViewPage); QuickViewPanel.CreateViewer(aFileView); aFile := aFileView.CloneActiveFile; try QuickViewPanel.FileViewChangeActiveFile(aFileView, aFile); finally FreeAndNil(aFile); end; finally frmMain.actQuickView.Enabled:= True; frmMain.actQuickView.Checked:= True; end; end; procedure QuickViewClose; begin if Assigned(QuickViewPanel) then begin FreeAndNil(QuickViewPanel); frmMain.actQuickView.Checked:= False; end; end; { TQuickViewPanel } procedure TQuickViewPanel.DoOnShowHint(HintInfo: PHintInfo); begin HintInfo^.HintStr:= ''; end; constructor TQuickViewPanel.Create(TheOwner: TComponent; aParent: TFileViewPage); begin inherited Create(TheOwner); Parent:= aParent; Align:= alClient; FFileViewPage:= aParent; FFileSource:= nil; FViewer:= nil; end; destructor TQuickViewPanel.Destroy; begin FFileView.OnChangeActiveFile:= nil; TFileViewPage(FFileView.NotebookPage).OnChangeFileView:= nil; FViewer.ExitQuickView; FFileViewPage.FileView.Visible:= True; FreeAndNil(FViewer); FFileSource:= nil; FFileView.SetFocus; inherited Destroy; end; procedure TQuickViewPanel.CreateViewer(aFileView: TFileView); begin FViewer:= TfrmViewer.Create(Self, nil, True); FViewer.Parent:= Self; FViewer.ShowHint:= false; FViewer.BorderStyle:= bsNone; FViewer.Align:= alClient; FFirstFile:= True; FFileView:= aFileView; FFileSource:= aFileView.FileSource; FFileViewPage.FileView.Visible:= False; FFileView.OnChangeActiveFile:= @FileViewChangeActiveFile; with ClientRect do FViewer.SetBounds(Left, Top, Width, Height); TFileViewPage(FFileView.NotebookPage).OnChangeFileView:= @OnChangeFileView; end; procedure TQuickViewPanel.LoadFile(const aFileName: String); begin if (not FFirstFile) then begin FViewer.LoadNextFile(aFileName); end else begin FFirstFile:= False; Caption:= EmptyStr; FViewer.LoadFile(aFileName); FViewer.Show; end; // Viewer can steal focus, so restore it if Assigned(FLastFocusedControl) and FLastFocusedControl.CanSetFocus then FLastFocusedControl.SetFocus else if not FFileView.Focused then FFileView.SetFocus; end; procedure TQuickViewPanel.OnChangeFileView(Sender: TObject); begin FFileView:= TFileView(Sender); FFileView.OnChangeActiveFile:= @FileViewChangeActiveFile; end; procedure TQuickViewPanel.FileViewChangeActiveFile(Sender: TFileView; const aFile: TFile); var fullPath: String; showMsg: String; begin fullPath:= EmptyStr; showMsg:= EmptyStr; FLastFocusedControl:= TCustomForm(Self.GetTopParent).ActiveControl; try if not Assigned(aFile) then raise EAbort.Create(rsMsgErrNotSupported); if not handleLinksToLocal(Sender, aFile, fullPath, showMsg) then begin case handleNotDirect(Sender, aFile, fullPath, showMsg) of dupError: handleDirect(Sender, aFile, fullPath, showMsg); dupIgnore: Exit; end; end; if fullPath.IsEmpty() and ShowMsg.IsEmpty() then showMsg:= rsMsgErrNotSupported; except on E: EAbort do begin showMsg:= E.Message; end; end; if not fullPath.IsEmpty() then begin PrepareView(aFile, fullPath); LoadFile( fullPath ); end else begin FViewer.Hide; FFirstFile:= True; Caption:= showMsg; FViewer.LoadFile(EmptyStr); end; end; // return true if it should handle it, otherwise return false // If files are links to local files // for example: results from searching function TQuickViewPanel.handleLinksToLocal( const Sender:TFileView; const aFile:TFile; var fullPath:String; var showMsg:String ): Boolean; var ActiveFile: TFile = nil; begin if not (fspLinksToLocalFiles in Sender.FileSource.Properties) then exit(false); Result:= true; if not aFile.IsNameValid then exit; FFileSource := Sender.FileSource; ActiveFile:= aFile.Clone; try if not FFileSource.GetLocalName(ActiveFile) then exit; fullPath:= ActiveFile.FullPath; finally FreeAndNil(ActiveFile); end; end; // return true if it should handle it, otherwise return false // If files not directly accessible copy them to temp file source. // for examples: ftp function TQuickViewPanel.handleNotDirect(const Sender: TFileView; const aFile: TFile; var fullPath: String; var showMsg: String): TDuplicates; var ActiveFile: TFile = nil; TempFiles: TFiles = nil; Operation: TFileSourceOperation = nil; TempFileSource: ITempFileSystemFileSource = nil; begin if (fspDirectAccess in Sender.FileSource.Properties) then Exit(dupError); if mbCompareFileNames(FFileName, aFile.FullPath) then Exit(dupIgnore); Result:= dupAccept; FFileName:= aFile.FullPath; if aFile.IsDirectory or aFile.IsLinkToDirectory then exit; if not (fsoCopyOut in Sender.FileSource.GetOperationsTypes) then exit; ActiveFile:= aFile.Clone; TempFiles:= TFiles.Create(ActiveFile.Path); TempFiles.Add(aFile.Clone); try if FFileSource.IsClass(TTempFileSystemFileSource) then TempFileSource := (FFileSource as ITempFileSystemFileSource) else TempFileSource := TTempFileSystemFileSource.GetFileSource; Operation := Sender.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if not Assigned(Operation) then exit; Sender.Enabled:= False; try Operation.Execute; finally FreeAndNil(Operation); Sender.Enabled:= True; end; FFileSource := TempFileSource; ActiveFile.Path:= TempFileSource.FileSystemRoot; fullPath:= ActiveFile.FullPath; finally FreeAndNil(TempFiles); FreeAndNil(ActiveFile); end; end; // return true if it should handle it, otherwise return false // for examples: file system function TQuickViewPanel.handleDirect( const Sender:TFileView; const aFile:TFile; var fullPath:String; var showMsg:String ): Boolean; var parentDir: String; begin Result:= true; FFileSource:= Sender.FileSource; if aFile.IsNameValid then begin fullPath:= aFile.FullPath; end else begin parentDir:= FFileSource.GetParentDir( aFile.Path ); if FFileSource.IsPathAtRoot(parentDir) then showMsg:= rsPropsFolder + ': ' + parentDir else fullPath:= ExcludeTrailingBackslash(parentDir); end; end; procedure TQuickViewPanel.PrepareView(const aFile: TFile; var FileName: String); var ATemp: TFile; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; bAbortOperationFlag: Boolean = False; bShowCommandLinePriorToExecute: Boolean = False; begin // Try to find 'view' command in the internal associations if gExts.GetExtActionCmd(aFile, 'view', sCmd, sParams, sStartPath) then begin // Internal viewer command if sCmd = '{!DC-VIEWER}' then begin ATemp:= AFile.Clone; try ATemp.FullPath:= FileName; sParams:= PrepareParameter(sParams, ATemp, [], @bShowCommandLinePriorToExecute, nil, nil, @bAbortOperationFlag); finally ATemp.Free; end; if not bAbortOperationFlag then begin if StrBegins(sParams, '<?') and (StrEnds(sParams, '?>')) then begin if (FTempFileSource = nil) then begin if FFileSource is TTempFileSystemFileSource then FTempFileSource:= FFileSource else FTempFileSource:= TTempFileSystemFileSource.GetFileSource; end; PrepareOutput(sParams, sStartPath, FTempFileSource.GetRootDir); if mbFileExists(sParams) then FileName:= sParams; end; end; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/upathlabel.pas�����������������������������������������������������������������0000644�0001750�0000144�00000015506�15104114162�016211� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Label displaying a path, highlighting directories with mouse. Copyright (C) 2010-2011 Przemysław Nagay (cobines@gmail.com) Copyright (C) 2014-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uPathLabel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Graphics; type { TPathLabel } TPathLabel = class(TLabel) private FActive: Boolean; FAllowHighlight: Boolean; FHighlightStartPos: Integer; FHighlightText: String; FMousePos: Integer; FColors: array[0..3] of TColor; {en How much space to leave between the text and left border. } FLeftSpacing: Integer; {en If a user clicks on a parent directory of the path, this stores the full path of that parent directory. } FSelectedDir: String; {en If a mouse if over some parent directory of the currently displayed path, it is highlighted, so that user can click on it. } procedure Highlight; function GetColor(const AIndex: Integer): TColor; procedure SetColor(const AIndex: Integer; const AValue: TColor); overload; protected procedure TextChanged; override; procedure MouseEnter; override; procedure MouseMove(Shift: TShiftState; X,Y: Integer); override; procedure MouseLeave; override; public constructor Create(AOwner: TComponent; bAllowHighlight: Boolean = False); reintroduce; procedure Paint; override; {en Changes drawing colors depending active/inactive state. } procedure SetActive(Active: Boolean); property AllowHighlight: Boolean read FAllowHighlight write FAllowHighlight; property LeftSpacing: Integer read FLeftSpacing write FLeftSpacing; property SelectedDir: String read FSelectedDir; property ActiveColor: TColor index 0 read GetColor write SetColor; property ActiveFontColor: TColor index 1 read GetColor write SetColor; property InactiveColor: TColor index 2 read GetColor write SetColor; property InactiveFontColor: TColor index 3 read GetColor write SetColor; end; implementation uses Controls, Math; { TPathLabel } constructor TPathLabel.Create(AOwner: TComponent; bAllowHighlight: Boolean); begin FLeftSpacing := 3; // set before painting FColors[0] := clHighlight; FColors[1] := clHighlightText; FColors[2] := clBtnFace; FColors[3] := clBtnText; inherited Create(AOwner); FAllowHighlight := bAllowHighlight; FSelectedDir := ''; FHighlightStartPos := -1; FHighlightText := ''; SetActive(False); end; procedure TPathLabel.Paint; var TextTop: Integer; begin Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Center vertically. TextTop := (Height - Canvas.TextHeight(Text)) div 2; Canvas.FillRect(0, 0, Width, Height); // background Canvas.TextOut(LeftSpacing, TextTop, Text); // path // Highlight part of the path if mouse is over it. if FHighlightStartPos <> -1 then begin Canvas.Brush.Color := Font.Color; // reverse colors Canvas.Font.Color := Color; Canvas.TextOut(FHighlightStartPos, TextTop, FHighlightText); end; end; procedure TPathLabel.SetActive(Active: Boolean); begin case Active of False: begin Color := InactiveColor; Font.Color := InactiveFontColor; end; True: begin Color := ActiveColor; Font.Color := ActiveFontColor; end; end; FActive := Active; end; procedure TPathLabel.Highlight; var LeftText: String; PartText: String; StartPos, CurPos: Integer; PartWidth: Integer; CurrentHighlightPos, NewHighlightPos: Integer; TextLen: Integer; begin NewHighlightPos := -1; Canvas.Font := Self.Font; TextLen := Length(Text); // Start from the first character, but omit any path delimiters at the beginning. StartPos := 1; while (StartPos <= TextLen) and (Text[StartPos] = PathDelim) do Inc(StartPos); for CurPos := StartPos + 1 to TextLen - 1 do begin if Text[CurPos] = PathDelim then begin PartText := Copy(Text, StartPos, CurPos - StartPos); PartWidth := Canvas.TextWidth(PartText); LeftText := Copy(Text, 0, CurPos-1 ); CurrentHighlightPos:= LeftSpacing + Canvas.TextWidth( LeftText ) - PartWidth; // If mouse is over this part of the path - highlight it. if InRange(FMousePos, CurrentHighlightPos, CurrentHighlightPos + PartWidth) then begin NewHighlightPos := CurrentHighlightPos; Break; end; StartPos := CurPos + 1; end; end; // Repaint if highlighted part has changed. if NewHighlightPos <> FHighlightStartPos then begin // Omit minimized part of the displayed path. if PartText = '..' then FHighlightStartPos := -1 else FHighlightStartPos := NewHighlightPos; if FHighlightStartPos <> -1 then begin Cursor := crHandPoint; FHighlightText := PartText; // If clicked, this will be the new directory. FSelectedDir := Copy(Text, 1, CurPos - 1); end else begin Cursor := crDefault; FSelectedDir := ''; FHighlightText := ''; end; Self.Invalidate; end; end; function TPathLabel.GetColor(const AIndex: Integer): TColor; begin Result:= FColors[AIndex]; end; procedure TPathLabel.SetColor(const AIndex: Integer; const AValue: TColor); begin FColors[AIndex] := AValue; SetActive(FActive); end; procedure TPathLabel.TextChanged; begin inherited TextChanged; if FAllowHighlight and MouseInClient then Highlight; end; procedure TPathLabel.MouseEnter; begin inherited MouseEnter; if FAllowHighlight then begin Cursor := crDefault; FMousePos := ScreenToClient(Mouse.CursorPos).X; Highlight; Invalidate; end; end; procedure TPathLabel.MouseMove(Shift: TShiftState; X,Y: Integer); begin inherited MouseMove(Shift, X, Y); FMousePos := X; if FAllowHighlight then Highlight; end; procedure TPathLabel.MouseLeave; begin inherited MouseLeave; if FAllowHighlight then begin FSelectedDir := ''; FHighlightStartPos := -1; FHighlightText := ''; Cursor := crDefault; Invalidate; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uparitercontrols.pas�����������������������������������������������������������0000644�0001750�0000144�00000024655�15104114162�017514� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2004 Flavio Etrusco Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } unit uPariterControls; {$mode objfpc}{$H+} interface uses Controls, SysUtils, Classes, SynEditHighlighter, uSynDiffControls, uDiffONP; const SynSpaceGlyph = Chr($B7); //'·' SynTabGlyph = Chr($BB); //'»' type { TSynDiffHighlighter } TSynDiffHighlighter = class(TSynCustomHighlighter) private fWhitespaceAttribute: TSynHighlighterAttributes; fAddedAttribute: TSynHighlighterAttributes; fRemovedAttribute: TSynHighlighterAttributes; fModifiedAttribute: TSynHighlighterAttributes; fUnmodifiedAttribute: TSynHighlighterAttributes; fDiff: TDiff; fTokens: TStringList; {} fRun: Integer; fTokenPos: Integer; fTokenLen: Integer; fTokenKind: TChangeKind; {} fAddedAttriPointer: TSynHighlighterAttributes; fDefaultAttriPointer: TSynHighlighterAttributes; function GetEditor: TSynDiffEdit; procedure ComputeTokens(const aOldLine, aNewLine: String); protected function GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; override; public constructor Create(aOwner: TSynDiffEdit); reintroduce; overload; constructor Create(aOwner: TComponent); overload; override; destructor Destroy; override; procedure ResetRange; override; procedure SetLine(const aNewValue: String; aLineNumber: Integer); override; procedure UpdateColors; function GetEol: Boolean; override; function GetToken: String; override; procedure GetTokenEx(out TokenStart: PChar; out TokenLength: Integer); override; function GetTokenAttribute: TSynHighlighterAttributes; override; function GetTokenKind: Integer; override; function GetTokenPos: Integer; override; // 0-based procedure Next; override; property Editor: TSynDiffEdit read GetEditor; end; implementation uses LazUTF8, Graphics, DCUnicodeUtils; { TSynDiffHighlighter } procedure TSynDiffHighlighter.ComputeTokens(const aOldLine, aNewLine: String); var I: Integer; LastToken: String; LastKind: TChangeKind; aOld, aNew: UCS4String; FirstToken: Boolean = True; procedure AddTokenIfNeed(Symbol: UCS4Char; Kind: TChangeKind); begin if (Kind = LastKind) then // Same Kind, no need to change colors LastToken := LastToken + UnicodeToUTF8(Symbol) else begin fTokens.AddObject(LastToken, TObject(PtrInt(LastKind))); LastToken := UnicodeToUTF8(Symbol); LastKind := Kind; end; end; begin // Convert to UCS-4 aOld:= UTF8ToUCS4(aOldLine); aNew:= UTF8ToUCS4(aNewLine); // Compare lines if not Assigned(Editor.OriginalFile) then // Original file fDiff.Execute(PInteger(aNew), PInteger(aOld), Length(aNew), Length(aOld)) else if not Assigned(Editor.ModifiedFile) then // Modified file fDiff.Execute(PInteger(aOld), PInteger(aNew), Length(aOld), Length(aNew)); // Prepare diffs to display LastToken:= EmptyStr; for I := 0 to fDiff.Count - 1 do with fDiff.Compares[I] do begin if not Assigned(Editor.OriginalFile) then // Original file begin // Show changes for original file if Kind <> ckAdd then begin if FirstToken then begin LastKind:= Kind; FirstToken:= False; end; AddTokenIfNeed(int1, Kind); end; end else if not Assigned(Editor.ModifiedFile) then // Modified file begin // Show changes for modified file if Kind <> ckDelete then begin if FirstToken then begin LastKind:= Kind; FirstToken:= False; end; AddTokenIfNeed(int2, Kind); end; end; end; // Add last token fTokens.AddObject(LastToken, TObject(PtrInt(LastKind))); end; constructor TSynDiffHighlighter.Create(aOwner: TComponent); begin Create(aOwner as TSynDiffEdit); end; constructor TSynDiffHighlighter.Create(aOwner: TSynDiffEdit); begin inherited Create(aOwner); fDiff := TDiff.Create(Self); {} fWhitespaceAttribute := TSynHighlighterAttributes.Create('Whitespace'); AddAttribute(fWhitespaceAttribute); {} fAddedAttribute := TSynHighlighterAttributes.Create('Added'); fAddedAttribute.Style := [fsBold]; AddAttribute(fAddedAttribute); {} fRemovedAttribute := TSynHighlighterAttributes.Create('Removed'); fRemovedAttribute.Style := [fsBold]; AddAttribute(fRemovedAttribute); {} fModifiedAttribute := TSynHighlighterAttributes.Create('Modified'); fModifiedAttribute.Style := [fsBold]; AddAttribute(fModifiedAttribute); {} fUnmodifiedAttribute := TSynHighlighterAttributes.Create('Unmodified'); AddAttribute(fUnmodifiedAttribute); {} UpdateColors; SetAttributesOnChange(@DefHighlightChange); fTokens := TStringList.Create; end; destructor TSynDiffHighlighter.Destroy; begin inherited Destroy; fTokens.Free; end; function TSynDiffHighlighter.GetEditor: TSynDiffEdit; begin Result := TSynDiffEdit(inherited Owner); end; function TSynDiffHighlighter.GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; begin if Index = SYN_ATTR_WHITESPACE then Result := fDefaultAttriPointer else Result := nil; end; function TSynDiffHighlighter.GetEol: Boolean; begin Result := (fTokenLen = 0); end; function TSynDiffHighlighter.GetToken: String; var cChar: Integer; begin Result := fTokens[fRun]; if (Editor.PaintStyle = psForeground) and (fTokenKind <> ckNone) then for cChar := 1 to Length(Result) do if Result[cChar] = #32 then Result[cChar] := SynSpaceGlyph else if Result[cChar] = #9 then Result[cChar] := SynTabGlyph; end; function TSynDiffHighlighter.GetTokenAttribute: TSynHighlighterAttributes; begin case fTokenKind of ckAdd: Result := fAddedAttriPointer; ckModify: Result := fModifiedAttribute; ckDelete: Result := fAddedAttriPointer; else Result := fDefaultAttriPointer; end; end; function TSynDiffHighlighter.GetTokenKind: integer; begin Result := Ord(fTokenKind); end; procedure TSynDiffHighlighter.GetTokenEx(out TokenStart: PChar; out TokenLength: integer); begin TokenLength:= fTokenLen; if TokenLength > 0 then TokenStart:= PChar(fTokens[fRun]) else TokenStart:= nil; end; function TSynDiffHighlighter.GetTokenPos: Integer; begin Result := fTokenPos; end; procedure TSynDiffHighlighter.Next; begin Inc(fRun); if fRun = fTokens.Count then begin fTokenLen := 0; Exit; end; Inc(fTokenPos, fTokenLen); fTokenLen := Length(fTokens[fRun]); fTokenKind := TChangeKind(PtrInt(fTokens.Objects[fRun])); end; procedure TSynDiffHighlighter.ResetRange; begin fDefaultAttriPointer := fWhitespaceAttribute; end; procedure TSynDiffHighlighter.SetLine(const aNewValue: String; aLineNumber: Integer); var vOtherEdit: TSynDiffEdit; vOldLine: String; vNewLine: String; begin fDiff.Clear; fTokens.Clear; fRun := -1; fTokenPos := 0; fTokenLen := 0; if Editor.OriginalFile <> nil then begin fAddedAttriPointer := fAddedAttribute; vOtherEdit := Editor.OriginalFile; end else begin fAddedAttriPointer := fRemovedAttribute; vOtherEdit := Editor.ModifiedFile; end; if TChangeKind(Editor.Lines.Kind[aLineNumber]) = ckModify then fDefaultAttriPointer := fUnmodifiedAttribute else fDefaultAttriPointer := fWhitespaceAttribute; if (vOtherEdit <> nil) and (aLineNumber < vOtherEdit.Lines.Count) then vOldLine := vOtherEdit.Lines[aLineNumber]; vNewLine := aNewValue; if Length(vNewLine) <> 0 then begin if (Length(vOldLine) <> 0) and (TChangeKind(Editor.Lines.Kind[aLineNumber]) = ckModify) then ComputeTokens(vOldLine, vNewLine) else fTokens.Add(vNewLine); end; Next; end; procedure TSynDiffHighlighter.UpdateColors; begin BeginUpdate; try if Editor.PaintStyle = psForeground then begin fAddedAttribute.Foreground := Editor.Colors.Added; fAddedAttribute.Background := clBtnFace; fRemovedAttribute.Foreground := Editor.Colors.Deleted; fRemovedAttribute.Background := clBtnFace; fModifiedAttribute.Foreground := Editor.Colors.Modified; fModifiedAttribute.Background := clBtnFace; fUnmodifiedAttribute.Foreground := clNone; fUnmodifiedAttribute.Background := clNone; end else begin fAddedAttribute.Foreground := clNone; fAddedAttribute.Background := Editor.Colors.Added; fRemovedAttribute.Foreground := clNone; fRemovedAttribute.Background := Editor.Colors.Deleted; fModifiedAttribute.Foreground := clNone; fModifiedAttribute.Background := Editor.Colors.Modified; fUnmodifiedAttribute.Foreground := clNone; fUnmodifiedAttribute.Background := Editor.Colors.Modified; end; finally EndUpdate; end; end; end. �����������������������������������������������������������������������������������doublecmd-1.1.30/src/uoperationspanel.pas�����������������������������������������������������������0000644�0001750�0000144�00000034764�15104114162�017467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Panel displaying file operations. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uOperationsPanel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Forms, Graphics, LCLVersion, fFileOpDlg, uFileSourceOperation, uOperationsManager, uFileSourceOperationUI; type { TOperationsPanel } TOperationsPanel = class(TScrollBox) private FMaximumItemWidth: Integer; FUserInterface: TFileSourceOperationUI; FOperations, FQueues: TFPList; FParentWidth: Integer; procedure ClearItems; procedure DeleteItem(List: TFPList; Index: Integer); procedure GetStateColor(State: TFileSourceOperationState; out ColorFrom, ColorTo: TColor); procedure OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent); procedure ProgressWindowEvent(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent); procedure UpdateItems; procedure UpdateVisibility; {$if lcl_fullversion >= 1070000} protected procedure SetParent(NewParent: TWinControl); override; {$endif} public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; procedure ParentResized(Sender: TObject); procedure UpdateView; end; implementation uses LCLIntf, LCLType, Math, fViewOperations, uDCUtils, uFileSourceOperationMisc, uFileSourceOperationMessageBoxesUI; const MinimumHeight = 25; MaximumItemWidth = 150; LeftRightTextMargin = 4; TopBottomTextMargin = 2; HorizontalSpaceBetween = 1; PanelBorderWidth = 1; type TOperationPanelItem = record Width: Integer; OperationHandle: TOperationHandle; QueueId: TOperationsManagerQueueIdentifier; end; POperationPanelItem = ^TOperationPanelItem; { TOperationsPanel } procedure TOperationsPanel.ParentResized(Sender: TObject); begin FParentWidth := (Sender as TControl).Width; UpdateItems; end; procedure TOperationsPanel.ClearItems; var p: Pointer; begin for p in FOperations do Dispose(POperationPanelItem(p)); for p in FQueues do Dispose(POperationPanelItem(p)); FOperations.Clear; FQueues.Clear; end; procedure TOperationsPanel.DeleteItem(List: TFPList; Index: Integer); begin Dispose(POperationPanelItem(List[Index])); List.Delete(Index); end; procedure TOperationsPanel.GetStateColor(State: TFileSourceOperationState; out ColorFrom, ColorTo: TColor); begin case State of // Green if running fsosRunning: begin ColorFrom:= RGB(203, 233, 171); ColorTo:= RGB(146, 208, 80); end; // Orange if in waiting fsosWaitingForFeedback, fsosWaitingForConnection: begin ColorFrom:= RGB(255, 202, 100); ColorTo:= RGB(255, 153, 4); end; // Red if paused, stopped fsosPaused, fsosStopped: begin ColorFrom:= RGB(255, 153, 149); ColorTo:= RGB(255, 110, 103); end; else begin ColorFrom:= RGB(0, 0, 0); ColorTo:= RGB(255, 255, 255); end; end; end; procedure TOperationsPanel.OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent); begin UpdateItems; UpdateView; if Event = omevOperationAdded then Item.Operation.AddUserInterface(FUserInterface) else if Event = omevOperationRemoved then begin Item.Operation.RemoveUserInterface(FUserInterface); end; end; procedure TOperationsPanel.ProgressWindowEvent(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent); begin UpdateVisibility; end; procedure TOperationsPanel.UpdateItems; var OpManItem: TOperationsManagerItem; QueueIndex, OperIndex: Integer; OutString: String; ItemRect: TRect; Queue: TOperationsManagerQueue; OperationItem: POperationPanelItem; OverallHeight: Integer = MinimumHeight; OverallWidth: Integer = 0; Visibility: Boolean = False; procedure SetSize; begin ItemRect := Rect(0, 0, 0, 0); DrawText(Canvas.Handle, PChar(OutString), Length(OutString), ItemRect, DT_NOPREFIX or DT_CALCRECT); OperationItem^.Width := Min(ItemRect.Right + (LeftRightTextMargin + PanelBorderWidth) * 2, FMaximumItemWidth); OverallHeight := Max(ItemRect.Bottom + (TopBottomTextMargin + PanelBorderWidth) * 2, OverallHeight); OverallWidth := OverallWidth + OperationItem^.Width + HorizontalSpaceBetween; end; begin ClearItems; for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Count > 0 then begin if Queue.Identifier = FreeOperationsQueueId then begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; if Assigned(OpManItem) then begin New(OperationItem); FOperations.Add(OperationItem); OperationItem^.QueueId := Queue.Identifier; OperationItem^.OperationHandle := OpManItem.Handle; OutString := IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(100); SetSize; if not TfrmFileOp.IsOpenedFor(OpManItem.Handle) and not (OpManItem.Operation.State in [fsosStopping, fsosStopped]) then Visibility := True; end; end; end else begin New(OperationItem); FQueues.Add(OperationItem); OperationItem^.QueueId := Queue.Identifier; OperationItem^.OperationHandle := InvalidOperationHandle; OutString := Queue.GetDescription(True) + LineEnding + Queue.Items[0].Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(100); SetSize; if not TfrmFileOp.IsOpenedFor(Queue.Identifier) then Visibility := True; end; end; end; ClientHeight := OverallHeight + 2; ClientWidth := Max(OverallWidth - HorizontalSpaceBetween, FParentWidth); Visible := Visibility; end; procedure TOperationsPanel.UpdateVisibility; var OpManItem: TOperationsManagerItem; QueueIndex, OperIndex: Integer; Queue: TOperationsManagerQueue; Visibility: Boolean = False; begin for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Count > 0 then begin if Queue.Identifier = FreeOperationsQueueId then begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; if Assigned(OpManItem) then begin if not TfrmFileOp.IsOpenedFor(OpManItem.Handle) and not (OpManItem.Operation.State in [fsosStopping, fsosStopped]) then Visibility := True; end; end; end else begin if not TfrmFileOp.IsOpenedFor(Queue.Identifier) then Visibility := True; end; end; end; Visible := Visibility; end; {$if lcl_fullversion >= 1070000} procedure TOperationsPanel.SetParent(NewParent: TWinControl); var AForm: TCustomForm; begin inherited SetParent(NewParent); AForm := GetParentForm(NewParent); if Assigned(AForm) then begin FMaximumItemWidth := ScaleX(MaximumItemWidth, AForm.DesignTimePPI); end; end; {$endif} constructor TOperationsPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FOperations := TFPList.Create; FQueues := TFPList.Create; FMaximumItemWidth := MaximumItemWidth; FUserInterface := TFileSourceOperationMessageBoxesUI.Create; OperationsManager.AddEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @OperationsManagerEvent); TfrmFileOp.AddEventsListener([opwevOpened, opwevClosed], @ProgressWindowEvent); end; destructor TOperationsPanel.Destroy; begin OperationsManager.RemoveEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @OperationsManagerEvent); TfrmFileOp.RemoveEventsListener([opwevOpened, opwevClosed], @ProgressWindowEvent); inherited Destroy; FUserInterface.Free; FOperations.Free; FQueues.Free; end; procedure TOperationsPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ClickPos: TPoint; OpManItem: TOperationsManagerItem; procedure HandleItem(Item: POperationPanelItem); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin if Item^.OperationHandle = InvalidOperationHandle then begin case Button of mbLeft: TfrmFileOp.ShowFor(Item^.QueueId, [opwoIfExistsBringToFront]); mbMiddle: Queue.TogglePause; mbRight: ShowOperationsViewer(Item^.QueueId); end; end else begin OpManItem := Queue.ItemByHandle[Item^.OperationHandle]; if Assigned(OpManItem) then begin case Button of mbLeft: TfrmFileOp.ShowFor(OpManItem.Handle, [opwoIfExistsBringToFront]); mbMiddle: OpManItem.Operation.TogglePause; mbRight: ShowOperationsViewer(OpManItem.Handle); end; end; end; end; end; var ItemRect: TRect; Item: POperationPanelItem; begin inherited MouseDown(Button, Shift, X, Y); ClickPos := Point(X, Y); ItemRect := ClientRect; InflateRect(ItemRect, -PanelBorderWidth, -PanelBorderWidth); ItemRect.Right := ItemRect.Left - HorizontalSpaceBetween; for Item in FQueues do begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if PtInRect(ItemRect, ClickPos) then begin HandleItem(Item); Exit; end; end; for Item in FOperations do begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if PtInRect(ItemRect, ClickPos) then begin HandleItem(Item); Exit; end; end; end; procedure TOperationsPanel.Paint; var OpManItem: TOperationsManagerItem; ARect, ItemRect: TRect; ColorFrom, ColorTo: TColor; Queue: TOperationsManagerQueue; Item: POperationPanelItem; i: Integer; AProgress: Double; procedure DrawString(s: String); begin // Draw output string Canvas.Brush.Style := bsClear; ARect := ItemRect; InflateRect(ARect, -4, -2); DrawText(Canvas.Handle, PChar(s), Length(s), ARect, DT_LEFT or DT_VCENTER or DT_NOPREFIX); end; procedure DrawProgress(State: TFileSourceOperationState; Progress: Double); begin // Draw progress bar GetStateColor(State, ColorFrom, ColorTo); ARect := ItemRect; InflateRect(ARect, -1, -1); ARect.Right := ARect.Left + Round((ARect.Right - ARect.Left) * Progress); Canvas.GradientFill(ARect, ColorFrom, ColorTo, gdVertical); // Special indication if operation is paused/stopped if State in [fsosPaused, fsosStopped, fsosWaitingForFeedback] then begin Canvas.Brush.Color:= ColorFrom; Canvas.Brush.Style:= bsDiagCross; ARect.Left:= ARect.Right + 1; ARect.Right:= ItemRect.Right - 1; Canvas.FillRect(ARect); end; end; begin inherited Paint; ItemRect := ClientRect; Canvas.Pen.Color:= cl3DDkShadow; Canvas.Rectangle(ItemRect); InflateRect(ItemRect, -PanelBorderWidth, -PanelBorderWidth); Canvas.GradientFill(ItemRect, LightColor(clBtnHiLight, 20), clBtnFace, gdVertical); ItemRect.Right := ItemRect.Left - HorizontalSpaceBetween; i := 0; while i < FQueues.Count do begin Item := FQueues[i]; Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin OpManItem := Queue.Items[0]; if Assigned(OpManItem) then begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; // Draw border Canvas.Pen.Color := LightColor(cl3DDkShadow, 25); Canvas.Pen.Style := psSolid; Canvas.Rectangle(ItemRect); AProgress := OpManItem.Operation.Progress; DrawProgress(OpManItem.Operation.State, AProgress); DrawString(Queue.GetDescription(True) + LineEnding + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(AProgress)); Inc(i); end else DeleteItem(FQueues, i); end else DeleteItem(FQueues, i); end; i := 0; while i < FOperations.Count do begin Item := FOperations[i]; Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin OpManItem := Queue.ItemByHandle[Item^.OperationHandle]; if Assigned(OpManItem) then begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if TfrmFileOp.IsOpenedFor(OpManItem.Handle) then Canvas.Pen.Color := clMenuHighlight else Canvas.Pen.Color := LightColor(cl3DDkShadow, 40); // Draw border Canvas.Pen.Style := psSolid; Canvas.Rectangle(ItemRect); AProgress := OpManItem.Operation.Progress; DrawProgress(OpManItem.Operation.State, AProgress); DrawString(IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(AProgress)); Inc(i); end else DeleteItem(FOperations, i); end else DeleteItem(FOperations, i); end; end; procedure TOperationsPanel.UpdateView; begin Invalidate; end; end. ������������doublecmd-1.1.30/src/uoperationsmanager.pas���������������������������������������������������������0000644�0001750�0000144�00000070500�15104114162�017766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Manager that maintains a list of running file source operations and manages queues of operations. Copyright (C) 2010-2012 Przemysaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uOperationsManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uOperationThread, uFileSourceOperation; type {en Handle to OperationsManager's operation.} TOperationHandle = type Longint; {en Identifier of OperationsManager's queue.} TOperationsManagerQueueIdentifier = type Longint; const InvalidOperationHandle = TOperationHandle(0); FreeOperationsQueueId = 0; ModalQueueId = Pred(FreeOperationsQueueId); SingleQueueId = Succ(FreeOperationsQueueId); type TOperationsManagerQueue = class; { TOperationsManagerItem } TOperationsManagerItem = class strict private FHandle : TOperationHandle; FOperation : TFileSourceOperation; FQueue : TOperationsManagerQueue; FThread : TOperationThread; private function RemoveFromQueue: Boolean; {en Inserts the item into new queue at specific position. @param(NewQueue To which queue to insert the item. If it is the same queue in which the item is currently nothing is performed.) @param(TargetOperation Handle to another operation in NewQueue near which the item should be placed.) @param(PlaceBefore If @true then places item before TargetOperation. If @false then places item after TargetOperation.) } procedure SetQueue(NewQueue: TOperationsManagerQueue; TargetOperation: TOperationHandle; PlaceBefore: Boolean); public constructor Create(AHandle: TOperationHandle; AOperation: TFileSourceOperation; AThread: TOperationThread); destructor Destroy; override; procedure Start; {en Moves the item and places it before or after another operation. @param(TargetOperation Handle to another operation where item should be moved. If handle belongs to operation from a different queue then the item is moved to that queue and placed before or after the operation.) @param(PlaceBefore If @true then places item before TargetOperation. If @false then places item after TargetOperation.) } procedure Move(TargetOperation: TOperationHandle; PlaceBefore: Boolean); procedure MoveToBottom; function MoveToNewQueue: TOperationsManagerQueueIdentifier; procedure MoveToTop; procedure SetQueue(NewQueue: TOperationsManagerQueue; InsertAtFront: Boolean = False); property Handle: TOperationHandle read FHandle; property Operation: TFileSourceOperation read FOperation; property Queue: TOperationsManagerQueue read FQueue; property Thread: TOperationThread read FThread; end; { TOperationsManagerQueue } TOperationsManagerQueue = class strict private FIdentifier: TOperationsManagerQueueIdentifier; FList: TFPList; FPaused: Boolean; function GetIndexByHandle(Handle: TOperationHandle): Integer; function GetItem(Index: Integer): TOperationsManagerItem; function GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; function GetOperationsCount: Integer; private {en Inserts new item into the queue. @param(InsertAt If -1 (default) it adds to the back of the queue. If 0 inserts at the front. If 0 < InsertAt < Count it inserts at specific position.) } function Insert(Item: TOperationsManagerItem; InsertAt: Integer = -1): Integer; {en Inserts new item into the queue. @param(InsertAtFront If @true then inserts at the front, if @false then inserts at the back.) } function Insert(Item: TOperationsManagerItem; TargetOperation: TOperationHandle; PlaceBefore: Boolean): Integer; {en Moves item within the queue. @param(SourceItem Which item should be moved.) @param(TargetItem SourceItem is moved placed either before or after TargetItem. If TargetItem is @nil then SourceItem is moved to the front if PlaceBefore is @true and to the back if PlaceBefore is @false.) @param(PlaceBefore If @true then SourceItem is placed before TargetItem. If @false then SourceItem is placed after TargetItem.) } procedure Move(SourceItem, TargetItem: TOperationsManagerItem; PlaceBefore: Boolean); function Remove(Item: TOperationsManagerItem): Boolean; public constructor Create(AIdentifier: TOperationsManagerQueueIdentifier); destructor Destroy; override; function GetDescription(IncludeCount: Boolean): String; {en Returns @true if this queue is a free operations queue. } function IsFree: Boolean; inline; procedure Pause; procedure Stop; procedure TogglePause; procedure UnPause; property Count: Integer read GetOperationsCount; property Identifier: TOperationsManagerQueueIdentifier read FIdentifier; property Items[Index: Integer]: TOperationsManagerItem read GetItem; property ItemByHandle[Handle: TOperationHandle]: TOperationsManagerItem read GetItemByHandle; property Paused: Boolean read FPaused; end; TOperationManagerEvent = (omevOperationAdded, omevOperationRemoved, omevOperationMoved); TOperationManagerEvents = set of TOperationManagerEvent; TOperationManagerEventNotify = procedure(Item: TOperationsManagerItem; Event: TOperationManagerEvent) of object; {en Manages file source operations. Executes them, stores threads, allows querying active operations (meaning operations being executed). } { TOperationsManager } TOperationsManager = class private FLastUsedHandle: TOperationHandle; FEventsListeners: array[TOperationManagerEvent] of TFPList; FQueues: TFPList; procedure ThreadTerminatedEvent(Sender: TObject); function GetItemByOperation(Operation: TFileSourceOperation): TOperationsManagerItem; function GetItemByIndex(Index: Integer): TOperationsManagerItem; function GetOperationsCount: Integer; function GetNextUnusedHandle: TOperationHandle; function GetQueueByIndex(Index: Integer): TOperationsManagerQueue; function GetQueueByIdentifier(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; function GetQueuesCount: Integer; function MoveToNewQueue(Item: TOperationsManagerItem): TOperationsManagerQueueIdentifier; procedure MoveToQueue(Item: TOperationsManagerItem; QueueIdentifier: TOperationsManagerQueueIdentifier); {en Notifies all listeners that an event has occurred (or multiple events). } procedure NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents); public constructor Create; destructor Destroy; override; {en Adds an operation to the manager. @param(ShowProgress If @true automatically shows progress window.) } function AddOperation(Operation: TFileSourceOperation; ShowProgress: Boolean = True): TOperationHandle; {en Adds an operation to the manager. @param(QueueIdentifier Specifies to which queue to put the operation.) @param(InsertAtFrontOfQueue If @true inserts the operation at the front of the queue, if @false inserts at the back of the queue.) @param(ShowProgress If @true automatically shows progress window.) } function AddOperation(Operation: TFileSourceOperation; QueueIdentifier: TOperationsManagerQueueIdentifier; InsertAtFrontOfQueue: Boolean; ShowProgress: Boolean = True): TOperationHandle; {en Adds an operation to the manager. Execute operation in the main thread and show progress in modal window. } function AddOperationModal(Operation: TFileSourceOperation): TOperationHandle; {en Operations retrieved this way can be safely used from the main GUI thread. But they should not be stored for longer use, because they may be destroyed by the Operations Manager when they finish. Operation handle can always be used to query OperationsManager if the operation item is still alive. } function GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; function GetOrCreateQueue(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; function GetNewQueueIdentifier: TOperationsManagerQueueIdentifier; procedure PauseAll; procedure StopAll; procedure UnPauseAll; function AllProgressPoint: Double; {en Adds a function to call on specific events. } procedure AddEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); {en Removes a registered function callback for events. } procedure RemoveEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); property OperationsCount: Integer read GetOperationsCount; property QueuesCount: Integer read GetQueuesCount; property QueueByIndex[Index: Integer]: TOperationsManagerQueue read GetQueueByIndex; property QueueByIdentifier[Identifier: TOperationsManagerQueueIdentifier]: TOperationsManagerQueue read GetQueueByIdentifier; end; var OperationsManager: TOperationsManager = nil; implementation uses uDebug, uLng, uFileSourceOperationMisc, uFileSourceProperty, uFileSource; type PEventsListItem = ^TEventsListItem; TEventsListItem = record EventFunction: TOperationManagerEventNotify; end; { TOperationsManagerItem } constructor TOperationsManagerItem.Create(AHandle: TOperationHandle; AOperation: TFileSourceOperation; AThread: TOperationThread); begin FHandle := AHandle; FOperation := AOperation; FThread := AThread; end; destructor TOperationsManagerItem.Destroy; begin inherited Destroy; FOperation.Free; end; procedure TOperationsManagerItem.Start; begin if (FThread = nil) then begin FThread := TOperationThread.Create(True, Operation); if Assigned(FThread.FatalException) then raise FThread.FatalException; // Set OnTerminate event so that we can cleanup when thread finishes. // Or instead of this create a timer for each thread and do: // Thread.WaitFor (or WaitForThreadTerminate(Thread.ThreadID)) FThread.OnTerminate := @OperationsManager.ThreadTerminatedEvent; FThread.Start; end; Operation.Start; end; procedure TOperationsManagerItem.Move(TargetOperation: TOperationHandle; PlaceBefore: Boolean); var TargetItem: TOperationsManagerItem; begin TargetItem := OperationsManager.GetItemByHandle(TargetOperation); if Assigned(TargetItem) then begin if Queue = TargetItem.Queue then Queue.Move(Self, TargetItem, PlaceBefore) else SetQueue(TargetItem.Queue, TargetOperation, PlaceBefore); end; end; procedure TOperationsManagerItem.MoveToBottom; begin Queue.Move(Self, nil, False); end; function TOperationsManagerItem.MoveToNewQueue: TOperationsManagerQueueIdentifier; begin Result := OperationsManager.MoveToNewQueue(Self); end; procedure TOperationsManagerItem.MoveToTop; begin Queue.Move(Self, nil, True); end; function TOperationsManagerItem.RemoveFromQueue: Boolean; begin Result := Queue.Remove(Self); if Queue.Count = 0 then begin OperationsManager.FQueues.Remove(Queue); Queue.Free; end; FQueue := nil; end; procedure TOperationsManagerItem.SetQueue(NewQueue: TOperationsManagerQueue; InsertAtFront: Boolean); begin if (Queue <> NewQueue) and Assigned(NewQueue) then begin if not Assigned(Queue) or RemoveFromQueue then begin FQueue := NewQueue; if InsertAtFront then NewQueue.Insert(Self, 0) // Insert at the front of the queue. else NewQueue.Insert(Self); // Add at the back of the queue. OperationsManager.NotifyEvents(Self, [omevOperationMoved]); end; end; end; procedure TOperationsManagerItem.SetQueue(NewQueue: TOperationsManagerQueue; TargetOperation: TOperationHandle; PlaceBefore: Boolean); begin if (Queue <> NewQueue) and Assigned(NewQueue) then begin if not Assigned(Queue) or RemoveFromQueue then begin FQueue := NewQueue; NewQueue.Insert(Self, TargetOperation, PlaceBefore); OperationsManager.NotifyEvents(Self, [omevOperationMoved]); end; end; end; { TOperationsManagerQueue } function TOperationsManagerQueue.GetIndexByHandle(Handle: TOperationHandle): Integer; begin for Result := 0 to Count - 1 do begin if TOperationsManagerItem(Items[Result]).Handle = Handle then Exit; end; Result := -1; end; function TOperationsManagerQueue.GetItem(Index: Integer): TOperationsManagerItem; begin Result := TOperationsManagerItem(FList.Items[Index]); end; function TOperationsManagerQueue.GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; var Index: Integer; begin for Index := 0 to Count - 1 do begin Result := Items[Index]; if Result.Handle = Handle then Exit; end; Result := nil; end; function TOperationsManagerQueue.GetOperationsCount: Integer; begin Result := FList.Count; end; constructor TOperationsManagerQueue.Create(AIdentifier: TOperationsManagerQueueIdentifier); begin FList := TFPList.Create; FIdentifier := AIdentifier; end; destructor TOperationsManagerQueue.Destroy; var i: Integer; begin inherited Destroy; for i := 0 to FList.Count - 1 do Items[i].Free; FList.Free; end; function TOperationsManagerQueue.GetDescription(IncludeCount: Boolean): String; begin Result := rsDlgQueue + ' #' + IntToStr(Identifier); if IncludeCount then Result := Result + ' [' + IntToStr(Count) + ']'; end; procedure TOperationsManagerQueue.Move(SourceItem, TargetItem: TOperationsManagerItem; PlaceBefore: Boolean); var FromIndex, ToIndex: Integer; ShouldMove: Boolean = False; begin FromIndex := GetIndexByHandle(SourceItem.Handle); if FromIndex >= 0 then begin if not Assigned(TargetItem) then begin if PlaceBefore then ToIndex := 0 else ToIndex := FList.Count - 1; ShouldMove := True; end else begin ToIndex := GetIndexByHandle(TargetItem.Handle); if ToIndex >= 0 then begin if PlaceBefore then begin if FromIndex < ToIndex then Dec(ToIndex); end else begin if FromIndex > ToIndex then Inc(ToIndex); end; ShouldMove := True; end; end; end; if ShouldMove and (FromIndex <> ToIndex) then begin if (not Paused) and ((FromIndex = 0) or (ToIndex = 0)) and not IsFree then Items[0].Operation.Pause; FList.Move(FromIndex, ToIndex); if (not Paused) and ((FromIndex = 0) or (ToIndex = 0)) and not IsFree then Items[0].Start; OperationsManager.NotifyEvents(SourceItem, [omevOperationMoved]); end; end; function TOperationsManagerQueue.Insert(Item: TOperationsManagerItem; InsertAt: Integer): Integer; begin if InsertAt = -1 then InsertAt := FList.Count else begin if (not Paused) and (InsertAt = 0) and not IsFree then Items[0].Operation.Pause; end; FList.Insert(InsertAt, Item); Result := InsertAt; if (not Paused) and (IsFree or (InsertAt = 0)) then begin Item.Start; end else Item.Operation.Pause; end; function TOperationsManagerQueue.Insert(Item: TOperationsManagerItem; TargetOperation: TOperationHandle; PlaceBefore: Boolean): Integer; begin Result := GetIndexByHandle(TargetOperation); if Result >= 0 then begin if not PlaceBefore then Inc(Result); Insert(Item, Result); end; end; function TOperationsManagerQueue.IsFree: Boolean; begin Result := (FIdentifier = FreeOperationsQueueId) or (FIdentifier = ModalQueueId); end; procedure TOperationsManagerQueue.Pause; var Index: Integer; begin if IsFree then begin for Index := 0 to Count - 1 do Items[Index].Operation.Pause; end else begin FPaused := True; if Count > 0 then Items[0].Operation.Pause; end; end; function TOperationsManagerQueue.Remove(Item: TOperationsManagerItem): Boolean; var Index: Integer; begin Index := FList.Remove(Item); Result := Index <> -1; if Result and (not Paused) and (not IsFree) and (Index = 0) and (Count > 0) then begin Items[0].Start; end; end; procedure TOperationsManagerQueue.Stop; var i: Integer; begin for i := 0 to Count - 1 do Items[i].Operation.Stop; end; procedure TOperationsManagerQueue.TogglePause; begin if Paused then UnPause else Pause; end; procedure TOperationsManagerQueue.UnPause; var Index: Integer; begin if IsFree then begin for Index := 0 to Count - 1 do Items[Index].Start; end else begin if Count > 0 then Items[0].Start; FPaused := False; end; end; { TOperationsManager } constructor TOperationsManager.Create; var Event: TOperationManagerEvent; begin FQueues := TFPList.Create; FLastUsedHandle := InvalidOperationHandle; for Event := Low(FEventsListeners) to High(FEventsListeners) do FEventsListeners[Event] := TFPList.Create; inherited Create; end; destructor TOperationsManager.Destroy; var i: Integer; Event: TOperationManagerEvent; begin inherited Destroy; for Event := Low(FEventsListeners) to High(FEventsListeners) do begin for i := 0 to FEventsListeners[Event].Count - 1 do Dispose(PEventsListItem(FEventsListeners[Event].Items[i])); FreeAndNil(FEventsListeners[Event]); end; if QueuesCount > 0 then DCDebug('Warning: Destroying Operations Manager with active operations!'); FreeAndNil(FQueues); end; function TOperationsManager.AddOperation(Operation: TFileSourceOperation; ShowProgress: Boolean): TOperationHandle; begin if fspListOnMainThread in (Operation.FileSource as IFileSource).Properties then Result := AddOperationModal(Operation) else begin Result := AddOperation(Operation, FreeOperationsQueueId, False, ShowProgress); end; end; function TOperationsManager.AddOperation( Operation: TFileSourceOperation; QueueIdentifier: TOperationsManagerQueueIdentifier; InsertAtFrontOfQueue: Boolean; ShowProgress: Boolean = True): TOperationHandle; var Item: TOperationsManagerItem; begin if QueueIdentifier = ModalQueueId then begin Result:= AddOperationModal(Operation); Exit; end; Result := InvalidOperationHandle; if Assigned(Operation) then begin Item := TOperationsManagerItem.Create(GetNextUnusedHandle, Operation, nil); if Assigned(Item) then try Operation.PreventStart; Result := Item.Handle; Item.SetQueue(GetOrCreateQueue(QueueIdentifier), InsertAtFrontOfQueue); NotifyEvents(Item, [omevOperationAdded]); if ShowProgress then ShowOperation(Item); except Item.Free; end; end; end; function TOperationsManager.AddOperationModal(Operation: TFileSourceOperation): TOperationHandle; var Thread: TOperationThread; Item: TOperationsManagerItem; begin Result := InvalidOperationHandle; if Assigned(Operation) then begin Thread := TOperationThread.Create(True, Operation); if Assigned(Thread) then begin if Assigned(Thread.FatalException) then raise Thread.FatalException; Item := TOperationsManagerItem.Create(GetNextUnusedHandle, Operation, Thread); if Assigned(Item) then try Operation.PreventStart; Result := Item.Handle; Item.SetQueue(GetOrCreateQueue(ModalQueueId), False); NotifyEvents(Item, [omevOperationAdded]); ShowOperationModal(Item); ThreadTerminatedEvent(Thread); except Item.Free; end; end; end; end; function TOperationsManager.GetOperationsCount: Integer; var QueueIndex: Integer; Queue: TOperationsManagerQueue; begin Result := 0; for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; Inc(Result, Queue.Count); end; end; function TOperationsManager.GetQueuesCount: Integer; begin Result := FQueues.Count; end; function TOperationsManager.MoveToNewQueue(Item: TOperationsManagerItem): TOperationsManagerQueueIdentifier; var NewQueueId: TOperationsManagerQueueIdentifier; NewQueue: TOperationsManagerQueue; begin for NewQueueId := Succ(FreeOperationsQueueId) to MaxInt do begin if not Assigned(QueueByIdentifier[NewQueueId]) then begin NewQueue := GetOrCreateQueue(NewQueueId); Item.SetQueue(NewQueue); Exit(NewQueueId); end; end; end; function TOperationsManager.GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; var QueueIndex: Integer; Queue: TOperationsManagerQueue; begin if Handle <> InvalidOperationHandle then begin for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; Result := Queue.ItemByHandle[Handle]; if Assigned(Result) then Exit; end; end; Result := nil; end; function TOperationsManager.GetItemByOperation(Operation: TFileSourceOperation): TOperationsManagerItem; var OperIndex, QueueIndex: Integer; Item: TOperationsManagerItem; Queue: TOperationsManagerQueue; begin for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin Item := Queue.Items[OperIndex]; if Item.Operation = Operation then Exit(Item); end; end; Result := nil; end; function TOperationsManager.GetItemByIndex(Index: Integer): TOperationsManagerItem; var OperIndex, QueueIndex: Integer; Queue: TOperationsManagerQueue; Counter: Integer; begin Counter := 0; for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin if Counter = Index then Exit(Queue.Items[OperIndex]); Inc(Counter); end; end; Result := nil; end; function TOperationsManager.GetOrCreateQueue(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; begin Result := QueueByIdentifier[Identifier]; if not Assigned(Result) then begin Result := TOperationsManagerQueue.Create(Identifier); FQueues.Add(Result); end; end; function TOperationsManager.GetNewQueueIdentifier: TOperationsManagerQueueIdentifier; var NewQueueId: TOperationsManagerQueueIdentifier; begin for NewQueueId := Succ(FreeOperationsQueueId) to MaxInt do begin if not Assigned(QueueByIdentifier[NewQueueId]) then begin Exit(NewQueueId); end; end; end; procedure TOperationsManager.MoveToQueue(Item: TOperationsManagerItem; QueueIdentifier: TOperationsManagerQueueIdentifier); var Queue: TOperationsManagerQueue; begin Queue := GetOrCreateQueue(QueueIdentifier); Item.SetQueue(Queue); end; function TOperationsManager.GetNextUnusedHandle: TOperationHandle; begin // Handles are consecutively incremented. // Even if they overflow there is little probability that // there will be that many operations. Result := InterLockedIncrement(FLastUsedHandle); if Result = InvalidOperationHandle then Result := InterLockedIncrement(FLastUsedHandle); end; function TOperationsManager.GetQueueByIndex(Index: Integer): TOperationsManagerQueue; begin if (Index >= 0) and (Index < FQueues.Count) then Result := TOperationsManagerQueue(FQueues.Items[Index]) else Result := nil; end; function TOperationsManager.GetQueueByIdentifier(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; var i: Integer; Queue: TOperationsManagerQueue; begin for i := 0 to FQueues.Count - 1 do begin Queue := QueueByIndex[i]; if Queue.Identifier = Identifier then Exit(Queue); end; Result := nil; end; procedure TOperationsManager.ThreadTerminatedEvent(Sender: TObject); var Thread: TOperationThread; Item: TOperationsManagerItem; OperIndex, QueueIndex: Integer; Queue: TOperationsManagerQueue; begin // This function is executed from the GUI thread (through Synchronize). Thread := Sender as TOperationThread; // Search the terminated thread in the operations list. for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin Item := TOperationsManagerItem(Queue.Items[OperIndex]); if Item.Thread = Thread then begin Item.RemoveFromQueue; NotifyEvents(Item, [omevOperationRemoved]); // Here the operation should not be used anymore // (by the thread and by any operations viewer). Item.Free; Exit; end; end; end; end; procedure TOperationsManager.PauseAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].Pause; end; procedure TOperationsManager.StopAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].Stop; end; procedure TOperationsManager.UnPauseAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].UnPause; end; function TOperationsManager.AllProgressPoint: Double; var Item: TOperationsManagerItem; i: Integer; begin Result := 0; if OperationsManager.OperationsCount <> 0 then begin for i := 0 to OperationsCount - 1 do begin Item := OperationsManager.GetItemByIndex(i); if Assigned(Item) then Result := Result + Item.Operation.Progress; // calculate allProgressBar end; Result := Result / OperationsManager.OperationsCount; // end; end; procedure TOperationsManager.AddEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); var Item: PEventsListItem; Event: TOperationManagerEvent; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin Item := New(PEventsListItem); Item^.EventFunction := FunctionToCall; FEventsListeners[Event].Add(Item); end; end; end; procedure TOperationsManager.RemoveEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); var Item: PEventsListItem; Event: TOperationManagerEvent; i: Integer; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin for i := 0 to FEventsListeners[Event].Count - 1 do begin Item := PEventsListItem(FEventsListeners[Event].Items[i]); if Item^.EventFunction = FunctionToCall then begin FEventsListeners[Event].Delete(i); Dispose(Item); break; // break from one for only end; end; end; end; end; procedure TOperationsManager.NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents); var EventItem: PEventsListItem; Event: TOperationManagerEvent; i: Integer; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin // Call each listener function. for i := 0 to FEventsListeners[Event].Count - 1 do begin EventItem := PEventsListItem(FEventsListeners[Event].Items[i]); EventItem^.EventFunction(Item, Event); end; end; end; end; initialization OperationsManager := TOperationsManager.Create; finalization FreeAndNil(OperationsManager); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uopendocthumb.pas��������������������������������������������������������������0000644�0001750�0000144�00000005427�15104114162�016745� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Open Document Format thumbnail provider Copyright (C) 2017 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uOpenDocThumb; {$mode objfpc}{$H+} interface uses Classes, SysUtils; implementation uses Unzip, ZipUtils, Graphics, Types, uThumbnails, uMasks, uGraphics; function ExtractThumbnail(FileName: PAnsiChar; MemoryStream: TMemoryStream): Boolean; var ASize: LongInt; ZipFile: unzFile; FileInfo: unz_file_info; begin Result:= False; ZipFile:= unzOpen(FileName); if Assigned(ZipFile) then try if unzLocateFile(ZipFile, 'Thumbnails/thumbnail.png', 0) = UNZ_OK then begin if unzGetCurrentFileInfo(ZipFile, @FileInfo, nil, 0, nil, 0, nil, 0) = UNZ_OK then begin MemoryStream.SetSize(FileInfo.uncompressed_size); if unzOpenCurrentFile(ZipFile) = UNZ_OK then begin ASize:= unzReadCurrentFile(ZipFile, MemoryStream.Memory, FileInfo.uncompressed_size); Result:= (ASize = FileInfo.uncompressed_size); unzCloseCurrentFile(ZipFile); end; end; end; finally unzClose(ZipFile); end; end; var MaskList: TMaskList = nil; function GetThumbnail(const aFileName: String; {%H-}aSize: TSize): Graphics.TBitmap; var MemoryStream: TMemoryStream; ABitmap: TPortableNetworkGraphic = nil; begin Result:= nil; if MaskList.Matches(aFileName) then begin MemoryStream:= TMemoryStream.Create; try if ExtractThumbnail(PAnsiChar(aFileName), MemoryStream) then begin ABitmap:= TPortableNetworkGraphic.Create; try ABitmap.LoadFromStream(MemoryStream); Result:= TBitmap.Create; BitmapAssign(Result, ABitmap); finally ABitmap.Free; end; end; except // Skip end; MemoryStream.Free; end; end; initialization TThumbnailManager.RegisterProvider(@GetThumbnail); MaskList:= TMaskList.Create('*.odt;*.ods;*.odp;*.odg'); finalization MaskList.Free; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uofficexml.pas�����������������������������������������������������������������0000644�0001750�0000144�00000040220�15104114162�016220� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Load text from office xml (*.docx, *.odt) Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uOfficeXML; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uMasks; var OfficeMask: TMaskList; const OFFICE_FILTER = '(*.docx, *.xlsx, *.odt, *.ods)'; function LoadFromOffice(const FileName: String; out AText: String): Boolean; implementation uses Math, Unzip, ZipUtils, Laz2_DOM, laz2_XMLRead, fpsNumFormat, fpsCommon, fgl; type TIntegerMap = class(specialize TFPGMap<Integer, TsNumFormatParams>); function ExtractFile(ZipFile: unzFile; MemoryStream: TMemoryStream): Boolean; var ASize: LongInt; FileInfo: unz_file_info; begin Result:= unzGetCurrentFileInfo(ZipFile, @FileInfo, nil, 0, nil, 0, nil, 0) = UNZ_OK; if Result then begin MemoryStream.SetSize(FileInfo.uncompressed_size); if unzOpenCurrentFile(ZipFile) = UNZ_OK then begin ASize:= unzReadCurrentFile(ZipFile, MemoryStream.Memory, FileInfo.uncompressed_size); Result:= (ASize = FileInfo.uncompressed_size); unzCloseCurrentFile(ZipFile); end; end; end; { Office Open XML } procedure ProcessOfficeOpenNodes(var S: String; ANode: TDOMNode); var I: Integer; ASubNode: TDOMNode; ANodeName: DOMString; begin for I:= 0 to ANode.ChildNodes.Count - 1 do begin ASubNode := ANode.ChildNodes.Item[I]; ANodeName := ASubNode.NodeName; if (ANodeName = 'w:t') then begin if Assigned(ASubNode.FirstChild) then S += ASubNode.FirstChild.NodeValue; end else if (ANodeName = 'w:p') then S += LineEnding + LineEnding else if (ANodeName = 'w:br') or (ANodeName = 'w:cr') then S += LineEnding else if (ANodeName = 'w:tab') then S += #9; if ASubNode.ChildNodes.Count > 0 then ProcessOfficeOpenNodes(S, ASubNode); end; end; procedure ProcessFile(ZipFile: unzFile; const FileName: String; var AText: String); var ADoc: TXMLDocument; AStream: TMemoryStream; begin if unzLocateFile(ZipFile, PAnsiChar(FileName), 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned (ADoc) then begin ProcessOfficeOpenNodes(AText, ADoc.DocumentElement); ADoc.Free; end; end; finally AStream.Free; end; end; end; function LoadFromOfficeOpen(const FileName: String; out AText: String): Boolean; const HEADER_XML = 'word/header%d.xml'; FOOTER_XML = 'word/footer%d.xml'; var Index: Integer; ZipFile: unzFile; begin AText:= EmptyStr; ZipFile:= unzOpen(PAnsiChar(FileName)); Result:= Assigned(ZipFile); if Result then try // Read headers for Index:= 0 to 9 do begin ProcessFile(ZipFile, Format(HEADER_XML, [Index]), AText); end; // Read body ProcessFile(ZipFile, 'word/document.xml', AText); // Read footers for Index:= 0 to 9 do begin ProcessFile(ZipFile, Format(FOOTER_XML, [Index]), AText); end; Result:= Length(AText) > 0; finally unzClose(ZipFile); end; end; { Open Document Format } procedure ProcessOpenOfficeNodes(var S: String; ANode: TDOMNode); var I: Integer; ASubNode: TDOMNode; ANodeName: DOMString; procedure ParseSubNode(ANode: TDOMNode); var J: Integer; ASubNode: TDOMNode; begin for J:= 0 to ANode.ChildNodes.Count - 1 do begin ASubNode := ANode.ChildNodes.Item[J]; ANodeName := ASubNode.NodeName; if ANodeName = 'text:s' then S += ' ' else if ANodeName = 'text:tab' then S += #9 else if ANodeName = 'text:line-break' then S += LineEnding else if (ASubNode.NodeType = TEXT_NODE) then S += ASubNode.NodeValue else begin ParseSubNode(ASubNode); end; end; end; begin for I:= 0 to ANode.ChildNodes.Count - 1 do begin ASubNode := ANode.ChildNodes.Item[I]; ANodeName := ASubNode.NodeName; if (ANodeName = 'text:p') or (ANodeName = 'text:h')then begin if ASubNode.ChildNodes.Count > 0 then begin ParseSubNode(ASubNode); S += LineEnding; end; end else if ASubNode.ChildNodes.Count > 0 then ProcessOpenOfficeNodes(S, ASubNode); end; end; function LoadFromOpenOffice(const FileName: String; out AText: String): Boolean; const CONTENT_XML = 'content.xml'; var ZipFile: unzFile; ADoc: TXMLDocument; AStream: TMemoryStream; begin Result:= False; AText:= EmptyStr; ZipFile:= unzOpen(PAnsiChar(FileName)); if Assigned(ZipFile) then try if unzLocateFile(ZipFile, CONTENT_XML, 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned (ADoc) then begin ProcessOpenOfficeNodes(AText, ADoc.DocumentElement); ADoc.Free; end; end; finally AStream.Free; end; end; Result:= Length(AText) > 0; finally unzClose(ZipFile); end; end; { Office Open XML Excel } function FindNode(ANode: TDOMNode; const ANodeName: String): TDOMNode; begin Result:= ANode.FindNode(ANodeName); if Result = nil then Result:= ANode.FindNode('x:' + ANodeName); end; function ParseSubNode(ANode: TDOMNode): String; var ASubNode: TDOMNode; begin Result:= EmptyStr; ASubNode:= ANode.FirstChild; while Assigned(ASubNode) do begin if (ASubNode.NodeType = TEXT_NODE) then Result+= ASubNode.NodeValue else begin Result+= ParseSubNode(ASubNode); end; ASubNode:= ASubNode.NextSibling; end; end; function GetAttrValue(ANode: TDOMNode; AName: String): String; begin Result:= EmptyStr; if (ANode = nil) or (ANode.Attributes = nil) then Exit; ANode:= ANode.Attributes.GetNamedItem(AName); if Assigned(ANode) then Result:= ANode.NodeValue; end; procedure ParseStyles(ZipFile: unzFile; Styles: TIntegerMap; Storage: TsNumFormatList); const STYLES_XML = 'xl/styles.xml'; var AName: String; Index: Integer; Style: Integer; ADoc: TXMLDocument; Formats: TStringList; AStream: TMemoryStream; ANode, ASubNode, AFormat: TDOMNode; begin Formats:= TStringList.Create; try if unzLocateFile(ZipFile, STYLES_XML, 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned (ADoc) then begin AddBuiltInBiffFormats(Formats, FormatSettings, 163); ANode:= ADoc.DocumentElement; if Assigned(ANode) then begin ASubNode:= FindNode(ANode, 'numFmts'); if Assigned(ASubNode) then begin AFormat:= ASubNode.FirstChild; while Assigned(AFormat) do begin AName:= AFormat.NodeName; if (AName = 'numFmt') or (AName = 'x:numFmt') then begin AName:= GetAttrValue(AFormat, 'numFmtId'); if TryStrToInt(AName, Index) then begin while Formats.Count <= Index do Formats.Add(EmptyStr); Formats[Index]:= GetAttrValue(AFormat, 'formatCode'); end; end; AFormat:= AFormat.NextSibling; end; end; ASubNode:= FindNode(ANode, 'cellXfs'); if Assigned(ASubNode) then begin Style:= 0; AFormat:= ASubNode.FirstChild; while Assigned(AFormat) do begin AName:= AFormat.NodeName; if (AName = 'xf') or (AName = 'x:xf') then begin AName:= GetAttrValue(AFormat, 'numFmtId'); if TryStrToInt(AName, Index) then begin AName:= GetAttrValue(AFormat, 'applyNumberFormat'); if StrToBoolDef(AName, True) then begin if InRange(Index, 0, Formats.Count - 1) then begin AName:= Formats[Index]; if not SameText(AName, 'General') then begin Index:= Storage.AddFormat(AName); Styles.Add(Style, Storage.Items[Index]); end; end; end; end; Inc(Style); end; AFormat:= AFormat.NextSibling; end; end; end; ADoc.Free; end; end; finally AStream.Free; end; end; finally Formats.Free; end; end; function ParseWorkbook(ZipFile: unzFile; Sheets: TStringList): Boolean; const CONTENT_XML = 'xl/workbook.xml'; var AName: String; ADoc: TXMLDocument; AStream: TMemoryStream; ANode, ASubNode: TDOMNode; begin if unzLocateFile(ZipFile, CONTENT_XML, 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned(ADoc) then begin ANode:= FindNode(ADoc.DocumentElement, 'sheets'); if Assigned(ANode) then begin ASubNode:= ANode.FirstChild; while Assigned(ASubNode) do begin AName:= ASubNode.NodeName; if (AName = 'sheet') or (AName = 'x:sheet') then begin AName:= GetAttrValue(ASubNode, 'name'); Sheets.Add(AName); end; ASubNode:= ASubNode.NextSibling; end; end; ADoc.Free; end; end; finally AStream.Free; end; end; Result:= (Sheets.Count > 0); end; procedure ParseSharedStrings(ZipFile: unzFile; Strings: TStringList); const STRINGS_XML = 'xl/sharedStrings.xml'; var AName: String; ADoc: TXMLDocument; AStream: TMemoryStream; ANode, ASubNode: TDOMNode; begin if unzLocateFile(ZipFile, STRINGS_XML, 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned (ADoc) then begin ANode:= ADoc.DocumentElement; if Assigned(ANode) then begin ASubNode:= ANode.FirstChild; while Assigned(ASubNode) do begin AName:= ASubNode.NodeName; if (AName = 'si') or (AName = 'x:si') then begin Strings.Add(ParseSubNode(ASubNode)); end; ASubNode:= ASubNode.NextSibling; end; end; ADoc.Free; end; end; finally AStream.Free; end; end; end; procedure ParseCell(ACell: TDOMNode; Strings: TStringList; Styles: TIntegerMap; var Text: String); var D: Double; K: Integer; ATemp: String; AType: String; Index: Integer; AStyle: String; AValue: TDOMNode; F: TsNumFormatParams; Format: TFormatSettings; begin AType:= GetAttrValue(ACell, 't'); if (AType = 'inlineStr') then AValue:= FindNode(ACell, 'is') else begin AValue:= FindNode(ACell, 'v'); end; if Assigned(AValue) then begin ATemp:= ParseSubNode(AValue); // Shared string if AType = 's' then begin K:= StrToIntDef(ATemp, -1); if InRange(K, 0, Strings.Count - 1) then Text+= Strings[K]; end // Inline string or formula else if (AType = 'inlineStr') or (AType = 'str') then begin Text+= ATemp; end // Number or general else if (AType = 'n') or (AType = '') then begin AStyle:= GetAttrValue(ACell, 's'); if not TryStrToInt(AStyle, K) then Text+= ATemp else begin Index:= Styles.IndexOf(K); if (Index < 0) then Text+= ATemp else begin F:= Styles.Data[Index]; Format:= FormatSettings; Format.DecimalSeparator:= '.'; if not TryStrToFloat(ATemp, D, Format) then Text+= ATemp else Text+= ConvertFloatToStr(D, F, FormatSettings); end; end; end; end; end; procedure ParseSheet(ZipFile: unzFile; Sheet: Integer; Strings: TStringList; Styles: TIntegerMap; var Text: String); const SHEET_XML = 'xl/worksheets/sheet%d.xml'; var AName: String; ADoc: TXMLDocument; AStream: TMemoryStream; ANode, ARow, ACell: TDOMNode; begin AName:= Format(SHEET_XML, [Sheet]); if unzLocateFile(ZipFile, PAnsiChar(AName), 0) = UNZ_OK then begin AStream:= TMemoryStream.Create; try if ExtractFile(ZipFile, AStream) then begin ReadXMLFile(ADoc, AStream, [xrfPreserveWhiteSpace]); if Assigned(ADoc) then begin ANode:= FindNode(ADoc.DocumentElement, 'sheetData'); if Assigned(ANode) then begin ARow:= ANode.FirstChild; while Assigned(ARow) do begin AName:= ARow.NodeName; if (AName = 'row') or (AName = 'x:row') then begin ACell:= ARow.FirstChild; while Assigned(ACell) do begin AName:= ACell.NodeName; if (AName = 'c') or (AName = 'x:c') then begin Text+= #26; ParseCell(ACell, Strings, Styles, Text); end; ACell:= ACell.NextSibling; end; Text+= LineEnding; end; ARow:= ARow.NextSibling; end; end; ADoc.Free; end; end; finally AStream.Free; end; end; end; function LoadFromExcel(const FileName: String; out AText: String): Boolean; var Index: Integer; ZipFile: unzFile; Styles: TIntegerMap; Storage: TsNumFormatList; Sheets, Strings: TStringList; begin Result:= False; Sheets:= TStringList.Create; Styles:= TIntegerMap.Create; Strings:= TStringList.Create; Storage:= TsNumFormatList.Create(FormatSettings, True); try ZipFile:= unzOpen(PAnsiChar(FileName)); if Assigned(ZipFile) then try if ParseWorkbook(ZipFile, Sheets) then begin AText:= EmptyStr; ParseSharedStrings(ZipFile, Strings); ParseStyles(ZipFile, Styles, Storage); for Index:= 0 to Sheets.Count - 1 do begin AText+= Sheets[Index] + LineEnding; ParseSheet(ZipFile, Index + 1, Strings, Styles, AText); end; Result:= Length(AText) > 0; end; finally unzClose(ZipFile); end; finally Sheets.Free; Styles.Free; Strings.Free; Storage.Free; end; end; function LoadFromOffice(const FileName: String; out AText: String): Boolean; begin if SameText(ExtractFileExt(FileName), '.docx') then Result:= LoadFromOfficeOpen(FileName, AText) else if SameText(ExtractFileExt(FileName), '.xlsx') then Result:= LoadFromExcel(FileName, AText) else Result:= LoadFromOpenOffice(FileName, AText); end; initialization OfficeMask:= TMaskList.Create('*.docx;*.xlsx;*.odt;*.ods'); finalization OfficeMask.Free; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/un_xtrctdwrflnfo.pp������������������������������������������������������������0000644�0001750�0000144�00000104615�15104114162�017334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Parts (c) 2006 Thomas Schatzl, member of the FreePascal Development team Parts (c) 2000 Peter Vreman (adapted from original stabs line reader) Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These as of Jan. 2008 / FPC 2.2.0 both didn't work and had several limitations (e.g. inability to be used from a DLL) Oct 2009, by cobines Now can extract from ELF32, ELF64, PE regardless of base platform (Linux and Win). Fixed reading .debug_line section from PE files (now long section name is used). Nov 2012, by alexx2000 Now can extract from Mach-O binary (Mac OS X, Intel 32 and 64 bit). } {$mode delphi} {$longstrings on} {$ifndef endian_little} {$fatal powerpc architecture not supported} {$endif} unit un_xtrctdwrflnfo; interface uses SysUtils, Classes; function ExtractDwarfLineInfo( ExeFileName: ansistring; out _dlnfo: pointer; out _dlnfoSize: QWord; out Imagebase: QWord): longbool; { Reads the dwarf line info from an executable. In case of error, see ExtractDwarfLineInfoError for details. ImageBase is nil for unix DLLs in all other cases the value it receives must be substracted from the addresses in the dwarf line info (and then the real base address added, to account for the possible relocation) NOTE: currently in unix it is also NIL for the main executable, corresponding the GetModuleByAddr() in un_lineinfo also returning NIL as the base address for the main executable. } function DlnNameByExename(exename: string): string; {generates file names with .zdli extension. Use in cases when both your windows and linux binaries are placed in the same folder } var ExtractDwarfLineInfoError: WideString = ''; implementation uses zstream; const // Cannot use reference counted strings because they are emptied // when a function from this module is called two or more times // while an exception is being processed (don't know why). DwarfDebugLine: shortstring = '.debug_line'; DwarfZDebugLine: shortstring = '.zdebug_line'; DwarfDarwinDebugLine: shortstring = '__debug_line'; DwarfDarwinSegmentName: shortstring = '__DWARF'; TextDarwinSegmentName: shortstring = '__TEXT'; type TCheckResult = (header_not_found, header_invalid, no_debug_info, found_debug_info); {$MACRO ON} {$ifdef DEBUG_DWARF_PARSER} {$define DEBUG_WRITELN := WriteLn} {$define DEBUG_COMMENT := } {$else} {$define DEBUG_WRITELN := //} {$define DEBUG_COMMENT := //} {$endif} { ELF Header structures types} type Elf32_Half = Word; Elf64_Half = Word; { Types for signed and unsigned 32-bit quantities. } Elf32_Word = DWord; Elf32_Sword = Longint; Elf64_Word = DWord; Elf64_Sword = Longint; { Types for signed and unsigned 64-bit quantities. } Elf32_Xword = QWord; Elf32_Sxword = Int64; Elf64_Xword = QWord; Elf64_Sxword = Int64; { Type of addresses. } Elf32_Addr = DWord; Elf64_Addr = QWord; { Type of file offsets. } Elf32_Off = DWord; Elf64_Off = QWord; { Type for section indices, which are 16-bit quantities. } Elf32_Section = Word; Elf64_Section = Word; { Type for version symbol information. } Elf32_Versym = Elf32_Half; Elf64_Versym = Elf64_Half; { some constants from the corresponding header files } const El_NIDENT = 16; { some important indices into the e_ident signature of an ELF file } EI_MAG0 = 0; EI_MAG1 = 1; EI_MAG2 = 2; EI_MAG3 = 3; EI_CLASS = 4; { the first byte of the e_ident array must be of this value } ELFMAG0 = $7f; { the second byte of the e_ident array must be of this value } ELFMAG1 = Byte('E'); { the third byte of the e_ident array must be of this value } ELFMAG2 = Byte('L'); { the fourth byte of the e_ident array must be of this value } ELFMAG3 = Byte('F'); { the fifth byte specifies the bitness of the header; all other values are invalid } ELFCLASS32 = 1; ELFCLASS64 = 2; {$packrecords c} type { The ELF file header. This appears at the start of every ELF file, 32 bit version } TElf32_Ehdr = record e_ident : array[0..El_NIDENT-1] of Byte; { file identification } e_type : Elf32_Half; { file type } e_machine : Elf32_Half; { machine architecture } e_version : Elf32_Word; { ELF format version } e_entry : Elf32_Addr; { entry point } e_phoff : Elf32_Off; { program header file offset } e_shoff : Elf32_Off; { section header file offset } e_flags : Elf32_Word; { architecture specific flags } e_ehsize : Elf32_Half; { size of ELF header in bytes } e_phentsize : Elf32_Half; { size of program header entry } e_phnum : Elf32_Half; { number of program header entries } e_shentsize : Elf32_Half; { size of section header entry } e_shnum : Elf32_Half; { number of section header entry } e_shstrndx : Elf32_Half; { section name strings section index } end; { ELF32 Section header } TElf32_Shdr = record sh_name : Elf32_Word; { section name } sh_type : Elf32_Word; { section type } sh_flags : Elf32_Word; { section flags } sh_addr : Elf32_Addr; { virtual address } sh_offset : Elf32_Off; { file offset } sh_size : Elf32_Word; { section size } sh_link : Elf32_Word; { misc info } sh_info : Elf32_Word; { misc info } sh_addralign : Elf32_Word; { memory alignment } sh_entsize : Elf32_Word; { entry size if table } end; { The ELF file header. This appears at the start of every ELF file, 64 bit version } TElf64_Ehdr = record e_ident : array[0..El_NIDENT-1] of Byte; e_type : Elf64_Half; e_machine : Elf64_Half; e_version : Elf64_Word; e_entry : Elf64_Addr; e_phoff : Elf64_Off; e_shoff : Elf64_Off; e_flags : Elf64_Word; e_ehsize : Elf64_Half; e_phentsize : Elf64_Half; e_phnum : Elf64_Half; e_shentsize : Elf64_Half; e_shnum : Elf64_Half; e_shstrndx : Elf64_Half; end; { ELF64 Section header } TElf64_Shdr = record sh_name : Elf64_Word; sh_type : Elf64_Word; sh_flags : Elf64_Xword; sh_addr : Elf64_Addr; sh_offset : Elf64_Off; sh_size : Elf64_Xword; sh_link : Elf64_Word; sh_info : Elf64_Word; sh_addralign : Elf64_Xword; sh_entsize : Elf64_Xword; end; {$packrecords default} const (* Constant for the magic field of the TMacho32Header (32-bit architectures) *) MH_MAGIC = $feedface; (* the mach magic number *) MH_CIGAM = $cefaedfe; (* NXSwapInt(MH_MAGIC) *) (* Constant for the magic field of the TMacho64Header (64-bit architectures) *) MH_MAGIC_64 = $feedfacf; (* the 64-bit mach magic number *) MH_CIGAM_64 = $cffaedfe; (* NXSwapInt(MH_MAGIC_64) *) (* Constants for the cmd field of all load commands, the type *) LC_SEGMENT = $00000001; (* segment of this file to be mapped *) LC_SEGMENT_64 = $00000019; (* 64-bit segment of this file to be mapped *) type { The 32-bit mach header appears at the very beginning of the object file for 32-bit architectures. } TMacho32Header = packed record magic: longword; (* mach magic number identifier *) cputype: longint; (* cpu specifier *) cpusubtype: longint; (* machine specifier *) filetype: longword; (* type of file *) ncmds: longword; (* number of load commands *) sizeofcmds: longword; (* the size of all the load commands *) flags: longword; (* flags *) end; { The 64-bit mach header appears at the very beginning of object files for 64-bit architectures. } TMacho64Header = packed record magic: longword; (* mach magic number identifier *) cputype: longint; (* cpu specifier *) cpusubtype: longint; (* machine specifier *) filetype: longword; (* type of file *) ncmds: longword; (* number of load commands *) sizeofcmds: longword; (* the size of all the load commands *) flags: longword; (* flags *) reserved: longword; (* reserved *) end; { The load commands directly follow the mach_header. } TMachoLoadCommand = packed record cmd: longword; (* type of load command *) cmdsize: longword; (* total size of command in bytes *) end; { The segment load command indicates that a part of this file is to be mapped into the task's address space. } TMacho32SegmentCommand = packed record (* for 32-bit architectures *) cmd: longword; (* LC_SEGMENT *) cmdsize: longword; (* includes sizeof section structs *) segname: array[0..15] of ansichar; (* segment name *) vmaddr: longword; (* memory address of this segment *) vmsize: longword; (* memory size of this segment *) fileoff: longword; (* file offset of this segment *) filesize: longword; (* amount to map from the file *) maxprot: longint; (* maximum VM protection *) initprot: longint; (* initial VM protection *) nsects: longword; (* number of sections in segment *) flags: longword; (* flags *) end; { The 64-bit segment load command indicates that a part of this file is to be mapped into a 64-bit task's address space. } TMacho64SegmentCommand = packed record (* for 64-bit architectures *) cmd: longword; (* LC_SEGMENT_64 *) cmdsize: longword; (* includes sizeof section_64 structs *) segname: array[0..15] of ansichar; (* segment name *) vmaddr: qword; (* memory address of this segment *) vmsize: qword; (* memory size of this segment *) fileoff: qword; (* file offset of this segment *) filesize: qword; (* amount to map from the file *) maxprot: longint; (* maximum VM protection *) initprot: longint; (* initial VM protection *) nsects: longword; (* number of sections in segment *) flags: longword; (* flags *) end; { The 32-bit segment section header. } TMacho32SegmentSection = packed record (* for 32-bit architectures *) sectname: array[0..15] of ansichar; (* name of this section *) segname: array[0..15] of ansichar; (* segment this section goes in *) addr: longword; (* memory address of this section *) size: longword; (* size in bytes of this section *) offset: longword; (* file offset of this section *) align: longword; (* section alignment (power of 2) *) reloff: longword; (* file offset of relocation entries *) nreloc: longword; (* number of relocation entries *) flags: longword; (* flags (section type and attributes)*) reserved1: longword; (* reserved (for offset or index) *) reserved2: longword; (* reserved (for count or sizeof) *) end; { The 64-bit segment section header. } TMacho64SegmentSection = packed record (* for 64-bit architectures *) sectname: array[0..15] of ansichar; (* name of this section *) segname: array[0..15] of ansichar; (* segment this section goes in *) addr: qword; (* memory address of this section *) size: qword; (* size in bytes of this section *) offset: longword; (* file offset of this section *) align: longword; (* section alignment (power of 2) *) reloff: longword; (* file offset of relocation entries *) nreloc: longword; (* number of relocation entries *) flags: longword; (* flags (section type and attributes)*) reserved1: longword; (* reserved (for offset or index) *) reserved2: longword; (* reserved (for count or sizeof) *) reserved3: longword; (* reserved *) end; type tdosheader = packed record e_magic : word; e_cblp : word; e_cp : word; e_crlc : word; e_cparhdr : word; e_minalloc : word; e_maxalloc : word; e_ss : word; e_sp : word; e_csum : word; e_ip : word; e_cs : word; e_lfarlc : word; e_ovno : word; e_res : array[0..3] of word; e_oemid : word; e_oeminfo : word; e_res2 : array[0..9] of word; e_lfanew : longint; end; tpeheader = packed record PEMagic : longint; Machine : word; NumberOfSections : word; TimeDateStamp : longint; PointerToSymbolTable : longint; NumberOfSymbols : longint; SizeOfOptionalHeader : word; Characteristics : word; end; tpeoptionalheader32 = packed record Magic : word; MajorLinkerVersion : byte; MinorLinkerVersion : byte; SizeOfCode : longint; SizeOfInitializedData : longint; SizeOfUninitializedData : longint; AddressOfEntryPoint : longint; BaseOfCode : longint; BaseOfData : longint; ImageBase : longint; SectionAlignment : longint; FileAlignment : longint; MajorOperatingSystemVersion : word; MinorOperatingSystemVersion : word; MajorImageVersion : word; MinorImageVersion : word; MajorSubsystemVersion : word; MinorSubsystemVersion : word; Win32VersionValue : longint; SizeOfImage : longint; SizeOfHeaders : longint; CheckSum : longint; Subsystem : word; DllCharacteristics : word; SizeOfStackReserve : longint; SizeOfStackCommit : longint; SizeOfHeapReserve : longint; SizeOfHeapCommit : longint; LoaderFlags : longint; NumberOfRvaAndSizes : longint; DataDirectory : array[1..$80] of byte; end; tpeoptionalheader64 = packed record Magic : word; MajorLinkerVersion : byte; MinorLinkerVersion : byte; SizeOfCode : longint; SizeOfInitializedData : longint; SizeOfUninitializedData : longint; AddressOfEntryPoint : longint; BaseOfCode : longint; ImageBase : qword; SectionAlignment : longint; FileAlignment : longint; MajorOperatingSystemVersion : word; MinorOperatingSystemVersion : word; MajorImageVersion : word; MinorImageVersion : word; MajorSubsystemVersion : word; MinorSubsystemVersion : word; Win32VersionValue : longint; SizeOfImage : longint; SizeOfHeaders : longint; CheckSum : longint; Subsystem : word; DllCharacteristics : word; SizeOfStackReserve : qword; SizeOfStackCommit : qword; SizeOfHeapReserve : qword; SizeOfHeapCommit : qword; LoaderFlags : longint; NumberOfRvaAndSizes : longint; DataDirectory : array[1..$80] of byte; end; tcoffsechdr=packed record name : array[0..7] of char; vsize : longint; rvaofs : longint; datalen : longint; datapos : longint; relocpos : longint; lineno1 : longint; nrelocs : word; lineno2 : word; flags : longint; end; coffsymbol=packed record name : array[0..3] of char; { real is [0..7], which overlaps the strofs ! } strofs : longint; value : longint; section : smallint; empty : word; typ : byte; aux : byte; end; function DlnNameByExename(exename: string): string; begin Result := ChangeFileExt(exename, '.zdli'); end; function cntostr(cn: pchar): string; var i: integer = 0; begin Result:=''; repeat if cn^ = #0 then break; Result+= cn^; inc(i); inc(cn); until i = 8; end; function ExtractElf32( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var header : TElf32_Ehdr; strtab_header : TElf32_Shdr; cursec_header : TElf32_Shdr; i: Integer; buf : array[0..20] of char; sectionName: string; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the ELF header!'; Exit(false); end; { seek to the start of section headers } { first get string section header } f.Position:= header.e_shoff + (header.e_shstrndx * header.e_shentsize); if (f.read(strtab_header, sizeof(strtab_header)) <> sizeof(strtab_header)) then begin ExtractDwarfLineInfoError:='Could not read string section header'; Exit(false); end; for i := 0 to (header.e_shnum-1) do begin // Section nr 0 is reserved. if i = 0 then Continue; f.Position:= header.e_shoff + (i * header.e_shentsize); if (f.Read(cursec_header, sizeof(cursec_header)) <> sizeof(cursec_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; { paranoia TODO: check cursec_header.e_shentsize } f.Position:= strtab_header.sh_offset + cursec_header.sh_name; if (f.Read(buf, sizeof(buf)) <> sizeof(buf)) then begin ExtractDwarfLineInfoError:='Could not read section name'; Exit(false); end; buf[sizeof(buf)-1] := #0; sectionName := StrPas(pchar(@buf[0])); DEBUG_WRITELN('Section ', i, ': ', sectionName, ', offset ', IntToStr(cursec_header.sh_offset), ', size ', IntToStr(cursec_header.sh_size)); if sectionName = DwarfDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DwarfLineInfoSize := cursec_header.sh_size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); break; end else if sectionName = DwarfZDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); break; end; end; end; function ExtractElf64( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var header : TElf64_Ehdr; strtab_header : TElf64_Shdr; cursec_header : TElf64_Shdr; i: Integer; buf : array[0..20] of char; sectionName: string; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the ELF header!'; Exit(false); end; { seek to the start of section headers } { first get string section header } f.Position:= header.e_shoff + (header.e_shstrndx * header.e_shentsize); if (f.read(strtab_header, sizeof(strtab_header)) <> sizeof(strtab_header)) then begin ExtractDwarfLineInfoError:='Could not read string section header'; Exit(false); end; for i := 0 to (header.e_shnum-1) do begin f.Position:= header.e_shoff + (i * header.e_shentsize); if (f.Read(cursec_header, sizeof(cursec_header)) <> sizeof(cursec_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; { paranoia TODO: check cursec_header.e_shentsize } f.Position:= strtab_header.sh_offset + cursec_header.sh_name; if (f.Read(buf, sizeof(buf)) <> sizeof(buf)) then begin ExtractDwarfLineInfoError:='Could not read section name'; Exit(false); end; buf[sizeof(buf)-1] := #0; DEBUG_WRITELN('This section is ', pchar(@buf[0]), ', offset ', IntToStr(cursec_header.sh_offset), ', size ', IntToStr(cursec_header.sh_size)); sectionName := StrPas(pchar(@buf[0])); if sectionName = DwarfDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DwarfLineInfoSize := cursec_header.sh_size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); break; end; if sectionName = DwarfZDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); break; end; end; end; function ExtractMacho32( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var I, J : Integer; header : TMacho32Header; load_command : TMachoLoadCommand; segment_header : TMacho32SegmentCommand; section_header : TMacho32SegmentSection; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the Mach-O header!'; Exit(false); end; for I:= 1 to header.ncmds do begin if (f.Read(load_command, sizeof(load_command)) <> sizeof(load_command)) then begin ExtractDwarfLineInfoError:='Could not read next segment header'; Exit(false); end; if (load_command.cmd <> LC_SEGMENT) then f.Seek(load_command.cmdsize - sizeof(load_command), soFromCurrent) else begin f.Seek(-sizeof(load_command), soFromCurrent); if (f.Read(segment_header, sizeof(segment_header)) <> sizeof(segment_header)) then begin ExtractDwarfLineInfoError:='Could not read segment name'; Exit(false); end; if segment_header.segname <> DwarfDarwinSegmentName then begin f.Seek(load_command.cmdsize - sizeof(segment_header), soFromCurrent); if segment_header.segname = TextDarwinSegmentName then Imagebase:= segment_header.vmaddr; end else begin for J:= 0 to segment_header.nsects - 1 do begin if (f.Read(section_header, sizeof(section_header)) <> sizeof(section_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; DEBUG_WRITELN('Section ', I, ': ', section_header.sectname, ', offset ', IntToStr(section_header.offset), ', size ', IntToStr(section_header.size)); if section_header.sectname = DwarfDarwinDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DwarfLineInfoSize := section_header.size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); Break; end else if section_header.sectname = DwarfZDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); Break; end; end; Break; end; end; end; end; function ExtractMacho64( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var I, J : Integer; header : TMacho64Header; load_command : TMachoLoadCommand; segment_header : TMacho64SegmentCommand; section_header : TMacho64SegmentSection; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the Mach-O header!'; Exit(false); end; for I:= 1 to header.ncmds do begin if (f.Read(load_command, sizeof(load_command)) <> sizeof(load_command)) then begin ExtractDwarfLineInfoError:='Could not read next segment header'; Exit(false); end; if (load_command.cmd <> LC_SEGMENT_64) then f.Seek(load_command.cmdsize - sizeof(load_command), soFromCurrent) else begin f.Seek(-sizeof(load_command), soFromCurrent); if (f.Read(segment_header, sizeof(segment_header)) <> sizeof(segment_header)) then begin ExtractDwarfLineInfoError:='Could not read segment name'; Exit(false); end; if segment_header.segname <> DwarfDarwinSegmentName then begin f.Seek(load_command.cmdsize - sizeof(segment_header), soFromCurrent); if segment_header.segname = TextDarwinSegmentName then Imagebase:= segment_header.vmaddr; end else begin for J:= 0 to segment_header.nsects - 1 do begin if (f.Read(section_header, sizeof(section_header)) <> sizeof(section_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; DEBUG_WRITELN('Section ', I, ': ', section_header.sectname, ', offset ', IntToStr(section_header.offset), ', size ', IntToStr(section_header.size)); if section_header.sectname = DwarfDarwinDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DwarfLineInfoSize := section_header.size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); Break; end else if section_header.sectname = DwarfZDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); Break; end; end; Break; end; end; end; end; function CheckWindowsExe( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var dosheader : tdosheader; peheader : tpeheader; peoptheader32 : tpeoptionalheader32; peoptheader64 : tpeoptionalheader64; coffsec : tcoffsechdr; stringsSectionOffset: PtrUInt; sectionName : String; i: Integer; function GetLongSectionName(numberedSectionName: String): String; var sectionNameBuf : array[0..255] of char; stringOffset : Cardinal; oldOffset: Int64; code: Integer; begin Val(Copy(numberedSectionName, 2, 8), stringOffset, code); if code=0 then begin fillchar(sectionNameBuf, sizeof(sectionNameBuf), 0); oldOffset := f.Position; f.Seek(stringsSectionOffset + stringOffset, soBeginning); f.Read(sectionNameBuf, sizeof(sectionNameBuf)); f.Seek(oldOffset, soBeginning); Result := StrPas(sectionNameBuf); end else Result := ''; end; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := header_not_found; { read and check header } if f.Size >= sizeof(tdosheader) then begin f.Read(dosheader, sizeof(tdosheader)); if dosheader.e_magic = $5A4D then // 'MZ' begin f.Position:= dosheader.e_lfanew; if (f.Size - f.Position) >= sizeof(tpeheader) then begin f.Read(peheader, sizeof(tpeheader)); if peheader.pemagic = $4550 then // 'PE' begin peoptheader32.magic := f.ReadWord; if (peoptheader32.magic = $10B) and (peheader.SizeOfOptionalHeader = sizeof(tpeoptionalheader32)) then begin DEBUG_WRITELN('Found Windows Portable Executable header (32-bit).'); f.Read(peoptheader32.MajorLinkerVersion, sizeof(tpeoptionalheader32) - sizeof(tpeoptionalheader32.Magic)); ImageBase:= peoptheader32.Imagebase; end else if (peoptheader32.magic = $20B) and (peheader.SizeOfOptionalHeader = sizeof(tpeoptionalheader64)) then begin DEBUG_WRITELN('Found Windows Portable Executable header (64-bit).'); peoptheader64.magic := peoptheader32.magic; f.Read(peoptheader64.MajorLinkerVersion, sizeof(tpeoptionalheader64) - sizeof(tpeoptionalheader64.Magic)); ImageBase:= peoptheader64.Imagebase; end else begin DEBUG_WRITELN('Unsupported Windows Portable Executable.'); Exit; end; stringsSectionOffset := peheader.PointerToSymbolTable + peheader.NumberOfSymbols * sizeof(coffsymbol); { read section info } for i:=1 to peheader.NumberOfSections do begin f.Read(coffsec, sizeof(tcoffsechdr)); sectionName := cntostr(@coffsec.name); if Length(sectionName) <= 0 then continue; if sectionName[1]='/' then // Section name longer than 8 characters. sectionName := GetLongSectionName(sectionName); DEBUG_WRITELN(sectionName); if sectionName = DwarfDebugLine then begin DwarfLineInfoOffset:= coffsec.datapos; DwarfLineInfoSize:= coffsec.datalen; break; end; if sectionName = DwarfZDebugLine then begin DwarfLineInfoOffset:= coffsec.datapos; IsCompressed:= true; break; end; end; if DwarfLineInfoOffset > 0 then Result := found_debug_info else Result := no_debug_info; end; end; end; end; end; function CheckUnixElf( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var fileIdentBuf : array[0..El_NIDENT-1] of byte; begin if f.Size >= El_NIDENT then begin if (f.read(fileIdentBuf, El_NIDENT) <> El_NIDENT) then begin Exit(header_not_found); end; { more paranoia checks } if (fileIdentBuf[EI_MAG0] <> ELFMAG0) or (fileIdentBuf[EI_MAG1] <> ELFMAG1) or (fileIdentBuf[EI_MAG2] <> ELFMAG2) or (fileIdentBuf[EI_MAG3] <> ELFMAG3) then begin ExtractDwarfLineInfoError:='Invalid ELF magic header.'; Exit(header_not_found); end; // Found header. f.Seek(0, soBeginning); case fileIdentBuf[EI_CLASS] of ELFCLASS32: begin DEBUG_WRITELN('Found Unix ELF 32-bit header.'); if ExtractElf32(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; ELFCLASS64: begin DEBUG_WRITELN('Found Unix ELF 64-bit header.'); if ExtractElf64(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; else begin Exit(header_invalid); end; end; Imagebase:= 0; end; end; function CheckDarwinMacho( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var fileIdentBuf : LongWord; begin if f.Size >= SizeOf(LongWord) then begin if (f.read(fileIdentBuf, SizeOf(LongWord)) <> SizeOf(LongWord)) then begin Exit(header_not_found); end; f.Seek(0, soBeginning); case fileIdentBuf of MH_MAGIC, MH_CIGAM: begin DEBUG_WRITELN('Found Darwin Mach-O 32-bit header.'); if ExtractMacho32(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; MH_MAGIC_64, MH_CIGAM_64: begin DEBUG_WRITELN('Found Darwin Mach-O 64-bit header.'); if ExtractMacho64(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; else begin Exit(header_not_found); end; end; end; end; function ExtractDwarfLineInfo( ExeFileName: ansistring; out _dlnfo: pointer; out _dlnfoSize: QWord; out Imagebase: QWord): longbool; var DwarfOffset : int64; DwarfSize : QWord; IsCompressed: boolean = False; f : TFileStream; DC: TDecompressionStream; CheckResult: TCheckResult; begin DEBUG_WRITELN('Reading dwarf line info from ', ExeFileName); Result := False; f:= TFileStream.Create(ExeFileName, fmOpenRead or fmShareDenyNone); try { Check for Windows PE. } CheckResult := CheckWindowsExe(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); { Check for Unix ELF. } if CheckResult = header_not_found then begin f.Seek(0, soBeginning); CheckResult := CheckUnixElf(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); end; { Check for Darwin Mach-O. } if CheckResult = header_not_found then begin f.Seek(0, soBeginning); CheckResult := CheckDarwinMacho(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); end; if CheckResult = found_debug_info then begin Result := True; if IsCompressed then begin f.Position:= DwarfOffset; DC:= TDecompressionStream.Create(f); DC.Read(DwarfSize, sizeof(DwarfSize)); // 8 bytes (QWORD) DC.Read(ImageBase, sizeof(ImageBase)); // 8 bytes (QWORD) _dlnfoSize:= DwarfSize; GetMem(_dlnfo, DwarfSize); DC.Read(_dlnfo^, DwarfSize); DC.Free; end else begin GetMem(_dlnfo, DwarfSize); _dlnfoSize:= DwarfSize; f.Position:= DwarfOffset; f.Read(_dlnfo^, DwarfSize); end; end else case CheckResult of header_not_found: ExtractDwarfLineInfoError := 'File not supported.'; header_invalid: ExtractDwarfLineInfoError := 'Invalid header.'; no_debug_info: ExtractDwarfLineInfoError := 'The debug line info section not found.'; end; finally f.Free; end; end; end. �������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/un_process.pas�����������������������������������������������������������������0000644�0001750�0000144�00000010054�15104114162�016241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit un_process; {$mode delphi}{$H+} interface uses Process, SysUtils, DCProcessUtf8; type TOnReadLn = procedure (str: String) of object; TOnOperationProgress = procedure of object; { TExProcess } TExProcess = class protected FProcess: TProcess; FOutputLine: String; FStop: Boolean; FQueryString: String; FOnReadLn, FOnQueryString: TOnReadLn; FOnProcessExit: TOnOperationProgress; FOnOperationProgress: TOnOperationProgress; function _GetExitStatus(): Integer; public constructor Create(CommandLine: String = ''); procedure Execute; procedure Stop; procedure SetCmdLine(CommandLine: String); destructor Destroy; override; property Process: TProcess read FProcess; property ExitStatus: Integer read _GetExitStatus; property QueryString: String read FQueryString write FQueryString; property OnReadLn: TOnReadLn read FOnReadLn write FOnReadLn; property OnQueryString: TOnReadLn read FOnQueryString write FOnQueryString; property OnProcessExit: TOnOperationProgress read FOnProcessExit write FOnProcessExit; property OnOperationProgress: TOnOperationProgress read FOnOperationProgress write FOnOperationProgress; end; implementation uses DCStrUtils; const BufferSize = 3000; { TExProcess } function TExProcess._GetExitStatus(): Integer; begin Result:= FProcess.ExitStatus; end; constructor TExProcess.Create(CommandLine: String = ''); begin FOutputLine:= EmptyStr; FProcess:= TProcessUtf8.Create(nil); FProcess.CommandLine:= CommandLine; FProcess.Options:= [poUsePipes, poNoConsole, poNewProcessGroup]; end; procedure TExProcess.Execute; var P: Integer; S, OutputBuffer: String; begin S:= EmptyStr; FProcess.Execute; try repeat if Assigned(FOnOperationProgress) then FOnOperationProgress(); if FStop then Exit; // If no output yet if FProcess.Output.NumBytesAvailable = 0 then begin if not FProcess.Running then Break else begin Sleep(1); if Assigned(FOnQueryString) and Assigned(FProcess.Stderr) and (FProcess.Stderr.NumBytesAvailable > 0) then begin SetLength(OutputBuffer, BufferSize); // Waits for the process output SetLength(OutputBuffer, FProcess.Stderr.Read(OutputBuffer[1], Length(OutputBuffer))); if (Pos(FQueryString, OutputBuffer) > 0) then FOnQueryString(OutputBuffer); OutputBuffer:= EmptyStr; end; Continue; end end; SetLength(OutputBuffer, BufferSize); // Waits for the process output SetLength(OutputBuffer, FProcess.Output.Read(OutputBuffer[1], Length(OutputBuffer))); // Cut the incoming stream to lines: FOutputLine:= FOutputLine + OutputBuffer; // Add to the accumulator P:= 1; while GetNextLine(FOutputLine, S, P) do begin if FStop then Exit; // Return the line without the CR/LF characters if Assigned(FOnReadLn) then FOnReadLn(S); // Update progress if Assigned(FOnOperationProgress) then FOnOperationProgress(); end; // Remove the processed lines from accumulator Delete(FOutputLine, 1, P - 1); // Check query string if Length(FOutputLine) > 0 then begin if Assigned(FOnQueryString) and (Pos(FQueryString, FOutputLine) <> 0) then begin FOnQueryString(FOutputLine); FOutputLine:= EmptyStr; end; end; // No more data, break if Length(OutputBuffer) = 0 then Break; until False; if FStop then Exit; if (Length(FOutputLine) <> 0) and Assigned(FOnReadLn) then FOnReadLn(FOutputLine); OutputBuffer:= EmptyStr; finally if Assigned(FOnProcessExit) then FOnProcessExit(); end; end; procedure TExProcess.Stop; begin FStop:= True; FProcess.Terminate(-1); end; procedure TExProcess.SetCmdLine(CommandLine: String); begin FProcess.CommandLine:= CommandLine; end; destructor TExProcess.Destroy; begin FreeAndNil(FProcess); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/un_lineinfo.pp�����������������������������������������������������������������0000644�0001750�0000144�00000070667�15104114162�016242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Parts (c) 2006 Thomas Schatzl, member of the FreePascal Development team Parts (c) 2000 Peter Vreman (adapted from original stabs line reader) Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These (as of Jan. 2008 / FPC 2.2.0) both didn't work and had several limitations (e.g. inability to be used from a DLL) SUPPORTED TARGETS: Linux-32, Linux-64, Win32, Win64. Based on lnfodwrf.pp from FreePascal RTL. Oct 2009, by cobines - Removed the structures holding debugging info. Now the state machine is run for each address requiring line info, like in lnfodwrf.pp. It uses less memory but is slower. But since it is usually called only on unhandled exceptions the speed doesn't matter much. - Updated the code to lnfodwrf.pp from FPC 2.5.1 (rev. 14154). } {--------------------------------------------------------------------------- Generic Dwarf lineinfo reader The line info reader is based on the information contained in DWARF Debugging Information Format Version 3 Chapter 6.2 "Line Number Information" from the DWARF Debugging Information Format Workgroup. For more information on this document see also http://dwarf.freestandards.org/ ---------------------------------------------------------------------------} {$mode delphi} {$longstrings on} {$codepage utf-8} {$coperators on} {$pointermath on} {.$DEFINE DEBUG_DWARF_PARSER} unit un_lineinfo; interface uses SysUtils, Classes; function GetLineInfo(addr: pointer; var moduleFile, sourceFile: ansistring; var line, column: integer): Boolean; { The format of returned information: "moduleFile" *always* receives the full name of the executable file (the main exe or one of dlls it uses) the addr belongs to. In Linux, it returns the real file name, with all symlinks resolved. "line" can be negative, which means no line info has been found for this address. See LineInfoError (below) for details. "sourceFile" returns the source file name. It either doesn't or does contain a full path. If the source was in the same directory as the program itself, there will be no path. If the source was in the different directory, there will be a full path (for the moment when the program was compiled, NOT for the current location of that source). "column" is positive ONLY when there is more than one address stored for the same source line. FreePascal generates this on VERY rare occasions, mostly for the arithmetic formulas spanning several lines. So most of the time column will receive -1. } procedure InitLineInfo; { Installs the custom BackTraceStr handler. } procedure AddLineInfoPath(const Path: String); { Adds a path that will be searched for .zdli files. Paths can be absolute or relative to the directory with the executable module. } procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string); { This function allows you to know which executable (i.e. the main exe or one of the dlls loaded by it) owns this part of the virtual addres space. baseaddr receives the exe/dll base address (always NIL for the main exe in Linux). The mechnaism is made with possibility of a DLL relocation in mind, but that particular feature is untested. This function is used by GetLineInfo() to determine which executable to load line the info from. } var LineInfoError: WideString = ''; implementation uses {$ifdef unix} dl {$else} windows {$endif} , un_xtrctdwrflnfo, zstream; {$MACRO ON} {$ifdef DEBUG_DWARF_PARSER} {$define DEBUG_WRITELN := WriteLn} {$define DEBUG_COMMENT := } {$else} {$define DEBUG_WRITELN := //} {$define DEBUG_COMMENT := //} {$endif} var {You can store the .zdli files in a different folder than the Exe itself. Just fill in this array. Paths can be absolute or relative to BaseModulePath. For example: AddLineInfoPath('debug') - will search in <executable_path>/debug/ } LineInfoPaths: array of string = nil; {Path where the executable module is.} BaseModulePath: String; function ChelinfoBackTraceStr(addr : Pointer) : ShortString; var exe, src: ansistring; line, column: integer; Store : TBackTraceStrFunc; begin { reset to prevent infinite recursion if problems inside the code } Store := BackTraceStrFunc; BackTraceStrFunc := @SysBackTraceStr; GetLineInfo(addr, exe, src, line, column); { create string } Result := ' $' + HexStr(addr); if line >= 0 then begin Result += ' line ' + IntToStr(line); if column >= 0 then Result += ', column ' + IntToStr(column); Result += ' of ' + src; end; Result += ' in ' + exe; BackTraceStrFunc := Store; end; {$packrecords default} type Bool8 = ByteBool; { DWARF 2 default opcodes} const { Extended opcodes } DW_LNE_END_SEQUENCE = 1; DW_LNE_SET_ADDRESS = 2; DW_LNE_DEFINE_FILE = 3; { Standard opcodes } DW_LNS_COPY = 1; DW_LNS_ADVANCE_PC = 2; DW_LNS_ADVANCE_LINE = 3; DW_LNS_SET_FILE = 4; DW_LNS_SET_COLUMN = 5; DW_LNS_NEGATE_STMT = 6; DW_LNS_SET_BASIC_BLOCK = 7; DW_LNS_CONST_ADD_PC = 8; DW_LNS_FIXED_ADVANCE_PC = 9; DW_LNS_SET_PROLOGUE_END = 10; DW_LNS_SET_EPILOGUE_BEGIN = 11; DW_LNS_SET_ISA = 12; type { state record for the line info state machine } TMachineState = record address : QWord; // can hold 32-bit or 64-bit addresses (depending on DWARF type) file_id : DWord; line : QWord; column : DWord; is_stmt : Boolean; basic_block : Boolean; end_sequence : Boolean; prolouge_end : Boolean; epilouge_begin : Boolean; isa : QWord; append_row : Boolean; first_row : Boolean; end; { DWARF line number program header preceding the line number program, 64 bit version } TLineNumberProgramHeader64 = packed record magic : DWord; unit_length : QWord; version : Word; length : QWord; minimum_instruction_length : Byte; default_is_stmt : Bool8; line_base : ShortInt; line_range : Byte; opcode_base : Byte; end; { DWARF line number program header preceding the line number program, 32 bit version } TLineNumberProgramHeader32 = packed record unit_length : DWord; version : Word; length : DWord; minimum_instruction_length : Byte; default_is_stmt : Bool8; line_base : ShortInt; line_range : Byte; opcode_base : Byte; end; procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string); {$ifdef unix} var dlinfo: dl_info; begin FillChar(dlinfo, sizeof(dlinfo), 0); dladdr(addr, @dlinfo); baseaddr:= dlinfo.dli_fbase; filename:= String(dlinfo.dli_fname); {$if not defined(darwin)} if ExtractFileName(filename) = ExtractFileName(ParamStr(0)) then baseaddr:= nil; {$endif} end; {$else} var Tmm: TMemoryBasicInformation; TST: array[0..Max_Path] of Char; begin if VirtualQuery(addr, @Tmm, SizeOf(Tmm)) <> sizeof(Tmm) then raise Exception.Create('The VirualQuery() call failed.'); baseaddr:=Tmm.AllocationBase; TST[0]:= #0; GetModuleFileName(THandle(Tmm.AllocationBase), TST, SizeOf(TST)); filename:= String(PChar(@TST)); end; {$endif} procedure InitLineInfo; begin BackTraceStrFunc := @ChelinfoBacktraceStr; BaseModulePath := ExtractFilePath(ParamStr(0)); end; procedure AddLineInfoPath(const Path: String); begin SetLength(LineInfoPaths, Length(LineInfoPaths) + 1); LineInfoPaths[Length(LineInfoPaths) - 1] := ExcludeTrailingPathDelimiter(Path); end; function GetLineInfo(addr: Pointer; var moduleFile, sourceFile: ansistring; var line, column: integer): Boolean; var dli: TStream = nil; // Stream holding uncompressed debug line info. unit_base, next_base : QWord; unit_length: QWord; { Returns the next Byte from the input stream, or -1 if there has been an error } function ReadNext() : Longint; overload; var bytesread : Longint; b : Byte; begin ReadNext := -1; if (dli.Position < next_base) then begin bytesread := dli.Read(b, sizeof(b)); ReadNext := b; if (bytesread <> 1) then ReadNext := -1; end; end; { Reads the next size bytes into dest. Returns true if successful, false otherwise. Note that dest may be partially overwritten after returning false. } function ReadNext(var dest; size : SizeInt) : Boolean; overload; var bytesread : SizeInt; begin bytesread := 0; if ((dli.Position + size) < next_base) then begin bytesread := dli.Read(dest, size); end; ReadNext := (bytesread = size); end; { Reads an unsigned LEB encoded number from the input stream } function ReadULEB128() : QWord; var shift : Byte; data : PtrInt; val : QWord; begin shift := 0; result := 0; data := ReadNext(); while (data <> -1) do begin val := data and $7f; result := result or (val shl shift); inc(shift, 7); if ((data and $80) = 0) then break; data := ReadNext(); end; end; { Reads a signed LEB encoded number from the input stream } function ReadLEB128() : Int64; var shift : Byte; data : PtrInt; val : Int64; begin shift := 0; result := 0; data := ReadNext(); while (data <> -1) do begin val := data and $7f; result := result or (val shl shift); inc(shift, 7); if ((data and $80) = 0) then break; data := ReadNext(); end; { extend sign. Note that we can not use shl/shr since the latter does not translate to arithmetic shifting for signed types } result := (not ((result and (1 shl (shift-1)))-1)) or result; end; procedure SkipULEB128(); var temp : QWord; begin temp := ReadULEB128(); DEBUG_WRITELN('Skipping ULEB128 : ', temp); end; procedure SkipLEB128(); var temp : Int64; begin temp := ReadLEB128(); DEBUG_WRITELN('Skipping LEB128 : ', temp); end; function ReadString(): ansistring; var a: ansichar; begin Result:= ''; while (true) do begin dli.Read(a, sizeof(a)); if a = #0 then Exit; Result+= a; end; end; function CalculateAddressIncrement(_opcode : Integer; const header : TLineNumberProgramHeader64) : Int64; begin Result := _opcode - header.opcode_base; // adjusted_opcode Result := (Result div header.line_range) * header.minimum_instruction_length; end; { initializes the line info state to the default values } procedure InitStateRegisters(var state : TMachineState; const header : TLineNumberProgramHeader64); begin with state do begin address := 0; file_id := 1; line := 1; column := 0; is_stmt := header.default_is_stmt; basic_block := false; end_sequence := false; prolouge_end := false; epilouge_begin := false; isa := 0; append_row := false; first_row := true; end; end; { Skips all line info directory entries } procedure SkipDirectories(); var s : ShortString; begin while (true) do begin s := ReadString(); if (s = '') then break; DEBUG_WRITELN('Skipping directory : ', s); end; end; { Skips the filename section from the current file stream } procedure SkipFilenames(); var s : ShortString; begin while (true) do begin s := ReadString(); if (s = '') then break; DEBUG_WRITELN('Skipping filename : ', s); SkipULEB128(); { skip the directory index for the file } SkipULEB128(); { skip last modification time for file } SkipULEB128(); { skip length of file } end; end; function GetFullFilename(const filenameStart, directoryStart : Int64; const file_id : DWord) : ShortString; var i : DWord; filename, directory : ShortString; dirindex : QWord; {$IFDEF DEBUG_DWARF_PARSER} oldPos: Int64; {$ENDIF} begin filename := ''; directory := ''; i := 1; {$IFDEF DEBUG_DWARF_PARSER} oldPos := dli.Position; {$ENDIF} dli.Seek(filenameStart, soBeginning); while (i <= file_id) do begin filename := ReadString(); DEBUG_WRITELN('Found "', filename, '"'); if (filename = '') then break; dirindex := ReadULEB128(); { read the directory index for the file } SkipULEB128(); { skip last modification time for file } SkipULEB128(); { skip length of file } inc(i); end; { if we could not find the file index, exit } if (filename = '') then begin GetFullFilename := ''; end else begin dli.Seek(directoryStart, soBeginning); i := 1; while (i <= dirindex) do begin directory := ReadString(); if (directory = '') then break; inc(i); end; if (directory<>'') and (directory[length(directory)]<>'/') then directory:=directory+'/'; GetFullFilename := directory + filename; end; {$IFDEF DEBUG_DWARF_PARSER} dli.Position := oldPos; {$ENDIF} end; function ParseCompilationUnit(const addr : PtrUInt) : Boolean; var state : TMachineState; { we need both headers on the stack, although we only use the 64 bit one internally } header64 : TLineNumberProgramHeader64; header32 : TLineNumberProgramHeader32; header_length: QWord; {$ifdef DEBUG_DWARF_PARSER}s : ShortString;{$endif} adjusted_opcode : Int64; opcode, extended_opcode : Integer; extended_opcode_length : PtrInt; addrIncrement, lineIncrement: PtrInt; numoptable : array[1..255] of Byte; { the offset into the file where the include directories are stored for this compilation unit } include_directories : Int64; { the offset into the file where the file names are stored for this compilation unit } file_names : Int64; i: integer; prev_line : QWord; prev_column : DWord; prev_file : DWord; { Reads an address from the current input stream } function ReadAddress() : PtrUInt; begin ReadNext(Result, sizeof(PtrUInt)); end; { Reads an unsigned Half from the current input stream } function ReadUHalf() : Word; begin dli.Read(Result, SizeOf(Result)); end; begin Result := False; // Not found yet. // First DWORD is either unit length of 32-bit or magic value of 64-bit DWARF. dli.Seek(unit_base, soBeginning); dli.Read(header64.magic, sizeof(header64.magic)); dli.Seek(-sizeof(header64.magic), soCurrent); if (header64.magic <> $ffffffff) then begin DEBUG_WRITELN('32 bit DWARF detected'); dli.Read(header32, sizeof(header32)); header64.magic := $ffffffff; header64.unit_length := header32.unit_length; header64.version := header32.version; header64.length := header32.length; header64.minimum_instruction_length := header32.minimum_instruction_length; header64.default_is_stmt := header32.default_is_stmt; header64.line_base := header32.line_base; header64.line_range := header32.line_range; header64.opcode_base := header32.opcode_base; header_length := QWord(header32.length) + sizeof(header32.length) + sizeof(header32.version) + sizeof(header32.unit_length); unit_length := QWord(header32.unit_length) + sizeof(header32.unit_length); end else begin DEBUG_WRITELN('64 bit DWARF detected'); dli.Read(header64, sizeof(header64)); header_length := header64.length + sizeof(header64.magic) + sizeof(header64.length) + sizeof(header64.version) + sizeof(header64.unit_length); unit_length := header64.unit_length + sizeof(header64.magic) + sizeof(header64.unit_length); end; next_base:= unit_base + unit_length; // Read opcodes lengths table. fillchar(numoptable, sizeof(numoptable), #0); if not ReadNext(numoptable, header64.opcode_base - 1) then Exit; DEBUG_WRITELN('Opcode parameter count table'); for i := 1 to header64.opcode_base - 1 do begin DEBUG_WRITELN('Opcode[', i, '] - ', numoptable[i], ' parameters'); end; DEBUG_WRITELN('Reading directories...'); include_directories := dli.Position; SkipDirectories(); DEBUG_WRITELN('Reading filenames...'); file_names := dli.Position; SkipFilenames(); // Position stream after header to read state machine code. dli.Seek(unit_base + header_length, soBeginning); InitStateRegisters(state, header64); opcode := ReadNext(); while (opcode <> -1) do begin case (opcode) of { extended opcode } 0 : begin extended_opcode_length := ReadULEB128(); extended_opcode := ReadNext(); if extended_opcode = -1 then break; case (extended_opcode) of DW_LNE_END_SEQUENCE : begin state.end_sequence := true; state.append_row := true; DEBUG_WRITELN('DW_LNE_END_SEQUENCE'); end; DW_LNE_SET_ADDRESS : begin // Size of address should be extended_opcode_length - 1. state.address := ReadAddress(); DEBUG_WRITELN('DW_LNE_SET_ADDRESS (', hexstr(pointer(state.address)), ')'); end; DW_LNE_DEFINE_FILE : begin {$ifdef DEBUG_DWARF_PARSER}s := {$endif}ReadString(); SkipULEB128(); SkipULEB128(); SkipULEB128(); DEBUG_WRITELN('DW_LNE_DEFINE_FILE (', s, ')'); end; else begin DEBUG_WRITELN('Unknown extended opcode ', extended_opcode, ' (length ', extended_opcode_length, ')'); dli.Position:= dli.Position + extended_opcode_length - 1; end; end; end; DW_LNS_COPY : begin state.basic_block := false; state.prolouge_end := false; state.epilouge_begin := false; state.append_row := true; DEBUG_WRITELN('DW_LNS_COPY'); end; DW_LNS_ADVANCE_PC : begin state.address := state.address + ReadULEB128() * header64.minimum_instruction_length; DEBUG_WRITELN('DW_LNS_ADVANCE_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_ADVANCE_LINE : begin state.line := state.line + ReadLEB128(); DEBUG_WRITELN('DW_LNS_ADVANCE_LINE (', state.line, ')'); end; DW_LNS_SET_FILE : begin state.file_id := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_FILE (', state.file_id, ')'); end; DW_LNS_SET_COLUMN : begin state.column := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_COLUMN (', state.column, ')'); end; DW_LNS_NEGATE_STMT : begin state.is_stmt := not state.is_stmt; DEBUG_WRITELN('DW_LNS_NEGATE_STMT (', state.is_stmt, ')'); end; DW_LNS_SET_BASIC_BLOCK : begin state.basic_block := true; DEBUG_WRITELN('DW_LNS_SET_BASIC_BLOCK'); end; DW_LNS_CONST_ADD_PC : begin state.address := state.address + CalculateAddressIncrement(255, header64); DEBUG_WRITELN('DW_LNS_CONST_ADD_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_FIXED_ADVANCE_PC : begin state.address := state.address + ReadUHalf(); DEBUG_WRITELN('DW_LNS_FIXED_ADVANCE_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_SET_PROLOGUE_END : begin state.prolouge_end := true; DEBUG_WRITELN('DW_LNS_SET_PROLOGUE_END'); end; DW_LNS_SET_EPILOGUE_BEGIN : begin state.epilouge_begin := true; DEBUG_WRITELN('DW_LNS_SET_EPILOGUE_BEGIN'); end; DW_LNS_SET_ISA : begin state.isa := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_ISA (', state.isa, ')'); end; else begin { special opcode } if (opcode < header64.opcode_base) then begin DEBUG_WRITELN('Unknown standard opcode $', hexstr(opcode, 2), '; skipping'); for i := 1 to numoptable[opcode] do SkipLEB128(); end else begin adjusted_opcode := opcode - header64.opcode_base; addrIncrement := CalculateAddressIncrement(opcode, header64); state.address := state.address + addrIncrement; lineIncrement := header64.line_base + (adjusted_opcode mod header64.line_range); state.line := state.line + lineIncrement; DEBUG_WRITELN('Special opcode $', hexstr(opcode, 2), ' address increment: ', addrIncrement, ' new line: ', lineIncrement); state.basic_block := false; state.prolouge_end := false; state.epilouge_begin := false; state.append_row := true; end; end; end; //case if (state.append_row) then begin {$IFDEF DEBUG_DWARF_PARSER} Writeln('Address = ', hexstr(pointer(state.address)), ', file_id = ', state.file_id, ', file = ' , GetFullFilename(file_names, include_directories, state.file_id), ', line = ', state.line, ' column = ', state.column); {$ENDIF} if (state.first_row) then begin if (state.address > addr) then break; state.first_row := false; end; { when we have found the address we need to return the previous line because that contains the call instruction } if (state.address >= addr) then begin line := prev_line; column := prev_column; sourceFile := GetFullFilename(file_names, include_directories, prev_file); Exit(True); end else begin { save line information } prev_file := state.file_id; prev_line := state.line; prev_column := state.column; end; state.append_row := false; if (state.end_sequence) then begin // Reset state machine when sequence ends. InitStateRegisters(state, header64); end; end; opcode := ReadNext(); end; //while end; type TPathType = ( ptNone, ptRelative, ptAbsolute ); function GetPathType(sPath : String): TPathType; begin Result := ptNone; {$IFDEF MSWINDOWS} {check for drive/unc info} if ( Pos( '\\', sPath ) > 0 ) or ( Pos( DriveDelim, sPath ) > 0 ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (sPath[1] = PathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative; end; function ExpandAbsolutePath(Path: String): String; var I, J: Integer; begin {First remove all references to '\.\'} I := Pos (DirectorySeparator + '.' + DirectorySeparator, Path); while I <> 0 do begin Delete (Path, I, 2); I := Pos (DirectorySeparator + '.' + DirectorySeparator, Path); end; {Then remove all references to '\..\'} I := Pos (DirectorySeparator + '..', Path); while (I <> 0) do begin J := Pred (I); while (J > 0) and (Path [J] <> DirectorySeparator) do Dec (J); if (J = 0) then Delete (Path, I, 3) else Delete (Path, J, I - J + 3); I := Pos (DirectorySeparator + '..', Path); end; Result := Path; end; function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; begin case GetPathType(sRelativeFileName) of ptNone, ptRelative: Result := ExpandAbsolutePath(sPath + sRelativeFileName); else Result := sRelativeFileName; end; end; var i: Integer; dc, ts: TStream; DwarfLineInfo: Pointer; externalFile: AnsiString; DwarfSize: Qword; base_addr: Pointer; ExeImageBase: QWord; begin Result := False; moduleFile := ''; sourceFile := ''; line := -1; column := -1; LineInfoError:= ''; GetModuleByAddr(addr, base_addr, moduleFile); if moduleFile = '' then Exit(False); // No module found at this address. // Never read modules or .zdli files from current directory. // If module path is relative make it relative to BaseModulePath. // (for example ./doublecmd must be expanded). moduleFile := GetAbsoluteFileName(BaseModulePath, moduleFile); DEBUG_WRITELN('Module ', moduleFile, ' at $', hexStr(base_addr)); try try { First, try the external file with line information. Failing that, try to parse the executable itself } externalFile := DlnNameByExename(moduleFile); i:= -1; repeat DEBUG_WRITELN('Checking external file: ', externalFile); if FileExists(externalFile) then break else externalFile := ''; inc(i); if i > high(LineInfoPaths) then break; // Check additional paths. externalFile := GetAbsoluteFileName(BaseModulePath, LineInfoPaths[i]); externalFile := IncludeTrailingPathDelimiter(externalFile) + DlnNameByExename(ExtractFileName(moduleFile)); until False; if externalFile <> '' //and (FileAge(moduleFile) <= FileAge(externalFile)) then begin DEBUG_WRITELN('Reading debug info from external file ', externalFile); //the compression streams are unable to seek, //so we decompress to a memory stream first. ts := TFileStream.Create(externalFile, fmOpenRead or fmShareDenyNone); dc := TDecompressionStream.Create(ts); dli := TMemoryStream.Create; dc.Read(DwarfSize, SizeOf(DwarfSize)); // 8 bytes (QWORD) dc.Read(ExeImageBase, SizeOf(ExeImageBase)); // 8 bytes (QWORD) dli.CopyFrom(dc, DwarfSize); FreeAndNil(dc); FreeAndNil(ts); end else begin DEBUG_WRITELN('Reading debug info from ', moduleFile); if not ExtractDwarfLineInfo(moduleFile, DwarfLineInfo, DwarfSize, ExeImageBase) then begin DEBUG_WRITELN('Debug info not found.'); LineInfoError:= ExtractDwarfLineInfoError; Exit(false); end; dli:= TMemoryStream.Create; dli.Write(DwarfLineInfo^, DwarfSize); FreeMem(DwarfLineInfo); end; DEBUG_WRITELN('dwarf line info: ', dli.size, ' bytes.'); // Account for the possible relocation (in 99% cases ExeImagebase = base_addr) {$PUSH} {$overflowchecks off} {$rangechecks off} {$warnings off} addr := addr - base_addr + Pointer(ExeImageBase); {$POP} next_base := 0; while next_base < dli.Size do begin unit_base := next_base; if ParseCompilationUnit(PtrUInt(addr)) then break; // Found line info end; Result := True; except LineInfoError := 'Crashed parsing the dwarf line info: ' + (ExceptObject as Exception).Message; Result := False; end; finally if Assigned(dli) then FreeAndNil(dli); end; if not Result then DEBUG_WRITELN('Cannot read DWARF debug line info: ', LineInfoError); end; initialization InitLineInfo; end. �������������������������������������������������������������������������doublecmd-1.1.30/src/umultiarc.pas������������������������������������������������������������������0000644�0001750�0000144�00000051265�15104114162�016077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Implementation of multi archiver support Copyright (C) 2010-2020 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uMultiArc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uMasks, uClassesEx; const MaxSignSize = 1024; SignSeekRange = 1024 * 1024; const MAF_UNIX_PATH = 1; // Use Unix path delimiter (/) MAF_WIN_PATH = 2; // Use Windows path delimiter (\) MAF_UNIX_ATTR = 4; // Use Unix file attributes MAF_WIN_ATTR = 8; // Use Windows file attributes type TMultiArcFlag = (mafFileNameList); TMultiArcFlags = set of TMultiArcFlag; type TSignature = record Value: array[0..Pred(MaxSignSize)] of Byte; Size: LongInt; end; PSignature = ^TSignature; { TSignatureList } TSignatureList = class(TFPList) private function GetSignature(Index: Integer): PSignature; public destructor Destroy; override; procedure Clean; property Items[Index: Integer]: PSignature read GetSignature; default; end; TSignaturePosition = record Value: LongInt; Sign: Boolean; end; PSignaturePosition = ^TSignaturePosition; { TSignaturePositionList } TSignaturePositionList = class(TFPList) private function GetSignaturePosition(Index: Integer): PSignaturePosition; public destructor Destroy; override; procedure Clean; property Items[Index: Integer]: PSignaturePosition read GetSignaturePosition; default; end; { TArchiveItem } TArchiveItem = class(TObjectEx) FileName, FileExt, FileLink: String; PackSize, UnpSize: Int64; Year, Month, Day, Hour, Minute, Second: Word; Attributes: TFileAttrs; function Clone: TArchiveItem; override; end; { TMultiArcItem } TMultiArcItem = class private FExt: String; FMaskList: TMaskList; FSeekAfterSignPos: Boolean; FSignature, FSignaturePosition: AnsiString; FSignatureSeekRange: LongInt; FSignatureList: TSignatureList; FSignaturePositionList: TSignaturePositionList; function GetSignatureSeekRange: AnsiString; procedure SetExtension(const AValue: String); procedure SetSignature(const AValue: AnsiString); procedure SetSignaturePosition(const AValue: AnsiString); procedure SetSignatureSeekRange(const AValue: AnsiString); public FPacker, FArchiver, FDescription, FStart, FEnd: String; FFormat: TStringList; FList, FExtract, FExtractWithoutPath, FTest, FDelete, FAdd, FAddSelfExtract, FPasswordQuery: String; FFormMode: Integer; FFlags: TMultiArcFlags; public FEnabled: Boolean; FOutput: Boolean; FDebug: Boolean; constructor Create; destructor Destroy; override; function Matches(const AFileName: String): Boolean; function CanYouHandleThisFile(const FileName: String): Boolean; function Clone: TMultiArcItem; property FExtension: String read FExt write SetExtension; property FID: AnsiString read FSignature write SetSignature; property FIDPos: AnsiString read FSignaturePosition write SetSignaturePosition; property FIDSeekRange: AnsiString read GetSignatureSeekRange write SetSignatureSeekRange; end; { TMultiArcList } TMultiArcList = class FList: TStringList; private function GetCount: LongInt; function GetItem(Index: Integer): TMultiArcItem; function GetName(Index: Integer): String; procedure SetName(Index: Integer; const AValue: String); public constructor Create; virtual; destructor Destroy; override; procedure AutoConfigure; procedure Clear; procedure LoadFromFile(const FileName: String); procedure SaveToFile(const FileName: String); function Add(const S: String; aMultiArcItem: TMultiArcItem): Integer; function Insert(Index: integer; const S: string; aMultiArcItem: TMultiArcItem): integer; function Clone: TMultiArcList; function ComputeSignature(Seed: dword = $00000000): dword; procedure Delete(Index: Integer); property Names[Index: Integer]: String read GetName write SetName; property Items[Index: Integer]: TMultiArcItem read GetItem; default; property Count: LongInt read GetCount; end; implementation uses crc, LCLProc, StrUtils, Math, FileUtil, DCClassesUtf8, uDCUtils, DCOSUtils, DCStrUtils; { TArchiveItem } function TArchiveItem.Clone: TArchiveItem; begin Result:= TArchiveItem.Create; Result.FileName:= FileName; Result.FileExt:= FileExt; Result.FileLink:= FileLink; Result.PackSize:= PackSize; Result.UnpSize:= UnpSize; Result.Year:= Year; Result.Month:= Month; Result.Day:= Day; Result.Hour:= Hour; Result.Minute:= Minute; Result.Second:= Second; Result.Attributes:= Attributes; end; { TMultiArcList } function TMultiArcList.GetCount: LongInt; begin Result:= FList.Count; end; function TMultiArcList.GetItem(Index: Integer): TMultiArcItem; begin Result:= TMultiArcItem(FList.Objects[Index]); end; function TMultiArcList.GetName(Index: Integer): String; begin Result:= FList.Strings[Index]; end; procedure TMultiArcList.SetName(Index: Integer; const AValue: String); begin FList.Strings[Index]:= AValue; end; constructor TMultiArcList.Create; begin FList:= TStringList.Create; end; destructor TMultiArcList.Destroy; begin Clear; FreeAndNil(FList); inherited Destroy; end; procedure TMultiArcList.AutoConfigure; var I: Integer; ExePath: String; begin for I:= 0 to Count - 1 do begin ExePath:= Items[I].FArchiver; if not mbFileExists(ReplaceEnvVars(ExePath)) then ExePath:= FindDefaultExecutablePath(ExePath); if ExePath = EmptyStr then Items[I].FEnabled:= False else begin Items[I].FArchiver:= ExePath; Items[I].FEnabled:= True; end; end; end; procedure TMultiArcList.Clear; var I: Integer; begin for I:= FList.Count - 1 downto 0 do if Assigned(FList.Objects[I]) then begin FList.Objects[I].Free; FList.Objects[I]:= nil; FList.Delete(I); end; end; procedure TMultiArcList.LoadFromFile(const FileName: String); var I, J: Integer; IniFile: TIniFileEx = nil; Sections: TStringList = nil; Section, Format: String; FirstTime: Boolean = True; MultiArcItem: TMultiArcItem; begin Self.Clear; IniFile:= TIniFileEx.Create(FileName, fmOpenRead); try Sections:= TStringList.Create; IniFile.ReadSections(Sections); for I:= 0 to Sections.Count - 1 do begin Section:= Sections[I]; if SameText(Section, 'MultiArc') then begin FirstTime:= IniFile.ReadBool(Section, 'FirstTime', True); Continue; end; MultiArcItem:= TMultiArcItem.Create; with MultiArcItem do begin FPacker:= Section; FArchiver:= FixExeExt(TrimQuotes(IniFile.ReadString(Section, 'Archiver', EmptyStr))); FDescription:= TrimQuotes(IniFile.ReadString(Section, 'Description', EmptyStr)); FID:= TrimQuotes(IniFile.ReadString(Section, 'ID', EmptyStr)); FIDPos:= TrimQuotes(IniFile.ReadString(Section, 'IDPos', EmptyStr)); FIDSeekRange:= IniFile.ReadString(Section, 'IDSeekRange', EmptyStr); FExtension:= TrimQuotes(IniFile.ReadString(Section, 'Extension', EmptyStr)); FStart:= TrimQuotes(IniFile.ReadString(Section, 'Start', EmptyStr)); FEnd:= TrimQuotes(IniFile.ReadString(Section, 'End', EmptyStr)); for J:= 0 to 50 do begin Format:= TrimQuotes(IniFile.ReadString(Section, 'Format' + IntToStr(J), EmptyStr)); if Format <> EmptyStr then FFormat.Add(Format) else Break; end; FList:= TrimQuotes(IniFile.ReadString(Section, 'List', EmptyStr)); FExtract:= TrimQuotes(IniFile.ReadString(Section, 'Extract', EmptyStr)); FExtractWithoutPath:= TrimQuotes(IniFile.ReadString(Section, 'ExtractWithoutPath', EmptyStr)); FTest:= TrimQuotes(IniFile.ReadString(Section, 'Test', EmptyStr)); FDelete:= TrimQuotes(IniFile.ReadString(Section, 'Delete', EmptyStr)); FAdd:= TrimQuotes(IniFile.ReadString(Section, 'Add', EmptyStr)); FAddSelfExtract:= TrimQuotes(IniFile.ReadString(Section, 'AddSelfExtract', EmptyStr)); FPasswordQuery:= IniFile.ReadString(Section, 'PasswordQuery', EmptyStr); // optional FFlags:= TMultiArcFlags(IniFile.ReadInteger(Section, 'Flags', 0)); FFormMode:= IniFile.ReadInteger(Section, 'FormMode', 0); FEnabled:= IniFile.ReadBool(Section, 'Enabled', True); FOutput:= IniFile.ReadBool(Section, 'Output', False); FDebug:= IniFile.ReadBool(Section, 'Debug', False); end; FList.AddObject(Section, MultiArcItem); end; if FirstTime then try AutoConfigure; SaveToFile(FileName); except // Ignore end; finally FreeAndNil(IniFile); FreeAndNil(Sections); end; end; procedure TMultiArcList.SaveToFile(const FileName: String); var I, J: Integer; IniFile: TIniFileEx; Section: String; MultiArcItem: TMultiArcItem; begin IniFile:= TIniFileEx.Create(FileName, fmOpenWrite); try for I:= 0 to FList.Count - 1 do begin Section:= FList.Strings[I]; MultiArcItem:= TMultiArcItem(FList.Objects[I]); with MultiArcItem do begin IniFile.WriteString(Section, 'Archiver', FArchiver); IniFile.WriteString(Section, 'Description', FDescription); IniFile.WriteString(Section, 'ID', FID); IniFile.WriteString(Section, 'IDPos', FIDPos); IniFile.WriteString(Section, 'IDSeekRange', FIDSeekRange); IniFile.WriteString(Section, 'Extension', FExtension); IniFile.WriteString(Section, 'Start', FStart); IniFile.WriteString(Section, 'End', FEnd); for J:= 0 to FFormat.Count - 1 do begin IniFile.WriteString(Section, 'Format' + IntToStr(J), FFormat[J]); end; IniFile.WriteString(Section, 'List', FList); IniFile.WriteString(Section, 'Extract', FExtract); IniFile.WriteString(Section, 'ExtractWithoutPath', FExtractWithoutPath); IniFile.WriteString(Section, 'Test', FTest); IniFile.WriteString(Section, 'Delete', FDelete); IniFile.WriteString(Section, 'Add', FAdd); IniFile.WriteString(Section, 'AddSelfExtract', FAddSelfExtract); IniFile.WriteString(Section, 'PasswordQuery', FPasswordQuery); // optional IniFile.WriteInteger(Section, 'Flags', Integer(FFlags)); IniFile.WriteInteger(Section, 'FormMode', FFormMode); IniFile.WriteBool(Section, 'Enabled', FEnabled); IniFile.WriteBool(Section, 'Output', FOutput); IniFile.WriteBool(Section, 'Debug', FDebug); end; end; IniFile.WriteBool('MultiArc', 'FirstTime', False); IniFile.UpdateFile; finally IniFile.Free; end; end; function TMultiArcList.Add(const S: String; aMultiArcItem: TMultiArcItem): Integer; begin Result := FList.AddObject(S, aMultiArcItem); end; function TMultiArcList.Insert(Index: integer; const S: string; aMultiArcItem: TMultiArcItem): integer; begin try FList.InsertObject(Index, S, aMultiArcItem); Result := Index; except Result := -1; end; end; procedure TMultiArcList.Delete(Index: Integer); begin Items[Index].Free; FList.Delete(Index); end; function TMultiArcList.Clone: TMultiArcList; var Index: integer; begin Result := TMultiArcList.Create; for Index := 0 to pred(Self.Count) do Result.Add(Self.FList.Strings[Index], Self.Items[Index].Clone); end; { TMultiArcList.ComputeSignature } // Routine tries to pickup all char chain from element of all entries and compute a unique CRC32. // This CRC32 will be a kind of signature of the MultiArc settings. function TMultiArcList.ComputeSignature(Seed: dword): dword; procedure UpdateSignature(sInfo: string); begin if length(sInfo) > 0 then Result := crc32(Result, @sInfo[1], length(sInfo)); end; var Index, iInnerIndex: integer; begin Result := Seed; for Index := 0 to pred(Count) do begin UpdateSignature(Self.FList.Strings[Index]); UpdateSignature(Self.Items[Index].FDescription); UpdateSignature(Self.Items[Index].FArchiver); UpdateSignature(Self.Items[Index].FExtension); UpdateSignature(Self.Items[Index].FList); UpdateSignature(Self.Items[Index].FStart); UpdateSignature(Self.Items[Index].FEnd); for iInnerIndex := 0 to pred(Self.Items[Index].FFormat.Count) do UpdateSignature(Self.Items[Index].FFormat.Strings[iInnerIndex]); UpdateSignature(Self.Items[Index].FExtract); UpdateSignature(Self.Items[Index].FAdd); UpdateSignature(Self.Items[Index].FDelete); UpdateSignature(Self.Items[Index].FTest); UpdateSignature(Self.Items[Index].FExtractWithoutPath); UpdateSignature(Self.Items[Index].FAddSelfExtract); UpdateSignature(Self.Items[Index].FPasswordQuery); UpdateSignature(Self.Items[Index].FID); UpdateSignature(Self.Items[Index].FIDPos); UpdateSignature(Self.Items[Index].FIDSeekRange); Result := crc32(Result, @Self.Items[Index].FFlags, sizeof(Self.Items[Index].FFlags)); Result := crc32(Result, @Self.Items[Index].FFormMode, sizeof(Self.Items[Index].FFormMode)); Result := crc32(Result, @Self.Items[Index].FEnabled, sizeof(Self.Items[Index].FEnabled)); Result := crc32(Result, @Self.Items[Index].FOutput, sizeof(Self.Items[Index].FOutput)); Result := crc32(Result, @Self.Items[Index].FDebug, sizeof(Self.Items[Index].FDebug)); end; end; { TMultiArcItem } function TMultiArcItem.GetSignatureSeekRange: AnsiString; begin if FSignatureSeekRange = SignSeekRange then Result:= EmptyStr else Result:= IntToStr(FSignatureSeekRange); end; procedure TMultiArcItem.SetExtension(const AValue: String); var AMask: String; Index: Integer; AMaskList: TStringArray; begin if FExt <> AValue then begin FExt:= AValue; AMask:= EmptyStr; FreeAndNil(FMaskList); AMaskList:= SplitString(AValue, ','); for Index:= Low(AMaskList) to High(AMaskList) do begin AddStrWithSep(AMask, AllFilesMask + ExtensionSeparator + AMaskList[Index], ','); end; FMaskList:= TMaskList.Create(AMask, ','); end; end; procedure TMultiArcItem.SetSignature(const AValue: AnsiString); var I: Integer; Sign: AnsiString; Value: AnsiString; Signature: PSignature; begin FSignature:= AValue; FSignatureList.Clean; if AValue = EmptyStr then Exit; Value:= AValue; repeat I:= 0; New(Signature); Sign:= Trim(Copy2SymbDel(Value, ',')); try while (Sign <> EmptyStr) and (I < MaxSignSize) do begin Signature^.Value[I]:= StrToInt('$' + Copy2SymbDel(Sign, #32)); Inc(I); end; Signature^.Size:= I; FSignatureList.Add(Signature); except Dispose(Signature); end; until Value = EmptyStr; end; procedure TMultiArcItem.SetSignaturePosition(const AValue: AnsiString); var SignPos, Value: AnsiString; SignaturePosition: PSignaturePosition; begin FSignaturePosition:= AValue; FSignaturePositionList.Clean; if AValue = EmptyStr then Exit; Value:= StringReplace(AValue, '0x', '$', [rfReplaceAll]); repeat SignPos:= Trim(Copy2SymbDel(Value, ',')); if SignPos = '<SeekID>' then FSeekAfterSignPos:= True else try New(SignaturePosition); SignaturePosition^.Value:= StrToInt(SignPos); SignaturePosition^.Sign:= not (SignaturePosition^.Value < 0); SignaturePosition^.Value:= abs(SignaturePosition^.Value); FSignaturePositionList.Add(SignaturePosition); except Dispose(SignaturePosition); end; until Value = EmptyStr; end; procedure TMultiArcItem.SetSignatureSeekRange(const AValue: AnsiString); begin if not TryStrToInt(AValue, FSignatureSeekRange) then FSignatureSeekRange:= SignSeekRange; end; constructor TMultiArcItem.Create; begin FSignatureList:= TSignatureList.Create; FSignaturePositionList:= TSignaturePositionList.Create; FFormat:= TStringList.Create; end; destructor TMultiArcItem.Destroy; begin FreeAndNil(FMaskList); FreeAndNil(FSignatureList); FreeAndNil(FSignaturePositionList); FreeAndNil(FFormat); inherited Destroy; end; function TMultiArcItem.Matches(const AFileName: String): Boolean; begin if (FMaskList = nil) then Result:= False else Result:= FMaskList.Matches(AFileName); end; function TMultiArcItem.CanYouHandleThisFile(const FileName: String): Boolean; var FileMapRec : TFileMapRec; hFile: THandle; I, J: LongInt; lpBuffer: PByte = nil; Origin: LongInt; dwMaxSignSize: LongWord = 0; dwReaded: LongWord; dwOffset: LongWord = 0; begin Result:= False; hFile:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); if hFile <> feInvalidHandle then begin // Determine maximum signature size for J:= 0 to FSignatureList.Count - 1 do dwMaxSignSize := Max(FSignatureList[J]^.Size, dwMaxSignSize); { if (FSkipSfxPart) then dwOffset := FSfxOffset } lpBuffer:= GetMem(dwMaxSignSize); if Assigned(lpBuffer) then try // Try to determine by IDPOS for I:= 0 to FSignaturePositionList.Count - 1 do begin case FSignaturePositionList[I]^.Sign of True: Origin:= fsFromBeginning; False: Origin:= fsFromEnd; end; if (FileSeek(hFile, dwOffset + FSignaturePositionList[I]^.Value, Origin) <> -1) then begin dwReaded:= FileRead(hFile, lpBuffer^, dwMaxSignSize); if (dwReaded = dwMaxSignSize) then begin for J := 0 to FSignatureList.Count - 1 do begin if(CompareByte(lpBuffer^, FSignatureList[J]^.Value, FSignatureList[J]^.Size) = 0) then Exit(True); end; end; end; end; finally FreeMem(lpBuffer); FileClose(hFile); end; // if Assigned(lpBuffer) end; // Try raw seek id if (Result = False) and FSeekAfterSignPos then begin FillByte(FileMapRec, SizeOf(FileMapRec), 0); if MapFile(FileName, FileMapRec) then try dwOffset:= Min(FSignatureSeekRange, FileMapRec.FileSize); for I:= 0 to dwOffset do begin for J:= 0 to FSignatureList.Count - 1 do begin if(CompareByte((FileMapRec.MappedFile + I)^, FSignatureList[J]^.Value, FSignatureList[J]^.Size) = 0) then Exit(True); end; end; finally UnMapFile(FileMapRec); end; end; end; function TMultiArcItem.Clone: TMultiArcItem; begin Result := TMultiArcItem.Create; //Keep elements in some ordre a when loading them from the .ini, it will be simpler to validate if we are missing one. Result.FPacker := Self.FPacker; Result.FArchiver := Self.FArchiver; Result.FDescription := Self.FDescription; Result.FID := Self.FID; Result.FIDPos := Self.FIDPos; Result.FIDSeekRange := Self.FIDSeekRange; Result.FExtension := Self.FExtension; Result.FStart := Self.FStart; Result.FEnd := Self.FEnd; Result.FFormat.Assign(Self.FFormat); Result.FList := Self.FList; Result.FExtract := Self.FExtract; Result.FExtractWithoutPath := Self.FExtractWithoutPath; Result.FTest := Self.FTest; Result.FDelete := Self.FDelete; Result.FAdd := Self.FAdd; Result.FAddSelfExtract := Self.FAddSelfExtract; Result.FPasswordQuery := Self.FPasswordQuery; Result.FFlags := Self.FFlags; Result.FFormMode := Self.FFormMode; Result.FEnabled := Self.FEnabled; Result.FOutput := Self.FOutput; Result.FDebug := Self.FDebug; end; { TSignatureList } function TSignatureList.GetSignature(Index: Integer): PSignature; begin Result:= PSignature(Get(Index)); end; destructor TSignatureList.Destroy; begin Clean; inherited Destroy; end; procedure TSignatureList.Clean; var I: Integer; begin for I:= Count - 1 downto 0 do begin Dispose(Items[I]); Delete(I); end; end; { TSignaturePositionList } function TSignaturePositionList.GetSignaturePosition(Index: Integer): PSignaturePosition; begin Result:= PSignaturePosition(Get(Index)); end; destructor TSignaturePositionList.Destroy; begin Clean; inherited Destroy; end; procedure TSignaturePositionList.Clean; var I: Integer; begin for I:= Count - 1 downto 0 do begin Dispose(Items[I]); Delete(I); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/umoveconfig.pas����������������������������������������������������������������0000644�0001750�0000144�00000002044�15104114162�016402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMoveConfig; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, FileUtil, DCOSUtils, uGlobsPaths; implementation procedure Initialize; var Index: Integer; AFileName: String; AList: TStringList; begin // Double Commander Portable // Move settings from executable directory to 'settings' subdirectory if mbFileExists(gpExePath + 'doublecmd.inf') then begin AFileName:= ExcludeTrailingBackslash(gpGlobalCfgDir); if mbDirectoryExists(AFileName) or mbCreateDir(AFileName) then begin AList:= FindAllFiles(gpExePath, '*.cache;*.cfg;*.err;*.json;*.inf;*.ini;*.scf;*.txt;*.xml'); for Index:= 0 to AList.Count - 1 do begin AFileName:= ExtractFileName(AList[Index]); if (AFileName <> 'dcupdater.ini') and (AFileName <> 'doublecmd.visualelementsmanifest.xml') then begin mbRenameFile(gpExePath + AFileName, gpGlobalCfgDir + AFileName); end; end; AList.Free; end; end; end; initialization Initialize; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/umasks.pas���������������������������������������������������������������������0000644�0001750�0000144�00000026305�15104114162�015372� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Modified version of standard Masks unit Copyright (C) 2010-2021 Alexander Koblov (alexx2000@mail.ru) This file is based on masks.pas from the Lazarus Component Library (LCL) See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the copyright. 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. } unit uMasks; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Contnrs; type TMaskCharType = (mcChar, mcAnyChar, mcAnyText); TMaskOption = (moCaseSensitive, moIgnoreAccents, moWindowsMask, moPinyin); TMaskOptions = set of TMaskOption; TMaskChar = record case CharType: TMaskCharType of mcChar: (CharValue: WideChar); mcAnyChar, mcAnyText: (); end; TMaskString = record MinLength: Integer; MaxLength: Integer; Chars: Array of TMaskChar; end; { TMask } TMask = class private FTemplate:string; FMask: TMaskString; FUsePinyin: Boolean; FCaseSensitive: Boolean; fIgnoreAccents: Boolean; fWindowsInterpretation: boolean; procedure SetCaseSence(ACaseSence:boolean); procedure SetTemplate(AValue: String); procedure Update; public constructor Create(const AValue: string; const AOptions: TMaskOptions = []); function Matches(const AFileName: string): boolean; function LegacyMatches(const AFileName: string): boolean; function WindowsMatches(const AFileName: string): boolean; property CaseSensitive:boolean read FCaseSensitive write SetCaseSence; property Template:string read FTemplate write SetTemplate; end; { TParseStringList } TParseStringList = class(TStringList) public constructor Create(const AText, ASeparators: String); end; { TMaskList } TMaskList = class private FMasks: TObjectList; function GetCount: Integer; function GetItem(Index: Integer): TMask; public constructor Create(const AValue: string; ASeparatorCharset: string = ';'; const AOptions: TMaskOptions = []); destructor Destroy; override; function Matches(const AFileName: String): Boolean; property Count: Integer read GetCount; property Items[Index: Integer]: TMask read GetItem; end; function MatchesMask(const FileName, Mask: String; const AOptions: TMaskOptions = []): Boolean; function MatchesMaskList(const FileName, Mask: string; ASeparatorCharset: string = ';'; const AOptions: TMaskOptions = []): boolean; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, //DC DCConvertEncoding, uPinyin, uAccentsUtils; { MatchesMask } function MatchesMask(const FileName, Mask: String; const AOptions: TMaskOptions): Boolean; var AMask: TMask; begin if Mask <> '' then begin AMask := TMask.Create(Mask, AOptions); try Result := AMask.Matches(FileName); finally AMask.Free; end; end else Result := False; end; { MatchesMaskList } function MatchesMaskList(const FileName, Mask: string; ASeparatorCharset: string; const AOptions: TMaskOptions): boolean; var AMaskList: TMaskList; begin if Mask <> '' then begin AMaskList := TMaskList.Create(Mask, ASeparatorCharset, AOptions); try Result := AMaskList.Matches(FileName); finally AMaskList.Free; end; end else Result := False; end; { TMask } { TMask.Create } constructor TMask.Create(const AValue: string; const AOptions: TMaskOptions); begin FTemplate:= AValue; FUsePinyin:= moPinyin in AOptions; FCaseSensitive := moCaseSensitive in AOptions; fIgnoreAccents := moIgnoreAccents in AOptions; fWindowsInterpretation := moWindowsMask in AOptions; if FIgnoreAccents then FTemplate := NormalizeAccentedChar(FTemplate); //Let's set the mask early in straight letters if match attempt has to be with accent and ligature removed. if not FCaseSensitive then FTemplate := UTF8LowerCase(FTemplate); //Let's set the mask early in lowercase if match attempt has to be case insensitive. Update; end; { TMask.SetCaseSence } procedure TMask.SetCaseSence(ACaseSence:boolean); begin FCaseSensitive:=ACaseSence; Update; end; { TMask.SetTemplate } procedure TMask.SetTemplate(AValue: String); begin FTemplate:=AValue; Update; end; { TMask.Update } procedure TMask.Update; var I: Integer; S: UnicodeString; SkipAnyText: Boolean; AValue:string; procedure AddAnyText; begin if SkipAnyText then begin Inc(I); Exit; end; SetLength(FMask.Chars, Length(FMask.Chars) + 1); FMask.Chars[High(FMask.Chars)].CharType := mcAnyText; FMask.MaxLength := MaxInt; SkipAnyText := True; Inc(I); end; procedure AddAnyChar; begin SkipAnyText := False; SetLength(FMask.Chars, Length(FMask.Chars) + 1); FMask.Chars[High(FMask.Chars)].CharType := mcAnyChar; Inc(FMask.MinLength); if FMask.MaxLength < MaxInt then Inc(FMask.MaxLength); Inc(I); end; procedure AddChar; begin SkipAnyText := False; SetLength(FMask.Chars, Length(FMask.Chars) + 1); with FMask.Chars[High(FMask.Chars)] do begin CharType := mcChar; CharValue := S[I]; end; Inc(FMask.MinLength); if FMask.MaxLength < MaxInt then Inc(FMask.MaxLength); Inc(I); end; begin AValue:=FTemplate; SetLength(FMask.Chars, 0); FMask.MinLength := 0; FMask.MaxLength := 0; SkipAnyText := False; S := CeUtf8ToUtf16(AValue); I := 1; while I <= Length(S) do begin case S[I] of '*': AddAnyText; '?': AddAnyChar; else AddChar; end; end; end; { TMask.Matches } function TMask.Matches(const AFileName: string): boolean; var sFilename: string; begin //Let's set the AFileName in straight letters if match attempt has to be with accent and ligature removed. if FIgnoreAccents then sFilename := NormalizeAccentedChar(AFileName) else sFilename := AFileName; //Let's set our AFileName is lowercase early if not case-sensitive if not FCaseSensitive then sFilename := UTF8LowerCase(sFilename); if not fWindowsInterpretation then Result := LegacyMatches(sFileName) else Result := WindowsMatches(sFileName); end; { TMask.LegacyMatches } function TMask.LegacyMatches(const AFileName: string): boolean; var L: Integer; S: UnicodeString; function MatchToEnd(MaskIndex, CharIndex: Integer): Boolean; var I, J: Integer; begin Result := False; for I := MaskIndex to High(FMask.Chars) do begin case FMask.Chars[I].CharType of mcChar: begin if CharIndex > L then Exit; //DCDebug('Match ' + S[CharIndex] + '<?>' + FMask.Chars[I].CharValue); if FUsePinyin then begin if not PinyinMatch(S[CharIndex], FMask.Chars[I].CharValue) then exit; end else begin if S[CharIndex] <> FMask.Chars[I].CharValue then Exit; end; Inc(CharIndex); end; mcAnyChar: begin if CharIndex > L then Exit; Inc(CharIndex); end; mcAnyText: begin if I = High(FMask.Chars) then begin Result := True; Exit; end; for J := CharIndex to L do if MatchToEnd(I + 1, J) then begin Result := True; Exit; end; end; end; end; Result := CharIndex > L; end; begin Result := False; S := CeUtf8ToUtf16(AFileName); L := Length(S); if L = 0 then begin if FMask.MinLength = 0 then Result := True; Exit; end; if (L < FMask.MinLength) or (L > FMask.MaxLength) then Exit; Result := MatchToEnd(0, 1); end; { TMask.WindowsMatches } // treat initial mask differently for special cases: // foo*.* -> foo* // foo*. -> match foo*, but muts not have an extension // *. -> any file without extension ( .foo is a filename without extension according to Windows) // foo. matches only foo but not foo.txt // foo.* -> match either foo or foo.* function TMask.WindowsMatches(const AFileName: string): boolean; var Ext, sInitialTemplate: string; sInitialMask: UnicodeString; begin sInitialMask := CeUtf8ToUtf16(FTemplate); if (Length(sInitialMask) > 2) and (RightStr(sInitialMask, 3) = '*.*') then // foo*.* begin sInitialTemplate := FTemplate; //Preserve initial state of FTemplate FTemplate := Copy(sInitialMask, 1, Length(sInitialMask) - 2); Update; Result := LegacyMatches(AFileName); FTemplate := sInitialTemplate; //Restore initial state of FTemplate Update; end else if (Length(sInitialMask) > 1) and (RightStr(sInitialMask, 1) = '.') then //foo*. or *. or foo. begin //if AFileName has an extension then Result is False, otherwise see if it LegacyMatches foo*/foo //a filename like .foo under Windows is considered to be a file without an extension Ext := ExtractFileExt(AFileName); if (Ext = '') or (Ext = AFileName) then begin sInitialTemplate := FTemplate; //Preserve initial state of FTemplate FTemplate := Copy(sInitialMask, 1, Length(sInitialMask) - 1); Update; Result := LegacyMatches(AFileName); FTemplate := sInitialTemplate; //Restore initial state of FTemplate Update; end else begin Result := False; end; end else if (Length(sInitialMask) > 2) and (RightStr(sInitialMask, 2) = '.*') then //foo.* (but not '.*') begin //First see if we have 'foo' Result := (AFileName = Copy(sInitialMask, 1, Length(sInitialMask) - 2)); if not Result then Result := LegacyMatches(AFileName); end else begin Result := LegacyMatches(AFileName); //all other cases just call LegacyMatches() end; end; { TParseStringList } { TParseStringList.Create } constructor TParseStringList.Create(const AText, ASeparators: String); var I, S: Integer; begin inherited Create; S := 1; for I := 1 to Length(AText) do begin if Pos(AText[I], ASeparators) > 0 then begin if I > S then Add(Copy(AText, S, I - S)); S := I + 1; end; end; if Length(AText) >= S then Add(Copy(AText, S, Length(AText) - S + 1)); end; { TMaskList } function TMaskList.GetItem(Index: Integer): TMask; begin Result := TMask(FMasks.Items[Index]); end; { TMaskList.GetCount } function TMaskList.GetCount: Integer; begin Result := FMasks.Count; end; { TMaskList.Create } constructor TMaskList.Create(const AValue: string; ASeparatorCharset: string; const AOptions: TMaskOptions); var I: Integer; S: TParseStringList; begin FMasks := TObjectList.Create(True); if AValue = '' then exit; S := TParseStringList.Create(AValue, ASeparatorCharset); try for I := 0 to S.Count - 1 do FMasks.Add(TMask.Create(S[I], AOptions)); finally S.Free; end; end; { TMaskList.Destroy } destructor TMaskList.Destroy; begin FMasks.Free; inherited Destroy; end; { TMaskList.Matches } function TMaskList.Matches(const AFileName: String): Boolean; var I: integer; begin Result := False; for I := 0 to FMasks.Count - 1 do begin if TMask(FMasks.Items[I]).Matches(AFileName) then begin Result := True; Exit; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/umaincommands.pas��������������������������������������������������������������0000644�0001750�0000144�00000567400�15104114162�016730� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains DC actions of the main form Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uMainCommands; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ActnList, uFileView, uFileViewNotebook, uFileSourceOperation, uGlobs, uFileFunctions, uFormCommands, uFileSorting, uShellContextMenu, Menus, ufavoritetabs,ufile; type TCopyFileNamesToClipboard = (cfntcPathAndFileNames, cfntcJustFileNames, cfntcJustPathWithSeparator, cfntcPathWithoutSeparator); { TProcedureDoingActionOnMultipleTabs } TProcedureDoingActionOnMultipleTabs = procedure(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer) of object; { TMainCommands } TMainCommands = class(TComponent{$IF FPC_FULLVERSION >= 020501}, IFormCommands{$ENDIF}) private FCommands: TFormCommands; FOriginalNumberOfTabs: integer; FTabsMenu: TPopupMenu; // Helper routines procedure TryGetParentDir(FileView: TFileView; var SelectedFiles: TFiles); // Filters out commands. function CommandsFilter(Command: String): Boolean; procedure OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnEditCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnCalcStatisticsStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnCalcChecksumStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); public constructor Create(TheOwner: TComponent; ActionList: TActionList = nil); reintroduce; property Commands: TFormCommands read FCommands{$IF FPC_FULLVERSION >= 020501} implements IFormCommands{$ENDIF}; //--------------------- // The Do... functions are cm_... functions' counterparts which are to be // executed directly from the code with specific - especially non-string // - arguments (instead of calling cm_... functions, in which case // parameters would have to be converted to and from strings). // procedure DoOpenVirtualFileSystemList(Panel: TFileView); procedure DoPanelsSplitterPerPos(SplitPos: Integer); procedure DoUpdateFileView(AFileView: TFileView; {%H-}UserData: Pointer); procedure DoCloseTab(Notebook: TFileViewNotebook; PageIndex: Integer); procedure DoCopySelectedFileNamesToClipboard(FileView: TFileView; TypeOfCopy: TCopyFileNamesToClipboard; const Params: array of string); procedure DoNewTab(Notebook: TFileViewNotebook); procedure DoRenameTab(Page: TFileViewPage); procedure DoTabMenuClick(Sender: TObject); procedure DoContextMenu(Panel: TFileView; X, Y: Integer; Background: Boolean; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); procedure DoTransferPath(SourceFrame: TFileView; TargetNotebook: TFileViewNotebook); overload; procedure DoTransferPath(SourcePage: TFileViewPage; TargetPage: TFileViewPage; FromActivePanel: Boolean); procedure DoSortByFunctions(View: TFileView; FileFunctions: TFileFunctions); procedure DoShowMainMenu(bShow: Boolean); procedure DoShowCmdLineHistory(bNextCmdLine: Boolean); procedure DoChangeDirToRoot(FileView: TFileView); procedure GetAndSetMultitabsActionFromParams(const Params: array of string; var APanelSide:TTabsConfigLocation; var ActionOnLocked:boolean; var AskForLocked:integer); procedure DoActionOnMultipleTabs(const Params: array of string; ProcedureDoingActionOnMultipleTabs: TProcedureDoingActionOnMultipleTabs); procedure DoCloseAllTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); procedure DoCloseDuplicateTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); procedure DoSetAllTabsOptionNormal(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoSetAllTabsOptionPathLocked(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoAllTabsOptionPathResets(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoSetAllTabsOptionDirsInNewTab(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoOnClickMenuJobFavoriteTabs(Sender: TObject); procedure DoCopyAllTabsToOppositeSide(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoShowFavoriteTabsOptions; procedure DoParseParametersForPossibleTreeViewMenu(const Params: array of string; gDefaultConfigWithCommand, gDefaultConfigWithDoubleClick:boolean; var bUseTreeViewMenu:boolean; var bUsePanel:boolean; var p: TPoint); procedure DoComputeSizeAndPosForWindowInMiddle(var iPosX:integer; var iPosY:integer; var iWidth:integer; var iHeight:integer); procedure DoActualMarkApplyOnAll(const maoaDispatcher: TMarkApplyOnAllDispatcher; const Params: array of string); procedure DoActualMarkUnMark(const Params: array of string; bSelect: boolean); procedure DoActualAddToCommandLine(const Params: array of string; sAddedString:string; bAddSpaceAtTheEnd:boolean); //--------------------- published //-------------------------------------------------------------------------- // All commands can be split into three groups: // 1. Commands intended for the application (cm_VisitHomePage, // cm_About, cm_Exit, ...). // // 2. Commands intended for file views (cm_QuickSearch, cm_EditPath, etc.). // Those commands are simply redirected to the currently active file view by calling: // frmMain.ActiveFrame.ExecuteCommand(CommandName, Param); // If they are supported by the given file view they are executed there. // // If in future there will be a need to pass specific parameters to the // commands, i.e. not string, they should be implemented by creating // an interface for each command, and each file view implementing those // interfaces which commands it supports. // // 3. Commands intended for file sources (cm_Copy, cm_Rename, cm_MakeDir). // The file operations will mostly work only for non-virtual file sources. // //-------------------------------------------------------------------------- // RECIPE TO ADD A "cm_" COMMAND: //-------------------------------------------------------------------------- // In this recipe, we use as an exemple the command "cm_SrcOpenDrives" // 1. In "fMain" we add the action in the "actionLst". // 2. Make sure we add it in the appropriate category. // 3. The action name must start with "act" and have the exact same name as the "cm_" we want to add. // 4. So if we want "cm_SrcOpenDrives", we name the action "actSrcOpenDrives". // 5. By the way, "KEEP THE SAME SPELLING EVERYWHERE!". // 6. The order in which the "cm_SrcOpenDrives" will appear, is the same as its position in the "actionLst". // 7. So command is "cm_SrcOpenDrives", so keep writing "cm_SrcOpenDrives" and not "cm_srcopendrives" for example. // 8. The only single place to have lowercases is for the icon name which will be "cm_srcopendrives" but it's the only one case. // 9. Give an appropriate "caption" name for the command, so for our example "Open drive list" // 10. Set the "Tag" to the same number as the other command of the same category. // 11. In the "uMainCommands", for the type "TMainCommands", add the code for the command. // 12. The command name must start with "cm_" and ends with the same name as what we added for the "act". // 13. So with our example we add "cm_SrcOpenDrives". // 14. Create an icon for the command. // 15. Make a 24-bits with alpha .PNG file. // 16. Name the file with he same name of the "cm_" command. // 17. But write the name all in lower case so here "cm_srcopendrives". // 18. Store the file here: to path "pixmaps\dctheme\32x32\actions\". // 19. If command is a compatible on with TC, add it in unit "uTotalCommander". // 20. So with this example we add: "(TCCommand: 'cm_SrcOpenDrives'; TCIcon: -1; DCCommand: 'cm_SrcOpenDrives')". // 21. If command needs to have a shortcut, go in unit "uGlobs", go to routine "LoadDefaultHotkeyBindings"(more detailed - read instructions in head of "LoadDefaultHotkeyBindings") and add the appropriate "AddIfNotExists". // 22. Don't abuse on adding keyboard shortcut! We must let some user's keys for user! // 23. For this example, we won't add a keyboard shortcut. TC does'nt have neither. // 24. Edit the file "doc\en\cmds.html" to add help for the command. // 25. For the languages we know, translate the caption of the action added. // 26. For example in our example, it will be "tfrmmain.actsrcopendrives.caption" that will need to be change. // 27. It's important to * T E S T * the "cm_" command you add. // 28. Add a single button in the toolbar to test it works. // 29. Make sure we see the expected icon and the expected tooltip. // 30. Make sure the actual button you added do the expected task. // 31. If command is using parameters, make sure you test the most cases of parameters. // 32. If you added keyboard shortcut, make sure keyboard shortcut works. // 33. With the "cm_DoAnyCmCommand", go find in the "Internal Command Selector" the command you added. // 34. Make sure it's present there, under the appropriate category, sorted at the classic logical place. // 35. Make sure we see the shortcut if any and that the description is correct. // 36. Test the help for the command from there to make sure it links to the correct place in the help file. procedure cm_AddPathToCmdLine(const {%H-}Params: array of string); procedure cm_AddFilenameToCmdLine(const {%H-}Params: array of string); procedure cm_AddPathAndFilenameToCmdLine(const {%H-}Params: array of string); procedure cm_CmdLineNext(const {%H-}Params: array of string); procedure cm_CmdLinePrev(const {%H-}Params: array of string); procedure cm_ContextMenu(const Params: array of string); procedure cm_CopyFullNamesToClip(const {%H-}Params: array of string); procedure cm_CopyFileDetailsToClip(const {%H-}Params: array of string); procedure cm_SaveFileDetailsToFile(const {%H-}Params: array of string); procedure cm_Exchange(const {%H-}Params: array of string); procedure cm_FlatView(const {%H-}Params: array of string); procedure cm_FlatViewSel(const {%H-}Params: array of string); procedure cm_LeftFlatView(const {%H-}Params: array of string); procedure cm_RightFlatView(const {%H-}Params: array of string); procedure cm_OpenArchive(const {%H-}Params: array of string); procedure cm_TestArchive(const {%H-}Params: array of string); procedure cm_OpenDirInNewTab(const {%H-}Params: array of string); procedure cm_Open(const {%H-}Params: array of string); procedure cm_ShellExecute(const Params: array of string); procedure cm_OpenVirtualFileSystemList(const {%H-}Params: array of string); procedure cm_TargetEqualSource(const {%H-}Params: array of string); procedure cm_LeftEqualRight(const {%H-}Params: array of string); procedure cm_RightEqualLeft(const {%H-}Params: array of string); procedure cm_PackFiles(const Params: array of string); procedure cm_ExtractFiles(const Params: array of string); procedure cm_QuickSearch(const Params: array of string); procedure cm_QuickFilter(const Params: array of string); procedure cm_SrcOpenDrives(const {%H-}Params: array of string); procedure cm_LeftOpenDrives(const {%H-}Params: array of string); procedure cm_RightOpenDrives(const {%H-}Params: array of string); procedure cm_OpenBar(const {%H-}Params: array of string); procedure cm_ShowButtonMenu(const Params: array of string); procedure cm_TransferLeft(const {%H-}Params: array of string); procedure cm_TransferRight(const {%H-}Params: array of string); procedure cm_GoToFirstEntry(const {%H-}Params: array of string); procedure cm_GoToLastEntry(const {%H-}Params: array of string); procedure cm_GoToFirstFile(const {%H-}Params: array of string); procedure cm_GoToNextEntry(const {%H-}Params: array of string); procedure cm_GoToPrevEntry(const {%H-}Params: array of string); procedure cm_GoToLastFile(const {%H-}Params: array of string); procedure cm_Minimize(const {%H-}Params: array of string); procedure cm_Wipe(const {%H-}Params: array of string); procedure cm_Exit(const {%H-}Params: array of string); procedure cm_NewTab(const {%H-}Params: array of string); procedure cm_RenameTab(const {%H-}Params: array of string); procedure cm_CloseTab(const {%H-}Params: array of string); procedure cm_CloseAllTabs(const Params: array of string); procedure cm_CloseDuplicateTabs(const Params: array of string); procedure cm_NextTab(const Params: array of string); procedure cm_PrevTab(const Params: array of string); procedure cm_MoveTabLeft(const Params: array of string); procedure cm_MoveTabRight(const Params: array of string); procedure cm_ShowTabsList(const Params: array of string); procedure cm_ActivateTabByIndex(const Params: array of string); procedure cm_SaveTabs(const Params: array of string); procedure cm_LoadTabs(const Params: array of string); procedure cm_SetTabOptionNormal(const Params: array of string); procedure cm_SetTabOptionPathLocked(const Params: array of string); procedure cm_SetTabOptionPathResets(const Params: array of string); procedure cm_SetTabOptionDirsInNewTab(const Params: array of string); procedure cm_Copy(const Params: array of string); procedure cm_CopyNoAsk(const Params: array of string); procedure cm_Delete(const Params: array of string); procedure cm_CheckSumCalc(const Params: array of string); procedure cm_CheckSumVerify(const Params: array of string); procedure cm_Edit(const Params: array of string); procedure cm_EditPath(const Params: array of string); procedure cm_MakeDir(const Params: array of string); procedure cm_Rename(const Params: array of string); procedure cm_RenameNoAsk(const Params: array of string); procedure cm_View(const Params: array of string); procedure cm_QuickView(const Params: array of string); procedure cm_BriefView(const Params: array of string); procedure cm_LeftBriefView(const Params: array of string); procedure cm_RightBriefView(const Params: array of string); procedure cm_ColumnsView(const Params: array of string); procedure cm_LeftColumnsView(const Params: array of string); procedure cm_RightColumnsView(const Params: array of string); procedure cm_ThumbnailsView(const Params: array of string); procedure cm_LeftThumbView(const Params: array of string); procedure cm_RightThumbView(const Params: array of string); procedure cm_TreeView(const Params: array of string); procedure cm_CopyNamesToClip(const {%H-}Params: array of string); procedure cm_FocusTreeView(const {%H-}Params: array of string); procedure cm_FocusCmdLine(const {%H-}Params: array of string); procedure cm_FileAssoc(const {%H-}Params: array of string); procedure cm_HelpIndex(const {%H-}Params: array of string); procedure cm_Keyboard(const {%H-}Params: array of string); procedure cm_VisitHomePage(const {%H-}Params: array of string); procedure cm_About(const {%H-}Params: array of string); procedure cm_ShowSysFiles(const {%H-}Params: array of string); procedure cm_SwitchIgnoreList(const Params: array of string); procedure cm_Options(const Params: array of string); procedure cm_CompareContents(const Params: array of string); procedure cm_Refresh(const {%H-}Params: array of string); procedure cm_ShowMainMenu(const Params: array of string); procedure cm_DirHotList(const Params: array of string); procedure cm_ConfigDirHotList(const {%H-}Params: array of string); procedure cm_WorkWithDirectoryHotlist(const Params: array of string); procedure cm_MarkInvert(const Params: array of string); procedure cm_MarkMarkAll(const Params: array of string); procedure cm_MarkUnmarkAll(const Params: array of string); procedure cm_MarkPlus(const Params: array of string); procedure cm_MarkMinus(const Params: array of string); procedure cm_MarkCurrentName(const Params: array of string); procedure cm_UnmarkCurrentName(const Params: array of string); procedure cm_MarkCurrentNameExt(const Params: array of string); procedure cm_UnmarkCurrentNameExt(const Params: array of string); procedure cm_MarkCurrentExtension(const Params: array of string); procedure cm_UnmarkCurrentExtension(const Params: array of string); procedure cm_MarkCurrentPath(const Params: array of string); procedure cm_UnmarkCurrentPath(const Params: array of string); procedure cm_SaveSelection(const Params: array of string); procedure cm_RestoreSelection(const Params: array of string); procedure cm_SaveSelectionToFile(const Params: array of string); procedure cm_LoadSelectionFromFile(const Params: array of string); procedure cm_LoadSelectionFromClip(const Params: array of string); procedure cm_SyncDirs(const Params: array of string); procedure cm_Search(const Params: array of string); procedure cm_HardLink(const Params: array of string); procedure cm_MultiRename(const Params: array of string); procedure cm_ReverseOrder(const Params: array of string); procedure cm_LeftReverseOrder(const Params: array of string); procedure cm_RightReverseOrder(const Params: array of string); procedure cm_UniversalSingleDirectSort(const Params: array of string); procedure cm_SortByName(const Params: array of string); procedure cm_SortByExt(const Params: array of string); procedure cm_SortByDate(const Params: array of string); procedure cm_SortBySize(const Params: array of string); procedure cm_SortByAttr(const Params: array of string); procedure cm_LeftSortByName(const Params: array of string); procedure cm_LeftSortByExt(const Params: array of string); procedure cm_LeftSortByDate(const Params: array of string); procedure cm_LeftSortBySize(const Params: array of string); procedure cm_LeftSortByAttr(const Params: array of string); procedure cm_RightSortByName(const Params: array of string); procedure cm_RightSortByExt(const Params: array of string); procedure cm_RightSortByDate(const Params: array of string); procedure cm_RightSortBySize(const Params: array of string); procedure cm_RightSortByAttr(const Params: array of string); procedure cm_SymLink(const Params: array of string); procedure cm_CopySamePanel(const Params: array of string); procedure cm_DirHistory(const Params: array of string); procedure cm_ViewHistory(const Params: array of string); procedure cm_ViewHistoryPrev(const {%H-}Params: array of string); procedure cm_ViewHistoryNext(const {%H-}Params: array of string); procedure cm_EditNew(const Params: array of string); procedure cm_RenameOnly(const Params: array of string); procedure cm_RunTerm(const Params: array of string); procedure cm_ShowCmdLineHistory(const Params: array of string); procedure cm_ToggleFullscreenConsole(const Params: array of string); procedure cm_CalculateSpace(const Params: array of string); procedure cm_CountDirContent(const Params: array of string); procedure cm_SetFileProperties(const Params: array of string); procedure cm_FileProperties(const Params: array of string); procedure cm_FileLinker(const Params: array of string); procedure cm_FileSpliter(const Params: array of string); procedure cm_PanelsSplitterPerPos(const Params: array of string); procedure cm_EditComment(const Params: array of string); procedure cm_CopyToClipboard(const Params: array of string); procedure cm_CutToClipboard(const Params: array of string); procedure cm_PasteFromClipboard(const Params: array of string); procedure cm_SyncChangeDir(const Params: array of string); procedure cm_ChangeDirToRoot(const Params: array of string); procedure cm_ChangeDirToHome(const Params: array of string); procedure cm_ChangeDirToParent(const Params: array of string); procedure cm_ChangeDir(const Params: array of string); procedure cm_ClearLogWindow(const Params: array of string); procedure cm_ClearLogFile(const Params: array of string); procedure cm_NetworkConnect(const Params: array of string); procedure cm_NetworkDisconnect(const Params: array of string); procedure cm_CopyNetNamesToClip(const Params: array of string); procedure cm_HorizontalFilePanels(const Params: array of string); procedure cm_OperationsViewer(const Params: array of string); procedure cm_CompareDirectories(const Params: array of string); procedure cm_ViewLogFile(const Params: array of string); procedure cm_ConfigToolbars(const Params: array of string); procedure cm_DebugShowCommandParameters(const Params: array of string); procedure cm_CopyPathOfFilesToClip(const Params: array of string); procedure cm_CopyPathNoSepOfFilesToClip(const Params: array of string); procedure cm_DoAnyCmCommand(const Params: array of string); procedure cm_SetAllTabsOptionNormal(const Params: array of string); procedure cm_SetAllTabsOptionPathLocked(const Params: array of string); procedure cm_SetAllTabsOptionPathResets(const Params: array of string); procedure cm_SetAllTabsOptionDirsInNewTab(const Params: array of string); procedure cm_ConfigFolderTabs(const {%H-}Params: array of string); procedure cm_ConfigFavoriteTabs(const {%H-}Params: array of string); procedure cm_LoadFavoriteTabs(const {%H-}Params: array of string); procedure cm_SaveFavoriteTabs(const {%H-}Params: array of string); procedure cm_ReloadFavoriteTabs(const {%H-}Params: array of string); procedure cm_PreviousFavoriteTabs(const {%H-}Params: array of string); procedure cm_NextFavoriteTabs(const {%H-}Params: array of string); procedure cm_ResaveFavoriteTabs(const {%H-}Params: array of string); procedure cm_CopyAllTabsToOpposite(const {%H-}Params: array of string); procedure cm_ConfigTreeViewMenus(const {%H-}Params: array of string); procedure cm_ConfigTreeViewMenusColors(const {%H-}Params: array of string); procedure cm_ConfigSavePos(const {%H-}Params: array of string); procedure cm_ConfigSaveSettings(const {%H-}Params: array of string); procedure cm_AddNewSearch(const Params: array of string); procedure cm_ViewSearches(const {%H-}Params: array of string); procedure cm_DeleteSearches(const {%H-}Params: array of string); procedure cm_ConfigSearches(const {%H-}Params: array of string); procedure cm_ConfigHotKeys(const {%H-}Params: array of string); procedure cm_ExecuteScript(const {%H-}Params: array of string); procedure cm_FocusSwap(const {%H-}Params: array of string); procedure cm_Benchmark(const {%H-}Params: array of string); procedure cm_ConfigArchivers(const {%H-}Params: array of string); procedure cm_ConfigTooltips(const {%H-}Params: array of string); procedure cm_ConfigPlugins(const {%H-}Params: array of string); procedure cm_OpenDriveByIndex(const Params: array of string); procedure cm_AddPlugin(const Params: array of string); procedure cm_LoadList(const Params: array of string); // Internal commands procedure cm_ExecuteToolbarItem(const Params: array of string); end; implementation uses fOptionsPluginsBase, fOptionsPluginsDSX, fOptionsPluginsWCX, fOptionsPluginsWDX, fOptionsPluginsWFX, fOptionsPluginsWLX, uFlatViewFileSource, uFindFiles, Forms, Controls, Dialogs, Clipbrd, strutils, LCLProc, HelpIntfs, DCStringHashListUtf8, dmHelpManager, typinfo, fMain, fPackDlg, fMkDir, DCDateTimeUtils, KASToolBar, KASToolItems, fExtractDlg, fAbout, fOptions, fDiffer, fFindDlg, fSymLink, fHardLink, fMultiRename, fLinker, fSplitter, fDescrEdit, fCheckSumVerify, fCheckSumCalc, fSetFileProperties, uLng, uLog, uShowMsg, uOSForms, uOSUtils, uDCUtils, uBriefFileView, fSelectDuplicates, uShowForm, uShellExecute, uClipboard, uHash, uDisplayFile, uLuaPas, uSysFolders, uFilePanelSelect, uFileSystemFileSource, uQuickViewPanel, Math, fViewer, uOperationsManager, uFileSourceOperationTypes, uWfxPluginFileSource, uFileSystemDeleteOperation, uFileSourceExecuteOperation, uSearchResultFileSource, uFileSourceOperationMessageBoxesUI, uFileSourceCalcChecksumOperation, uFileSourceCalcStatisticsOperation, uFileSource, uFileSourceProperty, uVfsFileSource, uFileSourceUtil, uArchiveFileSourceUtil, uThumbFileView, uTempFileSystemFileSource, uFileProperty, uFileSourceSetFilePropertyOperation, uTrash, uFileSystemCopyOperation, fOptionsFileAssoc, fDeleteDlg, fViewOperations, uVfsModule, uMultiListFileSource, uExceptions, uFileProcs, DCOSUtils, DCStrUtils, DCBasicTypes, uFileSourceCopyOperation, fSyncDirsDlg, uHotDir, DCXmlConfig, dmCommonData, fOptionsFrame, foptionsDirectoryHotlist, fMainCommandsDlg, uConnectionManager, fOptionsFavoriteTabs, fTreeViewMenu, uArchiveFileSource, fOptionsHotKeys, fBenchmark, uAdministrator, uWcxArchiveFileSource, uColumnsFileView ; resourcestring rsFavoriteTabs_SetupNotExist = 'No setup named "%s"'; procedure ReadCopyRenameParams( const Params: array of string; var Confirmation: Boolean; out HasQueueId: Boolean; out QueueIdentifier: TOperationsManagerQueueIdentifier); var Param, sQueueId: String; BoolValue: Boolean; iQueueId: Integer; begin HasQueueId := False; for Param in Params do begin if GetParamBoolValue(Param, 'confirmation', BoolValue) then Confirmation := BoolValue else if GetParamValue(Param, 'queueid', sQueueId) then begin HasQueueId := TryStrToInt(sQueueId, iQueueId); if HasQueueId then QueueIdentifier := iQueueId; end; end; end; { TMainCommands } constructor TMainCommands.Create(TheOwner: TComponent; ActionList: TActionList = nil); begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, ActionList); FCommands.FilterFunc := @CommandsFilter; end; function TMainCommands.CommandsFilter(Command: String): Boolean; begin Result := Command = 'cm_ExecuteToolbarItem'; end; //------------------------------------------------------ procedure TMainCommands.TryGetParentDir(FileView: TFileView; var SelectedFiles: TFiles); var activeFile : TFile; tempPath : String; begin activeFile := FileView.CloneActiveFile; if assigned(activeFile) then begin if activeFile.Name = '..' then begin tempPath := activeFile.FullPath; activeFile.Name := ExtractFileName(ExcludeTrailingPathDelimiter(activeFile.Path)); activeFile.Path := ExpandFileName(tempPath); SelectedFiles.Add(activeFile); end else FreeAndNil(activeFile); end; end; procedure TMainCommands.OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var I: Integer; aFile: TFile; aFileList: TStringList; aFileSource: ITempFileSystemFileSource; aCopyOutOperation: TFileSourceCopyOperation; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin aFileList := TStringList.Create; try aCopyOutOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; ChangeFileListRoot(aFileSource.FileSystemRoot, aCopyOutOperation.SourceFiles); try for I := 0 to aCopyOutOperation.SourceFiles.Count - 1 do begin aFile := aCopyOutOperation.SourceFiles[I]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // Try to find 'view' command in internal associations if not gExts.GetExtActionCmd(aFile, 'view', sCmd, sParams, sStartPath) then aFileList.Add(aFile.FullPath) else begin if sStartPath='' then sStartPath:=aCopyOutOperation.SourceFiles.Path; ProcessExtCommandFork(sCmd, sParams, aCopyOutOperation.SourceFiles.Path, aFile); // TODO: // If TempFileSource is used, create a wait thread that will // keep the TempFileSource alive until the command is finished. aCopyOutOperation.SourceFileSource.AddChild(aFileSource); end; end; // if selected end; // for // if aFileList has files then view it if aFileList.Count > 0 then ShowViewerByGlobList(aFileList, aFileSource); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(aFileList); end; end; end; procedure TMainCommands.OnEditCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var WaitData: TEditorWaitData; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin try WaitData := TEditorWaitData.Create(Operation as TFileSourceCopyOperation); try ShowEditorByGlob(WaitData); except WaitData.Free; end; except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; end; procedure TMainCommands.OnCalcStatisticsStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin CalcStatisticsOperation := Operation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; with CalcStatisticsOperationStatistics do begin if Size < 0 then msgOK(Format(rsSpaceMsg, [Files, Directories, '???', '???'])) else begin msgOK(Format(rsSpaceMsg, [Files, Directories, cnvFormatFileSize(Size), IntToStrTS(Size)])); end; end; end; end; procedure TMainCommands.OnCalcChecksumStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var CalcChecksumOperation: TFileSourceCalcChecksumOperation; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin CalcChecksumOperation := Operation as TFileSourceCalcChecksumOperation; if CalcChecksumOperation.Mode = checksum_verify then ShowVerifyCheckSum(CalcChecksumOperation.Result); end; end; //------------------------------------------------------ procedure TMainCommands.DoCloseTab(Notebook: TFileViewNotebook; PageIndex: Integer); begin with frmMain do begin RemovePage(Notebook, PageIndex); ActiveFrame.SetFocus; end; end; procedure TMainCommands.DoShowCmdLineHistory(bNextCmdLine: Boolean); begin with frmMain do begin if edtCommand.Visible then begin ShowCommandLine(True); if bNextCmdLine then begin if edtCommand.ItemIndex > 0 then edtCommand.ItemIndex := edtCommand.ItemIndex - 1; end else begin if edtCommand.ItemIndex < edtCommand.Items.Count - 1 then edtCommand.ItemIndex := edtCommand.ItemIndex + 1; end; end; end; end; procedure TMainCommands.DoChangeDirToRoot(FileView: TFileView); var Page: TFileViewPage; begin with FileView do begin Page := TFileViewPage(NotebookPage); if Assigned(Page) then begin if Page.LockState = tlsPathResets then ChooseFileSource(FileView, Page.LockPath) else begin CurrentPath := FileSource.GetRootDir(CurrentPath); end; end; end; end; procedure TMainCommands.DoCopySelectedFileNamesToClipboard(FileView: TFileView; TypeOfCopy: TCopyFileNamesToClipboard; const Params : Array of string); var I: Integer; sl: TStringList = nil; SelectedFiles: TFiles = nil; PathToAdd, FileNameToAdd: String; separator : String; begin SelectedFiles := FileView.CloneSelectedOrActiveFiles; if (SelectedFiles.Count = 0) then TryGetParentDir(FileView, SelectedFiles); try if SelectedFiles.Count > 0 then begin sl := TStringList.Create; for I := 0 to SelectedFiles.Count - 1 do begin PathToAdd:=''; FileNameToAdd:=''; //Let's set the "PathToAdd" according to type of copy. case TypeOfCopy of cfntcPathAndFileNames, cfntcJustPathWithSeparator, cfntcPathWithoutSeparator: begin PathToAdd:= SelectedFiles[I].Path; // Workaround for not fully implemented TMultiListFileSource. if (Pos(FileView.CurrentAddress, PathToAdd) <> 1) and (not FileView.FileSource.IsClass(TMultiListFileSource)) then begin PathToAdd := FileView.CurrentAddress + PathToAdd; end; if TypeOfCopy=cfntcPathWithoutSeparator then PathToAdd:=ExcludeTrailingPathDelimiter(PathToAdd); end; end; //Let's set the "FilenameToAdd" according to type of copy. case TypeOfCopy of cfntcPathAndFileNames, cfntcJustFileNames: FileNameToAdd:=SelectedFiles[I].Name; end; if ((GetParamValue(Params, 'separator', separator)) and (separator.length > 0)) then sl.Add(ReplaceDirectorySeparator(PathToAdd + FileNameToAdd, separator[1])) else sl.Add(PathToAdd + FileNameToAdd); end; Clipboard.Clear; // prevent multiple formats in Clipboard (specially synedit) ClipboardSetText(TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle)); end; finally if Assigned(sl) then FreeAndNil(sl); if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; procedure TMainCommands.DoNewTab(Notebook: TFileViewNotebook); var NewPage: TFileViewPage; begin NewPage := Notebook.NewPage(Notebook.ActiveView); NewPage.MakeActive; end; procedure TMainCommands.DoRenameTab(Page: TFileViewPage); var sCaption: String; begin sCaption := Page.CurrentTitle; if InputQuery(rsMsgTabRenameCaption, rsMsgTabRenamePrompt, sCaption) then Page.PermanentTitle := sCaption; end; procedure TMainCommands.DoTabMenuClick(Sender: TObject); var MenuItem: TMenuItem absolute Sender; begin TFileViewNotebook(FTabsMenu.PopupComponent).ActivateTabByIndex(MenuItem.Tag); end; procedure TMainCommands.DoOpenVirtualFileSystemList(Panel: TFileView); var FileSource: IFileSource; begin FileSource:= TVfsFileSource.Create(gWFXPlugins); if Assigned(FileSource) then begin Panel.AddFileSource(FileSource, FileSource.GetRootDir); frmMain.ActiveFrame.SetFocus; end; end; procedure TMainCommands.DoPanelsSplitterPerPos(SplitPos: Integer); begin with frmMain do begin if (SplitPos >= 0) and (SplitPos <= 100) then begin // Update splitter position MainSplitterPos:= SplitPos; pnlNotebooksResize(pnlNotebooks); end; end; end; procedure TMainCommands.DoUpdateFileView(AFileView: TFileView; UserData: Pointer); begin AFileView.UpdateView; end; procedure TMainCommands.DoContextMenu(Panel: TFileView; X, Y: Integer; Background: Boolean; UserWishForContextMenu:TUserWishForContextMenu); var Index: Integer; AMenu: TPopupMenu; aFile: TFile = nil; aFiles: TFiles = nil; sPath, sName: String; OperationsTypes: TFileSourceOperationTypes; begin with frmMain do begin if not (fspDirectAccess in Panel.FileSource.Properties) then begin if not Background then begin AMenu:= pmContextMenu; if (fspContextMenu in Panel.FileSource.Properties) then begin aFiles:= Panel.CloneSelectedOrActiveFiles; try Panel.FileSource.QueryContextMenu(aFiles, AMenu); finally FreeAndNil(aFiles); end; end; OperationsTypes:= Panel.FileSource.GetOperationsTypes; mnuContextDelete.Visible:= fsoDelete in OperationsTypes; mnuContextRenameOnly.Visible:= fsoSetFileProperty in OperationsTypes; AMenu.PopUp(X, Y); end; Exit; end; if not Panel.HasSelectedFiles then begin aFile:= Panel.CloneActiveFile; if not Assigned(aFile) then Background:= True else begin sName:= aFile.Name; FreeAndNil(aFile); end; end; if (Background = True) or (sName = '..') then begin sName:= ExcludeTrailingPathDelimiter(Panel.CurrentPath); sPath:= ExtractFilePath(sName); aFiles:= TFiles.Create(sPath); aFile:= Panel.FileSource.CreateFileObject(sPath); aFile.Attributes:= faFolder; aFile.Name:= ExtractFileName(sName); aFiles.Add(aFile); end else begin aFiles:= Panel.CloneSelectedOrActiveFiles; end; if Assigned(aFiles) then try if aFiles.Count > 0 then try if fspLinksToLocalFiles in Panel.FileSource.Properties then begin for Index:= 0 to aFiles.Count - 1 do begin aFile:= aFiles[Index]; Panel.FileSource.GetLocalName(aFile); end; end; ShowContextMenu(frmMain, aFiles, X, Y, Background, nil, UserWishForContextMenu); except on e: EContextMenuException do ShowException(e); end; finally if Assigned(aFiles) then FreeAndNil(aFiles); end; end; end; procedure TMainCommands.DoTransferPath(SourceFrame: TFileView; TargetNotebook: TFileViewNotebook); begin if TargetNotebook.ActivePage.LockState = tlsPathLocked then Exit; if TargetNotebook.ActivePage.LockState = tlsDirsInNewTab then begin TargetNotebook.NewPage(SourceFrame).MakeActive; TargetNotebook.ActivePage.LockState := tlsNormal; end else begin TargetNotebook.ActivePage.FileView := nil; SourceFrame.Clone(TargetNotebook.ActivePage); end; end; procedure TMainCommands.DoTransferPath(SourcePage: TFileViewPage; TargetPage: TFileViewPage; FromActivePanel: Boolean); var aFile: TFile; NewPath: String; begin if FromActivePanel then begin aFile := SourcePage.FileView.CloneActiveFile; if Assigned(aFile) then try if (fspLinksToLocalFiles in SourcePage.FileView.FileSource.GetProperties) and (SourcePage.FileView.FileSource.GetLocalName(aFile)) then begin if aFile.IsDirectory or aFile.IsLinkToDirectory then ChooseFileSource(TargetPage.FileView, aFile.FullPath) else if not ChooseFileSource(TargetPage.FileView, TargetPage.FileView.FileSource, aFile) then begin ChooseFileSource(TargetPage.FileView, aFile.Path); TargetPage.FileView.SetActiveFile(aFile.Name); end; end else if aFile.IsDirectory or aFile.IsLinkToDirectory then begin if aFile.Name = '..' then begin NewPath := GetParentDir(SourcePage.FileView.CurrentPath); end else begin // Change to a subdirectory. NewPath := aFile.FullPath; end; if NewPath <> EmptyStr then TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, NewPath); end else begin // Change file source, if the file under cursor can be opened as another file source. try if not ChooseFileSource(TargetPage.FileView, SourcePage.FileView.FileSource, aFile) then begin if SourcePage.FileView.FileSource.IsClass(TArchiveFileSource) then begin NewPath:= ExtractFilePath(SourcePage.FileView.FileSource.CurrentAddress); if not mbCompareFileNames(TargetPage.FileView.CurrentPath, NewPath) then begin TargetPage.FileView.AddHistory(TFileSystemFileSource.GetFileSource, NewPath); end; end; TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, aFile.Path); end; TargetPage.FileView.SetActiveFile(aFile.Name); except on e: EFileSourceException do MessageDlg('Error', e.Message, mtError, [mbOK], 0); end; end; finally FreeAndNil(aFile); end; end else begin TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, SourcePage.FileView.CurrentPath); end; end; procedure TMainCommands.DoSortByFunctions(View: TFileView; FileFunctions: TFileFunctions); var NewSorting: TFileSortings = nil; CurrentSorting: TFileSortings; SortDirection: TSortDirection = sdNone; i: Integer; begin if Length(FileFunctions) = 0 then Exit; CurrentSorting := View.Sorting; // Check if there is already sorting by one of the functions. // If it is then reverse direction of sorting. for i := 0 to Length(FileFunctions) - 1 do begin SortDirection := GetSortDirection(CurrentSorting, FileFunctions[i]); if SortDirection <> sdNone then begin SortDirection := ReverseSortDirection(SortDirection); Break; end; end; //If there is no direction currently, sort "sdDescending" for size and date if SortDirection = sdNone then begin case FileFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortDirection:=sdDescending; else SortDirection:=sdAscending; end; end; SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 1); NewSorting[0].SortFunctions[0] := FileFunctions[0]; // Sort by single function. NewSorting[0].SortDirection := SortDirection; View.Sorting := NewSorting; end; procedure TMainCommands.DoShowMainMenu(bShow: Boolean); begin gMainMenu := bShow; with frmMain do begin if bShow then begin Menu := mnuMain; end else if Assigned(Menu) then begin Menu := nil; {$IFDEF MSWINDOWS} // Workaround: on Windows need to recreate window to properly recalculate children sizes. RecreateWnd(frmMain); {$ENDIF} end; end; end; //------------------------------------------------------ //Published methods //------------------------------------------------------ { TMainCommands.DoActualAddToCommandLine } procedure TMainCommands.DoActualAddToCommandLine(const Params: array of string; sAddedString:string; bAddSpaceAtTheEnd:boolean); type tQuoteMode = (tqmSmartQuote,tqmForceQuote,tqmNeverQuote); var OldPosition: Integer; sParamValue: String; QuoteMode: tQuoteMode = tqmSmartQuote; DefaultButton: TMyMsgButton; Answer: TMyMsgResult; begin if Length(Params)>0 then begin if GetParamValue(Params[0], 'mode', sParamValue) then begin if sParamValue='smartquote' then QuoteMode:=tqmSmartQuote else if sParamValue='forcequote' then QuoteMode:=tqmForceQuote else if sParamValue='neverquote' then QuoteMode:=tqmNeverQuote else if sParamValue='prompt' then begin if sAddedString = QuoteFilenameIfNecessary(sAddedString) then DefaultButton:=msmbNo else DefaultButton:=msmbYes; Answer:=MsgBox(rsMsgAskQuoteOrNot,[msmbYes, msmbNo], DefaultButton, DefaultButton); case Answer of mmrYes:QuoteMode:=tqmForceQuote; mmrNo:QuoteMode:=tqmNeverQuote; end; end; end; end; case QuoteMode of tqmSmartQuote : sAddedString := QuoteFilenameIfNecessary(sAddedString); tqmForceQuote : sAddedString := QuoteStr(sAddedString); tqmNeverQuote : sAddedString := sAddedString; else sAddedString := QuoteFilenameIfNecessary(sAddedString); end; if bAddSpaceAtTheEnd then sAddedString:=sAddedString+' '; OldPosition := frmMain.edtCommand.SelStart; frmMain.edtCommand.Text := frmMain.edtCommand.Text + sAddedString; frmMain.edtCommand.SelStart := OldPosition + Length(sAddedString); frmMain.ShowCommandLine(False); end; { TMainCommands.cm_AddPathToCmdLine } procedure TMainCommands.cm_AddPathToCmdLine(const Params: array of string); begin DoActualAddToCommandLine(Params, frmMain.ActiveFrame.CurrentPath, False); end; { TMainCommands.cm_AddFilenameToCmdLine } procedure TMainCommands.cm_AddFilenameToCmdLine(const Params: array of string); var aFile: TFile; begin aFile := frmMain.ActiveFrame.CloneActiveFile; if Assigned(aFile) then try DoActualAddToCommandLine(Params, aFile.Name, True); finally FreeAndNil(aFile); end; end; { TMainCommands.cm_AddPathAndFilenameToCmdLine } procedure TMainCommands.cm_AddPathAndFilenameToCmdLine(const Params: array of string); var aFile: TFile; begin aFile := frmMain.ActiveFrame.CloneActiveFile; if Assigned(aFile) then try if aFile.Name = '..' then DoActualAddToCommandLine(Params, frmMain.ActiveFrame.CurrentPath, True) else DoActualAddToCommandLine(Params, aFile.FullPath, True); finally FreeAndNil(aFile); end; end; procedure TMainCommands.cm_ContextMenu(const Params: array of string); begin // Let file view handle displaying context menu at appropriate position. frmMain.ActiveFrame.ExecuteCommand('cm_ContextMenu', Params); end; procedure TMainCommands.cm_SaveFileDetailsToFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_SaveFileDetailsToFile', []); end; procedure TMainCommands.cm_CopyFullNamesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathAndFileNames, Params); end; procedure TMainCommands.cm_CopyFileDetailsToClip(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_CopyFileDetailsToClip', []); end; procedure TMainCommands.cm_CopyNamesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcJustFileNames, Params); end; procedure TMainCommands.cm_FocusTreeView(const Params: array of string); begin with frmMain do begin if gSeparateTree then begin if ActiveFrame.Focused then ShellTreeView.SetFocus else ActiveFrame.SetFocus; end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_Exchange(const Params: array of string); var AFileView: TFileView; NFileView: TFileView; AFree, NFree: Boolean; begin with frmMain do begin if (ActiveNotebook.ActivePage.LockState = tlsPathLocked) or (NotActiveNotebook.ActivePage.LockState = tlsPathLocked) then Exit; AFileView:= ActiveFrame; NFileView:= NotActiveFrame; if Assigned(QuickViewPanel) then QuickViewClose; AFree:= ActiveNotebook.ActivePage.LockState <> tlsDirsInNewTab; if AFree then ActiveNotebook.ActivePage.RemoveComponent(AFileView); DoTransferPath(NFileView, ActiveNotebook); NFree:= NotActiveNotebook.ActivePage.LockState <> tlsDirsInNewTab; if NFree then NotActiveNotebook.ActivePage.RemoveComponent(NFileView); DoTransferPath(AFileView, NotActiveNotebook); if AFree then AFileView.Free; if NFree then NFileView.Free; ActiveFrame.SetFocus; UpdateSelectedDrive(NotActiveNotebook); end; end; procedure TMainCommands.cm_ExecuteToolbarItem(const Params: array of string); var ToolItemID, ToolBarID: String; begin if GetParamValue(Params, 'ToolItemID', ToolItemID) then begin if not GetParamValue(Params, 'ToolBarID', ToolBarID) then frmMain.MainToolBar.ClickItem(ToolItemID) else begin if (ToolBarID = 'TfrmOptionsToolbar') then frmMain.MainToolBar.ClickItem(ToolItemID) else if (ToolBarID = 'TfrmOptionsToolbarMiddle') then frmMain.MiddleToolBar.ClickItem(ToolItemID); end; end; end; procedure TMainCommands.cm_FlatView(const Params: array of string); var AFile: TFile; AFileView: TFileView; AValue, Param: String; begin with frmMain do begin AFileView:= ActiveFrame; for Param in Params do begin if GetParamValue(Param, 'side', AValue) then begin if AValue = 'left' then AFileView:= FrameLeft else if AValue = 'right' then AFileView:= FrameRight else if AValue = 'inactive' then AFileView:= NotActiveFrame; end end; if not (fspListFlatView in AFileView.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported); end else begin AFileView.FlatView:= not AFileView.FlatView; if not AFileView.FlatView then begin AFile:= AFileView.CloneActiveFile; if Assigned(AFile) and AFile.IsNameValid then begin if not mbCompareFileNames(AFileView.CurrentPath, AFile.Path) then begin AFileView.CurrentPath:= AFile.Path; AFileView.SetActiveFile(AFile.Name); end; end; AFile.Free; end; AFileView.Reload; end; end; end; procedure TMainCommands.cm_FlatViewSel(const Params: array of string); var AFileList: TFileTree; AFileSource: IFileSource; procedure ScanDir(const Dir: String); var I: Integer; AFile: TFile; AFiles: TFiles; begin AFiles := AFileSource.GetFiles(Dir); try for I := 0 to AFiles.Count - 1 do begin AFile := AFiles[I]; if not AFile.IsDirectory then AFileList.AddSubNode(AFile.Clone) else if AFile.IsNameValid then ScanDir(AFile.FullPath); end; finally AFiles.Free; end; end; var J: Integer; AFile: TFile; AFiles: TFiles; AFileView: TFileView; AFlatView: ISearchResultFileSource; begin AFileView:= frmMain.ActiveFrame; AFileSource:= AFileView.FileSource; if AFileView.FlatView then begin AFileView.FlatView := False; if AFileSource.IsInterface(ISearchResultFileSource) then AFileView.ChangePathToParent(True) else AFileView.Reload; Exit; end; AFileList := TFileTree.Create; AFiles := AFileView.CloneSelectedFiles; for J := 0 to AFiles.Count - 1 do begin AFile := AFiles[J]; if not AFile.IsDirectory then AFileList.AddSubNode(AFile.Clone) else if AFile.IsNameValid then ScanDir(AFile.FullPath); end; AFiles.Free; // Create search result file source. AFlatView := TFlatViewFileSource.Create; AFlatView.AddList(AFileList, AFileSource); AFileView.AddFileSource(AFlatView, AFileView.CurrentPath); AFileView.FlatView := True; end; procedure TMainCommands.cm_LeftFlatView(const Params: array of string); begin cm_FlatView(['side=left']); end; procedure TMainCommands.cm_RightFlatView(const Params: array of string); begin cm_FlatView(['side=right']); end; procedure TMainCommands.cm_OpenDirInNewTab(const Params: array of string); function OpenTab(const aFullPath: string): TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); // Workaround for Search Result File Source if Result.FileView.FileSource is TSearchResultFileSource then SetFileSystemPath(Result.FileView, aFullPath) else Result.FileView.CurrentPath := aFullPath; end; function OpenArchive(const aFile: TFile): TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); ChooseArchive(Result.FileView, Result.FileView.FileSource, aFile); end; function OpenParent: TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); Result.FileView.ChangePathToParent(True); end; var aFile: TFile; NewPage: TFileViewPage; begin aFile := FrmMain.ActiveFrame.CloneActiveFile; if not Assigned(aFile) then NewPage := OpenTab(FrmMain.ActiveFrame.CurrentPath) else try if not aFile.IsNameValid then NewPage := OpenParent else if (aFile.IsDirectory or aFile.IsLinkToDirectory) then NewPage := OpenTab(aFile.FullPath) else if FileIsArchive(aFile.FullPath) then NewPage := OpenArchive(aFile) else begin NewPage := OpenTab(aFile.Path); NewPage.FileView.SetActiveFile(aFile.Name); end; finally FreeAndNil(aFile); end; if tb_open_new_in_foreground in gDirTabOptions then NewPage.MakeActive; end; procedure TMainCommands.cm_TargetEqualSource(const Params: array of string); begin with frmMain do begin DoTransferPath(ActiveFrame, NotActiveNotebook); end; end; procedure TMainCommands.cm_LeftEqualRight(const Params: array of string); begin with frmMain do begin DoTransferPath(FrameRight, LeftTabs); // Destroying active view may have caused losing focus. Restore it if needed. if SelectedPanel = fpLeft then FrameLeft.SetFocus; end; end; procedure TMainCommands.cm_RightEqualLeft(const Params: array of string); begin with frmMain do begin DoTransferPath(FrameLeft, RightTabs); // Destroying active view may have caused losing focus. Restore it if needed. if SelectedPanel = fpRight then FrameRight.SetFocus; end; end; procedure TMainCommands.cm_OpenArchive(const Params: array of string); var aFile: TFile; begin with frmMain.ActiveFrame do begin aFile := CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then begin if aFile.IsDirectory or aFile.IsLinkToDirectory then ChangePathToChild(aFile) else ChooseArchive(frmMain.ActiveFrame, FileSource, aFile, True); end; finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_TestArchive(const Params: array of string); var Param: String; BoolValue: Boolean; SelectedFiles: TFiles; bConfirmation, HasConfirmationParam: Boolean; QueueId: TOperationsManagerQueueIdentifier = FreeOperationsQueueId; begin with frmMain do begin HasConfirmationParam := False; for Param in Params do begin if GetParamBoolValue(Param, 'confirmation', BoolValue) then begin HasConfirmationParam := True; bConfirmation := BoolValue; end; end; if not HasConfirmationParam then begin bConfirmation := focTestArchive in gFileOperationsConfirmations; end; if (bConfirmation = False) or (ShowDeleteDialog(rsMsgTestArchive, ActiveFrame.FileSource, QueueId)) then begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try TestArchive(ActiveFrame, SelectedFiles, QueueId); finally FreeAndNil(SelectedFiles); end; end; end; end; procedure TMainCommands.cm_Open(const Params: array of string); begin frmMain.ActiveFrame.OpenActiveFile; end; procedure TMainCommands.cm_ShellExecute(const Params: array of string); var aFile: TFile; begin if Length(Params) > 0 then with frmMain do ShellExecute(PrepareParameter(Params[0])) else with frmMain.ActiveFrame do begin aFile := CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then ShellExecute(aFile.FullPath) else if aFile.Name = '..' then ShellExecute(aFile.Path); finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_OpenVirtualFileSystemList(const Params: array of string); begin DoOpenVirtualFileSystemList(frmMain.ActiveFrame); end; //------------------------------------------------------ (* Pack files in archive by creating a new archive *) procedure TMainCommands.cm_PackFiles(const Params: array of string); var Param: String; TargetPath: String; SelectedFiles: TFiles; TargetFileSource: IFileSource; begin with frmMain do begin Param := GetDefaultParam(Params); if Param = 'PackHere' then begin TargetPath:= ActiveFrame.CurrentPath; TargetFileSource:= ActiveFrame.FileSource; end else begin TargetPath:= NotActiveFrame.CurrentPath; TargetFileSource:= NotActiveFrame.FileSource; end; if not (fspDirectAccess in TargetFileSource.Properties) then msgError(rsMsgErrNotSupported) else begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin ShowPackDlg(frmMain, ActiveFrame.FileSource, nil, // No specific target (create new) SelectedFiles, TargetPath, PathDelim { Copy to root of archive } {NotActiveFrame.FileSource.GetRootString} ); end; finally FreeAndNil(SelectedFiles); end; end; end; end; // This command is needed for extracting whole archive by Alt+F9 (without opening it). procedure TMainCommands.cm_ExtractFiles(const Params: array of string); var Param: String; TargetPath: String; SelectedFiles: TFiles; TargetFileSource: IFileSource; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SelectedFiles) then try if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin Param := GetDefaultParam(Params); if Param = 'ExtractHere' then begin TargetPath:= ActiveFrame.CurrentPath; TargetFileSource:= ActiveFrame.FileSource; end else begin TargetPath:= NotActiveFrame.CurrentPath; TargetFileSource:= NotActiveFrame.FileSource; end; ShowExtractDlg(frmMain, ActiveFrame.FileSource, SelectedFiles, TargetFileSource, TargetPath); end; finally FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_QuickSearch(const Params: array of string); begin FrmMain.ActiveFrame.ExecuteCommand('cm_QuickSearch', Params); end; procedure TMainCommands.cm_QuickFilter(const Params: array of string); begin FrmMain.ActiveFrame.ExecuteCommand('cm_QuickFilter', Params); end; procedure TMainCommands.cm_SrcOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(frmMain.SelectedPanel); end; procedure TMainCommands.cm_LeftOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(fpLeft); end; procedure TMainCommands.cm_RightOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(fpRight); end; procedure TMainCommands.cm_OpenBar(const Params: array of string); begin // Deprecated. end; { TMainCommands.DoComputeSizeAndPosForWindowInMiddle } procedure TMainCommands.DoComputeSizeAndPosForWindowInMiddle(var iPosX:integer; var iPosY:integer; var iWidth:integer; var iHeight:integer); var pl,pr: TPoint; begin pl := frmMain.FrameLeft.ClientToScreen(Classes.Point(0,0)); pr := frmMain.FrameRight.ClientToScreen(Classes.Point(0,0)); iWidth := (((pr.x+frmMain.FrameRight.Width)- pl.x) * 68) div 100; iHeight := frmMain.FrameLeft.Height; iPosX := pl.x + (((frmMain.FrameLeft.Width+frmMain.FrameRight.Width) - iWidth) div 2); iPosY := pl.y; end; { TMainCommands.cm_ShowButtonMenu } procedure TMainCommands.cm_ShowButtonMenu(const Params: array of string); var WantedButtonMenu, BoolValue: boolean; bWantedTreeViewButtonMenu : boolean = False; Param : string; iWantedPosX: integer = 0; iWantedPosY: integer = 0; iWantedWidth: integer = 800; iWantedHeight: integer = 600; APointer: Pointer; iTypeDispatcher: integer = 0; maybeKASToolButton: TKASToolButton; maybeKASToolItem: TKASToolItem; begin WantedButtonMenu := gButtonBar; if Length(Params) > 0 then begin for Param in Params do if GetParamBoolValue(Param, 'toolbar', BoolValue) then WantedButtonMenu := BoolValue else if GetParamBoolValue(Param, 'treeview', BoolValue) then bWantedTreeViewButtonMenu := BoolValue else WantedButtonMenu := not WantedButtonMenu; end else begin WantedButtonMenu := not WantedButtonMenu; end; if not bWantedTreeViewButtonMenu then begin if WantedButtonMenu <> gButtonBar then begin gButtonBar := WantedButtonMenu; frmMain.UpdateWindowView; end; end else begin DoComputeSizeAndPosForWindowInMiddle(iWantedPosX, iWantedPosY, iWantedWidth, iWantedHeight); APointer := GetUserChoiceFromKASToolBar(frmMain.MainToolBar, tvmcKASToolBar, iWantedPosX, iWantedPosY, iWantedWidth, iWantedHeight, iTypeDispatcher); if APointer<>nil then begin case iTypeDispatcher of 1: begin maybeKASToolButton := TKASToolButton(APointer); maybeKASToolButton.OnClick(maybeKASToolButton); end; 2: begin maybeKASToolItem := TKASToolItem(APointer); frmMain.MainToolBar.PublicExecuteToolItem(maybeKASToolItem); end; end; end; end; end; procedure TMainCommands.cm_TransferLeft(const Params: array of string); begin DoTransferPath(frmMain.RightTabs.ActivePage, frmMain.LeftTabs.ActivePage, frmMain.SelectedPanel = fpRight); end; procedure TMainCommands.cm_TransferRight(const Params: array of string); begin DoTransferPath(frmMain.LeftTabs.ActivePage, frmMain.RightTabs.ActivePage, frmMain.SelectedPanel = fpLeft); end; procedure TMainCommands.cm_GoToFirstEntry(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToFirstEntry', []); end; procedure TMainCommands.cm_GoToLastEntry(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToLastEntry', []); end; procedure TMainCommands.cm_GoToFirstFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToFirstFile', []); end; procedure TMainCommands.cm_GoToNextEntry(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToNextEntry', []); end; procedure TMainCommands.cm_GoToPrevEntry(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToPrevEntry', []); end; procedure TMainCommands.cm_GoToLastFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToLastFile', []); end; procedure TMainCommands.cm_Minimize(const Params: array of string); begin FrmMain.MinimizeWindow; end; procedure TMainCommands.cm_Wipe(const Params: array of string); var Message: String; theFilesToWipe: TFiles; Operation: TFileSourceOperation; QueueId: TOperationsManagerQueueIdentifier; begin with frmMain.ActiveFrame do begin if not (fsoWipe in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; // ------------------------------------------------------ theFilesToWipe := CloneSelectedOrActiveFiles; // free at Thread end by thread if Assigned(theFilesToWipe) then try if theFilesToWipe.Count = 0 then Exit; Message:= frmMain.GetFileDlgStr(rsMsgWipeSel, rsMsgWipeFlDr, theFilesToWipe); if not ShowDeleteDialog(Message, FileSource, QueueId) then Exit; Operation := FileSource.CreateWipeOperation(theFilesToWipe); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; finally if Assigned(theFilesToWipe) then FreeAndNil(theFilesToWipe); end; end; end; procedure TMainCommands.cm_Exit(const Params: array of string); begin frmMain.Close; // application.Terminate not save settings. end; procedure TMainCommands.cm_NewTab(const Params: array of string); begin DoNewTab(frmMain.ActiveNotebook); end; procedure TMainCommands.cm_RenameTab(const Params: array of string); begin DoRenameTab(frmMain.ActiveNotebook.ActivePage); end; procedure TMainCommands.cm_CloseTab(const Params: array of string); begin with frmMain do DoCloseTab(ActiveNotebook, ActiveNotebook.PageIndex); end; { TMainCommands.cm_CloseAllTabs } procedure TMainCommands.cm_CloseAllTabs(const Params: array of string); begin with frmMain do begin if (tb_confirm_close_all in gDirTabOptions) then if not msgYesNo(rsMsgCloseAllInActiveTabs) then Exit; DoActionOnMultipleTabs(Params,@DoCloseAllTabs); end; end; { TMainCommands.cm_CloseDuplicateTabs } procedure TMainCommands.cm_CloseDuplicateTabs(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoCloseDuplicateTabs); end; procedure TMainCommands.cm_NextTab(const Params: array of string); begin frmMain.ActiveNotebook.ActivateNextTab; end; procedure TMainCommands.cm_PrevTab(const Params: array of string); begin frmMain.ActiveNotebook.ActivatePrevTab; end; procedure TMainCommands.cm_MoveTabLeft(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do if PageIndex > 0 then PageIndex:= PageIndex - 1; end; procedure TMainCommands.cm_MoveTabRight(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do PageIndex:= PageIndex + 1; end; procedure TMainCommands.cm_ShowTabsList(const Params: array of string); var ARect: TRect; Param: String; Index: Integer; AValue: String; APoint: TPoint; MenuItem: TMenuItem; ANotebook: TFileViewNotebook; begin ANotebook:= frmMain.ActiveNotebook; for Param in Params do begin if GetParamValue(Param, 'side', AValue) then begin if AValue = 'left' then ANotebook:= frmMain.LeftTabs else if AValue = 'right' then ANotebook:= frmMain.RightTabs else if AValue = 'inactive' then ANotebook:= frmMain.NotActiveNotebook; end end; if (FTabsMenu = nil) then begin FTabsMenu:= TPopupMenu.Create(Self); end; FTabsMenu.Items.Clear; FTabsMenu.PopupComponent:= ANotebook; for Index:= 0 to ANotebook.PageCount - 1 do begin MenuItem:= TMenuItem.Create(FTabsMenu); MenuItem.Tag:= Index; MenuItem.Caption:= ANotebook.Page[Index].Caption; if (ANotebook.Page[Index].LockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab]) and (tb_show_asterisk_for_locked in gDirTabOptions) then begin MenuItem.Caption:= Copy(MenuItem.Caption, 2, MaxInt); end; MenuItem.OnClick:= @DoTabMenuClick; FTabsMenu.Items.Add(MenuItem); end; ARect:= ANotebook.TabRect(ANotebook.PageIndex); APoint:= Classes.Point(ARect.Left, ARect.Bottom); APoint:= ANotebook.ClientToScreen(APoint); FTabsMenu.PopUp(APoint.X, APoint.Y); end; procedure TMainCommands.cm_ActivateTabByIndex(const Params: array of string); var Param: String; Index: Integer; AValue: String; ANotebook: TFileViewNotebook; begin if Length(Params) <> 0 then begin ANotebook:= frmMain.ActiveNotebook; for Param in Params do begin if GetParamValue(Param, 'index', AValue) then begin Index:= StrToIntDef(AValue, 1); end else if GetParamValue(Param, 'side', AValue) then begin if AValue = 'left' then ANotebook:= frmMain.LeftTabs else if AValue = 'right' then ANotebook:= frmMain.RightTabs else if AValue = 'inactive' then ANotebook:= frmMain.NotActiveNotebook; end end; if Index = -1 then ANotebook.ActivateTabByIndex(Index) else ANotebook.ActivateTabByIndex(Index - 1); end; end; { TMainCommands.cm_SaveTabs } // To respect legacy, we can invoke "cm_SaveTabs" with a single parameter and it will be a "DefaultParam", which means without any equal sign, directly the filename. // With the following code, we may have more descriptive parameters like the following: // filename= : The giving parameter will be the output filename to save the tabs. If no "filename=" is specified, we will prompt user. // savedirhistory= : We indicate if we want to save dir history or not. procedure TMainCommands.cm_SaveTabs(const Params: array of string); var Config: TXmlConfig; Param, sValue: string; boolValue: boolean; bSaveDirHistory: boolean; sOutputTabsFilename: string = ''; begin // 1. We setup our default options. bSaveDirHistory := gSaveDirHistory; // 2. Let's parse the parameter to get the wanted ones. The default wanted parameter have been set in the "VAR" section // We need to respect legacy of this command where *before* it was possible to simply and directly have the wanted output filename. // Let's assume that if we have an "=" sign, it's can be a legacy usage but one with actual parameters. if (length(Params)>0) then begin sOutputTabsFilename := GetDefaultParam(Params); if pos('=',sOutputTabsFilename)<>0 then begin sOutputTabsFilename := ''; for Param in Params do begin if GetParamValue(Param, 'filename', sValue) then sOutputTabsFilename := sValue else if GetParamBoolValue(Param, 'savedirhistory', boolValue) then bSaveDirHistory := boolValue; end; end; end; // 3. If no output filename has been specified so far, let's request an output filename. if sOutputTabsFilename='' then begin dmComData.SaveDialog.DefaultExt := 'tab'; dmComData.SaveDialog.Filter := '*.tab|*.tab'; if dmComData.SaveDialog.Execute then sOutputTabsFilename := dmComData.SaveDialog.FileName; end; // 4. If we get here with "sOutputTabsFilename<>''", we know what to save and where to save it. if sOutputTabsFilename<>'' then begin try Config := TXmlConfig.Create(sOutputTabsFilename); try frmMain.SaveTabsXml(Config, 'Tabs/OpenedTabs/', frmMain.LeftTabs, bSaveDirHistory); frmMain.SaveTabsXml(Config, 'Tabs/OpenedTabs/', frmMain.RightTabs, bSaveDirHistory); Config.Save; finally Config.Free; end; except on E: Exception do msgError(E.Message); end; end; end; { TMainCommands.cm_LoadTabs } // To respect legacy, invoking "cm_LoadTabs" with no parameter will attempt to load tabs for both panels and prompt the user for a filename. // Still to respect lefacy, we can invoke "cm_LoadTabs" with a single parameter and it will be a "DefaultParam", which means without any equal sign, directly the filename. // With the following code, we may have more descriptive parameters like the following: // filename = The giving parameter will be the input filename to load the tabs from. If no "filename=" is specified, we will prompt user. // loadleftto = Indicate where to load what was saved for left panel. It could be left to be like before but also now right, active, inactive, both and none. // loadrightto= Indicate where to load what was saved for right panel. It could be right to be like before but also now left, active, inactive, both and none. // keep = This indicates if in the target notebook where tabs will be loaded if we remove first the target present or not. When keep is "false", which is the default, we flush them first. If "keep" is "true", we add the loaded tab to the existing ones. procedure TMainCommands.cm_LoadTabs(const Params: array of string); var originalFilePanel:TFilePanelSelect; sInputTabsFilename: string = ''; param, sValue: string; Config: TXmlConfig; TargetDestinationForLeft : TTabsConfigLocation = tclLeft; TargetDestinationForRight : TTabsConfigLocation = tclRight; DestinationToKeep : TTabsConfigLocation = tclNone; TabsAlreadyDestroyedFlags: TTabsFlagsAlreadyDestroyed = []; function EvaluateSideResult(sParamValue:string; DefaultValue:TTabsConfigLocation):TTabsConfigLocation; begin result:=DefaultValue; if sParamValue='left' then result := tclLeft else if sParamValue='right' then result := tclRight else if sParamValue='active' then result := tclActive else if sParamValue='inactive' then result := tclInactive else if sParamValue='both' then result := tclBoth else if sParamValue='none' then result := tclNone; end; begin // 1. Note that most variable have been set with their default value in declaration. originalFilePanel := frmMain.SelectedPanel; // 2. Let's parse the parameter to get the wanted ones // We need to respect legacy of this command where *before* it was possible to simply and directly have the wanted input filename. // Let's assume that if we have an "=" sign, it's can't be a legacy usage but one with actual parameters. if (length(Params)>0) then begin sInputTabsFilename:=GetDefaultParam(Params); if pos('=',sInputTabsFilename)<>0 then begin sInputTabsFilename:=''; for Param in Params do begin if GetParamValue(Param, 'filename', sValue) then sInputTabsFilename := sValue else if GetParamValue(Param, 'loadleftto', sValue) then TargetDestinationForLeft:=EvaluateSideResult(sValue,TargetDestinationForLeft) else if GetParamValue(Param, 'loadrightto', sValue) then TargetDestinationForRight:=EvaluateSideResult(sValue,TargetDestinationForRight) else if GetParamValue(Param, 'keep', sValue) then DestinationToKeep:=EvaluateSideResult(sValue,DestinationToKeep); end; end; end; // 3. If variable "sInputTabsFilename", we''ll request the user to provide an input filename. if sInputTabsFilename='' then begin dmComData.OpenDialog.Filter:= '*.tab|*.tab'; dmComData.OpenDialog.FileName:= GetDefaultParam(Params); if dmComData.OpenDialog.Execute then sInputTabsFilename:=dmComData.OpenDialog.FileName; end; // 4. If we get here with "sInputTabsFilename<>''", we know what to load and from what to load it! if sInputTabsFilename<>'' then begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; try Config := TXmlConfig.Create(sInputTabsFilename, True); try frmMain.LoadTheseTabsWithThisConfig(Config, 'Tabs/OpenedTabs/', tclLeft, TargetDestinationForLeft, DestinationToKeep, TabsAlreadyDestroyedFlags); frmMain.LoadTheseTabsWithThisConfig(Config, 'Tabs/OpenedTabs/', tclRight, TargetDestinationForRight, DestinationToKeep, TabsAlreadyDestroyedFlags); finally Config.Free; end; except on E: Exception do msgError(E.Message); end; end; frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_SetTabOptionNormal(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsNormal; end; procedure TMainCommands.cm_SetTabOptionPathLocked(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsPathLocked; end; procedure TMainCommands.cm_SetTabOptionPathResets(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsPathResets; end; procedure TMainCommands.cm_SetTabOptionDirsInNewTab(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsDirsInNewTab; end; //------------------------------------------------------ procedure TMainCommands.cm_View(const Params: array of string); var aFile: TFile; i, n: Integer; IsFile: Boolean; sCmd: String = ''; AMode: Integer = 0; sParams: String = ''; Param, AValue: String; sl: TStringList = nil; AllFiles: TFiles = nil; sStartPath: String = ''; ActiveFile: TFile = nil; aFileSource: IFileSource; ACursor: Boolean = False; SelectedFiles: TFiles = nil; LinksResolveNeeded: Boolean; begin with frmMain do try ActiveFile := ActiveFrame.CloneActiveFile; if (Length(Params) > 0) then begin if GetParamValue(Params, 'cursor', AValue) then GetBoolValue(AValue, ACursor); end; if not ACursor then SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles else begin SelectedFiles:= TFiles.Create(ActiveFrame.CurrentPath); if ActiveFile.IsNameValid then SelectedFiles.Add(ActiveFile.Clone); end; if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; aFile:= SelectedFiles[0]; IsFile:= not (aFile.IsDirectory or aFile.IsLinkToDirectory); if (SelectedFiles.Count = 1) and (IsFile) and (Length(Params) > 0) then begin for Param in Params do begin if GetParamValue(Param, 'mode', AValue) then begin case LowerCase(AValue) of 'text': AMode:= 1; 'bin': AMode:= 2; 'hex': AMode:= 3; 'dec': AMode:= 6; end; Break; end; end; if (AMode > 0) then begin with TViewerModeData.Create(AMode) do begin if PrepareData(ActiveFrame.FileSource, SelectedFiles, @OnCopyOutStateChanged) = pdrInCallback then begin Exit; end; Free; end; sl := TStringList.Create; sl.Add(aFile.FullPath); ShowViewer(sl, AMode); Exit; end; end; // Default to using the file source directly. aFileSource := ActiveFrame.FileSource; if not (fspDirectAccess in aFileSource.Properties) and not (fspLinksToLocalFiles in aFileSource.Properties) then begin for I := SelectedFiles.Count - 1 downto 0 do begin with SelectedFiles[I] do begin if IsDirectory or IsLinkToDirectory then SelectedFiles.Delete(I); end; end; if (SelectedFiles.Count = 0) then begin msgWarning(rsMsgNoFilesSelected); Exit; end; end; if PrepareData(aFileSource, SelectedFiles, @OnCopyOutStateChanged) <> pdrSynchronous then Exit; try // Try to find 'view' command in internal associations if gExts.GetExtActionCmd(aFile, 'view', sCmd, sParams, sStartPath) then begin ProcessExtCommandFork(sCmd, sParams, ActiveFrame.CurrentPath); Exit; end; sl := TStringList.Create; for I := 0 to SelectedFiles.Count - 1 do begin sl.Add(SelectedFiles[I].FullPath); end; // for // If only one file was selected then add all files in panel to the list. // Works only for directly accessible files and only when using internal viewer. if (sl.Count = 1) and (IsFile) and (not ACursor) and (not gExternalTools[etViewer].Enabled) and ([fspDirectAccess, fspLinksToLocalFiles] * ActiveFrame.FileSource.Properties <> []) then begin AllFiles := ActiveFrame.CloneFiles; LinksResolveNeeded := fspLinksToLocalFiles in ActiveFrame.FileSource.Properties; n := -1; for i := 0 to AllFiles.Count - 1 do begin aFile := AllFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin if aFile.Name = ActiveFile.Name then n := i; if LinksResolveNeeded then ActiveFrame.FileSource.GetLocalName(aFile); if (n <> -1) and (i <> n) then sl.Add(aFile.FullPath); end; end; for i:=0 to n-1 do begin aFile := AllFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then sl.Add(aFile.FullPath); end; end; // if sl has files then view it if sl.Count > 0 then ShowViewerByGlobList(sl, aFileSource); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(sl); FreeAndNil(AllFiles); FreeAndNil(SelectedFiles); FreeAndNil(ActiveFile); end; end; procedure TMainCommands.cm_QuickView(const Params: array of string); var Param: String; begin with frmMain do begin Param := GetDefaultParam(Params); if Assigned(QuickViewPanel) then begin QuickViewClose; end else if (param <> 'Close') then begin QuickViewShow(NotActiveNotebook.ActivePage, ActiveFrame); end; end; end; procedure TMainCommands.cm_BriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(ActiveNotebook.ActivePage, ActiveFrame); ActiveNotebook.ActivePage.FileView:= aFileView; ActiveFrame.SetFocus; end; end; procedure TMainCommands.cm_LeftBriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(LeftTabs.ActivePage, FrameLeft); LeftTabs.ActivePage.FileView:= aFileView; end; end; procedure TMainCommands.cm_RightBriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(RightTabs.ActivePage, FrameRight); RightTabs.ActivePage.FileView:= aFileView; end; end; procedure TMainCommands.cm_ColumnsView(const Params: array of string); var AParam: String; aFileView: TFileView; begin with frmMain do begin GetParamValue(Params, 'columnset', AParam); if (ActiveFrame is TColumnsFileView) then TColumnsFileView(ActiveFrame).SetColumnSet(AParam) else begin aFileView:= TColumnsFileView.Create(ActiveNotebook.ActivePage, ActiveFrame, AParam); ActiveNotebook.ActivePage.FileView:= aFileView; ActiveFrame.SetFocus; end; end; end; procedure TMainCommands.cm_LeftColumnsView(const Params: array of string); var AParam: String; aFileView: TFileView; begin with frmMain do begin GetParamValue(Params, 'columnset', AParam); if (FrameLeft is TColumnsFileView) then TColumnsFileView(FrameLeft).SetColumnSet(AParam) else begin aFileView:= TColumnsFileView.Create(LeftTabs.ActivePage, FrameLeft, AParam); LeftTabs.ActivePage.FileView:= aFileView; end; end; end; procedure TMainCommands.cm_RightColumnsView(const Params: array of string); var AParam: String; aFileView: TFileView; begin with frmMain do begin GetParamValue(Params, 'columnset', AParam); if (FrameRight is TColumnsFileView) then TColumnsFileView(FrameRight).SetColumnSet(AParam) else begin aFileView:= TColumnsFileView.Create(RightTabs.ActivePage, FrameRight, AParam); RightTabs.ActivePage.FileView:= aFileView; end; end; end; procedure ToggleOrNotToOrFromThumbnailsView(WorkingFileView: TFileView; WorkingNotebook: TFileViewNotebook); var aFileView: TFileView; begin if WorkingFileView.ClassType <> TThumbFileView then begin // Save current file view type WorkingNotebook.ActivePage.BackupViewClass := TFileViewClass(WorkingFileView.ClassType); // Save current columns set name if (WorkingFileView is TColumnsFileView) then begin WorkingNotebook.ActivePage.BackupColumnSet:= TColumnsFileView(WorkingFileView).ActiveColm; end; // Create thumbnails view aFileView:= TThumbFileView.Create(WorkingNotebook.ActivePage, WorkingFileView); end else begin // Restore previous file view type if WorkingNotebook.ActivePage.BackupViewClass <> TColumnsFileView then aFileView:= WorkingNotebook.ActivePage.BackupViewClass.Create(WorkingNotebook.ActivePage, WorkingFileView) else aFileView:= TColumnsFileView.Create(WorkingNotebook.ActivePage, WorkingFileView, WorkingNotebook.ActivePage.BackupColumnSet); end; WorkingNotebook.ActivePage.FileView:= aFileView; end; procedure TMainCommands.cm_ThumbnailsView(const Params: array of string); begin case frmMain.SelectedPanel of fpLeft: ToggleOrNotToOrFromThumbnailsView(frmMain.FrameLeft, frmMain.LeftTabs); fpRight: ToggleOrNotToOrFromThumbnailsView(frmMain.FrameRight, frmMain.RightTabs); end; frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_LeftThumbView(const Params: array of string); begin ToggleOrNotToOrFromThumbnailsView(frmMain.FrameLeft, frmMain.LeftTabs); frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_RightThumbView(const Params: array of string); begin ToggleOrNotToOrFromThumbnailsView(frmMain.FrameRight, frmMain.RightTabs); frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_TreeView(const Params: array of string); begin gSeparateTree := not gSeparateTree; with frmMain do begin DisableAutoSizing; try UpdateShellTreeView; UpdateTreeViewPath; MainSplitterPos:= MainSplitterPos; finally EnableAutoSizing; end; end; end; procedure TMainCommands.cm_Edit(const Params: array of string); var I: Integer; aFile: TFile; sCmd: String = ''; sParams: String = ''; Param, AValue: String; sStartPath: String = ''; ACursor: Boolean = False; SelectedFiles: TFiles = nil; begin with frmMain do try if (Length(Params) > 0) then begin if GetParamValue(Params, 'cursor', AValue) then GetBoolValue(AValue, ACursor); end; if not ACursor then SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles else begin SelectedFiles:= TFiles.Create(ActiveFrame.CurrentPath); aFile:= ActiveFrame.CloneActiveFile; if aFile.IsNameValid then SelectedFiles.Add(aFile) else begin aFile.Free; end; end; for I := SelectedFiles.Count - 1 downto 0 do begin aFile := SelectedFiles[I]; if aFile.IsDirectory or aFile.IsLinkToDirectory then SelectedFiles.Delete(I); end; if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; if PrepareData(ActiveFrame.FileSource, SelectedFiles, @OnEditCopyOutStateChanged) <> pdrSynchronous then Exit; try // For now we only process one file. aFile := SelectedFiles[0]; //now test if exists "EDIT" command in "extassoc.xml" :) if gExts.GetExtActionCmd(aFile, 'edit', sCmd, sParams, sStartPath) then ProcessExtCommandFork(sCmd, sParams, aFile.Path) else ShowEditorByGlob(aFile.FullPath); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(SelectedFiles); end; end; procedure TMainCommands.cm_EditPath(const Params: array of string); begin if gCurDir then frmMain.ActiveFrame.ExecuteCommand('cm_EditPath', Params); end; // Parameters: // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // queueid= - by default put to this queue // <queue_identifier> procedure TMainCommands.cm_Copy(const Params: array of string); var bConfirmation, HasQueueId: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier; begin bConfirmation := focCopy in gFileOperationsConfirmations; ReadCopyRenameParams(Params, bConfirmation, HasQueueId, QueueIdentifier); if HasQueueId then frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation, QueueIdentifier) else frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation); end; procedure TMainCommands.cm_CopyNoAsk(const Params: array of string); begin frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, False); end; // Parameters: // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // queueid= - by default put to this queue // <queue_identifier> procedure TMainCommands.cm_Rename(const Params: array of string); var bConfirmation, HasQueueId: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier; begin bConfirmation := focMove in gFileOperationsConfirmations; ReadCopyRenameParams(Params, bConfirmation, HasQueueId, QueueIdentifier); if HasQueueId then frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation, QueueIdentifier) else frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation); end; procedure TMainCommands.cm_RenameNoAsk(const Params: array of string); begin frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, False); end; procedure TMainCommands.cm_MakeDir(const Params: array of string); var sPath: String; Files: TFiles; Directory: String; ActiveFile: TFile = nil; bMakeViaCopy: Boolean = False; Operation: TFileSourceOperation = nil; UI: TFileSourceOperationMessageBoxesUI = nil; begin with frmMain do try if not (fsoCreateDirectory in ActiveFrame.FileSource.GetOperationsTypes) then begin if (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes) then bMakeViaCopy := True else begin msgWarning(rsMsgErrNotSupported); Exit; end; end; ActiveFile := ActiveFrame.CloneActiveFile; if Assigned(ActiveFile) and ActiveFile.IsNameValid then begin if ActiveFile.IsDirectory or ActiveFile.IsLinkToDirectory then sPath := ActiveFile.Name else begin sPath := ActiveFile.NameNoExt; end; end else sPath := EmptyStr; if not ShowMkDir(frmMain, sPath) then Exit; // show makedir dialog if (sPath = EmptyStr) then Exit; if bMakeViaCopy then begin Directory := GetTempName(GetTempFolderDeletableAtTheEnd, EmptyStr); if not mbForceDirectory(IncludeTrailingBackslash(Directory) + sPath) then begin MessageDlg(mbSysErrorMessage(GetLastOSError), mtError, [mbOK], 0); Exit; end; Files := TFiles.Create(Directory); sPath := IncludeTrailingBackslash(Directory) + ExtractWord(1, sPath, [PathDelim]); Files.Add(TFileSystemFileSource.CreateFileFromFile(sPath)); Operation := ActiveFrame.FileSource.CreateCopyInOperation(TFileSystemFileSource.GetFileSource, Files, ActiveFrame.CurrentPath); if Assigned(Operation) then begin OperationsManager.AddOperation(Operation); Operation := nil; end; Exit; end; Operation := ActiveFrame.FileSource.CreateCreateDirectoryOperation(ActiveFrame.CurrentPath, sPath); if Assigned(Operation) then begin // Call directly - not through operations manager. UI := TFileSourceOperationMessageBoxesUI.Create; Operation.AddUserInterface(UI); Operation.Execute; sPath := ExtractFileName(ExcludeTrailingPathDelimiter(sPath)); ActiveFrame.SetActiveFile(sPath); end; finally FreeAndNil(Operation); FreeAndNil(UI); FreeAndNil(ActiveFile); end; end; // Parameters: // trashcan= // 1/true - delete to trash can // 0/false - delete directly // setting - if gUseTrash then delete to trash, otherwise delete directly // reversesetting - if gUseTrash then delete directly, otherwise delete to trash // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // // Deprecated: // "recycle" - delete to trash can // "norecycle" - delete directly // "recyclesetting" - if gUseTrash then delete to trash, otherwise delete directly // "recyclesettingrev" - if gUseTrash then delete directly, otherwise delete to trash procedure TMainCommands.cm_Delete(const Params: array of string); var I: Integer; Message: String; theFilesToDelete: TFiles; // 12.05.2009 - if delete to trash, then show another messages MsgDelSel, MsgDelFlDr : string; Operation: TFileSourceOperation; bRecycle: Boolean; bConfirmation, HasConfirmationParam: Boolean; Param, ParamTrashCan: String; BoolValue: Boolean; QueueId: TOperationsManagerQueueIdentifier = FreeOperationsQueueId; begin with frmMain.ActiveFrame do begin if not (fsoDelete in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; bRecycle := gUseTrash; HasConfirmationParam := False; for Param in Params do begin if Param = 'recycle' then bRecycle := True else if Param = 'norecycle' then bRecycle := False else if Param = 'recyclesetting' then bRecycle := gUseTrash else if Param = 'recyclesettingrev' then bRecycle := not gUseTrash else if GetParamValue(Param, 'trashcan', ParamTrashCan) then begin if ParamTrashCan = 'setting' then bRecycle := gUseTrash else if ParamTrashCan = 'reversesetting' then bRecycle := not gUseTrash else if GetBoolValue(ParamTrashCan, BoolValue) then bRecycle := BoolValue; end else if GetParamBoolValue(Param, 'confirmation', BoolValue) then begin HasConfirmationParam := True; bConfirmation := BoolValue; end; end; // Save parameter for later use BoolValue := bRecycle; if bRecycle then bRecycle := FileSource.IsClass(TFileSystemFileSource) and mbCheckTrash(CurrentPath); if not HasConfirmationParam then begin if not bRecycle then bConfirmation := focDelete in gFileOperationsConfirmations else bConfirmation := focDeleteToTrash in gFileOperationsConfirmations; end; // Showing delete dialog: to trash or to /dev/null :) If bRecycle then begin MsgDelSel := rsMsgDelSelT; MsgDelFlDr := rsMsgDelFlDrT; end else begin MsgDelSel := rsMsgDelSel; MsgDelFlDr := rsMsgDelFlDr; end; // Special case for fspLinksToLocalFiles if (fspLinksToLocalFiles in FileSource.Properties) then bRecycle := BoolValue; // ------------------------------------------------------ theFilesToDelete := CloneSelectedOrActiveFiles; // free at Thread end by thread if Assigned(theFilesToDelete) then try if (theFilesToDelete.Count = 0) then Exit; if (theFilesToDelete.Count = 1) then Message:= Format(MsgDelSel, [theFilesToDelete[0].Name]) else begin Message:= Format(MsgDelFlDr, [theFilesToDelete.Count]) + LineEnding; for I:= 0 to Min(4, theFilesToDelete.Count - 1) do begin Message+= LineEnding + theFilesToDelete[I].Name; end; if theFilesToDelete.Count > 5 then Message+= LineEnding + '...'; end; if (bConfirmation = False) or (ShowDeleteDialog(Message, FileSource, QueueId)) then begin if FileSource.IsClass(TFileSystemFileSource) then begin if frmMain.NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin for I:= 0 to theFilesToDelete.Count - 1 do begin if (theFilesToDelete[I].IsDirectory or theFilesToDelete[I].IsLinkToDirectory) and IsInPath(theFilesToDelete[I].FullPath, frmMain.NotActiveFrame.CurrentPath, True, True) then begin frmMain.NotActiveFrame.CurrentPath:= theFilesToDelete.Path; Break; end; end; end else if frmMain.NotActiveFrame.FileSource.IsClass(TArchiveFileSource) then begin Message:= (frmMain.NotActiveFrame.FileSource as TArchiveFileSource).ArchiveFileName; for I:= 0 to theFilesToDelete.Count - 1 do begin if IsInPath(theFilesToDelete[I].FullPath, Message, True, True) then begin SetFileSystemPath(frmMain.NotActiveFrame, theFilesToDelete.Path); Break; end; end; end; end; Operation := FileSource.CreateDeleteOperation(theFilesToDelete); if Assigned(Operation) then begin // Special case for filesystem - 'recycle' parameter. if Operation is TFileSystemDeleteOperation then with Operation as TFileSystemDeleteOperation do begin // 30.04.2009 - передаем параметр корзины в поток. Recycle := bRecycle; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; end; finally FreeAndNil(theFilesToDelete); end; end; end; procedure TMainCommands.cm_CheckSumCalc(const Params: array of string); var I: Integer; sFileName: String; SelectedFiles: TFiles; HashAlgorithm: THashAlgorithm; TextLineBreakStyle: TTextLineBreakStyle; QueueId: TOperationsManagerQueueIdentifier; Operation: TFileSourceCalcChecksumOperation; bSeparateFile, bOpenFileAfterJobCompleted: Boolean; begin // This will work only for filesystem. // For other file sources use temp file system when it's done. with frmMain do begin if not (fsoCalcChecksum in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgNotImplemented); Exit; // Create temp file source. // CopyOut ActiveFrame.FileSource to TempFileSource. // Do command on TempFileSource and later delete it (or leave cached on disk?) end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; bSeparateFile:= False; bOpenFileAfterJobCompleted:= False; for I := 0 to SelectedFiles.Count - 1 do // find files in selection if not SelectedFiles[I].IsDirectory then begin bSeparateFile:= True; Break; end; if SelectedFiles.Count > 1 then sFileName:= ActiveFrame.CurrentPath + MakeFileName(ActiveFrame.CurrentPath, 'checksum') else sFileName:= ActiveFrame.CurrentPath + SelectedFiles[0].Name; if ShowCalcCheckSum(sFileName, bSeparateFile, HashAlgorithm, bOpenFileAfterJobCompleted, TextLineBreakStyle, QueueId) then begin Operation := ActiveFrame.FileSource.CreateCalcChecksumOperation( SelectedFiles, ActiveFrame.CurrentPath, sFileName) as TFileSourceCalcChecksumOperation; if Assigned(Operation) then begin Operation.Mode := checksum_calc; Operation.OneFile := not bSeparateFile; Operation.TextLineBreakStyle:= TextLineBreakStyle; Operation.OpenFileAfterOperationCompleted := bOpenFileAfterJobCompleted; Operation.Algorithm := HashAlgorithm; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_CheckSumVerify(const Params: array of string); var I: Integer; Hash: String; Param: String; BoolValue: Boolean; SelectedFiles: TFiles; Algorithm: THashAlgorithm; Operation: TFileSourceCalcChecksumOperation; bConfirmation, HasConfirmationParam: Boolean; QueueId: TOperationsManagerQueueIdentifier = FreeOperationsQueueId; begin // This will work only for filesystem. // For other file sources use temp file system when it's done. with frmMain do begin if not (fsoCalcChecksum in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgNotImplemented); Exit; // Create temp file source. // CopyOut ActiveFrame.FileSource to TempFileSource. // Do command on TempFileSource and later delete it (or leave cached on disk?) end; HasConfirmationParam := False; for Param in Params do begin if GetParamBoolValue(Param, 'confirmation', BoolValue) then begin HasConfirmationParam := True; bConfirmation := BoolValue; end; end; if not HasConfirmationParam then begin bConfirmation := focVerifyChecksum in gFileOperationsConfirmations; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; for I := 0 to SelectedFiles.Count - 1 do // find files in selection if not FileExtIsHash(SelectedFiles[I].Extension) then begin if (SelectedFiles.Count > 1) or (SelectedFiles[I].IsDirectory) or (SelectedFiles[I].IsLinkToDirectory) then begin msgError(rsMsgSelectOnlyCheckSumFiles); Exit; end else begin if not ShowCalcVerifyCheckSum(Hash, Algorithm, QueueId) then Exit; bConfirmation:= False; end; end; if (bConfirmation = False) or (ShowDeleteDialog(rsMsgVerifyChecksum, ActiveFrame.FileSource, QueueId)) then begin Operation := ActiveFrame.FileSource.CreateCalcChecksumOperation( SelectedFiles, Hash, '') as TFileSourceCalcChecksumOperation; if Assigned(Operation) then begin Operation.Algorithm := Algorithm; Operation.AddStateChangedListener([fsosStopped], @OnCalcChecksumStateChanged); Operation.Mode := checksum_verify; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_FocusCmdLine(const Params: array of string); begin frmMain.ShowCommandLine(True); end; { TMainCommands.cm_FileAssoc } procedure TMainCommands.cm_FileAssoc(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsFileAssoc); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsFileAssoc); if Editor.CanFocus then Editor.SetFocus; TfrmOptionsFileAssoc(Editor).MakeUsInPositionToWorkWithActiveFile; end; procedure TMainCommands.cm_HelpIndex(const Params: array of string); begin ShowHelpOrErrorForKeyword('', '/index.html'); end; procedure TMainCommands.cm_Keyboard(const Params: array of string); begin ShowHelpOrErrorForKeyword('', '/shortcuts.html'); end; procedure TMainCommands.cm_VisitHomePage(const Params: array of string); var ErrMsg: String = ''; begin dmHelpMgr.HTMLHelpDatabase.ShowURL('https://doublecmd.sourceforge.io','Double Commander Web Site', ErrMsg); end; procedure TMainCommands.cm_About(const Params: array of string); begin ShowAboutBox(frmMain); end; procedure TMainCommands.cm_ShowSysFiles(const Params: array of string); begin with frmMain do begin uGlobs.gShowSystemFiles:= not uGlobs.gShowSystemFiles; actShowSysFiles.Checked:= uGlobs.gShowSystemFiles; UpdateTreeView; // Update all tabs ForEachView(@DoUpdateFileView, nil); end; end; procedure TMainCommands.cm_SwitchIgnoreList(const Params: array of string); {$OPTIMIZATION OFF} var WantedIgnoreList, BoolValue:boolean; begin WantedIgnoreList:=gIgnoreListFileEnabled; with frmMain do begin if Length(Params)>0 then begin if GetParamBoolValue(Params[0], 'ignorelist', BoolValue) then WantedIgnoreList:=BoolValue else WantedIgnoreList := not WantedIgnoreList; end else begin WantedIgnoreList := not WantedIgnoreList; end; if WantedIgnoreList<>gIgnoreListFileEnabled then begin gIgnoreListFileEnabled:=WantedIgnoreList; actSwitchIgnoreList.Checked:= gIgnoreListFileEnabled; //repaint both panels FrameLeft.Reload; FrameRight.Reload; end; end; end; {$OPTIMIZATION DEFAULT} // Parameter is name of TOptionsEditorClass. procedure TMainCommands.cm_Options(const Params: array of string); begin ShowOptions(GetDefaultParam(Params)); end; procedure TMainCommands.cm_CompareContents(const Params: array of string); var FilesNumber: Integer = 0; DirsNumber: Integer = 0; procedure CountFiles(const Files: TFiles); var I: Integer; begin if Assigned(Files) then for I := 0 to Files.Count - 1 do if Files[I].IsDirectory then Inc(DirsNumber) else Inc(FilesNumber); end; var I : Integer; Param: String; ActiveSelectedFiles: TFiles = nil; NotActiveSelectedFiles: TFiles = nil; FirstFileSource: IFileSource = nil; FirstFileSourceFiles: TFiles = nil; SecondFileSource: IFileSource = nil; SecondFileSourceFiles: TFiles = nil; begin with frmMain do begin Param := GetDefaultParam(Params); if Param = 'dir' then begin if gExternalTools[etDiffer].Enabled then ShowDifferByGlob(FrameLeft.CurrentPath, FrameRight.CurrentPath) else MsgWarning(rsMsgNotImplemented); Exit; end; try ActiveSelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; if ActiveSelectedFiles.Count = 1 then begin // If no files selected in the opposite panel and panels have // different path then try to get file with the same name. if (not NotActiveFrame.HasSelectedFiles) and (not mbCompareFileNames(NotActiveFrame.CurrentPath, ActiveFrame.CurrentPath)) then begin for I := 0 to NotActiveFrame.DisplayFiles.Count - 1 do if mbCompareFileNames(NotActiveFrame.DisplayFiles[I].FSFile.Name, ActiveSelectedFiles[0].Name) then begin NotActiveSelectedFiles := TFiles.Create(NotActiveFrame.CurrentPath); NotActiveSelectedFiles.Add(NotActiveFrame.DisplayFiles[I].FSFile.Clone); Break; end; end; if not Assigned(NotActiveSelectedFiles) then NotActiveSelectedFiles := NotActiveFrame.CloneSelectedOrActiveFiles; if NotActiveSelectedFiles.Count <> 1 then begin // Only one file selected in active panel. MsgWarning(rsMsgInvalidSelection); Exit; end; { compare single selected files in both panels } case gResultingFramePositionAfterCompare of rfpacActiveOnLeft: begin FirstFileSource := ActiveFrame.FileSource; FirstFileSourceFiles := ActiveSelectedFiles; SecondFileSource := NotActiveFrame.FileSource; SecondFileSourceFiles := NotActiveSelectedFiles; end; rfpacLeftOnLeft: begin if ActiveFrame = FrameLeft then begin FirstFileSource := ActiveFrame.FileSource; FirstFileSourceFiles := ActiveSelectedFiles; SecondFileSource := NotActiveFrame.FileSource; SecondFileSourceFiles := NotActiveSelectedFiles; end else begin FirstFileSource := NotActiveFrame.FileSource; FirstFileSourceFiles := NotActiveSelectedFiles; SecondFileSource := ActiveFrame.FileSource; SecondFileSourceFiles := ActiveSelectedFiles; end; end; end; end else if ActiveSelectedFiles.Count > 1 then begin { compare all selected files in active frame } FirstFileSource := ActiveFrame.FileSource; FirstFileSourceFiles := ActiveSelectedFiles; end; CountFiles(FirstFileSourceFiles); CountFiles(SecondFileSourceFiles); if ((FilesNumber > 0) and (DirsNumber > 0)) or ((FilesNumber = 1) or (DirsNumber = 1)) then // Either files or directories must be selected and more than one. MsgWarning(rsMsgInvalidSelection) else if (FilesNumber = 0) and (DirsNumber = 0) then MsgWarning(rsMsgNoFilesSelected) else if (FilesNumber > 2) and not gExternalTools[etDiffer].Enabled then MsgWarning(rsMsgTooManyFilesSelected) else if (DirsNumber > 0) and not gExternalTools[etDiffer].Enabled then MsgWarning(rsMsgNotImplemented) else begin if not Assigned(SecondFileSource) then PrepareToolData(FirstFileSource, FirstFileSourceFiles, @ShowDifferByGlobList) else PrepareToolData(FirstFileSource, FirstFileSourceFiles, SecondFileSource, SecondFileSourceFiles, @ShowDifferByGlobList); end; finally ActiveSelectedFiles.Free; NotActiveSelectedFiles.Free; end; end; end; { TMainCommands.cm_ShowMainMenu } procedure TMainCommands.cm_ShowMainMenu(const Params: array of string); {$OPTIMIZATION OFF} var WantedMainMenu, BoolValue: boolean; bWantedTreeViewMenu: boolean = False; Param: string; sMaybeMenuItem: TMenuItem; iWantedPosX: integer = 0; iWantedPosY: integer = 0; iWantedWidth: integer = 800; iWantedHeight: integer = 600; begin WantedMainMenu:=gMainMenu; if Length(Params)>0 then begin for Param in Params do if GetParamBoolValue(Param, 'menu', BoolValue) then WantedMainMenu := BoolValue else if GetParamBoolValue(Param, 'treeview', BoolValue) then bWantedTreeViewMenu := BoolValue else WantedMainMenu := not WantedMainMenu; end else begin WantedMainMenu := not WantedMainMenu; end; if not bWantedTreeViewMenu then begin if WantedMainMenu<>gMainMenu then begin gMainMenu:=WantedMainMenu; DoShowMainMenu(gMainMenu); end; end else begin DoComputeSizeAndPosForWindowInMiddle(iWantedPosX, iWantedPosY, iWantedWidth, iWantedHeight); sMaybeMenuItem := GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(frmMain.mnuMain, tvmcMainMenu, iWantedPosX, iWantedPosY, iWantedWidth, iWantedHeight); if sMaybeMenuItem <> nil then begin if sMaybeMenuItem.Action <> nil then begin if sMaybeMenuItem.Action.OnExecute<>nil then sMaybeMenuItem.Action.OnExecute(sMaybeMenuItem.Action) end else if sMaybeMenuItem.OnClick<>nil then sMaybeMenuItem.OnClick(sMaybeMenuItem); end; end; end; {$OPTIMIZATION DEFAULT} procedure TMainCommands.cm_Refresh(const Params: array of string); begin with frmMain do begin ActiveFrame.FileSource.Reload(ActiveFrame.CurrentPath); ActiveFrame.Reload(True); if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin UpdateDiskCount; UpdateSelectedDrives; end; end; end; //------------------------------------------------------ { TMainCommands.DoActualMarkUnMark } procedure TMainCommands.DoActualMarkUnMark(const Params: array of string; bSelect: boolean); var iParameter: integer; sWantedMask, sParamValue: string; sAttribute: string = ''; bWantedCaseSensitive, bWantedIgnoreAccents, bWantedWindowsInterpretation: boolean; pbWantedCaseSensitive, pbWantedIgnoreAccents, pbWantedWindowsInterpretation: PBoolean; psAttribute: pString = nil; MarkSearchTemplateRec: TSearchTemplateRec; MarkFileChecks: TFindFileChecks; begin if frmMain.ActiveFrame is TColumnsFileView then begin if TColumnsFileView(frmMain.ActiveFrame).isSlave then begin ShowSelectDuplicates(frmMain, frmMain.ActiveFrame); Exit; end; end; sWantedMask := ''; pbWantedCaseSensitive := nil; pbWantedIgnoreAccents := nil; pbWantedWindowsInterpretation := nil; for iParameter:=0 to pred(Length(Params)) do begin if GetParamValue(Params[iParameter], 'mask', sParamValue) then sWantedMask := sParamValue else if GetParamBoolValue(Params[iParameter], 'casesensitive', bWantedCaseSensitive) then pbWantedCaseSensitive := @bWantedCaseSensitive else if GetParamBoolValue(Params[iParameter], 'ignoreaccents', bWantedIgnoreAccents) then pbWantedIgnoreAccents := @bWantedIgnoreAccents else if GetParamBoolValue(Params[iParameter], 'windowsinterpretation', bWantedWindowsInterpretation) then pbWantedWindowsInterpretation := @bWantedWindowsInterpretation else if GetParamValue(Params[iParameter], 'attr', sAttribute) then psAttribute := @sAttribute; end; // When mask is specified, we don't prompt the user if sWantedMask<>'' then begin if psAttribute <> nil then MarkSearchTemplateRec.AttributesPattern := psAttribute^ else MarkSearchTemplateRec.AttributesPattern := gMarkDefaultWantedAttribute; AttrsPatternOptionsToChecks(MarkSearchTemplateRec, MarkFileChecks); frmMain.ActiveFrame.MarkGroup(sWantedMask, bSelect, pbWantedCaseSensitive, pbWantedIgnoreAccents, pbWantedWindowsInterpretation, @MarkFileChecks) end else begin frmMain.ActiveFrame.MarkGroup(bSelect, pbWantedCaseSensitive, pbWantedIgnoreAccents, pbWantedWindowsInterpretation, psAttribute) end; end; { TMainCommands.DoActualMarkApplyOnAll } procedure TMainCommands.DoActualMarkApplyOnAll(const maoaDispatcher: TMarkApplyOnAllDispatcher; const Params: array of string); var iParameter: integer; sAttribute, sParam: string; MarkSearchTemplateRec: TSearchTemplateRec; MarkFileChecks: TFindFileChecks; begin sAttribute := gMarkDefaultWantedAttribute; for iParameter:=0 to pred(Length(Params)) do if GetParamValue(Params[iParameter], 'attr', sParam) then sAttribute := sParam; MarkSearchTemplateRec.AttributesPattern := sAttribute; AttrsPatternOptionsToChecks(MarkSearchTemplateRec, MarkFileChecks); frmMain.ActiveFrame.MarkApplyOnAllFiles(maoaDispatcher, MarkFileChecks); end; { TMainCommands.cm_MarkMarkAll } procedure TMainCommands.cm_MarkMarkAll(const Params: array of string); begin DoActualMarkApplyOnAll(tmaoa_Mark, Params); end; { TMainCommands.cm_MarkUnmarkAll } procedure TMainCommands.cm_MarkUnmarkAll(const Params: array of string); begin DoActualMarkApplyOnAll(tmaoa_UnMark, Params); end; { TMainCommands.cm_MarkInvert } procedure TMainCommands.cm_MarkInvert(const Params: array of string); begin DoActualMarkApplyOnAll(tmaoa_InvertMark, Params); end; { TMainCommands.cm_MarkPlus } procedure TMainCommands.cm_MarkPlus(const Params: array of string); begin DoActualMarkUnMark(Params, True); end; { TMainCommands.cm_MarkMinus } procedure TMainCommands.cm_MarkMinus(const Params: array of string); begin DoActualMarkUnMark(Params, False); end; procedure TMainCommands.cm_MarkCurrentName(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentName(True); end; procedure TMainCommands.cm_UnmarkCurrentName(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentName(False); end; procedure TMainCommands.cm_MarkCurrentNameExt(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentNameExt(True); end; procedure TMainCommands.cm_UnmarkCurrentNameExt(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentNameExt(False); end; procedure TMainCommands.cm_MarkCurrentExtension(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentExtension(True); end; procedure TMainCommands.cm_UnmarkCurrentExtension(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentExtension(False); end; procedure TMainCommands.cm_MarkCurrentPath(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentPath(True); end; procedure TMainCommands.cm_UnmarkCurrentPath(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentPath(False); end; procedure TMainCommands.cm_SaveSelection(const Params: array of string); begin frmMain.ActiveFrame.SaveSelection; end; procedure TMainCommands.cm_RestoreSelection(const Params: array of string); begin frmMain.ActiveFrame.RestoreSelection; end; procedure TMainCommands.cm_SaveSelectionToFile(const Params: array of string); begin frmMain.ActiveFrame.SaveSelectionToFile(GetDefaultParam(Params)); end; procedure TMainCommands.cm_LoadSelectionFromFile(const Params: array of string); begin frmMain.ActiveFrame.LoadSelectionFromFile(GetDefaultParam(Params)); end; procedure TMainCommands.cm_LoadSelectionFromClip(const Params: array of string); begin frmMain.ActiveFrame.LoadSelectionFromClipboard; end; { TMainCommands.DoParseParametersForPossibleTreeViewMenu } procedure TMainCommands.DoParseParametersForPossibleTreeViewMenu(const Params: array of string; gDefaultConfigWithCommand, gDefaultConfigWithDoubleClick:boolean; var bUseTreeViewMenu:boolean; var bUsePanel:boolean; var p: TPoint); var Param, sValue: string; bSpecifiedPopup: boolean = false; bSpecifiedTreeView: boolean = false; bSpecifiedPanel: boolean = false; bSpecifiedMouse: boolean = false; begin for Param in Params do begin if GetParamValue(Param, 'menutype', sValue) then begin if (sValue = 'popup') OR (sValue = 'combobox') then bSpecifiedPopup := True else if sValue = 'treeview' then bSpecifiedTreeView := True; end else if GetParamValue(Param, 'position', sValue) then begin if sValue = 'panel' then bSpecifiedPanel:=true else if sValue = 'cursor' then bSpecifiedMouse:=true; end; end; if (not bSpecifiedPopup) AND (bSpecifiedTreeView OR (not bSpecifiedMouse AND gDefaultConfigWithCommand) OR (bSpecifiedMouse AND gDefaultConfigWithDoubleClick)) then bUseTreeViewMenu:=True; if bSpecifiedPanel OR (not bSpecifiedMouse AND bUsePanel) then begin p := frmMain.ActiveFrame.ClientToScreen(Classes.Point(0, 0)); bUsePanel := True; end else begin p := Mouse.CursorPos; bUsePanel := False; end; end; { TMainCommands.cm_DirHotList } // Command to SHOW the Directory Hotlist popup menu // The directory popup hotlist is run-time continously regenerated each time command is invoken. // If any param is provided, it is assume the popup menu as to be shown where the mouse cursor is which is friendly with user since it minimize mouse travel. // procedure TMainCommands.cm_DirHotList(const Params: array of string); var bUseTreeViewMenu: boolean = false; bUsePanel: boolean = true; p: TPoint = (x:0; y:0); iWantedWidth: integer = 0; iWantedHeight: integer = 0; sMaybeMenuItem: TMenuItem = nil; begin // 1. Let's parse our parameters. DoParseParametersForPossibleTreeViewMenu(Params, gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand, gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick, bUseTreeViewMenu, bUsePanel, p); // 2. No matter what, we need to fill in the popup menu structure. gDirectoryHotlist.PopulateMenuWithHotDir(frmMain.pmHotList,@frmMain.HotDirSelected,@frmMain.miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); // TODO: i thing in future this must call on create or change Application.ProcessMessages; //TODO: Same thing as with "cm_DirHotList", in Windows, Not sure why, but on all system I tried, this eliminate a "beep" when the popup is shown. // 3. Show the appropriate menu. if bUseTreeViewMenu then begin if not bUsePanel then iWantedHeight := 0 else begin iWantedWidth := frmMain.ActiveFrame.Width; iWantedHeight := frmMain.ActiveFrame.Height; end; sMaybeMenuItem := GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(frmMain.pmHotList, tvmcHotDirectory, p.X, p.Y, iWantedWidth, iWantedHeight); if sMaybeMenuItem <> nil then sMaybeMenuItem.OnClick(sMaybeMenuItem); end else begin frmMain.pmHotList.Popup(p.X,p.Y); end; end; { TMainCommands.cm_ConfigDirHotList } // Mainly present for backward compatibility since "cm_ConfigDirHotList" existed before. // procedure TMainCommands.cm_ConfigDirHotList(const Params: array of string); begin cm_WorkWithDirectoryHotlist(['action=config', 'source='+QuoteStr(frmMain.ActiveFrame.CurrentLocation), 'target='+QuoteStr(frmMain.NotActiveFrame.CurrentLocation), 'index=0']); end; { TMainCommands.cm_WorkWithDirectoryHotlist } // The parameter 0, in text, indicate the job to do to generic "SubmitToAddOrConfigToHotDirDlg" routine. // This way, "SubmitToAddOrConfigToHotDirDlg" is to entry point to attempt to do anything in the Directory Hotlist conifguration screen. // procedure TMainCommands.cm_WorkWithDirectoryHotlist(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; SearchingIndex, WantedAction, WantedIndexToEdit: integer; WantedSourcePath, WantedTargetPath : string; Param, sValue: String; begin //1o) Let's set our default values WantedAction := ACTION_INVALID; WantedSourcePath := frmMain.ActiveFrame.CurrentPath; WantedTargetPath := frmMain.NotActiveFrame.CurrentPath; WantedIndexToEdit := 0; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'action', sValue) then begin SearchingIndex:=1; while ( (SearchingIndex<=length(HOTLISTMAGICWORDS)) AND (WantedAction = ACTION_INVALID) ) do if sValue=HOTLISTMAGICWORDS[SearchingIndex] then WantedAction:=SearchingIndex else inc(SearchingIndex); end else if GetParamValue(Param, 'source', sValue) then begin sValue:=RemoveQuotation(PrepareParameter(sValue)); if (sValue<>'') and (not HasPathInvalidCharacters(sValue)) then WantedSourcePath:=sValue; end else if GetParamValue(Param, 'target', sValue) then begin sValue:=RemoveQuotation(PrepareParameter(sValue)); if (sValue<>'') and (not HasPathInvalidCharacters(sValue)) then WantedTargetPath:=sValue; end else if GetParamValue(Param, 'index', sValue) then begin WantedIndexToEdit:=(strtointdef(sValue,0)); end; end; if WantedAction=ACTION_INVALID then WantedAction:=ACTION_JUSTSHOWCONFIGHOTLIST; //3o) Let's do the sorting job now! Options := ShowOptions(TfrmOptionsDirectoryHotlist); Editor := Options.GetEditor(TfrmOptionsDirectoryHotlist); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsDirectoryHotlist(Editor).SubmitToAddOrConfigToHotDirDlg(WantedAction, WantedSourcePath, WantedTargetPath, WantedIndexToEdit); end; procedure TMainCommands.cm_Search(const Params: array of string); var TemplateName: String; begin if not (frmMain.ActiveFrame.FileSource.IsClass(TFileSystemFileSource) or frmMain.ActiveFrame.FileSource.IsClass(TWcxArchiveFileSource)) then begin msgError(rsMsgErrNotSupported) end else begin if Length(Params) > 0 then TemplateName:= Params[0] else begin TemplateName:= gSearchDefaultTemplate; end; ShowFindDlg(frmMain.ActiveFrame, TemplateName); end; end; procedure TMainCommands.cm_SyncDirs(const Params: array of string); var OperationType: TFileSourceOperationType; begin with frmMain do begin if GetCopyOperationType(FrameLeft.FileSource, FrameRight.FileSource, OperationType) or GetCopyOperationType(FrameRight.FileSource, FrameLeft.FileSource, OperationType) then begin ShowSyncDirsDlg(FrameLeft, FrameRight); end else begin msgWarning(rsMsgErrNotSupported); end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_SymLink(const Params: array of string); var AFile: TFile; SelectedFiles: TFiles; sExistingFile, sLinkToCreate: String; begin with frmMain do begin // Symlinks works only for local file system if ([fspDirectAccess, fspLinksToLocalFiles] * ActiveFrame.FileSource.Properties = []) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 1 then msgWarning(rsMsgTooManyFilesSelected) else if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin AFile:= SelectedFiles[0]; if fspLinksToLocalFiles in ActiveFrame.FileSource.Properties then begin ActiveFrame.FileSource.GetLocalName(AFile); end; sExistingFile := AFile.FullPath; if Length(Params) > 0 then sLinkToCreate := Params[0] else begin if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then sLinkToCreate := NotActiveFrame.CurrentPath else sLinkToCreate := ActiveFrame.CurrentPath; end; sLinkToCreate := sLinkToCreate + AFile.Name; if ShowSymLinkForm(frmMain, sExistingFile, sLinkToCreate, ActiveFrame.CurrentPath) then begin ActiveFrame.Reload; if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then NotActiveFrame.Reload; end; end; finally FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_HardLink(const Params: array of string); var AFile: TFile; SelectedFiles: TFiles; sExistingFile, sLinkToCreate: String; begin with frmMain do begin // Hard links works only for local file system if ([fspDirectAccess, fspLinksToLocalFiles] * ActiveFrame.FileSource.Properties = []) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 1 then msgWarning(rsMsgTooManyFilesSelected) else if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin AFile:= SelectedFiles[0]; if fspLinksToLocalFiles in ActiveFrame.FileSource.Properties then begin ActiveFrame.FileSource.GetLocalName(AFile); end; sExistingFile := AFile.FullPath; if Length(Params) > 0 then sLinkToCreate := Params[0] else begin if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then sLinkToCreate := NotActiveFrame.CurrentPath else sLinkToCreate := ActiveFrame.CurrentPath; end; sLinkToCreate := sLinkToCreate + AFile.Name; if ShowHardLinkForm(frmMain, sExistingFile, sLinkToCreate, ActiveFrame.CurrentPath) then begin ActiveFrame.Reload; if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then NotActiveFrame.Reload; end; end; finally FreeAndNil(SelectedFiles); end; end; end; // Uses to change sort direction when columns header is disabled procedure TMainCommands.cm_ReverseOrder(const Params: array of string); begin with frmMain.ActiveFrame do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_LeftReverseOrder(const Params: array of string); begin with frmMain.FrameLeft do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_RightReverseOrder(const Params: array of string); begin with frmMain.FrameRight do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_SortByName(const Params: array of string); begin DoSortByFunctions(frmMain.ActiveFrame, [fsfNameNoExtension]); end; procedure TMainCommands.cm_SortByExt(const Params: array of string); begin DoSortByFunctions(frmMain.ActiveFrame, [fsfExtension]); end; procedure TMainCommands.cm_SortBySize(const Params: array of string); begin DoSortByFunctions(frmMain.ActiveFrame, [fsfSize]); end; procedure TMainCommands.cm_SortByDate(const Params: array of string); begin DoSortByFunctions(frmMain.ActiveFrame, [fsfModificationTime]); end; procedure TMainCommands.cm_SortByAttr(const Params: array of string); begin DoSortByFunctions(frmMain.ActiveFrame, [fsfAttr]); end; procedure TMainCommands.cm_LeftSortByName(const Params: array of string); begin DoSortByFunctions(frmMain.FrameLeft, [fsfNameNoExtension]); end; procedure TMainCommands.cm_LeftSortByExt(const Params: array of string); begin DoSortByFunctions(frmMain.FrameLeft, [fsfExtension]); end; procedure TMainCommands.cm_LeftSortBySize(const Params: array of string); begin DoSortByFunctions(frmMain.FrameLeft, [fsfSize]); end; procedure TMainCommands.cm_LeftSortByDate(const Params: array of string); begin DoSortByFunctions(frmMain.FrameLeft, [fsfModificationTime]); end; procedure TMainCommands.cm_LeftSortByAttr(const Params: array of string); begin DoSortByFunctions(frmMain.FrameLeft, [fsfAttr]); end; procedure TMainCommands.cm_RightSortByName(const Params: array of string); begin DoSortByFunctions(frmMain.FrameRight, [fsfNameNoExtension]); end; procedure TMainCommands.cm_RightSortByExt(const Params: array of string); begin DoSortByFunctions(frmMain.FrameRight, [fsfExtension]); end; procedure TMainCommands.cm_RightSortBySize(const Params: array of string); begin DoSortByFunctions(frmMain.FrameRight, [fsfSize]); end; procedure TMainCommands.cm_RightSortByDate(const Params: array of string); begin DoSortByFunctions(frmMain.FrameRight, [fsfModificationTime]); end; procedure TMainCommands.cm_RightSortByAttr(const Params: array of string); begin DoSortByFunctions(frmMain.FrameRight, [fsfAttr]); end; { Command to request to sort a frame with a column with a defined order. This command may be user by the user via the toolbar, but it is definitively a nice-to-have for the "uHotDir" unit who may specify the order to be in when switching to a hotdir.} procedure TMainCommands.cm_UniversalSingleDirectSort(const Params: array of string); var Param: String; sValue: String; WantedFileView: TFileView; WantedSortFunction: TFileFunction; WantedSortDirection: TSortDirection; FileFunctions: TFileFunctions = nil; NewSorting: TFileSortings = nil; begin //1o) Let's set our default values WantedFileView:=frmMain.ActiveFrame; WantedSortFunction:=fsfName; WantedSortDirection:=sdAscending; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'panel', sValue) then begin if sValue='inactive' then WantedFileView:=frmMain.NotActiveFrame else if sValue='left' then WantedFileView:=frmMain.FrameLeft else if sValue='right' then WantedFileView:=frmMain.FrameRight; end else if GetParamValue(Param, 'column', sValue) then begin if sValue='ext' then WantedSortFunction:=fsfExtension else if sValue='size' then WantedSortFunction:=fsfSize else if sValue='datetime' then WantedSortFunction:=fsfModificationTime; end else if GetParamValue(Param, 'order', sValue) then begin if sValue='descending' then WantedSortDirection:=sdDescending; end; end; //3o) Let's do the sorting job now! AddSortFunction(FileFunctions, WantedSortFunction); SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 1); NewSorting[0].SortFunctions[0] := FileFunctions[0]; NewSorting[0].SortDirection := WantedSortDirection; WantedFileView.Sorting := NewSorting; end; procedure TMainCommands.cm_MultiRename(const Params: array of string); var aFiles: TFiles; sValue, Param: string; sPresetToLoad: string = ''; begin with frmMain do begin if not (fsoSetFileProperty in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; aFiles:= ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(aFiles) then try if aFiles.Count > 0 then begin for Param in Params do if GetParamValue(Param, 'preset', sValue) then sPresetToLoad := sValue; ShowMultiRenameForm(ActiveFrame.FileSource, aFiles, sPresetToLoad) end else msgWarning(rsMsgNoFilesSelected); finally FreeAndNil(aFiles); end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_CopySamePanel(const Params: array of string); begin frmMain.CopyFiles('', True); end; procedure TMainCommands.cm_RenameOnly(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_RenameOnly', Params); end; procedure TMainCommands.cm_EditNew(const Params: array of string); var sNewFile: String; hFile: System.THandle = 0; aFile: TFile; Attrs: TFileAttrs; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; AElevate: TDuplicates = dupIgnore; begin frmMain.ActiveFrame.ExecuteCommand('cm_EditNew', Params); // For now only works for FileSystem. with frmMain do if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin aFile := ActiveFrame.CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then sNewFile:= aFile.Name else sNewFile:= rsEditNewFile; finally FreeAndNil(aFile); end; if not InputQuery(rsEditNewOpen, rsEditNewFileName, sNewFile) then Exit; // If user entered only a filename prepend it with current directory. if ExtractFilePath(sNewFile) = '' then sNewFile:= ActiveFrame.CurrentPath + sNewFile; PushPop(AElevate); try sNewFile := TrimPath(sNewFile); Attrs := FileGetAttrUAC(sNewFile); if Attrs = faInvalidAttributes then begin hFile := FileCreateUAC(sNewFile, fmShareDenyWrite); if hFile = feInvalidHandle then begin MessageDlg(rsMsgErrECreate, mbSysErrorMessage(GetLastOSError), mtWarning, [mbOK], 0); Exit; end; FileClose(hFile); ActiveFrame.FileSource.Reload(ExtractFilePath(sNewFile)); ActiveFrame.SetActiveFile(sNewFile); end else if FPS_ISDIR(Attrs) then begin MessageDlg(rsMsgErrECreate, Format(rsMsgErrCreateFileDirectoryExists, [ExtractFileName(sNewFile)]), mtWarning, [mbOK], 0); Exit; end; finally PushPop(AElevate); end; aFile := TFileSystemFileSource.CreateFileFromFile(sNewFile); try // Try to find Edit command in "extassoc.xml" if not gExts.GetExtActionCmd(aFile, 'edit', sCmd, sParams, sStartPath) then ShowEditorByGlob(aFile.FullPath) // If command not found then use default editor else begin ProcessExtCommandFork(sCmd, sParams, aFile.Path, aFile); end; finally FreeAndNil(aFile); end; end else msgWarning(rsMsgNotImplemented); end; { TMainCommands.cm_DirHistory } // Shows recently visited directories (global). procedure TMainCommands.cm_DirHistory(const Params: array of string); var bUseTreeViewMenu: boolean = false; bUsePanel: boolean = true; p: TPoint = (x:0; y:0); iWantedWidth: integer = 0; iWantedHeight: integer = 0; sMaybeMenuItem: TMenuItem = nil; begin // 1. Let's parse our parameters. DoParseParametersForPossibleTreeViewMenu(Params, gUseTreeViewMenuWithDirHistory, gUseTreeViewMenuWithDirHistory, bUseTreeViewMenu, bUsePanel, p); frmMain.CreatePopUpDirHistory(bUseTreeViewMenu, 0); Application.ProcessMessages; //TODO: In Windows, Not sure why, but on all systems tried, this eliminate a "beep" when the popup is shown. if bUseTreeViewMenu then begin if not bUsePanel then iWantedHeight := 0 else begin iWantedWidth := frmMain.ActiveFrame.Width; iWantedHeight := frmMain.ActiveFrame.Height; end; sMaybeMenuItem := GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(frmMain.pmDirHistory, tvmcDirHistory, p.X, p.Y, iWantedWidth, iWantedHeight); if sMaybeMenuItem <> nil then sMaybeMenuItem.OnClick(sMaybeMenuItem); end else begin frmMain.pmDirHistory.Popup(p.X,p.Y); end; end; // Shows browser-like history for active file view. procedure TMainCommands.cm_ViewHistory(const Params: array of string); begin frmMain.ShowFileViewHistory(Params); end; procedure TMainCommands.cm_ViewHistoryPrev(const Params: array of string); begin with frmMain do begin ActiveFrame.GoToPrevHistory; end; end; procedure TMainCommands.cm_ViewHistoryNext(const Params: array of string); begin with frmMain do begin ActiveFrame.GoToNextHistory; end; end; { TMainCommands.cm_ShowCmdLineHistory } procedure TMainCommands.cm_ShowCmdLineHistory(const Params: array of string); var p: TPoint = (x:0; y:0); sUserChoice:string; bUseTreeViewMenu: boolean = false; bUsePanel: boolean = true; iWantedWidth: integer = 0; iWantedHeight: integer = 0; begin with frmMain do begin if IsCommandLineVisible then begin // 1. Let's parse our parameters. DoParseParametersForPossibleTreeViewMenu(Params, gUseTreeViewMenuWithCommandLineHistory, gUseTreeViewMenuWithCommandLineHistory, bUseTreeViewMenu, bUsePanel, p); // 2. No matter what, we need to fill in the popup menu structure. gFavoriteTabsList.PopulateMenuWithFavoriteTabs(frmMain.pmFavoriteTabs, @DoOnClickMenuJobFavoriteTabs, ftmp_FAVTABSWITHCONFIG); Application.ProcessMessages; // 3. Show the appropriate menu. if bUseTreeViewMenu then begin iWantedWidth := frmMain.edtCommand.Width; iWantedHeight := frmMain.ActiveFrame.Height; p := frmMain.edtCommand.ClientToScreen(Classes.Point(0, 0)); p.y := p.y - iWantedHeight; sUserChoice := GetUserChoiceFromTStrings(edtCommand.Items, tvmcCommandLineHistory, p.x, p.y, iWantedWidth, iWantedHeight); if sUserChoice<>'' then begin edtCommand.ItemIndex:=edtCommand.Items.IndexOf(sUserChoice); edtCommand.SetFocus; end; end else begin edtCommand.SetFocus; if edtCommand.Items.Count>0 then edtCommand.DroppedDown:=True; end; end; end; end; procedure TMainCommands.cm_ToggleFullscreenConsole(const Params: array of string); begin frmMain.ToggleFullscreenConsole; end; procedure TMainCommands.cm_RunTerm(const Params: array of string); begin with frmMain do if not edtCommand.Focused then try ProcessExtCommandFork(gRunTermCmd, gRunTermParams, ActiveFrame.CurrentPath); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningTerminal, rsMsgInvalidCommandLine + ' (' + rsToolTerminal + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; procedure TMainCommands.cm_CalculateSpace(const Params: array of string); var SelectedFiles: TFiles; Operation: TFileSourceOperation; begin with frmMain do begin if not (fsoCalcStatistics in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try Operation := ActiveFrame.FileSource.CreateCalcStatisticsOperation(SelectedFiles); if not Assigned(Operation) then msgWarning(rsMsgErrNotSupported) else begin Operation.AddStateChangedListener([fsosStopped], @OnCalcStatisticsStateChanged); OperationsManager.AddOperation(Operation); end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_CountDirContent(const Params: array of string); begin frmMain.ActiveFrame.CalculateSpaceOfAllDirectories; end; procedure TMainCommands.cm_SetFileProperties(const Params: array of string); var ActiveFile: TFile = nil; SelectedFiles: TFiles = nil; aFileProperties: TFileProperties; CreationTime: DCBasicTypes.TFileTimeEx; LastAccessTime : DCBasicTypes.TFileTimeEx; ModificationTime: DCBasicTypes.TFileTimeEx; Operation: TFileSourceSetFilePropertyOperation = nil; begin with frmMain do try if not (fsoSetFileProperty in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; ActiveFile := ActiveFrame.CloneActiveFile; if Assigned(ActiveFile) and (SelectedFiles.Count > 0) then begin if fspDirectAccess in ActiveFrame.FileSource.Properties then begin if mbFileGetTime(ActiveFile.FullPath, ModificationTime, CreationTime, LastAccessTime) then begin if fpModificationTime in ActiveFile.SupportedProperties then ActiveFile.ModificationTime:= FileTimeToDateTimeEx(ModificationTime); if fpCreationTime in ActiveFile.SupportedProperties then ActiveFile.CreationTime:= FileTimeToDateTimeEx(CreationTime); if fpLastAccessTime in ActiveFile.SupportedProperties then ActiveFile.LastAccessTime:= FileTimeToDateTimeEx(LastAccessTime); end; end; FillByte(aFileProperties, SizeOf(aFileProperties), 0); if fpAttributes in ActiveFile.SupportedProperties then aFileProperties[fpAttributes]:= ActiveFile.Properties[fpAttributes].Clone; if fpModificationTime in ActiveFile.SupportedProperties then aFileProperties[fpModificationTime]:= ActiveFile.Properties[fpModificationTime].Clone; if fpCreationTime in ActiveFile.SupportedProperties then aFileProperties[fpCreationTime]:= ActiveFile.Properties[fpCreationTime].Clone; if fpLastAccessTime in ActiveFile.SupportedProperties then aFileProperties[fpLastAccessTime]:= ActiveFile.Properties[fpLastAccessTime].Clone; Operation:= ActiveFrame.FileSource.CreateSetFilePropertyOperation( SelectedFiles, aFileProperties) as TFileSourceSetFilePropertyOperation; if Assigned(Operation) then begin if (Operation.SupportedProperties * [fpModificationTime, fpCreationTime, fpLastAccessTime, fpAttributes] = []) then begin msgWarning(rsMsgErrNotSupported); Exit; end; if ShowChangeFilePropertiesDialog(Operation) then begin OperationsManager.AddOperation(Operation); Operation := nil; // So it doesn't get destroyed below. end; end; end; finally FreeAndNil(SelectedFiles); FreeAndNil(ActiveFile); FreeAndNil(Operation); end; end; procedure TMainCommands.cm_FileProperties(const Params: array of string); var SelectedFiles: TFiles; Operation: TFileSourceExecuteOperation; aFile: TFile; begin with frmMain do begin if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SelectedFiles) then try if SelectedFiles.Count > 0 then try ShowFilePropertiesDialog(ActiveFrame.FileSource, SelectedFiles); except on e: EContextMenuException do ShowException(e); end; finally FreeAndNil(SelectedFiles); end; end else if (fsoExecute in ActiveFrame.FileSource.GetOperationsTypes) then begin aFile:= ActiveFrame.CloneActiveFile; if Assigned(aFile) then try Operation:= ActiveFrame.FileSource.CreateExecuteOperation( aFile, ActiveFrame.CurrentPath, 'properties') as TFileSourceExecuteOperation; if Assigned(Operation) then Operation.Execute; finally FreeAndNil(Operation); FreeAndNil(aFile); end; end; end; end; procedure TMainCommands.cm_FileLinker(const Params: array of string); var I: Integer; aSelectedFiles: TFiles = nil; aFile: TFile; aFirstFilenameOfSeries: String; begin with frmMain, frmMain.ActiveFrame do begin if not (fsoCombine in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; try aSelectedFiles := CloneSelectedOrActiveFiles; for I := 0 to aSelectedFiles.Count - 1 do begin aFile := aSelectedFiles[I]; if (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin msgWarning(rsMsgInvalidSelection); Exit; end; end; if aSelectedFiles.Count > 1 then begin ShowLinkerFilesForm(frmMain, FileSource, aSelectedFiles, NotActiveFrame.CurrentPath); end else begin if aSelectedFiles.Count = 1 then begin try if StrToInt(aSelectedFiles[0].Extension)>0 then begin aFirstFilenameOfSeries:='1'; while length(aFirstFilenameOfSeries)<length(aSelectedFiles[0].Extension) do aFirstFilenameOfSeries:='0'+aFirstFilenameOfSeries; aFirstFilenameOfSeries:=aSelectedFiles[0].Path + aSelectedFiles[0].NameNoExt + ExtensionSeparator + aFirstFilenameOfSeries; DoDynamicFilesLinking(FileSource, aSelectedFiles, NotActiveFrame.CurrentPath, aFirstFilenameOfSeries); end else begin msgWarning(rsMsgInvalidSelection); end; except msgWarning(rsMsgInvalidSelection); end; end else begin msgWarning(rsMsgInvalidSelection); end; end; finally FreeAndNil(aSelectedFiles); end; // try end; // with end; procedure TMainCommands.cm_FileSpliter(const Params: array of string); var aFile: TFile = nil; begin with frmMain, frmMain.ActiveFrame do begin if not (fsoSplit in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; try aFile := CloneActiveFile; if (not Assigned(aFile)) or (aFile.IsDirectory or aFile.IsLinkToDirectory) then msgWarning(rsMsgInvalidSelection) else ShowSplitterFileForm(frmMain, FileSource, aFile, NotActiveFrame.CurrentPath); finally FreeAndNil(aFile); end; // try end; // with end; procedure TMainCommands.cm_PanelsSplitterPerPos(const Params: array of string); var Split: Integer = 50; Param, SplitPct: String; begin for Param in Params do begin if GetParamValue(Param, 'splitpct', SplitPct) then Split := StrToIntDef(SplitPct, Split); end; DoPanelsSplitterPerPos(Split); end; procedure TMainCommands.cm_EditComment(const Params: array of string); var aFile: TFile; begin with frmMain.ActiveFrame do begin if (fspDirectAccess in FileSource.GetProperties) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then ShowDescrEditDlg(aFile.FullPath, frmMain.ActiveFrame) else msgWarning(rsMsgNoFilesSelected); finally FreeAndNil(aFile); end; end else if (fspLinksToLocalFiles in FileSource.GetProperties) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then begin if FileSource.GetLocalName(aFile) then ShowDescrEditDlg(aFile.FullPath, frmMain.ActiveFrame) else msgWarning(rsMsgErrNotSupported); end else begin msgWarning(rsMsgNoFilesSelected); end; finally FreeAndNil(aFile); end; end else msgWarning(rsMsgErrNotSupported); end; end; function SendToClipboard(ClipboardMode: uClipboard.TClipboardOperation):Boolean; var sl: TStringList = nil; i : Integer; theSelectedFiles: TFiles = nil; begin // Only works for file system. Result := False; with frmMain.ActiveFrame do if (fspDirectAccess in FileSource.Properties) then begin sl := TStringList.Create; try theSelectedFiles := CloneSelectedOrActiveFiles; for i := 0 to theSelectedFiles.Count - 1 do sl.Add(theSelectedFiles[i].FullPath); case ClipboardMode of uClipboard.ClipboardCut: Result := uClipboard.CutToClipboard(sl); uClipboard.ClipboardCopy: Result := uClipboard.CopyToClipboard(sl); end; finally if Assigned(sl) then FreeAndNil(sl); if Assigned(theSelectedFiles) then FreeAndNil(theSelectedFiles); end; end else msgWarning(rsMsgErrNotSupported); end; procedure TMainCommands.cm_CopyToClipboard(const Params: array of string); begin SendToClipboard(ClipboardCopy); end; procedure TMainCommands.cm_CutToClipboard(const Params: array of string); begin SendToClipboard(ClipboardCut); end; procedure TMainCommands.cm_PasteFromClipboard(const Params: array of string); var ClipboardOp: TClipboardOperation; filenamesList: TStringList; Files: TFiles = nil; Operation: TFileSourceOperation = nil; SourceFileSource: IFileSource = nil; begin with frmMain do begin if PasteFromClipboard(ClipboardOp, filenamesList) = True then try // fill file list with files Files := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(filenamesList[0]), fileNamesList, True); if Files.Count > 0 then begin case ClipboardOp of uClipboard.ClipboardCut: begin SourceFileSource := TFileSystemFileSource.GetFileSource; if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin if not (fsoMove in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; Operation := SourceFileSource.CreateMoveOperation( Files, ActiveFrame.CurrentPath); end else begin if (not (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes)) or (not (fsoDelete in SourceFileSource.GetOperationsTypes)) then begin msgWarning(rsMsgErrNotSupported); Exit; end; { // Meta-operation: CopyIn + Delete Operation := ActiveFrame.FileSource.CreateCopyInOperation( SourceFileSource, Files, ActiveFrame.CurrentPath); } end; end; uClipboard.ClipboardCopy: begin if not (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SourceFileSource := TFileSystemFileSource.GetFileSource; if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin Operation := SourceFileSource.CreateCopyOutOperation( ActiveFrame.FileSource, Files, ActiveFrame.CurrentPath); end else begin Operation := ActiveFrame.FileSource.CreateCopyInOperation( SourceFileSource, Files, ActiveFrame.CurrentPath); end; end; else // Invalid clipboard operation. Exit; end; if Assigned(Operation) then begin if Operation is TFileSystemCopyOperation then (Operation as TFileSystemCopyOperation).AutoRenameItSelf:= True; OperationsManager.AddOperation(Operation); // Files have been moved so clear the clipboard because // the files location in the clipboard is invalid now. if ClipboardOp = uClipboard.ClipboardCut then uClipboard.ClearClipboard; end else msgWarning(rsMsgNotImplemented); end; finally FreeAndNil(fileNamesList); if Assigned(Files) then FreeAndNil(Files); end; end; end; procedure TMainCommands.cm_SyncChangeDir(const Params: array of string); begin with frmMain do begin actSyncChangeDir.Checked:= not actSyncChangeDir.Checked; if actSyncChangeDir.Checked then SyncChangeDir:= ExcludeTrailingBackslash(ActiveFrame.CurrentPath); end; end; procedure TMainCommands.cm_ChangeDirToRoot(const Params: array of string); begin DoChangeDirToRoot(frmMain.ActiveFrame); end; procedure TMainCommands.cm_ChangeDirToHome(const Params: array of string); begin SetFileSystemPath(frmMain.ActiveFrame, GetHomeDir); end; procedure TMainCommands.cm_ChangeDirToParent(const Params: array of string); begin frmMain.ActiveFrame.ChangePathToParent(True); end; // Parameters: // Full path to a directory. procedure TMainCommands.cm_ChangeDir(const Params: array of string); var Param, WantedPath: string; begin //1o) Let's set our default values WantedPath := frmMain.ActiveFrame.CurrentPath; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'activepath', WantedPath) then begin WantedPath:= PrepareParameter(WantedPath); ChooseFileSource(frmMain.ActiveFrame, RemoveQuotation(WantedPath)); end else if GetParamValue(Param, 'inactivepath', WantedPath) then begin WantedPath:= PrepareParameter(WantedPath); ChooseFileSource(frmMain.NotActiveFrame, RemoveQuotation(WantedPath)); end else if GetParamValue(Param, 'leftpath', WantedPath) then begin WantedPath:= PrepareParameter(WantedPath); ChooseFileSource(frmMain.FrameLeft, RemoveQuotation(WantedPath)); end else if GetParamValue(Param, 'rightpath', WantedPath) then begin WantedPath:=PrepareParameter(WantedPath); ChooseFileSource(frmMain.FrameRight, RemoveQuotation(WantedPath)); end; end; //3o) Let's support the DC legacy way of working of the command if Length(Params)=1 then begin if (not GetParamValue(Params[0], 'activepath', WantedPath)) AND (not GetParamValue(Params[0], 'inactivepath', WantedPath)) AND (not GetParamValue(Params[0], 'leftpath', WantedPath)) AND (not GetParamValue(Params[0], 'rightpath', WantedPath)) then ChooseFileSource(frmMain.ActiveFrame, RemoveQuotation(ReplaceEnvVars(Params[0]))); end; end; procedure TMainCommands.cm_ClearLogWindow(const Params: array of string); begin frmMain.seLogWindow.Lines.Clear; end; procedure TMainCommands.cm_CmdLineNext(const Params: array of string); begin DoShowCmdLineHistory(True); end; procedure TMainCommands.cm_CmdLinePrev(const Params: array of string); begin DoShowCmdLineHistory(False); end; procedure TMainCommands.cm_ViewLogFile(const Params: array of string); begin ShowViewerByGlob(GetActualLogFilename); end; procedure TMainCommands.cm_ClearLogFile(const Params: array of string); begin if MsgBox(Format(rsMsgPopUpHotDelete,['log file ('+GetActualLogFilename+')']),[msmbYes, msmbNo], msmbNo, msmbNo ) = mmrYes then begin mbDeleteFile(GetActualLogFilename); end; end; procedure TMainCommands.cm_NetworkConnect(const Params: array of string); begin DoOpenVirtualFileSystemList(frmMain.ActiveFrame); end; procedure TMainCommands.cm_NetworkDisconnect(const Params: array of string); begin CloseNetworkConnection(); end; procedure TMainCommands.cm_CopyNetNamesToClip(const Params: array of string); begin CopyNetNamesToClip; end; procedure TMainCommands.cm_HorizontalFilePanels(const Params: array of string); var sParamValue:string; WantedHorizontalFilePanels:boolean; begin WantedHorizontalFilePanels:=gHorizontalFilePanels; if Length(Params)>0 then begin if GetParamValue(Params[0], 'mode', sParamValue) then begin if sParamValue='legacy' then WantedHorizontalFilePanels := not WantedHorizontalFilePanels else if sParamValue='vertical' then WantedHorizontalFilePanels:=FALSE else if sParamValue='horizontal' then WantedHorizontalFilePanels:=TRUE; end; end else begin WantedHorizontalFilePanels := not WantedHorizontalFilePanels; end; if WantedHorizontalFilePanels<>gHorizontalFilePanels then begin gHorizontalFilePanels:=WantedHorizontalFilePanels; frmMain.actHorizontalFilePanels.Checked := gHorizontalFilePanels; frmMain.UpdateWindowView; end; end; procedure TMainCommands.cm_OperationsViewer(const Params: array of string); begin ShowOperationsViewer; end; procedure TMainCommands.cm_CompareDirectories(const Params: array of string); var I: LongWord; Param: String; BoolValue: Boolean; NtfsShift: Boolean; SourceFile: TDisplayFile; TargetFile: TDisplayFile; AFiles, AFolders: Boolean; SourceList: TStringHashListUtf8; SourceFiles: TDisplayFiles = nil; TargetFiles: TDisplayFiles = nil; begin AFiles := True; AFolders := False; for Param in Params do begin if GetParamBoolValue(Param, 'files', BoolValue) then AFiles := BoolValue else if GetParamBoolValue(Param, 'directories', BoolValue) then begin AFolders := BoolValue end; end; if (AFiles = False) and (AFolders = False) then AFiles := True; SourceList:= TStringHashListUtf8.Create(FileNameCaseSensitive); with frmMain do try NtfsShift:= gNtfsHourTimeDelay and NtfsHourTimeDelay(ActiveFrame.CurrentPath, NotActiveFrame.CurrentPath); SourceFiles:= ActiveFrame.DisplayFiles; TargetFiles:= NotActiveFrame.DisplayFiles; for I:= 0 to SourceFiles.Count - 1 do begin SourceFile:= SourceFiles[I]; if SourceFile.FSFile.IsDirectory or SourceFile.FSFile.IsLinkToDirectory then begin if not AFolders then Continue; end else begin if not AFiles then Continue; end; ActiveFrame.MarkFile(SourceFile, True); SourceList.Add(SourceFile.FSFile.Name, SourceFile); end; for I:= 0 to TargetFiles.Count - 1 do begin TargetFile:= TargetFiles[I]; if TargetFile.FSFile.IsDirectory or TargetFile.FSFile.IsLinkToDirectory then begin if not AFolders then Continue; end else begin if not AFiles then Continue; end; SourceFile:= TDisplayFile(SourceList.Data[TargetFile.FSFile.Name]); if (SourceFile = nil) then NotActiveFrame.MarkFile(TargetFile, True) else case FileTimeCompare(SourceFile.FSFile.ModificationTime, TargetFile.FSFile.ModificationTime, NtfsShift) of 0: ActiveFrame.MarkFile(SourceFile, False); +1: NotActiveFrame.MarkFile(TargetFile, False); -1: begin ActiveFrame.MarkFile(SourceFile, False); NotActiveFrame.MarkFile(TargetFile, True); end; end; end; finally SourceList.Free; ActiveFrame.Repaint; NotActiveFrame.Repaint; end; end; { TMainCommands.cm_ConfigToolbars } procedure TMainCommands.cm_ConfigToolbars(const Params: array of string); begin cm_Options(['TfrmOptionsToolbar']); end; { TMainCommands.cm_DebugShowCommandParameters } procedure TMainCommands.cm_DebugShowCommandParameters(const Params: array of string); var sMessageToshow:string; indexParameter:integer; begin sMessageToshow:='Number of parameters: '+IntToStr(Length(Params)); if Length(Params)>0 then begin sMessageToshow:=sMessageToshow+#$0A; for indexParameter:=0 to pred(Length(Params)) do begin sMessageToshow:=sMessageToshow+#$0A+'Parameter #'+IntToStr(indexParameter)+': '+Params[indexParameter]+' ==> '+PrepareParameter(Params[indexParameter]); end; end; msgOK(sMessageToshow); end; { TMainCommands.cm_CopyPathOfFilesToClip } procedure TMainCommands.cm_CopyPathOfFilesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcJustPathWithSeparator, Params); end; { TMainCommands.cm_CopyPathNoSepOfFilesToClip } procedure TMainCommands.cm_CopyPathNoSepOfFilesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathWithoutSeparator, Params); end; { TMainCommands.cm_DoAnyCmCommand } procedure TMainCommands.cm_DoAnyCmCommand(const Params: array of string); var CommandReturnedToExecute:string=''; begin if ShowMainCommandDlgForm(gLastDoAnyCommand,CommandReturnedToExecute) then begin gLastDoAnyCommand := CommandReturnedToExecute; frmMain.Commands.Commands.ExecuteCommand(CommandReturnedToExecute, []); end; end; { TMainCommands.DoCloseAllTabs } procedure TMainCommands.DoCloseAllTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage := ANotebook.PageCount - 1 downto 0 do if (not bAbort) AND (iPage <> ANotebook.PageIndex) then case frmMain.RemovePage(ANotebook, iPage, bDoLocked, iAskForLocked, True) of 1: Continue; // skip tab 2: bAbort := True; // cancel operation 3: iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command end; end; { TMainCommands.DoCloseDuplicateTabs } // Close tabs pointing to same dirs so at the end of action, only one tab for each dir is kept. // Tabs that are kept follow these rules of priority: // -All the locked tabs are kept without asking question *except* if "bDoLocked" is set, which means we want also to elimit double lock tab. // -The one that has been user renamed by the user are eliminate IF a equivalent locked tab exist. // -If a user rename tab point the same directoy as another tab but not renamed, no matter the order, we keep the renamed tab and eliminate the other. // -A locked renamed tabs is stronger than a non-renamed tab locked so we eliminate the second one, the one not renamed. // -If two equals importance identical exist, we keep the one on left and elimitate the one on right. // At the end of the process, we stay in a tab that has the same path as where we were initally. procedure TMainCommands.DoCloseDuplicateTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var sOriginalPath: String; iTabIndex, jTabIndex, jScore, tScore: Integer; bFlagDeleted: boolean; begin // 1. We save to restore later the original directory of the active tab. sOriginalPath := ANoteBook.Page[ANotebook.PageIndex].FileView.CurrentPath; // 2. We do the actual job. jTabIndex := pred(ANotebook.PageCount); while (not bAbort) AND (jTabIndex>0) do begin jScore:=$0; if (ANoteBook.Page[jTabIndex].PermanentTitle <> '') then jScore := (jScore OR $01); if (ANoteBook.Page[jTabIndex].LockState <> tlsNormal) then jScore := (jScore OR $02); iTabIndex := (jTabIndex-1); bFlagDeleted := FALSE; while (not bAbort) AND (iTabIndex>=0) AND (bFlagDeleted=FALSE) do begin if mbCompareFileNames(ANoteBook.Page[iTabIndex].FileView.CurrentPath, ANoteBook.Page[jTabIndex].FileView.CurrentPath) then begin tScore:=jScore; if (ANoteBook.Page[iTabIndex].PermanentTitle <> '') then tScore := (tScore OR $04); if (ANoteBook.Page[iTabIndex].LockState <> tlsNormal) then tScore := (tScore OR $08); case tScore of $00, $04, $05, $08, $09, $0C, $0D: // We eliminate the one on right. begin frmMain.RemovePage(ANotebook, jTabIndex, False); bFlagDeleted:=TRUE; end; $01, $02, $03, $06, $07: // We eliminate the one on left. begin frmMain.RemovePage(ANotebook, iTabIndex, False); dec(jTabIndex); // If we eliminate one on left, the right tab now moved one position lower, we must take this in account. end; $0A, $0E, $0F: // We eliminate the one on right, EVEN if it is locked if specified. begin if bDoLocked then begin case frmMain.RemovePage(ANotebook, jTabIndex, bDoLocked, iAskForLocked, True) of 0: bFlagDeleted:=True; // Standard Removed. 1: begin end; // Skip tab, we keep going. 2: bAbort := True; // Cancel operation! 3: begin iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command bFlagDeleted:=True; end; end; end; end; $0B: // We eliminate the one on left, EVEN if it is locked, if specified. begin if bDoLocked then begin case frmMain.RemovePage(ANotebook, iTabIndex, bDoLocked, iAskForLocked, True) of 0: dec(jTabIndex); // If we eliminate one on left, the right tab now moved one position lower, we must take this in account. 1: begin end; // Skip tab, we keep going. 2: bAbort := True; // Cancel operation! 3: begin iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command dec(jTabIndex); end; end; end; end; end; // case tScore end; dec(iTabIndex); end; dec(jTabIndex); end; // 3. We attempt to select a tab with the actual original path from where we were. if not mbCompareFileNames(ANoteBook.Page[ANotebook.PageIndex].FileView.CurrentPath , sOriginalPath) then begin iTabIndex:=0; while (iTabIndex<ANotebook.PageCount) do if mbCompareFileNames(ANoteBook.Page[iTabIndex].FileView.CurrentPath , sOriginalPath) then begin ANotebook.PageIndex:=iTabIndex; iTabIndex:=ANotebook.PageCount; end else inc(iTabIndex); end; end; { TMainCommands.DoSetAllTabsOptionNormal } procedure TMainCommands.DoSetAllTabsOptionNormal(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsNormal; end; { TMainCommands.DoSetAllTabsOptionPathLocked } procedure TMainCommands.DoSetAllTabsOptionPathLocked(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsPathLocked; end; { TMainCommands.DoAllTabsOptionPathResets } procedure TMainCommands.DoAllTabsOptionPathResets(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsPathResets; end; { TMainCommands.DoSetAllTabsOptionDirsInNewTab } procedure TMainCommands.DoSetAllTabsOptionDirsInNewTab(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsDirsInNewTab; end; { TMainCommands.cm_SetAllTabsOptionNormal } procedure TMainCommands.cm_SetAllTabsOptionNormal(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionNormal); end; { TMainCommands.cm_SetAllTabsOptionPathLocked } procedure TMainCommands.cm_SetAllTabsOptionPathLocked(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionPathLocked); end; { TMainCommands.cm_SetAllTabsOptionPathResets } procedure TMainCommands.cm_SetAllTabsOptionPathResets(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoAllTabsOptionPathResets); end; { TMainCommands.cm_SetAllTabsOptionDirsInNewTab } procedure TMainCommands.cm_SetAllTabsOptionDirsInNewTab(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionDirsInNewTab); end; { TMainCommands.DoActionOnMultipleTabs } procedure TMainCommands.DoActionOnMultipleTabs(const Params: array of string; ProcedureDoingActionOnMultipleTabs: TProcedureDoingActionOnMultipleTabs); var originalFilePanel:TFilePanelSelect; SideOfAction : TTabsConfigLocation = tclActive; bAbort: boolean = False; bDoLocked: boolean = False; iAskForLocked: integer = 0; iCurrentPageCount: integer; begin FOriginalNumberOfTabs := -1; originalFilePanel := frmMain.SelectedPanel; GetAndSetMultitabsActionFromParams(Params, SideOfAction, bDoLocked, iAskForLocked); case SideOfAction of tclLeft: ProcedureDoingActionOnMultipleTabs(frmMain.LeftTabs, bAbort, bDoLocked, iAskForLocked); tclRight: ProcedureDoingActionOnMultipleTabs(frmMain.RightTabs, bAbort, bDoLocked, iAskForLocked); tclActive: ProcedureDoingActionOnMultipleTabs(frmMain.ActiveNotebook, bAbort, bDoLocked, iAskForLocked); tclInactive: ProcedureDoingActionOnMultipleTabs(frmMain.NotActiveNotebook, bAbort, bDoLocked, iAskForLocked); tclBoth: begin iCurrentPageCount := frmMain.RightTabs.PageCount; ProcedureDoingActionOnMultipleTabs(frmMain.LeftTabs, bAbort, bDoLocked, iAskForLocked); FOriginalNumberOfTabs := iCurrentPageCount; ProcedureDoingActionOnMultipleTabs(frmMain.RightTabs, bAbort, bDoLocked, iAskForLocked); end; end; frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; { TMainCommands.GetAndSetMultitabsActionFromParams } procedure TMainCommands.GetAndSetMultitabsActionFromParams(const Params: array of string; var APanelSide:TTabsConfigLocation; var ActionOnLocked:boolean; var AskForLocked:integer); var Param, sValue: String; boolValue: boolean; begin Param := GetDefaultParam(Params); ActionOnLocked := False; AskForLocked := 0; // 1. Evaluate if we're running from legacy parameter style. if pos('=',Param)=0 then begin // 1.a. If yes, just watch for the magic word if Param = 'LeftTabs' then APanelSide := tclLeft else if Param = 'RightTabs' then APanelSide := tclRight else if Param = 'ActiveTabs' then APanelSide := tclActive else if Param = 'InactiveTabs' then APanelSide := tclInactive else if Param = 'BothTabs' then APanelSide := tclBoth else APanelSide := tclActive; // Legacy default is to close from Active Notebook. end else begin // 1.b. If no, let's parse it. // 2. Let's set our default values. APanelSide := tclActive; // 3. Parsing may now begin! for Param in Params do begin if GetParamValue(Param, 'side', sValue) then begin if sValue = 'left' then APanelSide := tclLeft else if sValue = 'right' then APanelSide := tclRight else if sValue = 'active' then APanelSide := tclActive else if sValue = 'inactive' then APanelSide := tclInactive else if sValue = 'both' then APanelSide := tclBoth; end else if GetParamBoolValue(Param, 'dolocked', boolValue) then ActionOnLocked := boolValue else if GetParamBoolValue(Param, 'confirmlocked', boolValue) then begin if boolValue then AskForLocked:=1 else AskForLocked:=2; end; end; end; end; { TMainCommands.cm_ConfigFolderTabs } procedure TMainCommands.cm_ConfigFolderTabs(const Params: array of string); begin cm_Options(['TfrmOptionsTabs']); end; { TMainCommands.DoShowFavoriteTabsOptions } procedure TMainCommands.DoShowFavoriteTabsOptions; var Options: IOptionsDialog; Editor: TOptionsEditor; begin Options := ShowOptions(TfrmOptionsFavoriteTabs); Editor := Options.GetEditor(TfrmOptionsFavoriteTabs); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsFavoriteTabs(Editor).MakeUsInPositionToWorkWithActiveFavoriteTabs; end; { TMainCommands.cm_ConfigFavoriteTabs } procedure TMainCommands.cm_ConfigFavoriteTabs(const Params: array of string); begin DoShowFavoriteTabsOptions; end; { TMainCommands.cm_ResaveFavoriteTabs } procedure TMainCommands.cm_ResaveFavoriteTabs(const Params: array of string); begin if gFavoriteTabsList.ReSaveTabsToXMLEntry(gFavoriteTabsList.GetIndexLastFavoriteTabsLoaded) then if gFavoriteTabsGoToConfigAfterReSave then DoShowFavoriteTabsOptions; end; { TMainCommands.cm_SaveFavoriteTabs } procedure TMainCommands.cm_SaveFavoriteTabs(const Params: array of string); var sFavoriteTabsEntryName: string = ''; begin if gFavoriteTabsList.GetSuggestedParamsForFavoriteTabs(frmMain.ActiveNotebook.ActivePage.CurrentTitle, sFavoriteTabsEntryName) then if gFavoriteTabsList.SaveNewEntryFavoriteTabs(sFavoriteTabsEntryName) then if gFavoriteTabsGoToConfigAfterSave then DoShowFavoriteTabsOptions; end; { TMainCommands.DoOnClickMenuJobFavoriteTabs } // We're supposed to jump here when we get called by an item from a favorite tabs menu item. // The value of "tag" will indicate us what to do. // -A value below TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING ($10000) indicates we want to load tabs with what was saved in our favorite tabs list at the index of "tag". // -A value equal or higher than TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING ($10000) indicates we want to save our current tabs OVER the existing entry in our favorite tabs list at the index of "tag MOD TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING". procedure TMainCommands.DoOnClickMenuJobFavoriteTabs(Sender: TObject); begin with Sender as TComponent do begin case tag of 0 .. pred(TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING): // We want to adjust our current tab from one in the favorite tabs. begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(tag); end; TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING .. pred(TAGOFFSET_FAVTABS_SOMETHINGELSE): // We want to save our current tabs an existing favorite tabs entry. if gFavoriteTabsList.ReSaveTabsToXMLEntry(tag mod TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING) then if gFavoriteTabsGoToConfigAfterReSave then DoShowFavoriteTabsOptions; end; //case iDispatcher of ... end; end; { TMainCommands.cm_ReloadFavoriteTabs } procedure TMainCommands.cm_ReloadFavoriteTabs(const Params: array of string); begin // Here we won't call "gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange;" because if user wants to reload it, it's because he does not want to save what he has right now... // Otherwise, it would be a useless action. :-/ gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexLastFavoriteTabsLoaded); end; { TMainCommands.cm_PreviousFavoriteTabs } procedure TMainCommands.cm_PreviousFavoriteTabs(const Params: array of string); begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded); end; { TMainCommands.cm_NextFavoriteTabs } procedure TMainCommands.cm_NextFavoriteTabs(const Params: array of string); begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded); end; { TMainCommands.cm_LoadFavoriteTabs } procedure TMainCommands.cm_LoadFavoriteTabs(const Params: array of string); const sNOSETUPPARAMLEGACY = 'd93525d5-e711-4b9d-ad2c-54d815354819'; var bUseTreeViewMenu: boolean = false; bUsePanel: boolean = true; p: TPoint = (x:0; y:0); iWantedWidth: integer = 0; iWantedHeight: integer = 0; sMaybeMenuItem: TMenuItem = nil; sParam, sMaybeValue, sSearchedFavoriteTabsName: string; iMaybeIndex: integer; begin // 1. Check if we have the parameter "setup". sSearchedFavoriteTabsName := sNOSETUPPARAMLEGACY; for sParam in Params do if GetParamValue(sParam, 'setup', sMaybeValue) then sSearchedFavoriteTabsName := Trim(sMaybeValue); // 2. Check if we've seen the 'setup' parameter. if sSearchedFavoriteTabsName = sNOSETUPPARAMLEGACY then begin // If we not see the 'setup' parameter, we do thing as legacy, which means showing the menu to select the favorite tabs so user select it. DoParseParametersForPossibleTreeViewMenu(Params, gUseTreeViewMenuWithFavoriteTabsFromMenuCommand, gUseTreeViewMenuWithFavoriteTabsFromDoubleClick, bUseTreeViewMenu, bUsePanel, p); // We fill in the popup menu structure. gFavoriteTabsList.PopulateMenuWithFavoriteTabs(frmMain.pmFavoriteTabs, @DoOnClickMenuJobFavoriteTabs, ftmp_FAVTABSWITHCONFIG); Application.ProcessMessages; // Show the appropriate menu. if bUseTreeViewMenu then begin if not bUsePanel then iWantedHeight := 0 else begin iWantedWidth := frmMain.ActiveFrame.Width; iWantedHeight := frmMain.ActiveFrame.Height; end; sMaybeMenuItem := GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(frmMain.pmFavoriteTabs, tvmcFavoriteTabs, p.X, p.Y, iWantedWidth, iWantedHeight); if sMaybeMenuItem <> nil then sMaybeMenuItem.Click; end else begin frmMain.pmFavoriteTabs.Popup(p.X, p.Y); end; end else begin // If we've seen the 'setup' parameter, let's see if user provided a name or not. if sSearchedFavoriteTabsName<>'' then begin // If we got a name, let's attempt to load a setup with that name. iMaybeIndex := gFavoriteTabsList.GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName); if iMaybeIndex <> -1 then gFavoriteTabsList.LoadTabsFromXmlEntry(iMaybeIndex) else if gToolbarReportErrorWithCommands then msgError(Format(rsFavoriteTabs_SetupNotExist,[sSearchedFavoriteTabsName])); end else begin // If no name provided, it means user want to unselect current setup. gFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := DCGetNewGUID; end; end; end; { TMainCommands.DoCopyAllTabsToOppositeSide } procedure TMainCommands.DoCopyAllTabsToOppositeSide(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; localFileViewPage: TFileViewPage; localPath: string; TargetNotebook: TFileViewNotebook; iPageCountLimit: integer; begin if FOriginalNumberOfTabs <> -1 then iPageCountLimit := FOriginalNumberOfTabs else iPageCountLimit := ANotebook.PageCount; if ANotebook = FrmMain.LeftTabs then TargetNotebook := FrmMain.RightTabs else TargetNotebook := FrmMain.LeftTabs; for iPage := 0 to pred(iPageCountLimit) do begin localPath := ANotebook.Page[iPage].FileView.CurrentPath; localFileViewPage := TargetNotebook.NewPage(ANotebook.Page[iPage].FileView); // Workaround for Search Result File Source if localFileViewPage.FileView.FileSource is TSearchResultFileSource then SetFileSystemPath(localFileViewPage.FileView, localPath) else localFileViewPage.FileView.CurrentPath := localPath; end; end; { TMainCommands.cm_CopyAllTabsToOpposite } procedure TMainCommands.cm_CopyAllTabsToOpposite(const Params: array of string); begin DoActionOnMultipleTabs(Params, @DoCopyAllTabsToOppositeSide); end; { TMainCommands.cm_ConfigTreeViewMenus } procedure TMainCommands.cm_ConfigTreeViewMenus(const {%H-}Params: array of string); begin cm_Options(['TfrmOptionsTreeViewMenu']); end; { TMainCommands.cm_ConfigTreeViewMenusColors } procedure TMainCommands.cm_ConfigTreeViewMenusColors(const {%H-}Params: array of string); begin cm_Options(['TfrmOptionsTreeViewMenuColor']); end; procedure TMainCommands.cm_ConfigSavePos(const Params: array of string); begin frmMain.SaveWindowState; try gConfig.Save; except on E: Exception do msgError(E.Message); end; end; { TMainCommands.cm_ConfigSaveSettings } procedure TMainCommands.cm_ConfigSaveSettings(const Params: array of string); begin frmMain.ConfigSaveSettings(True); end; { TMainCommands.cm_ExecuteScript } procedure TMainCommands.cm_ExecuteScript(const Params: array of string); var FileName, sErrorMessage: String; Index, Count: Integer; Args: array of String; begin if Length(Params) > 0 then begin // Get script file name FileName:= PrepareParameter(Params[0]); if not mbFileExists(FileName) then begin msgError(Format(rsMsgFileNotFound, [Filename])); Exit; end; // Get script arguments Count:= Length(Params) - 1; if (Count > 0) then begin SetLength(Args, Count); for Index := 1 to Count do begin Args[Index - 1]:= PrepareParameter(Params[Index]); end; end; // Execute script if not ExecuteScript(FileName, Args, sErrorMessage) then if sErrorMessage <> '' then if msgYesNo(sErrorMessage + #$0A + rsMsgWantToConfigureLibraryLocation) then cm_Options(['TfrmOptionsPluginsGroup']); end; end; procedure TMainCommands.cm_FocusSwap(const Params: array of string); var AParam, AValue: String; begin with frmMain do begin // Select opposite panel if Length(Params) = 0 then begin case SelectedPanel of fpLeft: SetActiveFrame(fpRight); fpRight: SetActiveFrame(fpLeft); end; end else begin AParam:= GetDefaultParam(Params); if GetParamValue(AParam, 'side', AValue) then begin if AValue = 'left' then SetActiveFrame(fpLeft) else if AValue = 'right' then SetActiveFrame(fpRight); end; end; end; end; procedure TMainCommands.cm_Benchmark(const Params: array of string); begin OperationsManager.AddOperation(TBenchmarkOperation.Create(frmMain)); end; { TMainCommands.cm_ConfigArchivers } procedure TMainCommands.cm_ConfigArchivers(const {%H-}Params: array of string); begin cm_Options(['TfrmOptionsArchivers']); end; { TMainCommands.cm_ConfigTooltip } procedure TMainCommands.cm_ConfigTooltips(const {%H-}Params: array of string); begin cm_Options(['TfrmOptionsToolTips']); end; procedure TMainCommands.cm_OpenDriveByIndex(const Params: array of string); var Param: String; Index: Integer; AValue: String; SelectedPanel: TFilePanelSelect; begin if Length(Params) > 0 then begin SelectedPanel:= frmMain.SelectedPanel; for Param in Params do begin if GetParamValue(Param, 'index', AValue) then begin Index:= StrToIntDef(AValue, 1) - 1; end else if GetParamValue(Param, 'side', AValue) then begin if AValue = 'left' then SelectedPanel:= fpLeft else if AValue = 'right' then SelectedPanel:= fpRight else if AValue = 'inactive' then begin if frmMain.SelectedPanel = fpLeft then SelectedPanel:= fpRight else if frmMain.SelectedPanel = fpRight then SelectedPanel:= fpLeft; end; end end; if (Index >= 0) and (Index < frmMain.Drives.Count) then begin frmMain.SetPanelDrive(SelectedPanel, frmMain.Drives.Items[Index], True); end; end; end; { TMainCommands.cm_ConfigPlugins } procedure TMainCommands.cm_ConfigPlugins(const {%H-}Params: array of string); begin cm_Options(['TfrmOptionsPluginsGroup']); end; { TMainCommands.cm_AddNewSearch } procedure TMainCommands.cm_AddNewSearch(const Params: array of string); var TemplateName: String; begin if Length(Params) > 0 then TemplateName:= Params[0] else begin TemplateName:= gSearchDefaultTemplate; end; ShowFindDlg(frmMain.ActiveFrame, TemplateName, True); end; { TMainCommands.cm_ViewSearches } procedure TMainCommands.cm_ViewSearches(const {%H-}Params: array of string); var iIndex,iCurrentPage:integer; iSelectedWindow: integer = -1; slWindowTitleToOffer:TStringList; sTitleSelected:string=''; begin if ListOffrmFindDlgInstance.Count>0 then begin slWindowTitleToOffer:=TStringList.Create; try for iIndex:=0 to pred(ListOffrmFindDlgInstance.count) do slWindowTitleToOffer.Add(ListOffrmFindDlgInstance.frmFindDlgInstance[iIndex].Caption); if ShowInputListBox(rsListOfFindFilesWindows, rsSelectYouFindFilesWindow, slWindowTitleToOffer,sTitleSelected,iSelectedWindow) then begin if (iSelectedWindow>-1) AND (iSelectedWindow<ListOffrmFindDlgInstance.Count) then begin iCurrentPage:=ListOffrmFindDlgInstance.frmFindDlgInstance[iSelectedWindow].pgcSearch.ActivePageIndex; ListOffrmFindDlgInstance.frmFindDlgInstance[iSelectedWindow].ShowOnTop; ListOffrmFindDlgInstance.frmFindDlgInstance[iSelectedWindow].pgcSearch.ActivePageIndex:=iCurrentPage; end; end; finally FreeAndNil(slWindowTitleToOffer); end; end else begin msgOK(rsNoFindFilesWindowYet); end; end; { TMainCommands.cm_DeleteSearches } procedure TMainCommands.cm_DeleteSearches(const Params: array of string); var iIndex:integer; begin if ListOffrmFindDlgInstance.Count>0 then begin for iIndex := pred(ListOffrmFindDlgInstance.count) downto 0 do ListOffrmFindDlgInstance.frmFindDlgInstance[iIndex].CancelCloseAndFreeMem; end else begin msgOK(rsNoFindFilesWindowYet); end; end; { TMainCommands.cm_ConfigSearches } procedure TMainCommands.cm_ConfigSearches(const Params: array of string); begin cm_Options(['TfrmOptionsFileSearch']); end; { TMainCommands.cm_ConfigHotKeys } procedure TMainCommands.cm_ConfigHotKeys(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; Param, sCategoryName:string; begin sCategoryName:=''; Options := ShowOptions(TfrmOptionsHotkeys); Editor := Options.GetEditor(TfrmOptionsHotkeys); Application.ProcessMessages; for Param in Params do GetParamValue(Param, 'category', sCategoryName); TfrmOptionsHotkeys(Editor).TryToSelectThatCategory(sCategoryName); if Editor.CanFocus then Editor.SetFocus; end; { TMainCommands.cm_AddPlugin } procedure TMainCommands.cm_AddPlugin(const Params: array of string); const sPLUGIN_FAMILY = 'DSX|WCX|WDX|WFX|WLX|'; sPLUGIN64_FAMILY = 'DSX64|WCX64|WDX64|WFX64|WLX64|'; var Param, sValue, sMaybeFilename, sPluginFilename: string; PluginType: TPluginType; Editor: TOptionsEditor; Options: IOptionsDialog; sPluginSuffix: string; iPluginDispatcher: integer = -1; procedure SetPluginTypeBasedOnThisString(sSubString:string); begin sSubString := UpperCase(StringReplace(sSubString, '.', '', [rfReplaceAll])); if pos((sSubString+'|'), sPLUGIN_FAMILY) <> 0 then begin sPluginSuffix := sSubString; iPluginDispatcher := ((pos(sPluginSuffix, sPLUGIN_FAMILY) - 1) div 4); end else begin if pos((sSubString+'|'), sPLUGIN64_FAMILY) <> 0 then begin sPluginSuffix := LeftStr(sSubString, 3); iPluginDispatcher := ((pos(sPluginSuffix, sPLUGIN64_FAMILY) - 1) div 6); end; end; end; begin //1. We initialize our seeking variables. sPluginSuffix := ''; sPluginFilename := ''; //2. Let's parse the parameter to get the wanted ones. for Param in Params do begin if GetParamValue(Param, 'type', sValue) then SetPluginTypeBasedOnThisString(sValue) else if GetParamValue(Param, 'file', sValue) then sPluginFilename := RemoveQuotation(PrepareParameter(sValue)); end; //3. If user provided no parameter, let's launch the file requester to have user point a file. if Length(Params) = 0 then begin dmComData.OpenDialog.Filter:= ParseLineToFileFilter([rsFilterPluginFiles, '*.dsx;*.wcx;*.wdx;*.wfx;*.wlx;*.dsx64;*.wcx64;*.wdx64;*.wfx64;*.wlx64', rsFilterAnyFiles, AllFilesMask]); dmComData.OpenDialog.InitialDir := frmMain.ActiveNotebook.ActivePage.FileView.CurrentPath; if dmComData.OpenDialog.Execute then sPluginFilename := dmComData.OpenDialog.FileName; end; //3. If user provided just the filename, let's guess the plugin type based on file's extension. if (sPluginSuffix = '') AND (sPluginFilename <> '') then SetPluginTypeBasedOnThisString(ExtractFileExt(sPluginFilename)); //4. If user provided something but did not specify clear parematers, let's assume it's simply directly a filename. if (sPluginSuffix = '') AND (sPluginFilename = '') and (Length(Params) > 0) then begin sMaybeFilename := RemoveQuotation(PrepareParameter(Params[0])); if FileExists(sMaybeFilename) then begin sPluginFilename := sMaybeFilename; SetPluginTypeBasedOnThisString(ExtractFileExt(sPluginFilename)); end; end; //5. At this point, if we have a filename and have determine plugin type, let's attempt to add the plugin. if (sPluginSuffix <> '') AND (sPluginFilename <> '') then begin if FileExists(sPluginFilename) then begin Options := ShowOptions('TfrmOptionsPlugins' + sPluginSuffix); Application.ProcessMessages; case iPluginDispatcher of 0: Editor := Options.GetEditor(TfrmOptionsPluginsDSX); 1: Editor := Options.GetEditor(TfrmOptionsPluginsWCX); 2: Editor := Options.GetEditor(TfrmOptionsPluginsWDX); 3: Editor := Options.GetEditor(TfrmOptionsPluginsWFX); 4: Editor := Options.GetEditor(TfrmOptionsPluginsWLX); else exit; end; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsPluginsBase(Editor).ActualAddPlugin(sPluginFilename); end; end else if (Length(sMaybeFilename) > 0) then begin InstallPlugin(sMaybeFilename); end; end; procedure TMainCommands.cm_LoadList(const Params: array of string); var aFile: TFile; sValue: String; AParam: String; Index: Integer; AFileName: String; FileList: TFileTree; NewPage: TFileViewPage; StringList: TStringListUAC; Notebook: TFileViewNotebook; SearchResultFS: ISearchResultFileSource; begin with frmMain do begin AFileName:= EmptyStr; Notebook := ActiveNotebook; for AParam in Params do begin if GetParamValue(AParam, 'filename', sValue) then AFileName := sValue else if GetParamValue(AParam, 'side', sValue) then begin if sValue = 'left' then Notebook := LeftTabs else if sValue = 'right' then Notebook := RightTabs else if sValue = 'active' then Notebook := ActiveNotebook else if sValue = 'inactive' then Notebook := NotActiveNotebook; end; end; if (Length(AFileName) = 0) then begin msgError(rsMsgInvalidFilename); Exit; end; StringList:= TStringListUAC.Create; try StringList.LoadFromFile(AFileName); FileList := TFileTree.Create; for Index := 0 to StringList.Count - 1 do begin try aFile := TFileSystemFileSource.CreateFileFromFile(StringList[Index]); FileList.AddSubNode(aFile); except on EFileNotFound do ; end; end; SearchResultFS := TSearchResultFileSource.Create; SearchResultFS.AddList(FileList, TFileSystemFileSource.GetFileSource); NewPage := Notebook.ActivePage; NewPage.FileView.AddFileSource(SearchResultFS, SearchResultFS.GetRootDir); NewPage.FileView.FlatView := True; NewPage.MakeActive; except on E: Exception do msgError(E.Message); end; StringList.Free; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uluastd.pas��������������������������������������������������������������������0000644�0001750�0000144�00000057076�15104114162�015561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Standard Lua libraries with UTF-8 support Copyright (C) 2016-2018 Alexander Koblov (alexx2000@mail.ru) Based on Lua 5.1 - 5.3 source code Copyright (C) 1994-2018 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit uLuaStd; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Lua; procedure ReplaceLibrary(L : Plua_State); implementation uses CTypes, DCBasicTypes, DCOSUtils, uMicroLibC, uOSUtils; var CStdIn, CStdOut, CStdErr: Pointer; const EOF = -1; IO_PREFIX = '_IO_'; IO_INPUT_ = IO_PREFIX + 'input'; IO_OUTPUT_ = IO_PREFIX + 'output'; type PLStream = ^luaL_Stream; luaL_Stream = record f: Pointer; //* stream (NULL for incompletely created streams) */ closef: lua_CFunction; //* to close stream (NULL for closed streams) */ end; function os_pushresult(L: Plua_State; i: Boolean; const filename: PAnsiChar): cint; var en: cint; begin en := GetLastOSError; //* calls to Lua API may change this value */ if (i) then begin lua_pushboolean(L, true); Result:= 1; end else begin lua_pushnil(L); lua_pushfstring(L, '%s: %s', filename, PAnsiChar(mbSysErrorMessage(en))); lua_pushinteger(L, en); Result:= 3; end; end; function luaGetEnvironmentVariable(L : Plua_State) : Integer; cdecl; var AValue: String; begin Result:= 1; AValue:= mbGetEnvironmentVariable(luaL_checkstring(L, 1)); if (Length(AValue) = 0) then lua_pushnil(L) else begin lua_pushstring(L, PAnsiChar(AValue)); end; end; function luaSetEnvironmentVariable(L : Plua_State) : Integer; cdecl; begin Result:= 1; if (mbSetEnvironmentVariable(luaL_checkstring(L, 1),luaL_checkstring(L, 2))) then begin lua_pushinteger(L, 0); end else begin lua_pushinteger(L, -1); end; end; function luaUnsetEnvironmentVariable(L : Plua_State) : Integer; cdecl; begin Result:= 1; if (mbUnsetEnvironmentVariable(luaL_checkstring(L, 1))) then begin lua_pushinteger(L, 0); end else begin lua_pushinteger(L, -1); end; end; function luaExecute(L: Plua_State): Integer; cdecl; begin Result:= 1; lua_pushinteger(L, csystem(luaL_optstring(L, 1, nil))); end; function luaRemove(L: Plua_State): Integer; cdecl; var ok: Boolean; attr: TFileAttrs; filename: PAnsiChar; begin filename := luaL_checkstring(L, 1); attr:= mbFileGetAttr(filename); if (attr = faInvalidAttributes) then ok:= True else if FPS_ISDIR(attr) then ok:= mbRemoveDir(filename) else begin ok:= mbDeleteFile(filename); end; Result:= os_pushresult(L, ok, filename); end; function luaRenameFile(L: Plua_State): Integer; cdecl; var oldname, newname: PAnsiChar; begin oldname := luaL_checkstring(L, 1); newname := luaL_checkstring(L, 2); Result:= os_pushresult(L, mbRenameFile(oldname, newname), oldname); end; function luaTempName(L: Plua_State): Integer; cdecl; begin Result:= 1; lua_pushstring(L, PAnsiChar(GetTempName(EmptyStr))); end; function luaL_testudata (L: Plua_State; ud: cint; tname: PAnsiChar): Pointer; begin Result := lua_touserdata(L, ud); if (Result <> nil) then begin //* value is a userdata? */ if (lua_getmetatable(L, ud)) then begin //* does it have a metatable? */ luaL_getmetatable(L, tname); //* get correct metatable */ if (not lua_rawequal(L, -1, -2)) then //* not the same? */ Result := nil; //* value is a userdata with wrong metatable */ lua_pop(L, 2); //* remove both metatables */ end; end; end; function luaL_fileresult(L: Plua_State; i: Boolean; const filename: PAnsiChar): cint; var en: cint; begin en := cerrno; //* calls to Lua API may change this value */ if (i) then begin lua_pushboolean(L, true); Result:= 1; end else begin lua_pushnil(L); if Assigned(filename) then lua_pushfstring(L, '%s: %s', filename, cstrerror(en)) else lua_pushfstring(L, '%s', cstrerror(en)); lua_pushinteger(L, en); Result:= 3; end; end; function tolstream(L: Pointer): PLStream; inline; begin Result := PLStream(luaL_checkudata(L, 1, LUA_FILEHANDLE)); end; function isclosed(p: PLStream): Boolean; inline; begin Result := (p^.closef = nil); end; function io_type (L: Plua_State): cint; cdecl; var p: PLStream; begin luaL_checkany(L, 1); p := PLStream(luaL_testudata(L, 1, LUA_FILEHANDLE)); if (p = nil) then lua_pushnil(L) //* not a file */ else if (isclosed(p)) then lua_pushliteral(L, 'closed file') else lua_pushliteral(L, 'file'); Result := 1; end; function f_tostring (L: Plua_State): cint; cdecl; var p: PLStream; begin p := tolstream(L); if (isclosed(p)) then lua_pushliteral(L, 'file (closed)') else lua_pushfstring(L, 'file (%p)', p^.f); Result := 1; end; function tofile (L: Plua_State): Pointer; var p: PLStream; begin p := tolstream(L); if (isclosed(p)) then luaL_error(L, 'attempt to use a closed file'); lua_assert(p^.f <> nil); Result := p^.f; end; (* ** When creating file handles, always creates a 'closed' file handle ** before opening the actual file; so, if there is a memory error, the ** handle is in a consistent state. *) function newprefile (L: Plua_State): PLStream; begin Result := PLStream(lua_newuserdata(L, sizeof(luaL_Stream))); // WriteLn('newprefile: ', HexStr(Result)); Result^.closef := nil; //* mark file handle as 'closed' */ luaL_getmetatable(L, LUA_FILEHANDLE); lua_setmetatable(L, -2); end; (* ** Calls the 'close' function from a file handle. *) function aux_close (L: Plua_State): cint; cdecl; var p: PLStream; cf: lua_CFunction; begin p := tolstream(L); cf := p^.closef; p^.closef := nil; //* mark stream as closed */ Result := cf(L); //* close it */ end; function f_close (L: Plua_State): cint; cdecl; begin tofile(L); //* make sure argument is an open stream */ Result := aux_close(L); end; function io_close (L: Plua_State): cint; cdecl; begin if (lua_isnone(L, 1)) then //* no argument? */ lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT_); //* use standard output */ Result := f_close(L); end; function f_gc (L: Plua_State): cint; cdecl; var p: PLStream; begin p := tolstream(L); // WriteLn('f_gc: ', hexStr(p)); if (p^.f <> CStdIn) and (p^.f <> CStdOut) and (p^.f <> CStdErr) then begin //* ignore closed and incompletely open files */ if (not isclosed(p)) and (p^.f <> nil) then aux_close(L); end; Result := 0; end; (* ** function to close regular files *) function io_fclose (L: Plua_State): cint; cdecl; var p: PLStream; begin p := tolstream(L); Result := cfclose(p^.f); // p^.closef := nil; Result := luaL_fileresult(L, (Result = 0), nil); end; function newfile (L: Plua_State): PLStream; begin Result := newprefile(L); Result^.f := nil; Result^.closef := @io_fclose; end; procedure opencheck (L: Plua_State; const fname, mode: pansichar); var p: PLStream; begin p := newfile(L); p^.f := cfopen(fname, mode); if (p^.f = nil) then luaL_error(L, 'cannot open file "%s" (%s)', fname, cstrerror(cerrno)); end; function io_open (L: Plua_State): cint; cdecl; var p: PLStream; filename, mode: pansichar; begin filename := luaL_checkstring(L, 1); mode := luaL_optstring(L, 2, 'r'); p := newfile(L); p^.f := cfopen(filename, mode); if (p^.f <> nil) then Result := 1 else begin Result := luaL_fileresult(L, false, filename); end; end; (* ** function to close 'popen' files *) function io_pclose (L: Plua_State): cint; cdecl; var p: PLStream; begin p := tolstream(L); if Assigned(luaL_execresult) then Result := luaL_execresult(L, cpclose(p^.f)) else begin Result := cpclose(p^.f); Result := luaL_fileresult(L, (Result = 0), nil); end; end; function io_popen (L: Plua_State): cint; cdecl; var p: PLStream; filename, mode: pansichar; begin filename := luaL_checkstring(L, 1); mode := luaL_optstring(L, 2, 'r'); p := newprefile(L); p^.f := cpopen(filename, mode); p^.closef := @io_pclose; if (p^.f <> nil) then Result := 1 else begin Result := luaL_fileresult(L, false, filename); end; end; function io_tmpfile (L: Plua_State): cint; cdecl; var p: PLStream; begin p := newfile(L); p^.f := ctmpfile(); if (p^.f <> nil) then Result := 1 else begin Result := luaL_fileresult(L, false, nil); end; end; function getiofile (L: Plua_State; findex: PAnsiChar): Pointer; var p: PLStream; begin lua_getfield(L, LUA_REGISTRYINDEX, findex); p := PLStream(lua_touserdata(L, -1)); if (isclosed(p)) then luaL_error(L, 'standard %s file is closed', findex + Length(IO_PREFIX)); Result := p^.f; end; function g_iofile (L: Plua_State; f, mode: pansichar): cint; cdecl; var filename: PAnsiChar; begin if (not lua_isnoneornil(L, 1)) then begin filename := lua_tocstring(L, 1); if Assigned(filename) then opencheck(L, filename, mode) else begin tofile(L); //* check that it's a valid file handle */ lua_pushvalue(L, 1); end; lua_setfield(L, LUA_REGISTRYINDEX, f); end; //* return current value */ lua_getfield(L, LUA_REGISTRYINDEX, f); Result := 1; end; function io_input (L: Plua_State): cint; cdecl; begin Result := g_iofile(L, IO_INPUT_, 'r'); end; function io_output (L: Plua_State): cint; cdecl; begin Result := g_iofile(L, IO_OUTPUT_, 'w'); end; function io_readline (L: Plua_State): cint; cdecl; forward; procedure aux_lines (L: Plua_State; toclose: boolean); cdecl; var i, n: cint; begin n := lua_gettop(L) - 1; //* number of arguments to read */ //* ensure that arguments will fit here and into 'io_readline' stack */ luaL_argcheck(L, n <= LUA_MINSTACK - 3, LUA_MINSTACK - 3, 'too many options'); lua_pushvalue(L, 1); //* file handle */ lua_pushinteger(L, n); //* number of arguments to read */ lua_pushboolean(L, toclose); //* close/not close file when finished */ for i := 1 to n do lua_pushvalue(L, i + 1); //* copy arguments */ lua_pushcclosure(L, @io_readline, 3 + n); end; function f_lines (L: Plua_State): cint; cdecl; begin tofile(L); //* check that it's a valid file handle */ aux_lines(L, false); Result := 1; end; function io_lines (L: Plua_State): cint; cdecl; var toclose: boolean; filename: PAnsiChar; begin if (lua_isnone(L, 1)) then lua_pushnil(L); //* at least one argument */ if (lua_isnil(L, 1)) then begin //* no file name? */ lua_getfield(L, LUA_REGISTRYINDEX, IO_INPUT_); //* get default input */ lua_replace(L, 1); //* put it at index 1 */ tofile(L); //* check that it's a valid file handle */ toclose := false; //* do not close it after iteration */ end else begin //* open a new file */ filename := luaL_checkstring(L, 1); opencheck(L, filename, 'r'); lua_replace(L, 1); //* put file at index 1 */ toclose := true; //* close it after iteration */ end; aux_lines(L, toclose); Result := 1; end; (* ** {====================================================== ** READ ** ======================================================= *) function read_number (L: Plua_State; f: Pointer): cint; cdecl; var d: lua_Number; begin if (cfscanf(f, LUA_NUMBER_SCAN, @d) = 1) then begin lua_pushnumber(L, d); Result := 1; end else begin lua_pushnil(L); //* "result" to be removed */ Result := 0; //* read fails */ end; end; function test_eof (L: Plua_State; f: Pointer): cint; cdecl; var c: cint; begin c := cgetc(f); cungetc(c, f); //* no-op when c == EOF */ lua_pushliteral(L, ''); Result := cint(LongBool(c <> EOF)); end; function read_line (L: Plua_State; f: Pointer; chop: cint): cint; cdecl; var k: csize_t; p: PAnsiChar; b: luaL_Buffer; begin luaL_buffinit(L, @b); while (True) do begin p := luaL_prepbuffer(@b); if (cfgets(p, LUAL_BUFFERSIZE, f) = nil) then //* eof? */ begin luaL_pushresult(@b); //* close buffer */ Exit(cint(lua_objlen(L, -1) > 0)); //* check whether read something */ end; k := strlen(p); if (k = 0) or (p[k - 1] <> #10) then luaL_addsize(@b, k) else begin luaL_addsize(@b, k - chop); //* chop 'eol' if needed */ luaL_pushresult(@b); //* close buffer */ Exit(1); //* read at least an `eol' */ end; end; end; procedure read_all (L: Plua_State; f: Pointer); cdecl; var nr: csize_t; p: PAnsiChar; b: luaL_Buffer; begin luaL_buffinit(L, @b); repeat //* read file in chunks of LUAL_BUFFERSIZE bytes */ p := luaL_prepbuffer(@b); nr := cfread(p, sizeof(AnsiChar), LUAL_BUFFERSIZE, f); luaL_addsize(@b, nr); until (nr <> LUAL_BUFFERSIZE); luaL_pushresult(@b); //* close buffer */ end; function read_chars (L: Plua_State; f: Pointer; n: csize_t): cint; cdecl; var rlen: csize_t; //* how much to read */ nr: csize_t; //* number of chars actually read */ p: PAnsiChar; b: luaL_Buffer; begin luaL_buffinit(L, @b); rlen := LUAL_BUFFERSIZE; //* try to read that much each time */ repeat p := luaL_prepbuffer(@b); if (rlen > n) then rlen := n; //* cannot read more than asked */ nr := cfread(p, sizeof(AnsiChar), rlen, f); luaL_addsize(@b, nr); n -= nr; //* still have to read 'n' chars */ until not ((n > 0) and (nr = rlen)); //* until end of count or eof */ luaL_pushresult(@b); //* close buffer */ Result := cint((n = 0) or (lua_objlen(L, -1) > 0)); end; function g_read (L: Plua_State; f: Pointer; first: cint): cint; cdecl; var k: csize_t; p: PAnsiChar; n, nargs, success: cint; begin nargs := lua_gettop(L) - 1; cclearerr(f); if (nargs = 0) then begin //* no arguments? */ success := read_line(L, f, 1); n := first + 1; //* to return 1 result */ end else begin //* ensure stack space for all results and for auxlib's buffer */ luaL_checkstack(L, nargs + LUA_MINSTACK, 'too many arguments'); success := 1; n := first; while (nargs <> 0) and (success <> 0) do begin if (lua_type(L, n) = LUA_TNUMBER) then begin k := csize_t(luaL_checkinteger(L, n)); if (k = 0) then success := test_eof(L, f) else success := read_chars(L, f, k); end else begin p := luaL_checkstring(L, n); if (p^ = '*') then Inc(p); //* skip optional '*' (for compatibility) */ case (p^) of 'n': //* number */ success := read_number(L, f); 'l': //* line */ success := read_line(L, f, 1); 'L': //* line with end-of-line */ success := read_line(L, f, 0); 'a': //* file */ begin read_all(L, f); //* read entire file */ success := 1; //* always success */ end; else Exit(luaL_argerror(L, n, 'invalid format')); end; end; Inc(n); Dec(nargs); end; end; if (cferror(f) <> 0) then Exit(luaL_fileresult(L, false, nil)); if (success = 0) then begin lua_pop(L, 1); //* remove last result */ lua_pushnil(L); //* push nil instead */ end; Result := n - first; end; function io_read (L: Plua_State): cint; cdecl; begin Result := g_read(L, getiofile(L, IO_INPUT_), 1); end; function f_read (L: Plua_State): cint; cdecl; begin Result := g_read(L, tofile(L), 2); end; function io_readline (L: Plua_State): cint; cdecl; var i, n: cint; p: PLStream; begin p := PLStream(lua_touserdata(L, lua_upvalueindex(1))); n := cint(lua_tointeger(L, lua_upvalueindex(2))); if (isclosed(p)) then //* file is already closed? */ Exit(luaL_error(L, 'file is already closed')); lua_settop(L , 1); luaL_checkstack(L, n, 'too many arguments'); for i := 1 to n do //* push arguments to 'g_read' */ lua_pushvalue(L, lua_upvalueindex(3 + i)); n := g_read(L, p^.f, 2); //* 'n' is number of results */ lua_assert(n > 0); //* should return at least a nil */ if (lua_toboolean(L, -n)) then //* read at least one value? */ Exit(n); //* return them */ //* first result is nil: EOF or error */ if (n > 1) then begin //* is there error information? */ //* 2nd result is error message */ Exit(luaL_error(L, '%s', lua_tocstring(L, -n + 1))); end; if (lua_toboolean(L, lua_upvalueindex(3))) then begin //* generator created file? */ lua_settop(L, 0); lua_pushvalue(L, lua_upvalueindex(1)); aux_close(L); //* close it */ end; Result := 0; end; //* }====================================================== */ function g_write (L: Plua_State; f: Pointer; arg: cint): cint; cdecl; var k: csize_t; s: PAnsiChar; len, nargs: cint; status: Boolean = True; begin nargs := lua_gettop(L) - arg; while (nargs > 0) do begin if (lua_type(L, arg) = LUA_TNUMBER) then begin //* optimization: could be done exactly as for strings */ if Assigned(lua_isinteger) and lua_isinteger(L, arg) then len := cfprintf(f, LUA_INTEGER_FMT, lua_tointeger(L, arg)) else len := cfprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)); status := status and (len > 0); end else begin s := luaL_checklstring(L, arg, @k); status := status and (cfwrite(s, sizeof(AnsiChar), k, f) = k); end; Inc(arg); Dec(nargs); end; if (status) then Result := 1 //* file handle already on stack top */ else Result := luaL_fileresult(L, status, nil); end; function io_write (L: Plua_State): cint; cdecl; begin Result := g_write(L, getiofile(L, IO_OUTPUT_), 1); end; function f_write (L: Plua_State): cint; cdecl; var f: Pointer; begin f := tofile(L); lua_pushvalue(L, 1); //* push file at the stack top (to be returned) */ Result := g_write(L, f, 2); end; function f_seek (L: Plua_State): cint; cdecl; const mode: array[0..2] of cint = (0, 1, 2); modenames: array[0..3] of PAnsiChar = ('set', 'cur', 'end', nil); var op: cint; f: Pointer; offset: clong; begin f := tofile(L); op := luaL_checkoption(L, 2, 'cur', modenames); offset := luaL_optlong(L, 3, 0); op := cfseek(f, offset, mode[op]); if (op <> 0) then Result := luaL_fileresult(L, false, nil) //* error */ else begin lua_pushinteger(L, lua_Integer(cftell(f))); Result := 1; end; end; function f_setvbuf (L: Plua_State): cint; cdecl; const mode: array[0..2] of cint = (_IONBF, _IOFBF, _IOLBF); modenames: array[0..3] of PAnsiChar = ('no', 'full', 'line', nil); var op: cint; f: Pointer; sz: lua_Integer; begin f := tofile(L); op := luaL_checkoption(L, 2, nil, modenames); sz := luaL_optinteger(L, 3, LUAL_BUFFERSIZE); Result := csetvbuf(f, nil, mode[op], csize_t(sz)); Result := luaL_fileresult(L, Result = 0, nil); end; function io_flush (L: Plua_State): cint; cdecl; begin Result := luaL_fileresult(L, cfflush(getiofile(L, IO_OUTPUT_)) = 0, nil); end; function f_flush (L: Plua_State): cint; cdecl; begin Result := luaL_fileresult(L, cfflush(tofile(L)) = 0, nil); end; var io_noclose_: lua_CFunction; (* ** function to (not) close the standard files stdin, stdout, and stderr *) function io_noclose (L: Plua_State): cint; cdecl; var p: PLStream; begin p := tolstream(L); p^.closef := io_noclose_; //* keep file opened */ lua_pushnil(L); lua_pushliteral(L, 'cannot close standard file'); Result := 2; end; procedure createstdfile (L: Plua_State; f: Pointer; k, fname: PAnsiChar); var p: PLStream; begin p := newprefile(L); p^.f := f; p^.closef := @io_noclose; if (k <> nil) then begin lua_pushvalue(L, -1); lua_setfield(L, LUA_REGISTRYINDEX, k); //* add file to registry */ end; lua_setfield(L, -2, fname); //* add file to module */ end; procedure luaP_register(L : Plua_State; n : PChar; f : lua_CFunction); begin lua_pushcfunction(L, f); lua_setfield(L, -2, n); end; procedure ReplaceLibrary(L : Plua_State); begin //* Replace functions for 'os' library */ lua_getglobal(L, LUA_OSLIBNAME); luaP_register(L, 'remove', @luaRemove); luaP_register(L, 'execute', @luaExecute); luaP_register(L, 'tmpname', @luaTempName); luaP_register(L, 'rename', @luaRenameFile); luaP_register(L, 'getenv', @luaGetEnvironmentVariable); luaP_register(L, 'setenv', @luaSetEnvironmentVariable); luaP_register(L, 'unsetenv', @luaUnsetEnvironmentVariable); lua_pop(L, 1); io_noclose_:= @io_noclose; //* Replace functions for 'io' library */ lua_getglobal(L, LUA_IOLIBNAME); luaP_register(L, 'close', @io_close); luaP_register(L, 'flush', @io_flush); luaP_register(L, 'input', @io_input); luaP_register(L, 'lines', @io_lines); luaP_register(L, 'open', @io_open); luaP_register(L, 'output', @io_output); luaP_register(L, 'popen', @io_popen); luaP_register(L, 'read', @io_read); luaP_register(L, 'tmpfile', @io_tmpfile); luaP_register(L, 'type', @io_type); luaP_register(L, 'write', @io_write); lua_pop(L, 1); //* Create metatable for file handles */ luaL_newmetatable(L, LUA_FILEHANDLE); lua_pushvalue(L, -1); //* push metatable */ lua_setfield(L, -2, '__index'); //* metatable.__index = metatable */ //* add file methods to new metatable */ luaP_register(L, 'close', @f_close); luaP_register(L, 'flush', @f_flush); luaP_register(L, 'lines', @f_lines); luaP_register(L, 'read', @f_read); luaP_register(L, 'seek', @f_seek); luaP_register(L, 'setvbuf', @f_setvbuf); luaP_register(L, 'write', @f_write); luaP_register(L, '__gc', @f_gc); luaP_register(L, '__tostring', @f_tostring); lua_pop(L, 1); //* pop new metatable */ //* get and set default files */ lua_getglobal(L, LUA_IOLIBNAME); lua_getfield(L, -1, 'stdin'); CStdIn := PPointer(lua_touserdata(L, -1))^; lua_pop(L, 1); lua_getfield(L, -1, 'stdout'); CStdOut := PPointer(lua_touserdata(L, -1))^; lua_pop(L, 1); lua_getfield(L, -1, 'stderr'); CStdErr := PPointer(lua_touserdata(L, -1))^; lua_pop(L, 1); createstdfile(L, CStdIn, IO_INPUT_, 'stdin'); createstdfile(L, CStdOut, IO_OUTPUT_, 'stdout'); createstdfile(L, CStdErr, nil, 'stderr'); lua_pop(L, 1); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uluapas.pas��������������������������������������������������������������������0000644�0001750�0000144�00000064161�15104114162�015543� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Push some useful functions to Lua Copyright (C) 2016-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uLuaPas; {$mode objfpc}{$H+} interface uses uDCUtils, Classes, SysUtils, Lua; procedure RegisterPackages(L : Plua_State); procedure SetPackagePath(L: Plua_State; const Path: String); function LuaPCall(L : Plua_State; nargs, nresults : Integer): Boolean; function ExecuteScript(const FileName: String; Args: array of String; var sErrorToReportIfAny:string): Boolean; implementation uses Forms, Dialogs, Clipbrd, LazUTF8, LConvEncoding, uLng, DCOSUtils, DCConvertEncoding, fMain, uFormCommands, uOSUtils, uGlobs, uLog, uClipboard, uShowMsg, uLuaStd, uFindEx, uConvEncoding, uFileProcs, uFilePanelSelect, uMasks, LazFileUtils, Character, UnicodeData, DCBasicTypes, Variants, uFile, uFileProperty, uFileSource, uFileSourceProperty, uFileSourceUtil, uFileSystemFileSource, uDefaultFilePropertyFormatter, DCDateTimeUtils, uShellExecute; procedure luaPushSearchRec(L : Plua_State; Rec: PSearchRecEx); begin lua_pushlightuserdata(L, Rec); lua_newtable(L); lua_pushinteger(L, Rec^.Time); lua_setfield(L, -2, 'Time'); lua_pushinteger(L, Rec^.Size); lua_setfield(L, -2, 'Size'); lua_pushinteger(L, Rec^.Attr); lua_setfield(L, -2, 'Attr'); lua_pushstring(L, Rec^.Name); lua_setfield(L, -2, 'Name'); end; function luaFindFirst(L : Plua_State) : Integer; cdecl; var Path: String; Rec: PSearchRecEx; begin New(Rec); Path:= lua_tostring(L, 1); if FindFirstEx(Path, fffPortable, Rec^) = 0 then begin Result:= 2; luaPushSearchRec(L, Rec); end else begin FindCloseEx(Rec^); lua_pushnil(L); Dispose(Rec); Result:= 1; end; end; function luaFindNext(L : Plua_State) : Integer; cdecl; var Rec: PSearchRecEx; begin Rec:= lua_touserdata(L, 1); if (Rec <> nil) and (FindNextEx(Rec^) = 0) then begin Result:= 2; luaPushSearchRec(L, Rec); end else begin lua_pushnil(L); Result:= 1; end; end; function luaFindClose(L : Plua_State) : Integer; cdecl; var Rec: PSearchRecEx; begin Rec:= lua_touserdata(L, 1); if Assigned(Rec) then begin FindCloseEx(Rec^); Dispose(Rec); end; Result:= 0; end; function luaSleep(L : Plua_State) : Integer; cdecl; begin Result:= 0; Sleep(lua_tointeger(L, 1)); end; function luaGetTickCount(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushinteger(L, GetTickCount64); end; function luaFileGetAttr(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushinteger(L, FileGetAttr(mbFileNameToNative(lua_tostring(L, 1)))); end; function luaFileExists(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushboolean(L, mbFileExists(lua_tostring(L, 1))); end; function luaDirectoryExists(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushboolean(L, mbDirectoryExists(lua_tostring(L, 1))); end; function luaCreateDirectory(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushboolean(L, mbForceDirectory(lua_tostring(L, 1))); end; function luaRemoveDirectory(L : Plua_State) : Integer; cdecl; var sDir: String; Res: Boolean = True; begin Result:= 1; sDir:= lua_tostring(L, 1); if mbDirectoryExists(sDir) then begin DelTree(sDir); if mbDirectoryExists(sDir) then Res:= False; end; lua_pushboolean(L, Res); end; function luaCreateHardLink(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushboolean(L, CreateHardLink(lua_tostring(L, 1), lua_tostring(L, 2))); end; function luaCreateSymbolicLink(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushboolean(L, CreateSymLink(lua_tostring(L, 1), lua_tostring(L, 2))); end; function luaReadSymbolicLink(L : Plua_State) : Integer; cdecl; var Path: String; Recursive: Boolean = False; begin Result:= 1; Path:= lua_tostring(L, 1); if lua_isboolean(L, 2) then begin Recursive:= lua_toboolean(L, 2) end; if Recursive then Path:= mbReadAllLinks(Path) else begin Path:= ReadSymLink(Path); end; lua_pushstring(L, Path); end; function luaExtractFilePath(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFilePath(lua_tostring(L, 1))); end; function luaExtractFileDrive(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFileDrive(lua_tostring(L, 1))); end; function luaExtractFileName(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFileName(lua_tostring(L, 1))); end; function luaExtractFileExt(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFileExt(lua_tostring(L, 1))); end; function luaMatchesMask(L : Plua_State) : Integer; cdecl; var FileName: String; FileMask: String; AOptions: TMaskOptions; begin Result:= 1; FileName:= lua_tostring(L, 1); FileMask:= lua_tostring(L, 2); if lua_isnumber(L, 3) then AOptions:= TMaskOptions(Integer(lua_tointeger(L, 3))) else begin AOptions:= []; end; lua_pushboolean(L, MatchesMask(FileName, FileMask, AOptions)); end; function luaMatchesMaskList(L : Plua_State) : Integer; cdecl; var FileName: String; FileMask: String; AOptions: TMaskOptions; ASeparatorCharset: String; begin Result:= 1; FileName:= lua_tostring(L, 1); FileMask:= lua_tostring(L, 2); if lua_isstring(L, 3) then ASeparatorCharset:= lua_tostring(L, 3) else begin ASeparatorCharset:= ';'; end; if lua_isnumber(L, 4) then AOptions:= TMaskOptions(Integer(lua_tointeger(L, 4))) else begin AOptions:= []; end; lua_pushboolean(L, MatchesMaskList(FileName, FileMask, ASeparatorCharset, AOptions)); end; function luaExtractFileDir(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, ExtractFileDir(lua_tostring(L, 1))); end; function luaGetAbsolutePath(L : Plua_State) : Integer; cdecl; var FileName, BaseDir: String; begin Result:= 1; FileName:= lua_tostring(L, 1); BaseDir:= lua_tostring(L, 2); lua_pushstring(L, CreateAbsolutePath(FileName, BaseDir)); end; function luaGetRelativePath(L : Plua_State) : Integer; cdecl; var FileName, BaseDir: String; begin Result:= 1; FileName:= lua_tostring(L, 1); BaseDir:= lua_tostring(L, 2); lua_pushstring(L, CreateRelativePath(FileName, BaseDir)); end; function luaGetTempName(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, GetTempName(GetTempFolderDeletableAtTheEnd)); end; function utf8_next(L: Plua_State): Integer; cdecl; var S: String; C: Integer; Len: size_t; P: PAnsiChar; Index: Integer; begin P:= lua_tolstring(L, lua_upvalueindex(1), @Len); Index:= lua_tointeger(L, lua_upvalueindex(2)); if (Index >= Integer(Len)) then Exit(0); P:= P + Index; C:= UTF8CodepointSize(P); // Partial UTF-8 character if (Index + C) > Len then Exit(0); SetString(S, P, C); lua_pushinteger(L, Index + C); lua_replace(L, lua_upvalueindex(2)); lua_pushinteger(L, Index + 1); lua_pushstring(L, S); Result:= 2; end; function luaNext(L : Plua_State) : Integer; cdecl; begin lua_pushvalue(L, 1); lua_pushnumber(L, 0); lua_pushcclosure(L, @utf8_next, 2); Result:= 1; end; function luaPos(L : Plua_State) : Integer; cdecl; var Offset: SizeInt = 1; Search, Source: String; begin Result:= 1; Search:= lua_tostring(L, 1); Source:= lua_tostring(L, 2); if lua_isnumber(L, 3) then begin Offset:= lua_tointeger(L, 3) end; lua_pushinteger(L, UTF8Pos(Search, Source, Offset)); end; function luaCopy(L : Plua_State) : Integer; cdecl; var S: String; Start, Count: PtrInt; begin Result:= 1; S:= lua_tostring(L, 1); Start:= lua_tointeger(L, 2); Count:= lua_tointeger(L, 3); S:= UTF8Copy(S, Start, Count); lua_pushstring(L, S); end; function luaLength(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushinteger(L, UTF8Length(lua_tostring(L, 1))); end; function luaUpperCase(L : Plua_State) : Integer; cdecl; var S: String; begin Result:= 1; S:= lua_tostring(L, 1); S:= UTF8UpperCase(S); lua_pushstring(L, S); end; function luaLowerCase(L : Plua_State) : Integer; cdecl; var S: String; begin Result:= 1; S:= lua_tostring(L, 1); S:= UTF8LowerCase(S); lua_pushstring(L, S); end; function luaConvertEncoding(L : Plua_State) : Integer; cdecl; var S, FromEnc, ToEnc: String; begin Result:= 1; S:= lua_tostring(L, 1); FromEnc:= lua_tostring(L, 2); ToEnc:= lua_tostring(L, 3); lua_pushstring(L, ConvertEncoding(S, FromEnc, ToEnc)); end; function luaDetectEncoding(L : Plua_State) : Integer; cdecl; var S: String; begin Result:= 1; S:= lua_tostring(L, 1); lua_pushstring(L, NormalizeEncoding(DetectEncoding(S))); end; function char_prepare(L : Plua_State; out Index: Integer): UnicodeString; var Len: size_t; P: PAnsiChar; begin P:= lua_tolstring(L, 1, @Len); Result:= UTF8ToUTF16(P, Len); if lua_isnumber(L, 2) then Index:= Integer(lua_tointeger(L, 2)) else begin Index:= 1; end; end; function luaIsLower(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushboolean(L, TCharacter.IsLower(S, Index)); Result:= 1; except Result:= 0; end; end; function luaIsUpper(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushboolean(L, TCharacter.IsUpper(S, Index)); Result:= 1; except Result:= 0; end; end; function luaIsDigit(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushboolean(L, TCharacter.IsDigit(S, Index)); Result:= 1; except Result:= 0; end; end; function luaIsLetter(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushboolean(L, TCharacter.IsLetter(S, Index)); Result:= 1; except Result:= 0; end; end; function luaIsLetterOrDigit(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushboolean(L, TCharacter.IsLetterOrDigit(S, Index)); Result:= 1; except Result:= 0; end; end; function luaGetUnicodeCategory(L : Plua_State) : Integer; cdecl; var Index: Integer; S: UnicodeString; begin S:= char_prepare(L, Index); try lua_pushinteger(L, lua_Integer(TCharacter.GetUnicodeCategory(S, Index))); Result:= 1; except Result:= 0; end; end; function luaClipbrdClear(L : Plua_State) : Integer; cdecl; begin Result:= 0; Clipboard.Clear; end; function luaClipbrdGetText(L : Plua_State) : Integer; cdecl; begin Result:= 1; lua_pushstring(L, Clipboard.AsText); end; function luaClipbrdSetText(L : Plua_State) : Integer; cdecl; begin Result:= 0; ClipboardSetText(luaL_checkstring(L, 1)); end; function luaClipbrdSetHtml(L : Plua_State) : Integer; cdecl; begin Result:= 0; Clipboard.SetAsHtml(luaL_checkstring(L, 1)); end; function luaMessageBox(L : Plua_State) : Integer; cdecl; var flags: Integer; text, caption: PAnsiChar; begin Result:= 1; text:= luaL_checkstring(L, 1); caption:= luaL_checkstring(L, 2); flags:= Integer(lua_tointeger(L, 3)); flags:= ShowMessageBox(text, caption, flags); lua_pushinteger(L, flags); end; function luaInputQuery(L : Plua_State) : Integer; cdecl; var AValue: String; AMaskInput: Boolean; APrompt, ACaption: PAnsiChar; begin Result:= 1; ACaption:= luaL_checkstring(L, 1); APrompt:= luaL_checkstring(L, 2); AMaskInput:= lua_toboolean(L, 3); AValue:= luaL_checkstring(L, 4); AMaskInput:= ShowInputQuery(ACaption, APrompt, AMaskInput, AValue); lua_pushboolean(L, AMaskInput); if AMaskInput then begin Result:= 2; lua_pushstring(L, AValue); end; end; function luaInputListBox(L : Plua_State) : Integer; cdecl; var AValue: String = ''; AIndex, ACount: Integer; AStringList: TStringList; APrompt, ACaption: PAnsiChar; begin Result:= 1; if (lua_gettop(L) < 3) or (not lua_istable(L, 3)) then begin lua_pushnil(L); Exit; end; ACaption:= lua_tocstring(L, 1); APrompt:= lua_tocstring(L, 2); ACount:= lua_objlen(L, 3); AStringList:= TStringList.Create; for AIndex := 1 to ACount do begin lua_rawgeti(L, 3, AIndex); AStringList.Add(luaL_checkstring(L, -1)); lua_pop(L, 1); end; if lua_isstring(L, 4) then begin AValue:= lua_tostring(L, 4); end; if ShowInputListBox(ACaption, APrompt, AStringList, AValue, AIndex) then begin Result:= 2; lua_pushstring(L, AValue); lua_pushinteger(L, AIndex + 1); end else begin lua_pushnil(L); end; AStringList.Free; end; function luaLogWrite(L : Plua_State) : Integer; cdecl; var sText: String; bForce: Boolean = True; bLogFile: Boolean = False; LogMsgType: TLogMsgType = lmtInfo; begin Result:= 0; sText:= lua_tostring(L, 1); if lua_isnumber(L, 2) then LogMsgType:= TLogMsgType(lua_tointeger(L, 2)); if lua_isboolean(L, 3) then bForce:= lua_toboolean(L, 3); if lua_isboolean(L, 4) then bLogFile:= lua_toboolean(L, 4); logWrite(sText, LogMsgType, bForce, bLogFile); end; function luaExecuteCommand(L : Plua_State) : Integer; cdecl; var Index, Count: Integer; Command: String; Args: array of String; Res: TCommandFuncResult; begin Result:= 1; Res:= cfrNotFound; Count:= lua_gettop(L); if Count > 0 then begin // Get command Command:= lua_tostring(L, 1); // Get parameters SetLength(Args, Count - 1); for Index:= 2 to Count do Args[Index - 2]:= lua_tostring(L, Index); // Execute internal command Res:= frmMain.Commands.Commands.ExecuteCommand(Command, Args); Application.ProcessMessages; end; lua_pushboolean(L, Res = cfrSuccess); end; function luaCurrentPanel(L : Plua_State) : Integer; cdecl; var Count: Integer; begin Result:= 1; Count:= lua_gettop(L); lua_pushinteger(L, Integer(frmMain.SelectedPanel)); if (Count > 0) then frmMain.SetActiveFrame(TFilePanelSelect(lua_tointeger(L, 1))); end; function luaExecute(L: Plua_State): Integer; cdecl; begin Result:= 1; lua_pushboolean(L, ExecCmdFork(luaL_optstring(L, 1, nil))); end; function luaExpandEnv(L : Plua_State) : Integer; cdecl; var S: String; Special: Boolean = False; begin Result:= 1; S:= lua_tostring(L, 1); if lua_isboolean(L, 2) then Special:= lua_toboolean(L, 2); if Special then lua_pushstring(L, ReplaceEnvVars(S)) else begin lua_pushstring(L, mbExpandEnvironmentStrings(S)); end; end; function luaExpandVar(L : Plua_State) : Integer; cdecl; var S: String; begin Result:= 1; S:= lua_tostring(L, 1); lua_pushstring(L, ReplaceVarParams(S)); end; function luaFileSetTime(L : Plua_State) : Integer; cdecl; var sFile: String; ModificationTime, CreationTime, LastAccessTime: DCBasicTypes.TFileTime; begin Result:= 1; sFile:= lua_tostring(L, 1); ModificationTime:= UnixFileTimeToFileTime(lua_tointeger(L, 2)); CreationTime:= UnixFileTimeToFileTime(lua_tointeger(L, 3)); LastAccessTime:= UnixFileTimeToFileTime(lua_tointeger(L, 4)); lua_pushboolean(L, mbFileSetTime(sFile, ModificationTime, CreationTime, LastAccessTime)); end; function luaGetFileProperty(L : Plua_State) : Integer; cdecl; var AFile: TFile; AFileSource: IFileSource; AValue: Variant; FilePropertiesNeeded: TFilePropertiesTypes; AIndex: Integer; const FileFuncToProp: array [0..9] of TFilePropertiesTypes = ([fpSize], [fpAttributes], [fpOwner], [fpOwner], [fpModificationTime], [fpCreationTime], [fpLastAccessTime], [fpChangeTime], [fpType], [fpComment]); begin Result:= 1; if lua_isnumber(L, 2) then begin AIndex:= lua_tointeger(L, 2); if AIndex < 10 then begin try AFile := TFileSystemFileSource.CreateFileFromFile(lua_tostring(L, 1)); except lua_pushnil(L); Exit; end; AFileSource := TFileSystemFileSource.GetFileSource; // Retrieve additional properties if needed FilePropertiesNeeded:= FileFuncToProp[AIndex]; if AFileSource.CanRetrieveProperties(AFile, FilePropertiesNeeded) then AFileSource.RetrieveProperties(AFile, FilePropertiesNeeded, []); case AIndex of 0: // fsfSize begin if fpSize in AFile.SupportedProperties then begin if AFile.SizeProperty.IsValid then AValue := AFile.Size; end; end; 1: // fsfAttr if fpAttributes in AFile.SupportedProperties then AValue := AFile.Properties[fpAttributes].Format(DefaultFilePropertyFormatter); 2: // fsfGroup if fpOwner in AFile.SupportedProperties then AValue := AFile.OwnerProperty.GroupStr; 3: // fsfOwner if fpOwner in AFile.SupportedProperties then AValue := AFile.OwnerProperty.OwnerStr; 4: // fsfModificationTime if fpModificationTime in AFile.SupportedProperties then begin if AFile.ModificationTimeProperty.IsValid then AValue := DateTimeToUnixFileTime(AFile.ModificationTime); end; 5: // fsfCreationTime if fpCreationTime in AFile.SupportedProperties then AValue := DateTimeToUnixFileTime(AFile.CreationTime); 6: // fsfLastAccessTime if fpLastAccessTime in AFile.SupportedProperties then AValue := DateTimeToUnixFileTime(AFile.LastAccessTime); 7: // fsfChangeTime if fpChangeTime in AFile.SupportedProperties then AValue := DateTimeToUnixFileTime(AFile.ChangeTime); 8: // fsfType if fpType in AFile.SupportedProperties then AValue := AFile.TypeProperty.Format(DefaultFilePropertyFormatter); 9: // fsfComment: if fpComment in AFile.SupportedProperties then AValue := AFile.CommentProperty.Format(DefaultFilePropertyFormatter); end; FreeAndNil(AFile); end; end; case VarType(AValue) of varInteger, varInt64: lua_pushinteger(L, Int64(AValue)); varString: lua_pushstring(L, AValue); else lua_pushnil(L); end; end; function luaGetPluginField(L : Plua_State) : Integer; cdecl; var AFile: TFile; AFileSource: IFileSource; AValue: Variant; AName: String; FieldIndex, UnitIndex: Integer; begin Result:= 1; try AFile := TFileSystemFileSource.CreateFileFromFile(lua_tostring(L, 1)); except lua_pushnil(L); Exit; end; AName := upcase(lua_tostring(L, 2)); FieldIndex := lua_tointeger(L, 3); UnitIndex := lua_tointeger(L, 4); AFileSource := TFileSystemFileSource.GetFileSource; if fspDirectAccess in AFileSource.Properties then begin if not gWdxPlugins.IsLoaded(AName) then begin if not gWdxPlugins.LoadModule(AName) then begin lua_pushnil(L); FreeAndNil(AFile); Exit; end; end; if gWdxPlugins.GetWdxModule(AName).FileParamVSDetectStr(AFile) then begin AValue := gWdxPlugins.GetWdxModule(AName).CallContentGetValueV( AFile.FullPath, FieldIndex, UnitIndex, 0); end; end; FreeAndNil(AFile); case VarType(AValue) of varBoolean: lua_pushboolean(L, AValue); varInteger, varInt64: lua_pushinteger(L, Int64(AValue)); varDouble: lua_pushnumber(L, Double(AValue)); varDate: lua_pushinteger(L, DateTimeToUnixFileTime(AValue)); varString: lua_pushstring(L, AValue); else lua_pushnil(L); end; end; function luaGoToFile(L : Plua_State) : Integer; cdecl; var sFilePath: String; bActive: Boolean = True; begin Result:= 0; sFilePath:= lua_tostring(L, 1); if lua_isboolean(L, 2) then bActive:= lua_toboolean(L, 2); if bActive then begin SetFileSystemPath(frmMain.ActiveFrame, ExtractFilePath(sFilePath)); frmMain.ActiveFrame.SetActiveFile(ExtractFileName(sFilePath)); end else begin SetFileSystemPath(frmMain.NotActiveFrame, ExtractFilePath(sFilePath)); frmMain.NotActiveFrame.SetActiveFile(ExtractFileName(sFilePath)); end; end; procedure luaP_register(L : Plua_State; n : PChar; f : lua_CFunction); begin lua_pushcfunction(L, f); lua_setfield(L, -2, n); end; procedure luaC_register(L : Plua_State; n : PChar; c : PChar); begin lua_pushstring(L, c); lua_setfield(L, -2, n); end; procedure RegisterPackages(L: Plua_State); begin lua_newtable(L); luaP_register(L, 'Sleep', @luaSleep); luaP_register(L, 'FindNext', @luaFindNext); luaP_register(L, 'FindFirst', @luaFindFirst); luaP_register(L, 'FindClose', @luaFindClose); luaP_register(L, 'FileExists', @luaFileExists); luaP_register(L, 'FileGetAttr', @luaFileGetAttr); luaP_register(L, 'GetTickCount', @luaGetTickCount); luaP_register(L, 'DirectoryExists', @luaDirectoryExists); luaP_register(L, 'CreateDirectory', @luaCreateDirectory); luaP_register(L, 'RemoveDirectory', @luaRemoveDirectory); luaP_register(L, 'CreateHardLink', @luaCreateHardLink); luaP_register(L, 'CreateSymbolicLink', @luaCreateSymbolicLink); luaP_register(L, 'ReadSymbolicLink', @luaReadSymbolicLink); luaP_register(L, 'ExtractFileExt', @luaExtractFileExt); luaP_register(L, 'ExtractFileDir', @luaExtractFileDir); luaP_register(L, 'ExtractFilePath', @luaExtractFilePath); luaP_register(L, 'ExtractFileName', @luaExtractFileName); luaP_register(L, 'ExtractFileDrive', @luaExtractFileDrive); luaP_register(L, 'GetAbsolutePath', @luaGetAbsolutePath); luaP_register(L, 'GetRelativePath', @luaGetRelativePath); luaP_register(L, 'MatchesMask', @luaMatchesMask); luaP_register(L, 'MatchesMaskList', @luaMatchesMaskList); luaP_register(L, 'Execute', @luaExecute); luaP_register(L, 'ExpandEnv', @luaExpandEnv); luaP_register(L, 'FileSetTime', @luaFileSetTime); luaP_register(L, 'GetFileProperty', @luaGetFileProperty); luaP_register(L, 'GetTempName', @luaGetTempName); luaC_register(L, 'PathDelim', PathDelim); lua_setglobal(L, 'SysUtils'); lua_newtable(L); luaP_register(L, 'Pos', @luaPos); luaP_register(L, 'Next', @luaNext); luaP_register(L, 'Copy', @luaCopy); luaP_register(L, 'Length', @luaLength); luaP_register(L, 'UpperCase', @luaUpperCase); luaP_register(L, 'LowerCase', @luaLowerCase); luaP_register(L, 'ConvertEncoding', @luaConvertEncoding); luaP_register(L, 'DetectEncoding', @luaDetectEncoding); lua_setglobal(L, 'LazUtf8'); lua_newtable(L); luaP_register(L, 'IsLower', @luaIsLower); luaP_register(L, 'IsUpper', @luaIsUpper); luaP_register(L, 'IsDigit', @luaIsDigit); luaP_register(L, 'IsLetter', @luaIsLetter); luaP_register(L, 'IsLetterOrDigit', @luaIsLetterOrDigit); luaP_register(L, 'GetUnicodeCategory', @luaGetUnicodeCategory); lua_setglobal(L, 'Char'); lua_newtable(L); luaP_register(L, 'Clear', @luaClipbrdClear); luaP_register(L, 'GetAsText', @luaClipbrdGetText); luaP_register(L, 'SetAsText', @luaClipbrdSetText); luaP_register(L, 'SetAsHtml', @luaClipbrdSetHtml); lua_setglobal(L, 'Clipbrd'); lua_newtable(L); luaP_register(L, 'MessageBox', @luaMessageBox); luaP_register(L, 'InputQuery', @luaInputQuery); luaP_register(L, 'InputListBox', @luaInputListBox); lua_setglobal(L, 'Dialogs'); lua_newtable(L); luaP_register(L, 'LogWrite', @luaLogWrite); luaP_register(L, 'CurrentPanel', @luaCurrentPanel); luaP_register(L, 'ExecuteCommand', @luaExecuteCommand); luaP_register(L, 'ExpandVar', @luaExpandVar); luaP_register(L, 'GetPluginField', @luaGetPluginField); luaP_register(L, 'GoToFile', @luaGoToFile); lua_setglobal(L, 'DC'); ReplaceLibrary(L); end; procedure SetPackagePath(L: Plua_State; const Path: String); var APath: String; begin lua_getglobal(L, 'package'); // Set package.path lua_getfield(L, -1, 'path'); APath := lua_tostring(L, -1); APath := StringReplace(APath, '.' + PathDelim, Path, []); lua_pop(L, 1); lua_pushstring(L, APath); lua_setfield(L, -2, 'path'); // Set package.cpath lua_getfield(L, -1, 'cpath'); APath := lua_tostring(L, -1); APath := StringReplace(APath, '.' + PathDelim, Path, []); lua_pop(L, 1); lua_pushstring(L, APath); lua_setfield(L, -2, 'cpath'); lua_pop(L, 1); end; function LuaPCall(L: Plua_State; nargs, nresults: Integer): Boolean; var Status: Integer; begin Status:= lua_pcall(L, nargs, nresults, 0); // Check execution result if Status <> 0 then begin logWrite(lua_tostring(L, -1), lmtError, True, False); end; Result:= (Status = 0); end; function ExecuteScript(const FileName: String; Args: array of String; var sErrorToReportIfAny:string): Boolean; var L: Plua_State; Index: Integer; Count: Integer; Script: String; Status: Integer; begin Result:= False; sErrorToReportIfAny := ''; // Load Lua library if not IsLuaLibLoaded then begin if not LoadLuaLib(mbExpandFileName(gLuaLib)) then begin sErrorToReportIfAny := Format(rsMsgScriptCantFindLibrary, [gLuaLib]); Exit; end; end; // Get script file name Script:= mbFileNameToSysEnc(FileName); L := lua_open; if Assigned(L) then begin luaL_openlibs(L); RegisterPackages(L); SetPackagePath(L, ExtractFilePath(Script)); // Load script from file Status := luaL_loadfile(L, PAnsiChar(Script)); if (Status = 0) then begin // Push arguments Count:= Length(Args); if (Count > 0) then begin for Index := 0 to Count - 1 do begin lua_pushstring(L, Args[Index]); end; end; // Execute script Status := lua_pcall(L, Count, 0, 0) end; // Check execution result if Status <> 0 then begin Script:= lua_tostring(L, -1); MessageDlg(CeRawToUtf8(Script), mtError, [mbOK], 0); end; lua_close(L); Result:= (Status = 0); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/ulog.pas�����������������������������������������������������������������������0000644�0001750�0000144�00000013063�15104114162�015032� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains log write functions Copyright (C) 2008-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uLog; {$mode objfpc}{$H+} interface uses Classes; type TLogMsgType = (lmtInfo, lmtSuccess, lmtError); function GetActualLogFileName: String; procedure ShowLogWindow(bShow: Boolean); procedure LogWrite(const sText: String; LogMsgType: TLogMsgType = lmtInfo; bForce: Boolean = False; bLogFile: Boolean = True); overload; procedure LogWrite({%H-}Thread: TThread; const sText: String; LogMsgType: TLogMsgType = lmtInfo; bForce: Boolean = False; bLogFile: Boolean = True); overload; implementation uses SysUtils, Forms, FileUtil, fMain, uDebug, uGlobs, uFileProcs, DCOSUtils, uDCUtils; type PLogMessage = ^TLogMessage; TLogMessage = record Message: String; case Boolean of True: (ObjectType: TObject); False: (MessageType: TLogMsgType); end; type { TLogWriter } TLogWriter = class private FMutex: TRTLCriticalSection; private procedure ShowLogWindow; procedure WriteInMainThread(Data: PtrInt); public constructor Create; destructor Destroy; override; procedure Write(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); end; var LogWriter: TLogWriter; function GetActualLogFileName: String; begin Result:= ReplaceEnvVars(gLogFileName); if gLogFileWithDateInName then begin Result:= Copy(Result, 1, Length(Result) - Length(ExtractFileExt(Result))) + '_' + ReplaceEnvVars(EnvVarTodaysDate) + ExtractFileExt(Result); end; end; procedure ShowLogWindow(bShow: Boolean); begin if Assigned(frmMain) then frmMain.ShowLogWindow(PtrInt(bShow)); end; procedure LogWrite(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); inline; begin LogWriter.Write(sText, LogMsgType, bForce, bLogFile); end; procedure LogWrite(Thread: TThread; const sText: String; LogMsgType: TLogMsgType; bForce: Boolean; bLogFile: Boolean); inline; begin LogWriter.Write(sText, LogMsgType, bForce, bLogFile); end; function StringListSortCompare(List: TStringList; Index1, Index2: Integer): Integer; begin Result:= CompareText(List[Index2], List[Index1]); end; { TLogWriter } procedure TLogWriter.ShowLogWindow; begin frmMain.ShowLogWindow(PtrInt(True)); end; procedure TLogWriter.WriteInMainThread(Data: PtrInt); var Msg: PLogMessage absolute Data; begin if not Application.Terminated then begin with fMain.frmMain do try seLogWindow.CaretY:= seLogWindow.Lines.AddObject(Msg^.Message, Msg^.ObjectType) + 1; finally Dispose(Msg); end; end; end; constructor TLogWriter.Create; begin InitCriticalSection(FMutex); end; destructor TLogWriter.Destroy; begin inherited Destroy; DoneCriticalsection(FMutex); end; procedure TLogWriter.Write(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); var Index: Integer; Message: String; hLogFile: THandle; LogMessage: PLogMessage; ActualLogFileName: String; ALogFileList: TStringList; begin if Assigned(fMain.frmMain) and (bForce or gLogWindow) then begin if bForce and (not frmMain.seLogWindow.Visible) then begin if GetCurrentThreadId = MainThreadID then Self.ShowLogWindow else TThread.Synchronize(nil, @Self.ShowLogWindow); end; New(LogMessage); LogMessage^.Message:= sText; LogMessage^.MessageType:= LogMsgType; Application.QueueAsyncCall(@WriteInMainThread, {%H-}PtrInt(LogMessage)); end; if gLogFile and bLogFile then begin EnterCriticalsection(FMutex); try ActualLogFileName:= GetActualLogFileName; Message:= Format('%s %s', [DateTimeToStr(Now), sText]); if mbFileExists(ActualLogFileName) then hLogFile:= mbFileOpen(ActualLogFileName, fmOpenWrite) else begin hLogFile:= mbFileCreate(ActualLogFileName); if gLogFileCount > 0 then begin ALogFileList:= FindAllFiles(ExtractFileDir(ActualLogFileName), '*_????-??-??' + ExtractFileExt(ActualLogFileName), False); ALogFileList.CustomSort(@StringListSortCompare); for Index:= gLogFileCount to ALogFileList.Count - 1 do begin mbDeleteFile(ALogFileList[Index]); end; ALogFileList.Free; end; end; if (hLogFile = feInvalidHandle) then DCDebug('LogWrite: ' + mbSysErrorMessage) else begin FileSeek(hLogFile, 0, soFromEnd); FileWriteLn(hLogFile, Message); FileClose(hLogFile); end; DCDebug(Message); finally LeaveCriticalsection(FMutex); end; end; end; initialization LogWriter:= TLogWriter.Create; finalization LogWriter.Free; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/ulng.pas�����������������������������������������������������������������������0000644�0001750�0000144�00000165157�15104114162�015045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Localization core unit Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit uLng; {$mode objfpc}{$H+} interface uses LResources; resourcestring // File operations. rsMsgNotDelete = 'Can not delete file %s'; rsMsgCannotDeleteDirectory = 'Cannot delete directory %s'; rsMsgCannotOverwriteDirectory = 'Cannot overwrite directory "%s" with non-directory "%s"'; rsMsgCannotCopySpecialFile = 'Cannot copy special file %s'; rsMsgErrCannotMoveDirectory = 'Cannot move directory %s'; rsMsgErrDirExists = 'Directory %s exists!'; rsMsgErrRename = 'Cannot rename file %s to %s'; rsMsgErrCannotMoveFile = 'Cannot move file %s'; rsMsgErrCannotCopyFile = 'Cannot copy file %s to %s'; rsMsgFileExistsOverwrite = 'Overwrite:'; rsMsgFileExistsWithFile = 'With file:'; rsMsgFileExistsFileInfo = '%s bytes, %s'; rsMsgFileExistsRwrt = 'File %s exists, overwrite?'; rsMsgFileChangedSave = 'File %s changed, save?'; rsMsgReplaceThisText = 'Do you want to replace this text?'; rsMsgCancelOperation = 'Are you sure that you want to cancel this operation?'; rsMsgFileReloadWarning = 'Are you sure you want to reload the current file and lose the changes?'; rsMsgFolderExistsRwrt = 'Folder %s exists, merge?'; rsMsgFileReadOnly = 'File %s is marked as read-only/hidden/system. Delete it?'; rsMsgNewFile = 'New file'; rsMsgDelFlDr = 'Delete %d selected files/directories?'; rsMsgDelSel = 'Delete selected "%s"?'; rsMsgTestArchive = 'Do you want to test selected archives?'; rsMsgVerifyChecksum = 'Do you want to verify selected checksums?'; rsMsgObjectNotExists = 'Object does not exist!'; // 12.05.2009 - another message, when deleting to trash rsMsgDelFlDrT = 'Delete %d selected files/directories into trash can?'; rsMsgDelSelT = 'Delete selected "%s" into trash can?'; rsMsgDelToTrashForce = 'Can not delete "%s" to trash! Delete directly?'; rsMsgFileNotFound = 'File "%s" not found.'; // --- rsMsgVerify = 'VERIFICATION:'; rsMsgVerifyWrong = 'The target file is corrupted, checksum mismatch!'; // --- rsMsgWipeFlDr = 'Wipe %d selected files/directories?'; rsMsgWipeSel = 'Wipe selected "%s"?'; rsMsgCpFlDr = 'Copy %d selected files/directories?'; rsMsgCpSel = 'Copy selected "%s"?'; rsMsgRenFlDr = 'Rename/move %d selected files/directories?'; rsMsgRenSel = 'Rename/move selected "%s"?'; rsMsgErrForceDir = 'Can not create directory %s!'; rsMsgSelectedInfo = 'Selected: %s of %s, files: %d of %d, folders: %d of %d'; rsMsgCloseLockedTab = 'This tab (%s) is locked! Close anyway?'; rsMsgTabForOpeningInNewTab = 'This tab (%s) is locked! Open directory in another tab?'; rsSpaceMsg = 'Files: %d, Dirs: %d, Size: %s (%s bytes)'; rsSelectDir = 'Select a directory'; rsMarkPlus = 'Select mask'; rsMarkMinus = 'Unselect mask'; rsMaskInput = 'Input mask:'; rsMsgPopUpHotDelete = '&Delete %s'; rsMsgDiskNotAvail = 'Disk is not available'; rsMsgChDirFailed = 'Change current directory to "%s" failed!'; rsMsgNoFreeSpaceCont = 'No enough free space on target drive, Continue?'; rsMsgNoFreeSpaceRetry = 'No enough free space on target drive, Retry?'; rsMsgSetVolumeLabel = 'Set volume label'; rsMsgVolumeLabel = 'Volume label:'; rsMsgRestartForApplyChanges = 'Please, restart Double Commander in order to apply changes'; rsMsgEnterName = 'Enter name:'; rsMsgEnterFileExt = 'Enter file extension:'; rsMsgDefaultCustomActionName = 'Custom action'; rsMsgSelectExecutableFile = 'Select executable file for'; rsMsgWithActionWith = 'with'; rsMsgFollowSymlink = 'Follow symlink "%s"?'; rsMsgFileSizeTooBig = 'The file size of "%s" is too big for destination file system!'; rsMsgCloseAllInActiveTabs = 'Remove all inactive tabs?'; rsMsgErrRegExpSyntax = 'Syntax error in regular expression!'; rsMsgNoFilesSelected = 'No files selected.'; rsMsgTooManyFilesSelected = 'Too many files selected.'; rsMsgInvalidSelection = 'Invalid selection.'; rsMsgNotImplemented = 'Not implemented.'; rsMsgInvalidFilename = 'Invalid filename'; rsMsgInvalidPath = 'Invalid path'; rsMsgInvalidPathLong = 'Path %s contains forbidden characters.'; rsMsgSelectOnlyCheckSumFiles = 'Please select only checksum files!'; rsMsgPresetAlreadyExists = 'Preset "%s" already exists. Overwrite?'; rsMsgPresetConfigDelete = 'Are you sure you want to delete preset "%s"?'; rsMsgVolumeSizeEnter = 'Please enter the volume size:'; rsFilterAnyFiles = 'Any files'; rsFilterDCToolTipFiles = 'DC Tooltip files'; rsFilterToolbarFiles = 'DC Toolbar files'; rsFilterXmlConfigFiles = '.xml Config files'; rsFilterTCToolbarFiles = 'TC Toolbar files'; rsFilterExecutableFiles = 'Executables files'; rsFilterIniConfigFiles = '.ini Config files'; rsFilterLegacyTabFiles = 'Legacy DC .tab files'; rsFilterDirectoryHotListFiles = 'Directory Hotlist files'; rsFilterArchiverConfigFiles = 'Archiver config files'; rsFilterPluginFiles = 'Plugin files'; rsFilterLibraries = 'Library files'; rsFilterProgramsLibraries = 'Programs and Libraries'; // Archiver section. rsMsgArchiverCustomParams = 'Additional parameters for archiver command-line:'; rsOptArchiverArchiver = 'Select archiver executable'; rsOptArchiverConfirmDelete = 'Are you sure you want to delete: "%s"?'; rsOptArchiverImportFile = 'Select the file to import archiver configuration(s)'; rsOptArchiverWhereToSave = 'Enter location and filename where to save archiver configuration'; rsOptArchiverDefaultExportFilename = 'Exported Archiver Configuration'; rsOptArchiverImportCaption = 'Import archiver configuration'; rsOptArchiverImportPrompt = 'Select the one(s) you want to import'; rsOptArchiverImportDone = 'Importation of %d elements from file "%s" completed.'; rsOptArchiverExportCaption = 'Export archiver configuration'; rsOptArchiverExportPrompt = 'Select the one(s) you want to export'; rsOptArchiverExportDone = 'Exportation of %d elements to file "%s" completed.'; rsOptArchiverProgramL = 'Archive Program (long name)'; rsOptArchiverProgramS = 'Archive Program (short name)'; rsOptArchiverArchiveL = 'Archive File (long name)'; rsOptArchiverArchiveS = 'Archive file (short name)'; rsOptArchiverFileListL = 'Filelist (long names)'; rsOptArchiverFileListS = 'Filelist (short names)'; rsOptArchiverSingleFProcess = 'Single filename to process'; rsOptArchiverErrorLevel = 'errorlevel'; rsOptArchiverChangeEncoding = 'Change Archiver Listing Encoding'; rsOptArchiverTargetSubDir = 'Target subdirecory'; rsOptArchiverAdditonalCmd = 'Mode dependent, additional command'; rsOptArchiverAddOnlyNotEmpty = 'Add if it is non-empty'; rsOptArchiverQuoteWithSpace = 'Quote names with spaces'; rsOptArchiverQuoteAll = 'Quote all names'; rsOptArchiverJustName = 'Use name only, without path'; rsOptArchiverJustPath = 'Use path only, without name'; rsOptArchiverUseAnsi = 'Use ANSI encoding'; rsOptArchiverUseUTF8 = 'Use UTF8 encoding'; rsOptArchiveConfigureSaveToChange = 'To change current editing archive configuration, either APPLY or DELETE current editing one'; // Font rsFontUsageMain = 'Main &Font'; rsFontUsageEditor = '&Editor Font'; rsFontUsageViewer = '&Viewer Font'; rsFontUsageViewerBook = 'Viewer&Book Font'; rsFontUsageLog = '&Log Font'; rsFontUsageConsole = '&Console Font'; rsFontUsagePathEdit = 'Path Font'; rsFontUsageFunctionButtons = 'Function Buttons Font'; rsFontUsageSearchResults = 'Search Results Font'; rsFontUsageTreeViewMenu = 'Tree View Menu Font'; rsFontUsageStatusBar = 'Status Bar Font'; // Tooltip section rsOptTooltipConfigureSaveToChange = 'To change file type tooltip configuration, either APPLY or DELETE current editing one'; rsOptToolTipsFileTypeName = 'Tooltip file type name'; rsToolTipModeList = 'Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only'; rsToolTipHideTimeOutList = 'System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide'; rsOptAddingToolTipFileType = 'Adding new tooltip file type'; rsOptRenamingToolTipFileType = 'Renaming tooltip file type'; rsOptToolTipFileType = 'Tooltip file type name:'; rsOptToolTipFileTypeDefaultExportFilename = 'Exported tooltip file type configuration'; rsOptToolTipFileTypeWhereToSave = 'Enter location and filename where to save tooltip file type configuration'; rsOptToolTipFileTypeAlreadyExists = '"%s" already exists!'; rsOptToolTipFileTypeConfirmDelete = 'Are you sure you want to delete: "%s"?'; rsOptToolTipFileTypeImportCaption = 'Import tooltip file type configuration'; rsOptToolTipFileTypeImportPrompt = 'Select the one(s) you want to import'; rsOptToolTipFileTypeImportFile = 'Select the file to import tooltip file type configuration(s)'; rsOptToolTipFileTypeImportDone = 'Importation of %d elements from file "%s" completed.'; rsOptToolTipFileTypeExportPrompt = 'Select the one(s) you want to export'; rsOptToolTipFileTypeExportCaption = 'Export tooltip file type configuration'; rsOptToolTipFileTypeExportDone = 'Exportation of %d elements to file "%s" completed.'; rsMsgMasterPassword = 'Master Password'; rsMsgMasterPasswordEnter = 'Please enter the master password:'; rsMsgWrongPasswordTryAgain = 'Wrong password!'#13'Please try again!'; rsMsgPasswordEnter = 'Please enter the password:'; rsMsgPasswordVerify = 'Please re-enter the password for verification:'; rsMsgPasswordDiff = 'Passwords are different!'; rsMsgUserName = 'User name:'; rsMsgPassword = 'Password:'; rsMsgAccount = 'Account:'; rsMsgUserNameFirewall = 'User name (Firewall):'; rsMsgPasswordFirewall = 'Password (Firewall):'; rsMsgTargetDir = 'Target path:'; rsMsgURL = 'URL:'; rsMsgLoadingFileList = 'Loading file list...'; rsMsgNoFiles = 'No files'; rsMsgErrSetAttribute = 'Can not set attributes for "%s"'; rsMsgErrSetDateTime = 'Can not set date/time for "%s"'; rsMsgErrSetOwnership = 'Can not set owner/group for "%s"'; rsMsgErrSetPermissions = 'Can not set permissions for "%s"'; rsMsgErrSetXattribute = 'Can not set extended attributes for "%s"'; rsMsgErrDateNotSupported = 'Date %s is not supported'; rsMsgErrSaveFile = 'Cannot save file'; rsMsgErrCanNotConnect = 'Can not connect to server: "%s"'; rsMsgErrSaveAssociation = 'Can not save association!'; rsMsgFileOperationsActive = 'File operations active'; rsMsgFileOperationsActiveLong = 'Some file operations have not yet finished. Closing Double Commander may result in data loss.'; rsMsgConfirmQuit = 'Are you sure you want to quit?'; rsMsgCanNotCopyMoveItSelf = 'You can not copy/move a file "%s" to itself!'; rsMsgTabRenameCaption = 'Rename tab'; rsMsgTabRenamePrompt = 'New tab name:'; rsMsgInvalidPlugin = 'This is not a valid plugin!'; rsMsgInvalidPluginArchitecture = 'This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!'; rsMsgErrCreateFileDirectoryExists = 'There already exists a directory named "%s".'; rsMsgDeletePartiallyCopied = 'Delete the partially copied file ?'; rsMsgInvalidCommandLine = 'Error in command line'; rsMsgCofirmUserParam = 'Confirmation of parameter'; rsMsgAskQuoteOrNot = 'Do you want to enclose between quotes?'; rsMsgInvalidQuoting = 'Invalid quoting'; rsMsgErrorInContextMenuCommand = 'Error in context menu command'; rsMsgErrorLoadingConfiguration = 'Error when loading configuration'; rsMsgInvalidFormatOfConfigurationFile = 'Invalid format of configuration file'; rsDefaultSuffixDroppedText = '_DroppedText'; rsDefaultSuffixDroppedTextRichtextFilename = '_DroppedRichtext'; rsDefaultSuffixDroppedTextHTMLFilename = '_DroppedHTMLtext'; rsDefaultSuffixDroppedTextUnicodeUTF16Filename = '_DroppedUnicodeUTF16text'; rsDefaultSuffixDroppedTextUnicodeUTF8Filename = '_DroppedUnicodeUTF8text'; rsDefaultSuffixDroppedTextSimpleFilename = '_DroppedSimpleText'; rsDragAndDropTextFormat = 'Rich Text Format;HTML Format;Unicode Format;Simple Text Format'; rsCaptionForAskingFilename = 'Enter filename, with extension, for dropped text'; rsMsgPromptAskingFilename = 'Filename for dropped text:'; rsCaptionForTextFormatToImport = 'Text format to import'; rsMsgForTextFormatToImport = 'Select the text format to import'; rsMsgUserDidNotSetExtension = '<NO EXT>'; rsMsgUserDidNotSetName = '<NO NAME>'; rsMsgCommandNotFound = 'Command not found! (%s)'; rsMsgProblemExecutingCommand = 'Problem executing command (%s)'; rsMsgCopyBackward = 'The file %s has changed. Do you want to copy it backward?'; rsMsgCouldNotCopyBackward = 'Could not copy backward - do you want to keep the changed file?'; rsMsgFilePathOverMaxPath = 'The target name length (%d) is more than %d characters!' + #13 + '%s' + #13 + 'Most programs will not be able to access a file/directory with such a long name!'; rsExtsClosedBracketNoFound = '"]" not found in line %s'; rsExtsCommandWithNoExt = 'No extension defined before command "%s". It will be ignored.'; rsMsgTerminalDisabled = 'Built-in terminal window disabled. Do you want to enable it?'; //Hot Dir related rsMsgHotDirWhatToDelete = 'Do you want to delete all elements inside the sub-menu [%s]?'+#$0A+'Answering NO will delete only menu delimiters but will keep element inside sub-menu.'; rsMsgHotDirAddThisDirectory = 'Add current dir: '; rsMsgHotDirAddSelectedDirectory = 'Add selected dir: '; rsMsgHotDirReAddSelectedDirectory = 'Re-Add selected dir: '; rsMsgHotDirReAddThisDirectory = 'Re-Add current dir: '; rsMsgHotDirAddSelectedDirectories = 'Add %d selected dirs'; rsMsgHotDirConfigHotlist = 'Configuration of Directory Hotlist'; rsMsgHotDirDeleteAllEntries = 'Are you sure you want to remove all entries of your Directory Hotlist? (There is no "undo" to this action!)'; rsMsgHotDirName = 'Hotdir name'; rsMsgHotDirPath = 'Hotdir path'; rsMsgHotDirJustPath = '&Path:'; rsMsgHotDirTarget = 'Hotdir target'; rsMsgHotDirSubMenuName = 'Submenu name'; rsMsgHotDirSimpleName = '&Name:'; rsMsgHotDirSimpleSeparator = '(separator)'; rsMsgHotDirSimpleMenu = 'Menu &name:'; rsMsgHotDirSimpleEndOfMenu = '(end of sub menu)'; rsMsgHotDirSimpleCommand = 'Command:'; rsMsgHotDirCommandName = 'Do command'; rsMsgHotDirCommandSample = 'cm_somthing'; rsMsgHotDirDemoName = 'This is hot dir named '; rsMsgHotDirDemoPath = 'This will change active frame to the following path:'; rsMsgHotDirDemoCommand = 'This will execute the following command:'; rsMsgHotDirDemoTarget = 'And inactive frame would change to the following path:'; rsMsgHotDirLocateHotlistFile = 'Locate ".hotlist" file to import'; rsMsgHotDirWhereToSave = 'Enter location and filename where to save a Directory Hotlist file'; rsMsgHotDirRestoreWhat = 'Enter location and filename of Directory Hotlist to restore'; rsMsgHotDirImportall = 'Import all!'; rsMsgHotDirImportSel = 'Import selected'; rsMsgHotDirImportHotlist = 'Import Directory Hotlist - Select the entries you want to import'; rsMsgHotDirExportall = 'Export all!'; rsMsgHotDirExportSel = 'Export selected'; rsMsgHotDirExportHotlist = 'Export Directory Hotlist - Select the entries you want to export'; rsMsgHotDirNbNewEntries = 'Number of new entries: %d'; rsMsgHotDirTotalExported = 'Total entries exported: '; rsMsgHotDirErrorExporting = 'Error exporting entries...'; rsMsgHotDirNothingToExport = 'Nothing selected to export!'; rsMsgHotDirTipSpecialDirBut = 'Some functions to select appropriate path relative, absolute, windows special folders, etc.'; rsMsgHotDirTipOrderPath = 'Determine if you want the active frame to be sorted in a specified order after changing directory'; rsMsgHotDirTipOrderTarget = 'Determine if you want the not active frame to be sorted in a specified order after changing directory'; rsMsgHotDirTotalBackuped = 'Total entries saved: %d'+#$0A+#$0A+'Backup filename: %s'; rsMsgHotDirErrorBackuping = 'Error backuping entries...'; rsHotDirWarningAbortRestoreBackup = 'Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.'+#$0A+#$0A+ 'Are you sure you want to proceed?'; rsHotDirForceSortingOrderChoices = 'none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9'; //Special dir related rsMsgSpecialDirUseDC = 'Use Double Commander special path...'; rsMsgSpecialDirUseTC = 'Use Windows special folder (TC)...'; rsMsgSpecialDirUseOther = 'Use other Windows special folder...'; rsMsgSpecialDirEnvVar = 'Use environment variable...'; rsMsgSpecialDirMkDCRel = 'Make relative to Double Commander special path...'; rsMsgSpecialDirMkTCTel = 'Make relative to Windows special folder (TC)...'; rsMsgSpecialDirMkWnRel = 'Make relative to other Windows special folder...'; rsMsgSpecialDirMkEnvRel = 'Make relative to environment variable...'; rsMsgSpecialDirMkAbso = 'Make path absolute'; rsMsgSpecialDirAddActi = 'Add path from active frame'; rsMsgSpecialDirAddNonActi = 'Add path from inactive frame'; rsMsgSpecialDirBrowsSel = 'Browse and use selected path'; rsMsgSpecialDir = 'Special Dirs'; rsMsgSpecialDirGotoDC = 'Go to Double Commander special path...'; rsMsgSpecialDirGotoTC = 'Go to Windows special folder (TC)...'; rsMsgSpecialDirGotoOther = 'Go to other Windows special folder...'; rsMsgSpecialDirGotoEnvVar = 'Go to environment variable...'; rsMsgSpecialDirUseHotDir = 'Use hotdir path'; rsMsgSpecialDirMakeRelToHotDir = 'Make relative to hotdir path'; //Favorite Tabs related rsMsgFavoriteTabsEnterName = 'Enter a name for this new Favorite Tabs entry:'; rsMsgFavoriteTabsEnterNameTitle = 'Saving a new Favorite Tabs entry'; rsMsgFavoriteTabsSubMenuName = 'Submenu name'; rsMsgFavoriteTabsImportSubMenuName = 'Legacy tabs imported'; rsMsgFavoriteTabsDragHereEntry = 'Drag here other entries'; rsMsgFavortieTabsSaveOverExisting = 'Save current tabs over existing Favorite Tabs entry'; rsOptFavoriteTabsWhereToAddInList = 'Add at beginning;Add at the end;Alphabetical sort'; rsMsgFavoriteTabsThisWillLoadFavTabs = 'This will load the Favorite Tabs: "%s"'; rsMsgFavoriteTabsDeleteAllEntries = 'Are you sure you want to remove all entries of your Favorite Tabs? (There is no "undo" to this action!)'; rsTitleRenameFavTabs = 'Rename Favorite Tabs'; rsMsgRenameFavTabs = 'Enter new friendly name for this Favorite Tabs'; rsTitleRenameFavTabsMenu = 'Rename Favorite Tabs sub-menu'; rsMsgRenameFavTabsMenu = 'Enter new name for this menu'; rsMsgFavoriteTabsImportedSuccessfully = 'Number of file(s) imported successfully: %d on %d'; rsMsgFavoriteTabsExportedSuccessfully = 'Number of Favorite Tabs exported successfully: %d on %d'; rsMsgFavoriteTabsModifiedNoImport = 'Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?'; rsMsgFavoriteTabsSimpleMode = 'Keep saving dir history with Favorite Tabs:'; rsMsgFavoriteTabsExtraMode = 'Default extra setting for save dir history for new Favorite Tabs:'; rsTabsActionOnDoubleClickChoices = 'Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu'; rsFavTabsPanelSideSelection = 'Left;Right;Active;Inactive;Both;None'; rsFavTabsSaveDirHistory = 'No;Yes'; rsMsgFavoriteTabsImportTitle = 'Select .tab file(s) to import (could be more than one at the time!)'; //Total Commander related message rsMsgLocateTCExecutable = 'Locate TC executable file (totalcmd.exe or totalcmd64.exe)'; rsMsgLocateTCConfiguation = 'Locate TC configuration file (wincmd.ini)'; rsDefaultImportedTCToolbarHint = 'Imported TC toolbar'; rsDefaultImportedDCToolbarHint = 'Imported DC toolbar'; rsFilenameExportedTCBarPrefix = 'Exported_from_DC'; rsNoEquivalentInternalCommand = 'No internal equivalent command'; // Locked by another process rsMsgProcessId = 'PID: %d'; rsMsgApplicationName = 'Description: %s'; rsMsgExecutablePath = 'Executable: %s'; rsMsgOpenInAnotherProgram = 'The action cannot be completed because the file is open in another program:'; rsMsgTerminateProcess = 'WARNING: Terminating a process can cause undesired results including loss of data and system instability.' + #32 + 'The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?'; // for context menu rsMnuActions = 'Actions'; rsMnuOpen = 'Open'; rsMnuView = 'View'; rsMnuEdit = 'Edit'; rsMnuOpenWith = 'Open with'; rsMnuOpenWithOther = 'Other...'; rsMenuMacOsServices = 'Services'; rsMenuMacOsShare = 'Share...'; rsMnuMount = 'Mount'; rsMnuUmount = 'Unmount'; rsMnuNoMedia = 'No media available'; rsMnuEject = 'Eject'; rsMnuSortBy = 'Sort by'; rsMnuNew = 'New'; rsMnuRestore = 'Restore'; rsMnuPackHere = 'Pack here...'; rsMnuExtractHere = 'Extract here...'; rsOpenWithMacOSFilter = 'Applications (*.app)|*.app|All files (*)|*'; // for main menu rsMnuCreateShortcut = 'Create Shortcut...'; rsMnuMapNetworkDrive = 'Map Network Drive...'; rsMnuDisconnectNetworkDrive = 'Disconnect Network Drive...'; // for content plugins menu rsMnuContentDefault = '<Default>'; rsMnuContentOctal = 'Octal'; // wcx module messages rsMsgSelLocNextVol = 'Please select location of next volume'; rsMsgNextVolUnpack = 'Next volume will be unpacked'; // wcx module errors messages rsMsgErrEndArchive = 'No more files in archive'; rsMsgErrNoMemory = 'Not enough memory'; rsMsgErrBadData = 'Data is bad'; rsMsgErrBadArchive = 'CRC error in archive data'; rsMsgErrUnknownFormat = 'Archive format unknown'; rsMsgErrEOpen = 'Cannot open existing file'; rsMsgErrECreate = 'Cannot create file'; rsMsgErrEClose = 'Error closing file'; rsMsgErrERead = 'Error reading from file'; rsMsgErrEWrite = 'Error writing to file'; rsMsgErrSmallBuf = 'Buffer too small'; rsMsgErrEAborted = 'Function aborted by user'; rsMsgErrNoFiles = 'No files found'; rsMsgErrTooManyFiles = 'Too many files to pack'; rsMsgErrNotSupported = 'Function not supported!'; rsMsgErrInvalidLink = 'Invalid link'; // Vfs rsVfsNetwork = 'Network'; rsVfsRecycleBin = 'Recycle Bin'; // Buttons. rsDlgButtonOK = '&OK'; rsDlgButtonNo = '&No'; rsDlgButtonYes = '&Yes'; rsDlgButtonCancel = '&Cancel'; rsDlgButtonNone = 'Non&e'; rsDlgButtonAppend = 'A&ppend'; rsDlgButtonResume = '&Resume'; rsDlgButtonRename = 'R&ename'; rsDlgButtonCopyInto = '&Merge'; rsDlgButtonCopyIntoAll = 'Mer&ge All'; rsDlgButtonOverwrite = '&Overwrite'; rsDlgButtonOverwriteAll = 'Overwrite &All'; rsDlgButtonOverwriteOlder = 'Overwrite All Ol&der'; rsDlgButtonOverwriteSmaller = 'Overwrite All S&maller'; rsDlgButtonOverwriteLarger = 'Overwrite All &Larger'; rsDlgButtonAutoRenameSource = 'A&uto-rename source files'; rsDlgButtonAutoRenameTarget = 'Auto-rename tar&get files'; rsDlgButtonSkip = '&Skip'; rsDlgButtonSkipAll = 'S&kip All'; rsDlgButtonIgnore = 'Ig&nore'; rsDlgButtonIgnoreAll = 'I&gnore All'; rsDlgButtonAll = 'A&ll'; rsDlgButtonRetry = 'Re&try'; rsDlgButtonAbort = 'Ab&ort'; rsDlgButtonOther = 'Ot&her'; rsDlgButtonRetryAdmin = 'As Ad&ministrator'; rsDlgButtonUnlock = '&Unlock'; rsDlgButtonCompare = 'Compare &by content'; rsDlgButtonContinue = '&Continue'; rsDlgButtonExitProgram = 'E&xit program'; // Log file rsMsgLogSuccess = 'Done: '; rsMsgLogError = 'Error: '; rsMsgLogInfo = 'Info: '; rsMsgLogCopy = 'Copy file %s'; rsMsgLogMove = 'Move file %s'; rsMsgLogDelete = 'Delete file %s'; rsMsgLogWipe = 'Wipe file %s'; rsMsgLogLink = 'Create link %s'; rsMsgLogSymLink = 'Create symlink %s'; rsMsgLogMkDir = 'Create directory %s'; rsMsgLogRmDir = 'Remove directory %s'; rsMsgLogWipeDir = 'Wipe directory %s'; rsMsgLogPack = 'Pack to file %s'; rsMsgLogExtract = 'Extract file %s'; rsMsgLogTest = 'Test file integrity %s'; rsMsgLogExtCmdLaunch = 'Launch external'; rsMsgLogExtCmdResult = 'Result external'; rsMsgLogProgramStart = 'Program start'; rsMsgLogProgramShutdown = 'Program shutdown'; rsMsgExitStatusCode = 'Exit status:'; rsSearchResult = 'Search result'; rsShowHelpFor = '&Show help for %s'; rsClipboardContainsInvalidToolbarData = 'Clipboard doesn''t contain any valid toolbar data.'; //Panel Color Configuration rsMsgPanelPreview = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.'; // File operations dialog rsDlgCp = 'Copy file(s)'; rsDlgMv = 'Move file(s)'; rsDlgOpPause = 'Pau&se'; rsDlgOpStart = '&Start'; rsDlgQueue = 'Queue'; rsDlgSpeed = 'Speed %s/s'; rsDlgSpeedTime = 'Speed %s/s, time remaining %s'; // File operations rsFileOpDirectoryExistsOptions = 'Ask;Merge;Skip'; rsFileOpFileExistsOptions = 'Ask;Overwrite;Overwrite Older;Skip'; rsFileOpCopyMoveFileExistsOptions = 'Ask;Overwrite;Skip'; rsFileOpSetPropertyErrorOptions = 'Ask;Don''t set anymore;Ignore errors'; // Viewer rsViewAboutText = 'Internal Viewer of Double Commander.'; rsViewNotFound = '%s not found!'; rsViewEncoding = 'Encoding'; rsViewNewSize = 'New Size'; rsViewImageType = 'Image Type'; rsViewBadQuality = 'Bad Quality'; rsViewPaintToolsList = 'Pen;Rect;Ellipse'; // Editor rsEditGotoLineTitle = 'Goto Line'; rsEditGotoLineQuery = 'Goto line:'; rsEditAboutText = 'Internal Editor of Double Commander.'; // Editor Highlighters rsSynLangPlainText = 'Plain text'; rsSynDefaultText = 'Default text'; // Columns in file panel rsColName = 'Name'; rsColExt = 'Ext'; rsColSize = 'Size'; rsColDate = 'Date'; rsColAttr = 'Attr'; // Filter status in file panel rsFilterStatus = 'FILTER'; rsSearchStatus = 'SEARCH'; // Cancel operations in file panel rsCancelFilter = 'Cancel Quick Filter'; rsCancelOperation = 'Cancel Current Operation'; // File function names rsFuncName = 'Name'; rsFuncExt = 'Extension'; rsFuncSize = 'Size'; rsFuncAttr = 'Attributes'; rsFuncPath = 'Path'; rsFuncGroup = 'Group'; rsFuncOwner = 'Owner'; rsFuncMTime = 'Modification date/time'; rsFuncCTime = 'Creation date/time'; rsFuncATime = 'Access date/time'; rsFuncHTime = 'Change date/time'; rsFuncLinkTo = 'Link to'; rsFuncNameNoExt = 'Name without extension'; rsFuncType = 'Type'; rsFuncComment = 'Comment'; rsFuncCompressedSize = 'Compressed size'; rsFuncTrashOrigPath = 'Original path'; // Tools rsToolViewer = 'Viewer'; rsToolEditor = 'Editor'; rsToolDiffer = 'Differ'; rsToolTerminal = 'Terminal'; rsToolErrorOpeningViewer = 'Error opening viewer'; rsToolErrorOpeningEditor = 'Error opening editor'; rsToolErrorOpeningDiffer = 'Error opening differ'; rsToolErrorOpeningTerminal = 'Error opening terminal'; // Configure custom columns dialog rsConfColDelete = 'Delete'; rsConfColCaption = 'Caption'; rsConfColWidth = 'Width'; rsConfColAlign = 'Align'; rsConfColFieldCont = 'Field contents'; rsConfColMove='Move'; rsConfCustHeader='Customize column'; // Open with dialog rsOpenWithMultimedia = 'Multimedia'; rsOpenWithDevelopment = 'Development'; rsOpenWithEducation = 'Education'; rsOpenWithGames = 'Games'; rsOpenWithGraphics = 'Graphics'; rsOpenWithNetwork = 'Network'; rsOpenWithOffice = 'Office'; rsOpenWithScience = 'Science'; rsOpenWithSettings = 'Settings'; rsOpenWithSystem = 'System'; rsOpenWithUtility = 'Accessories'; rsOpenWithOther = 'Other'; // File properties dialog rsPropsFolder = 'Directory'; rsPropsFile = 'File'; rsPropsSpChrDev = 'Special character device'; rsPropsSpBlkDev = 'Special block device'; rsPropsNmdPipe = 'Named pipe'; rsPropsSymLink = 'Symbolic link'; rsPropsSocket = 'Socket'; rsPropsUnknownType = 'Unknown type'; rsPropsMultipleTypes = 'Multiple types'; rsPropsContains = 'Files: %d, folders: %d'; rsPropsErrChMod = 'Can not change access rights for "%s"'; rsPropsErrChOwn = 'Can not change owner for "%s"'; // Compare by content Dialog rsDiffMatches = ' Matches: '; rsDiffModifies = ' Modifies: '; rsDiffAdds = ' Adds: '; rsDiffDeletes = ' Deletes: '; rsDiffComparing = 'Comparing...'; rsDiffFilesIdentical = 'The two files are identical!'; rsDiffTextIdentical = 'The text is identical, but the following options are used:'; rsDiffTextIdenticalNotMatch = 'The text is identical, but the files do not match!'+#$0A+'The following differences were found:'; rsDiffTextDifferenceEncoding = 'Encoding'; rsDiffTextDifferenceLineEnding = 'Line-endings'; // Find files dialog rsFindSearchFiles = 'Find files'; rsFindDefineTemplate = 'Define template'; rsFindScanning = 'Scanning'; rsFindScanned = 'Scanned: %d'; rsFindFound = 'Found: %d'; rsFindTimeOfScan = 'Time of scan: '; rsFindWhereBeg = 'Begin at'; rsFindDirNoEx = 'Directory %s does not exist!'; rsFindDepthAll = 'all (unlimited depth)'; rsFindDepthCurDir = 'current dir only'; rsFindDepth = '%s level(s)'; rsFindSaveTemplateCaption = 'Save search template'; rsFindSaveTemplateTitle = 'Template name:'; rsSearchTemplateUnnamed = '<unnamed template>'; rsListOfFindfilesWindows = 'List of "Find files" windows'; rsSelectYouFindFilesWindow = 'Select your window'; rsNoFindFilesWindowYet = 'Sorry, no "Find files" window yet...'; rsNoOtherFindFilesWindowToClose = 'Sorry, no other "Find files" window to close and free from memory...'; rsNewSearchClearFilterOptions = 'Keep;Clear;Prompt'; rsClearFiltersOrNot = 'Do you want to clear filters for this new search?'; rsSearchWithDSXPluginInProgress = 'A file search using DSX plugin is already in progress.'+#$0A+'We need that one to be completed before to launch a new one.'; rsSearchWithWDXPluginInProgress = 'A file search using WDX plugin is already in progress.'+#$0A+'We need that one to be completed before to launch a new one.'; rsPluginSearchFieldNotFound = 'Field "%s" not found!'; rsPluginSearchPluginNotFound = 'Plugin "%s" not found!'; rsPluginSearchUnitNotFoundForField = 'Unit "%s" not found for field "%s" !'; rsPluginSearchContainsNotCase = 'contains'; rsPluginSearchNotContainsNotCase = '!contains'; rsPluginSearchContainsCaseSenstive = 'contains(case)'; rsPluginSearchNotContainsCaseSenstive = '!contains(case)'; rsPluginSearchEqualNotCase = '='; rsPluginSearchNotEqualNotCase = '!='; rsPluginSearchEqualCaseSensitive = '=(case)'; rsPluginSearchNotEquaCaseSensitive = '!=(case)'; rsPluginSearchRegExpr = 'regexp'; rsPluginSearchNotRegExpr = '!regexp'; rsTimeUnitSecond = 'Second(s)'; rsTimeUnitMinute = 'Minute(s)'; rsTimeUnitHour = 'Hour(s)'; rsTimeUnitDay = 'Day(s)'; rsTimeUnitWeek = 'Week(s)'; rsTimeUnitMonth = 'Month(s)'; rsTimeUnitYear = 'Year(s)'; rsSizeUnitBytes = 'Bytes'; rsSizeUnitKBytes = 'Kilobytes'; rsSizeUnitMBytes = 'Megabytes'; rsSizeUnitGBytes = 'Gigabytes'; rsSizeUnitTBytes = 'Terabytes'; rsLegacyOperationByteSuffixLetter = 'B'; //Must be 1 character. Respecting legacy, letter added to following single letters for size when not empty. rsLegacyDisplaySizeSingleLetterKilo = 'K'; //Must be 1 character. By legacy before 2018-11 it was a 'K'. If for a language a different letter was better, it's now changeable in language file. rsLegacyDisplaySizeSingleLetterMega = 'M'; //Must be 1 character. By legacy before 2018-11 it was a 'M'. If for a language a different letter was better, it's now changeable in language file. rsLegacyDisplaySizeSingleLetterGiga = 'G'; //Must be 1 character. By legacy before 2018-11 it was a 'G'. If for a language a different letter was better, it's now changeable in language file. rsLegacyDisplaySizeSingleLetterTera = 'T'; //Must be 1 character. By legacy it was not present before 2018-11. It's also now changeable in language file. rsDefaultPersonalizedAbbrevByte = 'B'; rsDefaultPersonalizedAbbrevKilo = 'KB'; rsDefaultPersonalizedAbbrevMega = 'MB'; rsDefaultPersonalizedAbbrevGiga = 'GB'; rsDefaultPersonalizedAbbrevTera = 'TB'; rsAbbrevDisplayDir = '<DIR>'; rsAbbrevDisplayLink = '<LNK>'; rsOptPersonalizedFileSizeFormat = 'Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte'; rsOptFileSizeFloat = 'float'; rsFreeMsg = '%s of %s free'; rsFreeMsgShort = '%s free'; // Other rsCopyNameTemplate = 'Copy (%d) %s'; // Symlink dialog rsSymErrCreate = 'Error creating symlink.'; // Hardlink dialog rsHardErrCreate = 'Error creating hardlink.'; // Splitter dialog rsSplitSelDir = 'Select directory:'; rsSplitErrFileSize = 'Incorrect file size format!'; rsSplitErrDirectory = 'Unable to create target directory!'; rsSplitErrSplitFile = 'Unable to split the file!'; rsSplitMsgManyParts = 'The number of parts is more than 100! Continue?'; rsSplitPreDefinedSizes = 'Automatic;1457664B - 3.5" High Density 1.44M;1213952B - 5.25" High Density 1.2M;730112B - 3.5" Double Density 720K;362496B - 5.25" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R'; // Select duplicate files dialog rsSelectDuplicateMethod = 'Newest;Oldest;Largest;Smallest;First in group;Last in group'; // Multi-Rename Tool dialog rsMulRenLastPreset = '[The last used]'; rsMulRenWarningDuplicate = 'Warning, duplicate names!'; rsMulRenAutoRename = 'Do auto-rename to "name (1).ext", "name (2).ext" etc.?'; rsMulRenWrongLinesNumber = 'File contains wrong number of lines: %d, should be %d!'; rsMulRenFileNameStyleList = 'No change;UPPERCASE;lowercase;First char uppercase;' + 'First Char Of Every Word Uppercase;'; rsMulRenLaunchBehaviorOptions = 'Last masks under [Last One] preset;Last preset;New fresh masks'; rsMulRenSaveModifiedPreset = '"%s" preset has been modified.'+#$0A+'Do you want to save it now?'; rsMulRenSortingPresets = 'Sorting presets'; rsMulRenDefineVariableName = 'Define variable name'; rsMulRenDefineVariableValue = 'Define variable value'; rsMulRenEnterNameForVar = 'Enter variable name'; rsMulRenEnterValueForVar = 'Enter value for variable "%s"'; rsMulRenExitModifiedPresetOptions = 'Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically'; rsMulRenDefaultPresetName = 'Preset name'; rsMulRenPromptForSavedPresetName = 'Save preset as'; rsMulRenPromptNewPresetName = 'Enter new preset name'; rsMulRenPromptNewNameExists = 'Preset name already exists. Overwrite?'; rsMulRenLogStart = 'Multi-Rename Tool'; rsMulRenMaskName = 'Name'; rsMulRenMaskCharAtPosX = 'Character at position x'; rsMulRenMaskCharAtPosXtoY = 'Characters from position x to y'; rsMulRenMaskFullName = 'Complete filename with path and extension'; rsMulRenMaskFullNameCharAtPosXtoY = 'Complete filename, char from pos x to y'; rsMulRenMaskParent = 'Parent folder(s)'; rsMulRenMaskExtension = 'Extension'; rsMulRenMaskCounter = 'Counter'; rsMulRenMaskGUID = 'GUID'; rsMulRenMaskVarOnTheFly = 'Variable on the fly'; rsMulRenMaskYear2Digits = 'Year (2 digits)'; rsMulRenMaskYear4Digits = 'Year (4 digits)'; rsMulRenMaskMonth = 'Month'; rsMulRenMaskMonth2Digits = 'Month (2 digits)'; rsMulRenMaskMonthAbrev = 'Month name (short, e.g., "jan")'; rsMulRenMaskMonthComplete = 'Month name (long, e.g., "january")'; rsMulRenMaskDay = 'Day'; rsMulRenMaskDay2Digits = 'Day (2 digits)'; rsMulRenMaskDOWAbrev = 'Day of the week (short, e.g., "mon")'; rsMulRenMaskDOWComplete = 'Day of the week (long, e.g., "monday")'; rsMulRenMaskCompleteDate = 'Complete date'; rsMulRenMaskHour = 'Hour'; rsMulRenMaskHour2Digits = 'Hour (2 digits)'; rsMulRenMaskMin = 'Minute'; rsMulRenMaskMin2Digits = 'Minute (2 digits)'; rsMulRenMaskSec = 'Second'; rsMulRenMaskSec2Digits = 'Second (2 digits)'; rsMulRenMaskCompleteTime = 'Complete time'; rsMulRenFilename = 'Name'; rsMulRenExtension = 'Extension'; rsMulRenCounter = 'Counter'; rsMulRenDate = 'Date'; rsMulRenTime = 'Time'; rsMulRenPlugins = 'Plugins'; // CheckSumCalcVerify dialog rsCheckSumVerifyTitle = 'Verify checksum'; rsCheckSumVerifyText = 'Enter checksum and select algorithm:'; // CheckSumVerify dialog rsCheckSumVerifyGeneral = 'General:'; rsCheckSumVerifyTotal = 'Total:'; rsCheckSumVerifySuccess = 'Success:'; rsCheckSumVerifyMissing = 'Missing:'; rsCheckSumVerifyBroken = 'Broken:'; rsCheckSumVerifyReadError = 'Read error:'; // Drive status rsDriveNoMedia = '<no media>'; rsDriveNoLabel = '<no label>'; // Edit rsEditNewFile = 'new.txt'; rsEditNewOpen = 'Open file'; rsEditNewFileName = 'Filename:'; // Edit search rsEditSearchCaption = 'Search'; rsEditSearchReplace ='Replace'; rsEditSearchFrw = '&Forward'; rsEditSearchBack = '&Backward'; rsZeroReplacement = 'No replacement took place.'; rsXReplacements = 'Number of replacement: %d'; // Options editors rsOptionsEditorArchivers = 'Archivers'; rsOptionsEditorAutoRefresh = 'Auto refresh'; rsOptionsEditorBehavior = 'Behaviors'; rsOptionsEditorColors = 'Colors'; rsOptionsEditorBriefView = 'Brief'; rsOptionsEditorColumnsView = 'Columns'; rsOptionsEditorCustomColumns = 'Custom columns'; rsOptionsEditorConfiguration = 'Configuration'; rsOptionsEditorDragAndDrop = 'Drag & drop'; rsOptionsEditorDrivesListButton = 'Drives list button'; rsOptionsEditorFileOperations = 'File operations'; rsOptionsEditorFilePanels = 'File panels'; rsOptionsEditorFileTypes = 'File types'; rsOptionsEditorFileNewFileTypes = 'New'; rsOptionsEditorFilesViews = 'Files views'; rsOptionsEditorFilesViewsComplement = 'Files views extra'; rsOptionsEditorFolderTabs = 'Folder tabs'; rsOptionsEditorFolderTabsExtra = 'Folder tabs extra'; rsOptionsEditorFonts = 'Fonts'; rsOptionsEditorHighlighters = 'Highlighters'; rsOptionsEditorHotKeys = 'Hot keys'; rsOptionsEditorIcons = 'Icons'; rsOptionsEditorIgnoreList = 'Ignore list'; rsOptionsEditorKeyboard = 'Keys'; rsOptionsEditorLanguage = 'Language'; rsOptionsEditorLayout = 'Layout'; rsOptionsEditorLog = 'Log'; rsOptionsEditorMiscellaneous = 'Miscellaneous'; rsOptionsEditorMouse = 'Mouse'; rsOptionsEditorPlugins = 'Plugins'; rsOptionsEditorQuickSearch = 'Quick search/filter'; rsOptionsEditorTerminal = 'Terminal'; rsOptionsEditorToolbar = 'Toolbar'; rsOptionsEditorToolbarExtra = 'Toolbar Extra'; rsOptionsEditorToolbarMiddle = 'Toolbar Middle'; rsOptionsEditorTools = 'Tools'; rsOptionsEditorTooltips = 'Tooltips'; rsOptionsEditorFileAssoc = 'File associations'; rsOptionsEditorFileAssicExtra = 'File associations extra'; rsOptionsEditorDirectoryHotlist = 'Directory Hotlist'; rsOptionsEditorDirectoryHotlistExtra = 'Directory Hotlist Extra'; rsOptionsEditorFavoriteTabs = 'Favorite Tabs'; rsOptionsEditorOptionsChanged = 'Options have changed in "%s"'+#$0A+#$0A+'Do you want to save modifications?'; rsOptionsEditorFileSearch = 'File search'; rsOptionsEditorMultiRename = 'Multi-Rename Tool'; //------------------------------- rsOptConfigSortOrder = 'Classic, legacy order;Alphabetic order (but language still first)'; rsOptConfigTreeState = 'Full expand;Full collapse'; rsOptDifferFramePosition = 'Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right'; //------------------------------- rsDarkMode = 'Dark mode'; rsDarkModeOptions = 'Auto;Enabled;Disabled'; //------------------------------- rsDriveFreeSpaceIndicator = 'Drive Free Space Indicator'; //------------------------------- rsOptEnterExt = 'Enter extension'; rsOptAssocPluginWith = 'Associate plugin "%s" with:'; rsOptMouseSelectionButton = 'Left button;Right button;'; rsOptAutoSizeColumn = 'First;Last;'; rsOptTabsPosition = 'Top;Bottom;'; rsOptArchiveTypeName = 'Archive type name:'; //------------------------------- // Hotkeys rsOptHotkeysAddDeleteShortcutLong = 'Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting.'; rsOptHotkeysAddShortcutButton = 'Add shortcut'; rsOptHotkeysCannotSetShortcut = 'Cannot set shortcut'; rsOptHotkeysChangeShortcut = 'Change shortcut'; rsOptHotkeysDeleteTrashCanOverrides = 'Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?'; rsOptHotkeysDeleteTrashCanParameterExists = 'Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?'; rsOptHotkeysSetDeleteShortcut = 'Set shortcut to delete file'; rsOptHotkeysShortcutForDeleteAlreadyAssigned = 'For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?'; rsOptHotkeysShortcutForDeleteIsSequence = 'Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work.'; rsOptHotkeysCommand = 'Command'; rsOptHotkeysDescription = 'Description'; rsOptHotkeysFixParameter = 'Fix parameter'; rsOptHotkeysHotkeys = 'Hotkeys'; rsOptHotkeysHotkey = 'Hotkey'; rsOptHotkeysNoHotkey = '<none>'; rsOptHotkeysParameters = 'Parameters'; rsOptHotkeysShortCutUsed = 'Shortcut in use'; rsOptHotkeysShortCutUsedText1 = 'Shortcut %s is already used.'; rsOptHotkeysShortCutUsedText2 = 'Change it to %s?'; rsOptHotkeysUsedBy = 'used for %s in %s'; rsOptHotkeysUsedWithDifferentParams = 'used for this command but with different parameters'; rsOptHotkeysAddHotkey = 'Add hotkey for %s'; rsOptHotkeysEditHotkey = 'Edit hotkey for %s'; rsHotkeyCategoryMain = 'Main'; rsHotkeyCategoryViewer = 'Viewer'; rsHotkeyCategoryEditor = 'Editor'; rsHotkeyCategoryFindFiles = 'Find files'; rsHotkeyCategoryDiffer = 'Differ'; rsHotkeyCategoryCopyMoveDialog = 'Copy/Move Dialog'; rsHotkeyCategorySyncDirs = 'Synchronize Directories'; rsHotkeyCategoryEditCommentDialog = 'Edit Comment Dialog'; rsHotkeyCategoryMultiRename = 'Multi-Rename Tool'; rsHotkeySortOrder = 'By command name;By shortcut key (grouped);By shortcut key (one per row)'; rsHotKeyNoSCEnter='No shortcut with "ENTER"'; rsHotKeyFileSaveModified = '"%s" setup has been modified.'+#$0A+'Do you want to save it now?'; rsHotKeyFileNewName = 'New name'; rsHotKeyFileInputNewName = 'Input your new name'; rsHotKeyFileAlreadyExists = 'A setup with that name already exists.'+#$0A+'Do you want to overwrite it?'; rsHotKeyFileCopyOf = 'Copy of %s'; rsHotKeyFileConfirmErasure = 'Are you sure you want to erase setup "%s"?'; rsHotKeyFileMustKeepOne = 'You must keep at least one shortcut file.'; rsHotKeyFileConfirmDefault = 'Are you sure you want to restore default?'; rsCmdCategoryListInOrder='All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log'; rsCmdKindOfSort='Legacy sorted;A-Z sorted'; rsMsgThisIsNowInClipboard = '"%s" is now in the clipboard'; rsSimpleWordAll = 'All'; rsSimpleWordCommand = 'Command'; rsSimpleWordCategory = 'Category'; rsSimpleWordFilename = 'Filename'; rsSimpleWordParameter = 'Param'; rsSimpleWordWorkDir = 'WorkDir'; rsSimpleWordResult = 'Result'; rsSimpleWordColumnSingular = 'Column'; rsSimpleWordLetter = 'Letter'; rsSimpleWordTrue = 'True'; rsSimpleWordFalse = 'False'; rsSimpleWordError = 'Error'; rsSimpleWordSuccessExcla = 'Success!'; rsSimpleWordFailedExcla = 'Failed!'; rsSimpleWordVariable = 'Variable'; // Plugins rsOptPluginsActive = 'Active'; rsOptPluginsName = 'Name'; rsOptPluginsRegisteredFor = 'Registered for'; rsOptPluginsFileName = 'File name'; rsOptPluginsDescription = 'Description'; rsOptPluginAlreadyAssigned = 'Plugin %s is already assigned for the following extensions:'; rsOptPluginEnable = 'E&nable'; rsOptPluginDisable = 'D&isable'; rsOptPluginShowByPlugin = 'By Plugin'; rsOptPluginShowByExtension = 'By extension'; rsOptPluginsSelectLuaLibrary = 'Select Lua library file'; rsOptPluginSortOnlyWhenByExtension = 'Sorting WCX plugins is only possible when showing plugins by extension!'; rsPluginFilenameStyleList = 'With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following'; //------------------------------- rsOptSortMethod = 'Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort'; rsOptSortCaseSens = 'not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)'; rsOptSortFolderMode = 'sort by name and show first;sort like files and show first;sort like files'; rsOptNewFilesPosition = 'at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list'; rsOptUpdatedFilesPosition = 'don''t change position;use the same setting as for new files;to sorted position'; rsOptFileOperationsProgressKind = 'separate window;minimized separate window;operations panel'; rsOptTypeOfDuplicatedRename = 'DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext'; // Keyboard rsOptLetters = 'None;Command Line;Quick Search;Quick Filter'; // Directory hotlist rsOptAddFromMainPanel = 'Add at &beginning;Add at the end;Smart add'; //File Associations rsMsgTitleExtNotInFileType = 'Extension of selected file is not in any recognized file types'; rsMsgSekectFileType = 'Select to which file type to add extension "%s"'; rsMsgCreateANewFileType = '< Create a new file type "%s files" >'; rsMsgEnterNewFileTypeName = 'Enter name of new file type to create for extension "%s"'; rsMsgEnterCustomAction = 'Enter custom action name:'; rsSimpleWordFiles = 'files'; rsViewWithInternalViewer = 'with internal viewer'; rsEditWithInternalEditor = 'with internal editor'; rsViewWithExternalViewer = 'with external viewer'; rsEditWithExternalEditor = 'with external editor'; rsExecuteViaShell = 'Execute via shell'; rsExecuteViaTerminalClose = 'Execute via terminal and close'; rsExecuteViaTerminalStayOpen = 'Execute via terminal and stay open'; rsConfigurationFileAssociation = 'Configure file association'; //Variables rsConfirmExecution = 'Confirming command line and parameters'; rsVarHelpWith = 'Help with "%" variables'; rsVarOtherExamples = 'Other example of what''s possible'; rsVarOnlyFilename = 'Only filename'; rsVarPath = 'Path, without ending delimiter'; rsVarLastDirOfPath = 'Last directory of file''s path'; rsVarFullPath = 'Complete filename (path+filename)'; rsVarFilenameNoExt = 'Just filename, no extension'; rsVarOnlyExtension = 'Only file extension'; rsVarRelativePathAndFilename = 'Filename with relative path'; rsVarCurrentPath = 'Path of panel'; rsVarLastDirCurrentPath = 'Last directory of panel''s path'; rsVarListFilename = 'Temporary filename of list of filenames'; rsVarListFullFilename = 'Temporary filename of list of complete filenames (path+filename)'; rsVarListRelativeFilename = 'Temporary filename of list of filenames with relative path'; rsVarListInUTF8 = 'Filenames in list in UTF-8'; rsVarListInUTF16 = 'Filenames in list in UTF-16 with BOM'; rsVarListInUTF8Quoted = 'Filenames in list in UTF-8, inside double quotes'; rsVarListInUTF16Quoted = 'Filenames in list in UTF-16 with BOM, inside double quotes'; rsVarSourcePanel = 'Active panel (source)'; rsVarTargetPanel = 'Inactive panel (target)'; rsVarLeftPanel = 'Left panel'; rsVarRightPanel = 'Right panel'; rsVarBothPanelLeftToRight = 'Both panels, from left to right'; rsVarBothPanelActiveToInactive = 'Both panels, from active to inactive'; rsVarShowCommandPrior = 'Show command prior execute'; rsVarPercentSign = 'Return the percent sign'; rsVarPercentChangeToPound = 'From here to the end of the line, the percent-variable indicator is the "#" sign'; rsVarPoundChangeToPercent = 'From here to the end of the line, the percent-variable indicator is back the "%" sign'; rsVarWillNotBeQuoted = 'Filenames will not be quoted from here'; rsVarWillBeQuoted = 'Filenames will be quoted from here (default)'; rsVarWillNotHaveEndingDelimiter = 'Paths will not have ending delimiter (default)'; rsVarWillHaveEndingDelimiter = 'Paths will have ending delimiter'; rsVarWillNotDoInTerminal = 'Command will be done in terminal, closed at the end'; rsVarWillDoInTerminal = 'Command will be done in terminal, remaining opened at the end'; rsVarSimpleMessage = '%[Simple message]'; rsVarSimpleShowMessage = 'Will show a simple message'; rsVarPromptUserForParam = '%[Prompt user for param;Default value proposed]'; rsVarInputParam = 'Will request request user to enter a parameter with a default suggested value'; rsVarPrependElement = 'Prepend each name with "-a " or what you want'; rsVarEncloseElement = 'Enclose each name in brackets or what you want'; rsVarSecondElementRightPanel = 'Full path of second selected file in right panel'; // Quick Search/Filter rsOptSearchItems = '&Files;Di&rectories;Files a&nd Directories'; rsOptSearchCase = '&Sensitive;&Insensitive'; rsOptSearchOpt = '&Hide filter panel when not focused;Keep saving setting modifications for next session'; // Toolbar rsOptToolbarButtonType = 'S&eparator;Inte&rnal command;E&xternal command;Men&u'; rsImportToolbarProblem = 'Cannot find reference to default bar file'; rsMsgToolbarSaved = 'Saved!'+#$0A+'Toolbar filename: %s'; rsMsgTCToolbarWhereToSave = 'Enter location and filename where to save a TC Toolbar file'; rsMsgDCToolbarWhereToSave = 'Enter location and filename where to save a DC Toolbar file'; rsMsgToolbarRestoreWhat = 'Enter location and filename of Toolbar to restore'; rsMsgToolbarLocateTCToolbarFile = 'Locate ".BAR" file to import'; rsMsgToolbarLocateDCToolbarFile = 'Locate ".toolbar" file to import'; rsMsgTCToolbarNotFound = 'Error! Cannot find the desired wanted TC toolbar output folder:'+#$0A+'%s'; rsMsgTCConfigNotFound = 'Error! Cannot find the TC configuration file:'+#$0A+'%s'; rsMsgTCExecutableNotFound = 'Error! Cannot find the TC configuration executable:'+#$0A+'%s'; rsMsgTCisRunning = 'Error! TC is still running but it should be closed for this operation.'+#$0A+'Close it and press OK or press CANCEL to abort.'; rsMsgAllDCIntCmds = 'All Double Commander internal commands'; //Columns Menu rsMenuConfigureCustomColumns= 'Configure custom columns'; rsMenuConfigureEnterCustomColumnName = 'Enter new custom columns name'; rsMenuConfigureColumnsSaveToChange = 'To change current editing colmuns view, either SAVE, COPY or DELETE current editing one'; rsMenuConfigureColumnsAlreadyExists = 'A columns view with that name already exists.'; // Operation states. rsOperNotStarted = 'Not started'; rsOperStarting = 'Starting'; rsOperRunning = 'Running'; rsOperPausing = 'Pausing'; rsOperPaused = 'Paused'; rsOperWaitingForFeedback = 'Waiting for user response'; rsOperWaitingForConnection = 'Waiting for access to file source'; rsOperStopping = 'Stopping'; rsOperStopped = 'Stopped'; rsOperFinished = 'Finished'; rsOperAborted = 'Aborted'; // Operations descriptions. rsOperCalculatingCheckSum = 'Calculating checksum'; rsOperCalculatingCheckSumIn = 'Calculating checksum in "%s"'; rsOperCalculatingCheckSumOf = 'Calculating checksum of "%s"'; rsOperCalculatingStatictics = 'Calculating'; rsOperCalculatingStatisticsIn = 'Calculating "%s"'; rsOperCombining = 'Joining'; rsOperCombiningFromTo = 'Joining files in "%s" to "%s"'; rsOperCopying = 'Copying'; rsOperCopyingFromTo = 'Copying from "%s" to "%s"'; rsOperCopyingSomethingTo = 'Copying "%s" to "%s"'; rsOperCreatingDirectory = 'Creating directory'; rsOperCreatingSomeDirectory = 'Creating directory "%s"'; rsOperDeleting = 'Deleting'; rsOperDeletingIn = 'Deleting in "%s"'; rsOperDeletingSomething = 'Deleting "%s"'; rsOperExecuting = 'Executing'; rsOperExecutingSomething = 'Executing "%s"'; rsOperExtracting = 'Extracting'; rsOperExtractingFromTo = 'Extracting from "%s" to "%s"'; rsOperListing = 'Listing'; rsOperListingIn = 'Listing "%s"'; rsOperMoving = 'Moving'; rsOperMovingFromTo = 'Moving from "%s" to "%s"'; rsOperMovingSomethingTo = 'Moving "%s" to "%s"'; rsOperPacking = 'Packing'; rsOperPackingFromTo = 'Packing from "%s" to "%s"'; rsOperPackingSomethingTo = 'Packing "%s" to "%s"'; rsOperSettingProperty = 'Setting property'; rsOperSettingPropertyIn = 'Setting property in "%s"'; rsOperSettingPropertyOf = 'Setting property of "%s"'; rsOperSplitting = 'Splitting'; rsOperSplittingFromTo = 'Splitting "%s" to "%s"'; rsOperTesting = 'Testing'; rsOperTestingSomething = 'Testing "%s"'; rsOperTestingIn = 'Testing in "%s"'; rsOperVerifyingCheckSum = 'Verifying checksum'; rsOperVerifyingCheckSumIn = 'Verifying checksum in "%s"'; rsOperVerifyingCheckSumOf = 'Verifying checksum of "%s"'; rsOperWiping = 'Wiping'; rsOperWipingIn = 'Wiping in "%s"'; rsOperWipingSomething = 'Wiping "%s"'; rsOperWorking = 'Working'; // Generic description for unknown operation //TreeViewMenu rsOptionsEditorTreeViewMenu = 'Tree View Menu'; rsOptionsEditorTreeViewMenuColors = 'Tree View Menu Colors'; rsStrPreviewSearchingLetters = 'OU'; rsStrPreviewJustPreview = 'Just preview'; rsStrPreviewWordWithSearched1 = 'Fabulous'; rsStrPreviewWordWithSearched2 = 'Marvelous'; rsStrPreviewWordWithSearched3 = 'Tremendous'; rsStrPreviewSideNote = 'Side note'; rsStrPreviewOthers = 'Others'; rsStrPreviewWordWithoutSearched1 = 'Flat'; rsStrPreviewWordWithoutSearched2 = 'Limited'; rsStrPreviewWordWithoutSearched3 = 'Simple'; rsMsgUnexpectedUsageTreeViewMenu = 'ERROR: Unexpected Tree View Menu usage!'; rsStrTVMChooseHotDirectory = 'Choose your directory from Hot Directory:'; rsStrTVMChooseFavoriteTabs = 'Choose you Favorite Tabs:'; rsStrTVMChooseDirHistory = 'Choose your directory from Dir History'; rsStrTVMChooseViewHistory = 'Choose your directory from File View History'; rsStrTVMChooseFromToolbar = 'Choose your action from Maintool bar'; rsStrTVMChooseFromMainMenu = 'Choose your action from Main Menu'; rsStrTVMChooseFromCmdLineHistory = 'Choose your command from Command Line History'; rsStrTVMChooseYourFileOrDir = 'Choose your file or your directory'; //Split/Combine operation special message rsMsgBadCRC32 = 'Bad CRC32 for resulting file:'+#$0A+'"%s"'+#$0A+#$0A+'Do you want to keep the resulting corrupted file anyway?'; rsMsgProvideThisFile = 'Please, make this file available. Retry?'; rsMsgIncorrectFilelength = 'Incorrect resulting filelength for file : "%s"'; rsMSgUndeterminedNumberOfFile = 'Undetermined'; rsMsgInsertNextDisk = 'Please insert next disk or something similar.'+#$0A+#$0A+'It is to allow writing this file:'+#$0A+'"%s"'+#$0A+''+#$0A+'Number of bytes still to write: %d'; msgTryToLocateCRCFile = 'This file cannot be found and could help to validate final combination of files:'+#$0A+'%s'+#$0A+#$0A+'Could you make it available and press "OK" when ready,'+#$0A+'or press "CANCEL" to continue without it?'; rsMsgInvalidHexNumber = 'Invalid hexadecimal number: "%s"'; //LUA and script related messages rsMsgScriptCantFindLibrary = 'ERROR: Problem loading Lua library file "%s"'; rsMsgWantToConfigureLibraryLocation = 'Do you want to configure Lua library location?'; // Unhandled error. rsUnhandledExceptionMessage = 'Please report this error to the bug tracker with a description ' + 'of what you were doing and the following file:%s' + 'Press %s to continue or %s to abort the program.'; function GetLanguageName(const poFileName : String) : String; procedure lngLoadLng(const sFileName:String); procedure DoLoadLng; implementation uses Forms, Classes, SysUtils, StrUtils, GetText, Translations, uGlobs, uGlobsPaths, uTranslator, uDebug, DCClassesUtf8, DCOSUtils, DCStrUtils, StreamEx; function GetLanguageName(const poFileName: String): String; var sLine: String; S, F, Index : Integer; Stream: TFileStreamEx; Reader: TStreamReader; begin try Stream:= TFileStreamEx.Create(poFileName, fmOpenRead or fmShareDenyNone); try Index:= 0; Reader:= TStreamReader.Create(Stream, BUFFER_SIZE, True); repeat sLine:= Reader.ReadLine; S:= Pos('X-Native-Language', sLine); if S > 0 then begin S:= Pos(':', sLine, S + 17) + 2; F:= Pos('\n', sLine, S) - 1; Result:= Copy(sLine, S, (F - S) + 1); Exit; end; Inc(Index); until (Reader.Eof or (Index > 256)); finally Reader.Free; end; except // Ignore end; Result:= 'Unknown'; end; procedure TranslateLCL(poFileName: String); const BidiModeMap: array[Boolean] of TBiDiMode = (bdLeftToRight, {$IF DEFINED(LCLWIN32)} bdRightToLeftNoAlign // see http://bugs.freepascal.org/view.php?id=28483 {$ELSE} bdRightToLeft {$ENDIF} ); var Lang: String = ''; FallbackLang: string = ''; UserLang, LCLLngDir: String; begin LCLLngDir:= gpLngDir + 'lcl' + PathDelim; if NumCountChars('.', poFileName) >= 2 then begin UserLang:= ExtractDelimited(2, poFileName, ['.']); Application.BidiMode:= BidiModeMap[Application.IsRTLLang(UserLang)]; poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [UserLang]); if not mbFileExists(poFileName) then begin GetLanguageIDs(Lang, FallbackLang); poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [Lang]); if not mbFileExists(poFileName) then poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [FallbackLang]); end; if mbFileExists(poFileName) then Translations.TranslateUnitResourceStrings('LCLStrConsts', poFileName); end; end; procedure lngLoadLng(const sFileName: String); const DEFAULT_PO = 'doublecmd.pot'; var Lang: String = ''; FallbackLang: String = ''; begin // Default english interface if StrBegins(sFileName, 'doublecmd.po') then begin gPOFileName := DEFAULT_PO; Exit; end; gPOFileName := sFileName; if not mbFileExists(gpLngDir + gPOFileName) then begin gPOFileName := 'doublecmd.%s.po'; GetLanguageIDs(Lang, FallbackLang); gPOFileName := Format(gPOFileName,[FallbackLang]); end; if not mbFileExists(gpLngDir + gPOFileName) then begin gPOFileName := Format(gPOFileName,[Lang]); end; if not mbFileExists(gpLngDir + gPOFileName) then gPOFileName := DEFAULT_PO else begin DCDebug('Loading lng file: ' + gpLngDir + gPOFileName); LRSTranslator := TTranslator.Create(gpLngDir + gPOFileName); Translations.TranslateResourceStrings(TTranslator(LRSTranslator).POFile); TranslateLCL(gPOFileName); end; end; procedure DoLoadLng; begin lngLoadLng(gPOFileName); end; finalization FreeAndNil(LRSTranslator); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/ukastoolitemsextended.pas������������������������������������������������������0000644�0001750�0000144�00000024744�15104114162�020520� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Extended tool items types for KASToolBar Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uKASToolItemsExtended; {$mode objfpc}{$H+} interface uses Classes, SysUtils, KASToolItems, KASToolBar, IniFiles, DCXmlConfig, uDrive, DCBasicTypes, uFormCommands; type { TKASCommandItem } TKASCommandItem = class(TKASNormalItem) strict private FCommand: String; FCommands: IFormCommands; procedure SetCommand(const AValue: String); strict protected procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); override; public Params: TDynamicStringArray; constructor Create(AFormCommands: IFormCommands); reintroduce; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ActionHint: Boolean; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; property Command: String read FCommand write SetCommand; end; { TKASProgramItem } TKASProgramItem = class(TKASNormalItem) Command: String; Params: String; StartPath: String; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; end; { TKASDriveItem } TKASDriveItem = class(TKASNormalItem) Drive: PDrive; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; end; TKASToolBarIniLoader = class; TOnLoadIniItem = procedure (Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String) of object; TOnOpenIniFile = function (FileName: String): TIniFile of object; { TKASToolBarIniLoader } TKASToolBarIniLoader = class strict private FCommands: IFormCommands; FDepthLevel: Integer; // In case .bar files reference each other public constructor Create(AFormCommands: IFormCommands); reintroduce; procedure Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem); end; { TKASToolBarExtendedLoader } TKASToolBarExtendedLoader = class(TKASToolBarLoader) strict private FCommands: IFormCommands; protected function CreateItem(Node: TXmlNode): TKASToolItem; override; public constructor Create(AFormCommands: IFormCommands); reintroduce; end; implementation uses DCClassesUtf8, DCStrUtils; const CommandItemConfigNode = 'Command'; ProgramItemConfigNode = 'Program'; DriveItemConfigNode = 'Drive'; { TKASDriveItem } procedure TKASDriveItem.Assign(OtherItem: TKASToolItem); var DriveItem: TKASDriveItem; begin inherited Assign(OtherItem); if OtherItem is TKASDriveItem then begin DriveItem := TKASDriveItem(OtherItem); Drive := DriveItem.Drive; end; end; function TKASDriveItem.Clone: TKASToolItem; begin Result := TKASDriveItem.Create; Result.Assign(Self); end; function TKASDriveItem.ConfigNodeName: String; begin Result := DriveItemConfigNode; end; { TKASCommandItem } procedure TKASCommandItem.Assign(OtherItem: TKASToolItem); var CommandItem: TKASCommandItem; begin inherited Assign(OtherItem); if OtherItem is TKASCommandItem then begin CommandItem := TKASCommandItem(OtherItem); Command := CommandItem.Command; Params := Copy(CommandItem.Params); end; end; function TKASCommandItem.Clone: TKASToolItem; begin Result := TKASCommandItem.Create(FCommands); Result.Assign(Self); end; function TKASCommandItem.ActionHint: Boolean; begin Result:= (inherited ActionHint) and (Length(Params) = 0); end; function TKASCommandItem.ConfigNodeName: String; begin Result := CommandItemConfigNode; end; constructor TKASCommandItem.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; procedure TKASCommandItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); Params := nil; Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Command') = 0 then Command := Config.GetContent(Node) else if Node.CompareName('Param') = 0 then AddString(Params, Config.GetContent(Node)); Node := Node.NextSibling; end; if Hint = EmptyStr then begin Hint := FCommands.GetCommandCaption(Command, cctLong); end; end; procedure TKASCommandItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); var AParam: String; begin inherited SaveContents(Config, Node); Config.AddValue(Node, 'Command', Command); for AParam in Params do Config.AddValueDef(Node, 'Param', AParam, ''); end; procedure TKASCommandItem.SetCommand(const AValue: String); begin if FCommand <> AValue then begin FCommand:= AValue; FAction:= FCommands.GetCommandAction(FCommand); end; end; procedure TKASCommandItem.SaveHint(Config: TXmlConfig; Node: TXmlNode); begin if Hint <> FCommands.GetCommandCaption(Command, cctLong) then begin Config.AddValueDef(Node, 'Hint', Hint, ''); end; // else don't save default text for the hint so that a different text // can be loaded if the language changes. end; { TKASProgramItem } procedure TKASProgramItem.Assign(OtherItem: TKASToolItem); var ProgramItem: TKASProgramItem; begin inherited Assign(OtherItem); if OtherItem is TKASProgramItem then begin ProgramItem := TKASProgramItem(OtherItem); Command := ProgramItem.Command; Params := ProgramItem.Params; StartPath := ProgramItem.StartPath; end; end; function TKASProgramItem.Clone: TKASToolItem; begin Result := TKASProgramItem.Create; Result.Assign(Self); end; function TKASProgramItem.ConfigNodeName: String; begin Result := ProgramItemConfigNode; end; procedure TKASProgramItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Command') = 0 then Command := Config.GetContent(Node) else if Node.CompareName('Params') = 0 then Params := Config.GetContent(Node) else if Node.CompareName('StartPath') = 0 then StartPath := Config.GetContent(Node); Node := Node.NextSibling; end; end; procedure TKASProgramItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin inherited SaveContents(Config, Node); Config.AddValueDef(Node, 'Command', Command, ''); Config.AddValueDef(Node, 'Params', Params, ''); Config.AddValueDef(Node, 'StartPath', StartPath, ''); end; { TKASToolBarExtendedLoader } constructor TKASToolBarExtendedLoader.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; function TKASToolBarExtendedLoader.CreateItem(Node: TXmlNode): TKASToolItem; begin Result := inherited CreateItem(Node); if not Assigned(Result) then begin if Node.CompareName(CommandItemConfigNode) = 0 then Result := TKASCommandItem.Create(FCommands) else if Node.CompareName(ProgramItemConfigNode) = 0 then Result := TKASProgramItem.Create else if Node.CompareName(DriveItemConfigNode) = 0 then Result := TKASDriveItem.Create; end; end; { TKASToolBarIniLoader } constructor TKASToolBarIniLoader.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; procedure TKASToolBarIniLoader.Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem); var BtnCount, I: Integer; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; Command, Menu, Button, Param, Path, Misk: String; Item: TKASToolItem; IniFile: TIniFileEx = nil; begin if (FDepthLevel < 10) then begin IniFile := TIniFileEx.Create(IniFileName, fmOpenRead or fmShareDenyNone); if Assigned(IniFile) then try Inc(FDepthLevel); BtnCount := IniFile.ReadInteger('Buttonbar', 'Buttoncount', 0); for I := 1 to BtnCount do begin Command := IniFile.ReadString('Buttonbar', 'cmd' + IntToStr(I), ''); Menu := IniFile.ReadString('Buttonbar', 'menu' + IntToStr(I), ''); Button := IniFile.ReadString('Buttonbar', 'button' + IntToStr(I), ''); Param := IniFile.ReadString('Buttonbar', 'param' + IntToStr(I), ''); Path := IniFile.ReadString('Buttonbar', 'path' + IntToStr(I), ''); Misk := IniFile.ReadString('Buttonbar', 'misk' + IntToStr(I), ''); Item := nil; if Menu = '-' then begin Item := TKASSeparatorItem.Create; end else if (Length(Command) > 3) and (Copy(Command, 1, 3) = 'cm_') then begin CommandItem := TKASCommandItem.Create(FCommands); CommandItem.Command := Command; CommandItem.Hint := Menu; CommandItem.Icon := Button; if Param <> EmptyStr then AddString(CommandItem.Params, Param); Item := CommandItem; end else begin ProgramItem := TKASProgramItem.Create; ProgramItem.Command := Command; ProgramItem.Hint := Menu; ProgramItem.Icon := Button; ProgramItem.Params := Param; ProgramItem.StartPath := Path; Item := ProgramItem; end; if Assigned(OnLoadIniItem) then OnLoadIniItem(Self, Item, Misk); if Assigned(ToolBar) then ToolBar.AddButton(Item); if Assigned(ToolItemMenu) then ToolItemMenu.SubItems.Add(Item); end; finally IniFile.Free; Dec(FDepthLevel); end; end; end; end. ����������������������������doublecmd-1.1.30/src/uhotkeymanager.pas�������������������������������������������������������������0000644�0001750�0000144�00000110301�15104114162�017100� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Double Commander ------------------------------------------------------------------------- HotKey Manager. Allow to set it's own bindings to each TWinControl on form. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2011-2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uHotkeyManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, LCLProc, LCLType, LCLIntf, Forms, ActnList, DCClassesUtf8, fgl, contnrs, DCXmlConfig, DCBasicTypes; type generic THMObjectInstance<InstanceClass> = class Instance: InstanceClass; KeyDownProc: TKeyEvent; end; THMFormInstance = specialize THMObjectInstance<TCustomForm>; THMControlInstance = specialize THMObjectInstance<TWinControl>; { THotkey } THotkey = class Shortcuts: array of String; Command: String; Params: array of String; procedure Assign(Hotkey: THotkey); function Clone: THotkey; function HasParam(const aParam: String): Boolean; overload; function HasParam(const aParams: array of String): Boolean; overload; function SameAs(Hotkey: THotkey): Boolean; function SameParams(const aParams: array of String): Boolean; function SameShortcuts(const aShortcuts: array of String): Boolean; end; TBaseHotkeysList = specialize TFPGObjectList<THotkey>; { TFreeNotifier } TFreeNotifier = class(TComponent) private FFreeEvent: TNotifyEvent; protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public property OnFree: TNotifyEvent read FFreeEvent write FFreeEvent; end; THotkeyOperation = (hopAdd, hopRemove, hopClear, hopUpdate); THotkeyEvent = procedure (hotkey: THotkey; operation: THotkeyOperation) of object; { THotkeys } THotkeys = class(TBaseHotkeysList) private FOnChange: THotkeyEvent; procedure DoOnChange(hotkey: THotkey; operation: THotkeyOperation); public constructor Create(AFreeObjects: Boolean = True); reintroduce; function Add(const Shortcuts, Params: array of String; Command: String): THotkey; overload; function AddIfNotExists(const Shortcuts, Params: array of String; Command: String): THotkey; overload; {en Adds multiple shortcuts to the same command. @param(ShortcutsWithParams Array of shortcuts followed by any number of parameters. Each shortcuts array must end with an empty string, and similarly each parameters must end with an empty string. [Shortcut1A, Shortcut1B, '', S1ParamA, '', Shortcut2, '', S2ParamA, S2ParamB, '', ...]) @param(Command Command to which the shortcuts should be added.) @param(OldShortcuts, OldParams Adds new shortcuts even if old shortcut exists. If a different shortcuts exists however then doesn't add new one.) } procedure AddIfNotExists(const ShortcutsWithParams: array of String; Command: String; const OldShortcuts, OldParams: array of String); overload; procedure AddIfNotExists(const ShortcutsWithParams: array of String; Command: String); overload; procedure AddIfNotExists(Key: Word; Shift: TShiftState; const Command: String; const Param: String = ''); overload; procedure Clear; reintroduce; procedure Remove(var hotkey: THotkey); reintroduce; function Find(const Shortcuts: array of String): THotkey; {en Find hotkey which shortcuts begin with Shortcuts parameter. If BothWays=@true then also looks for shortcuts which are the beginning of Shortcuts parameter. } function FindByBeginning(const Shortcuts: TDynamicStringArray; BothWays: Boolean): THotkey; function FindByCommand(Command: String): THotkey; function FindByContents(Hotkey: THotkey): THotkey; {en Should be called whenever a hotkey has shortcut updated to update the shortcuts in ActionLists. } procedure UpdateHotkey(Hotkey: THotkey); property OnChange: THotkeyEvent read FOnChange write FOnChange; end; { THMBaseObject } generic THMBaseObject<InstanceClass, InstanceInfoClass> = class private FObjects: TFPObjectList; FHotkeys: THotkeys; FName: String; public constructor Create(AName: String); virtual; destructor Destroy; override; function Add(AInstanceInfo: InstanceInfoClass): Integer; procedure Delete(AInstance: InstanceClass); function Find(AInstance: InstanceClass): InstanceInfoClass; property Hotkeys: THotkeys read FHotkeys; property Name: String read FName; end; THMControl = specialize THMBaseObject<TWinControl, THMControlInstance>; THMBaseControls = specialize TFPGObjectList<THMControl>; { THMControls } THMControls = class(THMBaseControls) procedure Delete(AName: String); overload; function Find(AName: String): THMControl; function Find(AControl: TWinControl): THMControl; function FindOrCreate(AName: String): THMControl; end; THMBaseForm = specialize THMBaseObject<TCustomForm, THMFormInstance>; TActionLists = specialize TFPGObjectList<TActionList>; { THMForm } THMForm = class(THMBaseForm) private {en Used for notifying when an ActionList is destroyed. } FFreeNotifier: TFreeNotifier; FActionLists: TActionLists; function GetActionByCommand(ActionList: TActionList; Command: String): TAction; procedure OnActionListFree(Sender: TObject); procedure OnHotkeyEvent(hotkey: THotkey; operation: THotkeyOperation); procedure RemoveActionShortcut(hotkey: THotkey; AssignNextShortcut: Boolean); procedure SetActionShortcut(hotkey: THotkey; OverridePrevious: Boolean); public Controls: THMControls; constructor Create(AName: String); override; destructor Destroy; override; procedure RegisterActionList(ActionList: TActionList); procedure UnregisterActionList(ActionList: TActionList); end; TBaseForms = specialize TFPGObjectList<THMForm>; { THMForms } THMForms = class(TBaseForms) procedure Delete(AName: String); overload; function Find(AName: String): THMForm; function Find(AForm: TCustomForm): THMForm; function FindOrCreate(AName: String): THMForm; end; { THotKeyManager } THotKeyManager = class private FForms: THMForms; FLastShortcutTime: Double; // When last shortcut was received (used for sequences of shortcuts) FSequenceStep: Integer; // Which hotkey we are waiting for (from 0) FShortcutsSequence: TDynamicStringArray; // Sequence of shortcuts that has been processed since last key event FVersion: Integer; //--------------------- procedure ClearAllHotkeys; //Hotkey Handler procedure KeyDownHandler(Sender: TObject; var Key: Word; Shift: TShiftState); //--------------------- //This function is called from KeyDownHandler to find registered hotkey and execute assigned action function HotKeyEvent(Form: TCustomForm; Hotkeys: THotkeys): Boolean; //--------------------- function RegisterForm(AFormName: String): THMForm; function RegisterControl(AFormName: String; AControlName: String): THMControl; //--------------------- procedure Save(Config: TXmlConfig; Root: TXmlNode); procedure Load(Config: TXmlConfig; Root: TXmlNode); procedure LoadIni(FileName: String); public constructor Create; destructor Destroy; override; //--------------------- procedure Save(FileName: String); procedure Load(FileName: String); //--------------------- function Register(AForm: TCustomForm; AFormName: String): THMForm; function Register(AControl: TWinControl; AControlName: String): THMControl; procedure UnRegister(AForm: TCustomForm); procedure UnRegister(AControl: TWinControl); //--------------------- property Forms: THMForms read FForms; property Version: Integer read FVersion; end; implementation uses Laz2_XMLRead, uKeyboard, uGlobs, uDebug, uDCVersion, uFormCommands, DCOSUtils, DCStrUtils; const MaxShortcutSequenceInterval = 1000; // in ms { THotkey } procedure THotkey.Assign(Hotkey: THotkey); begin Shortcuts := Copy(Hotkey.Shortcuts); Params := Copy(Hotkey.Params); Command := Hotkey.Command; end; function THotkey.Clone: THotkey; begin Result := THotkey.Create; Result.Assign(Self); end; function THotkey.HasParam(const aParams: array of String): Boolean; begin Result := ContainsOneOf(Params, aParams); end; function THotkey.HasParam(const aParam: String): Boolean; begin Result := Contains(Params, aParam); end; function THotkey.SameAs(Hotkey: THotkey): Boolean; begin Result := (Command = Hotkey.Command) and (SameShortcuts(Hotkey.Shortcuts)) and (SameParams(Hotkey.Params)); end; function THotkey.SameParams(const aParams: array of String): Boolean; begin Result := Compare(Params, aParams); end; function THotkey.SameShortcuts(const aShortcuts: array of String): Boolean; begin Result := Compare(Shortcuts, aShortcuts); end; { TFreeNotifier } procedure TFreeNotifier.Notification(AComponent: TComponent; Operation: TOperation); begin if (Operation = opRemove) and Assigned(FFreeEvent) then FFreeEvent(AComponent); inherited Notification(AComponent, Operation); end; { THotkeys } constructor THotkeys.Create(AFreeObjects: Boolean); begin FOnChange := nil; inherited Create(AFreeObjects); end; function THotkeys.Add(const Shortcuts, Params: array of String; Command: String): THotkey; begin if (Command <> EmptyStr) and (Length(Shortcuts) > 0) then begin Result := THotkey.Create; Result.Shortcuts := CopyArray(Shortcuts); Result.Params := CopyArray(Params); Result.Command := Command; Add(Result); DoOnChange(Result, hopAdd); end else Result := nil; end; function THotkeys.AddIfNotExists(const Shortcuts, Params: array of String; Command: String): THotkey; var i: Integer; begin // Check if the shortcuts aren't already assigned to a different command // or if a different shortcut isn't already assigned to the command. // Also check if the shortucts aren't a partial match to another shortcuts. for i := 0 to Count - 1 do begin if ArrBegins(Items[i].Shortcuts, Shortcuts, True) or (Items[i].Command = Command) then Exit(nil); end; Result := Add(Shortcuts, Params, Command); end; procedure THotkeys.AddIfNotExists(const ShortcutsWithParams: array of String; Command: String); begin AddIfNotExists(ShortcutsWithParams, Command, [], []); end; procedure THotkeys.AddIfNotExists(Key: Word; Shift: TShiftState; const Command: String; const Param: String); var AParams: TDynamicStringArray; begin if (Length(Param) > 0) then AddString(AParams, Param); AddIfNotExists([VirtualKeyToText(Key, Shift)], AParams, Command); end; procedure THotkeys.AddIfNotExists(const ShortcutsWithParams: array of String; Command: String; const OldShortcuts, OldParams: array of String); var s: String; StartIndex: Integer; function GetArray: TDynamicStringArray; var Index: Integer; begin Result := nil; Index := StartIndex; while Index <= High(ShortcutsWithParams) do begin s := ShortcutsWithParams[Index]; if s <> '' then AddString(Result, s) else Break; Inc(Index); end; StartIndex := Index + 1; end; function CheckIfOldOrEmpty: Boolean; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].Command = Command then begin if not (Items[i].SameShortcuts(OldShortcuts) and Items[i].SameParams(OldParams)) then Exit(False); end; Result := True; end; var Shortcuts, Params: array of String; begin // Check if a different shortcut isn't already assigned to the command. // If there is only the old shortcut then allow adding new one. if not CheckIfOldOrEmpty then Exit; StartIndex := Low(ShortcutsWithParams); while True do begin Shortcuts := GetArray; Params := GetArray; if Length(Shortcuts) > 0 then begin // Check if the shortcuts aren't already assigned to a different command. if not Assigned(FindByBeginning(Shortcuts, True)) then Add(Shortcuts, Params, Command); end else Break; end; end; procedure THotkeys.Clear; var i: Integer; begin for i := 0 to Count - 1 do begin DoOnChange(Items[0], hopClear); inherited Delete(0); end; end; procedure THotkeys.Remove(var hotkey: THotkey); begin if Assigned(hotkey) then begin DoOnChange(hotkey, hopRemove); inherited Remove(hotkey); if FreeObjects then hotkey := nil; end; end; procedure THotkeys.UpdateHotkey(Hotkey: THotkey); begin DoOnChange(Hotkey, hopUpdate); end; function THotkeys.Find(const Shortcuts: array of String): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].SameShortcuts(Shortcuts) then Exit(Items[i]); Result := nil; end; function THotkeys.FindByBeginning(const Shortcuts: TDynamicStringArray; BothWays: Boolean): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if ArrBegins(Items[i].Shortcuts, Shortcuts, BothWays) then Exit(Items[i]); Result := nil; end; function THotkeys.FindByCommand(Command: String): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].Command = Command then Exit(Items[i]); Result := nil; end; function THotkeys.FindByContents(Hotkey: THotkey): THotkey; var i: Integer; begin for i := 0 to Count - 1 do begin Result := Items[i]; if Result.SameAs(Hotkey) then Exit; end; Result := nil; end; procedure THotkeys.DoOnChange(hotkey: THotkey; operation: THotkeyOperation); begin if Assigned(FOnChange) then FOnChange(hotkey, operation); end; { THMForm } constructor THMForm.Create(AName: String); begin FFreeNotifier := nil; inherited; Controls := THMControls.Create(True); FActionLists := TActionLists.Create(False); end; destructor THMForm.Destroy; begin inherited; Controls.Free; FActionLists.Free; FFreeNotifier.Free; end; procedure THMForm.RegisterActionList(ActionList: TActionList); var i: Integer; begin if FActionLists.IndexOf(ActionList) < 0 then begin FActionLists.Add(ActionList); Hotkeys.OnChange := @OnHotkeyEvent; if not Assigned(FFreeNotifier) then begin FFreeNotifier := TFreeNotifier.Create(nil); FFreeNotifier.OnFree := @OnActionListFree; end; ActionList.FreeNotification(FFreeNotifier); // Initialize actionlist with shortcuts. for i := 0 to hotkeys.Count - 1 do SetActionShortcut(hotkeys[i], False); end; end; procedure THMForm.UnregisterActionList(ActionList: TActionList); begin if FActionLists.Remove(ActionList) >= 0 then ActionList.RemoveFreeNotification(FFreeNotifier); end; function THMForm.GetActionByCommand(ActionList: TActionList; Command: String): TAction; var action: TContainedAction; begin action := ActionList.ActionByName('act' + Copy(Command, 4, Length(Command) - 3)); if action is TAction then Result := action as TAction else Result := nil; end; procedure THMForm.OnActionListFree(Sender: TObject); begin if Sender is TActionList then UnregisterActionList(Sender as TActionList); end; procedure THMForm.OnHotkeyEvent(hotkey: THotkey; operation: THotkeyOperation); begin case operation of hopAdd: SetActionShortcut(hotkey, False); hopRemove: RemoveActionShortcut(hotkey, True); hopClear: RemoveActionShortcut(hotkey, False); hopUpdate: SetActionShortcut(hotkey, True); end; end; procedure THMForm.RemoveActionShortcut(hotkey: THotkey; AssignNextShortcut: Boolean); var action: TAction; i, j: Integer; shortcut, newShortcut: TShortCut; begin shortcut := TextToShortCutEx(hotkey.Shortcuts[0]); for i := 0 to FActionLists.Count - 1 do begin action := GetActionByCommand(FActionLists[i], hotkey.Command); if Assigned(action) then begin if action.Shortcut = shortcut then begin newShortcut := VK_UNKNOWN; if AssignNextShortcut then begin // Search for another possible hotkey assigned for the same command. for j := 0 to hotkeys.Count - 1 do if (hotkeys[j].Command = hotkey.Command) and (hotkeys[j] <> hotkey) then begin newShortcut := TextToShortCutEx(hotkeys[j].Shortcuts[0]); Break; end; end; action.ShortCut := newShortcut; end; end; end; end; procedure THMForm.SetActionShortcut(hotkey: THotkey; OverridePrevious: Boolean); var action: TAction; i: Integer; shortcut: TShortCut; begin if Length(hotkey.Params) > 0 then Exit; shortcut := TextToShortCutEx(hotkey.Shortcuts[0]); for i := 0 to FActionLists.Count - 1 do begin action := GetActionByCommand(FActionLists[i], hotkey.Command); if Assigned(action) then begin if OverridePrevious or (action.Shortcut = VK_UNKNOWN) then action.ShortCut := shortcut; end; end; end; { THMBaseObject } constructor THMBaseObject.Create(AName: String); begin FName := AName; FHotkeys := THotkeys.Create(True); FObjects := TFPObjectList.Create(True); end; destructor THMBaseObject.Destroy; begin inherited Destroy; FHotkeys.Free; FObjects.Free; end; function THMBaseObject.Add(AInstanceInfo: InstanceInfoClass): Integer; begin Result := FObjects.Add(AInstanceInfo); end; procedure THMBaseObject.Delete(AInstance: InstanceClass); var i: Integer; begin for i := 0 to FObjects.Count - 1 do if InstanceInfoClass(FObjects[i]).Instance = AInstance then begin FObjects.Delete(i); Exit; end; end; function THMBaseObject.Find(AInstance: InstanceClass): InstanceInfoClass; var i: Integer; begin for i := 0 to FObjects.Count - 1 do begin if InstanceInfoClass(FObjects[i]).Instance = AInstance then Exit(InstanceInfoClass(FObjects[i])); end; Result := nil; end; { THMControls } procedure THMControls.Delete(AName: String); var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then begin Delete(i); Exit; end; end; function THMControls.Find(AName: String): THMControl; var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then Exit(Items[i]); Result := nil; end; function THMControls.Find(AControl: TWinControl): THMControl; var i: Integer; begin for i := 0 to Count - 1 do begin if Assigned(Items[i].Find(AControl)) then Exit(Items[i]); end; Result := nil; end; function THMControls.FindOrCreate(AName: String): THMControl; begin Result := Find(AName); if not Assigned(Result) then begin Result := THMControl.Create(AName); Add(Result); end; end; { THMForms } procedure THMForms.Delete(AName: String); var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then begin Delete(i); Exit; end; end; function THMForms.Find(AName: String): THMForm; var i: Integer; begin for i := 0 to Count - 1 do begin if SameText(Items[i].Name, AName) then Exit(Items[i]); end; Result := nil; end; function THMForms.Find(AForm: TCustomForm): THMForm; var i: Integer; begin for i := 0 to Count - 1 do begin if Assigned(Items[i].Find(AForm)) then Exit(Items[i]); end; Result := nil; end; function THMForms.FindOrCreate(AName: String): THMForm; begin Result := Find(AName); if not Assigned(Result) then begin Result := THMForm.Create(AName); Add(Result); end; end; { THotKeyManager } constructor THotKeyManager.Create; begin FForms := THMForms.Create(True); FSequenceStep := 0; end; destructor THotKeyManager.Destroy; begin inherited Destroy; FForms.Free; end; procedure THotKeyManager.Save(FileName: String); var Config: TXmlConfig = nil; begin try Config := TXmlConfig.Create(FileName, True); Config.SetAttr(Config.RootNode, 'DCVersion', dcVersion); Save(Config, Config.RootNode); Config.Save; finally Config.Free; end; end; procedure THotKeyManager.Load(FileName: String); var Config: TXmlConfig = nil; NotAnXML: Boolean = False; begin try Config := TXmlConfig.Create(FileName); try if Config.Load then Load(Config, Config.RootNode); finally Config.Free; end; except on EXMLReadError do NotAnXML := True; end; if NotAnXML then begin LoadIni(FileName); // Immediately save as xml so that configuration isn't lost. if mbRenameFile(FileName, FileName + '.ini.obsolete') then Save(FileName); end; end; procedure THotKeyManager.Save(Config: TXmlConfig; Root: TXmlNode); var SavedHotkeys: THotkeys; procedure SaveHotkeys(Form: THMForm; Hotkeys: THotkeys; ControlIndex: Integer; Node: TXmlNode); var i, j: Integer; HotkeyNode, ControlNode: TXmlNode; Control: THMControl; procedure AddControl(AName: String); begin ControlNode := Config.AddNode(HotkeyNode, 'Control'); Config.SetContent(ControlNode, AName); end; begin for i := 0 to Hotkeys.Count - 1 do begin // Save Form's hotkeys and hotkeys which have not been saved yet. if (ControlIndex < 0) or (not Assigned(SavedHotkeys.FindByContents(Hotkeys[i]))) then begin HotkeyNode := Config.AddNode(Node, 'Hotkey'); for j := Low(Hotkeys[i].Shortcuts) to High(Hotkeys[i].Shortcuts) do Config.AddValue(HotkeyNode, 'Shortcut', Hotkeys[i].Shortcuts[j]); Config.AddValue(HotkeyNode, 'Command', Hotkeys[i].Command); for j := Low(Hotkeys[i].Params) to High(Hotkeys[i].Params) do Config.AddValue(HotkeyNode, 'Param', Hotkeys[i].Params[j]); if ControlIndex >= 0 then AddControl(Form.Controls[ControlIndex].Name); // Search all successive controls for the same hotkey. for j := Succ(ControlIndex) to Form.Controls.Count - 1 do begin Control := Form.Controls[j]; if Assigned(Control.Hotkeys.FindByContents(Hotkeys[i])) then AddControl(Control.Name); end; SavedHotkeys.Add(Hotkeys[i]); end; end; end; var i, j: Integer; FormNode: TXmlNode; Form: THMForm; begin Root := Config.FindNode(Root, 'Hotkeys', True); Config.ClearNode(Root); Config.SetAttr(Root, 'Version', hkVersion); SavedHotkeys := THotkeys.Create(False); try for i := 0 to FForms.Count - 1 do begin Form := FForms[i]; FormNode := Config.AddNode(Root, 'Form'); Config.SetAttr(FormNode, 'Name', Form.Name); SaveHotkeys(Form, Form.Hotkeys, -1, FormNode); for j := 0 to Form.Controls.Count - 1 do SaveHotkeys(Form, Form.Controls[j].Hotkeys, j, FormNode); end; finally SavedHotkeys.Free; end; end; procedure THotKeyManager.Load(Config: TXmlConfig; Root: TXmlNode); var Form: THMForm; procedure AddIfNotEmpty(var Arr: TDynamicStringArray; const Value: String); begin if Value <> '' then AddString(Arr, Value); end; procedure LoadHotkey(FormName: String; Hotkeys: THotkeys; Node: TXmlNode); const RenamedCommandsMain: array [0..1] of record OldName, NewName: String; SinceVersion: Integer end = ( (OldName: 'cm_RemoveTab'; NewName: 'cm_CloseTab'; SinceVersion: 14), (OldName: 'cm_RemoveAllTabs'; NewName: 'cm_CloseAllTabs'; SinceVersion: 14) ); var Shortcut, Command, Param: String; Shortcuts: array of String = nil; Params: array of String = nil; Controls: array of String = nil; HMControl: THMControl; i: Integer; begin // These checks for version may be removed after 0.5.5 release because // the XML format for hotkeys has only been added in development version 0.5.5. // Only Command needs to be retrieved here. if FVersion <= 1 then Command := Config.GetAttr(Node, 'Command', '') else Command := Config.GetValue(Node, 'Command', ''); // Leave only this or move this to the loop "while Assigned(Node) do" below if FVersion <= 1 then Param := Config.GetAttr(Node, 'Params', '') else if FVersion < 9 then Param := Config.GetValue(Node, 'Params', ''); if FVersion < 10 then begin Shortcut := Config.GetAttr(Node, 'Key', ''); if Shortcut <> '' then begin Shortcut := NormalizeModifiers(Shortcut); AddIfNotEmpty(Shortcuts, Shortcut); end; end; if (FVersion < 9) then AddIfNotEmpty(Params, Param); // Up to here may be deleted after 0.5.5 release. Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Shortcut') = 0 then AddIfNotEmpty(Shortcuts, NormalizeModifiers(Config.GetContent(Node))) else if Node.CompareName('Control') = 0 then AddIfNotEmpty(Controls, Config.GetContent(Node)) else if Node.CompareName('Param') = 0 then AddIfNotEmpty(Params, Config.GetContent(Node)); Node := Node.NextSibling; end; if Command <> EmptyStr then begin // Rename commands that have changed names. if FormName = 'Main' then begin for i := Low(RenamedCommandsMain) to High(RenamedCommandsMain) do begin if (FVersion <= RenamedCommandsMain[i].SinceVersion) and (Command = RenamedCommandsMain[i].OldName) then Command := RenamedCommandsMain[i].NewName; end; end; if Length(Shortcuts) > 0 then begin if Length(Controls) = 0 then begin // This "if" block may also be deleted after 0.5.5 release. if (FVersion <= 3) and IsShortcutConflictingWithOS(Shortcuts[0]) then begin HMControl := Form.Controls.FindOrCreate('Files Panel'); HMControl.Hotkeys.AddIfNotExists(Shortcuts, Params, Command); end else Hotkeys.Add(Shortcuts, Params, Command); // Leave only this end else begin for i := Low(Controls) to High(Controls) do begin HMControl := Form.Controls.FindOrCreate(Controls[i]); HMControl.Hotkeys.Add(Shortcuts, Params, Command); end; end; end; end; end; var FormNode, HotkeyNode: TXmlNode; AName: String; begin ClearAllHotkeys; Root := Config.FindNode(Root, 'Hotkeys'); if Assigned(Root) then begin FVersion := Config.GetAttr(Root, 'Version', hkVersion); FormNode := Root.FirstChild; while Assigned(FormNode) do begin if (FormNode.CompareName('Form') = 0) and (Config.TryGetAttr(FormNode, 'Name', AName)) and (AName <> EmptyStr) then begin Form := FForms.FindOrCreate(AName); HotkeyNode := FormNode.FirstChild; while Assigned(HotkeyNode) do begin if HotkeyNode.CompareName('Hotkey') = 0 then LoadHotkey(Form.Name, Form.Hotkeys, HotkeyNode); HotkeyNode := HotkeyNode.NextSibling; end; end; FormNode := FormNode.NextSibling; end; end; end; procedure THotKeyManager.LoadIni(FileName: String); var st: TStringList; ini: TIniFileEx; i, j: Integer; section: String; shortCut: String; hotkeys: THotkeys; form: THMForm; control: THMControl; Command, Param, FormName, ControlName: String; Params: array of String = nil; procedure RemoveFrmPrexif(var s: String); begin if SameText(Copy(s, 1, 3), 'Frm') then Delete(s, 1, 3); end; begin ClearAllHotkeys; st := TStringList.Create; ini := TIniFileEx.Create(FileName); ini.ReadSections(st); for i := 0 to st.Count - 1 do begin section := st[i]; shortCut := NormalizeModifiers(section); if shortCut <> '' then begin j := 0; while ini.ValueExists(section, 'Command' + IntToStr(j)) do begin Command := ini.ReadString(section, 'Command' + IntToStr(j), ''); Param := ini.ReadString(section, 'Param' + IntToStr(j), ''); ControlName := ini.ReadString(section, 'Object' + IntToStr(j), ''); FormName := ini.ReadString(section, 'Form' + IntToStr(j), ''); RemoveFrmPrexif(FormName); RemoveFrmPrexif(ControlName); form := FForms.FindOrCreate(FormName); if IsShortcutConflictingWithOS(shortCut) then ControlName := 'Files Panel'; // Old config had FormName=ControlName for main form. if SameText(FormName, ControlName) then begin hotkeys := form.Hotkeys; end else begin control := form.Controls.FindOrCreate(ControlName); hotkeys := control.Hotkeys; end; if Param <> '' then begin SetLength(Params, 1); Params[0] := Param; end else Params := nil; hotkeys.Add([shortcut], Params, Command); j := j + 1; end; end; end; FreeAndNil(st); FreeAndNil(ini); end; function THotKeyManager.Register(AForm: TCustomForm; AFormName: String): THMForm; var formInstance: THMFormInstance; begin Result := RegisterForm(AFormName); formInstance := Result.Find(AForm); if not Assigned(formInstance) then begin formInstance := THMFormInstance.Create; formInstance.Instance := AForm; formInstance.KeyDownProc := AForm.OnKeyDown; Result.Add(formInstance); AForm.OnKeyDown := @KeyDownHandler; AForm.KeyPreview := True; end; end; function THotKeyManager.Register(AControl: TWinControl; AControlName: String): THMControl; var ParentForm: TCustomForm; form: THMForm; controlInstance: THMControlInstance; begin ParentForm := GetParentForm(AControl); if Assigned(ParentForm) then begin form := FForms.Find(ParentForm); if not Assigned(form) then begin DCDebug('HotMan: Failed registering ' + AControlName + ': Form ' + ParentForm.ClassName + ':' + ParentForm.Name + ' not registered.'); Exit(nil); end; Result := form.Controls.Find(AControlName); if not Assigned(Result) then begin Result := THMControl.Create(AControlName); form.Controls.Add(Result); end; controlInstance := Result.Find(AControl); if not Assigned(controlInstance) then begin controlInstance := THMControlInstance.Create; controlInstance.Instance := AControl; controlInstance.KeyDownProc := AControl.OnKeyDown; Result.Add(controlInstance); //AControl.OnKeyDown := @KeyDownHandler; end; end; end; function THotKeyManager.RegisterForm(AFormName: String): THMForm; begin Result := FForms.Find(AFormName); if not Assigned(Result) then begin Result := THMForm.Create(AFormName); FForms.Add(Result); end; end; function THotKeyManager.RegisterControl(AFormName: String; AControlName: String): THMControl; var form: THMForm; begin form := RegisterForm(AFormName); Result := form.Controls.Find(AControlName); if not Assigned(Result) then begin Result := THMControl.Create(AControlName); form.Controls.Add(Result); end; end; procedure THotKeyManager.UnRegister(AForm: TCustomForm); var form: THMForm; formInstance: THMFormInstance; begin form := FForms.Find(AForm); if Assigned(form) then begin formInstance := form.Find(AForm); AForm.OnKeyDown := formInstance.KeyDownProc; form.Delete(AForm); end; end; procedure THotKeyManager.UnRegister(AControl: TWinControl); var ParentForm: TCustomForm; form: THMForm; control: THMControl; i: Integer; begin ParentForm := GetParentForm(AControl); if Assigned(ParentForm) then begin form := FForms.Find(ParentForm); if Assigned(form) then begin control := form.Controls.Find(AControl); if Assigned(control) then control.Delete(AControl); end; end else begin // control lost its parent, find through all forms for i := 0 to FForms.Count - 1 do begin form := FForms[i]; control := form.Controls.Find(AControl); if Assigned(control) then control.Delete(AControl); end; end; end; function THotKeyManager.HotKeyEvent(Form: TCustomForm; Hotkeys: THotkeys): Boolean; var hotkey: THotkey; FormCommands: IFormCommands; begin hotkey := Hotkeys.FindByBeginning(FShortcutsSequence, False); if Assigned(hotkey) then begin if High(hotkey.Shortcuts) > FSequenceStep then begin // There are more shortcuts to match. FLastShortcutTime := SysUtils.Now; Inc(FSequenceStep); Result := True; end else begin FSequenceStep := 0; FormCommands := Form as IFormCommands; Result := Assigned(FormCommands) and (FormCommands.ExecuteCommand(hotkey.Command, hotkey.Params) = cfrSuccess); end; end else Result := False; end; procedure THotKeyManager.ClearAllHotkeys; var i, j: Integer; Form: THMForm; begin for i := 0 to FForms.Count - 1 do begin Form := FForms[i]; Form.Hotkeys.Clear; for j := 0 to Form.Controls.Count - 1 do Form.Controls[j].Hotkeys.Clear; end; end; procedure THotKeyManager.KeyDownHandler(Sender: TObject; var Key: Word; Shift: TShiftState); //------------------------------------------------------ var i: Integer; Shortcut: TShortCut; TextShortcut: String; Form: TCustomForm; Control: TWinControl; HMForm: THMForm; HMControl: THMControl; HMFormInstance: THMFormInstance; HMControlInstance: THMControlInstance; ShiftEx: TShiftState; function OrigKeyDown(AKeyDownProc: TKeyEvent): Boolean; begin if Assigned(AKeyDownProc) then begin AKeyDownProc(Sender, Key, ShiftEx); Result := True; end else Result := False; end; begin Form := GetParentForm(Sender as TWinControl); HMForm := FForms.Find(Form); if not Assigned(HMForm) then Exit; ShiftEx := GetKeyShiftStateEx; Shortcut := KeyToShortCutEx(Key, ShiftEx); TextShortcut := ShortCutToTextEx(Shortcut); Control := Form.ActiveControl; // Don't execute hotkeys that coincide with key typing actions. if (TextShortcut <> '') and ((FSequenceStep > 0) or (not ((((GetKeyTypingAction(ShiftEx) <> ktaNone) and (HMForm.Name = 'Main')) {$IFDEF MSWINDOWS} // Don't execute hotkeys with Ctrl+Alt = AltGr on Windows. or (HasKeyboardAltGrKey and (ShiftEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmNone] <> ktaNone)) // Don't execute hotkeys with AltGr on Windows. or (ShiftEx = [ssAltGr]) {$ENDIF} ) and (Key in [VK_0..VK_9, VK_A..VK_Z])))) then begin // If too much time has passed reset sequence. if (FSequenceStep > 0) and (DateTimeToTimeStamp(SysUtils.Now - FLastShortcutTime).Time > MaxShortcutSequenceInterval) then FSequenceStep := 0; // Add shortcut to sequence. if Length(FShortcutsSequence) <> FSequenceStep + 1 then SetLength(FShortcutsSequence, FSequenceStep + 1); FShortcutsSequence[FSequenceStep] := TextShortcut; if Assigned(Control) then begin for i := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[i]; HMControlInstance := HMControl.Find(Control); if Assigned(HMControlInstance) then begin if HotKeyEvent(Form, HMControl.Hotkeys) then begin Key := VK_UNKNOWN; Exit; end else Break; end; end; end; // Hotkey for the whole form if (Key <> VK_UNKNOWN) and HotKeyEvent(Form, HMForm.Hotkeys) then begin Key := VK_UNKNOWN; Exit; end; FSequenceStep := 0; // Hotkey was not matched - reset sequence. end; if Key <> VK_UNKNOWN then begin HMFormInstance := HMForm.Find(Form); OrigKeyDown(HMFormInstance.KeyDownProc); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uhotdir.pas��������������������������������������������������������������������0000644�0001750�0000144�00000141442�15104114162�015545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Load/Save/WorkingWith HotDir Copyright (C) 2014-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uHotDir; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Menus, ExtCtrls, Controls, ComCtrls, //DC DCClassesUtf8, DCXmlConfig; const cSectionOfHotDir = 'DirectoryHotList'; ACTION_INVALID = 0; ACTION_ADDTOHOTLIST = 1; ACTION_ADDJUSTSOURCETOHOTLIST = 2; ACTION_ADDBOTHTOHOTLIST = 3; ACTION_CONFIGTOHOTLIST = 4; ACTION_JUSTSHOWCONFIGHOTLIST = 5; ACTION_ADDSELECTEDDIR = 6; ACTION_DIRECTLYCONFIGENTRY = 7; HOTLISTMAGICWORDS:array[1..7] of string =('add','addsrconly','addboth','config','show','addsel','directconfig'); TAGOFFSET_FORCHANGETOSPECIALDIR = $10000; ICONINDEX_SUBMENU = 0; ICONINDEX_DIRECTORYNOTPRESENTHERE = 1; ICONINDEX_SUBMENUWITHMISSING = 2; ICONINDEX_NEWADDEDDIRECTORY = 3; ICONINDEXNAME:array[0..3] of string = ('submenu','dirmissing','submenuwithmissing','newaddition'); HOTLIST_SEPARATORSTRING:string='···························'; TERMINATORNOTPRESENT = ':-<#/?*+*?\#>-:'; STR_ACTIVEFRAME: string = 'panel=active'; STR_NOTACTIVEFRAME: string = 'panel=inactive'; STR_LEFTFRAME: string = 'panel=left'; STR_RIGHTFRAME: string = 'panel=right'; STR_NAME: string = 'column=name'; STR_EXTENSION: string = 'column=ext'; STR_SIZE: string = 'column=size'; STR_MODIFICATIONDATETIME: string = 'column=datetime'; STR_ASCENDING : string = 'order=ascending'; STR_DESCENDING : string = 'order=descending'; type { TKindOfHotDirEntry } TKindOfHotDirEntry = (hd_NULL, hd_CHANGEPATH, hd_SEPARATOR, hd_STARTMENU, hd_ENDMENU, hd_COMMAND); { TKindHotDirMenuPopulation } TKindHotDirMenuPopulation = (mpJUSTHOTDIRS, mpHOTDIRSWITHCONFIG, mpPATHHELPER); { TPositionWhereToAddHotDir } TPositionWhereToAddHotDir = (ahdFirst, ahdLast, ahdSmart); { TExistingState } TExistingState = (DirExistUnknown, DirExist, DirNotExist); { TProcedureWhenClickMenuItem} TProcedureWhenClickOnMenuItem = procedure(Sender: TObject) of object; { THotDir } THotDir = class private FDispatcher: TKindOfHotDirEntry; FHotDirName: string; FHotDirPath: string; FHotDirPathSort: longint; FHotDirTarget: string; FHotDirTargetSort: longint; FHotDirExistingState: TExistingState; FGroupNumber : integer; public constructor Create; procedure CopyToHotDir(var DestinationHotDir: THotDir); property Dispatcher: TKindOfHotDirEntry read FDispatcher write FDispatcher; property HotDirName: string read FHotDirName write FHotDirName; property HotDirPath: string read FHotDirPath write FHotDirPath; property HotDirPathSort: longint read FHotDirPathSort write FHotDirPathSort; property HotDirTarget: string read FHotDirTarget write FHotDirTarget; property HotDirTargetSort: longint read FHotDirTargetSort write FHotDirTargetSort; property HotDirExisting: TExistingState read FHotDirExistingState write FHotDirExistingState; property GroupNumber: integer read FGroupNumber write FGroupNumber; end; { TDirectoryHotlist } TDirectoryHotlist = class(TList) private function GetHotDir(Index: integer): THotDir; public constructor Create; procedure Clear; override; function Add(HotDir: THotDir): integer; procedure DeleteHotDir(Index: integer); procedure CopyDirectoryHotlistToDirectoryHotlist(var DestinationDirectoryHotlist: TDirectoryHotlist); procedure LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode; FlagEraseOriginalOnes: boolean); procedure ImportDoubleCommander(DoubleCommanderFilename: String); function ExportDoubleCommander(DoubleCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; procedure PopulateMenuWithHotDir(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenHotDirItemClicked, ProcedureWhenHotDirAddOrConfigClicked: TProcedureWhenClickOnMenuItem; KindHotDirMenuPopulation: TKindHotDirMenuPopulation; TagOffset: longint); function LoadTTreeView(ParamTreeView:TTreeView; DirectoryHotlistIndexToSelectIfAny:longint):TTreeNode; procedure RefreshFromTTreeView(ParamTreeView:TTreeView); function AddFromAnotherTTreeViewTheSelected(ParamWorkingTreeView, ParamTreeViewToImport:TTreeView; FlagAddThemAll: boolean): longint; function ComputeSignature(Seed:dword=$00000000):dword; property HotDir[Index: integer]: THotDir read GetHotDir; {$IFDEF MSWINDOWS} function ImportTotalCommander(TotalCommanderConfigFilename: String): integer; function ExportTotalCommander(TotalCommanderConfigFilename: String; FlagEraseOriginalOnes: boolean): boolean; {$ENDIF} end; { TCheckDrivePresenceThread } TCheckDrivePresenceThread = class(TThread) private FDriveToSearchFor: string; FListOfNonExistingDrive: TStringList; FThreadCountPoint: ^longint; procedure ReportNotPresentInTheThread; procedure ReportPresentInTheThread; protected procedure Execute; override; public constructor Create(sDrive: string; ParamListOfNonExistingDrive: TStringList; var ThreadCount: longint); destructor Destroy; override; end; implementation uses //Lazarus, Free-Pascal, etc. crc, Graphics, Forms, lazutf8, //DC DCFileAttributes, uDebug, uDCUtils, fMain, uFile, uLng, DCOSUtils, DCStrUtils, uGlobs, uSpecialDir {$IFDEF MSWINDOWS} ,uTotalCommander {$ENDIF} ; function GetCaption(const ACaption: TCaption): TCaption; begin {$IF not (DEFINED(LCLWIN32) or DEFINED(LCLCOCOA))} if (Pos('&', StringReplace(ACaption, '&&', '', [rfReplaceAll])) = 0) then Result:= '&' + ACaption else {$ENDIF} Result:= ACaption; end; { THotDir.Create } constructor THotDir.Create; begin inherited Create; FDispatcher := hd_NULL; FHotDirName := ''; FHotDirPath := ''; FHotDirPathSort := 0; FHotDirTarget := ''; FHotDirTargetSort := 0; FHotDirExistingState := DirExistUnknown; FGroupNumber := 0; end; { THotDir.CopyToHotDir } procedure THotDir.CopyToHotDir(var DestinationHotDir: THotDir); begin DestinationHotDir.Dispatcher := FDispatcher; DestinationHotDir.HotDirName := FHotDirName; DestinationHotDir.HotDirPath := FHotDirPath; DestinationHotDir.HotDirPathSort := FHotDirPathSort; DestinationHotDir.HotDirTarget := FHotDirTarget; DestinationHotDir.HotDirTargetSort := FHotDirTargetSort; DestinationHotDir.HotDirExisting := FHotDirExistingState; DestinationHotDir.GroupNumber := FGroupNumber; end; { TDirectoryHotlist.Create } constructor TDirectoryHotlist.Create; begin inherited Create; end; { TDirectoryHotlist.Clear } procedure TDirectoryHotlist.Clear; var i: integer; begin for i := 0 to Count - 1 do HotDir[i].Free; inherited Clear; end; { TDirectoryHotlist.Add } function TDirectoryHotlist.Add(HotDir: THotDir): integer; begin Result := inherited Add(HotDir); end; { TDirectoryHotlist.DeleteHotDir } procedure TDirectoryHotlist.DeleteHotDir(Index: integer); begin HotDir[Index].Free; Delete(Index); end; { TDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist } procedure TDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(var DestinationDirectoryHotlist: TDirectoryHotlist); var LocalHotDir: THotDir; Index: longint; begin //Let's delete possible previous list content for Index := pred(DestinationDirectoryHotlist.Count) downto 0 do DestinationDirectoryHotlist.DeleteHotDir(Index); DestinationDirectoryHotlist.Clear; //Now let's create entries and add them one by one to the destination list for Index := 0 to pred(Count) do begin LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := HotDir[Index].Dispatcher; LocalHotDir.HotDirName := HotDir[Index].HotDirName; LocalHotDir.HotDirPath := HotDir[Index].HotDirPath; LocalHotDir.HotDirPathSort := HotDir[Index].HotDirPathSort; LocalHotDir.HotDirTarget := HotDir[Index].HotDirTarget; LocalHotDir.HotDirTargetSort := HotDir[Index].HotDirTargetSort; LocalHotDir.FHotDirExistingState := HotDir[Index].HotDirExisting; LocalHotDir.FGroupNumber := HotDir[Index].GroupNumber; DestinationDirectoryHotlist.Add(LocalHotDir); end; end; { TDirectoryHotlist.LoadTTreeView } //For each node, the "ImageIndex" field is recuperated to be an index of which //item in the directory list it represent. Because of the fact that the //"hd_ENDMENU's" don't have their direct element in the tree, the field //"absoluteindex" cannot be used for that since as soon as there is a subment, //we lost the linearity of the matching of absoluteindex vs index of hotdir in //the list. function TDirectoryHotlist.LoadTTreeView(ParamTreeView:TTreeView; DirectoryHotlistIndexToSelectIfAny:longint):TTreeNode; var Index: longint; procedure RecursivAddElements(WorkingNode: TTreeNode); var FlagGetOut: boolean = False; LocalNode: TTreeNode; begin while (FlagGetOut = False) and (Index < Count) do begin case HotDir[Index].Dispatcher of hd_STARTMENU: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, HotDir[Index].HotDirName,HotDir[Index]); if HotDir[Index].FHotDirExistingState=DirNotExist then begin LocalNode.ImageIndex:=ICONINDEX_SUBMENUWITHMISSING; LocalNode.SelectedIndex:=ICONINDEX_SUBMENUWITHMISSING; LocalNode.StateIndex:=ICONINDEX_SUBMENUWITHMISSING; end else begin LocalNode.ImageIndex:=ICONINDEX_SUBMENU; LocalNode.SelectedIndex:=ICONINDEX_SUBMENU; LocalNode.StateIndex:=ICONINDEX_SUBMENU; end; LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); RecursivAddElements(LocalNode); end; hd_ENDMENU: begin FlagGetOut := True; Inc(Index); end; hd_SEPARATOR: begin LocalNode:=ParamTreeView.Items.AddChildObject(WorkingNode, HOTLIST_SEPARATORSTRING ,HotDir[Index]); LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); end else begin LocalNode:=ParamTreeView.Items.AddChildObject(WorkingNode, HotDir[Index].HotDirName,HotDir[Index]); if HotDir[Index].FHotDirExistingState=DirNotExist then begin LocalNode.ImageIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; LocalNode.SelectedIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; LocalNode.StateIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; end; LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); end; end; end; end; begin result:=nil; ParamTreeView.Items.Clear; Index := 0; RecursivAddElements(nil); end; { TDirectoryHotlist.PopulateMenuWithHotDir } procedure TDirectoryHotlist.PopulateMenuWithHotDir(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenHotDirItemClicked, ProcedureWhenHotDirAddOrConfigClicked: TProcedureWhenClickOnMenuItem; KindHotDirMenuPopulation: TKindHotDirMenuPopulation; TagOffset: longint); var I: longint; //Same variable for main and local routine FlagCurrentPathAlreadyInMenu, FlagSelectedPathAlreadyInMenu: boolean; CurrentPathToSearch, SelectedPathToSearch: string; MaybeActiveOrSelectedDirectories: TFiles; //Warning: "CompleteMenu" is recursive and call itself. function CompleteMenu(ParamMenuItem: TMenuItem): longint; var localmi: TMenuItem; LocalLastAdditionIsASeparator: boolean; begin Result := 0; LocalLastAdditionIsASeparator := False; while I < Count do begin Inc(I); case HotDir[I - 1].Dispatcher of hd_CHANGEPATH: begin case HotDir[I - 1].HotDirExisting of DirExistUnknown, DirExist: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption:= GetCaption(GetMenuCaptionAccordingToOptions(HotDir[I - 1].HotDirName,HotDir[I - 1].HotDirPath)); localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenHotDirItemClicked; ParamMenuItem.Add(localmi); if CurrentPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagCurrentPathAlreadyInMenu := True; if SelectedPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagSelectedPathAlreadyInMenu := True; LocalLastAdditionIsASeparator := False; Inc(Result); end; end; end; hd_NULL, hd_COMMAND: begin if KindHotDirMenuPopulation <> mpPATHHELPER then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := GetCaption(HotDir[I - 1].HotDirName); localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenHotDirItemClicked; ParamMenuItem.Add(localmi); LocalLastAdditionIsASeparator := False; Inc(Result); end; end; hd_SEPARATOR: begin if (ParamMenuItem.Count > 0) and (not LocalLastAdditionIsASeparator) then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := '-'; ParamMenuItem.Add(localmi); LocalLastAdditionIsASeparator := True; Inc(Result); end; end; hd_STARTMENU: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := GetCaption(HotDir[I - 1].HotDirName); if gIconsInMenus then localmi.ImageIndex:=ICONINDEX_SUBMENU; ParamMenuItem.Add(localmi); CompleteMenu(localmi); if localmi.Count <> 0 then begin LocalLastAdditionIsASeparator := False; Inc(Result); end else begin localmi.Free; end; end; hd_ENDMENU: begin if LocalLastAdditionIsASeparator then begin ParamMenuItem.Items[pred(ParamMenuItem.Count)].Free; Dec(Result); end; exit; end; end; //case HotDir[I-1].Dispatcher of end; //while I<Count do end; var miMainTree: TMenuItem; LastAdditionIsASeparator: boolean; NumberOfElementsSoFar, InitialNumberOfItems: longint; begin MaybeActiveOrSelectedDirectories:=frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try // Create All popup menu CurrentPathToSearch := UpperCase(mbExpandFileName(frmMain.ActiveFrame.CurrentLocation)); if MaybeActiveOrSelectedDirectories.Count=1 then SelectedPathToSearch := UpperCase(ExcludeTrailingPathDelimiter(mbExpandFileName(MaybeActiveOrSelectedDirectories.Items[0].FullPath))) else SelectedPathToSearch := TERMINATORNOTPRESENT; FlagCurrentPathAlreadyInMenu := False; FlagSelectedPathAlreadyInMenu := FALSE; LastAdditionIsASeparator := False; case KindHotDirMenuPopulation of mpJUSTHOTDIRS, mpHOTDIRSWITHCONFIG: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then begin TPopupMenu(mncmpMenuComponentToPopulate).Items.Clear; InitialNumberOfItems := mncmpMenuComponentToPopulate.ComponentCount; end; end; end; I := 0; while I < Count do begin Inc(I); case HotDir[I - 1].Dispatcher of hd_CHANGEPATH: begin case HotDir[I - 1].HotDirExisting of DirExistUnknown, DirExist: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := GetCaption(GetMenuCaptionAccordingToOptions(HotDir[I - 1].HotDirName,HotDir[I - 1].HotDirPath)); miMainTree.tag := (I - 1) + TagOffset; miMainTree.OnClick := ProcedureWhenHotDirItemClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); if CurrentPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagCurrentPathAlreadyInMenu := True; if SelectedPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagSelectedPathAlreadyInMenu := True; LastAdditionIsASeparator := False; end; end; end; hd_NULL, hd_COMMAND: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := GetCaption(HotDir[I - 1].HotDirName); miMainTree.tag := (I - 1) + TagOffset; miMainTree.OnClick := ProcedureWhenHotDirItemClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); LastAdditionIsASeparator := False; end; hd_SEPARATOR: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then NumberOfElementsSoFar := TPopupMenu(mncmpMenuComponentToPopulate).Items.Count else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then NumberOfElementsSoFar := TMenuItem(mncmpMenuComponentToPopulate).Count; if (NumberOfElementsSoFar > 0) and (not LastAdditionIsASeparator) then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); LastAdditionIsASeparator := True; end; end; hd_STARTMENU: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := GetCaption(HotDir[I - 1].HotDirName); if gIconsInMenus then miMainTree.ImageIndex := ICONINDEX_SUBMENU; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); CompleteMenu(miMainTree); if miMainTree.Count <> 0 then begin LastAdditionIsASeparator := False; end else begin miMainTree.Free; end; end; hd_ENDMENU: begin if LastAdditionIsASeparator then begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items[pred(TPopupMenu(mncmpMenuComponentToPopulate).Items.Count)].Free else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Items[pred(TMenuItem(mncmpMenuComponentToPopulate).Count)].Free; end; end; end; end; //2014-08-25:If last item added is a separator, we need to remove it so it will not look bad with another separator added at the end if LastAdditionIsASeparator then begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items[pred(TPopupMenu(mncmpMenuComponentToPopulate).Items.Count)].Free else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Items[pred(TMenuItem(mncmpMenuComponentToPopulate).Count)].Free; end; case KindHotDirMenuPopulation of mpHOTDIRSWITHCONFIG: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then begin if mncmpMenuComponentToPopulate.ComponentCount>InitialNumberOfItems then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; // Let's add the "Special path" in a context of change directory gSpecialDirList.PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate, mp_CHANGEDIR, ProcedureWhenHotDirItemClicked); // now add delimiter miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); //now add the "selected path", if any, if it's the case if MaybeActiveOrSelectedDirectories.Count>0 then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); case MaybeActiveOrSelectedDirectories.Count of 1: with Application.MainForm as TForm do if not FlagSelectedPathAlreadyInMenu then miMainTree.Caption := rsMsgHotDirAddSelectedDirectory + MinimizeFilePath(MaybeActiveOrSelectedDirectories.Items[0].FullPath, Canvas, 250).Replace('&','&&') else miMainTree.Caption := rsMsgHotDirReAddSelectedDirectory + MinimizeFilePath(MaybeActiveOrSelectedDirectories.Items[0].FullPath, Canvas, 250).Replace('&','&&'); else miMainTree.Caption := Format(rsMsgHotDirAddSelectedDirectories,[MaybeActiveOrSelectedDirectories.Count]); end; miMainTree.Tag := ACTION_ADDSELECTEDDIR; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // now allow to add or re-add the "current path" miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); with Application.MainForm as TForm do if not FlagCurrentPathAlreadyInMenu then miMainTree.Caption := rsMsgHotDirAddThisDirectory + MinimizeFilePath(frmMain.ActiveFrame.CurrentPath, Canvas, 250).Replace('&','&&') else miMainTree.Caption := rsMsgHotDirReAddThisDirectory + MinimizeFilePath(frmMain.ActiveFrame.CurrentPath, Canvas, 250).Replace('&','&&'); miMainTree.Tag := ACTION_ADDTOHOTLIST; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // now add configure item miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := rsMsgHotDirConfigHotlist; miMainTree.Tag := ACTION_CONFIGTOHOTLIST; miMainTree.ShortCut := frmMain.mnuCmdConfigDirHotlist.ShortCut; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; //case KindHotDirMenuPopulation of finally FreeAndNil(MaybeActiveOrSelectedDirectories); end; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then if TPopupMenu(mncmpMenuComponentToPopulate).Images=nil then TPopupMenu(mncmpMenuComponentToPopulate).Images:= frmMain.imgLstDirectoryHotlist; if mncmpMenuComponentToPopulate.ClassType = TMenuItem then if TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images=nil then TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images:= frmMain.imgLstDirectoryHotlist; end; { TDirectoryHotlist.LoadFromXml } { Information are stored like originally DC was storing them WITH addition of menu related info in a simular way TC. } procedure TDirectoryHotlist.LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); var sName, sPath: string; LocalHotDir: THotDir; CurrentMenuLevel: integer; FlagAvortInsertion: boolean; begin Clear; CurrentMenuLevel := 0; ANode := ANode.FindNode(cSectionOfHotDir); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('HotDir') = 0 then begin if AConfig.TryGetAttr(ANode, 'Name', sName) and AConfig.TryGetAttr(ANode, 'Path', sPath) then begin FlagAvortInsertion := False; LocalHotDir := THotDir.Create; if sName = '-' then begin LocalHotDir.Dispatcher := hd_SEPARATOR; end else begin if sName = '--' then begin LocalHotDir.Dispatcher := hd_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; //Sanity correction in case we got corrupted from any ways end else begin if (UTF8Length(sName) > 1) then begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalHotDir.Dispatcher := hd_STARTMENU; LocalHotDir.HotDirName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalHotDir.Dispatcher = hd_NULL then begin LocalHotDir.HotDirName := sName; LocalHotDir.HotDirPath := sPath; if UTF8Pos('cm_', UTF8LowerCase(sPath)) <> 1 then begin LocalHotDir.HotDirPathSort := AConfig.GetAttr(Anode, 'PathSort', 0); LocalHotDir.HotDirTarget := AConfig.GetAttr(ANode, 'Target', ''); LocalHotDir.HotDirTargetSort := AConfig.GetAttr(Anode, 'TargetSort', 0); if Pos('://', LocalHotDir.HotDirPath) = 0 then LocalHotDir.HotDirPath:=ExcludeBackPathDelimiter(LocalHotDir.HotDirPath); if Pos('://', LocalHotDir.HotDirTarget) = 0 then LocalHotDir.HotDirTarget:=ExcludeBackPathDelimiter(LocalHotDir.HotDirTarget); LocalHotDir.Dispatcher := hd_CHANGEPATH; end else begin LocalHotDir.Dispatcher := hd_COMMAND; end; end; end; end; if not FlagAvortInsertion then begin Add(LocalHotDir); end else begin LocalHotDir.Free; end; end; end; ANode := ANode.NextSibling; end; //Try to fix possible problem if the LAST MENU is not ending correctly... while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := hd_ENDMENU; Add(LocalHotDir); end; end; end; { TDirectoryHotlist.SaveToXml } // Information are stored like originally DC was storing them WITH addition of menu related info in a simular way TC. // When the parameter has the same value as it would have when loaded with no value (so with the default value), the parameter is not saved... // ...this way, it makes the overall filelenth smaller. When running on a portable mode from a usb key, everything thing counts! :-) // ..."Name" and "Path" always must be present for backward compatibility reason in case someone would go backward. // ...Not saving the value that are correctly initialized anyway as default on startup, with a setup of 386 entries for example saved 6642 bytes (5.3% of original 126005 bytes file) // procedure TDirectoryHotlist.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode; FlagEraseOriginalOnes: boolean); var Index: integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, cSectionOfHotDir, True); if FlagEraseOriginalOnes then AConfig.ClearNode(ANode); for Index := 0 to pred(Count) do begin SubNode := AConfig.AddNode(ANode, 'HotDir'); case THotDir(HotDir[Index]).Dispatcher of hd_NULL: begin AConfig.SetAttr(SubNode, 'Name', ''); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_CHANGEPATH: begin AConfig.SetAttr(SubNode, 'Name', HotDir[Index].HotDirName); AConfig.SetAttr(SubNode, 'Path', HotDir[Index].HotDirPath); if HotDir[Index].HotDirTarget <> '' then AConfig.SetAttr(SubNode, 'Target', HotDir[Index].HotDirTarget); if HotDir[Index].HotDirPathSort <> 0 then AConfig.SetAttr(SubNode, 'PathSort', HotDir[Index].HotDirPathSort); if HotDir[Index].HotDirTargetSort <> 0 then AConfig.SetAttr(SubNode, 'TargetSort', HotDir[Index].HotDirTargetSort); end; hd_SEPARATOR: begin AConfig.SetAttr(SubNode, 'Name', '-'); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_STARTMENU: begin AConfig.SetAttr(SubNode, 'Name', '-' + THotDir(HotDir[Index]).HotDirName); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_ENDMENU: begin AConfig.SetAttr(SubNode, 'Name', '--'); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_COMMAND: begin AConfig.SetAttr(SubNode, 'Name', HotDir[Index].HotDirName); AConfig.SetAttr(SubNode, 'Path', HotDir[Index].HotDirPath); if HotDir[Index].HotDirTarget <> '' then AConfig.SetAttr(SubNode, 'Target', HotDir[Index].HotDirTarget); end; end; end; end; { TDirectoryHotlist.ImportDoubleCommander } procedure TDirectoryHotlist.ImportDoubleCommander(DoubleCommanderFilename: String); var DoubleCommanderXMLToImport: TXmlConfig; Root: TXmlNode; begin DoubleCommanderXMLToImport := TXmlConfig.Create(DoubleCommanderFilename); try if DoubleCommanderXMLToImport.Load then begin Root := DoubleCommanderXMLToImport.RootNode; LoadFromXML(DoubleCommanderXMLToImport, Root); end; finally FreeAndNil(DoubleCommanderXMLToImport); end; end; { TDirectoryHotlist.ExportDoubleCommander } function TDirectoryHotlist.ExportDoubleCommander(DoubleCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; var DoubleCommanderXMLToImport: TXmlConfig; Root: TXmlNode; FlagKeepGoing: boolean; begin Result := False; //Unless we reach correctly the end, the result is negative FlagKeepGoing := True; DoubleCommanderXMLToImport := TXmlConfig.Create(DoubleCommanderFilename); try //Just in case we're requested to add or update content of a .XML file will already other data in it, first we load the structure if FileExists(DoubleCommanderFilename) then FlagKeepGoing := DoubleCommanderXMLToImport.Load; if FlagKeepGoing then begin Root := DoubleCommanderXMLToImport.RootNode; SaveToXml(DoubleCommanderXMLToImport, Root, FlagEraseOriginalOnes); Result := DoubleCommanderXMLToImport.Save; end; finally FreeAndNil(DoubleCommanderXMLToImport); end; end; { TDirectoryHotlist.AddFromAnotherTTreeViewTheSelected } //It looks the ".selected" field only gives us the kind of "itemindex" of current selection in the TTREE. //So, the apparent way to detect the current selected node is to check the ".Selection" fields. //So, we'll set the "GroupNumber" of pointed HotDir to 1 to indicate the one to import. // function TDirectoryHotlist.AddFromAnotherTTreeViewTheSelected(ParamWorkingTreeView, ParamTreeViewToImport:TTreeView; FlagAddThemAll: boolean): longint; procedure RecursiveAddTheOnesWithGroupNumberOne(WorkingTreeNode:TTreeNode; InsertionNodePlace:TTreeNode); var MaybeChildNode:TTreeNode; WorkingHotDirEntry:THotDir; NewTreeNode:TTreeNode; begin while WorkingTreeNode<>nil do begin MaybeChildNode:=WorkingTreeNode.GetFirstChild; if MaybeChildNode<>nil then begin if (THotDir(WorkingTreeNode.Data).GroupNumber = 1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); WorkingHotDirEntry.Dispatcher:=hd_STARTMENU; //Probably not necessary, but let's make sure it will start a menu Add(WorkingHotDirEntry); if ParamWorkingTreeView<>nil then begin NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, WorkingHotDirEntry.HotDirName,HotDir[count-1]); NewTreeNode.ImageIndex:=ICONINDEX_SUBMENU; NewTreeNode.SelectedIndex:=ICONINDEX_SUBMENU; NewTreeNode.StateIndex:=ICONINDEX_SUBMENU; end; inc(result); end; RecursiveAddTheOnesWithGroupNumberOne(MaybeChildNode,NewTreeNode); if (THotDir(WorkingTreeNode.Data).GroupNumber=1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; WorkingHotDirEntry.Dispatcher:=hd_ENDMENU; Add(WorkingHotDirEntry); end; end else begin if (THotDir(WorkingTreeNode.Data).GroupNumber=1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); Add(WorkingHotDirEntry); if ParamWorkingTreeView<>nil then begin case WorkingHotDirEntry.Dispatcher of hd_Separator: NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, HOTLIST_SEPARATORSTRING, HotDir[count-1]); else NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, WorkingHotDirEntry.HotDirName, HotDir[count-1]); end; end; inc(result); end; end; WorkingTreeNode:=WorkingTreeNode.GetNextSibling; end; end; procedure RecursiveSetGroupNumberToOne(WorkingTreeNode:TTreeNode; FlagTakeAlsoSibling:boolean); begin repeat if WorkingTreeNode.GetFirstChild=nil then begin if (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_STARTMENU) AND (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_ENDMENU) then begin THotDir(WorkingTreeNode.Data).GroupNumber:=1; end; end else begin THotDir(WorkingTreeNode.Data).GroupNumber:=1; RecursiveSetGroupNumberToOne(WorkingTreeNode.GetFirstChild,TRUE); end; if FlagTakeAlsoSibling then WorkingTreeNode:=WorkingTreeNode.GetNextSibling; until (FlagTakeAlsoSibling=FALSE) OR (WorkingTreeNode=nil); end; var OutsideIndex:integer; begin result:=0; //First, make sure no one is marked for OutsideIndex:=0 to pred(ParamTreeViewToImport.Items.Count) do THotDir(ParamTreeViewToImport.Items.Item[OutsideIndex].Data).GroupNumber:=0; //Then, set the "GroupNumber" to 1 to the ones to import if ParamTreeViewToImport.SelectionCount>0 then for OutsideIndex:=0 to pred(ParamTreeViewToImport.SelectionCount) do RecursiveSetGroupNumberToOne(ParamTreeViewToImport.Selections[OutsideIndex],FALSE); //Finally now collect the one with the "GroupNumber" set to 1. RecursiveAddTheOnesWithGroupNumberOne(ParamTreeViewToImport.Items.Item[0],nil); end; { TDirectoryHotlist.ComputeSignature } // Routine tries to pickup all char chain from element of directory hotlist and compute a unique CRC32. // This CRC32 will bea kind of signature of the directory hotlist. function TDirectoryHotlist.ComputeSignature(Seed:dword):dword; var Index:integer; begin result:=Seed; for Index := 0 to pred(Count) do begin Result := crc32(Result,@HotDir[Index].Dispatcher,1); if length(HotDir[Index].HotDirName)>0 then Result := crc32(Result,@HotDir[Index].HotDirName[1],length(HotDir[Index].HotDirName)); if length(HotDir[Index].HotDirPath)>0 then Result := crc32(Result,@HotDir[Index].HotDirPath[1],length(HotDir[Index].HotDirPath)); Result := crc32(Result,@HotDir[Index].HotDirPathSort,4); if length(HotDir[Index].HotDirTarget)>0 then Result := crc32(Result,@HotDir[Index].HotDirTarget[1],length(HotDir[Index].HotDirTarget)); Result := crc32(Result,@HotDir[Index].HotDirTargetSort,4); Result := crc32(Result,@HotDir[Index].HotDirExisting,1); Result := crc32(Result,@HotDir[Index].GroupNumber,4); end; end; { TDirectoryHotlist.GetHotDir } function TDirectoryHotlist.GetHotDir(Index: integer): THotDir; begin Result := THotDir(Items[Index]); end; { TDirectoryHotlist.RefreshFromTTreeView } //The routine will recreate the complete TDirectoryHotlist from a TTreeView. //It cannot erase or replace immediately the current list because the TTreeView refer to it! //So it create it into the "TransitDirectoryHotlist" and then, it will copy it to self one. // procedure TDirectoryHotlist.RefreshFromTTreeView(ParamTreeView:TTreeView); var TransitDirectoryHotlist:TDirectoryHotlist; IndexToTryToRestore:longint=-1; MaybeTTreeNodeToSelect:TTreeNode; procedure RecursiveEncapsulateSubMenu(WorkingTreeNode:TTreeNode); var MaybeChildNode:TTreeNode; WorkingHotDirEntry:THotDir; begin while WorkingTreeNode<>nil do begin if WorkingTreeNode=ParamTreeView.Selected then IndexToTryToRestore:=TransitDirectoryHotlist.Count; MaybeChildNode:=WorkingTreeNode.GetFirstChild; if MaybeChildNode<>nil then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); WorkingHotDirEntry.Dispatcher:=hd_STARTMENU; //Probably not necessary, but let's make sure it will start a menu TransitDirectoryHotlist.Add(WorkingHotDirEntry); RecursiveEncapsulateSubMenu(MaybeChildNode); WorkingHotDirEntry:=THotDir.Create; WorkingHotDirEntry.Dispatcher:=hd_ENDMENU; TransitDirectoryHotlist.Add(WorkingHotDirEntry); end else begin //We won't copy EMPTY submenu so that's why we check for "hd_STARTMENU". And the check for "hd_ENDMENU" is simply probably unecessary protection if (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_STARTMENU) AND (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_ENDMENU) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); TransitDirectoryHotlist.Add(WorkingHotDirEntry); end; end; WorkingTreeNode:=WorkingTreeNode.GetNextSibling; end; end; begin if ParamTreeView.Items.count>0 then begin TransitDirectoryHotlist:=TDirectoryHotlist.Create; try RecursiveEncapsulateSubMenu(ParamTreeView.Items.Item[0]); TransitDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(self); MaybeTTreeNodeToSelect:=LoadTTreeView(ParamTreeView,IndexToTryToRestore); if MaybeTTreeNodeToSelect<>nil then MaybeTTreeNodeToSelect.Selected:=TRUE else if ParamTreeView.Items.count>0 then ParamTreeView.Items.Item[0].Selected:=TRUE; finally TransitDirectoryHotlist.Clear; TransitDirectoryHotlist.Free; end; end else begin Self.Clear; end; end; { TCheckDrivePresenceThread.Create } constructor TCheckDrivePresenceThread.Create(sDrive: string; ParamListOfNonExistingDrive: TStringList; var ThreadCount: longint); begin FListOfNonExistingDrive := ParamListOfNonExistingDrive; FDriveToSearchFor := sDrive; FThreadCountPoint := addr(ThreadCount); FreeOnTerminate := True; inherited Create(False); end; { TCheckDrivePresenceThread.Destroy } destructor TCheckDrivePresenceThread.Destroy; begin inherited Destroy; end; {TCheckDrivePresenceThread.Execute} procedure TCheckDrivePresenceThread.Execute; begin if FDriveToSearchFor = '' then begin Synchronize(@Self.ReportPresentInTheThread); end else begin if mbDirectoryExists(FDriveToSearchFor) then begin Synchronize(@Self.ReportPresentInTheThread); end else begin Synchronize(@Self.ReportNotPresentInTheThread); end; end; Terminate; end; { TCheckDrivePresenceThread.ReportPresentInTheThread } procedure TCheckDrivePresenceThread.ReportPresentInTheThread; begin Dec(FThreadCountPoint^); end; { TCheckDrivePresenceThread.ReportNotPresentInTheThread } procedure TCheckDrivePresenceThread.ReportNotPresentInTheThread; begin FListOfNonExistingDrive.Add(FDriveToSearchFor); Dec(FThreadCountPoint^); end; {$IFDEF MSWINDOWS} { TDirectoryHotlist.ImportTotalCommander } function TDirectoryHotlist.ImportTotalCommander(TotalCommanderConfigFilename: String): integer; const CONFIGFILE_SECTIONNAME = 'DirMenu'; CONFIGFILE_NAMEPREFIX = 'menu'; CONFIGFILE_PATHPREFIX = 'cmd'; CONFIGFILE_TARGETPREFIX = 'path'; var LocalHotDir: THotDir; ConfigFile: TIniFileEx; sName, sPath, sTarget: string; Index, CurrentMenuLevel, InitialNumberOfElement: longint; FlagAvortInsertion: boolean; begin InitialNumberOfElement := Count; Index := 1; CurrentMenuLevel := 0; ConfigFile := TIniFileEx.Create(GetActualTCIni(mbExpandFilename(TotalCommanderConfigFilename), CONFIGFILE_SECTIONNAME)); try repeat sName := ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(Index), TERMINATORNOTPRESENT)); if sName <> TERMINATORNOTPRESENT then begin FlagAvortInsertion := False; LocalHotDir := THotDir.Create; if sName = '-' then //Was it a separator? begin LocalHotDir.Dispatcher := hd_SEPARATOR; end else begin if sName = '--' then //Was is a end of menu? begin LocalHotDir.Dispatcher := hd_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; //Sanity correction since Total Commande may contains extra end of menu... end else begin if (UTF8Length(sName) > 1) then //Was it a menu start? begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalHotDir.Dispatcher := hd_STARTMENU; LocalHotDir.HotDirName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalHotDir.Dispatcher = hd_NULL then begin LocalHotDir.HotDirName := sName; sPath := ReplaceTCEnvVars(ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(Index), ''))); if UTF8Length(sPath) > 3 then if UTF8Pos('cd ', UTF8LowerCase(sPath)) = 1 then sPath := UTF8Copy(sPath, 4, UTF8Length(sPath) - 3); if UTF8Pos('cm_', UTF8LowerCase(sPath)) = 0 then //Make sure it's not a command begin if sPath <> '' then sPath := ExcludeBackPathDelimiter(sPath); //Not an obligation but DC convention seems to like a backslash at the end sTarget := ReplaceTCEnvVars(ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(Index), ''))); if UTF8Length(sTarget) > 3 then if UTF8Pos('cd ', UTF8LowerCase(sTarget)) = 1 then sTarget := UTF8Copy(sTarget, 4, UTF8Length(sTarget) - 3); if sTarget <> '' then sTarget := ExcludeBackPathDelimiter(sTarget); //Not an obligation but DC convention seems to like a backslash at the end LocalHotDir.Dispatcher := hd_CHANGEPATH; LocalHotDir.HotDirPath := sPath; LocalHotDir.HotDirTarget := sTarget; end else begin //If it's command, store it as a command LocalHotDir.Dispatcher := hd_COMMAND; LocalHotDir.HotDirPath := sPath; end; end; end; end; if not FlagAvortInsertion then Add(LocalHotDir) else LocalHotDir.Free; Inc(Index); end; until sName = TERMINATORNOTPRESENT; //Try to fix possible problem if the LAST MENU is not ending correctly... while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := hd_ENDMENU; Add(LocalHotDir); end; finally ConfigFile.Free; end; Result := Count - InitialNumberOfElement; end; { TDirectoryHotlist.ExportTotalCommander } function TDirectoryHotlist.ExportTotalCommander(TotalCommanderConfigFilename: String; FlagEraseOriginalOnes: boolean): boolean; const CONFIGFILE_SECTIONNAME = 'DirMenu'; CONFIGFILE_NAMEPREFIX = 'menu'; CONFIGFILE_PATHPREFIX = 'cmd'; CONFIGFILE_TARGETPREFIX = 'path'; TERMINATORNOTPRESENT = ':-<#/?*+*?\#>-:'; var ConfigFile: TIniFileEx; Index, OffsetForOnesAlreadyThere: integer; sName: string; begin Result := True; OffsetForOnesAlreadyThere := 0; try Screen.BeginWaitCursor; try ConfigFile := TIniFileEx.Create(mbExpandFileName(TotalCommanderConfigFilename)); try with ConfigFile do begin if FlagEraseOriginalOnes then begin EraseSection(CONFIGFILE_SECTIONNAME); end else begin Index := 1; repeat sName := ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(Index), TERMINATORNOTPRESENT); if sName <> TERMINATORNOTPRESENT then Inc(OffsetForOnesAlreadyThere); Inc(Index); until sName = TERMINATORNOTPRESENT; end; for Index := 0 to pred(Count) do begin case THotDir(HotDir[Index]).Dispatcher of hd_NULL: begin end; hd_CHANGEPATH: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirName)); if THotDir(HotDir[Index]).HotDirPath <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString('cd ' + ReplaceDCEnvVars(THotDir(HotDir[Index]).HotDirPath))); if THotDir(HotDir[Index]).HotDirTarget <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(ReplaceDCEnvVars(THotDir(HotDir[Index]).HotDirTarget))); end; hd_SEPARATOR: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), '-'); end; hd_STARTMENU: begin //See the position of the '-'. It *must* be inside the parameter for calling "ConvertStringToTCString" because the expected utf8 signature of TC must be before the '-'. WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString('-' + THotDir(HotDir[Index]).HotDirName)); end; hd_ENDMENU: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), '--'); end; hd_COMMAND: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirName)); if THotDir(HotDir[Index]).HotDirPath <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirPath)); if THotDir(HotDir[Index]).HotDirTarget <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirTarget)); end; end; end; end; ConfigFile.UpdateFile; finally ConfigFile.Free; end; except Result := False; end; finally Screen.EndWaitCursor; end; end; {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/uhighlighters.pas��������������������������������������������������������������0000644�0001750�0000144�00000026264�15104114162�016741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uHighlighters; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, SynEditHighlighter, SynHighlighterPas, SynHighlighterCPP, SynHighlighterHTML, SynHighlighterUNIXShellScript, SynHighlighterPerl, SynHighlighterDiff, SynHighlighterPo, SynHighlighterIni, SynHighlighterBat, SynHighlighterTeX, LCLVersion {$IF DEFINED(LCL_VER_499)} , LazEditTextAttributes {$ENDIF} ; const SYNS_XML_DefaultText = 'Default text'; type { TSynBatSynEx } TSynBatSynEx = class(TSynBatSyn) public constructor Create(AOwner: TComponent); override; end; { TSynCppSynEx } TSynCppSynEx = class(TSynCppSyn) protected function GetSampleSource: string; override; end; { TSynDiffSynEx } TSynDiffSynEx = class(TSynDiffSyn) protected function GetSampleSource: string; override; function GetDefaultFilter: string; override; end; { TSynHTMLSynEx } TSynHTMLSynEx = class(TSynHTMLSyn) protected function GetSampleSource: string; override; end; { TSynIniSynEx } TSynIniSynEx = class(TSynIniSyn) public constructor Create(AOwner: TComponent); override; end; { TSynPasSynEx } TSynPasSynEx = class(TSynPasSyn) protected function GetSampleSource: string; override; function GetDefaultFilter: string; override; end; { TSynPerlSynEx } TSynPerlSynEx = class(TSynPerlSyn) protected function GetSampleSource: string; override; end; { TSynPoSynEx } TSynPoSynEx = class(TSynPoSyn) protected function GetDefaultFilter: string; override; public constructor Create(AOwner: TComponent); override; end; { TSynTeXSynEx } TSynTeXSynEx = class(TSynTeXSyn) public constructor Create(AOwner: TComponent); override; end; { TSynUNIXShellScriptSynEx } TSynUNIXShellScriptSynEx = class(TSynUNIXShellScriptSyn) protected function GetSampleSource: string; override; end; { TSynPlainTextHighlighter } TSynPlainTextHighlighter = class(TSynCustomHighlighter) protected function GetSampleSource: string; override; public class function GetLanguageName: string; override; end; { TSynCustomHighlighterHelper } TSynCustomHighlighterHelper = class helper for TSynCustomHighlighter public function LanguageName: String; function Other: Boolean; end; {$if lcl_fullversion < 4990000} TLazEditTextAttribute = TSynHighlighterAttributes; {$endif} TSynHighlighterAttrFeature = ( hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafStyleMask, hafFrameStyle, hafFrameEdges ); TSynHighlighterAttrFeatures = set of TSynHighlighterAttrFeature; { TSynHighlighterAttributesHelper } TSynHighlighterAttributesHelper = class helper for TLazEditTextAttribute private function GetFeatures: TSynHighlighterAttrFeatures; {$if lcl_fullversion >= 4990000} function GetName: String; function GetStyleFromInt: Integer; function GetStyleMaskFromInt: Integer; procedure SetStyleFromInt(const Value: Integer); procedure SetStyleMaskFromInt(const Value: Integer); {$endif} public property Features: TSynHighlighterAttrFeatures read GetFeatures; {$if lcl_fullversion >= 4990000} property Name: String read GetName; property IntegerStyle: Integer read GetStyleFromInt write SetStyleFromInt; property IntegerStyleMask: Integer read GetStyleMaskFromInt write SetStyleMaskFromInt; {$endif} end; implementation uses SynEditStrConst, SynUniHighlighter, SynUniClasses, uLng {$if lcl_fullversion >= 4990000} , Graphics {$endif} ; { TSynBatSynEx } constructor TSynBatSynEx.Create(AOwner: TComponent); begin inherited Create(AOwner); CommentAttri.StoredName := SYNS_XML_AttrComment; IdentifierAttri.StoredName := SYNS_XML_AttrIdentifier; KeyAttri.StoredName := SYNS_XML_AttrKey; NumberAttri.StoredName := SYNS_XML_AttrNumber; SpaceAttri.StoredName := SYNS_XML_AttrSpace; VariableAttri.StoredName := SYNS_XML_AttrVariable; end; { TSynCppSynEx } function TSynCppSynEx.GetSampleSource: string; begin Result := '/* Comment */'#13 + '#include <stdio.h>'#13 + '#include <stdlib.h>'#13 + #13 + 'static char line_buf[LINE_BUF];'#13 + #13 + 'int main(int argc,char **argv){'#13 + ' FILE *file;'#13 + ' line_buf[0]=0;'#13 + ' printf("\n");'#13 + ' return 0;'#13 + '}'#13 + ''#13 + #13; end; { TSynDiffSynEx } function TSynDiffSynEx.GetSampleSource: string; begin Result := '*** /a/file'#13#10 + '--- /b/file'#13#10 + '***************'#13#10 + '*** 2,5 ****'#13#10 + '--- 2,5 ----'#13#10 + ' context'#13#10 + '- removed'#13#10 + '! Changed'#13#10 + '+ added'#13#10 + ' context'#13#10; end; function TSynDiffSynEx.GetDefaultFilter: string; begin Result:= 'Difference Files (*.diff,*.patch)|*.diff;*.patch'; end; { TSynHTMLSynEx } function TSynHTMLSynEx.GetSampleSource: string; begin Result := '<html>'#13 + '<title>Lazarus Sample source for html'#13 + ''#13 + ''#13 + ''#13 + '

'#13 + ' Some Text'#13 + ' Ampersands:  F P C'#13 + '

'#13 + ''#13 + ''#13 + ''#13 + ''#13 + #13; end; { TSynIniSynEx } constructor TSynIniSynEx.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IF (LCL_FULLVERSION >= 3990000)} CommentTypes := [ictSemicolon, ictHash]; {$ENDIF} CommentAttri.StoredName := SYNS_XML_AttrComment; TextAttri.StoredName := SYNS_XML_AttrText; SectionAttri.StoredName := SYNS_XML_AttrSection; KeyAttri.StoredName := SYNS_XML_AttrKey; NumberAttri.StoredName := SYNS_XML_AttrNumber; SpaceAttri.StoredName := SYNS_XML_AttrSpace; StringAttri.StoredName := SYNS_XML_AttrString; SymbolAttri.StoredName := SYNS_XML_AttrSymbol; end; { TSynPasSynEx } function TSynPasSynEx.GetSampleSource: string; begin Result := '{ Comment }'#13 + '{$R- compiler directive}'#13 + 'procedure TForm1.Button1Click(Sender: TObject);'#13 + 'var // Delphi Comment'#13 + ' Number, I, X: Integer;'#13 + 'begin'#13 + ' Number := 12345 * (2 + 9) // << Matching Brackets ;'#13 + ' Caption := ''The number is '' + IntToStr(Number);'#13 + ' asm'#13 + ' MOV AX,1234h'#13 + ' MOV Number,AX'#13 + ' end;'#13 + ' case ModalResult of'#13+ ' mrOK: inc(X);'#13+ ' mrCancel, mrIgnore: dec(X);'#13+ ' end;'#13+ ' ListBox1.Items.Add(IntToStr(X));'#13 + 'end;'#13 + #13; end; function TSynPasSynEx.GetDefaultFilter: string; begin Result:= 'Pascal Files (*.pas,*.dpr,*.dpk,*.inc,*.pp,*.lpr)|*.pas;*.dpr;*.dpk;*.inc;*.pp;*.lpr'; end; { TSynPerlSynEx } function TSynPerlSynEx.GetSampleSource: string; begin Result := '#!/usr/bin/perl'#13 + '# Perl sample code'#13 + ''#13 + '$i = "10";'#13 + 'print "$ENV{PATH}\n";'#13 + '($i =~ /\d+/) || die "Error\n";'#13 + ''#13 + '# Text Block'#13 + ''#13 + #13; end; { TSynPoSynEx } function TSynPoSynEx.GetDefaultFilter: string; begin Result:= 'Po Files (*.po,*.pot)|*.po;*.pot'; end; constructor TSynPoSynEx.Create(AOwner: TComponent); begin inherited Create(AOwner); CommentAttri.StoredName := SYNS_XML_AttrComment; TextAttri.StoredName := SYNS_XML_AttrText; KeyAttri.StoredName := SYNS_XML_AttrKey; end; { TSynTeXSynEx } constructor TSynTeXSynEx.Create(AOwner: TComponent); begin inherited Create(AOwner); CommentAttri.StoredName := SYNS_XML_AttrComment; TextAttri.StoredName := SYNS_XML_AttrText; MathmodeAttri.StoredName := SYNS_XML_AttrMathmode; SpaceAttri.StoredName := SYNS_XML_AttrSpace; ControlSequenceAttri.StoredName := SYNS_XML_AttrTexCommand; BracketAttri.StoredName := SYNS_XML_AttrSquareBracket; BraceAttri.StoredName := SYNS_XML_AttrRoundBracket; end; { TSynUNIXShellScriptSynEx } function TSynUNIXShellScriptSynEx.GetSampleSource: string; begin Result := '#!/bin/bash'#13#13 + '# Bash syntax highlighting'#13#10 + 'set -x'#13#10 + 'set -e'#13#10 + 'Usage="Usage: $0 devel|stable"'#13#10 + 'FPCVersion=$1'#13#10 + 'for ver in devel stable; do'#13#10 + ' if [ "x$FPCVersion" = "x$ver" ]; then'#13#10 + ' fi'#13#10 + 'done'#13#10 + '# Text Block'#13#10 + #13#10; end; { TSynPlainTextHighlighter } function TSynPlainTextHighlighter.GetSampleSource: string; begin Result := 'Double Commander is a cross platform open source file manager'#13 + 'with two panels side by side. It is inspired by Total Commander'#13 + 'and features some new ideas.'#13; end; class function TSynPlainTextHighlighter.GetLanguageName: string; begin Result:= rsSynLangPlainText; end; { TSynCustomHighlighterHelper } function TSynCustomHighlighterHelper.LanguageName: String; begin if Self is TSynUniSyn then Result:= TSynUniSyn(Self).Info.General.Name else Result:= Self.GetLanguageName; end; function TSynCustomHighlighterHelper.Other: Boolean; begin if Self is TSynUniSyn then Result:= TSynUniSyn(Self).Info.General.Other else Result:= False; end; { TSynHighlighterAttributesHelper } function TSynHighlighterAttributesHelper.GetFeatures: TSynHighlighterAttrFeatures; begin if SameText(StoredName, SYNS_XML_DefaultText) then Result:= [hafBackColor, hafForeColor] else begin if Self is TSynAttributes then Result:= [hafBackColor, hafForeColor, hafStyle] else Result:= [hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafFrameStyle, hafFrameEdges]; end; end; {$if lcl_fullversion >= 4990000} function TSynHighlighterAttributesHelper.GetName: String; begin Result:= Caption^; end; function TSynHighlighterAttributesHelper.GetStyleFromInt: Integer; begin if fsBold in Style then Result:= 1 else Result:= 0; if fsItalic in Style then Result:= Result + 2; if fsUnderline in Style then Result:= Result + 4; if fsStrikeout in Style then Result:= Result + 8; end; function TSynHighlighterAttributesHelper.GetStyleMaskFromInt: Integer; begin if fsBold in StyleMask then Result:= 1 else Result:= 0; if fsItalic in StyleMask then Result:= Result + 2; if fsUnderline in StyleMask then Result:= Result + 4; if fsStrikeout in StyleMask then Result:= Result + 8; end; procedure TSynHighlighterAttributesHelper.SetStyleFromInt(const Value: Integer); begin if Value and $1 = 0 then Style:= [] else Style:= [fsBold]; if Value and $2 <> 0 then Style:= Style + [fsItalic]; if Value and $4 <> 0 then Style:= Style + [fsUnderline]; if Value and $8 <> 0 then Style:= Style + [fsStrikeout]; end; procedure TSynHighlighterAttributesHelper.SetStyleMaskFromInt( const Value: Integer); begin if Value and $1 = 0 then StyleMask:= [] else StyleMask:= [fsBold]; if Value and $2 <> 0 then StyleMask:= StyleMask + [fsItalic]; if Value and $4 <> 0 then StyleMask:= StyleMask + [fsUnderline]; if Value and $8 <> 0 then StyleMask:= StyleMask + [fsStrikeout]; end; {$endif} end. doublecmd-1.1.30/src/uhighlighterprocs.pas0000644000175000001440000000665715104114162017631 0ustar alexxusers{------------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: uHighlighterProcs.pas, released 2000-06-23. The Initial Author of the Original Code is Michael Hieke. All Rights Reserved. Contributors to the SynEdit project are listed in the Contributors.txt file. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. $Id: uHighlighterProcs.pas,v 1.3 2002/06/15 06:57:24 etrusco Exp $ You may retrieve the latest version of this file at the SynEdit home page, located at http://SynEdit.SourceForge.net Known Issues: -------------------------------------------------------------------------------} unit uHighlighterProcs; interface uses Classes, SynEditHighlighter; function GetHighlightersFilter(AHighlighters: TStringList): string; function GetHighlighterFromFileExt(AHighlighters: TStringList; Extension: string): TSynCustomHighlighter; implementation uses SysUtils; function GetHighlightersFilter(AHighlighters: TStringList): string; var i: integer; Highlighter: TSynCustomHighlighter; begin Result := ''; if Assigned(AHighlighters) then for i := 0 to AHighlighters.Count - 1 do begin if not (AHighlighters.Objects[i] is TSynCustomHighlighter) then continue; Highlighter := TSynCustomHighlighter(AHighlighters.Objects[i]); if Highlighter.DefaultFilter = '' then continue; Result := Result + Highlighter.DefaultFilter; if Result[Length(Result)] <> '|' then Result := Result + '|'; end; end; function GetHighlighterFromFileExt(AHighlighters: TStringList; Extension: string): TSynCustomHighlighter; var ExtLen: integer; i, j: integer; Highlighter: TSynCustomHighlighter; Filter: string; begin Extension := LowerCase(Extension); ExtLen := Length(Extension); if Assigned(AHighlighters) and (ExtLen > 0) then begin for i := 0 to AHighlighters.Count - 1 do begin if not (AHighlighters.Objects[i] is TSynCustomHighlighter) then continue; Highlighter := TSynCustomHighlighter(AHighlighters.Objects[i]); Filter := LowerCase(Highlighter.DefaultFilter); j := Pos('|', Filter); if j > 0 then begin Delete(Filter, 1, j); j := Pos(Extension, Filter); if (j > 0) and ((j + ExtLen > Length(Filter)) or (Filter[j + ExtLen] = ';')) then begin Result := Highlighter; exit; end; end; end; end; Result := nil; end; end. doublecmd-1.1.30/src/uhash.pas0000644000175000001440000001457515104114162015205 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- General Hash Unit: This unit defines the common types, functions, and procedures Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uHash; {$mode delphi} interface uses Classes, SysUtils, DCPcrypt2, crc; type THashContext = TDCP_hash; THashAlgorithm = (HASH_BLAKE2S, HASH_BLAKE2SP, HASH_BLAKE2B, HASH_BLAKE2BP, HASH_BLAKE3, HASH_CHECKSUM32, HASH_CRC32, HASH_HAVAL, HASH_MD4, HASH_MD5, HASH_RIPEMD128, HASH_RIPEMD160, HASH_SFV, HASH_SHA1, HASH_SHA224, HASH_SHA256, HASH_SHA384, HASH_SHA512, HASH_SHA3_224, HASH_SHA3_256, HASH_SHA3_384, HASH_SHA3_512, HASH_TIGER, HASH_BEST ); var HashFileExt: array[Low(THashAlgorithm)..Pred(High(THashAlgorithm))] of String = ( 'blake2s', 'blake2sp', 'blake2b', 'blake2bp', 'blake3', 'checksum32', 'crc32', 'haval', 'md4', 'md5', 'ripemd128', 'ripemd160', 'sfv', 'sha', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3', 'sha3', 'sha3', 'sha3', 'tiger' ); var HashName: array[Low(THashAlgorithm)..Pred(High(THashAlgorithm))] of String = ( 'blake2s', 'blake2sp', 'blake2b', 'blake2bp', 'blake3', 'checksum32', 'crc32', 'haval', 'md4', 'md5', 'ripemd128', 'ripemd160', 'sfv', 'sha1_160', 'sha2_224', 'sha2_256', 'sha2_384', 'sha2_512', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'tiger' ); procedure HashInit(out Context: THashContext; Algorithm: THashAlgorithm); procedure HashUpdate(var Context: THashContext; const Buffer; BufLen: LongWord); procedure HashFinal(var Context: THashContext; out Hash: String); function HashString(const Line: String; IgnoreCase, IgnoreWhiteSpace: Boolean): LongWord; { Helper functions } function TrimHash(const AHash: String): String; function FileExtIsHash(const FileExt: String): Boolean; function FileExtToHashAlg(const FileExt: String): THashAlgorithm; implementation uses LazUTF8, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPChecksum32, DCPcrc32, DCPsha1, DCPsha256, DCPsha512, DCPtiger, DCPblake2, DCPblake3, DCPsha3; procedure HashInit(out Context: THashContext; Algorithm: THashAlgorithm); begin if (Algorithm = HASH_BEST) then begin {$IF DEFINED(CPUX86_64)} Algorithm:= HASH_BLAKE3; {$ELSEIF DEFINED(CPU64)} Algorithm:= HASH_BLAKE2B; {$ELSE} Algorithm:= HASH_BLAKE2S; {$ENDIF} end; case Algorithm of HASH_BLAKE2S: Context:= TDCP_blake2s.Create(nil); HASH_BLAKE2SP: Context:= TDCP_blake2sp.Create(nil); HASH_BLAKE2B: Context:= TDCP_blake2b.Create(nil); HASH_BLAKE2BP: Context:= TDCP_blake2bp.Create(nil); HASH_BLAKE3: Context:= TDCP_blake3.Create(nil); HASH_CHECKSUM32: Context:= TDCP_checksum32.Create(nil); HASH_CRC32: Context:= TDCP_crc32.Create(nil); HASH_HAVAL: Context:= TDCP_haval.Create(nil); HASH_MD4: Context:= TDCP_md4.Create(nil); HASH_MD5: Context:= TDCP_md5.Create(nil); HASH_RIPEMD128: Context:= TDCP_ripemd128.Create(nil); HASH_RIPEMD160: Context:= TDCP_ripemd160.Create(nil); HASH_SFV: Context:= TDCP_crc32.Create(nil); HASH_SHA1: Context:= TDCP_sha1.Create(nil); HASH_SHA224: Context:= TDCP_sha224.Create(nil); HASH_SHA256: Context:= TDCP_sha256.Create(nil); HASH_SHA384: Context:= TDCP_sha384.Create(nil); HASH_SHA512: Context:= TDCP_sha512.Create(nil); HASH_SHA3_224: Context:= TDCP_sha3_224.Create(nil); HASH_SHA3_256: Context:= TDCP_sha3_256.Create(nil); HASH_SHA3_384: Context:= TDCP_sha3_384.Create(nil); HASH_SHA3_512: Context:= TDCP_sha3_512.Create(nil); HASH_TIGER: Context:= TDCP_tiger.Create(nil); end; Context.Init; end; procedure HashUpdate(var Context: THashContext; const Buffer; BufLen: LongWord); begin Context.Update(Buffer, BufLen); end; procedure HashFinal(var Context: THashContext; out Hash: String); var I, HashSize: LongWord; Digest: array of Byte; begin Hash:= EmptyStr; HashSize:= Context.HashSize div 8; SetLength(Digest, HashSize); Context.Final(Pointer(Digest)^); for I := 0 to HashSize - 1 do Hash := Hash + HexStr(Digest[I], 2); Hash := LowerCase(Hash); FreeAndNil(Context); end; function HashString(const Line: String; IgnoreCase, IgnoreWhiteSpace: Boolean): LongWord; var S: String; I, J, L: Integer; begin S := Line; if IgnoreWhiteSpace then begin J := 1; L := Length(Line); for I:= 1 to L do begin // Skip white spaces if not (Line[I] in [#9, #32]) then begin S[J] := Line[I]; Inc(J); end; end; SetLength(S, J - 1); end; if IgnoreCase then S := UTF8LowerCase(S); Result := crc32(0, nil, 0); Result := crc32(Result, PByte(S), Length(S)); end; function TrimHash(const AHash: String): String; var I, J: Integer; begin J:= 0; Result:= EmptyStr; SetLength(Result, Length(AHash)); for I:= 1 to Length(AHash) do begin if (AHash[I] in ['0'..'9', 'A'..'F', 'a'..'f']) then begin Inc(J); Result[J]:= AHash[I]; end; end; SetLength(Result, J); end; function FileExtIsHash(const FileExt: String): Boolean; var I: THashAlgorithm; begin Result:= False; for I:= Low(HashFileExt) to High(HashFileExt) do begin if SameText(FileExt, HashFileExt[I]) then Exit(True); end; end; function FileExtToHashAlg(const FileExt: String): THashAlgorithm; var I: THashAlgorithm; begin for I:= Low(HashFileExt) to High(HashFileExt) do begin if SameText(FileExt, HashFileExt[I]) then Exit(I); end; end; end. doublecmd-1.1.30/src/uguimessagequeue.pas0000644000175000001440000001433415104114162017451 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Thread-safe asynchronous call queue. It allows queueing methods that should be called by GUI thread. Copyright (C) 2009-2011 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGuiMessageQueue; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs; type TGuiMessageProc = procedure (Data: Pointer) of object; PMessageQueueItem = ^TMessageQueueItem; TMessageQueueItem = record Method: TGuiMessageProc; Data : Pointer; Next : PMessageQueueItem; end; TGuiMessageQueueThread = class(TThread) private FWakeThreadEvent: PRTLEvent; FMessageQueue: PMessageQueueItem; FMessageQueueLastItem: PMessageQueueItem; FMessageQueueLock: TCriticalSection; FFinished: Boolean; {en This method executes some queued functions. It is called from main thread through Synchronize. } procedure CallMethods; public constructor Create(CreateSuspended: Boolean = False); reintroduce; destructor Destroy; override; procedure Terminate; procedure Execute; override; {en @param(AllowDuplicates If @false then if the queue already has AMethod with AData parameter then it is not queued for a second time. If @true then the same methods with the same parameters are allowed to exists multiple times in the queue.) } procedure QueueMethod(AMethod: TGuiMessageProc; AData: Pointer; AllowDuplicates: Boolean = True); end; procedure InitializeGuiMessageQueue; procedure FinalizeGuiMessageQueue; var GuiMessageQueue: TGuiMessageQueueThread; implementation uses uDebug, uExceptions; const // How many functions maximum to call per one Synchronize. MaxMessages = 10; constructor TGuiMessageQueueThread.Create(CreateSuspended: Boolean = False); begin FWakeThreadEvent := RTLEventCreate; FMessageQueue := nil; FMessageQueueLastItem := nil; FMessageQueueLock := TCriticalSection.Create; FFinished := False; FreeOnTerminate := False; inherited Create(CreateSuspended, DefaultStackSize); end; destructor TGuiMessageQueueThread.Destroy; var item: PMessageQueueItem; begin // Make sure the thread is not running anymore. Terminate; FMessageQueueLock.Acquire; while Assigned(FMessageQueue) do begin item := FMessageQueue^.Next; Dispose(FMessageQueue); FMessageQueue := item; end; FMessageQueueLock.Release; RTLeventdestroy(FWakeThreadEvent); FreeAndNil(FMessageQueueLock); inherited Destroy; end; procedure TGuiMessageQueueThread.Terminate; begin inherited Terminate; // Wake after setting Terminate to True. RTLeventSetEvent(FWakeThreadEvent); end; procedure TGuiMessageQueueThread.Execute; begin try while not Terminated do begin if Assigned(FMessageQueue) then // Call some methods. Synchronize(@CallMethods) else // Wait for messages. RTLeventWaitFor(FWakeThreadEvent); end; finally FFinished := True; end; end; procedure TGuiMessageQueueThread.QueueMethod(AMethod: TGuiMessageProc; AData: Pointer; AllowDuplicates: Boolean = True); var item: PMessageQueueItem; begin FMessageQueueLock.Acquire; try if AllowDuplicates = False then begin // Search the queue for this method and parameter. item := FMessageQueue; while Assigned(item) do begin if (item^.Method = AMethod) and (item^.Data = AData) then Exit; item := item^.Next; end; end; New(item); item^.Method := AMethod; item^.Data := AData; item^.Next := nil; if not Assigned(FMessageQueue) then FMessageQueue := item else FMessageQueueLastItem^.Next := item; FMessageQueueLastItem := item; RTLeventSetEvent(FWakeThreadEvent); finally FMessageQueueLock.Release; end; end; procedure TGuiMessageQueueThread.CallMethods; var MessagesCount: Integer = MaxMessages; item: PMessageQueueItem; begin while Assigned(FMessageQueue) and (MessagesCount > 0) do begin try // Call method with parameter. FMessageQueue^.Method(FMessageQueue^.Data); except on e: Exception do begin HandleException(e, Self); end; end; FMessageQueueLock.Acquire; try item := FMessageQueue^.Next; Dispose(FMessageQueue); FMessageQueue := item; // If queue is empty then reset wait event (must be done under lock). if not Assigned(FMessageQueue) then RTLeventResetEvent(FWakeThreadEvent); finally FMessageQueueLock.Release; end; Dec(MessagesCount, 1); end; end; // ---------------------------------------------------------------------------- procedure InitializeGuiMessageQueue; begin DCDebug('Starting GuiMessageQueue'); {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} GuiMessageQueue := TGuiMessageQueueThread.Create(True); GuiMessageQueue.Resume; {$ELSE} GuiMessageQueue := TGuiMessageQueueThread.Create(False); {$ENDIF} end; procedure FinalizeGuiMessageQueue; begin GuiMessageQueue.Terminate; DCDebug('Finishing GuiMessageQueue'); {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not GuiMessageQueue.FFinished do CheckSynchronize(100); {$ENDIF} GuiMessageQueue.WaitFor; FreeAndNil(GuiMessageQueue); end; initialization InitializeGuiMessageQueue; finalization FinalizeGuiMessageQueue; end. doublecmd-1.1.30/src/ugraphics.pas0000644000175000001440000001442115104114162016050 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Graphic functions Copyright (C) 2013-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGraphics; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, IntfGraphics, LCLVersion; procedure BitmapConvert(Bitmap: TRasterImage); procedure BitmapAssign(Bitmap, Image: TRasterImage); procedure BitmapConvert(ASource, ATarget: TRasterImage); procedure BitmapAlpha(var ABitmap: TBitmap; APercent: Single); procedure BitmapAssign(Bitmap: TRasterImage; Image: TLazIntfImage); procedure BitmapCenter(var Bitmap: TBitmap; Width, Height: Integer); procedure BitmapMerge(ALow, AHigh: TLazIntfImage; const ADestX, ADestY: Integer); implementation uses Math, GraphType, FPimage; type TRawAccess = class(TRasterImage) end; procedure BitmapConvert(Bitmap: TRasterImage); begin BitmapConvert(Bitmap, Bitmap); end; procedure BitmapConvert(ASource, ATarget: TRasterImage); var Source, Target: TLazIntfImage; begin Source:= TLazIntfImage.Create(ASource.RawImage, False); try Target:= TLazIntfImage.Create(ASource.Width, ASource.Height, [riqfRGB, riqfAlpha]); try {$if lcl_fullversion < 2020000} Target.CreateData; {$endif} Target.CopyPixels(Source); BitmapAssign(ATarget, Target); finally Target.Free; end; finally Source.Free; end; end; procedure BitmapAssign(Bitmap, Image: TRasterImage); var RawImage: PRawImage; begin RawImage:= TRawAccess(Image).GetRawImagePtr; // Simply change raw image owner without data copy Bitmap.LoadFromRawImage(RawImage^, True); // Set image data pointer to nil, so it will not free double RawImage^.ReleaseData; end; procedure BitmapAssign(Bitmap: TRasterImage; Image: TLazIntfImage); var ARawImage: TRawImage; begin Image.GetRawImage(ARawImage, True); // Simply change raw image owner without data copy Bitmap.LoadFromRawImage(ARawImage, True); end; procedure BitmapAlpha(var ABitmap: TBitmap; APercent: Single); var X, Y: Integer; Color: TFPColor; Masked: Boolean; AImage: TLazIntfImage; SrcIntfImage: TLazIntfImage; begin if ABitmap.RawImage.Description.AlphaPrec <> 0 then begin ABitmap.BeginUpdate; try AImage:= TLazIntfImage.Create(ABitmap.RawImage, False); for X:= 0 to AImage.Width - 1 do begin for Y:= 0 to AImage.Height - 1 do begin Color:= AImage.Colors[X, Y]; Color.Alpha:= Round(Color.Alpha * APercent); AImage.Colors[X, Y]:= Color; end; end; AImage.Free; finally ABitmap.EndUpdate; end; end else begin Masked:= ABitmap.RawImage.Description.MaskBitsPerPixel > 0; SrcIntfImage:= TLazIntfImage.Create(ABitmap.RawImage, False); AImage:= TLazIntfImage.Create(ABitmap.Width, ABitmap.Height, [riqfRGB, riqfAlpha]); {$if lcl_fullversion < 2020000} AImage.CreateData; {$endif} for X:= 0 to AImage.Width - 1 do begin for Y:= 0 to AImage.Height - 1 do begin Color := SrcIntfImage.Colors[X, Y]; if Masked and SrcIntfImage.Masked[X, Y] then Color.Alpha:= Low(Color.Alpha) else begin Color.Alpha:= Round(High(Color.Alpha) * APercent); end; AImage.Colors[X, Y]:= Color; end end; SrcIntfImage.Free; BitmapAssign(ABitmap, AImage); AImage.Free; end; end; procedure BitmapCenter(var Bitmap: TBitmap; Width, Height: Integer); var X, Y: Integer; Source, Target: TLazIntfImage; begin if (Bitmap.Width <> Width) or (Bitmap.Height <> Height) then begin Source:= TLazIntfImage.Create(Bitmap.RawImage, False); try Target:= TLazIntfImage.Create(Width, Height, [riqfRGB, riqfAlpha]); try {$if lcl_fullversion < 2020000} Target.CreateData; {$endif} Target.FillPixels(colTransparent); X:= (Width - Bitmap.Width) div 2; Y:= (Height - Bitmap.Height) div 2; Target.CopyPixels(Source, X, Y); BitmapAssign(Bitmap, Target); finally Target.Free; end; finally Source.Free; end; end; end; procedure BitmapMerge(ALow, AHigh: TLazIntfImage; const ADestX, ADestY: Integer); var CurColor: TFPColor; X, Y, CurX, CurY: Integer; MaskValue, InvMaskValue: Word; lDrawWidth, lDrawHeight: Integer; begin lDrawWidth := Min(ALow.Width - ADestX, AHigh.Width); lDrawHeight := Min(ALow.Height - ADestY, AHigh.Height); for Y := 0 to lDrawHeight - 1 do begin for X := 0 to lDrawWidth - 1 do begin CurX := ADestX + X; CurY := ADestY + Y; if (CurX < 0) or (CurY < 0) then Continue; MaskValue := AHigh.Colors[X, Y].Alpha; InvMaskValue := $FFFF - MaskValue; if MaskValue = $FFFF then begin ALow.Colors[CurX, CurY] := AHigh.Colors[X, Y]; end else if MaskValue > $00 then begin CurColor := ALow.Colors[CurX, CurY]; if CurColor.Alpha = 0 then begin CurColor:= AHigh.Colors[X, Y]; end else begin if MaskValue > CurColor.Alpha then CurColor.Alpha:= MaskValue; CurColor.Red := Round( CurColor.Red * InvMaskValue / $FFFF + AHigh.Colors[X, Y].Red * MaskValue / $FFFF); CurColor.Green := Round( CurColor.Green * InvMaskValue / $FFFF + AHigh.Colors[X, Y].Green * MaskValue / $FFFF); CurColor.Blue := Round( CurColor.Blue * InvMaskValue / $FFFF + AHigh.Colors[X, Y].Blue * MaskValue / $FFFF); end; ALow.Colors[CurX, CurY] := CurColor; end; end; end; end; end. doublecmd-1.1.30/src/uglobs.pas0000755000175000001440000051160315104114162015365 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Globals variables and some consts Copyright (C) 2008-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Original comment: ------------------------------------------------------------ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz Globals variables and some consts contributors: Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru) Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) } unit uGlobs; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Forms, Grids, Types, uExts, uColorExt, Graphics, LCLVersion, DCClassesUtf8, uMultiArc, uColumns, uHotkeyManager, uSearchTemplate, uFileSourceOperationOptions, uWFXModule, uWCXModule, uWDXModule, uwlxmodule, udsxmodule, DCXmlConfig, uInfoToolTip, fQuickSearch, uTypes, uClassesEx, uColors, uHotDir, uSpecialDir, SynEdit, SynEditTypes, uFavoriteTabs, fTreeViewMenu, uConvEncoding, DCJsonConfig, uFileSourceOperationTypes; type { Configuration options } TSortConfigurationOptions = (scoClassicLegacy, scoAlphabeticalButLanguage); TConfigurationTreeState = (ctsFullExpand, ctsFullCollapse); { Log options } TLogOptions = set of (log_cp_mv_ln, log_delete, log_dir_op, log_arc_op, log_vfs_op, log_success, log_errors, log_info, log_start_shutdown, log_commandlineexecution); { Watch dirs options } TWatchOptions = set of (watch_file_name_change, watch_attributes_change, watch_only_foreground, watch_exclude_dirs); { Tabs options } TTabsOptions = set of (tb_always_visible, tb_multiple_lines, tb_same_width, tb_text_length_limit, tb_confirm_close_all, tb_close_on_dbl_click, tb_open_new_in_foreground, tb_open_new_near_current, tb_show_asterisk_for_locked, tb_activate_panel_on_click, tb_show_close_button, tb_close_duplicate_when_closing, tb_close_on_doubleclick, tb_show_drive_letter, tb_reusing_tab_when_possible, tb_confirm_close_locked_tab, tb_keep_renamed_when_back_normal); TTabsOptionsDoubleClick = (tadc_Nothing, tadc_CloseTab, tadc_FavoriteTabs, tadc_TabsPopup); TTabsPosition = (tbpos_top, tbpos_bottom); { Show icons mode } TShowIconsMode = (sim_none, sim_standart, sim_all, sim_all_and_exe); { Custom icons mode } TCustomIconsMode = set of (cimDrive, cimFolder, cimArchive); TScrollMode = (smLineByLineCursor, smLineByLine, smPageByPage); { Sorting directories mode } TSortFolderMode = (sfmSortNameShowFirst, sfmSortLikeFileShowFirst, sfmSortLikeFile); { Where to insert new files in the filelist } TNewFilesPosition = (nfpTop, nfpTopAfterDirectories, nfpSortedPosition, nfpBottom); { Where to move updated files in the filelist } TUpdatedFilesPosition = (ufpSameAsNewFiles, ufpSortedPosition, ufpNoChange); { How initially progress is shown for file operations } TFileOperationsProgressKind = (fopkSeparateWindow, fopkSeparateWindowMinimized, fopkOperationsPanel); { Operations with confirmation } TFileOperationsConfirmation = (focCopy, focMove, focDelete, focDeleteToTrash, focVerifyChecksum, focTestArchive); TFileOperationsConfirmations = set of TFileOperationsConfirmation; { Multi-Rename } TMulRenLaunchBehavior = (mrlbLastMaskUnderLastOne, mrlbLastPreset, mrlbFreshNew); TMulRenExitModifiedPreset = (mrempIgnoreSaveLast, mrempPromptUser, mrempSaveAutomatically); TMulRenSaveRenamingLog = (mrsrlPerPreset, mrsrlAppendSameLog); { Internal Associations} //What the use wish for the context menu // uwcmComplete : DEFAULT, or user specifically wish the "Windows' one + the actions". // uwcmJustDCAction : User specifically wish only the actions, even if default set is not it. TUserWishForContextMenu = (uwcmComplete, uwcmJustDCAction); TExternalTool = (etViewer, etEditor, etDiffer); TExternalToolOptions = record Enabled: Boolean; Path: String; Parameters: String; RunInTerminal: Boolean; KeepTerminalOpen: Boolean; end; TExternalToolsOptions = array[TExternalTool] of TExternalToolOptions; TResultingFramePositionAfterCompare = (rfpacActiveOnLeft, rfpacLeftOnLeft); //Related with the Viewer TViewerPaintTool = (vptPen, vptRectangle, vptEllipse); TPluginType = (ptDSX, ptWCX, ptWDX, ptWFX, ptWLX); //*Important: Keep that order to to fit with procedures LoadXmlConfig/SaveXmlConfig when we save/restore widths of "TfrmTweakPlugin". TWcxCfgViewMode = (wcvmByPlugin, wcvmByExtension); TDCFont = (dcfMain, dcfEditor, dcfViewer, dcfViewerBook, dcfLog, dcfConsole, dcfPathEdit, dcfSearchResults, dcfFunctionButtons, dcfTreeViewMenu, dcfStatusBar); TDCFontOptions = record Usage: string; Name: string; Size: Integer; Style: TFontStyles; Quality: TFontQuality; MinValue: integer; MaxValue: integer; end; TDCFontsOptions = array[TDCFont] of TDCFontOptions; // fswmPreventDelete - prevents deleting watched directories // fswmAllowDelete - does not prevent deleting watched directories // fswmWholeDrive - watch whole drives instead of single directories to omit problems with deleting watched directories TWatcherMode = (fswmPreventDelete, fswmAllowDelete, fswmWholeDrive); TDrivesListButtonOption = (dlbShowLabel, dlbShowFileSystem, dlbShowFreeSpace); TDrivesListButtonOptions = set of TDrivesListButtonOption; TKeyTypingModifier = (ktmNone, ktmAlt, ktmCtrlAlt); TKeyTypingAction = (ktaNone, ktaCommandLine, ktaQuickSearch, ktaQuickFilter); tDesiredDropTextFormat=record Name:string; DesireLevel:longint; end; tDuplicatedRename = (drLegacyWithCopy, drLikeWindows7, drLikeTC); TBriefViewMode = (bvmFixedWidth, bvmFixedCount, bvmAutoSize); TFiltersOnNewSearch = (fonsKeep, fonsClear, fonsPrompt); THotKeySortOrder = (hksoByCommand, hksoByHotKeyGrouped, hksoByHotKeyOnePerRow); TToolTipMode = (tttmCombineDcSystem, tttmDcSystemCombine, tttmDcIfPossThenSystem, tttmDcOnly, tttmSystemOnly); TToolTipHideTimeOut = (ttthtSystem, tttht1Sec, tttht2Sec, tttht3Sec, tttht5Sec, tttht10Sec, tttht30Sec, tttht1Min, ttthtNeverHide); TConfigFilenameStyle = (pfsAbsolutePath, pfsRelativeToDC, pfsRelativeToFollowingPath); tToolbarPathModifierElement = (tpmeIcon, tpmeCommand, tpmeStartingPath); tToolbarPathModifierElements = set of tToolbarPathModifierElement; tFileAssocPathModifierElement = (fameIcon, fameCommand, fameStartingPath); tFileAssocPathModifierElements = set of tFileAssocPathModifierElement; tHotDirPathModifierElement = (hdpmSource, hdpmTarget); tHotDirPathModifierElements = set of tHotDirPathModifierElement; const { Default hotkey list version number } hkVersion = 63; // 54 - In "Viewer" context, added the "W" for "cm_WrapText", "4" for "cm_ShowAsDec", "8" for "cm_ShowOffice". // 53 - In "Main" context, change shortcut "Alt+`" to "Alt+0" for the "cm_ActivateTabByIndex". // 52 - In "Main" context, add shortcut "Ctrl+Shift+B" for "cm_FlatViewSel". // 51 - In "Multi-Rename" context, added the "Shift+F4" shortcut for the "cm_EditNewNames". // 50 - To load shortcut keys for the "Multi-Rename" which is now driven with "cm_Actions". // 49 - In "Viewer" context, added the "F6" for "cm_ShowCaret". // 48 - In "Viewer" context, added the "CTRL+P" for the "cm_Print". // 47 - In "Copy/Move Dialog" context, add the shortcuts "F5" and "F6" for "cm_ToggleSelectionInName". // 46 - In "Main" context, add shortcut "Shift+Tab" for "cm_FocusTreeView". // 45 - Automatically add default shortcuts to internal editor (shortcuts had not converted correctly without hkVersion update) // 44 - Attempt to repair shortcut keys for "cm_ShowCmdLineHistory" in "Main" context. // 43 - To load shortcut keys for the "Synchronize Directories" which is driven with "cm_Actions". // 42 - In "Find Files" context, added the "CTRL+TAB" and "CTRL+SHIFT+TAB" shortcut keys for the "cm_PageNext" and "cm_PagePrev" commands. // 41 - Keyboard shortcuts to change encoding in Viewer (A, S, Z and X). // 40 - In "Main" context, added the "Ctrl+Shift+F7" for "cm_AddNewSearch". // In "Find Files" context, changed "cm_Start" that was "Enter" for "F9". // In "Find Files" context, added "Alt+F7" as a valid alternative for "cm_PageStandard". // Previously existing names if reused must check for ConfigVersion >= X. // History: // 2 - removed Layout/SmallIcons // renamed Layout/SmallIconSize to Layout/IconSize // 3 - Layout/DriveMenuButton -> Layout/DrivesListButton and added subnodes: // ShowLabel, ShowFileSystem, ShowFreeSpace // 4 - changed QuickSearch/Enabled, QuickSearch/Mode and same for QuickFilter // to Keyboard/Typing. // 5 - changed Behaviours/SortCaseSensitive to FilesViews/Sorting/CaseSensitivity // changed Behaviours/SortNatural to FilesViews/Sorting/NaturalSorting // 6 - changed Behaviours/ShortFileSizeFormat to Behaviours/FileSizeFormat // 7 - changed Viewer/SaveThumbnails to Thumbnails/Save // 8 - changed Behaviours/BriefViewFileExtAligned to FilesViews/BriefView/FileExtAligned // 9 - few new options regarding tabs // 10 - changed Icons/CustomDriveIcons to Icons/CustomIcons // 11 - During the last 2-3 years the default font for search result was set in file, not loaded and different visually than was was stored. // 12 - Split Behaviours/HeaderFooterSizeFormat to Behaviours/HeaderSizeFormat and Behaviours/FooterSizeFormat // Loading a config prior of version 11 should ignore that setting and keep default. // 13 - Replace Configuration/UseConfigInProgramDir by doublecmd.inf // 14 - Move some colors to colors.json // 15 - Move custom columns colors to colors.json ConfigVersion = 15; COLORS_JSON = 'colors.json'; // Configuration related filenames sMULTIARC_FILENAME = 'multiarc.ini'; TKeyTypingModifierToShift: array[TKeyTypingModifier] of TShiftState = ([], [ssAlt], [ssCtrl, ssAlt]); { Related with the drop of text over panels} NbOfDropTextFormat = 4; DropTextRichText_Index=0; DropTextHtml_Index=1; DropTextUnicode_Index=2; DropTextSimpleText_Index=3; var { For localization } gPOFileName, gHelpLang: String; { DSX plugins } gDSXPlugins: TDSXModuleList; { WCX plugins } gWCXPlugins: TWCXModuleList; { WDX plugins } gWDXPlugins:TWDXModuleList; { WFX plugins } gWFXPlugins: TWFXModuleList; { WLX plugins } gWLXPlugins: TWLXModuleList; gTweakPluginWidth: array[ord(ptDSX)..ord(ptWLX)] of integer; gTweakPluginHeight: array[ord(ptDSX)..ord(ptWLX)] of integer; gPluginInAutoTweak: boolean; gWCXConfigViewMode: TWcxCfgViewMode; gPluginFilenameStyle: TConfigFilenameStyle = pfsAbsolutePath; gPluginPathToBeRelativeTo: string = '%COMMANDER_PATH%'; { Colors } gColors: TColorThemes; { MultiArc addons } gMultiArcList: TMultiArcList; { Columns Set } ColSet:TPanelColumnsList; { Layout page } gMainMenu, gButtonBar, gToolBarFlat, gMiddleToolBar, gDriveBar1, gDriveBar2, gDriveBarFlat, gDrivesListButton, gDirectoryTabs, gCurDir, gTabHeader, gStatusBar, gCmdLine, gLogWindow, gTermWindow, gKeyButtons, gInterfaceFlat, gDriveInd, gDriveFreeSpace, gProgInMenuBar, gPanelOfOp, gHorizontalFilePanels, gUpperCaseDriveLetter, gShowColonAfterDrive, gShortFormatDriveInfo: Boolean; gDrivesListButtonOptions: TDrivesListButtonOptions; gSeparateTree: Boolean; { Toolbar } gMiddleToolBarFlat, gMiddleToolBarShowCaptions, gMiddleToolbarReportErrorWithCommands: Boolean; gMiddleToolBarButtonSize, gMiddleToolBarIconSize, gToolBarButtonSize, gToolBarIconSize: Integer; gToolBarShowCaptions: Boolean; gToolbarReportErrorWithCommands: boolean; gToolbarFilenameStyle: TConfigFilenameStyle; gToolbarPathToBeRelativeTo: string; gToolbarPathModifierElements: tToolbarPathModifierElements; gRepeatPassword:Boolean; // repeat password when packing files gDirHistoryCount:Integer; // how many history we remember gShowSystemFiles:Boolean; gRunInTermStayOpenCmd: String; gRunInTermStayOpenParams: String; gRunInTermCloseCmd: String; gRunInTermCloseParams: String; gRunTermCmd: String; gRunTermParams: String; gSortCaseSensitivity: TCaseSensitivity; gSortNatural: Boolean; gSortSpecial: Boolean; gSortFolderMode: TSortFolderMode; gNewFilesPosition: TNewFilesPosition; gUpdatedFilesPosition: TUpdatedFilesPosition; gLynxLike:Boolean; gFirstTextSearch: Boolean; { File views page } gExtraLineSpan: Integer; gFolderPrefix, gFolderPostfix: String; gRenameConfirmMouse: Boolean; { Mouse } gMouseSelectionEnabled: Boolean; gMouseSelectionButton: Integer; gMouseSingleClickStart: Integer; gMouseSelectionIconClick: Integer; gAutoFillColumns: Boolean; gAutoSizeColumn: Integer; gColumnsLongInStatus : Boolean; gColumnsAutoSaveWidth: Boolean; gColumnsTitleStyle: TTitleStyle; gCustomColumnsChangeAllColumns: Boolean; gSpecialDirList:TSpecialDirList=nil; gDirectoryHotlist:TDirectoryHotlist; gHotDirAddTargetOrNot: Boolean; gHotDirFullExpandOrNot: Boolean; gShowPathInPopup: boolean; gShowOnlyValidEnv: boolean = TRUE; gWhereToAddNewHotDir: TPositionWhereToAddHotDir; gHotDirFilenameStyle: TConfigFilenameStyle; gHotDirPathToBeRelativeTo: string; gHotDirPathModifierElements: tHotDirPathModifierElements; glsDirHistory:TStringListEx; glsCmdLineHistory: TStringListEx; glsMaskHistory : TStringListEx; glsSearchHistory : TStringListEx; glsSearchPathHistory : TStringListEx; glsReplaceHistory : TStringListEx; glsReplacePathHistory : TStringListEx; glsCreateDirectoriesHistory : TStringListEx; glsRenameNameMaskHistory : TStringListEx; glsRenameExtMaskHistory : TStringListEx; glsSearchDirectories: TStringList; glsSearchExcludeFiles: TStringList; glsSearchExcludeDirectories: TStringList; glsVolumeSizeHistory : TStringListEx; glsIgnoreList : TStringListEx; gOnlyOneAppInstance, gColumnsTitleLikeValues: Boolean; gCutTextToColWidth : Boolean; gExtendCellWidth : Boolean; gSpaceMovesDown: Boolean; gScrollMode: TScrollMode; gWheelScrollLines: Integer; gAlwaysShowTrayIcon: Boolean; gMinimizeToTray: Boolean; gConfirmQuit: Boolean; gFileSizeFormat: TFileSizeFormat; gHeaderSizeFormat: TFileSizeFormat; gFooterSizeFormat: TFileSizeFormat; gOperationSizeFormat: TFileSizeFormat; gFileSizeDigits: Integer; gHeaderDigits: Integer; gFooterDigits: Integer; gOperationSizeDigits: Integer; gSizeDisplayUnits: array[LOW(TFileSizeFormat) .. HIGH(TFileSizeFormat)] of string; gDateTimeFormat : String; gDriveBlackList: String; gDriveBlackListUnmounted: Boolean; // Automatically black list unmounted devices gListFilesInThread: Boolean; gLoadIconsSeparately: Boolean; gDelayLoadingTabs: Boolean; gHighlightUpdatedFiles: Boolean; gLastUsedPacker: String; gLastDoAnyCommand: String; gbMarkMaskCaseSensitive: boolean; gbMarkMaskIgnoreAccents: boolean; gMarkMaskFilterWindows: boolean; gMarkShowWantedAttribute: boolean; gMarkDefaultWantedAttribute: string; gMarkLastWantedAttribute: string; { Favorite Tabs } gFavoriteTabsUseRestoreExtraOptions: boolean; gFavoriteTabsList: TFavoriteTabsList; gWhereToAddNewFavoriteTabs: TPositionWhereToAddFavoriteTabs; gFavoriteTabsFullExpandOrNot: boolean; gFavoriteTabsGoToConfigAfterSave: boolean; gFavoriteTabsGoToConfigAfterReSave: boolean; gDefaultTargetPanelLeftSaved: TTabsConfigLocation; gDefaultTargetPanelRightSaved: TTabsConfigLocation; gDefaultExistingTabsToKeep: TTabsConfigLocation; gFavoriteTabsSaveDirHistory: boolean; { Brief view page } gBriefViewFixedWidth: Integer; gBriefViewFixedCount: Integer; gBriefViewMode: TBriefViewMode; gBriefViewFileExtAligned: Boolean; { Tools page } gExternalTools: TExternalToolsOptions; gResultingFramePositionAfterCompare:TResultingFramePositionAfterCompare; gLuaLib:String; gExts:TExts; gColorExt:TColorExt; gFileInfoToolTip: TFileInfoToolTip; gFileInfoToolTipValue: array[0..ord(ttthtNeverHide)] of integer = (-1, 1000, 2000, 3000, 5000, 10000, 30000, 60000, integer.MaxValue); { Fonts page } gFonts: TDCFontsOptions; { File panels color page } gUseCursorBorder: Boolean; gUseFrameCursor: Boolean; gUseInvertedSelection: Boolean; gUseInactiveSelColor: Boolean; gAllowOverColor: Boolean; gBorderFrameWidth :integer; gInactivePanelBrightness: Integer; // 0 .. 100 (black .. full color) gIndUseGradient : Boolean; // use gradient on drive label gShowIcons: TShowIconsMode; gShowIconsNew: TShowIconsMode; gIconOverlays : Boolean; gIconsSize, gIconsSizeNew : Integer; gDiskIconsSize : Integer; gDiskIconsAlpha : Integer; gToolIconsSize: Integer; gIconsExclude: Boolean; gIconsExcludeDirs: String; gPixelsPerInch: Integer; gCustomIcons : TCustomIconsMode; // for use custom icons under windows gIconsInMenus: Boolean; gIconsInMenusSize, gIconsInMenusSizeNew: Integer; gShowHiddenDimmed: Boolean; gIconTheme: String; { Keys page } gKeyTyping: array[TKeyTypingModifier] of TKeyTypingAction; { File operations page } gLongNameAlert: Boolean; gCopyBlockSize : Integer; gHashBlockSize : Integer; gUseMmapInSearch : Boolean; gPartialNameSearch: Boolean; gInitiallyClearFileMask : Boolean; gNewSearchClearFiltersAction : TFiltersOnNewSearch; gShowMenuBarInFindFiles : Boolean; gSkipFileOpError: Boolean; gTypeOfDuplicatedRename: tDuplicatedRename; gDropReadOnlyFlag : Boolean; gWipePassNumber: Integer; gProcessComments: Boolean; gShowCopyTabSelectPanel:boolean; gUseTrash : Boolean; // if using delete to trash by default gRenameSelOnlyName:boolean; gDefaultDropEffect: Boolean; gShowDialogOnDragDrop: Boolean; gDragAndDropDesiredTextFormat:array[0..pred(NbOfDropTextFormat)] of tDesiredDropTextFormat; gDragAndDropAskFormatEachTime: Boolean; gDragAndDropTextAutoFilename: Boolean; gDragAndDropSaveUnicodeTextInUFT8: Boolean; gNtfsHourTimeDelay: Boolean; gAutoExtractOpenMask: String; gFileOperationsProgressKind: TFileOperationsProgressKind; gFileOperationsConfirmations: TFileOperationsConfirmations; gFileOperationsSounds: array[TFileSourceOperationType] of String; gFileOperationDuration: Integer; { Multi-Rename} gMulRenShowMenuBarOnTop : boolean; gMulRenInvalidCharReplacement : string; gMulRenLaunchBehavior : TMulRenLaunchBehavior; gMulRenExitModifiedPreset : TMulRenExitModifiedPreset; gMulRenSaveRenamingLog : TMulRenSaveRenamingLog; gMulRenLogFilename : string; gMultRenDailyIndividualDirLog: boolean; gMulRenFilenameWithFullPathInLog:boolean; gMulRenPathRangeSeparator: string; { Folder tabs page } gDirTabOptions : TTabsOptions; gDirTabActionOnDoubleClick : TTabsOptionsDoubleClick; gDirTabLimit : Integer; gDirTabPosition : TTabsPosition; { Log page } gLogFile : Boolean; gLogFileWithDateInName : Boolean; gLogFileCount: Integer; gLogFileName : String; gLogOptions : TLogOptions; { Configuration page } gUseConfigInProgramDir, gUseConfigInProgramDirNew, gSaveConfiguration, gSaveWindowState, gSaveFolderTabs, gSaveSearchReplaceHistory, gSaveDirHistory, gSaveCmdLineHistory, gSaveFileMaskHistory, gSaveVolumeSizeHistory, gSaveCreateDirectoriesHistory: Boolean; gSortOrderOfConfigurationOptionsTree: TSortConfigurationOptions; gCollapseConfigurationOptionsTree: TConfigurationTreeState; { Quick Search page } gQuickSearchOptions: TQuickSearchOptions; gQuickFilterAutoHide: Boolean; gQuickFilterSaveSessionModifications: Boolean; { Misc page } gGridVertLine, gGridHorzLine, gShowWarningMessages, gDirBrackets, gInplaceRename, gInplaceRenameButton, gDblClickToParent, gDblClickEditPath, gGoToRoot: Boolean; gShowCurDirTitleBar: Boolean; gActiveRight: Boolean; gShowToolTip: Boolean; gShowToolTipMode: TToolTipMode; gToolTipHideTimeOut: TToolTipHideTimeOut; gThumbSize: TSize; gThumbSave: Boolean; gSearchDefaultTemplate: String; gSearchTemplateList: TSearchTemplateList; gDescCreateUnicode: Boolean; gDescReadEncoding: TMacroEncoding; gDescWriteEncoding: TMacroEncoding; gDefaultTextEncoding: String; { Auto refresh page } gWatchDirs: TWatchOptions; gWatchDirsExclude: String; gWatcherMode: TWatcherMode; { Ignore list page } gIgnoreListFileEnabled: Boolean; gIgnoreListFile: String; {HotKey Manager} HotMan:THotKeyManager; gNameSCFile: string; gHotKeySortOrder: THotKeySortOrder; gUseEnterToCloseHotKeyEditor: boolean; {Copy/Move operation options} gOperationOptionSymLinks: TFileSourceOperationOptionSymLink; gOperationOptionCorrectLinks: Boolean; gOperationOptionCopyOnWrite: TFileSourceOperationOptionGeneral; gOperationOptionFileExists: TFileSourceOperationOptionFileExists; gOperationOptionDirectoryExists: TFileSourceOperationOptionDirectoryExists; gOperationOptionSetPropertyError: TFileSourceOperationOptionSetPropertyError; gOperationOptionReserveSpace: Boolean; gOperationOptionCheckFreeSpace: Boolean; gOperationOptionCopyAttributes: Boolean; gOperationOptionCopyXattributes: Boolean; gOperationOptionCopyTime: Boolean; gOperationOptionVerify: Boolean; gOperationOptionCopyOwnership: Boolean; gOperationOptionCopyPermissions: Boolean; gOperationOptionExcludeEmptyDirectories: Boolean; {Extract dialog options} gExtractOverwrite: Boolean; {Error file} gErrorFile: String; {Viewer} gPreviewVisible, gImageStretch: Boolean; gImageExifRotate: Boolean; gImageStretchOnlyLarge: Boolean; gImageShowTransparency: Boolean; gImageCenter: Boolean; gCopyMovePath1, gCopyMovePath2, gCopyMovePath3, gCopyMovePath4, gCopyMovePath5: String; gImagePaintMode: TViewerPaintTool; gImagePaintWidth, gColCount, gViewerMode, gMaxCodeSize, gMaxTextWidth, gTabSpaces : Integer; gImagePaintColor, gTextPosition:PtrInt; gPrintMargins: TRect; gShowCaret: Boolean; gViewerWrapText: Boolean; gViewerLeftMargin: Integer; gViewerLineSpacing: Integer; gViewerAutoCopy: Boolean; gViewerSynEditMask: String; gViewerJpegQuality: Integer; { Editor } gEditWaitTime: Integer; gEditorSynEditOptions: TSynEditorOptions; gEditorSynEditTabWidth, gEditorSynEditRightEdge, gEditorSynEditBlockIndent: Integer; gEditorFindWordAtCursor: Boolean; { Differ } gDifferIgnoreCase, gDifferAutoCompare, gDifferKeepScrolling, gDifferLineDifferences, gDifferPaintBackground, gDifferIgnoreWhiteSpace: Boolean; {SyncDirs} gSyncDirsSubdirs, gSyncDirsByContent, gSyncDirsAsymmetric, gSyncDirsIgnoreDate, gSyncDirsAsymmetricSave, gSyncDirsShowFilterCopyRight, gSyncDirsShowFilterEqual, gSyncDirsShowFilterNotEqual, gSyncDirsShowFilterUnknown, gSyncDirsShowFilterCopyLeft, gSyncDirsShowFilterDuplicates, gSyncDirsShowFilterSingles: Boolean; gSyncDirsFileMask: string; gSyncDirsFileMaskSave: Boolean; gDateTimeFormatSync : String; { Internal Associations} gFileAssociationLastCustomAction: string; gOfferToAddToFileAssociations: boolean; gExtendedContextMenu: boolean; gDefaultContextActions: boolean; gOpenExecuteViaShell: boolean; gExecuteViaTerminalClose: boolean; gExecuteViaTerminalStayOpen: boolean; gIncludeFileAssociation: boolean; gFileAssocFilenameStyle: TConfigFilenameStyle; gFileAssocPathToBeRelativeTo: string; gFileAssocPathModifierElements: tFileAssocPathModifierElements; { TreeViewMenu } gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand: boolean; gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick: boolean; gUseTreeViewMenuWithFavoriteTabsFromMenuCommand: boolean; gUseTreeViewMenuWithFavoriteTabsFromDoubleClick: boolean; gUseTreeViewMenuWithDirHistory: boolean; gUseTreeViewMenuWithViewHistory: boolean; gUseTreeViewMenuWithCommandLineHistory: boolean; gTreeViewMenuUseKeyboardShortcut: boolean; gTreeViewMenuOptions: array [0..(ord(tvmcLASTONE)-2)] of TTreeViewMenuOptions; gTreeViewMenuShortcutExit: boolean; gTreeViewMenuSingleClickExit: boolean; gTreeViewMenuDoubleClickExit: boolean; crArrowCopy: Integer = 1; crArrowMove: Integer = 2; crArrowLink: Integer = 3; {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} gSystemItemProperties: Boolean = False; {$ENDIF} { TotalCommander Import/Export } {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename:string; gTotalCommanderConfigFilename:string; gTotalCommanderToolbarPath:string; {$ENDIF} function LoadConfig: Boolean; function InitGlobs: Boolean; function LoadGlobs: Boolean; procedure SaveGlobs; procedure LoadXmlConfig; procedure SaveXmlConfig; procedure LoadDefaultHotkeyBindings; function InitPropStorage(Owner: TComponent): TIniPropStorageEx; procedure FontToFontOptions(Font: TFont; var Options: TDCFontOptions); procedure FontOptionsToFont(Options: TDCFontOptions; Font: TFont); function GetKeyTypingAction(ShiftStateEx: TShiftState): TKeyTypingAction; function IsFileSystemWatcher: Boolean; function GetValidDateTimeFormat(const aFormat, ADefaultFormat: string): string; procedure RegisterInitialization(InitProc: TProcedure); const cMaxStringItems=50; var gConfig: TXmlConfig = nil; gStyles: TJsonConfig = nil; DefaultDateTimeFormat: String; DefaultDateTimeFormatSync: String; implementation uses LCLProc, LCLType, Dialogs, Laz2_XMLRead, LazUTF8, LConvEncoding, uExifWdx, uGlobsPaths, uLng, uShowMsg, uFileProcs, uOSUtils, uFindFiles, uEarlyConfig, dmHigh, uDCUtils, fMultiRename, uDCVersion, uDebug, uFileFunctions, uDefaultPlugins, Lua, uKeyboard, DCOSUtils, DCStrUtils, uPixMapManager, FileUtil, uSynDiffControls, InterfaceBase {$IF DEFINED(MSWINDOWS)} , ShlObj {$ENDIF} {$if lcl_fullversion >= 2010000} , SynEditMiscClasses {$endif} ; const TKeyTypingModifierToNodeName: array[TKeyTypingModifier] of String = ('NoModifier', 'Alt', 'CtrlAlt'); type TLoadConfigProc = function(var ErrorMessage: String): Boolean; var // Double Commander version // loaded from configuration file gPreviousVersion: String = ''; FInitList: array of TProcedure; CustomDecimalSeparator: String = #$EF#$BF#$BD; function LoadConfigCheckErrors(LoadConfigProc: TLoadConfigProc; ConfigFileName: String; var ErrorMessage: String): Boolean; procedure AddMsg(Msg, eMsg: String); begin AddStrWithSep(ErrorMessage, Msg + ':', LineEnding + LineEnding); AddStrWithSep(ErrorMessage, ConfigFileName, LineEnding); if eMsg <> EmptyStr then AddStrWithSep(ErrorMessage, eMsg, LineEnding); end; begin Result := False; try Result := LoadConfigProc(ErrorMessage); except // If the file does not exist or is empty, // simply default configuration is applied. on EXmlConfigNotFound do Result := True; on EXmlConfigEmpty do Result := True; on e: EFOpenError do AddMsg(rsMsgErrEOpen, e.Message); on e: EStreamError do AddMsg(rsMsgErrERead, e.Message); on e: EXMLReadError do AddMsg(rsMsgInvalidFormatOfConfigurationFile, e.Message); end; end; type TSaveCfgProc = procedure; procedure SaveWithCheck(SaveProc: TSaveCfgProc; CfgDescription: String; var ErrMsg: String); begin try SaveProc; except on E: EStreamError do ErrMsg := ErrMsg + 'Cannot save ' + CfgDescription + ': ' + e.Message; end; end; procedure SaveCfgIgnoreList; var FileName: String; begin if gIgnoreListFileEnabled then begin FileName:= ReplaceEnvVars(gIgnoreListFile); mbForceDirectory(ExtractFileDir(FileName)); glsIgnoreList.SaveToFile(FileName); end; end; procedure SaveCfgMainConfig; begin SaveXmlConfig; // Force saving config to file. gConfig.Save; end; procedure SaveColorsConfig; begin gColors.Save(gStyles.Root); gColorExt.Save(gStyles.Root); ColSet.SaveColors(gStyles.Root); gHighlighters.SaveColors(gStyles.Root); gStyles.SaveToFile(gpCfgDir + COLORS_JSON); end; procedure SaveHighlightersConfig; begin gHighlighters.Save(gpCfgDir + HighlighterConfig); end; function AskUserOnError(var ErrorMessage: String): Boolean; var Button: TDialogButton; Buttons: TDialogButtons; begin // Show error messages. if ErrorMessage <> EmptyStr then begin Buttons:= TDialogButtons.Create(TDialogButton); try Button:= Buttons.Add; Button.Default:= True; Button.ModalResult:= mrOK; Button.Caption:= rsDlgButtonContinue; Button:= Buttons.Add; Button.Cancel:= True; Button.ModalResult:= mrAbort; Button.Caption:= rsDlgButtonExitProgram; Result := DefaultQuestionDialog(Application.Title + ' - ' + rsMsgErrorLoadingConfiguration, ErrorMessage, idDialogWarning, Buttons, 0) = mrOK; finally Buttons.Free; end; // Reset error message. ErrorMessage := ''; end else Result := True; end; function LoadGlobalConfig(var {%H-}ErrorMessage: String): Boolean; begin Result := gConfig.Load; end; function LoadExtsConfig(var {%H-}ErrorMessage: String): Boolean; begin gExts.Load; Result := True; end; function LoadHotManConfig(var {%H-}ErrorMessage: String): Boolean; begin HotMan.Load(gpCfgDir + gNameSCFile); Result := True; end; function LoadColorsConfig(var {%H-}ErrorMessage: String): Boolean; begin gStyles.LoadFromFile(gpCfgDir + COLORS_JSON); gColors.Load(gStyles.Root); gColorExt.Load(gStyles.Root); ColSet.LoadColors(gStyles.Root); gHighlighters.LoadColors(gStyles.Root); Result := True; end; function LoadHighlightersConfig(var {%H-}ErrorMessage: String): Boolean; begin gHighlighters.Load(gpCfgDir + HighlighterConfig); Result := True; end; function LoadMultiArcConfig(var {%H-}ErrorMessage: String): Boolean; begin gMultiArcList.LoadFromFile(gpCfgDir + sMULTIARC_FILENAME); Result := True; end; function LoadHistoryConfig(var {%H-}ErrorMessage: String): Boolean; var Root: TXmlNode; History: TXmlConfig; procedure LoadHistory(const NodeName: String; HistoryList: TStrings; LoadObj: Boolean = False); var Idx: Integer; Node: TXmlNode; begin Node := History.FindNode(Root, NodeName); if Assigned(Node) then begin HistoryList.Clear; Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Item') = 0 then begin Idx:= HistoryList.Add(History.GetContent(Node)); if LoadObj then begin HistoryList.Objects[Idx]:= TObject(UIntPtr(History.GetAttr(Node, 'Tag', 0))); end; if HistoryList.Count >= cMaxStringItems then Break; end; Node := Node.NextSibling; end; end; end; begin Result:= False; History:= TXmlConfig.Create(gpCfgDir + 'history.xml', True); try Root:= History.FindNode(History.RootNode, 'History'); if Assigned(Root) then begin LoadHistory('Navigation', glsDirHistory); LoadHistory('CommandLine', glsCmdLineHistory); LoadHistory('VolumeSize', glsVolumeSizeHistory); LoadHistory('FileMask', glsMaskHistory); LoadHistory('SearchText', glsSearchHistory, True); LoadHistory('SearchTextPath', glsSearchPathHistory); LoadHistory('ReplaceText', glsReplaceHistory); LoadHistory('ReplaceTextPath', glsReplacePathHistory); LoadHistory('CreateDirectories', glsCreateDirectoriesHistory, True); LoadHistory('RenameNameMask', glsRenameNameMaskHistory); LoadHistory('RenameExtMask', glsRenameExtMaskHistory); LoadHistory('SearchDirectories', glsSearchDirectories); LoadHistory('SearchExcludeFiles', glsSearchExcludeFiles); LoadHistory('SearchExcludeDirectories', glsSearchExcludeDirectories); end; Result:= True; finally History.Free; end; end; procedure SaveHistoryConfig; var Root: TXmlNode; History: TXmlConfig; procedure SaveHistory(const NodeName: String; HistoryList: TStrings; SaveObj: Boolean = False); var I: Integer; Node, SubNode: TXmlNode; begin Node := History.FindNode(Root, NodeName, True); History.ClearNode(Node); for I:= 0 to HistoryList.Count - 1 do begin SubNode := History.AddNode(Node, 'Item'); History.SetContent(SubNode, HistoryList[I]); if SaveObj then begin History.SetAttr(SubNode, 'Tag', UInt32(UIntPtr(HistoryList.Objects[I]))); end; if I >= cMaxStringItems then Break; end; end; begin History:= TXmlConfig.Create(gpCfgDir + 'history.xml'); try Root:= History.FindNode(History.RootNode, 'History', True); if gSaveDirHistory then SaveHistory('Navigation', glsDirHistory); if gSaveCmdLineHistory then SaveHistory('CommandLine', glsCmdLineHistory); if gSaveFileMaskHistory then SaveHistory('FileMask', glsMaskHistory); if gSaveVolumeSizeHistory then SaveHistory('VolumeSize', glsVolumeSizeHistory); if gSaveCreateDirectoriesHistory then begin SaveHistory('CreateDirectories', glsCreateDirectoriesHistory, True); end; if gSaveSearchReplaceHistory then begin SaveHistory('SearchText', glsSearchHistory, True); SaveHistory('SearchTextPath', glsSearchPathHistory); SaveHistory('ReplaceText', glsReplaceHistory); SaveHistory('ReplaceTextPath', glsReplacePathHistory); SaveHistory('RenameNameMask', glsRenameNameMaskHistory); SaveHistory('RenameExtMask', glsRenameExtMaskHistory); SaveHistory('SearchDirectories', glsSearchDirectories); SaveHistory('SearchExcludeFiles', glsSearchExcludeFiles); SaveHistory('SearchExcludeDirectories', glsSearchExcludeDirectories); end; History.Save; finally History.Free; end; end; function GetValidDateTimeFormat(const aFormat, ADefaultFormat: string): string; begin try SysUtils.FormatDateTime(aFormat, Now); Result := aFormat; except on EConvertError do Result := ADefaultFormat; end; end; procedure RegisterInitialization(InitProc: TProcedure); begin SetLength(FInitList, Length(FInitList) + 1); FInitList[High(FInitList)]:= InitProc; end; procedure LoadDefaultHotkeyBindings; var HMForm: THMForm; HMHotKey: THotkey; HMControl: THMControl; begin // Note: Increase hkVersion if you change default hotkeys list // Shortcuts that can conflict with default OS shortcuts for some controls // should be put only to Files Panel. // For a list of such possible shortcuts see THotKeyManager.IsShortcutConflictingWithOS. // If adding multiple shortcuts for the same command use: // AddIfNotExists([Shortcut1, Param1, Shortcut2, Param2, ...], Command); // // Shortcuts Ctrl+Alt+ should not be added as the combinations may be // used to enter international characters on Windows (where Ctrl+Alt = AltGr). HMForm := HotMan.Forms.FindOrCreate('Main'); with HMForm.Hotkeys do begin if HotMan.Version < 58 then begin HMHotKey:= FindByCommand('cm_About'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['F1']) then begin Remove(HMHotKey); end; end; if HotMan.Version < 63 then begin HMHotKey:= FindByCommand('cm_View'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['F3']) then begin Remove(HMHotKey); end; end; AddIfNotExists(['F1'],[],'cm_HelpIndex'); AddIfNotExists(['F2','','', 'Shift+F6','',''],'cm_RenameOnly'); AddIfNotExists(['F3','','', 'Shift+F3','','cursor=1',''], 'cm_View'); AddIfNotExists(['F4'],[],'cm_Edit'); AddIfNotExists(['F5'],[],'cm_Copy'); AddIfNotExists(['F6'],[],'cm_Rename'); AddIfNotExists(['F7'],[],'cm_MakeDir'); AddIfNotExists(['F8','','', 'Shift+F8','','trashcan=reversesetting',''], 'cm_Delete'); AddIfNotExists(['F9'],[],'cm_RunTerm'); if HotMan.Version < 44 then begin HMHotKey:= FindByCommand('cm_ShowCmdLineHistory'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['Ctrl+7']) then begin Remove(HMHotKey); AddIfNotExists(['Alt+F8'],'cm_ShowCmdLineHistory',['Ctrl+Down'],[]); end; end; if HotMan.Version < 53 then begin HMHotKey:= Find(['Alt+`']); if Assigned(HMHotKey) and (HMHotKey.Command = 'cm_ActivateTabByIndex') then begin if HMHotKey.SameParams(['index=-1']) then HMHotKey.Shortcuts[0]:= 'Alt+0'; end; end; AddIfNotExists(['Alt+F8','','', 'Ctrl+Down','',''], 'cm_ShowCmdLineHistory'); AddIfNotExists(['Ctrl+B'],[],'cm_FlatView'); AddIfNotExists(['Ctrl+D'],[],'cm_DirHotList'); AddIfNotExists(['Ctrl+F'],[],'cm_QuickFilter'); AddIfNotExists(['Ctrl+H'],[],'cm_DirHistory'); AddIfNotExists(['Alt+Down'],'cm_DirHistory',['Ctrl+H'],[]); //Historic backward support reason... AddIfNotExists(['Ctrl+L'],[],'cm_CalculateSpace'); AddIfNotExists(['Ctrl+M'],[],'cm_MultiRename'); AddIfNotExists(['Ctrl+O'],[],'cm_ToggleFullscreenConsole'); AddIfNotExists(['Ctrl+P'],[],'cm_AddPathToCmdLine'); AddIfNotExists(['Ctrl+Q'],[],'cm_QuickView'); AddIfNotExists(['Ctrl+S'],[],'cm_QuickSearch'); AddIfNotExists(['Ctrl+R'],[],'cm_Refresh'); AddIfNotExists(['Ctrl+T'],[],'cm_NewTab'); AddIfNotExists(['Ctrl+U'],[],'cm_Exchange'); AddIfNotExists(['Ctrl+W'],[],'cm_CloseTab'); AddIfNotExists(['Ctrl+F1'],[],'cm_BriefView'); AddIfNotExists(['Ctrl+F2'],[],'cm_ColumnsView'); AddIfNotExists(['Ctrl+F3'],[],'cm_SortByName'); AddIfNotExists(['Ctrl+F4'],[],'cm_SortByExt'); AddIfNotExists(['Ctrl+F5'],[],'cm_SortByDate'); AddIfNotExists(['Ctrl+F6'],[],'cm_SortBySize'); AddIfNotExists(['Ctrl+Enter'],[],'cm_AddFilenameToCmdLine'); AddIfNotExists(['Ctrl+PgDn'],[],'cm_OpenArchive'); AddIfNotExists(['Ctrl+PgUp'],[],'cm_ChangeDirToParent'); AddIfNotExists(['Ctrl+Alt+Enter'],[],'cm_ShellExecute'); AddIfNotExists(['Ctrl+Shift+A'],[],'cm_ShowTabsList'); AddIfNotExists(['Ctrl+Shift+B'],[],'cm_FlatViewSel'); AddIfNotExists(['Ctrl+Shift+C'],[],'cm_CopyFullNamesToClip'); AddIfNotExists(['Ctrl+Shift+D'],[],'cm_ConfigDirHotList'); AddIfNotExists(['Ctrl+Shift+H'],[],'cm_HorizontalFilePanels'); AddIfNotExists(['Ctrl+Shift+X'],[],'cm_CopyNamesToClip'); AddIfNotExists(['Ctrl+Shift+F1'],[],'cm_ThumbnailsView'); AddIfNotExists(['Ctrl+Shift+Enter'],[],'cm_AddPathAndFilenameToCmdLine'); AddIfNotExists(['Ctrl+Shift+Tab'],[],'cm_PrevTab'); AddIfNotExists(['Ctrl+Shift+F7'],[],'cm_AddNewSearch'); AddIfNotExists(['Ctrl+Shift+F8'],[],'cm_TreeView'); AddIfNotExists(['Ctrl+Tab'],[],'cm_NextTab'); AddIfNotExists(['Ctrl+Up'],[],'cm_OpenDirInNewTab'); AddIfNotExists(['Ctrl+\'],[],'cm_ChangeDirToRoot'); AddIfNotExists(['Ctrl+.'],[],'cm_ShowSysFiles'); AddIfNotExists(['Shift+F2'],[],'cm_FocusCmdLine'); AddIfNotExists(['Shift+F4'],[],'cm_EditNew'); AddIfNotExists(['Shift+F5'],[],'cm_CopySamePanel'); AddIfNotExists(['Shift+F10'],[],'cm_ContextMenu'); AddIfNotExists(['Shift+F12'],[],'cm_DoAnyCmCommand'); AddIfNotExists(['Shift+Tab'],[],'cm_FocusTreeView'); AddIfNotExists(['Alt+V'],[],'cm_OperationsViewer'); AddIfNotExists(['Alt+X'],[],'cm_Exit'); AddIfNotExists(['Alt+Z'],[],'cm_TargetEqualSource'); AddIfNotExists(['Alt+F1'],[],'cm_LeftOpenDrives'); AddIfNotExists(['Alt+F2'],[],'cm_RightOpenDrives'); AddIfNotExists(['Alt+F5'],[],'cm_PackFiles'); AddIfNotExists(['Alt+F7'],[],'cm_Search'); AddIfNotExists(['Alt+F9'],[],'cm_ExtractFiles'); AddIfNotExists(['Alt+Del'],[],'cm_Wipe'); AddIfNotExists(['Alt+Enter'],[],'cm_FileProperties'); AddIfNotExists(['Alt+Left'],[],'cm_ViewHistoryPrev'); AddIfNotExists(['Alt+Right'],[],'cm_ViewHistoryNext'); AddIfNotExists(['Alt+Shift+Enter'],[],'cm_CountDirContent'); AddIfNotExists(['Alt+Shift+F9'],[],'cm_TestArchive'); AddIfNotExists([ 'Alt+1','','index=1','', 'Alt+2','','index=2','', 'Alt+3','','index=3','', 'Alt+4','','index=4','', 'Alt+5','','index=5','', 'Alt+6','','index=6','', 'Alt+7','','index=7','', 'Alt+8','','index=8','', 'Alt+9','','index=9','', 'Alt+0','','index=-1',''], 'cm_ActivateTabByIndex'); AddIfNotExists([ 'Ctrl+1','','index=1','', 'Ctrl+2','','index=2','', 'Ctrl+3','','index=3','', 'Ctrl+4','','index=4','', 'Ctrl+5','','index=5','', 'Ctrl+6','','index=6','', 'Ctrl+7','','index=7','', 'Ctrl+8','','index=8','', 'Ctrl+9','','index=9',''], 'cm_OpenDriveByIndex'); if HotMan.Version < 38 then begin HMHotKey:= FindByCommand('cm_EditComment'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['Ctrl+Z']) then Remove(HMHotKey); end; end; HMControl := HMForm.Controls.FindOrCreate('Files Panel'); with HMControl.Hotkeys do begin AddIfNotExists(['Del' ,'','', 'Shift+Del','','trashcan=reversesetting',''], 'cm_Delete'); AddIfNotExists(['Ctrl+A' ,'','', 'Ctrl+Num+','',''],'cm_MarkMarkAll', ['Ctrl+A'], []); AddIfNotExists(['Num+'],[],'cm_MarkPlus'); AddIfNotExists(['Shift+Num+'],[],'cm_MarkCurrentExtension'); AddIfNotExists(['Ctrl+Num-'],[],'cm_MarkUnmarkAll'); AddIfNotExists(['Num-'],[],'cm_MarkMinus'); AddIfNotExists(['Shift+Num-'],[],'cm_UnmarkCurrentExtension'); AddIfNotExists(['Num*'],[],'cm_MarkInvert'); AddIfNotExists(['Ctrl+Z'],[],'cm_EditComment'); AddIfNotExists(['Ctrl+Shift+Home'],[],'cm_ChangeDirToHome'); AddIfNotExists(['Ctrl+Left'],[],'cm_TransferLeft'); AddIfNotExists(['Ctrl+Right'],[],'cm_TransferRight'); if HotMan.Version < 46 then begin HMHotKey:= FindByCommand('cm_NextGroup'); if Assigned(HMHotKey) then Remove(HMHotKey); end; AddIfNotExists(VK_C, [ssModifier], 'cm_CopyToClipboard'); AddIfNotExists(VK_V, [ssModifier], 'cm_PasteFromClipboard'); AddIfNotExists(VK_X, [ssModifier], 'cm_CutToClipboard'); end; HMForm := HotMan.Forms.FindOrCreate('Viewer'); with HMForm.Hotkeys do begin AddIfNotExists(['F1'],[],'cm_About'); AddIfNotExists(['F2'],[],'cm_Reload'); if HotMan.Version < 60 then begin HMHotKey:= Find(['Right']); if Assigned(HMHotKey) and (HMHotKey.Command = 'cm_LoadNextFile') then begin HMHotKey.Shortcuts[0]:= 'Alt+Right'; end; HMHotKey:= Find(['Left']); if Assigned(HMHotKey) and (HMHotKey.Command = 'cm_LoadPrevFile') then begin HMHotKey.Shortcuts[0]:= 'Alt+Left'; end; end; AddIfNotExists(['N' ,'','', 'Alt+Right','',''],'cm_LoadNextFile'); AddIfNotExists(['P' ,'','', 'Alt+Left','',''],'cm_LoadPrevFile'); if HotMan.Version < 54 then begin HMHotKey:= FindByCommand('cm_ShowAsWrapText'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['4']) then Remove(HMHotKey); end; if HotMan.Version < 56 then begin HMHotKey:= FindByCommand('cm_Find'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['F']) then Remove(HMHotKey); end; AddIfNotExists(['1'],[],'cm_ShowAsText'); AddIfNotExists(['2'],[],'cm_ShowAsBin'); AddIfNotExists(['3'],[],'cm_ShowAsHex'); AddIfNotExists(['4'],[],'cm_ShowAsDec'); AddIfNotExists(['5'],[],'cm_ShowAsBook'); AddIfNotExists(['6'],[],'cm_ShowGraphics'); AddIfNotExists(['7'],[],'cm_ShowPlugins'); AddIfNotExists(['8'],[],'cm_ShowOffice'); AddIfNotExists(['9'],[],'cm_ShowCode'); AddIfNotExists(['C'],[],'cm_ImageCenter'); AddIfNotExists(['F'],[],'cm_StretchImage'); AddIfNotExists(['L'],[],'cm_StretchOnlyLarge'); AddIfNotExists(['W'],[],'cm_WrapText'); AddIfNotExists(['F6'],[],'cm_ShowCaret'); AddIfNotExists(['Q' ,'','', 'Esc','',''],'cm_ExitViewer'); AddIfNotExists([SmkcSuper + 'F' ,'','', 'F7' ,'',''],'cm_Find'); AddIfNotExists(['F3'],[],'cm_FindNext'); AddIfNotExists(['Shift+F3'],[],'cm_FindPrev'); AddIfNotExists(['`'],[],'cm_Preview'); // til'da on preview mode AddIfNotExists(['Num+'],[],'cm_ZoomIn'); AddIfNotExists(['Num-'],[],'cm_ZoomOut'); AddIfNotExists(['Alt+Enter'],[],'cm_Fullscreen'); //AddIfNotExists(['Up'],[],'cm_Rotate270'); // how at once add this keys only to Image control? //AddIfNotExists(['Down'],[],'cm_Rotate90'); AddIfNotExists(VK_P, [ssModifier], 'cm_Print'); AddIfNotExists(VK_G, [ssModifier], 'cm_GotoLine'); AddIfNotExists(VK_A, [ssModifier], 'cm_SelectAll'); AddIfNotExists(VK_C, [ssModifier], 'cm_CopyToClipboard'); AddIfNotExists(VK_Z, [ssModifier], 'cm_Undo'); AddIfNotExists(['A','','ANSI','', 'S','','OEM','', 'Z','','UTF-8','', 'X','','UTF-16LE',''],'cm_ChangeEncoding'); end; HMForm := HotMan.Forms.FindOrCreate('Differ'); with HMForm.Hotkeys do begin AddIfNotExists(['Ctrl+R'],[],'cm_Reload'); AddIfNotExists([SmkcSuper + 'F' ,'','', 'F7' ,'',''],'cm_Find'); AddIfNotExists(['F3'],[],'cm_FindNext'); AddIfNotExists(['Shift+F3'],[],'cm_FindPrev'); AddIfNotExists(VK_G, [ssModifier], 'cm_GotoLine'); AddIfNotExists(['Alt+Down'],[],'cm_NextDifference'); AddIfNotExists(['Alt+Up'],[],'cm_PrevDifference'); AddIfNotExists(['Alt+Home'],[],'cm_FirstDifference'); AddIfNotExists(['Alt+End'],[],'cm_LastDifference'); AddIfNotExists(['Alt+X'],[],'cm_Exit'); AddIfNotExists(['Alt+Left'],[],'cm_CopyRightToLeft'); AddIfNotExists(['Alt+Right'],[],'cm_CopyLeftToRight'); end; HMForm := HotMan.Forms.FindOrCreate('Confirmation'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'], [],'cm_AddToQueue'); end; HMForm := HotMan.Forms.FindOrCreate('Copy/Move Dialog'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'], [],'cm_AddToQueue'); AddIfNotExists(['F5', '', '', 'F6', '', ''], 'cm_ToggleSelectionInName'); end; HMForm := HotMan.Forms.FindOrCreate('Edit Comment Dialog'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'],[],'cm_SaveDescription'); end; HMForm := HotMan.Forms.FindOrCreate('Synchronize Directories'); with HMForm.Hotkeys do begin AddIfNotExists(VK_M, [ssModifier], 'cm_SelectClear'); AddIfNotExists(VK_D, [ssModifier], 'cm_SelectCopyDefault'); AddIfNotExists(VK_W, [ssModifier], 'cm_SelectCopyReverse'); AddIfNotExists(VK_L, [ssModifier], 'cm_SelectCopyLeftToRight'); AddIfNotExists(VK_R, [ssModifier], 'cm_SelectCopyRightToLeft'); end; HMForm := HotMan.Forms.FindOrCreate('Editor'); with HMForm.Hotkeys do begin if HotMan.Version < 45 then begin HMHotKey:= FindByCommand('cm_EditFind'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['F7']) then Remove(HMHotKey); HMHotKey:= FindByCommand('cm_FileSave'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['F2']) then Remove(HMHotKey); HMHotKey:= FindByCommand('cm_FileExit'); if Assigned(HMHotKey) and HMHotKey.SameShortcuts(['Esc']) then Remove(HMHotKey); end; AddIfNotExists([SmkcSuper + 'F' ,'','', 'F7' ,'',''],'cm_EditFind'); AddIfNotExists(['F2' ,'','', SmkcSuper + 'S' ,'',''],'cm_FileSave'); AddIfNotExists(['F3'],[],'cm_EditFindNext'); AddIfNotExists(['Shift+F3'],[],'cm_EditFindPrevious'); AddIfNotExists(['Alt+X', '', '', //Let is be first since by legacy what we get used to see in main menu as shortcut was "Alt+X". 'Esc', '', ''], 'cm_FileExit'); AddIfNotExists(VK_X, [ssModifier], 'cm_EditCut'); AddIfNotExists(VK_N, [ssModifier], 'cm_FileNew'); AddIfNotExists(VK_O, [ssModifier], 'cm_FileOpen'); AddIfNotExists(VK_R, [ssModifier], 'cm_EditRplc'); AddIfNotExists(VK_C, [ssModifier], 'cm_EditCopy'); AddIfNotExists(VK_Z, [ssModifier], 'cm_EditUndo'); AddIfNotExists(VK_V, [ssModifier], 'cm_EditPaste'); AddIfNotExists(VK_A, [ssModifier], 'cm_EditSelectAll'); AddIfNotExists(VK_Z, [ssModifier, ssShift], 'cm_EditRedo'); AddIfNotExists(VK_G, [ssModifier], 'cm_EditGotoLine'); end; HMForm := HotMan.Forms.FindOrCreate('Find Files'); with HMForm.Hotkeys do begin AddIfNotExists(['F3'],[],'cm_View'); AddIfNotExists(['F4'],[],'cm_Edit'); AddIfNotExists(['F7'],[],'cm_IntelliFocus'); AddIfNotExists(['F9'],[],'cm_Start'); AddIfNotExists(['Esc'],[],'cm_CancelClose'); AddIfNotExists(['Ctrl+N'],[],'cm_NewSearch'); AddIfNotExists(['Ctrl+Shift+N'],[],'cm_NewSearchClearFilters'); AddIfNotExists(['Ctrl+L'],[],'cm_LastSearch'); AddIfNotExists(['Alt+1','','', 'Alt+F7','',''],'cm_PageStandard'); AddIfNotExists(['Alt+2'],[],'cm_PageAdvanced'); AddIfNotExists(['Alt+3'],[],'cm_PagePlugins'); AddIfNotExists(['Alt+4'],[],'cm_PageLoadSave'); AddIfNotExists(['Alt+5'],[],'cm_PageResults'); AddIfNotExists(['Alt+F4','',''],'cm_FreeFromMem'); AddIfNotExists(VK_TAB, [ssModifier], 'cm_PageNext'); AddIfNotExists(VK_TAB, [ssModifier, ssShift], 'cm_PagePrev'); end; HMForm := HotMan.Forms.FindOrCreate(HotkeysCategoryMultiRename); with HMForm.Hotkeys do begin AddIfNotExists(['Ctrl+R'],[],'cm_ResetAll'); AddIfNotExists(['Ctrl+I'],[],'cm_InvokeEditor'); AddIfNotExists(['F3'],[],'cm_LoadNamesFromFile'); AddIfNotExists(['F4'],[],'cm_EditNames'); AddIfNotExists(['Shift+F4'],[],'cm_EditNewNames'); AddIfNotExists(['F10'],[],'cm_Config'); AddIfNotExists(['F9'],[],'cm_Rename'); AddIfNotExists(['Esc'],[],'cm_Close'); AddIfNotExists(['Shift+F2'],[],'cm_ShowPresetsMenu'); AddIfNotExists(['F2'],[],'cm_DropDownPresetList'); AddIfNotExists(['Alt+0'],[],'cm_LoadLastPreset'); AddIfNotExists(['Alt+1'],[],'cm_LoadPreset1'); AddIfNotExists(['Alt+2'],[],'cm_LoadPreset2'); AddIfNotExists(['Alt+3'],[],'cm_LoadPreset3'); AddIfNotExists(['Alt+4'],[],'cm_LoadPreset4'); AddIfNotExists(['Alt+5'],[],'cm_LoadPreset5'); AddIfNotExists(['Alt+6'],[],'cm_LoadPreset6'); AddIfNotExists(['Alt+7'],[],'cm_LoadPreset7'); AddIfNotExists(['Alt+8'],[],'cm_LoadPreset8'); AddIfNotExists(['Alt+9'],[],'cm_LoadPreset9'); AddIfNotExists(['Ctrl+S'],[],'cm_SavePreset'); AddIfNotExists(['F12'],[],'cm_SavePresetAs'); AddIfNotExists(['Shift+F6'],[],'cm_RenamePreset'); AddIfNotExists(['Ctrl+D'],[],'cm_DeletePreset'); AddIfNotExists(['Ctrl+Shift+S'],[],'cm_SortPresets'); AddIfNotExists(['Ctrl+F2'],[],'cm_AnyNameMask'); AddIfNotExists(['Ctrl+F3'],[],'cm_NameNameMask'); AddIfNotExists(['Ctrl+F4'],[],'cm_ExtNameMask'); AddIfNotExists(['Ctrl+F7'],[],'cm_CtrNameMask'); AddIfNotExists(['Ctrl+F5'],[],'cm_DateNameMask'); AddIfNotExists(['Ctrl+F6'],[],'cm_TimeNameMask'); AddIfNotExists(['Ctrl+F1'],[],'cm_PlgnNameMask'); AddIfNotExists(['Ctrl+Shift+F2'],[],'cm_AnyExtMask'); AddIfNotExists(['Ctrl+Shift+F3'],[],'cm_NameExtMask'); AddIfNotExists(['Ctrl+Shift+F4'],[],'cm_ExtExtMask'); AddIfNotExists(['Ctrl+Shift+F7'],[],'cm_CtrExtMask'); AddIfNotExists(['Ctrl+Shift+F5'],[],'cm_DateExtMask'); AddIfNotExists(['Ctrl+Shift+F6'],[],'cm_TimeExtMask'); AddIfNotExists(['Ctrl+Shift+F1'],[],'cm_PlgnExtMask'); end; if not mbFileExists(gpCfgDir + gNameSCFile) then gNameSCFile := 'shortcuts.scf'; HotMan.Save(gpCfgDir + gNameSCFile); end; function InitPropStorage(Owner: TComponent): TIniPropStorageEx; var sWidth, sHeight: String; begin Result:= TIniPropStorageEx.Create(Owner); Result.IniFileName:= gpCfgDir + 'session.ini'; if Owner is TCustomForm then with Owner as TCustomForm do begin if (Monitor = nil) then Result.IniSection:= ClassName else begin sWidth:= IntToStr(Monitor.Width); sHeight:= IntToStr(Monitor.Height); Result.IniSection:= ClassName + '(' + sWidth + 'x' + sHeight + ')'; end; end; end; procedure FontToFontOptions(Font: TFont; var Options: TDCFontOptions); begin with Options do begin Name := Font.Name; Size := Font.Size; Style := Font.Style; Quality := Font.Quality; end; end; procedure FontOptionsToFont(Options: TDCFontOptions; Font: TFont); begin with Options do begin Font.Name := Name; Font.Size := Size; Font.Style := Style; Font.Quality := Quality; end; end; procedure OldKeysToNew(ActionEnabled: Boolean; ShiftState: TShiftState; Action: TKeyTypingAction); var Modifier: TKeyTypingModifier; begin if ActionEnabled then begin for Modifier in TKeyTypingModifier do begin if TKeyTypingModifierToShift[Modifier] = ShiftState then gKeyTyping[Modifier] := Action else if gKeyTyping[Modifier] = Action then gKeyTyping[Modifier] := ktaNone; end; end else begin for Modifier in TKeyTypingModifier do begin if gKeyTyping[Modifier] = Action then begin gKeyTyping[Modifier] := ktaNone; Break; end; end; end; end; function LoadStringsFromFile(var list: TStringListEx; const sFileName:String; MaxStrings: Integer = 0): Boolean; var i:Integer; begin Assert(list <> nil,'LoadStringsFromFile: list=nil'); list.Clear; Result:=False; if mbFileExists(sFileName) then begin list.LoadFromFile(sFileName); if MaxStrings > 0 then begin for i:=list.Count-1 downto 0 do if i>MaxStrings then list.Delete(i) else Break; end; Result:=True; end; end; procedure CopySettingsFiles; begin { Copy default configuration files if needed } // pixmaps file if not mbFileExists(gpCfgDir + 'pixmaps.txt') then begin CopyFile(gpExePath + 'default' + PathDelim + 'pixmaps.txt', gpCfgDir + 'pixmaps.txt'); end; // multiarc configuration file if (mbFileSize(gpCfgDir + sMULTIARC_FILENAME) = 0) then begin CopyFile(gpExePath + 'default' + PathDelim + sMULTIARC_FILENAME, gpCfgDir + sMULTIARC_FILENAME); end; end; procedure CreateGlobs; begin gExts := TExts.Create; gColorExt := TColorExt.Create; gFileInfoToolTip := TFileInfoToolTip.Create; gDirectoryHotlist := TDirectoryHotlist.Create; gFavoriteTabsList := TFavoriteTabsList.Create; glsDirHistory := TStringListEx.Create; glsCmdLineHistory := TStringListEx.Create; glsVolumeSizeHistory := TStringListEx.Create; glsMaskHistory := TStringListEx.Create; glsSearchHistory := TStringListEx.Create; glsSearchPathHistory := TStringListEx.Create; glsReplaceHistory := TStringListEx.Create; glsReplacePathHistory := TStringListEx.Create; glsCreateDirectoriesHistory := TStringListEx.Create; glsRenameNameMaskHistory := TStringListEx.Create; glsRenameExtMaskHistory := TStringListEx.Create; glsIgnoreList := TStringListEx.Create; glsSearchDirectories := TStringList.Create; glsSearchExcludeFiles:= TStringList.Create; glsSearchExcludeDirectories:= TStringList.Create; gSearchTemplateList := TSearchTemplateList.Create; gDSXPlugins := TDSXModuleList.Create; gWCXPlugins := TWCXModuleList.Create; gWDXPlugins := TWDXModuleList.Create; gWFXPlugins := TWFXModuleList.Create; gWLXPlugins := TWLXModuleList.Create; gMultiArcList := TMultiArcList.Create; gColors := TColorThemes.Create; gStyles := TJsonConfig.Create; ColSet := TPanelColumnsList.Create; HotMan := THotKeyManager.Create; end; procedure DestroyGlobs; begin FreeAndNil(gColorExt); FreeAndNil(gFileInfoToolTip); FreeAndNil(glsDirHistory); FreeAndNil(glsCmdLineHistory); FreeAndNil(glsVolumeSizeHistory); FreeAndNil(gSpecialDirList); FreeAndNil(gDirectoryHotlist); FreeAndNil(gFavoriteTabsList); FreeAndNil(glsMaskHistory); FreeAndNil(glsSearchHistory); FreeAndNil(glsSearchPathHistory); FreeAndNil(glsReplaceHistory); FreeAndNil(glsReplacePathHistory); FreeAndNil(glsCreateDirectoriesHistory); FreeAndNil(glsRenameNameMaskHistory); FreeAndNil(glsRenameExtMaskHistory); FreeAndNil(glsIgnoreList); FreeAndNil(glsSearchDirectories); FreeAndNil(glsSearchExcludeFiles); FreeAndNil(glsSearchExcludeDirectories); FreeAndNil(gExts); FreeAndNil(gConfig); FreeAndNil(gSearchTemplateList); FreeAndNil(gDSXPlugins); FreeAndNil(gWCXPlugins); FreeAndNil(gWDXPlugins); FreeAndNil(gWFXPlugins); FreeAndNil(gWLXPlugins); FreeAndNil(gMultiArcList); FreeAndNil(gColors); FreeAndNil(gStyles); FreeAndNil(ColSet); FreeAndNil(HotMan); FreeAndNil(gHighlighters); end; {$IFDEF MSWINDOWS} function GetPathNameIfItMatch(SpecialConstant:integer; FilenameSearched:string):string; var MaybePath:string; FilePath: array [0..Pred(MAX_PATH)] of WideChar = ''; begin result:=''; FillChar(FilePath, MAX_PATH, 0); SHGetSpecialFolderPathW(0, @FilePath[0], SpecialConstant, FALSE); if FilePath<>'' then begin MaybePath:=IncludeTrailingPathDelimiter(UTF16ToUTF8(WideString(FilePath))); if mbFileExists(MaybePath+FilenameSearched) then result:=MaybePath+FilenameSearched; end; end; {$ENDIF} procedure SetDefaultConfigGlobs; procedure SetDefaultExternalTool(var ExternalToolOptions: TExternalToolOptions); begin with ExternalToolOptions do begin Enabled := False; Path := ''; Parameters := ''; RunInTerminal := False; KeepTerminalOpen := False; end; end; var iIndexContextMode:integer; begin { Language page } gPOFileName := ''; { Behaviours page } gRunInTermStayOpenCmd := RunInTermStayOpenCmd; gRunInTermStayOpenParams := RunInTermStayOpenParams; gRunInTermCloseCmd := RunInTermCloseCmd; gRunInTermCloseParams := RunInTermCloseParams; gRunTermCmd := RunTermCmd; gRunTermParams := RunTermParams; gOnlyOneAppInstance := False; gLynxLike := True; gSortCaseSensitivity := cstNotSensitive; gSortNatural := False; gSortSpecial := False; gSortFolderMode := sfmSortLikeFileShowFirst; gNewFilesPosition := nfpSortedPosition; gUpdatedFilesPosition := ufpNoChange; gFileSizeFormat := fsfFloat; gHeaderSizeFormat := fsfFloat; gFooterSizeFormat := fsfFloat; gOperationSizeFormat := fsfFloat; gFileSizeDigits := 1; gHeaderDigits := 1; gFooterDigits := 1; gOperationSizeDigits := 1; //NOTES: We're intentionnaly not setting our default memory immediately because language file has not been loaded yet. // We'll set them *after* after language has been loaded since we'll know the correct default to use. gConfirmQuit := False; gMinimizeToTray := False; gAlwaysShowTrayIcon := False; gMouseSelectionEnabled := True; gMouseSelectionButton := 0; // Left gMouseSingleClickStart := 0; gMouseSelectionIconClick := 0; gScrollMode := smLineByLine; gWheelScrollLines:= Mouse.WheelScrollLines; gAutoFillColumns := False; gAutoSizeColumn := 1; gColumnsLongInStatus := False; gColumnsAutoSaveWidth := True; gColumnsTitleStyle := tsNative; gCustomColumnsChangeAllColumns := False; gDateTimeFormat := DefaultDateTimeFormat; gColumnsTitleLikeValues := False; gCutTextToColWidth := True; gExtendCellWidth := False; gShowSystemFiles := False; // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon gListFilesInThread := {$IFDEF LCLCARBON}False{$ELSE}True{$ENDIF}; gLoadIconsSeparately := True; gDelayLoadingTabs := True; gHighlightUpdatedFiles := True; gDriveBlackList := ''; gDriveBlackListUnmounted := False; { File views page } gExtraLineSpan := 2; gFolderPrefix := '['; gFolderPostfix := ']'; gRenameConfirmMouse := False; { Brief view page } gBriefViewFixedCount := 2; gBriefViewFixedWidth := 100; gBriefViewMode := bvmAutoSize; gBriefViewFileExtAligned := False; { Tools page } SetDefaultExternalTool(gExternalTools[etViewer]); SetDefaultExternalTool(gExternalTools[etEditor]); SetDefaultExternalTool(gExternalTools[etDiffer]); { Differ related} gResultingFramePositionAfterCompare := rfpacActiveOnLeft; { Fonts page } gFonts[dcfMain].Name := 'default'; gFonts[dcfMain].Size := 10; gFonts[dcfMain].Style := [fsBold]; gFonts[dcfMain].Quality := fqDefault; gFonts[dcfMain].MinValue := 6; gFonts[dcfMain].MaxValue := 200; gFonts[dcfEditor].Name := MonoSpaceFont; gFonts[dcfEditor].Size := 14; gFonts[dcfEditor].Style := []; gFonts[dcfEditor].Quality := fqDefault; gFonts[dcfEditor].MinValue := 6; gFonts[dcfEditor].MaxValue := 200; gFonts[dcfViewer].Name := MonoSpaceFont; gFonts[dcfViewer].Size := 14; gFonts[dcfViewer].Style := []; gFonts[dcfViewer].Quality := fqDefault; gFonts[dcfViewer].MinValue := 6; gFonts[dcfViewer].MaxValue := 200; gFonts[dcfViewerBook].Name := 'default'; gFonts[dcfViewerBook].Size := 16; gFonts[dcfViewerBook].Style := [fsBold]; gFonts[dcfViewerBook].Quality := fqDefault; gFonts[dcfViewerBook].MinValue := 6; gFonts[dcfViewerBook].MaxValue := 200; gFonts[dcfLog].Name := MonoSpaceFont; gFonts[dcfLog].Size := 12; gFonts[dcfLog].Style := []; gFonts[dcfLog].Quality := fqDefault; gFonts[dcfLog].MinValue := 6; gFonts[dcfLog].MaxValue := 200; gFonts[dcfConsole].Name := MonoSpaceFont; gFonts[dcfConsole].Size := 12; gFonts[dcfConsole].Style := []; gFonts[dcfConsole].Quality := fqDefault; gFonts[dcfConsole].MinValue := 6; gFonts[dcfConsole].MaxValue := 200; gFonts[dcfPathEdit].Name := 'default'; gFonts[dcfPathEdit].Size := 10; gFonts[dcfPathEdit].Style := []; gFonts[dcfPathEdit].Quality := fqDefault; gFonts[dcfPathEdit].MinValue := 6; gFonts[dcfPathEdit].MaxValue := 200; gFonts[dcfFunctionButtons].Name := 'default'; gFonts[dcfFunctionButtons].Size := 10; gFonts[dcfFunctionButtons].Style := []; gFonts[dcfFunctionButtons].Quality := fqDefault; gFonts[dcfFunctionButtons].MinValue := 6; gFonts[dcfFunctionButtons].MaxValue := 200; gFonts[dcfSearchResults].Name := 'default'; gFonts[dcfSearchResults].Size := 10; gFonts[dcfSearchResults].Style := []; gFonts[dcfSearchResults].Quality := fqDefault; gFonts[dcfSearchResults].MinValue := 6; gFonts[dcfSearchResults].MaxValue := 200; gFonts[dcfTreeViewMenu].Name := 'default'; gFonts[dcfTreeViewMenu].Size := 10; gFonts[dcfTreeViewMenu].Style := []; gFonts[dcfTreeViewMenu].Quality := fqDefault; gFonts[dcfTreeViewMenu].MinValue := 6; gFonts[dcfTreeViewMenu].MaxValue := 200; gFonts[dcfStatusBar].Name := 'default'; gFonts[dcfStatusBar].Size := 0; gFonts[dcfStatusBar].Style := []; gFonts[dcfStatusBar].Quality := fqDefault; gFonts[dcfStatusBar].MinValue := 6; gFonts[dcfStatusBar].MaxValue := 200; { Colors page } gUseCursorBorder := False; gUseFrameCursor := False; gUseInvertedSelection := False; gUseInactiveSelColor := False; gAllowOverColor := True; gBorderFrameWidth:=1; gInactivePanelBrightness := 100; // Full brightness gIndUseGradient := True; { Layout page } gMainMenu := True; gButtonBar := True; gToolBarFlat := True; gMiddleToolBar := False; gToolBarButtonSize := 24; gToolBarIconSize := 16; gToolBarShowCaptions := False; gToolbarReportErrorWithCommands := FALSE; gMiddleToolBarFlat := True; gMiddleToolBarButtonSize := 24; gMiddleToolBarIconSize := 16; gMiddleToolBarShowCaptions := False; gMiddleToolbarReportErrorWithCommands := FALSE; gToolbarFilenameStyle := pfsAbsolutePath; gToolbarPathToBeRelativeTo := EnvVarCommanderPath; gToolbarPathModifierElements := []; gDriveBar1 := True; gDriveBar2 := True; gDriveBarFlat := True; gDrivesListButton := True; gDirectoryTabs := True; gCurDir := True; gTabHeader := True; gStatusBar := True; gCmdLine := True; gLogWindow := False; gTermWindow := False; gKeyButtons := True; gInterfaceFlat := True; gDriveInd := False; gDriveFreeSpace := True; gProgInMenuBar := False; gPanelOfOp := True; gShortFormatDriveInfo := True; gHorizontalFilePanels := False; gUpperCaseDriveLetter := False; gShowColonAfterDrive := False; gDrivesListButtonOptions := [dlbShowLabel, dlbShowFileSystem, dlbShowFreeSpace]; gSeparateTree := False; { Keys page } gKeyTyping[ktmNone] := ktaQuickSearch; gKeyTyping[ktmAlt] := ktaNone; gKeyTyping[ktmCtrlAlt] := ktaQuickFilter; { File operations page } gLongNameAlert := True; gCopyBlockSize := 524288; gHashBlockSize := 8388608; gUseMmapInSearch := False; gPartialNameSearch := True; gInitiallyClearFileMask := True; gNewSearchClearFiltersAction := fonsKeep; gShowMenuBarInFindFiles := True; gWipePassNumber := 1; gDropReadOnlyFlag := False; gProcessComments := False; gRenameSelOnlyName := False; gShowCopyTabSelectPanel := False; gUseTrash := True; gSkipFileOpError := False; gTypeOfDuplicatedRename := drLegacyWithCopy; gDefaultDropEffect:= True; gShowDialogOnDragDrop := True; gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name:='Richtext format'; gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel:=0; gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name:='HTML format'; gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel:=1; gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name:='Unicode format'; gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel:=2; gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name:='Simple text format'; gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel:=3; gDragAndDropAskFormatEachTime := False; gDragAndDropTextAutoFilename := False; gDragAndDropSaveUnicodeTextInUFT8 := True; gNtfsHourTimeDelay := False; gAutoExtractOpenMask := EmptyStr; gFileOperationsProgressKind := fopkSeparateWindow; gFileOperationsConfirmations := [focCopy, focMove, focDelete, focDeleteToTrash]; gFileOperationDuration := -1; { Multi-Rename } gMulRenShowMenuBarOnTop := True; gMulRenInvalidCharReplacement := '.'; gMulRenLaunchBehavior := mrlbLastMaskUnderLastOne; gMulRenExitModifiedPreset := mrempIgnoreSaveLast; gMulRenSaveRenamingLog := mrsrlPerPreset; gMulRenLogFilename := EnvVarConfigPath + PathDelim + 'multirename.log'; gMultRenDailyIndividualDirLog := True; gMulRenFilenameWithFullPathInLog:= False; gMulRenPathRangeSeparator := ' - '; // Operations options gOperationOptionSymLinks := fsooslNone; gOperationOptionCorrectLinks := False; gOperationOptionCopyOnWrite := fsoogNo; gOperationOptionFileExists := fsoofeNone; gOperationOptionDirectoryExists := fsoodeNone; gOperationOptionSetPropertyError := fsoospeNone; gOperationOptionReserveSpace := True; gOperationOptionCheckFreeSpace := True; gOperationOptionCopyAttributes := True; gOperationOptionCopyXattributes := True; gOperationOptionCopyTime := True; gOperationOptionVerify := False; gOperationOptionCopyOwnership := False; gOperationOptionCopyPermissions := False; gOperationOptionExcludeEmptyDirectories := True; // Extract gExtractOverwrite := False; { Tabs page } gDirTabOptions := [tb_always_visible, tb_confirm_close_all, tb_show_asterisk_for_locked, tb_activate_panel_on_click, tb_close_on_doubleclick, tb_reusing_tab_when_possible, tb_confirm_close_locked_tab]; gDirTabActionOnDoubleClick := tadc_FavoriteTabs; gDirTabLimit := 32; gDirTabPosition := tbpos_top; { Favorite Tabs} gFavoriteTabsUseRestoreExtraOptions := False; gWhereToAddNewFavoriteTabs := afte_Last; gFavoriteTabsFullExpandOrNot := True; gFavoriteTabsGoToConfigAfterSave := False; gFavoriteTabsGoToConfigAfterReSave := False; gDefaultTargetPanelLeftSaved := tclLeft; gDefaultTargetPanelRightSaved := tclRight; gDefaultExistingTabsToKeep := tclNone; gFavoriteTabsSaveDirHistory := False; { Log page } gLogFile := False; gLogFileCount:= 0; gLogFileWithDateInName := FALSE; gLogFileName := EnvVarConfigPath + PathDelim + 'doublecmd.log'; gLogOptions := [log_cp_mv_ln, log_delete, log_dir_op, log_arc_op, log_vfs_op, log_success, log_errors, log_info, log_start_shutdown, log_commandlineexecution]; { Configuration page } gSaveConfiguration := True; gSaveWindowState := True; gSaveFolderTabs := True; gSaveSearchReplaceHistory := True; gSaveDirHistory := True; gDirHistoryCount := 30; gSaveCmdLineHistory := True; gSaveFileMaskHistory := True; gSaveVolumeSizeHistory := True; gSaveCreateDirectoriesHistory := True; gPluginInAutoTweak := False; gWCXConfigViewMode := wcvmByPlugin; { Quick Search/Filter page } gQuickSearchOptions.Match := [qsmBeginning, qsmEnding]; gQuickSearchOptions.Items := qsiFilesAndDirectories; gQuickSearchOptions.SearchCase := qscInsensitive; gQuickFilterAutoHide := True; gQuickFilterSaveSessionModifications := False; //Legacy... { Miscellaneous page } gGridVertLine := False; gGridHorzLine := False; gShowCurDirTitleBar := False; gShowWarningMessages := True; gSpaceMovesDown := False; gDirBrackets := True; gInplaceRename := False; gInplaceRenameButton := True; gDblClickToParent := False; gDblClickEditPath := False; gHotDirAddTargetOrNot := False; gHotDirFullExpandOrNot:=False; gShowPathInPopup:=FALSE; gShowOnlyValidEnv:=TRUE; gWhereToAddNewHotDir := ahdSmart; gHotDirFilenameStyle := pfsAbsolutePath; gHotDirPathToBeRelativeTo := EnvVarCommanderPath; gHotDirPathModifierElements := []; gShowToolTip := True; gShowToolTipMode := tttmCombineDcSystem; gToolTipHideTimeOut := ttthtSystem; gThumbSave := True; gThumbSize.cx := 128; gThumbSize.cy := 128; gSearchDefaultTemplate := EmptyStr; gDescReadEncoding:= meUTF8; gDescWriteEncoding:= meUTF8BOM; gDescCreateUnicode:= True; gDefaultTextEncoding:= EncodingNone; { Auto refresh page } gWatchDirs := [watch_file_name_change, watch_attributes_change]; gWatchDirsExclude := ''; gWatcherMode := fswmAllowDelete; { Icons page } gShowIcons := sim_all_and_exe; gShowIconsNew := gShowIcons; gIconOverlays := {$IFDEF UNIX}True{$ELSE}False{$ENDIF}; gIconsSize := 32; gIconsSizeNew := gIconsSize; gDiskIconsSize := 16; gDiskIconsAlpha := 50; gToolIconsSize := 24; gIconsExclude := False; gIconsExcludeDirs := EmptyStr; gPixelsPerInch := 96; gCustomIcons := []; gIconsInMenus := False; gIconsInMenusSize := 16; gIconsInMenusSizeNew := gIconsInMenusSize; gShowHiddenDimmed := False; gIconTheme := DC_THEME_NAME; { Ignore list page } gIgnoreListFileEnabled := False; gIgnoreListFile := EnvVarConfigPath + PathDelim + 'ignorelist.txt'; {Viewer} gImageStretch := False; gImageExifRotate := True; gImageStretchOnlyLarge := True; gImageShowTransparency := False; gImageCenter := True; gPreviewVisible := False; gCopyMovePath1 := ''; gCopyMovePath2 := ''; gCopyMovePath3 := ''; gCopyMovePath4 := ''; gCopyMovePath5 := ''; gImagePaintMode := vptPen; gImagePaintWidth := 5; gColCount := 1; gTabSpaces := 8; gMaxCodeSize := 128; gMaxTextWidth := 1024; gImagePaintColor := clRed; gTextPosition:= 0; gViewerMode:= 0; gShowCaret := False; gViewerWrapText := False; gViewerLeftMargin := 4; gViewerLineSpacing := 0; gPrintMargins:= Classes.Rect(200, 200, 200, 200); gViewerAutoCopy := True; gViewerSynEditMask := AllFilesMask; gViewerJpegQuality := 80; { Editor } gEditWaitTime := 2000; gEditorSynEditOptions := SYNEDIT_DEFAULT_OPTIONS; gEditorSynEditTabWidth := 8; gEditorSynEditRightEdge := 80; gEditorSynEditBlockIndent := 2; gEditorFindWordAtCursor := True; { Differ } gDifferIgnoreCase := False; gDifferAutoCompare := True; gDifferKeepScrolling := True; gDifferPaintBackground := True; gDifferLineDifferences := False; gDifferIgnoreWhiteSpace := False; {SyncDirs} gSyncDirsSubdirs := False; gSyncDirsByContent := False; gSyncDirsAsymmetric := False; gSyncDirsIgnoreDate := False; gSyncDirsAsymmetricSave := False; gSyncDirsShowFilterCopyRight := True; gSyncDirsShowFilterEqual := True; gSyncDirsShowFilterNotEqual := True; gSyncDirsShowFilterUnknown := True; gSyncDirsShowFilterCopyLeft := True; gSyncDirsShowFilterDuplicates := True; gSyncDirsShowFilterSingles := True; gSyncDirsFileMask := '*'; gSyncDirsFileMaskSave := True; gDateTimeFormatSync := DefaultDateTimeFormatSync; { Internal Associations} gFileAssociationLastCustomAction := rsMsgDefaultCustomActionName; gOfferToAddToFileAssociations := False; gExtendedContextMenu := False; gOpenExecuteViaShell := False; gDefaultContextActions := True; gExecuteViaTerminalClose := False; gExecuteViaTerminalStayOpen := False; gIncludeFileAssociation := False; gFileAssocFilenameStyle := pfsAbsolutePath; gFileAssocPathToBeRelativeTo := EnvVarCommanderPath; gFileAssocPathModifierElements := []; { Tree View Menu } gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand := False; gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick := False; gUseTreeViewMenuWithFavoriteTabsFromMenuCommand := False; gUseTreeViewMenuWithFavoriteTabsFromDoubleClick := False; gUseTreeViewMenuWithDirHistory := False; gUseTreeViewMenuWithViewHistory := False; gUseTreeViewMenuWithCommandLineHistory := False; gTreeViewMenuShortcutExit := True; gTreeViewMenuSingleClickExit := True; gTreeViewMenuDoubleClickExit := True; for iIndexContextMode:=0 to (ord(tvmcLASTONE)-2) do begin gTreeViewMenuOptions[iIndexContextMode].CaseSensitive := False; gTreeViewMenuOptions[iIndexContextMode].IgnoreAccents := True; gTreeViewMenuOptions[iIndexContextMode].ShowWholeBranchIfMatch := False; end; gTreeViewMenuUseKeyboardShortcut := True; { - Other - } gGoToRoot := False; gLuaLib := LuaDLL; gActiveRight := False; gNameSCFile := 'shortcuts.scf'; gHotKeySortOrder := hksoByCommand; gUseEnterToCloseHotKeyEditor := True; gLastUsedPacker := 'zip'; gLastDoAnyCommand := 'cm_Refresh'; gbMarkMaskCaseSensitive := False; gbMarkMaskIgnoreAccents := False; gMarkMaskFilterWindows := False; gMarkShowWantedAttribute := False; gMarkDefaultWantedAttribute := ''; gMarkLastWantedAttribute := ''; { TotalCommander Import/Export } //Will search minimally where TC could be installed so the default value would have some chances to be correct. {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename:=''; gTotalCommanderConfigFilename:=''; gTotalCommanderToolbarPath:=''; if mbFileExists('c:\totalcmd\TOTALCMD.EXE') then gTotalCommanderExecutableFilename:='c:\totalcmd\TOTALCMD.EXE'; if (gTotalCommanderExecutableFilename='') AND (mbFileExists('c:\totalcmd\TOTALCMD64.EXE')) then gTotalCommanderExecutableFilename:='c:\totalcmd\TOTALCMD64.EXE'; if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_COMMON_PROGRAMS,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAMS,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILESX86,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMON,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMONX86,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_COMMON_PROGRAMS,'totalcmd\TOTALCMD64.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAMS,'totalcmd\TOTALCMD64.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMON,'totalcmd\TOTALCMD64.EXE'); if mbFileExists('c:\totalcmd\wincmd.ini') then gTotalCommanderConfigFilename:='c:\totalcmd\wincmd.ini'; if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_APPDATA,'GHISLER\wincmd.ini'); if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_PROFILE,'wincmd.ini'); if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_WINDOWS,'wincmd.ini'); //Don't laugh. The .INI file were originally saved in windows folder for many programs! if gTotalCommanderConfigFilename<>'' then gTotalCommanderToolbarPath:=ExtractFilePath(gTotalCommanderConfigFilename); {$ENDIF} gExts.Clear; gColorExt.Clear; gFileInfoToolTip.Clear; gDirectoryHotlist.Clear; gFavoriteTabsList.Clear; glsDirHistory.Clear; glsMaskHistory.Clear; glsSearchHistory.Clear; glsSearchPathHistory.Clear; glsReplaceHistory.Clear; glsReplacePathHistory.Clear; glsCreateDirectoriesHistory.Clear; glsIgnoreList.Clear; gSearchTemplateList.Clear; gDSXPlugins.Clear; gWCXPlugins.Clear; gWDXPlugins.Clear; gWFXPlugins.Clear; gWLXPlugins.Clear; gMultiArcList.Clear; ColSet.Clear; end; procedure SetDefaultNonConfigGlobs; begin { - Not in config - } gHelpLang := ''; gRepeatPassword := True; gFirstTextSearch := True; gErrorFile := gpCfgDir + ExtractOnlyFileName(Application.ExeName) + '.err'; DefaultDateTimeFormat := FormatSettings.ShortDateFormat + ' hh:nn:ss'; DefaultDateTimeFormatSync := 'yyyy.mm.dd hh:nn:ss'; end; function OpenConfig(var ErrorMessage: String): Boolean; begin if Assigned(gConfig) then Exit(True); // Check global directory for XML config. if (gpCmdLineCfgDir = EmptyStr) then begin gUseConfigInProgramDir:= mbFileExists(gpGlobalCfgDir + 'doublecmd.inf'); if gUseConfigInProgramDir or mbFileExists(gpGlobalCfgDir + 'doublecmd.xml') then begin gConfig := TXmlConfig.Create(gpGlobalCfgDir + 'doublecmd.xml'); if mbFileExists(gpGlobalCfgDir + 'doublecmd.xml') then begin if mbFileAccess(gpGlobalCfgDir + 'doublecmd.xml', fmOpenRead or fmShareDenyWrite) then begin if not LoadConfigCheckErrors(@LoadGlobalConfig, gpGlobalCfgDir + 'doublecmd.xml', ErrorMessage) then begin if not gUseConfigInProgramDir then ErrorMessage := EmptyStr; end else if gConfig.TryGetValue(gConfig.RootNode, 'Configuration/UseConfigInProgramDir', gUseConfigInProgramDir) then begin gConfig.DeleteNode(gConfig.RootNode, 'Configuration/UseConfigInProgramDir'); if not gUseConfigInProgramDir then begin gConfig.Save; mbDeleteFile(gpGlobalCfgDir + 'doublecmd.inf'); end; end; if not gUseConfigInProgramDir then begin if mbFileExists(gpCfgDir + 'doublecmd.xml') then // Close global config so that the local config is opened below. FreeAndNil(gConfig) else // Local config is used but it doesn't exist. Use global config that has just // been read but set file name accordingly and later save to local config. gConfig.FileName := gpCfgDir + 'doublecmd.xml'; end; end else begin // Configuration file is not readable. AddStrWithSep(ErrorMessage, 'Config file "' + gpGlobalCfgDir + 'doublecmd.xml' + '" exists but is not readable.', LineEnding); Exit(False); end; end; end; end; // Check user directory for XML config. if not Assigned(gConfig) and mbFileExists(gpCfgDir + 'doublecmd.xml') then begin gConfig := TXmlConfig.Create(gpCfgDir + 'doublecmd.xml'); gUseConfigInProgramDir := False; if mbFileAccess(gpCfgDir + 'doublecmd.xml', fmOpenRead or fmShareDenyWrite) then begin LoadConfigCheckErrors(@LoadGlobalConfig, gpCfgDir + 'doublecmd.xml', ErrorMessage); end else begin // Configuration file is not readable. AddStrWithSep(ErrorMessage, 'Config file "' + gpCfgDir + 'doublecmd.xml' + '" exists but is not readable.', LineEnding); Exit(False); end; end; // By default use config in user directory. if not Assigned(gConfig) then begin gConfig := TXmlConfig.Create(gpCfgDir + 'doublecmd.xml'); gUseConfigInProgramDir := False; end; gUseConfigInProgramDirNew := gUseConfigInProgramDir; // If global config is used then set config directory as global config directory. if gUseConfigInProgramDir then begin gpCfgDir := gpGlobalCfgDir; UpdateEnvironmentVariable; end; if mbFileExists(gpCfgDir + 'doublecmd.xml') and (not mbFileAccess(gpCfgDir + 'doublecmd.xml', fmOpenWrite or fmShareDenyWrite)) then begin DCDebug('Warning: Config file "' + gpCfgDir + 'doublecmd.xml' + '" is not accessible for writing. Configuration will not be saved.'); end; if not mbDirectoryExists(gpCfgDir) then mbForceDirectory(gpCfgDir); Result := True; end; function LoadGlobs: Boolean; var ErrorMessage: String = ''; begin Result := False; if not OpenConfig(ErrorMessage) then Exit; DCDebug('Loading configuration from ', gpCfgDir); SetDefaultConfigGlobs; if Assigned(gConfig) then LoadXmlConfig else begin DCDebug('Error: No config created.'); Exit(False); end; { Favorite Tabs } gFavoriteTabsList.LoadAllListFromXml; // Update plugins if DC version is changed if (gPreviousVersion <> dcVersion) then UpdatePlugins; // Adjust icons size gIconsSize:= AdjustIconSize(gIconsSize, gPixelsPerInch); gDiskIconsSize:= AdjustIconSize(gDiskIconsSize, gPixelsPerInch); gToolBarIconSize:= AdjustIconSize(gToolBarIconSize, gPixelsPerInch); gToolBarButtonSize:= AdjustIconSize(gToolBarButtonSize, gPixelsPerInch); // Set secondary variables for options that need restart. gShowIconsNew := gShowIcons; gIconsSizeNew := gIconsSize; gIconsInMenusSizeNew := gIconsInMenusSize; CopySettingsFiles; { Internal associations } // "LoadExtsConfig" checks itself if file is present or not LoadConfigCheckErrors(@LoadExtsConfig, gpCfgDir + gcfExtensionAssociation, ErrorMessage); LoadStringsFromFile(glsIgnoreList, ReplaceEnvVars(gIgnoreListFile)); { Localization } msgLoadLng; if (gHighlighters = nil) then begin // Must be after msgLoadLng and before LoadColorsConfig gHighlighters := THighlighters.Create; end; { Highlighters } if mbFileExists(gpCfgDir + HighlighterConfig) then LoadConfigCheckErrors(@LoadHighlightersConfig, gpCfgDir + HighlighterConfig, ErrorMessage); { Hotkeys } if not mbFileExists(gpCfgDir + gNameSCFile) then gNameSCFile := 'shortcuts.scf'; LoadConfigCheckErrors(@LoadHotManConfig, gpCfgDir + gNameSCFile, ErrorMessage); { Colors } gColors.LoadFromXml(gConfig); if mbFileExists(gpCfgDir + COLORS_JSON) then LoadConfigCheckErrors(@LoadColorsConfig, gpCfgDir + COLORS_JSON, ErrorMessage); { MultiArc addons } if mbFileExists(gpCfgDir + sMULTIARC_FILENAME) then LoadConfigCheckErrors(@LoadMultiArcConfig, gpCfgDir + sMULTIARC_FILENAME, ErrorMessage); { Various history } if mbFileExists(gpCfgDir + 'history.xml') then LoadConfigCheckErrors(@LoadHistoryConfig, gpCfgDir + 'history.xml', ErrorMessage); FillFileFuncList; { Specialdir } if gShowOnlyValidEnv=FALSE then gSpecialDirList.PopulateSpecialDir; //We must reload it if user has included the unsignificant environment variable. But anyway, this will not happen often. Result := AskUserOnError(ErrorMessage); end; procedure SaveGlobs; var OldDir: String; ErrMsg: String = ''; begin if (gUseConfigInProgramDirNew <> gUseConfigInProgramDir) and (gpCmdLineCfgDir = EmptyStr) then begin OldDir := gpCfgDir; if gUseConfigInProgramDirNew then begin mbForceDirectory(gpGlobalCfgDir); FileClose(mbFileCreate(gpGlobalCfgDir + 'doublecmd.inf')); end else begin if mbFileExists(gpGlobalCfgDir + 'doublecmd.inf') then mbDeleteFile(gpGlobalCfgDir + 'doublecmd.inf') end; LoadPaths; gConfig.FileName := gpCfgDir + 'doublecmd.xml'; // Copy the configuration to a new location CopyDirTree(OldDir, gpCfgDir, [cffOverwriteFile]); gUseConfigInProgramDir := gUseConfigInProgramDirNew; end; if mbFileAccess(gpCfgDir, fmOpenWrite or fmShareDenyNone) then begin SaveWithCheck(@SaveEarlyConfig, 'early config', ErrMsg); SaveWithCheck(@SaveCfgIgnoreList, 'ignore list', ErrMsg); SaveWithCheck(@SaveCfgMainConfig, 'main configuration', ErrMsg); SaveWithCheck(@SaveHighlightersConfig, 'highlighters config', ErrMsg); SaveWithCheck(@SaveHistoryConfig, 'various history', ErrMsg); SaveWithCheck(@SaveColorsConfig, 'color themes', ErrMsg); if ErrMsg <> EmptyStr then DebugLn(ErrMsg); end else DebugLn('Not saving configuration - no write access to ', gpCfgDir); end; procedure LoadContentPlugins; var I: Integer; Module: TWdxModule; Template: TSearchTemplate; Content: TPluginSearchRec; begin for I:= 0 to gSearchTemplateList.Count - 1 do begin Template:= gSearchTemplateList.Templates[I]; if Template.SearchRecord.ContentPlugin then begin for Content in Template.SearchRecord.ContentPlugins do begin Module:= gWDXPlugins.GetWdxModule(Content.Plugin); if Assigned(Module) and (Module.IsLoaded = False) then begin Module.LoadModule; end; end; end; end; end; procedure LoadXmlConfig; procedure GetExtTool(Node: TXmlNode; var ExternalToolOptions: TExternalToolOptions); begin if Assigned(Node) then with ExternalToolOptions do begin Enabled := gConfig.GetAttr(Node, 'Enabled', Enabled); Path := gConfig.GetValue(Node, 'Path', Path); Parameters := gConfig.GetValue(Node, 'Parameters', Parameters); RunInTerminal := gConfig.GetValue(Node, 'RunInTerminal', RunInTerminal); KeepTerminalOpen := gConfig.GetValue(Node, 'KeepTerminalOpen', KeepTerminalOpen); end; end; procedure GetDCFont(Node: TXmlNode; var FontOptions: TDCFontOptions); var FontQuality: Integer; begin if Assigned(Node) then begin FontQuality:= Integer(FontOptions.Quality); gConfig.GetFont(Node, '', FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), FontQuality, FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), FontQuality); FontOptions.Quality:= TFontQuality(FontQuality); end; end; procedure LoadOption(Node: TXmlNode; var Options: TDrivesListButtonOptions; Option: TDrivesListButtonOption; AName: String); var Value: Boolean; begin if gConfig.TryGetValue(Node, AName, Value) then begin if Value then Include(Options, Option) else Exclude(Options, Option); end; end; var DecimalSeparator: String; Root, Node, SubNode: TXmlNode; LoadedConfigVersion, iIndexContextMode: Integer; oldQuickSearch: Boolean = True; oldQuickFilter: Boolean = False; oldQuickSearchMode: TShiftState = [ssCtrl, ssAlt]; oldQuickFilterMode: TShiftState = []; KeyTypingModifier: TKeyTypingModifier; begin with gConfig do begin Root := gConfig.RootNode; { Double Commander Version } gPreviousVersion:= GetAttr(Root, 'DCVersion', EmptyStr); LoadedConfigVersion := GetAttr(Root, 'ConfigVersion', ConfigVersion); { Create config backup } if (LoadedConfigVersion < ConfigVersion) then try WriteToFile(gpCfgDir + 'doublecmd-' + IntToStr(LoadedConfigVersion) + '.xml.bak'); except // Ignore end; if (LoadedConfigVersion < 13) then begin DeleteNode(Root, 'Configuration/UseConfigInProgramDir'); end; { Language page } gPOFileName := GetValue(Root, 'Language/POFileName', gPOFileName); DoLoadLng; { Since language file has been loaded, we'll not set our default memory size string. They will be in the correct language } gSizeDisplayUnits[fsfFloat] := ''; //Not used, but at least it will be defined. gSizeDisplayUnits[fsfByte] := ''; //Not user changeable by legacy and empty by legacy. gSizeDisplayUnits[fsfKilo] := ' ' + Trim(rsLegacyDisplaySizeSingleLetterKilo); //Not user changeable by legacy, taken from language file since 2018-11. gSizeDisplayUnits[fsfMega] := ' ' + Trim(rsLegacyDisplaySizeSingleLetterMega); //Not user changeable by legacy, taken from language file since 2018-11. gSizeDisplayUnits[fsfGiga] := ' ' + Trim(rsLegacyDisplaySizeSingleLetterGiga); //Not user changeable by legacy, taken from language file since 2018-11. gSizeDisplayUnits[fsfTera] := ' ' + Trim(rsLegacyDisplaySizeSingleLetterTera); //Not user changeable by legacy, taken from language file since 2018-11. gSizeDisplayUnits[fsfPersonalizedFloat] := ''; //Not used, but at least it will be defined. gSizeDisplayUnits[fsfPersonalizedByte] := rsDefaultPersonalizedAbbrevByte; gSizeDisplayUnits[fsfPersonalizedKilo] := rsDefaultPersonalizedAbbrevKilo; gSizeDisplayUnits[fsfPersonalizedMega] := rsDefaultPersonalizedAbbrevMega; gSizeDisplayUnits[fsfPersonalizedGiga] := rsDefaultPersonalizedAbbrevGiga; gSizeDisplayUnits[fsfPersonalizedTera] := rsDefaultPersonalizedAbbrevTera; { Since language has been loaded, we may now load our font usage name} gFonts[dcfMain].Usage := rsFontUsageMain; gFonts[dcfEditor].Usage := rsFontUsageEditor; gFonts[dcfViewer].Usage := rsFontUsageViewer; gFonts[dcfViewerBook].Usage := rsFontUsageViewerBook; gFonts[dcfLog].Usage := rsFontUsageLog; gFonts[dcfConsole].Usage := rsFontUsageConsole; gFonts[dcfPathEdit].Usage := rsFontUsagePathEdit; gFonts[dcfFunctionButtons].Usage := rsFontUsageFunctionButtons; gFonts[dcfSearchResults].Usage := rsFontUsageSearchResults; gFonts[dcfTreeViewMenu].Usage := rsFontUsageTreeViewMenu; gFonts[dcfStatusBar].Usage := rsFontUsageStatusBar; { Behaviours page } Node := Root.FindNode('Behaviours'); if Assigned(Node) then begin gGoToRoot := GetValue(Node, 'GoToRoot', gGoToRoot); gShowCurDirTitleBar := GetValue(Node, 'ShowCurDirTitleBar', gShowCurDirTitleBar); gActiveRight := GetValue(Node, 'ActiveRight', gActiveRight); gRunTermCmd := GetValue(Node, 'JustRunTerminal', RunTermCmd); gRunTermParams := GetValue(Node, 'JustRunTermParams', RunTermParams); gRunInTermCloseCmd := GetValue(Node, 'RunInTerminalCloseCmd', RunInTermCloseCmd); gRunInTermCloseParams := GetValue(Node, 'RunInTerminalCloseParams', RunInTermCloseParams); gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminalStayOpenCmd', RunInTermStayOpenCmd); gRunInTermStayOpenParams := GetValue(Node, 'RunInTerminalStayOpenParams', RunInTermStayOpenParams); gOnlyOneAppInstance := GetValue(Node, 'OnlyOneAppInstance', gOnlyOneAppInstance); gLynxLike := GetValue(Node, 'LynxLike', gLynxLike); if LoadedConfigVersion < 5 then begin if GetValue(Node, 'SortCaseSensitive', False) = False then gSortCaseSensitivity := cstNotSensitive else gSortCaseSensitivity := cstLocale; gSortNatural := GetValue(Node, 'SortNatural', gSortNatural); end; if LoadedConfigVersion < 6 then begin if GetValue(Node, 'ShortFileSizeFormat', True) then gFileSizeFormat := fsfFloat else gFileSizeFormat := fsfByte; end else begin gFileSizeFormat := TFileSizeFormat(GetValue(Node, 'FileSizeFormat', Ord(gFileSizeFormat))); end; if LoadedConfigVersion < 12 then begin gHeaderDigits := GetValue(Node, 'HeaderFooterDigits', gHeaderDigits); gFooterDigits := GetValue(Node, 'HeaderFooterDigits', gFooterDigits); gHeaderSizeFormat := TFileSizeFormat(GetValue(Node,'HeaderFooterSizeFormat', ord(gHeaderSizeFormat))); gFooterSizeFormat := TFileSizeFormat(GetValue(Node,'HeaderFooterSizeFormat', ord(gFooterSizeFormat))); end else begin gHeaderDigits := GetValue(Node, 'HeaderDigits', gHeaderDigits); gFooterDigits := GetValue(Node, 'FooterDigits', gFooterDigits); gHeaderSizeFormat := TFileSizeFormat(GetValue(Node,'HeaderSizeFormat', ord(gHeaderSizeFormat))); gFooterSizeFormat := TFileSizeFormat(GetValue(Node,'FooterSizeFormat', ord(gFooterSizeFormat))); end; gOperationSizeFormat := TFileSizeFormat(GetValue(Node, 'OperationSizeFormat', Ord(gOperationSizeFormat))); gFileSizeDigits := GetValue(Node, 'FileSizeDigits', gFileSizeDigits); gOperationSizeDigits := GetValue(Node, 'OperationSizeDigits', gOperationSizeDigits); gSizeDisplayUnits[fsfPersonalizedByte] := Trim(GetValue(Node, 'PersonalizedByte', gSizeDisplayUnits[fsfPersonalizedByte])); if gSizeDisplayUnits[fsfPersonalizedByte]<>'' then gSizeDisplayUnits[fsfPersonalizedByte] := ' ' + gSizeDisplayUnits[fsfPersonalizedByte]; gSizeDisplayUnits[fsfPersonalizedKilo] := ' ' + Trim(GetValue(Node, 'PersonalizedKilo', gSizeDisplayUnits[fsfPersonalizedKilo])); gSizeDisplayUnits[fsfPersonalizedMega] := ' ' + Trim(GetValue(Node, 'PersonalizedMega', gSizeDisplayUnits[fsfPersonalizedMega])); gSizeDisplayUnits[fsfPersonalizedGiga] := ' ' + Trim(GetValue(Node, 'PersonalizedGiga', gSizeDisplayUnits[fsfPersonalizedGiga])); gSizeDisplayUnits[fsfPersonalizedTera] := ' ' + Trim(GetValue(Node, 'PersonalizedTera', gSizeDisplayUnits[fsfPersonalizedTera])); gConfirmQuit := GetValue(Node, 'ConfirmQuit', gConfirmQuit); gMinimizeToTray := GetValue(Node, 'MinimizeToTray', gMinimizeToTray); gAlwaysShowTrayIcon := GetValue(Node, 'AlwaysShowTrayIcon', gAlwaysShowTrayIcon); gMouseSelectionEnabled := GetAttr(Node, 'Mouse/Selection/Enabled', gMouseSelectionEnabled); gMouseSelectionButton := GetValue(Node, 'Mouse/Selection/Button', gMouseSelectionButton); gMouseSingleClickStart := GetValue(Node, 'Mouse/SingleClickStart', gMouseSingleClickStart); gMouseSelectionIconClick := GetValue(Node, 'Mouse/Selection/IconClick', gMouseSelectionIconClick); gScrollMode := TScrollMode(GetValue(Node, 'Mouse/ScrollMode', Integer(gScrollMode))); gWheelScrollLines:= GetValue(Node, 'Mouse/WheelScrollLines', gWheelScrollLines); gAutoFillColumns := GetValue(Node, 'AutoFillColumns', gAutoFillColumns); gAutoSizeColumn := GetValue(Node, 'AutoSizeColumn', gAutoSizeColumn); gDateTimeFormat := GetValidDateTimeFormat(GetValue(Node, 'DateTimeFormat', gDateTimeFormat), DefaultDateTimeFormat); gColumnsTitleLikeValues := GetValue(Node, 'ColumnsTitleLikeValues', gColumnsTitleLikeValues); gCutTextToColWidth := GetValue(Node, 'CutTextToColumnWidth', gCutTextToColWidth); gExtendCellWidth := GetValue(Node, 'ExtendCellWidth', gExtendCellWidth); gShowSystemFiles := GetValue(Node, 'ShowSystemFiles', gShowSystemFiles); {$IFNDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon gListFilesInThread := GetValue(Node, 'ListFilesInThread', gListFilesInThread); {$ENDIF} gLoadIconsSeparately := GetValue(Node, 'LoadIconsSeparately', gLoadIconsSeparately); gDelayLoadingTabs := GetValue(Node, 'DelayLoadingTabs', gDelayLoadingTabs); gHighlightUpdatedFiles := GetValue(Node, 'HighlightUpdatedFiles', gHighlightUpdatedFiles); gDriveBlackList := GetValue(Node, 'DriveBlackList', gDriveBlackList); gDriveBlackListUnmounted := GetValue(Node, 'DriveBlackListUnmounted', gDriveBlackListUnmounted); if LoadedConfigVersion < 8 then begin gBriefViewFileExtAligned := GetValue(Node, 'BriefViewFileExtAligned', gBriefViewFileExtAligned); end; end; { Tools page } GetExtTool(gConfig.FindNode(Root, 'Tools/Viewer'), gExternalTools[etViewer]); GetExtTool(gConfig.FindNode(Root, 'Tools/Editor'), gExternalTools[etEditor]); GetExtTool(gConfig.FindNode(Root, 'Tools/Differ'), gExternalTools[etDiffer]); { Differ related} Node := Root.FindNode('Tools'); SubNode := FindNode(Node, 'Differ', TRUE); gResultingFramePositionAfterCompare := TResultingFramePositionAfterCompare(GetValue(SubNode, 'FramePosAfterComp', Integer(gResultingFramePositionAfterCompare))); { Fonts page } GetDCFont(gConfig.FindNode(Root, 'Fonts/Main'), gFonts[dcfMain]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Editor'), gFonts[dcfEditor]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Viewer'), gFonts[dcfViewer]); GetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook'), gFonts[dcfViewerBook]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Log'), gFonts[dcfLog]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Console'), gFonts[dcfConsole]); GetDCFont(gConfig.FindNode(Root, 'Fonts/PathEdit'), gFonts[dcfPathEdit]); GetDCFont(gConfig.FindNode(Root, 'Fonts/FunctionButtons'), gFonts[dcfFunctionButtons]); if LoadedConfigVersion >= 11 then GetDCFont(gConfig.FindNode(Root, 'Fonts/SearchResults'), gFonts[dcfSearchResults]); //Let's ignore possible previous setting for this and keep our default. GetDCFont(gConfig.FindNode(Root, 'Fonts/TreeViewMenu'), gFonts[dcfTreeViewMenu]); GetDCFont(gConfig.FindNode(Root, 'Fonts/StatusBar'), gFonts[dcfStatusBar]); { Colors page } Node := Root.FindNode('Colors'); if Assigned(Node) then begin gUseCursorBorder := GetValue(Node, 'UseCursorBorder', gUseCursorBorder); gUseFrameCursor := GetValue(Node, 'UseFrameCursor', gUseFrameCursor); gUseInvertedSelection := GetValue(Node, 'UseInvertedSelection', gUseInvertedSelection); gUseInactiveSelColor := GetValue(Node, 'UseInactiveSelColor', gUseInactiveSelColor); gAllowOverColor := GetValue(Node, 'AllowOverColor', gAllowOverColor); gBorderFrameWidth := GetValue(Node, 'gBorderFrameWidth', gBorderFrameWidth); gInactivePanelBrightness := GetValue(Node, 'InactivePanelBrightness', gInactivePanelBrightness); gIndUseGradient := GetValue(Node, 'FreeSpaceIndicator/UseGradient', gIndUseGradient); end; { ToolTips page } Node := Root.FindNode('ToolTips'); if Assigned(Node) then begin gShowToolTip := GetValue(Node, 'ShowToolTipMode', gShowToolTip); gShowToolTipMode := TToolTipMode(GetValue(Node, 'ActualToolTipMode', Integer(gShowToolTipMode))); gToolTipHideTimeOut := TToolTipHideTimeOut(GetValue(Node, 'ToolTipHideTimeOut', Integer(gToolTipHideTimeOut))); gFileInfoToolTip.Load(gConfig, Node); end; { Layout page } Node := Root.FindNode('Layout'); if Assigned(Node) then begin gMainMenu := GetValue(Node, 'MainMenu', gMainMenu); SubNode := Node.FindNode('ButtonBar'); if Assigned(SubNode) then begin gButtonBar := GetAttr(SubNode, 'Enabled', gButtonBar); gToolBarFlat := GetValue(SubNode, 'FlatIcons', gToolBarFlat); gToolBarButtonSize := GetValue(SubNode, 'ButtonHeight', gToolBarButtonSize); if LoadedConfigVersion <= 1 then gToolBarIconSize := GetValue(SubNode, 'SmallIconSize', gToolBarIconSize) else gToolBarIconSize := GetValue(SubNode, 'IconSize', gToolBarIconSize); gToolBarShowCaptions := GetValue(SubNode, 'ShowCaptions', gToolBarShowCaptions); gToolbarReportErrorWithCommands := GetValue(SubNode,'ReportErrorWithCommands',gToolbarReportErrorWithCommands); gToolbarFilenameStyle := TConfigFilenameStyle(GetValue(SubNode, 'FilenameStyle', ord(gToolbarFilenameStyle))); gToolbarPathToBeRelativeTo := gConfig.GetValue(SubNode, 'PathToBeRelativeTo', gToolbarPathToBeRelativeTo); gToolbarPathModifierElements := tToolbarPathModifierElements(GetValue(SubNode, 'PathModifierElements', Integer(gToolbarPathModifierElements))); end; SubNode := Node.FindNode('MiddleBar'); if Assigned(SubNode) then begin gMiddleToolBar := GetAttr(SubNode, 'Enabled', gMiddleToolBar); gMiddleToolBarFlat := GetValue(SubNode, 'FlatIcons', gMiddleToolBarFlat); gMiddleToolBarButtonSize := GetValue(SubNode, 'ButtonHeight', gMiddleToolBarButtonSize); gMiddleToolBarIconSize := GetValue(SubNode, 'IconSize', gMiddleToolBarIconSize); gMiddleToolBarShowCaptions := GetValue(SubNode, 'ShowCaptions', gMiddleToolBarShowCaptions); gMiddleToolbarReportErrorWithCommands := GetValue(SubNode,'ReportErrorWithCommands', gMiddleToolbarReportErrorWithCommands); end; gDriveBar1 := GetValue(Node, 'DriveBar1', gDriveBar1); gDriveBar2 := GetValue(Node, 'DriveBar2', gDriveBar2); gDriveBarFlat := GetValue(Node, 'DriveBarFlat', gDriveBarFlat); if LoadedConfigVersion < 3 then gDrivesListButton := GetValue(Node, 'DriveMenuButton', gDrivesListButton) else begin SubNode := Node.FindNode('DrivesListButton'); if Assigned(SubNode) then begin gDrivesListButton := GetAttr(SubNode, 'Enabled', gDrivesListButton); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowLabel, 'ShowLabel'); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowFileSystem, 'ShowFileSystem'); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowFreeSpace, 'ShowFreeSpace'); end; end; gSeparateTree := GetValue(Node, 'SeparateTree', gSeparateTree); gDirectoryTabs := GetValue(Node, 'DirectoryTabs', gDirectoryTabs); gCurDir := GetValue(Node, 'CurrentDirectory', gCurDir); gTabHeader := GetValue(Node, 'TabHeader', gTabHeader); gStatusBar := GetValue(Node, 'StatusBar', gStatusBar); gCmdLine := GetValue(Node, 'CmdLine', gCmdLine); gLogWindow := GetValue(Node, 'LogWindow', gLogWindow); gTermWindow := GetValue(Node, 'TermWindow', gTermWindow); gKeyButtons := GetValue(Node, 'KeyButtons', gKeyButtons); gInterfaceFlat := GetValue(Node, 'InterfaceFlat', gInterfaceFlat); gDriveFreeSpace := GetValue(Node, 'DriveFreeSpace', gDriveFreeSpace); gDriveInd := GetValue(Node, 'DriveIndicator', gDriveInd); gProgInMenuBar := GetValue(Node, 'ProgressInMenuBar', gProgInMenuBar); gPanelOfOp := GetValue(Node, 'PanelOfOperationsInBackground', gPanelOfOp); gHorizontalFilePanels := GetValue(Node, 'HorizontalFilePanels', gHorizontalFilePanels); gShortFormatDriveInfo := GetValue(Node, 'ShortFormatDriveInfo', gShortFormatDriveInfo); gUpperCaseDriveLetter := GetValue(Node, 'UppercaseDriveLetter', gUpperCaseDriveLetter); gShowColonAfterDrive := GetValue(Node, 'ShowColonAfterDrive', gShowColonAfterDrive); end; { Files views } Node := Root.FindNode('FilesViews'); if Assigned(Node) then begin SubNode := Node.FindNode('Sorting'); if Assigned(SubNode) then begin gSortCaseSensitivity := TCaseSensitivity(GetValue(SubNode, 'CaseSensitivity', Integer(gSortCaseSensitivity))); gSortNatural := GetValue(SubNode, 'NaturalSorting', gSortNatural); gSortSpecial := GetValue(SubNode, 'SpecialSorting', gSortSpecial); gSortFolderMode:= TSortFolderMode(GetValue(SubNode, 'SortFolderMode', Integer(gSortFolderMode))); gNewFilesPosition := TNewFilesPosition(GetValue(SubNode, 'NewFilesPosition', Integer(gNewFilesPosition))); gUpdatedFilesPosition := TUpdatedFilesPosition(GetValue(SubNode, 'UpdatedFilesPosition', Integer(gUpdatedFilesPosition))); end; SubNode := FindNode(Node, 'ColumnsView'); if Assigned(SubNode) then begin gColumnsLongInStatus := GetValue(SubNode, 'LongInStatus', gColumnsLongInStatus); gColumnsAutoSaveWidth := GetValue(SubNode, 'AutoSaveWidth', gColumnsAutoSaveWidth); gColumnsTitleStyle := TTitleStyle(GetValue(SubNode, 'TitleStyle', Integer(gColumnsTitleStyle))); end; SubNode := Node.FindNode('BriefView'); if Assigned(SubNode) then begin gBriefViewFileExtAligned := GetValue(SubNode, 'FileExtAligned', gBriefViewFileExtAligned); SubNode := SubNode.FindNode('Columns'); if Assigned(SubNode) then begin gBriefViewFixedWidth := GetValue(SubNode, 'FixedWidth', gBriefViewFixedWidth); gBriefViewFixedCount := GetValue(SubNode, 'FixedCount', gBriefViewFixedCount); gBriefViewMode := TBriefViewMode(GetValue(SubNode, 'AutoSize', Integer(gBriefViewMode))); end; end; gExtraLineSpan := GetValue(Node, 'ExtraLineSpan', gExtraLineSpan); gFolderPrefix := GetValue(Node, 'FolderPrefix', gFolderPrefix); gFolderPostfix := GetValue(Node, 'FolderPostfix', gFolderPostfix); gRenameConfirmMouse := GetValue(Node, 'RenameConfirmMouse', gRenameConfirmMouse); end; { Keys page } Node := Root.FindNode('Keyboard'); if Assigned(Node) then begin SubNode := FindNode(Node, 'Typing/Actions'); if Assigned(SubNode) then begin for KeyTypingModifier in TKeyTypingModifier do gKeyTyping[KeyTypingModifier] := TKeyTypingAction(GetValue(SubNode, TKeyTypingModifierToNodeName[KeyTypingModifier], Integer(gKeyTyping[KeyTypingModifier]))); end; end; { File operations page } Node := Root.FindNode('FileOperations'); if Assigned(Node) then begin gCopyBlockSize := GetValue(Node, 'BufferSize', gCopyBlockSize); gLongNameAlert := GetValue(Node, 'LongNameAlert', gLongNameAlert); gHashBlockSize := GetValue(Node, 'HashBufferSize', gHashBlockSize); gUseMmapInSearch := GetValue(Node, 'UseMmapInSearch', gUseMmapInSearch); gPartialNameSearch := GetValue(Node, 'PartialNameSearch', gPartialNameSearch); gInitiallyClearFileMask := GetValue(Node, 'InitiallyClearFileMask', gInitiallyClearFileMask); gNewSearchClearFiltersAction := TFiltersOnNewSearch(GetValue(Node, 'NewSearchClearFiltersAction', integer(gNewSearchClearFiltersAction))); gShowMenuBarInFindFiles := GetValue(Node, 'ShowMenuBarInFindFiles', gShowMenuBarInFindFiles); gWipePassNumber := GetValue(Node, 'WipePassNumber', gWipePassNumber); gDropReadOnlyFlag := GetValue(Node, 'DropReadOnlyFlag', gDropReadOnlyFlag); gProcessComments := GetValue(Node, 'ProcessComments', gProcessComments); gRenameSelOnlyName := GetValue(Node, 'RenameSelOnlyName', gRenameSelOnlyName); gShowCopyTabSelectPanel := GetValue(Node, 'ShowCopyTabSelectPanel', gShowCopyTabSelectPanel); gUseTrash := GetValue(Node, 'UseTrash', gUseTrash); gSkipFileOpError := GetValue(Node, 'SkipFileOpError', gSkipFileOpError); gTypeOfDuplicatedRename := tDuplicatedRename(GetValue(Node, 'TypeOfDuplicatedRename', Integer(gTypeOfDuplicatedRename))); gDefaultDropEffect := GetValue(Node, 'DefaultDropEffect', gDefaultDropEffect); gShowDialogOnDragDrop := GetValue(Node, 'ShowDialogOnDragDrop', gShowDialogOnDragDrop); gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel := GetValue(Node, 'DragAndDropTextRichtextDesireLevel', gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel := GetValue(Node, 'DragAndDropTextHtmlDesireLevel',gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel := GetValue(Node, 'DragAndDropTextUnicodeDesireLevel',gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel := GetValue(Node, 'DragAndDropTextSimpletextDesireLevel',gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel); gDragAndDropAskFormatEachTime := GetValue(Node,'DragAndDropAskFormatEachTime', gDragAndDropAskFormatEachTime); gDragAndDropTextAutoFilename := GetValue(Node, 'DragAndDropTextAutoFilename', gDragAndDropTextAutoFilename); gDragAndDropSaveUnicodeTextInUFT8 := GetValue(Node, 'DragAndDropSaveUnicodeTextInUFT8', gDragAndDropSaveUnicodeTextInUFT8); gNtfsHourTimeDelay := GetValue(Node, 'NtfsHourTimeDelay', gNtfsHourTimeDelay); gAutoExtractOpenMask := GetValue(Node, 'AutoExtractOpenMask', gAutoExtractOpenMask); gSearchDefaultTemplate := GetValue(Node, 'SearchDefaultTemplate', gSearchDefaultTemplate); gFileOperationsProgressKind := TFileOperationsProgressKind(GetValue(Node, 'ProgressKind', Integer(gFileOperationsProgressKind))); gFileOperationsConfirmations := TFileOperationsConfirmations(GetValue(Node, 'Confirmations', Integer(gFileOperationsConfirmations))); // Operations sounds SubNode := Node.FindNode('Sounds'); if Assigned(SubNode) then begin gFileOperationDuration:= GetAttr(SubNode, 'Duration', gFileOperationDuration); gFileOperationsSounds[fsoCopy]:= ReplaceEnvVars(GetValue(SubNode, 'Copy', EmptyStr)); gFileOperationsSounds[fsoMove]:= ReplaceEnvVars(GetValue(SubNode, 'Move', EmptyStr)); gFileOperationsSounds[fsoWipe]:= ReplaceEnvVars(GetValue(SubNode, 'Wipe', EmptyStr)); gFileOperationsSounds[fsoDelete]:= ReplaceEnvVars(GetValue(SubNode, 'Delete', EmptyStr)); gFileOperationsSounds[fsoSplit]:= ReplaceEnvVars(GetValue(SubNode, 'Split', EmptyStr)); gFileOperationsSounds[fsoCombine]:= ReplaceEnvVars(GetValue(SubNode, 'Combine', EmptyStr)); end; // Operations options SubNode := Node.FindNode('Options'); if Assigned(SubNode) then begin gOperationOptionSymLinks := TFileSourceOperationOptionSymLink(GetValue(SubNode, 'Symlink', Integer(gOperationOptionSymLinks))); gOperationOptionCorrectLinks := GetValue(SubNode, 'CorrectLinks', gOperationOptionCorrectLinks); gOperationOptionCopyOnWrite := TFileSourceOperationOptionGeneral(GetValue(SubNode, 'CopyOnWrite', Integer(gOperationOptionCopyOnWrite))); gOperationOptionFileExists := TFileSourceOperationOptionFileExists(GetValue(SubNode, 'FileExists', Integer(gOperationOptionFileExists))); gOperationOptionDirectoryExists := TFileSourceOperationOptionDirectoryExists(GetValue(SubNode, 'DirectoryExists', Integer(gOperationOptionDirectoryExists))); gOperationOptionSetPropertyError := TFileSourceOperationOptionSetPropertyError(GetValue(SubNode, 'SetPropertyError', Integer(gOperationOptionSetPropertyError))); gOperationOptionReserveSpace := GetValue(SubNode, 'ReserveSpace', gOperationOptionReserveSpace); gOperationOptionCheckFreeSpace := GetValue(SubNode, 'CheckFreeSpace', gOperationOptionCheckFreeSpace); gOperationOptionCopyAttributes := GetValue(SubNode, 'CopyAttributes', gOperationOptionCopyAttributes); gOperationOptionCopyXattributes := GetValue(SubNode, 'CopyXattributes', gOperationOptionCopyXattributes); gOperationOptionVerify := GetValue(SubNode, 'Verify', gOperationOptionVerify); gOperationOptionCopyTime := GetValue(SubNode, 'CopyTime', gOperationOptionCopyTime); gOperationOptionCopyOwnership := GetValue(SubNode, 'CopyOwnership', gOperationOptionCopyOwnership); gOperationOptionCopyPermissions := GetValue(SubNode, 'CopyPermissions', gOperationOptionCopyPermissions); gOperationOptionExcludeEmptyDirectories := GetValue(SubNode, 'ExcludeEmptyTemplateDirectories', gOperationOptionExcludeEmptyDirectories); end; // Extract SubNode := Node.FindNode('Extract'); if Assigned(SubNode) then begin gExtractOverwrite := GetValue(SubNode, 'Overwrite', gExtractOverwrite); end; // Multi-Rename SubNode := Node.FindNode('MultiRename'); if Assigned(SubNode) then begin gMulRenShowMenuBarOnTop := GetValue(SubNode, 'MulRenShowMenuBarOnTop', gMulRenShowMenuBarOnTop); gMulRenInvalidCharReplacement := GetValue(SubNode, 'MulRenInvalidCharReplacement', gMulRenInvalidCharReplacement); gMulRenLaunchBehavior := TMulRenLaunchBehavior(GetValue(SubNode, 'MulRenLaunchBehavor', Integer(gMulRenLaunchBehavior))); gMulRenExitModifiedPreset := TMulRenExitModifiedPreset(GetValue(SubNode, 'MulRenExitModifiedPreset', Integer(gMulRenExitModifiedPreset))); gMulRenSaveRenamingLog := TMulRenSaveRenamingLog(GetValue(SubNode, 'MulRenSaveRenamingLog', Integer(gMulRenSaveRenamingLog))); gMulRenLogFilename := GetValue(SubNode, 'MulRenLogFilename', gMulRenLogFilename); gMultRenDailyIndividualDirLog := GetValue(SubNode, 'MultRenDailyIndividualDirLog', gMultRenDailyIndividualDirLog); gMulRenFilenameWithFullPathInLog := GetValue(SubNode, 'MulRenFilenameWithFullPathInLog', gMulRenFilenameWithFullPathInLog); gMulRenPathRangeSeparator := GetValue(SubNode, 'MulRenPathRangeSeparator', gMulRenPathRangeSeparator); end; end; { Tabs page } Node := Root.FindNode('Tabs'); if Assigned(Node) then begin // Loading tabs relating option respecting legacy order of options setting and wanted default values. // The default action on double click is to close tab simply to respect legacy of what it was doing hardcoded before. gDirTabOptions := TTabsOptions(GetValue(Node, 'Options', Integer(gDirTabOptions))); if LoadedConfigVersion<9 then begin gDirTabOptions := gDirTabOptions + [tb_close_on_doubleclick , tb_reusing_tab_when_possible, tb_confirm_close_locked_tab]; //The "tb_close_on_doubleclick" is useless but anyway... :-) gDirTabActionOnDoubleClick:=tadc_CloseTab; end; gDirTabLimit := GetValue(Node, 'CharacterLimit', gDirTabLimit); gDirTabPosition := TTabsPosition(GetValue(Node, 'Position', Integer(gDirTabPosition))); gDirTabActionOnDoubleClick := TTabsOptionsDoubleClick(GetValue(Node, 'ActionOnDoubleClick', Integer(tadc_CloseTab))); end; { Log page } Node := Root.FindNode('Log'); if Assigned(Node) then begin gLogFile := GetAttr(Node, 'Enabled', gLogFile); gLogFileCount := GetAttr(Node, 'Count', gLogFileCount); gLogFileWithDateInName := GetAttr(Node, 'LogFileWithDateInName', gLogFileWithDateInName); gLogFileName := GetValue(Node, 'FileName', gLogFileName); gLogOptions := TLogOptions(GetValue(Node, 'Options', Integer(gLogOptions))); end; { Configuration page } gSaveConfiguration := GetAttr(Root, 'Configuration/Save', gSaveConfiguration); gSaveWindowState := GetAttr(Root, 'MainWindow/Position/Save', gSaveWindowState); gSaveFolderTabs := GetAttr(Root, 'Configuration/FolderTabs/Save', gSaveFolderTabs); gSaveSearchReplaceHistory:= GetAttr(Root, 'History/SearchReplaceHistory/Save', gSaveSearchReplaceHistory); gSaveDirHistory := GetAttr(Root, 'History/DirHistory/Save', gSaveDirHistory); gDirHistoryCount := GetAttr(Root, 'History/DirHistory/Count', gDirHistoryCount); gSaveCmdLineHistory := GetAttr(Root, 'History/CmdLineHistory/Save', gSaveCmdLineHistory); gSaveFileMaskHistory := GetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); gSaveVolumeSizeHistory := GetAttr(Root, 'History/VolumeSizeHistory/Save', gSaveVolumeSizeHistory); gSaveCreateDirectoriesHistory := GetAttr(Root, 'History/CreateDirectoriesHistory/Save', gSaveCreateDirectoriesHistory); gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(GetAttr(Root, 'Configuration/SortOrder', Integer(scoAlphabeticalButLanguage))); gCollapseConfigurationOptionsTree := TConfigurationTreeState(GetAttr(Root, 'Configuration/TreeType', Integer(ctsFullExpand))); { Quick Search/Filter page } Node := Root.FindNode('QuickSearch'); if Assigned(Node) then begin if LoadedConfigVersion < 4 then begin oldQuickSearch := GetAttr(Node, 'Enabled', oldQuickSearch); oldQuickSearchMode := TShiftState(GetValue(Node, 'Mode', Integer(oldQuickSearchMode))); OldKeysToNew(oldQuickSearch, oldQuickSearchMode, ktaQuickSearch); end; if GetValue(Node, 'MatchBeginning', qsmBeginning in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmBeginning) else Exclude(gQuickSearchOptions.Match, qsmBeginning); if GetValue(Node, 'MatchEnding', qsmEnding in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmEnding) else Exclude(gQuickSearchOptions.Match, qsmEnding); gQuickSearchOptions.SearchCase := TQuickSearchCase(GetValue(Node, 'Case', Integer(gQuickSearchOptions.SearchCase))); gQuickSearchOptions.Items := TQuickSearchItems(GetValue(Node, 'Items', Integer(gQuickSearchOptions.Items))); end; Node := Root.FindNode('QuickFilter'); if Assigned(Node) then begin if LoadedConfigVersion < 4 then begin oldQuickFilter := GetAttr(Node, 'Enabled', oldQuickFilter); oldQuickFilterMode := TShiftState(GetValue(Node, 'Mode', Integer(oldQuickFilterMode))); OldKeysToNew(oldQuickFilter, oldQuickFilterMode, ktaQuickFilter); end; gQuickFilterAutoHide := GetValue(Node, 'AutoHide', gQuickFilterAutoHide); gQuickFilterSaveSessionModifications := GetValue(Node, 'SaveSessionModifications', gQuickFilterSaveSessionModifications); end; { Miscellaneous page } Node := Root.FindNode('Miscellaneous'); if Assigned(Node) then begin gGridVertLine := GetValue(Node, 'GridVertLine', gGridVertLine); gGridHorzLine := GetValue(Node, 'GridHorzLine', gGridHorzLine); gShowWarningMessages := GetValue(Node, 'ShowWarningMessages', gShowWarningMessages); gSpaceMovesDown := GetValue(Node, 'SpaceMovesDown', gSpaceMovesDown); gDirBrackets := GetValue(Node, 'DirBrackets', gDirBrackets); gInplaceRename := GetValue(Node, 'InplaceRename', gInplaceRename); gInplaceRenameButton := GetValue(Node, 'InplaceRenameButton', gInplaceRenameButton); gDblClickToParent := GetValue(Node, 'DblClickToParent', gDblClickToParent); gDblClickEditPath := GetValue(Node, 'DoubleClickEditPath', gDblClickEditPath); gHotDirAddTargetOrNot:=GetValue(Node, 'HotDirAddTargetOrNot', gHotDirAddTargetOrNot); gHotDirFullExpandOrNot:=GetValue(Node, 'HotDirFullExpandOrNot', gHotDirFullExpandOrNot); gShowPathInPopup:=GetValue(Node, 'ShowPathInPopup', gShowPathInPopup); gShowOnlyValidEnv:=GetValue(Node, 'ShowOnlyValidEnv', gShowOnlyValidEnv); gWhereToAddNewHotDir:=TPositionWhereToAddHotDir(GetValue(Node, 'WhereToAddNewHotDir', Integer(gWhereToAddNewHotDir))); gHotDirFilenameStyle := TConfigFilenameStyle(GetValue(Node, 'FilenameStyle', ord(gHotDirFilenameStyle))); gHotDirPathToBeRelativeTo := gConfig.GetValue(Node, 'PathToBeRelativeTo', gHotDirPathToBeRelativeTo); gHotDirPathModifierElements := tHotDirPathModifierElements(GetValue(Node, 'PathModifierElements', Integer(gHotDirPathModifierElements))); gDefaultTextEncoding := NormalizeEncoding(GetValue(Node, 'DefaultTextEncoding', gDefaultTextEncoding)); {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} gSystemItemProperties := GetValue(Node, 'SystemItemProperties', gSystemItemProperties); {$ENDIF} DecimalSeparator:= GetValue(Node, 'DecimalSeparator', FormatSettings.DecimalSeparator); if (Length(DecimalSeparator) > 0) and (Ord(DecimalSeparator[1]) < $80) and (DecimalSeparator[1] <> FormatSettings.DecimalSeparator) then begin CustomDecimalSeparator:= DecimalSeparator; FormatSettings.DecimalSeparator:= CustomDecimalSeparator[1]; end; end; { Thumbnails } Node := Root.FindNode('Thumbnails'); if Assigned(Node) then begin gThumbSave := GetAttr(Node, 'Save', gThumbSave); gThumbSize.cx := GetValue(Node, 'Width', gThumbSize.cx); gThumbSize.cy := GetValue(Node, 'Height', gThumbSize.cy); end; { Description } Node := Root.FindNode('Description'); if Assigned(Node) then begin gDescCreateUnicode := GetValue(Node, 'CreateNewUnicode', gDescCreateUnicode); gDescReadEncoding := TMacroEncoding(GetValue(Node, 'DefaultEncoding', Integer(gDescReadEncoding))); gDescWriteEncoding := TMacroEncoding(GetValue(Node, 'CreateNewEncoding', Integer(gDescWriteEncoding))); end; { Auto refresh page } Node := Root.FindNode('AutoRefresh'); if Assigned(Node) then begin gWatchDirs := TWatchOptions(GetValue(Node, 'Options', Integer(gWatchDirs))); gWatchDirsExclude := GetValue(Node, 'ExcludeDirs', gWatchDirsExclude); gWatcherMode := TWatcherMode(GetValue(Node, 'Mode', Integer(gWatcherMode))); end; { Icons page } Node := Root.FindNode('Icons'); if Assigned(Node) then begin gIconTheme := GetValue(Node, 'Theme', gIconTheme); gShowHiddenDimmed := GetValue(Node, 'ShowHiddenDimmed', gShowHiddenDimmed); gShowIcons := TShowIconsMode(GetValue(Node, 'ShowMode', Integer(gShowIcons))); gIconOverlays := GetValue(Node, 'ShowOverlays', gIconOverlays); gIconsSize := GetValue(Node, 'Size', gIconsSize); gDiskIconsSize := GetValue(Node, 'DiskSize', gDiskIconsSize); gDiskIconsAlpha := GetValue(Node, 'DiskAlpha', gDiskIconsAlpha); gToolIconsSize := GetValue(Node, 'ToolSize', gToolIconsSize); gIconsExclude := GetValue(Node, 'Exclude', gIconsExclude); gIconsExcludeDirs := GetValue(Node, 'ExcludeDirs', gIconsExcludeDirs); gPixelsPerInch := GetValue(Node, 'PixelsPerInch', gPixelsPerInch); if LoadedConfigVersion < 10 then begin if GetValue(Node, 'CustomDriveIcons', False) then gCustomIcons += [cimDrive]; DeleteNode(Node, 'CustomDriveIcons'); end; gCustomIcons := TCustomIconsMode(GetValue(Node, 'CustomIcons', Integer(gCustomIcons))); gIconsInMenus := GetAttr(Node, 'ShowInMenus/Enabled', gIconsInMenus); gIconsInMenusSize := GetValue(Node, 'ShowInMenus/Size', gIconsInMenusSize); Application.ShowButtonGlyphs := TApplicationShowGlyphs(GetValue(Node, 'ShowButtonGlyphs', Integer(Application.ShowButtonGlyphs))); end; { Ignore list page } Node := Root.FindNode('IgnoreList'); if Assigned(Node) then begin gIgnoreListFileEnabled:= GetAttr(Node, 'Enabled', gIgnoreListFileEnabled); gIgnoreListFile:= GetValue(Node, 'IgnoreListFile', gIgnoreListFile); end; { Directories HotList } gDirectoryHotlist.LoadFromXML(gConfig, Root); { Viewer } Node := Root.FindNode('Viewer'); if Assigned(Node) then begin gImageStretch := GetValue(Node, 'ImageStretch', gImageStretch); gImageExifRotate := GetValue(Node, 'ImageExifRotate', gImageExifRotate); gImageStretchOnlyLarge := GetValue(Node, 'ImageStretchLargeOnly', gImageStretchOnlyLarge); gImageShowTransparency := GetValue(Node, 'ImageShowTransparency', gImageShowTransparency); gImageCenter := GetValue(Node, 'ImageCenter', gImageCenter); gPreviewVisible := GetValue(Node, 'PreviewVisible', gPreviewVisible); gCopyMovePath1 := GetValue(Node, 'CopyMovePath1', gCopyMovePath1); gCopyMovePath2 := GetValue(Node, 'CopyMovePath2', gCopyMovePath2); gCopyMovePath3 := GetValue(Node, 'CopyMovePath3', gCopyMovePath3); gCopyMovePath4 := GetValue(Node, 'CopyMovePath4', gCopyMovePath4); gCopyMovePath5 := GetValue(Node, 'CopyMovePath5', gCopyMovePath5); gImagePaintMode := TViewerPaintTool(GetValue(Node, 'PaintMode', Integer(gImagePaintMode))); gImagePaintWidth := GetValue(Node, 'PaintWidth', gImagePaintWidth); gColCount := GetValue(Node, 'NumberOfColumns', gColCount); gTabSpaces := GetValue(Node, 'TabSpaces', gTabSpaces); gMaxTextWidth := GetValue(Node, 'MaxTextWidth', gMaxTextWidth); gMaxCodeSize := GetValue(Node, 'MaxCodeSize', gMaxCodeSize); gViewerMode := GetValue(Node, 'ViewerMode' , gViewerMode); gPrintMargins := GetValue(Node, 'PrintMargins' , gPrintMargins); gShowCaret := GetValue(Node, 'ShowCaret' , gShowCaret); gViewerWrapText := GetValue(Node, 'WrapText', gViewerWrapText); gViewerLeftMargin := GetValue(Node, 'LeftMargin' , gViewerLeftMargin); gViewerLineSpacing := GetValue(Node, 'ExtraLineSpan' , gViewerLineSpacing); gImagePaintColor := GetValue(Node, 'PaintColor', gImagePaintColor); gTextPosition := GetValue(Node, 'TextPosition', gTextPosition); gViewerAutoCopy := GetValue(Node, 'AutoCopy', gViewerAutoCopy); gViewerSynEditMask := GetValue(Node, 'SynEditMask', gViewerSynEditMask); gViewerJpegQuality := GetValue(Node, 'JpegQuality', gViewerJpegQuality); if LoadedConfigVersion < 7 then begin gThumbSave := GetValue(Node, 'SaveThumbnails', gThumbSave); end; end; { Editor } Node := Root.FindNode('Editor'); if Assigned(Node) then begin gEditWaitTime := GetValue(Node, 'EditWaitTime', gEditWaitTime); gEditorSynEditOptions := TSynEditorOptions(GetValue(Node, 'SynEditOptions', Integer(gEditorSynEditOptions))); gEditorSynEditTabWidth := GetValue(Node, 'SynEditTabWidth', gEditorSynEditTabWidth); gEditorSynEditRightEdge := GetValue(Node, 'SynEditRightEdge', gEditorSynEditRightEdge); gEditorSynEditBlockIndent := GetValue(Node, 'SynEditBlockIndent', gEditorSynEditBlockIndent); gEditorFindWordAtCursor := GetValue(Node, 'FindWordAtCursor', gEditorFindWordAtCursor); end; { Differ } Node := Root.FindNode('Differ'); if Assigned(Node) then begin gDifferIgnoreCase := GetValue(Node, 'IgnoreCase', gDifferIgnoreCase); gDifferAutoCompare := GetValue(Node, 'AutoCompare', gDifferAutoCompare); gDifferKeepScrolling := GetValue(Node, 'KeepScrolling', gDifferKeepScrolling); gDifferPaintBackground := GetValue(Node, 'PaintBackground', gDifferPaintBackground); gDifferLineDifferences := GetValue(Node, 'LineDifferences', gDifferLineDifferences); gDifferIgnoreWhiteSpace := GetValue(Node, 'IgnoreWhiteSpace', gDifferIgnoreWhiteSpace); end; { SyncDirs } Node := Root.FindNode('SyncDirs'); if Assigned(Node) then begin gSyncDirsSubdirs := GetValue(Node, 'Subdirs', gSyncDirsSubdirs); gSyncDirsByContent := GetValue(Node, 'ByContent', gSyncDirsByContent); gSyncDirsAsymmetric := GetValue(Node, 'Asymmetric', gSyncDirsAsymmetric); gSyncDirsAsymmetricSave := GetAttr(Node, 'Asymmetric/Save', gSyncDirsAsymmetricSave); gSyncDirsIgnoreDate := GetValue(Node, 'IgnoreDate', gSyncDirsIgnoreDate); gSyncDirsShowFilterCopyRight := GetValue(Node, 'FilterCopyRight', gSyncDirsShowFilterCopyRight); gSyncDirsShowFilterEqual := GetValue(Node, 'FilterEqual', gSyncDirsShowFilterEqual); gSyncDirsShowFilterNotEqual := GetValue(Node, 'FilterNotEqual', gSyncDirsShowFilterNotEqual); gSyncDirsShowFilterUnknown := GetValue(Node, 'FilterUnknown', gSyncDirsShowFilterUnknown); gSyncDirsShowFilterCopyLeft := GetValue(Node, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); gSyncDirsShowFilterDuplicates := GetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); gSyncDirsShowFilterSingles := GetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); gSyncDirsFileMask := GetValue(Node, 'FileMask', gSyncDirsFileMask); gSyncDirsFileMaskSave := GetAttr(Node, 'FileMask/Save', gSyncDirsFileMaskSave); gDateTimeFormatSync := GetValidDateTimeFormat(GetValue(Node, 'DateTimeFormat', gDateTimeFormatSync), DefaultDateTimeFormatSync); end; { Internal Associations} Node := Root.FindNode('InternalAssociations'); if Assigned(Node) then begin gOfferToAddToFileAssociations := GetValue(Node, 'OfferToAddNewFileType', gOfferToAddToFileAssociations); gFileAssociationLastCustomAction := GetValue(Node, 'LastCustomAction', gFileAssociationLastCustomAction); gExtendedContextMenu := GetValue(Node, 'ExpandedContextMenu', gExtendedContextMenu); gDefaultContextActions := GetValue(Node,'DefaultContextActions', gDefaultContextActions); gOpenExecuteViaShell := GetValue(Node,'ExecuteViaShell', gOpenExecuteViaShell); gExecuteViaTerminalClose := GetValue(Node,'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); gExecuteViaTerminalStayOpen := GetValue(Node,'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); gIncludeFileAssociation := GetValue(Node,'IncludeFileAssociation',gIncludeFileAssociation); gFileAssocFilenameStyle := TConfigFilenameStyle(GetValue(Node, 'FilenameStyle', ord(gFileAssocFilenameStyle))); gFileAssocPathToBeRelativeTo := GetValue(Node, 'PathToBeRelativeTo', gFileAssocPathToBeRelativeTo); gFileAssocPathModifierElements := tFileAssocPathModifierElements(GetValue(Node, 'PathModifierElements', Integer(gFileAssocPathModifierElements))); end; { Tree View Menu } Node := Root.FindNode('TreeViewMenu'); if Assigned(Node) then begin gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand := GetValue(Node, 'UseTVMDirectoryHotlistFMC', gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand); gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick := GetValue(Node, 'UseTVMDirectoryHotlistFDC', gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick); gUseTreeViewMenuWithFavoriteTabsFromMenuCommand := GetValue(Node, 'UseTVMFavoriteTabsFMC', gUseTreeViewMenuWithFavoriteTabsFromMenuCommand); gUseTreeViewMenuWithFavoriteTabsFromDoubleClick := GetValue(Node, 'UseTVMFavoriteTabsFDC', gUseTreeViewMenuWithFavoriteTabsFromDoubleClick); gUseTreeViewMenuWithDirHistory := GetValue(Node, 'UseTVMDirHistory', gUseTreeViewMenuWithDirHistory); gUseTreeViewMenuWithViewHistory := GetValue(Node, 'UseTVMViewHistory', gUseTreeViewMenuWithViewHistory); gUseTreeViewMenuWithCommandLineHistory := GetValue(Node, 'UseTVMCommandLineHistory', gUseTreeViewMenuWithCommandLineHistory); gTreeViewMenuShortcutExit := GetValue(Node, 'TreeViewMenuShortcutExit', gTreeViewMenuShortcutExit); gTreeViewMenuSingleClickExit := GetValue(Node, 'TreeViewMenuSingleClickExit', gTreeViewMenuSingleClickExit); gTreeViewMenuDoubleClickExit := GetValue(Node, 'TreeViewMenuDoubleClickExit', gTreeViewMenuDoubleClickExit); for iIndexContextMode:=0 to (ord(tvmcLASTONE)-2) do begin SubNode := Node.FindNode(Format('Context%.2d',[iIndexContextMode])); gTreeViewMenuOptions[iIndexContextMode].CaseSensitive := GetValue(SubNode, 'CaseSensitive', gTreeViewMenuOptions[iIndexContextMode].CaseSensitive); gTreeViewMenuOptions[iIndexContextMode].IgnoreAccents := GetValue(SubNode, 'IgnoreAccents', gTreeViewMenuOptions[iIndexContextMode].IgnoreAccents); gTreeViewMenuOptions[iIndexContextMode].ShowWholeBranchIfMatch := GetValue(SubNode, 'ShowWholeBranchIfMatch', gTreeViewMenuOptions[iIndexContextMode].ShowWholeBranchIfMatch); end; gTreeViewMenuUseKeyboardShortcut := GetValue(Node, 'TreeViewMenuUseKeyboardShortcut', gTreeViewMenuUseKeyboardShortcut); end; { Favorite Tabs } Node := Root.FindNode('FavoriteTabsOptions'); if Assigned(Node) then begin gFavoriteTabsUseRestoreExtraOptions := GetValue(Node, 'FavoriteTabsUseRestoreExtraOptions', gFavoriteTabsUseRestoreExtraOptions); gWhereToAddNewFavoriteTabs := TPositionWhereToAddFavoriteTabs(GetValue(Node, 'WhereToAdd', Integer(gWhereToAddNewFavoriteTabs))); gFavoriteTabsFullExpandOrNot := GetValue(Node, 'Expand', gFavoriteTabsFullExpandOrNot); gFavoriteTabsGoToConfigAfterSave := GetValue(Node, 'GotoConfigAftSav', gFavoriteTabsGoToConfigAfterSave); gFavoriteTabsGoToConfigAfterReSave := GetValue(Node, 'GotoConfigAftReSav', gFavoriteTabsGoToConfigAfterReSave); gDefaultTargetPanelLeftSaved := TTabsConfigLocation(GetValue(Node, 'DfltLeftGoTo', Integer(gDefaultTargetPanelLeftSaved))); gDefaultTargetPanelRightSaved := TTabsConfigLocation(GetValue(Node, 'DfltRightGoTo', Integer(gDefaultTargetPanelRightSaved))); gDefaultExistingTabsToKeep := TTabsConfigLocation(GetValue(Node, 'DfltKeep', Integer(gDefaultExistingTabsToKeep))); gFavoriteTabsSaveDirHistory := GetValue(Node, 'DfltSaveDirHistory', gFavoriteTabsSaveDirHistory); gFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := StringToGUID(GetValue(Node,'FavTabsLastUniqueID',GUIDtoString(DCGetNewGUID))); end; { - Other - } gLuaLib := GetValue(Root, 'Lua/PathToLibrary', gLuaLib); gNameSCFile:= GetValue(Root, 'NameShortcutFile', gNameSCFile); gHotKeySortOrder := THotKeySortOrder(GetValue(Root, 'HotKeySortOrder', Integer(hksoByCommand))); gUseEnterToCloseHotKeyEditor := GetValue(Root,'UseEnterToCloseHotKeyEditor',gUseEnterToCloseHotKeyEditor); gLastUsedPacker:= GetValue(Root, 'LastUsedPacker', gLastUsedPacker); gLastDoAnyCommand:=GetValue(Root, 'LastDoAnyCommand', gLastDoAnyCommand); gbMarkMaskCaseSensitive := GetValue(Root, 'MarkMaskCaseSensitive', gbMarkMaskCaseSensitive); gbMarkMaskIgnoreAccents := GetValue(Root, 'MarkMaskIgnoreAccents', gbMarkMaskIgnoreAccents); gMarkMaskFilterWindows := GetValue(Root, 'MarkMaskFilterWindows', gMarkMaskFilterWindows); gMarkShowWantedAttribute := GetValue(Root, 'MarkShowWantedAttribute', gMarkShowWantedAttribute); gMarkDefaultWantedAttribute := GetValue(Root, 'MarkDefaultWantedAttribute', gMarkDefaultWantedAttribute); gMarkLastWantedAttribute := GetValue(Root, 'MarkLastWantedAttribute', gMarkLastWantedAttribute); { TotalCommander Import/Export } {$IFDEF MSWINDOWS} Node := Root.FindNode('TCSection'); if Assigned(Node) then begin gTotalCommanderExecutableFilename := GetValue(Node, 'TCExecutableFilename', gTotalCommanderExecutableFilename); gTotalCommanderConfigFilename := GetValue(Node, 'TCConfigFilename', gTotalCommanderConfigFilename); gTotalCommanderToolbarPath:=GetValue(Node,'TCToolbarPath',gTotalCommanderToolbarPath); end; {$ENDIF} end; { Search template list } gSearchTemplateList.LoadFromXml(gConfig, Root); { File type colors, load after search templates } Node := Root.FindNode('Colors'); if Assigned(Node) then begin gColorExt.Load(gConfig, Node); end; { Columns sets } ColSet.Load(gConfig, Root); { Plugins } Node := gConfig.FindNode(Root, 'Plugins'); if Assigned(Node) then begin gDSXPlugins.Load(gConfig, Node); gWCXPlugins.Load(gConfig, Node); gWDXPlugins.Load(gConfig, Node); gWFXPlugins.Load(gConfig, Node); gWLXPlugins.Load(gConfig, Node); for iIndexContextMode:=ord(ptDSX) to ord(ptWLX) do begin gTweakPluginWidth[iIndexContextMode]:=gConfig.GetValue(Node, Format('TweakPluginWidth%d',[iIndexContextMode]), 0); gTweakPluginHeight[iIndexContextMode]:=gConfig.GetValue(Node, Format('TweakPluginHeight%d',[iIndexContextMode]), 0); end; gPluginFilenameStyle := TConfigFilenameStyle(gConfig.GetValue(Node, 'PluginFilenameStyle', ord(gPluginFilenameStyle))); gPluginPathToBeRelativeTo := gConfig.GetValue(Node, 'PluginPathToBeRelativeTo', gPluginPathToBeRelativeTo); gPluginInAutoTweak := gConfig.GetValue(Node, 'AutoTweak', gPluginInAutoTweak); gWCXConfigViewMode := TWcxCfgViewMode(gConfig.GetValue(Node, 'WCXConfigViewMode', Integer(gWCXConfigViewMode))); end; gWDXPlugins.Add(TExifWdx.Create); { Load content plugins used in search templates } LoadContentPlugins; end; procedure SaveXmlConfig; procedure SetExtTool(Node: TXmlNode; const ExternalToolOptions: TExternalToolOptions); begin if Assigned(Node) then with ExternalToolOptions do begin gConfig.SetAttr(Node, 'Enabled', Enabled); gConfig.SetValue(Node, 'Path', Path); gConfig.SetValue(Node, 'Parameters', Parameters); gConfig.SetValue(Node, 'RunInTerminal', RunInTerminal); gConfig.SetValue(Node, 'KeepTerminalOpen', KeepTerminalOpen); end; end; procedure SetDCFont(Node: TXmlNode; const FontOptions: TDCFontOptions); begin if Assigned(Node) then gConfig.SetFont(Node, '', FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality)); end; var Root, Node, SubNode: TXmlNode; KeyTypingModifier: TKeyTypingModifier; iIndexContextMode: integer; begin with gConfig do begin Root := gConfig.RootNode; SetAttr(Root, 'DCVersion', dcVersion); SetAttr(Root, 'ConfigVersion', ConfigVersion); { Language page } SetValue(Root, 'Language/POFileName', gPOFileName); { Behaviours page } Node := FindNode(Root, 'Behaviours', True); ClearNode(Node); SetValue(Node, 'GoToRoot', gGoToRoot); SetValue(Node, 'ShowCurDirTitleBar', gShowCurDirTitleBar); SetValue(Node, 'ActiveRight', gActiveRight); SetValue(Node, 'RunInTerminalStayOpenCmd', gRunInTermStayOpenCmd); SetValue(Node, 'RunInTerminalStayOpenParams', gRunInTermStayOpenParams); SetValue(Node, 'RunInTerminalCloseCmd', gRunInTermCloseCmd); SetValue(Node, 'RunInTerminalCloseParams', gRunInTermCloseParams); SetValue(Node, 'JustRunTerminal', gRunTermCmd); SetValue(Node, 'JustRunTermParams', gRunTermParams); SetValue(Node, 'OnlyOneAppInstance', gOnlyOneAppInstance); SetValue(Node, 'LynxLike', gLynxLike); SetValue(Node, 'FileSizeFormat', Ord(gFileSizeFormat)); SetValue(Node, 'OperationSizeFormat', Ord(gOperationSizeFormat)); SetValue(Node, 'HeaderSizeFormat', Ord(gHeaderSizeFormat)); SetValue(Node, 'FooterSizeFormat', Ord(gFooterSizeFormat)); SetValue(Node, 'FileSizeDigits', gFileSizeDigits); SetValue(Node, 'HeaderDigits', gHeaderDigits); SetValue(Node, 'FooterDigits', gFooterDigits); SetValue(Node, 'OperationSizeDigits', gOperationSizeDigits); SetValue(Node, 'PersonalizedByte', Trim(gSizeDisplayUnits[fsfPersonalizedByte])); SetValue(Node, 'PersonalizedKilo', Trim(gSizeDisplayUnits[fsfPersonalizedKilo])); SetValue(Node, 'PersonalizedMega', Trim(gSizeDisplayUnits[fsfPersonalizedMega])); SetValue(Node, 'PersonalizedGiga', Trim(gSizeDisplayUnits[fsfPersonalizedGiga])); SetValue(Node, 'PersonalizedTera', Trim(gSizeDisplayUnits[fsfPersonalizedTera])); SetValue(Node, 'ConfirmQuit', gConfirmQuit); SetValue(Node, 'MinimizeToTray', gMinimizeToTray); SetValue(Node, 'AlwaysShowTrayIcon', gAlwaysShowTrayIcon); SubNode := FindNode(Node, 'Mouse', True); SetAttr(SubNode, 'Selection/Enabled', gMouseSelectionEnabled); SetValue(SubNode, 'Selection/Button', gMouseSelectionButton); SetValue(SubNode, 'SingleClickStart', gMouseSingleClickStart); SetValue(SubNode, 'Selection/IconClick', gMouseSelectionIconClick); SetValue(SubNode, 'ScrollMode', Integer(gScrollMode)); SetValue(SubNode, 'WheelScrollLines', gWheelScrollLines); SetValue(Node, 'AutoFillColumns', gAutoFillColumns); SetValue(Node, 'AutoSizeColumn', gAutoSizeColumn); SetValue(Node, 'CustomColumnsChangeAllColumns', gCustomColumnsChangeAllColumns); SetValue(Node, 'BriefViewFileExtAligned', gBriefViewFileExtAligned); SetValue(Node, 'DateTimeFormat', gDateTimeFormat); SetValue(Node, 'ColumnsTitleLikeValues', gColumnsTitleLikeValues); SetValue(Node, 'CutTextToColumnWidth', gCutTextToColWidth); SetValue(Node, 'ExtendCellWidth', gExtendCellWidth); SetValue(Node, 'ShowSystemFiles', gShowSystemFiles); {$IFNDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon SetValue(Node, 'ListFilesInThread', gListFilesInThread); {$ENDIF} SetValue(Node, 'LoadIconsSeparately', gLoadIconsSeparately); SetValue(Node, 'DelayLoadingTabs', gDelayLoadingTabs); SetValue(Node, 'HighlightUpdatedFiles', gHighlightUpdatedFiles); SetValue(Node, 'DriveBlackList', gDriveBlackList); SetValue(Node, 'DriveBlackListUnmounted', gDriveBlackListUnmounted); { Tools page } SetExtTool(gConfig.FindNode(Root, 'Tools/Viewer', True), gExternalTools[etViewer]); SetExtTool(gConfig.FindNode(Root, 'Tools/Editor', True), gExternalTools[etEditor]); SetExtTool(gConfig.FindNode(Root, 'Tools/Differ', True), gExternalTools[etDiffer]); { Differ related} Node := Root.FindNode('Tools'); SubNode := FindNode(Node, 'Differ', TRUE); SetValue(SubNode, 'FramePosAfterComp', Integer(gResultingFramePositionAfterCompare)); { Fonts page } SetDCFont(gConfig.FindNode(Root, 'Fonts/Main', True), gFonts[dcfMain]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Editor', True), gFonts[dcfEditor]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Viewer', True), gFonts[dcfViewer]); SetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook', True), gFonts[dcfViewerBook]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Log', True), gFonts[dcfLog]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Console', True), gFonts[dcfConsole]); SetDCFont(gConfig.FindNode(Root, 'Fonts/PathEdit',True), gFonts[dcfPathEdit]); SetDCFont(gConfig.FindNode(Root, 'Fonts/FunctionButtons',True), gFonts[dcfFunctionButtons]); SetDCFont(gConfig.FindNode(Root, 'Fonts/SearchResults',True), gFonts[dcfSearchResults]); SetDCFont(gConfig.FindNode(Root, 'Fonts/TreeViewMenu', True), gFonts[dcfTreeViewMenu]); SetDCFont(gConfig.FindNode(Root, 'Fonts/StatusBar', True), gFonts[dcfStatusBar]); { Colors page } Node := FindNode(Root, 'Colors', True); SetValue(Node, 'UseCursorBorder', gUseCursorBorder); SetValue(Node, 'UseFrameCursor', gUseFrameCursor); SetValue(Node, 'UseInvertedSelection', gUseInvertedSelection); SetValue(Node, 'UseInactiveSelColor', gUseInactiveSelColor); SetValue(Node, 'AllowOverColor', gAllowOverColor); SetValue(Node, 'gBorderFrameWidth', gBorderFrameWidth); SetValue(Node, 'InactivePanelBrightness', gInactivePanelBrightness); SetValue(Node, 'FreeSpaceIndicator/UseGradient', gIndUseGradient); gColorExt.Save(gConfig, Node); { ToolTips page } Node := FindNode(Root, 'ToolTips', True); SetValue(Node, 'ShowToolTipMode', gShowToolTip); SetValue(Node, 'ActualToolTipMode', Integer(gShowToolTipMode)); SetValue(Node, 'ToolTipHideTimeOut', Integer(gToolTipHideTimeOut)); gFileInfoToolTip.Save(gConfig, Node); { Layout page } Node := FindNode(Root, 'Layout', True); ClearNode(Node); SetValue(Node, 'MainMenu', gMainMenu); SubNode := FindNode(Node, 'ButtonBar', True); SetAttr(SubNode, 'Enabled', gButtonBar); SetValue(SubNode, 'FlatIcons', gToolBarFlat); SetValue(SubNode, 'ButtonHeight', gToolBarButtonSize); SetValue(SubNode, 'IconSize', gToolBarIconSize); SetValue(SubNode, 'ShowCaptions', gToolBarShowCaptions); SetValue(SubNode, 'ReportErrorWithCommands', gToolbarReportErrorWithCommands); SetValue(SubNode, 'FilenameStyle', ord(gToolbarFilenameStyle)); SetValue(SubNode, 'PathToBeRelativeTo', gToolbarPathToBeRelativeTo); SetValue(SubNode, 'PathModifierElements', Integer(gToolbarPathModifierElements)); SubNode := FindNode(Node, 'MiddleBar', True); SetAttr(SubNode, 'Enabled', gMiddleToolBar); SetValue(SubNode, 'FlatIcons', gMiddleToolBarFlat); SetValue(SubNode, 'ButtonHeight', gMiddleToolBarButtonSize); SetValue(SubNode, 'IconSize', gMiddleToolBarIconSize); SetValue(SubNode, 'ShowCaptions', gMiddleToolBarShowCaptions); SetValue(SubNode,'ReportErrorWithCommands', gMiddleToolbarReportErrorWithCommands); SetValue(Node, 'DriveBar1', gDriveBar1); SetValue(Node, 'DriveBar2', gDriveBar2); SetValue(Node, 'DriveBarFlat', gDriveBarFlat); SubNode := FindNode(Node, 'DrivesListButton', True); SetAttr(SubNode, 'Enabled', gDrivesListButton); SetValue(SubNode, 'ShowLabel', dlbShowLabel in gDrivesListButtonOptions); SetValue(SubNode, 'ShowFileSystem', dlbShowFileSystem in gDrivesListButtonOptions); SetValue(SubNode, 'ShowFreeSpace', dlbShowFreeSpace in gDrivesListButtonOptions); SetValue(Node, 'SeparateTree', gSeparateTree); SetValue(Node, 'DirectoryTabs', gDirectoryTabs); SetValue(Node, 'CurrentDirectory', gCurDir); SetValue(Node, 'TabHeader', gTabHeader); SetValue(Node, 'StatusBar', gStatusBar); SetValue(Node, 'CmdLine', gCmdLine); SetValue(Node, 'LogWindow', gLogWindow); SetValue(Node, 'TermWindow', gTermWindow); SetValue(Node, 'KeyButtons', gKeyButtons); SetValue(Node, 'InterfaceFlat', gInterfaceFlat); SetValue(Node, 'DriveFreeSpace', gDriveFreeSpace); SetValue(Node, 'DriveIndicator', gDriveInd); SetValue(Node, 'ProgressInMenuBar', gProgInMenuBar); SetValue(Node, 'PanelOfOperationsInBackground', gPanelOfOp); SetValue(Node, 'HorizontalFilePanels', gHorizontalFilePanels); SetValue(Node, 'ShortFormatDriveInfo', gShortFormatDriveInfo); SetValue(Node, 'UppercaseDriveLetter', gUpperCaseDriveLetter); SetValue(Node, 'ShowColonAfterDrive', gShowColonAfterDrive); { Files views } Node := FindNode(Root, 'FilesViews', True); SubNode := FindNode(Node, 'Sorting', True); SetValue(SubNode, 'CaseSensitivity', Integer(gSortCaseSensitivity)); SetValue(SubNode, 'NaturalSorting', gSortNatural); SetValue(SubNode, 'SpecialSorting', gSortSpecial); SetValue(SubNode, 'SortFolderMode', Integer(gSortFolderMode)); SetValue(SubNode, 'NewFilesPosition', Integer(gNewFilesPosition)); SetValue(SubNode, 'UpdatedFilesPosition', Integer(gUpdatedFilesPosition)); SubNode := FindNode(Node, 'ColumnsView', True); SetValue(SubNode, 'LongInStatus', gColumnsLongInStatus); SetValue(SubNode, 'AutoSaveWidth', gColumnsAutoSaveWidth); SetValue(SubNode, 'TitleStyle', Integer(gColumnsTitleStyle)); SubNode := FindNode(Node, 'BriefView', True); SetValue(SubNode, 'FileExtAligned', gBriefViewFileExtAligned); SubNode := FindNode(SubNode, 'Columns', True); SetValue(SubNode, 'FixedWidth', gBriefViewFixedWidth); SetValue(SubNode, 'FixedCount', gBriefViewFixedCount); SetValue(SubNode, 'AutoSize', Integer(gBriefViewMode)); SetValue(Node, 'ExtraLineSpan', gExtraLineSpan); SetValue(Node, 'FolderPrefix', gFolderPrefix); SetValue(Node, 'FolderPostfix', gFolderPostfix); SetValue(Node, 'RenameConfirmMouse', gRenameConfirmMouse); { Keys page } Node := FindNode(Root, 'Keyboard', True); SubNode := FindNode(Node, 'Typing/Actions', True); for KeyTypingModifier in TKeyTypingModifier do SetValue(SubNode, TKeyTypingModifierToNodeName[KeyTypingModifier], Integer(gKeyTyping[KeyTypingModifier])); { File operations page } Node := FindNode(Root, 'FileOperations', True); SetValue(Node, 'BufferSize', gCopyBlockSize); SetValue(Node, 'LongNameAlert', gLongNameAlert); SetValue(Node, 'HashBufferSize', gHashBlockSize); SetValue(Node, 'UseMmapInSearch', gUseMmapInSearch); SetValue(Node, 'PartialNameSearch', gPartialNameSearch); SetValue(Node, 'InitiallyClearFileMask', gInitiallyClearFileMask); SetValue(Node, 'NewSearchClearFiltersAction', integer(gNewSearchClearFiltersAction)); SetValue(Node, 'ShowMenuBarInFindFiles', gShowMenuBarInFindFiles); SetValue(Node, 'WipePassNumber', gWipePassNumber); SetValue(Node, 'DropReadOnlyFlag', gDropReadOnlyFlag); SetValue(Node, 'ProcessComments', gProcessComments); SetValue(Node, 'RenameSelOnlyName', gRenameSelOnlyName); SetValue(Node, 'ShowCopyTabSelectPanel', gShowCopyTabSelectPanel); SetValue(Node, 'UseTrash', gUseTrash); SetValue(Node, 'SkipFileOpError', gSkipFileOpError); SetValue(Node, 'TypeOfDuplicatedRename', Integer(gTypeOfDuplicatedRename)); SetValue(Node, 'DefaultDropEffect', gDefaultDropEffect); SetValue(Node, 'ShowDialogOnDragDrop', gShowDialogOnDragDrop); SetValue(Node, 'DragAndDropTextRichtextDesireLevel', gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel); SetValue(Node, 'DragAndDropTextHtmlDesireLevel',gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel); SetValue(Node, 'DragAndDropTextUnicodeDesireLevel',gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel); SetValue(Node, 'DragAndDropTextSimpletextDesireLevel',gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel); SetValue(Node, 'DragAndDropAskFormatEachTime', gDragAndDropAskFormatEachTime); SetValue(Node, 'DragAndDropTextAutoFilename', gDragAndDropTextAutoFilename); SetValue(Node, 'DragAndDropSaveUnicodeTextInUFT8', gDragAndDropSaveUnicodeTextInUFT8); SetValue(Node, 'NtfsHourTimeDelay', gNtfsHourTimeDelay); SetValue(Node, 'AutoExtractOpenMask', gAutoExtractOpenMask); SetValue(Node, 'SearchDefaultTemplate', gSearchDefaultTemplate); SetValue(Node, 'ProgressKind', Integer(gFileOperationsProgressKind)); SetValue(Node, 'Confirmations', Integer(gFileOperationsConfirmations)); // Operations options SubNode := FindNode(Node, 'Options', True); SetValue(SubNode, 'Symlink', Integer(gOperationOptionSymLinks)); SetValue(SubNode, 'CorrectLinks', gOperationOptionCorrectLinks); SetValue(SubNode, 'CopyOnWrite', Integer(gOperationOptionCopyOnWrite)); SetValue(SubNode, 'FileExists', Integer(gOperationOptionFileExists)); SetValue(SubNode, 'DirectoryExists', Integer(gOperationOptionDirectoryExists)); SetValue(SubNode, 'SetPropertyError', Integer(gOperationOptionSetPropertyError)); SetValue(SubNode, 'ReserveSpace', gOperationOptionReserveSpace); SetValue(SubNode, 'CheckFreeSpace', gOperationOptionCheckFreeSpace); SetValue(SubNode, 'CopyAttributes', gOperationOptionCopyAttributes); SetValue(SubNode, 'CopyXattributes', gOperationOptionCopyXattributes); SetValue(SubNode, 'Verify', gOperationOptionVerify); SetValue(SubNode, 'CopyTime', gOperationOptionCopyTime); SetValue(SubNode, 'CopyOwnership', gOperationOptionCopyOwnership); SetValue(SubNode, 'CopyPermissions', gOperationOptionCopyPermissions); SetValue(SubNode, 'ExcludeEmptyTemplateDirectories', gOperationOptionExcludeEmptyDirectories); // Extract SubNode := FindNode(Node, 'Extract', True); if Assigned(SubNode) then begin SetValue(SubNode, 'Overwrite', gExtractOverwrite); end; // Multi-Rename SubNode := FindNode(Node, 'MultiRename', True); SetValue(SubNode, 'MulRenShowMenuBarOnTop', gMulRenShowMenuBarOnTop); SetValue(SubNode, 'MulRenInvalidCharReplacement', gMulRenInvalidCharReplacement); SetValue(SubNode, 'MulRenLaunchBehavor', Integer(gMulRenLaunchBehavior)); SetValue(SubNode, 'MulRenExitModifiedPreset', Integer(gMulRenExitModifiedPreset)); SetValue(SubNode, 'MulRenSaveRenamingLog', Integer(gMulRenSaveRenamingLog)); SetValue(SubNode, 'MulRenLogFilename', gMulRenLogFilename); SetValue(SubNode, 'MultRenDailyIndividualDirLog', gMultRenDailyIndividualDirLog); SetValue(SubNode, 'MulRenFilenameWithFullPathInLog', gMulRenFilenameWithFullPathInLog); SetValue(SubNode, 'MulRenPathRangeSeparator', gMulRenPathRangeSeparator); { Tabs page } Node := FindNode(Root, 'Tabs', True); SetValue(Node, 'Options', Integer(gDirTabOptions)); SetValue(Node, 'CharacterLimit', gDirTabLimit); SetValue(Node, 'Position', Integer(gDirTabPosition)); SetValue(Node, 'ActionOnDoubleClick',Integer(gDirTabActionOnDoubleClick)); { Log page } Node := FindNode(Root, 'Log', True); SetAttr(Node, 'Enabled', gLogFile); SetAttr(Node, 'Count', gLogFileCount); SetAttr(Node, 'LogFileWithDateInName', gLogFileWithDateInName); SetValue(Node, 'FileName', gLogFileName); SetValue(Node, 'Options', Integer(gLogOptions)); { Configuration page } SetAttr(Root, 'Configuration/Save', gSaveConfiguration); SetAttr(Root, 'MainWindow/Position/Save', gSaveWindowState); SetAttr(Root, 'Configuration/FolderTabs/Save', gSaveFolderTabs); SetAttr(Root, 'History/SearchReplaceHistory/Save', gSaveSearchReplaceHistory); SetAttr(Root, 'History/DirHistory/Save', gSaveDirHistory); SetAttr(Root, 'History/DirHistory/Count', gDirHistoryCount); SetAttr(Root, 'History/CmdLineHistory/Save', gSaveCmdLineHistory); SetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); SetAttr(Root, 'History/VolumeSizeHistory/Save', gSaveVolumeSizeHistory); SetAttr(Root, 'History/CreateDirectoriesHistory/Save', gSaveCreateDirectoriesHistory); SetAttr(Root, 'Configuration/SortOrder', Integer(gSortOrderOfConfigurationOptionsTree)); SetAttr(Root, 'Configuration/TreeType', Integer(gCollapseConfigurationOptionsTree)); { Quick Search/Filter page } Node := FindNode(Root, 'QuickSearch', True); SetValue(Node, 'MatchBeginning', qsmBeginning in gQuickSearchOptions.Match); SetValue(Node, 'MatchEnding', qsmEnding in gQuickSearchOptions.Match); SetValue(Node, 'Case', Integer(gQuickSearchOptions.SearchCase)); SetValue(Node, 'Items', Integer(gQuickSearchOptions.Items)); Node := FindNode(Root, 'QuickFilter', True); SetValue(Node, 'AutoHide', gQuickFilterAutoHide); SetValue(Node, 'SaveSessionModifications', gQuickFilterSaveSessionModifications); { Misc page } Node := FindNode(Root, 'Miscellaneous', True); SetValue(Node, 'GridVertLine', gGridVertLine); SetValue(Node, 'GridHorzLine', gGridHorzLine); SetValue(Node, 'ShowWarningMessages', gShowWarningMessages); SetValue(Node, 'SpaceMovesDown', gSpaceMovesDown); SetValue(Node, 'DirBrackets', gDirBrackets); SetValue(Node, 'InplaceRename', gInplaceRename); SetValue(Node, 'InplaceRenameButton', gInplaceRenameButton); SetValue(Node, 'DblClickToParent', gDblClickToParent); SetValue(Node, 'DoubleClickEditPath', gDblClickEditPath); SetValue(Node, 'HotDirAddTargetOrNot',gHotDirAddTargetOrNot); SetValue(Node, 'HotDirFullExpandOrNot', gHotDirFullExpandOrNot); SetValue(Node, 'ShowPathInPopup', gShowPathInPopup); SetValue(Node, 'ShowOnlyValidEnv', gShowOnlyValidEnv); SetValue(Node, 'WhereToAddNewHotDir', Integer(gWhereToAddNewHotDir)); SetValue(Node, 'FilenameStyle', ord(gHotDirFilenameStyle)); SetValue(Node, 'PathToBeRelativeTo', gHotDirPathToBeRelativeTo); SetValue(Node, 'PathModifierElements', Integer(gHotDirPathModifierElements)); SetValue(Node, 'DefaultTextEncoding', gDefaultTextEncoding); {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} SetValue(Node, 'SystemItemProperties', gSystemItemProperties); {$ENDIF} SetValue(Node, 'DecimalSeparator', CustomDecimalSeparator); { Thumbnails } Node := FindNode(Root, 'Thumbnails', True); SetAttr(Node, 'Save', gThumbSave); SetValue(Node, 'Width', gThumbSize.cx); SetValue(Node, 'Height', gThumbSize.cy); { Description } Node := FindNode(Root, 'Description', True); SetValue(Node, 'CreateNewUnicode', gDescCreateUnicode); SetValue(Node, 'DefaultEncoding', Integer(gDescReadEncoding)); SetValue(Node, 'CreateNewEncoding', Integer(gDescWriteEncoding)); { Auto refresh page } Node := FindNode(Root, 'AutoRefresh', True); SetValue(Node, 'Options', Integer(gWatchDirs)); SetValue(Node, 'ExcludeDirs', gWatchDirsExclude); SetValue(Node, 'Mode', Integer(gWatcherMode)); { Icons page } Node := FindNode(Root, 'Icons', True); SetValue(Node, 'Theme', gIconTheme); SetValue(Node, 'ShowHiddenDimmed', gShowHiddenDimmed); SetValue(Node, 'ShowMode', Integer(gShowIconsNew)); SetValue(Node, 'ShowOverlays', gIconOverlays); SetValue(Node, 'Size', gIconsSizeNew); SetValue(Node, 'DiskSize', gDiskIconsSize); SetValue(Node, 'DiskAlpha', gDiskIconsAlpha); SetValue(Node, 'ToolSize', gToolIconsSize); SetValue(Node, 'Exclude', gIconsExclude); SetValue(Node, 'ExcludeDirs', gIconsExcludeDirs); SetValue(Node, 'CustomIcons', Integer(gCustomIcons)); SetValue(Node, 'PixelsPerInch', Screen.PixelsPerInch); SetAttr(Node, 'ShowInMenus/Enabled', gIconsInMenus); SetValue(Node, 'ShowInMenus/Size', gIconsInMenusSizeNew); SetValue(Node, 'ShowButtonGlyphs', Integer(Application.ShowButtonGlyphs)); { Ignore list page } Node := FindNode(Root, 'IgnoreList', True); SetAttr(Node, 'Enabled', gIgnoreListFileEnabled); SetValue(Node, 'IgnoreListFile', gIgnoreListFile); { Directories HotList } gDirectoryHotlist.SaveToXml(gConfig, Root, TRUE); { Viewer } Node := FindNode(Root, 'Viewer',True); SetValue(Node, 'PreviewVisible',gPreviewVisible); SetValue(Node, 'ImageStretch',gImageStretch); SetValue(Node, 'ImageExifRotate', gImageExifRotate); SetValue(Node, 'ImageStretchLargeOnly', gImageStretchOnlyLarge); SetValue(Node, 'ImageShowTransparency', gImageShowTransparency); SetValue(Node, 'ImageCenter', gImageCenter); SetValue(Node, 'CopyMovePath1', gCopyMovePath1); SetValue(Node, 'CopyMovePath2', gCopyMovePath2); SetValue(Node, 'CopyMovePath3', gCopyMovePath3); SetValue(Node, 'CopyMovePath4', gCopyMovePath4); SetValue(Node, 'CopyMovePath5', gCopyMovePath5); SetValue(Node, 'PaintMode', Integer(gImagePaintMode)); SetValue(Node, 'PaintWidth', gImagePaintWidth); SetValue(Node, 'NumberOfColumns', gColCount); SetValue(Node, 'TabSpaces', gTabSpaces); SetValue(Node, 'MaxCodeSize', gMaxCodeSize); SetValue(Node, 'MaxTextWidth', gMaxTextWidth); SetValue(Node, 'ViewerMode' , gViewerMode); SetValue(Node, 'PrintMargins', gPrintMargins); SetValue(Node, 'ShowCaret' , gShowCaret); SetValue(Node, 'WrapText' , gViewerWrapText); SetValue(Node, 'LeftMargin' , gViewerLeftMargin); SetValue(Node, 'ExtraLineSpan' , gViewerLineSpacing); SetValue(Node, 'PaintColor', gImagePaintColor); SetValue(Node, 'TextPosition', gTextPosition); SetValue(Node, 'AutoCopy', gViewerAutoCopy); SetValue(Node, 'SynEditMask', gViewerSynEditMask); SetValue(Node, 'JpegQuality', gViewerJpegQuality); { Editor } Node := FindNode(Root, 'Editor',True); SetValue(Node, 'EditWaitTime', gEditWaitTime); SetValue(Node, 'SynEditOptions', Integer(gEditorSynEditOptions)); SetValue(Node, 'SynEditTabWidth', gEditorSynEditTabWidth); SetValue(Node, 'SynEditRightEdge', gEditorSynEditRightEdge); SetValue(Node, 'SynEditBlockIndent', gEditorSynEditBlockIndent); SetValue(Node, 'FindWordAtCursor', gEditorFindWordAtCursor); { Differ } Node := FindNode(Root, 'Differ',True); SetValue(Node, 'IgnoreCase', gDifferIgnoreCase); SetValue(Node, 'AutoCompare', gDifferAutoCompare); SetValue(Node, 'KeepScrolling', gDifferKeepScrolling); SetValue(Node, 'PaintBackground', gDifferPaintBackground); SetValue(Node, 'LineDifferences', gDifferLineDifferences); SetValue(Node, 'IgnoreWhiteSpace', gDifferIgnoreWhiteSpace); { SyncDirs } Node := FindNode(Root, 'SyncDirs', True); SetValue(Node, 'Subdirs', gSyncDirsSubdirs); SetValue(Node, 'ByContent', gSyncDirsByContent); SetValue(Node, 'Asymmetric', gSyncDirsAsymmetric and gSyncDirsAsymmetricSave); SetAttr(Node, 'Asymmetric/Save', gSyncDirsAsymmetricSave); SetValue(Node, 'IgnoreDate', gSyncDirsIgnoreDate); SetValue(Node, 'FilterCopyRight', gSyncDirsShowFilterCopyRight); SetValue(Node, 'FilterEqual', gSyncDirsShowFilterEqual); SetValue(Node, 'FilterNotEqual', gSyncDirsShowFilterNotEqual); SetValue(Node, 'FilterUnknown', gSyncDirsShowFilterUnknown); SetValue(Node, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); SetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); SetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); SetValue(Node, 'FileMask', gSyncDirsFileMask); SetAttr(Node, 'FileMask/Save', gSyncDirsFileMaskSave); SetValue(Node, 'DateTimeFormat', gDateTimeFormatSync); { Internal Associations} Node := FindNode(Root, 'InternalAssociations', True); SetValue(Node, 'OfferToAddNewFileType', gOfferToAddToFileAssociations); SetValue(Node, 'LastCustomAction', gFileAssociationLastCustomAction); SetValue(Node, 'ExpandedContextMenu', gExtendedContextMenu); SetValue(Node, 'DefaultContextActions', gDefaultContextActions); SetValue(Node, 'ExecuteViaShell', gOpenExecuteViaShell); SetValue(Node, 'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); SetValue(Node, 'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); SetValue(Node, 'IncludeFileAssociation', gIncludeFileAssociation); SetValue(Node, 'FilenameStyle', ord(gFileAssocFilenameStyle)); SetValue(Node, 'PathToBeRelativeTo', gFileAssocPathToBeRelativeTo); SetValue(Node, 'PathModifierElements', Integer(gFileAssocPathModifierElements)); { Tree View Menu } Node := FindNode(Root, 'TreeViewMenu', True); SetValue(Node, 'UseTVMDirectoryHotlistFMC', gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand); SetValue(Node, 'UseTVMDirectoryHotlistFDC', gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick); SetValue(Node, 'UseTVMFavoriteTabsFMC', gUseTreeViewMenuWithFavoriteTabsFromMenuCommand); SetValue(Node, 'UseTVMFavoriteTabsFDC', gUseTreeViewMenuWithFavoriteTabsFromDoubleClick); SetValue(Node, 'UseTVMDirHistory', gUseTreeViewMenuWithDirHistory); SetValue(Node, 'UseTVMViewHistory', gUseTreeViewMenuWithViewHistory); SetValue(Node, 'UseTVMCommandLineHistory', gUseTreeViewMenuWithCommandLineHistory); SetValue(Node, 'TreeViewMenuShortcutExit', gTreeViewMenuShortcutExit); SetValue(Node, 'TreeViewMenuSingleClickExit', gTreeViewMenuSingleClickExit); SetValue(Node, 'TreeViewMenuDoubleClickExit', gTreeViewMenuDoubleClickExit); for iIndexContextMode:=0 to (ord(tvmcLASTONE)-2) do begin SubNode := FindNode(Node, Format('Context%.2d',[iIndexContextMode]), True); SetValue(SubNode, 'CaseSensitive', gTreeViewMenuOptions[iIndexContextMode].CaseSensitive); SetValue(SubNode, 'IgnoreAccents', gTreeViewMenuOptions[iIndexContextMode].IgnoreAccents); SetValue(SubNode, 'ShowWholeBranchIfMatch', gTreeViewMenuOptions[iIndexContextMode].ShowWholeBranchIfMatch); end; SetValue(Node, 'TreeViewMenuUseKeyboardShortcut', gTreeViewMenuUseKeyboardShortcut); { Favorite Tabs } Node := FindNode(Root, 'FavoriteTabsOptions', True); SetValue(Node, 'FavoriteTabsUseRestoreExtraOptions', gFavoriteTabsUseRestoreExtraOptions); SetValue(Node, 'WhereToAdd', Integer(gWhereToAddNewFavoriteTabs)); SetValue(Node, 'Expand', gFavoriteTabsFullExpandOrNot); SetValue(Node, 'GotoConfigAftSav', gFavoriteTabsGoToConfigAfterSave); SetValue(Node, 'GotoConfigAftReSav', gFavoriteTabsGoToConfigAfterReSave); SetValue(Node, 'DfltLeftGoTo', Integer(gDefaultTargetPanelLeftSaved)); SetValue(Node, 'DfltRightGoTo', Integer(gDefaultTargetPanelRightSaved)); SetValue(Node, 'DfltKeep', Integer(gDefaultExistingTabsToKeep)); SetValue(Node, 'DfltSaveDirHistory', gFavoriteTabsSaveDirHistory); SetValue(Node, 'FavTabsLastUniqueID',GUIDtoString(gFavoriteTabsList.LastFavoriteTabsLoadedUniqueId)); { - Other - } SetValue(Root, 'Lua/PathToLibrary', gLuaLib); SetValue(Root, 'NameShortcutFile', gNameSCFile); SetValue(Root, 'HotKeySortOrder', Integer(gHotKeySortOrder)); SetValue(Root, 'UseEnterToCloseHotKeyEditor', gUseEnterToCloseHotKeyEditor); SetValue(Root, 'LastUsedPacker', gLastUsedPacker); SetValue(Root, 'LastDoAnyCommand', gLastDoAnyCommand); SetValue(Root, 'MarkMaskCaseSensitive', gbMarkMaskCaseSensitive); SetValue(Root, 'MarkMaskIgnoreAccents', gbMarkMaskIgnoreAccents); SetValue(Root, 'MarkMaskFilterWindows', gMarkMaskFilterWindows); SetValue(Root, 'MarkShowWantedAttribute', gMarkShowWantedAttribute); SetValue(Root, 'MarkDefaultWantedAttribute', gMarkDefaultWantedAttribute); SetValue(Root, 'MarkLastWantedAttribute', gMarkLastWantedAttribute); {$IFDEF MSWINDOWS} { TotalCommander Import/Export } //We'll save the last TC executable filename AND TC configuration filename ONLY if both has been set if (gTotalCommanderExecutableFilename<>'') AND (gTotalCommanderConfigFilename<>'') then begin Node := FindNode(Root, 'TCSection', True); if Assigned(Node) then begin SetValue(Node, 'TCExecutableFilename', gTotalCommanderExecutableFilename); SetValue(Node, 'TCConfigFilename', gTotalCommanderConfigFilename); SetValue(Node,'TCToolbarPath',gTotalCommanderToolbarPath); end; end; {$ENDIF} end; { Search template list } gSearchTemplateList.SaveToXml(gConfig, Root); { Columns sets } ColSet.Save(gConfig, Root); { Plugins } Node := gConfig.FindNode(Root, 'Plugins', True); gDSXPlugins.Save(gConfig, Node); gWCXPlugins.Save(gConfig, Node); gWDXPlugins.Save(gConfig, Node); gWFXPlugins.Save(gConfig, Node); gWLXPlugins.Save(gConfig, Node); for iIndexContextMode:=ord(ptDSX) to ord(ptWLX) do begin gConfig.SetValue(Node, Format('TweakPluginWidth%d',[iIndexContextMode]), gTweakPluginWidth[iIndexContextMode]); gConfig.SetValue(Node, Format('TweakPluginHeight%d',[iIndexContextMode]), gTweakPluginHeight[iIndexContextMode]); end; gConfig.SetValue(Node, 'AutoTweak', gPluginInAutoTweak); gConfig.SetValue(Node, 'WCXConfigViewMode', Integer(gWCXConfigViewMode)); gConfig.SetValue(Node, 'PluginFilenameStyle', ord(gPluginFilenameStyle)); gConfig.SetValue(Node,'PluginPathToBeRelativeTo', gPluginPathToBeRelativeTo); end; function LoadConfig: Boolean; var ErrorMessage: String = ''; begin Result := LoadConfigCheckErrors(@LoadGlobalConfig, gConfig.FileName, ErrorMessage); if not Result then Result := AskUserOnError(ErrorMessage); end; function InitGlobs: Boolean; var InitProc: TProcedure; ErrorMessage: String = ''; begin CreateGlobs; if not OpenConfig(ErrorMessage) then begin if not AskUserOnError(ErrorMessage) then Exit(False); end; SetDefaultNonConfigGlobs; if not LoadGlobs then begin if not AskUserOnError(ErrorMessage) then Exit(False); end; for InitProc in FInitList do InitProc(); Result := AskUserOnError(ErrorMessage); end; function GetKeyTypingAction(ShiftStateEx: TShiftState): TKeyTypingAction; var Modifier: TKeyTypingModifier; begin for Modifier in TKeyTypingModifier do if ShiftStateEx * KeyModifiersShortcutNoText = TKeyTypingModifierToShift[Modifier] then Exit(gKeyTyping[Modifier]); Result := ktaNone; end; function IsFileSystemWatcher: Boolean; begin Result := ([watch_file_name_change, watch_attributes_change] * gWatchDirs <> []); end; initialization finalization DestroyGlobs; end. doublecmd-1.1.30/src/ufunctionthread.pas0000644000175000001440000001036015104114162017263 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Executing functions in a thread. Copyright (C) 2009-2011 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFunctionThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs; type TFunctionThreadMethod = procedure(Params: Pointer) of object; PFunctionThreadItem = ^TFunctionThreadItem; TFunctionThreadItem = record Method: TFunctionThreadMethod; Params: Pointer; end; TFunctionThread = class(TThread) private FFunctionsToCall: TFPList; FWaitEvent: PRTLEvent; FLock: TCriticalSection; FFinished: Boolean; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); reintroduce; destructor Destroy; override; procedure QueueFunction(AFunctionToCall: TFunctionThreadMethod; AParams: Pointer = nil); procedure Finish; class procedure Finalize(var AThread: TFunctionThread); property Finished: Boolean read FFinished; end; implementation uses LCLProc, uDebug, uExceptions {$IFDEF MSWINDOWS} , ActiveX {$ENDIF} ; constructor TFunctionThread.Create(CreateSuspended: Boolean); begin FWaitEvent := RTLEventCreate; FFunctionsToCall := TFPList.Create; FLock := TCriticalSection.Create; FFinished := False; FreeOnTerminate := False; inherited Create(CreateSuspended, DefaultStackSize); end; destructor TFunctionThread.Destroy; var i: Integer; begin RTLeventdestroy(FWaitEvent); FLock.Acquire; for i := 0 to FFunctionsToCall.Count - 1 do Dispose(PFunctionThreadItem(FFunctionsToCall[i])); FLock.Release; FreeAndNil(FFunctionsToCall); FreeAndNil(FLock); inherited Destroy; end; procedure TFunctionThread.QueueFunction(AFunctionToCall: TFunctionThreadMethod; AParams: Pointer); var pItem: PFunctionThreadItem; begin if (not Terminated) and Assigned(AFunctionToCall) then begin New(pItem); pItem^.Method := AFunctionToCall; pItem^.Params := AParams; FLock.Acquire; try FFunctionsToCall.Add(pItem); finally FLock.Release; end; RTLeventSetEvent(FWaitEvent); end; end; procedure TFunctionThread.Finish; begin Terminate; RTLeventSetEvent(FWaitEvent); end; procedure TFunctionThread.Execute; var pItem: PFunctionThreadItem; begin {$IFDEF MSWINDOWS} CoInitializeEx(nil, COINIT_APARTMENTTHREADED); {$ENDIF} try while (not Terminated) or (FFunctionsToCall.Count > 0) do begin RTLeventResetEvent(FWaitEvent); pItem := nil; FLock.Acquire; try if FFunctionsToCall.Count > 0 then begin pItem := PFunctionThreadItem(FFunctionsToCall[0]); FFunctionsToCall.Delete(0); end; finally FLock.Release; end; if Assigned(pItem) then begin try pItem^.Method(pItem^.Params); Dispose(pItem); except on e: Exception do begin Dispose(pItem); HandleException(e, Self); end; end; end else begin RTLeventWaitFor(FWaitEvent); end; end; finally {$IFDEF MSWINDOWS} CoUninitialize; {$ENDIF} FFinished := True; end; end; class procedure TFunctionThread.Finalize(var AThread: TFunctionThread); begin AThread.Finish; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not AThread.Finished do CheckSynchronize(100); {$ENDIF} AThread.WaitFor; AThread.Free; AThread := nil; end; end. doublecmd-1.1.30/src/uformcommands.pas0000644000175000001440000005706515104114162016750 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implements custom commands for a component Copyright (C) 2011-2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFormCommands; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StringHashList, ActnList, Menus; type TCommandFuncResult = (cfrSuccess, cfrDisabled, cfrNotFound); TCommandFunc = procedure(const Params: array of string) of object; TCommandCaptionType = (cctShort, cctLong); TCommandCategorySortOrder = (ccsLegacy, ccsAlphabetical); TCommandSortOrder = (csLegacy, csAlphabetical); (* The commands are 'user' functions which can be assigned to toolbar button, hotkey, menu item, executed by scripts, etc. Only published functions and procedures can by found by MethodAddress. How to set up a form to handle hotkeys: 1. Specify that the form class implements IFormCommands (class (TForm, IFormCommands)). 2. Add private FCommands: TFormCommands that will implement the interface. 3. Add property that will specify that FCommands implements the interface in place of the form. property Commands: TFormCommands read FCommands{$IF FPC_FULLVERSION >= 020501} implements IFormCommands{$ENDIF}; For FPC < 2.5.1 "implements" does not work correctly so the form must implement the interface itself. For example see fViewer. {$IF FPC_FULLVERSION < 020501} // "implements" does not work in FPC < 2.5.1 function ExecuteCommand(Command: string; Param: String=''): TCommandFuncResult; function GetCommandCaption(Command: String; CaptionType: TCommandCaptionType): String; procedure GetCommandsList(List: TStrings); {$ENDIF} 4. Make sure a default constructor Create(TheOwner: TComponent) is present which will create the FCommands on demand when it is needed to read the hotkeys when the form is not currently created. 5. Register the form and action list in HotkeyManager somewhere in constructor: const HotkeysCategory = ; HMForm := HotMan.Register(Self, HotkeysCategory); HMForm.RegisterActionList(actionList); And unregister in destructor: HotMan.UnRegister(Self); 6. Register form as commands form so that it is displayed in Options: initialization TFormCommands.RegisterCommandsForm(Tfrm..., HotkeysCategory, @rsHotkeyCategory...); *) { IFormCommands } {$interfaces corba} // If a form/object implements this interface then it can execute custom // commands with parameters. IFormCommands = interface ['{0464B1C0-BA98-4258-A286-F0F726FF66C4}'] function ExecuteCommand(Command: String; const Params: array of string): TCommandFuncResult; function GetCommandCaption(Command: String; CaptionType: TCommandCaptionType = cctShort): String; procedure GetCommandsList(List: TStrings); function GetCommandAction(const Command: String): TAction; procedure GetCommandCategoriesList(List: TStringList; CommandCategorySortOrder:TCommandCategorySortOrder); procedure GetCommandsListForACommandCategory(List: TStringList; sCategoryName:String; CommandSortOrder: TCommandSortOrder); procedure ExtractCommandFields(ItemInList: string; var sCategory:string; var sCommand: string; var sHint: string; var sHotKey: string; var FlagCategoryTitle: boolean); end; {$interfaces default} // Used to filter out commands. If this function returns True the command // is not included in the commands list. TCommandFilterFunc = function (Command: String): Boolean of object; TCommandRec = record Address: Pointer; // EmptyStr then LocalHint := TCommandRec(FMethods.List[Index]^.Data^).Action.Hint else LocalHint := StringReplace(TCommandRec(FMethods.List[Index]^.Data^).Action.Caption, '&', '', [rfReplaceAll]); if LocalHint<>EmptyStr then Command:=Command+'|'+sHotKey+'|'+LocalHint+'|'+Format('%2.2d',[TCommandRec(FMethods.List[Index]^.Data^).Action.Tag]); List.Add(HeaderSortedHelper+Command); end; end; end; List.Sort; if CommandSortOrder=csLegacy then for Index:=0 to pred(List.count) do List.Strings[Index]:=RightStr(List.Strings[Index],length(List.Strings[Index])-(2+3)); finally List.EndUpdate; end; end; procedure TFormCommands.ExtractCommandFields(ItemInList: string; var sCategory: string; var sCommand: string; var sHint: string; var sHotKey: string; var FlagCategoryTitle: boolean); var PosPipe: longint; sWorkingString: String; begin FlagCategoryTitle := False; sCommand := ''; sHint := ''; sHotKey := ''; sCategory := ''; PosPipe := Pos('|', ItemInList); if PosPipe <> 0 then begin if pos('||||', ItemInList) = 0 then begin sCommand := Copy(ItemInList, 1, pred(PosPipe)); sWorkingString := RightStr(ItemInList, length(ItemInList) - PosPipe); PosPipe := pos('|', sWorkingString); if PosPipe <> 0 then begin sHotKey := copy(sWorkingString, 1, pred(PosPipe)); sWorkingString := rightStr(sWorkingString, length(sWorkingString) - PosPipe); PosPipe := pos('|', sWorkingString); if PosPipe <> 0 then begin sHint := copy(sWorkingString, 1, pred(PosPipe)); sCategory := rightStr(sWorkingString, length(sWorkingString) - PosPipe); sCategory := FTranslatableCommandCategory.Strings[StrToIntDef(sCategory,0)]; end; end; end else begin sCommand := Copy(ItemInList, 1, pred(PosPipe)); FlagCategoryTitle := True; end; end; end; class procedure TFormCommands.GetMethodsList(Instance: TObject; MethodsList: TStringHashList; ActionList: TActionList); type pmethodnamerec = ^tmethodnamerec; tmethodnamerec = packed record name : pshortstring; addr : pointer; end; tmethodnametable = packed record count : dword; entries : tmethodnamerec; // first entry // subsequent tmethodnamerec records follow end; pmethodnametable = ^tmethodnametable; var methodtable : pmethodnametable; i : dword; vmt : PVmt; pentry: pmethodnamerec; CommandRec: PCommandRec; Command: String; Action: TContainedAction; begin vmt := PVmt(Instance.ClassType); while assigned(vmt) do begin methodtable := pmethodnametable(vmt^.vMethodTable); if assigned(methodtable) then begin pentry := @methodtable^.entries; for i := 0 to methodtable^.count - 1 do begin Command := pentry[i].name^; if StrBegins(Command, 'cm_') then // TODO: Match functions parameter too. begin New(CommandRec); MethodsList.Add(Command, CommandRec); CommandRec^.Address := pentry[i].addr; CommandRec^.Action := nil; if Assigned(ActionList) then begin Action := ActionList.ActionByName('act' + Copy(Command, 4, Length(Command) - 3)); if Action is TAction then CommandRec^.Action := TAction(Action); end; end; end; end; vmt := vmt^.vParent; end; end; class procedure TFormCommands.GetCategoriesList(List: TStrings; Translated: TStrings); var i: Integer; begin List.Clear; Translated.Clear; for i := Low(CommandsForms) to High(CommandsForms) do begin List.Add(CommandsForms[i].Name); Translated.Add(CommandsForms[i].TranslatedName^); end; end; class function TFormCommands.GetCommandsForm(CategoryName: String): TComponentClass; var i: Integer; begin for i := Low(CommandsForms) to High(CommandsForms) do if CommandsForms[i].Name = CategoryName then begin Exit(CommandsForms[i].AClass); end; Result := nil; end; class procedure TFormCommands.RegisterCommandsForm(AClass: TClass; CategoryName: String; TranslatedName: PResStringRec); begin SetLength(CommandsForms, Length(CommandsForms) + 1); CommandsForms[High(CommandsForms)].AClass := TComponentClass(AClass); CommandsForms[High(CommandsForms)].Name := CategoryName; CommandsForms[High(CommandsForms)].TranslatedName := TranslatedName; end; function GetDefaultParam(const Params: array of String): String; begin if Length(Params) > 0 then Result := Params[0] else Result := ''; end; function GetParamValue(const Params: array of String; Key: String; out Value: String): Boolean; var Param: String; begin Key := Key + '='; for Param in Params do if StrBegins(Param, Key) then begin Value := Copy(Param, Length(Key) + 1, MaxInt); Exit(True); end; Value := ''; Result := False; end; function GetParamValue(const Param: String; Key: String; out Value: String): Boolean; begin Key := Key + '='; if StrBegins(Param, Key) then begin Value := Copy(Param, Length(Key) + 1, MaxInt); Exit(True); end; Value := ''; Result := False; end; function GetParamBoolValue(const Param: String; Key: String; out BoolValue: Boolean): Boolean; var sValue: String; begin Result := GetParamValue(Param, Key, sValue) and GetBoolValue(sValue, BoolValue); end; function GetBoolValue(StrValue: string; out BoolValue: Boolean): Boolean; begin StrValue := upcase(StrValue); if (StrValue = 'TRUE') or (StrValue = 'YES') or (StrValue = 'ON') or (StrValue = '1') then begin BoolValue := True; Result := True; end else if (StrValue = 'FALSE') or (StrValue = 'NO') or (StrValue = 'OFF') or (StrValue = '0') then begin BoolValue := False; Result := True; end else Result := False; end; { CloneMainAction } // Useful to implement an action in sub window form that will invoke a main action function CloneMainAction(AMainAction:TAction; ATargetActionList:TActionList; AMenuToInsert:TMenuItem=nil; APositionToInsert:integer=-1):TAction; var AMenuItem:TMenuItem; begin result:= TAction.Create(ATargetActionList); result.Name := AMainAction.Name; result.Caption := AMainAction.Caption; result.Hint := AMainAction.Hint; result.Category := AMainAction.Category; result.GroupIndex := AMainAction.GroupIndex; result.ShortCut:= AMainAction.ShortCut; result.Enabled := AMainAction.Enabled; result.ActionList := ATargetActionList; result.OnExecute := AMainAction.OnExecute; if AMenuToInsert<>nil then begin AMenuItem:=TMenuItem.Create(AMenuToInsert); AMenuItem.Action:=result; if APositionToInsert=-1 then AMenuToInsert.Add(AMenuItem) else AMenuToInsert.Insert(APositionToInsert,AMenuItem); end; end; end. doublecmd-1.1.30/src/ufindthread.pas0000644000175000001440000007156215104114162016371 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Thread for search files (called from frmSearchDlg) Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFindThread; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, Contnrs, DCStringHashListUtf8, uFindFiles, uFindEx, uFindByrMr, uMasks, uRegExpr, uRegExprW, uWcxModule; type { TDuplicate } TDuplicate = class Name: String; Hash: String; Size: Int64; Index: IntPtr; Count: Integer; function Clone: TDuplicate; end; { TEncoding } TEncoding = class FindText: String; ReplaceText: String; FRegExpr: TRegExprEx; RecodeTable: TRecodeTable; FTextSearchType: TTextSearch; public destructor Destroy; override; end; { TFindThread } TFindThread = class(TThread) private FItems: TStrings; FCurrentDir:String; FFilesScanned:Integer; FFilesFound:Integer; FFoundFile:String; FCurrentDepth: Integer; FSearchText: String; FSearchTemplate: TSearchTemplateRec; FSelectedFiles: TStringList; FFileChecks: TFindFileChecks; FLinkTargets: TStringList; // A list of encountered directories (for detecting cycles) FFilesMasks: TMaskList; FExcludeFiles: TMaskList; FEncodings: TObjectList; FExcludeDirectories: TMaskList; FFilesMasksRegExp: TRegExprW; FExcludeFilesRegExp: TRegExprW; FArchive: TWcxModule; FHeader: TWcxHeader; FTimeSearchStart:TTime; FTimeSearchEnd:TTime; FTimeOfScan:TTime; FBuffer: TBytes; FFoundIndex: IntPtr; FDuplicateIndex: Integer; FDuplicates: TStringHashListUtf8; function GetTimeOfScan:TTime; procedure FindInArchive(const FileName: String); function CheckFileName(const FileName: String) : Boolean; function CheckDirectoryName(const DirectoryName: String) : Boolean; function CheckFile(const Folder : String; const sr : TSearchRecEx) : Boolean; function CheckDirectory(const CurrentDir, FolderName : String) : Boolean; function CheckDuplicate(const Folder : String; const sr : TSearchRecEx): Boolean; function FindInFile(const sFileName: String; bCase, bRegExp: Boolean): Boolean; procedure FileReplaceString(const FileName: String; bCase, bRegExp: Boolean); protected procedure Execute; override; public constructor Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); destructor Destroy; override; procedure AddFile; procedure AddArchiveFile; procedure AddDuplicateFile; procedure DoFile(const sNewDir: String; const sr : TSearchRecEx); procedure WalkAdr(const sNewDir: String); function IsAborting: Boolean; property FilesScanned: Integer read FFilesScanned; property FilesFound: Integer read FFilesFound; property CurrentDir: String read FCurrentDir; property TimeOfScan:TTime read GetTimeOfScan; property Archive: TWcxModule write FArchive; property Items:TStrings write FItems; end; implementation uses LCLProc, LazUtf8, StrUtils, LConvEncoding, DCStrUtils, DCConvertEncoding, uLng, DCClassesUtf8, uFindMmap, uGlobs, uShowMsg, DCOSUtils, uOSUtils, uHash, uLog, WcxPlugin, Math, uDCUtils, uConvEncoding, DCDateTimeUtils, uOfficeXML; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin if TThread.CheckTerminated then Result:= 0 else Result:= 1; end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin if TThread.CheckTerminated then Result:= 0 else Result:= 1; end; { TDuplicate } function TDuplicate.Clone: TDuplicate; begin Result:= TDuplicate.Create; Result.Index:= Self.Index; end; { TEncoding } destructor TEncoding.Destroy; begin FRegExpr.Free; inherited Destroy; end; { TFindThread } constructor TFindThread.Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); var S: String; Index: Integer; AEncoding: TEncoding; ATextEncoding: String; AEncodings: TStringArray; begin inherited Create(True); FEncodings:= TObjectList.Create(True); FLinkTargets := TStringList.Create; FSearchTemplate := AFindOptions; FSelectedFiles := SelectedFiles; FDuplicates:= TStringHashListUtf8.Create(True); with FSearchTemplate do begin if SearchDepth < 0 then SearchDepth := MaxInt; if IsFindText then begin FSearchText := FindText; AEncodings:= SplitString(TextEncoding, '|'); for Index:= 0 to High(AEncodings) do begin AEncoding:= TEncoding.Create; ATextEncoding:= AEncodings[Index]; if HexValue then begin ATextEncoding := EncodingAnsi; AEncoding.FindText := HexToBin(FindText); end else begin ATextEncoding := NormalizeEncoding(ATextEncoding); AEncoding.FindText := ConvertEncoding(FindText, EncodingUTF8, ATextEncoding); AEncoding.ReplaceText := ConvertEncoding(ReplaceText, EncodingUTF8, ATextEncoding); if TextRegExp then begin AEncoding.FRegExpr := TRegExprEx.Create(ATextEncoding, True); AEncoding.FRegExpr.Expression := FSearchText; end; end; // Determine search type if SingleByteEncoding(ATextEncoding) then begin AEncoding.FTextSearchType := tsAnsi; AEncoding.RecodeTable := InitRecodeTable(ATextEncoding, CaseSensitive); end else if (CaseSensitive = False) then begin if ATextEncoding = EncodingDefault then begin ATextEncoding := GetDefaultTextEncoding; end; if ((ATextEncoding = EncodingUTF8) or (ATextEncoding = EncodingUTF8BOM)) then AEncoding.FTextSearchType:= tsUtf8 else if (ATextEncoding = EncodingUTF16LE) then AEncoding.FTextSearchType:= tsUtf16le else if (ATextEncoding = EncodingUTF16BE) then AEncoding.FTextSearchType:= tsUtf16be else AEncoding.FTextSearchType:= tsOther; end else begin AEncoding.FTextSearchType:= tsOther; end; FEncodings.Add(AEncoding); if HexValue then Break; end; end end; SearchTemplateToFindFileChecks(FSearchTemplate, FFileChecks); with FFileChecks do begin if RegExp then begin FFilesMasksRegExp := TRegExprW.Create(CeUtf8ToUtf16(FilesMasks)); FExcludeFilesRegExp := TRegExprW.Create(CeUtf8ToUtf16(ExcludeFiles)); end else begin FFilesMasks := TMaskList.Create(FilesMasks); FExcludeFiles := TMaskList.Create(ExcludeFiles); end; FExcludeDirectories := TMaskList.Create(ExcludeDirectories); end; if FSearchTemplate.Duplicates and FSearchTemplate.DuplicateHash then SetLength(FBuffer, gHashBlockSize); FTimeSearchStart:=0; FTimeSearchEnd:=0; FTimeOfScan:=0; end; destructor TFindThread.Destroy; var Index: Integer; begin // FItems.Add('End'); FreeAndNil(FEncodings); FreeAndNil(FFilesMasks); FreeAndNil(FExcludeFiles); FreeAndNil(FLinkTargets); FreeAndNil(FFilesMasksRegExp); FreeAndNil(FExcludeFilesRegExp); FreeAndNil(FExcludeDirectories); for Index:= 0 to FDuplicates.Count - 1 do TObject(FDuplicates.List[Index]^.Data).Free; FreeAndNil(FDuplicates); inherited Destroy; end; procedure TFindThread.Execute; var I: Integer; sPath: String; sr: TSearchRecEx; begin FTimeSearchStart:=Now; FreeOnTerminate := True; try Assert(Assigned(FItems), 'Assert: FItems is empty'); FCurrentDepth:= -1; if Assigned(FArchive) then begin FindInArchive(FSearchTemplate.StartPath); end else if not Assigned(FSelectedFiles) or (FSelectedFiles.Count = 0) then begin // Normal search (all directories). for sPath in SplitPath(FSearchTemplate.StartPath) do begin WalkAdr(ExcludeBackPathDelimiter(sPath)); end; end else begin // Search only selected directories. for I := 0 to FSelectedFiles.Count - 1 do begin sPath:= FSelectedFiles[I]; sPath:= ExcludeBackPathDelimiter(sPath); if FindFirstEx(sPath, 0, sr) = 0 then begin if FPS_ISDIR(sr.Attr) then WalkAdr(sPath) else DoFile(ExtractFileDir(sPath), sr); end; FindCloseEx(sr); end; end; FCurrentDir:= rsOperFinished; except on E:Exception do msgError(Self, E.Message); end; FTimeSearchEnd:=Now; FTimeOfScan:=FTimeSearchEnd-FTimeSearchStart; end; procedure TFindThread.AddFile; begin FItems.Add(FFoundFile); end; procedure TFindThread.AddArchiveFile; begin FItems.AddObject(FFoundFile, FHeader.Clone); end; procedure TFindThread.AddDuplicateFile; var AData: TDuplicate; begin AData:= TDuplicate(FDuplicates.List[FFoundIndex]^.Data); if AData.Count = 1 then begin Inc(FFilesFound); FItems.AddObject(AData.Name, AData.Clone); end; Inc(FFilesFound); FItems.AddObject(FFoundFile, AData.Clone); end; function TFindThread.CheckDirectory(const CurrentDir, FolderName : String): Boolean; begin with FSearchTemplate do begin Result := CheckDirectoryName(FolderName) and CheckDirectoryNameEx(FFileChecks, CurrentDir + PathDelim + FolderName, FSearchTemplate.StartPath); end; end; function TFindThread.FindInFile(const sFileName: String; bCase, bRegExp: Boolean): Boolean; var fs: TFileStreamEx; function FillBuffer(Buffer: PAnsiChar; BytesToRead: Longint): Longint; var DataRead: Longint; begin Result := 0; repeat DataRead := fs.Read(Buffer[Result], BytesToRead - Result); if DataRead = 0 then Break; Result := Result + DataRead; until Result >= BytesToRead; end; var S: String; Index: Integer; MaxLen: Integer; lastPos: Pointer; DataRead: Integer; fmr : TFileMapRec; BufferSize: Integer; sDataLength: Integer; AEncoding: TEncoding; Buffer: PAnsiChar = nil; begin Result := False; if FSearchText = '' then Exit; if FSearchTemplate.OfficeXML and OfficeMask.Matches(sFileName) then begin if LoadFromOffice(sFileName, S) then begin if bRegExp then Result:= uRegExprW.ExecRegExpr(UTF8ToUTF16(FSearchText), UTF8ToUTF16(S)) else if FSearchTemplate.CaseSensitive then Result:= PosMem(Pointer(S), Length(S), 0, FSearchText, False, False) <> Pointer(-1) else begin Result:= PosMemU(Pointer(S), Length(S), 0, FSearchText, False) <> Pointer(-1); end; end; Exit; end; // Simple regular expression search (don't work for very big files) if bRegExp then begin fs := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone or fmOpenNoATime); try if fs.Size = 0 then Exit; {$PUSH}{$R-} SetLength(S, fs.Size); {$POP} if Length(S) = 0 then raise EFOpenError.Create(EmptyStr); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; for Index:= 0 to FEncodings.Count - 1 do begin AEncoding:= TEncoding(FEncodings[Index]); AEncoding.FRegExpr.SetInputString(Pointer(S), Length(S)); if AEncoding.FRegExpr.Exec() then Exit(True); end; Exit; end; if gUseMmapInSearch then begin // Memory mapping should be slightly faster and use less memory if MapFile(sFileName, fmr) then try for Index:= 0 to FEncodings.Count - 1 do begin AEncoding:= TEncoding(FEncodings[Index]); with AEncoding do begin case FTextSearchType of tsAnsi: lastPos:= Pointer(PosMemBoyerMur(fmr.MappedFile, fmr.FileSize, FindText, RecodeTable)); tsUtf8: lastPos:= PosMemU(fmr.MappedFile, fmr.FileSize, 0, FindText, False); tsUtf16le: lastPos:= PosMemW(fmr.MappedFile, fmr.FileSize, 0, FindText, False, True); tsUtf16be: lastPos:= PosMemW(fmr.MappedFile, fmr.FileSize, 0, FindText, False, False); else lastPos:= PosMem(fmr.MappedFile, fmr.FileSize, 0, FindText, bCase, False); end; end; if (lastPos <> Pointer(-1)) then Exit(True); end; Exit; finally UnMapFile(fmr); end; // else fall back to searching via stream reading end; fs := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone or fmOpenNoATime); try MaxLen:= 0; BufferSize := gCopyBlockSize; for Index:= 0 to FEncodings.Count - 1 do begin AEncoding:= TEncoding(FEncodings[Index]); sDataLength := Length(AEncoding.FindText); if sDataLength > MaxLen then MaxLen:= sDataLength; end; // Buffer is extended by sDataLength-1 and BufferSize + sDataLength - 1 // bytes are read. Then strings of length sDataLength are compared with // sData starting from offset 0 to BufferSize-1. The remaining part of the // buffer [BufferSize, BufferSize+sDataLength-1] is moved to the beginning, // buffer is filled up with BufferSize bytes and the search continues. GetMem(Buffer, BufferSize + MaxLen - 1); if Assigned(Buffer) then try for Index:= 0 to FEncodings.Count - 1 do begin fs.Seek(0, soFromBeginning); AEncoding:= TEncoding(FEncodings[Index]); sDataLength := Length(AEncoding.FindText); if sDataLength > BufferSize then raise Exception.Create(rsMsgErrSmallBuf); if sDataLength > fs.Size then // string longer than file, cannot search Continue; try if FillBuffer(Buffer, sDataLength-1) = sDataLength-1 then begin while not Terminated do begin DataRead := FillBuffer(@Buffer[sDataLength - 1], BufferSize); if DataRead = 0 then Break; case AEncoding.FTextSearchType of tsAnsi: begin if PosMemBoyerMur(@Buffer[0], DataRead + sDataLength - 1, AEncoding.FindText, AEncoding.RecodeTable) <> -1 then Exit(True); end; tsUtf8: begin if PosMemU(@Buffer[0], DataRead + sDataLength - 1, 0, AEncoding.FindText, False) <> Pointer(-1) then Exit(True); end; tsUtf16le, tsUtf16be: begin if PosMemW(@Buffer[0], DataRead + sDataLength - 1, 0, AEncoding.FindText, False, AEncoding.FTextSearchType = tsUtf16le) <> Pointer(-1) then Exit(True); end; else begin if PosMem(@Buffer[0], DataRead + sDataLength - 1, 0, AEncoding.FindText, bCase, False) <> Pointer(-1) then Exit(True); end; end; // Copy last 'sDataLength-1' bytes to the beginning of the buffer // (to search 'on the boundary' - where previous buffer ends, // and the next buffer starts). Move(Buffer[DataRead], Buffer^, sDataLength-1); end; end; except end; end; finally FreeMem(Buffer); Buffer := nil; end; finally FreeAndNil(fs); end; end; procedure TFindThread.FileReplaceString(const FileName: String; bCase, bRegExp: Boolean); var S: String; fs: TFileStreamEx; AEncoding: TEncoding; Flags : TReplaceFlags = []; begin fs := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try if fs.Size = 0 then Exit; {$PUSH}{$R-} SetLength(S, fs.Size); {$POP} if Length(S) = 0 then raise EFOpenError.Create(EmptyStr); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; AEncoding:= TEncoding(FEncodings[0]); if bRegExp then S := AEncoding.FRegExpr.ReplaceAll(AEncoding.FindText, S, AEncoding.ReplaceText) else begin Include(Flags, rfReplaceAll); if not bCase then Include(Flags, rfIgnoreCase); S := StringReplace(S, AEncoding.FindText, AEncoding.ReplaceText, Flags); end; fs := TFileStreamEx.Create(FileName, fmCreate); try fs.WriteBuffer(S[1], Length(S)); finally fs.Free; end; end; function TFindThread.GetTimeOfScan: TTime; begin FTimeOfScan:=Now-FTimeSearchStart; Result:=FTimeOfScan; end; procedure TFindThread.FindInArchive(const FileName: String); var Index: Integer; function CheckHeader: Boolean; var NameLength: Integer; DirectoryName: String; begin with FSearchTemplate do begin Result:= True; if IsFindText then begin // Skip directories if (FHeader.FileAttr and faFolder) <> 0 then Exit(False); // Some plugins end directories with path delimiter. // And not set directory attribute. Process this case. NameLength := Length(FHeader.FileName); if (NameLength > 0) and (FHeader.FileName[NameLength] = PathDelim) then Exit(False); end; DirectoryName:= ExtractFileName(ExtractFileDir(FHeader.FileName)); if not CheckDirectoryName(DirectoryName) then Exit(False); if not CheckFileName(ExtractFileName(FHeader.FileName)) then Exit(False); if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result := CheckFileDateTime(FFileChecks, FHeader.DateTime); if (IsFileSizeFrom or IsFileSizeTo) and Result then Result := CheckFileSize(FFileChecks, FHeader.UnpSize); if Result then Result := CheckFileAttributes(FFileChecks, FHeader.FileAttr); end; end; var Flags: Integer; Result: Boolean; Operation: Integer; TargetPath: String; ArcHandle: TArcHandle; TargetFileName: String; WcxModule: TWcxModule = nil; begin if Assigned(FArchive) then WcxModule:= FArchive else begin TargetPath:= ExtractOnlyFileExt(FileName); for Index := 0 to gWCXPlugins.Count - 1 do begin if SameText(TargetPath, gWCXPlugins.Ext[Index]) and (gWCXPlugins.Enabled[Index]) then begin if FSearchTemplate.IsFindText and (gWCXPlugins.Flags[Index] and PK_CAPS_SEARCHTEXT = 0) then Continue; WcxModule:= gWCXPlugins.LoadModule(GetCmdDirFromEnvVar(gWCXPlugins.FileName[Index])); Break; end; end; end; if Assigned(WcxModule) then begin if FSearchTemplate.IsFindText then begin Flags:= PK_OM_EXTRACT; Operation:= PK_EXTRACT; end else begin Flags:= PK_OM_LIST; Operation:= PK_SKIP; end; ArcHandle := WcxModule.OpenArchiveHandle(FileName, Flags, Index); if ArcHandle <> 0 then try if Operation = PK_EXTRACT then begin TargetPath:= GetTempName(GetTempFolder); if not mbCreateDir(TargetPath) then Exit; end; WcxModule.WcxSetChangeVolProc(ArcHandle); WcxModule.WcxSetProcessDataProc(ArcHandle, @ProcessDataProcAG, @ProcessDataProcWG); while (WcxModule.ReadWCXHeader(ArcHandle, FHeader) = E_SUCCESS) do begin Result:= CheckHeader; if Terminated then Break; Flags:= IfThen(Result, Operation, PK_SKIP); if Flags = PK_EXTRACT then TargetFileName:= TargetPath + PathDelim + ExtractFileName(FHeader.FileName); if WcxModule.WcxProcessFile(ArcHandle, Flags, EmptyStr, TargetFileName) = E_SUCCESS then begin with FSearchTemplate do begin if Result and IsFindText then begin Result:= FindInFile(TargetFileName, CaseSensitive, TextRegExp); if NotContainingText then Result:= not Result; mbDeleteFile(TargetFileName); end; end; end; if Result then begin FFoundFile := FileName + ReversePathDelim + FHeader.FileName; Synchronize(@AddArchiveFile); Inc(FFilesFound); end; FreeAndNil(FHeader); end; if Operation = PK_EXTRACT then mbRemoveDir(TargetPath); finally WcxModule.CloseArchive(ArcHandle); end; end; end; function TFindThread.CheckFileName(const FileName: String): Boolean; var AFileName: UnicodeString; begin with FFileChecks do begin if RegExp then begin AFileName := CeUtf8ToUtf16(FileName); Result := ((FilesMasks = '') or FFilesMasksRegExp.Exec(AFileName)) and ((ExcludeFiles = '') or not FExcludeFilesRegExp.Exec(AFileName)); end else begin Result := FFilesMasks.Matches(FileName) and not FExcludeFiles.Matches(FileName); end; end; end; function TFindThread.CheckDuplicate(const Folder: String; const sr: TSearchRecEx): Boolean; var AKey: String; AHash: String; Index: IntPtr; AData: TDuplicate; AFileName: String; AValue: String = ''; AStart, AFinish: Integer; function FileHash(const AName: String; Size: Int64; out Hash: String): Boolean; var Handle: THandle; BytesRead: Integer; BytesToRead: Integer; Context: THashContext; begin Handle:= mbFileOpen(AName, fmOpenRead or fmShareDenyWrite); Result:= (Handle <> feInvalidHandle); if Result then begin HashInit(Context, HASH_BEST); BytesToRead:= Length(FBuffer); while (Size > 0) and (not Terminated) do begin if (Size < BytesToRead) then BytesToRead:= Size; BytesRead := FileRead(Handle, FBuffer[0], BytesToRead); if (BytesRead < 0) then Break; HashUpdate(Context, FBuffer[0], BytesRead); Dec(Size, BytesRead); end; FileClose(Handle); Result:= (Size = 0); HashFinal(Context, Hash); end; end; function CompareFiles(fn1, fn2: String; len: Int64): Boolean; const BUFLEN = 1024 * 32; var i, j: Int64; fs1, fs2: TFileStreamEx; buf1, buf2: array [1..BUFLEN] of Byte; begin try fs1 := TFileStreamEx.Create(fn1, fmOpenRead or fmShareDenyWrite); try fs2 := TFileStreamEx.Create(fn2, fmOpenRead or fmShareDenyWrite); try i := 0; repeat if len - i <= BUFLEN then j := len - i else begin j := BUFLEN; end; fs1.ReadBuffer(buf1, j); fs2.ReadBuffer(buf2, j); i := i + j; Result := CompareMem(@buf1, @buf2, j); until Terminated or not Result or (i >= len); finally fs2.Free; end; finally fs1.Free; end; except Result:= False; end; end; begin AFileName:= IncludeTrailingBackslash(Folder) + sr.Name; if (FPS_ISDIR(sr.Attr) or FileIsLinkToDirectory(AFileName, sr.Attr)) then Exit(False); if FSearchTemplate.DuplicateName then begin if FileNameCaseSensitive then AValue:= sr.Name else AValue:= UTF8LowerCase(sr.Name); end; if FSearchTemplate.DuplicateSize then AValue+= IntToStr(sr.Size); if FSearchTemplate.DuplicateHash then AHash:= EmptyStr; Index:= FDuplicates.Find(AValue); Result:= (Index >= 0); if Result then begin FDuplicates.FindBoundaries(Index, AStart, AFinish); for Index:= AStart to AFinish do begin AKey:= FDuplicates.List[Index]^.Key; if (Length(AKey) = Length(AValue)) and (CompareByte(AKey[1], AValue[1], Length(AKey)) = 0) then begin AData:= TDuplicate(FDuplicates.List[Index]^.Data); if FSearchTemplate.DuplicateHash then begin // Group file hash if Length(AData.Hash) = 0 then begin if not FileHash(AData.Name, AData.Size, AData.Hash) then begin AData.Name:= AFileName; AData.Size:= sr.Size; if (Index < AFinish) then begin Result:= False; Continue; end; Exit(False); end; end; // Current file hash if (Length(AHash) = 0) then begin if not FileHash(AFileName, sr.Size, AHash) then Exit; end; Result:= SameStr(AHash, AData.Hash); end else if FSearchTemplate.DuplicateContent then Result:= CompareFiles(AData.Name, AFileName, sr.Size) else begin Result:= True; end; if Result then begin Inc(AData.Count); FFoundIndex:= Index; // First match if (AData.Count = 1) then begin Inc(FDuplicateIndex); AData.Index:= FDuplicateIndex; end; Exit; end; end; end; end; if not Result then begin AData:= TDuplicate.Create; AData.Name:= AFileName; AData.Hash:= AHash; AData.Size:= sr.Size; FDuplicates.Add(AValue, AData); end; end; function TFindThread.CheckDirectoryName(const DirectoryName: String): Boolean; begin with FFileChecks do begin Result := not FExcludeDirectories.Matches(DirectoryName); end; end; function TFindThread.CheckFile(const Folder : String; const sr : TSearchRecEx) : Boolean; begin Result := True; with FSearchTemplate do begin if not CheckFileName(sr.Name) then Exit(False); if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result := CheckFileTime(FFileChecks, sr.Time); if (IsFileSizeFrom or IsFileSizeTo) and Result then Result := CheckFileSize(FFileChecks, sr.Size); if Result then Result := CheckFileAttributes(FFileChecks, sr.Attr); if (Result and IsFindText) then begin if FPS_ISDIR(sr.Attr) or (sr.Size = 0) then Exit(False); try Result := FindInFile(IncludeTrailingBackslash(Folder) + sr.Name, CaseSensitive, TextRegExp); if (Result and IsReplaceText) then FileReplaceString(IncludeTrailingBackslash(Folder) + sr.Name, CaseSensitive, TextRegExp); if NotContainingText then Result := not Result; except on E : Exception do begin Result := False; if (log_errors in gLogOptions) then begin logWrite(Self, rsMsgLogError + E.Message + ' (' + IncludeTrailingBackslash(Folder) + sr.Name + ')', lmtError); end; end; end; end; if Result and ContentPlugin then begin Result:= CheckPlugin(FSearchTemplate, sr, Folder); end; end; end; procedure TFindThread.DoFile(const sNewDir: String; const sr : TSearchRecEx); begin if FSearchTemplate.FindInArchives then FindInArchive(IncludeTrailingBackslash(sNewDir) + sr.Name); if CheckFile(sNewDir, sr) then begin if FSearchTemplate.Duplicates then begin if CheckDuplicate(sNewDir, sr) then begin FFoundFile := IncludeTrailingBackslash(sNewDir) + sr.Name; Synchronize(@AddDuplicateFile); end; end else begin FFoundFile := IncludeTrailingBackslash(sNewDir) + sr.Name; Synchronize(@AddFile); Inc(FFilesFound); end; end; Inc(FFilesScanned); end; procedure TFindThread.WalkAdr(const sNewDir:String); var sr: TSearchRecEx; Path, SubPath: String; IsLink: Boolean; begin if Terminated then Exit; Inc(FCurrentDepth); FCurrentDir := sNewDir; // Search all files to display statistics Path := IncludeTrailingBackslash(sNewDir) + '*'; if FindFirstEx(Path, 0, sr) = 0 then repeat if not (FPS_ISDIR(sr.Attr) or FileIsLinkToDirectory(sNewDir + PathDelim + sr.Name, sr.Attr)) then DoFile(sNewDir, sr) else if (sr.Name <> '.') and (sr.Name <> '..') then begin DoFile(sNewDir, sr); // Search in sub folders if (FCurrentDepth < FSearchTemplate.SearchDepth) and CheckDirectory(sNewDir, sr.Name) then begin SubPath := IncludeTrailingBackslash(sNewDir) + sr.Name; IsLink := FPS_ISLNK(sr.Attr); if FSearchTemplate.FollowSymLinks then begin if IsLink then SubPath := mbReadAllLinks(SubPath); if FLinkTargets.IndexOf(SubPath) >= 0 then Continue; // Link already encountered - links form a cycle. // Add directory to already-searched list. FLinkTargets.Add(SubPath); end else if IsLink then Continue; WalkAdr(SubPath); FCurrentDir := sNewDir; end; end; until (FindNextEx(sr) <> 0) or Terminated; FindCloseEx(sr); Dec(FCurrentDepth); end; function TFindThread.IsAborting: Boolean; begin Result := Terminated; end; end. doublecmd-1.1.30/src/ufindmmap.pas0000644000175000001440000003165515104114162016053 0ustar alexxusers{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz implementind memory searching with case and mmap file to memory contributors: Copyright (C) 2006-2007 Koblov Alexander (Alexx2000@mail.ru) } unit uFindMmap; {$mode objfpc}{$H+} interface uses uFindByrMr; type TAbortFunction = function: Boolean of object; {en Searches data in memory for a string. @param(pDataAddr Pointer to the beginning of the data buffer.) @param(iDataLength Length of the data buffer in bytes.) @param(iStartPos Position in the buffer from which to begin search.) @param(sSearchText Text that is searched for in the data buffer.) @param(bCaseSensitive If @true the search is case sensitive.) @param(bSearchBackwards If @true the search is done in iStartPos..0. If @false the search is done in iStartPos..(iLength-1).) @returns(If the string was not found it returns -1. If the string was found it returns pointer to the data buffer where the searched text begins.) } function PosMem(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): Pointer; function PosMemU(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bSearchBackwards: Boolean): Pointer; function PosMemW(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bSearchBackwards, bLittleEndian: Boolean): Pointer; function PosMemA(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive, bSearchBackwards: Boolean; RecodeTable: TRecodeTable): Pointer; {en Searches a file for a string using memory mapping. @param(sFileName File to search in.) @param(sFindData String to search for.) @param(bCase If @true the search is case-sensitive.) @param(Abort This function is called repeatedly during searching. If it returns @true the search is aborted.) @returns(-1 in case of error @br 0 if the string wasn't found @br 1 if the string was found) } function FindMmap(const sFileName:String; const sFindData:String; bCase:Boolean; Abort: TAbortFunction):Integer; function FindMmapU(const sFileName: String; const sFindData: String): Integer; function FindMmapW(const sFileName: String; const sFindData: String; bLittleEndian: Boolean): Integer; implementation uses SysUtils, DCOSUtils, DCUnicodeUtils, LazUTF8, StrUtils, DCStrUtils; function PosMem(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): Pointer; var SearchTextLength: Integer; function sPos2(pAdr: PChar):Boolean; inline; var i: Integer; begin Result := False; for i := 1 to SearchTextLength do begin case bCaseSensitive of False: if UpCase(pAdr^) <> UpCase(sSearchText[i]) then Exit; // Only for Ansi True : if pAdr^ <> sSearchText[i] then Exit; end; Inc(pAdr); end; Result:=True; end; var pCurrentAddr, pEndAddr: PAnsiChar; begin Result := Pointer(-1); SearchTextLength := Length(sSearchText); if (SearchTextLength <= 0) or (iDataLength <= 0) then Exit; pCurrentAddr := pDataAddr + iStartPos; pEndAddr := pDataAddr + iDataLength - SearchTextLength; if bSearchBackwards and (pCurrentAddr > pEndAddr) then // Move to the first possible position for searching backwards. pCurrentAddr := pEndAddr; if (pEndAddr < pDataAddr) or (pCurrentAddr < pDataAddr) or (pCurrentAddr > pEndAddr) then Exit; while True do begin if (pCurrentAddr > pEndAddr) or (pCurrentAddr < pDataAddr) then Exit; if sPos2(pCurrentAddr) then begin Result := pCurrentAddr; Exit; end; case bSearchBackwards of False: Inc(pCurrentAddr); True : Dec(pCurrentAddr); end; end; end; function PosMemU(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bSearchBackwards: Boolean): Pointer; const BUFFER_SIZE = 4096; var iSize: PtrInt; iLength: Integer; iTextPos: Integer; sTextBuffer: String; sLowerCase: String; begin Result := Pointer(-1); iLength:= Length(sSearchText); if bSearchBackwards then begin iSize:= iStartPos; if iLength > iSize then Exit; sLowerCase:= UTF8LowerCase(sSearchText); // While text size > buffer size while iStartPos > BUFFER_SIZE do begin iStartPos:= iStartPos - BUFFER_SIZE; SetString(sTextBuffer, pDataAddr + iStartPos, BUFFER_SIZE); DCUnicodeUtils.Utf8FixBroken(sTextBuffer); sTextBuffer:= UTF8LowerCase(sTextBuffer); iTextPos:= RPos(sLowerCase, sTextBuffer); if iTextPos > 0 then Exit(pDataAddr + iStartPos + iTextPos - 1) else begin // Shift text buffer iStartPos:= iStartPos + iLength; end; end; // Process remaining buffer if iLength > iStartPos then Exit; SetString(sTextBuffer, pDataAddr, iStartPos); DCUnicodeUtils.Utf8FixBroken(sTextBuffer); sTextBuffer:= UTF8LowerCase(sTextBuffer); iTextPos:= RPos(sLowerCase, sTextBuffer); if iTextPos > 0 then Result:= pDataAddr + iTextPos - 1; end else begin iSize:= iDataLength - iStartPos; if iLength > iSize then Exit; sLowerCase:= UTF8LowerCase(sSearchText); // While text size > buffer size while iSize > BUFFER_SIZE do begin SetString(sTextBuffer, pDataAddr + iStartPos, BUFFER_SIZE); DCUnicodeUtils.Utf8FixBroken(sTextBuffer); sTextBuffer:= UTF8LowerCase(sTextBuffer); iTextPos:= Pos(sLowerCase, sTextBuffer); if iTextPos > 0 then Exit(pDataAddr + iStartPos + iTextPos - 1) else begin // Shift text buffer iStartPos:= iStartPos + (BUFFER_SIZE - iLength); end; iSize:= iDataLength - iStartPos; end; // Process remaining buffer if iLength > iSize then Exit; SetString(sTextBuffer, pDataAddr + iStartPos, iSize); DCUnicodeUtils.Utf8FixBroken(sTextBuffer); sTextBuffer:= UTF8LowerCase(sTextBuffer); iTextPos:= Pos(sLowerCase, sTextBuffer); if iTextPos > 0 then Result:= pDataAddr + iStartPos + iTextPos - 1; end; end; function PosMemW(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bSearchBackwards, bLittleEndian: Boolean): Pointer; const BUFFER_SIZE = 4096; var iSize: PtrInt; iLength: Integer; iTextPos: Integer; bSwapEndian: Boolean; sTextBuffer: UnicodeString; sLowerCase: UnicodeString; begin Result := Pointer(-1); iLength:= Length(sSearchText); bSwapEndian:= {$IFDEF ENDIAN_BIG}bLittleEndian{$ELSE}not bLittleEndian{$ENDIF}; if bSearchBackwards then begin iSize:= iStartPos; if iLength > iSize then Exit; sLowerCase:= PUnicodeChar(Pointer(sSearchText + #0)); if bSwapEndian then Utf16SwapEndian(sLowerCase); sLowerCase:= UnicodeLowerCase(sLowerCase); // While text size > buffer size while iStartPos > BUFFER_SIZE do begin iStartPos:= iStartPos - BUFFER_SIZE; SetString(sTextBuffer, PUnicodeChar(pDataAddr + iStartPos), BUFFER_SIZE div 2); if bSwapEndian then Utf16SwapEndian(sTextBuffer); sTextBuffer:= UnicodeLowerCase(sTextBuffer); iTextPos:= RPos(sLowerCase, sTextBuffer); if iTextPos > 0 then Exit(pDataAddr + iStartPos + iTextPos * 2 - 2) else begin // Shift text buffer iStartPos:= iStartPos + iLength; end; end; // Process remaining buffer if iLength > iStartPos then Exit; SetString(sTextBuffer, PUnicodeChar(pDataAddr), iStartPos div 2); if bSwapEndian then Utf16SwapEndian(sTextBuffer); sTextBuffer:= UnicodeLowerCase(sTextBuffer); iTextPos:= RPos(sLowerCase, sTextBuffer); if iTextPos > 0 then Result:= pDataAddr + iTextPos * 2 - 2 end else begin iSize:= iDataLength - iStartPos; if iLength > iSize then Exit; sLowerCase:= PUnicodeChar(Pointer(sSearchText + #0)); if bSwapEndian then Utf16SwapEndian(sLowerCase); sLowerCase:= UnicodeLowerCase(sLowerCase); // While text size > buffer size while iSize > BUFFER_SIZE do begin SetString(sTextBuffer, PUnicodeChar(pDataAddr + iStartPos), BUFFER_SIZE div 2); if bSwapEndian then Utf16SwapEndian(sTextBuffer); sTextBuffer:= UnicodeLowerCase(sTextBuffer); iTextPos:= Pos(sLowerCase, sTextBuffer); if iTextPos > 0 then Exit(pDataAddr + iStartPos + iTextPos * 2 - 2) else begin // Shift text buffer iStartPos:= iStartPos + (BUFFER_SIZE - iLength); end; iSize:= iDataLength - iStartPos; end; // Process remaining buffer if iLength > iSize then Exit; SetString(sTextBuffer, PUnicodeChar(pDataAddr + iStartPos), iSize div 2); if bSwapEndian then Utf16SwapEndian(sTextBuffer); sTextBuffer:= UnicodeLowerCase(sTextBuffer); iTextPos:= Pos(sLowerCase, sTextBuffer); if iTextPos > 0 then Result:= pDataAddr + iStartPos + iTextPos * 2 - 2; end; end; function PosMemA(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive, bSearchBackwards: Boolean; RecodeTable: TRecodeTable): Pointer; var SearchTextLength: Integer; function sPos2(pAdr: PChar):Boolean; inline; var i: Integer; begin Result := False; for i := 1 to SearchTextLength do begin case bCaseSensitive of False: if Chr(RecodeTable[Ord(pAdr^)]) <> Chr(RecodeTable[Ord(sSearchText[i])]) then Exit; True : if pAdr^ <> sSearchText[i] then Exit; end; Inc(pAdr); end; Result:=True; end; var pCurrentAddr, pEndAddr: PAnsiChar; begin Result := Pointer(-1); SearchTextLength := Length(sSearchText); if (SearchTextLength <= 0) or (iDataLength <= 0) then Exit; pCurrentAddr := pDataAddr + iStartPos; pEndAddr := pDataAddr + iDataLength - SearchTextLength; if bSearchBackwards and (pCurrentAddr > pEndAddr) then // Move to the first possible position for searching backwards. pCurrentAddr := pEndAddr; if (pEndAddr < pDataAddr) or (pCurrentAddr < pDataAddr) or (pCurrentAddr > pEndAddr) then Exit; while True do begin if (pCurrentAddr > pEndAddr) or (pCurrentAddr < pDataAddr) then Exit; if sPos2(pCurrentAddr) then begin Result := pCurrentAddr; Exit; end; case bSearchBackwards of False: Inc(pCurrentAddr); True : Dec(pCurrentAddr); end; end; end; function FindMmap(const sFileName: String; const sFindData: String; bCase: Boolean; Abort: TAbortFunction): Integer; function PosMem(pAdr:PChar; iLength:Integer):Pointer; var xIndex:Integer; DataLength: Integer; function sPos(pAdr:PChar):Boolean; inline; var i:Integer; begin Result:=False; for i:=1 to DataLength do begin case bCase of False:if UpCase(pAdr^)<>UpCase(sFindData[i]) then Exit; True: if pAdr^<>sFindData[i] then Exit; end; inc(pAdr); end; Result:=True; end; begin Result:=pointer(-1); DataLength := Length(sFindData); for xIndex:=0 to iLength - DataLength do begin if sPos(pAdr) then begin Result:=pAdr; Exit; end; inc(pAdr); if Abort() then Exit; end; end; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMem(fmr.MappedFile, fmr.FileSize) <> Pointer(-1) then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; function FindMmapU(const sFileName: String; const sFindData: String): Integer; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMemU(fmr.MappedFile, fmr.FileSize, 0, sFindData, False) <> Pointer(-1) then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; function FindMmapW(const sFileName: String; const sFindData: String; bLittleEndian: Boolean): Integer; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMemW(fmr.MappedFile, fmr.FileSize, 0, sFindData, False, bLittleEndian) <> Pointer(-1) then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; end. doublecmd-1.1.30/src/ufindfiles.pas0000644000175000001440000004560415104114162016222 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Structures and functions for searching files. Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2010 Przemysaw Nagay (cobines@gmail.com) Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFindFiles; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uFile, uFindEx; type TTextSearchOption = (tsoMatchCase, tsoRegExpr, tsoHex); TTextSearchOptions = set of TTextSearchOption; TTextSearch = (tsAnsi, tsUtf8, tsUtf16le, tsUtf16be, tsOther); TTimeUnit = (tuSecond, tuMinute, tuHour, tuDay, tuWeek, tuMonth, tuYear); TFileSizeUnit = (suBytes, suKilo, suMega, suGiga, suTera); TPluginOperator = (poEqualCaseSensitive, poNotEqualCaseSensitive, poMore, poLess, poMoreEqual, poLessEqual, poEqualCaseInsensitive, poNotEqualCaseInsensitive, poContainsCaseSensitive, poNotContainsCaseSensitive, poContainsCaseInsensitive, poNotContainsCaseInsensitive, poRegExpr, poNotRegExpr); TPluginSearchRec = record Plugin: String; Field: String; UnitName: String; FieldType: Integer; Compare: TPluginOperator; Value: Variant; end; TSearchTemplateRec = record StartPath: String; ExcludeDirectories: String; FilesMasks: String; ExcludeFiles: String; SearchDepth: Integer; // -1 = unlimited RegExp: Boolean; IsPartialNameSearch: Boolean; FollowSymLinks: Boolean; AttributesPattern: String; FindInArchives: Boolean; { Date/time } IsDateFrom, IsDateTo, IsTimeFrom, IsTimeTo : Boolean; DateTimeFrom, DateTimeTo : TDateTime; IsNotOlderThan: Boolean; NotOlderThan: Integer; NotOlderThanUnit: TTimeUnit; { File size } IsFileSizeFrom, IsFileSizeTo : Boolean; FileSizeFrom, FileSizeTo : Int64; FileSizeUnit: TFileSizeUnit; { Find/replace text } IsFindText: Boolean; FindText: String; IsReplaceText : Boolean; ReplaceText: String; HexValue, CaseSensitive, NotContainingText: Boolean; TextRegExp: Boolean; TextEncoding: String; OfficeXML: Boolean; { Duplicates } Duplicates: Boolean; DuplicateName: Boolean; DuplicateSize: Boolean; DuplicateHash: Boolean; DuplicateContent: Boolean; { Plugins } SearchPlugin: String; ContentPlugin: Boolean; ContentPluginCombine: Boolean; ContentPlugins: array of TPluginSearchRec; end; TFindFileAttrsCheck = record HaveAttrs: TFileAttrs; //en> what attributes files must have DontHaveAttrs: TFileAttrs; //en> what attributes files must not have Negated: Boolean; end; TFindFileChecks = record FilesMasks: String; ExcludeFiles: String; ExcludeDirectories: String; RegExp: Boolean; DateTimeFrom, DateTimeTo : TDateTime; FileSizeFrom, FileSizeTo : Int64; Attributes: array of TFindFileAttrsCheck; //en> Each entry is OR'ed. end; TPFindFileChecks = ^TFindFileChecks; procedure SearchTemplateToFindFileChecks(const SearchTemplate: TSearchTemplateRec; out FileChecks: TFindFileChecks); procedure DateTimeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const AFile: TFile) : Boolean; function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const SearchRec: TSearchRecEx; const Folder: String) : Boolean; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String) : Boolean; function CheckDirectoryNameEx(const FileChecks: TFindFileChecks; const FullPath, BasePath: String) : Boolean; function CheckFileName(const FileChecks: TFindFileChecks; const FileName: String) : Boolean; function CheckFileTime(const FileChecks: TFindFileChecks; FT : TFileTime) : Boolean; inline; function CheckFileDateTime(const FileChecks: TFindFileChecks; DT : TDateTime) : Boolean; function CheckFileSize(const FileChecks: TFindFileChecks; FileSize : Int64) : Boolean; function CheckFileAttributes(const FileChecks: TFindFileChecks; Attrs : TFileAttrs) : Boolean; function CheckFile(const SearchTemplate: TSearchTemplateRec; const FileChecks: TFindFileChecks; const AFile: TFile) : Boolean; procedure AttrsPatternOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); implementation uses StrUtils, DateUtils, DCDateTimeUtils, DCFileAttributes, RegExpr, uMasks, DCStrUtils, DCUnicodeUtils, uFileProperty, uGlobs, uWDXModule, LazUTF8, WdxPlugin, Variants, uRegExprW, uFileSystemFileSource; const cKilo = 1024; cMega = 1024 * cKilo; cGiga = 1024 * cMega; cTera = 1024 * cGiga; procedure FileMaskOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); var sMask, sTemp: String; begin FileChecks.FilesMasks := SearchTemplate.FilesMasks; if SearchTemplate.IsPartialNameSearch then begin sTemp:= EmptyStr; while (Length(FileChecks.FilesMasks) > 0) do begin sMask:= Copy2SymbDel(FileChecks.FilesMasks, ';'); if not ContainsOneOf(sMask, '*?') then begin if Length(sMask) = 0 then sMask:= AllFilesMask else begin sMask:= '*' + sMask + '*'; end; end; sTemp:= sTemp + sMask + ';'; end; if (Length(sTemp) = 0) then FileChecks.FilesMasks := AllFilesMask else FileChecks.FilesMasks := Copy(sTemp, 1, Length(sTemp) - 1); end; end; procedure DateTimeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); begin with FileChecks do begin if SearchTemplate.IsNotOlderThan then begin DateTimeFrom := SysUtils.Now; DateTimeTo := MaxDateTime; case SearchTemplate.NotOlderThanUnit of tuSecond: DateTimeFrom := IncSecond(DateTimeFrom, -SearchTemplate.NotOlderThan); tuMinute: DateTimeFrom := IncMinute(DateTimeFrom, -SearchTemplate.NotOlderThan); tuHour: DateTimeFrom := IncHour(DateTimeFrom, -SearchTemplate.NotOlderThan); tuDay: DateTimeFrom := IncDay(DateTimeFrom, -SearchTemplate.NotOlderThan); tuWeek: DateTimeFrom := IncWeek(DateTimeFrom, -SearchTemplate.NotOlderThan); tuMonth: DateTimeFrom := IncMonth(DateTimeFrom, -SearchTemplate.NotOlderThan); tuYear: DateTimeFrom := IncYear(DateTimeFrom, -SearchTemplate.NotOlderThan); end; end else begin if SearchTemplate.IsDateFrom then begin if SearchTemplate.IsTimeFrom then DateTimeFrom := SearchTemplate.DateTimeFrom else DateTimeFrom := Trunc(SearchTemplate.DateTimeFrom); end else if SearchTemplate.IsTimeFrom then DateTimeFrom := Frac(SearchTemplate.DateTimeFrom) else DateTimeFrom := MinDateTime; if SearchTemplate.IsDateTo then begin if SearchTemplate.IsTimeTo then DateTimeTo := SearchTemplate.DateTimeTo else DateTimeTo := Trunc(SearchTemplate.DateTimeTo) + Frac(MaxDateTime); end else if SearchTemplate.IsTimeTo then DateTimeTo := Frac(SearchTemplate.DateTimeTo) else DateTimeTo := MaxDateTime; end; end; end; procedure FileSizeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); function GetFileSizeWithUnit(Size: Int64): Int64; begin case SearchTemplate.FileSizeUnit of suBytes: Result := Size; suKilo: Result := Size * cKilo; suMega: Result := Size * cMega; suGiga: Result := Size * cGiga; suTera: Result := Size * cTera; end; end; begin if SearchTemplate.IsFileSizeFrom then FileChecks.FileSizeFrom := GetFileSizeWithUnit(SearchTemplate.FileSizeFrom) else FileChecks.FileSizeFrom := 0; if SearchTemplate.IsFileSizeTo then FileChecks.FileSizeTo := GetFileSizeWithUnit(SearchTemplate.FileSizeTo) else FileChecks.FileSizeTo := High(FileChecks.FileSizeTo); end; function AttrPatternToCheck(const AttrPattern: String): TFindFileAttrsCheck; var StartIndex, CurIndex: Integer; begin Result.HaveAttrs := 0; Result.DontHaveAttrs := 0; Result.Negated := False; StartIndex := 1; CurIndex := StartIndex; while CurIndex <= Length(AttrPattern) do begin case AttrPattern[CurIndex] of '+': begin Result.HaveAttrs := Result.HaveAttrs or SingleStrToFileAttr(Copy(AttrPattern, StartIndex, CurIndex - StartIndex)); StartIndex := CurIndex + 1; end; '-': begin Result.DontHaveAttrs := Result.DontHaveAttrs or SingleStrToFileAttr(Copy(AttrPattern, StartIndex, CurIndex - StartIndex)); StartIndex := CurIndex + 1; end; '!': begin if CurIndex = 1 then Result.Negated := True; StartIndex := CurIndex + 1; end; ' ': // omit spaces begin StartIndex := CurIndex + 1; end; end; Inc(CurIndex); end; end; procedure AttrsPatternOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); var AttrsPattern, CurPattern: String; begin FileChecks.Attributes := nil; AttrsPattern := SearchTemplate.AttributesPattern; while AttrsPattern <> '' do begin // For each pattern separated by '|' create a new TFindFileAttrsCheck. CurPattern := Copy2SymbDel(AttrsPattern, '|'); if CurPattern <> '' then with FileChecks do begin SetLength(Attributes, Length(Attributes) + 1); Attributes[Length(Attributes) - 1] := AttrPatternToCheck(CurPattern); end; end; end; procedure SearchTemplateToFindFileChecks(const SearchTemplate: TSearchTemplateRec; out FileChecks: TFindFileChecks); begin FileChecks.ExcludeFiles := SearchTemplate.ExcludeFiles; FileChecks.ExcludeDirectories := SearchTemplate.ExcludeDirectories; FileChecks.RegExp := SearchTemplate.RegExp; FileMaskOptionsToChecks(SearchTemplate, FileChecks); DateTimeOptionsToChecks(SearchTemplate, FileChecks); FileSizeOptionsToChecks(SearchTemplate, FileChecks); AttrsPatternOptionsToChecks(SearchTemplate, FileChecks); end; function CheckPluginFullText(Module: TWdxModule; constref ContentPlugin: TPluginSearchRec; const FileName: String): Boolean; var Value: String; Old: String = ''; FindText: String; FieldIndex: Integer; UnitIndex: Integer = 0; begin // Prepare find text case ContentPlugin.Compare of poContainsCaseInsensitive, poNotContainsCaseInsensitive: FindText := UTF8LowerCase(ContentPlugin.Value); else FindText:= ContentPlugin.Value; end; // Find field index FieldIndex:= Module.GetFieldIndex(ContentPlugin.Field); Value:= Module.CallContentGetValue(FileName, FieldIndex, UnitIndex); while Length(Value) > 0 do begin Old+= Value; DCUnicodeUtils.Utf8FixBroken(Old); case ContentPlugin.Compare of poContainsCaseSensitive: Result := Pos(FindText, Old) > 0; poNotContainsCaseSensitive: Result := Pos(FindText, Old) = 0; poContainsCaseInsensitive: Result := Pos(FindText, UTF8LowerCase(Old)) > 0; poNotContainsCaseInsensitive: Result := Pos(FindText, UTF8LowerCase(Old)) = 0; end; if Result then begin Module.CallContentGetValue(FileName, FieldIndex, -1, 0); Exit; end; Old:= RightStr(Value, Length(FindText)); Value:= Module.CallContentGetValue(FileName, FieldIndex, UnitIndex); end; Result:= False; end; function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const AFile: TFile): Boolean; var I: Integer; Work: Boolean; Value: Variant; FileName: String; Module: TWdxModule; begin FileName := AFile.FullPath; Result := SearchTemplate.ContentPluginCombine; for I:= Low(SearchTemplate.ContentPlugins) to High(SearchTemplate.ContentPlugins) do with SearchTemplate do begin Module := gWDXPlugins.GetWdxModule(ContentPlugins[I].Plugin); if (Module = nil) or (not Module.IsLoaded) then Work:= False else if not Module.FileParamVSDetectStr(AFile) then Work:= False else if ContentPlugins[I].FieldType in [ft_fulltext, ft_fulltextw] then Work:= CheckPluginFullText(Module, ContentPlugins[I], FileName) else begin Value:= Module.CallContentGetValueV(FileName, ContentPlugins[I].Field, ContentPlugins[I].UnitName, 0); if VarIsEmpty(Value) then begin Work:= False; end else case ContentPlugins[I].Compare of poEqualCaseSensitive: Work:= (ContentPlugins[I].Value = Value); poNotEqualCaseSensitive: Work:= (ContentPlugins[I].Value <> Value); poMore: Work := (Value > ContentPlugins[I].Value); poLess: Work := (Value < ContentPlugins[I].Value); poMoreEqual: Work := (Value >= ContentPlugins[I].Value); poLessEqual: Work := (Value <= ContentPlugins[I].Value); poEqualCaseInsensitive: Work:= UTF8CompareText(Value, ContentPlugins[I].Value) = 0; poNotEqualCaseInsensitive: Work:= UTF8CompareText(Value, ContentPlugins[I].Value) <> 0; poContainsCaseSensitive: Work := UTF8Pos(ContentPlugins[I].Value, Value) > 0; poNotContainsCaseSensitive: Work := UTF8Pos(ContentPlugins[I].Value, Value) = 0; poContainsCaseInsensitive: Work := UTF8Pos(UTF8LowerCase(ContentPlugins[I].Value), UTF8LowerCase(Value)) > 0; poNotContainsCaseInsensitive: Work := UTF8Pos(UTF8LowerCase(ContentPlugins[I].Value), UTF8LowerCase(Value)) = 0; poRegExpr: Work := ExecRegExpr(UTF8ToUTF16(ContentPlugins[I].Value), UTF8ToUTF16(Value)); poNotRegExpr: Work := not ExecRegExpr(UTF8ToUTF16(ContentPlugins[I].Value), UTF8ToUTF16(Value)); end; end; if ContentPluginCombine then begin Result := Result and Work; if not Result then Break; end else begin Result := Result or Work; if Result then Break; end; end; end; function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const SearchRec: TSearchRecEx; const Folder: String): Boolean; var AFile: TFile; begin try AFile:= TFileSystemFileSource.CreateFile(Folder, @SearchRec); try Result:= CheckPlugin(SearchTemplate, AFile); finally AFile.Free; end; except Exit(False); end; end; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String): Boolean; begin with FileChecks do begin Result := not MatchesMaskList(DirectoryName, ExcludeDirectories); end; end; function CheckDirectoryNameEx(const FileChecks: TFindFileChecks; const FullPath, BasePath: String): Boolean; var APath: String; begin Result := True; with FileChecks do begin for APath in ExcludeDirectories.Split([';'], TStringSplitOptions.ExcludeEmpty) do begin case GetPathType(APath) of ptRelative: begin // Check if FullPath is a path relative to BasePath. if MatchesMask(ExtractDirLevel(BasePath, FullPath), APath) then Exit(False); end; ptAbsolute: begin if MatchesMask(FullPath, APath) then Exit(False); end; end; end; end; end; function CheckFileName(const FileChecks: TFindFileChecks; const FileName: String): Boolean; begin with FileChecks do begin if RegExp then begin Result := ((FilesMasks = '') or ExecRegExpr(FilesMasks, FileName)) and ((ExcludeFiles = '') or not ExecRegExpr(ExcludeFiles, FileName)); end else begin Result := MatchesMaskList(FileName, FilesMasks) and not MatchesMaskList(FileName, ExcludeFiles); end; end; end; function CheckFileTime(const FileChecks: TFindFileChecks; FT : TFileTime) : Boolean; begin Result := CheckFileDateTime(FileChecks, FileTimeToDateTime(FT)); end; function CheckFileDateTime(const FileChecks: TFindFileChecks; DT : TDateTime) : Boolean; begin with FileChecks do Result := (DateTimeFrom <= DT) and (DT <= DateTimeTo); end; function CheckFileSize(const FileChecks: TFindFileChecks; FileSize: Int64): Boolean; begin with FileChecks do Result := (FileSizeFrom <= FileSize) and (FileSize <= FileSizeTo); end; function CheckFileAttributes(const FileChecks: TFindFileChecks; Attrs : TFileAttrs) : Boolean; var i: Integer; begin if Length(FileChecks.Attributes) = 0 then Result := True else begin for i := Low(FileChecks.Attributes) to High(FileChecks.Attributes) do begin with FileChecks.Attributes[i] do begin Result := ((Attrs and HaveAttrs) = HaveAttrs) and ((Attrs and DontHaveAttrs) = 0); if Negated then Result := not Result; if Result then Exit; end; end; Result := False; end; end; function CheckFile(const SearchTemplate: TSearchTemplateRec; const FileChecks: TFindFileChecks; const AFile: TFile): Boolean; var IsDir: Boolean; DirectoryName: String; begin Result := True; with SearchTemplate do begin IsDir := AFile.IsDirectory or AFile.IsLinkToDirectory; if (fpName in AFile.SupportedProperties) then begin DirectoryName:= ExtractFileName(ExcludeTrailingBackslash(AFile.Path)); Result := CheckDirectoryName(FileChecks, DirectoryName); if Result then Result := CheckFileName(FileChecks, AFile.Name); end; if Result and (fpModificationTime in AFile.SupportedProperties) then if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result:= CheckFileDateTime(FileChecks, AFile.ModificationTime); if Result and not IsDir and (fpSize in AFile.SupportedProperties) then if (IsFileSizeFrom or IsFileSizeTo) then Result:= CheckFileSize(FileChecks, AFile.Size); if Result and (fpAttributes in AFile.SupportedProperties) then begin if AFile.AttributesProperty.IsNativeAttributes then Result:= CheckFileAttributes(FileChecks, AFile.Attributes) else if (Length(FileChecks.Attributes) > 0) then Result:= False; end; if Result and ContentPlugin then begin Result:= CheckPlugin(SearchTemplate, AFile); end; end; end; end. doublecmd-1.1.30/src/ufindbyrmr.pas0000644000175000001440000001053715104114162016250 0ustar alexxusers{ implementing memory searching with case (any single-byte encoding) and mmap file to memory based on ufindmmap.pas by radek.cervinka@centrum.cz } unit uFindByrMr; {$mode objfpc}{$H+} interface type TAbortFunction = function: Boolean of object; TRecodeTable = array[0..255] of byte; function PosMemBoyerMur(pAdr: PChar; iLength: PtrInt; const sFindData: String; RecodeTable: TRecodeTable): PtrInt; {en Searches a file for a string using memory mapping. @param(sFileName File to search in.) @param(sFindData String to search for.) @param(RecodeTable table for case-insensitive compare) @param(Abort This function is called repeatedly during searching. If it returns @true the search is aborted.) @returns(-1 in case of error @br 0 if the string wasn't found @br 1 if the string was found) } function FindMmapBM(const sFileName: String; const sFindData: String; RecodeTable: TRecodeTable; Abort: TAbortFunction): PtrInt; {en Initializes table for recode from different encodings. @param(Encoding Name of encoding.) @param(bCaseSensitive If @true the search is case sensitive.) @returns(TRecodeTable array to use in FindMmap) } function InitRecodeTable(Encoding: String; bCaseSensitive: Boolean): TRecodeTable; implementation uses DCOSUtils, LConvEncoding, LazUTF8, uConvEncoding; type TIntArray = array of Integer; function InitRecodeTable(Encoding:string; bCaseSensitive: Boolean): TRecodeTable; var i:byte; c:string; begin for i:=0 to 255 do begin if bCaseSensitive then Result[i]:=i else begin c:=ConvertEncoding(chr(i), Encoding, EncodingUTF8); c:=UTF8UpperCase(c); c:=ConvertEncoding(c, EncodingUTF8, Encoding); if length(c)>0 then Result[i]:=ord(c[1]); end; end; end; function PosMemBoyerMur(pAdr: PChar; iLength: PtrInt; const sFindData: String; RecodeTable: TRecodeTable): PtrInt; function prefixFunc(s:string):TIntArray; var k,i:Integer; begin SetLength(Result, Length(s)+1); Result[0] := 0; Result[1] := 0; k := 0; for i := 2 to Length(s) do begin while (k > 0) and (s[k+1] <> s[i]) do k := Result[k]; if s[k+1] = s[i] then Inc(k); Result[i] := k; end; end; var StopTable:array[0..255] of byte; prefTable,pf1,pf2:TIntArray; i,j,len:Integer; curPos,curCharPos:PtrInt; encStr,rvrsStr:string; curChar:byte; begin Result:=-1; len:=Length(sFindData); encStr:=''; for i:=1 to len do encStr:=encStr+chr(RecodeTable[ord(sFindData[i])]); rvrsStr:=''; for i:=len downto 1 do rvrsStr:=rvrsStr+encStr[i]; for i:=0 to 255 do StopTable[i]:=0; for i:=len-1 downto 1 do if StopTable[ord(encStr[i])]=0 then StopTable[ord(encStr[i])]:=i; //Calc prefix table pf1:=prefixFunc(encStr); pf2:=prefixFunc(rvrsStr); setLength(prefTable,len+1); for j:=0 to len do prefTable[j]:= len - pf1[len]; for i:=1 to len do begin j:= len - pf2[i]; if i - pf2[i] < prefTable[j] then prefTable[j]:= i - pf2[i]; end; curPos:=0; while curPos<=iLength-len do begin curCharPos:=len; curChar:=RecodeTable[ord((pAdr+curPos+curCharPos-1)^)]; while (curCharPos>0) do begin if (curChar<>byte(encStr[curCharPos])) then break; dec(curCharPos); if curCharPos>0 then curChar:=RecodeTable[ord((pAdr+curPos+curCharPos-1)^)]; end; if curCharPos=0 then begin//found Result:=curPos; exit; end else begin//shift if curCharPos=len then curPos:=curPos+len-StopTable[curChar] else curPos:=curPos+prefTable[curCharPos]; end end; end; function FindMmapBM(const sFileName, sFindData: String; RecodeTable: TRecodeTable; Abort: TAbortFunction): PtrInt; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMemBoyerMur(fmr.MappedFile, fmr.FileSize, sFindData, RecodeTable) <> -1 then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; end. doublecmd-1.1.30/src/ufileviewnotebook.pas0000644000175000001440000005751515104114162017636 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains TFileViewPage and TFileViewNotebook objects. Copyright (C) 2016-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Notes: 1. TFileViewNotebook.DestroyAllPages is the workaround for the bug of Lazarus. TFileViewNotebook.DestroyAllPages and the related codes can be removed, after Double Commander built with Lazarus 2.4 on Linux. see also: https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/40019 https://github.com/doublecmd/doublecmd/pull/703 } unit uFileViewNotebook; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ComCtrls, LMessages, LCLType, Forms, uFileView, uFilePanelSelect, DCXmlConfig; type TTabLockState = ( tlsNormal, //2 then // Server path name are shown simply like \: in TC so let's do the same for those who get used to that. result:='\:' else if Lowercase(A) = (result+DirectorySeparator) then result:=''; //To avoid to get "c:C:" :-) end; {$ENDIF} var NewCaption: String; begin if Assigned(FileView) then begin if FPermanentTitle <> '' then begin NewCaption := FPermanentTitle; FCurrentTitle := FPermanentTitle; end else begin if (FileView.FileSource is TArchiveFileSource) and (FileView.FileSource.IsPathAtRoot(FileView.CurrentPath)) then begin with (FileView.FileSource as TArchiveFileSource) do NewCaption := ExtractFileName(ArchiveFileName); end else begin NewCaption := FileView.CurrentPath; if NewCaption <> '' then NewCaption := GetLastDir(NewCaption); end; FCurrentTitle := NewCaption; end; {$IFDEF MSWINDOWS} if tb_show_drive_letter in gDirTabOptions then begin if (FileView.FileSource is TArchiveFileSource) then with (FileView.FileSource as TArchiveFileSource) do NewCaption := LocalGetDriveName(ArchiveFileName) + NewCaption else NewCaption := LocalGetDriveName(FileView.CurrentPath) + NewCaption; end; {$ENDIF} if (FLockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab]) and (tb_show_asterisk_for_locked in gDirTabOptions) then NewCaption := '*' + NewCaption; if (tb_text_length_limit in gDirTabOptions) and (UTF8Length(NewCaption) > gDirTabLimit) then NewCaption := UTF8Copy(NewCaption, 1, gDirTabLimit) + '..'; {$IF DEFINED(LCLGTK2)} Caption := NewCaption; {$ELSE} Caption := StringReplace(NewCaption, '&', '&&', [rfReplaceAll]); {$ENDIF} end; end; procedure TFileViewPage.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin Message.Result := 1; end; function TFileViewPage.GetFileView: TFileView; begin if ComponentCount > 0 then Result := TFileView(Components[0]) else Result := nil; end; procedure TFileViewPage.SetFileView(aFileView: TFileView); var aComponent: TComponent; begin if ComponentCount > 0 then begin aComponent := Components[0]; aComponent.Free; end; if Assigned(aFileView) then begin aFileView.Parent := Self; BackupViewMode := EmptyStr; if Assigned(FOnChangeFileView) then FOnChangeFileView(aFileView); end; end; function TFileViewPage.GetNotebook: TFileViewNotebook; begin Result := Parent as TFileViewNotebook; end; procedure TFileViewPage.SetLockState(NewLockState: TTabLockState); begin if FLockState = NewLockState then Exit; if NewLockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab] then begin LockPath := FileView.CurrentPath; if (FLockState <> tlsNormal) or (Length(FPermanentTitle) = 0) then FPermanentTitle := GetLastDir(LockPath); end else begin LockPath := ''; if not (tb_keep_renamed_when_back_normal in gDirTabOptions) then FPermanentTitle := ''; end; FLockState := NewLockState; UpdateTitle; end; procedure TFileViewPage.SetPermanentTitle(AValue: String); begin if FPermanentTitle = AValue then Exit; FPermanentTitle := AValue; UpdateTitle; end; procedure TFileViewPage.DoActivate; begin if Assigned(FOnActivate) then FOnActivate(Self); end; // -- TFileViewNotebook ------------------------------------------------------- constructor TFileViewNotebook.Create(ParentControl: TWinControl; NotebookSide: TFilePanelSelect); begin inherited Create(ParentControl); ControlStyle := ControlStyle + [csNoFocus]; Parent := ParentControl; TabStop := False; ShowHint := True; FHintPageIndex := -1; FNotebookSide := NotebookSide; FStartDrag := False; OnShowHint := @TabShowHint; {$IFDEF MSWINDOWS} // The pages contents are removed from drawing background in EraseBackground. // But double buffering could be enabled to eliminate flickering of drawing // the tabs buttons themselves. But currently there's a bug where the buffer // bitmap is temporarily drawn in different position, probably at (0,0) and // not where pages contents start (after applying TCM_ADJUSTRECT). //DoubleBuffered := True; {$ENDIF} end; function TFileViewNotebook.GetActivePage: TFileViewPage; begin if PageIndex <> -1 then Result := GetPage(PageIndex) else Result := nil; end; function TFileViewNotebook.GetActiveView: TFileView; var APage: TFileViewPage; begin APage := GetActivePage; if Assigned(APage) then Result := APage.FileView else Result := nil; end; function TFileViewNotebook.GetFileViewOnPage(Index: Integer): TFileView; var APage: TFileViewPage; begin APage := GetPage(Index); Result := APage.FileView; end; function TFileViewNotebook.GetPage(Index: Integer): TFileViewPage; begin Result := TFileViewPage(CustomPage(Index)); end; function TFileViewNotebook.AddPage: TFileViewPage; begin Result := InsertPage(PageCount); end; function TFileViewNotebook.InsertPage(Index: Integer): TFileViewPage; begin Tabs.Insert(Index, ''); Result := GetPage(Index); ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; end; function TFileViewNotebook.NewEmptyPage: TFileViewPage; begin if tb_open_new_near_current in gDirTabOptions then Result := InsertPage(PageIndex + 1) else Result := InsertPage(PageCount); end; function TFileViewNotebook.NewPage(CloneFromPage: TFileViewPage): TFileViewPage; begin if Assigned(CloneFromPage) then begin Result := NewEmptyPage; Result.AssignPage(CloneFromPage); end else Result := nil; end; function TFileViewNotebook.NewPage(CloneFromView: TFileView): TFileViewPage; begin if Assigned(CloneFromView) then begin Result := NewEmptyPage; CloneFromView.Clone(Result); end else Result := nil; end; procedure TFileViewNotebook.RemovePage(Index: Integer); begin {$IFDEF LCLGTK2} // If removing currently active page, switch to another page first. // Otherwise there can be no page selected. if (PageIndex = Index) and (PageCount > 1) then begin if Index = PageCount - 1 then Page[Index - 1].MakeActive else Page[Index + 1].MakeActive; end; {$ENDIF} Page[Index].Free; ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; {$IFNDEF LCLGTK2} // Force-activate current page. if PageIndex <> -1 then Page[PageIndex].MakeActive; {$ENDIF} end; procedure TFileViewNotebook.RemovePage(var aPage: TFileViewPage); begin RemovePage(aPage.PageIndex); aPage := nil; end; procedure TFileViewNotebook.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin inherited WMEraseBkgnd(Message); // Always set as handled otherwise if not handled Windows will draw background // with hbrBackground brush of the window class. This might cause flickering // because later background will be again be erased but with TControl.Brush. // This is not actually needed on non-Windows because WMEraseBkgnd is not used there. Message.Result := 1; end; {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6))} procedure TFileViewNotebook.CNNotify(var Message: TLMNotify); begin // Workaround: https://github.com/doublecmd/doublecmd/issues/1570 if Message.NMHdr^.code = TCN_SELCHANGE then begin if PtrInt(Message.NMHDR^.idfrom) >= PageCount then Message.NMHDR^.idfrom:= PtrUInt(PageCount - 1); end; inherited CNNotify(Message); end; {$ENDIF} {$IF DEFINED(LCLWIN32)} procedure TFileViewNotebook.PaintWindow(DC: HDC); var ARect: TRect; begin inherited PaintWindow(DC); {$IF DEFINED(DARKWIN)} if g_darkModeEnabled then Exit; {$ENDIF} if (Win32MajorVersion >= 10) and (PageIndex > -1) then begin ARect:= TabRect(PageIndex); IntersectClipRect(DC, ARect.Left, ARect.Top, ARect.Right, ARect.Top + ScaleY(3, 96)); InflateRect(ARect, ScaleX(8, 96), 0); DrawThemeBackground(TWin32ThemeServices(ThemeServices).Theme[teToolBar], DC, TP_BUTTON, TS_CHECKED, ARect, nil); end; end; {$ENDIF} procedure TFileViewNotebook.DestroyAllPages; var i: Integer; begin for i:=PageCount-1 downto 0 do if i<>ActivePageIndex then Tabs.Delete( i ); Tabs.Delete( 0 ); end; procedure TFileViewNotebook.ActivatePrevTab; begin if PageIndex = 0 then Page[PageCount - 1].MakeActive else Page[PageIndex - 1].MakeActive; end; procedure TFileViewNotebook.ActivateNextTab; begin if PageIndex = PageCount - 1 then Page[0].MakeActive else Page[PageIndex + 1].MakeActive; end; procedure TFileViewNotebook.ActivateTabByIndex(Index: Integer); begin if Index < -1 then Exit; if Index = -1 then Page[PageCount - 1].MakeActive else if PageCount >= Index + 1 then Page[Index].MakeActive; end; function TFileViewNotebook.IndexOfPageAt(P: TPoint): Integer; begin Result:= inherited IndexOfPageAt(P); if (Result >= PageCount) then Result:= -1; end; // compared to handling hints in MouseMove(), DoShowHint() is compatible // with all WidgetSets. // on Windows, when Mouse Move in the blank of the TabControl, // MouseMove() will not be called, then the wrong hint is shown. procedure TFileViewNotebook.TabShowHint(Sender: TObject; HintInfo: PHintInfo); var ATabIndex: Integer; begin ATabIndex := IndexOfPageAt( ScreenToClient(Mouse.CursorPos) ); if ATabIndex >= 0 then begin if (ATabIndex <> PageIndex) and (Length(Page[ATabIndex].LockPath) <> 0) then HintInfo^.HintStr := '* ' + Page[ATabIndex].LockPath else HintInfo^.HintStr := View[ATabIndex].CurrentPath; end else begin HintInfo^.HintStr := ''; FHintPos := TPoint.Zero; end; if ATabIndex <> FHintPageIndex then begin FHintPageIndex := ATabIndex; FHintPos := HintInfo^.HintPos; end else begin if not FHintPos.IsZero then HintInfo^.HintPos := FHintPos; end; HintInfo^.ReshowTimeout := 500; end; procedure TFileViewNotebook.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); {$IF DEFINED(LCLGTK2)} var ArrowWidth: Integer; arrow_spacing: gint = 0; scroll_arrow_hlength: gint = 16; {$ENDIF} begin inherited; if Button = mbLeft then begin FDraggedPageIndex := IndexOfPageAt(Classes.Point(X, Y)); FStartDrag := (FDraggedPageIndex <> -1); end; // Emulate double click if (Button = mbLeft) and Assigned(OnDblClick) then begin if ((Now - FLastMouseDownTime) > ((1/86400)*(GetDoubleClickTime/1000))) then begin FLastMouseDownTime:= Now; FLastMouseDownPageIndex:= FDraggedPageIndex; end else if (FDraggedPageIndex = FLastMouseDownPageIndex) then begin {$IF DEFINED(LCLGTK2)} gtk_widget_style_get(PGtkWidget(Self.Handle), 'arrow-spacing', @arrow_spacing, 'scroll-arrow-hlength', @scroll_arrow_hlength, nil); ArrowWidth:= arrow_spacing + scroll_arrow_hlength; if (X > ArrowWidth) and (X < ClientWidth - ArrowWidth) then {$ENDIF} {$IFNDEF LCLCOCOA} OnDblClick(Self); FStartDrag:= False; FLastMouseDownTime:= 0; FLastMouseDownPageIndex:= -1; {$ELSE} FStartDrag:= False; FLastMouseDownTime:= 0; FTabDblClicked := true; {$ENDIF} end; end; end; procedure TFileViewNotebook.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited; if FStartDrag then begin FStartDrag := False; BeginDrag(False); end; end; procedure TFileViewNotebook.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {$IFDEF LCLCOCOA} if FTabDblClicked then begin OnDblClick(Self); FLastMouseDownPageIndex:= -1; FTabDblClicked := false; end; {$ENDIF} inherited; FStartDrag := False; end; procedure TFileViewNotebook.DragOver(Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); var ATabIndex: Integer; begin if (Source is TFileViewNotebook) then begin ATabIndex := IndexOfPageAt(Classes.Point(X, Y)); Accept := (Source <> Self) or ((ATabIndex <> -1) and (ATabIndex <> FDraggedPageIndex)); end else begin inherited DragOver(Source, X, Y, State, Accept); end; end; {$IFDEF LCLWIN32} procedure TFileViewNotebook.EraseBackground(DC: HDC); var ARect: TRect; SaveIndex: Integer; Clip: Integer; begin if HandleAllocated and (DC <> 0) then begin ARect := Classes.Rect(0, 0, Width, Height); Windows.TabCtrl_AdjustRect(Handle, False, ARect); SaveIndex := SaveDC(DC); Clip := ExcludeClipRect(DC, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom); if Clip <> NullRegion then begin ARect := Classes.Rect(0, 0, Width, Height); FillRect(DC, ARect, HBRUSH(Brush.Reference.Handle)); end; RestoreDC(DC, SaveIndex); end; end; procedure TFileViewNotebook.WndProc(var Message: TLMessage); begin inherited WndProc(Message); if Message.Msg = TCM_ADJUSTRECT then begin if Message.WParam = 0 then PRect(Message.LParam)^.Left := PRect(Message.LParam)^.Left - 2 else begin PRect(Message.LParam)^.Left := PRect(Message.LParam)^.Left + 2; end; end; end; {$ENDIF} procedure TFileViewNotebook.DragDrop(Source: TObject; X,Y: Integer); var ATabIndex: Integer; SourceNotebook: TFileViewNotebook; ANewPage, DraggedPage: TFileViewPage; begin if (Source is TFileViewNotebook) then begin SourceNotebook := TFileViewNotebook(Source); ATabIndex := IndexOfPageAt(Classes.Point(X, Y)); if Source = Self then begin // Move within the same panel. if ATabIndex <> -1 then Tabs.Move(FDraggedPageIndex, ATabIndex); end else if (SourceNotebook.FDraggedPageIndex < SourceNotebook.PageCount) then begin // Move page between panels. DraggedPage := SourceNotebook.Page[SourceNotebook.FDraggedPageIndex]; if ATabIndex = -1 then ATabIndex := PageCount; // Create a clone of the page in the panel. ANewPage := InsertPage(ATabIndex); ANewPage.AssignPage(DraggedPage); ANewPage.MakeActive; if (ssShift in GetKeyShiftState) and (SourceNotebook.PageCount > 1) then begin // Remove page from source panel. SourceNotebook.RemovePage(DraggedPage); end; end; end else begin inherited DragDrop(Source, X, Y); end; end; procedure TFileViewNotebook.DoChange; begin inherited DoChange; ActivePage.DoActivate; {$IF DEFINED(LCLWIN32)} if (Win32MajorVersion >= 10) {$IF DEFINED(DARKWIN)} and (not g_darkModeEnabled){$ENDIF} then Invalidate; {$ENDIF} end; function TFileViewNotebook.GetPageClass: TCustomPageClass; begin Result:= TFileViewPage; end; end. doublecmd-1.1.30/src/ufilesorting.pas0000644000175000001440000010641515104114162016602 0ustar alexxusersunit uFileSorting; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileFunctions, uFile, uFileProperty, uDisplayFile; type TSortDirection = (sdNone, sdAscending, sdDescending); TFileSorting = record SortFunctions: TFileFunctions; SortDirection: TSortDirection; end; TFileSortings = array of TFileSorting; { TBaseSorter } TBaseSorter = class private FSortings: TFileSortings; {en Checks the files list for supported properties and removes not supported sortings. Currently treats files as if they all had the same properties. } procedure CheckSupportedProperties(SupportedFileProperties: TFilePropertiesTypes); {en Compares two file records using file functions. @param(ptr1 First file) @param(ptr2 Second file) @returns(-1 lesser @br 0 equal @br 1 greater) } class function Compare(const FileSorting: TFileSorting; File1, File2: TFile): Integer; public constructor Create(const Sortings: TFileSortings); reintroduce; end; { TFileSorter } TFileSorter = class(TBaseSorter) private FSortList: TFiles; function MultiCompare(item1, item2: Pointer):Integer; procedure QuickSort(FList: PPointerList; L, R : Longint); public {en Creates the sorter. @param(Files List of files to be sorted.) @param(FileSorting Sorting which will be used to sort file records.) } constructor Create(Files: TFiles; Sortings: TFileSortings); procedure Sort; {en Sorts files in FilesToSort using ASorting. } class procedure Sort(FilesToSort: TFiles; const ASortings: TFileSortings); end; { TDisplayFileSorter } TDisplayFileSorter = class(TBaseSorter) private FDisplaySortList: TDisplayFiles; FFileToInsert: TDisplayFile; FFilesToInsert: TDisplayFiles; FFileIndexToResort: Integer; FResortSingle: Boolean; FSequentialSearch: Boolean; // Use sequential search instead of binary protected procedure BinaryInsertSingle(FileToInsert: TDisplayFile; List: TFPList; L, R: Longint); procedure BinaryResortSingle(UnsortedIndex: Integer; PList: PPointerList; L, R : Longint); function BinarySearch(DisplayFile: Pointer; PList: PPointerList; L, R: Longint; out FoundIndex: Longint): Integer; procedure InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles); procedure InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles); function MultiCompare(item1, item2: Pointer):Integer; procedure QuickSort(FList: PPointerList; L, R : Longint); {en The single file at index IndexToResort should be repositioned in the SortedFiles list. All other elements, except for the element at IndexToResort, must be already sorted. } procedure ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles); procedure SequentialInsertSingle(FileToInsert: TDisplayFile; List: TFPList); public constructor Create(Files: TDisplayFiles; Sortings: TFileSortings); constructor Create(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings); constructor Create(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings; ASequentialSearch: Boolean = False); constructor Create(IndexToResort: Integer; SortedFiles: TDisplayFiles; const Sortings: TFileSortings); procedure Sort; class procedure InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings); class procedure InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings; ASequentialSearch: Boolean = False); class procedure ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles; const ASortings: TFileSortings); class procedure Sort(FilesToSort: TDisplayFiles; const ASortings: TFileSortings); end; {en Returns true if the file functions will sort by the given sort function. } function HasSortFunction(FileFunctions: TFileFunctions; SortFunction: TFileFunction): Boolean; function HasSortFunction(FileSortings: TFileSortings; SortFunction: TFileFunction): Boolean; function GetSortDirection(FileSortings: TFileSortings; SortFunction: TFileFunction): TSortDirection; function GetSortDirection(FileSortings: TFileSortings; SortFunctions: TFileFunctions): TSortDirection; {en Adds a function to the given list of functions. } procedure AddSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); {en Deletes a function from the given list of functions. } procedure DeleteSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); {en Adds sorting by functions with a given sorting direction to existing sorting. } procedure AddSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); procedure AddOrUpdateSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); {en Checks if there is a sorting by Name, NameNoExtension or Extension and adds such sortings if there isn't. } procedure AddSortingByNameIfNeeded(var FileSortings: TFileSortings); {en Creates a deep copy of sortings. } function CloneSortings(const Sortings: TFileSortings): TFileSortings; function ICompareByDirectory(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByName(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByNameNoExt(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByExt (item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareBySize(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByDate(date1, date2: TDateTime; bSortNegative: Boolean):Integer; function ICompareByAttr(item1, item2: TFile; bSortNegative: Boolean):Integer; function CloneAndAddSortByNameIfNeeded(const Sortings: TFileSortings): TFileSortings; function ReverseSortDirection(SortDirection: TSortDirection): TSortDirection; function ReverseSortDirection(Sortings: TFileSortings): TFileSortings; implementation uses Variants, DCBasicTypes, uGlobs, DCStrUtils, uDCUtils {$IFDEF fileSortingTime} , uDebug {$ENDIF} ; {$IFDEF fileSortingTime} var fileSortingTimer: TDateTime; {$ENDIF} procedure TFPListFastMove(CurIndex, NewIndex: Integer; PList: PPointerList); var Temp: Pointer; begin Temp := PList^[CurIndex]; if NewIndex > CurIndex then System.Move(PList^[CurIndex+1], PList^[CurIndex], (NewIndex - CurIndex) * SizeOf(Pointer)) else System.Move(PList^[NewIndex], PList^[NewIndex+1], (CurIndex - NewIndex) * SizeOf(Pointer)); PList^[NewIndex] := Temp; end; function HasSortFunction(FileFunctions: TFileFunctions; SortFunction: TFileFunction): Boolean; var i: Integer; begin for i := 0 to Length(FileFunctions) - 1 do begin if SortFunction = FileFunctions[i] then Exit(True); end; Result := False; end; function HasSortFunction(FileSortings: TFileSortings; SortFunction: TFileFunction): Boolean; var i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, SortFunction) then Exit(True); end; Result := False; end; function GetSortDirection(FileSortings: TFileSortings; SortFunction: TFileFunction): TSortDirection; var i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, SortFunction) then Exit(FileSortings[i].SortDirection); end; Result := sdNone; end; function GetSortDirection(FileSortings: TFileSortings; SortFunctions: TFileFunctions): TSortDirection; var i, j: Integer; Found: Boolean; begin for i := 0 to Length(FileSortings) - 1 do begin if Length(FileSortings[i].SortFunctions) = Length(SortFunctions) then begin Found := True; for j := 0 to Length(SortFunctions) - 1 do if FileSortings[i].SortFunctions[j] <> SortFunctions[j] then begin Found := False; Break; end; if Found then Exit(FileSortings[i].SortDirection); end; end; Result := sdNone; end; procedure AddSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); begin SetLength(FileFunctions, Length(FileFunctions) + 1); FileFunctions[Length(FileFunctions) - 1] := SortFunction; end; procedure DeleteSorting(var FileSortings: TFileSortings; Index: Integer); var Len: Integer; i: Integer; begin Len := Length(FileSortings); for i := Index + 1 to Len - 1 do FileSortings[i - 1] := FileSortings[i]; SetLength(FileSortings, Len - 1); end; procedure DeleteSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); var Len: Integer; i, j: Integer; begin for i := Low(FileFunctions) to High(FileFunctions) do if FileFunctions[i] = SortFunction then begin Len := Length(FileFunctions); for j := i + 1 to Len - 1 do FileFunctions[j - 1] := FileFunctions[j]; SetLength(FileFunctions, Len - 1); Break; end; end; procedure AddSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); var SortingIndex: Integer; begin if Length(SortFunctions) > 0 then begin SortingIndex := Length(Sortings); SetLength(Sortings, SortingIndex + 1); Sortings[SortingIndex].SortFunctions := SortFunctions; Sortings[SortingIndex].SortDirection := SortDirection; end; end; procedure AddSorting(var FileSortings: TFileSortings; SortFunction: TFileFunction; SortDirection: TSortDirection); var SortFunctions: TFileFunctions = nil; begin AddSortFunction(SortFunctions, SortFunction); AddSorting(FileSortings, SortFunctions, SortDirection); end; procedure AddOrUpdateSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); var i, j: Integer; RemainingFunctions: TFileFunctions; begin if Length(SortFunctions) = 0 then Exit; RemainingFunctions := SortFunctions; // Check if there is already sorting by the functions. // If it is then reverse direction of sorting. for i := Low(Sortings) to High(Sortings) do begin RemainingFunctions := SortFunctions; for j := Low(SortFunctions) to High(SortFunctions) do begin if HasSortFunction(Sortings[i].SortFunctions, SortFunctions[j]) then DeleteSortFunction(RemainingFunctions, SortFunctions[j]); end; if Length(RemainingFunctions) = 0 then begin // Sorting contains all functions - reverse direction. Sortings[i].SortDirection := ReverseSortDirection(Sortings[i].SortDirection); SortFunctions := nil; Break; end else if Length(RemainingFunctions) < Length(SortFunctions) then begin // Sorting contains some but not all functions - delete this one and later add sorting with all functions. Sortings[i].SortDirection := sdNone; end; end; for i := High(Sortings) downto Low(Sortings) do if Sortings[i].SortDirection = sdNone then DeleteSorting(Sortings, i); AddSorting(Sortings, SortFunctions, SortDirection); end; procedure AddSortingByNameIfNeeded(var FileSortings: TFileSortings); var bSortedByName: Boolean = False; bSortedByExtension: Boolean = False; i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, fsfName) then begin bSortedByName := True; bSortedByExtension := True; Exit; end else if HasSortFunction(FileSortings[i].SortFunctions, fsfNameNoExtension) then begin bSortedByName := True; end else if HasSortFunction(FileSortings[i].SortFunctions, fsfExtension) then begin bSortedByExtension := True; end; end; if not bSortedByName then begin if not bSortedByExtension then AddSorting(FileSortings, fsfName, sdAscending) else AddSorting(FileSortings, fsfNameNoExtension, sdAscending); end else if not bSortedByExtension then AddSorting(FileSortings, fsfExtension, sdAscending); // else // There is already a sorting by filename and extension. end; function CloneSortings(const Sortings: TFileSortings): TFileSortings; var i, j: Integer; begin SetLength(Result, Length(Sortings)); for i := 0 to Length(Sortings) - 1 do begin SetLength(Result[i].SortFunctions, Length(Sortings[i].SortFunctions)); for j := 0 to Length(Sortings[i].SortFunctions) - 1 do Result[i].SortFunctions[j] := Sortings[i].SortFunctions[j]; Result[i].SortDirection := Sortings[i].SortDirection; end; end; function CloneAndAddSortByNameIfNeeded(const Sortings: TFileSortings): TFileSortings; begin Result := CloneSortings(Sortings); // Add automatic sorting by name and/or extension if there wasn't any. AddSortingByNameIfNeeded(Result); end; function ICompareByDirectory(item1, item2: TFile; bSortNegative: Boolean):Integer; var IsDir1, IsDir2: Boolean; begin IsDir1 := item1.IsDirectory or item1.IsLinkToDirectory; IsDir2 := item2.IsDirectory or item2.IsLinkToDirectory; if (not IsDir1) and (not IsDir2) then Result := 0 else if (not IsDir1) and IsDir2 then Result := 1 else if IsDir1 and (not IsDir2) then Result := -1 // Put '..' first. else if item1.Name = '..' then Result := -1 else if item2.Name = '..' then Result := 1 else if (gSortFolderMode <> sfmSortNameShowFirst) then Result := 0 else Result := CompareStrings(item1.Name, item2.Name, gSortNatural, gSortSpecial, gSortCaseSensitivity); end; function ICompareByName(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Name, item2.Name, gSortNatural, gSortSpecial, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; function ICompareByNameNoExt(item1, item2: TFile; bSortNegative: Boolean):Integer; begin // Don't sort directories only by name. if item1.IsDirectory or item1.IsLinkToDirectory or item2.IsDirectory or item2.IsLinkToDirectory then begin // Sort by full name. Result := ICompareByName(item1, item2, bSortNegative); end else begin Result := CompareStrings(item1.NameNoExt, item2.NameNoExt, gSortNatural, gSortSpecial, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; end; function ICompareByExt(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Extension, item2.Extension, gSortNatural, gSortSpecial, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; function ICompareByDate(date1, date2: TDateTime; bSortNegative: Boolean):Integer; begin if date1 = date2 then Result := 0 else begin if date1 < date2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ICompareByAttr(item1, item2: TFile; bSortNegative: Boolean):Integer; var Attr1, Attr2: TFileAttrs; begin Attr1 := item1.Attributes; Attr2 := item2.Attributes; if Attr1 = Attr2 then Result := 0 else begin if Attr1 > Attr2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ICompareBySize(item1, item2: TFile; bSortNegative: Boolean):Integer; var iSize1 : Int64; iSize2 : Int64; begin iSize1 := item1.Size; iSize2 := item2.Size; if iSize1 = iSize2 then Result := 0 else begin if iSize1 < iSize2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ICompareByVariant(Value1, Value2: Variant; bSortNegative: Boolean):Integer; begin if VarIsType(Value1, varString) then Result := CompareStrings(Value1, Value2, gSortNatural, gSortSpecial, gSortCaseSensitivity) else if Value1 = Value2 then Exit(0) else begin if Value1 < Value2 then Result := -1 else Result := +1; end; if bSortNegative then Result := -Result; end; function ReverseSortDirection(SortDirection: TSortDirection): TSortDirection; begin case SortDirection of sdAscending: Result := sdDescending; sdDescending: Result := sdAscending; end; end; function ReverseSortDirection(Sortings: TFileSortings): TFileSortings; var i: Integer; begin Result := CloneSortings(Sortings); for i := 0 to Length(Result) - 1 do Result[i].SortDirection := ReverseSortDirection(Result[i].SortDirection); end; { TBaseSorter } constructor TBaseSorter.Create(const Sortings: TFileSortings); begin FSortings := Sortings; inherited Create; end; procedure TBaseSorter.CheckSupportedProperties(SupportedFileProperties: TFilePropertiesTypes); var SortingIndex: Integer; FunctionIndex: Integer; i: Integer; begin // Check if each sort function is supported. SortingIndex := 0; while SortingIndex < Length(FSortings) do begin FunctionIndex := 0; while FunctionIndex < Length(FSortings[SortingIndex].SortFunctions) do begin if not (GetFilePropertyType(FSortings[SortingIndex].SortFunctions[FunctionIndex]) <= SupportedFileProperties) then begin for i := FunctionIndex to Length(FSortings[SortingIndex].SortFunctions) - 2 do FSortings[SortingIndex].SortFunctions[i] := FSortings[SortingIndex].SortFunctions[i+1]; SetLength(FSortings[SortingIndex].SortFunctions, Length(FSortings[SortingIndex].SortFunctions) - 1); end else Inc(FunctionIndex); end; if Length(FSortings[SortingIndex].SortFunctions) = 0 then begin for i := SortingIndex to Length(FSortings) - 2 do FSortings[i] := FSortings[i+1]; SetLength(FSortings, Length(FSortings) - 1); end else Inc(SortingIndex); end; end; class function TBaseSorter.Compare(const FileSorting: TFileSorting; File1, File2: TFile): Integer; var i: Integer; bNegative: Boolean; AFileProp: TFilePropertyType; begin Result := 0; case FileSorting.SortDirection of sdAscending: bNegative := False; sdDescending: bNegative := True; else Exit; end; for i := 0 to Length(FileSorting.SortFunctions) - 1 do begin //------------------------------------------------------ case FileSorting.SortFunctions[i] of fsfName: Result := ICompareByName(File1, File2, bNegative); fsfExtension: Result := ICompareByExt(File1, File2, bNegative); fsfSize: Result := ICompareBySize(File1, File2, bNegative); fsfAttr: Result := ICompareByAttr(File1, File2, bNegative); fsfPath: begin Result := mbCompareText(File1.Path, File2.Path); if bNegative then Result := -Result; end; fsfGroup: begin Result := mbCompareText(File1.OwnerProperty.GroupStr, File2.OwnerProperty.GroupStr); if bNegative then Result := -Result; end; fsfOwner: begin Result := mbCompareText(File1.OwnerProperty.OwnerStr, File2.OwnerProperty.OwnerStr); if bNegative then Result := -Result; end; fsfModificationTime: Result := ICompareByDate(File1.ModificationTime, File2.ModificationTime, bNegative); fsfCreationTime: Result := ICompareByDate(File1.CreationTime, File2.CreationTime, bNegative); fsfLastAccessTime: Result := ICompareByDate(File1.LastAccessTime, File2.LastAccessTime, bNegative); fsfChangeTime: Result := ICompareByDate(File1.ChangeTime, File2.ChangeTime, bNegative); fsfLinkTo: begin Result := mbCompareText(File1.LinkProperty.LinkTo, File2.LinkProperty.LinkTo); if bNegative then Result := -Result; end; fsfNameNoExtension: Result := ICompareByNameNoExt(File1, File2, bNegative); fsfType: begin Result := mbCompareText(File1.TypeProperty.Value, File2.TypeProperty.Value); if bNegative then Result := -Result; end; fsfComment: begin Result := mbCompareText(File1.CommentProperty.Value, File2.CommentProperty.Value); if bNegative then Result := -Result; end; // Variant properties from plugins else if FileSorting.SortFunctions[i] in fsfVariantAll then begin AFileProp:= TFilePropertyType(FileSorting.SortFunctions[i]); Result:= ICompareByVariant(TFileVariantProperty(File1.Properties[AFileProp]).Value, TFileVariantProperty(File2.Properties[AFileProp]).Value, bNegative) end; end; if Result <> 0 then Exit; end; end; { TDisplayFileSorter } constructor TDisplayFileSorter.Create(Files: TDisplayFiles; Sortings: TFileSortings); begin inherited Create(Sortings); FDisplaySortList := Files; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) then CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); end; constructor TDisplayFileSorter.Create(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings); begin inherited Create(Sortings); FFilesToInsert := FilesToInsert; FDisplaySortList := AlreadySortedFiles; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) and Assigned(FFilesToInsert) and (FFilesToInsert.Count > 0) then begin CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); CheckSupportedProperties(FFilesToInsert[0].FSFile.SupportedProperties); end; end; constructor TDisplayFileSorter.Create(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings; ASequentialSearch: Boolean); begin inherited Create(Sortings); FFileToInsert := FileToInsert; FDisplaySortList := AlreadySortedFiles; FSequentialSearch := ASequentialSearch; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) and Assigned(FFileToInsert) then begin CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); CheckSupportedProperties(FFileToInsert.FSFile.SupportedProperties); end; end; constructor TDisplayFileSorter.Create(IndexToResort: Integer; SortedFiles: TDisplayFiles; const Sortings: TFileSortings); begin inherited Create(Sortings); FFileIndexToResort := IndexToResort; FResortSingle := True; FDisplaySortList := SortedFiles; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) then CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); end; procedure TDisplayFileSorter.Sort; begin {$IFDEF fileSortingTime} fileSortingTimer := Now; {$ENDIF} // Restore this check when independent SortFunctions are implemented and sorting // by directory condition (gSortFolderMode <> sfmSortLikeFile) is removed from // the sorter and moved into Sortings. //if Length(FSortings) > 0 then begin if FResortSingle and Assigned(FDisplaySortList) then begin ResortSingle(FFileIndexToResort, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Resort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FFileToInsert) and Assigned(FDisplaySortList) then begin InsertSort(FFileToInsert, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Insert sort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FFilesToInsert) and Assigned(FDisplaySortList) then begin InsertSort(FFilesToInsert, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Insert sort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 1) then begin QuickSort(FDisplaySortList.List.List, 0, FDisplaySortList.List.Count-1); {$IFDEF fileSortingTime} DCDebug('FileSorter: Sorting DisplayFiles time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end; end; end; class procedure TDisplayFileSorter.InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FilesToInsert, AlreadySortedFiles, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings; ASequentialSearch: Boolean); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FileToInsert, AlreadySortedFiles, ASortings, ASequentialSearch); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(IndexToResort, SortedFiles, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.Sort(FilesToSort: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FilesToSort, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; procedure TDisplayFileSorter.BinaryInsertSingle(FileToInsert: TDisplayFile; List: TFPList; L, R: Longint); var CompareRes: Integer; FoundIndex: Longint; begin if List.Count = 0 then FoundIndex := 0 else begin CompareRes := BinarySearch(FileToInsert, List.List, L, R, FoundIndex); if CompareRes > 0 then Inc(FoundIndex); // Insert after because it's greater than FoundIndex item. end; List.Insert(FoundIndex, FileToInsert); end; procedure TDisplayFileSorter.BinaryResortSingle(UnsortedIndex: Integer; PList: PPointerList; L, R: Longint); var CompareRes: Integer; FoundIndex: Longint; begin CompareRes := BinarySearch(PList^[UnsortedIndex], PList, L, R, FoundIndex); if CompareRes = 0 then TFPListFastMove(UnsortedIndex, FoundIndex, PList) else begin if UnsortedIndex < FoundIndex then begin if CompareRes < 0 then Dec(FoundIndex); end else begin if CompareRes > 0 then Inc(FoundIndex); end; TFPListFastMove(UnsortedIndex, FoundIndex, PList); end; end; function TDisplayFileSorter.BinarySearch( DisplayFile: Pointer; PList: PPointerList; L, R: Longint; out FoundIndex: Longint): Integer; var I, J, K : Longint; begin I := L; J := R; repeat K := (I + J) div 2; Result := MultiCompare(DisplayFile, PList^[K]); if Result < 0 then J := K - 1 else if Result > 0 then I := K + 1 else Break; until I > J; FoundIndex := K; end; procedure TDisplayFileSorter.InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles); var i, j: PtrInt; L, R, FoundIndex: Longint; Psrc: PPointerList; Pcur: Pointer; SearchResult: Integer; DestList: TFPList; begin if FFilesToInsert.Count > 0 then begin if FFilesToInsert.Count = 1 then begin InsertSort(FFilesToInsert[0], AlreadySortedFiles); Exit; end else begin // First sort the files to insert of which there should be only a small number. QuickSort(FilesToInsert.List.List, 0, FilesToInsert.List.Count-1); end; Psrc := FilesToInsert.List.List; DestList := AlreadySortedFiles.List; L := 0; R := DestList.Count - 1; if R < 0 then begin // Add remaining files at the end. for j := 0 to FilesToInsert.Count - 1 do DestList.Add(Psrc^[j]); end else begin FoundIndex := 0; for i := 0 to FilesToInsert.Count - 1 do begin Pcur := Psrc^[i]; SearchResult := BinarySearch(Pcur, DestList.List, L, R, FoundIndex); // Insert Pcur after FoundIndex if it was greater. if SearchResult > 0 then Inc(FoundIndex); if FoundIndex > R then begin // Add remaining files at the end. for j := i to FilesToInsert.Count - 1 do DestList.Add(Psrc^[j]); Break; end; DestList.Insert(FoundIndex, Pcur); L := FoundIndex + 1; // Next time start searching from the next element after the one just inserted. Inc(R); // Number of elements has increased so also increase right boundary. end; end; end; end; procedure TDisplayFileSorter.InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles); begin if FSequentialSearch then SequentialInsertSingle(FileToInsert, AlreadySortedFiles.List) else BinaryInsertSingle(FileToInsert, AlreadySortedFiles.List, 0, AlreadySortedFiles.Count - 1); end; function TDisplayFileSorter.MultiCompare(item1, item2: Pointer): Integer; var i : Integer; begin Result := 0; if item1 = item2 then Exit; // Put directories first. if (gSortFolderMode <> sfmSortLikeFile) then begin Result := ICompareByDirectory(TDisplayFile(item1).FSFile, TDisplayFile(item2).FSFile, False); // Ascending if Result <> 0 then Exit; end else begin // Put '..' first. if TDisplayFile(item1).FSFile.Name = '..' then Exit(-1); if TDisplayFile(item2).FSFile.Name = '..' then Exit(+1); end; for i := 0 to Length(FSortings) - 1 do begin Result := Compare(FSortings[i], TDisplayFile(item1).FSFile, TDisplayFile(item2).FSFile); if Result <> 0 then Exit; end; end; procedure TDisplayFileSorter.QuickSort(FList: PPointerList; L, R: Longint); var I, J : Longint; P, Q : Pointer; begin repeat I := L; J := R; P := FList^[ (L + R) div 2 ]; repeat while MultiCompare(P, FList^[i]) > 0 do I := I + 1; while MultiCompare(P, FList^[J]) < 0 do J := J - 1; If I <= J then begin Q := FList^[I]; Flist^[I] := FList^[J]; FList^[J] := Q; I := I + 1; J := J - 1; end; until I > J; if L < J then QuickSort(FList, L, J); L := I; until I >= R; end; procedure TDisplayFileSorter.ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles); var PUnsorted: Pointer; PSorted: PPointerList; begin PSorted := SortedFiles.List.List; PUnsorted := PSorted^[IndexToResort]; // The element at IndexToResort must either be moved left or right, // or should stay where it is. if (IndexToResort > 0) and (MultiCompare(PUnsorted, PSorted^[IndexToResort - 1]) < 0) then begin if IndexToResort = 1 then SortedFiles.List.Exchange(IndexToResort, IndexToResort - 1) else BinaryResortSingle(IndexToResort, PSorted, 0, IndexToResort - 1); end else if (IndexToResort < SortedFiles.List.Count - 1) and (MultiCompare(PUnsorted, PSorted^[IndexToResort + 1]) > 0) then begin if IndexToResort = SortedFiles.List.Count - 2 then SortedFiles.List.Exchange(IndexToResort, IndexToResort + 1) else BinaryResortSingle(IndexToResort, PSorted, IndexToResort + 1, SortedFiles.List.Count - 1); end; end; procedure TDisplayFileSorter.SequentialInsertSingle(FileToInsert: TDisplayFile; List: TFPList); var SortedIndex: PtrInt; Pdst: PPointerList; begin SortedIndex := 0; Pdst := List.List; while (SortedIndex < List.Count) and (MultiCompare(FileToInsert, Pdst^[SortedIndex]) > 0) do Inc(SortedIndex); List.Insert(SortedIndex, FileToInsert); end; { TFileSorter } constructor TFileSorter.Create(Files: TFiles; Sortings: TFileSortings); begin inherited Create(Sortings); FSortList := Files; if Assigned(FSortList) and (FSortList.Count > 0) then CheckSupportedProperties(FSortList.Items[0].SupportedProperties); end; procedure TFileSorter.Sort; begin {$IFDEF fileSortingTime} fileSortingTimer := Now; {$ENDIF} // Restore this check when independent SortFunctions are implemented and sorting // by directory condition (gSortFolderMode <> sfmSortLikeFile) is removed from // the sorter and moved into Sortings. //if Length(FSortings) > 0 then begin if Assigned(FSortList) and (FSortList.Count > 1) then begin QuickSort(FSortList.List.List, 0, FSortList.List.Count-1); {$IFDEF fileSortingTime} DCDebug('FileSorter: Sorting FSFiles time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end; end; end; class procedure TFileSorter.Sort(FilesToSort: TFiles; const ASortings: TFileSortings); var FileListSorter: TFileSorter; begin FileListSorter := TFileSorter.Create(FilesToSort, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; { Return Values for ICompareByxxxx function > 0 (positive) Item1 is greater than Item2 0 Item1 is equal to Item2 < 0 (negative) Item1 is less than Item2 } { This function is simples support of sorting directory (handle uglobs.gDirSortFirst) Result is 0 if both parametres is directory and equal or not a directory (both). Else return +/- as ICompare**** } function TFileSorter.MultiCompare(item1, item2: Pointer):Integer; var i : Integer; begin Result := 0; if item1 = item2 then Exit; // Put directories first. if (gSortFolderMode <> sfmSortLikeFile) then begin Result := ICompareByDirectory(TFile(item1), TFile(item2), False); // Ascending if Result <> 0 then Exit; end else begin // Put '..' first. if TFile(item1).Name = '..' then Exit(-1); if TFile(item2).Name = '..' then Exit(+1); end; for i := 0 to Length(FSortings) - 1 do begin Result := Compare(FSortings[i], TFile(item1), TFile(item2)); if Result <> 0 then Exit; end; end; // From FPC: lists.inc. procedure TFileSorter.QuickSort(FList: PPointerList; L, R : Longint); var I, J : Longint; P, Q : Pointer; begin repeat I := L; J := R; P := FList^[ (L + R) div 2 ]; repeat while MultiCompare(P, FList^[i]) > 0 do I := I + 1; while MultiCompare(P, FList^[J]) < 0 do J := J - 1; If I <= J then begin Q := FList^[I]; Flist^[I] := FList^[J]; FList^[J] := Q; I := I + 1; J := J - 1; end; until I > J; if L < J then QuickSort(FList, L, J); L := I; until I >= R; end; end. doublecmd-1.1.30/src/ufileproperty.pas0000644000175000001440000007441515104114162017005 0ustar alexxusersunit uFileProperty; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; const FOLDER_SIZE_UNKN = 0; FOLDER_SIZE_ZERO = -1; FOLDER_SIZE_WAIT = -2; FOLDER_SIZE_CALC = -3; FOLDER_SIZE_ERRO = -4; type TFilePropertyType = ( fpName = 0, fpSize = 1, // = fpUncompressedSize fpCompressedSize = 2, fpOwner = 3, fpAttributes = 4, fpModificationTime = 5, fpCreationTime = 6, fpLastAccessTime = 7, fpChangeTime = 8, fpLink = 9, fpType = 10, fpComment = 11, fpInvalid = 12, fpVariant = 128, fpMaximum = 255 ); const fpAll = [Low(TFilePropertyType) .. fpInvalid]; fpVariantAll = [fpVariant .. High(TFilePropertyType)]; type TFilePropertiesTypes = set of TFilePropertyType; TFilePropertiesDescriptions = array of String;//TFileProperty; EInvalidFileProperty = class(Exception); // Forward declarations. IFilePropertyFormatter = interface; { TFileProperty } TFileProperty = class private public constructor Create; virtual; function Clone: TFileProperty; virtual; procedure CloneTo({%H-}FileProperty: TFileProperty); virtual; // Text description of the property. // Don't know if it will be really needed. class function GetDescription: String; virtual abstract; class function GetID: TFilePropertyType; virtual abstract; function AsString: String; virtual; // Formats the property value as a string using some formatter object. function Format(Formatter: IFilePropertyFormatter): String; virtual abstract; end; TFileVariantProperties = array of TFileProperty; TFileProperties = array [Low(TFilePropertyType)..fpInvalid] of TFileProperty//class(TList) { A list of TFileProperty. It would allow to query properties by index and name and by TFilePropertyType. Implement Clone if made into a class. } //end ; // -- Concrete properties --------------------------------------------------- TFileNameProperty = class(TFileProperty) private FName: String; // only name, no path procedure SetName(NewName: String); public constructor Create; override; constructor Create(Name: String); virtual; overload; function Clone: TFileNameProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format(Formatter: IFilePropertyFormatter): String; override; property Value: String read FName write SetName; end; TFileSizeProperty = class(TFileProperty) private FSize: Int64; FIsValid: Boolean; public constructor Create; override; constructor Create(Size: Int64); virtual; overload; function Clone: TFileSizeProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; // Retrieve possible values for the property. function GetMinimumValue: Int64; function GetMaximumValue: Int64; function Format(Formatter: IFilePropertyFormatter): String; override; property IsValid: Boolean read FIsValid write FIsValid; property Value: Int64 read FSize write FSize; end; { TFileCompressedSizeProperty } TFileCompressedSizeProperty = class(TFileSizeProperty) public function Clone: TFileCompressedSizeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; end; { TFileDateTimeProperty } TFileDateTimeProperty = class(TFileProperty) private FIsValid: Boolean; FDateTime: TDateTime; public constructor Create; override; constructor Create(FileTime: TFileTime); virtual; overload; constructor Create(DateTime: TDateTime); virtual; overload; procedure CloneTo(FileProperty: TFileProperty); override; function Equals(p: TObject): Boolean; override; // Retrieve possible values for the property. function GetMinimumValue: TDateTime; function GetMaximumValue: TDateTime; property IsValid: Boolean read FIsValid write FIsValid; property Value: TDateTime read FDateTime write FDateTime; end; TFileModificationDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileModificationDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; TFileCreationDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileCreationDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; TFileLastAccessDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileLastAccessDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TFileChangeDateTimeProperty } TFileChangeDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileChangeDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; {en File system attributes. } TFileAttributesProperty = class(TFileProperty) private FAttributes: TFileAttrs; public constructor Create; override; constructor Create(Attr: TFileAttrs); virtual; overload; class function CreateOSAttributes: TFileAttributesProperty; overload; class function CreateOSAttributes(Attr: TFileAttrs): TFileAttributesProperty; overload; function Clone: TFileAttributesProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; function Equals(p: TObject): Boolean; override; class function GetID: TFilePropertyType; override; function IsNativeAttributes: Boolean; // Is the file a directory. function IsDirectory: Boolean; virtual; function IsSpecial: Boolean; virtual; // Is this a system file. function IsSysFile: boolean; virtual abstract; // Is it a symbolic link. function IsLink: Boolean; virtual; // Retrieves raw attributes. function GetAttributes: TFileAttrs; virtual; // Sets raw attributes. procedure SetAttributes(Attributes: TFileAttrs); virtual; property Value: TFileAttrs read GetAttributes write SetAttributes; end; { TNtfsFileAttributesProperty } TNtfsFileAttributesProperty = class(TFileAttributesProperty) public function Clone: TNtfsFileAttributesProperty; override; // Is the file a directory. function IsDirectory: Boolean; override; function IsSpecial: Boolean; override; // Is this a system file. function IsSysFile: boolean; override; // Is it a symbolic link. function IsLink: Boolean; override; function IsReadOnly: Boolean; function IsHidden: Boolean; class function GetDescription: String; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TUnixFileAttributesProperty } TUnixFileAttributesProperty = class(TFileAttributesProperty) public function Clone: TUnixFileAttributesProperty; override; // Is the file a directory. function IsDirectory: Boolean; override; // Is this a system file. function IsSysFile: boolean; override; // Is it a symbolic link. function IsLink: Boolean; override; function IsOwnerRead: Boolean; function IsOwnerWrite: Boolean; function IsOwnerExecute: Boolean; // ... class function GetDescription: String; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TFileLinkProperty } TFileLinkProperty = class(TFileProperty) private FIsLinkToDirectory: Boolean; FIsValid: Boolean; FLinkTo: String; public constructor Create; override; function Clone: TFileLinkProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format({%H-}Formatter: IFilePropertyFormatter): String; override; property IsLinkToDirectory: Boolean read FIsLinkToDirectory write FIsLinkToDirectory; property IsValid: Boolean read FIsValid write FIsValid; property LinkTo: String read FLinkTo write FLinkTo; end; { TFileOwnerProperty } {en Owner of the file. } TFileOwnerProperty = class(TFileProperty) private FOwner: Cardinal; FGroup: Cardinal; FOwnerStr: String; FGroupStr: String; public constructor Create; override; function Clone: TFileOwnerProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format({%H-}Formatter: IFilePropertyFormatter): String; override; property Owner: Cardinal read FOwner write FOwner; property Group: Cardinal read FGroup write FGroup; property OwnerStr: String read FOwnerStr write FOwnerStr; property GroupStr: String read FGroupStr write FGroupStr; end; { TFileTypeProperty } {en File type description. } TFileTypeProperty = class(TFileProperty) private FType: String; public constructor Create; override; function Clone: TFileTypeProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format({%H-}Formatter: IFilePropertyFormatter): String; override; property Value: String read FType write FType; end; { TFileCommentProperty } TFileCommentProperty = class(TFileProperty) private FComment: String; public constructor Create; override; function Clone: TFileCommentProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format({%H-}Formatter: IFilePropertyFormatter): String; override; property Value: String read FComment write FComment; end; { TFileVariantProperty } TFileVariantProperty = class(TFileProperty) private FName: String; FValue: Variant; public constructor Create; override; constructor Create(const AName: String); virtual; overload; function Clone: TFileVariantProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Equals(p: TObject): Boolean; override; function Format({%H-}Formatter: IFilePropertyFormatter): String; override; property Value: Variant read FValue write FValue; property Name: String read FName; end; // -- Property formatter interface ------------------------------------------ IFilePropertyFormatter = interface(IInterface) ['{18EF8E34-1010-45CD-8DC9-678C7C2DC89F}'] function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; implementation uses Variants, uLng, DCOSUtils, DCFileAttributes, DCDateTimeUtils, uDefaultFilePropertyFormatter, uDebug; resourcestring rsSizeDescription = 'Size'; rsCompressedSizeDescription = 'Compressed size'; rsDateTimeDescription = 'DateTime'; rsModificationDateTimeDescription = 'Modification date/time'; // ---------------------------------------------------------------------------- constructor TFileProperty.Create; begin inherited; end; function TFileProperty.Clone: TFileProperty; begin Result:= nil; raise Exception.Create('Cannot create abstract class'); end; procedure TFileProperty.CloneTo(FileProperty: TFileProperty); begin end; function TFileProperty.AsString: String; begin Result := Format(DefaultFilePropertyFormatter); end; // ---------------------------------------------------------------------------- constructor TFileNameProperty.Create; begin Self.Create(''); end; constructor TFileNameProperty.Create(Name: String); begin inherited Create; Value := Name; end; function TFileNameProperty.Clone: TFileNameProperty; begin Result := TFileNameProperty.Create; CloneTo(Result); end; procedure TFileNameProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileNameProperty do begin FName := Self.FName; end; end; end; class function TFileNameProperty.GetDescription: String; begin Result := 'name'; end; class function TFileNameProperty.GetID: TFilePropertyType; begin Result := fpName; end; function TFileNameProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileNameProperty) then exit; if self.FName <> TFileNameProperty(p).FName then exit; Result:= true; end; function TFileNameProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatFileName(Self); end; procedure TFileNameProperty.SetName(NewName: String); var i: Integer; begin for i := 1 to Length(NewName) do if NewName[i] in AllowDirectorySeparators then begin DCDebug('Name cannot have directory separators: "%s"', [NewName]); Break; end; FName := NewName; end; // ---------------------------------------------------------------------------- constructor TFileSizeProperty.Create; begin Self.Create(0); end; constructor TFileSizeProperty.Create(Size: Int64); begin inherited Create; Value := Size; FIsValid := True; end; function TFileSizeProperty.Clone: TFileSizeProperty; begin Result := TFileSizeProperty.Create; CloneTo(Result); end; procedure TFileSizeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileSizeProperty do begin FSize := Self.FSize; FIsValid := Self.FIsValid; end; end; end; class function TFileSizeProperty.GetDescription: String; begin Result := rsSizeDescription; end; class function TFileSizeProperty.GetID: TFilePropertyType; begin Result := fpSize; end; function TFileSizeProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileSizeProperty) then exit; if self.FIsValid <> TFileSizeProperty(p).FIsValid then exit; if self.FIsValid and (self.FSize <> TFileSizeProperty(p).FSize) then exit; Result:= true; end; function TFileSizeProperty.GetMinimumValue: Int64; begin Result := 0; end; function TFileSizeProperty.GetMaximumValue: Int64; begin Result := 0; // maximum file size end; function TFileSizeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatFileSize(Self); end; // ---------------------------------------------------------------------------- function TFileCompressedSizeProperty.Clone: TFileCompressedSizeProperty; begin Result := TFileCompressedSizeProperty.Create; CloneTo(Result); end; class function TFileCompressedSizeProperty.GetDescription: String; begin Result:= rsCompressedSizeDescription; end; class function TFileCompressedSizeProperty.GetID: TFilePropertyType; begin Result := fpCompressedSize; end; // ---------------------------------------------------------------------------- constructor TFileDateTimeProperty.Create; begin Self.Create(SysUtils.Now); end; constructor TFileDateTimeProperty.Create(FileTime: TFileTime); begin Self.Create(FileTimeToDateTime(FileTime)); end; constructor TFileDateTimeProperty.Create(DateTime: TDateTime); begin inherited Create; Value := DateTime; FIsValid := True; end; procedure TFileDateTimeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileDateTimeProperty do begin FIsValid := Self.FIsValid; FDateTime := Self.FDateTime; end; end; end; function TFileDateTimeProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileDateTimeProperty) then exit; if self.FIsValid <> TFileDateTimeProperty(p).FIsValid then exit; if self.FIsValid and (self.FDateTime <> TFileDateTimeProperty(p).FDateTime) then exit; Result:= true; end; function TFileDateTimeProperty.GetMinimumValue: TDateTime; begin Result := MinDateTime; end; function TFileDateTimeProperty.GetMaximumValue: TDateTime; begin Result := MaxDateTime; end; // ---------------------------------------------------------------------------- function TFileModificationDateTimeProperty.Clone: TFileModificationDateTimeProperty; begin Result := TFileModificationDateTimeProperty.Create; CloneTo(Result); end; class function TFileModificationDateTimeProperty.GetDescription: String; begin Result := rsModificationDateTimeDescription; end; class function TFileModificationDateTimeProperty.GetID: TFilePropertyType; begin Result := fpModificationTime; end; function TFileModificationDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatModificationDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileCreationDateTimeProperty.Clone: TFileCreationDateTimeProperty; begin Result := TFileCreationDateTimeProperty.Create; CloneTo(Result); end; class function TFileCreationDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileCreationDateTimeProperty.GetID: TFilePropertyType; begin Result := fpCreationTime; end; function TFileCreationDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin if not FIsValid then Result := EmptyStr else Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileLastAccessDateTimeProperty.Clone: TFileLastAccessDateTimeProperty; begin Result := TFileLastAccessDateTimeProperty.Create; CloneTo(Result); end; class function TFileLastAccessDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileLastAccessDateTimeProperty.GetID: TFilePropertyType; begin Result := fpLastAccessTime; end; function TFileLastAccessDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileChangeDateTimeProperty.Clone: TFileChangeDateTimeProperty; begin Result := TFileChangeDateTimeProperty.Create; CloneTo(Result); end; class function TFileChangeDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileChangeDateTimeProperty.GetID: TFilePropertyType; begin Result := fpChangeTime; end; function TFileChangeDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin if not FIsValid then Result := EmptyStr else Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- constructor TFileAttributesProperty.Create; begin Create(0); end; constructor TFileAttributesProperty.Create(Attr: TFileAttrs); begin inherited Create; FAttributes := Attr; end; function TFileAttributesProperty.IsNativeAttributes: Boolean; begin {$IF DEFINED(WINDOWS)} Result := Self is TNtfsFileAttributesProperty; {$ELSEIF DEFINED(UNIX)} Result := Self is TUnixFileAttributesProperty; {$ELSE} Result := False; {$ENDIF} end; class function TFileAttributesProperty.CreateOSAttributes: TFileAttributesProperty; begin Result := CreateOSAttributes(0); end; class function TFileAttributesProperty.CreateOSAttributes(Attr: TFileAttrs): TFileAttributesProperty; begin {$IF DEFINED(WINDOWS)} Result := TNtfsFileAttributesProperty.Create(Attr); {$ELSEIF DEFINED(UNIX)} Result := TUnixFileAttributesProperty.Create(Attr); {$ELSE} Result := nil; {$ENDIF} end; function TFileAttributesProperty.Clone: TFileAttributesProperty; begin Result:= nil; raise Exception.Create('Cannot create abstract class'); end; procedure TFileAttributesProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileAttributesProperty do begin FAttributes := Self.FAttributes; end; end; end; class function TFileAttributesProperty.GetID: TFilePropertyType; begin Result := fpAttributes; end; function TFileAttributesProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileAttributesProperty) then exit; if self.FAttributes <> TFileAttributesProperty(p).FAttributes then exit; Result:= true; end; function TFileAttributesProperty.GetAttributes: TFileAttrs; begin Result := FAttributes; end; procedure TFileAttributesProperty.SetAttributes(Attributes: TFileAttrs); begin FAttributes := Attributes; end; function TFileAttributesProperty.IsDirectory: Boolean; begin Result := fpS_ISDIR(FAttributes); end; function TFileAttributesProperty.IsSpecial: Boolean; begin Result := False; end; function TFileAttributesProperty.IsLink: Boolean; begin Result := fpS_ISLNK(FAttributes); end; // ---------------------------------------------------------------------------- function TNtfsFileAttributesProperty.Clone: TNtfsFileAttributesProperty; begin Result := TNtfsFileAttributesProperty.Create; CloneTo(Result); end; function TNtfsFileAttributesProperty.IsDirectory: Boolean; begin Result:= ((FAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0); end; function TNtfsFileAttributesProperty.IsSpecial: Boolean; begin Result:= ((FAttributes and FILE_ATTRIBUTE_DEVICE) <> 0) or ((FAttributes and FILE_ATTRIBUTE_VOLUME) <> 0); end; function TNtfsFileAttributesProperty.IsSysFile: boolean; begin Result := ((FAttributes and FILE_ATTRIBUTE_HIDDEN) <> 0) or (((FAttributes and FILE_ATTRIBUTE_SYSTEM) <> 0) and ((FAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0)); end; function TNtfsFileAttributesProperty.IsLink: Boolean; begin Result:= ((FAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0); end; function TNtfsFileAttributesProperty.IsReadOnly: Boolean; begin Result := (FAttributes and FILE_ATTRIBUTE_READONLY) <> 0; end; function TNtfsFileAttributesProperty.IsHidden: Boolean; begin Result := (FAttributes and FILE_ATTRIBUTE_HIDDEN) <> 0; end; class function TNtfsFileAttributesProperty.GetDescription: String; begin Result:= EmptyStr; end; function TNtfsFileAttributesProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatNtfsAttributes(Self) end; // ---------------------------------------------------------------------------- function TUnixFileAttributesProperty.Clone: TUnixFileAttributesProperty; begin Result := TUnixFileAttributesProperty.Create; CloneTo(Result); end; function TUnixFileAttributesProperty.IsDirectory: Boolean; begin Result:= ((FAttributes and S_IFMT) = S_IFDIR); end; function TUnixFileAttributesProperty.IsSysFile: Boolean; begin Result := False; end; function TUnixFileAttributesProperty.IsLink: Boolean; begin Result:= ((FAttributes and S_IFMT) = S_IFLNK); end; function TUnixFileAttributesProperty.IsOwnerRead: Boolean; begin Result:= False; end; function TUnixFileAttributesProperty.IsOwnerWrite: Boolean; begin Result:= False; end; function TUnixFileAttributesProperty.IsOwnerExecute: Boolean; begin Result:= False; end; class function TUnixFileAttributesProperty.GetDescription: String; begin Result:= EmptyStr; end; function TUnixFileAttributesProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatUnixAttributes(Self); end; // ---------------------------------------------------------------------------- constructor TFileLinkProperty.Create; begin inherited Create; FIsLinkToDirectory := False; FIsValid := True; end; function TFileLinkProperty.Clone: TFileLinkProperty; begin Result := TFileLinkProperty.Create; CloneTo(Result); end; procedure TFileLinkProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileLinkProperty do begin FIsLinkToDirectory := Self.FIsLinkToDirectory; FIsValid := Self.FIsValid; FLinkTo := Self.FLinkTo; end; end; end; class function TFileLinkProperty.GetDescription: String; begin Result := ''; end; class function TFileLinkProperty.GetID: TFilePropertyType; begin Result := fpLink; end; function TFileLinkProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileLinkProperty) then exit; if self.FIsValid <> TFileLinkProperty(p).FIsValid then exit; if self.FIsValid then begin if self.FIsLinkToDirectory <> TFileLinkProperty(p).FIsLinkToDirectory then exit; if self.FLinkTo <> TFileLinkProperty(p).FLinkTo then exit; end; Result:= true; end; function TFileLinkProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := ''; end; // ---------------------------------------------------------------------------- constructor TFileOwnerProperty.Create; begin inherited Create; end; function TFileOwnerProperty.Clone: TFileOwnerProperty; begin Result := TFileOwnerProperty.Create; CloneTo(Result); end; procedure TFileOwnerProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileOwnerProperty do begin FOwner := Self.FOwner; FGroup := Self.FGroup; FOwnerStr := Self.FOwnerStr; FGroupStr := Self.FGroupStr; end; end; end; class function TFileOwnerProperty.GetDescription: String; begin Result := ''; end; class function TFileOwnerProperty.GetID: TFilePropertyType; begin Result := fpOwner; end; function TFileOwnerProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileOwnerProperty) then exit; if self.FOwner <> TFileOwnerProperty(p).FOwner then exit; if self.FGroup <> TFileOwnerProperty(p).FGroup then exit; Result:= true; end; function TFileOwnerProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := ''; end; { TFileTypeProperty } constructor TFileTypeProperty.Create; begin inherited Create; end; function TFileTypeProperty.Clone: TFileTypeProperty; begin Result := TFileTypeProperty.Create; CloneTo(Result); end; procedure TFileTypeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileTypeProperty do begin FType := Self.FType; end; end; end; class function TFileTypeProperty.GetDescription: String; begin Result := ''; end; class function TFileTypeProperty.GetID: TFilePropertyType; begin Result := fpType; end; function TFileTypeProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileTypeProperty) then exit; if self.FType <> TFileTypeProperty(p).FType then exit; Result:= true; end; function TFileTypeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := FType; end; { TFileCommentProperty } constructor TFileCommentProperty.Create; begin inherited Create; end; function TFileCommentProperty.Clone: TFileCommentProperty; begin Result := TFileCommentProperty.Create; CloneTo(Result); end; procedure TFileCommentProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileCommentProperty do begin FComment := Self.FComment; end; end; end; class function TFileCommentProperty.GetDescription: String; begin Result:= ''; end; class function TFileCommentProperty.GetID: TFilePropertyType; begin Result := fpComment; end; function TFileCommentProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileCommentProperty) then exit; if self.FComment <> TFileCommentProperty(p).FComment then exit; Result:= true; end; function TFileCommentProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result:= FComment; end; { TFileVariantProperty } constructor TFileVariantProperty.Create; begin inherited Create; FValue:= Unassigned; end; constructor TFileVariantProperty.Create(const AName: String); begin Create; FName:= AName; end; function TFileVariantProperty.Clone: TFileVariantProperty; begin Result := TFileVariantProperty.Create; CloneTo(Result); end; procedure TFileVariantProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileVariantProperty do begin FName := Self.FName; FValue := Self.FValue; end; end; end; class function TFileVariantProperty.GetDescription: String; begin Result:= EmptyStr; end; class function TFileVariantProperty.GetID: TFilePropertyType; begin Result:= fpVariant; end; function TFileVariantProperty.Equals(p: TObject): Boolean; begin Result:= false; if not (p is TFileVariantProperty) then exit; if self.FName <> TFileVariantProperty(p).FName then exit; if self.FValue <> TFileVariantProperty(p).FValue then exit; Result:= true; end; function TFileVariantProperty.Format(Formatter: IFilePropertyFormatter): String; begin if not VarIsBool(FValue) then Result := FValue else if FValue then result := rsSimpleWordTrue else result := rsSimpleWordFalse; end; end. doublecmd-1.1.30/src/ufileprocs.pas0000644000175000001440000002046615104114162016244 0ustar alexxusers{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz some file routines contributors: Mattias Gaertner (from Lazarus code) Copyright (C) 2007-2010 Koblov Alexander (Alexx2000@mail.ru) } unit uFileProcs; {$mode objfpc}{$H+} interface uses Classes; {en Create a chain of directories @param(DirectoryName The full path to directory) @returns(@true if DirectoryName already existed or was created succesfully. If it failed to create any of the parts, @false is returned.) } function mbForceDirectory(DirectoryName: string): boolean; {en Copies a file. @param(sSrc String expression that specifies the name of the file to be copied) @param(sDst String expression that specifies the target file name) @returns(The function returns @true if successful, @false otherwise) } function CopyFile(const sSrc, sDst: String; bAppend: Boolean = False): Boolean; {en Remove the contents of directory recursively @param(sFolderName String expression that specifies the name of the folder to be removed) } procedure DelTree(const sFolderName: String); {en Write string to a text file and append newline @param(hFile Handle of file) @param(S String for writing) } procedure FileWriteLn(hFile: THandle; S: String); function GetNextCopyName(FileName: String; IsDirectory: Boolean): String; function mbFileIsText(const FileName: String): Boolean; function mbReadFileToString(const FileName: String): String; implementation uses LCLProc, Dialogs, SysUtils, uLng, uGlobs, DCClassesUtf8, DCStrUtils, DCOSUtils, uFileSystemFileSource, uFile, uFileSystemDeleteOperation, uFileSourceOperationOptions, uAdministrator; const cBlockSize=16384; // size of block if copyfile // if pb is assigned > use, else work without pb :-) function CopyFile(const sSrc, sDst: String; bAppend: Boolean): Boolean; var src: TFileStreamEx = nil; dst: TFileStreamEx = nil; iDstBeg:Integer; // in the append mode we store original size Buffer: PChar = nil; CopyPropertiesOptions: TCopyAttributesOptions; begin Result:=False; if not mbFileExists(sSrc) then Exit; GetMem(Buffer,cBlockSize+1); try try src:=TFileStreamEx.Create(sSrc,fmOpenRead or fmShareDenyNone); if not Assigned(src) then Exit; if bAppend then begin dst:=TFileStreamEx.Create(sDst,fmOpenReadWrite); dst.Seek(0,soFromEnd); // seek to end end else dst:=TFileStreamEx.Create(sDst,fmCreate); if not Assigned(dst) then Exit; iDstBeg:=dst.Size; // we dont't use CopyFrom, because it's alocate and free buffer every time is called while (dst.Size+cBlockSize)<= (src.Size+iDstBeg) do begin Src.ReadBuffer(Buffer^, cBlockSize); dst.WriteBuffer(Buffer^, cBlockSize); end; if (iDstBeg+src.Size)>dst.Size then begin // dst.CopyFrom(src,src.Size-dst.size); src.ReadBuffer(Buffer^, src.Size+iDstBeg-dst.size); dst.WriteBuffer(Buffer^, src.Size+iDstBeg-dst.size); end; CopyPropertiesOptions := CopyAttributesOptionCopyAll; if gDropReadOnlyFlag then Include(CopyPropertiesOptions, caoRemoveReadOnlyAttr); Result := mbFileCopyAttr(sSrc, sDst, CopyPropertiesOptions) = []; // chmod, chgrp except on EStreamError do MessageDlg('Error', Format(rsMsgErrCannotCopyFile, [sSrc, sDst]), mtError, [mbOK], 0); end; finally if assigned(src) then FreeAndNil(src); if assigned(dst) then FreeAndNil(dst); if assigned(Buffer) then FreeMem(Buffer); end; end; procedure DelTree(const sFolderName: String); var DeleteOperation: TFileSystemDeleteOperation = nil; aFiles: TFiles = nil; begin aFiles := TFiles.Create(sFolderName); try aFiles.Add(TFileSystemFileSource.CreateFileFromFile(sFolderName)); DeleteOperation := TFileSystemDeleteOperation.Create( TFileSystemFileSource.GetFileSource, aFiles); DeleteOperation.DeleteReadOnly := fsoogYes; DeleteOperation.SymLinkOption := fsooslDontFollow; DeleteOperation.SkipErrors := True; DeleteOperation.Execute; finally FreeAndNil(aFiles); FreeAndNil(DeleteOperation); end; end; procedure FileWriteLn(hFile: THandle; S: String); begin S:= S + LineEnding; FileWrite(hFile, PAnsiChar(S)^, Length(S)); end; function mbForceDirectory(DirectoryName: string): boolean; var i: integer; sDir: string; begin if DirectoryName = '' then Exit; DirectoryName := IncludeTrailingPathDelimiter(DirectoryName); i:= 1; if Pos('\\', DirectoryName) = 1 then // if network path begin i := CharPos(PathDelim, DirectoryName, 3); // index of the end of computer name i := CharPos(PathDelim, DirectoryName, i + 1); // index of the end of first remote directory end; // Move past path delimiter at the beginning. if (i = 1) and (DirectoryName[i] = PathDelim) then i := i + 1; while i<=length(DirectoryName) do begin if DirectoryName[i]=PathDelim then begin sDir:=copy(DirectoryName,1,i-1); if not mbDirectoryExists(sDir) then begin Result:=mbCreateDir(sDir); if not Result then exit; end; end; Inc(i); end; Result := True; end; function GetNextCopyName(FileName: String; IsDirectory: Boolean): String; var CopyNumber: Int64 = 1; sFilePath, sFileName, SuffixStr: String; begin SuffixStr:= ''; sFilePath:= ExtractFilePath(FileName); sFileName:= ExtractFileName(FileName); repeat case gTypeOfDuplicatedRename of drLegacyWithCopy: begin {$IFDEF UNIX} if (Length(sFileName) > 0) and (sFileName[1] = ExtensionSeparator) then Result := sFilePath + ExtensionSeparator + Format(rsCopyNameTemplate, [CopyNumber, Copy(sFileName, 2, MaxInt)]) else {$ENDIF} Result := sFilePath + Format(rsCopyNameTemplate, [CopyNumber, sFileName]); end; drLikeWindows7, drLikeTC: begin if IsDirectory then Result := FileName + SuffixStr else Result := sFilePath + RemoveFileExt(sFileName) + SuffixStr + ExtractFileExt(sFileName); end; end; Inc(CopyNumber); case gTypeOfDuplicatedRename of drLikeWindows7: SuffixStr:= ' (' + IntToStr(CopyNumber) + ')'; drLikeTC: SuffixStr:= '(' + IntToStr(CopyNumber) + ')'; end; until not mbFileSystemEntryExists(Result); end; function mbFileIsText(const FileName: String): Boolean; const BUF_LEN = 4096; var Len: Integer; H, L: Integer; Wide: Boolean; Buffer: String; Handle: THandle; P, F: PAnsiChar; begin Handle:= FileOpenUAC(FileName, fmOpenRead or fmShareDenyNone); if (Handle = feInvalidHandle) then Exit(False); try Wide:= False; SetLength(Buffer{%H-}, BUF_LEN); Len:= FileRead(Handle, Buffer[1], BUF_LEN); if Len > 0 then begin P:= PAnsiChar(Buffer); F:= P + Len; // UTF-8 BOM if (P[0] = #$EF) and (P[1] = #$BB) and (P[2] = #$BF) then begin Inc(P, 3); end // UTF-16LE BOM else if (P[0] = #$FF) and (P[1] = #$FE) then begin H:= 1; L:= 0; Inc(P, 2); Wide:= True; end // UTF-16BE BOM else if (P[0] = #$FE) and (P[1] = #$FF) then begin H:= 0; L:= 1; Inc(P, 2); Wide:= True; end; if not Wide then begin while P < F do begin case P^ of #0..#8, #11, #14..#25, #27..#31: Exit(False); end; Inc(P); end; end else begin while P < F do begin if P[H] = #0 then begin case P[L] of #0..#8, #11, #14..#25, #27..#31: Exit(False); end; end; Inc(P, 2); end; end; end; finally FileClose(Handle); end; Result:= True; end; function mbReadFileToString(const FileName: String): String; var ASize: Int64; Handle: THandle; begin Result:= EmptyStr; Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); if Handle <> feInvalidHandle then begin ASize:= FileGetSize(Handle); SetLength(Result, ASize); if Length(Result) > 0 then begin if FileRead(Handle, Result[1], ASize) <> ASize then begin SetLength(Result, 0); end; end; FileClose(Handle); end; end; end. doublecmd-1.1.30/src/ufilepanelselect.pas0000644000175000001440000000023115104114162017401 0ustar alexxusersunit uFilePanelSelect; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFilePanelSelect = (fpLeft, fpRight); implementation end. doublecmd-1.1.30/src/ufilefunctions.pas0000644000175000001440000005060315104114162017122 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit Copyright (C) 2008-2020 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFileFunctions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Menus, uFile, uFileProperty, uFileSource; type TFileFunction = (fsfName = 0, fsfExtension = 1, fsfSize = 2, fsfAttr = 3, fsfPath = 4, fsfGroup = 5, fsfOwner = 6, fsfModificationTime = 7, fsfCreationTime = 8, fsfLastAccessTime = 9, fsfChangeTime = 10, fsfLinkTo = 11, fsfNameNoExtension = 12, fsfType = 13, fsfComment = 14, fsfCompressedSize = 15, fsfInvalid = 16, fsfVariant = Ord(fpVariant), fsfMaximum = Ord(fpMaximum)); TFileFunctions = array of TFileFunction; const fsfVariantAll = [fsfVariant..fsfMaximum]; const TFileFunctionStrings: array [Low(TFileFunction)..fsfInvalid] of string = ('GETFILENAME', 'GETFILEEXT', 'GETFILESIZE', 'GETFILEATTR', 'GETFILEPATH', 'GETFILEGROUP', 'GETFILEOWNER', 'GETFILETIME', 'GETFILECREATIONTIME', 'GETFILELASTACCESSTIME', 'GETFILECHANGETIME', 'GETFILELINKTO', 'GETFILENAMENOEXT', 'GETFILETYPE', 'GETFILECOMMENT', 'GETFILECOMPRESSEDSIZE', '' // fsfInvalid ); function FormatFileFunction(FuncS: string; AFile: TFile; const AFileSource: IFileSource; RetrieveProperties: Boolean = False): string; function FormatFileFunctions(FuncS: String; AFile: TFile; const AFileSource: IFileSource): String; function GetVariantFileProperty(const FuncS: String; AFile: TFile; const AFileSource: IFileSource): Variant; function GetFileFunctionByName(FuncS: string): TFileFunction; function GetFilePropertyType(FileFunction: TFileFunction): TFilePropertiesTypes; inline; procedure FillContentFieldMenu(MenuOrMenuItem: TObject; OnMenuItemClick: TNotifyEvent; const FileSystem: String = ''); procedure FillFileFuncList; const sFuncTypeDC = 'DC'; sFuncTypePlugin = 'PLUGIN'; var FileFunctionsStr: TStringList; implementation uses StrUtils, WdxPlugin, uWdxModule, uGlobs, uLng, uDefaultFilePropertyFormatter, uFileSourceProperty, uWfxPluginFileSource, uWfxModule, uColumns, DCFileAttributes, DCStrUtils, DCBasicTypes, Variants, uDCUtils, uTypes; const ATTR_OCTAL = 'OCTAL'; //***Note: Number of elements in "FILE_SIZE" should normally fit with the number of element in "TFileSizeFormat" we have in "uTypes" unit.: FILE_SIZE: array[0..11] of String = ('FLOAT', 'BYTE', 'KILO', 'MEGA', 'GIGA', 'TERA', 'PERSFLOAT', 'PERSBYTE', 'PERSKILO', 'PERSMEGA', 'PERSGIGA', 'PERSTERA'); // Which file properties must be supported for each file function to work. const TFileFunctionToProperty: array [Low(TFileFunction)..fsfInvalid] of TFilePropertiesTypes = ([fpName], [fpName], [fpSize], [fpAttributes], [] { path }, [fpOwner], [fpOwner], [fpModificationTime], [fpCreationTime], [fpLastAccessTime], [fpChangeTime], [fpLink], [fpName], [fpType], [fpComment], [fpCompressedSize], [] { invalid }); //Return type (Script or DC or Plugin etc) function GetModType(str: String): String; begin if pos('(', Str) > 0 then Result := Copy(Str, 1, pos('(', Str) - 1) else Result := EmptyStr; end; //Return name in (). (SriptName or PluginName etc) function GetModName(str: String): String; var s: String; begin s := str; if pos('(', S) > 0 then Delete(s, 1, pos('(', S)) else Exit(EmptyStr); if pos(')', s) > 0 then Result := Copy(s, 1, pos(')', s) - 1); end; //Return function name (DCFunction,PluginFunction etc) function GetModFunctionName(str: String): String; var s: String; begin s := str; if pos('.', S) > 0 then Delete(s, 1, pos('.', S)) else Exit(EmptyStr); if pos('{', S) > 0 then Result := Copy(s, 1, pos('{', S) - 1); end; // Return function parameters function GetModFunctionParams(str: String): String; var I: Integer; S: String; begin S := str; I := pos('{', S); if I < 0 then Exit(EmptyStr); Delete(S, 1, I); I := pos('}', S); if I < 0 then Exit(EmptyStr); Result := Copy(S, 1, I - 1); end; function FormatFileFunction(FuncS: string; AFile: TFile; const AFileSource: IFileSource; RetrieveProperties: Boolean): string; var AIndex: Integer; AValue: Variant; FileFunction: TFileFunction; AType, AFunc, AParam: String; AFileProperty: TFileVariantProperty; FilePropertiesNeeded: TFilePropertiesTypes; begin Result := EmptyStr; //--------------------- AType := upcase(GetModType(FuncS)); AFunc := upcase(GetModFunctionName(FuncS)); AParam := upcase(GetModFunctionParams(FuncS)); //--------------------- //Internal doublecmd function //------------------------------------------------------ if AType = sFuncTypeDC then begin AIndex:= FileFunctionsStr.IndexOfName(AFunc); if AIndex < 0 then Exit; FileFunction:= TFileFunction(AIndex); // Retrieve additional properties if needed if RetrieveProperties then begin FilePropertiesNeeded:= TFileFunctionToProperty[FileFunction]; if aFileSource.CanRetrieveProperties(AFile, FilePropertiesNeeded) then aFileSource.RetrieveProperties(AFile, FilePropertiesNeeded, []); end; case FileFunction of fsfName: begin // Show square brackets around directories if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := gFolderPrefix + AFile.Name + gFolderPostfix else Result := AFile.Name; end; fsfExtension: begin Result := AFile.Extension; end; fsfSize: begin if (AFile.IsDirectory or AFile.IsLinkToDirectory) and ((not (fpSize in AFile.SupportedProperties)) or (AFile.Size = 0)) then begin if AFile.IsLinkToDirectory then Result := rsAbbrevDisplayLink else Result := rsAbbrevDisplayDir; end else if fpSize in AFile.SupportedProperties then begin if AFile.IsDirectory and (AFile.Size < 0) then begin case AFile.Size of FOLDER_SIZE_ZERO: Result := '0'; FOLDER_SIZE_WAIT: Result := '??'; FOLDER_SIZE_CALC: Result := '--'; FOLDER_SIZE_ERRO: Result := '0?'; end; end else if AFile.SizeProperty.IsValid then begin if Length(AParam) = 0 then Result := AFile.Properties[fpSize].Format(DefaultFilePropertyFormatter) else begin for AIndex:= 0 to High(FILE_SIZE) do begin if AParam = FILE_SIZE[AIndex] then begin Result := cnvFormatFileSize(AFile.Size, TFileSizeFormat(AIndex), gFileSizeDigits); Break; end; end; end; end; end; end; fsfAttr: if fpAttributes in AFile.SupportedProperties then begin if (AFile.Properties[fpAttributes] is TUnixFileAttributesProperty) and (AParam = ATTR_OCTAL) then Result := FormatUnixModeOctal(AFile.Attributes) else Result := AFile.Properties[fpAttributes].Format(DefaultFilePropertyFormatter); end; fsfPath: Result := AFile.Path; fsfGroup: if fpOwner in AFile.SupportedProperties then Result := AFile.OwnerProperty.GroupStr; fsfOwner: if fpOwner in AFile.SupportedProperties then Result := AFile.OwnerProperty.OwnerStr; fsfModificationTime: if fpModificationTime in AFile.SupportedProperties then begin if AFile.ModificationTimeProperty.IsValid then begin if Length(AParam) > 0 then Result := SysUtils.FormatDateTime(AParam, AFile.ModificationTime) else Result := AFile.Properties[fpModificationTime].Format(DefaultFilePropertyFormatter); end; end; fsfCreationTime: if fpCreationTime in AFile.SupportedProperties then begin if Length(AParam) > 0 then Result := SysUtils.FormatDateTime(AParam, AFile.CreationTime) else Result := AFile.Properties[fpCreationTime].Format(DefaultFilePropertyFormatter); end; fsfLastAccessTime: if fpLastAccessTime in AFile.SupportedProperties then begin if Length(AParam) > 0 then Result := SysUtils.FormatDateTime(AParam, AFile.LastAccessTime) else Result := AFile.Properties[fpLastAccessTime].Format(DefaultFilePropertyFormatter); end; fsfChangeTime: if fpChangeTime in AFile.SupportedProperties then begin if Length(AParam) > 0 then Result := SysUtils.FormatDateTime(AParam, AFile.ChangeTime) else Result := AFile.Properties[fpChangeTime].Format(DefaultFilePropertyFormatter); end; fsfLinkTo: if fpLink in AFile.SupportedProperties then Result := AFile.LinkProperty.LinkTo; fsfNameNoExtension: begin // Show square brackets around directories if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := gFolderPrefix + AFile.NameNoExt + gFolderPostfix else Result := AFile.NameNoExt; end; fsfType: if fpType in AFile.SupportedProperties then Result := AFile.TypeProperty.Format(DefaultFilePropertyFormatter); fsfComment: if fpComment in AFile.SupportedProperties then Result := AFile.CommentProperty.Format(DefaultFilePropertyFormatter); fsfCompressedSize: begin if (AFile.IsDirectory or AFile.IsLinkToDirectory) and ((not (fpCompressedSize in AFile.SupportedProperties)) or (AFile.CompressedSize = 0)) then begin if AFile.IsLinkToDirectory then Result := rsAbbrevDisplayLink else Result := rsAbbrevDisplayDir; end else if fpCompressedSize in AFile.SupportedProperties then Result := AFile.Properties[fpCompressedSize].Format(DefaultFilePropertyFormatter); end; end; end //------------------------------------------------------ //Plugin function //------------------------------------------------------ else if AType = sFuncTypePlugin then begin // Retrieve additional properties if needed if RetrieveProperties then begin AValue:= GetVariantFileProperty(FuncS, AFile, AFileSource); if not VarIsBool(AValue) then Result := AValue else if AValue then Result := rsSimpleWordTrue else Result := rsSimpleWordFalse; end else begin for AIndex:= 0 to High(AFile.VariantProperties) do begin AFileProperty:= TFileVariantProperty(AFile.VariantProperties[AIndex]); if Assigned(AFileProperty) and SameText(FuncS, AFileProperty.Name) then begin Result:= AFileProperty.Format(DefaultFilePropertyFormatter); Break; end; end; end; end; //------------------------------------------------------ end; function FormatFileFunctions(FuncS: String; AFile: TFile; const AFileSource: IFileSource): String; var P: Integer; begin Result:= EmptyStr; while True do begin P := Pos('[', FuncS); if P = 0 then Break else if P > 1 then Result:= Result + Copy(FuncS, 1, P - 1); Delete(FuncS, 1, P); P := Pos(']', FuncS); if P = 0 then Break else if P > 1 then Result:= Result + FormatFileFunction(Copy(FuncS, 1, P - 1), AFile, AFileSource, True); Delete(FuncS, 1, P); end; if Length(FuncS) <> 0 then Result:= Result + FuncS; end; function GetFileFunctionByName(FuncS: String): TFileFunction; var AIndex: Integer; AType, AFunc: String; begin AType := UpCase(GetModType(FuncS)); AFunc := UpCase(GetModFunctionName(FuncS)); // Only internal DC functions. if AType = sFuncTypeDC then begin AIndex := FileFunctionsStr.IndexOfName(AFunc); if AIndex >= 0 then Exit(TFileFunction(AIndex)); end else if AType = sFuncTypePlugin then Exit(fsfVariant); Result := fsfInvalid; end; function GetVariantFileProperty(const FuncS: String; AFile: TFile; const AFileSource: IFileSource): Variant; var AType, AName, AFunc, AParam: String; begin Result := Unassigned; //--------------------- AType := upcase(GetModType(FuncS)); AName := upcase(GetModName(FuncS)); AFunc := upcase(GetModFunctionName(FuncS)); AParam := upcase(GetModFunctionParams(FuncS)); //------------------------------------------------------ //Plugin function //------------------------------------------------------ if AType = sFuncTypePlugin then begin if AFileSource.IsClass(TWfxPluginFileSource) then begin with AFileSource as IWfxPluginFileSource do begin if WfxModule.ContentPlugin and WfxModule.FileParamVSDetectStr(AFile) then begin Result := WfxModule.CallContentGetValueV(AFile.FullPath, AFunc, AParam, 0); end; end; end else if fspDirectAccess in AFileSource.Properties then begin if not gWdxPlugins.IsLoaded(AName) then if not gWdxPlugins.LoadModule(AName) then Exit; if gWdxPlugins.GetWdxModule(AName).FileParamVSDetectStr(AFile) then begin Result := gWdxPlugins.GetWdxModule(AName).CallContentGetValueV( AFile.FullPath, AFunc, AParam, 0); end; end; end; //------------------------------------------------------ end; function GetFilePropertyType(FileFunction: TFileFunction): TFilePropertiesTypes; begin if FileFunction >= fsfVariant then Result:= [TFilePropertyType(FileFunction)] else begin Result:= TFileFunctionToProperty[FileFunction]; end; end; procedure AddModule(MenuItem: TMenuItem; OnMenuItemClick: TNotifyEvent; Module: TWDXModule); var J, K: Integer; MI, MI2: TMenuItem; WdxField: TWdxField; begin MI:= TMenuItem.Create(MenuItem); MI.Caption:= Module.Name; MenuItem.Add(MI); // Load fields list for J:= 0 to Module.FieldList.Count - 1 do begin WdxField:= TWdxField(Module.FieldList.Objects[J]); if not (WdxField.FType in [ft_fulltext, ft_fulltextw]) then begin MI:= TMenuItem.Create(MenuItem); MI.Tag:= 1; MI.Caption:= WdxField.LName; MI.Hint:= Module.FieldList[J]; MenuItem.Items[MenuItem.Count - 1].Add(MI); if WdxField.FType <> ft_multiplechoice then begin for K:= 0 to High(WdxField.FUnits) do begin MI2:=TMenuItem.Create(MenuItem); MI2.Tag:= 2; MI2.Caption:= WdxField.LUnits[K]; MI2.Hint:= WdxField.FUnits[K]; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); end; end; if MI.Count = 0 then MI.OnClick:= OnMenuItemClick; end; end; end; procedure FillContentFieldMenu(MenuOrMenuItem: TObject; OnMenuItemClick: TNotifyEvent; const FileSystem: String); var I, J: Integer; MI, MI2, localMenuItem: TMenuItem; Module: TWDXModule; FileSize: TDynamicStringArray; begin if MenuOrMenuItem.ClassType = TPopupMenu then localMenuItem := TPopupMenu(MenuOrMenuItem).Items else localMenuItem := TMenuItem(MenuOrMenuItem); localMenuItem.Clear; // DC commands MI:= TMenuItem.Create(localMenuItem); MI.Caption:= 'DC'; localMenuItem.Add(MI); for I:= 0 to FileFunctionsStr.Count - 1 do begin MI:= TMenuItem.Create(localMenuItem); MI.Tag:= 0; MI.Hint:= FileFunctionsStr.Names[I]; MI.Caption:= FileFunctionsStr.ValueFromIndex[I] + ' (' + MI.Hint + ')'; localMenuItem.Items[0].Add(MI); // Special case for attributes if TFileFunctionStrings[fsfAttr] = FileFunctionsStr.Names[I] then begin // String attributes MI2:= TMenuItem.Create(localMenuItem); MI2.Tag:= 3; MI2.Hint:= ''; MI2.Caption:= rsMnuContentDefault; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); // Octal attributes MI2:= TMenuItem.Create(localMenuItem); MI2.Tag:= 3; MI2.Hint:= ATTR_OCTAL; MI2.Caption:= rsMnuContentOctal; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); end; // Special case for size if TFileFunctionStrings[fsfSize] = FileFunctionsStr.Names[I] then begin // Default format MI2:= TMenuItem.Create(localMenuItem); MI2.Tag:= 3; MI2.Hint:= ''; MI2.Caption:= rsMnuContentDefault; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); FileSize:= SplitString(rsOptFileSizeFloat + ';' + rsLegacyOperationByteSuffixLetter + ';' + rsLegacyDisplaySizeSingleLetterKilo + ';' + rsLegacyDisplaySizeSingleLetterMega + ';' + rsLegacyDisplaySizeSingleLetterGiga + ';' + rsLegacyDisplaySizeSingleLetterTera + ';' + rsOptPersonalizedFileSizeFormat, ';'); for J:= 0 to High(FILE_SIZE) do begin MI2:= TMenuItem.Create(localMenuItem); MI2.Tag:= 3; MI2.Hint:= FILE_SIZE[J]; MI2.Caption:= FileSize[J]; MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); end; end; if MI.Count = 0 then MI.OnClick:= OnMenuItemClick; end; // Plugins if (FileSystem = EmptyStr) or SameText(FileSystem, FS_GENERAL) then begin MI:= TMenuItem.Create(localMenuItem); MI.Caption:= rsOptionsEditorPlugins; localMenuItem.Add(MI); for I:= 0 to gWdxPlugins.Count - 1 do begin Module:= gWdxPlugins.GetWdxModule(I); if not (Module.IsLoaded or Module.LoadModule) then Continue; AddModule(MI, OnMenuItemClick, Module); end; end else begin I:= gWFXPlugins.IndexOfName(FileSystem); if (I >= 0) then begin Module:= gWFXPlugins.LoadModule(gWFXPlugins.FileName[I]); if Assigned(Module) and TWfxModule(Module).ContentPlugin then AddModule(localMenuItem, OnMenuItemClick, Module); end; end; end; procedure FillFileFuncList; begin with FileFunctionsStr do begin Add(TFileFunctionStrings[fsfName] + '=' + rsFuncName); Add(TFileFunctionStrings[fsfExtension] + '=' + rsFuncExt); Add(TFileFunctionStrings[fsfSize] + '=' + rsFuncSize); Add(TFileFunctionStrings[fsfAttr] + '=' + rsFuncAttr); Add(TFileFunctionStrings[fsfPath] + '=' + rsFuncPath); Add(TFileFunctionStrings[fsfGroup] + '=' + rsFuncGroup); Add(TFileFunctionStrings[fsfOwner] + '=' + rsFuncOwner); Add(TFileFunctionStrings[fsfModificationTime] + '=' + rsFuncMTime); Add(TFileFunctionStrings[fsfCreationTime] + '=' + rsFuncCTime); Add(TFileFunctionStrings[fsfLastAccessTime] + '=' + rsFuncATime); Add(TFileFunctionStrings[fsfChangeTime] + '=' + rsFuncHTime); Add(TFileFunctionStrings[fsfLinkTo] + '=' + rsFuncLinkTo); Add(TFileFunctionStrings[fsfNameNoExtension] + '=' + rsFuncNameNoExt); Add(TFileFunctionStrings[fsfType] + '=' + rsFuncType); Add(TFileFunctionStrings[fsfComment] + '=' + rsFuncComment); Add(TFileFunctionStrings[fsfCompressedSize] + '=' + rsFuncCompressedSize); end; end; initialization FileFunctionsStr := TStringList.Create; finalization FreeAndNil(FileFunctionsStr); end. doublecmd-1.1.30/src/ufile.pas0000644000175000001440000007434215104114162015177 0ustar alexxusersunit uFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileProperty, DCBasicTypes; type { TFile } TFile = class private // Cached values for extension and name. // Automatically set when name changes. FExtension: String; // AFile.FPath then begin Include(Result, TFilePropertyType.fpName); exit; end; for PropertyType := Low(FProperties) to High(FProperties) do begin if Assigned(self.FProperties[PropertyType]) then begin if not self.FProperties[PropertyType].equals(AFile.FProperties[PropertyType]) then Include(Result, PropertyType); end else begin if Assigned(AFile.FProperties[PropertyType]) then Include(Result, PropertyType); end; end; if Length(self.FVariantProperties) <> Length(AFile.FVariantProperties) then begin Include(Result, TFilePropertyType.fpVariant); exit; end; for AIndex := Low(FVariantProperties) to High(FVariantProperties) do begin if Assigned(Self.FVariantProperties[AIndex]) then begin if not self.FVariantProperties[AIndex].equals(AFile.FVariantProperties[AIndex]) then begin Include(Result, TFilePropertyType.fpVariant); exit; end; end else begin if Assigned(AFile.FVariantProperties[AIndex]) then begin Include(Result, TFilePropertyType.fpVariant); exit; end; end; end; end; procedure TFile.ClearProperties; var PropertyType: TFilePropertyType; begin ClearVariantProperties; for PropertyType := TFilePropertyType(Ord(fpName) + 1) to High(FProperties) do FreeAndNil(FProperties[PropertyType]); FSupportedProperties := [fpName]; end; procedure TFile.ClearVariantProperties; var AIndex: Integer; begin for AIndex:= Low(FVariantProperties) to High(FVariantProperties) do FreeAndNil(FVariantProperties[AIndex]); FSupportedProperties := FSupportedProperties * fpAll; end; function TFile.ReleaseProperty(PropType: TFilePropertyType): TFileProperty; var AIndex: Integer; begin if PropType in fpVariantAll then begin AIndex := Ord(PropType) - Ord(fpVariant); if (AIndex >= 0) and (AIndex <= High(FVariantProperties)) then begin Result := FVariantProperties[AIndex]; FVariantProperties[AIndex] := nil; end; end else begin Result := FProperties[PropType]; FProperties[PropType] := nil; end; Exclude(FSupportedProperties, PropType); end; function TFile.GetExtension: String; begin Result := FExtension; end; function TFile.GetNameNoExt: String; begin Result := FNameNoExt; end; function TFile.GetName: String; begin Result := TFileNameProperty(FProperties[fpName]).Value; end; procedure TFile.SetName(NewName: String); begin TFileNameProperty(FProperties[fpName]).Value := NewName; UpdateNameAndExtension(NewName); end; function TFile.GetProperty(PropType: TFilePropertyType): TFileProperty; var AIndex: Integer; begin if PropType < fpInvalid then Result := FProperties[PropType] else begin AIndex := Ord(PropType) - Ord(fpVariant); if (AIndex >= 0) and (AIndex <= High(FVariantProperties)) then Result := FVariantProperties[AIndex] else begin Result := nil; end; end; end; procedure TFile.SetProperty(PropType: TFilePropertyType; NewValue: TFileProperty); var AIndex: Integer; begin if PropType < fpInvalid then FProperties[PropType] := NewValue else begin AIndex := Ord(PropType) - Ord(fpVariant); if AIndex > High(FVariantProperties) then SetLength(FVariantProperties, AIndex + 4); FVariantProperties[AIndex]:= NewValue; end; if Assigned(NewValue) then Include(FSupportedProperties, PropType) else Exclude(FSupportedProperties, PropType); end; function TFile.GetFullPath: String; begin Result := Path + TFileNameProperty(FProperties[fpName]).Value; end; procedure TFile.SetFullPath(const NewFullPath: String); var aExtractedName: String; begin if NewFullPath <> '' then begin if NewFullPath[Length(NewFullPath)] = PathDelim then begin // Only path passed. SetPath(NewFullPath); SetName(''); end else begin aExtractedName := ExtractFileName(NewFullPath); SetPath(Copy(NewFullPath, 1, Length(NewFullPath) - Length(aExtractedName))); SetName(aExtractedName); end; end; end; procedure TFile.SetPath(const NewPath: String); begin if NewPath = '' then FPath := '' else FPath := IncludeTrailingPathDelimiter(NewPath); end; function TFile.GetAttributes: TFileAttrs; begin Result := TFileAttributesProperty(FProperties[fpAttributes]).Value; end; procedure TFile.SetAttributes(NewAttributes: TFileAttrs); begin TFileAttributesProperty(FProperties[fpAttributes]).Value := NewAttributes; UpdateNameAndExtension(Name); end; function TFile.GetSize: Int64; begin Result := TFileSizeProperty(FProperties[fpSize]).Value; end; procedure TFile.SetSize(NewSize: Int64); begin TFileSizeProperty(FProperties[fpSize]).Value := NewSize; end; function TFile.GetCompressedSize: Int64; begin Result := TFileCompressedSizeProperty(FProperties[fpCompressedSize]).Value; end; procedure TFile.SetCompressedSize(NewCompressedSize: Int64); begin TFileCompressedSizeProperty(FProperties[fpCompressedSize]).Value := NewCompressedSize; end; function TFile.GetModificationTime: TDateTime; begin Result := TFileModificationDateTimeProperty(FProperties[fpModificationTime]).Value; end; procedure TFile.SetModificationTime(NewTime: TDateTime); begin TFileModificationDateTimeProperty(FProperties[fpModificationTime]).Value := NewTime; end; function TFile.GetCreationTime: TDateTime; begin Result := TFileCreationDateTimeProperty(FProperties[fpCreationTime]).Value; end; procedure TFile.SetCreationTime(NewTime: TDateTime); begin TFileCreationDateTimeProperty(FProperties[fpCreationTime]).Value := NewTime; end; function TFile.GetLastAccessTime: TDateTime; begin Result := TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]).Value; end; procedure TFile.SetLastAccessTime(NewTime: TDateTime); begin TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]).Value := NewTime; end; function TFile.GetIsLinkToDirectory: Boolean; begin if fpLink in SupportedProperties then Result := TFileLinkProperty(FProperties[fpLink]).IsLinkToDirectory else Result := False; end; procedure TFile.SetIsLinkToDirectory(NewValue: Boolean); begin TFileLinkProperty(FProperties[fpLink]).IsLinkToDirectory := NewValue; end; function TFile.GetType: String; begin Result := TFileTypeProperty(FProperties[fpType]).Value; end; procedure TFile.SetType(NewValue: String); begin TFileTypeProperty(FProperties[fpType]).Value := NewValue; end; function TFile.GetNameProperty: TFileNameProperty; begin Result := TFileNameProperty(FProperties[fpName]); end; procedure TFile.SetNameProperty(NewValue: TFileNameProperty); begin FProperties[fpName] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpName) else Exclude(FSupportedProperties, fpName); end; function TFile.GetAttributesProperty: TFileAttributesProperty; begin Result := TFileAttributesProperty(FProperties[fpAttributes]); end; procedure TFile.SetAttributesProperty(NewValue: TFileAttributesProperty); begin FProperties[fpAttributes] := NewValue; if Assigned(NewValue) then begin Include(FSupportedProperties, fpAttributes); UpdateNameAndExtension(Name); end else Exclude(FSupportedProperties, fpAttributes); end; function TFile.GetSizeProperty: TFileSizeProperty; begin Result := TFileSizeProperty(FProperties[fpSize]); end; procedure TFile.SetSizeProperty(NewValue: TFileSizeProperty); begin FProperties[fpSize] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpSize) else Exclude(FSupportedProperties, fpSize); end; function TFile.GetCompressedSizeProperty: TFileCompressedSizeProperty; begin Result := TFileCompressedSizeProperty(FProperties[fpCompressedSize]); end; procedure TFile.SetCompressedSizeProperty(NewValue: TFileCompressedSizeProperty); begin FProperties[fpCompressedSize] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpCompressedSize) else Exclude(FSupportedProperties, fpCompressedSize); end; function TFile.GetModificationTimeProperty: TFileModificationDateTimeProperty; begin Result := TFileModificationDateTimeProperty(FProperties[fpModificationTime]); end; procedure TFile.SetModificationTimeProperty(NewValue: TFileModificationDateTimeProperty); begin FProperties[fpModificationTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpModificationTime) else Exclude(FSupportedProperties, fpModificationTime); end; function TFile.GetCreationTimeProperty: TFileCreationDateTimeProperty; begin Result := TFileCreationDateTimeProperty(FProperties[fpCreationTime]); end; procedure TFile.SetCreationTimeProperty(NewValue: TFileCreationDateTimeProperty); begin FProperties[fpCreationTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpCreationTime) else Exclude(FSupportedProperties, fpCreationTime); end; function TFile.GetLastAccessTimeProperty: TFileLastAccessDateTimeProperty; begin Result := TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]); end; procedure TFile.SetLastAccessTimeProperty(NewValue: TFileLastAccessDateTimeProperty); begin FProperties[fpLastAccessTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpLastAccessTime) else Exclude(FSupportedProperties, fpLastAccessTime); end; function TFile.GetChangeTime: TDateTime; begin Result := TFileChangeDateTimeProperty(FProperties[fpChangeTime]).Value; end; procedure TFile.SetChangeTime(AValue: TDateTime); begin TFileChangeDateTimeProperty(FProperties[fpChangeTime]).Value := AValue; end; function TFile.GetChangeTimeProperty: TFileChangeDateTimeProperty; begin Result := TFileChangeDateTimeProperty(FProperties[fpChangeTime]); end; procedure TFile.SetChangeTimeProperty(AValue: TFileChangeDateTimeProperty); begin FProperties[fpChangeTime] := AValue; if Assigned(AValue) then Include(FSupportedProperties, fpChangeTime) else Exclude(FSupportedProperties, fpChangeTime); end; function TFile.GetLinkProperty: TFileLinkProperty; begin Result := TFileLinkProperty(FProperties[fpLink]); end; procedure TFile.SetLinkProperty(NewValue: TFileLinkProperty); begin FProperties[fpLink] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpLink) else Exclude(FSupportedProperties, fpLink); end; function TFile.GetOwnerProperty: TFileOwnerProperty; begin Result := TFileOwnerProperty(FProperties[fpOwner]); end; procedure TFile.SetOwnerProperty(NewValue: TFileOwnerProperty); begin FProperties[fpOwner] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpOwner) else Exclude(FSupportedProperties, fpOwner); end; function TFile.GetTypeProperty: TFileTypeProperty; begin Result := TFileTypeProperty(FProperties[fpType]); end; procedure TFile.SetTypeProperty(NewValue: TFileTypeProperty); begin FProperties[fpType] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpType) else Exclude(FSupportedProperties, fpType); end; function TFile.GetCommentProperty: TFileCommentProperty; begin Result := TFileCommentProperty(FProperties[fpComment]); end; procedure TFile.SetCommentProperty(NewValue: TFileCommentProperty); begin FProperties[fpComment] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpComment) else Exclude(FSupportedProperties, fpComment); end; function TFile.IsNameValid: Boolean; begin if Name <> '..' then Result := True else Result := False; end; function TFile.IsDirectory: Boolean; begin if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(FProperties[fpAttributes]).IsDirectory else Result := False; end; function TFile.IsSpecial: Boolean; begin if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(FProperties[fpAttributes]).IsSpecial else Result := False; end; function TFile.IsLink: Boolean; begin if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(FProperties[fpAttributes]).IsLink else Result := False; end; function TFile.IsExecutable: Boolean; var FileAttributes: TFileAttributesProperty; begin if fpAttributes in SupportedProperties then begin FileAttributes := TFileAttributesProperty(FProperties[fpAttributes]); {$IF DEFINED(MSWINDOWS)} Result := not FileAttributes.IsDirectory; {$ELSEIF DEFINED(UNIX)} Result := (not FileAttributes.IsDirectory) and (FileAttributes.Value AND (S_IXUSR OR S_IXGRP OR S_IXOTH)>0); {$ELSE} Result := False; {$ENDIF} end else Result := False; end; function TFile.IsSysFile: Boolean; begin {$IF DEFINED(MSWINDOWS)} if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(Properties[fpAttributes]).IsSysFile else Result := False; {$ELSEIF DEFINED(DARWIN)} if (Length(Name) > 1) and (Name[1] = '.') and (Name <> '..') then exit(true); if Name='Icon'#$0D then exit(true); exit(false); {$ELSE} // Files beginning with '.' are treated as system/hidden files on Unix. Result := (Length(Name) > 1) and (Name[1] = '.') and (Name <> '..'); {$ENDIF} end; function TFile.IsHidden: Boolean; begin if not (fpAttributes in SupportedProperties) then Result := False else begin if Properties[fpAttributes] is TNtfsFileAttributesProperty then Result := TNtfsFileAttributesProperty(Properties[fpAttributes]).IsHidden else begin // Files beginning with '.' are treated as system/hidden files on Unix. Result := (Length(Name) > 1) and (Name[1] = '.') and (Name <> '..'); end; end; end; procedure TFile.SplitIntoNameAndExtension(const FileName: string; var aFileNameOnly: string; var aExtension: string); var i : longint; begin I := Length(FileName); while (I > 0) and (FileName[I] <> ExtensionSeparator) do Dec(I); if I > 1 then begin aFileNameOnly := Copy(FileName, 1, I - 1); aExtension := Copy(FileName, I + 1, MaxInt); end else begin // For files that does not have '.' or that have only // one '.' and beginning with '.' there is no extension. aFileNameOnly := FileName; aExtension := ''; end; end; procedure TFile.UpdateNameAndExtension(const FileName: string); begin // Cache Extension and NameNoExt. if (FileName = '') or IsDirectory or IsLinkToDirectory or IsSpecial then begin // For directories there is no extension. FExtension := ''; FNameNoExt := FileName; end else begin SplitIntoNameAndExtension(FileName, FNameNoExt, FExtension); end; end; // ---------------------------------------------------------------------------- constructor TFiles.Create(const APath: String); begin inherited Create; FList := TFPList.Create; FOwnsObjects := True; Path := APath; end; destructor TFiles.Destroy; begin Clear; FreeAndNil(FList); inherited; end; function TFiles.Clone: TFiles; begin Result := TFiles.Create(Path); CloneTo(Result); end; procedure TFiles.CloneTo(Files: TFiles); var i: Integer; begin for i := 0 to FList.Count - 1 do begin Files.Add(Get(i).Clone); end; end; function TFiles.GetCount: Integer; begin Result := FList.Count; end; procedure TFiles.SetCount(Count: Integer); begin FList.Count := Count; end; function TFiles.Add(AFile: TFile): Integer; begin Result := FList.Add(AFile); end; procedure TFiles.Insert(AFile: TFile; AtIndex: Integer); begin FList.Insert(AtIndex, AFile); end; procedure TFiles.Delete(AtIndex: Integer); var p: Pointer; begin p := FList.Items[AtIndex]; TFile(p).Free; FList.Delete(AtIndex); end; procedure TFiles.Clear; var i: Integer; p: Pointer; begin if OwnsObjects then begin for i := 0 to FList.Count - 1 do begin p := FList.Items[i]; TFile(p).Free; end; end; FList.Clear; end; function TFiles.Get(Index: Integer): TFile; begin Result := TFile(FList.Items[Index]); end; procedure TFiles.Put(Index: Integer; AFile: TFile); begin FList.Items[Index] := AFile; end; procedure TFiles.SetPath(const NewPath: String); begin if NewPath = '' then FPath := '' else FPath := IncludeTrailingPathDelimiter(NewPath); end; // ---------------------------------------------------------------------------- constructor TFileTreeNode.Create; begin Create(nil); end; constructor TFileTreeNode.Create(aFile: TFile); begin FSubNodes := nil; FFile := aFile; FData := nil; inherited Create; end; constructor TFileTreeNode.Create(aFile: TFile; DataClass: TClass); begin Create(aFile); FData := DataClass.Create; end; destructor TFileTreeNode.Destroy; var i: Integer; begin inherited Destroy; FreeAndNil(FFile); if Assigned(FSubNodes) then begin for i := 0 to FSubNodes.Count - 1 do TFileTreeNode(FSubNodes.Items[i]).Free; FreeAndNil(FSubNodes); end; FreeAndNil(FData); end; function TFileTreeNode.AddSubNode(aFile: TFile): Integer; var aNode: TFileTreeNode; begin if not Assigned(FSubNodes) then FSubNodes := TFPList.Create; aNode := TFileTreeNode.Create(aFile); Result := FSubNodes.Add(aNode); end; procedure TFileTreeNode.RemoveSubNode(Index: Integer); begin if (Index >= 0) and (Index < FSubNodes.Count) then begin TFileTreeNode(FSubNodes.Items[Index]).Free; FSubNodes.Delete(Index); end; end; function TFileTreeNode.Get(Index: Integer): TFileTreeNode; begin Result := TFileTreeNode(FSubNodes.Items[Index]); end; function TFileTreeNode.GetCount: Integer; begin if Assigned(FSubNodes) then Result := FSubNodes.Count else Result := 0; end; procedure TFileTreeNode.SetCount(Count: Integer); begin if not Assigned(FSubNodes) then FSubNodes := TFPList.Create; FSubNodes.Count := Count; end; procedure TFileTreeNode.SetData(NewData: TObject); var TmpData: TObject; begin if Assigned(FData) then begin TmpData := FData; FData := NewData; TmpData.Free; end else FData := NewData; end; end. doublecmd-1.1.30/src/ufavoritetabs.pas0000644000175000001440000015533415104114162016752 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Structure/Load/Save/Working With FavoriteTab and List of them Copyright (C) 2016-2017 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit ufavoritetabs; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Menus, ExtCtrls, Controls, ComCtrls, //DC DCXmlConfig; const FAVORITETABS_SEPARATORSTRING: string = '···························'; // In "uMainCommands", the procedure "DoOnClickMenuJobFavoriteTabs" is called when a menu item of "FavoriteTabs" popup menu item is clicked. // Associted to the "tag" properties of the menuitem, these offset are added to "tag" to help for dispatching of action. TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING = $10000; TAGOFFSET_FAVTABS_SOMETHINGELSE = $20000; // These must match with the order of "TTabConfigLocation" afew lines below. gsConfigLocationName: array[0..5] of string = ('left', 'right', 'active', 'inactive', 'both', 'none'); type { TTabsConfigLocation } // These must match with the order of "gsConfigLocationName" // Note: NEVER CHANGE THE ORDER OF THESE CONSTANTS SINCE SETTINGS SAVED ASSUMED THIS ORDER FOREVER. TTabsConfigLocation = (tclLeft, tclRight, tclActive, tclInactive, tclBoth, tclNone); TTabsFlagsAlreadyDestroyed = set of (tfadLeft, tfadRight); { TKindOfFavoriteTabsEntry } TKindOfFavoriteTabsEntry = (fte_NULL, fte_ACTUALFAVTABS, fte_SEPARATOR, fte_STARTMENU, fte_ENDMENU); { TKindFavoriteTabsMenuPopulation } TKindFavoriteTabsMenuPopulation = (ftmp_JUSTFAVTABS, ftmp_FAVTABSWITHCONFIG); { TPositionWhereToAddFavoriteTabs } TPositionWhereToAddFavoriteTabs = (afte_First, afte_Last, afte_Alphabetical); { TProcedureWhenClickMenuItem} TProcedureWhenClickOnMenuItem = procedure(Sender: TObject) of object; { TFavoriteTabs } TFavoriteTabs = class private FDispatcher: TKindOfFavoriteTabsEntry; FFavoriteTabsName: string; // Friendly name, what the user decides, see, use, breath! FDestinationForSavedLeftTabs: TTabsConfigLocation; // Configured restoration destination side for what was saved from left panel. FDestinationForSavedRightTabs: TTabsConfigLocation; // Configured restoration destination side for what was saved from right panel. FExistingTabsToKeep: TTabsConfigLocation; // Useful when we restore tabs, to determine if we keep or not the existing ones. FSaveDirHistory: boolean; // Indicate if we save the dir history or not for that setup. FUniqueID: TGUID; // Key info! This is the unique number identifying the FactoriteTabs. FGroupNumber: integer; // We won't save in the XML. Just useful run-time with the tree. public constructor Create; procedure CopyToFavoriteTabs(DestinationFavoriteTabs: TFavoriteTabs; bExactCopyWanted: boolean = True); function GuidToXMLString: string; procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); property Dispatcher: TKindOfFavoriteTabsEntry read FDispatcher write FDispatcher; property FavoriteTabsName: string read FFavoriteTabsName write FFavoriteTabsName; property DestinationForSavedLeftTabs: TTabsConfigLocation read FDestinationForSavedLeftTabs write FDestinationForSavedLeftTabs; property DestinationForSavedRightTabs: TTabsConfigLocation read FDestinationForSavedRightTabs write FDestinationForSavedRightTabs; property ExistingTabsToKeep: TTabsConfigLocation read FExistingTabsToKeep write FExistingTabsToKeep; property SaveDirHistory: boolean read FSaveDirHistory write FSaveDirHistory; property UniqueID: TGUID read FUniqueID write FUniqueID; property GroupNumber: integer read FGroupNumber write FGroupNumber; end; { TFavoriteTabsList } TFavoriteTabsList = class(TList) private FLastFavoriteTabsLoadedUniqueId: TGUID; FLastImportationStringUniqueId: TStringList; FAssociatedMainMenuItem: TMenuItem; function GetFavoriteTabs(Index: integer): TFavoriteTabs; function GetBestIndexForAlphabeticalNewFavoriteTabs(sFavoriteTabsNameToFindAPlaceFor: string): integer; procedure AddToListAndToXmlFileHeader(paramFavoriteTabs: TFavoriteTabs; AConfig: TXmlConfig; SpecifiedIndex: integer = -1); function ActualDumpFavoriteTabsListInXml(AConfig: TXmlConfig): boolean; public constructor Create; destructor Destroy; override; procedure Clear; override; function Add(FavoriteTabs: TFavoriteTabs): integer; procedure DeleteFavoriteTabs(Index: integer); procedure CopyFavoriteTabsListToFavoriteTabsList(var DestinationFavoriteTabsList: TFavoriteTabsList); function GetIndexLastFavoriteTabsLoaded: integer; function GetIndexPreviousLastFavoriteTabsLoaded: integer; function GetIndexNextLastFavoriteTabsLoaded: integer; function GetIndexForSuchUniqueID(SearchedGUID: TGUID): integer; function GetSuggestedParamsForFavoriteTabs(sAttemptedName: string; var SuggestedFavoriteTabsName: string): boolean; function ComputeSignature(Seed:dword=$00000000): dword; procedure LoadAllListFromXml; function LoadTabsFromXmlEntry(paramIndexToLoad: integer): boolean; function SaveNewEntryFavoriteTabs(paramFavoriteTabsEntryName: string): boolean; function ReSaveTabsToXMLEntry(paramIndexToSave: integer): boolean; function SaveCurrentFavoriteTabsIfAnyPriorToChange: boolean; function RefreshXmlFavoriteTabsListSection: boolean; procedure PopulateMenuWithFavoriteTabs(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenFavoriteTabItemClicked: TProcedureWhenClickOnMenuItem; KindFavoriteTabMenuPopulation: TKindFavoriteTabsMenuPopulation); procedure RefreshAssociatedMainMenu; procedure LoadTTreeView(ParamTreeView: TTreeView); procedure RefreshFromTTreeView(ParamTreeView: TTreeView); function ImportFromLegacyTabsFile(paramFilename: string; SpecifiedIndex: integer = -1): boolean; function ExportToLegacyTabsFile(index: integer; OutputDirectory: string): boolean; function GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName: string): integer; property FavoriteTabs[Index: integer]: TFavoriteTabs read GetFavoriteTabs; property LastFavoriteTabsLoadedUniqueId: TGUID read FLastFavoriteTabsLoadedUniqueId write FLastFavoriteTabsLoadedUniqueId; property AssociatedMainMenuItem: TMenuItem read FAssociatedMainMenuItem write FAssociatedMainMenuItem; property LastImportationStringUniqueId: TStringList read FLastImportationStringUniqueId write FLastImportationStringUniqueId; end; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, crc, Graphics, Forms, lazutf8, Dialogs, //DC fMain, DCFileAttributes, uDebug, uDCUtils, uLng, DCOSUtils, uGlobs, uShowMsg, uFilePanelSelect, DCStrUtils; { GetSingleXmlFavoriteTabsFilename } function GetSingleXmlFavoriteTabsFilename: string; begin Result := mbExpandFileName(IncludeTrailingPathDelimiter(EnvVarConfigPath) + 'favoritetabs.xml'); end; { XmlStringToGuid } function XmlStringToGuid(sXmlString: string): TGUID; begin sXmlString := '{' + copy(sXmlString, 5, (length(sXmlString) - 4)) + '}'; Result := StringToGuid(sXmlString); end; { TFavoriteTabs } { TFavoriteTabs.Create } constructor TFavoriteTabs.Create; begin inherited Create; FDispatcher := fte_NULL; FFavoriteTabsName := ''; FDestinationForSavedLeftTabs := tclLeft; FDestinationForSavedRightTabs := tclRight; FExistingTabsToKeep := tclNone; FSaveDirHistory := False; FUniqueID := DCGetNewGUID; FGroupNumber := 0; end; { TFavoriteTabs.CopyToFavoriteTabs } procedure TFavoriteTabs.CopyToFavoriteTabs(DestinationFavoriteTabs: TFavoriteTabs; bExactCopyWanted: boolean = True); begin DestinationFavoriteTabs.Dispatcher := FDispatcher; DestinationFavoriteTabs.FavoriteTabsName := FFavoriteTabsName; DestinationFavoriteTabs.DestinationForSavedLeftTabs := FDestinationForSavedLeftTabs; DestinationFavoriteTabs.DestinationForSavedRightTabs := FDestinationForSavedRightTabs; DestinationFavoriteTabs.ExistingTabsToKeep := FExistingTabsToKeep; DestinationFavoriteTabs.SaveDirHistory := FSaveDirHistory; if bExactCopyWanted then DestinationFavoriteTabs.UniqueID := FUniqueId else DestinationFavoriteTabs.UniqueID := DCGetNewGUID; DestinationFavoriteTabs.GroupNumber := FGroupNumber; end; {TFavoriteTabs.GuidToXMLString } function TFavoriteTabs.GuidToXMLString: string; begin Result := GuidToString(FUniqueID); Result := 'GUID' + copy(Result, 2, (length(Result) - 2)); end; { TFavoriteTabs.SaveToXml } procedure TFavoriteTabs.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); begin AConfig.SetAttr(ANode, 'UniqueID', GuidToString(FUniqueID)); case Dispatcher of fte_NULL: begin AConfig.SetAttr(ANode, 'Name', ''); end; fte_ACTUALFAVTABS: begin AConfig.SetAttr(ANode, 'Name', FFavoriteTabsName); AConfig.SetAttr(ANode, 'DestLeft', integer(FDestinationForSavedLeftTabs)); AConfig.SetAttr(ANode, 'DestRight', integer(FDestinationForSavedRightTabs)); AConfig.SetAttr(ANode, 'ExistingKeep', integer(FExistingTabsToKeep)); AConfig.SetAttr(ANode, 'SaveDirHistory', FSaveDirHistory); end; fte_SEPARATOR: begin AConfig.SetAttr(ANode, 'Name', '-'); end; fte_STARTMENU: begin AConfig.SetAttr(ANode, 'Name', '-' + FFavoriteTabsName); end; fte_ENDMENU: begin AConfig.SetAttr(ANode, 'Name', '--'); end; end; end; { TFavoriteTabsList } { TFavoriteTabsList.Create } constructor TFavoriteTabsList.Create; begin inherited Create; FLastFavoriteTabsLoadedUniqueId := DCGetNewGUID; FLastImportationStringUniqueId := TStringList.Create; FAssociatedMainMenuItem := nil; end; { TFavoriteTabsList.Destroy } destructor TFavoriteTabsList.Destroy; begin if Assigned(FLastImportationStringUniqueId) then FreeAndNil(FLastImportationStringUniqueId); inherited; end; { TFavoriteTabsList.Clear } procedure TFavoriteTabsList.Clear; var i: integer; begin for i := 0 to Count - 1 do FavoriteTabs[i].Free; inherited Clear; end; { TFavoriteTabsList.Add } function TFavoriteTabsList.Add(FavoriteTabs: TFavoriteTabs): integer; begin Result := inherited Add(FavoriteTabs); end; { TFavoriteTabsList.DeleteFavoriteTab } procedure TFavoriteTabsList.DeleteFavoriteTabs(Index: integer); begin FavoriteTabs[Index].Free; Delete(Index); end; { TFavoriteTabsList.GetFavoriteTabs } function TFavoriteTabsList.GetFavoriteTabs(Index: integer): TFavoriteTabs; begin Result := TFavoriteTabs(Items[Index]); end; { GenericCopierProcessNode } // Will copy a given Xml structure from a certain node to another one. // Maybe this function should be located elsewhere but for now it's here. // WARNING: "GenericCopierProcessNode" is recursive and may call itself! procedure GenericCopierProcessNode(paramInputNode: TXmlNode; paramOutputConfig: TXmlConfig; paramOutputNode: TXmlNode); var InnerInputNode, InnerOutputNode: TXmlNode; iAttribute: integer; begin if paramInputNode = nil then Exit; // Stoppe si on a atteint une feuille if paramInputNode.NodeName <> '#text' then begin if paramOutputNode <> nil then InnerOutputNode := paramOutputConfig.AddNode(paramOutputNode, paramInputNode.NodeName) else InnerOutputNode := paramOutputConfig.FindNode(paramOutputConfig.RootNode, paramInputNode.NodeName, True); end else begin paramOutputConfig.SetValue(paramOutputNode, '', UTF16ToUTF8(paramInputNode.NodeValue)); end; // Ajoute un nœud à l'arbre s'il existe if paramInputNode.HasAttributes and (paramInputNode.Attributes.Length > 0) then for iAttribute := 0 to pred(paramInputNode.Attributes.Length) do paramOutputConfig.SetAttr(InnerOutputNode, paramInputNode.Attributes[iAttribute].NodeName, UTF16ToUTF8(paramInputNode.Attributes[iAttribute].NodeValue)); // Va au nœud enfant InnerInputNode := paramInputNode.ChildNodes.Item[0]; // Traite tous les nœuds enfants while InnerInputNode <> nil do begin GenericCopierProcessNode(InnerInputNode, paramOutputConfig, InnerOutputNode); InnerInputNode := InnerInputNode.NextSibling; end; end; { TFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList } procedure TFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(var DestinationFavoriteTabsList: TFavoriteTabsList); var LocalFavoriteTabs: TFavoriteTabs; Index: longint; begin // Let's delete possible previous list content for Index := pred(DestinationFavoriteTabsList.Count) downto 0 do DestinationFavoriteTabsList.DeleteFavoriteTabs(Index); DestinationFavoriteTabsList.Clear; // Now let's create entries and add them one by one to the destination list. for Index := 0 to pred(Count) do begin LocalFavoriteTabs := TFavoriteTabs.Create; FavoriteTabs[Index].CopyToFavoriteTabs(LocalFavoriteTabs); DestinationFavoriteTabsList.Add(LocalFavoriteTabs); end; // So when we go in the editor, we know which one was the latest one. DestinationFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := FLastFavoriteTabsLoadedUniqueId; end; { TFavoriteTabsList.GetIndexLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexLastFavoriteTabsLoaded: integer; var Index: integer; begin Result := -1; Index := 0; while (Index < Count) and (Result = -1) do if IsEqualGUID(FavoriteTabs[Index].UniqueID, FLastFavoriteTabsLoadedUniqueId) then Result := Index else Inc(Index); end; { TFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded: integer; var SearchingIndex: integer; begin Result := -1; SearchingIndex := GetIndexLastFavoriteTabsLoaded; if SearchingIndex > 0 then begin while (Result = -1) and (SearchingIndex > 0) do begin Dec(SearchingIndex); if FavoriteTabs[SearchingIndex].Dispatcher = fte_ACTUALFAVTABS then Result := SearchingIndex; end; end; end; { TFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded: integer; var SearchingIndex: integer; begin Result := -1; SearchingIndex := GetIndexLastFavoriteTabsLoaded; if SearchingIndex < pred(Count) then begin while (Result = -1) and (SearchingIndex < pred(Count)) do begin Inc(SearchingIndex); if FavoriteTabs[SearchingIndex].Dispatcher = fte_ACTUALFAVTABS then Result := SearchingIndex; end; end; end; { TFavoriteTabsList.GetIndexForSuchUniqueID } function TFavoriteTabsList.GetIndexForSuchUniqueID(SearchedGUID: TGUID): integer; var iSearchedIndex: integer; begin Result := -1; iSearchedIndex := 0; while (Result = -1) and (iSearchedIndex < Count) do begin if IsEqualGUID(SearchedGUID, FavoriteTabs[iSearchedIndex].UniqueID) then Result := iSearchedIndex else Inc(iSearchedIndex); end; end; { TFavoriteTabsList.GetIndexForSuchFavoriteTabsName } function TFavoriteTabsList.GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName: string): integer; var iSearchedIndex: integer; begin Result := -1; iSearchedIndex := 0; while (Result = -1) and (iSearchedIndex < Count) do begin if FavoriteTabs[iSearchedIndex].FavoriteTabsName = sSearchedFavoriteTabsName then Result := iSearchedIndex else Inc(iSearchedIndex); end; end; { TFavoriteTabsList.GetSuggestedParamsForFavoriteTabs } // It won't hurt anything here if user want to use more than once the SAME name... // By adding the (1), (2), etc. between parenthesis, it's a kind of friendly indication the same name already exists. // But we do not blocked this. If he ever decides to specifically rename with the same name. This was a kind of friendly reminder. function TFavoriteTabsList.GetSuggestedParamsForFavoriteTabs(sAttemptedName: string; var SuggestedFavoriteTabsName: string): boolean; var iIndexInCaseFound: integer; begin Result := False; if length(sAttemptedName) > 0 then sAttemptedName := UTF8UpperCase(LeftStr(sAttemptedName, 1)) + RightStr(sAttemptedName, length(sAttemptedName) - 1); SuggestedFavoriteTabsName := sAttemptedName; iIndexInCaseFound := 1; while GetIndexForSuchFavoriteTabsName(SuggestedFavoriteTabsName) <> -1 do begin SuggestedFavoriteTabsName := Format('%s(%d)', [sAttemptedName, iIndexInCaseFound]); Inc(iIndexInCaseFound); end; if InputQuery(rsMsgFavoriteTabsEnterNameTitle, rsMsgFavoriteTabsEnterName, SuggestedFavoriteTabsName) then Result := (length(SuggestedFavoriteTabsName) > 0); end; { TFavoriteTabsList.ComputeSignature } // Routine tries to pickup all char chain from element of favorite tabs list to compute a unique CRC32. // This CRC32 will be a kind of signature of the favorite tabs list. function TFavoriteTabsList.ComputeSignature(Seed:dword): dword; var Index: integer; begin Result := Seed; for Index := 0 to pred(Count) do begin Result := crc32(Result, @FavoriteTabs[Index].Dispatcher, 1); if length(FavoriteTabs[Index].FavoriteTabsName) > 0 then Result := crc32(Result, @FavoriteTabs[Index].FavoriteTabsName[1], length(FavoriteTabs[Index].FavoriteTabsName)); Result := crc32(Result, @FavoriteTabs[Index].DestinationForSavedLeftTabs, sizeof(TTabsConfigLocation)); Result := crc32(Result, @FavoriteTabs[Index].DestinationForSavedRightTabs, sizeof(TTabsConfigLocation)); Result := crc32(Result, @FavoriteTabs[Index].ExistingTabsToKeep, sizeof(TTabsConfigLocation)); end; end; { TFavoriteTabsList.LoadAllListFromXml} procedure TFavoriteTabsList.LoadAllListFromXml; var ANode: TXmlNode; AConfig: TXmlConfig; LocalFavoriteTabs: TFavoriteTabs; sName: string; CurrentMenuLevel: integer; FlagAvortInsertion: boolean; begin Clear; CurrentMenuLevel := 0; // We don't add it to the list UNTIL a new entry has been added to the XML file. AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ANode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('FavoriteTabs') = 0 then begin if AConfig.TryGetAttr(ANode, 'Name', sName) then begin FlagAvortInsertion := False; LocalFavoriteTabs := TFavoriteTabs.Create; if sName = '-' then begin LocalFavoriteTabs.Dispatcher := fte_SEPARATOR; end else begin if sName = '--' then begin LocalFavoriteTabs.Dispatcher := fte_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; // Sanity correction in case we got corrupted from any ways end else begin if (UTF8Length(sName) > 1) then begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalFavoriteTabs.Dispatcher := fte_STARTMENU; LocalFavoriteTabs.FavoriteTabsName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalFavoriteTabs.Dispatcher = fte_NULL then begin LocalFavoriteTabs.FavoriteTabsName := sName; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.DestinationForSavedLeftTabs := TTabsConfigLocation(AConfig.GetAttr(Anode, 'DestLeft', integer(tclLeft))); LocalFavoriteTabs.DestinationForSavedRightTabs := TTabsConfigLocation(AConfig.GetAttr(Anode, 'DestRight', integer(tclRight))); LocalFavoriteTabs.ExistingTabsToKeep := TTabsConfigLocation(AConfig.GetAttr(Anode, 'ExistingKeep', integer(tclNone))); LocalFavoriteTabs.SaveDirHistory := AConfig.GetAttr(Anode, 'SaveDirHistory', False); LocalFavoriteTabs.UniqueID := StringToGuid(AConfig.GetAttr(Anode, 'UniqueID', GuidToString(DCGetNewGUID))); end; end; end; if not FlagAvortInsertion then begin Add(LocalFavoriteTabs); end else begin LocalFavoriteTabs.Free; end; end; end; ANode := ANode.NextSibling; end; while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ENDMENU; Add(LocalFavoriteTabs); end; end; finally FreeAndNil(AConfig); end; RefreshAssociatedMainMenu; end; { TFavoriteTabsList.LoadTabsFromXmlEntry } function TFavoriteTabsList.LoadTabsFromXmlEntry(paramIndexToLoad: integer): boolean; var AConfig: TXmlConfig; sActualTabSection: string; TestNode: TXmlNode; // Use just to validate there will be something to load from file. originalFilePanel: TFilePanelSelect; // Following variables are "pre-initialized" to default values AND are values used when not using the possibility to configure redirection of tabs in our setups. TargetDestinationForLeft: TTabsConfigLocation = tclLeft; TargetDestinationForRight: TTabsConfigLocation = tclRight; DestinationToKeep: TTabsConfigLocation = tclNone; TabsAlreadyDestroyedFlags: TTabsFlagsAlreadyDestroyed = []; begin Result := False; if (paramIndexToLoad >= 0) and (paramIndexToLoad < Count) then begin if FavoriteTabs[paramIndexToLoad].Dispatcher = fte_ACTUALFAVTABS then begin // 1. We remember to restore later the current selected panel. originalFilePanel := frmMain.SelectedPanel; // 2. We set the section-path to our wanted setup. (Don't forget the trailing slash at the end because "LoadTheseTabsWithThisConfig" requires it for the "ABranch" parameter. sActualTabSection := 'ActualTabs/' + FavoriteTabs[paramIndexToLoad].GuidToXMLString + '/'; // 3. We set the location where to restore tabs according to our setup IF we're configure for it. if gFavoriteTabsUseRestoreExtraOptions then begin TargetDestinationForLeft := FavoriteTabs[paramIndexToLoad].DestinationForSavedLeftTabs; TargetDestinationForRight := FavoriteTabs[paramIndexToLoad].DestinationForSavedRightTabs; DestinationToKeep := FavoriteTabs[paramIndexToLoad].ExistingTabsToKeep; end; // 4. We're ready to open the config files and actually load the stored tabs to the correct target side. AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); if Assigned(AConfig) then begin try // 5.1. We load the left tabs (We check before to make sure there is a "Left" section to don't possibly destroy existing tabs and later realize there is no section to load (But it should not happen...)). TestNode := AConfig.FindNode(AConfig.RootNode, sActualTabSection + 'Left/Tab'); if Assigned(TestNode) then frmMain.LoadTheseTabsWithThisConfig(AConfig, sActualTabSection, tclLeft, TargetDestinationForLeft, DestinationToKeep, TabsAlreadyDestroyedFlags); // 5.2. We load the right tabs (We check before to make sure there is a "Right" section to don't possibly destroy existing tabs and later realize there is no section to load (But it should not happen...)). TestNode := AConfig.FindNode(AConfig.RootNode, sActualTabSection + 'Right/Tab'); if Assigned(TestNode) then frmMain.LoadTheseTabsWithThisConfig(AConfig, sActualTabSection, tclRight, TargetDestinationForRight, DestinationToKeep, TabsAlreadyDestroyedFlags); // 6. We've loaded a setup, let's remember it. FLastFavoriteTabsLoadedUniqueId := FavoriteTabs[paramIndexToLoad].FUniqueID; // 7. We need to refresh main menu so the check will be on the right setup. The "Reload" and "Resave" will be enabled also. RefreshAssociatedMainMenu; // 8. If we reach that point, we deserve to return True! Result := True; finally FreeAndNil(AConfig); end; end; // 9. We restore focuse to what was our active panel, ready to play in it. frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; end; end; { TFavoriteTabsList.GetBestIndexForAlphabeticalNewFavoriteTabs } // We take the whole list of "FavoriteTabsName" seen as one single alphabetical sorted list. // We find the exact place where our string to add could fit. // We insert it right in front of the one its is closed to go. // If we have the last one, we placed it last! function TFavoriteTabsList.GetBestIndexForAlphabeticalNewFavoriteTabs(sFavoriteTabsNameToFindAPlaceFor: string): integer; var I, iPosInserted: integer; localFavoriteTabsNameToFindAPlaceFor: string; MagickSortedList: TStringList; begin Result := -1; localFavoriteTabsNameToFindAPlaceFor := UTF8LowerCase(sFavoriteTabsNameToFindAPlaceFor); MagickSortedList := TStringList.Create; try MagickSortedList.Sorted := True; MagickSortedList.Duplicates := dupAccept; // 1. We add in the list only the actual FavoriteTabsName. for I := 0 to pred(Count) do if FavoriteTabs[I].Dispatcher = fte_ACTUALFAVTABS then MagickSortedList.Add(UTF8LowerCase(FavoriteTabs[I].FavoriteTabsName) + DirectorySeparator + IntToStr(I)); // 2. Add to list our string. iPosInserted := MagickSortedList.Add(localFavoriteTabsNameToFindAPlaceFor); // 3. We now know the best place to insert our entry (unless it's last one). if MagickSortedList.Count > 1 then begin if iPosInserted < pred(MagickSortedList.Count) then begin Result := StrToInt(GetLastDir(MagickSortedList.Strings[iPosInserted + 1])); end else begin Result := (StrToInt(GetLastDir(MagickSortedList.Strings[iPosInserted - 1]))) + 1; if Result >= Count then Result := -1; end; end; finally MagickSortedList.Free; end; end; { TFavoriteTabsList.AddToListAndToXmlFileHeader } procedure TFavoriteTabsList.AddToListAndToXmlFileHeader(paramFavoriteTabs: TFavoriteTabs; AConfig: TXmlConfig; SpecifiedIndex: integer = -1); var SubNode, RootNode: TXmlNode; iIndexToInsert: integer; begin if SpecifiedIndex = -1 then begin case gWhereToAddNewFavoriteTabs of afte_Last: begin // The simplest case: We add the node, we add it at the end of the list, that's it! RootNode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList', True); SubNode := AConfig.AddNode(RootNode, 'FavoriteTabs'); paramFavoriteTabs.SaveToXml(AConfig, SubNode); Add(paramFavoriteTabs); end; afte_First: begin // A bit more complicated: we will "insert" at position 0 our Favorites Tabs in our list and then we'll recreate the index at the beginning of our Xml file. Insert(0, paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; afte_Alphabetical: begin //A medium bit more complicated: we will iIndexToInsert := GetBestIndexForAlphabeticalNewFavoriteTabs(paramFavoriteTabs.FavoriteTabsName); if (iIndexToInsert >= 0) and (Count > 0) then Insert(iIndexToInsert, paramFavoriteTabs) else Add(paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; end; end else begin if SpecifiedIndex < pred(Count) then Insert(SpecifiedIndex, paramFavoriteTabs) else Add(paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; end; { TFavoriteTabsList.SaveNewEntryFavoriteTabs } function TFavoriteTabsList.SaveNewEntryFavoriteTabs(paramFavoriteTabsEntryName: string): boolean; var AConfig: TXmlConfig; sActualTabSection: string; LocalFavoriteTabs: TFavoriteTabs; bFlagToSaveHistoryOrNot: boolean; begin try LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.FavoriteTabsName := paramFavoriteTabsEntryName; LocalFavoriteTabs.DestinationForSavedLeftTabs := gDefaultTargetPanelLeftSaved; LocalFavoriteTabs.DestinationForSavedRightTabs := gDefaultTargetPanelRightSaved; LocalFavoriteTabs.ExistingTabsToKeep := gDefaultExistingTabsToKeep; LocalFavoriteTabs.SaveDirHistory := gFavoriteTabsSaveDirHistory; //The UniqueID is not assigned here because it has already been set when "LocalFavoriteTabs" has been created. if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := LocalFavoriteTabs.SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try AddToListAndToXmlFileHeader(LocalFavoriteTabs, AConfig); sActualTabSection := 'ActualTabs/' + LocalFavoriteTabs.GuidToXMLString; frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.LeftTabs, bFlagToSaveHistoryOrNot); frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.RightTabs, bFlagToSaveHistoryOrNot); AConfig.Save; FLastFavoriteTabsLoadedUniqueId := LocalFavoriteTabs.UniqueID; RefreshAssociatedMainMenu; // To possibly enable the action for the "ReLoad" and "ReSave". finally FreeAndNil(AConfig); end; Result := True; // If we get here, we'll assumed Favorite Tabs has been saved! except Result := False; end; end; { TFavoriteTabsList.ReSaveTabsToXMLEntry } // When "ReSaving", we must first find in the Xml the previous entry to write over it. function TFavoriteTabsList.ReSaveTabsToXMLEntry(paramIndexToSave: integer): boolean; var ANode: TXmlNode; AConfig: TXmlConfig; sActualTabSection, sGUIDTemp: string; bFlagSaved: boolean = False; bFlagToSaveHistoryOrNot: boolean; begin Result := False; if (paramIndexToSave >= 0) and (paramIndexToSave < Count) then begin if FavoriteTabs[paramIndexToSave].Dispatcher = fte_ACTUALFAVTABS then begin AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ANode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) and (not bFlagSaved) do begin if ANode.CompareName('FavoriteTabs') = 0 then begin if AConfig.TryGetAttr(ANode, 'UniqueID', sGUIDTemp) then begin if IsEqualGUID(FavoriteTabs[paramIndexToSave].UniqueID, StringToGuid(sGUIDTemp)) then begin FavoriteTabs[paramIndexToSave].SaveToXml(AConfig, ANode); bFlagSaved := True; FLastFavoriteTabsLoadedUniqueId := FavoriteTabs[paramIndexToSave].UniqueID; end; end; end; ANode := ANode.NextSibling; end; end; if bFlagSaved then begin if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := FavoriteTabs[paramIndexToSave].SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; sActualTabSection := 'ActualTabs/' + FavoriteTabs[paramIndexToSave].GuidToXMLString; frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.LeftTabs, bFlagToSaveHistoryOrNot); frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.RightTabs, bFlagToSaveHistoryOrNot); AConfig.Save; Result := True; end; finally FreeAndNil(AConfig); end; end; end; end; { TFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange } function TFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange: boolean; var iIndex: integer; bFlagToSaveHistoryOrNot: boolean; begin Result := True; iIndex := GetIndexLastFavoriteTabsLoaded; if iIndex <> -1 then begin if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := FavoriteTabs[iIndex].SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; if bFlagToSaveHistoryOrNot then Result := ReSaveTabsToXMLEntry(iIndex); end; end; { TFavoriteTabsList.ActualDumpFavoriteTabsListInXml } // Since we save everything, we will will flush the current "FavoriteTabsList" header section to restore it. // We need to do in case we would delete entries. // Also, certainly we could have done something like "AConfig.DeleteNode(ListNode)" and then rewrite completely our table after. // BUT, doing that would place our list at the end. That's fine and functional. But it's nice for human to see it on top when debugging. // So that's why we delete item one by one without deleting the initial node. // Also, we need to do a kind of purge of the subsequent node regarding actual tab setup. // To do that, we check each node to see if we have a correspondant entry in the header. // If not, we flush that node! function TFavoriteTabsList.ActualDumpFavoriteTabsListInXml(AConfig: TXmlConfig): boolean; var SubNode, ListNode, ANode, BNode: TXmlNode; iIndex: integer; begin ListNode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList', True); if Assigned(ListNode) then begin ANode := ListNode.FirstChild; while Assigned(ANode) do begin BNode := ANode.NextSibling; AConfig.DeleteNode(ANode); ANode := BNode; end; end; // 1. Write the kind of "Table" of Favorite Tabs iIndex := 0; while iIndex < Count do begin case FavoriteTabs[iIndex].Dispatcher of fte_ACTUALFAVTABS, fte_SEPARATOR, fte_STARTMENU, fte_ENDMENU: begin SubNode := AConfig.AddNode(ListNode, 'FavoriteTabs'); FavoriteTabs[iIndex].SaveToXml(AConfig, SubNode); end; end; Inc(iIndex); end; // 2. Validate if bare data for actual tabs have a matching entry in our table. // If not, flush it. ListNode := AConfig.FindNode(AConfig.RootNode, 'ActualTabs'); if Assigned(ListNode) then begin ANode := ListNode.FirstChild; while Assigned(ANode) do begin BNode := ANode.NextSibling; if GetIndexForSuchUniqueID(XmlStringToGuid(ANode.NodeName)) = -1 then AConfig.DeleteNode(ANode); ANode := BNode; end; end; end; { TFavoriteTabsList.RefreshXmlFavoriteTabsListSection } function TFavoriteTabsList.RefreshXmlFavoriteTabsListSection: boolean; var AConfig: TXmlConfig; begin Result := False; try AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ActualDumpFavoriteTabsListInXml(AConfig); AConfig.Save; finally FreeAndNil(AConfig); end; Result := True; except on E: Exception do msgError(E.Message); end; end; { TFavoriteTabsList.PopulateMenuWithFavoriteTabs } procedure TFavoriteTabsList.PopulateMenuWithFavoriteTabs(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenFavoriteTabItemClicked: TProcedureWhenClickOnMenuItem; KindFavoriteTabMenuPopulation: TKindFavoriteTabsMenuPopulation); var I: longint; //Same variable for main and local routine // WARNING: "CompleteMenu" is recursive and may call itself! function CompleteMenu(ParamMenuItem: TComponent; TagOffset: integer = 0): longint; // WARNING: "DoCheckedBackToTop" is recursive and may call itself! procedure DoCheckedBackToTop(paramTMenuItem: TComponent); begin if (mncmpMenuComponentToPopulate = paramTMenuItem) then Exit; if (paramTMenuItem.ClassType = TMenuItem) and (TMenuItem(paramTMenuItem).Caption <> rsMsgFavortieTabsSaveOverExisting) then if TMenuItem(paramTMenuItem).Parent <> nil then if (TMenuItem(paramTMenuItem).Parent.ClassType <> TMainMenu) then begin TMenuItem(paramTMenuItem).Checked := True; DoCheckedBackToTop(TMenuItem(paramTMenuItem).Parent); end; end; var localmi: TMenuItem; LocalLastAdditionIsASeparator: boolean; begin Result := 0; LocalLastAdditionIsASeparator := False; while I < Count do begin Inc(I); case FavoriteTabs[I - 1].Dispatcher of fte_ACTUALFAVTABS: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := FavoriteTabs[I - 1].FFavoriteTabsName.Replace('&', '&&', [rfReplaceAll]); localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenFavoriteTabItemClicked; localmi.Checked := IsEqualGUID(FavoriteTabs[I - 1].UniqueID, FLastFavoriteTabsLoadedUniqueId); if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then begin TMenuItem(ParamMenuItem).Add(localmi); if localmi.Checked then DoCheckedBackToTop(localmi); end; LocalLastAdditionIsASeparator := False; Inc(Result); end; fte_SEPARATOR: begin if (not LocalLastAdditionIsASeparator) then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := '-'; if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Add(localmi); LocalLastAdditionIsASeparator := True; Inc(Result); end; end; fte_STARTMENU: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := FavoriteTabs[I - 1].FavoriteTabsName.Replace('&', '&&', [rfReplaceAll]); //if gIconsInMenus then // localmi.ImageIndex := frmMain.miLoadFavoriteTabs.ImageIndex; if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Add(localmi); CompleteMenu(localmi, TagOffset); if localmi.Count <> 0 then begin LocalLastAdditionIsASeparator := False; Inc(Result); end else begin localmi.Free; end; end; fte_ENDMENU: begin if LocalLastAdditionIsASeparator then begin if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items[pred(TPopupMenu(ParamMenuItem).Items.Count)].Free else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Items[pred(TMenuItem(ParamMenuItem).Count)].Free; Dec(Result); end; exit; end; end; //case FavoriteTabs[I-1].Dispatcher of end; //while I 0 then begin I := 0; CompleteMenu(mncmpMenuComponentToPopulate, 0); end; // 3. Customize minimally our menu. If we wants some configuration and saving, let's add them. case KindFavoriteTabMenuPopulation of ftmp_FAVTABSWITHCONFIG: begin // 3.1. Add the reload/resave items. if (Count > 0) and (GetIndexLastFavoriteTabsLoaded <> -1) then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := ('-'); if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actReloadFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actResaveFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.2. Add a delimiter, a simple line to separate. if Count > 0 then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.3 Now add "Add current tabs to Favorite Tabs". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actSaveFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.4. If we have at least one entry, let's create the "Save Over Existing.." items. if Count > 0 then begin // 3.4.1. Add the "Save current tabs over existing Favorite Tabs entry" in a submenu. // It's placed in a sub menu since when it's time to saved since it's less frequent then keeping accessing... // ...and to avoid to click on it by accident and overwring existing stuff. miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := rsMsgFavortieTabsSaveOverExisting; miMainTree.ImageIndex := frmMain.actResaveFavoriteTabs.ImageIndex; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.4.1. And then add our favorite tabs again BUT with the "TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING" offset in the tag. I := 0; CompleteMenu(miMainTree, TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING); // 3.4.2. Then another separator. // Intentionnally there is no separator when user has no favorite tabs and there is one when there is at least one... // It seems stupid to have a single separator when there is only two items... // ... and when we have many items, it looks good to have the "Save's" enclose between separators. miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.5 Now add "Configure Folder tab". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actConfigFolderTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.6 Now add "Configure Favorite Tabs". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actConfigFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; //case KindFavoriteTabMenuPopulation of if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then if TPopupMenu(mncmpMenuComponentToPopulate).Images = nil then TPopupMenu(mncmpMenuComponentToPopulate).Images := frmMain.imgLstActions; if mncmpMenuComponentToPopulate.ClassType = TMenuItem then if TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images = nil then TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images := frmMain.imgLstActions; end; { TFavoriteTabsList.RefreshAssociatedMainMenu } procedure TFavoriteTabsList.RefreshAssociatedMainMenu; var iIndex: integer; miMainTree: TMenuItem; begin if FAssociatedMainMenuItem <> nil then begin if FAssociatedMainMenuItem <> nil then begin if FAssociatedMainMenuItem.Count > 4 then begin iIndex := pred(FAssociatedMainMenuItem.Count); while iIndex > 3 do begin FAssociatedMainMenuItem.Delete(iIndex); Dec(iIndex); end; end; if Count > 0 then begin miMainTree := TMenuItem.Create(FAssociatedMainMenuItem); miMainTree.Caption := '-'; FAssociatedMainMenuItem.Add(miMainTree); end; if GetIndexLastFavoriteTabsLoaded = -1 then begin frmMain.actReloadFavoriteTabs.Enabled := False; frmMain.actResaveFavoriteTabs.Enabled := False; end else begin frmMain.actReloadFavoriteTabs.Enabled := True; frmMain.actResaveFavoriteTabs.Enabled := True; end; end; PopulateMenuWithFavoriteTabs(FAssociatedMainMenuItem, @frmMain.Commands.DoOnClickMenuJobFavoriteTabs, ftmp_JUSTFAVTABS); end; end; { TFavoriteTabsList.LoadTTreeView } // We'll try to restore what was selected prior the reload for the situation where it's pertinent. procedure TFavoriteTabsList.LoadTTreeView(ParamTreeView: TTreeView); var Index: longint; procedure RecursivAddElements(WorkingNode: TTreeNode); var FlagGetOut: boolean = False; LocalNode: TTreeNode; begin while (FlagGetOut = False) and (Index < Count) do begin case FavoriteTabs[Index].Dispatcher of fte_STARTMENU: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FavoriteTabs[Index].FavoriteTabsName, FavoriteTabs[Index]); LocalNode.Data := FavoriteTabs[Index]; Inc(Index); RecursivAddElements(LocalNode); end; fte_ENDMENU: begin FlagGetOut := True; Inc(Index); end; fte_SEPARATOR: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FAVORITETABS_SEPARATORSTRING, FavoriteTabs[Index]); LocalNode.Data := FavoriteTabs[Index]; Inc(Index); end else // ...but should not happened. begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FavoriteTabs[Index].FavoriteTabsName, FavoriteTabs[Index]); Inc(Index); end; end; end; end; begin ParamTreeView.Items.Clear; Index := 0; RecursivAddElements(nil); end; { TFavoriteTabsList.RefreshFromTTreeView } // The routine will recreate the complete TFavoriteTabsList from a TTreeView. // It cannot erase or replace immediately the current list because the TTreeView refer to it! // So it create it into the "TransitFavoriteTabsList" and then, it will copy it to self one. // It will remember what was selected before based on the unique ID and then restore what is possible to restored after. procedure TFavoriteTabsList.RefreshFromTTreeView(ParamTreeView: TTreeView); var TransitFavoriteTabsList: TFavoriteTabsList; iIndex: integer; slRememberCurrentSelections: TStringList; procedure RecursiveEncapsulateSubMenu(WorkingTreeNode: TTreeNode); var MaybeChildNode: TTreeNode; WorkingFavoriteTabEntry: TFavoriteTabs; begin while WorkingTreeNode <> nil do begin MaybeChildNode := WorkingTreeNode.GetFirstChild; if MaybeChildNode <> nil then begin WorkingFavoriteTabEntry := TFavoriteTabs.Create; TFavoriteTabs(WorkingTreeNode.Data).CopyToFavoriteTabs(WorkingFavoriteTabEntry); WorkingFavoriteTabEntry.Dispatcher := fte_STARTMENU; //Probably not necessary, but let's make sure it will start a menu TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); RecursiveEncapsulateSubMenu(MaybeChildNode); WorkingFavoriteTabEntry := TFavoriteTabs.Create; WorkingFavoriteTabEntry.Dispatcher := fte_ENDMENU; TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); end else begin //We won't copy EMPTY submenu so that's why we check for "fte_STARTMENU". And the check for "fte_ENDMENU" is simply probably unecessary protection if (TFavoriteTabs(WorkingTreeNode.Data).Dispatcher <> fte_STARTMENU) and (TFavoriteTabs(WorkingTreeNode.Data).Dispatcher <> fte_ENDMENU) then begin WorkingFavoriteTabEntry := TFavoriteTabs.Create; TFavoriteTabs(WorkingTreeNode.Data).CopyToFavoriteTabs(WorkingFavoriteTabEntry); TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); end; end; WorkingTreeNode := WorkingTreeNode.GetNextSibling; end; end; begin if ParamTreeView.Items.Count > 0 then begin slRememberCurrentSelections := TStringList.Create; TransitFavoriteTabsList := TFavoriteTabsList.Create; try //Saving a trace of what is selected right now. for iIndex := 0 to pred(ParamTreeView.Items.Count) do if ParamTreeView.Items[iIndex].Selected then if TFavoriteTabs(ParamTreeView.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then slRememberCurrentSelections.Add(GUIDtoString(TFavoriteTabs(ParamTreeView.Items[iIndex].Data).UniqueID)); TransitFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := FLastFavoriteTabsLoadedUniqueId; RecursiveEncapsulateSubMenu(ParamTreeView.Items.Item[0]); TransitFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(self); LoadTTreeView(ParamTreeView); // Restoring what was selected. ParamTreeView.ClearSelection(False); for iIndex := 0 to pred(ParamTreeView.Items.Count) do if TFavoriteTabs(ParamTreeView.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then ParamTreeView.Items[iIndex].Selected := (slRememberCurrentSelections.IndexOf(GUIDtoString(TFavoriteTabs(ParamTreeView.Items[iIndex].Data).UniqueID)) <> -1); finally TransitFavoriteTabsList.Clear; TransitFavoriteTabsList.Free; FreeAndNil(slRememberCurrentSelections); end; end else begin Self.Clear; mbDeleteFile(GetSingleXmlFavoriteTabsFilename); end; end; { TFavoriteTabsList.ImportFromLegacyTabsFile } function TFavoriteTabsList.ImportFromLegacyTabsFile(paramFilename: string; SpecifiedIndex: integer = -1): boolean; var iNode, oNode: TXmlNode; InputXmlConfig: TXmlConfig; OutputXmlConfig: TXmlConfig; LocalFavoriteTabs: TFavoriteTabs; begin Result := False; try LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.FavoriteTabsName := ExtractOnlyFileName(paramFilename); LocalFavoriteTabs.DestinationForSavedLeftTabs := tclLeft; LocalFavoriteTabs.DestinationForSavedRightTabs := tclRight; LocalFavoriteTabs.ExistingTabsToKeep := tclNone; //The UniqueID is not assigned here because it has already been set when "LocalFavoriteTabs" has been created. InputXmlConfig := TXmlConfig.Create(paramFilename, True); OutputXmlConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try AddToListAndToXmlFileHeader(LocalFavoriteTabs, OutputXmlConfig, SpecifiedIndex); iNode := InputXmlConfig.FindNode(InputXmlConfig.RootNode, 'Tabs/OpenedTabs/Left'); oNode := OutputXmlConfig.FindNode(OutputXmlConfig.RootNode, 'ActualTabs/' + LocalFavoriteTabs.GuidToXMLString, True); while iNode <> nil do begin GenericCopierProcessNode(iNode, OutputXmlConfig, oNode); // Procédure récursive iNode := iNode.NextSibling; end; OutputXmlConfig.Save; gFavoriteTabsList.LastImportationStringUniqueId.Add(GUIDToString(LocalFavoriteTabs.UniqueID)); Result := True; finally FreeAndNil(OutputXmlConfig); FreeAndNil(InputXmlConfig); end; except on E: Exception do msgError(E.Message); end; end; { TFavoriteTabsList.ExportToLegacyTabsFile } function TFavoriteTabsList.ExportToLegacyTabsFile(index: integer; OutputDirectory: string): boolean; var iNode, oNode: TXmlNode; InputXmlConfig: TXmlConfig; OutputXmlConfig: TXmlConfig; sBasicOutputFilename, sConfigFilename: string; iAttempt: integer; begin Result := False; try // 1. Let's try to give an exported filename based of the Favorite Tabs friendly name. // If a filename like that already exists, add "(x)" to the name and increase "x" until the file does not already exists! sBasicOutputFilename := RemoveInvalidCharsFromFileName(FavoriteTabs[index].FavoriteTabsName); if sBasicOutputFilename = '' then sBasicOutputFilename := 'TabsExported'; sBasicOutputFilename := IncludeTrailingPathDelimiter(OutputDirectory) + sBasicOutputFilename; sConfigFilename := sBasicOutputFilename + '.tab'; iAttempt := 1; while FileExists(sConfigFilename) do begin sConfigFilename := sBasicOutputFilename + '(' + IntToStr(iAttempt) + ').tab'; Inc(iAttempt); end; // 2. Ok. Let's start our exportatation. Basically we start from the section of the source setup and write it to a new single isolated one. InputXmlConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); OutputXmlConfig := TXmlConfig.Create(sConfigFilename); try iNode := InputXmlConfig.FindNode(InputXmlConfig.RootNode, 'ActualTabs/' + FavoriteTabs[index].GuidToXMLString + '/Left'); if iNode <> nil then begin oNode := OutputXmlConfig.FindNode(OutputXmlConfig.RootNode, 'Tabs/OpenedTabs', True); while iNode <> nil do begin GenericCopierProcessNode(iNode, OutputXmlConfig, oNode); // Procédure récursive iNode := iNode.NextSibling; end; OutputXmlConfig.Save; gFavoriteTabsList.LastImportationStringUniqueId.Add(sConfigFilename); Result := True; end; finally FreeAndNil(OutputXmlConfig); FreeAndNil(InputXmlConfig); end; except on E: Exception do msgError(E.Message); end; end; end. doublecmd-1.1.30/src/uexts.pas0000644000175000001440000005404415104114162015240 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Manager for commands associated to file extension. Copyright (C) 2008-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Original comment: ---------------------------- Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz storing commands (by file extensions) } unit uExts; {$mode objfpc}{$H+} interface uses Graphics, Classes, Contnrs, uFile; type { What constitutes our basic info for the external actual action } TExtActionCommand = class FActionName: string; FCommandName: string; FParams: string; FStartPath: string; FIconIndex: integer; FIconBitmap: Graphics.TBitmap; public constructor Create(ParamActionName, ParamCommandName, ParamParams, ParamStartPath: string); destructor Destroy; override; function CloneExtAction: TExtActionCommand; property ActionName: string read FActionName write FActionName; property CommandName: string read FCommandName write FCommandName; property Params: string read FParams write FParams; property StartPath: string read FStartPath write FStartPath; property IconIndex: integer read FIconIndex write FIconIndex; property IconBitmap: Graphics.TBitmap read FIconBitmap write FIconBitmap; end; { Each file type may have more than one possible associated action ("TExtActionCommand"). This class is to hold a collection of this } TExtActionList = class(TList) private function GetExtActionCommand(Index: integer): TExtActionCommand; public constructor Create; procedure Clear; override; function Add(ExtActionCommand: TExtActionCommand): integer; procedure Insert(Index: integer; ExtActionCommand: TExtActionCommand); procedure DeleteExtActionCommand(Index: integer); property ExtActionCommand[Index: integer]: TExtActionCommand read GetExtActionCommand; end; { Class for storage actions by file extensions } TExtAction = class Name: string; //en< File type name, for example "Hyper text documents" Icon: string; //en< Path to icon IconIndex: integer; Extensions: TStringList; //en< List of extensions ActionList: TExtActionList; public constructor Create; destructor Destroy; override; function GetIconListForStorage: string; procedure SetIconListFromStorage(sStorage: string); end; { Main class for storage actions list by file extensions } TExts = class private function GetCount: integer; function GetItems(Index: integer): TExtAction; procedure LegacyLoadFromFile(const sName: string); protected FExtList: TObjectList; public constructor Create; destructor Destroy; override; procedure Clear; function AddItem(AExtAction: TExtAction): integer; procedure DeleteItem(Index: integer); procedure MoveItem(SrcIndex, DestIndex: integer); function Load: boolean; function LoadXMLFile: boolean; procedure SaveXMLFile; function GetExtActionCmd(aFile: TFile; const sActionName: string; var sCmd: string; var sParams: string; var sStartPath: string): boolean; function GetExtActions(aFile: TFile; paramActionList: TExtActionList; pIndexOfFirstPossibleFileType: PInteger = nil; bWantedAllActions: boolean = False): boolean; function ComputeSignature(Seed:dword=$00000000): dword; property Count: integer read GetCount; property Items[Index: integer]: TExtAction read GetItems; property FileType[Index: integer]: TExtAction read GetItems; end; const cMaskDefault = 'default'; cMaskFolder = 'folder'; cMaskFile = 'file'; implementation uses DCXmlConfig, uDCVersion, uGlobsPaths, uDCUtils, crc, uLng, SysUtils, uLog, DCClassesUtf8, DCOSUtils, strUtils; { TExtActionCommand.Create } constructor TExtActionCommand.Create(ParamActionName, ParamCommandName, ParamParams, ParamStartPath: string); begin inherited Create; FActionName := ParamActionName; FCommandName := ParamCommandName; FParams := ParamParams; FStartPath := ParamStartPath; FIconIndex := -1; // <--IconIndex is used only in "uShellContextMenu" to show an icon next to the command AND is filled correctly when doing "TExts.GetExtActions" FIconBitmap := nil; // <--IconBitmap is used only in "uShellContextMenu" to show an icon next to the command AND is filled correctly when doing "CreateActionSubMenu" from "uShellContextMenu" end; { TExtActionCommand.Destroy } destructor TExtActionCommand.Destroy; begin if Assigned(FIconBitmap) then FreeAndNil(FIconBitmap); inherited; end; { TExtActionCommand.CloneExtAction } function TExtActionCommand.CloneExtAction: TExtActionCommand; begin Result := TExtActionCommand.Create(self.FActionName, self.FCommandName, self.FParams, self.FStartPath); end; { TExtActionList.Create } constructor TExtActionList.Create; begin inherited Create; end; { TExtActionList.Clear } procedure TExtActionList.Clear; var i: integer; begin for i := 0 to Count - 1 do ExtActionCommand[i].Free; inherited Clear; end; { TExtActionList.Add } function TExtActionList.Add(ExtActionCommand: TExtActionCommand): integer; begin Result := inherited Add(ExtActionCommand); end; { TExtActionList.Insert } procedure TExtActionList.Insert(Index: integer; ExtActionCommand: TExtActionCommand); begin inherited Insert(Index, ExtActionCommand); end; { TExtActionList.DeleteExtActionCommand } procedure TExtActionList.DeleteExtActionCommand(Index: integer); begin ExtActionCommand[Index].Free; Delete(Index); end; { TExtActionList.GetExtActionCommand } function TExtActionList.GetExtActionCommand(Index: integer): TExtActionCommand; begin Result := TExtActionCommand(Items[Index]); end; constructor TExtAction.Create; begin inherited Create; Extensions := TStringList.Create; Extensions.CaseSensitive := False; ActionList := TExtActionList.Create; end; destructor TExtAction.Destroy; begin if Assigned(Extensions) then FreeAndNil(Extensions); if Assigned(ActionList) then FreeAndNil(ActionList); inherited; end; { TExtAction.GetIconListForStorage } function TExtAction.GetIconListForStorage: string; var iExtension: integer; begin Result := ''; if Extensions.Count = 0 then Result := rsMsgUserDidNotSetExtension else for iExtension := 0 to pred(Extensions.Count) do if Result = '' then Result := Extensions[iExtension] else Result := Result + '|' + Extensions[iExtension]; end; { TExtAction.SetIconListFromStorage } procedure TExtAction.SetIconListFromStorage(sStorage: string); var PosPipe, LastPosPipe: integer; begin LastPosPipe := 0; repeat PosPipe := posEx('|', sStorage, LastPosPipe + 1); if PosPipe <> 0 then begin Extensions.add(copy(sStorage, LastPosPipe + 1, ((PosPipe - LastPosPipe) - 1))); LastPosPipe := PosPipe; end; until PosPipe = 0; if length(sStorage) > LastPosPipe then Extensions.add(copy(sStorage, LastPosPipe + 1, (length(sStorage) - LastPosPipe))); if Extensions.Count = 0 then Extensions.Add(rsMsgUserDidNotSetExtension); end; { TExts.LegacyLoadFromFile } //We need to keep this routine to be able to load "old legacy format" of the //file associated action based on file extension that was using DC originally. procedure TExts.LegacyLoadFromFile(const sName: string); var extFile: TStringListEx; sLine, s, sExt: string; extCurrentFileType: TExtAction; I, iIndex: integer; sCommandName, sEndingPart, sCommandCmd, sParams: string; begin extFile := TStringListEx.Create; try extFile.LoadFromFile(sName); extCurrentFileType := nil; for I := 0 to extFile.Count - 1 do begin sLine := extFile.Strings[I]; sLine := Trim(sLine); if (sLine = '') or (sLine[1] = '#') then Continue; if sLine[1] = '[' then begin extCurrentFileType := TExtAction.Create; FExtList.Add(extCurrentFileType); iIndex := pos(']', sLine); if iIndex > 0 then sLine := Copy(sLine, 1, iIndex) else logWrite(Format(rsExtsClosedBracketNoFound, [sLine])); extCurrentFileType.Name:=sLine; // Just in case we don't have a name later on, let's named the file type based on the extension defined. // fill extensions list s := sLine; Delete(s, 1, 1); // Delete '[' Delete(s, Length(s), 1); // Delete ']' s := s + '|'; while Pos('|', s) <> 0 do begin iIndex := Pos('|', s); sExt := Copy(s, 1, iIndex - 1); Delete(s, 1, iIndex); extCurrentFileType.Extensions.Add(sExt); end; end // end if.. '[' else begin // this must be a command if not assigned(extCurrentFileType) then begin logWrite(Format(rsExtsCommandWithNoExt, [sLine])); Continue; end; // now set command to lowercase s := sLine; for iIndex := 1 to Length(s) do begin if s[iIndex] = '=' then Break; s[iIndex] := LowerCase(s[iIndex]); end; if Pos('name', s) = 1 then // File type name extCurrentFileType.Name := Copy(sLine, iIndex + 1, Length(sLine)) else if Pos('icon', s) = 1 then // File type icon extCurrentFileType.Icon := Copy(sLine, iIndex + 1, Length(sLine)) else // action begin sCommandName := Copy(sLine, 1, iIndex - 1); sEndingPart := Copy(sLine, iIndex + 1, Length(sLine)); try SplitCmdLineToCmdParams(sEndingPart, sCommandCmd, sParams); except sCommandCmd := ' '+sEndingPart; //Just in case the user has something wrong in his settings, LIKE a missing ending quote... sParams := ''; end; sCommandCmd := Trim(sCommandCmd); sParams := Trim(sParams); extCurrentFileType.ActionList.Add(TExtActionCommand.Create(sCommandName, sCommandCmd, sParams, '')); end; end; end; finally extFile.Free; end; end; function TExts.GetExtActions(aFile: TFile; paramActionList: TExtActionList; pIndexOfFirstPossibleFileType: PInteger = nil; bWantedAllActions: boolean = False): boolean; var I, iActionNo: integer; sMask: string; ExtActionCommand: TExtActionCommand; begin if pIndexOfFirstPossibleFileType <> nil then pIndexOfFirstPossibleFileType^ := -1; Result := False; if aFile.IsDirectory or aFile.IsLinkToDirectory then sMask := cMaskFolder else sMask := LowerCase(aFile.Extension); if Length(sMask) <> 0 then for I := 0 to FExtList.Count - 1 do with GetItems(i) do begin if Extensions.IndexOf(sMask) >= 0 then begin if paramActionList.Count > 0 then paramActionList.Add(TExtActionCommand.Create('-', '', '', '')); for iActionNo := 0 to pred(ActionList.Count) do begin ExtActionCommand := ActionList.ExtActionCommand[iActionNo].CloneExtAction; ExtActionCommand.IconIndex := IconIndex; paramActionList.Add(ExtActionCommand); end; if pIndexOfFirstPossibleFileType <> nil then if pIndexOfFirstPossibleFileType^ = -1 then pIndexOfFirstPossibleFileType^ := I; Result := True; if not bWantedAllActions then Break; end; end; if sMask = cMaskFolder then Exit; for I := 0 to FExtList.Count - 1 do with GetItems(i) do begin if Extensions.IndexOf(cMaskFile) >= 0 then begin if paramActionList.Count > 0 then paramActionList.Add(TExtActionCommand.Create('-', '', '', '')); for iActionNo := 0 to pred(ActionList.Count) do begin ExtActionCommand := ActionList.ExtActionCommand[iActionNo].CloneExtAction; ExtActionCommand.IconIndex := IconIndex; paramActionList.Add(ExtActionCommand); end; if pIndexOfFirstPossibleFileType <> nil then if pIndexOfFirstPossibleFileType^ = -1 then pIndexOfFirstPossibleFileType^ := I; Result := True; if not bWantedAllActions then Break; end; end; end; function TExts.GetCount: integer; begin Result := FExtList.Count; end; function TExts.GetItems(Index: integer): TExtAction; begin Result := TExtAction(FExtList.Items[Index]); end; constructor TExts.Create; begin inherited Create; FExtList := TObjectList.Create; end; destructor TExts.Destroy; begin if assigned(FExtList) then FreeAndNil(FExtList); inherited; end; procedure TExts.Clear; begin FExtList.Clear; end; function TExts.AddItem(AExtAction: TExtAction): integer; begin Result := FExtList.Add(AExtAction); end; procedure TExts.DeleteItem(Index: integer); begin FExtList.Delete(Index); end; procedure TExts.MoveItem(SrcIndex, DestIndex: integer); begin FExtList.Move(SrcIndex, DestIndex); end; function TExts.GetExtActionCmd(aFile: TFile; const sActionName: string; var sCmd: string; var sParams: string; var sStartPath: string): boolean; var I: integer; sMask: string; iAction: integer; begin Result := False; sCmd := ''; sParams := ''; sStartPath := ''; if aFile.IsDirectory or aFile.IsLinkToDirectory then sMask := cMaskFolder else sMask := LowerCase(aFile.Extension); if Length(sMask) <> 0 then begin for I := 0 to FExtList.Count - 1 do with GetItems(I) do begin if Extensions.IndexOf(sMask) >= 0 then begin iAction := 0; while (iAction < ActionList.Count) and (not Result) do begin if UpperCase(ActionList.ExtActionCommand[iAction].ActionName) = UpperCase(sActionName) then begin sCmd := ActionList.ExtActionCommand[iAction].CommandName; sParams := ActionList.ExtActionCommand[iAction].Params; sStartPath := ActionList.ExtActionCommand[iAction].StartPath; Result := True; Exit; end else begin Inc(iAction); end; end; end; end; end; // if command not found then try to find default command for I := 0 to FExtList.Count - 1 do with GetItems(I) do begin if Extensions.IndexOf(cMaskDefault) >= 0 then begin iAction := 0; while (iAction < ActionList.Count) and (not Result) do begin if UpperCase(ActionList.ExtActionCommand[iAction].ActionName) = UpperCase(sActionName) then begin sCmd := ActionList.ExtActionCommand[iAction].CommandName; sParams := ActionList.ExtActionCommand[iAction].Params; sStartPath := ActionList.ExtActionCommand[iAction].StartPath; Result := True; Exit; end else begin Inc(iAction); end; end; end; end; end; { TExts.ComputeSignature } function TExts.ComputeSignature(Seed:dword): dword; var iExtType, iExtension, iAction: integer; begin Result := Seed; for iExtType := 0 to pred(Count) do begin Result := crc32(Result, @Items[iExtType].Name[1], length(Items[iExtType].Name)); if length(Items[iExtType].Icon) > 0 then Result := crc32(Result, @Items[iExtType].Icon[1], length(Items[iExtType].Icon)); for iExtension := 0 to pred(Items[iExtType].Extensions.Count) do if length(Items[iExtType].Extensions.Strings[iExtension]) > 0 then Result := crc32(Result, @Items[iExtType].Extensions.Strings[iExtension][1], length(Items[iExtType].Extensions.Strings[iExtension])); for iAction := 0 to pred(Items[iExtType].ActionList.Count) do begin if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FParams) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FParams[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FParams)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath)); end; end; end; { TExts.SaveXMLFile } procedure TExts.SaveXMLFile; var ActionList: TExtActionList; iFileType, iAction: Integer; ExtXMLSettings: TXmlConfig = nil; Root, Node, SubNode, SubSubNode: TXmlNode; begin ExtXMLSettings := TXmlConfig.Create(gpCfgDir + gcfExtensionAssociation); try with ExtXMLSettings do begin Root := ExtXMLSettings.RootNode; SetAttr(Root, 'DCVersion', dcVersion); Node := FindNode(Root, 'ExtensionAssociation', True); ClearNode(Node); { Each file type has its own extensions } for iFileType := 0 to Pred(Count) do begin SubNode := AddNode(Node, 'FileType'); SetValue(SubNode, 'Name', FileType[iFileType].Name); SetValue(SubNode, 'IconFile', FileType[iFileType].Icon); SetValue(SubNode, 'ExtensionList', FileType[iFileType].GetIconListForStorage); SubNode := AddNode(SubNode, 'Actions'); ActionList := FileType[iFileType].ActionList; for iAction := 0 to Pred(ActionList.Count) do begin SubSubNode := AddNode(SubNode, 'Action'); SetValue(SubSubNode, 'Name', ActionList.ExtActionCommand[iAction].ActionName); if ActionList.ExtActionCommand[iAction].CommandName <> '' then SetValue(SubSubNode, 'Command', ActionList.ExtActionCommand[iAction].CommandName); if ActionList.ExtActionCommand[iAction].Params <> '' then SetValue(SubSubNode, 'Params', ActionList.ExtActionCommand[iAction].Params); if ActionList.ExtActionCommand[iAction].StartPath <> '' then SetValue(SubSubNode, 'StartPath', ActionList.ExtActionCommand[iAction].StartPath); end; end; end; ExtXMLSettings.Save; finally ExtXMLSettings.Free; end; end; { TExts.Load} function TExts.Load: boolean; begin Result := False; try if (mbFileExists(gpCfgDir + 'doublecmd.ext')) AND (not mbFileExists(gpCfgDir + gcfExtensionAssociation)) then begin LegacyLoadFromFile(gpCfgDir + 'doublecmd.ext'); SaveXmlFile; mbRenameFile(gpCfgDir + 'doublecmd.ext', gpCfgDir + 'doublecmd.ext.obsolete'); Result := True; end else begin Result := LoadXMLFile; end; except Result := False; end; end; { TExts.LoadXMLFile } function TExts.LoadXMLFile: boolean; var extCurrentFileType: TExtAction; ExtXMLSettings: TXmlConfig = nil; Node, SubNode, SubSubNode: TXmlNode; sName, sIconFilename, sExtensionList, sActionName, sCommandName, sParams, sStartPath: string; begin Result := False; try ExtXMLSettings := TXmlConfig.Create(gpCfgDir + gcfExtensionAssociation); try ExtXMLSettings.Load; with ExtXMLSettings do begin Node := FindNode(ExtXMLSettings.RootNode, 'ExtensionAssociation'); if Assigned(Node) then begin SubNode := Node.FirstChild; while Assigned(SubNode) do begin if SubNode.CompareName('FileType') = 0 then begin sName := ExtXMLSettings.GetValue(SubNode, 'Name', rsMsgUserDidNotSetName); if sName <> rsMsgUserDidNotSetName then begin sIconFilename := ExtXMLSettings.GetValue(SubNode, 'IconFile', ''); sExtensionList := ExtXMLSettings.GetValue(SubNode, 'ExtensionList', rsMsgUserDidNotSetExtension); extCurrentFileType := TExtAction.Create; extCurrentFileType.Name := sName; extCurrentFileType.Icon := sIconFilename; extCurrentFileType.SetIconListFromStorage(sExtensionList); SubSubNode := FindNode(SubNode, 'Actions'); if Assigned(SubSubNode) then begin SubSubNode := SubSubNode.FirstChild; while Assigned(SubSubNode) do begin if SubSubNode.CompareName('Action') = 0 then begin sActionName := ExtXMLSettings.GetValue(SubSubNode, 'Name', rsMsgUserDidNotSetName); sCommandName := ExtXMLSettings.GetValue(SubSubNode, 'Command', ''); sParams := ExtXMLSettings.GetValue(SubSubNode, 'Params', ''); sStartPath := ExtXMLSettings.GetValue(SubSubNode, 'StartPath', ''); extCurrentFileType.ActionList.Add(TExtActionCommand.Create(sActionName, sCommandName, sParams, sStartPath)); end; SubSubNode := SubSubNode.NextSibling; end; end; AddItem(extCurrentFileType); end; end; SubNode := SubNode.NextSibling; end; end; end; finally ExtXMLSettings.Free; end; Result := True; except Result := False; end; end; end. //Cleaner les >Action@//Utiliser ExtFileType comme nom au lieu de Action car pas tout de suite une action//Remplacer le Savefile by SaveXMLFile doublecmd-1.1.30/src/uextension.pas0000644000175000001440000000602515104114162016265 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Extension API implementation Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uExtension; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, Extension, Translations; type { TDcxModule } TDcxModule = class protected FPOFile: TPOFile; FModulePath: String; FModuleHandle: TLibHandle; public destructor Destroy; override; procedure InitializeExtension(StartupInfo: PExtensionStartupInfo); end; implementation uses Math, LazFileUtils, DCOSUtils, fDialogBox, uGlobs, uGlobsPaths; function Translate(Translation: Pointer; Identifier, Original: PAnsiChar; Output: PAnsiChar; OutLen: Integer): Integer; dcpcall; var AText: String; POFile: TPOFile absolute Translation; begin if (POFile = nil) then begin Result:= 0; Output^:= #0; end else begin AText:= POFile.Translate(Identifier, Original); StrPLCopy(Output, AText, OutLen - 1); Result:= Min(Length(AText), OutLen - 1); end; end; { TDcxModule } destructor TDcxModule.Destroy; begin inherited Destroy; FPOFile.Free; end; procedure TDcxModule.InitializeExtension(StartupInfo: PExtensionStartupInfo); const VERSION_API = 4; var Language: String; AFileName, APath: String; begin FillByte(StartupInfo^, SizeOf(TExtensionStartupInfo), 0); AFileName:= FModulePath; APath:= ExtractFilePath(AFileName) + 'language' + PathDelim; Language:= ExtractFileExt(ExtractFileNameOnly(gPOFileName)); AFileName:= APath + ExtractFileNameOnly(AFileName) + Language + '.po'; if mbFileExists(AFileName) then FPOFile:= TPOFile.Create(AFileName); with StartupInfo^ do begin StructSize:= SizeOf(TExtensionStartupInfo); PluginDir:= ExtractFilePath(FModulePath); PluginConfDir:= gpCfgDir; InputBox:= @fDialogBox.InputBox; MessageBox:= @fDialogBox.MessageBox; DialogBoxLFM:= @fDialogBox.DialogBoxLFM; DialogBoxLRS:= @fDialogBox.DialogBoxLRS; DialogBoxLFMFile:= @fDialogBox.DialogBoxLFMFile; SendDlgMsg:= @fDialogBox.SendDlgMsg; Translation:= FPOFile; TranslateString:= @Translate; VersionAPI:= VERSION_API; MsgChoiceBox:= @fDialogBox.MsgChoiceBox; DialogBoxParam:= @fDialogBox.DialogBoxParam; end; end; end. doublecmd-1.1.30/src/uexifwdx.pas0000644000175000001440000001152515104114162015730 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple exif-wdx plugin. Copyright (C) 2016-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uExifWdx; {$mode delphi} interface uses Classes, SysUtils, WdxPlugin, uWDXModule, uExifReader; type { TExifWdx } TExifWdx = class(TEmbeddedWDX) private FFileName: String; FExif: TExifReader; procedure GetData(const FileName: String); protected function GetAName: String; override; public //--------------------- constructor Create; override; destructor Destroy; override; //------------------------------------------------------ procedure CallContentGetSupportedField; override; procedure CallContentSetDefaultParams; override; procedure CallContentStopGetValue(FileName: String); override; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; override; function CallContentGetDetectString: String; override; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; override; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; override; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; override; //------------------------------------------------------ end; implementation { TExifWdx } procedure TExifWdx.GetData(const FileName: String); begin if (FFileName <> FileName) then begin FFileName:= FileName; FExif.LoadFromFile(FileName); end; end; function TExifWdx.GetAName: String; begin Result:= ''; end; constructor TExifWdx.Create; begin inherited Create; FExif:= TExifReader.Create; DetectStr:= CallContentGetDetectString; end; destructor TExifWdx.Destroy; begin FExif.Free; inherited Destroy; end; procedure TExifWdx.CallContentGetSupportedField; begin AddField(cMake, rsMake, ft_string); AddField(cModel, rsModel, ft_string); AddField(cImageWidth, rsImageWidth, ft_numeric_32); AddField(cImageHeight, rsImageHeight, ft_numeric_32); AddField(cOrientation, rsOrientation, ft_numeric_32); AddField(cDateTimeOriginal, rsDateTimeOriginal, ft_datetime); end; procedure TExifWdx.CallContentSetDefaultParams; begin end; procedure TExifWdx.CallContentStopGetValue(FileName: String); begin end; function TExifWdx.CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; begin Result:= False; end; function TExifWdx.CallContentGetDetectString: String; begin Result:= '(EXT="JPG") | (EXT="JPEG")'; end; function TExifWdx.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; begin Result:= Unassigned; EnterCriticalSection(FMutex); try GetData(FileName); case FieldIndex of 0: if Length(FExif.Make) > 0 then Result:= FExif.Make; 1: if Length(FExif.Model) > 0 then Result:= FExif.Model; 2: if FExif.ImageWidth > 0 then Result:= FExif.ImageWidth; 3: if FExif.ImageHeight > 0 then Result:= FExif.ImageHeight; 4: if FExif.Orientation > 0 then Result:= FExif.Orientation; 5: if FExif.DateTimeOriginal > 0 then Result:= FExif.DateTimeOriginal; end; finally LeaveCriticalSection(FMutex); end; end; function TExifWdx.CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; begin Result:= EmptyStr; EnterCriticalSection(FMutex); try GetData(FileName); case FieldIndex of 0: Result:= FExif.Make; 1: Result:= FExif.Model; 2: if FExif.ImageWidth > 0 then Result:= IntToStr(FExif.ImageWidth); 3: if FExif.ImageHeight > 0 then Result:= IntToStr(FExif.ImageHeight); 4: if FExif.Orientation > 0 then Result:= IntToStr(FExif.Orientation); 5: if FExif.DateTimeOriginal > 0 then Result:= DateTimeToStr(FExif.DateTimeOriginal); end; finally LeaveCriticalSection(FMutex); end; end; function TExifWdx.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin Result:= 0; end; end. doublecmd-1.1.30/src/uexifreader.pas0000644000175000001440000002041715104114162016370 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple exchangeable image file format reader Copyright (C) 2016-2024 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit uExifReader; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StreamEx; type { TTag } TTag = packed record ID : UInt16; // Tag number Typ : UInt16; // Tag type Count : UInt32; // Tag length Offset : UInt32; // Offset / Value end; { TExifReader } TExifReader = class(TMemoryStream) private FOffset: Int64; FSwap: Boolean; protected FMake: String; FModel: String; FImageWidth: UInt16; FImageHeight: UInt16; FOrientation: UInt16; FDateTimeOriginal: TDateTime; private procedure Reset; function ReadString(Offset, Count: Int32): String; function ReadDateTime(Offset, Count: Int32): TDateTime; procedure ReadTag(var ATag: TTag); function DoImageFileDirectory: Boolean; public function LoadFromFile(const FileName: String): Boolean; property Make: String read FMake; property Model: String read FModel; property ImageWidth: UInt16 read FImageWidth; property ImageHeight: UInt16 read FImageHeight; property Orientation: UInt16 read FOrientation; property DateTimeOriginal: TDateTime read FDateTimeOriginal; end; const cMake = 'Manufacturer'; cModel = 'Camera model'; cImageWidth = 'Width'; cImageHeight = 'Height'; cOrientation = 'Orientation'; cDateTimeOriginal = 'Date taken'; resourcestring rsMake = cMake; rsModel = cModel; rsImageWidth = cImageWidth; rsImageHeight = cImageHeight; rsOrientation = cOrientation; rsDateTimeOriginal = cDateTimeOriginal; implementation uses Math, DCClassesUtf8; { TExifReader } procedure TExifReader.Reset; begin Clear; FImageWidth:= 0; FImageHeight:= 0; FOrientation:= 0; FMake:= EmptyStr; FModel:= EmptyStr; FDateTimeOriginal:= 0; end; function TExifReader.ReadString(Offset, Count: Int32): String; var AOffset: Int64; begin if Count <= 4 then Result:= PAnsiChar(@Offset) else begin AOffset:= Self.Seek(0, soCurrent); Self.Seek(Offset + FOffset, soBeginning); SetLength(Result, Count); Self.ReadBuffer(Result[1], Count); Result:= PAnsiChar(Result); Self.Seek(AOffset, soBeginning); end; end; function TExifReader.ReadDateTime(Offset, Count: Int32): TDateTime; var S: String; SystemTime: TSystemTime; begin S:= ReadString(Offset, Count); try SystemTime.Millisecond:= 0; // Data format is "YYYY:MM:DD HH:MM:SS" SystemTime.Year:= StrToDWord(Copy(S, 1, 4)); SystemTime.Month:= StrToDWord(Copy(S, 6, 2)); SystemTime.Day:= StrToDWord(Copy(S, 9, 2)); SystemTime.Hour:= StrToDWord(Copy(S, 12, 2)); SystemTime.Minute:= StrToDWord(Copy(S, 15, 2)); SystemTime.Second:= StrToDWord(Copy(S, 18, 2)); Result:= SystemTimeToDateTime(SystemTime); except Result:= 0; end; end; procedure TExifReader.ReadTag(var ATag: TTag); begin Self.ReadBuffer(ATag, SizeOf(TTag)); if FSwap = False then begin case ATag.Typ of 1, 6: ATag.Offset:= UInt8(ATag.Offset); 3, 8: ATag.Offset:= UInt16(ATag.Offset); end; end else begin ATag.ID:= SwapEndian(ATag.ID); ATag.Typ:= SwapEndian(ATag.Typ); ATag.Count:= SwapEndian(ATag.Count); case ATag.Typ of 1, 6: ATag.Offset:= UInt8(ATag.Offset); 3, 8: ATag.Offset:= SwapEndian(UInt16(ATag.Offset)); else if (ATag.Typ <> 2) or (ATag.Count > 4) then ATag.Offset:= SwapEndian(ATag.Offset); end; end; end; function TExifReader.DoImageFileDirectory: Boolean; var I: Int32; ATag: TTag; ACount: UInt16; AOffset: Int32 = 0; begin ACount:= Self.ReadWord; if FSwap then ACount:= SwapEndian(ACount); for I:= 1 to ACount do begin ReadTag(ATag); case ATag.ID of $100: // Image width begin FImageWidth := ATag.Offset; end; $101: // Image height begin FImageHeight := ATag.Offset; end; $010f: // Shows manufacturer of digicam begin FMake:= ReadString(ATag.Offset, ATag.Count); end; $0110: // Shows model number of digicam begin FModel:= ReadString(ATag.Offset, ATag.Count); end; $0112: // The orientation of the camera relative to the scene begin FOrientation:= ATag.Offset; end; $8769: // Exif IFD Pointer begin AOffset:= ATag.Offset; end; end; end; Result:= ACount > 0; if AOffset > 0 then begin Self.Seek(FOffset + AOffset, soBeginning); ACount:= Self.ReadWord; if FSwap then ACount:= SwapEndian(ACount); for I:= 1 to ACount do begin ReadTag(ATag); case ATag.ID of $9003: // Date/Time of original image taken begin FDateTimeOriginal:= ReadDateTime(ATag.Offset, ATag.Count); end; // Image pixel width $A002: if FImageWidth = 0 then FImageWidth := ATag.Offset; // Image pixel height $A003: if FImageHeight = 0 then FImageHeight := ATag.Offset; end; end; end; end; function TExifReader.LoadFromFile(const FileName: String): Boolean; const BUFFER_SIZE = 196608; var P: UInt16; ASize: UInt16; Offset: UInt32; AFile: TFileStreamEx; Magic: array [0..5] of AnsiChar; begin Reset; try AFile:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try Self.SetSize(Min(AFile.Size, BUFFER_SIZE)); AFile.ReadBuffer(Self.Memory^, Self.Size); finally AFile.Free; end; except Exit(False); end; try if (Self.ReadByte <> $FF) then Exit(False); if (Self.ReadByte <> $D8) then Exit(False); repeat if Self.ReadByte = $FF then begin case Self.ReadByte of $E1: // Exif Marker begin Break; end; $D9: // End Of Image (EOI) begin Exit(False); end; else begin // Unknown section, skip P:= Self.ReadWordBE; Self.Seek(Int64(P) - 2, soCurrent); end; end; end; until False; // Exif data size ASize:= Self.ReadWordBE; // Exif magic string Self.Read(Magic, SizeOf(Magic)); if (CompareByte(Magic, 'Exif'#0#0, SizeOf(Magic)) <> 0) then Exit(False); FOffset:= Self.Seek(0, soCurrent); // Byte order case Self.ReadWord of $4949: FSwap:= {$IF DEFINED(ENDIAN_BIG)} True {$ELSE} False {$ENDIF}; // little-endian $4D4D: FSwap:= {$IF DEFINED(ENDIAN_LITTLE)} True {$ELSE} False {$ENDIF}; // big-endian else Exit(False); end; // Magic word P:= Self.ReadWord; if (P <> $002A) and (P <> $2A00) then Exit(False); // Offset to first IFD Offset:= Self.ReadDWord; if FSwap then Offset:= SwapEndian(Offset); // Go to Image file directory Self.Seek(Offset - 8, soCurrent); Result:= DoImageFileDirectory; except Reset; Result:= False; end; end; end. doublecmd-1.1.30/src/uexceptions.pas0000644000175000001440000001412715104114162016434 0ustar alexxusersunit uExceptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function ExceptionToString: String; procedure WriteExceptionToFile(const aFileName: String; const ExceptionText: String = ''); procedure WriteExceptionToErrorFile(const ExceptionText: String = ''); inline; procedure ShowExceptionDialog(const ExceptionText: String = ''); procedure ShowException(e: Exception); {en Log exception to file, show on console and show message dialog. Can be called from other threads. } procedure HandleException(e: Exception; AThread: TThread = nil); implementation uses Forms, Controls, Dialogs, LCLProc, LCLStrConsts, syncobjs, uDebug, uLng, uGlobs, uDCVersion, DCOSUtils, LazUTF8, DCConvertEncoding; type THandleException = class private FHandleExceptionLock: TCriticalSection; FHandleExceptionMessage: String; FHandleExceptionBackTrace: String; procedure ShowException; public constructor Create; reintroduce; destructor Destroy; override; procedure HandleException(e: Exception; AThread: TThread = nil); end; var HandleExceptionObj: THandleException; function ExceptionToString: String; var FrameCount: Integer; FrameNumber: Integer; Frames: PPointer; begin Result := 'Unhandled exception:'; if Assigned(ExceptObject) and (ExceptObject is Exception) then begin Result := Result + ' ' + Exception(ExceptObject).ClassName + ': ' + Exception(ExceptObject).Message; end; Result := Result + LineEnding + ' Stack trace:' + LineEnding + BackTraceStrFunc(ExceptAddr) + LineEnding; FrameCount := ExceptFrameCount; Frames := ExceptFrames; for FrameNumber := 0 to FrameCount - 1 do Result := Result + BackTraceStrFunc(Frames[FrameNumber]) + LineEnding; end; procedure WriteExceptionToFile(const aFileName: String; const ExceptionText: String); var f: System.Text; begin if (aFileName <> EmptyStr) and not mbDirectoryExists(aFileName) then begin AssignFile(f, UTF8ToSys(aFileName)); {$PUSH}{$I-} if not mbFileExists(aFileName) then Rewrite(f) else if mbFileAccess(aFileName, fmOpenWrite or fmShareDenyNone) then Append(f); {$POP} if (TextRec(f).mode <> fmClosed) and (IOResult = 0) then begin WriteLn(f, '--------------- ', FormatDateTime('dd-mm-yyyy, hh:nn:ss', SysUtils.Now), ' ---------------'); WriteLn(f, '| DC v', dcVersion, ' Rev. ', dcRevision, ' -- ', TargetCPU + '-' + TargetOS + '-' + TargetWS); if WSVersion <> EmptyStr then Write(f, '| ', OSVersion, ' -- ', WSVersion) else Write(f, '| ', OSVersion); WriteLn(f, ' | PID ', GetProcessID); if ExceptionText = EmptyStr then begin if Assigned(ExceptObject) and (ExceptObject is Exception) then WriteLn(f, 'Unhandled exception: ', Exception(ExceptObject).ClassName, ': ', Exception(ExceptObject).Message) else WriteLn(f, 'Unhandled exception'); WriteLn(f, ' Stack trace:'); System.DumpExceptionBackTrace(f); end else WriteLn(f, ExceptionText); // Make one empty line. WriteLn(f); CloseFile(f); end; end; end; procedure WriteExceptionToErrorFile(const ExceptionText: String = ''); begin WriteExceptionToFile(gErrorFile, ExceptionText); end; procedure ShowExceptionDialog(const ExceptionText: String = ''); // Based on TApplication.ShowException. var Msg: string; MsgResult: Integer; begin if AppNoExceptionMessages in Application.Flags then exit; if ExceptionText = EmptyStr then begin if Assigned(ExceptObject) and (ExceptObject is Exception) then Msg := Exception(ExceptObject).Message else Msg := ''; end else Msg := ExceptionText; if FindInvalidUTF8Codepoint(PChar(Msg), Length(Msg), False) > 0 then Msg := CeSysToUtf8(Msg); if (Msg <> '') and (Msg[length(Msg)] = LineEnding) then Delete(Msg, Length(Msg), 1); with Application do if (not Terminated) and (Application <> nil) and (AppInitialized in Flags) then begin DisableIdleHandler; try MsgResult := MessageDlg( Application.Title + ' - ' + rsMtError, rsMtError + ':' + LineEnding + Msg + LineEnding + LineEnding + Format(rsUnhandledExceptionMessage, [LineEnding + gErrorFile + LineEnding + LineEnding, StringReplace(rsMbIgnore, '&', '', [rfReplaceAll]), StringReplace(rsMbAbort, '&', '', [rfReplaceAll])]), mtError, [mbIgnore, mbAbort], 0, mbIgnore); finally EnableIdleHandler; end; if MsgResult = mrAbort then begin Flags := Flags + [AppNoExceptionMessages]; Halt; end; end; end; procedure ShowException(e: Exception); begin MessageDlg(Application.Title, rsMsgLogError + LineEnding + e.Message, mtError, [mbOK], 0); end; procedure HandleException(e: Exception; AThread: TThread); begin HandleExceptionObj.HandleException(e, AThread); end; constructor THandleException.Create; begin FHandleExceptionLock := TCriticalSection.Create; end; destructor THandleException.Destroy; begin inherited; FreeAndNil(FHandleExceptionLock); end; procedure THandleException.HandleException(e: Exception; AThread: TThread); var BackTrace: String; begin if MainThreadID = GetCurrentThreadId then begin BackTrace := ExceptionToString; DCDebug(BackTrace); WriteExceptionToErrorFile(BackTrace); ShowExceptionDialog(e.Message); end else begin FHandleExceptionLock.Acquire; try FHandleExceptionMessage := e.Message; FHandleExceptionBackTrace := ExceptionToString; if FHandleExceptionBackTrace <> EmptyStr then DCDebug(FHandleExceptionBackTrace); TThread.Synchronize(AThread, @ShowException); finally FHandleExceptionLock.Release; end; end; end; procedure THandleException.ShowException; begin WriteExceptionToErrorFile(FHandleExceptionBackTrace); ShowExceptionDialog(FHandleExceptionMessage); end; initialization HandleExceptionObj := THandleException.Create; finalization FreeAndNil(HandleExceptionObj); end. doublecmd-1.1.30/src/udsxmodule.pas0000644000175000001440000002440315104114162016255 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- (DSX) Search plugin API implementation. DSX - Double commander Search eXtentions. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDsxModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, dynlibs, LCLProc, DsxPlugin, DCClassesUtf8, uDCUtils, DCXmlConfig; type { TDsxModule } TDsxModule = class protected SStartSearch: TSStartSearch; SStopSearch: TSStopSearch; SAddFileProc: TSAddFileProc; SUpdateStatusProc: TSUpdateStatusProc; SInit: TSInit; SFinalize: TSFinalize; private FPluginNr: integer; FModuleHandle: TLibHandle; // Handle to .DLL or .so function GIsLoaded: boolean; public Name: string; FileName: string; Descr: string; //--------------------- constructor Create; destructor Destroy; override; //--------------------- function LoadModule: boolean; procedure UnloadModule; //--------------------- function CallInit(pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): integer; procedure CallStartSearch(SearchRec: TDsxSearchRecord); procedure CallStopSearch; procedure CallFinalize; //--------------------- property IsLoaded: boolean read GIsLoaded; property ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; end; { TDSXModuleList } TDSXModuleList = class private Flist: TStringList; function GetCount: integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Move(CurIndex, NewIndex: Integer); procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function ComputeSignature(seed: dword): dword; procedure DeleteItem(Index: integer); //--------------------- function Add(Item: TDSXModule): integer; overload; function Add(FileName: string): integer; overload; function Add(AName, FileName, Descr: string): integer; overload; //--------------------- procedure Assign(OtherList: TDSXModuleList); //--------------------- function IsLoaded(AName: string): boolean; overload; function IsLoaded(Index: integer): boolean; overload; function LoadModule(AName: string): boolean; overload; function LoadModule(Index: integer): boolean; overload; //--------------------- function GetDSXModule(Index: integer): TDSXModule; overload; function GetDSXModule(AName: string): TDSXModule; overload; //--------------------- property Count: integer read GetCount; end; implementation uses //Lazarus, Free-Pascal, etc. //DC DCOSUtils, uDebug, uGlobs, uGlobsPaths, uComponentsSignature; const DsxIniFileName = 'dsx.ini'; { TDsxModule } function TDsxModule.GIsLoaded: boolean; begin Result := FModuleHandle <> 0; end; constructor TDsxModule.Create; begin FModuleHandle := 0; inherited Create; end; destructor TDsxModule.Destroy; begin if GIsLoaded then UnloadModule; inherited Destroy; end; function TDsxModule.LoadModule: boolean; begin FModuleHandle := mbLoadLibrary(mbExpandFileName(Self.FileName)); Result := (FModuleHandle <> 0); if FModuleHandle = 0 then exit; SStopSearch := TSStopSearch(GetProcAddress(FModuleHandle, 'StopSearch')); SStartSearch := TSStartSearch(GetProcAddress(FModuleHandle, 'StartSearch')); SInit := TSInit(GetProcAddress(FModuleHandle, 'Init')); SFinalize := TSFinalize(GetProcAddress(FModuleHandle, 'Finalize')); end; procedure TDsxModule.UnloadModule; begin if Assigned(SFinalize) then SFinalize(FPluginNr); {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; SStartSearch := nil; SStopSearch := nil; SInit := nil; SFinalize := nil; end; function TDsxModule.CallInit(pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): integer; var dps: TDsxDefaultParamStruct; begin if Assigned(SInit) then begin dps.DefaultIniName := gpCfgDir + DsxIniFileName; dps.PluginInterfaceVersionHi := 0; dps.PluginInterfaceVersionLow := 10; dps.size := SizeOf(TDsxDefaultParamStruct); FPluginNr := Sinit(@dps, pAddFileProc, pUpdateStatus); Result := FPluginNr; end; end; procedure TDsxModule.CallStartSearch(SearchRec: TDsxSearchRecord); begin if Assigned(SStartSearch) then SStartSearch(FPluginNr, @SearchRec); end; procedure TDsxModule.CallStopSearch; begin if Assigned(SStopSearch) then SStopSearch(FPluginNr); end; procedure TDsxModule.CallFinalize; begin if Assigned(SFinalize) then SFinalize(FPluginNr); end; { TDSXModuleList } function TDSXModuleList.GetCount: integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TDSXModuleList.Create; begin Flist := TStringList.Create; end; destructor TDSXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TDSXModuleList.Clear; begin while Flist.Count > 0 do begin TDSXModule(Flist.Objects[0]).Free; Flist.Delete(0); end; end; procedure TDSXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TDSXModuleList.Move(CurIndex, NewIndex: Integer); begin FList.Move(CurIndex, NewIndex); end; procedure TDSXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; ADsxModule: TDSXModule; begin Clear; ANode := ANode.FindNode('DsxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('DsxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin ADsxModule := TDsxModule.Create; Flist.AddObject(UpCase(AName), ADsxModule); ADsxModule.Name := AName; ADsxModule.FileName := APath; ADsxModule.Descr := AConfig.GetValue(ANode, 'Description', ''); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TDSXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'DsxPlugins', True); AConfig.ClearNode(ANode); for i := 0 to Flist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'DsxPlugin'); AConfig.AddValue(SubNode, 'Name', TDSXModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', TDSXModule(Flist.Objects[I]).FileName); AConfig.AddValue(SubNode, 'Description', TDSXModule(Flist.Objects[I]).Descr); end; end; { TDSXModuleList.ComputeSignature } function TDSXModuleList.ComputeSignature(seed: dword): dword; var iIndex: integer; begin result := seed; for iIndex := 0 to pred(Count) do begin result := ComputeSignatureString(result, TDSXModule(Flist.Objects[iIndex]).Name); result := ComputeSignatureString(result, TDSXModule(Flist.Objects[iIndex]).FileName); result := ComputeSignatureString(result, TDSXModule(Flist.Objects[iIndex]).Descr); end; end; procedure TDSXModuleList.DeleteItem(Index: integer); begin if (Index > -1) and (Index < Flist.Count) then begin TDSXModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TDSXModuleList.Add(Item: TDSXModule): integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TDSXModuleList.Add(FileName: string): integer; var s: string; begin s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); Result := Flist.AddObject(UpCase(s), TDSXModule.Create); TDSXModule(Flist.Objects[Result]).Name := s; TDSXModule(Flist.Objects[Result]).FileName := FileName; end; function TDSXModuleList.Add(AName, FileName, Descr: string): integer; begin Result := Flist.AddObject(UpCase(AName), TDSXModule.Create); TDSXModule(Flist.Objects[Result]).Name := AName; TDSXModule(Flist.Objects[Result]).Descr := Descr; TDSXModule(Flist.Objects[Result]).FileName := FileName; end; procedure TDSXModuleList.Assign(OtherList: TDSXModuleList); var i: Integer; begin Clear; for i := 0 to OtherList.Flist.Count - 1 do begin with TDSXModule(OtherList.Flist.Objects[I]) do Add(Name, FileName, Descr); end; end; function TDSXModuleList.IsLoaded(AName: string): boolean; var x: integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetDSXModule(x).IsLoaded; end; end; function TDSXModuleList.IsLoaded(Index: integer): boolean; begin Result := GetDSXModule(Index).IsLoaded; end; function TDSXModuleList.LoadModule(AName: string): boolean; var x: integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetDSXModule(x).LoadModule; end; end; function TDSXModuleList.LoadModule(Index: integer): boolean; begin Result := GetDSXModule(Index).LoadModule; end; function TDSXModuleList.GetDSXModule(Index: integer): TDSXModule; begin Result := TDSXModule(Flist.Objects[Index]); end; function TDSXModuleList.GetDSXModule(AName: string): TDSXModule; var tmp: integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp > -1 then Result := TDSXModule(Flist.Objects[tmp]); end; end. doublecmd-1.1.30/src/udriveslist.pas0000644000175000001440000004037415104114162016446 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Control that shows drives list and allows selecting a drive. Copyright (C) 2009-2018 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2009-2011 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDrivesList; {$mode objfpc}{$H+} {$IFDEF MSWINDOWS} {$DEFINE ForceVirtualKeysShortcuts} {$DEFINE FileCaseInsensitive} {$ENDIF} {$IFDEF DARWIN} {$DEFINE FileCaseInsensitive} {$ENDIF} interface uses Classes, SysUtils, Grids, Controls, LCLType, uFilePanelSelect, uDrive; type TDriveSelected = procedure (Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect) of object; { TDrivesListPopup } TDrivesListPopup = class(TStringGrid) private FDriveIconSize: Integer; FDrivesList: TDrivesList; FPanel: TFilePanelSelect; FShortCuts: array of TUTF8Char; FAllowSelectDummyRow: Boolean; FOnDriveSelected: TDriveSelected; FOnClose: TNotifyEvent; {en @param(ARow Row nr in the grid (LowestRow..HighestRow).) } function GetDriveIndexByRow(ARow: Integer): Integer; function GetDrivesCount: Integer; function GetLowestRow: Integer; function GetHighestRow: Integer; procedure PrepareCanvasEvent(Sender: TObject; aCol, {%H-}aRow: Integer; {%H-}aState: TGridDrawState); procedure SelectCellEvent(Sender: TObject; {%H-}aCol, aRow: Integer; var CanSelect: Boolean); procedure EnterEvent(Sender: TObject); procedure ExitEvent(Sender: TObject); procedure KeyDownEvent(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); procedure KeyPressEvent(Sender: TObject; var Key: Char); {$IFNDEF ForceVirtualKeysShortcuts} procedure UTF8KeyPressEvent(Sender: TObject; var UTF8Key: TUTF8Char); {$ENDIF} procedure SelectDrive(ADriveIndex: Integer); procedure DoDriveSelected(ADriveIndex: Integer); procedure ShowContextMenu(ADriveIndex: Integer; X, Y: Integer); procedure ContextMenuClosed(Sender: TObject); {en Checks if the given shortcut is assigned to a drive. If it is then that drive is selected. @returns(@true if shortcut found, @false otherwise.) } function CheckShortcut(AShortcut: TUTF8Char): Boolean; procedure Close; procedure UpdateCells; procedure UpdateSize; property LowestRow: Integer read GetLowestRow; property HighestRow: Integer read GetHighestRow; protected procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; procedure MouseDown(Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); override; procedure MouseMove({%H-}Shift: TShiftState; X, Y: Integer); override; procedure MouseUp({%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; public constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure UpdateDrivesList(ADrivesList: TDrivesList); procedure UpdateView; {en Shows the drive list. @param(AtPoint Position where to show the list.) @param(APanel For which panel the list is to be shown.) @param(ASelectedDriveIndex Which drive to pre-select (0..DrivesCount-1).) } procedure Show(AtPoint: TPoint; APanel: TFilePanelSelect; ASelectedDriveIndex: Integer = -1); procedure SetFocus; override; property Panel: TFilePanelSelect read FPanel; property DrivesCount: Integer read GetDrivesCount; property OnDriveSelected: TDriveSelected read FOnDriveSelected write FOnDriveSelected; property OnClose: TNotifyEvent read FOnClose write FOnClose; end; implementation uses StdCtrls, Graphics, LCLProc, LazUTF8, uPixMapManager, uOSUtils, uDCUtils, uOSForms, uGlobs; const DriveIconSize = 16; // One dummy row is added, which is not displayed and cannot be selected. // It is used to simulate having no selection in the grid, because the // TCustomGrid forces at least one row/cell to be selected or focused. DummyRows = 1; constructor TDrivesListPopup.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csNoFocus]; Parent := AParent; FDrivesList := nil; FShortCuts := nil; FAllowSelectDummyRow := False; FOnDriveSelected := nil; FOnClose := nil; AllowOutboundEvents := False; AutoFillColumns := False; BorderStyle := bsNone; BorderWidth := 0; ExtendedSelect := False; Flat := False; FocusRectVisible := False; MouseWheelOption := mwGrid; Options := [goRowSelect, goThumbTracking]; ScrollBars := ssNone; Visible := False; while Columns.Count < 5 do Columns.Add; RowCount := 0 + DummyRows; FixedCols := 0; FixedRows := 0; if DummyRows > 0 then RowHeights[FixedRows] := 1; // Every row must have Height > 0 Color := clBtnFace; Font.Color := clWindowText; FDriveIconSize := AdjustIconSize(DriveIconSize, 96); OnPrepareCanvas := @PrepareCanvasEvent; OnSelectCell := @SelectCellEvent; OnEnter := @EnterEvent; OnExit := @ExitEvent; OnKeyDown := @KeyDownEvent; OnKeyPress := @KeyPressEvent; {$IFNDEF ForceVirtualKeysShortcuts} OnUTF8KeyPress := @UTF8KeyPressEvent; {$ENDIF} end; procedure TDrivesListPopup.UpdateDrivesList(ADrivesList: TDrivesList); begin FDrivesList := ADrivesList; RowCount := LowestRow + ADrivesList.Count; Clean; SetLength(FShortCuts, ADrivesList.Count); // If currently visible update the grid. if IsVisible then begin UpdateCells; UpdateSize; end; end; procedure TDrivesListPopup.UpdateView; begin Columns.Items[2].Visible := dlbShowLabel in gDrivesListButtonOptions; Columns.Items[3].Visible := dlbShowFileSystem in gDrivesListButtonOptions; Columns.Items[4].Visible := dlbShowFreeSpace in gDrivesListButtonOptions; end; procedure TDrivesListPopup.Show(AtPoint: TPoint; APanel: TFilePanelSelect; ASelectedDriveIndex: Integer = -1); begin UpdateCells; UpdateSize; FPanel := APanel; Left := AtPoint.X; Top := AtPoint.Y; Visible := True; ASelectedDriveIndex := LowestRow + ASelectedDriveIndex; if (ASelectedDriveIndex >= LowestRow) and (ASelectedDriveIndex <= HighestRow) then Row := ASelectedDriveIndex else begin FAllowSelectDummyRow := True; Row := FixedRows; // Select dummy row to clear selection FAllowSelectDummyRow := False; end; // Set focus using parent procedure. inherited SetFocus; end; procedure TDrivesListPopup.SetFocus; begin // Empty - don't allow setting focus. end; procedure TDrivesListPopup.PrepareCanvasEvent(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); var ts: TTextStyle; begin if aCol = 4 then begin // Right-align free space text in third column. ts := Canvas.TextStyle; ts.Alignment := taRightJustify; Canvas.TextStyle := ts; end else if aCol > 0 then begin // Left-align other columns (except column 0 which shows the icon). ts := Canvas.TextStyle; ts.Alignment := taLeftJustify; Canvas.TextStyle := ts; end; end; function TDrivesListPopup.GetDriveIndexByRow(ARow: Integer): Integer; begin if (ARow >= LowestRow) and (ARow <= HighestRow) then Result := ARow - LowestRow else Result := -1; end; function TDrivesListPopup.GetDrivesCount: Integer; begin Result := HighestRow - LowestRow + 1; end; function TDrivesListPopup.GetLowestRow: Integer; begin Result := FixedRows + DummyRows; end; function TDrivesListPopup.GetHighestRow: Integer; begin Result := RowCount - 1; end; procedure TDrivesListPopup.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Drive: PDrive; BitmapTmp: TBitmap; begin if (aRow = FixedRows) and (DummyRows > 0) then // Don't draw the dummy row. Exit else if (aCol = 0) and (aRow >= LowestRow) then begin inherited; // Draw drive icon in the first column. Drive := FDrivesList.Items[GetDriveIndexByRow(aRow)]; // get disk icon BitmapTmp := PixMapManager.GetDriveIcon(Drive, FDriveIconSize, Self.Color); if Assigned(BitmapTmp) then begin // Center icon in the cell. aRect.Left := aRect.Left + (ColWidths[aCol] - FDriveIconSize) div 2; aRect.Top := aRect.Top + (RowHeights[aRow] - FDriveIconSize) div 2; Canvas.Draw(aRect.Left, aRect.Top, BitmapTmp); FreeAndNil(BitmapTmp); end; end else begin inherited; // Draw vertical lines separating cells, but only in columns other than first. with Canvas, aRect do begin MoveTo(Right - 1, Top); LineTo(Right - 1, Bottom); end; end; end; procedure TDrivesListPopup.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseDown (don't call inherited). if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) then Close else begin MouseToCell(X, Y, ACol, ARow); if (ACol < 0) or (ARow < 0) then Close else begin case Button of mbLeft: SelectDrive(GetDriveIndexByRow(ARow)); mbRight: ShowContextMenu(GetDriveIndexByRow(ARow), X, Y); end; end; end; end; procedure TDrivesListPopup.MouseMove(Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseMove (don't call inherited). if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) then Exit; MouseToCell(X, Y, ACol, ARow); if (ACol >= 0) and (ARow >= 0) then Row := ARow; end; procedure TDrivesListPopup.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseUp (don't call inherited). MouseToCell(X, Y, ACol, ARow); if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) or (ACol < 0) or (ARow < 0) then Close; end; procedure TDrivesListPopup.Paint; var ARect: TRect; begin {$IFDEF LCLQT} // In QT Frame3d draws filled rectangle, so it must be drawn before // or it would overwrite all the painting done below. ARect := Classes.Rect(0, 0, Width, Height); Canvas.Frame3d(ARect, 1, bvRaised); {$ENDIF} inherited Paint; {$IFNDEF LCLQT} // This draws empty frame rectangle. ARect := Classes.Rect(0, 0, Width, Height); Canvas.Frame3d(ARect, 1, bvRaised); {$ENDIF} end; procedure TDrivesListPopup.SelectCellEvent(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); begin // Don't allow selecting dummy row. if (not FAllowSelectDummyRow) and (DummyRows > 0) then CanSelect := aRow > FixedRows else CanSelect := True; end; procedure TDrivesListPopup.EnterEvent(Sender: TObject); begin // Mouse capture is needed for detecting when mouse is clicked outside the control. // This also recaptures mouse if user switched to another application and back. MouseCapture := True; end; procedure TDrivesListPopup.ExitEvent(Sender: TObject); begin Close; end; procedure TDrivesListPopup.KeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState); var Rect: TRect; begin case Key of VK_HOME, VK_PRIOR: begin Row := LowestRow; Key := 0; end; VK_END, VK_NEXT: begin Row := HighestRow; Key := 0; end; VK_UP, VK_LEFT: begin if Row > LowestRow then Row := Row - 1 // If dummy row selected then select the last row. else if Row = FixedRows then Row := HighestRow; Key := 0; end; VK_DOWN, VK_RIGHT: begin if Row < HighestRow then Row := Row + 1; Key := 0; end; VK_RETURN, VK_SELECT, VK_SPACE: begin SelectDrive(GetDriveIndexByRow(Row)); Key := 0; end; VK_ESCAPE: begin Close; Key := 0; end; VK_APPS: begin Rect := CellRect(2, Row); ShowContextMenu(GetDriveIndexByRow(Row), Rect.Left, Rect.Top); Key := 0; end; {$IFDEF ForceVirtualKeysShortcuts} VK_0..VK_9, VK_A..VK_Z: begin if (CheckShortcut(TUTF8Char(Char(Key)))) then Key := 0; end; {$ENDIF} end; end; procedure TDrivesListPopup.KeyPressEvent(Sender: TObject; var Key: Char); begin if CheckShortcut(TUTF8Char(Key)) then Key := #0; end; {$IFNDEF ForceVirtualKeysShortcuts} procedure TDrivesListPopup.UTF8KeyPressEvent(Sender: TObject; var UTF8Key: TUTF8Char); begin if CheckShortcut(UTF8Key) then UTF8Key := ''; end; {$ENDIF} procedure TDrivesListPopup.SelectDrive(ADriveIndex: Integer); begin if (ADriveIndex >= 0) and (ADriveIndex < DrivesCount) then begin MouseCapture := False; DoDriveSelected(ADriveIndex); Close; end; end; procedure TDrivesListPopup.DoDriveSelected(ADriveIndex: Integer); begin if Assigned(FOnDriveSelected) then FOnDriveSelected(Self, ADriveIndex, FPanel); end; procedure TDrivesListPopup.ShowContextMenu(ADriveIndex: Integer; X, Y: Integer); var pt: TPoint; begin if (ADriveIndex >= 0) and (ADriveIndex < FDrivesList.Count) then begin pt.X := X; pt.Y := Y; pt := ClientToScreen(pt); // Context menu usually captures mouse so we have to disable ours. MouseCapture := False; ShowDriveContextMenu(Self, FDrivesList[ADriveIndex], pt.X, pt.Y, @ContextMenuClosed); end; end; procedure TDrivesListPopup.ContextMenuClosed(Sender: TObject); begin MouseCapture := True; end; function TDrivesListPopup.CheckShortcut(AShortcut: TUTF8Char): Boolean; var i: Integer; begin {$IFDEF FileCaseInsensitive} AShortCut := UpperCase(AShortcut); {$ENDIF} for i := 0 to Length(FShortCuts) - 1 do begin if FShortCuts[i] = AShortcut then begin SelectDrive(i); Exit(True); end; end; Result := False; end; procedure TDrivesListPopup.Close; begin MouseCapture := False; Visible := False; if Assigned(FOnClose) then FOnClose(Self); end; procedure TDrivesListPopup.UpdateCells; var I, RowNr : Integer; FreeSize, TotalSize: Int64; Drive: PDrive; begin for I := 0 to FDrivesList.Count - 1 do begin Drive := FDrivesList[I]; RowNr := LowestRow + I; if Length(Drive^.DisplayName) > 0 then begin Cells[1, RowNr] := Drive^.DisplayName; {$IFDEF FileCaseInsensitive} FShortCuts[I] := UTF8Copy(UpperCase(Drive^.DisplayName), 1, 1); {$ELSE} FShortCuts[I] := UTF8Copy(Drive^.DisplayName, 1, 1); {$ENDIF} end else begin Cells[1, RowNr] := Drive^.Path; FShortCuts[I] := ''; end; Cells[2, RowNr] := GetDriveLabelOrStatus(Drive); Cells[3, RowNr] := Drive^.FileSystem; // Display free space only for some drives // (removable, network, etc. may be slow). if (Drive^.DriveType in [dtHardDisk, dtOptical, dtRamDisk, dtRemovableUsb]) and IsAvailable(Drive, False) and GetDiskFreeSpace(Drive^.Path, FreeSize, TotalSize) then begin Cells[4, RowNr] := Format('%s/%s', [cnvFormatFileSize(FreeSize, uoscHeader), cnvFormatFileSize(TotalSize, uoscHeader)]) end else if (Drive^.DriveSize > 0) then begin Cells[4, RowNr] := cnvFormatFileSize(Drive^.DriveSize, uoscHeader); end end; // for end; procedure TDrivesListPopup.UpdateSize; var I : Integer; w, h: Integer; begin // Needed for autosizing to work before the control is visible. HandleNeeded; AutoSizeColumns; // Add some space to the icon column. ColWidths[0] := FDriveIconSize + 8; // Add some space to other columns. for I := 1 to ColCount - 1 do ColWidths[I] := ColWidths[I] + 4; w := GridWidth; h := GridHeight; if DummyRows > 0 then Inc(h, RowHeights[FixedRows] + GridLineWidth); Width := w; Height := h; end; end. doublecmd-1.1.30/src/udrive.pas0000644000175000001440000001050315104114162015356 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Structures describing drives. Copyright (C) 2006-2010 Koblov Alexander (Alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDrive; {$mode objfpc}{$H+} interface uses Classes; type TDriveType = (dtUnknown, dtFlash, // Flash drive dtFloppy, // 3.5'', ZIP drive, etc. dtHardDisk, // Hard disk drive dtNetwork, // Network share dtOptical, // CD, DVD, Blu-Ray, etc. dtRamDisk, // Ram-disk dtRemovable, // Drive with removable media dtRemovableUsb, // Drive connected via USB dtVirtual, // Virtual drive dtSpecial); // Special drive { TDrive } // On Linux we also put here mount points other than drives. TDrive = record DisplayName, // EmptyStr then Result := Drive^.DriveLabel else if not Drive^.IsMediaAvailable then Result := rsDriveNoMedia else Result := rsDriveNoLabel; end; { TDrivesList } constructor TDrivesList.Create; begin FList := TFPList.Create; end; destructor TDrivesList.Destroy; begin inherited Destroy; RemoveAll; FList.Free; end; function TDrivesList.Add(ADrive: PDrive): Integer; begin Result := FList.Add(ADrive); end; procedure TDrivesList.Remove(Index: Integer); begin if (Index >= 0) and (Index < FList.Count) then begin Dispose(PDrive(FList[Index])); FList.Delete(Index); end else raise ERangeError.Create('Invalid index'); end; procedure TDrivesList.RemoveAll; begin while FList.Count > 0 do Remove(0); end; procedure TDrivesList.Sort(Compare: TListSortCompare); begin FList.Sort(Compare); end; function TDrivesList.Get(Index: Integer): PDrive; begin if (Index >= 0) and (Index < FList.Count) then begin Result := PDrive(FList.Items[Index]); end else raise ERangeError.Create('Invalid index'); end; function TDrivesList.GetCount: Integer; begin Result := FList.Count; end; end. doublecmd-1.1.30/src/udisplayfile.pas0000644000175000001440000001547015104114162016562 0ustar alexxusersunit uDisplayFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, uFile; type TDisplayItemPtr = Pointer; TBusyState = (bsProp, bsTag); TDisplayFileBusy = set of TBusyState; {en Describes the file displayed in the file view. } { TDisplayFile } TDisplayFile = class private FFSFile: TFile; //= 0 then Delete(i); end; function TDisplayFiles.Get(Index: Integer): TDisplayFile; begin Result := TDisplayFile(FList.Items[Index]); end; procedure TDisplayFiles.Put(Index: Integer; AFile: TDisplayFile); begin FList.Items[Index] := AFile; end; end. doublecmd-1.1.30/src/udiffonp.pas0000644000175000001440000006710115104114162015700 0ustar alexxusersunit uDiffONP; (******************************************************************************* * Component TDiff * * Version: 4.1 * * Date: 7 November 2009 * * Compilers: Delphi 7 - Delphi 2009 * * Author: Angus Johnson - angusj-AT-myrealbox-DOT-com * * Copyright: 2001-2009 Angus Johnson * * * * Licence to use, terms and conditions: * * The code in the TDiff component is released as freeware * * provided you agree to the following terms & conditions: * * 1. the copyright notice, terms and conditions are * * left unchanged * * 2. modifications to the code by other authors must be * * clearly documented and accompanied by the modifier's name. * * 3. the TDiff component may be freely compiled into binary * * format and no acknowledgement is required. However, a * * discrete acknowledgement would be appreciated (eg. in a * * program's 'About Box'). * * * * Description: Component to list differences between two integer arrays * * using a "longest common subsequence" algorithm. * * Typically, this component is used to diff 2 text files * * once their individuals lines have been hashed. * * * * Acknowledgements: The key algorithm in this component is based on: * * "An O(NP) Sequence Comparison Algorithm" * * by Sun Wu, Udi Manber & Gene Myers * * and uses a "divide-and-conquer" technique to avoid * * using exponential amounts of memory as described in * * "An O(ND) Difference Algorithm and its Variations" * * By E Myers - Algorithmica Vol. 1 No. 2, 1986, pp. 251-266 * *******************************************************************************) (******************************************************************************* * History: * * 13 December 2001 - Original release (used Myer's O(ND) Difference Algorithm) * * 22 April 2008 - Complete rewrite to greatly improve the code and * * provide a much simpler view of differences through a new * * 'Compares' property. * * 21 May 2008 - Another complete code rewrite to use Sun Wu et al.'s * * O(NP) Sequence Comparison Algorithm which more than * * halves times of typical comparisons. * * 24 May 2008 - Reimplemented "divide-and-conquer" technique (which was * * omitted in 21 May release) so memory use is again minimal.* * 25 May 2008 - Removed recursion to avoid the possibility of running out * * of stack memory during massive comparisons. * * 2 June 2008 - Bugfix: incorrect number of appended AddChangeInt() calls * * in Execute() for integer arrays. (It was OK with Chars) * * Added check to prevent repeat calls to Execute() while * * already executing. * * Added extra parse of differences to find occasional * * missed matches. (See readme.txt for further discussion) * * 7 November 2009 - Updated so now compiles in newer versions of Delphi. * *******************************************************************************) {$mode delphi} interface uses SysUtils, Classes, Math, Forms, Dialogs; const MAX_DIAGONAL = $FFFFFF; //~16 million type {$IFDEF UNICODE} P8Bits = PByte; {$ELSE} P8Bits = PAnsiChar; {$ENDIF} PDiags = ^TDiags; TDiags = array [-MAX_DIAGONAL .. MAX_DIAGONAL] of integer; PIntArray = ^TIntArray; TIntArray = array[0 .. MAXINT div sizeof(integer) -1] of Integer; PChrArray = ^TChrArray; TChrArray = array[0 .. MAXINT div sizeof(char) -1] of Char; TChangeKind = (ckNone, ckAdd, ckDelete, ckModify); PCompareRec = ^TCompareRec; TCompareRec = record Kind : TChangeKind; oldIndex1, oldIndex2 : integer; case boolean of false : (chr1, chr2 : Char); true : (int1, int2 : integer); end; PDiffVars = ^TDiffVars; TDiffVars = record offset1 : integer; offset2 : integer; len1 : integer; len2 : integer; end; TDiffStats = record matches : integer; adds : integer; deletes : integer; modifies : integer; end; TDiff = class(TComponent) private fCompareList: TList; fDiffList: TList; //this TList circumvents the need for recursion fCancelled: boolean; fExecuting: boolean; fCompareInts: boolean; //ie are we comparing integer arrays or char arrays DiagBufferF: pointer; DiagBufferB: pointer; DiagF, DiagB: PDiags; Ints1, Ints2: PIntArray; Chrs1, Chrs2: PChrArray; fDiffStats: TDiffStats; fLastCompareRec: TCompareRec; procedure PushDiff(offset1, offset2, len1, len2: integer); function PopDiff: boolean; procedure InitDiagArrays(len1, len2: integer); procedure DiffInt(offset1, offset2, len1, len2: integer); procedure DiffChr(offset1, offset2, len1, len2: integer); function SnakeChrF(k,offset1,offset2,len1,len2: integer): boolean; function SnakeChrB(k,offset1,offset2,len1,len2: integer): boolean; function SnakeIntF(k,offset1,offset2,len1,len2: integer): boolean; function SnakeIntB(k,offset1,offset2,len1,len2: integer): boolean; procedure AddChangeChr(offset1, range: integer; ChangeKind: TChangeKind); procedure AddChangeInt(offset1, range: integer; ChangeKind: TChangeKind); function GetCompareCount: integer; function GetCompare(index: integer): TCompareRec; public constructor Create(aOwner: TComponent); override; destructor Destroy; override; //compare either and array of characters or an array of integers ... function Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; overload; function Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; overload; //Cancel allows interrupting excessively prolonged comparisons procedure Cancel; procedure Clear; property Cancelled: boolean read fCancelled; property Count: integer read GetCompareCount; property Compares[index: integer]: TCompareRec read GetCompare; default; property DiffStats: TDiffStats read fDiffStats; end; implementation procedure Register; begin RegisterComponents('Samples', [TDiff]); end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ constructor TDiff.Create(aOwner: TComponent); begin inherited; fCompareList := TList.create; fDiffList := TList.Create; end; //------------------------------------------------------------------------------ destructor TDiff.Destroy; begin Clear; fCompareList.free; fDiffList.Free; inherited; end; //------------------------------------------------------------------------------ function TDiff.Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; var i, Len1Minus1: integer; begin result := not fExecuting; if not result then exit; fCancelled := false; fExecuting := true; try Clear; Len1Minus1 := len1 -1; fCompareList.Capacity := len1 + len2; fCompareInts := true; GetMem(DiagBufferF, sizeof(integer)*(len1+len2+3)); GetMem(DiagBufferB, sizeof(integer)*(len1+len2+3)); Ints1 := pointer(pints1); Ints2 := pointer(pints2); try PushDiff(0, 0, len1, len2); while PopDiff do; finally freeMem(DiagBufferF); freeMem(DiagBufferB); end; if fCancelled then begin result := false; Clear; exit; end; //correct the occasional missed match ... for i := 1 to count -1 do with PCompareRec(fCompareList[i])^ do if (Kind = ckModify) and (int1 = int2) then begin Kind := ckNone; Dec(fDiffStats.modifies); Inc(fDiffStats.matches); end; //finally, append any trailing matches onto compareList ... with fLastCompareRec do AddChangeInt(oldIndex1,len1Minus1-oldIndex1, ckNone); finally fExecuting := false; end; end; //------------------------------------------------------------------------------ function TDiff.Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; var i, Len1Minus1: integer; begin result := not fExecuting; if not result then exit; fCancelled := false; fExecuting := true; try Clear; Len1Minus1 := len1 -1; fCompareList.Capacity := len1 + len2; fDiffList.Capacity := 1024; fCompareInts := false; GetMem(DiagBufferF, sizeof(integer)*(len1+len2+3)); GetMem(DiagBufferB, sizeof(integer)*(len1+len2+3)); Chrs1 := pointer(pchrs1); Chrs2 := pointer(pchrs2); try PushDiff(0, 0, len1, len2); while PopDiff do; finally freeMem(DiagBufferF); freeMem(DiagBufferB); end; if fCancelled then begin result := false; Clear; exit; end; //correct the occasional missed match ... for i := 1 to count -1 do with PCompareRec(fCompareList[i])^ do if (Kind = ckModify) and (chr1 = chr2) then begin Kind := ckNone; Dec(fDiffStats.modifies); Inc(fDiffStats.matches); end; //finally, append any trailing matches onto compareList ... with fLastCompareRec do AddChangeChr(oldIndex1,len1Minus1-oldIndex1, ckNone); finally fExecuting := false; end; end; //------------------------------------------------------------------------------ procedure TDiff.PushDiff(offset1, offset2, len1, len2: integer); var DiffVars: PDiffVars; begin new(DiffVars); DiffVars.offset1 := offset1; DiffVars.offset2 := offset2; DiffVars.len1 := len1; DiffVars.len2 := len2; fDiffList.Add(DiffVars); end; //------------------------------------------------------------------------------ function TDiff.PopDiff: boolean; var DiffVars: PDiffVars; idx: integer; begin idx := fDiffList.Count -1; result := idx >= 0; if not result then exit; DiffVars := PDiffVars(fDiffList[idx]); with DiffVars^ do if fCompareInts then DiffInt(offset1, offset2, len1, len2) else DiffChr(offset1, offset2, len1, len2); Dispose(DiffVars); fDiffList.Delete(idx); end; //------------------------------------------------------------------------------ procedure TDiff.InitDiagArrays(len1, len2: integer); var i: integer; begin //assumes that top and bottom matches have been excluded P8Bits(DiagF) := P8Bits(DiagBufferF) - sizeof(integer)*(MAX_DIAGONAL-(len1+1)); for i := - (len1+1) to (len2+1) do DiagF[i] := -MAXINT; DiagF[1] := -1; P8Bits(DiagB) := P8Bits(DiagBufferB) - sizeof(integer)*(MAX_DIAGONAL-(len1+1)); for i := - (len1+1) to (len2+1) do DiagB[i] := MAXINT; DiagB[len2-len1+1] := len2; end; //------------------------------------------------------------------------------ procedure TDiff.DiffInt(offset1, offset2, len1, len2: integer); var p, k, delta: integer; begin //trim matching bottoms ... while (len1 > 0) and (len2 > 0) and (Ints1[offset1] = Ints2[offset2]) do begin inc(offset1); inc(offset2); dec(len1); dec(len2); end; //trim matching tops ... while (len1 > 0) and (len2 > 0) and (Ints1[offset1+len1-1] = Ints2[offset2+len2-1]) do begin dec(len1); dec(len2); end; //stop diff'ing if minimal conditions reached ... if (len1 = 0) then begin AddChangeInt(offset1 ,len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeInt(offset1 ,len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeInt(offset1, 1, ckDelete); AddChangeInt(offset1, 1, ckAdd); exit; end; p := -1; delta := len2 - len1; InitDiagArrays(len1, len2); if delta < 0 then begin repeat inc(p); if (p mod 1024) = 1023 then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := p downto delta +1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := -p + delta to delta-1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := delta -p to -1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; for k := p downto 1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; if SnakeIntF(delta,offset1,offset2,len1,len2) then exit; if SnakeIntB(0,offset1,offset2,len1,len2) then exit; until(false); end else begin repeat inc(p); if (p mod 1024) = 1023 then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := -p to delta -1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := p + delta downto delta +1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := delta + p downto 1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; for k := -p to -1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; if SnakeIntF(delta,offset1,offset2,len1,len2) then exit; if SnakeIntB(0,offset1,offset2,len1,len2) then exit; until(false); end; end; //------------------------------------------------------------------------------ procedure TDiff.DiffChr(offset1, offset2, len1, len2: integer); var p, k, delta: integer; begin //trim matching bottoms ... while (len1 > 0) and (len2 > 0) and (Chrs1[offset1] = Chrs2[offset2]) do begin inc(offset1); inc(offset2); dec(len1); dec(len2); end; //trim matching tops ... while (len1 > 0) and (len2 > 0) and (Chrs1[offset1+len1-1] = Chrs2[offset2+len2-1]) do begin dec(len1); dec(len2); end; //stop diff'ing if minimal conditions reached ... if (len1 = 0) then begin AddChangeChr(offset1 ,len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeChr(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeChr(offset1, 1, ckDelete); AddChangeChr(offset1, 1, ckAdd); exit; end; p := -1; delta := len2 - len1; InitDiagArrays(len1, len2); if delta < 0 then begin repeat inc(p); if (p mod 1024 = 1023) then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := p downto delta +1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := -p + delta to delta-1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := delta -p to -1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; for k := p downto 1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; if SnakeChrF(delta,offset1,offset2,len1,len2) then exit; if SnakeChrB(0,offset1,offset2,len1,len2) then exit; until(false); end else begin repeat inc(p); if (p mod 1024 = 1023) then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := -p to delta -1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := p + delta downto delta +1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := delta + p downto 1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; for k := -p to -1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; if SnakeChrF(delta,offset1,offset2,len1,len2) then exit; if SnakeChrB(0,offset1,offset2,len1,len2) then exit; until(false); end; end; //------------------------------------------------------------------------------ function TDiff.SnakeChrF(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagF[k+1] > DiagF[k-1] then y := DiagF[k+1] else y := DiagF[k-1]+1; x := y - k; while (x < len1-1) and (y < len2-1) and (Chrs1[offset1+x+1] = Chrs2[offset2+y+1]) do begin inc(x); inc(y); end; DiagF[k] := y; result := (DiagF[k] >= DiagB[k]); if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeChrB(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagB[k-1] < DiagB[k+1] then y := DiagB[k-1] else y := DiagB[k+1]-1; x := y - k; while (x >= 0) and (y >= 0) and (Chrs1[offset1+x] = Chrs2[offset2+y]) do begin dec(x); dec(y); end; DiagB[k] := y; result := DiagB[k] <= DiagF[k]; if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeIntF(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagF[k+1] > DiagF[k-1] then y := DiagF[k+1] else y := DiagF[k-1]+1; x := y - k; while (x < len1-1) and (y < len2-1) and (Ints1[offset1+x+1] = Ints2[offset2+y+1]) do begin inc(x); inc(y); end; DiagF[k] := y; result := (DiagF[k] >= DiagB[k]); if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeIntB(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagB[k-1] < DiagB[k+1] then y := DiagB[k-1] else y := DiagB[k+1]-1; x := y - k; while (x >= 0) and (y >= 0) and (Ints1[offset1+x] = Ints2[offset2+y]) do begin dec(x); dec(y); end; DiagB[k] := y; result := DiagB[k] <= DiagF[k]; if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeChr(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (fLastCompareRec.oldIndex1 < offset1 -1) do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckNone: for i := 1 to range do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; ckAdd : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := fLastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).chr2 := Chrs2[oldIndex2]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; chr1 := #0; inc(oldIndex2); chr2 := Chrs2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := fLastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).chr1 := Chrs1[oldIndex1]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; chr2 := #0; inc(oldIndex1); chr1 := Chrs1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeInt(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (fLastCompareRec.oldIndex1 < offset1 -1) do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckNone: for i := 1 to range do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; ckAdd : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := fLastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).int2 := Ints2[oldIndex2]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; int1 := $0; inc(oldIndex2); int2 := Ints2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := fLastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).int1 := Ints1[oldIndex1]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; int2 := $0; inc(oldIndex1); int1 := Ints1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.Clear; var i: integer; begin for i := 0 to fCompareList.Count-1 do dispose(PCompareRec(fCompareList[i])); fCompareList.clear; fLastCompareRec.Kind := ckNone; fLastCompareRec.oldIndex1 := -1; fLastCompareRec.oldIndex2 := -1; fDiffStats.matches := 0; fDiffStats.adds := 0; fDiffStats.deletes :=0; fDiffStats.modifies :=0; Ints1 := nil; Ints2 := nil; Chrs1 := nil; Chrs2 := nil; end; //------------------------------------------------------------------------------ function TDiff.GetCompareCount: integer; begin result := fCompareList.count; end; //------------------------------------------------------------------------------ function TDiff.GetCompare(index: integer): TCompareRec; begin result := PCompareRec(fCompareList[index])^; end; //------------------------------------------------------------------------------ procedure TDiff.Cancel; begin fCancelled := true; end; //------------------------------------------------------------------------------ end. doublecmd-1.1.30/src/udiffond.pas0000644000175000001440000006074315104114162015671 0ustar alexxusersunit uDiffOND; (******************************************************************************* * Component TDiff * * Version: 3.1 * * Date: 7 November 2009 * * Compilers: Delphi 7 - Delphi2009 * * Author: Angus Johnson - angusj-AT-myrealbox-DOT-com * * Copyright: 2001-200( Angus Johnson * * * * Licence to use, terms and conditions: * * The code in the TDiff component is released as freeware * * provided you agree to the following terms & conditions: * * 1. the copyright notice, terms and conditions are * * left unchanged * * 2. modifications to the code by other authors must be * * clearly documented and accompanied by the modifier's name. * * 3. the TDiff component may be freely compiled into binary * * format and no acknowledgement is required. However, a * * discrete acknowledgement would be appreciated (eg. in a * * program's 'About Box'). * * * * Description: Component to list differences between two integer arrays * * using a "longest common subsequence" algorithm. * * Typically, this component is used to diff 2 text files * * once their individuals lines have been hashed. * * * * Acknowledgements: The key algorithm in this component is based on: * * "An O(ND) Difference Algorithm and its Variations" * * By E Myers - Algorithmica Vol. 1 No. 2, 1986, pp. 251-266 * * http://www.cs.arizona.edu/people/gene/ * * http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps * * * *******************************************************************************) (******************************************************************************* * History: * * 13 December 2001 - Original Release * * 22 April 2008 - Complete rewrite to greatly improve the code and * * provide a much simpler view of differences through a new * * 'Compares' property. * * 7 November 2009 - Updated so now compiles in newer versions of Delphi. * *******************************************************************************) {$mode delphi}{$H+} interface uses SysUtils, Classes, Math, Forms; const //Maximum realistic deviation from centre diagonal vector ... MAX_DIAGONAL = $FFFFFF; //~16 million type {$IFDEF UNICODE} P8Bits = PByte; {$ELSE} P8Bits = PAnsiChar; {$ENDIF} PDiags = ^TDiags; TDiags = array [-MAX_DIAGONAL .. MAX_DIAGONAL] of integer; PIntArray = ^TIntArray; TIntArray = array[0 .. MAXINT div sizeof(integer) -1] of Integer; PChrArray = ^TChrArray; TChrArray = array[0 .. MAXINT div sizeof(char) -1] of Char; TChangeKind = (ckNone, ckAdd, ckDelete, ckModify); PCompareRec = ^TCompareRec; TCompareRec = record Kind : TChangeKind; oldIndex1, oldIndex2 : integer; case boolean of false : (chr1, chr2 : Char); true : (int1, int2 : integer); end; TDiffStats = record matches : integer; adds : integer; deletes : integer; modifies : integer; end; TDiff = class(TComponent) private fCompareList: TList; fCancelled: boolean; fExecuting: boolean; fDiagBuffer, bDiagBuffer: pointer; Chrs1, Chrs2: PChrArray; Ints1, Ints2: PIntArray; LastCompareRec: TCompareRec; fDiag, bDiag: PDiags; fDiffStats: TDiffStats; procedure InitDiagArrays(MaxOscill, len1, len2: integer); //nb: To optimize speed, separate functions are called for either //integer or character compares ... procedure RecursiveDiffChr(offset1, offset2, len1, len2: integer); procedure AddChangeChrs(offset1, range: integer; ChangeKind: TChangeKind); procedure RecursiveDiffInt(offset1, offset2, len1, len2: integer); procedure AddChangeInts(offset1, range: integer; ChangeKind: TChangeKind); function GetCompareCount: integer; function GetCompare(index: integer): TCompareRec; public constructor Create(aOwner: TComponent); override; destructor Destroy; override; //compare either and array of characters or an array of integers ... function Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; overload; function Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; overload; //Cancel allows interrupting excessively prolonged comparisons procedure Cancel; procedure Clear; property Cancelled: boolean read fCancelled; property Count: integer read GetCompareCount; property Compares[index: integer]: TCompareRec read GetCompare; default; property DiffStats: TDiffStats read fDiffStats; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TDiff]); end; constructor TDiff.Create(aOwner: TComponent); begin inherited; fCompareList := TList.create; end; //------------------------------------------------------------------------------ destructor TDiff.Destroy; begin Clear; fCompareList.free; inherited; end; //------------------------------------------------------------------------------ function TDiff.Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; var maxOscill, x1,x2, savedLen: integer; compareRec: PCompareRec; begin result := not fExecuting; if not result then exit; fExecuting := true; fCancelled := false; try Clear; //save first string length for later (ie for any trailing matches) ... savedLen := len1-1; //setup the character arrays ... Chrs1 := pointer(pchrs1); Chrs2 := pointer(pchrs2); //ignore top matches ... x1:= 0; x2 := 0; while (len1 > 0) and (len2 > 0) and (Chrs1[len1-1] = Chrs2[len2-1]) do begin dec(len1); dec(len2); end; //if something doesn't match ... if (len1 <> 0) or (len2 <> 0) then begin //ignore bottom of matches too ... while (len1 > 0) and (len2 > 0) and (Chrs1[x1] = Chrs2[x2]) do begin dec(len1); dec(len2); inc(x1); inc(x2); end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); fCompareList.Capacity := len1 + len2; //nb: the Diag arrays are extended by 1 at each end to avoid testing //for array limits. Hence '+3' because will also includes Diag[0] ... GetMem(fDiagBuffer, sizeof(integer)*(maxOscill*2+3)); GetMem(bDiagBuffer, sizeof(integer)*(maxOscill*2+3)); try RecursiveDiffChr(x1, x2, len1, len2); finally freeMem(fDiagBuffer); freeMem(bDiagBuffer); end; end; if fCancelled then begin result := false; Clear; exit; end; //finally, append any trailing matches onto compareList ... while (LastCompareRec.oldIndex1 < savedLen) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; finally fExecuting := false; end; end; //------------------------------------------------------------------------------ function TDiff.Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; var maxOscill, x1,x2, savedLen: integer; compareRec: PCompareRec; begin result := not fExecuting; if not result then exit; fExecuting := true; fCancelled := false; try Clear; //setup the character arrays ... Ints1 := pointer(pints1); Ints2 := pointer(pints2); //save first string length for later (ie for any trailing matches) ... savedLen := len1-1; //ignore top matches ... x1:= 0; x2 := 0; while (len1 > 0) and (len2 > 0) and (Ints1[len1-1] = Ints2[len2-1]) do begin dec(len1); dec(len2); end; //if something doesn't match ... if (len1 <> 0) or (len2 <> 0) then begin //ignore bottom of matches too ... while (len1 > 0) and (len2 > 0) and (Ints1[x1] = Ints2[x2]) do begin dec(len1); dec(len2); inc(x1); inc(x2); end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); fCompareList.Capacity := len1 + len2; //nb: the Diag arrays are extended by 1 at each end to avoid testing //for array limits. Hence '+3' because will also includes Diag[0] ... GetMem(fDiagBuffer, sizeof(integer)*(maxOscill*2+3)); GetMem(bDiagBuffer, sizeof(integer)*(maxOscill*2+3)); try RecursiveDiffInt(x1, x2, len1, len2); finally freeMem(fDiagBuffer); freeMem(bDiagBuffer); end; end; if fCancelled then begin result := false; Clear; exit; end; //finally, append any trailing matches onto compareList ... while (LastCompareRec.oldIndex1 < savedLen) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; finally fExecuting := false; end; end; //------------------------------------------------------------------------------ procedure TDiff.InitDiagArrays(MaxOscill, len1, len2: integer); var diag: integer; begin inc(maxOscill); //for the extra diag at each end of the arrays ... P8Bits(fDiag) := P8Bits(fDiagBuffer) - sizeof(integer)*(MAX_DIAGONAL-maxOscill); P8Bits(bDiag) := P8Bits(bDiagBuffer) - sizeof(integer)*(MAX_DIAGONAL-maxOscill); //initialize Diag arrays (assumes 0 based arrays) ... for diag := - maxOscill to maxOscill do fDiag[diag] := -MAXINT; fDiag[0] := -1; for diag := - maxOscill to maxOscill do bDiag[diag] := MAXINT; bDiag[len1 - len2] := len1-1; end; //------------------------------------------------------------------------------ procedure TDiff.RecursiveDiffChr(offset1, offset2, len1, len2: integer); var diag, lenDelta, Oscill, maxOscill, x1, x2: integer; begin //nb: the possible depth of recursion here is most unlikely to cause // problems with stack overflows. application.processmessages; if fCancelled then exit; if (len1 = 0) then begin AddChangeChrs(offset1, len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeChrs(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeChrs(offset1, 1, ckDelete); AddChangeChrs(offset1, 1, ckAdd); exit; end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); InitDiagArrays(MaxOscill, len1, len2); lenDelta := len1 -len2; Oscill := 1; //ie assumes prior filter of top and bottom matches while Oscill <= maxOscill do begin if (Oscill mod 200) = 0 then begin application.processmessages; if fCancelled then exit; end; //do forward oscillation (keeping diag within assigned grid)... diag := Oscill; while diag > len1 do dec(diag,2); while diag >= max(- Oscill, -len2) do begin if fDiag[diag-1] < fDiag[diag+1] then x1 := fDiag[diag+1] else x1 := fDiag[diag-1]+1; x2 := x1 - diag; while (x1 < len1-1) and (x2 < len2-1) and (Chrs1[offset1+x1+1] = Chrs2[offset2+x2+1]) do begin inc(x1); inc(x2); end; fDiag[diag] := x1; //nb: (fDiag[diag] is always < bDiag[diag]) here when NOT odd(lenDelta) ... if odd(lenDelta) and (fDiag[diag] >= bDiag[diag]) then begin inc(x1);inc(x2); //save x1 & x2 for second recursive_diff() call by reusing no longer //needed variables (ie minimize variable allocation in recursive fn) ... diag := x1; Oscill := x2; while (x1 > 0) and (x2 > 0) and (Chrs1[offset1+x1-1] = Chrs2[offset2+x2-1]) do begin dec(x1); dec(x2); end; RecursiveDiffChr(offset1, offset2, x1, x2); x1 := diag; x2 := Oscill; RecursiveDiffChr(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; //do backward oscillation (keeping diag within assigned grid)... diag := lenDelta + Oscill; while diag > len1 do dec(diag,2); while diag >= max(lenDelta - Oscill, -len2) do begin if bDiag[diag-1] < bDiag[diag+1] then x1 := bDiag[diag-1] else x1 := bDiag[diag+1]-1; x2 := x1 - diag; while (x1 > -1) and (x2 > -1) and (Chrs1[offset1+x1] = Chrs2[offset2+x2]) do begin dec(x1); dec(x2); end; bDiag[diag] := x1; if bDiag[diag] <= fDiag[diag] then begin //flag return value then ... inc(x1);inc(x2); RecursiveDiffChr(offset1, offset2, x1, x2); while (x1 < len1) and (x2 < len2) and (Chrs1[offset1+x1] = Chrs2[offset2+x2]) do begin inc(x1); inc(x2); end; RecursiveDiffChr(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; inc(Oscill); end; //while Oscill <= maxOscill raise Exception.create('oops - error in RecursiveDiffChr()'); end; //------------------------------------------------------------------------------ procedure TDiff.RecursiveDiffInt(offset1, offset2, len1, len2: integer); var diag, lenDelta, Oscill, maxOscill, x1, x2: integer; begin //nb: the possible depth of recursion here is most unlikely to cause // problems with stack overflows. application.processmessages; if fCancelled then exit; if (len1 = 0) then begin assert(len2 > 0,'oops!'); AddChangeInts(offset1, len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeInts(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin assert(Ints1[offset1] <> Ints2[offset2],'oops!'); AddChangeInts(offset1, 1, ckDelete); AddChangeInts(offset1, 1, ckAdd); exit; end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); InitDiagArrays(MaxOscill, len1, len2); lenDelta := len1 -len2; Oscill := 1; //ie assumes prior filter of top and bottom matches while Oscill <= maxOscill do begin if (Oscill mod 200) = 0 then begin application.processmessages; if fCancelled then exit; end; //do forward oscillation (keeping diag within assigned grid)... diag := Oscill; while diag > len1 do dec(diag,2); while diag >= max(- Oscill, -len2) do begin if fDiag[diag-1] < fDiag[diag+1] then x1 := fDiag[diag+1] else x1 := fDiag[diag-1]+1; x2 := x1 - diag; while (x1 < len1-1) and (x2 < len2-1) and (Ints1[offset1+x1+1] = Ints2[offset2+x2+1]) do begin inc(x1); inc(x2); end; fDiag[diag] := x1; //nb: (fDiag[diag] is always < bDiag[diag]) here when NOT odd(lenDelta) ... if odd(lenDelta) and (fDiag[diag] >= bDiag[diag]) then begin inc(x1);inc(x2); //save x1 & x2 for second recursive_diff() call by reusing no longer //needed variables (ie minimize variable allocation in recursive fn) ... diag := x1; Oscill := x2; while (x1 > 0) and (x2 > 0) and (Ints1[offset1+x1-1] = Ints2[offset2+x2-1]) do begin dec(x1); dec(x2); end; RecursiveDiffInt(offset1, offset2, x1, x2); x1 := diag; x2 := Oscill; RecursiveDiffInt(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; //do backward oscillation (keeping diag within assigned grid)... diag := lenDelta + Oscill; while diag > len1 do dec(diag,2); while diag >= max(lenDelta - Oscill, -len2) do begin if bDiag[diag-1] < bDiag[diag+1] then x1 := bDiag[diag-1] else x1 := bDiag[diag+1]-1; x2 := x1 - diag; while (x1 > -1) and (x2 > -1) and (Ints1[offset1+x1] = Ints2[offset2+x2]) do begin dec(x1); dec(x2); end; bDiag[diag] := x1; if bDiag[diag] <= fDiag[diag] then begin //flag return value then ... inc(x1);inc(x2); RecursiveDiffInt(offset1, offset2, x1, x2); while (x1 < len1) and (x2 < len2) and (Ints1[offset1+x1] = Ints2[offset2+x2]) do begin inc(x1); inc(x2); end; RecursiveDiffInt(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; inc(Oscill); end; //while Oscill <= maxOscill raise Exception.create('oops - error in RecursiveDiffInt()'); end; //------------------------------------------------------------------------------ procedure TDiff.Clear; var i: integer; begin for i := 0 to fCompareList.Count-1 do dispose(PCompareRec(fCompareList[i])); fCompareList.clear; LastCompareRec.Kind := ckNone; LastCompareRec.oldIndex1 := -1; LastCompareRec.oldIndex2 := -1; fDiffStats.matches := 0; fDiffStats.adds := 0; fDiffStats.deletes :=0; fDiffStats.modifies :=0; Chrs1 := nil; Chrs2 := nil; Ints1 := nil; Ints2 := nil; end; //------------------------------------------------------------------------------ function TDiff.GetCompareCount: integer; begin result := fCompareList.count; end; //------------------------------------------------------------------------------ function TDiff.GetCompare(index: integer): TCompareRec; begin result := PCompareRec(fCompareList[index])^; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeChrs(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (LastCompareRec.oldIndex1 < offset1 -1) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckAdd : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := LastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).chr2 := Chrs2[oldIndex2]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; chr1 := #0; inc(oldIndex2); chr2 := Chrs2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := LastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).chr1 := Chrs1[oldIndex1]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; chr2 := #0; inc(oldIndex1); chr1 := Chrs1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeInts(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (LastCompareRec.oldIndex1 < offset1 -1) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckAdd : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := LastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).int2 := Ints2[oldIndex2]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; int1 := $0; inc(oldIndex2); int2 := Ints2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := LastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).int1 := Ints1[oldIndex1]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; int2 := $0; inc(oldIndex1); int1 := Ints1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.Cancel; begin fCancelled := true; end; //------------------------------------------------------------------------------ end. doublecmd-1.1.30/src/udetectstr.pas0000644000175000001440000003023715104114162016254 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Detect string parser. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2009-2022 Alexander Koblov (alexx2000@mail.ru) Based on TMathControl by Vimil Saju This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDetectStr; {$mode objfpc}{$H+} interface uses SysUtils, Classes, uMasks, uFile; type TMathType = (mtnil, mtoperator, mtlbracket, mtrbracket, mtoperand); type TMathOperatorType = (monone, // NULL moequ, // = moneq, // != replaced with # moles, // < momor, // > moand, // & moor, // | monot // NOT ); type PMathChar = ^TMathChar; TMathChar = record case mathtype: TMathType of mtoperand: (data: shortstring); mtoperator: (op: TMathOperatorType); end; type { TParserControl } TParserControl = class private FData: TBytes; FForce: Boolean; FDataSize: Integer; FFileRead: Boolean; FDetectStr: String; FMathString: String; FInput, FOutput, FStack: array of TMathChar; private function FileRead(const FileName: String): Boolean; function Calculate(aFile: TFile; operand1, operand2, Aoperator: TMathChar): String; function GetOperator(C: AnsiChar): TMathOperatorType; function GetOperand(Mid: Integer; var Len: Integer): String; procedure ProcessString; procedure ConvertInfixToPostfix; function IsOperand(C: AnsiChar): Boolean; function IsOperator(C: AnsiChar): Boolean; function GetPrecedence(mop: TMathOperatorType): Integer; procedure SetDetectStr(const AValue: String); function BooleanToStr(X: Boolean): String; function StrToBoolean(S: String):Boolean; public function TestFileResult(const aFile: TFile): Boolean; overload; function TestFileResult(const aFileName: String): Boolean; overload; published property DetectStr: String read FDetectStr write SetDetectStr; property IsForce: Boolean read FForce write FForce; end; implementation uses DCStrUtils, DCClassesUtf8, uDebug, uFileProperty, uFileSystemFileSource, uFindMmap; function TParserControl.FileRead(const FileName: String): Boolean; begin FFileRead:= True; SetLength(FData, 8192); try with TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone) do try FDataSize:= Read(FData[0], Length(FData)); finally Free; end; Result:= True; except FDataSize:= 0; Result:= False; end; end; function TParserControl.Calculate(aFile: TFile; operand1, operand2, Aoperator: TMathChar): String; var ASize: Int64; AValue: Boolean; AChar, Index: Integer; tmp, data1, data2: String; begin Result:= 'false'; data1:= UpperCase(operand1.data); // NOT if (operand1.data = 'NOT') and ((operand2.data = 'true') or (operand2.data = 'false')) then begin Result:= BooleanToStr(not StrToBoolean(operand2.data)); end; // & | if ((operand1.data = 'true') or (operand1.data = 'false')) and ((operand2.data = 'true') or (operand2.data = 'false')) then begin case Aoperator.op of moand: Result:= BooleanToStr((StrToBoolean(operand1.data)) and (StrToBoolean(operand2.data))); moor: Result:= BooleanToStr((StrToBoolean(operand1.data)) or (StrToBoolean(operand2.data))); end; end; // [X]= [X]!= if StrBegins(data1, '[') and StrEnds(data1, ']') then begin if FFileRead then begin if (FDataSize = 0) then Exit; end else begin if not FileRead(aFile.FullPath) then Exit; end; data2:= operand2.data; ASize:= Length(data1); Index:= StrToIntDef(Copy(data1, 2, ASize - 2), -1); if (Index >= 0) and (Index < FDataSize) then begin ASize:= Length(data2); if (ASize > 2) and (data2[1] = '"') and (data2[ASize] = '"') then AChar:= Ord(data2[2]) else begin if not TryStrToInt(data2, AChar) then Exit; end; Result:= BooleanToStr(FData[Index] = AChar); end; end; // FIND FINDI if (data1 = 'FIND') or (data1 = 'FINDI') then begin if FFileRead then begin if (FDataSize = 0) then Exit; end else begin if not FileRead(aFile.FullPath) then Exit; end; data2:= operand2.data; ASize:= Length(data2); AValue:= (data1 = 'FIND'); if (ASize > 2) and (data2[1] = '"') and (data2[ASize] = '"') then begin data2:= Copy(data2, 2, ASize - 2); Result:= BooleanToStr(PosMem(@FData[0], FDataSize, 0, data2, AValue, False) <> Pointer(-1)); end; end; // EXT= EXT!= if (data1 = 'EXT') then begin tmp:= aFile.Extension; tmp:= UpperCase(tmp); tmp:= '"' + tmp + '"'; case Aoperator.op of moequ: Result:= BooleanToStr(MatchesMask(tmp, operand2.data)); moneq: Result:= BooleanToStr(not MatchesMask(tmp, operand2.data)); end; end; // SIZE > < = != if (data1 = 'SIZE') and (fpSize in aFile.SupportedProperties) then begin if TryStrToInt64(operand2.data, ASize) then begin case Aoperator.op of moequ: Result:= BooleanToStr(aFile.Size = ASize); moneq: Result:= BooleanToStr(aFile.Size <> ASize); moles: Result:= BooleanToStr(aFile.Size < ASize); momor: Result:= BooleanToStr(aFile.Size > ASize); end; end; end; end; function TParserControl.TestFileResult(const aFile: TFile): Boolean; var I: Integer; tmp1, tmp2, tmp3: TMathChar; begin if FMathString = '' then begin Result:= True; Exit; end; FFileRead:= False; SetLength(FStack, 0); for I:= 0 to Length(FOutput) - 1 do begin if FOutput[I].mathtype = mtoperand then begin SetLength(FStack, Length(FStack) + 1); FStack[Length(FStack) - 1]:= FOutput[I]; end else if FOutput[I].mathtype = mtoperator then begin if Length(FStack) > 1 then begin tmp1:= FStack[Length(FStack) - 1]; tmp2:= FStack[Length(FStack) - 2]; SetLength(FStack, Length(FStack) - 2); tmp3.mathtype:= mtoperand; tmp3.data:= Calculate(aFile, tmp2, tmp1, FOutput[I]); SetLength(FStack, Length(FStack) + 1); FStack[Length(FStack) - 1]:= tmp3; end; end; end; Result:= (Length(FStack) > 0) and StrToBoolean(FStack[0].data); SetLength(FStack, 0); end; function TParserControl.TestFileResult(const aFileName: String): Boolean; var aFile: TFile; begin try aFile:= TFileSystemFileSource.CreateFileFromFile(aFileName); try Result:= TestFileResult(aFile); finally aFile.Free; end; except Result:= False; end; end; function TParserControl.GetOperator(C: AnsiChar): TMathOperatorType; begin case C of '<': Result:= moles; '>': Result:= momor; '&': Result:= moand; '=': Result:= moequ; '#': Result:= moneq; '!': Result:= monot; '|': Result:= moor; else Result:= monone; end; end; function TParserControl.GetOperand(Mid: Integer; var Len: Integer): String; var I: Integer; begin Len:= High(FMathString); if (FMathString[Mid] = '"') then begin Result:= FMathString[Mid]; for I:= Mid + 1 to Len do begin Result:= Result + FMathString[I]; if FMathString[I] = '"' then Break; end; end else begin Result:= EmptyStr; for I:= Mid to Len do begin if IsOperand(FMathString[I]) then Result:= Result + FMathString[I] else Break; end; end; Len:= Length(Result); end; procedure TParserControl.ProcessString; const Flags: TReplaceFlags = [rfReplaceAll, rfIgnoreCase]; var I: Integer; NumLen: Integer; begin FMathString:= StringReplace(FMathString, 'FIND(', 'FIND=(', Flags); FMathString:= StringReplace(FMathString, '!=', '#', [rfReplaceAll]); FMathString:= StringReplace(FMathString, 'FINDI(', 'FINDI=(', Flags); FMathString:= StringReplace(FMathString, 'MULTIMEDIA', 'true', Flags); FMathString:= StringReplace(FMathString, 'FORCE', BooleanToStr(FForce), Flags); NumLen:= 1; while NumLen < Length(FMathString) do begin if (FMathString[NumLen] = '!') and (FMathString[NumLen + 1] <> '=') then begin I:= NumLen; Delete(FMathString, I, 1); Insert('NOT!', FMathString, I); Inc(NumLen, 4); end else Inc(NumLen); end; I:= 0; NumLen:= 0; SetLength(FInput, 0); SetLength(FStack, 0); SetLength(FOutput, 0); FMathString:= '(' + FMathString + ')'; SetLength(FInput, Length(FMathString)); while I <= Length(FMathString) - 1 do begin if FMathString[I + 1] = '(' then begin FInput[I].mathtype:= mtlbracket; Inc(I); end else if FMathString[I + 1] = ')' then begin FInput[I].mathtype:= mtrbracket; Inc(I); end else if IsOperator(FMathString[I + 1]) then begin FInput[I].mathtype:= mtoperator; FInput[I].op:= GetOperator(FMathString[I + 1]); Inc(I); end else if IsOperand(FMathString[I+1]) then begin FInput[I].mathtype:= mtoperand; FInput[I].data:= GetOperand(I + 1, NumLen); Inc(I, NumLen); end else {if FMathString[I + 1] = ' ' then} Inc(I); end; end; function TParserControl.IsOperator(C: AnsiChar): Boolean; begin Result:= (C in ['=', '#', '!', '&', '<', '>', '|']); end; function TParserControl.IsOperand(C: AnsiChar): Boolean; begin Result:= not (C in ['=', '#', '!', '&', '<', '>', '|', '(', ')', ' ']); end; function TParserControl.GetPrecedence(mop: TMathOperatorType): Integer; begin case mop of moor: Result:= 0; moand: Result:= 1; moequ: Result:= 2; moneq: Result:= 2; moles: Result:= 2; momor: Result:= 2; monot: Result:= 2; else Result:= -1; end; end; function TParserControl.BooleanToStr(X: Boolean): String; begin if X then Result:= 'true' else Result:= 'false'; end; procedure TParserControl.SetDetectStr(const AValue: String); begin if FDetectStr <> AValue then begin FDetectStr:= AValue; FMathString:= AValue; ConvertInfixToPostfix; end; end; function TParserControl.StrToBoolean(S: String): Boolean; begin if S = 'true' then Result:= True else Result:= False; end; procedure TParserControl.ConvertInfixToPostfix; var i, j, prec: Integer; begin ProcessString; for i:= 0 to Length(FInput) - 1 do begin if FInput[i].mathtype = mtoperand then begin SetLength(FOutput, Length(FOutput) + 1); FOutput[Length(FOutput) - 1]:= FInput[i]; end else if FInput[i].mathtype = mtlbracket then begin SetLength(FStack, Length(FStack) + 1); FStack[Length(FStack) - 1]:= FInput[i]; end else if FInput[i].mathtype = mtoperator then begin prec:= GetPrecedence(FInput[i].op); j:= Length(FStack) - 1; if j >= 0 then begin while (j >= 0) and (GetPrecedence(FStack[j].op) >= prec) do begin SetLength(FOutput, Length(FOutput) + 1); FOutput[Length(FOutput) - 1]:= FStack[j]; Setlength(FStack, Length(FStack) - 1); j:= j - 1; end; SetLength(FStack, Length(FStack) + 1); FStack[Length(FStack) - 1]:= FInput[i]; end; end else if FInput[i].mathtype = mtrbracket then begin j:= Length(FStack) - 1; if j >= 0 then begin while (j >= 0) and (FStack[j].mathtype <> mtlbracket) do begin SetLength(FOutput, Length(FOutput) + 1); FOutput[Length(FOutput) - 1]:= FStack[j]; SetLength(FStack, Length(FStack) - 1); j:= j - 1; end; if j >= 0 then begin SetLength(FStack, Length(FStack) - 1); end; end; end; end; end; end. doublecmd-1.1.30/src/udescr.pas0000644000175000001440000003310615104114162015351 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- This unit contains class for working with file comments. Copyright (C) 2008-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uDescr; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, uConvEncoding; const DESCRIPT_ION = 'descript.ion'; type { TDescription } TDescription = class(TStringListEx) private FModified: Boolean; FLastDescrFile: String; FDestDescr: TDescription; FEncoding: TMacroEncoding; FNewEncoding: TMacroEncoding; procedure PrepareDescrFile(FileName: String); function GetDescription(Index: Integer): String; function GetDescription(const FileName: String): String; procedure SetDescription(Index: Integer; const AValue: String); procedure SetDescription(const FileName: String; const AValue: String); procedure SetEncoding(const AValue: TMacroEncoding); public {en Create TDescription class @param(UseSubDescr @true if need Copy/Move functions) } constructor Create(UseSubDescr: Boolean); {en Destroy TDescription class } destructor Destroy; override; {en Load data from description file } procedure LoadFromFile(const FileName: String); override; {en Save data to description file } procedure SaveToFile(const FileName: String); override; {en Add description for file @param(FileName File name) @param(Descr Description) @returns(Index of added item) } function AddDescription(FileName, Descr: String): Integer; {en Read description by file name @param(FileName File name) @returns(Description of file) } function ReadDescription(FileName: String): String; {en Write description for file @param(FileName File name) @param(Descr Description) } procedure WriteDescription(FileName: String; const Descr: String); {en Delete description by file name @param(FileName File name) @returns(The function returns @true if successful, @false otherwise) } function DeleteDescription(const FileName: String): Boolean; {en Copy description for file @param(FileNameFrom Source file name) @param(FileNameTo Destination file name) @returns(The function returns @true if successful, @false otherwise) } function CopyDescription(const FileNameFrom, FileNameTo: String): Boolean; {en Move description for file @param(FileNameFrom Source file name) @param(FileNameTo Destination file name) @returns(The function returns @true if successful, @false otherwise) } function MoveDescription(const FileNameFrom, FileNameTo: String): Boolean; {en Rename file in description @param(FileNameOld Old file name) @param(FileNameNew New file name) @returns(The function returns @true if successful, @false otherwise) } function Rename(const FileNameOld, FileNameNew: String): Boolean; {en Save all changes to description file } procedure SaveDescription; {en Reset last description file name } procedure Reset; function Find(const S: string; out Index: Integer): Boolean; override; {en File description encoding } property Encoding: TMacroEncoding read FEncoding write SetEncoding; {en Get description by file name } property DescrByFileName[const FileName: String]: String read GetDescription write SetDescription; {en Get description by file name index } property DescrByIndex[Index: Integer]: String read GetDescription write SetDescription; end; implementation uses LazUTF8, LConvEncoding, uDebug, DCOSUtils, DCConvertEncoding, DCUnicodeUtils, uGlobs; { TDescription } procedure TDescription.PrepareDescrFile(FileName: String); var sDescrFile: String; begin sDescrFile:= ExtractFilePath(FileName) + DESCRIPT_ION; if sDescrFile <> FLastDescrFile then try // save previous decription file if need if FModified and (FLastDescrFile <> EmptyStr) and (Count > 0) then SaveToFile(FLastDescrFile); // load description file if exists FLastDescrFile:= sDescrFile; if not mbFileExists(FLastDescrFile) then begin Clear; FModified:= False; // use new encoding if new file FEncoding:= FNewEncoding; end else begin FEncoding:= gDescReadEncoding; LoadFromFile(FLastDescrFile); // set target encoding if Assigned(FDestDescr) then begin FDestDescr.FNewEncoding:= FEncoding; end; end; except on E: Exception do DCDebug('TDescription.PrepareDescrFile - ' + E.Message); end; end; function TDescription.Find(const S: string; out Index: Integer): Boolean; var iIndex, iPosOfDivider, iLength, iFirstStringPos: Integer; sFileName, sIndexString: String; cSearchChar : Char; begin Result:= False; sFileName:= ExtractFileName(S); //DCDebug('#########################'); //DCDebug('sFileName: '+ sFileName); for iIndex:= Count - 1 downto 0 do begin sIndexString := Self[iIndex]; //DCDebug('Self[I]: '+ sIndexString); //DCDebug('iIndex: '+ IntToStr(iIndex)); //DCDebug('Count: '+ IntToStr(Count)); //DCDebug('Pos(sFileName, Self[I]): '+ IntToStr(Pos(sFileName, sIndexString))); // File comment length iLength := Length(sIndexString); if iLength = 0 then Continue; //at the first, look if first char a " if(sIndexString[1]='"')then begin // YES cSearchChar := '"'; iFirstStringPos := 2; end else begin //NO cSearchChar := ' '; iFirstStringPos := 1; end; // find position of next cSearchChar in sIndexString iPosOfDivider:= 2; while (iPosOfDivider < iLength) do // don't look above the strings length begin // is at this position the cSearchChar? if (sIndexString[iPosOfDivider] = cSearchChar) then begin // YES // found the sFileName in the sIndexString (no more, no less) if mbCompareFileNames(sFileName, Copy(sIndexString, iFirstStringPos, iPosOfDivider-iFirstStringPos)) then begin // YES Index := iIndex; Exit(True); end else begin // NO Break; end; end; Inc(iPosOfDivider); end; end; end; function TDescription.GetDescription(Index: Integer): String; var sLine: String; iDescrStart: Integer; begin sLine:= Self[Index]; if Pos(#34, sLine) <> 1 then begin iDescrStart:= Pos(#32, sLine); Result:= Copy(sLine, iDescrStart+1, Length(sLine) - iDescrStart); end else begin iDescrStart:= Pos(#34#32, sLine); Result:= Copy(sLine, iDescrStart+2, Length(sLine) - iDescrStart); end; end; function TDescription.GetDescription(const FileName: String): String; var I: Integer; begin if Find(FileName, I) then Result:= GetDescription(I) else begin Result:= EmptyStr; end; end; procedure TDescription.SetDescription(Index: Integer; const AValue: String); var sLine, sFileName: String; iDescrStart: Integer; begin FModified:= True; sLine:= Self[Index]; if Pos('"', sLine) <> 1 then begin iDescrStart:= Pos(#32, sLine); sFileName:= Copy(sLine, 1, iDescrStart); Self[Index]:= sFileName + AValue; end else begin iDescrStart:= Pos(#34#32, sLine); sFileName:= Copy(sLine, 1, iDescrStart+1); Self[Index]:= sFileName + AValue; end; end; procedure TDescription.SetDescription(const FileName: String; const AValue: String); var I: Integer; begin if Find(FileName, I) then SetDescription(I, AValue) else AddDescription(FileName, AValue); end; procedure TDescription.SetEncoding(const AValue: TMacroEncoding); begin if FEncoding <> AValue then begin FEncoding:= AValue; if mbFileExists(FLastDescrFile) then LoadFromFile(FLastDescrFile); end; end; constructor TDescription.Create(UseSubDescr: Boolean); begin FModified:= False; FEncoding:= gDescReadEncoding; if gDescCreateUnicode then FNewEncoding:= gDescWriteEncoding else begin FNewEncoding:= gDescReadEncoding; end; if UseSubDescr then begin FDestDescr:= TDescription.Create(False) end; inherited Create; end; destructor TDescription.Destroy; begin FreeAndNil(FDestDescr); inherited Destroy; end; procedure TDescription.LoadFromFile(const FileName: String); var S: String; fsFileStream: TFileStreamEx; begin FModified:= False; fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try SetLength(S, fsFileStream.Size); fsFileStream.Read(S[1], Length(S)); finally fsFileStream.Free; end; // Try to guess encoding FEncoding:= DetectEncoding(S, FEncoding, True); // If need convert encoding case FEncoding of meUTF8: Text:= S; meOEM: Text:= CeOemToUtf8(S); meANSI: Text:= CeAnsiToUtf8(S); meUTF8BOM: Text:= Copy(S, 4, MaxInt); meUTF16LE: Text:= Utf16LEToUtf8(Copy(S, 3, MaxInt)); meUTF16BE: Text:= Utf16BEToUtf8(Copy(S, 3, MaxInt)); end; end; procedure TDescription.SaveToFile(const FileName: String); const faSpecial = faHidden or faSysFile; var S: String; Attr: Integer; fsFileStream: TFileStreamEx; begin FModified:= False; case FEncoding of meUTF8: S:= Text; meANSI: S:= CeUtf8ToAnsi(Text); meOem: S:= CeUtf8ToOem(Text); meUTF8BOM: S:= UTF8BOM + Text; meUTF16LE: S:= UTF16LEBOM + Utf8ToUtf16LE(Text); meUTF16BE: S:= UTF16BEBOM + Utf8ToUtf16BE(Text); end; Attr:= FileGetAttr(UTF8ToSys(FileName)); // Remove hidden & system attributes if (Attr <> -1) and ((Attr and faSpecial) <> 0) then begin FileSetAttr(UTF8ToSys(FileName), faArchive); end; fsFileStream:= TFileStreamEx.Create(FileName, fmCreate or fmShareDenyWrite); try fsFileStream.Write(S[1], Length(S)); finally fsFileStream.Free; end; // Restore original attributes if (Attr <> -1) and ((Attr and faSpecial) <> 0) then begin FileSetAttr(UTF8ToSys(FileName), Attr); end; end; function TDescription.AddDescription(FileName, Descr: String): Integer; begin FModified:= True; FileName:= ExtractFileName(FileName); if Pos(#32, FileName) <> 0 then Result := Add(#34+FileName+#34#32+Descr) else Result := Add(FileName+#32+Descr); end; function TDescription.ReadDescription(FileName: String): String; begin PrepareDescrFile(FileName); Result:= GetDescription(FileName); end; procedure TDescription.WriteDescription(FileName: String; const Descr: String); begin PrepareDescrFile(FileName); SetDescription(FileName, Descr); end; function TDescription.DeleteDescription(const FileName: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileName); if Find(FileName, I) then begin Delete(I); FModified:= True; Result:= True; end; end; function TDescription.CopyDescription(const FileNameFrom, FileNameTo: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileNameFrom); if Find(FileNameFrom, I) then begin DCDebug(FileNameFrom, '=', DescrByIndex[I]); FDestDescr.WriteDescription(FileNameTo, DescrByIndex[I]); Result:= True; end; end; function TDescription.MoveDescription(const FileNameFrom, FileNameTo: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileNameFrom); if Find(FileNameFrom, I) then begin DCDebug(FileNameFrom, '=', DescrByIndex[I]); FDestDescr.WriteDescription(FileNameTo, DescrByIndex[I]); Delete(I); FModified:= True; Result:= True; end; end; function TDescription.Rename(const FileNameOld, FileNameNew: String): Boolean; var I: Integer; AValue: String; begin Result:= False; PrepareDescrFile(FileNameOld); if Find(FileNameOld, I) then begin AValue:= GetDescription(I); Delete(I); AddDescription(FileNameNew, AValue); FModified:= True; Result:= True; end; end; procedure TDescription.SaveDescription; begin try if FModified then begin if Count > 0 then SaveToFile(FLastDescrFile) else mbDeleteFile(FLastDescrFile); end; if Assigned(FDestDescr) then FDestDescr.SaveDescription; except on E: Exception do DCDebug('TDescription.SaveDescription - ' + E.Message); end; end; procedure TDescription.Reset; begin FLastDescrFile:= EmptyStr; end; end. doublecmd-1.1.30/src/udefaultfilepropertyformatter.pas0000644000175000001440000001063215104114162022265 0ustar alexxusersunit uDefaultFilePropertyFormatter; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileProperty; type TDefaultFilePropertyFormatter = class(TInterfacedObject, IFilePropertyFormatter) public function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; TMaxDetailsFilePropertyFormatter = class(TInterfacedObject, IFilePropertyFormatter) public function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; var DefaultFilePropertyFormatter: IFilePropertyFormatter = nil; MaxDetailsFilePropertyFormatter: IFilePropertyFormatter = nil; implementation uses uGlobs, uDCUtils, DCBasicTypes, DCFileAttributes, DCDateTimeUtils; function TDefaultFilePropertyFormatter.FormatFileName( FileProperty: TFileNameProperty): String; begin Result := FileProperty.Value; end; function TDefaultFilePropertyFormatter.FormatFileSize( FileProperty: TFileSizeProperty): String; begin Result := cnvFormatFileSize(FileProperty.Value); end; function TDefaultFilePropertyFormatter.FormatDateTime( FileProperty: TFileDateTimeProperty): String; begin Result := SysUtils.FormatDateTime(gDateTimeFormat, FileProperty.Value); end; function TDefaultFilePropertyFormatter.FormatModificationDateTime( FileProperty: TFileModificationDateTimeProperty): String; begin Result := FormatDateTime(FileProperty); end; function TDefaultFilePropertyFormatter.FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; { Format as decimal: begin Result := IntToStr(FileProperty.Value); end; } begin Result:= DCFileAttributes.FormatNtfsAttributes(FileProperty.Value); end; function TDefaultFilePropertyFormatter.FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; begin Result:= DCFileAttributes.FormatUnixAttributes(FileProperty.Value); end; // ---------------------------------------------------------------------------- function TMaxDetailsFilePropertyFormatter.FormatFileName( FileProperty: TFileNameProperty): String; begin Result := FileProperty.Value; end; function TMaxDetailsFilePropertyFormatter.FormatFileSize( FileProperty: TFileSizeProperty): String; var d: Double; begin d := FileProperty.Value; Result := Format('%.0n', [d]); end; function TMaxDetailsFilePropertyFormatter.FormatDateTime( FileProperty: TFileDateTimeProperty): String; var Bias: LongInt = 0; Sign: String; begin Bias := -GetTimeZoneBias; if Bias >= 0 then Sign := '+' else Sign := '-'; Result := SysUtils.FormatDateTime('ddd, dd mmmm yyyy hh:nn:ss', FileProperty.Value) + ' UT' + Sign + Format('%.2D%.2D', [Bias div 60, Bias mod 60]); end; function TMaxDetailsFilePropertyFormatter.FormatModificationDateTime( FileProperty: TFileModificationDateTimeProperty): String; begin Result := FormatDateTime(FileProperty); end; function TMaxDetailsFilePropertyFormatter.FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; begin Result := DefaultFilePropertyFormatter.FormatNtfsAttributes(FileProperty); end; function TMaxDetailsFilePropertyFormatter.FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; begin Result := DefaultFilePropertyFormatter.FormatUnixAttributes(FileProperty); end; initialization DefaultFilePropertyFormatter := TDefaultFilePropertyFormatter.Create as IFilePropertyFormatter; MaxDetailsFilePropertyFormatter := TMaxDetailsFilePropertyFormatter.Create as IFilePropertyFormatter; finalization DefaultFilePropertyFormatter := nil; // frees the interface MaxDetailsFilePropertyFormatter := nil; end. doublecmd-1.1.30/src/udebug.pas0000644000175000001440000000725415104114162015344 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains functions used for debugging. Copyright (C) 2011 Przemysław Nagay (cobines@gmail.com) Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDebug; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion; // DebugLn and DbgOut are thread-safe due to TDCLogger but since TLazLogger // itself is designed for single-thread then DebugLnEnter, DebugLnExit cannot // be used from multiple threads. procedure DCDebug(Args: array of const); procedure DCDebug(const S: String; Args: array of const);// similar to Format(s,Args) procedure DCDebug(const s: String); procedure DCDebug(const s1,s2: String); procedure DCDebug(const s1,s2,s3: String); procedure DCDebug(const s1,s2,s3,s4: String); procedure DCDebug(const s1,s2,s3,s4,s5: String); implementation uses LCLProc, SyncObjs, LazLogger, LazLoggerBase, LazClasses; type {en Logger with thread-safe DebugLn and DbgOut. } TDCLogger = class(TLazLoggerFile) private DebugLnLock: TCriticalSection; protected procedure DoDbgOut(s: string{$if lcl_fullversion >= 2030000}; AGroup: PLazLoggerLogGroup = nil{$endif}); override; procedure DoDebugLn(s: string{$if lcl_fullversion >= 2030000}; AGroup: PLazLoggerLogGroup = nil{$endif}); override; public constructor Create; destructor Destroy; override; end; function CreateDCLogger: TRefCountedObject; begin Result := TDCLogger.Create; TDCLogger(Result).Assign(GetExistingDebugLogger); {$if lcl_fullversion >= 2020000} TDCLogger(Result).ParamForLogFileName:= '--debug-log'; {$endif} end; { TDCLogger } procedure TDCLogger.DoDbgOut(s: string{$if lcl_fullversion >= 2030000}; AGroup: PLazLoggerLogGroup = nil{$endif}); begin DebugLnLock.Acquire; try inherited DoDbgOut(s); finally DebugLnLock.Release; end; end; procedure TDCLogger.DoDebugLn(s: string{$if lcl_fullversion >= 2030000}; AGroup: PLazLoggerLogGroup = nil{$endif}); begin DebugLnLock.Acquire; try inherited DoDebugLn(s); finally DebugLnLock.Release; end; end; constructor TDCLogger.Create; begin DebugLnLock := TCriticalSection.Create; inherited Create; end; destructor TDCLogger.Destroy; begin inherited Destroy; DebugLnLock.Free; end; procedure DCDebug(Args: array of const); begin DebugLn(Args); end; procedure DCDebug(const S: String; Args: array of const);// similar to Format(s,Args) begin DebugLn(S, Args); end; procedure DCDebug(const s: String); begin DebugLn(s); end; procedure DCDebug(const s1,s2: String); begin DebugLn(s1, s2); end; procedure DCDebug(const s1,s2,s3: String); begin DebugLn(s1, s2, s3); end; procedure DCDebug(const s1,s2,s3,s4: String); begin DebugLn(s1, s2, s3, s4); end; procedure DCDebug(const s1,s2,s3,s4,s5: String); begin DebugLn(s1, s2, s3, s4, s5); end; procedure DCDebug(const s1,s2,s3,s4,s5,s6: String); begin DebugLn(s1, s2, s3, s4, s5, s6); end; initialization LazDebugLoggerCreator := @CreateDCLogger; RecreateDebugLogger; end. doublecmd-1.1.30/src/udcutils.pas0000755000175000001440000012170715104114162015730 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Several useful functions Copyright (C) 2006-2024 Alexander Koblov (alexx2000@mail.ru) contributors: Radek Cervinka (cnvFormatFileSize and DivFileName functions) Tomas Bzatek (QuoteStr, RemoveQuotation and SplitArgs functions) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDCUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, StdCtrls, ColorBox, {$IF DEFINED(UNIX)} DCBasicTypes, uSysFolders, {$ENDIF} uFile, uTypes; const TextLineBreakValue: array[TTextLineBreakStyle] of String = (#10, #13#10, #13); {$IFDEF MSWINDOWS} VARDELIMITER='%'; VARDELIMITER_END='%'; {$ENDIF} {$IFDEF UNIX } VARDELIMITER='$'; VARDELIMITER_END=''; {$ENDIF} EnvVarCommanderPath = '%COMMANDER_PATH%'; // Using '%' for backward compatibility EnvVarConfigPath = '%DC_CONFIG_PATH%'; // Using '%' for backward compatibility EnvVarTodaysDate = VARDELIMITER + 'DC_TODAYSDATE' + VARDELIMITER_END; type TUsageOfSizeConversion = (uoscFile, uoscHeader, uoscFooter, uoscOperation); function GetCmdDirFromEnvVar(const sPath : String) : String; function SetCmdDirAsEnvVar(const sPath : String) : String; {en Replaces environment variables of form %% with their values. Also replaces the internal "%COMMANDER_PATH%". } function ReplaceEnvVars(const sText: String): String; {en Replaces home directory at the beginning of the string with tilde ~. } function ReplaceHome(const Path: String): String; {en Replaces tilde ~ at the beginning of the string with home directory. } function ReplaceTilde(const Path: String): String; {en Expands the file name with environment variables by replacing them by absolute path. @param(sFileName File name to expand.) @returns(Absolute file name.) } function mbExpandFileName(const sFileName: String): String; {en Convert Int64 to string with Thousand separators. We can't use FloatToStrF with ffNumber because of integer rounding to thousands @param(AValue Integer value) @returns(String represenation) } function IntToStrTS(const APositiveValue: Int64): String; {en Convert file size to string representation in floating format (Kb, Mb, Gb) @param(iSize File size) @param(ShortFormat If @true than short format is used, otherwise long format (bytes) is used.) @param(Number Number of digits after decimal) @returns(File size in string representation) } function cnvFormatFileSize(const iSize: Int64; FSF: TFileSizeFormat; const Number: Integer): String; function cnvFormatFileSize(const iSize: Int64; const UsageOfSizeConversion: TUsageOfSizeConversion): String; function cnvFormatFileSize(const iSize: Int64): String; inline; {en Minimize file path replacing the folder name before the last PathDelim with '..' (if path ending with PathDelim it replaces the last folder name!!!) @param(PathToMince File path) @param(Canvas Output canvas) @param(MaxWidth Max width of the path in pixels) @returns(Minimized file path) } function MinimizeFilePath(const PathToMince: String; Canvas: TCanvas; MaxWidth: Integer): String; {en Checks if a filename matches any filename in the filelist or if it could be in any directory of the file list or any of their subdirectories. @param(Files List of files to which the filename must be matched.) @param(FileName Path to a file that will be matched. This may be absolute, relative or contain no path at all (only filename).) } function MatchesFileList(const Files: TFiles; FileName: String): Boolean; {en Checks if a file matches any mask in the masklist. @param(aFile File that will be matched.) @param(MaskList List of masks to which the file must be matched.) } function MatchesMaskListEx(const aFile: TFile; MaskList: TStringList): Boolean; {en Checks if a file or directory belongs in the specified path list. Only strings are compared, no file-system checks are done. @param(sBasePathList List of absolute paths where the path to check should be in.) @param(sPathToCheck Absolute path to file or directory to check.) @return(@true if sPathToCheck points to a directory or file in sBasePathList. @false otherwise.) } function IsInPathList(sBasePathList : String; sPathToCheck : String; ASeparator: AnsiChar = ';') : Boolean; {en Changes all the files' paths making them relative to 'sNewRootPath'. It is done by removing 'sNewRootPath' prefix from the paths and setting the general path (Files.Path) to sNewRootPath. @param(sNewRootPath Path that specifies new 'root' directory for all filenames.) @param(Files Contains list of files to change.) } procedure ChangeFileListRoot(sNewRootPath: String; Files: TFiles); {en Replace executable extension by system specific executable extension @param(sFileName File name) @returns(Executable name with system specific executable extension) } function FixExeExt(const sFileName: String): String; {en Delete quotes from string @param(Str String) } function TrimQuotes(const Str: String): String; function QuoteStr(const Str: String): String; function QuoteFilenameIfNecessary(const Str: String): String; function ConcatenateStrWithSpace(const Str: String; const Addition: String):string; {$IFDEF UNIX} function QuoteSingle(const Str: String): String; {$ENDIF} function QuoteDouble(const Str: String): String; {$IFDEF UNIX} {en Split command line parameters into argument array } procedure SplitCommandArgs(const Params: String; out Args: TDynamicStringArray); {$ENDIF} {en Delete quotation characters from string @param(Str String) @returns(String without quotation characters) } function RemoveQuotation(const Str: String): String; {$IF DEFINED(UNIX)} {en Split command line to command and a list of arguments. Each argument is unquoted. @param(sCmdLine Command line) @param(sCommand Command) @param(Args List of arguments) } procedure SplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray); {$ELSEIF DEFINED(MSWINDOWS)} {en Split command line to command and parameters @param(sCmdLine Command line) @param(sCmd Command) @param(sParams Parameters) } procedure SplitCmdLine(sCmdLine : String; var sCmd, sParams : String); {$ENDIF} function CompareStrings(const s1, s2: String; Natural: Boolean; Special: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox; AValue: UIntPtr = 0); {en Compares two strings taking into account the numbers or special chararcters } function StrChunkCmp(const str1, str2: String; Natural: Boolean; Special: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; function EstimateRemainingTime(StartValue, CurrentValue, EndValue: Int64; StartTime: TDateTime; CurrentTime: TDateTime; out SpeedPerSecond: Int64): TDateTime; {en Check color lightness @returns(@true when color is light, @false otherwise) } function ColorIsLight(AColor: TColor): Boolean; {en Modify color levels } function ModColor(AColor: TColor; APercent: Byte) : TColor; {en Makes a color some darker @param(AColor Source color) @param(APercent The percentage of brightness decrease) @returns(New some darker color) } function DarkColor(AColor: TColor; APercent: Byte): TColor; {en Makes a color some lighter @param(AColor Source color) @param(APercent The percentage of brightness increase) @returns(New some lighter color) } function LightColor(AColor: TColor; APercent: Byte): TColor; function ContrastColor(Color: TColor; APercent: Byte): TColor; procedure SetColorInColorBox(const lcbColorBox: TColorBox; const lColor: TColor); procedure UpdateColor(Control: TControl; Checked: Boolean); procedure EnableControl(Control: TControl; Enabled: Boolean); procedure SetComboWidthToLargestElement(AComboBox: TCustomComboBox; iExtraWidthToAdd: integer = 0); procedure SplitCmdLineToCmdParams(sCmdLine : String; var sCmd, sParams : String); function GuessLineBreakStyle(const S: String): TTextLineBreakStyle; function GetTextRange(Strings: TStrings; Start, Finish: Integer): String; function DCGetNewGUID: TGUID; procedure DCPlaceCursorNearControlIfNecessary(AControl: TControl); implementation uses uLng, LCLProc, LCLType, uMasks, FileUtil, StrUtils, uOSUtils, uGlobs, uGlobsPaths, DCStrUtils, DCOSUtils, DCConvertEncoding, LazUTF8 {$IF DEFINED(MSWINDOWS)} , Windows {$ENDIF} ; var dtLastDateSubstitutionCheck:TDateTime=0; function GetCmdDirFromEnvVar(const sPath: String): String; begin Result := NormalizePathDelimiters(sPath); Result := StringReplace(Result, EnvVarCommanderPath, ExcludeTrailingPathDelimiter(gpExePath), [rfIgnoreCase]); Result := StringReplace(Result, EnvVarConfigPath, ExcludeTrailingPathDelimiter(gpCfgDir), [rfIgnoreCase]); end; function SetCmdDirAsEnvVar(const sPath: String): String; begin Result := NormalizePathDelimiters(sPath); Result := StringReplace(Result, ExcludeTrailingPathDelimiter(gpExePath), EnvVarCommanderPath, []); Result := StringReplace(Result, ExcludeTrailingPathDelimiter(gpCfgDir), EnvVarConfigPath, []); end; function ReplaceEnvVars(const sText: String): String; var I: Integer; MyYear, MyMonth, MyDay:word; begin Result:= sText; //1st, if we have an empty string, get out of here, quick if sText = EmptyStr then Exit; //2th, let's check the "easy" substitution, there one related with Double Commander if pos('%', sText) > 0 then begin Result := StringReplace(Result, EnvVarCommanderPath, ExcludeTrailingPathDelimiter(gpExePath), [rfReplaceAll, rfIgnoreCase]); Result := StringReplace(Result, EnvVarConfigPath, ExcludeTrailingPathDelimiter(gpCfgDir), [rfReplaceAll, rfIgnoreCase]); end; //3nd, if we don't have the variable indication (% in windows for example), get out of here here, quick if pos(VARDELIMITER, sText) = 0 then Exit; //4rd, let's check if date changed since last time we updated our dc_todaysdate variable if dtLastDateSubstitutionCheck<>Trunc(now) then begin //Date changed! Let's find where variable is and update it. //Don't worry for time consumed: this is done only once per day! I:=0; while (I0) do begin if pos(gSpecialDirList.SpecialDir[I].VariableName,Result)<>0 then Result := StringReplace(Result, gSpecialDirList.SpecialDir[I].VariableName, ExcludeTrailingPathDelimiter(gSpecialDirList.SpecialDir[I].PathValue), [rfReplaceAll, rfIgnoreCase]); inc(I); end; //6th, if we don't have variable indication anymore, (% in windows for example), get out of here here, quick if pos(VARDELIMITER, sText) = 0 then Exit; //7th, if still we have variable there, let's scan through the environment variable. // We got them in the "gSpecialDirList" but just in case some others were added on-the-fly // between the moment the application started and the moment we might needed them Result:= mbExpandEnvironmentStrings(Result); end; function ReplaceHome(const Path: String): String; {$IFDEF UNIX} var Len: Integer; AHome: String; {$ENDIF} begin {$IFDEF UNIX} AHome:= GetHomeDir; Len:= Length(AHome); if StrBegins(Path, AHome) and ((Length(Path) = Len) or (Path[Len + 1] = PathDelim)) then Result := '~' + Copy(Path, Len + 1, MaxInt) else {$ENDIF} Result := Path; end; function ReplaceTilde(const Path: String): String; begin {$IFDEF UNIX} if StrBegins(Path, '~') and ((Length(Path) = 1) or (Path[2] = PathDelim)) then Result := GetHomeDir + Copy(Path, 2, MaxInt) else {$ENDIF} Result := Path; end; function mbExpandFileName(const sFileName: String): String; const PATH_DELIM_POS = {$IFDEF MSWINDOWS}1{$ELSE}0{$ENDIF}; begin if (Pos('://', sFileName) > 2) then Result:= sFileName else begin Result:= NormalizePathDelimiters(sFileName); Result:= ReplaceEnvVars(Result); if Pos(PathDelim, Result) > PATH_DELIM_POS then begin {$IF DEFINED(MSWINDOWS)} if (Length(Result) > 1) and (Result[1] in ['A'..'Z', 'a'..'z']) and (Result[2] = DriveSeparator) and (GetDriveType(PAnsiChar(ExtractFileDrive(Result) + PathDelim)) = DRIVE_REMOTE) then begin Result:= ExpandAbsolutePath(Result) end else {$ENDIF} Result:= ExpandFileName(Result); end; {$IF DEFINED(MSWINDOWS)} // Remove double backslash '\\' after calling 'ExpandFileName' if (Pos(':\\', Result) = 2) and (Result[1] in ['A'..'Z', 'a'..'z']) then Result:= Result.Remove(2, 1); {$ENDIF} end; end; function IntToStrTS(const APositiveValue: Int64): String; var // 25 is length of '9,223,372,036,854,775,807' (max Int64 with thousand separators) ShortStringResult: String[25]; SmallI, BigI: Byte; begin Str(APositiveValue, ShortStringResult); if (APositiveValue > 999) and (DefaultFormatSettings.ThousandSeparator <> #0) then begin SmallI := Length(ShortStringResult); BigI := SmallI + (SmallI - 1) div 3; SetLength(ShortStringResult, BigI); repeat ShortStringResult[BigI] := ShortStringResult[SmallI]; Dec(BigI); Dec(SmallI); ShortStringResult[BigI] := ShortStringResult[SmallI]; Dec(BigI); Dec(SmallI); ShortStringResult[BigI] := ShortStringResult[SmallI]; Dec(BigI); Dec(SmallI); ShortStringResult[BigI] := DefaultFormatSettings.ThousandSeparator; Dec(BigI); until BigI = SmallI; end; Result := ShortStringResult; end; function cnvFormatFileSize(const iSize: int64; FSF: TFileSizeFormat; const Number: integer): string; const DIVISORS: array[LOW(TFileSizeFormat) .. HIGH(TFileSizeFormat)] of uint64 = (1, 1, 1024, (1024*1024), (1024*1024*1024), (1024*1024*1024*1024), 1, 1, 1024, (1024*1024), (1024*1024*1024), (1024*1024*1024*1024)); var FloatSize: extended; begin FloatSize := iSize; if FSF = fsfPersonalizedFloat then begin if iSize div (1024 * 1024 * 1024 * 1024) > 0 then FSF := fsfPersonalizedTera else if iSize div (1024 * 1024 * 1024) > 0 then FSF := fsfPersonalizedGiga else if iSize div (1024 * 1024) > 0 then FSF := fsfPersonalizedMega else if iSize div 1024 > 0 then FSF := fsfPersonalizedKilo else FSF := fsfPersonalizedByte; end else if FSF = fsfFloat then begin if iSize div (1024 * 1024 * 1024 * 1024) > 0 then FSF := fsfTera else if iSize div (1024 * 1024 * 1024) > 0 then FSF := fsfGiga else if iSize div (1024 * 1024) > 0 then FSF := fsfMega else if iSize div 1024 > 0 then FSF := fsfKilo else FSF := fsfByte; end; case FSF of fsfByte, fsfPersonalizedByte: Result := Format('%.0n%s', [FloatSize, gSizeDisplayUnits[FSF]]); else Result := FloatToStrF(FloatSize / DIVISORS[FSF], ffNumber, 15, Number) + gSizeDisplayUnits[FSF]; end; end; function cnvFormatFileSize(const iSize: Int64; const UsageOfSizeConversion: TUsageOfSizeConversion): String; begin case UsageOfSizeConversion of uoscOperation: //By legacy, it was simply adding a "B" to single size letter so we will do the samefor legacy mode. begin Result := cnvFormatFileSize(iSize, gOperationSizeFormat, gOperationSizeDigits); case gOperationSizeFormat of fsfFloat: if iSize div 1024 > 0 then Result := Result + rsLegacyOperationByteSuffixLetter else Result := Result + ' ' + rsLegacyOperationByteSuffixLetter; fsfByte: Result := Result + ' ' + rsLegacyOperationByteSuffixLetter; fsfKilo, fsfMega, fsfGiga, fsfTera: Result := Result + rsLegacyOperationByteSuffixLetter; end; end; uoscFile: Result := cnvFormatFileSize(iSize, gFileSizeFormat, gFileSizeDigits); uoscHeader: Result := cnvFormatFileSize(iSize, gHeaderSizeFormat, gHeaderDigits); uoscFooter: Result := cnvFormatFileSize(iSize, gFooterSizeFormat, gFooterDigits); end; end; function cnvFormatFileSize(const iSize: Int64): String; begin Result := cnvFormatFileSize(iSize, gFileSizeFormat, gFileSizeDigits); end; { This function based on code from http://www.delphirus.com.ru } {=========================================================} function MinimizeFilePath(const PathToMince: String; Canvas: TCanvas; MaxWidth: Integer): String; {=========================================================} // "C:\Program Files\Delphi\DDropTargetDemo\main.pas" // "C:\Program Files\..\main.pas" Var sl: TStringList; sHelp, sFile, sFirst: String; iPos: Integer; Len: Integer; Begin if MaxWidth <= 0 then Exit; sHelp := PathToMince; iPos := Pos(PathDelim, sHelp); If iPos = 0 Then Begin Result := PathToMince; End Else Begin sl := TStringList.Create; // Decode string While iPos <> 0 Do Begin sl.Add(Copy(sHelp, 1, (iPos - 1))); sHelp := Copy(sHelp, (iPos + 1), Length(sHelp)); iPos := Pos(PathDelim, sHelp); End; If sHelp <> '' Then Begin sl.Add(sHelp); End; // Encode string sFirst := sl[0]; sFile := sl[sl.Count - 1]; sl.Delete(sl.Count - 1); Result := ''; MaxWidth := MaxWidth - Canvas.TextWidth('XXX'); if (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxWidth) then begin While (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxWidth) Do Begin Result := Result + sl[0] + PathDelim; sl.Delete(0); End; If sl.Count = 0 Then Begin Result := Result + sFile; End Else Begin Result := Result + '..' + PathDelim + sFile; End; end else If sl.Count = 0 Then Begin Result := sFirst + PathDelim; End Else Begin Result := sFirst + PathDelim + '..' + PathDelim + sFile; End; sl.Free; End; if Canvas.TextWidth(Result) > MaxWidth + Canvas.TextWidth('XXX') then begin Len:= UTF8Length(Result); while (Len >= 3) and (Canvas.TextWidth(Result) > MaxWidth) do begin UTF8Delete(Result, Len, 1); Dec(Len); end; Result := UTF8Copy(Result, 1, Len - 3) + '...'; end; End; function MatchesFileList(const Files: TFiles; FileName: String): Boolean; var i: Integer; aFile: TFile; begin for i := 0 to Files.Count - 1 do begin aFile := Files[i]; if aFile.IsDirectory then begin // Check if 'FileName' is in this directory or any of its subdirectories. if IsInPath(aFile.FullPath, FileName, True, True) then Exit(True); end else begin // Item in the list is a file, only compare names. if aFile.FullPath = FileName then Exit(True); end; end; Result := False; end; function MatchesMaskListEx(const aFile: TFile; MaskList: TStringList): Boolean; var I: Integer; sMask, sFileName: String; begin Result:= False; for I:= 0 to MaskList.Count - 1 do begin sMask:= MaskList[I]; case GetPathType(sMask) of ptAbsolute: sFileName:= aFile.FullPath; else sFileName:= aFile.Name; end; // When a mask is ended with a PathDelim, it will match only directories if (Length(sMask) > 1) and (sMask[Length(sMask)] = PathDelim) then begin if aFile.IsDirectory then sMask:= ExcludeTrailingPathDelimiter(sMask) else Continue; end; if MatchesMaskList(sFileName, sMask) then Exit(True); end; end; function IsInPathList(sBasePathList: String; sPathToCheck: String; ASeparator: AnsiChar = ';'): Boolean; var sBasePath: String; begin sBasePathList := UTF8UpperCase(sBasePathList); sPathToCheck := UTF8UpperCase(sPathToCheck); repeat sBasePath := Copy2SymbDel(sBasePathList, ASeparator); if IsInPath(sBasePath, sPathToCheck, True, True) then Exit(True); until Length(sBasePathList) = 0; Result := False end; procedure ChangeFileListRoot(sNewRootPath: String; Files: TFiles); var i: Integer; aFile: TFile; begin if IsInPath(sNewRootPath, Files.Path, True, True) then begin // Current path is a subpath of new root path. for i := 0 to Files.Count - 1 do begin aFile := Files[i]; aFile.Path := ExtractDirLevel(sNewRootPath, aFile.Path); end; Files.Path := ExtractDirLevel(sNewRootPath, Files.Path); end else begin // Current path has a different base than new root path. if sNewRootPath <> EmptyStr then sNewRootPath := IncludeTrailingPathDelimiter(sNewRootPath); for i := 0 to Files.Count - 1 do begin aFile := Files[i]; aFile.Path := sNewRootPath + ExtractDirLevel(Files.Path, aFile.Path); end; Files.Path := sNewRootPath; end; end; function FixExeExt(const sFileName: String): String; var ExeExt: String; begin Result:= sFileName; ExeExt:= GetExeExt; if not SameText(ExeExt, ExtractFileExt(sFileName)) then Result:= ChangeFileExt(sFileName, ExeExt); end; function TrimQuotes(const Str: String): String; begin Result:= Str; if (Length(Str) > 0) then begin if (Str[1] in ['"', '''']) then begin if (Length(Str) = 1) then Result:= EmptyStr else if (Str[1] = Str[Length(Str)]) then Result:= Copy(Str, 2, Length(Str) - 2); end; end; end; function QuoteStr(const Str: String): String; {$IF DEFINED(UNIX)} begin // Default method is to escape every special char with backslash. Result := EscapeNoQuotes(Str); end; {$ELSE} begin // On Windows only double quotes can be used for quoting. // The double quotes on Windows can be nested, e.g., // "cmd /C "type "Some long file name""" or // "cmd /C ""some long file.exe" "long param1" "long param2"" Result := QuoteDouble(Str); end; {$ENDIF} function QuoteFilenameIfNecessary(const Str: String): String; {$IF DEFINED(UNIX)} begin // Default method is to escape every special char with backslash. Result := EscapeNoQuotes(Str); end; {$ELSE} begin if Pos(#32, Str) <> 0 then Result := QuoteDouble(Str) else Result := Str; end; {$ENDIF} function ConcatenateStrWithSpace(const Str: String; const Addition: String):string; begin result:=Str; if Addition <> EmptyStr then if result = EmptyStr then result := Addition else result := result + #32 + Addition; end; {$IF DEFINED(UNIX)} function QuoteSingle(const Str: String): String; begin Result := '''' + EscapeSingleQuotes(Str) + ''''; end; {$ENDIF} function QuoteDouble(const Str: String): String; begin {$IF DEFINED(UNIX)} Result := '"' + EscapeDoubleQuotes(Str) + '"'; {$ELSEIF DEFINED(MSWINDOWS)} // Nothing needs to be escaped on Windows, because only double quote (") itself // would need to be escaped but there's no standard mechanism for escaping it. // It seems every application handles it on their own and CMD doesn't support it at all. // Also double quote is a forbidden character on FAT, NTFS. Result := '"' + Str + '"'; {$ENDIF} end; {$IF DEFINED(UNIX)} // Helper for RemoveQuotation and SplitCmdLine. procedure RemoveQuotationOrSplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray; bSplitArgs: Boolean; bNoCmd: Boolean = False); var I : Integer; QuoteChar : Char; CurrentArg: String = ''; DoubleQuotesEscape: Boolean = False; procedure AddArgument; begin if bSplitArgs then begin if (bNoCmd = False) and (sCommand = '') then sCommand := CurrentArg else begin SetLength(Args, Length(Args) + 1); Args[Length(Args) - 1] := CurrentArg; end; CurrentArg := ''; end; end; begin sCommand := ''; SetLength(Args, 0); QuoteChar := #0; for I := 1 to Length(sCmdLine) do case QuoteChar of '\': begin if sCmdLine[I] <> #10 then begin if not (sCmdLine[I] in NoQuotesSpecialChars) then CurrentArg := CurrentArg + '\'; CurrentArg := CurrentArg + sCmdLine[I]; end; QuoteChar := #0; end; '''': begin if sCmdLine[I] = '''' then QuoteChar := #0 else CurrentArg := CurrentArg + sCmdLine[I]; end; '"': begin if DoubleQuotesEscape then begin if not (sCmdLine[I] in DoubleQuotesSpecialChars) then CurrentArg := CurrentArg + '\'; CurrentArg := CurrentArg + sCmdLine[I]; DoubleQuotesEscape := False; end else begin case sCmdLine[I] of '\': DoubleQuotesEscape := True; '"': QuoteChar := #0; else CurrentArg := CurrentArg + sCmdLine[I]; end; end; end; else begin case sCmdLine[I] of '\', '''', '"': QuoteChar := sCmdLine[I]; ' ', #9: if CurrentArg <> '' then AddArgument; #10: AddArgument; else CurrentArg := CurrentArg + sCmdLine[I]; end; end; end; if QuoteChar <> #0 then raise EInvalidQuoting.Create; if CurrentArg <> '' then AddArgument; if (not bSplitArgs) then sCommand := CurrentArg; end; procedure SplitCommandArgs(const Params: String; out Args: TDynamicStringArray); var Unused: String; begin RemoveQuotationOrSplitCmdLine(Params, Unused, Args, True, True); end; {$ENDIF} function RemoveQuotation(const Str: String): String; {$IF DEFINED(MSWINDOWS)} var TrimmedStr: String; begin if Length(Str) = 0 then Result := EmptyStr else begin TrimmedStr := Trim(Str); if (TrimmedStr[1] = '"') and (TrimmedStr[Length(TrimmedStr)] = '"') then Result := Copy(TrimmedStr, 2, Length(TrimmedStr) - 2) else Result := Str; end; end; {$ELSEIF DEFINED(UNIX)} var Args: TDynamicStringArray; begin RemoveQuotationOrSplitCmdLine(Str, Result, Args, False); end; {$ENDIF} procedure SplitCmdLineToCmdParams(sCmdLine : String; var sCmd, sParams : String); var iPos : Integer; begin if Pos('"', sCmdLine) = 1 then begin iPos := CharPos('"', sCmdLine, 2); if iPos = 0 then raise EInvalidQuoting.Create; sCmd := Copy(sCmdLine, 2, iPos - 2); sParams := Copy(sCmdLine, iPos + 2, Length(sCmdLine) - iPos + 1) end else begin iPos := Pos(#32, sCmdLine); if iPos <> 0 then begin sCmd := Copy(sCmdLine, 1, iPos - 1); sParams := Copy(sCmdLine, iPos + 1, Length(sCmdLine) - iPos + 1) end else begin sCmd := sCmdLine; sParams := ''; end; end; end; {$IF DEFINED(UNIX)} procedure SplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray); begin RemoveQuotationOrSplitCmdLine(sCmdLine, sCommand, Args, True); end; {$ELSEIF DEFINED(MSWINDOWS)} procedure SplitCmdLine(sCmdLine : String; var sCmd, sParams : String); begin SplitCmdLineToCmdParams(sCmdLine,sCmd,sParams); end; {$ENDIF} function CompareStrings(const s1, s2: String; Natural: Boolean; Special: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; inline; {$IF DEFINED(MSWINDOWS)} var dwCmpFlags: DWORD; U1, U2: UnicodeString; {$ENDIF} begin if Natural or Special then begin {$IF DEFINED(MSWINDOWS)} if (CaseSensitivity <> cstCharValue) and ((Win32MajorVersion > 6) or ((Win32MajorVersion = 6) and (Win32MinorVersion >= 1))) then begin dwCmpFlags := 0; U1 := CeUtf8ToUtf16(s1); U2 := CeUtf8ToUtf16(s2); if CaseSensitivity = cstNotSensitive then begin dwCmpFlags := dwCmpFlags or NORM_IGNORECASE; end; if Natural then begin dwCmpFlags := dwCmpFlags or SORT_DIGITSASNUMBERS; end; if Special then begin dwCmpFlags := dwCmpFlags or SORT_STRINGSORT; end; Result := CompareStringW(LOCALE_USER_DEFAULT, dwCmpFlags, PWideChar(U1), Length(U1), PWideChar(U2), Length(U2)); if Result <> 0 then Result := Result - 2 else begin Result := StrChunkCmp(s1, s2, Natural, Special, CaseSensitivity); end; end else {$ENDIF} Result := StrChunkCmp(s1, s2, Natural, Special, CaseSensitivity) end else begin case CaseSensitivity of cstNotSensitive: Result := UnicodeCompareText(CeUtf8ToUtf16(s1), CeUtf8ToUtf16(s2)); cstLocale: Result := UnicodeCompareStr(CeUtf8ToUtf16(s1), CeUtf8ToUtf16(s2)); cstCharValue: Result := SysUtils.CompareStr(S1, S2); else raise Exception.Create('Invalid CaseSensitivity parameter'); end; end; end; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox; AValue: UIntPtr); var I: Integer = 0; begin if sLine = EmptyStr then Exit; with comboBox.Items do begin // Use case sensitive search while (I < Count) and (CompareStr(Strings[I], sLine) <> 0) do Inc(I); if (I < 0) or (I >= Count) then begin comboBox.Items.Insert(0, sLine); comboBox.ItemIndex := 0; end else if (I > 0) then begin comboBox.Items.Move(I, 0); // Reset selected item (and combobox text), because Move has destroyed it. comboBox.ItemIndex := 0; end; Objects[0]:= TObject(AValue); end; end; function UnicodeStrComp(const Str1, Str2 : UnicodeString): PtrInt; var counter: SizeInt = 0; pstr1, pstr2: PWideChar; Begin pstr1 := PWideChar(Str1); pstr2 := PWideChar(Str2); While pstr1[counter] = pstr2[counter] do Begin if (pstr2[counter] = #0) or (pstr1[counter] = #0) then break; Inc(counter); end; Result := ord(pstr1[counter]) - ord(pstr2[counter]); end; function StrChunkCmp(const str1, str2: String; Natural: Boolean; Special: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; type TCategory = (cNone, cNumber, cSpecial, cString); TChunk = record FullStr: String; Str: String; Category: TCategory; PosStart: Integer; PosEnd: Integer; end; var Chunk1, Chunk2: TChunk; function Categorize(c: Char): TCategory; inline; begin if Natural and (c in ['0'..'9']) then Result := cNumber else if Special and (c in [' '..'/', ':'..'@', '['..'`', '{'..'~']) then Result := cSpecial else Result := cString; end; procedure NextChunkInit(var Chunk: TChunk); inline; begin Chunk.PosStart := Chunk.PosEnd; if Chunk.PosStart > Length(Chunk.FullStr) then Chunk.Category := cNone else Chunk.Category := Categorize(Chunk.FullStr[Chunk.PosStart]); end; procedure FindChunk(var Chunk: TChunk); inline; begin Chunk.PosEnd := Chunk.PosStart; repeat inc(Chunk.PosEnd); until (Chunk.PosEnd > Length(Chunk.FullStr)) or (Categorize(Chunk.FullStr[Chunk.PosEnd]) <> Chunk.Category); end; procedure FindSameCategoryChunks; inline; begin Chunk1.PosEnd := Chunk1.PosStart; Chunk2.PosEnd := Chunk2.PosStart; repeat inc(Chunk1.PosEnd); inc(Chunk2.PosEnd); until (Chunk1.PosEnd > Length(Chunk1.FullStr)) or (Chunk2.PosEnd > Length(Chunk2.FullStr)) or (Categorize(Chunk1.FullStr[Chunk1.PosEnd]) <> Chunk1.Category) or (Categorize(Chunk2.FullStr[Chunk2.PosEnd]) <> Chunk2.Category); end; procedure PrepareChunk(var Chunk: TChunk); inline; begin Chunk.Str := Copy(Chunk.FullStr, Chunk.PosStart, Chunk.PosEnd - Chunk.PosStart); end; procedure PrepareNumberChunk(var Chunk: TChunk); inline; begin while (Chunk.PosStart <= Length(Chunk.FullStr)) and (Chunk.FullStr[Chunk.PosStart] = '0') do inc(Chunk.PosStart); PrepareChunk(Chunk); end; begin Chunk1.FullStr := str1; Chunk2.FullStr := str2; Chunk1.PosEnd := 1; Chunk2.PosEnd := 1; NextChunkInit(Chunk1); NextChunkInit(Chunk2); if (Chunk1.Category = cSpecial) and (Chunk2.Category <> cSpecial) then Exit(-1); if (Chunk2.Category = cSpecial) and (Chunk1.Category <> cSpecial) then Exit(1); if Chunk1.Category = cSpecial then FindSameCategoryChunks else begin FindChunk(Chunk1); FindChunk(Chunk2); end; if (Chunk1.Category = cNumber) xor (Chunk2.Category = cNumber) then // one of them is number Chunk1.Category := cString; // compare as strings to put numbers in a natural position while True do begin case Chunk1.Category of cString: begin PrepareChunk(Chunk1); PrepareChunk(Chunk2); case CaseSensitivity of cstNotSensitive: Result := UnicodeCompareText(CeUtf8ToUtf16(Chunk1.Str), CeUtf8ToUtf16(Chunk2.Str)); cstLocale: Result := UnicodeCompareStr(CeUtf8ToUtf16(Chunk1.Str), CeUtf8ToUtf16(Chunk2.Str)); cstCharValue: Result := UnicodeStrComp(CeUtf8ToUtf16(Chunk1.Str), CeUtf8ToUtf16(Chunk2.Str)); else raise Exception.Create('Invalid CaseSensitivity parameter'); end; if Result <> 0 then Exit; end; cNumber: begin PrepareNumberChunk(Chunk1); PrepareNumberChunk(Chunk2); Result := Length(Chunk1.Str) - Length(Chunk2.Str); if Result <> 0 then Exit; Result := CompareStr(Chunk1.Str, Chunk2.Str); if Result <> 0 then Exit; end; cSpecial: begin PrepareChunk(Chunk1); PrepareChunk(Chunk2); Result := CompareStr(Chunk1.Str, Chunk2.Str); if Result <> 0 then Exit; end; cNone: Exit(UnicodeStrComp(CeUtf8ToUtf16(str1), CeUtf8ToUtf16(str2))); end; NextChunkInit(Chunk1); NextChunkInit(Chunk2); if (Chunk1.Category = cNone) and (Chunk2.Category = cNone) then Exit; if Chunk1.Category <> Chunk2.Category then if Chunk1.Category < Chunk2.Category then Exit(-1) else Exit(1); if Chunk1.Category = cSpecial then FindSameCategoryChunks else begin FindChunk(Chunk1); FindChunk(Chunk2); end; end; end; function EstimateRemainingTime(StartValue, CurrentValue, EndValue: Int64; StartTime: TDateTime; CurrentTime: TDateTime; out SpeedPerSecond: Int64): TDateTime; var Speed: Double; begin SpeedPerSecond := 0; Result := 0; if (CurrentValue > StartValue) and (CurrentTime > StartTime) then begin Speed := Double(CurrentValue - StartValue) / (CurrentTime - StartTime); Result := Double(EndValue - CurrentValue) / Speed; SpeedPerSecond := Trunc(Speed) div SecsPerDay; end; end; function ColorIsLight(AColor: TColor): Boolean; var R, G, B: Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); Result:= ((0.299 * R + 0.587 * G + 0.114 * B) / 255) > 0.5; end; function ModColor(AColor: TColor; APercent: Byte) : TColor; var R, G, B : Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R := R * APercent div 100; G := G * APercent div 100; B := B * APercent div 100; Result := RGBToColor(R, G, B); end; function DarkColor(AColor: TColor; APercent: Byte): TColor; var R, G, B: Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R:= R - MulDiv(R, APercent, 100); G:= G - MulDiv(G, APercent, 100); B:= B - MulDiv(B, APercent, 100); Result:= RGBToColor(R, G, B); end; function LightColor(AColor: TColor; APercent: Byte): TColor; var R, G, B: Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R:= R + MulDiv(255 - R, APercent, 100); G:= G + MulDiv(255 - G, APercent, 100); B:= B + MulDiv(255 - B, APercent, 100); Result:= RGBToColor(R, G, B); end; function ContrastColor(Color: TColor; APercent: Byte): TColor; begin if ColorIsLight(Color) then Result:= DarkColor(Color, APercent) else begin Result:= LightColor(Color, APercent); end; end; procedure SetColorInColorBox(const lcbColorBox: TColorBox; const lColor: TColor); //< select in lcbColorBox lColor if lColor in lcbColorBox else // add to lcbColorBox lColor and select him var I: LongInt; begin if (lcbColorBox = nil) then Exit; // if lcbColorBox not exist with lcbColorBox do begin // search lColor in colorbox colorlist for I:= 0 to Items.Count - 1 do if Colors[I] = lColor then // find color begin // select color Selected:= lColor; Exit; end;// if for //add items to colorbox list Items.Objects[Items.Add('$'+HexStr(lColor, 8))]:= TObject(PtrInt(lColor)); Selected:= lColor; end; // with end; procedure UpdateColor(Control: TControl; Checked: Boolean); begin if Checked then Control.Color:= clDefault else Control.Color:= $FFFFFFFF8000000F; end; procedure EnableControl(Control: TControl; Enabled: Boolean); begin Control.Enabled:= Enabled; {$IF DEFINED(LCLWIN32)} if Enabled then begin Control.Color:= clDefault; Control.Font.Color:= clDefault; end else begin Control.Color:= clBtnFace; Control.Font.Color:= clGrayText; end; {$ENDIF} end; { SetComboWidthToLargestElement } // Set the width of a TComboBox to fit to the largest element in it. procedure SetComboWidthToLargestElement(AComboBox: TCustomComboBox; iExtraWidthToAdd: integer = 0); var iElementIndex, iCurrentElementWidth, iLargestWidth: integer; begin iLargestWidth := 0; iElementIndex := 0; while (iElementIndex < AComboBox.Items.Count) do begin iCurrentElementWidth := AComboBox.Canvas.TextWidth(AComboBox.Items.Strings[iElementIndex]); if iCurrentElementWidth > iLargestWidth then iLargestWidth := iCurrentElementWidth; inc(iElementIndex); end; if iLargestWidth > 0 then AComboBox.Width := (iLargestWidth + iExtraWidthToAdd); end; function GuessLineBreakStyle(const S: String): TTextLineBreakStyle; var Start, Finish, Current: PAnsiChar; begin Start:= PAnsiChar(S); Finish:= Start + Length(S); Current:= Start; while Current < Finish do begin case Current[0] of #10, #13: begin if (Current[0] = #13) then begin if (Current[1] = #10) then Result:= tlbsCRLF else Result:= tlbsCR; end else begin Result:= tlbsLF; end; Exit; end; end; Inc(Current); end; Result:= DefaultTextLineBreakStyle; end; function GetTextRange(Strings: TStrings; Start, Finish: Integer): String; var P: PAnsiChar; S, NL: String; I, L, NLS: LongInt; begin with Strings do begin L:= 0; NL:= TextLineBreakValue[TextLineBreakStyle]; NLS:= Length(NL); for I:= Start to Finish do L:= L + Length(Strings[I]) + NLS; SetLength(Result, L); P:= Pointer(Result); for I:= Start to Finish do begin S:= Strings[I]; L:= Length(S); if L <> 0 then System.Move(Pointer(S)^, P^, L); P:= P + L; for L:= 1 to NLS do begin P^:= NL[L]; Inc(P); end; end; end; end; { DCGetNewGUID } function DCGetNewGUID: TGUID; var iIndex: integer; begin if CreateGuid(Result) <> 0 then begin Result.Data1 := random($233528DE); Result.Data2 := random($FFFF); Result.Data3 := random($FFFF); for iIndex := 0 to 7 do Result.Data4[iIndex] := random($FF); end; end; { DCPlaceCursorNearControlIfNecessary } //Note: Programmatically move cursor position near a control if it's not around it. // This is for those who would use the keyboard accelerator key for making popup at a logical place. procedure DCPlaceCursorNearControlIfNecessary(AControl: TControl); var ptControlCenter: TPoint; begin ptControlCenter := AControl.ClientToScreen(Classes.Point(AControl.Width div 2, AControl.Height div 2)); if (abs(Mouse.CursorPos.x - ptControlCenter.x) > (AControl.Width div 2)) or (abs(Mouse.CursorPos.y - ptControlCenter.y) > (AControl.Height div 2)) then Mouse.CursorPos := Classes.Point((ptControlCenter.x + (AControl.width div 2)) - 10, ptControlCenter.y); end; end. doublecmd-1.1.30/src/udcreadpsd.pas0000644000175000001440000000364215104114162016204 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Photoshop Document image class Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uDCReadPSD; {$mode objfpc}{$H+} interface uses Graphics, FPImage; type { TPhotoshopDocument } TPhotoshopDocument = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: String; override; end; implementation uses FPReadPSD; { TPhotoshopDocument } class function TPhotoshopDocument.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TFPReaderPSD; end; class function TPhotoshopDocument.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TPhotoshopDocument.GetFileExtensions: String; begin Result:= 'psd'; end; procedure Initialize; begin // Register image format TPicture.RegisterFileFormat('psd', 'Photoshop Document', TPhotoshopDocument); end; initialization Initialize; end. doublecmd-1.1.30/src/udcreadpnm.pas0000644000175000001440000002444515104114162016214 0ustar alexxusers{*****************************************************************************} { This file is part of the Free Pascal's "Free Components Library". Copyright (c) 2003 by Mazen NEIFER of the Free Pascal development team PNM writer implementation. See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. } {*****************************************************************************} { The PNM (Portable aNyMaps) is a generic name for : PBM : Portable BitMaps, PGM : Portable GrayMaps, PPM : Portable PixMaps. There is normally no file format associated with PNM itself.} {$mode objfpc}{$h+} unit uDCReadPNM; interface uses FPImage, Classes, SysUtils, Graphics; Const BufSize = 1024; type { TDCReaderPNM } TDCReaderPNM=class (TFPCustomImageReader) private FBitMapType : Integer; FWidth : Integer; FHeight : Integer; FBufPos : Integer; FBufLen : Integer; FBuffer : Array of AnsiChar; function DropWhiteSpaces(Stream: TStream): AnsiChar; function ReadChar(Stream: TStream): AnsiChar; function ReadInteger(Stream: TStream): Integer; procedure ReadScanlineBuffer(Stream: TStream;p:Pbyte;Len:Integer); protected FMaxVal : Cardinal; FBitPP : Byte; FScanLineSize : Integer; FScanLine : PByte; procedure ReadHeader(Stream : TStream); virtual; function InternalCheck (Stream:TStream):boolean;override; procedure InternalRead(Stream:TStream;Img:TFPCustomImage);override; procedure ReadScanLine(Row : Integer; Stream:TStream); procedure WriteScanLine(Row : Integer; Img : TFPCustomImage); end; { TPortableAnyMapGraphic } TPortableAnyMapGraphic = class(Graphics.TPortableAnyMapGraphic) protected class function GetReaderClass: TFPCustomImageReaderClass; override; end; implementation uses LCLStrConsts; const WhiteSpaces=[#9,#10,#13,#32]; {Whitespace (TABs, CRs, LFs, blanks) are separators in the PNM Headers} { The magic number at the beginning of a pnm file is 'P1', 'P2', ..., 'P7' followed by a WhiteSpace character } function TDCReaderPNM.InternalCheck(Stream:TStream):boolean; var hdr: array[0..2] of AnsiChar; oldPos: Int64; i,n: Integer; begin Result:=False; if Stream = nil then exit; oldPos := Stream.Position; try n := SizeOf(hdr); Result:=(Stream.Size-OldPos>=N); if not Result then exit; For I:=0 to N-1 do hdr[i]:=ReadChar(Stream); Result:=(hdr[0] = 'P') and (hdr[1] in ['1'..'7']) and (hdr[2] in WhiteSpaces); finally Stream.Position := oldPos; FBufLen:=0; end; end; function TDCReaderPNM.DropWhiteSpaces(Stream : TStream) :AnsiChar; begin with Stream do begin repeat Result:=ReadChar(Stream); {If we encounter comment then eate line} if DropWhiteSpaces='#' then repeat Result:=ReadChar(Stream); until Result=#10; until not (Result in WhiteSpaces); end; end; function TDCReaderPNM.ReadInteger(Stream : TStream) :Integer; var s:String[7]; begin s:=''; s[1]:=DropWhiteSpaces(Stream); repeat Inc(s[0]); s[Length(s)+1]:=ReadChar(Stream); until (s[0]=#7) or (s[Length(s)+1] in WhiteSpaces); Result:=StrToInt(s); end; procedure TDCReaderPNM.ReadScanlineBuffer(Stream: TStream;p:Pbyte;Len:Integer); // after the header read, there are still bytes in the buffer. // drain the buffer before going for direct stream reads. var BytesLeft : integer; begin BytesLeft:=FBufLen-FBufPos; if BytesLeft>0 then begin if BytesLeft>Len then BytesLeft:=Len; Move (FBuffer[FBufPos],p^,BytesLeft); Dec(Len,BytesLeft); Inc(FBufPos,BytesLeft); Inc(p,BytesLeft); if Len>0 then Stream.ReadBuffer(p^,len); end else Stream.ReadBuffer(p^,len); end; Function TDCReaderPNM.ReadChar(Stream : TStream) : AnsiChar; begin If (FBufPos>=FBufLen) then begin if Length(FBuffer)=0 then SetLength(FBuffer,BufSize); FBufLen:=Stream.Read(FBuffer[0],Length(FBuffer)); if FBuflen=0 then Raise EReadError.Create('Failed to read from stream'); FBufPos:=0; end; Result:=FBuffer[FBufPos]; Inc(FBufPos); end; procedure TDCReaderPNM.ReadHeader(Stream : TStream); Var C : AnsiChar; begin C:=ReadChar(Stream); If (C<>'P') then Raise Exception.Create('Not a valid PNM image.'); C:=ReadChar(Stream); FBitmapType:=Ord(C)-Ord('0'); If Not (FBitmapType in [1..6]) then Raise Exception.CreateFmt('Unknown PNM subtype : %s',[C]); FWidth:=ReadInteger(Stream); FHeight:=ReadInteger(Stream); if FBitMapType in [1,4] then FMaxVal:=1 else FMaxVal:=ReadInteger(Stream); If (FWidth<=0) or (FHeight<=0) or (FMaxVal<=0) then Raise Exception.Create('Invalid PNM header data'); case FBitMapType of 1: FBitPP := 1; // 1bit PP (text) 2: FBitPP := 8 * SizeOf(Word); // Grayscale (text) 3: FBitPP := 8 * SizeOf(Word)*3; // RGB (text) 4: FBitPP := 1; // 1bit PP (raw) 5: If (FMaxval>255) then // Grayscale (raw); FBitPP:= 8 * 2 else FBitPP:= 8; 6: if (FMaxVal>255) then // RGB (raw) FBitPP:= 8 * 6 else FBitPP:= 8 * 3 end; // Writeln(FWidth,'x',Fheight,' Maxval: ',FMaxVal,' BitPP: ',FBitPP); end; procedure TDCReaderPNM.InternalRead(Stream:TStream;Img:TFPCustomImage); var Row:Integer; begin ReadHeader(Stream); Img.SetSize(FWidth,FHeight); Case FBitmapType of 5,6 : FScanLineSize:=(FBitPP div 8) * FWidth; else FScanLineSize:=FBitPP*((FWidth+7) shr 3); end; GetMem(FScanLine,FScanLineSize); try for Row:=0 to img.Height-1 do begin ReadScanLine(Row,Stream); WriteScanLine(Row,Img); // Writeln(Stream.Position,' ',Stream.Size); end; finally FreeMem(FScanLine); end; end; procedure TDCReaderPNM.ReadScanLine(Row : Integer; Stream:TStream); Var P : PWord; I,j,bitsLeft : Integer; PB: PByte; begin Case FBitmapType of 1 : begin PB:=FScanLine; For I:=0 to ((FWidth+7)shr 3)-1 do begin PB^:=0; bitsLeft := FWidth-(I shl 3)-1; if bitsLeft > 7 then bitsLeft := 7; for j:=0 to bitsLeft do PB^:=PB^ or (ReadInteger(Stream) shl (7-j)); Inc(PB); end; end; 2 : begin P:=PWord(FScanLine); For I:=0 to FWidth-1 do begin P^:=ReadInteger(Stream); Inc(P); end; end; 3 : begin P:=PWord(FScanLine); For I:=0 to FWidth-1 do begin P^:=ReadInteger(Stream); // Red Inc(P); P^:=ReadInteger(Stream); // Green Inc(P); P^:=ReadInteger(Stream); // Blue; Inc(P) end; end; 4,5,6 : if FBufPos>=FBufLen then // still bytes in buffer? Stream.ReadBuffer(FScanLine^,FScanLineSize) else ReadScanLineBuffer(Stream,FScanLine,FScanLineSize); end; end; procedure TDCReaderPNM.WriteScanLine(Row : Integer; Img : TFPCustomImage); Var C : TFPColor; L : Cardinal; Scale: Int64; function ScaleByte(B: Byte):Word; begin if FMaxVal = 255 then Result := (B shl 8) or B { As used for reading .BMP files } else { Mimic the above with multiplications } Result := (B*(FMaxVal+1) + B) * 65535 div Scale; end; function ScaleWord(W: Word):Word; begin if FMaxVal = 65535 then Result := BEtoN(W) else { Mimic the above with multiplications } Result := Int64(W*(FMaxVal+1) + W) * 65535 div Scale; end; Procedure ByteBnWScanLine; Var P : PByte; I,j,x,bitsLeft : Integer; begin P:=PByte(FScanLine); For I:=0 to ((FWidth+7)shr 3)-1 do begin L:=P^; x := I shl 3; bitsLeft := FWidth-x-1; if bitsLeft > 7 then bitsLeft := 7; for j:=0 to bitsLeft do begin if L and $80 <> 0 then Img.Colors[x,Row]:=colBlack else Img.Colors[x,Row]:=colWhite; L:=L shl 1; inc(x); end; Inc(P); end; end; Procedure WordGrayScanLine; Var P : PWord; I : Integer; begin P:=PWord(FScanLine); For I:=0 to FWidth-1 do begin L:=ScaleWord(P^); C.Red:=L; C.Green:=L; C.Blue:=L; Img.Colors[I,Row]:=C; Inc(P); end; end; Procedure WordRGBScanLine; Var P : PWord; I : Integer; begin P:=PWord(FScanLine); For I:=0 to FWidth-1 do begin C.Red:=ScaleWord(P^); Inc(P); C.Green:=ScaleWord(P^); Inc(P); C.Blue:=ScaleWord(P^); Img.Colors[I,Row]:=C; Inc(P); end; end; Procedure ByteGrayScanLine; Var P : PByte; I : Integer; begin P:=PByte(FScanLine); For I:=0 to FWidth-1 do begin L:=ScaleByte(P^); C.Red:=L; C.Green:=L; C.Blue:=L; Img.Colors[I,Row]:=C; Inc(P); end; end; Procedure ByteRGBScanLine; Var P : PByte; I : Integer; begin P:=PByte(FScanLine); For I:=0 to FWidth-1 do begin C.Red:=ScaleByte(P^); Inc(P); C.Green:=ScaleByte(P^); Inc(P); C.Blue:=ScaleByte(P^); Img.Colors[I,Row]:=C; Inc(P); end; end; begin C.Alpha:=AlphaOpaque; Scale := FMaxVal*(FMaxVal+1) + FMaxVal; Case FBitmapType of 1 : ByteBnWScanLine; 2 : WordGrayScanline; 3 : WordRGBScanline; 4 : ByteBnWScanLine; 5 : If FBitPP=8 then ByteGrayScanLine else WordGrayScanLine; 6 : If FBitPP=24 then ByteRGBScanLine else WordRGBScanLine; end; end; { TPortableAnyMapGraphic } class function TPortableAnyMapGraphic.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderPNM; end; procedure Initialize; begin // Replace image handler GraphicFilter(Graphics.TPortableAnyMapGraphic); TPicture.UnregisterGraphicClass(Graphics.TPortableAnyMapGraphic); TPicture.RegisterFileFormat(TPortableAnyMapGraphic.GetFileExtensions, rsPortablePixmap, TPortableAnyMapGraphic); end; initialization Initialize; end. doublecmd-1.1.30/src/ucryptproc.pas0000644000175000001440000003356015104114162016302 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains Encrypt/Decrypt classes and functions. Copyright (C) 2009-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uCryptProc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8; type { TCryptStoreResult } TCryptStoreResult = ( csrSuccess, // Success csrFailed, // Encrypt/Decrypt failed csrWriteError, // Could not write password to password store csrNotFound, // Password not found in password store csrNoMasterKey // No master password entered yet ); { TPasswordStore } TPasswordStore = class(TIniFileEx) private FMode: Byte; FMasterStrong: Boolean; FMasterKey: AnsiString; FMasterKeyHash: AnsiString; private procedure ConvertStore; procedure UpdateMasterKey(var MasterKey: AnsiString; var MasterKeyHash: AnsiString); public constructor Create(const AFileName: String); reintroduce; public function MasterKeySet: Boolean; function HasMasterKey: Boolean; function CheckMasterKey: Boolean; function WritePassword(Prefix, Name, Connection: String; const Password: AnsiString): TCryptStoreResult; function ReadPassword(Prefix, Name, Connection: String; out Password: AnsiString): TCryptStoreResult; function DeletePassword(Prefix, Name, Connection: String): Boolean; end; procedure InitPasswordStore; var PasswordStore: TPasswordStore = nil; implementation uses LCLType, LCLStrConsts, Base64, BlowFish, MD5, HMAC, SCRYPT, SHA3_512, Hash, DCPrijndael, Argon2, uShowMsg, uGlobsPaths, uLng, uDebug, uRandom; const SCRYPT_N = (1 shl 14); SCRYPT_R = 8; SCRYPT_P = 1; const ARGON2_M = (1 shl 16); ARGON2_T = 2; ARGON2_P = 4; const AES_OFFS = 12; // (56 - 32) / 2 KEY_SIZE = SizeOf(TBlowFishKey); MAC_SIZE = SizeOf(TSHA3_256Digest); BUF_SIZE = KEY_SIZE + MAC_SIZE; type TBlowFishKeyRec = record dwSize: LongWord; case Boolean of True: (bBlowFishKey: TBlowFishKey); False: (cBlowFishKey: array [0..KEY_SIZE - 1] of AnsiChar); end; function Encode(MasterKey, Data: AnsiString): AnsiString; var BlowFishKeyRec: TBlowFishKeyRec; StringStream: TStringStream = nil; Base64EncodingStream: TBase64EncodingStream = nil; BlowFishEncryptStream: TBlowFishEncryptStream = nil; begin Result:= EmptyStr; BlowFishKeyRec.cBlowFishKey:= MasterKey; BlowFishKeyRec.dwSize:= Length(MasterKey); try StringStream:= TStringStream.Create(EmptyStr); Base64EncodingStream:= TBase64EncodingStream.Create(StringStream); BlowFishEncryptStream:= TBlowFishEncryptStream.Create(BlowFishKeyRec.bBlowFishKey, BlowFishKeyRec.dwSize, Base64EncodingStream); BlowFishEncryptStream.Write(PAnsiChar(Data)^, Length(Data)); BlowFishEncryptStream.Flush; Base64EncodingStream.Flush; Result:= StringStream.DataString; finally FreeAndNil(BlowFishEncryptStream); FreeAndNil(Base64EncodingStream); FreeAndNil(StringStream); end; end; function Decode(MasterKey, Data: AnsiString): AnsiString; var BlowFishKeyRec: TBlowFishKeyRec; StringStream: TStringStream = nil; Base64DecodingStream: TBase64DecodingStream = nil; BlowFishDeCryptStream: TBlowFishDeCryptStream = nil; begin Result:= EmptyStr; BlowFishKeyRec.cBlowFishKey:= MasterKey; BlowFishKeyRec.dwSize:= Length(MasterKey); try StringStream:= TStringStream.Create(Data); Base64DecodingStream:= TBase64DecodingStream.Create(StringStream); SetLength(Result, Base64DecodingStream.Size); BlowFishDeCryptStream:= TBlowFishDeCryptStream.Create(BlowFishKeyRec.bBlowFishKey, BlowFishKeyRec.dwSize, Base64DecodingStream); BlowFishDeCryptStream.Read(PAnsiChar(Result)^, Base64DecodingStream.Size); finally FreeAndNil(BlowFishDeCryptStream); FreeAndNil(Base64DecodingStream); FreeAndNil(StringStream); end; end; function hmac_sha3_512(AKey: PByte; AKeyLength: Integer; AMessage: AnsiString): AnsiString; var HashDesc: PHashDesc; Buffer: THashDigest; Context: THMAC_Context; begin HashDesc:= FindHash_by_ID(_SHA3_512); hmac_init({%H-}Context, HashDesc, AKey, AKeyLength); hmac_update(Context, Pointer(AMessage), Length(AMessage)); hmac_final(Context, {%H-}Buffer); SetLength(Result, HashDesc^.HDigestlen); Move(Buffer[0], Result[1], HashDesc^.HDigestlen); end; procedure DeriveBytes(Mode: Byte; MasterKey, Salt: AnsiString; var Key; KeyLen: Int32); begin if (Mode > 1) then begin argon2id_kdf(ARGON2_T, ARGON2_M, ARGON2_P, Pointer(MasterKey), Length(MasterKey), Pointer(Salt), Length(Salt), @Key, KeyLen); end else begin scrypt_kdf(Pointer(MasterKey), Length(MasterKey), Pointer(Salt), Length(Salt), SCRYPT_N, SCRYPT_R, SCRYPT_P, Key, KeyLen); end; end; function EncodeStrong(Mode: Byte; MasterKey, Data: AnsiString): AnsiString; var Salt, Hash: AnsiString; StringStream: TStringStream = nil; Buffer: array[0..BUF_SIZE - 1] of Byte; BlowFishKey: TBlowFishKey absolute Buffer; BlowFishEncryptStream: TBlowFishEncryptStream = nil; begin // Generate random salt SetLength(Salt, SizeOf(TSHA3_256Digest)); Random(PByte(Salt), SizeOf(TSHA3_256Digest)); // Generate encryption key DeriveBytes(Mode, MasterKey, Salt, {%H-}Buffer[0], SizeOf(Buffer)); // Encrypt password using encryption key StringStream:= TStringStream.Create(EmptyStr); try BlowFishEncryptStream:= TBlowFishEncryptStream.Create(BlowFishKey, SizeOf(TBlowFishKey), StringStream); try BlowFishEncryptStream.Write(PAnsiChar(Data)^, Length(Data)); finally BlowFishEncryptStream.Free; end; Result:= StringStream.DataString; finally StringStream.Free; end; if (Mode > 0) then begin with TDCP_rijndael.Create(nil) do begin Data:= Copy(Result, 1, Length(Result)); Init(Buffer[AES_OFFS], GetMaxKeySize, nil); Encrypt(PAnsiChar(Data)^, Pointer(Result)^, Length(Data)); Free; end; end; // Calculate password hash message authentication code Hash := hmac_sha3_512(@Buffer[KEY_SIZE], MAC_SIZE, Result); // Calcuate result base64 encoded string Result := EncodeStringBase64(Salt + Result + Copy(Hash, 1, 8)); end; function DecodeStrong(Mode: Byte; MasterKey, Data: AnsiString): AnsiString; var Salt, Hash: AnsiString; StringStream: TStringStream = nil; Buffer: array[0..BUF_SIZE - 1] of Byte; BlowFishKey: TBlowFishKey absolute Buffer; BlowFishDeCryptStream: TBlowFishDeCryptStream = nil; begin Data:= DecodeStringBase64(Data); Hash:= Copy(Data, Length(Data) - 7, 8); Data:= Copy(Data, 1, Length(Data) - 8); Salt:= Copy(Data, 1, SizeOf(TSHA3_256Digest)); Data:= Copy(Data, SizeOf(TSHA3_256Digest) + 1, MaxInt); // Generate encryption key DeriveBytes(Mode, MasterKey, Salt, {%H-}Buffer[0], SizeOf(Buffer)); // Verify password using hash message authentication code Salt:= hmac_sha3_512(@Buffer[KEY_SIZE], MAC_SIZE, Data); if StrLComp(Pointer(Hash), Pointer(Salt), 8) <> 0 then Exit(EmptyStr); // Decrypt password using encryption key SetLength(Result, Length(Data)); if (Mode > 0) then begin with TDCP_rijndael.Create(nil) do begin Init(Buffer[AES_OFFS], GetMaxKeySize, nil); Decrypt(PAnsiChar(Data)^, Pointer(Result)^, Length(Data)); Data:= Copy(Result, 1, Length(Result)); Free; end; end; StringStream:= TStringStream.Create(Data); try BlowFishDeCryptStream:= TBlowFishDeCryptStream.Create(BlowFishKey, SizeOf(TBlowFishKey), StringStream); try BlowFishDeCryptStream.Read(PAnsiChar(Result)^, Length(Result)); finally BlowFishDeCryptStream.Free; end; finally StringStream.Free; end; end; { TPasswordStore } procedure TPasswordStore.ConvertStore; var I, J: Integer; Password: String; Sections, Strings: TStringList; begin if ReadOnly then Exit; Strings:= TStringList.Create; Sections:= TStringList.Create; try CacheUpdates:= True; ReadSections(Sections); for I:= 0 to Sections.Count - 1 do begin if not SameText(Sections[I], 'General') then begin ReadSectionValues(Sections[I], Strings); for J:= 0 to Strings.Count - 1 do begin Password:= Decode(FMasterKey, Strings.ValueFromIndex[J]); Password:= EncodeStrong(FMode, FMasterKey, Password); WriteString(Sections[I], Strings.Names[J], Password); end; end; end; FMasterStrong:= True; FMasterKeyHash:= EmptyStr; UpdateMasterKey(FMasterKey, FMasterKeyHash); WriteString('General', 'MasterKey', FMasterKeyHash); try CacheUpdates:= False; except on E: Exception do msgError(E.Message); end; finally Strings.Free; Sections.Free; end; end; procedure TPasswordStore.UpdateMasterKey(var MasterKey: AnsiString; var MasterKeyHash: AnsiString); const RAND_SIZE = 16; var Randata: AnsiString; begin if not FMasterStrong then begin MasterKeyHash:= MD5Print(MD5String(MasterKey)); MasterKeyHash:= Encode(MasterKey, MasterKeyHash); end else begin if Length(FMasterKeyHash) = 0 then begin SetLength(Randata, RAND_SIZE); Random(PByte(Randata), RAND_SIZE); MasterKeyHash:= '!' + IntToStr(FMode) + EncodeStrong(FMode, MasterKey, Randata); end else begin FMode:= StrToIntDef(Copy(FMasterKeyHash, 2, 1), FMode); Randata:= DecodeStrong(FMode, MasterKey, Copy(FMasterKeyHash, 3, MaxInt)); if Length(Randata) < RAND_SIZE then MasterKeyHash:= EmptyStr else begin MasterKeyHash:= FMasterKeyHash; end; end; end; end; constructor TPasswordStore.Create(const AFileName: String); begin inherited Create(AFileName); FMode:= 1; CacheUpdates:= False; if ReadOnly then DCDebug('Read only password store!'); FMasterKeyHash:= ReadString('General', 'MasterKey', EmptyStr); FMasterStrong:= (Length(FMasterKeyHash) = 0) or (FMasterKeyHash[1] = '!'); end; function TPasswordStore.MasterKeySet: Boolean; begin Result:= (Length(FMasterKeyHash) <> 0); end; function TPasswordStore.HasMasterKey: Boolean; begin Result:= (Length(FMasterKey) <> 0); end; function TPasswordStore.CheckMasterKey: Boolean; var MasterKey, MasterKeyHash: AnsiString; begin Result:= False; if Length(FMasterKey) <> 0 then Exit(True); while (Result = False) do begin if not ShowInputQuery(rsMsgMasterPassword, rsMsgMasterPasswordEnter, True, MasterKey) then Exit; if Length(MasterKey) = 0 then Exit; if Length(FMasterKeyHash) = 0 then repeat if not ShowInputQuery(rsMsgMasterPassword, rsMsgPasswordVerify, True, MasterKeyHash) then Exit; until (MasterKey = MasterKeyHash); UpdateMasterKey(MasterKey, MasterKeyHash); if FMasterKeyHash = EmptyStr then begin FMasterKey:= MasterKey; FMasterKeyHash:= MasterKeyHash; WriteString('General', 'MasterKey', FMasterKeyHash); Result:= True; end else if SameText(FMasterKeyHash, MasterKeyHash) then begin FMasterKey:= MasterKey; if not FMasterStrong then ConvertStore; Result:= True; end else begin ShowMessageBox(rsMsgWrongPasswordTryAgain, rsMtError, MB_OK or MB_ICONERROR); end; end; end; function TPasswordStore.WritePassword(Prefix, Name, Connection: String; const Password: AnsiString): TCryptStoreResult; var Data: AnsiString; begin if ReadOnly then Exit(csrWriteError); if CheckMasterKey = False then Exit(csrFailed); if not FMasterStrong then Data:= Encode(FMasterKey, Password) else begin Data:= EncodeStrong(FMode, FMasterKey, Password) end; if Length(Data) = 0 then Exit(csrFailed); try WriteString(Prefix + '_' + Name, Connection, Data); except Exit(csrWriteError); end; Result:= csrSuccess; end; function TPasswordStore.ReadPassword(Prefix, Name, Connection: String; out Password: AnsiString): TCryptStoreResult; var Data: AnsiString = ''; begin if CheckMasterKey = False then Exit(csrFailed); Data:= ReadString(Prefix + '_' + Name, Connection, Data); if Length(Data) = 0 then Exit(csrNotFound); if not FMasterStrong then Password:= Decode(FMasterKey, Data) else begin Password:= DecodeStrong(FMode, FMasterKey, Data) end; if Length(Password) = 0 then Result:= csrFailed else begin Result:= csrSuccess; end; end; function TPasswordStore.DeletePassword(Prefix, Name, Connection: String): Boolean; begin Result:= not ReadOnly; if Result then try DeleteKey(Prefix + '_' + Name, Connection); except Result:= False; end; end; procedure InitPasswordStore; var AFileName: String; begin AFileName := gpCfgDir + 'pwd.ini'; try PasswordStore:= TPasswordStore.Create(AFileName); except DCDebug('Can not create secure password store!'); end; end; finalization FreeAndNil(PasswordStore); end. doublecmd-1.1.30/src/uconvencoding.pas0000644000175000001440000004145415104114162016732 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Encoding conversion and related stuff Copyright (C) 2011-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uConvEncoding; {$mode delphi} interface uses Classes; const EncodingOem = 'oem'; EncodingNone = 'none'; EncodingDefault = 'default'; EncodingUTF16LE = 'utf16le'; EncodingUTF16BE = 'utf16be'; type TMacroEncoding = (meOEM, meANSI, meUTF8, meUTF8BOM, meUTF16LE, meUTF16BE); function HexToBin(HexString: String): String; function TextIsASCII(const S: String): Boolean; procedure GetSupportedEncodings(List: TStrings); function DetectEncoding(const S: String): String; overload; function SingleByteEncoding(TextEncoding: String): Boolean; function DetectEncoding(const S: String; ADefault: TMacroEncoding; AStrict: Boolean): TMacroEncoding; overload; function ConvertEncoding(const S, FromEncoding, ToEncoding: String{$ifdef FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$endif}): String; implementation uses SysUtils, LazUTF8, LConvEncoding, GetText, DCConvertEncoding, DCUnicodeUtils, nsCore, nsUniversalDetector, uLng, uGlobs; var SupportedEncodings: TStringList = nil; type TMyCodePages = (cp1251, cpKOI8R, cp866); const scCodePage : array[TMyCodePages] of AnsiString = ( // CP1251 (WINDOWS) #$C0#$E0 + // Аа #$C1#$E1 + // Бб #$C2#$E2 + // Вв #$C3#$E3 + // Гг #$C4#$E4 + // Дд #$C5#$E5 + // Ее #$A8#$B8 + // Ёё #$C6#$E6 + // Жж #$C7#$E7 + // Зз #$C8#$E8 + // Ии #$C9#$E9 + // Йй #$CA#$EA + // Кк #$CB#$EB + // Лл #$CC#$EC + // Мм #$CD#$ED + // Нн #$CE#$EE + // Оо #$CF#$EF + // Пп #$D0#$F0 + // Рр #$D1#$F1 + // Сс #$D2#$F2 + // Тт #$D3#$F3 + // Уу #$D4#$F4 + // Фф #$D5#$F5 + // Хх #$D6#$F6 + // Цц #$D7#$F7 + // Чч #$D8#$F8 + // Шш #$D9#$F9 + // Щщ #$DA#$FA + // Ъъ #$DB#$FB + // Ыы #$DC#$FC + // Ьь #$DD#$FD + // Ээ #$DE#$FE + // Юю #$DF#$FF , // Яя // KOI8-R (UNIX) #$E1#$C1 + // Аа #$E2#$C2 + // Бб #$F7#$D7 + // Вв #$E7#$C7 + // Гг #$E4#$C4 + // Дд #$E5#$C5 + // Ее #$B3#$A3 + // Ёё #$F6#$D6 + // Жж #$FA#$DA + // Зз #$E9#$C9 + // Ии #$EA#$CA + // Йй #$EB#$CB + // Кк #$EC#$CC + // Лл #$ED#$CD + // Мм #$EE#$CE + // Нн #$EF#$CF + // Оо #$F0#$D0 + // Пп #$F2#$D2 + // Рр #$F3#$D3 + // Сс #$F4#$D4 + // Тт #$F5#$D5 + // Уу #$E6#$C6 + // Фф #$E8#$C8 + // Хх #$E3#$C3 + // Цц #$FE#$DE + // Чч #$FB#$DB + // Шш #$FD#$DD + // Щщ #$FF#$DF + // Ъъ #$F9#$D9 + // Ыы #$F8#$D8 + // Ьь #$FC#$DC + // Ээ #$E0#$C0 + // Юю #$F1#$D1 , // Яя // CP866 (DOS) #$80#$A0 + // Аа #$81#$A1 + // Бб #$82#$A2 + // Вв #$83#$A3 + // Гг #$84#$A4 + // Дд #$85#$A5 + // Ее #$F0#$F1 + // Ёё #$86#$A6 + // Жж #$87#$A7 + // Зз #$88#$A8 + // Ии #$89#$A9 + // Йй #$8A#$AA + // Кк #$8B#$AB + // Лл #$8C#$AC + // Мм #$8D#$AD + // Нн #$8E#$AE + // Оо #$8F#$AF + // Пп #$90#$E0 + // Рр #$91#$E1 + // Сс #$92#$E2 + // Тт #$93#$E3 + // Уу #$94#$E4 + // Фф #$95#$E5 + // Хх #$96#$E6 + // Цц #$97#$E7 + // Чч #$98#$E8 + // Шш #$99#$E9 + // Щщ #$9A#$EA + // Ъъ #$9B#$EB + // Ыы #$9C#$EC + // Ьь #$9D#$ED + // Ээ #$9E#$EE + // Юю #$9F#$EF // Яя ); var svStatistic : array[AnsiChar] of Single; procedure InitStatistic; begin FillChar(svStatistic, SizeOf(svStatistic), 0); // CP1251 (WINDOWS) svStatistic[#$C0] := 0.001; // 'А' svStatistic[#$C1] := 0; // 'Б' svStatistic[#$C2] := 0.002; // 'В' svStatistic[#$C3] := 0; // 'Г' svStatistic[#$C4] := 0.001; // 'Д' svStatistic[#$C5] := 0.001; // 'Е' svStatistic[#$C6] := 0; // 'Ж' svStatistic[#$C7] := 0; // 'З' svStatistic[#$C8] := 0.001; // 'И' svStatistic[#$C9] := 0; // 'Й' svStatistic[#$CA] := 0.001; // 'К' svStatistic[#$CB] := 0; // 'Л' svStatistic[#$CC] := 0.001; // 'М' svStatistic[#$CD] := 0.001; // 'Н' svStatistic[#$CE] := 0.001; // 'О' svStatistic[#$CF] := 0.002; // 'П' svStatistic[#$D0] := 0.002; // 'Р' svStatistic[#$D1] := 0.001; // 'С' svStatistic[#$D2] := 0.001; // 'Т' svStatistic[#$D3] := 0; // 'У' svStatistic[#$D4] := 0; // 'Ф' svStatistic[#$D5] := 0; // 'Х' svStatistic[#$D6] := 0; // 'Ц' svStatistic[#$D7] := 0.001; // 'Ч' svStatistic[#$D8] := 0.001; // 'Ш' svStatistic[#$D9] := 0; // 'Щ' svStatistic[#$DA] := 0; // 'Ъ' svStatistic[#$DB] := 0; // 'Ы' svStatistic[#$DC] := 0; // 'Ь' svStatistic[#$DD] := 0.001; // 'Э' svStatistic[#$DE] := 0; // 'Ю' svStatistic[#$DF] := 0; // 'Я' svStatistic[#$E0] := 0.057; // 'а' svStatistic[#$E1] := 0.01; // 'б' svStatistic[#$E2] := 0.031; // 'в' svStatistic[#$E3] := 0.011; // 'г' svStatistic[#$E4] := 0.021; // 'д' svStatistic[#$E5] := 0.067; // 'е' svStatistic[#$E6] := 0.007; // 'ж' svStatistic[#$E7] := 0.013; // 'з' svStatistic[#$E8] := 0.052; // 'и' svStatistic[#$E9] := 0.011; // 'й' svStatistic[#$EA] := 0.023; // 'к' svStatistic[#$EB] := 0.03; // 'л' svStatistic[#$EC] := 0.024; // 'м' svStatistic[#$ED] := 0.043; // 'н' svStatistic[#$EE] := 0.075; // 'о' svStatistic[#$EF] := 0.026; // 'п' svStatistic[#$F0] := 0.038; // 'р' svStatistic[#$F1] := 0.034; // 'с' svStatistic[#$F2] := 0.046; // 'т' svStatistic[#$F3] := 0.016; // 'у' svStatistic[#$F4] := 0.001; // 'ф' svStatistic[#$F5] := 0.006; // 'х' svStatistic[#$F6] := 0.002; // 'ц' svStatistic[#$F7] := 0.011; // 'ч' svStatistic[#$F8] := 0.004; // 'ш' svStatistic[#$F9] := 0.004; // 'щ' svStatistic[#$FA] := 0; // 'ъ' svStatistic[#$FB] := 0.012; // 'ы' svStatistic[#$FC] := 0.012; // 'ь' svStatistic[#$FD] := 0.003; // 'э' svStatistic[#$FE] := 0.005; // 'ю' svStatistic[#$FF] := 0.015; // 'я' end; function MyConvertString(const S: AnsiString; const FromCP, ToCP: TMyCodePages): AnsiString; var I: Integer; C: AnsiChar; Chars: array [AnsiChar] of AnsiChar; begin Result:= S; if FromCP = ToCP then Exit; for C := #0 to #255 do Chars[C] := C; for I := 1 to Length(scCodePage[cp1251]) do Chars[scCodePage[FromCP][I]] := scCodePage[ToCP][I]; for I := 1 to Length(s) do Result[I] := Chars[Result[I]]; end; function DetectCharsetCyrillic(const S: AnsiString): AnsiString; var I: Integer; J: LongWord; C: AnsiChar; D, M: Single; T: AnsiString; CodePage: TMyCodePages; CharCount: array [AnsiChar] of Integer; begin J := 0; M := 0; T := S; FillChar(CharCount, SizeOf(CharCount), 0); for I := 1 to Length(S) do Inc(CharCount[S[I]]); // Check for CP866 encoding for C := #$80 {'А'} to #$AF {'п'} do Inc(J, CharCount[C]); if J > (Length(S) div 3) then begin Result := 'CP866'; Exit; end; for C := #$C0 {'А'} to #$FF {'я'} do M := M + sqr(CharCount[C] / Length(S) - svStatistic[C]); for CodePage := Low(TMyCodePages) to High(TMyCodePages) do begin // Convert to cp1251, because statistic in this encoding T:= MyConvertString(S, CodePage, cp1251); FillChar(CharCount, SizeOf(CharCount), 0); for I := 1 to Length(T) do Inc(CharCount[T[I]]); D := 0; for C := #$C0 {'А'} to #$FF {'я'} do D := D + sqr(CharCount[C] / Length(S) - svStatistic[C]); if D <= M then begin M := D; case CodePage of cp1251 : Result:= 'CP1251'; cpKOI8R: Result:= 'KOI8-R'; cp866 : Result:= 'CP866'; end; end; end; end; function MyDetectCodePageType(const S: AnsiString): AnsiString; var Detector: TnsUniversalDetector = nil; CharsetInfo: rCharsetInfo; begin Detector:= TnsUniversalDetector.Create; try Detector.Reset; Detector.HandleData(PChar(S), Length(S)); if not Detector.Done then Detector.DataEnd; CharsetInfo:= Detector.GetDetectedCharsetInfo; case CharsetInfo.CodePage of 866: Result:= 'CP866'; 932: Result:= 'CP932'; 950: Result:= 'CP950'; 1251: Result:= 'CP1251'; 1252: Result:= 'CP1252'; 1253: Result:= 'CP1253'; 1255: Result:= 'CP1255'; 20866: Result:= 'KOI8-R'; 52936, // GB2312 54936: Result:= 'CP936'; // GB18030 51932: Result:= 'CP932'; // EUC-JP 51949: Result:= 'CP949'; // EUC-KR else begin Result:= CharsetInfo.Name; // When unknown encoding then use system encoding if SupportedEncodings.IndexOf(Result) < 0 then begin if (SystemLanguage = 'be') or (SystemLanguage = 'bg') or (SystemLanguage = 'ky') or (SystemLanguage = 'mk') or (SystemLanguage = 'mn') or (SystemLanguage = 'ru') or (SystemLanguage = 'tt') then Result:= DetectCharsetCyrillic(S) else begin Result:= GetDefaultTextEncoding; if NormalizeEncoding(Result) = EncodingUTF8 then begin // the system encoding is UTF-8, but it is not UTF-8 // use ISO-8859-1 instead. This encoding has a full 1:1 mapping to unicode, // so no character is lost during conversions. Result:= 'ISO-8859-1'; end; end; end; end; end; finally FreeAndNil(Detector); end; end; procedure GetSupportedEncodings(List: TStrings); var Index: Integer; begin if SupportedEncodings.Count > 0 then List.Assign(SupportedEncodings) else begin TStringList(List).CaseSensitive:= False; LConvEncoding.GetSupportedEncodings(List); Index:= List.IndexOf(EncodingAnsi); List[Index] := UpperCase(EncodingAnsi); List.Insert(Index + 1, UpperCase(EncodingOem)); Index:= List.IndexOf('UCS-2LE'); List[Index] := 'UTF-16LE'; Index:= List.IndexOf('UCS-2BE'); List[Index] := 'UTF-16BE'; end; end; function DetectEncoding(const S: String): String; function CompareI(p1, p2: PChar; Count: integer): boolean; var i: Integer; Chr1: Byte; Chr2: Byte; begin for i:=1 to Count do begin Chr1 := byte(p1^); Chr2 := byte(p2^); if Chr1<>Chr2 then begin if Chr1 in [97..122] then dec(Chr1,32); if Chr2 in [97..122] then dec(Chr2,32); if Chr1<>Chr2 then exit(false); end; inc(p1); inc(p2); end; Result:=true; end; var L, P: Integer; EndPos: Integer; UserEncoding: Boolean; begin UserEncoding:= (gDefaultTextEncoding <> EncodingNone); L:= Length(S); if L = 0 then begin if UserEncoding then Result:= gDefaultTextEncoding else begin Result:= GetDefaultTextEncoding; end; Exit; end; // Try detect Unicode case DetectEncoding(S, meOEM, UserEncoding) of meUTF8: Exit(EncodingUTF8); meUTF8BOM: Exit(EncodingUTF8BOM); meUTF16LE: Exit(EncodingUTF16LE); meUTF16BE: Exit(EncodingUTF16BE); end; // Try {%encoding eee} if (L >= 11) and CompareI(@S[1], '{%encoding ', 11) then begin P:= 12; while (P <= L) and (S[P] in [' ', #9]) do Inc(P); EndPos:= P; while (EndPos <= L) and (not (S[EndPos] in ['}', ' ', #9])) do Inc(EndPos); Result:= NormalizeEncoding(Copy(S, P, EndPos - P)); Exit; end; if UserEncoding then Result:= gDefaultTextEncoding else begin // Try to detect encoding Result:= MyDetectCodePageType(S); end; end; function SingleByteEncoding(TextEncoding: String): Boolean; begin TextEncoding := NormalizeEncoding(TextEncoding); if TextEncoding = EncodingDefault then TextEncoding := GetDefaultTextEncoding; Result := (TextEncoding <> EncodingUTF8) and (TextEncoding <> EncodingUTF8BOM) and (TextEncoding <> EncodingUTF16LE) and (TextEncoding <> EncodingUTF16BE); end; function DetectEncoding(const S: String; ADefault: TMacroEncoding; AStrict: Boolean): TMacroEncoding; var L, P, I: Integer; begin L:= Length(S); if L = 0 then Exit(ADefault); // Try UTF-8 BOM (Byte Order Mark) if (L >= 3) and (S[1] = #$EF) and (S[2] = #$BB ) and (S[3] = #$BF) then begin Result:= meUTF8BOM; Exit; end; // Try ucs-2le BOM FF FE if (L >= 2) and (S[1] = #$FF) and (S[2] = #$FE) then begin Result:= meUTF16LE; Exit; end; // Try ucs-2be BOM FE FF if (L >= 2) and (S[1] = #$FE) and (S[2] = #$FF) then begin Result:= meUTF16BE; Exit; end; // Try UTF-8 (this includes ASCII) P:= 1; I:= Ord(not AStrict); while (P <= L) do begin if Ord(S[P]) < 128 then begin // ASCII Inc(P); end else begin I:= UTF8CodepointStrictSize(@S[P]); if (I = 0) then begin // Ignore last char if (L - P > 2) then Result:= ADefault else begin Result:= meUTF8; end; Exit; end; Inc(P, I); end; end; if I <> 0 then Result:= meUTF8 else begin Result:= ADefault; end; end; function ConvertEncoding(const S, FromEncoding, ToEncoding: String{$ifdef FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean{$endif}): String; var Encoded : Boolean; AFrom, ATo : String; begin AFrom:= NormalizeEncoding(FromEncoding); ATo:= NormalizeEncoding(ToEncoding); if AFrom = ATo then Exit(S); if S = EmptyStr then begin if ATo = EncodingUTF8BOM then Result:= UTF8BOM else begin Result := S; end; Exit; end; Encoded:= True; if AFrom = EncodingUTF8 then begin if ATo = EncodingAnsi then Result:= CeUtf8ToAnsi(S) else if ATo = EncodingOem then Result:= CeUtf8ToOem(S) else if ATo = EncodingDefault then Result:= CeUtf8ToSys(S) else if ATo = EncodingUTF16LE then Result:= Utf8ToUtf16LE(S) else if ATo = EncodingUTF16BE then Result:= Utf8ToUtf16BE(S) else Result:= ConvertEncodingFromUTF8(S, ATo, Encoded{$ifdef FPC_HAS_CPSTRING}, SetTargetCodePage{$endif}); if Encoded then Exit; end else if ATo = EncodingUTF8 then begin if AFrom = EncodingAnsi then Result:= CeAnsiToUtf8(S) else if AFrom = EncodingOem then Result:= CeOemToUtf8(S) else if AFrom = EncodingDefault then Result:= CeSysToUtf8(S) else if AFrom = EncodingUTF16LE then Result:= Utf16LEToUtf8(S) else if AFrom = EncodingUTF16BE then Result:= Utf16BEToUtf8(S) else Result:= ConvertEncodingToUTF8(S, AFrom, Encoded); if Encoded then Exit; end else begin Result:= ConvertEncodingToUTF8(S, AFrom, Encoded); if Encoded then Result:= ConvertEncodingFromUTF8(Result, ATo, Encoded{$ifdef FPC_HAS_CPSTRING}, SetTargetCodePage{$endif}); if Encoded then Exit; end; // Cannot encode: return original string Result:= S; end; function TextIsASCII(const S: String): Boolean; inline; var I: Integer; begin for I:= 1 to Length(S) do begin if Ord(S[I]) > 127 then Exit(False); end; Result:= True; end; function HexToBin(HexString: String): String; var Byte: LongRec; L, J, C: Integer; HexValue: PAnsiChar; BinValue: PAnsiChar; begin C:= 0; L:= Length(HexString); SetLength(Result, L); BinValue:= PAnsiChar(Result); HexValue:= PAnsiChar(HexString); while (L > 0) do begin // Skip space if HexValue^ = #32 then begin Dec(L); Inc(HexValue); Continue; end; // Read high and low 4 bits for J:= 1 downto 0 do begin if HexValue^ in ['A'..'F', 'a'..'f'] then Byte.Bytes[J]:= ((Ord(HexValue^) + 9) and 15) else if HexValue^ in ['0'..'9'] then Byte.Bytes[J]:= ((Ord(HexValue^)) and 15) else raise EConvertError.CreateFmt(rsMsgInvalidHexNumber, [HexValue^]); Dec(L); Inc(HexValue); end; // Result 8 bit BinValue^:= Chr(Byte.Bytes[0] + (Byte.Bytes[1] shl 4)); Inc(BinValue); Inc(C); end; SetLength(Result, C); end; initialization InitStatistic; SupportedEncodings:= TStringList.Create; GetSupportedEncodings(SupportedEncodings); finalization FreeAndNil(SupportedEncodings); end. doublecmd-1.1.30/src/uconnectionmanager.pas0000644000175000001440000001573115104114162017747 0ustar alexxusersunit uConnectionManager; {$mode delphi} interface uses Classes, SysUtils, uFileSource, uDrive, uDrivesList; type TFileSourceRecord = record Count: Integer; Name, Path: String; FileSource: IFileSource; end; PFileSourceRecord = ^TFileSourceRecord; function GetNetworkPath(ADrive: PDrive): String; procedure UpdateDriveList(ADriveList: TDrivesList); procedure ShowVirtualDriveMenu(ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); procedure AddNetworkConnection(const Name, Path: String; FileSource: IFileSource); procedure RemoveNetworkConnection(const Name, Path: String); procedure CloseNetworkConnection(); var WfxConnectionList: TStringList = nil; implementation uses Forms, Menus, StrUtils, DCStrUtils, fMain, uWfxPluginFileSource, uLog, uGlobs, uFileSourceUtil, uFileView; var ContextMenu: TPopupMenu = nil; function GetConnectionName(const Name, Path: String): String; inline; begin Result:= Name + ': ' + Path; end; function NewFileSourceRecord(FileSource: IFileSource; const Name, Path: String): PFileSourceRecord; begin New(Result); Result^.Count:= 1; Result^.Name:= Name; Result^.Path:= Path; Result^.FileSource:= FileSource; end; procedure DisposeFileSourceRecord(FileSourceRecord: PFileSourceRecord); begin FileSourceRecord^.FileSource:= nil; Dispose(FileSourceRecord); end; procedure CloseConnection(Index: Integer); var Connection: TFileSourceRecord; FileSource: IWfxPluginFileSource; begin PFileSourceRecord(WfxConnectionList.Objects[Index]).Count:= 1; Connection:= PFileSourceRecord(WfxConnectionList.Objects[Index])^; FileSource:= Connection.FileSource as IWfxPluginFileSource; if FileSource.WfxModule.WfxDisconnect(Connection.Path) then begin RemoveNetworkConnection(Connection.Name, Connection.Path); end; with frmMain do begin if ActiveFrame.FileSource.Equals(FileSource) and IsInPath(Connection.Path, ActiveFrame.CurrentPath, True, True) then begin ActiveFrame.RemoveCurrentFileSource; end else if NotActiveFrame.FileSource.Equals(FileSource) and IsInPath(Connection.Path, NotActiveFrame.CurrentPath, True, True) then begin NotActiveFrame.RemoveCurrentFileSource end; end; end; procedure OnNetworkDisconnect(Self, Sender: TObject); var Index: Integer; MenuItem: TMenuItem absolute Sender; begin Index:= WfxConnectionList.IndexOf(MenuItem.Hint); if Index >= 0 then CloseConnection(Index); end; function GetNetworkPath(ADrive: PDrive): String; begin Result:= ADrive^.DeviceId + StringReplace(ADrive^.Path, '\', '/', [rfReplaceAll]); end; procedure UpdateDriveList(ADriveList: TDrivesList); var Drive: PDrive; Index: Integer; FileSourceRecord: PFileSourceRecord; begin for Index:= 0 to WfxConnectionList.Count - 1 do begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); New(Drive); Drive^.DriveSize:= 0; Drive^.IsMounted:= True; Drive^.DriveType:= dtVirtual; Drive^.Path:= FileSourceRecord.Path; Drive^.DisplayName:= IntToStr(Index); Drive^.DeviceId:= 'wfx://' + FileSourceRecord.Name; Drive^.DriveLabel:= GetConnectionName(FileSourceRecord.Name, FileSourceRecord.Path); ADriveList.Add(Drive); end; end; procedure ShowVirtualDriveMenu(ADrive: PDrive; X, Y: Integer; CloseEvent: TNotifyEvent); var Handler: TMethod; MenuItem: TMenuItem; begin if not StrBegins(ADrive^.DeviceId, 'wfx://') then Exit; // Free previous created menu FreeAndNil(ContextMenu); // Create new context menu ContextMenu:= TPopupMenu.Create(nil); ContextMenu.OnClose := CloseEvent; MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= ADrive.DriveLabel; MenuItem.Enabled:= False; ContextMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= '-'; ContextMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= frmMain.actNetworkDisconnect.Caption; MenuItem.Hint:= ADrive.DriveLabel; Handler.Data:= MenuItem; Handler.Code:= @OnNetworkDisconnect; MenuItem.OnClick:= TNotifyEvent(Handler); ContextMenu.Items.Add(MenuItem); // Show context menu ContextMenu.PopUp(X, Y); end; procedure AddNetworkConnection(const Name, Path: String; FileSource: IFileSource); var Index: Integer; ConnectionName: String; FileSourceRecord: PFileSourceRecord; begin ConnectionName:= GetConnectionName(Name, Path); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); FileSourceRecord.Count:= FileSourceRecord.Count + 1; end else begin FileSourceRecord:= NewFileSourceRecord(FileSource, Name, Path); WfxConnectionList.AddObject(ConnectionName, TObject(FileSourceRecord)); with frmMain do begin miNetworkDisconnect.Enabled:= WfxConnectionList.Count > 0; UpdateDiskCount; end; end; end; procedure RemoveNetworkConnection(const Name, Path: String); var Index: Integer; ConnectionName: String; FileSourceRecord: PFileSourceRecord; begin ConnectionName:= GetConnectionName(Name, Path); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then with frmMain do begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); FileSourceRecord^.Count:= FileSourceRecord^.Count - 1; if FileSourceRecord^.Count > 0 then Exit; DisposeFileSourceRecord(PFileSourceRecord(WfxConnectionList.Objects[Index])); WfxConnectionList.Delete(Index); miNetworkDisconnect.Enabled:= WfxConnectionList.Count > 0; if WfxConnectionList.Count = 0 then begin if gLogWindow = False then begin ShowLogWindow(PtrInt(False)); end; end; UpdateDiskCount; end; end; procedure CloseNetworkConnection; var Index: Integer; ConnectionName: String; FileView: TFileView = nil; begin if WfxConnectionList.Count > 0 then with frmMain do begin if ActiveFrame.FileSource.IsInterface(IWfxPluginFileSource) and (ActiveFrame.CurrentPath <> PathDelim) then FileView:= ActiveFrame else if NotActiveFrame.FileSource.IsInterface(IWfxPluginFileSource) and (NotActiveFrame.CurrentPath <> PathDelim) then begin FileView:= NotActiveFrame end; if Assigned(FileView) then begin ConnectionName:= ExtractWord(2, FileView.CurrentAddress, ['/']); ConnectionName:= GetConnectionName(ConnectionName, PathDelim + ExtractWord(1, FileView.CurrentPath, [PathDelim])); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then CloseConnection(Index); end // Close last connection else begin CloseConnection(WfxConnectionList.Count - 1); end; end; end; initialization WfxConnectionList:= TStringList.Create; finalization FreeAndNil(WfxConnectionList); end. doublecmd-1.1.30/src/ucolumns.pas0000644000175000001440000014160315104114162015733 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uColumns; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, uFile, uFileSource, DCXmlConfig, FpJson, DCBasicTypes, uFileFunctions, uColors; const FS_GENERAL = ''; type { TColPrm } TColPrm = class FontName: String; FontSize: Integer; FontStyle: TFontStyles; TextColor, Background, Background2, MarkColor, CursorColor, CursorText, InactiveCursorColor, InactiveMarkColor: TColor; UseInvertedSelection: Boolean; UseInactiveSelColor: Boolean; Overcolor: Boolean; public constructor Create; end; { TPanelColumnsType } TPanelColumn = class private FUnique: String; FFuncString: String; procedure SetUnique(const AValue: String); procedure SetFuncString(NewValue: String); function GetColumnResultString(AFile: TFile; const AFileSource: IFileSource): String; public //--------------------- Title: String; {String is function or simpletext; TObject(integer)=indicator of function: 0 is simpletext; 1 is function;} FuncList: TStringList; Width: Integer; Align: TAlignment; //--------------------- FontName: String; FontSize: Integer; FontStyle: TFontStyles; TextColor, Background, Background2, MarkColor, CursorColor, CursorText, InactiveCursorColor, InactiveMarkColor: TColor; BorderFrameWidth :integer; UseInvertedSelection: Boolean; UseInactiveSelColor: Boolean; Overcolor: Boolean; //--------------------- constructor Create; constructor CreateNew; destructor Destroy; override; //------------------------------------------------------ property Unique: String read FUnique write SetUnique; property FuncString: String read FFuncString write SetFuncString; end; { TPanelColumnsClass } TPanelColumnsClass = class //------------------------------------------------------ private FList: TList; FUnique: String; fSetName: String; // Global settings for columns view. FFileSystem: String; FCustomView: Boolean; FCursorBorder: Boolean; FCursorBorderColor: TColor; FUseFrameCursor: Boolean; //------------------------------------------------------ function GetCursorBorder: boolean; function GetCursorBorderColor: TColor; function GetUseFrameCursor: Boolean; procedure SetUnique(const AValue: String); protected procedure AddColumn(AList: TJSONArray; AColumn: TPanelColumn); public constructor Create; destructor Destroy; override; procedure Assign(const OtherColumnsClass: TPanelColumnsClass); //--------------------- function GetColumnTitle(const Index: Integer): String; function GetColumnFuncString(const Index: Integer): String; function GetColumnWidth(const Index: Integer): Integer; function GetColumnAlign(const Index: Integer): TAlignment; function GetColumnAlignString(const Index: Integer): String; //--------------------- function GetColumnFontName(const Index: Integer): String; function GetColumnFontSize(const Index: Integer): Integer; function GetColumnFontStyle(const Index: Integer): TFontStyles; function GetColumnFontQuality(const Index: Integer): TFontQuality; function GetColumnTextColor(const Index: Integer): TColor; function GetColumnBackground(const Index: Integer): TColor; function GetColumnBackground2(const Index: Integer): TColor; function GetColumnMarkColor(const Index: Integer): TColor; function GetColumnCursorColor(const Index: Integer): TColor; function GetColumnCursorText(const Index: Integer): TColor; function GetColumnInactiveCursorColor(const Index: Integer): TColor; function GetColumnInactiveMarkColor(const Index: Integer): TColor; function GetColumnUseInvertedSelection(const Index: Integer): Boolean; function GetColumnUseInactiveSelColor(const Index: Integer): Boolean; function GetColumnOvercolor(const Index: Integer): Boolean; function GetColumnBorderFrameWidth(const Index: Integer):integer; //--------------------- function GetColumnPrm(const Index: Integer): TColPrm; //-------------------------------------------------------------------------- function GetColumnsVariants: TDynamicStringArray; {en Converts string functions in the column into their integer values, so that they don't have to be compared by string during sorting. Call this before sorting then pass result to Compare in the sorting loop. } function GetColumnFunctions(const Index: Integer): TFileFunctions; function GetColumnItemResultString(const Index: Integer; const AFile: TFile; const AFileSource: IFileSource): String; //-------------------------------------------------------------------------- function GetColumnItem(const Index: Integer): TPanelColumn; function GetCount: Integer; function Add(Item: TPanelColumn): Integer; function Add(const Title, FuncString: String; const Width: Integer; const Align: TAlignment = taLeftJustify): Integer; overload; //--------------------- procedure SetColumnTitle(const Index: Integer; Title: String); procedure SetColumnFuncString(const Index: Integer; FuncString: String); procedure SetColumnWidth(Index, Width: Integer); procedure SetColumnAlign(const Index: Integer; Align: TAlignment); //--------------------- procedure SetColumnFontName(const Index: Integer; Value: String); procedure SetColumnFontSize(const Index: Integer; Value: Integer); procedure SetColumnFontStyle(const Index: Integer; Value: TFontStyles); procedure SetColumnTextColor(const Index: Integer; Value: TColor); procedure SetColumnBackground(const Index: Integer; Value: TColor); procedure SetColumnBackground2(const Index: Integer; Value: TColor); procedure SetColumnMarkColor(const Index: Integer; Value: TColor); procedure SetColumnCursorColor(const Index: Integer; Value: TColor); procedure SetColumnCursorText(const Index: Integer; Value: TColor); procedure SetColumnInactiveCursorColor(const Index: Integer; Value: TColor); procedure SetColumnInactiveMarkColor(const Index: Integer; Value: TColor); procedure SetColumnUseInvertedSelection(const Index: Integer; Value: Boolean); procedure SetColumnUseInactiveSelColor(const Index: Integer; Value: Boolean); procedure SetColumnOvercolor(const Index: Integer; Value: Boolean); //--------------------- procedure SetColumnPrm(const Index: Integer; Value: TColPrm); //--------------------- procedure Delete(const Index: Integer); procedure Exchange(Index1, Index2: Integer); procedure Clear; procedure AddDefaultColumns; procedure AddDefaultEverything; //--------------------- procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); //--------------------- procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); //--------------------- procedure LoadColors(ANode: TJSONObject); procedure SaveColors(ANode: TJSONObject); procedure Synchronize(ANode: TJSONObject); //--------------------- function GetSignature(Seed:dword=$000000):dword; property ColumnsCount: Integer read GetCount; property Count: Integer read GetCount; property CustomView: Boolean read FCustomView write FCustomView; property Name: String read fSetName write fSetName; property Unique: String read FUnique write SetUnique; property FileSystem: String read FFileSystem write FFileSystem; property UseCursorBorder: boolean read GetCursorBorder write FCursorBorder; property CursorBorderColor: TColor read GetCursorBorderColor write FCursorBorderColor; property UseFrameCursor: boolean read GetUseFrameCursor write FUseFrameCursor; //------------------------------------------------------ end; { TPanelColumnsList } TPanelColumnsList = class private FStyle: Integer; fSet: TStringList; FStyles: array[0..Pred(THEME_COUNT)] of TJSONArray; private function GetCount: Integer; procedure Synchronize(Item: TPanelColumnsClass); public constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure UpdateStyle; procedure LoadColors; overload; procedure SaveColors; overload; procedure LoadColors(AConfig: TJSONObject); overload; procedure SaveColors(AConfig: TJSONObject); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function Add(Item: TPanelColumnsClass): Integer; procedure Insert(AIndex: Integer; Item: TPanelColumnsClass); procedure DeleteColumnSet(SetName: String); procedure DeleteColumnSet(SetIndex: Integer); overload; procedure CopyColumnSet(SetName, NewSetName: String); function GetColumnSet(const Index: Integer): TPanelColumnsClass; function GetColumnSet(Setname: String): TPanelColumnsClass; function GetColumnSet(const AName, FileSystem: String): TPanelColumnsClass; //--------------------- property Items: TStringList read fSet; property Count: Integer read GetCount; end; function StrToAlign(str: String): TAlignment; implementation uses StrUtils, LCLType, Forms, crc, DCStrUtils, uDebug, uLng, uGlobs, uDCUtils; const JsonConfigVersion = 15; var LoadedConfigVersion: Integer; DefaultTitleHash: LongWord = 0; procedure UpdateDefaultTitleHash; var Title: String = ''; begin DefaultTitleHash:= CRC32(0, nil, 0); Title:= rsColName + rsColExt + rsColSize + rsColDate + rsColAttr; DefaultTitleHash:= CRC32(DefaultTitleHash, Pointer(Title), Length(Title)); end; function StrToAlign(str: String): TAlignment; begin if str = '<-' then Result := taLeftJustify else if str = '->' then Result := taRightJustify else if str = '=' then Result := taCenter; end; function GetUnique: String; begin Result:= TrimSet(GuidToString(DCGetNewGUID), ['{', '}']); end; { TPanelColumnsType } function TPanelColumnsClass.GetColumnTitle(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).Title; end; function TPanelColumnsClass.GetColumnFuncString(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).FuncString; end; function TPanelColumnsClass.GetColumnWidth(const Index: Integer): Integer; begin if Index >= Flist.Count then Exit(0); Result := TPanelColumn(Flist[Index]).Width; end; function TPanelColumnsClass.GetColumnAlign(const Index: Integer): TAlignment; begin if Index >= Flist.Count then Exit(taLeftJustify); Result := TPanelColumn(Flist[Index]).Align; end; function TPanelColumnsClass.GetColumnAlignString(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); case TPanelColumn(Flist[Index]).Align of taLeftJustify: Result := '<-'; taRightJustify: Result := '->'; taCenter: Result := '='; end; end; function TPanelColumnsClass.GetColumnFontName(const Index: Integer): String; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontName else Result := gFonts[dcfMain].Name; end; function TPanelColumnsClass.GetColumnFontSize(const Index: Integer): Integer; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontSize else Result := gFonts[dcfMain].Size; end; function TPanelColumnsClass.GetColumnFontStyle(const Index: Integer): TFontStyles; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontStyle else Result := gFonts[dcfMain].Style; end; function TPanelColumnsClass.GetColumnFontQuality(const Index: Integer): TFontQuality; begin Result := gFonts[dcfMain].Quality; end; function TPanelColumnsClass.GetColumnTextColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).TextColor else Result := gColors.FilePanel^.ForeColor; end; function TPanelColumnsClass.GetColumnBackground(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background else Result := gColors.FilePanel^.BackColor; end; function TPanelColumnsClass.GetColumnBackground2(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background2 else Result := gColors.FilePanel^.BackColor2; end; function TPanelColumnsClass.GetColumnMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).MarkColor else Result := gColors.FilePanel^.MarkColor; end; function TPanelColumnsClass.GetColumnCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorColor else Result := gColors.FilePanel^.CursorColor; end; function TPanelColumnsClass.GetColumnCursorText(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorText else Result := gColors.FilePanel^.CursorText; end; function TPanelColumnsClass.GetColumnInactiveCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveCursorColor else Result := gColors.FilePanel^.InactiveCursorColor; end; function TPanelColumnsClass.GetColumnInactiveMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveMarkColor else Result := gColors.FilePanel^.InactiveMarkColor; end; function TPanelColumnsClass.GetColumnUseInvertedSelection(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).UseInvertedSelection else Result := gUseInvertedSelection; end; function TPanelColumnsClass.GetColumnUseInactiveSelColor(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).UseInactiveSelColor else Result := gUseInactiveSelColor; end; function TPanelColumnsClass.GetColumnOvercolor(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Overcolor else Result := gAllowOverColor; end; function TPanelColumnsClass.GetColumnBorderFrameWidth(const Index: Integer): integer; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).BorderFrameWidth else Result := gBorderFrameWidth; end; function TPanelColumnsClass.GetColumnPrm(const Index: Integer): TColPrm; begin if Index >= Flist.Count then Exit(nil); Result := TColPrm.Create; Result.FontName := GetColumnFontName(Index); Result.FontSize := GetColumnFontSize(Index); Result.FontStyle := GetColumnFontStyle(Index); Result.TextColor := GetColumnTextColor(Index); Result.Background := GetColumnBackground(Index); Result.Background2 := GetColumnBackground2(Index); Result.MarkColor := GetColumnMarkColor(Index); Result.CursorColor := GetColumnCursorColor(Index); Result.CursorText := GetColumnCursorText(Index); Result.InactiveCursorColor := GetColumnInactiveCursorColor(Index); Result.InactiveMarkColor := GetColumnInactiveMarkColor(Index); Result.UseInvertedSelection:= GetColumnUseInvertedSelection(Index); Result.UseInactiveSelColor:= GetColumnUseInactiveSelColor(Index); Result.Overcolor := GetColumnOvercolor(Index); end; function TPanelColumnsClass.GetColumnsVariants: TDynamicStringArray; var I, J: Integer; begin for J:= 0 to Flist.Count - 1 do begin with TPanelColumn(Flist[J]) do begin if Assigned(FuncList) and (FuncList.Count > 0) then begin for I := 0 to FuncList.Count - 1 do begin // Don't need to compare simple text, only functions. if PtrInt(FuncList.Objects[I]) = 1 then begin if GetFileFunctionByName(FuncList.Strings[I]) = fsfVariant then AddString(Result, FuncList.Strings[I]); end; end; end; end; end; end; function TPanelColumnsClass.GetColumnItem(const Index: Integer): TPanelColumn; begin if Index >= Flist.Count then Exit(nil); Result := TPanelColumn(Flist[Index]); end; function TPanelColumnsClass.GetColumnFunctions(const Index: Integer): TFileFunctions; var FuncCount: Integer = 0; i, J: Integer; Value: TFileFunction; VariantIndex: Integer = 0; begin for J:= 0 to Index do with TPanelColumn(Flist[J]) do begin if Assigned(FuncList) and (FuncList.Count > 0) then begin SetLength(Result, FuncList.Count); // Start with all strings. for i := 0 to FuncList.Count - 1 do begin // Don't need to compare simple text, only functions. if PtrInt(FuncList.Objects[i]) = 1 then begin Value := GetFileFunctionByName(FuncList.Strings[i]); if Value = fsfVariant then begin Value := TFileFunction(Ord(fsfVariant) + VariantIndex); Inc(VariantIndex); end; if (J = Index) then begin Result[FuncCount] := Value; // If the function was found, save it's number. if Result[FuncCount] <> fsfInvalid then FuncCount := FuncCount + 1; end; end; end; SetLength(Result, FuncCount); // Set the actual functions count. end else SetLength(Result, 0); end; end; function TPanelColumnsClass.GetColumnItemResultString(const Index: Integer; const AFile: TFile; const AFileSource: IFileSource): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).GetColumnResultString(AFile, AFileSource); end; function TPanelColumnsClass.GetUseFrameCursor: Boolean; begin if FCustomView then Result := FUseFrameCursor else Result := gUseFrameCursor; end; procedure TPanelColumnsClass.SetUnique(const AValue: String); begin if Length(AValue) > 0 then FUnique:= AValue else begin FUnique:= GetUnique; end; end; function TPanelColumnsClass.GetCursorBorder: boolean; begin if FCustomView then Result := FCursorBorder else Result := gUseCursorBorder; end; function TPanelColumnsClass.GetCursorBorderColor: TColor; begin if FCustomView then Result := FCursorBorderColor else Result := gColors.FilePanel^.CursorBorderColor; end; constructor TPanelColumnsClass.Create; begin FList := TList.Create; end; procedure TPanelColumnsClass.Clear; begin while Flist.Count > 0 do begin TPanelColumn(Flist[0]).Free; FList.Delete(0); end; end; destructor TPanelColumnsClass.Destroy; begin Self.Clear; FreeAndNil(FList); inherited Destroy; end; procedure TPanelColumnsClass.Assign(const OtherColumnsClass: TPanelColumnsClass); var OldColumn, NewColumn: TPanelColumn; i: Integer; begin Clear; if not Assigned(OtherColumnsClass) then Exit; Name := OtherColumnsClass.Name; FUnique := OtherColumnsClass.Unique; FFileSystem := OtherColumnsClass.FFileSystem; FCustomView := OtherColumnsClass.FCustomView; FCursorBorder := OtherColumnsClass.FCursorBorder; FCursorBorderColor := OtherColumnsClass.FCursorBorderColor; FUseFrameCursor := OtherColumnsClass.FUseFrameCursor; for i := 0 to OtherColumnsClass.ColumnsCount - 1 do begin OldColumn := OtherColumnsClass.GetColumnItem(i); NewColumn := TPanelColumn.Create; Add(NewColumn); NewColumn.FUnique := OldColumn.FUnique; NewColumn.Title := OldColumn.Title; NewColumn.FuncString := OldColumn.FuncString; NewColumn.Width := OldColumn.Width; NewColumn.Align := OldColumn.Align; NewColumn.FontName := OldColumn.FontName; NewColumn.FontSize := OldColumn.FontSize; NewColumn.FontStyle := OldColumn.FontStyle; NewColumn.TextColor := OldColumn.TextColor; NewColumn.Background := OldColumn.Background; NewColumn.Background2 := OldColumn.Background2; NewColumn.MarkColor := OldColumn.MarkColor; NewColumn.CursorColor := OldColumn.CursorColor; NewColumn.CursorText := OldColumn.CursorText; NewColumn.InactiveCursorColor := OldColumn.InactiveCursorColor; NewColumn.InactiveMarkColor := OldColumn.InactiveMarkColor; NewColumn.UseInvertedSelection := OldColumn.UseInvertedSelection; NewColumn.UseInactiveSelColor := OldColumn.UseInactiveSelColor; NewColumn.Overcolor := OldColumn.Overcolor; end; end; function TPanelColumnsClass.GetCount: Integer; begin Result := FList.Count; end; function TPanelColumnsClass.Add(Item: TPanelColumn): Integer; begin Result := FList.Add(Item); end; function TPanelColumnsClass.Add(const Title, FuncString: String; const Width: Integer; const Align: TAlignment): Integer; var AColumn: TPanelColumn; begin AColumn := TPanelColumn.CreateNew; Result := FList.Add(AColumn); AColumn.Title := Title; AColumn.FuncString := FuncString; AColumn.Width := Width; AColumn.Align := Align; AColumn.FontName := gFonts[dcfMain].Name; AColumn.FontSize := gFonts[dcfMain].Size; AColumn.FontStyle := gFonts[dcfMain].Style; with gColors.FilePanel^ do begin AColumn.TextColor := ForeColor; AColumn.Background := BackColor; AColumn.Background2 := BackColor2; AColumn.MarkColor := MarkColor; AColumn.CursorColor := CursorColor; AColumn.CursorText := CursorText; AColumn.InactiveCursorColor := InactiveCursorColor; AColumn.InactiveMarkColor := InactiveMarkColor; end; AColumn.UseInvertedSelection := gUseInvertedSelection; AColumn.UseInactiveSelColor := gUseInactiveSelColor; AColumn.Overcolor := gAllowOverColor; end; procedure TPanelColumnsClass.SetColumnTitle(const Index: Integer; Title: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Title := Title; end; procedure TPanelColumnsClass.SetColumnFuncString(const Index: Integer; FuncString: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FuncString := FuncString; end; procedure TPanelColumnsClass.SetColumnWidth(Index, Width: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Width := Width; end; procedure TPanelColumnsClass.SetColumnAlign(const Index: Integer; Align: TAlignment); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Align := Align; end; procedure TPanelColumnsClass.SetColumnFontName(const Index: Integer; Value: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontName := Value; end; procedure TPanelColumnsClass.SetColumnFontSize(const Index: Integer; Value: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontSize := Value; end; procedure TPanelColumnsClass.SetColumnFontStyle(const Index: Integer; Value: TFontStyles); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontStyle := Value; end; procedure TPanelColumnsClass.SetColumnTextColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).TextColor := Value; end; procedure TPanelColumnsClass.SetColumnBackground(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Background := Value; end; procedure TPanelColumnsClass.SetColumnBackground2(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Background2 := Value; end; procedure TPanelColumnsClass.SetColumnMarkColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).MarkColor := Value; end; procedure TPanelColumnsClass.SetColumnCursorColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).CursorColor := Value; end; procedure TPanelColumnsClass.SetColumnCursorText(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).CursorText := Value; end; procedure TPanelColumnsClass.SetColumnInactiveCursorColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).InactiveCursorColor := Value; end; procedure TPanelColumnsClass.SetColumnInactiveMarkColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).InactiveMarkColor := Value; end; procedure TPanelColumnsClass.SetColumnUseInvertedSelection(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).UseInvertedSelection := Value; end; procedure TPanelColumnsClass.SetColumnUseInactiveSelColor(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).UseInactiveSelColor := Value; end; procedure TPanelColumnsClass.SetColumnOvercolor(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Overcolor := Value; end; procedure TPanelColumnsClass.SetColumnPrm(const Index: Integer; Value: TColPrm); begin if Index >= Flist.Count then Exit; SetColumnFontName(Index, Value.FontName); SetColumnFontSize(Index, Value.FontSize); SetColumnFontStyle(Index, Value.FontStyle); SetColumnTextColor(Index, Value.TextColor); SetColumnBackground(Index, Value.Background); SetColumnBackground2(Index, Value.Background2); SetColumnMarkColor(Index, Value.MarkColor); SetColumnCursorColor(Index, Value.CursorColor); SetColumnCursorText(Index, Value.CursorText); SetColumnInactiveCursorColor(Index, Value.InactiveCursorColor); SetColumnInactiveMarkColor(Index, Value.InactiveMarkColor); SetColumnUseInvertedSelection(Index, Value.UseInvertedSelection); SetColumnUseInactiveSelColor(Index, Value.UseInactiveSelColor); SetColumnOvercolor(Index, Value.Overcolor); end; procedure TPanelColumnsClass.AddDefaultColumns; var DCFunc: String; begin fSetName := 'Default'; FFileSystem := FS_GENERAL; DCFunc := '[' + sFuncTypeDC + '().%s{}]'; // file name Add(rsColName, Format(DCFunc, [TFileFunctionStrings[fsfNameNoExtension]]), 250, taLeftJustify); // file ext Add(rsColExt, Format(DCFunc, [TFileFunctionStrings[fsfExtension]]), 50, taLeftJustify); // file size Add(rsColSize, Format(DCFunc, [TFileFunctionStrings[fsfSize]]), 70, taRightJustify); // file date/time Add(rsColDate, Format(DCFunc, [TFileFunctionStrings[fsfModificationTime]]), 140, taRightJustify); // file attributes Add(rsColAttr, Format(DCFunc, [TFileFunctionStrings[fsfAttr]]), 100, taLeftJustify); // Default title hash UpdateDefaultTitleHash; end; procedure TPanelColumnsClass.AddDefaultEverything; begin AddDefaultColumns; Unique := EmptyStr; FCustomView := False; FCursorBorder := gUseCursorBorder; FCursorBorderColor := gColors.FilePanel^.CursorBorderColor; FUseFrameCursor := gUseFrameCursor; end; procedure TPanelColumnsClass.Load(AConfig: TXmlConfig; ANode: TXmlNode); var Title: String; Hash: LongWord; SubNode: TXmlNode; Quality: Integer = 0; AColumn: TPanelColumn; APixelsPerInch: Integer; begin Unique := AConfig.GetValue(ANode, 'Unique', EmptyStr); FCustomView := AConfig.GetValue(ANode, 'CustomView', False); FFileSystem := AConfig.GetValue(ANode, 'FileSystem', FS_GENERAL); APixelsPerInch:= AConfig.GetValue(ANode, 'PixelsPerInch', Screen.PixelsPerInch); FCursorBorder := AConfig.GetAttr(ANode, 'CursorBorder/Enabled', gUseCursorBorder); FUseFrameCursor := AConfig.GetAttr(ANode, 'UseFrameCursor', gUseFrameCursor); if (LoadedConfigVersion < JsonConfigVersion) then begin FCursorBorderColor := TColor(AConfig.GetValue(ANode, 'CursorBorder/Color', gColors.FilePanel^.CursorBorderColor)); end; Clear; SubNode := ANode.FindNode('Columns'); if Assigned(SubNode) then begin SubNode := SubNode.FirstChild; while Assigned(SubNode) do begin if SubNode.CompareName('Column') = 0 then begin AColumn := TPanelColumn.Create; FList.Add(AColumn); AColumn.Title := AConfig.GetValue(SubNode, 'Title', ''); AColumn.Unique := AConfig.GetValue(SubNode, 'Unique', ''); AColumn.FuncString := AConfig.GetValue(SubNode, 'FuncString', ''); AColumn.Width := AConfig.GetValue(SubNode, 'Width', 50); AColumn.Width := MulDiv(AColumn.Width, Screen.PixelsPerInch, APixelsPerInch); AColumn.Align := TAlignment(AConfig.GetValue(SubNode, 'Align', Integer(0))); AConfig.GetFont(SubNode, 'Font', AColumn.FontName, AColumn.FontSize, Integer(AColumn.FontStyle), Quality, gFonts[dcfMain].Name, gFonts[dcfMain].Size, Integer(gFonts[dcfMain].Style), Quality); if (LoadedConfigVersion < JsonConfigVersion) then begin with gColors.FilePanel^ do begin AColumn.TextColor := TColor(AConfig.GetValue(SubNode, 'TextColor', ForeColor)); AColumn.Background := TColor(AConfig.GetValue(SubNode, 'Background', BackColor)); AColumn.Background2 := TColor(AConfig.GetValue(SubNode, 'Background2', BackColor2)); AColumn.MarkColor := TColor(AConfig.GetValue(SubNode, 'MarkColor', MarkColor)); AColumn.CursorColor := TColor(AConfig.GetValue(SubNode, 'CursorColor', CursorColor)); AColumn.CursorText := TColor(AConfig.GetValue(SubNode, 'CursorText', CursorText)); AColumn.InactiveCursorColor := TColor(AConfig.GetValue(SubNode, 'InactiveCursorColor', InactiveCursorColor)); AColumn.InactiveMarkColor := TColor(AConfig.GetValue(SubNode, 'InactiveMarkColor', InactiveMarkColor)); end; end; AColumn.UseInvertedSelection := AConfig.GetValue(SubNode, 'UseInvertedSelection', gUseInvertedSelection); AColumn.UseInactiveSelColor := AConfig.GetValue(SubNode, 'UseInactiveSelColor', gUseInactiveSelColor); AColumn.Overcolor := AConfig.GetValue(SubNode, 'Overcolor', True); end; SubNode := SubNode.NextSibling; end; end; if Count = 0 then AddDefaultColumns else begin Title:= EmptyStr; for Quality:= 0 to Count - 1 do begin Title += TPanelColumn(Flist[Quality]).Title; end; Hash:= CRC32(0, nil, 0); Hash:= CRC32(Hash, Pointer(Title), Length(Title)); if Hash = DefaultTitleHash then begin SetColumnTitle(0, rsColName); SetColumnTitle(1, rsColExt); SetColumnTitle(2, rsColSize); SetColumnTitle(3, rsColDate); SetColumnTitle(4, rsColAttr); // Default title hash UpdateDefaultTitleHash; end; end; end; procedure TPanelColumnsClass.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; AColumn: TPanelColumn; begin AConfig.SetValue(ANode, 'Unique', Unique); AConfig.SetValue(ANode, 'CustomView', FCustomView); AConfig.SetValue(ANode, 'FileSystem', FFileSystem); AConfig.SetValue(ANode, 'PixelsPerInch', Screen.PixelsPerInch); AConfig.SetAttr(ANode, 'CursorBorder/Enabled', FCursorBorder); AConfig.SetAttr(ANode, 'UseFrameCursor', FUseFrameCursor); ANode := AConfig.FindNode(ANode, 'Columns', True); AConfig.ClearNode(ANode); for I := 0 to FList.Count - 1 do begin AColumn := TPanelColumn(FList[I]); SubNode := AConfig.AddNode(ANode, 'Column'); AConfig.AddValue(SubNode, 'Title', AColumn.Title); AConfig.AddValue(SubNode, 'Unique', AColumn.Unique); AConfig.AddValue(SubNode, 'FuncString', AColumn.FuncString); AConfig.AddValue(SubNode, 'Width', AColumn.Width); AConfig.AddValue(SubNode, 'Align', Integer(AColumn.Align)); AConfig.SetFont(SubNode, 'Font', AColumn.FontName, AColumn.FontSize, Integer(AColumn.FontStyle), 0); AConfig.AddValue(SubNode, 'UseInvertedSelection', AColumn.UseInvertedSelection); AConfig.AddValue(SubNode, 'UseInactiveSelColor', AColumn.UseInactiveSelColor); AConfig.AddValue(SubNode, 'Overcolor', AColumn.Overcolor); end; end; procedure TPanelColumnsClass.LoadColors(ANode: TJSONObject); var I, J: Integer; AName: String; AList: TJSONArray; AItem: TJSONObject; AColumn: TPanelColumn; begin FCursorBorderColor:= ANode.Get('CursorBorderColor', gColors.FilePanel^.CursorBorderColor); if ANode.Find('Columns', AList) then begin for I:= 0 to Count - 1 do begin AColumn:= GetColumnItem(I); for J:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[J]; AName:= AItem.Get('Unique', EmptyStr); if AColumn.FUnique = AName then begin with gColors.FilePanel^ do begin AColumn.TextColor := AItem.Get('TextColor', ForeColor); AColumn.Background := AItem.Get('Background', BackColor); AColumn.Background2 := AItem.Get('Background2', BackColor2); AColumn.MarkColor := AItem.Get('MarkColor', MarkColor); AColumn.CursorColor := AItem.Get('CursorColor', CursorColor); AColumn.CursorText := AItem.Get('CursorText', CursorText); AColumn.InactiveCursorColor := AItem.Get('InactiveCursorColor', InactiveCursorColor); AColumn.InactiveMarkColor := AItem.Get('InactiveMarkColor', InactiveMarkColor); end; Break; end; end; end; end; end; procedure TPanelColumnsClass.AddColumn(AList: TJSONArray; AColumn: TPanelColumn); var AItem: TJSONObject; begin AItem:= TJSONObject.Create; AItem.Add('Unique', AColumn.Unique); AItem.Add('Title', AColumn.Title); AItem.Add('TextColor', AColumn.TextColor); AItem.Add('Background', AColumn.Background); AItem.Add('Background2', AColumn.Background2); AItem.Add('MarkColor', AColumn.MarkColor); AItem.Add('CursorColor', AColumn.CursorColor); AItem.Add('CursorText', AColumn.CursorText); AItem.Add('InactiveCursorColor', AColumn.InactiveCursorColor); AItem.Add('InactiveMarkColor', AColumn.InactiveMarkColor); AList.Add(AItem); end; procedure TPanelColumnsClass.SaveColors(ANode: TJSONObject); var I: Integer; AList: TJSONArray; begin ANode.Add('Unique', Unique); ANode.Add('Name', Name); ANode.Add('CursorBorderColor', FCursorBorderColor); if ANode.Find('Columns', AList) then AList.Clear else begin AList:= TJSONArray.Create; ANode.Add('Columns', AList); end; for I := 0 to FList.Count - 1 do begin AddColumn(AList, TPanelColumn(FList[I])); end; end; procedure TPanelColumnsClass.Synchronize(ANode: TJSONObject); var I, J: Integer; AName: String; Found: Boolean; AList: TJSONArray; AItem: TJSONObject; AColumn: TPanelColumn; begin ANode.Strings['Name']:= Name; if ANode.Find('Columns', AList) then begin // Insert for I:= 0 to Count - 1 do begin Found:= False; AColumn:= GetColumnItem(I); for J:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[J]; AName:= AItem.Get('Unique', EmptyStr); if AColumn.FUnique = AName then begin Found:= True; Break; end; end; if not Found then begin AddColumn(AList, AColumn); end; end; // Delete for I:= AList.Count - 1 downto 0 do begin Found:= False; AItem:= AList.Objects[I]; AName:= AItem.Get('Unique', EmptyStr); for J:= 0 to Count - 1 do begin AColumn:= GetColumnItem(J); if AColumn.FUnique = AName then begin Found:= True; Break; end; end; if not Found then begin AList.Delete(I); end; end; end; end; procedure TPanelColumnsClass.Delete(const Index: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Free; FList.Delete(Index); end; procedure TPanelColumnsClass.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; function TPanelColumnsClass.GetSignature(Seed:dword=$000000):dword; procedure ProgressSignatureWithThisString(sSomething:string); begin if length(sSomething) > 0 then Result := crc32(Result, @sSomething[1], length(sSomething)); end; var iPanelColumnIndex: integer; iFunction: integer; begin result:=Seed; for iPanelColumnIndex := 0 to pred(Count) do begin with TPanelColumn(Flist[iPanelColumnIndex]) do begin ProgressSignatureWithThisString(Title); for iFunction:=0 to pred(FuncList.Count) do ProgressSignatureWithThisString(FuncList.Strings[iFunction]); Result := crc32(Result, @Width, sizeof(Width)); Result := crc32(Result, @Align, sizeof(Align)); if FCustomView then begin ProgressSignatureWithThisString(FontName); Result := crc32(Result, @FontSize, sizeof(FontSize)); Result := crc32(Result, @FontStyle, sizeof(FontStyle)); Result := crc32(Result, @TextColor, sizeof(TextColor)); Result := crc32(Result, @Background, sizeof(Background)); Result := crc32(Result, @Background2, sizeof(Background2)); Result := crc32(Result, @MarkColor, sizeof(MarkColor)); Result := crc32(Result, @CursorColor, sizeof(CursorColor)); Result := crc32(Result, @CursorText, sizeof(CursorText)); Result := crc32(Result, @InactiveCursorColor, sizeof(InactiveCursorColor)); Result := crc32(Result, @InactiveMarkColor, sizeof(InactiveMarkColor)); Result := crc32(Result, @UseInvertedSelection, sizeof(UseInvertedSelection)); Result := crc32(Result, @UseInactiveSelColor, sizeof(UseInactiveSelColor)); Result := crc32(Result, @Overcolor, sizeof(Overcolor)); end; end; end; ProgressSignatureWithThisString(fSetName); Result := crc32(Result, @FCustomView, sizeof(FCustomView)); Result := crc32(Result, @FCursorBorder, sizeof(FCursorBorder)); Result := crc32(Result, @FCursorBorderColor, sizeof(FCursorBorderColor)); Result := crc32(Result, @FUseFrameCursor, sizeof(FUseFrameCursor)); end; { TPanelColumn } constructor TPanelColumn.Create; begin FuncList := TStringList.Create; end; constructor TPanelColumn.CreateNew; begin Create; FUnique:= GetUnique; end; destructor TPanelColumn.Destroy; begin FreeAndNil(FuncList); inherited Destroy; end; function TPanelColumn.GetColumnResultString(AFile: TFile; const AFileSource: IFileSource): String; var i: Integer; s: String; begin s := ''; Result := ''; if (not Assigned(FuncList)) or (FuncList.Count = 0) then Exit; for i := 0 to FuncList.Count - 1 do begin //Item is simpletext if PtrInt(FuncList.Objects[i]) = 0 then s := s + FuncList[I] else //Item is function begin s := s + FormatFileFunction(FuncList[I], AFile, AFileSource); end; end; Result := s; end; procedure TPanelColumn.SetUnique(const AValue: String); begin if Length(AValue) > 0 then FUnique:= AValue else begin FUnique:= GetUnique; end; end; procedure TPanelColumn.SetFuncString(NewValue: String); procedure FillListFromString(List: TStrings; FuncS: String); var p: Integer; begin while True do begin p := pos('[', FuncS); if p = 0 then Break else if p > 1 then List.AddObject(Copy(FuncS, 1, p - 1), TObject(0)); Delete(FuncS, 1, p); p := pos(']', FuncS); if p = 0 then Break else if p > 1 then List.AddObject(Copy(FuncS, 1, p - 1), TObject(1)); Delete(FuncS, 1, p); end; if FuncS <> '' then List.AddObject(FuncS, TObject(0)); end; begin FuncList.Clear; FFuncString := NewValue; FillListFromString(FuncList, NewValue); end; { TPanelColumnsList } function TPanelColumnsList.GetCount: Integer; begin Result := fSet.Count; end; procedure TPanelColumnsList.Synchronize(Item: TPanelColumnsClass); var AName: String; Index: Integer; Found: Boolean; AList: TJSONArray; AItem: TJSONObject; procedure AddItem; begin AItem:= TJSONObject.Create; Item.SaveColors(AItem); AList.Add(AItem); end; begin // Current style Found:= False; AName:= Item.Unique; AList:= FStyles[FStyle]; for Index:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[Index]; if AName = AItem.Get('Unique', EmptyStr) then begin AItem.Clear; Found:= True; Item.SaveColors(AItem); Break; end; end; if not Found then AddItem; // Second style AList:= FStyles[Abs(FStyle - 1)]; for Index:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[Index]; if AName = AItem.Get('Unique', EmptyStr) then begin Item.Synchronize(AItem); Exit; end; end; AddItem; end; constructor TPanelColumnsList.Create; var Index: Integer; begin FSet:= TStringList.Create; FStyle:= TColorThemes.StyleIndex; for Index:= 0 to High(FStyles) do begin FStyles[Index]:= TJSONArray.Create; end; end; destructor TPanelColumnsList.Destroy; var Index: Integer; begin if Assigned(FSet) then begin for Index := 0 to Fset.Count - 1 do begin FSet.Objects[Index].Free; end; FreeAndNil(FSet); end; for Index:= 0 to High(FStyles) do begin FStyles[Index].Free; end; inherited Destroy; end; procedure TPanelColumnsList.Clear; var Index: Integer; begin for Index := 0 to Fset.Count - 1 do begin FSet.Objects[Index].Free; end; FSet.Clear; end; procedure TPanelColumnsList.UpdateStyle; var ANewStyle: Integer; begin ANewStyle:= TColorThemes.StyleIndex; if FStyle <> ANewStyle then begin SaveColors; FStyle:= ANewStyle; LoadColors; end; end; procedure TPanelColumnsList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName: String; AnObject: TPanelColumnsClass; begin Clear; LoadedConfigVersion := AConfig.GetAttr(AConfig.RootNode, 'ConfigVersion', ConfigVersion); ANode := ANode.FindNode('ColumnsSets'); if Assigned(ANode) then begin DefaultTitleHash := AConfig.GetAttr(ANode, 'DefaultTitleHash', Int64(0)); ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('ColumnsSet') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) then begin AnObject := TPanelColumnsClass.Create; fSet.AddObject(AName, AnObject); AnObject.Name := AName; AnObject.Load(AConfig, ANode); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; if (LoadedConfigVersion < JsonConfigVersion) then begin SaveColors; FStyles[Abs(FStyle - 1)].Free; FStyles[Abs(FStyle - 1)]:= FStyles[FStyle].Clone as TJSONArray; end; end; procedure TPanelColumnsList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'ColumnsSets', True); AConfig.ClearNode(ANode); AConfig.SetAttr(ANode, 'DefaultTitleHash', Int64(DefaultTitleHash)); for I := 0 to FSet.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'ColumnsSet'); AConfig.AddValue(SubNode, 'Name', FSet[I]); TPanelColumnsClass(Fset.Objects[I]).Save(AConfig, SubNode); end; end; procedure TPanelColumnsList.LoadColors; var I, J: Integer; AList: TJSONArray; AItem: TJSONObject; AColSet: TPanelColumnsClass; begin AList:= FStyles[FStyle]; for I := 0 to FSet.Count - 1 do begin AColSet:= GetColumnSet(I); for J:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[J]; if AColSet.FUnique = AItem.Get('Unique', EmptyStr) then begin AColSet.LoadColors(AItem); Break; end; end; end; end; procedure TPanelColumnsList.SaveColors; var Index: Integer; AList: TJSONArray; AItem: TJSONObject; AColSet: TPanelColumnsClass; begin AList:= FStyles[FStyle]; AList.Clear; for Index := 0 to FSet.Count - 1 do begin AColSet:= GetColumnSet(Index); AItem:= TJSONObject.Create; AColSet.SaveColors(AItem); AList.Add(AItem); end; end; procedure TPanelColumnsList.LoadColors(AConfig: TJSONObject); var AName: String; I, J: Integer; Style: TJSONArray; Theme: TJSONObject; Themes: TJSONArray; begin if AConfig.Find('Styles', Themes) then begin for I:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[I]; AName:= Theme.Get('Name', EmptyStr); for J:= 0 to High(THEME_NAME) do begin if (AName = THEME_NAME[J]) then begin if Theme.Find('ColumnSets', Style) then begin FStyles[J].Free; FStyles[J]:= Style.Clone as TJSONArray; end; Break; end; end; end; LoadColors; end; end; procedure TPanelColumnsList.SaveColors(AConfig: TJSONObject); var AName: String; I, J: Integer; Theme: TJSONObject; Themes: TJSONArray; begin SaveColors; if AConfig.Find('Styles', Themes) then begin for I:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[I]; AName:= Theme.Get('Name', EmptyStr); for J:= 0 to High(THEME_NAME) do begin if (AName = THEME_NAME[J]) then begin Theme.Arrays['ColumnSets']:= FStyles[J].Clone as TJSONArray; Break; end; end; end; end; end; function TPanelColumnsList.Add(Item: TPanelColumnsClass): Integer; begin Result := Fset.AddObject(Item.Name, Item); Synchronize(Item); end; procedure TPanelColumnsList.Insert(AIndex: Integer; Item: TPanelColumnsClass); begin Fset.InsertObject(AIndex, Item.Name, Item); Synchronize(Item); end; procedure TPanelColumnsList.DeleteColumnSet(SetName: String); begin DeleteColumnSet(fSet.IndexOf(SetName)); end; procedure TPanelColumnsList.DeleteColumnSet(SetIndex: Integer); begin if (SetIndex >= Fset.Count) or (SetIndex < 0) then Exit; TPanelColumnsClass(fSet.Objects[SetIndex]).Free; fSet.Delete(SetIndex); end; procedure TPanelColumnsList.CopyColumnSet(SetName, NewSetName: String); var OldSetIndex, NewSetIndex: Integer; OldSet, NewSet: TPanelColumnsClass; begin OldSetIndex := fSet.IndexOf(SetName); if OldSetIndex <> -1 then begin OldSet := TPanelColumnsClass(fSet.Objects[OldSetIndex]); NewSetIndex := fSet.IndexOf(NewSetName); if NewSetIndex <> -1 then NewSet := TPanelColumnsClass(fSet.Objects[NewSetIndex]) else begin NewSet := TPanelColumnsClass.Create; fSet.AddObject(NewSetName, NewSet); end; NewSet.Assign(OldSet); // Set new name. NewSet.Name := NewSetName; end; end; function TPanelColumnsList.GetColumnSet(const Index: Integer): TPanelColumnsClass; begin //DCDebug('FsetCount='+inttostr(fset.Count)); if (Index > -1) and (Index < Fset.Count) then Result := TPanelColumnsClass(Fset.Objects[Index]) else begin if fset.Count = 0 then begin Result:= TPanelColumnsClass.Create; Result.AddDefaultEverything; Add(Result); end; Result := TPanelColumnsClass(Fset.Objects[0]); end; end; function TPanelColumnsList.GetColumnSet(Setname: String): TPanelColumnsClass; begin Result:= GetColumnSet(FSet.IndexOf(Setname)); end; function TPanelColumnsList.GetColumnSet(const AName, FileSystem: String): TPanelColumnsClass; var Index: Integer; begin if (FileSystem = EmptyStr) or SameText(FileSystem, FS_GENERAL) then Result:= GetColumnSet(AName) else begin for Index:= 0 to Fset.Count - 1 do begin if SameText(AName, fset[Index]) and SameText(FileSystem, TPanelColumnsClass(Fset.Objects[Index]).FileSystem) then begin Exit(TPanelColumnsClass(Fset.Objects[Index])); end; end; Result:= nil; end; end; { TColPrm } constructor TColPrm.Create; begin Self.FontName := gFonts[dcfMain].Name; Self.FontSize := gFonts[dcfMain].Size; Self.FontStyle := gFonts[dcfMain].Style; with gColors.FilePanel^ do begin Self.TextColor := ForeColor; Self.Background := BackColor; Self.Background2 := BackColor2; Self.MarkColor := MarkColor; Self.CursorColor := CursorColor; Self.CursorText := CursorText; Self.InactiveCursorColor := InactiveCursorColor; Self.InactiveMarkColor := InactiveMarkColor; end; Self.UseInvertedSelection:= gUseInvertedSelection; Self.UseInactiveSelColor:= gUseInactiveSelColor; Self.Overcolor := gAllowOverColor; end; end. doublecmd-1.1.30/src/ucolors.pas0000644000175000001440000005212615104114162015555 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Color themes unit Copyright (C) 2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, fpjson, DCXmlConfig; const THEME_COUNT = 2; DARK_THEME = 'Dark'; LIGHT_THEME = 'Light'; THEME_NAME: array[0..Pred(THEME_COUNT)] of String = (LIGHT_THEME, DARK_THEME); type TFilePanelColors = record CursorBorderColor: TColor; ForeColor, BackColor, BackColor2, MarkColor, CursorColor, CursorText, GridLine, InactiveCursorColor, InactiveMarkColor: TColor; end; PFilePanelColors = ^TFilePanelColors; TFreeSpaceIndColors = record ForeColor, BackColor, ThresholdForeColor: TColor; end; PFreeSpaceIndColors = ^TFreeSpaceIndColors; TPathColors = record ActiveColor, ActiveFontColor, InactiveColor, InactiveFontColor: TColor; end; PPathColors = ^TPathColors; TLogColors = record InfoColor, ErrorColor, SuccessColor: TColor; end; PLogColors = ^TLogColors; TSyncDirsColors = record LeftColor, RightColor, UnknownColor: TColor; end; PSyncDirsColors = ^TSyncDirsColors; TViewerColors = record ImageBackColor1, ImageBackColor2: TColor; BookBackgroundColor, BookFontColor: TColor; end; PViewerColors = ^TViewerColors; TDifferColors = record AddedColor: TColor; DeletedColor: TColor; ModifiedColor: TColor; ModifiedBinaryColor: TColor; end; PDifferColors = ^TDifferColors; TTreeViewMenuColors = record BackgroundColor: TColor; ShortcutColor: TColor; NormalTextColor: TColor; SecondaryTextColor: TColor; FoundTextColor: TColor; UnselectableTextColor: TColor; CursorColor: TColor; ShortcutUnderCursor: TColor; NormalTextUnderCursor: TColor; SecondaryTextUnderCursor: TColor; FoundTextUnderCursor: TColor; UnselectableUnderCursor: TColor; end; PTreeViewMenuColors = ^TTreeViewMenuColors; { TColorTheme } TColorTheme = class public Log: TLogColors; Path: TPathColors; Viewer: TViewerColors; Differ: TDifferColors; SyncDirs: TSyncDirsColors; FilePanel: TFilePanelColors; FreeSpaceInd: TFreeSpaceIndColors; TreeViewMenu: TTreeViewMenuColors; public procedure Assign(ATheme: TColorTheme); end; { TColorThemes } TColorThemes = class private FColors: array[0..Pred(THEME_COUNT)] of TColorTheme; private procedure CreateDefault; public function Log: PLogColors; function Path: PPathColors; function Differ: PDifferColors; function Viewer: PViewerColors; function SyncDirs: PSyncDirsColors; function FilePanel: PFilePanelColors; function FreeSpaceInd: PFreeSpaceIndColors; function TreeViewMenu: PTreeViewMenuColors; public constructor Create; destructor Destroy; override; function Current: TColorTheme; class function StyleIndex: Integer; procedure LoadFromXml(AConfig: TXmlConfig); procedure Save(AConfig: TJSONObject); procedure Load(AConfig: TJSONObject); function GetTheme(const AName: String): TColorTheme; end; implementation uses DCClassesUtf8, uSynDiffControls, uOSForms, uGlobs; { TColorTheme } procedure TColorTheme.Assign(ATheme: TColorTheme); begin Log:= ATheme.Log; Path:= ATheme.Path; Differ:= ATheme.Differ; Viewer:= ATheme.Viewer; SyncDirs:= ATheme.SyncDirs; FilePanel:= ATheme.FilePanel; FreeSpaceInd:= ATheme.FreeSpaceInd; TreeViewMenu:= ATheme.TreeViewMenu; end; { TColorThemes } function TColorThemes.Log: PLogColors; begin Result:= @Current.Log; end; function TColorThemes.Path: PPathColors; begin Result:= @Current.Path; end; function TColorThemes.Differ: PDifferColors; begin Result:= @Current.Differ; end; function TColorThemes.Viewer: PViewerColors; begin Result:= @Current.Viewer; end; function TColorThemes.SyncDirs: PSyncDirsColors; begin Result:= @Current.SyncDirs; end; function TColorThemes.FilePanel: PFilePanelColors; begin Result:= @Current.FilePanel; end; function TColorThemes.FreeSpaceInd: PFreeSpaceIndColors; begin Result:= @Current.FreeSpaceInd; end; function TColorThemes.TreeViewMenu: PTreeViewMenuColors; begin Result:= @Current.TreeViewMenu; end; constructor TColorThemes.Create; begin CreateDefault; end; destructor TColorThemes.Destroy; begin FColors[0].Free; FColors[1].Free; inherited Destroy; end; class function TColorThemes.StyleIndex: Integer; begin if DarkStyle then Result:= 1 else begin Result:= 0; end; end; procedure TColorThemes.CreateDefault; begin // Light theme FColors[0]:= TColorTheme.Create; with FColors[0].FilePanel do begin CursorBorderColor := clHighlight; ForeColor := clWindowText; BackColor := clWindow; BackColor2 := clWindow; MarkColor := clRed; CursorColor := clHighlight; CursorText := clHighlightText; GridLine := clSilver; InactiveCursorColor := clInactiveCaption; InactiveMarkColor := clMaroon; end; with FColors[0].Path do begin ActiveColor := clHighlight; ActiveFontColor := clHighlightText; InactiveColor := clBtnFace; InactiveFontColor := clBtnText; end; with FColors[0].FreeSpaceInd do begin ForeColor := clBlack; BackColor := clWhite; ThresholdForeColor := clRed; end; with FColors[0].Log do begin InfoColor:= clNavy; ErrorColor:= clRed; SuccessColor:= clGreen; end; with FColors[0].SyncDirs do begin LeftColor:= clGreen; RightColor:= clBlue; UnknownColor:= clRed; end; with FColors[0].Viewer do begin ImageBackColor1 := clWindow; ImageBackColor2 := clDefault; BookBackgroundColor := clBlack; BookFontColor := clWhite; end; with FColors[0].Differ do begin AddedColor := clPaleGreen; DeletedColor := clPaleRed; ModifiedColor := clPaleBlue; ModifiedBinaryColor := clRed; end; with FColors[0].TreeViewMenu do begin BackgroundColor := clForm; ShortcutColor := clRed; NormalTextColor := clWindowText; SecondaryTextColor := clWindowFrame; FoundTextColor := clHighLight; UnselectableTextColor := clGrayText; CursorColor := clHighlight; ShortcutUnderCursor := clHighlightText; NormalTextUnderCursor := clHighlightText; SecondaryTextUnderCursor := clBtnHighlight; FoundTextUnderCursor := clYellow; UnselectableUnderCursor := clGrayText; end; // Dark theme FColors[1]:= TColorTheme.Create; FColors[1].Assign(FColors[0]); with FColors[1].FilePanel do begin GridLine:= $484848; end; with FColors[1].Log do begin InfoColor:= $C09B61; ErrorColor:= $6166C0; SuccessColor:= $8AD277; end; with FColors[1].Differ do begin AddedColor:= $8AD277; DeletedColor:= $6166C0; ModifiedColor:= $C09B61; ModifiedBinaryColor:= $6166C0; end; with FColors[1].SyncDirs do begin LeftColor:= $8AD277; RightColor:= $C09B61; UnknownColor:= $6166C0; end; end; procedure TColorThemes.LoadFromXml(AConfig: TXmlConfig); var Root, Node: TXmlNode; ColorTheme: TColorTheme; LoadedConfigVersion: Integer; begin with AConfig do begin Root := RootNode; LoadedConfigVersion := GetAttr(Root, 'ConfigVersion', ConfigVersion); if (LoadedConfigVersion >= 14) then Exit; ColorTheme:= Current; { Colors } Node := Root.FindNode('Colors'); if Assigned(Node) then begin with ColorTheme.FilePanel do begin CursorBorderColor:= GetValue(Node, 'CursorBorderColor', CursorBorderColor); ForeColor:= GetValue(Node, 'Foreground', ForeColor); BackColor:= GetValue(Node, 'Background', BackColor); BackColor2:= GetValue(Node, 'Background2', BackColor2); MarkColor:= GetValue(Node, 'Mark', MarkColor); CursorColor:= GetValue(Node, 'Cursor', CursorColor); CursorText:= GetValue(Node, 'CursorText', CursorText); InactiveCursorColor:= GetValue(Node, 'InactiveCursor', InactiveCursorColor); InactiveMarkColor:= GetValue(Node, 'InactiveMark', InactiveMarkColor); end; with ColorTheme.Path do begin ActiveColor := GetValue(Node, 'PathLabel/ActiveColor', ActiveColor); ActiveFontColor := GetValue(Node, 'PathLabel/ActiveFontColor', ActiveFontColor); InactiveColor := GetValue(Node, 'PathLabel/InactiveColor', InactiveColor); InactiveFontColor := GetValue(Node, 'PathLabel/InactiveFontColor', InactiveFontColor); end; with ColorTheme.FreeSpaceInd do begin ForeColor := GetValue(Node, 'FreeSpaceIndicator/ForeColor', ForeColor); BackColor := GetValue(Node, 'FreeSpaceIndicator/BackColor', BackColor); ThresholdForeColor := GetValue(Node, 'FreeSpaceIndicator/ThresholdForeColor', ThresholdForeColor); end; with ColorTheme.Log do begin InfoColor:= GetValue(Node, 'LogWindow/Info', InfoColor); ErrorColor:= GetValue(Node, 'LogWindow/Error', ErrorColor); SuccessColor:= GetValue(Node, 'LogWindow/Success', SuccessColor); end; end; { Differ } Node:= Root.FindNode('Differ/Colors'); if Assigned(Node) then begin with ColorTheme.Differ do begin AddedColor := GetValue(Node, 'Added', AddedColor); DeletedColor := GetValue(Node, 'Deleted', DeletedColor); ModifiedColor := GetValue(Node, 'Modified', ModifiedColor); Node := FindNode(Node, 'Colors/Binary'); if Assigned(Node) then begin ModifiedBinaryColor := GetValue(Node, 'Modified', ModifiedBinaryColor); end; end; end; { Viewer } Node := Root.FindNode('Viewer'); if Assigned(Node) then begin with ColorTheme.Viewer do begin ImageBackColor1:= GetValue(Node, 'ImageBackColor1', ImageBackColor1); ImageBackColor2:= GetValue(Node, 'ImageBackColor2', ImageBackColor2); BookBackgroundColor := GetValue(Node, 'BackgroundColor', BookBackgroundColor); BookFontColor := GetValue(Node, 'FontColor', BookFontColor); end; end; { Tree View Menu } Node := Root.FindNode('TreeViewMenu'); if Assigned(Node) then begin with ColorTheme.TreeViewMenu do begin BackgroundColor := GetValue(Node, 'BackgroundColor', BackgroundColor); ShortcutColor := GetValue(Node, 'ShortcutColor', ShortcutColor); NormalTextColor := GetValue(Node, 'NormalTextColor', NormalTextColor); SecondaryTextColor := GetValue(Node, 'SecondaryTextColor', SecondaryTextColor); FoundTextColor := GetValue(Node, 'FoundTextColor', FoundTextColor); UnselectableTextColor := GetValue(Node, 'UnselectableTextColor', UnselectableTextColor); CursorColor := GetValue(Node, 'CursorColor', CursorColor); ShortcutUnderCursor := GetValue(Node, 'ShortcutUnderCursor', ShortcutUnderCursor); NormalTextUnderCursor := GetValue(Node, 'NormalTextUnderCursor', NormalTextUnderCursor); SecondaryTextUnderCursor := GetValue(Node, 'SecondaryTextUnderCursor', SecondaryTextUnderCursor); FoundTextUnderCursor := GetValue(Node, 'FoundTextUnderCursor', FoundTextUnderCursor); UnselectableUnderCursor := GetValue(Node, 'UnselectableUnderCursor', UnselectableUnderCursor); end; end; end; end; procedure TColorThemes.Save(AConfig: TJSONObject); var Index: Integer; Theme: TJSONObject; Themes: TJSONArray; Group: TJSONObject; ColorTheme: TColorTheme; begin if AConfig.Find('Styles', Themes) then Themes.Clear else begin Themes:= TJSONArray.Create; AConfig.Add('Styles', Themes); end; for Index:= 0 to High(FColors) do begin ColorTheme:= FColors[Index]; Theme:= TJSONObject.Create; Themes.Add(Theme); Theme.Add('Name', THEME_NAME[Index]); Group:= TJSONObject.Create; Theme.Add('FilePanel', Group); Group.Add('CursorBorderColor', ColorTheme.FilePanel.CursorBorderColor); Group.Add('ForeColor', ColorTheme.FilePanel.ForeColor); Group.Add('BackColor', ColorTheme.FilePanel.BackColor); Group.Add('BackColor2', ColorTheme.FilePanel.BackColor2); Group.Add('MarkColor', ColorTheme.FilePanel.MarkColor); Group.Add('CursorColor', ColorTheme.FilePanel.CursorColor); Group.Add('CursorText', ColorTheme.FilePanel.CursorText); Group.Add('GridLine', ColorTheme.FilePanel.GridLine); Group.Add('InactiveCursorColor', ColorTheme.FilePanel.InactiveCursorColor); Group.Add('InactiveMarkColor', ColorTheme.FilePanel.InactiveMarkColor); Group:= TJSONObject.Create; Theme.Add('FreeSpaceIndicator', Group); Group.Add('ForeColor', ColorTheme.FreeSpaceInd.ForeColor); Group.Add('BackColor', ColorTheme.FreeSpaceInd.BackColor); Group.Add('ThresholdForeColor', ColorTheme.FreeSpaceInd.ThresholdForeColor); Group:= TJSONObject.Create; Theme.Add('Path', Group); Group.Add('ActiveColor', ColorTheme.Path.ActiveColor); Group.Add('ActiveFontColor', ColorTheme.Path.ActiveFontColor); Group.Add('InactiveColor', ColorTheme.Path.InactiveColor); Group.Add('InactiveFontColor', ColorTheme.Path.InactiveFontColor); Group:= TJSONObject.Create; Theme.Add('Log', Group); Group.Add('InfoColor', ColorTheme.Log.InfoColor); Group.Add('ErrorColor', ColorTheme.Log.ErrorColor); Group.Add('SuccessColor', ColorTheme.Log.SuccessColor); Group:= TJSONObject.Create; Theme.Add('SyncDirs', Group); Group.Add('LeftColor', ColorTheme.SyncDirs.LeftColor); Group.Add('RightColor', ColorTheme.SyncDirs.RightColor); Group.Add('UnknownColor', ColorTheme.SyncDirs.UnknownColor); Group:= TJSONObject.Create; Theme.Add('Viewer', Group); Group.Add('ImageBackColor1', ColorTheme.Viewer.ImageBackColor1); Group.Add('ImageBackColor2', ColorTheme.Viewer.ImageBackColor2); Group.Add('BookBackgroundColor', ColorTheme.Viewer.BookBackgroundColor); Group.Add('BookFontColor', ColorTheme.Viewer.BookFontColor); Group:= TJSONObject.Create; Theme.Add('Differ', Group); Group.Add('AddedColor', ColorTheme.Differ.AddedColor); Group.Add('DeletedColor', ColorTheme.Differ.DeletedColor); Group.Add('ModifiedColor', ColorTheme.Differ.ModifiedColor); Group.Add('ModifiedBinaryColor', ColorTheme.Differ.ModifiedBinaryColor); Group:= TJSONObject.Create; Theme.Add('TreeViewMenu', Group); Group.Add('BackgroundColor', ColorTheme.TreeViewMenu.BackgroundColor); Group.Add('ShortcutColor', ColorTheme.TreeViewMenu.ShortcutColor); Group.Add('NormalTextColor', ColorTheme.TreeViewMenu.NormalTextColor); Group.Add('SecondaryTextColor', ColorTheme.TreeViewMenu.SecondaryTextColor); Group.Add('FoundTextColor', ColorTheme.TreeViewMenu.FoundTextColor); Group.Add('UnselectableTextColor', ColorTheme.TreeViewMenu.UnselectableTextColor); Group.Add('CursorColor', ColorTheme.TreeViewMenu.CursorColor); Group.Add('ShortcutUnderCursor', ColorTheme.TreeViewMenu.ShortcutUnderCursor); Group.Add('NormalTextUnderCursor', ColorTheme.TreeViewMenu.NormalTextUnderCursor); Group.Add('SecondaryTextUnderCursor', ColorTheme.TreeViewMenu.SecondaryTextUnderCursor); Group.Add('FoundTextUnderCursor', ColorTheme.TreeViewMenu.FoundTextUnderCursor); Group.Add('UnselectableUnderCursor', ColorTheme.TreeViewMenu.UnselectableUnderCursor); end; end; procedure TColorThemes.Load(AConfig: TJSONObject); var AName: String; Index: Integer; Theme: TJSONObject; Themes: TJSONArray; Group: TJSONObject; Empty: TJSONObject; ColorTheme: TColorTheme; begin Themes:= AConfig.Get('Styles', TJSONArray(nil)); if Assigned(Themes) then try Empty:= TJSONObject.Create; for Index:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[Index]; AName:= Theme.Get('Name', EmptyStr); ColorTheme:= GetTheme(AName); if (ColorTheme = nil) then Continue; Group:= Theme.Get('FilePanel', Empty); with ColorTheme.FilePanel do begin CursorBorderColor:= Group.Get('CursorBorderColor', CursorBorderColor); ForeColor:= Group.Get('ForeColor', ForeColor); BackColor:= Group.Get('BackColor', BackColor); BackColor2:= Group.Get('BackColor2', BackColor2); MarkColor:= Group.Get('MarkColor', MarkColor); CursorColor:= Group.Get('CursorColor', CursorColor); CursorText:= Group.Get('CursorText', CursorText); GridLine:= Group.Get('GridLine', GridLine); InactiveCursorColor:= Group.Get('InactiveCursorColor', InactiveCursorColor); InactiveMarkColor:= Group.Get('InactiveMarkColor', InactiveMarkColor); end; Group:= Theme.Get('FreeSpaceIndicator', Empty); with ColorTheme.FreeSpaceInd do begin ForeColor:= Group.Get('ForeColor', ForeColor); BackColor:= Group.Get('BackColor', BackColor); ThresholdForeColor:= Group.Get('ThresholdForeColor', ThresholdForeColor); end; Group:= Theme.Get('Path', Empty); with ColorTheme.Path do begin ActiveColor:= Group.Get('ActiveColor', ActiveColor); ActiveFontColor:= Group.Get('ActiveFontColor', ActiveFontColor); InactiveColor:= Group.Get('InactiveColor', InactiveColor); InactiveFontColor:= Group.Get('InactiveFontColor', InactiveFontColor); end; Group:= Theme.Get('Log', Empty); with ColorTheme.Log do begin InfoColor:= Group.Get('InfoColor', InfoColor); ErrorColor:= Group.Get('ErrorColor', ErrorColor); SuccessColor:= Group.Get('SuccessColor', SuccessColor); end; Group:= Theme.Get('SyncDirs', Empty); with ColorTheme.SyncDirs do begin LeftColor:= Group.Get('LeftColor', LeftColor); RightColor:= Group.Get('RightColor', RightColor); UnknownColor:= Group.Get('UnknownColor', UnknownColor); end; Group:= Theme.Get('Viewer', Empty); with ColorTheme.Viewer do begin ImageBackColor1:= Group.Get('ImageBackColor1', ImageBackColor1); ImageBackColor2:= Group.Get('ImageBackColor2', ImageBackColor2); BookBackgroundColor:= Group.Get('BookBackgroundColor', BookBackgroundColor); BookFontColor:= Group.Get('BookFontColor', BookFontColor); end; Group:= Theme.Get('Differ', Empty); with ColorTheme.Differ do begin AddedColor:= Group.Get('AddedColor', AddedColor); DeletedColor:= Group.Get('DeletedColor', DeletedColor); ModifiedColor:= Group.Get('ModifiedColor', ModifiedColor); ModifiedBinaryColor:= Group.Get('ModifiedBinaryColor', ModifiedBinaryColor); end; Group:= Theme.Get('TreeViewMenu', Empty); with ColorTheme.TreeViewMenu do begin BackgroundColor:= Group.Get('BackgroundColor', BackgroundColor); ShortcutColor:= Group.Get('ShortcutColor', ShortcutColor); NormalTextColor:= Group.Get('NormalTextColor', NormalTextColor); SecondaryTextColor:= Group.Get('SecondaryTextColor', SecondaryTextColor); FoundTextColor:= Group.Get('FoundTextColor', FoundTextColor); UnselectableTextColor:= Group.Get('UnselectableTextColor', UnselectableTextColor); CursorColor:= Group.Get('CursorColor', CursorColor); ShortcutUnderCursor:= Group.Get('ShortcutUnderCursor', ShortcutUnderCursor); NormalTextUnderCursor:= Group.Get('NormalTextUnderCursor', NormalTextUnderCursor); SecondaryTextUnderCursor:= Group.Get('SecondaryTextUnderCursor', SecondaryTextUnderCursor); FoundTextUnderCursor:= Group.Get('FoundTextUnderCursor', FoundTextUnderCursor); UnselectableUnderCursor:= Group.Get('UnselectableUnderCursor', UnselectableUnderCursor); end; end; finally Empty.Free; end; end; function TColorThemes.GetTheme(const AName: String): TColorTheme; begin if (AName = LIGHT_THEME) then Result:= FColors[0] else if (AName = DARK_THEME) then Result:= FColors[1] else begin Result:= nil; end; end; function TColorThemes.Current: TColorTheme; begin if DarkStyle then Result:= FColors[1] else begin Result:= FColors[0]; end; end; end. doublecmd-1.1.30/src/ucmdlineparams.pas0000644000175000001440000000741615104114162017075 0ustar alexxusersunit uCmdLineParams; {$mode objfpc}{$H+} interface type TCommandLineParams = packed record NewTab: Boolean; NoSplash: Boolean; ActivePanelSpecified: Boolean; ActiveRight: Boolean; LeftPath: array[0..1023] of AnsiChar; RightPath: array[0..1023] of AnsiChar; ActivePanelPath: array[0..1023] of AnsiChar; Client: Boolean; Servername: array[0..1023] of AnsiChar; end; procedure ProcessCommandLineParams; var CommandLineParams: TCommandLineParams; implementation uses Forms, Dialogs, SysUtils, uOSUtils, uDCUtils, uGlobsPaths, getopts, uDebug, uLng, uClipboard, DCStrUtils; function DecodePath(const Path: String): String; begin Result := TrimQuotes(Path); if Pos(fileScheme, Result) = 1 then begin Result:= URIDecode(Copy(Result, 8, MaxInt)); end; Result:= GetAbsoluteFileName(IncludeTrailingBackslash(GetCurrentDir), Result); end; procedure ProcessCommandLineParams; var Option: AnsiChar = #0; OptionIndex: LongInt = 0; Options: array[1..5] of TOption; OptionUnknown: String; begin FillChar(Options, SizeOf(Options), #0); with Options[1] do begin Name:= 'debug-log'; Has_arg:= 1; end; with Options[2] do begin Name:= 'config-dir'; Has_arg:= 1; end; with Options[3] do begin Name:= 'client'; end; with Options[4] do begin Name:= 'servername'; Has_arg:= 1; end; with Options[5] do begin Name:= 'no-splash'; end; FillChar(CommandLineParams, SizeOf(TCommandLineParams), #0); repeat try Option:= GetLongOpts('L:l:R:r:P:p:TtCc', @Options[1], OptionIndex); except MessageDlg(Application.Title, rsMsgInvalidCommandLine, mtError, [mbOK], 0, mbOK); Exit; end; case Option of #0: begin case OptionIndex of 1: begin // Used by LazLogger end; 2: begin gpCmdLineCfgDir:= ParamStrU(TrimQuotes(OptArg)); end; 3: begin CommandLineParams.Client:= True; CommandLineParams.NoSplash:= True; end; 4: begin CommandLineParams.Servername:= ParamStrU(TrimQuotes(OptArg)); end; 5: begin CommandLineParams.NoSplash:= True; end; end; end; 'L', 'l': CommandLineParams.LeftPath:= DecodePath(ParamStrU(OptArg)); 'R', 'r': CommandLineParams.RightPath:= DecodePath(ParamStrU(OptArg)); 'P', 'p': begin CommandLineParams.ActivePanelSpecified:= True; CommandLineParams.ActiveRight:= (UpperCase(OptArg) = 'R'); end; 'T', 't': CommandLineParams.NewTab:= True; 'C', 'c': begin CommandLineParams.Client:= True; CommandLineParams.NoSplash:= True; end; '?', ':': DCDebug ('Error with opt : ', OptOpt); end; { case } until Option = EndOfOptions; if OptInd <= ParamCount then begin // If also found one parameter then use it as path of active panel if ParamCount - OptInd = 0 then begin CommandLineParams.ActivePanelPath:= DecodePath(ParamStrU(OptInd)); Inc(OptInd, 1); end // If also found two parameters then use it as paths in panels else if ParamCount - OptInd = 1 then begin CommandLineParams.LeftPath:= DecodePath(ParamStrU(OptInd)); CommandLineParams.RightPath:= DecodePath(ParamStrU(OptInd + 1)); Inc(OptInd, 2); end; // Unknown options, print to console if OptInd <= ParamCount then begin while OptInd <= ParamCount do begin OptionUnknown:= ParamStrU(OptInd) + ' '; Inc(OptInd) end; DCDebug ('Non options : ', OptionUnknown); end; end; end; end. doublecmd-1.1.30/src/uclassesex.pas0000644000175000001440000001375115104114162016247 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- This module contains additional or extended classes. Copyright (C) 2008-2017 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uClassesEx; {$mode objfpc}{$H+} interface uses Classes, SysUtils, IniPropStorage, Contnrs, SynEdit; type { TObjectEx } TObjectEx = class(TObject) public function Clone: TObjectEx; virtual; abstract; end; { TBlobStream } TBlobStream = class(TCustomMemoryStream) public constructor Create(Ptr: Pointer; ASize: PtrInt); end; { TIniPropStorageEx } TIniPropStorageEx = class(TCustomIniPropStorage) private FPixelsPerInch: Integer; function ChangeIdent(const Ident: String): String; protected procedure SaveProperties; override; function IniFileClass: TIniFileClass; override; public procedure Restore; override; function DoReadString(const Section, Ident, Default: string): string; override; procedure DoWriteString(const Section, Ident, Value: string); override; end; { TThreadObjectList } TThreadObjectList = class private FList: TObjectList; FLock: TRTLCriticalSection; public constructor Create; destructor Destroy; override; public procedure Clear; function Clone: TObjectList; function Add(AObject: TObjectEx): Integer; function LockList: TObjectList; procedure UnlockList; end; { TSynEditHelper } TSynEditHelper = class helper for TSynEdit public procedure FixDefaultKeystrokes; end; implementation uses LCLType, Forms, Controls, LCLVersion, SynEditKeyCmds, DCStrUtils, DCClassesUtf8; { TThreadObjectList } constructor TThreadObjectList.Create; begin inherited Create; InitCriticalSection(FLock); FList:= TObjectList.Create(True); end; destructor TThreadObjectList.Destroy; begin LockList; try FList.Free; inherited Destroy; finally UnlockList; DoneCriticalSection(FLock); end; end; procedure TThreadObjectList.Clear; begin Locklist; try FList.Clear; finally UnLockList; end; end; function TThreadObjectList.Clone: TObjectList; var Index: Integer; begin LockList; try Result:= TObjectList.Create(True); for Index:= 0 to FList.Count - 1 do begin Result.Add(TObjectEx(FList[Index]).Clone); end; finally UnlockList; end; end; function TThreadObjectList.Add(AObject: TObjectEx): Integer; begin Result:= FList.Add(AObject); end; function TThreadObjectList.LockList: TObjectList; begin Result:= FList; System.EnterCriticalSection(FLock); end; procedure TThreadObjectList.UnlockList; begin System.LeaveCriticalSection(FLock); end; { TBlobStream } constructor TBlobStream.Create(Ptr: Pointer; ASize: PtrInt); begin inherited Create; SetPointer(Ptr, ASize); end; { TIniPropStorageEx } procedure TIniPropStorageEx.SaveProperties; begin inherited SaveProperties; IniFile.WriteInteger(IniSection, 'Screen_PixelsPerInch', Screen.PixelsPerInch); end; function TIniPropStorageEx.IniFileClass: TIniFileClass; begin Result:= TIniFileEx; end; procedure TIniPropStorageEx.Restore; var AMonitor: TMonitor; begin StorageNeeded(True); try FPixelsPerInch := IniFile.ReadInteger(IniSection, 'Screen_PixelsPerInch', Screen.PixelsPerInch); inherited Restore; finally FreeStorage; end; if Self.Owner is TCustomForm then begin with TCustomForm(Self.Owner) do begin // Refresh monitor list Screen.UpdateMonitors; AMonitor:= Screen.MonitorFromPoint(Classes.Point(Left, Top)); if Assigned(AMonitor) then MakeFullyVisible(AMonitor, True); // Workaround for bug: http://bugs.freepascal.org/view.php?id=18514 if WindowState = wsMinimized then WindowState:= wsNormal; end; end; end; function TIniPropStorageEx.DoReadString(const Section, Ident, Default: string): string; var Value: Integer; Form: TCustomForm; begin Result := inherited DoReadString(Section, ChangeIdent(Ident), Default); {$if lcl_fullversion >= 1070000} // Workaround for bug: http://bugs.freepascal.org/view.php?id=31526 if (Self.Owner is TCustomForm) and (TCustomForm(Self.Owner).Scaled) then begin Form := TCustomForm(Self.Owner); if (Form.DesignTimePPI <> FPixelsPerInch) then begin if StrEnds(Ident, '_Width') or StrEnds(Ident, '_Height') then begin if TryStrToInt(Result, Value) then begin Result := IntToStr(MulDiv(Value, Form.DesignTimePPI, FPixelsPerInch)); end; end; end; end; {$endif} end; procedure TIniPropStorageEx.DoWriteString(const Section, Ident, Value: string); begin inherited DoWriteString(Section, ChangeIdent(Ident), Value); end; function TIniPropStorageEx.ChangeIdent(const Ident: String): String; begin // Change component name to class name. if StrBegins(Ident, Owner.Name) then Result := Owner.ClassName + Copy(Ident, 1 + Length(Owner.Name), MaxInt) else Result := Ident; end; { TSynEditHelper } procedure TSynEditHelper.FixDefaultKeystrokes; procedure AddKey(const ACmd: TSynEditorCommand; const AKey: Word; const AShift: TShiftState; const AShiftMask: TShiftState = []); begin with Keystrokes.Add do begin Key := AKey; Shift := AShift; ShiftMask := AShiftMask; Command := ACmd; end; end; begin AddKey(ecCopy, VK_C, [ssModifier]); AddKey(ecSelectAll, VK_A, [ssModifier]); end; end. doublecmd-1.1.30/src/ubinarydiffviewer.pas0000644000175000001440000001543615104114162017616 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Binary difference viewer and comparator Copyright (C) 2014-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uBinaryDiffViewer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, ViewerControl; type { TBinaryDiffViewer } TBinaryDiffViewer = class(TViewerControl) private FModified: TColor; FScrollLock: Integer; FKeepScrolling: Boolean; FSecondViewer: TBinaryDiffViewer; protected procedure WriteCustom; override; procedure SetPosition(Value: PtrInt); override; public constructor Create(AOwner: TComponent); override; property KeepScrolling: Boolean read FKeepScrolling write FKeepScrolling; property SecondViewer: TBinaryDiffViewer read FSecondViewer write FSecondViewer; property Modified: TColor read FModified write FModified; property LastError: String read FLastError; end; { TBinaryCompare } TBinaryCompare = class(TThread) private FFirst, FSecond: PByte; FFinish: PtrInt; FEqual: Boolean; FResult: TFPList; FOnFinish: TThreadMethod; protected procedure Execute; override; public constructor Create(First, Second: PByte; FirstSize, SecondSize: PtrInt; Result: TFPList); property OnFinish: TThreadMethod read FOnFinish write FOnFinish; end; implementation uses Math, LazUTF8; const cHexWidth = 16; cHexOffsetWidth = 8; cHexStartHex = cHexOffsetWidth + 2; // ': ' cHexStartAscii = cHexStartHex + (cHexWidth * 3) + 2; // ' ' { TBinaryDiffViewer } procedure TBinaryDiffViewer.WriteCustom; const cWordSize = 3; var I: Integer; X, Y: Integer; yIndex: Integer; CharLen: Integer; P1, P2: PAnsiChar; CurrentPos, SecondPos: PtrInt; Mine, Foreign, WordHex: String; WordWidth, SymbolWidth: Integer; MineLength, ForeignLength: Integer; SymbolColor: array[0..15] of TColor; begin CurrentPos := Position; SymbolWidth := Canvas.TextWidth('W'); WordWidth := SymbolWidth * cWordSize; // Draw visible lines for yIndex := 0 to GetClientHeightInLines - 1 do begin if CurrentPos >= FHighLimit then Break; // Draw if second viewer exists if Assigned(SecondViewer) then begin X := 0; SecondPos := CurrentPos; Y := yIndex * FTextHeight; AddLineOffset(CurrentPos); // Mine text Mine := TransformHex(CurrentPos, FHighLimit); MineLength:= Min(cHexWidth, (Length(Mine) - cHexStartHex) div cWordSize); // Foreign text if SecondPos >= SecondViewer.FHighLimit then begin Foreign := Mine; ForeignLength := -1; end else begin Foreign := SecondViewer.TransformHex(SecondPos, SecondViewer.FHighLimit); ForeignLength:= (Length(Foreign) - cHexStartHex) div cWordSize; end; // Pointers to text P1 := PAnsiChar(Mine) + cHexStartHex; P2 := PAnsiChar(Foreign) + cHexStartHex; // Write line number Canvas.TextOut(X, Y, Copy(Mine, 1, cHexStartHex)); X := X + SymbolWidth * cHexStartHex; // Write hex part for I := 0 to MineLength - 1 do begin if (I > ForeignLength) or (PWord(P1)^ <> PWord(P2)^) then Canvas.Font.Color := FModified else Canvas.Font.Color := clWindowText; SymbolColor[I]:= Canvas.Font.Color; WordHex:= Copy(P1, 1, cWordSize); Canvas.TextOut(X, Y, WordHex); Inc(X, WordWidth); Inc(P1, cWordSize); Inc(P2, cWordSize) end; Inc(X, SymbolWidth); // Write ASCII part WordHex:= Copy(Mine, cHexStartAscii + 1, MaxInt); I:= 0; P1:= PAnsiChar(WordHex); P2:= P1 + Length(WordHex); while (P1 < P2) do begin CharLen := UTF8CodepointSize(P1); if (CharLen = 0) then Break; Canvas.Font.Color := SymbolColor[I]; Canvas.TextOut(X, Y, Copy(P1, 1, CharLen)); Inc(X, SymbolWidth); Inc(P1, CharLen); Inc(I); end; Canvas.Font.Color := clWindowText; end; end; end; procedure TBinaryDiffViewer.SetPosition(Value: PtrInt); begin if not (csDestroying in ComponentState) then begin if FScrollLock = 0 then begin Inc(FScrollLock); try inherited SetPosition(Value); if FKeepScrolling and Assigned(SecondViewer) then SecondViewer.SetPosition(Value); finally Dec(FScrollLock); end; end; end; end; constructor TBinaryDiffViewer.Create(AOwner: TComponent); begin inherited Create(AOwner); FModified:= clRed; Mode:= vcmHex; end; { TBinaryCompare } procedure TBinaryCompare.Execute; var Finish: PtrInt; Remain: PtrInt; Position: PtrInt = 0; Equal: Boolean = True; begin FResult.Clear; Remain:= (FFinish mod cHexWidth); Finish:= (FFinish - Remain); // Compare integer block size while (Terminated = False) and (Position < Finish) do begin if CompareMem(FFirst + Position, FSecond + Position, cHexWidth) then Equal:= True else if Equal then begin Equal:= False; FResult.Add(Pointer(Position)); end; Position:= Position + cHexWidth; end; // Compare remain bytes if (Remain > 0) then begin if not CompareMem(FFirst + Position, FSecond + Position, Remain) then begin if Equal then begin Equal:= False; FResult.Add(Pointer(Position)); end; end; end; // Different file size if (FEqual = False) and (Equal = True) then begin FResult.Add(Pointer(Position + Remain)) end; if Assigned(FOnFinish) then Synchronize(FOnFinish); end; constructor TBinaryCompare.Create(First, Second: PByte; FirstSize, SecondSize: PtrInt; Result: TFPList); begin FFirst:= First; FSecond:= Second; FResult:= Result; inherited Create(True); FreeOnTerminate:= True; FEqual:= (FirstSize = SecondSize); FFinish:= Min(FirstSize, SecondSize); end; end. doublecmd-1.1.30/src/uaccentsutils.pas0000644000175000001440000001673215104114162016760 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Routine related with characters with accents/ligatures and their equivalents without Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uAccentsUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils; procedure LoadInMemoryOurAccentLookupTableList; procedure FreeMemoryFromOurAccentLookupTableList; function NormalizeAccentedChar(sInput: string): string; function PosOfSubstrWithVersatileOptions(sSubString, sWholeString: string; bCaseSensitive, bIgnoreAccent: boolean; var ActualCharFittedInInput: integer): integer; var gslAccents, gslAccentsStripped: TStringList; const cStrAccents = 'á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;Ú;Û;Ù;Ü;Ÿ;¿;¡;æ;œ;ß;Æ;Œ;ẞ;ě;š;č;ř;ž;ý;ň;ď;ť;ů;Ě;Š;Č;Ř;Ž;Ý;Ň;Ď;Ť;Ů'; cStrAccentsStripped = 'a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;U;U;U;U;Y;?;!;ae;oe;ss;AE;OE;SS;e;s;c;r;z;y;n;d;t;u;E;S;C;R;Z;Y;N;D;T;U'; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, //DC DCStrUtils; { LoadInMemoryOurAccentLookupTableList } procedure LoadInMemoryOurAccentLookupTableList; var slTempoAccents, slTempoAccentsStripped: TStringList; iChar, iPos: integer; begin slTempoAccents := TStringList.Create; slTempoAccentsStripped := TStringList.Create; try slTempoAccents.CaseSensitive := True; ParseLineToList(cStrAccents, slTempoAccents); ParseLineToList(cStrAccentsStripped, slTempoAccentsStripped); if slTempoAccents.Count <> slTempoAccentsStripped.Count then raise Exception.Create('Unexpected situation in LoadInMemoryOurAccentLookupTableList!' + #$0A + 'Most probably problem in language file regarding conversion string with accents...'); gslAccents := TStringList.Create; gslAccents.Assign(slTempoAccents); gslAccents.CaseSensitive := True; gslAccents.Sort; gslAccentsStripped := TStringList.Create; for iChar := 0 to pred(gslAccents.Count) do begin iPos := slTempoAccents.IndexOf(gslAccents.Strings[iChar]); if iPos <> -1 then gslAccentsStripped.add(slTempoAccentsStripped.Strings[iPos]) else raise Exception.Create('Unexpected situation in LoadInMemoryOurAccentLookupTableList! (Error in Rejavik)'); end; if gslAccents.Count <> gslAccentsStripped.Count then raise Exception.Create('Unexpected situation in LoadInMemoryOurAccentLookupTableList! (Error in Mexico)'); finally FreeAndNil(slTempoAccents); FreeAndNil(slTempoAccentsStripped); end; end; { FreeMemoryFromOurAccentLookupTableList } procedure FreeMemoryFromOurAccentLookupTableList; begin if gslAccents <> nil then FreeAndNil(gslAccents); if gslAccentsStripped <> nil then FreeAndNil(gslAccentsStripped); end; { NormalizeAccentedChar } function NormalizeAccentedChar(sInput: string): string; var iIndexChar, iPosChar: integer; cWorkingChar: string; begin Result := ''; for iIndexChar := 1 to UTF8length(sInput) do begin cWorkingChar := UTF8Copy(sInput, iIndexChar, 1); iPosChar := gslAccents.IndexOf(cWorkingChar); if iPosChar = -1 then Result := Result + cWorkingChar else Result := Result + gslAccentsStripped.Strings[iPosChar]; end; end; { PosOfSubstrWithVersatileOptions } // NOTE: Function will search "sSubString" inside the "sWholeString" and return the position where it found it. // WARNING! Function is assuming the "sSubString" is already preformated adequately and won't do it. // For example, if we do a search case insensitive, it is assumed you arrived here with "sSubString" already in UTF8UpperCase. So with "ABC" and not "abc". // For example, if you search ignoring accent, it is assumed you arrived here with "sSubString" already without accents. So with "aei" and not "àéî". // For example, if you search ignoring ligature, it is assumed you arrived here with "sSubString" already without ligature. So with "oe" and not with "œ". // No need to preformat, obviously, the "sWholeString". // ALL this is to speed up a little things since often we'll search the SAME string over and over in a whole string. // We'll gain something preparing our "sWholeString" once for all AND THEN keep re-searhcing in many strings using the following routine. // ALSO, because of the ligature possibility, the parameter "ActualCharFittedInInput" will be set according to the number of chars from the "sWholeString" that was used for finding the "sSubString". // For example, if we search "oeu" inside "soeur", the return value will be 2 and the "ActualCharFittedInInput" will be set to 3... // But if we search "oeu" inside "sœur", the return value will still be 2 BUT the "ActualCharFittedInInput" will be set to 2 since only two chars were required! // The author of this doesn't know for other language, but for French, this is a nice routine! :-) function PosOfSubstrWithVersatileOptions(sSubString, sWholeString: string; bCaseSensitive, bIgnoreAccent: boolean; var ActualCharFittedInInput: integer): integer; var sLocal: string; iActualPos: integer; iInnerResult: integer = 0; begin ActualCharFittedInInput := 0; if bIgnoreAccent then sLocal := NormalizeAccentedChar(sWholeString) else sLocal := sWholeString; if not bCaseSensitive then sLocal := UTF8UpperCase(sLocal); iInnerResult := UTF8Pos(sSubString, sLocal); if iInnerResult > 0 then begin iActualPos := 0; sLocal := ''; while (UTF8Length(sLocal) < iInnerResult) and (iActualPos < length(sWholeString)) do begin Inc(iActualPos); if bIgnoreAccent then sLocal := sLocal + NormalizeAccentedChar(UTF8copy(sWholeString, iActualPos, 1)) else sLocal := sLocal + UTF8copy(sWholeString, iActualPos, 1); end; Result := iActualPos; //Once here, "iActualPos" holds the actual position of our substring in the string. //Then, we now add the char one by one until it match what were where searching AND IT SHOULD MATCH because "iInnerResult" has a value. sLocal := ''; while (UTF8Pos(sSubString, sLocal) = 0) and ((Result + ActualCharFittedInInput) <= UTF8Length(sWholeString)) do begin Inc(ActualCharFittedInInput); sLocal := UTF8copy(sWholeString, Result, ActualCharFittedInInput); if bIgnoreAccent then sLocal := NormalizeAccentedChar(sLocal) else sLocal := sLocal; if not bCaseSensitive then sLocal := UTF8UpperCase(sLocal); end; end else begin Result := 0; end; end; end. doublecmd-1.1.30/src/uShowMsg.pas0000644000175000001440000007114015104114162015640 0ustar alexxusers { Double commander ------------------------------------------------------------------------- Implementing of Showing messages with localization Copyright (C) 2007-2020 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this library. If not, see . } { Seksi Commander ---------------------------- Implementing of Showing messages with localization Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Koblov Alexander (Alexx2000@mail.ru) } unit uShowMsg; {$mode delphi}{$H+} interface uses Forms, Classes, DCBasicTypes; type TMyMsgResult=(mmrOK, mmrNo, mmrYes, mmrCancel, mmrNone, mmrAppend, mmrResume, mmrCopyInto, mmrCopyIntoAll, mmrOverwrite, mmrOverwriteAll, mmrOverwriteOlder, mmrOverwriteSmaller, mmrOverwriteLarger, mmrAutoRenameSource, mmrAutoRenameTarget, mmrRenameSource, mmrSkip, mmrSkipAll, mmrIgnore, mmrIgnoreAll, mmrAll, mmrRetry, mmrAbort, mmrRetryAdmin, mmrUnlock); TMyMsgButton=(msmbOK, msmbNo, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbResume, msmbCopyInto, msmbCopyIntoAll, msmbOverwrite, msmbOverwriteAll, msmbOverwriteOlder, msmbOverwriteSmaller, msmbOverwriteLarger, msmbAutoRenameSource, msmbAutoRenameTarget, msmbRenameSource, msmbSkip, msmbSkipAll, msmbIgnore, msmbIgnoreAll, msmbAll, msmbRetry, msmbAbort, msmbRetryAdmin, msmbUnlock, // Actions, they do not close the form and therefore have no corresponding result value: msmbCompare); TMyMsgActionButton = msmbCompare..High(TMyMsgButton); TMyMsgActionHandler = procedure(Button: TMyMsgActionButton) of object; { TDialogMainThread } TDialogMainThread = class private procedure SyncMsgBox; procedure SyncMessageBox; procedure SyncInputQuery; procedure SyncMessageChoiceBox; protected FThread: TThread; FCaption, FMessage, FValue: String; FMaskInput: Boolean; FFlags: Longint; FBtnDef, FBtnEsc: Integer; FButtons: array of TMyMsgButton; FButDefault, FButEscape: TMyMsgButton; FInputQueryResult: Boolean; FMsgBoxResult: TMyMsgResult; FMessageBoxResult: LongInt; FChoices: TDynamicStringArray; public constructor Create(AThread: TThread); destructor Destroy;override; function ShowMsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape:TMyMsgButton) : TMyMsgResult; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; function ShowMessageChoiceBox(const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String) : Boolean; end; function msgYesNo(const sMsg: String; ButDefault: TMyMsgButton = msmbYes): Boolean; overload; function msgYesNo(Thread: TThread; const sMsg: String): Boolean; overload; function msgYesNoCancel(const sMsg: String; ButDefault: TMyMsgButton = msmbYes):TMyMsgResult; overload; function msgYesNoCancel(Thread: TThread; const sMsg: String): TMyMsgResult; overload; procedure msgOK(const sMsg: String); overload; procedure msgOK(Thread: TThread; const sMsg: String); overload; procedure msgWarning(const sMsg: String); overload; procedure msgWarning(Thread: TThread; const sMsg: String); overload; procedure msgError(const sMsg: String); overload; procedure msgError(Thread: TThread; const sMsg: String); overload; function MsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton; ActionHandler: TMyMsgActionHandler = nil): TMyMsgResult; overload; function MsgBox(Thread: TThread; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton): TMyMsgResult; overload; function MsgTest:TMyMsgResult; function MsgChoiceBox(const Message: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; overload; function MsgChoiceBox(const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; overload; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; overload; function MsgChoiceBox(Thread: TThread; const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; overload; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; overload; function ShowMessageBox(Thread: TThread; const AText, ACaption: String; Flags: LongInt): LongInt; overload; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; function ShowInputQuery(const ACaption, APrompt: String; var Value: String): Boolean; overload; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; var Value: String): Boolean; overload; function ShowInputComboBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String) : Boolean; function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean; function ShowInputMultiSelectListBox(const sCaption, sPrompt : String; slValueList, slOutputIndexSelected : TStringList) : Boolean; procedure msgLoadLng; implementation uses LCLIntf, SysUtils, StdCtrls, Graphics, Math, typinfo, Menus, fMsg, uLng, Buttons, Controls, uLog, uGlobs, uDebug; const cMsgName = 'Double Commander'; var cLngButton: array[TMyMsgButton] of String; { TDialogMainThread } procedure TDialogMainThread.SyncMsgBox; begin FMsgBoxResult:= MsgBox(FMessage, FButtons, FButDefault, FButEscape); end; procedure TDialogMainThread.SyncMessageBox; begin FMessageBoxResult:= MessageBoxFunction(PAnsiChar(FMessage), PAnsiChar(FCaption), FFlags); end; procedure TDialogMainThread.SyncInputQuery; begin FInputQueryResult := LCLIntf.RequestInput(FCaption, FMessage, FMaskInput, FValue); end; procedure TDialogMainThread.SyncMessageChoiceBox; begin FMessageBoxResult:= MsgChoiceBox(FMessage, FCaption, FChoices, FBtnDef, FBtnEsc); end; constructor TDialogMainThread.Create(AThread : TThread); begin FThread:= AThread; end; destructor TDialogMainThread.Destroy; begin FButtons:= nil; inherited Destroy; end; function TDialogMainThread.ShowMsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton) : TMyMsgResult; var I : Integer; begin FMessage := sMsg; SetLength(FButtons, Length(Buttons)); for I := Low(Buttons) to High(Buttons) do FButtons[I] := Buttons[I]; FButDefault := ButDefault; FButEscape := ButEscape; TThread.Synchronize(FThread, SyncMsgBox); Result := FMsgBoxResult; end; function TDialogMainThread.ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; begin FCaption:= ACaption; FMessage:= AText; FFlags:= Flags; TThread.Synchronize(FThread, SyncMessageBox); Result:= FMessageBoxResult; end; function TDialogMainThread.ShowMessageChoiceBox(const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; begin FBtnDef:= BtnDef; FBtnEsc:= BtnEsc; FMessage:= Message; FChoices:= Buttons; FCaption:= ACaption; TThread.Synchronize(FThread, SyncMessageChoiceBox); Result:= FMessageBoxResult; end; function TDialogMainThread.ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; begin FCaption:= ACaption; FMessage:= APrompt; FMaskInput:= MaskInput; FValue:= Value; TThread.Synchronize(FThread, SyncInputQuery); Value:= FValue; Result:= FInputQueryResult; end; procedure SetMsgBoxParams(var frmMsg: TfrmMsg; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton); procedure FormShowEvent(Self, Sender: TCustomForm); begin if (Self.Tag <> 0) and (TObject(Self.Tag) is TButton) then SendMessage(TButton(Self.Tag).Handle, $160C, 0, 1); end; const cButtonCount = 8; cButtonSpace = 8; var iIndex: Integer; iCount: Integer; Handler: TMethod; MenuItem: TMenuItem; CaptionWidth: Integer; More: Boolean = False; MinButtonWidth: Integer; iIndexDefault : Integer = -1; begin Assert(Assigned(frmMsg)); frmMsg.Position:= poScreenCenter; frmMsg.BorderStyle:= bsSingle; frmMsg.BorderIcons:= [biSystemMenu]; frmMsg.Caption:= cMsgName; frmMsg.lblMsg.Caption:= sMsg; // Get default button width with TButton.Create(nil) do begin MinButtonWidth:= GetDefaultWidth; Free; end; // Determine number of buttons iCount:= High(Buttons); if iCount > cButtonCount then begin More:= True; iCount:= cButtonCount - 1; CaptionWidth:= frmMsg.Canvas.TextWidth(rsDlgButtonOther); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; // Calculate minimum button width for iIndex:= Low(Buttons) to iCount do begin CaptionWidth:= frmMsg.Canvas.TextWidth(cLngButton[Buttons[iIndex]]); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; // Add first 9 items as buttons for iIndex:= Low(Buttons) to iCount do begin with TButton.Create(frmMsg) do begin {$IF DEFINED(LCLCOCOA)} Constraints.MinHeight:= 34; {$ENDIF} AutoSize:= True; Caption:= cLngButton[Buttons[iIndex]]; Parent:= frmMsg.pnlButtons; Constraints.MinWidth:= MinButtonWidth; if Buttons[iIndex] >= Low(TMyMsgActionButton) then Tag:= -2-iIndex else Tag:= iIndex; if Buttons[iIndex] = msmbRetryAdmin then begin Handler.Data:= frmMsg; frmMsg.Tag:= GetHashCode; Handler.Code:= @FormShowEvent; frmMsg.OnShow:= TNotifyEvent(Handler); Constraints.MinWidth:= MinButtonWidth + GetSystemMetrics(49); end; OnClick:= frmMsg.ButtonClick; OnMouseUp:= frmMsg.MouseUpEvent; if Buttons[iIndex] = ButDefault then begin Default:= True; iIndexDefault:=iIndex; end; if Buttons[iIndex] = ButEscape then frmMsg.Escape:= iIndex; end; end; //Once the buttons has been added, let's set the correct "TabOrder" in such way: //1o) The one with the default is "TabOrder=0" //2o) If we press "TAB" key, it keeps moving to the right //Let's determine what should be the "TabOrder" initial value so //1. The default button will have tab order 0 //2. When moving with "tab" key, it will move from left to right //"TabOrder" need to be set *after* all the buttons are there if iIndexDefault<>-1 then begin for iIndex:= 0 to pred(frmMsg.ComponentCount) do begin if frmMsg.Components[iIndex] is TButton then with frmMsg.Components[iIndex] as TButton do begin if Tag >= 0 then TabOrder:= (Tag+(iCount+1)-iIndexDefault) mod (iCount+1) //Tricky but it does it, no "if", no negative after to check, etc. else TabOrder:= (-2-Tag+(iCount+1)-iIndexDefault) mod (iCount+1); end; end; end; // More add as popup menu if More then begin // Add button with popup menu with TButton.Create(frmMsg) do begin AutoSize:= True; Caption:= rsDlgButtonOther; Parent:= frmMsg.pnlButtons; Constraints.MinWidth:= MinButtonWidth; OnClick:= frmMsg.ButtonOtherClick; end; // Fill popup menu for iIndex:= cButtonCount to High(Buttons) do begin MenuItem:= TMenuItem.Create(frmMsg.mnuOther); with MenuItem do begin if Buttons[iIndex] >= Low(TMyMsgActionButton) then Tag:= -2-iIndex else Tag:= iIndex; Caption:= cLngButton[Buttons[iIndex]]; OnClick:= frmMsg.ButtonClick; frmMsg.mnuOther.Items.Add(MenuItem); end; end; end; end; type TMsgBoxHelper = class Buttons: array of TMyMsgButton; ActionHandler: TMyMsgActionHandler; procedure MsgBoxActionHandler(Tag: PtrInt); end; procedure TMsgBoxHelper.MsgBoxActionHandler(Tag: PtrInt); begin ActionHandler(Buttons[-Tag-2]); end; function MsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton; ActionHandler: TMyMsgActionHandler = nil): TMyMsgResult; var frmMsg:TfrmMsg; MsgBoxHelper: TMsgBoxHelper = nil; I: Integer; begin frmMsg:=TfrmMsg.Create(Application); try MsgBoxHelper := TMsgBoxHelper.Create(); SetLength(MsgBoxHelper.Buttons, Length(Buttons)); for I := Low(Buttons) to High(Buttons) do MsgBoxHelper.Buttons[I] := Buttons[I]; MsgBoxHelper.ActionHandler := ActionHandler; frmMsg.ActionHandler := MsgBoxHelper.MsgBoxActionHandler; SetMsgBoxParams(frmMsg, sMsg, Buttons, ButDefault, ButEscape); frmMsg.ShowModal; if (frmMsg.iSelected)=-1 then Result:=mmrNone else { TODO : not safe code because of direct typecast from one enumeration to another, better to use array lookup } Result:=TMyMsgResult(Buttons[frmMsg.iSelected]); finally frmMsg.Free; MsgBoxHelper.Free; end; end; function MsgBox(Thread: TThread; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton): TMyMsgResult; var DialogMainThread : TDialogMainThread; begin Result := mmrNone; DialogMainThread := TDialogMainThread.Create(Thread); try Result := DialogMainThread.ShowMsgBox(sMsg, Buttons, ButDefault, ButEscape); finally DialogMainThread.Free; end; end; Function MsgTest:TMyMsgResult; begin Result:= MsgBox('test language of msg subsystem'#10'Second line',[msmbOK, msmbNO, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbOverwrite, msmbOverwriteAll],msmbOK, msmbNO); end; function msgYesNo(const sMsg: String; ButDefault: TMyMsgButton = msmbYes):Boolean; begin Result:= MsgBox(nil, sMsg,[msmbYes, msmbNo], ButDefault, msmbNo )= mmrYes; end; function msgYesNo(Thread: TThread; const sMsg: String): Boolean; begin Result:= MsgBox(Thread, sMsg,[msmbYes, msmbNo], msmbYes, msmbNo )= mmrYes; end; function msgYesNoCancel(const sMsg: String; ButDefault: TMyMsgButton = msmbYes):TMyMsgResult; begin Result:= MsgBox(sMsg,[msmbYes, msmbNo, msmbCancel], ButDefault, msmbCancel); end; function msgYesNoCancel(Thread: TThread; const sMsg: String): TMyMsgResult; begin Result:= MsgBox(Thread, sMsg,[msmbYes, msmbNo, msmbCancel], msmbYes, msmbCancel); end; procedure msgOK(const sMsg: String); begin MsgBox(sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgOK(Thread: TThread; const sMsg: String); begin MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgError(const sMsg: String); begin MsgBox(sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgError(Thread: TThread; const sMsg: String); begin MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK) end; procedure msgWarning(const sMsg: String); begin if gShowWarningMessages then MsgBox(sMsg,[msmbOK],msmbOK, msmbOK) else begin if gLogWindow then // if log window enabled then write error to it logWrite(sMsg, lmtError) else Beep; end; end; procedure msgWarning(Thread: TThread; const sMsg: String); begin if gShowWarningMessages then MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK) else begin if gLogWindow then // if log window enabled then write error to it logWrite(Thread, sMsg, lmtError) else Beep; end; end; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; begin Result:= ShowMessageBox(nil, AText, ACaption, Flags); end; function ShowMessageBox(Thread: TThread; const AText, ACaption: String; Flags: LongInt): LongInt; var DialogMainThread : TDialogMainThread; begin Result:= 0; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowMessageBox(AText, ACaption, Flags); finally DialogMainThread.Free; end; end; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; begin Result:= ShowInputQuery(nil, ACaption, APrompt, MaskInput, Value); end; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; var DialogMainThread : TDialogMainThread; begin Result := False; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowInputQuery(ACaption, APrompt, MaskInput, Value); finally DialogMainThread.Free; end; end; function ShowInputQuery(const ACaption, APrompt: String; var Value: String): Boolean; overload; begin Result:= ShowInputQuery(nil, ACaption, APrompt, False, Value); end; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; var Value: String): Boolean; begin Result:= ShowInputQuery(Thread, ACaption, APrompt, False, Value); end; function ShowInputComboBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String) : Boolean; var Index: Integer; frmDialog : TForm; lblPrompt : TLabel; cbValue : TComboBox; bbtnOK, bbtnCancel : TBitBtn; begin frmDialog := TForm.CreateNew(nil, 0); with frmDialog do try BorderStyle := bsDialog; Position := poScreenCenter; AutoSize := True; Height := 120; ChildSizing.TopBottomSpacing := 8; ChildSizing.LeftRightSpacing := 8; Caption := sCaption; lblPrompt := TLabel.Create(frmDialog); with lblPrompt do begin Parent := frmDialog; Caption := sPrompt; Top := 6; Left := 6; end; cbValue := TComboBox.Create(frmDialog); with cbValue do begin Parent := frmDialog; Items.Assign(slValueList); Text := sValue; Left := 6; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth := max(280, Screen.Width div 4); end; bbtnCancel := TBitBtn.Create(frmDialog); with bbtnCancel do begin Parent := frmDialog; Kind := bkCancel; Cancel := True; Left := 6; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, cbValue); AnchorSide[akRight].Control := cbValue; AnchorSide[akRight].Side := asrRight; end; bbtnOK := TBitBtn.Create(frmDialog); with bbtnOK do begin Parent := frmDialog; Kind := bkOk; Default := True; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, cbValue); AnchorToNeighbour(akRight, 6, bbtnCancel); end; Result := (ShowModal = mrOK); if Result then begin Index:= slValueList.IndexOf(cbValue.Text); if Index < 0 then slValueList.Add(cbValue.Text) else begin slValueList.Move(Index, 0); end; sValue := cbValue.Text; end; finally FreeAndNil(frmDialog); end; // with frmDialog end; type TProcedureHolder=class(TObject) public procedure ListBoxDblClick(Sender: TObject); end; procedure TProcedureHolder.ListBoxDblClick(Sender: TObject); begin TForm(TComponent(Sender).Owner).ModalResult:=mrOk; end; function InnerShowInputListBox(const sCaption, sPrompt: String; bMultiSelect:boolean; slValueList,slOutputIndexSelected:TStringList; var sValue: String; var SelectedChoice:integer) : Boolean; var frmDialog : TForm; lblPrompt : TLabel; lbValue : TListBox; bbtnOK, bbtnCancel, bbtnSelectAll : TBitBtn; iIndex, iModalResult: integer; ProcedureHolder:TProcedureHolder; begin SelectedChoice:=-1; ProcedureHolder:=TProcedureHolder.Create; try frmDialog := TForm.CreateNew(nil, 0); with frmDialog do try BorderStyle := bsDialog; Position := poScreenCenter; AutoSize := True; Height := 120; ChildSizing.TopBottomSpacing := 8; ChildSizing.LeftRightSpacing := 8; Caption := sCaption; lblPrompt := TLabel.Create(frmDialog); with lblPrompt do begin Parent := frmDialog; Caption := sPrompt; Top := 6; Left := 6; end; lbValue := TListBox.Create(frmDialog); with lbValue do begin Parent := frmDialog; Height := (slValueList.Count*15)+50; if height=0 then Height:=150 else if height > (screen.Height div 2) then height := (Screen.Height div 2); Items.Assign(slValueList); ItemIndex:=Items.IndexOf(sValue); lbValue.MultiSelect:=bMultiSelect; if (ItemIndex=-1) AND (Items.count>0) then ItemIndex:=0; Left := 6; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth := max(280, Screen.Width div 4); OnDblClick:= ProcedureHolder.ListBoxDblClick; end; if bMultiSelect then begin bbtnSelectAll := TBitBtn.Create(frmDialog); with bbtnSelectAll do begin Parent := frmDialog; Kind := bkAll; Cancel := True; Left := 6; Width:= 90; Anchors := [akTop, akLeft]; AnchorToNeighbour(akTop, 18, lbValue); AnchorSide[akLeft].Control := lbValue; AnchorSide[akLeft].Side := asrLeft; end; end; bbtnCancel := TBitBtn.Create(frmDialog); with bbtnCancel do begin Parent := frmDialog; Kind := bkCancel; Cancel := True; Left := 6; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, lbValue); AnchorSide[akRight].Control := lbValue; AnchorSide[akRight].Side := asrRight; end; bbtnOK := TBitBtn.Create(frmDialog); with bbtnOK do begin Parent := frmDialog; Kind := bkOk; Default := True; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, lbValue); AnchorToNeighbour(akRight, 6, bbtnCancel); end; iModalResult:=ShowModal; Result := (iModalResult = mrOK) AND (lbValue.ItemIndex<>-1); if (not Result) AND (bMultiSelect) AND (iModalResult = mrAll) then begin lbValue.SelectAll; Result:=True; end; if Result then begin sValue:=lbValue.Items.Strings[lbValue.ItemIndex]; SelectedChoice:=lbValue.ItemIndex; if bMultiSelect then for iIndex:=0 to pred(lbValue.Items.count) do if lbValue.Selected[iIndex] then slOutputIndexSelected.Add(IntToStr(iIndex)); end; finally FreeAndNil(frmDialog); end; // with frmDialog finally ProcedureHolder.Free; end; end; function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean; begin result := InnerShowInputListBox(sCaption, sPrompt, False, slValueList, nil, sValue, SelectedChoice); end; function ShowInputMultiSelectListBox(const sCaption, sPrompt : String; slValueList, slOutputIndexSelected : TStringList) : Boolean; var sDummyValue:string; iDummySelectedChoice:integer; begin if slValueList.Count>0 then sDummyValue := slValueList.Strings[0]; result := InnerShowInputListBox(sCaption, sPrompt, True, slValueList, slOutputIndexSelected, sDummyValue, iDummySelectedChoice); end; function MsgChoiceBox(const Message: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; begin Result:= MsgChoiceBox(Message, EmptyStr, Buttons, BtnDef, BtnEsc); end; function MsgChoiceBox(const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; const cButtonSpace = 8; var Index: Integer; frmMsg: TfrmMsg; CaptionWidth: Integer; MinButtonWidth, iCount: Integer; begin frmMsg:= TfrmMsg.Create(Application); try frmMsg.BorderStyle:= bsSingle; frmMsg.Position:= poScreenCenter; frmMsg.BorderIcons:= [biSystemMenu]; if Length(ACaption) > 0 then frmMsg.Caption:= ACaption else begin frmMsg.Caption:= Application.Title; end; frmMsg.lblMsg.WordWrap:= True; frmMsg.lblMsg.Caption:= Message; frmMsg.Constraints.MaxWidth:= 600; // Get default button width with TButton.Create(nil) do begin MinButtonWidth:= GetDefaultWidth; Free; end; // Calculate minimum button width for Index:= Low(Buttons) to High(Buttons) do begin CaptionWidth:= frmMsg.Canvas.TextWidth(Buttons[Index]); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; iCount:= Length(Buttons); // Add all buttons for Index:= Low(Buttons) to High(Buttons) do begin with TButton.Create(frmMsg) do begin Tag:= Index; AutoSize:= True; Caption:= Buttons[Index]; Parent:= frmMsg.pnlButtons; OnClick:= frmMsg.ButtonClick; Constraints.MinWidth:= MinButtonWidth; if Index = BtnDef then Default:= True else if (Index = BtnEsc) then begin Cancel:= True; frmMsg.Escape:= BtnEsc; end; if BtnDef > -1 then begin TabOrder:= (Tag + iCount - BtnDef) mod iCount; end; end; end; frmMsg.ShowModal; Result:= frmMsg.iSelected; finally frmMsg.Free; end; end; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; begin Result:= MsgChoiceBox(Thread, Message, EmptyStr, Buttons, BtnDef, BtnEsc); end; function MsgChoiceBox(Thread: TThread; const Message, ACaption: String; Buttons: TDynamicStringArray; BtnDef, BtnEsc: Integer): Integer; var DialogMainThread : TDialogMainThread; begin Result := -1; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowMessageChoiceBox(Message, ACaption, Buttons, BtnDef, BtnEsc); finally DialogMainThread.Free; end; end; procedure msgLoadLng; var I: TMyMsgButton; begin cLngButton[msmbOK] := rsDlgButtonOK; cLngButton[msmbNo] := rsDlgButtonNo; cLngButton[msmbYes] := rsDlgButtonYes; cLngButton[msmbCancel] := rsDlgButtonCancel; cLngButton[msmbNone] := rsDlgButtonNone; cLngButton[msmbAppend] := rsDlgButtonAppend; cLngButton[msmbResume] := rsDlgButtonResume; cLngButton[msmbCopyInto] := rsDlgButtonCopyInto; cLngButton[msmbCopyIntoAll] := rsDlgButtonCopyIntoAll; cLngButton[msmbOverwrite] := rsDlgButtonOverwrite; cLngButton[msmbOverwriteAll] := rsDlgButtonOverwriteAll; cLngButton[msmbOverwriteOlder] := rsDlgButtonOverwriteOlder; cLngButton[msmbOverwriteSmaller] := rsDlgButtonOverwriteSmaller; cLngButton[msmbOverwriteLarger] := rsDlgButtonOverwriteLarger; cLngButton[msmbAutoRenameSource] := rsDlgButtonAutoRenameSource; cLngButton[msmbAutoRenameTarget] := rsDlgButtonAutoRenameTarget; cLngButton[msmbRenameSource] := rsDlgButtonRename; cLngButton[msmbSkip] := rsDlgButtonSkip; cLngButton[msmbSkipAll] := rsDlgButtonSkipAll; cLngButton[msmbIgnore] := rsDlgButtonIgnore; cLngButton[msmbIgnoreAll] := rsDlgButtonIgnoreAll; cLngButton[msmbAll] := rsDlgButtonAll; cLngButton[msmbRetry] := rsDlgButtonRetry; cLngButton[msmbAbort] := rsDlgButtonAbort; cLngButton[msmbRetryAdmin] := rsDlgButtonRetryAdmin; cLngButton[msmbUnlock] := rsDlgButtonUnlock; cLngButton[msmbCompare] := rsDlgButtonCompare; for I:= Low(TMyMsgButton) to High(TMyMsgButton) do begin // A reminder in case someone forgots to assign text. if cLngButton[I] = EmptyStr then DCDebug('Warning: MsgBox button ' + GetEnumName(TypeInfo(TMyMsgButton), Integer(I)) + ' caption not set.'); end; end; end. doublecmd-1.1.30/src/uPinyin.pas0000644000175000001440000000234315104114162015516 0ustar alexxusersunit uPinyin; interface type TPinyinArray = array[0..20901] of Word; function PinyinMatch(a,b:UnicodeChar):boolean; implementation Uses sysutils; var PINYINTABLE: TPinyinArray; PINYINTABLELOADED: boolean = False; procedure loadPinyinTable; var f: THandle; tblpath: String; begin tblpath := ExtractFilePath(Paramstr(0)) + 'pinyin.tbl'; if FileExists(tblpath) then begin f:= FileOpen(tblpath, fmOpenRead or fmShareDenyNone); if (f <> feInvalidHandle) then begin if FileRead(f, PINYINTABLE, SizeOf(TPinyinArray)) = SizeOf(TPinyinArray) then PINYINTABLELOADED := True; FileClose(f); end; end; end; function PinyinMatch(a,b:UnicodeChar):boolean; var i,code:word; j:byte; begin PinyinMatch := True; if a = b then exit; if PINYINTABLELOADED then begin if (Ord(a) >= 19968) and (Ord(a) <= 40869) then begin i := Ord(a) - 19968; code := PINYINTABLE[i]; j := code and 31; if(j > 0) and (j+96 = Ord(b)) then exit; j := code >> 5 and 31; if(j > 0) and (j+96 = Ord(b)) then exit; j := code >> 10 and 31; if(j > 0) and (j+96 = Ord(b)) then exit; end; end; PinyinMatch := False; end; initialization loadPinyinTable; end. doublecmd-1.1.30/src/uGlobsPaths.pas0000644000175000001440000000566015104114162016323 0ustar alexxusersunit uGlobsPaths; interface var gpExePath : String = ''; // executable directory gpCfgDir : String = ''; // directory from which configuration files are used gpGlobalCfgDir : String = ''; // config dir global for all user gpCmdLineCfgDir : String = ''; // config dir passed on the command line gpLngDir : String = ''; // path to language *.po files gpPixmapPath : String = ''; // path to pixmaps gpHighPath : String = ''; // editor highlighter directory gpCacheDir : String = ''; // cache directory gpThumbCacheDir : String = ''; // thumbnails cache directory //Global Configuration Filename const gcfExtensionAssociation : string = 'extassoc.xml'; procedure LoadPaths; procedure UpdateEnvironmentVariable; implementation uses SysUtils, LazFileUtils, uDebug, DCOSUtils, DCStrUtils, uSysFolders; var gpExeFile: String; function GetAppName : String; begin Result := 'doublecmd'; end; procedure UpdateEnvironmentVariable; begin mbSetEnvironmentVariable('COMMANDER_INI', gpCfgDir + 'doublecmd.xml'); mbSetEnvironmentVariable('DC_CONFIG_PATH', ExcludeTrailingPathDelimiter(gpCfgDir)); mbSetEnvironmentVariable('COMMANDER_INI_PATH', ExcludeTrailingPathDelimiter(gpCfgDir)); end; procedure LoadPaths; begin OnGetApplicationName := @GetAppName; if gpCmdLineCfgDir <> EmptyStr then begin if GetPathType(gpCmdLineCfgDir) <> ptAbsolute then gpCmdLineCfgDir := IncludeTrailingPathDelimiter(mbGetCurrentDir) + gpCmdLineCfgDir; gpCmdLineCfgDir := ExpandAbsolutePath(gpCmdLineCfgDir); gpCfgDir := gpCmdLineCfgDir; end else if mbFileExists(gpGlobalCfgDir + 'doublecmd.inf') then gpCfgDir := gpGlobalCfgDir else begin gpCfgDir := GetAppConfigDir; if gpCfgDir = EmptyStr then begin DCDebug('Warning: Cannot get user config directory.'); gpCfgDir := gpGlobalCfgDir; end; end; if gpCfgDir <> gpGlobalCfgDir then gpCacheDir := GetAppCacheDir else begin gpCacheDir := gpExePath + 'cache'; end; DCDebug('Executable directory: ', gpExePath); DCDebug('Configuration directory: ', gpCfgDir); DCDebug('Global configuration directory: ', gpGlobalCfgDir); gpCfgDir := IncludeTrailingPathDelimiter(gpCfgDir); gpLngDir := gpExePath + 'language' + DirectorySeparator; gpPixmapPath := gpExePath + 'pixmaps' + DirectorySeparator; gpHighPath:= gpExePath + 'highlighters' + DirectorySeparator; gpThumbCacheDir := gpCacheDir + PathDelim + 'thumbnails'; // set up environment variables UpdateEnvironmentVariable; mbSetEnvironmentVariable('COMMANDER_EXE', gpExeFile); mbSetEnvironmentVariable('COMMANDER_DRIVE', ExtractRootDir(gpExePath)); mbSetEnvironmentVariable('COMMANDER_PATH', ExcludeTrailingBackslash(gpExePath)); end; procedure Initialize; begin gpExeFile := ParamStr(0); gpExeFile := TryReadAllLinks(gpExeFile); gpExePath := ExtractFilePath(gpExeFile); gpGlobalCfgDir := gpExePath + 'settings' + DirectorySeparator; end; initialization Initialize; end. doublecmd-1.1.30/src/uColorExt.pas0000644000175000001440000002151615104114162016012 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Load colors of files in file panels Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uColorExt; {$mode objfpc}{$H+} interface uses Classes, Graphics, uFile, uMasks, uSearchTemplate, DCXmlConfig, DCJsonConfig, fpJson; type { TMaskItem } TMaskItem = class private FExt: String; FModeStr: String; FMaskList: TMaskList; FAttrList: TMaskList; FTemplate: TSearchTemplate; FColor: array[0..1] of TColor; private function GetColor: TColor; procedure SetColor(AValue: TColor); procedure SetExt(const AValue: String); procedure SetModeStr(const AValue: String); public sName: String; destructor Destroy; override; procedure Assign(ASource: TMaskItem); property sExt: String read FExt write SetExt; property cColor: TColor read GetColor write SetColor; property sModeStr: String read FModeStr write SetModeStr; end; { TColorExt } TColorExt = class private FStyle: Integer; FMaskItems: TList; function GetCount: Integer; function GetItems(const Index: Integer): TMaskItem; public constructor Create; destructor Destroy; override; procedure Clear; procedure Add(AItem: TMaskItem); function GetColorBy(const AFile: TFile): TColor; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Load(AConfig: TJSONObject); overload; procedure Save(AConfig: TJSONObject); overload; procedure UpdateStyle; property Count: Integer read GetCount; property Items[const Index: Integer]: TMaskItem read GetItems; default; end; implementation uses SysUtils, uDebug, uGlobs, uFileProperty, uColors; { TMaskItem } procedure TMaskItem.SetExt(const AValue: String); var ATemplate: TSearchTemplate; begin FExt:= AValue; FreeAndNil(FMaskList); // Plain mask if not IsMaskSearchTemplate(FExt) then begin FreeAndNil(FTemplate); if (Length(FExt) > 0) then FMaskList:= TMaskList.Create(FExt); end // Search template else begin ATemplate:= gSearchTemplateList.TemplateByName[PAnsiChar(FExt) + 1]; if (ATemplate = nil) then FreeAndNil(FTemplate) else begin if (FTemplate = nil) then begin FTemplate:= TSearchTemplate.Create; end; FTemplate.SearchRecord:= ATemplate.SearchRecord; end; end; end; function TMaskItem.GetColor: TColor; begin Result:= FColor[TColorThemes.StyleIndex]; end; procedure TMaskItem.SetColor(AValue: TColor); begin FColor[TColorThemes.StyleIndex]:= AValue; end; procedure TMaskItem.SetModeStr(const AValue: String); begin if FModeStr <> AValue then begin FModeStr:= AValue; FreeAndNil(FAttrList); if (Length(FModeStr) > 0) then FAttrList:= TMaskList.Create(FModeStr); end; end; destructor TMaskItem.Destroy; begin FAttrList.Free; FTemplate.Free; FMaskList.Free; inherited Destroy; end; procedure TMaskItem.Assign(ASource: TMaskItem); begin Assert(Assigned(ASource)); sExt := ASource.sExt; sModeStr := ASource.sModeStr; FColor[0] := ASource.FColor[0]; FColor[1] := ASource.FColor[1]; sName := ASource.sName; end; function TColorExt.GetCount: Integer; begin Result := FMaskItems.Count; end; function TColorExt.GetItems(const Index: Integer): TMaskItem; begin Result := TMaskItem(FMaskItems[Index]); end; constructor TColorExt.Create; begin FMaskItems:= TList.Create; FStyle:= TColorThemes.StyleIndex; end; destructor TColorExt.Destroy; begin Clear; FreeAndNil(FMaskItems); inherited Destroy; end; procedure TColorExt.Clear; begin while FMaskItems.Count > 0 do begin TMaskItem(FMaskItems[0]).Free; FMaskItems.Delete(0); end; end; procedure TColorExt.Add(AItem: TMaskItem); begin FMaskItems.Add(AItem); end; function TColorExt.GetColorBy(const AFile: TFile): TColor; var Attr: String; Index: Integer; MaskItem: TMaskItem; begin Result:= clDefault; if not (fpAttributes in AFile.SupportedProperties) then Attr:= EmptyStr else begin Attr:= AFile.Properties[fpAttributes].AsString; end; for Index:= 0 to FMaskItems.Count - 1 do begin MaskItem:= TMaskItem(FMaskItems[Index]); // Get color by search template if IsMaskSearchTemplate(MaskItem.FExt) then begin if Assigned(MaskItem.FTemplate) and MaskItem.FTemplate.CheckFile(AFile) then begin Result:= MaskItem.FColor[FStyle]; Exit; end; Continue; end; // Get color by extension and attribute. // If attributes field is empty then don't match directories. if ((MaskItem.FMaskList = nil) or (((MaskItem.FAttrList <> nil) or not (AFile.IsDirectory or AFile.IsLinkToDirectory)) and MaskItem.FMaskList.Matches(AFile.Name))) and ((MaskItem.FAttrList = nil) or (Length(Attr) = 0) or MaskItem.FAttrList.Matches(Attr)) then begin Result:= MaskItem.FColor[FStyle]; Exit; end; end; end; procedure TColorExt.Load(AConfig: TXmlConfig; ANode: TXmlNode); var iColor: Integer; MaskItem: TMaskItem; sAttr, sName, sExtMask: String; begin Clear; ANode := ANode.FindNode('FileFilters'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Filter') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', sName) and AConfig.TryGetValue(ANode, 'FileMasks', sExtMask) and AConfig.TryGetValue(ANode, 'Color', iColor) and AConfig.TryGetValue(ANode, 'Attributes', sAttr) then begin MaskItem := TMaskItem.Create; MaskItem.sName := sName; MaskItem.FColor[FStyle] := iColor; MaskItem.FColor[Abs(FStyle - 1)] := iColor; MaskItem.sExt := sExtMask; MaskItem.sModeStr := sAttr; FMaskItems.Add(MaskItem); end else begin DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; end; ANode := ANode.NextSibling; end; end; end; procedure TColorExt.Save(AConfig: TXmlConfig; ANode: TXmlNode); begin ANode:= AConfig.FindNode(ANode, 'FileFilters', False); if Assigned(ANode) then AConfig.DeleteNode(ANode); end; procedure TColorExt.Load(AConfig: TJSONObject); var I: Integer; AList: TJSONArray; AItem: TJSONObject; MaskItem: TMaskItem; AColors: TJSONArray; sAttr, sName, sExtMask: TJSONString; begin if not AConfig.Find('FileColors', AList) then Exit; for I:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[I]; if AItem.Find('Name', sName) and AItem.Find('Masks', sExtMask) and AItem.Find('Colors', AColors) and AItem.Find('Attributes', sAttr) then begin MaskItem := TMaskItem.Create; MaskItem.sName := sName.AsString; MaskItem.FColor[0] := AColors.Integers[0]; MaskItem.FColor[1] := AColors.Integers[1]; MaskItem.sExt := sExtMask.AsString; MaskItem.sModeStr := sAttr.AsString; FMaskItems.Add(MaskItem); end; end; end; procedure TColorExt.Save(AConfig: TJSONObject); var I: Integer; AList: TJSONArray; AItem: TJSONObject; AColors: TJSONArray; MaskItem: TMaskItem; begin if not Assigned(FMaskItems) then Exit; if AConfig.Find('FileColors', AList) then AList.Clear else begin AList:= TJSONArray.Create; AConfig.Add('FileColors', AList); end; for I:= 0 to FMaskItems.Count - 1 do begin MaskItem := TMaskItem(FMaskItems[I]); AItem:= TJSONObject.Create; AItem.Add('Name', MaskItem.sName); AItem.Add('Masks', MaskItem.sExt); AColors:= TJSONArray.Create; AColors.Add(MaskItem.FColor[0]); AColors.Add(MaskItem.FColor[1]); AItem.Add('Colors', AColors); AItem.Add('Attributes', MaskItem.sModeStr); AList.Add(AItem); end; end; procedure TColorExt.UpdateStyle; begin FStyle:= TColorThemes.StyleIndex; end; end. doublecmd-1.1.30/src/synhighlighterlua.pas0000644000175000001440000012313015104114162017613 0ustar alexxusers{------------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynHighlighterLua.pas, the Initial Author of this file is Zhou Kan. All Rights Reserved. Contributors to the SynEdit and mwEdit projects are listed in the Contributors.txt file. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. $Id: SynHighlighterLua.pas,v 1.00 2005/01/24 17:58:27 Kan Exp $ You may retrieve the latest version of this file at the SynEdit home page, located at http://SynEdit.SourceForge.net Known Issues: -------------------------------------------------------------------------------} { @abstract(Provides a Lua Script highlighter for SynEdit) @author(Zhou Kan [textrush@tom.com]) @created(June 2004) @lastmod(2005-01-24) The SynHighlighterLua unit provides SynEdit with a Lua Script (*.lua) highlighter. The highlighter formats Lua Script source code highlighting keywords, strings, numbers and characters. } unit SynHighlighterLua; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Graphics, SynEditHighlighter, SynEditTypes, SynEditStrConst; type TtkTokenKind = ( tkComment, tkFunction, tkIdentifier, tkKey, tkNull, tkNumber, tkSpace, tkString, tkSymbol, tkUnknown); TRangeState = (rsUnKnown, rsComment, rsString, rsQuoteString, rsMultilineString); TProcTableProc = procedure of object; PIdentFuncTableFunc = ^TIdentFuncTableFunc; TIdentFuncTableFunc = function: TtkTokenKind of object; const MaxKey = 185; type { TSynLuaSyn } TSynLuaSyn = class(TSynCustomHighlighter) private fLineRef: string; fLine: PChar; fLineNumber: Integer; fProcTable: array[#0..#255] of TProcTableProc; fRange: TRangeState; Run: LongInt; fCommentEnd: String; fStringLen: Integer; fToIdent: PChar; fTokenPos: Integer; fTokenID: TtkTokenKind; fIdentFuncTable: array[0 .. MaxKey] of TIdentFuncTableFunc; fCommentAttri: TSynHighlighterAttributes; fFunctionAttri: TSynHighlighterAttributes; fIdentifierAttri: TSynHighlighterAttributes; fKeyAttri: TSynHighlighterAttributes; fNumberAttri: TSynHighlighterAttributes; fSpaceAttri: TSynHighlighterAttributes; fStringAttri: TSynHighlighterAttributes; fSymbolAttri: TSynHighlighterAttributes; function KeyHash(ToHash: PChar): Integer; function KeyComp(const aKey: string): Boolean; function Func17: TtkTokenKind; function Func19: TtkTokenKind; function Func21: TtkTokenKind; function Func22: TtkTokenKind; function Func25: TtkTokenKind; function Func26: TtkTokenKind; function Func31: TtkTokenKind; function Func32: TtkTokenKind; function Func33: TtkTokenKind; function Func34: TtkTokenKind; function Func35: TtkTokenKind; function Func37: TtkTokenKind; function Func38: TtkTokenKind; function Func39: TtkTokenKind; function Func40: TtkTokenKind; function Func41: TtkTokenKind; function Func42: TtkTokenKind; function Func44: TtkTokenKind; function Func45: TtkTokenKind; function Func46: TtkTokenKind; function Func47: TtkTokenKind; function Func48: TtkTokenKind; function Func49: TtkTokenKind; function Func50: TtkTokenKind; function Func51: TtkTokenKind; function Func52: TtkTokenKind; function Func53: TtkTokenKind; function Func56: TtkTokenKind; function Func57: TtkTokenKind; function Func60: TtkTokenKind; function Func62: TtkTokenKind; function Func63: TtkTokenKind; function Func66: TtkTokenKind; function Func67: TtkTokenKind; function Func70: TtkTokenKind; function Func71: TtkTokenKind; function Func73: TtkTokenKind; function Func74: TtkTokenKind; function Func75: TtkTokenKind; function Func76: TtkTokenKind; function Func78: TtkTokenKind; function Func79: TtkTokenKind; function Func80: TtkTokenKind; function Func81: TtkTokenKind; function Func82: TtkTokenKind; function Func83: TtkTokenKind; function Func84: TtkTokenKind; function Func88: TtkTokenKind; function Func89: TtkTokenKind; function Func90: TtkTokenKind; function Func92: TtkTokenKind; function Func94: TtkTokenKind; function Func95: TtkTokenKind; function Func97: TtkTokenKind; function Func99: TtkTokenKind; function Func101: TtkTokenKind; function Func102: TtkTokenKind; function Func105: TtkTokenKind; function Func107: TtkTokenKind; function Func108: TtkTokenKind; function Func110: TtkTokenKind; function Func111: TtkTokenKind; function Func112: TtkTokenKind; function Func113: TtkTokenKind; function Func114: TtkTokenKind; function Func116: TtkTokenKind; function Func117: TtkTokenKind; function Func125: TtkTokenKind; function Func130: TtkTokenKind; function Func132: TtkTokenKind; function Func135: TtkTokenKind; function Func137: TtkTokenKind; function Func138: TtkTokenKind; function Func141: TtkTokenKind; function Func143: TtkTokenKind; function Func144: TtkTokenKind; function Func147: TtkTokenKind; function Func149: TtkTokenKind; function Func185: TtkTokenKind; function AltFunc: TtkTokenKind; procedure InitIdent; function IdentKind(MayBe: PChar): TtkTokenKind; procedure MakeMethodTables; procedure NullProc; procedure SpaceProc; procedure CRProc; procedure LFProc; procedure IdentProc; procedure NumberProc; procedure UnknownProc; procedure MinusProc; procedure CommentProc; procedure StringProc; procedure QuoteStringProc; procedure StringEndProc; procedure BraceCloseProc; procedure BraceOpenProc; procedure GreaterProc; procedure LowerProc; procedure RoundCloseProc; procedure RoundOpenProc; procedure SquareCloseProc; procedure SquareOpenProc; procedure ColonProc; procedure CommaProc; procedure SemiColonProc; procedure PointProc; procedure DirectiveProc; procedure EqualProc; procedure PlusProc; procedure StarProc; procedure SlashProc; procedure ModSymbolProc; procedure AndSymbolProc; procedure NotSymbolProc; procedure OrSymbolProc; procedure TildeProc; procedure ArrowProc; procedure QuestionProc; protected function GetIdentChars: TSynIdentChars; override; function IsFilterStored: Boolean; override; function GetSampleSource: String; override; public constructor Create(AOwner: TComponent); override; function GetRange: Pointer; override; procedure ResetRange; override; procedure SetRange(Value: Pointer); override; function GetDefaultAttribute(Index: integer): TSynHighlighterAttributes; override; function GetEol: Boolean; override; function GetTokenID: TtkTokenKind; procedure SetLine(const NewValue: String; LineNumber: Integer); override; function GetToken: String; override; procedure GetTokenEx(out TokenStart :PChar; out TokenLength :integer); override; function GetTokenAttribute: TSynHighlighterAttributes; override; function GetTokenKind: integer; override; function GetTokenPos: Integer; override; procedure Next; override; class function GetLanguageName :string; override; published property CommentAttri: TSynHighlighterAttributes read fCommentAttri write fCommentAttri; property FunctionAttri: TSynHighlighterAttributes read fFunctionAttri write fFunctionAttri; property IdentifierAttri: TSynHighlighterAttributes read fIdentifierAttri write fIdentifierAttri; property KeyAttri: TSynHighlighterAttributes read fKeyAttri write fKeyAttri; property NumberAttri: TSynHighlighterAttributes read fNumberAttri write fNumberAttri; property SpaceAttri: TSynHighlighterAttributes read fSpaceAttri write fSpaceAttri; property StringAttri: TSynHighlighterAttributes read fStringAttri write fStringAttri; property SymbolAttri: TSynHighlighterAttributes read fSymbolAttri write fSymbolAttri; end; implementation resourcestring SYNS_LangLua = 'Lua Script'; SYNS_FilterLua = 'Lua Script File (*.lua)|*.lua'; var Identifiers: array[#0..#255] of ByteBool; mHashTable : array[#0..#255] of Integer; procedure MakeIdentTable; var I: Char; begin for I := #0 to #255 do begin case I of '_', 'a'..'z', 'A'..'Z', '0'..'9': Identifiers[I] := True; else Identifiers[I] := False; end; case I in ['_', 'A'..'Z', 'a'..'z'] of True: begin if (I > #64) and (I < #91) then mHashTable[I] := Ord(I) - 64 else if (I > #96) then mHashTable[I] := Ord(I) - 95; end; else mHashTable[I] := 0; end; end; end; procedure TSynLuaSyn.InitIdent; var I: Integer; pF: PIdentFuncTableFunc; begin pF := PIdentFuncTableFunc(@fIdentFuncTable); for I := Low(fIdentFuncTable) to High(fIdentFuncTable) do begin pF^ := @AltFunc; Inc(pF); end; fIdentFuncTable[17] := @Func17; fIdentFuncTable[19] := @Func19; fIdentFuncTable[21] := @Func21; fIdentFuncTable[22] := @Func22; fIdentFuncTable[25] := @Func25; fIdentFuncTable[26] := @Func26; fIdentFuncTable[31] := @Func31; fIdentFuncTable[32] := @Func32; fIdentFuncTable[33] := @Func33; fIdentFuncTable[34] := @Func34; fIdentFuncTable[35] := @Func35; fIdentFuncTable[37] := @Func37; fIdentFuncTable[38] := @Func38; fIdentFuncTable[39] := @Func39; fIdentFuncTable[40] := @Func40; fIdentFuncTable[41] := @Func41; fIdentFuncTable[42] := @Func42; fIdentFuncTable[44] := @Func44; fIdentFuncTable[45] := @Func45; fIdentFuncTable[46] := @Func46; fIdentFuncTable[47] := @Func47; fIdentFuncTable[48] := @Func48; fIdentFuncTable[49] := @Func49; fIdentFuncTable[50] := @Func50; fIdentFuncTable[51] := @Func51; fIdentFuncTable[52] := @Func52; fIdentFuncTable[53] := @Func53; fIdentFuncTable[56] := @Func56; fIdentFuncTable[57] := @Func57; fIdentFuncTable[60] := @Func60; fIdentFuncTable[62] := @Func62; fIdentFuncTable[63] := @Func63; fIdentFuncTable[66] := @Func66; fIdentFuncTable[67] := @Func67; fIdentFuncTable[70] := @Func70; fIdentFuncTable[71] := @Func71; fIdentFuncTable[73] := @Func73; fIdentFuncTable[74] := @Func74; fIdentFuncTable[75] := @Func75; fIdentFuncTable[76] := @Func76; fIdentFuncTable[78] := @Func78; fIdentFuncTable[79] := @Func79; fIdentFuncTable[80] := @Func80; fIdentFuncTable[81] := @Func81; fIdentFuncTable[82] := @Func82; fIdentFuncTable[83] := @Func83; fIdentFuncTable[84] := @Func84; fIdentFuncTable[88] := @Func88; fIdentFuncTable[89] := @Func89; fIdentFuncTable[90] := @Func90; fIdentFuncTable[92] := @Func92; fIdentFuncTable[94] := @Func94; fIdentFuncTable[95] := @Func95; fIdentFuncTable[97] := @Func97; fIdentFuncTable[99] := @Func99; fIdentFuncTable[101] := @Func101; fIdentFuncTable[102] := @Func102; fIdentFuncTable[105] := @Func105; fIdentFuncTable[107] := @Func107; fIdentFuncTable[108] := @Func108; fIdentFuncTable[110] := @Func110; fIdentFuncTable[111] := @Func111; fIdentFuncTable[112] := @Func112; fIdentFuncTable[113] := @Func113; fIdentFuncTable[114] := @Func114; fIdentFuncTable[116] := @Func116; fIdentFuncTable[117] := @Func117; fIdentFuncTable[125] := @Func125; fIdentFuncTable[130] := @Func130; fIdentFuncTable[132] := @Func132; fIdentFuncTable[135] := @Func135; fIdentFuncTable[137] := @Func137; fIdentFuncTable[138] := @Func138; fIdentFuncTable[141] := @Func141; fIdentFuncTable[143] := @Func143; fIdentFuncTable[144] := @Func144; fIdentFuncTable[147] := @Func147; fIdentFuncTable[149] := @Func149; fIdentFuncTable[185] := @Func185; end; function TSynLuaSyn.KeyHash(ToHash: PChar): Integer; begin Result := 0; while ToHash^ in ['_', 'a'..'z', 'A'..'Z', '0'..'9'] do begin inc(Result, mHashTable[ToHash^]); inc(ToHash); end; fStringLen := ToHash - fToIdent; end; function TSynLuaSyn.KeyComp(const aKey :string) :Boolean; var I: Integer; Temp: PChar; begin Temp := fToIdent; if Length(aKey) = fStringLen then begin Result := True; for i := 1 to fStringLen do begin if Temp^ <> aKey[i] then begin Result := False; break; end; inc(Temp); end; end else Result := False; end; function TSynLuaSyn.Func17: TtkTokenKind; begin if KeyComp('if') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func19: TtkTokenKind; begin if KeyComp('deg') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func21: TtkTokenKind; begin if KeyComp('do') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func22: TtkTokenKind; begin if KeyComp('and') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func25: TtkTokenKind; begin if KeyComp('PI') then Result := tkFunction else if KeyComp('abs') then Result := tkFunction else if KeyComp('in') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func26: TtkTokenKind; begin if KeyComp('end') then Result := tkKey else if KeyComp('rad') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func31: TtkTokenKind; begin if KeyComp('tag') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func32: TtkTokenKind; begin if KeyComp('read') then Result := tkFunction else if KeyComp('call') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func33: TtkTokenKind; begin if KeyComp('ceil') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func34: TtkTokenKind; begin if KeyComp('date') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func35: TtkTokenKind; begin if KeyComp('mod') then Result := tkFunction else if KeyComp('or') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func37: TtkTokenKind; begin if KeyComp('log') then Result := tkFunction else if KeyComp('log10') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func38: TtkTokenKind; begin if KeyComp('nil') then Result := tkKey else if KeyComp('tan') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func39: TtkTokenKind; begin if KeyComp('min') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func40: TtkTokenKind; begin if KeyComp('atan') then Result := tkFunction else if KeyComp('cos') then Result := tkFunction else if KeyComp('atan2') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func41: TtkTokenKind; begin if KeyComp('max') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func42: TtkTokenKind; begin if KeyComp('break') then Result := tkKey else if KeyComp('for') then Result := tkKey else if KeyComp('acos') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func44: TtkTokenKind; begin if KeyComp('debug') then Result := tkFunction else if KeyComp('seek') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func45: TtkTokenKind; begin if KeyComp('else') then Result := tkKey else if KeyComp('sin') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func46: TtkTokenKind; begin if KeyComp('ascii') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func47: TtkTokenKind; begin if KeyComp('asin') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func48: TtkTokenKind; begin if KeyComp('local') then Result := tkKey else if KeyComp('exp') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func49: TtkTokenKind; begin if KeyComp('clock') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func50: TtkTokenKind; begin if KeyComp('getn') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func51: TtkTokenKind; begin if KeyComp('then') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func52: TtkTokenKind; begin if KeyComp('not') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func53: TtkTokenKind; begin if KeyComp('gsub') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func56: TtkTokenKind; begin if KeyComp('_ALERT') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func57: TtkTokenKind; begin if KeyComp('dofile') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func60: TtkTokenKind; begin if KeyComp('gcinfo') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func62: TtkTokenKind; begin if KeyComp('elseif') then Result := tkKey else if KeyComp('exit') then Result := tkFunction else if KeyComp('while') then Result := tkKey else if KeyComp('rename') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func63: TtkTokenKind; begin if KeyComp('foreach') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func66: TtkTokenKind; begin if KeyComp('_STDIN') then Result := tkFunction else if KeyComp('ldexp') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func67: TtkTokenKind; begin if KeyComp('next') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func70: TtkTokenKind; begin if KeyComp('type') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func71: TtkTokenKind; begin if KeyComp('random') then Result := tkFunction else if KeyComp('repeat') then Result := tkKey else if KeyComp('floor') then Result := tkFunction else if KeyComp('flush') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func73: TtkTokenKind; begin if KeyComp('foreachi') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func74: TtkTokenKind; begin if KeyComp('frexp') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func75: TtkTokenKind; begin if KeyComp('globals') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func76: TtkTokenKind; begin if KeyComp('newtag') then Result := tkFunction else if KeyComp('sort') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func78: TtkTokenKind; begin if KeyComp('sqrt') then Result := tkFunction else if KeyComp('settag') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func79: TtkTokenKind; begin if KeyComp('format') then Result := tkFunction else if KeyComp('getenv') then Result := tkFunction else if KeyComp('error') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func80: TtkTokenKind; begin if KeyComp('_INPUT') then Result := tkFunction else if KeyComp('write') then Result := tkFunction else if KeyComp('rawget') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func81: TtkTokenKind; begin if KeyComp('until') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func82: TtkTokenKind; begin if KeyComp('print') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func83: TtkTokenKind; begin if KeyComp('getinfo') then Result := tkFunction else if KeyComp('getlocal') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func84: TtkTokenKind; begin if KeyComp('_STDERR') then Result := tkFunction else if KeyComp('getargs') then Result := tkFunction else if KeyComp('remove') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func88: TtkTokenKind; begin if KeyComp('assert') then Result := tkFunction else if KeyComp('readfrom') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func89: TtkTokenKind; begin if KeyComp('tmpname') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func90: TtkTokenKind; begin if KeyComp('execute') then Result := tkFunction else if KeyComp('openfile') then Result := tkFunction else if KeyComp('getglobal') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func92: TtkTokenKind; begin if KeyComp('rawset') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func94: TtkTokenKind; begin if KeyComp('strchar') then Result := tkFunction else if KeyComp('strlen') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func95: TtkTokenKind; begin if KeyComp('setlocal') then Result := tkFunction else if KeyComp('closefile') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func97: TtkTokenKind; begin if KeyComp('strfind') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func99: TtkTokenKind; begin if KeyComp('_STDOUT') then Result := tkFunction else if KeyComp('appendto') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func101: TtkTokenKind; begin if KeyComp('setlocale') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func102: TtkTokenKind; begin if KeyComp('setglobal') then Result := tkFunction else if KeyComp('return') then Result := tkKey else if KeyComp('strrep') then Result := tkFunction else if KeyComp('_VERSION') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func105: TtkTokenKind; begin if KeyComp('strsub') then Result := tkFunction else if KeyComp('tremove') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func107: TtkTokenKind; begin if KeyComp('foreachvar') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func108: TtkTokenKind; begin if KeyComp('randomseed') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func110: TtkTokenKind; begin if KeyComp('function') then Result := tkKey else Result := tkIdentifier; end; function TSynLuaSyn.Func111: TtkTokenKind; begin if KeyComp('nextvar') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func112: TtkTokenKind; begin if KeyComp('tinsert') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func113: TtkTokenKind; begin if KeyComp('_OUTPUT') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func114: TtkTokenKind; begin if KeyComp('dostring') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func116: TtkTokenKind; begin if KeyComp('tonumber') then Result := tkFunction else if KeyComp('strbyte') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func117: TtkTokenKind; begin if KeyComp('writeto') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func125: TtkTokenKind; begin if KeyComp('rawgettable') then Result := tkFunction else if KeyComp('collectgarbage') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func130: TtkTokenKind; begin if KeyComp('tostring') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func132: TtkTokenKind; begin if KeyComp('setcallhook') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func135: TtkTokenKind; begin if KeyComp('rawgetglobal') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func137: TtkTokenKind; begin if KeyComp('gettagmethod') then Result := tkFunction else if KeyComp('rawsettable') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func138: TtkTokenKind; begin if KeyComp('strlower') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func141: TtkTokenKind; begin if KeyComp('strupper') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func143: TtkTokenKind; begin if KeyComp('_ERRORMESSAGE') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func144: TtkTokenKind; begin if KeyComp('setlinehook') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func147: TtkTokenKind; begin if KeyComp('rawsetglobal') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func149: TtkTokenKind; begin if KeyComp('settagmethod') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.Func185: TtkTokenKind; begin if KeyComp('copytagmethods') then Result := tkFunction else Result := tkIdentifier; end; function TSynLuaSyn.AltFunc: TtkTokenKind; begin Result := tkIdentifier; end; function TSynLuaSyn.IdentKind(MayBe: PChar): TtkTokenKind; var HashKey: Integer; begin fToIdent := MayBe; HashKey := KeyHash(MayBe); if HashKey <= MaxKey then Result := fIdentFuncTable[HashKey]() else Result := tkIdentifier; end; procedure TSynLuaSyn.MakeMethodTables; var I: Char; begin for I := #0 to #255 do case I of #0: fProcTable[I] := @NullProc; #10: fProcTable[I] := @LFProc; #13: fProcTable[I] := @CRProc; #1..#9, #11, #12, #14..#32 : fProcTable[I] := @SpaceProc; 'A'..'Z', 'a'..'z', '_': fProcTable[I] := @IdentProc; '0'..'9': fProcTable[I] := @NumberProc; '''': fProcTable[I] := @StringProc; '"': fProcTable[I] := @QuoteStringProc; '-': fProcTable[I] := @MinusProc; '}': fProcTable[I] := @BraceCloseProc; '{': fProcTable[I] := @BraceOpenProc; '>': fProcTable[I] := @GreaterProc; '<': fProcTable[I] := @LowerProc; ')': fProcTable[I] := @RoundCloseProc; '(': fProcTable[I] := @RoundOpenProc; ']': fProcTable[I] := @SquareCloseProc; '[': fProcTable[I] := @SquareOpenProc; ':': fProcTable[I] := @ColonProc; ',': fProcTable[I] := @CommaProc; ';': fProcTable[I] := @SemiColonProc; '.': fProcTable[I] := @PointProc; '#': fProcTable[I] := @DirectiveProc; '=': fProcTable[I] := @EqualProc; '+': fProcTable[I] := @PlusProc; '*': fProcTable[I] := @StarProc; '/': fProcTable[I] := @SlashProc; '%': fProcTable[I] := @ModSymbolProc; '&': fProcTable[I] := @AndSymbolProc; '!': fProcTable[I] := @NotSymbolProc; '|': fProcTable[I] := @OrSymbolProc; '~': fProcTable[I] := @TildeProc; '^': fProcTable[I] := @ArrowProc; '?': fProcTable[I] := @QuestionProc; else fProcTable[I] := @UnknownProc; end; end; constructor TSynLuaSyn.Create(AOwner: TComponent); begin inherited Create(AOwner); fCommentAttri := TSynHighLighterAttributes.Create(@SYNS_AttrComment, SYNS_XML_AttrComment); fCommentAttri.Foreground := clGreen; AddAttribute(fCommentAttri); fFunctionAttri := TSynHighLighterAttributes.Create(@SYNS_AttrFunction, SYNS_XML_AttrFunction); fFunctionAttri.Foreground := $00C05000; AddAttribute(fFunctionAttri); fIdentifierAttri := TSynHighLighterAttributes.Create(@SYNS_AttrIdentifier, SYNS_XML_AttrIdentifier); fIdentifierAttri.Foreground := clWindowText; AddAttribute(fIdentifierAttri); fKeyAttri := TSynHighLighterAttributes.Create(@SYNS_AttrReservedWord, SYNS_XML_AttrReservedWord); fKeyAttri.Foreground := clBlue; AddAttribute(fKeyAttri); fNumberAttri := TSynHighLighterAttributes.Create(@SYNS_AttrNumber, SYNS_XML_AttrNumber); fNumberAttri.Foreground := clPurple; AddAttribute(fNumberAttri); fSpaceAttri := TSynHighLighterAttributes.Create(@SYNS_AttrSpace, SYNS_XML_AttrSpace); AddAttribute(fSpaceAttri); fStringAttri := TSynHighLighterAttributes.Create(@SYNS_AttrString, SYNS_XML_AttrString); fStringAttri.Foreground := clMaroon; AddAttribute(fStringAttri); fSymbolAttri := TSynHighLighterAttributes.Create(@SYNS_AttrSymbol, SYNS_XML_AttrSymbol); fSymbolAttri.Foreground := clNavy; AddAttribute(fSymbolAttri); SetAttributesOnChange(@DefHighlightChange); InitIdent; MakeMethodTables; fRange := rsUnknown; fDefaultFilter := SYNS_FilterLua; end; procedure TSynLuaSyn.SpaceProc; begin fTokenID := tkSpace; repeat Inc(Run); until not (fLine[Run] in [#1..#32]); end; procedure TSynLuaSyn.NullProc; begin fTokenID := tkNull; end; procedure TSynLuaSyn.CRProc; begin fTokenID := tkSpace; Inc(Run); if fLine[Run] = #10 then Inc(Run); end; procedure TSynLuaSyn.LFProc; begin fTokenID := tkSpace; Inc(Run); end; procedure TSynLuaSyn.MinusProc; var Idx: Integer; begin case fLine[Run + 1] of '-': begin fTokenID := tkComment; if (fLine[Run + 2] = '[') and (fLine[Run + 3] in ['[', '=']) then begin Idx := Run + 2; repeat Inc(Idx); until fLine[Idx] in [#0, #10, #13, '[']; if (fLine[Idx] = '[') then begin if (fLine[Run + 3] = '[') then fCommentEnd := ']]' else begin SetString(fCommentEnd, fLine + Run + 3, Idx - (Run + 3)); fCommentEnd := ']' + fCommentEnd + ']'; end; fRange := rsComment; Run := Idx; Exit; end; end; repeat Inc(Run); until fLine[Run] in [#0, #10, #13]; end; '=', '>': begin Inc(Run, 2); fTokenID := tkSymbol; end else begin fTokenID := tkSymbol; Inc(Run); {subtract} end; end; end; procedure TSynLuaSyn.CommentProc; var ALength: Integer; ACommentEnd: PAnsiChar; begin case FLine[Run] of #0: NullProc; #10: LFProc; #13: CRProc; else begin fTokenID := tkComment; ALength := Length(fCommentEnd); ACommentEnd := PAnsiChar(fCommentEnd); repeat if (StrLComp(fLine + Run, ACommentEnd, ALength) = 0) then begin Inc(Run, ALength); fRange := rsUnKnown; Break; end; Inc(Run); until fLine[Run] in [#0, #10, #13]; end; end; end; procedure TSynLuaSyn.StringProc; begin fTokenID := tkString; repeat if fLine[Run] = '\' then begin if fLine[Run + 1] in [#39, '\'] then Inc(Run); end; Inc(Run); until fLine[Run] in [#0, #10, #13, #39]; if fLine[Run] = #39 then Inc(Run); end; procedure TSynLuaSyn.QuoteStringProc; begin fTokenID := tkString; repeat if fLine[Run] = '\' then begin case fLine[Run + 1] of #34, '\': Inc(Run); #00: begin Inc(Run); fRange := rsMultilineString; Exit; end; end; end; Inc(Run); until fLine[Run] in [#0, #10, #13, #34]; if FLine[Run] = #34 then Inc(Run); end; procedure TSynLuaSyn.StringEndProc; begin fTokenID := tkString; case FLine[Run] of #0: begin NullProc; Exit; end; #10: begin LFProc; Exit; end; #13: begin CRProc; Exit; end; end; fRange := rsUnknown; repeat case FLine[Run] of #0, #10, #13: Break; '\': begin case fLine[Run + 1] of #34, '\': Inc(Run); #00: begin Inc(Run); fRange := rsMultilineString; Exit; end; end; end; #34: Break; end; Inc(Run); until fLine[Run] in [#0, #10, #13, #34]; if FLine[Run] = #34 then Inc(Run); end; procedure TSynLuaSyn.BraceCloseProc; begin Inc(Run); fTokenId := tkSymbol; end; procedure TSynLuaSyn.BraceOpenProc; begin Inc(Run); fTokenId := tkSymbol; end; procedure TSynLuaSyn.GreaterProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {greater than or equal to} '>': begin if FLine[Run + 2] = '=' then {shift right assign} Inc(Run, 3) else {shift right} Inc(Run, 2); end; else {greater than} Inc(run); end; end; procedure TSynLuaSyn.LowerProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {less than or equal to} '<': begin if FLine[Run + 2] = '=' then {shift left assign} Inc(Run, 3) else {shift left} Inc(Run, 2); end; else Inc(Run); {less than} end; end; procedure TSynLuaSyn.RoundCloseProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.RoundOpenProc; begin Inc(Run); FTokenID := tkSymbol; end; procedure TSynLuaSyn.SquareCloseProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.SquareOpenProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.ColonProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of ':': Inc(Run, 2); {scope resolution operator} else {colon} Inc(Run); end; end; procedure TSynLuaSyn.CommaProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.SemiColonProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.PointProc; begin fTokenID := tkSymbol; if (FLine[Run + 1] = '.') and (FLine[Run + 2] = '.') then {ellipse} Inc(Run, 3) else if FLine[Run + 1] in ['0'..'9'] then // float begin Dec(Run); // numberproc must see the point NumberProc; end else {point} Inc(Run); end; procedure TSynLuaSyn.DirectiveProc; begin Inc(Run); fTokenID := tkSymbol; end; procedure TSynLuaSyn.EqualProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {logical equal} else {assign} Inc(Run); end; end; procedure TSynLuaSyn.IdentProc; begin fTokenID := IdentKind((fLine + Run)); Inc(Run, fStringLen); while Identifiers[fLine[Run]] do Inc(Run); end; procedure TSynLuaSyn.PlusProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {add assign} '+': Inc(Run, 2); {increment} else {add} Inc(Run); end; end; procedure TSynLuaSyn.StarProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {multiply assign} else Inc(Run); {star} end; end; procedure TSynLuaSyn.SlashProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {multiply assign} else Inc(Run); {star} end; end; procedure TSynLuaSyn.ModSymbolProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {mod assign} else Inc(Run); {mod} end; end; procedure TSynLuaSyn.AndSymbolProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); // and assign '&': Inc(Run, 2); // logical and else Inc(Run); // and end; end; procedure TSynLuaSyn.NotSymbolProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {not equal} else Inc(Run); {not} end; end; procedure TSynLuaSyn.OrSymbolProc; begin fTokenID := tkSymbol; case FLine[Run + 1] of '=': Inc(Run, 2); {or assign} '|': Inc(Run, 2); {logical or} else Inc(Run); {or} end; end; procedure TSynLuaSyn.TildeProc; begin Inc(Run); {bitwise complement} fTokenId := tkSymbol; end; procedure TSynLuaSyn.ArrowProc; begin Inc(Run); {bitwise complement} fTokenId := tkSymbol; end; procedure TSynLuaSyn.QuestionProc; begin fTokenID := tkSymbol; {conditional} Inc(Run); end; procedure TSynLuaSyn.NumberProc; begin Inc(Run); fTokenID := tkNumber; while FLine[Run] in ['0'..'9', '.', 'u', 'U', 'l', 'L', 'x', 'X', 'e', 'E', 'f', 'F'] do //Kan //['0'..'9', 'A'..'F', 'a'..'f', '.', 'u', 'U', 'l', 'L', 'x', 'X'] do //Commented by Kan begin case FLine[Run] of '.': if FLine[Run + 1] = '.' then break; end; Inc(Run); end; end; procedure TSynLuaSyn.UnknownProc; begin Inc(Run); while (fLine[Run] in [#128..#191]) or // continued utf8 subcode ((fLine[Run] <> #0) and (fProcTable[fLine[Run]] = @UnknownProc)) do Inc(Run); fTokenID := tkUnknown; end; procedure TSynLuaSyn.SetLine(const NewValue :String; LineNumber :Integer); begin fLineRef := NewValue; fLine := PChar(fLineRef); Run := 0; fLineNumber := LineNumber; Next; end; procedure TSynLuaSyn.Next; begin fTokenPos := Run; case fRange of rsComment: CommentProc(); rsMultilineString: StringEndProc; else begin fRange := rsUnknown; fProcTable[fLine[Run]]; end; end; end; class function TSynLuaSyn.GetLanguageName :string; begin Result := SYNS_LangLua; end; function TSynLuaSyn.GetDefaultAttribute(Index :integer) :TSynHighlighterAttributes; begin case Index of SYN_ATTR_COMMENT : Result := fCommentAttri; SYN_ATTR_IDENTIFIER : Result := fIdentifierAttri; SYN_ATTR_KEYWORD : Result := fKeyAttri; SYN_ATTR_STRING : Result := fStringAttri; SYN_ATTR_WHITESPACE : Result := fSpaceAttri; SYN_ATTR_SYMBOL : Result := fSymbolAttri; else Result := nil; end; end; function TSynLuaSyn.GetEol: Boolean; begin Result := fTokenID = tkNull; end; function TSynLuaSyn.GetToken: String; var Len: LongInt; begin Len := Run - fTokenPos; SetString(Result, (FLine + fTokenPos), Len); end; procedure TSynLuaSyn.GetTokenEx(out TokenStart :PChar; out TokenLength :integer); begin TokenLength := Run - fTokenPos; TokenStart := FLine + fTokenPos; end; function TSynLuaSyn.GetTokenID: TtkTokenKind; begin Result := fTokenId; end; function TSynLuaSyn.GetTokenAttribute :TSynHighlighterAttributes; begin case GetTokenID of tkComment: Result := fCommentAttri; tkFunction: Result := fFunctionAttri; tkIdentifier: Result := fIdentifierAttri; tkKey: Result := fKeyAttri; tkNumber: Result := fNumberAttri; tkSpace: Result := fSpaceAttri; tkString: Result := fStringAttri; tkSymbol: Result := fSymbolAttri; tkUnknown: Result := fIdentifierAttri; else Result := nil; end; end; function TSynLuaSyn.GetTokenKind: integer; begin Result := Ord(fTokenId); end; function TSynLuaSyn.GetTokenPos: Integer; begin Result := fTokenPos; end; function TSynLuaSyn.GetIdentChars: TSynIdentChars; begin Result := ['_', 'a'..'z', 'A'..'Z', '0'..'9']; end; function TSynLuaSyn.IsFilterStored :Boolean; begin Result := (fDefaultFilter <> SYNS_FilterLua); end; function TSynLuaSyn.GetSampleSource: String; begin Result:= '-- Sample comment'#13 + 'local str = "String"'#13 + 'a = {}'#13 + 'local x = 20'#13 + 'for i = 1,10 do'#13 + ' local y = 0'#13 + ' a[i] = function () y = y + 1; return x + y end'#13 + 'end'#13 + 'print(str)'; end; procedure TSynLuaSyn.ResetRange; begin fRange := rsUnknown; end; procedure TSynLuaSyn.SetRange(Value: Pointer); begin {$PUSH}{$HINTS OFF}{$WARNINGS OFF} fRange := TRangeState(PtrInt(Value)); {$POP} end; function TSynLuaSyn.GetRange: Pointer; begin {$PUSH}{$HINTS OFF} Result := Pointer(PtrInt(fRange)); {$POP} end; initialization MakeIdentTable; RegisterPlaceableHighlighter(TSynLuaSyn); end. doublecmd-1.1.30/src/rpc/0000755000175000001440000000000015104114162014140 5ustar alexxusersdoublecmd-1.1.30/src/rpc/uworker.pas0000644000175000001440000002650015104114162016346 0ustar alexxusersunit uWorker; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SyncObjs, uService; const RPC_Execute = 1; type { TMasterService } TMasterService = class(TBaseService) public constructor Create(const AName: String); override; procedure ProcessRequest(ATransport: TBaseTransport; ACommand: Int32; ARequest: TStream); override; end; const RPC_Terminate = 0; RPC_FileOpen = 1; RPC_FileCreate = 2; RPC_DeleteFile = 3; RPC_RenameFile = 4; RPC_FileExists = 9; RPC_FileGetAttr = 10; RPC_FileSetAttr = 11; RPC_FileSetTime = 12; RPC_FileSetReadOnly = 14; RPC_FileCopyAttr = 15; RPC_FileCopy = 19; RPC_FindFirst = 16; RPC_FindNext = 17; RPC_FindClose = 18; RPC_CreateHardLink = 8; RPC_CreateSymbolicLink = 7; RPC_CreateDirectory = 5; RPC_RemoveDirectory = 6; RPC_DirectoryExists = 13; type { TWorkerService } TWorkerService = class(TBaseService) public constructor Create(const AName: String); override; procedure ProcessRequest(ATransport: TBaseTransport; ACommand: Int32; ARequest: TStream); override; end; var WorkerProcessId: SizeUInt = 0; implementation uses DCBasicTypes, DCOSUtils, uFindEx, uDebug, uFileCopyEx; function FileCopyProgress(TotalBytes, DoneBytes: Int64; UserData: Pointer): LongBool; var Code: UInt32 = 1; ATransport: TBaseTransport absolute UserData; begin ATransport.WriteBuffer(Code, SizeOf(UInt32)); ATransport.WriteBuffer(TotalBytes, SizeOf(TotalBytes)); ATransport.WriteBuffer(DoneBytes, SizeOf(DoneBytes)); ATransport.ReadBuffer(Result, SizeOf(Result)); end; { TMasterService } constructor TMasterService.Create(const AName: String); begin inherited Create(AName); Self.FVerifyChild:= True; end; procedure TMasterService.ProcessRequest(ATransport: TBaseTransport; ACommand: Int32; ARequest: TStream); var Result: LongBool = True; begin case ACommand of RPC_Execute: begin ARequest.ReadBuffer(WorkerProcessId, SizeOf(SizeUInt)); ATransport.WriteBuffer(Result, SizeOf(Result)); FEvent.SetEvent; end; end; end; { TWorkerService } constructor TWorkerService.Create(const AName: String); begin inherited Create(AName); Self.FVerifyParent:= True; end; procedure TWorkerService.ProcessRequest(ATransport: TBaseTransport; ACommand: Int32; ARequest: TStream); const FIND_MAX = 512; var Mode: Integer; Index: Integer; Handle: THandle; Options: UInt32; NewName: String; FileName: String; Result: LongBool; Attr: TFileAttrs; LastError: Integer; Data: TMemoryStream; SearchRec: PSearchRecEx; CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx; ModificationTime: TFileTimeEx; FileAttr: TFileAttributeData; procedure WriteSearchRec(Data: TMemoryStream; SearchRec: PSearchRecEx); begin Data.WriteBuffer(SearchRec^.PlatformTime, SizeOf(SearchRec^.PlatformTime)); Data.WriteBuffer(SearchRec^.LastAccessTime, SizeOf(SearchRec^.LastAccessTime)); Data.WriteBuffer(SearchRec^.Time, SizeOf(TFileTime)); Data.WriteBuffer(SearchRec^.Size, SizeOf(Int64)); Data.WriteBuffer(SearchRec^.Attr, SizeOf(TFileAttrs)); Data.WriteAnsiString(SearchRec^.Name); end; begin case ACommand of RPC_DeleteFile: begin FileName:= ARequest.ReadAnsiString; DCDebug('DeleteFile ', FileName); Result:= mbDeleteFile(FileName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileExists: begin FileName:= ARequest.ReadAnsiString; DCDebug('FileExists ', FileName); Result:= mbFileExists(FileName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileGetAttr: begin FileName:= ARequest.ReadAnsiString; Mode:= ARequest.ReadDWord; DCDebug('FileGetAttr ', FileName); case Mode of Ord(LongBool(False)): Result:= LongBool(mbFileGetAttr(FileName)); Ord(LongBool(True)): Result:= LongBool(mbFileGetAttrNoLinks(FileName)); maxSmallint: Result:= LongBool(mbFileGetAttr(FileName, FileAttr)); end; LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); if (Mode = maxSmallint) then ATransport.WriteBuffer(FileAttr, SizeOf(FileAttr)); end; RPC_FileSetAttr: begin FileName:= ARequest.ReadAnsiString; Attr:= ARequest.ReadDWord; DCDebug('FileSetAttr ', FileName); Result:= mbFileSetAttr(FileName, Attr); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileSetTime: begin FileName:= ARequest.ReadAnsiString; ARequest.ReadBuffer(ModificationTime, SizeOf(TFileTimeEx)); ARequest.ReadBuffer(CreationTime, SizeOf(TFileTimeEx)); ARequest.ReadBuffer(LastAccessTime, SizeOf(TFileTimeEx)); DCDebug('FileSetTime ', FileName); Result:= mbFileSetTimeEx(FileName, ModificationTime, CreationTime, LastAccessTime); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileSetReadOnly: begin FileName:= ARequest.ReadAnsiString; Attr:= ARequest.ReadDWord; DCDebug('FileSetReadOnly ', FileName); Result:= mbFileSetReadOnly(FileName, Boolean(Attr)); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileCopyAttr: begin FileName:= ARequest.ReadAnsiString; NewName:= ARequest.ReadAnsiString; Attr:= ARequest.ReadDWord; DCDebug('FileCopyAttr ', NewName); Result:= LongBool(mbFileCopyAttr(FileName, NewName, TCopyAttributesOptions(Attr))); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileOpen: begin FileName:= ARequest.ReadAnsiString; Mode:= ARequest.ReadDWord; DCDebug('FileOpen ', FileName); Handle:= mbFileOpen(FileName, Mode); if (Handle <> feInvalidHandle) then LastError:= 0 else begin LastError:= GetLastOSError; end; ATransport.WriteBuffer(LastError, SizeOf(LastError)); if (LastError = 0) then ATransport.WriteHandle(Handle); end; RPC_FileCreate: begin FileName:= ARequest.ReadAnsiString; Mode:= ARequest.ReadDWord; DCDebug('FileCreate ', FileName); Handle:= mbFileCreate(FileName, Mode); if (Handle <> feInvalidHandle) then LastError:= 0 else begin LastError:= GetLastOSError; end; ATransport.WriteBuffer(LastError, SizeOf(LastError)); if (LastError = 0) then ATransport.WriteHandle(Handle); end; RPC_RenameFile: begin FileName:= ARequest.ReadAnsiString; NewName:= ARequest.ReadAnsiString; DCDebug('RenameFile ', FileName); Result:= mbRenameFile(FileName, NewName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FindFirst: begin Index:= 0; FileName:= ARequest.ReadAnsiString; Mode:= ARequest.ReadDWord; New(SearchRec); LastError:= FindFirstEx(FileName, Mode, SearchRec^); if LastError = 0 then begin Data:= TMemoryStream.Create; Data.WriteBuffer(SearchRec, SizeOf(SearchRec)); repeat Inc(Index); WriteSearchRec(Data, SearchRec); until not ((Index < FIND_MAX) and (FindNextEx(SearchRec^) = 0)); Index:= Data.Size; end; ATransport.WriteBuffer(LastError, SizeOf(LastError)); ATransport.WriteBuffer(Index, SizeOf(Index)); if Index > 0 then begin ATransport.WriteBuffer(Data.Memory^, Index); Data.Free; end; end; RPC_FindNext: begin Index:= 0; ARequest.ReadBuffer(SearchRec, SizeOf(SearchRec)); LastError:= FindNextEx(SearchRec^); if LastError = 0 then begin Data:= TMemoryStream.Create; Data.WriteBuffer(SearchRec, SizeOf(SearchRec)); repeat Inc(Index); WriteSearchRec(Data, SearchRec); until not ((Index < FIND_MAX) and (FindNextEx(SearchRec^) = 0)); Index:= Data.Size; end; ATransport.WriteBuffer(LastError, SizeOf(LastError)); ATransport.WriteBuffer(Index, SizeOf(Index)); if Index > 0 then begin ATransport.WriteBuffer(Data.Memory^, Index); Data.Free; end; end; RPC_FindClose: begin ARequest.ReadBuffer(SearchRec, SizeOf(SearchRec)); FindCloseEx(SearchRec^); Dispose(SearchRec); end; RPC_CreateHardLink: begin FileName:= ARequest.ReadAnsiString; NewName:= ARequest.ReadAnsiString; DCDebug('CreateHardLink ', NewName); Result:= CreateHardLink(FileName, NewName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_CreateSymbolicLink: begin FileName:= ARequest.ReadAnsiString; NewName:= ARequest.ReadAnsiString; Attr:= ARequest.ReadDWord; DCDebug('CreateSymbolicLink ', NewName); Result:= CreateSymLink(FileName, NewName, Attr); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_CreateDirectory: begin FileName:= ARequest.ReadAnsiString; DCDebug('CreateDirectory ', FileName); Result:= mbCreateDir(FileName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_RemoveDirectory: begin FileName:= ARequest.ReadAnsiString; DCDebug('RemoveDirectory ', FileName); Result:= mbRemoveDir(FileName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_DirectoryExists: begin FileName:= ARequest.ReadAnsiString; DCDebug('DirectoryExists ', FileName); Result:= mbDirectoryExists(FileName); LastError:= GetLastOSError; ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_FileCopy: begin FileName:= ARequest.ReadAnsiString; NewName:= ARequest.ReadAnsiString; Options:= ARequest.ReadDWord; DCDebug('FileCopy ', FileName); Result:= FileCopyEx(FileName, NewName, Options, @FileCopyProgress, ATransport); LastError:= GetLastOSError; Index:= 0; ATransport.WriteBuffer(Index, SizeOf(Index)); ATransport.WriteBuffer(Result, SizeOf(Result)); ATransport.WriteBuffer(LastError, SizeOf(LastError)); end; RPC_Terminate: FEvent.SetEvent; end; end; end. doublecmd-1.1.30/src/rpc/uservice.pas0000644000175000001440000001022715104114162016474 0ustar alexxusersunit uService; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SyncObjs; type { TBaseTransport } TBaseTransport = class public procedure Disconnect; virtual; abstract; procedure WriteHandle(AHandle: THandle); virtual; abstract; function ReadHandle(var AHandle: THandle) : Int64; virtual; abstract; procedure WriteBuffer(const AData; const ALength : Int64); virtual; abstract; function ReadBuffer(var AData; const ALength : Int64) : Int64; virtual; abstract; end; { TBaseService } TBaseService = class protected FName: String; FEvent: TEvent; FProcessId: UInt32; FVerifyChild: Boolean; FVerifyParent: Boolean; FServerThread: TThread; protected procedure ProcessRequest(ATransport: TBaseTransport; ACommand: Int32; ARequest: TStream); virtual; abstract; public constructor Create(const AName: String); virtual; destructor Destroy; override; procedure Start; public ClientCount: Integer; property Name: String read FName; property Event: TEvent read FEvent; property ProcessId: UInt32 read FProcessId write FProcessId; property VerifyChild: Boolean read FVerifyChild write FVerifyChild; property VerifyParent: Boolean read FVerifyParent write FVerifyParent; end; { TClientThread } TClientThread = class(TThread) protected FOwner : TBaseService; FTransport: TBaseTransport; protected function ReadRequest(ARequest : TMemoryStream; var ACommand : LongInt): Integer; procedure SendResponse(AResponse : TMemoryStream); public procedure Execute; override; destructor Destroy; override; end; { TServerThread } TServerThread = class(TThread) protected FReadyEvent: TEvent; FOwner : TBaseService; public constructor Create(AOwner : TBaseService); virtual; destructor Destroy; override; end; implementation uses uClientServer, uDebug; { TServerThread } constructor TServerThread.Create(AOwner: TBaseService); begin FOwner := AOwner; FReadyEvent:= TSimpleEvent.Create; inherited Create(False); end; destructor TServerThread.Destroy; begin inherited Destroy; FReadyEvent.Free; end; { TBaseService } constructor TBaseService.Create(const AName: String); begin FName:= AName; FEvent:= TEvent.Create(nil, False, False, ''); end; destructor TBaseService.Destroy; begin if (FServerThread <> nil) then begin FServerThread.Terminate; FServerThread.Free; end; FEvent.Free; inherited Destroy; end; procedure TBaseService.Start; begin FServerThread:= TServerListnerThread.Create(Self); TServerThread(FServerThread).FReadyEvent.WaitFor(30000); end; { TClientThread } function TClientThread.ReadRequest(ARequest: TMemoryStream; var ACommand: LongInt): Integer; var R: Int64; ALength : Int32 = 0; begin // Read command R:= FTransport.ReadBuffer(ACommand, SizeOf(ACommand)); if (R = 0) then Exit(0); // Read arguments size R:= FTransport.ReadBuffer(ALength, SizeOf(ALength)); if (R = 0) then Exit(0); // Read arguments if (ALength > 0) then begin ARequest.Size:= ALength; Result:= FTransport.ReadBuffer(ARequest.Memory^, ALength); end; end; procedure TClientThread.SendResponse(AResponse: TMemoryStream); begin FTransport.WriteBuffer(AResponse.Memory^, AResponse.Size); end; procedure TClientThread.Execute; var ACommand : Int32 = 0; ARequest : TMemoryStream; begin InterLockedIncrement(FOwner.ClientCount); while not Terminated do begin try ARequest:= TMemoryStream.Create; try if ReadRequest(ARequest, ACommand) >= SizeOf(Int32) then begin FOwner.ProcessRequest(FTransport, ACommand, ARequest); end; finally ARequest.Free; end; except on E: Exception do begin Terminate; DCDebug(E.Message); end; end; end; InterLockedDecrement(FOwner.ClientCount); end; destructor TClientThread.Destroy; begin FTransport.Free; inherited Destroy; DCDebug('TClientThread.Destroy'); end; end. doublecmd-1.1.30/src/rpc/uelevation.pas0000644000175000001440000005543515104114162017034 0ustar alexxusersunit uElevation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, DCOSUtils, uClientServer, uService, uWorker, uFindEx, uFileCopyEx; type { TMasterProxy } TMasterProxy = class private FClient: TBaseTransport; public function Execute: LongBool; public constructor Create(const AName: String); destructor Destroy; override; class function Instance: TMasterProxy; end; { TWorkerProxy } TWorkerProxy = class private FClient: TBaseTransport; procedure ReadSearchRec(Data: TMemoryStream; var SearchRec: TSearchRecEx); function ProcessObject(ACommand: UInt32; const ObjectName: String): LongBool; function ProcessObject(ACommand: UInt32; const OldName, NewName: String): LongBool; function ProcessObject(ACommand: UInt32; const ObjectName: String; Attr: UInt32): LongBool; function ProcessObject(ACommand: UInt32; const ObjectName: String; Mode: Integer): THandle; function ProcessObject(ACommand: UInt32; const OldName, NewName: String; Attr: UInt32): LongBool; public function Terminate: Boolean; function FileExists(const FileName: String): LongBool; inline; function FileGetAttr(const FileName: String; FollowLink: LongBool): TFileAttrs; inline; function FileGetAttr(const FileName: String; out Attr: TFileAttributeData): LongBool; function FileSetAttr(const FileName: String; Attr: TFileAttrs): LongBool; inline; function FileSetTime(const FileName: String; ModificationTime: TFileTimeEx; CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool; function FileSetReadOnly(const FileName: String; ReadOnly: Boolean): LongBool; inline; function FileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; function FileOpen(const FileName: String; Mode: Integer): THandle; inline; function FileCreate(const FileName: String; Mode: Integer): THandle; inline; function FileCopy(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): LongBool; function DeleteFile(const FileName: String): LongBool; inline; function RenameFile(const OldName, NewName: String): LongBool; inline; function FindFirst(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; function FindNext(var SearchRec: TSearchRecEx): Integer; procedure FindClose(var SearchRec: TSearchRecEx); function CreateHardLink(const Path, LinkName: String): LongBool; inline; function CreateSymbolicLink(const Path, LinkName: String; Attr: UInt32): LongBool; inline; function CreateDirectory(const Directory: String): LongBool; inline; function RemoveDirectory(const Directory: String): LongBool; inline; function DirectoryExists(const Directory: String): LongBool; inline; public constructor Create; destructor Destroy; override; class function Instance: TWorkerProxy; end; procedure StartMasterServer; procedure StartWorkerServer(const AName: String); procedure CreateWorkerProxy(); procedure CreateMasterProxy(const AName: String); var MasterService: TMasterService = nil; WorkerService: TWorkerService = nil; implementation uses SyncObjs, LazUtf8, uSuperUser, uDebug; const MasterAddress = 'doublecmd-master-'; WorkerAddress = 'doublecmd-worker-'; var MasterProxy: TMasterProxy = nil; WorkerProxy: TWorkerProxy = nil; procedure StartMasterServer; var Address: String; begin Address:= MasterAddress + IntToStr(GetProcessID); MasterService := TMasterService.Create(Address); MasterService.Start; end; procedure StartWorkerServer(const AName: String); var Address: String; begin Address:= WorkerAddress + AName; WorkerService := TWorkerService.Create(Address); WorkerService.ProcessID:= StrToDWord(AName); WorkerService.Start; end; procedure CreateMasterProxy(const AName: String); begin MasterProxy:= TMasterProxy.Create(AName); if not MasterProxy.Execute then WorkerService.Event.SetEvent; end; procedure CreateWorkerProxy; begin WorkerProxy:= TWorkerProxy.Create; end; var Mutex: TRTLCriticalSection; WorkerProcess: UIntPtr = 0; function WaitProcessThread({%H-}Parameter: Pointer): PtrInt; begin Result:= 0; WaitProcess(WorkerProcess); WorkerProcess:= 0; MasterService.Event.SetEvent; EndThread(Result); end; function ElevateSelf: Boolean; begin WorkerProcess:= ExecCmdAdmin(ParamStrUtf8(0), ['--service', IntToStr(GetProcessID)]); Result := (WorkerProcess > 0); if Result then BeginThread(@WaitProcessThread); end; { TMasterProxy } function TMasterProxy.Execute: LongBool; var Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(UInt32(RPC_Execute)); Stream.WriteDWord(SizeOf(SizeUInt)); // Write process identifier Stream.WriteBuffer(GetProcessID, SizeOf(SizeUInt)); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; constructor TMasterProxy.Create(const AName: String); begin FClient:= TPipeTransport.Create(MasterAddress + AName); end; destructor TMasterProxy.Destroy; begin inherited Destroy; FClient.Free; end; class function TMasterProxy.Instance: TMasterProxy; begin Result:= MasterProxy; end; { TWorkerProxy } procedure TWorkerProxy.ReadSearchRec(Data: TMemoryStream; var SearchRec: TSearchRecEx); begin Data.ReadBuffer((@SearchRec.PlatformTime)^, SizeOf(SearchRec.PlatformTime)); Data.ReadBuffer((@SearchRec.LastAccessTime)^, SizeOf(SearchRec.LastAccessTime)); Data.ReadBuffer(SearchRec.Time, SizeOf(TFileTime)); Data.ReadBuffer(SearchRec.Size, SizeOf(Int64)); Data.ReadBuffer(SearchRec.Attr, SizeOf(TFileAttrs)); SearchRec.Name:= Data.ReadAnsiString; end; function TWorkerProxy.ProcessObject(ACommand: UInt32; const ObjectName: String): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(ACommand); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(ObjectName); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.ProcessObject(ACommand: UInt32; const OldName, NewName: String): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(ACommand); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(OldName); Stream.WriteAnsiString(NewName); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.ProcessObject(ACommand: UInt32; const ObjectName: String; Attr: UInt32): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(ACommand); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(ObjectName); Stream.WriteDWord(Attr); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.ProcessObject(ACommand: UInt32; const ObjectName: String; Mode: Integer): THandle; var LastError: Integer; Stream: TMemoryStream; begin Result:= feInvalidHandle; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(ACommand); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(ObjectName); Stream.WriteDWord(Mode); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(LastError, SizeOf(LastError)); if (LastError = 0) then FClient.ReadHandle(Result) else begin SetLastOSError(LastError); end; finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.ProcessObject(ACommand: UInt32; const OldName, NewName: String; Attr: UInt32): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(ACommand); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(OldName); Stream.WriteAnsiString(NewName); Stream.WriteDWord(Attr); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.Terminate: Boolean; var Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_Terminate); Stream.WriteDWord(SizeOf(SizeUInt)); // Write process identifier Stream.WriteBuffer(GetProcessID, SizeOf(SizeUInt)); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.FileExists(const FileName: String): LongBool; begin Result:= ProcessObject(RPC_FileExists, FileName); end; function TWorkerProxy.FileGetAttr(const FileName: String; FollowLink: LongBool): TFileAttrs; begin Result:= TFileAttrs(ProcessObject(RPC_FileGetAttr, FileName, UInt32(FollowLink))); end; function TWorkerProxy.FileGetAttr(const FileName: String; out Attr: TFileAttributeData): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FileGetAttr); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(FileName); Stream.WriteDWord(maxSmallint); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); FClient.ReadBuffer(Attr, SizeOf(TFileAttributeData)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.FileSetAttr(const FileName: String; Attr: TFileAttrs): LongBool; begin Result:= ProcessObject(RPC_FileSetAttr, FileName, Attr); end; function TWorkerProxy.FileSetTime(const FileName: String; ModificationTime: TFileTimeEx; CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool; var LastError: Integer; Stream: TMemoryStream; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FileSetTime); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(FileName); Stream.WriteBuffer(ModificationTime, SizeOf(TFileTimeEx)); Stream.WriteBuffer(CreationTime, SizeOf(TFileTimeEx)); Stream.WriteBuffer(LastAccessTime, SizeOf(TFileTimeEx)); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.FileSetReadOnly(const FileName: String; ReadOnly: Boolean): LongBool; begin Result:= ProcessObject(RPC_FileSetReadOnly, FileName, UInt32(ReadOnly)); end; function TWorkerProxy.FileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; var LastError: Integer; Stream: TMemoryStream; begin Result:= Options; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FileCopyAttr); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(sSrc); Stream.WriteAnsiString(sDst); Stream.WriteDWord(UInt32(Options)); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.FileOpen(const FileName: String; Mode: Integer): THandle; begin Result:= ProcessObject(RPC_FileOpen, FileName, Mode); end; function TWorkerProxy.FileCreate(const FileName: String; Mode: Integer): THandle; begin Result:= ProcessObject(RPC_FileCreate, FileName, Mode); end; function TWorkerProxy.FileCopy(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): LongBool; var LastError: Integer; Stream: TMemoryStream; TotalBytes, DoneBytes: Int64; begin Result:= False; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FileCopy); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(Source); Stream.WriteAnsiString(Target); Stream.WriteBuffer(Options, SizeOf(Options)); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); repeat FClient.ReadBuffer(LastError, SizeOf(LastError)); // Receive progress info if (LastError = 1) then begin FClient.ReadBuffer(TotalBytes, SizeOf(TotalBytes)); FClient.ReadBuffer(DoneBytes, SizeOf(DoneBytes)); Result:= UpdateProgress(TotalBytes, DoneBytes, UserData); FClient.WriteBuffer(Result, SizeOf(Result)); end; until (LastError <> 1); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(LastError, SizeOf(LastError)); SetLastOSError(LastError); finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.DeleteFile(const FileName: String): LongBool; begin Result:= ProcessObject(RPC_DeleteFile, FileName); end; function TWorkerProxy.RenameFile(const OldName, NewName: String): LongBool; begin Result:= ProcessObject(RPC_RenameFile, OldName, NewName); end; function TWorkerProxy.FindFirst(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; var ASize: UInt32 = 0; Stream: TMemoryStream; Data: TMemoryStream absolute SearchRec.FindHandle; begin Result:= -1; try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FindFirst); Stream.Seek(SizeOf(UInt32), soFromCurrent); // Write arguments Stream.WriteAnsiString(Path); Stream.WriteDWord(Flags); // Write data size Stream.Seek(SizeOf(UInt32), soFromBeginning); Stream.WriteDWord(Stream.Size - SizeOf(UInt32) * 2); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(ASize, SizeOf(ASize)); if ASize > 0 then begin Data:= TMemoryStream.Create; Data.Size:= ASize; FClient.ReadBuffer(Data.Memory^, ASize); Data.Seek(SizeOf(Pointer), soBeginning); ReadSearchRec(Data, SearchRec); end; finally Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.FindNext(var SearchRec: TSearchRecEx): Integer; var ASize: UInt32 = 0; Stream: TMemoryStream; Data: TMemoryStream absolute SearchRec.FindHandle; begin Result:= -1; try if Data.Position < Data.Size then begin Result:= 0; ReadSearchRec(Data, SearchRec); end else begin Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FindNext); Stream.WriteDWord(SizeOf(Pointer)); // Write arguments Stream.WriteBuffer(Data.Memory^, SizeOf(Pointer)); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); // Receive command result FClient.ReadBuffer(Result, SizeOf(Result)); FClient.ReadBuffer(ASize, SizeOf(ASize)); if ASize > 0 then begin Data.Size:= ASize; FClient.ReadBuffer(Data.Memory^, ASize); Data.Seek(SizeOf(Pointer), soBeginning); ReadSearchRec(Data, SearchRec); end; finally Stream.Free; end; end; except on E: Exception do DCDebug(E.Message); end; end; procedure TWorkerProxy.FindClose(var SearchRec: TSearchRecEx); var Stream: TMemoryStream; Data: TMemoryStream absolute SearchRec.FindHandle; begin try Stream:= TMemoryStream.Create; try // Write header Stream.WriteDWord(RPC_FindClose); Stream.WriteDWord(SizeOf(Pointer)); // Write arguments Stream.WriteBuffer(Data.Memory^, SizeOf(Pointer)); // Send command FClient.WriteBuffer(Stream.Memory^, Stream.Size); finally Data.Free; Stream.Free; end; except on E: Exception do DCDebug(E.Message); end; end; function TWorkerProxy.CreateHardLink(const Path, LinkName: String): LongBool; begin Result:= ProcessObject(RPC_CreateHardLink, Path, LinkName); end; function TWorkerProxy.CreateSymbolicLink(const Path, LinkName: String; Attr: UInt32): LongBool; begin Result:= ProcessObject(RPC_CreateSymbolicLink, Path, LinkName, Attr); end; function TWorkerProxy.CreateDirectory(const Directory: String): LongBool; begin Result:= ProcessObject(RPC_CreateDirectory, Directory); end; function TWorkerProxy.RemoveDirectory(const Directory: String): LongBool; begin Result:= ProcessObject(RPC_RemoveDirectory, Directory); end; function TWorkerProxy.DirectoryExists(const Directory: String): LongBool; begin Result:= ProcessObject(RPC_DirectoryExists, Directory); end; constructor TWorkerProxy.Create; begin FClient:= TPipeTransport.Create(WorkerAddress + IntToStr(GetProcessID)); end; destructor TWorkerProxy.Destroy; begin DCDebug('TWorkerProxy.Destroy'); inherited Destroy; FClient.Free; end; class function TWorkerProxy.Instance: TWorkerProxy; var AProxy: PPointer; AThread: TThread; begin if GetCurrentThreadId = MainThreadID then Result:= WorkerProxy else begin AThread:= TThread.CurrentThread; AProxy:= @AThread.FatalException; if (AProxy^ = nil) then begin AProxy^:= TWorkerProxy.Create; end; Result:= TWorkerProxy(AProxy^); end; EnterCriticalSection(Mutex); try if MasterService.ClientCount = 0 then begin MasterService.Event.ResetEvent; if ElevateSelf then begin MasterService.Event.WaitFor(60000); end; Result.FClient.Disconnect; end; finally LeaveCriticalSection(Mutex); end; end; procedure Initialize; begin if ParamCount > 0 then begin if ParamStr(1) = '--service' then begin DCDebug('Start worker server'); StartWorkerServer(ParamStr(2)); CreateMasterProxy(ParamStr(2)); WorkerService.Event.WaitFor(INFINITE); WorkerService.Free; Halt; end; end; if not AdministratorPrivileges then begin InitCriticalSection(Mutex); StartMasterServer; CreateWorkerProxy; end; end; procedure Finalize; begin if WorkerProcess > 0 then begin WorkerProxy.Terminate; end; if Assigned(MasterService) then begin DoneCriticalSection(Mutex); MasterService.Free; end; end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/rpc/uadministrator.pas0000644000175000001440000003556615104114162017731 0ustar alexxusersunit uAdministrator; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, DCClassesUtf8, DCOSUtils, uFindEx, uFileCopyEx; procedure PushPop(var Elevate: TDuplicates); function FileExistsUAC(const FileName: String): Boolean; function FileGetAttrUAC(const FileName: String; FollowLink: Boolean = False): TFileAttrs; function FileGetAttrUAC(const FileName: String; out Attr: TFileAttributeData): Boolean; function FileSetAttrUAC(const FileName: String; Attr: TFileAttrs): Boolean; function FileSetTimeUAC(const FileName: String; ModificationTime: TFileTimeEx; CreationTime: TFileTimeEx; LastAccessTime: TFileTimeEx): LongBool; function FileSetReadOnlyUAC(const FileName: String; ReadOnly: Boolean): Boolean; function FileCopyAttrUAC(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; function FileOpenUAC(const FileName: String; Mode: LongWord): System.THandle; function FileCreateUAC(const FileName: String; Mode: LongWord): System.THandle; function FileCopyUAC(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): Boolean; function DeleteFileUAC(const FileName: String): LongBool; function RenameFileUAC(const OldName, NewName: String): LongBool; function FindFirstUAC(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; function FindNextUAC(var SearchRec: TSearchRecEx): Integer; procedure FindCloseUAC(var SearchRec: TSearchRecEx); function ForceDirectoriesUAC(const Path: String): Boolean; function CreateDirectoryUAC(const Directory: String): Boolean; function RemoveDirectoryUAC(const Directory: String): Boolean; function DirectoryExistsUAC(const Directory : String): Boolean; function CreateSymbolicLinkUAC(const Path, LinkName: String; Attr: UInt32 = faInvalidAttributes) : Boolean; function CreateHardLinkUAC(const Path, LinkName: String) : Boolean; type { TFileStreamUAC class } TFileStreamUAC = class(TFileStreamEx) public constructor Create(const AFileName: String; Mode: LongWord); override; end; { TStringListUAC } TStringListUAC = class(TStringListEx) public procedure LoadFromFile(const FileName: String); override; procedure SaveToFile(const FileName: String); override; end; threadvar ElevateAction: TDuplicates; implementation uses RtlConsts, DCStrUtils, LCLType, uShowMsg, uElevation, uSuperUser, fElevation; resourcestring rsElevationRequired = 'You need to provide administrator permission'; rsElevationRequiredDelete = 'to delete this object:'; rsElevationRequiredOpen = 'to open this object:'; rsElevationRequiredCopy = 'to copy this object:'; rsElevationRequiredCreate = 'to create this object:'; rsElevationRequiredRename = 'to rename this object:'; rsElevationRequiredHardLink = 'to create this hard link:'; rsElevationRequiredSymLink = 'to create this symbolic link:'; rsElevationRequiredGetAttributes = 'to get attributes of this object:'; rsElevationRequiredSetAttributes = 'to set attributes of this object:'; procedure PushPop(var Elevate: TDuplicates); var AValue: TDuplicates; begin AValue:= ElevateAction; ElevateAction:= Elevate; Elevate:= AValue; end; function RequestElevation(const Message, FileName: String): Boolean; var Text: String; begin case ElevateAction of dupAccept: Exit(True); dupError: Exit(False); end; Text:= rsElevationRequired + LineEnding; Text += Message + LineEnding + FileName; case ShowElevation(mbSysErrorMessage, Text) of mmrOK: Result:= True; mmrSkip: Result:= False; mmrSkipAll: begin Result:= False; ElevateAction:= dupError; end; mmrAll: begin Result:= True; ElevateAction:= dupAccept; end; end; end; function FileExistsUAC(const FileName: String): Boolean; var LastError: Integer; begin Result:= mbFileExists(FileName); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredGetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileExists(FileName) else SetLastOSError(LastError); end; end; function FileGetAttrUAC(const FileName: String; FollowLink: Boolean): TFileAttrs; var LastError: Integer; begin if not FollowLink then Result:= mbFileGetAttr(FileName) else begin Result:= mbFileGetAttrNoLinks(FileName); end; if (Result = faInvalidAttributes) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredGetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileGetAttr(FileName, FollowLink) else SetLastOSError(LastError); end; end; function FileGetAttrUAC(const FileName: String; out Attr: TFileAttributeData): Boolean; var LastError: Integer; begin Result:= mbFileGetAttr(FileName, Attr); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredGetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileGetAttr(FileName, Attr) else SetLastOSError(LastError); end; end; function FileSetAttrUAC(const FileName: String; Attr: TFileAttrs): Boolean; var LastError: Integer; begin Result:= mbFileSetAttr(FileName, Attr); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredSetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileSetAttr(FileName, Attr) else SetLastOSError(LastError); end; end; function FileSetTimeUAC(const FileName: String; ModificationTime: DCBasicTypes.TFileTimeEx; CreationTime : DCBasicTypes.TFileTimeEx; LastAccessTime : DCBasicTypes.TFileTimeEx): LongBool; var LastError: Integer; begin Result:= mbFileSetTimeEx(FileName, ModificationTime, CreationTime, LastAccessTime); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredSetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileSetTime(FileName, ModificationTime, CreationTime, LastAccessTime) else SetLastOSError(LastError); end; end; function FileSetReadOnlyUAC(const FileName: String; ReadOnly: Boolean): Boolean; var LastError: Integer; begin Result:= mbFileSetReadOnly(FileName, ReadOnly); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredSetAttributes, FileName) then Result:= TWorkerProxy.Instance.FileSetReadOnly(FileName, ReadOnly) else SetLastOSError(LastError); end; end; function FileCopyAttrUAC(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; var Option: TCopyAttributesOption; Errors: TCopyAttributesResult; begin Result:= mbFileCopyAttr(sSrc, sDst, Options, @Errors); if (Result <> []) then begin for Option in Result do begin if ElevationRequired(Errors[Option]) then begin if RequestElevation(rsElevationRequiredSetAttributes, sDst) then Result:= TWorkerProxy.Instance.FileCopyAttr(sSrc, sDst, Result) else SetLastOSError(Errors[Option]); Break; end; end; end; end; function FileOpenUAC(const FileName: String; Mode: LongWord): System.THandle; var LastError: Integer; begin Result:= mbFileOpen(FileName, Mode); if (Result = feInvalidHandle) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredOpen, FileName) then Result:= TWorkerProxy.Instance.FileOpen(FileName, Mode) else SetLastOSError(LastError); end; end; function FileCreateUAC(const FileName: String; Mode: LongWord): System.THandle; var LastError: Integer; begin Result:= mbFileCreate(FileName, Mode); if (Result = feInvalidHandle) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredCreate, FileName) then Result:= TWorkerProxy.Instance.FileCreate(FileName, Mode) else SetLastOSError(LastError); end; end; function FileCopyUAC(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): Boolean; var LastError: Integer; begin Result:= FileCopyEx(Source, Target, Options, UpdateProgress, UserData); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredCopy, Source) then Result:= TWorkerProxy.Instance.FileCopy(Source, Target, Options, UpdateProgress, UserData) else SetLastOSError(LastError); end; end; function DeleteFileUAC(const FileName: String): LongBool; var LastError: Integer; begin Result:= mbDeleteFile(FileName); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredDelete, FileName) then Result:= TWorkerProxy.Instance.DeleteFile(FileName) else SetLastOSError(LastError); end; end; function RenameFileUAC(const OldName, NewName: String): LongBool; var LastError: Integer; begin Result:= mbRenameFile(OldName, NewName); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredRename, OldName) then Result:= TWorkerProxy.Instance.RenameFile(OldName, NewName) else SetLastOSError(LastError); end; end; function CreateDirectoryUAC(const Directory: String): Boolean; var LastError: Integer; begin Result:= mbCreateDir(Directory); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredCreate, Directory) then Result:= TWorkerProxy.Instance.CreateDirectory(Directory) else SetLastOSError(LastError); end; end; function RemoveDirectoryUAC(const Directory: String): Boolean; var LastError: Integer; begin Result:= mbRemoveDir(Directory); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredDelete, Directory) then Result:= TWorkerProxy.Instance.RemoveDirectory(Directory) else SetLastOSError(LastError); end; end; function DirectoryExistsUAC(const Directory: String): Boolean; var LastError: Integer; begin Result:= mbDirectoryExists(Directory); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredGetAttributes, Directory) then Result:= TWorkerProxy.Instance.DirectoryExists(Directory) else SetLastOSError(LastError); end; end; function CreateHardLinkUAC(const Path, LinkName: String): Boolean; var LastError: Integer; begin Result:= CreateHardLink(Path, LinkName); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredHardLink, LinkName) then Result:= TWorkerProxy.Instance.CreateHardLink(Path, LinkName) else SetLastOSError(LastError); end; end; function CreateSymbolicLinkUAC(const Path, LinkName: String; Attr: UInt32): Boolean; var LastError: Integer; begin Result:= CreateSymLink(Path, LinkName, Attr); if (not Result) and ElevationRequired then begin LastError:= GetLastOSError; if RequestElevation(rsElevationRequiredSymLink, LinkName) then Result:= TWorkerProxy.Instance.CreateSymbolicLink(Path, LinkName, Attr) else SetLastOSError(LastError); end; end; function FindFirstUAC(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; begin Result:= FindFirstEx(Path, Flags, SearchRec); if (Result <> 0) and ElevationRequired(Result) then begin if RequestElevation(rsElevationRequiredOpen, Path) then begin SearchRec.Flags:= SearchRec.Flags or fffElevated; Result:= TWorkerProxy.Instance.FindFirst(Path, Flags, SearchRec) end; end; end; function FindNextUAC(var SearchRec: TSearchRecEx): Integer; begin if (SearchRec.Flags and fffElevated <> 0) then Result:= TWorkerProxy.Instance.FindNext(SearchRec) else Result:= FindNextEx(SearchRec); end; procedure FindCloseUAC(var SearchRec: TSearchRecEx); begin if (SearchRec.Flags and fffElevated <> 0) then TWorkerProxy.Instance.FindClose(SearchRec) else FindCloseEx(SearchRec); end; function ForceDirectoriesUAC(const Path: String): Boolean; var Index: Integer; ADirectory: String; ADirectoryPath: String; begin if Path = '' then Exit; ADirectoryPath := IncludeTrailingPathDelimiter(Path); Index:= 1; if Pos('\\', ADirectoryPath) = 1 then // if network path begin Index := CharPos(PathDelim, ADirectoryPath, 3); // index of the end of computer name Index := CharPos(PathDelim, ADirectoryPath, Index + 1); // index of the end of first remote directory end; // Move past path delimiter at the beginning. if (Index = 1) and (ADirectoryPath[Index] = PathDelim) then Index := Index + 1; while Index <= Length(ADirectoryPath) do begin if ADirectoryPath[Index] = PathDelim then begin ADirectory:= Copy(ADirectoryPath, 1, Index - 1); if not DirectoryExistsUAC(ADirectory) then begin Result:= CreateDirectoryUAC(ADirectory); if not Result then Exit; end; end; Inc(Index); end; Result := True; end; { TFileStreamUAC } constructor TFileStreamUAC.Create(const AFileName: String; Mode: LongWord); var AHandle: System.THandle; begin if (Mode and fmCreate) <> 0 then begin AHandle:= FileCreateUAC(AFileName, Mode); if AHandle = feInvalidHandle then raise EFCreateError.CreateFmt(SFCreateError, [AFileName]) else inherited Create(AHandle); end else begin AHandle:= FileOpenUAC(AFileName, Mode); if AHandle = feInvalidHandle then raise EFOpenError.CreateFmt(SFOpenError, [AFilename]) else inherited Create(AHandle); end; FFileName:= AFileName; end; { TStringListUAC } procedure TStringListUAC.LoadFromFile(const FileName: String); var fsFileStream: TFileStreamUAC; begin fsFileStream:= TFileStreamUAC.Create(FileName, fmOpenRead or fmShareDenyNone); try LoadFromStream(fsFileStream); finally fsFileStream.Free; end; end; procedure TStringListUAC.SaveToFile(const FileName: String); var fsFileStream: TFileStreamUAC; begin fsFileStream:= TFileStreamUAC.Create(FileName, fmCreate); try SaveToStream(fsFileStream); finally fsFileStream.Free; end; end; end. doublecmd-1.1.30/src/rpc/sys/0000755000175000001440000000000015104114162014756 5ustar alexxusersdoublecmd-1.1.30/src/rpc/sys/win/0000755000175000001440000000000015104114162015553 5ustar alexxusersdoublecmd-1.1.30/src/rpc/sys/win/uprocessinfo.pas0000644000175000001440000000534215104114162021003 0ustar alexxusersunit uProcessInfo; {$mode objfpc}{$H+} interface uses Classes, SysUtils, JwaWinNT, Windows; function GetParentProcessId(ProcessId: DWORD): DWORD; function GetProcessFileName(hProcess: HANDLE): UnicodeString; function GetProcessFileNameEx(ProcessId: DWORD): UnicodeString; function GetTokenUserSID(hToken: HANDLE; out SID: TBytes): Boolean; function GetProcessUserSID(hProcess: HANDLE; out SID: TBytes): Boolean; implementation uses JwaTlHelp32; var GetProcessImageFileNameW: function(hProcess: HANDLE; lpImageFileName: LPWSTR; nSize: DWORD): DWORD; stdcall; function GetParentProcessId(ProcessId: DWORD): DWORD; var hSnapshot : THandle; ProcessEntry : TProcessEntry32; begin Result := 0; hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hSnapshot <> INVALID_HANDLE_VALUE then begin ProcessEntry.dwSize := SizeOf(TProcessEntry32); if Process32First(hSnapshot, ProcessEntry) then begin repeat if ProcessEntry.th32ProcessID = ProcessId then begin Result:= ProcessEntry.th32ParentProcessID; Break; end; until not Process32Next(hSnapshot, ProcessEntry); end; CloseHandle(hSnapshot); end; end; function GetProcessFileName(hProcess: HANDLE): UnicodeString; begin SetLength(Result, maxSmallint + 1); SetLength(Result, GetProcessImageFileNameW(hProcess, PWideChar(Result), maxSmallint)); end; function GetProcessFileNameEx(ProcessId: DWORD): UnicodeString; const PROCESS_QUERY_LIMITED_INFORMATION = $1000; var hProcess: HANDLE; begin Result:= EmptyWideStr; hProcess:= OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, ProcessId); if hProcess <> 0 then try Result:= GetProcessFileName(hProcess); finally CloseHandle(hProcess); end; end; function GetTokenUserSID(hToken: HANDLE; out SID: TBytes): Boolean; var ReturnLength: DWORD = 0; TokenInformation: array [0..SECURITY_MAX_SID_SIZE] of Byte; UserToken: TTokenUser absolute TokenInformation; begin Result:= GetTokenInformation(hToken, TokenUser, @TokenInformation, SizeOf(TokenInformation), ReturnLength); if Result then begin SetLength(SID, GetLengthSid(UserToken.User.Sid)); CopySid(Length(SID), PSID(@SID[0]), UserToken.User.Sid); end; end; function GetProcessUserSID(hProcess: HANDLE; out SID: TBytes): Boolean; var hToken: HANDLE = 0; begin Result:= OpenProcessToken(hProcess, TOKEN_QUERY, hToken); if Result then begin Result:= GetTokenUserSID(hToken, SID); CloseHandle(hToken); end; end; initialization Pointer(GetProcessImageFileNameW):= GetProcAddress(GetModuleHandle('psapi.dll'), 'GetProcessImageFileNameW'); end. doublecmd-1.1.30/src/rpc/sys/win/unamedpipes.pas0000644000175000001440000000557115104114162020602 0ustar alexxusersunit uNamedPipes; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type PTrustee = ^TTrustee; TTrustee = record pMultipleTrustee: PTrustee; MultipleTrusteeOperation: DWORD; TrusteeForm: DWORD; TrusteeType: DWORD; ptstrName: PAnsiChar; end; TExplicitAccess = record grfAccessPermissions: DWORD; grfAccessMode: DWORD; grfInheritance: DWORD; Trustee: TTrustee; end; function VerifyChild(hPipe: THandle): Boolean; function VerifyParent(hPipe: THandle): Boolean; function GetAdministratorsSID(out SID: TBytes): Boolean; implementation uses Windows, uProcessInfo, uDebug; var GetNamedPipeClientProcessId: function(Pipe: HANDLE; ClientProcessId: PULONG): BOOL; stdcall; function VerifyChild(hPipe: HANDLE): Boolean; var ClientProcessId: ULONG; begin if GetNamedPipeClientProcessId(hPipe, @ClientProcessId) then begin // Allow to connect from child process and same executable only if GetCurrentProcessId = GetParentProcessId(ClientProcessId) then begin DCDebug('My: ', GetProcessFileName(GetCurrentProcess)); DCDebug('Client: ', GetProcessFileNameEx(ClientProcessId)); if UnicodeSameText(GetProcessFileName(GetCurrentProcess), GetProcessFileNameEx(ClientProcessId)) then Exit(True); end; end; Result:= False; end; function VerifyParent(hPipe: HANDLE): Boolean; var ClientProcessId: ULONG; begin if GetNamedPipeClientProcessId(hPipe, @ClientProcessId) then begin // Allow to connect from parent process and same executable only if ClientProcessId = GetParentProcessId(GetCurrentProcessId) then begin DCDebug('My: ', GetProcessFileName(GetCurrentProcess)); DCDebug('Client: ', GetProcessFileNameEx(ClientProcessId)); if UnicodeSameText(GetProcessFileName(GetCurrentProcess), GetProcessFileNameEx(ClientProcessId)) then Exit(True); end; end; Result:= False; end; function GetAdministratorsSID(out SID: TBytes): Boolean; const SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); var AdministratorsGroup: PSID = nil; begin Result:= AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdministratorsGroup); if Result then begin SetLength(SID, GetLengthSid(AdministratorsGroup)); CopySid(Length(SID), PSID(@SID[0]), AdministratorsGroup); FreeSid(AdministratorsGroup); end; end; initialization Pointer(GetNamedPipeClientProcessId):= GetProcAddress(GetModuleHandleW(kernel32), 'GetNamedPipeClientProcessId'); end. doublecmd-1.1.30/src/rpc/sys/win/uclientserver.pas0000644000175000001440000002776115104114162021167 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Remote procedure call implementation (Windows) Copyright (C) 2019-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uClientServer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uService; type { TPipeTransport } TPipeTransport = class(TBaseTransport) private FPipe: THandle; FProcessID: UInt32; FAddress: UnicodeString; private procedure Connect; public procedure Disconnect; override; procedure WriteHandle(AHandle: THandle); override; function ReadHandle(var AHandle: THandle) : Int64; override; procedure WriteBuffer(const AData; const ALength : Int64); override; function ReadBuffer(var AData; const ALength : Int64) : Int64; override; public constructor Create(APipe: THandle; ProcessID: UInt32); constructor Create(Address: String); destructor Destroy; override; end; { TClientHandlerThread } TClientHandlerThread = class(TClientThread) public constructor Create(APipe : THandle; AOwner : TBaseService); end; { TServerListnerThread } TServerListnerThread = class(TServerThread) private FEvent: THandle; public constructor Create(AOwner : TBaseService); override; destructor Destroy; override; procedure Execute; override; end; implementation uses JwaWinNT, JwaAclApi, JwaAccCtrl, JwaWinBase, Windows, DCOSUtils, DCConvertEncoding, uNamedPipes, uDebug, uProcessInfo; { TPipeTransport } procedure TPipeTransport.Connect; begin if (FPipe = 0) then begin DCDebug('Connect to ', String(FAddress)); FPipe:= CreateFileW(PWideChar('\\.\pipe\' + FAddress), GENERIC_WRITE or GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if FPipe = INVALID_HANDLE_VALUE then RaiseLastOSError; end; end; procedure TPipeTransport.Disconnect; begin CloseHandle(FPipe); FPipe:= 0; end; procedure TPipeTransport.WriteHandle(AHandle: THandle); var hProcess: THandle; hDuplicate: THandle; begin hProcess:= OpenProcess(PROCESS_DUP_HANDLE, False, FProcessID); if (hProcess <> 0) then begin if DuplicateHandle(GetCurrentProcess(), AHandle, hProcess, @hDuplicate, 0, False, DUPLICATE_SAME_ACCESS or DUPLICATE_CLOSE_SOURCE) then WriteBuffer(hDuplicate, SizeOf(hDuplicate)); CloseHandle(hProcess); end; end; function TPipeTransport.ReadHandle(var AHandle: THandle): Int64; begin Result:= ReadBuffer(AHandle, SizeOf(AHandle)); end; procedure TPipeTransport.WriteBuffer(const AData; const ALength : Int64); var P: PByte; Len: Int64; LastError: DWORD; Overlapped: TOverlapped; dwNumberOfBytesTransferred: DWORD; begin Connect; Len := ALength; P := PByte(@AData); Repeat LastError := 0; dwNumberOfBytesTransferred:= 0; ZeroMemory(@Overlapped, SizeOf(TOverlapped)); if not WriteFile(FPipe, P^, Len, dwNumberOfBytesTransferred, @Overlapped) then LastError := GetLastError; if (LastError <> 0) and (LastError <> ERROR_IO_PENDING) then raise EInOutError.Create(SysErrorMessage(LastError)); LastError := WaitForSingleObject(FPipe, INFINITE); if LastError = WAIT_TIMEOUT then begin raise EInOutError.Create(SysErrorMessage(LastError)); end; if not GetOverlappedResult(FPipe, Overlapped, dwNumberOfBytesTransferred, False) then raise EInOutError.Create(SysErrorMessage(GetLastError)); if (dwNumberOfBytesTransferred > 0) then begin Inc(P, dwNumberOfBytesTransferred); Dec(Len, dwNumberOfBytesTransferred); end; until (Len = 0); end; function TPipeTransport.ReadBuffer(var AData; const ALength : Int64) : Int64; Var P : PByte; Len : Int64; LastError: DWORD; Overlapped: TOverlapped; dwNumberOfBytesTransferred: DWORD; begin Len := ALength; P := PByte(@AData); repeat LastError := 0; dwNumberOfBytesTransferred:= 0; ZeroMemory(@Overlapped, SizeOf(TOverlapped)); if not ReadFile(FPipe, P^, Len, dwNumberOfBytesTransferred, @Overlapped) then LastError := GetLastError; if (LastError <> 0) and (LastError <> ERROR_IO_PENDING) then raise EInOutError.Create(SysErrorMessage(LastError)); LastError := WaitForSingleObject(FPipe, INFINITE); if LastError = WAIT_TIMEOUT then raise EInOutError.Create(SysErrorMessage(LastError)); if not GetOverlappedResult(FPipe, Overlapped, dwNumberOfBytesTransferred, False) then raise EInOutError.Create(SysErrorMessage(GetLastError)); if (dwNumberOfBytesTransferred = 0) then raise EInOutError.Create(EmptyStr); if (dwNumberOfBytesTransferred > 0) then begin Inc(P, dwNumberOfBytesTransferred); Dec(Len, dwNumberOfBytesTransferred); end until (Len = 0); Result := ALength; end; constructor TPipeTransport.Create(APipe: THandle; ProcessID: UInt32); begin FPipe:= APipe; FProcessID:= ProcessID; end; constructor TPipeTransport.Create(Address: String); begin FAddress:= CeUtf8ToUtf16(Address); end; destructor TPipeTransport.Destroy; begin CloseHandle(FPipe); inherited Destroy; end; { TClientHandlerThread } constructor TClientHandlerThread.Create(APipe: THandle; AOwner: TBaseService); begin FOwner := AOwner; FreeOnTerminate := True; DCDebug('Connected success'); FTransport:= TPipeTransport.Create(APipe, FOwner.ProcessID); inherited Create(False); end; { TServerListnerThread } constructor TServerListnerThread.Create(AOwner: TBaseService); begin FEvent:= CreateEvent(nil, False, False, nil); inherited Create(AOwner); end; destructor TServerListnerThread.Destroy; begin Terminate; SetEvent(FEvent); inherited Destroy; CloseHandle(FEvent); end; procedure TServerListnerThread.Execute; var SID: TBytes; dwWait: DWORD; ACL: PACL = nil; hProcess: HANDLE; bPending: Boolean; cCount: ULONG = 1; SecondSID: TBytes; AName: UnicodeString; ReturnLength: DWORD = 0; Overlapped: TOverlapped; SA: TSecurityAttributes; SD: TSecurityDescriptor; TokenHandle: HANDLE = 0; Events: array[0..1] of THandle; hPipe: THandle = INVALID_HANDLE_VALUE; TokenInformation: array [0..1023] of Byte; ExplicitAccess: array [0..1] of TExplicitAccess; ElevationType: TTokenElevationType absolute TokenInformation; begin AName:= CeUtf8ToUtf16(FOwner.Name); if (FOwner.ProcessId > 0) then dwWait:= FOwner.ProcessId else begin dwWait:= System.GetProcessId; end; try hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION, False, dwWait); if hProcess = 0 then RaiseLastOSError; ZeroMemory(@Overlapped, SizeOf(TOverlapped)); try if not OpenProcessToken(hProcess, TOKEN_QUERY, TokenHandle) then RaiseLastOSError; if not GetTokenUserSID(TokenHandle, SID) then RaiseLastOSError; ZeroMemory(@ExplicitAccess, SizeOf(ExplicitAccess)); with ExplicitAccess[0] do begin grfAccessPermissions:= GENERIC_ALL; grfAccessMode:= DWORD(SET_ACCESS); grfInheritance:= NO_INHERITANCE; Trustee.TrusteeForm:= DWORD(TRUSTEE_IS_SID); Trustee.TrusteeType:= DWORD(TRUSTEE_IS_USER); Trustee.ptstrName:= PAnsiChar(@SID[0]); end; if not GetTokenInformation(TokenHandle, TokenElevationType, @TokenInformation, SizeOf(TokenInformation), ReturnLength) then begin RaiseLastOSError; end; if ElevationType = TokenElevationTypeDefault then begin with ExplicitAccess[1] do begin grfAccessPermissions:= GENERIC_ALL; grfAccessMode:= DWORD(SET_ACCESS); grfInheritance:= NO_INHERITANCE; Trustee.TrusteeForm:= DWORD(TRUSTEE_IS_SID); end; if (FOwner.ProcessId = 0) then begin if not GetAdministratorsSID(SecondSID) then RaiseLastOSError; ExplicitAccess[1].Trustee.TrusteeType:= DWORD(TRUSTEE_IS_GROUP); end else begin if not GetProcessUserSID(GetCurrentProcess, SecondSID) then RaiseLastOSError; ExplicitAccess[1].Trustee.TrusteeType:= DWORD(TRUSTEE_IS_USER); end; ExplicitAccess[1].Trustee.ptstrName:= PAnsiChar(@SecondSID[0]); cCount:= 2; end; if SetEntriesInAcl(cCount, @ExplicitAccess[0], nil, JwaWinNT.PACL(ACL)) <> ERROR_SUCCESS then RaiseLastOSError; if not InitializeSecurityDescriptor (@SD, SECURITY_DESCRIPTOR_REVISION) then RaiseLastOSError; if not SetSecurityDescriptorDacl(@SD, True, ACL, False) then RaiseLastOSError; Overlapped.hEvent:= CreateEvent(nil, True, True, nil); Events[0]:= Overlapped.hEvent; Events[1]:= FEvent; while not Terminated do begin SA.nLength := SizeOf(SA); SA.lpSecurityDescriptor := @SD; SA.bInheritHandle := True; // Create pipe server hPipe := CreateNamedPipeW(PWideChar('\\.\pipe\' + AName), PIPE_ACCESS_DUPLEX or FILE_FLAG_OVERLAPPED, PIPE_WAIT or PIPE_READMODE_BYTE or PIPE_TYPE_BYTE, PIPE_UNLIMITED_INSTANCES, maxSmallint, maxSmallint, 0, @SA); if hPipe = INVALID_HANDLE_VALUE then RaiseLastOSError; DCDebug('Start server ', FOwner.Name); FReadyEvent.SetEvent; while not Terminated do begin bPending:= False; if not ConnectNamedPipe(hPipe, @Overlapped) then begin case (GetLastError()) of ERROR_IO_PENDING: bPending:= True; ERROR_PIPE_CONNECTED: SetEvent(Overlapped.hEvent); else begin DisconnectNamedPipe(hPipe); Continue; end; end; end; // Wait client connection dwWait := WaitForMultipleObjectsEx(Length(Events), Events, False, INFINITE, True); if (dwWait = 1) or ((dwWait = 0) and bPending and (not GetOverlappedResult(hPipe, Overlapped, dwWait, False))) then begin DisconnectNamedPipe(hPipe); Continue; end; if (FOwner.VerifyChild and not VerifyChild(hPipe)) or (FOwner.VerifyParent and not VerifyParent(hPipe)) then begin DisconnectNamedPipe(hPipe); Continue; end; Break; end; // while if not Terminated then TClientHandlerThread.Create(hPipe, FOwner) else begin DisconnectNamedPipe(hPipe); end; end; // while finally CloseHandle(hProcess); if Assigned(ACL) then LocalFree(HLOCAL(ACL)); if (TokenHandle > 0) then CloseHandle(TokenHandle); if (hPipe <> INVALID_HANDLE_VALUE) then CloseHandle(hPipe); if (Overlapped.hEvent > 0) then CloseHandle(Overlapped.hEvent); end; except on E: Exception do begin DCDebug(E.Message); if FOwner.ProcessId > 0 then Halt else Exit; end; end; end; end. doublecmd-1.1.30/src/rpc/sys/usuperuser.pas0000644000175000001440000001765615104114162017724 0ustar alexxusersunit uSuperUser; {$mode objfpc}{$H+} interface procedure WaitProcess(Process: UIntPtr); function AdministratorPrivileges: Boolean; inline; function TerminateProcess(Process: UIntPtr): Boolean; function ElevationRequired(LastError: Integer = 0): Boolean; function ExecCmdAdmin(const Exe: String; Args: array of String; sStartPath: String = ''): UIntPtr; implementation uses SysUtils {$IF DEFINED(MSWINDOWS)} , Types, Windows, DCOSUtils, ShellApi, DCConvertEncoding, uMyWindows {$ELSEIF DEFINED(UNIX)} , Classes, Unix, BaseUnix, DCUnix, Dialogs, SyncObjs, Process, un_process {$IF DEFINED(DARWIN)} , DCStrUtils {$ENDIF} {$ENDIF} ; var FAdministratorPrivileges: Boolean; procedure WaitProcess(Process: UIntPtr); {$IF DEFINED(MSWINDOWS)} begin WaitForSingleObject(Process, INFINITE); CloseHandle(Process); end; {$ELSE} var Status : cInt = 0; begin while (FpWaitPid(Process, @Status, 0) = -1) and (fpgeterrno() = ESysEINTR) do; end; {$ENDIF} function ElevationRequired(LastError: Integer = 0): Boolean; {$IF DEFINED(MSWINDOWS)} begin if FAdministratorPrivileges then Exit(False); if LastError = 0 then LastError:= GetLastError; Result:= (LastError = ERROR_ACCESS_DENIED) or (LastError = ERROR_PRIVILEGE_NOT_HELD) or (LastError = ERROR_INVALID_OWNER) or (LastError = ERROR_NOT_ALL_ASSIGNED); end; {$ELSE} begin if FAdministratorPrivileges then Exit(False); if LastError = 0 then LastError:= GetLastOSError; Result:= (LastError = ESysEPERM) or (LastError = ESysEACCES); end; {$ENDIF} function AdministratorPrivileges: Boolean; begin Result:= FAdministratorPrivileges; end; function TerminateProcess(Process: UIntPtr): Boolean; {$IF DEFINED(MSWINDOWS)} begin Result:= Windows.TerminateProcess(Process, 1); end; {$ELSE} begin Result:= fpKill(Process, SIGTERM) = 0; end; {$ENDIF} {$IF DEFINED(UNIX)} const SYS_PATH: array[0..1] of String = ('/usr/bin/', '/usr/local/bin/'); resourcestring rsMsgPasswordEnter = 'Please enter the password:'; type TSuperProgram = (spNone, spSudo, spPkexec); { TSuperUser } TSuperUser = class(TThread) private FPrompt: String; FCtl: TExProcess; FMessage: String; FArgs: TStringArray; FEvent: TSimpleEvent; private procedure Ready; procedure RequestPassword; procedure OnReadLn(Str: String); procedure OnQueryString(Str: String); protected procedure Execute; override; public constructor Create(Args: TStringArray; const StartPath: String); destructor Destroy; override; end; var SuperExe: String; SuperProgram: TSuperProgram; function ExecuteCommand(Command: String; Args: TStringArray; StartPath: String): UIntPtr; var ProcessId : TPid; begin ProcessId := fpFork; if ProcessId = 0 then begin { Set the close-on-exec flag to all } FileCloseOnExecAll; { Set child current directory } if Length(StartPath) > 0 then fpChdir(StartPath); { The child does the actual exec, and then exits } if FpExecLP(Command, Args) = -1 then Writeln(Format('Execute error %d: %s', [fpgeterrno, SysErrorMessage(fpgeterrno)])); { If the FpExecLP fails, we return an exitvalue of 127, to let it be known } fpExit(127); end else if ProcessId = -1 then { Fork failed } begin WriteLn('Fork failed: ' + Command, LineEnding, SysErrorMessage(fpgeterrno)); end; if ProcessId < 0 then Result := 0 else Result := ProcessId; end; function FindExecutable(const FileName: String; out FullName: String): Boolean; var Index: Integer; begin for Index:= Low(SYS_PATH) to High(SYS_PATH) do begin FullName:= SYS_PATH[Index] + FileName; if fpAccess(FullName, X_OK) = 0 then Exit(True); end; Result:= False; end; function ExecuteSudo(Args: TStringArray; const StartPath: String): UIntPtr; begin with TSuperUser.Create(Args, StartPath) do begin Start; FEvent.WaitFor(INFINITE); Result:= FCtl.Process.ProcessHandle; end; end; { TSuperUser } procedure TSuperUser.Ready; begin FEvent.SetEvent; Yield; FreeOnTerminate:= True; FCtl.OnOperationProgress:= nil; end; procedure TSuperUser.RequestPassword; var S: String = ''; begin if Length(FMessage) = 0 then begin FMessage:= rsMsgPasswordEnter end; if not InputQuery('Double Commander', FMessage, True, S) then FCtl.Stop else begin S:= S + LineEnding; FCtl.Process.Input.Write(S[1], Length(S)); end; FMessage:= EmptyStr; end; procedure TSuperUser.OnReadLn(Str: String); begin FMessage:= Str; end; procedure TSuperUser.OnQueryString(Str: String); begin Synchronize(@RequestPassword) end; procedure TSuperUser.Execute; var GUID : TGUID; Index: Integer; begin CreateGUID(GUID); FPrompt:= GUIDToString(GUID); FCtl.Process.Options:= FCtl.Process.Options + [poStderrToOutPut]; FCtl.Process.Executable:= SuperExe; FCtl.Process.Parameters.Add('-S'); FCtl.Process.Parameters.Add('-k'); FCtl.Process.Parameters.Add('-p'); FCtl.Process.Parameters.Add(FPrompt); for Index:= 0 to High(FArgs) do begin FCtl.Process.Parameters.Add(FArgs[Index]); end; FCtl.QueryString:= FPrompt; FCtl.OnQueryString:= @OnQueryString; FCtl.OnOperationProgress:= @Ready; fCtl.OnProcessExit:= @Ready; FCtl.OnReadLn:= @OnReadLn; FCtl.Execute; end; constructor TSuperUser.Create(Args: TStringArray; const StartPath: String); begin inherited Create(True); FCtl:= TExProcess.Create(EmptyStr); FCtl.Process.CurrentDirectory:= StartPath; FEvent:= TSimpleEvent.Create; FArgs:= Args; end; destructor TSuperUser.Destroy; begin inherited Destroy; FEvent.Free; FCtl.Free; end; {$ELSEIF DEFINED(MSWINDOWS)} function MaybeQuoteIfNotQuoted(const S: String): String; begin if (Pos(' ', S) <> 0) and (pos('"', S) = 0) then Result := '"' + S + '"' else Result := S; end; {$ENDIF} function ExecCmdAdmin(const Exe: String; Args: array of String; sStartPath: String): UIntPtr; {$IF DEFINED(MSWINDOWS)} var Index: Integer; AParams: String; lpExecInfo: TShellExecuteInfoW; begin AParams := EmptyStr; for Index := Low(Args) to High(Args) do AParams += MaybeQuoteIfNotQuoted(Args[Index]) + ' '; if sStartPath = EmptyStr then sStartPath:= mbGetCurrentDir; ZeroMemory(@lpExecInfo, SizeOf(lpExecInfo)); lpExecInfo.cbSize:= SizeOf(lpExecInfo); lpExecInfo.fMask:= SEE_MASK_NOCLOSEPROCESS; lpExecInfo.lpFile:= PWideChar(CeUtf8ToUtf16(Exe)); lpExecInfo.lpDirectory:= PWideChar(CeUtf8ToUtf16(sStartPath)); lpExecInfo.lpParameters:= PWideChar(CeUtf8ToUtf16(AParams)); lpExecInfo.lpVerb:= 'runas'; if ShellExecuteExW(@lpExecInfo) then Result:= lpExecInfo.hProcess else Result:= 0; end; {$ELSEIF DEFINED(DARWIN)} var Index: Integer; ACommand: String; AParams: TStringArray; begin ACommand:= EscapeNoQuotes(Exe); for Index := Low(Args) to High(Args) do ACommand += ' ' + EscapeNoQuotes(Args[Index]); SetLength(AParams, 7); AParams[0]:= '-e'; AParams[1]:= 'on run argv'; AParams[2]:= '-e'; AParams[3]:= 'do shell script (item 1 of argv) with administrator privileges'; AParams[4]:= '-e'; AParams[5]:='end run'; AParams[6]:= ACommand; Result:= ExecuteCommand('/usr/bin/osascript', AParams, sStartPath); end; {$ELSE} var Index: Integer; AParams: TStringArray; begin SetLength(AParams, Length(Args) + 1); for Index := Low(Args) to High(Args) do AParams[Index + 1]:= Args[Index]; AParams[0] := Exe; case SuperProgram of spSudo: Result:= ExecuteSudo(AParams, sStartPath); spPkexec: Result:= ExecuteCommand(SuperExe, AParams, sStartPath); end; end; {$ENDIF} initialization {$IF DEFINED(DARWIN) OR DEFINED(HAIKU)} FAdministratorPrivileges:= True; {$ELSEIF DEFINED(UNIX)} {$IFDEF LINUX} if FindExecutable('pkexec', SuperExe) then SuperProgram:= spPkexec else {$ENDIF} if FindExecutable('sudo', SuperExe) then SuperProgram:= spSudo else begin SuperProgram:= spNone; end; FAdministratorPrivileges:= (fpGetUID = 0) or (SuperProgram = spNone); {$ELSE} FAdministratorPrivileges:= (IsUserAdmin <> dupError); {$ENDIF} end. doublecmd-1.1.30/src/rpc/sys/unix/0000755000175000001440000000000015104114162015741 5ustar alexxusersdoublecmd-1.1.30/src/rpc/sys/unix/uprocessinfo.pas0000644000175000001440000001140015104114162021161 0ustar alexxusersunit uProcessInfo; {$mode objfpc}{$H+} {$packrecords c} interface uses Classes, SysUtils, BaseUnix; function GetProcessUserId(ProcessId: pid_t): uid_t; function GetParentProcessId(ProcessId: pid_t): pid_t; function GetProcessFileName(ProcessId: pid_t): String; implementation uses InitC {$IF DEFINED(FREEBSD)} , FreeBSD, SysCtl {$ENDIF} ; {$IF DEFINED(LINUX)} function GetProcessUserId(ProcessId: pid_t): uid_t; var Info: TStat; begin if fpStat(Format('/proc/%d', [ProcessId]), Info) < 0 then Result:= 0 else Result:= Info.st_uid; end; function GetParentProcessId(ProcessId: pid_t): pid_t; var pid: pid_t; hFile: THandle; ABuffer: String; comm, state: String; begin hFile:= FileOpen(Format('/proc/%d/stat', [ProcessId]), fmOpenRead or fmShareDenyNone); if hFile = feInvalidHandle then (Exit(-1)); SetLength(ABuffer, MAX_PATH); Result:= FileRead(hFile, ABuffer[1], MAX_PATH); if (Result >= 0) then begin SetLength(ABuffer, Result); SScanf(ABuffer, '%d %s %s %d', [@pid, @comm, @state, @Result]); end; FileClose(hFile); end; function GetProcessFileName(ProcessId: pid_t): String; begin Result:= fpReadLink(Format('/proc/%d/exe', [ProcessId])); end; {$ELSEIF DEFINED(DARWIN)} const MAXCOMLEN = 16; PROC_PIDPATHINFO = 11; PROC_PIDT_SHORTBSDINFO = 13; type Tproc_bsdshortinfo = record pbsi_pid: UInt32; // Process identifier pbsi_ppid: UInt32; // Parent process identifier pbsi_pgid: UInt32; pbsi_status: UInt32; pbsi_comm: array[0..MAXCOMLEN-1] of AnsiChar; // Process name pbsi_flags: UInt32; pbsi_uid: uid_t; pbsi_gid: gid_t; pbsi_ruid: uid_t; pbsi_rgid: gid_t; pbsi_svuid: uid_t; pbsi_svgid: gid_t; pbsi_rfu: UInt32; end; function proc_pidinfo(pid: cint; flavor: cint; arg: cuint64; buffer: pointer; buffersize: cint): cint; cdecl; external 'proc'; function GetProcessUserId(ProcessId: pid_t): uid_t; var ret: cint; info: Tproc_bsdshortinfo; begin ret:= proc_pidinfo(ProcessId, PROC_PIDT_SHORTBSDINFO, 0, @info, SizeOf(Tproc_bsdshortinfo)); if (ret = SizeOf(Tproc_bsdshortinfo)) then Result:= info.pbsi_ruid else Result:= 0; end; function GetParentProcessId(ProcessId: pid_t): pid_t; var ret: cint; info: Tproc_bsdshortinfo; begin ret:= proc_pidinfo(ProcessId, PROC_PIDT_SHORTBSDINFO, 0, @info, SizeOf(Tproc_bsdshortinfo)); if (ret = SizeOf(Tproc_bsdshortinfo)) then Result:= info.pbsi_ppid else Result:= -1; end; function GetProcessFileName(ProcessId: pid_t): String; begin SetLength(Result, MAX_PATH + 1); if proc_pidinfo(ProcessId, PROC_PIDPATHINFO, 0, Pointer(Result), MAX_PATH) < 0 then SetLength(Result, 0); end; {$ELSEIF DEFINED(FREEBSD)} type Tkinfo_proc = record ki_structsize: cint; ki_layout: cint; ki_args: pointer; ki_paddr: pointer; ki_addr: pointer; ki_tracep: pointer; ki_textvp: pointer; ki_fd: pointer; ki_vmspace: pointer; ki_wchan: pointer; ki_pid: pid_t; // Process identifier ki_ppid: pid_t; // Parent process identifier ki_pgid: pid_t; ki_tpgid: pid_t; ki_sid: pid_t; ki_tsid: pid_t; ki_jobc: cshort; ki_spare_short1: cshort; ki_tdev_freebsd11: cuint32; ki_siglist: sigset_t; ki_sigmask: sigset_t; ki_sigignore: sigset_t; ki_sigcatch: sigset_t; ki_uid: uid_t; // Effective user id ki_ruid: uid_t; // Real user id ki_reserved: array[0..4095] of byte; end; function GetProcessUserId(ProcessId: pid_t): uid_t; var length: csize_t; info: Tkinfo_proc; mib: array[0..3] of cint = (CTL_KERN, KERN_PROC, KERN_PROC_PID, 0); begin mib[3] := ProcessId; length := SizeOf(Tkinfo_proc); if (FPsysctl(@mib, 4, @info, @length, nil, 0) < 0) then Exit(0); if (length = 0) then Exit(0); Result:= info.ki_ruid; end; function GetParentProcessId(ProcessId: pid_t): pid_t; var length: csize_t; info: Tkinfo_proc; mib: array[0..3] of cint = (CTL_KERN, KERN_PROC, KERN_PROC_PID, 0); begin mib[3] := ProcessId; length := SizeOf(Tkinfo_proc); if (FPsysctl(@mib, 4, @info, @length, nil, 0) < 0) then Exit(-1); if (length = 0) then Exit(-1); Result:= info.ki_ppid; end; function GetProcessFileName(ProcessId: pid_t): String; begin kernproc_getpath(ProcessId, Result); end; {$ELSE} function GetProcessUserId(ProcessId: pid_t): uid_t; begin Result:= 0; end; function GetParentProcessId(ProcessId: pid_t): pid_t; begin Result:= -1; end; function GetProcessFileName(ProcessId: pid_t): String; begin Result:= EmptyStr; end; {$ENDIF} end. doublecmd-1.1.30/src/rpc/sys/unix/ulocalsockets.pas0000644000175000001440000002212015104114162021316 0ustar alexxusersunit uLocalSockets; {$mode objfpc}{$H+} {$packrecords c} interface uses Classes, SysUtils, BaseUnix, Sockets; function VerifyChild(Handle: THandle): Boolean; function VerifyParent(Handle: THandle): Boolean; procedure SetSocketClientProcessId({%H-}fd: cint); function GetSocketClientProcessId(fd: cint): pid_t; function SendHandle(sock: cint; fd: cint): Boolean; function RecvHandle(sock: cint): cint; function SocketDirectory: String; implementation uses InitC, uProcessInfo, uDebug; const SCM_RIGHTS = $01; //* Transfer file descriptors. */ type msglen_t = {$IF DEFINED(BSD) OR DEFINED(HAIKU)}cint{$ELSE}size_t{$ENDIF}; Pmsghdr = ^msghdr; msghdr = record msg_name : pointer; msg_namelen : socklen_t; msg_iov : piovec; msg_iovlen : msglen_t; msg_control : pointer; msg_controllen : msglen_t; msg_flags : cInt; end; Pcmsghdr = ^cmsghdr; cmsghdr = record cmsg_len : msglen_t; cmsg_level : cInt; cmsg_type : cInt; end; function sendmsg(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t; cdecl; external clib name 'sendmsg'; function recvmsg(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t; cdecl; external clib name 'recvmsg'; {$IF DEFINED(LINUX)} type ucred = record pid : pid_t; uid : uid_t; gid : gid_t; end; {$ELSEIF DEFINED(HAIKU)} const MSG_NOSIGNAL = $0800; SO_PEERCRED = $4000000; type ucred = record pid : pid_t; uid : uid_t; gid : gid_t; end; {$ELSEIF DEFINED(DARWIN)} const MSG_NOSIGNAL = $20000; LOCAL_PEERPID = $002; //* retrieve peer pid */ SOL_LOCAL = 0; //* Level number of get/setsockopt for local domain sockets */ {$ELSEIF DEFINED(BSD)} const SCM_CREDS = $03; //* process creds (struct cmsgcred) */ type Pcmsgcred = ^cmsgcred; cmsgcred = record cmcred_pid: pid_t; //* PID of sending process */ cmcred_uid: uid_t; //* real UID of sending process */ cmcred_euid: uid_t; //* effective UID of sending process */ cmcred_gid: gid_t; //* real GID of sending process */ cmcred_ngroups: cshort; //* number or groups */ cmcred_groups: array[0..15] of gid_t; //* groups */ end; {$ENDIF} const {$IF DEFINED(DARWIN)} ALIGN_BYTES = csize_t(SizeOf(cuint32) - 1); {$ELSE} ALIGN_BYTES = csize_t(SizeOf(csize_t) - 1); {$ENDIF} function CMSG_ALIGN(len: csize_t): csize_t; inline; begin Result:= (((len) + ALIGN_BYTES) and (not (ALIGN_BYTES))); end; function CMSG_SPACE(len: csize_t): csize_t; inline; begin Result:= (CMSG_ALIGN(len) + CMSG_ALIGN(SizeOf(cmsghdr))); end; function CMSG_LEN(len: csize_t): csize_t; inline; begin Result:= (CMSG_ALIGN(SizeOf(cmsghdr)) + (len)); end; function CMSG_DATA(cmsg: Pcmsghdr): PByte; inline; {$IF DEFINED(BSD)} begin Result:= PByte(cmsg) + CMSG_ALIGN(SizeOf(cmsghdr)); end; {$ELSE} begin Result:= PByte(cmsg + 1) end; {$ENDIF} function SendMessage(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t; begin repeat Result:= sendmsg(__fd, __message, __flags); until (Result <> -1) or (fpgetCerrno <> ESysEINTR); end; function RecvMessage(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t; begin repeat Result:= recvmsg(__fd, __message, __flags); until (Result <> -1) or (fpgetCerrno <> ESysEINTR); end; procedure SetSocketClientProcessId(fd: cint); {$IF DEFINED(LINUX) OR DEFINED(DARWIN) OR DEFINED(HAIKU)} begin end; {$ELSE} var buf: Byte; iov: iovec; msg: msghdr; cmsga: Pcmsghdr; nbytes: ssize_t; data: array[Byte] of Byte; begin cmsga := Pcmsghdr(@data[0]); {* * The backend doesn't care what we send here, but it wants * exactly one character to force recvmsg() to block and wait * for us. *} buf := 0; iov.iov_base := @buf; iov.iov_len := 1; cmsga^.cmsg_len := CMSG_LEN(SizeOf(cmsgcred)); cmsga^.cmsg_level := SOL_SOCKET; cmsga^.cmsg_type := SCM_CREDS; {* * cmsg.cred will get filled in with the correct information * by the kernel when this message is sent. *} msg.msg_name := nil; msg.msg_namelen := 0; msg.msg_iov := @iov; msg.msg_iovlen := 1; msg.msg_control := cmsga; msg.msg_controllen := CMSG_SPACE(SizeOf(cmsgcred)); msg.msg_flags := MSG_NOSIGNAL; nbytes := SendMessage(fd, @msg, MSG_NOSIGNAL); if (nbytes = -1) then DCDebug('SendMessage: ', SysErrorMessage(fpgetCerrno)); end; {$ENDIF} function GetSocketClientProcessId(fd: cint): pid_t; {$IF DEFINED(LINUX) OR DEFINED(HAIKU)} var cred: ucred; ALength: TSockLen; begin ALength:= SizeOf(ucred); if (fpgetsockopt(fd, SOL_SOCKET, SO_PEERCRED, @cred, @ALength) = -1) then Exit(-1); Result:= cred.pid; end; {$ELSEIF DEFINED(DARWIN)} var ALength: TSockLen; begin ALength:= SizeOf(Result); if (fpgetsockopt(fd, SOL_LOCAL, LOCAL_PEERPID, @Result, @ALength) = -1) then Exit(-1); end; {$ELSE} var buf: Byte; iov: iovec; msg: msghdr; cmsga: Pcmsghdr; nbytes: ssize_t; data: array[Byte] of Byte; begin cmsga := Pcmsghdr(@data[0]); msg.msg_name := nil; msg.msg_namelen := 0; msg.msg_iov := @iov; msg.msg_iovlen := 1; msg.msg_control := cmsga; msg.msg_controllen := CMSG_SPACE(SizeOf(cmsgcred)); msg.msg_flags := MSG_NOSIGNAL; {* * The one character which is received here is not meaningful; * its purposes is only to make sure that recvmsg() blocks * long enough for the other side to send its credentials. *} iov.iov_base := @buf; iov.iov_len := 1; nbytes := RecvMessage(fd, @msg, MSG_NOSIGNAL); if (nbytes = -1) then DCDebug('RecvMessage: ', SysErrorMessage(fpgetCerrno)); Result:= Pcmsgcred(CMSG_DATA(cmsga))^.cmcred_pid; end; {$ENDIF} function SendHandle(sock: cint; fd: cint): Boolean; var buf: Byte; iov: iovec; msg: msghdr; cmsga: Pcmsghdr; nbytes: ssize_t; data: array[Byte] of Byte; begin cmsga := Pcmsghdr(@data[0]); {* * The backend doesn't care what we send here, but it wants * exactly one character to force recvmsg() to block and wait * for us. *} buf := 0; iov.iov_base := @buf; iov.iov_len := 1; cmsga^.cmsg_len := CMSG_LEN(SizeOf(fd)); cmsga^.cmsg_level := SOL_SOCKET; cmsga^.cmsg_type := SCM_RIGHTS; {* * cmsg.cred will get filled in with the correct information * by the kernel when this message is sent. *} msg.msg_name := nil; msg.msg_namelen := 0; msg.msg_iov := @iov; msg.msg_iovlen := 1; msg.msg_control := cmsga; msg.msg_controllen := CMSG_SPACE(SizeOf(fd)); msg.msg_flags := MSG_NOSIGNAL; Move(fd, CMSG_DATA(cmsga)^, SizeOf(fd)); nbytes := SendMessage(sock, @msg, MSG_NOSIGNAL); if (nbytes = -1) then DCDebug('SendHandle: ', SysErrorMessage(fpgetCerrno)); FileClose(fd); Result:= (nbytes > 0) end; function RecvHandle(sock: cint): cint; var buf: Byte; iov: iovec; msg: msghdr; cmsga: Pcmsghdr; nbytes: ssize_t; data: array[Byte] of Byte; begin cmsga := Pcmsghdr(@data[0]); msg.msg_name := nil; msg.msg_namelen := 0; msg.msg_iov := @iov; msg.msg_iovlen := 1; msg.msg_control := cmsga; msg.msg_controllen := CMSG_SPACE(SizeOf(Result)); msg.msg_flags := MSG_NOSIGNAL; {* * The one character which is received here is not meaningful; * its purposes is only to make sure that recvmsg() blocks * long enough for the other side to send its credentials. *} iov.iov_base := @buf; iov.iov_len := 1; nbytes := RecvMessage(sock, @msg, MSG_NOSIGNAL); if (nbytes = -1) then DCDebug('RecvHandle: ', SysErrorMessage(fpgetCerrno)); Move(CMSG_DATA(cmsga)^, Result, SizeOf(Result)); end; function CheckParent(ProcessId, ParentId: pid_t): Boolean; begin DCDebug(['ProcessId: ', ProcessId]); while (ProcessId <> ParentId) and (ProcessId > 1) do begin ProcessId:= GetParentProcessId(ProcessId); DCDebug(['ProcessId: ', ProcessId]); end; Result:= (ProcessId = ParentId); end; function VerifyChild(Handle: THandle): Boolean; var ProcessId: pid_t; begin DCDebug('VerifyChild'); ProcessId:= GetSocketClientProcessId(Handle); DCDebug(['Credentials from socket: pid=', ProcessId]); Result:= CheckParent(ProcessId, GetProcessId);{ and (GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId));} DCDebug(['VerifyChild: ', Result]); end; function VerifyParent(Handle: THandle): Boolean; var ProcessId: pid_t; begin DCDebug('VerifyParent'); ProcessId:= GetSocketClientProcessId(Handle); DCDebug(['Credentials from socket: pid=', ProcessId]); Result:= CheckParent(FpGetppid, ProcessId) and (GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId)); DCDebug(['VerifyParent: ', Result]); end; function SocketDirectory: String; var Stat: TStat; UserID: TUid; begin UserID:= fpGetUID; if UserID = 0 then begin UserID:= GetProcessUserId(StrToInt(ParamStr(2))); end; Result:= '/tmp/doublecmd' + '-' + IntToStr(UserID); // Verify directory owner if not DirectoryExists(Result) then begin if fpMkDir(Result, &700) <> 0 then RaiseLastOSError; end else begin if fpStat(Result, Stat) <> 0 then RaiseLastOSError; if (Stat.st_uid <> UserID) and (fpChown(Result, UserID, Stat.st_gid) < 0) then RaiseLastOSError; if ((Stat.st_mode and $0FFF) <> &700) and (fpChmod(Result, &700) < 0) then RaiseLastOSError; end; Result += PathDelim; end; end. doublecmd-1.1.30/src/rpc/sys/unix/uclientserver.pas0000644000175000001440000001202015104114162021333 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Remote procedure call implementation (Unix) Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uClientServer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Ssockets, uService; type { TUnixServer } TUnixServer = class(Ssockets.TUnixServer) protected procedure Bind; override; end; { TPipeTransport } TPipeTransport = class(TBaseTransport) private FAddress : String; FConnection : TSocketStream; private procedure Connect; public procedure Disconnect; override; procedure WriteHandle(AHandle: THandle); override; function ReadHandle(var AHandle: THandle) : Int64; override; procedure WriteBuffer(const AData; const ALength : Int64); override; function ReadBuffer(var AData; const ALength : Int64) : Int64; override; public constructor Create(const Address : String); constructor Create(ASocket : TSocketStream); destructor Destroy; override; end; { TClientHandlerThread } TClientHandlerThread = class(TClientThread) public constructor Create(ASocket : TSocketStream; AOwner : TBaseService); end; { TServerListnerThread } TServerListnerThread = class(TServerThread) private FSocketObject : TUnixServer; procedure DoConnect(Sender: TObject; Data: TSocketStream); public destructor Destroy; override; procedure Execute; override; end; implementation uses BaseUnix, Unix, uLocalSockets, uDebug; { TUnixServer } procedure TUnixServer.Bind; begin inherited Bind; fpChmod(FileName, &0666); end; { TPipeTransport } procedure TPipeTransport.Connect; begin if FConnection = nil then begin FConnection:= TUnixSocket.Create(SocketDirectory + FAddress); SetSocketClientProcessId(FConnection.Handle); end; end; procedure TPipeTransport.Disconnect; begin FreeAndNil(FConnection); end; procedure TPipeTransport.WriteHandle(AHandle: THandle); begin SendHandle(FConnection.Handle, AHandle); end; function TPipeTransport.ReadHandle(var AHandle: THandle): Int64; begin AHandle:= RecvHandle(FConnection.Handle); end; procedure TPipeTransport.WriteBuffer(const AData; const ALength : Int64); var P : PByte; C, Len : Integer; begin Connect; P := PByte(@AData); Len := ALength; repeat C := FConnection.Write(P^,len); if (C < 0) then raise EInOutError.Create(SysErrorMessage(FConnection.LastError)); if (C > 0) then begin Inc(P, C); Dec(Len, C); end; until (Len = 0); end; function TPipeTransport.ReadBuffer(var AData; const ALength : Int64) : Int64; Var P : PByte; C : Integer; Len : Int64; begin Len := ALength; P:= PByte(@AData); repeat C:= FConnection.Read(P^, Len); if (C <= 0) then raise EInOutError.Create(SysErrorMessage(FConnection.LastError)); if (C > 0) then begin Inc(P, C); Dec(Len, C); end until (Len = 0); Result := ALength; end; constructor TPipeTransport.Create(const Address: String); begin FAddress:= Address; end; constructor TPipeTransport.Create(ASocket: TSocketStream); begin FConnection:= ASocket; end; destructor TPipeTransport.Destroy; begin FreeAndNil(FConnection); inherited Destroy; end; { TClientHandlerThread } constructor TClientHandlerThread.Create(ASocket : TSocketStream; AOwner : TBaseService); begin FOwner := AOwner; FreeOnTerminate := True; FTransport:= TPipeTransport.Create(ASocket); inherited Create(False); end; { TServerListnerThread } procedure TServerListnerThread.DoConnect(Sender: TObject; Data: TSocketStream); begin if (FOwner.VerifyChild and not VerifyChild(Data.Handle)) or (FOwner.VerifyParent and not VerifyParent(Data.Handle)) then begin Data.Free; Exit; end; if not Terminated then TClientHandlerThread.Create(Data, FOwner) else Data.Free; end; destructor TServerListnerThread.Destroy; begin DCDebug('TServerListnerThread.Destroy'); FSocketObject.StopAccepting(True); inherited Destroy; end; procedure TServerListnerThread.Execute; begin try FSocketObject:= TUnixServer.Create(SocketDirectory + FOwner.Name); try FSocketObject.Bind; FReadyEvent.SetEvent; FSocketObject.OnConnect:= @DoConnect; FSocketObject.StartAccepting; finally FreeAndNil(FSocketObject); end; except on e : Exception do begin Terminate; end; end; end; end. doublecmd-1.1.30/src/rpc/sys/felevation.pas0000644000175000001440000000414615104114162017624 0ustar alexxusersunit fElevation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, ExtCtrls, uShowMsg; type { TfrmElevation } TfrmElevation = class(TForm) ButtonPanel: TButtonPanel; chkElevateAll: TCheckBox; imgShield: TImage; lblText: TLabel; public function ShowModal: Integer; override; end; function ShowElevation(const ATitle, AText: String): TMyMsgResult; implementation {$R *.lfm} {$IF DEFINED(MSWINDOWS)} uses Windows, uBitmap; {$ENDIF} type TElevationData = class FResult: TMyMsgResult; FTitle, FText: String; procedure ShowElevation; public constructor Create(const ATitle, AText: String); end; function ShowElevation(const ATitle, AText: String): TMyMsgResult; begin with TElevationData.Create(ATitle, AText) do try TThread.Synchronize(nil, @ShowElevation); Result:= FResult; finally Free end; end; { TElevationData } procedure TElevationData.ShowElevation; begin with TfrmElevation.Create(Application) do try Caption:= FTitle; lblText.Caption:= FText; ShowModal; if (ModalResult <> mrOK) then begin if chkElevateAll.Checked then FResult:= mmrSkipAll else FResult:= mmrSkip end else begin if chkElevateAll.Checked then FResult:= mmrAll else FResult:= mmrOK; end; finally Free; end; end; constructor TElevationData.Create(const ATitle, AText: String); begin FText:= AText; FTitle:= ATitle; end; { TfrmElevation } function TfrmElevation.ShowModal: Integer; {$IF DEFINED(MSWINDOWS)} const IDI_SHIELD = PAnsiChar(32518); var hIcon: THandle; AIcon: Graphics.TBitmap; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} hIcon:= LoadImage(0, IDI_SHIELD, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED); if (hIcon <> 0) then begin AIcon:= BitmapCreateFromHICON(hIcon); imgShield.Picture.Assign(AIcon); AIcon.Free; end; {$ENDIF} Result:= inherited ShowModal; end; end. doublecmd-1.1.30/src/rpc/sys/felevation.lrj0000644000175000001440000000041715104114162017625 0ustar alexxusers{"version":1,"strings":[ {"hash":234500131,"name":"tfrmelevation.chkelevateall.caption","sourcebytes":[68,111,32,116,104,105,115,32,102,111,114,32,38,97,108,108,32,99,117,114,114,101,110,116,32,111,98,106,101,99,116,115],"value":"Do this for &all current objects"} ]} doublecmd-1.1.30/src/rpc/sys/felevation.lfm0000644000175000001440000004555315104114162017626 0ustar alexxusersobject frmElevation: TfrmElevation Left = 430 Height = 145 Top = 282 Width = 400 AutoSize = True BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ClientHeight = 145 ClientWidth = 400 DesignTimePPI = 120 Position = poScreenCenter LCLVersion = '2.0.12.0' object lblText: TLabel AnchorSideLeft.Control = imgShield AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner Left = 114 Height = 20 Top = 12 Width = 64 BorderSpacing.Left = 12 Constraints.MinHeight = 20 Constraints.MinWidth = 64 ParentColor = False end object chkElevateAll: TCheckBox AnchorSideLeft.Control = lblText AnchorSideTop.Control = lblText AnchorSideTop.Side = asrBottom Left = 114 Height = 24 Top = 44 Width = 216 BorderSpacing.Top = 12 Caption = 'Do this for &all current objects' Checked = True State = cbChecked TabOrder = 1 end object imgShield: TImage AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 12 Height = 90 Top = 12 Width = 90 AutoSize = True Picture.Data = { 1754506F727461626C654E6574776F726B477261706869631C1E000089504E47 0D0A1A0A0000000D494844520000005A0000005A080600000038A8410200001D E349444154789CED9C79941DD57DE7BF77A9AAB7F55377ABD52DB5568800095B 586C09AB8C1DE3046C8775C6394EEC99C127F1829339B1C743EC73662699D8CE 39F1F1C46B26719878663CB68163B0216C3604B42124D40884760949AD6E2DBD F75BEBD576EF9D3F6E6DAFD5C0EB564B62E6E807A57A5BD7ABFABC5F7D7FCBBD 55C005BB6017EC825DB00B3647367A641F3D7570CFF9DE8D191B39DF3BD0AA6D FEF6172141AF50C0B74088ED79FE97E717DB0E5EF599BF3ADFBBD692FD3F017A F3771F58A280BFCCE6729F2ACE9BC71933603B0DC7B61B3F745DF7EBEBEEFFDA C8F9DEC777B27735E8CDDFFBF35E10F2E54C26FBC7C579F3726626034A392863 A08C412AC0B6ED8ADD687CD76934BE73DD7D5F193BDFFBFC56F6AE03BDFDFBFF 11AE222B40D89F65B2D9FB8AF3E615AC4C16947350C641A9864C2903A1148432 482951ABD74B8D86FDF74EA3F1BDAECECE93CB7EE793E7FB509AEC5D037ACBB7 BF0441D90D84F23FC9E5F377B715E7991160C6122FA68C83509A024D41080508 819012F57ADD6ED8F6438ED3F81E91F2F5F7DCFD99F37D6800DE05A09FF9C617 BA72D9CCBDDC34FF285F68BBAA502CC23433609C8372039431FD987110CA4059 08995080525042014A404000420102482161371AD2B6EB5B5DD7FDC7C0711EBB FC8EFB2AE7F338CF0BE8E7BFF1D9A2A2ECC3DC303F9ECDE56FCFB71573B97C01 DC34C1B801C6391837B454A4BD798A1713AA3D9910A2D72050A943924AC1F33C D876BDE2349C273CD77D9848F1C2A5B7FFA17DAE8FF99C807EF62B1FA71E3556 51C63FC84DEBB66C2EBF2EDFD656C817DA60581970C304338C10B29140E62C0E 7E4D72114A450C59FB3314490E47A5FE510A9052C0F53C34EC46C9759DF541E0 3FE3BBCEFAAEF6E29BDD37DE29CF368339057DDF3D1FA197E5DC621B572BB206 5F6518C61A3393B92A9BCD5D932F14BA72853664F30598A6056E5A60869978B1 9178F3544F269481528AC19109FCEC571BF1FE9B6FC69AA5F391B78CF010F461 A8D4BFE987D1EB4A01500A4A29F8BE0FD7F3E079EE90EF077D42043B8490BB84 94FB05E103ACB3B776F935D7CFD90FD012E8BFF9E0E22E42D9554A4980B0A252 324729EDA48CCF679C775133D36B9AE642D3CA2CCB6432ED563697C9E4F2C8E6 F3B0B2399856063C846B846B6E9860A6A9D75C7B34653C014D1908D380C7AB75 FCFCB997F0FAFED770F5CA0A1EDB64E0DEBBEFC66FAEBE0897F4B4C3E22C3E9A B42787FFA7D8ABA6E34A5E561052420401822040200247083121A51C90529E54 420E4925C7A0D42421644C88C03138AFF89E03A5B0F592DFF9C43BEA3F6F05B4 64E60739910F67AD3C38E720948071038661C2B0343CC3B4C02D0BDCB0605899 F079267C3F031E7E8E1B16B869261ECD0D50C3D099C594146EA25AC7E3EBB761 EBCE1DB866958BCFDD938395B9087FF1FDA771F8CD37B16EDD3A7CF8D60FE1BD CB17E2A2F905188C4ED9F3D08B4F479B32ED6B8C5230CB82655900410620BD84 A057FF58FA2C98BA5042F13F1EF9C5FD00FE6E4E4073C3C83019C0300D988619 062BAE4185A73F37226FCD68D09606AE9FA73C39F2E6F06F6924176186412943 FFD0289EDAFC2ADED8BF0BD7AC0AF0F97BB3E8EA5A81627B274033300C0300B0 75EB56ECDAB50B37DC70036EBAF146AC5AB200BD450B394E63802089674F7BFA 9250DFA3C75AEC41888252240C054407DFF0B348ADED86B3A82586AD7C888441 8780E8D399E9AC8087DAFA5690A7056D5860662217915438BEC02B6F1CC40BAF EC44B53E886B5713FCE9EFE7D0D1D98562B113D97C1B4C2B0B37002CCB82691A 31F0BEBE3EECDDBB17575C7105AEB9E61A5CB6BC170BB20C450ED050C2898AC0 4F393610FD7ED33A01AC103D0E7F3442E25F8D002094B5E6ACAD7C0800258480 500A16E6B5CC309A3D3A252111642D1999666F36CD58321ABEC0AE8347F0CA9E 3771E0D8115CBCC8C5FBD71A58B1A4136DF33A5128B4239B2BC0302D30C60142 41A468021D2D94521C387000478E1EC592C58BB166CD1A5CBEEA3274172C14A8 40067E1236238F0C9D287CB1D963A7599A5E070151AD339C8147D3F0140F2173 33CE1A628896D6656E864BCABB4139C66A0E4E8C8FE0E8D0180E0C0C61B23A8C 8B1649AC5EC1F1BB37E4502C76235F68472E5F8065E5B4B430A601479848E2D1 9CF326D88661803386B1F1716CDAB409DBB66DC3B265CBB072E54A5C7CD10A74 CF2BC054010CE981090F5406A783450A289D0A9B6AEFA6899428359DEECF1234 08918CEA5298B130D7358CD09B2DD45801BE07380D0F810AE0CA1A1CA150F704 CA0D0F93751B8E57475BD6C7820E8525DD0C1FB9D140F7FC22F2853664F36DC8 660BB03239188605C68CA418417CDEEA5D413368CE39B861C0881E730E462928 63504AE1F8F1E33879F224366DDA8462B188DEDE5E2C5CB810DDDDDD58D0D585 622E038B02440A10198028012225A02402DF43E079285A611E4FA4061C6A38A1 044A8AB9034D2905E32C06CCB8114B4660157184B5C3AFEC85E3344089878C09 E4F3C0FC0504C50245471B432167C1CAB4C1CAE4F462E5605A39ADE35CE7D094 6AEF8D05B0A9D28B3C9AC0CA5830C34C8573A6E1B264CD18038D8B196D4A2994 CB6594CB65ECDBB70F524A28A5303A3A8A818101747575A1A7A7079D9D9D9837 6F1E2CCB42AD56C3F2E5CB71E7D52B91350D484241A80455DAA3A9A210816829 D76ED1A3A98C7539821C660ECA30D19EA9E1A29E61CC5FB008D95C4F7CB08C1B 604C07CD285FE6DC006326283340290F3D574B838A3CB86941F3EB8420635989 F746DF15E6DCD19AA440A74F6F952A5876ECD8817DFBF6BDEDA17FF18B5F84B7 66390C4A40290195148A52101A6F279833D0C2776B2C9F0B2127A0B961403003 9C07E8E8EAC6A2252B90CB174149D28BA0715F226C04110A205C0889D70ADA93 559354A4ABBEB0D426D095256F069C5EC834DE1CADA55298181FC7E6CD9B512A 95DEF9D88580EFFB108C4046DB0FD78A52946BF5C69C81A64A3A2CD4C238CB08 73E7C030408980656691C9E491CDE6913EF511830BBDB609B0864B22C8D1EB88 1A4440940DA8785B80699A21640D752AE0A99055B49612FBF7EFC78E1D3B2044 6BDAAA94D2D5A2AFB3AEA87BA842D0954AD59B3BD086E5C5FA1CA575316C0320 6E538327EEA4C50D1FFD58A9C4A3B514E8C75A1A68D367A3C749E21BA5641486 6168C894C65A1CC19D0E329482E338D8B2650B8E1F3FDECA21C7460881F07DF8 54C72A2A292895B167D7EDBAD3CA765ACB01392BC5DACC23D9D0397360984010 556289F7AAC8A3098552894424702948B8D6DE9C928E698260BA3B67183CF6E0 90C669555F5A2E864746B079D326D8F6CCBBA3945204818F802ADD1A4881A68C E2C4D068AD25862D7D99997128E73A90994920E4A6098319CDA0D31E0D9D0A29 1020F26692E8B30243FAC7D15557F359004C29E608D18301B4B9AF11796EBC0E 973D7BF660E7CE9D9072768D38CE39A41FC0270A940A30C14099068D8060B25C 993BD019D3AC30CE25334CCAE31CDA00332C706640391C883435F4D4047C4A2E 52DE4BE280987C56856953E4CD710F227C16F97A94BE01893C9029905DD79D95 544C35D33421020F0174D0958C81CAF0B19472786272EE409BA659A28C4B6E98 34C938B43E2B6E4081874028A048A2B9213402A6353A055DA53C3BFE415292A1 90C84173ED45C2AC2695B64DE9AA4D4C4C60C3860DA8D55A62F0B666591602DF D370190315128C0910C660371C59AA355A1A226B09B4651A36E586C30DA3D014 100D13841B903034600568602C9541A4E582861E9BCA40E2C018C18D52BCE6FC 577BB702A0A6680992AC42291C397204DBB66D4310B494DEBEA365331684E7C1 677ABC92310E2919A81028572A8194B2A55F736A03775ABBF707BF9294F1128B 8B0E33CE404CD380821107BCC86B091862B92011E4F0355080B0584AA2A0190D 51C5312EB5205E9F5E7C282921A5445F5F1F5E7AE9A539834C2945C63411782E 7CCF85EF794DCB64A91298A6F9CEC9385AEFDE811B7C841BC6920830E7496309 440F292995C8804A4B44F4186F2117641A17055299876A5E52CD7829251CC7C1 E6CD9B71F2E4C9560FA7B563E61C9669C0773C48C6B4373309168E614E94CB9E 1062EEA4030028E323710F9A1B71C3DE300C50624229164B07494905422F4EA7 77914420EAF7028882A9CE0AD3AAAC100EF6C58F959231E472B98C175F7C1195 CADCCF26B02C0B1667F05D179273482EC12483941AF464B9628390B90B860040 281BD2450B4FA60384232D06E3908A27E533D13ADD546EA7321112434FCA10E0 746968029C022EA40494C2D0D010366CD800D7755B3D8C19592E97035312BEEF 4186F224E3A90F14956A6D02C0DC55860040283BAE47A6136FA68C833006CBE0 089409A574805369AF9E462E9261A594170388C7AB55F48E022063C02AF26629 71F8F0616CDDBA75D6F9712B562C1641840FDFF3A0B8FE5EC919A8D0B0ABB5FA C9C0F75BDA56CBA041D92061BAF9CFC2E900D13A677204D28252805261208CCB ED482292EC222ED5713A6428157739D290A1A47E5D49BCBE732776BDF146CBBB 3E5BEBECEC84F21C049E174296609283529DDE556AF59693F41978341D00A1C9 C496D4ECA1AC65C01326942461A04A171EC940A92248D2B7D8C2D65118E0880E 73204A7BAA0A012B84CDF8C6E173021900DADBDB21DD06A4EFC5198E9461F92D 184E8D4D1C6B755BAD7B3421FD20249912C0384838E1B0609928DB169454495F A3498B9B5B9F692DD650A3E7A9800705A21408240009A204947B18F0CFDDCCDC EEEE6E88460DC2F7C3DD92A09247DD44797C7462A0D56DB50CDAE0ECA402B129 63399A0A08845214B216462A265474A68750556AB033110995ACD5D4E7892693 509F1524880A00E71088A862CA448DB36A3D3D3DF06B25C810B454124C4A8050 D88E178C94AB2D836EA96001807C365B03C88806AC677692702E5C5BD644C337 7425A71B1E7156A148589623A9EC54F88BC4CF43594834590210501080F4A01A FBA1826A58299EF56972B12D5AB4086EB5ACFBD1810FE107087C1F81EF61B454 F69442CB897BCBA0AFFDDC37240839184D348CBC99108AB6AC05C7B7A0A4806C F23892C882D252A0BD35D263A99718B2064C2074F0932ED0D80F22EAA18444F2 72F68D1082DE9E6E78B52A84EF43F8BE6E97FA7A19992C97B2A631D4EAF65A06 0D000A646F3C2C4593F2DA343894322115A0840CCFEEB416AB26502A04ACD314 192F040280D01E2F1DC0DE07481B88FE5645DB38FBD6D1D1010B0102CF8DE7E4 698FD6CB78B97AFC5FFFD6EA96ABA4D683210005EC5288E63BD078DE034090CF 5868B81CF36474FA4752916A08298090483E00A264F889C4A30914201DA8C601 40B9F1679366D2B901BD62C50A3893E3904240501A37B9A2C1E4D17265EFCF5E DAD9F2F666045A48F9BA542A1E788D279110A0B39045D9A6E8090228A90006A4 BB1571800BA191B8EA4BA44337881CC039A0658384124310B742A1CE8D46AF5C B912F6D810841420429FF88A0110020AC0B1D172EB943143D08C92FD428A1A08 29C413D2428FEE6ACB61FB810087074F82672641583895764A1328DDAB88AA3C A524A492A8D7EA387A687BE8C968FAFBD808F057FFE13753D9876A5A357F38FD DE34AF03CD598C52F03D1FA55205EF5BF73E945FDB19760645F8B63E476B8EEB 0D95EB7B67C26E46A0DBF2795B4AEC26845C0790A60AAFAB98C77089A0BF7FB4 E96FE2443F6C6746497F7A1142A06EDB58FFE28BA856AB6FBB0FF92C476DF7BF D3674D9883ABF8CC49465900C46750DCC74E0127917C21CA7E0025254AA52A8E 1E3D017BD12ABCF0F493204A828804B4541227272B154AC98C40CF28185E7CC7 67A194DA1A6570716E4C080A59139DC5821E4B8B762A0553A5A0A6974008D8B6 8D0DEBD7BF23E4D8A2EC654A572F0AAE240EB2513A98143F24AA3AD3EF857F2F 8480E7BA70451E76D987EF34F47E0BA9B55A0490426268B2DADF9135677411E9 8C4003809062834EE152DDF9D016751691C964B4F74E013D157004D96934B071 E3C699B53953909A80C6F093BE887E4DC63F848A3397E6CF4049083F40C376A1 B29761FCE8A1F0ABF4DFC8F08A0021029C2C55B7F68F576634BA3063D0BEE76E 148108226923516F19048B3B8BC8E572B1F7CA10F65B41765DB7E51943CD96C0 51A9B542F43CD47F34BF97787E2A46C46B09DFF761DB0DF0F62B317C485FD81F C99E062D6037DCE0D0586DC34CB9CD18F4EA3B3F3321A5EC4B291F001D137BE7 17D15628249E1C8195522F29C8BEE761EBCB2F637C7C7CA6BB90920915E7E324 920C24DE4BD2DE1B672C538B27BD9642C2715CD46D1F34B70A63470E845F150E 95090121058E97AA25A554DF4C7779C6A0014048F954240F911110644D034BBB 3BF5107D3AE04DF1E4C0F7D1D7D787E1E1E1D97C7DA8C3290F4DC9482C1DE9F6 6A93B49C0E1B5010818F86DD80CC5C8A91A3C72045A80CE1718A30CE0C4E54F7 7F607967FF4C777976A083E04925955469D861A677514F07DADADA4E832B8220 5EEFDCB9F38CE65BA8E83F75BA54A82932D2B420FD3894166880AEEBA15AB561 2C588781D7B7E929C40843AD529042C0F37DD93F597FEAC9832D57DEB1CD0A34 27EA0D21C59BF104420051BAB7A2BB035DF33B9BB53905F9C08103387AF4E86C BE36361295EC2A29EDE36C02899C248305512A98144969AD16810E82355B81B7 ADC5F0A1BDA0AC397B124260B86AD7466DEFF9D9ECF3AC40F77EE0E3524AF948 A45F5105480841C6E0B8647137F2F9BCF6E6208881F7F7F7BFE37CE4562CF662 4C0978B177271A1E77FCA280987A2F82EDFB3EAAD53A68E74D18DCBD4B1F0B0D 47E843D04A291C19ABEEEFCA1AB31A7598156800F03DEF275269F940AC1E7A6A EBAAC50BD0DDDD1D430E84C0D0A95378634E4646D2A57B737A968C33264B73F3 2AFD39ED204208D8B68372B98EC2B23B70B46F33188FE672EB6F1452C2F57D79 78D27EF478D96E693076AACD1A349162BF927273934E83801282EE79795CBA7C 3132D92C022130393181575F7DB529789E8991A6CC624A609B12FC549859440B 52520225E1B93E2AE53A647E2D26876D3895C9B08FA32947C17C70B236567283 2766BBCFB306BD68DDDD9042FC830E16E1294C105FBDF4BEE53D58B674296AD5 2AB66FDFDEF2C4EF964C4D8596A47151604C5782694D4E17392210B0EB0D4C4E D631EFD27F83432FFD8BEEB30371E08CAADA0363D58DDD597E70B6BB3C6BD000 1078CECF9594C7E32C090088BED6A3B7B388F7AE5C81F1F1F1B99F7791F2DE38 C8A5F2E2B87F719A1E270131CA344AA51AD07E034AA3012AC32752458C82925A 5AC6EA8DDAE192FBA3817263D6ADC33302DD7DFDC73C25E577E2CE5C2A285242 70F5C58B70DB6DB781C59DBCB9B269BC744A494EA6786FFA7DA52482C047A552 C744D947E7EA3FC6BEF5CF404A0129F41275ED9452D8335CDE5D34D9ACB28DC8 CE083400388EFDA0526A04E9A0185E65DBD596C3BAB5AB71CB2DB79CE9D73459 93D7BD5DAE7CDAA2254E08817ADDC1D878058595F7A17FE71E54C786F470951F 84CD2381201098AC379C0313CE0F46EBCEAC826064670CBAE7B76E2F89407C53 37E9138B60AF5DDE837B7EEFA358BC78F1997E55B2ED54F91D697094473775E9 20F5859748321229259C8687F1F12A5CBE0ABCFD66ECDDF02C7CD785EFBA087C 0F221010818094026F0C955FCFB7B5FDF24CF7F98C4103C0F0D8C4DF29A5FA23 A12661F1420981C9196E5AB5149FFAD42791C964E6E2EB101528D395D2F192EA D821F27229E13A1E2627AA98A8702CBAF63F61F34F1F845BAFC3731AF03D570F C486A3DEA355BB76A81AFCEDF0D8F819CF689F13D097FDF65DB6E77A0F2417EF 84ABD0AB17B4E570EB5597E3139FF844DCAF3E238B6420D45E95D2ECF4548674 01A3A44EE54AA53A86466DF4DEF0D7D8FAF813181B3C0AB761C3731C0D3AF0F5 2204FA4E95D77775F79CB1370373041A000E1E3BFE8810E2D9E8F9D4BB015CBA B0031FBBE57ADC75D75D67FE654A36E5C549233FE9C611158DA284903D1F93A5 1A4E0D95D073ED5F60FFF6C3D8FFD2BFC06BD8F09C060237F16621040E8E9486 4E38F8FA912347CE489B239B33D0D7DDF94954AAD5FB01549AEE1690BA4BC095 4BE6E35FDDFE217CF4A31F3DC36F4BA5774AA59EA725240A9802AEEB6162B28A 93A72A98BFF6AB18381C60F3C33F82EF38F05D3D893108BD3808042AB6E36D1F A93F78F3CD376F3D6330A1CD196800587CFD6D47AAB5DA97485A3AE2DB2FE82B 5CAF593A1F7F70C7EDB8E79E7B9A2EBE9C99453D8E94344C936D4829D0687818 1FAFE1E4A92A7AAEFD4B9C3866E0D97FF896BE7381EF21F07D4811C43DE72008 B065707C2B32856F3DFDF4D373C666AE135C2C5DBCE8F54B572CBBCC348DF742 211ED68AB55349F4E44D74F52C42AEA30B7BF7EE9DD11C67D3A0F8EAA757A63A 7188E7A79268DE87520884845D77313E5EC5F07880E5B77C177BFB4EE2570F7E 7B4AA044529C48819D27C606F654C41F9526270FCF25973907FDECFA97D4F557 BEE7B9C50BBB3F6670DE7D5A1E2BF5E305398E9EEE05E859B112070E1C44A3D1 D2B5EB300D8AAF7CFA6220D4E078620BC2B2592A78BE40ADDAC0C8680565B70B BF71EB0FB1E1E7CF62CBA33FC65B9D43524A1C1B2B95369EA87DF58EBBEE7E72 6E1A6089CDF6DC7D47FBF5FFFEFEA5575EBE7A9369F06EDD8BF6C3E9547AEE9A EF7B083C1FA72A36B60F8CE3270F3D8CDDBB77BFE376F35986DA965BA1643261 3D9A05258480E3F8A8546C8C8C56612EFC307AAEF8F778EC5B7F8D63BB774CBB BD68F464A454B1FFF9D0E8F7B31D5D5F191C1898F3593A670D3400FCFA7F7EEF A6B5EF59F58CC1792108029D9FC6A0F5AC4CDFF3506DB8D83BE1E2B9CD5BF1F8 E38FBF6D6F4483FE6D2889F86A5929257C2F40BDEE62A25447A94AB1E4FAFF8C 4AAD1B8FFFED7F45BD34010071F750E92700740B74B252739E3870EA21DEBEE0 FE8163C7CECAED34E75C3AD2F6E35F3E3370C3556B5E5DD8BDE01ECE9811E9B4 4CCB89546044A1CB5458DADB8BCBD65E83D1B1318C8E8E4EBB4D93537CF5D317 034A424A95009EAC6368A80C74BE1F17DDF21D6C7BE6253CFF4FDF45E0BA2034 4A359B6F1FA49442A956F7FEF9C0A95FD0E2FC3F191C18687162C9CCEDAC8206 80879F7AEEF095AB56EE58B2A8E74E837173BA0C210A4C052AD09DE5B87CEDD5 58B8740506070751AFD79BB667728207FEED72F85E00DB763159AA6378A48C9A ECC5B2757F03575D815FFEB76F6060CF6B1A2C254DB79A48DF1561A25A779ED8 7FF2D13A31BF303C3C3C7936399C75D000F0D8AFD7BFB972D9E297972CECF93D CB32B3902A649B1E6ED2BC3914E6C1C3E2F9EDB8EAC675287674E2F8F1E3701C 7D5B0C83137CFEAE6E94CA3686472B283BEDE8B9FA01B4FFC67DD8F8F0A378E5 8987E03B8D54FE4EE325BA861C004E4D566ABFD833F853DAD6F1A7232323339D 5832633B27A001E0A9F55BFA8BB9CCD3CB7A17FD6E219FEB88DAAA4DE37B4832 081302EDD2C68AC58B70FD073E848EF95D181B1B43C3AEE1CEEB0DD8588AEE2B BF84AED55FC0AEF5DBB1E967FF84CAD8A9783A31A551BF25BA05502417C0C153 A3134FEC3BF1DF3B7B973E70F4E8D1FA3BECFA9CD8590D86D3D93DB7AE5BF8B9 3FB8F7E15517AF581707C8D44CFAC0D7D7F5459989EFB9F05C1F559A41CD2A62 70640C1FB96515BA17AE41FFF64DE87FFD95B8E81042843DE5D49CBF30A59452 0FC2BE7CF0D8C0C6FEB1AF77742D78F0587FFF39BB4EE39C797464FB8E1CAB6D 78E5B587962D5C505CB2B0FB5A4AB59BE94C00B16747160D2498C243CE29A327 67A0766A0CC7B66F4465E494FE4CAAFA8C27C84737990A5FAFD98DE0891D07FA 5E3951BABF56B71F2D974A733380D9A29D73D00050AED6826CC67AF6CDA3C7DE E8EDEEBAA5AD502844D37015A22B04C27532615507B1C083F2DD705A7672D541 136C4A637D06804327864B3F7979CF238393F6676DC7393717294EB1F3021A00 761F3A822DAFEFDE7FF0C8B187E7CF6B5BD9DBB3E01212DFEE33AD6949EB55A7 65490F256A5E455E4B23C8E1EB75C7099E7975EFC1C7771CFA2F59C3F8DA44CD 3EEB41EFADECBC818E6C7068B47264F0D4234323A3871774765CD739AFD82665 D8C320D1346C322DE8A66B69E2FBEB114829B1FBE8E0C4FF7AB1EFD17D27C73F 6FBBDEF355C73D77D7CD4D63E71D34008C4C4CAABE3D07DFD8FCEACEFF93358D 7C7767C79A6CC6E24AA9A4A78D481E10171F69D8342C464E8E8ED93F7D61EBAB 4F6CDFF7E7BD9DC56F1E1F2F4D5FF99C637B57808EAC5CB3EB41103CFDECE6AD 4F654C6359F7FC8E8B4C8353A5544A2E9A0147AF8F4D96BCC7366E3BF0A3E75E FEE644ADF1E5AADD786DB85C3BAF5E9CB67715680018181AC189D18921DB711F 7A616BDF6646E9D2059DED4B4DC3A0518E4DC30A0F04189B98F41E7D61CBE11F 3EF9E20F0E0F8D7DE96B9FBAE3D78F6EDED1D24DFFCEA59DF33C7AA676ED7B2E A3AEEBACFBD8FBAFFBB3AB565FF2A1455DF37322087064F044EDA94DDBFA9FEF DBF5E340C8872A75BBE5EBB22FD8DBD8CD57AD414F67FB7B7FFFD69BBEB96EED E5BFB04CF30F7B3ADB3BCFF77EFD7F6DEB37CCF812920B76C12ED805BB6017EC 2DEDFF02651502B1A25FA0770000000049454E44AE426082 } end object ButtonPanel: TButtonPanel AnchorSideTop.Control = chkElevateAll AnchorSideTop.Side = asrBottom Left = 12 Height = 33 Top = 100 Width = 376 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 24 BorderSpacing.Around = 8 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 0 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-1.1.30/src/platform/0000755000175000001440000000000015104114162015200 5ustar alexxusersdoublecmd-1.1.30/src/platform/win/0000755000175000001440000000000015104114162015775 5ustar alexxusersdoublecmd-1.1.30/src/platform/win/winrt/0000755000175000001440000000000015104114162017140 5ustar alexxusersdoublecmd-1.1.30/src/platform/win/winrt/WinRT.Core.pas0000644000175000001440000001171315104114162021542 0ustar alexxusersunit WinRT.Core; {$mode delphi} interface uses Classes, SysUtils, Windows; type HSTRING = HANDLE; PCNZWCH = PWideChar; TrustLevel = ( BaseTrust = 0, PartialTrust = (BaseTrust + 1), FullTrust = (PartialTrust + 1) ); IInspectable = interface(IUnknown) ['{AF86E2E0-B12D-4c6a-9C5A-D7AA65101E90}'] function GetIids(out iidCount: ULONG; out iids: PIID): HRESULT; stdcall; function GetRuntimeClassName(out className: HSTRING): HRESULT; stdcall; function GetTrustLevel(out trustLevel: TrustLevel): HRESULT; stdcall; end; { TWindowsString } TWindowsString = class private FHandle: HSTRING; public constructor Create(AHandle: HSTRING); overload; constructor Create(const AString: String); overload; constructor Create(const AString: UnicodeString); overload; destructor Destroy; override; function ToString: AnsiString; override; property Handle: HSTRING read FHandle; end; function RtActivateInstance(const AClassName: UnicodeString; out AInstance): HRESULT; function RoCreateInstance(const AClassName: UnicodeString; constref AClassID: TIID; out AInstance): HRESULT; implementation uses ComObj; type RO_INIT_TYPE = ( RO_INIT_SINGLETHREADED = 0, RO_INIT_MULTITHREADED = 1 ); var RoInitialize: function(initType: RO_INIT_TYPE): HRESULT; stdcall; RoUninitialize: procedure(); stdcall; RoActivateInstance: function(activatableClassId: HSTRING; out instance): HRESULT; stdcall; RoGetActivationFactory: function(activatableClassId: HSTRING; constref iid: TIID; out factory: IInspectable): HRESULT; stdcall; var WindowsCreateString: function(sourceString: PCNZWCH; length: UINT32; out str: HSTRING): HRESULT; stdcall; WindowsDeleteString: function(str: HSTRING): HRESULT; stdcall; WindowsGetStringRawBuffer: function(str: HSTRING; length: PUINT32): PCWSTR; stdcall; const libwinrt = 'api-ms-win-core-winrt-l1-1-0.dll'; libwinrt_string = 'api-ms-win-core-winrt-string-l1-1-0.dll'; var hWinRT: TLibHandle; hWinRTString: TLibHandle; procedure Initialize; begin if CheckWin32Version(10) then begin hWinRT:= LoadLibrary(libwinrt); if (hWinRT <> NilHandle) then try @RoInitialize:= GetProcAddress(hWinRT, 'RoInitialize'); @RoUninitialize:= GetProcAddress(hWinRT, 'RoUninitialize'); @RoActivateInstance:= GetProcAddress(hWinRT, 'RoActivateInstance'); @RoGetActivationFactory:= GetProcAddress(hWinRT, 'RoGetActivationFactory'); RoInitialize(RO_INIT_MULTITHREADED); except FreeLibrary(hWinRT); hWinRT:= NilHandle; end; hWinRTString:= LoadLibrary(libwinrt_string); if (hWinRTString <> NilHandle) then try @WindowsCreateString:= GetProcAddress(hWinRTString, 'WindowsCreateString'); @WindowsDeleteString:= GetProcAddress(hWinRTString, 'WindowsDeleteString'); @WindowsGetStringRawBuffer:= GetProcAddress(hWinRTString, 'WindowsGetStringRawBuffer'); except FreeLibrary(hWinRTString); hWinRTString:= NilHandle; end; end; end; procedure Finalize; begin if (hWinRT <> NilHandle) then begin RoUninitialize; FreeLibrary(hWinRT); end; if (hWinRTString <> NilHandle) then begin FreeLibrary(hWinRTString); end; end; function RtActivateInstance(const AClassName: UnicodeString; out AInstance): HRESULT; var AName: TWindowsString; begin AName:= TWindowsString.Create(AClassName); try Result:= RoActivateInstance(AName.FHandle, AInstance); finally AName.Free; end; end; function RoCreateInstance(const AClassName: UnicodeString; constref AClassID: TIID; out AInstance): HRESULT; var AName: TWindowsString; AFactory: IInspectable; begin AName:= TWindowsString.Create(AClassName); try Result:= RoGetActivationFactory(AName.FHandle, AClassID, AFactory); if Succeeded(Result) then begin Result:= AFactory.QueryInterface(AClassID, AInstance); end; finally AName.Free; end; end; { TWindowsString } constructor TWindowsString.Create(const AString: String); begin Create(UTF8Decode(AString)); end; constructor TWindowsString.Create(AHandle: HSTRING); begin FHandle:= AHandle; end; constructor TWindowsString.Create(const AString: UnicodeString); begin OleCheck(WindowsCreateString(PWideChar(AString), Length(AString), FHandle)); end; destructor TWindowsString.Destroy; begin inherited Destroy; if (FHandle <> 0) then WindowsDeleteString(FHandle); end; function TWindowsString.ToString: AnsiString; var P: PWideChar; L: UINT32 = 0; usString: UnicodeString; begin P:= WindowsGetStringRawBuffer(FHandle, @L); SetString(usString, P, L); Result:= UTF8Encode(usString); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/win/winrt/WinRT.Classes.pas0000644000175000001440000005211715104114162022252 0ustar alexxusersunit WinRT.Classes; {$mode delphi} interface uses Classes, SysUtils, Types, WinRT.Core; const Windows_System_Launcher = UnicodeString('Windows.System.Launcher'); Windows_Storage_StorageFile = UnicodeString('Windows.Storage.StorageFile'); Windows_Storage_StorageFolder = UnicodeString('Windows.Storage.StorageFolder'); Windows_System_LauncherOptions = UnicodeString('Windows.System.LauncherOptions'); type // Windows.Foundation.AsyncStatus AsyncStatus = ( Started = 0, Completed = 1, Canceled = 2, Error = 3 ); // Windows.Storage.Search.FolderDepth FolderDepth = ( Shallow = 0, Deep = 1 ); // Windows.Storage.Search.IndexerOption IndexerOption = ( UseIndexerWhenAvailable = 0, OnlyUseIndexer = 1, DoNotUseIndexer = 2, OnlyUseIndexerAndOptimizeForIndexedProperties = 3 ); // Windows.Storage.Search.DateStackOption DateStackOption = ( None = 0, Year = 1, Month = 2 ); // Windows.Storage.Search.CommonFileQuery CommonFileQuery = ( DefaultQuery = 0, OrderByName = 1, OrderByTitle = 2, OrderByMusicProperties = 3, OrderBySearchRank = 4, OrderByDate = 5 ); // Windows.Storage.FileAccessMode FileAccessMode = ( Read = 0, ReadWrite = 1 ); // Windows.Storage.NameCollisionOption NameCollisionOption = ( GenerateUniqueName = 0, ReplaceExisting = 1, FailIfExists = 2 ); // Windows.Storage.CreationCollisionOption CreationCollisionOption = ( GenerateUniqueNamez = 0, ReplaceExistingz = 1, FailIfExistsz = 2, OpenIfExists = 3 ); // Forward declarations IStorageFolder = interface; IAsyncOperation_1_Boolean = interface; IAsyncOperation_1_IStorageFile = interface; IAsyncOperation_1_IStorageFolder = interface; // Windows.Foundation.AsyncOperationCompletedHandler`1 IAsyncOperationCompletedHandler_1_IStorageFolder = interface(IUnknown) ['{C211026E-9E63-5452-BA54-3A07D6A96874}'] procedure Invoke(asyncInfo: IAsyncOperation_1_IStorageFolder; asyncStatus: AsyncStatus); safecall; end; // Windows.Foundation.IAsyncOperation`1 IAsyncOperation_1_IStorageFolder = interface(IInspectable) ['{6BE9E7D7-E83A-5CBC-802C-1768960B52C3}'] procedure Set_Completed(handler: IAsyncOperationCompletedHandler_1_IStorageFolder); safecall; function Get_Completed: IAsyncOperationCompletedHandler_1_IStorageFolder; safecall; function GetResults: IStorageFolder; safecall; property Completed: IAsyncOperationCompletedHandler_1_IStorageFolder read Get_Completed write Set_Completed; end; IStorageFolder = interface(IInspectable) ['{72D1CB78-B3EF-4F75-A80B-6FD9DAE2944B}'] function CreateFileAsync(desiredName: HSTRING): IAsyncOperation_1_IStorageFile; safecall; overload; function CreateFileAsync(desiredName: HSTRING; options: CreationCollisionOption): IAsyncOperation_1_IStorageFile; safecall; overload; function CreateFolderAsync(desiredName: HSTRING): IAsyncOperation_1_IStorageFolder; safecall; overload; function CreateFolderAsync(desiredName: HSTRING; options: CreationCollisionOption): IAsyncOperation_1_IStorageFolder; safecall; overload; function GetFileAsync(name: HSTRING): IAsyncOperation_1_IStorageFile; safecall; function GetFolderAsync(name: HSTRING): IAsyncOperation_1_IStorageFolder; safecall; function GetItemAsync(name: HSTRING): IInspectable; safecall; function GetFilesAsync: IInspectable; safecall; function GetFoldersAsync: IInspectable; safecall; function GetItemsAsync: IInspectable; safecall; end; IStorageFile = interface(IInspectable) ['{FA3F6186-4214-428C-A64C-14C9AC7315EA}'] function Get_FileType: HSTRING; safecall; function Get_ContentType: HSTRING; safecall; function OpenAsync(accessMode: FileAccessMode): IInspectable; safecall; function OpenTransactedWriteAsync: IInspectable; safecall; function CopyAsync(destinationFolder: IStorageFolder): IAsyncOperation_1_IStorageFile; safecall; overload; function CopyAsync(destinationFolder: IStorageFolder; desiredNewName: HSTRING): IAsyncOperation_1_IStorageFile; safecall; overload; function CopyAsync(destinationFolder: IStorageFolder; desiredNewName: HSTRING; option: NameCollisionOption): IAsyncOperation_1_IStorageFile; safecall; overload; function CopyAndReplaceAsync(fileToReplace: IStorageFile): IInspectable; safecall; function MoveAsync(destinationFolder: IStorageFolder): IInspectable; safecall; overload; function MoveAsync(destinationFolder: IStorageFolder; desiredNewName: HSTRING): IInspectable; safecall; overload; function MoveAsync(destinationFolder: IStorageFolder; desiredNewName: HSTRING; option: NameCollisionOption): IInspectable; safecall; overload; function MoveAndReplaceAsync(fileToReplace: IStorageFile): IInspectable; safecall; property ContentType: HSTRING read Get_ContentType; property FileType: HSTRING read Get_FileType; end; // Windows.Foundation.AsyncOperationCompletedHandler`1 IAsyncOperationCompletedHandler_1_IStorageFile = interface(IUnknown) ['{E521C894-2C26-5946-9E61-2B5E188D01ED}'] procedure Invoke(asyncInfo: IAsyncOperation_1_IStorageFile; asyncStatus: AsyncStatus); safecall; end; // Windows.Foundation.IAsyncOperation`1 IAsyncOperation_1_IStorageFile = interface(IInspectable) ['{5E52F8CE-ACED-5A42-95B4-F674DD84885E}'] procedure Set_Completed(handler: IAsyncOperationCompletedHandler_1_IStorageFile); safecall; function Get_Completed: IAsyncOperationCompletedHandler_1_IStorageFile; safecall; function GetResults: IStorageFile; safecall; property Completed: IAsyncOperationCompletedHandler_1_IStorageFile read Get_Completed write Set_Completed; end; // Windows.Storage.StorageFile IStorageFileStatics = interface(IInspectable) ['{5984C710-DAF2-43C8-8BB4-A4D3EACFD03F}'] function GetFileFromPathAsync(path: HSTRING): IAsyncOperation_1_IStorageFile; safecall; function GetFileFromApplicationUriAsync(uri: IInspectable): IAsyncOperation_1_IStorageFile; safecall; function CreateStreamedFileAsync(displayNameWithExtension: HSTRING; dataRequested: IUnknown; thumbnail: IInspectable): IAsyncOperation_1_IStorageFile; safecall; function ReplaceWithStreamedFileAsync(fileToReplace: IStorageFile; dataRequested: IUnknown; thumbnail: IInspectable): IAsyncOperation_1_IStorageFile; safecall; function CreateStreamedFileFromUriAsync(displayNameWithExtension: HSTRING; uri: IInspectable; thumbnail: IInspectable): IAsyncOperation_1_IStorageFile; safecall; function ReplaceWithStreamedFileFromUriAsync(fileToReplace: IStorageFile; uri: IInspectable; thumbnail: IInspectable): IAsyncOperation_1_IStorageFile; safecall; end; // Windows.Storage.Search.StorageFileQueryResult IStorageFileQueryResult = interface(IInspectable) ['{52FDA447-2BAA-412C-B29F-D4B1778EFA1E}'] function GetFilesAsync(startIndex: UINT32; maxNumberOfItems: UINT32; out operation: IInspectable): HRESULT; stdcall; function GetFilesAsyncDefaultStartAndCount(out operation: IInspectable): HRESULT; stdcall; end; // Windows.Storage.Search.QueryOptions IQueryOptions = interface(IInspectable) ['{1E5E46EE-0F45-4838-A8E9-D0479D446C30}'] function Get_FileTypeFilter(out value: IUnknown): HRESULT; stdcall; function Get_FolderDepth(out value: FolderDepth): HRESULT; stdcall; function Put_FolderDepth(value: FolderDepth): HRESULT; stdcall; function Get_ApplicationSearchFilter(out value: HSTRING): HRESULT; stdcall; function Put_ApplicationSearchFilter(value: HSTRING): HRESULT; stdcall; function Get_UserSearchFilter(out value: HSTRING): HRESULT; stdcall; function Put_UserSearchFilter(value: HSTRING): HRESULT; stdcall; function Get_Language(out value: HSTRING): HRESULT; stdcall; function Put_Language(value: HSTRING): HRESULT; stdcall; function Get_IndexerOption(out value: IndexerOption): HRESULT; stdcall; function Put_IndexerOption(value: IndexerOption): HRESULT; stdcall; function Get_SortOrder(out value: IUnknown): HRESULT; stdcall; function Get_GroupPropertyName(out value: HSTRING): HRESULT; stdcall; function Get_DateStackOption(out value: DateStackOption): HRESULT; stdcall; function SaveToString(out value: HSTRING): HRESULT; stdcall; function LoadFromString(value: HSTRING): HRESULT; stdcall; function SetThumbnailPrefetch(mode: DWORD; requestedSize: UINT32; options: DWORD): HRESULT; stdcall; function SetPropertyPrefetch(options: DWORD; propertiesToRetrieve: IUnknown): HRESULT; stdcall; end; // Windows.Storage.Search.QueryOptions IQueryOptionsFactory = interface(IInspectable) ['{032E1F8C-A9C1-4E71-8011-0DEE9D4811A3}'] function CreateCommonFileQuery(query: CommonFileQuery; fileTypeFilter: IInspectable; out queryOptions: IQueryOptions): HRESULT; stdcall; function CreateCommonFolderQuery(query: DWORD; out queryOptions: IQueryOptions): HRESULT; stdcall; end; IStorageFolderQueryOperations = interface(IInspectable) ['{CB43CCC9-446B-4A4F-BE97-757771BE5203}'] function GetIndexedStateAsync(out operation: IUnknown): HRESULT; stdcall; function CreateFileQueryOverloadDefault(out value: IStorageFileQueryResult): HRESULT; stdcall; function CreateFileQuery(query: CommonFileQuery; out value: IStorageFileQueryResult): HRESULT; stdcall; function CreateFileQueryWithOptions(queryOptions: IQueryOptions; out value: IStorageFileQueryResult): HRESULT; stdcall; function CreateFolderQueryOverloadDefault(out value: IInspectable): HRESULT; stdcall; function CreateFolderQuery(query: DWORD; out value: IInspectable): HRESULT; stdcall; function CreateFolderQueryWithOptions(queryOptions: IQueryOptions; out value: IInspectable): HRESULT; stdcall; function CreateItemQuery(out value: IInspectable): HRESULT; stdcall; function CreateItemQueryWithOptions(queryOptions: IQueryOptions; out value: IInspectable): HRESULT; stdcall; function GetFilesAsync(query: CommonFileQuery; startIndex: UINT32; maxItemsToRetrieve: UINT32; out operation: IUnknown): HRESULT; stdcall; function GetFilesAsyncOverloadDefaultStartAndCount(query: CommonFileQuery; out operation: IInspectable): HRESULT; stdcall; function GetFoldersAsync(query: DWORD; startIndex: UINT32; maxItemsToRetrieve: UINT32; out operation: IInspectable): HRESULT; stdcall; function GetFoldersAsyncOverloadDefaultStartAndCount(query: DWORD; out operation: IInspectable): HRESULT; stdcall; function GetItemsAsync(startIndex: UINT32; maxItemsToRetrieve: UINT32; out operation: IInspectable): HRESULT; stdcall; function AreQueryOptionsSupported(queryOptions: IQueryOptions; out value: LongBool): HRESULT; stdcall; function IsCommonFolderQuerySupported(query: DWORD; out value: LongBool): HRESULT; stdcall; function IsCommonFileQuerySupported(query: CommonFileQuery; out value: LongBool): HRESULT; stdcall; end; // Windows.Storage.StorageFolder IStorageFolderStatics = interface(IInspectable) ['{08F327FF-85D5-48B9-AEE9-28511E339F9F}'] function GetFolderFromPathAsync(path: HSTRING): IAsyncOperation_1_IStorageFolder; safecall; end; // Windows.System.LauncherOptions ILauncherOptions = interface(IInspectable) ['{BAFA21D8-B071-4CD8-853E-341203E557D3}'] function Get_TreatAsUntrusted(value: PLongBool): HRESULT; stdcall; function Set_TreatAsUntrusted(value: LongBool): HRESULT; stdcall; function Get_DisplayApplicationPicker(value: PLongBool): HRESULT; stdcall; function Set_DisplayApplicationPicker(value: LongBool): HRESULT; stdcall; function UI(out value: IInspectable): HRESULT; stdcall; function Get_PreferredApplicationPackageFamilyName(out value: HSTRING): HRESULT; stdcall; function Set_PreferredApplicationPackageFamilyName(value: HSTRING): HRESULT; stdcall; function Get_PreferredApplicationDisplayName(out value: HSTRING): HRESULT; stdcall; function Set_PreferredApplicationDisplayName(value: HSTRING): HRESULT; stdcall; function Get_FallbackUri(out value: IUnknown): HRESULT; stdcall; function Set_FallbackUri(value: IUnknown): HRESULT; stdcall; function Get_ContentType(out value: HSTRING): HRESULT; stdcall; function Set_ContentType(value: HSTRING): HRESULT; stdcall; end; // Windows.System.LauncherOptions ILauncherOptions2 = interface(IInspectable) ['{3BA08EB4-6E40-4DCE-A1A3-2F53950AFB49}'] function Get_TargetApplicationPackageFamilyName: HSTRING; safecall; procedure Set_TargetApplicationPackageFamilyName(value: HSTRING); safecall; function Get_NeighboringFilesQuery: IStorageFileQueryResult; safecall; procedure Set_NeighboringFilesQuery(value: IStorageFileQueryResult); safecall; property NeighboringFilesQuery: IStorageFileQueryResult read Get_NeighboringFilesQuery write Set_NeighboringFilesQuery; property TargetApplicationPackageFamilyName: HSTRING read Get_TargetApplicationPackageFamilyName write Set_TargetApplicationPackageFamilyName; end; // Windows.Foundation.AsyncOperationCompletedHandler`1 IAsyncOperationCompletedHandler_1_Boolean = interface(IUnknown) ['{C1D3D1A2-AE17-5A5F-B5A2-BDCC8844889A}'] procedure Invoke(asyncInfo: IAsyncOperation_1_Boolean; asyncStatus: AsyncStatus); safecall; end; // Windows.Foundation.IAsyncOperation`1 IAsyncOperation_1_Boolean = interface(IInspectable) ['{CDB5EFB3-5788-509D-9BE1-71CCB8A3362A}'] procedure Set_Completed(handler: IAsyncOperationCompletedHandler_1_Boolean); safecall; function Get_Completed: IAsyncOperationCompletedHandler_1_Boolean; safecall; function GetResults: Boolean; safecall; property Completed: IAsyncOperationCompletedHandler_1_Boolean read Get_Completed write Set_Completed; end; // Windows.System.Launcher ILauncherStatics = interface(IInspectable) ['{277151C3-9E3E-42F6-91A4-5DFDEB232451}'] function LaunchFileAsync(AFile: IStorageFile): IAsyncOperation_1_Boolean; safecall; function LaunchFileWithOptionsAsync(AFile: IStorageFile; options: ILauncherOptions): IAsyncOperation_1_Boolean; safecall; function LaunchUriAsync(uri: IUnknown): IAsyncOperation_1_Boolean; safecall; function LaunchUriWithOptionsAsync(uri: IUnknown; options: ILauncherOptions): IAsyncOperation_1_Boolean; safecall; end; { TStorageFile } TStorageFile = class private FInstance: IStorageFileStatics; static; class function Instance: IStorageFileStatics; public class function GetFileFromPathAsync(const APath: String): IAsyncOperation_1_IStorageFile; end; { TStorageFolder } TStorageFolder = class private FInstance: IStorageFolderStatics; static; class function Instance: IStorageFolderStatics; public class function GetFolderFromPathAsync(const APath: String): IAsyncOperation_1_IStorageFolder; end; { TLauncher } TLauncher = class private FInstance: ILauncherStatics; static; class function Instance: ILauncherStatics; public class function LaunchFileAsync(AFile: IStorageFile): IAsyncOperation_1_Boolean; class function LaunchFileWithOptionsAsync(AFile: IStorageFile; options: ILauncherOptions): IAsyncOperation_1_Boolean; end; { TLauncherThread } TLauncherThread = class(TThread) private FEvent: THandle; FFileName: String; FStorageFile: IStorageFile; FStorageFolder: IStorageFolder; protected procedure Execute; override; public constructor Create(const FileName: String); destructor Destroy; override; class procedure LaunchFileAsync(const FileName: String); end; { TAsyncOperationCompletedHandler_1_IStorageFile } TAsyncOperationCompletedHandler_1_IStorageFile = class(TInterfacedObject, IAsyncOperationCompletedHandler_1_IStorageFile) private FLauncher: TLauncherThread; protected procedure Invoke(asyncInfo: IAsyncOperation_1_IStorageFile; asyncStatus: AsyncStatus); safecall; public constructor Create(ALauncher: TLauncherThread); end; { TAsyncOperationCompletedHandler_1_IStorageFolder } TAsyncOperationCompletedHandler_1_IStorageFolder = class(TInterfacedObject, IAsyncOperationCompletedHandler_1_IStorageFolder) private FLauncher: TLauncherThread; protected procedure Invoke(asyncInfo: IAsyncOperation_1_IStorageFolder; asyncStatus: AsyncStatus); safecall; public constructor Create(ALauncher: TLauncherThread); end; implementation uses ComObj, Windows; { TStorageFile } class function TStorageFile.Instance: IStorageFileStatics; begin if (FInstance = nil) then begin OleCheck(RoCreateInstance(Windows_Storage_StorageFile, IStorageFileStatics, FInstance)); end; Result:= FInstance; end; class function TStorageFile.GetFileFromPathAsync(const APath: String): IAsyncOperation_1_IStorageFile; begin with TWindowsString.Create(APath) do try Result:= Instance.GetFileFromPathAsync(Handle); finally Free; end; end; { TStorageFolder } class function TStorageFolder.Instance: IStorageFolderStatics; begin if (FInstance = nil) then begin OleCheck(RoCreateInstance(Windows_Storage_StorageFolder, IStorageFolderStatics, FInstance)); end; Result:= FInstance; end; class function TStorageFolder.GetFolderFromPathAsync(const APath: String): IAsyncOperation_1_IStorageFolder; begin with TWindowsString.Create(APath) do try Result:= Instance.GetFolderFromPathAsync(Handle); finally Free; end; end; { TLauncher } class function TLauncher.Instance: ILauncherStatics; begin if (FInstance = nil) then begin OleCheck(RoCreateInstance(Windows_System_Launcher, ILauncherStatics, FInstance)); end; Result:= FInstance; end; class function TLauncher.LaunchFileAsync(AFile: IStorageFile): IAsyncOperation_1_Boolean; begin Result:= Instance.LaunchFileAsync(AFile); end; class function TLauncher.LaunchFileWithOptionsAsync(AFile: IStorageFile; options: ILauncherOptions): IAsyncOperation_1_Boolean; begin Result:= Instance.LaunchFileWithOptionsAsync(AFile, options); end; { TLauncherThread } procedure TLauncherThread.Execute; var AOptions: ILauncherOptions; AOptions2: ILauncherOptions2; AQuery: IStorageFileQueryResult; AFolderQuery: IStorageFolderQueryOperations; FileOperation: IAsyncOperation_1_IStorageFile; FolderOperation: IAsyncOperation_1_IStorageFolder; FileHandler: TAsyncOperationCompletedHandler_1_IStorageFile; FolderHandler: TAsyncOperationCompletedHandler_1_IStorageFolder; begin try FileHandler:= TAsyncOperationCompletedHandler_1_IStorageFile.Create(Self); FileOperation:= TStorageFile.GetFileFromPathAsync(FFileName); FileOperation.Completed:= FileHandler; WaitForSingleObject(FEvent, INFINITE); ResetEvent(FEvent); FolderHandler:= TAsyncOperationCompletedHandler_1_IStorageFolder.Create(Self); FolderOperation:= TStorageFolder.GetFolderFromPathAsync(ExtractFileDir(FFileName)); FolderOperation.Completed:= FolderHandler; WaitForSingleObject(FEvent, INFINITE); OleCheck(RtActivateInstance(Windows_System_LauncherOptions, AOptions)); OleCheck(AOptions.QueryInterface(ILauncherOptions2, AOptions2)); OleCheck(FStorageFolder.QueryInterface(IStorageFolderQueryOperations, AFolderQuery)); OleCheck(AFolderQuery.CreateFileQuery(DefaultQuery, AQuery)); AOptions2.NeighboringFilesQuery:= AQuery; TLauncher.LaunchFileWithOptionsAsync(FStorageFile, AOptions); except on E: Exception do begin MessageBoxW(0, PWideChar(UTF8Decode(E.Message)), nil, MB_OK or MB_ICONERROR); end; end; end; constructor TLauncherThread.Create(const FileName: String); begin FFileName:= FileName; inherited Create(True); FreeOnTerminate:= True; FEvent:= CreateEventW(nil, True, False, nil); end; destructor TLauncherThread.Destroy; begin CloseHandle(FEvent); inherited Destroy; end; class procedure TLauncherThread.LaunchFileAsync(const FileName: String); begin with TLauncherThread.Create(FileName) do Start; end; { TAsyncOperationCompletedHandler_1_IStorageFolder } procedure TAsyncOperationCompletedHandler_1_IStorageFolder.Invoke( asyncInfo: IAsyncOperation_1_IStorageFolder; asyncStatus: AsyncStatus); safecall; begin FLauncher.FStorageFolder:= asyncInfo.GetResults; SetEvent(FLauncher.FEvent); end; constructor TAsyncOperationCompletedHandler_1_IStorageFolder.Create( ALauncher: TLauncherThread); begin FLauncher:= ALauncher; end; { TAsyncOperationCompletedHandler_1_IStorageFile } procedure TAsyncOperationCompletedHandler_1_IStorageFile.Invoke( asyncInfo: IAsyncOperation_1_IStorageFile; asyncStatus: AsyncStatus); safecall; begin FLauncher.FStorageFile:= asyncInfo.GetResults; SetEvent(FLauncher.FEvent); end; constructor TAsyncOperationCompletedHandler_1_IStorageFile.Create( ALauncher: TLauncherThread); begin FLauncher:= ALauncher; end; end. doublecmd-1.1.30/src/platform/win/uwin32widgetsetdark.pas0000644000175000001440000016206315104114162022423 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Windows dark style widgetset implementation Copyright (C) 2021-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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, see . } unit uWin32WidgetSetDark; {$mode objfpc}{$H+} {$modeswitch advancedrecords} interface uses LCLVersion; procedure ApplyDarkStyle; implementation uses Classes, SysUtils, Win32Int, WSLCLClasses, Forms, Windows, Win32Proc, Menus, Controls, LCLType, Win32WSComCtrls, ComCtrls, LMessages, Win32WSStdCtrls, WSStdCtrls, Win32WSControls, StdCtrls, WSControls, Graphics, Themes, LazUTF8, UxTheme, Win32Themes, ExtCtrls, WSMenus, JwaWinGDI, FPImage, Math, uDarkStyle, WSComCtrls, CommCtrl, uImport, WSForms, Win32WSButtons, Buttons, Win32Extra, Win32WSForms, Win32WSSpin, Spin, Win32WSMenus, Dialogs, GraphUtil, Generics.Collections, TmSchema, InterfaceBase; type TWinControlDark = class(TWinControl); TCustomGroupBoxDark = class(TCustomGroupBox); type { TWin32WSWinControlDark } TWin32WSWinControlDark = class(TWin32WSWinControl) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSStatusBarDark } TWin32WSStatusBarDark = class(TWin32WSStatusBar) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSCustomComboBoxDark } TWin32WSCustomComboBoxDark = class(TWin32WSCustomComboBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; class function GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; override; end; { TWin32WSCustomMemoDark } TWin32WSCustomMemoDark = class(TWin32WSCustomMemo) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSCustomListBoxDark } TWin32WSCustomListBoxDark = class(TWin32WSCustomListBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSScrollBoxDark } TWin32WSScrollBoxDark = class(TWin32WSScrollBox) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSCustomFormDark } TWin32WSCustomFormDark = class(TWin32WSCustomForm) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; end; { TWin32WSTrackBarDark } TWin32WSTrackBarDark = class(TWin32WSTrackBar) published class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override; class procedure DefaultWndHandler(const AWinControl: TWinControl; var AMessage); override; end; { TWin32WSPopupMenuDark } TWin32WSPopupMenuDark = class(TWin32WSPopupMenu) published class procedure Popup(const APopupMenu: TPopupMenu; const X, Y: integer); override; end; const ID_SUB_SCROLLBOX = 1; ID_SUB_LISTBOX = 2; ID_SUB_COMBOBOX = 3; ID_SUB_STATUSBAR = 4; ID_SUB_TRACKBAR = 5; const themelib = 'uxtheme.dll'; const VSCLASS_DARK_EDIT = 'DarkMode_CFD::Edit'; VSCLASS_DARK_TAB = 'BrowserTab::Tab'; VSCLASS_DARK_BUTTON = 'DarkMode_Explorer::Button'; VSCLASS_DARK_COMBOBOX = 'DarkMode_CFD::Combobox'; VSCLASS_DARK_SCROLLBAR = 'DarkMode_Explorer::ScrollBar'; VSCLASS_PROGRESS_INDER = 'Indeterminate::Progress'; const MDL_MENU_SUBMENU = #$EE#$A5#$B0; // $E970 MDL_RADIO_FILLED = #$EE#$A8#$BB; // $EA3B MDL_RADIO_CHECKED = #$EE#$A4#$95; // $E915 MDL_RADIO_OUTLINE = #$EE#$A8#$BA; // $EA3A MDL_CHECKBOX_FILLED = #$EE#$9C#$BB; // $E73B MDL_CHECKBOX_CHECKED = #$EE#$9C#$BE; // $E73E MDL_CHECKBOX_GRAYED = #$EE#$9C#$BC; // $E73C MDL_CHECKBOX_OUTLINE = #$EE#$9C#$B9; // $E739 type TThemeClassMap = specialize TDictionary; var ThemeClass: TThemeClassMap; Win32Theme: TWin32ThemeServices; OldUpDownWndProc: Windows.WNDPROC; CustomFormWndProc: Windows.WNDPROC; SysColor: array[0..COLOR_ENDCOLORS] of TColor; SysColorBrush: array[0..COLOR_ENDCOLORS] of HBRUSH; DefSubclassProc: function(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; SetWindowSubclass: function(hWnd: HWND; pfnSubclass: SUBCLASSPROC; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; stdcall; procedure EnableDarkStyle(Window: HWND); begin AllowDarkModeForWindow(Window, True); SetWindowTheme(Window, 'DarkMode_Explorer', nil); SendMessageW(Window, WM_THEMECHANGED, 0, 0); end; procedure AllowDarkStyle(var Window: HWND); begin if (Window <> 0) then begin AllowDarkModeForWindow(Window, True); Window:= 0; end; end; function HSVToColor(H, S, V: Double): TColor; var R, G, B: Integer; begin HSVtoRGB(H, S, V, R, G, B); R := Min(MAXBYTE, R); G := Min(MAXBYTE, G); B := Min(MAXBYTE, B); Result:= RGBToColor(R, G, B); end; function Darker(Color: TColor; Factor: Integer): TColor; forward; function Lighter(Color: TColor; Factor: Integer): TColor; var H, S, V: Double; begin // Invalid factor if (Factor <= 0) then Exit(Color); // Makes color darker if (Factor < 100) then begin Exit(darker(Color, 10000 div Factor)); end; ColorToHSV(Color, H, S, V); V:= (Factor * V) / 100; if (V > High(Word)) then begin // Overflow, adjust saturation S -= V - High(Word); if (S < 0) then S := 0; V:= High(Word); end; Result:= HSVToColor(H, S, V); end; function Darker(Color: TColor; Factor: Integer): TColor; var H, S, V: Double; begin // Invalid factor if (Factor <= 0) then Exit(Color); // Makes color lighter if (Factor < 100) then Exit(lighter(Color, 10000 div Factor)); ColorToHSV(Color, H, S, V); V := (V * 100) / Factor; Result:= HSVToColor(H, S, V); end; { Fill rectangle gradient } function FillGradient(hDC: HDC; Start, Finish: TColor; ARect: TRect; dwMode: ULONG): Boolean; var cc: TFPColor; gRect: GRADIENT_RECT; vert: array[0..1] of TRIVERTEX; begin cc:= TColorToFPColor(Start); vert[0].x := ARect.Left; vert[0].y := ARect.Top; vert[0].Red := cc.red; vert[0].Green := cc.green; vert[0].Blue := cc.blue; vert[0].Alpha := cc.alpha; cc:= TColorToFPColor(ColorToRGB(Finish)); vert[1].x := ARect.Right; vert[1].y := ARect.Bottom; vert[1].Red := cc.red; vert[1].Green := cc.green; vert[1].Blue := cc.blue; vert[1].Alpha := cc.alpha; gRect.UpperLeft := 0; gRect.LowerRight := 1; Result:= JwaWinGDI.GradientFill(hDC, vert, 2, @gRect, 1, dwMode); end; function GetNonClientMenuBorderRect(Window: HWND): TRect; var R, W: TRect; begin GetClientRect(Window, @R); // Map to screen coordinate space MapWindowPoints(Window, 0, @R, 2); GetWindowRect(Window, @W); OffsetRect(R, -W.Left, -W.Top); Result:= Classes.Rect(R.Left, R.Top - 1, R.Right, R.Top); end; { Set menu background color } procedure SetMenuBackground(Menu: HMENU); var MenuInfo: TMenuInfo; begin MenuInfo:= Default(TMenuInfo); MenuInfo.cbSize:= SizeOf(MenuInfo); MenuInfo.fMask:= MIM_BACKGROUND or MIM_APPLYTOSUBMENUS; MenuInfo.hbrBack:= CreateSolidBrush(RGBToColor(45, 45, 45)); SetMenuInfo(Menu, @MenuInfo); end; { Set control colors } procedure SetControlColors(Control: TControl; Canvas: HDC); var Color: TColor; begin // Set background color Color:= Control.Color; if Color = clDefault then begin Color:= Control.GetDefaultColor(dctBrush); end; SetBkColor(Canvas, ColorToRGB(Color)); // Set text color Color:= Control.Font.Color; if Color = clDefault then begin Color:= Control.GetDefaultColor(dctFont); end; SetTextColor(Canvas, ColorToRGB(Color)); end; { TWin32WSUpDownControlDark } procedure DrawUpDownArrow(Window: HWND; Canvas: TCanvas; ARect: TRect; AType: TUDAlignButton); var j: integer; ax, ay, ah, aw: integer; procedure Calculate(var a, b: Integer); var tmp: Double; begin tmp:= Double(a + 1) / 2; if (tmp > b) then begin a:= 2 * b - 1; b:= (a + 1) div 2; end else begin b:= Round(tmp); a:= 2 * b - 1; end; b:= Max(b, 3); a:= Max(a, 5); end; begin aw:= ARect.Width div 2; ah:= ARect.Height div 2; if IsWindowEnabled(Window) then Canvas.Pen.Color:= clBtnText else begin Canvas.Pen.Color:= clGrayText; end; if (AType in [udLeft, udRight]) then Calculate(ah, aw) else begin Calculate(aw, ah); end; ax:= ARect.Left + (ARect.Width - aw) div 2; ay:= ARect.Top + (ARect.Height - ah) div 2; case AType of udLeft: begin for j:= 0 to ah div 2 do begin Canvas.MoveTo(ax + aw - j - 2, ay + j); Canvas.LineTo(ax + aw - j - 2, ay + ah - j - 1); end; end; udRight: begin for j:= 0 to ah div 2 do begin Canvas.MoveTo(ax + j, ay + j); Canvas.LineTo(ax + j, ay + ah - j - 1); end; end; udTop: begin for j:= 0 to aw div 2 do begin Canvas.MoveTo(ax + j, ay + ah - j - 1); Canvas.LineTo(ax + aw - j, ay + ah - j - 1); end; end; udBottom: begin for j:= 0 to aw div 2 do begin Canvas.MoveTo(ax + j, ay + j); Canvas.LineTo(ax + aw - j, ay + j); end; end; end; end; function UpDownWndProc(Window: HWND; Msg: UINT; wParam: Windows.WPARAM; lParam: Windows.LPARAM): LRESULT; stdcall; var DC: HDC; L, R: TRect; rcDst: TRect; ARect: TRect; PS: PAINTSTRUCT; LCanvas : TCanvas; LButton, RButton: TUDAlignButton; begin case Msg of WM_PAINT: begin DC := BeginPaint(Window, @ps); LCanvas := TCanvas.Create; try LCanvas.Handle:= DC; GetClientRect(Window, @ARect); LCanvas.Brush.Color:= SysColor[COLOR_BTNFACE]; LCanvas.FillRect(ps.rcPaint); L:= ARect; R:= ARect; if (GetWindowLongPtr(Window, GWL_STYLE) and UDS_HORZ <> 0) then begin LButton:= udLeft; RButton:= udRight; R.Left:= R.Width div 2; L.Right:= L.Right - L.Width div 2; end else begin LButton:= udTop; RButton:= udBottom; R.Top:= R.Height div 2; L.Bottom:= L.Bottom - L.Height div 2; end; if (IntersectRect(rcDst, L, PS.rcPaint)) then begin LCanvas.Pen.Color:= RGBToColor(38, 38, 38); LCanvas.RoundRect(L, 4, 4); InflateRect(L, -1, -1); LCanvas.Pen.Color:= RGBToColor(92, 92, 92); LCanvas.RoundRect(L, 4, 4); DrawUpDownArrow(Window, LCanvas, L, LButton); end; if (IntersectRect(rcDst, R, PS.rcPaint)) then begin LCanvas.Pen.Color:= RGBToColor(38, 38, 38); LCanvas.RoundRect(R, 4, 4); InflateRect(R, -1, -1); LCanvas.Pen.Color:= RGBToColor(92, 92, 92); LCanvas.RoundRect(R, 4, 4); DrawUpDownArrow(Window, LCanvas, R, RButton); end; finally LCanvas.Handle:= 0; LCanvas.Free; end; EndPaint(Window, @ps); Result:= 0; end; WM_ERASEBKGND: begin Exit(1); end; else begin Result:= CallWindowProc(OldUpDownWndProc, Window, Msg, WParam, LParam); end; end; end; { TWin32WSTrackBarDark } function TrackBarWindowProc(Window: HWND; Msg: UINT; wParam: Windows.WPARAM; lParam: Windows.LPARAM; uISubClass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall; begin if Msg = WM_ERASEBKGND then Result := 1 else Result := DefSubclassProc(Window, Msg, WParam, LParam); end; class function TWin32WSTrackBarDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; begin AWinControl.Color:= SysColor[COLOR_BTNFACE]; Result:= inherited CreateHandle(AWinControl, AParams); SetWindowSubclass(Result, @TrackBarWindowProc, ID_SUB_TRACKBAR, 0); end; class procedure TWin32WSTrackBarDark.DefaultWndHandler( const AWinControl: TWinControl; var AMessage); var NMHdr: PNMHDR; NMCustomDraw: PNMCustomDraw; begin with TLMessage(AMessage) do case Msg of CN_NOTIFY: begin NMHdr := PNMHDR(LParam); if NMHdr^.code = NM_CUSTOMDRAW then begin NMCustomDraw:= PNMCustomDraw(LParam); case NMCustomDraw^.dwDrawStage of CDDS_PREPAINT: begin Result := CDRF_NOTIFYITEMDRAW; end; CDDS_ITEMPREPAINT: begin case NMCustomDraw^.dwItemSpec of TBCD_CHANNEL: begin Result:= CDRF_SKIPDEFAULT; SelectObject(NMCustomDraw^.hdc, GetStockObject(DC_PEN)); SetDCPenColor(NMCustomDraw^.hdc, SysColor[COLOR_BTNSHADOW]); SelectObject(NMCustomDraw^.hdc, GetStockObject(DC_BRUSH)); SetDCBrushColor(NMCustomDraw^.hdc, SysColor[COLOR_BTNFACE]); with NMCustomDraw^.rc do RoundRect(NMCustomDraw^.hdc, Left, Top, Right, Bottom, 6, 6); end; else begin Result:= CDRF_DODEFAULT; end; end; end; end; end; end else inherited DefaultWndHandler(AWinControl, AMessage); end; end; { TWin32WSScrollBoxDark } function ScrollBoxWindowProc(Window: HWND; Msg: UINT; wParam: Windows.WPARAM; lParam: Windows.LPARAM; uISubClass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall; var DC: HDC; R, W: TRect; Delta: Integer; begin Result:= DefSubclassProc(Window, Msg, WParam, LParam); if Msg = WM_NCPAINT then begin GetClientRect(Window, @R); MapWindowPoints(Window, 0, @R, 2); GetWindowRect(Window, @W); Delta:= Abs(W.Top - R.Top); DC:= GetWindowDC(Window); ExcludeClipRect(DC, Delta, Delta, W.Width - Delta, W.Height - Delta); SelectObject(DC, GetStockObject(DC_PEN)); SelectObject(DC, GetStockObject(DC_BRUSH)); SetDCPenColor(DC, SysColor[COLOR_BTNSHADOW]); SetDCBrushColor(DC, SysColor[COLOR_BTNHIGHLIGHT]); Rectangle(DC, 0, 0, W.Width, W.Height); ReleaseDC(Window, DC); end; end; class function TWin32WSScrollBoxDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; begin Result:= inherited CreateHandle(AWinControl, AParams); if TScrollBox(AWinControl).BorderStyle = bsSingle then begin SetWindowSubclass(Result, @ScrollBoxWindowProc, ID_SUB_SCROLLBOX, 0); end; EnableDarkStyle(Result); end; { TWin32WSPopupMenuDark } class procedure TWin32WSPopupMenuDark.Popup(const APopupMenu: TPopupMenu; const X, Y: integer); begin SetMenuBackground(APopupMenu.Handle); inherited Popup(APopupMenu, X, Y); end; { TWin32WSWinControlDark } class function TWin32WSWinControlDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var P: TCreateParams; begin P:= AParams; if (AWinControl is TCustomTreeView) then begin AWinControl.Color:= SysColor[COLOR_WINDOW]; with TCustomTreeView(AWinControl) do begin ExpandSignType:= tvestPlusMinus; TreeLineColor:= SysColor[COLOR_GRAYTEXT]; ExpandSignColor:= SysColor[COLOR_GRAYTEXT]; end; end; P.ExStyle:= p.ExStyle and not WS_EX_CLIENTEDGE; TWinControlDark(AWinControl).BorderStyle:= bsNone; Result:= inherited CreateHandle(AWinControl, P); EnableDarkStyle(Result); end; { TWin32WSCustomFormDark } function FormWndProc2(Window: HWnd; Msg: UInt; WParam: Windows.WParam; LParam: Windows.LParam): LResult; stdcall; var DC: HDC; R: TRect; begin case Msg of WM_NCACTIVATE, WM_NCPAINT: begin Result:= CallWindowProc(CustomFormWndProc, Window, Msg, wParam, lParam); DC:= GetWindowDC(Window); R:= GetNonclientMenuBorderRect(Window); FillRect(DC, R, GetSysColorBrush(COLOR_WINDOW)); ReleaseDC(Window, DC); end; WM_SHOWWINDOW: begin AllowDarkModeForWindow(Window, True); RefreshTitleBarThemeColor(Window); end else begin Result:= CallWindowProc(CustomFormWndProc, Window, Msg, wParam, lParam); end; end; end; class function TWin32WSCustomFormDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var Info: PWin32WindowInfo; begin AWinControl.DoubleBuffered:= True; AWinControl.Color:= SysColor[COLOR_BTNFACE]; AWinControl.Brush.Color:= SysColor[COLOR_BTNFACE]; Result:= inherited CreateHandle(AWinControl, AParams); Info:= GetWin32WindowInfo(Result); Info^.DefWndProc:= @WindowProc; CustomFormWndProc:= Windows.WNDPROC(SetWindowLongPtrW(Result, GWL_WNDPROC, LONG_PTR(@FormWndProc2))); AWinControl.Color:= SysColor[COLOR_BTNFACE]; AWinControl.Font.Color:= SysColor[COLOR_BTNTEXT]; end; { TWin32WSCustomListBoxDark } function ListBoxWindowProc2(Window: HWND; Msg: UINT; wParam: Windows.WPARAM; lParam: Windows.LPARAM; uISubClass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall; var PS: TPaintStruct; begin if Msg = WM_PAINT then begin if SendMessage(Window, LB_GETCOUNT, 0, 0) = 0 then begin BeginPaint(Window, @ps); // ListBox:= TCustomListBox(GetWin32WindowInfo(Window)^.WinControl); // Windows.FillRect(DC, ps.rcPaint, ListBox.Brush.Reference.Handle); EndPaint(Window, @ps); end; end; Result:= DefSubclassProc(Window, Msg, WParam, LParam); end; class function TWin32WSCustomListBoxDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var P: TCreateParams; begin P:= AParams; P.ExStyle:= P.ExStyle and not WS_EX_CLIENTEDGE; TCustomListBox(AWinControl).BorderStyle:= bsNone; Result:= inherited CreateHandle(AWinControl, P); EnableDarkStyle(Result); SetWindowSubclass(Result, @ListBoxWindowProc2, ID_SUB_LISTBOX, 0); TCustomListBox(AWinControl).Color:= SysColor[COLOR_WINDOW]; AWinControl.Font.Color:= SysColor[COLOR_WINDOWTEXT]; end; { TWin32WSCustomMemoDark } class function TWin32WSCustomMemoDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var P: TCreateParams; begin P:= AParams; TCustomEdit(AWinControl).BorderStyle:= bsNone; P.ExStyle:= P.ExStyle and not WS_EX_CLIENTEDGE; AWinControl.Color:= SysColor[COLOR_WINDOW]; AWinControl.Font.Color:= SysColor[COLOR_WINDOWTEXT]; Result:= inherited CreateHandle(AWinControl, P); EnableDarkStyle(Result); end; { TWin32WSCustomComboBoxDark } function ComboBoxWindowProc(Window:HWND; Msg:UINT; wParam:Windows.WPARAM;lparam:Windows.LPARAM;uISubClass : UINT_PTR;dwRefData:DWORD_PTR):LRESULT; stdcall; var DC: HDC; ComboBox: TCustomComboBox; begin case Msg of WM_CTLCOLORLISTBOX: begin ComboBox:= TCustomComboBox(GetWin32WindowInfo(Window)^.WinControl); DC:= HDC(wParam); SetControlColors(ComboBox, DC); Exit(LResult(ComboBox.Brush.Reference.Handle)); end; end; Result:= DefSubclassProc(Window, Msg, wParam, lParam); end; class function TWin32WSCustomComboBoxDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; var Info: TComboboxInfo; begin AWinControl.Color:= SysColor[COLOR_BTNFACE]; AWinControl.Font.Color:= SysColor[COLOR_BTNTEXT]; Result:= inherited CreateHandle(AWinControl, AParams); Info.cbSize:= SizeOf(Info); Win32Extra.GetComboBoxInfo(Result, @Info); EnableDarkStyle(Info.hwndList); AllowDarkModeForWindow(Result, True); SetWindowSubclass(Result, @ComboBoxWindowProc, ID_SUB_COMBOBOX, 0); end; class function TWin32WSCustomComboBoxDark.GetDefaultColor( const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; const DefColors: array[TDefaultColorType] of TColor = ( { dctBrush } clBtnFace, { dctFont } clBtnText ); begin Result:= DefColors[ADefaultColorType]; end; { TWin32WSStatusBarDark } function StatusBarWndProc(Window: HWND; Msg: UINT; wParam: Windows.WPARAM; lParam: Windows.LPARAM; uISubClass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall; var DC: HDC; X: Integer; Index: Integer; PS: TPaintStruct; LCanvas: TCanvas; APanel: TStatusPanel; StatusBar: TStatusBar; Info: PWin32WindowInfo; begin Info:= GetWin32WindowInfo(Window); if (Info = nil) or (Info^.WinControl = nil) then begin Result:= CallDefaultWindowProc(Window, Msg, WParam, LParam); Exit; end; if Msg = WM_PAINT then begin StatusBar:= TStatusBar(Info^.WinControl); TWin32WSStatusBar.DoUpdate(StatusBar); DC:= BeginPaint(Window, @ps); LCanvas:= TCanvas.Create; try LCanvas.Handle:= DC; LCanvas.Brush.Color:= SysColor[COLOR_BTNFACE]; LCanvas.FillRect(ps.rcPaint); X:= 1; LCanvas.Font.Color:= clWhite; for Index:= 0 to StatusBar.Panels.Count - 1 do begin APanel:= StatusBar.Panels[Index]; LCanvas.TextOut(X, 1, APanel.Text); X+= APanel.Width; { LCanvas.Pen.Color:= Darker(RGBToColor(53, 53, 53), 120); LCanvas.Line(x-1, ps.rcPaint.Top, x-1, ps.rcPaint.Bottom); LCanvas.Pen.Color:= Lighter(RGBToColor(53, 53, 53), 154); LCanvas.Line(x-2, ps.rcPaint.Top, x-2, ps.rcPaint.Bottom); } end; finally LCanvas.Handle:= 0; LCanvas.Free; end; EndPaint(Window, @ps); Result:= 0; end else Result:= DefSubclassProc(Window, Msg, WParam, LParam); end; class function TWin32WSStatusBarDark.CreateHandle( const AWinControl: TWinControl; const AParams: TCreateParams): HWND; begin Result:= inherited CreateHandle(AWinControl, AParams); SetWindowSubclass(Result, @StatusBarWndProc, ID_SUB_STATUSBAR, 0); end; { Forward declared functions } function InterceptOpenThemeData(hwnd: hwnd; pszClassList: LPCWSTR): hTheme; stdcall; forward; procedure DrawButton(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); forward; { Draws text using the color and font defined by the visual style } function DrawThemeTextDark(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall; var OldColor: COLORREF; begin if (hTheme = Win32Theme.Theme[teToolTip]) then OldColor:= SysColor[COLOR_INFOTEXT] else begin OldColor:= SysColor[COLOR_BTNTEXT]; end; OldColor:= SetTextColor(hdc, OldColor); SetBkMode(hdc, TRANSPARENT); DrawTextExW(hdc, pszText, iCharCount, @pRect, dwTextFlags, nil); SetTextColor(hdc, OldColor); Result:= S_OK; end; { Draws the border and fill defined by the visual style for the specified control part } function DrawThemeBackgroundDark(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT): HRESULT; stdcall; var LRect: TRect; AColor: TColor; LCanvas: TCanvas; AStyle: TTextStyle; begin if (hTheme = Win32Theme.Theme[teHeader]) then begin if iPartId in [HP_HEADERITEM, HP_HEADERITEMRIGHT] then begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= hdc; AColor:= SysColor[COLOR_BTNFACE]; if iStateId in [HIS_HOT, HIS_SORTEDHOT, HIS_ICONHOT, HIS_ICONSORTEDHOT] then FillGradient(hdc, Lighter(AColor, 174), Lighter(AColor, 166), pRect, GRADIENT_FILL_RECT_V) else FillGradient(hdc, Lighter(AColor, 124), Lighter(AColor, 116), pRect, GRADIENT_FILL_RECT_V); if (iPartId <> HP_HEADERITEMRIGHT) then begin LCanvas.Pen.Color:= Lighter(AColor, 158); LCanvas.Line(pRect.Right - 1, pRect.Top, pRect.Right - 1, pRect.Bottom); end; // Top line LCanvas.Pen.Color:= Lighter(AColor, 164); LCanvas.Line(pRect.Left, pRect.Top, pRect.Right, pRect.Top); // Bottom line LCanvas.Pen.Color:= Darker(AColor, 140); LCanvas.Line(pRect.Left, pRect.Bottom - 1, pRect.Right, pRect.Bottom - 1); finally LCanvas.Handle:= 0; LCanvas.Free; end; end; end else if (hTheme = Win32Theme.Theme[teMenu]) then begin if iPartId in [MENU_BARBACKGROUND, MENU_POPUPITEM, MENU_POPUPGUTTER, MENU_POPUPSUBMENU, MENU_POPUPSEPARATOR, MENU_POPUPCHECK, MENU_POPUPCHECKBACKGROUND] then begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= hdc; if not (iPartId in [MENU_POPUPSUBMENU, MENU_POPUPCHECK, MENU_POPUPCHECKBACKGROUND]) then begin if iStateId = MDS_HOT then LCanvas.Brush.Color:= SysColor[COLOR_MENUHILIGHT] else begin LCanvas.Brush.Color:= RGBToColor(45, 45, 45); end; LCanvas.FillRect(pRect); end; if iPartId = MENU_POPUPCHECK then begin AStyle:= LCanvas.TextStyle; AStyle.Layout:= tlCenter; AStyle.Alignment:= taCenter; LCanvas.Brush.Style:= bsClear; LCanvas.Font.Name:= 'Segoe MDL2 Assets'; LCanvas.Font.Color:= RGBToColor(212, 212, 212); LCanvas.TextRect(pRect, 0, 0, MDL_CHECKBOX_CHECKED, AStyle); end; if iPartId = MENU_POPUPSEPARATOR then begin LRect:= pRect; LCanvas.Pen.Color:= RGBToColor(112, 112, 112); LRect.Top:= LRect.Top + (LRect.Height div 2); LRect.Bottom:= LRect.Top; LCanvas.Line(LRect); end; if (iPartId = MENU_POPUPCHECKBACKGROUND) then begin LRect:= pRect; InflateRect(LRect, -1, -1); LCanvas.Pen.Color:= RGBToColor(45, 45, 45); LCanvas.Brush.Color:= RGBToColor(81, 81, 81); LCanvas.RoundRect(LRect, 6, 6); end; if iPartId = MENU_POPUPSUBMENU then begin LCanvas.Brush.Style:= bsClear; LCanvas.Font.Name:= 'Segoe MDL2 Assets'; LCanvas.Font.Color:= RGBToColor(111, 111, 111); LCanvas.TextOut(pRect.Left, pRect.Top, MDL_MENU_SUBMENU); end; finally LCanvas.Handle:= 0; LCanvas.Free; end; end; end else if (hTheme = Win32Theme.Theme[teToolBar]) then begin if iPartId in [TP_BUTTON] then begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= hdc; AColor:= SysColor[COLOR_BTNFACE]; if iStateId = TS_HOT then LCanvas.Brush.Color:= Lighter(AColor, 116) else if iStateId = TS_PRESSED then LCanvas.Brush.Color:= Darker(AColor, 116) else begin LCanvas.Brush.Color:= AColor; end; LCanvas.FillRect(pRect); if iStateId <> TS_NORMAL then begin if iStateId = TS_CHECKED then begin LRect:= pRect; InflateRect(LRect, -2, -2); LCanvas.Brush.Color:= Lighter(AColor, 146); LCanvas.FillRect(LRect); end; LCanvas.Pen.Color:= Darker(AColor, 140); LCanvas.RoundRect(pRect, 6, 6); LRect:= pRect; LCanvas.Pen.Color:= Lighter(AColor, 140); InflateRect(LRect, -1, -1); LCanvas.RoundRect(LRect, 6, 6); end; finally LCanvas.Handle:= 0; LCanvas.Free; end; end else if iPartId in [TP_SEPARATOR, TP_SEPARATORVERT] then begin LCanvas:= TCanvas.Create; try LRect:= pRect; LCanvas.Handle:= hdc; LCanvas.Brush.Color:= SysColor[COLOR_BTNSHADOW]; if (iPartId = TP_SEPARATOR) then begin if (LRect.Right - LRect.Left) > 4 then begin LRect.Left := (LRect.Left + LRect.Right) div 2 - 1; LRect.Right := LRect.Left + 1; end; LRect.Top:= LRect.Top + 2; LRect.Bottom:= LRect.Bottom - 2; end else begin if (LRect.Bottom - LRect.Top) > 4 then begin LRect.Top := (LRect.Top + LRect.Bottom) div 2 - 1; LRect.Bottom := LRect.Top + 1; end; LRect.Left:= LRect.Left + 2; LRect.Right:= LRect.Right - 2; end; LCanvas.FillRect(LRect); finally LCanvas.Handle:= 0; LCanvas.Free; end; end; end else if (hTheme = Win32Theme.Theme[teButton]) then begin DrawButton(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end; Result:= S_OK; end; var __CreateWindowExW: function(dwExStyle: DWORD; lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD; X: longint; Y: longint; nWidth: longint; nHeight: longint; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: LPVOID): HWND; stdcall; function _DrawEdge(hdc: HDC; var qrc: TRect; edge: UINT; grfFlags: UINT): BOOL; stdcall; var Original: HGDIOBJ; ClientRect: TRect; ColorDark, ColorLight: TColorRef; procedure DrawLine(X1, Y1, X2, Y2: Integer); begin MoveToEx(hdc, X1, Y1, nil); LineTo(hdc, X2, Y2); end; procedure InternalDrawEdge(Outer: Boolean; const R: TRect); var X1, Y1, X2, Y2: Integer; ColorLeftTop, ColorRightBottom: TColor; begin X1:= R.Left; Y1:= R.Top; X2:= R.Right; Y2:= R.Bottom; ColorLeftTop:= clNone; ColorRightBottom:= clNone; if Outer then begin if Edge and BDR_RAISEDOUTER <> 0 then begin ColorLeftTop:= ColorLight; ColorRightBottom:= ColorDark; end else if Edge and BDR_SUNKENOUTER <> 0 then begin ColorLeftTop:= ColorDark; ColorRightBottom:= ColorLight; end; end else begin if Edge and BDR_RAISEDINNER <> 0 then begin ColorLeftTop:= ColorLight; ColorRightBottom:= ColorDark; end else if Edge and BDR_SUNKENINNER <> 0 then begin ColorLeftTop:= ColorDark; ColorRightBottom:= ColorLight; end; end; SetDCPenColor(hdc, ColorLeftTop); if grfFlags and BF_LEFT <> 0 then DrawLine(X1, Y1, X1, Y2); if grfFlags and BF_TOP <> 0 then DrawLine(X1, Y1, X2, Y1); SetDCPenColor(hdc, ColorRightBottom); if grfFlags and BF_RIGHT <> 0 then DrawLine(X2, Y1, X2, Y2); if grfFlags and BF_BOTTOM <> 0 then DrawLine(X1, Y2, X2, Y2); end; begin Result:= False; if IsRectEmpty(qrc) then Exit; ClientRect:= qrc; Dec(ClientRect.Right, 1); Dec(ClientRect.Bottom, 1); Original:= SelectObject(hdc, GetStockObject(DC_PEN)); try ColorDark:= SysColor[COLOR_BTNSHADOW]; ColorLight:= SysColor[COLOR_BTNHIGHLIGHT]; if Edge and (BDR_SUNKENOUTER or BDR_RAISEDOUTER) <> 0 then begin InternalDrawEdge(True, ClientRect); end; InflateRect(ClientRect, -1, -1); if Edge and (BDR_SUNKENINNER or BDR_RAISEDINNER) <> 0 then begin InternalDrawEdge(False, ClientRect); InflateRect(ClientRect, -1, -1); end; Inc(ClientRect.Right); Inc(ClientRect.Bottom); if grfFlags and BF_ADJUST <> 0 then begin qrc:= ClientRect; end; Result:= True; finally SelectObject(hdc, Original); end; end; { Retrieves the current color of the specified display element } function GetSysColorDark(nIndex: longint): DWORD; stdcall; begin if (nIndex >= 0) and (nIndex <= COLOR_ENDCOLORS) then Result:= SysColor[nIndex] else begin Result:= 0; end; end; { Retrieves a handle identifying a logical brush that corresponds to the specified color index } function GetSysColorBrushDark(nIndex: longint): HBRUSH; stdcall; begin if (nIndex >= 0) and (nIndex <= COLOR_ENDCOLORS) then begin if (SysColorBrush[nIndex] = 0) then begin SysColorBrush[nIndex]:= CreateSolidBrush(SysColor[nIndex]); end; Result:= SysColorBrush[nIndex]; end else begin Result:= CreateSolidBrush(GetSysColorDark(nIndex)); end; end; const ClassNameW: PWideChar = 'TCustomForm'; ClassNameTC: PWideChar = 'TTOTAL_CMD'; // for compatibility with plugins function _CreateWindowExW(dwExStyle: DWORD; lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD; X: longint; Y: longint; nWidth: longint; nHeight: longint; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: LPVOID): HWND; stdcall; var AParams: PNCCreateParams absolute lpParam; begin if Assigned(AParams) and (AParams^.WinControl is TCustomForm) then begin if (hWndParent = 0) and AParams^.WinControl.ClassNameIs('TfrmMain') then lpClassName:= ClassNameTC else begin lpClassName:= ClassNameW; end; end else begin dwExStyle:= dwExStyle or WS_EX_CONTEXTHELP; end; Result:= __CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); end; function TaskDialogIndirectDark(const pTaskConfig: PTASKDIALOGCONFIG; pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT; stdcall; const BTN_USER = $1000; var Idx: Integer; Index: Integer; Button: TDialogButton; Buttons: TDialogButtons; DlgType: Integer = idDialogInfo; begin with pTaskConfig^ do begin if (pszMainIcon = TD_INFORMATION_ICON) then DlgType:= idDialogInfo else if (pszMainIcon = TD_WARNING_ICON) then DlgType:= idDialogWarning else if (pszMainIcon = TD_ERROR_ICON) then DlgType:= idDialogError else if (pszMainIcon = TD_SHIELD_ICON) then DlgType:= idDialogShield else if (dwFlags and TDF_USE_HICON_MAIN <> 0) then begin if (hMainIcon = Windows.LoadIcon(0, IDI_QUESTION)) then DlgType:= idDialogConfirm; end; Buttons:= TDialogButtons.Create(TDialogButton); try for Index:= 0 to cButtons - 1 do begin Button:= Buttons.Add; Idx:= pButtons[Index].nButtonID; Button.ModalResult:= (Idx + BTN_USER); Button.Default:= (Idx = nDefaultButton); Button.Caption:= UTF8Encode(UnicodeString(pButtons[Index].pszButtonText)); end; Result:= DefaultQuestionDialog(UTF8Encode(UnicodeString(pszWindowTitle)), UTF8Encode(UnicodeString(pszContent)), DlgType, Buttons, 0); if Assigned(pnButton) then begin if (Result < BTN_USER) then pnButton^:= Result else begin pnButton^:= Result - BTN_USER; end; end; finally Buttons.Free; end; end; Result:= S_OK; end; procedure SubClassUpDown; var Window: HWND; begin Window:= CreateWindowW(UPDOWN_CLASSW, nil, 0, 0, 0, 200, 20, 0, 0, HINSTANCE, nil); OldUpDownWndProc:= Windows.WNDPROC(GetClassLongPtr(Window, GCLP_WNDPROC)); SetClassLongPtr(Window, GCLP_WNDPROC, LONG_PTR(@UpDownWndProc)); DestroyWindow(Window); end; procedure ScreenFormEvent(Self, Sender: TObject; Form: TCustomForm); begin if Assigned(Form.Menu) then begin Form.Menu.OwnerDraw:= True; SetMenuBackground(GetMenu(Form.Handle)); Form.Menu.OwnerDraw:= False; end; end; { Override several widgetset controls } procedure ApplyDarkStyle; var Handler: TMethod; Index: TThemedElement; begin if not g_darkModeEnabled then Exit; SubClassUpDown; OpenThemeData:= @InterceptOpenThemeData; DefBtnColors[dctFont]:= SysColor[COLOR_BTNTEXT]; DefBtnColors[dctBrush]:= SysColor[COLOR_BTNFACE]; Handler.Code:= @ScreenFormEvent; Screen.AddHandlerFormVisibleChanged(TScreenFormEvent(Handler), True); with TWinControl.Create(nil) do Free; RegisterWSComponent(TWinControl, TWin32WSWinControlDark); WSComCtrls.RegisterStatusBar; RegisterWSComponent(TStatusBar, TWin32WSStatusBarDark); WSStdCtrls.RegisterCustomComboBox; RegisterWSComponent(TCustomComboBox, TWin32WSCustomComboBoxDark); WSStdCtrls.RegisterCustomEdit; WSStdCtrls.RegisterCustomMemo; RegisterWSComponent(TCustomMemo, TWin32WSCustomMemoDark); WSStdCtrls.RegisterCustomListBox; RegisterWSComponent(TCustomListBox, TWin32WSCustomListBoxDark); WSForms.RegisterScrollingWinControl; WSForms.RegisterCustomForm; RegisterWSComponent(TCustomForm, TWin32WSCustomFormDark); WSMenus.RegisterMenu; WSMenus.RegisterPopupMenu; RegisterWSComponent(TPopupMenu, TWin32WSPopupMenuDark); WSForms.RegisterScrollBox; RegisterWSComponent(TScrollBox, TWin32WSScrollBoxDark); RegisterCustomTrackBar; RegisterWSComponent(TCustomTrackBar, TWin32WSTrackBarDark); DrawThemeText:= @DrawThemeTextDark; DrawThemeBackground:= @DrawThemeBackgroundDark; DefaultWindowInfo.DefWndProc:= @WindowProc; TaskDialogIndirect:= @TaskDialogIndirectDark; Win32Theme:= TWin32ThemeServices(ThemeServices); end; function FormWndProc(Window: HWnd; Msg: UInt; WParam: Windows.WParam; LParam: Windows.LParam): LResult; stdcall; var Info: PWin32WindowInfo; begin if Msg = WM_CREATE then begin AllowDarkModeForWindow(Window, True); RefreshTitleBarThemeColor(Window); end else if (Msg = WM_SETFONT) then begin Info := GetWin32WindowInfo(Window); if Assigned(Info) then begin Info^.DefWndProc:= @WindowProc; end; Result:= CallWindowProc(@WindowProc, Window, Msg, WParam, LParam); Exit; end; Result:= DefWindowProcW(Window, Msg, WParam, LParam); end; var TrampolineOpenThemeData: function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall = nil; TrampolineDrawThemeText: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall = nil; TrampolineDrawThemeBackground: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: Pointer): HRESULT; stdcall = nil; procedure DrawCheckBox(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); var LCanvas: TCanvas; AStyle: TTextStyle; begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= HDC; LCanvas.Brush.Color:= clBtnFace; LCanvas.FillRect(pRect); AStyle:= LCanvas.TextStyle; AStyle.Layout:= tlCenter; AStyle.ShowPrefix:= True; // Fill checkbox rect LCanvas.Font.Name:= 'Segoe MDL2 Assets'; LCanvas.Font.Color:= SysColor[COLOR_WINDOW]; LCanvas.TextRect(pRect, 0, 0, MDL_CHECKBOX_FILLED, AStyle); // Draw checkbox border if iStateId in [CBS_UNCHECKEDHOT, CBS_MIXEDHOT, CBS_CHECKEDHOT] then LCanvas.Font.Color:= SysColor[COLOR_HIGHLIGHT] else begin LCanvas.Font.Color:= RGBToColor(192, 192, 192); end; LCanvas.TextRect(pRect, 0, 0, MDL_CHECKBOX_OUTLINE, AStyle); // Draw checkbox state if iStateId in [CBS_MIXEDNORMAL, CBS_MIXEDHOT, CBS_MIXEDPRESSED, CBS_MIXEDDISABLED] then begin LCanvas.Font.Color:= RGBToColor(120, 120, 120); LCanvas.TextRect(pRect, 0, 0, MDL_CHECKBOX_GRAYED, AStyle); end else if iStateId in [CBS_CHECKEDNORMAL, CBS_CHECKEDHOT, CBS_CHECKEDPRESSED, CBS_CHECKEDDISABLED] then begin LCanvas.Font.Color:= RGBToColor(192, 192, 192); LCanvas.TextRect(pRect, 0, 0, MDL_CHECKBOX_CHECKED, AStyle); end; finally LCanvas.Handle:= 0; LCanvas.Free; end; end; procedure DrawRadionButton(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); var LCanvas: TCanvas; AStyle: TTextStyle; begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= hdc; LCanvas.Brush.Color:= SysColor[COLOR_BTNFACE]; LCanvas.FillRect(pRect); AStyle:= LCanvas.TextStyle; AStyle.Layout:= tlCenter; AStyle.ShowPrefix:= True; // Draw radio circle LCanvas.Font.Name:= 'Segoe MDL2 Assets'; LCanvas.Font.Color:= SysColor[COLOR_WINDOW]; LCanvas.TextRect(pRect, 0, 0, MDL_RADIO_FILLED, AStyle); // Draw radio button state if iStateId in [RBS_CHECKEDNORMAL, RBS_CHECKEDHOT, RBS_CHECKEDPRESSED, RBS_CHECKEDDISABLED] then begin LCanvas.Font.Color:= RGBToColor(192, 192, 192); LCanvas.TextRect(pRect, 0, 0, MDL_RADIO_CHECKED, AStyle ); end; // Set outline circle color if iStateId in [RBS_UNCHECKEDPRESSED, RBS_CHECKEDPRESSED] then LCanvas.Font.Color:= RGBToColor(83, 160, 237) else if iStateId in [RBS_UNCHECKEDHOT, RBS_CHECKEDHOT] then LCanvas.Font.Color:= SysColor[COLOR_HIGHLIGHT] else begin LCanvas.Font.Color:= RGBToColor(192, 192, 192); end; // Draw outline circle LCanvas.TextRect(pRect, 0, 0, MDL_RADIO_OUTLINE, AStyle); finally LCanvas.Handle:= 0; LCanvas.Free; end; end; procedure DrawGroupBox(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); var LCanvas: TCanvas; begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= HDC; // Draw border LCanvas.Brush.Style:= bsClear; LCanvas.Pen.Color:= SysColor[COLOR_BTNHIGHLIGHT]; LCanvas.RoundRect(pRect, 10, 10); finally LCanvas.Handle:= 0; LCanvas.Free; end; end; procedure DrawButton(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); begin case iPartId of BP_PUSHBUTTON: TrampolineDrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); BP_RADIOBUTTON: DrawRadionButton(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); BP_CHECKBOX: DrawCheckBox(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); BP_GROUPBOX: DrawGroupBox(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end; end; procedure DrawTabControl(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); var ARect: TRect; AColor: TColor; ALight: TColor; LCanvas: TCanvas; begin LCanvas:= TCanvas.Create; try LCanvas.Handle:= hdc; AColor:= SysColor[COLOR_BTNFACE]; ALight:= Lighter(AColor, 160); if (iPartId < TABP_PANE) then begin ARect:= pRect; // Fill tab inside if (iStateId <> TIS_SELECTED) then begin if iStateId <> TIS_HOT then LCanvas.Brush.Color:= Lighter(AColor, 117) else begin LCanvas.Brush.Color:= Lighter(AColor, 200); end; end else begin Dec(ARect.Bottom); InflateRect(ARect, -1, -1); LCanvas.Brush.Color:= Lighter(AColor, 176); end; LCanvas.FillRect(ARect); LCanvas.Pen.Color:= ALight; if iPartId in [TABP_TABITEMLEFTEDGE, TABP_TABITEMBOTHEDGE, TABP_TOPTABITEMLEFTEDGE, TABP_TOPTABITEMBOTHEDGE] then begin // Draw left border LCanvas.Line(pRect.Left, pRect.Top, pRect.Left, pRect.Bottom); end; if (iStateId <> TIS_SELECTED) then begin // Draw right border LCanvas.Line(pRect.Right - 1, pRect.Top, pRect.Right - 1, pRect.Bottom) end else begin // Draw left border if (iPartId in [TABP_TABITEM, TABP_TOPTABITEM]) then begin LCanvas.Line(pRect.Left, pRect.Top, pRect.Left, pRect.Bottom - 1); end; // Draw right border LCanvas.Line(pRect.Right - 1, pRect.Top, pRect.Right - 1, pRect.Bottom - 1); end; // Draw top border LCanvas.Line(pRect.Left, pRect.Top, pRect.Right, pRect.Top); end else if (iPartId = TABP_PANE) then begin // Draw tab pane border LCanvas.Brush.Color:= AColor; LCanvas.Pen.Color:= ALight; LCanvas.Rectangle(pRect); end; finally LCanvas.Handle:= 0; LCanvas.Free; end; end; procedure DrawProgressBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRECT); begin if not (iPartId in [PP_TRANSPARENTBAR, PP_TRANSPARENTBARVERT]) then TrampolineDrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, pClipRect) else begin SelectObject(hdc, GetStockObject(DC_PEN)); SetDCPenColor(hdc, SysColor[COLOR_BTNSHADOW]); SelectObject(hdc, GetStockObject(DC_BRUSH)); SetDCBrushColor(hdc, SysColor[COLOR_BTNFACE]); with pRect do Rectangle(hdc, Left, Top, Right, Bottom); end; end; function InterceptOpenThemeData(hwnd: hwnd; pszClassList: LPCWSTR): hTheme; stdcall; var P: LONG_PTR; begin if (hwnd <> 0) then begin P:= GetWindowLongPtr(hwnd, GWL_EXSTYLE); if (P and WS_EX_CONTEXTHELP = 0) or (lstrcmpiW(pszClassList, VSCLASS_MONTHCAL) = 0) then begin Result:= TrampolineOpenThemeData(hwnd, pszClassList); Exit; end; end; if lstrcmpiW(pszClassList, VSCLASS_TAB) = 0 then begin AllowDarkStyle(hwnd); pszClassList:= PWideChar(VSCLASS_DARK_TAB); end else if lstrcmpiW(pszClassList, VSCLASS_BUTTON) = 0 then begin AllowDarkStyle(hwnd); pszClassList:= PWideChar(VSCLASS_DARK_BUTTON); end else if lstrcmpiW(pszClassList, VSCLASS_EDIT) = 0 then begin AllowDarkStyle(hwnd); pszClassList:= PWideChar(VSCLASS_DARK_EDIT); end else if lstrcmpiW(pszClassList, VSCLASS_COMBOBOX) = 0 then begin AllowDarkStyle(hwnd); pszClassList:= PWideChar(VSCLASS_DARK_COMBOBOX); end else if lstrcmpiW(pszClassList, VSCLASS_SCROLLBAR) = 0 then begin AllowDarkStyle(hwnd); pszClassList:= PWideChar(VSCLASS_DARK_SCROLLBAR); end; Result:= TrampolineOpenThemeData(hwnd, pszClassList); ThemeClass.AddOrSetValue(Result, pszClassList); end; function InterceptDrawThemeText(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall; var OldColor: COLORREF; ClassName: String; begin if ThemeClass.TryGetValue(hTheme, ClassName) then begin if SameText(ClassName, VSCLASS_DARK_COMBOBOX) or SameText(ClassName, VSCLASS_DARK_EDIT) then begin Result:= TrampolineDrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect); Exit; end; if SameText(ClassName, VSCLASS_TOOLTIP) then OldColor:= SysColor[COLOR_INFOTEXT] else begin OldColor:= SysColor[COLOR_BTNTEXT]; end; if SameText(ClassName, VSCLASS_DARK_BUTTON) then begin if (iPartId = BP_CHECKBOX) and (iStateId in [CBS_UNCHECKEDDISABLED, CBS_CHECKEDDISABLED, CBS_MIXEDDISABLED]) then OldColor:= SysColor[COLOR_GRAYTEXT] else if (iPartId = BP_RADIOBUTTON) and (iStateId in [RBS_UNCHECKEDDISABLED, RBS_CHECKEDDISABLED]) then OldColor:= SysColor[COLOR_GRAYTEXT] else if (iPartId = BP_GROUPBOX) and (iStateId = GBS_DISABLED) then OldColor:= SysColor[COLOR_GRAYTEXT] else if (iPartId = BP_PUSHBUTTON) then begin Result:= TrampolineDrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect); Exit; end; end; OldColor:= SetTextColor(hdc, OldColor); SetBkMode(hdc, TRANSPARENT); DrawTextExW(hdc, pszText, iCharCount, @pRect, dwTextFlags, nil); SetTextColor(hdc, OldColor); Exit(S_OK); end; Result:= TrampolineDrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect); end; function InterceptDrawThemeBackground(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: Pointer): HRESULT; stdcall; var Index: Integer; ClassName: String; begin if ThemeClass.TryGetValue(hTheme, ClassName) then begin Index:= SaveDC(hdc); try if SameText(ClassName, VSCLASS_DARK_BUTTON) then begin DrawButton(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end else if SameText(ClassName, VSCLASS_DARK_TAB) then begin DrawTabControl(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end else if SameText(ClassName, VSCLASS_PROGRESS) or SameText(ClassName, VSCLASS_PROGRESS_INDER) then begin DrawProgressBar(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end else begin Result:= TrampolineDrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end; finally RestoreDC(hdc, Index); end; Exit(S_OK); end; Result:= TrampolineDrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, pClipRect); end; function DrawThemeEdgeDark(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; pContentRect: PRECT): HRESULT; stdcall; var ARect: TRect; begin ARect:= pDestRect; _DrawEdge(hdc, ARect, uEdge, uFlags); if (uFlags and DFCS_ADJUSTRECT <> 0) and (pContentRect <> nil) then pContentRect^ := ARect; Result:= S_OK; end; function GetThemeSysColorDark(hTheme: HTHEME; iColorId: Integer): COLORREF; stdcall; begin Result:= GetSysColor(iColorId); end; function GetThemeSysColorBrushDark(hTheme: HTHEME; iColorId: Integer): HBRUSH; stdcall; begin Result:= GetSysColorBrush(iColorId); end; var DeleteObjectOld: function(ho: HGDIOBJ): WINBOOL; stdcall; function __DeleteObject(ho: HGDIOBJ): WINBOOL; stdcall; var Index: Integer; begin for Index:= 0 to High(SysColorBrush) do begin if SysColorBrush[Index] = ho then Exit(True); end; Result:= DeleteObjectOld(ho); end; procedure InitializeColors; begin SysColor[COLOR_SCROLLBAR] := RGBToColor(53, 53, 53); SysColor[COLOR_BACKGROUND] := RGBToColor(53, 53, 53); SysColor[COLOR_ACTIVECAPTION] := RGBToColor(42, 130, 218); SysColor[COLOR_INACTIVECAPTION] := RGBToColor(53, 53, 53); SysColor[COLOR_MENU] := RGBToColor(42, 42, 42); SysColor[COLOR_WINDOW] := RGBToColor(42, 42, 42); SysColor[COLOR_WINDOWFRAME] := RGBToColor(20, 20, 20); SysColor[COLOR_MENUTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_WINDOWTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_CAPTIONTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_ACTIVEBORDER] := RGBToColor(53, 53, 53); SysColor[COLOR_INACTIVEBORDER] := RGBToColor(53, 53, 53); SysColor[COLOR_APPWORKSPACE] := RGBToColor(53, 53, 53); SysColor[COLOR_HIGHLIGHT] := RGBToColor(42, 130, 218); SysColor[COLOR_HIGHLIGHTTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_BTNFACE] := RGBToColor(53, 53, 53); SysColor[COLOR_BTNSHADOW] := RGBToColor(35, 35, 35); SysColor[COLOR_GRAYTEXT] := RGBToColor(160, 160, 160); SysColor[COLOR_BTNTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_INACTIVECAPTIONTEXT] := RGBToColor(255, 255, 255); SysColor[COLOR_BTNHIGHLIGHT] := RGBToColor(66, 66, 66); SysColor[COLOR_3DDKSHADOW] := RGBToColor(20, 20, 20); SysColor[COLOR_3DLIGHT] := RGBToColor(40, 40, 40); SysColor[COLOR_INFOTEXT] := RGBToColor(53, 53, 53); SysColor[COLOR_INFOBK] := RGBToColor(255, 255, 255); SysColor[COLOR_HOTLIGHT] := RGBToColor(66, 66, 66); SysColor[COLOR_GRADIENTACTIVECAPTION] := GetSysColor(COLOR_GRADIENTACTIVECAPTION); SysColor[COLOR_GRADIENTINACTIVECAPTION] := GetSysColor(COLOR_GRADIENTINACTIVECAPTION); SysColor[COLOR_MENUHILIGHT] := RGBToColor(42, 130, 218); SysColor[COLOR_MENUBAR] := RGBToColor(42, 42, 42); SysColor[COLOR_FORM] := RGBToColor(53, 53, 53); end; function WinRegister(ClassName: PWideChar): Boolean; var WindowClassW: WndClassW; begin ZeroMemory(@WindowClassW, SizeOf(WndClassW)); with WindowClassW do begin Style := CS_DBLCLKS; LPFnWndProc := @FormWndProc; hInstance := System.HInstance; hIcon := Windows.LoadIcon(MainInstance, 'MAINICON'); if hIcon = 0 then hIcon := Windows.LoadIcon(0, IDI_APPLICATION); hCursor := Windows.LoadCursor(0, IDC_ARROW); LPSzClassName := ClassName; end; Result := Windows.RegisterClassW(@WindowClassW) <> 0; end; procedure Initialize; var hModule, hUxTheme: THandle; pLibrary, pFunction: PPointer; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; begin if not g_darkModeEnabled then Exit; InitializeColors; WinRegister(ClassNameW); WinRegister(ClassNameTC); ThemeClass:= TThemeClassMap.Create; hModule:= GetModuleHandle(gdi32); Pointer(DeleteObjectOld):= GetProcAddress(hModule, 'DeleteObject'); hModule:= GetModuleHandle(comctl32); Pointer(DefSubclassProc):= GetProcAddress(hModule, 'DefSubclassProc'); Pointer(SetWindowSubclass):= GetProcAddress(hModule, 'SetWindowSubclass'); // Override several system functions pLibrary:= FindImportLibrary(MainInstance, user32); if Assigned(pLibrary) then begin hModule:= GetModuleHandle(user32); pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'CreateWindowExW')); if Assigned(pFunction) then begin Pointer(__CreateWindowExW):= ReplaceImportFunction(pFunction, @_CreateWindowExW); end; pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'DrawEdge')); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @_DrawEdge); end; pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'GetSysColor')); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @GetSysColorDark); end; pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'GetSysColorBrush')); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @GetSysColorBrushDark); end; end; pLibrary:= FindImportLibrary(MainInstance, gdi32); if Assigned(pLibrary) then begin hModule:= GetModuleHandle(gdi32); pFunction:= FindImportFunction(pLibrary, Pointer(DeleteObjectOld)); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @__DeleteObject); end; end; hModule:= GetModuleHandle(comctl32); pImpDesc:= FindDelayImportLibrary(hModule, themelib); if Assigned(pImpDesc) then begin hUxTheme:= GetModuleHandle(themelib); Pointer(TrampolineOpenThemeData):= GetProcAddress(hUxTheme, 'OpenThemeData'); Pointer(TrampolineDrawThemeText):= GetProcAddress(hUxTheme, 'DrawThemeText'); Pointer(TrampolineDrawThemeBackground):= GetProcAddress(hUxTheme, 'DrawThemeBackground'); ReplaceDelayImportFunction(hModule, pImpDesc, 'OpenThemeData', @InterceptOpenThemeData); ReplaceDelayImportFunction(hModule, pImpDesc, 'DrawThemeText', @InterceptDrawThemeText); ReplaceDelayImportFunction(hModule, pImpDesc, 'DrawThemeBackground', @InterceptDrawThemeBackground); ReplaceDelayImportFunction(hModule, pImpDesc, 'DrawThemeEdge', @DrawThemeEdgeDark); end; pLibrary:= FindImportLibrary(hModule, gdi32); if Assigned(pLibrary) then begin pFunction:= FindImportFunction(pLibrary, Pointer(DeleteObjectOld)); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @__DeleteObject); end; end; hModule:= GetModuleHandle(comctl32); pLibrary:= FindImportLibrary(hModule, user32); if Assigned(pLibrary) then begin hModule:= GetModuleHandle(user32); pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'DrawEdge')); if Assigned(pFunction) then begin ReplaceImportFunction(pFunction, @_DrawEdge); end; end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/win/uthumbnailprovider.pas0000644000175000001440000001171615104114162022433 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Windows thumbnail provider Copyright (C) 2012-2013 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uThumbnailProvider; {$mode delphi} interface uses uThumbnails; implementation uses SysUtils, Forms, Graphics, Windows, ActiveX, ShlObj, DCConvertEncoding, uBitmap; const SIIGBF_RESIZETOFIT = $00000000; SIIGBF_BIGGERSIZEOK = $00000001; SIIGBF_MEMORYONLY = $00000002; SIIGBF_ICONONLY = $00000004; SIIGBF_THUMBNAILONLY = $00000008; SIIGBF_INCACHEONLY = $00000010; const IID_IExtractImage: TGUID = '{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'; type SIIGBF = Integer; IShellItemImageFactory = interface(IUnknown) ['{BCC18B79-BA16-442F-80C4-8A59C30C463B}'] function GetImage(size: TSize; flags: SIIGBF; out phbm: HBITMAP): HRESULT; stdcall; end; IExtractImage = interface(IUnknown) ['{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'] function GetLocation(pszPathBuffer: LPWSTR; cchMax: DWORD; out pdwPriority: DWORD; const prgSize: LPSIZE; dwRecClrDepth: DWORD; var pdwFlags: DWORD): HRESULT; stdcall; function Extract(out phBmpImage: HBITMAP): HRESULT; stdcall; end; var SHCreateItemFromParsingName: function(pszPath: LPCWSTR; const pbc: IBindCtx; const riid: TIID; out ppv): HRESULT; stdcall; function GetThumbnailOld(const aFileName: String; aSize: TSize; out Bitmap: HBITMAP): HRESULT; var Folder, DesktopFolder: IShellFolder; Pidl, ParentPidl: PItemIDList; Image: IExtractImage; pchEaten: ULONG; wsTemp: WideString; dwPriority: DWORD; Status: HRESULT; dwRecClrDepth: DWORD; dwAttributes: ULONG = 0; dwFlags: DWORD = IEIFLAG_SCREEN or IEIFLAG_QUALITY or IEIFLAG_ORIGSIZE; begin Result:= E_FAIL; if SHGetDesktopFolder(DesktopFolder) = S_OK then begin wsTemp:= CeUtf8ToUtf16(ExtractFilePath(aFileName)); if DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, ParentPidl, dwAttributes) = S_OK then begin if DesktopFolder.BindToObject(ParentPidl, nil, IID_IShellFolder, Folder) = S_OK then begin wsTemp:= CeUtf8ToUtf16(ExtractFileName(aFileName)); if Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, Pidl, dwAttributes) = S_OK then begin if Succeeded(Folder.GetUIObjectOf(0, 1, Pidl, IID_IExtractImage, nil, Image)) then begin SetLength(wsTemp, MAX_PATH * SizeOf(WideChar)); dwRecClrDepth:= GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL); Status:= Image.GetLocation(PWideChar(wsTemp), Length(wsTemp), dwPriority, @aSize, dwRecClrDepth, dwFlags); if (Status = NOERROR) or (Status = E_PENDING) then begin Result:= Image.Extract(Bitmap); end; end; CoTaskMemFree(Pidl); end; Folder:= nil; end; CoTaskMemFree(ParentPidl); end; DesktopFolder:= nil; end; // SHGetDesktopFolder end; function GetThumbnailNew(const aFileName: String; aSize: TSize; out Bitmap: HBITMAP): HRESULT; var ShellItemImage: IShellItemImageFactory; begin Result:= SHCreateItemFromParsingName(PWideChar(CeUtf8ToUtf16(aFileName)), nil, IShellItemImageFactory, ShellItemImage); if Succeeded(Result) then begin Result:= ShellItemImage.GetImage(aSize, SIIGBF_THUMBNAILONLY, Bitmap); end; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Bitmap: HBITMAP; Status: HRESULT = E_FAIL; begin Result:= nil; if (Win32MajorVersion > 5) then begin Status:= GetThumbnailNew(aFileName, aSize, Bitmap); end; if Failed(Status) then begin Status:= GetThumbnailOld(aFileName, aSize, Bitmap); end; if Succeeded(Status) then begin Result:= BitmapCreateFromHBITMAP(Bitmap); end; end; initialization SHCreateItemFromParsingName:= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHCreateItemFromParsingName'); TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-1.1.30/src/platform/win/ushlobjadditional.pas0000644000175000001440000002725615104114162022215 0ustar alexxusers(* Daniel U. Thibault 19 August 1999 Updated 15 September 1999 Constants, types that have appeared since ShlObj.pas. The values marked //MISSING VALUES remain unidentified (two sets). Koblov Alexander (Alexx2000@mail.ru) 15 July 2007 Add some functions, constants and types for Lazarus compability *) unit uShlObjAdditional; {$mode delphi} interface uses Windows, ShlObj, ShellApi, ActiveX; const { The operation was canceled by the user } HRESULT_ERROR_CANCELLED = HRESULT($800704C7); { User canceled the current action } COPYENGINE_E_USER_CANCELLED = HRESULT($80270000); const IID_IImageList: TGUID = '{46EB5926-582E-4017-9FDF-E8998DAA0950}'; { IShellIconOverlay Interface } { Used to return the icon overlay index or its icon index for an IShellFolder object, this is always implemented with IShellFolder [Member functions] IShellIconOverlay::GetOverlayIndex Parameters: pidl object to identify icon overlay for. pdwIndex the Overlay Index in the system image list IShellIconOverlay::GetOverlayIconIndex This method is only used for those who are interested in seeing the real bits of the Overlay Icon Returns: S_OK, if the index of an Overlay is found S_FALSE, if no Overlay exists for this file E_FAIL, if pidl is bad Parameters: pdwIconIndex the Overlay Icon index in the system image list } const IID_IShellIconOverlay : TGUID = ( D1:$7D688A70; D2:$C613; D3:$11D0; D4:($99,$9B,$00,$C0,$4F,$D6,$55,$E1)); SID_IShellIconOverlay = '{7D688A70-C613-11D0-999B-00C04FD655E1}'; type IShellIconOverlay = interface(IUnknown) [SID_IShellIconOverlay] function GetOverlayIndex(pidl : PItemIDList; var Index : Integer) : HResult; stdcall; function GetOverlayIconIndex(pidl : PItemIDList; var IconIndex : Integer) : HResult; stdcall; end; { IShellIconOverlay } {$IF FPC_FULLVERSION < 30200} PSHColumnID = ^TSHColumnID; IShellFolder2 = interface(IShellFolder) ['{93F2F68C-1D1B-11d3-A30E-00C04F79ABD1}'] function GetDefaultSearchGUID(out guid:TGUID):HResult;StdCall; function EnumSearches(out ppenum:IEnumExtraSearch):HResult;StdCall; function GetDefaultColumn(dwres:DWORD;psort :pulong; pdisplay:pulong):HResult;StdCall; function GetDefaultColumnState(icolumn:UINT;pscflag:PSHCOLSTATEF):HResult;StdCall; function GetDetailsEx(pidl:LPCITEMIDLIST;pscid:PSHCOLUMNID; pv : pOLEvariant):HResult;StdCall; function GetDetailsOf(pidl:LPCITEMIDLIST;iColumn:UINT;psd:PSHELLDETAILS):HResult;StdCall; function MapColumnToSCID(iColumn:UINT;pscid:PSHCOLUMNID):HResult;StdCall; end; {$ENDIF} const SIID_DRIVENET = 9; SIID_ZIPFILE = 105; PKEY_StorageProviderState: PROPERTYKEY = (fmtid: '{E77E90DF-6271-4F5B-834F-2DD1F245DDA4}'; pid: 3); type TSHStockIconInfo = record cbSize: DWORD; hIcon: HICON; iSysImageIndex: Int32; iIcon: Int32; szPath: array[0..MAX_PATH-1] of WCHAR; end; function SHGetSystemImageList(iImageList: Integer): HIMAGELIST; function SHGetStockIconInfo(siid: Int32; uFlags: UINT; out psii: TSHStockIconInfo): Boolean; function SHChangeIconDialog(hOwner: HWND; var FileName: String; var IconIndex: Integer): Boolean; function SHGetStorePropertyValue(const FileName: String; const Key: PROPERTYKEY): Integer; function SHGetOverlayIconIndex(const sFilePath, sFileName: String): Integer; function SHGetInfoTip(const sFilePath, sFileName: String): String; function SHFileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; function SHGetFolderLocation(hwnd: HWND; csidl: Longint; hToken: HANDLE; dwFlags: DWORD; var ppidl: LPITEMIDLIST): HRESULT; stdcall; external shell32 name 'SHGetFolderLocation'; function PathIsUNCW(pwszPath: LPCWSTR): WINBOOL; stdcall; external 'shlwapi' name 'PathIsUNCW'; function PathFindNextComponentW(pwszPath: LPCWSTR): LPWSTR; stdcall; external 'shlwapi' name 'PathFindNextComponentW'; function StrRetToBufW(pstr: PSTRRET; pidl: PItemIDList; pszBuf: LPWSTR; cchBuf: UINT): HRESULT; stdcall; external 'shlwapi.dll'; procedure OleErrorUTF8(ErrorCode: HResult); procedure OleCheckUTF8(Result: HResult); implementation uses SysUtils, JwaShlGuid, ComObj, LazUTF8, DCOSUtils, DCConvertEncoding; var SHGetPropertyStoreFromParsingName: function(pszPath: PCWSTR; const pbc: IBindCtx; flags: GETPROPERTYSTOREFLAGS; const riid: TIID; out ppv): HRESULT; stdcall; function SHGetImageListFallback(iImageList: Integer; const riid: TGUID; var ImageList: HIMAGELIST): HRESULT; stdcall; var FileInfo: TSHFileInfoW; Flags: UINT = SHGFI_SYSICONINDEX; begin if not IsEqualGUID(riid, IID_IImageList) then Exit(E_NOINTERFACE); case iImageList of SHIL_LARGE, SHIL_EXTRALARGE: Flags:= Flags or SHGFI_LARGEICON; SHIL_SMALL: Flags:= Flags or SHGFI_SMALLICON; end; ZeroMemory(@FileInfo, SizeOf(TSHFileInfoW)); ImageList:= SHGetFileInfoW('', 0, FileInfo, SizeOf(FileInfo), Flags); if ImageList <> 0 then Exit(S_OK) else Exit(E_FAIL); end; function SHGetSystemImageList(iImageList: Integer): HIMAGELIST; var ShellHandle: THandle; SHGetImageList: function(iImageList: Integer; const riid: TGUID; var ImageList: HIMAGELIST): HRESULT; stdcall; begin Result:= 0; ShellHandle:= GetModuleHandle(Shell32); if (ShellHandle <> 0) then begin @SHGetImageList:= GetProcAddress(ShellHandle, 'SHGetImageList'); if @SHGetImageList = nil then begin @SHGetImageList:= GetProcAddress(ShellHandle, PAnsiChar(727)); if @SHGetImageList = nil then SHGetImageList:= @SHGetImageListFallback; end; SHGetImageList(iImageList, IID_IImageList, Result); end; end; function SHGetStockIconInfo(siid: Int32; uFlags: UINT; out psii: TSHStockIconInfo): Boolean; var SHGetStockIconInfo: function(siid: Int32; uFlags: UINT; var psii: TSHStockIconInfo): HRESULT; stdcall; begin Result:= False; if (Win32MajorVersion > 5) then begin @SHGetStockIconInfo:= GetProcAddress(GetModuleHandle(Shell32), 'SHGetStockIconInfo'); if Assigned(SHGetStockIconInfo) then begin psii.cbSize:= SizeOf(TSHStockIconInfo); Result:= SHGetStockIconInfo(siid, uFlags, psii) = S_OK; end; end; end; function SHChangeIconDialog(hOwner: HWND; var FileName: String; var IconIndex: Integer): Boolean; type TSHChangeIconProcW = function(Wnd: HWND; szFileName: PWideChar; Reserved: Integer; var lpIconIndex: Integer): BOOL; stdcall; var ShellHandle: THandle; SHChangeIconW: TSHChangeIconProcW; FileNameW: array[0..MAX_PATH] of WideChar; begin Result := True; IconIndex := 0; ShellHandle := GetModuleHandle(Shell32); if ShellHandle <> 0 then begin @SHChangeIconW := Windows.GetProcAddress(ShellHandle, PAnsiChar(62)); if Assigned(SHChangeIconW) then begin FileNameW := CeUtf8ToUtf16(FileName); Result := SHChangeIconW(hOwner, FileNameW, SizeOf(FileNameW), IconIndex); if Result then FileName := UTF16ToUTF8(UnicodeString(FileNameW)); end end; end; function SHGetStorePropertyValue(const FileName: String; const Key: PROPERTYKEY): Integer; var AValue: Variant; AStorage: IPropertyStore; begin if Succeeded(SHGetPropertyStoreFromParsingName(PWideChar(CeUtf8ToUtf16(FileName)), nil, GPS_DEFAULT, IPropertyStore, AStorage)) then begin if Succeeded(AStorage.GetValue(@Key, TPROPVARIANT(AValue))) then Exit(AValue); end; Result:= -1; end; function SHGetOverlayIconIndex(const sFilePath, sFileName: String): Integer; var Folder, DesktopFolder: IShellFolder; Pidl, ParentPidl: PItemIDList; IconOverlay: IShellIconOverlay; pchEaten: ULONG; dwAttributes: ULONG = 0; wsTemp: WideString; begin Result:= -1; if SHGetDesktopFolder(DesktopFolder) = S_OK then begin wsTemp:= CeUtf8ToUtf16(sFilePath); if DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, ParentPidl, dwAttributes) = S_OK then begin if DesktopFolder.BindToObject(ParentPidl, nil, IID_IShellFolder, Folder) = S_OK then begin // Get an IShellIconOverlay interface for the folder. // If this fails then this version of // the shell does not have this // interface. if Folder.QueryInterface(IID_IShellIconOverlay, IconOverlay) = S_OK then begin // Get a pidl for the file. wsTemp:= CeUtf8ToUtf16(sFileName); if Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, Pidl, dwAttributes) = S_OK then begin // Get the overlay icon index. if IconOverlay.GetOverlayIconIndex(Pidl, Result) <> S_OK then Result:= -1 // Microsoft OneDrive returns invalid zero index, ignore else if (Result = 0) and (Win32MajorVersion >= 10) then Result:= -1; CoTaskMemFree(Pidl); end; end; end; CoTaskMemFree(ParentPidl); end; DesktopFolder:= nil; end; // SHGetDesktopFolder end; function SHGetInfoTip(const sFilePath, sFileName: String): String; var DesktopFolder, Folder: IShellFolder; pidlFolder: PItemIDList = nil; pidlFile: PItemIDList = nil; queryInfo: IQueryInfo; ppwszTip: PWideChar = nil; pchEaten: ULONG; dwAttributes: ULONG = 0; wsTemp: WideString; begin Result:= EmptyStr; if Succeeded(SHGetDesktopFolder(DesktopFolder)) then try wsTemp:= CeUtf8ToUtf16(sFilePath); if Succeeded(DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, pidlFolder, dwAttributes)) then if Succeeded(DesktopFolder.BindToObject(pidlFolder, nil, IID_IShellFolder, Folder)) then try wsTemp:= CeUtf8ToUtf16(sFileName); if Succeeded(Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, pidlFile, dwAttributes)) then if Succeeded(Folder.GetUIObjectOf(0, 1, pidlFile, IID_IQueryInfo, nil, queryInfo)) then if Succeeded(queryInfo.GetInfoTip(QITIPF_USESLOWTIP, ppwszTip)) then Result:= UTF16ToUTF8(WideString(ppwszTip)); finally Folder:= nil; queryInfo:= nil; if Assigned(ppwszTip) then CoTaskMemFree(ppwszTip); if Assigned(pidlFile) then CoTaskMemFree(pidlFile); end; finally DesktopFolder:= nil; if Assigned(pidlFolder) then CoTaskMemFree(pidlFolder); end; end; function SHFileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; var Unknown: IUnknown; ShellLink: IShellLinkW; PersistFile: IPersistFile; FindData: TWin32FindDataW; pszFile:LPWSTR; begin Result := False; try Unknown := CreateComObject(CLSID_ShellLink); ShellLink := Unknown as IShellLinkW; PersistFile := Unknown as IPersistFile; if Failed(PersistFile.Load(PWideChar(CeUtf8ToUtf16(FileName)), OF_READ)) then Exit; pszFile:= GetMem(MAX_PATH * 2); try if Failed(ShellLink.GetPath(pszFile, MAX_PATH, @FindData, 0)) then Exit; if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then begin LinkTarget := UTF16ToUTF8(WideString(pszFile)); Result := (LinkTarget <> EmptyStr); end; finally FreeMem(pszFile); end; except LinkTarget := EmptyStr; end; end; procedure OleErrorUTF8(ErrorCode: HResult); begin raise EOleError.Create(mbSysErrorMessage(ErrorCode)); end; procedure OleCheckUTF8(Result: HResult); begin if not Succeeded(Result) then OleErrorUTF8(Result); end; initialization SHGetPropertyStoreFromParsingName:= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHGetPropertyStoreFromParsingName'); end. { ShlObjAdditional } doublecmd-1.1.30/src/platform/win/ushellfolder.pas0000644000175000001440000003567715104114162021214 0ustar alexxusersunit uShellFolder; {$mode delphi} interface uses Classes, SysUtils, Windows, ShlObj, ActiveX, ComObj, ShlWapi, uShlObjAdditional; const SID_SYSTEM = '{B725F130-47EF-101A-A5F1-02608C9EEBAC}'; SCID_FileSize: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 12 ); SCID_DateModified: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 14 ); SCID_DateCreated: TSHColumnID = ( fmtid: SID_SYSTEM; pid: 15 ); SID_NAME = '{41CF5AE0-F75A-4806-BD87-59C7D9248EB9}'; SCID_FileName: TSHColumnID = ( fmtid: SID_NAME; pid: 100 ); SID_COMPUTER = '{9B174B35-40FF-11D2-A27E-00C04FC30871}'; SCID_Capacity: TSHColumnID = ( fmtid: SID_COMPUTER; pid: 3 ); const FOLDERID_AccountPictures: TGUID = '{008ca0b1-55b4-4c56-b8a8-4de4b299d3be}'; FOLDERID_ApplicationShortcuts: TGUID = '{A3918781-E5F2-4890-B3D9-A7E54332328C}'; FOLDERID_CameraRoll: TGUID = '{AB5FB87B-7CE2-4F83-915D-550846C9537B}'; FOLDERID_Contacts: TGUID = '{56784854-C6CB-462b-8169-88E350ACB882}'; FOLDERID_DeviceMetadataStore: TGUID = '{5CE4A5E9-E4EB-479D-B89F-130C02886155}'; FOLDERID_Downloads: TGUID = '{374DE290-123F-4565-9164-39C4925E467B}'; FOLDERID_GameTasks: TGUID = '{054FAE61-4DD8-4787-80B6-090220C4B700}'; FOLDERID_ImplicitAppShortcuts: TGUID = '{BCB5256F-79F6-4CEE-B725-DC34E402FD46}'; FOLDERID_Libraries: TGUID = '{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}'; FOLDERID_Links: TGUID = '{bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}'; FOLDERID_LocalAppDataLow: TGUID = '{A520A1A4-1780-4FF6-BD18-167343C5AF16}'; FOLDERID_OriginalImages: TGUID = '{2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39}'; FOLDERID_PhotoAlbums: TGUID = '{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}'; FOLDERID_Playlists: TGUID = '{DE92C1C7-837F-4F69-A3BB-86E631204A23}'; FOLDERID_ProgramFilesX64: TGUID = '{6D809377-6AF0-444b-8957-A3773F02200E}'; FOLDERID_ProgramFilesCommonX64: TGUID = '{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}'; FOLDERID_Public: TGUID = '{DFDF76A2-C82A-4D63-906A-5644AC457385}'; FOLDERID_PublicDownloads: TGUID = '{3D644C9B-1FB8-4f30-9B45-F670235F79C0}'; FOLDERID_PublicGameTasks: TGUID = '{DEBF2536-E1A8-4c59-B6A2-414586476AEA}'; FOLDERID_PublicLibraries: TGUID = '{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}'; FOLDERID_PublicRingtones: TGUID = '{E555AB60-153B-4D17-9F04-A5FE99FC15EC}'; FOLDERID_PublicUserTiles: TGUID = '{0482af6c-08f1-4c34-8c90-e17ec98b1e17}'; FOLDERID_QuickLaunch: TGUID = '{52a4f021-7b75-48a9-9f6b-4b87a210bc8f}'; FOLDERID_Ringtones: TGUID = '{C870044B-F49E-4126-A9C3-B52A1FF411E8}'; FOLDERID_RoamedTileImages: TGUID = '{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}'; FOLDERID_RoamingTiles: TGUID = '{00BCFC5A-ED94-4e48-96A1-3F6217F21990}'; FOLDERID_SampleMusic: TGUID = '{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}'; FOLDERID_SamplePictures: TGUID = '{C4900540-2379-4C75-844B-64E6FAF8716B}'; FOLDERID_SamplePlaylists: TGUID = '{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}'; FOLDERID_SampleVideos: TGUID = '{859EAD94-2E85-48AD-A71A-0969CB56A6CD}'; FOLDERID_SavedGames: TGUID = '{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}'; FOLDERID_SavedPictures: TGUID = '{3B193882-D3AD-4eab-965A-69829D1FB59F}'; FOLDERID_SavedSearches: TGUID = '{7d1d3a04-debb-4115-95cf-2f29da2920da}'; FOLDERID_Screenshots: TGUID = '{b7bede81-df94-4682-a7d8-57a52620b86f}'; FOLDERID_SearchHistory: TGUID = '{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}'; FOLDERID_SearchTemplates: TGUID = '{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}'; FOLDERID_SidebarDefaultParts: TGUID = '{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}'; FOLDERID_SidebarParts: TGUID = '{A75D362E-50FC-4fb7-AC2C-A8BEAA314493}'; FOLDERID_SkyDrive: TGUID = '{A52BBA46-E9E1-435f-B3D9-28DAA648C0F6}'; FOLDERID_SkyDriveCameraRoll: TGUID = '{767E6811-49CB-4273-87C2-20F355E1085B}'; FOLDERID_SkyDriveDocuments: TGUID = '{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}'; FOLDERID_SkyDrivePictures: TGUID = '{339719B5-8C47-4894-94C2-D8F77ADD44A6}'; FOLDERID_UserPinned: TGUID = '{9E3995AB-1F9C-4F13-B827-48B24B6C7174}'; FOLDERID_UserProfiles: TGUID = '{0762D272-C50A-4BB0-A382-697DCD729B80}'; FOLDERID_UserProgramFiles: TGUID = '{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}'; FOLDERID_UserProgramFilesCommon: TGUID = '{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}'; type PPItemIDList = ^PItemIDList; TDefContextMenu = record hwnd : HWND; pcmcb : IUnknown; pidlFolder : PCIDLIST_ABSOLUTE; psf : IShellFolder; cidl : UINT; apidl : PPItemIDList; punkAssociationInfo : IUnknown; cKeys : UINT; aKeys : PHKEY; end; { TShellFolder } TShellFolder = class(TInterfacedObject, IShellFolder) private FFolder: IShellFolder; FDataObject: IDataObject; protected function QueryInterface(constref iid : tguid; out obj) : longint; stdcall; public constructor Create(AFolder: IShellFolder; DataObject: IDataObject); public function ParseDisplayName(hwndOwner: HWND; pbcReserved: Pointer; lpszDisplayName: POLESTR; out pchEaten: ULONG; out ppidl: PItemIDList; var dwAttributes: ULONG): HRESULT; stdcall; function EnumObjects(hwndOwner: HWND; grfFlags: DWORD; out EnumIDList: IEnumIDList): HRESULT; stdcall; function BindToObject(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvOut): HRESULT; stdcall; function BindToStorage(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvObj): HRESULT; stdcall; function CompareIDs(lParam: LPARAM; pidl1, pidl2: PItemIDList): HRESULT; stdcall; function CreateViewObject(hwndOwner: HWND; const riid: TIID; out ppvOut): HRESULT; stdcall; function GetAttributesOf(cidl: UINT; var apidl: PItemIDList; var rgfInOut: UINT): HRESULT; stdcall; function GetUIObjectOf(hwndOwner: HWND; cidl: UINT; var apidl: PItemIDList; const riid: TIID; prgfInOut: Pointer; out ppvOut): HRESULT; stdcall; function GetDisplayNameOf(pidl: PItemIDList; uFlags: DWORD; var lpName: TStrRet): HRESULT; stdcall; function SetNameOf(hwndOwner: HWND; pidl: PItemIDList; lpszName: POLEStr; uFlags: DWORD; var ppidlOut: PItemIDList): HRESULT; stdcall; end; function GetKnownFolderPath(const rfid: TGUID; out APath: String): Boolean; function MultiFileProperties(pdtobj: IDataObject; dwFlags: DWORD): HRESULT; function GetIsFolder(AParent: IShellFolder; PIDL: PItemIDList): Boolean; function GetDisplayName(AFolder: IShellFolder; PIDL: PItemIDList; Flags: DWORD): String; function GetDisplayNameEx(AFolder: IShellFolder2; PIDL: PItemIDList; Flags: DWORD): String; function GetDetails(AFolder: IShellFolder2; PIDL: PItemIDList; const pscid: SHCOLUMNID): OleVariant; function ParseDisplayName(Desktop: IShellFolder; const AName: String; out PIDL: PItemIDList): HRESULT; function CreateDefaultContextMenu(constref pdcm: TDefContextMenu; const riid: REFIID; out ppv): HRESULT; implementation uses Variants, ShellApi, LazUTF8, DCConvertEncoding, DCStrUtils; const KF_FLAG_DEFAULT = $00000000; var SHMultiFileProperties: function(pdtobj: IDataObject; dwFlags: DWORD): HRESULT; stdcall; SHCreateDefaultContextMenu: function(constref pdcm: TDefContextMenu; const riid: REFIID; out ppv): HRESULT; stdcall; SHGetKnownFolderPath: function(const rfid: TGUID; dwFlags: DWORD; hToken: HANDLE; out ppszPath: LPCWSTR): HRESULT; stdcall; function StrRetToString(PIDL: PItemIDList; StrRet: TStrRet): String; var S: array[0..MAX_PATH] of WideChar; begin if StrRetToBufW(@StrRet, PIDL, S, MAX_PATH) <> S_OK then Result:= EmptyStr else Result:= CeUtf16ToUtf8(UnicodeString(S)); end; function MultiFileProperties(pdtobj: IDataObject; dwFlags: DWORD): HRESULT; begin Result:= SHMultiFileProperties(pdtobj, dwFlags); end; function GetIsFolder(AParent: IShellFolder; PIDL: PItemIDList): Boolean; var Flags: LongWord; begin Flags:= SFGAO_FOLDER; AParent.GetAttributesOf(1, PIDL, Flags); Result:= (SFGAO_FOLDER and Flags) <> 0; end; function GetDisplayName(AFolder: IShellFolder; PIDL: PItemIDList; Flags: DWORD): String; var StrRet: TStrRet; begin Result:= EmptyStr; StrRet:= Default(TStrRet); if Succeeded(AFolder.GetDisplayNameOf(PIDL, Flags, StrRet)) then Result := StrRetToString(PIDL, StrRet); if (Length(Result) = 0) and (Flags <> SHGDN_NORMAL) then Result := GetDisplayName(AFolder, PIDL, SHGDN_NORMAL); end; function GetDisplayNameEx(AFolder: IShellFolder2; PIDL: PItemIDList; Flags: DWORD): String; var AValue: OleVariant; begin AValue:= GetDetails(AFolder, PIDL, SCID_FileName); if VarIsStr(AValue) then Result:= AValue else begin Result:= GetDisplayName(AFolder, PIDL, Flags); end; end; function GetDetails(AFolder: IShellFolder2; PIDL: PItemIDList; const pscid: SHCOLUMNID): OleVariant; var AValue: OleVariant; begin if Succeeded(AFolder.GetDetailsEx(pidl, @pscid, @AValue)) then Result:= AValue else Result:= Unassigned; end; function SplitParsingPath(const S: String): TStringArray; var P: PAnsiChar; AItem: String; I, Len: Integer; Start: Integer = 0; begin I:= 0; Len:= Length(S); P:= PAnsiChar(S); Result:= Default(TStringArray); while I < Len do begin if P[I] = '\' then begin SetString(AItem, @P[Start], I - Start); AddString(Result, AItem); Start:= I + 1; // Special case for "\\?\" and "\\.\" if (P[I + 1] = '\') and (P[I + 2] = '\') and (P[I + 3] in ['?', '.']) and (P[I + 4] = '\') then Inc(I, 4); end; Inc(I); end; if Start < Len then begin SetString(AItem, @P[Start], Len - Start); AddString(Result, AItem); end; end; function ParseDisplayName(Desktop: IShellFolder; const AName: String; out PIDL: PItemIDList): HRESULT; var AItem: String; Index: Integer; pchEaten: ULONG; APath: TStringArray; NumIDs: LongWord = 0; dwAttributes: ULONG = 0; EnumIDList: IEnumIDList; ParentFolder, AFolder: IShellFolder; ParentPIDL, RelativePIDL: PItemIDList; begin APath:= SplitParsingPath(AName); ParentFolder:= Desktop; SHGetFolderLocation(0, CSIDL_DESKTOP, 0, 0, {%H-}ParentPIDL); for Index:= 0 to High(APath) do begin dwAttributes:= 0; AItem:= APath[Index]; Result:= ParentFolder.ParseDisplayName(0, nil, PWideChar(CeUtf8ToUtf16(AItem)), pchEaten, RelativePIDL, dwAttributes); if Failed(Result) then begin Result:= ParentFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_STORAGE or SHCONTF_INCLUDEHIDDEN, EnumIDList); if Succeeded(Result) then begin Result:= STG_E_PATHNOTFOUND; while EnumIDList.Next(1, RelativePIDL, NumIDs) = S_OK do begin if AItem = GetDisplayName(ParentFolder, RelativePIDL, SHGDN_INFOLDER or SHGDN_FORPARSING) then begin Result:= S_OK; Break; end; CoTaskMemFree(RelativePIDL); end; end; end; if Succeeded(Result) then begin PIDL:= ILCombine(ParentPIDL, RelativePIDL); end; CoTaskMemFree(ParentPIDL); if Failed(Result) then Break; if Index < High(APath) then begin Result:= ParentFolder.BindToObject(RelativePIDL, nil, IID_IShellFolder, Pointer(AFolder)); if Succeeded(Result) then begin ParentPIDL:= PIDL; ParentFolder:= AFolder; end; end; CoTaskMemFree(RelativePIDL); if Failed(Result) then begin CoTaskMemFree(PIDL); Break; end; end; end; function CreateDefaultContextMenu(constref pdcm: TDefContextMenu; const riid: REFIID; out ppv): HRESULT; begin Result:= SHCreateDefaultContextMenu(pdcm, riid, ppv); end; function GetKnownFolderPath(const rfid: TGUID; out APath: String): Boolean; var ppszPath: LPCWSTR; begin Result:= Succeeded(SHGetKnownFolderPath(rfid, KF_FLAG_DEFAULT, 0, ppszPath)); if Result then APath:= UTF16ToUTF8(ppszPath); CoTaskMemFree(ppszPath); end; { TShellFolder } function TShellFolder.QueryInterface(constref iid: tguid; out obj): longint; stdcall; begin Result:= FFolder.QueryInterface(iid, obj); end; constructor TShellFolder.Create(AFolder: IShellFolder; DataObject: IDataObject); begin FFolder:= AFolder; FDataObject:= DataObject; end; function TShellFolder.ParseDisplayName(hwndOwner: HWND; pbcReserved: Pointer; lpszDisplayName: POLESTR; out pchEaten: ULONG; out ppidl: PItemIDList; var dwAttributes: ULONG): HRESULT; stdcall; begin Result:= FFolder.ParseDisplayName(hwndOwner, pbcReserved, lpszDisplayName, pchEaten, ppidl, dwAttributes); end; function TShellFolder.EnumObjects(hwndOwner: HWND; grfFlags: DWORD; out EnumIDList: IEnumIDList): HRESULT; stdcall; begin Result:= FFolder.EnumObjects(hwndOwner, grfFlags, EnumIDList); end; function TShellFolder.BindToObject(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvOut): HRESULT; stdcall; begin Result:= FFolder.BindToObject(pidl, pbcReserved, riid, ppvOut); end; function TShellFolder.BindToStorage(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvObj): HRESULT; stdcall; begin Result:= FFolder.BindToStorage(pidl, pbcReserved, riid, ppvObj); end; function TShellFolder.CompareIDs(lParam: LPARAM; pidl1, pidl2: PItemIDList): HRESULT; stdcall; begin Result:= FFolder.CompareIDs(lParam, pidl1, pidl2); end; function TShellFolder.CreateViewObject(hwndOwner: HWND; const riid: TIID; out ppvOut): HRESULT; stdcall; begin Result:= FFolder.CreateViewObject(hwndOwner, riid, ppvOut); end; function TShellFolder.GetAttributesOf(cidl: UINT; var apidl: PItemIDList; var rgfInOut: UINT): HRESULT; stdcall; begin Result:= FFolder.GetAttributesOf(cidl, apidl, rgfInOut); end; function TShellFolder.GetUIObjectOf(hwndOwner: HWND; cidl: UINT; var apidl: PItemIDList; const riid: TIID; prgfInOut: Pointer; out ppvOut ): HRESULT; stdcall; begin if (IsEqualGUID(riid, IID_IDataObject)) then Result:= FDataObject.QueryInterface(riid, ppvOut) else begin Result:= FFolder.GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut); end; end; function TShellFolder.GetDisplayNameOf(pidl: PItemIDList; uFlags: DWORD; var lpName: TStrRet): HRESULT; stdcall; begin Result:= FFolder.GetDisplayNameOf(pidl, uFlags, lpName); end; function TShellFolder.SetNameOf(hwndOwner: HWND; pidl: PItemIDList; lpszName: POLEStr; uFlags: DWORD; var ppidlOut: PItemIDList): HRESULT; stdcall; begin Result:= FFolder.SetNameOf(hwndOwner, pidl, lpszName, uFlags, ppidlOut); end; var AModule: HMODULE; initialization if CheckWin32Version(5, 1) then begin AModule:= GetModuleHandleW(shell32); @SHMultiFileProperties:= GetProcAddress(AModule, 'SHMultiFileProperties'); if Win32MajorVersion > 5 then begin @SHGetKnownFolderPath:= GetProcAddress(AModule, 'SHGetKnownFolderPath'); @SHCreateDefaultContextMenu:= GetProcAddress(AModule, 'SHCreateDefaultContextMenu'); end; end; end. doublecmd-1.1.30/src/platform/win/ushellfileoperation.pas0000644000175000001440000000712215104114162022561 0ustar alexxusersunit uShellFileOperation; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Windows, ActiveX, ShlObj, ComObj, ShlWAPI, ShellAPI, uShellFolder; const CLSID_FileOperation: TGUID = '{3ad05575-8857-4850-9277-11b85bdb8e09}'; type IOperationsProgressDialog = IUnknown; { IObjectWithPropertyKey } IObjectWithPropertyKey = interface(IUnknown) ['{fc0ca0a7-c316-4fd2-9031-3e628e6d4f23}'] function SetPropertyKey(key: REFPROPERTYKEY): HRESULT; stdcall; function GetPropertyKey(var pkey: PROPERTYKEY): HRESULT; stdcall; end; { IPropertyChange } IPropertyChange = interface(IObjectWithPropertyKey) ['{f917bc8a-1bba-4478-a245-1bde03eb9431}'] function ApplyToPropVariant(propvarIn: REFPROPVARIANT; ppropvarOut: PPROPVARIANT): HRESULT; stdcall; end; { IPropertyChangeArray } IPropertyChangeArray = interface(IUnknown) ['{380f5cad-1b5e-42f2-805d-637fd392d31e}'] function GetCount(pcOperations: PUINT): HRESULT; stdcall; function GetAt(iIndex: UINT; const riid: REFIID; out ppv): HRESULT; stdcall; function InsertAt(iIndex: UINT; ppropChange: IPropertyChange): HRESULT; stdcall; function Append(ppropChange: IPropertyChange): HRESULT; stdcall; function AppendOrReplace(ppropChange: IPropertyChange): HRESULT; stdcall; function RemoveAt(iIndex: UINT): HRESULT; stdcall; function IsKeyInArray(key: REFPROPERTYKEY): HRESULT; stdcall; end; { IFileOperation } IFileOperation = interface(IUnknown) ['{947aab5f-0a5c-4c13-b4d6-4bf7836fc9f8}'] function Advise(pfops: IFileOperationProgressSink; pdwCookie: PDWORD): HRESULT; stdcall; function Unadvise(dwCookie: DWORD): HRESULT; stdcall; function SetOperationFlags(dwOperationFlags: DWORD): HRESULT; stdcall; function SetProgressMessage(pszMessage: LPCWSTR): HRESULT; stdcall; function SetProgressDialog(popd: IOperationsProgressDialog): HRESULT; stdcall; function SetProperties(pproparray: IPropertyChangeArray): HRESULT; stdcall; function SetOwnerWindow(hwndOwner: HWND): HRESULT; stdcall; function ApplyPropertiesToItem(psiItem: IShellItem): HRESULT; stdcall; function ApplyPropertiesToItems(punkItems: IUnknown): HRESULT; stdcall; function RenameItem(psiItem: IShellItem; pszNewName: LPCWSTR; pfopsItem: IFileOperationProgressSink): HRESULT; stdcall; function RenameItems(pUnkItems: IUnknown; pszNewName: LPCWSTR): HRESULT; stdcall; function MoveItem(psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; pfopsItem: IFileOperationProgressSink): HRESULT; stdcall; function MoveItems(punkItems: IUnknown; psiDestinationFolder: IShellItem): HRESULT; stdcall; function CopyItem(psiItem: IShellItem; psiDestinationFolder: IShellItem; pszCopyName: LPCWSTR; pfopsItem: IFileOperationProgressSink): HRESULT; stdcall; function CopyItems(punkItems: IUnknown; psiDestinationFolder: IShellItem): HRESULT; stdcall; function DeleteItem(psiItem: IShellItem; pfopsItem: IFileOperationProgressSink): HRESULT; stdcall; function DeleteItems(punkItems: IUnknown): HRESULT; stdcall; function NewItem(psiDestinationFolder: IShellItem; dwFileAttributes: DWORD; pszName: LPCWSTR; pszTemplateName: LPCWSTR; pfopsItem: IFileOperationProgressSink): HRESULT; stdcall; function PerformOperations(): HRESULT; stdcall; function GetAnyOperationsAborted(pfAnyOperationsAborted: PBOOL): HRESULT; stdcall; end; implementation end. doublecmd-1.1.30/src/platform/win/ushellcontextmenu.pas0000644000175000001440000010337315104114162022277 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uShellContextMenu; {$mode delphi}{$H+} {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} {$POINTERMATH ON} {$ENDIF} interface uses Classes, SysUtils, Controls, uFile, Windows, ComObj, ShlObj, ActiveX, JwaShlGuid, uGlobs, uShlObjAdditional; const sCmdVerbOpen = 'open'; sCmdVerbRename = 'rename'; sCmdVerbDelete = 'delete'; sCmdVerbCut = 'cut'; sCmdVerbCopy = 'copy'; sCmdVerbPaste = 'paste'; sCmdVerbLink = 'link'; sCmdVerbProperties = 'properties'; sCmdVerbNewFolder = 'NewFolder'; sCmdVerbCopyPath = 'copyaspath'; type { EContextMenuException } EContextMenuException = class(Exception); { TShellContextMenu } TShellContextMenu = class private FOnClose: TNotifyEvent; FParent: HWND; FFiles: TFiles; FBackground: boolean; FShellMenu1: IContextMenu; FShellMenu: HMENU; FUserWishForContextMenu: TUserWishForContextMenu; protected procedure Execute(Data: PtrInt); public constructor Create(Parent: TWinControl; var Files: TFiles; Background: boolean; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete); reintroduce; destructor Destroy; override; procedure PopUp(X, Y: integer); property OnClose: TNotifyEvent read FOnClose write FOnClose; end; procedure PasteFromClipboard(Parent: HWND; const Path: String); function GetShellContextMenu(Handle: HWND; Files: TFiles; Background: boolean): IContextMenu; implementation uses graphtype, intfgraphics, Graphics, uPixMapManager, Dialogs, uLng, uMyWindows, uShellExecute, fMain, uDCUtils, uFormCommands, DCOSUtils, uOSUtils, uShowMsg, uExts, uFileSystemFileSource, DCConvertEncoding, LazUTF8, uOSForms, uGraphics, Forms, DCWindows, DCStrUtils, Clipbrd, uFileSystemWatcher, uShellFolder, uOleDragDrop, uGdiPlus; const USER_CMD_ID = $1000; var OldWProc: WNDPROC = nil; ShellMenu2: IContextMenu2 = nil; ShellMenu3: IContextMenu3 = nil; ContextMenuDCIcon: Graphics.TBitmap = nil; ContextMenucm_FileAssoc: Graphics.TBitmap = nil; ContextMenucm_RunTerm: Graphics.TBitmap = nil; function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case uiMsg of WM_MENUSELECT: Result := DefWindowProcW(hWnd, uiMsg, wParam, lParam); (* For working with submenu of context menu *) WM_INITMENUPOPUP, WM_DRAWITEM, WM_MENUCHAR, WM_MEASUREITEM: if Assigned(ShellMenu3) then ShellMenu3.HandleMenuMsg2(uiMsg, wParam, lParam, @Result) else if Assigned(ShellMenu2) then begin ShellMenu2.HandleMenuMsg(uiMsg, wParam, lParam); Result := 0; end else Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); else Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; // case end; function GetDriveContextMenu(Handle: HWND; Files: TFiles): IContextMenu; var Path: String; pchEaten: ULONG; S: UnicodeString; dwAttributes: ULONG = 0; PathPIDL: PItemIDList = nil; Folder, DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(Handle, CSIDL_DRIVES, 0, 0, PathPIDL)); try if Files[0].Attributes <> FILE_ATTRIBUTE_DEVICE then Path:= Files[0].FullPath else begin Path:= GetDisplayName(DesktopFolder, PathPIDL, SHGDN_FORPARSING); Path:= Copy(Files[0].LinkProperty.LinkTo, Length(Path) + 2, MaxInt); end; OleCheckUTF8(DeskTopFolder.BindToObject(PathPIDL, nil, IID_IShellFolder, Folder)); finally CoTaskMemFree(PathPIDL); end; S := CeUtf8ToUtf16(Path); OleCheckUTF8(Folder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, PathPIDL, dwAttributes)); try OleCheckUTF8(Folder.GetUIObjectOf(Handle, 1, PathPIDL, IID_IContextMenu, nil, Result)); finally CoTaskMemFree(PathPIDL); end; end; function GetRecycleBinContextMenu(Handle: HWND): IContextMenu; var PathPIDL: PItemIDList = nil; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(Handle, CSIDL_BITBUCKET, 0, 0, PathPIDL)); try OleCheckUTF8(DesktopFolder.GetUIObjectOf(Handle, 1, PathPIDL, IID_IContextMenu, nil, Result)); finally CoTaskMemFree(PathPIDL); end; end; function GetForegroundContextMenu(Handle: HWND; Files: TFiles): IContextMenu; var I: Integer; pchEaten: ULONG; S: UnicodeString; APath: UnicodeString; AFolder: TShellFolder; AMenu: TDefContextMenu; dwAttributes: ULONG = 0; List: PPItemIDList = nil; ASamePath: Boolean = True; tmpPIDL: PItemIDList = nil; PathPIDL: PItemIDList = nil; ADataObject: THDropDataObject; Folder, DesktopFolder: IShellFolder; begin Result := nil; OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); try List := CoTaskMemAlloc(SizeOf(PItemIDList) * Files.Count); ZeroMemory(List, SizeOf(PItemIDList) * Files.Count); APath:= CeUtf8ToUtf16(Files[0].Path); for I := 0 to Files.Count - 1 do begin if Files[I].Name = EmptyStr then S := EmptyWideStr else S := CeUtf8ToUtf16(Files[I].Path); if ASamePath then begin ASamePath:= UnicodeSameText(S, APath); end; OleCheckUTF8(DeskTopFolder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, PathPIDL, dwAttributes)); try OleCheckUTF8(DeskTopFolder.BindToObject(PathPIDL, nil, IID_IShellFolder, Folder)); finally CoTaskMemFree(PathPIDL); end; if Files[I].Name = EmptyStr then S := CeUtf8ToUtf16(Files[I].Path) else S := CeUtf8ToUtf16(Files[I].Name); OleCheckUTF8(Folder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, tmpPIDL, dwAttributes)); (List + i)^ := tmpPIDL; end; if (Win32MajorVersion < 6) or (ASamePath) or (Files.Count = 1) then Folder.GetUIObjectOf(Handle, Files.Count, PItemIDList(List^), IID_IContextMenu, nil, Result) else begin AMenu:= Default(TDefContextMenu); AMenu.hwnd:= Handle; ADataObject:= THDropDataObject.Create(DROPEFFECT_NONE); AFolder:= TShellFolder.Create(DeskTopFolder, ADataObject); for I := 0 to Files.Count - 1 do begin ADataObject.Add(Files[I].FullPath); end; AMenu.psf:= AFolder; AMenu.cidl:= Files.Count; AMenu.apidl:= PPItemIDList(List); OleCheckUTF8(CreateDefaultContextMenu(AMenu, IID_IContextMenu, Result)); end; finally if Assigned(List) then begin for I := 0 to Files.Count - 1 do if Assigned((List + i)^) then CoTaskMemFree((List + i)^); CoTaskMemFree(List); end; Folder := nil; DesktopFolder := nil; end; end; function GetBackgroundContextMenu(Handle: HWND; Files: TFiles): IContextMenu; var DesktopFolder, Folder: IShellFolder; wsFileName: WideString; PathPIDL: PItemIDList = nil; pchEaten: ULONG; dwAttributes: ULONG = 0; begin Result := nil; if Files.Count > 0 then begin wsFileName := CeUtf8ToUtf16(Files[0].FullPath); OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); try OleCheckUTF8(DesktopFolder.ParseDisplayName(Handle, nil, PWideChar(wsFileName), pchEaten, PathPIDL, dwAttributes)); try OleCheckUTF8(DesktopFolder.BindToObject(PathPIDL, nil, IID_IShellFolder, Folder)); finally CoTaskMemFree(PathPIDL); end; OleCheckUTF8(Folder.CreateViewObject(Handle, IID_IContextMenu, Result)); finally Folder := nil; DesktopFolder := nil; end; end; end; function GetShellContextMenu(Handle: HWND; Files: TFiles; Background: boolean): IContextMenu; inline; begin if Files = nil then Result := GetRecycleBinContextMenu(Handle) else if (Files.Count = 1) and (Files[0].Attributes and FILE_ATTRIBUTE_DEVICE <> 0) then Result := GetDriveContextMenu(Handle, Files) else if Background then Result := GetBackgroundContextMenu(Handle, Files) else Result := GetForegroundContextMenu(Handle, Files); end; type { TShellThread } TShellThread = class(TThread) private FParent: HWND; FVerb: ansistring; FShellMenu: IContextMenu; protected procedure Execute; override; public constructor Create(Parent: HWND; ShellMenu: IContextMenu; Verb: ansistring); reintroduce; destructor Destroy; override; end; { TShellThread } procedure TShellThread.Execute; var Result: HRESULT; cmici: TCMINVOKECOMMANDINFO; begin CoInitializeEx(nil, COINIT_APARTMENTTHREADED); try FillByte(cmici, SizeOf(cmici), 0); with cmici do begin cbSize := SizeOf(cmici); hwnd := FParent; lpVerb := PAnsiChar(FVerb); nShow := SW_NORMAL; end; Result := FShellMenu.InvokeCommand(cmici); if not (Succeeded(Result) or (Result = COPYENGINE_E_USER_CANCELLED) or (Result = HRESULT_ERROR_CANCELLED)) then msgError(Self, mbSysErrorMessage(Result)); finally CoUninitialize; end; end; constructor TShellThread.Create(Parent: HWND; ShellMenu: IContextMenu; Verb: ansistring); begin inherited Create(True); FVerb := Verb; FParent := Parent; FShellMenu := ShellMenu; FreeOnTerminate := True; end; destructor TShellThread.Destroy; begin FShellMenu := nil; inherited Destroy; end; procedure CreateActionSubMenu(MenuWhereToAdd: HMenu; paramExtActionList: TExtActionList; aFile: TFile; bIncludeViewEdit: boolean); const Always_Legacy_Action_Count = 2; var I, iDummy: integer; sAct: String; iMenuPositionInsertion: integer = 0; Always_Expanded_Action_Count: integer = 0; bSeparatorAlreadyInserted: boolean; function CreateBitmap: TBitmap; begin Result := Graphics.TBitmap.Create; Result.SetSize(gIconsSize, gIconsSize); Result.Transparent := True; Result.Canvas.Brush.Color := clMenu; Result.Canvas.Brush.Style := bsSolid; Result.Canvas.FillRect(0, 0, gIconsSize, gIconsSize); end; function GetMyIcon: TBitmap; var AIcon: TIcon; begin Result:= CreateBitmap; AIcon:= TIcon.Create; try AIcon.LoadFromResourceName(MainInstance, 'MAINICON'); AIcon.Current:= AIcon.GetBestIndexForSize(TSize.Create(gIconsSize, gIconsSize)); if (AIcon.Width = gIconsSize) and (AIcon.Height = gIconsSize) then DrawIcon(Result.Canvas.Handle, 0, 0, AIcon.Handle) else if IsGdiPlusLoaded then GdiPlusStretchDraw(AIcon.Handle, Result.Canvas.Handle, 0, 0, gIconsSize, gIconsSize) else begin DrawIconEx(Result.Canvas.Handle, 0, 0, AIcon.Handle, gIconsSize, gIconsSize, 0, 0, DI_NORMAL); end; finally AIcon.Free; end; if Result.PixelFormat <> pf32bit then BitmapConvert(Result); end; function GetMeTheBitmapForThis(ImageRequiredIndex: PtrInt): TBitmap; begin Result:= CreateBitmap; PixMapManager.DrawBitmap(ImageRequiredIndex, Result.Canvas, 0, 0); if Result.PixelFormat <> pf32bit then BitmapConvert(Result); end; procedure LocalInsertMenuSeparator; begin InsertMenuItemEx(MenuWhereToAdd, 0, nil, iMenuPositionInsertion, 0, MFT_SEPARATOR); Inc(iMenuPositionInsertion); end; procedure LocalInsertMenuItemExternal(MenuDispatcher: integer; BitmapProvided: TBitmap = nil); begin if BitmapProvided = nil then InsertMenuItemEx(MenuWhereToAdd, 0, PWChar(CeUtf8ToUtf16(paramExtActionList.ExtActionCommand[MenuDispatcher].ActionName)), iMenuPositionInsertion, MenuDispatcher + USER_CMD_ID, MFT_STRING, paramExtActionList.ExtActionCommand[MenuDispatcher].IconBitmap) else InsertMenuItemEx(MenuWhereToAdd, 0, PWChar(CeUtf8ToUtf16(paramExtActionList.ExtActionCommand[MenuDispatcher].ActionName)), iMenuPositionInsertion, MenuDispatcher + USER_CMD_ID, MFT_STRING, BitmapProvided); Inc(iMenuPositionInsertion); end; begin // Read actions from "extassoc.xml" if not gExtendedContextMenu then gExts.GetExtActions(aFile, paramExtActionList, @iDummy, False) else gExts.GetExtActions(aFile, paramExtActionList, @iDummy, True); if not gExtendedContextMenu then begin // In non expanded context menu (legacy), the order of items is: // 1o) View (always) // 2o) Edit (always) // 3o) Custom action different then Open, View or Edit (if any, add also a separator just before) I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView, '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit, '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); if paramExtActionList.Count > Always_Legacy_Action_Count then begin bSeparatorAlreadyInserted := false; for I := 0 to (pred(paramExtActionList.Count) - Always_Legacy_Action_Count) do begin sAct := paramExtActionList.ExtActionCommand[I].ActionName; if (CompareText('OPEN', sAct) <> 0) and (CompareText('VIEW', sAct) <> 0) and (CompareText('EDIT', sAct) <> 0) then begin if not bSeparatorAlreadyInserted then begin LocalInsertMenuSeparator; bSeparatorAlreadyInserted := true; end; LocalInsertMenuItemExternal(I); end; end; end; end else begin // In expanded context menu, the order of items is: // 1o) View (always, and if "external" is used, shows also the "internal" if user wants it. // 2o) Edit (always, and if "external" is used, shows also the "internal" if user wants it. // 3o) Custom actions, no matter is open, view or edit (if any, add also a separator just before). // These will be shown in the same order as what they are configured in File Association. // The routine "GetExtActions" has already placed them in the wanted order. // Also, the routine "GetExtActions" has already included the menu separator ('-') between different "TExtAction". // 4o) We add the Execute via shell if user requested it. // 5o) We add the Execute via terminal if user requested it (close and then stay open). // 6o) Still if user requested it, the shortcut run file association configuration, if user wanted it. // A separator also prior that last action. // Let's prepare our icon for extended menu if not already prepaed during the session. if ContextMenuDCIcon = nil then ContextMenuDCIcon := GetMyIcon; if ContextMenucm_FileAssoc = nil then ContextMenucm_FileAssoc := GetMeTheBitmapForThis(PixMapManager.GetIconByName('cm_fileassoc')); if ContextMenucm_RunTerm = nil then ContextMenucm_RunTerm := GetMeTheBitmapForThis(PixMapManager.GetIconByName('cm_runterm')); // If the default context actions not hidden if gDefaultContextActions then begin // If the external generic viewer is configured, offer it. if gExternalTools[etViewer].Enabled then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView + ' (' + rsViewWithExternalViewer + ')', '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); Inc(Always_Expanded_Action_Count); end; // Make sure we always shows our internal viewer I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView + ' (' + rsViewWithInternalViewer + ')', '{!DC-VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenuDCIcon); Inc(Always_Expanded_Action_Count); // If the external generic editor is configured, offer it. if gExternalTools[etEditor].Enabled then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit + ' (' + rsEditWithExternalEditor + ')', '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); Inc(Always_Expanded_Action_Count); end; // Make sure we always shows our internal editor I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit + ' (' + rsEditWithInternalEditor + ')', '{!DC-EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenuDCIcon); Inc(Always_Expanded_Action_Count); end; // Now let's add the action button if paramExtActionList.Count > Always_Expanded_Action_Count then begin if iMenuPositionInsertion > 0 then LocalInsertMenuSeparator; for I := 0 to (pred(paramExtActionList.Count) - Always_Expanded_Action_Count) do begin if paramExtActionList.ExtActionCommand[I].ActionName <> '-' then begin sAct := paramExtActionList.ExtActionCommand[I].ActionName; if (CompareText('OPEN', sAct) = 0) or (CompareText('VIEW', sAct) = 0) or (CompareText('EDIT', sAct) = 0) then sAct := sAct + ' (' + ExtractFilename(paramExtActionList.ExtActionCommand[I].CommandName) + ')'; if paramExtActionList.ExtActionCommand[I].IconIndex <> -1 then begin paramExtActionList.ExtActionCommand[I].IconBitmap := Graphics.TBitmap.Create; paramExtActionList.ExtActionCommand[I].IconBitmap.SetSize(gIconsSize, gIconsSize); paramExtActionList.ExtActionCommand[I].IconBitmap.Transparent := True; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.Brush.Color := clMenu; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.Brush.Style := bsSolid; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.FillRect(0, 0, gIconsSize, gIconsSize); PixMapManager.DrawBitmap(paramExtActionList.ExtActionCommand[I].IconIndex, paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas, 0, 0); if paramExtActionList.ExtActionCommand[I].IconBitmap.PixelFormat <> pf32bit then begin BitmapConvert(paramExtActionList.ExtActionCommand[I].IconBitmap); end; end; LocalInsertMenuItemExternal(I); end else begin LocalInsertMenuSeparator; end; end; end; if (gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen) and (iMenuPositionInsertion > 0) then LocalInsertMenuSeparator; // now add various SHELL item if gOpenExecuteViaShell then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuOpen + ' (' + rsExecuteViaShell + ')', '{!SHELL}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); end; if gExecuteViaTerminalClose then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalClose, '{!TERMANDCLOSE}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenucm_RunTerm); end; if gExecuteViaTerminalStayOpen then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalStayOpen, '{!TERMSTAYOPEN}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenucm_RunTerm); end; // Add shortcut to launch file association configuration screen if gIncludeFileAssociation then begin if iMenuPositionInsertion > 0 then LocalInsertMenuSeparator; I := paramExtActionList.Add(TExtActionCommand.Create(rsConfigurationFileAssociation, 'cm_FileAssoc', '', '')); LocalInsertMenuItemExternal(I, ContextMenucm_FileAssoc); end; end; end; { TShellContextMenu } procedure TShellContextMenu.Execute(Data: PtrInt); var UserSelectedCommand: TExtActionCommand absolute Data; begin try with frmMain.ActiveFrame do begin try //For the %-Variable replacement that follows it might sounds incorrect to do it with "nil" instead of "aFile", //but original code was like that. It is useful, at least, when more than one file is selected so because of that, //it's pertinent and should be kept! ProcessExtCommandFork(UserSelectedCommand.CommandName, UserSelectedCommand.Params, UserSelectedCommand.StartPath, nil); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; finally FreeAndNil(UserSelectedCommand); end; end; { TShellContextMenu.Create } constructor TShellContextMenu.Create(Parent: TWinControl; var Files: TFiles; Background: boolean; UserWishForContextMenu: TUserWishForContextMenu); var UFlags: UINT = CMF_EXPLORE; begin FParent:= GetControlHandle(Parent); // Replace window procedure {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtrW(FParent, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} FFiles := Files; FBackground := Background; FShellMenu := 0; FUserWishForContextMenu := UserWishForContextMenu; if Assigned(Files) and (Files.Count > 0) and (Files[0].Attributes <> FILE_ATTRIBUTE_DEVICE) then begin UFlags := UFlags or CMF_CANRENAME; end; // Add extended verbs if shift key is down if (ssShift in GetKeyShiftState) then begin UFlags := UFlags or CMF_EXTENDEDVERBS; end; try try FShellMenu1 := GetShellContextMenu(FParent, Files, Background); if Assigned(FShellMenu1) then begin FShellMenu := CreatePopupMenu; if FUserWishForContextMenu = uwcmComplete then OleCheckUTF8(FShellMenu1.QueryContextMenu(FShellMenu, 0, 1, USER_CMD_ID - 1, UFlags)); FShellMenu1.QueryInterface(IID_IContextMenu2, ShellMenu2); // to handle submenus. FShellMenu1.QueryInterface(IID_IContextMenu3, ShellMenu3); // to handle submenus. end; except on e: EOleError do raise EContextMenuException.Create(e.Message); end; finally Files := nil; end; end; destructor TShellContextMenu.Destroy; begin // Restore window procedure {$PUSH}{$HINTS OFF} SetWindowLongPtrW(FParent, GWL_WNDPROC, LONG_PTR(@OldWProc)); {$POP} // Free global variables ShellMenu2 := nil; ShellMenu3 := nil; // Free internal objects FShellMenu1 := nil; FreeAndNil(FFiles); if FShellMenu <> 0 then DestroyMenu(FShellMenu); inherited Destroy; end; procedure TShellContextMenu.PopUp(X, Y: integer); var aFile: TFile = nil; i: integer; hActionsSubMenu: HMENU = 0; iActionsItemsCount: integer; cmd: UINT = 0; iCmd: integer; cmici: TCMInvokeCommandInfoEx; lpici: TCMINVOKECOMMANDINFO absolute cmici; bHandled: boolean = False; ZVerb: array[0..255] of AnsiChar; sVerb: string; Result: HRESULT; FormCommands: IFormCommands; InnerExtActionList: TExtActionList = nil; UserSelectedCommand: TExtActionCommand = nil; sVolumeLabel: string; begin try try if Assigned(FShellMenu1) then try FormCommands := frmMain as IFormCommands; if Assigned(FFiles) then begin aFile := FFiles[0]; if FBackground then // Add "Background" context menu specific items begin SetMenuDefaultItem(FShellMenu, UINT(-1), 0); InnerExtActionList := TExtActionList.Create; // Add commands to root of context menu I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_Refresh'), 'cm_Refresh', '', '')); InsertMenuItemEx(FShellMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add "Sort by" submenu hActionsSubMenu := CreatePopupMenu; I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_ReverseOrder'), 'cm_ReverseOrder', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add separator InsertMenuItemEx(hActionsSubMenu, 0, nil, 0, 0, MFT_SEPARATOR); // Add "Sort by" items I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByAttr'), 'cm_SortByAttr', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByDate'), 'cm_SortByDate', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortBySize'), 'cm_SortBySize', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByExt'), 'cm_SortByExt', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByName'), 'cm_SortByName', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add submenu to context menu InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(CeUtf8ToUtf16(rsMnuSortBy)), 1, 333, MFT_STRING); // Add menu separator InsertMenuItemEx(FShellMenu, 0, nil, 2, 0, MFT_SEPARATOR); // Add commands to root of context menu I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_PasteFromClipboard'), 'cm_PasteFromClipboard', '', '')); InsertMenuItemEx(FShellMenu, 0, PWideChar(CeUtf8ToUtf16(InnerExtActionList.ExtActionCommand[I].ActionName)), 3, I + USER_CMD_ID, MFT_STRING); // Add menu separator InsertMenuItemEx(FShellMenu, 0, nil, 4, 0, MFT_SEPARATOR); end else // Add "Actions" submenu begin InnerExtActionList := TExtActionList.Create; if FUserWishForContextMenu = uwcmComplete then begin hActionsSubMenu := CreatePopupMenu; CreateActionSubMenu(hActionsSubMenu, InnerExtActionList, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); end else begin CreateActionSubMenu(FShellMenu, InnerExtActionList, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); end; // Add Actions submenu (Will never be empty, we always have View and Edit...) iCmd := GetMenuItemCount(FShellMenu) - 1; for I := 0 to iCmd do begin if GetMenuItemType(FShellMenu, I, True) = MFT_SEPARATOR then Break; end; iActionsItemsCount := GetMenuItemCount(hActionsSubMenu); if (FUserWishForContextMenu = uwcmComplete) and (iActionsItemsCount > 0) then InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(CeUtf8ToUtf16(rsMnuActions)), I, 333, MFT_STRING); end; { /Actions submenu } end; //------------------------------------------------------------------------------ cmd := UINT(TrackPopupMenu(FShellMenu, TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD, X, Y, 0, FParent, nil)); finally if hActionsSubMenu <> 0 then DestroyMenu(hActionsSubMenu); end; if (cmd > 0) and (cmd < USER_CMD_ID) then begin iCmd := longint(Cmd) - 1; if Succeeded(FShellMenu1.GetCommandString(iCmd, GCS_VERBA, nil, ZVerb, SizeOf(ZVerb))) then begin sVerb := StrPas(ZVerb); if SameText(sVerb, sCmdVerbRename) then begin if (FFiles.Count = 1) then begin // Change drive label if (FFiles[0].Attributes and FILE_ATTRIBUTE_DEVICE <> 0) then begin aFile := FFiles[0]; sVolumeLabel := mbGetVolumeLabel(aFile.FullPath, True); if InputQuery(rsMsgSetVolumeLabel, rsMsgVolumeLabel, sVolumeLabel) then mbSetVolumeLabel(aFile.FullPath, sVolumeLabel); end else begin frmMain.actRenameOnly.Execute; end; end else begin frmMain.actRename.Execute; end; bHandled := True; end else if SameText(sVerb, sCmdVerbCut) then begin frmMain.actCutToClipboard.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbCopy) then begin frmMain.actCopyToClipboard.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbNewFolder) then begin frmMain.actMakeDir.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbPaste) or SameText(sVerb, sCmdVerbDelete) then begin TShellThread.Create(FParent, FShellMenu1, sVerb).Start; bHandled := True; end else if SameText(sVerb, sCmdVerbCopyPath) then begin with TStringList.Create do begin for i:= 0 to FFiles.Count - 1 do begin sVolumeLabel:= FFiles[i].FullPath; if UTF8Length(sVolumeLabel) >= MAX_PATH then Add(QuoteStr(UTF16ToUTF8(UTF16LongName(sVolumeLabel)))) else begin Add(QuoteStr(sVolumeLabel)); end; end; Clipboard.AsText:= TrimRightLineEnding(Text, TextLineBreakStyle); Free; end; bHandled := True; end; end; if not bHandled then begin if Assigned(FFiles) then begin if FBackground then sVolumeLabel := FFiles[0].FullPath else begin sVolumeLabel := ExcludeTrailingBackslash(FFiles[0].Path); end; end; ZeroMemory(@cmici, SizeOf(cmici)); with cmici do begin cbSize := SizeOf(cmici); hwnd := FParent; fMask := CMIC_MASK_UNICODE; {$PUSH}{$HINTS OFF} lpVerb := PAnsiChar(PtrUInt(cmd - 1)); {$POP} nShow := SW_NORMAL; if Assigned(FFiles) and (FFiles[0].Path <> FFiles[0].FullPath) then begin lpDirectory := PAnsiChar(CeUtf8ToSys(sVolumeLabel)); lpDirectoryW := PWideChar(UTF8ToUTF16(sVolumeLabel)); end; end; Result := FShellMenu1.InvokeCommand(lpici); if not Succeeded(Result) then begin case Result of COPYENGINE_E_USER_CANCELLED, E_FAIL: ; // Ignore else OleErrorUTF8(Result); end; end; // Reload after possible changes on the filesystem. if SameText(sVerb, sCmdVerbLink) or SameText(sVerb, sCmdVerbDelete) then frmMain.ActiveFrame.FileSource.Reload(frmMain.ActiveFrame.CurrentPath); // "New" submenu if FBackground and (StrBegins(sVerb, ExtensionSeparator)) then begin sVolumeLabel:= frmMain.ActiveFrame.CurrentPath; if not (TFileSystemWatcher.CanWatch([sVolumeLabel]) and frmMain.ActiveFrame.WatcherActive) then frmMain.ActiveFrame.FileSource.Reload(sVolumeLabel); end; end; end // if cmd > 0 else if (cmd >= USER_CMD_ID) then // actions sub menu begin if (cmd - USER_CMD_ID) < InnerExtActionList.Count then UserSelectedCommand := InnerExtActionList.ExtActionCommand[cmd - USER_CMD_ID].CloneExtAction; if FBackground then begin if SameText(UserSelectedCommand.CommandName, 'cm_PasteFromClipboard') then TShellThread.Create(FParent, FShellMenu1, sCmdVerbPaste).Start else FormCommands.ExecuteCommand(UserSelectedCommand.CommandName, []); bHandled := True; end else begin Application.QueueAsyncCall(Execute, PtrInt(UserSelectedCommand)); UserSelectedCommand := nil; bHandled := True; end; end; finally FreeAndNil(InnerExtActionList); FreeAndNil(UserSelectedCommand); FreeAndNil(ContextMenuDCIcon); end; except on e: EOleError do raise EContextMenuException.Create(e.Message); end; if Assigned(FOnClose) then FOnClose(Self); end; procedure PasteFromClipboard(Parent: HWND; const Path: String); var AFile: TFile; Files: TFiles; ShellMenu: IContextMenu; begin Files:= TFiles.Create(EmptyStr); try AFile := TFileSystemFileSource.CreateFile(EmptyStr); AFile.FullPath := Path; AFile.Attributes := faFolder; Files.Add(AFile); ShellMenu:= GetShellContextMenu(Parent, Files, True); if Assigned(ShellMenu) then begin TShellThread.Create(Parent, ShellMenu, sCmdVerbPaste).Start; end; except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; FreeAndNil(Files); end; end. doublecmd-1.1.30/src/platform/win/unetworkthread.pas0000644000175000001440000001474615104114162021564 0ustar alexxusersunit uNetworkThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SyncObjs, JwaWinNetWk, Windows, Forms, Graphics, Dialogs, StdCtrls, ComCtrls, Buttons, uDrive, uOSForms; type { TDriveIcon } TDriveIcon = class public Drive: TDrive; Bitmap: TBitmap; destructor Destroy; override; end; { TNetworkForm } TNetworkForm = class(TModalDialog) lblPrompt: TLabel; btnAbort: TBitBtn; pbConnect: TProgressBar; private FThread: TThread; public constructor Create(TheOwner: TComponent; AThread: TThread; APath: PWideChar); reintroduce; procedure ExecuteModal; override; end; { TNetworkThread } TNetworkThread = class(TThread) private FWaitFinish: TSimpleEvent; FWaitConnect: TSimpleEvent; NetResource: TNetResourceW; protected procedure Execute; override; public constructor Create(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD); reintroduce; destructor Destroy; override; public class function Connect(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD): Integer; overload; class function Connect(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD; CheckOperationState: TThreadMethod): Integer; overload; end; { TNetworkDriveLoader } TNetworkDriveLoader = class(TThread) private FDrive: TDrive; FIconSize: Integer; FBackColor: TColor; FCallback: TDataEvent; protected procedure Execute; override; public constructor Create(ADrive: PDrive; AIconSize: Integer; ABackColor: TColor; ACallback: TDataEvent); reintroduce; end; implementation uses Math, InterfaceBase, Controls, fMain, uMyWindows, uPixMapManager, uLng; { TDriveIcon } destructor TDriveIcon.Destroy; begin Bitmap.Free; inherited Destroy; end; { TNetworkDriveLoader } procedure TNetworkDriveLoader.Execute; var AIcon: TDriveIcon; AData: PtrInt absolute AIcon; begin AIcon:= TDriveIcon.Create; AIcon.Drive:= FDrive; AIcon.Bitmap:= PixMapManager.GetDriveIcon(@FDrive, FIconSize, FBackColor); Application.QueueAsyncCall(FCallback, AData); end; constructor TNetworkDriveLoader.Create(ADrive: PDrive; AIconSize: Integer; ABackColor: TColor; ACallback: TDataEvent); begin FDrive:= ADrive^; FIconSize:= AIconSize; FBackColor:= ABackColor; FCallback:= ACallback; inherited Create(True); FreeOnTerminate:= True; end; { TNetworkForm } constructor TNetworkForm.Create(TheOwner: TComponent; AThread: TThread; APath: PWideChar); begin FThread:= AThread; inherited CreateNew(TheOwner); AutoSize:= True; BorderStyle:= bsDialog; Caption:= Application.Title; Position:= poOwnerFormCenter; ChildSizing.TopBottomSpacing:= 6; ChildSizing.LeftRightSpacing:= 6; lblPrompt := TLabel.Create(Self); with lblPrompt do begin Parent:= Self; AutoSize:= True; Caption:= rsOperWaitingForConnection + ' ' + UTF8Encode(UnicodeString(APath)); end; pbConnect:= TProgressBar.Create(Self); with pbConnect do begin Parent:= Self; Style:= pbstMarquee; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth:= Math.Max(280, Screen.Width div 4); end; btnAbort:= TBitBtn.Create(Self); with btnAbort do begin Parent:= Self; Kind:= bkAbort; Default:= True; Cancel:= True; AutoSize:= True; AnchorHorizontalCenterTo(Self); AnchorToNeighbour(akTop, 12, pbConnect); end; end; procedure TNetworkForm.ExecuteModal; begin repeat WidgetSet.AppProcessMessages; if Application.Terminated then begin ModalResult:= mrCancel; end; if ModalResult <> 0 then begin CloseModal; if ModalResult <> 0 then Break; end; with TNetworkThread(FThread) do begin if (FWaitConnect.WaitFor(1) <> wrTimeout) then begin ModalResult:= mrOK; Break; end; end; Application.Idle(True); until False; end; { TNetworkThread } procedure TNetworkThread.Execute; begin // Function WNetAddConnection2W works very slow // when the final character is a backslash ('\') ReturnValue:= WNetAddConnection2W(@NetResource, nil, nil, CONNECT_INTERACTIVE); FWaitConnect.SetEvent; FWaitFinish.WaitFor(INFINITE); end; constructor TNetworkThread.Create(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD); begin inherited Create(True); FreeOnTerminate:= True; FWaitFinish:= TSimpleEvent.Create; FWaitConnect:= TSimpleEvent.Create; ZeroMemory(@NetResource, SizeOf(TNetResourceW)); if Assigned(lpLocalName) then begin NetResource.lpLocalName:= StrNew(lpLocalName); end; if Assigned(lpRemoteName) then begin NetResource.lpRemoteName:= StrNew(lpRemoteName); end; NetResource.dwType:= dwType; end; destructor TNetworkThread.Destroy; begin FWaitFinish.Free; FWaitConnect.Free; StrDispose(NetResource.lpLocalName); StrDispose(NetResource.lpRemoteName); inherited Destroy; end; class function TNetworkThread.Connect(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD): Integer; var AStartTime: QWord; AThread: TNetworkThread; begin AThread:= TNetworkThread.Create(lpLocalName, lpRemoteName, dwType); with AThread do begin Start; AStartTime:= GetTickCount64; try while True do begin if (GetTickCount64 - AStartTime > 3000) then begin with TNetworkForm.Create(frmMain, AThread, lpRemoteName) do try if (ShowModal = mrOK) then Exit(ReturnValue) else begin Exit(ERROR_CANCELLED); end; finally Free; end; end; if (GetAsyncKeyStateEx(VK_ESCAPE)) then Exit(ERROR_CANCELLED); if (FWaitConnect.WaitFor(1) <> wrTimeout) then Exit(ReturnValue); end; finally FWaitFinish.SetEvent; end; end; end; class function TNetworkThread.Connect(lpLocalName, lpRemoteName: LPWSTR; dwType: DWORD; CheckOperationState: TThreadMethod): Integer; begin with TNetworkThread.Create(lpLocalName, lpRemoteName, dwType) do begin Start; try while True do begin if Assigned(CheckOperationState) then CheckOperationState else if (GetAsyncKeyStateEx(VK_ESCAPE)) then Exit(ERROR_CANCELLED); if (FWaitConnect.WaitFor(1) <> wrTimeout) then Exit(ReturnValue); end; finally FWaitFinish.SetEvent; end; end; end; end. doublecmd-1.1.30/src/platform/win/umywindows.pas0000644000175000001440000012607315104114162020740 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific WINDOWS functions. Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uMyWindows; {$mode objfpc}{$H+} interface uses Graphics, Classes, SysUtils, JwaWinType, JwaWinBase, JwaNative, Windows; const // STORAGE_BUS_TYPE BusTypeUnknown = $00; BusTypeUsb = $07; BusTypeSd = $0C; BusTypeMmc = $0D; function IsWow64: BOOL; procedure ShowWindowEx(hWnd: HWND); function FindMainWindow(ProcessId: DWORD): HWND; function GetMenuItemText(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UnicodeString; function GetMenuItemType(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UINT; function InsertMenuItemEx(hMenu, SubMenu: HMENU; Caption: PWideChar; Position, ItemID, ItemType : UINT; Bitmap:Graphics.TBitmap = nil): boolean; function RegReadKey(ARoot: HKEY; const APath, AName: UnicodeString; out AValue: UnicodeString): Boolean; {en Extracts volume GUID from a volume GUID path } function ExtractVolumeGUID(const VolumeName: UnicodeString): UnicodeString; {en Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder) @param(Path The string that contains the path of a mounted folder or a drive letter) @returns(Volume GUID path) } function GetMountPointVolumeName(const Path: UnicodeString): UnicodeString; {en Checks readiness of a drive @param(sDrv String specifying the root directory of a file system volume) @returns(The function returns @true if drive is ready, @false otherwise) } function mbDriveReady(const sDrv: String): Boolean; {en Get the label of a file system volume @param(sDrv String specifying the root directory of a file system volume) @param(bVolReal @true if it a real file system volume) @returns(The function returns volume label) } function mbGetVolumeLabel(const sDrv: String; const bVolReal: Boolean): String; {en Set the label of a file system volume @param(sRootPathName String specifying the root directory of a file system volume) @param(sVolumeName String specifying a new name for the volume) @returns(The function returns @true if successful, @false otherwise) } function mbSetVolumeLabel(sRootPathName, sVolumeName: String): Boolean; {en Wait for change disk label @param(sDrv String specifying the root directory of a file system volume) @param(sCurLabel Current volume label) } procedure mbWaitLabelChange(const sDrv: String; const sCurLabel: String); {en Close CD/DVD drive @param(sDrv String specifying the root directory of a drive) } procedure mbCloseCD(const sDrv: String); function mbGetDriveType(Drive: AnsiChar): UInt32; function mbDriveBusType(Drive: AnsiChar): UInt32; {en Get physical drive serial number } function mbGetDriveSerialNumber(Drive: AnsiChar): String; procedure mbDriveUnlock(const sDrv: String); {en Get remote file name by local file name @param(sLocalName String specifying the local file name) @returns(The function returns remote file name) } function mbGetRemoteFileName(const sLocalName: String): String; {en Retrieves the short path form of the specified path @param(sLongPath The path string) @param(sShortPath A string to receive the short form of the path that sLongPath specifies) @returns(The function returns @true if successful, @false otherwise) } function mbGetShortPathName(const sLongPath: String; var sShortPath: AnsiString): Boolean; {en Retrieves Network Error } function mbWinNetErrorMessage(dwError: DWORD): String; {en Retrieves the current status of the specified service } function GetServiceStatus(const AName: String): DWORD; {en The QueryDirectoryFile routine returns various kinds of information about files in the directory specified by a given file handle. } function QueryDirectoryFile(Handle: THandle; FileInfo: PVOID; FileInfoLength: ULONG; FileInfoClass: TFileInformationClass; ReturnSingleEntry: Boolean; const FileName: UnicodeString; RestartScan: Boolean): Boolean; {en Retrieves owner of the file (user and group). Both user and group contain computer name. @param(sPath Absolute path to the file. May be UNC path.) @param(sUser Returns user name of the file.) @param(sGroup Returns primary group of the file.) } function GetFileOwner(const sPath: String; out sUser, sGroup: String): Boolean; {en Retrieves a description of file's type. @param(sPath Absolute path to the file.) } function GetFileDescription(const sPath: String): String; {en Retrieves file system name of the volume that sRootPath points to. @param(sRootPath Root directory of the volume, for example C:\) } function mbGetFileSystem(const sRootPath: String): String; {en Retrieves the actual number of bytes of disk storage used to store a specified file. @param(FileName The name of the file.) } function mbGetCompressedFileSize(const FileName: String): Int64; {en Retrieves the time the file was changed. } function mbGetFileChangeTime(const FileName: String; out ChangeTime: TFileTime): Boolean; {en Determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyStateEx. } function GetAsyncKeyStateEx(vKey: Integer): Boolean; {en This routine returns @true if the caller's process is a member of the Administrators local group. @returns(The function returns @true if caller has Administrators local group, @false otherwise) } function IsUserAdmin: TDuplicates; {en This routine returns @true if the caller's process is running in the remote desktop session } function RemoteSession: Boolean; {en Get OneDrive folders } procedure GetOneDriveFolders(AList: TStringList); {en Creates windows shortcut file (.lnk) } procedure CreateShortcut(const Target, Shortcut: String); {en Extract file attributes from find data record. Removes reparse point attribute if a reparse point tag is not a name surrogate. @param(FindData Find data record from FindFirstFile/FindNextFile function.) } function ExtractFileAttributes(const FindData: TWin32FindDataW): DWORD; function CheckPhotosVersion(ABuild, ARevision: UInt16): Boolean; procedure UpdateEnvironment; procedure FixCommandLineToUTF8; implementation uses JwaNtStatus, ShellAPI, MMSystem, JwaWinNetWk, JwaWinUser, JwaVista, LazUTF8, SysConst, ActiveX, ShlObj, ComObj, DCWindows, DCConvertEncoding, DCOSUtils, Registry, uShellFolder, uShlObjAdditional; var Wow64DisableWow64FsRedirection: function(OldValue: PPointer): BOOL; stdcall; Wow64RevertWow64FsRedirection: function(OldValue: Pointer): BOOL; stdcall; type PHandleData = ^THandleData; THandleData = record ProcessId: DWORD; WindowHandle: HWND; end; function IsMainWindow(Handle: HWND): Boolean; begin Result:= (GetWindow(Handle, GW_OWNER) = 0) and IsWindowVisible(Handle); end; function EnumWindowsCallback(Handle: HWND; lParam: LPARAM): BOOL; stdcall; var ProcessId: DWORD = 0; Data: PHandleData absolute lParam; begin GetWindowThreadProcessId(Handle, @ProcessId); Result:= (Data^.ProcessId <> ProcessId) or (not IsMainWindow(Handle)); if not Result then Data^.WindowHandle:= Handle; end; procedure ShowWindowEx(hWnd: HWND); var Placement: TWindowPlacement; begin ZeroMemory(@Placement, SizeOf(TWindowPlacement)); Placement.length:= SizeOf(TWindowPlacement); GetWindowPlacement(hWnd, Placement); case (Placement.showCmd) of SW_SHOWMAXIMIZED: ShowWindow(hWnd, SW_SHOWMAXIMIZED); SW_SHOWMINIMIZED: ShowWindow(hWnd, SW_RESTORE); else ShowWindow(hWnd, SW_NORMAL); end; SetForegroundWindow(hWnd); end; function FindMainWindow(ProcessId: DWORD): HWND; var Data: THandleData; begin Data.WindowHandle:= 0; Data.ProcessId:= ProcessId; EnumWindows(@EnumWindowsCallback, {%H-}LPARAM(@Data)); Result:= Data.WindowHandle; end; function GetMenuItemText(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UnicodeString; var miiw: TMenuItemInfoW; wca: array[0..Pred(MAX_PATH)] of WideChar; begin Result:= EmptyWideStr; FillChar(miiw, SizeOf(TMenuItemInfoW), 0); with miiw do begin cbSize:= SizeOf(TMenuItemInfoW); fMask:= MIIM_FTYPE or MIIM_STRING; dwTypeData:= @wca[0]; cch:= MAX_PATH; end; if GetMenuItemInfoW(hMenu, uItem, fByPosition, miiw) then begin Result:= miiw.dwTypeData; end; end; function GetMenuItemType(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UINT; var miiw: TMenuItemInfoW; begin Result:= 0; FillChar(miiw, SizeOf(TMenuItemInfoW), 0); with miiw do begin cbSize:= SizeOf(TMenuItemInfoW); fMask:= MIIM_FTYPE; end; if GetMenuItemInfoW(hMenu, uItem, fByPosition, miiw) then begin Result:= miiw.fType; end; end; function InsertMenuItemEx(hMenu, SubMenu: HMENU; Caption: PWideChar; Position, ItemID, ItemType : UINT; Bitmap:Graphics.TBitmap): boolean; var mi: TMenuItemInfoW; begin FillChar(mi, SizeOf(mi), 0); with mi do begin cbSize := SizeOf(mi); case ItemType of MFT_SEPARATOR: begin fMask := MIIM_STATE or MIIM_TYPE or MIIM_ID; end; MFT_STRING: begin fMask := MIIM_BITMAP or MIIM_STRING or MIIM_SUBMENU or MIIM_ID; if BitMap<>nil then hbmpItem:=Bitmap.Handle; end; end; fType := ItemType; fState := MFS_ENABLED; wID := ItemID; hSubMenu := SubMenu; dwItemData := 0; dwTypeData := Caption; cch := SizeOf(Caption); end; Result := InsertMenuItemW(hMenu, Position, True, mi); end; function RegReadKey(ARoot: HKEY; const APath, AName: UnicodeString; out AValue: UnicodeString): Boolean; var AKey: HKEY = 0; dwSize: DWORD = MaxSmallint; begin Result:= RegOpenKeyExW(ARoot, PWideChar(APath), 0, KEY_READ, AKey) = ERROR_SUCCESS; if Result then begin SetLength(AValue, MaxSmallint); Result:= RegQueryValueExW(AKey, PWideChar(AName), nil, nil, PByte(AValue), @dwSize) = ERROR_SUCCESS; if Result then begin dwSize:= dwSize div SizeOf(WideChar); if (dwSize > 0) and (AValue[dwSize] = #0) then Dec(dwSize); SetLength(AValue, dwSize); end; RegCloseKey(AKey); end; end; function DisplayName(const wsDrv: UnicodeString): UnicodeString; var Index: Integer; SFI: TSHFileInfoW; begin FillChar(SFI, SizeOf(SFI), 0); if SHGetFileInfoW(PWideChar(wsDrv), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME) = 0 then Result:= EmptyWideStr else begin Result:= SFI.szDisplayName; Index:= Pos('(', Result); if Index > 1 then SetLength(Result, Index - 2); end; end; function ExtractVolumeGUID(const VolumeName: UnicodeString): UnicodeString; var I, J: LongInt; begin I:= Pos('{', VolumeName); J:= Pos('}', VolumeName); if (I = 0) or (J = 0) then Exit(EmptyWideStr); Result:= Copy(VolumeName, I, J - I + 1); end; function GetMountPointVolumeName(const Path: UnicodeString): UnicodeString; const MAX_VOLUME_NAME = 50; var wsPath: UnicodeString; wsVolumeName: array[0..Pred(MAX_VOLUME_NAME)] of WideChar; begin FillByte(wsVolumeName, MAX_VOLUME_NAME, 0); wsPath:= IncludeTrailingPathDelimiter(Path); if not GetVolumeNameForVolumeMountPointW(PWideChar(wsPath), wsVolumeName, MAX_VOLUME_NAME) then Result:= EmptyWideStr else Result:= UnicodeString(wsVolumeName); end; function mbDriveReady(const sDrv: String): Boolean; var NotUsed: DWORD = 0; wsDrv: UnicodeString; begin wsDrv:= CeUtf8ToUtf16(sDrv); Result:= GetVolumeInformationW(PWideChar(wsDrv), nil, 0, nil, NotUsed, NotUsed, nil, 0); end; function mbGetVolumeLabel(const sDrv: String; const bVolReal: Boolean): String; var dwDummy: DWORD = 0; wsDrv, wsResult: UnicodeString; wcName: array [0..MAX_PATH] of WideChar; begin wsDrv:= CeUtf8ToUtf16(sDrv); if not bVolReal then wsResult:= DisplayName(wsDrv) else begin wcName[0]:= #0; if GetVolumeInformationW(PWideChar(wsDrv), wcName, MAX_PATH, nil, dwDummy, dwDummy, nil, 0) then begin wsResult:= wcName; end else begin wsResult:= Default(UnicodeString); end; end; Result:= CeUtf16ToUtf8(wsResult); end; function mbSetVolumeLabel(sRootPathName, sVolumeName: String): Boolean; var wsRootPathName, wsVolumeName: UnicodeString; begin wsRootPathName:= CeUtf8ToUtf16(sRootPathName); wsVolumeName:= CeUtf8ToUtf16(sVolumeName); Result:= SetVolumeLabelW(PWChar(wsRootPathName), PWChar(wsVolumeName)); end; procedure mbWaitLabelChange(const sDrv: String; const sCurLabel: String); var st1, st2: String; begin if mbGetVolumeLabel(sDrv, True) = '' then Exit; st1:= TrimLeft(sCurLabel); st2:= st1; while st1 = st2 do st2:= mbGetVolumeLabel(sDrv, FALSE); end; procedure mbCloseCD(const sDrv: String); var OpenParms: MCI_OPEN_PARMSA; begin FillChar(OpenParms, SizeOf(OpenParms), 0); OpenParms.lpstrDeviceType:= 'CDAudio'; OpenParms.lpstrElementName:= PAnsiChar(ExtractFileDrive(sDrv)); mciSendCommandA(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD_PTR(@OpenParms)); mciSendCommandA(OpenParms.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0); mciSendCommandA(OpenParms.wDeviceID, MCI_CLOSE, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD_PTR(@OpenParms)); end; const IOCTL_STORAGE_QUERY_PROPERTY = $2D1400; type FILE_FS_DEVICE_INFORMATION = record DeviceType: ULONG; Characteristics: ULONG; end; STORAGE_PROPERTY_QUERY = record PropertyId: DWORD; QueryType: DWORD; AdditionalParameters: array[0..0] of Byte; end; STORAGE_DEVICE_DESCRIPTOR = record Version: DWORD; Size: DWORD; DeviceType: Byte; DeviceTypeModifier: Byte; RemovableMedia: Boolean; CommandQueueing: Boolean; VendorIdOffset: DWORD; ProductIdOffset: DWORD; ProductRevisionOffset: DWORD; SerialNumberOffset: DWORD; BusType: DWORD; RawPropertiesLength: DWORD; RawDeviceProperties: array[0..0] of Byte; end; function mbGetDriveType(Drive: AnsiChar): UInt32; var Handle: THandle; IoStatusBlock: IO_STATUS_BLOCK; VolumePath: UnicodeString = '\\.\X:'; FileFsDeviceInfo: FILE_FS_DEVICE_INFORMATION; begin Result:= 0; VolumePath[5] := WideChar(Drive); Handle:= CreateFileW(PWideChar(VolumePath), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if Handle <> INVALID_HANDLE_VALUE then begin if (NtQueryVolumeInformationFile(Handle, @IoStatusBlock, @FileFsDeviceInfo, SizeOf(FileFsDeviceInfo), FileFsDeviceInformation) = STATUS_SUCCESS) then begin Result:= FileFsDeviceInfo.Characteristics; end; CloseHandle(Handle); end; end; function mbDriveBusType(Drive: AnsiChar): UInt32; var Dummy: DWORD; Handle: THandle; Query: STORAGE_PROPERTY_QUERY; Descr: STORAGE_DEVICE_DESCRIPTOR; VolumePath: UnicodeString = '\\.\X:'; begin Result := BusTypeUnknown; VolumePath[5] := WideChar(Drive); Handle := CreateFileW(PWideChar(VolumePath), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if (Handle <> INVALID_HANDLE_VALUE) then begin ZeroMemory(@Query, SizeOf(STORAGE_PROPERTY_QUERY)); if (DeviceIoControl(Handle, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(STORAGE_PROPERTY_QUERY), @Descr, SizeOf(STORAGE_DEVICE_DESCRIPTOR), @Dummy, nil)) then begin Result := Descr.BusType; end; CloseHandle(Handle); end; end; function mbGetDriveSerialNumber(Drive: AnsiChar): String; var Handle: THandle; dwBytesReturned: DWORD; Query: STORAGE_PROPERTY_QUERY; ABuffer: array[0..4095] of Byte; VolumePath: UnicodeString = '\\.\X:'; Descr: STORAGE_DEVICE_DESCRIPTOR absolute ABuffer; begin Result:= EmptyStr; VolumePath[5] := WideChar(Drive); Handle:= CreateFileW(PWideChar(VolumePath), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if Handle <> INVALID_HANDLE_VALUE then begin ZeroMemory(@ABuffer[0], SizeOf(ABuffer)); ZeroMemory(@Query, SizeOf(STORAGE_PROPERTY_QUERY)); if DeviceIoControl(Handle, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(STORAGE_PROPERTY_QUERY), @ABuffer[0], SizeOf(ABuffer), @dwBytesReturned, nil) then begin if (Descr.SerialNumberOffset > 0) then Result := StrPas(PAnsiChar(@ABuffer[0] + Descr.SerialNumberOffset)); end; CloseHandle(Handle); end; end; function IsWow64: BOOL; const Wow64Process: TDuplicates = dupIgnore; var usMachine: USHORT; hModule: TLibHandle; IsWow64Process: function(hProcess: HANDLE; Wow64Process: PBOOL): BOOL; stdcall; IsWow64Process2: function(hProcess: HANDLE; pProcessMachine, pNativeMachine: PUSHORT): BOOL; stdcall; begin if (Wow64Process = dupIgnore) then begin Wow64Process:= dupError; hModule:= GetModuleHandle(Kernel32); Pointer(IsWow64Process2):= GetProcAddress(hModule, 'IsWow64Process2'); if Assigned(IsWow64Process2) then begin usMachine:= 0; if IsWow64Process2(GetCurrentProcess, @usMachine, nil) and (usMachine <> 0) then Wow64Process:= dupAccept; end else begin Pointer(IsWow64Process):= GetProcAddress(hModule, 'IsWow64Process'); if Assigned(IsWow64Process) then begin Result:= False; if IsWow64Process(GetCurrentProcess, @Result) and Result then Wow64Process:= dupAccept; end; end end; Result:= (Wow64Process = dupAccept); end; function Wow64DisableRedirection(OldValue: PPointer): BOOL; begin if (IsWow64 = False) then Result:= True else begin Result:= Wow64DisableWow64FsRedirection(OldValue); end; end; function Wow64RevertRedirection(OldValue: Pointer): BOOL; begin if (IsWow64 = False) then Result:= True else begin Result:= Wow64RevertWow64FsRedirection(OldValue); end; end; procedure ShellExecuteThread(Parameter : Pointer); var Result: DWORD = 0; OldValue: Pointer = nil; Status : BOOL absolute Result; lpExecInfo: LPShellExecuteInfoW absolute Parameter; begin if Wow64DisableRedirection(@OldValue) then begin CoInitializeEx(nil, COINIT_APARTMENTTHREADED); Status:= ShellExecuteExW(lpExecInfo); CoUninitialize(); Wow64RevertRedirection(OldValue); end; EndThread(Result); end; procedure mbDriveUnlock(const sDrv: String); const FVE_E_LOCKED_VOLUME = HRESULT($80310000); FVE_E_VOLUME_NOT_BOUND = HRESULT($80310017); var Msg: TMSG; LastError: HRESULT; ShellThread: TThread; wsDrive: UnicodeString; lpExecInfo: TShellExecuteInfoW; begin wsDrive:= CeUtf8ToUtf16(sDrv); if not GetDiskFreeSpaceExW(PWideChar(wsDrive), nil, nil, nil) then begin LastError:= GetLastError; if (LastError = FVE_E_LOCKED_VOLUME) or (LastError = FVE_E_VOLUME_NOT_BOUND) then begin ZeroMemory(@lpExecInfo, SizeOf(lpExecInfo)); lpExecInfo.cbSize:= SizeOf(lpExecInfo); lpExecInfo.fMask:= SEE_MASK_NOCLOSEPROCESS; lpExecInfo.lpFile:= PWideChar(wsDrive); lpExecInfo.lpVerb:= 'unlock-bde'; ShellThread:= TThread.ExecuteInThread(@ShellExecuteThread, @lpExecInfo); if (ShellThread.WaitFor <> 0) and (lpExecInfo.hProcess <> 0) then begin while (WaitForSingleObject(lpExecInfo.hProcess, 100) = WAIT_TIMEOUT) do begin if (GetAsyncKeyStateEx(VK_ESCAPE)) then begin TerminateProcess(lpExecInfo.hProcess, 1); Break; end; PeekMessageW({%H-}Msg, 0, 0, 0, PM_REMOVE); end; { if GetExitCodeProcess(lpExecInfo.hProcess, @LastError) then Result:= (LastError = 0); } CloseHandle(lpExecInfo.hProcess); end; end; end; end; function mbGetRemoteFileName(const sLocalName: String): String; var dwResult, lpBufferSize: DWORD; wsLocalName: UnicodeString; lpBuffer: PUniversalNameInfoW; begin Result:= sLocalName; wsLocalName:= CeUtf8ToUtf16(sLocalName); lpBufferSize:= SizeOf(TUniversalNameInfoW); GetMem(lpBuffer, lpBufferSize); try dwResult:= WNetGetUniversalNameW(PWideChar(wsLocalName), UNIVERSAL_NAME_INFO_LEVEL, lpBuffer, lpBufferSize); if dwResult = ERROR_MORE_DATA then begin lpBuffer:= ReallocMem(lpBuffer, lpBufferSize); dwResult:= WNetGetUniversalNameW(PWideChar(wsLocalName), UNIVERSAL_NAME_INFO_LEVEL, lpBuffer, lpBufferSize); end; if dwResult = NO_ERROR then Result:= UTF16ToUTF8(UnicodeString(lpBuffer^.lpUniversalName)); finally FreeMem(lpBuffer); end; end; function mbGetShortPathName(const sLongPath: String; var sShortPath: AnsiString): Boolean; var wsLongPath, wsShortPath: UnicodeString; cchBuffer: DWORD; begin Result:= False; wsLongPath:= UTF16LongName(sLongPath); cchBuffer:= GetShortPathNameW(PWideChar(wsLongPath), nil, 0); if cchBuffer = 0 then Exit; SetLength(wsShortPath, cchBuffer); cchBuffer:= GetShortPathNameW(PWideChar(wsLongPath), PWideChar(wsShortPath), cchBuffer); if cchBuffer <> 0 then begin sShortPath:= AnsiString(wsShortPath); Result:= True; end; end; function mbWinNetErrorMessage(dwError: DWORD): String; var dwWNetResult: DWORD; lpNameBuf: array [0..MAX_PATH] of WideChar; lpErrorBuf: array[0..maxSmallint] of WideChar; begin if dwError <> ERROR_EXTENDED_ERROR then Result:= SysErrorMessage(dwError) else begin dwWNetResult:= WNetGetLastErrorW(dwError, lpErrorBuf, maxSmallint, lpNameBuf, MAX_PATH); if (dwWNetResult <> NO_ERROR) then Result:= SysErrorMessage(dwWNetResult) else begin Result:= UTF16ToUTF8(UnicodeString(lpErrorBuf)); end; end; if (Length(Result) = 0) then Result:= Format(SUnknownErrorCode, [dwError]); end; function GetServiceStatus(const AName: String): DWORD; var hSCManager, hService: SC_HANDLE; lpServiceStatus: TServiceStatus; begin hSCManager:= OpenSCManagerW(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); if (hSCManager = 0) then Exit(0); try hService:= OpenServiceW(hSCManager, PWideChar(CeUtf8ToUtf16(AName)), SERVICE_QUERY_STATUS); if (hService = 0) then Exit(0); if not QueryServiceStatus(hService, {%H-}lpServiceStatus) then Result:= 0 else begin Result:= lpServiceStatus.dwCurrentState; end; CloseServiceHandle(hService); finally CloseServiceHandle(hSCManager); end; end; function NtQueryDirectoryFile(FileHandle: HANDLE; Event: HANDLE; ApcRoutine: PIO_APC_ROUTINE; ApcContext: PVOID; IoStatusBlock: PIO_STATUS_BLOCK; FileInformation: PVOID; FileInformationLength: ULONG; FileInformationClass: ULONG; ReturnSingleEntry: BOOLEAN; FileName: PUNICODE_STRING; RestartScan: BOOLEAN): NTSTATUS; stdcall; external ntdll; function QueryDirectoryFile(Handle: THandle; FileInfo: PVOID; FileInfoLength: ULONG; FileInfoClass: TFileInformationClass; ReturnSingleEntry: Boolean; const FileName: UnicodeString; RestartScan: Boolean): Boolean; var Status: NTSTATUS; PFileName: PUnicodeString; AFileName: TUnicodeString; IoStatusBlock: TIoStatusBlock; begin if Length(FileName) = 0 then PFileName:= nil else begin PFileName:= @AFileName; AFileName.Buffer:= PWideChar(FileName); AFileName.Length:= Length(FileName) * SizeOf(WideChar); AFileName.MaximumLength:= AFileName.Length; end; Status:= NtQueryDirectoryFile(Handle, 0, nil, nil, @IoStatusBlock, FileInfo, FileInfoLength, ULONG(FileInfoClass), ReturnSingleEntry, PFileName, RestartScan); if (Status <> STATUS_SUCCESS) then SetLastError(RtlNtStatusToDosError(Status)); Result:= (Status = STATUS_SUCCESS) and (IoStatusBlock.Information > 0); end; function GetFileOwner(const sPath: String; out sUser, sGroup: String): Boolean; var wsMachineName: UnicodeString; function SidToDisplayString(sid: PSID; sidType: SID_NAME_USE): String; var pName: PWideChar = nil; pDomain: PWideChar = nil; NameLen: DWORD = 0; DomainLen: DWORD = 0; begin // We're expecting insufficient buffer error here. if (LookupAccountSidW(PWideChar(wsMachineName), sid, nil, @NameLen, nil, @DomainLen, @SidType) = False) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin pName := Getmem(NameLen * SizeOf(WideChar)); pDomain := Getmem(DomainLen * SizeOf(WideChar)); if Assigned(pName) and Assigned(pDomain) and LookupAccountSidW(PWideChar(wsMachineName), sid, pName, @NameLen, pDomain, @DomainLen, @SidType) then begin if pDomain[0] <> #0 then Result := UTF16ToUTF8(UnicodeString(pDomain) + PathDelim + UnicodeString(pName)) else Result := UTF16ToUTF8(UnicodeString(pName)); end else Result := EmptyStr; Freemem(pName); Freemem(pDomain); end else Result := EmptyStr; end; // From UNC name extracts computer name. function GetMachineName(wPathName: LPCWSTR): UnicodeString; var lpMachineName, lpMachineNameNext: PWideChar; begin lpMachineName := PathFindNextComponentW(wPathName); if Assigned(lpMachineName) then begin lpMachineNameNext := PathFindNextComponentW(lpMachineName); if Assigned(lpMachineNameNext) then SetString(Result, lpMachineName, lpMachineNameNext - lpMachineName - 1) else Result := lpMachineName; end else Result := EmptyWideStr; end; var wszUNCPathName: array[0..32767] of WideChar; wsPathName: UnicodeString; pSecurityDescriptor: PSECURITY_DESCRIPTOR = nil; pOwnerSid: PSID = nil; pUNI: PUniversalNameInfoW; bDefault: Boolean; dwBufferSize: DWORD = 0; dwSizeNeeded: DWORD = 0; begin Result := False; if Length(sPath) = 0 then Exit; try wsPathName := CeUtf8ToUtf16(sPath); // Check if the path is to remote share and get remote machine name. if PathIsUNCW(PWideChar(wsPathName)) then begin // Path is in full UNC format. wsMachineName := GetMachineName(PWideChar(wsPathName)); end else begin // Check if local path is mapped to network share. dwBufferSize := SizeOf(wszUNCPathName); pUNI := PUniversalNameInfoW(@wszUNCPathName[0]); if WNetGetUniversalNameW(PWideChar(wsPathName), UNIVERSAL_NAME_INFO_LEVEL, pUNI, dwBufferSize) = NO_ERROR then begin wsMachineName := GetMachineName(pUNI^.lpUniversalName); end; // else not a network share, no network connection, etc. end; { Get security descriptor. } // We're expecting insufficient buffer error here. if (GetFileSecurityW(PWideChar(wsPathName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION, nil, 0, @dwSizeNeeded) <> False) or (GetLastError <> ERROR_INSUFFICIENT_BUFFER) or (dwSizeNeeded = 0) then begin Exit; end; pSecurityDescriptor := GetMem(dwSizeNeeded); if not Assigned(pSecurityDescriptor) then Exit; if not GetFileSecurityW(PWideChar(wsPathName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION, pSecurityDescriptor, dwSizeNeeded, @dwSizeNeeded) then begin Exit; end; { Get Owner and Group. } if GetSecurityDescriptorOwner(pSecurityDescriptor, pOwnerSid, @bDefault) then sUser := SidToDisplayString(pOwnerSid, SidTypeUser) else sUser := EmptyStr; if GetSecurityDescriptorGroup(pSecurityDescriptor, pOwnerSid, @bDefault) then sGroup := SidToDisplayString(pOwnerSid, SidTypeGroup) else sGroup := EmptyStr; Result := True; finally if Assigned(pSecurityDescriptor) then Freemem(pSecurityDescriptor); end; end; function GetFileDescription(const sPath: String): String; var SFI: TSHFileInfoW; begin FillChar(SFI, SizeOf(SFI), 0); if SHGetFileInfoW(PWideChar(CeUtf8ToUtf16(sPath)), 0, SFI, SizeOf(SFI), SHGFI_TYPENAME) <> 0 then Result := UTF16ToUTF8(UnicodeString(SFI.szTypeName)) else Result := EmptyStr; end; function mbGetFileSystem(const sRootPath: String): String; var Buf: array [0..MAX_PATH] of WideChar; NotUsed: DWORD = 0; begin // Available since Windows XP. if ((Win32MajorVersion > 5) or ((Win32MajorVersion = 5) and (Win32MinorVersion >= 1))) and GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(sRootPath)), nil, 0, nil, NotUsed, NotUsed, Buf, SizeOf(Buf)) then begin Result:= UTF16ToUTF8(UnicodeString(Buf)); end else Result := EmptyStr; end; function mbGetCompressedFileSize(const FileName: String): Int64; begin Int64Rec(Result).Lo:= GetCompressedFileSizeW(PWideChar(UTF16LongName(FileName)), @Int64Rec(Result).Hi); end; function mbGetFileChangeTime(const FileName: String; out ChangeTime: TFileTime): Boolean; var Handle: System.THandle; IoStatusBlock : TIoStatusBlock; FileInformation: TFileBasicInformation; begin Handle:= CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if Handle = INVALID_HANDLE_VALUE then Exit(False); Result:= NtQueryInformationFile(Handle, @IoStatusBlock, @FileInformation, SizeOf(FileInformation), FileBasicInformation) = 0; CloseHandle(Handle); ChangeTime:= TFileTime(FileInformation.ChangeTime); end; function GetAsyncKeyStateEx(vKey: Integer): Boolean; var Handle: HWND; dwProcessId: DWORD = 0; begin if (GetAsyncKeyState(vKey) < 0) then begin Handle:= GetForegroundWindow; if (Handle <> 0) then begin GetWindowThreadProcessId(Handle, @dwProcessId); Exit(GetCurrentProcessId = dwProcessId); end; end; Result:= False; end; function SHGetValueW(hkey: HKEY; pszSubKey, pszValue: LPCWSTR; pdwType: PDWORD; pvData: LPVOID; pcbData: PDWORD): DWORD; stdcall; external 'shlwapi.dll'; function IsUserAdmin: TDuplicates; const SYSTEM = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'; var Success: Boolean; dwValue: DWORD = 0; ReturnLength: DWORD = 0; dwType: DWORD = REG_DWORD; dwValueSize: DWORD = SizeOf(DWORD); TokenHandle: HANDLE = INVALID_HANDLE_VALUE; TokenInformation: array [0..1023] of Byte; ElevationType: JwaVista.TTokenElevationType absolute TokenInformation; begin if (Win32MajorVersion < 6) then Exit(dupIgnore); Success:= OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, TokenHandle); if not Success then begin if GetLastError = ERROR_NO_TOKEN then Success:= OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle); end; if Success then begin Success:= GetTokenInformation(TokenHandle, Windows.TTokenInformationClass(TokenElevationType), @TokenInformation, SizeOf(TokenInformation), ReturnLength); CloseHandle(TokenHandle); if Success then begin case ElevationType of // The token is an elevated token. (Administrator) TokenElevationTypeFull: Result:= dupAccept; // The token is a limited token. (User) TokenElevationTypeLimited: Result:= dupError; // The token does not have a linked token. (UAC disabled or standard user) TokenElevationTypeDefault: begin if (SHGetValueW( HKEY_LOCAL_MACHINE, SYSTEM, 'EnableLUA', @dwType, @dwValue, @dwValueSize) <> ERROR_SUCCESS) then begin Exit(dupError); end; if (dwValue > 0) then begin if (SHGetValueW( HKEY_LOCAL_MACHINE, SYSTEM, 'ConsentPromptBehaviorUser', @dwType, @dwValue, @dwValueSize) <> ERROR_SUCCESS) then begin Exit(dupError); end; end; if (dwValue > 0) then Result:= dupError else begin Result:= dupIgnore; end; end; end; end; end; if not Success then Result:= dupError; end; function RemoteSession: Boolean; const GLASS_SESSION_ID = 'GlassSessionId'; TERMINAL_SERVER_KEY = 'SYSTEM\CurrentControlSet\Control\Terminal Server\'; var dwType: DWORD; lResult: LONG; AKey: HKEY = 0; dwGlassSessionId, cbGlassSessionId, dwCurrentSessionId: DWORD; ProcessIdToSessionId: function(dwProcessId: DWORD; pSessionId: PDWORD): BOOL; stdcall; begin Result:= False; if (GetSystemMetrics(SM_REMOTESESSION) <> 0) then begin Result:= True; end else if (Win32MajorVersion > 5) then begin Pointer(ProcessIdToSessionId):= GetProcAddress(GetModuleHandle(Kernel32), 'ProcessIdToSessionId'); if Assigned(ProcessIdToSessionId) then begin lResult:= RegOpenKeyEx(HKEY_LOCAL_MACHINE, TERMINAL_SERVER_KEY, 0, KEY_READ, AKey); if (lResult = ERROR_SUCCESS) then begin cbGlassSessionId:= SizeOf(dwGlassSessionId); lResult:= RegQueryValueEx(AKey, GLASS_SESSION_ID, nil, @dwType, @dwGlassSessionId, @cbGlassSessionId); if (lResult = ERROR_SUCCESS) then begin if (ProcessIdToSessionId(GetCurrentProcessId(), @dwCurrentSessionId)) then begin Result:= (dwCurrentSessionId <> dwGlassSessionId); end; end; RegCloseKey(AKey); end; end; end; end; procedure GetOneDriveFolders(AList: TStringList); var APath: String; Index: Integer; Value: UnicodeString; List: TUnicodeStringArray; begin AList.CaseSensitive:= FileNameCaseSensitive; if GetKnownFolderPath(FOLDERID_SkyDrive, APath) then begin if (Length(APath) > 0) then AList.Add(APath); end; APath:= mbGetEnvironmentVariable('OneDriveConsumer'); if (Length(APath) > 0) and (AList.IndexOf(APath) < 0) then begin AList.Add(APath); end; APath:= mbGetEnvironmentVariable('OneDriveCommercial'); if (Length(APath) > 0) and (AList.IndexOf(APath) < 0) then begin AList.Add(APath); end; with TRegistry.Create(KEY_READ) do try RootKey:= HKEY_CURRENT_USER; if OpenKey('Software\SyncEngines\Providers\OneDrive', False) then begin try List:= GetKeyNames; for Index:= 0 to High(List) do begin if OpenKey(List[Index], False) then begin try Value:= ReadString(UnicodeString('MountPoint')); if Length(Value) > 0 then begin APath:= CeUtf16ToUtf8(Value); if (AList.IndexOf(APath) < 0) then begin AList.Add(APath); end; end; except // Ignore end; CloseKey; end; end; except // Ignore end; CloseKey; end; finally Free; end; end; procedure CreateShortcut(const Target, Shortcut: String); var IObject: IUnknown; ISLink: IShellLinkW; IPFile: IPersistFile; LinkName: WideString; TargetArguments: WideString; begin TargetArguments:= EmptyWideStr; { Creates an instance of IShellLink } IObject := CreateComObject(CLSID_ShellLink); IPFile := IObject as IPersistFile; ISLink := IObject as IShellLinkW; OleCheckUTF8(ISLink.SetPath(PWideChar(CeUtf8ToUtf16(Target)))); OleCheckUTF8(ISLink.SetArguments(PWideChar(TargetArguments))); OleCheckUTF8(ISLink.SetWorkingDirectory(PWideChar(CeUtf8ToUtf16(ExtractFilePath(Target))))); { Get the desktop location } LinkName := CeUtf8ToUtf16(Shortcut); if LowerCase(ExtractFileExt(LinkName)) <> '.lnk' then LinkName := LinkName + '.lnk'; { Create the link } OleCheckUTF8(IPFile.Save(PWideChar(LinkName), False)); end; function ExtractFileAttributes(const FindData: TWin32FindDataW): DWORD; inline; begin // If a reparse point tag is not a name surrogate then remove reparse point attribute // Fixes bug: http://doublecmd.sourceforge.net/mantisbt/view.php?id=531 if (FindData.dwFileAttributes and FILE_ATTRIBUTE_REPARSE_POINT <> 0) and (FindData.dwReserved0 and $20000000 = 0) then Result:= FindData.dwFileAttributes - FILE_ATTRIBUTE_REPARSE_POINT else Result:= FindData.dwFileAttributes; end; procedure UpdateEnvironment; var dwSize: DWORD; ASysPath: UnicodeString; AUserPath: UnicodeString; APath: UnicodeString = ''; begin // System environment if RegReadKey(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Control\Session Manager\Environment', 'Path', ASysPath) then begin APath := ASysPath; if (Length(APath) > 0) and (APath[Length(APath)] <> PathSeparator) then APath += PathSeparator; end; // User environment if RegReadKey(HKEY_CURRENT_USER, 'Environment', 'Path', AUserPath) then begin APath := APath + AUserPath; if (Length(APath) > 0) and (APath[Length(APath)] <> PathSeparator) then APath += PathSeparator; end; // Update path environment variable if Length(APath) > 0 then begin SetLength(ASysPath, MaxSmallInt + 1); dwSize:= ExpandEnvironmentStringsW(PWideChar(APath), PWideChar(ASysPath), MaxSmallInt); if (dwSize = 0) or (dwSize > MaxSmallInt) then ASysPath:= APath else begin SetLength(ASysPath, dwSize - 1); end; SetEnvironmentVariableW('Path', PWideChar(ASysPath)); end; end; procedure FixCommandLineToUTF8; var I, nArgs: Integer; sTemp: String; szArgList: PPWideChar; pwcCommandLine: PWideChar; lpFileName: array[0..Pred(MaxSmallInt)] of WideChar; begin {$IF DEFINED(FPC_HAS_CPSTRING)} if DefaultSystemCodePage = CP_UTF8 then Exit; {$ENDIF} pwcCommandLine:= GetCommandLineW(); for I:= 0 to lstrlenW(pwcCommandLine) - 1 do begin if (pwcCommandLine[I] = PathDelim) and (pwcCommandLine[I + 1] = '"') then begin pwcCommandLine[I]:= '"'; pwcCommandLine[I + 1]:= #32; end; end; szArgList:= CommandLineToArgvW(pwcCommandLine, @nArgs); if Assigned(szArgList) then begin if (nArgs > argc) then begin SysReAllocMem(argv, nArgs * SizeOf(Pointer)); FillChar(argv[argc], (nArgs - argc) * Sizeof(Pointer), #0); argc:= nArgs; end; // Special case for ParamStr(0) I:= GetModuleFileNameW(0, lpFileName, MaxSmallInt); lpFileName[I]:= #0; // to be safe sTemp:= UTF16ToUTF8(UnicodeString(lpFileName)); SysReAllocMem(argv[0], Length(sTemp) + 1); StrPCopy(argv[0], sTemp); // Process all other parameters for I:= 1 to nArgs - 1 do begin sTemp:= UTF16ToUTF8(UnicodeString(szArgList[I])); SysReAllocMem(argv[I], Length(sTemp) + 1); StrPCopy(argv[I], sTemp); end; LocalFree(HLOCAL(szArgList)); end; end; type PACKAGE_INFO_REFERENCE = record reserved: PVOID; end; PPACKAGE_INFO_REFERENCE = ^PACKAGE_INFO_REFERENCE; PACKAGE_VERSION = record case Boolean of False: ( Version: UINT64; ); True: ( Revision: USHORT; Build: USHORT; Minor: USHORT; Major: USHORT; ); end; PACKAGE_ID = record reserved: UINT32; processorArchitecture: UINT32; version: PACKAGE_VERSION; name: PWSTR; publisher: PWSTR; resourceId: PWSTR; publisherId: PWSTR; end; PACKAGE_INFO = record reserved: UINT32; flags: UINT32; path: PWSTR; packageFullName: PWSTR; packageFamilyName: PWSTR; packageId: PACKAGE_ID; end; PPACKAGE_INFO = ^PACKAGE_INFO; var OpenPackageInfoByFullName: function(packageFullName: PCWSTR; const reserved: UINT32; packageInfoReference: PPACKAGE_INFO_REFERENCE): LONG; stdcall; GetPackagesByPackageFamily: function(packageFamilyName: PCWSTR; count: PUINT32; packageFullNames: PPWideChar; bufferLength: PUINT32; buffer: PWCHAR): LONG; stdcall; GetPackageInfo: function(packageInfoReference: PACKAGE_INFO_REFERENCE; const flags: UINT32; bufferLength: PUINT32; buffer: PBYTE; count: PUINT32): LONG; stdcall; ClosePackageInfo: function(packageInfoReference: PACKAGE_INFO_REFERENCE): LONG; stdcall; function GetPackageVersion(const Package: UnicodeString; out Build, Revision: UInt16): Boolean; var Ret: ULONG; Count: UINT32 = 0; PackageBuffer: TBytes; BufferLength: UINT32 = 0; Buffer: array of WideChar; P: PACKAGE_INFO_REFERENCE; PackageFullNames: array of PWideChar; begin Result:= False; Ret:= GetPackagesByPackageFamily(PWideChar(Package), @Count, nil, @BufferLength, nil); if Ret = ERROR_INSUFFICIENT_BUFFER then begin SetLength(PackageFullNames, Count); SetLength(Buffer, BufferLength + 1); Ret:= GetPackagesByPackageFamily(PWideChar(Package), @Count, @PackageFullNames[0], @BufferLength, @Buffer[0]); if Ret = ERROR_SUCCESS then begin if OpenPackageInfoByFullName(PackageFullNames[0], 0, @P) = ERROR_SUCCESS then begin Count:= 0; BufferLength:= 0; Ret:= GetPackageInfo(P, 0, @BufferLength, nil, @Count); if Ret = ERROR_INSUFFICIENT_BUFFER then begin SetLength(PackageBuffer, BufferLength); if GetPackageInfo(P, 0, @BufferLength, @PackageBuffer[0], @Count) = ERROR_SUCCESS then begin with PPACKAGE_INFO(@PackageBuffer[0])^.packageId do begin Result:= True; Build:= version.Build; Revision:= version.Revision; end; end; end; ClosePackageInfo(P); end; end; end; end; function CheckPhotosVersion(ABuild, ARevision: UInt16): Boolean; const Build: UInt16 = 0; Revision: UInt16 = 0; PhotosNew: TDuplicates = dupIgnore; begin if (PhotosNew = dupIgnore) then begin if GetPackageVersion('Microsoft.Windows.Photos_8wekyb3d8bbwe', Build, Revision) then PhotosNew:= dupAccept else begin PhotosNew:= dupError; end; end; Result:= (PhotosNew = dupAccept) and ((Build > ABuild) or ((Build = ABuild) and (Revision >= ARevision))); end; var hModule: TLibHandle; initialization if (IsWow64) then begin hModule:= GetModuleHandle(Kernel32); Pointer(Wow64DisableWow64FsRedirection):= GetProcAddress(hModule, 'Wow64DisableWow64FsRedirection'); Pointer(Wow64RevertWow64FsRedirection):= GetProcAddress(hModule, 'Wow64RevertWow64FsRedirection'); end; if CheckWin32Version(10) then begin hModule:= GetModuleHandle(Kernel32); Pointer(GetPackageInfo):= GetProcAddress(hModule, 'GetPackageInfo'); Pointer(ClosePackageInfo):= GetProcAddress(hModule, 'ClosePackageInfo'); Pointer(OpenPackageInfoByFullName):= GetProcAddress(hModule, 'OpenPackageInfoByFullName'); Pointer(GetPackagesByPackageFamily):= GetProcAddress(hModule, 'GetPackagesByPackageFamily'); end; end. doublecmd-1.1.30/src/platform/win/ulistgetpreviewbitmap.pas0000644000175000001440000000437015104114162023145 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Lister plugins thumbnail provider Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uListGetPreviewBitmap; {$mode objfpc}{$H+} interface uses Classes, SysUtils, WlxPlugin; implementation uses Types, Graphics, DCOSUtils, uThumbnails, uWlxModule, uBitmap, uGlobs; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; const MAX_LEN = 8192; var Data: String; Index: Integer; Bitmap: HBITMAP; Handle: THandle; Module: TWlxModule; begin if gWLXPlugins.Count = 0 then Exit(nil); SetLength(Data, MAX_LEN); Handle:= mbFileOpen(aFileName, fmOpenRead or fmShareDenyNone); if (Handle = feInvalidHandle) then Exit(nil); Index:= FileRead(Handle, Data[1], MAX_LEN); if Index >= 0 then SetLength(Data, Index); FileClose(Handle); for Index:= 0 to gWLXPlugins.Count - 1 do begin Module:= gWLXPlugins.GetWlxModule(Index); if Module.FileParamVSDetectStr(aFileName, True) then begin if (Module.IsLoaded or Module.LoadModule) and Module.CanPreview then begin Bitmap:= Module.CallListGetPreviewBitmap(aFileName, aSize.cx, aSize.cy, Data); if Bitmap <> 0 then begin Result:= BitmapCreateFromHBITMAP(Bitmap); Exit; end; end; end; end; Result:= nil; end; initialization TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-1.1.30/src/platform/win/ulibrarypath.pas0000644000175000001440000000127415104114162021214 0ustar alexxusersunit uLibraryPath; {$mode delphi} interface implementation uses Windows, SysUtils; procedure Initialize; var Handle: TLibHandle; FileName: UnicodeString; AddDllDirectory: function(NewDirectory: PCWSTR): Pointer; stdcall; begin if (Win32MajorVersion > 5) then begin Handle:= GetModuleHandleW(Kernel32); @AddDllDirectory:= GetProcAddress(Handle, 'AddDllDirectory'); if Assigned(AddDllDirectory) then begin SetLength(FileName, MaxSmallint + 1); SetLength(FileName, GetModuleFileNameW(0, PWideChar(FileName), MaxSmallint)); AddDllDirectory(PWideChar(ExtractFilePath(FileName) + 'plugins\dll')); end; end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/win/uimport.pas0000644000175000001440000001064715104114162020211 0ustar alexxusersunit uImport; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows; function FindImportLibrary(hModule: THandle; pLibName: PAnsiChar): PPointer; function FindImportFunction(pLibrary: PPointer; pFunction: Pointer): PPointer; function ReplaceImportFunction(pOldFunction: PPointer; pNewFunction: Pointer): Pointer; function FindDelayImportLibrary(hModule: THandle; pLibName: PAnsiChar): Pointer; function FindDelayImportFunction(hModule: THandle; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; pFuncName: PAnsiChar): PPointer; procedure ReplaceDelayImportFunction(hModule: THandle; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; pFuncName: PAnsiChar; pNewFunction: Pointer); implementation type {$IFDEF WIN64} PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS64; {$ELSE} PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32; {$ENDIF} function FindImageDirectory(hModule: THandle; Index: Integer; out DataDir: PIMAGE_DATA_DIRECTORY): Pointer; var pNTHeaders: PIMAGE_NT_HEADERS; pModule: PByte absolute hModule; pDosHeader: PIMAGE_DOS_HEADER absolute hModule; begin if pDosHeader^.e_magic = IMAGE_DOS_SIGNATURE then begin pNTHeaders := @pModule[pDosHeader^.e_lfanew]; if pNTHeaders^.Signature = IMAGE_NT_SIGNATURE then begin DataDir := @pNTHeaders^.OptionalHeader.DataDirectory[Index]; Result := @pModule[DataDir^.VirtualAddress]; Exit; end; end; Result := nil; end; function FindImportLibrary(hModule: THandle; pLibName: PAnsiChar): PPointer; var pEnd: PByte; pImpDir: PIMAGE_DATA_DIRECTORY; pImpDesc: PIMAGE_IMPORT_DESCRIPTOR; pModule: PAnsiChar absolute hModule; begin pImpDesc := FindImageDirectory(hModule, IMAGE_DIRECTORY_ENTRY_IMPORT, pImpDir); if pImpDesc = nil then Exit(nil); pEnd := PByte(pImpDesc) + pImpDir^.Size; while (PByte(pImpDesc) < pEnd) and (pImpDesc^.FirstThunk <> 0) do begin if StrIComp(@pModule[pImpDesc^.Name], pLibName) = 0 then begin Result := @pModule[pImpDesc^.FirstThunk]; Exit; end; Inc(pImpDesc); end; Result := nil; end; function FindImportFunction(pLibrary: PPointer; pFunction: Pointer): PPointer; begin while Assigned(pLibrary^) do begin if pLibrary^ = pFunction then Exit(pLibrary); Inc(pLibrary); end; Result := nil; end; function ReplaceImportFunction(pOldFunction: PPointer; pNewFunction: Pointer): Pointer; var dwOldProtect: DWORD = 0; begin if VirtualProtect(pOldFunction, SizeOf(Pointer), PAGE_READWRITE, dwOldProtect) then begin Result := pOldFunction^; pOldFunction^ := pNewFunction; VirtualProtect(pOldFunction, SizeOf(Pointer), dwOldProtect, dwOldProtect); end; end; function FindDelayImportLibrary(hModule: THandle; pLibName: PAnsiChar): Pointer; var pEnd: PByte; pImpDir: PIMAGE_DATA_DIRECTORY; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; pModule: PAnsiChar absolute hModule; begin pImpDesc := FindImageDirectory(hModule, IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT, pImpDir); if pImpDesc = nil then Exit(nil); pEnd := PByte(pImpDesc) + pImpDir^.Size; while (PByte(pImpDesc) < pEnd) and (pImpDesc^.DllNameRVA > 0) do begin if StrIComp(@pModule[pImpDesc^.DllNameRVA], pLibName) = 0 then Exit(pImpDesc); Inc(pImpDesc); end; Result := nil; end; function FindDelayImportFunction(hModule: THandle; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; pFuncName: PAnsiChar): PPointer; var pImpName: PIMAGE_IMPORT_BY_NAME; pImgThunkName: PIMAGE_THUNK_DATA; pImgThunkAddr: PIMAGE_THUNK_DATA; pModule: PAnsiChar absolute hModule; begin pImgThunkName:= @pModule[pImpDesc^.ImportNameTableRVA]; pImgThunkAddr:= @pModule[pImpDesc^.ImportAddressTableRVA]; while (pImgThunkName^.u1.Ordinal <> 0) do begin if not (IMAGE_SNAP_BY_ORDINAL(pImgThunkName^.u1.Ordinal)) then begin pImpName:= @pModule[pImgThunkName^.u1.AddressOfData]; if (StrIComp(pImpName^.Name, pFuncName) = 0) then Exit(PPointer(@pImgThunkAddr^.u1._Function)); end; Inc(pImgThunkName); Inc(pImgThunkAddr); end; Result:= nil; end; procedure ReplaceDelayImportFunction(hModule: THandle; pImpDesc: PIMAGE_DELAYLOAD_DESCRIPTOR; pFuncName: PAnsiChar; pNewFunction: Pointer); var pOldFunction: PPointer; begin pOldFunction:= FindDelayImportFunction(hModule, pImpDesc, pFuncName); if Assigned(pOldFunction) then ReplaceImportFunction(pOldFunction, pNewFunction); end; end. doublecmd-1.1.30/src/platform/win/ugdiplusjpeg.pas0000644000175000001440000000411615104114162021206 0ustar alexxusersunit uGdiPlusJPEG; {$mode delphi} interface uses Classes, SysUtils, FPImage, Graphics, IntfGraphics; type { TGdiPlusReaderJPEG } TGdiPlusReaderJPEG = class(TFPCustomImageReader) private FGrayscale: Boolean; protected procedure InternalRead(Str: TStream; Img: TFPCustomImage); override; function InternalCheck(Str: TStream): boolean; override; end; { TGdiPlusJPEGImage } TGdiPlusJPEGImage = class(TJPEGImage) protected procedure InitializeReader({%H-}AImage: TLazIntfImage; {%H-}AReader: TFPCustomImageReader); override; procedure FinalizeReader({%H-}AReader: TFPCustomImageReader); override; class function GetReaderClass: TFPCustomImageReaderClass; override; end; implementation uses GraphType, LCLStrConsts, SysConst, DCOSUtils, uGdiPlus; { TGdiPlusJPEGImage } procedure TGdiPlusJPEGImage.InitializeReader(AImage: TLazIntfImage; AReader: TFPCustomImageReader); begin end; procedure TGdiPlusJPEGImage.FinalizeReader(AReader: TFPCustomImageReader); begin PBoolean(@GrayScale)^ := TGdiPlusReaderJPEG(AReader).FGrayScale; end; class function TGdiPlusJPEGImage.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TGdiPlusReaderJPEG; end; { TGdiPlusReaderJPEG } procedure TGdiPlusReaderJPEG.InternalRead(Str: TStream; Img: TFPCustomImage); var Result: GPSTATUS; PixelFormat: GPPIXELFORMAT; begin Result:= GdiPlusLoadFromStream(Str, Img, PixelFormat); if (Result <> Ok) then raise Exception.CreateFmt(SUnknownErrorCode, [Result]); FGrayScale:= (PixelFormat = PixelFormat16bppGrayScale); end; function TGdiPlusReaderJPEG.InternalCheck(Str: TStream): boolean; begin Result:= TJpegImage.IsStreamFormatSupported(Str); end; procedure Initialize; begin if IsGdiPlusLoaded then try // Replace image handler GraphicFilter(TJPEGImage); TPicture.UnregisterGraphicClass(TJPEGImage); TPicture.RegisterFileFormat(TJpegImage.GetFileExtensions, rsJpeg, TGdiPlusJPEGImage); except // Skip end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/win/ugdiplus.pas0000644000175000001440000003776415104114162020357 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains some GDI+ API functions Copyright (C) 2008-2020 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGdiPlus; {$mode delphi} {$pointermath on} interface uses Windows, ActiveX, FPImage, Classes; type GPSTATUS = ( Ok, GenericError, InvalidParameter, OutOfMemory, ObjectBusy, InsufficientBuffer, NotImplemented, Win32Error, WrongState, Aborted, FileNotFound, ValueOverflow, AccessDenied, UnknownImageFormat, FontFamilyNotFound, FontStyleNotFound, NotTrueTypeFont, UnsupportedGdiplusVersion, GdiplusNotInitialized, PropertyNotFound, PropertyNotSupported ); GpColorAdjustType = ( ColorAdjustTypeDefault = 0, ColorAdjustTypeBitmap = 1, ColorAdjustTypeBrush = 2, ColorAdjustTypePen = 3, ColorAdjustTypeText = 4, ColorAdjustTypeCount = 5, ColorAdjustTypeAny = 6 ); GpUnit = ( UnitWorld = 0, UnitDisplay = 1, UnitPixel = 2, UnitPoint = 3, UnitInch = 4, UnitDocument = 5, UnitMillimeter = 6 ); const GdipPixelFormatIndexed = $00010000; // Indexes into a palette GdipPixelFormatGDI = $00020000; // Is a GDI-supported format GdipPixelFormatAlpha = $00040000; // Has an alpha component GdipPixelFormatPAlpha = $00080000; // Pre-multiplied alpha GdipPixelFormatExtended = $00100000; // Extended color 16 bits/channel GdipPixelFormatCanonical = $00200000; type GPPIXELFORMAT = ( // ... PixelFormat16bppGrayScale = ( 4 or (16 shl 8) or GdipPixelFormatExtended), PixelFormat24bppRGB = ( 8 or (24 shl 8) or GdipPixelFormatGDI), PixelFormat32bppRGB = ( 9 or (32 shl 8) or GdipPixelFormatGDI), PixelFormat32bppARGB = (10 or (32 shl 8) or GdipPixelFormatAlpha or GdipPixelFormatGDI or GdipPixelFormatCanonical), PixelFormat32bppPARGB = (11 or (32 shl 8) or GdipPixelFormatAlpha or GdipPixelFormatPAlpha or GdipPixelFormatGDI) // ... ); GpGraphics = Pointer; GpImage = Pointer; GpBitmap = Pointer; GpImageAttributes = Pointer; type TDebugEventLevel = (DebugEventLevelFatal, DebugEventLevelWarning); // Callback function that GDI+ can call, on debug builds, for assertions // and warnings. TDebugEventProc = procedure(level: TDebugEventLevel; message: PChar); stdcall; // Notification functions which the user must call appropriately if // "SuppressBackgroundThread" (below) is set. TNotificationHookProc = function(out token: ULONG): GPSTATUS; stdcall; TNotificationUnhookProc = procedure(token: ULONG); stdcall; // Input structure for GdiplusStartup GdiplusStartupInput = packed record GdiplusVersion : Cardinal; // Must be 1 DebugEventCallback : TDebugEventProc; // Ignored on free builds SuppressBackgroundThread: BOOL; // FALSE unless you're prepared to call // the hook/unhook functions properly SuppressExternalCodecs : BOOL; // FALSE unless you want GDI+ only to use end; // its internal image codecs. TGdiplusStartupInput = GdiplusStartupInput; PGdiplusStartupInput = ^TGdiplusStartupInput; // Output structure for GdiplusStartup() GdiplusStartupOutput = packed record NotificationHook : TNotificationHookProc; NotificationUnhook: TNotificationUnhookProc; end; TGdiplusStartupOutput = GdiplusStartupOutput; PGdiplusStartupOutput = ^TGdiplusStartupOutput; PGdiPlusBitmapData = ^GdiPlusBitmapData; GdiPlusBitmapData = packed record Width: UINT; Height: UINT; Stride: UINT; PixelFormat: GPPIXELFORMAT; Scan0: LPBYTE; Reserved: UINT_PTR; end; PARGBQUAD = ^ARGBQUAD; ARGBQUAD = record rgbBlue : BYTE; rgbGreen : BYTE; rgbRed : BYTE; rgbAlpha : BYTE; end; const GdipImageLockModeRead = 1; GdipImageLockModeWrite = 2; GdipImageLockModeUserInputBuf = 4; var IsGdiPlusLoaded: Boolean = False; GdiplusStartup: function (out token: ULONG; input: PGdiplusStartupInput; output: PGdiplusStartupOutput): GPSTATUS; stdcall; GdiplusShutdown: procedure (token: ULONG); stdcall; GdipCreateBitmapFromHICON: function (hicon: HICON; out bitmap: GPBITMAP): GPSTATUS; stdcall; GdipCreateBitmapFromHBITMAP: function (hbitmap: HBITMAP; hpalette: HPALETTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; GdipCreateBitmapFromScan0: function (Width, Height: Integer; Stride: Integer; PixelFormat: GPPIXELFORMAT; Scan0: LPBYTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; GdipCreateBitmapFromGraphics: function (Width, Height: Integer; graphics: GPGRAPHICS; out bitmap: GPBITMAP): GPSTATUS; stdcall; GdipCreateFromHDC: function (hdc: HDC; out graphics: GPGRAPHICS): GPSTATUS; stdcall; GdipDrawImageRectI: function (graphics: GPGRAPHICS; image: GPIMAGE; x: Integer; y: Integer; width: Integer; height: Integer): GPSTATUS; stdcall; GdipDrawImageRectRectI: function (graphics: GPGRAPHICS; image: GPIMAGE; dstx, dsty, dstwidth, dstheight: Integer; srcx, srcy, srcwidth, srcheight: Integer; srcUnit: GpUnit; imageattr: GPIMAGEATTRIBUTES; abortCallback: Pointer = nil; callbackData: Pointer = nil): GPSTATUS; stdcall; GdipLoadImageFromStream: function (stream: IStream; out image: GPIMAGE): GPSTATUS; stdcall; GdipDisposeImage: function (image: GPIMAGE): GPSTATUS; stdcall; GdipDeleteGraphics: function (graphics: GPGRAPHICS): GPSTATUS; stdcall; GdipGraphicsClear: function (graphics: GPGRAPHICS; color: Integer): GPSTATUS; stdcall; GdipSetInterpolationMode: function (graphics: GPGRAPHICS; interpolation: Integer): GPSTATUS; stdcall; GdipCreateImageAttributes: function (out imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; GdipDisposeImageAttributes: function (imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; GdipSetImageAttributesColorKeys: function (imageattr: GPIMAGEATTRIBUTES; ColorAdjustType: GpColorAdjustType; Enable: BOOL; ColorLow: LONG; ColorHigh: LONG): GPSTATUS; stdcall; GdipBitmapLockBits: function (bitmap: GPBITMAP; rect: LPRECT; flags: UINT; PixelFormat: GPPIXELFORMAT; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; GdipBitmapUnlockBits: function (bitmap: GPBITMAP; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; GdipGetImagePixelFormat: function (image: GPIMAGE; out pixelFormat: GPPIXELFORMAT): GPSTATUS; stdcall; GdipGetImageWidth: function (image: GPIMAGE; out width: cardinal): GPSTATUS; stdcall; GdipGetImageHeight: function (image: GPIMAGE; out height: cardinal): GPSTATUS; stdcall; function GdiPlusLoadFromStream(Str: TStream; Img: TFPCustomImage; out PixelFormat: GPPIXELFORMAT): GPSTATUS; function GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; overload; function GdiPlusStretchDraw(himl: hImageList; ImageIndex: Integer; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; overload; implementation uses CommCtrl, IntfGraphics, GraphType; var StartupInput: TGDIPlusStartupInput; gdiplusToken: ULONG; function GetBitmapPixels(hDC: HDC; BitmapInfo: LPBITMAPINFO; hBitmap: HBITMAP): PBYTE; begin; // Buffer must be aligned to DWORD (it should automatically be on a 32-bit machine). Result := GetMem(BitmapInfo^.bmiHeader.biWidth * BitmapInfo^.bmiHeader.biHeight * BitmapInfo^.bmiHeader.biBitCount shr 3); if GetDIBits(hDC, hBitmap, 0, BitmapInfo^.bmiHeader.biHeight, Result, BitmapInfo, DIB_RGB_COLORS) = 0 then begin Freemem(Result); Result := nil; end; end; function GetBitmapFromARGBPixels(graphics: GPGRAPHICS; pixels: LPBYTE; Width, Height: Integer): GPBITMAP; var x, y: Integer; pSrc, pDst: LPDWORD; bmBounds: TRECT; bmData: GdiPlusBitmapData; begin if GdipCreateBitmapFromGraphics(Width, Height, graphics, Result) <> ok then Exit(nil); Windows.SetRect(@bmBounds, 0, 0, Width, Height); if GdipBitmapLockBits(Result, @bmBounds, GdipImageLockModeWrite, PixelFormat32bppARGB, @bmData) <> ok then begin GdipDisposeImage(Result); Exit(nil); end; pSrc := LPDWORD(pixels); pDst := LPDWORD(bmData.Scan0); // Pixels retrieved by GetDIBits are bottom-up, left-right. for x := 0 to Width - 1 do for y := 0 to Height - 1 do pDst[(Height - 1 - y) * Width + x] := pSrc[y * Width + x]; GdipBitmapUnlockBits(Result, @bmData); end; function HasAlphaChannel(pixels: LPBYTE; Width, Height: Integer): Boolean; var i: Integer; begin for i := 0 to Width * Height - 1 do begin if PARGBQUAD(pixels)[i].rgbAlpha <> 0 then Exit(True); end; Result := False; end; function GdiPlusLoadFromStream(Str: TStream; Img: TFPCustomImage; out PixelFormat: GPPIXELFORMAT): GPSTATUS; var AImage: GpImage; bmBounds: TRect; AStream: IStream; bmData: GdiPlusBitmapData; AWidth, AHeight: Cardinal; Description: TRawImageDescription; begin AStream:= TStreamAdapter.Create(Str); try Result:= GdipLoadImageFromStream(AStream, AImage); if (Result = Ok) then begin Result:= GdipGetImageWidth(AImage, AWidth); if Result = Ok then begin Result:= GdipGetImageHeight(AImage, AHeight); if Result = Ok then begin Result:= GdipGetImagePixelFormat(AImage, PixelFormat); if Result = Ok then begin Description.Init_BPP24_B8G8R8_BIO_TTB(AWidth, AHeight); TLazIntfImage(Img).DataDescription:= Description; Windows.SetRect(@bmBounds, 0, 0, AWidth, AHeight); Result:= GdipBitmapLockBits(AImage, @bmBounds, GdipImageLockModeRead, PixelFormat24bppRGB, @bmData); if Result = Ok then begin Move(bmData.Scan0^, TLazIntfImage(Img).PixelData^, bmData.Stride * bmData.Height); GdipBitmapUnlockBits(AImage, @bmData); end; end; end; end; GdipDisposeImage(AImage); end; finally AStream:= nil; end; end; function GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; overload; var pIcon: GPIMAGE; pCanvas: GPGRAPHICS; IconInfo: TICONINFO; BitmapInfo: TBITMAPINFO; pixels: LPBYTE = nil; begin Result:= False; if GetIconInfo(hicn, IconInfo) = False then Exit; try GdipCreateFromHDC(hCanvas, pCanvas); // Prepare bitmap info structure. FillMemory(@BitmapInfo, sizeof(BitmapInfo), 0); BitmapInfo.bmiHeader.biSize := Sizeof(BitmapInfo.bmiHeader); GetDIBits(hCanvas, IconInfo.hbmColor, 0, 0, nil, @BitmapInfo, 0); if (BitmapInfo.bmiHeader.biBitCount = 32) then { only 32bpp } begin // Get pixels data. pixels := GetBitmapPixels(hCanvas, @BitmapInfo, IconInfo.hbmColor); // Check if the bitmap has alpha channel (have to be 32bpp to have ARGB format). if HasAlphaChannel(pixels, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight) then begin // GdipCreateBitmapFromHICON and GdipCreateBitmapFromHBITMAP functions // destroy alpha channel (they write alpha=255 for each pixel). // Copy the ARGB values manually. pIcon := GetBitmapFromARGBPixels(pCanvas, pixels, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight); end else // This is OK for bitmaps without alpha channel or < 32bpp. GdipCreateBitmapFromHICON(hicn, pIcon); end else // This is OK for bitmaps without alpha channel or < 32bpp. GdipCreateBitmapFromHICON(hicn, pIcon); Result:= GdipDrawImageRectI(pCanvas, pIcon, X, Y, cxWidth, cyHeight) = Ok; finally GdipDisposeImage(pIcon); GdipDeleteGraphics(pCanvas); DeleteObject(IconInfo.hbmColor); DeleteObject(IconInfo.hbmMask); if Assigned(pixels) then Freemem(pixels); end; end; function GdiPlusStretchDraw(himl: hImageList; ImageIndex: Integer; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; overload; var hicn: HICON; begin Result:= False; try hicn:= ImageList_ExtractIcon(0, himl, ImageIndex); Result:= GdiPlusStretchDraw(hicn, hCanvas, X, Y, cxWidth, cyHeight); finally DestroyIcon(hicn); end; end; var hLib: HMODULE; procedure Initialize; begin hLib:= LoadLibrary('gdiplus.dll'); if (hLib <> 0) then begin @GdiplusStartup:= GetProcAddress(hLib, 'GdiplusStartup'); @GdiplusShutdown:= GetProcAddress(hLib, 'GdiplusShutdown'); @GdipCreateBitmapFromHICON:= GetProcAddress(hLib, 'GdipCreateBitmapFromHICON'); @GdipCreateBitmapFromHBITMAP:= GetProcAddress(hLib, 'GdipCreateBitmapFromHBITMAP'); @GdipCreateBitmapFromScan0:= GetProcAddress(hLib, 'GdipCreateBitmapFromScan0'); @GdipCreateBitmapFromGraphics:= GetProcAddress(hLib, 'GdipCreateBitmapFromGraphics'); @GdipCreateFromHDC:= GetProcAddress(hLib, 'GdipCreateFromHDC'); @GdipDrawImageRectI:= GetProcAddress(hLib, 'GdipDrawImageRectI'); @GdipDrawImageRectRectI:= GetProcAddress(hLib, 'GdipDrawImageRectRectI'); @GdipLoadImageFromStream:= GetProcAddress(hLib, 'GdipLoadImageFromStream'); @GdipDisposeImage:= GetProcAddress(hLib, 'GdipDisposeImage'); @GdipDeleteGraphics:= GetProcAddress(hLib, 'GdipDeleteGraphics'); @GdipGraphicsClear:= GetProcAddress(hLib, 'GdipGraphicsClear'); @GdipSetInterpolationMode:= GetProcAddress(hLib, 'GdipSetInterpolationMode'); @GdipCreateImageAttributes:= GetProcAddress(hLib, 'GdipCreateImageAttributes'); @GdipDisposeImageAttributes:= GetProcAddress(hLib, 'GdipDisposeImageAttributes'); @GdipSetImageAttributesColorKeys:= GetProcAddress(hLib, 'GdipSetImageAttributesColorKeys'); @GdipBitmapLockBits:= GetProcAddress(hLib, 'GdipBitmapLockBits'); @GdipBitmapUnlockBits:= GetProcAddress(hLib, 'GdipBitmapUnlockBits'); @GdipGetImagePixelFormat:= GetProcAddress(hLib, 'GdipGetImagePixelFormat'); @GdipGetImageWidth:= GetProcAddress(hLib, 'GdipGetImageWidth'); @GdipGetImageHeight:= GetProcAddress(hLib, 'GdipGetImageHeight'); // Initialize GDI+ StartupInput structure StartupInput.DebugEventCallback:= nil; StartupInput.SuppressBackgroundThread:= False; StartupInput.SuppressExternalCodecs:= False; StartupInput.GdiplusVersion:= 1; // Initialize GDI+ IsGdiPlusLoaded:= (GdiplusStartup(gdiplusToken, @StartupInput, nil) = Ok); end; end; procedure Finalize; begin if (hLib <> 0) then begin // Close GDI+ if IsGdiPlusLoaded then GdiplusShutdown(gdiplusToken); FreeLibrary(hLib); end; end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/win/ufileunlock.pas0000644000175000001440000004176215104114162021034 0ustar alexxusersunit uFileUnlock; {$mode delphi}{$R-} interface uses Classes, SysUtils; type TProcessInfo = record ProcessId: DWORD; FileHandle: THandle; ApplicationName: String; ExecutablePath: String; end; TProcessInfoArray = array of TProcessInfo; function TerminateProcess(ProcessId: DWORD): Boolean; function FileUnlock(ProcessId: DWORD; hFile: THandle): Boolean; function GetFileInUseProcessFast(const FileName: String; out ProcessInfo: TProcessInfoArray): Boolean; function GetFileInUseProcessSlow(const FileName: String; LastError: Integer; var ProcessInfo: TProcessInfoArray): Boolean; implementation uses JwaWinType, JwaNative, JwaNtStatus, JwaPsApi, Windows, DCConvertEncoding, DCWindows; const RstrtMgr = 'RstrtMgr.dll'; const PROCESS_QUERY_LIMITED_INFORMATION = $1000; CCH_RM_MAX_SVC_NAME = 63; CCH_RM_MAX_APP_NAME = 255; RM_SESSION_KEY_LEN = SizeOf(TGUID); CCH_RM_SESSION_KEY = RM_SESSION_KEY_LEN * 2; type TRMAppType = ( RmUnknownApp = 0, RmMainWindow = 1, RmOtherWindow = 2, RmService = 3, RmExplorer = 4, RmConsole = 5, RmCritical = 1000 ); PRMUniqueProcess = ^TRMUniqueProcess; TRMUniqueProcess = record dwProcessId: DWORD; ProcessStartTime: TFileTime; end; PRMProcessInfo = ^TRMProcessInfo; TRMProcessInfo = record Process: TRMUniqueProcess; strAppName: array[0..CCH_RM_MAX_APP_NAME] of WideChar; strServiceShortName: array[0..CCH_RM_MAX_SVC_NAME] of WideChar; ApplicationType: TRMAppType; AppStatus: ULONG; TSSessionId: DWORD; bRestartable: BOOL; end; PSystemHandleInformationFx = ^TSystemHandleInformationFx; TSystemHandleInformationFx = record Count: ULONG; Handle: array[0..0] of TSystemHandleInformation; end; TSystemHandleTableEntryInfoEx = record Object_: PVOID; ProcessId: ULONG_PTR; Handle: ULONG_PTR; GrantedAccess: ULONG; CreatorBackTraceIndex: USHORT; ObjectTypeNumber: USHORT; HandleAttributes: ULONG; Reserved: ULONG; end; PSystemHandleInformationEx = ^TSystemHandleInformationEx; TSystemHandleInformationEx = record Count: ULONG_PTR; Reserved: ULONG_PTR; Handle: array[0..0] of TSystemHandleTableEntryInfoEx; end; var RmStartSession: function (pSessionHandle: LPDWORD; dwSessionFlags: DWORD; strSessionKey: LPWSTR): DWORD; stdcall; RmEndSession: function (dwSessionHandle: DWORD): DWORD; stdcall; RmRegisterResources: function(dwSessionHandle: DWORD; nFiles: UINT; rgsFileNames: LPPWSTR; nApplications: UINT; rgApplications: PRMUniqueProcess; nServices: UINT; rgsServiceNames: LPPWSTR): DWORD; stdcall; RmGetList: function(dwSessionHandle: DWORD; pnProcInfoNeeded: PUINT; pnProcInfo: PUINT; rgAffectedApps: PRMProcessInfo; lpdwRebootReasons: LPDWORD): DWORD; stdcall; QueryFullProcessImageNameW: function(hProcess: HANDLE; dwFlags: DWORD; lpExeName: LPWSTR; lpdwSize: PDWORD): BOOL; stdcall; GetFinalPathNameByHandleW: function(hFile: HANDLE; lpszFilePath: LPWSTR; cchFilePath: DWORD; dwFlags: DWORD): DWORD; stdcall; NtQueryObject: function(ObjectHandle : HANDLE; ObjectInformationClass : OBJECT_INFORMATION_CLASS; ObjectInformation : PVOID; ObjectInformationLength : ULONG; ReturnLength : PULONG): NTSTATUS; stdcall; var RstrtMgrLib: HMODULE = 0; GetFileName: function(hFile: HANDLE): UnicodeString; function _wcsnicmp(const s1, s2: pwidechar; count: ptruint): integer; cdecl; external 'msvcrt.dll'; function GetFileHandleList(out SystemInformation : PSystemHandleInformationEx): Boolean; const MEM_SIZE = SizeOf(TSystemHandleInformationEx); var Index: Integer; Status: NTSTATUS; SystemInformationLength : ULONG = MEM_SIZE; SystemInformationOld : PSystemHandleInformationFx; begin if CheckWin32Version(5, 1) then begin SystemInformation:= GetMem(MEM_SIZE); repeat Status:= NtQuerySystemInformation(TSystemInformationClass(64), SystemInformation, SystemInformationLength, @SystemInformationLength); if Status = STATUS_INFO_LENGTH_MISMATCH then begin SystemInformationLength+= SizeOf(TSystemHandleTableEntryInfoEx) * 100; ReAllocMem(SystemInformation, SystemInformationLength); end; until Status <> STATUS_INFO_LENGTH_MISMATCH; Result:= (Status = STATUS_SUCCESS); if not Result then FreeMem(SystemInformation); end else begin SystemInformationOld:= GetMem(MEM_SIZE); repeat Status:= NtQuerySystemInformation(SystemHandleInformation, SystemInformationOld, SystemInformationLength, @SystemInformationLength); if Status = STATUS_INFO_LENGTH_MISMATCH then begin SystemInformationLength+= SizeOf(TSystemHandleInformation) * 100; ReAllocMem(SystemInformationOld, SystemInformationLength); end; until Status <> STATUS_INFO_LENGTH_MISMATCH; Result:= (Status = STATUS_SUCCESS); if Result then begin SystemInformation:= GetMem(SystemInformationOld.Count * SizeOf(TSystemHandleTableEntryInfoEx) + SizeOf(TSystemHandleInformationEx)); for Index := 0 to SystemInformationOld.Count - 1 do begin with SystemInformation.Handle[Index] do begin Handle:= SystemInformationOld.Handle[Index].Handle; Object_:= SystemInformationOld.Handle[Index].Object_; ProcessId:= SystemInformationOld.Handle[Index].ProcessId; GrantedAccess:= SystemInformationOld.Handle[Index].GrantedAccess; ObjectTypeNumber:= SystemInformationOld.Handle[Index].ObjectTypeNumber; end; end; SystemInformation.Count:= SystemInformationOld.Count; end; FreeMem(SystemInformationOld); end; end; function GetFileNameOld(hFile: HANDLE): UnicodeString; const MAX_SIZE = SizeOf(TObjectNameInformation) + MAXWORD; var ReturnLength : ULONG; ObjectInformation : PObjectNameInformation; begin ObjectInformation:= GetMem(MAX_SIZE); if (NtQueryObject(hFile, ObjectNameInformation, ObjectInformation, MAXWORD, @ReturnLength) <> STATUS_SUCCESS) then Result:= EmptyWideStr else begin SetLength(Result, ObjectInformation^.Name.Length div SizeOf(WideChar)); Move(ObjectInformation^.Name.Buffer^, Result[1], ObjectInformation^.Name.Length); end; FreeMem(ObjectInformation); end; function GetFileNameNew(hFile: HANDLE): UnicodeString; begin SetLength(Result, maxSmallint + 1); SetLength(Result, GetFinalPathNameByHandleW(hFile, PWideChar(Result), maxSmallint, 0)); end; var FileHandleType: ULONG; function GetFileHandleType: ULONG; var Index: DWORD; Handle: THandle; ProcessId: DWORD; SystemInformation : PSystemHandleInformationEx; begin Handle:= FileOpen('NUL', fmOpenRead or fmShareDenyNone); if Handle <> feInvalidHandle then begin if GetFileHandleList(SystemInformation) then begin ProcessId:= GetCurrentProcessId; for Index:= 0 to SystemInformation^.Count - 1 do begin if (SystemInformation^.Handle[Index].Handle = Handle) and (SystemInformation^.Handle[Index].ProcessId = ProcessId) then begin Result:= SystemInformation^.Handle[Index].ObjectTypeNumber; Break; end; end; FreeMem(SystemInformation); end; FileClose(Handle); end; end; function GetProcessFileName(hProcess: HANDLE): UnicodeString; var dwSize: DWORD; begin if (Win32MajorVersion < 6) then begin SetLength(Result, maxSmallint + 1); SetLength(Result, GetModuleFileNameExW(hProcess, 0, PWideChar(Result), maxSmallint)); end else begin dwSize:= maxSmallint; SetLength(Result, dwSize + 1); if QueryFullProcessImageNameW(hProcess, 0, PWideChar(Result), @dwSize) then begin SetLength(Result, dwSize); end else begin SetLength(Result, 0); end; end; end; function GetModuleFileName(hProcess, hModule: HANDLE): UnicodeString; begin SetLength(Result, maxSmallint + 1); SetLength(Result, GetModuleFileNameExW(hProcess, hModule, PWideChar(Result), maxSmallint)); end; function GetNativeName(const FileName: String; out NativeName: UnicodeString): Boolean; var hFile: HANDLE; begin hFile := CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); Result:= (hFile <> INVALID_HANDLE_VALUE); if Result then begin NativeName:= GetFileName(hFile); CloseHandle(hFile); end; end; function CheckHandleType(hFile: HANDLE): Boolean; var hFileMap: HANDLE; begin hFileMap:= CreateFileMappingW(hFile, nil, PAGE_READONLY, 0, 1, nil); Result:= (hFileMap <> 0); if Result then CloseHandle(hFileMap) else begin Result:= (GetLastError <> ERROR_BAD_EXE_FORMAT); end; end; procedure AddLock(var ProcessInfo: TProcessInfoArray; ProcessId: DWORD; Process, FileHandle: HANDLE); var Index: Integer; begin for Index:= 0 to High(ProcessInfo) do begin if (ProcessInfo[Index].ProcessId = ProcessId) then begin if (ProcessInfo[Index].FileHandle = 0) and (FileHandle <> 0) then begin ProcessInfo[Index].FileHandle:= FileHandle; Exit; end; end; end; Index:= Length(ProcessInfo); SetLength(ProcessInfo, Index + 1); ProcessInfo[Index].ProcessId:= ProcessId; ProcessInfo[Index].FileHandle:= FileHandle; ProcessInfo[Index].ExecutablePath:= CeUtf16ToUtf8(GetProcessFileName(Process)); end; procedure GetModuleInUseProcess(const FileName: String; var ProcessInfo: TProcessInfoArray); var I, J: Integer; hProcess: HANDLE; cbNeeded: DWORD = 0; AFileName, AOpenName: UnicodeString; dwProcessList: array[0..4095] of DWORD; hModuleList: array [0..4095] of HMODULE; begin if EnumProcesses(@dwProcessList[0], SizeOf(dwProcessList), cbNeeded) then begin AFileName:= CeUtf8ToUtf16(FileName); for I:= 0 to (cbNeeded div SizeOf(DWORD)) do begin hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, dwProcessList[I]); if (hProcess <> 0) then begin if EnumProcessModules(hProcess, @hModuleList[0], SizeOf(hModuleList), cbNeeded) then begin for J:= 0 to (cbNeeded div SizeOf(HMODULE)) do begin AOpenName:= GetModuleFileName(hProcess, hModuleList[J]); if (Length(AOpenName) = Length(AFileName)) then begin if (_wcsnicmp(PWideChar(AOpenName), PWideChar(AFileName), Length(AFileName)) = 0) then begin AddLock(ProcessInfo, dwProcessList[I], hProcess, 0); Break; end; end; end; end; CloseHandle(hProcess); end; end; end; end; procedure GetFileInUseProcess(const FileName: String; var ProcessInfo: TProcessInfoArray); var hFile: HANDLE; Index: Integer; ALength: Integer; hProcess: HANDLE; hCurrentProcess: HANDLE; AFileName, AOpenName: UnicodeString; SystemInformation : PSystemHandleInformationEx; begin if GetNativeName(FileName, AFileName) and GetFileHandleList(SystemInformation) then begin ALength:= Length(AFileName); hCurrentProcess:= GetCurrentProcess; for Index:= 0 to SystemInformation^.Count - 1 do begin if (SystemInformation^.Handle[Index].ObjectTypeNumber = FileHandleType) then begin hProcess:= OpenProcess(PROCESS_DUP_HANDLE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, SystemInformation^.Handle[Index].ProcessId); if (hProcess <> 0) then begin if DuplicateHandle(hProcess, SystemInformation^.Handle[Index].Handle, hCurrentProcess, @hFile, 0, False, DUPLICATE_SAME_ACCESS) then begin if CheckHandleType(hFile) then begin AOpenName:= GetFileName(hFile); if Length(AOpenName) >= ALength then begin if (_wcsnicmp(PWideChar(AOpenName), PWideChar(AFileName), ALength) = 0) then begin if (Length(AOpenName) = ALength) or (AOpenName[ALength + 1] = PathDelim) then AddLock(ProcessInfo, SystemInformation^.Handle[Index].ProcessId, hProcess, SystemInformation^.Handle[Index].Handle); end; end; end; CloseHandle(hFile); end; CloseHandle(hProcess); end; end; end; FreeMem(SystemInformation); end; end; function GetFileInUseProcessFast(const FileName: String; out ProcessInfo: TProcessInfoArray): Boolean; const MAX_CNT = 64; var I: Integer; dwReason: DWORD; dwSession: DWORD; hProcess: HANDLE; nProcInfoNeeded: UINT; rgsFileNames: PWideChar; nProcInfo: UINT = MAX_CNT; ftCreation, ftDummy: TFileTime; szSessionKey: array[0..CCH_RM_SESSION_KEY] of WideChar; rgAffectedApps: array[0..MAX_CNT - 1] of TRMProcessInfo; begin if (RstrtMgrLib = 0) then Exit(False); ZeroMemory(@szSessionKey[0], SizeOf(szSessionKey)); Result:= (RmStartSession(@dwSession, 0, szSessionKey) = ERROR_SUCCESS); if Result then try rgsFileNames:= PWideChar(CeUtf8ToUtf16(FileName)); Result:= (RmRegisterResources(dwSession, 1, @rgsFileNames, 0, nil, 0, nil) = ERROR_SUCCESS) and (RmGetList(dwSession, @nProcInfoNeeded, @nProcInfo, rgAffectedApps, @dwReason) = ERROR_SUCCESS); if Result then begin Result:= (nProcInfo > 0); SetLength(ProcessInfo, nProcInfo); for I:= 0 to nProcInfo - 1 do begin ProcessInfo[I].ProcessId:= rgAffectedApps[I].Process.dwProcessId; ProcessInfo[I].ApplicationName:= CeUtf16ToUtf8(UnicodeString(rgAffectedApps[I].strAppName)); hProcess:= OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, rgAffectedApps[I].Process.dwProcessId); if hProcess <> 0 then try if GetProcessTimes(hProcess, ftCreation, ftDummy, ftDummy, ftDummy) and (CompareFileTime(@rgAffectedApps[I].Process.ProcessStartTime, @ftCreation) = 0) then begin ProcessInfo[I].ExecutablePath:= CeUtf16ToUtf8(GetProcessFileName(hProcess)); end; finally CloseHandle(hProcess); end; end; end; finally RmEndSession(dwSession); end; end; function GetFileInUseProcessSlow(const FileName: String; LastError: Integer; var ProcessInfo: TProcessInfoArray): Boolean; begin if (Win32MajorVersion < 6) and (LastError = ERROR_ACCESS_DENIED) then begin GetModuleInUseProcess(FileName, ProcessInfo) end; if (LastError = ERROR_SHARING_VIOLATION) then begin GetFileInUseProcess(FileName, ProcessInfo); end; Result:= (Length(ProcessInfo) > 0); end; function TerminateProcess(ProcessId: DWORD): Boolean; var hProcess: HANDLE; begin hProcess:= OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, ProcessId); Result:= (hProcess <> 0); if Result then begin Result:= Windows.TerminateProcess(hProcess, 1); CloseHandle(hProcess); end; end; function FileUnlock(ProcessId: DWORD; hFile: THandle): Boolean; var hProcess: HANDLE; hDuplicate: HANDLE; begin Result:= False; hProcess:= OpenProcess(PROCESS_DUP_HANDLE or PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId); if (hProcess <> 0) then begin if (DuplicateHandle(hProcess, hFile, GetCurrentProcess, @hDuplicate, 0, False, DUPLICATE_SAME_ACCESS or DUPLICATE_CLOSE_SOURCE)) then begin Result:= CloseHandle(hDuplicate); end; CloseHandle(hProcess); end; end; procedure GetFileHandleTypeThread({%H-}Parameter : Pointer); begin FileHandleType:= GetFileHandleType; end; procedure Initialize; var SystemDirectory: UnicodeString; begin if Win32MajorVersion < 6 then begin GetFileName:= @GetFileNameOld; @NtQueryObject:= GetProcAddress(GetModuleHandleW(ntdll), 'NtQueryObject'); end else begin SetLength(SystemDirectory, maxSmallint + 1); SetLength(SystemDirectory, GetSystemDirectoryW(Pointer(SystemDirectory), maxSmallint)); RstrtMgrLib:= LoadLibraryW(PWideChar(SystemDirectory + PathDelim + RstrtMgr)); if RstrtMgrLib <> 0 then begin @RmStartSession := GetProcAddress(RstrtMgrLib, 'RmStartSession'); @RmEndSession := GetProcAddress(RstrtMgrLib, 'RmEndSession'); @RmRegisterResources := GetProcAddress(RstrtMgrLib, 'RmRegisterResources'); @RmGetList := GetProcAddress(RstrtMgrLib, 'RmGetList'); end; GetFileName:= @GetFileNameNew; @QueryFullProcessImageNameW:= GetProcAddress(GetModuleHandleW(Kernel32), 'QueryFullProcessImageNameW'); @GetFinalPathNameByHandleW:= GetProcAddress(GetModuleHandleW(Kernel32), 'GetFinalPathNameByHandleW'); end; TThread.ExecuteInThread(@GetFileHandleTypeThread, nil); end; initialization Initialize; end. doublecmd-1.1.30/src/platform/win/udcreadwic.pas0000644000175000001440000005675415104114162020635 0ustar alexxusersunit uDCReadWIC; {$mode delphi} interface uses Windows, Classes, SysUtils, FPImage, Graphics, IntfGraphics, ComObj, ActiveX; const WICDecoder = $01; WICBitmapCacheOnLoad = $2; WICDecodeMetadataCacheOnDemand = 0; CLSID_WICImagingFactory: TGUID = '{CACAF262-9370-4615-A13B-9F5539DA4C0A}'; GUID_WICPixelFormat32bppBGRA: TGUID = '{6FDDC324-4E03-4BFE-B185-3D77768DC90F}'; type PWICColor = ^TWicColor; TWICColor = Cardinal; PWICRect = ^TWICRect; TWICRect = record X: Integer; Y: Integer; Width: Integer; Height: Integer; end; PIWICColorContext = ^IWICColorContext; PWICBitmapPattern = ^TWICBitmapPattern; TWICBitmapPattern = record Position: ULARGE_INTEGER; Length: ULONG; Pattern: PByte; Mask: PByte; EndOfStream: BOOL; end; PPropBag2 = ^TPropBag2; TPropBag2 = record dwType: DWORD; vt: TVarType; cfType: TClipFormat; dwHint: DWORD; pstrName: POleStr; clsid: TCLSID; end; TWICInProcPointer = PByte; TWICPixelFormatGUID = TGUID; TREFWICPixelFormatGUID = PGUID; TWICComponentType = type Integer; TWICDecodeOptions = type Integer; TWICColorContextType = type Integer; TWICBitmapDitherType = type Integer; TWICBitmapPaletteType = type Integer; TWICBitmapInterpolationMode = type Integer; TWICBitmapEncoderCacheOption = type Integer; TWICBitmapTransformOptions = type Integer; TWICBitmapCreateCacheOption = type Integer; TWICBitmapAlphaChannelOption = type Integer; IWICPalette = interface; IWICBitmapLock = interface; IWICBitmapEncoderInfo = interface; IWICBitmapDecoderInfo = interface; IWICBitmapFrameEncode = interface; IWICBitmapFrameDecode = interface; IWICMetadataQueryReader = interface; IWICMetadataQueryWriter = interface; IPropertyBag2 = interface(IUnknown) ['{22F55882-280B-11d0-A8A9-00A0C90C2004}'] function Read(pPropBag: PPropBag2; pErrLog: IErrorLog; pvarValue: PVariant; phrError: PHResult): HRESULT; stdcall; function Write(cProperties: ULONG; pPropBag: PPropBag2; pvarValue: PVariant): HRESULT; stdcall; function CountProperties(var pcProperties: ULONG): HRESULT; stdcall; function GetPropertyInfo(iProperty, cProperties: ULONG; pPropBag: PPropBag2; var pcProperties: ULONG): HRESULT; stdcall; function LoadObject(pstrName:POleStr; dwHint: DWORD; pUnkObject: IUnknown; pErrLog: IErrorLog): HRESULT; stdcall; end; IWICComponentInfo = interface(IUnknown) ['{23BC3F0A-698B-4357-886B-F24D50671334}'] function GetComponentType(var pType: TWICComponentType): HRESULT; stdcall; function GetCLSID(var pclsid: TGUID): HRESULT; stdcall; function GetSigningStatus(var pStatus: DWORD): HRESULT; stdcall; function GetAuthor(cchAuthor: UINT; wzAuthor: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetVendorGUID(var pguidVendor: TGUID): HRESULT; stdcall; function GetVersion(cchVersion: UINT; wzVersion: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetSpecVersion(cchSpecVersion: UINT; wzSpecVersion: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetFriendlyName(cchFriendlyName: UINT; wzFriendlyName: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; end; IWICBitmapSource = interface(IUnknown) ['{00000120-a8f2-4877-ba0a-fd2b6645fb94}'] function GetSize(var puiWidth: UINT; var puiHeight: UINT): HRESULT; stdcall; function GetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESULT; stdcall; function GetResolution(var pDpiX: Double; var pDpiY: Double): HRESULT; stdcall; function CopyPalette(pIPalette: IWICPalette): HRESULT; stdcall; function CopyPixels(prc: PWICRect; cbStride: UINT; cbBufferSize: UINT; pbBuffer: PByte): HRESULT; stdcall; end; IWICBitmap = interface(IWICBitmapSource) ['{00000121-a8f2-4877-ba0a-fd2b6645fb94}'] function Lock(const prcLock: TWICRect; flags: DWORD; out ppILock: IWICBitmapLock): HRESULT; stdcall; function SetPalette(pIPalette: IWICPalette): HRESULT; stdcall; function SetResolution(dpiX: Double; dpiY: Double): HRESULT; stdcall; end; IWICBitmapLock = interface(IUnknown) ['{00000123-a8f2-4877-ba0a-fd2b6645fb94}'] function GetSize(var puiWidth: UINT; var puiHeight: UINT): HRESULT; stdcall; function GetStride(var pcbStride: UINT): HRESULT; stdcall; function GetDataPointer(var pcbBufferSize: UINT; var ppbData: TWICInProcPointer): HRESULT; stdcall; function GetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESULT; stdcall; end; IWICBitmapCodecInfo = interface(IWICComponentInfo) ['{E87A44C4-B76E-4c47-8B09-298EB12A2714}'] function GetContainerFormat(var pguidContainerFormat: TGUID): HRESULT; stdcall; function GetPixelFormats(cFormats: UINT; var guidPixelFormats: PGUID; var pcActual: UINT): HRESULT; stdcall; function GetColorManagementVersion(cchColorManagementVersion: UINT; wzColorManagementVersion: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetDeviceManufacturer(cchDeviceManufacturer: UINT; wzDeviceManufacturer: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetDeviceModels(cchDeviceModels: UINT; wzDeviceModels: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetMimeTypes(cchMimeTypes: UINT; wzMimeTypes: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function GetFileExtensions(cchFileExtensions: UINT; wzFileExtensions: PWCHAR; var pcchActual: UINT): HRESULT; stdcall; function DoesSupportAnimation(var pfSupportAnimation: BOOL): HRESULT; stdcall; function DoesSupportChromakey(var pfSupportChromakey: BOOL): HRESULT; stdcall; function DoesSupportLossless(var pfSupportLossless: BOOL): HRESULT; stdcall; function DoesSupportMultiframe(var pfSupportMultiframe: BOOL): HRESULT; stdcall; function MatchesMimeType(wzMimeType: LPCWSTR; var pfMatches: BOOL): HRESULT; stdcall; end; IWICBitmapEncoder = interface(IUnknown) ['{00000103-a8f2-4877-ba0a-fd2b6645fb94}'] function Initialize(pIStream: IStream; cacheOption: TWICBitmapEncoderCacheOption): HRESULT; stdcall; function GetContainerFormat(var pguidContainerFormat: TGUID): HRESULT; stdcall; function GetEncoderInfo(out ppIEncoderInfo: IWICBitmapEncoderInfo): HRESULT; stdcall; function SetColorContexts(cCount: UINT; ppIColorContext: PIWICColorContext): HRESULT; stdcall; function SetPalette(pIPalette: IWICPalette): HRESULT; stdcall; function SetThumbnail(pIThumbnail: IWICBitmapSource): HRESULT; stdcall; function SetPreview(pIPreview: IWICBitmapSource): HRESULT; stdcall; function CreateNewFrame(out ppIFrameEncode: IWICBitmapFrameEncode; var ppIEncoderOptions: IPropertyBag2): HRESULT; stdcall; function Commit: HRESULT; stdcall; function GetMetadataQueryWriter(out ppIMetadataQueryWriter: IWICMetadataQueryWriter): HRESULT; stdcall; end; IWICBitmapDecoder = interface(IUnknown) ['{9EDDE9E7-8DEE-47ea-99DF-E6FAF2ED44BF}'] function QueryCapability(pIStream: IStream; var pdwCapability: DWORD): HRESULT; stdcall; function Initialize(pIStream: IStream; cacheOptions: TWICDecodeOptions): HRESULT; stdcall; function GetContainerFormat(var pguidContainerFormat: TGUID): HRESULT; stdcall; function GetDecoderInfo(out ppIDecoderInfo: IWICBitmapDecoderInfo): HRESULT; stdcall; function CopyPalette(pIPalette: IWICPalette): HRESULT; stdcall; function GetMetadataQueryReader(out ppIMetadataQueryReader: IWICMetadataQueryReader): HRESULT; stdcall; function GetPreview(out ppIBitmapSource: IWICBitmapSource): HRESULT; stdcall; function GetColorContexts(cCount: UINT; ppIColorContexts: PIWICColorContext; var pcActualCount : UINT): HRESULT; stdcall; function GetThumbnail(out ppIThumbnail: IWICBitmapSource): HRESULT; stdcall; function GetFrameCount(var pCount: UINT): HRESULT; stdcall; function GetFrame(index: UINT; out ppIBitmapFrame: IWICBitmapFrameDecode): HRESULT; stdcall; end; IWICBitmapEncoderInfo = interface(IWICBitmapCodecInfo) ['{94C9B4EE-A09F-4f92-8A1E-4A9BCE7E76FB}'] function CreateInstance(out ppIBitmapEncoder: IWICBitmapEncoder): HRESULT; stdcall; end; IWICBitmapDecoderInfo = interface(IWICBitmapCodecInfo) ['{D8CD007F-D08F-4191-9BFC-236EA7F0E4B5}'] function GetPatterns(cbSizePatterns: UINT; pPatterns: PWICBitmapPattern; var pcPatterns: UINT; var pcbPatternsActual: UINT): HRESULT; stdcall; function MatchesPattern(pIStream: IStream; var pfMatches: BOOL): HRESULT; stdcall; function CreateInstance(out ppIBitmapDecoder: IWICBitmapDecoder): HRESULT; stdcall; end; IWICBitmapFrameEncode = interface(IUnknown) ['{00000105-a8f2-4877-ba0a-fd2b6645fb94}'] function Initialize(pIEncoderOptions: IPropertyBag2): HRESULT; stdcall; function SetSize(uiWidth: UINT; uiHeight: UINT): HRESULT; stdcall; function SetResolution(dpiX: Double; dpiY: Double): HRESULT; stdcall; function SetPixelFormat(var pPixelFormat: TWICPixelFormatGUID): HRESULT; stdcall; function SetColorContexts(cCount: UINT; ppIColorContext: PIWICColorContext): HRESULT; stdcall; function SetPalette(pIPalette: IWICPalette): HRESULT; stdcall; function SetThumbnail(pIThumbnail: IWICBitmapSource): HRESULT; stdcall; function WritePixels(lineCount: UINT; cbStride: UINT; cbBufferSize: UINT; pbPixels: PByte): HRESULT; stdcall; function WriteSource(pIBitmapSource: IWICBitmapSource; prc: PWICRect): HRESULT; stdcall; function Commit: HRESULT; stdcall; function GetMetadataQueryWriter(out ppIMetadataQueryWriter: IWICMetadataQueryWriter): HRESULT; stdcall; end; IWICBitmapFrameDecode = interface(IWICBitmapSource) ['{3B16811B-6A43-4ec9-A813-3D930C13B940}'] function GetMetadataQueryReader(out ppIMetadataQueryReader: IWICMetadataQueryReader): HRESULT; stdcall; function GetColorContexts(cCount: UINT; ppIColorContexts: PIWICColorContext; var pcActualCount : UINT): HRESULT; stdcall; function GetThumbnail(out ppIThumbnail: IWICBitmapSource): HRESULT; stdcall; end; IWICBitmapScaler = interface(IWICBitmapSource) ['{00000302-a8f2-4877-ba0a-fd2b6645fb94}'] function Initialize(pISource: IWICBitmapSource; uiWidth: UINT; uiHeight: UINT; mode: TWICBitmapInterpolationMode): HRESULT; stdcall; end; IWICBitmapClipper = interface(IWICBitmapSource) ['{E4FBCF03-223D-4e81-9333-D635556DD1B5}'] function Initialize(pISource: IWICBitmapSource; var prc: TWICRect): HRESULT; stdcall; end; IWICBitmapFlipRotator = interface(IWICBitmapSource) ['{5009834F-2D6A-41ce-9E1B-17C5AFF7A782}'] function Initialize(pISource: IWICBitmapSource; options: TWICBitmapTransformOptions): HRESULT; stdcall; end; IWICPalette = interface(IUnknown) ['{00000040-a8f2-4877-ba0a-fd2b6645fb94}'] function InitializePredefined(ePaletteType: TWICBitmapPaletteType; fAddTransparentColor: BOOL): HRESULT; stdcall; function InitializeCustom(pColors: PWICColor; cCount: UINT): HRESULT; stdcall; function InitializeFromBitmap(pISurface: IWICBitmapSource; cCount: UINT; fAddTransparentColor: BOOL): HRESULT; stdcall; function InitializeFromPalette(pIPalette: IWICPalette): HRESULT; stdcall; function GetType(var pePaletteType: TWICBitmapPaletteType): HRESULT; stdcall; function GetColorCount(var pcCount: UINT): HRESULT; stdcall; function GetColors(cCount: UINT; pColors: PWICColor; var pcActualColors: UINT): HRESULT; stdcall; function IsBlackWhite(var pfIsBlackWhite: BOOL): HRESULT; stdcall; function IsGrayscale(var pfIsGrayscale: BOOL): HRESULT; stdcall; function HasAlpha(var pfHasAlpha: BOOL): HRESULT; stdcall; end; IWICColorContext = interface(IUnknown) ['{3C613A02-34B2-44ea-9A7C-45AEA9C6FD6D}'] function InitializeFromFilename(wzFilename: LPCWSTR): HRESULT; stdcall; function InitializeFromMemory(const pbBuffer: PByte; cbBufferSize: UINT): HRESULT; stdcall; function InitializeFromExifColorSpace(value: UINT): HRESULT; stdcall; function GetType(var pType: TWICColorContextType): HRESULT; stdcall; function GetProfileBytes(cbBuffer: UINT; pbBuffer: PByte; var pcbActual: UINT): HRESULT; stdcall; function GetExifColorSpace(var pValue: UINT): HRESULT; stdcall; end; IWICColorTransform = interface(IWICBitmapSource) ['{B66F034F-D0E2-40ab-B436-6DE39E321A94}'] function Initialize(pIBitmapSource: IWICBitmapSource; pIContextSource: IWICColorContext; pIContextDest: IWICColorContext; pixelFmtDest: TREFWICPixelFormatGUID): HRESULT; stdcall; end; IWICMetadataQueryReader = interface(IUnknown) ['{30989668-E1C9-4597-B395-458EEDB808DF}'] function GetContainerFormat(var pguidContainerFormat: TGUID): HRESULT; stdcall; function GetLocation(cchMaxLength: UINT; wzNamespace: PWCHAR; var pcchActualLength: UINT): HRESULT; stdcall; function GetMetadataByName(wzName: LPCWSTR; var pvarValue: PROPVARIANT): HRESULT; stdcall; function GetEnumerator(out ppIEnumString: IEnumString): HRESULT; stdcall; end; IWICMetadataQueryWriter = interface(IWICMetadataQueryReader) ['{A721791A-0DEF-4d06-BD91-2118BF1DB10B}'] function SetMetadataByName(wzName: LPCWSTR; const pvarValue: TPropVariant): HRESULT; stdcall; function RemoveMetadataByName(wzName: LPCWSTR): HRESULT; stdcall; end; IWICFastMetadataEncoder = interface(IUnknown) ['{B84E2C09-78C9-4AC4-8BD3-524AE1663A2F}'] function Commit: HRESULT; stdcall; function GetMetadataQueryWriter(out ppIMetadataQueryWriter: IWICMetadataQueryWriter): HRESULT; stdcall; end; IWICStream = interface(IStream) ['{135FF860-22B7-4ddf-B0F6-218F4F299A43}'] function InitializeFromIStream(pIStream: IStream): HRESULT; stdcall; function InitializeFromFilename(wzFileName: LPCWSTR; dwDesiredAccess: DWORD): HRESULT; stdcall; function InitializeFromMemory(pbBuffer: TWICInProcPointer; cbBufferSize: DWORD): HRESULT; stdcall; function InitializeFromIStreamRegion(pIStream: IStream; ulOffset: ULARGE_INTEGER; ulMaxSize: ULARGE_INTEGER): HRESULT; stdcall; end; IWICFormatConverter = interface(IWICBitmapSource) ['{00000301-a8f2-4877-ba0a-fd2b6645fb94}'] function Initialize(pISource: IWICBitmapSource; const dstFormat: TWICPixelFormatGUID; dither: TWICBitmapDitherType; const pIPalette: IWICPalette; alphaThresholdPercent: Double; paletteTranslate: TWICBitmapPaletteType): HRESULT; stdcall; function CanConvert(srcPixelFormat: TREFWICPixelFormatGUID; dstPixelFormat: TREFWICPixelFormatGUID; var pfCanConvert: BOOL): HRESULT; stdcall; end; IWICImagingFactory = interface(IUnknown) ['{ec5ec8a9-c395-4314-9c77-54d7a935ff70}'] function CreateDecoderFromFilename(wzFilename: LPCWSTR; const pguidVendor: TGUID; dwDesiredAccess: DWORD; metadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESULT; stdcall; function CreateDecoderFromStream(pIStream: IStream; const pguidVendor: TGUID; metadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESULT; stdcall; function CreateDecoderFromFileHandle(hFile: ULONG_PTR; const pguidVendor: TGUID; metadataOptions: TWICDecodeOptions; out ppIDecoder: IWICBitmapDecoder): HRESULT; stdcall; function CreateComponentInfo(const clsidComponent: TGUID; out ppIInfo: IWICComponentInfo): HRESULT; stdcall; function CreateDecoder(const guidContainerFormat: TGUID; const pguidVendor: TGUID; out ppIDecoder: IWICBitmapDecoder): HRESULT; stdcall; function CreateEncoder(const guidContainerFormat: TGUID; const pguidVendor: TGUID; out ppIEncoder: IWICBitmapEncoder): HRESULT; stdcall; function CreatePalette(out ppIPalette: IWICPalette): HRESULT; stdcall; function CreateFormatConverter(out ppIFormatConverter: IWICFormatConverter): HRESULT; stdcall; function CreateBitmapScaler(out ppIBitmapScaler: IWICBitmapScaler): HRESULT; stdcall; function CreateBitmapClipper(out ppIBitmapClipper: IWICBitmapClipper): HRESULT; stdcall; function CreateBitmapFlipRotator(out ppIBitmapFlipRotator: IWICBitmapFlipRotator): HRESULT; stdcall; function CreateStream(out ppIWICStream: IWICStream): HRESULT; stdcall; function CreateColorContext(out ppIWICColorContext: IWICColorContext): HRESULT; stdcall; function CreateColorTransformer(out ppIWICColorTransform: IWICColorTransform): HRESULT; stdcall; function CreateBitmap(uiWidth: UINT; uiHeight: UINT; pixelFormat: TREFWICPixelFormatGUID; option: TWICBitmapCreateCacheOption; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateBitmapFromSource(pIBitmapSource: IWICBitmapSource; option: TWICBitmapCreateCacheOption; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateBitmapFromSourceRect(pIBitmapSource: IWICBitmapSource; x: UINT; y: UINT; width: UINT; height: UINT; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateBitmapFromMemory(uiWidth: UINT; uiHeight: UINT; const pixelFormat: TWICPixelFormatGUID; cbStride: UINT; cbBufferSize: UINT; pbBuffer: PByte; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateBitmapFromHBITMAP(hBitmap: HBITMAP; hPalette: HPALETTE; options: TWICBitmapAlphaChannelOption; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateBitmapFromHICON(hIcon: HICON; out ppIBitmap: IWICBitmap): HRESULT; stdcall; function CreateComponentEnumerator(componentTypes: DWORD; options: DWORD; out ppIEnumUnknown: IEnumUnknown): HRESULT; stdcall; function CreateFastMetadataEncoderFromDecoder(pIDecoder: IWICBitmapDecoder; out ppIFastEncoder: IWICFastMetadataEncoder): HRESULT; stdcall; function CreateFastMetadataEncoderFromFrameDecode(pIFrameDecoder: IWICBitmapFrameDecode; out ppIFastEncoder: IWICFastMetadataEncoder): HRESULT; stdcall; function CreateQueryWriter(const guidMetadataFormat: TGUID; const pguidVendor: TGUID; out ppIQueryWriter: IWICMetadataQueryWriter): HRESULT; stdcall; function CreateQueryWriterFromReader(pIQueryReader: IWICMetadataQueryReader; const pguidVendor: TGUID; out ppIQueryWriter: IWICMetadataQueryWriter): HRESULT; stdcall; end; type { TImageReaderWIC } TImageReaderWIC = class(TFPCustomImageReader) private FBitmapDecoder: IWICBitmapDecoder; protected procedure InternalRead({%H-}Str: TStream; Img: TFPCustomImage); override; function InternalCheck(Str: TStream): Boolean; override; end; { TImageWIC } TImageWIC = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; public class var Extensions: String; class function GetFileExtensions: String; override; end; implementation uses GraphType, DCOSUtils; var ImagingFactory: IWICImagingFactory; WICConvertBitmapSource: function(const dstFormat: TWICPixelFormatGUID; pISrc: IWICBitmapSource; out ppIDst: IWICBitmapSource): HRESULT; stdcall; const CLSID_WICPngDecoder: TGUID = '{389ea17b-5078-4cde-b6ef-25c15175c751}'; CLSID_WICPngDecoder1: TGUID = '{389ea17b-5078-4cde-b6ef-25c15175c751}'; CLSID_WICPngDecoder2: TGUID = '{e018945b-aa86-4008-9bd4-6777a1e40c11}'; CLSID_WICBmpDecoder: TGUID = '{6b462062-7cbf-400d-9fdb-813dd10f2778}'; CLSID_WICIcoDecoder: TGUID = '{c61bfcdf-2e0f-4aad-a8d7-e06bafebcdfe}'; CLSID_WICJpegDecoder: TGUID = '{9456a480-e88b-43ea-9e73-0b2d9b71b1ca}'; CLSID_WICGifDecoder: TGUID = '{381dda3c-9ce9-4834-a23e-1f98f8fc52be}'; CLSID_WICTiffDecoder: TGUID = '{b54e85d9-fe23-499f-8b88-6acea713752b}'; CLSID_WICCurDecoder: TGUID = '{22696B76-881B-48D7-88F0-DC6111FF9F0B}'; CLSID_WICHeicDecoder: TGUID = '{E9A4A80A-44FE-4DE4-8971-7150B10A5199}'; CLSID_WICIgnoreDecoders: array[0..9] of PGUID = ( @CLSID_WICPngDecoder, @CLSID_WICPngDecoder1, @CLSID_WICPngDecoder2, @CLSID_WICBmpDecoder, @CLSID_WICIcoDecoder, @CLSID_WICJpegDecoder, @CLSID_WICGifDecoder, @CLSID_WICTiffDecoder, @CLSID_WICCurDecoder, @CLSID_WICHeicDecoder ); { TImageWIC } class function TImageWIC.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TImageReaderWIC; end; class function TImageWIC.GetFileExtensions: String; begin Result:= Extensions; end; { TImageReaderWIC } procedure TImageReaderWIC.InternalRead(Str: TStream; Img: TFPCustomImage); var AWidth: Cardinal = 0; AHeight: Cardinal = 0; BitmapObject: IWICBitmap; BitmapSource: IWICBitmapSource; Description: TRawImageDescription; BitmapFrame: IWICBitmapFrameDecode; begin OleCheck(FBitmapDecoder.GetFrame(0, BitmapFrame)); OleCheck(ImagingFactory.CreateBitmapFromSource(BitmapFrame, WICBitmapCacheOnLoad, BitmapObject)); OleCheck(BitmapObject.GetSize(AWidth, AHeight)); OleCheck(WICConvertBitmapSource(GUID_WICPixelFormat32bppBGRA, BitmapObject, BitmapSource)); Description.Init_BPP32_B8G8R8A8_BIO_TTB(AWidth, AHeight); TLazIntfImage(Img).DataDescription:= Description; OleCheck(BitmapSource.CopyPixels(nil, AWidth * 4, AWidth * AHeight * 4, TLazIntfImage(Img).PixelData)); end; function TImageReaderWIC.InternalCheck(Str: TStream): Boolean; var AStream: IStream; begin AStream:= TStreamAdapter.Create(Str); try Result:= (ImagingFactory.CreateDecoderFromStream(AStream, GUID_NULL, WICDecodeMetadataCacheOnDemand, FBitmapDecoder) = S_OK); finally AStream:= nil; end; end; function IsStandardDecoder(const pclsid: TGUID): Boolean; var Index: Integer; begin for Index:= 0 to High(CLSID_WICIgnoreDecoders) do begin if IsEqualGUID(pclsid, CLSID_WICIgnoreDecoders[Index]^) then Exit(True); end; Result:= False; end; procedure Initialize; var AClass: TGUID; ATemp: String; hModule: TLibHandle; cbActual: ULONG = 0; cchActual: UINT = 0; dwOptions: DWORD = 0; ACodec: IUnknown = nil; AInfo: IWICBitmapCodecInfo; wzFileExtensions: UnicodeString; ppIEnumUnknown: IEnumUnknown = nil; begin if (Win32MajorVersion > 5) then try OleInitialize(nil); OleCheck(CoCreateInstance(CLSID_WICImagingFactory, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, ImagingFactory)); OleCheck(ImagingFactory.CreateComponentEnumerator(WICDecoder, dwOptions, ppIEnumUnknown)); SetLength(wzFileExtensions, MaxSmallint + 1); // Windows 11 24H2 includes a real built-in HEIC decoder if (Win32MajorVersion > 10) or ((Win32MajorVersion = 10) and (Win32BuildNumber >= 26100)) then begin CLSID_WICHeicDecoder:= GUID_NULL; end; while(ppIEnumUnknown.Next(1, ACodec, @cbActual) = S_OK) do begin if (ACodec.QueryInterface(IWICBitmapCodecInfo, AInfo) = S_OK) then begin // Skip standard decoders if (AInfo.GetCLSID(AClass) = S_OK) then begin if IsStandardDecoder(AClass) then Continue; end; if (AInfo.GetFileExtensions(MaxSmallint, PWideChar(wzFileExtensions), cchActual) = S_OK) then begin ATemp:= UTF8Encode(Copy(wzFileExtensions, 1, cchActual - 1)); TImageWIC.Extensions+= StringReplace(StringReplace(ATemp, ',', ';', [rfReplaceAll]), '.', '', [rfReplaceAll]) + ';'; end; end; end; if (Length(TImageWIC.Extensions) > 0) then begin hModule:= LoadLibraryExW('WindowsCodecs.dll', 0, LOAD_LIBRARY_SEARCH_SYSTEM32); if (hModule <> NilHandle) then begin @WICConvertBitmapSource:= SafeGetProcAddress(hModule, 'WICConvertBitmapSource'); ImageHandlers.RegisterImageReader('Windows Imaging Component', TImageWIC.Extensions, TImageReaderWIC); TPicture.RegisterFileFormat(TImageWIC.Extensions, 'Windows Imaging Component', TImageWIC); end; end; except // Skip end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/win/udclass.pas0000644000175000001440000001146015104114162020142 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Setup unique window class name for main form Copyright (C) 2016-2022 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uDClass; {$mode objfpc}{$H+} interface implementation uses Classes, SysUtils, Win32Int, WSLCLClasses, Forms, Windows, Win32Proc, Controls, LCLType, fMain, Win32WSControls, uImport {$IF DEFINED(DARKWIN)} , uDarkStyle {$ENDIF} ; const ClassNameW: PWideChar = 'TTOTAL_CMD'; // for compatibility with plugins function WinRegister: Boolean; var WindowClassW: WndClassW; begin ZeroMemory(@WindowClassW, SizeOf(WndClassW)); with WindowClassW do begin Style := CS_DBLCLKS; LPFnWndProc := @WindowProc; hInstance := System.HInstance; hIcon := Windows.LoadIcon(MainInstance, 'MAINICON'); if hIcon = 0 then hIcon := Windows.LoadIcon(0, IDI_APPLICATION); hCursor := Windows.LoadCursor(0, IDC_ARROW); LPSzClassName := ClassNameW; end; Result := Windows.RegisterClassW(@WindowClassW) <> 0; end; var __GetProp: function(hWnd: HWND; lpString: LPCSTR): HANDLE; stdcall; __SetProp: function(hWnd: HWND; lpString: LPCSTR; hData: HANDLE): WINBOOL; stdcall; __CreateWindowExW: function(dwExStyle: DWORD; lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD; X: longint; Y: longint; nWidth: longint; nHeight: longint; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: LPVOID): HWND; stdcall; function _GetProp(hWnd: HWND; lpString: LPCSTR): HANDLE; stdcall; var Atom: UIntPtr absolute lpString; begin if (Atom > MAXWORD) and (lpString = 'WinControl') then Result:= __GetProp(hWnd, 'WinControlDC') else Result:= __GetProp(hWnd, lpString); end; function _SetProp(hWnd: HWND; lpString: LPCSTR; hData: HANDLE): WINBOOL; stdcall; var Atom: UIntPtr absolute lpString; begin if (Atom > MAXWORD) and (lpString = 'WinControl') then Result:= __SetProp(hWnd, 'WinControlDC', hData) else Result:= __SetProp(hWnd, lpString, hData); end; function _CreateWindowExW(dwExStyle: DWORD; lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD; X: longint; Y: longint; nWidth: longint; nHeight: longint; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: LPVOID): HWND; stdcall; var AParams: PNCCreateParams absolute lpParam; begin if (hWndParent = 0) and Assigned(AParams) and (AParams^.WinControl is TfrmMain) then lpClassName:= ClassNameW; Result:= __CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); end; procedure Initialize; var hModule: THandle; pLibrary, pFunction: PPointer; begin pLibrary:= FindImportLibrary(MainInstance, user32); if Assigned(pLibrary) then begin hModule:= GetModuleHandle(user32); {$IF DEFINED(DARKWIN)} if not g_darkModeEnabled then {$ENDIF} begin pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'CreateWindowExW')); if Assigned(pFunction) then begin WinRegister; Pointer(__CreateWindowExW):= ReplaceImportFunction(pFunction, @_CreateWindowExW); end; end; // Prevent plugins written in Lazarus from crashing by changing the name for // GetProp/SetProp to store control data from 'WinControl' to 'WinControlDC' pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'GetPropA')); if Assigned(pFunction) then begin Pointer(__GetProp):= ReplaceImportFunction(pFunction, @_GetProp); end; pFunction:= FindImportFunction(pLibrary, GetProcAddress(hModule, 'SetPropA')); if Assigned(pFunction) then begin Pointer(__SetProp):= ReplaceImportFunction(pFunction, @_SetProp); end; end; Windows.GlobalDeleteAtom(WindowInfoAtom); WindowInfoAtom := Windows.GlobalAddAtom('WindowInfoDC'); end; initialization Initialize; finalization {$IF DEFINED(DARKWIN)} if not g_darkModeEnabled then {$ENDIF} Windows.UnregisterClassW(PWideChar(ClassNameW), System.HInstance); end. doublecmd-1.1.30/src/platform/win/udarkstyle.pas0000644000175000001440000002202215104114162020667 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Dark mode support unit (Windows 10 + Qt5). Copyright (C) 2019-2021 Richard Yu Copyright (C) 2019-2022 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit uDarkStyle; {$mode delphi} interface uses Classes, SysUtils, Windows; var g_buildNumber: DWORD = 0; g_darkModeEnabled: bool = false; g_darkModeSupported: bool = false; {$IF DEFINED(LCLQT5)} procedure ApplyDarkStyle; {$ENDIF} procedure RefreshTitleBarThemeColor(hWnd: HWND); function AllowDarkModeForWindow(hWnd: HWND; allow: bool): bool; implementation uses UxTheme, JwaWinUser, FileInfo, uEarlyConfig {$IF DEFINED(LCLQT5)} , Qt5 {$ENDIF} ; type // Insider 18334 TPreferredAppMode = ( pamDefault, pamAllowDark, pamForceDark, pamForceLight ); var AppMode: TPreferredAppMode; var RtlGetNtVersionNumbers: procedure(major, minor, build: LPDWORD); stdcall; DwmSetWindowAttribute: function(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall; // 1809 17763 _ShouldAppsUseDarkMode: function(): bool; stdcall; // ordinal 132 _AllowDarkModeForWindow: function(hWnd: HWND; allow: bool): bool; stdcall; // ordinal 133 _AllowDarkModeForApp: function(allow: bool): bool; stdcall; // ordinal 135, removed since 18334 _RefreshImmersiveColorPolicyState: procedure(); stdcall; // ordinal 104 _IsDarkModeAllowedForWindow: function(hWnd: HWND): bool; stdcall; // ordinal 137 // Insider 18334 _SetPreferredAppMode: function(appMode: TPreferredAppMode): TPreferredAppMode; stdcall; // ordinal 135, since 18334 function AllowDarkModeForWindow(hWnd: HWND; allow: bool): bool; begin if (g_darkModeSupported) then Result:= _AllowDarkModeForWindow(hWnd, allow) else Result:= false; end; function IsHighContrast(): bool; var highContrast: HIGHCONTRASTW; begin highContrast.cbSize:= SizeOf(HIGHCONTRASTW); if (SystemParametersInfoW(SPI_GETHIGHCONTRAST, SizeOf(highContrast), @highContrast, 0)) then Result:= (highContrast.dwFlags and HCF_HIGHCONTRASTON <> 0) else Result:= false; end; function ShouldAppsUseDarkMode: Boolean; begin Result:= (_ShouldAppsUseDarkMode() or (AppMode = pamForceDark)) and not IsHighContrast(); end; procedure RefreshTitleBarThemeColor(hWnd: HWND); const DWMWA_USE_IMMERSIVE_DARK_MODE_OLD = 19; DWMWA_USE_IMMERSIVE_DARK_MODE_NEW = 20; var dark: BOOL; dwAttribute: DWORD; begin dark:= (_IsDarkModeAllowedForWindow(hWnd) and ShouldAppsUseDarkMode); if (Win32BuildNumber < 19041) then dwAttribute:= DWMWA_USE_IMMERSIVE_DARK_MODE_OLD else begin dwAttribute:= DWMWA_USE_IMMERSIVE_DARK_MODE_NEW; end; DwmSetWindowAttribute(hwnd, dwAttribute, @dark, SizeOf(dark)); end; procedure AllowDarkModeForApp(allow: bool); begin if Assigned(_AllowDarkModeForApp) then _AllowDarkModeForApp(allow) else if Assigned(_SetPreferredAppMode) then begin if (allow) then _SetPreferredAppMode(AppMode) else _SetPreferredAppMode(pamDefault); end; end; {$IF DEFINED(LCLQT5)} procedure ApplyDarkStyle; const StyleName: WideString = 'Fusion'; var AColor: TQColor; APalette: QPaletteH; function QColor(R: Integer; G: Integer; B: Integer; A: Integer = 255): PQColor; begin Result:= @AColor; QColor_fromRgb(Result, R, G, B, A); end; begin g_darkModeEnabled:= True; QApplication_setStyle(QStyleFactory_create(@StyleName)); APalette:= QPalette_Create(); // Modify palette to dark QPalette_setColor(APalette, QPaletteWindow, QColor(53, 53, 53)); QPalette_setColor(APalette, QPaletteWindowText, QColor(255, 255, 255)); QPalette_setColor(APalette, QPaletteDisabled, QPaletteWindowText, QColor(127, 127, 127)); QPalette_setColor(APalette, QPaletteBase, QColor(42, 42, 42)); QPalette_setColor(APalette, QPaletteAlternateBase, QColor(66, 66, 66)); QPalette_setColor(APalette, QPaletteToolTipBase, QColor(255, 255, 255)); QPalette_setColor(APalette, QPaletteToolTipText, QColor(53, 53, 53)); QPalette_setColor(APalette, QPaletteText, QColor(255, 255, 255)); QPalette_setColor(APalette, QPaletteDisabled, QPaletteText, QColor(127, 127, 127)); QPalette_setColor(APalette, QPaletteDark, QColor(35, 35, 35)); QPalette_setColor(APalette, QPaletteLight, QColor(66, 66, 66)); QPalette_setColor(APalette, QPaletteShadow, QColor(20, 20, 20)); QPalette_setColor(APalette, QPaletteButton, QColor(53, 53, 53)); QPalette_setColor(APalette, QPaletteButtonText, QColor(255, 255, 255)); QPalette_setColor(APalette, QPaletteDisabled, QPaletteButtonText, QColor(127, 127, 127)); QPalette_setColor(APalette, QPaletteBrightText, QColor(255, 0, 0)); QPalette_setColor(APalette, QPaletteLink, QColor(42, 130, 218)); QPalette_setColor(APalette, QPaletteHighlight, QColor(42, 130, 218)); QPalette_setColor(APalette, QPaletteDisabled, QPaletteHighlight, QColor(80, 80, 80)); QPalette_setColor(APalette, QPaletteHighlightedText, QColor(255, 255, 255)); QPalette_setColor(APalette, QPaletteDisabled, QPaletteHighlightedText, QColor(127, 127, 127)); QApplication_setPalette(APalette); end; {$ENDIF} const LOAD_LIBRARY_SEARCH_SYSTEM32 = $800; function CheckBuildNumber(buildNumber: DWORD): Boolean; inline; begin Result := (buildNumber = 17763) or // Win 10: 1809 (buildNumber = 18362) or // Win 10: 1903 & 1909 (buildNumber = 19041) or // Win 10: 2004 & 20H2 & 21H1 & 21H2 (buildNumber = 22000) or // Win 11: 21H2 (buildNumber > 22000); // Win 11: Insider Preview end; function GetBuildNumber(Instance: THandle): DWORD; begin try with TVersionInfo.Create do try Load(Instance); Result:= FixedInfo.FileVersion[2]; finally Free; end; except Exit(0); end; end; procedure InitDarkMode(); var hUxtheme: HMODULE; major, minor, build: DWORD; begin @RtlGetNtVersionNumbers := GetProcAddress(GetModuleHandleW('ntdll.dll'), 'RtlGetNtVersionNumbers'); if Assigned(RtlGetNtVersionNumbers) then begin RtlGetNtVersionNumbers(@major, @minor, @build); if (major = 10) and (minor = 0) then begin hUxtheme := LoadLibraryExW('uxtheme.dll', 0, LOAD_LIBRARY_SEARCH_SYSTEM32); if (hUxtheme <> 0) then begin g_buildNumber:= GetBuildNumber(hUxtheme); if CheckBuildNumber(g_buildNumber) then begin @_RefreshImmersiveColorPolicyState := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(104)); @_ShouldAppsUseDarkMode := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(132)); @_AllowDarkModeForWindow := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(133)); if (g_buildNumber < 18362) then @_AllowDarkModeForApp := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(135)) else @_SetPreferredAppMode := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(135)); @_IsDarkModeAllowedForWindow := GetProcAddress(hUxtheme, MAKEINTRESOURCEA(137)); @DwmSetWindowAttribute := GetProcAddress(LoadLibrary('dwmapi.dll'), 'DwmSetWindowAttribute'); if Assigned(_RefreshImmersiveColorPolicyState) and Assigned(_ShouldAppsUseDarkMode) and Assigned(_AllowDarkModeForWindow) and (Assigned(_AllowDarkModeForApp) or Assigned(_SetPreferredAppMode)) and Assigned(_IsDarkModeAllowedForWindow) then begin g_darkModeSupported := true; AppMode := TPreferredAppMode(gAppMode); if AppMode <> pamForceLight then begin AllowDarkModeForApp(true); _RefreshImmersiveColorPolicyState(); g_darkModeEnabled := ShouldAppsUseDarkMode; if g_darkModeEnabled then AppMode := pamForceDark; end; end; end; end; end; end; end; initialization InitDarkMode; end. doublecmd-1.1.30/src/platform/win/ubitmap.pas0000644000175000001440000002762615104114162020160 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Windows specific bitmap functions Copyright (C) 2020 Alexander Koblov (alexx2000@mail.ru) Based on Win32Proc.pas from the Lazarus Component Library (LCL) See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the copyright. 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. } unit uBitmap; {$mode objfpc}{$H+} interface uses LCLIntf, Classes, Graphics, Windows, LCLVersion; function BitmapCreateFromHICON(Handle: HICON): Graphics.TBitmap; function BitmapCreateFromHBITMAP(Handle: HBITMAP): Graphics.TBitmap; implementation uses FPImage, GraphType, Forms, IntfGraphics {$IF DEFINED(LCLQT5) OR (LCL_FULLVERSION >= 3000000)} , SysUtils, LCLProc {$ENDIF} ; {$IF DEFINED(LCLQT5) OR (LCL_FULLVERSION >= 3000000)} procedure FillRawImageDescriptionColors(var ADesc: TRawImageDescription); begin case ADesc.BitsPerPixel of 1,4,8: begin // palette mode, no offsets ADesc.Format := ricfGray; ADesc.RedPrec := ADesc.BitsPerPixel; ADesc.GreenPrec := 0; ADesc.BluePrec := 0; ADesc.RedShift := 0; ADesc.GreenShift := 0; ADesc.BlueShift := 0; end; 16: begin // 5-5-5 mode ADesc.RedPrec := 5; ADesc.GreenPrec := 5; ADesc.BluePrec := 5; ADesc.RedShift := 10; ADesc.GreenShift := 5; ADesc.BlueShift := 0; ADesc.Depth := 15; end; 24: begin // 8-8-8 mode ADesc.RedPrec := 8; ADesc.GreenPrec := 8; ADesc.BluePrec := 8; ADesc.RedShift := 16; ADesc.GreenShift := 8; ADesc.BlueShift := 0; end; else // 32: // 8-8-8-8 mode, high byte can be native alpha or custom 1bit maskalpha ADesc.AlphaPrec := 8; ADesc.RedPrec := 8; ADesc.GreenPrec := 8; ADesc.BluePrec := 8; ADesc.AlphaShift := 24; ADesc.RedShift := 16; ADesc.GreenShift := 8; ADesc.BlueShift := 0; ADesc.Depth := 32; end; end; procedure FillRawImageDescription(const ABitmapInfo: Windows.TBitmap; out ADesc: TRawImageDescription); begin ADesc.Init; ADesc.Format := ricfRGBA; ADesc.Depth := ABitmapInfo.bmBitsPixel; // used bits per pixel ADesc.Width := ABitmapInfo.bmWidth; ADesc.Height := ABitmapInfo.bmHeight; ADesc.BitOrder := riboReversedBits; ADesc.ByteOrder := riboLSBFirst; ADesc.LineOrder := riloTopToBottom; ADesc.BitsPerPixel := ABitmapInfo.bmBitsPixel; // bits per pixel. can be greater than Depth. ADesc.LineEnd := rileDWordBoundary; if ABitmapInfo.bmBitsPixel <= 8 then begin // each pixel is an index in the palette // TODO, ColorCount ADesc.PaletteColorCount := 0; end else ADesc.PaletteColorCount := 0; FillRawImageDescriptionColors(ADesc); ADesc.MaskBitsPerPixel := 1; ADesc.MaskShift := 0; ADesc.MaskLineEnd := rileWordBoundary; // CreateBitmap requires word boundary ADesc.MaskBitOrder := riboReversedBits; end; function GetBitmapOrder(AWinBmp: Windows.TBitmap; ABitmap: HBITMAP): TRawImageLineOrder; procedure DbgLog(const AFunc: String); begin DebugLn('GetBitmapOrder - GetDIBits ', AFunc, ' failed: ', SysErrorMessage(Windows.GetLastError)); end; var SrcPixel: PCardinal absolute AWinBmp.bmBits; OrgPixel, TstPixel: Cardinal; Scanline: Pointer; DC: HDC; Info: record Header: Windows.TBitmapInfoHeader; Colors: array[Byte] of Cardinal; // reserve extra color for colormasks end; FullScanLine: Boolean; // win9x requires a full scanline to be retrieved // others won't fail when one pixel is requested begin if AWinBmp.bmBits = nil then begin // no DIBsection so always bottom-up Exit(riloBottomToTop); end; // try to figure out the orientation of the given bitmap. // Unfortunately MS doesn't provide a direct function for this. // So modify the first pixel to see if it changes. This pixel is always part // of the first scanline of the given bitmap. // When we request the data through GetDIBits as bottom-up, windows adjusts // the data when it is a top-down. So if the pixel doesn't change the bitmap // was internally a top-down image. FullScanLine := Win32Platform = VER_PLATFORM_WIN32_WINDOWS; if FullScanLine then ScanLine := GetMem(AWinBmp.bmWidthBytes) else ScanLine := nil; FillChar(Info.Header, sizeof(Windows.TBitmapInfoHeader), 0); Info.Header.biSize := sizeof(Windows.TBitmapInfoHeader); DC := Windows.GetDC(0); if Windows.GetDIBits(DC, ABitmap, 0, 1, nil, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) = 0 then begin DbgLog('Getinfo'); // failed ??? Windows.ReleaseDC(0, DC); Exit(riloBottomToTop); end; // Get only 1 pixel (or full scanline for win9x) OrgPixel := 0; if FullScanLine then begin if Windows.GetDIBits(DC, ABitmap, 0, 1, ScanLine, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) = 0 then DbgLog('OrgPixel') else OrgPixel := PCardinal(ScanLine)^; end else begin Info.Header.biWidth := 1; if Windows.GetDIBits(DC, ABitmap, 0, 1, @OrgPixel, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) = 0 then DbgLog('OrgPixel'); end; // modify pixel SrcPixel^ := not SrcPixel^; // get test TstPixel := 0; if FullScanLine then begin if Windows.GetDIBits(DC, ABitmap, 0, 1, ScanLine, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) = 0 then DbgLog('TstPixel') else TstPixel := PCardinal(ScanLine)^; end else begin if Windows.GetDIBits(DC, ABitmap, 0, 1, @TstPixel, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) = 0 then DbgLog('TstPixel'); end; if OrgPixel = TstPixel then Result := riloTopToBottom else Result := riloBottomToTop; // restore pixel & cleanup SrcPixel^ := not SrcPixel^; Windows.ReleaseDC(0, DC); if FullScanLine then FreeMem(Scanline); end; function GetBitmapBytes(AWinBmp: Windows.TBitmap; ABitmap: HBITMAP; const ARect: TRect; ALineEnd: TRawImageLineEnd; ALineOrder: TRawImageLineOrder; out AData: Pointer; out ADataSize: PtrUInt): Boolean; var DC: HDC; Info: record Header: Windows.TBitmapInfoHeader; Colors: array[Byte] of TRGBQuad; // reserve extra colors for palette (256 max) end; H: Cardinal; R: TRect; SrcData: PByte; SrcSize: PtrUInt; SrcLineBytes: Cardinal; SrcLineOrder: TRawImageLineOrder; StartScan: Integer; begin SrcLineOrder := GetBitmapOrder(AWinBmp, ABitmap); SrcLineBytes := (AWinBmp.bmWidthBytes + 3) and not 3; if AWinBmp.bmBits <> nil then begin // this is bitmapsection data :) we can just copy the bits // We cannot trust windows with bmWidthBytes. Use SrcLineBytes which takes // DWORD alignment into consideration with AWinBmp do Result := CopyImageData(bmWidth, bmHeight, SrcLineBytes, bmBitsPixel, bmBits, ARect, SrcLineOrder, ALineOrder, ALineEnd, AData, ADataSize); Exit; end; // retrieve the data though GetDIBits // initialize bitmapinfo structure Info.Header.biSize := sizeof(Info.Header); Info.Header.biPlanes := 1; Info.Header.biBitCount := AWinBmp.bmBitsPixel; Info.Header.biCompression := BI_RGB; Info.Header.biSizeImage := 0; Info.Header.biWidth := AWinBmp.bmWidth; H := ARect.Bottom - ARect.Top; // request a top-down DIB if AWinBmp.bmHeight > 0 then begin Info.Header.biHeight := -AWinBmp.bmHeight; StartScan := AWinBmp.bmHeight - ARect.Bottom; end else begin Info.Header.biHeight := AWinBmp.bmHeight; StartScan := ARect.Top; end; // adjust height if StartScan < 0 then begin Inc(H, StartScan); StartScan := 0; end; // alloc buffer SrcSize := SrcLineBytes * H; GetMem(SrcData, SrcSize); DC := Windows.GetDC(0); Result := Windows.GetDIBits(DC, ABitmap, StartScan, H, SrcData, Windows.PBitmapInfo(@Info)^, DIB_RGB_COLORS) <> 0; Windows.ReleaseDC(0, DC); // since we only got the needed scanlines, adjust top and bottom R.Left := ARect.Left; R.Top := 0; R.Right := ARect.Right; R.Bottom := H; with Info.Header do Result := Result and CopyImageData(biWidth, H, SrcLineBytes, biBitCount, SrcData, R, riloTopToBottom, ALineOrder, ALineEnd, AData, ADataSize); FreeMem(SrcData); end; function RawImage_FromBitmap(out ARawImage: TRawImage; ABitmap, AMask: HBITMAP; ARect: PRect = nil): Boolean; var WinDIB: Windows.TDIBSection; WinBmp: Windows.TBitmap absolute WinDIB.dsBm; ASize: Integer; R: TRect; begin ARawImage.Init; FillChar(WinDIB, SizeOf(WinDIB), 0); ASize := Windows.GetObject(ABitmap, SizeOf(WinDIB), @WinDIB); if ASize = 0 then Exit(False); //DbgDumpBitmap(ABitmap, 'FromBitmap - Image'); //DbgDumpBitmap(AMask, 'FromMask - Mask'); FillRawImageDescription(WinBmp, ARawImage.Description); // if it is not DIB then alpha in bitmaps is not supported => use 0 alpha prec if ASize < SizeOf(WinDIB) then ARawImage.Description.AlphaPrec := 0; if ARect = nil then begin R := Classes.Rect(0, 0, WinBmp.bmWidth, WinBmp.bmHeight); end else begin R := ARect^; if R.Top > WinBmp.bmHeight then R.Top := WinBmp.bmHeight; if R.Bottom > WinBmp.bmHeight then R.Bottom := WinBmp.bmHeight; if R.Left > WinBmp.bmWidth then R.Left := WinBmp.bmWidth; if R.Right > WinBmp.bmWidth then R.Right := WinBmp.bmWidth; end; ARawImage.Description.Width := R.Right - R.Left; ARawImage.Description.Height := R.Bottom - R.Top; // copy bitmap Result := GetBitmapBytes(WinBmp, ABitmap, R, ARawImage.Description.LineEnd, ARawImage.Description.LineOrder, ARawImage.Data, ARawImage.DataSize); // check mask if AMask <> 0 then begin if Windows.GetObject(AMask, SizeOf(WinBmp), @WinBmp) = 0 then Exit(False); Result := GetBitmapBytes(WinBmp, AMask, R, ARawImage.Description.MaskLineEnd, ARawImage.Description.LineOrder, ARawImage.Mask, ARawImage.MaskSize); end else begin ARawImage.Description.MaskBitsPerPixel := 0; end; end; {$ENDIF} function BitmapCreateFromHICON(Handle: HICON): Graphics.TBitmap; var Index: Integer; IconInfo: TIconInfo; ARawImage: TRawImage; AImage: TLazIntfImage; begin Result:= Graphics.TBitmap.Create; if Windows.GetIconInfo(Handle, IconInfo) = False then Exit; if RawImage_FromBitmap(ARawImage, IconInfo.hbmColor, IconInfo.hbmMask) then begin // Check if the bitmap has alpha channel if (ARawImage.Description.BitsPerPixel = 32) and (ScreenInfo.ColorDepth = 32) then begin for Index:= 0 to (ARawImage.DataSize div 4) - 1 do begin if (PLongWord(ARawImage.Data)[Index] shr ARawImage.Description.AlphaShift) and $FF <> 0 then begin ARawImage.Description.AlphaPrec:= 8; Break; end; end; // Invalid alpha channel, use mask instead if ARawImage.Description.AlphaPrec = 0 then begin ARawImage.Description.AlphaPrec:= 8; AImage:= TLazIntfImage.Create(ARawImage, False); AImage.AlphaFromMask(False); AImage.Free; end; end; Result.LoadFromRawImage(ARawImage, True); end; Windows.DeleteObject(IconInfo.hbmMask); Windows.DeleteObject(IconInfo.hbmColor); end; function BitmapCreateFromHBITMAP(Handle: HBITMAP): Graphics.TBitmap; {$IF DEFINED(LCLWIN32)} begin Result:= Graphics.TBitmap.Create; Result.Handle:= Handle; end; {$ELSE} var ARawImage: TRawImage; begin Result:= Graphics.TBitmap.Create; if RawImage_FromBitmap(ARawImage, Handle, 0) then begin Result.LoadFromRawImage(ARawImage, True); end; end; {$ENDIF} end. doublecmd-1.1.30/src/platform/win/uTotalCommander.pas0000644000175000001440000031721315104114162021607 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Total Commander integration functions Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } { Equivalence of some abbreviation here: TC = Total Commander DC = Double Commander } unit uTotalCommander; {$MODE DELPHI} interface uses //Lazarus, Free-Pascal, etc. Windows, Classes, //DC DCXmlConfig, uFormCommands, KASToolItems, KASToolBar; const TCCONFIG_MAINBAR_NOTPRESENT = ':-<#/?*+*?\#>-:'; TCCONFIG_BUTTONBAR_SECTION = 'Buttonbar'; TCCONFIG_BUTTONBAR_COUNT = 'Buttoncount'; TCCONFIG_DEFAULTBAR_FILENAME = 'DEFAULT.bar'; TCCONFIG_BUTTONHEIGHT = 'Buttonheight'; TCCONFIG_BUTTON_PREFIX = 'button'; TCCONFIG_ICONIC_PREFIX = 'iconic'; TCCONFIG_CMD_PREFIX = 'cmd'; TCCONFIG_STARTINGPATH_PREFIX = 'path'; TCCONFIG_HINT_PREFIX = 'menu'; TCCONFIG_PARAM_PREFIX = 'param'; var sTotalCommanderMainbarFilename: string = TCCONFIG_MAINBAR_NOTPRESENT; function ConvertTCStringToString(TCString: ansistring): string; function ConvertStringToTCString(sString: string): ansistring; function ReplaceDCEnvVars(const sText: string): string; function ReplaceTCEnvVars(const sText: string): string; function areWeInSituationToPlayWithTCFiles: boolean; function GetActualTCIni(NormalizedTCIniFilename, SectionName: String): String; function GetTCEquivalentCommandToDCCommand(DCCommand: string; var TCIndexOfCommand: integer): string; function GetTCIconFromDCIconAndCreateIfNecessary(const DCIcon: string): string; function GetTCEquivalentCommandIconToDCCommandIcon(DCIcon: string; TCIndexOfCommand: integer): string; procedure ExportDCToolbarsToTC(Toolbar: TKASToolbar; Barfilename: string; FlushExistingContent, FlagNeedToUpdateConfigIni: boolean); procedure ConvertTCToolbarToDCXmlConfig(sTCBarFilename: string; ADCXmlConfig:TXmlConfig); implementation uses //Lazarus, Free-Pascal, etc. Graphics, LCLVersion, Forms, SysUtils, LCLProc, LazUTF8, //DC fOptionsMisc, uKASToolItemsExtended, DCClassesUtf8, DCOSUtils, DCStrUtils, uPixMapManager, uShowMsg, uDCUtils, uLng, uGlobs, uGlobsPaths, DCConvertEncoding, uMyWindows; type { TTCommandEquivalence } TTCommandEquivalence = record TCCommand: string; TCIcon: longint; DCCommand: string; DCParameters: string; end; const NUMBEROFCOMMANDS = 465; //jcf:format=off COMMANDS_LIST_TC: array[1..NUMBEROFCOMMANDS] of TTCommandEquivalence = ( (TCCommand: 'cm_SrcComments'; TCIcon: 21; DCCommand: ''; DCParameters: '' ), //Source: Show comments (TCCommand: 'cm_SrcShort'; TCIcon: 3; DCCommand: 'cm_BriefView'; DCParameters: '' ), //Source: Only file names (TCCommand: 'cm_SrcLong'; TCIcon: 4; DCCommand: 'cm_ColumnsView'; DCParameters: '' ), //Source: All file details (TCCommand: 'cm_SrcTree'; TCIcon: 2; DCCommand: ''; DCParameters: '' ), //Source: Directory tree (TCCommand: 'cm_SrcQuickview'; TCIcon: 22; DCCommand: 'cm_QuickView'; DCParameters: '' ), //Source: Quick view panel (TCCommand: 'cm_VerticalPanels'; TCIcon: 23; DCCommand: 'cm_HorizontalFilePanels'; DCParameters: '' ), //File windows above each other (TCCommand: 'cm_SrcQuickInternalOnly'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Source: Quick view, no plugins (TCCommand: 'cm_SrcHideQuickview'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Source: Quick view panel off (TCCommand: 'cm_SrcExecs'; TCIcon: 12; DCCommand: ''; DCParameters: '' ), //Source: Only programs (TCCommand: 'cm_SrcAllFiles'; TCIcon: 13; DCCommand: ''; DCParameters: '' ), //Source: All files (TCCommand: 'cm_SrcUserSpec'; TCIcon: 24; DCCommand: ''; DCParameters: '' ), //Source: Last selected (TCCommand: 'cm_SrcUserDef'; TCIcon: 25; DCCommand: ''; DCParameters: '' ), //Source: Select user type (TCCommand: 'cm_SrcByName'; TCIcon: 5; DCCommand: 'cm_SortByName'; DCParameters: '' ), //Source: Sort by name (TCCommand: 'cm_SrcByExt'; TCIcon: 6; DCCommand: 'cm_SortByExt'; DCParameters: '' ), //Source: Sort by extension (TCCommand: 'cm_SrcBySize'; TCIcon: 8; DCCommand: 'cm_SortBySize'; DCParameters: '' ), //Source: Sort by size (TCCommand: 'cm_SrcByDateTime'; TCIcon: 7; DCCommand: 'cm_SortByDate'; DCParameters: '' ), //Source: Sort by date (TCCommand: 'cm_SrcUnsorted'; TCIcon: 9; DCCommand: ''; DCParameters: '' ), //Source: Unsorted (TCCommand: 'cm_SrcNegOrder'; TCIcon: 10; DCCommand: 'cm_ReverseOrder'; DCParameters: '' ), //Source: Reversed order (TCCommand: 'cm_SrcOpenDrives'; TCIcon: -1; DCCommand: 'cm_SrcOpenDrives'; DCParameters: '' ), //Source: Open drive list (TCCommand: 'cm_SrcThumbs'; TCIcon: 26; DCCommand: 'cm_ThumbnailsView'; DCParameters: '' ), //Source: Thumbnail view (TCCommand: 'cm_SrcCustomViewMenu'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), //Source: Custom view menu (TCCommand: 'cm_SrcPathFocus'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Source: Put focus on path (TCCommand: 'cm_LeftComments'; TCIcon: 21; DCCommand: ''; DCParameters: '' ), //Left: Show comments (TCCommand: 'cm_LeftShort'; TCIcon: 3; DCCommand: 'cm_LeftBriefView'; DCParameters: '' ), //Left: Only file names (TCCommand: 'cm_LeftLong'; TCIcon: 4; DCCommand: 'cm_LeftColumnsView'; DCParameters: '' ), //Left: All file details (TCCommand: 'cm_LeftTree'; TCIcon: 2; DCCommand: ''; DCParameters: '' ), //Left: Directory tree (TCCommand: 'cm_LeftQuickview'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Left: Quick view panel (TCCommand: 'cm_LeftQuickInternalOnly'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Left: Quick view, no plugins (TCCommand: 'cm_LeftHideQuickview'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Left: Quick view panel off (TCCommand: 'cm_LeftExecs'; TCIcon: 12; DCCommand: ''; DCParameters: '' ), //Left: Only programs (TCCommand: 'cm_LeftAllFiles'; TCIcon: 13; DCCommand: ''; DCParameters: '' ), //Left: All files (TCCommand: 'cm_LeftUserSpec'; TCIcon: 24; DCCommand: ''; DCParameters: '' ), //Left: Last selected (TCCommand: 'cm_LeftUserDef'; TCIcon: 25; DCCommand: ''; DCParameters: '' ), //Left: Select user type (TCCommand: 'cm_LeftByName'; TCIcon: 5; DCCommand: 'cm_LeftSortByName'; DCParameters: '' ), //Left: Sort by name (TCCommand: 'cm_LeftByExt'; TCIcon: 6; DCCommand: 'cm_LeftSortByExt'; DCParameters: '' ), //Left: Sort by extension (TCCommand: 'cm_LeftBySize'; TCIcon: 8; DCCommand: 'cm_LeftSortBySize'; DCParameters: '' ), //Left: Sort by size (TCCommand: 'cm_LeftByDateTime'; TCIcon: 7; DCCommand: 'cm_LeftSortByDate'; DCParameters: '' ), //Left: Sort by date (TCCommand: 'cm_LeftUnsorted'; TCIcon: 9; DCCommand: ''; DCParameters: '' ), //Left: Unsorted (TCCommand: 'cm_LeftNegOrder'; TCIcon: 10; DCCommand: 'cm_LeftReverseOrder'; DCParameters: '' ), //Left: Reversed order (TCCommand: 'cm_LeftOpenDrives'; TCIcon: -1; DCCommand: 'cm_LeftOpenDrives'; DCParameters: '' ), //Left: Open drive list (TCCommand: 'cm_LeftPathFocus'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Left: Put focus on path (TCCommand: 'cm_LeftDirBranch'; TCIcon: 50; DCCommand: 'cm_LeftFlatView'; DCParameters: '' ), //Left: Branch view (TCCommand: 'cm_LeftDirBranchSel'; TCIcon: 50; DCCommand: ''; DCParameters: '' ), //Left: branch view, only selected (TCCommand: 'cm_LeftThumbs'; TCIcon: 26; DCCommand: 'cm_LeftThumbView'; DCParameters: '' ), //Left: Thumbnail view (TCCommand: 'cm_LeftCustomViewMenu'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), //Left: Custom view menu (TCCommand: 'cm_RightComments'; TCIcon: 21; DCCommand: ''; DCParameters: '' ), //Right: Show comments (TCCommand: 'cm_RightShort'; TCIcon: 3; DCCommand: 'cm_RightBriefView'; DCParameters: '' ), //Right: Only file names (TCCommand: 'cm_RightLong'; TCIcon: 4; DCCommand: 'cm_RightColumnsView'; DCParameters: '' ), //Right: All file details (TCCommand: 'cm_RightTree'; TCIcon: 2; DCCommand: ''; DCParameters: '' ), //Right: Directory tree (TCCommand: 'cm_RightQuickview'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Right: Quick view panel (TCCommand: 'cm_RightQuickInternalOnly'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Right: Quick view, no plugins (TCCommand: 'cm_RightHideQuickview'; TCIcon: 22; DCCommand: ''; DCParameters: '' ), //Right: Quick view panel off (TCCommand: 'cm_RightExecs'; TCIcon: 12; DCCommand: ''; DCParameters: '' ), //Right: Only programs (TCCommand: 'cm_RightAllFiles'; TCIcon: 13; DCCommand: ''; DCParameters: '' ), //Right: All files (TCCommand: 'cm_RightUserSpec'; TCIcon: 24; DCCommand: ''; DCParameters: '' ), //Right: Last selected (TCCommand: 'cm_RightUserDef'; TCIcon: 25; DCCommand: ''; DCParameters: '' ), //Right: Select user type (TCCommand: 'cm_RightByName'; TCIcon: 5; DCCommand: ''; DCParameters: '' ), //Right: Sort by name (TCCommand: 'cm_RightByExt'; TCIcon: 6; DCCommand: 'cm_RightSortByName'; DCParameters: '' ), //Right: Sort by extension (TCCommand: 'cm_RightBySize'; TCIcon: 8; DCCommand: 'cm_RightSortByExt'; DCParameters: '' ), //Right: Sort by size (TCCommand: 'cm_RightByDateTime'; TCIcon: 7; DCCommand: 'cm_RightSortBySize'; DCParameters: '' ), //Right: Sort by date (TCCommand: 'cm_RightUnsorted'; TCIcon: 9; DCCommand: 'cm_RightSortByDate'; DCParameters: '' ), //Right: Unsorted (TCCommand: 'cm_RightNegOrder'; TCIcon: 10; DCCommand: 'cm_RightReverseOrder'; DCParameters: '' ), //Right: Reversed order (TCCommand: 'cm_RightOpenDrives'; TCIcon: -1; DCCommand: 'cm_RightOpenDrives'; DCParameters: '' ), //Right: Open drive list (TCCommand: 'cm_RightPathFocus'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Right: Put focus on path (TCCommand: 'cm_RightDirBranch'; TCIcon: 50; DCCommand: 'cm_RightFlatView'; DCParameters: '' ), //Right: branch view (TCCommand: 'cm_RightDirBranchSel'; TCIcon: 50; DCCommand: ''; DCParameters: '' ), //Right: branch view, only selected (TCCommand: 'cm_RightThumbs'; TCIcon: 26; DCCommand: 'cm_RightThumbView'; DCParameters: '' ), //Right: Thumbnail view (TCCommand: 'cm_RightCustomViewMenu'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), //Right: Custom view menu (TCCommand: 'cm_List'; TCIcon: 27; DCCommand: 'cm_View'; DCParameters: '' ), //View with Lister (TCCommand: 'cm_ListInternalOnly'; TCIcon: 27; DCCommand: 'cm_view'; DCParameters: '' ), //Lister without plugins/multimedia (TCCommand: 'cm_Edit'; TCIcon: 28; DCCommand: 'cm_Edit'; DCParameters: '' ), //Edit (Notepad) (TCCommand: 'cm_Copy'; TCIcon: 62; DCCommand: 'cm_Copy'; DCParameters: '' ), //Copy files (TCCommand: 'cm_CopySamepanel'; TCIcon: 62; DCCommand: 'cm_CopySamePanel'; DCParameters: '' ), //Copy within panel (TCCommand: 'cm_CopyOtherpanel'; TCIcon: 62; DCCommand: ''; DCParameters: '' ), //Copy to other (TCCommand: 'cm_RenMov'; TCIcon: 63; DCCommand: 'cm_Rename'; DCParameters: '' ), //Rename/Move files (TCCommand: 'cm_MkDir'; TCIcon: 29; DCCommand: 'cm_MakeDir'; DCParameters: '' ), //Make directory (TCCommand: 'cm_Delete'; TCIcon: 64; DCCommand: 'cm_Delete'; DCParameters: '' ), //Delete files (TCCommand: 'cm_TestArchive'; TCIcon: 60; DCCommand: 'cm_TestArchive'; DCParameters: '' ), //Test selected archives (TCCommand: 'cm_PackFiles'; TCIcon: 30; DCCommand: 'cm_PackFiles'; DCParameters: '' ), //Pack files (TCCommand: 'cm_UnpackFiles'; TCIcon: 31; DCCommand: 'cm_ExtractFiles'; DCParameters: '' ), //Unpack all (TCCommand: 'cm_RenameOnly'; TCIcon: 32; DCCommand: 'cm_RenameOnly'; DCParameters: '' ), //Rename (Shift+F6) (TCCommand: 'cm_RenameSingleFile'; TCIcon: 32; DCCommand: 'cm_RenameOnly'; DCParameters: '' ), //Rename file under cursor (TCCommand: 'cm_MoveOnly'; TCIcon: 63; DCCommand: ''; DCParameters: '' ), //Move (F6) (TCCommand: 'cm_Properties'; TCIcon: -1; DCCommand: 'cm_FileProperties'; DCParameters: '' ), //Properties dialog (TCCommand: 'cm_CreateShortcut'; TCIcon: 65; DCCommand: ''; DCParameters: '' ), //Create a shortcut (TCCommand: 'cm_Return'; TCIcon: -1; DCCommand: 'cm_Open'; DCParameters: '' ), //Simulate: Return pressed (TCCommand: 'cm_OpenAsUser'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Open program under cursor as different user (TCCommand: 'cm_Split'; TCIcon: 68; DCCommand: 'cm_FileSpliter'; DCParameters: '' ), //Split file into pieces (TCCommand: 'cm_Combine'; TCIcon: 69; DCCommand: 'cm_FileLinker'; DCParameters: '' ), //Combine partial files (TCCommand: 'cm_Encode'; TCIcon: 66; DCCommand: ''; DCParameters: '' ), //Encode MIME/UUE/XXE (TCCommand: 'cm_Decode'; TCIcon: 67; DCCommand: ''; DCParameters: '' ), //Decode MIME/UUE/XXE/BinHex (TCCommand: 'cm_CRCcreate'; TCIcon: -1; DCCommand: 'cm_CheckSumCalc'; DCParameters: '' ), //Create CRC checksums (TCCommand: 'cm_CRCcheck'; TCIcon: 61; DCCommand: 'cm_CheckSumVerify'; DCParameters: '' ), //Verify CRC checksums (TCCommand: 'cm_SetAttrib'; TCIcon: 33; DCCommand: 'cm_SetFileProperties'; DCParameters: '' ), //Change attributes (TCCommand: 'cm_Config'; TCIcon: 34; DCCommand: 'cm_Options'; DCParameters: '' ), //Conf: Layout (first page) (TCCommand: 'cm_DisplayConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Display (TCCommand: 'cm_IconConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Icons (TCCommand: 'cm_FontConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Font (TCCommand: 'cm_ColorConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Colors (TCCommand: 'cm_ConfTabChange'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Tabstops (TCCommand: 'cm_DirTabsConfig'; TCIcon: 34; DCCommand: 'cm_ConfigFolderTabs'; DCParameters: '' ), //Conf: Directory tabs (TCCommand: 'cm_CustomColumnConfig'; TCIcon: 56; DCCommand: ''; DCParameters: '' ), //Conf: Custom colums (TCCommand: 'cm_CustomColumnDlg'; TCIcon: 56; DCCommand: ''; DCParameters: '' ), //Change current custom columns (TCCommand: 'cm_LanguageConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Language (TCCommand: 'cm_Config2'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Operation (TCCommand: 'cm_EditConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Viewer/Editor (TCCommand: 'cm_CopyConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Copy/Delete (TCCommand: 'cm_RefreshConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Refresh file lists (TCCommand: 'cm_QuickSearchConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Quick Search (TCCommand: 'cm_FtpConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //FTP options (TCCommand: 'cm_PluginsConfig'; TCIcon: 34; DCCommand: 'cm_ConfigPlugins'; DCParameters: '' ), //Conf: Plugins (TCCommand: 'cm_ThumbnailsConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Thumbnails (TCCommand: 'cm_LogConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Log file (TCCommand: 'cm_IgnoreConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Ignore list (TCCommand: 'cm_PackerConfig'; TCIcon: 34; DCCommand: 'cm_ConfigArchivers'; DCParameters: '' ), //Conf: Packer (TCCommand: 'cm_ZipPackerConfig'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: ZIP packer (TCCommand: 'cm_Confirmation'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Conf: Misc, Confirmation (TCCommand: 'cm_ConfigSavePos'; TCIcon: -1; DCCommand: 'cm_ConfigSavePos'; DCParameters: '' ), //Conf: Save position (TCCommand: 'cm_ButtonConfig'; TCIcon: 14; DCCommand: 'cm_ConfigToolbars'; DCParameters: '' ), //Conf: Button bar (TCCommand: 'cm_ConfigSaveSettings'; TCIcon: -1; DCCommand: 'cm_ConfigSaveSettings'; DCParameters: '' ), //Save current paths etc. (TCCommand: 'cm_ConfigChangeIniFiles'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Open ini files in notepad (TCCommand: 'cm_ConfigSaveDirHistory'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save directory history (TCCommand: 'cm_ChangeStartMenu'; TCIcon: 34; DCCommand: ''; DCParameters: '' ), //Change Start menu (TCCommand: 'cm_NetConnect'; TCIcon: 53; DCCommand: 'cm_NetworkConnect'; DCParameters: '' ), //Network connections (TCCommand: 'cm_NetDisconnect'; TCIcon: 54; DCCommand: 'cm_NetworkDisconnect'; DCParameters: '' ), //Disconnect network drives (TCCommand: 'cm_NetShareDir'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Share directory (TCCommand: 'cm_NetUnshareDir'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Unshare directory (TCCommand: 'cm_AdministerServer'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Connect to admin share to open \\server\c$ etc. (TCCommand: 'cm_ShowFileUser'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Which remote user has opened a local file (TCCommand: 'cm_GetFileSpace'; TCIcon: -1; DCCommand: 'cm_CalculateSpace'; DCParameters: '' ), //Calculate space (TCCommand: 'cm_VolumeId'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Volume label (TCCommand: 'cm_VersionInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Version information (TCCommand: 'cm_ExecuteDOS'; TCIcon: -1; DCCommand: 'cm_RunTerm'; DCParameters: '' ), //Open command prompt window (TCCommand: 'cm_CompareDirs'; TCIcon: 35; DCCommand: 'cm_CompareDirectories'; DCParameters: '' ), //Compare dirs (TCCommand: 'cm_CompareDirsWithSubdirs'; TCIcon: 35; DCCommand: 'cm_CompareDirectories'; DCParameters: 'directories=on'), //Also mark subdirs not present in other dir (TCCommand: 'cm_ContextMenu'; TCIcon: -1; DCCommand: 'cm_ContextMenu'; DCParameters: '' ), //Show context menu (TCCommand: 'cm_ContextMenuInternal'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show context menu for internal associations (TCCommand: 'cm_ContextMenuInternalCursor'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Internal context menu for file under cursor (TCCommand: 'cm_ShowRemoteMenu'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Context menu for Media Center remote control Play/Pause (TCCommand: 'cm_SyncChangeDir'; TCIcon: 75; DCCommand: 'cm_SyncChangeDir'; DCParameters: '' ), //Synchronous directory changing in both windows (TCCommand: 'cm_EditComment'; TCIcon: -1; DCCommand: 'cm_EditComment'; DCParameters: '' ), //Edit file comment (TCCommand: 'cm_FocusLeft'; TCIcon: -1; DCCommand: 'cm_FocusSwap'; DCParameters: 'side=left' ), //Focus on left file list (TCCommand: 'cm_FocusRight'; TCIcon: -1; DCCommand: 'cm_FocusSwap'; DCParameters: 'side=right'), //Focus on right file list (TCCommand: 'cm_FocusCmdLine'; TCIcon: -1; DCCommand: 'cm_FocusCmdLine'; DCParameters: '' ), //Focus on command line (TCCommand: 'cm_FocusButtonBar'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Focus on button bar (TCCommand: 'cm_CountDirContent'; TCIcon: 36; DCCommand: 'cm_CountDirContent'; DCParameters: '' ), //Calculate space occupied by subdirs in current dir (TCCommand: 'cm_UnloadPlugins'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Unload all plugins (TCCommand: 'cm_DirMatch'; TCIcon: 35; DCCommand: ''; DCParameters: '' ), //Mark newer (TCCommand: 'cm_Exchange'; TCIcon: 37; DCCommand: 'cm_Exchange'; DCParameters: '' ), //Swap panels (TCCommand: 'cm_MatchSrc'; TCIcon: 86; DCCommand: 'cm_TargetEqualSource'; DCParameters: '' ), //target=Source (TCCommand: 'cm_ReloadSelThumbs'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Re-load selected thumbnails (TCCommand: 'cm_DirectCableConnect'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Connect to other PC by cable (TCCommand: 'cm_NTinstallDriver'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Install parallel port driver on NT (TCCommand: 'cm_NTremoveDriver'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Remove parallel port driver on NT (TCCommand: 'cm_PrintDir'; TCIcon: 38; DCCommand: ''; DCParameters: '' ), //Print current directory (with preview) (TCCommand: 'cm_PrintDirSub'; TCIcon: 38; DCCommand: ''; DCParameters: '' ), //Print dir with subdirs (TCCommand: 'cm_PrintFile'; TCIcon: 38; DCCommand: ''; DCParameters: '' ), //Print file (TCCommand: 'cm_SpreadSelection'; TCIcon: 39; DCCommand: 'cm_MarkPlus'; DCParameters: '' ), //Select group (TCCommand: 'cm_SelectBoth'; TCIcon: 72; DCCommand: 'cm_MarkPlus'; DCParameters: 'attr=' ), //Select group: files+folders (TCCommand: 'cm_SelectFiles'; TCIcon: 70; DCCommand: 'cm_MarkPlus'; DCParameters: 'attr=d-' ), //Select group: just files (TCCommand: 'cm_SelectFolders'; TCIcon: 71; DCCommand: 'cm_MarkPlus'; DCParameters: 'attr=d+' ), //Select group: just folders (TCCommand: 'cm_ShrinkSelection'; TCIcon: 40; DCCommand: 'cm_MarkMinus'; DCParameters: 'attr=' ), //Unselect group (TCCommand: 'cm_ClearFiles'; TCIcon: 40; DCCommand: 'cm_MarkMinus'; DCParameters: 'attr=d+' ), //Unselect group: just files (TCCommand: 'cm_ClearFolders'; TCIcon: 40; DCCommand: 'cm_MarkMinus'; DCParameters: 'attr=d-' ), //Unselect group: just folders (TCCommand: 'cm_ClearSelCfg'; TCIcon: 40; DCCommand: 'cm_MarkMinus'; DCParameters: '' ), //Unselect group (files or both, as configured) (TCCommand: 'cm_SelectAll'; TCIcon: 44; DCCommand: 'cm_MarkMarkAll'; DCParameters: '' ), //Select all (files or both, as configured) (TCCommand: 'cm_SelectAllBoth'; TCIcon: 44; DCCommand: 'cm_MarkMarkAll'; DCParameters: 'attr=' ), //Select both files+folders (TCCommand: 'cm_SelectAllFiles'; TCIcon: 44; DCCommand: 'cm_MarkMarkAll'; DCParameters: 'attr=d-' ), //Select all files (TCCommand: 'cm_SelectAllFolders'; TCIcon: 44; DCCommand: 'cm_MarkMarkAll'; DCParameters: 'attr=d+' ), //Select all folders (TCCommand: 'cm_ClearAll'; TCIcon: -1; DCCommand: 'cm_MarkUnmarkAll'; DCParameters: 'attr=' ), //Unselect all (files+folders) (TCCommand: 'cm_ClearAllFiles'; TCIcon: -1; DCCommand: 'cm_MarkUnmarkAll'; DCParameters: 'attr=d-' ), //Unselect all files (TCCommand: 'cm_ClearAllFolders'; TCIcon: -1; DCCommand: 'cm_MarkUnmarkAll'; DCParameters: 'attr=d+' ), //Unselect all folders (TCCommand: 'cm_ClearAllCfg'; TCIcon: -1; DCCommand: 'cm_MarkUnmarkAll'; DCParameters: '' ), //Unselect all (files or both, as configured) (TCCommand: 'cm_ExchangeSelection'; TCIcon: 11; DCCommand: 'cm_MarkInvert'; DCParameters: '' ), //Invert selection (TCCommand: 'cm_ExchangeSelBoth'; TCIcon: 11; DCCommand: 'cm_MarkInvert'; DCParameters: 'attr=' ), //Invert selection (files+folders) (TCCommand: 'cm_ExchangeSelFiles'; TCIcon: 11; DCCommand: 'cm_MarkInvert'; DCParameters: 'attr=d-' ), //Invert selection (files) (TCCommand: 'cm_ExchangeSelFolders'; TCIcon: 11; DCCommand: 'cm_MarkInvert'; DCParameters: 'attr=d+' ), //Invert selection (folders) (TCCommand: 'cm_SelectCurrentExtension'; TCIcon: 41; DCCommand: 'cm_MarkCurrentExtension'; DCParameters: '' ), //Select all files with same ext. (TCCommand: 'cm_UnselectCurrentExtension'; TCIcon: -1; DCCommand: 'cm_UnmarkCurrentExtension'; DCParameters: '' ), //Unselect all files with same ext. (TCCommand: 'cm_SelectCurrentName'; TCIcon: -1; DCCommand: 'cm_MarkCurrentName'; DCParameters: '' ), //Select all files with same name (TCCommand: 'cm_UnselectCurrentName'; TCIcon: -1; DCCommand: 'cm_UnmarkCurrentName'; DCParameters: '' ), //Unselect all files with same name (TCCommand: 'cm_SelectCurrentNameExt'; TCIcon: -1; DCCommand: 'cm_MarkCurrentNameExt'; DCParameters: '' ), //Select all files with same name+ext. (TCCommand: 'cm_UnselectCurrentNameExt'; TCIcon: -1; DCCommand: 'cm_UnmarkCurrentNameExt'; DCParameters: '' ), //Unselect all files with same name+ext. (TCCommand: 'cm_SelectCurrentPath'; TCIcon: 72; DCCommand: 'cm_MarkCurrentPath'; DCParameters: '' ), //Select all in same path (for branch view+search) (TCCommand: 'cm_UnselectCurrentPath'; TCIcon: -1; DCCommand: 'cm_UnmarkCurrentPath'; DCParameters: '' ), //Unselect all in same path (TCCommand: 'cm_RestoreSelection'; TCIcon: 42; DCCommand: 'cm_RestoreSelection'; DCParameters: '' ), //Selection before last operation (TCCommand: 'cm_SaveSelection'; TCIcon: 43; DCCommand: 'cm_SaveSelection'; DCParameters: '' ), //Temporarily save selection (TCCommand: 'cm_SaveSelectionToFile'; TCIcon: -1; DCCommand: 'cm_SaveSelectionToFile'; DCParameters: '' ), //Save file selection to file (TCCommand: 'cm_SaveSelectionToFileA'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save file selection to file (ANSI) (TCCommand: 'cm_SaveSelectionToFileW'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save file selection to file (Unicode) (TCCommand: 'cm_SaveDetailsToFile'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save all shown columns to file (TCCommand: 'cm_SaveDetailsToFileA'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save all shown columns to file (ANSI) (TCCommand: 'cm_SaveDetailsToFileW'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Save all shown columns to file (Unicode) (TCCommand: 'cm_LoadSelectionFromFile'; TCIcon: -1; DCCommand: 'cm_LoadSelectionFromFile'; DCParameters: '' ), //Read file selection from file (TCCommand: 'cm_LoadSelectionFromClip'; TCIcon: -1; DCCommand: 'cm_LoadSelectionFromClip'; DCParameters: '' ), //Read file selection from clipboard (TCCommand: 'cm_EditPermissionInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Permissions dialog (NTFS) (TCCommand: 'cm_EditPersmissionInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Typo... (TCCommand: 'cm_EditAuditInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //File auditing (NTFS) (TCCommand: 'cm_EditOwnerInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Take ownership (NTFS) (TCCommand: 'cm_CutToClipboard'; TCIcon: -1; DCCommand: 'cm_CutToClipboard'; DCParameters: '' ), //Cut selected files to clipboard (TCCommand: 'cm_CopyToClipboard'; TCIcon: -1; DCCommand: 'cm_CopyToClipboard'; DCParameters: '' ), //Copy selected files to clipboard (TCCommand: 'cm_PasteFromClipboard'; TCIcon: -1; DCCommand: 'cm_PasteFromClipboard'; DCParameters: '' ), //Paste from clipboard to current dir (TCCommand: 'cm_CopyNamesToClip'; TCIcon: 45; DCCommand: 'cm_CopyNamesToClip'; DCParameters: '' ), //Copy filenames to clipboard (TCCommand: 'cm_CopyFullNamesToClip'; TCIcon: 45; DCCommand: 'cm_CopyFullNamesToClip'; DCParameters: '' ), //Copy names with full path (TCCommand: 'cm_CopyNetNamesToClip'; TCIcon: 45; DCCommand: 'cm_CopyNetNamesToClip'; DCParameters: '' ), //Copy names with UNC path (TCCommand: 'cm_CopySrcPathToClip'; TCIcon: 45; DCCommand: ''; DCParameters: '' ), //Copy source path to clipboard (TCCommand: 'cm_CopyTrgPathToClip'; TCIcon: 45; DCCommand: ''; DCParameters: '' ), //Copy target path to clipboard (TCCommand: 'cm_CopyFileDetailsToClip'; TCIcon: 59; DCCommand: 'cm_CopyFileDetailsToClip'; DCParameters: '' ), //Copy all shown columns (TCCommand: 'cm_CopyFpFileDetailsToClip'; TCIcon: 59; DCCommand: ''; DCParameters: '' ), //Copy all columns, with full path (TCCommand: 'cm_CopyNetFileDetailsToClip'; TCIcon: 59; DCCommand: ''; DCParameters: '' ), //Copy all columns, with UNC path (TCCommand: 'cm_FtpConnect'; TCIcon: 16; DCCommand: ''; DCParameters: '' ), //Connect to FTP (TCCommand: 'cm_FtpNew'; TCIcon: 17; DCCommand: ''; DCParameters: '' ), //New FTP connection (TCCommand: 'cm_FtpDisconnect'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Disconnect from FTP (TCCommand: 'cm_FtpHiddenFiles'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show hidden FTP files (TCCommand: 'cm_FtpAbort'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Abort current FTP command (TCCommand: 'cm_FtpResumeDownload'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Resume aborted download (TCCommand: 'cm_FtpSelectTransferMode'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Select Binary, ASCII or Auto mode (TCCommand: 'cm_FtpAddToList'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Add selected files to download list (TCCommand: 'cm_FtpDownloadList'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Download files in download list (TCCommand: 'cm_GotoPreviousDir'; TCIcon: 18; DCCommand: ''; DCParameters: '' ), //Go back (TCCommand: 'cm_GotoNextDir'; TCIcon: 19; DCCommand: ''; DCParameters: '' ), //Go forward (TCCommand: 'cm_DirectoryHistory'; TCIcon: -1; DCCommand: 'cm_DirHistory'; DCParameters: '' ), //History list (TCCommand: 'cm_GotoPreviousLocalDir'; TCIcon: 18; DCCommand: ''; DCParameters: '' ), //Go back, no ftp (TCCommand: 'cm_GotoNextLocalDir'; TCIcon: 19; DCCommand: ''; DCParameters: '' ), //Go forward, no ftp (TCCommand: 'cm_DirectoryHotlist'; TCIcon: -1; DCCommand: 'cm_DirHotList'; DCParameters: '' ), //Directory popup menu (TCCommand: 'cm_GoToRoot'; TCIcon: -1; DCCommand: 'cm_ChangeDirToRoot'; DCParameters: '' ), //Go to root directory (TCCommand: 'cm_GoToParent'; TCIcon: 15; DCCommand: 'cm_ChangeDirToParent'; DCParameters: '' ), //Go to parent directory (TCCommand: 'cm_GoToDir'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Open dir or zip under cursor (TCCommand: 'cm_OpenDesktop'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Desktop folder (TCCommand: 'cm_OpenDrives'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //My computer (TCCommand: 'cm_OpenControls'; TCIcon: 20; DCCommand: ''; DCParameters: '' ), //Control panel (TCCommand: 'cm_OpenFonts'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Fonts folder (TCCommand: 'cm_OpenNetwork'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Network neighborhood (TCCommand: 'cm_OpenPrinters'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Printers folder (TCCommand: 'cm_OpenRecycled'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Recycle bin (TCCommand: 'cm_CDtree'; TCIcon: 1; DCCommand: ''; DCParameters: '' ), //Popup directory tree (TCCommand: 'cm_TransferLeft'; TCIcon: -1; DCCommand: 'cm_TransferLeft'; DCParameters: '' ), //Transfer dir under cursor to left window (TCCommand: 'cm_TransferRight'; TCIcon: -1; DCCommand: 'cm_TransferRight'; DCParameters: '' ), //Transfer dir under cursor to right window (TCCommand: 'cm_EditPath'; TCIcon: -1; DCCommand: 'cm_EditPath'; DCParameters: '' ), //Edit path field above file list (TCCommand: 'cm_GoToFirstEntry'; TCIcon: -1; DCCommand: 'cm_GoToFirstEntry'; DCParameters: '' ), //Place cursor on first folder or file (TCCommand: 'cm_GoToFirstFile'; TCIcon: -1; DCCommand: 'cm_GoToFirstFile'; DCParameters: '' ), //Place cursor on first file in list (TCCommand: 'cm_GotoNextDrive'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Go one drive up (C->D) (TCCommand: 'cm_GotoPreviousDrive'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Go one drive down (TCCommand: 'cm_GotoNextSelected'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Go to next selected file (TCCommand: 'cm_GotoPrevSelected'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Go to previous selected file (TCCommand: 'cm_GotoDriveA'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Switch to drive A (TCCommand: 'cm_GotoDriveC'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Switch to drive C (TCCommand: 'cm_GotoDriveD'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Switch to drive D (TCCommand: 'cm_GotoDriveE'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Switch to drive E (TCCommand: 'cm_GotoDriveF'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //(etc, define your own if) (TCCommand: 'cm_GotoDriveZ'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //(you need more drives) (TCCommand: 'cm_HelpIndex'; TCIcon: 55; DCCommand: 'cm_HelpIndex'; DCParameters: '' ), //Help index (TCCommand: 'cm_Keyboard'; TCIcon: -1; DCCommand: 'cm_Keyboard'; DCParameters: '' ), //Keyboard help (TCCommand: 'cm_Register'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Registration info (TCCommand: 'cm_VisitHomepage'; TCIcon: -1; DCCommand: 'cm_VisitHomePage'; DCParameters: '' ), //Visit http://www.ghisler.com/ (TCCommand: 'cm_About'; TCIcon: -1; DCCommand: 'cm_About'; DCParameters: '' ), //Help/About Total Commander (TCCommand: 'cm_Exit'; TCIcon: -1; DCCommand: 'cm_Exit'; DCParameters: '' ), //Exit Total Commander (TCCommand: 'cm_Minimize'; TCIcon: -1; DCCommand: 'cm_Minimize'; DCParameters: '' ), //Minimize Total Commander (TCCommand: 'cm_Maximize'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Maximize Total Commander (TCCommand: 'cm_Restore'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Restore normal size (TCCommand: 'cm_ClearCmdLine'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Clear command line (TCCommand: 'cm_NextCommand'; TCIcon: -1; DCCommand: 'cm_CmdLineNext'; DCParameters: '' ), //Next command line (TCCommand: 'cm_PrevCommand'; TCIcon: -1; DCCommand: 'cm_CmdLinePrev'; DCParameters: '' ), //Previous command line (TCCommand: 'cm_AddPathToCmdline'; TCIcon: -1; DCCommand: 'cm_AddPathToCmdLine'; DCParameters: '' ), //Copy path to command line (TCCommand: 'cm_MultiRenameFiles'; TCIcon: 46; DCCommand: 'cm_MultiRename'; DCParameters: '' ), //Rename multiple files (TCCommand: 'cm_SysInfo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //System information (TCCommand: 'cm_OpenTransferManager'; TCIcon: 74; DCCommand: ''; DCParameters: '' ), //Background transfer manager (TCCommand: 'cm_SearchFor'; TCIcon: 47; DCCommand: 'cm_Search'; DCParameters: '' ), //Search for (TCCommand: 'cm_SearchStandalone'; TCIcon: 47; DCCommand: ''; DCParameters: '' ), //Search in separate process (TCCommand: 'cm_FileSync'; TCIcon: 48; DCCommand: 'cm_SyncDirs'; DCParameters: '' ), //Synchronize directories (TCCommand: 'cm_Associate'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Associate (TCCommand: 'cm_InternalAssociate'; TCIcon: -1; DCCommand: 'cm_FileAssoc'; DCParameters: '' ), //Define internal associations (TCCommand: 'cm_CompareFilesByContent'; TCIcon: 49; DCCommand: 'cm_CompareContents'; DCParameters: '' ), //File comparison (TCCommand: 'cm_IntCompareFilesByContent'; TCIcon: 49; DCCommand: 'cm_CompareContents'; DCParameters: '' ), //Use internal compare tool (TCCommand: 'cm_CommandBrowser'; TCIcon: 82; DCCommand: ''; DCParameters: '' ), //Browse internal commands (TCCommand: 'cm_VisButtonbar'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide button bar (TCCommand: 'cm_VisDriveButtons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide drive button bars (TCCommand: 'cm_VisTwoDriveButtons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide two drive bars (TCCommand: 'cm_VisFlatDriveButtons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Buttons: Flat/normal mode (TCCommand: 'cm_VisFlatInterface'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Interface: Flat/normal mode (TCCommand: 'cm_VisDriveCombo'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide drive combobox (TCCommand: 'cm_VisCurDir'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide current directory (TCCommand: 'cm_VisBreadCrumbs'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide Breadcrumb bar (TCCommand: 'cm_VisTabHeader'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide tab header (sorting) (TCCommand: 'cm_VisStatusbar'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide status bar (TCCommand: 'cm_VisCmdLine'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide Command line (TCCommand: 'cm_VisKeyButtons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide function key buttons (TCCommand: 'cm_ShowHint'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show file tip window (TCCommand: 'cm_ShowQuickSearch'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show name search window (TCCommand: 'cm_SwitchLongNames'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Turn long names on and off (TCCommand: 'cm_RereadSource'; TCIcon: 0; DCCommand: 'cm_Refresh'; DCParameters: '' ), //Reread source (TCCommand: 'cm_ShowOnlySelected'; TCIcon: 73; DCCommand: ''; DCParameters: '' ), //Hide files which aren't selected (TCCommand: 'cm_SwitchHidSys'; TCIcon: 79; DCCommand: ''; DCParameters: '' ), //Turn hidden/system files on and off (TCCommand: 'cm_SwitchHid'; TCIcon: 79; DCCommand: ''; DCParameters: '' ), //Turn hidden files on and off (TCCommand: 'cm_SwitchSys'; TCIcon: 79; DCCommand: 'cm_ShowSysFiles'; DCParameters: '' ), //Turn system files on and off (TCCommand: 'cm_Switch83Names'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Turn 8.3 names lowercase on/off (TCCommand: 'cm_SwitchDirSort'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Turn directory sorting by name on/off (TCCommand: 'cm_DirBranch'; TCIcon: 50; DCCommand: 'cm_FlatView'; DCParameters: '' ), //Show all files in current dir and all subdirs (TCCommand: 'cm_DirBranchSel'; TCIcon: 50; DCCommand: 'cm_FlatViewSel'; DCParameters: '' ), //Show selected files, and all in selected subdirs (TCCommand: 'cm_50Percent'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Window separator at 50% (TCCommand: 'cm_100Percent'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Window separator at 100% (TCCommand: 'cm_VisDirTabs'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide folder tabs (TCCommand: 'cm_VisXPThemeBackground'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide XP theme background (TCCommand: 'cm_SwitchOverlayIcons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Switch icon overlays on/off (TCCommand: 'cm_VisHistHotButtons'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show/hide dir history+hotlist (TCCommand: 'cm_SwitchWatchDirs'; TCIcon: 80; DCCommand: ''; DCParameters: '' ), //Enable/disable WatchDirs auto-refresh temporarily (TCCommand: 'cm_SwitchIgnoreList'; TCIcon: 81; DCCommand: 'cm_SwitchIgnoreList'; DCParameters: '' ), //Enable/disable ignore list file to not show file names (TCCommand: 'cm_SwitchX64Redirection'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //64-bit Windows: Redirect 32-bit system32 dir off/on (TCCommand: 'cm_SeparateTreeOff'; TCIcon: 76; DCCommand: ''; DCParameters: '' ), //Disable separate tree panel (TCCommand: 'cm_SeparateTree1'; TCIcon: 77; DCCommand: ''; DCParameters: '' ), //One separate tree panel (TCCommand: 'cm_SeparateTree2'; TCIcon: 78; DCCommand: ''; DCParameters: '' ), //Two separate tree panels (TCCommand: 'cm_SwitchSeparateTree'; TCIcon: 51; DCCommand: ''; DCParameters: '' ), //Switch through tree panel options (TCCommand: 'cm_ToggleSeparateTree1'; TCIcon: 77; DCCommand: ''; DCParameters: '' ), //One separate tree panel on/off (TCCommand: 'cm_ToggleSeparateTree2'; TCIcon: 78; DCCommand: ''; DCParameters: '' ), //Two separate tree panels on/off (TCCommand: 'cm_UserMenu1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Start first menu item in Start menu (TCCommand: 'cm_UserMenu2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Second item (TCCommand: 'cm_UserMenu3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Third item (TCCommand: 'cm_UserMenu4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //etc. (TCCommand: 'cm_UserMenu5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_UserMenu6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_UserMenu7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_UserMenu8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //You can add more (TCCommand: 'cm_UserMenu9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //custom user menu ids (TCCommand: 'cm_UserMenu10'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //in totalcmd.inc! (TCCommand: 'cm_OpenNewTab'; TCIcon: 83; DCCommand: 'cm_NewTab'; DCParameters: '' ), //Open new tab (TCCommand: 'cm_OpenNewTabBg'; TCIcon: 83; DCCommand: ''; DCParameters: '' ), //Open new tab in background (TCCommand: 'cm_OpenDirInNewTab'; TCIcon: -1; DCCommand: 'cm_OpenDirInNewTab'; DCParameters: '' ), //Open dir under cursor in tab (TCCommand: 'cm_OpenDirInNewTabOther'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Open dir under cursor (other window) (TCCommand: 'cm_SwitchToNextTab'; TCIcon: -1; DCCommand: 'cm_NextTab'; DCParameters: '' ), //Switch to next Tab (as Ctrl+Tab) (TCCommand: 'cm_SwitchToPreviousTab'; TCIcon: -1; DCCommand: 'cm_PrevTab'; DCParameters: '' ), //Switch to previous Tab (Ctrl+Shift+Tab) (TCCommand: 'cm_MoveTabLeft'; TCIcon: -1; DCCommand: 'cm_MoveTabLeft'; DCParameters: '' ), //Move current tab to the left (TCCommand: 'cm_MoveTabRight'; TCIcon: -1; DCCommand: 'cm_MoveTabRight'; DCParameters: '' ), //Move current tab to the right (TCCommand: 'cm_CloseCurrentTab'; TCIcon: 84; DCCommand: 'cm_CloseTab'; DCParameters: '' ), //Close tab (TCCommand: 'cm_CloseAllTabs'; TCIcon: 85; DCCommand: 'cm_CloseAllTabs'; DCParameters: '' ), //Close all (TCCommand: 'cm_DirTabsShowMenu'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Show tab menu (TCCommand: 'cm_ToggleLockCurrentTab'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Turn on/off tab locking (TCCommand: 'cm_ToggleLockDcaCurrentTab'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Same but with dir changes allowed (TCCommand: 'cm_ExchangeWithTabs'; TCIcon: 37; DCCommand: ''; DCParameters: '' ), //Swap all Tabs (TCCommand: 'cm_GoToLockedDir'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Go to the base dir of locked tab (TCCommand: 'cm_SrcTabsList'; TCIcon: -1; DCCommand: 'cm_ShowTabsList'; DCParameters: '' ), //Source: Show list of all open tabs (TCCommand: 'cm_TrgTabsList'; TCIcon: -1; DCCommand: 'cm_ShowTabsList'; DCParameters: 'side=inactive'), //Target: Show list of all open tabs (TCCommand: 'cm_LeftTabsList'; TCIcon: -1; DCCommand: 'cm_ShowTabsList'; DCParameters: 'side=left' ), //Left: Show list of all open tabs (TCCommand: 'cm_RightTabsList'; TCIcon: -1; DCCommand: 'cm_ShowTabsList'; DCParameters: 'side=right' ), //Right: Show list of all open tabs (TCCommand: 'cm_SrcActivateTab1'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=1' ), //Activate first tab (TCCommand: 'cm_SrcActivateTab2'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=2' ), //Activate second tab (TCCommand: 'cm_SrcActivateTab3'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=3' ), //(Source window) (TCCommand: 'cm_SrcActivateTab4'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=4' ), //etc. (TCCommand: 'cm_SrcActivateTab5'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=5' ), (TCCommand: 'cm_SrcActivateTab6'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=6' ), (TCCommand: 'cm_SrcActivateTab7'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=7' ), (TCCommand: 'cm_SrcActivateTab8'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=8' ), (TCCommand: 'cm_SrcActivateTab9'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=9' ), (TCCommand: 'cm_SrcActivateTab10'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'index=10' ), //(up to 99 items) (TCCommand: 'cm_TrgActivateTab1'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=1' ), //Activate first tab (TCCommand: 'cm_TrgActivateTab2'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=2' ), //Activate second tab (TCCommand: 'cm_TrgActivateTab3'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=3' ), //(Target window) (TCCommand: 'cm_TrgActivateTab4'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=4' ), //etc. (TCCommand: 'cm_TrgActivateTab5'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=5' ), (TCCommand: 'cm_TrgActivateTab6'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=6' ), (TCCommand: 'cm_TrgActivateTab7'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=7' ), (TCCommand: 'cm_TrgActivateTab8'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=8' ), (TCCommand: 'cm_TrgActivateTab9'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=9' ), (TCCommand: 'cm_TrgActivateTab10'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=inactive;index=10' ), (TCCommand: 'cm_LeftActivateTab1'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=1' ), //Activate first tab (TCCommand: 'cm_LeftActivateTab2'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=2' ), //Activate second tab (TCCommand: 'cm_LeftActivateTab3'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=3' ), //(Left window) (TCCommand: 'cm_LeftActivateTab4'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=4' ), //etc. (TCCommand: 'cm_LeftActivateTab5'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=5' ), (TCCommand: 'cm_LeftActivateTab6'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=6' ), (TCCommand: 'cm_LeftActivateTab7'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=7' ), (TCCommand: 'cm_LeftActivateTab8'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=8' ), (TCCommand: 'cm_LeftActivateTab9'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=9' ), (TCCommand: 'cm_LeftActivateTab10'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=left;index=10' ), (TCCommand: 'cm_RightActivateTab1'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=1' ), //Activate first tab (TCCommand: 'cm_RightActivateTab2'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=2' ), //Activate second tab (TCCommand: 'cm_RightActivateTab3'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=3' ), //(Right window) (TCCommand: 'cm_RightActivateTab4'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=4' ), //etc. (TCCommand: 'cm_RightActivateTab5'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=5' ), (TCCommand: 'cm_RightActivateTab6'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=6' ), (TCCommand: 'cm_RightActivateTab7'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=7' ), (TCCommand: 'cm_RightActivateTab8'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=8' ), (TCCommand: 'cm_RightActivateTab9'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=9' ), (TCCommand: 'cm_RightActivateTab10'; TCIcon: -1; DCCommand: 'cm_ActivateTabByIndex'; DCParameters: 'side=right;index=10' ), (TCCommand: 'cm_SrcSortByCol1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by first column (TCCommand: 'cm_SrcSortByCol2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by second column (TCCommand: 'cm_SrcSortByCol3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (source window) (TCCommand: 'cm_SrcSortByCol4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_SrcSortByCol5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol10'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcSortByCol99'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by first column (TCCommand: 'cm_TrgSortByCol2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by second column (TCCommand: 'cm_TrgSortByCol3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (target window) (TCCommand: 'cm_TrgSortByCol4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_TrgSortByCol5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol10'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_TrgSortByCol99'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by first column (TCCommand: 'cm_LeftSortByCol2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by second column (TCCommand: 'cm_LeftSortByCol3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (left window) (TCCommand: 'cm_LeftSortByCol4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_LeftSortByCol5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol10'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftSortByCol99'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by first column (TCCommand: 'cm_RightSortByCol2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Sort by second column (TCCommand: 'cm_RightSortByCol3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (right window) (TCCommand: 'cm_RightSortByCol4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_RightSortByCol5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol10'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightSortByCol99'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Source: Custom columns 1 (TCCommand: 'cm_SrcCustomView2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (user defined columns) (TCCommand: 'cm_SrcCustomView3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_SrcCustomView4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcCustomView9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. until 299 (TCCommand: 'cm_LeftCustomView1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Left: Custom columns 1 (TCCommand: 'cm_LeftCustomView2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (user defined columns) (TCCommand: 'cm_LeftCustomView3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_LeftCustomView4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftCustomView5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftCustomView6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftCustomView7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftCustomView8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_LeftCustomView9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView1'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // Right: Custom columns 1 (TCCommand: 'cm_RightCustomView2'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // (user defined columns) (TCCommand: 'cm_RightCustomView3'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), // etc. (TCCommand: 'cm_RightCustomView4'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView5'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView6'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView7'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView8'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_RightCustomView9'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), (TCCommand: 'cm_SrcNextCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Source: Next custom view (TCCommand: 'cm_SrcPrevCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Source: Previous custom view (TCCommand: 'cm_TrgNextCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Target: Next custom view (TCCommand: 'cm_TrgPrevCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Target: Previous custom view (TCCommand: 'cm_LeftNextCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Left: Next custom view (TCCommand: 'cm_LeftPrevCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), // Left: Previous custom view (TCCommand: 'cm_RightNextCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), //Right: Next custom view (TCCommand: 'cm_RightPrevCustomView'; TCIcon: 52; DCCommand: ''; DCParameters: '' ), //Right: Previous custom view (TCCommand: 'cm_LoadAllOnDemandFields'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Load on demand fields for all files (TCCommand: 'cm_LoadSelOnDemandFields'; TCIcon: -1; DCCommand: ''; DCParameters: '' ), //Load on demand fields for selected files (TCCommand: 'cm_ContentStopLoadFields'; TCIcon: -1; DCCommand: ''; DCParameters: '' ) //Stop loading on demand fields ); //jcf:format=on //DC commands unmatched for the moment //------------------------------------ //cm_AddFilenameToCmdLine - Looks like TC can do it with a CTRL+ENTER but no cm_ command for this. //cm_AddPathAndFilenameToCmdLine - Looks like TC can do it with a CTRL+SHIFT+ENTER but no cm_ command for this. //cm_ChangeDir - Looks like TC can do it with "CD ..." bit no cm_ command for this. //cm_ChangeDirToHome - Looks like there is no TC equivalent //cm_ClearLogFile - //cm_ClearLogWindow //cm_ConfigDirHotList //cm_CopyNoAsk //cm_DebugShowCommandParameters //cm_EditNew //cm_GoToLastFile //cm_HardLink //cm_LeftEqualRight //cm_LoadTabs //cm_OpenArchive //cm_OpenBar //cm_OpenVirtualFileSystemList //cm_OperationsViewer //cm_PanelsSplitterPerPos //cm_QuickFilter //cm_QuickSearch //cm_RenameNoAsk //cm_RenameTab //cm_RightEqualLeft //cm_SaveTabs //cm_SetTabOptionNormal //cm_SetTabOptionPathLocked //cm_SetTabOptionPathResets //cm_SetTabOptionDirsInNewTab //cm_ShellExecute //cm_ShowButtonMenu //cm_ShowCmdLineHistory //cm_ShowMainMenu //cm_SortByAttr //cm_SymLink //cm_UniversalSingleDirectSort //cm_ViewHistory //cm_ViewHistoryNext //cm_ViewHistoryPrev //cm_ViewLogFile //cm_Wipe //cm_WorkWithDirectoryHotlist var TCIconSize: integer = 32; TCNumberOfInstance: integer; TCListOfCreatedTCIconFilename: TStringList; // Test have been made with string from site http://stackoverflow.com/questions/478201/how-to-test-an-application-for-correct-encoding-e-g-utf-8 // Note: If you ever "think" to change or modify this routine, make sure to test the following: // 1o) Make a directory with utf-8 special characters, a path like this: "Card-♠♣♥♦" // 2o) Then, go with TC and add it as a favorite. // 3o) Then, exit it to make sure it is saved in its wndcmd.ini file // 4o) Then, go in the hotlist of DC and do an import from TC file // 5o) Make sure the path you've created has really been imported and it's NOT written "cd Card-♠♣♥♦\" or things like that. // 6o) Make sure you can also GO TO this folder from the popup menu of hotlist. // 7o) After that, repeat the step one through six with a path called "français", or "Esta frase está en español" and really take the time to do it. // 8o) Really take the time to do step 7 with the suggested two folder mentionned here. // In its "wincmd", TC is using AnsiString for character that don't need UTF-8 string. // He add the identifier "AnsiChar($EF) + AnsiChar($BB) + AnsiChar($BF)" at the beginning of each value that requires that the following needs to be interpret as UTF8 string. // So we cannot systematically convert the string. Some are using code between 128 and 255 that needs to be interpert as what it was in ANSI. // ALSO, lettings the $EF $BB $BF in the "string" make the string to be displayble "normally" in Lazarus, yes... // ...but when it's time to do things like "pos(...", "copy(...", the $EF $BB $BF are there, taken into acocunt, even when doing a print of the string we don't see see them! // Anyway. If you ever modify the following thinking it shouldn't be like this or there is a better way or whatever, please, take the time to do the test written after your modifications function ConvertTCStringToString(TCString: ansistring): string; begin Result := TCString; if length(Result) >= 3 then begin if ((TCString[1] = AnsiChar($EF)) and (TCString[2] = AnsiChar($BB)) and (TCString[3] = AnsiChar($BF))) then begin Result := copy(Result, 4, (length(Result) - 3)); end else begin Result := CeAnsiToUtf8(Result); end; end; end; // TC is adding the "$EF $BB $BF" identifier if the string stored in its config file require to be interpret in uniccode. // Adding it systematically, like we already tried before, doesn't work in 100% of the situation. // For example, for raison that can't explain without its source code, if a toolbar filename is express with the "$EF $BB $BF" in the name, // it will "basically work", but if it is defined to be shown as a drop menu, the little down triangle won't be shown in TC!!! // So let's add the "$EF $BB $BF" only when it required. function ConvertStringToTCString(sString: string): ansistring; begin if CeUtf8ToAnsi(sString) = sString then Result := sString else Result := AnsiChar($EF) + AnsiChar($BB) + AnsiChar($BF) + sString; end; { ReplaceDCEnvVars } // Routine to replace %VARIABLE% of DC path by the actual absolute path // This is useful when we "export" to TC related path to place them in absolute format this way TC refer them correctly after export. function ReplaceDCEnvVars(const sText: string): string; begin Result := StringReplace(sText, '%DC_CONFIG_PATH%', ExcludeTrailingPathDelimiter(gpCfgDir), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_PATH%', ExcludeTrailingPathDelimiter(ExtractFilePath(gpExePath)), [rfIgnoreCase]); end; { ReplaceTCEnvVars } // Routine to replace %VARIABLE% of TC path by the actual absolute path // This is useful when we "import" TC related path to place them in absolute format this way DC refer them correctly after import. function ReplaceTCEnvVars(const sText: string): string; var sAbsoluteTotalCommanderExecutableFilename, sAbsoluteTotalCommanderConfigFilename: string; begin sAbsoluteTotalCommanderExecutableFilename := mbExpandFileName(gTotalCommanderExecutableFilename); sAbsoluteTotalCommanderConfigFilename := mbExpandFileName(gTotalCommanderConfigFilename); Result := StringReplace(sText, '%COMMANDER_INI%\..', ExcludeTrailingPathDelimiter(ExtractFilePath(sAbsoluteTotalCommanderConfigFilename)),[rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_INI%', sAbsoluteTotalCommanderConfigFilename, [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_PATH%', ExcludeTrailingPathDelimiter(ExtractFilePath(sAbsoluteTotalCommanderExecutableFilename)), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_EXE%', ExcludeTrailingPathDelimiter(ExtractFilePath(sAbsoluteTotalCommanderExecutableFilename)), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_DRIVE%', ExcludeTrailingPathDelimiter(ExtractFileDrive(sAbsoluteTotalCommanderExecutableFilename)), [rfIgnoreCase]); if utf8pos(UTF8UpperCase('wcmicons.dll'), UTF8UpperCase(Result)) = 1 then Result := StringReplace(Result, 'wcmicons.dll', ExtractFilePath(sAbsoluteTotalCommanderExecutableFilename) + 'wcmicons.dll', [rfIgnoreCase]); end; { GetTotalCommandeMainBarFilename } // We'll return the TC main bar filename. // At the same time, since we're in the config file, we'll determine the icon size for the button bar. // TC attempts to save the "default.bar" file in the same location as the executable. // When it can, it will be located there. // If not, it will store it in the same location as the ini file. // Obviously, if it's configured somewhere else by the user, its location will be stored into the ini file in the section "Buttonbar" under the variable "Buttonbar". // So the flow to find it would be something like that: // 1.Let's attempt to read it from "Buttonbar/Buttonbar" from the ini file. If it's there, we may quit searching and exit with that. // 2.If it was not found, let's attempt to see if we have one in the same directory as the ini config file. If it's there, we may quit searching and exit with that. // 3.If we still don't have one, let's check if it is in the same folder as the executable itself... And it will have to be there! function GetTotalCommandeMainBarFilename: string; var TCMainConfigFile: TIniFileEx; begin Result := ''; //1.Let's attempt to read it from configuration file. if mbFileExists(mbExpandFileName(gTotalCommanderConfigFilename)) then begin TCMainConfigFile := TIniFileEx.Create(mbExpandFileName(gTotalCommanderConfigFilename)); try Result := mbExpandFileName(ReplaceTCEnvVars(ConvertTCStringToString(TCMainConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_SECTION, Result)))); //While we're there, we'll get the button height. TCIconSize := TCMainConfigFile.ReadInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONHEIGHT, 32 + 5); TCIconSize := TCIconSize - 5; //Yeah... A magic -5... finally TCMainConfigFile.Free; end; //2.If we have no result, let's let see if we have from one from the same location as the configuration file. if Result = '' then if FileExists(ExtractFilePath(mbExpandFileName(gTotalCommanderConfigFilename)) + TCCONFIG_DEFAULTBAR_FILENAME) then result := ExtractFilePath(mbExpandFileName(gTotalCommanderConfigFilename)) + TCCONFIG_DEFAULTBAR_FILENAME; end; //3.If we still did not find it, let's finally attempt to take it from the same location as the executable. if Result = '' then if FileExists(ExtractFilePath(mbExpandFileName(gTotalCommanderExecutableFilename)) + TCCONFIG_DEFAULTBAR_FILENAME) then result := ExtractFilePath(mbExpandFileName(gTotalCommanderExecutableFilename)) + TCCONFIG_DEFAULTBAR_FILENAME; end; { EnumTaskWindowsProc } // Routine used for the following "IsTotalCommanderSeemsRunning" routine. function EnumTaskWindowsProc(Wnd: THandle; List{%H-}: TStrings): boolean; stdcall; var ClassName: PChar; begin ClassName := Stralloc(100); if GetClassName(Wnd, ClassName, 99) > 0 then begin if ClassName = 'TTOTAL_CMD' then begin // Skip Double Commander main window class if GetPropW(Wnd, 'WinControlDC') = 0 then Inc(TCNumberOfInstance); end; end; Result := True; strDispose(ClassName); end; { IsTotalCommanderSeemsRunning } // Routine that we'll return TRUE if TC is currently running and false otherwise function IsTotalCommanderSeemsRunning: boolean; begin TCNumberOfInstance := 0; try EnumWindows(@EnumTaskWindowsProc, 0); finally end; Result := (TCNumberOfInstance > 0); end; { areTCRelatedPathsAndFilesDetected } //To consider to be cumfortable to work with TC related stuff we need to make sure: //1o) We know where is the TC executable //2o) We know where is the TC config file //3o) We know where where is the file for the TC main toolbar //4o) We know where the toolbar and associted icon COULD be stored (util when exporting the DC toolbar) function areTCRelatedPathsAndFilesDetected: boolean; begin Result := False; if mbFileExists(mbExpandFileName(gTotalCommanderExecutableFilename)) then begin if mbFileExists(mbExpandFileName(gTotalCommanderConfigFilename)) then begin sTotalCommanderMainbarFilename := GetTotalCommandeMainBarFilename; if mbFileExists(sTotalCommanderMainbarFilename) then begin if mbDirectoryExists(ExcludeTrailingPathDelimiter(mbExpandFileName(gTotalCommanderToolbarPath))) then begin Result := True; end else begin MsgError(Format(rsMsgTCToolbarNotFound, [gTotalCommanderToolbarPath])); end; end else begin MsgError(Format(rsImportToolbarProblem, [sTotalCommanderMainbarFilename])); end; end else begin MsgError(Format(rsMsgTCConfigNotFound, [gTotalCommanderConfigFilename])); end; end else begin MsgError(Format(rsMsgTCExecutableNotFound, [gTotalCommanderExecutableFilename])); end; if not Result then BringUsToTCConfigurationPage; end; { areWeInSituationToPlayWithTCFiles } function areWeInSituationToPlayWithTCFiles: boolean; var FlagCancelWaitingTCClose: TMyMsgResult; FlagTCIsRunning: boolean; begin Result := False; if areTCRelatedPathsAndFilesDetected then begin repeat FlagTCIsRunning := IsTotalCommanderSeemsRunning; if FlagTCIsRunning then FlagCancelWaitingTCClose := MsgBox(rsMsgTCisRunning, [msmbOk, msmbCancel], msmbOk, msmbCancel); until (FlagTCIsRunning = False) or (FlagCancelWaitingTCClose = mmrCancel); Result := not FlagTCIsRunning; end; end; { GetTCEquivalentCommandToDCCommand } // From the given DC command, we'll return the equivalent TC command. // If not found, we'll return the same DC command, at least. function GetTCEquivalentCommandToDCCommand(DCCommand: string; var TCIndexOfCommand: integer): string; var SearchingIndex: integer = 1; begin Result := ''; TCIndexOfCommand := -1; if DCCommand <> '' then begin DCCommand := UTF8LowerCase(DCCommand); //Let's see if we have an equivalent TC for our DC command. while (SearchingIndex <= NUMBEROFCOMMANDS) and (TCIndexOfCommand = -1) do begin if DCCommand = UTF8LowerCase(COMMANDS_LIST_TC[SearchingIndex].DCCommand) then begin Result := COMMANDS_LIST_TC[SearchingIndex].TCCommand; TCIndexOfCommand := SearchingIndex; end else begin Inc(SearchingIndex); end; end; if TCIndexOfCommand = -1 then Result := DCCommand; end; end; { GetTCIconFromDCIconAndCreateIfNecessary } // Will return the string to use for the icon for the tool bar button when doing an export to TC bar file. // Will also create a .ICO file if we know the fiel can't be load by TC. // Basically routine generate the same bitmap as what DC would generate to show. // Then, we look from where it's coming from with "fromWhatItWasLoaded)". // Depending of this, will simply return the same filename OR will create and icon for TC. // This has been test with: // fwbwlNotLoaded: NOT TESTED // fwbwlIconThemeBitmap: Tested with 'cm_configdirhotlist', 'cm_dirhotlist', 'utilities-terminal', 'cm_markunmarkall', 'go-previous', 'go-next' // fwbwlResourceFileExtracted: Tested with 'wcmicons.dll,3', 'MyOwnIcons.icl,12', 'doublecmd.exe', 'TOTALCMD64.EXE', 'HWorks32.exe' // fwbwlGraphicFile: Test with 'UploadDispatcher.ico', 'Carlos.bmp' // fwbwlGraphicFile switched to fwbwlGraphicFileNotSupportedByTC: Tested with 'Nop.png', 'cm_extractfiles.png', 'cm_about.png', a corrutped .png file // fwbwlFileIconByExtension: Tested with 'ElementaryOS-32bits.vbox', 'backupsource.bat', 'Microsoft Word 2010.lnk', a corrupted .bmp file since DC at least attenmpt to by the extension which is nice! // fwbwlFiDefaultIconID: Tested with "a missing unknown extension file", An empty icon string, function GetTCIconFromDCIconAndCreateIfNecessary(const DCIcon: string): string; var LocalBitmap: Graphics.TBitmap = nil; fromWhatItWasLoaded: TfromWhatBitmapWasLoaded; LocalIcon: Graphics.TIcon = nil; Suffix: string; needToBeConvertToIco: boolean = False; begin Result := DCIcon; //In any case, by default at least, return the same thing as what we got in DC and good luck TC! //Get the bitmap of the icon and make sure to get "fromWhatItWasLoaded" to see from where it came from LocalBitmap := PixmapManager.LoadBitmapEnhanced(DCICon, TCIconSize, True, clBtnFace, @fromWhatItWasLoaded); try if ExtractFileExt(UTF8Lowercase(DCIcon)) = '.png' then fromWhatItWasLoaded := fwbwlGraphicFileNotSupportedByTC; case fromWhatItWasLoaded of fwbwlNotLoaded: needToBeConvertToIco := False; fwbwlIconThemeBitmap: needToBeConvertToIco := True; fwbwlResourceFileExtracted: needToBeConvertToIco := False; fwbwlGraphicFile: needToBeConvertToIco := False; fwbwlGraphicFileNotSupportedByTC: needToBeConvertToIco := True; fwbwlFileIconByExtension: needToBeConvertToIco := True; fwbwlFiDefaultIconID: needToBeConvertToIco := True; end; // If TC can't load the file, let's generate a .ICO file for it. // We use a .ICO so we can passed at least something with transparency. if needToBeConvertToIco then begin Result := RemoveFileExt(ExtractFilename(DCIcon)); if Result = '' then Result := 'empty'; Result := IncludeTrailingPathDelimiter(mbExpandFileName(gTotalCommanderToolbarPath)) + Result; //Make sure to use a filename not already generated. Suffix := ''; while TCListOfCreatedTCIconFilename.IndexOf(Result + Suffix + '.ico') <> -1 do Suffix := IntToStr(StrToIntDef(Suffix, 0) + 1); Result := Result + Suffix + '.ico'; //.ICO conversion. LocalIcon := Graphics.TIcon.Create; try LocalIcon.Assign(LocalBitmap); LocalIcon.SaveToFile(Result); TCListOfCreatedTCIconFilename.Add(Result); finally LocalIcon.Free; end; end; finally LocalBitmap.Free; end; end; { GetTCEquivalentCommandIconToDCCommandIcon } // Different from the previous "GetTCIconFromDCIconAndCreateIfNecessary" routine because it concerns "commands". // If TC has an icon in its "wcmicons.dll" file for the command, we'll use it. // If not, we'll save a .ICO for it, no matter where it is comming from. function GetTCEquivalentCommandIconToDCCommandIcon(DCIcon: string; TCIndexOfCommand: integer): string; begin Result := ''; if TCIndexOfCommand <> -1 then begin if COMMANDS_LIST_TC[TCIndexOfCommand].TCIcon <> -1 then Result := 'wcmicons.dll,' + IntToStr(COMMANDS_LIST_TC[TCIndexOfCommand].TCIcon); end; if Result = '' then Result := GetTCIconFromDCIconAndCreateIfNecessary(DCIcon); end; { GetDCEquivalentCommandToTCCommand } // From the given TC command, we'll return the equivalent DC command. function GetDCEquivalentCommandToTCCommand(TCCommand: string; var TCIndexOfCommand: integer; ListOfParameters: TStringList): string; begin Result := 'nil'; TCIndexOfCommand := 1; ListOfParameters.Clear; if TCCommand <> '' then begin TCCommand := UTF8LowerCase(TCCommand); //Let's see if we have an equivalent DC for the TC command. while (TCIndexOfCommand <= NUMBEROFCOMMANDS) and (Result = 'nil') do begin if TCCommand = UTF8LowerCase(COMMANDS_LIST_TC[TCIndexOfCommand].TCCommand) then begin Result := COMMANDS_LIST_TC[TCIndexOfCommand].DCCommand; ParseLineToList(COMMANDS_LIST_TC[TCIndexOfCommand].DCParameters, ListOfParameters); end else Inc(TCIndexOfCommand); end; end; if (Result = '') or (Result = 'nil') then begin TCIndexOfCommand := -1; Result := TCCommand; end; end; { ExportDCToolbarsToTC } procedure ExportDCToolbarsToTC(Toolbar: TKASToolbar; Barfilename: string; FlushExistingContent, FlagNeedToUpdateConfigIni: boolean); var TargetBarFilenamePrefix: string; TCToolBarIndex: integer; ExportationDateTime: TDateTime; procedure PossiblyRecursiveAddThisToolItemToConfigFile(ToolItem: TKASToolItem; TCBarConfigFile: TIniFileEx; TCIndexButton: integer); var sTCIndexButton: string; TCIndexOfCommand: integer = -1; IndexItem: integer; TCCommand, TCIcon: string; InnerTCBarConfigFilename: string; InnerTCBarConfigFile: TIniFileEx; begin sTCIndexButton := IntToStr(TCIndexButton); if ToolItem is TKASSeparatorItem then begin TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ''); TCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_ICONIC_PREFIX + sTCIndexButton, 0); end; if ToolItem is TKASCommandItem then begin TCCommand := GetTCEquivalentCommandToDCCommand(TKASCommandItem(ToolItem).Command, TCIndexOfCommand); TCIcon := GetTCEquivalentCommandIconToDCCommandIcon(TKASCommandItem(ToolItem).Icon, TCIndexOfCommand); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(TCCommand)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(TCIcon)); if (TKASCommandItem(ToolItem).Hint <> '') and (TCIndexOfCommand = -1) then //We'll write the hint *only* if command is not a recognized Total Commander command. TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASCommandItem(ToolItem).Hint)); end; if ToolItem is TKASProgramItem then begin TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(GetTCIconFromDCIconAndCreateIfNecessary(TKASProgramItem(ToolItem).Icon))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASProgramItem(ToolItem).Command))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_STARTINGPATH_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASProgramItem(ToolItem).StartPath))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASProgramItem(ToolItem).Hint)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_PARAM_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASProgramItem(ToolItem).Params)); end; if ToolItem is TKASMenuItem then begin InnerTCBarConfigFilename := TargetBarFilenamePrefix + '_SubBar' + Format('%2.2d', [TCToolBarIndex]) + '_' + GetDateTimeInStrEZSortable(ExportationDateTime) + '.BAR'; Inc(TCToolBarIndex); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(InnerTCBarConfigFilename)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASMenuItem(ToolItem).Icon))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASMenuItem(ToolItem).Hint)); TCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_ICONIC_PREFIX + sTCIndexButton, 1); //Now we have to create the TC toolbar file to store the coming subbar. InnerTCBarConfigFile := TIniFileEx.Create(InnerTCBarConfigFilename, fmOpenWrite); try for IndexItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do PossiblyRecursiveAddThisToolItemToConfigFile(TKASMenuItem(ToolItem).SubItems[IndexItem], InnerTCBarConfigFile, (IndexItem + 1)); //*AFTER* all the buttons have been added, let's update for TC the number of buttons now present. InnerTCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, TKASMenuItem(ToolItem).SubItems.Count); InnerTCBarConfigFile.UpdateFile; finally InnerTCBarConfigFile.Free; end; end; end; var //Placed intentionnally *AFTER* above routine to make sure these variable names are not used in above possibly recursive routines. TCMainConfigFile, MainTCBarConfigFile: TIniFileEx; IndexButton, TCMainIndexButton: integer; begin ExportationDateTime := now; TargetBarFilenamePrefix := IncludeTrailingPathDelimiter(mbExpandFilename(gTotalCommanderToolbarPath)) + rsFilenameExportedTCBarPrefix; TCToolBarIndex := 1; TCListOfCreatedTCIconFilename := TStringList.Create; TCListOfCreatedTCIconFilename.Sorted := True; TCListOfCreatedTCIconFilename.Clear; try //Let's create/append the .BAR file(s)! MainTCBarConfigFile := TIniFileEx.Create(Barfilename, fmOpenReadWrite); try if FlushExistingContent then begin MainTCBarConfigFile.EraseSection(TCCONFIG_BUTTONBAR_SECTION); TCMainIndexButton := 0; end else begin TCMainIndexButton := MainTCBarConfigFile.ReadInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, 0); end; //Let's add the DC toolbar to the TC .BAR file. for IndexButton := 0 to pred(Toolbar.ButtonCount) do begin Inc(TCMainIndexButton); PossiblyRecursiveAddThisToolItemToConfigFile(Toolbar.Buttons[IndexButton].ToolItem, MainTCBarConfigFile, TCMainIndexButton); end; //*AFTER* all the buttons have been added, let's update for TC the number of buttons now present. MainTCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, TCMainIndexButton); MainTCBarConfigFile.UpdateFile; finally MainTCBarConfigFile.Free; end; finally TCListOfCreatedTCIconFilename.Free; end; //If we've been asked to play in the Wincmd.ini file, let's make sure to save the main bar filename. if FlagNeedToUpdateConfigIni then begin TCMainConfigFile := TIniFileEx.Create(mbExpandFileName(gTotalCommanderConfigFilename), fmOpenReadWrite); try //2014-11-27:It looks like, will with TC 8.50B12, the main bar file cannot have unicode in the name??? //It "basically" works but have some annoying problem from here to thre. //So intentionnally, we don't use "ConvertStringToTCString(SaveDialog.Filename)" TCMainConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_SECTION, ansistring(Barfilename)); TCMainConfigFile.UpdateFile; finally TCMainConfigFile.Free; end; end; end; { ConvertTCToolbarToDCXmlConfig } // Will import the TC toolbar file named "sBarFilename" into either our "AToolbarConfig" XML structure. // If the TC toolbar have buttons pointing other TC toolbar file, the routine will import them as well // and organize something similar in the tree structure of subtoolbar DC is using. // Obviously to avoid keeps cycling in round if "Toolbar A points toolbar B and toolbar B points toolbar A", // this import routine will not re-importe a toolbar already imported. procedure ConvertTCToolbarToDCXmlConfig(sTCBarFilename: string; ADCXmlConfig:TXmlConfig); var TCToolbarFilenameList: TStringList; //To hold the TC toolbarfile already imported so we don't re-import more than once a toolbar file already imported. TCIndexOfCommand: integer; DCListOfParameters: TStringList; ToolBarNode, RowNode: TXmlNode; // WARNING: "RecursiveIncorporateTCBarfile" is recursive and may call itself! procedure RecursiveIncorporateTCBarfile(Barfilename: string; InsertionNode:TXmlNode); var TCBarConfigFile: TIniFileEx; IndexButton: integer; sButtonName, sCmdName, sHintName, sParamValue, sStartingPath: string; SubMenuNode, CommandNode, MenuItemsNode: TXmlNode; begin if mbFileExists(Barfilename) then begin TCBarConfigFile := TIniFileEx.Create(Barfilename); try IndexButton := 1; repeat sButtonName := ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + IntToStr(IndexButton), TCCONFIG_MAINBAR_NOTPRESENT)); if sButtonName <> TCCONFIG_MAINBAR_NOTPRESENT then begin if sButtonName = '' then begin //We have a separator bar! CommandNode := ADCXmlConfig.AddNode(InsertionNode, 'Separator'); end else begin sButtonName := ReplaceTCEnvVars(sButtonName); sCmdName := TrimQuotes(ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + IntToStr(IndexButton), 'cmd_notimplement')))); sParamValue := ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_PARAM_PREFIX + IntToStr(IndexButton), ''))); sStartingPath := TrimQuotes(ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_STARTINGPATH_PREFIX + IntToStr(IndexButton), '')))); sHintName := ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + IntToStr(IndexButton), '')); if pos('cm_', UTF8LowerCase(sCmdName)) = 1 then begin // We have an internal command! sCmdName := GetDCEquivalentCommandToTCCommand(sCmdName, TCIndexOfCommand, DCListOfParameters); if TCIndexOfCommand <> -1 then begin // If we have an equivalent, we add it as the equivalent internal command. CommandNode := ADCXmlConfig.AddNode(InsertionNode, 'Command'); ADCXmlConfig.AddValue(CommandNode, 'ID', GuidToString(DCGetNewGUID)); ADCXmlConfig.AddValue(CommandNode, 'Icon', UTF8LowerCase(sCmdName)); ADCXmlConfig.AddValue(CommandNode, 'Command', sCmdName); ADCXmlConfig.AddValue(CommandNode, 'Hint', sHintName); end else begin // If we don't have an equivalent, we add is as an external command and we will write info to mean it. CommandNode := ADCXmlConfig.AddNode(InsertionNode, 'Program'); ADCXmlConfig.AddValue(CommandNode, 'ID', GuidToString(DCGetNewGUID)); ADCXmlConfig.AddValue(CommandNode, 'Icon', '???: '+sButtonName); // ???: will result into the question mark icon so it's easy for user to see that one did not work. ADCXmlConfig.AddValue(CommandNode, 'Command', rsNoEquivalentInternalCommand + ' - ' + sCmdName); ADCXmlConfig.AddValue(CommandNode, 'Params', ''); ADCXmlConfig.AddValue(CommandNode, 'StartPath', ''); ADCXmlConfig.AddValue(CommandNode, 'Hint', rsNoEquivalentInternalCommand); end; end else begin if UTF8UpperCase(ExtractFileExt(sCmdName)) = '.BAR' then begin //Since with TC we could have toolbars recursively pointing themselves, we need to make sure we'll not get lost cycling throught the same ones over and over. if TCToolbarFilenameList.IndexOf(UTF8UpperCase(sCmdName)) = -1 then begin //We have a subtoolbar! TCToolbarFilenameList.Add(UTF8UpperCase(sCmdName)); SubMenuNode := ADCXmlConfig.AddNode(InsertionNode, 'Menu'); ADCXmlConfig.AddValue(SubMenuNode, 'ID', GuidToString(DCGetNewGUID)); if sHintName <> '' then ADCXmlConfig.AddValue(SubMenuNode, 'Hint', sHintName) else ADCXmlConfig.AddValue(SubMenuNode, 'Hint', 'Sub menu'); ADCXmlConfig.AddValue(SubMenuNode, 'Icon', sButtonName); MenuItemsNode := ADCXmlConfig.AddNode(SubMenuNode, 'MenuItems'); RecursiveIncorporateTCBarfile(sCmdName, MenuItemsNode); end; end else begin //We have a "Program Item" CommandNode := ADCXmlConfig.AddNode(InsertionNode, 'Program'); ADCXmlConfig.AddValue(CommandNode, 'ID', GuidToString(DCGetNewGUID)); ADCXmlConfig.AddValue(CommandNode, 'Icon', sButtonName); ADCXmlConfig.AddValue(CommandNode, 'Command', sCmdName); ADCXmlConfig.AddValue(CommandNode, 'Params', sParamValue); ADCXmlConfig.AddValue(CommandNode, 'StartPath', sStartingPath); if sHintName <> '' then ADCXmlConfig.AddValue(CommandNode, 'Hint', sHintName) else ADCXmlConfig.AddValue(CommandNode, 'Hint', 'Program'); end; end; end; end; Inc(IndexButton); until sButtonName = TCCONFIG_MAINBAR_NOTPRESENT; finally TCBarConfigFile.Free; end; end; end; begin TCToolbarFilenameList := TStringList.Create; try ToolBarNode := ADCXmlConfig.FindNode(ADCXmlConfig.RootNode, 'Toolbars/MainToolbar', True); ADCXmlConfig.ClearNode(ToolBarNode); RowNode := ADCXmlConfig.AddNode(ToolBarNode, 'Row'); DCListOfParameters := TStringList.Create; try RecursiveIncorporateTCBarfile(sTCBarFilename, RowNode); finally DCListOfParameters.Free; end; finally TCToolbarFilenameList.Free; end; end; { GetActualTCIni } // Returns actual ini filename when using 'RedirectSection' key function GetActualTCIni(NormalizedTCIniFilename, SectionName: String): String; var ConfigFile: TIniFileEx; begin ConfigFile := TIniFileEx.Create(NormalizedTCIniFilename); Result := ConvertTCStringToString(ConfigFile.ReadString(SectionName, 'RedirectSection', '')); ConfigFile.Free; if Result <> '' then Result := GetActualTCIni(ReplaceTCEnvVars(ReplaceEnvVars(Result)), SectionName) else Result := NormalizedTCIniFilename; end; end. doublecmd-1.1.30/src/platform/uuniqueinstance.pas0000644000175000001440000002702515104114162021133 0ustar alexxusersunit uUniqueInstance; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SimpleIPC, uCmdLineParams; type TOnUniqueInstanceMessage = procedure (Sender: TObject; Params: TCommandLineParams) of object; { TUniqueInstance } TUniqueInstance = class private FHandle: THandle; FInstanceName: String; FServerIPC: TSimpleIPCServer; FClientIPC: TSimpleIPCClient; FOnMessage: TOnUniqueInstanceMessage; FServernameByUser: String; {$IF DEFINED(UNIX)} FMyProgramCreateSemaphore:Boolean; {$ENDIF} procedure OnNative(Sender: TObject); procedure OnMessageQueued(Sender: TObject); procedure CreateServer; procedure CreateClient; function IsRunning: Boolean; procedure DisposeMutex; public constructor Create(aInstanceName: String; aServernameByUser: String); destructor Destroy; override; function IsRunInstance: Boolean; procedure SendParams; procedure RunListen; procedure StopListen; function isAnotherDCRunningWhileIamRunning:boolean; property OnMessage: TOnUniqueInstanceMessage read FOnMessage write FOnMessage; property ServernameByUser: String read FServernameByUser; end; procedure InitInstance; procedure InitInstanceWithName(aInstanceName: String; aServernameByUser: String); function IsUniqueInstance: Boolean; function WantsToBeClient: Boolean; {en Returns @true if current application instance is allowed to run. Returns @false if current instance should not be run. } function IsInstanceAllowed: Boolean; var UniqueInstance: TUniqueInstance = nil; FIsUniqueInstance: Boolean = False; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, {$ELSEIF DEFINED(UNIX)} ipc, baseunix, uPipeServer, {$ENDIF} Forms, StrUtils, FileUtil, uRegExprA, uGlobs, uDebug; {$IF DEFINED(DARWIN)} const SEM_GETVAL = 5; // Return the value of semval (READ) SEM_SETVAL = 8; // Set the value of semval to arg.val (ALTER) {$ENDIF} { TUniqueInstance } procedure TUniqueInstance.OnNative(Sender: TObject); var Params: TCommandLineParams; begin if Assigned(FOnMessage) then begin FServerIPC.MsgData.Seek(0, soFromBeginning); FServerIPC.MsgData.ReadBuffer(Params, FServerIPC.MsgType); FOnMessage(Self, Params); end; end; procedure TUniqueInstance.OnMessageQueued(Sender: TObject); begin {$IF (FPC_FULLVERSION >= 030001)} FServerIPC.ReadMessage; {$ENDIF} end; procedure TUniqueInstance.CreateServer; begin if FServerIPC = nil then begin FServerIPC:= TSimpleIPCServer.Create(nil); FServerIPC.OnMessage:= @OnNative; {$IF DEFINED(MSWINDOWS) and (FPC_FULLVERSION >= 030001)} FServerIPC.OnMessageQueued:= @OnMessageQueued; {$ENDIF} end; if FClientIPC <> nil then FreeAndNil(FClientIPC); end; procedure TUniqueInstance.CreateClient; begin if FClientIPC = nil then FClientIPC:= TSimpleIPCClient.Create(nil); end; function TUniqueInstance.IsRunning: Boolean; {$IF DEFINED(MSWINDOWS)} var MutexName: AnsiString; begin Result:= False; MutexName:= ExtractFileName(ParamStr(0)); FHandle:= OpenMutex(MUTEX_MODIFY_STATE, False, PAnsiChar(MutexName)); if FHandle = 0 then FHandle:= CreateMutex(nil, True, PAnsiChar(MutexName)) else begin if WaitForSingleObject(FHandle, 0) <> WAIT_ABANDONED then Result:= True; end; end; {$ELSEIF DEFINED(UNIX)} const SEM_PERM = 6 shl 6 { 0600 }; var semkey: TKey; status: longint = 0; arg: tsemun; function id: byte; var UserID: LongRec; begin Result := 0; UserID := LongRec(fpGetUID); Result := Result xor UserID.Bytes[0]; Result := Result xor UserID.Bytes[1]; Result := Result xor UserID.Bytes[2]; Result := Result xor UserID.Bytes[3]; end; function semlock(semid: longint): boolean; // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) var p_buf: tsembuf; begin p_buf.sem_num := 0; p_buf.sem_op := 1; p_buf.sem_flg := SEM_UNDO; Result:= semop(semid, @p_buf, 1) = 0; end; begin Result := False; semkey := ftok(PAnsiChar(ParamStr(0)), id); // try create semapore for semkey // If semflg specifies both IPC_CREAT and IPC_EXCL and a semaphore set already // exists for semkey, then semget() return -1 and errno set to EEXIST FHandle := semget(semkey, 1, SEM_PERM or IPC_CREAT or IPC_EXCL); // if semaphore exists if FHandle = -1 then begin // get semaphore id FHandle := semget(semkey, 1, 0); // get special Value from semaphore structure status := semctl(FHandle, 0, SEM_GETVAL, arg); if status = 1 then // There is other running copy of the program begin Result := True; // Not to release semaphore when exiting from the program FMyProgramCreateSemaphore := false; end else begin // Other copy of the program has created a semaphore but has been completed incorrectly // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) semlock(FHandle); // its one copy of program running, release semaphore when exiting from the program FMyProgramCreateSemaphore := true; end; end else begin // its one copy of program running, release semaphore when exiting from the program FMyProgramCreateSemaphore := true; // set special Value in semaphore structure to 0 arg.val := 0; status := semctl(FHandle, 0, SEM_SETVAL, arg); // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) semlock(FHandle); end; end; {$ENDIF} procedure TUniqueInstance.DisposeMutex; {$IF DEFINED(MSWINDOWS)} begin ReleaseMutex(FHandle); end; {$ELSEIF DEFINED(UNIX)} var arg: tsemun; begin // If my copy of the program created a semaphore then released it if FMyProgramCreateSemaphore then semctl(FHandle, 0, IPC_RMID, arg); end; {$ENDIF} function TUniqueInstance.IsRunInstance: Boolean; begin CreateClient; FClientIPC.ServerID:= FInstanceName; Result:= IsRunning and FClientIPC.ServerRunning; end; procedure TUniqueInstance.SendParams; var Stream: TMemoryStream = nil; begin CreateClient; FClientIPC.ServerID:= FInstanceName; if not FClientIPC.ServerRunning then Exit; Stream:= TMemoryStream.Create; Stream.WriteBuffer(CommandLineParams, SizeOf(TCommandLineParams)); try FClientIPC.Connect; Stream.Seek(0, soFromBeginning); FClientIPC.SendMessage(SizeOf(TCommandLineParams), Stream); finally Stream.Free; FClientIPC.Disconnect; end; end; procedure TUniqueInstance.RunListen; begin CreateServer; FServerIPC.ServerID:= FInstanceName; FServerIPC.Global:= True; FServerIPC.StartServer; end; procedure TUniqueInstance.StopListen; begin DisposeMutex; if FServerIPC = nil then Exit; FServerIPC.StopServer; end; function TUniqueInstance.isAnotherDCRunningWhileIamRunning:boolean; var LocalClientIPC: TSimpleIPCClient; IndexInstance:integer; function GetServerIdNameToCheck:string; begin Result:= ApplicationName; if IndexInstance > 1 then Result+= '-' + IntToStr(IndexInstance); {$IF DEFINED(UNIX)} Result:= GetPipeFileName(Result, True); {$ENDIF} end; begin Result:=True; if IsRunning then begin FServerIPC.Active:=False; try LocalClientIPC:=TSimpleIPCClient.Create(nil); try IndexInstance:=1; Result:=FALSE; repeat LocalClientIPC.ServerID:=GetServerIdNameToCheck; Result:=LocalClientIPC.ServerRunning; inc(IndexInstance); until Result OR (IndexInstance>=10); finally FreeAndNil(LocalClientIPC); end; finally FServerIPC.Active:=True; end; end; end; constructor TUniqueInstance.Create(aInstanceName: String; aServernameByUser: String); begin FInstanceName:= aInstanceName; FServernameByUser:= aServernameByUser; if Length(FServernameByUser) > 0 then FInstanceName+= '-' + FServernameByUser; {$IF DEFINED(UNIX)} FInstanceName:= GetPipeFileName(FInstanceName, True); {$ENDIF} end; destructor TUniqueInstance.Destroy; begin if Assigned(FClientIPC) then FreeAndNil(FClientIPC); if Assigned(FServerIPC) then FreeAndNil(FServerIPC); inherited Destroy; end; {en Initializes instance with given name (currently this is ApplicationName), and user-provided servername (typically, an empty string). If there is no already existing instance, then create it. If there is already existing instance, and the current one is a client, then send params to the server (i.e. to the existing instance) If there is already existing instance, and the current one is not a client, (i.e. gOnlyOneAppInstance is false and no --client/-c options were given), then user-provided servername is altered: firstly, just add a trailing number '2'. If there is already some trailing number, then increase it by 1, until we found a servername that isn't busy yet, and then create instance with this servername. } procedure InitInstanceWithName(aInstanceName: String; aServernameByUser: String); {en If a given servername doesn't contain a trailing number, then add a trailing number '2'; otherwise increase existing number and return resulting string. } function GetNextServername(CurServername: String): String; var SNameRegExp: TRegExpr; CurNumber: Integer; begin SNameRegExp := TRegExpr.Create(); try SNameRegExp.Expression := '(\d+)$'; if SNameRegExp.Exec(CurServername) then begin //-- there is existing trailing number, so, increase it by 1 CurNumber := StrToInt(SNameRegExp.Match[1]) + 1; Result := ReplaceRegExpr(SNameRegExp.Expression, CurServername, IntToStr(CurNumber), False); end else //-- there is no trailing number, so, add a trailing number '2' Result := CurServername + '2'; finally SNameRegExp.Free; end; end; begin FIsUniqueInstance := True; //-- determine if the instance with the same name already exists UniqueInstance := TUniqueInstance.Create(aInstanceName, aServernameByUser); if UniqueInstance.IsRunInstance then //-- it does exist, so, set flag that instance is not unique FIsUniqueInstance := False; //-- if instance is allowed (i.e. is not a client), then find unique // servername if IsInstanceAllowed then begin while UniqueInstance.IsRunInstance do begin UniqueInstance.Free; aServernameByUser := GetNextServername(aServernameByUser); UniqueInstance := TUniqueInstance.Create(aInstanceName, aServernameByUser); end; //-- unique servername is found, so, run it as a server and set // FIsUniqueInstance flag UniqueInstance.RunListen; FIsUniqueInstance := True end else //-- if this instance is not allowed (i.e. it's a client), then send params to the server. UniqueInstance.SendParams; end; {en Initialize instance with an application name and user-provided servername (see detailed comment for InitInstanceWithName) } procedure InitInstance; begin InitInstanceWithName(ApplicationName, CommandLineParams.Servername); end; function IsUniqueInstance: Boolean; begin Result := FIsUniqueInstance; end; function WantsToBeClient: Boolean; begin Result := (gOnlyOneAppInstance or CommandLineParams.Client); end; function IsInstanceAllowed: Boolean; begin Result := (not WantsToBeClient) or IsUniqueInstance; end; finalization if Assigned(UniqueInstance) then begin UniqueInstance.StopListen; FreeAndNil(UniqueInstance); end; end. doublecmd-1.1.30/src/platform/uturbojpeg.pas0000755000175000001440000001243215104114162020100 0ustar alexxusersunit uTurboJPEG; {$mode delphi} interface uses Classes, SysUtils, FPImage, Graphics, IntfGraphics; type { TDCReaderJPEGTurbo } TDCReaderJPEGTurbo = class(TFPCustomImageReader) private FGrayscale: Boolean; protected procedure InternalRead(Str: TStream; Img: TFPCustomImage); override; function InternalCheck(Str: TStream): boolean; override; end; { TJPEGTurboImage } TJPEGTurboImage = class(TJPEGImage) protected procedure InitializeReader({%H-}AImage: TLazIntfImage; {%H-}AReader: TFPCustomImageReader); override; procedure FinalizeReader({%H-}AReader: TFPCustomImageReader); override; class function GetReaderClass: TFPCustomImageReaderClass; override; end; implementation uses DynLibs, CTypes, GraphType, LCLStrConsts, DCOSUtils; const TJCS_GRAY = 2; TJSAMP_GRAY = 3; TJFLAG_ACCURATEDCT = 4096; type tjhandle = type Pointer; TJPF = ( TJPF_RGB = 0, TJPF_BGR, TJPF_RGBX, TJPF_BGRX, TJPF_XBGR, TJPF_XRGB, TJPF_GRAY, TJPF_RGBA, TJPF_BGRA, TJPF_ABGR, TJPF_ARGB, TJPF_CMYK ); var tjInitDecompress: function(): tjhandle; cdecl; tjDestroy: function(handle: tjhandle): cint; cdecl; tjGetErrorStr2: function(handle: tjhandle): PAnsiChar; cdecl; tjDecompressHeader3: function(handle: tjhandle; jpegBuf: pcuchar; jpegSize: culong; width: pcint; height: pcint; jpegSubsamp: pcint; jpegColorspace: pcint): cint; cdecl; tjDecompress2: function(handle: tjhandle; jpegBuf: pcuchar; jpegSize: culong; dstBuf: pcuchar; width: cint; pitch: cint; height: cint; pixelFormat: cint; flags: cint): cint; cdecl; { TJPEGTurboImage } procedure TJPEGTurboImage.InitializeReader(AImage: TLazIntfImage; AReader: TFPCustomImageReader); begin end; procedure TJPEGTurboImage.FinalizeReader(AReader: TFPCustomImageReader); begin PBoolean(@GrayScale)^ := TDCReaderJPEGTurbo(AReader).FGrayScale; end; class function TJPEGTurboImage.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderJPEGTurbo; end; { TDCReaderJPEGTurbo } procedure TDCReaderJPEGTurbo.InternalRead(Str: TStream; Img: TFPCustomImage); var AFormat: TJPF; ASize: Integer; jpegSubsamp: cint; jpegColorspace: cint; AWidth, AHeight: cint; AStream: TMemoryStream; jpegDecompressor: tjhandle; DataDescription: TRawImageDescription; begin ASize:= Str.Size; AStream:= Str as TMemoryStream; jpegDecompressor:= tjInitDecompress(); if (jpegDecompressor = nil) then raise Exception.Create(EmptyStr); try if tjDecompressHeader3(jpegDecompressor, AStream.Memory, ASize, @AWidth, @AHeight, @jpegSubsamp, @jpegColorspace) < 0 then raise Exception.Create(tjGetErrorStr2(jpegDecompressor)); FGrayscale:= (jpegColorspace = TJCS_GRAY) or (jpegSubsamp = TJSAMP_GRAY); // Get native RGBA pixel format DataDescription:= QueryDescription([riqfRGB, riqfAlpha], AWidth, AHeight); with DataDescription do begin // Library does not support reversed bits if BitOrder = riboReversedBits then begin Init_BPP32_R8G8B8A8_BIO_TTB(AWidth, AHeight); end; if ByteOrder = riboLSBFirst then begin case RedShift of 0: AFormat:= TJPF_RGBA; 8: AFormat:= TJPF_ARGB; 16: AFormat:= TJPF_BGRA; 24: AFormat:= TJPF_ABGR; end; end else begin case RedShift of 0: AFormat:= TJPF_ABGR; 8: AFormat:= TJPF_BGRA; 16: AFormat:= TJPF_ARGB; 24: AFormat:= TJPF_RGBA; end; end; end; TLazIntfImage(Img).DataDescription:= DataDescription; if tjDecompress2(jpegDecompressor, AStream.Memory, ASize, TLazIntfImage(Img).PixelData, AWidth, 0, AHeight, cint(AFormat), TJFLAG_ACCURATEDCT) < 0 then raise Exception.Create(tjGetErrorStr2(jpegDecompressor)); finally tjDestroy(jpegDecompressor); end; end; function TDCReaderJPEGTurbo.InternalCheck(Str: TStream): boolean; begin Result:= TJpegImage.IsStreamFormatSupported(Str); end; const {$IF DEFINED(MSWINDOWS)} turbolib = 'libturbojpeg.dll'; {$ELSEIF DEFINED(DARWIN)} turbolib = 'libturbojpeg.dylib'; {$ELSEIF DEFINED(UNIX)} turbolib = 'libturbojpeg.so.0'; {$ENDIF} var libturbo: TLibHandle; procedure Initialize; begin libturbo:= mbLoadLibraryEx(turbolib); if (libturbo <> NilHandle) then try @tjInitDecompress:= SafeGetProcAddress(libturbo, 'tjInitDecompress'); @tjDestroy:= SafeGetProcAddress(libturbo, 'tjDestroy'); @tjGetErrorStr2:= SafeGetProcAddress(libturbo, 'tjGetErrorStr2'); @tjDecompressHeader3:= SafeGetProcAddress(libturbo, 'tjDecompressHeader3'); @tjDecompress2:= SafeGetProcAddress(libturbo, 'tjDecompress2'); // Replace image handler GraphicFilter(TJPEGImage); TPicture.UnregisterGraphicClass(TJPEGImage); TPicture.RegisterFileFormat(TJpegImage.GetFileExtensions, rsJpeg, TJPEGTurboImage); except // Skip end; end; initialization Initialize; finalization if (libturbo <> NilHandle) then FreeLibrary(libturbo); end. doublecmd-1.1.30/src/platform/utrash.pas0000644000175000001440000002761415104114162017225 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some functions for working with trash Copyright (C) 2009-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uTrash; {$mode objfpc}{$H+} {$IF DEFINED(DARWIN)} {$modeswitch objectivec1} {$ENDIF} interface uses LazUtf8, Classes, SysUtils; // this function move files and folders to trash can. function mbDeleteToTrash(const FileName: String): Boolean; // this funсtion checks trash availability. function mbCheckTrash(sPath: String): Boolean; var FileTrashUtf8: function(const FileName: String): Boolean; implementation uses DCOSUtils, DCStrUtils, {$IF DEFINED(MSWINDOWS)} Windows, ShellApi, DCConvertEncoding, uMyWindows {$ELSEIF DEFINED(UNIX)} BaseUnix, DCUnix, uMyUnix, uOSUtils, FileUtil, uSysFolders {$IF DEFINED(DARWIN)} , MacOSAll, DynLibs, CocoaAll, uMyDarwin {$ELSEIF DEFINED(HAIKU)} , DCHaiku, DCConvertEncoding {$ELSE} , uFileProcs, uClipboard, uXdg {$ENDIF} {$ENDIF} ; {$IF DEFINED(DARWIN)} type NSFileManager = objcclass external (NSObject) public class function defaultManager: NSFileManager; message 'defaultManager'; function trashItemAtURL_resultingItemURL_error(url: NSURL; outResultingURL: NSURLPtr; error: NSErrorPtr): Boolean; message 'trashItemAtURL:resultingItemURL:error:'; end; var CoreLib: TLibHandle; FSMoveObjectToTrash: function( const (*var*) source: FSRef; var target: FSRef; options: OptionBits ): OSStatus; stdcall; {$ENDIF} function mbDeleteToTrash(const FileName: String): Boolean; {$IF DEFINED(MSWINDOWS)} var wsFileName: WideString; FileOp: TSHFileOpStructW; dwFileAttributes: LongWord; begin // Windows cannot move file with space at the end into // recycle bin correctly, so we return False in this case if StrEnds(FileName, ' ') then Exit(False); wsFileName:= CeUtf8ToUtf16(FileName); // Windows before Vista cannot move symlink into // recycle bin correctly, so we return False in this case if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion < 6) then begin dwFileAttributes:= GetFileAttributesW(PWideChar(wsFileName)); if FPS_ISLNK(dwFileAttributes) and FPS_ISDIR(dwFileAttributes) then Exit(False); end; wsFileName:= wsFileName + #0; FillChar(FileOp, SizeOf(FileOp), 0); FileOp.wFunc := FO_DELETE; FileOp.pFrom := PWideChar(wsFileName); // Move without question FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT or FOF_NOCONFIRMATION; Result := (SHFileOperationW(@FileOp) = 0) and (not FileOp.fAnyOperationsAborted); end; {$ELSEIF DEFINED(DARWIN)} var theSourceFSRef, theTargetFSRef: FSRef; newFileName: String; trashDir: String; begin // Mac OS X >= 10.8 if (NSAppKitVersionNumber >= 1187) then begin Result:= NSFileManager.defaultManager.trashItemAtURL_resultingItemURL_error(NSURL(NSURL.fileURLWithPath(StringToNSString(FileName))), nil, nil); Exit; end; // Mac OS X >= 10.5 if Assigned(FSMoveObjectToTrash) then begin if (FSPathMakeRefWithOptions(PAnsiChar(FileName), kFSPathMakeRefDoNotFollowLeafSymlink, theSourceFSRef, nil) = noErr) then begin Result:= (FSMoveObjectToTrash(theSourceFSRef, theTargetFSRef, kFSFileOperationDefaultOptions) = noErr); Exit; end; end; { if } { MacOSX 10.4 and below compatibility mode: - If file is in base drive, it gets moved to $HOME/.Trash/ - If file is in some other local drive, it gets moved to /Volumes/$(Volume)/.Trashes/$UID/ - If file is in network, it can't be moved to trash Trash folders are automatically created by OS at login and deleted if empty at logout. If a file with same name exists in trash folder, time is appended to filename } trashDir := FindMountPointPath(FileName); if (trashDir = PathDelim) then trashDir := GetHomeDir + '/.Trash' else begin // file is not located at base drive trashDir += '.Trashes/' + IntToStr(fpGetUID); end; { if } // check if trash folder exists (e.g. network drives don't have one) if not mbDirectoryExists(trashDir) then begin Result := false; Exit; end; { if } newFileName := trashDir + PathDelim + ExtractFileName(FileName); if mbFileSystemEntryExists(newFileName) then newFileName := Format('%s %s', [newFileName, FormatDateTime('hh-nn-ss', Time)]); Result := mbRenameFile(FileName, newFileName); end; {$ELSEIF DEFINED(HAIKU)} const kAttrOriginalPath = '_trk/original_path'; var dev: dev_t; ATrash: String; AHandle: THandle; AFileName, ATrashFile: String; begin AFileName:= CeUtf8ToSys(FileName); dev:= dev_for_path(PAnsiChar(AFileName)); if not mbFindDirectory(B_TRASH_DIRECTORY, dev, True, ATrash) then Exit(False); if IsInPath(ATrash, FileName, True, True) then Exit(False); ATrash:= IncludeTrailingBackslash(ATrash); ATrashFile:= ATrash + ExtractOnlyFileName(FileName); ATrashFile:= GetTempName(ATrashFile, ExtractOnlyFileExt(FileName)); if fpRename(FileName, ATrashFile) < 0 then Exit(False); Result:= mbFileWriteXattr(ATrashFile, kAttrOriginalPath, AFileName); if not Result then begin fpRename(ATrashFile, FileName); end; end; {$ELSEIF DEFINED(UNIX)} // This implementation is based on FreeDesktop.org "Trash Specification" // (http://www.freedesktop.org/wiki/Specifications/trash-spec) const trashFolder = '.Trash'; trashFiles = 'files'; trashInfo = 'info'; trashExt = '.trashinfo'; var sUserID: AnsiString; sTopDir, sFileName, sTemp, sNow, sHomeDir, sTrashInfoFile, sTrashDataFile: String; dtNow: TDateTime; st1, st2: Stat; function CreateTrashInfoFile: Boolean; var hFile: THandle; begin Result:= False; hFile:= mbFileCreate(sTrashInfoFile); if hFile <> feInvalidHandle then begin sTemp:= '[Trash Info]' + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); sTemp:= 'Path=' + URIEncode(FileName) + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); sTemp:= 'DeletionDate=' + FormatDateTime('YYYY-MM-DD', dtNow); sTemp:= sTemp + 'T' + FormatDateTime('hh:nn:ss', dtNow) + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); FileClose(hFile); Result:= True; end; end; function TrashFile: Boolean; begin Result:= False; if CreateTrashInfoFile then begin Result:= (fpRename(UTF8ToSys(FileName), sTrashDataFile) >= 0); if not Result then mbDeleteFile(sTrashInfoFile); end; end; begin Result:= False; dtNow:= Now; sNow:= IntToStr(Trunc(dtNow * 86400000)); // The time in milliseconds sFileName:= ExtractOnlyFileName(FileName) + '_' + sNow + ExtractFileExt(FileName); // Get user home directory sHomeDir:= GetHomeDir; // Check if file in home directory // If it's a file, stat the parent directory instead for correct behavior on OverlayFS, // it shouldn't make any difference in other cases if (fpStat(UTF8ToSys(sHomeDir), st1) >= 0) and (fpLStat(UTF8ToSys(FileName), st2) >= 0) and (fpS_ISDIR(st2.st_mode) or (fpStat(UTF8ToSys(ExtractFileDir(FileName)), st2) >= 0)) and (st1.st_dev = st2.st_dev) then begin // Get trash directory in $XDG_DATA_HOME sTemp:= IncludeTrailingPathDelimiter(GetUserDataDir) + 'Trash'; // Create destination directories if needed if (mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo)) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; sUserID:= IntToStr(fpGetUID); // Get “top directory” for file sTopDir:= FindMountPointPath(FileName); // Try to use "$topdir/.Trash/$uid" directory sTemp:= sTopDir + trashFolder; if (fpLStat(UTF8ToSys(sTemp), st1) >= 0) and fpS_ISDIR(st1.st_mode) and not fpS_ISLNK(st1.st_mode) then begin sTemp:= sTemp + PathDelim + sUserID; // Create destination directories if needed if mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; // Try to use "$topdir/.Trash-$uid" directory sTemp:= sTopDir + trashFolder + '-' + sUserID; if ((fpLStat(UTF8ToSys(sTemp), st1) >= 0) and fpS_ISDIR(st1.st_mode) and not fpS_ISLNK(st1.st_mode)) or mbCreateDir(sTemp) then begin // Create destination directories if needed if mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; end; {$ELSE} begin Result:= False; end; {$ENDIF} function mbCheckTrash(sPath: String): Boolean; {$IF DEFINED(MSWINDOWS)} const wsRoot: WideString = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\'; var Key: HKEY; Value: DWORD; ValueSize: LongInt; VolumeName: WideString; begin Result:= False; if not mbDirectoryExists(sPath) then Exit; ValueSize:= SizeOf(DWORD); // Windows Vista/Seven if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6) then begin VolumeName:= GetMountPointVolumeName(CeUtf8ToUtf16(ExtractFileDrive(sPath))); VolumeName:= 'Volume' + PathDelim + ExtractVolumeGUID(VolumeName); if RegOpenKeyExW(HKEY_CURRENT_USER, PWideChar(wsRoot + VolumeName), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end; end // Windows 2000/XP else if RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWideChar(wsRoot), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'UseGlobalSettings', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 1; // use global settings by default if (Value = 1) then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end else begin RegCloseKey(Key); if RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWideChar(wsRoot + sPath[1]), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end; end; end; end; {$ELSE} begin Result := True; end; {$ENDIF} initialization FileTrashUtf8:= @mbDeleteToTrash; {$IF DEFINED(DARWIN)} CoreLib := LoadLibrary('CoreServices.framework/CoreServices'); if CoreLib <> NilHandle then begin Pointer(FSMoveObjectToTrash) := GetProcedureAddress(CoreLib, 'FSMoveObjectToTrashSync'); end; {$ENDIF} end. doublecmd-1.1.30/src/platform/utarwriter.pas0000644000175000001440000005561115104114162020125 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple TAR archive writer Copyright (C) 2011-2019 Alexander Koblov (alexx2000@mail.ru) This unit is based on libtar.pp from the Free Component Library (FCL) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uTarWriter; {$mode objfpc}{$H+} interface uses Classes, SysUtils,LazUtf8, uGlobs, uWcxModule, WcxPlugin, DCClassesUtf8, uFile, uFileSource, uFileSourceOperationUI, uFileSourceOperation, uFileSourceCopyOperation; const RECORDSIZE = 512; NAMSIZ = 100; TUNMLEN = 32; TGNMLEN = 32; CHKBLANKS = #32#32#32#32#32#32#32#32; USTAR = 'ustar'#32#32; LONGLINK = '././@LongLink'; LONGLEN = RECORDSIZE * 64; LONGMAX = RECORDSIZE * 128; type TDataWriteProcedure = procedure(Buffer: Pointer; BytesToWrite: Int64) of object; TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; { TTarHeader } TTarHeader = packed record Name: array [0..NAMSIZ - 1] of AnsiChar; Mode: array [0..7] of AnsiChar; UID: array [0..7] of AnsiChar; GID: array [0..7] of AnsiChar; Size: array [0..11] of AnsiChar; MTime: array [0..11] of AnsiChar; ChkSum: array [0..7] of AnsiChar; TypeFlag: AnsiChar; LinkName: array [0..NAMSIZ - 1] of AnsiChar; Magic: array [0..7] of AnsiChar; UName: array [0..TUNMLEN - 1] of AnsiChar; GName: array [0..TGNMLEN - 1] of AnsiChar; DevMajor: array [0..7] of AnsiChar; DevMinor: array [0..7] of AnsiChar; Prefix: array [0..154] of AnsiChar; end; { TTarHeaderEx } TTarHeaderEx = packed record case Boolean of True: (HR: TTarHeader); False: (HA: array [0..RECORDSIZE - 1] of AnsiChar); end; { TTarWriter } TTarWriter = class private FSourceStream, FTargetStream: TFileStreamEx; FWcxModule: TWcxModule; FTarHeader: TTarHeaderEx; FBasePath, FTargetPath, FArchiveFileName: String; FBufferIn, FBufferOut: Pointer; FBufferSize: LongWord; FMemPack: TArcHandle; FLongName: array[0..Pred(LONGMAX)] of AnsiChar; procedure WriteFakeHeader(const ItemName: String; IsFileName: Boolean; Offset: LongInt); function MakeLongName(const FileName, LinkName: String; NameLen, LinkLen: LongInt): LongInt; function ReadData(BytesToRead: Int64): Int64; procedure WriteData(Buffer: Pointer; BytesToWrite: Int64); procedure CompressData(BufferIn: Pointer; BytesToCompress: Int64); protected AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; DataWrite: TDataWriteProcedure; procedure ShowError(sMessage: String); procedure AddFile(const FileName: String); function WriteFile(const FileName: String; var Statistics: TFileSourceCopyOperationStatistics): Boolean; public constructor Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction ); constructor Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; WcxModule: TWcxModule ); destructor Destroy; override; function ProcessTree(var Files: TFiles; var Statistics: TFileSourceCopyOperationStatistics): Boolean; end; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, DCFileAttributes, DCWindows, uMyWindows, {$ELSEIF DEFINED(UNIX)} BaseUnix, FileUtil, uUsersGroups, {$ENDIF} uLng, DCStrUtils, DCOSUtils, uOSUtils; {$IF DEFINED(MSWINDOWS)} const FILE_UNIX_MODE = S_IRUSR or S_IWUSR or S_IRGRP or S_IROTH; FOLDER_UNIX_MODE = S_IRUSR or S_IWUSR or S_IXUSR or S_IRGRP or S_IXGRP or S_IROTH or S_IXOTH; {$ENDIF} // Makes a string of octal digits // The string will always be "Len" characters long procedure Octal64(N : Int64; P : PAnsiChar; Len : Integer); var I : Integer; begin for I := Len - 1 downto 0 do begin (P + I)^ := AnsiChar (ORD ('0') + ORD (N and $07)); N := N shr 3; end; for I := 0 to Len - 1 do begin if (P + I)^ in ['0'..'7'] then Break; (P + I)^ := '0'; end; end; procedure OctalN(N : Int64; P : PAnsiChar; Len : Integer); begin Octal64(N, P, Len-1); (P + Len - 1)^ := #0; end; procedure CheckSum(var TarHeader: TTarHeaderEx); var I: Integer; ChkSum : Cardinal = 0; begin with TarHeader do begin StrMove(HR.ChkSum, CHKBLANKS, 8); for I := 0 to SizeOf(TTarHeader) - 1 do Inc(ChkSum, Ord(HA[I])); Octal64(ChkSum, HR.ChkSum, 6); HR.ChkSum[6] := #0; HR.ChkSum[7] := #32; end; end; {$IF DEFINED(MSWINDOWS)} function GetFileInfo(const FileName: String; out FileInfo: TWin32FindDataW): Boolean; var Handle: System.THandle; begin Handle := FindFirstFileW(PWideChar(UTF16LongName(FileName)), FileInfo); Result := Handle <> INVALID_HANDLE_VALUE; if Result then begin FileInfo.dwFileAttributes:= ExtractFileAttributes(FileInfo); Windows.FindClose(Handle); end; end; {$ELSEIF DEFINED(UNIX)} function GetFileInfo(const FileName: String; out FileInfo: BaseUnix.Stat): Boolean; begin Result:= fpLStat(UTF8ToSys(FileName), FileInfo) >= 0; end; {$ENDIF} { TTarWriter } procedure TTarWriter.ShowError(sMessage: String); begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); AbortOperation; end; constructor TTarWriter.Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; DataWrite:= @WriteData; FArchiveFileName:= ArchiveFileName; FTargetPath:= ExtractFilePath(ArchiveFileName); // Allocate buffers FBufferSize := gCopyBlockSize; GetMem(FBufferIn, FBufferSize); FBufferOut:= nil; FWcxModule:= nil; FMemPack:= 0; end; constructor TTarWriter.Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; WcxModule: TWcxModule); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; DataWrite:= @CompressData; FArchiveFileName:= ArchiveFileName; FTargetPath:= ExtractFilePath(ArchiveFileName); // Allocate buffers FBufferSize := gCopyBlockSize; GetMem(FBufferIn, FBufferSize); GetMem(FBufferOut, FBufferSize); FWcxModule:= WcxModule; // Starts packing into memory FMemPack:= FWcxModule.WcxStartMemPack(MEM_OPTIONS_WANTHEADERS, ExtractFileName(ArchiveFileName)); end; destructor TTarWriter.Destroy; begin inherited Destroy; if Assigned(FWcxModule) then begin // Ends packing into memory if (FMemPack <> 0) then FWcxModule.DoneMemPack(FMemPack); end; if Assigned(FBufferIn) then begin FreeMem(FBufferIn); FBufferIn := nil; end; if Assigned(FBufferOut) then begin FreeMem(FBufferOut); FBufferOut := nil; end; end; procedure TTarWriter.AddFile(const FileName: String); {$IF DEFINED(MSWINDOWS)} var FileInfo: TWin32FindDataW; LinkName, FileNameIn: String; FileMode: Cardinal; FileTime, FileSize: Int64; NameLen, LinkLen: LongInt; begin if GetFileInfo(FileName, FileInfo) then with FTarHeader do begin FillByte(HR, SizeOf(FTarHeader), 0); // File name FileNameIn:= ExtractDirLevel(FBasePath, FileName); FileNameIn:= StringReplace (FileNameIn, '\', '/', [rfReplaceAll]); if FPS_ISDIR(FileInfo.dwFileAttributes) then FileNameIn:= FileNameIn + '/'; StrLCopy (HR.Name, PAnsiChar(FileNameIn), NAMSIZ); // File mode if FPS_ISDIR(FileInfo.dwFileAttributes) then FileMode:= FOLDER_UNIX_MODE else FileMode:= FILE_UNIX_MODE; OctalN(FileMode, HR.Mode, 8); // File size FileSize:= (FileInfo.nFileSizeHigh shl 32) or FileInfo.nFileSizeLow; if FPS_ISLNK(FileInfo.dwFileAttributes) then OctalN(0, HR.Size, 12) else OctalN(FileSize, HR.Size, 12); // Modification time FileTime:= Round((Int64(FileInfo.ftLastWriteTime) - 116444736000000000) / 10000000); OctalN(FileTime, HR.MTime, 12); // File type if FPS_ISLNK(FileInfo.dwFileAttributes) then HR.TypeFlag := '2' else if FPS_ISDIR(FileInfo.dwFileAttributes) then HR.TypeFlag := '5' else HR.TypeFlag := '0'; // Link name if FPS_ISLNK(FileInfo.dwFileAttributes) then begin LinkName:= ReadSymLink(FileName); StrLCopy(HR.LinkName, PAnsiChar(LinkName), NAMSIZ); end; // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // Header checksum CheckSum(FTarHeader); // Get file name and link name length NameLen:= Length(FileNameIn); LinkLen:= Length(LinkName); // Write data if not ((NameLen > NAMSIZ) or (LinkLen > NAMSIZ)) then DataWrite(@HA, RECORDSIZE) else begin NameLen:= MakeLongName(FileNameIn, LinkName, NameLen, LinkLen); DataWrite(@FLongName, NameLen); end; end; end; {$ELSEIF DEFINED(UNIX)} var FileInfo: BaseUnix.Stat; LinkName, FileNameIn: String; NameLen, LinkLen: LongInt; begin if GetFileInfo(FileName, FileInfo) then with FTarHeader do begin FillByte(HR, SizeOf(FTarHeader), 0); // File name FileNameIn:= ExtractDirLevel(FBasePath, FileName); if fpS_ISDIR(FileInfo.st_mode) then FileNameIn:= FileNameIn + PathDelim; StrLCopy (HR.Name, PAnsiChar(FileNameIn), NAMSIZ); // File mode OctalN(FileInfo.st_mode and $FFF, HR.Mode, 8); // UID OctalN(FileInfo.st_uid, HR.UID, 8); // GID OctalN(FileInfo.st_gid, HR.GID, 8); // File size if fpS_ISLNK(FileInfo.st_mode) or fpS_ISDIR(FileInfo.st_mode) then OctalN(0, HR.Size, 12) else OctalN(FileInfo.st_size, HR.Size, 12); // Modification time OctalN(FileInfo.st_mtime, HR.MTime, 12); // File type if fpS_ISLNK(FileInfo.st_mode) then HR.TypeFlag:= '2' else if fpS_ISCHR(FileInfo.st_mode) then HR.TypeFlag:= '3' else if fpS_ISBLK(FileInfo.st_mode) then HR.TypeFlag:= '4' else if fpS_ISDIR(FileInfo.st_mode) then HR.TypeFlag:= '5' else if fpS_ISFIFO(FileInfo.st_mode) then HR.TypeFlag:= '6' else HR.TypeFlag:= '0'; // Link name if fpS_ISLNK(FileInfo.st_mode) then begin LinkName:= ReadSymLink(FileName); StrLCopy(HR.LinkName, PAnsiChar(LinkName), NAMSIZ); end; // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // User StrPLCopy(HR.UName, UIDToStr(FileInfo.st_uid), TUNMLEN); // Group StrPLCopy(HR.GName, GIDToStr(FileInfo.st_gid), TGNMLEN); // Header checksum CheckSum(FTarHeader); // Get file name and link name length NameLen:= Length(FileNameIn); LinkLen:= Length(LinkName); // Write data if not ((NameLen > NAMSIZ) or (LinkLen > NAMSIZ)) then DataWrite(@HA, RECORDSIZE) else begin NameLen:= MakeLongName(FileNameIn, LinkName, NameLen, LinkLen); DataWrite(@FLongName, NameLen); end; end; end; {$ENDIF} procedure TTarWriter.WriteFakeHeader(const ItemName: String; IsFileName: Boolean; Offset: LongInt); var TarHeader: TTarHeaderEx; begin with TarHeader do begin FillByte(TarHeader, SizeOf(TTarHeaderEx), 0); StrPLCopy (HR.Name, LONGLINK, NAMSIZ); if IsFileName then HR.TypeFlag:= 'L' else HR.TypeFlag:= 'K'; // File mode OctalN(0, HR.Mode, 8); // UID OctalN(0, HR.UID, 8); // GID OctalN(0, HR.GID, 8); // Name size OctalN(Length(ItemName) + 1, HR.Size, 12); // Modification time OctalN(0, HR.MTime, 12); // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // User StrPLCopy(HR.UName, 'root', TUNMLEN); // Group StrPLCopy(HR.GName, 'root', TGNMLEN); // Header checksum CheckSum(TarHeader); // Copy file record Move(HA, PByte(PAnsiChar(@FLongName) + Offset)^, RECORDSIZE); // Copy file name StrMove(PAnsiChar(@FLongName) + Offset + RECORDSIZE, PAnsiChar(ItemName), Length(ItemName)); end; end; function TTarWriter.MakeLongName(const FileName, LinkName: String; NameLen, LinkLen: LongInt): LongInt; begin with FTarHeader do begin Result:= 0; // Strip string length to maximum length if (NameLen + RECORDSIZE) > LONGLEN then NameLen:= LONGLEN - RECORDSIZE * 2; if (LinkLen + RECORDSIZE) > LONGLEN then LinkLen:= LONGLEN - RECORDSIZE * 2; // Clear output buffer FillChar(FLongName, NameLen + LinkLen + RECORDSIZE * 4, #0); // Write Header for long link name if LinkLen > NAMSIZ then begin WriteFakeHeader(LinkName, False, Result); // Align link name by RECORDSIZE (512) if (LinkLen mod RECORDSIZE) = 0 then Result:= Result + RECORDSIZE + Linklen else Result:= Result + RECORDSIZE * 2 + (LinkLen div RECORDSIZE) * RECORDSIZE; end; // Write Header for long file name if NameLen > NAMSIZ then begin WriteFakeHeader(FileName, True, Result); // Align file name by RECORDSIZE (512) if (NameLen mod RECORDSIZE) = 0 then Result:= Result + RECORDSIZE + NameLen else Result:= Result + RECORDSIZE * 2 + (NameLen div RECORDSIZE) * RECORDSIZE; end; // Copy file record Move(HA, PByte(PAnsiChar(@FLongName) + Result)^, RECORDSIZE); Result:= Result + RECORDSIZE; end; end; function TTarWriter.ReadData(BytesToRead: Int64): Int64; var bRetryRead: Boolean; BytesRead: Int64; begin repeat try bRetryRead := False; FillByte(FBufferIn^, FBufferSize, 0); BytesRead:= FSourceStream.Read(FBufferIn^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + FSourceStream.FileName + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: AbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; Result:= BytesRead; end; procedure TTarWriter.WriteData(Buffer: Pointer; BytesToWrite: Int64); var iTotalDiskSize, iFreeDiskSize: Int64; bRetryWrite: Boolean; BytesWrittenTry, BytesWritten: Int64; begin BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := FTargetStream.Write((Buffer + BytesWritten)^, BytesToWrite - BytesWritten); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesToWrite then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if BytesToWrite > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: AbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + FArchiveFileName + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: AbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; end; procedure TTarWriter.CompressData(BufferIn: Pointer; BytesToCompress: Int64); var InLen: LongInt; Written: LongInt = 0; Taken: LongInt = 0; SeekBy: LongInt = 0; OffSet: LongInt = 0; Result: LongInt; begin InLen:= BytesToCompress; // Do while not all data accepted repeat // Recalculate offset if (Taken <> 0) then begin OffSet:= OffSet + Taken; InLen:= InLen - Taken; end; // Compress input buffer {$PUSH}{$WARNINGS OFF} Result:= FWcxModule.PackToMem(FMemPack, PByte(PtrUInt(BufferIn) + OffSet), InLen, @Taken, FBufferOut, FBufferSize, @Written, @SeekBy); {$POP} if not (Result in [MEMPACK_OK, MEMPACK_DONE]) then begin ShowError(Format(rsMsgLogError + rsMsgLogPack, [FArchiveFileName + ' - ' + GetErrorMsg(Result)])); end; // Seek if needed if (SeekBy <> 0) then FTargetStream.Seek(SeekBy, soCurrent); // Write compressed data if Written > 0 then WriteData(FBufferOut, Written); until ((Taken = InLen) and (BytesToCompress <> 0)) or (Result = MEMPACK_DONE); end; function TTarWriter.WriteFile(const FileName: String; var Statistics: TFileSourceCopyOperationStatistics): Boolean; var BytesRead, BytesToRead, BytesToWrite: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; try FSourceStream:= nil; try FSourceStream := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); TotalBytesToRead := FSourceStream.Size; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; BytesRead:= ReadData(BytesToRead); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesToWrite:= BytesRead; if (BytesRead mod RECORDSIZE) <> 0 then begin // Align by TAR RECORDSIZE BytesToWrite:= (BytesRead div RECORDSIZE) * RECORDSIZE + RECORDSIZE; end; // Write data DataWrite(FBufferIn, BytesToWrite); with Statistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(Statistics); end; CheckOperationState; // check pause and stop end; // while finally FreeAndNil(FSourceStream); end; Result:= True; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + FileName); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + FArchiveFileName); end; end; end; function TTarWriter.ProcessTree(var Files: TFiles; var Statistics: TFileSourceCopyOperationStatistics): Boolean; var aFile: TFile; Divider: Int64 = 1; CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; begin try Result:= False; // Set base path FBasePath:= Files.Path; if FMemPack = 0 then begin Divider:= 2; end; // Update progress with Statistics do begin TotalBytes:= TotalBytes * Divider; UpdateStatistics(Statistics); end; // Check disk free space //if FCheckFreeSpace = True then begin GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if Statistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); AbortOperation; end; end; // Create destination file FTargetStream := TFileStreamEx.Create(FArchiveFileName, fmCreate); try for CurrentFileIndex := 0 to Files.Count - 1 do begin aFile := Files[CurrentFileIndex]; if aFile.IsDirectory or aFile.IsLink then begin // Add file record only AddFile(aFile.FullPath); end else begin // Update progress with Statistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(Statistics); // Add file record AddFile(aFile.FullPath); // TAR current file if not WriteFile(aFile.FullPath, Statistics) then Break; end; CheckOperationState; end; // Finish TAR archive with two null records FillByte(FBufferIn^, RECORDSIZE * 2, 0); DataWrite(FBufferIn, RECORDSIZE * 2); // Finish compression if needed if (FMemPack <> 0) then CompressData(FBufferIn, 0); finally if Assigned(FTargetStream) then begin FreeAndNil(FTargetStream); if (Statistics.DoneBytes <> Statistics.TotalBytes div Divider) then // There was some error, because not all files has been archived. // Delete the not completed target file. mbDeleteFile(FArchiveFileName) else Result:= True; end; end; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + FArchiveFileName); end; end; end; end. doublecmd-1.1.30/src/platform/usystem.pas0000644000175000001440000000130515104114162017415 0ustar alexxusersunit uSystem; {$mode objfpc}{$H+} interface uses Math {$IF DEFINED(MSWINDOWS)} , Windows {$ENDIF} {$IF DEFINED(LCLQT6)} , Qt6 {$ENDIF} ; procedure Initialize; implementation procedure Initialize; begin // Disable invalid floating point operation exception SetExceptionMask(GetExceptionMask + [exInvalidOp, exZeroDivide]); {$IF DEFINED(MSWINDOWS)} SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOOPENFILEERRORBOX); {$ENDIF} end; {$IF DEFINED(LCLQT6)} procedure InitializeOnce; begin QCoreApplication_setAttribute(QtAA_ShareOpenGLContexts, True); end; {$ENDIF} initialization Initialize; {$IF DEFINED(LCLQT6)} InitializeOnce; {$ENDIF} end. doublecmd-1.1.30/src/platform/usysfolders.pas0000644000175000001440000001246115104114162020273 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Get system folders. Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uSysFolders; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils; {en Get the user home directory @returns(The user home directory) } function GetHomeDir : String; {en Get the appropriate directory for the application's configuration files @returns(The directory for the application's configuration files) } function GetAppConfigDir: String; {en Get the appropriate directory for the application's cache files @returns(The directory for the application's cache files) } function GetAppCacheDir: String; {en Get the appropriate directory for the application's data files @returns(The directory for the application's data files) } function GetAppDataDir: String; implementation uses DCOSUtils, DCStrUtils, DCConvertEncoding, LazUTF8 {$IF DEFINED(MSWINDOWS)} , Windows, ShlObj, DCWindows {$ENDIF} {$IF DEFINED(UNIX)} , BaseUnix, Unix, DCUnix {$IF DEFINED(DARWIN)} , CocoaAll, uMyDarwin {$ELSEIF DEFINED(HAIKU)} , DCHaiku {$ELSE} , uXdg {$ENDIF} {$ENDIF} ; function GetHomeDir : String; {$IFDEF MSWINDOWS} begin Result:= ExcludeBackPathDelimiter(mbGetEnvironmentVariable('USERPROFILE')); end; {$ELSE} begin {$IF DEFINED(HAIKU)} if mbFindDirectory(B_USER_DIRECTORY, -1, True, Result) then Result:= ExcludeBackPathDelimiter(Result) else {$ENDIF} Result:= ExcludeBackPathDelimiter(SysToUTF8(GetEnvironmentVariable('HOME'))); end; {$ENDIF} function GetAppConfigDir: String; {$IF DEFINED(MSWINDOWS)} const SHGFP_TYPE_CURRENT = 0; var wPath: array[0..MAX_PATH-1] of WideChar; wUser: UnicodeString; dwLength: DWORD; begin if SUCCEEDED(SHGetFolderPathW(0, CSIDL_APPDATA or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, @wPath[0])) or SUCCEEDED(SHGetFolderPathW(0, CSIDL_LOCAL_APPDATA or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, @wPath[0])) then begin Result := UTF16ToUTF8(UnicodeString(wPath)); end else begin dwLength := UNLEN + 1; SetLength(wUser, dwLength); if GetUserNameW(PWideChar(wUser), @dwLength) then begin SetLength(wUser, dwLength - 1); Result := GetTempDir + UTF16ToUTF8(wUser); end else Result := EmptyStr; end; if Result <> '' then Result := Result + DirectorySeparator + ApplicationName; end; {$ELSEIF DEFINED(DARWIN)} begin Result:= GetHomeDir + '/Library/Preferences/' + ApplicationName; end; {$ELSEIF DEFINED(HAIKU)} begin if mbFindDirectory(B_USER_SETTINGS_DIRECTORY, -1, True, Result) then Result:= IncludeTrailingBackslash(Result) + ApplicationName else begin Result:= GetHomeDir + '/config/settings/' + ApplicationName; end; end; {$ELSE} var uinfo: PPasswordRecord; begin uinfo:= getpwuid(fpGetUID); if (uinfo <> nil) and (uinfo^.pw_dir <> '') then Result:= CeSysToUtf8(uinfo^.pw_dir) + '/.config/' + ApplicationName else Result:= ExcludeTrailingPathDelimiter(SysToUTF8(SysUtils.GetAppConfigDir(False))); end; {$ENDIF} function GetAppCacheDir: String; {$IF DEFINED(MSWINDOWS)} var APath: array[0..MAX_PATH] of WideChar; begin if SHGetSpecialFolderPathW(0, APath, CSIDL_LOCAL_APPDATA, True) then Result:= UTF16ToUTF8(UnicodeString(APath)) + DirectorySeparator + ApplicationName else Result:= GetAppConfigDir; end; {$ELSEIF DEFINED(DARWIN)} begin Result:= NSGetFolderPath(NSCachesDirectory); end; {$ELSEIF DEFINED(HAIKU)} begin if mbFindDirectory(B_USER_CACHE_DIRECTORY, -1, True, Result) then Result:= IncludeTrailingBackslash(Result) + ApplicationName else begin Result:= GetHomeDir + '/config/cache/' + ApplicationName; end; end; {$ELSE} var uinfo: PPasswordRecord; begin uinfo:= getpwuid(fpGetUID); if (uinfo <> nil) and (uinfo^.pw_dir <> '') then Result:= CeSysToUtf8(uinfo^.pw_dir) + '/.cache/' + ApplicationName else Result:= GetHomeDir + '/.cache/' + ApplicationName; end; {$ENDIF} function GetAppDataDir: String; {$IF DEFINED(MSWINDOWS)} begin Result:= GetAppCacheDir; end; {$ELSEIF DEFINED(DARWIN)} begin Result:= NSGetFolderPath(NSApplicationSupportDirectory); end; {$ELSEIF DEFINED(HAIKU)} begin if mbFindDirectory(B_USER_DATA_DIRECTORY, -1, True, Result) then Result:= IncludeTrailingBackslash(Result) + ApplicationName else begin Result:= GetHomeDir + '/config/data/' + ApplicationName; end; end; {$ELSE} begin Result:= IncludeTrailingPathDelimiter(GetUserDataDir) + ApplicationName; end; {$ENDIF} end. doublecmd-1.1.30/src/platform/urandom.pas0000644000175000001440000000637315104114162017363 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Cryptographically secure pseudo-random number generator Copyright (C) 2017 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uRandom; {$mode delphi} interface procedure Random(ABlock: PByte; ACount: Integer); implementation uses ISAAC {$IF DEFINED(MSWINDOWS)} , Windows {$ELSEIF DEFINED(UNIX)} , DCOSUtils {$IF DEFINED(LINUX)} , dl, BaseUnix, InitC {$ENDIF} {$ENDIF} , SysUtils {$IF (FPC_FULLVERSION < 30000)} , LazUTF8SysUtils {$ENDIF} ; threadvar Context: isaac_ctx; {$IF DEFINED(MSWINDOWS)} var RtlGenRandom: function(RandomBuffer: PByte; RandomBufferLength: ULONG): LongBool; stdcall; {$ELSEIF DEFINED(UNIX)} const random_dev = '/dev/urandom'; var HasRandom: Boolean = False; {$IF DEFINED(LINUX)} getrandom: function(buf: PByte; buflen: csize_t; flags: cuint): cint; cdecl; {$ENDIF} {$ENDIF} procedure Random(ABlock: PByte; ACount: Integer); var {$IF DEFINED(UNIX)} Handle: THandle; {$ENDIF} Result: Boolean = False; begin {$IF DEFINED(MSWINDOWS)} Result:= Assigned(RtlGenRandom); if Result then Result:= RtlGenRandom(ABlock, ACount); {$ELSEIF DEFINED(UNIX)} {$IF DEFINED(LINUX)} if Assigned(getrandom) then begin repeat Result:= (getrandom(ABlock, ACount, 0) = ACount); until (Result = True) or (fpgetCerrno <> ESysEINTR); end; if not Result then {$ENDIF} if HasRandom then begin Handle:= mbFileOpen(random_dev, fmOpenRead or fmShareDenyNone); Result:= (Handle <> feInvalidHandle); if Result then begin Result:= (FileRead(Handle, ABlock^, ACount) = ACount); FileClose(Handle); end; end; {$ENDIF} if not Result then begin if (Context.randidx = 0) then begin isaac_inita({%H-}Context, [Int32(GetTickCount64), Integer(GetThreadID), Integer(GetProcessID), GetHeapStatus.TotalFree, Int32(Trunc(Now * MSecsPerDay))], 5); end; isaac_read(Context, ABlock, ACount); end; end; initialization {$IF DEFINED(MSWINDOWS)} @RtlGenRandom:= GetProcAddress(GetModuleHandle('advapi32.dll'), 'SystemFunction036'); {$ELSEIF DEFINED(UNIX)} HasRandom:= mbFileAccess(random_dev, fmOpenRead); {$IF DEFINED(LINUX)} @getrandom:= dlsym(dlopen('libc.so.6', RTLD_NOW), 'getrandom'); {$ENDIF} {$ENDIF} end. doublecmd-1.1.30/src/platform/uplaysound.pas0000644000175000001440000000374115104114162020115 0ustar alexxusersunit uPlaySound; {$mode objfpc}{$H+} {$IF DEFINED(DARWIN)} {$modeswitch objectivec1} {$ENDIF} interface uses Classes, SysUtils {$IF DEFINED(MSWINDOWS)} , MMSystem, LazUTF8 {$ELSEIF DEFINED(DARWIN)} , CocoaAll, uMyDarwin {$ELSE} , LazLogger, sdl2 {$IFNDEF HAIKU} , gst {$ENDIF} {$ENDIF} ; function PlaySound(const FileName: String): Boolean; implementation {$IF DEFINED(DARWIN)} type { NSSoundFinishedDelegate } SoundFinishedDelegate = objcclass(NSObject, NSSoundDelegateProtocol) public procedure sound_didFinishPlaying(Sound: NSSound; FinishedPlaying: Boolean); message 'sound:didFinishPlaying:'; end; var SoundDelegate: SoundFinishedDelegate; { NSSoundFinishedDelegate } procedure SoundFinishedDelegate.sound_didFinishPlaying(Sound: NSSound; FinishedPlaying: Boolean); begin if (FinishedPlaying) then begin Sound.Release; Sound:= nil; Sound.dealloc; end; end; {$ENDIF} function PlaySound(const FileName: String): Boolean; {$IF DEFINED(MSWINDOWS)} begin Result:= sndPlaySoundW(PWideChar(UTF8ToUTF16(FileName)), SND_ASYNC or SND_NODEFAULT); end; {$ELSEIF DEFINED(DARWIN)} var Sound: NSSound; audioFilePath: NSString; begin audioFilePath:= StringToNSString(FileName); Sound:= NSSound.alloc.initWithContentsOfFile_byReference(audioFilePath, True); Sound.setDelegate(SoundDelegate); Result:= Sound.Play; if not Result then begin Sound.Release; Sound:= nil; Sound.dealloc; end; end; {$ELSE} const First: Boolean = True; Play: function(const FileName: String): Boolean = nil; begin if First then begin {$IF NOT DEFINED(HAIKU)} if GST_Initialize then begin Play:= @GST_Play; end else {$ENDIF} if SDL_Initialize then begin Play:= @SDL_Play; end; First:= False; end; if (Play = nil) then Result:= False else begin Result:= Play(FileName); end; end; {$ENDIF} {$IF DEFINED(DARWIN)} initialization SoundDelegate:= SoundFinishedDelegate.alloc.init; {$ENDIF} end. doublecmd-1.1.30/src/platform/upixmapmanager.pas0000644000175000001440000025075615104114162020742 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Fast pixmap memory manager and loader Copyright (C) 2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uPixMapManager; {$mode objfpc}{$H+} {$IFDEF DARWIN} {$modeswitch objectivec1} {$ENDIF} interface { GTK2 is used directly in PixmapManager, because FPC/Lazarus draws bitmaps without alpha channel under GTK2, so bitmaps looks ugly. If this problem will be fixed then GTK2 specific code could be dropped. } {$IF DEFINED(LCLGTK2) AND DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$DEFINE GTK2_FIX} {$ENDIF} // Use freedesktop.org specifications {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$DEFINE XDG} {$ENDIF} uses Classes, SysUtils, Graphics, syncobjs, uFileSorting, DCStringHashListUtf8, uFile, uIconTheme, uDrive, uDisplayFile, uGlobs, uDCReadPSD, uOSUtils, FPImage, LCLVersion, uVectorImage {$IF DEFINED(MSWINDOWS)} , ShlObj {$ELSEIF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} , fgl {$ELSEIF DEFINED(UNIX)} , DCFileAttributes {$IF DEFINED(DARWIN)} , CocoaUtils, uMyDarwin {$ELSEIF NOT DEFINED(HAIKU)} , Math, Contnrs, uGio, uXdg {$IFDEF GTK2_FIX} , gtk2 {$ELSE} , uUnixIconTheme {$ENDIF} {$ENDIF} {$ENDIF}; const DC_THEME_NAME = 'dctheme'; type TDriveIconList = record Size: Integer; Bitmap: array[TDriveType] of TBitmap; end; { TfromWhatBitmapWasLoaded } //Used to indicate from where the icon was loaded from. //Useful when exporting to TC for example which cannot used "as is" the same icon file in some circumstances. TfromWhatBitmapWasLoaded = (fwbwlNotLoaded, fwbwlIconThemeBitmap, fwbwlResourceFileExtracted, fwbwlGraphicFile, fwbwlGraphicFileNotSupportedByTC, fwbwlFileIconByExtension, fwbwlFiDefaultIconID); PTfromWhatBitmapWasLoaded = ^TfromWhatBitmapWasLoaded; { TPixMapManager } TPixMapManager = class private {en Maps file extension to index of bitmap (in FPixmapList) for this file extension. } FExtList : TStringHashListUtf8; {en Maps icon filename to index of bitmap (in FPixmapList) for this icon. Uses absolute file names. } FPixmapsFileNames : TStringHashListUtf8; {en A list of loaded bitmaps. Stores TBitmap objects (on GTK2 it stores PGdkPixbuf pointers). } FPixmapList : TFPList; {en Lock used to synchronize access to PixmapManager storage. } FPixmapsLock: TCriticalSection; FDriveIconList : array[0..2] of TDriveIconList; FiDirIconID : PtrInt; FiDirLinkBrokenIconID : PtrInt; FiLinkBrokenIconID : PtrInt; FiEmblemLinkID: PtrInt; FiEmblemUnreadableID: PtrInt; FiUpDirIconID : PtrInt; FiDefaultIconID : PtrInt; FiExeIconID : PtrInt; FiArcIconID : PtrInt; FiSortAscID : PtrInt; FiSortDescID : PtrInt; FiHashIconID : PtrInt; {$IF DEFINED(MSWINDOWS)} FSysImgList : THandle; FiSysDirIconID : PtrInt; FiEmblemPinned: PtrInt; FiEmblemOnline: PtrInt; FiEmblemOffline: PtrInt; FiShortcutIconID: PtrInt; FOneDrivePath: TStringList; {$ELSEIF DEFINED(DARWIN)} FUseSystemTheme: Boolean; {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(HAIKU)} {en Maps file extension to MIME icon name(s). } FExtToMimeIconName: TFPDataHashTable; {$IFDEF GTK2_FIX} FIconTheme: PGtkIconTheme; {$ELSE} FIconTheme: TIconTheme; {$ENDIF} FHomeFolder: String; {$ENDIF} {en Maps theme icon name to index of bitmap (in FPixmapList) for this icon. } FThemePixmapsFileNames: TStringHashListUtf8; FDCIconTheme: TIconTheme; {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} type TPtrIntMap = specialize TFPGMap; var FSystemIndexList: TPtrIntMap; {$ENDIF} procedure CreateIconTheme; procedure DestroyIconTheme; function AddSpecial(ALow, AHigh: PtrInt): PtrInt; {en Same as LoadBitmap but displays a warning if pixmap file doesn't exist. } function CheckLoadPixmapFromFile(const AIconName: String) : TBitmap; {en If path is absolute tries to load bitmap and add to storage. If path is relative it tries to load theme icon and add to storage. This function should only be called under FPixmapLock. } function CheckAddPixmapLocked(AIconName: String; AIconSize : Integer): PtrInt; {en If path is absolute tries to load bitmap and add to storage. If path is relative it tries to load theme icon and add to storage. Safe to call without a lock. } function CheckAddPixmap(AIconName: String; AIconSize : Integer = 0): PtrInt; {en Loads a theme icon and adds it to storage. This function should only be called under FPixmapLock. } function CheckAddThemePixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; {en Loads a theme icon and adds it to storage. Safe to call without a lock. } function CheckAddThemePixmap(const AIconName: String; AIconSize: Integer = 0) : PtrInt; {en Loads an icon from default theme (DCTheme) and adds it to storage. } function AddDefaultThemePixmap(const AIconName: String; AIconSize: Integer = 0) : PtrInt; {en Loads an icon from the theme } function LoadThemeIcon(AIconTheme: TIconTheme; const AIconName: String; AIconSize: Integer): TBitmap; {en Loads a theme icon. Returns TBitmap (on GTK2 convert GdkPixbuf to TBitmap). This function should only be called under FPixmapLock. } function LoadIconThemeBitmapLocked(AIconName: String; AIconSize: Integer): TBitmap; {en Loads a plugin icon. } function GetPluginIcon(const AIconName: String; ADefaultIcon: PtrInt): PtrInt; {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} function CheckAddSystemIcon(ASystemIndex: PtrInt): PtrInt; {$ENDIF} {$IF DEFINED(WINDOWS)} function GetShellFolderIcon(AFile: TFile): PtrInt; {en Checks if the AIconName points to an icon resource in a library, executable, etc. @param(AIconName Full path to the file with the icon with appended "," and icon index.) @param(IconFile Returns the full path to the file containing the icon resource.) @param(IconIndex Returns the index of the icon in the file.) @returns(@true if AIconName points to an icon resource, @false otherwise.) } function GetIconResourceIndex(const IconPath: String; out IconFile: String; out IconIndex: PtrInt): Boolean; function GetSystemFileIcon(const FileName: String; dwFileAttributes: DWORD = 0): PtrInt; function GetSystemFolderIcon: PtrInt; function GetSystemArchiveIcon: PtrInt; function GetSystemShortcutIcon: PtrInt; inline; function GetSystemExecutableIcon: PtrInt; inline; {$ENDIF} {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} function GetSystemFolderIcon: PtrInt; function GetSystemArchiveIcon: PtrInt; {en Loads MIME icons names and creates a mapping: file extension -> MIME icon name. Doesn't need to be synchronized as long as it's only called from Load(). } procedure LoadMimeIconNames; {en Retrieves index of a theme icon based on file extension using Extension->MIME map. Loads the icon and adds it into PixmapManager, if not yet added. This function should only be called under FPixmapLock. } function GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; {en It is synchronized in GetIconByName->CheckAddPixmap. } function GetIconByDesktopFile(sFileName: String; iDefaultIcon: PtrInt): PtrInt; {$ENDIF} {$IF DEFINED(DARWIN)} function GetSystemFolderIcon: PtrInt; function GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; function LoadImageFileBitmap( const filename:String; const size:Integer ): TBitmap; {$ENDIF} function GetBuiltInDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} procedure LoadApplicationThemeIcon; {$ENDIF} public constructor Create; destructor Destroy; override; procedure Load(const sFileName : String); {en Loads a graphical file (if supported) to a bitmap. @param(AIconFileName must be a full path to the graphical file.) @param(ABitmap receives a new bitmap object.) @returns(@true if bitmap has been loaded, @false otherwise.) } function LoadBitmapFromFile(AIconFileName: String; out ABitmap: TBitmap): Boolean; {en Loads a graphical file as a bitmap if filename is full path. Environment variables in the filename are supported. If filename is not graphic file it tries to load some bitmap associated with the file (by extension, attributes, etc.). Loads an icon from a file's resources if filename ends with ",Nr" (on Windows). Loads a theme icon if filename is not a full path. Performs resize of the bitmap to x if Stretch = @true. If Stretch = @false then clBackColor is ignored. } function LoadBitmapEnhanced(sFileName : String; iIconSize : Integer; Stretch: Boolean; clBackColor : TColor; fromWhatItWasLoaded:PTfromWhatBitmapWasLoaded = nil) : Graphics.TBitmap; {en Loads a theme icon as bitmap. @param(AIconName is a MIME type name.) } function LoadIconThemeBitmap(AIconName: String; AIconSize: Integer): TBitmap; {en Retrieves a bitmap stored in PixmapManager by index (always returns a new copy). On Windows if iIndex points to system icon list it creates a new bitmap by loading system icon and drawing onto the bitmap. } function GetBitmap(iIndex : PtrInt) : TBitmap; function DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y: Integer) : Boolean; function DrawBitmapAlpha(iIndex: PtrInt; Canvas : TCanvas; X, Y: Integer) : Boolean; {en Draws bitmap stretching it if needed to Width x Height. If Width is 0 then full bitmap width is used. If Height is 0 then full bitmap height is used. @param(iIndex Index of pixmap manager's bitmap.) } function DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y, Width, Height: Integer) : Boolean; {en Draws overlay bitmap for a file. @param(AFile File for which is needed to draw the overlay icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) } function DrawBitmapOverlay(AFile: TDisplayFile; DirectAccess: Boolean; Canvas : TCanvas; X, Y: Integer) : Boolean; function GetIconBySortingDirection(SortingDirection: TSortDirection): PtrInt; {en Retrieves icon index in FPixmapList table for a file. @param(AFile File for which to retrieve the icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) @param(LoadIcon Only used when an icon for a file does not yet exist in FPixmapsList. If @true then it loads the icon into FPixmapsList table and returns the index of the loaded icon. If @false then it returns -1 to notify that an icon for the file does not exist in FPixmapsList. If the icon already exists for the file the function returns its index regardless of LoadIcon parameter.) @param(IconsMode Whether to retrieve only standard icon, also from file resources, etc.) @param(GetIconWithLink If the file is a link and GetLinkIcon is @true it retrieves icon with embedded link bitmap. If @false it only retrieves the file icon itself.) } function GetIconByFile(AFile: TFile; DirectAccess: Boolean; LoadIcon: Boolean; IconsMode: TShowIconsMode; GetIconWithLink: Boolean): PtrInt; {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} {en Retrieves overlay icon index for a file. @param(AFile File for which to retrieve the overlay icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) } function GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; {$ELSEIF DEFINED(DARWIN)} function GetApplicationBundleIcon(sFileName: String; iDefaultIcon: PtrInt): PtrInt; {$ENDIF} function GetIconByName(const AIconName: String): PtrInt; function GetThemeIcon(const AIconName: String; AIconSize: Integer) : Graphics.TBitmap; function GetDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor; LoadIcon: Boolean = True) : Graphics.TBitmap; function GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; function GetArchiveIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; function GetFolderIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; {en Returns default icon for a file. For example default folder icon for folder, default executable icon for *.exe, etc. } function GetDefaultIcon(AFile: TFile): PtrInt; {$IF DEFINED(MSWINDOWS)} procedure ClearSystemCache; {$ENDIF} end; var PixMapManager: TPixMapManager = nil; var ICON_SIZES: array [0..3] of Integer = (16, 24, 32, 48); procedure LoadPixMapManager; function AdjustIconSize(ASize: Integer; APixelsPerInch: Integer): Integer; function StretchBitmap(var bmBitmap : Graphics.TBitmap; iIconSize : Integer; clBackColor : TColor; bFreeAtEnd : Boolean = False) : Graphics.TBitmap; implementation uses GraphType, LCLIntf, LCLType, LCLProc, Forms, uGlobsPaths, WcxPlugin, DCStrUtils, uDCUtils, uFileSystemFileSource, uReSample, uDebug, IntfGraphics, DCOSUtils, DCClassesUtf8, LazUTF8, uGraphics, uHash, uSysFolders {$IFDEF GTK2_FIX} , uPixMapGtk, gdk2pixbuf, gdk2, glib2 {$ENDIF} {$IFDEF MSWINDOWS} , ActiveX, CommCtrl, ShellAPI, Windows, DCFileAttributes, uBitmap, uGdiPlus, DCConvertEncoding, uShlObjAdditional, uShellFolder, uMyWindows, uShellFileSourceUtil {$ELSE} , StrUtils, Types, DCBasicTypes {$ENDIF} {$IFDEF DARWIN} , CocoaAll, MacOSAll, uClassesEx {$ENDIF} {$IFDEF RabbitVCS} , uRabbitVCS {$ENDIF} ; {$IF DEFINED(MSWINDOWS)} type TBitmap = Graphics.TBitmap; {$ENDIF} {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} const SystemIconIndexStart: PtrInt = High(PtrInt) div 2; {$ENDIF} function AdjustIconSize(ASize: Integer; APixelsPerInch: Integer): Integer; begin {$IF DEFINED(MSWINDOWS)} if (APixelsPerInch = Screen.PixelsPerInch) then Result:= ASize else begin Result:= MulDiv(ASize, Screen.PixelsPerInch, APixelsPerInch); end; {$ELSE} Result:= ASize; {$ENDIF} end; function StretchBitmap(var bmBitmap : Graphics.TBitmap; iIconSize : Integer; clBackColor : TColor; bFreeAtEnd : Boolean = False) : Graphics.TBitmap; begin if (bmBitmap.Height > 0) and (bmBitmap.Width > 0) and ((iIconSize <> bmBitmap.Height) or (iIconSize <> bmBitmap.Width)) then begin Result := Graphics.TBitMap.Create; try Result.SetSize(iIconSize, iIconSize); Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width); if bFreeAtEnd then FreeAndNil(bmBitmap); except FreeAndNil(Result); raise; end; end // Don't need to stretch. else if bFreeAtEnd then begin Result := bmBitmap; bmBitmap := nil; end else begin Result := Graphics.TBitMap.Create; try Result.Assign(bmBitmap); except FreeAndNil(Result); raise; end; end; end; { TPixMapManager } { TPixMapManager.LoadBitmapFromFile } function TPixMapManager.LoadBitmapFromFile(AIconFileName: String; out ABitmap: Graphics.TBitmap): Boolean; var {$IFDEF GTK2_FIX} pbPicture : PGdkPixbuf; {$ELSE} Picture: TPicture; {$ENDIF} begin Result:= False; {$IFDEF GTK2_FIX} pbPicture := gdk_pixbuf_new_from_file(PChar(AIconFileName), nil); if pbPicture <> nil then begin ABitmap := PixBufToBitmap(pbPicture); gdk_pixmap_unref(pbPicture); // if unsupported BitsPerPixel then exit if (ABitmap = nil) or (ABitmap.RawImage.Description.BitsPerPixel > 32) then raise EInvalidGraphic.Create('Unsupported bits per pixel'); Result:= True; end; {$ELSE} Picture := TPicture.Create; try ABitmap := Graphics.TBitmap.Create; try Picture.LoadFromFile(AIconFileName); //Picture.Graphic.Transparent := True; ABitmap.Assign(Picture.Graphic); // if unsupported BitsPerPixel then exit if ABitmap.RawImage.Description.BitsPerPixel > 32 then raise EInvalidGraphic.Create('Unsupported bits per pixel'); Result:= True; except on E: Exception do begin FreeAndNil(ABitmap); DCDebug(Format('Error: Cannot load pixmap [%s] : %s',[AIconFileName, e.Message])); end; end; finally FreeAndNil(Picture); end; {$ENDIF} end; function TPixMapManager.LoadBitmapEnhanced(sFileName : String; iIconSize : Integer; Stretch: Boolean; clBackColor : TColor; fromWhatItWasLoaded:PTfromWhatBitmapWasLoaded) : Graphics.TBitmap; var {$IFDEF MSWINDOWS} iIconIndex: PtrInt; iIconSmall: Integer; phIcon: HICON = INVALID_HANDLE_VALUE; phIconLarge : HICON = 0; phIconSmall : HICON = 0; IconFileName: String; {$ENDIF} AFile: TFile; AIcon: TIcon; iIndex : PtrInt; FileExt: String; GraphicClass: TGraphicClass; bmStandartBitmap : Graphics.TBitMap = nil; begin Result := nil; if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlNotLoaded; sFileName:= ReplaceEnvVars(sFileName); sFileName:= ExpandAbsolutePath(sFileName); // If the name is not full path then treat it as MIME type. if GetPathType(sFileName) = ptNone then begin bmStandartBitmap := LoadIconThemeBitmap(sFileName, iIconSize); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlIconThemeBitmap; end else {$IFDEF MSWINDOWS} if GetIconResourceIndex(sFileName, IconFileName, iIconIndex) then begin if ExtractIconExW(PWChar(CeUtf8ToUtf16(IconFileName)), iIconIndex, phIconLarge, phIconSmall, 1) = 2 then // if extracted both icons begin // Get system metrics iIconSmall:= GetSystemMetrics(SM_CXSMICON); if iIconSize <= iIconSmall then phIcon:= phIconSmall // Use small icon else begin phIcon:= phIconLarge // Use large icon end; if phIcon <> INVALID_HANDLE_VALUE then begin bmStandartBitmap := BitmapCreateFromHICON(phIcon); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlResourceFileExtracted; end; DestroyIcon(phIconLarge); DestroyIcon(phIconSmall); end; end // GetIconResourceIndex else {$ENDIF} begin FileExt := ExtractOnlyFileExt(sFileName); // if file is graphic GraphicClass:= GetGraphicClassForFileExtension(FileExt); if (GraphicClass <> nil) and mbFileExists(sFileName) then begin if (GraphicClass = TIcon) then begin AIcon:= TIcon.Create; try AIcon.LoadFromFile(sFileName); AIcon.Current:= AIcon.GetBestIndexForSize(TSize.Create(iIconSize, iIconSize)); bmStandartBitmap:= Graphics.TBitmap.Create; try if AIcon.RawImage.Description.AlphaPrec <> 0 then BitmapAssign(bmStandartBitmap, AIcon) else BitmapConvert(AIcon, bmStandartBitmap); except FreeAndNil(bmStandartBitmap); end; except on E: Exception do DCDebug(Format('Error: Cannot load icon [%s] : %s',[sFileName, E.Message])); end; AIcon.Free; end else if (GraphicClass = TScalableVectorGraphics) then begin Stretch := False; bmStandartBitmap := TScalableVectorGraphics.CreateBitmap(sFileName, iIconSize, iIconSize) end else begin LoadBitmapFromFile(sFileName, bmStandartBitmap); end; if fromWhatItWasLoaded <> nil then fromWhatItWasLoaded^ := fwbwlGraphicFile; end; end; if not Assigned(bmStandartBitmap) then // get file icon by ext begin if mbFileSystemEntryExists(sFileName) then begin AFile := TFileSystemFileSource.CreateFileFromFile(sFileName); try iIndex := GetIconByFile(AFile, True, True, sim_all_and_exe, False); bmStandartBitmap := GetBitmap(iIndex); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlFileIconByExtension; finally FreeAndNil(AFile); end; end else // file not found begin bmStandartBitmap := GetBitmap(FiDefaultIconID); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlFiDefaultIconID; end; end; if Stretch and Assigned(bmStandartBitmap) then Result := StretchBitmap(bmStandartBitmap, iIconSize, clBackColor, True) else Result := bmStandartBitmap; end; function TPixMapManager.LoadIconThemeBitmap(AIconName: String; AIconSize: Integer): Graphics.TBitmap; begin FPixmapsLock.Acquire; try Result := LoadIconThemeBitmapLocked(AIconName, AIconSize); finally FPixmapsLock.Release; end; end; function TPixMapManager.CheckLoadPixmapFromFile(const AIconName: String): Graphics.TBitmap; begin if not mbFileExists(AIconName) then begin DCDebug(Format('Warning: pixmap [%s] not exists!',[AIconName])); Exit(nil); end; LoadBitmapFromFile(AIconName, Result); end; function TPixMapManager.CheckAddThemePixmap(const AIconName: String; AIconSize : Integer) : PtrInt; begin if AIconSize = 0 then AIconSize := gIconsSize; FPixmapsLock.Acquire; try Result := CheckAddThemePixmapLocked(AIconName, AIconSize); finally FPixmapsLock.Release; end; end; function TPixMapManager.CheckAddPixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF GTK2_FIX} pbPicture : PGdkPixbuf; {$ELSE} bmpBitmap: Graphics.TBitmap; {$ENDIF} begin Result:= -1; if Length(AIconName) = 0 then Exit; if GetPathType(AIconName) = ptAbsolute then begin // Determine if this file is already loaded. fileIndex := FPixmapsFileNames.Find(AIconName); if fileIndex < 0 then begin {$IFDEF GTK2_FIX} if not mbFileExists(AIconName) then begin DCDebug(Format('Warning: pixmap [%s] not exists!', [AIconName])); Exit; end; pbPicture := gdk_pixbuf_new_from_file_at_size(PChar(AIconName), AIconSize, AIconSize, nil); if Assigned(pbPicture) then begin Result := FPixmapList.Add(pbPicture); FPixmapsFileNames.Add(AIconName, Pointer(Result)); end else DCDebug(Format('Error: pixmap [%s] not loaded!', [AIconName])); {$ELSE} {$IFDEF DARWIN} bmpBitmap := LoadImageFileBitmap(AIconName, AIconSize); {$ELSE} bmpBitmap := LoadBitmapEnhanced(AIconName, AIconSize, False, clNone, nil); {$ENDIF} if Assigned(bmpBitmap) then begin // MacOS' high resolution screen parameters are different from other operating systems {$IF NOT DEFINED(DARWIN)} // Shrink big bitmaps before putting them into PixmapManager, // to speed up later drawing. if (bmpBitmap.Width > 48) or (bmpBitmap.Height > 48) then begin bmpBitmap := StretchBitmap(bmpBitmap, AIconSize, clBlack, True); end; {$ENDIF} Result := FPixmapList.Add(bmpBitmap); FPixmapsFileNames.Add(AIconName, Pointer(Result)); end; {$ENDIF} end else begin Result:= PtrInt(FPixmapsFileNames.List[fileIndex]^.Data); end; end else begin Result := CheckAddThemePixmapLocked(AIconName, AIconSize); end; end; function TPixMapManager.CheckAddPixmap(AIconName: String; AIconSize : Integer): PtrInt; begin AIconName := ReplaceEnvVars(AIconName); if AIconSize = 0 then AIconSize := gIconsSize; FPixmapsLock.Acquire; try Result := CheckAddPixmapLocked(AIconName, AIconSize); finally FPixmapsLock.Release; end; end; procedure TPixMapManager.CreateIconTheme; var DirList: array of string; begin {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$IFDEF GTK2_FIX} // get current gtk theme FIconTheme:= gtk_icon_theme_get_for_screen(gdk_screen_get_default); { // load custom theme FIconTheme:= gtk_icon_theme_new; gtk_icon_theme_set_custom_theme(FIconTheme, 'oxygen'); } {$ELSE} FIconTheme:= TIconTheme.Create(GetCurrentIconTheme, GetUnixIconThemeBaseDirList, GetUnixDefaultTheme); {$ENDIF} {$ENDIF} // Create DC theme. if not gUseConfigInProgramDir then begin AddString(DirList, IncludeTrailingBackslash(GetAppDataDir) + 'pixmaps'); end; AddString(DirList, ExcludeTrailingPathDelimiter(gpPixmapPath)); FDCIconTheme := TIconTheme.Create(gIconTheme, DirList, DC_THEME_NAME); end; procedure TPixMapManager.DestroyIconTheme; begin {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$IFDEF GTK2_FIX} FIconTheme:= nil; {$ELSE} if Assigned(FIconTheme) then FreeAndNil(FIconTheme); {$ENDIF} {$ENDIF} FreeAndNil(FDCIconTheme); end; function TPixMapManager.AddSpecial(ALow, AHigh: PtrInt): PtrInt; var X, Y: Integer; AIcon: TBitmap; ABitmap: TBitmap; Source, Target: TLazIntfImage; begin AIcon:= GetBitmap(ALow); Target:= TLazIntfImage.Create(AIcon.Width, AIcon.Height, [riqfRGB, riqfAlpha]); try {$if lcl_fullversion < 2020000} Target.CreateData; {$endif} Target.FillPixels(colTransparent); Source:= TLazIntfImage.Create(AIcon.RawImage, False); try Target.CopyPixels(Source); finally Source.Free; end; ABitmap:= GetBitmap(AHigh); try Source:= TLazIntfImage.Create(ABitmap.RawImage, False); try X:= (AIcon.Width - ABitmap.Width); Y:= (AIcon.Height - ABitmap.Height); BitmapMerge(Target, Source, X, Y); finally Source.Free; end; finally ABitmap.Free; end; {$IF DEFINED(GTK2_FIX)} Result := FPixmapList.Add(ImageToPixBuf(Target)); AIcon.Free; {$ELSE} BitmapAssign(AIcon, Target); Result := FPixmapList.Add(AIcon); {$ENDIF} finally Target.Free; end; end; {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} procedure TPixMapManager.LoadMimeIconNames; const mime_globs = 'globs'; mime_icons = 'icons'; mime_generic_icons = 'generic-icons'; pixmaps_cache = 'pixmaps.cache'; cache_signature: DWord = $44435043; // 'DCPC' cache_version: DWord = 1; var I, J, K: Integer; mTime: TFileTime; LocalMime: String; iconsList: TStringList; nodeList: TFPObjectList; node: THTDataNode = nil; cache: TFileStreamEx = nil; EntriesCount, IconsCount: Cardinal; GlobalMime: String = '/usr/share/mime/'; sMimeType, sMimeIconName, sExtension: String; procedure LoadGlobs(const APath: String); var I: Integer; globs: TStringListEx = nil; icons: TStringListEx = nil; generic_icons: TStringListEx = nil; begin if mbFileAccess(APath + mime_globs, fmOpenRead) then try // Load mapping: MIME type -> file extension. globs:= TStringListEx.Create; globs.NameValueSeparator:= ':'; globs.LoadFromFile(APath + mime_globs); // Try to load mapping: MIME type -> MIME icon name. if mbFileExists(APath + mime_icons) then begin icons:= TStringListEx.Create; icons.NameValueSeparator:= ':'; icons.LoadFromFile(APath + mime_icons); if (icons.Count = 0) then FreeAndNil(icons); end; // Try to load mapping: MIME type -> generic MIME icon name. if mbFileExists(APath + mime_generic_icons) then begin generic_icons:= TStringListEx.Create; generic_icons.NameValueSeparator:= ':'; generic_icons.LoadFromFile(APath + mime_generic_icons); if (generic_icons.Count = 0) then FreeAndNil(generic_icons); end; // Create mapping: file extension -> list of MIME icon names. for I:= 0 to globs.Count - 1 do if (globs.Strings[I] <> '') and // bypass empty lines (globs.Strings[I][1] <> '#') then // and comments begin sMimeType := globs.Names[I]; sExtension:= ExtractFileExt(globs.ValueFromIndex[I]); // Support only extensions, not full file name masks. if (sExtension <> '') and (sExtension <> '.*') then begin Delete(sExtension, 1, 1); node := THTDataNode(FExtToMimeIconName.Find(sExtension)); if Assigned(node) then iconsList := TStringList(node.Data) else begin iconsList := TStringList.Create; FExtToMimeIconName.Add(sExtension, iconsList); Inc(EntriesCount); end; if Assigned(icons) then begin J := icons.IndexOfName(sMimeType); if J <> -1 then begin sMimeIconName := icons.ValueFromIndex[J]; // found icon if iconsList.IndexOf(sMimeIconName) < 0 then iconsList.Add(sMimeIconName); end; end; sMimeIconName:= StringReplace(sMimeType, '/', '-', []); if iconsList.IndexOf(sMimeIconName) < 0 then iconsList.Add(sMimeIconName); // Shared-mime-info spec says: // "If [generic-icon] is not specified then the mimetype is used to generate the // generic icon by using the top-level media type (e.g. "video" in "video/ogg") // and appending "-x-generic" (i.e. "video-x-generic" in the previous example)." if Assigned(generic_icons) then begin J := generic_icons.IndexOfName(sMimeType); if J <> -1 then sMimeIconName := generic_icons.ValueFromIndex[J] // found generic icon else sMimeIconName := Copy2Symb(sMimeIconName, '-') + '-x-generic'; end else sMimeIconName := Copy2Symb(sMimeIconName, '-') + '-x-generic'; if iconsList.IndexOf(sMimeIconName) < 0 then iconsList.Add(sMimeIconName); end; end; finally globs.Free; icons.Free; generic_icons.Free; end; end; begin LocalMime:= IncludeTrailingBackslash(GetUserDataDir) + 'mime/'; mTime:= Max(mbFileAge(LocalMime + mime_globs), mbFileAge(GlobalMime + mime_globs)); // Try to load from cache. if (mbFileAge(gpCfgDir + pixmaps_cache) = mTime) and (mbFileAccess(gpCfgDir + pixmaps_cache, fmOpenRead)) and (mbFileSize(gpCfgDir + pixmaps_cache) > SizeOf(DWord) * 2) then try cache := TFileStreamEx.Create(gpCfgDir + pixmaps_cache, fmOpenRead or fmShareDenyWrite); try if (cache.ReadDWord = NtoBE(cache_signature)) and (cache.ReadDWord = cache_version) then begin EntriesCount := cache.ReadDWord; FExtToMimeIconName.HashTableSize := EntriesCount; // Each entry is a file extension with a list of icon names. for I := 0 to EntriesCount - 1 do begin sExtension := cache.ReadAnsiString; IconsCount := cache.ReadDWord; iconsList := TStringList.Create; FExtToMimeIconName.Add(sExtension, iconsList); iconsList.Capacity := IconsCount; for J := 0 to IconsCount - 1 do begin iconsList.Add(cache.ReadAnsiString); end; end; Exit; end; finally FreeAndNil(cache); end; except on E: Exception do DCDebug(Format('Error: Cannot load from pixmaps cache [%s] : %s',[gpCfgDir + pixmaps_cache, E.Message])); end; EntriesCount := 0; LoadGlobs(LocalMime); LoadGlobs(GlobalMime); // save to cache if EntriesCount > 0 then try cache := TFileStreamEx.Create(gpCfgDir + pixmaps_cache, fmCreate or fmShareDenyWrite); try cache.WriteDWord(NtoBE(cache_signature)); cache.WriteDWord(cache_version); cache.WriteDWord(EntriesCount); for I := 0 to FExtToMimeIconName.HashTable.Count - 1 do begin nodeList := TFPObjectList(FExtToMimeIconName.HashTable.Items[I]); if Assigned(nodeList) then for J := 0 to nodeList.Count - 1 do begin node := THtDataNode(nodeList.Items[J]); iconsList := TStringList(node.Data); cache.WriteAnsiString(node.Key); cache.WriteDWord(iconsList.Count); for K := 0 to iconsList.Count - 1 do cache.WriteAnsiString(iconsList.Strings[K]); end; end; finally FreeAndNil(cache); // Close file end; mbFileSetTime(gpCfgDir + pixmaps_cache, mTime, 0, 0); except on E: Exception do DCDebug(Format('Error: Cannot save pixmaps cache [%s] : %s',[gpCfgDir + pixmaps_cache, E.Message])); end; end; function TPixMapManager.GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; var I: Integer; node: THTDataNode; iconList: TStringList; begin // This function must be called under FPixmapsLock. Result := -1; // Search for an icon for this file extension. node := THTDataNode(FExtToMimeIconName.Find(AFileExt)); if Assigned(node) then begin iconList := TStringList(node.Data); // Try to load one of the icons in the list. for I := 0 to iconList.Count - 1 do begin Result := CheckAddPixmapLocked(iconList.Strings[I], AIconSize); if Result <> -1 then break; end; end; end; function TPixMapManager.GetSystemFolderIcon: PtrInt; var AIconName: String; begin AIconName:= GioMimeGetIcon('inode/directory'); if Length(AIconName) = 0 then Result:= -1 else begin Result:= CheckAddPixmap(AIconName); end; if (Result < 0) and (AIconName <> 'folder') then begin Result:= CheckAddThemePixmap('folder'); end; end; function TPixMapManager.GetSystemArchiveIcon: PtrInt; begin Result:= CheckAddThemePixmap('package-x-generic'); end; function TPixMapManager.GetIconByDesktopFile(sFileName: String; iDefaultIcon: PtrInt): PtrInt; var I: PtrInt; iniDesktop: TIniFileEx = nil; sIconName: String; begin try iniDesktop:= TIniFileEx.Create(sFileName, fmOpenRead); try sIconName:= iniDesktop.ReadString('Desktop Entry', 'Icon', EmptyStr); finally FreeAndNil(iniDesktop); end; except Exit(iDefaultIcon); end; { Some icon names in .desktop files are specified with an extension, even though it is not allowed by the standard unless an absolute path to the icon is supplied. We delete this extension here. } if GetPathType(sIconName) = ptNone then sIconName := TIconTheme.CutTrailingExtension(sIconName); I:= GetIconByName(sIconName); if I < 0 then Result:= iDefaultIcon else Result:= I; end; {$ELSEIF DEFINED(DARWIN)} function getAppIconFilename( appName: String ) : String; var appBundle : NSBundle; infoDict : NSDictionary; iconTag : NSString; begin Result := ''; appBundle := NSBundle.bundleWithPath( StringToNSString(appName) ); if appBundle=nil then exit; infoDict := appBundle.infoDictionary; if infoDict=nil then exit; iconTag := NSString( infoDict.valueForKey( StringToNSString('CFBundleIconFile')) ); Result := NSStringToString( appBundle.pathForImageResource( iconTag ) ); end; function getBestNSImageWithSize( const srcImage:NSImage; const size:Integer ): NSImage; var bestRect: NSRect; bestImageRep: NSImageRep; bestImage: NSImage; begin Result := nil; if srcImage=nil then exit; bestRect.origin.x := 0; bestRect.origin.y := 0; bestRect.size.width := size; bestRect.size.height := size; bestImageRep:= srcImage.bestRepresentationForRect_context_hints( bestRect, nil, nil ); bestImage:= NSImage.Alloc.InitWithSize( bestImageRep.size ); bestImage.AddRepresentation( bestImageRep ); Result := bestImage; end; function getImageFileBestNSImage( const filename:NSString; const size:Integer ): NSImage; var srcImage: NSImage; begin Result:= nil; try srcImage:= NSImage.Alloc.initByReferencingFile( filename ); Result:= getBestNSImageWithSize( srcImage, size ); finally if Assigned(srcImage) then srcImage.release; end; end; function NSImageToTBitmap( const image:NSImage ): TBitmap; var nsbitmap: NSBitmapImageRep; tempData: NSData; tempStream: TBlobStream = nil; tempBitmap: TPortableNetworkGraphic = nil; bitmap: TBitmap; begin Result:= nil; if image=nil then exit; try nsbitmap:= NSBitmapImageRep.imageRepWithData( image.TIFFRepresentation ); tempData:= nsbitmap.representationUsingType_properties( NSPNGFileType, nil ); tempStream:= TBlobStream.Create( tempData.Bytes, tempData.Length ); tempBitmap:= TPortableNetworkGraphic.Create; tempBitmap.LoadFromStream( tempStream ); bitmap:= TBitmap.Create; bitmap.Assign( tempBitmap ); Result:= bitmap; finally FreeAndNil(tempBitmap); FreeAndNil(tempStream); end; end; function TPixMapManager.LoadImageFileBitmap( const filename:String; const size:Integer ): TBitmap; var image: NSImage; begin Result:= nil; image:= nil; try image:= getImageFileBestNSImage( StringToNSString(filename), size ); if Assigned(image) then Result:= NSImageToTBitmap( image ); finally if Assigned(image) then image.release; end; end; function TPixMapManager.GetApplicationBundleIcon(sFileName: String; iDefaultIcon: PtrInt): PtrInt; var I: PtrInt; sIconName: String; begin Result:= iDefaultIcon; sIconName:= getAppIconFilename(sFileName); I:= GetIconByName(sIconName); if I >= 0 then Result:= I; end; {$ENDIF} // Unix function TPixMapManager.CheckAddThemePixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF GTK2_FIX} pbPicture: PGdkPixbuf = nil; sIconFileName: String; {$ELSE} bmpBitmap: Graphics.TBitmap; {$ENDIF} begin // This function must be called under FPixmapsLock. fileIndex := FThemePixmapsFileNames.Find(AIconName); if fileIndex < 0 then begin {$IF DEFINED(GTK2_FIX) AND DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if gShowIcons > sim_standart then begin pbPicture:= gtk_icon_theme_load_icon(FIconTheme, Pgchar(AIconName), AIconSize, GTK_ICON_LOOKUP_USE_BUILTIN, nil); end; // If not found in system theme or using of system theme is disabled look in DC theme. if not Assigned(pbPicture) then begin sIconFileName := FDCIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then pbPicture := gdk_pixbuf_new_from_file_at_size( PChar(sIconFileName), AIconSize, AIconSize, nil); end; if Assigned(pbPicture) then begin Result := FPixmapList.Add(pbPicture); FThemePixmapsFileNames.Add(AIconName, Pointer(Result)); end else Result := -1; {$ELSE} bmpBitmap := LoadIconThemeBitmapLocked(AIconName, AIconSize); if Assigned(bmpBitmap) then begin Result := FPixmapList.Add(bmpBitmap); // add to list FThemePixmapsFileNames.Add(AIconName, Pointer(Result)); end else Result := -1; {$ENDIF} end else Result := PtrInt(FThemePixmapsFileNames.List[fileIndex]^.Data); end; function TPixMapManager.AddDefaultThemePixmap(const AIconName: String; AIconSize: Integer): PtrInt; var bmpBitmap: Pointer; {$IF DEFINED(GTK2_FIX)} sIconFileName: String; {$ENDIF} begin if AIconSize = 0 then AIconSize := gIconsSize; {$IF DEFINED(GTK2_FIX)} sIconFileName := FDCIconTheme.FindIcon(AIconName, AIconSize); if Length(sIconFileName) = 0 then Exit(-1); bmpBitmap := gdk_pixbuf_new_from_file_at_size(PChar(sIconFileName), AIconSize, AIconSize, nil); {$ELSE} bmpBitmap := LoadThemeIcon(FDCIconTheme, AIconName, AIconSize); {$ENDIF} if (bmpBitmap = nil) then Result := -1 else begin Result := FPixmapList.Add(bmpBitmap); // add to list FThemePixmapsFileNames.Add(AIconName, Pointer(Result)); end; end; function TPixMapManager.LoadThemeIcon(AIconTheme: TIconTheme; const AIconName: String; AIconSize: Integer): Graphics.TBitmap; var FileName: String; begin FileName:= AIconTheme.FindIcon(AIconName, AIconSize); if FileName = EmptyStr then Exit(nil); if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(FileName)) then Result := TScalableVectorGraphics.CreateBitmap(FileName, AIconSize, AIconSize) else begin Result := CheckLoadPixmapFromFile(FileName); if Assigned(Result) then begin Result:= StretchBitmap(Result, AIconSize, clNone, True); end; end; end; function TPixMapManager.LoadIconThemeBitmapLocked(AIconName: String; AIconSize: Integer): Graphics.TBitmap; {$IFDEF GTK2_FIX} var pbPicture: PGdkPixbuf = nil; {$ENDIF} begin // This function must be called under FPixmapsLock. {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} Result := nil; // Try to load icon from system theme if gShowIcons > sim_standart then begin {$IFDEF GTK2_FIX} pbPicture:= gtk_icon_theme_load_icon(FIconTheme, Pgchar(PChar(AIconName)), AIconSize, GTK_ICON_LOOKUP_USE_BUILTIN, nil); if pbPicture <> nil then Result := PixBufToBitmap(pbPicture); {$ELSE} Result:= LoadThemeIcon(FIconTheme, AIconName, AIconSize); {$ENDIF} end; if not Assigned(Result) then {$ENDIF} Result:= LoadThemeIcon(FDCIconTheme, AIconName, AIconSize); end; function TPixMapManager.GetPluginIcon(const AIconName: String; ADefaultIcon: PtrInt): PtrInt; {$IF DEFINED(MSWINDOWS)} var phIcon: HICON; fileIndex: PtrInt; AIconSize: Integer; phIconLarge : HICON = 0; phIconSmall : HICON = 0; begin FPixmapsLock.Acquire; try // Determine if this file is already loaded. fileIndex := FPixmapsFileNames.Find(AIconName); if fileIndex >= 0 then Result:= PtrInt(FPixmapsFileNames.List[fileIndex]^.Data) else begin if ExtractIconExW(PWChar(CeUtf8ToUtf16(AIconName)), 0, phIconLarge, phIconSmall, 1) = 0 then Result:= ADefaultIcon else begin if not ImageList_GetIconSize(FSysImgList, @AIconSize, @AIconSize) then AIconSize:= gIconsSize; // Get system metrics if AIconSize <= GetSystemMetrics(SM_CXSMICON) then phIcon:= phIconSmall // Use small icon else begin phIcon:= phIconLarge // Use large icon end; if phIcon = 0 then Result:= ADefaultIcon else begin Result:= ImageList_AddIcon(FSysImgList, phIcon) + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} Result:= CheckAddSystemIcon(Result); {$ENDIF} end; if (phIconLarge <> 0) then DestroyIcon(phIconLarge); if (phIconSmall <> 0) then DestroyIcon(phIconSmall); end; FPixmapsFileNames.Add(AIconName, Pointer(Result)); end; finally FPixmapsLock.Release; end; end; {$ELSE} var AIcon: TIcon; ABitmap: TBitmap; AFileName: String; AResult: Pointer absolute Result; begin AFileName:= ChangeFileExt(AIconName, '.ico'); if not mbFileExists(AFileName) then Exit(ADefaultIcon); FPixmapsLock.Acquire; try Result:= FPixmapsFileNames.Find(AFileName); if Result >= 0 then AResult:= FPixmapsFileNames.List[Result]^.Data else begin {$IF DEFINED(GTK2_FIX)} AResult := gdk_pixbuf_new_from_file_at_size(PChar(AFileName), gIconsSize, gIconsSize, nil); if (AResult = nil) then Exit(ADefaultIcon); Result := FPixmapList.Add(AResult); FPixmapsFileNames.Add(AFileName, AResult); {$ELSE} AIcon:= TIcon.Create; try AIcon.LoadFromFile(AFileName); AIcon.Current:= AIcon.GetBestIndexForSize(TSize.Create(gIconsSize, gIconsSize)); ABitmap:= TBitmap.Create; try BitmapAssign(ABitmap, AIcon); Result := FPixmapList.Add(ABitmap); FPixmapsFileNames.Add(AFileName, AResult); except FreeAndNil(ABitmap); end; except Result:= ADefaultIcon; end; AIcon.Free; {$ENDIF} end; finally FPixmapsLock.Release; end; end; {$ENDIF} {$IFDEF DARWIN} function TPixMapManager.GetSystemFolderIcon: PtrInt; var FileType: String; begin FileType:= NSFileTypeForHFSTypeCode(kGenericFolderIcon).UTF8String; Result:= GetMimeIcon(FileType, gIconsSize); end; function TPixMapManager.GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; var I: Integer; nData: NSData; nImage: NSImage; bestRect: NSRect; nRepresentations: NSArray; nImageRep: NSImageRep; WorkStream: TBlobStream; tfBitmap: TTiffImage; bmBitmap: TBitmap; begin Result:= -1; if not FUseSystemTheme then Exit; if AIconSize = 24 then AIconSize:= 32; nImage:= NSWorkspace.sharedWorkspace.iconForFileType(NSSTR(PChar(AFileExt))); // Try to find best representation for requested icon size bestRect.origin.x:= 0; bestRect.origin.y:= 0; bestRect.size.width:= AIconSize; bestRect.size.height:= AIconSize; nImageRep:= nImage.bestRepresentationForRect_context_hints(bestRect, nil, nil); if Assigned(nImageRep) then begin nImage:= NSImage.Alloc.InitWithSize(nImageRep.Size); nImage.AddRepresentation(nImageRep); end // Try old method else begin nRepresentations:= nImage.Representations; for I:= nRepresentations.Count - 1 downto 0 do begin nImageRep:= NSImageRep(nRepresentations.objectAtIndex(I)); if (AIconSize <> nImageRep.Size.Width) then nImage.removeRepresentation(nImageRep); end; if nImage.Representations.Count = 0 then Exit; end; nData:= nImage.TIFFRepresentation; tfBitmap:= TTiffImage.Create; WorkStream:= TBlobStream.Create(nData.Bytes, nData.Length); try tfBitmap.LoadFromStream(WorkStream); bmBitmap:= TBitmap.Create; try bmBitmap.Assign(tfBitmap); Result:= FPixmapList.Add(bmBitmap); except bmBitmap.Free; end; finally tfBitmap.Free; nImage.Release; WorkStream.Free; end; end; {$ENDIF} {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} function TPixMapManager.CheckAddSystemIcon(ASystemIndex: PtrInt): PtrInt; var AIcon: HICON; ABitmap: Graphics.TBitmap; begin if not FSystemIndexList.TryGetData(ASystemIndex, Result) then begin Result:= -1; AIcon:= ImageList_GetIcon(FSysImgList, ASystemIndex - SystemIconIndexStart, ILD_NORMAL); if AIcon <> 0 then try ABitmap := BitmapCreateFromHICON(AIcon); if (ABitmap.Width <> gIconsSize) or (ABitmap.Height <> gIconsSize) then ABitmap:= StretchBitmap(ABitmap, gIconsSize, clWhite, True); Result := FPixmapList.Add(ABitmap); FSystemIndexList.Add(ASystemIndex, Result); finally DestroyIcon(AIcon); end end; end; {$ENDIF} {$IFDEF WINDOWS} function TPixMapManager.GetShellFolderIcon(AFile: TFile): PtrInt; const uFlags: UINT = SHGFI_SYSICONINDEX or SHGFI_PIDL; var FileInfo: TSHFileInfoW; begin if (SHGetFileInfoW(PWideChar(TFileShellProperty(AFile.LinkProperty).Item), 0, {%H-}FileInfo, SizeOf(FileInfo), uFlags) <> 0) then begin Result := FileInfo.iIcon + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} FPixmapsLock.Acquire; try Result := CheckAddSystemIcon(Result); finally FPixmapsLock.Release; end; {$ENDIF} Exit; end; // Could not retrieve the icon if AFile.IsDirectory then Result := FiDirIconID else begin Result := FiDefaultIconID; end; end; function TPixMapManager.GetIconResourceIndex(const IconPath: String; out IconFile: String; out IconIndex: PtrInt): Boolean; var iPos, iIndex: Integer; begin iPos := Pos(',', IconPath); if iPos <> 0 then begin if TryStrToInt(Copy(IconPath, iPos + 1, Length(IconPath) - iPos), iIndex) and (iIndex >= 0) then begin IconIndex := iIndex; IconFile := Copy(IconPath, 1, iPos - 1); Result := FileIsExeLib(IconFile); end else Result := False; end else begin IconIndex := 0; IconFile := IconPath; Result := FileIsExeLib(IconFile); end; end; function TPixMapManager.GetSystemFileIcon(const FileName: String; dwFileAttributes: DWORD): PtrInt; var FileInfo: TSHFileInfo; begin if (SHGetFileInfo(PAnsiChar(FileName), // Ansi version is enough. FILE_ATTRIBUTE_NORMAL or dwFileAttributes, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) = 0) then Result := -1 else begin Result := FileInfo.iIcon + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} Result := CheckAddSystemIcon(Result); {$ENDIF} end; end; function TPixMapManager.GetSystemFolderIcon: PtrInt; var FileInfo: TSHFileInfo; begin if (SHGetFileInfo('nil', FILE_ATTRIBUTE_DIRECTORY, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) = 0) then Result := -1 else begin Result := FileInfo.iIcon + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} Result := CheckAddSystemIcon(Result); {$ENDIF} end; end; function TPixMapManager.GetSystemArchiveIcon: PtrInt; var psii: TSHStockIconInfo; begin if not SHGetStockIconInfo(SIID_ZIPFILE, SHGFI_SYSICONINDEX, psii) then Result:= -1 else begin Result:= psii.iSysImageIndex + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} Result := CheckAddSystemIcon(Result); {$ENDIF} end; end; function TPixMapManager.GetSystemShortcutIcon: PtrInt; begin Result:= GetSystemFileIcon('a.url'); end; function TPixMapManager.GetSystemExecutableIcon: PtrInt; begin Result:= GetSystemFileIcon('a.exe'); end; {$ENDIF} constructor TPixMapManager.Create; {$IF DEFINED(DARWIN)} var systemVersion: SInt32; {$ELSEIF DEFINED(MSWINDOWS)} var iIconSize : Integer; {$ENDIF} begin FExtList := TStringHashListUtf8.Create(True); FPixmapsFileNames := TStringHashListUtf8.Create(True); FPixmapList := TFPList.Create; {$IF DEFINED(DARWIN)} FUseSystemTheme:= NSAppKitVersionNumber >= 1038; {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(HAIKU)} FExtToMimeIconName := TFPDataHashTable.Create; FHomeFolder := IncludeTrailingBackslash(GetHomeDir); {$ENDIF} FThemePixmapsFileNames := TStringHashListUtf8.Create(True); CreateIconTheme; {$IFDEF MSWINDOWS} for iIconSize:= Low(ICON_SIZES) to High(ICON_SIZES) do ICON_SIZES[iIconSize]:= AdjustIconSize(ICON_SIZES[iIconSize], 96); if gIconsSize <= ICON_SIZES[0] then iIconSize := SHIL_SMALL else if gIconsSize <= ICON_SIZES[2] then iIconSize := SHIL_LARGE else begin iIconSize := SHIL_EXTRALARGE; end; FSysImgList := SHGetSystemImageList(iIconSize); FOneDrivePath := TStringList.Create; {$ENDIF} {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} FSystemIndexList:= TPtrIntMap.Create; FSystemIndexList.Sorted:= True; {$ENDIF} FPixmapsLock := syncobjs.TCriticalSection.Create; end; destructor TPixMapManager.Destroy; var I : Integer; K: TDriveType; {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} J : Integer; nodeList: TFPObjectList; {$ENDIF} begin if Assigned(FPixmapList) then begin for I := 0 to FPixmapList.Count - 1 do if Assigned(FPixmapList.Items[I]) then {$IFDEF GTK2_FIX} g_object_unref(PGdkPixbuf(FPixmapList.Items[I])); {$ELSE} Graphics.TBitmap(FPixmapList.Items[I]).Free; {$ENDIF} FreeAndNil(FPixmapList); end; if Assigned(FExtList) then FreeAndNil(FExtList); if Assigned(FPixmapsFileNames) then FreeAndNil(FPixmapsFileNames); for I := Low(FDriveIconList) to High(FDriveIconList) do begin with FDriveIconList[I] do begin for K:= Low(Bitmap) to High(Bitmap) do FreeAndNil(Bitmap[K]); end; end; {$IF DEFINED(MSWINDOWS)} FOneDrivePath.Free; ImageList_Destroy(FSysImgList); {$ELSEIF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} for I := 0 to FExtToMimeIconName.HashTable.Count - 1 do begin nodeList := TFPObjectList(FExtToMimeIconName.HashTable.Items[I]); if Assigned(nodeList) then for J := 0 to nodeList.Count - 1 do TStringList(THtDataNode(nodeList.Items[J]).Data).Free; end; FreeAndNil(FExtToMimeIconName); {$ENDIF} {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} FSystemIndexList.Free; {$ENDIF} DestroyIconTheme; FreeAndNil(FThemePixmapsFileNames); FreeAndNil(FPixmapsLock); inherited Destroy; end; procedure TPixMapManager.Load(const sFileName: String); var slPixmapList: TStringListEx; s:String; sExt, sPixMap:String; iekv:integer; iPixMap:PtrInt; I : Integer; iPixmapSize: Integer; begin // This function doesn't need to be synchronized // as long as it is called before creating the main form // (via LoadPixMapManager in doublecmd.lpr). // Load icon themes. {$IF DEFINED(XDG)} if gShowIcons > sim_standart then begin LoadMimeIconNames; // For use with GetMimeIcon {$IFNDEF GTK2_FIX} FIconTheme.Load; // Load system icon theme. {$ENDIF} end; {$ENDIF} FDCIconTheme.Load; // Load DC theme. // load all drive icons FDriveIconList[0].Size := 16; FDriveIconList[1].Size := 24; FDriveIconList[2].Size := 32; for I:= Low(FDriveIconList) to High(FDriveIconList) do with FDriveIconList[I] do begin iPixmapSize := FDriveIconList[I].Size; Bitmap[dtFloppy] := LoadIconThemeBitmapLocked('media-floppy', iPixmapSize); Bitmap[dtHardDisk] := LoadIconThemeBitmapLocked('drive-harddisk', iPixmapSize); Bitmap[dtFlash] := LoadIconThemeBitmapLocked('media-flash', iPixmapSize); Bitmap[dtOptical] := LoadIconThemeBitmapLocked('media-optical', iPixmapSize); Bitmap[dtNetwork] := LoadIconThemeBitmapLocked('network-wired', iPixmapSize); Bitmap[dtVirtual] := LoadIconThemeBitmapLocked('drive-virtual', iPixmapSize); Bitmap[dtRemovable] := LoadIconThemeBitmapLocked('drive-removable-media', iPixmapSize); Bitmap[dtRemovableUsb] := LoadIconThemeBitmapLocked('drive-removable-media-usb', iPixmapSize); end; // load emblems if gIconsSize = 24 then I:= 16 else I:= gIconsSize div 2; FiEmblemLinkID:= CheckAddThemePixmap('emblem-symbolic-link', I); FiEmblemUnreadableID:= CheckAddThemePixmap('emblem-unreadable', I); // add some standard icons FiDefaultIconID:=CheckAddThemePixmap('unknown'); {$IF DEFINED(MSWINDOWS)} FiSysDirIconID := GetSystemFolderIcon; if (Win32MajorVersion >= 10) then begin FiEmblemPinned:= CheckAddThemePixmap('emblem-cloud-pinned', I); FiEmblemOnline:= CheckAddThemePixmap('emblem-cloud-online', I); FiEmblemOffline:= CheckAddThemePixmap('emblem-cloud-offline', I); // Microsoft OneDrive folders GetOneDriveFolders(FOneDrivePath); end; FiShortcutIconID := -1; if gShowIcons > sim_standart then FiShortcutIconID := GetSystemShortcutIcon; if FiShortcutIconID = -1 then FiShortcutIconID := CheckAddThemePixmap('text-html'); {$ENDIF} {$IF NOT DEFINED(HAIKU)} FiDirIconID := -1; if (gShowIcons > sim_standart) and (not (cimFolder in gCustomIcons)) then FiDirIconID := GetSystemFolderIcon; if FiDirIconID = -1 then {$ENDIF} FiDirIconID:= AddDefaultThemePixmap('folder'); FiDirLinkBrokenIconID:= AddSpecial(FiDirIconID, FiEmblemUnreadableID); FiLinkBrokenIconID:= AddSpecial(FiDefaultIconID, FiEmblemUnreadableID); FiUpDirIconID:= CheckAddThemePixmap('go-up'); {$IF DEFINED(MSWINDOWS) OR DEFINED(XDG)} FiArcIconID := -1; if (gShowIcons > sim_standart) and (not (cimArchive in gCustomIcons)) then FiArcIconID := GetSystemArchiveIcon; if FiArcIconID = -1 then {$ENDIF} FiArcIconID := AddDefaultThemePixmap('package-x-generic'); {$IFDEF MSWINDOWS} FiExeIconID := -1; if gShowIcons > sim_standart then FiExeIconID := GetSystemExecutableIcon; if FiExeIconID = -1 then {$ENDIF} FiExeIconID:= CheckAddThemePixmap('application-x-executable'); FiSortAscID := CheckAddThemePixmap('view-sort-ascending'); FiSortDescID := CheckAddThemePixmap('view-sort-descending'); FiHashIconID := CheckAddThemePixmap('text-x-hash'); { Load icons from "extassoc.xml" } for I := 0 to gExts.Count - 1 do begin iPixMap := CheckAddPixmap(gExts.Items[I].Icon, gIconsSize); if iPixMap >= 0 then begin // set pixmap index for all extensions for iekv := 0 to gExts.Items[I].Extensions.Count - 1 do begin sExt := LowerCase(gExts.Items[I].Extensions[iekv]); if FExtList.Find(sExt) < 0 then FExtList.Add(sExt, TObject(iPixMap)); end; end else iPixMap:= FiDefaultIconID; gExts.Items[I].IconIndex:= iPixMap; end; {/ Load icons from "extassoc.xml" } // Load icons from pixmaps.txt only if "Only standart icons" enabled if (gShowIcons = sim_standart) and mbFileExists(sFileName) then try slPixmapList:= TStringListEx.Create; try slPixmapList.LoadFromFile(sFileName); for I:= 0 to slPixmapList.Count - 1 do begin s:= Trim(slPixmapList.Strings[I]); iekv := Pos('=',s); if iekv = 0 then Continue; sPixMap := Copy(s, iekv+1, length(s)-iekv); // Since DC 0.4.6 filename without path is treated as a MIME type // and it shouldn't have an extension. Cut any extension here. // Only '.png' were used in previous versions of pixmaps.txt. if (GetPathType(sPixMap) = ptNone) and StrEnds(sPixMap, '.png') then Delete(sPixMap, Length(sPixMap) - 3, 4); iPixMap := CheckAddPixmap(sPixMap); if iPixMap >= 0 then begin sExt := Copy(s, 1, iekv-1); if FExtList.Find(sExt) < 0 then FExtList.Add(sExt, TObject(iPixMap)); end; end; except on E: Exception do with Application do MessageBox(PAnsiChar(E.Message), PAnsiChar(Title), MB_OK or MB_ICONERROR); end; finally slPixmapList.Free; end; for sExt in HashFileExt do begin FExtList.Add(sExt, TObject(FiHashIconID)); end; (* Set archive icons *) for I:=0 to gWCXPlugins.Count - 1 do begin if gWCXPlugins.Enabled[I] and ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) <> PK_CAPS_HIDE) then begin sExt := gWCXPlugins.Ext[I]; if (Length(sExt) > 0) and (FExtList.Find(sExt) < 0) then FExtList.Add(sExt, TObject(FiArcIconID)); end; end; //for for I:= 0 to gMultiArcList.Count - 1 do begin if gMultiArcList.Items[I].FEnabled then begin sExt := gMultiArcList.Items[I].FExtension; if (Length(sExt) > 0) and (FExtList.Find(sExt) < 0) then FExtList.Add(sExt, TObject(FiArcIconID)); end; end; (* /Set archive icons *) {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} LoadApplicationThemeIcon; {$ENDIF} end; function TPixMapManager.GetBitmap(iIndex: PtrInt): Graphics.TBitmap; var PPixmap: Pointer; PixmapFromList: Boolean = False; {$IFDEF LCLWIN32} AIcon: HICON; {$ENDIF} begin FPixmapsLock.Acquire; try if (iIndex >= 0) and (iIndex < FPixmapList.Count) then begin PPixmap := FPixmapList[iIndex]; PixmapFromList := True; end; finally FPixmapsLock.Release; end; if PixmapFromList then begin {$IFDEF GTK2_FIX} Result:= PixBufToBitmap(PGdkPixbuf(PPixmap)); {$ELSE} // Make a new copy. Result := Graphics.TBitmap.Create; Result.Assign(Graphics.TBitmap(PPixmap)); {$ENDIF} end else {$IFDEF LCLWIN32} if iIndex >= SystemIconIndexStart then begin Result:= nil; AIcon:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); if AIcon <> 0 then try Result := BitmapCreateFromHICON(AIcon); finally DestroyIcon(AIcon); end end else {$ENDIF} Result:= nil; end; function TPixMapManager.DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y: Integer) : Boolean; begin Result := DrawBitmap(iIndex, Canvas, X, Y, gIconsSize, gIconsSize); // No bitmap stretching. end; function TPixMapManager.DrawBitmapAlpha(iIndex: PtrInt; Canvas: TCanvas; X, Y: Integer): Boolean; var ARect: TRect; ABitmap: Graphics.TBitmap; begin ABitmap:= GetBitmap(iIndex); Result := Assigned(ABitmap); if Result then begin BitmapAlpha(ABitmap, 0.5); ARect := Classes.Bounds(X, Y, gIconsSize, gIconsSize); Canvas.StretchDraw(aRect, ABitmap); ABitmap.Free; end; end; function TPixMapManager.DrawBitmap(iIndex: PtrInt; Canvas: TCanvas; X, Y, Width, Height: Integer): Boolean; procedure TrySetSize(aWidth, aHeight: Integer); begin if Width = 0 then Width := aWidth; if Height = 0 then Height := aHeight; end; var PPixmap: Pointer; PixmapFromList: Boolean = False; {$IFDEF MSWINDOWS} hicn: HICON; cx, cy: Integer; {$ENDIF} {$IFDEF GTK2_FIX} pbPicture : PGdkPixbuf; iPixbufWidth : Integer; iPixbufHeight : Integer; {$ELSE} Bitmap: Graphics.TBitmap; aRect: TRect; {$ENDIF} begin Result := True; FPixmapsLock.Acquire; try if (iIndex >= 0) and (iIndex < FPixmapList.Count) then begin PPixmap := FPixmapList[iIndex]; PixmapFromList := True; end; finally FPixmapsLock.Release; end; if PixmapFromList then begin {$IFDEF GTK2_FIX} pbPicture := PGdkPixbuf(PPixmap); iPixbufWidth := gdk_pixbuf_get_width(pbPicture); iPixbufHeight := gdk_pixbuf_get_height(pbPicture); TrySetSize(iPixbufWidth, iPixbufHeight); DrawPixbufAtCanvas(Canvas, pbPicture, 0, 0, X, Y, Width, Height); {$ELSE} Bitmap := Graphics.TBitmap(PPixmap); TrySetSize(Bitmap.Width, Bitmap.Height); aRect := Classes.Bounds(X, Y, Width, Height); Canvas.StretchDraw(aRect, Bitmap); {$ENDIF} end else {$IFDEF MSWINDOWS} if iIndex >= SystemIconIndexStart then try if ImageList_GetIconSize(FSysImgList, @cx, @cy) then TrySetSize(cx, cy) else TrySetSize(gIconsSize, gIconsSize); {$IF DEFINED(LCLWIN32)} if (cx = Width) and (cy = Height) then ImageList_Draw(FSysImgList, iIndex - SystemIconIndexStart, Canvas.Handle, X, Y, ILD_TRANSPARENT) else begin hicn:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); try if IsGdiPlusLoaded then Result:= GdiPlusStretchDraw(hicn, Canvas.Handle, X, Y, Width, Height) else Result:= DrawIconEx(Canvas.Handle, X, Y, hicn, Width, Height, 0, 0, DI_NORMAL); finally DestroyIcon(hicn); end; end; {$ELSEIF DEFINED(LCLQT5)} hicn:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); try Bitmap:= BitmapCreateFromHICON(hicn); aRect := Classes.Bounds(X, Y, Width, Height); Canvas.StretchDraw(aRect, Bitmap); finally FreeAndNil(Bitmap); DestroyIcon(hicn); end {$ENDIF} except Result:= False; end; {$ELSE} Result:= False; {$ENDIF} end; function TPixMapManager.DrawBitmapOverlay(AFile: TDisplayFile; DirectAccess: Boolean; Canvas: TCanvas; X, Y: Integer): Boolean; var I: Integer; begin if AFile.FSFile.IsLink then begin I:= gIconsSize div 2; Result:= DrawBitmap(FiEmblemLinkID, Canvas, X, Y + I, I, I); if Assigned(AFile.FSFile.LinkProperty) then begin if not AFile.FSFile.LinkProperty.IsValid then Result:= DrawBitmap(FiEmblemUnreadableID, Canvas, X + I, Y + I, I, I); end; end {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} else if DirectAccess then begin if AFile.IconOverlayID >= SystemIconIndexStart then Result:= DrawBitmap(AFile.IconOverlayID {$IFDEF RabbitVCS} - SystemIconIndexStart {$ENDIF}, Canvas, X, Y) {$IF DEFINED(MSWINDOWS)} // Special case for OneDrive else if AFile.IconOverlayID > 0 then begin I:= gIconsSize div 2; Result:= DrawBitmap(AFile.IconOverlayID, Canvas, X, Y + I, I, I); end; {$ENDIF} end; {$ENDIF} ; end; function TPixMapManager.GetIconBySortingDirection(SortingDirection: TSortDirection): PtrInt; begin case SortingDirection of sdDescending: begin Result := FiSortDescID; end; sdAscending: begin Result := FiSortAscID; end; else Result := -1; end; end; function TPixMapManager.GetIconByFile(AFile: TFile; DirectAccess: Boolean; LoadIcon: Boolean; IconsMode: TShowIconsMode; GetIconWithLink: Boolean): PtrInt; var Ext: String; {$IFDEF MSWINDOWS} sFileName: String; FileInfo: TSHFileInfoW; dwFileAttributes: DWORD; uFlags: UINT; const FILE_ATTRIBUTE_ICON = FILE_ATTRIBUTE_READONLY or FILE_ATTRIBUTE_SYSTEM; FILE_ATTRIBUTE_SHELL = FILE_ATTRIBUTE_DEVICE or FILE_ATTRIBUTE_VIRTUAL; {$ENDIF} begin Result := -1; if not Assigned(AFile) then Exit; with AFile do begin if Name = '..' then begin Result := FiUpDirIconID; Exit; end; if IsLinkToDirectory and GetIconWithLink then begin if Assigned(LinkProperty) and not LinkProperty.IsValid then Exit(FiDirLinkBrokenIconID); end; if (DirectAccess = False) then begin if (AFile.Attributes = (FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_VIRTUAL)) and Assigned(AFile.LinkProperty) then begin if not LoadIcon then Result := -1 else begin Result := GetPluginIcon(AFile.LinkProperty.LinkTo, FiDirIconID); end; Exit; end else if (AFile.Attributes = (FILE_ATTRIBUTE_OFFLINE or FILE_ATTRIBUTE_VIRTUAL)) and Assigned(AFile.LinkProperty) then begin if not LoadIcon then Result := -1 else begin Result := CheckAddPixmap(AFile.LinkProperty.LinkTo); if Result < 0 then Result := FiDirIconID; end; Exit; end {$IF DEFINED(MSWINDOWS)} else if (AFile.Attributes and FILE_ATTRIBUTE_SHELL = FILE_ATTRIBUTE_SHELL) and Assigned(AFile.LinkProperty) then begin if not LoadIcon then Result := -1 else begin Result:= GetShellFolderIcon(AFile); end; Exit; end; {$ENDIF} end; if IsDirectory or IsLinkToDirectory then begin {$IF DEFINED(MSWINDOWS)} if (IconsMode < sim_all_and_exe) or // Directory can has a special icon only when it has a "read only" or "system" attribute (not (DirectAccess and ((Attributes and FILE_ATTRIBUTE_ICON) <> 0))) or (ScreenInfo.ColorDepth < 16) then {$ELSEIF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if (IconsMode = sim_all_and_exe) and (DirectAccess) then begin if not LoadIcon then Exit(-1); if mbFileAccess(Path + Name + '/.directory', fmOpenRead) then begin Result := GetIconByDesktopFile(Path + Name + '/.directory', FiDirIconID); Exit; end else if (FHomeFolder = Path) then begin Result := CheckAddThemePixmap(GioFileGetIcon(FullPath)); Exit; end else Exit(FiDirIconID); end else {$ELSEIF DEFINED(DARWIN)} if (IconsMode = sim_all_and_exe) and (DirectAccess and (ExtractFileExt(FullPath) = '.app')) then begin if LoadIcon then Result := GetApplicationBundleIcon(FullPath, FiDirIconID) else Result := -1; Exit; end else {$ENDIF} begin Exit(FiDirIconID); end; end else // not directory begin if IsLink and GetIconWithLink then begin if Assigned(LinkProperty) and not LinkProperty.IsValid then Exit(FiLinkBrokenIconID); end; if (Extension = '') then begin {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if IconsMode = sim_all_and_exe then begin if DirectAccess and (Attributes and S_IXUGO <> 0) then begin if not LoadIcon then Result := -1 else begin Ext := GioFileGetIcon(FullPath); if Ext = 'application-x-sharedlib' then Result := FiExeIconID else Result := CheckAddThemePixmap(Ext); end; Exit; end; end; {$ENDIF} Exit(FiDefaultIconID); end; Ext := UTF8LowerCase(Extension); {$IF DEFINED(MSWINDOWS)} if (IconsMode > sim_standart) and (Win32MajorVersion >= 10) then begin if (AFile.Attributes and FILE_ATTRIBUTE_ENCRYPTED <> 0) then begin if (IconsMode = sim_all) or ((Ext <> 'exe') and (Ext <> 'ico') and (Ext <> 'ani') and (Ext <> 'cur')) then begin if (IconsMode = sim_all) and ((Ext = 'ico') or (Ext = 'ani') or (Ext = 'cur')) then Result:= GetSystemFileIcon('aaa', AFile.Attributes) else begin Result:= GetSystemFileIcon(AFile.Name, AFile.Attributes); end; if Result > -1 then Exit; end; end; end; if IconsMode <> sim_all_and_exe then begin if Ext = 'exe' then Exit(FiExeIconID) else if Ext = 'lnk' then Exit(FiDefaultIconID) else if Ext = 'url' then Exit(FiShortcutIconID) end; {$ELSEIF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if IconsMode = sim_all_and_exe then begin if DirectAccess and ((Ext = 'desktop') or (Ext = 'directory')) then begin if LoadIcon then Result := GetIconByDesktopFile(Path + Name, FiDefaultIconID) else Result := -1; Exit; end; end; {$ENDIF} FPixmapsLock.Acquire; try Result := FExtList.Find(Ext); if Result >= 0 then Exit(PtrInt(PtrUInt(FExtList.List[Result]^.Data))); {$IF DEFINED(MSWINDOWS)} if IconsMode = sim_all then begin if (Ext = 'ico') or (Ext = 'ani') or (Ext = 'cur') then Exit(FiDefaultIconID) end else {$ENDIF} if IconsMode <= sim_standart then Exit(FiDefaultIconID); {$IF DEFINED(UNIX) AND NOT DEFINED(HAIKU)} if LoadIcon = False then Exit(-1); Result := GetMimeIcon(Ext, gIconsSize); if Result < 0 then Result := FiDefaultIconID; // Default icon should also be associated with the extension // because it will be faster to find next time. FExtList.Add(Ext, Pointer(Result)); {$ENDIF} finally FPixmapsLock.Release; end; end; {$IF DEFINED(MSWINDOWS)} if DirectAccess then begin if LoadIcon = False then Exit(-1); dwFileAttributes := 0; uFlags := SHGFI_SYSICONINDEX; sFileName := FullPath; end else begin // This is fast, so do it even if LoadIcon is false. dwFileAttributes := FILE_ATTRIBUTE_NORMAL; uFlags := SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES; sFileName := Name; end; if (SHGetFileInfoW(PWideChar(CeUtf8ToUtf16(sFileName)), dwFileAttributes, FileInfo, SizeOf(FileInfo), uFlags) = 0) then begin // Could not retrieve icon. if IsDirectory then Result := FiDirIconID else Result := FiDefaultIconID; end else begin Result := FileInfo.iIcon + SystemIconIndexStart; {$IF DEFINED(LCLQT5)} FPixmapsLock.Acquire; try Result := CheckAddSystemIcon(Result); finally FPixmapsLock.Release; end; {$ENDIF} if IsDirectory then begin // In the fact the folder does not have a special icon if (cimFolder in gCustomIcons) and (Result = FiSysDirIconID) then Result := FiDirIconID; end else if (Ext <> 'exe') and (Ext <> 'ico') and (Ext <> 'ani') and (Ext <> 'cur') and (Ext <> 'lnk') and (Ext <> 'url') then begin FPixmapsLock.Acquire; try FExtList.Add(Ext, Pointer(Result)); finally FPixmapsLock.Release; end; end; end; {$ENDIF} end; end; {$IF DEFINED(MSWINDOWS)} procedure TPixMapManager.ClearSystemCache; var I: Integer; IData: IntPtr; AData: Pointer absolute IData; begin FPixmapsLock.Acquire; try for I:= FExtList.Count - 1 downto 0 do begin AData:= FExtList.List[I]^.Data; if (IData >= SystemIconIndexStart) and (IData <> FiArcIconID) then begin FExtList.Remove(I); end; end; finally FPixmapsLock.Release; end; end; function TPixMapManager.GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; var Index: Integer; begin if not DirectAccess then Exit(-1); Result:= SHGetOverlayIconIndex(AFile.Path, AFile.Name); if Result >= 0 then begin Result += SystemIconIndexStart; end // Special case for OneDrive else if (Win32MajorVersion >= 10) then begin for Index:= 0 to FOneDrivePath.Count - 1 do begin if IsInPath(FOneDrivePath[Index], AFile.Path, True, True) then begin if AFile.Attributes and FILE_ATTRIBUTE_PINNED <> 0 then Result:= FiEmblemPinned else if AFile.Attributes and FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS <> 0 then Result:= FiEmblemOnline else begin Result:= SHGetStorePropertyValue(AFile.FullPath, PKEY_StorageProviderState); case Result of 1: Result:= FiEmblemOnline; 2: Result:= FiEmblemOffline; 3: Result:= FiEmblemPinned; else Result:= 0; end; end; Exit; end; end; Result:= 0; end else Result:= 0; end; {$ELSEIF DEFINED(RabbitVCS)} function TPixMapManager.GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; var Emblem: String; begin if RabbitVCS and DirectAccess then begin Emblem:= CheckStatus(AFile.FullPath); if Length(Emblem) = 0 then Exit(0); Result:= CheckAddThemePixmap(Emblem); Result:= IfThen(Result < 0, 0, Result + SystemIconIndexStart); end else Result:= 0; end; {$ENDIF} function TPixMapManager.GetIconByName(const AIconName: String): PtrInt; begin Result := CheckAddPixmap(AIconName, gIconsSize); end; function TPixMapManager.GetThemeIcon(const AIconName: String; AIconSize: Integer): Graphics.TBitmap; var ABitmap: Graphics.TBitmap; begin Result:= LoadIconThemeBitmap(AIconName, AIconSize); if Assigned(Result) then begin if (Result.Width > AIconSize) or (Result.Height > AIconSize) then begin ABitmap:= Graphics.TBitmap.Create; ABitmap.SetSize(AIconSize, AIconSize); Stretch(Result, ABitmap, ResampleFilters[2].Filter, ResampleFilters[2].Width); Result.Free; Result:= ABitmap; end; end; end; function TPixMapManager.GetDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor; LoadIcon: Boolean) : Graphics.TBitmap; {$IFDEF MSWINDOWS} var PIDL: PItemIDList; SFI: TSHFileInfoW; uFlags: UINT; iIconSmall, iIconLarge: Integer; psii: TSHStockIconInfo; {$ENDIF} begin if Drive^.DriveType = dtVirtual then begin Result := GetBuiltInDriveIcon(Drive, IconSize, clBackColor); Exit; end; Result := nil; {$IFDEF MSWINDOWS} if ScreenInfo.ColorDepth < 15 then Exit; if (not (cimDrive in gCustomIcons)) and (ScreenInfo.ColorDepth > 16) then begin if (Win32MajorVersion < 6) and (not LoadIcon) and (Drive^.DriveType = dtNetwork) then begin Result := GetBuiltInDriveIcon(Drive, IconSize, clBackColor); Exit; end; SFI.hIcon := 0; iIconLarge:= GetSystemMetrics(SM_CXICON); iIconSmall:= GetSystemMetrics(SM_CXSMICON); if (IconSize <= iIconSmall) then uFlags := SHGFI_SMALLICON // Use small icon else begin uFlags := SHGFI_LARGEICON; // Use large icon end; uFlags := uFlags or SHGFI_ICON; if (Drive^.DriveType = dtSpecial) then begin if Succeeded(SHParseDisplayName(PWideChar(CeUtf8ToUtf16(Drive^.DeviceId)), nil, PIDL, 0, nil)) then begin SHGetFileInfoW(PWideChar(PIDL), 0, SFI, SizeOf(SFI), uFlags or SHGFI_PIDL); CoTaskMemFree(PIDL); end; end else if (not LoadIcon) and (Drive^.DriveType = dtNetwork) and SHGetStockIconInfo(SIID_DRIVENET, uFlags, psii) then SFI.hIcon:= psii.hIcon else if (SHGetFileInfoW(PWideChar(CeUtf8ToUtf16(Drive^.Path)), 0, SFI, SizeOf(SFI), uFlags) = 0) then begin SFI.hIcon := 0; end; if (SFI.hIcon <> 0) then try Result:= BitmapCreateFromHICON(SFI.hIcon); if (IconSize <> iIconSmall) and (IconSize <> iIconLarge) then // non standart icon size Result := StretchBitmap(Result, IconSize, clBackColor, True); finally DestroyIcon(SFI.hIcon); end; end // not gCustomDriveIcons else {$ENDIF} begin Result := GetBuiltInDriveIcon(Drive, IconSize, clBackColor); end; if Assigned(Result) and (gDiskIconsAlpha in [1..99]) and (not Drive^.IsMounted) then begin BitmapAlpha(Result, gDiskIconsAlpha / 100); end; end; function TPixMapManager.GetBuiltInDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; var DriveIconListIndex: Integer; ABitmap: Graphics.TBitmap; begin {$IFDEF MSWINDOWS} if ScreenInfo.ColorDepth < 15 then Exit(nil); {$ENDIF} case IconSize of 16: // Standart 16x16 icon size DriveIconListIndex := 0; 24: // Standart 24x24 icon size DriveIconListIndex := 1; 32: // Standart 32x32 icon size DriveIconListIndex := 2; else // for non standart icon size use more large icon for stretch DriveIconListIndex := 2; end; with FDriveIconList[DriveIconListIndex] do begin if Assigned(Bitmap[Drive^.DriveType]) then ABitmap:= Bitmap[Drive^.DriveType] else begin ABitmap:= Bitmap[dtHardDisk]; end; end; // if need stretch icon if (IconSize <> 16) and (IconSize <> 24) and (IconSize <> 32) then begin Result := StretchBitmap(ABitmap, IconSize, clBackColor, False); end else begin Result := Graphics.TBitmap.Create; Result.Assign(ABitmap); end; // 'Bitmap' should not be freed, because it only points to DriveIconList. end; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} procedure TPixMapManager.LoadApplicationThemeIcon; var AIcon: TIcon; LargeIcon: Graphics.TBitmap; SmallSize, LargeSize: Integer; SmallIcon: Graphics.TBitmap = nil; begin LargeSize:= GetSystemMetrics(SM_CXICON); SmallSize:= GetSystemMetrics(SM_CXSMICON); LargeIcon:= LoadIconThemeBitmapLocked('doublecmd', LargeSize); if (LargeSize <> SmallSize) then begin SmallIcon:= LoadIconThemeBitmapLocked('doublecmd', SmallSize); end; if Assigned(LargeIcon) or Assigned(SmallIcon) then try AIcon:= TIcon.Create; try if Assigned(SmallIcon) then begin AIcon.Add(pf32bit, SmallIcon.Height, SmallIcon.Width); AIcon.AssignImage(SmallIcon); SmallIcon.Free; end; if Assigned(LargeIcon) then begin AIcon.Add(pf32bit, LargeIcon.Height, LargeIcon.Width); if AIcon.Count > 1 then AIcon.Current:= AIcon.Current + 1; AIcon.AssignImage(LargeIcon); LargeIcon.Free; end; Application.Icon.Assign(AIcon); finally AIcon.Free; end; except // Skip end; end; {$ENDIF} function TPixMapManager.GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; var Drive: TDrive = (DisplayName: ''; Path: ''; DriveLabel: ''; DeviceId: ''; DriveType: dtHardDisk; DriveSize: 0; FileSystem: ''; IsMediaAvailable: True; IsMediaEjectable: False; IsMediaRemovable: False; IsMounted: True; AutoMount: True); begin Result := GetBuiltInDriveIcon(@Drive, IconSize, clBackColor); end; function TPixMapManager.GetArchiveIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; begin Result := GetBitmap(FiArcIconID); if Assigned(Result) then begin // if need stretch icon if (IconSize <> gIconsSize) then begin Result := StretchBitmap(Result, IconSize, clBackColor, True); end; end; end; function TPixMapManager.GetFolderIcon(IconSize: Integer; clBackColor: TColor): Graphics.TBitmap; begin Result := GetBitmap(FiDirIconID); if Assigned(Result) then begin // if need stretch icon if (IconSize <> gIconsSize) then begin Result := StretchBitmap(Result, IconSize, clBackColor, True); end; end; end; function TPixMapManager.GetDefaultIcon(AFile: TFile): PtrInt; begin if AFile.IsDirectory then Result := FiDirIconID else if UTF8LowerCase(AFile.Extension) = 'exe' then Result := FiExeIconID else Result := FiDefaultIconID; end; procedure LoadPixMapManager; var Q: QWord; begin Q:= SysUtils.GetTickCount64; DCDebug('Creating PixmapManager'); PixMapManager:=TPixMapManager.Create; PixMapManager.Load(gpCfgDir + 'pixmaps.txt'); DCDebug('Creating PixmapManager done '+ IntToStr(SysUtils.GetTickCount64 - Q)); end; initialization finalization if Assigned(PixMapManager) then begin DCDebug('Shutting down PixmapManager'); FreeAndNil(PixMapManager); end; end. doublecmd-1.1.30/src/platform/upixmapgtk.pas0000644000175000001440000000665215104114162020107 0ustar alexxusersunit uPixMapGtk; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, IntfGraphics, gtk2def, gdk2pixbuf, gdk2, glib2; function ImageToPixBuf(Image: TLazIntfImage): PGdkPixbuf; procedure DrawPixbufAtCanvas(Canvas: TCanvas; Pixbuf : PGdkPixbuf; SrcX, SrcY, DstX, DstY, Width, Height: Integer); function PixBufToBitmap(Pixbuf: PGdkPixbuf): TBitmap; implementation uses GraphType, uGraphics; procedure DrawPixbufAtCanvas(Canvas: TCanvas; Pixbuf : PGdkPixbuf; SrcX, SrcY, DstX, DstY, Width, Height: Integer); var gdkDrawable : PGdkDrawable; gdkGC : PGdkGC; gtkDC : TGtkDeviceContext; iPixbufWidth, iPixbufHeight: Integer; StretchedPixbuf: PGdkPixbuf; begin gtkDC := TGtkDeviceContext(Canvas.Handle); gdkDrawable := gtkDC.Drawable; gdkGC := gdk_gc_new(gdkDrawable); iPixbufWidth := gdk_pixbuf_get_width(Pixbuf); iPixbufHeight := gdk_pixbuf_get_height(Pixbuf); if (Width <> iPixbufWidth) or (Height <> iPixbufHeight) then begin StretchedPixbuf := gdk_pixbuf_scale_simple(Pixbuf, Width, Height, GDK_INTERP_BILINEAR); gdk_draw_pixbuf(gdkDrawable, gdkGC, StretchedPixbuf, SrcX, SrcY, DstX, DstY, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); gdk_pixbuf_unref(StretchedPixbuf); end else gdk_draw_pixbuf(gdkDrawable, gdkGC, Pixbuf, SrcX, SrcY, DstX, DstY, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); g_object_unref(gdkGC); end; function PixBufToBitmap(Pixbuf: PGdkPixbuf): TBitmap; var width, height, rowstride, n_channels, i, j: Integer; pixels: Pguchar; pSrc: PByte; pDst: PLongWord; BmpData: TLazIntfImage; hasAlphaChannel: Boolean; QueryFlags: TRawImageQueryFlags = [riqfRGB]; Description: TRawImageDescription; begin Result := nil; n_channels:= gdk_pixbuf_get_n_channels(Pixbuf); if ((n_channels <> 3) and (n_channels <> 4)) or // RGB or RGBA (gdk_pixbuf_get_colorspace(pixbuf) <> GDK_COLORSPACE_RGB) or (gdk_pixbuf_get_bits_per_sample(pixbuf) <> 8) then Exit; width:= gdk_pixbuf_get_width(Pixbuf); height:= gdk_pixbuf_get_height(Pixbuf); rowstride:= gdk_pixbuf_get_rowstride(Pixbuf); pixels:= gdk_pixbuf_get_pixels(Pixbuf); hasAlphaChannel:= gdk_pixbuf_get_has_alpha(Pixbuf); if hasAlphaChannel then Include(QueryFlags, riqfAlpha); BmpData := TLazIntfImage.Create(width, height, QueryFlags); try BmpData.CreateData; Description := BmpData.DataDescription; pDst := PLongWord(BmpData.PixelData); for j:= 0 to Height - 1 do begin pSrc := PByte(pixels) + j * rowstride; for i:= 0 to Width - 1 do begin pDst^ := pSrc[0] shl Description.RedShift + pSrc[1] shl Description.GreenShift + pSrc[2] shl Description.BlueShift; if hasAlphaChannel then pDst^ := pDst^ + pSrc[3] shl Description.AlphaShift; Inc(pSrc, n_channels); Inc(pDst); end; end; Result := TBitmap.Create; BitmapAssign(Result, BmpData); if not hasAlphaChannel then Result.Transparent := True; finally BmpData.Free; end; end; procedure GdkPixbufDestroy(pixels: Pguchar; data: gpointer); cdecl; begin PRawImage(data)^.FreeData; Dispose(PRawImage(data)); end; function ImageToPixBuf(Image: TLazIntfImage): PGdkPixbuf; var ARawImage: PRawImage; begin New(ARawImage); Image.GetRawImage(ARawImage^, True); Result:= gdk_pixbuf_new_from_data(Image.PixelData, GDK_COLORSPACE_RGB, True, 8, Image.Width, Image.Height, Image.Width * 4, @GdkPixbufDestroy, ARawImage); end; end. doublecmd-1.1.30/src/platform/uosforms.pas0000644000175000001440000007353515104114162017577 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. Copyright (C) 2006-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uOSForms; {$mode delphi}{$H+} interface uses LCLType, LMessages, Forms, Classes, SysUtils, Controls, uGlobs, uShellContextMenu, uDrive, uFile, uFileSource; type { TAloneForm } TAloneForm = class(TForm) {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} protected procedure DoClose(var CloseAction: TCloseAction); override; {$ENDIF} public constructor CreateNew(AOwner: TComponent; Num: Integer = 0); override; end; { TModalDialog } TModalDialog = class(TAloneForm) protected FParentWindow: HWND; procedure CloseModal; protected procedure CreateParams(var Params: TCreateParams); override; public procedure ExecuteModal; virtual; function ShowModal: Integer; override; end; { TModalForm } {$IF DEFINED(LCLWIN32)} TModalForm = class(TModalDialog); {$ELSE} TModalForm = class(TForm); {$ENDIF} {en Must be called on main form create @param(MainForm Main form) } procedure MainFormCreate(MainForm : TCustomForm); {en Show file/folder properties dialog @param(Files List of files to show properties for) } procedure ShowFilePropertiesDialog(aFileSource: IFileSource; const Files: TFiles); {en Show file/folder context menu @param(Parent Parent window) @param(Files List of files to show context menu for. It is freed by this function.) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowContextMenu(Parent: TWinControl; var Files : TFiles; X, Y : Integer; Background: Boolean; CloseEvent: TNotifyEvent; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); {en Show drive context menu @param(Parent Parent window) @param(sPath Path to drive) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowDriveContextMenu(Parent: TWinControl; ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); {en Show trash context menu @param(Parent Parent window) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowTrashContextMenu(Parent: TWinControl; X, Y : Integer; CloseEvent: TNotifyEvent); {en Show open icon dialog @param(Owner Owner) @param(sFileName Icon file name) @returns(The function returns @true if successful, @false otherwise) } function ShowOpenIconDialog(Owner: TCustomControl; var sFileName : String) : Boolean; {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {en Show open with dialog @param(FileList List of files to open with) } procedure ShowOpenWithDialog(TheOwner: TComponent; const FileList: TStringList); {$ENDIF} function GetControlHandle(AWindow: TWinControl): HWND; function GetWindowHandle(AWindow: TWinControl): HWND; overload; function GetWindowHandle(AHandle: HWND): HWND; overload; procedure CopyNetNamesToClip; function DarkStyle: Boolean; implementation uses ExtDlgs, LCLProc, Menus, Graphics, InterfaceBase, WSForms, LCLIntf, fMain, uConnectionManager, uShowMsg, uLng, uDCUtils, uDebug {$IF DEFINED(MSWINDOWS)} , LCLStrConsts, ComObj, ActiveX, DCOSUtils, uOSUtils, uFileSystemFileSource , uTotalCommander, FileUtil, Windows, ShlObj, uShlObjAdditional , uWinNetFileSource, uVfsModule, uMyWindows, DCStrUtils, uOleDragDrop , uDCReadRSVG, uFileSourceUtil, uGdiPlusJPEG, uListGetPreviewBitmap , Dialogs, Clipbrd, JwaDbt, uThumbnailProvider, uShellFolder , uRecycleBinFileSource, uWslFileSource, uDCReadHEIF, uDCReadWIC , uShellFileSource, uPixMapManager {$IF DEFINED(DARKWIN)} , uDarkStyle {$ELSEIF DEFINED(LCLQT5)} , qt5, qtwidgets, uDarkStyle {$ENDIF} {$ENDIF} {$IF DEFINED(DARWIN)} , BaseUnix, Errors, fFileProperties , uQuickLook, uOpenDocThumb, uMyDarwin, uDefaultTerminal {$ELSEIF DEFINED(UNIX)} , BaseUnix, Errors, fFileProperties, uJpegThumb, uOpenDocThumb {$IF NOT DEFINED(HAIKU)} , uDCReadRSVG, uMagickWand, uGio, uGioFileSource, uVfsModule, uVideoThumb , uDCReadWebP, uFolderThumb, uAudioThumb, uDefaultTerminal, uDCReadHEIF , uTrashFileSource, uFileManager, uFileSystemFileSource, fOpenWith , uNetworkFileSource {$ENDIF} {$IF DEFINED(LINUX)} , uFlatpak {$ENDIF} {$IF DEFINED(LCLQT)} , qt4, qtwidgets {$ENDIF} {$IF DEFINED(LCLQT5)} , qt5, qtwidgets {$ENDIF} {$IF DEFINED(LCLQT6)} , qt6, qtwidgets {$ENDIF} {$IF DEFINED(LCLGTK2)} , Gtk2, Glib2, Themes {$ENDIF} {$ENDIF} {$IF FPC_FULLVERSION < 30300} , uDCReadPNM {$ENDIF} , uDCReadSVG, uTurboJPEG; { TAloneForm } {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} var FMain, FBefore, FCurrent: TCustomForm; procedure TAloneForm.DoClose(var CloseAction: TCloseAction); procedure TrySetFocus(Form: TCustomForm); inline; begin if Form.CanFocus then Form.SetFocus; end; var psnFront, psnCurrent: ProcessSerialNumber; begin inherited DoClose(CloseAction); if (GetCurrentProcess(psnCurrent) = noErr) and (GetFrontProcess(psnFront) = noErr) then begin // Check that our process is active if (psnCurrent.lowLongOfPSN = psnFront.lowLongOfPSN) and (psnCurrent.highLongOfPSN = psnFront.highLongOfPSN) then begin // Restore active form if (Screen.CustomFormIndex(FBefore) < 0) then TrySetFocus(FMain) else if (FBefore <> Self) then TrySetFocus(FBefore) else FBefore:= FMain; end; end; end; procedure ActiveFormChangedHandler(Self, Sender: TObject; Form: TCustomForm); begin if (Form is TAloneForm) or (FMain = Form) then begin if FCurrent <> Form then begin FBefore:= FCurrent; FCurrent:= Form; end; end; end; {$ENDIF} constructor TAloneForm.CreateNew(AOwner: TComponent; Num: Integer); begin inherited CreateNew(AOwner, Num); // https://github.com/doublecmd/doublecmd/issues/769 // https://github.com/doublecmd/doublecmd/issues/1358 Constraints.MaxWidth:= High(Int16); Constraints.MaxHeight:= High(Int16); end; { TModalDialog } procedure TModalDialog.CloseModal; var CloseAction: TCloseAction; begin try CloseAction := caNone; if CloseQuery then begin CloseAction := caHide; DoClose(CloseAction); end; case CloseAction of caNone: ModalResult := 0; caFree: Release; end; { do not call widgetset CloseModal here, but in ShowModal to guarantee execution of it } except ModalResult := 0; Application.HandleException(Self); end; end; procedure TModalDialog.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if FParentWindow <> 0 then begin // It doesn't affect anything under GTK2 and raise // a range check error (LCLGTK2 bug in the function CreateWidgetInfo) {$IFNDEF LCLGTK2} Params.Style := Params.Style or WS_POPUP; {$ENDIF} Params.WndParent := FParentWindow; end; end; procedure TModalDialog.ExecuteModal; begin repeat { Delphi calls Application.HandleMessage But HandleMessage processes all pending events and then calls idle, which will wait for new messages. Under Win32 there is always a next message, so it works there. The LCL is OS independent, and so it uses a better way: } try WidgetSet.AppProcessMessages; // process all events except if Application.CaptureExceptions then Application.HandleException(Self) else raise; end; if Application.Terminated then ModalResult := mrCancel; if ModalResult <> 0 then begin CloseModal; if ModalResult <> 0 then Break; end; Application.Idle(true); until False; end; function TModalDialog.ShowModal: Integer; procedure RaiseShowModalImpossible; var s: String; begin DebugLn('TModalForm.ShowModal Visible=',dbgs(Visible),' Enabled=',dbgs(Enabled), ' fsModal=',dbgs(fsModal in FFormState),' MDIChild=',dbgs(FormStyle = fsMDIChild)); s:='TCustomForm.ShowModal for '+DbgSName(Self)+' impossible, because'; if Visible then s:=s+' already visible (hint for designer forms: set Visible property to false)'; if not Enabled then s:=s+' not enabled'; if fsModal in FFormState then s:=s+' already modal'; if FormStyle = fsMDIChild then s:=s+' FormStyle=fsMDIChild'; raise EInvalidOperation.Create(s); end; var {$IF DEFINED(LCLCOCOA)} DisabledList: TList; {$ENDIF} SavedFocusState: TFocusState; ActiveWindow: HWnd; begin if Self = nil then raise EInvalidOperation.Create('TModalForm.ShowModal Self = nil'); if Application.Terminated then ModalResult := 0; // Cancel drags DragManager.DragStop(false); // Close popupmenus if ActivePopupMenu <> nil then ActivePopupMenu.Close; if Visible or (not Enabled) or (FormStyle = fsMDIChild) then RaiseShowModalImpossible; // Kill capture when opening another dialog if GetCapture <> 0 then SendMessage(GetCapture, LM_CANCELMODE, 0, 0); ReleaseCapture; if Owner is TCustomForm then ActiveWindow := TCustomForm(Owner).Handle else begin ActiveWindow := GetActiveWindow; end; // If parent window is normal window then call inherited method // if GetWindowLong(ActiveWindow, GWL_HWNDPARENT) <> 0 then // Result:= inherited ShowModal // else begin Include(FFormState, fsModal); FParentWindow := ActiveWindow; SavedFocusState := SaveFocusState; Screen.MoveFormToFocusFront(Self); ModalResult := 0; try {$IF NOT DEFINED(LCLCOCOA)} EnableWindow(FParentWindow, False); {$ENDIF} // If window already created then recreate it to force // call CreateParams with appropriate parent window if HandleAllocated then begin {$IF NOT DEFINED(LCLWIN32)} RecreateWnd(Self); {$ELSE} SetWindowLongPtr(Handle, GWL_STYLE, GetWindowLongPtr(Handle, GWL_STYLE) or LONG_PTR(WS_POPUP)); SetWindowLongPtr(Handle, GWL_HWNDPARENT, FParentWindow); {$ENDIF} end; {$IF DEFINED(LCLCOCOA)} if WidgetSet.GetLCLCapability(lcModalWindow) = LCL_CAPABILITY_NO then DisabledList := Screen.DisableForms(Self) else DisabledList := nil; {$ENDIF} Show; try EnableWindow(Handle, True); // Activate must happen after show Perform(CM_ACTIVATE, 0, 0); TWSCustomFormClass(WidgetSetClass).ShowModal(Self); ExecuteModal; Result := ModalResult; if HandleAllocated and (GetActiveWindow <> Handle) then ActiveWindow := 0; finally { Guarantee execution of widgetset CloseModal } TWSCustomFormClass(WidgetSetClass).CloseModal(Self); // Set our modalresult to mrCancel before hiding. if ModalResult = 0 then ModalResult := mrCancel; {$IF DEFINED(LCLCOCOA)} Screen.EnableForms(DisabledList); {$ELSE} EnableWindow(FParentWindow, True); {$ENDIF} // Needs to be called only in ShowModal Perform(CM_DEACTIVATE, 0, 0); Exclude(FFormState, fsModal); end; finally RestoreFocusState(SavedFocusState); if LCLIntf.IsWindow(ActiveWindow) then SetActiveWindow(ActiveWindow); // Hide window when focus already changed back // to parent window to avoid blinking LCLIntf.ShowWindow(Handle, SW_HIDE); Visible := False; end; end; end; var ShellContextMenu : TShellContextMenu = nil; {$IFDEF MSWINDOWS} const WM_USER_ASSOCCHANGED = WM_USER + 201; var OldWProc: WNDPROC; function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin if (uiMsg = WM_SETTINGCHANGE) and (lParam <> 0) and (StrComp('Environment', {%H-}PAnsiChar(lParam)) = 0) then begin UpdateEnvironment; DCDebug('WM_SETTINGCHANGE:Environment'); end; if (uiMsg = WM_DEVICECHANGE) and (wParam = DBT_DEVNODES_CHANGED) and (lParam = 0) then begin Screen.UpdateMonitors; // Refresh monitor list DCDebug('WM_DEVICECHANGE:DBT_DEVNODES_CHANGED'); end; if (uiMsg = WM_USER_ASSOCCHANGED) then begin PixMapManager.ClearSystemCache; DCDebug('WM_USER_ASSOCCHANGED'); end; Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; {$IF DEFINED(LCLWIN32)} procedure ActivateHandler(Self, Sender: TObject); var I: Integer = 0; begin with Screen do begin while (I < CustomFormCount) and (((CustomFormsZOrdered[I] is TModalForm) and ((CustomFormsZOrdered[I] as TModalForm).FParentWindow <> 0)) or not (fsModal in CustomFormsZOrdered[I].FormState)) do Inc(I); // If modal form exists then activate it if (I >= 0) and (I < CustomFormCount) then CustomFormsZOrdered[I].BringToFront; end; end; {$ELSEIF DEFINED(LCLQT5)} procedure ScreenFormEvent(Self, Sender: TObject; Form: TCustomForm); var Handle: HWND; AWindow: QWidgetH; begin if g_darkModeSupported then begin Handle:= GetWindowHandle(Form); AllowDarkModeForWindow(Handle, True); RefreshTitleBarThemeColor(Handle); end; if (Form is THintWindow) then begin AWindow:= QWidget_window(TQtWidget(Form.Handle).GetContainerWidget); QWidget_setWindowFlags(AWindow, QtTool or QtFramelessWindowHint); QWidget_setAttribute(AWindow, QtWA_ShowWithoutActivating); end; end; {$ENDIF} procedure MenuHandler(Self, Sender: TObject); var Ret: DWORD; Res: TNetResourceA; CDS: TConnectDlgStruct; begin if (Sender as TMenuItem).Tag = 0 then begin ZeroMemory(@Res, SizeOf(TNetResourceA)); Res.dwType := RESOURCETYPE_DISK; CDS.cbStructure := SizeOf(TConnectDlgStruct); CDS.hwndOwner := frmMain.Handle; CDS.lpConnRes := @Res; CDS.dwFlags := 0; Ret:= WNetConnectionDialog1(CDS); if Ret = NO_ERROR then begin SetFileSystemPath(frmMain.ActiveFrame, AnsiChar(Int64(CDS.dwDevNum) + Ord('a') - 1) + ':\'); end else if Ret <> DWORD(-1) then begin MessageDlg(mbSysErrorMessage(Ret), mtError, [mbOK], 0); end; end else begin Ret:= WNetDisconnectDialog(fmain.frmMain.Handle, RESOURCETYPE_DISK); case Ret of NO_ERROR, DWORD(-1): ; else MessageDlg(mbSysErrorMessage(Ret), mtError, [mbOK], 0); end; end; end; procedure CreateShortcut(Self, Sender: TObject); var ShortcutName: String; SelectedFiles: TFiles; begin if (not frmMain.ActiveFrame.FileSource.IsClass(TFileSystemFileSource)) or (not frmMain.NotActiveFrame.FileSource.IsClass(TFileSystemFileSource))then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := frmMain.ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 0 then begin ShortcutName:= frmMain.NotActiveFrame.CurrentPath + SelectedFiles[0].NameNoExt + '.lnk'; if ShowInputQuery(rsMnuCreateShortcut, EmptyStr, ShortcutName) then begin if mbFileExists(ShortcutName) then begin if not msgYesNo(Format(rsMsgFileExistsRwrt, [WrapTextSimple(ShortcutName, 100)])) then Exit; end; try uMyWindows.CreateShortcut(SelectedFiles[0].FullPath, ShortcutName); except on E: Exception do msgError(E.Message); end; end; end; finally FreeAndNil(SelectedFiles); end; end; {$ENDIF} {$IF DEFINED(LCLGTK2) or ((DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not (DEFINED(DARWIN) or DEFINED(MSWINDOWS)))} procedure ScreenFormEvent(Self, Sender: TObject; Form: TCustomForm); {$IF DEFINED(LCLGTK2)} var ClassName: String; begin ClassName:= Form.ClassName; gtk_window_set_role(PGtkWindow(Form.Handle), PAnsiChar(ClassName)); end; {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} var ClassName: WideString; begin if not (Form is THintWindow) then begin ClassName:= Form.ClassName; QWidget_setWindowRole(QWidget_window(TQtWidget(Form.Handle).GetContainerWidget), @ClassName); end; end; {$ENDIF} {$ENDIF} {$IF DEFINED(DARWIN)} procedure MenuHandler(Self, Sender: TObject); var Address: String = ''; begin if ShowInputQuery(Application.Title, rsMsgURL, False, Address) then MountNetworkDrive(Address); end; {$ELSEIF DEFINED(LCLGTK2)} procedure OnThemeChange; cdecl; begin ThemeServices.IntfDoOnThemeChange; end; {$ENDIF} procedure MainFormCreate(MainForm : TCustomForm); {$IFDEF MSWINDOWS} const SHCNRF_ShellLevel = $0002; var Handle: HWND; Handler: TMethod; MenuItem: TMenuItem; AEntries: TSHChangeNotifyEntry; begin {$IF DEFINED(LCLWIN32)} Handler.Code:= @ActivateHandler; Handler.Data:= MainForm; // Setup application OnActivate handler Application.AddOnActivateHandler(TNotifyEvent(Handler), True); // Disable application button on taskbar with Widgetset do SetWindowLong(AppHandle, GWL_EXSTYLE, GetWindowLong(AppHandle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); {$ELSEIF DEFINED(LCLQT5)} if g_darkModeEnabled then begin Handler.Data:= MainForm; Handler.Code:= @ScreenFormEvent; Screen.AddHandlerFormVisibleChanged(TScreenFormEvent(Handler), True); end; {$ENDIF} // Register shell folder file source if (Win32MajorVersion > 5) then begin RegisterVirtualFileSource(TShellFileSource.RootName, TShellFileSource); end; // Register recycle bin file source if CheckWin32Version(5, 1) then begin RegisterVirtualFileSource(rsVfsRecycleBin, TRecycleBinFileSource); end; // Register Windows Subsystem for Linux (WSL) file source if CheckWin32Version(10) then begin RegisterVirtualFileSource('Linux', TWslFileSource, TWslFileSource.Available); end; // Register network file source RegisterVirtualFileSource(rsVfsNetwork, TWinNetFileSource); // If run under administrator if (IsUserAdmin = dupAccept) then begin with TfrmMain(MainForm) do StaticTitle:= StaticTitle + ' - Administrator'; end; Handle:= GetWindowHandle(Application.MainForm); // Add main window message handler {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtr(Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} if Succeeded(SHGetFolderLocation(Handle, CSIDL_DRIVES, 0, 0, AEntries.pidl)) then begin AEntries.fRecursive:= False; SHChangeNotifyRegister(Handle, SHCNRF_ShellLevel, SHCNE_ASSOCCHANGED, WM_USER_ASSOCCHANGED, 1, @AEntries); end; with frmMain do begin Handler.Code:= @MenuHandler; Handler.Data:= MainForm; MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= '-'; mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuMapNetworkDrive; MenuItem.Tag:= 0; MenuItem.OnClick:= TNotifyEvent(Handler); mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuDisconnectNetworkDrive; MenuItem.Tag:= 1; MenuItem.OnClick:= TNotifyEvent(Handler); mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= '-'; mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Action:= frmMain.actCopyNetNamesToClip; mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuCreateShortcut; Handler.Code:= @CreateShortcut; MenuItem.OnClick:= TNotifyEvent(Handler); mnuFiles.Insert(mnuFiles.IndexOf(miMakeDir) + 1, MenuItem); end; end; {$ELSE} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6) or DEFINED(LCLGTK2) or DEFINED(DARWIN)} var Handler: TMethod; {$ENDIF} {$IF DEFINED(DARWIN)} MenuItem: TMenuItem; {$ENDIF} begin if fpGetUID = 0 then // if run under root begin with TfrmMain(MainForm) do StaticTitle:= StaticTitle + ' - ROOT PRIVILEGES'; end; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if HasGio then begin if TGioFileSource.IsSupportedPath('trash://') then RegisterVirtualFileSource(rsVfsRecycleBin, TTrashFileSource, True); if TGioFileSource.IsSupportedPath('network://') then RegisterVirtualFileSource(rsVfsNetwork, TNetworkFileSource, True); RegisterVirtualFileSource('GVfs', TGioFileSource, False); end; {$ENDIF} {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} FMain:= MainForm; Handler.Data:= MainForm; Handler.Code:= @ActiveFormChangedHandler; Screen.AddHandlerActiveFormChanged(TScreenFormEvent(Handler), True); {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} Handler.Data:= MainForm; Handler.Code:= @ScreenFormEvent; ScreenFormEvent(MainForm, MainForm, MainForm); Screen.AddHandlerFormAdded(TScreenFormEvent(Handler), True); {$ENDIF} {$IF DEFINED(LCLGTK2)} Handler.Data:= gtk_settings_get_default(); if Assigned(Handler.Data) then begin g_signal_connect_data(Handler.Data, 'notify::gtk-theme-name', @OnThemeChange, nil, nil, 0); end; {$ENDIF} {$IF DEFINED(DARWIN)} if HasMountURL then begin with frmMain do begin Handler.Code:= @MenuHandler; Handler.Data:= MainForm; MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= '-'; mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuMapNetworkDrive; MenuItem.OnClick:= TNotifyEvent(Handler); mnuNetwork.Add(MenuItem); end; end; {$ENDIF} end; {$ENDIF} procedure ShowContextMenu(Parent: TWinControl; var Files : TFiles; X, Y : Integer; Background: Boolean; CloseEvent: TNotifyEvent; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); {$IFDEF MSWINDOWS} begin if Assigned(Files) and (Files.Count = 0) then begin FreeAndNil(Files); Exit; end; try // Create new context menu ShellContextMenu:= TShellContextMenu.Create(Parent, Files, Background, UserWishForContextMenu); ShellContextMenu.OnClose := CloseEvent; // Show context menu ShellContextMenu.PopUp(X, Y); finally // Free created menu FreeAndNil(ShellContextMenu); end; end; {$ELSE} begin if Files.Count = 0 then begin FreeAndNil(Files); Exit; end; // Free previous created menu FreeAndNil(ShellContextMenu); // Create new context menu ShellContextMenu:= TShellContextMenu.Create(nil, Files, Background, UserWishForContextMenu); ShellContextMenu.OnClose := CloseEvent; // Show context menu {$IF DEFINED(DARWIN)} MacosServiceMenuHelper.PopUp( ShellContextMenu, uLng.rsMenuMacOsServices ); {$ELSE} ShellContextMenu.PopUp(X, Y); {$ENDIF} end; {$ENDIF} procedure ShowDriveContextMenu(Parent: TWinControl; ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); {$IFDEF MSWINDOWS} var aFile: TFile; Files: TFiles; begin if ADrive.DriveType = dtVirtual then ShowVirtualDriveMenu(ADrive, X, Y, CloseEvent) else begin aFile := TFileSystemFileSource.CreateFile(EmptyStr); if ADrive^.DriveType = dtSpecial then begin aFile.LinkProperty.LinkTo := ADrive^.DeviceId; aFile.Attributes := FILE_ATTRIBUTE_DEVICE; end else begin aFile.FullPath := ADrive^.Path; aFile.Attributes := faFolder or FILE_ATTRIBUTE_DEVICE; end; Files:= TFiles.Create(EmptyStr); // free in ShowContextMenu Files.Add(aFile); ShowContextMenu(Parent, Files, X, Y, False, CloseEvent); end; end; {$ELSE} begin if ADrive.DriveType = dtVirtual then ShowVirtualDriveMenu(ADrive, X, Y, CloseEvent) else begin // Free previous created menu FreeAndNil(ShellContextMenu); // Create new context menu ShellContextMenu:= TShellContextMenu.Create(nil, ADrive); ShellContextMenu.OnClose := CloseEvent; // show context menu ShellContextMenu.PopUp(X, Y); end; end; {$ENDIF} procedure ShowTrashContextMenu(Parent: TWinControl; X, Y: Integer; CloseEvent: TNotifyEvent); {$IFDEF MSWINDOWS} var Files: TFiles = nil; begin ShowContextMenu(Parent, Files, X, Y, False, CloseEvent); end; {$ELSE} begin end; {$ENDIF} (* Show file properties dialog *) procedure ShowFilePropertiesDialog(aFileSource: IFileSource; const Files: TFiles); {$IFDEF UNIX} begin {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if gSystemItemProperties and aFileSource.IsClass(TFileSystemFileSource) then begin if ShowItemProperties(Files) then Exit; end; {$ENDIF} ShowFileProperties(aFileSource, Files); end; {$ELSE} var Index: Integer; contMenu: IContextMenu; cmici: TCMInvokeCommandInfo; DataObject: THDropDataObject; begin if Files.Count = 0 then Exit; try if CheckWin32Version(5, 1) then begin DataObject:= THDropDataObject.Create(DROPEFFECT_NONE); for Index:= 0 to Files.Count - 1 do begin DataObject.Add(Files[Index].FullPath); end; OleCheckUTF8(MultiFileProperties(DataObject, 0)); end else begin contMenu := GetShellContextMenu(frmMain.Handle, Files, False); if Assigned(contMenu) then begin cmici:= Default(TCMInvokeCommandInfo); with cmici do begin cbSize := SizeOf(TCMInvokeCommandInfo); hwnd := frmMain.Handle; lpVerb := sCmdVerbProperties; nShow := SW_SHOWNORMAL; end; OleCheckUTF8(contMenu.InvokeCommand(cmici)); end; end; except on E: EOleError do raise EContextMenuException.Create(E.Message); end; end; {$ENDIF} function ShowOpenIconDialog(Owner: TCustomControl; var sFileName : String) : Boolean; var opdDialog : TOpenPictureDialog; {$IFDEF MSWINDOWS} sFilter : String; iPos, iIconIndex: Integer; bAlreadyOpen : Boolean; bFlagKeepGoing : Boolean = True; {$ENDIF} begin opdDialog := nil; {$IFDEF MSWINDOWS} sFilter := GraphicFilter(TGraphic) + '|' + rsFilterProgramsLibraries + ' (*.exe;*.dll)|*.exe;*.dll' + '|' + Format(rsAllFiles, [GetAllFilesMask, GetAllFilesMask, '']); bAlreadyOpen := False; iPos :=Pos(',', sFileName); if iPos <> 0 then begin iIconIndex := StrToIntDef(Copy(sFileName, iPos + 1, Length(sFileName) - iPos), 0); sFileName := Copy(sFileName, 1, iPos - 1); end else begin opdDialog := TOpenPictureDialog.Create(Owner); opdDialog.Filter := sFilter; opdDialog.InitialDir := ExtractFileDir(sFileName); opdDialog.FileName := sFileName; Result := opdDialog.Execute; if Result then sFileName := opdDialog.FileName else bFlagKeepGoing := False; bAlreadyOpen := True; end; if FileIsExeLib(sFileName) then begin if bFlagKeepGoing then begin Result := SHChangeIconDialog(GetWindowHandle(Owner), sFileName, iIconIndex); if Result then sFileName := sFileName + ',' + IntToStr(iIconIndex); end; end else if not bAlreadyOpen then {$ENDIF} begin opdDialog := TOpenPictureDialog.Create(Owner); opdDialog.InitialDir:=ExtractFileDir(sFileName); {$IFDEF MSWINDOWS} opdDialog.Filter:= sFilter; {$ENDIF} opdDialog.FileName := sFileName; Result:= opdDialog.Execute; sFileName := opdDialog.FileName; end; if Assigned(opdDialog) then FreeAndNil(opdDialog); end; function GetControlHandle(AWindow: TWinControl): HWND; {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} begin Result:= HWND(QWidget_winId(TQtWidget(AWindow.Handle).GetContainerWidget)); end; {$ELSE} begin Result:= AWindow.Handle; end; {$ENDIF} function GetWindowHandle(AWindow: TWinControl): HWND; {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} begin Result:= Windows.GetAncestor(HWND(QWidget_winId(TQtWidget(AWindow.Handle).GetContainerWidget)), GA_ROOT); end; {$ELSE} begin Result:= AWindow.Handle; end; {$ENDIF} function GetWindowHandle(AHandle: HWND): HWND; {$IF DEFINED(MSWINDOWS) and DEFINED(LCLQT5)} begin Result:= Windows.GetAncestor(HWND(QWidget_winId(TQtWidget(AHandle).GetContainerWidget)), GA_ROOT); end; {$ELSE} begin Result:= AHandle; end; {$ENDIF} procedure CopyNetNamesToClip; {$IF DEFINED(MSWINDOWS)} var I: Integer; sl: TStringList = nil; SelectedFiles: TFiles = nil; begin SelectedFiles := frmMain.ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 0 then begin sl := TStringList.Create; for I := 0 to SelectedFiles.Count - 1 do begin sl.Add(mbGetRemoteFileName(SelectedFiles[I].FullPath)); end; Clipboard.Clear; // Prevent multiple formats in Clipboard (specially synedit) Clipboard.AsText := TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle); end; finally FreeAndNil(sl); FreeAndNil(SelectedFiles); end; end; {$ELSE} begin msgWarning(rsMsgErrNotSupported); end; {$ENDIF} function DarkStyle: Boolean; {$IF DEFINED(DARKWIN)} begin Result:= g_darkModeEnabled; end; {$ELSE} begin Result:= not ColorIsLight(ColorToRGB(clWindow)); end; {$ENDIF} {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} procedure ShowOpenWithDialog(TheOwner: TComponent; const FileList: TStringList); begin fOpenWith.ShowOpenWithDlg(TheOwner, FileList); end; {$ENDIF} {$IF DEFINED(UNIX)} procedure handle_sigterm(signal: longint); cdecl; begin DCDebug('SIGTERM'); frmMain.Close; end; procedure RegisterHandler; var sa: sigactionrec; begin FillChar(sa, SizeOf(sa), #0); sa.sa_handler := @handle_sigterm; if (fpSigAction(SIGTERM, @sa, nil) = -1) then begin Errors.PError('fpSigAction', GetLastOSError); end; end; initialization RegisterHandler; {$ENDIF} finalization FreeAndNil(ShellContextMenu); end. doublecmd-1.1.30/src/platform/unix/0000755000175000001440000000000015104114162016163 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/uxdg.pas0000644000175000001440000001214115104114162017636 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Miscellaneous freedesktop.org compatible utility functions Copyright (C) 2014-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uXdg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; {en Returns a base directory in which to store non-essential, cached data specific to particular user. } function GetUserCacheDir: String; {en Returns a base directory relative to which user-specific data files should be written. } function GetUserDataDir: String; {en Returns an ordered list of base directories in which to access system-wide application data. } function GetSystemDataDirs: TDynamicStringArray; {en Returns a base directory in which to store user-specific application configuration information such as user preferences and settings. } function GetUserConfigDir: String; {en Returns a directory that is unique to the current user on the local system. } function GetUserRuntimeDir: String; {en Returns an ordered list of base directories in which to access system-wide configuration information. } function GetSystemConfigDirs: TDynamicStringArray; {en Get current desktop names } function GetCurrentDesktop: TDynamicStringArray; {en Get desktop file path by desktop base file name. } function GetDesktopPath(const DesktopName: String): String; implementation uses BaseUnix, LazLogger, DCStrUtils, DCOSUtils, uSysFolders; function GetUserCacheDir: String; begin Result:= mbGetEnvironmentVariable('XDG_CACHE_HOME'); if Length(Result) = 0 then begin Result:= GetHomeDir + '/.cache'; end; end; function GetUserDataDir: String; begin Result:= mbGetEnvironmentVariable('XDG_DATA_HOME'); if Length(Result) = 0 then begin Result:= GetHomeDir + '/.local/share'; end; end; function GetSystemDataDirs: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_DATA_DIRS'); if Length(Value) = 0 then begin Value:= '/usr/local/share/:/usr/share/'; end; Result:= SplitString(Value, PathSeparator); end; function GetUserConfigDir: String; begin Result:= mbGetEnvironmentVariable('XDG_CONFIG_HOME'); if Length(Result) = 0 then begin Result:= GetHomeDir + '/.config'; end; end; function GetUserRuntimeDir: String; begin Result:= mbGetEnvironmentVariable('XDG_RUNTIME_DIR'); if Length(Result) = 0 then begin if fpGetUID = 0 then Result:= '/run' else begin Result:= '/run/user/' + IntToStr(fpGetUID); if not mbDirectoryExists(Result) then begin Result:= '/var' + Result; if not mbDirectoryExists(Result) then begin Result:= GetUserCacheDir; DebugLn('WARNING: XDG_RUNTIME_DIR not set, defaulting to ', Result); end; end; end; end; end; function GetSystemConfigDirs: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_CONFIG_DIRS'); if Length(Value) = 0 then begin Value:= '/etc/xdg'; end; Result:= SplitString(Value, PathSeparator); end; function GetCurrentDesktop: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_CURRENT_DESKTOP'); if Length(Value) > 0 then begin Result:= SplitString(Value, PathSeparator); end; end; function GetDesktopPath(const DesktopName: String): String; const PrefixDelim = '-'; var Index: Integer; HasPrefix: Boolean; FileName: String; Path: TDynamicStringArray; function DesktopExists(var DesktopPath: String): Boolean; var Prefix: PAnsiChar; begin if mbFileExists(DesktopPath) then Exit(True); if HasPrefix then begin Prefix := PAnsiChar(DesktopPath); Prefix := strrscan(Prefix, PathDelim); Prefix := strscan(Prefix, PrefixDelim); while (Prefix <> nil) do begin Prefix^:= PathDelim; if mbFileExists(DesktopPath) then Exit(True); Prefix := strscan(Prefix, PrefixDelim); end; end; Result:= False; end; begin HasPrefix:= (Pos(PrefixDelim, DesktopName) > 0); FileName:= 'applications' + PathDelim + DesktopName; // Find in user data directory Result:= IncludeTrailingBackslash(GetUserDataDir) + FileName; if DesktopExists(Result) then Exit; // Find in system data directories Path:= GetSystemDataDirs; for Index:= Low(Path) to High(Path) do begin Result:= IncludeTrailingBackslash(Path[Index]) + FileName; if DesktopExists(Result) then Exit; end; Result:= EmptyStr; end; end. doublecmd-1.1.30/src/platform/unix/uvideothumb.pas0000644000175000001440000001305215104114162021224 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- FFmpeg thumbnail provider Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) FFmpegthumbnailer - lightweight video thumbnailer Copyright (C) 2010 Dirk Vanden Boer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uVideoThumb; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils; implementation uses CTypes, DynLibs, Graphics, Types, LazUTF8, DCOSUtils, DCConvertEncoding, uThumbnails, uClassesEx, uMasks, uGraphics; type ThumbnailerImageType = ( Png, Jpeg, Unknown ); Pvideo_thumbnailer = ^Tvideo_thumbnailer; Tvideo_thumbnailer = record thumbnail_size: cint; //* default = 128 */ seek_percentage: cint; //* default = 10 */ seek_time: pchar; //* default = NULL (format hh:mm:ss, overrides seek_percentage if set) */ overlay_film_strip: cint; //* default = 0 */ workaround_bugs: cint; //* default = 0 */ thumbnail_image_quality: cint; //* default = 8 (0 is bad, 10 is best)*/ thumbnail_image_type: ThumbnailerImageType; //* default = Png */ av_format_context: pointer; //* default = NULL */ maintain_aspect_ratio: cint; //* default = 1 */ thumbnailer: pointer; //* for internal use only */ filter: pointer; //* for internal use only */ end; Pimage_data = ^Timage_data; Timage_data = record image_data_ptr: pcuint8; //* points to the image data after call to generate_thumbnail_to_buffer */ image_data_size: cint; //* contains the size of the image data after call to generate_thumbnail_to_buffer */ internal_data: pointer; //* for internal use only */ end; var { create video_thumbnailer structure } video_thumbnailer_create: function(): Pvideo_thumbnailer; cdecl; { destroy video_thumbnailer structure } video_thumbnailer_destroy: procedure(thumbnailer: Pvideo_thumbnailer); cdecl; { create image_data structure } video_thumbnailer_create_image_data: function(): Pimage_data; cdecl; { destroy image_data structure } video_thumbnailer_destroy_image_data: procedure(data: Pimage_data); cdecl; { generate thumbnail from video file (movie_filename), image data is stored in generated_image_data struct } video_thumbnailer_generate_thumbnail_to_buffer: function(thumbnailer: Pvideo_thumbnailer; movie_filename: Pchar; generated_image_data: Pimage_data): cint; cdecl; var MaskList: TMaskList = nil; libffmpeg: TLibHandle = NilHandle; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Data: Pimage_data; BlobStream: TBlobStream; Thumb: Pvideo_thumbnailer; Bitmap: TPortableNetworkGraphic; begin Result:= nil; if MaskList.Matches(aFileName) then begin Thumb:= video_thumbnailer_create(); if Assigned(Thumb) then try Thumb.thumbnail_size:= aSize.cx; Data:= video_thumbnailer_create_image_data(); if Assigned(Data) then try if video_thumbnailer_generate_thumbnail_to_buffer(Thumb, PAnsiChar(CeUtf8ToSys(aFileName)), Data) = 0 then begin Bitmap:= TPortableNetworkGraphic.Create; BlobStream:= TBlobStream.Create(Data^.image_data_ptr, Data^.image_data_size); try Bitmap.LoadFromStream(BlobStream); Result:= Graphics.TBitmap.Create; BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; Bitmap.Free; BlobStream.Free; end; finally video_thumbnailer_destroy_image_data(Data); end; finally video_thumbnailer_destroy(Thumb); end; end; end; procedure Initialize; begin libffmpeg:= LoadLibrary('libffmpegthumbnailer.so.4'); if (libffmpeg <> NilHandle) then try @video_thumbnailer_create:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_create'); @video_thumbnailer_destroy:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_destroy'); @video_thumbnailer_create_image_data:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_create_image_data'); @video_thumbnailer_destroy_image_data:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_destroy_image_data'); @video_thumbnailer_generate_thumbnail_to_buffer:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_generate_thumbnail_to_buffer'); // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); MaskList:= TMaskList.Create('*.avi;*.flv;*.mkv;*.mp4;*.mpg;*.mov;*.wmv;*.vob;*.mpeg;*.webm'); except // Skip end; end; procedure Finalize; begin MaskList.Free; if (libffmpeg <> NilHandle) then FreeLibrary(libffmpeg); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/uusersgroups.pas0000644000175000001440000000654515104114162021470 0ustar alexxusers{ File name: uUsersGroups.pas Date: 2003/07/03 Author: Martin Matusu Copyright (C) 2003 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } {mate} unit uUsersGroups; {$mode objfpc}{$H+} interface uses Classes; const groupInfo = '/etc/group'; userInfo = '/etc/passwd'; function uidToStr(uid: Cardinal): String; function gidToStr(gid: Cardinal): String; function strToUID(uname: AnsiString): Cardinal; function strToGID(gname: AnsiString): Cardinal; procedure getUsrGroups(uid: Cardinal; List: TStrings); procedure getUsers(List: TStrings); procedure getGroups(List: TStrings); implementation uses SysUtils, DCUnix; function uidToStr(uid: Cardinal): String; var uinfo: PPasswordRecord; begin uinfo:= getpwuid(uid); if (uinfo = nil) then Result:= UIntToStr(uid) else Result:= String(uinfo^.pw_name); end; function gidToStr(gid: Cardinal): String; var ginfo: PGroupRecord; begin ginfo:= getgrgid(gid); if (ginfo = nil) then Result:= UIntToStr(gid) else Result:= String(ginfo^.gr_name); end; procedure getUsrGroups(uid: Cardinal; List: TStrings); var groups: TStrings; iC,iD: integer; sT: string; begin // parse groups records groups:= TStringlist.Create; try List.Clear; groups.LoadFromFile(groupInfo); for ic:= 0 to (groups.Count - 1) do begin st:= groups.Strings[ic]; //get one record to parse id:= Pos(UIDtoStr(uid), st); //get position of uname if ((id<>0) or (uid=0)) then begin st:= Copy(st, 1, Pos(':',st) - 1); List.Append(st); end; // if end; // for finally FreeAndNil(groups); end; end; procedure getGroups(List: TStrings); begin getUsrGroups(0, List); end; procedure GetUsers(List: TStrings); var Users: TStrings; iC: integer; sT: string; begin users:= TStringList.Create; try users.LoadFromFile(userInfo); List.Clear; for ic:= 0 to (users.Count - 1) do begin st:= users.Strings[ic]; //get one record (line) st:= copy(st, 1, Pos(':',st) - 1); //extract username List.Append(st); //append to the list end; finally FreeAndNil(users); end; end; function strToUID(uname: AnsiString): Cardinal; //Converts username to UID ('root' results to 0) var uinfo: PPasswordRecord; begin uinfo:= getpwnam(PChar(uname)); if (uinfo = nil) then Result:= StrToUIntDef(uname, High(Cardinal)) else Result:= uinfo^.pw_uid; end; function strToGID(gname: AnsiString): Cardinal; var ginfo: PGroupRecord; begin ginfo:= getgrnam(PChar(gname)); if (ginfo = nil) then Result:= StrToUIntDef(gname, High(Cardinal)) else Result:= ginfo^.gr_gid; end; {/mate} end. doublecmd-1.1.30/src/platform/unix/uunixicontheme.pas0000644000175000001440000001552315104114162021742 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some useful functions for Unix icon theme implementation Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uUnixIconTheme; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uIconTheme; const DEFAULT_THEME_NAME = 'hicolor'; function GetCurrentIconTheme: String; function GetUnixDefaultTheme: String; function GetUnixIconThemeBaseDirList: TDynamicStringArray; implementation uses Laz2_DOM, Laz2_XMLRead, DCClassesUtf8, uMyUnix, DCOSUtils, uOSUtils, uGio, uSysFolders, uXdg {$IF DEFINED(LCLQT5)} , Qt5 {$ELSEIF DEFINED(LCLQT6)} , Qt6 {$ENDIF} ; {$IF DEFINED(LCLQT5) OR DEFINED(LCLQT6)} function GetQtIconTheme: String; var AValue: WideString; begin QIcon_themeName(@AValue); Result:= UTF8Encode(AValue); end; {$ENDIF} function GetKdeIconTheme: String; var I: Integer; FileName: String; iniCfg: TIniFileEx; kdeConfig: array[1..3] of String = ( 'kdeglobals', '/.kde/share/config/kdeglobals', '/.kde4/share/config/kdeglobals' ); begin Result:= EmptyStr; for I:= Low(kdeConfig) to High(kdeConfig) do begin if (I > 1) then FileName:= GetHomeDir + kdeConfig[I] else begin FileName:= IncludeTrailingBackslash(GetUserConfigDir) + kdeConfig[I]; end; if mbFileExists(FileName) then try iniCfg:= TIniFileEx.Create(FileName, fmOpenRead); try Result:= iniCfg.ReadString('Icons', 'Theme', EmptyStr); if (Length(Result) > 0) then Break; finally iniCfg.Free; end; except // Skip end; end; if Length(Result) = 0 then Result:= 'breeze'; end; function GetGnomeIconTheme: String; begin Result:= GioGetIconTheme('org.gnome.desktop.interface'); if Length(Result) = 0 then Result:= 'Adwaita'; end; function GetXfceIconTheme: String; const xfceConfig = '/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml'; var J, I: Integer; ChildNode1, ChildNode2: TDOMNode; xmlCfg: TXMLDocument = nil; begin Result:= EmptyStr; if mbFileExists(GetHomeDir + xfceConfig) then try ReadXMLFile(xmlCfg, GetHomeDir + xfceConfig); try for J := 0 to xmlCfg.DocumentElement.ChildNodes.Count -1 do begin ChildNode1:= xmlCfg.DocumentElement.ChildNodes.Item[J]; if (ChildNode1.NodeName = 'property') then if (ChildNode1.Attributes.Length > 0) and (ChildNode1.Attributes[0].NodeValue = 'Net') then for I:= 0 to ChildNode1.ChildNodes.Count - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if (ChildNode2.NodeName = 'property') then if (ChildNode2.Attributes.Length > 2) and (ChildNode2.Attributes[0].NodeValue = 'IconThemeName') then begin Result:= ChildNode2.Attributes[2].NodeValue; Exit; end; end; end; finally xmlCfg.Free; end; except // Skip end; end; function GetLxdeIconTheme: String; const lxdeConfig1 = '/.config/lxsession/%s/desktop.conf'; lxdeConfig2 = '/etc/xdg/lxsession/%s/desktop.conf'; var I: Integer; DesktopSession: String; iniCfg: TIniFileEx = nil; lxdeConfig: array[1..2] of String = (lxdeConfig1, lxdeConfig2); begin Result:= EmptyStr; DesktopSession:= mbGetEnvironmentVariable('DESKTOP_SESSION'); if Length(DesktopSession) <> 0 then begin lxdeConfig[1]:= GetHomeDir + Format(lxdeConfig[1], [DesktopSession]); lxdeConfig[2]:= Format(lxdeConfig[2], [DesktopSession]); for I:= Low(lxdeConfig) to High(lxdeConfig) do begin if (Length(Result) = 0) and mbFileExists(lxdeConfig[I]) then try iniCfg:= TIniFileEx.Create(lxdeConfig[I]); try Result:= iniCfg.ReadString('GTK', 'sNet/IconThemeName', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; end; end; function GetLxqtIconTheme: String; const lxqtConfig = '/.config/lxqt/lxqt.conf'; var iniCfg: TIniFileEx; begin Result:= EmptyStr; if mbFileExists(GetHomeDir + lxqtConfig) then try iniCfg:= TIniFileEx.Create(GetHomeDir + lxqtConfig); try Result:= iniCfg.ReadString('General', 'icon_theme', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; function GetMateIconTheme: String; inline; begin Result:= GioGetIconTheme('org.mate.interface'); end; function GetCinnamonIconTheme: String; inline; begin Result:= GioGetIconTheme('org.cinnamon.desktop.interface'); end; function GetCurrentIconTheme: String; begin Result:= EmptyStr; case DesktopEnv of DE_KDE: Result:= GetKdeIconTheme; DE_GNOME: Result:= GetGnomeIconTheme; DE_XFCE: Result:= GetXfceIconTheme; DE_LXDE: Result:= GetLxdeIconTheme; DE_LXQT: Result:= GetLxqtIconTheme; DE_MATE: Result:= GetMateIconTheme; DE_CINNAMON: Result:= GetCinnamonIconTheme; end; if Result = EmptyStr then begin {$IF DEFINED(LCLQT5) OR DEFINED(LCLQT6)} Result:= GetQtIconTheme; if Result = EmptyStr then {$ENDIF} Result:= DEFAULT_THEME_NAME; end; end; var UnixDefaultTheme: String = DEFAULT_THEME_NAME; UnixIconThemesBaseDirList: TDynamicStringArray; function GetUnixDefaultTheme: String; begin Result:= UnixDefaultTheme; end; function GetUnixIconThemeBaseDirList: TDynamicStringArray; begin Result:= UnixIconThemesBaseDirList; end; procedure InitIconThemesBaseDirList; var Home: String; I: Integer = 1; begin Home := GetHomeDir; SetLength(UnixIconThemesBaseDirList, 6); UnixIconThemesBaseDirList[0] := Home + '/.icons'; UnixIconThemesBaseDirList[1] := Home + '/.local/share/icons'; if DesktopEnv = DE_KDE then begin I:= 2; SetLength(UnixIconThemesBaseDirList, 7); UnixIconThemesBaseDirList[2] := Home + '/.kde/share/icons'; end; UnixIconThemesBaseDirList[I + 1] := '/usr/local/share/icons'; UnixIconThemesBaseDirList[I + 2] := '/usr/local/share/pixmaps'; UnixIconThemesBaseDirList[I + 3] := '/usr/share/icons'; UnixIconThemesBaseDirList[I + 4] := '/usr/share/pixmaps'; end; initialization InitIconThemesBaseDirList; end. doublecmd-1.1.30/src/platform/unix/ushellcontextmenu.pas0000644000175000001440000010070315104114162022457 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uShellContextMenu; {$mode delphi}{$H+} {$IF DEFINED(DARWIN)} {$modeswitch objectivec2} {$ENDIF} interface uses Classes, SysUtils, Controls, Menus, uGlobs, uFile, uDrive; type { EContextMenuException } EContextMenuException = class(Exception); { TShellContextMenu } TShellContextMenu = class(TPopupMenu) private FFiles: TFiles; FDrive: TDrive; FUserWishForContextMenu: TUserWishForContextMenu; FMenuImageList: TImageList; procedure PackHereSelect(Sender: TObject); procedure ExtractHereSelect(Sender: TObject); procedure ContextMenuSelect(Sender: TObject); procedure StandardContextMenuSelect(Sender: TObject); procedure TemplateContextMenuSelect(Sender: TObject); procedure DriveMountSelect(Sender: TObject); procedure DriveUnmountSelect(Sender: TObject); procedure DriveEjectSelect(Sender: TObject); procedure OpenWithOtherSelect(Sender: TObject); procedure OpenWithMenuItemSelect(Sender: TObject); private procedure LeaveDrive; function FillOpenWithSubMenu: Boolean; {$IF DEFINED(DARWIN)} procedure FillServicesSubMenu; procedure SharingMenuItemSelect(Sender: TObject); {$ENDIF} procedure CreateActionSubMenu(MenuWhereToAdd:TComponent; aFile:TFile; bIncludeViewEdit:boolean); public constructor Create(Owner: TWinControl; ADrive: PDrive); reintroduce; overload; constructor Create(Owner: TWinControl; var Files : TFiles; Background: Boolean; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete); reintroduce; overload; destructor Destroy; override; end; implementation uses LCLProc, Dialogs, Graphics, uFindEx, uDCUtils, uShowMsg, uFileSystemFileSource, uOSUtils, uFileProcs, uShellExecute, uLng, uPixMapManager, uMyUnix, uOSForms, fMain, fFileProperties, DCOSUtils, DCStrUtils, uExts, uArchiveFileSourceUtil, uSysFolders {$IF DEFINED(DARWIN)} , MacOSAll, CocoaAll, uMyDarwin {$ELSEIF NOT DEFINED(HAIKU)} , uKeyFile, uMimeActions {$IF DEFINED(LINUX)} , uRabbitVCS, uFlatpak {$ENDIF} {$ENDIF} ; const sCmdVerbProperties = 'properties'; var // The "ContextMenuActionList" will hold the possible actions to do from the // context menu. Each "TMenuItem" associated with these actions will have the // the "tag" set to the matching "TExtActionCommand" in this "TextActionList" // list. ContextMenuActionList: TExtActionList = nil; procedure addDelimiterMenuItem( menu:TMenuItem ); overload; var item: TMenuItem; begin item:= TMenuItem.Create( menu ); item.Caption:= '-'; menu.Add( item ); end; procedure addDelimiterMenuItem( menu:TMenu ); overload; var item: TMenuItem; begin item:= TMenuItem.Create( menu ); item.Caption:= '-'; menu.Items.Add( item ); end; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} function GetGnomeTemplateMenu(out Items: TStringList): Boolean; var searchRec: TSearchRecEx; templateDir: String; bmpBitmap: TBitmap = nil; userDirs: TStringList = nil; begin Result:= False; templateDir:= GetHomeDir + '/.config/user-dirs.dirs'; if not mbFileExists(templateDir) then Exit; try Items:= nil; userDirs:= TStringList.Create; try userDirs.LoadFromFile(templateDir); templateDir:= userDirs.Values['XDG_TEMPLATES_DIR']; except Exit; end; if Length(templateDir) = 0 then Exit; templateDir:= TrimQuotes(templateDir); // Skip misconfigured template path if (ExcludeTrailingBackslash(templateDir) = '$HOME') then Exit; templateDir:= IncludeTrailingPathDelimiter(mbExpandFileName(templateDir)); if mbDirectoryExists(templateDir) then begin if FindFirstEx(templateDir, 0, searchRec) = 0 then begin Items:= TStringList.Create; repeat // Skip directories if FPS_ISDIR(searchRec.Attr) then Continue; bmpBitmap:= PixMapManager.LoadBitmapEnhanced(templateDir + searchRec.Name, 16, True, clMenu); Items.AddObject(ExtractOnlyFileName(searchRec.Name) + '=' + templateDir + searchRec.Name, bmpBitmap); until FindNextEx(searchRec) <> 0; Result:= Items.Count > 0; end; FindCloseEx(searchRec); end; finally if Assigned(Items) and (Items.Count = 0) then FreeAndNil(Items); FreeAndNil(userDirs); end; end; function GetKdeTemplateMenu(out Items: TStringList): Boolean; var I: Integer; bmpBitmap: TBitmap = nil; desktopFile: TKeyFile = nil; templateDir: array [0..1] of String; searchRec: TSearchRecEx; templateName, templateIcon, templatePath: String; begin Result:= False; try Items:= nil; templateDir[0]:= '/usr/share/templates'; templateDir[1]:= GetHomeDir + '/.kde/share/templates'; for I:= Low(templateDir) to High(templateDir) do if mbDirectoryExists(templateDir[I]) then begin if FindFirstEx(templateDir[I] + PathDelim + '*.desktop', 0, searchRec) = 0 then begin if not Assigned(Items) then Items:= TStringList.Create; repeat // Skip directories if FPS_ISDIR(searchRec.Attr) then Continue; try desktopFile:= TKeyFile.Create(templateDir[I] + PathDelim + searchRec.Name); try templateName:= desktopFile.ReadLocaleString('Desktop Entry', 'Name', EmptyStr); templateIcon:= desktopFile.ReadString('Desktop Entry', 'Icon', EmptyStr); templatePath:= desktopFile.ReadString('Desktop Entry', 'URL', EmptyStr); templatePath:= GetAbsoluteFileName(templateDir[I] + PathDelim, templatePath); if not mbFileExists(templatePath) then Continue; // Skip the non-existent templates bmpBitmap:= PixMapManager.LoadBitmapEnhanced(templateIcon, 16, True, clMenu); Items.AddObject(templateName + '=' + templatePath, bmpBitmap); finally FreeAndNil(desktopFile); end; except // Skip end; until FindNextEx(searchRec) <> 0; Result:= Items.Count > 0; end; FindCloseEx(searchRec); end; finally if Assigned(Items) and (Items.Count = 0) then FreeAndNil(Items); end; end; {$ENDIF} function GetTemplateMenu(out Items: TStringList): Boolean; begin {$IF DEFINED(DARWIN) OR DEFINED(HAIKU)} Result:= False; {$ELSE} case GetDesktopEnvironment of DE_KDE: Result:= GetKdeTemplateMenu(Items); else Result:= GetGnomeTemplateMenu(Items); end; if Result then Items.Sort; {$ENDIF} end; procedure TShellContextMenu.LeaveDrive; begin if frmMain.ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin if IsInPath(FDrive.Path, frmMain.ActiveFrame.CurrentPath, True, True) then begin frmMain.ActiveFrame.CurrentPath:= GetHomeDir; end; end; if frmMain.NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin if IsInPath(FDrive.Path, frmMain.NotActiveFrame.CurrentPath, True, True) then begin frmMain.NotActiveFrame.CurrentPath:= GetHomeDir; end; end end; procedure TShellContextMenu.PackHereSelect(Sender: TObject); begin frmMain.Commands.cm_PackFiles(['PackHere']); end; procedure TShellContextMenu.ExtractHereSelect(Sender: TObject); begin frmMain.Commands.cm_ExtractFiles(['ExtractHere']); end; (* handling user commands from context menu *) procedure TShellContextMenu.ContextMenuSelect(Sender: TObject); var UserSelectedCommand: TExtActionCommand = nil; begin with Sender as TComponent do UserSelectedCommand := ContextMenuActionList.ExtActionCommand[tag].CloneExtAction; try try //For the %-Variable replacement that follows it might sounds incorrect to do it with "nil" instead of "aFile", //but original code was like that. It is useful, at least, when more than one file is selected so because of that, //it's pertinent and should be kept! ProcessExtCommandFork(UserSelectedCommand.CommandName, UserSelectedCommand.Params, UserSelectedCommand.StartPath, nil); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(UserSelectedCommand); end; end; procedure TShellContextMenu.StandardContextMenuSelect(Sender: TObject); var MenuItem: TMenuItem absolute Sender; begin with frmMain.ActiveFrame do begin if SameText(MenuItem.Hint, sCmdVerbProperties) then ShowFilePropertiesDialog(FileSource, FFiles); end; end; (* handling user commands from template context menu *) procedure TShellContextMenu.TemplateContextMenuSelect(Sender: TObject); var FileName: String; SelectedItem: TMenuItem; AbsoluteTargetFileName: String; begin // ShowMessage((Sender as TMenuItem).Hint); SelectedItem:= (Sender as TMenuItem); FileName:= SelectedItem.Caption; if InputQuery(rsMsgNewFile, rsMsgEnterName, FileName) then begin FileName:= FileName + ExtractFileExt(SelectedItem.Hint); AbsoluteTargetFileName:= frmMain.ActiveFrame.CurrentPath + FileName; if (not mbFileExists(AbsoluteTargetFileName)) or (msgYesNo(Format(rsMsgFileExistsRwrt, [FileName]))) then begin if CopyFile(SelectedItem.Hint, AbsoluteTargetFileName) then begin frmMain.ActiveFrame.Reload; frmMain.ActiveFrame.SetActiveFile(FileName); end; end; end; end; procedure TShellContextMenu.DriveMountSelect(Sender: TObject); begin MountDrive(@FDrive); end; procedure TShellContextMenu.DriveUnmountSelect(Sender: TObject); begin LeaveDrive; UnmountDrive(@FDrive); end; procedure TShellContextMenu.DriveEjectSelect(Sender: TObject); begin LeaveDrive; EjectDrive(@FDrive); end; procedure TShellContextMenu.OpenWithOtherSelect(Sender: TObject); {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} var I: LongInt; FileNames: TStringList; {$ENDIF} begin {$IF DEFINED(LINUX)} if DesktopEnv = DE_FLATPAK then FlatpakOpen(FFiles[0].FullPath, True) else {$ENDIF} {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} begin FileNames := TStringList.Create; for I := 0 to FFiles.Count - 1 do FileNames.Add(FFiles[I].FullPath); ShowOpenWithDialog(frmMain, FileNames); end; {$ENDIF} end; {$IF DEFINED(DARWIN)} function OpenWithComparator(param1:id; param2:id; nouse: pointer): NSInteger; cdecl; var fileManager: NSFileManager; string1: NSString; string2: NSString; begin fileManager:= NSFileManager.defaultManager; string1:= fileManager.displayNameAtPath( param1.path ); string2:= fileManager.displayNameAtPath( param2.path ); Result:= string1.localizedStandardCompare( string2 ); end; function filesToNSUrlArray( const files:TFiles ): NSArray; var theArray: NSMutableArray; theFile: TFile; path: String; url: NSUrl; begin theArray:= NSMutableArray.arrayWithCapacity( files.Count ); for theFile in files.List do begin path:= theFile.FullPath; url:= NSUrl.fileURLWithPath( StringToNSString(path) ); theArray.addObject( url ); end; Result:= theArray; end; function getAppArrayFromFiles( const files:TFiles ): NSArray; const ROLE_MASK = kLSRolesViewer or kLSRolesEditor or kLSRolesShell; var theFile: TFile; path: String; url: NSUrl; appSet: NSMutableSet = nil; newSet: NSSet; appArray: NSMutableArray; newArray: NSArray; defaultAppUrl: NSUrl = nil; begin Result:= nil; try for theFile in files.List do begin path:= theFile.FullPath; url:= NSUrl.fileURLWithPath( StringToNSString(path) ); newArray:= NSArray( LSCopyApplicationURLsForURL(CFURLRef(url), ROLE_MASK) ); newSet:= NSSet.setWithArray( newArray ); if Assigned(appSet) then begin appSet.intersectSet( newSet ); end else begin appSet:= NSMutableSet.alloc.initWithSet( newSet ); if newArray.count > 0 then defaultAppUrl:= newArray.objectAtIndex(0); end; newArray.release; end; newArray:= NSArray.arrayWithArray( appSet.allObjects ); newArray:= newArray.sortedArrayUsingFunction_context( @OpenWithComparator, nil ); appArray:= NSMutableArray.arrayWithArray( newArray ); if appArray.containsObject(defaultAppUrl) then begin appArray.removeObject( defaultAppUrl ); appArray.insertObject_atIndex( defaultAppUrl, 0 ); end; Result:= appArray; finally appSet.release; end; end; // Context Menu / Open with / Other... function getOtherAppFromDialog(): String; var appDialog: TOpenDialog; begin Result:= ''; appDialog:= TOpenDialog.Create(nil); appDialog.DefaultExt:= 'app'; appDialog.InitialDir:= '/Applications'; appDialog.Filter:= rsOpenWithMacOSFilter; if appDialog.Execute and (NOT appDialog.FileName.IsEmpty) then begin Result:= appDialog.FileName; end; FreeAndNil( appDialog ); end; procedure TShellContextMenu.OpenWithMenuItemSelect(Sender: TObject); var appPath: String; launchParam: LSLaunchURLSpec; begin appPath := (Sender as TMenuItem).Hint; if appPath.IsEmpty then begin appPath:= getOtherAppFromDialog; if appPath.IsEmpty then Exit; end; launchParam.appURL:= CFURLRef( NSUrl.fileURLWithPath(StringToNSString(appPath)) ); launchParam.itemURLs:= CFArrayRef( filesToNSUrlArray(FFiles) ); launchParam.launchFlags:= 0; launchParam.asyncRefCon:= nil; launchParam.passThruParams:= nil; LSOpenFromURLSpec( launchParam, nil ); end; {$ELSE} procedure TShellContextMenu.OpenWithMenuItemSelect(Sender: TObject); var ExecCmd: String; begin ExecCmd := (Sender as TMenuItem).Hint; if ExecCmd.IsEmpty then Exit; try ExecCmdFork(ExecCmd); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; {$ENDIF} function TShellContextMenu.FillOpenWithSubMenu: Boolean; {$IF DEFINED(DARWIN)} var I: Integer; ImageIndex: PtrInt; bmpTemp: TBitmap = nil; mi, miOpenWith: TMenuItem; appArray: NSArray; appUrl: NSURL; begin Result:= False; if FFiles.Count=0 then Exit; appArray:= getAppArrayFromFiles( FFiles ); miOpenWith:= TMenuItem.Create(Self); miOpenWith.Caption:= rsMnuOpenWith; if Assigned(appArray) and (appArray.count>0) then begin FMenuImageList := TImageList.Create(nil); miOpenWith.SubMenuImages := FMenuImageList; for I:= 0 to appArray.count-1 do begin appUrl:= NSURL( appArray.objectAtIndex(I) ); mi:= TMenuItem.Create( miOpenWith ); mi.Caption:= NSFileManager.defaultManager.displayNameAtPath(appUrl.path).UTF8String; mi.Hint := appUrl.path.UTF8String; ImageIndex:= PixMapManager.GetApplicationBundleIcon(appUrl.path.UTF8String, -1); if ImageIndex >= 0 then begin bmpTemp:= PixMapManager.GetBitmap(ImageIndex); if Assigned(bmpTemp) then begin mi.ImageIndex:=FMenuImageList.Count; FMenuImageList.Add( bmpTemp , nil ); FreeAndNil(bmpTemp); end; end; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); if (i=0) and (appArray.count>=2) then addDelimiterMenuItem( miOpenWith ); end; end; // Other... addDelimiterMenuItem( miOpenWith ); mi:= TMenuItem.Create(miOpenWith); mi.Caption:= rsMnuOpenWithOther; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); Self.Items.Add(miOpenWith); Result:= True; end; {$ELSEIF DEFINED(HAIKU)} begin Result:= False; end; {$ELSE} var I: LongInt; bmpTemp: TBitmap; FileNames: TStringList; Entry: PDesktopFileEntry; mi, miOpenWith: TMenuItem; DesktopEntries: TList = nil; begin Result := True; FileNames := TStringList.Create; try miOpenWith := TMenuItem.Create(Self); miOpenWith.Caption := rsMnuOpenWith; Self.Items.Add(miOpenWith); for I := 0 to FFiles.Count - 1 do FileNames.Add(FFiles[I].FullPath); DesktopEntries := GetDesktopEntries(FileNames); if Assigned(DesktopEntries) and (DesktopEntries.Count > 0) then begin for I := 0 to DesktopEntries.Count - 1 do begin Entry := PDesktopFileEntry(DesktopEntries[I]); mi := TMenuItem.Create(miOpenWith); mi.Caption := Entry^.DisplayName; mi.Hint := Entry^.Exec; bmpTemp:= PixMapManager.LoadBitmapEnhanced(Entry^.IconName, 16, True, clMenu); if Assigned(bmpTemp) then begin mi.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); end; miOpenWith.AddSeparator; end; mi := TMenuItem.Create(miOpenWith); mi.Caption := rsMnuOpenWithOther; mi.OnClick := Self.OpenWithOtherSelect; miOpenWith.Add(mi); {$IF DEFINED(LINUX)} FillRabbitMenu(Self, FileNames); {$ENDIF} finally FreeAndNil(FileNames); if Assigned(DesktopEntries) then begin for I := 0 to DesktopEntries.Count - 1 do Dispose(PDesktopFileEntry(DesktopEntries[I])); FreeAndNil(DesktopEntries); end; end; end; {$ENDIF} {$IF DEFINED(DARWIN)} procedure TShellContextMenu.FillServicesSubMenu; var mi: TMenuItem; begin addDelimiterMenuItem( self ); // attach Services Menu in TMacosServiceMenuHelper mi:=TMenuItem.Create(Self); mi.Caption:=uLng.rsMenuMacOsServices; Self.Items.Add(mi); addDelimiterMenuItem( self ); // add Sharing Menu // similar to MacOS 13, the Share MenuItem does not expand the submenu, // and the SharingServicePicker pops up after clicking Share MenuItem. mi:=TMenuItem.Create(Self); mi.Caption:= uLng.rsMenuMacOsShare; mi.OnClick:= self.SharingMenuItemSelect; Self.Items.Add(mi); end; procedure TShellContextMenu.SharingMenuItemSelect(Sender: TObject); begin showMacOSSharingServiceMenu; end; {$ENDIF} constructor TShellContextMenu.Create(Owner: TWinControl; ADrive: PDrive); var mi: TMenuItem; begin inherited Create(Owner); FDrive := ADrive^; mi := TMenuItem.Create(Self); if not ADrive^.IsMounted then begin if ADrive^.IsMediaAvailable then begin mi.Caption := rsMnuMount; mi.OnClick := Self.DriveMountSelect; end else begin mi.Caption := rsMnuNoMedia; mi.Enabled := False; end; end else begin {$IF not DEFINED(DARWIN)} mi.Caption := rsMnuUmount; mi.OnClick := Self.DriveUnmountSelect; {$ELSE} mi.Caption := rsMnuUmount + ' / ' + rsMnuEject; mi.OnClick := Self.DriveEjectSelect; {$ENDIF} end; Self.Items.Add(mi); {$IF not DEFINED(DARWIN)} if ADrive^.IsMediaEjectable then begin mi :=TMenuItem.Create(Self); mi.Caption := rsMnuEject; mi.OnClick := Self.DriveEjectSelect; Self.Items.Add(mi); end; {$ENDIF} end; { TShellContextMenu.CreateActionSubMenu } // Create the "Actions" menu/submenu. procedure TShellContextMenu.CreateActionSubMenu(MenuWhereToAdd:TComponent; aFile:TFile; bIncludeViewEdit:boolean); var mi: TMenuItem; I, iDummy:integer; sAct: String; iMenuPositionInsertion: integer =0; procedure AddMenuItemRightPlace; begin if MenuWhereToAdd is TMenuItem then TMenuItem(MenuWhereToAdd).Add(mi) else Self.Items.Add(mi); inc(iMenuPositionInsertion); end; procedure LocalInsertMenuSeparator; begin mi:=TMenuItem.Create(MenuWhereToAdd); mi.Caption:='-'; AddMenuItemRightPlace; end; procedure LocalInsertMenuItem(CaptionMenu:string; MenuDispatcher:integer); begin mi := TMenuItem.Create(MenuWhereToAdd); mi.Caption := CaptionMenu; mi.Tag := MenuDispatcher; mi.OnClick:= Self.ContextMenuSelect; AddMenuItemRightPlace; end; begin // Read actions from "extassoc.xml" if not gExtendedContextMenu then gExts.GetExtActions(aFile, ContextMenuActionList, @iDummy, False) else gExts.GetExtActions(aFile, ContextMenuActionList, @iDummy, True); if not gExtendedContextMenu then begin // In non expanded context menu (legacy), the order of items is: // 1o) Custom action different then Open, View or Edit // 2o) Add a separator in any action added above // 3o) View (always) // 4o) Edit (always) // note: In Windows flavor, this is not the same order but to respect initial DC legacy order, that was it. if ContextMenuActionList.Count > 0 then begin for I := 0 to pred(ContextMenuActionList.Count) do begin sAct := ContextMenuActionList.ExtActionCommand[I].ActionName; if (SysUtils.CompareText('OPEN', sAct) <> 0) and (SysUtils.CompareText('VIEW', sAct) <> 0) and (SysUtils.CompareText('EDIT', sAct) <> 0) then LocalInsertMenuItem(sAct, I); end; end; if iMenuPositionInsertion>0 then //It cannot be just (ContextMenuActionList.Count>0) 'case if the list has just OPEN, VIEW or READ, we will have nothing and we don't want the separator. LocalInsertMenuSeparator; I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView, '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName, I); I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit, '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName, I); end else begin // In expanded context menu (legacy), the order of items is the following. // 1o) Custom actions, no matter is open, view or edit (if any, add also a separator just before). // These will be shown in the same order as what they are configured in File Association. // The routine "GetExtActions" has already placed them in the wanted order. // Also, the routine "GetExtActions" has already included the menu separator ('-') between different "TExtAction". // 2o) Add a separator in any action added above // 3o) View (always, and if "external" is used, shows also the "internal" if user wants it. // 4o) Edit (always, and if "external" is used, shows also the "internal" if user wants it. // 5o) We add the Execute via shell if user requested it. // 6o) We add the Execute via terminal if user requested it (close and then stay open). // 7o) Still if user requested it, the shortcut run file association configuration, if user wanted it. // A separator also prior that last action. // note: In Windows flavor, this is not the same order but to respect initial DC legacy order, that was it. for I:= 0 to pred(ContextMenuActionList.Count) do begin if ContextMenuActionList.ExtActionCommand[I].ActionName<>'-' then begin sAct:= ContextMenuActionList.ExtActionCommand[I].ActionName; if (SysUtils.CompareText('OPEN', sAct) = 0) or (SysUtils.CompareText('VIEW', sAct) = 0) or (SysUtils.CompareText('EDIT', sAct) = 0) then sAct:=sAct+' ('+ExtractFilename(ContextMenuActionList.ExtActionCommand[I].CommandName)+')'; LocalInsertMenuItem(sAct,I); end else begin LocalInsertMenuSeparator; end; end; // If the default context actions not hidden if gDefaultContextActions then begin if ContextMenuActionList.Count>0 then LocalInsertMenuSeparator; // If the external generic viewer is configured, offer it. if gExternalTools[etViewer].Enabled then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView+' ('+rsViewWithExternalViewer+')','{!VIEWER}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Make sure we always shows our internal viewer I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView+' ('+rsViewWithInternalViewer+')','{!DC-VIEWER}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); // If the external generic editor is configured, offer it. if gExternalTools[etEditor].Enabled then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit+' ('+rsEditWithExternalEditor+')','{!EDITOR}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Make sure we always shows our internal editor I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit+' ('+rsEditWithInternalEditor+')','{!DC-EDITOR}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; if (gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen) and (ContextMenuActionList.Count>0) then LocalInsertMenuSeparator; // Execute via shell if gOpenExecuteViaShell then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaShell,'{!SHELL}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Execute via terminal and close if gExecuteViaTerminalClose then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalClose,'{!TERMANDCLOSE}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Execute via terminal and stay open if gExecuteViaTerminalStayOpen then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalStayOpen,'{!TERMSTAYOPEN}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Add shortcut to launch file association cnfiguration screen if gIncludeFileAssociation then begin if ContextMenuActionList.Count>0 then LocalInsertMenuSeparator; I := ContextMenuActionList.Add(TExtActionCommand.Create(rsConfigurationFileAssociation,'cm_FileAssoc','','')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; end; end; constructor TShellContextMenu.Create(Owner: TWinControl; var Files: TFiles; Background: Boolean; UserWishForContextMenu: TUserWishForContextMenu); var I: Integer; aFile: TFile = nil; sl: TStringList = nil; mi, miActions, miSortBy: TMenuItem; AddActionsMenu: Boolean = False; AddOpenWithMenu: Boolean = False; begin inherited Create(Owner); FFiles:= Files; FUserWishForContextMenu:= UserWishForContextMenu; try if ContextMenuActionList=nil then ContextMenuActionList:=TExtActionList.Create; ContextMenuActionList.Clear; if not Background then begin aFile := Files[0]; // Add the "Open" if FUserWishForContextMenu = uwcmComplete then begin mi:=TMenuItem.Create(Self); mi.Action := frmMain.actShellExecute; Self.Items.Add(mi); end; // Add the "Actions" menu if FUserWishForContextMenu = uwcmComplete then begin miActions:=TMenuItem.Create(Self); miActions.Caption:= rsMnuActions; CreateActionSubMenu(miActions, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); if miActions.Count>0 then Self.Items.Add(miActions) else miActions.Free; end else begin CreateActionSubMenu(Self, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))) end; if FUserWishForContextMenu = uwcmComplete then begin addDelimiterMenuItem( self ); // Add "Open with" submenu if needed AddOpenWithMenu := FillOpenWithSubMenu; // Add "Services" menu if MacOS {$IF DEFINED(DARWIN)} FillServicesSubMenu; {$ENDIF} // Add delimiter menu addDelimiterMenuItem( self ); // Add "Pack here..." mi:=TMenuItem.Create(Self); mi.Caption:= rsMnuPackHere; mi.OnClick:= Self.PackHereSelect; Self.Items.Add(mi); // Add "Extract here..." if FileIsArchive(aFile.FullPath) then begin mi:=TMenuItem.Create(Self); mi.Caption:= rsMnuExtractHere; mi.OnClick:= Self.ExtractHereSelect; Self.Items.Add(mi); end; // Add delimiter menu addDelimiterMenuItem( self ); // Add "Move" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRename; Self.Items.Add(mi); // Add "Copy" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCopy; Self.Items.Add(mi); // Add "Delete" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actDelete; Self.Items.Add(mi); // Add "Rename" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRenameOnly; Self.Items.Add(mi); addDelimiterMenuItem( self ); // Add "Cut" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCutToClipboard; Self.Items.Add(mi); // Add "Copy" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCopyToClipboard; Self.Items.Add(mi); // Add "PAste" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actPasteFromClipboard; Self.Items.Add(mi); addDelimiterMenuItem( self ); // Add "Show file properties" mi:= TMenuItem.Create(Self); mi.Hint:= sCmdVerbProperties; mi.Caption:= frmMain.actFileProperties.Caption; mi.ShortCut:= frmMain.actFileProperties.ShortCut; mi.OnClick:= Self.StandardContextMenuSelect; Self.Items.Add(mi); end; end else begin mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRefresh; Self.Items.Add(mi); // Add "Sort by" submenu miSortBy := TMenuItem.Create(Self); miSortBy.Caption := rsMnuSortBy; Self.Items.Add(miSortBy); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByName; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByExt; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortBySize; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByDate; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByAttr; miSortBy.Add(mi); addDelimiterMenuItem( miSortBy ); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actReverseOrder; miSortBy.Add(mi); addDelimiterMenuItem( self ); mi:=TMenuItem.Create(Self); mi.Action := frmMain.actPasteFromClipboard; Self.Items.Add(mi); addDelimiterMenuItem( self ); // Add "New" submenu miSortBy := TMenuItem.Create(Self); miSortBy.Caption := rsMnuNew; Self.Items.Add(miSortBy); // Add "Create directory" mi:= TMenuItem.Create(miSortBy); mi.Action := frmMain.actMakeDir; mi.Caption:= rsPropsFolder; miSortBy.Add(mi); // Add "Create file" mi:= TMenuItem.Create(miSortBy); mi.Action := frmMain.actEditNew; mi.Caption:= rsPropsFile; miSortBy.Add(mi); if GetTemplateMenu(sl) then begin addDelimiterMenuItem( miSortBy ); for I:= 0 to sl.Count - 1 do begin mi:=TMenuItem.Create(miSortBy); mi.Caption:= sl.Names[I]; mi.Hint:= sl.ValueFromIndex[I]; mi.OnClick:= Self.TemplateContextMenuSelect; if Assigned(sl.Objects[I]) then begin mi.Bitmap.Assign(TBitmap(sl.Objects[I])); sl.Objects[I].Free; sl.Objects[I]:= nil; end; miSortBy.Add(mi); end; FreeAndNil(sl); end; addDelimiterMenuItem( self ); mi:= TMenuItem.Create(Self); mi.Hint:= sCmdVerbProperties; mi.Caption:= frmMain.actFileProperties.Caption; mi.ShortCut:= frmMain.actFileProperties.ShortCut; mi.OnClick:= Self.StandardContextMenuSelect; Self.Items.Add(mi); end; finally Files:= nil; end; end; destructor TShellContextMenu.Destroy; begin FreeAndNil(FFiles); FreeAndNil(FMenuImageList); inherited Destroy; end; end. doublecmd-1.1.30/src/platform/unix/urabbitvcs.pas0000644000175000001440000003525015104114162021041 0ustar alexxusersunit uRabbitVCS; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Menus, Graphics, uPixMapManager; const RabbitVCSAddress = 'org.google.code.rabbitvcs.RabbitVCS.Checker'; RabbitVCSObject = '/org/google/code/rabbitvcs/StatusChecker'; RabbitVCSInterface = 'org.google.code.rabbitvcs.StatusChecker'; {$IF DEFINED(RabbitVCS)} type TVcsStatus = (vscNormal, vscModified, vscAdded, vscDeleted, vscIgnored, vscReadOnly, vscLocked, vscUnknown, vscMissing, vscReplaced, vscComplicated, vscCalculating, vscError, vscUnversioned); const VcsStatusText: array[TVcsStatus] of String = ( 'normal', 'modified', 'added', 'deleted', 'ignored', 'locked', 'locked', 'unknown', 'missing', 'replaced', 'complicated', 'calculating', 'error', 'unversioned' ); VcsStatusEmblems: array[TVcsStatus] of String = ( 'emblem-rabbitvcs-normal', 'emblem-rabbitvcs-modified', 'emblem-rabbitvcs-added', 'emblem-rabbitvcs-deleted', 'emblem-rabbitvcs-ignored', 'emblem-rabbitvcs-locked', 'emblem-rabbitvcs-locked', 'emblem-rabbitvcs-unknown', 'emblem-rabbitvcs-complicated', 'emblem-rabbitvcs-modified', 'emblem-rabbitvcs-complicated', 'emblem-rabbitvcs-calculating', 'emblem-rabbitvcs-error', 'emblem-rabbitvcs-unversioned' ); {en Requests a status check from the underlying status checker. } function CheckStatus(Path: String; Recurse: Boolean32 = False; Invalidate: Boolean32 = True; Summary: Boolean32 = False): string; {$ENDIF} procedure FillRabbitMenu(Menu: TPopupMenu; Paths: TStringList); var RabbitVCS: Boolean = False; implementation uses BaseUnix, Unix, DBus, LazLogger, DCUnix, DCClassesUtf8, uGlobs, uGlobsPaths, uMyUnix, uPython {$IF DEFINED(RabbitVCS)} , fpjson, jsonparser, jsonscanner {$ENDIF} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} , uGObject2 {$ENDIF} ; const MODULE_NAME = 'rabbit-vcs'; var error: DBusError; RabbitGtk3: Boolean; conn: PDBusConnection = nil; PythonModule: PPyObject = nil; ShellContextMenu: PPyObject = nil; PythonVersion: array[Byte] of AnsiChar; procedure Initialize(Self: TObject); forward; procedure Print(const sMessage: String); begin DebugLn('RabbitVCS: ', sMessage); end; function CheckError(const sMessage: String; pError: PDBusError): Boolean; begin if (dbus_error_is_set(pError) <> 0) then begin Print(sMessage + ': ' + pError^.name + ' ' + pError^.message); dbus_error_free(pError); Result := True; end else Result := False; end; function CheckRabbit: Boolean; var service_exists: dbus_bool_t; begin dbus_error_init(@error); // Check if RabbitVCS service is running service_exists := dbus_bus_name_has_owner(conn, RabbitVCSAddress, @error); if CheckError('Cannot query RabbitVCS on DBUS', @error) then Result:= False else Result:= (service_exists <> 0); end; function CheckService: Boolean; var pyValue: PPyObject; begin Result:= CheckRabbit; if Result then Print('Service found running') else begin // Try to start RabbitVCS service pyValue:= PythonRunFunction(PythonModule, 'StartService'); Py_XDECREF(pyValue); Result:= CheckRabbit; if Result then Print('Service successfully started'); end; end; {$IF DEFINED(RabbitVCS)} function CheckStatus(Path: String; Recurse: Boolean32; Invalidate: Boolean32; Summary: Boolean32): string; var Return: Boolean; StringPtr: PAnsiChar; JAnswer : TJSONObject; VcsStatus: TVcsStatus; message: PDBusMessage; argsIter: DBusMessageIter; pending: PDBusPendingCall; arrayIter: DBusMessageIter; begin if not RabbitVCS then Exit; // Create a new method call and check for errors message := dbus_message_new_method_call(RabbitVCSAddress, // target for the method call RabbitVCSObject, // object to call on RabbitVCSInterface, // interface to call on 'CheckStatus'); // method name if (message = nil) then begin Print('Cannot create message "CheckStatus"'); Exit; end; try // Append arguments StringPtr:= PAnsiChar(Path); dbus_message_iter_init_append(message, @argsIter); if not RabbitGtk3 then Return:= (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_STRING, @StringPtr) <> 0) else begin Return:= (dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE_AS_STRING, @arrayIter) <> 0); Return:= Return and (dbus_message_iter_append_fixed_array(@arrayIter, DBUS_TYPE_BYTE, @StringPtr, Length(Path)) <> 0); Return:= Return and (dbus_message_iter_close_container(@argsIter, @arrayIter) <> 0); end; Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Recurse) <> 0); Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Invalidate) <> 0); Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Summary) <> 0); if not Return then begin Print('Cannot append arguments'); Exit; end; // Send message and get a handle for a reply if (dbus_connection_send_with_reply(conn, message, @pending, -1) = 0) then begin Print('Error sending message'); Exit; end; if (pending = nil) then begin Print('Pending call is null'); Exit; end; dbus_connection_flush(conn); finally dbus_message_unref(message); end; // Block until we recieve a reply dbus_pending_call_block(pending); // Get the reply message message := dbus_pending_call_steal_reply(pending); // Free the pending message handle dbus_pending_call_unref(pending); if (message = nil) then begin Print('Reply is null'); Exit; end; try // Read the parameters if (dbus_message_iter_init(message, @argsIter) <> 0) then begin if (dbus_message_iter_get_arg_type(@argsIter) = DBUS_TYPE_STRING) then begin dbus_message_iter_get_basic(@argsIter, @StringPtr); with TJSONParser.Create(StrPas(StringPtr), [joUTF8]) do try try JAnswer:= Parse as TJSONObject; try Result:= JAnswer.Strings['content']; if Result = 'unknown' then Exit(EmptyStr); finally JAnswer.Free; end; except Exit(EmptyStr); end; finally Free; end; for VcsStatus:= Low(TVcsStatus) to High(VcsStatus) do begin if (VcsStatusText[VcsStatus] = Result) then begin Result:= VcsStatusEmblems[VcsStatus]; Break; end; end; end; end; finally dbus_message_unref(message); end; end; {$ENDIF} procedure MenuClickHandler(Self, Sender: TObject); var pyMethod, pyArgs: PPyObject; MenuItem: TMenuItem absolute Sender; begin if Assigned(ShellContextMenu) then begin pyMethod:= PyString_FromString('Execute'); pyArgs:= PyString_FromString(PAnsiChar(MenuItem.Hint)); PyObject_CallMethodObjArgs(ShellContextMenu, pyMethod, pyArgs, nil); Py_XDECREF(pyArgs); Py_XDECREF(pyMethod); end; end; procedure FillRabbitMenu(Menu: TPopupMenu; Paths: TStringList); var Handler: TMethod; pyMethod, pyValue: PPyObject; procedure SetBitmap(Item: TMenuItem; const IconName: String); var bmpTemp: TBitmap; begin bmpTemp:= PixMapManager.LoadBitmapEnhanced(IconName, 16, True, clMenu); if Assigned(bmpTemp) then begin Item.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; end; procedure BuildMenu(pyMenu: PPyObject; BaseItem: TMenuItem); var Index: Integer; IconName: String; MenuItem: TMenuItem; pyItem, pyObject: PPyObject; begin for Index:= 0 to PyList_Size(pyMenu) - 1 do begin pyItem:= PyList_GetItem(pyMenu, Index); MenuItem:= TMenuItem.Create(BaseItem); pyObject:= PyObject_GetAttrString(pyItem, 'label'); MenuItem.Caption:= PyStringToString(pyObject); if MenuItem.Caption <> '-' then begin pyObject:= PyObject_GetAttrString(pyItem, 'identifier'); MenuItem.Hint:= PyStringToString(pyObject); if Length(MenuItem.Hint) > 0 then begin MenuItem.OnClick:= TNotifyEvent(Handler); end; pyObject:= PyObject_GetAttrString(pyItem, 'icon'); IconName:= PyStringToString(pyObject); if Length(IconName) > 0 then SetBitmap(MenuItem, IconName); end; pyObject:= PyObject_GetAttrString(pyItem, 'menu'); if Assigned(pyObject) and (PyList_Size(pyObject) > 0) then begin BuildMenu(pyObject, MenuItem); Py_DECREF(pyObject); end; BaseItem.Add(MenuItem); end; end; begin if not RabbitVCS then Exit; Py_XDECREF(ShellContextMenu); ShellContextMenu:= PythonRunFunction(PythonModule, 'GetContextMenu', Paths); if Assigned(ShellContextMenu) then begin Handler.Data:= Menu; Handler.Code:= @MenuClickHandler; pyMethod:= PyString_FromString('GetMenu'); pyValue:= PyObject_CallMethodObjArgs(ShellContextMenu, pyMethod, nil); if Assigned(pyValue) then begin BuildMenu(pyValue, Menu.Items); Py_DECREF(pyValue); end; Py_XDECREF(pyMethod); end; end; function FindPython(const Path: String): String; const Debian = '/usr/share/python3/debian_defaults'; begin Result:= ExtractFileName(Path); Result:= StringReplace(Result, 'python', '', []); if Length(Result) > 0 then begin if Result[1] = '2' then Exit; if fpAccess(Debian, F_OK) = 0 then try with TIniFileEx.Create(Debian, fmOpenRead) do try Result:= ReadString('DEFAULT', 'default-version', Result); Result:= StringReplace(Trim(Result), 'python', '', []); finally Free; end; except // Ignore end; end; end; function CheckPackage({%H-}Parameter : Pointer): PtrInt; const Path = '/usr/lib'; var DirPtr: pDir; Handler: TMethod; Directory: String; DirEntPtr: pDirent; PackageFormat: String; begin if fpAccess('/etc/debian_version', F_OK) = 0 then PackageFormat:= 'dist-packages/rabbitvcs' else begin PackageFormat:= 'site-packages/rabbitvcs'; end; DirPtr:= fpOpenDir(Path); if Assigned(DirPtr) then try DirEntPtr:= fpReadDir(DirPtr^); while DirEntPtr <> nil do begin if (DirEntPtr^.d_name <> '..') and (DirEntPtr^.d_name <> '.') then begin if FNMatch('python*', DirEntPtr^.d_name, 0) = 0 then begin Directory:= Path + PathDelim + DirEntPtr^.d_name; if (fpAccess(Directory + PathDelim + PackageFormat, F_OK) = 0) then begin PythonVersion:= FindPython(Directory); if Length(PythonVersion) > 0 then begin Handler.Data:= nil; Handler.Code:= @Initialize; while (gConfig = nil) do Sleep(10); TThread.Synchronize(nil, TThreadMethod(Handler)); end; Exit(0); end; end; end; DirEntPtr:= fpReadDir(DirPtr^); end; finally fpCloseDir(DirPtr^); end; Result:= 1; end; function CheckVersion: Boolean; var ATemp: AnsiString; pyModule: PPyObject; pyVersion: PPyObject; AVersion: TStringArray; Major, Minor, Micro: Integer; {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} GtkWidget: TGType; GtkClass, Gtk3: Pointer; {$ENDIF} begin Result:= False; pyModule:= PythonLoadModule('rabbitvcs'); if Assigned(pyModule) then begin pyVersion:= PythonRunFunction(pyModule, 'package_version'); if Assigned(pyVersion) then begin ATemp:= PyStringToString(pyVersion); AVersion:= ATemp.Split(['.']); Print('Version ' + ATemp); if (Length(AVersion) > 1) then begin Major:= StrToIntDef(AVersion[0], 0); Minor:= StrToIntDef(AVersion[1], 0); if (Length(AVersion) > 2) then Micro:= StrToIntDef(AVersion[2], 0) else begin Micro:= 0; end; // RabbitVCS migrated to GTK3 from version 0.17.1 RabbitGtk3:= (Major > 0) or (Minor > 17) or ((Minor = 17) and (Micro > 0)); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} // Check GTK platform theme plugin GtkWidget:= g_type_from_name('GtkWidget'); Result:= (GtkWidget = 0); if not Result then begin GtkClass:= g_type_class_ref(GtkWidget); // Property 'expand' since GTK 3.0 Gtk3:= g_object_class_find_property(GtkClass, 'expand'); // RabbitVCS GTK version should be same as Qt platform theme plugin GTK version Result:= (RabbitGtk3 = Assigned(Gtk3)); end; {$ELSEIF DEFINED(LCLGTK2)} Result:= not RabbitGTK3; {$ELSEIF DEFINED(LCLGTK3)} Result:= RabbitGTK3; {$ELSE} Result:= True {$ENDIF} end; end; end; end; procedure Initialize(Self: TObject); begin dbus_error_init(@error); conn := dbus_bus_get(DBUS_BUS_SESSION, @error); if CheckError('Cannot acquire connection to DBUS session bus', @error) then Exit; if PythonInitialize(PythonVersion) then begin if not CheckVersion then Exit; Print('Python version ' + PythonVersion); PythonAddModulePath(gpExePath + 'scripts'); PythonModule:= PythonLoadModule(MODULE_NAME); RabbitVCS:= Assigned(PythonModule) and CheckService; end; end; procedure Finalize; begin PythonFinalize; if Assigned(conn) then dbus_connection_unref(conn); end; initialization BeginThread(@CheckPackage); finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/uqtworkaround.pas0000644000175000001440000000147615104114162021625 0ustar alexxusersunit uQtWorkaround; {$mode objfpc}{$H+} interface implementation uses InitC, BaseUnix, LCLVersion; {$IF DEFINED(LCLQT5)} procedure _exit(status: cint); cdecl; external clib; {$ELSEIF DEFINED(LCLQT6)} function setenv(const name, value: pchar; overwrite: cint): cint; cdecl; external clib; {$ENDIF} {$IF DEFINED(LCLQT6)} initialization // Workaround: https://github.com/doublecmd/doublecmd/issues/2290 if (LowerCase(fpGetEnv(PAnsiChar('XDG_SESSION_TYPE'))) = 'wayland') then setenv('QT_QPA_PLATFORM', 'xcb', 1); {$ENDIF} {$IF DEFINED(LCLQT5)} finalization // Workaround: https://doublecmd.sourceforge.io/mantisbt/view.php?id=2079 if (UpCase(fpGetEnv(PAnsiChar('XDG_CURRENT_DESKTOP'))) = 'KDE') then begin WriteLn('Warning: Skip libKF5IconThemes exit handler'); _exit(ExitCode); end; {$ENDIF} end. doublecmd-1.1.30/src/platform/unix/upython.pas0000644000175000001440000002111415104114162020375 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple interface to the Python language Copyright (C) 2014-2020 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uPython; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes, DCOSUtils; type PPyObject = ^TPyObject; PPyTypeObject = ^TPyTypeObject; TPyTypeObject = record ob_refcnt: csize_t; ob_type: PPyTypeObject; ob_size: csize_t; tp_name: PAnsiChar; tp_basicsize, tp_itemsize: csize_t; //* Methods to implement standard operations */ tp_dealloc: procedure(obj: PPyObject); cdecl; end; TPyObject = record ob_refcnt: csize_t; ob_type: PPyTypeObject; end; var // pythonrun.h Py_Initialize: procedure; cdecl; Py_Finalize: procedure; cdecl; PyErr_Print: procedure; cdecl; PyRun_SimpleString: function(s: PAnsiChar): cint; cdecl; // import.h PyImport_Import: function(name: PPyObject): PPyObject; cdecl; // object.h PyCallable_Check: function(ob: PPyObject): cint; cdecl; PyObject_GetAttrString: function (ob: PPyObject; c: PAnsiChar): PPyObject; cdecl; // abstract.h PyObject_CallObject: function(callable_object, args: PPyObject): PPyObject; cdecl; PyObject_CallFunctionObjArgs: function(callable: PPyObject): PPyObject; cdecl; varargs; PyObject_CallMethodObjArgs: function(o, name: PPyObject): PPyObject; cdecl; varargs; // stringobject.h PyString_AsString: function(ob: PPyObject): PAnsiChar; cdecl; PyString_FromString: function(s: PAnsiChar): PPyObject; cdecl; // sysmodule.h PySys_SetArgvEx: procedure(argc: cint; argv: PPointer; updatepath: cint); cdecl; // listobject.h PyList_New: function(size: csize_t): PPyObject; cdecl; PyList_Size: function (ob: PPyObject): csize_t; cdecl; PyList_GetItem: function(ob: PPyObject; index: csize_t): PPyObject; cdecl; PyList_SetItem: function(ob: PPyObject; index: csize_t; item: PPyObject): cint; cdecl; // tupleobject.h PyTuple_New: function(size: csize_t): PPyObject; cdecl; PyTuple_SetItem: function(ob: PPyObject; index: csize_t; item: PPyObject): cint; cdecl; procedure Py_DECREF(op: PPyObject); procedure Py_XDECREF(op: PPyObject); function PyStringToString(S: PPyObject): String; function PythonInitialize(const Version: String): Boolean; procedure PythonFinalize; procedure PythonAddModulePath(const Path: String); function PythonLoadModule(const ModuleName: String): PPyObject; function PythonRunFunction(Module: PPyObject; const FunctionName: String): PPyObject; overload; function PythonRunFunction(Module: PPyObject; const FunctionName, FunctionArg: String): PPyObject; overload; function PythonRunFunction(Module: PPyObject; const FunctionName: String; FileList: TStrings): PPyObject; overload; var HasPython: Boolean = False; implementation uses dynlibs, dl, uMyUnix; procedure Py_DECREF(op: PPyObject); begin with op^ do begin Dec(ob_refcnt); if ob_refcnt = 0 then begin ob_type^.tp_dealloc(op); end; end; end; procedure Py_XDECREF(op: PPyObject); inline; begin if Assigned(op) then Py_DECREF(op); end; function PyStringToString(S: PPyObject): String; begin if not Assigned(S) then Result:= EmptyStr else begin Result:= StrPas(PyString_AsString(S)); Py_DECREF(S); end; end; function StringsToPyList(Strings: TStrings): PPyObject; var I: LongInt; begin Result:= PyList_New(Strings.Count); if not Assigned(Result) then Exit; for I:= 0 to Strings.Count - 1 do begin PyList_SetItem(Result, I, PyString_FromString(PAnsiChar(Strings[I]))); end; end; function PyObjectsToPyTuple(Values: array of PPyObject): PPyObject; var Index: csize_t; begin Result:= PyTuple_New(Length(Values)); if not Assigned(Result) then Exit; for Index:= Low(Values) to High(Values) do begin PyTuple_SetItem(Result, Index, Values[Index]); end; end; procedure PythonAddModulePath(const Path: String); begin PyRun_SimpleString('import sys'); PyRun_SimpleString(PAnsiChar('sys.path.append("' + Path + '")')); end; function PythonLoadModule(const ModuleName: String): PPyObject; var pyName: PPyObject; begin pyName:= PyString_FromString(PAnsiChar(ModuleName)); Result:= PyImport_Import(pyName); Py_DECREF(pyName); end; function PythonCallFunction(Module: PPyObject; const FunctionName: String; FunctionArg: PPyObject): PPyObject; overload; var pyFunc, pyArgs: PPyObject; begin if Assigned(Module) then begin pyFunc:= PyObject_GetAttrString(Module, PAnsiChar(FunctionName)); if (Assigned(pyFunc) and (PyCallable_Check(pyFunc) <> 0)) then begin if (FunctionArg = nil) then pyArgs:= nil else begin pyArgs:= PyObjectsToPyTuple([FunctionArg]); end; Result:= PyObject_CallObject(pyFunc, pyArgs); Py_XDECREF(pyArgs); if (Result = nil) then begin PyErr_Print() end; Py_DECREF(pyFunc); end; end; end; function PythonRunFunction(Module: PPyObject; const FunctionName: String): PPyObject; begin Result:= PythonCallFunction(Module, FunctionName, nil); end; function PythonRunFunction(Module: PPyObject; const FunctionName, FunctionArg: String): PPyObject; var pyArgs: PPyObject; begin pyArgs:= PyString_FromString(PAnsiChar(FunctionArg)); Result:= PythonCallFunction(Module, FunctionName, pyArgs); end; function PythonRunFunction(Module: PPyObject; const FunctionName: String; FileList: TStrings): PPyObject; var pyArgs: PPyObject; begin pyArgs:= StringsToPyList(FileList); Result:= PythonCallFunction(Module, FunctionName, pyArgs); end; var libpython: TLibHandle; function LoadPython(const Name: String): TLibHandle; var Handle: Pointer absolute Result; begin Handle:= dlopen(PAnsiChar(Name), RTLD_NOW or RTLD_GLOBAL); end; function PythonInitialize(const Version: String): Boolean; var PythonLibrary: String ='libpython%s.so.1.0'; begin libpython:= LoadPython(Format(PythonLibrary, [Version])); HasPython:= libpython <> NilHandle; if HasPython then try @Py_Initialize:= SafeGetProcAddress(libpython, 'Py_Initialize'); @Py_Finalize:= SafeGetProcAddress(libpython, 'Py_Finalize'); @PyErr_Print:= SafeGetProcAddress(libpython, 'PyErr_Print'); @PyRun_SimpleString:= SafeGetProcAddress(libpython, 'PyRun_SimpleString'); @PyImport_Import:= SafeGetProcAddress(libpython, 'PyImport_Import'); @PyCallable_Check:= SafeGetProcAddress(libpython, 'PyCallable_Check'); @PyObject_GetAttrString:= SafeGetProcAddress(libpython, 'PyObject_GetAttrString'); @PyObject_CallObject:= SafeGetProcAddress(libpython, 'PyObject_CallObject'); @PyObject_CallMethodObjArgs:= SafeGetProcAddress(libpython, 'PyObject_CallMethodObjArgs'); @PyObject_CallFunctionObjArgs:= SafeGetProcAddress(libpython, 'PyObject_CallFunctionObjArgs'); if (Version[1] < '3') then begin @PyString_AsString:= SafeGetProcAddress(libpython, 'PyString_AsString'); @PyString_FromString:= SafeGetProcAddress(libpython, 'PyString_FromString'); end else begin @PyString_AsString:= SafeGetProcAddress(libpython, 'PyUnicode_AsUTF8'); @PyString_FromString:= SafeGetProcAddress(libpython, 'PyUnicode_FromString'); end; @PySys_SetArgvEx:= SafeGetProcAddress(libpython, 'PySys_SetArgvEx'); @PyList_New:= SafeGetProcAddress(libpython, 'PyList_New'); @PyList_Size:= SafeGetProcAddress(libpython, 'PyList_Size'); @PyList_GetItem:= SafeGetProcAddress(libpython, 'PyList_GetItem'); @PyList_SetItem:= SafeGetProcAddress(libpython, 'PyList_SetItem'); @PyTuple_New:= SafeGetProcAddress(libpython, 'PyTuple_New'); @PyTuple_SetItem:= SafeGetProcAddress(libpython, 'PyTuple_SetItem'); // Initialize the Python interpreter Py_Initialize(); PySys_SetArgvEx(0, nil, 0); except HasPython:= False; FreeLibrary(libpython); end; Result:= HasPython; end; procedure PythonFinalize; begin if HasPython then begin Py_Finalize(); HasPython:= False; FreeLibrary(libpython); end; end; end. doublecmd-1.1.30/src/platform/unix/upollthread.pas0000644000175000001440000001005115104114162021210 0ustar alexxusersunit uPollThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Unix, BaseUnix; procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean = True); procedure RemovePoll(fd: cint); implementation uses DCUnix, uDebug; type { TPollRecord } TPollRecord = record handler: TNotifyEvent; CloseOnDestroy: Boolean; end; { TPollThread } TPollThread = class(TThread) private FCount: Cardinal; FEventPipe: TFilDes; FDesc: array of tpollfd; FHandler: array of TPollRecord; protected procedure Refresh; procedure Execute; override; procedure Clear(Sender: TObject); public procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean = True); constructor Create; reintroduce; destructor Destroy; override; end; var Mutex: TRTLCriticalSection; PollThread: TPollThread = nil; procedure Print(const sMessage: String); begin DCDebug('PollThread: ', sMessage); end; procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean); begin EnterCriticalSection(Mutex); try if not Assigned(PollThread) then begin PollThread:= TPollThread.Create; end; PollThread.AddPoll(fd, events, handler, CloseOnDestroy); Print('AddPoll ' + IntToStr(fd)); finally LeaveCriticalSection(Mutex); end; end; procedure RemovePoll(fd: cint); var Index: Integer; begin EnterCriticalSection(Mutex); try for Index:= 0 to PollThread.FCount - 1 do begin if PollThread.FDesc[Index].fd = fd then begin PollThread.FDesc[Index].events:= 0; Break; end; end; Print('RemovePoll ' + IntToStr(fd)); finally LeaveCriticalSection(Mutex); end; end; { TPollThread } procedure TPollThread.Clear(Sender: TObject); var Symbol: Byte = 0; begin // Clear pipe while FileRead(FEventPipe[0], Symbol, 1) <> -1 do; end; procedure TPollThread.Refresh; var Symbol: Byte = 0; begin FileWrite(FEventPipe[1], Symbol, 1); end; procedure TPollThread.Execute; var i: cint; ret: cint; begin while not Terminated do begin repeat ret:= fpPoll(@FDesc[0], FCount, -1); until (ret <> -1) or (fpGetErrNo <> ESysEINTR); if (ret = -1) then begin Print(SysErrorMessage(fpGetErrNo)); Exit; end; for i := 0 to FCount - 1 do begin if (FDesc[i].events and FDesc[i].revents <> 0) then begin FHandler[i].handler(Self); end; end; end; end; procedure TPollThread.AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean); var NewLength: Integer; begin NewLength:= FCount + 1; SetLength(FDesc, NewLength); SetLength(FHandler, NewLength); FDesc[FCount].fd:= fd; FDesc[FCount].events:= events; FHandler[FCount].handler:= handler; FHandler[FCount].CloseOnDestroy:= CloseOnDestroy; InterLockedIncrement(FCount); if FCount = 2 then begin Start; Print('Start polling'); end; Refresh; end; constructor TPollThread.Create; begin inherited Create(True); // Create pipe for user triggered fake event FEventPipe[0] := -1; FEventPipe[1] := -1; if fpPipe(FEventPipe) < 0 then Print(SysErrorMessage(fpGetErrNo)) else begin // Set both ends of pipe non blocking FileCloseOnExec(FEventPipe[0]); FileCloseOnExec(FEventPipe[1]); FpFcntl(FEventPipe[0], F_SetFl, FpFcntl(FEventPipe[0], F_GetFl) or O_NONBLOCK); FpFcntl(FEventPipe[1], F_SetFl, FpFcntl(FEventPipe[1], F_GetFl) or O_NONBLOCK); end; Self.AddPoll(FEventPipe[0], POLLIN, @Clear, True); end; destructor TPollThread.Destroy; var Index: Integer; begin Terminate; Refresh; inherited Destroy; // Close both ends of pipe if FEventPipe[1] <> -1 then begin FileClose(FEventPipe[1]); FEventPipe[1] := -1; end; for Index:= 0 to FCount - 1 do begin if FHandler[Index].CloseOnDestroy then FileClose(FDesc[Index].fd); end; Print('Finish polling'); end; initialization InitCriticalSection(Mutex); finalization PollThread.Free; DoneCriticalSection(Mutex); end. doublecmd-1.1.30/src/platform/unix/upipeserver.pas0000644000175000001440000000734615104114162021253 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Unix implementation of one-way IPC between 2 processes Copyright (C) 2015-2021 Alexander Koblov (alexx2000@mail.ru) Based on simpleipc.inc from Free Component Library. Copyright (c) 2005 by Michael Van Canneyt, member of the Free Pascal development team See the file COPYING.FPC.txt, included in this distribution, for details about the copyright. 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. } unit uPipeServer; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function GetPipeFileName(const FileName: String; Global : Boolean): String; implementation uses SimpleIPC, BaseUnix, uPollThread {$IF DEFINED(DARWIN)} , uMyDarwin {$ELSE} , uXdg {$ENDIF} ; ResourceString SErrFailedToCreatePipe = 'Failed to create named pipe: %s'; SErrFailedToRemovePipe = 'Failed to remove named pipe: %s'; Type { TPipeServerComm } TPipeServerComm = Class(TIPCServerComm) Private FFileName: String; FStream: TFileStream; private procedure OwnerReadMessage; procedure Handler(Sender: TObject); Public Constructor Create(AOWner : TSimpleIPCServer); override; Procedure StartServer; override; Procedure StopServer; override; Function PeekMessage(TimeOut : Integer) : Boolean; override; Procedure ReadMessage ; override; Function GetInstanceID : String;override; Property FileName : String Read FFileName; Property Stream : TFileStream Read FStream; end; function GetPipeFileName(const FileName: String; Global : Boolean): String; begin {$IF DEFINED(DARWIN)} Result:= NSGetTempPath + FileName; {$ELSEIF DEFINED(HAIKU)} Result:= IncludeTrailingBackslash(GetTempDir) + FileName; {$ELSE} Result:= IncludeTrailingBackslash(GetUserRuntimeDir) + FileName; {$ENDIF} Result:= Result + '.pipe' end; { TPipeServerComm } procedure TPipeServerComm.OwnerReadMessage; begin {$IF FPC_FULLVERSION >= 30200} ReadMessage; {$ENDIF} Owner.ReadMessage; end; procedure TPipeServerComm.Handler(Sender: TObject); begin TThread.Synchronize(nil, @OwnerReadMessage); end; constructor TPipeServerComm.Create(AOWner: TSimpleIPCServer); begin inherited Create(AOWner); FFileName:= Owner.ServerID; if not Owner.Global then FFileName:= FFileName + '-' + IntToStr(fpGetPID); if FFileName[1] <> '/' then FFileName:= GetPipeFileName(FFileName, Owner.Global); end; procedure TPipeServerComm.StartServer; const PrivateRights = S_IRUSR or S_IWUSR; GlobalRights = PrivateRights or S_IRGRP or S_IWGRP or S_IROTH or S_IWOTH; Rights : Array [Boolean] of Integer = (PrivateRights,GlobalRights); begin If not FileExists(FFileName) then If (fpmkFifo(FFileName, &600)<>0) then DoError(SErrFailedToCreatePipe,[FFileName]); FStream:=TFileStream.Create(FFileName,fmOpenReadWrite+fmShareDenyNone,Rights[Owner.Global]); AddPoll(FStream.Handle, POLLIN, @Handler, False); end; procedure TPipeServerComm.StopServer; begin RemovePoll(FStream.Handle); FreeAndNil(FStream); if Not DeleteFile(FFileName) then DoError(SErrFailedtoRemovePipe,[FFileName]); end; function TPipeServerComm.PeekMessage(TimeOut: Integer): Boolean; Var FDS : TFDSet; begin fpfd_zero(FDS); fpfd_set(FStream.Handle,FDS); Result:=fpSelect(FStream.Handle+1,@FDS,Nil,Nil,TimeOut)>0; end; procedure TPipeServerComm.ReadMessage; var Hdr : TMsgHeader; begin FStream.ReadBuffer(Hdr,SizeOf(Hdr)); PushMessage(Hdr,FStream); end; function TPipeServerComm.GetInstanceID: String; begin Result:=IntToStr(fpGetPID); end; initialization DefaultIPCServerClass:= TPipeServerComm; end. doublecmd-1.1.30/src/platform/unix/uoverlayscrollbarfix.pas0000644000175000001440000000073715104114162023160 0ustar alexxusersunit uOverlayScrollBarFix; {$mode objfpc}{$H+} interface implementation uses BaseUnix, XLib; function setenv(const name, value: pchar; overwrite: longint): longint; cdecl; external 'c' name 'setenv'; initialization setenv('LIBOVERLAY_SCROLLBAR', '0', 1); if (fpGetEnv(PAnsiChar('GTK_IM_MODULE')) = 'xim') then begin setenv('GTK_IM_MODULE', '', 1); WriteLn('Warning: Unsupported input method (xim)'); end; WriteLn('XInitThreads: ', XInitThreads); end. doublecmd-1.1.30/src/platform/unix/umyunix.pas0000644000175000001440000004407315104114162020416 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific UNIX functions. Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uMyUnix; {$mode objfpc}{$H+} {$packrecords c} {$IF NOT DEFINED(LINUX)} {$DEFINE FPC_USE_LIBC} {$ENDIF} interface uses Classes, SysUtils, BaseUnix, CTypes, DCBasicTypes, uDrive; const libc = 'c'; _PATH_FSTAB = '/etc/fstab'; _PATH_MOUNTED = '/etc/mtab'; type TDesktopEnvironment = ( DE_UNKNOWN = 0, DE_KDE = 1, DE_GNOME = 2, DE_XFCE = 3, DE_LXDE = 4, DE_MATE = 5, DE_CINNAMON = 6, DE_LXQT = 7, DE_FLY = 8, DE_FLATPAK = 9 ); const DesktopName: array[TDesktopEnvironment] of String = ( 'Unknown', 'KDE', 'GNOME', 'Xfce', 'LXDE', 'MATE', 'Cinnamon', 'LXQt', 'Fly', 'Flatpak' ); {$IF DEFINED(LINUX)} type PIOFILE = Pointer; PFILE = PIOFILE; //en Mount entry record mntent = record mnt_fsname: PChar; //en< name of mounted file system mnt_dir: PChar; //en< file system path prefix mnt_type: PChar; //en< mount type mnt_opts: PChar; //en< mount options mnt_freq: LongInt; //en< dump frequency in days mnt_passno: LongInt; //en< pass number on parallel fsck end; TMountEntry = mntent; PMountEntry = ^TMountEntry; {en Opens the file system description file @param(filename File system description file) @param(mode Type of access) @returns(The function returns a file pointer to file system description file) } function setmntent(const filename: PChar; const mode: PChar): PFILE; cdecl; external libc name 'setmntent'; {en Reads the next line from the file system description file @param(stream File pointer to file system description file) @returns(The function returns a pointer to a structure containing the broken out fields from a line in the file) } function getmntent(stream: PFILE): PMountEntry; cdecl; external libc name 'getmntent'; {en Closes the file system description file @param(stream File pointer to file system description file) @returns(The function always returns 1) } function endmntent(stream: PFILE): LongInt; cdecl; external libc name 'endmntent'; {$ENDIF} function fpSystemStatus(Command: string): cint; function GetDesktopEnvironment: TDesktopEnvironment; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; {en Checks if file is executable or script @param(FileName File name) @returns(The function returns @true if successful, @false otherwise) } function FileIsUnixExecutable(const Filename: String): Boolean; function FindExecutableInSystemPath(var FileName: String): Boolean; function ExecutableInSystemPath(const FileName: String): Boolean; function GetDefaultAppCmd(const FileName: String): String; function GetFileMimeType(const FileName: String): String; {en Fix separators in case they are broken UTF-8 characters (FPC takes only first byte as it doesn't support Unicode). } procedure FixDateTimeSeparators; function MountDrive(Drive: PDrive): Boolean; function UnmountDrive(Drive: PDrive): Boolean; function EjectDrive(Drive: PDrive): Boolean; function ExecuteCommand(Command: String; Args: TDynamicStringArray; StartPath: String): Boolean; {$IF DEFINED(BSD)} const MNT_WAIT = 1; // synchronously wait for I/O to complete MNT_NOWAIT = 2; // start all I/O, but do not wait for it MNT_LAZY = 3; // push data not written by filesystem syncer MNT_SUSPEND = 4; // suspend file system after sync type TFSTab = record fs_spec: PChar; // block special device name fs_file: PChar; // file system path prefix fs_vfstype: PChar; // file system type, ufs, nfs fs_mntops: PChar; // mount options ala -o fs_type: PChar; // FSTAB_* from fs_mntops fs_freq: longint; // dump frequency, in days fs_passno: longint; // pass number on parallel fsc end; PFSTab = ^TFSTab; PStatFS = ^TStatFS; {$IF DEFINED(DARWIN)} function getfsstat(buf: pstatfs; bufsize: cint; flags: cint): cint; cdecl; external libc name 'getfsstat'; {$ELSE} function getfsstat(struct_statfs: PStatFS; const buffsize: int64; const int_flags: integer): integer; {$ENDIF} function getfsent(): PFSTab; cdecl; external libc name 'getfsent'; procedure endfsent(); cdecl; external libc name 'endfsent'; {$ENDIF} var DesktopEnv: TDesktopEnvironment = DE_UNKNOWN; implementation uses URIParser, Unix, Process, LazUTF8, DCOSUtils, DCClassesUtf8, DCStrUtils, LazLogger, DCUnix, uDCUtils, uOSUtils {$IF (NOT DEFINED(FPC_USE_LIBC)) or (DEFINED(BSD) AND NOT DEFINED(DARWIN))} , SysCall {$ENDIF} {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} , uFontConfig, uMimeActions, uMimeType, uGVolume {$ENDIF} {$IFDEF DARWIN} , uMyDarwin {$ENDIF} {$IFDEF LINUX} , uUDisks2 {$ENDIF} ; {$IF DEFINED(BSD) AND NOT DEFINED(DARWIN)} function getfsstat(struct_statfs: PStatFS; const buffsize: int64; const int_flags: integer): integer; {$IF DEFINED(FREEBSD) AND ((fpc_version<2) OR ((fpc_version=2) AND (fpc_release<5)))} const syscall_nr_getfsstat = 18; // was not defined before fpc 2.5.1 {$ENDIF} begin Result := do_syscall(syscall_nr_getfsstat, TSysParam(struct_statfs), TSysParam(buffsize), TSysParam(int_flags)); end; {$ENDIF} function fpSystemStatus(Command: string): cint; begin Result := fpSystem(UTF8ToSys(Command)); if wifexited(Result) then Result := wexitStatus(Result); end; {$IFDEF LINUX} var HavePMount: Boolean = False; procedure CheckPMount; begin // Check pumount first because Puppy Linux has another tool named pmount HavePMount := (fpSystemStatus('pumount --version > /dev/null 2>&1') = 0) and (fpSystemStatus('pmount --version > /dev/null 2>&1') = 0); end; {$ENDIF LINUX} function GetDesktopEnvironment: TDesktopEnvironment; var I: Integer; DesktopSession: String; const EnvVariable: array[0..2] of String = ('XDG_CURRENT_DESKTOP', 'XDG_SESSION_DESKTOP', 'DESKTOP_SESSION'); begin if fpGetEnv(PAnsiChar('FLATPAK_ID')) <> nil then begin Exit(DE_FLATPAK); end; Result:= DE_UNKNOWN; for I:= Low(EnvVariable) to High(EnvVariable) do begin DesktopSession:= GetEnvironmentVariable(EnvVariable[I]); if Length(DesktopSession) = 0 then Continue; DesktopSession:= LowerCase(DesktopSession); if Pos('kde', DesktopSession) <> 0 then Exit(DE_KDE); if Pos('plasma', DesktopSession) <> 0 then Exit(DE_KDE); if Pos('gnome', DesktopSession) <> 0 then Exit(DE_GNOME); if Pos('xfce', DesktopSession) <> 0 then Exit(DE_XFCE); if Pos('lxde', DesktopSession) <> 0 then Exit(DE_LXDE); if Pos('lxqt', DesktopSession) <> 0 then Exit(DE_LXQT); if Pos('mate', DesktopSession) <> 0 then Exit(DE_MATE); if Pos('cinnamon', DesktopSession) <> 0 then Exit(DE_CINNAMON); if Pos('fly', DesktopSession) <> 0 then Exit(DE_FLY); end; if GetEnvironmentVariable('KDE_FULL_SESSION') <> '' then Exit(DE_KDE); if GetEnvironmentVariable('GNOME_DESKTOP_SESSION_ID') <> '' then Exit(DE_GNOME); if GetEnvironmentVariable('_LXSESSION_PID') <> '' then Exit(DE_LXDE); end; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; var StatInfo: BaseUnix.Stat; iniDesktop: TIniFileEx = nil; begin Result:= False; try iniDesktop:= TIniFileEx.Create(FileName, fmOpenRead); try if iniDesktop.ReadString('Desktop Entry', 'Type', EmptyStr) = 'Link' then begin LinkTarget:= iniDesktop.ReadString('Desktop Entry', 'URL', EmptyStr); if not URIToFilename(LinkTarget, LinkTarget) then Exit; if fpLStat(UTF8ToSys(LinkTarget), StatInfo) <> 0 then Exit; Result:= FPS_ISDIR(StatInfo.st_mode); end; finally FreeAndNil(iniDesktop); end; except // Ignore end; end; function FileIsUnixExecutable(const FileName: String): Boolean; var Info : Stat; dwSign : LongWord; fsExeScr : TFileStreamEx = nil; begin // First check FileName is not a directory and then check if executable Result:= (fpStat(UTF8ToSys(FileName), Info) <> -1) and (FPS_ISREG(Info.st_mode)) and (Info.st_size >= SizeOf(dwSign)) and (BaseUnix.fpAccess(UTF8ToSys(FileName), BaseUnix.X_OK) = 0); if Result then try fsExeScr := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try dwSign := fsExeScr.ReadDWord; // ELF or #! Result := ((dwSign = NtoBE($7F454C46)) or (Lo(dwSign) = NtoBE($2321))); finally fsExeScr.Free; end; except Result:= False; end; end; function FindExecutableInSystemPath(var FileName: String): Boolean; var I: Integer; Path, FullName: String; Value: TDynamicStringArray; begin Path:= GetEnvironmentVariable('PATH'); Value:= SplitString(Path, PathSeparator); for I:= Low(Value) to High(Value) do begin FullName:= IncludeTrailingPathDelimiter(Value[I]) + FileName; if fpAccess(FullName, X_OK) = 0 then begin FileName:= FullName; Exit(True); end; end; Result:= False; end; function ExecutableInSystemPath(const FileName: String): Boolean; var FullName: String; begin FullName:= FileName; Result:= FindExecutableInSystemPath(FullName); end; function GetDefaultAppCmd(const FileName: String): String; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} var Filenames: TStringList; begin Filenames:= TStringList.Create; Filenames.Add(FileName); Result:= uMimeActions.GetDefaultAppCmd(Filenames); if Length(Result) = 0 then Result:= 'xdg-open ' + QuoteStr(FileName); FreeAndNil(Filenames); end; {$ELSEIF DEFINED(HAIKU)} begin Result:= '/bin/open ' + QuoteStr(FileName); end; {$ELSE} begin Result:= 'xdg-open ' + QuoteStr(FileName); end; {$ENDIF} function GetFileMimeType(const FileName: String): String; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} begin Result:= uMimeType.GetFileMimeType(FileName); end; {$ELSE} begin Result:= EmptyStr; end; {$ENDIF} procedure FixDateTimeSeparators; var TimeEnv: String; begin TimeEnv := GetEnvironmentVariable('LC_TIME'); if TimeEnv = EmptyStr then TimeEnv := GetEnvironmentVariable('LC_ALL'); if TimeEnv = EmptyStr then TimeEnv := GetEnvironmentVariable('LANG'); if TimeEnv <> EmptyStr then begin TimeEnv := upcase(TimeEnv); if StrEnds(TimeEnv, 'UTF-8') or StrEnds(TimeEnv, 'UTF8') then with FormatSettings do begin if Ord(DateSeparator) > $7F then DateSeparator := '/'; if Ord(TimeSeparator) > $7F then TimeSeparator := ':'; end; end; end; function Mount(const Path: String; Timeout: Integer): Boolean; var Message: String; Handler: TMethod; Process: TProcess; Index: Integer = 0; procedure ProcessForkEvent{$IF (FPC_FULLVERSION >= 30000)}(Self, Sender : TObject){$ENDIF}; begin if (setpgid(0, 0) < 0) then fpExit(127); end; begin Process:= TProcess.Create(nil); try Handler.Data:= Process; Process.Executable:= 'mount'; Process.Parameters.Add(Path); Handler.Code:= @ProcessForkEvent; {$IF (FPC_FULLVERSION >= 30000)} Process.OnForkEvent:= TProcessForkEvent(Handler); {$ELSE} Process.OnForkEvent:= TProcessForkEvent(@ProcessForkEvent); {$ENDIF} Process.Options:= Process.Options + [poUsePipes, poStderrToOutPut]; try Process.Execute; while Process.Running do begin Inc(Index); Sleep(100); if (Index > Timeout) then begin Process.Terminate(-1); fpKill(-Process.Handle, SIGTERM); Exit(False); end; Process.Input.Write(#13#10, 2); if (Process.Output.NumBytesAvailable > 0) then begin SetLength(Message, Process.Output.NumBytesAvailable); Process.Output.Read(Message[1], Length(Message)); Write(Message); end; end; {$IF (FPC_FULLVERSION >= 30000)} Result:= (Process.ExitCode = 0); {$ELSE} Result:= (Process.ExitStatus = 0); {$ENDIF} except Result:= False; end; finally Process.Free; end; end; function MountDrive(Drive: PDrive): Boolean; {$IFDEF LINUX} var MountPath: String = ''; {$ENDIF} begin if not Drive^.IsMounted then begin {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} Result := False; // If Path is not empty "mount" can mount it because it has a destination path from fstab. if Drive^.Path <> EmptyStr then {$ENDIF} Result := Mount(Drive^.Path, 300); {$IF DEFINED(LINUX)} if not Result and HasUDisks2 then begin Result:= uUDisks2.Mount(Drive^.DeviceId, MountPath); if Result then begin Drive^.Path:= MountPath; DebugLn(Drive^.DeviceId, ' -> ', MountPath); end end; if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pmount ' + Drive^.DeviceId) = 0; {$ELSEIF DEFINED(DARWIN)} if not Result then Result := fpSystemStatus('diskutil mount ' + Drive^.DeviceId) = 0; {$ENDIF} end else Result := True; end; function UnmountDrive(Drive: PDrive): Boolean; begin if Drive^.IsMounted then begin {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} if Drive^.DriveType = dtSpecial then begin Exit(uGVolume.Unmount(Drive^.Path)); end; {$ENDIF} {$IF DEFINED(LINUX)} Result := False; if HasUDisks2 then Result := uUDisks2.Unmount(Drive^.DeviceId); if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pumount ' + Drive^.DeviceId) = 0; if not Result then {$ELSEIF DEFINED(DARWIN)} Result := unmountAndEject( Drive^.Path ); if not Result then {$ENDIF} Result := fpSystemStatus('umount ' + Drive^.Path) = 0; end else Result := True; end; function EjectDrive(Drive: PDrive): Boolean; begin {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} Result:= uGVolume.Eject(Drive^.Path); if not Result then {$ENDIF} {$IF DEFINED(LINUX)} Result := False; if HasUDisks2 then Result := uUDisks2.Eject(Drive^.DeviceId); if not Result then {$ELSEIF DEFINED(DARWIN)} Result := unmountAndEject( Drive^.Path ); if not Result then {$ENDIF} Result := fpSystemStatus('eject ' + Drive^.DeviceId) = 0; end; {en Waits for a child process to finish and collects its exit status, causing it to be released by the system (prevents defunct processes). Instead of the wait-thread we could just ignore or handle SIGCHLD signal for the process, but this way we don't interfere with the signal handling. The downside is that there's a thread for every child process running. Another method is to periodically do a cleanup, for example from OnIdle or OnTimer event. Remember PIDs of spawned child processes and when cleaning call FpWaitpid(PID, nil, WNOHANG) on each PID. Downside is they are not released immediately after the child process finish (may be relevant if we want to display exit status to the user). } function WaitForPidThread(Parameter : Pointer): PtrInt; var Status : cInt = 0; PID: PtrInt absolute Parameter; begin while (FpWaitPid(PID, @Status, 0) = -1) and (fpgeterrno() = ESysEINTR) do; WriteLn('Process ', PID, ' finished, exit status ', Status); Result:= Status; EndThread(Result); end; function ExecuteCommand(Command: String; Args: TDynamicStringArray; StartPath: String): Boolean; var pid : TPid; begin {$IFDEF DARWIN} // If we run application bundle (*.app) then // execute it by 'open -a' command (see 'man open' for details) if StrEnds(Command, '.app') then begin SetLength(Args, Length(Args) + 2); for pid := High(Args) downto Low(Args) + 2 do Args[pid]:= Args[pid - 2]; Args[0] := '-a'; Args[1] := Command; Command := 'open'; end; {$ENDIF} pid := fpFork; if pid = 0 then begin { Set the close-on-exec flag to all } FileCloseOnExecAll; { Set child current directory } if Length(StartPath) > 0 then fpChdir(StartPath); { The child does the actual exec, and then exits } if FpExecLP(Command, Args) = -1 then DebugLn('Execute error %d: %s', [fpgeterrno, SysErrorMessage(fpgeterrno)]); { If the FpExecLP fails, we return an exitvalue of 127, to let it be known } fpExit(127); end else if pid = -1 then { Fork failed } begin DebugLn('Fork failed: ' + Command, LineEnding, SysErrorMessage(fpgeterrno)); end else if pid > 0 then { Parent } begin {$PUSH}{$WARNINGS OFF}{$HINTS OFF} BeginThread(@WaitForPidThread, Pointer(PtrInt(pid))); {$POP} end; Result := (pid > 0); end; {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} function GetFontName(const AName: String): String; var Res: TFcResult; AFont: PFcPattern; AFontName: PFcChar8; APattern: PFcPattern; begin Result:= AName; APattern:= FcNameParse(PFcChar8(AName)); if Assigned(APattern) then begin FcConfigSubstitute(nil, APattern, FcMatchPattern); FcDefaultSubstitute(APattern); AFont:= FcFontMatch(nil, APattern, @Res); if Assigned(AFont) then begin AFontName:= FcPatternFormat(AFont, '%{family}'); if Assigned(AFontName) then begin Result:= StrPas(AFontName); FcStrFree(AFontName); end; FcPatternDestroy(AFont); end; FcPatternDestroy(APattern); end; end; initialization DesktopEnv := GetDesktopEnvironment; {$IFDEF LINUX} CheckPMount; {$ENDIF} if LoadFontConfigLib('libfontconfig.so.1') then begin MonoSpaceFont:= GetFontName(MonoSpaceFont); DebugLn('Monospace: ', MonoSpaceFont); UnLoadFontConfigLib; end; {$ENDIF} end. doublecmd-1.1.30/src/platform/unix/umagickwand.pas0000644000175000001440000001745015104114162021171 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- ImageMagick thumbnail provider Copyright (C) 2013-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uMagickWand; {$mode delphi} interface implementation uses LCLIntf, Classes, SysUtils, DynLibs, FileUtil, Types, Graphics, CTypes, DCOSUtils, DCConvertEncoding, uThumbnails, uDebug, uClassesEx, uGraphics, uMasks; const MagickFalse = 0; MagickTrue = 1; const libMagickWand: array[0..7] of String = ( 'libMagickWand-7.Q16.so.10', 'libMagickWand-7.Q16HDRI.so.10', 'libMagickWand-6.Q16.so.7', 'libMagickWand-6.Q16HDRI.so.7', 'libMagickWand-6.Q16.so.6', 'libMagickWand-6.Q16HDRI.so.6', 'libMagickWand-6.Q16.so.3', 'libMagickWand-6.Q16HDRI.so.3' ); type PMagickWand = Pointer; MagickBooleanType = culong; ExceptionType = Word; PExceptionType = ^ExceptionType; {$PACKENUM 4} type FilterTypes = ( UndefinedFilter, PointFilter, BoxFilter, TriangleFilter, HermiteFilter, HannFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter, CubicFilter, CatromFilter, MitchellFilter, JincFilter, SincFilter, SincFastFilter, KaiserFilter, WelchFilter, ParzenFilter, BohmanFilter, BartlettFilter, LagrangeFilter, LanczosFilter ); var MagickWand: TLibHandle; MaskList: TMaskList = nil; var MagickWandGenesis: procedure(); cdecl; MagickWandTerminus: procedure(); cdecl; NewMagickWand: function(): PMagickWand; cdecl; DestroyMagickWand: function(wand: PMagickWand): PMagickWand; cdecl; MagickGetException: function(wand: PMagickWand; severity: PExceptionType): PAnsiChar; cdecl; MagickRelinquishMemory: function(resource: Pointer): Pointer; cdecl; MagickReadImage: function(wand: PMagickWand; const filename: PAnsiChar): MagickBooleanType; cdecl; MagickGetImageWidth: function(wand: PMagickWand): csize_t; cdecl; MagickGetImageHeight: function(wand: PMagickWand): csize_t; cdecl; MagickResizeImageOld: function(wand: PMagickWand; const columns, rows: csize_t; const filter: FilterTypes; const blur: double): MagickBooleanType; cdecl; MagickResizeImageNew: function(wand: PMagickWand; const columns, rows: csize_t; const filter: FilterTypes): MagickBooleanType; cdecl; MagickSetImageFormat: function(wand: PMagickWand; const format: PAnsiChar): MagickBooleanType; cdecl; MagickGetImageBlob: function(wand: PMagickWand; length: Pcsize_t): PByte; cdecl; procedure RaiseWandException(Wand: PMagickWand); var Description: PAnsiChar; Severity: ExceptionType; ExceptionMessage: AnsiString; begin Description:= MagickGetException(Wand, @Severity); ExceptionMessage:= AnsiString(Description); Description:= MagickRelinquishMemory(Description); Raise Exception.Create(ExceptionMessage); end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Memory: PByte; Wand: PMagickWand; MemorySize: csize_t; Width, Height: csize_t; BlobStream: TBlobStream; Status: MagickBooleanType; Bitmap: TPortableNetworkGraphic; begin Result:= nil; if MaskList.Matches(aFileName) then begin // DCDebug('GetThumbnail start: ' + IntToStr(GetTickCount)); Wand:= NewMagickWand; try Status:= MagickReadImage(Wand, PAnsiChar(CeUtf8ToSys(aFileName))); try if (Status = MagickFalse) then RaiseWandException(Wand); // Get image width and height Width:= MagickGetImageWidth(Wand); Height:= MagickGetImageHeight(Wand); if (Width > aSize.cx) or (Height > aSize.cy) then begin // Calculate aspect width and height of thumb aSize:= TThumbnailManager.GetPreviewScaleSize(Width, Height); // Create image thumbnail if Assigned(MagickResizeImageNew) then Status:= MagickResizeImageNew(Wand, aSize.cx, aSize.cy, LanczosFilter) else begin Status:= MagickResizeImageOld(Wand, aSize.cx, aSize.cy, LanczosFilter, 1.0); end; if (Status = MagickFalse) then RaiseWandException(Wand); end; Status:= MagickSetImageFormat(Wand, 'PNG32'); if (Status = MagickFalse) then RaiseWandException(Wand); Memory:= MagickGetImageBlob(Wand, @MemorySize); if Assigned(Memory) then try BlobStream:= TBlobStream.Create(Memory, MemorySize); Bitmap:= TPortableNetworkGraphic.Create; try Bitmap.LoadFromStream(BlobStream); Result:= Graphics.TBitmap.Create; BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; Bitmap.Free; BlobStream.Free; finally MagickRelinquishMemory(Memory); end; except on E: Exception do DCDebug('ImageMagick: ' + E.Message); end; finally Wand:= DestroyMagickWand(Wand); // DCDebug('GetThumbnail finish: ' + IntToStr(GetTickCount)); end; end; end; procedure Initialize; var Version: Integer; LibraryName: AnsiString; begin for Version:= 0 to High(libMagickWand) do begin LibraryName:= libMagickWand[Version]; MagickWand:= LoadLibrary(LibraryName); if (MagickWand <> NilHandle) then Break; end; if (MagickWand <> NilHandle) then try @MagickWandGenesis:= SafeGetProcAddress(MagickWand, 'MagickWandGenesis'); @MagickWandTerminus:= SafeGetProcAddress(MagickWand, 'MagickWandTerminus'); @NewMagickWand:= SafeGetProcAddress(MagickWand, 'NewMagickWand'); @DestroyMagickWand:= SafeGetProcAddress(MagickWand, 'DestroyMagickWand'); @MagickGetException:= SafeGetProcAddress(MagickWand, 'MagickGetException'); @MagickRelinquishMemory:= SafeGetProcAddress(MagickWand, 'MagickRelinquishMemory'); @MagickReadImage:= SafeGetProcAddress(MagickWand, 'MagickReadImage'); @MagickGetImageWidth:= SafeGetProcAddress(MagickWand, 'MagickGetImageWidth'); @MagickGetImageHeight:= SafeGetProcAddress(MagickWand, 'MagickGetImageHeight'); if (LibraryName[15] = '6') then @MagickResizeImageOld:= SafeGetProcAddress(MagickWand, 'MagickResizeImage') else begin @MagickResizeImageNew:= SafeGetProcAddress(MagickWand, 'MagickResizeImage'); end; @MagickSetImageFormat:= SafeGetProcAddress(MagickWand, 'MagickSetImageFormat'); @MagickGetImageBlob:= SafeGetProcAddress(MagickWand, 'MagickGetImageBlob'); MagickWandGenesis; // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); MaskList:= TMaskList.Create('*.xcf'); DCDebug('ImageMagick: ' + LibraryName); except FreeLibrary(MagickWand); MagickWand:= NilHandle; end; end; procedure Finalize; begin if (MagickWand <> NilHandle) then begin MaskList.Free; MagickWandTerminus; FreeLibrary(MagickWand); end; end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/ukeyfile.pas0000644000175000001440000001472115104114162020512 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple key file implementation based on GKeyFile Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uKeyFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, IniFiles, DCBasicTypes, uGLib2; const { Constants for handling freedesktop.org Desktop files } DESKTOP_GROUP = 'Desktop Entry'; DESKTOP_KEY_CATEGORIES = 'Categories'; DESKTOP_KEY_COMMENT = 'Comment'; DESKTOP_KEY_EXEC = 'Exec'; DESKTOP_KEY_ICON = 'Icon'; DESKTOP_KEY_NAME = 'Name'; DESKTOP_KEY_TYPE = 'Type'; DESKTOP_KEY_TRY_EXEC = 'TryExec'; DESKTOP_KEY_MIME_TYPE = 'MimeType'; DESKTOP_KEY_NO_DISPLAY = 'NoDisplay'; DESKTOP_KEY_TERMINAL = 'Terminal'; DESKTOP_KEY_KDE_BUG = 'Path[$e]'; type { TKeyFile } TKeyFile = class(TCustomIniFile) private FGKeyFile: PGKeyFile; protected function LoadFromFile(const AFileName: String; out AMessage: String): Boolean; inline; public constructor Create(const AFileName: String; AEscapeLineFeeds : Boolean = False); override; destructor Destroy; override; public function SectionExists(const Section: String): Boolean; override; function ReadBool(const Section, Ident: String; Default: Boolean): Boolean; override; function ReadString(const Section, Ident, Default: String): String; override; function ReadLocaleString(const Section, Ident, Default: String): String; virtual; function ReadStringList(const Section, Ident: String): TDynamicStringArray; virtual; protected procedure WriteString(const Section, Ident, Value: String); override; procedure ReadSection(const Section: string; Strings: TStrings); override; procedure ReadSections(Strings: TStrings); override; procedure ReadSectionValues(const Section: string; Strings: TStrings); override; procedure EraseSection(const Section: string); override; procedure DeleteKey(const Section, Ident: String); override; procedure UpdateFile; override; end; implementation uses RtlConsts, DCStrUtils; { TKeyFile } function TKeyFile.LoadFromFile(const AFileName: String; out AMessage: String): Boolean; var AChar: Pgchar; ALength: gsize; AContents: Pgchar; AError: PGError = nil; function FormatMessage: String; begin if Assigned(AError) then begin Result:= StrPas(AError^.message); g_error_free(AError); AError:= nil; end; end; begin Result:= g_key_file_load_from_file(FGKeyFile, Pgchar(AFileName), G_KEY_FILE_NONE, @AError); if not Result then begin AMessage:= FormatMessage; // KDE menu editor adds invalid "Path[$e]" key. GKeyFile cannot parse // such desktop files. We comment it before parsing to avoid this problem. if Pos(DESKTOP_KEY_KDE_BUG, AMessage) > 0 then begin Result:= g_file_get_contents(Pgchar(AFileName), @AContents, @ALength, @AError); if not Result then AMessage:= FormatMessage else try AChar:= g_strstr_len(AContents, ALength, DESKTOP_KEY_KDE_BUG); if Assigned(AChar) then AChar^:= '#'; Result:= g_key_file_load_from_data(FGKeyFile, AContents, ALength, G_KEY_FILE_NONE, @AError); if not Result then AMessage:= FormatMessage; finally g_free(AContents); end; end; end; end; constructor TKeyFile.Create(const AFileName: String; AEscapeLineFeeds: Boolean); var AMessage: String; begin FGKeyFile:= g_key_file_new(); if not LoadFromFile(AFileName, AMessage) then raise EFOpenError.CreateFmt(SFOpenErrorEx, [AFileName, AMessage]); inherited Create(AFileName, AEscapeLineFeeds); CaseSensitive:= True; end; destructor TKeyFile.Destroy; begin inherited Destroy; g_key_file_free(FGKeyFile); end; function TKeyFile.SectionExists(const Section: String): Boolean; begin Result:= g_key_file_has_group(FGKeyFile, Pgchar(Section)); end; function TKeyFile.ReadBool(const Section, Ident: String; Default: Boolean): Boolean; {$OPTIMIZATION OFF} var AError: PGError = nil; begin Result:= g_key_file_get_boolean(FGKeyFile, Pgchar(Section), Pgchar(Ident), @AError); if (AError <> nil) then begin Result:= Default; g_error_free(AError); end; end; {$OPTIMIZATION DEFAULT} function TKeyFile.ReadString(const Section, Ident, Default: String): String; var AValue: Pgchar; begin AValue:= g_key_file_get_string(FGKeyFile, Pgchar(Section), Pgchar(Ident), nil); if (AValue = nil) then Result:= Default else begin Result:= StrPas(AValue); g_free(AValue); end; end; function TKeyFile.ReadLocaleString(const Section, Ident, Default: String): String; var AValue: Pgchar; begin AValue:= g_key_file_get_locale_string(FGKeyFile, Pgchar(Section), Pgchar(Ident), nil, nil); if (AValue = nil) then Result:= Default else begin Result:= StrPas(AValue); g_free(AValue); end; end; function TKeyFile.ReadStringList(const Section, Ident: String): TDynamicStringArray; var ALength: gsize; AIndex: Integer; AValue: PPgchar; begin AValue:= g_key_file_get_string_list(FGKeyFile, Pgchar(Section), Pgchar(Ident), @ALength, nil); if Assigned(AValue) then begin SetLength(Result, ALength); for AIndex:= 0 to Pred(Integer(ALength)) do begin Result[AIndex]:= StrPas(AValue[AIndex]); end; g_strfreev(AValue); end; end; procedure TKeyFile.WriteString(const Section, Ident, Value: String); begin end; procedure TKeyFile.ReadSection(const Section: string; Strings: TStrings); begin end; procedure TKeyFile.ReadSections(Strings: TStrings); begin end; procedure TKeyFile.ReadSectionValues(const Section: string; Strings: TStrings); begin end; procedure TKeyFile.EraseSection(const Section: string); begin end; procedure TKeyFile.DeleteKey(const Section, Ident: String); begin end; procedure TKeyFile.UpdateFile; begin end; end. doublecmd-1.1.30/src/platform/unix/ukde.pas0000644000175000001440000000357315104114162017630 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- K Desktop Environment integration unit Copyright (C) 2014-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uKde; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uMyUnix; function KioOpen(const URL: String): Boolean; var HasKdeOpen: Boolean = False; implementation uses LazLogger, uDCUtils, uGlobs, uOSUtils, uTrash; var KdeVersion: String; KdeOpen: String = 'kioclient'; function KioOpen(const URL: String): Boolean; begin Result:= ExecCmdFork(KdeOpen + ' exec ' + QuoteStr(URL)); end; function FileTrash(const FileName: String): Boolean; begin try Result:= ExecuteProcess(KdeOpen, ['--noninteractive', 'move', FileName, 'trash:/']) = 0; except on E: Exception do begin Result:= False; DebugLn('FileTrash: ', E.Message); end; end; end; procedure Initialize; begin if (DesktopEnv = DE_KDE) then begin KdeVersion:= GetEnvironmentVariable('KDE_SESSION_VERSION'); if KdeVersion = '5' then KdeOpen:= 'kioclient5'; HasKdeOpen:= FindExecutableInSystemPath(KdeOpen); // if HasKdeOpen then FileTrashUtf8:= @FileTrash; end; end; initialization RegisterInitialization(@Initialize); end. doublecmd-1.1.30/src/platform/unix/ujpegthumb.pas0000644000175000001440000000533215104114162021045 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Fast JPEG thumbnail provider Copyright (C) 2013 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uJpegThumb; {$mode objfpc}{$H+} interface implementation uses Classes, SysUtils, Types, Graphics, FPReadJPEG, IntfGraphics, GraphType, DCClassesUtf8, uReSample, uThumbnails; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Bitmap: TBitmap; RawImage: TRawImage; FileStream: TFileStreamEx; FPReaderJPEG: TFPReaderJPEG; LazIntfImage: TLazIntfImage; begin Result:= nil; if TJPEGImage.IsFileExtensionSupported(ExtractFileExt(aFileName)) then begin Result:= TBitmap.Create; FPReaderJPEG:= TFPReaderJPEG.Create; FPReaderJPEG.MinWidth:= aSize.cx; FPReaderJPEG.MinHeight:= aSize.cy; try FileStream:= TFileStreamEx.Create(aFileName, fmOpenRead or fmShareDenyNone); LazIntfImage:= TLazIntfImage.Create(aSize.cx, aSize.cy, [riqfRGB]); try FPReaderJPEG.ImageRead(FileStream, LazIntfImage); LazIntfImage.GetRawImage(RawImage, True); if not ((LazIntfImage.Width > aSize.cx) or (LazIntfImage.Height > aSize.cy)) then Result.LoadFromRawImage(RawImage, True) else begin Bitmap:= TBitmap.Create; try Bitmap.LoadFromRawImage(RawImage, True); aSize:= TThumbnailManager.GetPreviewScaleSize(Bitmap.Width, Bitmap.Height); Result.SetSize(aSize.cx, aSize.cy); Stretch(Bitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width); finally Bitmap.Free; end; end; finally FPReaderJPEG.Free; LazIntfImage.Free; FileStream.Free; end; except FreeAndNil(Result); end; end; end; initialization TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-1.1.30/src/platform/unix/ugvolume.pas0000644000175000001440000002343615104114162020543 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to GVolumeMonitor Copyright (C) 2014-2022 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGVolume; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uDrive; type TGVolumeSignal = (GVolume_Added, GVolume_Removed, GVolume_Changed); TGVolumeNotify = procedure(Signal: TGVolumeSignal; Drive: PDrive) of object; function Initialize: Boolean; procedure Finalize; procedure AddObserver(Func: TGVolumeNotify); procedure RemoveObserver(Func: TGVolumeNotify); function Eject(const Path: String): Boolean; function Unmount(const Path: String): Boolean; function EnumerateVolumes(DrivesList: TDrivesList): Boolean; implementation uses typinfo, fgl, LazLogger, uGLib2, uGio2, uGObject2, uShowMsg; type TGVolumeObserverList = specialize TFPGList; var VolumeMonitor: PGVolumeMonitor = nil; Observers: TGVolumeObserverList = nil; procedure Print(const Message: String); begin DebugLn('GVolumeMonitor: ', Message); end; function ReadString(Volume: PGVolume; const Kind: Pgchar): String; var Value: PAnsiChar; begin Value:= g_volume_get_identifier(Volume, Kind); if Value = nil then Result:= EmptyStr else begin Result:= StrPas(Value); g_free(Value); end; end; function VolumeToDrive(Volume: PGVolume): PDrive; var GFile: PGFile; GMount: PGMount; Name, Path: Pgchar; begin Result:= nil; GMount:= g_volume_get_mount(Volume); if Assigned(GMount) then g_object_unref(PGObject(GMount)) else begin GFile:= g_volume_get_activation_root(Volume); if Assigned(GFile) then begin if not g_file_has_uri_scheme(GFile, 'file') then begin Path:= g_file_get_uri(GFile); if Assigned(Path) then begin New(Result); Result^.IsMounted:= True; Result^.DriveType:= dtSpecial; Result^.IsMediaAvailable:= True; Result^.IsMediaEjectable:= g_volume_can_eject(Volume); Result^.DeviceId:= ReadString(Volume, VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); Result^.DriveLabel:= ReadString(Volume, VOLUME_IDENTIFIER_KIND_LABEL); Name:= g_volume_get_name(Volume); if (Name = nil) then Result^.DisplayName:= ExtractFileName(Result^.DeviceId) else begin Result^.DisplayName := StrPas(Name); g_free(Name); end; Result^.Path:= StrPas(Path); { Name:= g_uri_unescape_string(Path, nil); if (Name = nil) then Result^.Path:= StrPas(Path) else begin Result^.Path:= StrPas(Name); g_free(Name); end; } g_free(Path); end; end; g_object_unref(PGObject(GFile)); end; end; end; function MountToDrive(Mount: PGMount): PDrive; var GFile: PGFile; Name, Path: Pgchar; begin Result:= nil; if not g_mount_is_shadowed(Mount) then begin GFile:= g_mount_get_root(Mount); if Assigned(GFile) then begin if not g_file_has_uri_scheme(GFile, 'file') then begin Path:= g_file_get_uri(GFile); if Assigned(Path) then begin New(Result); Result^.IsMounted:= True; Result^.DriveType:= dtSpecial; Result^.IsMediaAvailable:= True; Result^.IsMediaEjectable:= g_mount_can_eject(Mount); Name:= g_mount_get_name(Mount); if (Name = nil) then Result^.DisplayName:= ExtractFileName(Result^.Path) else begin Result^.DisplayName := StrPas(Name); g_free(Name); end; Result^.Path:= StrPas(Path); { Name:= g_uri_unescape_string(Path, nil); if (Name = nil) then Result^.Path:= StrPas(Path) else begin Result^.Path:= StrPas(Name); g_free(Name); end; } g_free(Path); end; end; g_object_unref(PGObject(GFile)); end; end; end; procedure VolumeEvent(volume_monitor: PGVolumeMonitor; volume: PGVolume; user_data: gpointer); cdecl; var Drive: PDrive; Index: Integer; VolumeEvent: TGVolumeSignal absolute user_data; begin Drive:= VolumeToDrive(volume); if Assigned(Drive) then begin Print(GetEnumName(TypeInfo(TGVolumeSignal), PtrInt(VolumeEvent)) + ': ' + Drive^.Path); for Index:= 0 to Observers.Count - 1 do Observers[Index](VolumeEvent, Drive); end; end; procedure MountEvent(volume_monitor: PGVolumeMonitor; mount: PGMount; user_data: gpointer); cdecl; var Drive: PDrive; Index: Integer; VolumeEvent: TGVolumeSignal absolute user_data; begin Drive:= MountToDrive(mount); if Assigned(Drive) then begin Print(GetEnumName(TypeInfo(TGVolumeSignal), PtrInt(VolumeEvent)) + ': ' + Drive^.Path); for Index:= 0 to Observers.Count - 1 do Observers[Index](VolumeEvent, Drive); end; end; procedure AddObserver(Func: TGVolumeNotify); begin if Observers.IndexOf(Func) < 0 then Observers.Add(Func); end; procedure RemoveObserver(Func: TGVolumeNotify); begin Observers.Remove(Func); end; function Initialize: Boolean; begin VolumeMonitor:= g_volume_monitor_get(); Result:= Assigned(VolumeMonitor); if Result then begin Observers:= TGVolumeObserverList.Create; g_signal_connect_data(VolumeMonitor, 'volume-added', TGCallback(@VolumeEvent), gpointer(PtrInt(GVolume_Added)), nil, G_CONNECT_AFTER); g_signal_connect_data(VolumeMonitor, 'volume-changed', TGCallback(@VolumeEvent), gpointer(PtrInt(GVolume_Changed)), nil, G_CONNECT_AFTER); g_signal_connect_data(VolumeMonitor, 'volume-removed', TGCallback(@VolumeEvent), gpointer(PtrInt(GVolume_Removed)), nil, G_CONNECT_AFTER); g_signal_connect_data(VolumeMonitor, 'mount-added', TGCallback(@MountEvent), gpointer(PtrInt(GVolume_Added)), nil, G_CONNECT_AFTER); g_signal_connect_data(VolumeMonitor, 'mount-changed', TGCallback(@MountEvent), gpointer(PtrInt(GVolume_Changed)), nil, G_CONNECT_AFTER); g_signal_connect_data(VolumeMonitor, 'mount-removed', TGCallback(@MountEvent), gpointer(PtrInt(GVolume_Removed)), nil, G_CONNECT_AFTER); end; end; procedure Finalize; begin if Assigned(VolumeMonitor) then begin FreeAndNil(Observers); g_object_unref(VolumeMonitor); VolumeMonitor:= nil; end; end; procedure FinishEject(source_object: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; var AError: PGError = nil; begin if not g_mount_eject_with_operation_finish(PGMount(source_object), res, @AError) then begin msgError(nil, AError^.message); g_error_free(AError); end; g_object_unref(source_object); end; function Eject(const Path: String): Boolean; var AFile: PGFile; AMount: PGMount; begin AFile:= g_file_new_for_path(Pgchar(Path)); AMount:= g_file_find_enclosing_mount(AFile, nil, nil); Result:= Assigned(AMount); if Result then begin g_mount_eject_with_operation(AMount, G_MOUNT_UNMOUNT_NONE, nil, nil, @FinishEject, nil); end; g_object_unref(PGObject(AFile)); end; procedure FinishUnmount(source_object: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; var AError: PGError = nil; begin if not g_mount_unmount_with_operation_finish(PGMount(source_object), res, @AError) then begin msgError(nil, AError^.message); g_error_free(AError); end; g_object_unref(source_object); end; function Unmount(const Path: String): Boolean; var AFile: PGFile; AMount: PGMount; begin AFile:= g_file_new_for_uri(Pgchar(Path)); AMount:= g_file_find_enclosing_mount(AFile, nil, nil); Result:= Assigned(AMount); if Result then begin g_mount_unmount_with_operation(AMount, G_MOUNT_UNMOUNT_NONE, nil, nil, @FinishUnmount, nil); end; g_object_unref(PGObject(AFile)); end; function EnumerateVolumes(DrivesList: TDrivesList): Boolean; var Drive: PDrive; GMount: PGMount; GVolume: PGVolume; VolumeList: PGList; VolumeTemp: PGList; begin Result:= False; VolumeList:= g_volume_monitor_get_volumes(VolumeMonitor); if Assigned(VolumeList) then begin Result:= True; VolumeTemp:= VolumeList; while Assigned(VolumeTemp) do begin GVolume:= VolumeTemp^.data; Drive:= VolumeToDrive(GVolume); if (Assigned(Drive)) then begin DrivesList.Add(Drive); // WriteLn('GVolume: ', Drive^.Path); end; g_object_unref(PGObject(GVolume)); VolumeTemp:= VolumeTemp^.next; end; g_list_free(VolumeList); end; VolumeList:= g_volume_monitor_get_mounts(VolumeMonitor); if Assigned(VolumeList) then begin Result:= True; VolumeTemp:= VolumeList; while Assigned(VolumeTemp) do begin GMount:= VolumeTemp^.data; Drive:= MountToDrive(GMount); if (Assigned(Drive)) then begin DrivesList.Add(Drive); // WriteLn('GMount: ', Drive^.Path); end; g_object_unref(PGObject(GMount)); VolumeTemp:= VolumeTemp^.next; end; g_list_free(VolumeList); end; end; end. doublecmd-1.1.30/src/platform/unix/ugtk2fixcursorpos.pas0000644000175000001440000001663515104114162022426 0ustar alexxusers{ Workaround: http://doublecmd.sourceforge.net/mantisbt/view.php?id=1473 } unit uGtk2FixCursorPos; {$mode objfpc}{$H+} interface uses LCLVersion; implementation uses Classes, SysUtils, Gtk2WSStdCtrls, Gtk2, Gtk2Def, Gtk2WSSpin, Gtk2Proc, WSLCLClasses, StdCtrls, Glib2, Gtk2Globals, Spin, LMessages, LazUTF8, Gdk2, Controls, ExtCtrls, WSExtCtrls, Gtk2WSExtCtrls, Graphics ; type { TGtk2WSCustomEditEx } TGtk2WSCustomEditEx = class(TGtk2WSCustomEdit) published class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); override; end; { TGtk2WSCustomFloatSpinEditEx } TGtk2WSCustomFloatSpinEditEx = class(TGtk2WSCustomFloatSpinEdit) protected class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); override; end; { TGtk2WSCustomPanelEx } TGtk2WSCustomPanelEx = class(TGtk2WSCustomPanel) published class function GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; override; end; procedure gtkcuttoclip_ex(widget: PGtkWidget; {%H-}data: gPointer); cdecl; var Info: PWidgetInfo; begin if (Widget <> nil) and (GTK_IS_ENTRY(Widget)) then begin Info := GetWidgetInfo(Widget); Include(Info^.Flags, wwiInvalidEvent); end; end; procedure gtkchanged_editbox_backspace_ex(widget: PGtkWidget; {%H-}data: gPointer); cdecl; var Info: PWidgetInfo; begin if (Widget <> nil) and (GTK_IS_ENTRY(Widget)) then begin Info := GetWidgetInfo(Widget); Include(Info^.Flags, wwiInvalidEvent); end; end; procedure gtkchanged_editbox_ex(widget: PGtkWidget; {%H-}data: gPointer); cdecl; forward; function GtkEntryDelayCursorPos(AGtkWidget: Pointer): GBoolean; cdecl; var Info: PWidgetInfo; begin Result := AGtkWidget <> nil; if AGtkWidget <> nil then begin g_idle_remove_by_data(AGtkWidget); Info := GetWidgetInfo(AGtkWidget); if Info <> nil then gtkchanged_editbox_ex(PGtkWidget(AGtkWidget), Info^.LCLObject); end; end; procedure gtkchanged_editbox_ex(widget: PGtkWidget; {%H-}data: gPointer); cdecl; var Mess : TLMessage; GStart, GEnd: gint; Info: PWidgetInfo; EntryText: PgChar; NeedCursorCheck: Boolean; begin if LockOnChange(PgtkObject(Widget),0)>0 then exit; {$IFDEF EventTrace} EventTrace('changed_editbox', data); {$ENDIF} NeedCursorCheck := False; if GTK_IS_ENTRY(Widget) and (not (TObject(data) is TCustomFloatSpinEdit)) then begin // lcl-do-not-change-selection comes from gtkKeyPress. // Only floatspinedit sets that data, so default is nil. issue #18679 if g_object_get_data(PGObject(Widget),'lcl-do-not-change-selection') = nil then begin {cheat GtkEditable to update cursor pos in gtkEntry. issue #7243} gtk_editable_get_selection_bounds(PGtkEditable(Widget), @GStart, @GEnd); EntryText := gtk_entry_get_text(PGtkEntry(Widget)); if (GStart = GEnd) and (UTF8Length(EntryText) >= PGtkEntry(Widget)^.text_length) then begin Info := GetWidgetInfo(Widget); {do not update position if backspace or delete pressed} if wwiInvalidEvent in Info^.Flags then begin Exclude(Info^.Flags, wwiInvalidEvent); {take care of pasted data since it does not return proper cursor pos.} // issue #7243 if g_object_get_data(PGObject(Widget),'lcl-delay-cm_textchaged') <> nil then begin g_object_set_data(PGObject(Widget),'lcl-delay-cm_textchaged',nil); g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',Widget); g_idle_add(@GtkEntryDelayCursorPos, Widget); exit; end; end else begin // if we change selstart in OnChange event new cursor pos need to // be postponed in TGtk2WSCustomEdit.SetSelStart NeedCursorCheck := True; if g_object_get_data(PGObject(Widget),'lcl-gtkentry-pasted-data') <> nil then begin g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',nil); gtk_editable_set_position(PGtkEditable(Widget), GStart); end else begin //NeedCursorCheck := True; g_object_set_data(PGObject(Widget),'lcl-gtkentry-pasted-data',Widget); g_idle_add(@GtkEntryDelayCursorPos, Widget); exit; end; end; end; end else g_object_set_data(PGObject(Widget),'lcl-do-not-change-selection', nil); end; if NeedCursorCheck then LockOnChange(PgtkObject(Widget), +1); FillByte(Mess{%H-},SizeOf(Mess),0); Mess.Msg := CM_TEXTCHANGED; DeliverMessage(Data, Mess); if NeedCursorCheck then LockOnChange(PgtkObject(Widget), -1); end; function gtkMotionNotifyEx(Widget:PGTKWidget; Event: PGDKEventMotion; Data: gPointer): GBoolean; cdecl; var ACtl: TWinControl; begin // Call inherited function Result:= gtkMotionNotify(Widget, Event, Data); ACtl:= TWinControl(Data); if (ACtl is TCustomEdit) then begin if (Event^.x < 0) or (Event^.y < 0) or (Event^.x > ACtl.Width) or (Event^.y > ACtl.Height) then Result:= CallBackDefaultReturn; end; end; { TGtk2WSCustomPanelEx } class function TGtk2WSCustomPanelEx.GetDefaultColor(const AControl: TControl; const ADefaultColorType: TDefaultColorType): TColor; const DefColors: array[TDefaultColorType] of TColor = ( { dctBrush } clForm, { dctFont } clBtnText ); begin Result := DefColors[ADefaultColorType]; end; { TGtk2WSCustomEditEx } class procedure TGtk2WSCustomEditEx.SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); var gObject: PGTKObject; ALCLObject: TObject; begin inherited SetCallbacks(AGtkWidget, AWidgetInfo); ALCLObject:= AWidgetInfo^.LCLObject; // gObject if AGtkWidget = nil then gObject := ObjectToGTKObject(ALCLObject) else gObject := PGtkObject(AGtkWidget); if gObject = nil then Exit; if GTK_IS_ENTRY(gObject) then begin if ALCLObject is TCustomFloatSpinEdit then ConnectSignal(gObject, 'value-changed', @gtkchanged_editbox_ex, ALCLObject) else begin ConnectSignal(gObject, 'changed', @gtkchanged_editbox_ex, ALCLObject); end; ConnectSignal(gObject, 'cut-clipboard', @gtkcuttoclip_ex, ALCLObject); g_signal_handlers_disconnect_by_func(gObject, @gtkchanged_editbox, ALCLObject); ConnectSignal(gObject, 'backspace', @gtkchanged_editbox_backspace_ex, ALCLObject); ConnectSignal(gObject, 'delete-from-cursor', @gtkchanged_editbox_delete, ALCLObject); g_signal_handlers_disconnect_by_func(gObject, @GTKMotionNotify, ALCLObject); ConnectSignal(gObject, 'motion-notify-event', @GTKMotionNotifyEx, ALCLObject, GDK_POINTER_MOTION_HINT_MASK or GDK_POINTER_MOTION_MASK); end; end; { TGtk2WSCustomFloatSpinEditEx } class procedure TGtk2WSCustomFloatSpinEditEx.SetCallbacks( const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); begin TGtk2WSCustomEditEx.SetCallbacks(AGtkWidget, AWidgetInfo); end; procedure Initialize; begin // Replace TCustomEdit widgetset class with TCustomEdit.Create(nil) do Free; RegisterWSComponent(TCustomEdit, TGtk2WSCustomEditEx); // Replace TCustomFloatSpinEdit widgetset class with TCustomFloatSpinEdit.Create(nil) do Free; RegisterWSComponent(TCustomFloatSpinEdit, TGtk2WSCustomFloatSpinEditEx); // Replace TCustomPanel widgetset class WSExtCtrls.RegisterCustomPanel; RegisterWSComponent(TCustomPanel, TGtk2WSCustomPanelEx); end; initialization Initialize; end. doublecmd-1.1.30/src/platform/unix/ugio.pas0000644000175000001440000002152515104114162017640 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to GIO - GLib Input, Output and Streaming Library This unit loads all libraries dynamically so it can work without it Copyright (C) 2011-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGio; {$mode delphi} {$assertions on} interface uses Classes, SysUtils, DCBasicTypes, uGio2; function GioOpen(const Uri: String): Boolean; function GioNewFile(const Address: String): PGFile; function GioGetIconTheme(const Scheme: String): String; function GioFileGetIcon(const FileName: String): String; function GioMimeGetIcon(const MimeType: String): String; function GioGetSetting(const Scheme, Key: String): String; function GioFileGetEmblem(const FileName: String): String; function GioMimeTypeGetActions(const MimeType: String): TDynamicStringArray; function GioGetMimeType(const FileName: String; MaxExtent: LongWord): String; var HasGio: Boolean = True; implementation uses StrUtils, LazLogger, DCStrUtils, DCClassesUtf8, uGlib2, uGObject2; function GioOpen(const Uri: String): Boolean; var AFile: PGFile; AFileList: TGList; AppInfo: PGAppInfo; begin Result:= False; AFileList.next:= nil; AFileList.prev:= nil; if not HasGio then Exit; AFile:= GioNewFile(Pgchar(Uri)); try AppInfo:= g_file_query_default_handler(AFile, nil, nil); if (AppInfo = nil) then Exit; if g_file_is_native(AFile) then begin AFileList.data:= AFile; Result:= g_app_info_launch (AppInfo, @AFileList, nil, nil); end else begin AFileList.data:= Pgchar(Uri); Result:= g_app_info_launch_uris (AppInfo, @AFileList, nil, nil); end; g_object_unref(PGObject(AppInfo)); finally g_object_unref(PGObject(AFile)); end; end; function GioNewFile(const Address: String): PGFile; var URI: Pgchar; Index: Integer; begin Index:= Pos('://', Address); if Index = 0 then Result:= g_file_new_for_path(Pgchar(Address)) else begin Index:= PosEx('/', Address, Index + 3); if (Index = 0) or (Index = Length(Address)) then Result:= g_file_new_for_uri(Pgchar(Address)) else begin URI:= g_uri_escape_string(Pgchar(Address) + Index, ':/', True); if (URI = nil) then Result:= g_file_new_for_uri(Pgchar(Address)) else begin Result:= g_file_new_for_uri(Pgchar(Copy(Address, 1, Index) + URI)); g_free(URI); end; end; end; end; function GioGetSetting(const Scheme, Key: String): String; var Theme: Pgchar; Settings: PGSettings; SettingsSchema: PGSettingsSchema; SchemaSource: PGSettingsSchemaSource; begin Result:= EmptyStr; if not HasGio then Exit; SchemaSource:= g_settings_schema_source_get_default(); if Assigned(SchemaSource) then begin SettingsSchema:= g_settings_schema_source_lookup(SchemaSource, Pgchar(Scheme), False); if Assigned(SettingsSchema) then begin Settings:= g_settings_new(Pgchar(Scheme)); if Assigned(Settings) then begin Theme:= g_settings_get_string(Settings, Pgchar(Key)); if Assigned(Theme) then begin Result:= StrPas(Theme); g_free(Theme); end; g_object_unref(Settings); end; g_object_unref(PGObject(SettingsSchema)); end; g_object_unref(PGObject(SchemaSource)); end; end; function GioGetIconTheme(const Scheme: String): String; begin Result:= GioGetSetting(Scheme, 'icon-theme'); end; function GioGetIconName(GIcon: PGIcon): String; var AIconList: PPgchar; begin if g_type_check_instance_is_a(PGTypeInstance(GIcon), g_themed_icon_get_type()) then begin AIconList:= g_themed_icon_get_names(PGThemedIcon(GIcon)); if Assigned(AIconList) then Result:= AIconList[0]; end; end; function GioMimeGetIcon(const MimeType: String): String; var GIcon: PGIcon; ContentType: Pgchar; begin Result:= EmptyStr; ContentType:= g_content_type_from_mime_type(Pgchar(MimeType)); if Assigned(ContentType) then begin GIcon:= g_content_type_get_icon(ContentType); if Assigned(GIcon) then begin Result:= GioGetIconName(GIcon); g_object_unref(PGObject(GIcon)); end; g_free(ContentType); end; end; function GioFileGetIcon(const FileName: String): String; var GFile: PGFile; GIcon: PGIcon; GFileInfo: PGFileInfo; begin Result:= EmptyStr; GFile:= GioNewFile(Pgchar(FileName)); GFileInfo:= g_file_query_info(GFile, FILE_ATTRIBUTE_STANDARD_ICON, 0, nil, nil); if Assigned(GFileInfo) then begin GIcon:= g_file_info_get_icon(GFileInfo); Result:= GioGetIconName(GIcon); g_object_unref(GFileInfo); end; g_object_unref(PGObject(GFile)); end; function GioFileGetEmblem(const FileName: String): String; const FILE_ATTRIBUTE_METADATA_EMBLEMS = 'metadata::emblems'; var GFile: PGFile; AIconList: PPgchar; GFileInfo: PGFileInfo; begin Result:= EmptyStr; GFile:= GioNewFile(Pgchar(FileName)); GFileInfo:= g_file_query_info(GFile, FILE_ATTRIBUTE_METADATA_EMBLEMS, 0, nil, nil); if Assigned(GFileInfo) then begin AIconList:= g_file_info_get_attribute_stringv(GFileInfo, FILE_ATTRIBUTE_METADATA_EMBLEMS); if Assigned(AIconList) then Result:= AIconList[0]; g_object_unref(GFileInfo); end; g_object_unref(PGObject(GFile)); end; function GioMimeTypeGetActions(const MimeType: String): TDynamicStringArray; var AppList, TempList: PGList; DesktopFile: PAnsiChar; begin AppList:= g_app_info_get_all_for_type(PAnsiChar(MimeType)); if Assigned(AppList) then begin TempList:= AppList; repeat DesktopFile:= g_app_info_get_id(TempList^.data); if Assigned(DesktopFile) then AddString(Result, DesktopFile); g_object_unref(TempList^.data); TempList:= TempList^.next; until TempList = nil; g_list_free(AppList); end; end; function GioGetMimeType(const FileName: String; MaxExtent: LongWord): String; var Size: gsize; MimeType: Pgchar; Uncertain: gboolean; Buffer: array of Byte; FileStream: TFileStreamEx; begin Result:= EmptyStr; // First check by file name (fast) MimeType:= g_content_type_guess(Pgchar(FileName), nil, 0, @Uncertain); if Assigned(MimeType) then begin Result:= StrPas(MimeType); g_free(MimeType); end; // Second check by file content (slow) if Uncertain then begin if MaxExtent = 0 then begin if Length(Result) = 0 then Result:= 'text/plain'; end else begin SetLength(Buffer, MaxExtent); try FileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try Size:= FileStream.Read(Buffer[0], MaxExtent); finally FileStream.Free; end; MimeType:= g_content_type_guess(Pgchar(FileName), @Buffer[0], Size, @Uncertain); if Assigned(MimeType) then begin Result:= StrPas(MimeType); g_free(MimeType); end; except // Skip end; end; end; end; procedure Initialize; begin try Assert(@g_file_is_native <> nil, 'g_file_is_native'); Assert(@g_file_new_for_commandline_arg <> nil, 'g_file_new_for_commandline_arg'); Assert(@g_file_query_default_handler <> nil, 'g_file_query_default_handler'); Assert(@g_file_query_info <> nil, 'g_file_query_info'); Assert(@g_file_info_get_icon <> nil, 'g_file_info_get_icon'); Assert(@g_themed_icon_get_type <> nil, 'g_themed_icon_get_type'); Assert(@g_themed_icon_get_names <> nil, 'g_themed_icon_get_names'); Assert(@g_app_info_launch <> nil, 'g_app_info_launch'); Assert(@g_app_info_launch_uris <> nil, 'g_app_info_launch_uris'); Assert(@g_app_info_get_all_for_type <> nil, 'g_app_info_get_all_for_type'); Assert(@g_app_info_get_id <> nil, 'g_app_info_get_id'); Assert(@g_settings_new <> nil, 'g_settings_new'); Assert(@g_settings_get_string <> nil, 'g_settings_get_string'); Assert(@g_settings_schema_source_get_default <> nil, 'g_settings_schema_source_get_default'); Assert(@g_settings_schema_source_lookup <> nil, 'g_settings_schema_source_lookup'); Assert(@g_content_type_guess <> nil, 'g_content_type_guess'); except on E: Exception do begin HasGio:= False; DebugLn(E.Message); end; end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/unix/ufontconfig.pas0000644000175000001440000000365615104114162021223 0ustar alexxusersunit uFontConfig; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes; type TFcBool = cint; PFcChar8 = PAnsiChar; PFcConfig = ^TFcConfig; TFcConfig = record end; PFcPattern = ^TFcPattern; TFcPattern = record end; TFcMatchKind = (FcMatchPattern, FcMatchFont, FcMatchScan); PFcResult = ^TFcResult; TFcResult = (FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId, FcResultOutOfMemory); var FcStrFree: procedure(s: PFcChar8); cdecl; FcPatternDestroy: procedure(p: PFcPattern); cdecl; FcNameParse: function(name: PFcChar8): PFcPattern; cdecl; FcDefaultSubstitute: procedure(pattern: PFcPattern); cdecl; FcPatternFormat: function(pat: PFcPattern; format: PFcChar8): PFcChar8; cdecl; FcFontMatch: function(config: PFcConfig; p: PFcPattern; result: PFcResult): PFcPattern; cdecl; FcConfigSubstitute: function(config: PFcConfig; p: PFcPattern; kind: TFcMatchKind): TFcBool; cdecl; function LoadFontConfigLib(const ALibName: String): Boolean; procedure UnLoadFontConfigLib; implementation uses DCOSUtils, uDebug; var hLib: TLibHandle; function LoadFontConfigLib(const ALibName: String): Boolean; begin hLib:= SafeLoadLibrary(ALibName); Result:= (hLib <> NilHandle); if Result then try FcStrFree:= SafeGetProcAddress(hLib, 'FcStrFree'); FcNameParse:= SafeGetProcAddress(hLib, 'FcNameParse'); FcFontMatch:= SafeGetProcAddress(hLib, 'FcFontMatch'); FcPatternFormat:= SafeGetProcAddress(hLib, 'FcPatternFormat'); FcPatternDestroy:= SafeGetProcAddress(hLib, 'FcPatternDestroy'); FcConfigSubstitute:= SafeGetProcAddress(hLib, 'FcConfigSubstitute'); FcDefaultSubstitute:= SafeGetProcAddress(hLib, 'FcDefaultSubstitute'); except on E: Exception do begin Result:= False; DCDebug(E.Message); UnLoadFontConfigLib; end; end; end; procedure UnLoadFontConfigLib; begin if (hLib <> NilHandle) then FreeLibrary(hLib); end; end. doublecmd-1.1.30/src/platform/unix/ufolderthumb.pas0000644000175000001440000001223115104114162021367 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple folder thumbnail provider Copyright (C) 2019-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFolderThumb; {$mode objfpc}{$H+} interface implementation uses Math, Classes, SysUtils, Graphics, IntfGraphics, GraphType, BaseUnix, Unix, Types, FPImage, DCClassesUtf8, DCOSUtils, DCStrUtils, DCConvertEncoding, LCLVersion, uThumbnails, uPixMapManager, uReSample, uGraphics; var ProviderIndex: Integer; function GetPreviewScaleSize(aSize: Types.TSize; aWidth, aHeight: Integer): Types.TSize; begin if aWidth > aHeight then begin Result.cx:= aSize.cx; Result.cy:= Result.cx * aHeight div aWidth; if Result.cy > aSize.cy then begin Result.cy:= aSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end else begin Result.cy:= aSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end; function GetThumbnail(const aFileName: String; aSize: Types.TSize): Graphics.TBitmap; var AExt: String; DirPtr: pDir; X, Y: Integer; OBitmap: TBitmap; InnerSize: TSize; sFileName: String; PtrDirEnt: pDirent; ABitmap: TBitmap = nil; Picture: TPicture = nil; FileStream: TFileStreamEx; Source, Target: TLazIntfImage; begin Result:= nil; if FPS_ISDIR(mbFileGetAttrNoLinks(aFileName)) then begin // Create half size inner icon InnerSize.cx:= aSize.cx * 50 div 100; InnerSize.cy:= aSize.cy * 50 div 100; DirPtr:= fpOpenDir(PAnsiChar(CeUtf8ToSys(aFileName))); if Assigned(DirPtr) then try Picture:= TPicture.Create; PtrDirEnt:= fpReadDir(DirPtr^); while PtrDirEnt <> nil do begin if (PtrDirEnt^.d_name <> '..') and (PtrDirEnt^.d_name <> '.') then begin sFileName:= IncludeTrailingBackslash(aFileName); sFileName+= CeSysToUtf8(PtrDirEnt^.d_name); // Try to create thumnail using providers ABitmap:= TThumbnailManager.GetPreviewFromProvider(sFileName, InnerSize, ProviderIndex); if Assigned(ABitmap) then Break; // Create thumnail for image files AExt:= ExtractOnlyFileExt(sFileName); if GetGraphicClassForFileExtension(AExt) <> nil then try FileStream:= TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone or fmOpenNoATime); try Picture.LoadFromStreamWithFileExt(FileStream, AExt); ABitmap:= TBitmap.Create; ABitmap.Assign(Picture.Graphic); Break; finally FreeAndNil(FileStream); end; except // Ignore end; end; PtrDirEnt:= fpReadDir(DirPtr^); end; finally fpCloseDir(DirPtr^); Picture.Free; end; if Assigned(ABitmap) then begin Target:= TLazIntfImage.Create(aSize.cx, aSize.cy, [riqfRGB, riqfAlpha]); try {$if lcl_fullversion < 2020000} Target.CreateData; {$endif} Target.FillPixels(colTransparent); // Draw default folder icon Result:= PixMapManager.GetThemeIcon('folder', Min(aSize.cx, aSize.cy)); Source:= TLazIntfImage.Create(Result.RawImage, False); try X:= (aSize.cx - Result.Width) div 2; Y:= (aSize.cy - Result.Height) div 2; Target.CopyPixels(Source, X, Y); finally Source.Free; end; // Scale folder inner icon if (ABitmap.Width > InnerSize.cx) or (ABitmap.Height > InnerSize.cy) then begin InnerSize:= GetPreviewScaleSize(InnerSize, ABitmap.Width, ABitmap.Height); OBitmap:= TBitmap.Create; try OBitmap.SetSize(InnerSize.cx, InnerSize.cy); Stretch(ABitmap, OBitmap, ResampleFilters[2].Filter, ResampleFilters[2].Width); finally ABitmap.Free; ABitmap:= OBitmap; end; end; // Draw folder inner icon Source:= TLazIntfImage.Create(ABitmap.RawImage, False); try X:= (aSize.cx - ABitmap.Width) div 2; Y:= (aSize.cy - ABitmap.Height) div 2; Target.AlphaBlend(Source, nil, X, Y); finally Source.Free; end; BitmapAssign(Result, Target); finally Target.Free; end; ABitmap.Free; end; end; end; initialization ProviderIndex:= TThumbnailManager.RegisterProvider(@GetThumbnail); end. doublecmd-1.1.30/src/platform/unix/ufilemanager.pas0000644000175000001440000000723515104114162021336 0ustar alexxusersunit uFileManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile; function ShowItemProperties(const Files: TFiles): Boolean; implementation uses DBus, URIParser, uDebug; const DBUS_TIMEOUT_INFINITE = Integer($7fffffff); const FileManagerAddress = 'org.freedesktop.FileManager1'; FileManagerObjectPath = '/org/freedesktop/FileManager1'; FileManagerInterface = 'org.freedesktop.FileManager1'; var DBusError: DBus.DBusError; DBusConn: DBus.PDBusConnection; FileManagerAvailable: Boolean = True; procedure Print(const sMessage: String); begin DCDebug('FileManager: ', sMessage); end; function CheckError(const sMessage: String; pError: PDBusError): Boolean; begin if (dbus_error_is_set(pError) = 0) then Result:= False else begin Print(sMessage + ': ' + pError^.name + ' ' + pError^.message); dbus_error_free(pError); Result:= True; end; end; function SendMessage(AMessage: PDBusMessage): Boolean; var AReply: PDBusMessage; begin dbus_error_init (@DBusError); AReply := dbus_connection_send_with_reply_and_block(DBusConn, AMessage, DBUS_TIMEOUT_INFINITE, @DBusError); if CheckError('Error sending message', @DBusError) then Result:= False else if Assigned(AReply) then begin Result:= True; dbus_message_unref(AReply); end else begin Result:= False; Print('Reply not received'); end; end; function ShowItemProperties(const Files: TFiles): Boolean; var AFile: String; Index: Integer; StringPtr: PAnsiChar; AMessage: PDBusMessage; argsIter, arrayIter: DBusMessageIter; begin if (DBusConn = nil) then Exit(False); if (not FileManagerAvailable) then Exit(False); { } AMessage:= dbus_message_new_method_call(FileManagerAddress, FileManagerObjectPath, FileManagerInterface, 'ShowItemProperties'); if not Assigned(AMessage) then begin Print('Cannot create message "FilesystemMount"'); Result:= False; end else begin dbus_message_iter_init_append(AMessage, @argsIter); Result:= (dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, PAnsiChar(DBUS_TYPE_STRING_AS_STRING), @arrayIter) <> 0); if Result then begin for Index := 0 to Files.Count - 1 do begin AFile:= FilenameToURI(Files[Index].FullPath); StringPtr:= PAnsiChar(AFile); if dbus_message_iter_append_basic(@arrayIter, DBUS_TYPE_STRING, @StringPtr) = 0 then begin Result:= False; Break; end; end; if dbus_message_iter_close_container(@argsIter, @arrayIter) = 0 then Result:= False; end; if Result then begin StringPtr:= ''; Result:= (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_STRING, @StringPtr) <> 0); end; if not Result then begin Print('Cannot append arguments'); end else begin Result:= SendMessage(AMessage); end; dbus_message_unref(AMessage); end; FileManagerAvailable:= Result; end; procedure Initialize; begin dbus_error_init(@DBusError); DBusConn:= dbus_bus_get(DBUS_BUS_SESSION, @DBusError); if CheckError('Cannot acquire connection to DBUS session bus', @DBusError) then Exit; if Assigned(DBusConn) then begin dbus_connection_set_exit_on_disconnect(DBusConn, 0); end; end; procedure Finalize; begin if Assigned(DBusConn) then dbus_connection_unref(DBusConn); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/udefaultterminal.pas0000644000175000001440000001255515104114162022245 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Auto-detect default terminal emulator Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see . } unit uDefaultTerminal; {$mode objfpc}{$H+} interface uses Classes, SysUtils; implementation {$IF DEFINED(DARWIN)} uses uOSUtils, uMyDarwin; procedure Initialize; var Cmd: String; begin Cmd:= getMacOSDefaultTerminal; if Length(Cmd) > 0 then begin RunTermCmd:= Cmd; end; end; {$ELSE} uses DCOSUtils, DCClassesUtf8, uMyUnix, uGio, uOSUtils, uSysFolders; const TERM_KDE = 'konsole'; TERM_LXQT = 'qterminal'; TERM_LXDE = 'lxterminal'; TERM_MATE = 'mate-terminal'; TERM_XFCE = 'xfce4-terminal'; TERM_GNOME = 'gnome-terminal'; TERM_DEBIAN = 'x-terminal-emulator'; function GetPathTerminal(const Exe: String; var Cmd: String): Boolean; begin Result:= ExecutableInSystemPath(Exe); if Result then Cmd:= Exe; end; function GetKdeTerminal(var Cmd, Params: String): Boolean; const kde5Config = '/.kde/share/config/kdeglobals'; kde4Config = '/.kde4/share/config/kdeglobals'; var I: Integer; S: String = ''; iniCfg: TIniFileEx = nil; kdeConfig: array[1..2] of String = (kde4Config, kde5Config); begin for I:= Low(kdeConfig) to High(kdeConfig) do begin if (Length(S) = 0) and mbFileExists(GetHomeDir + kdeConfig[I]) then try iniCfg:= TIniFileEx.Create(GetHomeDir + kdeConfig[I]); try S:= iniCfg.ReadString('General', 'TerminalApplication', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; Params:= EmptyStr; Result:= Length(S) > 0; if not Result then begin Result:= GetPathTerminal(TERM_KDE, S); end; if Result then Cmd:= S; end; function GetXfceTerminal(var Cmd, Params: String): Boolean; const xfceConfig = '/.config/xfce4/helpers.rc'; var S: String = ''; FileName: String; begin FileName:= GetHomeDir + xfceConfig; if mbFileExists(FileName) then begin with TStringListEx.Create do try try LoadFromFile(FileName); S:= Values['TerminalEmulator']; except // Skip end; finally Free; end; end; Result:= (Length(S) > 0); if not Result then begin Result:= GetPathTerminal(TERM_XFCE, S); end; if (S = TERM_XFCE) then begin Params:= '-x'; end; if Result then Cmd:= S; end; function GetLxdeTerminal(var Cmd, Params: String): Boolean; begin Params:= EmptyStr; Result:= GetPathTerminal(TERM_LXDE, Cmd); end; function GetLxqtTerminal(var Cmd, Params: String): Boolean; begin Params:= EmptyStr; Result:= GetPathTerminal(TERM_LXQT, Cmd); end; function GetGioTerminal(const Scheme: String; var Cmd, Params: String): Boolean; begin Cmd:= GioGetSetting(Scheme, 'exec'); Params:= GioGetSetting(Scheme, 'exec-arg'); Result:= Length(Cmd) > 0; end; function GetGnomeTerminal(var Cmd, Params: String): Boolean; begin Result:= GetGioTerminal('org.gnome.desktop.default-applications.terminal', Cmd, Params); if not Result then begin Params:= '-x'; Result:= GetPathTerminal(TERM_GNOME, Cmd); end; end; function GetMateTerminal(var Cmd, Params: String): Boolean; begin Result:= GetGioTerminal('org.mate.applications-terminal', Cmd, Params); if not Result then begin Params:= '-x'; Result:= GetPathTerminal(TERM_MATE, Cmd); end; end; function GetCinnamonTerminal(var Cmd, Params: String): Boolean; begin Result:= GetGioTerminal('org.cinnamon.desktop.default-applications.terminal', Cmd, Params); if not Result then begin Params:= '-x'; Result:= GetPathTerminal(TERM_GNOME, Cmd); end; end; function GetDefaultTerminal(var Cmd, Params: String): Boolean; begin if mbFileExists('/etc/debian_version') then begin Cmd:= TERM_DEBIAN; Exit(True); end; case DesktopEnv of DE_UNKNOWN: Result:= False; DE_KDE: Result:= GetKdeTerminal(Cmd, Params); DE_XFCE: Result:= GetXfceTerminal(Cmd, Params); DE_LXDE: Result:= GetLxdeTerminal(Cmd, Params); DE_LXQT: Result:= GetLxqtTerminal(Cmd, Params); DE_MATE: Result:= GetMateTerminal(Cmd, Params); DE_GNOME: Result:= GetGnomeTerminal(Cmd, Params); DE_CINNAMON: Result:= GetCinnamonTerminal(Cmd, Params); end; end; procedure Initialize; var Cmd: String = ''; Params: String = ''; begin if GetDefaultTerminal(Cmd, Params) then begin RunTermCmd:= Cmd; RunInTermCloseCmd:= Cmd; RunInTermStayOpenCmd:= Cmd; if (Length(Params) > 0) then begin RunInTermCloseParams:= StringReplace(RunInTermCloseParams, '-e', Params, []); RunInTermStayOpenParams:= StringReplace(RunInTermStayOpenParams, '-e', Params, []); end; end; end; {$ENDIF} initialization Initialize; end. doublecmd-1.1.30/src/platform/unix/udcreadwebp.pas0000644000175000001440000001057215104114162021162 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- WebP reader implementation (via libwebp library) Copyright (C) 2017-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uDCReadWebP; {$mode delphi} interface uses Classes, SysUtils, Graphics, FPImage; type { TDCReaderWebP } TDCReaderWebP = class (TFPCustomImageReader) protected function InternalCheck(Stream: TStream): Boolean; override; procedure InternalRead(Stream: TStream; Img: TFPCustomImage); override; end; { TWeppyImage } TWeppyImage = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: String; override; end; implementation uses InitC, DynLibs, IntfGraphics, GraphType, CTypes, DCOSUtils; procedure CFree(P: Pointer); cdecl; external clib name 'free'; var WebPFree: procedure(ptr: pointer); cdecl; WebPGetInfo: function(const data: pcuint8; data_size: csize_t; width: pcint; height: pcint): cint; cdecl; WebPDecodeRGBA: function(const data: pcuint8; data_size: csize_t; width: pcint; height: pcint): pcuint8; cdecl; type PRGBA = ^TRGBA; TRGBA = packed record Red, Green, Blue, Alpha: Byte; end; { TDCReaderWebP } function TDCReaderWebP.InternalCheck(Stream: TStream): Boolean; var MemoryStream: TMemoryStream; begin Result:= Stream is TMemoryStream; if Result then begin MemoryStream:= TMemoryStream(Stream); Result:= WebPGetInfo(MemoryStream.Memory, MemoryStream.Size, nil, nil) <> 0; end; end; procedure TDCReaderWebP.InternalRead(Stream: TStream; Img: TFPCustomImage); var Data: Pointer; ImageData: PRGBA; AWidth, AHeight: cint; Desc: TRawImageDescription; MemoryStream: TMemoryStream; begin MemoryStream:= Stream as TMemoryStream; Data:= WebPDecodeRGBA(MemoryStream.Memory, MemoryStream.Size, @AWidth, @AHeight); if Assigned(Data) then begin ImageData:= PRGBA(Data); // Set output image size Img.SetSize(AWidth, AHeight); // Initialize image description Desc.Init_BPP32_R8G8B8A8_BIO_TTB(Img.Width, Img.Height); TLazIntfImage(Img).DataDescription:= Desc; // Copy image data Move(ImageData^, TLazIntfImage(Img).PixelData^, Img.Width * Img.Height * SizeOf(TRGBA)); if Assigned(WebPFree) then WebPFree(Data) else begin CFree(Data); end; end; end; { TWeppyImage } class function TWeppyImage.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderWebP; end; class function TWeppyImage.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TWeppyImage.GetFileExtensions: String; begin Result:= 'webp'; end; const webplib = 'libwebp.so.%d'; var libwebp: TLibHandle; procedure Initialize; var Version: Integer; LibraryName: AnsiString; begin for Version:= 7 downto 5 do begin LibraryName:= Format(webplib, [Version]); libwebp:= LoadLibrary(LibraryName); if (libwebp <> NilHandle) then Break; end; if (libwebp <> NilHandle) then try @WebPFree:= GetProcAddress(libwebp, 'WebPFree'); @WebPGetInfo:= SafeGetProcAddress(libwebp, 'WebPGetInfo'); @WebPDecodeRGBA:= SafeGetProcAddress(libwebp, 'WebPDecodeRGBA'); // Register image handler and format ImageHandlers.RegisterImageReader('Weppy Image', 'WEBP', TDCReaderWebP); TPicture.RegisterFileFormat('webp', 'Weppy Image', TWeppyImage); except // Skip end; end; initialization Initialize; finalization if (libwebp <> NilHandle) then FreeLibrary(libwebp); end. doublecmd-1.1.30/src/platform/unix/uaudiothumb.pas0000644000175000001440000000732515104114162021225 0ustar alexxusersunit uAudioThumb; {$mode objfpc}{$H+} interface uses Classes, SysUtils; implementation uses Graphics, Types, DCClassesUtf8, uThumbnails, uMasks, uGraphics; var MaskList: TMaskList = nil; type TFrameHeader = packed record ID: array [1..4] of AnsiChar; Size: Integer; Flags: UInt16; end; TTagHeader = packed record ID: array [1..3] of AnsiChar; Version: Byte; Revision: Byte; Flags: Byte; Size: array [1..4] of Byte; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var AInc: Byte; FSize: Int64; AData: UInt16; Index: Integer; AChar: AnsiChar; ALength: Integer; ATag: TTagHeader; AFile: TFileStreamEx; AFrame: TFrameHeader; ABitmap: TRasterImage; AStream: TMemoryStream; AMimeType: array[Byte] of AnsiChar; begin Result:= nil; if MaskList.Matches(aFileName) then begin try AFile:= TFileStreamEx.Create(aFileName, fmOpenRead or fmShareDenyNone); try AFile.ReadBuffer(ATag, SizeOf(TTagHeader)); if (ATag.ID = 'ID3') and (ATag.Version >= 3) then begin FSize := (ATag.Size[1] shl 21) or (ATag.Size[2] shl 14) + (ATag.Size[3] shl 7 ) or (ATag.Size[4]) + 10; if ATag.Flags and $10 = $10 then Inc(FSize, 10); while (AFile.Position < FSize) do begin AFile.ReadBuffer(AFrame, SizeOf(TFrameHeader)); if not (AFrame.ID[1] in ['A'..'Z']) then Break; ALength:= BEtoN(AFrame.Size); if (AFrame.ID = 'APIC') then begin AStream:= TMemoryStream.Create; try AStream.SetSize(ALength); AFile.ReadBuffer(AStream.Memory^, ALength); // Text encoding case AStream.ReadByte of $01, $02: AInc:= 2; else AInc:= 1; end; // MIME type Index:= 0; repeat AChar:= Chr(AStream.ReadByte); AMimeType[Index]:= AChar; Inc(Index); until not ((AChar > #0) and (Index < High(Byte))); // Picture type AStream.ReadByte; // Description AData:= 0; repeat AStream.ReadBuffer(AData, AInc); until (AData = 0); // Picture data if (StrPos(AMimeType, 'image/') = nil) then begin AMimeType := 'image/' + AMimeType; end; if AMimeType = 'image/png' then begin ABitmap:= TPortableNetworkGraphic.Create; end else if AMimeType = 'image/jpeg' then begin ABitmap:= TJPEGImage.Create; end else begin ABitmap:= nil; end; if Assigned(ABitmap) then try ABitmap.LoadFromStream(AStream, ALength - AStream.Position); Result:= TBitmap.Create; BitmapAssign(Result, ABitmap); finally ABitmap.Free; end; finally AStream.Free; end; Break; end; AFile.Seek(ALength, soCurrent); end; end; finally AFile.Free; end; except // Ignore end; end; end; procedure Initialize; begin MaskList:= TMaskList.Create('*.mp3'); // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); end; initialization Initialize; finalization MaskList.Free; end. doublecmd-1.1.30/src/platform/unix/sdl2.pas0000644000175000001440000001145215104114162017537 0ustar alexxusersunit sdl2; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes; const SDL_INIT_AUDIO = $00000010; SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = $00000001; SDL_AUDIO_ALLOW_FORMAT_CHANGE = $00000002; SDL_AUDIO_ALLOW_CHANNELS_CHANGE = $00000004; SDL_AUDIO_ALLOW_SAMPLES_CHANGE = $00000008; SDL_AUDIO_ALLOW_ANY_CHANGE = (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE or SDL_AUDIO_ALLOW_FORMAT_CHANGE or SDL_AUDIO_ALLOW_CHANNELS_CHANGE or SDL_AUDIO_ALLOW_SAMPLES_CHANGE); type SDL_AudioFormat = type UInt16; SDL_AudioDeviceID = type UInt32; TSDL_RWops = record end; PSDL_RWops = ^TSDL_RWops; SDL_AudioCallback = procedure(userdata: Pointer; stream: PByte; len: cint); cdecl; SDL_AudioSpec = record freq: cint; format: SDL_AudioFormat; channels: UInt8; silence: UInt8; samples: UInt16; padding: UInt16; size: UInt32; callback: SDL_AudioCallback; userdata: Pointer; end; PSDL_AudioSpec = ^SDL_AudioSpec; TAudioData = record wavStart: PByte; wavLength: UInt32; wavSpec: SDL_AudioSpec; end; PAudioData = ^TAudioData; var SDL_InitSubSystem: function(flags: UInt32): cint; cdecl; SDL_Delay: procedure(ms: UInt32); cdecl; SDL_GetError: function(): PAnsiChar; cdecl; SDL_RWFromFile: function(const file_name: PAnsiChar; const mode: PAnsiChar): PSDL_RWops; cdecl; SDL_LoadWAV_RW: function(src: PSDL_RWops; freesrc: cint; spec: PSDL_AudioSpec; audio_buf: PPByte; audio_len: PUInt32): PSDL_AudioSpec; cdecl; SDL_FreeWAV: procedure(audio_buf: PByte); cdecl; SDL_QueueAudio: function(dev: SDL_AudioDeviceID; const data: Pointer; len: UInt32): cint; cdecl; SDL_GetQueuedAudioSize: function(dev: SDL_AudioDeviceID): UInt32; cdecl; SDL_OpenAudioDevice: function(const device: PAnsiChar; iscapture: cint; const desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec; allowed_changes: cint): SDL_AudioDeviceID; cdecl; SDL_PauseAudioDevice: procedure(dev: SDL_AudioDeviceID; pause_on: cint); cdecl; SDL_CloseAudioDevice: procedure(dev: SDL_AudioDeviceID); cdecl; function SDL_Initialize: Boolean; function SDL_Play(const FileName: String): Boolean; implementation uses DCOSUtils, LazLogger; function Play(Parameter: Pointer): PtrInt; var audioDevice: SDL_AudioDeviceID; AudioData: PAudioData absolute parameter; begin Result:= 0; try audioDevice:= SDL_OpenAudioDevice(nil, 0, @AudioData^.wavSpec, nil, SDL_AUDIO_ALLOW_ANY_CHANGE); if audioDevice = 0 then begin DebugLn('SDL_OpenAudioDevice: ', SDL_GetError()); Exit(-1); end; SDL_QueueAudio(audioDevice, AudioData^.wavStart, AudioData^.wavLength); SDL_PauseAudioDevice(audioDevice, 0); while SDL_GetQueuedAudioSize(audioDevice) > 0 do begin SDL_Delay(100); end; SDL_CloseAudioDevice(audioDevice); finally SDL_FreeWAV(AudioData^.wavStart); Dispose(AudioData); end; end; function SDL_Play(const FileName: String): Boolean; var RWops: PSDL_RWops; AudioData: PAudioData; begin RWops:= SDL_RWFromFile(PAnsiChar(FileName), 'rb'); if (RWops = nil) then begin DebugLn('SDL_RWFromFile: ', SDL_GetError()); Exit(False); end; New(AudioData); with AudioData^ do begin if (SDL_LoadWAV_RW(RWops, 1, @wavSpec, @wavStart, @wavLength) = nil) then begin DebugLn('SDL_LoadWAV_RW: ', SDL_GetError()); Dispose(AudioData); Exit(False); end; end; Result:= BeginThread(@Play, AudioData) > TThreadID(0); end; const sdllib= 'libSDL2-2.0.so.0'; var libsdl: TLibHandle; function SDL_Initialize: Boolean; var AMsg: String; begin libsdl:= SafeLoadLibrary(sdllib); Result:= (libsdl <> NilHandle); if Result then try SDL_InitSubSystem:= SafeGetProcAddress(libsdl, 'SDL_InitSubSystem'); SDL_Delay:= SafeGetProcAddress(libsdl, 'SDL_Delay'); SDL_GetError:= SafeGetProcAddress(libsdl, 'SDL_GetError'); SDL_RWFromFile:= SafeGetProcAddress(libsdl, 'SDL_RWFromFile'); SDL_LoadWAV_RW:= SafeGetProcAddress(libsdl, 'SDL_LoadWAV_RW'); SDL_FreeWAV:= SafeGetProcAddress(libsdl, 'SDL_FreeWAV'); SDL_QueueAudio:= SafeGetProcAddress(libsdl, 'SDL_QueueAudio'); SDL_GetQueuedAudioSize:= SafeGetProcAddress(libsdl, 'SDL_GetQueuedAudioSize'); SDL_OpenAudioDevice:= SafeGetProcAddress(libsdl, 'SDL_OpenAudioDevice'); SDL_PauseAudioDevice:= SafeGetProcAddress(libsdl, 'SDL_PauseAudioDevice'); SDL_CloseAudioDevice:= SafeGetProcAddress(libsdl, 'SDL_CloseAudioDevice'); Result:= SDL_InitSubSystem(SDL_INIT_AUDIO) = 0; if not Result then begin AMsg:= SDL_GetError(); raise Exception.Create(AMsg); end; except on E: Exception do begin Result:= False; DebugLn(E.Message); FreeLibrary(libsdl); end; end; end; end. doublecmd-1.1.30/src/platform/unix/qt5/0000755000175000001440000000000015104114162016674 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/qt5/interfaces.pas0000644000175000001440000000076415104114162021533 0ustar alexxusersunit Interfaces; {$mode objfpc}{$H+} interface uses InterfaceBase, qtint; type { TQtWidgetSetEx } TQtWidgetSetEx = Class(TQtWidgetSet) public procedure AppRun(const ALoop: TApplicationMainLoop); override; end; implementation uses Forms; { TQtWidgetSetEx } procedure TQtWidgetSetEx.AppRun(const ALoop: TApplicationMainLoop); begin // Use LCL loop if Assigned(ALoop) then ALoop; end; initialization CreateWidgetset(TQtWidgetSetEx); finalization FreeWidgetset; end. doublecmd-1.1.30/src/platform/unix/mime/0000755000175000001440000000000015104114162017112 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/mime/umimetype.pas0000644000175000001440000002272115104114162021641 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shared MIME-info Database - mime type guess Copyright (C) 2014-2017 Alexander Koblov (alexx2000@mail.ru) Based on PCManFM v0.5.1 (http://pcmanfm.sourceforge.net) Copyright (C) 2007 Houng Jen Yee (PCMan) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uMimeType; {$mode delphi} interface uses DCBasicTypes; {en Get file mime type. } function GetFileMimeType(const FileName: String): String; {en Get file mime type with parents. } function GetFileMimeTypes(const FileName: String): TDynamicStringArray; implementation uses Classes, SysUtils, Unix, BaseUnix, Math, LazFileUtils, DCStrUtils, DCOSUtils, uMimeCache, uXdg, uGio, uGlib2, uGio2; const xdg_mime_type_plain_text = 'text/plain'; xdg_mime_type_directory = 'inode/directory'; xdg_mime_type_unknown = 'application/octet-stream'; xdg_mime_type_executable = 'application/x-executable'; var caches: TFPList = nil; mime_magic_buf: PByte; mime_cache_max_extent: LongWord = 0; CriticalSection: TRTLCriticalSection; (* load all mime.cache files on the system, * including /usr/share/mime/mime.cache, * /usr/local/share/mime/mime.cache, * and $HOME/.local/share/mime/mime.cache. *) procedure mime_cache_load_all(); const MIME_CACHE = 'mime/mime.cache'; var I: Integer; Cache: PMimeCache; FileName: String; Path: TDynamicStringArray; begin caches := TFPList.Create; Path := GetSystemDataDirs; AddString(Path, GetUserDataDir); for I := Low(Path) to High(Path) do begin FileName := IncludeTrailingBackslash(Path[I]) + MIME_CACHE; if mbFileAccess(FileName, fmOpenRead or fmShareDenyNone) then begin Cache := mime_cache_new(FileName); caches.Add(Cache); if Cache^.magic_max_extent > mime_cache_max_extent then mime_cache_max_extent := Cache^.magic_max_extent; end; end; mime_magic_buf := GetMem(mime_cache_max_extent); end; //* free all mime.cache files on the system */ procedure mime_cache_free_all(); var I: Integer; begin for I := 0 to caches.Count - 1 do begin mime_cache_free(PMimeCache(caches[I])); end; FreeAndNil(caches); FreeMem(mime_magic_buf); end; (* * Get mime-type of the specified file (quick, but less accurate): * Mime-type of the file is determined by cheking the filename only. * If statbuf != NULL, it will be used to determine if the file is a directory. *) function mime_type_get_by_filename(const filename: PAnsiChar): PAnsiChar; var i: cint; cache: PMimeCache; glob_len: cint = 0; max_glob_len: cint = 0; suffix_pos: PByte = nil; mime_type, type_suffix: PAnsiChar; prev_suffix_pos: PByte = PByte(-1); begin //* literal matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); mime_type := mime_cache_lookup_literal(cache, filename); if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); end; //* suffix matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); type_suffix := mime_cache_lookup_suffix(cache, filename, @suffix_pos); if (type_suffix <> nil) and (suffix_pos < prev_suffix_pos) then begin mime_type := type_suffix; prev_suffix_pos := suffix_pos; end; end; if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); //* glob matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); type_suffix := mime_cache_lookup_glob(cache, filename, @glob_len); //* according to the mime.cache 1.0 spec, we should use the longest glob matched. */ if (type_suffix <> nil) and (glob_len > max_glob_len) then begin mime_type := type_suffix; max_glob_len := glob_len; end; end; if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); Result := XDG_MIME_TYPE_UNKNOWN; end; (* * Get mime-type info of the specified file (slow, but more accurate): * To determine the mime-type of the file, mime_type_get_by_filename() is * tried first. If the mime-type couldn't be determined, the content of * the file will be checked, which is much more time-consuming. * If statbuf is not NULL, it will be used to determine if the file is a directory, * or if the file is an executable file; otherwise, the function will call stat() * to gather this info itself. So if you already have stat info of the file, * pass it to the function to prevent checking the file stat again. * If you have basename of the file, pass it to the function can improve the * efifciency, too. Otherwise, the function will try to get the basename of * the specified file again. *) function mime_type_get_by_file(const filepath: String; max_extent: cint): String; var data: PByte; i, len: cint; fd: cint = -1; mime_type: PAnsiChar; FileName: String; begin FileName := ExtractFileName(FilePath); mime_type := mime_type_get_by_filename(PAnsiChar(FileName)); if (strcomp(mime_type, XDG_MIME_TYPE_UNKNOWN) <> 0) then Exit(mime_type); if (max_extent > 0) then begin //* Open the file and map it into memory */ fd := mbFileOpen(filepath, fmOpenRead or fmShareDenyNone); if (fd <> -1) then begin {$IF DEFINED(HAVE_MMAP)} data := fpmmap(nil, mime_cache_max_extent, PROT_READ, MAP_SHARED, fd, 0); {$ELSE} (* * FIXME: Can g_alloca() be used here? It's very fast, but is it safe? * Actually, we can allocate a block of memory with the size of mime_cache_max_extent, * then we don't need to do dynamic allocation/free every time, but multi-threading * will be a nightmare, so... *) //* try to lock the common buffer */ if (TryEnterCriticalSection(CriticalSection) <> 0) then data := mime_magic_buf else //* the buffer is in use, allocate new one */ data := GetMem(max_extent); len := fpRead(fd, data^, max_extent); if (len = -1) then begin if (data = mime_magic_buf) then LeaveCriticalSection(CriticalSection) else FreeMem(data); data := Pointer(-1); end; {$ENDIF} if (data <> Pointer(-1)) then begin for i := 0 to caches.Count - 1 do begin mime_type := mime_cache_lookup_magic(PMimeCache(caches[i]), data, len); if (mime_type <> nil) then Break; end; //* Check for executable file */ if (mime_type = nil) and g_file_test(PAnsiChar(filepath), G_FILE_TEST_IS_EXECUTABLE) then mime_type := XDG_MIME_TYPE_EXECUTABLE; //* fallback: check for plain text */ if (mime_type = nil) then begin if FileIsText(filepath) then mime_type := XDG_MIME_TYPE_PLAIN_TEXT; end; {$IF DEFINED(HAVE_MMAP)} fpmunmap(data, mime_cache_max_extent); {$ELSE} if (data = mime_magic_buf) then LeaveCriticalSection(CriticalSection) //* unlock the common buffer */ else //* we use our own buffer */ FreeMem(data); {$ENDIF} end; FileClose(fd); end; end else begin //* empty file can be viewed as text file */ mime_type := XDG_MIME_TYPE_PLAIN_TEXT; end; if Assigned(mime_type) then Result := StrPas(mime_type) else Result := XDG_MIME_TYPE_UNKNOWN; end; (* * Get all parent type of this mime_type *) procedure mime_type_get_parents(const MimeType: String; var Parents: TDynamicStringArray); var I, J: Integer; Temp: TDynamicStringArray; begin for I := 0 to caches.Count - 1 do begin Temp := mime_cache_lookup_parents(PMimeCache(caches[I]), PAnsiChar(MimeType)); for J := Low(Temp) to High(Temp) do begin AddString(Parents, Temp[J]); end; end; end; function GetFileMimeType(const FileName: String): String; var Stat: TStat; MaxExtent: LongWord; begin if fpStat(FileName, Stat) < 0 then Exit(EmptyStr); if fpS_ISREG(Stat.st_mode) then begin MaxExtent:= Min(mime_cache_max_extent, Stat.st_size); if HasGio then Result:= GioGetMimeType(FileName, MaxExtent) else begin Result := mime_type_get_by_file(FileName, MaxExtent); end; end else if fpS_ISDIR(Stat.st_mode) then Result:= XDG_MIME_TYPE_DIRECTORY else if fpS_ISCHR(Stat.st_mode) then Result:= 'inode/chardevice' else if fpS_ISBLK(Stat.st_mode) then Result:= 'inode/blockdevice' else if fpS_ISFIFO(Stat.st_mode) then Result:= 'inode/fifo' else if fpS_ISLNK(Stat.st_mode) then Result:= 'inode/symlink' else if fpS_ISSOCK(Stat.st_mode) then Result:= 'inode/socket'; end; function GetFileMimeTypes(const FileName: String): TDynamicStringArray; var MimeType: String; begin MimeType:= GetFileMimeType(FileName); AddString(Result, MimeType); mime_type_get_parents(MimeType, Result); end; initialization mime_cache_load_all(); InitCriticalSection(CriticalSection); finalization mime_cache_free_all(); DoneCriticalSection(CriticalSection); end. doublecmd-1.1.30/src/platform/unix/mime/umimecache.pas0000644000175000001440000003450715104114162021730 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Shared MIME-info Database mime.cache file parser (http://standards.freedesktop.org/shared-mime-info-spec) Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) Based on PCManFM v0.5.1 (http://pcmanfm.sourceforge.net) Copyright (C) 2007 Houng Jen Yee (PCMan) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uMimeCache; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, Unix, Math, DCBasicTypes, DCOSUtils; type PMimeCache = ^TMimeCache; TMimeCache = record file_path: String; buffer: PAnsiChar; size: LongWord; n_alias: LongWord; s_alias: PAnsiChar; n_parents: LongWord; parents: PAnsiChar; n_literals: LongWord; literals: PAnsiChar; n_globs: LongWord; globs: PAnsiChar; n_suffix_roots: LongWord; suffix_roots: PAnsiChar; n_magics: LongWord; magic_max_extent: LongWord; magics: PAnsiChar; end; function mime_cache_new(const file_path: String): PMimeCache; procedure mime_cache_free(cache: PMimeCache); function mime_cache_load(cache: PMimeCache; const file_path: String): Boolean; function mime_cache_lookup_literal(cache: PMimeCache; const filename: PChar): PAnsiChar; function mime_cache_lookup_magic(cache: PMimeCache; const data: PByte; len: Integer): PAnsiChar; function mime_cache_lookup_parents(cache: PMimeCache; const mime_type: PChar): TDynamicStringArray; function mime_cache_lookup_glob(cache: PMimeCache; const filename: PChar; glob_len: PInteger): PAnsiChar; function mime_cache_lookup_suffix(cache: PMimeCache; const filename: PChar; const suffix_pos: PPChar): PAnsiChar; implementation uses uGlib2, CTypes; function fnmatch(const pattern: PAnsiChar; const str: PAnsiChar; flags: cint): cint; cdecl; external; const LIB_MAJOR_VERSION = 1; (* FIXME: since mime-cache 1.2, weight is splitted into three parts * only lower 8 bit contains weight, and higher bits are flags and case-sensitivity. * anyway, since we don't support weight at all, it'll be fixed later. * We claimed that we support 1.2 to cheat pcmanfm as a temporary quick dirty fix * for the broken file manager, but this should be correctly done in the future. * Weight and case-sensitivity are not handled now. *) LIB_MAX_MINOR_VERSION = 2; LIB_MIN_MINOR_VERSION = 1; const //* cache header */ MAJOR_VERSION = 0; MINOR_VERSION = 2; ALIAS_LIST = 4; PARENT_LIST = 8; LITERAL_LIST = 12; SUFFIX_TREE = 16; GLOB_LIST = 20; MAGIC_LIST = 24; NAMESPACE_LIST = 28; function VAL16(buffer: PAnsiChar; idx: Integer): Word; inline; begin Result := BEtoN(PWord(buffer + idx)^); end; function VAL32(buffer: PAnsiChar; idx: Integer): LongWord; inline; begin Result := BEtoN(PLongWord(buffer + idx)^); end; function mime_cache_new(const file_path: String): PMimeCache; begin New(Result); FillChar(Result^, SizeOf(TMimeCache), 0); if (Length(file_path) > 0) then mime_cache_load(Result, file_path); end; procedure mime_cache_unload(cache: PMimeCache; Clear: Boolean); begin if Assigned(cache^.buffer) then begin {$IF DEFINED(HAVE_MMAP)} fpmunmap(cache^.buffer, cache^.size); {$ELSE} FreeMem(cache^.buffer); {$ENDIF} end; if (Clear) then FillChar(cache^, sizeof(TMimeCache), 0); end; procedure mime_cache_free(cache: PMimeCache); begin mime_cache_unload(cache, False); Dispose(cache); end; function mime_cache_load(cache: PMimeCache; const file_path: String): Boolean; var offset: LongWord; fd: Integer = -1; majv, minv: LongWord; statbuf: BaseUnix.Stat; buffer: PAnsiChar = nil; begin //* Unload old cache first if needed */ mime_cache_unload(cache, True); //* Store the file path */ cache^.file_path := file_path; //* Open the file and map it into memory */ fd := mbFileOpen(file_path, fmOpenRead); if (fd < 0) then Exit(False); if (fpFStat(fd, statbuf) < 0) then begin FileClose(fd); Exit(False); end; {$IF DEFINED(HAVE_MMAP)} buffer := fpmmap(nil, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); {$ELSE} buffer := GetMem(statbuf.st_size); if Assigned(buffer) then fpRead(fd, buffer^, statbuf.st_size) else buffer := Pointer(-1); {$ENDIF} FileClose(fd); if (buffer = Pointer(-1)) then Exit(False); majv := VAL16(buffer, MAJOR_VERSION); minv := VAL16(buffer, MINOR_VERSION); //* Check version */ if (majv > LIB_MAJOR_VERSION) or (minv > LIB_MAX_MINOR_VERSION) or (minv < LIB_MIN_MINOR_VERSION) then begin {$IF DEFINED(HAVE_MMAP)} fpmunmap(buffer, statbuf.st_size); {$ELSE} FreeMem(buffer); {$ENDIF} Exit(False); end; cache^.buffer := buffer; cache^.size := statbuf.st_size; offset := VAL32(buffer, ALIAS_LIST); cache^.s_alias := buffer + offset + 4; cache^.n_alias := VAL32(buffer, offset); offset := VAL32(buffer, PARENT_LIST); cache^.parents := buffer + offset + 4; cache^.n_parents := VAL32(buffer, offset); offset := VAL32(buffer, LITERAL_LIST); cache^.literals := buffer + offset + 4; cache^.n_literals := VAL32(buffer, offset); offset := VAL32(buffer, GLOB_LIST); cache^.globs := buffer + offset + 4; cache^.n_globs := VAL32(buffer, offset); offset := VAL32(buffer, SUFFIX_TREE); cache^.suffix_roots := buffer + VAL32(buffer + offset, 4); cache^.n_suffix_roots := VAL32(buffer, offset); offset := VAL32(buffer, MAGIC_LIST); cache^.n_magics := VAL32(buffer, offset); cache^.magic_max_extent := VAL32(buffer + offset, 4); cache^.magics := buffer + VAL32(buffer + offset, 8); Result := True; end; function magic_rule_match(const buf: PAnsiChar; rule: PAnsiChar; const data: PByte; len: Integer): Boolean; var i: Integer; value, mask: PByte; match: Boolean = False; offset, range: LongWord; val_off, mask_off: LongWord; max_offset, val_len: LongWord; n_children, first_child_off: LongWord; begin offset := VAL32(rule, 0); range := VAL32(rule, 4); max_offset := offset + range; val_len := VAL32(rule, 12); while (offset < max_offset) and ((offset + val_len) <= len) do begin val_off := VAL32(rule, 16); mask_off := VAL32(rule, 20); value := PByte(buf + val_off); //* FIXME: word_size and byte order are not supported! */ if (mask_off > 0) then //* compare with mask applied */ begin mask := PByte(buf + mask_off); for i := 0 to val_len - 1 do begin if ((data[offset + i] and mask[i]) <> value[i]) then break; end; if (i >= val_len) then match := True; end else //* direct comparison */ begin if (CompareMem(value, data + offset, val_len)) then match := True; end; if (match) then begin n_children := VAL32(rule, 24); if (n_children > 0) then begin i := 0; first_child_off := VAL32(rule, 28); rule := buf + first_child_off; while (i < n_children) do begin if (magic_rule_match(buf, rule, data, len)) then Exit(True); Inc(i); rule += 32; end; end else Exit(True); end; Inc(offset); end; Result := False; end; function magic_match(const buf: PAnsiChar; const magic: PAnsiChar; const data: PByte; len: Integer): Boolean; var i: Integer = 0; rule: PAnsiChar; n_rules, rules_off: LongWord; begin n_rules := VAL32(magic, 8); rules_off := VAL32(magic, 12); rule := buf + rules_off; while (i < n_rules) do begin if (magic_rule_match(buf, rule, data, len)) then Exit(True); Inc(i); rule += 32; end; Result := False; end; function mime_cache_lookup_magic(cache: PMimeCache; const data: PByte; len: Integer): PAnsiChar; var i: Integer = 0; magic: PAnsiChar; begin magic := cache^.magics; if (data = nil) or (0 = len) or (magic = nil) then Exit(nil); while (i < cache^.n_magics) do begin if (magic_match(cache^.buffer, magic, data, len)) then begin Exit(cache^.buffer + VAL32(magic, 4)); end; Inc(i); magic += 16; end; Result := nil; end; (* Reverse suffix tree is used since mime.cache 1.1 (shared mime info 0.4) * Returns the address of the found "node", not mime-type. * FIXME: 1. Should be optimized with binary search * 2. Should consider weight of suffix nodes *) function lookup_reverse_suffix_nodes(const buf: PAnsiChar; const nodes: PAnsiChar; n: LongWord; const name: Pgchar; const suffix: Pgchar; const suffix_pos: PPChar): PAnsiChar; var i: Integer; ch: LongWord; uchar: gunichar; node: PAnsiChar; ret: PAnsiChar = nil; cur_suffix_pos: Pgchar; _suffix_pos: Pgchar = nil; leaf_node: PAnsiChar = nil; n_children, first_child_off: LongWord; begin cur_suffix_pos := suffix + 1; if Assigned(suffix) then uchar := g_unichar_tolower(g_utf8_get_char(suffix)) else uchar := 0; //* g_debug("%s: suffix= '%s'", name, suffix); */ for i := 0 to n - 1 do begin node := nodes + i * 12; ch := VAL32(node, 0); _suffix_pos := suffix; if (ch > 0) then begin if (ch = uchar) then begin n_children := VAL32(node, 4); first_child_off := VAL32(node, 8); leaf_node := lookup_reverse_suffix_nodes(buf, buf + first_child_off, n_children, name, g_utf8_find_prev_char(name, suffix), @_suffix_pos); if Assigned(leaf_node) and (_suffix_pos < cur_suffix_pos) then begin ret := leaf_node; cur_suffix_pos := _suffix_pos; end; end; end else //* ch == 0 */ begin //* guint32 weight = VAL32(node, 8); */ //* suffix is found in the tree! */ if (suffix < cur_suffix_pos) then begin ret := node; cur_suffix_pos := suffix; end; end; end; suffix_pos^ := cur_suffix_pos; Result := ret; end; function mime_cache_lookup_suffix(cache: PMimeCache; const filename: PChar; const suffix_pos: PPChar): PAnsiChar; var suffix: Pgchar; root: PAnsiChar; n, fn_len: Integer; ret: PAnsiChar = nil; leaf_node: PAnsiChar; mime_type: PAnsiChar = nil; _suffix_pos: PChar = PAnsiChar(-1); begin root := cache^.suffix_roots; n := cache^.n_suffix_roots; if (filename = nil) or (filename^ = #0) or (0 = n) then Exit(nil); fn_len := strlen(filename); suffix := g_utf8_find_prev_char(filename, filename + fn_len); leaf_node := lookup_reverse_suffix_nodes(cache^.buffer, root, n, filename, suffix, @_suffix_pos); if (leaf_node <> nil) then begin mime_type := cache^.buffer + VAL32(leaf_node, 4); //* g_debug( "found: %s", mime_type ); */ suffix_pos^ := _suffix_pos; ret := mime_type; end; Result := ret; end; function lookup_str_in_entries(cache: PMimeCache; const entries: PAnsiChar; n: Integer; const str: Pgchar): PAnsiChar; var str2: Pgchar; entry: PAnsiChar; lower: Integer = 0; comp, upper, middle: Integer; begin upper := n; middle := upper div 2; if (Assigned(entries) and Assigned(str) and (str^ <> #0)) then begin //* binary search */ while (upper >= lower) do begin entry := entries + middle * 8; str2 := Pgchar(cache^.buffer + VAL32(entry, 0)); comp := strcomp(str, str2); if (comp < 0) then upper := middle - 1 else if (comp > 0) then lower := middle + 1 else //* comp == 0 */ Exit(cache^.buffer + VAL32(entry, 4)); middle := (upper + lower) div 2; end; end; Result := nil; end; function mime_cache_lookup_alias(cache: PMimeCache; const mime_type: PChar): PAnsiChar; begin Result := lookup_str_in_entries(cache, cache^.s_alias, cache^.n_alias, mime_type); end; function mime_cache_lookup_literal(cache: PMimeCache; const filename: PChar): PAnsiChar; var str2: Pgchar; lower: Integer = 0; entries, entry: PAnsiChar; comp, upper, middle: Integer; begin (* FIXME: weight is used in literal lookup after mime.cache v1.1. * However, it's poorly documented. So I've no idea how to implement this. *) entries := cache^.literals; upper := cache^.n_literals; middle := upper div 2; if (Assigned(entries) and Assigned(filename) and (filename^ <> #0)) then begin //* binary search */ while (upper >= lower) do begin //* The entry size is different in v 1.1 */ entry := entries + middle * 12; str2 := Pgchar(cache^.buffer + VAL32(entry, 0)); comp := strcomp(filename, str2); if (comp < 0) then upper := middle - 1 else if (comp > 0) then lower := middle + 1 else //* comp == 0 */ Exit(cache^.buffer + VAL32(entry, 4)); middle := (upper + lower) div 2; end; end; Result := nil; end; function mime_cache_lookup_glob(cache: PMimeCache; const filename: PChar; glob_len: PInteger): PAnsiChar; var glob: PChar; entry: PAnsiChar; i, _glob_len: Integer; max_glob_len: Integer = 0; begin Result := nil; entry := cache^.globs; for i := 0 to cache^.n_globs - 1 do begin glob := PChar(cache^.buffer + VAL32(entry, 0)); _glob_len := strlen(glob); if (fnmatch(glob, filename, 0) = 0) and (_glob_len > max_glob_len) then begin max_glob_len := _glob_len; Result := (cache^.buffer + VAL32(entry, 4)); end; entry += 12; end; glob_len^ := max_glob_len; end; function mime_cache_lookup_parents(cache: PMimeCache; const mime_type: PChar): TDynamicStringArray; var parent: PChar; n, i: LongWord; parents: PAnsiChar; parent_off: LongWord; begin parents := lookup_str_in_entries(cache, cache^.parents, cache^.n_parents, mime_type); if (parents = nil) then Exit(nil); n := VAL32(parents, 0); parents += 4; SetLength(Result, n); for i := 0 to n - 1 do begin parent_off := VAL32(parents, i * 4); parent := PChar(cache^.buffer + parent_off); Result[i] := parent; end; end; end. doublecmd-1.1.30/src/platform/unix/mime/umimeactions.pas0000644000175000001440000004541015104114162022320 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Handles actions associated with MIME types in .desktop files. Based on FreeDesktop.org specifications (http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html) (http://www.freedesktop.org/wiki/Specifications/mime-apps-spec) Copyright (C) 2009-2010 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2011-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uMimeActions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; type PDesktopFileEntry = ^TDesktopFileEntry; TDesktopFileEntry = record DesktopFilePath: String; MimeType: String; DisplayName: String; Comment: String; ExecWithParams: String; // with %F, %U etc. Exec: String; // % params resolved IconName: String; Categories: TDynamicStringArray; Terminal: Boolean; Hidden: Boolean; end; {en Needs absolute file names. Returns a list of PDesktopFileEntry. } function GetDesktopEntries(FileNames: TStringList): TList; {en Needs absolute file names. Returns a default application command line. } function GetDefaultAppCmd(FileNames: TStringList): String; {en Get desktop entry by desktop file name. } function GetDesktopEntry(const FileName: String): PDesktopFileEntry; {en Adds a new action for given mimetype. @param(MimeType File mime type) @param(DesktopEntry Desktop file name or user command) @param(DefaultAction Set as default action for this mime type) @returns(The function returns @true if successful, @false otherwise) } function AddDesktopEntry(const MimeType, DesktopEntry: String; DefaultAction: Boolean): Boolean; function TranslateAppExecToCmdLine(const entry: PDesktopFileEntry; const fileList: TStringList): String; implementation uses Unix, BaseUnix, DCClassesUtf8, DCStrUtils, uDCUtils, uGlib2, uFileProcs, uIconTheme, uClipboard, DCOSUtils, uKeyFile, uGio, uXdg, uMimeType, uDebug, uMyUnix; type TMimeAppsGroup = (magDefault, magAdded, magRemoved); TMimeAppsGroupSet = set of TMimeAppsGroup; const MIME_APPS: array[TMimeAppsGroup] of String = ( 'Default Applications', 'Added Associations', 'Removed Associations' ); type TMimeAppsList = record Defaults, Added, Removed: TDynamicStringArray; end; function TranslateAppExecToCmdLine(const entry: PDesktopFileEntry; const fileList: TStringList): String; var StartPos: Integer = 1; CurPos: Integer = 1; i: Integer; filesAdded: Boolean = False; begin // The .desktop standard does not recommend using % parameters inside quotes // in the Exec entry (the behaviour is undefined), so all those parameters // can be quoted using any method. Result := ''; while CurPos <= Length(entry^.ExecWithParams) do begin if entry^.ExecWithParams[CurPos] = '%' then begin Result := Result + Copy(entry^.ExecWithParams, StartPos, CurPos - StartPos); Inc(CurPos); if CurPos <= Length(entry^.ExecWithParams) then case entry^.ExecWithParams[CurPos] of { 'U': begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileScheme + '//' + URIEncode(fileList[i])); end; filesAdded := True; end; 'u': if fileList.Count > 0 then begin Result := Result + QuoteStr(fileScheme + '//' + URIEncode(fileList[0])); filesAdded := True; end; } 'F','U': begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileList[i]); end; filesAdded := True; end; 'f','u': if fileList.Count > 0 then begin Result := Result + QuoteStr(fileList[0]); filesAdded := True; end; 'N': // deprecated begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileList[i]); end; filesAdded := True; end; 'n': // deprecated if fileList.Count > 0 then begin Result := Result + QuoteStr(fileList[0]); filesAdded := True; end; 'D': // deprecated begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(ExtractFilePath(fileList[i])); end; filesAdded := True; end; 'd': // deprecated if fileList.Count > 0 then begin Result := Result + QuoteStr(ExtractFilePath(fileList[0])); filesAdded := True; end; 'i': if entry^.IconName <> '' then Result := Result + '--icon ' + QuoteStr(entry^.IconName); 'c': Result := Result + QuoteStr(entry^.DisplayName); 'k': Result := Result + QuoteStr(entry^.DesktopFilePath); '%': Result := Result + '%'; end; Inc(CurPos); StartPos := CurPos; end else Inc(CurPos); end; if (StartPos <> CurPos) then Result := Result + Copy(entry^.ExecWithParams, StartPos, CurPos - StartPos); if not filesAdded then begin for i := 0 to fileList.Count - 1 do Result := Result + ' ' + QuoteStr(fileList[i]); end; end; procedure ParseActions(Actions: TDynamicStringArray; var ActionList: TDynamicStringArray); var Action: String; begin for Action in Actions do begin if Length(GetDesktopPath(Action)) > 0 then begin if not Contains(ActionList, Action) then AddString(ActionList, Action); end; end; end; procedure SetFindPath(var MimeAppsPath: TDynamicStringArray); const APPLICATIONS = 'applications/'; var I: Integer; Temp: TDynamicStringArray; begin // $XDG_CONFIG_HOME AddString(MimeAppsPath, IncludeTrailingBackslash(GetUserConfigDir)); // $XDG_CONFIG_DIRS Temp:= GetSystemConfigDirs; for I:= Low(Temp) to High(Temp) do begin AddString(MimeAppsPath, IncludeTrailingBackslash(Temp[I])); end; // $XDG_DATA_HOME AddString(MimeAppsPath, IncludeTrailingBackslash(GetUserDataDir) + APPLICATIONS); // $XDG_DATA_DIRS Temp:= GetSystemDataDirs; for I:= Low(Temp) to High(Temp) do begin AddString(MimeAppsPath, IncludeTrailingBackslash(Temp[I]) + APPLICATIONS); end; end; function ReadMimeAppsList(const MimeType, MimeAppsPath: String; Flags: TMimeAppsGroupSet): TMimeAppsList; const MIME_APPS_LIST = 'mimeapps.list'; var J: LongInt; FileName: String; MimeApps: TKeyFile; Actions: TDynamicStringArray; MimeAppsFile: TDynamicStringArray; begin // $XDG_CURRENT_DESKTOP Actions:= GetCurrentDesktop; // Desktop specific configuration for J:= Low(Actions) to High(Actions) do begin AddString(MimeAppsFile, LowerCase(Actions[J]) + '-' + MIME_APPS_LIST); end; // Common configuration AddString(MimeAppsFile, MIME_APPS_LIST); for J:= Low(MimeAppsFile) to High(MimeAppsFile) do begin FileName:= MimeAppsPath + MimeAppsFile[J]; if mbFileExists(FileName) then try MimeApps:= TKeyFile.Create(FileName); try if magDefault in Flags then begin Actions:= MimeApps.ReadStringList(MIME_APPS[magDefault], MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Defaults); end; if magAdded in Flags then begin Actions:= MimeApps.ReadStringList(MIME_APPS[magAdded], MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Added); end; if magRemoved in Flags then begin Actions:= MimeApps.ReadStringList(MIME_APPS[magRemoved], MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Removed); end; finally FreeAndNil(MimeApps); end; except // Continue end; end; end; procedure ReadMimeInfoCache(const MimeType, Path: String; out Actions: TDynamicStringArray); const MIME_INFO_CACHE = 'mimeinfo.cache'; var MimeCache: TKeyFile; FileName: String; AValue: TDynamicStringArray; begin FileName:= IncludeTrailingBackslash(Path) + MIME_INFO_CACHE; if mbFileExists(FileName) then try MimeCache:= TKeyFile.Create(FileName); try AValue:= MimeCache.ReadStringList('MIME Cache', MimeType); if (Length(AValue) > 0) then ParseActions(AValue, Actions); finally FreeAndNil(MimeCache); end; except // Continue end; end; function GetDesktopEntries(FileNames: TStringList): TList; var Apps: TMimeAppsList; Entry: PDesktopFileEntry; Path, Action, MimeType: String; Actions, MimeTypes: TDynamicStringArray; ResultArray, MimeAppsPath: TDynamicStringArray; procedure AddAction(const Action: String); begin Path := GetDesktopPath(Action); if Length(Path) > 0 then begin Entry := GetDesktopEntry(Path); if Assigned(Entry) then begin Entry^.MimeType := MimeType; // Set Exec as last because it uses other fields of Entry. Entry^.Exec := TranslateAppExecToCmdLine(Entry, Filenames); Result.Add(Entry); end; end; end; begin if FileNames.Count = 0 then Exit(nil); // Get file mime type MimeTypes := GetFileMimeTypes(FileNames[0]); if Length(MimeTypes) = 0 then Exit(nil); Result := TList.Create; SetFindPath(MimeAppsPath); SetLength(ResultArray, 0); for MimeType in MimeTypes do begin for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magDefault, magAdded, magRemoved]); // Add actions from default group for Action in Apps.Defaults do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Removed, Action)) then AddString(ResultArray, Action); end; // Add actions from added group for Action in Apps.Added do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Defaults, Action)) then AddString(ResultArray, Action); end; // Read actions from mimeinfo.cache ReadMimeInfoCache(MimeType, Path, Actions); for Action in Actions do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Removed, Action)) then begin AddString(ResultArray, Action); AddString(Apps.Removed, Action); end; end; end; end; if HasGio then begin Actions:= GioMimeTypeGetActions(MimeTypes[0]); for Action in Actions do begin if not Contains(ResultArray, Action) then AddString(ResultArray, Action); end; end; // Fill result list for Action in ResultArray do begin AddAction(Action); end; end; function GetDefaultAppCmd(FileNames: TStringList): String; var I: Integer; Action: String; Apps: TMimeAppsList; MimeType, Path: String; Entry: PDesktopFileEntry; Actions: TDynamicStringArray; MimeTypes: TDynamicStringArray; MimeAppsPath: TDynamicStringArray; function GetAppExec: String; begin if Length(Action) > 0 then begin Path := GetDesktopPath(Action); if Length(Path) > 0 then begin Entry := GetDesktopEntry(Path); if Assigned(Entry) then begin Entry^.MimeType := MimeType; // Set Exec as last because it uses other fields of Entry. Result := TranslateAppExecToCmdLine(Entry, Filenames); Dispose(Entry); end; end; end; end; begin Result:= EmptyStr; if FileNames.Count = 0 then Exit; // Get file mime type MimeTypes := GetFileMimeTypes(FileNames[0]); if Length(MimeTypes) = 0 then Exit; SetFindPath(MimeAppsPath); for MimeType in MimeTypes do begin // Check defaults for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magDefault]); if Length(Apps.Defaults) > 0 then begin // First Action is default Action:= Apps.Defaults[0]; Exit(GetAppExec); end end; // Check added for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magAdded]); if Length(Apps.Added) > 0 then begin // First Action is default Action:= Apps.Added[0]; Exit(GetAppExec); end; end; // Check mime info cache for Path in MimeAppsPath do begin // Read actions from mimeinfo.cache ReadMimeInfoCache(MimeType, Path, Actions); if Length(Actions) > 0 then begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magRemoved]); for I:= Low(Actions) to High(Actions) do begin if not Contains(Apps.Removed, Actions[I]) then begin Action:= Actions[I]; Exit(GetAppExec); end; end; end; end; end; //for end; function GetDesktopEntry(const FileName: String): PDesktopFileEntry; var TryExec: String; DesktopEntryFile: TKeyFile; begin try DesktopEntryFile:= TKeyFile.Create(FileName); if not DesktopEntryFile.SectionExists(DESKTOP_GROUP) then begin DesktopEntryFile.Free; Exit(nil); end; try TryExec:= DesktopEntryFile.ReadString(DESKTOP_GROUP, DESKTOP_KEY_TRY_EXEC, EmptyStr); if Length(TryExec) > 0 then begin case GetPathType(TryExec) of ptAbsolute: if fpAccess(TryExec, X_OK) <> 0 then Exit(nil); ptNone: if not ExecutableInSystemPath(TryExec) then Exit(nil); end; end; New(Result); with Result^, DesktopEntryFile do begin DesktopFilePath := FileName; DisplayName := ReadLocaleString(DESKTOP_GROUP, DESKTOP_KEY_NAME, EmptyStr); Comment := ReadLocaleString(DESKTOP_GROUP, DESKTOP_KEY_COMMENT, EmptyStr); ExecWithParams := ReadString(DESKTOP_GROUP, DESKTOP_KEY_EXEC, EmptyStr); IconName := ReadString(DESKTOP_GROUP, DESKTOP_KEY_ICON, EmptyStr); Categories := ReadStringList(DESKTOP_GROUP, DESKTOP_KEY_CATEGORIES); Terminal := ReadBool(DESKTOP_GROUP, DESKTOP_KEY_TERMINAL, False); Hidden := ReadBool(DESKTOP_GROUP, DESKTOP_KEY_NO_DISPLAY, False); { Some icon names in .desktop files are specified with an extension, even though it is not allowed by the standard unless an absolute path to the icon is supplied. We delete this extension here. } if GetPathType(IconName) = ptNone then IconName := TIconTheme.CutTrailingExtension(IconName); end; finally DesktopEntryFile.Free; end; except on E: Exception do begin Result:= nil; DCDebug('GetDesktopEntry: ', E.Message); end; end; end; function AddDesktopEntry(const MimeType, DesktopEntry: String; DefaultAction: Boolean): Boolean; var Value: String; Args: TStringArray; CustomFile: String; UserDataDir: String; DesktopFile: TIniFileEx; MimeApps: String = '/mimeapps.list'; procedure UpdateDesktop(const Group: String); begin // Read current actions of this mime type Value:= DesktopFile.ReadString(Group, MimeType, EmptyStr); if (Length(Value) > 0) and (not StrEnds(Value, ';')) then Value += ';'; if DefaultAction then begin // Remove chosen action if it exists Value:= StringReplace(Value, CustomFile, EmptyStr, [rfReplaceAll]); // Save chosen action as first DesktopFile.WriteString(Group, MimeType, CustomFile + Value); end else if (Pos(CustomFile, Value) = 0) then begin // Save chosen action as last DesktopFile.WriteString(Group, MimeType, Value + CustomFile); end; end; begin CustomFile:= DesktopEntry; UserDataDir:= GetUserDataDir + '/applications'; if (StrEnds(DesktopEntry, '.desktop') = False) then begin mbForceDirectory(UserDataDir); // Create new desktop entry file for user command SplitCmdLine(CustomFile, Value, Args); CustomFile:= 'dc_' + ExtractFileName(Value) + '_'; CustomFile:= UserDataDir + PathDelim + CustomFile; CustomFile:= GetTempName(CustomFile, 'desktop'); try DesktopFile:= TIniFileEx.Create(CustomFile, fmCreate or fmOpenReadWrite); try DesktopFile.WriteBool(DESKTOP_GROUP, DESKTOP_KEY_NO_DISPLAY, True); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_EXEC, DesktopEntry); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_MIME_TYPE, MimeType); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_NAME, ExtractFileName(Value)); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_TYPE, KEY_FILE_DESKTOP_TYPE_APPLICATION); DesktopFile.UpdateFile; finally DesktopFile.Free; end; fpSystem('update-desktop-database ' + UserDataDir); except Exit(False); end; CustomFile:= ExtractFileName(CustomFile); end; // Save association in MimeApps CustomFile:= CustomFile + ';'; UserDataDir:= GetUserConfigDir; MimeApps:= UserDataDir + MimeApps; try mbForceDirectory(UserDataDir); DesktopFile:= TIniFileEx.Create(MimeApps, fmOpenReadWrite); try // Update added associations UpdateDesktop(MIME_APPS[magAdded]); // Set as default action if needed if DefaultAction then begin // Update default applications UpdateDesktop(MIME_APPS[magDefault]); end; DesktopFile.UpdateFile; if DesktopEnv = DE_KDE then fpSystem('kbuildsycoca5'); finally DesktopFile.Free; end; Result:= True; except on E: Exception do begin Result:= False; DCDebug(E.Message); end; end; end; end. doublecmd-1.1.30/src/platform/unix/linux/0000755000175000001440000000000015104114162017322 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/linux/uudisks2.pas0000644000175000001440000002351215104114162021603 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to UDisks2 service via libudisks2. Copyright (C) 2020-2022 Alexander Koblov (alexx2000@mail.ru) Based on udisks-2.8.4/tools/udisksctl.c Copyright (C) 2007-2010 David Zeuthen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uUDisks2; {$mode delphi} interface uses SysUtils; function Mount(const ObjectPath: String; out MountPath: String): Boolean; function Unmount(const ObjectPath: String): Boolean; function Eject(const ObjectPath: String): Boolean; var HasUDisks2: Boolean = False; implementation uses DynLibs, LazLogger, DCOSUtils, uGio2, uGObject2, uGlib2; type PUDisksBlock = Pointer; PUDisksDrive = Pointer; PUDisksObject = Pointer; PUDisksClient = Pointer; PUDisksFilesystem = Pointer; var udisks_block_get_drive: function(object_: PUDisksBlock): Pgchar; cdecl; udisks_block_get_device: function(object_: PUDisksBlock): Pgchar; cdecl; udisks_block_get_symlinks: function(object_: PUDisksBlock): PPgchar; cdecl; udisks_object_peek_drive: function(object_: PUDisksObject): PUDisksDrive; cdecl; udisks_object_peek_block: function(object_: PUDisksObject): PUDisksBlock; cdecl; udisks_filesystem_get_mount_points: function(object_: PUDisksFilesystem): PPgchar; cdecl; udisks_object_peek_filesystem: function(object_: PUDisksObject): PUDisksFilesystem; cdecl; udisks_client_get_object_manager: function(client: PUDisksClient): PGDBusObjectManager; cdecl; udisks_client_new_sync: function(cancellable: PGCancellable; error: PPGError): PUDisksClient; cdecl; udisks_drive_call_eject_sync: function(proxy: PUDisksDrive; arg_options: PGVariant; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; udisks_filesystem_call_unmount_sync: function(proxy: PUDisksFilesystem; arg_options: PGVariant; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; udisks_filesystem_call_mount_sync: function(proxy: PUDisksFilesystem; arg_options: PGVariant; out_mount_path: PPgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; procedure Print(const sMessage: String); begin DebugLn('UDisks2: ', sMessage); end; procedure PrintError(var AError: PGError); begin Print(AError^.message); g_error_free(AError); AError:= nil; end; function DeviceFileToUDisksObject(Client: PUDisksClient; Device: Pgchar): PUDisksObject; var Symlinks: PPgchar; L, Objects: PGList; Block: PUDisksBlock; Object_: PUDisksObject; begin Result:= nil; Objects:= g_dbus_object_manager_get_objects(udisks_client_get_object_manager(Client)); if Assigned(Objects) then try L:= Objects; while (L <> nil) do begin Object_:= PUDisksObject(L^.data); Block:= udisks_object_peek_block(Object_); if Assigned(Block) then begin if (g_strcmp0(udisks_block_get_device(Block), Device) = 0) then begin Result:= PUDisksObject(g_object_ref(PGObject(Object_))); Exit; end; Symlinks:= udisks_block_get_symlinks(Block); while (Symlinks <> nil) and (Symlinks^ <> nil) do begin if (g_strcmp0(Symlinks^, Device) = 0) then begin Result:= PUDisksObject(g_object_ref(PGObject(Object_))); Exit; end; Inc(Symlinks); end; end; L:= L^.next; end; finally g_list_free_full(Objects, TGDestroyNotify(@g_object_unref)); end; end; function MountUnmount(const ObjectPath: String; Mount: Boolean; MountPath: PString): Boolean; var mount_path: Pgchar; options: PGVariant; AError: PGError = nil; object_: PUDisksObject; builder: TGVariantBuilder; client: PUDisksClient = nil; filesystem: PUDisksFilesystem; begin client := udisks_client_new_sync (nil, @AError); if (client = nil) then begin PrintError(AError); Exit(False); end; object_:= DeviceFileToUDisksObject(client, Pgchar(ObjectPath)); Result:= Assigned(object_); if Result then begin filesystem:= udisks_object_peek_filesystem(object_); Result:= Assigned(filesystem); if Result then begin g_variant_builder_init(@builder, PGVariantType(PAnsiChar('a{sv}'))); options:= g_variant_builder_end (@builder); g_variant_ref_sink(options); if not Mount then begin Result:= udisks_filesystem_call_unmount_sync(filesystem, options, nil, @AError); if not Result then PrintError(AError); end else begin Result:= udisks_filesystem_call_mount_sync(filesystem, options, @mount_path, nil, @AError); if not Result then PrintError(AError) else begin MountPath^:= StrPas(mount_path); g_free(mount_path); end; end; g_variant_unref(options); end; g_object_unref(PGObject(object_)); end; g_object_unref(PGObject(client)); end; function Mount(const ObjectPath: String; out MountPath: String): Boolean; begin Result:= MountUnmount(ObjectPath, True, @MountPath); end; function Unmount(const ObjectPath: String): Boolean; begin Result:= MountUnmount(ObjectPath, False, nil); end; function Eject(const ObjectPath: String): Boolean; var DrivePath: Pgchar; Options: PGVariant; Drive: PUDisksDrive; Block: PUDisksBlock; MountPoints: PPgchar; AError: PGError = nil; Builder: TGVariantBuilder; BlockObject: PUDisksObject; DriveObject: PUDisksObject; Client: PUDisksClient = nil; FileSystem: PUDisksFilesystem; begin Client := udisks_client_new_sync (nil, @AError); if (Client = nil) then begin PrintError(AError); Exit(False); end; BlockObject:= DeviceFileToUDisksObject(Client, Pgchar(ObjectPath)); Result:= Assigned(BlockObject); if Result then begin Block:= udisks_object_peek_block(BlockObject); Result:= Assigned(Block); if Result then begin DrivePath:= udisks_block_get_drive(Block); DriveObject:= g_dbus_object_manager_get_object(udisks_client_get_object_manager(Client), DrivePath); Result:= Assigned(DriveObject); if Result then begin Drive:= udisks_object_peek_drive(DriveObject); Result:= Assigned(Drive); if Result then begin g_variant_builder_init(@Builder, PGVariantType(PAnsiChar('a{sv}'))); Options:= g_variant_builder_end(@Builder); g_variant_ref_sink(Options); FileSystem:= udisks_object_peek_filesystem(BlockObject); if Assigned(FileSystem) then begin MountPoints:= udisks_filesystem_get_mount_points(FileSystem); if Assigned(MountPoints) and Assigned(MountPoints^) then begin Result:= udisks_filesystem_call_unmount_sync(FileSystem, options, nil, @AError); if not Result then PrintError(AError); end; end; Result:= udisks_drive_call_eject_sync(Drive, Options, nil, @AError); if not Result then PrintError(AError); g_variant_unref(Options); end; g_object_unref(PGObject(DriveObject)); end; end; g_object_unref(PGObject(BlockObject)); end; g_object_unref(PGObject(Client)); end; function CheckUDisks({%H-}Parameter : Pointer): PtrInt; var AClient: PGObject; AError: PGError = nil; begin Result:= 0; AClient := udisks_client_new_sync (nil, @AError); HasUDisks2:= Assigned(AClient); if HasUDisks2 then g_object_unref(AClient) else begin PrintError(AError); end; EndThread; end; var libudisks2_so_0: TLibHandle; procedure Initialize; begin libudisks2_so_0:= SafeLoadLibrary('libudisks2.so.0'); if (libudisks2_so_0 <> NilHandle) then try @udisks_block_get_drive:= SafeGetProcAddress(libudisks2_so_0, 'udisks_block_get_drive'); @udisks_block_get_device:= SafeGetProcAddress(libudisks2_so_0, 'udisks_block_get_device'); @udisks_block_get_symlinks:= SafeGetProcAddress(libudisks2_so_0, 'udisks_block_get_symlinks'); @udisks_object_peek_drive:= SafeGetProcAddress(libudisks2_so_0, 'udisks_object_peek_drive'); @udisks_object_peek_block:= SafeGetProcAddress(libudisks2_so_0, 'udisks_object_peek_block'); @udisks_object_peek_filesystem:= SafeGetProcAddress(libudisks2_so_0, 'udisks_object_peek_filesystem'); @udisks_client_get_object_manager:= SafeGetProcAddress(libudisks2_so_0, 'udisks_client_get_object_manager'); @udisks_client_new_sync:= SafeGetProcAddress(libudisks2_so_0, 'udisks_client_new_sync'); @udisks_drive_call_eject_sync:= SafeGetProcAddress(libudisks2_so_0, 'udisks_drive_call_eject_sync'); @udisks_filesystem_get_mount_points:= SafeGetProcAddress(libudisks2_so_0, 'udisks_filesystem_get_mount_points'); @udisks_filesystem_call_unmount_sync:= SafeGetProcAddress(libudisks2_so_0, 'udisks_filesystem_call_unmount_sync'); @udisks_filesystem_call_mount_sync:= SafeGetProcAddress(libudisks2_so_0, 'udisks_filesystem_call_mount_sync'); BeginThread(@CheckUDisks); except on E: Exception do begin UnloadLibrary(libudisks2_so_0); libudisks2_so_0:= NilHandle; Print(E.Message); end; end; end; initialization Initialize; finalization if (libudisks2_so_0 <> NilHandle) then UnloadLibrary(libudisks2_so_0); end. doublecmd-1.1.30/src/platform/unix/linux/uudisks.pas0000644000175000001440000000443115104114162021520 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- UDisks types unit Copyright (C) 2010-2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uUDisks; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl; type TUDisksDeviceInfo = record DeviceObjectPath: String; DeviceFile: String; DeviceIsDrive, DeviceIsSystemInternal, DeviceIsPartition, DeviceIsPartitionTable, // Does the device have a partition table DeviceIsMounted, DeviceIsRemovable, // If contains removable media. DeviceIsOpticalDisc, // If is an optical drive and optical disk is inserted. DeviceIsMediaAvailable, DriveIsMediaEjectable: Boolean; DeviceMountPaths: TStringArray; DevicePresentationHide: Boolean; DevicePresentationName: String; DevicePresentationIconName: String; DeviceAutomountHint: String; // Whether automatically mount or not DriveConnectionInterface, DriveMedia: String; // Type of media currently in the drive. DriveMediaCompatibility: TStringArray; // Possible media types. IdUsage, IdType, IdVersion, IdUuid, IdLabel, DeviceSize, PartitionSlave: String; // Owner device if this is a partition end; TUDisksDevicesInfos = array of TUDisksDeviceInfo; TUDisksMethod = (UDisks_DeviceAdded, UDisks_DeviceRemoved, UDisks_DeviceChanged); TUDisksDeviceNotify = procedure(Reason: TUDisksMethod; const ObjectPath: String) of object; TUDisksObserverList = specialize TFPGList; implementation end. doublecmd-1.1.30/src/platform/unix/linux/uudev.pas0000644000175000001440000005251515104114162021167 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface to UDev service via libudev. Copyright (C) 2014-2022 Alexander Koblov (alexx2000@mail.ru) Based on udisks-1.0.4/src/device.c Copyright (C) 2008 David Zeuthen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uUDev; {$mode delphi} {$assertions on} interface uses Classes, SysUtils, CTypes, Unix, BaseUnix, uUDisks; function Initialize: Boolean; procedure Finalize; procedure AddObserver(Func: TUDisksDeviceNotify); procedure RemoveObserver(Func: TUDisksDeviceNotify); function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; overload; var HasUdev: Boolean = False; implementation uses DynLibs, DCOSUtils, DCStrUtils, uDebug, uPollThread; type { TMonitorObject } TMonitorObject = class private FAction: String; FDevicePath: String; private procedure ReceiveDevice; procedure Handler(Sender: TObject); public constructor Create; end; type Pudev = ^Tudev; Tudev = record end; Pudev_device = ^Tudev_device; Tudev_device = record end; Pudev_monitor = ^Tudev_monitor; Tudev_monitor = record end; Pudev_enumerate = ^Tudev_enumerate; Tudev_enumerate = record end; Pudev_list_entry = ^Tudev_list_entry; Tudev_list_entry = record end; var // udev — libudev context udev_new: function(): Pudev; cdecl; udev_unref: function(udev: Pudev): Pudev; cdecl; // udev_list — list operation udev_list_entry_get_next: function(list_entry: Pudev_list_entry): Pudev_list_entry; cdecl; udev_list_entry_get_name: function(list_entry: Pudev_list_entry): PAnsiChar; cdecl; // udev_device — kernel sys devices udev_device_unref: procedure(udev_device: Pudev_device); cdecl; udev_device_new_from_syspath: function(udev: Pudev; const syspath: PAnsiChar): Pudev_device; cdecl; udev_device_get_devnode: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_devtype: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_syspath: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_action: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_property_value: function(udev_device: Pudev_device; const key: PAnsiChar): PAnsiChar; cdecl; udev_device_get_sysattr_value: function(udev_device: Pudev_device; const sysattr: PAnsiChar): PAnsiChar; cdecl; // udev_monitor — device event source udev_monitor_unref: procedure(udev_monitor: Pudev_monitor); cdecl; udev_monitor_new_from_netlink: function(udev: Pudev; const name: PAnsiChar): Pudev_monitor; cdecl; udev_monitor_filter_add_match_subsystem_devtype: function(udev_monitor: Pudev_monitor; const subsystem: PAnsiChar; const devtype: PAnsiChar): cint; cdecl; udev_monitor_enable_receiving: function(udev_monitor: Pudev_monitor): cint; cdecl; udev_monitor_get_fd: function(udev_monitor: Pudev_monitor): cint; cdecl; udev_monitor_receive_device: function(udev_monitor: Pudev_monitor): Pudev_device; cdecl; // udev_enumerate — lookup and sort sys devices udev_enumerate_new: function(udev: Pudev): Pudev_enumerate; cdecl; udev_enumerate_unref: function(udev_enumerate: Pudev_enumerate): Pudev_enumerate; cdecl; udev_enumerate_add_match_subsystem: function(udev_enumerate: Pudev_enumerate; const subsystem: PAnsiChar): cint; cdecl; udev_enumerate_scan_devices: function(udev_enumerate: Pudev_enumerate): cint; cdecl; udev_enumerate_get_list_entry: function(udev_enumerate: Pudev_enumerate): Pudev_list_entry; cdecl; const LibraryName = 'libudev.so.%d'; var udev: Pudev = nil; libudev: TLibHandle = NilHandle; udev_monitor: Pudev_monitor = nil; udev_monitor_object: TMonitorObject = nil; observers: TUDisksObserverList = nil; const UDEV_DEVICE_TYPE_DISK = 'disk'; UDEV_DEVICE_TYPE_PARTITION = 'partition'; { udev property, media name, force non removable, force removable } drive_media_mapping: array [0..33, 0..3] of String = ( ( 'ID_DRIVE_THUMB', 'thumb', 'TRUE', 'FALSE' ), ( 'ID_DRIVE_FLASH', 'flash', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_CF', 'flash_cf', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_MS', 'flash_ms', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SM', 'flash_sm', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SD', 'flash_sd', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SDHC', 'flash_sdhc', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SDXC', 'flash_sdxc', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SDIO', 'flash_sdio', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_SD_COMBO', 'flash_sd_combo', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLASH_MMC', 'flash_mmc', 'TRUE', 'FALSE' ), ( 'ID_DRIVE_FLOPPY', 'floppy', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLOPPY_ZIP', 'floppy_zip', 'FALSE', 'TRUE' ), ( 'ID_DRIVE_FLOPPY_JAZ', 'floppy_jaz', 'FALSE', 'TRUE' ), ( 'ID_CDROM', 'optical_cd', 'FALSE', 'TRUE' ), ( 'ID_CDROM_CD_R', 'optical_cd_r', 'FALSE', 'TRUE' ), ( 'ID_CDROM_CD_RW', 'optical_cd_rw', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD', 'optical_dvd', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_R', 'optical_dvd_r', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_RW', 'optical_dvd_rw', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_RAM', 'optical_dvd_ram', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_PLUS_R', 'optical_dvd_plus_r', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_PLUS_RW', 'optical_dvd_plus_rw', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_PLUS_R_DL', 'optical_dvd_plus_r_dl', 'FALSE', 'TRUE' ), ( 'ID_CDROM_DVD_PLUS_RW_DL', 'optical_dvd_plus_rw_dl', 'FALSE', 'TRUE' ), ( 'ID_CDROM_BD', 'optical_bd', 'FALSE', 'TRUE' ), ( 'ID_CDROM_BD_R', 'optical_bd_r', 'FALSE', 'TRUE' ), ( 'ID_CDROM_BD_RE', 'optical_bd_re', 'FALSE', 'TRUE' ), ( 'ID_CDROM_HDDVD', 'optical_hddvd', 'FALSE', 'TRUE' ), ( 'ID_CDROM_HDDVD_R', 'optical_hddvd_r', 'FALSE', 'TRUE' ), ( 'ID_CDROM_HDDVD_RW', 'optical_hddvd_rw', 'FALSE', 'TRUE' ), ( 'ID_CDROM_MO', 'optical_mo', 'FALSE', 'TRUE' ), ( 'ID_CDROM_MRW', 'optical_mrw', 'FALSE', 'TRUE' ), ( 'ID_CDROM_MRW_W', 'optical_mrw_w', 'FALSE', 'TRUE' ) ); procedure Print(const sMessage: String); begin DCDebug('UDev: ', sMessage); end; procedure Load; var Version: Integer; begin for Version:= 1 downto 0 do begin libudev:= LoadLibrary(Format(LibraryName, [Version])); if libudev <> NilHandle then Break; end; HasUdev:= libudev <> NilHandle; if HasUdev then try // udev — libudev context udev_new:= SafeGetProcAddress(libudev, 'udev_new'); udev_unref:= SafeGetProcAddress(libudev, 'udev_unref'); // udev_list — list operation udev_list_entry_get_next:= SafeGetProcAddress(libudev, 'udev_list_entry_get_next'); udev_list_entry_get_name:= SafeGetProcAddress(libudev, 'udev_list_entry_get_name'); // udev_device — kernel sys devices udev_device_unref:= SafeGetProcAddress(libudev, 'udev_device_unref'); udev_device_new_from_syspath:= SafeGetProcAddress(libudev, 'udev_device_new_from_syspath'); udev_device_get_devnode:= SafeGetProcAddress(libudev, 'udev_device_get_devnode'); udev_device_get_devtype:= SafeGetProcAddress(libudev, 'udev_device_get_devtype'); udev_device_get_syspath:= SafeGetProcAddress(libudev, 'udev_device_get_syspath'); udev_device_get_action:= SafeGetProcAddress(libudev, 'udev_device_get_action'); udev_device_get_property_value:= SafeGetProcAddress(libudev, 'udev_device_get_property_value'); udev_device_get_sysattr_value:= SafeGetProcAddress(libudev, 'udev_device_get_sysattr_value'); // udev_monitor — device event source udev_monitor_unref:= SafeGetProcAddress(libudev, 'udev_monitor_unref'); udev_monitor_new_from_netlink:= SafeGetProcAddress(libudev, 'udev_monitor_new_from_netlink'); udev_monitor_filter_add_match_subsystem_devtype:= SafeGetProcAddress(libudev, 'udev_monitor_filter_add_match_subsystem_devtype'); udev_monitor_enable_receiving:= SafeGetProcAddress(libudev, 'udev_monitor_enable_receiving'); udev_monitor_get_fd:= SafeGetProcAddress(libudev, 'udev_monitor_get_fd'); udev_monitor_receive_device:= SafeGetProcAddress(libudev, 'udev_monitor_receive_device'); // udev_enumerate — lookup and sort sys devices udev_enumerate_new:= SafeGetProcAddress(libudev, 'udev_enumerate_new'); udev_enumerate_unref:= SafeGetProcAddress(libudev, 'udev_enumerate_unref'); udev_enumerate_add_match_subsystem:= SafeGetProcAddress(libudev, 'udev_enumerate_add_match_subsystem'); udev_enumerate_scan_devices:= SafeGetProcAddress(libudev, 'udev_enumerate_scan_devices'); udev_enumerate_get_list_entry:= SafeGetProcAddress(libudev, 'udev_enumerate_get_list_entry'); // Create the udev object udev:= udev_new(); if udev = nil then Raise Exception.Create('Can''t create udev'); except on E: Exception do begin HasUdev:= False; UnloadLibrary(libudev); Print(E.Message); end; end; end; procedure Free; begin if Assigned(udev) then udev_unref(udev); if libudev <> NilHandle then UnloadLibrary(libudev); end; function GetDeviceProperty(const Device: Pudev_device; const PropertyName: String; out Value: Boolean): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_property_value(Device, PAnsiCHar(PropertyName)); Result:= Assigned(pacValue); if (Result = False) then Value:= False else Value:= StrToBool(pacValue); end; function GetDeviceProperty(const Device: Pudev_device; const PropertyName: String; out Value: String): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_property_value(Device, PAnsiCHar(PropertyName)); Result:= Assigned(pacValue); if (Result = False) then Value:= EmptyStr else Value:= StrPas(pacValue); end; function GetDeviceAttribute(const Device: Pudev_device; const AttributeName: String; out Value: String): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_sysattr_value(Device, PAnsiCHar(AttributeName)); Result:= Assigned(pacValue); if (Result = False) then Value:= EmptyStr else Value:= StrPas(pacValue); end; function GetDeviceAttribute(const Device: Pudev_device; const AttributeName: String; out Value: Boolean): Boolean; overload; var S: String; begin Result:= GetDeviceAttribute(Device, AttributeName, S); if Result then Result:= TryStrToBool(S, Value); end; function GetDeviceAttribute(const SystemPath: String; const AttributeName: String; out Value: Boolean): Boolean; overload; var S: AnsiChar; Handle: THandle; FileName: String; begin FileName:= IncludeTrailingBackslash(SystemPath) + AttributeName; Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); Result:= Handle <> feInvalidHandle; if Result then begin Result:= FileRead(Handle, S, SizeOf(S)) > 0; if Result then Result:= TryStrToBool(S, Value); FileClose(Handle); end; end; function DecodeString(const EncodedString: String): String; var Finish: Integer; Index: Integer = 1; StartIndex: Integer = 1; begin Result:= EmptyStr; Finish:= Length(EncodedString); while Index <= Finish - 3 do begin if EncodedString[Index] <> '\' then Inc(Index) else begin if EncodedString[Index + 1] <> 'x' then begin Print('**** NOTE: malformed encoded string: ' + EncodedString); Exit(EncodedString); end; Result:= Result + Copy(EncodedString, StartIndex, Index - StartIndex) + Chr(StrToInt('$' + Copy(EncodedString, Index + 2, 2))); Index:= Index + 4; StartIndex:= Index; end; end; Result:= Result + Copy(EncodedString, StartIndex, Finish - StartIndex + 1); end; procedure UpdateDriveConnectionInterface(SystemPath: PAnsiChar; var Info: TUDisksDeviceInfo); var Path, Connection: String; begin Path:= IncludeTrailingPathDelimiter(SystemPath); repeat Connection:= fpReadLink(Path + 'subsystem'); Connection:= ExtractFileName(ExcludeTrailingPathDelimiter(Connection)); if Connection = 'usb' then begin // Both the interface and the device will be 'usb'. // However only the device will have the 'speed' property. if mbFileExists(Path + 'speed') then begin Info.DriveConnectionInterface:= Connection; Break; end; end; Path:= ExtractFilePath(ExcludeTrailingPathDelimiter(Path)); until (Length(Path) = 0) or (CompareStr(Path, '/sys/devices/') = 0); end; procedure GetDeviceInfo(SystemPath: PAnsiChar; Device: Pudev_device; out Info: TUDisksDeviceInfo); overload; var I: Integer; Value: String; DeviceName: String; force_removable: Boolean = False; force_non_removable: Boolean = False; begin with Info do begin DeviceFile:= udev_device_get_devnode(Device); DeviceName:= ExtractFileName(DeviceFile); DeviceObjectPath:= SystemPath; GetDeviceProperty(Device, 'ID_FS_USAGE', IdUsage); GetDeviceProperty(Device, 'ID_FS_TYPE', IdType); GetDeviceProperty(Device, 'ID_FS_VERSION', IdVersion); GetDeviceProperty(Device, 'ID_FS_UUID', IdUuid); GetDeviceProperty(Device, 'ID_FS_LABEL_ENC', IdLabel); if Length(IdLabel) > 0 then IdLabel:= DecodeString(IdLabel) else begin GetDeviceProperty(Device, 'ID_FS_LABEL', IdLabel); end; GetDeviceProperty(Device, 'ID_BUS', DriveConnectionInterface); for I:= Low(drive_media_mapping) to High(drive_media_mapping) do begin if Assigned(udev_device_get_property_value(Device, PAnsiChar(drive_media_mapping[I, 0]))) then begin AddString(DriveMediaCompatibility, drive_media_mapping[I, 1]); if StrToBool(drive_media_mapping[I, 2]) then force_non_removable:= True; if StrToBool(drive_media_mapping[I, 3]) then force_removable:= True; end; end; GetDeviceProperty(Device, 'UDISKS_SYSTEM', DeviceIsSystemInternal); GetDeviceProperty(Device, 'UDISKS_IGNORE', DevicePresentationHide); GetDeviceProperty(Device, 'UDISKS_AUTO', DeviceAutomountHint); GetDeviceProperty(Device, 'UDISKS_NAME', DevicePresentationName); GetDeviceProperty(Device, 'UDISKS_ICON_NAME', DevicePresentationIconName); Value:= udev_device_get_devtype(Device); DeviceIsDrive:= (Value = UDEV_DEVICE_TYPE_DISK); DeviceIsPartition:= (Value = UDEV_DEVICE_TYPE_PARTITION); DeviceIsRemovable := False; if DeviceIsDrive then begin DeviceIsPartitionTable:= (udev_device_get_property_value(Device, 'ID_PART_TABLE_TYPE' ) <> nil); end else if DeviceIsPartition then begin if DeviceObjectPath[Length(DeviceObjectPath)] in ['0'..'9'] then begin PartitionSlave:= ExtractFileDir(DeviceObjectPath); GetDeviceAttribute(PartitionSlave, 'removable', DeviceIsRemovable); end; end; if not DeviceIsRemovable then begin GetDeviceAttribute(Device, 'removable', DeviceIsRemovable); end; DriveIsMediaEjectable:= DeviceIsRemovable; if force_non_removable then DeviceIsRemovable:= False; if force_removable then DeviceIsRemovable:= True; if StrBegins(DeviceName, 'mmcblk') then DriveIsMediaEjectable:= DeviceIsRemovable; if (StrBegins(DeviceName, 'fd')) or (udev_device_get_property_value(Device, 'ID_DRIVE_FLOPPY' ) <> nil) then begin DriveIsMediaEjectable:= False; end; GetDeviceAttribute(Device, 'size', DeviceSize); UpdateDriveConnectionInterface(SystemPath, Info); DeviceIsMediaAvailable:= (Length(IdUsage) > 0) or (Length(IdType) > 0) or (Length(IdUuid) > 0) or (Length(IdLabel) > 0); if not DeviceIsMediaAvailable then begin GetDeviceProperty(Device, 'ID_CDROM_MEDIA', DeviceIsMediaAvailable); end; { WriteLn('Device: ', DeviceFile); WriteLn(' Devtype: ', Value); WriteLn(' IdType: ', IdType); WriteLn(' IdLabel: ', IdLabel ); WriteLn(' IdVersion: ', IdVersion ); WriteLn(' IdUsage: ', IdUsage ); WriteLn(' IdUuid: ', IdUuid ); WriteLn(' DriveIsMediaEjectable: ', DriveIsMediaEjectable ); WriteLn(' DeviceIsSystemInternal: ', DeviceIsSystemInternal ); WriteLn(' DeviceIsPartitionTable: ', DeviceIsPartitionTable ); WriteLn(' DevicePresentationHide: ', DevicePresentationHide ); WriteLn(' DevicePresentationName: ', DevicePresentationName ); WriteLn(' DevicePresentationIconName: ', DevicePresentationIconName ); WriteLn(' DeviceAutomountHint: ', DeviceAutomountHint ); WriteLn(' PartitionSlave: ', PartitionSlave ); WriteLn(' DeviceIsRemovable: ', DeviceIsRemovable ); WriteLn(' DriveConnectionInterface: ', DriveConnectionInterface ); WriteLn(' DriveMediaCompatibility: ', ArrayToString(DriveMediaCompatibility, ',') ); } end; end; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; var path: PAnsiChar; device: Pudev_device; devices: Pudev_list_entry; enumerate: Pudev_enumerate; begin SetLength(DevicesInfos, 0); // Create a list of the devices in the 'block' subsystem enumerate:= udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(enumerate, 'block'); udev_enumerate_scan_devices(enumerate); devices:= udev_enumerate_get_list_entry(enumerate); while devices <> nil do begin // Get the filename of the /sys entry for the device // and create a udev_device object (dev) representing it path:= udev_list_entry_get_name(devices); device:= udev_device_new_from_syspath(udev, path); if Assigned(device) then begin SetLength(DevicesInfos, Length(DevicesInfos) + 1); GetDeviceInfo(path, device, DevicesInfos[High(DevicesInfos)]); udev_device_unref(Device); end; devices:= udev_list_entry_get_next(devices); end; // Free the enumerator object udev_enumerate_unref(enumerate); Result:= Length(DevicesInfos) > 0; end; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; var Device: Pudev_device; begin Device:= udev_device_new_from_syspath(udev, PAnsiChar(ObjectPath)); Result:= Assigned(Device); if Result then begin GetDeviceInfo(PAnsiChar(ObjectPath), Device, Info); udev_device_unref(Device); end; end; function Initialize: Boolean; var Return: cint; begin // Set up a monitor to monitor block devices udev_monitor:= udev_monitor_new_from_netlink(udev, 'udev'); Result:= Assigned(udev_monitor); if Result then try Return:= udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, 'block', nil); Assert(Return = 0, 'udev_monitor_filter_add_match_subsystem_devtype'); Return:= udev_monitor_enable_receiving(udev_monitor); Assert(Return = 0, 'udev_monitor_enable_receiving'); observers:= TUDisksObserverList.Create; udev_monitor_object:= TMonitorObject.Create; except Result:= False; udev_monitor_unref(udev_monitor); udev_monitor:= nil; end; end; procedure Finalize; begin FreeAndNil(udev_monitor_object); FreeAndNil(observers); udev_monitor_unref(udev_monitor); end; procedure AddObserver(Func: TUDisksDeviceNotify); begin if Observers.IndexOf(Func) < 0 then Observers.Add(Func); end; procedure RemoveObserver(Func: TUDisksDeviceNotify); begin Observers.Remove(Func); end; { TMonitorThread } procedure TMonitorObject.ReceiveDevice; var I: Integer; Method: TUDisksMethod; begin if FAction = 'add' then Method:= UDisks_DeviceAdded else if FAction = 'remove' then Method:= UDisks_DeviceRemoved else if FAction = 'change' then Method:= UDisks_DeviceChanged else Method:= UDisks_DeviceChanged; Print('Device ' + FAction + ': ' + FDevicePath); for I := 0 to Observers.Count - 1 do Observers[I](Method, FDevicePath); end; procedure TMonitorObject.Handler(Sender: TObject); var device: Pudev_device; begin // Make the call to ReceiveDevice the device // select() ensured that this will not block device:= udev_monitor_receive_device(udev_monitor); if Assigned(device) then begin FAction:= udev_device_get_action(device); FDevicePath:= udev_device_get_syspath(device); TThread.Synchronize(nil, ReceiveDevice); udev_device_unref(device); end; end; constructor TMonitorObject.Create; var fd: cint; begin // Get the file descriptor (fd) for the monitor // This fd will get passed to poll() fd := udev_monitor_get_fd(udev_monitor); AddPoll(fd, POLLIN, Handler, False); Print('Begin monitoring'); end; initialization Load; finalization Free; end. doublecmd-1.1.30/src/platform/unix/linux/umylinux.pas0000644000175000001440000000447615104114162021734 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific LINUX functions. Copyright (C) 2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uMyLinux; {$mode delphi} interface uses SysUtils; function GetFreeMem(out MemFree, MemTotal: Int64): Boolean; implementation uses DCStrUtils; function Convert(const S: String; Index: Integer): Int64; var V: String; K: Integer; begin K:= 1; V:= Trim(Copy(S, Index, MaxInt)); while (V[K] in ['0'..'9']) do Inc(K); Result:= StrToInt64Def(Copy(V, 1, K - 1), 0); V:= Trim(Copy(V, K, MaxInt)); if Length(V) > 0 then begin case LowerCase(V[1]) of 'k': Result:= Result * 1024; 'm': Result:= Result * 1024 * 1024; 'g': Result:= Result * 1024 * 1024 * 1024; end; end; end; function GetFreeMem(out MemFree, MemTotal: Int64): Boolean; var S: String; F: TextFile; Count: Integer = 0; MemAvailable: Int64; begin try AssignFile(F, '/proc/meminfo'); try Reset(F); repeat ReadLn(F, S); if StrBegins(S, 'MemTotal:') then begin Inc(Count); MemTotal:= Convert(S, 10); end else if StrBegins(S, 'MemFree:') then begin Inc(Count); MemFree:= Convert(S, 9); end else if StrBegins(S, 'MemAvailable:') then begin Inc(Count); MemAvailable:= Convert(S, 14); end; until EOF(F) or (Count = 3); if MemAvailable < MemTotal then begin MemFree:= MemAvailable; end; Result:= (Count = 3); finally System.Close(F); end; except Result:= False; end; end; end. doublecmd-1.1.30/src/platform/unix/linux/umountwatcher.pas0000644000175000001440000000222715104114162022737 0ustar alexxusersunit uMountWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Unix, BaseUnix, CTypes; type { TMountWatcher } TMountWatcher = class private FOnMountEvent: TNotifyEvent; protected procedure DoMountEvent; procedure Handler(Sender: TObject); procedure ShowMessage(const Message: String); public procedure Start; property OnMountEvent: TNotifyEvent read FOnMountEvent write FOnMountEvent; end; implementation uses RtlConsts, DCOSUtils, uDebug, uPollThread; { TMountWatcher } procedure TMountWatcher.DoMountEvent; begin if Assigned(FOnMountEvent) then FOnMountEvent(Self); end; procedure TMountWatcher.Handler(Sender: TObject); begin Sleep(1000); TThread.Synchronize(nil, @DoMountEvent); ShowMessage('DoMountEvent'); end; procedure TMountWatcher.ShowMessage(const Message: String); begin DCDebug(ClassName + ': ' + Message); end; procedure TMountWatcher.Start; var fd: cint; begin fd:= mbFileOpen('/proc/self/mounts', fmOpenRead); if (fd = feInvalidHandle) then ShowMessage(Format(SFOpenError, ['/proc/self/mounts'])) else begin AddPoll(fd, POLLERR, @Handler, True); end; end; end. doublecmd-1.1.30/src/platform/unix/linux/uflatpak.pas0000644000175000001440000001044715104114162021644 0ustar alexxusersunit uFlatpak; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, uMyUnix; function FlatpakOpen(const FileName: String; Ask: Boolean32): Boolean; implementation uses BaseUnix, DCOSUtils, DCUnix, uTrash, uDebug, uGLib2, uGObject2, uGio2; const PORTAL_BUS_NAME = 'org.freedesktop.portal.Desktop'; PORTAL_OBJECT_PATH = '/org/freedesktop/portal/desktop'; PORTAL_INTERFACE_TRASH = 'org.freedesktop.portal.Trash'; PORTAL_INTERFACE_OPENURI = 'org.freedesktop.portal.OpenURI'; var PortalBusName: String; DBusConn: PGDBusConnection = nil; procedure PrintError(AError: PGError); begin DCDebug(AError^.message); g_error_free(AError); end; function FlatpakOpen(const FileName: String; Ask: Boolean32): Boolean; var Res: PGVariant; Handle: THandle; FDList: PGUnixFDList; AError: PGError = nil; Options: TGVariantBuilder; begin if (DBusConn = nil) then Exit(False); Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); if Handle < 0 then Exit(False); FDList:= g_unix_fd_list_new_from_array(@Handle, 1); g_variant_builder_init(@Options, PGVariantType(Pgchar('a{sv}'))); g_variant_builder_add(@Options, '{sv}', ['ask', g_variant_new_boolean(Ask)]); Res:= g_dbus_connection_call_with_unix_fd_list_sync(DBusConn, Pgchar(PortalBusName), PORTAL_OBJECT_PATH, PORTAL_INTERFACE_OPENURI, 'OpenFile', g_variant_new('(sha{sv})', ['', 0, @Options]), nil, G_DBUS_CALL_FLAGS_NONE, -1, FDList, nil, nil, @AError); g_object_unref(PGObject(FDList)); if Assigned(AError) then begin PrintError(AError); end; Result:= Assigned(Res); if Result then g_variant_unref(Res); end; function FileTrash(const FileName: String): Boolean; var Answer: guint; Ret: PGVariant; Handle: THandle; FDList: PGUnixFDList; AError: PGError = nil; begin repeat Handle:= fpOpen(FileName, O_PATH or O_CLOEXEC); until (Handle <> -1) or (fpgeterrno <> ESysEINTR); if Handle < 0 then Exit(False); FDList:= g_unix_fd_list_new_from_array(@Handle, 1); Ret:= g_dbus_connection_call_with_unix_fd_list_sync(DBusConn, Pgchar(PortalBusName), PORTAL_OBJECT_PATH, PORTAL_INTERFACE_TRASH, 'TrashFile', g_variant_new('(h)', [0]), nil, G_DBUS_CALL_FLAGS_NONE, -1, FDList, nil, nil, @AError); g_object_unref(PGObject(FDList)); if Assigned(AError) then begin PrintError(AError); end; if (Ret = nil) then Result:= False else begin g_variant_get(Ret, '(u)', [@Answer]); Result:= (Answer = 1); g_variant_unref(Ret); end; end; procedure Initialize; var AError: PGError = nil; begin if (DesktopEnv = DE_FLATPAK) then begin PortalBusName:= GetEnvironmentVariable('LIBPORTAL_PORTAL_BUS_NAME'); if (Length(PortalBusName) = 0) then PortalBusName:= PORTAL_BUS_NAME; DBusConn:= g_bus_get_sync(G_BUS_TYPE_SESSION, nil, @AError); if (DBusConn = nil) then PrintError(AError) else begin FileTrashUtf8:= @FileTrash; end; end; end; procedure Finalize; begin if Assigned(DBusConn) then g_object_unref(PGObject(DBusConn)); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/linux/uappimage.pas0000644000175000001440000000037615104114162022005 0ustar alexxusersunit uAppImage; {$mode objfpc}{$H+} interface implementation uses BaseUnix; function unsetenv(const name: pansichar): cint; cdecl; external 'c'; initialization if (fpGetEnv(PAnsiChar('APPIMAGE')) <> nil) then unsetenv('PYTHONHOME'); end. doublecmd-1.1.30/src/platform/unix/linux/statx.pp0000644000175000001440000000535115104114162021032 0ustar alexxusersunit statx; {$mode objfpc}{$H+} {$packrecords c} interface uses SysUtils, CTypes; const STATX_BTIME = $00000800; //* Want/got stx_btime */ type statx_timestamp = record tv_sec: cint64; tv_nsec: cuint32; __reserved: cint32; end; PStatX = ^TStatX; TStatX = record //* 0x00 */ stx_mask: cuint32; //* What results were written [uncond] */ stx_blksize: cuint32; //* Preferred general I/O size [uncond] */ stx_attributes: cuint64; //* Flags conveying information about the file [uncond] */ //* 0x10 */ stx_nlink: cuint32; //* Number of hard links */ stx_uid: cuint32; //* User ID of owner */ stx_gid: cuint32; //* Group ID of owner */ stx_mode: cuint16; //* File mode */ __spare0: cuint16; //* 0x20 */ stx_ino: cuint64; //* Inode number */ stx_size: cuint64; //* File size */ stx_blocks: cuint64; //* Number of 512-byte blocks allocated */ stx_attributes_mask: cuint64; //* Mask to show what's supported in stx_attributes */ //* 0x40 */ stx_atime: statx_timestamp; //* Last access time */ stx_btime: statx_timestamp; //* File creation time */ stx_ctime: statx_timestamp; //* Last attribute change time */ stx_mtime: statx_timestamp; //* Last data modification time */ //* 0x80 */ stx_rdev_major: cuint32; //* Device ID of special file [if bdev/cdev] */ stx_rdev_minor: cuint32; stx_dev_major: cuint32; //* ID of device containing file [uncond] */ stx_dev_minor: cuint32; //* 0x90 */ __spare2: array[0..13] of cuint64; //* Spare space for future expansion */ //* 0x100 */ end; function fpstatx(dfd: cint; const path: string; flags: cuint; mask: cuint; buffer: pstatx): cint; var HasStatX: Boolean = False; implementation uses SysCall, Dos, DCConvertEncoding; const {$IF DEFINED(CPUI386)} syscall_nr_statx = 383; {$ELSEIF DEFINED(CPUX86_64)} syscall_nr_statx = 332; {$ELSEIF DEFINED(CPUARM) or DEFINED(CPUARM64)} syscall_nr_statx = 397; {$ELSE} syscall_nr_statx = 0; {$ENDIF} function fpstatx(dfd: cint; const path: string; flags: cuint; mask: cuint; buffer: pstatx): cint; var pathname: String; filename: PAnsiChar; begin if (Length(path) = 0) then filename:= nil else begin pathname:= CeUtf8ToSys(path); filename:= PAnsiChar(pathname); end; {$PUSH}{$WARNINGS OFF}{$HINTS OFF} Result := do_syscall(syscall_nr_statx, TSysParam(dfd), TSysParam(filename), TSysParam(flags), TSysParam(mask), TSysParam(buffer)); {$POP} end; initialization // Linux kernel >= 4.11 HasStatX:= (syscall_nr_statx > 0) and (SwapEndian(DosVersion) >= $40B); end. doublecmd-1.1.30/src/platform/unix/linux/inotify.pp0000644000175000001440000000672015104114162021351 0ustar alexxusersunit inotify; {$mode delphi} {$packrecords c} interface uses InitC, CTypes; type {en Structure describing an inotify event. } inotify_event = record wd: cint32; //en< Watch descriptor. mask: cuint32; //en< Watch mask. cookie: cuint32; //en< Cookie to synchronize two events. len: cuint32; //en< Length (including NULs) of name. name: record end; //en< Stub for possible name (doesn't add to event size). end; {en Pointer to structure describing an inotify event. } pinotify_event = ^inotify_event; const { Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. } IN_ACCESS = $00000001; {en< File was accessed. } IN_MODIFY = $00000002; {en< File was modified. } IN_ATTRIB = $00000004; {en< Metadata changed. } IN_CLOSE_WRITE = $00000008; {en< Writtable file was closed. } IN_CLOSE_NOWRITE = $00000010; {en< Unwrittable file closed. } IN_CLOSE = IN_CLOSE_WRITE or IN_CLOSE_NOWRITE; {en< Close. } IN_OPEN = $00000020; {en< File was opened. } IN_MOVED_FROM = $00000040; {en< File was moved from X. } IN_MOVED_TO = $00000080; {en< File was moved to Y. } IN_MOVE = IN_MOVED_FROM or IN_MOVED_TO; {en< Moves. } IN_CREATE = $00000100; {en< Subfile was created. } IN_DELETE = $00000200; {en< Subfile was deleted. } IN_DELETE_SELF = $00000400; {en< Self was deleted. } IN_MOVE_SELF = $00000800; {en< Self was moved. } { Events sent by the kernel. } IN_UNMOUNT = $00002000; {en< Backing fs was unmounted. } IN_Q_OVERFLOW = $00004000; {en< Event queued overflowed. } IN_IGNORED = $00008000; {en< File was ignored. } { Special flags. } IN_ONLYDIR = $01000000; {en< Only watch the path if it is a directory. } IN_DONT_FOLLOW = $02000000; {en< Do not follow a sym link. } IN_MASK_ADD = $20000000; {en< Add to the mask of an already existing watch. } IN_ISDIR = $40000000; {en< Event occurred against dir. } IN_ONESHOT = $80000000; {en< Only send event once. } {en All events which a program can wait on. } IN_ALL_EVENTS = ((((((((((IN_ACCESS or IN_MODIFY) or IN_ATTRIB) or IN_CLOSE_WRITE) or IN_CLOSE_NOWRITE) or IN_OPEN) or IN_MOVED_FROM) or IN_MOVED_TO) or IN_CREATE) or IN_DELETE) or IN_DELETE_SELF) or IN_MOVE_SELF; {en Create and initialize inotify instance. } function fpinotify_init: cint; {en Add watch of object NAME to inotify instance FD. Notify about events specified by MASK. } function fpinotify_add_watch(fd: cint; pathname: string; mask: cuint32): cint; {en Remove the watch specified by WD from the inotify instance FD. } function fpinotify_rm_watch(fd: cint; wd: cuint32): cint; implementation uses BaseUnix, DCConvertEncoding; function inotify_init: cint; cdecl; external clib; function inotify_rm_watch(__fd: cint; __wd: cuint32): cint; cdecl; external clib; function inotify_add_watch(__fd: cint; __name: pansichar; __mask: cuint32): cint; cdecl; external clib; function fpinotify_init: cint; begin Result:= inotify_init; if Result = -1 then fpseterrno(fpgetCerrno); end; function fpinotify_add_watch(fd: cint; pathname: string; mask: cuint32): cint; begin Result:= inotify_add_watch(fd, PAnsiChar(CeUtf8ToSys(pathname)), mask); if Result = -1 then fpseterrno(fpgetCerrno); end; function fpinotify_rm_watch(fd: cint; wd: cuint32): cint; begin Result:= inotify_rm_watch(fd, wd); if Result = -1 then fpseterrno(fpgetCerrno); end; end. doublecmd-1.1.30/src/platform/unix/haiku/0000755000175000001440000000000015104114162017264 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/haiku/ipc.pas0000644000175000001440000000172615104114162020552 0ustar alexxusersunit ipc; {$mode objfpc}{$H+} {$packrecords c} interface uses BaseUnix, CTypes; const IPC_CREAT = &01000; IPC_EXCL = &02000; IPC_NOWAIT = &04000; IPC_RMID = 0; IPC_SET = 1; IPC_STAT = 2; type key_t = cint32; TKey = key_t; function ftok(path: pansichar; id: cint): key_t; cdecl; external clib; const SEM_GETPID = 3; SEM_GETVAL = 4; SEM_SETVAL = 8; SEM_UNDO = 10; type sembuf = record sem_num: cushort; sem_op: cshort; sem_flg: cshort; end; Tsembuf = sembuf; Psembuf = ^sembuf; semun = record case cint of 0 : ( val : cint ); 1 : ( buf : Pointer ); end; Tsemun = semun; Psemun = ^semun; function semctl(semID: cint; semNum: cint; command: cint; var arg: tsemun): cint; cdecl; external clib; function semget(key: key_t; numSems: cint; semFlags: cint): cint; cdecl; external clib; function semop(semID: cint; semOps: Psembuf; numSemOps: csize_t): cint; cdecl; external clib; implementation end. doublecmd-1.1.30/src/platform/unix/gtk2/0000755000175000001440000000000015104114162017032 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/gtk2/interfaces.pas0000644000175000001440000001260015104114162021661 0ustar alexxusersunit Interfaces; {$mode objfpc}{$H+} interface uses InterfaceBase, LCLType, Gtk2Int; type { TGtk2WidgetSetEx } TGtk2WidgetSetEx = class(TGtk2WidgetSet) public function SetCursor(ACursor: HICON): HCURSOR; override; end; implementation uses Forms, Controls, Gtk2Extra, Gtk2Def, Gtk2Proc, Glib2, Gdk2, Gtk2, Gdk2x, X, XLib; procedure XSetWindowCursor(AWindow: PGdkWindow; ACursor: PGdkCursor); var XCursor: TCursor = None; begin gdk_window_set_cursor(AWindow, ACursor); if Assigned(ACursor) then begin XCursor:= gdk_x11_cursor_get_xcursor(ACursor) end; XDefineCursor(gdk_x11_get_default_xdisplay, gdk_x11_drawable_get_xid(AWindow), XCursor); end; {------------------------------------------------------------------------------ procedure: SetWindowCursor Params: AWindow : PGDkWindow, ACursor: PGdkCursor, ASetDefault: Boolean Returns: Nothing Sets the cursor for a window. Tries to avoid messing with the cursors of implicitly created child windows (e.g. headers in TListView) with the following logic: - If Cursor <> nil, saves the old cursor (if not already done or ASetDefault = true) before setting the new one. - If Cursor = nil, restores the old cursor (if not already done). Unfortunately gdk_window_get_cursor is only available from version 2.18, so it needs to be retrieved dynamically. If gdk_window_get_cursor is not available, the cursor is set according to LCL widget data. ------------------------------------------------------------------------------} procedure SetWindowCursor(AWindow: PGdkWindow; Cursor: PGdkCursor; ASetDefault: Boolean); var OldCursor: PGdkCursor; Data: gpointer; Info: PWidgetInfo; begin Info := nil; gdk_window_get_user_data(AWindow, @Data); if (Data <> nil) and GTK_IS_WIDGET(Data) then begin Info := GetWidgetInfo(PGtkWidget(Data)); end; if not Assigned(gdk_window_get_cursor) and (Info = nil) then Exit; if ASetDefault then //and ((Cursor <> nil) or ( <> nil)) then begin // Override any old default cursor g_object_steal_data(PGObject(AWindow), 'havesavedcursor'); // OK? g_object_steal_data(PGObject(AWindow), 'savedcursor'); XSetWindowCursor(AWindow, Cursor); Exit; end; if Cursor <> nil then begin if Assigned(gdk_window_get_cursor) then OldCursor := gdk_window_get_cursor(AWindow) else OldCursor := {%H-}PGdkCursor(Info^.ControlCursor); // As OldCursor can be nil, use a separate key to indicate whether it // is stored. if ASetDefault or (g_object_get_data(PGObject(AWindow), 'havesavedcursor') = nil) then begin g_object_set_data(PGObject(AWindow), 'havesavedcursor', gpointer(1)); g_object_set_data(PGObject(AWindow), 'savedcursor', gpointer(OldCursor)); end; // gdk_pointer_grab(AWindow, False, 0, AWindow, Cursor, 1); try XSetWindowCursor(AWindow, Cursor); finally // gdk_pointer_ungrab(0); end; end else begin if g_object_steal_data(PGObject(AWindow), 'havesavedcursor') <> nil then begin Cursor := g_object_steal_data(PGObject(AWindow), 'savedcursor'); XSetWindowCursor(AWindow, Cursor); end; end; end; {------------------------------------------------------------------------------ procedure: SetWindowCursor Params: AWindow : PGDkWindow, ACursor: HCursor, ARecursive: Boolean Returns: Nothing Sets the cursor for a window (or recursively for window with children) ------------------------------------------------------------------------------} procedure SetWindowCursor(AWindow: PGdkWindow; ACursor: HCursor; ARecursive: Boolean; ASetDefault: Boolean); var Cursor: PGdkCursor; procedure SetCursorRecursive(AWindow: PGdkWindow); var ChildWindows, ListEntry: PGList; begin SetWindowCursor(AWindow, Cursor, ASetDefault); ChildWindows := gdk_window_get_children(AWindow); ListEntry := ChildWindows; while ListEntry <> nil do begin SetCursorRecursive(PGdkWindow(ListEntry^.Data)); ListEntry := ListEntry^.Next; end; g_list_free(ChildWindows); end; begin Cursor := {%H-}PGdkCursor(ACursor); if ARecursive then SetCursorRecursive(AWindow) else SetWindowCursor(AWindow, Cursor, ASetDefault); end; {------------------------------------------------------------------------------ procedure: SetGlobalCursor Params: ACursor: HCursor Returns: Nothing Sets the cursor for all toplevel windows. Also sets the cursor for all child windows recursively provided gdk_get_window_cursor is available. ------------------------------------------------------------------------------} procedure SetGlobalCursor(Cursor: HCURSOR); var TopList, List: PGList; begin TopList := gdk_window_get_toplevels; List := TopList; while List <> nil do begin if (List^.Data <> nil) then SetWindowCursor(PGDKWindow(List^.Data), Cursor, Assigned(gdk_window_get_cursor), False); list := g_list_next(list); end; if TopList <> nil then g_list_free(TopList); end; { TGtk2WidgetSetEx } function TGtk2WidgetSetEx.SetCursor(ACursor: HICON): HCURSOR; begin gdk_window_get_cursor:= nil; // set global gtk cursor Result := FGlobalCursor; if ACursor = FGlobalCursor then Exit; if ACursor = Screen.Cursors[crDefault] then SetGlobalCursor(0) else SetGlobalCursor(ACursor); FGlobalCursor := ACursor; end; initialization CreateWidgetset(TGtk2WidgetSetEx); finalization FreeWidgetSet; end. doublecmd-1.1.30/src/platform/unix/gst.pas0000644000175000001440000000710015104114162017463 0ustar alexxusersunit gst; {$mode delphi} {$packenum 4} interface uses SysUtils, CTypes, uGlib2; const GST_CLOCK_TIME_NONE = UInt64(-1); const GST_MESSAGE_EOS = (1 << 0); GST_MESSAGE_ERROR = (1 << 1); type GstState = ( GST_STATE_VOID_PENDING = 0, GST_STATE_NULL = 1, GST_STATE_READY = 2, GST_STATE_PAUSED = 3, GST_STATE_PLAYING = 4 ); GstStateChangeReturn = ( GST_STATE_CHANGE_FAILURE = 0, GST_STATE_CHANGE_SUCCESS = 1, GST_STATE_CHANGE_ASYNC = 2, GST_STATE_CHANGE_NO_PREROLL = 3 ); type GstClockTime = guint64; PGstBus = type Pointer; PGstElement = type Pointer; PGstMessage = type Pointer; PGstMiniObject = type Pointer; GstMessageType = type Integer; var gst_object_unref: procedure(object_: gpointer); cdecl; gst_element_get_bus: function(element: PGstElement): PGstBus; cdecl; gst_mini_object_unref: procedure(mini_object: PGstMiniObject); cdecl; gst_init_check: function(argc: pcint; argv: PPChar; error: PPGError): gboolean; cdecl; gst_element_set_state: function(element: PGstElement; state: GstState): GstStateChangeReturn; cdecl; gst_element_factory_make: function(const factoryname: Pgchar; const name: Pgchar): PGstElement; cdecl; gst_bus_timed_pop_filtered: function(bus: PGstBus; timeout: GstClockTime; types: GstMessageType): PGstMessage; cdecl; function GST_Initialize: Boolean; function GST_Play(const FileName: String): Boolean; implementation uses URIParser, LazLogger, DCOSUtils, uGObject2; function WaitMsg(Parameter: Pointer): PtrInt; var bus: PGstBus; msg: PGstMessage; playbin: PGstElement absolute Parameter; begin Result:= 0; bus:= gst_element_get_bus(playbin); msg:= gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_EOS or GST_MESSAGE_ERROR); if Assigned(msg) then begin gst_mini_object_unref(msg); end; gst_object_unref(bus); gst_element_set_state(playbin, GST_STATE_NULL); gst_object_unref(playbin); end; function GST_Play(const FileName: String): Boolean; var playbin: PGstElement; res: GstStateChangeReturn; begin playbin:= gst_element_factory_make ('playbin', 'playbin'); Result:= Assigned(playbin); if Result then begin g_object_set(playbin, 'uri', [Pgchar(FilenameToURI(FileName)), nil]); BeginThread(@WaitMsg, playbin); res:= gst_element_set_state(playbin, GST_STATE_PLAYING); Result:= (res <> GST_STATE_CHANGE_FAILURE); end; end; const gstlib = 'libgstreamer-1.0.so.0'; var libgst: TLibHandle; function GST_Initialize: Boolean; var AMsg: String; AError: PGError = nil; begin libgst:= SafeLoadLibrary(gstlib); Result:= (libgst <> NilHandle); if Result then try gst_init_check:= SafeGetProcAddress(libgst, 'gst_init_check'); gst_object_unref:= SafeGetProcAddress(libgst, 'gst_object_unref'); gst_element_get_bus:= SafeGetProcAddress(libgst, 'gst_element_get_bus'); gst_mini_object_unref:= SafeGetProcAddress(libgst, 'gst_mini_object_unref'); gst_element_set_state:= SafeGetProcAddress(libgst, 'gst_element_set_state'); gst_element_factory_make:= SafeGetProcAddress(libgst, 'gst_element_factory_make'); gst_bus_timed_pop_filtered:= SafeGetProcAddress(libgst, 'gst_bus_timed_pop_filtered'); Result:= gst_init_check(nil, nil, @AError); if not Result then begin AMsg:= AError^.message; g_error_free(AError); raise Exception.Create(AMsg); end; except on E: Exception do begin Result:= False; DebugLn(E.Message); FreeLibrary(libgst); end; end; end; end. doublecmd-1.1.30/src/platform/unix/glib/0000755000175000001440000000000015104114162017100 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/glib/ugobject2.pas0000644000175000001440000020553615104114162021504 0ustar alexxusers{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGObject2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} {$LINKLIB libgobject-2.0.so.0} interface uses CTypes, uGLib2; const GObject2_library = 'libgobject-2.0.so.0'; PARAM_MASK = 255; PARAM_READWRITE = 0; PARAM_STATIC_STRINGS = 0; PARAM_USER_SHIFT = 8; SIGNAL_FLAGS_MASK = 511; SIGNAL_MATCH_MASK = 63; TYPE_FLAG_RESERVED_ID_BIT = 1; TYPE_FUNDAMENTAL_MAX = 255; TYPE_FUNDAMENTAL_SHIFT = 2; TYPE_RESERVED_BSE_FIRST = 32; TYPE_RESERVED_BSE_LAST = 48; TYPE_RESERVED_GLIB_FIRST = 22; TYPE_RESERVED_GLIB_LAST = 31; TYPE_RESERVED_USER_FIRST = 49; VALUE_COLLECT_FORMAT_MAX_LENGTH = 8; VALUE_NOCOPY_CONTENTS = 134217728; type TGBindingFlags = Integer; const { GBindingFlags } G_BINDING_DEFAULT: TGBindingFlags = 0; G_BINDING_BIDIRECTIONAL: TGBindingFlags = 1; G_BINDING_SYNC_CREATE: TGBindingFlags = 2; G_BINDING_INVERT_BOOLEAN: TGBindingFlags = 4; type TGConnectFlags = Integer; const { GConnectFlags } G_CONNECT_AFTER: TGConnectFlags = 1; G_CONNECT_SWAPPED: TGConnectFlags = 2; type TGParamFlags = Integer; const { GParamFlags } G_PARAM_READABLE: TGParamFlags = 1; G_PARAM_WRITABLE: TGParamFlags = 2; G_PARAM_CONSTRUCT: TGParamFlags = 4; G_PARAM_CONSTRUCT_ONLY: TGParamFlags = 8; G_PARAM_LAX_VALIDATION: TGParamFlags = 16; G_PARAM_STATIC_NAME: TGParamFlags = 32; G_PARAM_PRIVATE: TGParamFlags = 32; G_PARAM_STATIC_NICK: TGParamFlags = 64; G_PARAM_STATIC_BLURB: TGParamFlags = 128; type TGSignalFlags = Integer; const { GSignalFlags } G_SIGNAL_RUN_FIRST: TGSignalFlags = 1; G_SIGNAL_RUN_LAST: TGSignalFlags = 2; G_SIGNAL_RUN_CLEANUP: TGSignalFlags = 4; G_SIGNAL_NO_RECURSE: TGSignalFlags = 8; G_SIGNAL_DETAILED: TGSignalFlags = 16; G_SIGNAL_ACTION: TGSignalFlags = 32; G_SIGNAL_NO_HOOKS: TGSignalFlags = 64; G_SIGNAL_MUST_COLLECT: TGSignalFlags = 128; G_SIGNAL_DEPRECATED: TGSignalFlags = 256; type TGSignalMatchType = Integer; const { GSignalMatchType } G_SIGNAL_MATCH_ID: TGSignalMatchType = 1; G_SIGNAL_MATCH_DETAIL: TGSignalMatchType = 2; G_SIGNAL_MATCH_CLOSURE: TGSignalMatchType = 4; G_SIGNAL_MATCH_FUNC: TGSignalMatchType = 8; G_SIGNAL_MATCH_DATA: TGSignalMatchType = 16; G_SIGNAL_MATCH_UNBLOCKED: TGSignalMatchType = 32; type TGTypeDebugFlags = Integer; const { GTypeDebugFlags } G_TYPE_DEBUG_NONE: TGTypeDebugFlags = 0; G_TYPE_DEBUG_OBJECTS: TGTypeDebugFlags = 1; G_TYPE_DEBUG_SIGNALS: TGTypeDebugFlags = 2; G_TYPE_DEBUG_MASK: TGTypeDebugFlags = 3; type TGTypeFlags = Integer; const { GTypeFlags } G_TYPE_FLAG_ABSTRACT: TGTypeFlags = 16; G_TYPE_FLAG_VALUE_ABSTRACT: TGTypeFlags = 32; type TGTypeFundamentalFlags = Integer; const { GTypeFundamentalFlags } G_TYPE_FLAG_CLASSED: TGTypeFundamentalFlags = 1; G_TYPE_FLAG_INSTANTIATABLE: TGTypeFundamentalFlags = 2; G_TYPE_FLAG_DERIVABLE: TGTypeFundamentalFlags = 4; G_TYPE_FLAG_DEEP_DERIVABLE: TGTypeFundamentalFlags = 8; type PPGClosure = ^PGClosure; PGClosure = ^TGClosure; PPPGValue = ^PPGValue; PPGValue = ^PGValue; PGValue = ^TGValue; TGClosureMarshal = procedure(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; PPGSignalCMarshaller = ^PGSignalCMarshaller; PGSignalCMarshaller = ^TGSignalCMarshaller; TGSignalCMarshaller = TGClosureMarshal; TGVaClosureMarshal = procedure(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; PPGSignalCVaMarshaller = ^PGSignalCVaMarshaller; PGSignalCVaMarshaller = ^TGSignalCVaMarshaller; TGSignalCVaMarshaller = TGVaClosureMarshal; PPGType = ^PGType; PGType = ^TGType; TGType = gsize; TGBaseFinalizeFunc = procedure(g_class: gpointer); cdecl; TGBaseInitFunc = procedure(g_class: gpointer); cdecl; PPGBindingFlags = ^PGBindingFlags; PGBindingFlags = ^TGBindingFlags; PPGBinding = ^PGBinding; PGBinding = ^TGBinding; PPGObject = ^PGObject; PGObject = ^TGObject; PPGParameter = ^PGParameter; PGParameter = ^TGParameter; PPGParamSpec = ^PGParamSpec; PGParamSpec = ^TGParamSpec; PPGToggleNotify = ^PGToggleNotify; PGToggleNotify = ^TGToggleNotify; TGToggleNotify = procedure(data: gpointer; object_: PGObject; is_last_ref: gboolean); cdecl; PPGBindingTransformFunc = ^PGBindingTransformFunc; PGBindingTransformFunc = ^TGBindingTransformFunc; TGBindingTransformFunc = function(binding: PGBinding; source_value: PGValue; target_value: PGValue; user_data: gpointer): gboolean; cdecl; PPGWeakNotify = ^PGWeakNotify; PGWeakNotify = ^TGWeakNotify; TGWeakNotify = procedure(data: gpointer; where_the_object_was: PGObject); cdecl; PPGTypeInstance = ^PGTypeInstance; PGTypeInstance = ^TGTypeInstance; PPGTypeClass = ^PGTypeClass; PGTypeClass = ^TGTypeClass; TGTypeInstance = object g_class: PGTypeClass; end; TGObject = object g_type_instance: TGTypeInstance; ref_count: guint; qdata: PGData; end; TGBinding = object(TGObject) end; PPGValueTransform = ^PGValueTransform; PGValueTransform = ^TGValueTransform; TGValueTransform = procedure(src_value: PGValue; dest_value: PGValue); cdecl; PP_Value__data__union = ^P_Value__data__union; P_Value__data__union = ^T_Value__data__union; T_Value__data__union = record case longint of 0 : (v_int: gint); 1 : (v_uint: guint); 2 : (v_long: glong); 3 : (v_ulong: gulong); 4 : (v_int64: gint64); 5 : (v_uint64: guint64); 6 : (v_float: gfloat); 7 : (v_double: gdouble); 8 : (v_pointer: gpointer); end; TGValue = object g_type: TGType; data: array [0..1] of T_Value__data__union; end; TGBoxedCopyFunc = function(boxed: gpointer): gpointer; cdecl; TGBoxedFreeFunc = procedure(boxed: gpointer); cdecl; PPGClosureNotify = ^PGClosureNotify; PGClosureNotify = ^TGClosureNotify; TGClosureNotify = procedure(data: gpointer; closure: PGClosure); cdecl; PPGClosureMarshal = ^PGClosureMarshal; PGClosureMarshal = ^TGClosureMarshal; TGClosureBitfield0 = bitpacked record ref_count: guint15 { changed from guint to accomodate 15 bitsize requirement }; meta_marshal_nouse: guint1 { changed from guint to accomodate 1 bitsize requirement }; n_guards: guint1 { changed from guint to accomodate 1 bitsize requirement }; n_fnotifiers: guint2 { changed from guint to accomodate 2 bitsize requirement }; n_inotifiers: guint8 { changed from guint to accomodate 8 bitsize requirement }; in_inotify: guint1 { changed from guint to accomodate 1 bitsize requirement }; floating: guint1 { changed from guint to accomodate 1 bitsize requirement }; derivative_flag: guint1 { changed from guint to accomodate 1 bitsize requirement }; in_marshal: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_invalid: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; PPGClosureNotifyData = ^PGClosureNotifyData; PGClosureNotifyData = ^TGClosureNotifyData; TGClosure = object Bitfield0 : TGClosureBitfield0; { auto generated type } marshal: procedure(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; data: gpointer; notifiers: PGClosureNotifyData; end; TGCallback = procedure; cdecl; PPGCClosure = ^PGCClosure; PGCClosure = ^TGCClosure; PPGCallback = ^PGCallback; PGCallback = ^TGCallback; TGCClosure = object closure: TGClosure; callback: gpointer; end; TGClassFinalizeFunc = procedure(g_class: gpointer; class_data: gpointer); cdecl; TGClassInitFunc = procedure(g_class: gpointer; class_data: gpointer); cdecl; TGClosureNotifyData = record data: gpointer; notify: TGClosureNotify; end; PPGConnectFlags = ^PGConnectFlags; PGConnectFlags = ^TGConnectFlags; TGTypeClass = object g_type: TGType; end; PPGEnumValue = ^PGEnumValue; PGEnumValue = ^TGEnumValue; TGEnumValue = record value: gint; value_name: Pgchar; value_nick: Pgchar; end; PPGEnumClass = ^PGEnumClass; PGEnumClass = ^TGEnumClass; TGEnumClass = record g_type_class: TGTypeClass; minimum: gint; maximum: gint; n_values: guint; values: PGEnumValue; end; PPGFlagsValue = ^PGFlagsValue; PGFlagsValue = ^TGFlagsValue; TGFlagsValue = record value: guint; value_name: Pgchar; value_nick: Pgchar; end; PPGFlagsClass = ^PGFlagsClass; PGFlagsClass = ^TGFlagsClass; TGFlagsClass = record g_type_class: TGTypeClass; mask: guint; n_values: guint; values: PGFlagsValue; end; PPGInitiallyUnowned = ^PGInitiallyUnowned; PGInitiallyUnowned = ^TGInitiallyUnowned; TGInitiallyUnowned = object(TGObject) end; PPGObjectConstructParam = ^PGObjectConstructParam; PGObjectConstructParam = ^TGObjectConstructParam; TGObjectConstructParam = record pspec: PGParamSpec; value: PGValue; end; PPGParamFlags = ^PGParamFlags; PGParamFlags = ^TGParamFlags; TGParamSpec = object g_type_instance: TGTypeInstance; name: Pgchar; flags: TGParamFlags; value_type: TGType; owner_type: TGType; _nick: Pgchar; _blurb: Pgchar; qdata: PGData; ref_count: guint; param_id: guint; end; PPGInitiallyUnownedClass = ^PGInitiallyUnownedClass; PGInitiallyUnownedClass = ^TGInitiallyUnownedClass; TGInitiallyUnownedClass = object g_type_class: TGTypeClass; construct_properties: PGSList; constructor_: function(type_: TGType; n_construct_properties: guint; construct_properties: PGObjectConstructParam): PGObject; cdecl; set_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; get_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; dispose: procedure(object_: PGObject); cdecl; finalize: procedure(object_: PGObject); cdecl; dispatch_properties_changed: procedure(object_: PGObject; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; notify: procedure(object_: PGObject; pspec: PGParamSpec); cdecl; constructed: procedure(object_: PGObject); cdecl; flags: gsize; pdummy: array [0..5] of gpointer; end; TGInstanceInitFunc = procedure(instance: PGTypeInstance; g_class: gpointer); cdecl; TGInterfaceFinalizeFunc = procedure(g_iface: gpointer; iface_data: gpointer); cdecl; TGInterfaceInitFunc = procedure(g_iface: gpointer; iface_data: gpointer); cdecl; PPGInterfaceInfo = ^PGInterfaceInfo; PGInterfaceInfo = ^TGInterfaceInfo; PPGInterfaceInitFunc = ^PGInterfaceInitFunc; PGInterfaceInitFunc = ^TGInterfaceInitFunc; PPGInterfaceFinalizeFunc = ^PGInterfaceFinalizeFunc; PGInterfaceFinalizeFunc = ^TGInterfaceFinalizeFunc; TGInterfaceInfo = record interface_init: TGInterfaceInitFunc; interface_finalize: TGInterfaceFinalizeFunc; interface_data: gpointer; end; TGParameter = record name: Pgchar; value: TGValue; end; PPGObjectClass = ^PGObjectClass; PGObjectClass = ^TGObjectClass; TGObjectClass = object g_type_class: TGTypeClass; construct_properties: PGSList; constructor_: function(type_: TGType; n_construct_properties: guint; construct_properties: PGObjectConstructParam): PGObject; cdecl; set_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; get_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; dispose: procedure(object_: PGObject); cdecl; finalize: procedure(object_: PGObject); cdecl; dispatch_properties_changed: procedure(object_: PGObject; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; notify: procedure(object_: PGObject; pspec: PGParamSpec); cdecl; constructed: procedure(object_: PGObject); cdecl; flags: gsize; pdummy: array [0..5] of gpointer; end; TGObjectFinalizeFunc = procedure(object_: PGObject); cdecl; TGObjectGetPropertyFunc = procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; TGObjectSetPropertyFunc = procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; PPGParamSpecBoolean = ^PGParamSpecBoolean; PGParamSpecBoolean = ^TGParamSpecBoolean; TGParamSpecBoolean = object(TGParamSpec) default_value: gboolean; end; PPGParamSpecBoxed = ^PGParamSpecBoxed; PGParamSpecBoxed = ^TGParamSpecBoxed; TGParamSpecBoxed = object(TGParamSpec) end; PPGParamSpecChar = ^PGParamSpecChar; PGParamSpecChar = ^TGParamSpecChar; TGParamSpecChar = object(TGParamSpec) minimum: gint8; maximum: gint8; default_value: gint8; end; PPGParamSpecClass = ^PGParamSpecClass; PGParamSpecClass = ^TGParamSpecClass; TGParamSpecClass = object g_type_class: TGTypeClass; value_type: TGType; finalize: procedure(pspec: PGParamSpec); cdecl; value_set_default: procedure(pspec: PGParamSpec; value: PGValue); cdecl; value_validate: function(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; values_cmp: function(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; dummy: array [0..3] of gpointer; end; PPGParamSpecDouble = ^PGParamSpecDouble; PGParamSpecDouble = ^TGParamSpecDouble; TGParamSpecDouble = object(TGParamSpec) minimum: gdouble; maximum: gdouble; default_value: gdouble; epsilon: gdouble; end; PPGParamSpecEnum = ^PGParamSpecEnum; PGParamSpecEnum = ^TGParamSpecEnum; TGParamSpecEnum = object(TGParamSpec) enum_class: PGEnumClass; default_value: gint; end; PPGParamSpecFlags = ^PGParamSpecFlags; PGParamSpecFlags = ^TGParamSpecFlags; TGParamSpecFlags = object(TGParamSpec) flags_class: PGFlagsClass; default_value: guint; end; PPGParamSpecFloat = ^PGParamSpecFloat; PGParamSpecFloat = ^TGParamSpecFloat; TGParamSpecFloat = object(TGParamSpec) minimum: gfloat; maximum: gfloat; default_value: gfloat; epsilon: gfloat; end; PPGParamSpecGType = ^PGParamSpecGType; PGParamSpecGType = ^TGParamSpecGType; TGParamSpecGType = object(TGParamSpec) is_a_type: TGType; end; PPGParamSpecInt = ^PGParamSpecInt; PGParamSpecInt = ^TGParamSpecInt; TGParamSpecInt = object(TGParamSpec) minimum: gint; maximum: gint; default_value: gint; end; PPGParamSpecInt64 = ^PGParamSpecInt64; PGParamSpecInt64 = ^TGParamSpecInt64; TGParamSpecInt64 = object(TGParamSpec) minimum: gint64; maximum: gint64; default_value: gint64; end; PPGParamSpecLong = ^PGParamSpecLong; PGParamSpecLong = ^TGParamSpecLong; TGParamSpecLong = object(TGParamSpec) minimum: glong; maximum: glong; default_value: glong; end; PPGParamSpecObject = ^PGParamSpecObject; PGParamSpecObject = ^TGParamSpecObject; TGParamSpecObject = object(TGParamSpec) end; PPGParamSpecOverride = ^PGParamSpecOverride; PGParamSpecOverride = ^TGParamSpecOverride; TGParamSpecOverride = object(TGParamSpec) overridden: PGParamSpec; end; PPGParamSpecParam = ^PGParamSpecParam; PGParamSpecParam = ^TGParamSpecParam; TGParamSpecParam = object(TGParamSpec) end; PPGParamSpecPointer = ^PGParamSpecPointer; PGParamSpecPointer = ^TGParamSpecPointer; TGParamSpecPointer = object(TGParamSpec) end; PPGParamSpecPool = ^PGParamSpecPool; PGParamSpecPool = ^TGParamSpecPool; TGParamSpecPool = object end; PPGParamSpecString = ^PGParamSpecString; PGParamSpecString = ^TGParamSpecString; TGParamSpecStringBitfield0 = bitpacked record null_fold_if_empty: guint1 { changed from guint to accomodate 1 bitsize requirement }; ensure_non_null: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGParamSpecString = object(TGParamSpec) default_value: Pgchar; cset_first: Pgchar; cset_nth: Pgchar; substitutor: gchar; Bitfield0 : TGParamSpecStringBitfield0; { auto generated type } end; PPGParamSpecTypeInfo = ^PGParamSpecTypeInfo; PGParamSpecTypeInfo = ^TGParamSpecTypeInfo; TGParamSpecTypeInfo = record instance_size: guint16; n_preallocs: guint16; instance_init: procedure(pspec: PGParamSpec); cdecl; value_type: TGType; finalize: procedure(pspec: PGParamSpec); cdecl; value_set_default: procedure(pspec: PGParamSpec; value: PGValue); cdecl; value_validate: function(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; values_cmp: function(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; end; PPGParamSpecUChar = ^PGParamSpecUChar; PGParamSpecUChar = ^TGParamSpecUChar; TGParamSpecUChar = object(TGParamSpec) minimum: guint8; maximum: guint8; default_value: guint8; end; PPGParamSpecUInt = ^PGParamSpecUInt; PGParamSpecUInt = ^TGParamSpecUInt; TGParamSpecUInt = object(TGParamSpec) minimum: guint; maximum: guint; default_value: guint; end; PPGParamSpecUInt64 = ^PGParamSpecUInt64; PGParamSpecUInt64 = ^TGParamSpecUInt64; TGParamSpecUInt64 = object(TGParamSpec) minimum: guint64; maximum: guint64; default_value: guint64; end; PPGParamSpecULong = ^PGParamSpecULong; PGParamSpecULong = ^TGParamSpecULong; TGParamSpecULong = object(TGParamSpec) minimum: gulong; maximum: gulong; default_value: gulong; end; PPGParamSpecUnichar = ^PGParamSpecUnichar; PGParamSpecUnichar = ^TGParamSpecUnichar; TGParamSpecUnichar = object(TGParamSpec) default_value: gunichar; end; PPGParamSpecValueArray = ^PGParamSpecValueArray; PGParamSpecValueArray = ^TGParamSpecValueArray; TGParamSpecValueArray = object(TGParamSpec) element_spec: PGParamSpec; fixed_n_elements: guint; end; PPGParamSpecVariant = ^PGParamSpecVariant; PGParamSpecVariant = ^TGParamSpecVariant; TGParamSpecVariant = object(TGParamSpec) type_: PGVariantType; default_value: PGVariant; padding: array [0..3] of gpointer; end; PPGSignalInvocationHint = ^PGSignalInvocationHint; PGSignalInvocationHint = ^TGSignalInvocationHint; PPGSignalFlags = ^PGSignalFlags; PGSignalFlags = ^TGSignalFlags; TGSignalInvocationHint = record signal_id: guint; detail: TGQuark; run_type: TGSignalFlags; end; TGSignalAccumulator = function(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; data: gpointer): gboolean; cdecl; TGSignalEmissionHook = function(ihint: PGSignalInvocationHint; n_param_values: guint; param_values: PGValue; data: gpointer): gboolean; cdecl; PPGSignalMatchType = ^PGSignalMatchType; PGSignalMatchType = ^TGSignalMatchType; PPGSignalQuery = ^PGSignalQuery; PGSignalQuery = ^TGSignalQuery; TGSignalQuery = record signal_id: guint; signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; return_type: TGType; n_params: guint; param_types: PGType; end; TGTypeCValue = record case longint of 0 : (v_int: gint); 1 : (v_long: glong); 2 : (v_int64: gint64); 3 : (v_double: gdouble); 4 : (v_pointer: gpointer); end; TGTypeClassCacheFunc = function(cache_data: gpointer; g_class: PGTypeClass): gboolean; cdecl; PPGTypeDebugFlags = ^PGTypeDebugFlags; PGTypeDebugFlags = ^TGTypeDebugFlags; PPGTypeFlags = ^PGTypeFlags; PGTypeFlags = ^TGTypeFlags; PPGTypeFundamentalFlags = ^PGTypeFundamentalFlags; PGTypeFundamentalFlags = ^TGTypeFundamentalFlags; PPGTypeFundamentalInfo = ^PGTypeFundamentalInfo; PGTypeFundamentalInfo = ^TGTypeFundamentalInfo; TGTypeFundamentalInfo = record type_flags: TGTypeFundamentalFlags; end; PPGTypeValueTable = ^PGTypeValueTable; PGTypeValueTable = ^TGTypeValueTable; PPGTypeCValue = ^PGTypeCValue; PGTypeCValue = ^TGTypeCValue; TGTypeValueTable = object value_init: procedure(value: PGValue); cdecl; value_free: procedure(value: PGValue); cdecl; value_copy: procedure(src_value: PGValue; dest_value: PGValue); cdecl; value_peek_pointer: function(value: PGValue): gpointer; cdecl; collect_format: Pgchar; collect_value: function(value: PGValue; n_collect_values: guint; collect_values: PGTypeCValue; collect_flags: guint): Pgchar; cdecl; lcopy_format: Pgchar; lcopy_value: function(value: PGValue; n_collect_values: guint; collect_values: PGTypeCValue; collect_flags: guint): Pgchar; cdecl; end; PPGTypeInfo = ^PGTypeInfo; PGTypeInfo = ^TGTypeInfo; PPGBaseInitFunc = ^PGBaseInitFunc; PGBaseInitFunc = ^TGBaseInitFunc; PPGBaseFinalizeFunc = ^PGBaseFinalizeFunc; PGBaseFinalizeFunc = ^TGBaseFinalizeFunc; PPGClassInitFunc = ^PGClassInitFunc; PGClassInitFunc = ^TGClassInitFunc; PPGClassFinalizeFunc = ^PGClassFinalizeFunc; PGClassFinalizeFunc = ^TGClassFinalizeFunc; PPGInstanceInitFunc = ^PGInstanceInitFunc; PGInstanceInitFunc = ^TGInstanceInitFunc; TGTypeInfo = record class_size: guint16; base_init: TGBaseInitFunc; base_finalize: TGBaseFinalizeFunc; class_init: TGClassInitFunc; class_finalize: TGClassFinalizeFunc; class_data: Pgpointer; instance_size: guint16; n_preallocs: guint16; instance_init: TGInstanceInitFunc; value_table: PGTypeValueTable; end; PPGTypeInterface = ^PGTypeInterface; PGTypeInterface = ^TGTypeInterface; PPGTypePlugin = ^PGTypePlugin; PGTypePlugin = ^TGTypePlugin; TGTypeInterface = object g_type: TGType; g_instance_type: TGType; end; TGTypePlugin = object end; TGTypeInterfaceCheckFunc = procedure(check_data: gpointer; g_iface: gpointer); cdecl; PPGTypeModule = ^PGTypeModule; PGTypeModule = ^TGTypeModule; TGTypeModule = object(TGObject) use_count: guint; type_infos: PGSList; interface_infos: PGSList; name: Pgchar; end; PPGTypeModuleClass = ^PGTypeModuleClass; PGTypeModuleClass = ^TGTypeModuleClass; TGTypeModuleClass = object parent_class: TGObjectClass; load: function(module: PGTypeModule): gboolean; cdecl; unload: procedure(module: PGTypeModule); cdecl; reserved1: procedure; cdecl; reserved2: procedure; cdecl; reserved3: procedure; cdecl; reserved4: procedure; cdecl; end; TGTypePluginUse = procedure(plugin: PGTypePlugin); cdecl; TGTypePluginUnuse = procedure(plugin: PGTypePlugin); cdecl; TGTypePluginCompleteTypeInfo = procedure(plugin: PGTypePlugin; g_type: TGType; info: PGTypeInfo; value_table: PGTypeValueTable); cdecl; TGTypePluginCompleteInterfaceInfo = procedure(plugin: PGTypePlugin; instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; PPGTypePluginClass = ^PGTypePluginClass; PGTypePluginClass = ^TGTypePluginClass; PPGTypePluginUse = ^PGTypePluginUse; PGTypePluginUse = ^TGTypePluginUse; PPGTypePluginUnuse = ^PGTypePluginUnuse; PGTypePluginUnuse = ^TGTypePluginUnuse; PPGTypePluginCompleteTypeInfo = ^PGTypePluginCompleteTypeInfo; PGTypePluginCompleteTypeInfo = ^TGTypePluginCompleteTypeInfo; PPGTypePluginCompleteInterfaceInfo = ^PGTypePluginCompleteInterfaceInfo; PGTypePluginCompleteInterfaceInfo = ^TGTypePluginCompleteInterfaceInfo; TGTypePluginClass = record base_iface: TGTypeInterface; use_plugin: TGTypePluginUse; unuse_plugin: TGTypePluginUnuse; complete_type_info: TGTypePluginCompleteTypeInfo; complete_interface_info: TGTypePluginCompleteInterfaceInfo; end; PPGTypeQuery = ^PGTypeQuery; PGTypeQuery = ^TGTypeQuery; TGTypeQuery = record type_: TGType; type_name: Pgchar; class_size: guint; instance_size: guint; end; PPGValueArray = ^PGValueArray; PGValueArray = ^TGValueArray; TGValueArray = object n_values: guint; values: PGValue; n_prealloced: guint; end; PPGWeakRef = ^PGWeakRef; PGWeakRef = ^TGWeakRef; TGWeakRef_union_priv = record case longint of 0 : (p: gpointer); end; TGWeakRef = object priv: TGWeakRef_union_priv; //union extracted from object and named 'TGWeakRef_union_priv' end; function g_binding_get_flags(binding: PGBinding): TGBindingFlags; cdecl; external; function g_binding_get_source(binding: PGBinding): PGObject; cdecl; external; function g_binding_get_source_property(binding: PGBinding): Pgchar; cdecl; external; function g_binding_get_target(binding: PGBinding): PGObject; cdecl; external; function g_binding_get_target_property(binding: PGBinding): Pgchar; cdecl; external; function g_binding_get_type: TGType; cdecl; external; function g_boxed_copy(boxed_type: TGType; src_boxed: Pgpointer): gpointer; cdecl; external; function g_boxed_type_register_static(name: Pgchar; boxed_copy: TGBoxedCopyFunc; boxed_free: TGBoxedFreeFunc): TGType; cdecl; external; function g_cclosure_new(callback_func: TGCallback; user_data: gpointer; destroy_data: TGClosureNotify): PGClosure; cdecl; external; function g_cclosure_new_object(callback_func: TGCallback; object_: PGObject): PGClosure; cdecl; external; function g_cclosure_new_object_swap(callback_func: TGCallback; object_: PGObject): PGClosure; cdecl; external; function g_cclosure_new_swap(callback_func: TGCallback; user_data: gpointer; destroy_data: TGClosureNotify): PGClosure; cdecl; external; function g_closure_get_type: TGType; cdecl; external; function g_closure_new_object(sizeof_closure: guint; object_: PGObject): PGClosure; cdecl; external; function g_closure_new_simple(sizeof_closure: guint; data: gpointer): PGClosure; cdecl; external; function g_closure_ref(closure: PGClosure): PGClosure; cdecl; external; function g_enum_get_value(enum_class: PGEnumClass; value: gint): PGEnumValue; cdecl; external; function g_enum_get_value_by_name(enum_class: PGEnumClass; name: Pgchar): PGEnumValue; cdecl; external; function g_enum_get_value_by_nick(enum_class: PGEnumClass; nick: Pgchar): PGEnumValue; cdecl; external; function g_enum_register_static(name: Pgchar; const_static_values: PGEnumValue): TGType; cdecl; external; function g_flags_get_first_value(flags_class: PGFlagsClass; value: guint): PGFlagsValue; cdecl; external; function g_flags_get_value_by_name(flags_class: PGFlagsClass; name: Pgchar): PGFlagsValue; cdecl; external; function g_flags_get_value_by_nick(flags_class: PGFlagsClass; nick: Pgchar): PGFlagsValue; cdecl; external; function g_flags_register_static(name: Pgchar; const_static_values: PGFlagsValue): TGType; cdecl; external; function g_gtype_get_type: TGType; cdecl; external; function g_initially_unowned_get_type: TGType; cdecl; external; function g_object_bind_property(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags): PGBinding; cdecl; external; function g_object_bind_property_full(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags; transform_to: TGBindingTransformFunc; transform_from: TGBindingTransformFunc; user_data: gpointer; notify: TGDestroyNotify): PGBinding; cdecl; external; function g_object_bind_property_with_closures(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags; transform_to: PGClosure; transform_from: PGClosure): PGBinding; cdecl; external; function g_object_class_find_property(oclass: PGObjectClass; property_name: Pgchar): PGParamSpec; cdecl; external; function g_object_class_list_properties(oclass: PGObjectClass; n_properties: Pguint): PPGParamSpec; cdecl; external; function g_object_compat_control(what: gsize; data: gpointer): gsize; cdecl; external; function g_object_connect(object_: gpointer; signal_spec: Pgchar; args: array of const): gpointer; cdecl; external; function g_object_dup_data(object_: PGObject; key: Pgchar; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_object_dup_qdata(object_: PGObject; quark: TGQuark; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_object_get_data(object_: PGObject; key: Pgchar): gpointer; cdecl; external; function g_object_get_qdata(object_: PGObject; quark: TGQuark): gpointer; cdecl; external; function g_object_get_type: TGType; cdecl; external; function g_object_interface_find_property(g_iface: gpointer; property_name: Pgchar): PGParamSpec; cdecl; external; function g_object_interface_list_properties(g_iface: gpointer; n_properties_p: Pguint): PPGParamSpec; cdecl; external; function g_object_is_floating(object_: PGObject): gboolean; cdecl; external; function g_object_new(object_type: TGType; first_property_name: Pgchar; args: array of const): gpointer; cdecl; external; function g_object_new_valist(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list): PGObject; cdecl; external; function g_object_newv(object_type: TGType; n_parameters: guint; parameters: PGParameter): PGObject; cdecl; external; function g_object_ref(object_: PGObject): PGObject; cdecl; external; function g_object_ref_sink(object_: PGObject): PGObject; cdecl; external; function g_object_replace_data(object_: PGObject; key: Pgchar; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_object_replace_qdata(object_: PGObject; quark: TGQuark; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_object_steal_data(object_: PGObject; key: Pgchar): gpointer; cdecl; external; function g_object_steal_qdata(object_: PGObject; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_boolean(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: gboolean; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_boxed(name: Pgchar; nick: Pgchar; blurb: Pgchar; boxed_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_char(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint8; maximum: gint8; default_value: gint8; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_double(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gdouble; maximum: gdouble; default_value: gdouble; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_enum(name: Pgchar; nick: Pgchar; blurb: Pgchar; enum_type: TGType; default_value: gint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_flags(name: Pgchar; nick: Pgchar; blurb: Pgchar; flags_type: TGType; default_value: guint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_float(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gfloat; maximum: gfloat; default_value: gfloat; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_get_blurb(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_name(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_nick(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_qdata(pspec: PGParamSpec; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_get_redirect_target(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_gtype(name: Pgchar; nick: Pgchar; blurb: Pgchar; is_a_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_int(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint; maximum: gint; default_value: gint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_int64(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint64; maximum: gint64; default_value: gint64; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_internal(param_type: TGType; name: Pgchar; nick: Pgchar; blurb: Pgchar; flags: TGParamFlags): gpointer; cdecl; external; function g_param_spec_long(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: glong; maximum: glong; default_value: glong; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_object(name: Pgchar; nick: Pgchar; blurb: Pgchar; object_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_override(name: Pgchar; overridden: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_param(name: Pgchar; nick: Pgchar; blurb: Pgchar; param_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_pointer(name: Pgchar; nick: Pgchar; blurb: Pgchar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_pool_list(pool: PGParamSpecPool; owner_type: TGType; n_pspecs_p: Pguint): PPGParamSpec; cdecl; external; function g_param_spec_pool_list_owned(pool: PGParamSpecPool; owner_type: TGType): PGList; cdecl; external; function g_param_spec_pool_lookup(pool: PGParamSpecPool; param_name: Pgchar; owner_type: TGType; walk_ancestors: gboolean): PGParamSpec; cdecl; external; function g_param_spec_pool_new(type_prefixing: gboolean): PGParamSpecPool; cdecl; external; function g_param_spec_ref(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_ref_sink(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_steal_qdata(pspec: PGParamSpec; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_string(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: Pgchar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uchar(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint8; maximum: guint8; default_value: guint8; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uint(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint; maximum: guint; default_value: guint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uint64(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint64; maximum: guint64; default_value: guint64; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_ulong(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gulong; maximum: gulong; default_value: gulong; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_unichar(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: gunichar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_value_array(name: Pgchar; nick: Pgchar; blurb: Pgchar; element_spec: PGParamSpec; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_variant(name: Pgchar; nick: Pgchar; blurb: Pgchar; type_: PGVariantType; default_value: PGVariant; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_type_register_static(name: Pgchar; pspec_info: PGParamSpecTypeInfo): TGType; cdecl; external; function g_param_value_convert(pspec: PGParamSpec; src_value: PGValue; dest_value: PGValue; strict_validation: gboolean): gboolean; cdecl; external; function g_param_value_defaults(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; external; function g_param_value_validate(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; external; function g_param_values_cmp(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; external; function g_pointer_type_register_static(name: Pgchar): TGType; cdecl; external; function g_signal_accumulator_first_wins(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; dummy: gpointer): gboolean; cdecl; external; function g_signal_accumulator_true_handled(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; dummy: gpointer): gboolean; cdecl; external; function g_signal_add_emission_hook(signal_id: guint; detail: TGQuark; hook_func: TGSignalEmissionHook; hook_data: gpointer; data_destroy: TGDestroyNotify): gulong; cdecl; external; function g_signal_connect_closure(instance: gpointer; detailed_signal: Pgchar; closure: PGClosure; after: gboolean): gulong; cdecl; external; function g_signal_connect_closure_by_id(instance: gpointer; signal_id: guint; detail: TGQuark; closure: PGClosure; after: gboolean): gulong; cdecl; external; function g_signal_connect_data(instance: gpointer; detailed_signal: Pgchar; c_handler: TGCallback; data: gpointer; destroy_data: TGClosureNotify; connect_flags: TGConnectFlags): gulong; cdecl; external; function g_signal_connect_object(instance: gpointer; detailed_signal: Pgchar; c_handler: TGCallback; gobject: gpointer; connect_flags: TGConnectFlags): gulong; cdecl; external; function g_signal_get_invocation_hint(instance: gpointer): PGSignalInvocationHint; cdecl; external; function g_signal_handler_find(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): gulong; cdecl; external; function g_signal_handler_is_connected(instance: gpointer; handler_id: gulong): gboolean; cdecl; external; function g_signal_handlers_block_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_handlers_disconnect_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_handlers_unblock_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_has_handler_pending(instance: gpointer; signal_id: guint; detail: TGQuark; may_be_blocked: gboolean): gboolean; cdecl; external; function g_signal_list_ids(itype: TGType; n_ids: Pguint): Pguint; cdecl; external; function g_signal_lookup(name: Pgchar; itype: TGType): guint; cdecl; external; function g_signal_name(signal_id: guint): Pgchar; cdecl; external; function g_signal_new(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_offset: guint; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: array of const): guint; cdecl; external; function g_signal_new_class_handler(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_handler: TGCallback; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: array of const): guint; cdecl; external; function g_signal_new_valist(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_closure: PGClosure; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: Tva_list): guint; cdecl; external; function g_signal_newv(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_closure: PGClosure; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; param_types: PGType): guint; cdecl; external; function g_signal_parse_name(detailed_signal: Pgchar; itype: TGType; signal_id_p: Pguint; detail_p: PGQuark; force_detail_quark: gboolean): gboolean; cdecl; external; function g_signal_type_cclosure_new(itype: TGType; struct_offset: guint): PGClosure; cdecl; external; function g_strdup_value_contents(value: PGValue): Pgchar; cdecl; external; function g_type_check_class_cast(g_class: PGTypeClass; is_a_type: TGType): PGTypeClass; cdecl; external; function g_type_check_class_is_a(g_class: PGTypeClass; is_a_type: TGType): gboolean; cdecl; external; function g_type_check_instance(instance: PGTypeInstance): gboolean; cdecl; external; function g_type_check_instance_cast(instance: PGTypeInstance; iface_type: TGType): PGTypeInstance; cdecl; external; function g_type_check_instance_is_a(instance: PGTypeInstance; iface_type: TGType): gboolean; cdecl; external; function g_type_check_is_value_type(type_: TGType): gboolean; cdecl; external; function g_type_check_value(value: PGValue): gboolean; cdecl; external; function g_type_check_value_holds(value: PGValue; type_: TGType): gboolean; cdecl; external; function g_type_children(type_: TGType; n_children: Pguint): PGType; cdecl; external; function g_type_class_get_private(klass: PGTypeClass; private_type: TGType): gpointer; cdecl; external; function g_type_class_peek(type_: TGType): PGTypeClass; cdecl; external; function g_type_class_peek_parent(g_class: PGTypeClass): PGTypeClass; cdecl; external; function g_type_class_peek_static(type_: TGType): PGTypeClass; cdecl; external; function g_type_class_ref(type_: TGType): PGTypeClass; cdecl; external; function g_type_create_instance(type_: TGType): PGTypeInstance; cdecl; external; function g_type_default_interface_peek(g_type: TGType): PGTypeInterface; cdecl; external; function g_type_default_interface_ref(g_type: TGType): PGTypeInterface; cdecl; external; function g_type_depth(type_: TGType): guint; cdecl; external; function g_type_from_name(name: Pgchar): TGType; cdecl; external; function g_type_fundamental(type_id: TGType): TGType; cdecl; external; function g_type_fundamental_next: TGType; cdecl; external; function g_type_get_plugin(type_: TGType): PGTypePlugin; cdecl; external; function g_type_get_qdata(type_: TGType; quark: TGQuark): gpointer; cdecl; external; function g_type_get_type_registration_serial: guint; cdecl; external; function g_type_instance_get_private(instance: PGTypeInstance; private_type: TGType): gpointer; cdecl; external; function g_type_interface_get_plugin(instance_type: TGType; interface_type: TGType): PGTypePlugin; cdecl; external; function g_type_interface_peek(instance_class: PGTypeClass; iface_type: TGType): PGTypeInterface; cdecl; external; function g_type_interface_peek_parent(g_iface: PGTypeInterface): PGTypeInterface; cdecl; external; function g_type_interface_prerequisites(interface_type: TGType; n_prerequisites: Pguint): PGType; cdecl; external; function g_type_interfaces(type_: TGType; n_interfaces: Pguint): PGType; cdecl; external; function g_type_is_a(type_: TGType; is_a_type: TGType): gboolean; cdecl; external; function g_type_module_get_type: TGType; cdecl; external; function g_type_module_register_enum(module: PGTypeModule; name: Pgchar; const_static_values: PGEnumValue): TGType; cdecl; external; function g_type_module_register_flags(module: PGTypeModule; name: Pgchar; const_static_values: PGFlagsValue): TGType; cdecl; external; function g_type_module_register_type(module: PGTypeModule; parent_type: TGType; type_name: Pgchar; type_info: PGTypeInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_module_use(module: PGTypeModule): gboolean; cdecl; external; function g_type_name(type_: TGType): Pgchar; cdecl; external; function g_type_name_from_class(g_class: PGTypeClass): Pgchar; cdecl; external; function g_type_name_from_instance(instance: PGTypeInstance): Pgchar; cdecl; external; function g_type_next_base(leaf_type: TGType; root_type: TGType): TGType; cdecl; external; function g_type_parent(type_: TGType): TGType; cdecl; external; function g_type_plugin_get_type: TGType; cdecl; external; function g_type_qname(type_: TGType): TGQuark; cdecl; external; function g_type_register_dynamic(parent_type: TGType; type_name: Pgchar; plugin: PGTypePlugin; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_fundamental(type_id: TGType; type_name: Pgchar; info: PGTypeInfo; finfo: PGTypeFundamentalInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_static(parent_type: TGType; type_name: Pgchar; info: PGTypeInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_static_simple(parent_type: TGType; type_name: Pgchar; class_size: guint; class_init: TGClassInitFunc; instance_size: guint; instance_init: TGInstanceInitFunc; flags: TGTypeFlags): TGType; cdecl; external; function g_type_test_flags(type_: TGType; flags: guint): gboolean; cdecl; external; function g_type_value_table_peek(type_: TGType): PGTypeValueTable; cdecl; external; function g_value_array_get_type: TGType; cdecl; external; function g_value_dup_boxed(value: PGValue): gpointer; cdecl; external; function g_value_dup_object(value: PGValue): PGObject; cdecl; external; function g_value_dup_param(value: PGValue): PGParamSpec; cdecl; external; function g_value_dup_string(value: PGValue): Pgchar; cdecl; external; function g_value_dup_variant(value: PGValue): PGVariant; cdecl; external; function g_value_fits_pointer(value: PGValue): gboolean; cdecl; external; function g_value_get_boolean(value: PGValue): gboolean; cdecl; external; function g_value_get_boxed(value: PGValue): gpointer; cdecl; external; function g_value_get_double(value: PGValue): gdouble; cdecl; external; function g_value_get_enum(value: PGValue): gint; cdecl; external; function g_value_get_flags(value: PGValue): guint; cdecl; external; function g_value_get_float(value: PGValue): gfloat; cdecl; external; function g_value_get_gtype(value: PGValue): TGType; cdecl; external; function g_value_get_int(value: PGValue): gint; cdecl; external; function g_value_get_int64(value: PGValue): gint64; cdecl; external; function g_value_get_long(value: PGValue): glong; cdecl; external; function g_value_get_object(value: PGValue): PGObject; cdecl; external; function g_value_get_param(value: PGValue): PGParamSpec; cdecl; external; function g_value_get_pointer(value: PGValue): gpointer; cdecl; external; function g_value_get_schar(value: PGValue): gint8; cdecl; external; function g_value_get_string(value: PGValue): Pgchar; cdecl; external; function g_value_get_type: TGType; cdecl; external; function g_value_get_uchar(value: PGValue): guint8; cdecl; external; function g_value_get_uint(value: PGValue): guint; cdecl; external; function g_value_get_uint64(value: PGValue): guint64; cdecl; external; function g_value_get_ulong(value: PGValue): gulong; cdecl; external; function g_value_get_variant(value: PGValue): PGVariant; cdecl; external; function g_value_init(value: PGValue; g_type: TGType): PGValue; cdecl; external; function g_value_peek_pointer(value: PGValue): gpointer; cdecl; external; function g_value_reset(value: PGValue): PGValue; cdecl; external; function g_value_transform(src_value: PGValue; dest_value: PGValue): gboolean; cdecl; external; function g_value_type_compatible(src_type: TGType; dest_type: TGType): gboolean; cdecl; external; function g_value_type_transformable(src_type: TGType; dest_type: TGType): gboolean; cdecl; external; function g_weak_ref_get(weak_ref: PGWeakRef): PGObject; cdecl; external; procedure g_boxed_free(boxed_type: TGType; boxed: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__BOXED_BOXED(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__FLAGS(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__FLAGSv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_generic(closure: PGClosure; return_gvalue: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_generic_va(closure: PGClosure; return_value: PGValue; instance: gpointer; args_list: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_STRING__OBJECT_POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_STRING__OBJECT_POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__BOOLEAN(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__BOOLEANv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__BOXED(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__BOXEDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__CHAR(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__CHARv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__DOUBLE(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__DOUBLEv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__ENUM(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__ENUMv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__FLAGS(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__FLAGSv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__FLOAT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__FLOATv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__INT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__INTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__LONG(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__LONGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__OBJECT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__OBJECTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__PARAM(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__PARAMv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__STRING(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__STRINGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UCHAR(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UCHARv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UINT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UINT_POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UINT_POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UINTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__ULONG(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__ULONGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__VARIANT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__VARIANTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__VOID(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__VOIDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_clear_object(object_ptr: PPGObject); cdecl; external; procedure g_closure_add_finalize_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_add_invalidate_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_add_marshal_guards(closure: PGClosure; pre_marshal_data: gpointer; pre_marshal_notify: TGClosureNotify; post_marshal_data: gpointer; post_marshal_notify: TGClosureNotify); cdecl; external; procedure g_closure_invalidate(closure: PGClosure); cdecl; external; procedure g_closure_invoke(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer); cdecl; external; procedure g_closure_remove_finalize_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_remove_invalidate_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_set_marshal(closure: PGClosure; marshal: TGClosureMarshal); cdecl; external; procedure g_closure_set_meta_marshal(closure: PGClosure; marshal_data: gpointer; meta_marshal: TGClosureMarshal); cdecl; external; procedure g_closure_sink(closure: PGClosure); cdecl; external; procedure g_closure_unref(closure: PGClosure); cdecl; external; procedure g_enum_complete_type_info(g_enum_type: TGType; info: PGTypeInfo; const_values: PGEnumValue); cdecl; external; procedure g_flags_complete_type_info(g_flags_type: TGType; info: PGTypeInfo; const_values: PGFlagsValue); cdecl; external; procedure g_object_add_toggle_ref(object_: PGObject; notify: TGToggleNotify; data: gpointer); cdecl; external; procedure g_object_add_weak_pointer(object_: PGObject; weak_pointer_location: Pgpointer); cdecl; external; procedure g_object_class_install_properties(oclass: PGObjectClass; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; external; procedure g_object_class_install_property(oclass: PGObjectClass; property_id: guint; pspec: PGParamSpec); cdecl; external; procedure g_object_class_override_property(oclass: PGObjectClass; property_id: guint; name: Pgchar); cdecl; external; procedure g_object_disconnect(object_: gpointer; signal_spec: Pgchar; args: array of const); cdecl; external; procedure g_object_force_floating(object_: PGObject); cdecl; external; procedure g_object_freeze_notify(object_: PGObject); cdecl; external; procedure g_object_get(object_: gpointer; first_property_name: Pgchar; args: array of const); cdecl; external; procedure g_object_get_property(object_: PGObject; property_name: Pgchar; value: PGValue); cdecl; external; procedure g_object_get_valist(object_: PGObject; first_property_name: Pgchar; var_args: Tva_list); cdecl; external; procedure g_object_interface_install_property(g_iface: gpointer; pspec: PGParamSpec); cdecl; external; procedure g_object_notify(object_: PGObject; property_name: Pgchar); cdecl; external; procedure g_object_notify_by_pspec(object_: PGObject; pspec: PGParamSpec); cdecl; external; procedure g_object_remove_toggle_ref(object_: PGObject; notify: TGToggleNotify; data: gpointer); cdecl; external; procedure g_object_remove_weak_pointer(object_: PGObject; weak_pointer_location: Pgpointer); cdecl; external; procedure g_object_run_dispose(object_: PGObject); cdecl; external; procedure g_object_set(object_: gpointer; first_property_name: Pgchar; args: array of const); cdecl; external; procedure g_object_set_data(object_: PGObject; key: Pgchar; data: gpointer); cdecl; external; procedure g_object_set_data_full(object_: PGObject; key: Pgchar; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_object_set_property(object_: PGObject; property_name: Pgchar; value: PGValue); cdecl; external; procedure g_object_set_qdata(object_: PGObject; quark: TGQuark; data: gpointer); cdecl; external; procedure g_object_set_qdata_full(object_: PGObject; quark: TGQuark; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_object_set_valist(object_: PGObject; first_property_name: Pgchar; var_args: Tva_list); cdecl; external; procedure g_object_thaw_notify(object_: PGObject); cdecl; external; procedure g_object_unref(object_: PGObject); cdecl; external; procedure g_object_watch_closure(object_: PGObject; closure: PGClosure); cdecl; external; procedure g_object_weak_ref(object_: PGObject; notify: TGWeakNotify; data: gpointer); cdecl; external; procedure g_object_weak_unref(object_: PGObject; notify: TGWeakNotify; data: gpointer); cdecl; external; procedure g_param_spec_pool_insert(pool: PGParamSpecPool; pspec: PGParamSpec; owner_type: TGType); cdecl; external; procedure g_param_spec_pool_remove(pool: PGParamSpecPool; pspec: PGParamSpec); cdecl; external; procedure g_param_spec_set_qdata(pspec: PGParamSpec; quark: TGQuark; data: gpointer); cdecl; external; procedure g_param_spec_set_qdata_full(pspec: PGParamSpec; quark: TGQuark; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_param_spec_sink(pspec: PGParamSpec); cdecl; external; procedure g_param_spec_unref(pspec: PGParamSpec); cdecl; external; procedure g_param_value_set_default(pspec: PGParamSpec; value: PGValue); cdecl; external; procedure g_signal_chain_from_overridden(instance_and_params: PGValue; return_value: PGValue); cdecl; external; procedure g_signal_chain_from_overridden_handler(instance: gpointer; args: array of const); cdecl; external; procedure g_signal_emit(instance: gpointer; signal_id: guint; detail: TGQuark; args: array of const); cdecl; external; procedure g_signal_emit_by_name(instance: gpointer; detailed_signal: Pgchar; args: array of const); cdecl; external; procedure g_signal_emit_valist(instance: gpointer; signal_id: guint; detail: TGQuark; var_args: Tva_list); cdecl; external; procedure g_signal_emitv(instance_and_params: PGValue; signal_id: guint; detail: TGQuark; return_value: PGValue); cdecl; external; procedure g_signal_handler_block(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handler_disconnect(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handler_unblock(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handlers_destroy(instance: gpointer); cdecl; external; procedure g_signal_override_class_closure(signal_id: guint; instance_type: TGType; class_closure: PGClosure); cdecl; external; procedure g_signal_override_class_handler(signal_name: Pgchar; instance_type: TGType; class_handler: TGCallback); cdecl; external; procedure g_signal_query(signal_id: guint; query: PGSignalQuery); cdecl; external; procedure g_signal_remove_emission_hook(signal_id: guint; hook_id: gulong); cdecl; external; procedure g_signal_set_va_marshaller(signal_id: guint; instance_type: TGType; va_marshaller: TGSignalCVaMarshaller); cdecl; external; procedure g_signal_stop_emission(instance: gpointer; signal_id: guint; detail: TGQuark); cdecl; external; procedure g_signal_stop_emission_by_name(instance: gpointer; detailed_signal: Pgchar); cdecl; external; procedure g_source_set_closure(source: PGSource; closure: PGClosure); cdecl; external; procedure g_source_set_dummy_callback(source: PGSource); cdecl; external; procedure g_type_add_class_cache_func(cache_data: gpointer; cache_func: TGTypeClassCacheFunc); cdecl; external; procedure g_type_add_class_private(class_type: TGType; private_size: gsize); cdecl; external; procedure g_type_add_interface_check(check_data: gpointer; check_func: TGTypeInterfaceCheckFunc); cdecl; external; procedure g_type_add_interface_dynamic(instance_type: TGType; interface_type: TGType; plugin: PGTypePlugin); cdecl; external; procedure g_type_add_interface_static(instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; external; procedure g_type_class_add_private(g_class: gpointer; private_size: gsize); cdecl; external; procedure g_type_class_unref(g_class: PGTypeClass); cdecl; external; procedure g_type_class_unref_uncached(g_class: PGTypeClass); cdecl; external; procedure g_type_default_interface_unref(g_iface: PGTypeInterface); cdecl; external; procedure g_type_ensure(type_: TGType); cdecl; external; procedure g_type_free_instance(instance: PGTypeInstance); cdecl; external; procedure g_type_init; cdecl; external; procedure g_type_init_with_debug_flags(debug_flags: TGTypeDebugFlags); cdecl; external; procedure g_type_interface_add_prerequisite(interface_type: TGType; prerequisite_type: TGType); cdecl; external; procedure g_type_module_add_interface(module: PGTypeModule; instance_type: TGType; interface_type: TGType; interface_info: PGInterfaceInfo); cdecl; external; procedure g_type_module_set_name(module: PGTypeModule; name: Pgchar); cdecl; external; procedure g_type_module_unuse(module: PGTypeModule); cdecl; external; procedure g_type_plugin_complete_interface_info(plugin: PGTypePlugin; instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; external; procedure g_type_plugin_complete_type_info(plugin: PGTypePlugin; g_type: TGType; info: PGTypeInfo; value_table: PGTypeValueTable); cdecl; external; procedure g_type_plugin_unuse(plugin: PGTypePlugin); cdecl; external; procedure g_type_plugin_use(plugin: PGTypePlugin); cdecl; external; procedure g_type_query(type_: TGType; query: PGTypeQuery); cdecl; external; procedure g_type_remove_class_cache_func(cache_data: gpointer; cache_func: TGTypeClassCacheFunc); cdecl; external; procedure g_type_remove_interface_check(check_data: gpointer; check_func: TGTypeInterfaceCheckFunc); cdecl; external; procedure g_type_set_qdata(type_: TGType; quark: TGQuark; data: gpointer); cdecl; external; procedure g_value_copy(src_value: PGValue; dest_value: PGValue); cdecl; external; procedure g_value_register_transform_func(src_type: TGType; dest_type: TGType; transform_func: TGValueTransform); cdecl; external; procedure g_value_set_boolean(value: PGValue; v_boolean: gboolean); cdecl; external; procedure g_value_set_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_set_double(value: PGValue; v_double: gdouble); cdecl; external; procedure g_value_set_enum(value: PGValue; v_enum: gint); cdecl; external; procedure g_value_set_flags(value: PGValue; v_flags: guint); cdecl; external; procedure g_value_set_float(value: PGValue; v_float: gfloat); cdecl; external; procedure g_value_set_gtype(value: PGValue; v_gtype: TGType); cdecl; external; procedure g_value_set_instance(value: PGValue; instance: gpointer); cdecl; external; procedure g_value_set_int(value: PGValue; v_int: gint); cdecl; external; procedure g_value_set_int64(value: PGValue; v_int64: gint64); cdecl; external; procedure g_value_set_long(value: PGValue; v_long: glong); cdecl; external; procedure g_value_set_object(value: PGValue; v_object: PGObject); cdecl; external; procedure g_value_set_param(value: PGValue; param: PGParamSpec); cdecl; external; procedure g_value_set_pointer(value: PGValue; v_pointer: gpointer); cdecl; external; procedure g_value_set_schar(value: PGValue; v_char: gint8); cdecl; external; procedure g_value_set_static_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_set_static_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_set_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_set_uchar(value: PGValue; v_uchar: guint8); cdecl; external; procedure g_value_set_uint(value: PGValue; v_uint: guint); cdecl; external; procedure g_value_set_uint64(value: PGValue; v_uint64: guint64); cdecl; external; procedure g_value_set_ulong(value: PGValue; v_ulong: gulong); cdecl; external; procedure g_value_set_variant(value: PGValue; variant: PGVariant); cdecl; external; procedure g_value_take_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_take_object(value: PGValue; v_object: gpointer); cdecl; external; procedure g_value_take_param(value: PGValue; param: PGParamSpec); cdecl; external; procedure g_value_take_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_take_variant(value: PGValue; variant: PGVariant); cdecl; external; procedure g_value_unset(value: PGValue); cdecl; external; procedure g_weak_ref_clear(weak_ref: PGWeakRef); cdecl; external; procedure g_weak_ref_init(weak_ref: PGWeakRef; object_: gpointer); cdecl; external; procedure g_weak_ref_set(weak_ref: PGWeakRef; object_: gpointer); cdecl; external; implementation end. doublecmd-1.1.30/src/platform/unix/glib/uglib2.pas0000644000175000001440000060561515104114162021006 0ustar alexxusers{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGLib2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} {$LINKLIB libglib-2.0.so.0} {$LINKLIB libgobject-2.0.so.0} interface uses CTypes; const GLib2_library = 'libglib-2.0.so.0'; ASCII_DTOSTR_BUF_SIZE = 39; BIG_ENDIAN = 4321; CAN_INLINE = 1; CSET_A_2_Z_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; CSET_DIGITS = '0123456789'; CSET_a_2_z_lower = 'abcdefghijklmnopqrstuvwxyz'; DATALIST_FLAGS_MASK = 3; DATE_BAD_DAY = 0; DATE_BAD_JULIAN = 0; DATE_BAD_YEAR = 0; DIR_SEPARATOR = 92; DIR_SEPARATOR_S = '\'; E = 2.718282; GINT16_FORMAT = 'hi'; GINT16_MODIFIER = 'h'; GINT32_FORMAT = 'i'; GINT32_MODIFIER = ''; GINT64_FORMAT = 'li'; GINT64_MODIFIER = 'l'; GINTPTR_FORMAT = 'li'; GINTPTR_MODIFIER = 'l'; GNUC_FUNCTION = ''; GNUC_PRETTY_FUNCTION = ''; GSIZE_FORMAT = 'lu'; GSIZE_MODIFIER = 'l'; GSSIZE_FORMAT = 'li'; GUINT16_FORMAT = 'hu'; GUINT32_FORMAT = 'u'; GUINT64_FORMAT = 'lu'; GUINTPTR_FORMAT = 'lu'; HAVE_GINT64 = 1; HAVE_GNUC_VARARGS = 1; HAVE_GNUC_VISIBILITY = 1; HAVE_GROWING_STACK = 1; HAVE_INLINE = 1; HAVE_ISO_VARARGS = 1; HAVE___INLINE = 1; HAVE___INLINE__ = 1; HOOK_FLAG_USER_SHIFT = 4; IEEE754_DOUBLE_BIAS = 1023; IEEE754_FLOAT_BIAS = 127; KEY_FILE_DESKTOP_GROUP = 'Desktop Entry'; KEY_FILE_DESKTOP_KEY_CATEGORIES = 'Categories'; KEY_FILE_DESKTOP_KEY_COMMENT = 'Comment'; KEY_FILE_DESKTOP_KEY_EXEC = 'Exec'; KEY_FILE_DESKTOP_KEY_FULLNAME = 'X-GNOME-FullName'; KEY_FILE_DESKTOP_KEY_GENERIC_NAME = 'GenericName'; KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN = 'X-GNOME-Gettext-Domain'; KEY_FILE_DESKTOP_KEY_HIDDEN = 'Hidden'; KEY_FILE_DESKTOP_KEY_ICON = 'Icon'; KEY_FILE_DESKTOP_KEY_KEYWORDS = 'Keywords'; KEY_FILE_DESKTOP_KEY_MIME_TYPE = 'MimeType'; KEY_FILE_DESKTOP_KEY_NAME = 'Name'; KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN = 'NotShowIn'; KEY_FILE_DESKTOP_KEY_NO_DISPLAY = 'NoDisplay'; KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN = 'OnlyShowIn'; KEY_FILE_DESKTOP_KEY_PATH = 'Path'; KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY = 'StartupNotify'; KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS = 'StartupWMClass'; KEY_FILE_DESKTOP_KEY_TERMINAL = 'Terminal'; KEY_FILE_DESKTOP_KEY_TRY_EXEC = 'TryExec'; KEY_FILE_DESKTOP_KEY_TYPE = 'Type'; KEY_FILE_DESKTOP_KEY_URL = 'URL'; KEY_FILE_DESKTOP_KEY_VERSION = 'Version'; KEY_FILE_DESKTOP_TYPE_APPLICATION = 'Application'; KEY_FILE_DESKTOP_TYPE_DIRECTORY = 'Directory'; KEY_FILE_DESKTOP_TYPE_LINK = 'Link'; LITTLE_ENDIAN = 1234; LN10 = 2.302585; LN2 = 0.693147; LOG_2_BASE_10 = 0.301030; LOG_DOMAIN = 0; LOG_FATAL_MASK = 0; LOG_LEVEL_USER_SHIFT = 8; MAJOR_VERSION = 2; MAXINT16 = 32767; MAXINT32 = 2147483647; MAXINT64 = 9223372036854775807; MAXINT8 = 127; MAXUINT16 = 65535; MAXUINT32 = 4294967295; MAXUINT64 = 18446744073709551615; MAXUINT8 = 255; MICRO_VERSION = 1; MININT16 = 32768; MININT32 = 2147483648; MININT64 = -9223372036854775808; MININT8 = 128; MINOR_VERSION = 36; MODULE_SUFFIX = 'so'; OPTION_REMAINING = ''; PDP_ENDIAN = 3412; PI = 3.141593; PI_2 = 1.570796; PI_4 = 0.785398; POLLFD_FORMAT = '%#I64x'; PRIORITY_DEFAULT = 0; PRIORITY_DEFAULT_IDLE = 200; PRIORITY_HIGH = -100; PRIORITY_HIGH_IDLE = 100; PRIORITY_LOW = 300; SEARCHPATH_SEPARATOR = 59; SEARCHPATH_SEPARATOR_S = ';'; SIZEOF_LONG = 8; SIZEOF_SIZE_T = 8; SIZEOF_VOID_P = 8; SQRT2 = 1.414214; STR_DELIMITERS = '_-|> <.'; SYSDEF_AF_INET = 2; SYSDEF_AF_INET6 = 10; SYSDEF_AF_UNIX = 1; SYSDEF_MSG_DONTROUTE = 4; SYSDEF_MSG_OOB = 1; SYSDEF_MSG_PEEK = 2; TIME_SPAN_DAY = 86400000000; TIME_SPAN_HOUR = 3600000000; TIME_SPAN_MILLISECOND = 1000; TIME_SPAN_MINUTE = 60000000; TIME_SPAN_SECOND = 1000000; UNICHAR_MAX_DECOMPOSITION_LENGTH = 18; URI_RESERVED_CHARS_GENERIC_DELIMITERS = ':/?#[]@'; URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS = '!$&''()*+,;='; USEC_PER_SEC = 1000000; VA_COPY_AS_ARRAY = 1; VERSION_MIN_REQUIRED = 2; WIN32_MSG_HANDLE = 19981206; type TGAsciiType = Integer; const { GAsciiType } G_ASCII_ALNUM: TGAsciiType = 1; G_ASCII_ALPHA: TGAsciiType = 2; G_ASCII_CNTRL: TGAsciiType = 4; G_ASCII_DIGIT: TGAsciiType = 8; G_ASCII_GRAPH: TGAsciiType = 16; G_ASCII_LOWER: TGAsciiType = 32; G_ASCII_PRINT: TGAsciiType = 64; G_ASCII_PUNCT: TGAsciiType = 128; G_ASCII_SPACE: TGAsciiType = 256; G_ASCII_UPPER: TGAsciiType = 512; G_ASCII_XDIGIT: TGAsciiType = 1024; type TGBookmarkFileError = Integer; const { GBookmarkFileError } G_BOOKMARK_FILE_ERROR_INVALID_URI: TGBookmarkFileError = 0; G_BOOKMARK_FILE_ERROR_INVALID_VALUE: TGBookmarkFileError = 1; G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: TGBookmarkFileError = 2; G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: TGBookmarkFileError = 3; G_BOOKMARK_FILE_ERROR_READ: TGBookmarkFileError = 4; G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: TGBookmarkFileError = 5; G_BOOKMARK_FILE_ERROR_WRITE: TGBookmarkFileError = 6; G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: TGBookmarkFileError = 7; type TGChecksumType = Integer; const { GChecksumType } G_CHECKSUM_MD5: TGChecksumType = 0; G_CHECKSUM_SHA1: TGChecksumType = 1; G_CHECKSUM_SHA256: TGChecksumType = 2; G_CHECKSUM_SHA512: TGChecksumType = 3; type TGConvertError = Integer; const { GConvertError } G_CONVERT_ERROR_NO_CONVERSION: TGConvertError = 0; G_CONVERT_ERROR_ILLEGAL_SEQUENCE: TGConvertError = 1; G_CONVERT_ERROR_FAILED: TGConvertError = 2; G_CONVERT_ERROR_PARTIAL_INPUT: TGConvertError = 3; G_CONVERT_ERROR_BAD_URI: TGConvertError = 4; G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: TGConvertError = 5; type TGDateMonth = Integer; const { GDateMonth } G_DATE_BAD_MONTH: TGDateMonth = 0; G_DATE_JANUARY: TGDateMonth = 1; G_DATE_FEBRUARY: TGDateMonth = 2; G_DATE_MARCH: TGDateMonth = 3; G_DATE_APRIL: TGDateMonth = 4; G_DATE_MAY: TGDateMonth = 5; G_DATE_JUNE: TGDateMonth = 6; G_DATE_JULY: TGDateMonth = 7; G_DATE_AUGUST: TGDateMonth = 8; G_DATE_SEPTEMBER: TGDateMonth = 9; G_DATE_OCTOBER: TGDateMonth = 10; G_DATE_NOVEMBER: TGDateMonth = 11; G_DATE_DECEMBER: TGDateMonth = 12; type TGDateWeekday = Integer; const { GDateWeekday } G_DATE_BAD_WEEKDAY: TGDateWeekday = 0; G_DATE_MONDAY: TGDateWeekday = 1; G_DATE_TUESDAY: TGDateWeekday = 2; G_DATE_WEDNESDAY: TGDateWeekday = 3; G_DATE_THURSDAY: TGDateWeekday = 4; G_DATE_FRIDAY: TGDateWeekday = 5; G_DATE_SATURDAY: TGDateWeekday = 6; G_DATE_SUNDAY: TGDateWeekday = 7; type TGDateDMY = Integer; const { GDateDMY } G_DATE_DAY: TGDateDMY = 0; G_DATE_MONTH: TGDateDMY = 1; G_DATE_YEAR: TGDateDMY = 2; type TGTimeType = Integer; const { GTimeType } G_TIME_TYPE_STANDARD: TGTimeType = 0; G_TIME_TYPE_DAYLIGHT: TGTimeType = 1; G_TIME_TYPE_UNIVERSAL: TGTimeType = 2; type TGErrorType = Integer; const { GErrorType } G_ERR_UNKNOWN: TGErrorType = 0; G_ERR_UNEXP_EOF: TGErrorType = 1; G_ERR_UNEXP_EOF_IN_STRING: TGErrorType = 2; G_ERR_UNEXP_EOF_IN_COMMENT: TGErrorType = 3; G_ERR_NON_DIGIT_IN_CONST: TGErrorType = 4; G_ERR_DIGIT_RADIX: TGErrorType = 5; G_ERR_FLOAT_RADIX: TGErrorType = 6; G_ERR_FLOAT_MALFORMED: TGErrorType = 7; type TGFileError = Integer; const { GFileError } G_FILE_ERROR_EXIST: TGFileError = 0; G_FILE_ERROR_ISDIR: TGFileError = 1; G_FILE_ERROR_ACCES: TGFileError = 2; G_FILE_ERROR_NAMETOOLONG: TGFileError = 3; G_FILE_ERROR_NOENT: TGFileError = 4; G_FILE_ERROR_NOTDIR: TGFileError = 5; G_FILE_ERROR_NXIO: TGFileError = 6; G_FILE_ERROR_NODEV: TGFileError = 7; G_FILE_ERROR_ROFS: TGFileError = 8; G_FILE_ERROR_TXTBSY: TGFileError = 9; G_FILE_ERROR_FAULT: TGFileError = 10; G_FILE_ERROR_LOOP: TGFileError = 11; G_FILE_ERROR_NOSPC: TGFileError = 12; G_FILE_ERROR_NOMEM: TGFileError = 13; G_FILE_ERROR_MFILE: TGFileError = 14; G_FILE_ERROR_NFILE: TGFileError = 15; G_FILE_ERROR_BADF: TGFileError = 16; G_FILE_ERROR_INVAL: TGFileError = 17; G_FILE_ERROR_PIPE: TGFileError = 18; G_FILE_ERROR_AGAIN: TGFileError = 19; G_FILE_ERROR_INTR: TGFileError = 20; G_FILE_ERROR_IO: TGFileError = 21; G_FILE_ERROR_PERM: TGFileError = 22; G_FILE_ERROR_NOSYS: TGFileError = 23; G_FILE_ERROR_FAILED: TGFileError = 24; type TGFileTest = Integer; const { GFileTest } G_FILE_TEST_IS_REGULAR: TGFileTest = 1; G_FILE_TEST_IS_SYMLINK: TGFileTest = 2; G_FILE_TEST_IS_DIR: TGFileTest = 4; G_FILE_TEST_IS_EXECUTABLE: TGFileTest = 8; G_FILE_TEST_EXISTS: TGFileTest = 16; type TGFormatSizeFlags = Integer; const { GFormatSizeFlags } G_FORMAT_SIZE_DEFAULT: TGFormatSizeFlags = 0; G_FORMAT_SIZE_LONG_FORMAT: TGFormatSizeFlags = 1; G_FORMAT_SIZE_IEC_UNITS: TGFormatSizeFlags = 2; type TGHookFlagMask = Integer; const { GHookFlagMask } G_HOOK_FLAG_ACTIVE: TGHookFlagMask = 1; G_HOOK_FLAG_IN_CALL: TGHookFlagMask = 2; G_HOOK_FLAG_MASK: TGHookFlagMask = 15; type TGSeekType = Integer; const { GSeekType } G_SEEK_CUR: TGSeekType = 0; G_SEEK_SET: TGSeekType = 1; G_SEEK_END: TGSeekType = 2; type TGIOCondition = Integer; const { GIOCondition } G_IO_IN: TGIOCondition = 1; G_IO_OUT: TGIOCondition = 4; G_IO_PRI: TGIOCondition = 2; G_IO_ERR: TGIOCondition = 8; G_IO_HUP: TGIOCondition = 16; G_IO_NVAL: TGIOCondition = 32; type TGIOFlags = Integer; const { GIOFlags } G_IO_FLAG_APPEND: TGIOFlags = 1; G_IO_FLAG_NONBLOCK: TGIOFlags = 2; G_IO_FLAG_IS_READABLE: TGIOFlags = 4; G_IO_FLAG_IS_WRITABLE: TGIOFlags = 8; G_IO_FLAG_IS_WRITEABLE: TGIOFlags = 8; G_IO_FLAG_IS_SEEKABLE: TGIOFlags = 16; G_IO_FLAG_MASK: TGIOFlags = 31; G_IO_FLAG_GET_MASK: TGIOFlags = 31; G_IO_FLAG_SET_MASK: TGIOFlags = 3; type TGIOStatus = Integer; const { GIOStatus } G_IO_STATUS_ERROR: TGIOStatus = 0; G_IO_STATUS_NORMAL: TGIOStatus = 1; G_IO_STATUS_EOF: TGIOStatus = 2; G_IO_STATUS_AGAIN: TGIOStatus = 3; type TGIOError = Integer; const { GIOError } G_IO_ERROR_NONE: TGIOError = 0; G_IO_ERROR_AGAIN: TGIOError = 1; G_IO_ERROR_INVAL: TGIOError = 2; G_IO_ERROR_UNKNOWN: TGIOError = 3; type TGIOChannelError = Integer; const { GIOChannelError } G_IO_CHANNEL_ERROR_FBIG: TGIOChannelError = 0; G_IO_CHANNEL_ERROR_INVAL: TGIOChannelError = 1; G_IO_CHANNEL_ERROR_IO: TGIOChannelError = 2; G_IO_CHANNEL_ERROR_ISDIR: TGIOChannelError = 3; G_IO_CHANNEL_ERROR_NOSPC: TGIOChannelError = 4; G_IO_CHANNEL_ERROR_NXIO: TGIOChannelError = 5; G_IO_CHANNEL_ERROR_OVERFLOW: TGIOChannelError = 6; G_IO_CHANNEL_ERROR_PIPE: TGIOChannelError = 7; G_IO_CHANNEL_ERROR_FAILED: TGIOChannelError = 8; type TGKeyFileFlags = Integer; const { GKeyFileFlags } G_KEY_FILE_NONE: TGKeyFileFlags = 0; G_KEY_FILE_KEEP_COMMENTS: TGKeyFileFlags = 1; G_KEY_FILE_KEEP_TRANSLATIONS: TGKeyFileFlags = 2; type TGKeyFileError = Integer; const { GKeyFileError } G_KEY_FILE_ERROR_UNKNOWN_ENCODING: TGKeyFileError = 0; G_KEY_FILE_ERROR_PARSE: TGKeyFileError = 1; G_KEY_FILE_ERROR_NOT_FOUND: TGKeyFileError = 2; G_KEY_FILE_ERROR_KEY_NOT_FOUND: TGKeyFileError = 3; G_KEY_FILE_ERROR_GROUP_NOT_FOUND: TGKeyFileError = 4; G_KEY_FILE_ERROR_INVALID_VALUE: TGKeyFileError = 5; type TGLogLevelFlags = Integer; const { GLogLevelFlags } G_LOG_FLAG_RECURSION: TGLogLevelFlags = 1; G_LOG_FLAG_FATAL: TGLogLevelFlags = 2; G_LOG_LEVEL_ERROR: TGLogLevelFlags = 4; G_LOG_LEVEL_CRITICAL: TGLogLevelFlags = 8; G_LOG_LEVEL_WARNING: TGLogLevelFlags = 16; G_LOG_LEVEL_MESSAGE: TGLogLevelFlags = 32; G_LOG_LEVEL_INFO: TGLogLevelFlags = 64; G_LOG_LEVEL_DEBUG: TGLogLevelFlags = 128; G_LOG_LEVEL_MASK: TGLogLevelFlags = -4; type TGMarkupCollectType = Integer; const { GMarkupCollectType } G_MARKUP_COLLECT_INVALID: TGMarkupCollectType = 0; G_MARKUP_COLLECT_STRING: TGMarkupCollectType = 1; G_MARKUP_COLLECT_STRDUP: TGMarkupCollectType = 2; G_MARKUP_COLLECT_BOOLEAN: TGMarkupCollectType = 3; G_MARKUP_COLLECT_TRISTATE: TGMarkupCollectType = 4; G_MARKUP_COLLECT_OPTIONAL: TGMarkupCollectType = 65536; type TGMarkupError = Integer; const { GMarkupError } G_MARKUP_ERROR_BAD_UTF8: TGMarkupError = 0; G_MARKUP_ERROR_EMPTY: TGMarkupError = 1; G_MARKUP_ERROR_PARSE: TGMarkupError = 2; G_MARKUP_ERROR_UNKNOWN_ELEMENT: TGMarkupError = 3; G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: TGMarkupError = 4; G_MARKUP_ERROR_INVALID_CONTENT: TGMarkupError = 5; G_MARKUP_ERROR_MISSING_ATTRIBUTE: TGMarkupError = 6; type TGMarkupParseFlags = Integer; const { GMarkupParseFlags } G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: TGMarkupParseFlags = 1; G_MARKUP_TREAT_CDATA_AS_TEXT: TGMarkupParseFlags = 2; G_MARKUP_PREFIX_ERROR_POSITION: TGMarkupParseFlags = 4; type TGRegexCompileFlags = Integer; const { GRegexCompileFlags } G_REGEX_CASELESS: TGRegexCompileFlags = 1; G_REGEX_MULTILINE: TGRegexCompileFlags = 2; G_REGEX_DOTALL: TGRegexCompileFlags = 4; G_REGEX_EXTENDED: TGRegexCompileFlags = 8; G_REGEX_ANCHORED: TGRegexCompileFlags = 16; G_REGEX_DOLLAR_ENDONLY: TGRegexCompileFlags = 32; G_REGEX_UNGREEDY: TGRegexCompileFlags = 512; G_REGEX_RAW: TGRegexCompileFlags = 2048; G_REGEX_NO_AUTO_CAPTURE: TGRegexCompileFlags = 4096; G_REGEX_OPTIMIZE: TGRegexCompileFlags = 8192; G_REGEX_FIRSTLINE: TGRegexCompileFlags = 262144; G_REGEX_DUPNAMES: TGRegexCompileFlags = 524288; G_REGEX_NEWLINE_CR: TGRegexCompileFlags = 1048576; G_REGEX_NEWLINE_LF: TGRegexCompileFlags = 2097152; G_REGEX_NEWLINE_CRLF: TGRegexCompileFlags = 3145728; G_REGEX_NEWLINE_ANYCRLF: TGRegexCompileFlags = 5242880; G_REGEX_BSR_ANYCRLF: TGRegexCompileFlags = 8388608; G_REGEX_JAVASCRIPT_COMPAT: TGRegexCompileFlags = 33554432; type TGRegexMatchFlags = Integer; const { GRegexMatchFlags } G_REGEX_MATCH_ANCHORED: TGRegexMatchFlags = 16; G_REGEX_MATCH_NOTBOL: TGRegexMatchFlags = 128; G_REGEX_MATCH_NOTEOL: TGRegexMatchFlags = 256; G_REGEX_MATCH_NOTEMPTY: TGRegexMatchFlags = 1024; G_REGEX_MATCH_PARTIAL: TGRegexMatchFlags = 32768; G_REGEX_MATCH_NEWLINE_CR: TGRegexMatchFlags = 1048576; G_REGEX_MATCH_NEWLINE_LF: TGRegexMatchFlags = 2097152; G_REGEX_MATCH_NEWLINE_CRLF: TGRegexMatchFlags = 3145728; G_REGEX_MATCH_NEWLINE_ANY: TGRegexMatchFlags = 4194304; G_REGEX_MATCH_NEWLINE_ANYCRLF: TGRegexMatchFlags = 5242880; G_REGEX_MATCH_BSR_ANYCRLF: TGRegexMatchFlags = 8388608; G_REGEX_MATCH_BSR_ANY: TGRegexMatchFlags = 16777216; G_REGEX_MATCH_PARTIAL_SOFT: TGRegexMatchFlags = 32768; G_REGEX_MATCH_PARTIAL_HARD: TGRegexMatchFlags = 134217728; G_REGEX_MATCH_NOTEMPTY_ATSTART: TGRegexMatchFlags = 268435456; type TGTraverseFlags = Integer; const { GTraverseFlags } G_TRAVERSE_LEAVES: TGTraverseFlags = 1; G_TRAVERSE_NON_LEAVES: TGTraverseFlags = 2; G_TRAVERSE_ALL: TGTraverseFlags = 3; G_TRAVERSE_MASK: TGTraverseFlags = 3; G_TRAVERSE_LEAFS: TGTraverseFlags = 1; G_TRAVERSE_NON_LEAFS: TGTraverseFlags = 2; type TGTraverseType = Integer; const { GTraverseType } G_IN_ORDER: TGTraverseType = 0; G_PRE_ORDER: TGTraverseType = 1; G_POST_ORDER: TGTraverseType = 2; G_LEVEL_ORDER: TGTraverseType = 3; type TGNormalizeMode = Integer; const { GNormalizeMode } G_NORMALIZE_DEFAULT: TGNormalizeMode = 0; G_NORMALIZE_NFD: TGNormalizeMode = 0; G_NORMALIZE_DEFAULT_COMPOSE: TGNormalizeMode = 1; G_NORMALIZE_NFC: TGNormalizeMode = 1; G_NORMALIZE_ALL: TGNormalizeMode = 2; G_NORMALIZE_NFKD: TGNormalizeMode = 2; G_NORMALIZE_ALL_COMPOSE: TGNormalizeMode = 3; G_NORMALIZE_NFKC: TGNormalizeMode = 3; type TGOnceStatus = Integer; const { GOnceStatus } G_ONCE_STATUS_NOTCALLED: TGOnceStatus = 0; G_ONCE_STATUS_PROGRESS: TGOnceStatus = 1; G_ONCE_STATUS_READY: TGOnceStatus = 2; type TGOptionArg = Integer; const { GOptionArg } G_OPTION_ARG_NONE: TGOptionArg = 0; G_OPTION_ARG_STRING: TGOptionArg = 1; G_OPTION_ARG_INT: TGOptionArg = 2; G_OPTION_ARG_CALLBACK: TGOptionArg = 3; G_OPTION_ARG_FILENAME: TGOptionArg = 4; G_OPTION_ARG_STRING_ARRAY: TGOptionArg = 5; G_OPTION_ARG_FILENAME_ARRAY: TGOptionArg = 6; G_OPTION_ARG_DOUBLE: TGOptionArg = 7; G_OPTION_ARG_INT64: TGOptionArg = 8; type TGOptionError = Integer; const { GOptionError } G_OPTION_ERROR_UNKNOWN_OPTION: TGOptionError = 0; G_OPTION_ERROR_BAD_VALUE: TGOptionError = 1; G_OPTION_ERROR_FAILED: TGOptionError = 2; type TGOptionFlags = Integer; const { GOptionFlags } G_OPTION_FLAG_HIDDEN: TGOptionFlags = 1; G_OPTION_FLAG_IN_MAIN: TGOptionFlags = 2; G_OPTION_FLAG_REVERSE: TGOptionFlags = 4; G_OPTION_FLAG_NO_ARG: TGOptionFlags = 8; G_OPTION_FLAG_FILENAME: TGOptionFlags = 16; G_OPTION_FLAG_OPTIONAL_ARG: TGOptionFlags = 32; G_OPTION_FLAG_NOALIAS: TGOptionFlags = 64; type TGRegexError = Integer; const { GRegexError } G_REGEX_ERROR_COMPILE: TGRegexError = 0; G_REGEX_ERROR_OPTIMIZE: TGRegexError = 1; G_REGEX_ERROR_REPLACE: TGRegexError = 2; G_REGEX_ERROR_MATCH: TGRegexError = 3; G_REGEX_ERROR_INTERNAL: TGRegexError = 4; G_REGEX_ERROR_STRAY_BACKSLASH: TGRegexError = 101; G_REGEX_ERROR_MISSING_CONTROL_CHAR: TGRegexError = 102; G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: TGRegexError = 103; G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: TGRegexError = 104; G_REGEX_ERROR_QUANTIFIER_TOO_BIG: TGRegexError = 105; G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: TGRegexError = 106; G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: TGRegexError = 107; G_REGEX_ERROR_RANGE_OUT_OF_ORDER: TGRegexError = 108; G_REGEX_ERROR_NOTHING_TO_REPEAT: TGRegexError = 109; G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: TGRegexError = 112; G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: TGRegexError = 113; G_REGEX_ERROR_UNMATCHED_PARENTHESIS: TGRegexError = 114; G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: TGRegexError = 115; G_REGEX_ERROR_UNTERMINATED_COMMENT: TGRegexError = 118; G_REGEX_ERROR_EXPRESSION_TOO_LARGE: TGRegexError = 120; G_REGEX_ERROR_MEMORY_ERROR: TGRegexError = 121; G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: TGRegexError = 125; G_REGEX_ERROR_MALFORMED_CONDITION: TGRegexError = 126; G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: TGRegexError = 127; G_REGEX_ERROR_ASSERTION_EXPECTED: TGRegexError = 128; G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: TGRegexError = 130; G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: TGRegexError = 131; G_REGEX_ERROR_HEX_CODE_TOO_LARGE: TGRegexError = 134; G_REGEX_ERROR_INVALID_CONDITION: TGRegexError = 135; G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: TGRegexError = 136; G_REGEX_ERROR_INFINITE_LOOP: TGRegexError = 140; G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: TGRegexError = 142; G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: TGRegexError = 143; G_REGEX_ERROR_MALFORMED_PROPERTY: TGRegexError = 146; G_REGEX_ERROR_UNKNOWN_PROPERTY: TGRegexError = 147; G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: TGRegexError = 148; G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: TGRegexError = 149; G_REGEX_ERROR_INVALID_OCTAL_VALUE: TGRegexError = 151; G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: TGRegexError = 154; G_REGEX_ERROR_DEFINE_REPETION: TGRegexError = 155; G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: TGRegexError = 156; G_REGEX_ERROR_MISSING_BACK_REFERENCE: TGRegexError = 157; G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: TGRegexError = 158; G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: TGRegexError = 159; G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: TGRegexError = 160; G_REGEX_ERROR_NUMBER_TOO_BIG: TGRegexError = 161; G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: TGRegexError = 162; G_REGEX_ERROR_MISSING_DIGIT: TGRegexError = 163; G_REGEX_ERROR_INVALID_DATA_CHARACTER: TGRegexError = 164; G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: TGRegexError = 165; G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: TGRegexError = 166; G_REGEX_ERROR_INVALID_CONTROL_CHAR: TGRegexError = 168; G_REGEX_ERROR_MISSING_NAME: TGRegexError = 169; G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: TGRegexError = 171; G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: TGRegexError = 172; G_REGEX_ERROR_NAME_TOO_LONG: TGRegexError = 175; G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: TGRegexError = 176; type TGTokenType = Integer; const { GTokenType } G_TOKEN_EOF: TGTokenType = 0; G_TOKEN_LEFT_PAREN: TGTokenType = 40; G_TOKEN_RIGHT_PAREN: TGTokenType = 41; G_TOKEN_LEFT_CURLY: TGTokenType = 123; G_TOKEN_RIGHT_CURLY: TGTokenType = 125; G_TOKEN_LEFT_BRACE: TGTokenType = 91; G_TOKEN_RIGHT_BRACE: TGTokenType = 93; G_TOKEN_EQUAL_SIGN: TGTokenType = 61; G_TOKEN_COMMA: TGTokenType = 44; G_TOKEN_NONE: TGTokenType = 256; G_TOKEN_ERROR: TGTokenType = 257; G_TOKEN_CHAR: TGTokenType = 258; G_TOKEN_BINARY: TGTokenType = 259; G_TOKEN_OCTAL: TGTokenType = 260; G_TOKEN_INT: TGTokenType = 261; G_TOKEN_HEX: TGTokenType = 262; G_TOKEN_FLOAT: TGTokenType = 263; G_TOKEN_STRING: TGTokenType = 264; G_TOKEN_SYMBOL: TGTokenType = 265; G_TOKEN_IDENTIFIER: TGTokenType = 266; G_TOKEN_IDENTIFIER_NULL: TGTokenType = 267; G_TOKEN_COMMENT_SINGLE: TGTokenType = 268; G_TOKEN_COMMENT_MULTI: TGTokenType = 269; type TGShellError = Integer; const { GShellError } G_SHELL_ERROR_BAD_QUOTING: TGShellError = 0; G_SHELL_ERROR_EMPTY_STRING: TGShellError = 1; G_SHELL_ERROR_FAILED: TGShellError = 2; type TGSliceConfig = Integer; const { GSliceConfig } G_SLICE_CONFIG_ALWAYS_MALLOC: TGSliceConfig = 1; G_SLICE_CONFIG_BYPASS_MAGAZINES: TGSliceConfig = 2; G_SLICE_CONFIG_WORKING_SET_MSECS: TGSliceConfig = 3; G_SLICE_CONFIG_COLOR_INCREMENT: TGSliceConfig = 4; G_SLICE_CONFIG_CHUNK_SIZES: TGSliceConfig = 5; G_SLICE_CONFIG_CONTENTION_COUNTER: TGSliceConfig = 6; type TGSpawnError = Integer; const { GSpawnError } G_SPAWN_ERROR_FORK: TGSpawnError = 0; G_SPAWN_ERROR_READ: TGSpawnError = 1; G_SPAWN_ERROR_CHDIR: TGSpawnError = 2; G_SPAWN_ERROR_ACCES: TGSpawnError = 3; G_SPAWN_ERROR_PERM: TGSpawnError = 4; G_SPAWN_ERROR_TOO_BIG: TGSpawnError = 5; G_SPAWN_ERROR_2BIG: TGSpawnError = 5; G_SPAWN_ERROR_NOEXEC: TGSpawnError = 6; G_SPAWN_ERROR_NAMETOOLONG: TGSpawnError = 7; G_SPAWN_ERROR_NOENT: TGSpawnError = 8; G_SPAWN_ERROR_NOMEM: TGSpawnError = 9; G_SPAWN_ERROR_NOTDIR: TGSpawnError = 10; G_SPAWN_ERROR_LOOP: TGSpawnError = 11; G_SPAWN_ERROR_TXTBUSY: TGSpawnError = 12; G_SPAWN_ERROR_IO: TGSpawnError = 13; G_SPAWN_ERROR_NFILE: TGSpawnError = 14; G_SPAWN_ERROR_MFILE: TGSpawnError = 15; G_SPAWN_ERROR_INVAL: TGSpawnError = 16; G_SPAWN_ERROR_ISDIR: TGSpawnError = 17; G_SPAWN_ERROR_LIBBAD: TGSpawnError = 18; G_SPAWN_ERROR_FAILED: TGSpawnError = 19; type TGSpawnFlags = Integer; const { GSpawnFlags } G_SPAWN_LEAVE_DESCRIPTORS_OPEN: TGSpawnFlags = 1; G_SPAWN_DO_NOT_REAP_CHILD: TGSpawnFlags = 2; G_SPAWN_SEARCH_PATH: TGSpawnFlags = 4; G_SPAWN_STDOUT_TO_DEV_NULL: TGSpawnFlags = 8; G_SPAWN_STDERR_TO_DEV_NULL: TGSpawnFlags = 16; G_SPAWN_CHILD_INHERITS_STDIN: TGSpawnFlags = 32; G_SPAWN_FILE_AND_ARGV_ZERO: TGSpawnFlags = 64; G_SPAWN_SEARCH_PATH_FROM_ENVP: TGSpawnFlags = 128; type TGTestLogType = Integer; const { GTestLogType } G_TEST_LOG_NONE: TGTestLogType = 0; G_TEST_LOG_ERROR: TGTestLogType = 1; G_TEST_LOG_START_BINARY: TGTestLogType = 2; G_TEST_LOG_LIST_CASE: TGTestLogType = 3; G_TEST_LOG_SKIP_CASE: TGTestLogType = 4; G_TEST_LOG_START_CASE: TGTestLogType = 5; G_TEST_LOG_STOP_CASE: TGTestLogType = 6; G_TEST_LOG_MIN_RESULT: TGTestLogType = 7; G_TEST_LOG_MAX_RESULT: TGTestLogType = 8; G_TEST_LOG_MESSAGE: TGTestLogType = 9; type TGTestTrapFlags = Integer; const { GTestTrapFlags } G_TEST_TRAP_SILENCE_STDOUT: TGTestTrapFlags = 128; G_TEST_TRAP_SILENCE_STDERR: TGTestTrapFlags = 256; G_TEST_TRAP_INHERIT_STDIN: TGTestTrapFlags = 512; type TGThreadError = Integer; const { GThreadError } G_THREAD_ERROR_AGAIN: TGThreadError = 0; type TGUnicodeBreakType = Integer; const { GUnicodeBreakType } G_UNICODE_BREAK_MANDATORY: TGUnicodeBreakType = 0; G_UNICODE_BREAK_CARRIAGE_RETURN: TGUnicodeBreakType = 1; G_UNICODE_BREAK_LINE_FEED: TGUnicodeBreakType = 2; G_UNICODE_BREAK_COMBINING_MARK: TGUnicodeBreakType = 3; G_UNICODE_BREAK_SURROGATE: TGUnicodeBreakType = 4; G_UNICODE_BREAK_ZERO_WIDTH_SPACE: TGUnicodeBreakType = 5; G_UNICODE_BREAK_INSEPARABLE: TGUnicodeBreakType = 6; G_UNICODE_BREAK_NON_BREAKING_GLUE: TGUnicodeBreakType = 7; G_UNICODE_BREAK_CONTINGENT: TGUnicodeBreakType = 8; G_UNICODE_BREAK_SPACE: TGUnicodeBreakType = 9; G_UNICODE_BREAK_AFTER: TGUnicodeBreakType = 10; G_UNICODE_BREAK_BEFORE: TGUnicodeBreakType = 11; G_UNICODE_BREAK_BEFORE_AND_AFTER: TGUnicodeBreakType = 12; G_UNICODE_BREAK_HYPHEN: TGUnicodeBreakType = 13; G_UNICODE_BREAK_NON_STARTER: TGUnicodeBreakType = 14; G_UNICODE_BREAK_OPEN_PUNCTUATION: TGUnicodeBreakType = 15; G_UNICODE_BREAK_CLOSE_PUNCTUATION: TGUnicodeBreakType = 16; G_UNICODE_BREAK_QUOTATION: TGUnicodeBreakType = 17; G_UNICODE_BREAK_EXCLAMATION: TGUnicodeBreakType = 18; G_UNICODE_BREAK_IDEOGRAPHIC: TGUnicodeBreakType = 19; G_UNICODE_BREAK_NUMERIC: TGUnicodeBreakType = 20; G_UNICODE_BREAK_INFIX_SEPARATOR: TGUnicodeBreakType = 21; G_UNICODE_BREAK_SYMBOL: TGUnicodeBreakType = 22; G_UNICODE_BREAK_ALPHABETIC: TGUnicodeBreakType = 23; G_UNICODE_BREAK_PREFIX: TGUnicodeBreakType = 24; G_UNICODE_BREAK_POSTFIX: TGUnicodeBreakType = 25; G_UNICODE_BREAK_COMPLEX_CONTEXT: TGUnicodeBreakType = 26; G_UNICODE_BREAK_AMBIGUOUS: TGUnicodeBreakType = 27; G_UNICODE_BREAK_UNKNOWN: TGUnicodeBreakType = 28; G_UNICODE_BREAK_NEXT_LINE: TGUnicodeBreakType = 29; G_UNICODE_BREAK_WORD_JOINER: TGUnicodeBreakType = 30; G_UNICODE_BREAK_HANGUL_L_JAMO: TGUnicodeBreakType = 31; G_UNICODE_BREAK_HANGUL_V_JAMO: TGUnicodeBreakType = 32; G_UNICODE_BREAK_HANGUL_T_JAMO: TGUnicodeBreakType = 33; G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: TGUnicodeBreakType = 34; G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: TGUnicodeBreakType = 35; G_UNICODE_BREAK_CLOSE_PARANTHESIS: TGUnicodeBreakType = 36; G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: TGUnicodeBreakType = 37; G_UNICODE_BREAK_HEBREW_LETTER: TGUnicodeBreakType = 38; G_UNICODE_BREAK_REGIONAL_INDICATOR: TGUnicodeBreakType = 39; type TGUnicodeScript = Integer; const { GUnicodeScript } G_UNICODE_SCRIPT_INVALID_CODE: TGUnicodeScript = -1; G_UNICODE_SCRIPT_COMMON: TGUnicodeScript = 0; G_UNICODE_SCRIPT_INHERITED: TGUnicodeScript = 1; G_UNICODE_SCRIPT_ARABIC: TGUnicodeScript = 2; G_UNICODE_SCRIPT_ARMENIAN: TGUnicodeScript = 3; G_UNICODE_SCRIPT_BENGALI: TGUnicodeScript = 4; G_UNICODE_SCRIPT_BOPOMOFO: TGUnicodeScript = 5; G_UNICODE_SCRIPT_CHEROKEE: TGUnicodeScript = 6; G_UNICODE_SCRIPT_COPTIC: TGUnicodeScript = 7; G_UNICODE_SCRIPT_CYRILLIC: TGUnicodeScript = 8; G_UNICODE_SCRIPT_DESERET: TGUnicodeScript = 9; G_UNICODE_SCRIPT_DEVANAGARI: TGUnicodeScript = 10; G_UNICODE_SCRIPT_ETHIOPIC: TGUnicodeScript = 11; G_UNICODE_SCRIPT_GEORGIAN: TGUnicodeScript = 12; G_UNICODE_SCRIPT_GOTHIC: TGUnicodeScript = 13; G_UNICODE_SCRIPT_GREEK: TGUnicodeScript = 14; G_UNICODE_SCRIPT_GUJARATI: TGUnicodeScript = 15; G_UNICODE_SCRIPT_GURMUKHI: TGUnicodeScript = 16; G_UNICODE_SCRIPT_HAN: TGUnicodeScript = 17; G_UNICODE_SCRIPT_HANGUL: TGUnicodeScript = 18; G_UNICODE_SCRIPT_HEBREW: TGUnicodeScript = 19; G_UNICODE_SCRIPT_HIRAGANA: TGUnicodeScript = 20; G_UNICODE_SCRIPT_KANNADA: TGUnicodeScript = 21; G_UNICODE_SCRIPT_KATAKANA: TGUnicodeScript = 22; G_UNICODE_SCRIPT_KHMER: TGUnicodeScript = 23; G_UNICODE_SCRIPT_LAO: TGUnicodeScript = 24; G_UNICODE_SCRIPT_LATIN: TGUnicodeScript = 25; G_UNICODE_SCRIPT_MALAYALAM: TGUnicodeScript = 26; G_UNICODE_SCRIPT_MONGOLIAN: TGUnicodeScript = 27; G_UNICODE_SCRIPT_MYANMAR: TGUnicodeScript = 28; G_UNICODE_SCRIPT_OGHAM: TGUnicodeScript = 29; G_UNICODE_SCRIPT_OLD_ITALIC: TGUnicodeScript = 30; G_UNICODE_SCRIPT_ORIYA: TGUnicodeScript = 31; G_UNICODE_SCRIPT_RUNIC: TGUnicodeScript = 32; G_UNICODE_SCRIPT_SINHALA: TGUnicodeScript = 33; G_UNICODE_SCRIPT_SYRIAC: TGUnicodeScript = 34; G_UNICODE_SCRIPT_TAMIL: TGUnicodeScript = 35; G_UNICODE_SCRIPT_TELUGU: TGUnicodeScript = 36; G_UNICODE_SCRIPT_THAANA: TGUnicodeScript = 37; G_UNICODE_SCRIPT_THAI: TGUnicodeScript = 38; G_UNICODE_SCRIPT_TIBETAN: TGUnicodeScript = 39; G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL: TGUnicodeScript = 40; G_UNICODE_SCRIPT_YI: TGUnicodeScript = 41; G_UNICODE_SCRIPT_TAGALOG: TGUnicodeScript = 42; G_UNICODE_SCRIPT_HANUNOO: TGUnicodeScript = 43; G_UNICODE_SCRIPT_BUHID: TGUnicodeScript = 44; G_UNICODE_SCRIPT_TAGBANWA: TGUnicodeScript = 45; G_UNICODE_SCRIPT_BRAILLE: TGUnicodeScript = 46; G_UNICODE_SCRIPT_CYPRIOT: TGUnicodeScript = 47; G_UNICODE_SCRIPT_LIMBU: TGUnicodeScript = 48; G_UNICODE_SCRIPT_OSMANYA: TGUnicodeScript = 49; G_UNICODE_SCRIPT_SHAVIAN: TGUnicodeScript = 50; G_UNICODE_SCRIPT_LINEAR_B: TGUnicodeScript = 51; G_UNICODE_SCRIPT_TAI_LE: TGUnicodeScript = 52; G_UNICODE_SCRIPT_UGARITIC: TGUnicodeScript = 53; G_UNICODE_SCRIPT_NEW_TAI_LUE: TGUnicodeScript = 54; G_UNICODE_SCRIPT_BUGINESE: TGUnicodeScript = 55; G_UNICODE_SCRIPT_GLAGOLITIC: TGUnicodeScript = 56; G_UNICODE_SCRIPT_TIFINAGH: TGUnicodeScript = 57; G_UNICODE_SCRIPT_SYLOTI_NAGRI: TGUnicodeScript = 58; G_UNICODE_SCRIPT_OLD_PERSIAN: TGUnicodeScript = 59; G_UNICODE_SCRIPT_KHAROSHTHI: TGUnicodeScript = 60; G_UNICODE_SCRIPT_UNKNOWN: TGUnicodeScript = 61; G_UNICODE_SCRIPT_BALINESE: TGUnicodeScript = 62; G_UNICODE_SCRIPT_CUNEIFORM: TGUnicodeScript = 63; G_UNICODE_SCRIPT_PHOENICIAN: TGUnicodeScript = 64; G_UNICODE_SCRIPT_PHAGS_PA: TGUnicodeScript = 65; G_UNICODE_SCRIPT_NKO: TGUnicodeScript = 66; G_UNICODE_SCRIPT_KAYAH_LI: TGUnicodeScript = 67; G_UNICODE_SCRIPT_LEPCHA: TGUnicodeScript = 68; G_UNICODE_SCRIPT_REJANG: TGUnicodeScript = 69; G_UNICODE_SCRIPT_SUNDANESE: TGUnicodeScript = 70; G_UNICODE_SCRIPT_SAURASHTRA: TGUnicodeScript = 71; G_UNICODE_SCRIPT_CHAM: TGUnicodeScript = 72; G_UNICODE_SCRIPT_OL_CHIKI: TGUnicodeScript = 73; G_UNICODE_SCRIPT_VAI: TGUnicodeScript = 74; G_UNICODE_SCRIPT_CARIAN: TGUnicodeScript = 75; G_UNICODE_SCRIPT_LYCIAN: TGUnicodeScript = 76; G_UNICODE_SCRIPT_LYDIAN: TGUnicodeScript = 77; G_UNICODE_SCRIPT_AVESTAN: TGUnicodeScript = 78; G_UNICODE_SCRIPT_BAMUM: TGUnicodeScript = 79; G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS: TGUnicodeScript = 80; G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC: TGUnicodeScript = 81; G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI: TGUnicodeScript = 82; G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN: TGUnicodeScript = 83; G_UNICODE_SCRIPT_JAVANESE: TGUnicodeScript = 84; G_UNICODE_SCRIPT_KAITHI: TGUnicodeScript = 85; G_UNICODE_SCRIPT_LISU: TGUnicodeScript = 86; G_UNICODE_SCRIPT_MEETEI_MAYEK: TGUnicodeScript = 87; G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN: TGUnicodeScript = 88; G_UNICODE_SCRIPT_OLD_TURKIC: TGUnicodeScript = 89; G_UNICODE_SCRIPT_SAMARITAN: TGUnicodeScript = 90; G_UNICODE_SCRIPT_TAI_THAM: TGUnicodeScript = 91; G_UNICODE_SCRIPT_TAI_VIET: TGUnicodeScript = 92; G_UNICODE_SCRIPT_BATAK: TGUnicodeScript = 93; G_UNICODE_SCRIPT_BRAHMI: TGUnicodeScript = 94; G_UNICODE_SCRIPT_MANDAIC: TGUnicodeScript = 95; G_UNICODE_SCRIPT_CHAKMA: TGUnicodeScript = 96; G_UNICODE_SCRIPT_MEROITIC_CURSIVE: TGUnicodeScript = 97; G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: TGUnicodeScript = 98; G_UNICODE_SCRIPT_MIAO: TGUnicodeScript = 99; G_UNICODE_SCRIPT_SHARADA: TGUnicodeScript = 100; G_UNICODE_SCRIPT_SORA_SOMPENG: TGUnicodeScript = 101; G_UNICODE_SCRIPT_TAKRI: TGUnicodeScript = 102; type TGUnicodeType = Integer; const { GUnicodeType } G_UNICODE_CONTROL: TGUnicodeType = 0; G_UNICODE_FORMAT: TGUnicodeType = 1; G_UNICODE_UNASSIGNED: TGUnicodeType = 2; G_UNICODE_PRIVATE_USE: TGUnicodeType = 3; G_UNICODE_SURROGATE: TGUnicodeType = 4; G_UNICODE_LOWERCASE_LETTER: TGUnicodeType = 5; G_UNICODE_MODIFIER_LETTER: TGUnicodeType = 6; G_UNICODE_OTHER_LETTER: TGUnicodeType = 7; G_UNICODE_TITLECASE_LETTER: TGUnicodeType = 8; G_UNICODE_UPPERCASE_LETTER: TGUnicodeType = 9; G_UNICODE_SPACING_MARK: TGUnicodeType = 10; G_UNICODE_ENCLOSING_MARK: TGUnicodeType = 11; G_UNICODE_NON_SPACING_MARK: TGUnicodeType = 12; G_UNICODE_DECIMAL_NUMBER: TGUnicodeType = 13; G_UNICODE_LETTER_NUMBER: TGUnicodeType = 14; G_UNICODE_OTHER_NUMBER: TGUnicodeType = 15; G_UNICODE_CONNECT_PUNCTUATION: TGUnicodeType = 16; G_UNICODE_DASH_PUNCTUATION: TGUnicodeType = 17; G_UNICODE_CLOSE_PUNCTUATION: TGUnicodeType = 18; G_UNICODE_FINAL_PUNCTUATION: TGUnicodeType = 19; G_UNICODE_INITIAL_PUNCTUATION: TGUnicodeType = 20; G_UNICODE_OTHER_PUNCTUATION: TGUnicodeType = 21; G_UNICODE_OPEN_PUNCTUATION: TGUnicodeType = 22; G_UNICODE_CURRENCY_SYMBOL: TGUnicodeType = 23; G_UNICODE_MODIFIER_SYMBOL: TGUnicodeType = 24; G_UNICODE_MATH_SYMBOL: TGUnicodeType = 25; G_UNICODE_OTHER_SYMBOL: TGUnicodeType = 26; G_UNICODE_LINE_SEPARATOR: TGUnicodeType = 27; G_UNICODE_PARAGRAPH_SEPARATOR: TGUnicodeType = 28; G_UNICODE_SPACE_SEPARATOR: TGUnicodeType = 29; type TGUserDirectory = Integer; const { GUserDirectory } G_USER_DIRECTORY_DESKTOP: TGUserDirectory = 0; G_USER_DIRECTORY_DOCUMENTS: TGUserDirectory = 1; G_USER_DIRECTORY_DOWNLOAD: TGUserDirectory = 2; G_USER_DIRECTORY_MUSIC: TGUserDirectory = 3; G_USER_DIRECTORY_PICTURES: TGUserDirectory = 4; G_USER_DIRECTORY_PUBLIC_SHARE: TGUserDirectory = 5; G_USER_DIRECTORY_TEMPLATES: TGUserDirectory = 6; G_USER_DIRECTORY_VIDEOS: TGUserDirectory = 7; G_USER_N_DIRECTORIES: TGUserDirectory = 8; type TGVariantClass = Integer; const { GVariantClass } G_VARIANT_CLASS_BOOLEAN: TGVariantClass = 98; G_VARIANT_CLASS_BYTE: TGVariantClass = 121; G_VARIANT_CLASS_INT16: TGVariantClass = 110; G_VARIANT_CLASS_UINT16: TGVariantClass = 113; G_VARIANT_CLASS_INT32: TGVariantClass = 105; G_VARIANT_CLASS_UINT32: TGVariantClass = 117; G_VARIANT_CLASS_INT64: TGVariantClass = 120; G_VARIANT_CLASS_UINT64: TGVariantClass = 116; G_VARIANT_CLASS_HANDLE: TGVariantClass = 104; G_VARIANT_CLASS_DOUBLE: TGVariantClass = 100; G_VARIANT_CLASS_STRING: TGVariantClass = 115; G_VARIANT_CLASS_OBJECT_PATH: TGVariantClass = 111; G_VARIANT_CLASS_SIGNATURE: TGVariantClass = 103; G_VARIANT_CLASS_VARIANT: TGVariantClass = 118; G_VARIANT_CLASS_MAYBE: TGVariantClass = 109; G_VARIANT_CLASS_ARRAY: TGVariantClass = 97; G_VARIANT_CLASS_TUPLE: TGVariantClass = 40; G_VARIANT_CLASS_DICT_ENTRY: TGVariantClass = 123; type TGVariantParseError = Integer; const { GVariantParseError } G_VARIANT_PARSE_ERROR_FAILED: TGVariantParseError = 0; G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED: TGVariantParseError = 1; G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE: TGVariantParseError = 2; G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED: TGVariantParseError = 3; G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END: TGVariantParseError = 4; G_VARIANT_PARSE_ERROR_INVALID_CHARACTER: TGVariantParseError = 5; G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING: TGVariantParseError = 6; G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH: TGVariantParseError = 7; G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE: TGVariantParseError = 8; G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING: TGVariantParseError = 9; G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE: TGVariantParseError = 10; G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE: TGVariantParseError = 11; G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG: TGVariantParseError = 12; G_VARIANT_PARSE_ERROR_TYPE_ERROR: TGVariantParseError = 13; G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN: TGVariantParseError = 14; G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD: TGVariantParseError = 15; G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT: TGVariantParseError = 16; G_VARIANT_PARSE_ERROR_VALUE_EXPECTED: TGVariantParseError = 17; type guint1 = 0..(1 shl 1-1); guint2 = 0..(1 shl 2-1); guint3 = 0..(1 shl 3-1); guint4 = 0..(1 shl 4-1); guint5 = 0..(1 shl 5-1); guint6 = 0..(1 shl 6-1); guint7 = 0..(1 shl 7-1); guint9 = 0..(1 shl 9-1); guint10 = 0..(1 shl 10-1); guint11 = 0..(1 shl 11-1); guint12 = 0..(1 shl 12-1); guint13 = 0..(1 shl 13-1); guint14 = 0..(1 shl 14-1); guint15 = 0..(1 shl 15-1); guint17 = 0..(1 shl 17-1); guint18 = 0..(1 shl 18-1); guint19 = 0..(1 shl 19-1); guint20 = 0..(1 shl 20-1); guint21 = 0..(1 shl 21-1); guint22 = 0..(1 shl 22-1); guint23 = 0..(1 shl 23-1); guint24 = 0..(1 shl 24-1); guint25 = 0..(1 shl 25-1); guint26 = 0..(1 shl 26-1); guint27 = 0..(1 shl 27-1); guint28 = 0..(1 shl 28-1); guint29 = 0..(1 shl 29-1); guint30 = 0..(1 shl 30-1); guint31 = 0..(1 shl 31-1); gpointer = pointer; int = cint; gint = cint; guint = cuint; guint8 = cuint8; guint16 = cuint16; guint32 = cuint32; guint64 = cuint64; gint8 = cint8; gint16 = cint16; gint32 = cint32; gint64 = cint64; gsize = csize_t; glong = clong; gulong = culong; gushort = cushort; gshort = cshort; gchar = char; guchar = byte; gboolean = Boolean32; gssize = PtrInt; size_t = csize_t; gconstpointer = gpointer; gfloat = cfloat; gdouble = cdouble; double = cdouble; goffset = Int64; long_double = Extended; gunichar = guint32; gunichar2 = guint32; unsigned_long_long = qword; PPGDateDay = ^PGDateDay; PGDateDay = ^TGDateDay; TGDateDay = guint8; PPGDateYear = ^PGDateYear; PGDateYear = ^TGDateYear; TGDateYear = guint16; PPGPid = ^PGPid; PGPid = ^TGPid; TGPid = gint; PPGQuark = ^PGQuark; PGQuark = ^TGQuark; TGQuark = guint32; PPGStrv = ^PGStrv; PGStrv = ^TGStrv; TGStrv = gpointer; PPGTime = ^PGTime; PGTime = ^TGTime; TGTime = gint32; PPGTimeSpan = ^PGTimeSpan; PGTimeSpan = ^TGTimeSpan; TGTimeSpan = gint64; PPPGType = ^PPGType; PPGType = ^PGType; PGType = ^TGType; TGType = gsize; PPPgpointer = ^PPgpointer; PPgpointer = ^Pgpointer; Pgpointer = ^gpointer; TGDestroyNotify = procedure(data: gpointer); cdecl; PPPgint = ^PPgint; PPgint = ^Pgint; Pgint = ^gint; TGCompareFunc = function(a: Pgpointer; b: Pgpointer): gint; cdecl; TGCompareDataFunc = function(a: Pgpointer; b: Pgpointer; user_data: gpointer): gint; cdecl; PPGArray = ^PGArray; PGArray = ^TGArray; PPPguint = ^PPguint; PPguint = ^Pguint; Pguint = ^guint; PPPgchar = ^PPgchar; PPgchar = ^Pgchar; Pgchar = ^gchar; PPPgboolean = ^PPgboolean; PPgboolean = ^Pgboolean; Pgboolean = ^gboolean; PPGDestroyNotify = ^PGDestroyNotify; PGDestroyNotify = ^TGDestroyNotify; PPGCompareFunc = ^PGCompareFunc; PGCompareFunc = ^TGCompareFunc; PPGCompareDataFunc = ^PGCompareDataFunc; PGCompareDataFunc = ^TGCompareDataFunc; TGArray = object data: Pgchar; len: guint; end; PPGAsciiType = ^PGAsciiType; PGAsciiType = ^TGAsciiType; PPGAsyncQueue = ^PGAsyncQueue; PGAsyncQueue = ^TGAsyncQueue; PPPguint64 = ^PPguint64; PPguint64 = ^Pguint64; Pguint64 = ^guint64; TGAsyncQueue = object end; PPGTimeVal = ^PGTimeVal; PGTimeVal = ^TGTimeVal; PPPglong = ^PPglong; PPglong = ^Pglong; Pglong = ^glong; TGTimeVal = object tv_sec: glong; tv_usec: glong; end; PPGBookmarkFile = ^PGBookmarkFile; PGBookmarkFile = ^TGBookmarkFile; PPGError = ^PGError; PGError = ^TGError; PPPgsize = ^PPgsize; PPgsize = ^Pgsize; Pgsize = ^gsize; TGBookmarkFile = object end; Pva_list = ^Tva_list; { va_list } Tva_list = record { opaque type } Unknown: Pointer; end; TGError = object domain: TGQuark; code: gint; message: Pgchar; end; PPGBookmarkFileError = ^PGBookmarkFileError; PGBookmarkFileError = ^TGBookmarkFileError; PPGBytes = ^PGBytes; PGBytes = ^TGBytes; PPPguint8 = ^PPguint8; PPguint8 = ^Pguint8; Pguint8 = ^guint8; TGBytes = object end; PPGByteArray = ^PGByteArray; PGByteArray = ^TGByteArray; TGByteArray = object data: Pguint8; len: guint; end; PPGChecksum = ^PGChecksum; PGChecksum = ^TGChecksum; PPGChecksumType = ^PGChecksumType; PGChecksumType = ^TGChecksumType; PPPgssize = ^PPgssize; PPgssize = ^Pgssize; Pgssize = ^gssize; TGChecksum = object end; TGChildWatchFunc = procedure(pid: TGPid; status: gint; user_data: gpointer); cdecl; PPGCond = ^PGCond; PGCond = ^TGCond; PPGMutex = ^PGMutex; PGMutex = ^TGMutex; PPPgint64 = ^PPgint64; PPgint64 = ^Pgint64; Pgint64 = ^gint64; TGCond = object p: gpointer; i: array [0..1] of guint; end; TGMutex = record case longint of 0 : (p: gpointer); 1 : (i: array [0..1] of guint); // // // // // end; PPGConvertError = ^PGConvertError; PGConvertError = ^TGConvertError; TGCopyFunc = function(src: Pgpointer; data: gpointer): gpointer; cdecl; PPGData = ^PGData; PGData = ^TGData; TGData = record end; TGDataForeachFunc = procedure(key_id: TGQuark; data: gpointer; user_data: gpointer); cdecl; PPGDate = ^PGDate; PGDate = ^TGDate; PPGDateMonth = ^PGDateMonth; PGDateMonth = ^TGDateMonth; PPPguint32 = ^PPguint32; PPguint32 = ^Pguint32; Pguint32 = ^guint32; PPGDateWeekday = ^PGDateWeekday; PGDateWeekday = ^TGDateWeekday; TGDateBitfield0 = bitpacked record julian_days: guint32 { changed from guint to accomodate 32 bitsize requirement }; julian: guint1 { changed from guint to accomodate 1 bitsize requirement }; dmy: guint1 { changed from guint to accomodate 1 bitsize requirement }; day: guint6 { changed from guint to accomodate 6 bitsize requirement }; month: guint4 { changed from guint to accomodate 4 bitsize requirement }; year: guint16 { changed from guint to accomodate 16 bitsize requirement }; end; TGDate = object Bitfield0 : TGDateBitfield0; { auto generated type } end; PPGDateDMY = ^PGDateDMY; PGDateDMY = ^TGDateDMY; PPGDateTime = ^PGDateTime; PGDateTime = ^TGDateTime; PPGTimeZone = ^PGTimeZone; PGTimeZone = ^TGTimeZone; PPPgdouble = ^PPgdouble; PPgdouble = ^Pgdouble; Pgdouble = ^gdouble; TGDateTime = object end; PPGTimeType = ^PGTimeType; PGTimeType = ^TGTimeType; PPPgint32 = ^PPgint32; PPgint32 = ^Pgint32; Pgint32 = ^gint32; TGTimeZone = object end; PPGDebugKey = ^PGDebugKey; PGDebugKey = ^TGDebugKey; TGDebugKey = record key: Pgchar; value: guint; end; PPGDir = ^PGDir; PGDir = ^TGDir; TGDir = object end; TGDoubleIEEE754 = record case longint of 0 : (v_double: gdouble); 1 : ( mpn : record mantissa_low: guint32 { changed from guint to accomodate 32 bitsize requirement }; mantissa_high: guint20 { changed from guint to accomodate 20 bitsize requirement }; biased_exponent: guint11 { changed from guint to accomodate 11 bitsize requirement }; sign: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; ); end; TGDuplicateFunc = function(data: gpointer; user_data: gpointer): gpointer; cdecl; TGEqualFunc = function(a: Pgpointer; b: Pgpointer): gboolean; cdecl; PPGErrorType = ^PGErrorType; PGErrorType = ^TGErrorType; PPGFileError = ^PGFileError; PGFileError = ^TGFileError; PPGFileTest = ^PGFileTest; PGFileTest = ^TGFileTest; PPPgfloat = ^PPgfloat; PPgfloat = ^Pgfloat; Pgfloat = ^gfloat; TGFloatIEEE754 = record case longint of 0 : (v_float: gfloat); 1 : ( mpn : record mantissa: guint23 { changed from guint to accomodate 23 bitsize requirement }; biased_exponent: guint8 { changed from guint to accomodate 8 bitsize requirement }; sign: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; ); end; PPGFormatSizeFlags = ^PGFormatSizeFlags; PGFormatSizeFlags = ^TGFormatSizeFlags; TGFreeFunc = procedure(data: gpointer); cdecl; TGFunc = procedure(data: gpointer; user_data: gpointer); cdecl; TGHFunc = procedure(key: gpointer; value: gpointer; user_data: gpointer); cdecl; TGHRFunc = function(key: gpointer; value: gpointer; user_data: gpointer): gboolean; cdecl; TGHashFunc = function(key: Pgpointer): guint; cdecl; PPGHashTable = ^PGHashTable; PGHashTable = ^TGHashTable; PPGHRFunc = ^PGHRFunc; PGHRFunc = ^TGHRFunc; PPGHFunc = ^PGHFunc; PGHFunc = ^TGHFunc; PPGList = ^PGList; PGList = ^TGList; PPGHashFunc = ^PGHashFunc; PGHashFunc = ^TGHashFunc; PPGEqualFunc = ^PGEqualFunc; PGEqualFunc = ^TGEqualFunc; TGHashTable = object end; PPGCopyFunc = ^PGCopyFunc; PGCopyFunc = ^TGCopyFunc; PPGFunc = ^PGFunc; PGFunc = ^TGFunc; TGList = object data: gpointer; next: PGList; prev: PGList; end; PPGHashTableIter = ^PGHashTableIter; PGHashTableIter = ^TGHashTableIter; TGHashTableIter = object dummy1: gpointer; dummy2: gpointer; dummy3: gpointer; dummy4: gint; dummy5: gboolean; dummy6: gpointer; end; PPGHmac = ^PGHmac; PGHmac = ^TGHmac; TGHmac = object end; PPGHook = ^PGHook; PGHook = ^TGHook; PPGHookList = ^PGHookList; PGHookList = ^TGHookList; PPPgulong = ^PPgulong; PPgulong = ^Pgulong; Pgulong = ^gulong; PPGHookFindFunc = ^PGHookFindFunc; PGHookFindFunc = ^TGHookFindFunc; TGHookFindFunc = function(hook: PGHook; data: gpointer): gboolean; cdecl; PPGHookCompareFunc = ^PGHookCompareFunc; PGHookCompareFunc = ^TGHookCompareFunc; TGHookCompareFunc = function(new_hook: PGHook; sibling: PGHook): gint; cdecl; TGHook = object data: gpointer; next: PGHook; prev: PGHook; ref_count: guint; hook_id: gulong; flags: guint; func: gpointer; destroy_1: TGDestroyNotify; end; PPGHookMarshaller = ^PGHookMarshaller; PGHookMarshaller = ^TGHookMarshaller; TGHookMarshaller = procedure(hook: PGHook; marshal_data: gpointer); cdecl; PPGHookCheckMarshaller = ^PGHookCheckMarshaller; PGHookCheckMarshaller = ^TGHookCheckMarshaller; TGHookCheckMarshaller = function(hook: PGHook; marshal_data: gpointer): gboolean; cdecl; TGHookListBitfield0 = bitpacked record hook_size: guint16 { changed from guint to accomodate 16 bitsize requirement }; is_setup: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; PPGHookFinalizeFunc = ^PGHookFinalizeFunc; PGHookFinalizeFunc = ^TGHookFinalizeFunc; TGHookFinalizeFunc = procedure(hook_list: PGHookList; hook: PGHook); cdecl; TGHookList = object seq_id: gulong; Bitfield0 : TGHookListBitfield0; { auto generated type } hooks: PGHook; dummy3: gpointer; finalize_hook: TGHookFinalizeFunc; dummy: array [0..1] of gpointer; end; TGHookCheckFunc = function(data: gpointer): gboolean; cdecl; PPGHookFlagMask = ^PGHookFlagMask; PGHookFlagMask = ^TGHookFlagMask; TGHookFunc = procedure(data: gpointer); cdecl; PPGIConv = ^PGIConv; PGIConv = ^TGIConv; TGIConv = object end; PPGIOFuncs = ^PGIOFuncs; PGIOFuncs = ^TGIOFuncs; PPGIOStatus = ^PGIOStatus; PGIOStatus = ^TGIOStatus; PPGIOChannel = ^PGIOChannel; PGIOChannel = ^TGIOChannel; PPGSeekType = ^PGSeekType; PGSeekType = ^TGSeekType; PPGSource = ^PGSource; PGSource = ^TGSource; PPGIOCondition = ^PGIOCondition; PGIOCondition = ^TGIOCondition; PPGIOFlags = ^PGIOFlags; PGIOFlags = ^TGIOFlags; TGIOFuncs = record io_read: function(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_read: Pgsize; error: PPGError): TGIOStatus; cdecl; io_write: function(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_written: Pgsize; error: PPGError): TGIOStatus; cdecl; io_seek: function(channel: PGIOChannel; offset: gint64; type_: TGSeekType; error: PPGError): TGIOStatus; cdecl; io_close: function(channel: PGIOChannel; error: PPGError): TGIOStatus; cdecl; io_create_watch: function(channel: PGIOChannel; condition: TGIOCondition): PGSource; cdecl; io_free: procedure(channel: PGIOChannel); cdecl; io_set_flags: function(channel: PGIOChannel; flags: TGIOFlags; error: PPGError): TGIOStatus; cdecl; io_get_flags: function(channel: PGIOChannel): TGIOFlags; cdecl; end; PPGString = ^PGString; PGString = ^TGString; PPPgunichar = ^PPgunichar; PPgunichar = ^Pgunichar; Pgunichar = ^gunichar; TGString = object str: Pgchar; len: gsize; allocated_len: gsize; end; PPGIOChannelError = ^PGIOChannelError; PGIOChannelError = ^TGIOChannelError; TGIOChannelBitfield0 = bitpacked record use_buffer: guint1 { changed from guint to accomodate 1 bitsize requirement }; do_encode: guint1 { changed from guint to accomodate 1 bitsize requirement }; close_on_unref: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_readable: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_writeable: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_seekable: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGIOChannel = object ref_count: gint; funcs: PGIOFuncs; encoding: Pgchar; read_cd: TGIConv; write_cd: TGIConv; line_term: Pgchar; line_term_len: guint; buf_size: gsize; read_buf: PGString; encoded_read_buf: PGString; write_buf: PGString; partial_write_buf: array [0..5] of gchar; Bitfield0 : TGIOChannelBitfield0; { auto generated type } reserved1: gpointer; reserved2: gpointer; end; PPGIOError = ^PGIOError; PGIOError = ^TGIOError; TGIOFunc = function(source: PGIOChannel; condition: TGIOCondition; data: gpointer): gboolean; cdecl; PPGSourceFuncs = ^PGSourceFuncs; PGSourceFuncs = ^TGSourceFuncs; PPPGPollFD = ^PPGPollFD; PPGPollFD = ^PGPollFD; PGPollFD = ^TGPollFD; PPGMainContext = ^PGMainContext; PGMainContext = ^TGMainContext; PPGSourceFunc = ^PGSourceFunc; PGSourceFunc = ^TGSourceFunc; TGSourceFunc = function(user_data: gpointer): gboolean; cdecl; PPGSourceCallbackFuncs = ^PGSourceCallbackFuncs; PGSourceCallbackFuncs = ^TGSourceCallbackFuncs; PPGSList = ^PGSList; PGSList = ^TGSList; PPGSourcePrivate = ^PGSourcePrivate; PGSourcePrivate = ^TGSourcePrivate; TGSource = object callback_data: gpointer; callback_funcs: PGSourceCallbackFuncs; source_funcs: PGSourceFuncs; ref_count: guint; context: PGMainContext; priority: gint; flags: guint; source_id: guint; poll_fds: PGSList; prev: PGSource; next: PGSource; name: Pgchar; priv: PGSourcePrivate; end; PPGKeyFile = ^PGKeyFile; PGKeyFile = ^TGKeyFile; PPGKeyFileFlags = ^PGKeyFileFlags; PGKeyFileFlags = ^TGKeyFileFlags; TGKeyFile = object end; PPGKeyFileError = ^PGKeyFileError; PGKeyFileError = ^TGKeyFileError; PPGLogLevelFlags = ^PGLogLevelFlags; PGLogLevelFlags = ^TGLogLevelFlags; TGLogFunc = procedure(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; user_data: gpointer); cdecl; PPGPollFunc = ^PGPollFunc; PGPollFunc = ^TGPollFunc; TGPollFunc = function(ufds: PGPollFD; nfsd: guint; timeout_: gint): gint; cdecl; TGMainContext = object end; PPPgushort = ^PPgushort; PPgushort = ^Pgushort; Pgushort = ^gushort; TGPollFD = object fd: gint; events: gushort; revents: gushort; end; PPGSourceDummyMarshal = ^PGSourceDummyMarshal; PGSourceDummyMarshal = ^TGSourceDummyMarshal; TGSourceDummyMarshal = procedure; cdecl; TGSourceFuncs = record prepare: function(source: PGSource; timeout_: Pgint): gboolean; cdecl; check: function(source: PGSource): gboolean; cdecl; dispatch: function(source: PGSource; callback: TGSourceFunc; user_data: gpointer): gboolean; cdecl; finalize: procedure(source: PGSource); cdecl; closure_callback: TGSourceFunc; closure_marshal: TGSourceDummyMarshal; end; PPGMainLoop = ^PGMainLoop; PGMainLoop = ^TGMainLoop; TGMainLoop = object end; PPGMappedFile = ^PGMappedFile; PGMappedFile = ^TGMappedFile; TGMappedFile = object end; PPGMarkupCollectType = ^PGMarkupCollectType; PGMarkupCollectType = ^TGMarkupCollectType; PPGMarkupError = ^PGMarkupError; PGMarkupError = ^TGMarkupError; PPGMarkupParseContext = ^PGMarkupParseContext; PGMarkupParseContext = ^TGMarkupParseContext; PPGMarkupParser = ^PGMarkupParser; PGMarkupParser = ^TGMarkupParser; PPGMarkupParseFlags = ^PGMarkupParseFlags; PGMarkupParseFlags = ^TGMarkupParseFlags; TGMarkupParseContext = object end; TGMarkupParser = record start_element: procedure(context: PGMarkupParseContext; element_name: Pgchar; attribute_names: PPgchar; attribute_values: PPgchar; user_data: gpointer; error: PPGError); cdecl; end_element: procedure(context: PGMarkupParseContext; element_name: Pgchar; user_data: gpointer; error: PPGError); cdecl; text: procedure(context: PGMarkupParseContext; text: Pgchar; text_len: gsize; user_data: gpointer; error: PPGError); cdecl; passthrough: procedure(context: PGMarkupParseContext; passthrough_text: Pgchar; text_len: gsize; user_data: gpointer; error: PPGError); cdecl; error: procedure(context: PGMarkupParseContext; error: PGError; user_data: gpointer); cdecl; end; TGSList = object data: gpointer; next: PGSList; end; PPGMatchInfo = ^PGMatchInfo; PGMatchInfo = ^TGMatchInfo; PPGRegex = ^PGRegex; PGRegex = ^TGRegex; TGMatchInfo = object end; PPGRegexCompileFlags = ^PGRegexCompileFlags; PGRegexCompileFlags = ^TGRegexCompileFlags; PPGRegexMatchFlags = ^PGRegexMatchFlags; PGRegexMatchFlags = ^TGRegexMatchFlags; PPGRegexEvalCallback = ^PGRegexEvalCallback; PGRegexEvalCallback = ^TGRegexEvalCallback; TGRegexEvalCallback = function(match_info: PGMatchInfo; result_: PGString; user_data: gpointer): gboolean; cdecl; TGRegex = object end; PPGMemVTable = ^PGMemVTable; PGMemVTable = ^TGMemVTable; TGMemVTable = record malloc: function(n_bytes: gsize): gpointer; cdecl; realloc: function(mem: gpointer; n_bytes: gsize): gpointer; cdecl; free: procedure(mem: gpointer); cdecl; calloc: function(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; try_malloc: function(n_bytes: gsize): gpointer; cdecl; try_realloc: function(mem: gpointer; n_bytes: gsize): gpointer; cdecl; end; PPGNode = ^PGNode; PGNode = ^TGNode; PPGTraverseFlags = ^PGTraverseFlags; PGTraverseFlags = ^TGTraverseFlags; PPGNodeForeachFunc = ^PGNodeForeachFunc; PGNodeForeachFunc = ^TGNodeForeachFunc; TGNodeForeachFunc = procedure(node: PGNode; data: gpointer); cdecl; PPGTraverseType = ^PGTraverseType; PGTraverseType = ^TGTraverseType; PPGNodeTraverseFunc = ^PGNodeTraverseFunc; PGNodeTraverseFunc = ^TGNodeTraverseFunc; TGNodeTraverseFunc = function(node: PGNode; data: gpointer): gboolean; cdecl; TGNode = object data: gpointer; next: PGNode; prev: PGNode; parent: PGNode; children: PGNode; end; PPGNormalizeMode = ^PGNormalizeMode; PGNormalizeMode = ^TGNormalizeMode; PPGOnceStatus = ^PGOnceStatus; PGOnceStatus = ^TGOnceStatus; PPGOnce = ^PGOnce; PGOnce = ^TGOnce; PPGThreadFunc = ^PGThreadFunc; PGThreadFunc = ^TGThreadFunc; TGThreadFunc = function(data: gpointer): gpointer; cdecl; TGOnce = object status: TGOnceStatus; retval: gpointer; end; PPGOptionArg = ^PGOptionArg; PGOptionArg = ^TGOptionArg; TGOptionArgFunc = function(option_name: Pgchar; value: Pgchar; data: gpointer; error: PPGError): gboolean; cdecl; PPGOptionContext = ^PGOptionContext; PGOptionContext = ^TGOptionContext; PPGOptionGroup = ^PGOptionGroup; PGOptionGroup = ^TGOptionGroup; PPGOptionEntry = ^PGOptionEntry; PGOptionEntry = ^TGOptionEntry; PPGTranslateFunc = ^PGTranslateFunc; PGTranslateFunc = ^TGTranslateFunc; TGTranslateFunc = function(str: Pgchar; data: gpointer): Pgchar; cdecl; TGOptionContext = object end; PPGOptionErrorFunc = ^PGOptionErrorFunc; PGOptionErrorFunc = ^TGOptionErrorFunc; TGOptionErrorFunc = procedure(context: PGOptionContext; group: PGOptionGroup; data: gpointer; error: PPGError); cdecl; PPGOptionParseFunc = ^PGOptionParseFunc; PGOptionParseFunc = ^TGOptionParseFunc; TGOptionParseFunc = function(context: PGOptionContext; group: PGOptionGroup; data: gpointer; error: PPGError): gboolean; cdecl; TGOptionGroup = object end; TGOptionEntry = record long_name: Pgchar; short_name: gchar; flags: gint; arg: TGOptionArg; arg_data: gpointer; description: Pgchar; arg_description: Pgchar; end; PPGOptionError = ^PGOptionError; PGOptionError = ^TGOptionError; PPGOptionFlags = ^PGOptionFlags; PGOptionFlags = ^TGOptionFlags; PPGPatternSpec = ^PGPatternSpec; PGPatternSpec = ^TGPatternSpec; TGPatternSpec = object end; TGPrintFunc = procedure(string_: Pgchar); cdecl; PPGPrivate = ^PGPrivate; PGPrivate = ^TGPrivate; TGPrivate = object p: gpointer; notify: TGDestroyNotify; future: array [0..1] of gpointer; end; PPGPtrArray = ^PGPtrArray; PGPtrArray = ^TGPtrArray; TGPtrArray = object pdata: Pgpointer; len: guint; end; PPGQueue = ^PGQueue; PGQueue = ^TGQueue; TGQueue = object head: PGList; tail: PGList; length: guint; end; PPGRWLock = ^PGRWLock; PGRWLock = ^TGRWLock; TGRWLock = object p: gpointer; i: array [0..1] of guint; end; PPGRand = ^PGRand; PGRand = ^TGRand; TGRand = object end; PPGRecMutex = ^PGRecMutex; PGRecMutex = ^TGRecMutex; TGRecMutex = object p: gpointer; i: array [0..1] of guint; end; PPGRegexError = ^PGRegexError; PGRegexError = ^TGRegexError; PPGScannerConfig = ^PGScannerConfig; PGScannerConfig = ^TGScannerConfig; TGScannerConfigBitfield0 = bitpacked record case_sensitive: guint1 { changed from guint to accomodate 1 bitsize requirement }; skip_comment_multi: guint1 { changed from guint to accomodate 1 bitsize requirement }; skip_comment_single: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_comment_multi: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier_1char: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier_NULL: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_symbols: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_binary: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_octal: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_float: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_hex: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_hex_dollar: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_string_sq: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_string_dq: guint1 { changed from guint to accomodate 1 bitsize requirement }; numbers_2_int: guint1 { changed from guint to accomodate 1 bitsize requirement }; int_2_float: guint1 { changed from guint to accomodate 1 bitsize requirement }; identifier_2_string: guint1 { changed from guint to accomodate 1 bitsize requirement }; char_2_token: guint1 { changed from guint to accomodate 1 bitsize requirement }; symbol_2_token: guint1 { changed from guint to accomodate 1 bitsize requirement }; scope_0_fallback: guint1 { changed from guint to accomodate 1 bitsize requirement }; store_int64: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGScannerConfig = record cset_skip_characters: Pgchar; cset_identifier_first: Pgchar; cset_identifier_nth: Pgchar; cpair_comment_single: Pgchar; Bitfield0 : TGScannerConfigBitfield0; { auto generated type } padding_dummy: guint; end; PPGTokenType = ^PGTokenType; PGTokenType = ^TGTokenType; TGTokenValue = record case longint of 0 : (v_symbol: gpointer); 1 : (v_identifier: Pgchar); 2 : (v_binary: gulong); 3 : (v_octal: gulong); 4 : (v_int: gulong); 5 : (v_int64: guint64); 6 : (v_float: gdouble); 7 : (v_hex: gulong); 8 : (v_string: Pgchar); 9 : (v_comment: Pgchar); 10 : (v_char: guint8); 11 : (v_error: guint); end; PPGScanner = ^PGScanner; PGScanner = ^TGScanner; TGScannerMsgFunc = procedure(scanner: PGScanner; message: Pgchar; error: gboolean); cdecl; PPGTokenValue = ^PGTokenValue; PGTokenValue = ^TGTokenValue; PPGScannerMsgFunc = ^PGScannerMsgFunc; PGScannerMsgFunc = ^TGScannerMsgFunc; TGScanner = object user_data: gpointer; max_parse_errors: guint; parse_errors: guint; input_name: Pgchar; qdata: PGData; config: PGScannerConfig; token: TGTokenType; value: TGTokenValue; line: guint; position: guint; next_token: TGTokenType; next_value: TGTokenValue; next_line: guint; next_position: guint; symbol_table: PGHashTable; input_fd: gint; text: Pgchar; text_end: Pgchar; buffer: Pgchar; scope_id: guint; msg_handler: TGScannerMsgFunc; end; PPGSequenceIter = ^PGSequenceIter; PGSequenceIter = ^TGSequenceIter; PPGSequence = ^PGSequence; PGSequence = ^TGSequence; TGSequenceIter = object end; PPGSequenceIterCompareFunc = ^PGSequenceIterCompareFunc; PGSequenceIterCompareFunc = ^TGSequenceIterCompareFunc; TGSequenceIterCompareFunc = function(a: PGSequenceIter; b: PGSequenceIter; data: gpointer): gint; cdecl; TGSequence = object end; PPGShellError = ^PGShellError; PGShellError = ^TGShellError; PPGSliceConfig = ^PGSliceConfig; PGSliceConfig = ^TGSliceConfig; TGSourceCallbackFuncs = record ref: procedure(cb_data: gpointer); cdecl; unref: procedure(cb_data: gpointer); cdecl; get: procedure(cb_data: gpointer; source: PGSource; func: PGSourceFunc; data: Pgpointer); cdecl; end; TGSourcePrivate = record end; TGSpawnChildSetupFunc = procedure(user_data: gpointer); cdecl; PPGSpawnError = ^PGSpawnError; PGSpawnError = ^TGSpawnError; PPGSpawnFlags = ^PGSpawnFlags; PGSpawnFlags = ^TGSpawnFlags; PPGStatBuf = ^PGStatBuf; PGStatBuf = ^TGStatBuf; TGStatBuf = record end; PPGStringChunk = ^PGStringChunk; PGStringChunk = ^TGStringChunk; TGStringChunk = object end; PPGTestCase = ^PGTestCase; PGTestCase = ^TGTestCase; TGTestCase = record end; PPGTestConfig = ^PGTestConfig; PGTestConfig = ^TGTestConfig; TGTestConfig = record test_initialized: gboolean; test_quick: gboolean; test_perf: gboolean; test_verbose: gboolean; test_quiet: gboolean; test_undefined: gboolean; end; TGTestDataFunc = procedure(user_data: Pgpointer); cdecl; TGTestFixtureFunc = procedure(fixture: gpointer; user_data: Pgpointer); cdecl; TGTestFunc = procedure; cdecl; PPGTestLogBuffer = ^PGTestLogBuffer; PGTestLogBuffer = ^TGTestLogBuffer; PPGTestLogMsg = ^PGTestLogMsg; PGTestLogMsg = ^TGTestLogMsg; TGTestLogBuffer = object data: PGString; msgs: PGSList; end; PPGTestLogType = ^PGTestLogType; PGTestLogType = ^TGTestLogType; TGTestLogMsg = object log_type: TGTestLogType; n_strings: guint; strings: PPgchar; n_nums: guint; nums: Pglong; end; TGTestLogFatalFunc = function(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; user_data: gpointer): gboolean; cdecl; PPGTestSuite = ^PGTestSuite; PGTestSuite = ^TGTestSuite; TGTestSuite = object end; PPGTestTrapFlags = ^PGTestTrapFlags; PGTestTrapFlags = ^TGTestTrapFlags; PPGThread = ^PGThread; PGThread = ^TGThread; TGThread = object end; PPGThreadError = ^PGThreadError; PGThreadError = ^TGThreadError; PPGThreadPool = ^PGThreadPool; PGThreadPool = ^TGThreadPool; TGThreadPool = object func: TGFunc; user_data: gpointer; exclusive: gboolean; end; PPGTimer = ^PGTimer; PGTimer = ^TGTimer; TGTimer = object end; PPGTrashStack = ^PGTrashStack; PGTrashStack = ^TGTrashStack; TGTrashStack = object next: PGTrashStack; end; TGTraverseFunc = function(key: gpointer; value: gpointer; data: gpointer): gboolean; cdecl; PPGTree = ^PGTree; PGTree = ^TGTree; PPGTraverseFunc = ^PGTraverseFunc; PGTraverseFunc = ^TGTraverseFunc; TGTree = object end; PPGUnicodeBreakType = ^PGUnicodeBreakType; PGUnicodeBreakType = ^TGUnicodeBreakType; PPGUnicodeScript = ^PGUnicodeScript; PGUnicodeScript = ^TGUnicodeScript; PPGUnicodeType = ^PGUnicodeType; PGUnicodeType = ^TGUnicodeType; TGUnixFDSourceFunc = function(fd: gint; condition: TGIOCondition; user_data: gpointer): gboolean; cdecl; PPGUserDirectory = ^PGUserDirectory; PGUserDirectory = ^TGUserDirectory; PPGVariant = ^PGVariant; PGVariant = ^TGVariant; PPGVariantType = ^PGVariantType; PGVariantType = ^TGVariantType; PPPgint16 = ^PPgint16; PPgint16 = ^Pgint16; Pgint16 = ^gint16; PPPguint16 = ^PPguint16; PPguint16 = ^Pguint16; Pguint16 = ^guint16; PPGVariantClass = ^PGVariantClass; PGVariantClass = ^TGVariantClass; PPGVariantIter = ^PGVariantIter; PGVariantIter = ^TGVariantIter; TGVariant = object end; TGVariantType = object end; TGVariantIter = object x: array [0..15] of gsize; end; PPGVariantBuilder = ^PGVariantBuilder; PGVariantBuilder = ^TGVariantBuilder; TGVariantBuilder = object x: array [0..15] of gsize; end; PPGVariantParseError = ^PGVariantParseError; PGVariantParseError = ^TGVariantParseError; TGVoidFunc = procedure; cdecl; function g_access(filename: Pgchar; mode: gint): gint; cdecl; external; function g_array_append_vals(array_: Pgpointer; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_free(array_: Pgpointer; free_segment: gboolean): Pgchar; cdecl; external; function g_array_get_element_size(array_: Pgpointer): guint; cdecl; external; function g_array_get_type: TGType; cdecl; external; function g_array_insert_vals(array_: Pgpointer; index_: guint; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_new(zero_terminated: gboolean; clear_: gboolean; element_size: guint): Pgpointer; cdecl; external; function g_array_prepend_vals(array_: Pgpointer; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_ref(array_: Pgpointer): Pgpointer; cdecl; external; function g_array_remove_index(array_: Pgpointer; index_: guint): Pgpointer; cdecl; external; function g_array_remove_index_fast(array_: Pgpointer; index_: guint): Pgpointer; cdecl; external; function g_array_remove_range(array_: Pgpointer; index_: guint; length: guint): Pgpointer; cdecl; external; function g_array_set_size(array_: Pgpointer; length: guint): Pgpointer; cdecl; external; function g_array_sized_new(zero_terminated: gboolean; clear_: gboolean; element_size: guint; reserved_size: guint): Pgpointer; cdecl; external; function g_ascii_digit_value(c: gchar): gint; cdecl; external; function g_ascii_dtostr(buffer: Pgchar; buf_len: gint; d: gdouble): Pgchar; cdecl; external; function g_ascii_formatd(buffer: Pgchar; buf_len: gint; format: Pgchar; d: gdouble): Pgchar; cdecl; external; function g_ascii_strcasecmp(s1: Pgchar; s2: Pgchar): gint; cdecl; external; function g_ascii_strdown(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_ascii_strncasecmp(s1: Pgchar; s2: Pgchar; n: gsize): gint; cdecl; external; function g_ascii_strtod(nptr: Pgchar; endptr: PPgchar): gdouble; cdecl; external; function g_ascii_strtoll(nptr: Pgchar; endptr: PPgchar; base: guint): gint64; cdecl; external; function g_ascii_strtoull(nptr: Pgchar; endptr: PPgchar; base: guint): guint64; cdecl; external; function g_ascii_strup(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_ascii_tolower(c: gchar): gchar; cdecl; external; function g_ascii_toupper(c: gchar): gchar; cdecl; external; function g_ascii_xdigit_value(c: gchar): gint; cdecl; external; function g_async_queue_length(queue: PGAsyncQueue): gint; cdecl; external; function g_async_queue_length_unlocked(queue: PGAsyncQueue): gint; cdecl; external; function g_async_queue_new: PGAsyncQueue; cdecl; external; function g_async_queue_new_full(item_free_func: TGDestroyNotify): PGAsyncQueue; cdecl; external; function g_async_queue_pop(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_pop_unlocked(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_ref(queue: PGAsyncQueue): PGAsyncQueue; cdecl; external; function g_async_queue_timeout_pop(queue: PGAsyncQueue; timeout: guint64): gpointer; cdecl; external; function g_async_queue_timeout_pop_unlocked(queue: PGAsyncQueue; timeout: guint64): gpointer; cdecl; external; function g_async_queue_try_pop(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_try_pop_unlocked(queue: PGAsyncQueue): gpointer; cdecl; external; function g_atomic_int_add(atomic: Pgint; val: gint): gint; cdecl; external; function g_atomic_int_and(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_int_compare_and_exchange(atomic: Pgint; oldval: gint; newval: gint): gboolean; cdecl; external; function g_atomic_int_dec_and_test(atomic: Pgint): gboolean; cdecl; external; function g_atomic_int_exchange_and_add(atomic: Pgint; val: gint): gint; cdecl; external; function g_atomic_int_get(atomic: Pgint): gint; cdecl; external; function g_atomic_int_or(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_int_xor(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_pointer_add(atomic: Pgpointer; val: gssize): gssize; cdecl; external; function g_atomic_pointer_and(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_atomic_pointer_compare_and_exchange(atomic: Pgpointer; oldval: gpointer; newval: gpointer): gboolean; cdecl; external; function g_atomic_pointer_get(atomic: Pgpointer): gpointer; cdecl; external; function g_atomic_pointer_or(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_atomic_pointer_xor(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_base64_decode(text: Pgchar; out_len: Pgsize): Pguint8; cdecl; external; function g_base64_decode_inplace(text: Pgchar; out_len: Pgsize): Pguint8; cdecl; external; function g_base64_decode_step(in_: Pgchar; len: gsize; out_: Pguint8; state: Pgint; save: Pguint): gsize; cdecl; external; function g_base64_encode(data: Pguint8; len: gsize): Pgchar; cdecl; external; function g_base64_encode_close(break_lines: gboolean; out_: Pgchar; state: Pgint; save: Pgint): gsize; cdecl; external; function g_base64_encode_step(in_: Pguint8; len: gsize; break_lines: gboolean; out_: Pgchar; state: Pgint; save: Pgint): gsize; cdecl; external; function g_basename(file_name: Pgchar): Pgchar; cdecl; external; function g_bit_nth_lsf(mask: gulong; nth_bit: gint): gint; cdecl; external; function g_bit_nth_msf(mask: gulong; nth_bit: gint): gint; cdecl; external; function g_bit_storage(number: gulong): guint; cdecl; external; function g_bit_trylock(address: Pgint; lock_bit: gint): gboolean; cdecl; external; function g_bookmark_file_error_quark: TGQuark; cdecl; external; function g_bookmark_file_get_added(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_get_app_info(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: PPgchar; count: Pguint; stamp: Pglong; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_applications(bookmark: PGBookmarkFile; uri: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_bookmark_file_get_description(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_groups(bookmark: PGBookmarkFile; uri: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_bookmark_file_get_icon(bookmark: PGBookmarkFile; uri: Pgchar; href: PPgchar; mime_type: PPgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_is_private(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_mime_type(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_modified(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_get_size(bookmark: PGBookmarkFile): gint; cdecl; external; function g_bookmark_file_get_title(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_uris(bookmark: PGBookmarkFile; length: Pgsize): PPgchar; cdecl; external; function g_bookmark_file_get_visited(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_has_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_has_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_has_item(bookmark: PGBookmarkFile; uri: Pgchar): gboolean; cdecl; external; function g_bookmark_file_load_from_data(bookmark: PGBookmarkFile; data: Pgchar; length: gsize; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_load_from_data_dirs(bookmark: PGBookmarkFile; file_: Pgchar; full_path: PPgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_load_from_file(bookmark: PGBookmarkFile; filename: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_move_item(bookmark: PGBookmarkFile; old_uri: Pgchar; new_uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_new: PGBookmarkFile; cdecl; external; function g_bookmark_file_remove_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_remove_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_remove_item(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_set_app_info(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: Pgchar; count: gint; stamp: glong; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_to_data(bookmark: PGBookmarkFile; length: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_to_file(bookmark: PGBookmarkFile; filename: Pgchar; error: PPGError): gboolean; cdecl; external; function g_build_filename(first_element: Pgchar; args: array of const): Pgchar; cdecl; external; function g_build_filenamev(args: PPgchar): Pgchar; cdecl; external; function g_build_path(separator: Pgchar; first_element: Pgchar; args: array of const): Pgchar; cdecl; external; function g_build_pathv(separator: Pgchar; args: PPgchar): Pgchar; cdecl; external; function g_byte_array_append(array_: Pguint8; data: Pguint8; len: guint): Pguint8; cdecl; external; function g_byte_array_free(array_: Pguint8; free_segment: gboolean): Pguint8; cdecl; external; function g_byte_array_free_to_bytes(array_: Pguint8): PGBytes; cdecl; external; function g_byte_array_get_type: TGType; cdecl; external; function g_byte_array_new: Pguint8; cdecl; external; function g_byte_array_new_take(data: Pguint8; len: gsize): Pguint8; cdecl; external; function g_byte_array_prepend(array_: Pguint8; data: Pguint8; len: guint): Pguint8; cdecl; external; function g_byte_array_ref(array_: Pguint8): Pguint8; cdecl; external; function g_byte_array_remove_index(array_: Pguint8; index_: guint): Pguint8; cdecl; external; function g_byte_array_remove_index_fast(array_: Pguint8; index_: guint): Pguint8; cdecl; external; function g_byte_array_remove_range(array_: Pguint8; index_: guint; length: guint): Pguint8; cdecl; external; function g_byte_array_set_size(array_: Pguint8; length: guint): Pguint8; cdecl; external; function g_byte_array_sized_new(reserved_size: guint): Pguint8; cdecl; external; function g_bytes_compare(bytes1: PGBytes; bytes2: PGBytes): gint; cdecl; external; function g_bytes_equal(bytes1: PGBytes; bytes2: PGBytes): gboolean; cdecl; external; function g_bytes_get_data(bytes: PGBytes; size: Pgsize): guint8; cdecl; external; function g_bytes_get_size(bytes: PGBytes): gsize; cdecl; external; function g_bytes_get_type: TGType; cdecl; external; function g_bytes_hash(bytes: PGBytes): guint; cdecl; external; function g_bytes_new(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_from_bytes(bytes: PGBytes; offset: gsize; length: gsize): PGBytes; cdecl; external; function g_bytes_new_static(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_take(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_with_free_func(data: gpointer; size: gsize; free_func: TGDestroyNotify; user_data: gpointer): PGBytes; cdecl; external; function g_bytes_ref(bytes: PGBytes): PGBytes; cdecl; external; function g_bytes_unref_to_array(bytes: PGBytes): Pguint8; cdecl; external; function g_bytes_unref_to_data(bytes: PGBytes; size: Pgsize): gpointer; cdecl; external; function g_chdir(path: Pgchar): gint; cdecl; external; function g_checksum_copy(checksum: PGChecksum): PGChecksum; cdecl; external; function g_checksum_get_string(checksum: PGChecksum): Pgchar; cdecl; external; function g_checksum_get_type: TGType; cdecl; external; function g_checksum_new(checksum_type: TGChecksumType): PGChecksum; cdecl; external; function g_checksum_type_get_length(checksum_type: TGChecksumType): gssize; cdecl; external; function g_child_watch_add(pid: TGPid; function_: TGChildWatchFunc; data: gpointer): guint; cdecl; external; function g_child_watch_add_full(priority: gint; pid: TGPid; function_: TGChildWatchFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_child_watch_source_new(pid: TGPid): PGSource; cdecl; external; function g_close(fd: gint; error: PPGError): gboolean; cdecl; external; function g_compute_checksum_for_bytes(checksum_type: TGChecksumType; data: PGBytes): Pgchar; cdecl; external; function g_compute_checksum_for_data(checksum_type: TGChecksumType; data: Pguint8; length: gsize): Pgchar; cdecl; external; function g_compute_checksum_for_string(checksum_type: TGChecksumType; str: Pgchar; length: gssize): Pgchar; cdecl; external; function g_compute_hmac_for_data(digest_type: TGChecksumType; key: Pguint8; key_len: gsize; data: Pguint8; length: gsize): Pgchar; cdecl; external; function g_compute_hmac_for_string(digest_type: TGChecksumType; key: Pguint8; key_len: gsize; str: Pgchar; length: gssize): Pgchar; cdecl; external; function g_cond_wait_until(cond: PGCond; mutex: PGMutex; end_time: gint64): gboolean; cdecl; external; function g_convert(str: Pgchar; len: gssize; to_codeset: Pgchar; from_codeset: Pgchar; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_convert_error_quark: TGQuark; cdecl; external; function g_convert_with_fallback(str: Pgchar; len: gssize; to_codeset: Pgchar; from_codeset: Pgchar; fallback: Pgchar; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_convert_with_iconv(str: Pgchar; len: gssize; converter: TGIConv; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_datalist_get_data(datalist: PPGData; key: Pgchar): gpointer; cdecl; external; function g_datalist_get_flags(datalist: PPGData): guint; cdecl; external; function g_datalist_id_dup_data(datalist: PPGData; key_id: TGQuark; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_datalist_id_get_data(datalist: PPGData; key_id: TGQuark): gpointer; cdecl; external; function g_datalist_id_remove_no_notify(datalist: PPGData; key_id: TGQuark): gpointer; cdecl; external; function g_datalist_id_replace_data(datalist: PPGData; key_id: TGQuark; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_dataset_id_get_data(dataset_location: Pgpointer; key_id: TGQuark): gpointer; cdecl; external; function g_dataset_id_remove_no_notify(dataset_location: Pgpointer; key_id: TGQuark): gpointer; cdecl; external; function g_date_compare(lhs: PGDate; rhs: PGDate): gint; cdecl; external; function g_date_days_between(date1: PGDate; date2: PGDate): gint; cdecl; external; function g_date_get_day(date: PGDate): TGDateDay; cdecl; external; function g_date_get_day_of_year(date: PGDate): guint; cdecl; external; function g_date_get_days_in_month(month: TGDateMonth; year: TGDateYear): guint8; cdecl; external; function g_date_get_iso8601_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_julian(date: PGDate): guint32; cdecl; external; function g_date_get_monday_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_monday_weeks_in_year(year: TGDateYear): guint8; cdecl; external; function g_date_get_month(date: PGDate): TGDateMonth; cdecl; external; function g_date_get_sunday_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_sunday_weeks_in_year(year: TGDateYear): guint8; cdecl; external; function g_date_get_type: TGType; cdecl; external; function g_date_get_weekday(date: PGDate): TGDateWeekday; cdecl; external; function g_date_get_year(date: PGDate): TGDateYear; cdecl; external; function g_date_is_first_of_month(date: PGDate): gboolean; cdecl; external; function g_date_is_last_of_month(date: PGDate): gboolean; cdecl; external; function g_date_is_leap_year(year: TGDateYear): gboolean; cdecl; external; function g_date_new: PGDate; cdecl; external; function g_date_new_dmy(day: TGDateDay; month: TGDateMonth; year: TGDateYear): PGDate; cdecl; external; function g_date_new_julian(julian_day: guint32): PGDate; cdecl; external; function g_date_strftime(s: Pgchar; slen: gsize; format: Pgchar; date: PGDate): gsize; cdecl; external; function g_date_time_add(datetime: PGDateTime; timespan: TGTimeSpan): PGDateTime; cdecl; external; function g_date_time_add_days(datetime: PGDateTime; days: gint): PGDateTime; cdecl; external; function g_date_time_add_full(datetime: PGDateTime; years: gint; months: gint; days: gint; hours: gint; minutes: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_add_hours(datetime: PGDateTime; hours: gint): PGDateTime; cdecl; external; function g_date_time_add_minutes(datetime: PGDateTime; minutes: gint): PGDateTime; cdecl; external; function g_date_time_add_months(datetime: PGDateTime; months: gint): PGDateTime; cdecl; external; function g_date_time_add_seconds(datetime: PGDateTime; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_add_weeks(datetime: PGDateTime; weeks: gint): PGDateTime; cdecl; external; function g_date_time_add_years(datetime: PGDateTime; years: gint): PGDateTime; cdecl; external; function g_date_time_compare(dt1: Pgpointer; dt2: Pgpointer): gint; cdecl; external; function g_date_time_difference(end_: PGDateTime; begin_: PGDateTime): TGTimeSpan; cdecl; external; function g_date_time_equal(dt1: Pgpointer; dt2: Pgpointer): gboolean; cdecl; external; function g_date_time_format(datetime: PGDateTime; format: Pgchar): Pgchar; cdecl; external; function g_date_time_get_day_of_month(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_day_of_week(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_day_of_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_hour(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_microsecond(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_minute(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_month(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_second(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_seconds(datetime: PGDateTime): gdouble; cdecl; external; function g_date_time_get_timezone_abbreviation(datetime: PGDateTime): Pgchar; cdecl; external; function g_date_time_get_type: TGType; cdecl; external; function g_date_time_get_utc_offset(datetime: PGDateTime): TGTimeSpan; cdecl; external; function g_date_time_get_week_numbering_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_week_of_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_hash(datetime: Pgpointer): guint; cdecl; external; function g_date_time_is_daylight_savings(datetime: PGDateTime): gboolean; cdecl; external; function g_date_time_new(tz: PGTimeZone; year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_new_from_timeval_local(tv: PGTimeVal): PGDateTime; cdecl; external; function g_date_time_new_from_timeval_utc(tv: PGTimeVal): PGDateTime; cdecl; external; function g_date_time_new_from_unix_local(t: gint64): PGDateTime; cdecl; external; function g_date_time_new_from_unix_utc(t: gint64): PGDateTime; cdecl; external; function g_date_time_new_local(year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_new_now(tz: PGTimeZone): PGDateTime; cdecl; external; function g_date_time_new_now_local: PGDateTime; cdecl; external; function g_date_time_new_now_utc: PGDateTime; cdecl; external; function g_date_time_new_utc(year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_ref(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_time_to_local(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_time_to_timeval(datetime: PGDateTime; tv: PGTimeVal): gboolean; cdecl; external; function g_date_time_to_timezone(datetime: PGDateTime; tz: PGTimeZone): PGDateTime; cdecl; external; function g_date_time_to_unix(datetime: PGDateTime): gint64; cdecl; external; function g_date_time_to_utc(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_valid(date: PGDate): gboolean; cdecl; external; function g_date_valid_day(day: TGDateDay): gboolean; cdecl; external; function g_date_valid_dmy(day: TGDateDay; month: TGDateMonth; year: TGDateYear): gboolean; cdecl; external; function g_date_valid_julian(julian_date: guint32): gboolean; cdecl; external; function g_date_valid_month(month: TGDateMonth): gboolean; cdecl; external; function g_date_valid_weekday(weekday: TGDateWeekday): gboolean; cdecl; external; function g_date_valid_year(year: TGDateYear): gboolean; cdecl; external; function g_dcgettext(domain: Pgchar; msgid: Pgchar; category: gint): Pgchar; cdecl; external; function g_dgettext(domain: Pgchar; msgid: Pgchar): Pgchar; cdecl; external; function g_dir_make_tmp(tmpl: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_dir_open(path: Pgchar; flags: guint; error: PPGError): PGDir; cdecl; external; function g_dir_read_name(dir: PGDir): Pgchar; cdecl; external; function g_direct_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_direct_hash(v: Pgpointer): guint; cdecl; external; function g_dngettext(domain: Pgchar; msgid: Pgchar; msgid_plural: Pgchar; n: gulong): Pgchar; cdecl; external; function g_double_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_double_hash(v: Pgpointer): guint; cdecl; external; function g_dpgettext(domain: Pgchar; msgctxtid: Pgchar; msgidoffset: gsize): Pgchar; cdecl; external; function g_dpgettext2(domain: Pgchar; context: Pgchar; msgid: Pgchar): Pgchar; cdecl; external; function g_environ_getenv(envp: PPgchar; variable: Pgchar): Pgchar; cdecl; external; function g_environ_setenv(envp: PPgchar; variable: Pgchar; value: Pgchar; overwrite: gboolean): PPgchar; cdecl; external; function g_environ_unsetenv(envp: PPgchar; variable: Pgchar): PPgchar; cdecl; external; function g_error_copy(error: PGError): PGError; cdecl; external; function g_error_get_type: TGType; cdecl; external; function g_error_matches(error: PGError; domain: TGQuark; code: gint): gboolean; cdecl; external; function g_error_new(domain: TGQuark; code: gint; format: Pgchar; args: array of const): PGError; cdecl; external; function g_error_new_literal(domain: TGQuark; code: gint; message: Pgchar): PGError; cdecl; external; function g_error_new_valist(domain: TGQuark; code: gint; format: Pgchar; args: Tva_list): PGError; cdecl; external; function g_file_error_from_errno(err_no: gint): TGFileError; cdecl; external; function g_file_error_quark: TGQuark; cdecl; external; function g_file_get_contents(filename: Pgchar; contents: PPgchar; length: Pgsize; error: PPGError): gboolean; cdecl; external; function g_file_open_tmp(tmpl: Pgchar; name_used: PPgchar; error: PPGError): gint; cdecl; external; function g_file_read_link(filename: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_file_set_contents(filename: Pgchar; contents: Pgchar; length: gssize; error: PPGError): gboolean; cdecl; external; function g_file_test(filename: Pgchar; test: TGFileTest): gboolean; cdecl; external; function g_filename_display_basename(filename: Pgchar): Pgchar; cdecl; external; function g_filename_display_name(filename: Pgchar): Pgchar; cdecl; external; function g_filename_from_uri(uri: Pgchar; hostname: PPgchar; error: PPGError): Pgchar; cdecl; external; function g_filename_from_utf8(utf8string: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_filename_to_uri(filename: Pgchar; hostname: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_filename_to_utf8(opsysstring: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_find_program_in_path(program_: Pgchar): Pgchar; cdecl; external; function g_format_size(size: guint64): Pgchar; cdecl; external; function g_format_size_for_display(size: gint64): Pgchar; cdecl; external; function g_format_size_full(size: guint64; flags: TGFormatSizeFlags): Pgchar; cdecl; external; function g_fprintf(file_: Pgpointer; format: Pgchar; args: array of const): gint; cdecl; external; function g_get_application_name: Pgchar; cdecl; external; function g_get_charset(charset: PPgchar): gboolean; cdecl; external; function g_get_codeset: Pgchar; cdecl; external; function g_get_current_dir: Pgchar; cdecl; external; function g_get_environ: PPgchar; cdecl; external; function g_get_filename_charsets(charsets: PPPgchar): gboolean; cdecl; external; function g_get_home_dir: Pgchar; cdecl; external; function g_get_host_name: Pgchar; cdecl; external; function g_get_language_names: PPgchar; cdecl; external; function g_get_locale_variants(locale: Pgchar): PPgchar; cdecl; external; function g_get_monotonic_time: gint64; cdecl; external; function g_get_num_processors: guint; cdecl; external; function g_get_prgname: Pgchar; cdecl; external; function g_get_real_name: Pgchar; cdecl; external; function g_get_real_time: gint64; cdecl; external; function g_get_system_config_dirs: PPgchar; cdecl; external; function g_get_system_data_dirs: PPgchar; cdecl; external; function g_get_tmp_dir: Pgchar; cdecl; external; function g_get_user_cache_dir: Pgchar; cdecl; external; function g_get_user_config_dir: Pgchar; cdecl; external; function g_get_user_data_dir: Pgchar; cdecl; external; function g_get_user_name: Pgchar; cdecl; external; function g_get_user_runtime_dir: Pgchar; cdecl; external; function g_get_user_special_dir(directory: TGUserDirectory): Pgchar; cdecl; external; function g_getenv(variable: Pgchar): Pgchar; cdecl; external; function g_gstring_get_type: TGType; cdecl; external; function g_hash_table_contains(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hash_table_find(hash_table: PGHashTable; predicate: TGHRFunc; user_data: gpointer): gpointer; cdecl; external; function g_hash_table_foreach_remove(hash_table: PGHashTable; func: TGHRFunc; user_data: gpointer): guint; cdecl; external; function g_hash_table_foreach_steal(hash_table: PGHashTable; func: TGHRFunc; user_data: gpointer): guint; cdecl; external; function g_hash_table_get_keys(hash_table: PGHashTable): PGList; cdecl; external; function g_hash_table_get_type: TGType; cdecl; external; function g_hash_table_get_values(hash_table: PGHashTable): PGList; cdecl; external; function g_hash_table_iter_get_hash_table(iter: PGHashTableIter): PGHashTable; cdecl; external; function g_hash_table_iter_next(iter: PGHashTableIter; key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_hash_table_lookup(hash_table: PGHashTable; key: Pgpointer): gpointer; cdecl; external; function g_hash_table_lookup_extended(hash_table: PGHashTable; lookup_key: Pgpointer; orig_key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_hash_table_new(hash_func: TGHashFunc; key_equal_func: TGEqualFunc): PGHashTable; cdecl; external; function g_hash_table_new_full(hash_func: TGHashFunc; key_equal_func: TGEqualFunc; key_destroy_func: TGDestroyNotify; value_destroy_func: TGDestroyNotify): PGHashTable; cdecl; external; function g_hash_table_ref(hash_table: PGHashTable): PGHashTable; cdecl; external; function g_hash_table_remove(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hash_table_size(hash_table: PGHashTable): guint; cdecl; external; function g_hash_table_steal(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hmac_copy(hmac: PGHmac): PGHmac; cdecl; external; function g_hmac_get_string(hmac: PGHmac): Pgchar; cdecl; external; function g_hmac_new(digest_type: TGChecksumType; key: Pguint8; key_len: gsize): PGHmac; cdecl; external; function g_hmac_ref(hmac: PGHmac): PGHmac; cdecl; external; function g_hook_alloc(hook_list: PGHookList): PGHook; cdecl; external; function g_hook_compare_ids(new_hook: PGHook; sibling: PGHook): gint; cdecl; external; function g_hook_destroy(hook_list: PGHookList; hook_id: gulong): gboolean; cdecl; external; function g_hook_find(hook_list: PGHookList; need_valids: gboolean; func: TGHookFindFunc; data: gpointer): PGHook; cdecl; external; function g_hook_find_data(hook_list: PGHookList; need_valids: gboolean; data: gpointer): PGHook; cdecl; external; function g_hook_find_func(hook_list: PGHookList; need_valids: gboolean; func: gpointer): PGHook; cdecl; external; function g_hook_find_func_data(hook_list: PGHookList; need_valids: gboolean; func: gpointer; data: gpointer): PGHook; cdecl; external; function g_hook_first_valid(hook_list: PGHookList; may_be_in_call: gboolean): PGHook; cdecl; external; function g_hook_get(hook_list: PGHookList; hook_id: gulong): PGHook; cdecl; external; function g_hook_next_valid(hook_list: PGHookList; hook: PGHook; may_be_in_call: gboolean): PGHook; cdecl; external; function g_hook_ref(hook_list: PGHookList; hook: PGHook): PGHook; cdecl; external; function g_hostname_is_ascii_encoded(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_is_ip_address(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_is_non_ascii(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_to_ascii(hostname: Pgchar): Pgchar; cdecl; external; function g_hostname_to_unicode(hostname: Pgchar): Pgchar; cdecl; external; function g_iconv(converter: TGIConv; inbuf: PPgchar; inbytes_left: Pgsize; outbuf: PPgchar; outbytes_left: Pgsize): gsize; cdecl; external; function g_iconv_close(converter: TGIConv): gint; cdecl; external; function g_iconv_open(to_codeset: Pgchar; from_codeset: Pgchar): TGIConv; cdecl; external; function g_idle_add(function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_idle_add_full(priority: gint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_idle_remove_by_data(data: gpointer): gboolean; cdecl; external; function g_idle_source_new: PGSource; cdecl; external; function g_int64_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_int64_hash(v: Pgpointer): guint; cdecl; external; function g_int_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_int_hash(v: Pgpointer): guint; cdecl; external; function g_intern_static_string(string_: Pgchar): Pgchar; cdecl; external; function g_intern_string(string_: Pgchar): Pgchar; cdecl; external; function g_io_add_watch(channel: PGIOChannel; condition: TGIOCondition; func: TGIOFunc; user_data: gpointer): guint; cdecl; external; function g_io_add_watch_full(channel: PGIOChannel; priority: gint; condition: TGIOCondition; func: TGIOFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_io_channel_error_from_errno(en: gint): TGIOChannelError; cdecl; external; function g_io_channel_error_quark: TGQuark; cdecl; external; function g_io_channel_flush(channel: PGIOChannel; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_get_buffer_condition(channel: PGIOChannel): TGIOCondition; cdecl; external; function g_io_channel_get_buffer_size(channel: PGIOChannel): gsize; cdecl; external; function g_io_channel_get_buffered(channel: PGIOChannel): gboolean; cdecl; external; function g_io_channel_get_close_on_unref(channel: PGIOChannel): gboolean; cdecl; external; function g_io_channel_get_encoding(channel: PGIOChannel): Pgchar; cdecl; external; function g_io_channel_get_flags(channel: PGIOChannel): TGIOFlags; cdecl; external; function g_io_channel_get_line_term(channel: PGIOChannel; length: Pgint): Pgchar; cdecl; external; function g_io_channel_get_type: TGType; cdecl; external; function g_io_channel_new_file(filename: Pgchar; mode: Pgchar; error: PPGError): PGIOChannel; cdecl; external; function g_io_channel_read_chars(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_read: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_line(channel: PGIOChannel; str_return: PPgchar; length: Pgsize; terminator_pos: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_line_string(channel: PGIOChannel; buffer: PGString; terminator_pos: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_to_end(channel: PGIOChannel; str_return: PPgchar; length: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_unichar(channel: PGIOChannel; thechar: Pgunichar; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_ref(channel: PGIOChannel): PGIOChannel; cdecl; external; function g_io_channel_seek_position(channel: PGIOChannel; offset: gint64; type_: TGSeekType; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_set_encoding(channel: PGIOChannel; encoding: Pgchar; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_set_flags(channel: PGIOChannel; flags: TGIOFlags; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_shutdown(channel: PGIOChannel; flush: gboolean; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_unix_get_fd(channel: PGIOChannel): gint; cdecl; external; function g_io_channel_unix_new(fd: gint): PGIOChannel; cdecl; external; function g_io_channel_write_chars(channel: PGIOChannel; buf: Pgchar; count: gssize; bytes_written: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_write_unichar(channel: PGIOChannel; thechar: gunichar; error: PPGError): TGIOStatus; cdecl; external; function g_io_create_watch(channel: PGIOChannel; condition: TGIOCondition): PGSource; cdecl; external; function g_key_file_error_quark: TGQuark; cdecl; external; function g_key_file_get_boolean(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_get_boolean_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgboolean; cdecl; external; function g_key_file_get_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_double(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gdouble; cdecl; external; function g_key_file_get_double_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgdouble; cdecl; external; function g_key_file_get_groups(key_file: PGKeyFile; length: Pgsize): PPgchar; cdecl; external; function g_key_file_get_int64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gint64; cdecl; external; function g_key_file_get_integer(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gint; cdecl; external; function g_key_file_get_integer_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgint; cdecl; external; function g_key_file_get_keys(key_file: PGKeyFile; group_name: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_locale_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_locale_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_start_group(key_file: PGKeyFile): Pgchar; cdecl; external; function g_key_file_get_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_type: TGType; cdecl; external; function g_key_file_get_uint64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): guint64; cdecl; external; function g_key_file_get_value(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_has_group(key_file: PGKeyFile; group_name: Pgchar): gboolean; cdecl; external; function g_key_file_has_key(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_data(key_file: PGKeyFile; data: Pgchar; length: gsize; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_data_dirs(key_file: PGKeyFile; file_: Pgchar; full_path: PPgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_dirs(key_file: PGKeyFile; file_: Pgchar; search_dirs: PPgchar; full_path: PPgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_file(key_file: PGKeyFile; file_: Pgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_new: PGKeyFile; cdecl; external; function g_key_file_ref(key_file: PGKeyFile): PGKeyFile; cdecl; external; function g_key_file_remove_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_remove_group(key_file: PGKeyFile; group_name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_remove_key(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_set_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; comment: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_to_data(key_file: PGKeyFile; length: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_list_alloc: PGList; cdecl; external; function g_list_append(list: PGList; data: gpointer): PGList; cdecl; external; function g_list_concat(list1: PGList; list2: PGList): PGList; cdecl; external; function g_list_copy(list: PGList): PGList; cdecl; external; function g_list_copy_deep(list: PGList; func: TGCopyFunc; user_data: gpointer): PGList; cdecl; external; function g_list_delete_link(list: PGList; link_: PGList): PGList; cdecl; external; function g_list_find(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_find_custom(list: PGList; data: Pgpointer; func: TGCompareFunc): PGList; cdecl; external; function g_list_first(list: PGList): PGList; cdecl; external; function g_list_index(list: PGList; data: Pgpointer): gint; cdecl; external; function g_list_insert(list: PGList; data: gpointer; position: gint): PGList; cdecl; external; function g_list_insert_before(list: PGList; sibling: PGList; data: gpointer): PGList; cdecl; external; function g_list_insert_sorted(list: PGList; data: gpointer; func: TGCompareFunc): PGList; cdecl; external; function g_list_insert_sorted_with_data(list: PGList; data: gpointer; func: TGCompareDataFunc; user_data: gpointer): PGList; cdecl; external; function g_list_last(list: PGList): PGList; cdecl; external; function g_list_length(list: PGList): guint; cdecl; external; function g_list_nth(list: PGList; n: guint): PGList; cdecl; external; function g_list_nth_data(list: PGList; n: guint): gpointer; cdecl; external; function g_list_nth_prev(list: PGList; n: guint): PGList; cdecl; external; function g_list_position(list: PGList; llink: PGList): gint; cdecl; external; function g_list_prepend(list: PGList; data: gpointer): PGList; cdecl; external; function g_list_remove(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_remove_all(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_remove_link(list: PGList; llink: PGList): PGList; cdecl; external; function g_list_reverse(list: PGList): PGList; cdecl; external; function g_list_sort(list: PGList; compare_func: TGCompareFunc): PGList; cdecl; external; function g_list_sort_with_data(list: PGList; compare_func: TGCompareDataFunc; user_data: gpointer): PGList; cdecl; external; function g_listenv: PPgchar; cdecl; external; function g_locale_from_utf8(utf8string: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_locale_to_utf8(opsysstring: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_log_set_always_fatal(fatal_mask: TGLogLevelFlags): TGLogLevelFlags; cdecl; external; function g_log_set_default_handler(log_func: TGLogFunc; user_data: gpointer): TGLogFunc; cdecl; external; function g_log_set_fatal_mask(log_domain: Pgchar; fatal_mask: TGLogLevelFlags): TGLogLevelFlags; cdecl; external; function g_log_set_handler(log_domain: Pgchar; log_levels: TGLogLevelFlags; log_func: TGLogFunc; user_data: gpointer): guint; cdecl; external; function g_main_context_acquire(context: PGMainContext): gboolean; cdecl; external; function g_main_context_check(context: PGMainContext; max_priority: gint; fds: PGPollFD; n_fds: gint): gint; cdecl; external; function g_main_context_default: PGMainContext; cdecl; external; function g_main_context_find_source_by_funcs_user_data(context: PGMainContext; funcs: PGSourceFuncs; user_data: gpointer): PGSource; cdecl; external; function g_main_context_find_source_by_id(context: PGMainContext; source_id: guint): PGSource; cdecl; external; function g_main_context_find_source_by_user_data(context: PGMainContext; user_data: gpointer): PGSource; cdecl; external; function g_main_context_get_poll_func(context: PGMainContext): TGPollFunc; cdecl; external; function g_main_context_get_thread_default: PGMainContext; cdecl; external; function g_main_context_get_type: TGType; cdecl; external; function g_main_context_is_owner(context: PGMainContext): gboolean; cdecl; external; function g_main_context_iteration(context: PGMainContext; may_block: gboolean): gboolean; cdecl; external; function g_main_context_new: PGMainContext; cdecl; external; function g_main_context_pending(context: PGMainContext): gboolean; cdecl; external; function g_main_context_prepare(context: PGMainContext; priority: Pgint): gboolean; cdecl; external; function g_main_context_query(context: PGMainContext; max_priority: gint; timeout_: Pgint; fds: PGPollFD; n_fds: gint): gint; cdecl; external; function g_main_context_ref(context: PGMainContext): PGMainContext; cdecl; external; function g_main_context_ref_thread_default: PGMainContext; cdecl; external; function g_main_context_wait(context: PGMainContext; cond: PGCond; mutex: PGMutex): gboolean; cdecl; external; function g_main_current_source: PGSource; cdecl; external; function g_main_depth: gint; cdecl; external; function g_main_loop_get_context(loop: PGMainLoop): PGMainContext; cdecl; external; function g_main_loop_get_type: TGType; cdecl; external; function g_main_loop_is_running(loop: PGMainLoop): gboolean; cdecl; external; function g_main_loop_new(context: PGMainContext; is_running: gboolean): PGMainLoop; cdecl; external; function g_main_loop_ref(loop: PGMainLoop): PGMainLoop; cdecl; external; function g_malloc(n_bytes: gsize): gpointer; cdecl; external; function g_malloc0(n_bytes: gsize): gpointer; cdecl; external; function g_malloc0_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_malloc_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_mapped_file_get_bytes(file_: PGMappedFile): PGBytes; cdecl; external; function g_mapped_file_get_contents(file_: PGMappedFile): Pgchar; cdecl; external; function g_mapped_file_get_length(file_: PGMappedFile): gsize; cdecl; external; function g_mapped_file_new(filename: Pgchar; writable: gboolean; error: PPGError): PGMappedFile; cdecl; external; function g_mapped_file_new_from_fd(fd: gint; writable: gboolean; error: PPGError): PGMappedFile; cdecl; external; function g_mapped_file_ref(file_: PGMappedFile): PGMappedFile; cdecl; external; function g_markup_collect_attributes(element_name: Pgchar; attribute_names: PPgchar; attribute_values: PPgchar; error: PPGError; first_type: TGMarkupCollectType; first_attr: Pgchar; args: array of const): gboolean; cdecl; external; function g_markup_error_quark: TGQuark; cdecl; external; function g_markup_escape_text(text: Pgchar; length: gssize): Pgchar; cdecl; external; function g_markup_parse_context_end_parse(context: PGMarkupParseContext; error: PPGError): gboolean; cdecl; external; function g_markup_parse_context_get_element(context: PGMarkupParseContext): Pgchar; cdecl; external; function g_markup_parse_context_get_element_stack(context: PGMarkupParseContext): PGSList; cdecl; external; function g_markup_parse_context_get_type: TGType; cdecl; external; function g_markup_parse_context_get_user_data(context: PGMarkupParseContext): gpointer; cdecl; external; function g_markup_parse_context_new(parser: PGMarkupParser; flags: TGMarkupParseFlags; user_data: gpointer; user_data_dnotify: TGDestroyNotify): PGMarkupParseContext; cdecl; external; function g_markup_parse_context_parse(context: PGMarkupParseContext; text: Pgchar; text_len: gssize; error: PPGError): gboolean; cdecl; external; function g_markup_parse_context_pop(context: PGMarkupParseContext): gpointer; cdecl; external; function g_markup_parse_context_ref(context: PGMarkupParseContext): PGMarkupParseContext; cdecl; external; function g_markup_printf_escaped(format: Pgchar; args: array of const): Pgchar; cdecl; external; function g_markup_vprintf_escaped(format: Pgchar; args: Tva_list): Pgchar; cdecl; external; function g_match_info_expand_references(match_info: PGMatchInfo; string_to_expand: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_match_info_fetch(match_info: PGMatchInfo; match_num: gint): Pgchar; cdecl; external; function g_match_info_fetch_all(match_info: PGMatchInfo): PPgchar; cdecl; external; function g_match_info_fetch_named(match_info: PGMatchInfo; name: Pgchar): Pgchar; cdecl; external; function g_match_info_fetch_named_pos(match_info: PGMatchInfo; name: Pgchar; start_pos: Pgint; end_pos: Pgint): gboolean; cdecl; external; function g_match_info_fetch_pos(match_info: PGMatchInfo; match_num: gint; start_pos: Pgint; end_pos: Pgint): gboolean; cdecl; external; function g_match_info_get_match_count(match_info: PGMatchInfo): gint; cdecl; external; function g_match_info_get_regex(match_info: PGMatchInfo): PGRegex; cdecl; external; function g_match_info_get_string(match_info: PGMatchInfo): Pgchar; cdecl; external; function g_match_info_get_type: TGType; cdecl; external; function g_match_info_is_partial_match(match_info: PGMatchInfo): gboolean; cdecl; external; function g_match_info_matches(match_info: PGMatchInfo): gboolean; cdecl; external; function g_match_info_next(match_info: PGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_match_info_ref(match_info: PGMatchInfo): PGMatchInfo; cdecl; external; function g_mem_is_system_malloc: gboolean; cdecl; external; function g_memdup(mem: Pgpointer; byte_size: guint): gpointer; cdecl; external; function g_mkdir_with_parents(pathname: Pgchar; mode: gint): gint; cdecl; external; function g_mkdtemp(tmpl: Pgchar): Pgchar; cdecl; external; function g_mkdtemp_full(tmpl: Pgchar; mode: gint): Pgchar; cdecl; external; function g_mkstemp(tmpl: Pgchar): gint; cdecl; external; function g_mkstemp_full(tmpl: Pgchar; flags: gint; mode: gint): gint; cdecl; external; function g_mutex_trylock(mutex: PGMutex): gboolean; cdecl; external; function g_node_child_index(node: PGNode; data: gpointer): gint; cdecl; external; function g_node_child_position(node: PGNode; child: PGNode): gint; cdecl; external; function g_node_copy(node: PGNode): PGNode; cdecl; external; function g_node_copy_deep(node: PGNode; copy_func: TGCopyFunc; data: gpointer): PGNode; cdecl; external; function g_node_depth(node: PGNode): guint; cdecl; external; function g_node_find(root: PGNode; order: TGTraverseType; flags: TGTraverseFlags; data: gpointer): PGNode; cdecl; external; function g_node_find_child(node: PGNode; flags: TGTraverseFlags; data: gpointer): PGNode; cdecl; external; function g_node_first_sibling(node: PGNode): PGNode; cdecl; external; function g_node_get_root(node: PGNode): PGNode; cdecl; external; function g_node_insert(parent: PGNode; position: gint; node: PGNode): PGNode; cdecl; external; function g_node_insert_after(parent: PGNode; sibling: PGNode; node: PGNode): PGNode; cdecl; external; function g_node_insert_before(parent: PGNode; sibling: PGNode; node: PGNode): PGNode; cdecl; external; function g_node_is_ancestor(node: PGNode; descendant: PGNode): gboolean; cdecl; external; function g_node_last_child(node: PGNode): PGNode; cdecl; external; function g_node_last_sibling(node: PGNode): PGNode; cdecl; external; function g_node_max_height(root: PGNode): guint; cdecl; external; function g_node_n_children(node: PGNode): guint; cdecl; external; function g_node_n_nodes(root: PGNode; flags: TGTraverseFlags): guint; cdecl; external; function g_node_new(data: gpointer): PGNode; cdecl; external; function g_node_nth_child(node: PGNode; n: guint): PGNode; cdecl; external; function g_node_prepend(parent: PGNode; node: PGNode): PGNode; cdecl; external; function g_once_impl(once: PGOnce; func: TGThreadFunc; arg: gpointer): gpointer; cdecl; external; function g_once_init_enter(location: Pgpointer): gboolean; cdecl; external; function g_option_context_get_description(context: PGOptionContext): Pgchar; cdecl; external; function g_option_context_get_help(context: PGOptionContext; main_help: gboolean; group: PGOptionGroup): Pgchar; cdecl; external; function g_option_context_get_help_enabled(context: PGOptionContext): gboolean; cdecl; external; function g_option_context_get_ignore_unknown_options(context: PGOptionContext): gboolean; cdecl; external; function g_option_context_get_main_group(context: PGOptionContext): PGOptionGroup; cdecl; external; function g_option_context_get_summary(context: PGOptionContext): Pgchar; cdecl; external; function g_option_context_new(parameter_string: Pgchar): PGOptionContext; cdecl; external; function g_option_context_parse(context: PGOptionContext; argc: Pgint; argv: PPPgchar; error: PPGError): gboolean; cdecl; external; function g_option_error_quark: TGQuark; cdecl; external; function g_option_group_new(name: Pgchar; description: Pgchar; help_description: Pgchar; user_data: gpointer; destroy_: TGDestroyNotify): PGOptionGroup; cdecl; external; function g_parse_debug_string(string_: Pgchar; keys: PGDebugKey; nkeys: guint): guint; cdecl; external; function g_path_get_basename(file_name: Pgchar): Pgchar; cdecl; external; function g_path_get_dirname(file_name: Pgchar): Pgchar; cdecl; external; function g_path_is_absolute(file_name: Pgchar): gboolean; cdecl; external; function g_path_skip_root(file_name: Pgchar): Pgchar; cdecl; external; function g_pattern_match(pspec: PGPatternSpec; string_length: guint; string_: Pgchar; string_reversed: Pgchar): gboolean; cdecl; external; function g_pattern_match_simple(pattern: Pgchar; string_: Pgchar): gboolean; cdecl; external; function g_pattern_match_string(pspec: PGPatternSpec; string_: Pgchar): gboolean; cdecl; external; function g_pattern_spec_equal(pspec1: PGPatternSpec; pspec2: PGPatternSpec): gboolean; cdecl; external; function g_pattern_spec_new(pattern: Pgchar): PGPatternSpec; cdecl; external; function g_pointer_bit_trylock(address: Pgpointer; lock_bit: gint): gboolean; cdecl; external; function g_poll(fds: PGPollFD; nfds: guint; timeout: gint): gint; cdecl; external; function g_pollfd_get_type: TGType; cdecl; external; function g_printf(format: Pgchar; args: array of const): gint; cdecl; external; function g_printf_string_upper_bound(format: Pgchar; args: Tva_list): gsize; cdecl; external; function g_private_get(key: PGPrivate): gpointer; cdecl; external; function g_ptr_array_free(array_: Pgpointer; free_seg: gboolean): Pgpointer; cdecl; external; function g_ptr_array_get_type: TGType; cdecl; external; function g_ptr_array_new: Pgpointer; cdecl; external; function g_ptr_array_new_full(reserved_size: guint; element_free_func: TGDestroyNotify): Pgpointer; cdecl; external; function g_ptr_array_new_with_free_func(element_free_func: TGDestroyNotify): Pgpointer; cdecl; external; function g_ptr_array_ref(array_: Pgpointer): Pgpointer; cdecl; external; function g_ptr_array_remove(array_: Pgpointer; data: gpointer): gboolean; cdecl; external; function g_ptr_array_remove_fast(array_: Pgpointer; data: gpointer): gboolean; cdecl; external; function g_ptr_array_remove_index(array_: Pgpointer; index_: guint): gpointer; cdecl; external; function g_ptr_array_remove_index_fast(array_: Pgpointer; index_: guint): gpointer; cdecl; external; function g_ptr_array_sized_new(reserved_size: guint): Pgpointer; cdecl; external; function g_quark_from_static_string(string_: Pgchar): TGQuark; cdecl; external; function g_quark_from_string(string_: Pgchar): TGQuark; cdecl; external; function g_quark_to_string(quark: TGQuark): Pgchar; cdecl; external; function g_quark_try_string(string_: Pgchar): TGQuark; cdecl; external; function g_queue_copy(queue: PGQueue): PGQueue; cdecl; external; function g_queue_find(queue: PGQueue; data: Pgpointer): PGList; cdecl; external; function g_queue_find_custom(queue: PGQueue; data: Pgpointer; func: TGCompareFunc): PGList; cdecl; external; function g_queue_get_length(queue: PGQueue): guint; cdecl; external; function g_queue_index(queue: PGQueue; data: Pgpointer): gint; cdecl; external; function g_queue_is_empty(queue: PGQueue): gboolean; cdecl; external; function g_queue_link_index(queue: PGQueue; link_: PGList): gint; cdecl; external; function g_queue_new: PGQueue; cdecl; external; function g_queue_peek_head(queue: PGQueue): gpointer; cdecl; external; function g_queue_peek_head_link(queue: PGQueue): PGList; cdecl; external; function g_queue_peek_nth(queue: PGQueue; n: guint): gpointer; cdecl; external; function g_queue_peek_nth_link(queue: PGQueue; n: guint): PGList; cdecl; external; function g_queue_peek_tail(queue: PGQueue): gpointer; cdecl; external; function g_queue_peek_tail_link(queue: PGQueue): PGList; cdecl; external; function g_queue_pop_head(queue: PGQueue): gpointer; cdecl; external; function g_queue_pop_head_link(queue: PGQueue): PGList; cdecl; external; function g_queue_pop_nth(queue: PGQueue; n: guint): gpointer; cdecl; external; function g_queue_pop_nth_link(queue: PGQueue; n: guint): PGList; cdecl; external; function g_queue_pop_tail(queue: PGQueue): gpointer; cdecl; external; function g_queue_pop_tail_link(queue: PGQueue): PGList; cdecl; external; function g_queue_remove(queue: PGQueue; data: Pgpointer): gboolean; cdecl; external; function g_queue_remove_all(queue: PGQueue; data: Pgpointer): guint; cdecl; external; function g_rand_copy(rand_: PGRand): PGRand; cdecl; external; function g_rand_double(rand_: PGRand): gdouble; cdecl; external; function g_rand_double_range(rand_: PGRand; begin_: gdouble; end_: gdouble): gdouble; cdecl; external; function g_rand_int(rand_: PGRand): guint32; cdecl; external; function g_rand_int_range(rand_: PGRand; begin_: gint32; end_: gint32): gint32; cdecl; external; function g_rand_new: PGRand; cdecl; external; function g_rand_new_with_seed(seed: guint32): PGRand; cdecl; external; function g_rand_new_with_seed_array(seed: Pguint32; seed_length: guint): PGRand; cdecl; external; function g_random_double: gdouble; cdecl; external; function g_random_double_range(begin_: gdouble; end_: gdouble): gdouble; cdecl; external; function g_random_int: guint32; cdecl; external; function g_random_int_range(begin_: gint32; end_: gint32): gint32; cdecl; external; function g_realloc(mem: gpointer; n_bytes: gsize): gpointer; cdecl; external; function g_realloc_n(mem: gpointer; n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_rec_mutex_trylock(rec_mutex: PGRecMutex): gboolean; cdecl; external; function g_regex_check_replacement(replacement: Pgchar; has_references: Pgboolean; error: PPGError): gboolean; cdecl; external; function g_regex_error_quark: TGQuark; cdecl; external; function g_regex_escape_nul(string_: Pgchar; length: gint): Pgchar; cdecl; external; function g_regex_escape_string(string_: Pgchar; length: gint): Pgchar; cdecl; external; function g_regex_get_capture_count(regex: PGRegex): gint; cdecl; external; function g_regex_get_compile_flags(regex: PGRegex): TGRegexCompileFlags; cdecl; external; function g_regex_get_has_cr_or_lf(regex: PGRegex): gboolean; cdecl; external; function g_regex_get_match_flags(regex: PGRegex): TGRegexMatchFlags; cdecl; external; function g_regex_get_max_backref(regex: PGRegex): gint; cdecl; external; function g_regex_get_pattern(regex: PGRegex): Pgchar; cdecl; external; function g_regex_get_string_number(regex: PGRegex; name: Pgchar): gint; cdecl; external; function g_regex_get_type: TGType; cdecl; external; function g_regex_match(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo): gboolean; cdecl; external; function g_regex_match_all(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo): gboolean; cdecl; external; function g_regex_match_all_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_regex_match_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_regex_match_simple(pattern: Pgchar; string_: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags): gboolean; cdecl; external; function g_regex_new(pattern: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags; error: PPGError): PGRegex; cdecl; external; function g_regex_ref(regex: PGRegex): PGRegex; cdecl; external; function g_regex_replace(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; replacement: Pgchar; match_options: TGRegexMatchFlags; error: PPGError): Pgchar; cdecl; external; function g_regex_replace_eval(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; eval: TGRegexEvalCallback; user_data: gpointer; error: PPGError): Pgchar; cdecl; external; function g_regex_replace_literal(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; replacement: Pgchar; match_options: TGRegexMatchFlags; error: PPGError): Pgchar; cdecl; external; function g_regex_split(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags): PPgchar; cdecl; external; function g_regex_split_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; max_tokens: gint; error: PPGError): PPgchar; cdecl; external; function g_regex_split_simple(pattern: Pgchar; string_: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags): PPgchar; cdecl; external; function g_rmdir(filename: Pgchar): gint; cdecl; external; function g_rw_lock_reader_trylock(rw_lock: PGRWLock): gboolean; cdecl; external; function g_rw_lock_writer_trylock(rw_lock: PGRWLock): gboolean; cdecl; external; function g_scanner_cur_line(scanner: PGScanner): guint; cdecl; external; function g_scanner_cur_position(scanner: PGScanner): guint; cdecl; external; function g_scanner_cur_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_cur_value(scanner: PGScanner): TGTokenValue; cdecl; external; function g_scanner_eof(scanner: PGScanner): gboolean; cdecl; external; function g_scanner_get_next_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_lookup_symbol(scanner: PGScanner; symbol: Pgchar): gpointer; cdecl; external; function g_scanner_new(config_templ: PGScannerConfig): PGScanner; cdecl; external; function g_scanner_peek_next_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_scope_lookup_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar): gpointer; cdecl; external; function g_scanner_set_scope(scanner: PGScanner; scope_id: guint): guint; cdecl; external; function g_sequence_append(seq: PGSequence; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_get(iter: PGSequenceIter): gpointer; cdecl; external; function g_sequence_get_begin_iter(seq: PGSequence): PGSequenceIter; cdecl; external; function g_sequence_get_end_iter(seq: PGSequence): PGSequenceIter; cdecl; external; function g_sequence_get_iter_at_pos(seq: PGSequence; pos: gint): PGSequenceIter; cdecl; external; function g_sequence_get_length(seq: PGSequence): gint; cdecl; external; function g_sequence_insert_before(iter: PGSequenceIter; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_insert_sorted(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_insert_sorted_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_iter_compare(a: PGSequenceIter; b: PGSequenceIter): gint; cdecl; external; function g_sequence_iter_get_position(iter: PGSequenceIter): gint; cdecl; external; function g_sequence_iter_get_sequence(iter: PGSequenceIter): PGSequence; cdecl; external; function g_sequence_iter_is_begin(iter: PGSequenceIter): gboolean; cdecl; external; function g_sequence_iter_is_end(iter: PGSequenceIter): gboolean; cdecl; external; function g_sequence_iter_move(iter: PGSequenceIter; delta: gint): PGSequenceIter; cdecl; external; function g_sequence_iter_next(iter: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_iter_prev(iter: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_lookup(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_lookup_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_new(data_destroy: TGDestroyNotify): PGSequence; cdecl; external; function g_sequence_prepend(seq: PGSequence; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_range_get_midpoint(begin_: PGSequenceIter; end_: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_search(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_search_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_set_print_handler(func: TGPrintFunc): TGPrintFunc; cdecl; external; function g_set_printerr_handler(func: TGPrintFunc): TGPrintFunc; cdecl; external; function g_setenv(variable: Pgchar; value: Pgchar; overwrite: gboolean): gboolean; cdecl; external; function g_shell_error_quark: TGQuark; cdecl; external; function g_shell_parse_argv(command_line: Pgchar; argcp: Pgint; argvp: PPPgchar; error: PPGError): gboolean; cdecl; external; function g_shell_quote(unquoted_string: Pgchar): Pgchar; cdecl; external; function g_shell_unquote(quoted_string: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_slice_alloc(block_size: gsize): gpointer; cdecl; external; function g_slice_alloc0(block_size: gsize): gpointer; cdecl; external; function g_slice_copy(block_size: gsize; mem_block: Pgpointer): gpointer; cdecl; external; function g_slice_get_config(ckey: TGSliceConfig): gint64; cdecl; external; function g_slice_get_config_state(ckey: TGSliceConfig; address: gint64; n_values: Pguint): Pgint64; cdecl; external; function g_slist_alloc: PGSList; cdecl; external; function g_slist_append(list: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_concat(list1: PGSList; list2: PGSList): PGSList; cdecl; external; function g_slist_copy(list: PGSList): PGSList; cdecl; external; function g_slist_copy_deep(list: PGSList; func: TGCopyFunc; user_data: gpointer): PGSList; cdecl; external; function g_slist_delete_link(list: PGSList; link_: PGSList): PGSList; cdecl; external; function g_slist_find(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_find_custom(list: PGSList; data: Pgpointer; func: TGCompareFunc): PGSList; cdecl; external; function g_slist_index(list: PGSList; data: Pgpointer): gint; cdecl; external; function g_slist_insert(list: PGSList; data: gpointer; position: gint): PGSList; cdecl; external; function g_slist_insert_before(slist: PGSList; sibling: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_insert_sorted(list: PGSList; data: gpointer; func: TGCompareFunc): PGSList; cdecl; external; function g_slist_insert_sorted_with_data(list: PGSList; data: gpointer; func: TGCompareDataFunc; user_data: gpointer): PGSList; cdecl; external; function g_slist_last(list: PGSList): PGSList; cdecl; external; function g_slist_length(list: PGSList): guint; cdecl; external; function g_slist_nth(list: PGSList; n: guint): PGSList; cdecl; external; function g_slist_nth_data(list: PGSList; n: guint): gpointer; cdecl; external; function g_slist_position(list: PGSList; llink: PGSList): gint; cdecl; external; function g_slist_prepend(list: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_remove(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_remove_all(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_remove_link(list: PGSList; link_: PGSList): PGSList; cdecl; external; function g_slist_reverse(list: PGSList): PGSList; cdecl; external; function g_slist_sort(list: PGSList; compare_func: TGCompareFunc): PGSList; cdecl; external; function g_slist_sort_with_data(list: PGSList; compare_func: TGCompareDataFunc; user_data: gpointer): PGSList; cdecl; external; function g_snprintf(string_: Pgchar; n: gulong; format: Pgchar; args: array of const): gint; cdecl; external; function g_source_add_unix_fd(source: PGSource; fd: gint; events: TGIOCondition): gpointer; cdecl; external; function g_source_attach(source: PGSource; context: PGMainContext): guint; cdecl; external; function g_source_get_can_recurse(source: PGSource): gboolean; cdecl; external; function g_source_get_context(source: PGSource): PGMainContext; cdecl; external; function g_source_get_id(source: PGSource): guint; cdecl; external; function g_source_get_name(source: PGSource): Pgchar; cdecl; external; function g_source_get_priority(source: PGSource): gint; cdecl; external; function g_source_get_ready_time(source: PGSource): gint64; cdecl; external; function g_source_get_time(source: PGSource): gint64; cdecl; external; function g_source_get_type: TGType; cdecl; external; function g_source_is_destroyed(source: PGSource): gboolean; cdecl; external; function g_source_new(source_funcs: PGSourceFuncs; struct_size: guint): PGSource; cdecl; external; function g_source_query_unix_fd(source: PGSource; tag: gpointer): TGIOCondition; cdecl; external; function g_source_ref(source: PGSource): PGSource; cdecl; external; function g_source_remove(tag: guint): gboolean; cdecl; external; function g_source_remove_by_funcs_user_data(funcs: PGSourceFuncs; user_data: gpointer): gboolean; cdecl; external; function g_source_remove_by_user_data(user_data: gpointer): gboolean; cdecl; external; function g_spaced_primes_closest(num: guint): guint; cdecl; external; function g_spawn_async(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; child_pid: PGPid; error: PPGError): gboolean; cdecl; external; function g_spawn_async_with_pipes(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; child_pid: PGPid; standard_input: Pgint; standard_output: Pgint; standard_error: Pgint; error: PPGError): gboolean; cdecl; external; function g_spawn_check_exit_status(exit_status: gint; error: PPGError): gboolean; cdecl; external; function g_spawn_command_line_async(command_line: Pgchar; error: PPGError): gboolean; cdecl; external; function g_spawn_command_line_sync(command_line: Pgchar; standard_output: PPgchar; standard_error: PPgchar; exit_status: Pgint; error: PPGError): gboolean; cdecl; external; function g_spawn_error_quark: TGQuark; cdecl; external; function g_spawn_exit_error_quark: TGQuark; cdecl; external; function g_spawn_sync(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; standard_output: PPgchar; standard_error: PPgchar; exit_status: Pgint; error: PPGError): gboolean; cdecl; external; function g_sprintf(string_: Pgchar; format: Pgchar; args: array of const): gint; cdecl; external; function g_stpcpy(dest: Pgchar; src: Pgchar): Pgchar; cdecl; external; function g_str_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_str_has_prefix(str: Pgchar; prefix: Pgchar): gboolean; cdecl; external; function g_str_has_suffix(str: Pgchar; suffix: Pgchar): gboolean; cdecl; external; function g_str_hash(v: Pgpointer): guint; cdecl; external; function g_strcanon(string_: Pgchar; valid_chars: Pgchar; substitutor: gchar): Pgchar; cdecl; external; function g_strcasecmp(s1: Pgchar; s2: Pgchar): gint; cdecl; external; function g_strchomp(string_: Pgchar): Pgchar; cdecl; external; function g_strchug(string_: Pgchar): Pgchar; cdecl; external; function g_strcmp0(str1: Pgchar; str2: Pgchar): gint; cdecl; external; function g_strcompress(source: Pgchar): Pgchar; cdecl; external; function g_strconcat(string1: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strdelimit(string_: Pgchar; delimiters: Pgchar; new_delimiter: gchar): Pgchar; cdecl; external; function g_strdown(string_: Pgchar): Pgchar; cdecl; external; function g_strdup(str: Pgchar): Pgchar; cdecl; external; function g_strdup_printf(format: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strdup_vprintf(format: Pgchar; args: Tva_list): Pgchar; cdecl; external; function g_strdupv(str_array: PPgchar): PPgchar; cdecl; external; function g_strerror(errnum: gint): Pgchar; cdecl; external; function g_strescape(source: Pgchar; exceptions: Pgchar): Pgchar; cdecl; external; function g_string_append(string_: PGString; val: Pgchar): PGString; cdecl; external; function g_string_append_c(string_: PGString; c: gchar): PGString; cdecl; external; function g_string_append_len(string_: PGString; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_append_unichar(string_: PGString; wc: gunichar): PGString; cdecl; external; function g_string_append_uri_escaped(string_: PGString; unescaped: Pgchar; reserved_chars_allowed: Pgchar; allow_utf8: gboolean): PGString; cdecl; external; function g_string_ascii_down(string_: PGString): PGString; cdecl; external; function g_string_ascii_up(string_: PGString): PGString; cdecl; external; function g_string_assign(string_: PGString; rval: Pgchar): PGString; cdecl; external; function g_string_chunk_insert(chunk: PGStringChunk; string_: Pgchar): Pgchar; cdecl; external; function g_string_chunk_insert_const(chunk: PGStringChunk; string_: Pgchar): Pgchar; cdecl; external; function g_string_chunk_insert_len(chunk: PGStringChunk; string_: Pgchar; len: gssize): Pgchar; cdecl; external; function g_string_chunk_new(size: gsize): PGStringChunk; cdecl; external; function g_string_equal(v: PGString; v2: PGString): gboolean; cdecl; external; function g_string_erase(string_: PGString; pos: gssize; len: gssize): PGString; cdecl; external; function g_string_free(string_: PGString; free_segment: gboolean): Pgchar; cdecl; external; function g_string_free_to_bytes(string_: PGString): PGBytes; cdecl; external; function g_string_hash(str: PGString): guint; cdecl; external; function g_string_insert(string_: PGString; pos: gssize; val: Pgchar): PGString; cdecl; external; function g_string_insert_c(string_: PGString; pos: gssize; c: gchar): PGString; cdecl; external; function g_string_insert_len(string_: PGString; pos: gssize; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_insert_unichar(string_: PGString; pos: gssize; wc: gunichar): PGString; cdecl; external; function g_string_new(init: Pgchar): PGString; cdecl; external; function g_string_new_len(init: Pgchar; len: gssize): PGString; cdecl; external; function g_string_overwrite(string_: PGString; pos: gsize; val: Pgchar): PGString; cdecl; external; function g_string_overwrite_len(string_: PGString; pos: gsize; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_prepend(string_: PGString; val: Pgchar): PGString; cdecl; external; function g_string_prepend_c(string_: PGString; c: gchar): PGString; cdecl; external; function g_string_prepend_len(string_: PGString; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_prepend_unichar(string_: PGString; wc: gunichar): PGString; cdecl; external; function g_string_set_size(string_: PGString; len: gsize): PGString; cdecl; external; function g_string_sized_new(dfl_size: gsize): PGString; cdecl; external; function g_string_truncate(string_: PGString; len: gsize): PGString; cdecl; external; function g_strip_context(msgid: Pgchar; msgval: Pgchar): Pgchar; cdecl; external; function g_strjoin(separator: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strjoinv(separator: Pgchar; str_array: PPgchar): Pgchar; cdecl; external; function g_strlcat(dest: Pgchar; src: Pgchar; dest_size: gsize): gsize; cdecl; external; function g_strlcpy(dest: Pgchar; src: Pgchar; dest_size: gsize): gsize; cdecl; external; function g_strncasecmp(s1: Pgchar; s2: Pgchar; n: guint): gint; cdecl; external; function g_strndup(str: Pgchar; n: gsize): Pgchar; cdecl; external; function g_strnfill(length: gsize; fill_char: gchar): Pgchar; cdecl; external; function g_strreverse(string_: Pgchar): Pgchar; cdecl; external; function g_strrstr(haystack: Pgchar; needle: Pgchar): Pgchar; cdecl; external; function g_strrstr_len(haystack: Pgchar; haystack_len: gssize; needle: Pgchar): Pgchar; cdecl; external; function g_strsignal(signum: gint): Pgchar; cdecl; external; function g_strsplit(string_: Pgchar; delimiter: Pgchar; max_tokens: gint): PPgchar; cdecl; external; function g_strsplit_set(string_: Pgchar; delimiters: Pgchar; max_tokens: gint): PPgchar; cdecl; external; function g_strstr_len(haystack: Pgchar; haystack_len: gssize; needle: Pgchar): Pgchar; cdecl; external; function g_strtod(nptr: Pgchar; endptr: PPgchar): gdouble; cdecl; external; function g_strup(string_: Pgchar): Pgchar; cdecl; external; function g_strv_get_type: TGType; cdecl; external; function g_strv_length(str_array: PPgchar): guint; cdecl; external; function g_test_create_case(test_name: Pgchar; data_size: gsize; test_data: Pgpointer; data_setup: TGTestFixtureFunc; data_test: TGTestFixtureFunc; data_teardown: TGTestFixtureFunc): PGTestCase; cdecl; external; function g_test_create_suite(suite_name: Pgchar): PGTestSuite; cdecl; external; function g_test_get_root: PGTestSuite; cdecl; external; function g_test_log_buffer_new: PGTestLogBuffer; cdecl; external; function g_test_log_buffer_pop(tbuffer: PGTestLogBuffer): PGTestLogMsg; cdecl; external; function g_test_log_type_name(log_type: TGTestLogType): Pgchar; cdecl; external; function g_test_rand_double: gdouble; cdecl; external; function g_test_rand_double_range(range_start: gdouble; range_end: gdouble): gdouble; cdecl; external; function g_test_rand_int: gint32; cdecl; external; function g_test_rand_int_range(begin_: gint32; end_: gint32): gint32; cdecl; external; function g_test_run: gint; cdecl; external; function g_test_run_suite(suite: PGTestSuite): gint; cdecl; external; function g_test_timer_elapsed: gdouble; cdecl; external; function g_test_timer_last: gdouble; cdecl; external; function g_test_trap_fork(usec_timeout: guint64; test_trap_flags: TGTestTrapFlags): gboolean; cdecl; external; function g_test_trap_has_passed: gboolean; cdecl; external; function g_test_trap_reached_timeout: gboolean; cdecl; external; function g_thread_error_quark: TGQuark; cdecl; external; function g_thread_get_type: TGType; cdecl; external; function g_thread_join(thread: PGThread): gpointer; cdecl; external; function g_thread_new(name: Pgchar; func: TGThreadFunc; data: gpointer): PGThread; cdecl; external; function g_thread_pool_get_max_idle_time: guint; cdecl; external; function g_thread_pool_get_max_threads(pool: PGThreadPool): gint; cdecl; external; function g_thread_pool_get_max_unused_threads: gint; cdecl; external; function g_thread_pool_get_num_threads(pool: PGThreadPool): guint; cdecl; external; function g_thread_pool_get_num_unused_threads: guint; cdecl; external; function g_thread_pool_new(func: TGFunc; user_data: gpointer; max_threads: gint; exclusive: gboolean; error: PPGError): PGThreadPool; cdecl; external; function g_thread_pool_push(pool: PGThreadPool; data: gpointer; error: PPGError): gboolean; cdecl; external; function g_thread_pool_set_max_threads(pool: PGThreadPool; max_threads: gint; error: PPGError): gboolean; cdecl; external; function g_thread_pool_unprocessed(pool: PGThreadPool): guint; cdecl; external; function g_thread_ref(thread: PGThread): PGThread; cdecl; external; function g_thread_self: PGThread; cdecl; external; function g_thread_try_new(name: Pgchar; func: TGThreadFunc; data: gpointer; error: PPGError): PGThread; cdecl; external; function g_time_val_from_iso8601(iso_date: Pgchar; time_: PGTimeVal): gboolean; cdecl; external; function g_time_val_to_iso8601(time_: PGTimeVal): Pgchar; cdecl; external; function g_time_zone_adjust_time(tz: PGTimeZone; type_: TGTimeType; time_: Pgint64): gint; cdecl; external; function g_time_zone_find_interval(tz: PGTimeZone; type_: TGTimeType; time_: gint64): gint; cdecl; external; function g_time_zone_get_abbreviation(tz: PGTimeZone; interval: gint): Pgchar; cdecl; external; function g_time_zone_get_offset(tz: PGTimeZone; interval: gint): gint32; cdecl; external; function g_time_zone_get_type: TGType; cdecl; external; function g_time_zone_is_dst(tz: PGTimeZone; interval: gint): gboolean; cdecl; external; function g_time_zone_new(identifier: Pgchar): PGTimeZone; cdecl; external; function g_time_zone_new_local: PGTimeZone; cdecl; external; function g_time_zone_new_utc: PGTimeZone; cdecl; external; function g_time_zone_ref(tz: PGTimeZone): PGTimeZone; cdecl; external; function g_timeout_add(interval: guint; function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_timeout_add_full(priority: gint; interval: guint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_timeout_add_seconds(interval: guint; function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_timeout_add_seconds_full(priority: gint; interval: guint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_timeout_source_new(interval: guint): PGSource; cdecl; external; function g_timeout_source_new_seconds(interval: guint): PGSource; cdecl; external; function g_timer_elapsed(timer: PGTimer; microseconds: Pgulong): gdouble; cdecl; external; function g_timer_new: PGTimer; cdecl; external; function g_trash_stack_height(stack_p: PPGTrashStack): guint; cdecl; external; function g_trash_stack_peek(stack_p: PPGTrashStack): gpointer; cdecl; external; function g_trash_stack_pop(stack_p: PPGTrashStack): gpointer; cdecl; external; function g_tree_height(tree: PGTree): gint; cdecl; external; function g_tree_lookup(tree: PGTree; key: Pgpointer): gpointer; cdecl; external; function g_tree_lookup_extended(tree: PGTree; lookup_key: Pgpointer; orig_key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_tree_new(key_compare_func: TGCompareFunc): PGTree; cdecl; external; function g_tree_new_full(key_compare_func: TGCompareDataFunc; key_compare_data: gpointer; key_destroy_func: TGDestroyNotify; value_destroy_func: TGDestroyNotify): PGTree; cdecl; external; function g_tree_new_with_data(key_compare_func: TGCompareDataFunc; key_compare_data: gpointer): PGTree; cdecl; external; function g_tree_nnodes(tree: PGTree): gint; cdecl; external; function g_tree_ref(tree: PGTree): PGTree; cdecl; external; function g_tree_remove(tree: PGTree; key: Pgpointer): gboolean; cdecl; external; function g_tree_search(tree: PGTree; search_func: TGCompareFunc; user_data: Pgpointer): gpointer; cdecl; external; function g_tree_steal(tree: PGTree; key: Pgpointer): gboolean; cdecl; external; function g_try_malloc(n_bytes: gsize): gpointer; cdecl; external; function g_try_malloc0(n_bytes: gsize): gpointer; cdecl; external; function g_try_malloc0_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_try_malloc_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_try_realloc(mem: gpointer; n_bytes: gsize): gpointer; cdecl; external; function g_try_realloc_n(mem: gpointer; n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_ucs4_to_utf16(str: Pgunichar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pguint16; cdecl; external; function g_ucs4_to_utf8(str: Pgunichar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgchar; cdecl; external; function g_unichar_break_type(c: gunichar): TGUnicodeBreakType; cdecl; external; function g_unichar_combining_class(uc: gunichar): gint; cdecl; external; function g_unichar_compose(a: gunichar; b: gunichar; ch: Pgunichar): gboolean; cdecl; external; function g_unichar_decompose(ch: gunichar; a: Pgunichar; b: Pgunichar): gboolean; cdecl; external; function g_unichar_digit_value(c: gunichar): gint; cdecl; external; function g_unichar_fully_decompose(ch: gunichar; compat: gboolean; result_: Pgunichar; result_len: gsize): gsize; cdecl; external; function g_unichar_get_mirror_char(ch: gunichar; mirrored_ch: Pgunichar): gboolean; cdecl; external; function g_unichar_get_script(ch: gunichar): TGUnicodeScript; cdecl; external; function g_unichar_isalnum(c: gunichar): gboolean; cdecl; external; function g_unichar_isalpha(c: gunichar): gboolean; cdecl; external; function g_unichar_iscntrl(c: gunichar): gboolean; cdecl; external; function g_unichar_isdefined(c: gunichar): gboolean; cdecl; external; function g_unichar_isdigit(c: gunichar): gboolean; cdecl; external; function g_unichar_isgraph(c: gunichar): gboolean; cdecl; external; function g_unichar_islower(c: gunichar): gboolean; cdecl; external; function g_unichar_ismark(c: gunichar): gboolean; cdecl; external; function g_unichar_isprint(c: gunichar): gboolean; cdecl; external; function g_unichar_ispunct(c: gunichar): gboolean; cdecl; external; function g_unichar_isspace(c: gunichar): gboolean; cdecl; external; function g_unichar_istitle(c: gunichar): gboolean; cdecl; external; function g_unichar_isupper(c: gunichar): gboolean; cdecl; external; function g_unichar_iswide(c: gunichar): gboolean; cdecl; external; function g_unichar_iswide_cjk(c: gunichar): gboolean; cdecl; external; function g_unichar_isxdigit(c: gunichar): gboolean; cdecl; external; function g_unichar_iszerowidth(c: gunichar): gboolean; cdecl; external; function g_unichar_to_utf8(c: gunichar; outbuf: Pgchar): gint; cdecl; external; function g_unichar_tolower(c: gunichar): gunichar; cdecl; external; function g_unichar_totitle(c: gunichar): gunichar; cdecl; external; function g_unichar_toupper(c: gunichar): gunichar; cdecl; external; function g_unichar_type(c: gunichar): TGUnicodeType; cdecl; external; function g_unichar_validate(ch: gunichar): gboolean; cdecl; external; function g_unichar_xdigit_value(c: gunichar): gint; cdecl; external; function g_unicode_canonical_decomposition(ch: gunichar; result_len: Pgsize): Pgunichar; cdecl; external; function g_unicode_script_from_iso15924(iso15924: guint32): TGUnicodeScript; cdecl; external; function g_unicode_script_to_iso15924(script: TGUnicodeScript): guint32; cdecl; external; function g_unix_error_quark: TGQuark; cdecl; external; function g_unix_fd_add(fd: gint; condition: TGIOCondition; function_: TGUnixFDSourceFunc; user_data: gpointer): guint; cdecl; external; function g_unix_fd_add_full(priority: gint; fd: gint; condition: TGIOCondition; function_: TGUnixFDSourceFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_unix_fd_source_new(fd: gint; condition: TGIOCondition): PGSource; cdecl; external; function g_unix_open_pipe(fds: Pgint; flags: gint; error: PPGError): gboolean; cdecl; external; function g_unix_set_fd_nonblocking(fd: gint; nonblock: gboolean; error: PPGError): gboolean; cdecl; external; function g_unix_signal_add(signum: gint; handler: TGSourceFunc; user_data: gpointer): guint; cdecl; external; function g_unix_signal_add_full(priority: gint; signum: gint; handler: TGSourceFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_unix_signal_source_new(signum: gint): PGSource; cdecl; external; function g_unlink(filename: Pgchar): gint; cdecl; external; function g_uri_escape_string(unescaped: Pgchar; reserved_chars_allowed: Pgchar; allow_utf8: gboolean): Pgchar; cdecl; external; function g_uri_list_extract_uris(uri_list: Pgchar): PPgchar; cdecl; external; function g_uri_parse_scheme(uri: Pgchar): Pgchar; cdecl; external; function g_uri_unescape_segment(escaped_string: Pgchar; escaped_string_end: Pgchar; illegal_characters: Pgchar): Pgchar; cdecl; external; function g_uri_unescape_string(escaped_string: Pgchar; illegal_characters: Pgchar): Pgchar; cdecl; external; function g_utf16_to_ucs4(str: Pguint16; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgunichar; cdecl; external; function g_utf16_to_utf8(str: Pguint16; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgchar; cdecl; external; function g_utf8_casefold(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_collate(str1: Pgchar; str2: Pgchar): gint; cdecl; external; function g_utf8_collate_key(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_collate_key_for_filename(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_find_next_char(p: Pgchar; end_: Pgchar): Pgchar; cdecl; external; function g_utf8_find_prev_char(str: Pgchar; p: Pgchar): Pgchar; cdecl; external; function g_utf8_get_char(p: Pgchar): gunichar; cdecl; external; function g_utf8_get_char_validated(p: Pgchar; max_len: gssize): gunichar; cdecl; external; function g_utf8_normalize(str: Pgchar; len: gssize; mode: TGNormalizeMode): Pgchar; cdecl; external; function g_utf8_offset_to_pointer(str: Pgchar; offset: glong): Pgchar; cdecl; external; function g_utf8_pointer_to_offset(str: Pgchar; pos: Pgchar): glong; cdecl; external; function g_utf8_prev_char(p: Pgchar): Pgchar; cdecl; external; function g_utf8_strchr(p: Pgchar; len: gssize; c: gunichar): Pgchar; cdecl; external; function g_utf8_strdown(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_strlen(p: Pgchar; max: gssize): glong; cdecl; external; function g_utf8_strncpy(dest: Pgchar; src: Pgchar; n: gsize): Pgchar; cdecl; external; function g_utf8_strrchr(p: Pgchar; len: gssize; c: gunichar): Pgchar; cdecl; external; function g_utf8_strreverse(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_strup(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_substring(str: Pgchar; start_pos: glong; end_pos: glong): Pgchar; cdecl; external; function g_utf8_to_ucs4(str: Pgchar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgunichar; cdecl; external; function g_utf8_to_ucs4_fast(str: Pgchar; len: glong; items_written: Pglong): Pgunichar; cdecl; external; function g_utf8_to_utf16(str: Pgchar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pguint16; cdecl; external; function g_utf8_validate(str: Pgchar; max_len: gssize; end_: PPgchar): gboolean; cdecl; external; function g_variant_builder_end(builder: PGVariantBuilder): PGVariant; cdecl; external; function g_variant_builder_get_type: TGType; cdecl; external; function g_variant_builder_new(type_: PGVariantType): PGVariantBuilder; cdecl; external; function g_variant_builder_ref(builder: PGVariantBuilder): PGVariantBuilder; cdecl; external; function g_variant_byteswap(value: PGVariant): PGVariant; cdecl; external; function g_variant_check_format_string(value: PGVariant; format_string: Pgchar; copy_only: gboolean): gboolean; cdecl; external; function g_variant_classify(value: PGVariant): TGVariantClass; cdecl; external; function g_variant_compare(one: PGVariant; two: PGVariant): gint; cdecl; external; function g_variant_dup_bytestring(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_dup_bytestring_array(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_dup_objv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_dup_string(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_dup_strv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_equal(one: PGVariant; two: PGVariant): gboolean; cdecl; external; function g_variant_get_boolean(value: PGVariant): gboolean; cdecl; external; function g_variant_get_byte(value: PGVariant): guint8; cdecl; external; function g_variant_get_bytestring(value: PGVariant): Pgchar; cdecl; external; function g_variant_get_bytestring_array(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_child_value(value: PGVariant; index_: gsize): PGVariant; cdecl; external; function g_variant_get_data(value: PGVariant): Pgpointer; cdecl; external; function g_variant_get_data_as_bytes(value: PGVariant): PGBytes; cdecl; external; function g_variant_get_double(value: PGVariant): gdouble; cdecl; external; function g_variant_get_fixed_array(value: PGVariant; n_elements: Pgsize; element_size: gsize): gpointer; cdecl; external; function g_variant_get_gtype: TGType; cdecl; external; function g_variant_get_handle(value: PGVariant): gint32; cdecl; external; function g_variant_get_int16(value: PGVariant): gint16; cdecl; external; function g_variant_get_int32(value: PGVariant): gint32; cdecl; external; function g_variant_get_int64(value: PGVariant): gint64; cdecl; external; function g_variant_get_maybe(value: PGVariant): PGVariant; cdecl; external; function g_variant_get_normal_form(value: PGVariant): PGVariant; cdecl; external; function g_variant_get_objv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_size(value: PGVariant): gsize; cdecl; external; function g_variant_get_string(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_get_strv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_type(value: PGVariant): PGVariantType; cdecl; external; function g_variant_get_type_string(value: PGVariant): Pgchar; cdecl; external; function g_variant_get_uint16(value: PGVariant): guint16; cdecl; external; function g_variant_get_uint32(value: PGVariant): guint32; cdecl; external; function g_variant_get_uint64(value: PGVariant): guint64; cdecl; external; function g_variant_get_variant(value: PGVariant): PGVariant; cdecl; external; function g_variant_hash(value: PGVariant): guint; cdecl; external; function g_variant_is_container(value: PGVariant): gboolean; cdecl; external; function g_variant_is_floating(value: PGVariant): gboolean; cdecl; external; function g_variant_is_normal_form(value: PGVariant): gboolean; cdecl; external; function g_variant_is_object_path(string_: Pgchar): gboolean; cdecl; external; function g_variant_is_of_type(value: PGVariant; type_: PGVariantType): gboolean; cdecl; external; function g_variant_is_signature(string_: Pgchar): gboolean; cdecl; external; function g_variant_iter_copy(iter: PGVariantIter): PGVariantIter; cdecl; external; function g_variant_iter_init(iter: PGVariantIter; value: PGVariant): gsize; cdecl; external; function g_variant_iter_loop(iter: PGVariantIter; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_iter_n_children(iter: PGVariantIter): gsize; cdecl; external; function g_variant_iter_new(value: PGVariant): PGVariantIter; cdecl; external; function g_variant_iter_next(iter: PGVariantIter; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_iter_next_value(iter: PGVariantIter): PGVariant; cdecl; external; function g_variant_lookup(dictionary: PGVariant; key: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_lookup_value(dictionary: PGVariant; key: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; external; function g_variant_n_children(value: PGVariant): gsize; cdecl; external; function g_variant_new(format_string: Pgchar; args: array of const): PGVariant; cdecl; external; function g_variant_new_array(child_type: PGVariantType; children: PPGVariant; n_children: gsize): PGVariant; cdecl; external; function g_variant_new_boolean(value: gboolean): PGVariant; cdecl; external; function g_variant_new_byte(value: guint8): PGVariant; cdecl; external; function g_variant_new_bytestring(string_: Pgchar): PGVariant; cdecl; external; function g_variant_new_bytestring_array(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_dict_entry(key: PGVariant; value: PGVariant): PGVariant; cdecl; external; function g_variant_new_double(value: gdouble): PGVariant; cdecl; external; function g_variant_new_fixed_array(element_type: PGVariantType; elements: Pgpointer; n_elements: gsize; element_size: gsize): PGVariant; cdecl; external; function g_variant_new_from_bytes(type_: PGVariantType; bytes: PGBytes; trusted: gboolean): PGVariant; cdecl; external; function g_variant_new_from_data(type_: PGVariantType; data: guint8; size: gsize; trusted: gboolean; notify: TGDestroyNotify; user_data: gpointer): PGVariant; cdecl; external; function g_variant_new_handle(value: gint32): PGVariant; cdecl; external; function g_variant_new_int16(value: gint16): PGVariant; cdecl; external; function g_variant_new_int32(value: gint32): PGVariant; cdecl; external; function g_variant_new_int64(value: gint64): PGVariant; cdecl; external; function g_variant_new_maybe(child_type: PGVariantType; child: PGVariant): PGVariant; cdecl; external; function g_variant_new_object_path(object_path: Pgchar): PGVariant; cdecl; external; function g_variant_new_objv(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_parsed(format: Pgchar; args: array of const): PGVariant; cdecl; external; function g_variant_new_parsed_va(format: Pgchar; app: Pva_list): PGVariant; cdecl; external; function g_variant_new_signature(signature: Pgchar): PGVariant; cdecl; external; function g_variant_new_string(string_: Pgchar): PGVariant; cdecl; external; function g_variant_new_strv(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_tuple(children: PPGVariant; n_children: gsize): PGVariant; cdecl; external; function g_variant_new_uint16(value: guint16): PGVariant; cdecl; external; function g_variant_new_uint32(value: guint32): PGVariant; cdecl; external; function g_variant_new_uint64(value: guint64): PGVariant; cdecl; external; function g_variant_new_va(format_string: Pgchar; endptr: PPgchar; app: Pva_list): PGVariant; cdecl; external; function g_variant_new_variant(value: PGVariant): PGVariant; cdecl; external; function g_variant_parse(type_: PGVariantType; text: Pgchar; limit: Pgchar; endptr: PPgchar; error: PPGError): PGVariant; cdecl; external; function g_variant_parser_get_error_quark: TGQuark; cdecl; external; function g_variant_print(value: PGVariant; type_annotate: gboolean): Pgchar; cdecl; external; function g_variant_print_string(value: PGVariant; string_: PGString; type_annotate: gboolean): PGString; cdecl; external; function g_variant_ref(value: PGVariant): PGVariant; cdecl; external; function g_variant_ref_sink(value: PGVariant): PGVariant; cdecl; external; function g_variant_take_ref(value: PGVariant): PGVariant; cdecl; external; function g_variant_type_checked_(arg0: Pgchar): PGVariantType; cdecl; external; function g_variant_type_copy(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_dup_string(type_: PGVariantType): Pgchar; cdecl; external; function g_variant_type_element(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_equal(type1: PGVariantType; type2: PGVariantType): gboolean; cdecl; external; function g_variant_type_first(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_get_gtype: TGType; cdecl; external; function g_variant_type_get_string_length(type_: PGVariantType): gsize; cdecl; external; function g_variant_type_hash(type_: PGVariantType): guint; cdecl; external; function g_variant_type_is_array(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_basic(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_container(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_definite(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_dict_entry(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_maybe(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_subtype_of(type_: PGVariantType; supertype: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_tuple(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_variant(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_key(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_n_items(type_: PGVariantType): gsize; cdecl; external; function g_variant_type_new(type_string: Pgchar): PGVariantType; cdecl; external; function g_variant_type_new_array(element: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_dict_entry(key: PGVariantType; value: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_maybe(element: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_tuple(items: PPGVariantType; length: gint): PGVariantType; cdecl; external; function g_variant_type_next(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_peek_string(type_: PGVariantType): Pgchar; cdecl; external; function g_variant_type_string_is_valid(type_string: Pgchar): gboolean; cdecl; external; function g_variant_type_string_scan(string_: Pgchar; limit: Pgchar; endptr: PPgchar): gboolean; cdecl; external; function g_variant_type_value(type_: PGVariantType): PGVariantType; cdecl; external; function g_vasprintf(string_: PPgchar; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vfprintf(file_: Pgpointer; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vprintf(format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vsnprintf(string_: Pgchar; n: gulong; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vsprintf(string_: Pgchar; format: Pgchar; args: Tva_list): gint; cdecl; external; function glib_check_version(required_major: guint; required_minor: guint; required_micro: guint): Pgchar; cdecl; external; procedure g_array_set_clear_func(array_: Pgpointer; clear_func: TGDestroyNotify); cdecl; external; procedure g_array_sort(array_: Pgpointer; compare_func: TGCompareFunc); cdecl; external; procedure g_array_sort_with_data(array_: Pgpointer; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_array_unref(array_: Pgpointer); cdecl; external; procedure g_assert_warning(log_domain: Pgchar; file_: Pgchar; line: gint; pretty_function: Pgchar; expression: Pgchar); cdecl; external; procedure g_assertion_message(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; message: Pgchar); cdecl; external; procedure g_assertion_message_cmpnum(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; arg1: long_double; cmp: Pgchar; arg2: long_double; numtype: gchar); cdecl; external; procedure g_assertion_message_cmpstr(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; arg1: Pgchar; cmp: Pgchar; arg2: Pgchar); cdecl; external; procedure g_assertion_message_error(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; error: PGError; error_domain: TGQuark; error_code: gint); cdecl; external; procedure g_assertion_message_expr(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar); cdecl; external; procedure g_async_queue_lock(queue: PGAsyncQueue); cdecl; external; procedure g_async_queue_push(queue: PGAsyncQueue; data: gpointer); cdecl; external; procedure g_async_queue_push_sorted(queue: PGAsyncQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_push_sorted_unlocked(queue: PGAsyncQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_push_unlocked(queue: PGAsyncQueue; data: gpointer); cdecl; external; procedure g_async_queue_sort(queue: PGAsyncQueue; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_sort_unlocked(queue: PGAsyncQueue; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_unlock(queue: PGAsyncQueue); cdecl; external; procedure g_async_queue_unref(queue: PGAsyncQueue); cdecl; external; procedure g_atexit(func: TGVoidFunc); cdecl; external; procedure g_atomic_int_inc(atomic: Pgint); cdecl; external; procedure g_atomic_int_set(atomic: Pgint; newval: gint); cdecl; external; procedure g_atomic_pointer_set(atomic: Pgpointer; newval: gpointer); cdecl; external; procedure g_bit_lock(address: Pgint; lock_bit: gint); cdecl; external; procedure g_bit_unlock(address: Pgint; lock_bit: gint); cdecl; external; procedure g_bookmark_file_add_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: Pgchar); cdecl; external; procedure g_bookmark_file_add_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar); cdecl; external; procedure g_bookmark_file_free(bookmark: PGBookmarkFile); cdecl; external; procedure g_bookmark_file_set_added(bookmark: PGBookmarkFile; uri: Pgchar; added: glong); cdecl; external; procedure g_bookmark_file_set_description(bookmark: PGBookmarkFile; uri: Pgchar; description: Pgchar); cdecl; external; procedure g_bookmark_file_set_groups(bookmark: PGBookmarkFile; uri: Pgchar; groups: PPgchar; length: gsize); cdecl; external; procedure g_bookmark_file_set_icon(bookmark: PGBookmarkFile; uri: Pgchar; href: Pgchar; mime_type: Pgchar); cdecl; external; procedure g_bookmark_file_set_is_private(bookmark: PGBookmarkFile; uri: Pgchar; is_private: gboolean); cdecl; external; procedure g_bookmark_file_set_mime_type(bookmark: PGBookmarkFile; uri: Pgchar; mime_type: Pgchar); cdecl; external; procedure g_bookmark_file_set_modified(bookmark: PGBookmarkFile; uri: Pgchar; modified: glong); cdecl; external; procedure g_bookmark_file_set_title(bookmark: PGBookmarkFile; uri: Pgchar; title: Pgchar); cdecl; external; procedure g_bookmark_file_set_visited(bookmark: PGBookmarkFile; uri: Pgchar; visited: glong); cdecl; external; procedure g_byte_array_sort(array_: Pguint8; compare_func: TGCompareFunc); cdecl; external; procedure g_byte_array_sort_with_data(array_: Pguint8; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_byte_array_unref(array_: Pguint8); cdecl; external; procedure g_bytes_unref(bytes: PGBytes); cdecl; external; procedure g_checksum_free(checksum: PGChecksum); cdecl; external; procedure g_checksum_get_digest(checksum: PGChecksum; buffer: Pguint8; digest_len: Pgsize); cdecl; external; procedure g_checksum_reset(checksum: PGChecksum); cdecl; external; procedure g_checksum_update(checksum: PGChecksum; data: Pguint8; length: gssize); cdecl; external; procedure g_clear_error; cdecl; external; procedure g_clear_pointer(pp: Pgpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_cond_broadcast(cond: PGCond); cdecl; external; procedure g_cond_clear(cond: PGCond); cdecl; external; procedure g_cond_init(cond: PGCond); cdecl; external; procedure g_cond_signal(cond: PGCond); cdecl; external; procedure g_cond_wait(cond: PGCond; mutex: PGMutex); cdecl; external; procedure g_datalist_clear(datalist: PPGData); cdecl; external; procedure g_datalist_foreach(datalist: PPGData; func: TGDataForeachFunc; user_data: gpointer); cdecl; external; procedure g_datalist_id_set_data_full(datalist: PPGData; key_id: TGQuark; data: gpointer; destroy_func: TGDestroyNotify); cdecl; external; procedure g_datalist_init(datalist: PPGData); cdecl; external; procedure g_datalist_set_flags(datalist: PPGData; flags: guint); cdecl; external; procedure g_datalist_unset_flags(datalist: PPGData; flags: guint); cdecl; external; procedure g_dataset_destroy(dataset_location: Pgpointer); cdecl; external; procedure g_dataset_foreach(dataset_location: Pgpointer; func: TGDataForeachFunc; user_data: gpointer); cdecl; external; procedure g_dataset_id_set_data_full(dataset_location: Pgpointer; key_id: TGQuark; data: gpointer; destroy_func: TGDestroyNotify); cdecl; external; procedure g_date_add_days(date: PGDate; n_days: guint); cdecl; external; procedure g_date_add_months(date: PGDate; n_months: guint); cdecl; external; procedure g_date_add_years(date: PGDate; n_years: guint); cdecl; external; procedure g_date_clamp(date: PGDate; min_date: PGDate; max_date: PGDate); cdecl; external; procedure g_date_clear(date: PGDate; n_dates: guint); cdecl; external; procedure g_date_free(date: PGDate); cdecl; external; procedure g_date_order(date1: PGDate; date2: PGDate); cdecl; external; procedure g_date_set_day(date: PGDate; day: TGDateDay); cdecl; external; procedure g_date_set_dmy(date: PGDate; day: TGDateDay; month: TGDateMonth; y: TGDateYear); cdecl; external; procedure g_date_set_julian(date: PGDate; julian_date: guint32); cdecl; external; procedure g_date_set_month(date: PGDate; month: TGDateMonth); cdecl; external; procedure g_date_set_parse(date: PGDate; str: Pgchar); cdecl; external; procedure g_date_set_time_t(date: PGDate; timet: glong); cdecl; external; procedure g_date_set_time_val(date: PGDate; timeval: PGTimeVal); cdecl; external; procedure g_date_set_year(date: PGDate; year: TGDateYear); cdecl; external; procedure g_date_subtract_days(date: PGDate; n_days: guint); cdecl; external; procedure g_date_subtract_months(date: PGDate; n_months: guint); cdecl; external; procedure g_date_subtract_years(date: PGDate; n_years: guint); cdecl; external; procedure g_date_time_get_ymd(datetime: PGDateTime; year: Pgint; month: Pgint; day: Pgint); cdecl; external; procedure g_date_time_unref(datetime: PGDateTime); cdecl; external; procedure g_date_to_struct_tm(date: PGDate; tm: Pgpointer); cdecl; external; procedure g_dir_close(dir: PGDir); cdecl; external; procedure g_dir_rewind(dir: PGDir); cdecl; external; procedure g_error_free(error: PGError); cdecl; external; procedure g_free(mem: gpointer); cdecl; external; procedure g_get_current_time(result_: PGTimeVal); cdecl; external; procedure g_hash_table_add(hash_table: PGHashTable; key: gpointer); cdecl; external; procedure g_hash_table_destroy(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_foreach(hash_table: PGHashTable; func: TGHFunc; user_data: gpointer); cdecl; external; procedure g_hash_table_insert(hash_table: PGHashTable; key: gpointer; value: gpointer); cdecl; external; procedure g_hash_table_iter_init(iter: PGHashTableIter; hash_table: PGHashTable); cdecl; external; procedure g_hash_table_iter_remove(iter: PGHashTableIter); cdecl; external; procedure g_hash_table_iter_replace(iter: PGHashTableIter; value: gpointer); cdecl; external; procedure g_hash_table_iter_steal(iter: PGHashTableIter); cdecl; external; procedure g_hash_table_remove_all(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_replace(hash_table: PGHashTable; key: gpointer; value: gpointer); cdecl; external; procedure g_hash_table_steal_all(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_unref(hash_table: PGHashTable); cdecl; external; procedure g_hmac_get_digest(hmac: PGHmac; buffer: Pguint8; digest_len: Pgsize); cdecl; external; procedure g_hmac_unref(hmac: PGHmac); cdecl; external; procedure g_hmac_update(hmac: PGHmac; data: Pguint8; length: gssize); cdecl; external; procedure g_hook_destroy_link(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_free(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_insert_before(hook_list: PGHookList; sibling: PGHook; hook: PGHook); cdecl; external; procedure g_hook_insert_sorted(hook_list: PGHookList; hook: PGHook; func: TGHookCompareFunc); cdecl; external; procedure g_hook_list_clear(hook_list: PGHookList); cdecl; external; procedure g_hook_list_init(hook_list: PGHookList; hook_size: guint); cdecl; external; procedure g_hook_list_invoke(hook_list: PGHookList; may_recurse: gboolean); cdecl; external; procedure g_hook_list_invoke_check(hook_list: PGHookList; may_recurse: gboolean); cdecl; external; procedure g_hook_list_marshal(hook_list: PGHookList; may_recurse: gboolean; marshaller: TGHookMarshaller; marshal_data: gpointer); cdecl; external; procedure g_hook_list_marshal_check(hook_list: PGHookList; may_recurse: gboolean; marshaller: TGHookCheckMarshaller; marshal_data: gpointer); cdecl; external; procedure g_hook_prepend(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_unref(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_io_channel_init(channel: PGIOChannel); cdecl; external; procedure g_io_channel_set_buffer_size(channel: PGIOChannel; size: gsize); cdecl; external; procedure g_io_channel_set_buffered(channel: PGIOChannel; buffered: gboolean); cdecl; external; procedure g_io_channel_set_close_on_unref(channel: PGIOChannel; do_close: gboolean); cdecl; external; procedure g_io_channel_set_line_term(channel: PGIOChannel; line_term: Pgchar; length: gint); cdecl; external; procedure g_io_channel_unref(channel: PGIOChannel); cdecl; external; procedure g_key_file_free(key_file: PGKeyFile); cdecl; external; procedure g_key_file_set_boolean(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gboolean); cdecl; external; procedure g_key_file_set_boolean_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gboolean; length: gsize); cdecl; external; procedure g_key_file_set_double(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gdouble); cdecl; external; procedure g_key_file_set_double_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gdouble; length: gsize); cdecl; external; procedure g_key_file_set_int64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gint64); cdecl; external; procedure g_key_file_set_integer(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gint); cdecl; external; procedure g_key_file_set_integer_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gint; length: gsize); cdecl; external; procedure g_key_file_set_list_separator(key_file: PGKeyFile; separator: gchar); cdecl; external; procedure g_key_file_set_locale_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; string_: Pgchar); cdecl; external; procedure g_key_file_set_locale_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; list: Pgchar; length: gsize); cdecl; external; procedure g_key_file_set_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; string_: Pgchar); cdecl; external; procedure g_key_file_set_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: Pgchar; length: gsize); cdecl; external; procedure g_key_file_set_uint64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: guint64); cdecl; external; procedure g_key_file_set_value(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: Pgchar); cdecl; external; procedure g_key_file_unref(key_file: PGKeyFile); cdecl; external; procedure g_list_foreach(list: PGList; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_list_free(list: PGList); cdecl; external; procedure g_list_free_1(list: PGList); cdecl; external; procedure g_list_free_full(list: PGList; free_func: TGDestroyNotify); cdecl; external; procedure g_log(log_domain: Pgchar; log_level: TGLogLevelFlags; format: Pgchar; args: array of const); cdecl; external; procedure g_log_default_handler(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; unused_data: gpointer); cdecl; external; procedure g_log_remove_handler(log_domain: Pgchar; handler_id: guint); cdecl; external; procedure g_logv(log_domain: Pgchar; log_level: TGLogLevelFlags; format: Pgchar; args: Tva_list); cdecl; external; procedure g_main_context_add_poll(context: PGMainContext; fd: PGPollFD; priority: gint); cdecl; external; procedure g_main_context_dispatch(context: PGMainContext); cdecl; external; procedure g_main_context_invoke(context: PGMainContext; function_: TGSourceFunc; data: gpointer); cdecl; external; procedure g_main_context_invoke_full(context: PGMainContext; priority: gint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify); cdecl; external; procedure g_main_context_pop_thread_default(context: PGMainContext); cdecl; external; procedure g_main_context_push_thread_default(context: PGMainContext); cdecl; external; procedure g_main_context_release(context: PGMainContext); cdecl; external; procedure g_main_context_remove_poll(context: PGMainContext; fd: PGPollFD); cdecl; external; procedure g_main_context_set_poll_func(context: PGMainContext; func: TGPollFunc); cdecl; external; procedure g_main_context_unref(context: PGMainContext); cdecl; external; procedure g_main_context_wakeup(context: PGMainContext); cdecl; external; procedure g_main_loop_quit(loop: PGMainLoop); cdecl; external; procedure g_main_loop_run(loop: PGMainLoop); cdecl; external; procedure g_main_loop_unref(loop: PGMainLoop); cdecl; external; procedure g_mapped_file_unref(file_: PGMappedFile); cdecl; external; procedure g_markup_parse_context_free(context: PGMarkupParseContext); cdecl; external; procedure g_markup_parse_context_get_position(context: PGMarkupParseContext; line_number: Pgint; char_number: Pgint); cdecl; external; procedure g_markup_parse_context_push(context: PGMarkupParseContext; parser: PGMarkupParser; user_data: gpointer); cdecl; external; procedure g_markup_parse_context_unref(context: PGMarkupParseContext); cdecl; external; procedure g_match_info_free(match_info: PGMatchInfo); cdecl; external; procedure g_match_info_unref(match_info: PGMatchInfo); cdecl; external; procedure g_mem_profile; cdecl; external; procedure g_mem_set_vtable(vtable: PGMemVTable); cdecl; external; procedure g_mutex_clear(mutex: PGMutex); cdecl; external; procedure g_mutex_init(mutex: PGMutex); cdecl; external; procedure g_mutex_lock(mutex: PGMutex); cdecl; external; procedure g_mutex_unlock(mutex: PGMutex); cdecl; external; procedure g_node_children_foreach(node: PGNode; flags: TGTraverseFlags; func: TGNodeForeachFunc; data: gpointer); cdecl; external; procedure g_node_destroy(root: PGNode); cdecl; external; procedure g_node_reverse_children(node: PGNode); cdecl; external; procedure g_node_traverse(root: PGNode; order: TGTraverseType; flags: TGTraverseFlags; max_depth: gint; func: TGNodeTraverseFunc; data: gpointer); cdecl; external; procedure g_node_unlink(node: PGNode); cdecl; external; procedure g_nullify_pointer(nullify_location: Pgpointer); cdecl; external; procedure g_on_error_query(prg_name: Pgchar); cdecl; external; procedure g_on_error_stack_trace(prg_name: Pgchar); cdecl; external; procedure g_once_init_leave(location: Pgpointer; result_: gsize); cdecl; external; procedure g_option_context_add_group(context: PGOptionContext; group: PGOptionGroup); cdecl; external; procedure g_option_context_add_main_entries(context: PGOptionContext; entries: PGOptionEntry; translation_domain: Pgchar); cdecl; external; procedure g_option_context_free(context: PGOptionContext); cdecl; external; procedure g_option_context_set_description(context: PGOptionContext; description: Pgchar); cdecl; external; procedure g_option_context_set_help_enabled(context: PGOptionContext; help_enabled: gboolean); cdecl; external; procedure g_option_context_set_ignore_unknown_options(context: PGOptionContext; ignore_unknown: gboolean); cdecl; external; procedure g_option_context_set_main_group(context: PGOptionContext; group: PGOptionGroup); cdecl; external; procedure g_option_context_set_summary(context: PGOptionContext; summary: Pgchar); cdecl; external; procedure g_option_context_set_translate_func(context: PGOptionContext; func: TGTranslateFunc; data: gpointer; destroy_notify: TGDestroyNotify); cdecl; external; procedure g_option_context_set_translation_domain(context: PGOptionContext; domain: Pgchar); cdecl; external; procedure g_option_group_add_entries(group: PGOptionGroup; entries: PGOptionEntry); cdecl; external; procedure g_option_group_free(group: PGOptionGroup); cdecl; external; procedure g_option_group_set_error_hook(group: PGOptionGroup; error_func: TGOptionErrorFunc); cdecl; external; procedure g_option_group_set_parse_hooks(group: PGOptionGroup; pre_parse_func: TGOptionParseFunc; post_parse_func: TGOptionParseFunc); cdecl; external; procedure g_option_group_set_translate_func(group: PGOptionGroup; func: TGTranslateFunc; data: gpointer; destroy_notify: TGDestroyNotify); cdecl; external; procedure g_option_group_set_translation_domain(group: PGOptionGroup; domain: Pgchar); cdecl; external; procedure g_pattern_spec_free(pspec: PGPatternSpec); cdecl; external; procedure g_pointer_bit_lock(address: Pgpointer; lock_bit: gint); cdecl; external; procedure g_pointer_bit_unlock(address: Pgpointer; lock_bit: gint); cdecl; external; procedure g_prefix_error(err: PPGError; format: Pgchar; args: array of const); cdecl; external; procedure g_print(format: Pgchar; args: array of const); cdecl; external; procedure g_printerr(format: Pgchar; args: array of const); cdecl; external; procedure g_private_replace(key: PGPrivate; value: gpointer); cdecl; external; procedure g_private_set(key: PGPrivate; value: gpointer); cdecl; external; procedure g_propagate_error(dest: PPGError; src: PGError); cdecl; external; procedure g_propagate_prefixed_error(dest: PPGError; src: PGError; format: Pgchar; args: array of const); cdecl; external; procedure g_ptr_array_add(array_: Pgpointer; data: gpointer); cdecl; external; procedure g_ptr_array_foreach(array_: Pgpointer; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_ptr_array_remove_range(array_: Pgpointer; index_: guint; length: guint); cdecl; external; procedure g_ptr_array_set_free_func(array_: Pgpointer; element_free_func: TGDestroyNotify); cdecl; external; procedure g_ptr_array_set_size(array_: Pgpointer; length: gint); cdecl; external; procedure g_ptr_array_sort(array_: Pgpointer; compare_func: TGCompareFunc); cdecl; external; procedure g_ptr_array_sort_with_data(array_: Pgpointer; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_ptr_array_unref(array_: Pgpointer); cdecl; external; procedure g_qsort_with_data(pbase: Pgpointer; total_elems: gint; size: gsize; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_clear(queue: PGQueue); cdecl; external; procedure g_queue_delete_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_foreach(queue: PGQueue; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_queue_free(queue: PGQueue); cdecl; external; procedure g_queue_free_full(queue: PGQueue; free_func: TGDestroyNotify); cdecl; external; procedure g_queue_init(queue: PGQueue); cdecl; external; procedure g_queue_insert_after(queue: PGQueue; sibling: PGList; data: gpointer); cdecl; external; procedure g_queue_insert_before(queue: PGQueue; sibling: PGList; data: gpointer); cdecl; external; procedure g_queue_insert_sorted(queue: PGQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_push_head(queue: PGQueue; data: gpointer); cdecl; external; procedure g_queue_push_head_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_push_nth(queue: PGQueue; data: gpointer; n: gint); cdecl; external; procedure g_queue_push_nth_link(queue: PGQueue; n: gint; link_: PGList); cdecl; external; procedure g_queue_push_tail(queue: PGQueue; data: gpointer); cdecl; external; procedure g_queue_push_tail_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_reverse(queue: PGQueue); cdecl; external; procedure g_queue_sort(queue: PGQueue; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_unlink(queue: PGQueue; link_: PGList); cdecl; external; procedure g_rand_free(rand_: PGRand); cdecl; external; procedure g_rand_set_seed(rand_: PGRand; seed: guint32); cdecl; external; procedure g_rand_set_seed_array(rand_: PGRand; seed: Pguint32; seed_length: guint); cdecl; external; procedure g_random_set_seed(seed: guint32); cdecl; external; procedure g_rec_mutex_clear(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_init(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_lock(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_unlock(rec_mutex: PGRecMutex); cdecl; external; procedure g_regex_unref(regex: PGRegex); cdecl; external; procedure g_reload_user_special_dirs_cache; cdecl; external; procedure g_return_if_fail_warning(log_domain: Pgchar; pretty_function: Pgchar; expression: Pgchar); cdecl; external; procedure g_rw_lock_clear(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_init(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_reader_lock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_reader_unlock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_writer_lock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_writer_unlock(rw_lock: PGRWLock); cdecl; external; procedure g_scanner_destroy(scanner: PGScanner); cdecl; external; procedure g_scanner_error(scanner: PGScanner; format: Pgchar; args: array of const); cdecl; external; procedure g_scanner_input_file(scanner: PGScanner; input_fd: gint); cdecl; external; procedure g_scanner_input_text(scanner: PGScanner; text: Pgchar; text_len: guint); cdecl; external; procedure g_scanner_scope_add_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar; value: gpointer); cdecl; external; procedure g_scanner_scope_foreach_symbol(scanner: PGScanner; scope_id: guint; func: TGHFunc; user_data: gpointer); cdecl; external; procedure g_scanner_scope_remove_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar); cdecl; external; procedure g_scanner_sync_file_offset(scanner: PGScanner); cdecl; external; procedure g_scanner_unexp_token(scanner: PGScanner; expected_token: TGTokenType; identifier_spec: Pgchar; symbol_spec: Pgchar; symbol_name: Pgchar; message: Pgchar; is_error: gint); cdecl; external; procedure g_scanner_warn(scanner: PGScanner; format: Pgchar; args: array of const); cdecl; external; procedure g_sequence_foreach(seq: PGSequence; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_sequence_foreach_range(begin_: PGSequenceIter; end_: PGSequenceIter; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_sequence_free(seq: PGSequence); cdecl; external; procedure g_sequence_move(src: PGSequenceIter; dest: PGSequenceIter); cdecl; external; procedure g_sequence_move_range(dest: PGSequenceIter; begin_: PGSequenceIter; end_: PGSequenceIter); cdecl; external; procedure g_sequence_remove(iter: PGSequenceIter); cdecl; external; procedure g_sequence_remove_range(begin_: PGSequenceIter; end_: PGSequenceIter); cdecl; external; procedure g_sequence_set(iter: PGSequenceIter; data: gpointer); cdecl; external; procedure g_sequence_sort(seq: PGSequence; cmp_func: TGCompareDataFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_changed(iter: PGSequenceIter; cmp_func: TGCompareDataFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_changed_iter(iter: PGSequenceIter; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_iter(seq: PGSequence; cmp_func: TGSequenceIterCompareFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_swap(a: PGSequenceIter; b: PGSequenceIter); cdecl; external; procedure g_set_application_name(application_name: Pgchar); cdecl; external; procedure g_set_error(err: PPGError; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; external; procedure g_set_error_literal(err: PPGError; domain: TGQuark; code: gint; message: Pgchar); cdecl; external; procedure g_set_prgname(prgname: Pgchar); cdecl; external; procedure g_slice_free1(block_size: gsize; mem_block: gpointer); cdecl; external; procedure g_slice_free_chain_with_offset(block_size: gsize; mem_chain: gpointer; next_offset: gsize); cdecl; external; procedure g_slice_set_config(ckey: TGSliceConfig; value: gint64); cdecl; external; procedure g_slist_foreach(list: PGSList; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_slist_free(list: PGSList); cdecl; external; procedure g_slist_free_1(list: PGSList); cdecl; external; procedure g_slist_free_full(list: PGSList; free_func: TGDestroyNotify); cdecl; external; procedure g_source_add_child_source(source: PGSource; child_source: PGSource); cdecl; external; procedure g_source_add_poll(source: PGSource; fd: PGPollFD); cdecl; external; procedure g_source_destroy(source: PGSource); cdecl; external; procedure g_source_modify_unix_fd(source: PGSource; tag: gpointer; new_events: TGIOCondition); cdecl; external; procedure g_source_remove_child_source(source: PGSource; child_source: PGSource); cdecl; external; procedure g_source_remove_poll(source: PGSource; fd: PGPollFD); cdecl; external; procedure g_source_remove_unix_fd(source: PGSource; tag: gpointer); cdecl; external; procedure g_source_set_callback(source: PGSource; func: TGSourceFunc; data: gpointer; notify: TGDestroyNotify); cdecl; external; procedure g_source_set_callback_indirect(source: PGSource; callback_data: gpointer; callback_funcs: PGSourceCallbackFuncs); cdecl; external; procedure g_source_set_can_recurse(source: PGSource; can_recurse: gboolean); cdecl; external; procedure g_source_set_funcs(source: PGSource; funcs: PGSourceFuncs); cdecl; external; procedure g_source_set_name(source: PGSource; name: Pgchar); cdecl; external; procedure g_source_set_name_by_id(tag: guint; name: Pgchar); cdecl; external; procedure g_source_set_priority(source: PGSource; priority: gint); cdecl; external; procedure g_source_set_ready_time(source: PGSource; ready_time: gint64); cdecl; external; procedure g_source_unref(source: PGSource); cdecl; external; procedure g_spawn_close_pid(pid: TGPid); cdecl; external; procedure g_strfreev(str_array: PPgchar); cdecl; external; procedure g_string_append_printf(string_: PGString; format: Pgchar; args: array of const); cdecl; external; procedure g_string_append_vprintf(string_: PGString; format: Pgchar; args: Tva_list); cdecl; external; procedure g_string_chunk_clear(chunk: PGStringChunk); cdecl; external; procedure g_string_chunk_free(chunk: PGStringChunk); cdecl; external; procedure g_string_printf(string_: PGString; format: Pgchar; args: array of const); cdecl; external; procedure g_string_vprintf(string_: PGString; format: Pgchar; args: Tva_list); cdecl; external; procedure g_test_add_data_func(testpath: Pgchar; test_data: Pgpointer; test_func: TGTestDataFunc); cdecl; external; procedure g_test_add_data_func_full(testpath: Pgchar; test_data: gpointer; test_func: TGTestDataFunc; data_free_func: TGDestroyNotify); cdecl; external; procedure g_test_add_func(testpath: Pgchar; test_func: TGTestFunc); cdecl; external; procedure g_test_add_vtable(testpath: Pgchar; data_size: gsize; test_data: Pgpointer; data_setup: TGTestFixtureFunc; data_test: TGTestFixtureFunc; data_teardown: TGTestFixtureFunc); cdecl; external; procedure g_test_assert_expected_messages_internal(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar); cdecl; external; procedure g_test_bug(bug_uri_snippet: Pgchar); cdecl; external; procedure g_test_bug_base(uri_pattern: Pgchar); cdecl; external; procedure g_test_expect_message(log_domain: Pgchar; log_level: TGLogLevelFlags; pattern: Pgchar); cdecl; external; procedure g_test_fail; cdecl; external; procedure g_test_init(argc: Pgint; argv: PPPgchar; args: array of const); cdecl; external; procedure g_test_log_buffer_free(tbuffer: PGTestLogBuffer); cdecl; external; procedure g_test_log_buffer_push(tbuffer: PGTestLogBuffer; n_bytes: guint; bytes: Pguint8); cdecl; external; procedure g_test_log_msg_free(tmsg: PGTestLogMsg); cdecl; external; procedure g_test_log_set_fatal_handler(log_func: TGTestLogFatalFunc; user_data: gpointer); cdecl; external; procedure g_test_maximized_result(maximized_quantity: gdouble; format: Pgchar; args: array of const); cdecl; external; procedure g_test_message(format: Pgchar; args: array of const); cdecl; external; procedure g_test_minimized_result(minimized_quantity: gdouble; format: Pgchar; args: array of const); cdecl; external; procedure g_test_queue_destroy(destroy_func: TGDestroyNotify; destroy_data: gpointer); cdecl; external; procedure g_test_queue_free(gfree_pointer: gpointer); cdecl; external; procedure g_test_suite_add(suite: PGTestSuite; test_case: PGTestCase); cdecl; external; procedure g_test_suite_add_suite(suite: PGTestSuite; nestedsuite: PGTestSuite); cdecl; external; procedure g_test_timer_start; cdecl; external; procedure g_test_trap_assertions(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; assertion_flags: guint64; pattern: Pgchar); cdecl; external; procedure g_thread_exit(retval: gpointer); cdecl; external; procedure g_thread_pool_free(pool: PGThreadPool; immediate: gboolean; wait_: gboolean); cdecl; external; procedure g_thread_pool_set_max_idle_time(interval: guint); cdecl; external; procedure g_thread_pool_set_max_unused_threads(max_threads: gint); cdecl; external; procedure g_thread_pool_set_sort_function(pool: PGThreadPool; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_thread_pool_stop_unused_threads; cdecl; external; procedure g_thread_unref(thread: PGThread); cdecl; external; procedure g_thread_yield; cdecl; external; procedure g_time_val_add(time_: PGTimeVal; microseconds: glong); cdecl; external; procedure g_time_zone_unref(tz: PGTimeZone); cdecl; external; procedure g_timer_continue(timer: PGTimer); cdecl; external; procedure g_timer_destroy(timer: PGTimer); cdecl; external; procedure g_timer_reset(timer: PGTimer); cdecl; external; procedure g_timer_start(timer: PGTimer); cdecl; external; procedure g_timer_stop(timer: PGTimer); cdecl; external; procedure g_trash_stack_push(stack_p: PPGTrashStack; data_p: gpointer); cdecl; external; procedure g_tree_destroy(tree: PGTree); cdecl; external; procedure g_tree_foreach(tree: PGTree; func: TGTraverseFunc; user_data: gpointer); cdecl; external; procedure g_tree_insert(tree: PGTree; key: gpointer; value: gpointer); cdecl; external; procedure g_tree_replace(tree: PGTree; key: gpointer; value: gpointer); cdecl; external; procedure g_tree_unref(tree: PGTree); cdecl; external; procedure g_unicode_canonical_ordering(string_: Pgunichar; len: gsize); cdecl; external; procedure g_unsetenv(variable: Pgchar); cdecl; external; procedure g_usleep(microseconds: gulong); cdecl; external; procedure g_variant_builder_add(builder: PGVariantBuilder; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_builder_add_parsed(builder: PGVariantBuilder; format: Pgchar; args: array of const); cdecl; external; procedure g_variant_builder_add_value(builder: PGVariantBuilder; value: PGVariant); cdecl; external; procedure g_variant_builder_clear(builder: PGVariantBuilder); cdecl; external; procedure g_variant_builder_close(builder: PGVariantBuilder); cdecl; external; procedure g_variant_builder_init(builder: PGVariantBuilder; type_: PGVariantType); cdecl; external; procedure g_variant_builder_open(builder: PGVariantBuilder; type_: PGVariantType); cdecl; external; procedure g_variant_builder_unref(builder: PGVariantBuilder); cdecl; external; procedure g_variant_get(value: PGVariant; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_get_child(value: PGVariant; index_: gsize; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_get_va(value: PGVariant; format_string: Pgchar; endptr: PPgchar; app: Pva_list); cdecl; external; procedure g_variant_iter_free(iter: PGVariantIter); cdecl; external; procedure g_variant_store(value: PGVariant; data: gpointer); cdecl; external; procedure g_variant_type_free(type_: PGVariantType); cdecl; external; procedure g_variant_unref(value: PGVariant); cdecl; external; procedure g_warn_message(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; warnexpr: Pgchar); cdecl; external; implementation end.doublecmd-1.1.30/src/platform/unix/glib/ugio2.pas0000644000175000001440000202214215104114162020635 0ustar alexxusers{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGio2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} interface uses CTypes, uGObject2, uGLib2; const DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME = 'gio-desktop-app-info-lookup'; FILE_ATTRIBUTE_ACCESS_CAN_DELETE = 'access::can-delete'; FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE = 'access::can-execute'; FILE_ATTRIBUTE_ACCESS_CAN_READ = 'access::can-read'; FILE_ATTRIBUTE_ACCESS_CAN_RENAME = 'access::can-rename'; FILE_ATTRIBUTE_ACCESS_CAN_TRASH = 'access::can-trash'; FILE_ATTRIBUTE_ACCESS_CAN_WRITE = 'access::can-write'; FILE_ATTRIBUTE_DOS_IS_ARCHIVE = 'dos::is-archive'; FILE_ATTRIBUTE_DOS_IS_SYSTEM = 'dos::is-system'; FILE_ATTRIBUTE_ETAG_VALUE = 'etag::value'; FILE_ATTRIBUTE_FILESYSTEM_FREE = 'filesystem::free'; FILE_ATTRIBUTE_FILESYSTEM_READONLY = 'filesystem::readonly'; FILE_ATTRIBUTE_FILESYSTEM_SIZE = 'filesystem::size'; FILE_ATTRIBUTE_FILESYSTEM_TYPE = 'filesystem::type'; FILE_ATTRIBUTE_FILESYSTEM_USED = 'filesystem::used'; FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW = 'filesystem::use-preview'; FILE_ATTRIBUTE_GVFS_BACKEND = 'gvfs::backend'; FILE_ATTRIBUTE_ID_FILE = 'id::file'; FILE_ATTRIBUTE_ID_FILESYSTEM = 'id::filesystem'; FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT = 'mountable::can-eject'; FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT = 'mountable::can-mount'; FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL = 'mountable::can-poll'; FILE_ATTRIBUTE_MOUNTABLE_CAN_START = 'mountable::can-start'; FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED = 'mountable::can-start-degraded'; FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP = 'mountable::can-stop'; FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT = 'mountable::can-unmount'; FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI = 'mountable::hal-udi'; FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC = 'mountable::is-media-check-automatic'; FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE = 'mountable::start-stop-type'; FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE = 'mountable::unix-device'; FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE = 'mountable::unix-device-file'; FILE_ATTRIBUTE_OWNER_GROUP = 'owner::group'; FILE_ATTRIBUTE_OWNER_USER = 'owner::user'; FILE_ATTRIBUTE_OWNER_USER_REAL = 'owner::user-real'; FILE_ATTRIBUTE_PREVIEW_ICON = 'preview::icon'; FILE_ATTRIBUTE_SELINUX_CONTEXT = 'selinux::context'; FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE = 'standard::allocated-size'; FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE = 'standard::content-type'; FILE_ATTRIBUTE_STANDARD_COPY_NAME = 'standard::copy-name'; FILE_ATTRIBUTE_STANDARD_DESCRIPTION = 'standard::description'; FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME = 'standard::display-name'; FILE_ATTRIBUTE_STANDARD_EDIT_NAME = 'standard::edit-name'; FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE = 'standard::fast-content-type'; FILE_ATTRIBUTE_STANDARD_ICON = 'standard::icon'; FILE_ATTRIBUTE_STANDARD_IS_BACKUP = 'standard::is-backup'; FILE_ATTRIBUTE_STANDARD_IS_HIDDEN = 'standard::is-hidden'; FILE_ATTRIBUTE_STANDARD_IS_SYMLINK = 'standard::is-symlink'; FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL = 'standard::is-virtual'; FILE_ATTRIBUTE_STANDARD_NAME = 'standard::name'; FILE_ATTRIBUTE_STANDARD_SIZE = 'standard::size'; FILE_ATTRIBUTE_STANDARD_SORT_ORDER = 'standard::sort-order'; FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON = 'standard::symbolic-icon'; FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET = 'standard::symlink-target'; FILE_ATTRIBUTE_STANDARD_TARGET_URI = 'standard::target-uri'; FILE_ATTRIBUTE_STANDARD_TYPE = 'standard::type'; FILE_ATTRIBUTE_THUMBNAILING_FAILED = 'thumbnail::failed'; FILE_ATTRIBUTE_THUMBNAIL_PATH = 'thumbnail::path'; FILE_ATTRIBUTE_TIME_ACCESS = 'time::access'; FILE_ATTRIBUTE_TIME_ACCESS_USEC = 'time::access-usec'; FILE_ATTRIBUTE_TIME_CHANGED = 'time::changed'; FILE_ATTRIBUTE_TIME_CHANGED_USEC = 'time::changed-usec'; FILE_ATTRIBUTE_TIME_CREATED = 'time::created'; FILE_ATTRIBUTE_TIME_CREATED_USEC = 'time::created-usec'; FILE_ATTRIBUTE_TIME_MODIFIED = 'time::modified'; FILE_ATTRIBUTE_TIME_MODIFIED_USEC = 'time::modified-usec'; FILE_ATTRIBUTE_TRASH_DELETION_DATE = 'trash::deletion-date'; FILE_ATTRIBUTE_TRASH_ITEM_COUNT = 'trash::item-count'; FILE_ATTRIBUTE_TRASH_ORIG_PATH = 'trash::orig-path'; FILE_ATTRIBUTE_UNIX_BLOCKS = 'unix::blocks'; FILE_ATTRIBUTE_UNIX_BLOCK_SIZE = 'unix::block-size'; FILE_ATTRIBUTE_UNIX_DEVICE = 'unix::device'; FILE_ATTRIBUTE_UNIX_GID = 'unix::gid'; FILE_ATTRIBUTE_UNIX_INODE = 'unix::inode'; FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT = 'unix::is-mountpoint'; FILE_ATTRIBUTE_UNIX_MODE = 'unix::mode'; FILE_ATTRIBUTE_UNIX_NLINK = 'unix::nlink'; FILE_ATTRIBUTE_UNIX_RDEV = 'unix::rdev'; FILE_ATTRIBUTE_UNIX_UID = 'unix::uid'; MENU_ATTRIBUTE_ACTION = 'action'; MENU_ATTRIBUTE_ACTION_NAMESPACE = 'action-namespace'; MENU_ATTRIBUTE_LABEL = 'label'; MENU_ATTRIBUTE_TARGET = 'target'; MENU_LINK_SECTION = 'section'; MENU_LINK_SUBMENU = 'submenu'; NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME = 'gio-native-volume-monitor'; NETWORK_MONITOR_EXTENSION_POINT_NAME = 'gio-network-monitor'; PROXY_EXTENSION_POINT_NAME = 'gio-proxy'; PROXY_RESOLVER_EXTENSION_POINT_NAME = 'gio-proxy-resolver'; TLS_BACKEND_EXTENSION_POINT_NAME = 'gio-tls-backend'; TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT = '1.3.6.1.5.5.7.3.2'; TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER = '1.3.6.1.5.5.7.3.1'; VFS_EXTENSION_POINT_NAME = 'gio-vfs'; VOLUME_IDENTIFIER_KIND_CLASS = 'class'; VOLUME_IDENTIFIER_KIND_HAL_UDI = 'hal-udi'; VOLUME_IDENTIFIER_KIND_LABEL = 'label'; VOLUME_IDENTIFIER_KIND_NFS_MOUNT = 'nfs-mount'; VOLUME_IDENTIFIER_KIND_UNIX_DEVICE = 'unix-device'; VOLUME_IDENTIFIER_KIND_UUID = 'uuid'; VOLUME_MONITOR_EXTENSION_POINT_NAME = 'gio-volume-monitor'; type TGAppInfoCreateFlags = Integer; const { GAppInfoCreateFlags } G_APP_INFO_CREATE_NONE: TGAppInfoCreateFlags = 0; G_APP_INFO_CREATE_NEEDS_TERMINAL: TGAppInfoCreateFlags = 1; G_APP_INFO_CREATE_SUPPORTS_URIS: TGAppInfoCreateFlags = 2; G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION: TGAppInfoCreateFlags = 4; type TGApplicationFlags = Integer; const { GApplicationFlags } G_APPLICATION_FLAGS_NONE: TGApplicationFlags = 0; G_APPLICATION_IS_SERVICE: TGApplicationFlags = 1; G_APPLICATION_IS_LAUNCHER: TGApplicationFlags = 2; G_APPLICATION_HANDLES_OPEN: TGApplicationFlags = 4; G_APPLICATION_HANDLES_COMMAND_LINE: TGApplicationFlags = 8; G_APPLICATION_SEND_ENVIRONMENT: TGApplicationFlags = 16; G_APPLICATION_NON_UNIQUE: TGApplicationFlags = 32; type TGDBusConnectionFlags = Integer; const { GDBusConnectionFlags } G_DBUS_CONNECTION_FLAGS_NONE: TGDBusConnectionFlags = 0; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT: TGDBusConnectionFlags = 1; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER: TGDBusConnectionFlags = 2; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: TGDBusConnectionFlags = 4; G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION: TGDBusConnectionFlags = 8; G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING: TGDBusConnectionFlags = 16; type TGDBusCallFlags = Integer; const { GDBusCallFlags } G_DBUS_CALL_FLAGS_NONE: TGDBusCallFlags = 0; G_DBUS_CALL_FLAGS_NO_AUTO_START: TGDBusCallFlags = 1; type TGDBusCapabilityFlags = Integer; const { GDBusCapabilityFlags } G_DBUS_CAPABILITY_FLAGS_NONE: TGDBusCapabilityFlags = 0; G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING: TGDBusCapabilityFlags = 1; type TGDBusSubtreeFlags = Integer; const { GDBusSubtreeFlags } G_DBUS_SUBTREE_FLAGS_NONE: TGDBusSubtreeFlags = 0; G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES: TGDBusSubtreeFlags = 1; type TGDBusSendMessageFlags = Integer; const { GDBusSendMessageFlags } G_DBUS_SEND_MESSAGE_FLAGS_NONE: TGDBusSendMessageFlags = 0; G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL: TGDBusSendMessageFlags = 1; type TGDBusSignalFlags = Integer; const { GDBusSignalFlags } G_DBUS_SIGNAL_FLAGS_NONE: TGDBusSignalFlags = 0; G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE: TGDBusSignalFlags = 1; type TGFileCreateFlags = Integer; const { GFileCreateFlags } G_FILE_CREATE_NONE: TGFileCreateFlags = 0; G_FILE_CREATE_PRIVATE: TGFileCreateFlags = 1; G_FILE_CREATE_REPLACE_DESTINATION: TGFileCreateFlags = 2; type TGFileCopyFlags = Integer; const { GFileCopyFlags } G_FILE_COPY_NONE: TGFileCopyFlags = 0; G_FILE_COPY_OVERWRITE: TGFileCopyFlags = 1; G_FILE_COPY_BACKUP: TGFileCopyFlags = 2; G_FILE_COPY_NOFOLLOW_SYMLINKS: TGFileCopyFlags = 4; G_FILE_COPY_ALL_METADATA: TGFileCopyFlags = 8; G_FILE_COPY_NO_FALLBACK_FOR_MOVE: TGFileCopyFlags = 16; G_FILE_COPY_TARGET_DEFAULT_PERMS: TGFileCopyFlags = 32; type TGMountUnmountFlags = Integer; const { GMountUnmountFlags } G_MOUNT_UNMOUNT_NONE: TGMountUnmountFlags = 0; G_MOUNT_UNMOUNT_FORCE: TGMountUnmountFlags = 1; type TGFileQueryInfoFlags = Integer; const { GFileQueryInfoFlags } G_FILE_QUERY_INFO_NONE: TGFileQueryInfoFlags = 0; G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS: TGFileQueryInfoFlags = 1; type TGFileMonitorFlags = Integer; const { GFileMonitorFlags } G_FILE_MONITOR_NONE: TGFileMonitorFlags = 0; G_FILE_MONITOR_WATCH_MOUNTS: TGFileMonitorFlags = 1; G_FILE_MONITOR_SEND_MOVED: TGFileMonitorFlags = 2; G_FILE_MONITOR_WATCH_HARD_LINKS: TGFileMonitorFlags = 4; type TGMountMountFlags = Integer; const { GMountMountFlags } G_MOUNT_MOUNT_NONE: TGMountMountFlags = 0; type TGFileAttributeType = Integer; const { GFileAttributeType } G_FILE_ATTRIBUTE_TYPE_INVALID: TGFileAttributeType = 0; G_FILE_ATTRIBUTE_TYPE_STRING: TGFileAttributeType = 1; G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: TGFileAttributeType = 2; G_FILE_ATTRIBUTE_TYPE_BOOLEAN: TGFileAttributeType = 3; G_FILE_ATTRIBUTE_TYPE_UINT32: TGFileAttributeType = 4; G_FILE_ATTRIBUTE_TYPE_INT32: TGFileAttributeType = 5; G_FILE_ATTRIBUTE_TYPE_UINT64: TGFileAttributeType = 6; G_FILE_ATTRIBUTE_TYPE_INT64: TGFileAttributeType = 7; G_FILE_ATTRIBUTE_TYPE_OBJECT: TGFileAttributeType = 8; G_FILE_ATTRIBUTE_TYPE_STRINGV: TGFileAttributeType = 9; type TGDriveStartFlags = Integer; const { GDriveStartFlags } G_DRIVE_START_NONE: TGDriveStartFlags = 0; type TGAskPasswordFlags = Integer; const { GAskPasswordFlags } G_ASK_PASSWORD_NEED_PASSWORD: TGAskPasswordFlags = 1; G_ASK_PASSWORD_NEED_USERNAME: TGAskPasswordFlags = 2; G_ASK_PASSWORD_NEED_DOMAIN: TGAskPasswordFlags = 4; G_ASK_PASSWORD_SAVING_SUPPORTED: TGAskPasswordFlags = 8; G_ASK_PASSWORD_ANONYMOUS_SUPPORTED: TGAskPasswordFlags = 16; type TGOutputStreamSpliceFlags = Integer; const { GOutputStreamSpliceFlags } G_OUTPUT_STREAM_SPLICE_NONE: TGOutputStreamSpliceFlags = 0; G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE: TGOutputStreamSpliceFlags = 1; G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET: TGOutputStreamSpliceFlags = 2; type TGBusNameOwnerFlags = Integer; const { GBusNameOwnerFlags } G_BUS_NAME_OWNER_FLAGS_NONE: TGBusNameOwnerFlags = 0; G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT: TGBusNameOwnerFlags = 1; G_BUS_NAME_OWNER_FLAGS_REPLACE: TGBusNameOwnerFlags = 2; type TGBusNameWatcherFlags = Integer; const { GBusNameWatcherFlags } G_BUS_NAME_WATCHER_FLAGS_NONE: TGBusNameWatcherFlags = 0; G_BUS_NAME_WATCHER_FLAGS_AUTO_START: TGBusNameWatcherFlags = 1; type TGBusType = Integer; const { GBusType } G_BUS_TYPE_STARTER: TGBusType = -1; G_BUS_TYPE_NONE: TGBusType = 0; G_BUS_TYPE_SYSTEM: TGBusType = 1; G_BUS_TYPE_SESSION: TGBusType = 2; type TGConverterFlags = Integer; const { GConverterFlags } G_CONVERTER_NO_FLAGS: TGConverterFlags = 0; G_CONVERTER_INPUT_AT_END: TGConverterFlags = 1; G_CONVERTER_FLUSH: TGConverterFlags = 2; type TGConverterResult = Integer; const { GConverterResult } G_CONVERTER_ERROR: TGConverterResult = 0; G_CONVERTER_CONVERTED: TGConverterResult = 1; G_CONVERTER_FINISHED: TGConverterResult = 2; G_CONVERTER_FLUSHED: TGConverterResult = 3; type TGCredentialsType = Integer; const { GCredentialsType } G_CREDENTIALS_TYPE_INVALID: TGCredentialsType = 0; G_CREDENTIALS_TYPE_LINUX_UCRED: TGCredentialsType = 1; G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED: TGCredentialsType = 2; G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED: TGCredentialsType = 3; type TGIOStreamSpliceFlags = Integer; const { GIOStreamSpliceFlags } G_IO_STREAM_SPLICE_NONE: TGIOStreamSpliceFlags = 0; G_IO_STREAM_SPLICE_CLOSE_STREAM1: TGIOStreamSpliceFlags = 1; G_IO_STREAM_SPLICE_CLOSE_STREAM2: TGIOStreamSpliceFlags = 2; G_IO_STREAM_SPLICE_WAIT_FOR_BOTH: TGIOStreamSpliceFlags = 4; type TGDBusMessageFlags = Integer; const { GDBusMessageFlags } G_DBUS_MESSAGE_FLAGS_NONE: TGDBusMessageFlags = 0; G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED: TGDBusMessageFlags = 1; G_DBUS_MESSAGE_FLAGS_NO_AUTO_START: TGDBusMessageFlags = 2; type TGDBusMessageHeaderField = Integer; const { GDBusMessageHeaderField } G_DBUS_MESSAGE_HEADER_FIELD_INVALID: TGDBusMessageHeaderField = 0; G_DBUS_MESSAGE_HEADER_FIELD_PATH: TGDBusMessageHeaderField = 1; G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE: TGDBusMessageHeaderField = 2; G_DBUS_MESSAGE_HEADER_FIELD_MEMBER: TGDBusMessageHeaderField = 3; G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME: TGDBusMessageHeaderField = 4; G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL: TGDBusMessageHeaderField = 5; G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION: TGDBusMessageHeaderField = 6; G_DBUS_MESSAGE_HEADER_FIELD_SENDER: TGDBusMessageHeaderField = 7; G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE: TGDBusMessageHeaderField = 8; G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS: TGDBusMessageHeaderField = 9; type TGDBusMessageByteOrder = Integer; const { GDBusMessageByteOrder } G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN: TGDBusMessageByteOrder = 66; G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN: TGDBusMessageByteOrder = 108; type TGDBusMessageType = Integer; const { GDBusMessageType } G_DBUS_MESSAGE_TYPE_INVALID: TGDBusMessageType = 0; G_DBUS_MESSAGE_TYPE_METHOD_CALL: TGDBusMessageType = 1; G_DBUS_MESSAGE_TYPE_METHOD_RETURN: TGDBusMessageType = 2; G_DBUS_MESSAGE_TYPE_ERROR: TGDBusMessageType = 3; G_DBUS_MESSAGE_TYPE_SIGNAL: TGDBusMessageType = 4; type TGDBusError = Integer; const { GDBusError } G_DBUS_ERROR_FAILED: TGDBusError = 0; G_DBUS_ERROR_NO_MEMORY: TGDBusError = 1; G_DBUS_ERROR_SERVICE_UNKNOWN: TGDBusError = 2; G_DBUS_ERROR_NAME_HAS_NO_OWNER: TGDBusError = 3; G_DBUS_ERROR_NO_REPLY: TGDBusError = 4; G_DBUS_ERROR_IO_ERROR: TGDBusError = 5; G_DBUS_ERROR_BAD_ADDRESS: TGDBusError = 6; G_DBUS_ERROR_NOT_SUPPORTED: TGDBusError = 7; G_DBUS_ERROR_LIMITS_EXCEEDED: TGDBusError = 8; G_DBUS_ERROR_ACCESS_DENIED: TGDBusError = 9; G_DBUS_ERROR_AUTH_FAILED: TGDBusError = 10; G_DBUS_ERROR_NO_SERVER: TGDBusError = 11; G_DBUS_ERROR_TIMEOUT: TGDBusError = 12; G_DBUS_ERROR_NO_NETWORK: TGDBusError = 13; G_DBUS_ERROR_ADDRESS_IN_USE: TGDBusError = 14; G_DBUS_ERROR_DISCONNECTED: TGDBusError = 15; G_DBUS_ERROR_INVALID_ARGS: TGDBusError = 16; G_DBUS_ERROR_FILE_NOT_FOUND: TGDBusError = 17; G_DBUS_ERROR_FILE_EXISTS: TGDBusError = 18; G_DBUS_ERROR_UNKNOWN_METHOD: TGDBusError = 19; G_DBUS_ERROR_TIMED_OUT: TGDBusError = 20; G_DBUS_ERROR_MATCH_RULE_NOT_FOUND: TGDBusError = 21; G_DBUS_ERROR_MATCH_RULE_INVALID: TGDBusError = 22; G_DBUS_ERROR_SPAWN_EXEC_FAILED: TGDBusError = 23; G_DBUS_ERROR_SPAWN_FORK_FAILED: TGDBusError = 24; G_DBUS_ERROR_SPAWN_CHILD_EXITED: TGDBusError = 25; G_DBUS_ERROR_SPAWN_CHILD_SIGNALED: TGDBusError = 26; G_DBUS_ERROR_SPAWN_FAILED: TGDBusError = 27; G_DBUS_ERROR_SPAWN_SETUP_FAILED: TGDBusError = 28; G_DBUS_ERROR_SPAWN_CONFIG_INVALID: TGDBusError = 29; G_DBUS_ERROR_SPAWN_SERVICE_INVALID: TGDBusError = 30; G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND: TGDBusError = 31; G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID: TGDBusError = 32; G_DBUS_ERROR_SPAWN_FILE_INVALID: TGDBusError = 33; G_DBUS_ERROR_SPAWN_NO_MEMORY: TGDBusError = 34; G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN: TGDBusError = 35; G_DBUS_ERROR_INVALID_SIGNATURE: TGDBusError = 36; G_DBUS_ERROR_INVALID_FILE_CONTENT: TGDBusError = 37; G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN: TGDBusError = 38; G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN: TGDBusError = 39; G_DBUS_ERROR_OBJECT_PATH_IN_USE: TGDBusError = 40; type TGDBusPropertyInfoFlags = Integer; const { GDBusPropertyInfoFlags } G_DBUS_PROPERTY_INFO_FLAGS_NONE: TGDBusPropertyInfoFlags = 0; G_DBUS_PROPERTY_INFO_FLAGS_READABLE: TGDBusPropertyInfoFlags = 1; G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE: TGDBusPropertyInfoFlags = 2; type TGDBusInterfaceSkeletonFlags = Integer; const { GDBusInterfaceSkeletonFlags } G_DBUS_INTERFACE_SKELETON_FLAGS_NONE: TGDBusInterfaceSkeletonFlags = 0; G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD: TGDBusInterfaceSkeletonFlags = 1; type TGDBusObjectManagerClientFlags = Integer; const { GDBusObjectManagerClientFlags } G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE: TGDBusObjectManagerClientFlags = 0; G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START: TGDBusObjectManagerClientFlags = 1; type TGDBusProxyFlags = Integer; const { GDBusProxyFlags } G_DBUS_PROXY_FLAGS_NONE: TGDBusProxyFlags = 0; G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES: TGDBusProxyFlags = 1; G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS: TGDBusProxyFlags = 2; G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START: TGDBusProxyFlags = 4; G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES: TGDBusProxyFlags = 8; type TGDBusServerFlags = Integer; const { GDBusServerFlags } G_DBUS_SERVER_FLAGS_NONE: TGDBusServerFlags = 0; G_DBUS_SERVER_FLAGS_RUN_IN_THREAD: TGDBusServerFlags = 1; G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: TGDBusServerFlags = 2; type TGDataStreamByteOrder = Integer; const { GDataStreamByteOrder } G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN: TGDataStreamByteOrder = 0; G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN: TGDataStreamByteOrder = 1; G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN: TGDataStreamByteOrder = 2; type TGDataStreamNewlineType = Integer; const { GDataStreamNewlineType } G_DATA_STREAM_NEWLINE_TYPE_LF: TGDataStreamNewlineType = 0; G_DATA_STREAM_NEWLINE_TYPE_CR: TGDataStreamNewlineType = 1; G_DATA_STREAM_NEWLINE_TYPE_CR_LF: TGDataStreamNewlineType = 2; G_DATA_STREAM_NEWLINE_TYPE_ANY: TGDataStreamNewlineType = 3; type TGMountOperationResult = Integer; const { GMountOperationResult } G_MOUNT_OPERATION_HANDLED: TGMountOperationResult = 0; G_MOUNT_OPERATION_ABORTED: TGMountOperationResult = 1; G_MOUNT_OPERATION_UNHANDLED: TGMountOperationResult = 2; type TGPasswordSave = Integer; const { GPasswordSave } G_PASSWORD_SAVE_NEVER: TGPasswordSave = 0; G_PASSWORD_SAVE_FOR_SESSION: TGPasswordSave = 1; G_PASSWORD_SAVE_PERMANENTLY: TGPasswordSave = 2; type TGDriveStartStopType = Integer; const { GDriveStartStopType } G_DRIVE_START_STOP_TYPE_UNKNOWN: TGDriveStartStopType = 0; G_DRIVE_START_STOP_TYPE_SHUTDOWN: TGDriveStartStopType = 1; G_DRIVE_START_STOP_TYPE_NETWORK: TGDriveStartStopType = 2; G_DRIVE_START_STOP_TYPE_MULTIDISK: TGDriveStartStopType = 3; G_DRIVE_START_STOP_TYPE_PASSWORD: TGDriveStartStopType = 4; type TGEmblemOrigin = Integer; const { GEmblemOrigin } G_EMBLEM_ORIGIN_UNKNOWN: TGEmblemOrigin = 0; G_EMBLEM_ORIGIN_DEVICE: TGEmblemOrigin = 1; G_EMBLEM_ORIGIN_LIVEMETADATA: TGEmblemOrigin = 2; G_EMBLEM_ORIGIN_TAG: TGEmblemOrigin = 3; type TGFileMonitorEvent = Integer; const { GFileMonitorEvent } G_FILE_MONITOR_EVENT_CHANGED: TGFileMonitorEvent = 0; G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: TGFileMonitorEvent = 1; G_FILE_MONITOR_EVENT_DELETED: TGFileMonitorEvent = 2; G_FILE_MONITOR_EVENT_CREATED: TGFileMonitorEvent = 3; G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: TGFileMonitorEvent = 4; G_FILE_MONITOR_EVENT_PRE_UNMOUNT: TGFileMonitorEvent = 5; G_FILE_MONITOR_EVENT_UNMOUNTED: TGFileMonitorEvent = 6; G_FILE_MONITOR_EVENT_MOVED: TGFileMonitorEvent = 7; type TGFileAttributeStatus = Integer; const { GFileAttributeStatus } G_FILE_ATTRIBUTE_STATUS_UNSET: TGFileAttributeStatus = 0; G_FILE_ATTRIBUTE_STATUS_SET: TGFileAttributeStatus = 1; G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING: TGFileAttributeStatus = 2; type TGFileType = Integer; const { GFileType } G_FILE_TYPE_UNKNOWN: TGFileType = 0; G_FILE_TYPE_REGULAR: TGFileType = 1; G_FILE_TYPE_DIRECTORY: TGFileType = 2; G_FILE_TYPE_SYMBOLIC_LINK: TGFileType = 3; G_FILE_TYPE_SPECIAL: TGFileType = 4; G_FILE_TYPE_SHORTCUT: TGFileType = 5; G_FILE_TYPE_MOUNTABLE: TGFileType = 6; type TGFileAttributeInfoFlags = Integer; const { GFileAttributeInfoFlags } G_FILE_ATTRIBUTE_INFO_NONE: TGFileAttributeInfoFlags = 0; G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE: TGFileAttributeInfoFlags = 1; G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED: TGFileAttributeInfoFlags = 2; type TGFilesystemPreviewType = Integer; const { GFilesystemPreviewType } G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS: TGFilesystemPreviewType = 0; G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL: TGFilesystemPreviewType = 1; G_FILESYSTEM_PREVIEW_TYPE_NEVER: TGFilesystemPreviewType = 2; type TGIOErrorEnum = Integer; const { GIOErrorEnum } G_IO_ERROR_FAILED: TGIOErrorEnum = 0; G_IO_ERROR_NOT_FOUND: TGIOErrorEnum = 1; G_IO_ERROR_EXISTS: TGIOErrorEnum = 2; G_IO_ERROR_IS_DIRECTORY: TGIOErrorEnum = 3; G_IO_ERROR_NOT_DIRECTORY: TGIOErrorEnum = 4; G_IO_ERROR_NOT_EMPTY: TGIOErrorEnum = 5; G_IO_ERROR_NOT_REGULAR_FILE: TGIOErrorEnum = 6; G_IO_ERROR_NOT_SYMBOLIC_LINK: TGIOErrorEnum = 7; G_IO_ERROR_NOT_MOUNTABLE_FILE: TGIOErrorEnum = 8; G_IO_ERROR_FILENAME_TOO_LONG: TGIOErrorEnum = 9; G_IO_ERROR_INVALID_FILENAME: TGIOErrorEnum = 10; G_IO_ERROR_TOO_MANY_LINKS: TGIOErrorEnum = 11; G_IO_ERROR_NO_SPACE: TGIOErrorEnum = 12; G_IO_ERROR_INVALID_ARGUMENT: TGIOErrorEnum = 13; G_IO_ERROR_PERMISSION_DENIED: TGIOErrorEnum = 14; G_IO_ERROR_NOT_SUPPORTED: TGIOErrorEnum = 15; G_IO_ERROR_NOT_MOUNTED: TGIOErrorEnum = 16; G_IO_ERROR_ALREADY_MOUNTED: TGIOErrorEnum = 17; G_IO_ERROR_CLOSED: TGIOErrorEnum = 18; G_IO_ERROR_CANCELLED: TGIOErrorEnum = 19; G_IO_ERROR_PENDING: TGIOErrorEnum = 20; G_IO_ERROR_READ_ONLY: TGIOErrorEnum = 21; G_IO_ERROR_CANT_CREATE_BACKUP: TGIOErrorEnum = 22; G_IO_ERROR_WRONG_ETAG: TGIOErrorEnum = 23; G_IO_ERROR_TIMED_OUT: TGIOErrorEnum = 24; G_IO_ERROR_WOULD_RECURSE: TGIOErrorEnum = 25; G_IO_ERROR_BUSY: TGIOErrorEnum = 26; G_IO_ERROR_WOULD_BLOCK: TGIOErrorEnum = 27; G_IO_ERROR_HOST_NOT_FOUND: TGIOErrorEnum = 28; G_IO_ERROR_WOULD_MERGE: TGIOErrorEnum = 29; G_IO_ERROR_FAILED_HANDLED: TGIOErrorEnum = 30; G_IO_ERROR_TOO_MANY_OPEN_FILES: TGIOErrorEnum = 31; G_IO_ERROR_NOT_INITIALIZED: TGIOErrorEnum = 32; G_IO_ERROR_ADDRESS_IN_USE: TGIOErrorEnum = 33; G_IO_ERROR_PARTIAL_INPUT: TGIOErrorEnum = 34; G_IO_ERROR_INVALID_DATA: TGIOErrorEnum = 35; G_IO_ERROR_DBUS_ERROR: TGIOErrorEnum = 36; G_IO_ERROR_HOST_UNREACHABLE: TGIOErrorEnum = 37; G_IO_ERROR_NETWORK_UNREACHABLE: TGIOErrorEnum = 38; G_IO_ERROR_CONNECTION_REFUSED: TGIOErrorEnum = 39; G_IO_ERROR_PROXY_FAILED: TGIOErrorEnum = 40; G_IO_ERROR_PROXY_AUTH_FAILED: TGIOErrorEnum = 41; G_IO_ERROR_PROXY_NEED_AUTH: TGIOErrorEnum = 42; G_IO_ERROR_PROXY_NOT_ALLOWED: TGIOErrorEnum = 43; G_IO_ERROR_BROKEN_PIPE: TGIOErrorEnum = 44; type TGIOModuleScopeFlags = Integer; const { GIOModuleScopeFlags } G_IO_MODULE_SCOPE_NONE: TGIOModuleScopeFlags = 0; G_IO_MODULE_SCOPE_BLOCK_DUPLICATES: TGIOModuleScopeFlags = 1; type TGSocketFamily = Integer; const { GSocketFamily } G_SOCKET_FAMILY_INVALID: TGSocketFamily = 0; G_SOCKET_FAMILY_UNIX: TGSocketFamily = 1; G_SOCKET_FAMILY_IPV4: TGSocketFamily = 2; G_SOCKET_FAMILY_IPV6: TGSocketFamily = 10; type TGResolverRecordType = Integer; const { GResolverRecordType } G_RESOLVER_RECORD_SRV: TGResolverRecordType = 1; G_RESOLVER_RECORD_MX: TGResolverRecordType = 2; G_RESOLVER_RECORD_TXT: TGResolverRecordType = 3; G_RESOLVER_RECORD_SOA: TGResolverRecordType = 4; G_RESOLVER_RECORD_NS: TGResolverRecordType = 5; type TGResolverError = Integer; const { GResolverError } G_RESOLVER_ERROR_NOT_FOUND: TGResolverError = 0; G_RESOLVER_ERROR_TEMPORARY_FAILURE: TGResolverError = 1; G_RESOLVER_ERROR_INTERNAL: TGResolverError = 2; type TGResourceLookupFlags = Integer; const { GResourceLookupFlags } G_RESOURCE_LOOKUP_FLAGS_NONE: TGResourceLookupFlags = 0; type TGResourceError = Integer; const { GResourceError } G_RESOURCE_ERROR_NOT_FOUND: TGResourceError = 0; G_RESOURCE_ERROR_INTERNAL: TGResourceError = 1; type TGResourceFlags = Integer; const { GResourceFlags } G_RESOURCE_FLAGS_NONE: TGResourceFlags = 0; G_RESOURCE_FLAGS_COMPRESSED: TGResourceFlags = 1; type TGSettingsBindFlags = Integer; const { GSettingsBindFlags } G_SETTINGS_BIND_DEFAULT: TGSettingsBindFlags = 0; G_SETTINGS_BIND_GET: TGSettingsBindFlags = 1; G_SETTINGS_BIND_SET: TGSettingsBindFlags = 2; G_SETTINGS_BIND_NO_SENSITIVITY: TGSettingsBindFlags = 4; G_SETTINGS_BIND_GET_NO_CHANGES: TGSettingsBindFlags = 8; G_SETTINGS_BIND_INVERT_BOOLEAN: TGSettingsBindFlags = 16; type TGSocketType = Integer; const { GSocketType } G_SOCKET_TYPE_INVALID: TGSocketType = 0; G_SOCKET_TYPE_STREAM: TGSocketType = 1; G_SOCKET_TYPE_DATAGRAM: TGSocketType = 2; G_SOCKET_TYPE_SEQPACKET: TGSocketType = 3; type TGSocketProtocol = Integer; const { GSocketProtocol } G_SOCKET_PROTOCOL_UNKNOWN: TGSocketProtocol = -1; G_SOCKET_PROTOCOL_DEFAULT: TGSocketProtocol = 0; G_SOCKET_PROTOCOL_TCP: TGSocketProtocol = 6; G_SOCKET_PROTOCOL_UDP: TGSocketProtocol = 17; G_SOCKET_PROTOCOL_SCTP: TGSocketProtocol = 132; type TGTlsCertificateFlags = Integer; const { GTlsCertificateFlags } G_TLS_CERTIFICATE_UNKNOWN_CA: TGTlsCertificateFlags = 1; G_TLS_CERTIFICATE_BAD_IDENTITY: TGTlsCertificateFlags = 2; G_TLS_CERTIFICATE_NOT_ACTIVATED: TGTlsCertificateFlags = 4; G_TLS_CERTIFICATE_EXPIRED: TGTlsCertificateFlags = 8; G_TLS_CERTIFICATE_REVOKED: TGTlsCertificateFlags = 16; G_TLS_CERTIFICATE_INSECURE: TGTlsCertificateFlags = 32; G_TLS_CERTIFICATE_GENERIC_ERROR: TGTlsCertificateFlags = 64; G_TLS_CERTIFICATE_VALIDATE_ALL: TGTlsCertificateFlags = 127; type TGSocketClientEvent = Integer; const { GSocketClientEvent } G_SOCKET_CLIENT_RESOLVING: TGSocketClientEvent = 0; G_SOCKET_CLIENT_RESOLVED: TGSocketClientEvent = 1; G_SOCKET_CLIENT_CONNECTING: TGSocketClientEvent = 2; G_SOCKET_CLIENT_CONNECTED: TGSocketClientEvent = 3; G_SOCKET_CLIENT_PROXY_NEGOTIATING: TGSocketClientEvent = 4; G_SOCKET_CLIENT_PROXY_NEGOTIATED: TGSocketClientEvent = 5; G_SOCKET_CLIENT_TLS_HANDSHAKING: TGSocketClientEvent = 6; G_SOCKET_CLIENT_TLS_HANDSHAKED: TGSocketClientEvent = 7; G_SOCKET_CLIENT_COMPLETE: TGSocketClientEvent = 8; type TGSocketMsgFlags = Integer; const { GSocketMsgFlags } G_SOCKET_MSG_NONE: TGSocketMsgFlags = 0; G_SOCKET_MSG_OOB: TGSocketMsgFlags = 1; G_SOCKET_MSG_PEEK: TGSocketMsgFlags = 2; G_SOCKET_MSG_DONTROUTE: TGSocketMsgFlags = 4; type TGTestDBusFlags = Integer; const { GTestDBusFlags } G_TEST_DBUS_NONE: TGTestDBusFlags = 0; type TGTlsAuthenticationMode = Integer; const { GTlsAuthenticationMode } G_TLS_AUTHENTICATION_NONE: TGTlsAuthenticationMode = 0; G_TLS_AUTHENTICATION_REQUESTED: TGTlsAuthenticationMode = 1; G_TLS_AUTHENTICATION_REQUIRED: TGTlsAuthenticationMode = 2; type TGTlsDatabaseLookupFlags = Integer; const { GTlsDatabaseLookupFlags } G_TLS_DATABASE_LOOKUP_NONE: TGTlsDatabaseLookupFlags = 0; G_TLS_DATABASE_LOOKUP_KEYPAIR: TGTlsDatabaseLookupFlags = 1; type TGTlsDatabaseVerifyFlags = Integer; const { GTlsDatabaseVerifyFlags } G_TLS_DATABASE_VERIFY_NONE: TGTlsDatabaseVerifyFlags = 0; type TGTlsRehandshakeMode = Integer; const { GTlsRehandshakeMode } G_TLS_REHANDSHAKE_NEVER: TGTlsRehandshakeMode = 0; G_TLS_REHANDSHAKE_SAFELY: TGTlsRehandshakeMode = 1; G_TLS_REHANDSHAKE_UNSAFELY: TGTlsRehandshakeMode = 2; type TGTlsError = Integer; const { GTlsError } G_TLS_ERROR_UNAVAILABLE: TGTlsError = 0; G_TLS_ERROR_MISC: TGTlsError = 1; G_TLS_ERROR_BAD_CERTIFICATE: TGTlsError = 2; G_TLS_ERROR_NOT_TLS: TGTlsError = 3; G_TLS_ERROR_HANDSHAKE: TGTlsError = 4; G_TLS_ERROR_CERTIFICATE_REQUIRED: TGTlsError = 5; G_TLS_ERROR_EOF: TGTlsError = 6; type TGTlsInteractionResult = Integer; const { GTlsInteractionResult } G_TLS_INTERACTION_UNHANDLED: TGTlsInteractionResult = 0; G_TLS_INTERACTION_HANDLED: TGTlsInteractionResult = 1; G_TLS_INTERACTION_FAILED: TGTlsInteractionResult = 2; type TGTlsPasswordFlags = Integer; const { GTlsPasswordFlags } G_TLS_PASSWORD_NONE: TGTlsPasswordFlags = 0; G_TLS_PASSWORD_RETRY: TGTlsPasswordFlags = 2; G_TLS_PASSWORD_MANY_TRIES: TGTlsPasswordFlags = 4; G_TLS_PASSWORD_FINAL_TRY: TGTlsPasswordFlags = 8; type TGUnixSocketAddressType = Integer; const { GUnixSocketAddressType } G_UNIX_SOCKET_ADDRESS_INVALID: TGUnixSocketAddressType = 0; G_UNIX_SOCKET_ADDRESS_ANONYMOUS: TGUnixSocketAddressType = 1; G_UNIX_SOCKET_ADDRESS_PATH: TGUnixSocketAddressType = 2; G_UNIX_SOCKET_ADDRESS_ABSTRACT: TGUnixSocketAddressType = 3; G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED: TGUnixSocketAddressType = 4; type TGZlibCompressorFormat = Integer; const { GZlibCompressorFormat } G_ZLIB_COMPRESSOR_FORMAT_ZLIB: TGZlibCompressorFormat = 0; G_ZLIB_COMPRESSOR_FORMAT_GZIP: TGZlibCompressorFormat = 1; G_ZLIB_COMPRESSOR_FORMAT_RAW: TGZlibCompressorFormat = 2; type PPGAction = ^PGAction; PGAction = ^TGAction; TGAction = object end; PPGSimpleAction = ^PGSimpleAction; PGSimpleAction = ^TGSimpleAction; TGSimpleAction = object(TGObject) end; PPGActionEntry = ^PGActionEntry; PGActionEntry = ^TGActionEntry; TGActionEntry = record name: Pgchar; activate: procedure(action: PGSimpleAction; parameter: PGVariant; user_data: gpointer); cdecl; parameter_type: Pgchar; state: Pgchar; change_state: procedure(action: PGSimpleAction; value: PGVariant; user_data: gpointer); cdecl; padding: array [0..2] of gsize; end; PPGActionGroup = ^PGActionGroup; PGActionGroup = ^TGActionGroup; TGActionGroup = object action_added1: procedure(action_name: Pgchar); cdecl; action_enabled_changed1: procedure(action_name: Pgchar; enabled: gboolean); cdecl; action_removed1: procedure(action_name: Pgchar); cdecl; action_state_changed1: procedure(action_name: Pgchar; value: TGVariant); cdecl; end; PPGActionGroupInterface = ^PGActionGroupInterface; PGActionGroupInterface = ^TGActionGroupInterface; TGActionGroupInterface = object g_iface: TGTypeInterface; has_action: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; list_actions: function(action_group: PGActionGroup): PPgchar; cdecl; get_action_enabled: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; get_action_parameter_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; get_action_state_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; get_action_state_hint: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; get_action_state: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; change_action_state: procedure(action_group: PGActionGroup; action_name: Pgchar; value: PGVariant); cdecl; activate_action: procedure(action_group: PGActionGroup; action_name: Pgchar; parameter: PGVariant); cdecl; action_added: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; action_removed: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; action_enabled_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; enabled: gboolean); cdecl; action_state_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; state: PGVariant); cdecl; query_action: function(action_group: PGActionGroup; action_name: Pgchar; enabled: Pgboolean; parameter_type: PPGVariantType; state_type: PPGVariantType; state_hint: PPGVariant; state: PPGVariant): gboolean; cdecl; end; PPGActionInterface = ^PGActionInterface; PGActionInterface = ^TGActionInterface; TGActionInterface = object g_iface: TGTypeInterface; get_name: function(action: PGAction): Pgchar; cdecl; get_parameter_type: function(action: PGAction): PGVariantType; cdecl; get_state_type: function(action: PGAction): PGVariantType; cdecl; get_state_hint: function(action: PGAction): PGVariant; cdecl; get_enabled: function(action: PGAction): gboolean; cdecl; get_state: function(action: PGAction): PGVariant; cdecl; change_state: procedure(action: PGAction; value: PGVariant); cdecl; activate: procedure(action: PGAction; parameter: PGVariant); cdecl; end; PPGActionMap = ^PGActionMap; PGActionMap = ^TGActionMap; TGActionMap = object end; PPGActionMapInterface = ^PGActionMapInterface; PGActionMapInterface = ^TGActionMapInterface; TGActionMapInterface = object g_iface: TGTypeInterface; lookup_action: function(action_map: PGActionMap; action_name: Pgchar): PGAction; cdecl; add_action: procedure(action_map: PGActionMap; action: PGAction); cdecl; remove_action: procedure(action_map: PGActionMap; action_name: Pgchar); cdecl; end; PPGAppInfo = ^PGAppInfo; PGAppInfo = ^TGAppInfo; PPGAppInfoCreateFlags = ^PGAppInfoCreateFlags; PGAppInfoCreateFlags = ^TGAppInfoCreateFlags; PPGAppLaunchContext = ^PGAppLaunchContext; PGAppLaunchContext = ^TGAppLaunchContext; PPGIcon = ^PGIcon; PGIcon = ^TGIcon; TGAppInfo = object end; PPGAppLaunchContextPrivate = ^PGAppLaunchContextPrivate; PGAppLaunchContextPrivate = ^TGAppLaunchContextPrivate; TGAppLaunchContext = object(TGObject) priv: PGAppLaunchContextPrivate; end; TGIcon = object end; PPGAppInfoIface = ^PGAppInfoIface; PGAppInfoIface = ^TGAppInfoIface; TGAppInfoIface = object g_iface: TGTypeInterface; dup: function(appinfo: PGAppInfo): PGAppInfo; cdecl; equal: function(appinfo1: PGAppInfo; appinfo2: PGAppInfo): gboolean; cdecl; get_id: function(appinfo: PGAppInfo): Pgchar; cdecl; get_name: function(appinfo: PGAppInfo): Pgchar; cdecl; get_description: function(appinfo: PGAppInfo): Pgchar; cdecl; get_executable: function(appinfo: PGAppInfo): Pgchar; cdecl; get_icon: function(appinfo: PGAppInfo): PGIcon; cdecl; launch: function(appinfo: PGAppInfo; files: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; supports_uris: function(appinfo: PGAppInfo): gboolean; cdecl; supports_files: function(appinfo: PGAppInfo): gboolean; cdecl; launch_uris: function(appinfo: PGAppInfo; uris: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; should_show: function(appinfo: PGAppInfo): gboolean; cdecl; set_as_default_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; set_as_default_for_extension: function(appinfo: PGAppInfo; extension: Pgchar; error: PPGError): gboolean; cdecl; add_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; can_remove_supports_type: function(appinfo: PGAppInfo): gboolean; cdecl; remove_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; can_delete: function(appinfo: PGAppInfo): gboolean; cdecl; do_delete: function(appinfo: PGAppInfo): gboolean; cdecl; get_commandline: function(appinfo: PGAppInfo): Pgchar; cdecl; get_display_name: function(appinfo: PGAppInfo): Pgchar; cdecl; set_as_last_used_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; get_supported_types: function(appinfo: PGAppInfo): PPgchar; cdecl; end; TGAppLaunchContextPrivate = record end; PPGAppLaunchContextClass = ^PGAppLaunchContextClass; PGAppLaunchContextClass = ^TGAppLaunchContextClass; TGAppLaunchContextClass = object parent_class: TGObjectClass; get_display: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; get_startup_notify_id: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; launch_failed: procedure(context: PGAppLaunchContext; startup_notify_id: Pgchar); cdecl; launched: procedure(context: PGAppLaunchContext; info: PGAppInfo; platform_data: PGVariant); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; end; PPGApplication = ^PGApplication; PGApplication = ^TGApplication; PPGApplicationFlags = ^PGApplicationFlags; PGApplicationFlags = ^TGApplicationFlags; PPGDBusConnection = ^PGDBusConnection; PGDBusConnection = ^TGDBusConnection; PPGFile = ^PGFile; PGFile = ^TGFile; PPGCancellable = ^PGCancellable; PGCancellable = ^TGCancellable; PPGApplicationPrivate = ^PGApplicationPrivate; PGApplicationPrivate = ^TGApplicationPrivate; TGApplication = object(TGObject) priv: PGApplicationPrivate; end; PPGApplicationCommandLine = ^PGApplicationCommandLine; PGApplicationCommandLine = ^TGApplicationCommandLine; PPGInputStream = ^PGInputStream; PGInputStream = ^TGInputStream; PPGApplicationCommandLinePrivate = ^PGApplicationCommandLinePrivate; PGApplicationCommandLinePrivate = ^TGApplicationCommandLinePrivate; TGApplicationCommandLine = object(TGObject) priv: PGApplicationCommandLinePrivate; end; PPGAsyncResult = ^PGAsyncResult; PGAsyncResult = ^TGAsyncResult; PPGDBusConnectionFlags = ^PGDBusConnectionFlags; PGDBusConnectionFlags = ^TGDBusConnectionFlags; PPGDBusAuthObserver = ^PGDBusAuthObserver; PGDBusAuthObserver = ^TGDBusAuthObserver; PPGIOStream = ^PGIOStream; PGIOStream = ^TGIOStream; PPGAsyncReadyCallback = ^PGAsyncReadyCallback; PGAsyncReadyCallback = ^TGAsyncReadyCallback; TGAsyncReadyCallback = procedure(source_object: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; PPGDBusMessageFilterFunction = ^PGDBusMessageFilterFunction; PGDBusMessageFilterFunction = ^TGDBusMessageFilterFunction; PPGDBusMessage = ^PGDBusMessage; PGDBusMessage = ^TGDBusMessage; TGDBusMessageFilterFunction = function(connection: PGDBusConnection; message: PGDBusMessage; incoming: gboolean; user_data: gpointer): PGDBusMessage; cdecl; PPGDBusCallFlags = ^PGDBusCallFlags; PGDBusCallFlags = ^TGDBusCallFlags; PPGUnixFDList = ^PGUnixFDList; PGUnixFDList = ^TGUnixFDList; PPGMenuModel = ^PGMenuModel; PGMenuModel = ^TGMenuModel; PPGDBusCapabilityFlags = ^PGDBusCapabilityFlags; PGDBusCapabilityFlags = ^TGDBusCapabilityFlags; PPGCredentials = ^PGCredentials; PGCredentials = ^TGCredentials; PPGDBusInterfaceInfo = ^PGDBusInterfaceInfo; PGDBusInterfaceInfo = ^TGDBusInterfaceInfo; PPGDBusInterfaceVTable = ^PGDBusInterfaceVTable; PGDBusInterfaceVTable = ^TGDBusInterfaceVTable; PPGDBusSubtreeVTable = ^PGDBusSubtreeVTable; PGDBusSubtreeVTable = ^TGDBusSubtreeVTable; PPGDBusSubtreeFlags = ^PGDBusSubtreeFlags; PGDBusSubtreeFlags = ^TGDBusSubtreeFlags; PPGDBusSendMessageFlags = ^PGDBusSendMessageFlags; PGDBusSendMessageFlags = ^TGDBusSendMessageFlags; PPGDBusSignalFlags = ^PGDBusSignalFlags; PGDBusSignalFlags = ^TGDBusSignalFlags; PPGDBusSignalCallback = ^PGDBusSignalCallback; PGDBusSignalCallback = ^TGDBusSignalCallback; TGDBusSignalCallback = procedure(connection: PGDBusConnection; sender_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; signal_name: Pgchar; parameters: PGVariant; user_data: gpointer); cdecl; TGDBusConnection = object(TGObject) end; PPGFileIOStream = ^PGFileIOStream; PGFileIOStream = ^TGFileIOStream; PPGFileOutputStream = ^PGFileOutputStream; PGFileOutputStream = ^TGFileOutputStream; PPGFileCreateFlags = ^PGFileCreateFlags; PGFileCreateFlags = ^TGFileCreateFlags; PPGFileCopyFlags = ^PGFileCopyFlags; PGFileCopyFlags = ^TGFileCopyFlags; PPGFileProgressCallback = ^PGFileProgressCallback; PGFileProgressCallback = ^TGFileProgressCallback; TGFileProgressCallback = procedure(current_num_bytes: gint64; total_num_bytes: gint64; user_data: gpointer); cdecl; PPGMountUnmountFlags = ^PGMountUnmountFlags; PGMountUnmountFlags = ^TGMountUnmountFlags; PPGMountOperation = ^PGMountOperation; PGMountOperation = ^TGMountOperation; PPGFileEnumerator = ^PGFileEnumerator; PGFileEnumerator = ^TGFileEnumerator; PPGFileQueryInfoFlags = ^PGFileQueryInfoFlags; PGFileQueryInfoFlags = ^TGFileQueryInfoFlags; PPGMount = ^PGMount; PGMount = ^TGMount; PPGFileReadMoreCallback = ^PGFileReadMoreCallback; PGFileReadMoreCallback = ^TGFileReadMoreCallback; TGFileReadMoreCallback = function(file_contents: Pgchar; file_size: gint64; callback_data: gpointer): gboolean; cdecl; PPGFileMonitor = ^PGFileMonitor; PGFileMonitor = ^TGFileMonitor; PPGFileMonitorFlags = ^PGFileMonitorFlags; PGFileMonitorFlags = ^TGFileMonitorFlags; PPGMountMountFlags = ^PGMountMountFlags; PGMountMountFlags = ^TGMountMountFlags; PPGFileType = ^PGFileType; PGFileType = ^TGFileType; PPGFileInfo = ^PGFileInfo; PGFileInfo = ^TGFileInfo; PPGFileAttributeInfoList = ^PGFileAttributeInfoList; PGFileAttributeInfoList = ^TGFileAttributeInfoList; PPGFileInputStream = ^PGFileInputStream; PGFileInputStream = ^TGFileInputStream; PPGFileAttributeType = ^PGFileAttributeType; PGFileAttributeType = ^TGFileAttributeType; PPGDriveStartFlags = ^PGDriveStartFlags; PGDriveStartFlags = ^TGDriveStartFlags; TGFile = object end; PPGCancellablePrivate = ^PGCancellablePrivate; PGCancellablePrivate = ^TGCancellablePrivate; TGCancellable = object(TGObject) priv: PGCancellablePrivate; end; TGApplicationPrivate = record end; PPGApplicationClass = ^PGApplicationClass; PGApplicationClass = ^TGApplicationClass; TGApplicationClass = object parent_class: TGObjectClass; startup: procedure(application: PGApplication); cdecl; activate: procedure(application: PGApplication); cdecl; open: procedure(application: PGApplication; files: PPGFile; n_files: gint; hint: Pgchar); cdecl; command_line: function(application: PGApplication; command_line: PGApplicationCommandLine): gint; cdecl; local_command_line: function(application: PGApplication; arguments: PPPgchar; exit_status: Pgint): gboolean; cdecl; before_emit: procedure(application: PGApplication; platform_data: PGVariant); cdecl; after_emit: procedure(application: PGApplication; platform_data: PGVariant); cdecl; add_platform_data: procedure(application: PGApplication; builder: PGVariantBuilder); cdecl; quit_mainloop: procedure(application: PGApplication); cdecl; run_mainloop: procedure(application: PGApplication); cdecl; shutdown: procedure(application: PGApplication); cdecl; dbus_register: function(application: PGApplication; connection: PGDBusConnection; object_path: Pgchar; error: PPGError): gboolean; cdecl; dbus_unregister: procedure(application: PGApplication; connection: PGDBusConnection; object_path: Pgchar); cdecl; padding: array [0..8] of gpointer; end; PPGInputStreamPrivate = ^PGInputStreamPrivate; PGInputStreamPrivate = ^TGInputStreamPrivate; TGInputStream = object(TGObject) priv: PGInputStreamPrivate; end; TGApplicationCommandLinePrivate = record end; PPGApplicationCommandLineClass = ^PGApplicationCommandLineClass; PGApplicationCommandLineClass = ^TGApplicationCommandLineClass; TGApplicationCommandLineClass = object parent_class: TGObjectClass; print_literal: procedure(cmdline: PGApplicationCommandLine; message: Pgchar); cdecl; printerr_literal: procedure(cmdline: PGApplicationCommandLine; message: Pgchar); cdecl; get_stdin: function(cmdline: PGApplicationCommandLine): PGInputStream; cdecl; padding: array [0..10] of gpointer; end; PPGAskPasswordFlags = ^PGAskPasswordFlags; PGAskPasswordFlags = ^TGAskPasswordFlags; PPGAsyncInitable = ^PGAsyncInitable; PGAsyncInitable = ^TGAsyncInitable; TGAsyncInitable = object end; TGAsyncResult = object end; PPGAsyncInitableIface = ^PGAsyncInitableIface; PGAsyncInitableIface = ^TGAsyncInitableIface; TGAsyncInitableIface = object g_iface: TGTypeInterface; init_async: procedure(initable: PGAsyncInitable; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; init_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGAsyncResultIface = ^PGAsyncResultIface; PGAsyncResultIface = ^TGAsyncResultIface; TGAsyncResultIface = object g_iface: TGTypeInterface; get_user_data: function(res: PGAsyncResult): gpointer; cdecl; get_source_object: function(res: PGAsyncResult): PGObject; cdecl; is_tagged: function(res: PGAsyncResult; source_tag: gpointer): gboolean; cdecl; end; PPGSeekable = ^PGSeekable; PGSeekable = ^TGSeekable; TGSeekable = object end; PPGBufferedInputStream = ^PGBufferedInputStream; PGBufferedInputStream = ^TGBufferedInputStream; PPGFilterInputStream = ^PGFilterInputStream; PGFilterInputStream = ^TGFilterInputStream; TGFilterInputStream = object(TGInputStream) base_stream: PGInputStream; end; PPGBufferedInputStreamPrivate = ^PGBufferedInputStreamPrivate; PGBufferedInputStreamPrivate = ^TGBufferedInputStreamPrivate; TGBufferedInputStream = object(TGFilterInputStream) priv1: PGBufferedInputStreamPrivate; end; TGBufferedInputStreamPrivate = record end; PPGFilterInputStreamClass = ^PGFilterInputStreamClass; PGFilterInputStreamClass = ^TGFilterInputStreamClass; PPGInputStreamClass = ^PGInputStreamClass; PGInputStreamClass = ^TGInputStreamClass; TGInputStreamClass = object parent_class: TGObjectClass; read_fn: function(stream: PGInputStream; buffer: Pgpointer; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; skip: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; close_fn: function(stream: PGInputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; read_async: procedure(stream: PGInputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; read_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; skip_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; skip_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; close_async: procedure(stream: PGInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFilterInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGBufferedInputStreamClass = ^PGBufferedInputStreamClass; PGBufferedInputStreamClass = ^TGBufferedInputStreamClass; TGBufferedInputStreamClass = object parent_class: TGFilterInputStreamClass; fill: function(stream: PGBufferedInputStream; count: gssize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; fill_async: procedure(stream: PGBufferedInputStream; count: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; fill_finish: function(stream: PGBufferedInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGOutputStream = ^PGOutputStream; PGOutputStream = ^TGOutputStream; PPGOutputStreamSpliceFlags = ^PGOutputStreamSpliceFlags; PGOutputStreamSpliceFlags = ^TGOutputStreamSpliceFlags; PPGOutputStreamPrivate = ^PGOutputStreamPrivate; PGOutputStreamPrivate = ^TGOutputStreamPrivate; TGOutputStream = object(TGObject) priv: PGOutputStreamPrivate; end; PPGBufferedOutputStream = ^PGBufferedOutputStream; PGBufferedOutputStream = ^TGBufferedOutputStream; PPGFilterOutputStream = ^PGFilterOutputStream; PGFilterOutputStream = ^TGFilterOutputStream; TGFilterOutputStream = object(TGOutputStream) base_stream: PGOutputStream; end; PPGBufferedOutputStreamPrivate = ^PGBufferedOutputStreamPrivate; PGBufferedOutputStreamPrivate = ^TGBufferedOutputStreamPrivate; TGBufferedOutputStream = object(TGFilterOutputStream) priv1: PGBufferedOutputStreamPrivate; end; TGBufferedOutputStreamPrivate = record end; PPGFilterOutputStreamClass = ^PGFilterOutputStreamClass; PGFilterOutputStreamClass = ^TGFilterOutputStreamClass; PPGOutputStreamClass = ^PGOutputStreamClass; PGOutputStreamClass = ^TGOutputStreamClass; TGOutputStreamClass = object parent_class: TGObjectClass; write_fn: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; splice: function(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; cancellable: PGCancellable; error: PPGError): gssize; cdecl; flush: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; close_fn: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; write_async: procedure(stream: PGOutputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; write_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; splice_async: procedure(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; splice_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; flush_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; flush_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; close_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; end; TGFilterOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGBufferedOutputStreamClass = ^PGBufferedOutputStreamClass; PGBufferedOutputStreamClass = ^TGBufferedOutputStreamClass; TGBufferedOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; TGBusAcquiredCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; TGBusNameAcquiredCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; TGBusNameAppearedCallback = procedure(connection: PGDBusConnection; name: Pgchar; name_owner: Pgchar; user_data: gpointer); cdecl; TGBusNameLostCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; PPGBusNameOwnerFlags = ^PGBusNameOwnerFlags; PGBusNameOwnerFlags = ^TGBusNameOwnerFlags; TGBusNameVanishedCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; PPGBusNameWatcherFlags = ^PGBusNameWatcherFlags; PGBusNameWatcherFlags = ^TGBusNameWatcherFlags; PPGBusType = ^PGBusType; PGBusType = ^TGBusType; TGCancellablePrivate = record end; PPGCancellableClass = ^PGCancellableClass; PGCancellableClass = ^TGCancellableClass; TGCancellableClass = object parent_class: TGObjectClass; cancelled: procedure(cancellable: PGCancellable); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGCancellableSourceFunc = function(cancellable: PGCancellable; user_data: gpointer): gboolean; cdecl; PPGConverter = ^PGConverter; PGConverter = ^TGConverter; PPGConverterResult = ^PGConverterResult; PGConverterResult = ^TGConverterResult; PPGConverterFlags = ^PGConverterFlags; PGConverterFlags = ^TGConverterFlags; TGConverter = object end; PPGInitable = ^PGInitable; PGInitable = ^TGInitable; TGInitable = object end; PPGCharsetConverter = ^PGCharsetConverter; PGCharsetConverter = ^TGCharsetConverter; TGCharsetConverter = object(TGObject) end; PPGCharsetConverterClass = ^PGCharsetConverterClass; PGCharsetConverterClass = ^TGCharsetConverterClass; TGCharsetConverterClass = object parent_class: TGObjectClass; end; PPGConverterIface = ^PGConverterIface; PGConverterIface = ^TGConverterIface; TGConverterIface = object g_iface: TGTypeInterface; convert: function(converter: PGConverter; inbuf: Pguint8; inbuf_size: gsize; outbuf: Pgpointer; outbuf_size: gsize; flags: TGConverterFlags; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): TGConverterResult; cdecl; reset: procedure(converter: PGConverter); cdecl; end; PPGPollableInputStream = ^PGPollableInputStream; PGPollableInputStream = ^TGPollableInputStream; TGPollableInputStream = object end; PPGConverterInputStream = ^PGConverterInputStream; PGConverterInputStream = ^TGConverterInputStream; PPGConverterInputStreamPrivate = ^PGConverterInputStreamPrivate; PGConverterInputStreamPrivate = ^TGConverterInputStreamPrivate; TGConverterInputStream = object(TGFilterInputStream) priv1: PGConverterInputStreamPrivate; end; TGConverterInputStreamPrivate = record end; PPGConverterInputStreamClass = ^PGConverterInputStreamClass; PGConverterInputStreamClass = ^TGConverterInputStreamClass; TGConverterInputStreamClass = object parent_class: TGFilterInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGPollableOutputStream = ^PGPollableOutputStream; PGPollableOutputStream = ^TGPollableOutputStream; TGPollableOutputStream = object end; PPGConverterOutputStream = ^PGConverterOutputStream; PGConverterOutputStream = ^TGConverterOutputStream; PPGConverterOutputStreamPrivate = ^PGConverterOutputStreamPrivate; PGConverterOutputStreamPrivate = ^TGConverterOutputStreamPrivate; TGConverterOutputStream = object(TGFilterOutputStream) priv1: PGConverterOutputStreamPrivate; end; TGConverterOutputStreamPrivate = record end; PPGConverterOutputStreamClass = ^PGConverterOutputStreamClass; PGConverterOutputStreamClass = ^TGConverterOutputStreamClass; TGConverterOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGCredentialsType = ^PGCredentialsType; PGCredentialsType = ^TGCredentialsType; TGCredentials = object(TGObject) end; PPGCredentialsClass = ^PGCredentialsClass; PGCredentialsClass = ^TGCredentialsClass; TGCredentialsClass = object end; PPGRemoteActionGroup = ^PGRemoteActionGroup; PGRemoteActionGroup = ^TGRemoteActionGroup; TGRemoteActionGroup = object end; PPGDBusActionGroup = ^PGDBusActionGroup; PGDBusActionGroup = ^TGDBusActionGroup; TGDBusActionGroup = object(TGObject) end; PPGDBusAnnotationInfo = ^PGDBusAnnotationInfo; PGDBusAnnotationInfo = ^TGDBusAnnotationInfo; TGDBusAnnotationInfo = object ref_count: gint; key: Pgchar; value: Pgchar; annotations: PGDBusAnnotationInfo; end; PPGDBusArgInfo = ^PGDBusArgInfo; PGDBusArgInfo = ^TGDBusArgInfo; TGDBusArgInfo = object ref_count: gint; name: Pgchar; signature: Pgchar; annotations: PGDBusAnnotationInfo; end; TGDBusAuthObserver = object(TGObject) end; PPGIOStreamSpliceFlags = ^PGIOStreamSpliceFlags; PGIOStreamSpliceFlags = ^TGIOStreamSpliceFlags; PPGIOStreamPrivate = ^PGIOStreamPrivate; PGIOStreamPrivate = ^TGIOStreamPrivate; TGIOStream = object(TGObject) priv: PGIOStreamPrivate; end; PPGUnixFDListPrivate = ^PGUnixFDListPrivate; PGUnixFDListPrivate = ^TGUnixFDListPrivate; TGUnixFDList = object(TGObject) priv: PGUnixFDListPrivate; end; PPGMenuAttributeIter = ^PGMenuAttributeIter; PGMenuAttributeIter = ^TGMenuAttributeIter; PPGMenuLinkIter = ^PGMenuLinkIter; PGMenuLinkIter = ^TGMenuLinkIter; PPGMenuModelPrivate = ^PGMenuModelPrivate; PGMenuModelPrivate = ^TGMenuModelPrivate; TGMenuModel = object(TGObject) priv: PGMenuModelPrivate; end; PPGDBusMethodInfo = ^PGDBusMethodInfo; PGDBusMethodInfo = ^TGDBusMethodInfo; PPGDBusPropertyInfo = ^PGDBusPropertyInfo; PGDBusPropertyInfo = ^TGDBusPropertyInfo; PPGDBusSignalInfo = ^PGDBusSignalInfo; PGDBusSignalInfo = ^TGDBusSignalInfo; TGDBusInterfaceInfo = object ref_count: gint; name: Pgchar; methods: PGDBusMethodInfo; signals: PGDBusSignalInfo; properties: PGDBusPropertyInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusInterfaceMethodCallFunc = ^PGDBusInterfaceMethodCallFunc; PGDBusInterfaceMethodCallFunc = ^TGDBusInterfaceMethodCallFunc; PPGDBusMethodInvocation = ^PGDBusMethodInvocation; PGDBusMethodInvocation = ^TGDBusMethodInvocation; TGDBusInterfaceMethodCallFunc = procedure(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; invocation: PGDBusMethodInvocation; user_data: gpointer); cdecl; PPGDBusInterfaceGetPropertyFunc = ^PGDBusInterfaceGetPropertyFunc; PGDBusInterfaceGetPropertyFunc = ^TGDBusInterfaceGetPropertyFunc; TGDBusInterfaceGetPropertyFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; property_name: Pgchar; error: PPGError; user_data: gpointer): PGVariant; cdecl; PPGDBusInterfaceSetPropertyFunc = ^PGDBusInterfaceSetPropertyFunc; PGDBusInterfaceSetPropertyFunc = ^TGDBusInterfaceSetPropertyFunc; TGDBusInterfaceSetPropertyFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; property_name: Pgchar; value: PGVariant; error: PPGError; user_data: gpointer): gboolean; cdecl; TGDBusInterfaceVTable = record method_call: TGDBusInterfaceMethodCallFunc; get_property: TGDBusInterfaceGetPropertyFunc; set_property: TGDBusInterfaceSetPropertyFunc; padding: array [0..7] of gpointer; end; PPGDBusSubtreeEnumerateFunc = ^PGDBusSubtreeEnumerateFunc; PGDBusSubtreeEnumerateFunc = ^TGDBusSubtreeEnumerateFunc; TGDBusSubtreeEnumerateFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; user_data: gpointer): PPgchar; cdecl; PPGDBusSubtreeIntrospectFunc = ^PGDBusSubtreeIntrospectFunc; PGDBusSubtreeIntrospectFunc = ^TGDBusSubtreeIntrospectFunc; TGDBusSubtreeIntrospectFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; node: Pgchar; user_data: gpointer): PPGDBusInterfaceInfo; cdecl; PPGDBusSubtreeDispatchFunc = ^PGDBusSubtreeDispatchFunc; PGDBusSubtreeDispatchFunc = ^TGDBusSubtreeDispatchFunc; TGDBusSubtreeDispatchFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; node: Pgchar; out_user_data: Pgpointer; user_data: gpointer): PGDBusInterfaceVTable; cdecl; TGDBusSubtreeVTable = record enumerate: TGDBusSubtreeEnumerateFunc; introspect: TGDBusSubtreeIntrospectFunc; dispatch: TGDBusSubtreeDispatchFunc; padding: array [0..7] of gpointer; end; PPGDBusMessageByteOrder = ^PGDBusMessageByteOrder; PGDBusMessageByteOrder = ^TGDBusMessageByteOrder; PPGDBusMessageFlags = ^PGDBusMessageFlags; PGDBusMessageFlags = ^TGDBusMessageFlags; PPGDBusMessageHeaderField = ^PGDBusMessageHeaderField; PGDBusMessageHeaderField = ^TGDBusMessageHeaderField; PPGDBusMessageType = ^PGDBusMessageType; PGDBusMessageType = ^TGDBusMessageType; TGDBusMessage = object(TGObject) end; PPGDBusErrorEntry = ^PGDBusErrorEntry; PGDBusErrorEntry = ^TGDBusErrorEntry; TGDBusErrorEntry = record error_code: gint; dbus_error_name: Pgchar; end; PPGDBusError = ^PGDBusError; PGDBusError = ^TGDBusError; PPGDBusObject = ^PGDBusObject; PGDBusObject = ^TGDBusObject; PPGDBusInterface = ^PGDBusInterface; PGDBusInterface = ^TGDBusInterface; TGDBusInterface = object end; TGDBusObject = object interface_added: procedure(interface_: TGDBusInterface); cdecl; interface_removed: procedure(interface_: TGDBusInterface); cdecl; end; PPGDBusInterfaceIface = ^PGDBusInterfaceIface; PGDBusInterfaceIface = ^TGDBusInterfaceIface; TGDBusInterfaceIface = object parent_iface: TGTypeInterface; get_info: function(interface_: PGDBusInterface): PGDBusInterfaceInfo; cdecl; get_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; set_object: procedure(interface_: PGDBusInterface; object_: PGDBusObject); cdecl; dup_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; end; TGDBusMethodInfo = object ref_count: gint; name: Pgchar; in_args: PGDBusArgInfo; out_args: PGDBusArgInfo; annotations: PGDBusAnnotationInfo; end; TGDBusSignalInfo = object ref_count: gint; name: Pgchar; args: PGDBusArgInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusPropertyInfoFlags = ^PGDBusPropertyInfoFlags; PGDBusPropertyInfoFlags = ^TGDBusPropertyInfoFlags; TGDBusPropertyInfo = object ref_count: gint; name: Pgchar; signature: Pgchar; flags: TGDBusPropertyInfoFlags; annotations: PGDBusAnnotationInfo; end; TGDBusMethodInvocation = object(TGObject) end; PPGDBusInterfaceSkeleton = ^PGDBusInterfaceSkeleton; PGDBusInterfaceSkeleton = ^TGDBusInterfaceSkeleton; PPGDBusInterfaceSkeletonFlags = ^PGDBusInterfaceSkeletonFlags; PGDBusInterfaceSkeletonFlags = ^TGDBusInterfaceSkeletonFlags; PPGDBusInterfaceSkeletonPrivate = ^PGDBusInterfaceSkeletonPrivate; PGDBusInterfaceSkeletonPrivate = ^TGDBusInterfaceSkeletonPrivate; TGDBusInterfaceSkeleton = object(TGObject) priv: PGDBusInterfaceSkeletonPrivate; end; TGDBusInterfaceSkeletonPrivate = record end; PPGDBusInterfaceSkeletonClass = ^PGDBusInterfaceSkeletonClass; PGDBusInterfaceSkeletonClass = ^TGDBusInterfaceSkeletonClass; TGDBusInterfaceSkeletonClass = object parent_class: TGObjectClass; get_info: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceInfo; cdecl; get_vtable: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceVTable; cdecl; get_properties: function(interface_: PGDBusInterfaceSkeleton): PGVariant; cdecl; flush: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; vfunc_padding: array [0..7] of gpointer; g_authorize_method: function(interface_: PGDBusInterfaceSkeleton; invocation: PGDBusMethodInvocation): gboolean; cdecl; signal_padding: array [0..7] of gpointer; end; PPGDBusMenuModel = ^PGDBusMenuModel; PGDBusMenuModel = ^TGDBusMenuModel; TGDBusMenuModel = object(TGMenuModel) end; PPGDBusNodeInfo = ^PGDBusNodeInfo; PGDBusNodeInfo = ^TGDBusNodeInfo; TGDBusNodeInfo = object ref_count: gint; path: Pgchar; interfaces: PGDBusInterfaceInfo; nodes: PGDBusNodeInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusObjectIface = ^PGDBusObjectIface; PGDBusObjectIface = ^TGDBusObjectIface; TGDBusObjectIface = object parent_iface: TGTypeInterface; get_object_path: function(object_: PGDBusObject): Pgchar; cdecl; get_interfaces: function(object_: PGDBusObject): PGList; cdecl; get_interface: function(object_: PGDBusObject; interface_name: Pgchar): PGDBusInterface; cdecl; interface_added: procedure(object_: PGDBusObject; interface_: PGDBusInterface); cdecl; interface_removed: procedure(object_: PGDBusObject; interface_: PGDBusInterface); cdecl; end; PPGDBusObjectManager = ^PGDBusObjectManager; PGDBusObjectManager = ^TGDBusObjectManager; TGDBusObjectManager = object interface_added: procedure(object_: TGDBusObject; interface_: TGDBusInterface); cdecl; interface_removed: procedure(object_: TGDBusObject; interface_: TGDBusInterface); cdecl; object_added: procedure(object_: TGDBusObject); cdecl; object_removed: procedure(object_: TGDBusObject); cdecl; end; PPGDBusObjectManagerClient = ^PGDBusObjectManagerClient; PGDBusObjectManagerClient = ^TGDBusObjectManagerClient; PPGDBusObjectManagerClientFlags = ^PGDBusObjectManagerClientFlags; PGDBusObjectManagerClientFlags = ^TGDBusObjectManagerClientFlags; PPGDBusProxyTypeFunc = ^PGDBusProxyTypeFunc; PGDBusProxyTypeFunc = ^TGDBusProxyTypeFunc; TGDBusProxyTypeFunc = function(manager: PGDBusObjectManagerClient; object_path: Pgchar; interface_name: Pgchar; user_data: gpointer): TGType; cdecl; PPGDBusObjectManagerClientPrivate = ^PGDBusObjectManagerClientPrivate; PGDBusObjectManagerClientPrivate = ^TGDBusObjectManagerClientPrivate; TGDBusObjectManagerClient = object(TGObject) priv: PGDBusObjectManagerClientPrivate; end; PPGDBusObjectProxy = ^PGDBusObjectProxy; PGDBusObjectProxy = ^TGDBusObjectProxy; PPGDBusObjectProxyPrivate = ^PGDBusObjectProxyPrivate; PGDBusObjectProxyPrivate = ^TGDBusObjectProxyPrivate; TGDBusObjectProxy = object(TGObject) priv: PGDBusObjectProxyPrivate; end; PPGDBusProxy = ^PGDBusProxy; PGDBusProxy = ^TGDBusProxy; PPGDBusProxyFlags = ^PGDBusProxyFlags; PGDBusProxyFlags = ^TGDBusProxyFlags; PPGDBusProxyPrivate = ^PGDBusProxyPrivate; PGDBusProxyPrivate = ^TGDBusProxyPrivate; TGDBusProxy = object(TGObject) priv: PGDBusProxyPrivate; end; TGDBusObjectManagerClientPrivate = record end; PPGDBusObjectManagerClientClass = ^PGDBusObjectManagerClientClass; PGDBusObjectManagerClientClass = ^TGDBusObjectManagerClientClass; TGDBusObjectManagerClientClass = object parent_class: TGObjectClass; interface_proxy_signal: procedure(manager: PGDBusObjectManagerClient; object_proxy: PGDBusObjectProxy; interface_proxy: PGDBusProxy; sender_name: Pgchar; signal_name: Pgchar; parameters: PGVariant); cdecl; interface_proxy_properties_changed: procedure(manager: PGDBusObjectManagerClient; object_proxy: PGDBusObjectProxy; interface_proxy: PGDBusProxy; changed_properties: PGVariant; invalidated_properties: PPgchar); cdecl; padding: array [0..7] of gpointer; end; PPGDBusObjectManagerIface = ^PGDBusObjectManagerIface; PGDBusObjectManagerIface = ^TGDBusObjectManagerIface; TGDBusObjectManagerIface = object parent_iface: TGTypeInterface; get_object_path: function(manager: PGDBusObjectManager): Pgchar; cdecl; get_objects: function(manager: PGDBusObjectManager): PGList; cdecl; get_object: function(manager: PGDBusObjectManager; object_path: Pgchar): PGDBusObject; cdecl; get_interface: function(manager: PGDBusObjectManager; object_path: Pgchar; interface_name: Pgchar): PGDBusInterface; cdecl; object_added: procedure(manager: PGDBusObjectManager; object_: PGDBusObject); cdecl; object_removed: procedure(manager: PGDBusObjectManager; object_: PGDBusObject); cdecl; interface_added: procedure(manager: PGDBusObjectManager; object_: PGDBusObject; interface_: PGDBusInterface); cdecl; interface_removed: procedure(manager: PGDBusObjectManager; object_: PGDBusObject; interface_: PGDBusInterface); cdecl; end; PPGDBusObjectManagerServer = ^PGDBusObjectManagerServer; PGDBusObjectManagerServer = ^TGDBusObjectManagerServer; PPGDBusObjectSkeleton = ^PGDBusObjectSkeleton; PGDBusObjectSkeleton = ^TGDBusObjectSkeleton; PPGDBusObjectManagerServerPrivate = ^PGDBusObjectManagerServerPrivate; PGDBusObjectManagerServerPrivate = ^TGDBusObjectManagerServerPrivate; TGDBusObjectManagerServer = object(TGObject) priv: PGDBusObjectManagerServerPrivate; end; PPGDBusObjectSkeletonPrivate = ^PGDBusObjectSkeletonPrivate; PGDBusObjectSkeletonPrivate = ^TGDBusObjectSkeletonPrivate; TGDBusObjectSkeleton = object(TGObject) priv: PGDBusObjectSkeletonPrivate; end; TGDBusObjectManagerServerPrivate = record end; PPGDBusObjectManagerServerClass = ^PGDBusObjectManagerServerClass; PGDBusObjectManagerServerClass = ^TGDBusObjectManagerServerClass; TGDBusObjectManagerServerClass = object parent_class: TGObjectClass; padding: array [0..7] of gpointer; end; TGDBusObjectProxyPrivate = record end; PPGDBusObjectProxyClass = ^PGDBusObjectProxyClass; PGDBusObjectProxyClass = ^TGDBusObjectProxyClass; TGDBusObjectProxyClass = object parent_class: TGObjectClass; padding: array [0..7] of gpointer; end; TGDBusObjectSkeletonPrivate = record end; PPGDBusObjectSkeletonClass = ^PGDBusObjectSkeletonClass; PGDBusObjectSkeletonClass = ^TGDBusObjectSkeletonClass; TGDBusObjectSkeletonClass = object parent_class: TGObjectClass; authorize_method: function(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton; invocation: PGDBusMethodInvocation): gboolean; cdecl; padding: array [0..7] of gpointer; end; TGDBusProxyPrivate = record end; PPGDBusProxyClass = ^PGDBusProxyClass; PGDBusProxyClass = ^TGDBusProxyClass; TGDBusProxyClass = object parent_class: TGObjectClass; g_properties_changed: procedure(proxy: PGDBusProxy; changed_properties: PGVariant; invalidated_properties: PPgchar); cdecl; g_signal: procedure(proxy: PGDBusProxy; sender_name: Pgchar; signal_name: Pgchar; parameters: PGVariant); cdecl; padding: array [0..31] of gpointer; end; PPGDBusServer = ^PGDBusServer; PGDBusServer = ^TGDBusServer; PPGDBusServerFlags = ^PGDBusServerFlags; PGDBusServerFlags = ^TGDBusServerFlags; TGDBusServer = object(TGObject) end; PPGDataInputStream = ^PGDataInputStream; PGDataInputStream = ^TGDataInputStream; PPGDataStreamByteOrder = ^PGDataStreamByteOrder; PGDataStreamByteOrder = ^TGDataStreamByteOrder; PPGDataStreamNewlineType = ^PGDataStreamNewlineType; PGDataStreamNewlineType = ^TGDataStreamNewlineType; PPGDataInputStreamPrivate = ^PGDataInputStreamPrivate; PGDataInputStreamPrivate = ^TGDataInputStreamPrivate; TGDataInputStream = object(TGBufferedInputStream) priv2: PGDataInputStreamPrivate; end; TGDataInputStreamPrivate = record end; PPGDataInputStreamClass = ^PGDataInputStreamClass; PGDataInputStreamClass = ^TGDataInputStreamClass; TGDataInputStreamClass = object parent_class: TGBufferedInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGDataOutputStream = ^PGDataOutputStream; PGDataOutputStream = ^TGDataOutputStream; PPGDataOutputStreamPrivate = ^PGDataOutputStreamPrivate; PGDataOutputStreamPrivate = ^TGDataOutputStreamPrivate; TGDataOutputStream = object(TGFilterOutputStream) priv1: PGDataOutputStreamPrivate; end; TGDataOutputStreamPrivate = record end; PPGDataOutputStreamClass = ^PGDataOutputStreamClass; PGDataOutputStreamClass = ^TGDataOutputStreamClass; TGDataOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGDesktopAppInfo = ^PGDesktopAppInfo; PGDesktopAppInfo = ^TGDesktopAppInfo; PPGDesktopAppLaunchCallback = ^PGDesktopAppLaunchCallback; PGDesktopAppLaunchCallback = ^TGDesktopAppLaunchCallback; TGDesktopAppLaunchCallback = procedure(appinfo: PGDesktopAppInfo; pid: TGPid; user_data: gpointer); cdecl; TGDesktopAppInfo = object(TGObject) end; PPGDesktopAppInfoClass = ^PGDesktopAppInfoClass; PGDesktopAppInfoClass = ^TGDesktopAppInfoClass; TGDesktopAppInfoClass = object parent_class: TGObjectClass; end; PPGDesktopAppInfoLookup = ^PGDesktopAppInfoLookup; PGDesktopAppInfoLookup = ^TGDesktopAppInfoLookup; TGDesktopAppInfoLookup = object end; PPGDesktopAppInfoLookupIface = ^PGDesktopAppInfoLookupIface; PGDesktopAppInfoLookupIface = ^TGDesktopAppInfoLookupIface; TGDesktopAppInfoLookupIface = object g_iface: TGTypeInterface; get_default_for_uri_scheme: function(lookup: PGDesktopAppInfoLookup; uri_scheme: Pgchar): PGAppInfo; cdecl; end; PPGDrive = ^PGDrive; PGDrive = ^TGDrive; PPGDriveStartStopType = ^PGDriveStartStopType; PGDriveStartStopType = ^TGDriveStartStopType; TGDrive = object changed: procedure; cdecl; disconnected: procedure; cdecl; eject_button: procedure; cdecl; stop_button: procedure; cdecl; end; PPGPasswordSave = ^PGPasswordSave; PGPasswordSave = ^TGPasswordSave; PPGMountOperationResult = ^PGMountOperationResult; PGMountOperationResult = ^TGMountOperationResult; PPGMountOperationPrivate = ^PGMountOperationPrivate; PGMountOperationPrivate = ^TGMountOperationPrivate; TGMountOperation = object(TGObject) priv: PGMountOperationPrivate; end; PPGDriveIface = ^PGDriveIface; PGDriveIface = ^TGDriveIface; TGDriveIface = object g_iface: TGTypeInterface; changed: procedure(drive: PGDrive); cdecl; disconnected: procedure(drive: PGDrive); cdecl; eject_button: procedure(drive: PGDrive); cdecl; get_name: function(drive: PGDrive): Pgchar; cdecl; get_icon: function(drive: PGDrive): PGIcon; cdecl; has_volumes: function(drive: PGDrive): gboolean; cdecl; get_volumes: function(drive: PGDrive): PGList; cdecl; is_media_removable: function(drive: PGDrive): gboolean; cdecl; has_media: function(drive: PGDrive): gboolean; cdecl; is_media_check_automatic: function(drive: PGDrive): gboolean; cdecl; can_eject: function(drive: PGDrive): gboolean; cdecl; can_poll_for_media: function(drive: PGDrive): gboolean; cdecl; eject: procedure(drive: PGDrive; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; poll_for_media: procedure(drive: PGDrive; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; poll_for_media_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_identifier: function(drive: PGDrive; kind: Pgchar): Pgchar; cdecl; enumerate_identifiers: function(drive: PGDrive): PPgchar; cdecl; get_start_stop_type: function(drive: PGDrive): TGDriveStartStopType; cdecl; can_start: function(drive: PGDrive): gboolean; cdecl; can_start_degraded: function(drive: PGDrive): gboolean; cdecl; start: procedure(drive: PGDrive; flags: TGDriveStartFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; start_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; can_stop: function(drive: PGDrive): gboolean; cdecl; stop: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; stop_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; stop_button: procedure(drive: PGDrive); cdecl; eject_with_operation: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_sort_key: function(drive: PGDrive): Pgchar; cdecl; get_symbolic_icon: function(drive: PGDrive): PGIcon; cdecl; end; PPGEmblem = ^PGEmblem; PGEmblem = ^TGEmblem; PPGEmblemOrigin = ^PGEmblemOrigin; PGEmblemOrigin = ^TGEmblemOrigin; TGEmblem = object(TGObject) end; PPGEmblemClass = ^PGEmblemClass; PGEmblemClass = ^TGEmblemClass; TGEmblemClass = object end; PPGEmblemedIcon = ^PGEmblemedIcon; PGEmblemedIcon = ^TGEmblemedIcon; PPGEmblemedIconPrivate = ^PGEmblemedIconPrivate; PGEmblemedIconPrivate = ^TGEmblemedIconPrivate; TGEmblemedIcon = object(TGObject) priv: PGEmblemedIconPrivate; end; TGEmblemedIconPrivate = record end; PPGEmblemedIconClass = ^PGEmblemedIconClass; PGEmblemedIconClass = ^TGEmblemedIconClass; TGEmblemedIconClass = object parent_class: TGObjectClass; end; PPGFileIOStreamPrivate = ^PGFileIOStreamPrivate; PGFileIOStreamPrivate = ^TGFileIOStreamPrivate; TGFileIOStream = object(TGIOStream) priv1: PGFileIOStreamPrivate; end; PPGFileOutputStreamPrivate = ^PGFileOutputStreamPrivate; PGFileOutputStreamPrivate = ^TGFileOutputStreamPrivate; TGFileOutputStream = object(TGOutputStream) priv1: PGFileOutputStreamPrivate; end; PPGFileEnumeratorPrivate = ^PGFileEnumeratorPrivate; PGFileEnumeratorPrivate = ^TGFileEnumeratorPrivate; TGFileEnumerator = object(TGObject) priv: PGFileEnumeratorPrivate; end; PPGVolume = ^PGVolume; PGVolume = ^TGVolume; TGMount = object changed: procedure; cdecl; pre_unmount: procedure; cdecl; unmounted: procedure; cdecl; end; PPGFileMonitorEvent = ^PGFileMonitorEvent; PGFileMonitorEvent = ^TGFileMonitorEvent; PPGFileMonitorPrivate = ^PGFileMonitorPrivate; PGFileMonitorPrivate = ^TGFileMonitorPrivate; TGFileMonitor = object(TGObject) priv: PGFileMonitorPrivate; end; PPGFileAttributeStatus = ^PGFileAttributeStatus; PGFileAttributeStatus = ^TGFileAttributeStatus; PPGFileAttributeMatcher = ^PGFileAttributeMatcher; PGFileAttributeMatcher = ^TGFileAttributeMatcher; TGFileInfo = object(TGObject) end; PPGFileAttributeInfoFlags = ^PGFileAttributeInfoFlags; PGFileAttributeInfoFlags = ^TGFileAttributeInfoFlags; PPGFileAttributeInfo = ^PGFileAttributeInfo; PGFileAttributeInfo = ^TGFileAttributeInfo; TGFileAttributeInfoList = object infos: PGFileAttributeInfo; n_infos: gint; end; PPGFileInputStreamPrivate = ^PGFileInputStreamPrivate; PGFileInputStreamPrivate = ^TGFileInputStreamPrivate; TGFileInputStream = object(TGInputStream) priv1: PGFileInputStreamPrivate; end; TGFileAttributeInfo = record name: Pgchar; type_: TGFileAttributeType; flags: TGFileAttributeInfoFlags; end; TGFileAttributeMatcher = object end; PPGFileDescriptorBased = ^PGFileDescriptorBased; PGFileDescriptorBased = ^TGFileDescriptorBased; TGFileDescriptorBased = object end; PPGFileDescriptorBasedIface = ^PGFileDescriptorBasedIface; PGFileDescriptorBasedIface = ^TGFileDescriptorBasedIface; TGFileDescriptorBasedIface = object g_iface: TGTypeInterface; get_fd: function(fd_based: PGFileDescriptorBased): gint; cdecl; end; TGFileEnumeratorPrivate = record end; PPGFileEnumeratorClass = ^PGFileEnumeratorClass; PGFileEnumeratorClass = ^TGFileEnumeratorClass; TGFileEnumeratorClass = object parent_class: TGObjectClass; next_file: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; close_fn: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; next_files_async: procedure(enumerator: PGFileEnumerator; num_files: gint; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; next_files_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): PGList; cdecl; close_async: procedure(enumerator: PGFileEnumerator; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; TGFileIOStreamPrivate = record end; PPGIOStreamClass = ^PGIOStreamClass; PGIOStreamClass = ^TGIOStreamClass; TGIOStreamClass = object parent_class: TGObjectClass; get_input_stream: function(stream: PGIOStream): PGInputStream; cdecl; get_output_stream: function(stream: PGIOStream): PGOutputStream; cdecl; close_fn: function(stream: PGIOStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; close_async: procedure(stream: PGIOStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGIOStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; _g_reserved10: procedure; cdecl; end; PPGFileIOStreamClass = ^PGFileIOStreamClass; PGFileIOStreamClass = ^TGFileIOStreamClass; TGFileIOStreamClass = object parent_class: TGIOStreamClass; tell: function(stream: PGFileIOStream): gint64; cdecl; can_seek: function(stream: PGFileIOStream): gboolean; cdecl; seek: function(stream: PGFileIOStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(stream: PGFileIOStream): gboolean; cdecl; truncate_fn: function(stream: PGFileIOStream; size: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileIOStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileIOStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileIOStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; get_etag: function(stream: PGFileIOStream): Pgchar; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGLoadableIcon = ^PGLoadableIcon; PGLoadableIcon = ^TGLoadableIcon; TGLoadableIcon = object end; PPGFileIcon = ^PGFileIcon; PGFileIcon = ^TGFileIcon; TGFileIcon = object(TGObject) end; PPGFileIconClass = ^PGFileIconClass; PGFileIconClass = ^TGFileIconClass; TGFileIconClass = object end; PPGFileIface = ^PGFileIface; PGFileIface = ^TGFileIface; TGFileIface = object g_iface: TGTypeInterface; dup: function(file_: PGFile): PGFile; cdecl; hash: function(file_: PGFile): guint; cdecl; equal: function(file1: PGFile; file2: PGFile): gboolean; cdecl; is_native: function(file_: PGFile): gboolean; cdecl; has_uri_scheme: function(file_: PGFile; uri_scheme: Pgchar): gboolean; cdecl; get_uri_scheme: function(file_: PGFile): Pgchar; cdecl; get_basename: function(file_: PGFile): Pgchar; cdecl; get_path: function(file_: PGFile): Pgchar; cdecl; get_uri: function(file_: PGFile): Pgchar; cdecl; get_parse_name: function(file_: PGFile): Pgchar; cdecl; get_parent: function(file_: PGFile): PGFile; cdecl; prefix_matches: function(prefix: PGFile; file_: PGFile): gboolean; cdecl; get_relative_path: function(parent: PGFile; descendant: PGFile): Pgchar; cdecl; resolve_relative_path: function(file_: PGFile; relative_path: Pgchar): PGFile; cdecl; get_child_for_display_name: function(file_: PGFile; display_name: Pgchar; error: PPGError): PGFile; cdecl; enumerate_children: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileEnumerator; cdecl; enumerate_children_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; enumerate_children_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileEnumerator; cdecl; query_info: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; query_filesystem_info: function(file_: PGFile; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_filesystem_info_async: procedure(file_: PGFile; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_filesystem_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; find_enclosing_mount: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGMount; cdecl; find_enclosing_mount_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; find_enclosing_mount_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGMount; cdecl; set_display_name: function(file_: PGFile; display_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGFile; cdecl; set_display_name_async: procedure(file_: PGFile; display_name: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; set_display_name_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFile; cdecl; query_settable_attributes: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; _query_settable_attributes_async: procedure; cdecl; _query_settable_attributes_finish: procedure; cdecl; query_writable_namespaces: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; _query_writable_namespaces_async: procedure; cdecl; _query_writable_namespaces_finish: procedure; cdecl; set_attribute: function(file_: PGFile; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; set_attributes_from_info: function(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; set_attributes_async: procedure(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; set_attributes_finish: function(file_: PGFile; result_: PGAsyncResult; info: PPGFileInfo; error: PPGError): gboolean; cdecl; read_fn: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileInputStream; cdecl; read_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; read_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInputStream; cdecl; append_to: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; append_to_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; append_to_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; create: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; create_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; create_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; replace: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; replace_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; replace_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; delete_file: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; delete_file_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; delete_file_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; trash: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _trash_async: procedure; cdecl; _trash_finish: procedure; cdecl; make_directory: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _make_directory_async: procedure; cdecl; _make_directory_finish: procedure; cdecl; make_symbolic_link: function(file_: PGFile; symlink_value: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _make_symbolic_link_async: procedure; cdecl; _make_symbolic_link_finish: procedure; cdecl; copy: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; copy_async: procedure(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; io_priority: gint; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; copy_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): gboolean; cdecl; move: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; _move_async: procedure; cdecl; _move_finish: procedure; cdecl; mount_mountable: procedure(file_: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): PGFile; cdecl; unmount_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; mount_enclosing_volume: procedure(location: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_enclosing_volume_finish: function(location: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; monitor_dir: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; monitor_file: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; open_readwrite: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; open_readwrite_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; open_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; create_readwrite: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; create_readwrite_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; create_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; replace_readwrite: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; replace_readwrite_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; replace_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; start_mountable: procedure(file_: PGFile; flags: TGDriveStartFlags; start_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; start_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; stop_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; stop_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; supports_thread_contexts: gboolean; unmount_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; poll_mountable: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; poll_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGFileInfoClass = ^PGFileInfoClass; PGFileInfoClass = ^TGFileInfoClass; TGFileInfoClass = object end; TGFileInputStreamPrivate = record end; PPGFileInputStreamClass = ^PGFileInputStreamClass; PGFileInputStreamClass = ^TGFileInputStreamClass; TGFileInputStreamClass = object parent_class: TGInputStreamClass; tell: function(stream: PGFileInputStream): gint64; cdecl; can_seek: function(stream: PGFileInputStream): gboolean; cdecl; seek: function(stream: PGFileInputStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileInputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileInputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileInputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFileMonitorPrivate = record end; PPGFileMonitorClass = ^PGFileMonitorClass; PGFileMonitorClass = ^TGFileMonitorClass; TGFileMonitorClass = object parent_class: TGObjectClass; changed: procedure(monitor: PGFileMonitor; file_: PGFile; other_file: PGFile; event_type: TGFileMonitorEvent); cdecl; cancel: function(monitor: PGFileMonitor): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFileOutputStreamPrivate = record end; PPGFileOutputStreamClass = ^PGFileOutputStreamClass; PGFileOutputStreamClass = ^TGFileOutputStreamClass; TGFileOutputStreamClass = object parent_class: TGOutputStreamClass; tell: function(stream: PGFileOutputStream): gint64; cdecl; can_seek: function(stream: PGFileOutputStream): gboolean; cdecl; seek: function(stream: PGFileOutputStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(stream: PGFileOutputStream): gboolean; cdecl; truncate_fn: function(stream: PGFileOutputStream; size: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileOutputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileOutputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileOutputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; get_etag: function(stream: PGFileOutputStream): Pgchar; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGFilenameCompleter = ^PGFilenameCompleter; PGFilenameCompleter = ^TGFilenameCompleter; TGFilenameCompleter = object(TGObject) end; PPGFilenameCompleterClass = ^PGFilenameCompleterClass; PGFilenameCompleterClass = ^TGFilenameCompleterClass; TGFilenameCompleterClass = object parent_class: TGObjectClass; got_completion_data: procedure(filename_completer: PGFilenameCompleter); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGFilesystemPreviewType = ^PGFilesystemPreviewType; PGFilesystemPreviewType = ^TGFilesystemPreviewType; PPGIOErrorEnum = ^PGIOErrorEnum; PGIOErrorEnum = ^TGIOErrorEnum; PPGIOExtension = ^PGIOExtension; PGIOExtension = ^TGIOExtension; TGIOExtension = object end; PPGIOExtensionPoint = ^PGIOExtensionPoint; PGIOExtensionPoint = ^TGIOExtensionPoint; TGIOExtensionPoint = object end; PPGIOModule = ^PGIOModule; PGIOModule = ^TGIOModule; TGIOModule = object(TGTypeModule) end; PPGIOModuleClass = ^PGIOModuleClass; PGIOModuleClass = ^TGIOModuleClass; TGIOModuleClass = object end; PPGIOModuleScope = ^PGIOModuleScope; PGIOModuleScope = ^TGIOModuleScope; PPGIOModuleScopeFlags = ^PGIOModuleScopeFlags; PGIOModuleScopeFlags = ^TGIOModuleScopeFlags; TGIOModuleScope = object end; PPGIOSchedulerJob = ^PGIOSchedulerJob; PGIOSchedulerJob = ^TGIOSchedulerJob; TGIOSchedulerJob = object end; TGIOSchedulerJobFunc = function(job: PGIOSchedulerJob; cancellable: PGCancellable; user_data: gpointer): gboolean; cdecl; TGIOStreamPrivate = record end; PPGIOStreamAdapter = ^PGIOStreamAdapter; PGIOStreamAdapter = ^TGIOStreamAdapter; TGIOStreamAdapter = record end; PPGIconIface = ^PGIconIface; PGIconIface = ^TGIconIface; TGIconIface = object g_iface: TGTypeInterface; hash: function(icon: PGIcon): guint; cdecl; equal: function(icon1: PGIcon; icon2: PGIcon): gboolean; cdecl; to_tokens: function(icon: PGIcon; tokens: Pgpointer; out_version: Pgint): gboolean; cdecl; from_tokens: function(tokens: PPgchar; num_tokens: gint; version: gint; error: PPGError): PGIcon; cdecl; end; PPGInetAddress = ^PGInetAddress; PGInetAddress = ^TGInetAddress; PPGSocketFamily = ^PGSocketFamily; PGSocketFamily = ^TGSocketFamily; PPGInetAddressPrivate = ^PGInetAddressPrivate; PGInetAddressPrivate = ^TGInetAddressPrivate; TGInetAddress = object(TGObject) priv: PGInetAddressPrivate; end; TGInetAddressPrivate = record end; PPGInetAddressClass = ^PGInetAddressClass; PGInetAddressClass = ^TGInetAddressClass; TGInetAddressClass = object parent_class: TGObjectClass; to_string: function(address: PGInetAddress): Pgchar; cdecl; to_bytes: function(address: PGInetAddress): Pguint8; cdecl; end; PPGInetAddressMask = ^PGInetAddressMask; PGInetAddressMask = ^TGInetAddressMask; PPGInetAddressMaskPrivate = ^PGInetAddressMaskPrivate; PGInetAddressMaskPrivate = ^TGInetAddressMaskPrivate; TGInetAddressMask = object(TGObject) priv: PGInetAddressMaskPrivate; end; TGInetAddressMaskPrivate = record end; PPGInetAddressMaskClass = ^PGInetAddressMaskClass; PGInetAddressMaskClass = ^TGInetAddressMaskClass; TGInetAddressMaskClass = object parent_class: TGObjectClass; end; PPGSocketConnectable = ^PGSocketConnectable; PGSocketConnectable = ^TGSocketConnectable; PPGSocketAddressEnumerator = ^PGSocketAddressEnumerator; PGSocketAddressEnumerator = ^TGSocketAddressEnumerator; TGSocketConnectable = object end; PPGSocketAddress = ^PGSocketAddress; PGSocketAddress = ^TGSocketAddress; TGSocketAddress = object(TGObject) end; PPGInetSocketAddress = ^PGInetSocketAddress; PGInetSocketAddress = ^TGInetSocketAddress; PPGInetSocketAddressPrivate = ^PGInetSocketAddressPrivate; PGInetSocketAddressPrivate = ^TGInetSocketAddressPrivate; TGInetSocketAddress = object(TGSocketAddress) priv: PGInetSocketAddressPrivate; end; TGInetSocketAddressPrivate = record end; PPGSocketAddressClass = ^PGSocketAddressClass; PGSocketAddressClass = ^TGSocketAddressClass; TGSocketAddressClass = object parent_class: TGObjectClass; get_family: function(address: PGSocketAddress): TGSocketFamily; cdecl; get_native_size: function(address: PGSocketAddress): gssize; cdecl; to_native: function(address: PGSocketAddress; dest: gpointer; destlen: gsize; error: PPGError): gboolean; cdecl; end; PPGInetSocketAddressClass = ^PGInetSocketAddressClass; PGInetSocketAddressClass = ^TGInetSocketAddressClass; TGInetSocketAddressClass = object parent_class: TGSocketAddressClass; end; PPGInitableIface = ^PGInitableIface; PGInitableIface = ^TGInitableIface; TGInitableIface = object g_iface: TGTypeInterface; init: function(initable: PGInitable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; end; TGInputStreamPrivate = record end; PPGInputVector = ^PGInputVector; PGInputVector = ^TGInputVector; TGInputVector = record buffer: gpointer; size: gsize; end; PPGLoadableIconIface = ^PGLoadableIconIface; PGLoadableIconIface = ^TGLoadableIconIface; TGLoadableIconIface = object g_iface: TGTypeInterface; load: function(icon: PGLoadableIcon; size: gint; type_: PPgchar; cancellable: PGCancellable; error: PPGError): PGInputStream; cdecl; load_async: procedure(icon: PGLoadableIcon; size: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; load_finish: function(icon: PGLoadableIcon; res: PGAsyncResult; type_: PPgchar; error: PPGError): PGInputStream; cdecl; end; PPGMemoryInputStream = ^PGMemoryInputStream; PGMemoryInputStream = ^TGMemoryInputStream; PPGMemoryInputStreamPrivate = ^PGMemoryInputStreamPrivate; PGMemoryInputStreamPrivate = ^TGMemoryInputStreamPrivate; TGMemoryInputStream = object(TGInputStream) priv1: PGMemoryInputStreamPrivate; end; TGMemoryInputStreamPrivate = record end; PPGMemoryInputStreamClass = ^PGMemoryInputStreamClass; PGMemoryInputStreamClass = ^TGMemoryInputStreamClass; TGMemoryInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGReallocFunc = function(data: gpointer; size: gsize): gpointer; cdecl; PPGMemoryOutputStream = ^PGMemoryOutputStream; PGMemoryOutputStream = ^TGMemoryOutputStream; PPGReallocFunc = ^PGReallocFunc; PGReallocFunc = ^TGReallocFunc; PPGMemoryOutputStreamPrivate = ^PGMemoryOutputStreamPrivate; PGMemoryOutputStreamPrivate = ^TGMemoryOutputStreamPrivate; TGMemoryOutputStream = object(TGOutputStream) priv1: PGMemoryOutputStreamPrivate; end; TGMemoryOutputStreamPrivate = record end; PPGMemoryOutputStreamClass = ^PGMemoryOutputStreamClass; PGMemoryOutputStreamClass = ^TGMemoryOutputStreamClass; TGMemoryOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGMenu = ^PGMenu; PGMenu = ^TGMenu; PPGMenuItem = ^PGMenuItem; PGMenuItem = ^TGMenuItem; TGMenu = object(TGMenuModel) end; TGMenuItem = object(TGObject) end; PPGMenuAttributeIterPrivate = ^PGMenuAttributeIterPrivate; PGMenuAttributeIterPrivate = ^TGMenuAttributeIterPrivate; TGMenuAttributeIter = object(TGObject) priv: PGMenuAttributeIterPrivate; end; TGMenuAttributeIterPrivate = record end; PPGMenuAttributeIterClass = ^PGMenuAttributeIterClass; PGMenuAttributeIterClass = ^TGMenuAttributeIterClass; TGMenuAttributeIterClass = object parent_class: TGObjectClass; get_next: function(iter: PGMenuAttributeIter; out_name: PPgchar; value: PPGVariant): gboolean; cdecl; end; PPGMenuLinkIterPrivate = ^PGMenuLinkIterPrivate; PGMenuLinkIterPrivate = ^TGMenuLinkIterPrivate; TGMenuLinkIter = object(TGObject) priv: PGMenuLinkIterPrivate; end; TGMenuLinkIterPrivate = record end; PPGMenuLinkIterClass = ^PGMenuLinkIterClass; PGMenuLinkIterClass = ^TGMenuLinkIterClass; TGMenuLinkIterClass = object parent_class: TGObjectClass; get_next: function(iter: PGMenuLinkIter; out_link: PPgchar; value: PPGMenuModel): gboolean; cdecl; end; TGMenuModelPrivate = record end; PPGMenuModelClass = ^PGMenuModelClass; PGMenuModelClass = ^TGMenuModelClass; TGMenuModelClass = object parent_class: TGObjectClass; is_mutable: function(model: PGMenuModel): gboolean; cdecl; get_n_items: function(model: PGMenuModel): gint; cdecl; get_item_attributes: procedure(model: PGMenuModel; item_index: gint; attributes: PPGHashTable); cdecl; iterate_item_attributes: function(model: PGMenuModel; item_index: gint): PGMenuAttributeIter; cdecl; get_item_attribute_value: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; get_item_links: procedure(model: PGMenuModel; item_index: gint; links: PPGHashTable); cdecl; iterate_item_links: function(model: PGMenuModel; item_index: gint): PGMenuLinkIter; cdecl; get_item_link: function(model: PGMenuModel; item_index: gint; link: Pgchar): PGMenuModel; cdecl; end; TGVolume = object changed: procedure; cdecl; removed: procedure; cdecl; end; PPGMountIface = ^PGMountIface; PGMountIface = ^TGMountIface; TGMountIface = object g_iface: TGTypeInterface; changed: procedure(mount: PGMount); cdecl; unmounted: procedure(mount: PGMount); cdecl; get_root: function(mount: PGMount): PGFile; cdecl; get_name: function(mount: PGMount): Pgchar; cdecl; get_icon: function(mount: PGMount): PGIcon; cdecl; get_uuid: function(mount: PGMount): Pgchar; cdecl; get_volume: function(mount: PGMount): PGVolume; cdecl; get_drive: function(mount: PGMount): PGDrive; cdecl; can_unmount: function(mount: PGMount): gboolean; cdecl; can_eject: function(mount: PGMount): gboolean; cdecl; unmount: procedure(mount: PGMount; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject: procedure(mount: PGMount; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; remount: procedure(mount: PGMount; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; remount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; guess_content_type: procedure(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; guess_content_type_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; guess_content_type_sync: function(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; pre_unmount: procedure(mount: PGMount); cdecl; unmount_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_default_location: function(mount: PGMount): PGFile; cdecl; get_sort_key: function(mount: PGMount): Pgchar; cdecl; get_symbolic_icon: function(mount: PGMount): PGIcon; cdecl; end; TGMountOperationPrivate = record end; PPGMountOperationClass = ^PGMountOperationClass; PGMountOperationClass = ^TGMountOperationClass; TGMountOperationClass = object parent_class: TGObjectClass; ask_password: procedure(op: PGMountOperation; message: Pgchar; default_user: Pgchar; default_domain: Pgchar; flags: TGAskPasswordFlags); cdecl; ask_question: procedure(op: PGMountOperation; message: Pgchar; choices: Pgchar); cdecl; reply: procedure(op: PGMountOperation; result_: TGMountOperationResult); cdecl; aborted: procedure(op: PGMountOperation); cdecl; show_processes: procedure(op: PGMountOperation; message: Pgchar; processes: Pgpointer; choices: Pgchar); cdecl; show_unmount_progress: procedure(op: PGMountOperation; message: Pgchar; time_left: gint64; bytes_left: gint64); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; end; PPGVolumeMonitor = ^PGVolumeMonitor; PGVolumeMonitor = ^TGVolumeMonitor; TGVolumeMonitor = object(TGObject) priv: gpointer; end; PPGNativeVolumeMonitor = ^PGNativeVolumeMonitor; PGNativeVolumeMonitor = ^TGNativeVolumeMonitor; TGNativeVolumeMonitor = object(TGVolumeMonitor) end; PPGVolumeMonitorClass = ^PGVolumeMonitorClass; PGVolumeMonitorClass = ^TGVolumeMonitorClass; TGVolumeMonitorClass = object parent_class: TGObjectClass; volume_added: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; volume_removed: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; volume_changed: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; mount_added: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_removed: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_pre_unmount: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_changed: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; drive_connected: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_disconnected: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_changed: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; is_supported: function: gboolean; cdecl; get_connected_drives: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_volumes: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_mounts: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_volume_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGVolume; cdecl; get_mount_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGMount; cdecl; adopt_orphan_mount: function(mount: PGMount; volume_monitor: PGVolumeMonitor): PGVolume; cdecl; drive_eject_button: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_stop_button: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGNativeVolumeMonitorClass = ^PGNativeVolumeMonitorClass; PGNativeVolumeMonitorClass = ^TGNativeVolumeMonitorClass; TGNativeVolumeMonitorClass = object parent_class: TGVolumeMonitorClass; get_mount_for_mount_path: function(mount_path: Pgchar; cancellable: PGCancellable): PGMount; cdecl; end; PPGNetworkAddress = ^PGNetworkAddress; PGNetworkAddress = ^TGNetworkAddress; PPGNetworkAddressPrivate = ^PGNetworkAddressPrivate; PGNetworkAddressPrivate = ^TGNetworkAddressPrivate; TGNetworkAddress = object(TGObject) priv: PGNetworkAddressPrivate; end; TGNetworkAddressPrivate = record end; PPGNetworkAddressClass = ^PGNetworkAddressClass; PGNetworkAddressClass = ^TGNetworkAddressClass; TGNetworkAddressClass = object parent_class: TGObjectClass; end; PPGNetworkMonitor = ^PGNetworkMonitor; PGNetworkMonitor = ^TGNetworkMonitor; TGNetworkMonitor = object network_changed: procedure(available: gboolean); cdecl; end; PPGNetworkMonitorInterface = ^PGNetworkMonitorInterface; PGNetworkMonitorInterface = ^TGNetworkMonitorInterface; TGNetworkMonitorInterface = object g_iface: TGTypeInterface; network_changed: procedure(monitor: PGNetworkMonitor; available: gboolean); cdecl; can_reach: function(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_reach_async: procedure(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; can_reach_finish: function(monitor: PGNetworkMonitor; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGNetworkService = ^PGNetworkService; PGNetworkService = ^TGNetworkService; PPGNetworkServicePrivate = ^PGNetworkServicePrivate; PGNetworkServicePrivate = ^TGNetworkServicePrivate; TGNetworkService = object(TGObject) priv: PGNetworkServicePrivate; end; TGNetworkServicePrivate = record end; PPGNetworkServiceClass = ^PGNetworkServiceClass; PGNetworkServiceClass = ^TGNetworkServiceClass; TGNetworkServiceClass = object parent_class: TGObjectClass; end; TGOutputStreamPrivate = record end; PPGOutputVector = ^PGOutputVector; PGOutputVector = ^TGOutputVector; TGOutputVector = record buffer: Pgpointer; size: gsize; end; PPGPermission = ^PGPermission; PGPermission = ^TGPermission; PPGPermissionPrivate = ^PGPermissionPrivate; PGPermissionPrivate = ^TGPermissionPrivate; TGPermission = object(TGObject) priv: PGPermissionPrivate; end; TGPermissionPrivate = record end; PPGPermissionClass = ^PGPermissionClass; PGPermissionClass = ^TGPermissionClass; TGPermissionClass = object parent_class: TGObjectClass; acquire: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; acquire_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; acquire_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; release: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; release_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; release_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; reserved: array [0..15] of gpointer; end; PPGPollableInputStreamInterface = ^PGPollableInputStreamInterface; PGPollableInputStreamInterface = ^TGPollableInputStreamInterface; TGPollableInputStreamInterface = object g_iface: TGTypeInterface; can_poll: function(stream: PGPollableInputStream): gboolean; cdecl; is_readable: function(stream: PGPollableInputStream): gboolean; cdecl; create_source: function(stream: PGPollableInputStream; cancellable: PGCancellable): PGSource; cdecl; read_nonblocking: function(stream: PGPollableInputStream; buffer: Pgpointer; count: gsize; error: PPGError): gssize; cdecl; end; PPGPollableOutputStreamInterface = ^PGPollableOutputStreamInterface; PGPollableOutputStreamInterface = ^TGPollableOutputStreamInterface; TGPollableOutputStreamInterface = object g_iface: TGTypeInterface; can_poll: function(stream: PGPollableOutputStream): gboolean; cdecl; is_writable: function(stream: PGPollableOutputStream): gboolean; cdecl; create_source: function(stream: PGPollableOutputStream; cancellable: PGCancellable): PGSource; cdecl; write_nonblocking: function(stream: PGPollableOutputStream; buffer: Pguint8; count: gsize; error: PPGError): gssize; cdecl; end; TGPollableSourceFunc = function(pollable_stream: PGObject; user_data: gpointer): gboolean; cdecl; PPGProxy = ^PGProxy; PGProxy = ^TGProxy; PPGProxyAddress = ^PGProxyAddress; PGProxyAddress = ^TGProxyAddress; TGProxy = object end; PPGProxyAddressPrivate = ^PGProxyAddressPrivate; PGProxyAddressPrivate = ^TGProxyAddressPrivate; TGProxyAddress = object(TGInetSocketAddress) priv1: PGProxyAddressPrivate; end; TGProxyAddressPrivate = record end; PPGProxyAddressClass = ^PGProxyAddressClass; PGProxyAddressClass = ^TGProxyAddressClass; TGProxyAddressClass = object parent_class: TGInetSocketAddressClass; end; PPGProxyResolver = ^PGProxyResolver; PGProxyResolver = ^TGProxyResolver; TGProxyResolver = object end; TGSocketAddressEnumerator = object(TGObject) end; PPGProxyAddressEnumeratorPrivate = ^PGProxyAddressEnumeratorPrivate; PGProxyAddressEnumeratorPrivate = ^TGProxyAddressEnumeratorPrivate; TGProxyAddressEnumeratorPrivate = record end; PPGProxyAddressEnumerator = ^PGProxyAddressEnumerator; PGProxyAddressEnumerator = ^TGProxyAddressEnumerator; TGProxyAddressEnumerator = object(TGSocketAddressEnumerator) priv: PGProxyAddressEnumeratorPrivate; end; PPGSocketAddressEnumeratorClass = ^PGSocketAddressEnumeratorClass; PGSocketAddressEnumeratorClass = ^TGSocketAddressEnumeratorClass; TGSocketAddressEnumeratorClass = object parent_class: TGObjectClass; next: function(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; error: PPGError): PGSocketAddress; cdecl; next_async: procedure(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; next_finish: function(enumerator: PGSocketAddressEnumerator; result_: PGAsyncResult; error: PPGError): PGSocketAddress; cdecl; end; PPGProxyAddressEnumeratorClass = ^PGProxyAddressEnumeratorClass; PGProxyAddressEnumeratorClass = ^TGProxyAddressEnumeratorClass; TGProxyAddressEnumeratorClass = object parent_class: TGSocketAddressEnumeratorClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; PPGProxyInterface = ^PGProxyInterface; PGProxyInterface = ^TGProxyInterface; TGProxyInterface = object g_iface: TGTypeInterface; connect: function(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; connect_async: procedure(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; connect_finish: function(proxy: PGProxy; result_: PGAsyncResult; error: PPGError): PGIOStream; cdecl; supports_hostname: function(proxy: PGProxy): gboolean; cdecl; end; PPGProxyResolverInterface = ^PGProxyResolverInterface; PGProxyResolverInterface = ^TGProxyResolverInterface; TGProxyResolverInterface = object g_iface: TGTypeInterface; is_supported: function(resolver: PGProxyResolver): gboolean; cdecl; lookup: function(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; lookup_async: procedure(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_finish: function(resolver: PGProxyResolver; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; end; PPGRemoteActionGroupInterface = ^PGRemoteActionGroupInterface; PGRemoteActionGroupInterface = ^TGRemoteActionGroupInterface; TGRemoteActionGroupInterface = object g_iface: TGTypeInterface; activate_action_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; parameter: PGVariant; platform_data: PGVariant); cdecl; change_action_state_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; value: PGVariant; platform_data: PGVariant); cdecl; end; PPGResolver = ^PGResolver; PGResolver = ^TGResolver; PPGResolverRecordType = ^PGResolverRecordType; PGResolverRecordType = ^TGResolverRecordType; PPGResolverPrivate = ^PGResolverPrivate; PGResolverPrivate = ^TGResolverPrivate; TGResolver = object(TGObject) priv: PGResolverPrivate; end; TGResolverPrivate = record end; PPGResolverClass = ^PGResolverClass; PGResolverClass = ^TGResolverClass; TGResolverClass = object parent_class: TGObjectClass; reload: procedure(resolver: PGResolver); cdecl; lookup_by_name: function(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_by_name_async: procedure(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_by_name_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; lookup_by_address: function(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; lookup_by_address_async: procedure(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_by_address_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): Pgchar; cdecl; lookup_service: function(resolver: PGResolver; rrname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_service_async: procedure(resolver: PGResolver; rrname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_service_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; lookup_records: function(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_records_async: procedure(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_records_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGResolverError = ^PGResolverError; PGResolverError = ^TGResolverError; PPGResource = ^PGResource; PGResource = ^TGResource; PPGResourceLookupFlags = ^PGResourceLookupFlags; PGResourceLookupFlags = ^TGResourceLookupFlags; TGResource = object end; PPGResourceError = ^PGResourceError; PGResourceError = ^TGResourceError; PPGResourceFlags = ^PGResourceFlags; PGResourceFlags = ^TGResourceFlags; PPGSeekableIface = ^PGSeekableIface; PGSeekableIface = ^TGSeekableIface; TGSeekableIface = object g_iface: TGTypeInterface; tell: function(seekable: PGSeekable): gint64; cdecl; can_seek: function(seekable: PGSeekable): gboolean; cdecl; seek: function(seekable: PGSeekable; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(seekable: PGSeekable): gboolean; cdecl; truncate_fn: function(seekable: PGSeekable; offset: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; end; PPGSettings = ^PGSettings; PGSettings = ^TGSettings; PPGSettingsSchema = ^PGSettingsSchema; PGSettingsSchema = ^TGSettingsSchema; PPGSettingsBackend = ^PGSettingsBackend; PGSettingsBackend = ^TGSettingsBackend; PPGSettingsBindFlags = ^PGSettingsBindFlags; PGSettingsBindFlags = ^TGSettingsBindFlags; PPGSettingsBindGetMapping = ^PGSettingsBindGetMapping; PGSettingsBindGetMapping = ^TGSettingsBindGetMapping; TGSettingsBindGetMapping = function(value: PGValue; variant: PGVariant; user_data: gpointer): gboolean; cdecl; PPGSettingsBindSetMapping = ^PGSettingsBindSetMapping; PGSettingsBindSetMapping = ^TGSettingsBindSetMapping; TGSettingsBindSetMapping = function(value: PGValue; expected_type: PGVariantType; user_data: gpointer): PGVariant; cdecl; PPGSettingsGetMapping = ^PGSettingsGetMapping; PGSettingsGetMapping = ^TGSettingsGetMapping; TGSettingsGetMapping = function(value: PGVariant; result_: Pgpointer; user_data: gpointer): gboolean; cdecl; PPGSettingsPrivate = ^PGSettingsPrivate; PGSettingsPrivate = ^TGSettingsPrivate; TGSettings = object(TGObject) priv: PGSettingsPrivate; end; TGSettingsSchema = object end; TGSettingsBackend = record end; TGSettingsPrivate = record end; PPGSettingsClass = ^PGSettingsClass; PGSettingsClass = ^TGSettingsClass; TGSettingsClass = object parent_class: TGObjectClass; writable_changed: procedure(settings: PGSettings; key: Pgchar); cdecl; changed: procedure(settings: PGSettings; key: Pgchar); cdecl; writable_change_event: function(settings: PGSettings; key: TGQuark): gboolean; cdecl; change_event: function(settings: PGSettings; keys: PGQuark; n_keys: gint): gboolean; cdecl; padding: array [0..19] of gpointer; end; PPGSettingsSchemaSource = ^PGSettingsSchemaSource; PGSettingsSchemaSource = ^TGSettingsSchemaSource; TGSettingsSchemaSource = object end; PPGSimpleActionGroup = ^PGSimpleActionGroup; PGSimpleActionGroup = ^TGSimpleActionGroup; PPGSimpleActionGroupPrivate = ^PGSimpleActionGroupPrivate; PGSimpleActionGroupPrivate = ^TGSimpleActionGroupPrivate; TGSimpleActionGroup = object(TGObject) priv: PGSimpleActionGroupPrivate; end; TGSimpleActionGroupPrivate = record end; PPGSimpleActionGroupClass = ^PGSimpleActionGroupClass; PGSimpleActionGroupClass = ^TGSimpleActionGroupClass; TGSimpleActionGroupClass = object parent_class: TGObjectClass; padding: array [0..11] of gpointer; end; PPGSimpleAsyncResult = ^PGSimpleAsyncResult; PGSimpleAsyncResult = ^TGSimpleAsyncResult; PPGSimpleAsyncThreadFunc = ^PGSimpleAsyncThreadFunc; PGSimpleAsyncThreadFunc = ^TGSimpleAsyncThreadFunc; TGSimpleAsyncThreadFunc = procedure(res: PGSimpleAsyncResult; object_: PGObject; cancellable: PGCancellable); cdecl; TGSimpleAsyncResult = object(TGObject) end; PPGSimpleAsyncResultClass = ^PGSimpleAsyncResultClass; PGSimpleAsyncResultClass = ^TGSimpleAsyncResultClass; TGSimpleAsyncResultClass = object end; PPGSimplePermission = ^PGSimplePermission; PGSimplePermission = ^TGSimplePermission; TGSimplePermission = object(TGPermission) end; PPGSimpleProxyResolver = ^PGSimpleProxyResolver; PGSimpleProxyResolver = ^TGSimpleProxyResolver; PPGSimpleProxyResolverPrivate = ^PGSimpleProxyResolverPrivate; PGSimpleProxyResolverPrivate = ^TGSimpleProxyResolverPrivate; TGSimpleProxyResolver = object(TGObject) priv: PGSimpleProxyResolverPrivate; end; TGSimpleProxyResolverPrivate = record end; PPGSimpleProxyResolverClass = ^PGSimpleProxyResolverClass; PGSimpleProxyResolverClass = ^TGSimpleProxyResolverClass; TGSimpleProxyResolverClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGSocket = ^PGSocket; PGSocket = ^TGSocket; PPGSocketType = ^PGSocketType; PGSocketType = ^TGSocketType; PPGSocketProtocol = ^PGSocketProtocol; PGSocketProtocol = ^TGSocketProtocol; PPGSocketConnection = ^PGSocketConnection; PGSocketConnection = ^TGSocketConnection; PPPGSocketControlMessage = ^PPGSocketControlMessage; PPGSocketControlMessage = ^PGSocketControlMessage; PGSocketControlMessage = ^TGSocketControlMessage; PPGSocketPrivate = ^PGSocketPrivate; PGSocketPrivate = ^TGSocketPrivate; TGSocket = object(TGObject) priv: PGSocketPrivate; end; PPGSocketConnectionPrivate = ^PGSocketConnectionPrivate; PGSocketConnectionPrivate = ^TGSocketConnectionPrivate; TGSocketConnection = object(TGIOStream) priv1: PGSocketConnectionPrivate; end; PPGSocketControlMessagePrivate = ^PGSocketControlMessagePrivate; PGSocketControlMessagePrivate = ^TGSocketControlMessagePrivate; TGSocketControlMessage = object(TGObject) priv: PGSocketControlMessagePrivate; end; TGSocketPrivate = record end; PPGSocketClass = ^PGSocketClass; PGSocketClass = ^TGSocketClass; TGSocketClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; _g_reserved10: procedure; cdecl; end; PPGSocketClient = ^PGSocketClient; PGSocketClient = ^TGSocketClient; PPGTlsCertificateFlags = ^PGTlsCertificateFlags; PGTlsCertificateFlags = ^TGTlsCertificateFlags; PPGSocketClientPrivate = ^PGSocketClientPrivate; PGSocketClientPrivate = ^TGSocketClientPrivate; TGSocketClient = object(TGObject) priv: PGSocketClientPrivate; end; PPGSocketClientEvent = ^PGSocketClientEvent; PGSocketClientEvent = ^TGSocketClientEvent; TGSocketClientPrivate = record end; PPGSocketClientClass = ^PGSocketClientClass; PGSocketClientClass = ^TGSocketClientClass; TGSocketClientClass = object parent_class: TGObjectClass; event: procedure(client: PGSocketClient; event: TGSocketClientEvent; connectable: PGSocketConnectable; connection: PGIOStream); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; end; PPGSocketConnectableIface = ^PGSocketConnectableIface; PGSocketConnectableIface = ^TGSocketConnectableIface; TGSocketConnectableIface = object g_iface: TGTypeInterface; enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; proxy_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; end; TGSocketConnectionPrivate = record end; PPGSocketConnectionClass = ^PGSocketConnectionClass; PGSocketConnectionClass = ^TGSocketConnectionClass; TGSocketConnectionClass = object parent_class: TGIOStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; TGSocketControlMessagePrivate = record end; PPGSocketControlMessageClass = ^PGSocketControlMessageClass; PGSocketControlMessageClass = ^TGSocketControlMessageClass; TGSocketControlMessageClass = object parent_class: TGObjectClass; get_size: function(message: PGSocketControlMessage): gsize; cdecl; get_level: function(message: PGSocketControlMessage): gint; cdecl; get_type: function(message: PGSocketControlMessage): gint; cdecl; serialize: procedure(message: PGSocketControlMessage; data: gpointer); cdecl; deserialize: function(level: gint; type_: gint; size: gsize; data: gpointer): PGSocketControlMessage; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGSocketListener = ^PGSocketListener; PGSocketListener = ^TGSocketListener; PPGSocketListenerPrivate = ^PGSocketListenerPrivate; PGSocketListenerPrivate = ^TGSocketListenerPrivate; TGSocketListener = object(TGObject) priv: PGSocketListenerPrivate; end; TGSocketListenerPrivate = record end; PPGSocketListenerClass = ^PGSocketListenerClass; PGSocketListenerClass = ^TGSocketListenerClass; TGSocketListenerClass = object parent_class: TGObjectClass; changed: procedure(listener: PGSocketListener); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGSocketMsgFlags = ^PGSocketMsgFlags; PGSocketMsgFlags = ^TGSocketMsgFlags; PPGSocketService = ^PGSocketService; PGSocketService = ^TGSocketService; PPGSocketServicePrivate = ^PGSocketServicePrivate; PGSocketServicePrivate = ^TGSocketServicePrivate; TGSocketService = object(TGSocketListener) priv1: PGSocketServicePrivate; end; TGSocketServicePrivate = record end; PPGSocketServiceClass = ^PGSocketServiceClass; PGSocketServiceClass = ^TGSocketServiceClass; TGSocketServiceClass = object parent_class: TGSocketListenerClass; incoming: function(service: PGSocketService; connection: PGSocketConnection; source_object: PGObject): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; TGSocketSourceFunc = function(socket: PGSocket; condition: TGIOCondition; user_data: gpointer): gboolean; cdecl; PPGSrvTarget = ^PGSrvTarget; PGSrvTarget = ^TGSrvTarget; TGSrvTarget = object end; PPGStaticResource = ^PGStaticResource; PGStaticResource = ^TGStaticResource; TGStaticResource = object data: Pguint8; data_len: gsize; resource: PGResource; next: PGStaticResource; padding: gpointer; end; PPGTask = ^PGTask; PGTask = ^TGTask; PPGTaskThreadFunc = ^PGTaskThreadFunc; PGTaskThreadFunc = ^TGTaskThreadFunc; TGTaskThreadFunc = procedure(task: PGTask; source_object: PGObject; task_data: gpointer; cancellable: PGCancellable); cdecl; TGTask = object(TGObject) end; PPGTaskClass = ^PGTaskClass; PGTaskClass = ^TGTaskClass; TGTaskClass = object end; PPGTcpConnection = ^PGTcpConnection; PGTcpConnection = ^TGTcpConnection; PPGTcpConnectionPrivate = ^PGTcpConnectionPrivate; PGTcpConnectionPrivate = ^TGTcpConnectionPrivate; TGTcpConnection = object(TGSocketConnection) priv2: PGTcpConnectionPrivate; end; TGTcpConnectionPrivate = record end; PPGTcpConnectionClass = ^PGTcpConnectionClass; PGTcpConnectionClass = ^TGTcpConnectionClass; TGTcpConnectionClass = object parent_class: TGSocketConnectionClass; end; PPGTcpWrapperConnection = ^PGTcpWrapperConnection; PGTcpWrapperConnection = ^TGTcpWrapperConnection; PPGTcpWrapperConnectionPrivate = ^PGTcpWrapperConnectionPrivate; PGTcpWrapperConnectionPrivate = ^TGTcpWrapperConnectionPrivate; TGTcpWrapperConnection = object(TGTcpConnection) priv3: PGTcpWrapperConnectionPrivate; end; TGTcpWrapperConnectionPrivate = record end; PPGTcpWrapperConnectionClass = ^PGTcpWrapperConnectionClass; PGTcpWrapperConnectionClass = ^TGTcpWrapperConnectionClass; TGTcpWrapperConnectionClass = object parent_class: TGTcpConnectionClass; end; PPGTestDBus = ^PGTestDBus; PGTestDBus = ^TGTestDBus; PPGTestDBusFlags = ^PGTestDBusFlags; PGTestDBusFlags = ^TGTestDBusFlags; TGTestDBus = object(TGObject) end; PPGThemedIcon = ^PGThemedIcon; PGThemedIcon = ^TGThemedIcon; TGThemedIcon = object(TGObject) end; PPGThemedIconClass = ^PGThemedIconClass; PGThemedIconClass = ^TGThemedIconClass; TGThemedIconClass = object end; PPGThreadedSocketService = ^PGThreadedSocketService; PGThreadedSocketService = ^TGThreadedSocketService; PPGThreadedSocketServicePrivate = ^PGThreadedSocketServicePrivate; PGThreadedSocketServicePrivate = ^TGThreadedSocketServicePrivate; TGThreadedSocketService = object(TGSocketService) priv2: PGThreadedSocketServicePrivate; end; TGThreadedSocketServicePrivate = record end; PPGThreadedSocketServiceClass = ^PGThreadedSocketServiceClass; PGThreadedSocketServiceClass = ^TGThreadedSocketServiceClass; TGThreadedSocketServiceClass = object parent_class: TGSocketServiceClass; run: function(service: PGThreadedSocketService; connection: PGSocketConnection; source_object: PGObject): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGTlsAuthenticationMode = ^PGTlsAuthenticationMode; PGTlsAuthenticationMode = ^TGTlsAuthenticationMode; PPGTlsBackend = ^PGTlsBackend; PGTlsBackend = ^TGTlsBackend; PPGTlsDatabase = ^PGTlsDatabase; PGTlsDatabase = ^TGTlsDatabase; TGTlsBackend = object end; PPGTlsCertificate = ^PGTlsCertificate; PGTlsCertificate = ^TGTlsCertificate; PPGTlsInteraction = ^PGTlsInteraction; PGTlsInteraction = ^TGTlsInteraction; PPGTlsDatabaseLookupFlags = ^PGTlsDatabaseLookupFlags; PGTlsDatabaseLookupFlags = ^TGTlsDatabaseLookupFlags; PPGTlsDatabaseVerifyFlags = ^PGTlsDatabaseVerifyFlags; PGTlsDatabaseVerifyFlags = ^TGTlsDatabaseVerifyFlags; PPGTlsDatabasePrivate = ^PGTlsDatabasePrivate; PGTlsDatabasePrivate = ^TGTlsDatabasePrivate; TGTlsDatabase = object(TGObject) priv: PGTlsDatabasePrivate; end; PPGTlsBackendInterface = ^PGTlsBackendInterface; PGTlsBackendInterface = ^TGTlsBackendInterface; TGTlsBackendInterface = object g_iface: TGTypeInterface; supports_tls: function(backend: PGTlsBackend): gboolean; cdecl; get_certificate_type: function: TGType; cdecl; get_client_connection_type: function: TGType; cdecl; get_server_connection_type: function: TGType; cdecl; get_file_database_type: function: TGType; cdecl; get_default_database: function(backend: PGTlsBackend): PGTlsDatabase; cdecl; end; PPGTlsCertificatePrivate = ^PGTlsCertificatePrivate; PGTlsCertificatePrivate = ^TGTlsCertificatePrivate; TGTlsCertificate = object(TGObject) priv: PGTlsCertificatePrivate; end; TGTlsCertificatePrivate = record end; PPGTlsCertificateClass = ^PGTlsCertificateClass; PGTlsCertificateClass = ^TGTlsCertificateClass; TGTlsCertificateClass = object parent_class: TGObjectClass; verify: function(cert: PGTlsCertificate; identity: PGSocketConnectable; trusted_ca: PGTlsCertificate): TGTlsCertificateFlags; cdecl; padding: array [0..7] of gpointer; end; PPGTlsClientConnection = ^PGTlsClientConnection; PGTlsClientConnection = ^TGTlsClientConnection; TGTlsClientConnection = object end; PPGTlsClientConnectionInterface = ^PGTlsClientConnectionInterface; PGTlsClientConnectionInterface = ^TGTlsClientConnectionInterface; TGTlsClientConnectionInterface = object g_iface: TGTypeInterface; end; PPGTlsConnection = ^PGTlsConnection; PGTlsConnection = ^TGTlsConnection; PPGTlsRehandshakeMode = ^PGTlsRehandshakeMode; PGTlsRehandshakeMode = ^TGTlsRehandshakeMode; PPGTlsConnectionPrivate = ^PGTlsConnectionPrivate; PGTlsConnectionPrivate = ^TGTlsConnectionPrivate; TGTlsConnection = object(TGIOStream) priv1: PGTlsConnectionPrivate; end; PPGTlsInteractionResult = ^PGTlsInteractionResult; PGTlsInteractionResult = ^TGTlsInteractionResult; PPGTlsPassword = ^PGTlsPassword; PGTlsPassword = ^TGTlsPassword; PPGTlsInteractionPrivate = ^PGTlsInteractionPrivate; PGTlsInteractionPrivate = ^TGTlsInteractionPrivate; TGTlsInteraction = object(TGObject) priv: PGTlsInteractionPrivate; end; TGTlsConnectionPrivate = record end; PPGTlsConnectionClass = ^PGTlsConnectionClass; PGTlsConnectionClass = ^TGTlsConnectionClass; TGTlsConnectionClass = object parent_class: TGIOStreamClass; accept_certificate: function(connection: PGTlsConnection; peer_cert: PGTlsCertificate; errors: TGTlsCertificateFlags): gboolean; cdecl; handshake: function(conn: PGTlsConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; handshake_async: procedure(conn: PGTlsConnection; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; handshake_finish: function(conn: PGTlsConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; padding: array [0..7] of gpointer; end; TGTlsDatabasePrivate = record end; PPGTlsDatabaseClass = ^PGTlsDatabaseClass; PGTlsDatabaseClass = ^TGTlsDatabaseClass; TGTlsDatabaseClass = object parent_class: TGObjectClass; verify_chain: function(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; error: PPGError): TGTlsCertificateFlags; cdecl; verify_chain_async: procedure(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; verify_chain_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): TGTlsCertificateFlags; cdecl; create_certificate_handle: function(self: PGTlsDatabase; certificate: PGTlsCertificate): Pgchar; cdecl; lookup_certificate_for_handle: function(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_for_handle_async: procedure(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificate_for_handle_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_issuer: function(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_issuer_async: procedure(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificate_issuer_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; lookup_certificates_issued_by: function(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_certificates_issued_by_async: procedure(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificates_issued_by_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGList; cdecl; padding: array [0..15] of gpointer; end; PPGTlsError = ^PGTlsError; PGTlsError = ^TGTlsError; PPGTlsFileDatabase = ^PGTlsFileDatabase; PGTlsFileDatabase = ^TGTlsFileDatabase; TGTlsFileDatabase = object end; PPGTlsFileDatabaseInterface = ^PGTlsFileDatabaseInterface; PGTlsFileDatabaseInterface = ^TGTlsFileDatabaseInterface; TGTlsFileDatabaseInterface = object g_iface: TGTypeInterface; padding: array [0..7] of gpointer; end; PPGTlsPasswordFlags = ^PGTlsPasswordFlags; PGTlsPasswordFlags = ^TGTlsPasswordFlags; PPGTlsPasswordPrivate = ^PGTlsPasswordPrivate; PGTlsPasswordPrivate = ^TGTlsPasswordPrivate; TGTlsPassword = object(TGObject) priv: PGTlsPasswordPrivate; end; TGTlsInteractionPrivate = record end; PPGTlsInteractionClass = ^PGTlsInteractionClass; PGTlsInteractionClass = ^TGTlsInteractionClass; TGTlsInteractionClass = object parent_class: TGObjectClass; ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; ask_password_async: procedure(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; ask_password_finish: function(interaction: PGTlsInteraction; result_: PGAsyncResult; error: PPGError): TGTlsInteractionResult; cdecl; padding: array [0..23] of gpointer; end; TGTlsPasswordPrivate = record end; PPGTlsPasswordClass = ^PGTlsPasswordClass; PGTlsPasswordClass = ^TGTlsPasswordClass; TGTlsPasswordClass = object parent_class: TGObjectClass; get_value: function(password: PGTlsPassword; length: Pgsize): Pguint8; cdecl; set_value: procedure(password: PGTlsPassword; value: Pguint8; length: gssize; destroy_: TGDestroyNotify); cdecl; get_default_warning: function(password: PGTlsPassword): Pgchar; cdecl; padding: array [0..3] of gpointer; end; PPGTlsServerConnection = ^PGTlsServerConnection; PGTlsServerConnection = ^TGTlsServerConnection; TGTlsServerConnection = object end; PPGTlsServerConnectionInterface = ^PGTlsServerConnectionInterface; PGTlsServerConnectionInterface = ^TGTlsServerConnectionInterface; TGTlsServerConnectionInterface = object g_iface: TGTypeInterface; end; PPGUnixConnection = ^PGUnixConnection; PGUnixConnection = ^TGUnixConnection; PPGUnixConnectionPrivate = ^PGUnixConnectionPrivate; PGUnixConnectionPrivate = ^TGUnixConnectionPrivate; TGUnixConnection = object(TGSocketConnection) priv2: PGUnixConnectionPrivate; end; TGUnixConnectionPrivate = record end; PPGUnixConnectionClass = ^PGUnixConnectionClass; PGUnixConnectionClass = ^TGUnixConnectionClass; TGUnixConnectionClass = object parent_class: TGSocketConnectionClass; end; PPGUnixCredentialsMessage = ^PGUnixCredentialsMessage; PGUnixCredentialsMessage = ^TGUnixCredentialsMessage; PPGUnixCredentialsMessagePrivate = ^PGUnixCredentialsMessagePrivate; PGUnixCredentialsMessagePrivate = ^TGUnixCredentialsMessagePrivate; TGUnixCredentialsMessage = object(TGSocketControlMessage) priv1: PGUnixCredentialsMessagePrivate; end; TGUnixCredentialsMessagePrivate = record end; PPGUnixCredentialsMessageClass = ^PGUnixCredentialsMessageClass; PGUnixCredentialsMessageClass = ^TGUnixCredentialsMessageClass; TGUnixCredentialsMessageClass = object parent_class: TGSocketControlMessageClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; TGUnixFDListPrivate = record end; PPGUnixFDListClass = ^PGUnixFDListClass; PGUnixFDListClass = ^TGUnixFDListClass; TGUnixFDListClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixFDMessage = ^PGUnixFDMessage; PGUnixFDMessage = ^TGUnixFDMessage; PPGUnixFDMessagePrivate = ^PGUnixFDMessagePrivate; PGUnixFDMessagePrivate = ^TGUnixFDMessagePrivate; TGUnixFDMessage = object(TGSocketControlMessage) priv1: PGUnixFDMessagePrivate; end; TGUnixFDMessagePrivate = record end; PPGUnixFDMessageClass = ^PGUnixFDMessageClass; PGUnixFDMessageClass = ^TGUnixFDMessageClass; TGUnixFDMessageClass = object parent_class: TGSocketControlMessageClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; PPGUnixInputStream = ^PGUnixInputStream; PGUnixInputStream = ^TGUnixInputStream; PPGUnixInputStreamPrivate = ^PGUnixInputStreamPrivate; PGUnixInputStreamPrivate = ^TGUnixInputStreamPrivate; TGUnixInputStream = object(TGInputStream) priv1: PGUnixInputStreamPrivate; end; TGUnixInputStreamPrivate = record end; PPGUnixInputStreamClass = ^PGUnixInputStreamClass; PGUnixInputStreamClass = ^TGUnixInputStreamClass; TGUnixInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixMountEntry = ^PGUnixMountEntry; PGUnixMountEntry = ^TGUnixMountEntry; TGUnixMountEntry = record end; PPGUnixMountMonitor = ^PGUnixMountMonitor; PGUnixMountMonitor = ^TGUnixMountMonitor; TGUnixMountMonitor = object(TGObject) end; PPGUnixMountMonitorClass = ^PGUnixMountMonitorClass; PGUnixMountMonitorClass = ^TGUnixMountMonitorClass; TGUnixMountMonitorClass = object end; PPGUnixMountPoint = ^PGUnixMountPoint; PGUnixMountPoint = ^TGUnixMountPoint; TGUnixMountPoint = object end; PPGUnixOutputStream = ^PGUnixOutputStream; PGUnixOutputStream = ^TGUnixOutputStream; PPGUnixOutputStreamPrivate = ^PGUnixOutputStreamPrivate; PGUnixOutputStreamPrivate = ^TGUnixOutputStreamPrivate; TGUnixOutputStream = object(TGOutputStream) priv1: PGUnixOutputStreamPrivate; end; TGUnixOutputStreamPrivate = record end; PPGUnixOutputStreamClass = ^PGUnixOutputStreamClass; PGUnixOutputStreamClass = ^TGUnixOutputStreamClass; TGUnixOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixSocketAddressType = ^PGUnixSocketAddressType; PGUnixSocketAddressType = ^TGUnixSocketAddressType; PPGUnixSocketAddress = ^PGUnixSocketAddress; PGUnixSocketAddress = ^TGUnixSocketAddress; PPGUnixSocketAddressPrivate = ^PGUnixSocketAddressPrivate; PGUnixSocketAddressPrivate = ^TGUnixSocketAddressPrivate; TGUnixSocketAddress = object(TGSocketAddress) priv: PGUnixSocketAddressPrivate; end; TGUnixSocketAddressPrivate = record end; PPGUnixSocketAddressClass = ^PGUnixSocketAddressClass; PGUnixSocketAddressClass = ^TGUnixSocketAddressClass; TGUnixSocketAddressClass = object parent_class: TGSocketAddressClass; end; PPGVfs = ^PGVfs; PGVfs = ^TGVfs; TGVfs = object(TGObject) end; PPGVfsClass = ^PGVfsClass; PGVfsClass = ^TGVfsClass; TGVfsClass = object parent_class: TGObjectClass; is_active: function(vfs: PGVfs): gboolean; cdecl; get_file_for_path: function(vfs: PGVfs; path: Pgchar): PGFile; cdecl; get_file_for_uri: function(vfs: PGVfs; uri: Pgchar): PGFile; cdecl; get_supported_uri_schemes: function(vfs: PGVfs): PPgchar; cdecl; parse_name: function(vfs: PGVfs; parse_name: Pgchar): PGFile; cdecl; local_file_add_info: procedure(vfs: PGVfs; filename: Pgchar; device: guint64; attribute_matcher: PGFileAttributeMatcher; info: PGFileInfo; cancellable: PGCancellable; extra_data: Pgpointer; free_extra_data: PGDestroyNotify); cdecl; add_writable_namespaces: procedure(vfs: PGVfs; list: PGFileAttributeInfoList); cdecl; local_file_set_attributes: function(vfs: PGVfs; filename: Pgchar; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; local_file_removed: procedure(vfs: PGVfs; filename: Pgchar); cdecl; local_file_moved: procedure(vfs: PGVfs; source: Pgchar; dest: Pgchar); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; PPGVolumeIface = ^PGVolumeIface; PGVolumeIface = ^TGVolumeIface; TGVolumeIface = object g_iface: TGTypeInterface; changed: procedure(volume: PGVolume); cdecl; removed: procedure(volume: PGVolume); cdecl; get_name: function(volume: PGVolume): Pgchar; cdecl; get_icon: function(volume: PGVolume): PGIcon; cdecl; get_uuid: function(volume: PGVolume): Pgchar; cdecl; get_drive: function(volume: PGVolume): PGDrive; cdecl; get_mount: function(volume: PGVolume): PGMount; cdecl; can_mount: function(volume: PGVolume): gboolean; cdecl; can_eject: function(volume: PGVolume): gboolean; cdecl; mount_fn: procedure(volume: PGVolume; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject: procedure(volume: PGVolume; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_identifier: function(volume: PGVolume; kind: Pgchar): Pgchar; cdecl; enumerate_identifiers: function(volume: PGVolume): PPgchar; cdecl; should_automount: function(volume: PGVolume): gboolean; cdecl; get_activation_root: function(volume: PGVolume): PGFile; cdecl; eject_with_operation: procedure(volume: PGVolume; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_sort_key: function(volume: PGVolume): Pgchar; cdecl; get_symbolic_icon: function(volume: PGVolume): PGIcon; cdecl; end; PPGZlibCompressor = ^PGZlibCompressor; PGZlibCompressor = ^TGZlibCompressor; PPGZlibCompressorFormat = ^PGZlibCompressorFormat; PGZlibCompressorFormat = ^TGZlibCompressorFormat; TGZlibCompressor = object(TGObject) end; PPGZlibCompressorClass = ^PGZlibCompressorClass; PGZlibCompressorClass = ^TGZlibCompressorClass; TGZlibCompressorClass = object parent_class: TGObjectClass; end; PPGZlibDecompressor = ^PGZlibDecompressor; PGZlibDecompressor = ^TGZlibDecompressor; TGZlibDecompressor = object(TGObject) end; PPGZlibDecompressorClass = ^PGZlibDecompressorClass; PGZlibDecompressorClass = ^TGZlibDecompressorClass; TGZlibDecompressorClass = object parent_class: TGObjectClass; end; var g_action_activate: procedure(action: PGAction; parameter: PGVariant); cdecl; g_action_change_state: procedure(action: PGAction; value: PGVariant); cdecl; g_action_get_enabled: function(action: PGAction): gboolean; cdecl; g_action_get_name: function(action: PGAction): Pgchar; cdecl; g_action_get_parameter_type: function(action: PGAction): PGVariantType; cdecl; g_action_get_state: function(action: PGAction): PGVariant; cdecl; g_action_get_state_hint: function(action: PGAction): PGVariant; cdecl; g_action_get_state_type: function(action: PGAction): PGVariantType; cdecl; g_action_get_type: function:TGType; cdecl; g_action_group_action_added: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; g_action_group_action_enabled_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; enabled: gboolean); cdecl; g_action_group_action_removed: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; g_action_group_action_state_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; state: PGVariant); cdecl; g_action_group_activate_action: procedure(action_group: PGActionGroup; action_name: Pgchar; parameter: PGVariant); cdecl; g_action_group_change_action_state: procedure(action_group: PGActionGroup; action_name: Pgchar; value: PGVariant); cdecl; g_action_group_get_action_enabled: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; g_action_group_get_action_parameter_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; g_action_group_get_action_state: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; g_action_group_get_action_state_hint: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; g_action_group_get_action_state_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; g_action_group_get_type: function:TGType; cdecl; g_action_group_has_action: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; g_action_group_list_actions: function(action_group: PGActionGroup): PPgchar; cdecl; g_action_group_query_action: function(action_group: PGActionGroup; action_name: Pgchar; enabled: Pgboolean; parameter_type: PPGVariantType; state_type: PPGVariantType; state_hint: PPGVariant; state: PPGVariant): gboolean; cdecl; g_action_map_add_action: procedure(action_map: PGActionMap; action: PGAction); cdecl; g_action_map_add_action_entries: procedure(action_map: PGActionMap; entries: PGActionEntry; n_entries: gint; user_data: gpointer); cdecl; g_action_map_get_type: function:TGType; cdecl; g_action_map_lookup_action: function(action_map: PGActionMap; action_name: Pgchar): PGAction; cdecl; g_action_map_remove_action: procedure(action_map: PGActionMap; action_name: Pgchar); cdecl; g_app_info_add_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_can_delete: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_can_remove_supports_type: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_create_from_commandline: function(commandline: Pgchar; application_name: Pgchar; flags: TGAppInfoCreateFlags; error: PPGError): PGAppInfo; cdecl; g_app_info_delete: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_dup: function(appinfo: PGAppInfo): PGAppInfo; cdecl; g_app_info_equal: function(appinfo1: PGAppInfo; appinfo2: PGAppInfo): gboolean; cdecl; g_app_info_get_all: function: PGList; cdecl; g_app_info_get_all_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_commandline: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_default_for_type: function(content_type: Pgchar; must_support_uris: gboolean): PGAppInfo; cdecl; g_app_info_get_default_for_uri_scheme: function(uri_scheme: Pgchar): PGAppInfo; cdecl; g_app_info_get_description: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_display_name: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_executable: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_fallback_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_icon: function(appinfo: PGAppInfo): PGIcon; cdecl; g_app_info_get_id: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_name: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_recommended_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_supported_types: function(appinfo: PGAppInfo): PPgchar; cdecl; g_app_info_get_type: function:TGType; cdecl; g_app_info_launch: function(appinfo: PGAppInfo; files: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_launch_default_for_uri: function(uri: Pgchar; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_launch_uris: function(appinfo: PGAppInfo; uris: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_remove_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_reset_type_associations: procedure(content_type: Pgchar); cdecl; g_app_info_set_as_default_for_extension: function(appinfo: PGAppInfo; extension: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_set_as_default_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_set_as_last_used_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_should_show: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_supports_files: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_supports_uris: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_launch_context_get_display: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; g_app_launch_context_get_environment: function(context: PGAppLaunchContext): PPgchar; cdecl; g_app_launch_context_get_startup_notify_id: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; g_app_launch_context_get_type: function:TGType; cdecl; g_app_launch_context_launch_failed: procedure(context: PGAppLaunchContext; startup_notify_id: Pgchar); cdecl; g_app_launch_context_new: function: PGAppLaunchContext; cdecl; g_app_launch_context_setenv: procedure(context: PGAppLaunchContext; variable: Pgchar; value: Pgchar); cdecl; g_app_launch_context_unsetenv: procedure(context: PGAppLaunchContext; variable: Pgchar); cdecl; g_application_activate: procedure(application: PGApplication); cdecl; g_application_command_line_create_file_for_arg: function(cmdline: PGApplicationCommandLine; arg: Pgchar): PGFile; cdecl; g_application_command_line_get_arguments: function(cmdline: PGApplicationCommandLine; argc: Pgint): PPgchar; cdecl; g_application_command_line_get_cwd: function(cmdline: PGApplicationCommandLine): Pgchar; cdecl; g_application_command_line_get_environ: function(cmdline: PGApplicationCommandLine): PPgchar; cdecl; g_application_command_line_get_exit_status: function(cmdline: PGApplicationCommandLine): gint; cdecl; g_application_command_line_get_is_remote: function(cmdline: PGApplicationCommandLine): gboolean; cdecl; g_application_command_line_get_platform_data: function(cmdline: PGApplicationCommandLine): PGVariant; cdecl; g_application_command_line_get_stdin: function(cmdline: PGApplicationCommandLine): PGInputStream; cdecl; g_application_command_line_get_type: function:TGType; cdecl; g_application_command_line_getenv: function(cmdline: PGApplicationCommandLine; name: Pgchar): Pgchar; cdecl; g_application_command_line_print: procedure(cmdline: PGApplicationCommandLine; format: Pgchar; args: array of const); cdecl; g_application_command_line_printerr: procedure(cmdline: PGApplicationCommandLine; format: Pgchar; args: array of const); cdecl; g_application_command_line_set_exit_status: procedure(cmdline: PGApplicationCommandLine; exit_status: gint); cdecl; g_application_get_application_id: function(application: PGApplication): Pgchar; cdecl; g_application_get_dbus_connection: function(application: PGApplication): PGDBusConnection; cdecl; g_application_get_dbus_object_path: function(application: PGApplication): Pgchar; cdecl; g_application_get_default: function: PGApplication; cdecl; g_application_get_flags: function(application: PGApplication): TGApplicationFlags; cdecl; g_application_get_inactivity_timeout: function(application: PGApplication): guint; cdecl; g_application_get_is_registered: function(application: PGApplication): gboolean; cdecl; g_application_get_is_remote: function(application: PGApplication): gboolean; cdecl; g_application_get_type: function:TGType; cdecl; g_application_hold: procedure(application: PGApplication); cdecl; g_application_id_is_valid: function(application_id: Pgchar): gboolean; cdecl; g_application_new: function(application_id: Pgchar; flags: TGApplicationFlags): PGApplication; cdecl; g_application_open: procedure(application: PGApplication; files: PPGFile; n_files: gint; hint: Pgchar); cdecl; g_application_quit: procedure(application: PGApplication); cdecl; g_application_register: function(application: PGApplication; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_application_release: procedure(application: PGApplication); cdecl; g_application_run: function(application: PGApplication; argc: gint; argv: PPgchar): gint; cdecl; g_application_set_application_id: procedure(application: PGApplication; application_id: Pgchar); cdecl; g_application_set_default: procedure(application: PGApplication); cdecl; g_application_set_flags: procedure(application: PGApplication; flags: TGApplicationFlags); cdecl; g_application_set_inactivity_timeout: procedure(application: PGApplication; inactivity_timeout: guint); cdecl; g_async_initable_get_type: function:TGType; cdecl; g_async_initable_init_async: procedure(initable: PGAsyncInitable; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_initable_init_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_async_initable_new_async: procedure(object_type: TGType; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer; first_property_name: Pgchar; args: array of const); cdecl; g_async_initable_new_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): PGObject; cdecl; g_async_initable_new_valist_async: procedure(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_initable_newv_async: procedure(object_type: TGType; n_parameters: guint; parameters: PGParameter; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_result_get_source_object: function(res: PGAsyncResult): PGObject; cdecl; g_async_result_get_type: function:TGType; cdecl; g_async_result_get_user_data: function(res: PGAsyncResult): gpointer; cdecl; g_async_result_is_tagged: function(res: PGAsyncResult; source_tag: gpointer): gboolean; cdecl; g_async_result_legacy_propagate_error: function(res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_buffered_input_stream_fill: function(stream: PGBufferedInputStream; count: gssize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_buffered_input_stream_fill_async: procedure(stream: PGBufferedInputStream; count: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_buffered_input_stream_fill_finish: function(stream: PGBufferedInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_buffered_input_stream_get_available: function(stream: PGBufferedInputStream): gsize; cdecl; g_buffered_input_stream_get_buffer_size: function(stream: PGBufferedInputStream): gsize; cdecl; g_buffered_input_stream_get_type: function:TGType; cdecl; g_buffered_input_stream_new: function(base_stream: PGInputStream): PGBufferedInputStream; cdecl; g_buffered_input_stream_new_sized: function(base_stream: PGInputStream; size: gsize): PGBufferedInputStream; cdecl; g_buffered_input_stream_peek: function(stream: PGBufferedInputStream; buffer: Pguint8; offset: gsize; count: gsize): gsize; cdecl; g_buffered_input_stream_peek_buffer: function(stream: PGBufferedInputStream; count: Pgsize): Pguint8; cdecl; g_buffered_input_stream_read_byte: function(stream: PGBufferedInputStream; cancellable: PGCancellable; error: PPGError): gint; cdecl; g_buffered_input_stream_set_buffer_size: procedure(stream: PGBufferedInputStream; size: gsize); cdecl; g_buffered_output_stream_get_auto_grow: function(stream: PGBufferedOutputStream): gboolean; cdecl; g_buffered_output_stream_get_buffer_size: function(stream: PGBufferedOutputStream): gsize; cdecl; g_buffered_output_stream_get_type: function:TGType; cdecl; g_buffered_output_stream_new: function(base_stream: PGOutputStream): PGBufferedOutputStream; cdecl; g_buffered_output_stream_new_sized: function(base_stream: PGOutputStream; size: gsize): PGBufferedOutputStream; cdecl; g_buffered_output_stream_set_auto_grow: procedure(stream: PGBufferedOutputStream; auto_grow: gboolean); cdecl; g_buffered_output_stream_set_buffer_size: procedure(stream: PGBufferedOutputStream; size: gsize); cdecl; g_bus_get: procedure(bus_type: TGBusType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_bus_get_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_bus_get_sync: function(bus_type: TGBusType; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_bus_own_name: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameOwnerFlags; bus_acquired_handler: TGBusAcquiredCallback; name_acquired_handler: TGBusNameAcquiredCallback; name_lost_handler: TGBusNameLostCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_own_name_on_connection: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameOwnerFlags; name_acquired_handler: TGBusNameAcquiredCallback; name_lost_handler: TGBusNameLostCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_own_name_on_connection_with_closures: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameOwnerFlags; name_acquired_closure: PGClosure; name_lost_closure: PGClosure): guint; cdecl; g_bus_own_name_with_closures: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameOwnerFlags; bus_acquired_closure: PGClosure; name_acquired_closure: PGClosure; name_lost_closure: PGClosure): guint; cdecl; g_bus_unown_name: procedure(owner_id: guint); cdecl; g_bus_unwatch_name: procedure(watcher_id: guint); cdecl; g_bus_watch_name: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_handler: TGBusNameAppearedCallback; name_vanished_handler: TGBusNameVanishedCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_watch_name_on_connection: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_handler: TGBusNameAppearedCallback; name_vanished_handler: TGBusNameVanishedCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_watch_name_on_connection_with_closures: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_closure: PGClosure; name_vanished_closure: PGClosure): guint; cdecl; g_bus_watch_name_with_closures: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_closure: PGClosure; name_vanished_closure: PGClosure): guint; cdecl; g_cancellable_cancel: procedure(cancellable: PGCancellable); cdecl; g_cancellable_connect: function(cancellable: PGCancellable; callback: TGCallback; data: gpointer; data_destroy_func: TGDestroyNotify): gulong; cdecl; g_cancellable_disconnect: procedure(cancellable: PGCancellable; handler_id: gulong); cdecl; g_cancellable_get_current: function: PGCancellable; cdecl; g_cancellable_get_fd: function(cancellable: PGCancellable): gint; cdecl; g_cancellable_get_type: function:TGType; cdecl; g_cancellable_is_cancelled: function(cancellable: PGCancellable): gboolean; cdecl; g_cancellable_make_pollfd: function(cancellable: PGCancellable; pollfd: PGPollFD): gboolean; cdecl; g_cancellable_new: function: PGCancellable; cdecl; g_cancellable_pop_current: procedure(cancellable: PGCancellable); cdecl; g_cancellable_push_current: procedure(cancellable: PGCancellable); cdecl; g_cancellable_release_fd: procedure(cancellable: PGCancellable); cdecl; g_cancellable_reset: procedure(cancellable: PGCancellable); cdecl; g_cancellable_set_error_if_cancelled: function(cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_cancellable_source_new: function(cancellable: PGCancellable): PGSource; cdecl; g_charset_converter_get_num_fallbacks: function(converter: PGCharsetConverter): guint; cdecl; g_charset_converter_get_type: function:TGType; cdecl; g_charset_converter_get_use_fallback: function(converter: PGCharsetConverter): gboolean; cdecl; g_charset_converter_new: function(to_charset: Pgchar; from_charset: Pgchar; error: PPGError): PGCharsetConverter; cdecl; g_charset_converter_set_use_fallback: procedure(converter: PGCharsetConverter; use_fallback: gboolean); cdecl; g_content_type_can_be_executable: function(type_: Pgchar): gboolean; cdecl; g_content_type_equals: function(type1: Pgchar; type2: Pgchar): gboolean; cdecl; g_content_type_from_mime_type: function(mime_type: Pgchar): Pgchar; cdecl; g_content_type_get_description: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_generic_icon_name: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_icon: function(type_: Pgchar): PGIcon; cdecl; g_content_type_get_mime_type: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_symbolic_icon: function(type_: Pgchar): PGIcon; cdecl; g_content_type_guess: function(filename: Pgchar; data: Pguint8; data_size: gsize; result_uncertain: Pgboolean): Pgchar; cdecl; g_content_type_guess_for_tree: function(root: PGFile): PPgchar; cdecl; g_content_type_is_a: function(type_: Pgchar; supertype: Pgchar): gboolean; cdecl; g_content_type_is_unknown: function(type_: Pgchar): gboolean; cdecl; g_content_types_get_registered: function: PGList; cdecl; g_converter_convert: function(converter: PGConverter; inbuf: Pguint8; inbuf_size: gsize; outbuf: Pgpointer; outbuf_size: gsize; flags: TGConverterFlags; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): TGConverterResult; cdecl; g_converter_get_type: function:TGType; cdecl; g_converter_input_stream_get_converter: function(converter_stream: PGConverterInputStream): PGConverter; cdecl; g_converter_input_stream_get_type: function:TGType; cdecl; g_converter_input_stream_new: function(base_stream: PGInputStream; converter: PGConverter): PGConverterInputStream; cdecl; g_converter_output_stream_get_converter: function(converter_stream: PGConverterOutputStream): PGConverter; cdecl; g_converter_output_stream_get_type: function:TGType; cdecl; g_converter_output_stream_new: function(base_stream: PGOutputStream; converter: PGConverter): PGConverterOutputStream; cdecl; g_converter_reset: procedure(converter: PGConverter); cdecl; g_credentials_get_native: function(credentials: PGCredentials; native_type: TGCredentialsType): gpointer; cdecl; g_credentials_get_type: function:TGType; cdecl; g_credentials_get_unix_pid: function(credentials: PGCredentials; error: PPGError): gint; cdecl; g_credentials_get_unix_user: function(credentials: PGCredentials; error: PPGError): guint; cdecl; g_credentials_is_same_user: function(credentials: PGCredentials; other_credentials: PGCredentials; error: PPGError): gboolean; cdecl; g_credentials_new: function: PGCredentials; cdecl; g_credentials_set_native: procedure(credentials: PGCredentials; native_type: TGCredentialsType; native: gpointer); cdecl; g_credentials_set_unix_user: function(credentials: PGCredentials; uid: guint; error: PPGError): gboolean; cdecl; g_credentials_to_string: function(credentials: PGCredentials): Pgchar; cdecl; g_data_input_stream_get_byte_order: function(stream: PGDataInputStream): TGDataStreamByteOrder; cdecl; g_data_input_stream_get_newline_type: function(stream: PGDataInputStream): TGDataStreamNewlineType; cdecl; g_data_input_stream_get_type: function:TGType; cdecl; g_data_input_stream_new: function(base_stream: PGInputStream): PGDataInputStream; cdecl; g_data_input_stream_read_byte: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint8; cdecl; g_data_input_stream_read_int16: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint16; cdecl; g_data_input_stream_read_int32: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint32; cdecl; g_data_input_stream_read_int64: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint64; cdecl; g_data_input_stream_read_line: function(stream: PGDataInputStream; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_async: procedure(stream: PGDataInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_line_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_finish_utf8: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_utf8: function(stream: PGDataInputStream; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_uint16: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint16; cdecl; g_data_input_stream_read_uint32: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint32; cdecl; g_data_input_stream_read_uint64: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint64; cdecl; g_data_input_stream_read_until: function(stream: PGDataInputStream; stop_chars: Pgchar; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_until_async: procedure(stream: PGDataInputStream; stop_chars: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_until_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_upto: function(stream: PGDataInputStream; stop_chars: Pgchar; stop_chars_len: gssize; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_upto_async: procedure(stream: PGDataInputStream; stop_chars: Pgchar; stop_chars_len: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_upto_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_set_byte_order: procedure(stream: PGDataInputStream; order: TGDataStreamByteOrder); cdecl; g_data_input_stream_set_newline_type: procedure(stream: PGDataInputStream; type_: TGDataStreamNewlineType); cdecl; g_data_output_stream_get_byte_order: function(stream: PGDataOutputStream): TGDataStreamByteOrder; cdecl; g_data_output_stream_get_type: function:TGType; cdecl; g_data_output_stream_new: function(base_stream: PGOutputStream): PGDataOutputStream; cdecl; g_data_output_stream_put_byte: function(stream: PGDataOutputStream; data: guint8; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int16: function(stream: PGDataOutputStream; data: gint16; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int32: function(stream: PGDataOutputStream; data: gint32; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int64: function(stream: PGDataOutputStream; data: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_string: function(stream: PGDataOutputStream; str: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint16: function(stream: PGDataOutputStream; data: guint16; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint32: function(stream: PGDataOutputStream; data: guint32; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint64: function(stream: PGDataOutputStream; data: guint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_set_byte_order: procedure(stream: PGDataOutputStream; order: TGDataStreamByteOrder); cdecl; g_dbus_action_group_get: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar): PGDBusActionGroup; cdecl; g_dbus_action_group_get_type: function:TGType; cdecl; g_dbus_address_escape_value: function(string_: Pgchar): Pgchar; cdecl; g_dbus_address_get_for_bus_sync: function(bus_type: TGBusType; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_dbus_address_get_stream: procedure(address: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_address_get_stream_finish: function(res: PGAsyncResult; out_guid: PPgchar; error: PPGError): PGIOStream; cdecl; g_dbus_address_get_stream_sync: function(address: Pgchar; out_guid: PPgchar; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; g_dbus_annotation_info_get_type: function:TGType; cdecl; g_dbus_annotation_info_lookup: function(annotations: PPGDBusAnnotationInfo; name: Pgchar): Pgchar; cdecl; g_dbus_annotation_info_ref: function(info: PGDBusAnnotationInfo): PGDBusAnnotationInfo; cdecl; g_dbus_annotation_info_unref: procedure(info: PGDBusAnnotationInfo); cdecl; g_dbus_arg_info_get_type: function:TGType; cdecl; g_dbus_arg_info_ref: function(info: PGDBusArgInfo): PGDBusArgInfo; cdecl; g_dbus_arg_info_unref: procedure(info: PGDBusArgInfo); cdecl; g_dbus_auth_observer_allow_mechanism: function(observer: PGDBusAuthObserver; mechanism: Pgchar): gboolean; cdecl; g_dbus_auth_observer_authorize_authenticated_peer: function(observer: PGDBusAuthObserver; stream: PGIOStream; credentials: PGCredentials): gboolean; cdecl; g_dbus_auth_observer_get_type: function:TGType; cdecl; g_dbus_auth_observer_new: function: PGDBusAuthObserver; cdecl; g_dbus_connection_add_filter: function(connection: PGDBusConnection; filter_function: TGDBusMessageFilterFunction; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_dbus_connection_call: procedure(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_call_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_sync: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_with_unix_fd_list: procedure(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_call_with_unix_fd_list_finish: function(connection: PGDBusConnection; out_fd_list: PPGUnixFDList; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_with_unix_fd_list_sync: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; out_fd_list: PPGUnixFDList; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_connection_close: procedure(connection: PGDBusConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_close_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_dbus_connection_close_sync: function(connection: PGDBusConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_dbus_connection_emit_signal: function(connection: PGDBusConnection; destination_bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; signal_name: Pgchar; parameters: PGVariant; error: PPGError): gboolean; cdecl; g_dbus_connection_export_action_group: function(connection: PGDBusConnection; object_path: Pgchar; action_group: PGActionGroup; error: PPGError): guint; cdecl; g_dbus_connection_export_menu_model: function(connection: PGDBusConnection; object_path: Pgchar; menu: PGMenuModel; error: PPGError): guint; cdecl; g_dbus_connection_flush: procedure(connection: PGDBusConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_flush_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_dbus_connection_flush_sync: function(connection: PGDBusConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_dbus_connection_get_capabilities: function(connection: PGDBusConnection): TGDBusCapabilityFlags; cdecl; g_dbus_connection_get_exit_on_close: function(connection: PGDBusConnection): gboolean; cdecl; g_dbus_connection_get_guid: function(connection: PGDBusConnection): Pgchar; cdecl; g_dbus_connection_get_last_serial: function(connection: PGDBusConnection): guint32; cdecl; g_dbus_connection_get_peer_credentials: function(connection: PGDBusConnection): PGCredentials; cdecl; g_dbus_connection_get_stream: function(connection: PGDBusConnection): PGIOStream; cdecl; g_dbus_connection_get_type: function:TGType; cdecl; g_dbus_connection_get_unique_name: function(connection: PGDBusConnection): Pgchar; cdecl; g_dbus_connection_is_closed: function(connection: PGDBusConnection): gboolean; cdecl; g_dbus_connection_new: procedure(stream: PGIOStream; guid: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_for_address: procedure(address: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_new_for_address_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_for_address_sync: function(address: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_sync: function(stream: PGIOStream; guid: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_register_object: function(connection: PGDBusConnection; object_path: Pgchar; interface_info: PGDBusInterfaceInfo; vtable: PGDBusInterfaceVTable; user_data: gpointer; user_data_free_func: TGDestroyNotify; error: PPGError): guint; cdecl; g_dbus_connection_register_subtree: function(connection: PGDBusConnection; object_path: Pgchar; vtable: PGDBusSubtreeVTable; flags: TGDBusSubtreeFlags; user_data: gpointer; user_data_free_func: TGDestroyNotify; error: PPGError): guint; cdecl; g_dbus_connection_remove_filter: procedure(connection: PGDBusConnection; filter_id: guint); cdecl; g_dbus_connection_send_message: function(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; out_serial: Pguint32; error: PPGError): gboolean; cdecl; g_dbus_connection_send_message_with_reply: procedure(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; timeout_msec: gint; out_serial: Pguint32; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_send_message_with_reply_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): PGDBusMessage; cdecl; g_dbus_connection_send_message_with_reply_sync: function(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; timeout_msec: gint; out_serial: Pguint32; cancellable: PGCancellable; error: PPGError): PGDBusMessage; cdecl; g_dbus_connection_set_exit_on_close: procedure(connection: PGDBusConnection; exit_on_close: gboolean); cdecl; g_dbus_connection_signal_subscribe: function(connection: PGDBusConnection; sender: Pgchar; interface_name: Pgchar; member: Pgchar; object_path: Pgchar; arg0: Pgchar; flags: TGDBusSignalFlags; callback: TGDBusSignalCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_dbus_connection_signal_unsubscribe: procedure(connection: PGDBusConnection; subscription_id: guint); cdecl; g_dbus_connection_start_message_processing: procedure(connection: PGDBusConnection); cdecl; g_dbus_connection_unexport_action_group: procedure(connection: PGDBusConnection; export_id: guint); cdecl; g_dbus_connection_unexport_menu_model: procedure(connection: PGDBusConnection; export_id: guint); cdecl; g_dbus_connection_unregister_object: function(connection: PGDBusConnection; registration_id: guint): gboolean; cdecl; g_dbus_connection_unregister_subtree: function(connection: PGDBusConnection; registration_id: guint): gboolean; cdecl; g_dbus_error_encode_gerror: function(error: PGError): Pgchar; cdecl; g_dbus_error_get_remote_error: function(error: PGError): Pgchar; cdecl; g_dbus_error_is_remote_error: function(error: PGError): gboolean; cdecl; g_dbus_error_new_for_dbus_error: function(dbus_error_name: Pgchar; dbus_error_message: Pgchar): PGError; cdecl; g_dbus_error_quark: function: TGQuark; cdecl; g_dbus_error_register_error: function(error_domain: TGQuark; error_code: gint; dbus_error_name: Pgchar): gboolean; cdecl; g_dbus_error_register_error_domain: procedure(error_domain_quark_name: Pgchar; quark_volatile: Pgsize; entries: PGDBusErrorEntry; num_entries: guint); cdecl; g_dbus_error_set_dbus_error: procedure(error: PPGError; dbus_error_name: Pgchar; dbus_error_message: Pgchar; format: Pgchar; args: array of const); cdecl; g_dbus_error_set_dbus_error_valist: procedure(error: PPGError; dbus_error_name: Pgchar; dbus_error_message: Pgchar; format: Pgchar; var_args: Tva_list); cdecl; g_dbus_error_strip_remote_error: function(error: PGError): gboolean; cdecl; g_dbus_error_unregister_error: function(error_domain: TGQuark; error_code: gint; dbus_error_name: Pgchar): gboolean; cdecl; g_dbus_generate_guid: function: Pgchar; cdecl; g_dbus_gvalue_to_gvariant: function(gvalue: PGValue; type_: PGVariantType): PGVariant; cdecl; g_dbus_gvariant_to_gvalue: procedure(value: PGVariant; out_gvalue: PGValue); cdecl; g_dbus_interface_dup_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; g_dbus_interface_get_info: function(interface_: PGDBusInterface): PGDBusInterfaceInfo; cdecl; g_dbus_interface_get_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; g_dbus_interface_get_type: function:TGType; cdecl; g_dbus_interface_info_cache_build: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_info_cache_release: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_info_generate_xml: procedure(info: PGDBusInterfaceInfo; indent: guint; string_builder: PGString); cdecl; g_dbus_interface_info_get_type: function:TGType; cdecl; g_dbus_interface_info_lookup_method: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusMethodInfo; cdecl; g_dbus_interface_info_lookup_property: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusPropertyInfo; cdecl; g_dbus_interface_info_lookup_signal: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusSignalInfo; cdecl; g_dbus_interface_info_ref: function(info: PGDBusInterfaceInfo): PGDBusInterfaceInfo; cdecl; g_dbus_interface_info_unref: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_set_object: procedure(interface_: PGDBusInterface; object_: PGDBusObject); cdecl; g_dbus_interface_skeleton_export: function(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection; object_path: Pgchar; error: PPGError): gboolean; cdecl; g_dbus_interface_skeleton_flush: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_interface_skeleton_get_connection: function(interface_: PGDBusInterfaceSkeleton): PGDBusConnection; cdecl; g_dbus_interface_skeleton_get_connections: function(interface_: PGDBusInterfaceSkeleton): PGList; cdecl; g_dbus_interface_skeleton_get_flags: function(interface_: PGDBusInterfaceSkeleton): TGDBusInterfaceSkeletonFlags; cdecl; g_dbus_interface_skeleton_get_info: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceInfo; cdecl; g_dbus_interface_skeleton_get_object_path: function(interface_: PGDBusInterfaceSkeleton): Pgchar; cdecl; g_dbus_interface_skeleton_get_properties: function(interface_: PGDBusInterfaceSkeleton): PGVariant; cdecl; g_dbus_interface_skeleton_get_type: function:TGType; cdecl; g_dbus_interface_skeleton_get_vtable: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceVTable; cdecl; g_dbus_interface_skeleton_has_connection: function(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection): gboolean; cdecl; g_dbus_interface_skeleton_set_flags: procedure(interface_: PGDBusInterfaceSkeleton; flags: TGDBusInterfaceSkeletonFlags); cdecl; g_dbus_interface_skeleton_unexport: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_interface_skeleton_unexport_from_connection: procedure(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection); cdecl; g_dbus_is_address: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_guid: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_interface_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_member_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_supported_address: function(string_: Pgchar; error: PPGError): gboolean; cdecl; g_dbus_is_unique_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_menu_model_get: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar): PGDBusMenuModel; cdecl; g_dbus_menu_model_get_type: function:TGType; cdecl; g_dbus_message_bytes_needed: function(blob: Pguint8; blob_len: gsize; error: PPGError): gssize; cdecl; g_dbus_message_copy: function(message: PGDBusMessage; error: PPGError): PGDBusMessage; cdecl; g_dbus_message_get_arg0: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_body: function(message: PGDBusMessage): PGVariant; cdecl; g_dbus_message_get_byte_order: function(message: PGDBusMessage): TGDBusMessageByteOrder; cdecl; g_dbus_message_get_destination: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_error_name: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_flags: function(message: PGDBusMessage): TGDBusMessageFlags; cdecl; g_dbus_message_get_header: function(message: PGDBusMessage; header_field: TGDBusMessageHeaderField): PGVariant; cdecl; g_dbus_message_get_header_fields: function(message: PGDBusMessage): Pguint8; cdecl; g_dbus_message_get_interface: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_locked: function(message: PGDBusMessage): gboolean; cdecl; g_dbus_message_get_member: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_message_type: function(message: PGDBusMessage): TGDBusMessageType; cdecl; g_dbus_message_get_num_unix_fds: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_path: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_reply_serial: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_sender: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_serial: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_signature: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_type: function:TGType; cdecl; g_dbus_message_get_unix_fd_list: function(message: PGDBusMessage): PGUnixFDList; cdecl; g_dbus_message_lock: procedure(message: PGDBusMessage); cdecl; g_dbus_message_new: function: PGDBusMessage; cdecl; g_dbus_message_new_from_blob: function(blob: Pguint8; blob_len: gsize; capabilities: TGDBusCapabilityFlags; error: PPGError): PGDBusMessage; cdecl; g_dbus_message_new_method_call: function(name: Pgchar; path: Pgchar; interface_: Pgchar; method: Pgchar): PGDBusMessage; cdecl; g_dbus_message_new_method_error: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message_format: Pgchar; args: array of const): PGDBusMessage; cdecl; g_dbus_message_new_method_error_literal: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message: Pgchar): PGDBusMessage; cdecl; g_dbus_message_new_method_error_valist: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message_format: Pgchar; var_args: Tva_list): PGDBusMessage; cdecl; g_dbus_message_new_method_reply: function(method_call_message: PGDBusMessage): PGDBusMessage; cdecl; g_dbus_message_new_signal: function(path: Pgchar; interface_: Pgchar; signal: Pgchar): PGDBusMessage; cdecl; g_dbus_message_print: function(message: PGDBusMessage; indent: guint): Pgchar; cdecl; g_dbus_message_set_body: procedure(message: PGDBusMessage; body: PGVariant); cdecl; g_dbus_message_set_byte_order: procedure(message: PGDBusMessage; byte_order: TGDBusMessageByteOrder); cdecl; g_dbus_message_set_destination: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_error_name: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_flags: procedure(message: PGDBusMessage; flags: TGDBusMessageFlags); cdecl; g_dbus_message_set_header: procedure(message: PGDBusMessage; header_field: TGDBusMessageHeaderField; value: PGVariant); cdecl; g_dbus_message_set_interface: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_member: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_message_type: procedure(message: PGDBusMessage; type_: TGDBusMessageType); cdecl; g_dbus_message_set_num_unix_fds: procedure(message: PGDBusMessage; value: guint32); cdecl; g_dbus_message_set_path: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_reply_serial: procedure(message: PGDBusMessage; value: guint32); cdecl; g_dbus_message_set_sender: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_serial: procedure(message: PGDBusMessage; serial: guint32); cdecl; g_dbus_message_set_signature: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_unix_fd_list: procedure(message: PGDBusMessage; fd_list: PGUnixFDList); cdecl; g_dbus_message_to_blob: function(message: PGDBusMessage; out_size: Pgsize; capabilities: TGDBusCapabilityFlags; error: PPGError): Pguint8; cdecl; g_dbus_message_to_gerror: function(message: PGDBusMessage; error: PPGError): gboolean; cdecl; g_dbus_method_info_get_type: function:TGType; cdecl; g_dbus_method_info_ref: function(info: PGDBusMethodInfo): PGDBusMethodInfo; cdecl; g_dbus_method_info_unref: procedure(info: PGDBusMethodInfo); cdecl; g_dbus_method_invocation_get_connection: function(invocation: PGDBusMethodInvocation): PGDBusConnection; cdecl; g_dbus_method_invocation_get_interface_name: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_message: function(invocation: PGDBusMethodInvocation): PGDBusMessage; cdecl; g_dbus_method_invocation_get_method_info: function(invocation: PGDBusMethodInvocation): PGDBusMethodInfo; cdecl; g_dbus_method_invocation_get_method_name: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_object_path: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_parameters: function(invocation: PGDBusMethodInvocation): PGVariant; cdecl; g_dbus_method_invocation_get_sender: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_type: function:TGType; cdecl; g_dbus_method_invocation_get_user_data: function(invocation: PGDBusMethodInvocation): gpointer; cdecl; g_dbus_method_invocation_return_dbus_error: procedure(invocation: PGDBusMethodInvocation; error_name: Pgchar; error_message: Pgchar); cdecl; g_dbus_method_invocation_return_error: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_dbus_method_invocation_return_error_literal: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; message: Pgchar); cdecl; g_dbus_method_invocation_return_error_valist: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; format: Pgchar; var_args: Tva_list); cdecl; g_dbus_method_invocation_return_gerror: procedure(invocation: PGDBusMethodInvocation; error: PGError); cdecl; g_dbus_method_invocation_return_value: procedure(invocation: PGDBusMethodInvocation; parameters: PGVariant); cdecl; g_dbus_method_invocation_return_value_with_unix_fd_list: procedure(invocation: PGDBusMethodInvocation; parameters: PGVariant; fd_list: PGUnixFDList); cdecl; g_dbus_method_invocation_take_error: procedure(invocation: PGDBusMethodInvocation; error: PGError); cdecl; g_dbus_node_info_generate_xml: procedure(info: PGDBusNodeInfo; indent: guint; string_builder: PGString); cdecl; g_dbus_node_info_get_type: function:TGType; cdecl; g_dbus_node_info_lookup_interface: function(info: PGDBusNodeInfo; name: Pgchar): PGDBusInterfaceInfo; cdecl; g_dbus_node_info_new_for_xml: function(xml_data: Pgchar; error: PPGError): PGDBusNodeInfo; cdecl; g_dbus_node_info_ref: function(info: PGDBusNodeInfo): PGDBusNodeInfo; cdecl; g_dbus_node_info_unref: procedure(info: PGDBusNodeInfo); cdecl; g_dbus_object_get_interface: function(object_: PGDBusObject; interface_name: Pgchar): PGDBusInterface; cdecl; g_dbus_object_get_interfaces: function(object_: PGDBusObject): PGList; cdecl; g_dbus_object_get_object_path: function(object_: PGDBusObject): Pgchar; cdecl; g_dbus_object_get_type: function:TGType; cdecl; g_dbus_object_manager_client_get_connection: function(manager: PGDBusObjectManagerClient): PGDBusConnection; cdecl; g_dbus_object_manager_client_get_flags: function(manager: PGDBusObjectManagerClient): TGDBusObjectManagerClientFlags; cdecl; g_dbus_object_manager_client_get_name: function(manager: PGDBusObjectManagerClient): Pgchar; cdecl; g_dbus_object_manager_client_get_name_owner: function(manager: PGDBusObjectManagerClient): Pgchar; cdecl; g_dbus_object_manager_client_get_type: function:TGType; cdecl; g_dbus_object_manager_client_new: procedure(connection: PGDBusConnection; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_object_manager_client_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_for_bus: procedure(bus_type: TGBusType; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_object_manager_client_new_for_bus_finish: function(res: PGAsyncResult; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_for_bus_sync: function(bus_type: TGBusType; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_sync: function(connection: PGDBusConnection; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_get_interface: function(manager: PGDBusObjectManager; object_path: Pgchar; interface_name: Pgchar): PGDBusInterface; cdecl; g_dbus_object_manager_get_object: function(manager: PGDBusObjectManager; object_path: Pgchar): PGDBusObject; cdecl; g_dbus_object_manager_get_object_path: function(manager: PGDBusObjectManager): Pgchar; cdecl; g_dbus_object_manager_get_objects: function(manager: PGDBusObjectManager): PGList; cdecl; g_dbus_object_manager_get_type: function:TGType; cdecl; g_dbus_object_manager_server_export: procedure(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_manager_server_export_uniquely: procedure(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_manager_server_get_connection: function(manager: PGDBusObjectManagerServer): PGDBusConnection; cdecl; g_dbus_object_manager_server_get_type: function:TGType; cdecl; g_dbus_object_manager_server_is_exported: function(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton): gboolean; cdecl; g_dbus_object_manager_server_new: function(object_path: Pgchar): PGDBusObjectManagerServer; cdecl; g_dbus_object_manager_server_set_connection: procedure(manager: PGDBusObjectManagerServer; connection: PGDBusConnection); cdecl; g_dbus_object_manager_server_unexport: function(manager: PGDBusObjectManagerServer; object_path: Pgchar): gboolean; cdecl; g_dbus_object_proxy_get_connection: function(proxy: PGDBusObjectProxy): PGDBusConnection; cdecl; g_dbus_object_proxy_get_type: function:TGType; cdecl; g_dbus_object_proxy_new: function(connection: PGDBusConnection; object_path: Pgchar): PGDBusObjectProxy; cdecl; g_dbus_object_skeleton_add_interface: procedure(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_object_skeleton_flush: procedure(object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_skeleton_get_type: function:TGType; cdecl; g_dbus_object_skeleton_new: function(object_path: Pgchar): PGDBusObjectSkeleton; cdecl; g_dbus_object_skeleton_remove_interface: procedure(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_object_skeleton_remove_interface_by_name: procedure(object_: PGDBusObjectSkeleton; interface_name: Pgchar); cdecl; g_dbus_object_skeleton_set_object_path: procedure(object_: PGDBusObjectSkeleton; object_path: Pgchar); cdecl; g_dbus_property_info_get_type: function:TGType; cdecl; g_dbus_property_info_ref: function(info: PGDBusPropertyInfo): PGDBusPropertyInfo; cdecl; g_dbus_property_info_unref: procedure(info: PGDBusPropertyInfo); cdecl; g_dbus_proxy_call: procedure(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_call_finish: function(proxy: PGDBusProxy; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_sync: function(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_with_unix_fd_list: procedure(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_call_with_unix_fd_list_finish: function(proxy: PGDBusProxy; out_fd_list: PPGUnixFDList; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_with_unix_fd_list_sync: function(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; out_fd_list: PPGUnixFDList; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_proxy_get_cached_property: function(proxy: PGDBusProxy; property_name: Pgchar): PGVariant; cdecl; g_dbus_proxy_get_cached_property_names: function(proxy: PGDBusProxy): PPgchar; cdecl; g_dbus_proxy_get_connection: function(proxy: PGDBusProxy): PGDBusConnection; cdecl; g_dbus_proxy_get_default_timeout: function(proxy: PGDBusProxy): gint; cdecl; g_dbus_proxy_get_flags: function(proxy: PGDBusProxy): TGDBusProxyFlags; cdecl; g_dbus_proxy_get_interface_info: function(proxy: PGDBusProxy): PGDBusInterfaceInfo; cdecl; g_dbus_proxy_get_interface_name: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_name: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_name_owner: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_object_path: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_type: function:TGType; cdecl; g_dbus_proxy_new: procedure(connection: PGDBusConnection; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_for_bus: procedure(bus_type: TGBusType; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_new_for_bus_finish: function(res: PGAsyncResult; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_for_bus_sync: function(bus_type: TGBusType; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_sync: function(connection: PGDBusConnection; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_set_cached_property: procedure(proxy: PGDBusProxy; property_name: Pgchar; value: PGVariant); cdecl; g_dbus_proxy_set_default_timeout: procedure(proxy: PGDBusProxy; timeout_msec: gint); cdecl; g_dbus_proxy_set_interface_info: procedure(proxy: PGDBusProxy; info: PGDBusInterfaceInfo); cdecl; g_dbus_server_get_client_address: function(server: PGDBusServer): Pgchar; cdecl; g_dbus_server_get_flags: function(server: PGDBusServer): TGDBusServerFlags; cdecl; g_dbus_server_get_guid: function(server: PGDBusServer): Pgchar; cdecl; g_dbus_server_get_type: function:TGType; cdecl; g_dbus_server_is_active: function(server: PGDBusServer): gboolean; cdecl; g_dbus_server_new_sync: function(address: Pgchar; flags: TGDBusServerFlags; guid: Pgchar; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusServer; cdecl; g_dbus_server_start: procedure(server: PGDBusServer); cdecl; g_dbus_server_stop: procedure(server: PGDBusServer); cdecl; g_dbus_signal_info_get_type: function:TGType; cdecl; g_dbus_signal_info_ref: function(info: PGDBusSignalInfo): PGDBusSignalInfo; cdecl; g_dbus_signal_info_unref: procedure(info: PGDBusSignalInfo); cdecl; g_desktop_app_info_get_boolean: function(info: PGDesktopAppInfo; key: Pgchar): gboolean; cdecl; g_desktop_app_info_get_categories: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_filename: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_generic_name: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_is_hidden: function(info: PGDesktopAppInfo): gboolean; cdecl; g_desktop_app_info_get_keywords: function(info: PGDesktopAppInfo): PPgchar; cdecl; g_desktop_app_info_get_nodisplay: function(info: PGDesktopAppInfo): gboolean; cdecl; g_desktop_app_info_get_show_in: function(info: PGDesktopAppInfo; desktop_env: Pgchar): gboolean; cdecl; g_desktop_app_info_get_startup_wm_class: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_string: function(info: PGDesktopAppInfo; key: Pgchar): Pgchar; cdecl; g_desktop_app_info_get_type: function:TGType; cdecl; g_desktop_app_info_has_key: function(info: PGDesktopAppInfo; key: Pgchar): gboolean; cdecl; g_desktop_app_info_launch_uris_as_manager: function(appinfo: PGDesktopAppInfo; uris: PGList; launch_context: PGAppLaunchContext; spawn_flags: TGSpawnFlags; user_setup: TGSpawnChildSetupFunc; user_setup_data: gpointer; pid_callback: TGDesktopAppLaunchCallback; pid_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_desktop_app_info_lookup_get_type: function:TGType; cdecl; g_desktop_app_info_new: function(desktop_id: Pgchar): PGDesktopAppInfo; cdecl; g_desktop_app_info_new_from_filename: function(filename: Pgchar): PGDesktopAppInfo; cdecl; g_desktop_app_info_new_from_keyfile: function(key_file: PGKeyFile): PGDesktopAppInfo; cdecl; g_desktop_app_info_set_desktop_env: procedure(desktop_env: Pgchar); cdecl; g_drive_can_eject: function(drive: PGDrive): gboolean; cdecl; g_drive_can_poll_for_media: function(drive: PGDrive): gboolean; cdecl; g_drive_can_start: function(drive: PGDrive): gboolean; cdecl; g_drive_can_start_degraded: function(drive: PGDrive): gboolean; cdecl; g_drive_can_stop: function(drive: PGDrive): gboolean; cdecl; g_drive_eject_with_operation: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_eject_with_operation_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_enumerate_identifiers: function(drive: PGDrive): PPgchar; cdecl; g_drive_get_icon: function(drive: PGDrive): PGIcon; cdecl; g_drive_get_identifier: function(drive: PGDrive; kind: Pgchar): Pgchar; cdecl; g_drive_get_name: function(drive: PGDrive): Pgchar; cdecl; g_drive_get_sort_key: function(drive: PGDrive): Pgchar; cdecl; g_drive_get_start_stop_type: function(drive: PGDrive): TGDriveStartStopType; cdecl; g_drive_get_symbolic_icon: function(drive: PGDrive): PGIcon; cdecl; g_drive_get_type: function:TGType; cdecl; g_drive_get_volumes: function(drive: PGDrive): PGList; cdecl; g_drive_has_media: function(drive: PGDrive): gboolean; cdecl; g_drive_has_volumes: function(drive: PGDrive): gboolean; cdecl; g_drive_is_media_check_automatic: function(drive: PGDrive): gboolean; cdecl; g_drive_is_media_removable: function(drive: PGDrive): gboolean; cdecl; g_drive_poll_for_media: procedure(drive: PGDrive; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_poll_for_media_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_start: procedure(drive: PGDrive; flags: TGDriveStartFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_start_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_stop: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_stop_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_emblem_get_icon: function(emblem: PGEmblem): PGIcon; cdecl; g_emblem_get_origin: function(emblem: PGEmblem): TGEmblemOrigin; cdecl; g_emblem_get_type: function:TGType; cdecl; g_emblem_new: function(icon: PGIcon): PGEmblem; cdecl; g_emblem_new_with_origin: function(icon: PGIcon; origin: TGEmblemOrigin): PGEmblem; cdecl; g_emblemed_icon_add_emblem: procedure(emblemed: PGEmblemedIcon; emblem: PGEmblem); cdecl; g_emblemed_icon_clear_emblems: procedure(emblemed: PGEmblemedIcon); cdecl; g_emblemed_icon_get_emblems: function(emblemed: PGEmblemedIcon): PGList; cdecl; g_emblemed_icon_get_icon: function(emblemed: PGEmblemedIcon): PGIcon; cdecl; g_emblemed_icon_get_type: function:TGType; cdecl; g_emblemed_icon_new: function(icon: PGIcon; emblem: PGEmblem): PGEmblemedIcon; cdecl; g_file_append_to: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_append_to_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_append_to_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_attribute_info_list_add: procedure(list: PGFileAttributeInfoList; name: Pgchar; type_: TGFileAttributeType; flags: TGFileAttributeInfoFlags); cdecl; g_file_attribute_info_list_dup: function(list: PGFileAttributeInfoList): PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_get_type: function:TGType; cdecl; g_file_attribute_info_list_lookup: function(list: PGFileAttributeInfoList; name: Pgchar): PGFileAttributeInfo; cdecl; g_file_attribute_info_list_new: function: PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_ref: function(list: PGFileAttributeInfoList): PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_unref: procedure(list: PGFileAttributeInfoList); cdecl; g_file_attribute_matcher_enumerate_namespace: function(matcher: PGFileAttributeMatcher; ns: Pgchar): gboolean; cdecl; g_file_attribute_matcher_enumerate_next: function(matcher: PGFileAttributeMatcher): Pgchar; cdecl; g_file_attribute_matcher_get_type: function:TGType; cdecl; g_file_attribute_matcher_matches: function(matcher: PGFileAttributeMatcher; attribute: Pgchar): gboolean; cdecl; g_file_attribute_matcher_matches_only: function(matcher: PGFileAttributeMatcher; attribute: Pgchar): gboolean; cdecl; g_file_attribute_matcher_new: function(attributes: Pgchar): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_ref: function(matcher: PGFileAttributeMatcher): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_subtract: function(matcher: PGFileAttributeMatcher; subtract: PGFileAttributeMatcher): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_to_string: function(matcher: PGFileAttributeMatcher): Pgchar; cdecl; g_file_attribute_matcher_unref: procedure(matcher: PGFileAttributeMatcher); cdecl; g_file_copy: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_file_copy_async: procedure(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; io_priority: gint; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_copy_attributes: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_copy_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_create: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_create_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_create_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_create_readwrite: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_create_readwrite_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_create_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_delete: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_delete_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_delete_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_descriptor_based_get_fd: function(fd_based: PGFileDescriptorBased): gint; cdecl; g_file_descriptor_based_get_type: function:TGType; cdecl; g_file_dup: function(file_: PGFile): PGFile; cdecl; g_file_eject_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_eject_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_enumerate_children: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileEnumerator; cdecl; g_file_enumerate_children_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerate_children_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileEnumerator; cdecl; g_file_enumerator_close: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_enumerator_close_async: procedure(enumerator: PGFileEnumerator; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerator_close_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_enumerator_get_child: function(enumerator: PGFileEnumerator; info: PGFileInfo): PGFile; cdecl; g_file_enumerator_get_container: function(enumerator: PGFileEnumerator): PGFile; cdecl; g_file_enumerator_get_type: function:TGType; cdecl; g_file_enumerator_has_pending: function(enumerator: PGFileEnumerator): gboolean; cdecl; g_file_enumerator_is_closed: function(enumerator: PGFileEnumerator): gboolean; cdecl; g_file_enumerator_next_file: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_enumerator_next_files_async: procedure(enumerator: PGFileEnumerator; num_files: gint; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerator_next_files_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_file_enumerator_set_pending: procedure(enumerator: PGFileEnumerator; pending: gboolean); cdecl; g_file_equal: function(file1: PGFile; file2: PGFile): gboolean; cdecl; g_file_find_enclosing_mount: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGMount; cdecl; g_file_find_enclosing_mount_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_find_enclosing_mount_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGMount; cdecl; g_file_get_basename: function(file_: PGFile): Pgchar; cdecl; g_file_get_child: function(file_: PGFile; name: Pgchar): PGFile; cdecl; g_file_get_child_for_display_name: function(file_: PGFile; display_name: Pgchar; error: PPGError): PGFile; cdecl; g_file_get_parent: function(file_: PGFile): PGFile; cdecl; g_file_get_parse_name: function(file_: PGFile): Pgchar; cdecl; g_file_get_path: function(file_: PGFile): Pgchar; cdecl; g_file_get_relative_path: function(parent: PGFile; descendant: PGFile): Pgchar; cdecl; g_file_get_type: function:TGType; cdecl; g_file_get_uri: function(file_: PGFile): Pgchar; cdecl; g_file_get_uri_scheme: function(file_: PGFile): Pgchar; cdecl; g_file_has_parent: function(file_: PGFile; parent: PGFile): gboolean; cdecl; g_file_has_prefix: function(file_: PGFile; prefix: PGFile): gboolean; cdecl; g_file_has_uri_scheme: function(file_: PGFile; uri_scheme: Pgchar): gboolean; cdecl; g_file_hash: function(file_: PGFile): guint; cdecl; g_file_icon_get_file: function(icon: PGFileIcon): PGFile; cdecl; g_file_icon_get_type: function:TGType; cdecl; g_file_icon_new: function(file_: PGFile): PGFileIcon; cdecl; g_file_info_clear_status: procedure(info: PGFileInfo); cdecl; g_file_info_copy_into: procedure(src_info: PGFileInfo; dest_info: PGFileInfo); cdecl; g_file_info_dup: function(other: PGFileInfo): PGFileInfo; cdecl; g_file_info_get_attribute_as_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_boolean: function(info: PGFileInfo; attribute: Pgchar): gboolean; cdecl; g_file_info_get_attribute_byte_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_data: function(info: PGFileInfo; attribute: Pgchar; type_: PGFileAttributeType; value_pp: Pgpointer; status: PGFileAttributeStatus): gboolean; cdecl; g_file_info_get_attribute_int32: function(info: PGFileInfo; attribute: Pgchar): gint32; cdecl; g_file_info_get_attribute_int64: function(info: PGFileInfo; attribute: Pgchar): gint64; cdecl; g_file_info_get_attribute_object: function(info: PGFileInfo; attribute: Pgchar): PGObject; cdecl; g_file_info_get_attribute_status: function(info: PGFileInfo; attribute: Pgchar): TGFileAttributeStatus; cdecl; g_file_info_get_attribute_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_stringv: function(info: PGFileInfo; attribute: Pgchar): PPgchar; cdecl; g_file_info_get_attribute_type: function(info: PGFileInfo; attribute: Pgchar): TGFileAttributeType; cdecl; g_file_info_get_attribute_uint32: function(info: PGFileInfo; attribute: Pgchar): guint32; cdecl; g_file_info_get_attribute_uint64: function(info: PGFileInfo; attribute: Pgchar): guint64; cdecl; g_file_info_get_content_type: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_deletion_date: function(info: PGFileInfo): PGDateTime; cdecl; g_file_info_get_display_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_edit_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_etag: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_file_type: function(info: PGFileInfo): TGFileType; cdecl; g_file_info_get_icon: function(info: PGFileInfo): PGIcon; cdecl; g_file_info_get_is_backup: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_is_hidden: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_is_symlink: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_modification_time: procedure(info: PGFileInfo; result_: PGTimeVal); cdecl; g_file_info_get_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_size: function(info: PGFileInfo): gint64; cdecl; g_file_info_get_sort_order: function(info: PGFileInfo): gint32; cdecl; g_file_info_get_symbolic_icon: function(info: PGFileInfo): PGIcon; cdecl; g_file_info_get_symlink_target: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_type: function:TGType; cdecl; g_file_info_has_attribute: function(info: PGFileInfo; attribute: Pgchar): gboolean; cdecl; g_file_info_has_namespace: function(info: PGFileInfo; name_space: Pgchar): gboolean; cdecl; g_file_info_list_attributes: function(info: PGFileInfo; name_space: Pgchar): PPgchar; cdecl; g_file_info_new: function: PGFileInfo; cdecl; g_file_info_remove_attribute: procedure(info: PGFileInfo; attribute: Pgchar); cdecl; g_file_info_set_attribute: procedure(info: PGFileInfo; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer); cdecl; g_file_info_set_attribute_boolean: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gboolean); cdecl; g_file_info_set_attribute_byte_string: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: Pgchar); cdecl; g_file_info_set_attribute_int32: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gint32); cdecl; g_file_info_set_attribute_int64: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gint64); cdecl; g_file_info_set_attribute_mask: procedure(info: PGFileInfo; mask: PGFileAttributeMatcher); cdecl; g_file_info_set_attribute_object: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: PGObject); cdecl; g_file_info_set_attribute_status: function(info: PGFileInfo; attribute: Pgchar; status: TGFileAttributeStatus): gboolean; cdecl; g_file_info_set_attribute_string: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: Pgchar); cdecl; g_file_info_set_attribute_stringv: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: PPgchar); cdecl; g_file_info_set_attribute_uint32: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: guint32); cdecl; g_file_info_set_attribute_uint64: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: guint64); cdecl; g_file_info_set_content_type: procedure(info: PGFileInfo; content_type: Pgchar); cdecl; g_file_info_set_display_name: procedure(info: PGFileInfo; display_name: Pgchar); cdecl; g_file_info_set_edit_name: procedure(info: PGFileInfo; edit_name: Pgchar); cdecl; g_file_info_set_file_type: procedure(info: PGFileInfo; type_: TGFileType); cdecl; g_file_info_set_icon: procedure(info: PGFileInfo; icon: PGIcon); cdecl; g_file_info_set_is_hidden: procedure(info: PGFileInfo; is_hidden: gboolean); cdecl; g_file_info_set_is_symlink: procedure(info: PGFileInfo; is_symlink: gboolean); cdecl; g_file_info_set_modification_time: procedure(info: PGFileInfo; mtime: PGTimeVal); cdecl; g_file_info_set_name: procedure(info: PGFileInfo; name: Pgchar); cdecl; g_file_info_set_size: procedure(info: PGFileInfo; size: gint64); cdecl; g_file_info_set_sort_order: procedure(info: PGFileInfo; sort_order: gint32); cdecl; g_file_info_set_symbolic_icon: procedure(info: PGFileInfo; icon: PGIcon); cdecl; g_file_info_set_symlink_target: procedure(info: PGFileInfo; symlink_target: Pgchar); cdecl; g_file_info_unset_attribute_mask: procedure(info: PGFileInfo); cdecl; g_file_input_stream_get_type: function:TGType; cdecl; g_file_input_stream_query_info: function(stream: PGFileInputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_input_stream_query_info_async: procedure(stream: PGFileInputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_input_stream_query_info_finish: function(stream: PGFileInputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_io_stream_get_etag: function(stream: PGFileIOStream): Pgchar; cdecl; g_file_io_stream_get_type: function:TGType; cdecl; g_file_io_stream_query_info: function(stream: PGFileIOStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_io_stream_query_info_async: procedure(stream: PGFileIOStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_io_stream_query_info_finish: function(stream: PGFileIOStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_is_native: function(file_: PGFile): gboolean; cdecl; g_file_load_contents: function(file_: PGFile; cancellable: PGCancellable; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_load_contents_async: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_load_contents_finish: function(file_: PGFile; res: PGAsyncResult; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_load_partial_contents_async: procedure(file_: PGFile; cancellable: PGCancellable; read_more_callback: TGFileReadMoreCallback; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_load_partial_contents_finish: function(file_: PGFile; res: PGAsyncResult; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_make_directory: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_make_directory_with_parents: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_make_symbolic_link: function(file_: PGFile; symlink_value: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_monitor: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_cancel: function(monitor: PGFileMonitor): gboolean; cdecl; g_file_monitor_directory: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_emit_event: procedure(monitor: PGFileMonitor; child: PGFile; other_file: PGFile; event_type: TGFileMonitorEvent); cdecl; g_file_monitor_file: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_get_type: function:TGType; cdecl; g_file_monitor_is_cancelled: function(monitor: PGFileMonitor): gboolean; cdecl; g_file_monitor_set_rate_limit: procedure(monitor: PGFileMonitor; limit_msecs: gint); cdecl; g_file_mount_enclosing_volume: procedure(location: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_mount_enclosing_volume_finish: function(location: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_mount_mountable: procedure(file_: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_mount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): PGFile; cdecl; g_file_move: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_file_new_for_commandline_arg: function(arg: Pgchar): PGFile; cdecl; g_file_new_for_commandline_arg_and_cwd: function(arg: Pgchar; cwd: Pgchar): PGFile; cdecl; g_file_new_for_path: function(path: Pgchar): PGFile; cdecl; g_file_new_for_uri: function(uri: Pgchar): PGFile; cdecl; g_file_new_tmp: function(tmpl: Pgchar; iostream: PPGFileIOStream; error: PPGError): PGFile; cdecl; g_file_open_readwrite: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_open_readwrite_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_open_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_output_stream_get_etag: function(stream: PGFileOutputStream): Pgchar; cdecl; g_file_output_stream_get_type: function:TGType; cdecl; g_file_output_stream_query_info: function(stream: PGFileOutputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_output_stream_query_info_async: procedure(stream: PGFileOutputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_output_stream_query_info_finish: function(stream: PGFileOutputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_parse_name: function(parse_name: Pgchar): PGFile; cdecl; g_file_poll_mountable: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_poll_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_query_default_handler: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGAppInfo; cdecl; g_file_query_exists: function(file_: PGFile; cancellable: PGCancellable): gboolean; cdecl; g_file_query_file_type: function(file_: PGFile; flags: TGFileQueryInfoFlags; cancellable: PGCancellable): TGFileType; cdecl; g_file_query_filesystem_info: function(file_: PGFile; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_query_filesystem_info_async: procedure(file_: PGFile; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_query_filesystem_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_query_info: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_query_info_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_query_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_query_settable_attributes: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; g_file_query_writable_namespaces: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; g_file_read: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileInputStream; cdecl; g_file_read_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_read_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInputStream; cdecl; g_file_replace: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_replace_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_contents: function(file_: PGFile; contents: Pgchar; length: gsize; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; new_etag: PPgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_replace_contents_async: procedure(file_: PGFile; contents: Pgchar; length: gsize; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_contents_finish: function(file_: PGFile; res: PGAsyncResult; new_etag: PPgchar; error: PPGError): gboolean; cdecl; g_file_replace_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_replace_readwrite: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_replace_readwrite_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_resolve_relative_path: function(file_: PGFile; relative_path: Pgchar): PGFile; cdecl; g_file_set_attribute: function(file_: PGFile; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_byte_string: function(file_: PGFile; attribute: Pgchar; value: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_int32: function(file_: PGFile; attribute: Pgchar; value: gint32; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_int64: function(file_: PGFile; attribute: Pgchar; value: gint64; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_string: function(file_: PGFile; attribute: Pgchar; value: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_uint32: function(file_: PGFile; attribute: Pgchar; value: guint32; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_uint64: function(file_: PGFile; attribute: Pgchar; value: guint64; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attributes_async: procedure(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_set_attributes_finish: function(file_: PGFile; result_: PGAsyncResult; info: PPGFileInfo; error: PPGError): gboolean; cdecl; g_file_set_attributes_from_info: function(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_display_name: function(file_: PGFile; display_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGFile; cdecl; g_file_set_display_name_async: procedure(file_: PGFile; display_name: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_set_display_name_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFile; cdecl; g_file_start_mountable: procedure(file_: PGFile; flags: TGDriveStartFlags; start_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_start_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_stop_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_stop_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_supports_thread_contexts: function(file_: PGFile): gboolean; cdecl; g_file_trash: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_unmount_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_unmount_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_filename_completer_get_completion_suffix: function(completer: PGFilenameCompleter; initial_text: Pgchar): Pgchar; cdecl; g_filename_completer_get_completions: function(completer: PGFilenameCompleter; initial_text: Pgchar): PPgchar; cdecl; g_filename_completer_get_type: function:TGType; cdecl; g_filename_completer_new: function: PGFilenameCompleter; cdecl; g_filename_completer_set_dirs_only: procedure(completer: PGFilenameCompleter; dirs_only: gboolean); cdecl; g_filter_input_stream_get_base_stream: function(stream: PGFilterInputStream): PGInputStream; cdecl; g_filter_input_stream_get_close_base_stream: function(stream: PGFilterInputStream): gboolean; cdecl; g_filter_input_stream_get_type: function:TGType; cdecl; g_filter_input_stream_set_close_base_stream: procedure(stream: PGFilterInputStream; close_base: gboolean); cdecl; g_filter_output_stream_get_base_stream: function(stream: PGFilterOutputStream): PGOutputStream; cdecl; g_filter_output_stream_get_close_base_stream: function(stream: PGFilterOutputStream): gboolean; cdecl; g_filter_output_stream_get_type: function:TGType; cdecl; g_filter_output_stream_set_close_base_stream: procedure(stream: PGFilterOutputStream; close_base: gboolean); cdecl; g_icon_equal: function(icon1: PGIcon; icon2: PGIcon): gboolean; cdecl; g_icon_get_type: function:TGType; cdecl; g_icon_hash: function(icon: Pgpointer): guint; cdecl; g_icon_new_for_string: function(str: Pgchar; error: PPGError): PGIcon; cdecl; g_icon_to_string: function(icon: PGIcon): Pgchar; cdecl; g_inet_address_equal: function(address: PGInetAddress; other_address: PGInetAddress): gboolean; cdecl; g_inet_address_get_family: function(address: PGInetAddress): TGSocketFamily; cdecl; g_inet_address_get_is_any: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_link_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_loopback: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_global: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_link_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_node_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_org_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_site_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_multicast: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_site_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_native_size: function(address: PGInetAddress): gsize; cdecl; g_inet_address_get_type: function:TGType; cdecl; g_inet_address_mask_equal: function(mask: PGInetAddressMask; mask2: PGInetAddressMask): gboolean; cdecl; g_inet_address_mask_get_address: function(mask: PGInetAddressMask): PGInetAddress; cdecl; g_inet_address_mask_get_family: function(mask: PGInetAddressMask): TGSocketFamily; cdecl; g_inet_address_mask_get_length: function(mask: PGInetAddressMask): guint; cdecl; g_inet_address_mask_get_type: function:TGType; cdecl; g_inet_address_mask_matches: function(mask: PGInetAddressMask; address: PGInetAddress): gboolean; cdecl; g_inet_address_mask_new: function(addr: PGInetAddress; length: guint; error: PPGError): PGInetAddressMask; cdecl; g_inet_address_mask_new_from_string: function(mask_string: Pgchar; error: PPGError): PGInetAddressMask; cdecl; g_inet_address_mask_to_string: function(mask: PGInetAddressMask): Pgchar; cdecl; g_inet_address_new_any: function(family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_new_from_bytes: function(bytes: Pguint8; family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_new_from_string: function(string_: Pgchar): PGInetAddress; cdecl; g_inet_address_new_loopback: function(family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_to_bytes: function(address: PGInetAddress): Pguint8; cdecl; g_inet_address_to_string: function(address: PGInetAddress): Pgchar; cdecl; g_inet_socket_address_get_address: function(address: PGInetSocketAddress): PGInetAddress; cdecl; g_inet_socket_address_get_flowinfo: function(address: PGInetSocketAddress): guint32; cdecl; g_inet_socket_address_get_port: function(address: PGInetSocketAddress): guint16; cdecl; g_inet_socket_address_get_scope_id: function(address: PGInetSocketAddress): guint32; cdecl; g_inet_socket_address_get_type: function:TGType; cdecl; g_inet_socket_address_new: function(address: PGInetAddress; port: guint16): PGInetSocketAddress; cdecl; g_initable_get_type: function:TGType; cdecl; g_initable_init: function(initable: PGInitable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_initable_new: function(object_type: TGType; cancellable: PGCancellable; error: PPGError; first_property_name: Pgchar; args: array of const): PGObject; cdecl; g_initable_new_valist: function(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list; cancellable: PGCancellable; error: PPGError): PGObject; cdecl; g_initable_newv: function(object_type: TGType; n_parameters: guint; parameters: PGParameter; cancellable: PGCancellable; error: PPGError): PGObject; cdecl; g_input_stream_clear_pending: procedure(stream: PGInputStream); cdecl; g_input_stream_close: function(stream: PGInputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_input_stream_close_async: procedure(stream: PGInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_close_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_input_stream_get_type: function:TGType; cdecl; g_input_stream_has_pending: function(stream: PGInputStream): gboolean; cdecl; g_input_stream_is_closed: function(stream: PGInputStream): gboolean; cdecl; g_input_stream_read: function(stream: PGInputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_input_stream_read_all: function(stream: PGInputStream; buffer: Pguint8; count: gsize; bytes_read: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_input_stream_read_async: procedure(stream: PGInputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_read_bytes: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): PGBytes; cdecl; g_input_stream_read_bytes_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_read_bytes_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): PGBytes; cdecl; g_input_stream_read_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_input_stream_set_pending: function(stream: PGInputStream; error: PPGError): gboolean; cdecl; g_input_stream_skip: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_input_stream_skip_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_skip_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_io_error_from_errno: function(err_no: gint): TGIOErrorEnum; cdecl; g_io_error_quark: function: TGQuark; cdecl; g_io_extension_get_name: function(extension: PGIOExtension): Pgchar; cdecl; g_io_extension_get_priority: function(extension: PGIOExtension): gint; cdecl; g_io_extension_get_type: function(extension: PGIOExtension): TGType; cdecl; g_io_extension_point_get_extension_by_name: function(extension_point: PGIOExtensionPoint; name: Pgchar): PGIOExtension; cdecl; g_io_extension_point_get_extensions: function(extension_point: PGIOExtensionPoint): PGList; cdecl; g_io_extension_point_get_required_type: function(extension_point: PGIOExtensionPoint): TGType; cdecl; g_io_extension_point_implement: function(extension_point_name: Pgchar; type_: TGType; extension_name: Pgchar; priority: gint): PGIOExtension; cdecl; g_io_extension_point_lookup: function(name: Pgchar): PGIOExtensionPoint; cdecl; g_io_extension_point_register: function(name: Pgchar): PGIOExtensionPoint; cdecl; g_io_extension_point_set_required_type: procedure(extension_point: PGIOExtensionPoint; type_: TGType); cdecl; g_io_extension_ref_class: function(extension: PGIOExtension): PGTypeClass; cdecl; g_io_module_get_type: function:TGType; cdecl; g_io_module_new: function(filename: Pgchar): PGIOModule; cdecl; g_io_module_scope_block: procedure(scope: PGIOModuleScope; basename: Pgchar); cdecl; g_io_module_scope_free: procedure(scope: PGIOModuleScope); cdecl; g_io_module_scope_new: function(flags: TGIOModuleScopeFlags): PGIOModuleScope; cdecl; g_io_modules_load_all_in_directory: function(dirname: Pgchar): PGList; cdecl; g_io_modules_load_all_in_directory_with_scope: function(dirname: Pgchar; scope: PGIOModuleScope): PGList; cdecl; g_io_modules_scan_all_in_directory: procedure(dirname: Pgchar); cdecl; g_io_modules_scan_all_in_directory_with_scope: procedure(dirname: Pgchar; scope: PGIOModuleScope); cdecl; g_io_scheduler_cancel_all_jobs: procedure; cdecl; g_io_scheduler_push_job: procedure(job_func: TGIOSchedulerJobFunc; user_data: gpointer; notify: TGDestroyNotify; io_priority: gint; cancellable: PGCancellable); cdecl; g_io_stream_clear_pending: procedure(stream: PGIOStream); cdecl; g_io_stream_close: function(stream: PGIOStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_io_stream_close_async: procedure(stream: PGIOStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_io_stream_close_finish: function(stream: PGIOStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_io_stream_get_input_stream: function(stream: PGIOStream): PGInputStream; cdecl; g_io_stream_get_output_stream: function(stream: PGIOStream): PGOutputStream; cdecl; g_io_stream_get_type: function:TGType; cdecl; g_io_stream_has_pending: function(stream: PGIOStream): gboolean; cdecl; g_io_stream_is_closed: function(stream: PGIOStream): gboolean; cdecl; g_io_stream_set_pending: function(stream: PGIOStream; error: PPGError): gboolean; cdecl; g_io_stream_splice_async: procedure(stream1: PGIOStream; stream2: PGIOStream; flags: TGIOStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_io_stream_splice_finish: function(result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_loadable_icon_get_type: function:TGType; cdecl; g_loadable_icon_load: function(icon: PGLoadableIcon; size: gint; type_: PPgchar; cancellable: PGCancellable; error: PPGError): PGInputStream; cdecl; g_loadable_icon_load_async: procedure(icon: PGLoadableIcon; size: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_loadable_icon_load_finish: function(icon: PGLoadableIcon; res: PGAsyncResult; type_: PPgchar; error: PPGError): PGInputStream; cdecl; g_memory_input_stream_add_bytes: procedure(stream: PGMemoryInputStream; bytes: PGBytes); cdecl; g_memory_input_stream_add_data: procedure(stream: PGMemoryInputStream; data: Pguint8; len: gssize; destroy_: TGDestroyNotify); cdecl; g_memory_input_stream_get_type: function:TGType; cdecl; g_memory_input_stream_new: function: PGMemoryInputStream; cdecl; g_memory_input_stream_new_from_bytes: function(bytes: PGBytes): PGMemoryInputStream; cdecl; g_memory_input_stream_new_from_data: function(data: Pguint8; len: gssize; destroy_: TGDestroyNotify): PGMemoryInputStream; cdecl; g_memory_output_stream_get_data: function(ostream: PGMemoryOutputStream): gpointer; cdecl; g_memory_output_stream_get_data_size: function(ostream: PGMemoryOutputStream): gsize; cdecl; g_memory_output_stream_get_size: function(ostream: PGMemoryOutputStream): gsize; cdecl; g_memory_output_stream_get_type: function:TGType; cdecl; g_memory_output_stream_new: function(data: gpointer; size: gsize; realloc_function: TGReallocFunc; destroy_function: TGDestroyNotify): PGMemoryOutputStream; cdecl; g_memory_output_stream_new_resizable: function: PGMemoryOutputStream; cdecl; g_memory_output_stream_steal_as_bytes: function(ostream: PGMemoryOutputStream): PGBytes; cdecl; g_memory_output_stream_steal_data: function(ostream: PGMemoryOutputStream): gpointer; cdecl; g_menu_append: procedure(menu: PGMenu; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_append_item: procedure(menu: PGMenu; item: PGMenuItem); cdecl; g_menu_append_section: procedure(menu: PGMenu; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_append_submenu: procedure(menu: PGMenu; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_attribute_iter_get_name: function(iter: PGMenuAttributeIter): Pgchar; cdecl; g_menu_attribute_iter_get_next: function(iter: PGMenuAttributeIter; out_name: PPgchar; value: PPGVariant): gboolean; cdecl; g_menu_attribute_iter_get_type: function:TGType; cdecl; g_menu_attribute_iter_get_value: function(iter: PGMenuAttributeIter): PGVariant; cdecl; g_menu_attribute_iter_next: function(iter: PGMenuAttributeIter): gboolean; cdecl; g_menu_freeze: procedure(menu: PGMenu); cdecl; g_menu_get_type: function:TGType; cdecl; g_menu_insert: procedure(menu: PGMenu; position: gint; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_insert_item: procedure(menu: PGMenu; position: gint; item: PGMenuItem); cdecl; g_menu_insert_section: procedure(menu: PGMenu; position: gint; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_insert_submenu: procedure(menu: PGMenu; position: gint; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_item_get_attribute: function(menu_item: PGMenuItem; attribute: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; g_menu_item_get_attribute_value: function(menu_item: PGMenuItem; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; g_menu_item_get_link: function(menu_item: PGMenuItem; link: Pgchar): PGMenuModel; cdecl; g_menu_item_get_type: function:TGType; cdecl; g_menu_item_new: function(label_: Pgchar; detailed_action: Pgchar): PGMenuItem; cdecl; g_menu_item_new_from_model: function(model: PGMenuModel; item_index: gint): PGMenuItem; cdecl; g_menu_item_new_section: function(label_: Pgchar; section: PGMenuModel): PGMenuItem; cdecl; g_menu_item_new_submenu: function(label_: Pgchar; submenu: PGMenuModel): PGMenuItem; cdecl; g_menu_item_set_action_and_target: procedure(menu_item: PGMenuItem; action: Pgchar; format_string: Pgchar; args: array of const); cdecl; g_menu_item_set_action_and_target_value: procedure(menu_item: PGMenuItem; action: Pgchar; target_value: PGVariant); cdecl; g_menu_item_set_attribute: procedure(menu_item: PGMenuItem; attribute: Pgchar; format_string: Pgchar; args: array of const); cdecl; g_menu_item_set_attribute_value: procedure(menu_item: PGMenuItem; attribute: Pgchar; value: PGVariant); cdecl; g_menu_item_set_detailed_action: procedure(menu_item: PGMenuItem; detailed_action: Pgchar); cdecl; g_menu_item_set_label: procedure(menu_item: PGMenuItem; label_: Pgchar); cdecl; g_menu_item_set_link: procedure(menu_item: PGMenuItem; link: Pgchar; model: PGMenuModel); cdecl; g_menu_item_set_section: procedure(menu_item: PGMenuItem; section: PGMenuModel); cdecl; g_menu_item_set_submenu: procedure(menu_item: PGMenuItem; submenu: PGMenuModel); cdecl; g_menu_link_iter_get_name: function(iter: PGMenuLinkIter): Pgchar; cdecl; g_menu_link_iter_get_next: function(iter: PGMenuLinkIter; out_link: PPgchar; value: PPGMenuModel): gboolean; cdecl; g_menu_link_iter_get_type: function:TGType; cdecl; g_menu_link_iter_get_value: function(iter: PGMenuLinkIter): PGMenuModel; cdecl; g_menu_link_iter_next: function(iter: PGMenuLinkIter): gboolean; cdecl; g_menu_model_get_item_attribute: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; g_menu_model_get_item_attribute_value: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; g_menu_model_get_item_link: function(model: PGMenuModel; item_index: gint; link: Pgchar): PGMenuModel; cdecl; g_menu_model_get_n_items: function(model: PGMenuModel): gint; cdecl; g_menu_model_get_type: function:TGType; cdecl; g_menu_model_is_mutable: function(model: PGMenuModel): gboolean; cdecl; g_menu_model_items_changed: procedure(model: PGMenuModel; position: gint; removed: gint; added: gint); cdecl; g_menu_model_iterate_item_attributes: function(model: PGMenuModel; item_index: gint): PGMenuAttributeIter; cdecl; g_menu_model_iterate_item_links: function(model: PGMenuModel; item_index: gint): PGMenuLinkIter; cdecl; g_menu_new: function: PGMenu; cdecl; g_menu_prepend: procedure(menu: PGMenu; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_prepend_item: procedure(menu: PGMenu; item: PGMenuItem); cdecl; g_menu_prepend_section: procedure(menu: PGMenu; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_prepend_submenu: procedure(menu: PGMenu; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_remove: procedure(menu: PGMenu; position: gint); cdecl; g_mount_can_eject: function(mount: PGMount): gboolean; cdecl; g_mount_can_unmount: function(mount: PGMount): gboolean; cdecl; g_mount_eject_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_eject_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_get_default_location: function(mount: PGMount): PGFile; cdecl; g_mount_get_drive: function(mount: PGMount): PGDrive; cdecl; g_mount_get_icon: function(mount: PGMount): PGIcon; cdecl; g_mount_get_name: function(mount: PGMount): Pgchar; cdecl; g_mount_get_root: function(mount: PGMount): PGFile; cdecl; g_mount_get_sort_key: function(mount: PGMount): Pgchar; cdecl; g_mount_get_symbolic_icon: function(mount: PGMount): PGIcon; cdecl; g_mount_get_type: function:TGType; cdecl; g_mount_get_uuid: function(mount: PGMount): Pgchar; cdecl; g_mount_get_volume: function(mount: PGMount): PGVolume; cdecl; g_mount_guess_content_type: procedure(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_guess_content_type_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; g_mount_guess_content_type_sync: function(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; g_mount_is_shadowed: function(mount: PGMount): gboolean; cdecl; g_mount_operation_get_anonymous: function(op: PGMountOperation): gboolean; cdecl; g_mount_operation_get_choice: function(op: PGMountOperation): gint; cdecl; g_mount_operation_get_domain: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_get_password: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_get_password_save: function(op: PGMountOperation): TGPasswordSave; cdecl; g_mount_operation_get_type: function:TGType; cdecl; g_mount_operation_get_username: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_new: function: PGMountOperation; cdecl; g_mount_operation_reply: procedure(op: PGMountOperation; result_: TGMountOperationResult); cdecl; g_mount_operation_set_anonymous: procedure(op: PGMountOperation; anonymous: gboolean); cdecl; g_mount_operation_set_choice: procedure(op: PGMountOperation; choice: gint); cdecl; g_mount_operation_set_domain: procedure(op: PGMountOperation; domain: Pgchar); cdecl; g_mount_operation_set_password: procedure(op: PGMountOperation; password: Pgchar); cdecl; g_mount_operation_set_password_save: procedure(op: PGMountOperation; save: TGPasswordSave); cdecl; g_mount_operation_set_username: procedure(op: PGMountOperation; username: Pgchar); cdecl; g_mount_remount: procedure(mount: PGMount; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_remount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_shadow: procedure(mount: PGMount); cdecl; g_mount_unmount_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_unmount_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_unshadow: procedure(mount: PGMount); cdecl; g_native_volume_monitor_get_type: function:TGType; cdecl; g_network_address_get_hostname: function(addr: PGNetworkAddress): Pgchar; cdecl; g_network_address_get_port: function(addr: PGNetworkAddress): guint16; cdecl; g_network_address_get_scheme: function(addr: PGNetworkAddress): Pgchar; cdecl; g_network_address_get_type: function:TGType; cdecl; g_network_address_new: function(hostname: Pgchar; port: guint16): PGNetworkAddress; cdecl; g_network_address_parse: function(host_and_port: Pgchar; default_port: guint16; error: PPGError): PGSocketConnectable; cdecl; g_network_address_parse_uri: function(uri: Pgchar; default_port: guint16; error: PPGError): PGSocketConnectable; cdecl; g_network_monitor_can_reach: function(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_network_monitor_can_reach_async: procedure(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_network_monitor_can_reach_finish: function(monitor: PGNetworkMonitor; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_network_monitor_get_default: function: PGNetworkMonitor; cdecl; g_network_monitor_get_network_available: function(monitor: PGNetworkMonitor): gboolean; cdecl; g_network_monitor_get_type: function:TGType; cdecl; g_network_service_get_domain: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_protocol: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_scheme: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_service: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_type: function:TGType; cdecl; g_network_service_new: function(service: Pgchar; protocol: Pgchar; domain: Pgchar): PGNetworkService; cdecl; g_network_service_set_scheme: procedure(srv: PGNetworkService; scheme: Pgchar); cdecl; g_networking_init: procedure; cdecl; g_output_stream_clear_pending: procedure(stream: PGOutputStream); cdecl; g_output_stream_close: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_close_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_close_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_output_stream_flush: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_flush_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_flush_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_output_stream_get_type: function:TGType; cdecl; g_output_stream_has_pending: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_is_closed: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_is_closing: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_set_pending: function(stream: PGOutputStream; error: PPGError): gboolean; cdecl; g_output_stream_splice: function(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_splice_async: procedure(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_splice_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_output_stream_write: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_write_all: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; bytes_written: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_write_async: procedure(stream: PGOutputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_write_bytes: function(stream: PGOutputStream; bytes: PGBytes; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_write_bytes_async: procedure(stream: PGOutputStream; bytes: PGBytes; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_write_bytes_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_output_stream_write_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_permission_acquire: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_permission_acquire_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_permission_acquire_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_permission_get_allowed: function(permission: PGPermission): gboolean; cdecl; g_permission_get_can_acquire: function(permission: PGPermission): gboolean; cdecl; g_permission_get_can_release: function(permission: PGPermission): gboolean; cdecl; g_permission_get_type: function:TGType; cdecl; g_permission_impl_update: procedure(permission: PGPermission; allowed: gboolean; can_acquire: gboolean; can_release: gboolean); cdecl; g_permission_release: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_permission_release_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_permission_release_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_pollable_input_stream_can_poll: function(stream: PGPollableInputStream): gboolean; cdecl; g_pollable_input_stream_create_source: function(stream: PGPollableInputStream; cancellable: PGCancellable): PGSource; cdecl; g_pollable_input_stream_get_type: function:TGType; cdecl; g_pollable_input_stream_is_readable: function(stream: PGPollableInputStream): gboolean; cdecl; g_pollable_input_stream_read_nonblocking: function(stream: PGPollableInputStream; buffer: Pgpointer; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_output_stream_can_poll: function(stream: PGPollableOutputStream): gboolean; cdecl; g_pollable_output_stream_create_source: function(stream: PGPollableOutputStream; cancellable: PGCancellable): PGSource; cdecl; g_pollable_output_stream_get_type: function:TGType; cdecl; g_pollable_output_stream_is_writable: function(stream: PGPollableOutputStream): gboolean; cdecl; g_pollable_output_stream_write_nonblocking: function(stream: PGPollableOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_source_new: function(pollable_stream: PGObject): PGSource; cdecl; g_pollable_source_new_full: function(pollable_stream: PGObject; child_source: PGSource; cancellable: PGCancellable): PGSource; cdecl; g_pollable_stream_read: function(stream: PGInputStream; buffer: Pgpointer; count: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_stream_write: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_stream_write_all: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; blocking: gboolean; bytes_written: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_proxy_address_enumerator_get_type: function:TGType; cdecl; g_proxy_address_get_destination_hostname: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_destination_port: function(proxy: PGProxyAddress): guint16; cdecl; g_proxy_address_get_destination_protocol: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_password: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_protocol: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_type: function:TGType; cdecl; g_proxy_address_get_uri: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_username: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_new: function(inetaddr: PGInetAddress; port: guint16; protocol: Pgchar; dest_hostname: Pgchar; dest_port: guint16; username: Pgchar; password: Pgchar): PGProxyAddress; cdecl; g_proxy_connect: function(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; g_proxy_connect_async: procedure(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_proxy_connect_finish: function(proxy: PGProxy; result_: PGAsyncResult; error: PPGError): PGIOStream; cdecl; g_proxy_get_default_for_protocol: function(protocol: Pgchar): PGProxy; cdecl; g_proxy_get_type: function:TGType; cdecl; g_proxy_resolver_get_default: function: PGProxyResolver; cdecl; g_proxy_resolver_get_type: function:TGType; cdecl; g_proxy_resolver_is_supported: function(resolver: PGProxyResolver): gboolean; cdecl; g_proxy_resolver_lookup: function(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; g_proxy_resolver_lookup_async: procedure(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_proxy_resolver_lookup_finish: function(resolver: PGProxyResolver; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; g_proxy_supports_hostname: function(proxy: PGProxy): gboolean; cdecl; g_remote_action_group_activate_action_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; parameter: PGVariant; platform_data: PGVariant); cdecl; g_remote_action_group_change_action_state_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; value: PGVariant; platform_data: PGVariant); cdecl; g_remote_action_group_get_type: function:TGType; cdecl; g_resolver_error_quark: function: TGQuark; cdecl; g_resolver_free_addresses: procedure(addresses: PGList); cdecl; g_resolver_free_targets: procedure(targets: PGList); cdecl; g_resolver_get_default: function: PGResolver; cdecl; g_resolver_get_type: function:TGType; cdecl; g_resolver_lookup_by_address: function(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_resolver_lookup_by_address_async: procedure(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_by_address_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): Pgchar; cdecl; g_resolver_lookup_by_name: function(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_by_name_async: procedure(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_by_name_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_lookup_records: function(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_records_async: procedure(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_records_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_lookup_service: function(resolver: PGResolver; service: Pgchar; protocol: Pgchar; domain: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_service_async: procedure(resolver: PGResolver; service: Pgchar; protocol: Pgchar; domain: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_service_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_set_default: procedure(resolver: PGResolver); cdecl; g_resource_enumerate_children: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PPgchar; cdecl; g_resource_error_quark: function: TGQuark; cdecl; g_resource_get_info: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; size: Pgsize; flags: Pguint32; error: PPGError): gboolean; cdecl; g_resource_get_type: function:TGType; cdecl; g_resource_load: function(filename: Pgchar; error: PPGError): PGResource; cdecl; g_resource_lookup_data: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGBytes; cdecl; g_resource_new_from_data: function(data: PGBytes; error: PPGError): PGResource; cdecl; g_resource_open_stream: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGInputStream; cdecl; g_resource_ref: function(resource: PGResource): PGResource; cdecl; g_resource_unref: procedure(resource: PGResource); cdecl; g_resources_enumerate_children: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PPgchar; cdecl; g_resources_get_info: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; size: Pgsize; flags: Pguint32; error: PPGError): gboolean; cdecl; g_resources_lookup_data: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGBytes; cdecl; g_resources_open_stream: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGInputStream; cdecl; g_resources_register: procedure(resource: PGResource); cdecl; g_resources_unregister: procedure(resource: PGResource); cdecl; g_seekable_can_seek: function(seekable: PGSeekable): gboolean; cdecl; g_seekable_can_truncate: function(seekable: PGSeekable): gboolean; cdecl; g_seekable_get_type: function:TGType; cdecl; g_seekable_seek: function(seekable: PGSeekable; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_seekable_tell: function(seekable: PGSeekable): gint64; cdecl; g_seekable_truncate: function(seekable: PGSeekable; offset: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_settings_apply: procedure(settings: PGSettings); cdecl; g_settings_bind: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; flags: TGSettingsBindFlags); cdecl; g_settings_bind_with_mapping: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; flags: TGSettingsBindFlags; get_mapping: TGSettingsBindGetMapping; set_mapping: TGSettingsBindSetMapping; user_data: gpointer; destroy_: TGDestroyNotify); cdecl; g_settings_bind_writable: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; inverted: gboolean); cdecl; g_settings_create_action: function(settings: PGSettings; key: Pgchar): PGAction; cdecl; g_settings_delay: procedure(settings: PGSettings); cdecl; g_settings_get: procedure(settings: PGSettings; key: Pgchar; format: Pgchar; args: array of const); cdecl; g_settings_get_boolean: function(settings: PGSettings; key: Pgchar): gboolean; cdecl; g_settings_get_child: function(settings: PGSettings; name: Pgchar): PGSettings; cdecl; g_settings_get_double: function(settings: PGSettings; key: Pgchar): gdouble; cdecl; g_settings_get_enum: function(settings: PGSettings; key: Pgchar): gint; cdecl; g_settings_get_flags: function(settings: PGSettings; key: Pgchar): guint; cdecl; g_settings_get_has_unapplied: function(settings: PGSettings): gboolean; cdecl; g_settings_get_int: function(settings: PGSettings; key: Pgchar): gint; cdecl; g_settings_get_mapped: function(settings: PGSettings; key: Pgchar; mapping: TGSettingsGetMapping; user_data: gpointer): gpointer; cdecl; g_settings_get_range: function(settings: PGSettings; key: Pgchar): PGVariant; cdecl; g_settings_get_string: function(settings: PGSettings; key: Pgchar): Pgchar; cdecl; g_settings_get_strv: function(settings: PGSettings; key: Pgchar): PPgchar; cdecl; g_settings_get_type: function:TGType; cdecl; g_settings_get_uint: function(settings: PGSettings; key: Pgchar): guint; cdecl; g_settings_get_value: function(settings: PGSettings; key: Pgchar): PGVariant; cdecl; g_settings_is_writable: function(settings: PGSettings; name: Pgchar): gboolean; cdecl; g_settings_list_children: function(settings: PGSettings): PPgchar; cdecl; g_settings_list_keys: function(settings: PGSettings): PPgchar; cdecl; g_settings_list_relocatable_schemas: function: PPgchar; cdecl; g_settings_list_schemas: function: PPgchar; cdecl; g_settings_new: function(schema_id: Pgchar): PGSettings; cdecl; g_settings_new_full: function(schema: PGSettingsSchema; backend: PGSettingsBackend; path: Pgchar): PGSettings; cdecl; g_settings_new_with_backend: function(schema_id: Pgchar; backend: PGSettingsBackend): PGSettings; cdecl; g_settings_new_with_backend_and_path: function(schema_id: Pgchar; backend: PGSettingsBackend; path: Pgchar): PGSettings; cdecl; g_settings_new_with_path: function(schema_id: Pgchar; path: Pgchar): PGSettings; cdecl; g_settings_range_check: function(settings: PGSettings; key: Pgchar; value: PGVariant): gboolean; cdecl; g_settings_reset: procedure(settings: PGSettings; key: Pgchar); cdecl; g_settings_revert: procedure(settings: PGSettings); cdecl; g_settings_schema_get_id: function(schema: PGSettingsSchema): Pgchar; cdecl; g_settings_schema_get_path: function(schema: PGSettingsSchema): Pgchar; cdecl; g_settings_schema_get_type: function:TGType; cdecl; g_settings_schema_ref: function(schema: PGSettingsSchema): PGSettingsSchema; cdecl; g_settings_schema_source_get_default: function: PGSettingsSchemaSource; cdecl; g_settings_schema_source_get_type: function:TGType; cdecl; g_settings_schema_source_lookup: function(source: PGSettingsSchemaSource; schema_id: Pgchar; recursive: gboolean): PGSettingsSchema; cdecl; g_settings_schema_source_new_from_directory: function(directory: Pgchar; parent: PGSettingsSchemaSource; trusted: gboolean; error: PPGError): PGSettingsSchemaSource; cdecl; g_settings_schema_source_ref: function(source: PGSettingsSchemaSource): PGSettingsSchemaSource; cdecl; g_settings_schema_source_unref: procedure(source: PGSettingsSchemaSource); cdecl; g_settings_schema_unref: procedure(schema: PGSettingsSchema); cdecl; g_settings_set: function(settings: PGSettings; key: Pgchar; format: Pgchar; args: array of const): gboolean; cdecl; g_settings_set_boolean: function(settings: PGSettings; key: Pgchar; value: gboolean): gboolean; cdecl; g_settings_set_double: function(settings: PGSettings; key: Pgchar; value: gdouble): gboolean; cdecl; g_settings_set_enum: function(settings: PGSettings; key: Pgchar; value: gint): gboolean; cdecl; g_settings_set_flags: function(settings: PGSettings; key: Pgchar; value: guint): gboolean; cdecl; g_settings_set_int: function(settings: PGSettings; key: Pgchar; value: gint): gboolean; cdecl; g_settings_set_string: function(settings: PGSettings; key: Pgchar; value: Pgchar): gboolean; cdecl; g_settings_set_strv: function(settings: PGSettings; key: Pgchar; value: PPgchar): gboolean; cdecl; g_settings_set_uint: function(settings: PGSettings; key: Pgchar; value: guint): gboolean; cdecl; g_settings_set_value: function(settings: PGSettings; key: Pgchar; value: PGVariant): gboolean; cdecl; g_settings_sync: procedure; cdecl; g_settings_unbind: procedure(object_: gpointer; property_: Pgchar); cdecl; g_simple_action_get_type: function:TGType; cdecl; g_simple_action_group_add_entries: procedure(simple: PGSimpleActionGroup; entries: PGActionEntry; n_entries: gint; user_data: gpointer); cdecl; g_simple_action_group_get_type: function:TGType; cdecl; g_simple_action_group_insert: procedure(simple: PGSimpleActionGroup; action: PGAction); cdecl; g_simple_action_group_lookup: function(simple: PGSimpleActionGroup; action_name: Pgchar): PGAction; cdecl; g_simple_action_group_new: function: PGSimpleActionGroup; cdecl; g_simple_action_group_remove: procedure(simple: PGSimpleActionGroup; action_name: Pgchar); cdecl; g_simple_action_new: function(name: Pgchar; parameter_type: PGVariantType): PGSimpleAction; cdecl; g_simple_action_new_stateful: function(name: Pgchar; parameter_type: PGVariantType; state: PGVariant): PGSimpleAction; cdecl; g_simple_action_set_enabled: procedure(simple: PGSimpleAction; enabled: gboolean); cdecl; g_simple_action_set_state: procedure(simple: PGSimpleAction; value: PGVariant); cdecl; g_simple_async_report_error_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_simple_async_report_gerror_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError); cdecl; g_simple_async_report_take_gerror_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError); cdecl; g_simple_async_result_complete: procedure(simple: PGSimpleAsyncResult); cdecl; g_simple_async_result_complete_in_idle: procedure(simple: PGSimpleAsyncResult); cdecl; g_simple_async_result_get_op_res_gboolean: function(simple: PGSimpleAsyncResult): gboolean; cdecl; g_simple_async_result_get_op_res_gpointer: function(simple: PGSimpleAsyncResult): gpointer; cdecl; g_simple_async_result_get_op_res_gssize: function(simple: PGSimpleAsyncResult): gssize; cdecl; g_simple_async_result_get_source_tag: function(simple: PGSimpleAsyncResult): gpointer; cdecl; g_simple_async_result_get_type: function:TGType; cdecl; g_simple_async_result_is_valid: function(result_: PGAsyncResult; source: PGObject; source_tag: gpointer): gboolean; cdecl; g_simple_async_result_new: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; source_tag: gpointer): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_from_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_take_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError): PGSimpleAsyncResult; cdecl; g_simple_async_result_propagate_error: function(simple: PGSimpleAsyncResult; error: PPGError): gboolean; cdecl; g_simple_async_result_run_in_thread: procedure(simple: PGSimpleAsyncResult; func: TGSimpleAsyncThreadFunc; io_priority: gint; cancellable: PGCancellable); cdecl; g_simple_async_result_set_check_cancellable: procedure(simple: PGSimpleAsyncResult; check_cancellable: PGCancellable); cdecl; g_simple_async_result_set_error: procedure(simple: PGSimpleAsyncResult; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_simple_async_result_set_error_va: procedure(simple: PGSimpleAsyncResult; domain: TGQuark; code: gint; format: Pgchar; args: Tva_list); cdecl; g_simple_async_result_set_from_error: procedure(simple: PGSimpleAsyncResult; error: PGError); cdecl; g_simple_async_result_set_handle_cancellation: procedure(simple: PGSimpleAsyncResult; handle_cancellation: gboolean); cdecl; g_simple_async_result_set_op_res_gboolean: procedure(simple: PGSimpleAsyncResult; op_res: gboolean); cdecl; g_simple_async_result_set_op_res_gpointer: procedure(simple: PGSimpleAsyncResult; op_res: gpointer; destroy_op_res: TGDestroyNotify); cdecl; g_simple_async_result_set_op_res_gssize: procedure(simple: PGSimpleAsyncResult; op_res: gssize); cdecl; g_simple_async_result_take_error: procedure(simple: PGSimpleAsyncResult; error: PGError); cdecl; g_simple_permission_get_type: function:TGType; cdecl; g_simple_permission_new: function(allowed: gboolean): PGSimplePermission; cdecl; g_simple_proxy_resolver_get_type: function:TGType; cdecl; g_simple_proxy_resolver_new: function(default_proxy: Pgchar; ignore_hosts: PPgchar): PGProxyResolver; cdecl; g_simple_proxy_resolver_set_default_proxy: procedure(resolver: PGSimpleProxyResolver; default_proxy: Pgchar); cdecl; g_simple_proxy_resolver_set_ignore_hosts: procedure(resolver: PGSimpleProxyResolver; ignore_hosts: PPgchar); cdecl; g_simple_proxy_resolver_set_uri_proxy: procedure(resolver: PGSimpleProxyResolver; uri_scheme: Pgchar; proxy: Pgchar); cdecl; g_socket_accept: function(socket: PGSocket; cancellable: PGCancellable; error: PPGError): PGSocket; cdecl; g_socket_address_enumerator_get_type: function:TGType; cdecl; g_socket_address_enumerator_next: function(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; error: PPGError): PGSocketAddress; cdecl; g_socket_address_enumerator_next_async: procedure(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_address_enumerator_next_finish: function(enumerator: PGSocketAddressEnumerator; result_: PGAsyncResult; error: PPGError): PGSocketAddress; cdecl; g_socket_address_get_family: function(address: PGSocketAddress): TGSocketFamily; cdecl; g_socket_address_get_native_size: function(address: PGSocketAddress): gssize; cdecl; g_socket_address_get_type: function:TGType; cdecl; g_socket_address_new_from_native: function(native: gpointer; len: gsize): PGSocketAddress; cdecl; g_socket_address_to_native: function(address: PGSocketAddress; dest: gpointer; destlen: gsize; error: PPGError): gboolean; cdecl; g_socket_bind: function(socket: PGSocket; address: PGSocketAddress; allow_reuse: gboolean; error: PPGError): gboolean; cdecl; g_socket_check_connect_result: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_client_add_application_proxy: procedure(client: PGSocketClient; protocol: Pgchar); cdecl; g_socket_client_connect: function(client: PGSocketClient; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_async: procedure(client: PGSocketClient; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_host: function(client: PGSocketClient; host_and_port: Pgchar; default_port: guint16; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_host_async: procedure(client: PGSocketClient; host_and_port: Pgchar; default_port: guint16; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_host_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_service: function(client: PGSocketClient; domain: Pgchar; service: Pgchar; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_service_async: procedure(client: PGSocketClient; domain: Pgchar; service: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_service_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_uri: function(client: PGSocketClient; uri: Pgchar; default_port: guint16; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_uri_async: procedure(client: PGSocketClient; uri: Pgchar; default_port: guint16; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_uri_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_get_enable_proxy: function(client: PGSocketClient): gboolean; cdecl; g_socket_client_get_family: function(client: PGSocketClient): TGSocketFamily; cdecl; g_socket_client_get_local_address: function(client: PGSocketClient): PGSocketAddress; cdecl; g_socket_client_get_protocol: function(client: PGSocketClient): TGSocketProtocol; cdecl; g_socket_client_get_proxy_resolver: function(client: PGSocketClient): PGProxyResolver; cdecl; g_socket_client_get_socket_type: function(client: PGSocketClient): TGSocketType; cdecl; g_socket_client_get_timeout: function(client: PGSocketClient): guint; cdecl; g_socket_client_get_tls: function(client: PGSocketClient): gboolean; cdecl; g_socket_client_get_tls_validation_flags: function(client: PGSocketClient): TGTlsCertificateFlags; cdecl; g_socket_client_get_type: function:TGType; cdecl; g_socket_client_new: function: PGSocketClient; cdecl; g_socket_client_set_enable_proxy: procedure(client: PGSocketClient; enable: gboolean); cdecl; g_socket_client_set_family: procedure(client: PGSocketClient; family: TGSocketFamily); cdecl; g_socket_client_set_local_address: procedure(client: PGSocketClient; address: PGSocketAddress); cdecl; g_socket_client_set_protocol: procedure(client: PGSocketClient; protocol: TGSocketProtocol); cdecl; g_socket_client_set_proxy_resolver: procedure(client: PGSocketClient; proxy_resolver: PGProxyResolver); cdecl; g_socket_client_set_socket_type: procedure(client: PGSocketClient; type_: TGSocketType); cdecl; g_socket_client_set_timeout: procedure(client: PGSocketClient; timeout: guint); cdecl; g_socket_client_set_tls: procedure(client: PGSocketClient; tls: gboolean); cdecl; g_socket_client_set_tls_validation_flags: procedure(client: PGSocketClient; flags: TGTlsCertificateFlags); cdecl; g_socket_close: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_condition_check: function(socket: PGSocket; condition: TGIOCondition): TGIOCondition; cdecl; g_socket_condition_timed_wait: function(socket: PGSocket; condition: TGIOCondition; timeout: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_condition_wait: function(socket: PGSocket; condition: TGIOCondition; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connect: function(socket: PGSocket; address: PGSocketAddress; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connectable_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; g_socket_connectable_get_type: function:TGType; cdecl; g_socket_connectable_proxy_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; g_socket_connection_connect: function(connection: PGSocketConnection; address: PGSocketAddress; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connection_connect_async: procedure(connection: PGSocketConnection; address: PGSocketAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_connection_connect_finish: function(connection: PGSocketConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_socket_connection_factory_create_connection: function(socket: PGSocket): PGSocketConnection; cdecl; g_socket_connection_factory_lookup_type: function(family: TGSocketFamily; type_: TGSocketType; protocol_id: gint): TGType; cdecl; g_socket_connection_factory_register_type: procedure(g_type: TGType; family: TGSocketFamily; type_: TGSocketType; protocol: gint); cdecl; g_socket_connection_get_local_address: function(connection: PGSocketConnection; error: PPGError): PGSocketAddress; cdecl; g_socket_connection_get_remote_address: function(connection: PGSocketConnection; error: PPGError): PGSocketAddress; cdecl; g_socket_connection_get_socket: function(connection: PGSocketConnection): PGSocket; cdecl; g_socket_connection_get_type: function:TGType; cdecl; g_socket_connection_is_connected: function(connection: PGSocketConnection): gboolean; cdecl; g_socket_control_message_deserialize: function(level: gint; type_: gint; size: gsize; data: guint8): PGSocketControlMessage; cdecl; g_socket_control_message_get_level: function(message: PGSocketControlMessage): gint; cdecl; g_socket_control_message_get_msg_type: function(message: PGSocketControlMessage): gint; cdecl; g_socket_control_message_get_size: function(message: PGSocketControlMessage): gsize; cdecl; g_socket_control_message_get_type: function:TGType; cdecl; g_socket_control_message_serialize: procedure(message: PGSocketControlMessage; data: gpointer); cdecl; g_socket_create_source: function(socket: PGSocket; condition: TGIOCondition; cancellable: PGCancellable): PGSource; cdecl; g_socket_get_available_bytes: function(socket: PGSocket): gssize; cdecl; g_socket_get_blocking: function(socket: PGSocket): gboolean; cdecl; g_socket_get_broadcast: function(socket: PGSocket): gboolean; cdecl; g_socket_get_credentials: function(socket: PGSocket; error: PPGError): PGCredentials; cdecl; g_socket_get_family: function(socket: PGSocket): TGSocketFamily; cdecl; g_socket_get_fd: function(socket: PGSocket): gint; cdecl; g_socket_get_keepalive: function(socket: PGSocket): gboolean; cdecl; g_socket_get_listen_backlog: function(socket: PGSocket): gint; cdecl; g_socket_get_local_address: function(socket: PGSocket; error: PPGError): PGSocketAddress; cdecl; g_socket_get_multicast_loopback: function(socket: PGSocket): gboolean; cdecl; g_socket_get_multicast_ttl: function(socket: PGSocket): guint; cdecl; g_socket_get_option: function(socket: PGSocket; level: gint; optname: gint; value: Pgint; error: PPGError): gboolean; cdecl; g_socket_get_protocol: function(socket: PGSocket): TGSocketProtocol; cdecl; g_socket_get_remote_address: function(socket: PGSocket; error: PPGError): PGSocketAddress; cdecl; g_socket_get_socket_type: function(socket: PGSocket): TGSocketType; cdecl; g_socket_get_timeout: function(socket: PGSocket): guint; cdecl; g_socket_get_ttl: function(socket: PGSocket): guint; cdecl; g_socket_get_type: function:TGType; cdecl; g_socket_is_closed: function(socket: PGSocket): gboolean; cdecl; g_socket_is_connected: function(socket: PGSocket): gboolean; cdecl; g_socket_join_multicast_group: function(socket: PGSocket; group: PGInetAddress; source_specific: gboolean; iface: Pgchar; error: PPGError): gboolean; cdecl; g_socket_leave_multicast_group: function(socket: PGSocket; group: PGInetAddress; source_specific: gboolean; iface: Pgchar; error: PPGError): gboolean; cdecl; g_socket_listen: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_listener_accept: function(listener: PGSocketListener; source_object: PPGObject; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_listener_accept_async: procedure(listener: PGSocketListener; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_listener_accept_finish: function(listener: PGSocketListener; result_: PGAsyncResult; source_object: PPGObject; error: PPGError): PGSocketConnection; cdecl; g_socket_listener_accept_socket: function(listener: PGSocketListener; source_object: PPGObject; cancellable: PGCancellable; error: PPGError): PGSocket; cdecl; g_socket_listener_accept_socket_async: procedure(listener: PGSocketListener; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_listener_accept_socket_finish: function(listener: PGSocketListener; result_: PGAsyncResult; source_object: PPGObject; error: PPGError): PGSocket; cdecl; g_socket_listener_add_address: function(listener: PGSocketListener; address: PGSocketAddress; type_: TGSocketType; protocol: TGSocketProtocol; source_object: PGObject; effective_address: PPGSocketAddress; error: PPGError): gboolean; cdecl; g_socket_listener_add_any_inet_port: function(listener: PGSocketListener; source_object: PGObject; error: PPGError): guint16; cdecl; g_socket_listener_add_inet_port: function(listener: PGSocketListener; port: guint16; source_object: PGObject; error: PPGError): gboolean; cdecl; g_socket_listener_add_socket: function(listener: PGSocketListener; socket: PGSocket; source_object: PGObject; error: PPGError): gboolean; cdecl; g_socket_listener_close: procedure(listener: PGSocketListener); cdecl; g_socket_listener_get_type: function:TGType; cdecl; g_socket_listener_new: function: PGSocketListener; cdecl; g_socket_listener_set_backlog: procedure(listener: PGSocketListener; listen_backlog: gint); cdecl; g_socket_new: function(family: TGSocketFamily; type_: TGSocketType; protocol: TGSocketProtocol; error: PPGError): PGSocket; cdecl; g_socket_new_from_fd: function(fd: gint; error: PPGError): PGSocket; cdecl; g_socket_receive: function(socket: PGSocket; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_from: function(socket: PGSocket; address: PPGSocketAddress; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_message: function(socket: PGSocket; address: PPGSocketAddress; vectors: PGInputVector; num_vectors: gint; messages: PPPGSocketControlMessage; num_messages: Pgint; flags: Pgint; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_with_blocking: function(socket: PGSocket; buffer: Pgchar; size: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send: function(socket: PGSocket; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_message: function(socket: PGSocket; address: PGSocketAddress; vectors: PGOutputVector; num_vectors: gint; messages: PPGSocketControlMessage; num_messages: gint; flags: gint; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_to: function(socket: PGSocket; address: PGSocketAddress; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_with_blocking: function(socket: PGSocket; buffer: Pgchar; size: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_service_get_type: function:TGType; cdecl; g_socket_service_is_active: function(service: PGSocketService): gboolean; cdecl; g_socket_service_new: function: PGSocketService; cdecl; g_socket_service_start: procedure(service: PGSocketService); cdecl; g_socket_service_stop: procedure(service: PGSocketService); cdecl; g_socket_set_blocking: procedure(socket: PGSocket; blocking: gboolean); cdecl; g_socket_set_broadcast: procedure(socket: PGSocket; broadcast: gboolean); cdecl; g_socket_set_keepalive: procedure(socket: PGSocket; keepalive: gboolean); cdecl; g_socket_set_listen_backlog: procedure(socket: PGSocket; backlog: gint); cdecl; g_socket_set_multicast_loopback: procedure(socket: PGSocket; loopback: gboolean); cdecl; g_socket_set_multicast_ttl: procedure(socket: PGSocket; ttl: guint); cdecl; g_socket_set_option: function(socket: PGSocket; level: gint; optname: gint; value: gint; error: PPGError): gboolean; cdecl; g_socket_set_timeout: procedure(socket: PGSocket; timeout: guint); cdecl; g_socket_set_ttl: procedure(socket: PGSocket; ttl: guint); cdecl; g_socket_shutdown: function(socket: PGSocket; shutdown_read: gboolean; shutdown_write: gboolean; error: PPGError): gboolean; cdecl; g_socket_speaks_ipv4: function(socket: PGSocket): gboolean; cdecl; g_srv_target_copy: function(target: PGSrvTarget): PGSrvTarget; cdecl; g_srv_target_free: procedure(target: PGSrvTarget); cdecl; g_srv_target_get_hostname: function(target: PGSrvTarget): Pgchar; cdecl; g_srv_target_get_port: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_get_priority: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_get_type: function:TGType; cdecl; g_srv_target_get_weight: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_list_sort: function(targets: PGList): PGList; cdecl; g_srv_target_new: function(hostname: Pgchar; port: guint16; priority: guint16; weight: guint16): PGSrvTarget; cdecl; g_static_resource_fini: procedure(static_resource: PGStaticResource); cdecl; g_static_resource_get_resource: function(static_resource: PGStaticResource): PGResource; cdecl; g_static_resource_init: procedure(static_resource: PGStaticResource); cdecl; g_task_attach_source: procedure(task: PGTask; source: PGSource; callback: TGSourceFunc); cdecl; g_task_get_cancellable: function(task: PGTask): PGCancellable; cdecl; g_task_get_check_cancellable: function(task: PGTask): gboolean; cdecl; g_task_get_context: function(task: PGTask): PGMainContext; cdecl; g_task_get_priority: function(task: PGTask): gint; cdecl; g_task_get_return_on_cancel: function(task: PGTask): gboolean; cdecl; g_task_get_source_object: function(task: PGTask): PGObject; cdecl; g_task_get_source_tag: function(task: PGTask): gpointer; cdecl; g_task_get_task_data: function(task: PGTask): gpointer; cdecl; g_task_get_type: function:TGType; cdecl; g_task_had_error: function(task: PGTask): gboolean; cdecl; g_task_is_valid: function(result_: PGAsyncResult; source_object: PGObject): gboolean; cdecl; g_task_new: function(source_object: PGObject; cancellable: PGCancellable; callback: TGAsyncReadyCallback; callback_data: gpointer): PGTask; cdecl; g_task_propagate_boolean: function(task: PGTask; error: PPGError): gboolean; cdecl; g_task_propagate_int: function(task: PGTask; error: PPGError): gssize; cdecl; g_task_propagate_pointer: function(task: PGTask; error: PPGError): gpointer; cdecl; g_task_report_error: procedure(source_object: PGObject; callback: TGAsyncReadyCallback; callback_data: gpointer; source_tag: gpointer; error: PGError); cdecl; g_task_report_new_error: procedure(source_object: PGObject; callback: TGAsyncReadyCallback; callback_data: gpointer; source_tag: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_task_return_boolean: procedure(task: PGTask; result_: gboolean); cdecl; g_task_return_error: procedure(task: PGTask; error: PGError); cdecl; g_task_return_error_if_cancelled: function(task: PGTask): gboolean; cdecl; g_task_return_int: procedure(task: PGTask; result_: gssize); cdecl; g_task_return_new_error: procedure(task: PGTask; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_task_return_pointer: procedure(task: PGTask; result_: gpointer; result_destroy: TGDestroyNotify); cdecl; g_task_run_in_thread: procedure(task: PGTask; task_func: TGTaskThreadFunc); cdecl; g_task_run_in_thread_sync: procedure(task: PGTask; task_func: TGTaskThreadFunc); cdecl; g_task_set_check_cancellable: procedure(task: PGTask; check_cancellable: gboolean); cdecl; g_task_set_priority: procedure(task: PGTask; priority: gint); cdecl; g_task_set_return_on_cancel: function(task: PGTask; return_on_cancel: gboolean): gboolean; cdecl; g_task_set_source_tag: procedure(task: PGTask; source_tag: gpointer); cdecl; g_task_set_task_data: procedure(task: PGTask; task_data: gpointer; task_data_destroy: TGDestroyNotify); cdecl; g_tcp_connection_get_graceful_disconnect: function(connection: PGTcpConnection): gboolean; cdecl; g_tcp_connection_get_type: function:TGType; cdecl; g_tcp_connection_set_graceful_disconnect: procedure(connection: PGTcpConnection; graceful_disconnect: gboolean); cdecl; g_tcp_wrapper_connection_get_base_io_stream: function(conn: PGTcpWrapperConnection): PGIOStream; cdecl; g_tcp_wrapper_connection_get_type: function:TGType; cdecl; g_tcp_wrapper_connection_new: function(base_io_stream: PGIOStream; socket: PGSocket): PGTcpWrapperConnection; cdecl; g_test_dbus_add_service_dir: procedure(self: PGTestDBus; path: Pgchar); cdecl; g_test_dbus_down: procedure(self: PGTestDBus); cdecl; g_test_dbus_get_bus_address: function(self: PGTestDBus): Pgchar; cdecl; g_test_dbus_get_flags: function(self: PGTestDBus): TGTestDBusFlags; cdecl; g_test_dbus_get_type: function:TGType; cdecl; g_test_dbus_new: function(flags: TGTestDBusFlags): PGTestDBus; cdecl; g_test_dbus_stop: procedure(self: PGTestDBus); cdecl; g_test_dbus_unset: procedure; cdecl; g_test_dbus_up: procedure(self: PGTestDBus); cdecl; g_themed_icon_append_name: procedure(icon: PGThemedIcon; iconname: Pgchar); cdecl; g_themed_icon_get_names: function(icon: PGThemedIcon): PPgchar; cdecl; g_themed_icon_get_type: function:TGType; cdecl; g_themed_icon_new: function(iconname: Pgchar): PGThemedIcon; cdecl; g_themed_icon_new_from_names: function(iconnames: PPgchar; len: gint): PGThemedIcon; cdecl; g_themed_icon_new_with_default_fallbacks: function(iconname: Pgchar): PGThemedIcon; cdecl; g_themed_icon_prepend_name: procedure(icon: PGThemedIcon; iconname: Pgchar); cdecl; g_threaded_socket_service_get_type: function:TGType; cdecl; g_threaded_socket_service_new: function(max_threads: gint): PGThreadedSocketService; cdecl; g_tls_backend_get_certificate_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_client_connection_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_default: function: PGTlsBackend; cdecl; g_tls_backend_get_default_database: function(backend: PGTlsBackend): PGTlsDatabase; cdecl; g_tls_backend_get_file_database_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_server_connection_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_type: function:TGType; cdecl; g_tls_backend_supports_tls: function(backend: PGTlsBackend): gboolean; cdecl; g_tls_certificate_get_issuer: function(cert: PGTlsCertificate): PGTlsCertificate; cdecl; g_tls_certificate_get_type: function:TGType; cdecl; g_tls_certificate_is_same: function(cert_one: PGTlsCertificate; cert_two: PGTlsCertificate): gboolean; cdecl; g_tls_certificate_list_new_from_file: function(file_: Pgchar; error: PPGError): PGList; cdecl; g_tls_certificate_new_from_file: function(file_: Pgchar; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_new_from_files: function(cert_file: Pgchar; key_file: Pgchar; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_new_from_pem: function(data: Pgchar; length: gssize; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_verify: function(cert: PGTlsCertificate; identity: PGSocketConnectable; trusted_ca: PGTlsCertificate): TGTlsCertificateFlags; cdecl; g_tls_client_connection_get_accepted_cas: function(conn: PGTlsClientConnection): PGList; cdecl; g_tls_client_connection_get_server_identity: function(conn: PGTlsClientConnection): PGSocketConnectable; cdecl; g_tls_client_connection_get_type: function:TGType; cdecl; g_tls_client_connection_get_use_ssl3: function(conn: PGTlsClientConnection): gboolean; cdecl; g_tls_client_connection_get_validation_flags: function(conn: PGTlsClientConnection): TGTlsCertificateFlags; cdecl; g_tls_client_connection_new: function(base_io_stream: PGIOStream; server_identity: PGSocketConnectable; error: PPGError): PGTlsClientConnection; cdecl; g_tls_client_connection_set_server_identity: procedure(conn: PGTlsClientConnection; identity: PGSocketConnectable); cdecl; g_tls_client_connection_set_use_ssl3: procedure(conn: PGTlsClientConnection; use_ssl3: gboolean); cdecl; g_tls_client_connection_set_validation_flags: procedure(conn: PGTlsClientConnection; flags: TGTlsCertificateFlags); cdecl; g_tls_connection_emit_accept_certificate: function(conn: PGTlsConnection; peer_cert: PGTlsCertificate; errors: TGTlsCertificateFlags): gboolean; cdecl; g_tls_connection_get_certificate: function(conn: PGTlsConnection): PGTlsCertificate; cdecl; g_tls_connection_get_database: function(conn: PGTlsConnection): PGTlsDatabase; cdecl; g_tls_connection_get_interaction: function(conn: PGTlsConnection): PGTlsInteraction; cdecl; g_tls_connection_get_peer_certificate: function(conn: PGTlsConnection): PGTlsCertificate; cdecl; g_tls_connection_get_peer_certificate_errors: function(conn: PGTlsConnection): TGTlsCertificateFlags; cdecl; g_tls_connection_get_rehandshake_mode: function(conn: PGTlsConnection): TGTlsRehandshakeMode; cdecl; g_tls_connection_get_require_close_notify: function(conn: PGTlsConnection): gboolean; cdecl; g_tls_connection_get_type: function:TGType; cdecl; g_tls_connection_handshake: function(conn: PGTlsConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_tls_connection_handshake_async: procedure(conn: PGTlsConnection; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_connection_handshake_finish: function(conn: PGTlsConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_tls_connection_set_certificate: procedure(conn: PGTlsConnection; certificate: PGTlsCertificate); cdecl; g_tls_connection_set_database: procedure(conn: PGTlsConnection; database: PGTlsDatabase); cdecl; g_tls_connection_set_interaction: procedure(conn: PGTlsConnection; interaction: PGTlsInteraction); cdecl; g_tls_connection_set_rehandshake_mode: procedure(conn: PGTlsConnection; mode: TGTlsRehandshakeMode); cdecl; g_tls_connection_set_require_close_notify: procedure(conn: PGTlsConnection; require_close_notify: gboolean); cdecl; g_tls_database_create_certificate_handle: function(self: PGTlsDatabase; certificate: PGTlsCertificate): Pgchar; cdecl; g_tls_database_get_type: function:TGType; cdecl; g_tls_database_lookup_certificate_for_handle: function(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_for_handle_async: procedure(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificate_for_handle_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_issuer: function(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_issuer_async: procedure(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificate_issuer_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificates_issued_by: function(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_tls_database_lookup_certificates_issued_by_async: procedure(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificates_issued_by_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_tls_database_verify_chain: function(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; error: PPGError): TGTlsCertificateFlags; cdecl; g_tls_database_verify_chain_async: procedure(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_verify_chain_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): TGTlsCertificateFlags; cdecl; g_tls_error_quark: function: TGQuark; cdecl; g_tls_file_database_get_type: function:TGType; cdecl; g_tls_file_database_new: function(anchors: Pgchar; error: PPGError): PGTlsFileDatabase; cdecl; g_tls_interaction_ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_interaction_ask_password_async: procedure(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_interaction_ask_password_finish: function(interaction: PGTlsInteraction; result_: PGAsyncResult; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_interaction_get_type: function:TGType; cdecl; g_tls_interaction_invoke_ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_password_get_description: function(password: PGTlsPassword): Pgchar; cdecl; g_tls_password_get_flags: function(password: PGTlsPassword): TGTlsPasswordFlags; cdecl; g_tls_password_get_type: function:TGType; cdecl; g_tls_password_get_value: function(password: PGTlsPassword; length: Pgsize): Pguint8; cdecl; g_tls_password_get_warning: function(password: PGTlsPassword): Pgchar; cdecl; g_tls_password_new: function(flags: TGTlsPasswordFlags; description: Pgchar): PGTlsPassword; cdecl; g_tls_password_set_description: procedure(password: PGTlsPassword; description: Pgchar); cdecl; g_tls_password_set_flags: procedure(password: PGTlsPassword; flags: TGTlsPasswordFlags); cdecl; g_tls_password_set_value: procedure(password: PGTlsPassword; value: Pguint8; length: gssize); cdecl; g_tls_password_set_value_full: procedure(password: PGTlsPassword; value: Pguint8; length: gssize; destroy_: TGDestroyNotify); cdecl; g_tls_password_set_warning: procedure(password: PGTlsPassword; warning: Pgchar); cdecl; g_tls_server_connection_get_type: function:TGType; cdecl; g_tls_server_connection_new: function(base_io_stream: PGIOStream; certificate: PGTlsCertificate; error: PPGError): PGTlsServerConnection; cdecl; g_unix_connection_get_type: function:TGType; cdecl; g_unix_connection_receive_credentials: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): PGCredentials; cdecl; g_unix_connection_receive_credentials_async: procedure(connection: PGUnixConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_unix_connection_receive_credentials_finish: function(connection: PGUnixConnection; result_: PGAsyncResult; error: PPGError): PGCredentials; cdecl; g_unix_connection_receive_fd: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): gint; cdecl; g_unix_connection_send_credentials: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_unix_connection_send_credentials_async: procedure(connection: PGUnixConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_unix_connection_send_credentials_finish: function(connection: PGUnixConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_unix_connection_send_fd: function(connection: PGUnixConnection; fd: gint; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_unix_credentials_message_get_credentials: function(message: PGUnixCredentialsMessage): PGCredentials; cdecl; g_unix_credentials_message_get_type: function:TGType; cdecl; g_unix_credentials_message_is_supported: function: gboolean; cdecl; g_unix_credentials_message_new: function: PGUnixCredentialsMessage; cdecl; g_unix_credentials_message_new_with_credentials: function(credentials: PGCredentials): PGUnixCredentialsMessage; cdecl; g_unix_fd_list_append: function(list: PGUnixFDList; fd: gint; error: PPGError): gint; cdecl; g_unix_fd_list_get: function(list: PGUnixFDList; index_: gint; error: PPGError): gint; cdecl; g_unix_fd_list_get_length: function(list: PGUnixFDList): gint; cdecl; g_unix_fd_list_get_type: function:TGType; cdecl; g_unix_fd_list_new: function: PGUnixFDList; cdecl; g_unix_fd_list_new_from_array: function(fds: Pgint; n_fds: gint): PGUnixFDList; cdecl; g_unix_fd_list_peek_fds: function(list: PGUnixFDList; length: Pgint): Pgint; cdecl; g_unix_fd_list_steal_fds: function(list: PGUnixFDList; length: Pgint): Pgint; cdecl; g_unix_fd_message_append_fd: function(message: PGUnixFDMessage; fd: gint; error: PPGError): gboolean; cdecl; g_unix_fd_message_get_fd_list: function(message: PGUnixFDMessage): PGUnixFDList; cdecl; g_unix_fd_message_get_type: function:TGType; cdecl; g_unix_fd_message_new: function: PGUnixFDMessage; cdecl; g_unix_fd_message_new_with_fd_list: function(fd_list: PGUnixFDList): PGUnixFDMessage; cdecl; g_unix_fd_message_steal_fds: function(message: PGUnixFDMessage; length: Pgint): Pgint; cdecl; g_unix_input_stream_get_close_fd: function(stream: PGUnixInputStream): gboolean; cdecl; g_unix_input_stream_get_fd: function(stream: PGUnixInputStream): gint; cdecl; g_unix_input_stream_get_type: function:TGType; cdecl; g_unix_input_stream_new: function(fd: gint; close_fd: gboolean): PGUnixInputStream; cdecl; g_unix_input_stream_set_close_fd: procedure(stream: PGUnixInputStream; close_fd: gboolean); cdecl; g_unix_is_mount_path_system_internal: function(mount_path: Pgchar): gboolean; cdecl; g_unix_mount_at: function(mount_path: Pgchar; time_read: Pguint64): PGUnixMountEntry; cdecl; g_unix_mount_compare: function(mount1: PGUnixMountEntry; mount2: PGUnixMountEntry): gint; cdecl; g_unix_mount_free: procedure(mount_entry: PGUnixMountEntry); cdecl; g_unix_mount_get_device_path: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_get_fs_type: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_get_mount_path: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_guess_can_eject: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_guess_icon: function(mount_entry: PGUnixMountEntry): PGIcon; cdecl; g_unix_mount_guess_name: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_guess_should_display: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_guess_symbolic_icon: function(mount_entry: PGUnixMountEntry): PGIcon; cdecl; g_unix_mount_is_readonly: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_is_system_internal: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_monitor_get_type: function:TGType; cdecl; g_unix_mount_monitor_new: function: PGUnixMountMonitor; cdecl; g_unix_mount_monitor_set_rate_limit: procedure(mount_monitor: PGUnixMountMonitor; limit_msec: gint); cdecl; g_unix_mount_point_compare: function(mount1: PGUnixMountPoint; mount2: PGUnixMountPoint): gint; cdecl; g_unix_mount_point_free: procedure(mount_point: PGUnixMountPoint); cdecl; g_unix_mount_point_get_device_path: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_fs_type: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_mount_path: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_options: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_guess_can_eject: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_guess_icon: function(mount_point: PGUnixMountPoint): PGIcon; cdecl; g_unix_mount_point_guess_name: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_guess_symbolic_icon: function(mount_point: PGUnixMountPoint): PGIcon; cdecl; g_unix_mount_point_is_loopback: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_is_readonly: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_is_user_mountable: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_points_changed_since: function(time: guint64): gboolean; cdecl; g_unix_mount_points_get: function(time_read: Pguint64): PGList; cdecl; g_unix_mounts_changed_since: function(time: guint64): gboolean; cdecl; g_unix_mounts_get: function(time_read: Pguint64): PGList; cdecl; g_unix_output_stream_get_close_fd: function(stream: PGUnixOutputStream): gboolean; cdecl; g_unix_output_stream_get_fd: function(stream: PGUnixOutputStream): gint; cdecl; g_unix_output_stream_get_type: function:TGType; cdecl; g_unix_output_stream_new: function(fd: gint; close_fd: gboolean): PGUnixOutputStream; cdecl; g_unix_output_stream_set_close_fd: procedure(stream: PGUnixOutputStream; close_fd: gboolean); cdecl; g_unix_socket_address_abstract_names_supported: function: gboolean; cdecl; g_unix_socket_address_get_address_type: function(address: PGUnixSocketAddress): TGUnixSocketAddressType; cdecl; g_unix_socket_address_get_path: function(address: PGUnixSocketAddress): Pgchar; cdecl; g_unix_socket_address_get_path_len: function(address: PGUnixSocketAddress): gsize; cdecl; g_unix_socket_address_get_type: function:TGType; cdecl; g_unix_socket_address_new: function(path: Pgchar): PGUnixSocketAddress; cdecl; g_unix_socket_address_new_with_type: function(path: Pgchar; path_len: gint; type_: TGUnixSocketAddressType): PGUnixSocketAddress; cdecl; g_vfs_get_default: function: PGVfs; cdecl; g_vfs_get_file_for_path: function(vfs: PGVfs; path: Pgchar): PGFile; cdecl; g_vfs_get_file_for_uri: function(vfs: PGVfs; uri: Pgchar): PGFile; cdecl; g_vfs_get_local: function: PGVfs; cdecl; g_vfs_get_supported_uri_schemes: function(vfs: PGVfs): PPgchar; cdecl; g_vfs_get_type: function:TGType; cdecl; g_vfs_is_active: function(vfs: PGVfs): gboolean; cdecl; g_vfs_parse_name: function(vfs: PGVfs; parse_name: Pgchar): PGFile; cdecl; g_volume_can_eject: function(volume: PGVolume): gboolean; cdecl; g_volume_can_mount: function(volume: PGVolume): gboolean; cdecl; g_volume_eject_with_operation: procedure(volume: PGVolume; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_volume_eject_with_operation_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_volume_enumerate_identifiers: function(volume: PGVolume): PPgchar; cdecl; g_volume_get_activation_root: function(volume: PGVolume): PGFile; cdecl; g_volume_get_drive: function(volume: PGVolume): PGDrive; cdecl; g_volume_get_icon: function(volume: PGVolume): PGIcon; cdecl; g_volume_get_identifier: function(volume: PGVolume; kind: Pgchar): Pgchar; cdecl; g_volume_get_mount: function(volume: PGVolume): PGMount; cdecl; g_volume_get_name: function(volume: PGVolume): Pgchar; cdecl; g_volume_get_sort_key: function(volume: PGVolume): Pgchar; cdecl; g_volume_get_symbolic_icon: function(volume: PGVolume): PGIcon; cdecl; g_volume_get_type: function:TGType; cdecl; g_volume_get_uuid: function(volume: PGVolume): Pgchar; cdecl; g_volume_monitor_get: function: PGVolumeMonitor; cdecl; g_volume_monitor_get_connected_drives: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_monitor_get_mount_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGMount; cdecl; g_volume_monitor_get_mounts: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_monitor_get_type: function:TGType; cdecl; g_volume_monitor_get_volume_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGVolume; cdecl; g_volume_monitor_get_volumes: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_mount: procedure(volume: PGVolume; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_volume_mount_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_volume_should_automount: function(volume: PGVolume): gboolean; cdecl; g_zlib_compressor_get_file_info: function(compressor: PGZlibCompressor): PGFileInfo; cdecl; g_zlib_compressor_get_type: function:TGType; cdecl; g_zlib_compressor_new: function(format: TGZlibCompressorFormat; level: gint): PGZlibCompressor; cdecl; g_zlib_compressor_set_file_info: procedure(compressor: PGZlibCompressor; file_info: PGFileInfo); cdecl; g_zlib_decompressor_get_file_info: function(decompressor: PGZlibDecompressor): PGFileInfo; cdecl; g_zlib_decompressor_get_type: function:TGType; cdecl; g_zlib_decompressor_new: function(format: TGZlibCompressorFormat): PGZlibDecompressor; cdecl; implementation uses DynLibs; var libgio_2_0_so_0: TLibHandle; procedure LoadLibraries; begin libgio_2_0_so_0 := SafeLoadLibrary('libgio-2.0.so.0'); end; procedure LoadProcs; procedure LoadProc(var AProc: Pointer; AName: String); var ProcPtr: Pointer; begin ProcPtr := GetProcedureAddress(libgio_2_0_so_0, AName); AProc := ProcPtr; end; begin LoadProc(Pointer(g_action_activate), 'g_action_activate'); LoadProc(Pointer(g_action_change_state), 'g_action_change_state'); LoadProc(Pointer(g_action_get_enabled), 'g_action_get_enabled'); LoadProc(Pointer(g_action_get_name), 'g_action_get_name'); LoadProc(Pointer(g_action_get_parameter_type), 'g_action_get_parameter_type'); LoadProc(Pointer(g_action_get_state), 'g_action_get_state'); LoadProc(Pointer(g_action_get_state_hint), 'g_action_get_state_hint'); LoadProc(Pointer(g_action_get_state_type), 'g_action_get_state_type'); LoadProc(Pointer(g_action_get_type), 'g_action_get_type'); LoadProc(Pointer(g_action_group_action_added), 'g_action_group_action_added'); LoadProc(Pointer(g_action_group_action_enabled_changed), 'g_action_group_action_enabled_changed'); LoadProc(Pointer(g_action_group_action_removed), 'g_action_group_action_removed'); LoadProc(Pointer(g_action_group_action_state_changed), 'g_action_group_action_state_changed'); LoadProc(Pointer(g_action_group_activate_action), 'g_action_group_activate_action'); LoadProc(Pointer(g_action_group_change_action_state), 'g_action_group_change_action_state'); LoadProc(Pointer(g_action_group_get_action_enabled), 'g_action_group_get_action_enabled'); LoadProc(Pointer(g_action_group_get_action_parameter_type), 'g_action_group_get_action_parameter_type'); LoadProc(Pointer(g_action_group_get_action_state), 'g_action_group_get_action_state'); LoadProc(Pointer(g_action_group_get_action_state_hint), 'g_action_group_get_action_state_hint'); LoadProc(Pointer(g_action_group_get_action_state_type), 'g_action_group_get_action_state_type'); LoadProc(Pointer(g_action_group_get_type), 'g_action_group_get_type'); LoadProc(Pointer(g_action_group_has_action), 'g_action_group_has_action'); LoadProc(Pointer(g_action_group_list_actions), 'g_action_group_list_actions'); LoadProc(Pointer(g_action_group_query_action), 'g_action_group_query_action'); LoadProc(Pointer(g_action_map_add_action), 'g_action_map_add_action'); LoadProc(Pointer(g_action_map_add_action_entries), 'g_action_map_add_action_entries'); LoadProc(Pointer(g_action_map_get_type), 'g_action_map_get_type'); LoadProc(Pointer(g_action_map_lookup_action), 'g_action_map_lookup_action'); LoadProc(Pointer(g_action_map_remove_action), 'g_action_map_remove_action'); LoadProc(Pointer(g_app_info_add_supports_type), 'g_app_info_add_supports_type'); LoadProc(Pointer(g_app_info_can_delete), 'g_app_info_can_delete'); LoadProc(Pointer(g_app_info_can_remove_supports_type), 'g_app_info_can_remove_supports_type'); LoadProc(Pointer(g_app_info_create_from_commandline), 'g_app_info_create_from_commandline'); LoadProc(Pointer(g_app_info_delete), 'g_app_info_delete'); LoadProc(Pointer(g_app_info_dup), 'g_app_info_dup'); LoadProc(Pointer(g_app_info_equal), 'g_app_info_equal'); LoadProc(Pointer(g_app_info_get_all), 'g_app_info_get_all'); LoadProc(Pointer(g_app_info_get_all_for_type), 'g_app_info_get_all_for_type'); LoadProc(Pointer(g_app_info_get_commandline), 'g_app_info_get_commandline'); LoadProc(Pointer(g_app_info_get_default_for_type), 'g_app_info_get_default_for_type'); LoadProc(Pointer(g_app_info_get_default_for_uri_scheme), 'g_app_info_get_default_for_uri_scheme'); LoadProc(Pointer(g_app_info_get_description), 'g_app_info_get_description'); LoadProc(Pointer(g_app_info_get_display_name), 'g_app_info_get_display_name'); LoadProc(Pointer(g_app_info_get_executable), 'g_app_info_get_executable'); LoadProc(Pointer(g_app_info_get_fallback_for_type), 'g_app_info_get_fallback_for_type'); LoadProc(Pointer(g_app_info_get_icon), 'g_app_info_get_icon'); LoadProc(Pointer(g_app_info_get_id), 'g_app_info_get_id'); LoadProc(Pointer(g_app_info_get_name), 'g_app_info_get_name'); LoadProc(Pointer(g_app_info_get_recommended_for_type), 'g_app_info_get_recommended_for_type'); LoadProc(Pointer(g_app_info_get_supported_types), 'g_app_info_get_supported_types'); LoadProc(Pointer(g_app_info_get_type), 'g_app_info_get_type'); LoadProc(Pointer(g_app_info_launch), 'g_app_info_launch'); LoadProc(Pointer(g_app_info_launch_default_for_uri), 'g_app_info_launch_default_for_uri'); LoadProc(Pointer(g_app_info_launch_uris), 'g_app_info_launch_uris'); LoadProc(Pointer(g_app_info_remove_supports_type), 'g_app_info_remove_supports_type'); LoadProc(Pointer(g_app_info_reset_type_associations), 'g_app_info_reset_type_associations'); LoadProc(Pointer(g_app_info_set_as_default_for_extension), 'g_app_info_set_as_default_for_extension'); LoadProc(Pointer(g_app_info_set_as_default_for_type), 'g_app_info_set_as_default_for_type'); LoadProc(Pointer(g_app_info_set_as_last_used_for_type), 'g_app_info_set_as_last_used_for_type'); LoadProc(Pointer(g_app_info_should_show), 'g_app_info_should_show'); LoadProc(Pointer(g_app_info_supports_files), 'g_app_info_supports_files'); LoadProc(Pointer(g_app_info_supports_uris), 'g_app_info_supports_uris'); LoadProc(Pointer(g_app_launch_context_get_display), 'g_app_launch_context_get_display'); LoadProc(Pointer(g_app_launch_context_get_environment), 'g_app_launch_context_get_environment'); LoadProc(Pointer(g_app_launch_context_get_startup_notify_id), 'g_app_launch_context_get_startup_notify_id'); LoadProc(Pointer(g_app_launch_context_get_type), 'g_app_launch_context_get_type'); LoadProc(Pointer(g_app_launch_context_launch_failed), 'g_app_launch_context_launch_failed'); LoadProc(Pointer(g_app_launch_context_new), 'g_app_launch_context_new'); LoadProc(Pointer(g_app_launch_context_setenv), 'g_app_launch_context_setenv'); LoadProc(Pointer(g_app_launch_context_unsetenv), 'g_app_launch_context_unsetenv'); LoadProc(Pointer(g_application_activate), 'g_application_activate'); LoadProc(Pointer(g_application_command_line_create_file_for_arg), 'g_application_command_line_create_file_for_arg'); LoadProc(Pointer(g_application_command_line_get_arguments), 'g_application_command_line_get_arguments'); LoadProc(Pointer(g_application_command_line_get_cwd), 'g_application_command_line_get_cwd'); LoadProc(Pointer(g_application_command_line_get_environ), 'g_application_command_line_get_environ'); LoadProc(Pointer(g_application_command_line_get_exit_status), 'g_application_command_line_get_exit_status'); LoadProc(Pointer(g_application_command_line_get_is_remote), 'g_application_command_line_get_is_remote'); LoadProc(Pointer(g_application_command_line_get_platform_data), 'g_application_command_line_get_platform_data'); LoadProc(Pointer(g_application_command_line_get_stdin), 'g_application_command_line_get_stdin'); LoadProc(Pointer(g_application_command_line_get_type), 'g_application_command_line_get_type'); LoadProc(Pointer(g_application_command_line_getenv), 'g_application_command_line_getenv'); LoadProc(Pointer(g_application_command_line_print), 'g_application_command_line_print'); LoadProc(Pointer(g_application_command_line_printerr), 'g_application_command_line_printerr'); LoadProc(Pointer(g_application_command_line_set_exit_status), 'g_application_command_line_set_exit_status'); LoadProc(Pointer(g_application_get_application_id), 'g_application_get_application_id'); LoadProc(Pointer(g_application_get_dbus_connection), 'g_application_get_dbus_connection'); LoadProc(Pointer(g_application_get_dbus_object_path), 'g_application_get_dbus_object_path'); LoadProc(Pointer(g_application_get_default), 'g_application_get_default'); LoadProc(Pointer(g_application_get_flags), 'g_application_get_flags'); LoadProc(Pointer(g_application_get_inactivity_timeout), 'g_application_get_inactivity_timeout'); LoadProc(Pointer(g_application_get_is_registered), 'g_application_get_is_registered'); LoadProc(Pointer(g_application_get_is_remote), 'g_application_get_is_remote'); LoadProc(Pointer(g_application_get_type), 'g_application_get_type'); LoadProc(Pointer(g_application_hold), 'g_application_hold'); LoadProc(Pointer(g_application_id_is_valid), 'g_application_id_is_valid'); LoadProc(Pointer(g_application_new), 'g_application_new'); LoadProc(Pointer(g_application_open), 'g_application_open'); LoadProc(Pointer(g_application_quit), 'g_application_quit'); LoadProc(Pointer(g_application_register), 'g_application_register'); LoadProc(Pointer(g_application_release), 'g_application_release'); LoadProc(Pointer(g_application_run), 'g_application_run'); LoadProc(Pointer(g_application_set_application_id), 'g_application_set_application_id'); LoadProc(Pointer(g_application_set_default), 'g_application_set_default'); LoadProc(Pointer(g_application_set_flags), 'g_application_set_flags'); LoadProc(Pointer(g_application_set_inactivity_timeout), 'g_application_set_inactivity_timeout'); LoadProc(Pointer(g_async_initable_get_type), 'g_async_initable_get_type'); LoadProc(Pointer(g_async_initable_init_async), 'g_async_initable_init_async'); LoadProc(Pointer(g_async_initable_init_finish), 'g_async_initable_init_finish'); LoadProc(Pointer(g_async_initable_new_async), 'g_async_initable_new_async'); LoadProc(Pointer(g_async_initable_new_finish), 'g_async_initable_new_finish'); LoadProc(Pointer(g_async_initable_new_valist_async), 'g_async_initable_new_valist_async'); LoadProc(Pointer(g_async_initable_newv_async), 'g_async_initable_newv_async'); LoadProc(Pointer(g_async_result_get_source_object), 'g_async_result_get_source_object'); LoadProc(Pointer(g_async_result_get_type), 'g_async_result_get_type'); LoadProc(Pointer(g_async_result_get_user_data), 'g_async_result_get_user_data'); LoadProc(Pointer(g_async_result_is_tagged), 'g_async_result_is_tagged'); LoadProc(Pointer(g_async_result_legacy_propagate_error), 'g_async_result_legacy_propagate_error'); LoadProc(Pointer(g_buffered_input_stream_fill), 'g_buffered_input_stream_fill'); LoadProc(Pointer(g_buffered_input_stream_fill_async), 'g_buffered_input_stream_fill_async'); LoadProc(Pointer(g_buffered_input_stream_fill_finish), 'g_buffered_input_stream_fill_finish'); LoadProc(Pointer(g_buffered_input_stream_get_available), 'g_buffered_input_stream_get_available'); LoadProc(Pointer(g_buffered_input_stream_get_buffer_size), 'g_buffered_input_stream_get_buffer_size'); LoadProc(Pointer(g_buffered_input_stream_get_type), 'g_buffered_input_stream_get_type'); LoadProc(Pointer(g_buffered_input_stream_new), 'g_buffered_input_stream_new'); LoadProc(Pointer(g_buffered_input_stream_new_sized), 'g_buffered_input_stream_new_sized'); LoadProc(Pointer(g_buffered_input_stream_peek), 'g_buffered_input_stream_peek'); LoadProc(Pointer(g_buffered_input_stream_peek_buffer), 'g_buffered_input_stream_peek_buffer'); LoadProc(Pointer(g_buffered_input_stream_read_byte), 'g_buffered_input_stream_read_byte'); LoadProc(Pointer(g_buffered_input_stream_set_buffer_size), 'g_buffered_input_stream_set_buffer_size'); LoadProc(Pointer(g_buffered_output_stream_get_auto_grow), 'g_buffered_output_stream_get_auto_grow'); LoadProc(Pointer(g_buffered_output_stream_get_buffer_size), 'g_buffered_output_stream_get_buffer_size'); LoadProc(Pointer(g_buffered_output_stream_get_type), 'g_buffered_output_stream_get_type'); LoadProc(Pointer(g_buffered_output_stream_new), 'g_buffered_output_stream_new'); LoadProc(Pointer(g_buffered_output_stream_new_sized), 'g_buffered_output_stream_new_sized'); LoadProc(Pointer(g_buffered_output_stream_set_auto_grow), 'g_buffered_output_stream_set_auto_grow'); LoadProc(Pointer(g_buffered_output_stream_set_buffer_size), 'g_buffered_output_stream_set_buffer_size'); LoadProc(Pointer(g_bus_get), 'g_bus_get'); LoadProc(Pointer(g_bus_get_finish), 'g_bus_get_finish'); LoadProc(Pointer(g_bus_get_sync), 'g_bus_get_sync'); LoadProc(Pointer(g_bus_own_name), 'g_bus_own_name'); LoadProc(Pointer(g_bus_own_name_on_connection), 'g_bus_own_name_on_connection'); LoadProc(Pointer(g_bus_own_name_on_connection_with_closures), 'g_bus_own_name_on_connection_with_closures'); LoadProc(Pointer(g_bus_own_name_with_closures), 'g_bus_own_name_with_closures'); LoadProc(Pointer(g_bus_unown_name), 'g_bus_unown_name'); LoadProc(Pointer(g_bus_unwatch_name), 'g_bus_unwatch_name'); LoadProc(Pointer(g_bus_watch_name), 'g_bus_watch_name'); LoadProc(Pointer(g_bus_watch_name_on_connection), 'g_bus_watch_name_on_connection'); LoadProc(Pointer(g_bus_watch_name_on_connection_with_closures), 'g_bus_watch_name_on_connection_with_closures'); LoadProc(Pointer(g_bus_watch_name_with_closures), 'g_bus_watch_name_with_closures'); LoadProc(Pointer(g_cancellable_cancel), 'g_cancellable_cancel'); LoadProc(Pointer(g_cancellable_connect), 'g_cancellable_connect'); LoadProc(Pointer(g_cancellable_disconnect), 'g_cancellable_disconnect'); LoadProc(Pointer(g_cancellable_get_current), 'g_cancellable_get_current'); LoadProc(Pointer(g_cancellable_get_fd), 'g_cancellable_get_fd'); LoadProc(Pointer(g_cancellable_get_type), 'g_cancellable_get_type'); LoadProc(Pointer(g_cancellable_is_cancelled), 'g_cancellable_is_cancelled'); LoadProc(Pointer(g_cancellable_make_pollfd), 'g_cancellable_make_pollfd'); LoadProc(Pointer(g_cancellable_new), 'g_cancellable_new'); LoadProc(Pointer(g_cancellable_pop_current), 'g_cancellable_pop_current'); LoadProc(Pointer(g_cancellable_push_current), 'g_cancellable_push_current'); LoadProc(Pointer(g_cancellable_release_fd), 'g_cancellable_release_fd'); LoadProc(Pointer(g_cancellable_reset), 'g_cancellable_reset'); LoadProc(Pointer(g_cancellable_set_error_if_cancelled), 'g_cancellable_set_error_if_cancelled'); LoadProc(Pointer(g_cancellable_source_new), 'g_cancellable_source_new'); LoadProc(Pointer(g_charset_converter_get_num_fallbacks), 'g_charset_converter_get_num_fallbacks'); LoadProc(Pointer(g_charset_converter_get_type), 'g_charset_converter_get_type'); LoadProc(Pointer(g_charset_converter_get_use_fallback), 'g_charset_converter_get_use_fallback'); LoadProc(Pointer(g_charset_converter_new), 'g_charset_converter_new'); LoadProc(Pointer(g_charset_converter_set_use_fallback), 'g_charset_converter_set_use_fallback'); LoadProc(Pointer(g_content_type_can_be_executable), 'g_content_type_can_be_executable'); LoadProc(Pointer(g_content_type_equals), 'g_content_type_equals'); LoadProc(Pointer(g_content_type_from_mime_type), 'g_content_type_from_mime_type'); LoadProc(Pointer(g_content_type_get_description), 'g_content_type_get_description'); LoadProc(Pointer(g_content_type_get_generic_icon_name), 'g_content_type_get_generic_icon_name'); LoadProc(Pointer(g_content_type_get_icon), 'g_content_type_get_icon'); LoadProc(Pointer(g_content_type_get_mime_type), 'g_content_type_get_mime_type'); LoadProc(Pointer(g_content_type_get_symbolic_icon), 'g_content_type_get_symbolic_icon'); LoadProc(Pointer(g_content_type_guess), 'g_content_type_guess'); LoadProc(Pointer(g_content_type_guess_for_tree), 'g_content_type_guess_for_tree'); LoadProc(Pointer(g_content_type_is_a), 'g_content_type_is_a'); LoadProc(Pointer(g_content_type_is_unknown), 'g_content_type_is_unknown'); LoadProc(Pointer(g_content_types_get_registered), 'g_content_types_get_registered'); LoadProc(Pointer(g_converter_convert), 'g_converter_convert'); LoadProc(Pointer(g_converter_get_type), 'g_converter_get_type'); LoadProc(Pointer(g_converter_input_stream_get_converter), 'g_converter_input_stream_get_converter'); LoadProc(Pointer(g_converter_input_stream_get_type), 'g_converter_input_stream_get_type'); LoadProc(Pointer(g_converter_input_stream_new), 'g_converter_input_stream_new'); LoadProc(Pointer(g_converter_output_stream_get_converter), 'g_converter_output_stream_get_converter'); LoadProc(Pointer(g_converter_output_stream_get_type), 'g_converter_output_stream_get_type'); LoadProc(Pointer(g_converter_output_stream_new), 'g_converter_output_stream_new'); LoadProc(Pointer(g_converter_reset), 'g_converter_reset'); LoadProc(Pointer(g_credentials_get_native), 'g_credentials_get_native'); LoadProc(Pointer(g_credentials_get_type), 'g_credentials_get_type'); LoadProc(Pointer(g_credentials_get_unix_pid), 'g_credentials_get_unix_pid'); LoadProc(Pointer(g_credentials_get_unix_user), 'g_credentials_get_unix_user'); LoadProc(Pointer(g_credentials_is_same_user), 'g_credentials_is_same_user'); LoadProc(Pointer(g_credentials_new), 'g_credentials_new'); LoadProc(Pointer(g_credentials_set_native), 'g_credentials_set_native'); LoadProc(Pointer(g_credentials_set_unix_user), 'g_credentials_set_unix_user'); LoadProc(Pointer(g_credentials_to_string), 'g_credentials_to_string'); LoadProc(Pointer(g_data_input_stream_get_byte_order), 'g_data_input_stream_get_byte_order'); LoadProc(Pointer(g_data_input_stream_get_newline_type), 'g_data_input_stream_get_newline_type'); LoadProc(Pointer(g_data_input_stream_get_type), 'g_data_input_stream_get_type'); LoadProc(Pointer(g_data_input_stream_new), 'g_data_input_stream_new'); LoadProc(Pointer(g_data_input_stream_read_byte), 'g_data_input_stream_read_byte'); LoadProc(Pointer(g_data_input_stream_read_int16), 'g_data_input_stream_read_int16'); LoadProc(Pointer(g_data_input_stream_read_int32), 'g_data_input_stream_read_int32'); LoadProc(Pointer(g_data_input_stream_read_int64), 'g_data_input_stream_read_int64'); LoadProc(Pointer(g_data_input_stream_read_line), 'g_data_input_stream_read_line'); LoadProc(Pointer(g_data_input_stream_read_line_async), 'g_data_input_stream_read_line_async'); LoadProc(Pointer(g_data_input_stream_read_line_finish), 'g_data_input_stream_read_line_finish'); LoadProc(Pointer(g_data_input_stream_read_line_finish_utf8), 'g_data_input_stream_read_line_finish_utf8'); LoadProc(Pointer(g_data_input_stream_read_line_utf8), 'g_data_input_stream_read_line_utf8'); LoadProc(Pointer(g_data_input_stream_read_uint16), 'g_data_input_stream_read_uint16'); LoadProc(Pointer(g_data_input_stream_read_uint32), 'g_data_input_stream_read_uint32'); LoadProc(Pointer(g_data_input_stream_read_uint64), 'g_data_input_stream_read_uint64'); LoadProc(Pointer(g_data_input_stream_read_until), 'g_data_input_stream_read_until'); LoadProc(Pointer(g_data_input_stream_read_until_async), 'g_data_input_stream_read_until_async'); LoadProc(Pointer(g_data_input_stream_read_until_finish), 'g_data_input_stream_read_until_finish'); LoadProc(Pointer(g_data_input_stream_read_upto), 'g_data_input_stream_read_upto'); LoadProc(Pointer(g_data_input_stream_read_upto_async), 'g_data_input_stream_read_upto_async'); LoadProc(Pointer(g_data_input_stream_read_upto_finish), 'g_data_input_stream_read_upto_finish'); LoadProc(Pointer(g_data_input_stream_set_byte_order), 'g_data_input_stream_set_byte_order'); LoadProc(Pointer(g_data_input_stream_set_newline_type), 'g_data_input_stream_set_newline_type'); LoadProc(Pointer(g_data_output_stream_get_byte_order), 'g_data_output_stream_get_byte_order'); LoadProc(Pointer(g_data_output_stream_get_type), 'g_data_output_stream_get_type'); LoadProc(Pointer(g_data_output_stream_new), 'g_data_output_stream_new'); LoadProc(Pointer(g_data_output_stream_put_byte), 'g_data_output_stream_put_byte'); LoadProc(Pointer(g_data_output_stream_put_int16), 'g_data_output_stream_put_int16'); LoadProc(Pointer(g_data_output_stream_put_int32), 'g_data_output_stream_put_int32'); LoadProc(Pointer(g_data_output_stream_put_int64), 'g_data_output_stream_put_int64'); LoadProc(Pointer(g_data_output_stream_put_string), 'g_data_output_stream_put_string'); LoadProc(Pointer(g_data_output_stream_put_uint16), 'g_data_output_stream_put_uint16'); LoadProc(Pointer(g_data_output_stream_put_uint32), 'g_data_output_stream_put_uint32'); LoadProc(Pointer(g_data_output_stream_put_uint64), 'g_data_output_stream_put_uint64'); LoadProc(Pointer(g_data_output_stream_set_byte_order), 'g_data_output_stream_set_byte_order'); LoadProc(Pointer(g_dbus_action_group_get), 'g_dbus_action_group_get'); LoadProc(Pointer(g_dbus_action_group_get_type), 'g_dbus_action_group_get_type'); LoadProc(Pointer(g_dbus_address_escape_value), 'g_dbus_address_escape_value'); LoadProc(Pointer(g_dbus_address_get_for_bus_sync), 'g_dbus_address_get_for_bus_sync'); LoadProc(Pointer(g_dbus_address_get_stream), 'g_dbus_address_get_stream'); LoadProc(Pointer(g_dbus_address_get_stream_finish), 'g_dbus_address_get_stream_finish'); LoadProc(Pointer(g_dbus_address_get_stream_sync), 'g_dbus_address_get_stream_sync'); LoadProc(Pointer(g_dbus_annotation_info_get_type), 'g_dbus_annotation_info_get_type'); LoadProc(Pointer(g_dbus_annotation_info_lookup), 'g_dbus_annotation_info_lookup'); LoadProc(Pointer(g_dbus_annotation_info_ref), 'g_dbus_annotation_info_ref'); LoadProc(Pointer(g_dbus_annotation_info_unref), 'g_dbus_annotation_info_unref'); LoadProc(Pointer(g_dbus_arg_info_get_type), 'g_dbus_arg_info_get_type'); LoadProc(Pointer(g_dbus_arg_info_ref), 'g_dbus_arg_info_ref'); LoadProc(Pointer(g_dbus_arg_info_unref), 'g_dbus_arg_info_unref'); LoadProc(Pointer(g_dbus_auth_observer_allow_mechanism), 'g_dbus_auth_observer_allow_mechanism'); LoadProc(Pointer(g_dbus_auth_observer_authorize_authenticated_peer), 'g_dbus_auth_observer_authorize_authenticated_peer'); LoadProc(Pointer(g_dbus_auth_observer_get_type), 'g_dbus_auth_observer_get_type'); LoadProc(Pointer(g_dbus_auth_observer_new), 'g_dbus_auth_observer_new'); LoadProc(Pointer(g_dbus_connection_add_filter), 'g_dbus_connection_add_filter'); LoadProc(Pointer(g_dbus_connection_call), 'g_dbus_connection_call'); LoadProc(Pointer(g_dbus_connection_call_finish), 'g_dbus_connection_call_finish'); LoadProc(Pointer(g_dbus_connection_call_sync), 'g_dbus_connection_call_sync'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list), 'g_dbus_connection_call_with_unix_fd_list'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list_finish), 'g_dbus_connection_call_with_unix_fd_list_finish'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list_sync), 'g_dbus_connection_call_with_unix_fd_list_sync'); LoadProc(Pointer(g_dbus_connection_close), 'g_dbus_connection_close'); LoadProc(Pointer(g_dbus_connection_close_finish), 'g_dbus_connection_close_finish'); LoadProc(Pointer(g_dbus_connection_close_sync), 'g_dbus_connection_close_sync'); LoadProc(Pointer(g_dbus_connection_emit_signal), 'g_dbus_connection_emit_signal'); LoadProc(Pointer(g_dbus_connection_export_action_group), 'g_dbus_connection_export_action_group'); LoadProc(Pointer(g_dbus_connection_export_menu_model), 'g_dbus_connection_export_menu_model'); LoadProc(Pointer(g_dbus_connection_flush), 'g_dbus_connection_flush'); LoadProc(Pointer(g_dbus_connection_flush_finish), 'g_dbus_connection_flush_finish'); LoadProc(Pointer(g_dbus_connection_flush_sync), 'g_dbus_connection_flush_sync'); LoadProc(Pointer(g_dbus_connection_get_capabilities), 'g_dbus_connection_get_capabilities'); LoadProc(Pointer(g_dbus_connection_get_exit_on_close), 'g_dbus_connection_get_exit_on_close'); LoadProc(Pointer(g_dbus_connection_get_guid), 'g_dbus_connection_get_guid'); LoadProc(Pointer(g_dbus_connection_get_last_serial), 'g_dbus_connection_get_last_serial'); LoadProc(Pointer(g_dbus_connection_get_peer_credentials), 'g_dbus_connection_get_peer_credentials'); LoadProc(Pointer(g_dbus_connection_get_stream), 'g_dbus_connection_get_stream'); LoadProc(Pointer(g_dbus_connection_get_type), 'g_dbus_connection_get_type'); LoadProc(Pointer(g_dbus_connection_get_unique_name), 'g_dbus_connection_get_unique_name'); LoadProc(Pointer(g_dbus_connection_is_closed), 'g_dbus_connection_is_closed'); LoadProc(Pointer(g_dbus_connection_new), 'g_dbus_connection_new'); LoadProc(Pointer(g_dbus_connection_new_finish), 'g_dbus_connection_new_finish'); LoadProc(Pointer(g_dbus_connection_new_for_address), 'g_dbus_connection_new_for_address'); LoadProc(Pointer(g_dbus_connection_new_for_address_finish), 'g_dbus_connection_new_for_address_finish'); LoadProc(Pointer(g_dbus_connection_new_for_address_sync), 'g_dbus_connection_new_for_address_sync'); LoadProc(Pointer(g_dbus_connection_new_sync), 'g_dbus_connection_new_sync'); LoadProc(Pointer(g_dbus_connection_register_object), 'g_dbus_connection_register_object'); LoadProc(Pointer(g_dbus_connection_register_subtree), 'g_dbus_connection_register_subtree'); LoadProc(Pointer(g_dbus_connection_remove_filter), 'g_dbus_connection_remove_filter'); LoadProc(Pointer(g_dbus_connection_send_message), 'g_dbus_connection_send_message'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply), 'g_dbus_connection_send_message_with_reply'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply_finish), 'g_dbus_connection_send_message_with_reply_finish'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply_sync), 'g_dbus_connection_send_message_with_reply_sync'); LoadProc(Pointer(g_dbus_connection_set_exit_on_close), 'g_dbus_connection_set_exit_on_close'); LoadProc(Pointer(g_dbus_connection_signal_subscribe), 'g_dbus_connection_signal_subscribe'); LoadProc(Pointer(g_dbus_connection_signal_unsubscribe), 'g_dbus_connection_signal_unsubscribe'); LoadProc(Pointer(g_dbus_connection_start_message_processing), 'g_dbus_connection_start_message_processing'); LoadProc(Pointer(g_dbus_connection_unexport_action_group), 'g_dbus_connection_unexport_action_group'); LoadProc(Pointer(g_dbus_connection_unexport_menu_model), 'g_dbus_connection_unexport_menu_model'); LoadProc(Pointer(g_dbus_connection_unregister_object), 'g_dbus_connection_unregister_object'); LoadProc(Pointer(g_dbus_connection_unregister_subtree), 'g_dbus_connection_unregister_subtree'); LoadProc(Pointer(g_dbus_error_encode_gerror), 'g_dbus_error_encode_gerror'); LoadProc(Pointer(g_dbus_error_get_remote_error), 'g_dbus_error_get_remote_error'); LoadProc(Pointer(g_dbus_error_is_remote_error), 'g_dbus_error_is_remote_error'); LoadProc(Pointer(g_dbus_error_new_for_dbus_error), 'g_dbus_error_new_for_dbus_error'); LoadProc(Pointer(g_dbus_error_quark), 'g_dbus_error_quark'); LoadProc(Pointer(g_dbus_error_register_error), 'g_dbus_error_register_error'); LoadProc(Pointer(g_dbus_error_register_error_domain), 'g_dbus_error_register_error_domain'); LoadProc(Pointer(g_dbus_error_set_dbus_error), 'g_dbus_error_set_dbus_error'); LoadProc(Pointer(g_dbus_error_set_dbus_error_valist), 'g_dbus_error_set_dbus_error_valist'); LoadProc(Pointer(g_dbus_error_strip_remote_error), 'g_dbus_error_strip_remote_error'); LoadProc(Pointer(g_dbus_error_unregister_error), 'g_dbus_error_unregister_error'); LoadProc(Pointer(g_dbus_generate_guid), 'g_dbus_generate_guid'); LoadProc(Pointer(g_dbus_gvalue_to_gvariant), 'g_dbus_gvalue_to_gvariant'); LoadProc(Pointer(g_dbus_gvariant_to_gvalue), 'g_dbus_gvariant_to_gvalue'); LoadProc(Pointer(g_dbus_interface_dup_object), 'g_dbus_interface_dup_object'); LoadProc(Pointer(g_dbus_interface_get_info), 'g_dbus_interface_get_info'); LoadProc(Pointer(g_dbus_interface_get_object), 'g_dbus_interface_get_object'); LoadProc(Pointer(g_dbus_interface_get_type), 'g_dbus_interface_get_type'); LoadProc(Pointer(g_dbus_interface_info_cache_build), 'g_dbus_interface_info_cache_build'); LoadProc(Pointer(g_dbus_interface_info_cache_release), 'g_dbus_interface_info_cache_release'); LoadProc(Pointer(g_dbus_interface_info_generate_xml), 'g_dbus_interface_info_generate_xml'); LoadProc(Pointer(g_dbus_interface_info_get_type), 'g_dbus_interface_info_get_type'); LoadProc(Pointer(g_dbus_interface_info_lookup_method), 'g_dbus_interface_info_lookup_method'); LoadProc(Pointer(g_dbus_interface_info_lookup_property), 'g_dbus_interface_info_lookup_property'); LoadProc(Pointer(g_dbus_interface_info_lookup_signal), 'g_dbus_interface_info_lookup_signal'); LoadProc(Pointer(g_dbus_interface_info_ref), 'g_dbus_interface_info_ref'); LoadProc(Pointer(g_dbus_interface_info_unref), 'g_dbus_interface_info_unref'); LoadProc(Pointer(g_dbus_interface_set_object), 'g_dbus_interface_set_object'); LoadProc(Pointer(g_dbus_interface_skeleton_export), 'g_dbus_interface_skeleton_export'); LoadProc(Pointer(g_dbus_interface_skeleton_flush), 'g_dbus_interface_skeleton_flush'); LoadProc(Pointer(g_dbus_interface_skeleton_get_connection), 'g_dbus_interface_skeleton_get_connection'); LoadProc(Pointer(g_dbus_interface_skeleton_get_connections), 'g_dbus_interface_skeleton_get_connections'); LoadProc(Pointer(g_dbus_interface_skeleton_get_flags), 'g_dbus_interface_skeleton_get_flags'); LoadProc(Pointer(g_dbus_interface_skeleton_get_info), 'g_dbus_interface_skeleton_get_info'); LoadProc(Pointer(g_dbus_interface_skeleton_get_object_path), 'g_dbus_interface_skeleton_get_object_path'); LoadProc(Pointer(g_dbus_interface_skeleton_get_properties), 'g_dbus_interface_skeleton_get_properties'); LoadProc(Pointer(g_dbus_interface_skeleton_get_type), 'g_dbus_interface_skeleton_get_type'); LoadProc(Pointer(g_dbus_interface_skeleton_get_vtable), 'g_dbus_interface_skeleton_get_vtable'); LoadProc(Pointer(g_dbus_interface_skeleton_has_connection), 'g_dbus_interface_skeleton_has_connection'); LoadProc(Pointer(g_dbus_interface_skeleton_set_flags), 'g_dbus_interface_skeleton_set_flags'); LoadProc(Pointer(g_dbus_interface_skeleton_unexport), 'g_dbus_interface_skeleton_unexport'); LoadProc(Pointer(g_dbus_interface_skeleton_unexport_from_connection), 'g_dbus_interface_skeleton_unexport_from_connection'); LoadProc(Pointer(g_dbus_is_address), 'g_dbus_is_address'); LoadProc(Pointer(g_dbus_is_guid), 'g_dbus_is_guid'); LoadProc(Pointer(g_dbus_is_interface_name), 'g_dbus_is_interface_name'); LoadProc(Pointer(g_dbus_is_member_name), 'g_dbus_is_member_name'); LoadProc(Pointer(g_dbus_is_name), 'g_dbus_is_name'); LoadProc(Pointer(g_dbus_is_supported_address), 'g_dbus_is_supported_address'); LoadProc(Pointer(g_dbus_is_unique_name), 'g_dbus_is_unique_name'); LoadProc(Pointer(g_dbus_menu_model_get), 'g_dbus_menu_model_get'); LoadProc(Pointer(g_dbus_menu_model_get_type), 'g_dbus_menu_model_get_type'); LoadProc(Pointer(g_dbus_message_bytes_needed), 'g_dbus_message_bytes_needed'); LoadProc(Pointer(g_dbus_message_copy), 'g_dbus_message_copy'); LoadProc(Pointer(g_dbus_message_get_arg0), 'g_dbus_message_get_arg0'); LoadProc(Pointer(g_dbus_message_get_body), 'g_dbus_message_get_body'); LoadProc(Pointer(g_dbus_message_get_byte_order), 'g_dbus_message_get_byte_order'); LoadProc(Pointer(g_dbus_message_get_destination), 'g_dbus_message_get_destination'); LoadProc(Pointer(g_dbus_message_get_error_name), 'g_dbus_message_get_error_name'); LoadProc(Pointer(g_dbus_message_get_flags), 'g_dbus_message_get_flags'); LoadProc(Pointer(g_dbus_message_get_header), 'g_dbus_message_get_header'); LoadProc(Pointer(g_dbus_message_get_header_fields), 'g_dbus_message_get_header_fields'); LoadProc(Pointer(g_dbus_message_get_interface), 'g_dbus_message_get_interface'); LoadProc(Pointer(g_dbus_message_get_locked), 'g_dbus_message_get_locked'); LoadProc(Pointer(g_dbus_message_get_member), 'g_dbus_message_get_member'); LoadProc(Pointer(g_dbus_message_get_message_type), 'g_dbus_message_get_message_type'); LoadProc(Pointer(g_dbus_message_get_num_unix_fds), 'g_dbus_message_get_num_unix_fds'); LoadProc(Pointer(g_dbus_message_get_path), 'g_dbus_message_get_path'); LoadProc(Pointer(g_dbus_message_get_reply_serial), 'g_dbus_message_get_reply_serial'); LoadProc(Pointer(g_dbus_message_get_sender), 'g_dbus_message_get_sender'); LoadProc(Pointer(g_dbus_message_get_serial), 'g_dbus_message_get_serial'); LoadProc(Pointer(g_dbus_message_get_signature), 'g_dbus_message_get_signature'); LoadProc(Pointer(g_dbus_message_get_type), 'g_dbus_message_get_type'); LoadProc(Pointer(g_dbus_message_get_unix_fd_list), 'g_dbus_message_get_unix_fd_list'); LoadProc(Pointer(g_dbus_message_lock), 'g_dbus_message_lock'); LoadProc(Pointer(g_dbus_message_new), 'g_dbus_message_new'); LoadProc(Pointer(g_dbus_message_new_from_blob), 'g_dbus_message_new_from_blob'); LoadProc(Pointer(g_dbus_message_new_method_call), 'g_dbus_message_new_method_call'); LoadProc(Pointer(g_dbus_message_new_method_error), 'g_dbus_message_new_method_error'); LoadProc(Pointer(g_dbus_message_new_method_error_literal), 'g_dbus_message_new_method_error_literal'); LoadProc(Pointer(g_dbus_message_new_method_error_valist), 'g_dbus_message_new_method_error_valist'); LoadProc(Pointer(g_dbus_message_new_method_reply), 'g_dbus_message_new_method_reply'); LoadProc(Pointer(g_dbus_message_new_signal), 'g_dbus_message_new_signal'); LoadProc(Pointer(g_dbus_message_print), 'g_dbus_message_print'); LoadProc(Pointer(g_dbus_message_set_body), 'g_dbus_message_set_body'); LoadProc(Pointer(g_dbus_message_set_byte_order), 'g_dbus_message_set_byte_order'); LoadProc(Pointer(g_dbus_message_set_destination), 'g_dbus_message_set_destination'); LoadProc(Pointer(g_dbus_message_set_error_name), 'g_dbus_message_set_error_name'); LoadProc(Pointer(g_dbus_message_set_flags), 'g_dbus_message_set_flags'); LoadProc(Pointer(g_dbus_message_set_header), 'g_dbus_message_set_header'); LoadProc(Pointer(g_dbus_message_set_interface), 'g_dbus_message_set_interface'); LoadProc(Pointer(g_dbus_message_set_member), 'g_dbus_message_set_member'); LoadProc(Pointer(g_dbus_message_set_message_type), 'g_dbus_message_set_message_type'); LoadProc(Pointer(g_dbus_message_set_num_unix_fds), 'g_dbus_message_set_num_unix_fds'); LoadProc(Pointer(g_dbus_message_set_path), 'g_dbus_message_set_path'); LoadProc(Pointer(g_dbus_message_set_reply_serial), 'g_dbus_message_set_reply_serial'); LoadProc(Pointer(g_dbus_message_set_sender), 'g_dbus_message_set_sender'); LoadProc(Pointer(g_dbus_message_set_serial), 'g_dbus_message_set_serial'); LoadProc(Pointer(g_dbus_message_set_signature), 'g_dbus_message_set_signature'); LoadProc(Pointer(g_dbus_message_set_unix_fd_list), 'g_dbus_message_set_unix_fd_list'); LoadProc(Pointer(g_dbus_message_to_blob), 'g_dbus_message_to_blob'); LoadProc(Pointer(g_dbus_message_to_gerror), 'g_dbus_message_to_gerror'); LoadProc(Pointer(g_dbus_method_info_get_type), 'g_dbus_method_info_get_type'); LoadProc(Pointer(g_dbus_method_info_ref), 'g_dbus_method_info_ref'); LoadProc(Pointer(g_dbus_method_info_unref), 'g_dbus_method_info_unref'); LoadProc(Pointer(g_dbus_method_invocation_get_connection), 'g_dbus_method_invocation_get_connection'); LoadProc(Pointer(g_dbus_method_invocation_get_interface_name), 'g_dbus_method_invocation_get_interface_name'); LoadProc(Pointer(g_dbus_method_invocation_get_message), 'g_dbus_method_invocation_get_message'); LoadProc(Pointer(g_dbus_method_invocation_get_method_info), 'g_dbus_method_invocation_get_method_info'); LoadProc(Pointer(g_dbus_method_invocation_get_method_name), 'g_dbus_method_invocation_get_method_name'); LoadProc(Pointer(g_dbus_method_invocation_get_object_path), 'g_dbus_method_invocation_get_object_path'); LoadProc(Pointer(g_dbus_method_invocation_get_parameters), 'g_dbus_method_invocation_get_parameters'); LoadProc(Pointer(g_dbus_method_invocation_get_sender), 'g_dbus_method_invocation_get_sender'); LoadProc(Pointer(g_dbus_method_invocation_get_type), 'g_dbus_method_invocation_get_type'); LoadProc(Pointer(g_dbus_method_invocation_get_user_data), 'g_dbus_method_invocation_get_user_data'); LoadProc(Pointer(g_dbus_method_invocation_return_dbus_error), 'g_dbus_method_invocation_return_dbus_error'); LoadProc(Pointer(g_dbus_method_invocation_return_error), 'g_dbus_method_invocation_return_error'); LoadProc(Pointer(g_dbus_method_invocation_return_error_literal), 'g_dbus_method_invocation_return_error_literal'); LoadProc(Pointer(g_dbus_method_invocation_return_error_valist), 'g_dbus_method_invocation_return_error_valist'); LoadProc(Pointer(g_dbus_method_invocation_return_gerror), 'g_dbus_method_invocation_return_gerror'); LoadProc(Pointer(g_dbus_method_invocation_return_value), 'g_dbus_method_invocation_return_value'); LoadProc(Pointer(g_dbus_method_invocation_return_value_with_unix_fd_list), 'g_dbus_method_invocation_return_value_with_unix_fd_list'); LoadProc(Pointer(g_dbus_method_invocation_take_error), 'g_dbus_method_invocation_take_error'); LoadProc(Pointer(g_dbus_node_info_generate_xml), 'g_dbus_node_info_generate_xml'); LoadProc(Pointer(g_dbus_node_info_get_type), 'g_dbus_node_info_get_type'); LoadProc(Pointer(g_dbus_node_info_lookup_interface), 'g_dbus_node_info_lookup_interface'); LoadProc(Pointer(g_dbus_node_info_new_for_xml), 'g_dbus_node_info_new_for_xml'); LoadProc(Pointer(g_dbus_node_info_ref), 'g_dbus_node_info_ref'); LoadProc(Pointer(g_dbus_node_info_unref), 'g_dbus_node_info_unref'); LoadProc(Pointer(g_dbus_object_get_interface), 'g_dbus_object_get_interface'); LoadProc(Pointer(g_dbus_object_get_interfaces), 'g_dbus_object_get_interfaces'); LoadProc(Pointer(g_dbus_object_get_object_path), 'g_dbus_object_get_object_path'); LoadProc(Pointer(g_dbus_object_get_type), 'g_dbus_object_get_type'); LoadProc(Pointer(g_dbus_object_manager_client_get_connection), 'g_dbus_object_manager_client_get_connection'); LoadProc(Pointer(g_dbus_object_manager_client_get_flags), 'g_dbus_object_manager_client_get_flags'); LoadProc(Pointer(g_dbus_object_manager_client_get_name), 'g_dbus_object_manager_client_get_name'); LoadProc(Pointer(g_dbus_object_manager_client_get_name_owner), 'g_dbus_object_manager_client_get_name_owner'); LoadProc(Pointer(g_dbus_object_manager_client_get_type), 'g_dbus_object_manager_client_get_type'); LoadProc(Pointer(g_dbus_object_manager_client_new), 'g_dbus_object_manager_client_new'); LoadProc(Pointer(g_dbus_object_manager_client_new_finish), 'g_dbus_object_manager_client_new_finish'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus), 'g_dbus_object_manager_client_new_for_bus'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus_finish), 'g_dbus_object_manager_client_new_for_bus_finish'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus_sync), 'g_dbus_object_manager_client_new_for_bus_sync'); LoadProc(Pointer(g_dbus_object_manager_client_new_sync), 'g_dbus_object_manager_client_new_sync'); LoadProc(Pointer(g_dbus_object_manager_get_interface), 'g_dbus_object_manager_get_interface'); LoadProc(Pointer(g_dbus_object_manager_get_object), 'g_dbus_object_manager_get_object'); LoadProc(Pointer(g_dbus_object_manager_get_object_path), 'g_dbus_object_manager_get_object_path'); LoadProc(Pointer(g_dbus_object_manager_get_objects), 'g_dbus_object_manager_get_objects'); LoadProc(Pointer(g_dbus_object_manager_get_type), 'g_dbus_object_manager_get_type'); LoadProc(Pointer(g_dbus_object_manager_server_export), 'g_dbus_object_manager_server_export'); LoadProc(Pointer(g_dbus_object_manager_server_export_uniquely), 'g_dbus_object_manager_server_export_uniquely'); LoadProc(Pointer(g_dbus_object_manager_server_get_connection), 'g_dbus_object_manager_server_get_connection'); LoadProc(Pointer(g_dbus_object_manager_server_get_type), 'g_dbus_object_manager_server_get_type'); LoadProc(Pointer(g_dbus_object_manager_server_is_exported), 'g_dbus_object_manager_server_is_exported'); LoadProc(Pointer(g_dbus_object_manager_server_new), 'g_dbus_object_manager_server_new'); LoadProc(Pointer(g_dbus_object_manager_server_set_connection), 'g_dbus_object_manager_server_set_connection'); LoadProc(Pointer(g_dbus_object_manager_server_unexport), 'g_dbus_object_manager_server_unexport'); LoadProc(Pointer(g_dbus_object_proxy_get_connection), 'g_dbus_object_proxy_get_connection'); LoadProc(Pointer(g_dbus_object_proxy_get_type), 'g_dbus_object_proxy_get_type'); LoadProc(Pointer(g_dbus_object_proxy_new), 'g_dbus_object_proxy_new'); LoadProc(Pointer(g_dbus_object_skeleton_add_interface), 'g_dbus_object_skeleton_add_interface'); LoadProc(Pointer(g_dbus_object_skeleton_flush), 'g_dbus_object_skeleton_flush'); LoadProc(Pointer(g_dbus_object_skeleton_get_type), 'g_dbus_object_skeleton_get_type'); LoadProc(Pointer(g_dbus_object_skeleton_new), 'g_dbus_object_skeleton_new'); LoadProc(Pointer(g_dbus_object_skeleton_remove_interface), 'g_dbus_object_skeleton_remove_interface'); LoadProc(Pointer(g_dbus_object_skeleton_remove_interface_by_name), 'g_dbus_object_skeleton_remove_interface_by_name'); LoadProc(Pointer(g_dbus_object_skeleton_set_object_path), 'g_dbus_object_skeleton_set_object_path'); LoadProc(Pointer(g_dbus_property_info_get_type), 'g_dbus_property_info_get_type'); LoadProc(Pointer(g_dbus_property_info_ref), 'g_dbus_property_info_ref'); LoadProc(Pointer(g_dbus_property_info_unref), 'g_dbus_property_info_unref'); LoadProc(Pointer(g_dbus_proxy_call), 'g_dbus_proxy_call'); LoadProc(Pointer(g_dbus_proxy_call_finish), 'g_dbus_proxy_call_finish'); LoadProc(Pointer(g_dbus_proxy_call_sync), 'g_dbus_proxy_call_sync'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list), 'g_dbus_proxy_call_with_unix_fd_list'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list_finish), 'g_dbus_proxy_call_with_unix_fd_list_finish'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list_sync), 'g_dbus_proxy_call_with_unix_fd_list_sync'); LoadProc(Pointer(g_dbus_proxy_get_cached_property), 'g_dbus_proxy_get_cached_property'); LoadProc(Pointer(g_dbus_proxy_get_cached_property_names), 'g_dbus_proxy_get_cached_property_names'); LoadProc(Pointer(g_dbus_proxy_get_connection), 'g_dbus_proxy_get_connection'); LoadProc(Pointer(g_dbus_proxy_get_default_timeout), 'g_dbus_proxy_get_default_timeout'); LoadProc(Pointer(g_dbus_proxy_get_flags), 'g_dbus_proxy_get_flags'); LoadProc(Pointer(g_dbus_proxy_get_interface_info), 'g_dbus_proxy_get_interface_info'); LoadProc(Pointer(g_dbus_proxy_get_interface_name), 'g_dbus_proxy_get_interface_name'); LoadProc(Pointer(g_dbus_proxy_get_name), 'g_dbus_proxy_get_name'); LoadProc(Pointer(g_dbus_proxy_get_name_owner), 'g_dbus_proxy_get_name_owner'); LoadProc(Pointer(g_dbus_proxy_get_object_path), 'g_dbus_proxy_get_object_path'); LoadProc(Pointer(g_dbus_proxy_get_type), 'g_dbus_proxy_get_type'); LoadProc(Pointer(g_dbus_proxy_new), 'g_dbus_proxy_new'); LoadProc(Pointer(g_dbus_proxy_new_finish), 'g_dbus_proxy_new_finish'); LoadProc(Pointer(g_dbus_proxy_new_for_bus), 'g_dbus_proxy_new_for_bus'); LoadProc(Pointer(g_dbus_proxy_new_for_bus_finish), 'g_dbus_proxy_new_for_bus_finish'); LoadProc(Pointer(g_dbus_proxy_new_for_bus_sync), 'g_dbus_proxy_new_for_bus_sync'); LoadProc(Pointer(g_dbus_proxy_new_sync), 'g_dbus_proxy_new_sync'); LoadProc(Pointer(g_dbus_proxy_set_cached_property), 'g_dbus_proxy_set_cached_property'); LoadProc(Pointer(g_dbus_proxy_set_default_timeout), 'g_dbus_proxy_set_default_timeout'); LoadProc(Pointer(g_dbus_proxy_set_interface_info), 'g_dbus_proxy_set_interface_info'); LoadProc(Pointer(g_dbus_server_get_client_address), 'g_dbus_server_get_client_address'); LoadProc(Pointer(g_dbus_server_get_flags), 'g_dbus_server_get_flags'); LoadProc(Pointer(g_dbus_server_get_guid), 'g_dbus_server_get_guid'); LoadProc(Pointer(g_dbus_server_get_type), 'g_dbus_server_get_type'); LoadProc(Pointer(g_dbus_server_is_active), 'g_dbus_server_is_active'); LoadProc(Pointer(g_dbus_server_new_sync), 'g_dbus_server_new_sync'); LoadProc(Pointer(g_dbus_server_start), 'g_dbus_server_start'); LoadProc(Pointer(g_dbus_server_stop), 'g_dbus_server_stop'); LoadProc(Pointer(g_dbus_signal_info_get_type), 'g_dbus_signal_info_get_type'); LoadProc(Pointer(g_dbus_signal_info_ref), 'g_dbus_signal_info_ref'); LoadProc(Pointer(g_dbus_signal_info_unref), 'g_dbus_signal_info_unref'); LoadProc(Pointer(g_desktop_app_info_get_boolean), 'g_desktop_app_info_get_boolean'); LoadProc(Pointer(g_desktop_app_info_get_categories), 'g_desktop_app_info_get_categories'); LoadProc(Pointer(g_desktop_app_info_get_filename), 'g_desktop_app_info_get_filename'); LoadProc(Pointer(g_desktop_app_info_get_generic_name), 'g_desktop_app_info_get_generic_name'); LoadProc(Pointer(g_desktop_app_info_get_is_hidden), 'g_desktop_app_info_get_is_hidden'); LoadProc(Pointer(g_desktop_app_info_get_keywords), 'g_desktop_app_info_get_keywords'); LoadProc(Pointer(g_desktop_app_info_get_nodisplay), 'g_desktop_app_info_get_nodisplay'); LoadProc(Pointer(g_desktop_app_info_get_show_in), 'g_desktop_app_info_get_show_in'); LoadProc(Pointer(g_desktop_app_info_get_startup_wm_class), 'g_desktop_app_info_get_startup_wm_class'); LoadProc(Pointer(g_desktop_app_info_get_string), 'g_desktop_app_info_get_string'); LoadProc(Pointer(g_desktop_app_info_get_type), 'g_desktop_app_info_get_type'); LoadProc(Pointer(g_desktop_app_info_has_key), 'g_desktop_app_info_has_key'); LoadProc(Pointer(g_desktop_app_info_launch_uris_as_manager), 'g_desktop_app_info_launch_uris_as_manager'); LoadProc(Pointer(g_desktop_app_info_lookup_get_type), 'g_desktop_app_info_lookup_get_type'); LoadProc(Pointer(g_desktop_app_info_new), 'g_desktop_app_info_new'); LoadProc(Pointer(g_desktop_app_info_new_from_filename), 'g_desktop_app_info_new_from_filename'); LoadProc(Pointer(g_desktop_app_info_new_from_keyfile), 'g_desktop_app_info_new_from_keyfile'); LoadProc(Pointer(g_desktop_app_info_set_desktop_env), 'g_desktop_app_info_set_desktop_env'); LoadProc(Pointer(g_drive_can_eject), 'g_drive_can_eject'); LoadProc(Pointer(g_drive_can_poll_for_media), 'g_drive_can_poll_for_media'); LoadProc(Pointer(g_drive_can_start), 'g_drive_can_start'); LoadProc(Pointer(g_drive_can_start_degraded), 'g_drive_can_start_degraded'); LoadProc(Pointer(g_drive_can_stop), 'g_drive_can_stop'); LoadProc(Pointer(g_drive_eject_with_operation), 'g_drive_eject_with_operation'); LoadProc(Pointer(g_drive_eject_with_operation_finish), 'g_drive_eject_with_operation_finish'); LoadProc(Pointer(g_drive_enumerate_identifiers), 'g_drive_enumerate_identifiers'); LoadProc(Pointer(g_drive_get_icon), 'g_drive_get_icon'); LoadProc(Pointer(g_drive_get_identifier), 'g_drive_get_identifier'); LoadProc(Pointer(g_drive_get_name), 'g_drive_get_name'); LoadProc(Pointer(g_drive_get_sort_key), 'g_drive_get_sort_key'); LoadProc(Pointer(g_drive_get_start_stop_type), 'g_drive_get_start_stop_type'); LoadProc(Pointer(g_drive_get_symbolic_icon), 'g_drive_get_symbolic_icon'); LoadProc(Pointer(g_drive_get_type), 'g_drive_get_type'); LoadProc(Pointer(g_drive_get_volumes), 'g_drive_get_volumes'); LoadProc(Pointer(g_drive_has_media), 'g_drive_has_media'); LoadProc(Pointer(g_drive_has_volumes), 'g_drive_has_volumes'); LoadProc(Pointer(g_drive_is_media_check_automatic), 'g_drive_is_media_check_automatic'); LoadProc(Pointer(g_drive_is_media_removable), 'g_drive_is_media_removable'); LoadProc(Pointer(g_drive_poll_for_media), 'g_drive_poll_for_media'); LoadProc(Pointer(g_drive_poll_for_media_finish), 'g_drive_poll_for_media_finish'); LoadProc(Pointer(g_drive_start), 'g_drive_start'); LoadProc(Pointer(g_drive_start_finish), 'g_drive_start_finish'); LoadProc(Pointer(g_drive_stop), 'g_drive_stop'); LoadProc(Pointer(g_drive_stop_finish), 'g_drive_stop_finish'); LoadProc(Pointer(g_emblem_get_icon), 'g_emblem_get_icon'); LoadProc(Pointer(g_emblem_get_origin), 'g_emblem_get_origin'); LoadProc(Pointer(g_emblem_get_type), 'g_emblem_get_type'); LoadProc(Pointer(g_emblem_new), 'g_emblem_new'); LoadProc(Pointer(g_emblem_new_with_origin), 'g_emblem_new_with_origin'); LoadProc(Pointer(g_emblemed_icon_add_emblem), 'g_emblemed_icon_add_emblem'); LoadProc(Pointer(g_emblemed_icon_clear_emblems), 'g_emblemed_icon_clear_emblems'); LoadProc(Pointer(g_emblemed_icon_get_emblems), 'g_emblemed_icon_get_emblems'); LoadProc(Pointer(g_emblemed_icon_get_icon), 'g_emblemed_icon_get_icon'); LoadProc(Pointer(g_emblemed_icon_get_type), 'g_emblemed_icon_get_type'); LoadProc(Pointer(g_emblemed_icon_new), 'g_emblemed_icon_new'); LoadProc(Pointer(g_file_append_to), 'g_file_append_to'); LoadProc(Pointer(g_file_append_to_async), 'g_file_append_to_async'); LoadProc(Pointer(g_file_append_to_finish), 'g_file_append_to_finish'); LoadProc(Pointer(g_file_attribute_info_list_add), 'g_file_attribute_info_list_add'); LoadProc(Pointer(g_file_attribute_info_list_dup), 'g_file_attribute_info_list_dup'); LoadProc(Pointer(g_file_attribute_info_list_get_type), 'g_file_attribute_info_list_get_type'); LoadProc(Pointer(g_file_attribute_info_list_lookup), 'g_file_attribute_info_list_lookup'); LoadProc(Pointer(g_file_attribute_info_list_new), 'g_file_attribute_info_list_new'); LoadProc(Pointer(g_file_attribute_info_list_ref), 'g_file_attribute_info_list_ref'); LoadProc(Pointer(g_file_attribute_info_list_unref), 'g_file_attribute_info_list_unref'); LoadProc(Pointer(g_file_attribute_matcher_enumerate_namespace), 'g_file_attribute_matcher_enumerate_namespace'); LoadProc(Pointer(g_file_attribute_matcher_enumerate_next), 'g_file_attribute_matcher_enumerate_next'); LoadProc(Pointer(g_file_attribute_matcher_get_type), 'g_file_attribute_matcher_get_type'); LoadProc(Pointer(g_file_attribute_matcher_matches), 'g_file_attribute_matcher_matches'); LoadProc(Pointer(g_file_attribute_matcher_matches_only), 'g_file_attribute_matcher_matches_only'); LoadProc(Pointer(g_file_attribute_matcher_new), 'g_file_attribute_matcher_new'); LoadProc(Pointer(g_file_attribute_matcher_ref), 'g_file_attribute_matcher_ref'); LoadProc(Pointer(g_file_attribute_matcher_subtract), 'g_file_attribute_matcher_subtract'); LoadProc(Pointer(g_file_attribute_matcher_to_string), 'g_file_attribute_matcher_to_string'); LoadProc(Pointer(g_file_attribute_matcher_unref), 'g_file_attribute_matcher_unref'); LoadProc(Pointer(g_file_copy), 'g_file_copy'); LoadProc(Pointer(g_file_copy_async), 'g_file_copy_async'); LoadProc(Pointer(g_file_copy_attributes), 'g_file_copy_attributes'); LoadProc(Pointer(g_file_copy_finish), 'g_file_copy_finish'); LoadProc(Pointer(g_file_create), 'g_file_create'); LoadProc(Pointer(g_file_create_async), 'g_file_create_async'); LoadProc(Pointer(g_file_create_finish), 'g_file_create_finish'); LoadProc(Pointer(g_file_create_readwrite), 'g_file_create_readwrite'); LoadProc(Pointer(g_file_create_readwrite_async), 'g_file_create_readwrite_async'); LoadProc(Pointer(g_file_create_readwrite_finish), 'g_file_create_readwrite_finish'); LoadProc(Pointer(g_file_delete), 'g_file_delete'); LoadProc(Pointer(g_file_delete_async), 'g_file_delete_async'); LoadProc(Pointer(g_file_delete_finish), 'g_file_delete_finish'); LoadProc(Pointer(g_file_descriptor_based_get_fd), 'g_file_descriptor_based_get_fd'); LoadProc(Pointer(g_file_descriptor_based_get_type), 'g_file_descriptor_based_get_type'); LoadProc(Pointer(g_file_dup), 'g_file_dup'); LoadProc(Pointer(g_file_eject_mountable_with_operation), 'g_file_eject_mountable_with_operation'); LoadProc(Pointer(g_file_eject_mountable_with_operation_finish), 'g_file_eject_mountable_with_operation_finish'); LoadProc(Pointer(g_file_enumerate_children), 'g_file_enumerate_children'); LoadProc(Pointer(g_file_enumerate_children_async), 'g_file_enumerate_children_async'); LoadProc(Pointer(g_file_enumerate_children_finish), 'g_file_enumerate_children_finish'); LoadProc(Pointer(g_file_enumerator_close), 'g_file_enumerator_close'); LoadProc(Pointer(g_file_enumerator_close_async), 'g_file_enumerator_close_async'); LoadProc(Pointer(g_file_enumerator_close_finish), 'g_file_enumerator_close_finish'); LoadProc(Pointer(g_file_enumerator_get_child), 'g_file_enumerator_get_child'); LoadProc(Pointer(g_file_enumerator_get_container), 'g_file_enumerator_get_container'); LoadProc(Pointer(g_file_enumerator_get_type), 'g_file_enumerator_get_type'); LoadProc(Pointer(g_file_enumerator_has_pending), 'g_file_enumerator_has_pending'); LoadProc(Pointer(g_file_enumerator_is_closed), 'g_file_enumerator_is_closed'); LoadProc(Pointer(g_file_enumerator_next_file), 'g_file_enumerator_next_file'); LoadProc(Pointer(g_file_enumerator_next_files_async), 'g_file_enumerator_next_files_async'); LoadProc(Pointer(g_file_enumerator_next_files_finish), 'g_file_enumerator_next_files_finish'); LoadProc(Pointer(g_file_enumerator_set_pending), 'g_file_enumerator_set_pending'); LoadProc(Pointer(g_file_equal), 'g_file_equal'); LoadProc(Pointer(g_file_find_enclosing_mount), 'g_file_find_enclosing_mount'); LoadProc(Pointer(g_file_find_enclosing_mount_async), 'g_file_find_enclosing_mount_async'); LoadProc(Pointer(g_file_find_enclosing_mount_finish), 'g_file_find_enclosing_mount_finish'); LoadProc(Pointer(g_file_get_basename), 'g_file_get_basename'); LoadProc(Pointer(g_file_get_child), 'g_file_get_child'); LoadProc(Pointer(g_file_get_child_for_display_name), 'g_file_get_child_for_display_name'); LoadProc(Pointer(g_file_get_parent), 'g_file_get_parent'); LoadProc(Pointer(g_file_get_parse_name), 'g_file_get_parse_name'); LoadProc(Pointer(g_file_get_path), 'g_file_get_path'); LoadProc(Pointer(g_file_get_relative_path), 'g_file_get_relative_path'); LoadProc(Pointer(g_file_get_type), 'g_file_get_type'); LoadProc(Pointer(g_file_get_uri), 'g_file_get_uri'); LoadProc(Pointer(g_file_get_uri_scheme), 'g_file_get_uri_scheme'); LoadProc(Pointer(g_file_has_parent), 'g_file_has_parent'); LoadProc(Pointer(g_file_has_prefix), 'g_file_has_prefix'); LoadProc(Pointer(g_file_has_uri_scheme), 'g_file_has_uri_scheme'); LoadProc(Pointer(g_file_hash), 'g_file_hash'); LoadProc(Pointer(g_file_icon_get_file), 'g_file_icon_get_file'); LoadProc(Pointer(g_file_icon_get_type), 'g_file_icon_get_type'); LoadProc(Pointer(g_file_icon_new), 'g_file_icon_new'); LoadProc(Pointer(g_file_info_clear_status), 'g_file_info_clear_status'); LoadProc(Pointer(g_file_info_copy_into), 'g_file_info_copy_into'); LoadProc(Pointer(g_file_info_dup), 'g_file_info_dup'); LoadProc(Pointer(g_file_info_get_attribute_as_string), 'g_file_info_get_attribute_as_string'); LoadProc(Pointer(g_file_info_get_attribute_boolean), 'g_file_info_get_attribute_boolean'); LoadProc(Pointer(g_file_info_get_attribute_byte_string), 'g_file_info_get_attribute_byte_string'); LoadProc(Pointer(g_file_info_get_attribute_data), 'g_file_info_get_attribute_data'); LoadProc(Pointer(g_file_info_get_attribute_int32), 'g_file_info_get_attribute_int32'); LoadProc(Pointer(g_file_info_get_attribute_int64), 'g_file_info_get_attribute_int64'); LoadProc(Pointer(g_file_info_get_attribute_object), 'g_file_info_get_attribute_object'); LoadProc(Pointer(g_file_info_get_attribute_status), 'g_file_info_get_attribute_status'); LoadProc(Pointer(g_file_info_get_attribute_string), 'g_file_info_get_attribute_string'); LoadProc(Pointer(g_file_info_get_attribute_stringv), 'g_file_info_get_attribute_stringv'); LoadProc(Pointer(g_file_info_get_attribute_type), 'g_file_info_get_attribute_type'); LoadProc(Pointer(g_file_info_get_attribute_uint32), 'g_file_info_get_attribute_uint32'); LoadProc(Pointer(g_file_info_get_attribute_uint64), 'g_file_info_get_attribute_uint64'); LoadProc(Pointer(g_file_info_get_content_type), 'g_file_info_get_content_type'); LoadProc(Pointer(g_file_info_get_deletion_date), 'g_file_info_get_deletion_date'); LoadProc(Pointer(g_file_info_get_display_name), 'g_file_info_get_display_name'); LoadProc(Pointer(g_file_info_get_edit_name), 'g_file_info_get_edit_name'); LoadProc(Pointer(g_file_info_get_etag), 'g_file_info_get_etag'); LoadProc(Pointer(g_file_info_get_file_type), 'g_file_info_get_file_type'); LoadProc(Pointer(g_file_info_get_icon), 'g_file_info_get_icon'); LoadProc(Pointer(g_file_info_get_is_backup), 'g_file_info_get_is_backup'); LoadProc(Pointer(g_file_info_get_is_hidden), 'g_file_info_get_is_hidden'); LoadProc(Pointer(g_file_info_get_is_symlink), 'g_file_info_get_is_symlink'); LoadProc(Pointer(g_file_info_get_modification_time), 'g_file_info_get_modification_time'); LoadProc(Pointer(g_file_info_get_name), 'g_file_info_get_name'); LoadProc(Pointer(g_file_info_get_size), 'g_file_info_get_size'); LoadProc(Pointer(g_file_info_get_sort_order), 'g_file_info_get_sort_order'); LoadProc(Pointer(g_file_info_get_symbolic_icon), 'g_file_info_get_symbolic_icon'); LoadProc(Pointer(g_file_info_get_symlink_target), 'g_file_info_get_symlink_target'); LoadProc(Pointer(g_file_info_get_type), 'g_file_info_get_type'); LoadProc(Pointer(g_file_info_has_attribute), 'g_file_info_has_attribute'); LoadProc(Pointer(g_file_info_has_namespace), 'g_file_info_has_namespace'); LoadProc(Pointer(g_file_info_list_attributes), 'g_file_info_list_attributes'); LoadProc(Pointer(g_file_info_new), 'g_file_info_new'); LoadProc(Pointer(g_file_info_remove_attribute), 'g_file_info_remove_attribute'); LoadProc(Pointer(g_file_info_set_attribute), 'g_file_info_set_attribute'); LoadProc(Pointer(g_file_info_set_attribute_boolean), 'g_file_info_set_attribute_boolean'); LoadProc(Pointer(g_file_info_set_attribute_byte_string), 'g_file_info_set_attribute_byte_string'); LoadProc(Pointer(g_file_info_set_attribute_int32), 'g_file_info_set_attribute_int32'); LoadProc(Pointer(g_file_info_set_attribute_int64), 'g_file_info_set_attribute_int64'); LoadProc(Pointer(g_file_info_set_attribute_mask), 'g_file_info_set_attribute_mask'); LoadProc(Pointer(g_file_info_set_attribute_object), 'g_file_info_set_attribute_object'); LoadProc(Pointer(g_file_info_set_attribute_status), 'g_file_info_set_attribute_status'); LoadProc(Pointer(g_file_info_set_attribute_string), 'g_file_info_set_attribute_string'); LoadProc(Pointer(g_file_info_set_attribute_stringv), 'g_file_info_set_attribute_stringv'); LoadProc(Pointer(g_file_info_set_attribute_uint32), 'g_file_info_set_attribute_uint32'); LoadProc(Pointer(g_file_info_set_attribute_uint64), 'g_file_info_set_attribute_uint64'); LoadProc(Pointer(g_file_info_set_content_type), 'g_file_info_set_content_type'); LoadProc(Pointer(g_file_info_set_display_name), 'g_file_info_set_display_name'); LoadProc(Pointer(g_file_info_set_edit_name), 'g_file_info_set_edit_name'); LoadProc(Pointer(g_file_info_set_file_type), 'g_file_info_set_file_type'); LoadProc(Pointer(g_file_info_set_icon), 'g_file_info_set_icon'); LoadProc(Pointer(g_file_info_set_is_hidden), 'g_file_info_set_is_hidden'); LoadProc(Pointer(g_file_info_set_is_symlink), 'g_file_info_set_is_symlink'); LoadProc(Pointer(g_file_info_set_modification_time), 'g_file_info_set_modification_time'); LoadProc(Pointer(g_file_info_set_name), 'g_file_info_set_name'); LoadProc(Pointer(g_file_info_set_size), 'g_file_info_set_size'); LoadProc(Pointer(g_file_info_set_sort_order), 'g_file_info_set_sort_order'); LoadProc(Pointer(g_file_info_set_symbolic_icon), 'g_file_info_set_symbolic_icon'); LoadProc(Pointer(g_file_info_set_symlink_target), 'g_file_info_set_symlink_target'); LoadProc(Pointer(g_file_info_unset_attribute_mask), 'g_file_info_unset_attribute_mask'); LoadProc(Pointer(g_file_input_stream_get_type), 'g_file_input_stream_get_type'); LoadProc(Pointer(g_file_input_stream_query_info), 'g_file_input_stream_query_info'); LoadProc(Pointer(g_file_input_stream_query_info_async), 'g_file_input_stream_query_info_async'); LoadProc(Pointer(g_file_input_stream_query_info_finish), 'g_file_input_stream_query_info_finish'); LoadProc(Pointer(g_file_io_stream_get_etag), 'g_file_io_stream_get_etag'); LoadProc(Pointer(g_file_io_stream_get_type), 'g_file_io_stream_get_type'); LoadProc(Pointer(g_file_io_stream_query_info), 'g_file_io_stream_query_info'); LoadProc(Pointer(g_file_io_stream_query_info_async), 'g_file_io_stream_query_info_async'); LoadProc(Pointer(g_file_io_stream_query_info_finish), 'g_file_io_stream_query_info_finish'); LoadProc(Pointer(g_file_is_native), 'g_file_is_native'); LoadProc(Pointer(g_file_load_contents), 'g_file_load_contents'); LoadProc(Pointer(g_file_load_contents_async), 'g_file_load_contents_async'); LoadProc(Pointer(g_file_load_contents_finish), 'g_file_load_contents_finish'); LoadProc(Pointer(g_file_load_partial_contents_async), 'g_file_load_partial_contents_async'); LoadProc(Pointer(g_file_load_partial_contents_finish), 'g_file_load_partial_contents_finish'); LoadProc(Pointer(g_file_make_directory), 'g_file_make_directory'); LoadProc(Pointer(g_file_make_directory_with_parents), 'g_file_make_directory_with_parents'); LoadProc(Pointer(g_file_make_symbolic_link), 'g_file_make_symbolic_link'); LoadProc(Pointer(g_file_monitor), 'g_file_monitor'); LoadProc(Pointer(g_file_monitor_cancel), 'g_file_monitor_cancel'); LoadProc(Pointer(g_file_monitor_directory), 'g_file_monitor_directory'); LoadProc(Pointer(g_file_monitor_emit_event), 'g_file_monitor_emit_event'); LoadProc(Pointer(g_file_monitor_file), 'g_file_monitor_file'); LoadProc(Pointer(g_file_monitor_get_type), 'g_file_monitor_get_type'); LoadProc(Pointer(g_file_monitor_is_cancelled), 'g_file_monitor_is_cancelled'); LoadProc(Pointer(g_file_monitor_set_rate_limit), 'g_file_monitor_set_rate_limit'); LoadProc(Pointer(g_file_mount_enclosing_volume), 'g_file_mount_enclosing_volume'); LoadProc(Pointer(g_file_mount_enclosing_volume_finish), 'g_file_mount_enclosing_volume_finish'); LoadProc(Pointer(g_file_mount_mountable), 'g_file_mount_mountable'); LoadProc(Pointer(g_file_mount_mountable_finish), 'g_file_mount_mountable_finish'); LoadProc(Pointer(g_file_move), 'g_file_move'); LoadProc(Pointer(g_file_new_for_commandline_arg), 'g_file_new_for_commandline_arg'); LoadProc(Pointer(g_file_new_for_commandline_arg_and_cwd), 'g_file_new_for_commandline_arg_and_cwd'); LoadProc(Pointer(g_file_new_for_path), 'g_file_new_for_path'); LoadProc(Pointer(g_file_new_for_uri), 'g_file_new_for_uri'); LoadProc(Pointer(g_file_new_tmp), 'g_file_new_tmp'); LoadProc(Pointer(g_file_open_readwrite), 'g_file_open_readwrite'); LoadProc(Pointer(g_file_open_readwrite_async), 'g_file_open_readwrite_async'); LoadProc(Pointer(g_file_open_readwrite_finish), 'g_file_open_readwrite_finish'); LoadProc(Pointer(g_file_output_stream_get_etag), 'g_file_output_stream_get_etag'); LoadProc(Pointer(g_file_output_stream_get_type), 'g_file_output_stream_get_type'); LoadProc(Pointer(g_file_output_stream_query_info), 'g_file_output_stream_query_info'); LoadProc(Pointer(g_file_output_stream_query_info_async), 'g_file_output_stream_query_info_async'); LoadProc(Pointer(g_file_output_stream_query_info_finish), 'g_file_output_stream_query_info_finish'); LoadProc(Pointer(g_file_parse_name), 'g_file_parse_name'); LoadProc(Pointer(g_file_poll_mountable), 'g_file_poll_mountable'); LoadProc(Pointer(g_file_poll_mountable_finish), 'g_file_poll_mountable_finish'); LoadProc(Pointer(g_file_query_default_handler), 'g_file_query_default_handler'); LoadProc(Pointer(g_file_query_exists), 'g_file_query_exists'); LoadProc(Pointer(g_file_query_file_type), 'g_file_query_file_type'); LoadProc(Pointer(g_file_query_filesystem_info), 'g_file_query_filesystem_info'); LoadProc(Pointer(g_file_query_filesystem_info_async), 'g_file_query_filesystem_info_async'); LoadProc(Pointer(g_file_query_filesystem_info_finish), 'g_file_query_filesystem_info_finish'); LoadProc(Pointer(g_file_query_info), 'g_file_query_info'); LoadProc(Pointer(g_file_query_info_async), 'g_file_query_info_async'); LoadProc(Pointer(g_file_query_info_finish), 'g_file_query_info_finish'); LoadProc(Pointer(g_file_query_settable_attributes), 'g_file_query_settable_attributes'); LoadProc(Pointer(g_file_query_writable_namespaces), 'g_file_query_writable_namespaces'); LoadProc(Pointer(g_file_read), 'g_file_read'); LoadProc(Pointer(g_file_read_async), 'g_file_read_async'); LoadProc(Pointer(g_file_read_finish), 'g_file_read_finish'); LoadProc(Pointer(g_file_replace), 'g_file_replace'); LoadProc(Pointer(g_file_replace_async), 'g_file_replace_async'); LoadProc(Pointer(g_file_replace_contents), 'g_file_replace_contents'); LoadProc(Pointer(g_file_replace_contents_async), 'g_file_replace_contents_async'); LoadProc(Pointer(g_file_replace_contents_finish), 'g_file_replace_contents_finish'); LoadProc(Pointer(g_file_replace_finish), 'g_file_replace_finish'); LoadProc(Pointer(g_file_replace_readwrite), 'g_file_replace_readwrite'); LoadProc(Pointer(g_file_replace_readwrite_async), 'g_file_replace_readwrite_async'); LoadProc(Pointer(g_file_replace_readwrite_finish), 'g_file_replace_readwrite_finish'); LoadProc(Pointer(g_file_resolve_relative_path), 'g_file_resolve_relative_path'); LoadProc(Pointer(g_file_set_attribute), 'g_file_set_attribute'); LoadProc(Pointer(g_file_set_attribute_byte_string), 'g_file_set_attribute_byte_string'); LoadProc(Pointer(g_file_set_attribute_int32), 'g_file_set_attribute_int32'); LoadProc(Pointer(g_file_set_attribute_int64), 'g_file_set_attribute_int64'); LoadProc(Pointer(g_file_set_attribute_string), 'g_file_set_attribute_string'); LoadProc(Pointer(g_file_set_attribute_uint32), 'g_file_set_attribute_uint32'); LoadProc(Pointer(g_file_set_attribute_uint64), 'g_file_set_attribute_uint64'); LoadProc(Pointer(g_file_set_attributes_async), 'g_file_set_attributes_async'); LoadProc(Pointer(g_file_set_attributes_finish), 'g_file_set_attributes_finish'); LoadProc(Pointer(g_file_set_attributes_from_info), 'g_file_set_attributes_from_info'); LoadProc(Pointer(g_file_set_display_name), 'g_file_set_display_name'); LoadProc(Pointer(g_file_set_display_name_async), 'g_file_set_display_name_async'); LoadProc(Pointer(g_file_set_display_name_finish), 'g_file_set_display_name_finish'); LoadProc(Pointer(g_file_start_mountable), 'g_file_start_mountable'); LoadProc(Pointer(g_file_start_mountable_finish), 'g_file_start_mountable_finish'); LoadProc(Pointer(g_file_stop_mountable), 'g_file_stop_mountable'); LoadProc(Pointer(g_file_stop_mountable_finish), 'g_file_stop_mountable_finish'); LoadProc(Pointer(g_file_supports_thread_contexts), 'g_file_supports_thread_contexts'); LoadProc(Pointer(g_file_trash), 'g_file_trash'); LoadProc(Pointer(g_file_unmount_mountable_with_operation), 'g_file_unmount_mountable_with_operation'); LoadProc(Pointer(g_file_unmount_mountable_with_operation_finish), 'g_file_unmount_mountable_with_operation_finish'); LoadProc(Pointer(g_filename_completer_get_completion_suffix), 'g_filename_completer_get_completion_suffix'); LoadProc(Pointer(g_filename_completer_get_completions), 'g_filename_completer_get_completions'); LoadProc(Pointer(g_filename_completer_get_type), 'g_filename_completer_get_type'); LoadProc(Pointer(g_filename_completer_new), 'g_filename_completer_new'); LoadProc(Pointer(g_filename_completer_set_dirs_only), 'g_filename_completer_set_dirs_only'); LoadProc(Pointer(g_filter_input_stream_get_base_stream), 'g_filter_input_stream_get_base_stream'); LoadProc(Pointer(g_filter_input_stream_get_close_base_stream), 'g_filter_input_stream_get_close_base_stream'); LoadProc(Pointer(g_filter_input_stream_get_type), 'g_filter_input_stream_get_type'); LoadProc(Pointer(g_filter_input_stream_set_close_base_stream), 'g_filter_input_stream_set_close_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_base_stream), 'g_filter_output_stream_get_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_close_base_stream), 'g_filter_output_stream_get_close_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_type), 'g_filter_output_stream_get_type'); LoadProc(Pointer(g_filter_output_stream_set_close_base_stream), 'g_filter_output_stream_set_close_base_stream'); LoadProc(Pointer(g_icon_equal), 'g_icon_equal'); LoadProc(Pointer(g_icon_get_type), 'g_icon_get_type'); LoadProc(Pointer(g_icon_hash), 'g_icon_hash'); LoadProc(Pointer(g_icon_new_for_string), 'g_icon_new_for_string'); LoadProc(Pointer(g_icon_to_string), 'g_icon_to_string'); LoadProc(Pointer(g_inet_address_equal), 'g_inet_address_equal'); LoadProc(Pointer(g_inet_address_get_family), 'g_inet_address_get_family'); LoadProc(Pointer(g_inet_address_get_is_any), 'g_inet_address_get_is_any'); LoadProc(Pointer(g_inet_address_get_is_link_local), 'g_inet_address_get_is_link_local'); LoadProc(Pointer(g_inet_address_get_is_loopback), 'g_inet_address_get_is_loopback'); LoadProc(Pointer(g_inet_address_get_is_mc_global), 'g_inet_address_get_is_mc_global'); LoadProc(Pointer(g_inet_address_get_is_mc_link_local), 'g_inet_address_get_is_mc_link_local'); LoadProc(Pointer(g_inet_address_get_is_mc_node_local), 'g_inet_address_get_is_mc_node_local'); LoadProc(Pointer(g_inet_address_get_is_mc_org_local), 'g_inet_address_get_is_mc_org_local'); LoadProc(Pointer(g_inet_address_get_is_mc_site_local), 'g_inet_address_get_is_mc_site_local'); LoadProc(Pointer(g_inet_address_get_is_multicast), 'g_inet_address_get_is_multicast'); LoadProc(Pointer(g_inet_address_get_is_site_local), 'g_inet_address_get_is_site_local'); LoadProc(Pointer(g_inet_address_get_native_size), 'g_inet_address_get_native_size'); LoadProc(Pointer(g_inet_address_get_type), 'g_inet_address_get_type'); LoadProc(Pointer(g_inet_address_mask_equal), 'g_inet_address_mask_equal'); LoadProc(Pointer(g_inet_address_mask_get_address), 'g_inet_address_mask_get_address'); LoadProc(Pointer(g_inet_address_mask_get_family), 'g_inet_address_mask_get_family'); LoadProc(Pointer(g_inet_address_mask_get_length), 'g_inet_address_mask_get_length'); LoadProc(Pointer(g_inet_address_mask_get_type), 'g_inet_address_mask_get_type'); LoadProc(Pointer(g_inet_address_mask_matches), 'g_inet_address_mask_matches'); LoadProc(Pointer(g_inet_address_mask_new), 'g_inet_address_mask_new'); LoadProc(Pointer(g_inet_address_mask_new_from_string), 'g_inet_address_mask_new_from_string'); LoadProc(Pointer(g_inet_address_mask_to_string), 'g_inet_address_mask_to_string'); LoadProc(Pointer(g_inet_address_new_any), 'g_inet_address_new_any'); LoadProc(Pointer(g_inet_address_new_from_bytes), 'g_inet_address_new_from_bytes'); LoadProc(Pointer(g_inet_address_new_from_string), 'g_inet_address_new_from_string'); LoadProc(Pointer(g_inet_address_new_loopback), 'g_inet_address_new_loopback'); LoadProc(Pointer(g_inet_address_to_bytes), 'g_inet_address_to_bytes'); LoadProc(Pointer(g_inet_address_to_string), 'g_inet_address_to_string'); LoadProc(Pointer(g_inet_socket_address_get_address), 'g_inet_socket_address_get_address'); LoadProc(Pointer(g_inet_socket_address_get_flowinfo), 'g_inet_socket_address_get_flowinfo'); LoadProc(Pointer(g_inet_socket_address_get_port), 'g_inet_socket_address_get_port'); LoadProc(Pointer(g_inet_socket_address_get_scope_id), 'g_inet_socket_address_get_scope_id'); LoadProc(Pointer(g_inet_socket_address_get_type), 'g_inet_socket_address_get_type'); LoadProc(Pointer(g_inet_socket_address_new), 'g_inet_socket_address_new'); LoadProc(Pointer(g_initable_get_type), 'g_initable_get_type'); LoadProc(Pointer(g_initable_init), 'g_initable_init'); LoadProc(Pointer(g_initable_new), 'g_initable_new'); LoadProc(Pointer(g_initable_new_valist), 'g_initable_new_valist'); LoadProc(Pointer(g_initable_newv), 'g_initable_newv'); LoadProc(Pointer(g_input_stream_clear_pending), 'g_input_stream_clear_pending'); LoadProc(Pointer(g_input_stream_close), 'g_input_stream_close'); LoadProc(Pointer(g_input_stream_close_async), 'g_input_stream_close_async'); LoadProc(Pointer(g_input_stream_close_finish), 'g_input_stream_close_finish'); LoadProc(Pointer(g_input_stream_get_type), 'g_input_stream_get_type'); LoadProc(Pointer(g_input_stream_has_pending), 'g_input_stream_has_pending'); LoadProc(Pointer(g_input_stream_is_closed), 'g_input_stream_is_closed'); LoadProc(Pointer(g_input_stream_read), 'g_input_stream_read'); LoadProc(Pointer(g_input_stream_read_all), 'g_input_stream_read_all'); LoadProc(Pointer(g_input_stream_read_async), 'g_input_stream_read_async'); LoadProc(Pointer(g_input_stream_read_bytes), 'g_input_stream_read_bytes'); LoadProc(Pointer(g_input_stream_read_bytes_async), 'g_input_stream_read_bytes_async'); LoadProc(Pointer(g_input_stream_read_bytes_finish), 'g_input_stream_read_bytes_finish'); LoadProc(Pointer(g_input_stream_read_finish), 'g_input_stream_read_finish'); LoadProc(Pointer(g_input_stream_set_pending), 'g_input_stream_set_pending'); LoadProc(Pointer(g_input_stream_skip), 'g_input_stream_skip'); LoadProc(Pointer(g_input_stream_skip_async), 'g_input_stream_skip_async'); LoadProc(Pointer(g_input_stream_skip_finish), 'g_input_stream_skip_finish'); LoadProc(Pointer(g_io_error_from_errno), 'g_io_error_from_errno'); LoadProc(Pointer(g_io_error_quark), 'g_io_error_quark'); LoadProc(Pointer(g_io_extension_get_name), 'g_io_extension_get_name'); LoadProc(Pointer(g_io_extension_get_priority), 'g_io_extension_get_priority'); LoadProc(Pointer(g_io_extension_get_type), 'g_io_extension_get_type'); LoadProc(Pointer(g_io_extension_point_get_extension_by_name), 'g_io_extension_point_get_extension_by_name'); LoadProc(Pointer(g_io_extension_point_get_extensions), 'g_io_extension_point_get_extensions'); LoadProc(Pointer(g_io_extension_point_get_required_type), 'g_io_extension_point_get_required_type'); LoadProc(Pointer(g_io_extension_point_implement), 'g_io_extension_point_implement'); LoadProc(Pointer(g_io_extension_point_lookup), 'g_io_extension_point_lookup'); LoadProc(Pointer(g_io_extension_point_register), 'g_io_extension_point_register'); LoadProc(Pointer(g_io_extension_point_set_required_type), 'g_io_extension_point_set_required_type'); LoadProc(Pointer(g_io_extension_ref_class), 'g_io_extension_ref_class'); LoadProc(Pointer(g_io_module_get_type), 'g_io_module_get_type'); LoadProc(Pointer(g_io_module_new), 'g_io_module_new'); LoadProc(Pointer(g_io_module_scope_block), 'g_io_module_scope_block'); LoadProc(Pointer(g_io_module_scope_free), 'g_io_module_scope_free'); LoadProc(Pointer(g_io_module_scope_new), 'g_io_module_scope_new'); LoadProc(Pointer(g_io_modules_load_all_in_directory), 'g_io_modules_load_all_in_directory'); LoadProc(Pointer(g_io_modules_load_all_in_directory_with_scope), 'g_io_modules_load_all_in_directory_with_scope'); LoadProc(Pointer(g_io_modules_scan_all_in_directory), 'g_io_modules_scan_all_in_directory'); LoadProc(Pointer(g_io_modules_scan_all_in_directory_with_scope), 'g_io_modules_scan_all_in_directory_with_scope'); LoadProc(Pointer(g_io_scheduler_cancel_all_jobs), 'g_io_scheduler_cancel_all_jobs'); LoadProc(Pointer(g_io_scheduler_push_job), 'g_io_scheduler_push_job'); LoadProc(Pointer(g_io_stream_clear_pending), 'g_io_stream_clear_pending'); LoadProc(Pointer(g_io_stream_close), 'g_io_stream_close'); LoadProc(Pointer(g_io_stream_close_async), 'g_io_stream_close_async'); LoadProc(Pointer(g_io_stream_close_finish), 'g_io_stream_close_finish'); LoadProc(Pointer(g_io_stream_get_input_stream), 'g_io_stream_get_input_stream'); LoadProc(Pointer(g_io_stream_get_output_stream), 'g_io_stream_get_output_stream'); LoadProc(Pointer(g_io_stream_get_type), 'g_io_stream_get_type'); LoadProc(Pointer(g_io_stream_has_pending), 'g_io_stream_has_pending'); LoadProc(Pointer(g_io_stream_is_closed), 'g_io_stream_is_closed'); LoadProc(Pointer(g_io_stream_set_pending), 'g_io_stream_set_pending'); LoadProc(Pointer(g_io_stream_splice_async), 'g_io_stream_splice_async'); LoadProc(Pointer(g_io_stream_splice_finish), 'g_io_stream_splice_finish'); LoadProc(Pointer(g_loadable_icon_get_type), 'g_loadable_icon_get_type'); LoadProc(Pointer(g_loadable_icon_load), 'g_loadable_icon_load'); LoadProc(Pointer(g_loadable_icon_load_async), 'g_loadable_icon_load_async'); LoadProc(Pointer(g_loadable_icon_load_finish), 'g_loadable_icon_load_finish'); LoadProc(Pointer(g_memory_input_stream_add_bytes), 'g_memory_input_stream_add_bytes'); LoadProc(Pointer(g_memory_input_stream_add_data), 'g_memory_input_stream_add_data'); LoadProc(Pointer(g_memory_input_stream_get_type), 'g_memory_input_stream_get_type'); LoadProc(Pointer(g_memory_input_stream_new), 'g_memory_input_stream_new'); LoadProc(Pointer(g_memory_input_stream_new_from_bytes), 'g_memory_input_stream_new_from_bytes'); LoadProc(Pointer(g_memory_input_stream_new_from_data), 'g_memory_input_stream_new_from_data'); LoadProc(Pointer(g_memory_output_stream_get_data), 'g_memory_output_stream_get_data'); LoadProc(Pointer(g_memory_output_stream_get_data_size), 'g_memory_output_stream_get_data_size'); LoadProc(Pointer(g_memory_output_stream_get_size), 'g_memory_output_stream_get_size'); LoadProc(Pointer(g_memory_output_stream_get_type), 'g_memory_output_stream_get_type'); LoadProc(Pointer(g_memory_output_stream_new), 'g_memory_output_stream_new'); LoadProc(Pointer(g_memory_output_stream_new_resizable), 'g_memory_output_stream_new_resizable'); LoadProc(Pointer(g_memory_output_stream_steal_as_bytes), 'g_memory_output_stream_steal_as_bytes'); LoadProc(Pointer(g_memory_output_stream_steal_data), 'g_memory_output_stream_steal_data'); LoadProc(Pointer(g_menu_append), 'g_menu_append'); LoadProc(Pointer(g_menu_append_item), 'g_menu_append_item'); LoadProc(Pointer(g_menu_append_section), 'g_menu_append_section'); LoadProc(Pointer(g_menu_append_submenu), 'g_menu_append_submenu'); LoadProc(Pointer(g_menu_attribute_iter_get_name), 'g_menu_attribute_iter_get_name'); LoadProc(Pointer(g_menu_attribute_iter_get_next), 'g_menu_attribute_iter_get_next'); LoadProc(Pointer(g_menu_attribute_iter_get_type), 'g_menu_attribute_iter_get_type'); LoadProc(Pointer(g_menu_attribute_iter_get_value), 'g_menu_attribute_iter_get_value'); LoadProc(Pointer(g_menu_attribute_iter_next), 'g_menu_attribute_iter_next'); LoadProc(Pointer(g_menu_freeze), 'g_menu_freeze'); LoadProc(Pointer(g_menu_get_type), 'g_menu_get_type'); LoadProc(Pointer(g_menu_insert), 'g_menu_insert'); LoadProc(Pointer(g_menu_insert_item), 'g_menu_insert_item'); LoadProc(Pointer(g_menu_insert_section), 'g_menu_insert_section'); LoadProc(Pointer(g_menu_insert_submenu), 'g_menu_insert_submenu'); LoadProc(Pointer(g_menu_item_get_attribute), 'g_menu_item_get_attribute'); LoadProc(Pointer(g_menu_item_get_attribute_value), 'g_menu_item_get_attribute_value'); LoadProc(Pointer(g_menu_item_get_link), 'g_menu_item_get_link'); LoadProc(Pointer(g_menu_item_get_type), 'g_menu_item_get_type'); LoadProc(Pointer(g_menu_item_new), 'g_menu_item_new'); LoadProc(Pointer(g_menu_item_new_from_model), 'g_menu_item_new_from_model'); LoadProc(Pointer(g_menu_item_new_section), 'g_menu_item_new_section'); LoadProc(Pointer(g_menu_item_new_submenu), 'g_menu_item_new_submenu'); LoadProc(Pointer(g_menu_item_set_action_and_target), 'g_menu_item_set_action_and_target'); LoadProc(Pointer(g_menu_item_set_action_and_target_value), 'g_menu_item_set_action_and_target_value'); LoadProc(Pointer(g_menu_item_set_attribute), 'g_menu_item_set_attribute'); LoadProc(Pointer(g_menu_item_set_attribute_value), 'g_menu_item_set_attribute_value'); LoadProc(Pointer(g_menu_item_set_detailed_action), 'g_menu_item_set_detailed_action'); LoadProc(Pointer(g_menu_item_set_label), 'g_menu_item_set_label'); LoadProc(Pointer(g_menu_item_set_link), 'g_menu_item_set_link'); LoadProc(Pointer(g_menu_item_set_section), 'g_menu_item_set_section'); LoadProc(Pointer(g_menu_item_set_submenu), 'g_menu_item_set_submenu'); LoadProc(Pointer(g_menu_link_iter_get_name), 'g_menu_link_iter_get_name'); LoadProc(Pointer(g_menu_link_iter_get_next), 'g_menu_link_iter_get_next'); LoadProc(Pointer(g_menu_link_iter_get_type), 'g_menu_link_iter_get_type'); LoadProc(Pointer(g_menu_link_iter_get_value), 'g_menu_link_iter_get_value'); LoadProc(Pointer(g_menu_link_iter_next), 'g_menu_link_iter_next'); LoadProc(Pointer(g_menu_model_get_item_attribute), 'g_menu_model_get_item_attribute'); LoadProc(Pointer(g_menu_model_get_item_attribute_value), 'g_menu_model_get_item_attribute_value'); LoadProc(Pointer(g_menu_model_get_item_link), 'g_menu_model_get_item_link'); LoadProc(Pointer(g_menu_model_get_n_items), 'g_menu_model_get_n_items'); LoadProc(Pointer(g_menu_model_get_type), 'g_menu_model_get_type'); LoadProc(Pointer(g_menu_model_is_mutable), 'g_menu_model_is_mutable'); LoadProc(Pointer(g_menu_model_items_changed), 'g_menu_model_items_changed'); LoadProc(Pointer(g_menu_model_iterate_item_attributes), 'g_menu_model_iterate_item_attributes'); LoadProc(Pointer(g_menu_model_iterate_item_links), 'g_menu_model_iterate_item_links'); LoadProc(Pointer(g_menu_new), 'g_menu_new'); LoadProc(Pointer(g_menu_prepend), 'g_menu_prepend'); LoadProc(Pointer(g_menu_prepend_item), 'g_menu_prepend_item'); LoadProc(Pointer(g_menu_prepend_section), 'g_menu_prepend_section'); LoadProc(Pointer(g_menu_prepend_submenu), 'g_menu_prepend_submenu'); LoadProc(Pointer(g_menu_remove), 'g_menu_remove'); LoadProc(Pointer(g_mount_can_eject), 'g_mount_can_eject'); LoadProc(Pointer(g_mount_can_unmount), 'g_mount_can_unmount'); LoadProc(Pointer(g_mount_eject_with_operation), 'g_mount_eject_with_operation'); LoadProc(Pointer(g_mount_eject_with_operation_finish), 'g_mount_eject_with_operation_finish'); LoadProc(Pointer(g_mount_get_default_location), 'g_mount_get_default_location'); LoadProc(Pointer(g_mount_get_drive), 'g_mount_get_drive'); LoadProc(Pointer(g_mount_get_icon), 'g_mount_get_icon'); LoadProc(Pointer(g_mount_get_name), 'g_mount_get_name'); LoadProc(Pointer(g_mount_get_root), 'g_mount_get_root'); LoadProc(Pointer(g_mount_get_sort_key), 'g_mount_get_sort_key'); LoadProc(Pointer(g_mount_get_symbolic_icon), 'g_mount_get_symbolic_icon'); LoadProc(Pointer(g_mount_get_type), 'g_mount_get_type'); LoadProc(Pointer(g_mount_get_uuid), 'g_mount_get_uuid'); LoadProc(Pointer(g_mount_get_volume), 'g_mount_get_volume'); LoadProc(Pointer(g_mount_guess_content_type), 'g_mount_guess_content_type'); LoadProc(Pointer(g_mount_guess_content_type_finish), 'g_mount_guess_content_type_finish'); LoadProc(Pointer(g_mount_guess_content_type_sync), 'g_mount_guess_content_type_sync'); LoadProc(Pointer(g_mount_is_shadowed), 'g_mount_is_shadowed'); LoadProc(Pointer(g_mount_operation_get_anonymous), 'g_mount_operation_get_anonymous'); LoadProc(Pointer(g_mount_operation_get_choice), 'g_mount_operation_get_choice'); LoadProc(Pointer(g_mount_operation_get_domain), 'g_mount_operation_get_domain'); LoadProc(Pointer(g_mount_operation_get_password), 'g_mount_operation_get_password'); LoadProc(Pointer(g_mount_operation_get_password_save), 'g_mount_operation_get_password_save'); LoadProc(Pointer(g_mount_operation_get_type), 'g_mount_operation_get_type'); LoadProc(Pointer(g_mount_operation_get_username), 'g_mount_operation_get_username'); LoadProc(Pointer(g_mount_operation_new), 'g_mount_operation_new'); LoadProc(Pointer(g_mount_operation_reply), 'g_mount_operation_reply'); LoadProc(Pointer(g_mount_operation_set_anonymous), 'g_mount_operation_set_anonymous'); LoadProc(Pointer(g_mount_operation_set_choice), 'g_mount_operation_set_choice'); LoadProc(Pointer(g_mount_operation_set_domain), 'g_mount_operation_set_domain'); LoadProc(Pointer(g_mount_operation_set_password), 'g_mount_operation_set_password'); LoadProc(Pointer(g_mount_operation_set_password_save), 'g_mount_operation_set_password_save'); LoadProc(Pointer(g_mount_operation_set_username), 'g_mount_operation_set_username'); LoadProc(Pointer(g_mount_remount), 'g_mount_remount'); LoadProc(Pointer(g_mount_remount_finish), 'g_mount_remount_finish'); LoadProc(Pointer(g_mount_shadow), 'g_mount_shadow'); LoadProc(Pointer(g_mount_unmount_with_operation), 'g_mount_unmount_with_operation'); LoadProc(Pointer(g_mount_unmount_with_operation_finish), 'g_mount_unmount_with_operation_finish'); LoadProc(Pointer(g_mount_unshadow), 'g_mount_unshadow'); LoadProc(Pointer(g_native_volume_monitor_get_type), 'g_native_volume_monitor_get_type'); LoadProc(Pointer(g_network_address_get_hostname), 'g_network_address_get_hostname'); LoadProc(Pointer(g_network_address_get_port), 'g_network_address_get_port'); LoadProc(Pointer(g_network_address_get_scheme), 'g_network_address_get_scheme'); LoadProc(Pointer(g_network_address_get_type), 'g_network_address_get_type'); LoadProc(Pointer(g_network_address_new), 'g_network_address_new'); LoadProc(Pointer(g_network_address_parse), 'g_network_address_parse'); LoadProc(Pointer(g_network_address_parse_uri), 'g_network_address_parse_uri'); LoadProc(Pointer(g_network_monitor_can_reach), 'g_network_monitor_can_reach'); LoadProc(Pointer(g_network_monitor_can_reach_async), 'g_network_monitor_can_reach_async'); LoadProc(Pointer(g_network_monitor_can_reach_finish), 'g_network_monitor_can_reach_finish'); LoadProc(Pointer(g_network_monitor_get_default), 'g_network_monitor_get_default'); LoadProc(Pointer(g_network_monitor_get_network_available), 'g_network_monitor_get_network_available'); LoadProc(Pointer(g_network_monitor_get_type), 'g_network_monitor_get_type'); LoadProc(Pointer(g_network_service_get_domain), 'g_network_service_get_domain'); LoadProc(Pointer(g_network_service_get_protocol), 'g_network_service_get_protocol'); LoadProc(Pointer(g_network_service_get_scheme), 'g_network_service_get_scheme'); LoadProc(Pointer(g_network_service_get_service), 'g_network_service_get_service'); LoadProc(Pointer(g_network_service_get_type), 'g_network_service_get_type'); LoadProc(Pointer(g_network_service_new), 'g_network_service_new'); LoadProc(Pointer(g_network_service_set_scheme), 'g_network_service_set_scheme'); LoadProc(Pointer(g_networking_init), 'g_networking_init'); LoadProc(Pointer(g_output_stream_clear_pending), 'g_output_stream_clear_pending'); LoadProc(Pointer(g_output_stream_close), 'g_output_stream_close'); LoadProc(Pointer(g_output_stream_close_async), 'g_output_stream_close_async'); LoadProc(Pointer(g_output_stream_close_finish), 'g_output_stream_close_finish'); LoadProc(Pointer(g_output_stream_flush), 'g_output_stream_flush'); LoadProc(Pointer(g_output_stream_flush_async), 'g_output_stream_flush_async'); LoadProc(Pointer(g_output_stream_flush_finish), 'g_output_stream_flush_finish'); LoadProc(Pointer(g_output_stream_get_type), 'g_output_stream_get_type'); LoadProc(Pointer(g_output_stream_has_pending), 'g_output_stream_has_pending'); LoadProc(Pointer(g_output_stream_is_closed), 'g_output_stream_is_closed'); LoadProc(Pointer(g_output_stream_is_closing), 'g_output_stream_is_closing'); LoadProc(Pointer(g_output_stream_set_pending), 'g_output_stream_set_pending'); LoadProc(Pointer(g_output_stream_splice), 'g_output_stream_splice'); LoadProc(Pointer(g_output_stream_splice_async), 'g_output_stream_splice_async'); LoadProc(Pointer(g_output_stream_splice_finish), 'g_output_stream_splice_finish'); LoadProc(Pointer(g_output_stream_write), 'g_output_stream_write'); LoadProc(Pointer(g_output_stream_write_all), 'g_output_stream_write_all'); LoadProc(Pointer(g_output_stream_write_async), 'g_output_stream_write_async'); LoadProc(Pointer(g_output_stream_write_bytes), 'g_output_stream_write_bytes'); LoadProc(Pointer(g_output_stream_write_bytes_async), 'g_output_stream_write_bytes_async'); LoadProc(Pointer(g_output_stream_write_bytes_finish), 'g_output_stream_write_bytes_finish'); LoadProc(Pointer(g_output_stream_write_finish), 'g_output_stream_write_finish'); LoadProc(Pointer(g_permission_acquire), 'g_permission_acquire'); LoadProc(Pointer(g_permission_acquire_async), 'g_permission_acquire_async'); LoadProc(Pointer(g_permission_acquire_finish), 'g_permission_acquire_finish'); LoadProc(Pointer(g_permission_get_allowed), 'g_permission_get_allowed'); LoadProc(Pointer(g_permission_get_can_acquire), 'g_permission_get_can_acquire'); LoadProc(Pointer(g_permission_get_can_release), 'g_permission_get_can_release'); LoadProc(Pointer(g_permission_get_type), 'g_permission_get_type'); LoadProc(Pointer(g_permission_impl_update), 'g_permission_impl_update'); LoadProc(Pointer(g_permission_release), 'g_permission_release'); LoadProc(Pointer(g_permission_release_async), 'g_permission_release_async'); LoadProc(Pointer(g_permission_release_finish), 'g_permission_release_finish'); LoadProc(Pointer(g_pollable_input_stream_can_poll), 'g_pollable_input_stream_can_poll'); LoadProc(Pointer(g_pollable_input_stream_create_source), 'g_pollable_input_stream_create_source'); LoadProc(Pointer(g_pollable_input_stream_get_type), 'g_pollable_input_stream_get_type'); LoadProc(Pointer(g_pollable_input_stream_is_readable), 'g_pollable_input_stream_is_readable'); LoadProc(Pointer(g_pollable_input_stream_read_nonblocking), 'g_pollable_input_stream_read_nonblocking'); LoadProc(Pointer(g_pollable_output_stream_can_poll), 'g_pollable_output_stream_can_poll'); LoadProc(Pointer(g_pollable_output_stream_create_source), 'g_pollable_output_stream_create_source'); LoadProc(Pointer(g_pollable_output_stream_get_type), 'g_pollable_output_stream_get_type'); LoadProc(Pointer(g_pollable_output_stream_is_writable), 'g_pollable_output_stream_is_writable'); LoadProc(Pointer(g_pollable_output_stream_write_nonblocking), 'g_pollable_output_stream_write_nonblocking'); LoadProc(Pointer(g_pollable_source_new), 'g_pollable_source_new'); LoadProc(Pointer(g_pollable_source_new_full), 'g_pollable_source_new_full'); LoadProc(Pointer(g_pollable_stream_read), 'g_pollable_stream_read'); LoadProc(Pointer(g_pollable_stream_write), 'g_pollable_stream_write'); LoadProc(Pointer(g_pollable_stream_write_all), 'g_pollable_stream_write_all'); LoadProc(Pointer(g_proxy_address_enumerator_get_type), 'g_proxy_address_enumerator_get_type'); LoadProc(Pointer(g_proxy_address_get_destination_hostname), 'g_proxy_address_get_destination_hostname'); LoadProc(Pointer(g_proxy_address_get_destination_port), 'g_proxy_address_get_destination_port'); LoadProc(Pointer(g_proxy_address_get_destination_protocol), 'g_proxy_address_get_destination_protocol'); LoadProc(Pointer(g_proxy_address_get_password), 'g_proxy_address_get_password'); LoadProc(Pointer(g_proxy_address_get_protocol), 'g_proxy_address_get_protocol'); LoadProc(Pointer(g_proxy_address_get_type), 'g_proxy_address_get_type'); LoadProc(Pointer(g_proxy_address_get_uri), 'g_proxy_address_get_uri'); LoadProc(Pointer(g_proxy_address_get_username), 'g_proxy_address_get_username'); LoadProc(Pointer(g_proxy_address_new), 'g_proxy_address_new'); LoadProc(Pointer(g_proxy_connect), 'g_proxy_connect'); LoadProc(Pointer(g_proxy_connect_async), 'g_proxy_connect_async'); LoadProc(Pointer(g_proxy_connect_finish), 'g_proxy_connect_finish'); LoadProc(Pointer(g_proxy_get_default_for_protocol), 'g_proxy_get_default_for_protocol'); LoadProc(Pointer(g_proxy_get_type), 'g_proxy_get_type'); LoadProc(Pointer(g_proxy_resolver_get_default), 'g_proxy_resolver_get_default'); LoadProc(Pointer(g_proxy_resolver_get_type), 'g_proxy_resolver_get_type'); LoadProc(Pointer(g_proxy_resolver_is_supported), 'g_proxy_resolver_is_supported'); LoadProc(Pointer(g_proxy_resolver_lookup), 'g_proxy_resolver_lookup'); LoadProc(Pointer(g_proxy_resolver_lookup_async), 'g_proxy_resolver_lookup_async'); LoadProc(Pointer(g_proxy_resolver_lookup_finish), 'g_proxy_resolver_lookup_finish'); LoadProc(Pointer(g_proxy_supports_hostname), 'g_proxy_supports_hostname'); LoadProc(Pointer(g_remote_action_group_activate_action_full), 'g_remote_action_group_activate_action_full'); LoadProc(Pointer(g_remote_action_group_change_action_state_full), 'g_remote_action_group_change_action_state_full'); LoadProc(Pointer(g_remote_action_group_get_type), 'g_remote_action_group_get_type'); LoadProc(Pointer(g_resolver_error_quark), 'g_resolver_error_quark'); LoadProc(Pointer(g_resolver_free_addresses), 'g_resolver_free_addresses'); LoadProc(Pointer(g_resolver_free_targets), 'g_resolver_free_targets'); LoadProc(Pointer(g_resolver_get_default), 'g_resolver_get_default'); LoadProc(Pointer(g_resolver_get_type), 'g_resolver_get_type'); LoadProc(Pointer(g_resolver_lookup_by_address), 'g_resolver_lookup_by_address'); LoadProc(Pointer(g_resolver_lookup_by_address_async), 'g_resolver_lookup_by_address_async'); LoadProc(Pointer(g_resolver_lookup_by_address_finish), 'g_resolver_lookup_by_address_finish'); LoadProc(Pointer(g_resolver_lookup_by_name), 'g_resolver_lookup_by_name'); LoadProc(Pointer(g_resolver_lookup_by_name_async), 'g_resolver_lookup_by_name_async'); LoadProc(Pointer(g_resolver_lookup_by_name_finish), 'g_resolver_lookup_by_name_finish'); LoadProc(Pointer(g_resolver_lookup_records), 'g_resolver_lookup_records'); LoadProc(Pointer(g_resolver_lookup_records_async), 'g_resolver_lookup_records_async'); LoadProc(Pointer(g_resolver_lookup_records_finish), 'g_resolver_lookup_records_finish'); LoadProc(Pointer(g_resolver_lookup_service), 'g_resolver_lookup_service'); LoadProc(Pointer(g_resolver_lookup_service_async), 'g_resolver_lookup_service_async'); LoadProc(Pointer(g_resolver_lookup_service_finish), 'g_resolver_lookup_service_finish'); LoadProc(Pointer(g_resolver_set_default), 'g_resolver_set_default'); LoadProc(Pointer(g_resource_enumerate_children), 'g_resource_enumerate_children'); LoadProc(Pointer(g_resource_error_quark), 'g_resource_error_quark'); LoadProc(Pointer(g_resource_get_info), 'g_resource_get_info'); LoadProc(Pointer(g_resource_get_type), 'g_resource_get_type'); LoadProc(Pointer(g_resource_load), 'g_resource_load'); LoadProc(Pointer(g_resource_lookup_data), 'g_resource_lookup_data'); LoadProc(Pointer(g_resource_new_from_data), 'g_resource_new_from_data'); LoadProc(Pointer(g_resource_open_stream), 'g_resource_open_stream'); LoadProc(Pointer(g_resource_ref), 'g_resource_ref'); LoadProc(Pointer(g_resource_unref), 'g_resource_unref'); LoadProc(Pointer(g_resources_enumerate_children), 'g_resources_enumerate_children'); LoadProc(Pointer(g_resources_get_info), 'g_resources_get_info'); LoadProc(Pointer(g_resources_lookup_data), 'g_resources_lookup_data'); LoadProc(Pointer(g_resources_open_stream), 'g_resources_open_stream'); LoadProc(Pointer(g_resources_register), 'g_resources_register'); LoadProc(Pointer(g_resources_unregister), 'g_resources_unregister'); LoadProc(Pointer(g_seekable_can_seek), 'g_seekable_can_seek'); LoadProc(Pointer(g_seekable_can_truncate), 'g_seekable_can_truncate'); LoadProc(Pointer(g_seekable_get_type), 'g_seekable_get_type'); LoadProc(Pointer(g_seekable_seek), 'g_seekable_seek'); LoadProc(Pointer(g_seekable_tell), 'g_seekable_tell'); LoadProc(Pointer(g_seekable_truncate), 'g_seekable_truncate'); LoadProc(Pointer(g_settings_apply), 'g_settings_apply'); LoadProc(Pointer(g_settings_bind), 'g_settings_bind'); LoadProc(Pointer(g_settings_bind_with_mapping), 'g_settings_bind_with_mapping'); LoadProc(Pointer(g_settings_bind_writable), 'g_settings_bind_writable'); LoadProc(Pointer(g_settings_create_action), 'g_settings_create_action'); LoadProc(Pointer(g_settings_delay), 'g_settings_delay'); LoadProc(Pointer(g_settings_get), 'g_settings_get'); LoadProc(Pointer(g_settings_get_boolean), 'g_settings_get_boolean'); LoadProc(Pointer(g_settings_get_child), 'g_settings_get_child'); LoadProc(Pointer(g_settings_get_double), 'g_settings_get_double'); LoadProc(Pointer(g_settings_get_enum), 'g_settings_get_enum'); LoadProc(Pointer(g_settings_get_flags), 'g_settings_get_flags'); LoadProc(Pointer(g_settings_get_has_unapplied), 'g_settings_get_has_unapplied'); LoadProc(Pointer(g_settings_get_int), 'g_settings_get_int'); LoadProc(Pointer(g_settings_get_mapped), 'g_settings_get_mapped'); LoadProc(Pointer(g_settings_get_range), 'g_settings_get_range'); LoadProc(Pointer(g_settings_get_string), 'g_settings_get_string'); LoadProc(Pointer(g_settings_get_strv), 'g_settings_get_strv'); LoadProc(Pointer(g_settings_get_type), 'g_settings_get_type'); LoadProc(Pointer(g_settings_get_uint), 'g_settings_get_uint'); LoadProc(Pointer(g_settings_get_value), 'g_settings_get_value'); LoadProc(Pointer(g_settings_is_writable), 'g_settings_is_writable'); LoadProc(Pointer(g_settings_list_children), 'g_settings_list_children'); LoadProc(Pointer(g_settings_list_keys), 'g_settings_list_keys'); LoadProc(Pointer(g_settings_list_relocatable_schemas), 'g_settings_list_relocatable_schemas'); LoadProc(Pointer(g_settings_list_schemas), 'g_settings_list_schemas'); LoadProc(Pointer(g_settings_new), 'g_settings_new'); LoadProc(Pointer(g_settings_new_full), 'g_settings_new_full'); LoadProc(Pointer(g_settings_new_with_backend), 'g_settings_new_with_backend'); LoadProc(Pointer(g_settings_new_with_backend_and_path), 'g_settings_new_with_backend_and_path'); LoadProc(Pointer(g_settings_new_with_path), 'g_settings_new_with_path'); LoadProc(Pointer(g_settings_range_check), 'g_settings_range_check'); LoadProc(Pointer(g_settings_reset), 'g_settings_reset'); LoadProc(Pointer(g_settings_revert), 'g_settings_revert'); LoadProc(Pointer(g_settings_schema_get_id), 'g_settings_schema_get_id'); LoadProc(Pointer(g_settings_schema_get_path), 'g_settings_schema_get_path'); LoadProc(Pointer(g_settings_schema_get_type), 'g_settings_schema_get_type'); LoadProc(Pointer(g_settings_schema_ref), 'g_settings_schema_ref'); LoadProc(Pointer(g_settings_schema_source_get_default), 'g_settings_schema_source_get_default'); LoadProc(Pointer(g_settings_schema_source_get_type), 'g_settings_schema_source_get_type'); LoadProc(Pointer(g_settings_schema_source_lookup), 'g_settings_schema_source_lookup'); LoadProc(Pointer(g_settings_schema_source_new_from_directory), 'g_settings_schema_source_new_from_directory'); LoadProc(Pointer(g_settings_schema_source_ref), 'g_settings_schema_source_ref'); LoadProc(Pointer(g_settings_schema_source_unref), 'g_settings_schema_source_unref'); LoadProc(Pointer(g_settings_schema_unref), 'g_settings_schema_unref'); LoadProc(Pointer(g_settings_set), 'g_settings_set'); LoadProc(Pointer(g_settings_set_boolean), 'g_settings_set_boolean'); LoadProc(Pointer(g_settings_set_double), 'g_settings_set_double'); LoadProc(Pointer(g_settings_set_enum), 'g_settings_set_enum'); LoadProc(Pointer(g_settings_set_flags), 'g_settings_set_flags'); LoadProc(Pointer(g_settings_set_int), 'g_settings_set_int'); LoadProc(Pointer(g_settings_set_string), 'g_settings_set_string'); LoadProc(Pointer(g_settings_set_strv), 'g_settings_set_strv'); LoadProc(Pointer(g_settings_set_uint), 'g_settings_set_uint'); LoadProc(Pointer(g_settings_set_value), 'g_settings_set_value'); LoadProc(Pointer(g_settings_sync), 'g_settings_sync'); LoadProc(Pointer(g_settings_unbind), 'g_settings_unbind'); LoadProc(Pointer(g_simple_action_get_type), 'g_simple_action_get_type'); LoadProc(Pointer(g_simple_action_group_add_entries), 'g_simple_action_group_add_entries'); LoadProc(Pointer(g_simple_action_group_get_type), 'g_simple_action_group_get_type'); LoadProc(Pointer(g_simple_action_group_insert), 'g_simple_action_group_insert'); LoadProc(Pointer(g_simple_action_group_lookup), 'g_simple_action_group_lookup'); LoadProc(Pointer(g_simple_action_group_new), 'g_simple_action_group_new'); LoadProc(Pointer(g_simple_action_group_remove), 'g_simple_action_group_remove'); LoadProc(Pointer(g_simple_action_new), 'g_simple_action_new'); LoadProc(Pointer(g_simple_action_new_stateful), 'g_simple_action_new_stateful'); LoadProc(Pointer(g_simple_action_set_enabled), 'g_simple_action_set_enabled'); LoadProc(Pointer(g_simple_action_set_state), 'g_simple_action_set_state'); LoadProc(Pointer(g_simple_async_report_error_in_idle), 'g_simple_async_report_error_in_idle'); LoadProc(Pointer(g_simple_async_report_gerror_in_idle), 'g_simple_async_report_gerror_in_idle'); LoadProc(Pointer(g_simple_async_report_take_gerror_in_idle), 'g_simple_async_report_take_gerror_in_idle'); LoadProc(Pointer(g_simple_async_result_complete), 'g_simple_async_result_complete'); LoadProc(Pointer(g_simple_async_result_complete_in_idle), 'g_simple_async_result_complete_in_idle'); LoadProc(Pointer(g_simple_async_result_get_op_res_gboolean), 'g_simple_async_result_get_op_res_gboolean'); LoadProc(Pointer(g_simple_async_result_get_op_res_gpointer), 'g_simple_async_result_get_op_res_gpointer'); LoadProc(Pointer(g_simple_async_result_get_op_res_gssize), 'g_simple_async_result_get_op_res_gssize'); LoadProc(Pointer(g_simple_async_result_get_source_tag), 'g_simple_async_result_get_source_tag'); LoadProc(Pointer(g_simple_async_result_get_type), 'g_simple_async_result_get_type'); LoadProc(Pointer(g_simple_async_result_is_valid), 'g_simple_async_result_is_valid'); LoadProc(Pointer(g_simple_async_result_new), 'g_simple_async_result_new'); LoadProc(Pointer(g_simple_async_result_new_error), 'g_simple_async_result_new_error'); LoadProc(Pointer(g_simple_async_result_new_from_error), 'g_simple_async_result_new_from_error'); LoadProc(Pointer(g_simple_async_result_new_take_error), 'g_simple_async_result_new_take_error'); LoadProc(Pointer(g_simple_async_result_propagate_error), 'g_simple_async_result_propagate_error'); LoadProc(Pointer(g_simple_async_result_run_in_thread), 'g_simple_async_result_run_in_thread'); LoadProc(Pointer(g_simple_async_result_set_check_cancellable), 'g_simple_async_result_set_check_cancellable'); LoadProc(Pointer(g_simple_async_result_set_error), 'g_simple_async_result_set_error'); LoadProc(Pointer(g_simple_async_result_set_error_va), 'g_simple_async_result_set_error_va'); LoadProc(Pointer(g_simple_async_result_set_from_error), 'g_simple_async_result_set_from_error'); LoadProc(Pointer(g_simple_async_result_set_handle_cancellation), 'g_simple_async_result_set_handle_cancellation'); LoadProc(Pointer(g_simple_async_result_set_op_res_gboolean), 'g_simple_async_result_set_op_res_gboolean'); LoadProc(Pointer(g_simple_async_result_set_op_res_gpointer), 'g_simple_async_result_set_op_res_gpointer'); LoadProc(Pointer(g_simple_async_result_set_op_res_gssize), 'g_simple_async_result_set_op_res_gssize'); LoadProc(Pointer(g_simple_async_result_take_error), 'g_simple_async_result_take_error'); LoadProc(Pointer(g_simple_permission_get_type), 'g_simple_permission_get_type'); LoadProc(Pointer(g_simple_permission_new), 'g_simple_permission_new'); LoadProc(Pointer(g_simple_proxy_resolver_get_type), 'g_simple_proxy_resolver_get_type'); LoadProc(Pointer(g_simple_proxy_resolver_new), 'g_simple_proxy_resolver_new'); LoadProc(Pointer(g_simple_proxy_resolver_set_default_proxy), 'g_simple_proxy_resolver_set_default_proxy'); LoadProc(Pointer(g_simple_proxy_resolver_set_ignore_hosts), 'g_simple_proxy_resolver_set_ignore_hosts'); LoadProc(Pointer(g_simple_proxy_resolver_set_uri_proxy), 'g_simple_proxy_resolver_set_uri_proxy'); LoadProc(Pointer(g_socket_accept), 'g_socket_accept'); LoadProc(Pointer(g_socket_address_enumerator_get_type), 'g_socket_address_enumerator_get_type'); LoadProc(Pointer(g_socket_address_enumerator_next), 'g_socket_address_enumerator_next'); LoadProc(Pointer(g_socket_address_enumerator_next_async), 'g_socket_address_enumerator_next_async'); LoadProc(Pointer(g_socket_address_enumerator_next_finish), 'g_socket_address_enumerator_next_finish'); LoadProc(Pointer(g_socket_address_get_family), 'g_socket_address_get_family'); LoadProc(Pointer(g_socket_address_get_native_size), 'g_socket_address_get_native_size'); LoadProc(Pointer(g_socket_address_get_type), 'g_socket_address_get_type'); LoadProc(Pointer(g_socket_address_new_from_native), 'g_socket_address_new_from_native'); LoadProc(Pointer(g_socket_address_to_native), 'g_socket_address_to_native'); LoadProc(Pointer(g_socket_bind), 'g_socket_bind'); LoadProc(Pointer(g_socket_check_connect_result), 'g_socket_check_connect_result'); LoadProc(Pointer(g_socket_client_add_application_proxy), 'g_socket_client_add_application_proxy'); LoadProc(Pointer(g_socket_client_connect), 'g_socket_client_connect'); LoadProc(Pointer(g_socket_client_connect_async), 'g_socket_client_connect_async'); LoadProc(Pointer(g_socket_client_connect_finish), 'g_socket_client_connect_finish'); LoadProc(Pointer(g_socket_client_connect_to_host), 'g_socket_client_connect_to_host'); LoadProc(Pointer(g_socket_client_connect_to_host_async), 'g_socket_client_connect_to_host_async'); LoadProc(Pointer(g_socket_client_connect_to_host_finish), 'g_socket_client_connect_to_host_finish'); LoadProc(Pointer(g_socket_client_connect_to_service), 'g_socket_client_connect_to_service'); LoadProc(Pointer(g_socket_client_connect_to_service_async), 'g_socket_client_connect_to_service_async'); LoadProc(Pointer(g_socket_client_connect_to_service_finish), 'g_socket_client_connect_to_service_finish'); LoadProc(Pointer(g_socket_client_connect_to_uri), 'g_socket_client_connect_to_uri'); LoadProc(Pointer(g_socket_client_connect_to_uri_async), 'g_socket_client_connect_to_uri_async'); LoadProc(Pointer(g_socket_client_connect_to_uri_finish), 'g_socket_client_connect_to_uri_finish'); LoadProc(Pointer(g_socket_client_get_enable_proxy), 'g_socket_client_get_enable_proxy'); LoadProc(Pointer(g_socket_client_get_family), 'g_socket_client_get_family'); LoadProc(Pointer(g_socket_client_get_local_address), 'g_socket_client_get_local_address'); LoadProc(Pointer(g_socket_client_get_protocol), 'g_socket_client_get_protocol'); LoadProc(Pointer(g_socket_client_get_proxy_resolver), 'g_socket_client_get_proxy_resolver'); LoadProc(Pointer(g_socket_client_get_socket_type), 'g_socket_client_get_socket_type'); LoadProc(Pointer(g_socket_client_get_timeout), 'g_socket_client_get_timeout'); LoadProc(Pointer(g_socket_client_get_tls), 'g_socket_client_get_tls'); LoadProc(Pointer(g_socket_client_get_tls_validation_flags), 'g_socket_client_get_tls_validation_flags'); LoadProc(Pointer(g_socket_client_get_type), 'g_socket_client_get_type'); LoadProc(Pointer(g_socket_client_new), 'g_socket_client_new'); LoadProc(Pointer(g_socket_client_set_enable_proxy), 'g_socket_client_set_enable_proxy'); LoadProc(Pointer(g_socket_client_set_family), 'g_socket_client_set_family'); LoadProc(Pointer(g_socket_client_set_local_address), 'g_socket_client_set_local_address'); LoadProc(Pointer(g_socket_client_set_protocol), 'g_socket_client_set_protocol'); LoadProc(Pointer(g_socket_client_set_proxy_resolver), 'g_socket_client_set_proxy_resolver'); LoadProc(Pointer(g_socket_client_set_socket_type), 'g_socket_client_set_socket_type'); LoadProc(Pointer(g_socket_client_set_timeout), 'g_socket_client_set_timeout'); LoadProc(Pointer(g_socket_client_set_tls), 'g_socket_client_set_tls'); LoadProc(Pointer(g_socket_client_set_tls_validation_flags), 'g_socket_client_set_tls_validation_flags'); LoadProc(Pointer(g_socket_close), 'g_socket_close'); LoadProc(Pointer(g_socket_condition_check), 'g_socket_condition_check'); LoadProc(Pointer(g_socket_condition_timed_wait), 'g_socket_condition_timed_wait'); LoadProc(Pointer(g_socket_condition_wait), 'g_socket_condition_wait'); LoadProc(Pointer(g_socket_connect), 'g_socket_connect'); LoadProc(Pointer(g_socket_connectable_enumerate), 'g_socket_connectable_enumerate'); LoadProc(Pointer(g_socket_connectable_get_type), 'g_socket_connectable_get_type'); LoadProc(Pointer(g_socket_connectable_proxy_enumerate), 'g_socket_connectable_proxy_enumerate'); LoadProc(Pointer(g_socket_connection_connect), 'g_socket_connection_connect'); LoadProc(Pointer(g_socket_connection_connect_async), 'g_socket_connection_connect_async'); LoadProc(Pointer(g_socket_connection_connect_finish), 'g_socket_connection_connect_finish'); LoadProc(Pointer(g_socket_connection_factory_create_connection), 'g_socket_connection_factory_create_connection'); LoadProc(Pointer(g_socket_connection_factory_lookup_type), 'g_socket_connection_factory_lookup_type'); LoadProc(Pointer(g_socket_connection_factory_register_type), 'g_socket_connection_factory_register_type'); LoadProc(Pointer(g_socket_connection_get_local_address), 'g_socket_connection_get_local_address'); LoadProc(Pointer(g_socket_connection_get_remote_address), 'g_socket_connection_get_remote_address'); LoadProc(Pointer(g_socket_connection_get_socket), 'g_socket_connection_get_socket'); LoadProc(Pointer(g_socket_connection_get_type), 'g_socket_connection_get_type'); LoadProc(Pointer(g_socket_connection_is_connected), 'g_socket_connection_is_connected'); LoadProc(Pointer(g_socket_control_message_deserialize), 'g_socket_control_message_deserialize'); LoadProc(Pointer(g_socket_control_message_get_level), 'g_socket_control_message_get_level'); LoadProc(Pointer(g_socket_control_message_get_msg_type), 'g_socket_control_message_get_msg_type'); LoadProc(Pointer(g_socket_control_message_get_size), 'g_socket_control_message_get_size'); LoadProc(Pointer(g_socket_control_message_get_type), 'g_socket_control_message_get_type'); LoadProc(Pointer(g_socket_control_message_serialize), 'g_socket_control_message_serialize'); LoadProc(Pointer(g_socket_create_source), 'g_socket_create_source'); LoadProc(Pointer(g_socket_get_available_bytes), 'g_socket_get_available_bytes'); LoadProc(Pointer(g_socket_get_blocking), 'g_socket_get_blocking'); LoadProc(Pointer(g_socket_get_broadcast), 'g_socket_get_broadcast'); LoadProc(Pointer(g_socket_get_credentials), 'g_socket_get_credentials'); LoadProc(Pointer(g_socket_get_family), 'g_socket_get_family'); LoadProc(Pointer(g_socket_get_fd), 'g_socket_get_fd'); LoadProc(Pointer(g_socket_get_keepalive), 'g_socket_get_keepalive'); LoadProc(Pointer(g_socket_get_listen_backlog), 'g_socket_get_listen_backlog'); LoadProc(Pointer(g_socket_get_local_address), 'g_socket_get_local_address'); LoadProc(Pointer(g_socket_get_multicast_loopback), 'g_socket_get_multicast_loopback'); LoadProc(Pointer(g_socket_get_multicast_ttl), 'g_socket_get_multicast_ttl'); LoadProc(Pointer(g_socket_get_option), 'g_socket_get_option'); LoadProc(Pointer(g_socket_get_protocol), 'g_socket_get_protocol'); LoadProc(Pointer(g_socket_get_remote_address), 'g_socket_get_remote_address'); LoadProc(Pointer(g_socket_get_socket_type), 'g_socket_get_socket_type'); LoadProc(Pointer(g_socket_get_timeout), 'g_socket_get_timeout'); LoadProc(Pointer(g_socket_get_ttl), 'g_socket_get_ttl'); LoadProc(Pointer(g_socket_get_type), 'g_socket_get_type'); LoadProc(Pointer(g_socket_is_closed), 'g_socket_is_closed'); LoadProc(Pointer(g_socket_is_connected), 'g_socket_is_connected'); LoadProc(Pointer(g_socket_join_multicast_group), 'g_socket_join_multicast_group'); LoadProc(Pointer(g_socket_leave_multicast_group), 'g_socket_leave_multicast_group'); LoadProc(Pointer(g_socket_listen), 'g_socket_listen'); LoadProc(Pointer(g_socket_listener_accept), 'g_socket_listener_accept'); LoadProc(Pointer(g_socket_listener_accept_async), 'g_socket_listener_accept_async'); LoadProc(Pointer(g_socket_listener_accept_finish), 'g_socket_listener_accept_finish'); LoadProc(Pointer(g_socket_listener_accept_socket), 'g_socket_listener_accept_socket'); LoadProc(Pointer(g_socket_listener_accept_socket_async), 'g_socket_listener_accept_socket_async'); LoadProc(Pointer(g_socket_listener_accept_socket_finish), 'g_socket_listener_accept_socket_finish'); LoadProc(Pointer(g_socket_listener_add_address), 'g_socket_listener_add_address'); LoadProc(Pointer(g_socket_listener_add_any_inet_port), 'g_socket_listener_add_any_inet_port'); LoadProc(Pointer(g_socket_listener_add_inet_port), 'g_socket_listener_add_inet_port'); LoadProc(Pointer(g_socket_listener_add_socket), 'g_socket_listener_add_socket'); LoadProc(Pointer(g_socket_listener_close), 'g_socket_listener_close'); LoadProc(Pointer(g_socket_listener_get_type), 'g_socket_listener_get_type'); LoadProc(Pointer(g_socket_listener_new), 'g_socket_listener_new'); LoadProc(Pointer(g_socket_listener_set_backlog), 'g_socket_listener_set_backlog'); LoadProc(Pointer(g_socket_new), 'g_socket_new'); LoadProc(Pointer(g_socket_new_from_fd), 'g_socket_new_from_fd'); LoadProc(Pointer(g_socket_receive), 'g_socket_receive'); LoadProc(Pointer(g_socket_receive_from), 'g_socket_receive_from'); LoadProc(Pointer(g_socket_receive_message), 'g_socket_receive_message'); LoadProc(Pointer(g_socket_receive_with_blocking), 'g_socket_receive_with_blocking'); LoadProc(Pointer(g_socket_send), 'g_socket_send'); LoadProc(Pointer(g_socket_send_message), 'g_socket_send_message'); LoadProc(Pointer(g_socket_send_to), 'g_socket_send_to'); LoadProc(Pointer(g_socket_send_with_blocking), 'g_socket_send_with_blocking'); LoadProc(Pointer(g_socket_service_get_type), 'g_socket_service_get_type'); LoadProc(Pointer(g_socket_service_is_active), 'g_socket_service_is_active'); LoadProc(Pointer(g_socket_service_new), 'g_socket_service_new'); LoadProc(Pointer(g_socket_service_start), 'g_socket_service_start'); LoadProc(Pointer(g_socket_service_stop), 'g_socket_service_stop'); LoadProc(Pointer(g_socket_set_blocking), 'g_socket_set_blocking'); LoadProc(Pointer(g_socket_set_broadcast), 'g_socket_set_broadcast'); LoadProc(Pointer(g_socket_set_keepalive), 'g_socket_set_keepalive'); LoadProc(Pointer(g_socket_set_listen_backlog), 'g_socket_set_listen_backlog'); LoadProc(Pointer(g_socket_set_multicast_loopback), 'g_socket_set_multicast_loopback'); LoadProc(Pointer(g_socket_set_multicast_ttl), 'g_socket_set_multicast_ttl'); LoadProc(Pointer(g_socket_set_option), 'g_socket_set_option'); LoadProc(Pointer(g_socket_set_timeout), 'g_socket_set_timeout'); LoadProc(Pointer(g_socket_set_ttl), 'g_socket_set_ttl'); LoadProc(Pointer(g_socket_shutdown), 'g_socket_shutdown'); LoadProc(Pointer(g_socket_speaks_ipv4), 'g_socket_speaks_ipv4'); LoadProc(Pointer(g_srv_target_copy), 'g_srv_target_copy'); LoadProc(Pointer(g_srv_target_free), 'g_srv_target_free'); LoadProc(Pointer(g_srv_target_get_hostname), 'g_srv_target_get_hostname'); LoadProc(Pointer(g_srv_target_get_port), 'g_srv_target_get_port'); LoadProc(Pointer(g_srv_target_get_priority), 'g_srv_target_get_priority'); LoadProc(Pointer(g_srv_target_get_type), 'g_srv_target_get_type'); LoadProc(Pointer(g_srv_target_get_weight), 'g_srv_target_get_weight'); LoadProc(Pointer(g_srv_target_list_sort), 'g_srv_target_list_sort'); LoadProc(Pointer(g_srv_target_new), 'g_srv_target_new'); LoadProc(Pointer(g_static_resource_fini), 'g_static_resource_fini'); LoadProc(Pointer(g_static_resource_get_resource), 'g_static_resource_get_resource'); LoadProc(Pointer(g_static_resource_init), 'g_static_resource_init'); LoadProc(Pointer(g_task_attach_source), 'g_task_attach_source'); LoadProc(Pointer(g_task_get_cancellable), 'g_task_get_cancellable'); LoadProc(Pointer(g_task_get_check_cancellable), 'g_task_get_check_cancellable'); LoadProc(Pointer(g_task_get_context), 'g_task_get_context'); LoadProc(Pointer(g_task_get_priority), 'g_task_get_priority'); LoadProc(Pointer(g_task_get_return_on_cancel), 'g_task_get_return_on_cancel'); LoadProc(Pointer(g_task_get_source_object), 'g_task_get_source_object'); LoadProc(Pointer(g_task_get_source_tag), 'g_task_get_source_tag'); LoadProc(Pointer(g_task_get_task_data), 'g_task_get_task_data'); LoadProc(Pointer(g_task_get_type), 'g_task_get_type'); LoadProc(Pointer(g_task_had_error), 'g_task_had_error'); LoadProc(Pointer(g_task_is_valid), 'g_task_is_valid'); LoadProc(Pointer(g_task_new), 'g_task_new'); LoadProc(Pointer(g_task_propagate_boolean), 'g_task_propagate_boolean'); LoadProc(Pointer(g_task_propagate_int), 'g_task_propagate_int'); LoadProc(Pointer(g_task_propagate_pointer), 'g_task_propagate_pointer'); LoadProc(Pointer(g_task_report_error), 'g_task_report_error'); LoadProc(Pointer(g_task_report_new_error), 'g_task_report_new_error'); LoadProc(Pointer(g_task_return_boolean), 'g_task_return_boolean'); LoadProc(Pointer(g_task_return_error), 'g_task_return_error'); LoadProc(Pointer(g_task_return_error_if_cancelled), 'g_task_return_error_if_cancelled'); LoadProc(Pointer(g_task_return_int), 'g_task_return_int'); LoadProc(Pointer(g_task_return_new_error), 'g_task_return_new_error'); LoadProc(Pointer(g_task_return_pointer), 'g_task_return_pointer'); LoadProc(Pointer(g_task_run_in_thread), 'g_task_run_in_thread'); LoadProc(Pointer(g_task_run_in_thread_sync), 'g_task_run_in_thread_sync'); LoadProc(Pointer(g_task_set_check_cancellable), 'g_task_set_check_cancellable'); LoadProc(Pointer(g_task_set_priority), 'g_task_set_priority'); LoadProc(Pointer(g_task_set_return_on_cancel), 'g_task_set_return_on_cancel'); LoadProc(Pointer(g_task_set_source_tag), 'g_task_set_source_tag'); LoadProc(Pointer(g_task_set_task_data), 'g_task_set_task_data'); LoadProc(Pointer(g_tcp_connection_get_graceful_disconnect), 'g_tcp_connection_get_graceful_disconnect'); LoadProc(Pointer(g_tcp_connection_get_type), 'g_tcp_connection_get_type'); LoadProc(Pointer(g_tcp_connection_set_graceful_disconnect), 'g_tcp_connection_set_graceful_disconnect'); LoadProc(Pointer(g_tcp_wrapper_connection_get_base_io_stream), 'g_tcp_wrapper_connection_get_base_io_stream'); LoadProc(Pointer(g_tcp_wrapper_connection_get_type), 'g_tcp_wrapper_connection_get_type'); LoadProc(Pointer(g_tcp_wrapper_connection_new), 'g_tcp_wrapper_connection_new'); LoadProc(Pointer(g_test_dbus_add_service_dir), 'g_test_dbus_add_service_dir'); LoadProc(Pointer(g_test_dbus_down), 'g_test_dbus_down'); LoadProc(Pointer(g_test_dbus_get_bus_address), 'g_test_dbus_get_bus_address'); LoadProc(Pointer(g_test_dbus_get_flags), 'g_test_dbus_get_flags'); LoadProc(Pointer(g_test_dbus_get_type), 'g_test_dbus_get_type'); LoadProc(Pointer(g_test_dbus_new), 'g_test_dbus_new'); LoadProc(Pointer(g_test_dbus_stop), 'g_test_dbus_stop'); LoadProc(Pointer(g_test_dbus_unset), 'g_test_dbus_unset'); LoadProc(Pointer(g_test_dbus_up), 'g_test_dbus_up'); LoadProc(Pointer(g_themed_icon_append_name), 'g_themed_icon_append_name'); LoadProc(Pointer(g_themed_icon_get_names), 'g_themed_icon_get_names'); LoadProc(Pointer(g_themed_icon_get_type), 'g_themed_icon_get_type'); LoadProc(Pointer(g_themed_icon_new), 'g_themed_icon_new'); LoadProc(Pointer(g_themed_icon_new_from_names), 'g_themed_icon_new_from_names'); LoadProc(Pointer(g_themed_icon_new_with_default_fallbacks), 'g_themed_icon_new_with_default_fallbacks'); LoadProc(Pointer(g_themed_icon_prepend_name), 'g_themed_icon_prepend_name'); LoadProc(Pointer(g_threaded_socket_service_get_type), 'g_threaded_socket_service_get_type'); LoadProc(Pointer(g_threaded_socket_service_new), 'g_threaded_socket_service_new'); LoadProc(Pointer(g_tls_backend_get_certificate_type), 'g_tls_backend_get_certificate_type'); LoadProc(Pointer(g_tls_backend_get_client_connection_type), 'g_tls_backend_get_client_connection_type'); LoadProc(Pointer(g_tls_backend_get_default), 'g_tls_backend_get_default'); LoadProc(Pointer(g_tls_backend_get_default_database), 'g_tls_backend_get_default_database'); LoadProc(Pointer(g_tls_backend_get_file_database_type), 'g_tls_backend_get_file_database_type'); LoadProc(Pointer(g_tls_backend_get_server_connection_type), 'g_tls_backend_get_server_connection_type'); LoadProc(Pointer(g_tls_backend_get_type), 'g_tls_backend_get_type'); LoadProc(Pointer(g_tls_backend_supports_tls), 'g_tls_backend_supports_tls'); LoadProc(Pointer(g_tls_certificate_get_issuer), 'g_tls_certificate_get_issuer'); LoadProc(Pointer(g_tls_certificate_get_type), 'g_tls_certificate_get_type'); LoadProc(Pointer(g_tls_certificate_is_same), 'g_tls_certificate_is_same'); LoadProc(Pointer(g_tls_certificate_list_new_from_file), 'g_tls_certificate_list_new_from_file'); LoadProc(Pointer(g_tls_certificate_new_from_file), 'g_tls_certificate_new_from_file'); LoadProc(Pointer(g_tls_certificate_new_from_files), 'g_tls_certificate_new_from_files'); LoadProc(Pointer(g_tls_certificate_new_from_pem), 'g_tls_certificate_new_from_pem'); LoadProc(Pointer(g_tls_certificate_verify), 'g_tls_certificate_verify'); LoadProc(Pointer(g_tls_client_connection_get_accepted_cas), 'g_tls_client_connection_get_accepted_cas'); LoadProc(Pointer(g_tls_client_connection_get_server_identity), 'g_tls_client_connection_get_server_identity'); LoadProc(Pointer(g_tls_client_connection_get_type), 'g_tls_client_connection_get_type'); LoadProc(Pointer(g_tls_client_connection_get_use_ssl3), 'g_tls_client_connection_get_use_ssl3'); LoadProc(Pointer(g_tls_client_connection_get_validation_flags), 'g_tls_client_connection_get_validation_flags'); LoadProc(Pointer(g_tls_client_connection_new), 'g_tls_client_connection_new'); LoadProc(Pointer(g_tls_client_connection_set_server_identity), 'g_tls_client_connection_set_server_identity'); LoadProc(Pointer(g_tls_client_connection_set_use_ssl3), 'g_tls_client_connection_set_use_ssl3'); LoadProc(Pointer(g_tls_client_connection_set_validation_flags), 'g_tls_client_connection_set_validation_flags'); LoadProc(Pointer(g_tls_connection_emit_accept_certificate), 'g_tls_connection_emit_accept_certificate'); LoadProc(Pointer(g_tls_connection_get_certificate), 'g_tls_connection_get_certificate'); LoadProc(Pointer(g_tls_connection_get_database), 'g_tls_connection_get_database'); LoadProc(Pointer(g_tls_connection_get_interaction), 'g_tls_connection_get_interaction'); LoadProc(Pointer(g_tls_connection_get_peer_certificate), 'g_tls_connection_get_peer_certificate'); LoadProc(Pointer(g_tls_connection_get_peer_certificate_errors), 'g_tls_connection_get_peer_certificate_errors'); LoadProc(Pointer(g_tls_connection_get_rehandshake_mode), 'g_tls_connection_get_rehandshake_mode'); LoadProc(Pointer(g_tls_connection_get_require_close_notify), 'g_tls_connection_get_require_close_notify'); LoadProc(Pointer(g_tls_connection_get_type), 'g_tls_connection_get_type'); LoadProc(Pointer(g_tls_connection_handshake), 'g_tls_connection_handshake'); LoadProc(Pointer(g_tls_connection_handshake_async), 'g_tls_connection_handshake_async'); LoadProc(Pointer(g_tls_connection_handshake_finish), 'g_tls_connection_handshake_finish'); LoadProc(Pointer(g_tls_connection_set_certificate), 'g_tls_connection_set_certificate'); LoadProc(Pointer(g_tls_connection_set_database), 'g_tls_connection_set_database'); LoadProc(Pointer(g_tls_connection_set_interaction), 'g_tls_connection_set_interaction'); LoadProc(Pointer(g_tls_connection_set_rehandshake_mode), 'g_tls_connection_set_rehandshake_mode'); LoadProc(Pointer(g_tls_connection_set_require_close_notify), 'g_tls_connection_set_require_close_notify'); LoadProc(Pointer(g_tls_database_create_certificate_handle), 'g_tls_database_create_certificate_handle'); LoadProc(Pointer(g_tls_database_get_type), 'g_tls_database_get_type'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle), 'g_tls_database_lookup_certificate_for_handle'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle_async), 'g_tls_database_lookup_certificate_for_handle_async'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle_finish), 'g_tls_database_lookup_certificate_for_handle_finish'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer), 'g_tls_database_lookup_certificate_issuer'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer_async), 'g_tls_database_lookup_certificate_issuer_async'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer_finish), 'g_tls_database_lookup_certificate_issuer_finish'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by), 'g_tls_database_lookup_certificates_issued_by'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by_async), 'g_tls_database_lookup_certificates_issued_by_async'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by_finish), 'g_tls_database_lookup_certificates_issued_by_finish'); LoadProc(Pointer(g_tls_database_verify_chain), 'g_tls_database_verify_chain'); LoadProc(Pointer(g_tls_database_verify_chain_async), 'g_tls_database_verify_chain_async'); LoadProc(Pointer(g_tls_database_verify_chain_finish), 'g_tls_database_verify_chain_finish'); LoadProc(Pointer(g_tls_error_quark), 'g_tls_error_quark'); LoadProc(Pointer(g_tls_file_database_get_type), 'g_tls_file_database_get_type'); LoadProc(Pointer(g_tls_file_database_new), 'g_tls_file_database_new'); LoadProc(Pointer(g_tls_interaction_ask_password), 'g_tls_interaction_ask_password'); LoadProc(Pointer(g_tls_interaction_ask_password_async), 'g_tls_interaction_ask_password_async'); LoadProc(Pointer(g_tls_interaction_ask_password_finish), 'g_tls_interaction_ask_password_finish'); LoadProc(Pointer(g_tls_interaction_get_type), 'g_tls_interaction_get_type'); LoadProc(Pointer(g_tls_interaction_invoke_ask_password), 'g_tls_interaction_invoke_ask_password'); LoadProc(Pointer(g_tls_password_get_description), 'g_tls_password_get_description'); LoadProc(Pointer(g_tls_password_get_flags), 'g_tls_password_get_flags'); LoadProc(Pointer(g_tls_password_get_type), 'g_tls_password_get_type'); LoadProc(Pointer(g_tls_password_get_value), 'g_tls_password_get_value'); LoadProc(Pointer(g_tls_password_get_warning), 'g_tls_password_get_warning'); LoadProc(Pointer(g_tls_password_new), 'g_tls_password_new'); LoadProc(Pointer(g_tls_password_set_description), 'g_tls_password_set_description'); LoadProc(Pointer(g_tls_password_set_flags), 'g_tls_password_set_flags'); LoadProc(Pointer(g_tls_password_set_value), 'g_tls_password_set_value'); LoadProc(Pointer(g_tls_password_set_value_full), 'g_tls_password_set_value_full'); LoadProc(Pointer(g_tls_password_set_warning), 'g_tls_password_set_warning'); LoadProc(Pointer(g_tls_server_connection_get_type), 'g_tls_server_connection_get_type'); LoadProc(Pointer(g_tls_server_connection_new), 'g_tls_server_connection_new'); LoadProc(Pointer(g_unix_connection_get_type), 'g_unix_connection_get_type'); LoadProc(Pointer(g_unix_connection_receive_credentials), 'g_unix_connection_receive_credentials'); LoadProc(Pointer(g_unix_connection_receive_credentials_async), 'g_unix_connection_receive_credentials_async'); LoadProc(Pointer(g_unix_connection_receive_credentials_finish), 'g_unix_connection_receive_credentials_finish'); LoadProc(Pointer(g_unix_connection_receive_fd), 'g_unix_connection_receive_fd'); LoadProc(Pointer(g_unix_connection_send_credentials), 'g_unix_connection_send_credentials'); LoadProc(Pointer(g_unix_connection_send_credentials_async), 'g_unix_connection_send_credentials_async'); LoadProc(Pointer(g_unix_connection_send_credentials_finish), 'g_unix_connection_send_credentials_finish'); LoadProc(Pointer(g_unix_connection_send_fd), 'g_unix_connection_send_fd'); LoadProc(Pointer(g_unix_credentials_message_get_credentials), 'g_unix_credentials_message_get_credentials'); LoadProc(Pointer(g_unix_credentials_message_get_type), 'g_unix_credentials_message_get_type'); LoadProc(Pointer(g_unix_credentials_message_is_supported), 'g_unix_credentials_message_is_supported'); LoadProc(Pointer(g_unix_credentials_message_new), 'g_unix_credentials_message_new'); LoadProc(Pointer(g_unix_credentials_message_new_with_credentials), 'g_unix_credentials_message_new_with_credentials'); LoadProc(Pointer(g_unix_fd_list_append), 'g_unix_fd_list_append'); LoadProc(Pointer(g_unix_fd_list_get), 'g_unix_fd_list_get'); LoadProc(Pointer(g_unix_fd_list_get_length), 'g_unix_fd_list_get_length'); LoadProc(Pointer(g_unix_fd_list_get_type), 'g_unix_fd_list_get_type'); LoadProc(Pointer(g_unix_fd_list_new), 'g_unix_fd_list_new'); LoadProc(Pointer(g_unix_fd_list_new_from_array), 'g_unix_fd_list_new_from_array'); LoadProc(Pointer(g_unix_fd_list_peek_fds), 'g_unix_fd_list_peek_fds'); LoadProc(Pointer(g_unix_fd_list_steal_fds), 'g_unix_fd_list_steal_fds'); LoadProc(Pointer(g_unix_fd_message_append_fd), 'g_unix_fd_message_append_fd'); LoadProc(Pointer(g_unix_fd_message_get_fd_list), 'g_unix_fd_message_get_fd_list'); LoadProc(Pointer(g_unix_fd_message_get_type), 'g_unix_fd_message_get_type'); LoadProc(Pointer(g_unix_fd_message_new), 'g_unix_fd_message_new'); LoadProc(Pointer(g_unix_fd_message_new_with_fd_list), 'g_unix_fd_message_new_with_fd_list'); LoadProc(Pointer(g_unix_fd_message_steal_fds), 'g_unix_fd_message_steal_fds'); LoadProc(Pointer(g_unix_input_stream_get_close_fd), 'g_unix_input_stream_get_close_fd'); LoadProc(Pointer(g_unix_input_stream_get_fd), 'g_unix_input_stream_get_fd'); LoadProc(Pointer(g_unix_input_stream_get_type), 'g_unix_input_stream_get_type'); LoadProc(Pointer(g_unix_input_stream_new), 'g_unix_input_stream_new'); LoadProc(Pointer(g_unix_input_stream_set_close_fd), 'g_unix_input_stream_set_close_fd'); LoadProc(Pointer(g_unix_is_mount_path_system_internal), 'g_unix_is_mount_path_system_internal'); LoadProc(Pointer(g_unix_mount_at), 'g_unix_mount_at'); LoadProc(Pointer(g_unix_mount_compare), 'g_unix_mount_compare'); LoadProc(Pointer(g_unix_mount_free), 'g_unix_mount_free'); LoadProc(Pointer(g_unix_mount_get_device_path), 'g_unix_mount_get_device_path'); LoadProc(Pointer(g_unix_mount_get_fs_type), 'g_unix_mount_get_fs_type'); LoadProc(Pointer(g_unix_mount_get_mount_path), 'g_unix_mount_get_mount_path'); LoadProc(Pointer(g_unix_mount_guess_can_eject), 'g_unix_mount_guess_can_eject'); LoadProc(Pointer(g_unix_mount_guess_icon), 'g_unix_mount_guess_icon'); LoadProc(Pointer(g_unix_mount_guess_name), 'g_unix_mount_guess_name'); LoadProc(Pointer(g_unix_mount_guess_should_display), 'g_unix_mount_guess_should_display'); LoadProc(Pointer(g_unix_mount_guess_symbolic_icon), 'g_unix_mount_guess_symbolic_icon'); LoadProc(Pointer(g_unix_mount_is_readonly), 'g_unix_mount_is_readonly'); LoadProc(Pointer(g_unix_mount_is_system_internal), 'g_unix_mount_is_system_internal'); LoadProc(Pointer(g_unix_mount_monitor_get_type), 'g_unix_mount_monitor_get_type'); LoadProc(Pointer(g_unix_mount_monitor_new), 'g_unix_mount_monitor_new'); LoadProc(Pointer(g_unix_mount_monitor_set_rate_limit), 'g_unix_mount_monitor_set_rate_limit'); LoadProc(Pointer(g_unix_mount_point_compare), 'g_unix_mount_point_compare'); LoadProc(Pointer(g_unix_mount_point_free), 'g_unix_mount_point_free'); LoadProc(Pointer(g_unix_mount_point_get_device_path), 'g_unix_mount_point_get_device_path'); LoadProc(Pointer(g_unix_mount_point_get_fs_type), 'g_unix_mount_point_get_fs_type'); LoadProc(Pointer(g_unix_mount_point_get_mount_path), 'g_unix_mount_point_get_mount_path'); LoadProc(Pointer(g_unix_mount_point_get_options), 'g_unix_mount_point_get_options'); LoadProc(Pointer(g_unix_mount_point_guess_can_eject), 'g_unix_mount_point_guess_can_eject'); LoadProc(Pointer(g_unix_mount_point_guess_icon), 'g_unix_mount_point_guess_icon'); LoadProc(Pointer(g_unix_mount_point_guess_name), 'g_unix_mount_point_guess_name'); LoadProc(Pointer(g_unix_mount_point_guess_symbolic_icon), 'g_unix_mount_point_guess_symbolic_icon'); LoadProc(Pointer(g_unix_mount_point_is_loopback), 'g_unix_mount_point_is_loopback'); LoadProc(Pointer(g_unix_mount_point_is_readonly), 'g_unix_mount_point_is_readonly'); LoadProc(Pointer(g_unix_mount_point_is_user_mountable), 'g_unix_mount_point_is_user_mountable'); LoadProc(Pointer(g_unix_mount_points_changed_since), 'g_unix_mount_points_changed_since'); LoadProc(Pointer(g_unix_mount_points_get), 'g_unix_mount_points_get'); LoadProc(Pointer(g_unix_mounts_changed_since), 'g_unix_mounts_changed_since'); LoadProc(Pointer(g_unix_mounts_get), 'g_unix_mounts_get'); LoadProc(Pointer(g_unix_output_stream_get_close_fd), 'g_unix_output_stream_get_close_fd'); LoadProc(Pointer(g_unix_output_stream_get_fd), 'g_unix_output_stream_get_fd'); LoadProc(Pointer(g_unix_output_stream_get_type), 'g_unix_output_stream_get_type'); LoadProc(Pointer(g_unix_output_stream_new), 'g_unix_output_stream_new'); LoadProc(Pointer(g_unix_output_stream_set_close_fd), 'g_unix_output_stream_set_close_fd'); LoadProc(Pointer(g_unix_socket_address_abstract_names_supported), 'g_unix_socket_address_abstract_names_supported'); LoadProc(Pointer(g_unix_socket_address_get_address_type), 'g_unix_socket_address_get_address_type'); LoadProc(Pointer(g_unix_socket_address_get_path), 'g_unix_socket_address_get_path'); LoadProc(Pointer(g_unix_socket_address_get_path_len), 'g_unix_socket_address_get_path_len'); LoadProc(Pointer(g_unix_socket_address_get_type), 'g_unix_socket_address_get_type'); LoadProc(Pointer(g_unix_socket_address_new), 'g_unix_socket_address_new'); LoadProc(Pointer(g_unix_socket_address_new_with_type), 'g_unix_socket_address_new_with_type'); LoadProc(Pointer(g_vfs_get_default), 'g_vfs_get_default'); LoadProc(Pointer(g_vfs_get_file_for_path), 'g_vfs_get_file_for_path'); LoadProc(Pointer(g_vfs_get_file_for_uri), 'g_vfs_get_file_for_uri'); LoadProc(Pointer(g_vfs_get_local), 'g_vfs_get_local'); LoadProc(Pointer(g_vfs_get_supported_uri_schemes), 'g_vfs_get_supported_uri_schemes'); LoadProc(Pointer(g_vfs_get_type), 'g_vfs_get_type'); LoadProc(Pointer(g_vfs_is_active), 'g_vfs_is_active'); LoadProc(Pointer(g_vfs_parse_name), 'g_vfs_parse_name'); LoadProc(Pointer(g_volume_can_eject), 'g_volume_can_eject'); LoadProc(Pointer(g_volume_can_mount), 'g_volume_can_mount'); LoadProc(Pointer(g_volume_eject_with_operation), 'g_volume_eject_with_operation'); LoadProc(Pointer(g_volume_eject_with_operation_finish), 'g_volume_eject_with_operation_finish'); LoadProc(Pointer(g_volume_enumerate_identifiers), 'g_volume_enumerate_identifiers'); LoadProc(Pointer(g_volume_get_activation_root), 'g_volume_get_activation_root'); LoadProc(Pointer(g_volume_get_drive), 'g_volume_get_drive'); LoadProc(Pointer(g_volume_get_icon), 'g_volume_get_icon'); LoadProc(Pointer(g_volume_get_identifier), 'g_volume_get_identifier'); LoadProc(Pointer(g_volume_get_mount), 'g_volume_get_mount'); LoadProc(Pointer(g_volume_get_name), 'g_volume_get_name'); LoadProc(Pointer(g_volume_get_sort_key), 'g_volume_get_sort_key'); LoadProc(Pointer(g_volume_get_symbolic_icon), 'g_volume_get_symbolic_icon'); LoadProc(Pointer(g_volume_get_type), 'g_volume_get_type'); LoadProc(Pointer(g_volume_get_uuid), 'g_volume_get_uuid'); LoadProc(Pointer(g_volume_monitor_get), 'g_volume_monitor_get'); LoadProc(Pointer(g_volume_monitor_get_connected_drives), 'g_volume_monitor_get_connected_drives'); LoadProc(Pointer(g_volume_monitor_get_mount_for_uuid), 'g_volume_monitor_get_mount_for_uuid'); LoadProc(Pointer(g_volume_monitor_get_mounts), 'g_volume_monitor_get_mounts'); LoadProc(Pointer(g_volume_monitor_get_type), 'g_volume_monitor_get_type'); LoadProc(Pointer(g_volume_monitor_get_volume_for_uuid), 'g_volume_monitor_get_volume_for_uuid'); LoadProc(Pointer(g_volume_monitor_get_volumes), 'g_volume_monitor_get_volumes'); LoadProc(Pointer(g_volume_mount), 'g_volume_mount'); LoadProc(Pointer(g_volume_mount_finish), 'g_volume_mount_finish'); LoadProc(Pointer(g_volume_should_automount), 'g_volume_should_automount'); LoadProc(Pointer(g_zlib_compressor_get_file_info), 'g_zlib_compressor_get_file_info'); LoadProc(Pointer(g_zlib_compressor_get_type), 'g_zlib_compressor_get_type'); LoadProc(Pointer(g_zlib_compressor_new), 'g_zlib_compressor_new'); LoadProc(Pointer(g_zlib_compressor_set_file_info), 'g_zlib_compressor_set_file_info'); LoadProc(Pointer(g_zlib_decompressor_get_file_info), 'g_zlib_decompressor_get_file_info'); LoadProc(Pointer(g_zlib_decompressor_get_type), 'g_zlib_decompressor_get_type'); LoadProc(Pointer(g_zlib_decompressor_new), 'g_zlib_decompressor_new'); end; procedure UnloadLibraries; begin if libgio_2_0_so_0 <> 0 then UnloadLibrary(libgio_2_0_so_0); libgio_2_0_so_0 := 0; g_action_activate := nil; g_action_change_state := nil; g_action_get_enabled := nil; g_action_get_name := nil; g_action_get_parameter_type := nil; g_action_get_state := nil; g_action_get_state_hint := nil; g_action_get_state_type := nil; g_action_get_type := nil; g_action_group_action_added := nil; g_action_group_action_enabled_changed := nil; g_action_group_action_removed := nil; g_action_group_action_state_changed := nil; g_action_group_activate_action := nil; g_action_group_change_action_state := nil; g_action_group_get_action_enabled := nil; g_action_group_get_action_parameter_type := nil; g_action_group_get_action_state := nil; g_action_group_get_action_state_hint := nil; g_action_group_get_action_state_type := nil; g_action_group_get_type := nil; g_action_group_has_action := nil; g_action_group_list_actions := nil; g_action_group_query_action := nil; g_action_map_add_action := nil; g_action_map_add_action_entries := nil; g_action_map_get_type := nil; g_action_map_lookup_action := nil; g_action_map_remove_action := nil; g_app_info_add_supports_type := nil; g_app_info_can_delete := nil; g_app_info_can_remove_supports_type := nil; g_app_info_create_from_commandline := nil; g_app_info_delete := nil; g_app_info_dup := nil; g_app_info_equal := nil; g_app_info_get_all := nil; g_app_info_get_all_for_type := nil; g_app_info_get_commandline := nil; g_app_info_get_default_for_type := nil; g_app_info_get_default_for_uri_scheme := nil; g_app_info_get_description := nil; g_app_info_get_display_name := nil; g_app_info_get_executable := nil; g_app_info_get_fallback_for_type := nil; g_app_info_get_icon := nil; g_app_info_get_id := nil; g_app_info_get_name := nil; g_app_info_get_recommended_for_type := nil; g_app_info_get_supported_types := nil; g_app_info_get_type := nil; g_app_info_launch := nil; g_app_info_launch_default_for_uri := nil; g_app_info_launch_uris := nil; g_app_info_remove_supports_type := nil; g_app_info_reset_type_associations := nil; g_app_info_set_as_default_for_extension := nil; g_app_info_set_as_default_for_type := nil; g_app_info_set_as_last_used_for_type := nil; g_app_info_should_show := nil; g_app_info_supports_files := nil; g_app_info_supports_uris := nil; g_app_launch_context_get_display := nil; g_app_launch_context_get_environment := nil; g_app_launch_context_get_startup_notify_id := nil; g_app_launch_context_get_type := nil; g_app_launch_context_launch_failed := nil; g_app_launch_context_new := nil; g_app_launch_context_setenv := nil; g_app_launch_context_unsetenv := nil; g_application_activate := nil; g_application_command_line_create_file_for_arg := nil; g_application_command_line_get_arguments := nil; g_application_command_line_get_cwd := nil; g_application_command_line_get_environ := nil; g_application_command_line_get_exit_status := nil; g_application_command_line_get_is_remote := nil; g_application_command_line_get_platform_data := nil; g_application_command_line_get_stdin := nil; g_application_command_line_get_type := nil; g_application_command_line_getenv := nil; g_application_command_line_print := nil; g_application_command_line_printerr := nil; g_application_command_line_set_exit_status := nil; g_application_get_application_id := nil; g_application_get_dbus_connection := nil; g_application_get_dbus_object_path := nil; g_application_get_default := nil; g_application_get_flags := nil; g_application_get_inactivity_timeout := nil; g_application_get_is_registered := nil; g_application_get_is_remote := nil; g_application_get_type := nil; g_application_hold := nil; g_application_id_is_valid := nil; g_application_new := nil; g_application_open := nil; g_application_quit := nil; g_application_register := nil; g_application_release := nil; g_application_run := nil; g_application_set_application_id := nil; g_application_set_default := nil; g_application_set_flags := nil; g_application_set_inactivity_timeout := nil; g_async_initable_get_type := nil; g_async_initable_init_async := nil; g_async_initable_init_finish := nil; g_async_initable_new_async := nil; g_async_initable_new_finish := nil; g_async_initable_new_valist_async := nil; g_async_initable_newv_async := nil; g_async_result_get_source_object := nil; g_async_result_get_type := nil; g_async_result_get_user_data := nil; g_async_result_is_tagged := nil; g_async_result_legacy_propagate_error := nil; g_buffered_input_stream_fill := nil; g_buffered_input_stream_fill_async := nil; g_buffered_input_stream_fill_finish := nil; g_buffered_input_stream_get_available := nil; g_buffered_input_stream_get_buffer_size := nil; g_buffered_input_stream_get_type := nil; g_buffered_input_stream_new := nil; g_buffered_input_stream_new_sized := nil; g_buffered_input_stream_peek := nil; g_buffered_input_stream_peek_buffer := nil; g_buffered_input_stream_read_byte := nil; g_buffered_input_stream_set_buffer_size := nil; g_buffered_output_stream_get_auto_grow := nil; g_buffered_output_stream_get_buffer_size := nil; g_buffered_output_stream_get_type := nil; g_buffered_output_stream_new := nil; g_buffered_output_stream_new_sized := nil; g_buffered_output_stream_set_auto_grow := nil; g_buffered_output_stream_set_buffer_size := nil; g_bus_get := nil; g_bus_get_finish := nil; g_bus_get_sync := nil; g_bus_own_name := nil; g_bus_own_name_on_connection := nil; g_bus_own_name_on_connection_with_closures := nil; g_bus_own_name_with_closures := nil; g_bus_unown_name := nil; g_bus_unwatch_name := nil; g_bus_watch_name := nil; g_bus_watch_name_on_connection := nil; g_bus_watch_name_on_connection_with_closures := nil; g_bus_watch_name_with_closures := nil; g_cancellable_cancel := nil; g_cancellable_connect := nil; g_cancellable_disconnect := nil; g_cancellable_get_current := nil; g_cancellable_get_fd := nil; g_cancellable_get_type := nil; g_cancellable_is_cancelled := nil; g_cancellable_make_pollfd := nil; g_cancellable_new := nil; g_cancellable_pop_current := nil; g_cancellable_push_current := nil; g_cancellable_release_fd := nil; g_cancellable_reset := nil; g_cancellable_set_error_if_cancelled := nil; g_cancellable_source_new := nil; g_charset_converter_get_num_fallbacks := nil; g_charset_converter_get_type := nil; g_charset_converter_get_use_fallback := nil; g_charset_converter_new := nil; g_charset_converter_set_use_fallback := nil; g_content_type_can_be_executable := nil; g_content_type_equals := nil; g_content_type_from_mime_type := nil; g_content_type_get_description := nil; g_content_type_get_generic_icon_name := nil; g_content_type_get_icon := nil; g_content_type_get_mime_type := nil; g_content_type_get_symbolic_icon := nil; g_content_type_guess := nil; g_content_type_guess_for_tree := nil; g_content_type_is_a := nil; g_content_type_is_unknown := nil; g_content_types_get_registered := nil; g_converter_convert := nil; g_converter_get_type := nil; g_converter_input_stream_get_converter := nil; g_converter_input_stream_get_type := nil; g_converter_input_stream_new := nil; g_converter_output_stream_get_converter := nil; g_converter_output_stream_get_type := nil; g_converter_output_stream_new := nil; g_converter_reset := nil; g_credentials_get_native := nil; g_credentials_get_type := nil; g_credentials_get_unix_pid := nil; g_credentials_get_unix_user := nil; g_credentials_is_same_user := nil; g_credentials_new := nil; g_credentials_set_native := nil; g_credentials_set_unix_user := nil; g_credentials_to_string := nil; g_data_input_stream_get_byte_order := nil; g_data_input_stream_get_newline_type := nil; g_data_input_stream_get_type := nil; g_data_input_stream_new := nil; g_data_input_stream_read_byte := nil; g_data_input_stream_read_int16 := nil; g_data_input_stream_read_int32 := nil; g_data_input_stream_read_int64 := nil; g_data_input_stream_read_line := nil; g_data_input_stream_read_line_async := nil; g_data_input_stream_read_line_finish := nil; g_data_input_stream_read_line_finish_utf8 := nil; g_data_input_stream_read_line_utf8 := nil; g_data_input_stream_read_uint16 := nil; g_data_input_stream_read_uint32 := nil; g_data_input_stream_read_uint64 := nil; g_data_input_stream_read_until := nil; g_data_input_stream_read_until_async := nil; g_data_input_stream_read_until_finish := nil; g_data_input_stream_read_upto := nil; g_data_input_stream_read_upto_async := nil; g_data_input_stream_read_upto_finish := nil; g_data_input_stream_set_byte_order := nil; g_data_input_stream_set_newline_type := nil; g_data_output_stream_get_byte_order := nil; g_data_output_stream_get_type := nil; g_data_output_stream_new := nil; g_data_output_stream_put_byte := nil; g_data_output_stream_put_int16 := nil; g_data_output_stream_put_int32 := nil; g_data_output_stream_put_int64 := nil; g_data_output_stream_put_string := nil; g_data_output_stream_put_uint16 := nil; g_data_output_stream_put_uint32 := nil; g_data_output_stream_put_uint64 := nil; g_data_output_stream_set_byte_order := nil; g_dbus_action_group_get := nil; g_dbus_action_group_get_type := nil; g_dbus_address_escape_value := nil; g_dbus_address_get_for_bus_sync := nil; g_dbus_address_get_stream := nil; g_dbus_address_get_stream_finish := nil; g_dbus_address_get_stream_sync := nil; g_dbus_annotation_info_get_type := nil; g_dbus_annotation_info_lookup := nil; g_dbus_annotation_info_ref := nil; g_dbus_annotation_info_unref := nil; g_dbus_arg_info_get_type := nil; g_dbus_arg_info_ref := nil; g_dbus_arg_info_unref := nil; g_dbus_auth_observer_allow_mechanism := nil; g_dbus_auth_observer_authorize_authenticated_peer := nil; g_dbus_auth_observer_get_type := nil; g_dbus_auth_observer_new := nil; g_dbus_connection_add_filter := nil; g_dbus_connection_call := nil; g_dbus_connection_call_finish := nil; g_dbus_connection_call_sync := nil; g_dbus_connection_call_with_unix_fd_list := nil; g_dbus_connection_call_with_unix_fd_list_finish := nil; g_dbus_connection_call_with_unix_fd_list_sync := nil; g_dbus_connection_close := nil; g_dbus_connection_close_finish := nil; g_dbus_connection_close_sync := nil; g_dbus_connection_emit_signal := nil; g_dbus_connection_export_action_group := nil; g_dbus_connection_export_menu_model := nil; g_dbus_connection_flush := nil; g_dbus_connection_flush_finish := nil; g_dbus_connection_flush_sync := nil; g_dbus_connection_get_capabilities := nil; g_dbus_connection_get_exit_on_close := nil; g_dbus_connection_get_guid := nil; g_dbus_connection_get_last_serial := nil; g_dbus_connection_get_peer_credentials := nil; g_dbus_connection_get_stream := nil; g_dbus_connection_get_type := nil; g_dbus_connection_get_unique_name := nil; g_dbus_connection_is_closed := nil; g_dbus_connection_new := nil; g_dbus_connection_new_finish := nil; g_dbus_connection_new_for_address := nil; g_dbus_connection_new_for_address_finish := nil; g_dbus_connection_new_for_address_sync := nil; g_dbus_connection_new_sync := nil; g_dbus_connection_register_object := nil; g_dbus_connection_register_subtree := nil; g_dbus_connection_remove_filter := nil; g_dbus_connection_send_message := nil; g_dbus_connection_send_message_with_reply := nil; g_dbus_connection_send_message_with_reply_finish := nil; g_dbus_connection_send_message_with_reply_sync := nil; g_dbus_connection_set_exit_on_close := nil; g_dbus_connection_signal_subscribe := nil; g_dbus_connection_signal_unsubscribe := nil; g_dbus_connection_start_message_processing := nil; g_dbus_connection_unexport_action_group := nil; g_dbus_connection_unexport_menu_model := nil; g_dbus_connection_unregister_object := nil; g_dbus_connection_unregister_subtree := nil; g_dbus_error_encode_gerror := nil; g_dbus_error_get_remote_error := nil; g_dbus_error_is_remote_error := nil; g_dbus_error_new_for_dbus_error := nil; g_dbus_error_quark := nil; g_dbus_error_register_error := nil; g_dbus_error_register_error_domain := nil; g_dbus_error_set_dbus_error := nil; g_dbus_error_set_dbus_error_valist := nil; g_dbus_error_strip_remote_error := nil; g_dbus_error_unregister_error := nil; g_dbus_generate_guid := nil; g_dbus_gvalue_to_gvariant := nil; g_dbus_gvariant_to_gvalue := nil; g_dbus_interface_dup_object := nil; g_dbus_interface_get_info := nil; g_dbus_interface_get_object := nil; g_dbus_interface_get_type := nil; g_dbus_interface_info_cache_build := nil; g_dbus_interface_info_cache_release := nil; g_dbus_interface_info_generate_xml := nil; g_dbus_interface_info_get_type := nil; g_dbus_interface_info_lookup_method := nil; g_dbus_interface_info_lookup_property := nil; g_dbus_interface_info_lookup_signal := nil; g_dbus_interface_info_ref := nil; g_dbus_interface_info_unref := nil; g_dbus_interface_set_object := nil; g_dbus_interface_skeleton_export := nil; g_dbus_interface_skeleton_flush := nil; g_dbus_interface_skeleton_get_connection := nil; g_dbus_interface_skeleton_get_connections := nil; g_dbus_interface_skeleton_get_flags := nil; g_dbus_interface_skeleton_get_info := nil; g_dbus_interface_skeleton_get_object_path := nil; g_dbus_interface_skeleton_get_properties := nil; g_dbus_interface_skeleton_get_type := nil; g_dbus_interface_skeleton_get_vtable := nil; g_dbus_interface_skeleton_has_connection := nil; g_dbus_interface_skeleton_set_flags := nil; g_dbus_interface_skeleton_unexport := nil; g_dbus_interface_skeleton_unexport_from_connection := nil; g_dbus_is_address := nil; g_dbus_is_guid := nil; g_dbus_is_interface_name := nil; g_dbus_is_member_name := nil; g_dbus_is_name := nil; g_dbus_is_supported_address := nil; g_dbus_is_unique_name := nil; g_dbus_menu_model_get := nil; g_dbus_menu_model_get_type := nil; g_dbus_message_bytes_needed := nil; g_dbus_message_copy := nil; g_dbus_message_get_arg0 := nil; g_dbus_message_get_body := nil; g_dbus_message_get_byte_order := nil; g_dbus_message_get_destination := nil; g_dbus_message_get_error_name := nil; g_dbus_message_get_flags := nil; g_dbus_message_get_header := nil; g_dbus_message_get_header_fields := nil; g_dbus_message_get_interface := nil; g_dbus_message_get_locked := nil; g_dbus_message_get_member := nil; g_dbus_message_get_message_type := nil; g_dbus_message_get_num_unix_fds := nil; g_dbus_message_get_path := nil; g_dbus_message_get_reply_serial := nil; g_dbus_message_get_sender := nil; g_dbus_message_get_serial := nil; g_dbus_message_get_signature := nil; g_dbus_message_get_type := nil; g_dbus_message_get_unix_fd_list := nil; g_dbus_message_lock := nil; g_dbus_message_new := nil; g_dbus_message_new_from_blob := nil; g_dbus_message_new_method_call := nil; g_dbus_message_new_method_error := nil; g_dbus_message_new_method_error_literal := nil; g_dbus_message_new_method_error_valist := nil; g_dbus_message_new_method_reply := nil; g_dbus_message_new_signal := nil; g_dbus_message_print := nil; g_dbus_message_set_body := nil; g_dbus_message_set_byte_order := nil; g_dbus_message_set_destination := nil; g_dbus_message_set_error_name := nil; g_dbus_message_set_flags := nil; g_dbus_message_set_header := nil; g_dbus_message_set_interface := nil; g_dbus_message_set_member := nil; g_dbus_message_set_message_type := nil; g_dbus_message_set_num_unix_fds := nil; g_dbus_message_set_path := nil; g_dbus_message_set_reply_serial := nil; g_dbus_message_set_sender := nil; g_dbus_message_set_serial := nil; g_dbus_message_set_signature := nil; g_dbus_message_set_unix_fd_list := nil; g_dbus_message_to_blob := nil; g_dbus_message_to_gerror := nil; g_dbus_method_info_get_type := nil; g_dbus_method_info_ref := nil; g_dbus_method_info_unref := nil; g_dbus_method_invocation_get_connection := nil; g_dbus_method_invocation_get_interface_name := nil; g_dbus_method_invocation_get_message := nil; g_dbus_method_invocation_get_method_info := nil; g_dbus_method_invocation_get_method_name := nil; g_dbus_method_invocation_get_object_path := nil; g_dbus_method_invocation_get_parameters := nil; g_dbus_method_invocation_get_sender := nil; g_dbus_method_invocation_get_type := nil; g_dbus_method_invocation_get_user_data := nil; g_dbus_method_invocation_return_dbus_error := nil; g_dbus_method_invocation_return_error := nil; g_dbus_method_invocation_return_error_literal := nil; g_dbus_method_invocation_return_error_valist := nil; g_dbus_method_invocation_return_gerror := nil; g_dbus_method_invocation_return_value := nil; g_dbus_method_invocation_return_value_with_unix_fd_list := nil; g_dbus_method_invocation_take_error := nil; g_dbus_node_info_generate_xml := nil; g_dbus_node_info_get_type := nil; g_dbus_node_info_lookup_interface := nil; g_dbus_node_info_new_for_xml := nil; g_dbus_node_info_ref := nil; g_dbus_node_info_unref := nil; g_dbus_object_get_interface := nil; g_dbus_object_get_interfaces := nil; g_dbus_object_get_object_path := nil; g_dbus_object_get_type := nil; g_dbus_object_manager_client_get_connection := nil; g_dbus_object_manager_client_get_flags := nil; g_dbus_object_manager_client_get_name := nil; g_dbus_object_manager_client_get_name_owner := nil; g_dbus_object_manager_client_get_type := nil; g_dbus_object_manager_client_new := nil; g_dbus_object_manager_client_new_finish := nil; g_dbus_object_manager_client_new_for_bus := nil; g_dbus_object_manager_client_new_for_bus_finish := nil; g_dbus_object_manager_client_new_for_bus_sync := nil; g_dbus_object_manager_client_new_sync := nil; g_dbus_object_manager_get_interface := nil; g_dbus_object_manager_get_object := nil; g_dbus_object_manager_get_object_path := nil; g_dbus_object_manager_get_objects := nil; g_dbus_object_manager_get_type := nil; g_dbus_object_manager_server_export := nil; g_dbus_object_manager_server_export_uniquely := nil; g_dbus_object_manager_server_get_connection := nil; g_dbus_object_manager_server_get_type := nil; g_dbus_object_manager_server_is_exported := nil; g_dbus_object_manager_server_new := nil; g_dbus_object_manager_server_set_connection := nil; g_dbus_object_manager_server_unexport := nil; g_dbus_object_proxy_get_connection := nil; g_dbus_object_proxy_get_type := nil; g_dbus_object_proxy_new := nil; g_dbus_object_skeleton_add_interface := nil; g_dbus_object_skeleton_flush := nil; g_dbus_object_skeleton_get_type := nil; g_dbus_object_skeleton_new := nil; g_dbus_object_skeleton_remove_interface := nil; g_dbus_object_skeleton_remove_interface_by_name := nil; g_dbus_object_skeleton_set_object_path := nil; g_dbus_property_info_get_type := nil; g_dbus_property_info_ref := nil; g_dbus_property_info_unref := nil; g_dbus_proxy_call := nil; g_dbus_proxy_call_finish := nil; g_dbus_proxy_call_sync := nil; g_dbus_proxy_call_with_unix_fd_list := nil; g_dbus_proxy_call_with_unix_fd_list_finish := nil; g_dbus_proxy_call_with_unix_fd_list_sync := nil; g_dbus_proxy_get_cached_property := nil; g_dbus_proxy_get_cached_property_names := nil; g_dbus_proxy_get_connection := nil; g_dbus_proxy_get_default_timeout := nil; g_dbus_proxy_get_flags := nil; g_dbus_proxy_get_interface_info := nil; g_dbus_proxy_get_interface_name := nil; g_dbus_proxy_get_name := nil; g_dbus_proxy_get_name_owner := nil; g_dbus_proxy_get_object_path := nil; g_dbus_proxy_get_type := nil; g_dbus_proxy_new := nil; g_dbus_proxy_new_finish := nil; g_dbus_proxy_new_for_bus := nil; g_dbus_proxy_new_for_bus_finish := nil; g_dbus_proxy_new_for_bus_sync := nil; g_dbus_proxy_new_sync := nil; g_dbus_proxy_set_cached_property := nil; g_dbus_proxy_set_default_timeout := nil; g_dbus_proxy_set_interface_info := nil; g_dbus_server_get_client_address := nil; g_dbus_server_get_flags := nil; g_dbus_server_get_guid := nil; g_dbus_server_get_type := nil; g_dbus_server_is_active := nil; g_dbus_server_new_sync := nil; g_dbus_server_start := nil; g_dbus_server_stop := nil; g_dbus_signal_info_get_type := nil; g_dbus_signal_info_ref := nil; g_dbus_signal_info_unref := nil; g_desktop_app_info_get_boolean := nil; g_desktop_app_info_get_categories := nil; g_desktop_app_info_get_filename := nil; g_desktop_app_info_get_generic_name := nil; g_desktop_app_info_get_is_hidden := nil; g_desktop_app_info_get_keywords := nil; g_desktop_app_info_get_nodisplay := nil; g_desktop_app_info_get_show_in := nil; g_desktop_app_info_get_startup_wm_class := nil; g_desktop_app_info_get_string := nil; g_desktop_app_info_get_type := nil; g_desktop_app_info_has_key := nil; g_desktop_app_info_launch_uris_as_manager := nil; g_desktop_app_info_lookup_get_type := nil; g_desktop_app_info_new := nil; g_desktop_app_info_new_from_filename := nil; g_desktop_app_info_new_from_keyfile := nil; g_desktop_app_info_set_desktop_env := nil; g_drive_can_eject := nil; g_drive_can_poll_for_media := nil; g_drive_can_start := nil; g_drive_can_start_degraded := nil; g_drive_can_stop := nil; g_drive_eject_with_operation := nil; g_drive_eject_with_operation_finish := nil; g_drive_enumerate_identifiers := nil; g_drive_get_icon := nil; g_drive_get_identifier := nil; g_drive_get_name := nil; g_drive_get_sort_key := nil; g_drive_get_start_stop_type := nil; g_drive_get_symbolic_icon := nil; g_drive_get_type := nil; g_drive_get_volumes := nil; g_drive_has_media := nil; g_drive_has_volumes := nil; g_drive_is_media_check_automatic := nil; g_drive_is_media_removable := nil; g_drive_poll_for_media := nil; g_drive_poll_for_media_finish := nil; g_drive_start := nil; g_drive_start_finish := nil; g_drive_stop := nil; g_drive_stop_finish := nil; g_emblem_get_icon := nil; g_emblem_get_origin := nil; g_emblem_get_type := nil; g_emblem_new := nil; g_emblem_new_with_origin := nil; g_emblemed_icon_add_emblem := nil; g_emblemed_icon_clear_emblems := nil; g_emblemed_icon_get_emblems := nil; g_emblemed_icon_get_icon := nil; g_emblemed_icon_get_type := nil; g_emblemed_icon_new := nil; g_file_append_to := nil; g_file_append_to_async := nil; g_file_append_to_finish := nil; g_file_attribute_info_list_add := nil; g_file_attribute_info_list_dup := nil; g_file_attribute_info_list_get_type := nil; g_file_attribute_info_list_lookup := nil; g_file_attribute_info_list_new := nil; g_file_attribute_info_list_ref := nil; g_file_attribute_info_list_unref := nil; g_file_attribute_matcher_enumerate_namespace := nil; g_file_attribute_matcher_enumerate_next := nil; g_file_attribute_matcher_get_type := nil; g_file_attribute_matcher_matches := nil; g_file_attribute_matcher_matches_only := nil; g_file_attribute_matcher_new := nil; g_file_attribute_matcher_ref := nil; g_file_attribute_matcher_subtract := nil; g_file_attribute_matcher_to_string := nil; g_file_attribute_matcher_unref := nil; g_file_copy := nil; g_file_copy_async := nil; g_file_copy_attributes := nil; g_file_copy_finish := nil; g_file_create := nil; g_file_create_async := nil; g_file_create_finish := nil; g_file_create_readwrite := nil; g_file_create_readwrite_async := nil; g_file_create_readwrite_finish := nil; g_file_delete := nil; g_file_delete_async := nil; g_file_delete_finish := nil; g_file_descriptor_based_get_fd := nil; g_file_descriptor_based_get_type := nil; g_file_dup := nil; g_file_eject_mountable_with_operation := nil; g_file_eject_mountable_with_operation_finish := nil; g_file_enumerate_children := nil; g_file_enumerate_children_async := nil; g_file_enumerate_children_finish := nil; g_file_enumerator_close := nil; g_file_enumerator_close_async := nil; g_file_enumerator_close_finish := nil; g_file_enumerator_get_child := nil; g_file_enumerator_get_container := nil; g_file_enumerator_get_type := nil; g_file_enumerator_has_pending := nil; g_file_enumerator_is_closed := nil; g_file_enumerator_next_file := nil; g_file_enumerator_next_files_async := nil; g_file_enumerator_next_files_finish := nil; g_file_enumerator_set_pending := nil; g_file_equal := nil; g_file_find_enclosing_mount := nil; g_file_find_enclosing_mount_async := nil; g_file_find_enclosing_mount_finish := nil; g_file_get_basename := nil; g_file_get_child := nil; g_file_get_child_for_display_name := nil; g_file_get_parent := nil; g_file_get_parse_name := nil; g_file_get_path := nil; g_file_get_relative_path := nil; g_file_get_type := nil; g_file_get_uri := nil; g_file_get_uri_scheme := nil; g_file_has_parent := nil; g_file_has_prefix := nil; g_file_has_uri_scheme := nil; g_file_hash := nil; g_file_icon_get_file := nil; g_file_icon_get_type := nil; g_file_icon_new := nil; g_file_info_clear_status := nil; g_file_info_copy_into := nil; g_file_info_dup := nil; g_file_info_get_attribute_as_string := nil; g_file_info_get_attribute_boolean := nil; g_file_info_get_attribute_byte_string := nil; g_file_info_get_attribute_data := nil; g_file_info_get_attribute_int32 := nil; g_file_info_get_attribute_int64 := nil; g_file_info_get_attribute_object := nil; g_file_info_get_attribute_status := nil; g_file_info_get_attribute_string := nil; g_file_info_get_attribute_stringv := nil; g_file_info_get_attribute_type := nil; g_file_info_get_attribute_uint32 := nil; g_file_info_get_attribute_uint64 := nil; g_file_info_get_content_type := nil; g_file_info_get_deletion_date := nil; g_file_info_get_display_name := nil; g_file_info_get_edit_name := nil; g_file_info_get_etag := nil; g_file_info_get_file_type := nil; g_file_info_get_icon := nil; g_file_info_get_is_backup := nil; g_file_info_get_is_hidden := nil; g_file_info_get_is_symlink := nil; g_file_info_get_modification_time := nil; g_file_info_get_name := nil; g_file_info_get_size := nil; g_file_info_get_sort_order := nil; g_file_info_get_symbolic_icon := nil; g_file_info_get_symlink_target := nil; g_file_info_get_type := nil; g_file_info_has_attribute := nil; g_file_info_has_namespace := nil; g_file_info_list_attributes := nil; g_file_info_new := nil; g_file_info_remove_attribute := nil; g_file_info_set_attribute := nil; g_file_info_set_attribute_boolean := nil; g_file_info_set_attribute_byte_string := nil; g_file_info_set_attribute_int32 := nil; g_file_info_set_attribute_int64 := nil; g_file_info_set_attribute_mask := nil; g_file_info_set_attribute_object := nil; g_file_info_set_attribute_status := nil; g_file_info_set_attribute_string := nil; g_file_info_set_attribute_stringv := nil; g_file_info_set_attribute_uint32 := nil; g_file_info_set_attribute_uint64 := nil; g_file_info_set_content_type := nil; g_file_info_set_display_name := nil; g_file_info_set_edit_name := nil; g_file_info_set_file_type := nil; g_file_info_set_icon := nil; g_file_info_set_is_hidden := nil; g_file_info_set_is_symlink := nil; g_file_info_set_modification_time := nil; g_file_info_set_name := nil; g_file_info_set_size := nil; g_file_info_set_sort_order := nil; g_file_info_set_symbolic_icon := nil; g_file_info_set_symlink_target := nil; g_file_info_unset_attribute_mask := nil; g_file_input_stream_get_type := nil; g_file_input_stream_query_info := nil; g_file_input_stream_query_info_async := nil; g_file_input_stream_query_info_finish := nil; g_file_io_stream_get_etag := nil; g_file_io_stream_get_type := nil; g_file_io_stream_query_info := nil; g_file_io_stream_query_info_async := nil; g_file_io_stream_query_info_finish := nil; g_file_is_native := nil; g_file_load_contents := nil; g_file_load_contents_async := nil; g_file_load_contents_finish := nil; g_file_load_partial_contents_async := nil; g_file_load_partial_contents_finish := nil; g_file_make_directory := nil; g_file_make_directory_with_parents := nil; g_file_make_symbolic_link := nil; g_file_monitor := nil; g_file_monitor_cancel := nil; g_file_monitor_directory := nil; g_file_monitor_emit_event := nil; g_file_monitor_file := nil; g_file_monitor_get_type := nil; g_file_monitor_is_cancelled := nil; g_file_monitor_set_rate_limit := nil; g_file_mount_enclosing_volume := nil; g_file_mount_enclosing_volume_finish := nil; g_file_mount_mountable := nil; g_file_mount_mountable_finish := nil; g_file_move := nil; g_file_new_for_commandline_arg := nil; g_file_new_for_commandline_arg_and_cwd := nil; g_file_new_for_path := nil; g_file_new_for_uri := nil; g_file_new_tmp := nil; g_file_open_readwrite := nil; g_file_open_readwrite_async := nil; g_file_open_readwrite_finish := nil; g_file_output_stream_get_etag := nil; g_file_output_stream_get_type := nil; g_file_output_stream_query_info := nil; g_file_output_stream_query_info_async := nil; g_file_output_stream_query_info_finish := nil; g_file_parse_name := nil; g_file_poll_mountable := nil; g_file_poll_mountable_finish := nil; g_file_query_default_handler := nil; g_file_query_exists := nil; g_file_query_file_type := nil; g_file_query_filesystem_info := nil; g_file_query_filesystem_info_async := nil; g_file_query_filesystem_info_finish := nil; g_file_query_info := nil; g_file_query_info_async := nil; g_file_query_info_finish := nil; g_file_query_settable_attributes := nil; g_file_query_writable_namespaces := nil; g_file_read := nil; g_file_read_async := nil; g_file_read_finish := nil; g_file_replace := nil; g_file_replace_async := nil; g_file_replace_contents := nil; g_file_replace_contents_async := nil; g_file_replace_contents_finish := nil; g_file_replace_finish := nil; g_file_replace_readwrite := nil; g_file_replace_readwrite_async := nil; g_file_replace_readwrite_finish := nil; g_file_resolve_relative_path := nil; g_file_set_attribute := nil; g_file_set_attribute_byte_string := nil; g_file_set_attribute_int32 := nil; g_file_set_attribute_int64 := nil; g_file_set_attribute_string := nil; g_file_set_attribute_uint32 := nil; g_file_set_attribute_uint64 := nil; g_file_set_attributes_async := nil; g_file_set_attributes_finish := nil; g_file_set_attributes_from_info := nil; g_file_set_display_name := nil; g_file_set_display_name_async := nil; g_file_set_display_name_finish := nil; g_file_start_mountable := nil; g_file_start_mountable_finish := nil; g_file_stop_mountable := nil; g_file_stop_mountable_finish := nil; g_file_supports_thread_contexts := nil; g_file_trash := nil; g_file_unmount_mountable_with_operation := nil; g_file_unmount_mountable_with_operation_finish := nil; g_filename_completer_get_completion_suffix := nil; g_filename_completer_get_completions := nil; g_filename_completer_get_type := nil; g_filename_completer_new := nil; g_filename_completer_set_dirs_only := nil; g_filter_input_stream_get_base_stream := nil; g_filter_input_stream_get_close_base_stream := nil; g_filter_input_stream_get_type := nil; g_filter_input_stream_set_close_base_stream := nil; g_filter_output_stream_get_base_stream := nil; g_filter_output_stream_get_close_base_stream := nil; g_filter_output_stream_get_type := nil; g_filter_output_stream_set_close_base_stream := nil; g_icon_equal := nil; g_icon_get_type := nil; g_icon_hash := nil; g_icon_new_for_string := nil; g_icon_to_string := nil; g_inet_address_equal := nil; g_inet_address_get_family := nil; g_inet_address_get_is_any := nil; g_inet_address_get_is_link_local := nil; g_inet_address_get_is_loopback := nil; g_inet_address_get_is_mc_global := nil; g_inet_address_get_is_mc_link_local := nil; g_inet_address_get_is_mc_node_local := nil; g_inet_address_get_is_mc_org_local := nil; g_inet_address_get_is_mc_site_local := nil; g_inet_address_get_is_multicast := nil; g_inet_address_get_is_site_local := nil; g_inet_address_get_native_size := nil; g_inet_address_get_type := nil; g_inet_address_mask_equal := nil; g_inet_address_mask_get_address := nil; g_inet_address_mask_get_family := nil; g_inet_address_mask_get_length := nil; g_inet_address_mask_get_type := nil; g_inet_address_mask_matches := nil; g_inet_address_mask_new := nil; g_inet_address_mask_new_from_string := nil; g_inet_address_mask_to_string := nil; g_inet_address_new_any := nil; g_inet_address_new_from_bytes := nil; g_inet_address_new_from_string := nil; g_inet_address_new_loopback := nil; g_inet_address_to_bytes := nil; g_inet_address_to_string := nil; g_inet_socket_address_get_address := nil; g_inet_socket_address_get_flowinfo := nil; g_inet_socket_address_get_port := nil; g_inet_socket_address_get_scope_id := nil; g_inet_socket_address_get_type := nil; g_inet_socket_address_new := nil; g_initable_get_type := nil; g_initable_init := nil; g_initable_new := nil; g_initable_new_valist := nil; g_initable_newv := nil; g_input_stream_clear_pending := nil; g_input_stream_close := nil; g_input_stream_close_async := nil; g_input_stream_close_finish := nil; g_input_stream_get_type := nil; g_input_stream_has_pending := nil; g_input_stream_is_closed := nil; g_input_stream_read := nil; g_input_stream_read_all := nil; g_input_stream_read_async := nil; g_input_stream_read_bytes := nil; g_input_stream_read_bytes_async := nil; g_input_stream_read_bytes_finish := nil; g_input_stream_read_finish := nil; g_input_stream_set_pending := nil; g_input_stream_skip := nil; g_input_stream_skip_async := nil; g_input_stream_skip_finish := nil; g_io_error_from_errno := nil; g_io_error_quark := nil; g_io_extension_get_name := nil; g_io_extension_get_priority := nil; g_io_extension_get_type := nil; g_io_extension_point_get_extension_by_name := nil; g_io_extension_point_get_extensions := nil; g_io_extension_point_get_required_type := nil; g_io_extension_point_implement := nil; g_io_extension_point_lookup := nil; g_io_extension_point_register := nil; g_io_extension_point_set_required_type := nil; g_io_extension_ref_class := nil; g_io_module_get_type := nil; g_io_module_new := nil; g_io_module_scope_block := nil; g_io_module_scope_free := nil; g_io_module_scope_new := nil; g_io_modules_load_all_in_directory := nil; g_io_modules_load_all_in_directory_with_scope := nil; g_io_modules_scan_all_in_directory := nil; g_io_modules_scan_all_in_directory_with_scope := nil; g_io_scheduler_cancel_all_jobs := nil; g_io_scheduler_push_job := nil; g_io_stream_clear_pending := nil; g_io_stream_close := nil; g_io_stream_close_async := nil; g_io_stream_close_finish := nil; g_io_stream_get_input_stream := nil; g_io_stream_get_output_stream := nil; g_io_stream_get_type := nil; g_io_stream_has_pending := nil; g_io_stream_is_closed := nil; g_io_stream_set_pending := nil; g_io_stream_splice_async := nil; g_io_stream_splice_finish := nil; g_loadable_icon_get_type := nil; g_loadable_icon_load := nil; g_loadable_icon_load_async := nil; g_loadable_icon_load_finish := nil; g_memory_input_stream_add_bytes := nil; g_memory_input_stream_add_data := nil; g_memory_input_stream_get_type := nil; g_memory_input_stream_new := nil; g_memory_input_stream_new_from_bytes := nil; g_memory_input_stream_new_from_data := nil; g_memory_output_stream_get_data := nil; g_memory_output_stream_get_data_size := nil; g_memory_output_stream_get_size := nil; g_memory_output_stream_get_type := nil; g_memory_output_stream_new := nil; g_memory_output_stream_new_resizable := nil; g_memory_output_stream_steal_as_bytes := nil; g_memory_output_stream_steal_data := nil; g_menu_append := nil; g_menu_append_item := nil; g_menu_append_section := nil; g_menu_append_submenu := nil; g_menu_attribute_iter_get_name := nil; g_menu_attribute_iter_get_next := nil; g_menu_attribute_iter_get_type := nil; g_menu_attribute_iter_get_value := nil; g_menu_attribute_iter_next := nil; g_menu_freeze := nil; g_menu_get_type := nil; g_menu_insert := nil; g_menu_insert_item := nil; g_menu_insert_section := nil; g_menu_insert_submenu := nil; g_menu_item_get_attribute := nil; g_menu_item_get_attribute_value := nil; g_menu_item_get_link := nil; g_menu_item_get_type := nil; g_menu_item_new := nil; g_menu_item_new_from_model := nil; g_menu_item_new_section := nil; g_menu_item_new_submenu := nil; g_menu_item_set_action_and_target := nil; g_menu_item_set_action_and_target_value := nil; g_menu_item_set_attribute := nil; g_menu_item_set_attribute_value := nil; g_menu_item_set_detailed_action := nil; g_menu_item_set_label := nil; g_menu_item_set_link := nil; g_menu_item_set_section := nil; g_menu_item_set_submenu := nil; g_menu_link_iter_get_name := nil; g_menu_link_iter_get_next := nil; g_menu_link_iter_get_type := nil; g_menu_link_iter_get_value := nil; g_menu_link_iter_next := nil; g_menu_model_get_item_attribute := nil; g_menu_model_get_item_attribute_value := nil; g_menu_model_get_item_link := nil; g_menu_model_get_n_items := nil; g_menu_model_get_type := nil; g_menu_model_is_mutable := nil; g_menu_model_items_changed := nil; g_menu_model_iterate_item_attributes := nil; g_menu_model_iterate_item_links := nil; g_menu_new := nil; g_menu_prepend := nil; g_menu_prepend_item := nil; g_menu_prepend_section := nil; g_menu_prepend_submenu := nil; g_menu_remove := nil; g_mount_can_eject := nil; g_mount_can_unmount := nil; g_mount_eject_with_operation := nil; g_mount_eject_with_operation_finish := nil; g_mount_get_default_location := nil; g_mount_get_drive := nil; g_mount_get_icon := nil; g_mount_get_name := nil; g_mount_get_root := nil; g_mount_get_sort_key := nil; g_mount_get_symbolic_icon := nil; g_mount_get_type := nil; g_mount_get_uuid := nil; g_mount_get_volume := nil; g_mount_guess_content_type := nil; g_mount_guess_content_type_finish := nil; g_mount_guess_content_type_sync := nil; g_mount_is_shadowed := nil; g_mount_operation_get_anonymous := nil; g_mount_operation_get_choice := nil; g_mount_operation_get_domain := nil; g_mount_operation_get_password := nil; g_mount_operation_get_password_save := nil; g_mount_operation_get_type := nil; g_mount_operation_get_username := nil; g_mount_operation_new := nil; g_mount_operation_reply := nil; g_mount_operation_set_anonymous := nil; g_mount_operation_set_choice := nil; g_mount_operation_set_domain := nil; g_mount_operation_set_password := nil; g_mount_operation_set_password_save := nil; g_mount_operation_set_username := nil; g_mount_remount := nil; g_mount_remount_finish := nil; g_mount_shadow := nil; g_mount_unmount_with_operation := nil; g_mount_unmount_with_operation_finish := nil; g_mount_unshadow := nil; g_native_volume_monitor_get_type := nil; g_network_address_get_hostname := nil; g_network_address_get_port := nil; g_network_address_get_scheme := nil; g_network_address_get_type := nil; g_network_address_new := nil; g_network_address_parse := nil; g_network_address_parse_uri := nil; g_network_monitor_can_reach := nil; g_network_monitor_can_reach_async := nil; g_network_monitor_can_reach_finish := nil; g_network_monitor_get_default := nil; g_network_monitor_get_network_available := nil; g_network_monitor_get_type := nil; g_network_service_get_domain := nil; g_network_service_get_protocol := nil; g_network_service_get_scheme := nil; g_network_service_get_service := nil; g_network_service_get_type := nil; g_network_service_new := nil; g_network_service_set_scheme := nil; g_networking_init := nil; g_output_stream_clear_pending := nil; g_output_stream_close := nil; g_output_stream_close_async := nil; g_output_stream_close_finish := nil; g_output_stream_flush := nil; g_output_stream_flush_async := nil; g_output_stream_flush_finish := nil; g_output_stream_get_type := nil; g_output_stream_has_pending := nil; g_output_stream_is_closed := nil; g_output_stream_is_closing := nil; g_output_stream_set_pending := nil; g_output_stream_splice := nil; g_output_stream_splice_async := nil; g_output_stream_splice_finish := nil; g_output_stream_write := nil; g_output_stream_write_all := nil; g_output_stream_write_async := nil; g_output_stream_write_bytes := nil; g_output_stream_write_bytes_async := nil; g_output_stream_write_bytes_finish := nil; g_output_stream_write_finish := nil; g_permission_acquire := nil; g_permission_acquire_async := nil; g_permission_acquire_finish := nil; g_permission_get_allowed := nil; g_permission_get_can_acquire := nil; g_permission_get_can_release := nil; g_permission_get_type := nil; g_permission_impl_update := nil; g_permission_release := nil; g_permission_release_async := nil; g_permission_release_finish := nil; g_pollable_input_stream_can_poll := nil; g_pollable_input_stream_create_source := nil; g_pollable_input_stream_get_type := nil; g_pollable_input_stream_is_readable := nil; g_pollable_input_stream_read_nonblocking := nil; g_pollable_output_stream_can_poll := nil; g_pollable_output_stream_create_source := nil; g_pollable_output_stream_get_type := nil; g_pollable_output_stream_is_writable := nil; g_pollable_output_stream_write_nonblocking := nil; g_pollable_source_new := nil; g_pollable_source_new_full := nil; g_pollable_stream_read := nil; g_pollable_stream_write := nil; g_pollable_stream_write_all := nil; g_proxy_address_enumerator_get_type := nil; g_proxy_address_get_destination_hostname := nil; g_proxy_address_get_destination_port := nil; g_proxy_address_get_destination_protocol := nil; g_proxy_address_get_password := nil; g_proxy_address_get_protocol := nil; g_proxy_address_get_type := nil; g_proxy_address_get_uri := nil; g_proxy_address_get_username := nil; g_proxy_address_new := nil; g_proxy_connect := nil; g_proxy_connect_async := nil; g_proxy_connect_finish := nil; g_proxy_get_default_for_protocol := nil; g_proxy_get_type := nil; g_proxy_resolver_get_default := nil; g_proxy_resolver_get_type := nil; g_proxy_resolver_is_supported := nil; g_proxy_resolver_lookup := nil; g_proxy_resolver_lookup_async := nil; g_proxy_resolver_lookup_finish := nil; g_proxy_supports_hostname := nil; g_remote_action_group_activate_action_full := nil; g_remote_action_group_change_action_state_full := nil; g_remote_action_group_get_type := nil; g_resolver_error_quark := nil; g_resolver_free_addresses := nil; g_resolver_free_targets := nil; g_resolver_get_default := nil; g_resolver_get_type := nil; g_resolver_lookup_by_address := nil; g_resolver_lookup_by_address_async := nil; g_resolver_lookup_by_address_finish := nil; g_resolver_lookup_by_name := nil; g_resolver_lookup_by_name_async := nil; g_resolver_lookup_by_name_finish := nil; g_resolver_lookup_records := nil; g_resolver_lookup_records_async := nil; g_resolver_lookup_records_finish := nil; g_resolver_lookup_service := nil; g_resolver_lookup_service_async := nil; g_resolver_lookup_service_finish := nil; g_resolver_set_default := nil; g_resource_enumerate_children := nil; g_resource_error_quark := nil; g_resource_get_info := nil; g_resource_get_type := nil; g_resource_load := nil; g_resource_lookup_data := nil; g_resource_new_from_data := nil; g_resource_open_stream := nil; g_resource_ref := nil; g_resource_unref := nil; g_resources_enumerate_children := nil; g_resources_get_info := nil; g_resources_lookup_data := nil; g_resources_open_stream := nil; g_resources_register := nil; g_resources_unregister := nil; g_seekable_can_seek := nil; g_seekable_can_truncate := nil; g_seekable_get_type := nil; g_seekable_seek := nil; g_seekable_tell := nil; g_seekable_truncate := nil; g_settings_apply := nil; g_settings_bind := nil; g_settings_bind_with_mapping := nil; g_settings_bind_writable := nil; g_settings_create_action := nil; g_settings_delay := nil; g_settings_get := nil; g_settings_get_boolean := nil; g_settings_get_child := nil; g_settings_get_double := nil; g_settings_get_enum := nil; g_settings_get_flags := nil; g_settings_get_has_unapplied := nil; g_settings_get_int := nil; g_settings_get_mapped := nil; g_settings_get_range := nil; g_settings_get_string := nil; g_settings_get_strv := nil; g_settings_get_type := nil; g_settings_get_uint := nil; g_settings_get_value := nil; g_settings_is_writable := nil; g_settings_list_children := nil; g_settings_list_keys := nil; g_settings_list_relocatable_schemas := nil; g_settings_list_schemas := nil; g_settings_new := nil; g_settings_new_full := nil; g_settings_new_with_backend := nil; g_settings_new_with_backend_and_path := nil; g_settings_new_with_path := nil; g_settings_range_check := nil; g_settings_reset := nil; g_settings_revert := nil; g_settings_schema_get_id := nil; g_settings_schema_get_path := nil; g_settings_schema_get_type := nil; g_settings_schema_ref := nil; g_settings_schema_source_get_default := nil; g_settings_schema_source_get_type := nil; g_settings_schema_source_lookup := nil; g_settings_schema_source_new_from_directory := nil; g_settings_schema_source_ref := nil; g_settings_schema_source_unref := nil; g_settings_schema_unref := nil; g_settings_set := nil; g_settings_set_boolean := nil; g_settings_set_double := nil; g_settings_set_enum := nil; g_settings_set_flags := nil; g_settings_set_int := nil; g_settings_set_string := nil; g_settings_set_strv := nil; g_settings_set_uint := nil; g_settings_set_value := nil; g_settings_sync := nil; g_settings_unbind := nil; g_simple_action_get_type := nil; g_simple_action_group_add_entries := nil; g_simple_action_group_get_type := nil; g_simple_action_group_insert := nil; g_simple_action_group_lookup := nil; g_simple_action_group_new := nil; g_simple_action_group_remove := nil; g_simple_action_new := nil; g_simple_action_new_stateful := nil; g_simple_action_set_enabled := nil; g_simple_action_set_state := nil; g_simple_async_report_error_in_idle := nil; g_simple_async_report_gerror_in_idle := nil; g_simple_async_report_take_gerror_in_idle := nil; g_simple_async_result_complete := nil; g_simple_async_result_complete_in_idle := nil; g_simple_async_result_get_op_res_gboolean := nil; g_simple_async_result_get_op_res_gpointer := nil; g_simple_async_result_get_op_res_gssize := nil; g_simple_async_result_get_source_tag := nil; g_simple_async_result_get_type := nil; g_simple_async_result_is_valid := nil; g_simple_async_result_new := nil; g_simple_async_result_new_error := nil; g_simple_async_result_new_from_error := nil; g_simple_async_result_new_take_error := nil; g_simple_async_result_propagate_error := nil; g_simple_async_result_run_in_thread := nil; g_simple_async_result_set_check_cancellable := nil; g_simple_async_result_set_error := nil; g_simple_async_result_set_error_va := nil; g_simple_async_result_set_from_error := nil; g_simple_async_result_set_handle_cancellation := nil; g_simple_async_result_set_op_res_gboolean := nil; g_simple_async_result_set_op_res_gpointer := nil; g_simple_async_result_set_op_res_gssize := nil; g_simple_async_result_take_error := nil; g_simple_permission_get_type := nil; g_simple_permission_new := nil; g_simple_proxy_resolver_get_type := nil; g_simple_proxy_resolver_new := nil; g_simple_proxy_resolver_set_default_proxy := nil; g_simple_proxy_resolver_set_ignore_hosts := nil; g_simple_proxy_resolver_set_uri_proxy := nil; g_socket_accept := nil; g_socket_address_enumerator_get_type := nil; g_socket_address_enumerator_next := nil; g_socket_address_enumerator_next_async := nil; g_socket_address_enumerator_next_finish := nil; g_socket_address_get_family := nil; g_socket_address_get_native_size := nil; g_socket_address_get_type := nil; g_socket_address_new_from_native := nil; g_socket_address_to_native := nil; g_socket_bind := nil; g_socket_check_connect_result := nil; g_socket_client_add_application_proxy := nil; g_socket_client_connect := nil; g_socket_client_connect_async := nil; g_socket_client_connect_finish := nil; g_socket_client_connect_to_host := nil; g_socket_client_connect_to_host_async := nil; g_socket_client_connect_to_host_finish := nil; g_socket_client_connect_to_service := nil; g_socket_client_connect_to_service_async := nil; g_socket_client_connect_to_service_finish := nil; g_socket_client_connect_to_uri := nil; g_socket_client_connect_to_uri_async := nil; g_socket_client_connect_to_uri_finish := nil; g_socket_client_get_enable_proxy := nil; g_socket_client_get_family := nil; g_socket_client_get_local_address := nil; g_socket_client_get_protocol := nil; g_socket_client_get_proxy_resolver := nil; g_socket_client_get_socket_type := nil; g_socket_client_get_timeout := nil; g_socket_client_get_tls := nil; g_socket_client_get_tls_validation_flags := nil; g_socket_client_get_type := nil; g_socket_client_new := nil; g_socket_client_set_enable_proxy := nil; g_socket_client_set_family := nil; g_socket_client_set_local_address := nil; g_socket_client_set_protocol := nil; g_socket_client_set_proxy_resolver := nil; g_socket_client_set_socket_type := nil; g_socket_client_set_timeout := nil; g_socket_client_set_tls := nil; g_socket_client_set_tls_validation_flags := nil; g_socket_close := nil; g_socket_condition_check := nil; g_socket_condition_timed_wait := nil; g_socket_condition_wait := nil; g_socket_connect := nil; g_socket_connectable_enumerate := nil; g_socket_connectable_get_type := nil; g_socket_connectable_proxy_enumerate := nil; g_socket_connection_connect := nil; g_socket_connection_connect_async := nil; g_socket_connection_connect_finish := nil; g_socket_connection_factory_create_connection := nil; g_socket_connection_factory_lookup_type := nil; g_socket_connection_factory_register_type := nil; g_socket_connection_get_local_address := nil; g_socket_connection_get_remote_address := nil; g_socket_connection_get_socket := nil; g_socket_connection_get_type := nil; g_socket_connection_is_connected := nil; g_socket_control_message_deserialize := nil; g_socket_control_message_get_level := nil; g_socket_control_message_get_msg_type := nil; g_socket_control_message_get_size := nil; g_socket_control_message_get_type := nil; g_socket_control_message_serialize := nil; g_socket_create_source := nil; g_socket_get_available_bytes := nil; g_socket_get_blocking := nil; g_socket_get_broadcast := nil; g_socket_get_credentials := nil; g_socket_get_family := nil; g_socket_get_fd := nil; g_socket_get_keepalive := nil; g_socket_get_listen_backlog := nil; g_socket_get_local_address := nil; g_socket_get_multicast_loopback := nil; g_socket_get_multicast_ttl := nil; g_socket_get_option := nil; g_socket_get_protocol := nil; g_socket_get_remote_address := nil; g_socket_get_socket_type := nil; g_socket_get_timeout := nil; g_socket_get_ttl := nil; g_socket_get_type := nil; g_socket_is_closed := nil; g_socket_is_connected := nil; g_socket_join_multicast_group := nil; g_socket_leave_multicast_group := nil; g_socket_listen := nil; g_socket_listener_accept := nil; g_socket_listener_accept_async := nil; g_socket_listener_accept_finish := nil; g_socket_listener_accept_socket := nil; g_socket_listener_accept_socket_async := nil; g_socket_listener_accept_socket_finish := nil; g_socket_listener_add_address := nil; g_socket_listener_add_any_inet_port := nil; g_socket_listener_add_inet_port := nil; g_socket_listener_add_socket := nil; g_socket_listener_close := nil; g_socket_listener_get_type := nil; g_socket_listener_new := nil; g_socket_listener_set_backlog := nil; g_socket_new := nil; g_socket_new_from_fd := nil; g_socket_receive := nil; g_socket_receive_from := nil; g_socket_receive_message := nil; g_socket_receive_with_blocking := nil; g_socket_send := nil; g_socket_send_message := nil; g_socket_send_to := nil; g_socket_send_with_blocking := nil; g_socket_service_get_type := nil; g_socket_service_is_active := nil; g_socket_service_new := nil; g_socket_service_start := nil; g_socket_service_stop := nil; g_socket_set_blocking := nil; g_socket_set_broadcast := nil; g_socket_set_keepalive := nil; g_socket_set_listen_backlog := nil; g_socket_set_multicast_loopback := nil; g_socket_set_multicast_ttl := nil; g_socket_set_option := nil; g_socket_set_timeout := nil; g_socket_set_ttl := nil; g_socket_shutdown := nil; g_socket_speaks_ipv4 := nil; g_srv_target_copy := nil; g_srv_target_free := nil; g_srv_target_get_hostname := nil; g_srv_target_get_port := nil; g_srv_target_get_priority := nil; g_srv_target_get_type := nil; g_srv_target_get_weight := nil; g_srv_target_list_sort := nil; g_srv_target_new := nil; g_static_resource_fini := nil; g_static_resource_get_resource := nil; g_static_resource_init := nil; g_task_attach_source := nil; g_task_get_cancellable := nil; g_task_get_check_cancellable := nil; g_task_get_context := nil; g_task_get_priority := nil; g_task_get_return_on_cancel := nil; g_task_get_source_object := nil; g_task_get_source_tag := nil; g_task_get_task_data := nil; g_task_get_type := nil; g_task_had_error := nil; g_task_is_valid := nil; g_task_new := nil; g_task_propagate_boolean := nil; g_task_propagate_int := nil; g_task_propagate_pointer := nil; g_task_report_error := nil; g_task_report_new_error := nil; g_task_return_boolean := nil; g_task_return_error := nil; g_task_return_error_if_cancelled := nil; g_task_return_int := nil; g_task_return_new_error := nil; g_task_return_pointer := nil; g_task_run_in_thread := nil; g_task_run_in_thread_sync := nil; g_task_set_check_cancellable := nil; g_task_set_priority := nil; g_task_set_return_on_cancel := nil; g_task_set_source_tag := nil; g_task_set_task_data := nil; g_tcp_connection_get_graceful_disconnect := nil; g_tcp_connection_get_type := nil; g_tcp_connection_set_graceful_disconnect := nil; g_tcp_wrapper_connection_get_base_io_stream := nil; g_tcp_wrapper_connection_get_type := nil; g_tcp_wrapper_connection_new := nil; g_test_dbus_add_service_dir := nil; g_test_dbus_down := nil; g_test_dbus_get_bus_address := nil; g_test_dbus_get_flags := nil; g_test_dbus_get_type := nil; g_test_dbus_new := nil; g_test_dbus_stop := nil; g_test_dbus_unset := nil; g_test_dbus_up := nil; g_themed_icon_append_name := nil; g_themed_icon_get_names := nil; g_themed_icon_get_type := nil; g_themed_icon_new := nil; g_themed_icon_new_from_names := nil; g_themed_icon_new_with_default_fallbacks := nil; g_themed_icon_prepend_name := nil; g_threaded_socket_service_get_type := nil; g_threaded_socket_service_new := nil; g_tls_backend_get_certificate_type := nil; g_tls_backend_get_client_connection_type := nil; g_tls_backend_get_default := nil; g_tls_backend_get_default_database := nil; g_tls_backend_get_file_database_type := nil; g_tls_backend_get_server_connection_type := nil; g_tls_backend_get_type := nil; g_tls_backend_supports_tls := nil; g_tls_certificate_get_issuer := nil; g_tls_certificate_get_type := nil; g_tls_certificate_is_same := nil; g_tls_certificate_list_new_from_file := nil; g_tls_certificate_new_from_file := nil; g_tls_certificate_new_from_files := nil; g_tls_certificate_new_from_pem := nil; g_tls_certificate_verify := nil; g_tls_client_connection_get_accepted_cas := nil; g_tls_client_connection_get_server_identity := nil; g_tls_client_connection_get_type := nil; g_tls_client_connection_get_use_ssl3 := nil; g_tls_client_connection_get_validation_flags := nil; g_tls_client_connection_new := nil; g_tls_client_connection_set_server_identity := nil; g_tls_client_connection_set_use_ssl3 := nil; g_tls_client_connection_set_validation_flags := nil; g_tls_connection_emit_accept_certificate := nil; g_tls_connection_get_certificate := nil; g_tls_connection_get_database := nil; g_tls_connection_get_interaction := nil; g_tls_connection_get_peer_certificate := nil; g_tls_connection_get_peer_certificate_errors := nil; g_tls_connection_get_rehandshake_mode := nil; g_tls_connection_get_require_close_notify := nil; g_tls_connection_get_type := nil; g_tls_connection_handshake := nil; g_tls_connection_handshake_async := nil; g_tls_connection_handshake_finish := nil; g_tls_connection_set_certificate := nil; g_tls_connection_set_database := nil; g_tls_connection_set_interaction := nil; g_tls_connection_set_rehandshake_mode := nil; g_tls_connection_set_require_close_notify := nil; g_tls_database_create_certificate_handle := nil; g_tls_database_get_type := nil; g_tls_database_lookup_certificate_for_handle := nil; g_tls_database_lookup_certificate_for_handle_async := nil; g_tls_database_lookup_certificate_for_handle_finish := nil; g_tls_database_lookup_certificate_issuer := nil; g_tls_database_lookup_certificate_issuer_async := nil; g_tls_database_lookup_certificate_issuer_finish := nil; g_tls_database_lookup_certificates_issued_by := nil; g_tls_database_lookup_certificates_issued_by_async := nil; g_tls_database_lookup_certificates_issued_by_finish := nil; g_tls_database_verify_chain := nil; g_tls_database_verify_chain_async := nil; g_tls_database_verify_chain_finish := nil; g_tls_error_quark := nil; g_tls_file_database_get_type := nil; g_tls_file_database_new := nil; g_tls_interaction_ask_password := nil; g_tls_interaction_ask_password_async := nil; g_tls_interaction_ask_password_finish := nil; g_tls_interaction_get_type := nil; g_tls_interaction_invoke_ask_password := nil; g_tls_password_get_description := nil; g_tls_password_get_flags := nil; g_tls_password_get_type := nil; g_tls_password_get_value := nil; g_tls_password_get_warning := nil; g_tls_password_new := nil; g_tls_password_set_description := nil; g_tls_password_set_flags := nil; g_tls_password_set_value := nil; g_tls_password_set_value_full := nil; g_tls_password_set_warning := nil; g_tls_server_connection_get_type := nil; g_tls_server_connection_new := nil; g_unix_connection_get_type := nil; g_unix_connection_receive_credentials := nil; g_unix_connection_receive_credentials_async := nil; g_unix_connection_receive_credentials_finish := nil; g_unix_connection_receive_fd := nil; g_unix_connection_send_credentials := nil; g_unix_connection_send_credentials_async := nil; g_unix_connection_send_credentials_finish := nil; g_unix_connection_send_fd := nil; g_unix_credentials_message_get_credentials := nil; g_unix_credentials_message_get_type := nil; g_unix_credentials_message_is_supported := nil; g_unix_credentials_message_new := nil; g_unix_credentials_message_new_with_credentials := nil; g_unix_fd_list_append := nil; g_unix_fd_list_get := nil; g_unix_fd_list_get_length := nil; g_unix_fd_list_get_type := nil; g_unix_fd_list_new := nil; g_unix_fd_list_new_from_array := nil; g_unix_fd_list_peek_fds := nil; g_unix_fd_list_steal_fds := nil; g_unix_fd_message_append_fd := nil; g_unix_fd_message_get_fd_list := nil; g_unix_fd_message_get_type := nil; g_unix_fd_message_new := nil; g_unix_fd_message_new_with_fd_list := nil; g_unix_fd_message_steal_fds := nil; g_unix_input_stream_get_close_fd := nil; g_unix_input_stream_get_fd := nil; g_unix_input_stream_get_type := nil; g_unix_input_stream_new := nil; g_unix_input_stream_set_close_fd := nil; g_unix_is_mount_path_system_internal := nil; g_unix_mount_at := nil; g_unix_mount_compare := nil; g_unix_mount_free := nil; g_unix_mount_get_device_path := nil; g_unix_mount_get_fs_type := nil; g_unix_mount_get_mount_path := nil; g_unix_mount_guess_can_eject := nil; g_unix_mount_guess_icon := nil; g_unix_mount_guess_name := nil; g_unix_mount_guess_should_display := nil; g_unix_mount_guess_symbolic_icon := nil; g_unix_mount_is_readonly := nil; g_unix_mount_is_system_internal := nil; g_unix_mount_monitor_get_type := nil; g_unix_mount_monitor_new := nil; g_unix_mount_monitor_set_rate_limit := nil; g_unix_mount_point_compare := nil; g_unix_mount_point_free := nil; g_unix_mount_point_get_device_path := nil; g_unix_mount_point_get_fs_type := nil; g_unix_mount_point_get_mount_path := nil; g_unix_mount_point_get_options := nil; g_unix_mount_point_guess_can_eject := nil; g_unix_mount_point_guess_icon := nil; g_unix_mount_point_guess_name := nil; g_unix_mount_point_guess_symbolic_icon := nil; g_unix_mount_point_is_loopback := nil; g_unix_mount_point_is_readonly := nil; g_unix_mount_point_is_user_mountable := nil; g_unix_mount_points_changed_since := nil; g_unix_mount_points_get := nil; g_unix_mounts_changed_since := nil; g_unix_mounts_get := nil; g_unix_output_stream_get_close_fd := nil; g_unix_output_stream_get_fd := nil; g_unix_output_stream_get_type := nil; g_unix_output_stream_new := nil; g_unix_output_stream_set_close_fd := nil; g_unix_socket_address_abstract_names_supported := nil; g_unix_socket_address_get_address_type := nil; g_unix_socket_address_get_path := nil; g_unix_socket_address_get_path_len := nil; g_unix_socket_address_get_type := nil; g_unix_socket_address_new := nil; g_unix_socket_address_new_with_type := nil; g_vfs_get_default := nil; g_vfs_get_file_for_path := nil; g_vfs_get_file_for_uri := nil; g_vfs_get_local := nil; g_vfs_get_supported_uri_schemes := nil; g_vfs_get_type := nil; g_vfs_is_active := nil; g_vfs_parse_name := nil; g_volume_can_eject := nil; g_volume_can_mount := nil; g_volume_eject_with_operation := nil; g_volume_eject_with_operation_finish := nil; g_volume_enumerate_identifiers := nil; g_volume_get_activation_root := nil; g_volume_get_drive := nil; g_volume_get_icon := nil; g_volume_get_identifier := nil; g_volume_get_mount := nil; g_volume_get_name := nil; g_volume_get_sort_key := nil; g_volume_get_symbolic_icon := nil; g_volume_get_type := nil; g_volume_get_uuid := nil; g_volume_monitor_get := nil; g_volume_monitor_get_connected_drives := nil; g_volume_monitor_get_mount_for_uuid := nil; g_volume_monitor_get_mounts := nil; g_volume_monitor_get_type := nil; g_volume_monitor_get_volume_for_uuid := nil; g_volume_monitor_get_volumes := nil; g_volume_mount := nil; g_volume_mount_finish := nil; g_volume_should_automount := nil; g_zlib_compressor_get_file_info := nil; g_zlib_compressor_get_type := nil; g_zlib_compressor_new := nil; g_zlib_compressor_set_file_info := nil; g_zlib_decompressor_get_file_info := nil; g_zlib_decompressor_get_type := nil; g_zlib_decompressor_new := nil; end; initialization LoadLibraries; LoadProcs; finalization UnloadLibraries; end.doublecmd-1.1.30/src/platform/unix/darwin/0000755000175000001440000000000015104114162017447 5ustar alexxusersdoublecmd-1.1.30/src/platform/unix/darwin/uquicklook.pas0000644000175000001440000000715115104114162022346 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Quick Look thumbnail provider Copyright (C) 2015-2019 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uQuickLook; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface uses Classes, SysUtils; implementation uses DynLibs, FileUtil, Types, Graphics, MacOSAll, CocoaAll, uThumbnails, uDebug, uClassesEx, uGraphics; const libQuickLook = '/System/Library/Frameworks/QuickLook.framework/Versions/Current/QuickLook'; var QuickLook: TLibHandle = NilHandle; var QLThumbnailImageCreate: function(allocator: CFAllocatorRef; url: CFURLRef; maxThumbnailSize: CGSize; options: CFDictionaryRef): CGImageRef; cdecl; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var ImageRef: CGImageRef; WorkStream: TBlobStream; maxThumbnailSize: CGSize; ImageData: CFMutableDataRef; theFileNameUrlRef: CFURLRef; theFileNameCFRef: CFStringRef; Bitmap: TPortableNetworkGraphic; ImageDest: CGImageDestinationRef; begin theFileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PAnsiChar(aFileName)); theFileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, theFileNameCFRef, kCFURLPOSIXPathStyle, False); try maxThumbnailSize.width:= aSize.cx; maxThumbnailSize.height:= aSize.cy; ImageRef:= QLThumbnailImageCreate(kCFAllocatorDefault, theFileNameUrlRef, maxThumbnailSize, nil); if ImageRef = nil then Exit(nil); ImageData:= CFDataCreateMutable(nil, 0); // Get image data in PNG format ImageDest:= CGImageDestinationCreateWithData(ImageData, kUTTypePNG, 1, nil); CGImageDestinationAddImage(ImageDest, ImageRef, nil); if (CGImageDestinationFinalize(ImageDest) = 0) then Result:= nil else begin Bitmap:= TPortableNetworkGraphic.Create; WorkStream:= TBlobStream.Create(CFDataGetBytePtr(ImageData), CFDataGetLength(ImageData)); try Result:= TBitmap.Create; try Bitmap.LoadFromStream(WorkStream); BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; finally Bitmap.Free; WorkStream.Free; end; end; CFRelease(ImageRef); CFRelease(ImageData); CFRelease(ImageDest); finally CFRelease(theFileNameCFRef); CFRelease(theFileNameUrlRef); end; end; procedure Initialize; begin QuickLook:= LoadLibrary(libQuickLook); if (QuickLook <> NilHandle) then begin Pointer(QLThumbnailImageCreate):= GetProcAddress(QuickLook, 'QLThumbnailImageCreate'); if Assigned(QLThumbnailImageCreate) then begin // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); DCDebug('Initialize QuickLook: Success'); end; end; end; procedure Finalize; begin if (QuickLook <> NilHandle) then FreeLibrary(QuickLook); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/darwin/umydarwin.pas0000644000175000001440000004330615104114162022201 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific DARWIN functions. Copyright (C) 2016-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Notes: 1. TDarwinAarch64Statfs is the workaround for the bug of FPC. TDarwinAarch64Statfs and the related codes can be removed after FPC 3.3.1 see also: https://gitlab.com/freepascal.org/fpc/source/-/issues/39873 } unit uMyDarwin; {$mode delphi} {$modeswitch objectivec1} {$linkframework DiskArbitration} interface uses Classes, SysUtils, UnixType, Cocoa_Extra, MacOSAll, CocoaAll, CocoaUtils, CocoaInt, CocoaConst, CocoaMenus, InterfaceBase, Menus, Controls, Forms, uDarwinFSWatch; // Darwin Util Function function StringToNSString(const S: String): NSString; function StringToCFStringRef(const S: String): CFStringRef; function NSArrayToList(const theArray:NSArray): TStringList; function ListToNSArray(const list:TStrings): NSArray; function ListToNSUrlArray(const list:TStrings): NSArray; procedure setMacOSAppearance( mode:Integer ); function getMacOSDefaultTerminal(): String; procedure FixMacFormatSettings; function NSGetTempPath: String; function NSGetFolderPath(Folder: NSSearchPathDirectory): String; function GetFileDescription(const FileName: String): String; function MountNetworkDrive(const serverAddress: String): Boolean; function GetVolumeName(const Device: String): String; function unmountAndEject(const path: String): Boolean; // Workarounds for FPC RTL Bug // copied from ptypes.inc and modified fstypename only {$if defined(cpuarm) or defined(cpuaarch64) or defined(iphonesim)} { structure used on iPhoneOS and available on Mac OS X 10.6 and later } const MFSTYPENAMELEN = 16; type TDarwinAarch64Statfs = record bsize : cuint32; iosize : cint32; blocks : cuint64; bfree : cuint64; bavail : cuint64; files : cuint64; ffree : cuint64; fsid : fsid_t; owner : uid_t; ftype : cuint32; fflags : cuint32; fssubtype : cuint32; fstypename : array[0..(MFSTYPENAMELEN)-1] of char; mountpoint : array[0..(PATH_MAX)-1] of char; mntfromname : array[0..(PATH_MAX)-1] of char; reserved: array[0..7] of cuint32; end; type TDarwinStatfs = TDarwinAarch64Statfs; {$else} type TDarwinStatfs = TStatFs; {$endif} // MacOS Simple File Sytem Watcher (only one watchPath) { TSimpleDarwinFSWatcher } TSimpleDarwinFSWatcher = class( TThread ) private _monitor: TDarwinFSWatcher; _callback: TDarwinFSWatchCallBack; _event: TDarwinFSWatchEvent; protected procedure Execute; override; procedure handleEvent( event:TDarwinFSWatchEvent ); procedure doSyncCallback; public procedure stop(); constructor Create( const path:String; const callback:TDarwinFSWatchCallBack ); destructor Destroy; override; end; // MacOS Service Integration type TNSServiceProviderCallBack = Procedure( filenames:TStringList ) of object; type TNSServiceMenuIsReady = Function(): Boolean of object; type TNSServiceMenuGetFilenames = Function(): TStringList of object; type TDCCocoaApplication = objcclass(TCocoaApplication) function validRequestorForSendType_returnType (sendType: NSString; returnType: NSString): id; override; function writeSelectionToPasteboard_types (pboard: NSPasteboard; types: NSArray): ObjCBOOL; message 'writeSelectionToPasteboard:types:'; procedure observeValueForKeyPath_ofObject_change_context( keyPath: NSString; object_: id; change: NSDictionary; context: pointer); override; public serviceMenuIsReady: TNSServiceMenuIsReady; serviceMenuGetFilenames: TNSServiceMenuGetFilenames; end; type TNSServiceProvider = objcclass(NSObject) private onOpenWithNewTab: TNSServiceProviderCallBack; public procedure openWithNewTab( pboard:NSPasteboard; userData:NSString; error:NSStringPtr ); message 'openWithNewTab:userData:error:'; end; type TMacosServiceMenuHelper = class private oldMenuPopupHandler: TNotifyEvent; serviceSubMenuCaption: String; procedure attachServicesMenu( Sender:TObject); public procedure PopUp( menu:TPopupMenu; caption:String ); end; procedure InitNSServiceProvider( serveCallback: TNSServiceProviderCallBack; isReadyFunc: TNSServiceMenuIsReady; getFilenamesFunc: TNSServiceMenuGetFilenames ); // MacOS Sharing procedure showMacOSSharingServiceMenu; // MacOS Theme type TNSThemeChangedHandler = Procedure() of object; procedure InitNSThemeChangedObserver( handler: TNSThemeChangedHandler ); var HasMountURL: Boolean = False; NSServiceProvider: TNSServiceProvider; MacosServiceMenuHelper: TMacosServiceMenuHelper; NSThemeChangedHandler: TNSThemeChangedHandler; implementation uses DynLibs; { TSimpleDarwinFSWatcher } procedure TSimpleDarwinFSWatcher.Execute; begin _monitor.start(); end; procedure TSimpleDarwinFSWatcher.handleEvent( event:TDarwinFSWatchEvent ); begin _event:= event; Synchronize( doSyncCallback ); end; procedure TSimpleDarwinFSWatcher.doSyncCallback; begin _callback( _event ); _event:= nil; end; procedure TSimpleDarwinFSWatcher.stop(); begin _monitor.terminate(); end; constructor TSimpleDarwinFSWatcher.Create( const path:String; const callback:TDarwinFSWatchCallBack ); begin Inherited Create( false ); _callback:= callback; _monitor:= TDarwinFSWatcher.create( handleEvent ); _monitor.addPath( path ); end; destructor TSimpleDarwinFSWatcher.Destroy; begin _monitor.terminate; FreeAndNil( _monitor ); inherited; end; procedure setMacOSAppearance( mode:Integer ); var appearance: NSAppearance; begin if not NSApp.respondsToSelector( ObjCSelector('appearance') ) then exit; case mode of 0,1: appearance:= nil; 2: appearance:= NSAppearance.appearanceNamed( NSSTR_DARK_NAME ); 3: appearance:= NSAppearance.appearanceNamed( NSAppearanceNameAqua ); end; NSApp.setAppearance( appearance ); NSAppearance.setCurrentAppearance( appearance ); end; procedure TMacosServiceMenuHelper.attachServicesMenu( Sender:TObject); var servicesItem: TMenuItem; subMenu: TCocoaMenu; begin // call the previous OnMenuPopupHandler and restore it if Assigned(oldMenuPopupHandler) then oldMenuPopupHandler( Sender ); OnMenuPopupHandler:= oldMenuPopupHandler; oldMenuPopupHandler:= nil; // attach the Services Sub Menu by calling NSApplication.setServicesMenu() servicesItem:= TPopupMenu(Sender).Items.Find(serviceSubMenuCaption); if servicesItem<>nil then begin subMenu:= TCocoaMenu.alloc.initWithTitle(NSString.string_); TCocoaMenuItem(servicesItem.Handle).setSubmenu( subMenu ); NSApp.setServicesMenu( NSMenu(servicesItem.Handle) ); end; end; procedure TMacosServiceMenuHelper.PopUp( menu:TPopupMenu; caption:String ); begin // because the menu item handle will be destroyed in TPopupMenu.PopUp() // we can only call NSApplication.setServicesMenu() in OnMenuPopupHandler() oldMenuPopupHandler:= OnMenuPopupHandler; OnMenuPopupHandler:= attachServicesMenu; serviceSubMenuCaption:= caption; menu.PopUp(); end; procedure InitNSServiceProvider( serveCallback: TNSServiceProviderCallBack; isReadyFunc: TNSServiceMenuIsReady; getFilenamesFunc: TNSServiceMenuGetFilenames ); var DCApp: TDCCocoaApplication; sendTypes: NSArray; returnTypes: NSArray; begin DCApp:= TDCCocoaApplication( NSApp ); // MacOS Service menu incoming setup if not Assigned(NSServiceProvider) then begin NSServiceProvider:= TNSServiceProvider.alloc.init; DCApp.setServicesProvider( NSServiceProvider ); NSUpdateDynamicServices; end; NSServiceProvider.onOpenWithNewTab:= serveCallback; // MacOS Service menu outgoing setup sendTypes:= NSArray.arrayWithObject(NSFilenamesPboardType); returnTypes:= nil; DCApp.serviceMenuIsReady:= isReadyFunc; DCApp.serviceMenuGetFilenames:= getFilenamesFunc; DCApp.registerServicesMenuSendTypes_returnTypes( sendTypes, returnTypes ); end; procedure TNSServiceProvider.openWithNewTab( pboard:NSPasteboard; userData:NSString; error:NSStringPtr ); var filenameArray{, lClasses}: NSArray; filenameList: TStringList; begin filenameArray := pboard.propertyListForType(NSFilenamesPboardType); if filenameArray <> nil then begin if Assigned(onOpenWithNewTab) then begin filenameList:= NSArrayToList( filenameArray ); onOpenWithNewTab( filenameList ); FreeAndNil( filenameList ); end; end; end; function TDCCocoaApplication.validRequestorForSendType_returnType (sendType: NSString; returnType: NSString): id; var isSendTypeMatch: ObjcBool; isReturnTypeMatch: ObjcBool; begin Result:= nil; if not NSFilenamesPboardType.isEqualToString(sendType) then exit; if returnType<>nil then exit; if self.serviceMenuIsReady() then Result:=self; end; function TDCCocoaApplication.writeSelectionToPasteboard_types( pboard: NSPasteboard; types: NSArray): ObjCBOOL; var filenameList: TStringList; filenameArray: NSArray; begin Result:= false; filenameList:= self.serviceMenuGetFilenames(); if filenameList=nil then exit; filenameArray:= ListToNSArray( filenameList ); pboard.declareTypes_owner( NSArray.arrayWithObject(NSFileNamesPboardType), nil ); pboard.setPropertyList_forType( filenameArray, NSFileNamesPboardType ); Result:= true; FreeAndNil( filenameList ); end; procedure showMacOSSharingServiceMenu; var picker: NSSharingServicePicker; filenameArray: NSArray; filenameList: TStringList; point: TPoint; popupNSRect: NSRect; control: TWinControl; begin if not TDCCocoaApplication(NSApp).serviceMenuIsReady then exit; filenameList:= TDCCocoaApplication(NSApp).serviceMenuGetFilenames; if filenameList=nil then exit; filenameArray:= ListToNSUrlArray( filenameList ); FreeAndNil( filenameList ); control:= Screen.ActiveControl; point:= control.ScreenToClient( Mouse.CursorPos ); popupNSRect.origin.x:= point.X; popupNSRect.origin.y:= point.Y; popupNSRect.size:= NSZeroSize; picker:= NSSharingServicePicker.alloc.initWithItems( filenameArray ); picker.showRelativeToRect_ofView_preferredEdge( popupNSRect, NSView(control.handle) , NSMinYEdge ); picker.release; end; procedure TDCCocoaApplication.observeValueForKeyPath_ofObject_change_context( keyPath: NSString; object_: id; change: NSDictionary; context: pointer); begin Inherited observeValueForKeyPath_ofObject_change_context( keyPath, object_, change, context ); if keyPath.isEqualToString(NSSTR('effectiveAppearance')) then begin NSAppearance.setCurrentAppearance( self.appearance ); if Assigned(NSThemeChangedHandler) then NSThemeChangedHandler; end; end; procedure InitNSThemeChangedObserver( handler: TNSThemeChangedHandler ); begin if Assigned(NSThemeChangedHandler) then exit; NSApp.addObserver_forKeyPath_options_context( NSApp, NSSTR('effectiveAppearance'), 0, nil ); NSThemeChangedHandler:= handler; end; function NSArrayToList(const theArray:NSArray): TStringList; var i: Integer; list : TStringList; begin list := TStringList.Create; for i := 0 to theArray.Count-1 do begin list.Add( NSStringToString( theArray.objectAtIndex(i) ) ); end; Result := list; end; function ListToNSArray(const list:TStrings): NSArray; var theArray: NSMutableArray; item: String; begin theArray := NSMutableArray.arrayWithCapacity( list.Count ); for item in list do begin theArray.addObject( StringToNSString(item) ); end; Result := theArray; end; function ListToNSUrlArray(const list:TStrings): NSArray; var theArray: NSMutableArray; item: String; url: NSUrl; begin theArray:= NSMutableArray.arrayWithCapacity( list.Count ); for item in list do begin url:= NSUrl.fileURLWithPath( StringToNSString(item) ); theArray.addObject( url ); end; Result:= theArray; end; function CFStringToStr(AString: CFStringRef): String; var Str: Pointer; StrSize: CFIndex; StrRange: CFRange; begin if AString = nil then begin Result:= EmptyStr; Exit; end; // Try the quick way first Str:= CFStringGetCStringPtr(AString, kCFStringEncodingUTF8); if Str <> nil then Result:= PAnsiChar(Str) else begin // if that doesn't work this will StrRange.location:= 0; StrRange.length:= CFStringGetLength(AString); CFStringGetBytes(AString, StrRange, kCFStringEncodingUTF8, Ord('?'), False, nil, 0, StrSize{%H-}); SetLength(Result, StrSize); if StrSize > 0 then begin CFStringGetBytes(AString, StrRange, kCFStringEncodingUTF8, Ord('?'), False, @Result[1], StrSize, StrSize); end; end; end; procedure FixMacFormatSettings; var S: String; ALocale: CFLocaleRef; begin ALocale:= CFLocaleCopyCurrent; if Assigned(ALocale) then begin S:= CFStringToStr(CFLocaleGetValue(ALocale, kCFLocaleGroupingSeparator)); if Length(S) = 0 then begin DefaultFormatSettings.ThousandSeparator:= #0; end; CFRelease(ALocale); end; end; function NSGetTempPath: String; begin Result:= IncludeTrailingBackslash(NSTemporaryDirectory.UTF8String); end; function getMacOSDefaultTerminal(): String; begin Result:= NSStringToString( NSWorkspace.sharedWorkspace.fullPathForApplication( NSStr('terminal') ) ); end; function StringToNSString(const S: String): NSString; begin Result:= NSString(NSString.stringWithUTF8String(PAnsiChar(S))); end; function StringToCFStringRef(const S: String): CFStringRef; begin Result:= CFStringCreateWithCString(nil, PAnsiChar(S), kCFStringEncodingUTF8); end; function NSGetFolderPath(Folder: NSSearchPathDirectory): String; var Path: NSArray; begin Path:= NSFileManager.defaultManager.URLsForDirectory_inDomains(Folder, NSUserDomainMask); if Path.count > 0 then begin Result:= IncludeTrailingBackslash(NSURL(Path.objectAtIndex(0)).path.UTF8String) + ApplicationName; end; end; function GetFileDescription(const FileName: String): String; var Error: NSError; WS: NSWorkspace; FileType: NSString; FileNameRef: CFStringRef; begin WS:= NSWorkspace.sharedWorkspace; FileNameRef:= StringToCFStringRef(FileName); if (FileNameRef = nil) then Exit(EmptyStr); FileType:= WS.typeOfFile_error(NSString(FileNameRef), @Error); if (FileType = nil) then Result:= Error.localizedDescription.UTF8String else begin Result:= WS.localizedDescriptionForType(FileType).UTF8String; end; CFRelease(FileNameRef); end; function GetVolumeName(const Device: String): String; var ADisk: DADiskRef; AName: CFStringRef; ASession: DASessionRef; ADescription: CFDictionaryRef; begin Result:= EmptyStr; ASession:= DASessionCreate(kCFAllocatorDefault); if Assigned(ASession) then begin ADisk:= DADiskCreateFromBSDName(kCFAllocatorDefault, ASession, PAnsiChar(Device)); if Assigned(ADisk) then begin ADescription:= DADiskCopyDescription(ADisk); if Assigned(ADescription) then begin AName:= CFDictionaryGetValue(ADescription, kDADiskDescriptionVolumeNameKey); if (AName = nil) then AName:= CFDictionaryGetValue(ADescription, kDADiskDescriptionMediaNameKey); if Assigned(AName) then begin Result:= CFStringToStr(AName); end; CFRelease(ADescription); end; CFRelease(ADisk); end; CFRelease(ASession); end; end; function unmountAndEject(const path: String): Boolean; begin Result:= NSWorkspace.sharedWorkspace.unmountAndEjectDeviceAtPath( StringToNSString(path) ); end; var NetFS: TLibHandle = NilHandle; CoreServices: TLibHandle = NilHandle; var FSMountServerVolumeSync: function(url: CFURLRef; mountDir: CFURLRef; user: CFStringRef; password: CFStringRef; mountedVolumeRefNum: FSVolumeRefNumPtr; flags: OptionBits): OSStatus; stdcall; NetFSMountURLSync: function(_url: CFURLRef; _mountpath: CFURLRef; _user: CFStringRef; _passwd: CFStringRef; _open_options: CFMutableDictionaryRef; _mount_options: CFMutableDictionaryRef; _mountpoints: CFArrayRefPtr): Int32; cdecl; function MountNetworkDrive(const serverAddress: String): Boolean; var sharePath: NSURL; mountPoints: CFArrayRef = nil; begin sharePath:= NSURL.URLWithString(StringToNSString(serverAddress)); if Assigned(NetFSMountURLSync) then Result:= NetFSMountURLSync(CFURLRef(sharePath), nil, nil, nil, nil, nil, @mountPoints) = 0 else begin Result:= FSMountServerVolumeSync(CFURLRef(sharePath), nil, nil, nil, nil, 0) = noErr; end; end; procedure Initialize; begin NetFS:= LoadLibrary('/System/Library/Frameworks/NetFS.framework/NetFS'); if (NetFS <> NilHandle) then begin @NetFSMountURLSync:= GetProcAddress(NetFS, 'NetFSMountURLSync'); end; CoreServices:= LoadLibrary('/System/Library/Frameworks/CoreServices.framework/CoreServices'); if (CoreServices <> NilHandle) then begin @FSMountServerVolumeSync:= GetProcAddress(CoreServices, 'FSMountServerVolumeSync'); end; HasMountURL:= Assigned(NetFSMountURLSync) or Assigned(FSMountServerVolumeSync); MacosServiceMenuHelper:= TMacosServiceMenuHelper.Create; end; procedure Finalize; begin if (NetFS <> NilHandle) then FreeLibrary(NetFS); if (CoreServices <> NilHandle) then FreeLibrary(CoreServices); FreeAndNil( MacosServiceMenuHelper ); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/unix/darwin/udarwinfswatch.pas0000644000175000001440000005500715104114162023214 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains specific DARWIN FSEvent functions. Copyright (C) 2023 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2023 Rich Chang (rich2014.git@outlook.com) This library 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 library 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 General Public License along with this program. If not, see . Notes: 1. multiple directories can be monitored at the same time. DC generally monitors more than 2 directories (possibly much more than 2), just one TDarwinFSWatcher needed. 2. subdirectories monitor supported. 3. file attributes monitoring is supported, and monitoring of adding files, renaming files, deleting files is also supported. for comparison, file attributes monitoring is missing with kqueue/kevent. 4. Renamed Event fully supported from MacOS 10.13 5. CFRunLoop is used in TDarwinFSWatcher. because in DC a separate thread has been opened (in uFileSystemWatcher), it is more appropriate to use CFRunLoop than DispatchQueue. } unit uDarwinFSWatch; {$mode delphi} {$modeswitch objectivec2} interface uses Classes, SysUtils, Contnrs, SyncObjs, MacOSAll, CocoaAll, BaseUnix; type TDarwinFSWatchEventCategory = ( ecAttribChanged, ecCoreAttribChanged, ecXattrChanged, ecStructChanged, ecCreated, ecRemoved, ecRenamed, ecRootChanged, ecChildChanged, ecFile, ecDir, ecDropabled ); type TDarwinFSWatchEventCategories = set of TDarwinFSWatchEventCategory; type TInternalEvent = class private path: String; renamedPath: String; // only for Ranamed Event flags: FSEventStreamEventFlags; iNode: UInt64; private function deepCopy(): TInternalEvent; end; type TDarwinFSWatchEventSession = class private _list: TObjectList; public constructor create; overload; constructor create( const amount:size_t; eventPaths:CFArrayRef; flags:FSEventStreamEventFlagsPtr ); destructor destroy; override; private function deepCopy(): TDarwinFSWatchEventSession; function count(): Integer; function getItem( index:Integer ): TInternalEvent; procedure adjustSymlinkIfNecessary( index:Integer; watchPath:String; watchRealPath:String ); procedure adjustRenamedEventIfNecessary( index:Integer ); function isRenamed( event:TInternalEvent ): Boolean; property items[index: Integer]: TInternalEvent read getItem; default; end; type TDarwinFSWatchEvent = class private _categories: TDarwinFSWatchEventCategories; _watchPath: String; _fullPath: String; _renamedPath: String; _rawEventFlags: UInt32; _rawINode: UInt64; private procedure createCategories; {%H-}constructor create( const aWatchPath:String; const internalEvent:TInternalEvent ); public function isDropabled(): Boolean; function categoriesToStr(): String; function rawEventFlagsToStr(): String; public property categories: TDarwinFSWatchEventCategories read _categories; property watchPath: String read _watchPath; property fullPath: String read _fullPath; property renamedPath: String read _renamedPath; property rawEventFlags: UInt32 read _rawEventFlags; property rawINode: UInt64 read _rawINode; end; type TDarwinFSWatchCallBack = Procedure( event:TDarwinFSWatchEvent ) of object; type TDarwinFSWatcher = class private _watchPaths: NSMutableArray; _watchRealPaths: NSMutableArray; _streamPaths: NSArray; _callback: TDarwinFSWatchCallBack; _latency: Integer; _stream: FSEventStreamRef; _streamContext: FSEventStreamContext; _lastEventId: FSEventStreamEventId; _running: Boolean; _runLoop: CFRunLoopRef; _thread: TThread; _lockObject: TCriticalSection; _pathsSyncObject: TEventObject; public watchSubtree: Boolean; private procedure handleEvents( const originalSession:TDarwinFSWatchEventSession ); procedure doCallback( const watchPath:String; const internalEvent:TInternalEvent ); procedure updateStream; procedure closeStream; procedure waitPath; procedure notifyPath; procedure interrupt; public constructor create( const callback:TDarwinFSWatchCallBack; const latency:Integer=300 ); destructor destroy; override; procedure start; procedure terminate; procedure addPath( path:String ); procedure removePath( path:String ); procedure clearPath; end; implementation const kFSEventStreamCreateFlagUseExtendedData = $00000040; kFSEventStreamEventFlagItemIsHardlink = $00100000; kFSEventStreamEventFlagItemIsLastHardlink = $00200000; kFSEventStreamEventFlagItemCloned = $00400000; CREATE_FLAGS= kFSEventStreamCreateFlagFileEvents or kFSEventStreamCreateFlagWatchRoot or kFSEventStreamCreateFlagNoDefer or kFSEventStreamCreateFlagUseCFTypes or kFSEventStreamCreateFlagUseExtendedData; NSAppKitVersionNumber10_13 = 1561; var kFSEventStreamEventExtendedDataPathKey: CFStringRef; kFSEventStreamEventExtendedFileIDKey: CFStringRef; isFlagUseExtendedDataSupported: Boolean; function StringToNSString(const S: String): NSString; begin Result:= NSString(NSString.stringWithUTF8String(PAnsiChar(S))); end; constructor TDarwinFSWatchEvent.create( const aWatchPath:String; const internalEvent:TInternalEvent ); begin Inherited Create; _watchPath:= aWatchPath; _fullPath:= internalEvent.path; _renamedPath:= internalEvent.renamedPath; _rawEventFlags:= internalEvent.flags; _rawINode:= internalEvent.iNode; createCategories; end; procedure TDarwinFSWatchEvent.createCategories; begin _categories:= []; if (_rawEventFlags and ( kFSEventStreamEventFlagItemModified or kFSEventStreamEventFlagItemChangeOwner or kFSEventStreamEventFlagItemInodeMetaMod )) <> 0 then _categories += [ecAttribChanged, ecCoreAttribChanged]; if (_rawEventFlags and ( kFSEventStreamEventFlagItemFinderInfoMod or kFSEventStreamEventFlagItemXattrMod )) <> 0 then _categories += [ecAttribChanged, ecXattrChanged]; if (_rawEventFlags and kFSEventStreamEventFlagItemCreated)<>0 then _categories += [ecStructChanged, ecCreated]; if (_rawEventFlags and kFSEventStreamEventFlagItemRemoved)<>0 then _categories += [ecStructChanged, ecRemoved]; if (_rawEventFlags and kFSEventStreamEventFlagItemRenamed)<>0 then _categories += [ecStructChanged, ecRenamed]; if (_rawEventFlags and kFSEventStreamEventFlagRootChanged)<>0 then begin _categories += [ecRootChanged]; end else begin if (_fullPath<>watchPath) and (_fullPath.CountChar(PathDelim)<>_watchPath.CountChar(PathDelim)+1) then begin if (_renamedPath.IsEmpty) or ((_renamedPath<>watchPath) and (_renamedPath.CountChar(PathDelim)<>_watchPath.CountChar(PathDelim)+1)) then _categories += [ecChildChanged]; end; end; if (_rawEventFlags and kFSEventStreamEventFlagItemIsFile)<>0 then _categories += [ecFile]; if (_rawEventFlags and kFSEventStreamEventFlagItemIsDir)<>0 then _categories += [ecDir]; if _categories * [ecAttribChanged,ecStructChanged,ecRootChanged] = [] then _categories:= [ecDropabled]; end; function TDarwinFSWatchEvent.isDropabled(): Boolean; begin Result:= _categories = [ecDropabled]; end; function TDarwinFSWatchEvent.categoriesToStr(): String; begin Result:= EmptyStr; if ecAttribChanged in _categories then Result += '|Attrib'; if ecCoreAttribChanged in _categories then Result += '|CoreAttrib'; if ecXattrChanged in _categories then Result += '|Xattr'; if ecStructChanged in _categories then Result += '|Struct'; if ecCreated in _categories then Result += '|Created'; if ecRemoved in _categories then Result += '|Removed'; if ecRenamed in _categories then Result += '|Renamed'; if ecRootChanged in _categories then Result += '|Root'; if ecChildChanged in _categories then Result += '|Child'; if ecDropabled in _categories then Result += '|Dropabled'; Result:= Result.TrimLeft( '|' ); end; function TDarwinFSWatchEvent.rawEventFlagsToStr(): String; begin Result:= EmptyStr; if (_rawEventFlags and kFSEventStreamEventFlagItemModified)<>0 then Result += '|Modified'; if (_rawEventFlags and kFSEventStreamEventFlagItemChangeOwner)<>0 then Result += '|ChangeOwner'; if (_rawEventFlags and kFSEventStreamEventFlagItemInodeMetaMod)<>0 then Result += '|InodeMetaMod'; if (_rawEventFlags and kFSEventStreamEventFlagItemFinderInfoMod)<>0 then Result += '|FinderInfoMod'; if (_rawEventFlags and kFSEventStreamEventFlagItemXattrMod)<>0 then Result += '|XattrMod'; if (_rawEventFlags and kFSEventStreamEventFlagItemCreated)<>0 then Result += '|Created'; if (_rawEventFlags and kFSEventStreamEventFlagItemRemoved)<>0 then Result += '|Removed'; if (_rawEventFlags and kFSEventStreamEventFlagItemRenamed)<>0 then Result += '|Renamed'; if (_rawEventFlags and kFSEventStreamEventFlagRootChanged)<>0 then Result += '|RootChanged'; if (_rawEventFlags and kFSEventStreamEventFlagItemIsFile)<>0 then Result += '|IsFile'; if (_rawEventFlags and kFSEventStreamEventFlagItemIsDir)<>0 then Result += '|IsDir'; if (_rawEventFlags and kFSEventStreamEventFlagItemIsSymlink)<>0 then Result += '|IsSymlink'; if (_rawEventFlags and kFSEventStreamEventFlagItemIsHardlink)<>0 then Result += '|IsHardLink'; if (_rawEventFlags and kFSEventStreamEventFlagItemIsLastHardlink)<>0 then Result += '|IsLastHardLink'; if (_rawEventFlags and kFSEventStreamEventFlagMustScanSubDirs)<>0 then Result += '|ScanSubDirs'; if (_rawEventFlags and kFSEventStreamEventFlagUserDropped)<>0 then Result += '|UserDropped'; if (_rawEventFlags and kFSEventStreamEventFlagKernelDropped)<>0 then Result += '|KernelDropped'; if (_rawEventFlags and kFSEventStreamEventFlagEventIdsWrapped)<>0 then Result += '|IdsWrapped'; if (_rawEventFlags and kFSEventStreamEventFlagHistoryDone)<>0 then Result += '|HistoryDone'; if (_rawEventFlags and kFSEventStreamEventFlagMount)<>0 then Result += '|Mount'; if (_rawEventFlags and kFSEventStreamEventFlagUnmount)<>0 then Result += '|Unmount'; if (_rawEventFlags and kFSEventStreamEventFlagOwnEvent)<>0 then Result += '|OwnEvent'; if (_rawEventFlags and kFSEventStreamEventFlagItemCloned)<>0 then Result += '|Cloned'; if (_rawEventFlags and $FF800000)<>0 then Result:= '|*UnkownFlags:' + IntToHex(_rawEventFlags) + '*' + Result; if Result.IsEmpty then Result:= '*NoneFlag*' else Result:= Result.TrimLeft( '|' ); end; // Note: try to avoid string copy function isMatchWatchPath( const internalEvent:TInternalEvent; const watchPath:String; const watchSubtree:Boolean ): Boolean; var fullPath: String; fullPathDeep: Integer; watchPathDeep: Integer; begin fullPath:= internalEvent.path;; // detect if fullPath=watchPath if (internalEvent.flags and (kFSEventStreamEventFlagItemIsDir or kFSEventStreamEventFlagRootChanged)) <> 0 then begin Result:= watchPath.Equals( fullPath ); if Result then exit; // fullPath=watchPath, matched end; // detect if fullPath startsWith watchPath Result:= fullPath.StartsWith(watchPath); if watchSubtree then exit; // not watchSubtree // not startsWith watchPath, not match if not Result then exit; // not watchSubtree, and startsWith watchPath // detect if fullPath and watchPath in the same level fullPathDeep:= fullPath.CountChar(PathDelim); watchPathDeep:= watchPath.CountChar(PathDelim)+1; Result:= fullPathDeep=watchPathDeep; end; function TInternalEvent.deepCopy(): TInternalEvent; begin Result:= TInternalEvent.Create; Result.path:= self.path; Result.renamedPath:= self.renamedPath; Result.flags:= self.flags; Result.iNode:= self.iNode; end; function TDarwinFSWatchEventSession.deepCopy(): TDarwinFSWatchEventSession; var list: TObjectList; i: Integer; begin list:= TObjectList.Create; for i:=0 to count-1 do begin list.Add( Items[i].deepCopy() ); end; Result:= TDarwinFSWatchEventSession.create; Result._list:= list; end; constructor TDarwinFSWatchEventSession.create(); begin Inherited; end; constructor TDarwinFSWatchEventSession.create( const amount:size_t; eventPaths:CFArrayRef; flags:FSEventStreamEventFlagsPtr ); var i: size_t; event: TInternalEvent; infoDict: CFDictionaryRef; nsPath: NSString; nsNode: CFNumberRef; begin _list:= TObjectList.Create; for i:=0 to amount-1 do begin event:= TInternalEvent.Create; if isFlagUseExtendedDataSupported then begin infoDict:= CFArrayGetValueAtIndex( eventPaths, i ); nsPath:= CFDictionaryGetValue( infoDict, kFSEventStreamEventExtendedDataPathKey ); nsNode:= CFDictionaryGetValue( infoDict, kFSEventStreamEventExtendedFileIDKey ); if Assigned(nsNode) then CFNumberGetValue( nsNode, kCFNumberLongLongType, @(event.iNode) ); end else begin nsPath:= CFArrayGetValueAtIndex( eventPaths, i ); end; event.path:= nsPath.UTF8String; event.flags:= flags^; _list.Add( event ); inc(flags); end; end; destructor TDarwinFSWatchEventSession.destroy; begin FreeAndNil( _list ); end; function TDarwinFSWatchEventSession.count: Integer; begin Result:= _list.Count; end; function TDarwinFSWatchEventSession.getItem( index:Integer ): TInternalEvent; begin Result:= TInternalEvent( _list[index] ); end; function TDarwinFSWatchEventSession.isRenamed( event:TInternalEvent ): Boolean; begin Result:= event.flags and (kFSEventStreamEventFlagItemRenamed or kFSEventStreamEventFlagItemCreated or kFSEventStreamEventFlagItemRemoved) = kFSEventStreamEventFlagItemRenamed; end; procedure TDarwinFSWatchEventSession.adjustRenamedEventIfNecessary( index:Integer ); var currentEvent: TInternalEvent; nextEvent: TInternalEvent; i: Integer; begin currentEvent:= Items[index]; if not isRenamed(currentEvent) then exit; // find all related Renamed Event, and try to build a complete Renamed Event with NewPath if (currentEvent.iNode<>0) and isFlagUseExtendedDataSupported then begin i:= index + 1; while i < count do begin nextEvent:= Items[i]; if isRenamed(nextEvent) and (nextEvent.iNode=currentEvent.iNode) then begin if currentEvent.path<>nextEvent.path then currentEvent.renamedPath:= nextEvent.path; _list.Delete( i ); end else begin inc( i ); end; end; end; // got the complete Renamed Event, then exit if not currentEvent.renamedPath.IsEmpty then exit; // got the incomplete Renamed Event, change to Created or Removed Event currentEvent.flags:= currentEvent.flags and (not kFSEventStreamEventFlagItemRenamed); if FpAccess(currentEvent.path, F_OK) = 0 then begin currentEvent.flags:= currentEvent.flags or kFSEventStreamEventFlagItemCreated; end else begin currentEvent.flags:= currentEvent.flags or kFSEventStreamEventFlagItemRemoved; end; end; procedure TDarwinFSWatchEventSession.adjustSymlinkIfNecessary( index:Integer; watchPath:String; watchRealPath:String ); var currentEvent: TInternalEvent; begin if watchPath=watchRealPath then exit; currentEvent:= Items[index]; currentEvent.path:= watchPath + currentEvent.path.Substring(watchRealPath.Length); if currentEvent.renamedPath.IsEmpty then exit; if not currentEvent.renamedPath.StartsWith(watchRealPath) then exit; currentEvent.renamedPath:= watchPath + currentEvent.renamedPath.Substring(watchRealPath.Length); end; constructor TDarwinFSWatcher.create( const callback:TDarwinFSWatchCallBack; const latency:Integer ); begin Inherited Create; _watchPaths:= NSMutableArray.alloc.initWithCapacity( 16 ); _watchRealPaths:= NSMutableArray.alloc.initWithCapacity( 16 ); _callback:= callback; _latency:= latency; _streamContext.info:= self; _lastEventId:= FSEventStreamEventId(kFSEventStreamEventIdSinceNow); _running:= false; _lockObject:= TCriticalSection.Create; _pathsSyncObject:= TSimpleEvent.Create; end; destructor TDarwinFSWatcher.destroy; begin _pathsSyncObject.SetEvent; FreeAndNil( _lockObject ); FreeAndNil( _pathsSyncObject ); _watchPaths.release; _watchPaths:= nil; _watchRealPaths.release; _watchRealPaths:= nil; _streamPaths.release; _streamPaths:= nil; Inherited; end; procedure cdeclFSEventsCallback( {%H-}streamRef: ConstFSEventStreamRef; clientCallBackInfo: UnivPtr; numEvents: size_t; eventPaths: UnivPtr; eventFlags: FSEventStreamEventFlagsPtr; {%H-}eventIds: FSEventStreamEventIdPtr ); cdecl; var pool: NSAutoReleasePool; watcher: TDarwinFSWatcher absolute clientCallBackInfo; session: TDarwinFSWatchEventSession; begin pool:= NSAutoreleasePool.alloc.init; session:= TDarwinFSWatchEventSession.create( numEvents, eventPaths, eventFlags ); watcher.handleEvents( session ); pool.release; // seesion released in handleEvents() end; procedure TDarwinFSWatcher.handleEvents( const originalSession:TDarwinFSWatchEventSession ); var tempWatchPaths: NSArray; tempWatchRealPaths: NSArray; watchPath: String; watchRealPath: String; event: TInternalEvent; pathIndex: Integer; i: Integer; session: TDarwinFSWatchEventSession; currentWatchSubtree: Boolean; begin // for multithread currentWatchSubtree:= watchSubtree; try _lockObject.Acquire; try tempWatchPaths:= _watchPaths.copy; tempWatchRealPaths:= _watchRealPaths.copy; finally _lockObject.Release; end; if tempWatchPaths.count=0 then begin originalSession.Free; exit; end; for pathIndex:=0 to tempWatchPaths.count-1 do begin watchPath:= NSString(tempWatchPaths.objectAtIndex(pathIndex)).UTF8String; watchRealPath:= NSString(tempWatchRealPaths.objectAtIndex(pathIndex)).UTF8String; if pathIndex=tempWatchPaths.count-1 then session:= originalSession else session:= originalSession.deepCopy(); i:= 0; while i < session.count do begin event:= session[i]; if isMatchWatchPath(event, watchRealPath, currentWatchSubtree) then begin session.adjustRenamedEventIfNecessary( i ); session.adjustSymlinkIfNecessary( i, watchPath, watchRealPath ); doCallback( watchPath, event ); end; inc( i ); end; session.Free; end; finally tempWatchPaths.Release; tempWatchRealPaths.Release; end; end; procedure TDarwinFSWatcher.doCallback( const watchPath:String; const internalEvent:TInternalEvent ); var event: TDarwinFSWatchEvent; begin event:= TDarwinFSWatchEvent.create( watchPath, internalEvent ); _callback( event ); event.Free; end; procedure TDarwinFSWatcher.updateStream; begin if _watchPaths.isEqualToArray(_streamPaths) then exit; closeStream; _streamPaths.release; _streamPaths:= NSArray.alloc.initWithArray( _watchPaths ); if _watchPaths.count = 0 then begin _lastEventId:= FSEventStreamEventId(kFSEventStreamEventIdSinceNow); exit; end; _stream:= FSEventStreamCreate( nil, @cdeclFSEventsCallback, @_streamContext, CFArrayRef(_watchPaths), _lastEventId, _latency/1000, CREATE_FLAGS ); FSEventStreamScheduleWithRunLoop( _stream, _runLoop, kCFRunLoopDefaultMode ); FSEventStreamStart( _stream ); end; procedure TDarwinFSWatcher.closeStream; begin if Assigned(_stream) then begin _lastEventId:= FSEventsGetCurrentEventId(); FSEventStreamFlushSync( _stream ); FSEventStreamStop( _stream ); FSEventStreamInvalidate( _stream ); FSEventStreamRelease( _stream ); _stream:= nil; end; end; procedure TDarwinFSWatcher.start; var pool: NSAutoReleasePool; begin _running:= true; _runLoop:= CFRunLoopGetCurrent(); _thread:= TThread.CurrentThread; repeat pool:= NSAutoreleasePool.alloc.init; _lockObject.Acquire; try updateStream; finally _lockObject.Release; end; if Assigned(_stream) then CFRunLoopRun else waitPath; pool.release; until not _running; end; procedure TDarwinFSWatcher.terminate; begin _lockObject.Acquire; try _running:= false; interrupt; finally _lockObject.Release; end; if Assigned(_thread) then _thread.WaitFor; closeStream; end; procedure TDarwinFSWatcher.interrupt; begin Sleep( 20 ); if Assigned(_stream) then CFRunLoopStop( _runLoop ) else notifyPath; end; function realpath(__name:Pchar; __resolved:Pchar):Pchar;cdecl;external clib name 'realpath'; function toRealPath( path:String ): String; var buf: array[0..PATH_MAX] of char; resolvedPath: pchar; begin resolvedPath:= realpath( pchar(path), buf ); if resolvedPath<>nil then Result:= resolvedPath else Result:= path; end; procedure TDarwinFSWatcher.addPath( path:String ); var nsPath: NSString; nsRealPath: NSString; begin _lockObject.Acquire; try if path<>PathDelim then path:= ExcludeTrailingPathDelimiter(path); nsPath:= StringToNSString( path ); if _watchPaths.containsObject(nsPath) then exit; _watchPaths.addObject( nsPath ); nsRealPath:= StringToNSString( toRealPath(path) ); _watchRealPaths.addObject( nsRealPath ); interrupt; finally _lockObject.Release; end; end; procedure TDarwinFSWatcher.removePath( path:String ); var index: NSInteger; nsPath: NSString; begin _lockObject.Acquire; try if path<>PathDelim then path:= ExcludeTrailingPathDelimiter(path); nsPath:= StringToNSString( path ); index:= _watchPaths.indexOfObject( nsPath ); if index = NSNotFound then exit; _watchPaths.removeObjectAtIndex( index ); _watchRealPaths.removeObjectAtIndex( index ); interrupt; finally _lockObject.Release; end; end; procedure TDarwinFSWatcher.clearPath; begin _lockObject.Acquire; try if _watchPaths.count = 0 then exit; _watchPaths.removeAllObjects; _watchRealPaths.removeAllObjects; interrupt; finally _lockObject.Release; end; end; procedure TDarwinFSWatcher.waitPath; begin _pathsSyncObject.WaitFor( INFINITE ); _pathsSyncObject.ResetEvent; end; procedure TDarwinFSWatcher.notifyPath; begin _pathsSyncObject.SetEvent; end; initialization kFSEventStreamEventExtendedDataPathKey:= CFSTR('path'); kFSEventStreamEventExtendedFileIDKey:= CFSTR('fileID'); isFlagUseExtendedDataSupported:= (NSAppKitVersionNumber>=NSAppKitVersionNumber10_13); end. doublecmd-1.1.30/src/platform/unix/darwin/uapplemagnifiedmodefix.pas0000644000175000001440000000242415104114162024664 0ustar alexxusersunit uAppleMagnifiedModeFix; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface implementation uses BaseUnix, CocoaAll; const SecondStart = 'SecondStart'; AppleMagnifiedMode = 'AppleMagnifiedMode'; var UserDefaults: NSUserDefaults; function setenv(const name, value: pchar; overwrite: longint): longint; cdecl; external 'c' name 'setenv'; procedure ExportLanguage; var CurrentLocale: NSLocale; Language, Country: String; begin if fpGetEnv(PAnsiChar('LANG')) = '' then begin CurrentLocale:= NSLocale.currentLocale(); Country:= NSString(CurrentLocale.objectForKey(NSLocaleCountryCode)).UTF8String; Language:= NSString(CurrentLocale.objectForKey(NSLocaleLanguageCode)).UTF8String; if (Length(Language) > 0) and (Length(Country) > 0) then begin Language:= Language + '_' + Country + '.UTF-8'; setenv('LANG', PAnsiChar(Language), 1); WriteLn('Export LANG=' + Language); end; end; end; initialization {$IFDEF LCLQT} ExportLanguage; {$ENDIF} UserDefaults:= NSUserDefaults.standardUserDefaults; if not UserDefaults.boolForKey(NSSTR(SecondStart)) then begin UserDefaults.setBool_forKey(True, NSSTR(SecondStart)); UserDefaults.setBool_forKey(False, NSSTR(AppleMagnifiedMode)); UserDefaults.synchronize; end; end. doublecmd-1.1.30/src/platform/umicrolibc.pas0000644000175000001440000001207215104114162020037 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Some standard C library functions Copyright (C) 2017-2018 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uMicroLibC; {$mode objfpc}{$H+} interface uses SysUtils, CTypes {$IF DEFINED(UNIX)} , InitC {$ENDIF} ; {$IF DEFINED(MSWINDOWS)} const clib = 'msvcrt.dll'; const _IOFBF = $0000; _IONBF = $0004; _IOLBF = $0040; function fpgetCerrno: cint; procedure fpsetCerrno(err: cint); {$ELSE} const _IOFBF = 0; //* Fully buffered. */ _IOLBF = 1; //* Line buffered. */ _IONBF = 2; //* No buffering. */ function fpgetCerrno: cint; inline; {$ENDIF} function csystem(const command: String): cint; function cfopen(const path, mode: String): Pointer; function cpopen(const command, mode: String): Pointer; function cstrerror(errnum: cint): PAnsiChar; cdecl; external clib name 'strerror'; {$IF DEFINED(MSWINDOWS)} function cpclose(stream: Pointer): cint; cdecl; external clib name '_pclose'; {$ELSE} function cpclose(stream: Pointer): cint; cdecl; external clib name 'pclose'; {$ENDIF} function cftell(stream: Pointer): cuint32; cdecl; external clib name 'ftell'; function cfseek(stream: Pointer; offset: clong; origin: cint): cint; cdecl; external clib name 'fseek'; procedure cclearerr(stream: Pointer); cdecl; external clib name 'clearerr'; function cferror(stream: Pointer): cint; cdecl; external clib name 'ferror'; function csetvbuf(stream: Pointer; buffer: PAnsiChar; mode: cint; size: csize_t): cint; cdecl; external clib name 'setvbuf'; function cgetc(stream: Pointer): cint; cdecl; external clib name 'getc'; function cungetc(c: cint; stream: Pointer): cint; cdecl; external clib name 'ungetc'; function cfgets(str: PAnsiChar; n: cint; stream: Pointer): PAnsiChar; cdecl; external clib name 'fgets'; function cfread(buffer: Pointer; size, count: csize_t; stream: Pointer): csize_t; cdecl; external clib name 'fread'; function cfwrite(buffer: Pointer; size, count: csize_t; stream: Pointer): csize_t; cdecl; external clib name 'fwrite'; function cfflush(stream: Pointer): cint; cdecl; external clib name 'fflush'; function ctmpfile(): Pointer; cdecl; external clib name 'tmpfile'; function cfclose(stream: Pointer): cint; cdecl; external clib name 'fclose'; function cfprintf(stream: Pointer; format: PAnsiChar): cint; cdecl; varargs; external clib name 'fprintf'; function cfscanf(stream: Pointer; format: PAnsiChar; argument: Pointer): cint; cdecl; external clib name 'fscanf'; property cerrno: cint read fpgetCerrno write fpsetcerrno; implementation uses {$IF DEFINED(MSWINDOWS)} LazUTF8, DCWindows; {$ELSE} DCConvertEncoding; {$ENDIF} {$IF DEFINED(MSWINDOWS)} function _wsystem(const command: pwidechar): cint; cdecl; external clib; function _wfopen(const filename, mode: pwidechar): Pointer; cdecl; external clib; function _wpopen(const command, mode: pwidechar): Pointer; cdecl; external clib; function geterrnolocation: pcint; cdecl; external clib name '_errno'; function fpgetCerrno:cint; begin fpgetCerrno:= geterrnolocation^; end; procedure fpsetCerrno(err:cint); begin geterrnolocation^:= err; end; {$ELSE} function system(const command: PAnsiChar): cint; cdecl; external clib; function popen(const command, mode: PAnsiChar): Pointer; cdecl; external clib; function fopen(const filename, mode: PAnsiChar): Pointer; cdecl; external clib; function fpgetCerrno: cint; inline; begin Result:= InitC.fpgetCerrno; end; {$ENDIF} function cfopen(const path, mode: String): Pointer; {$IF DEFINED(MSWINDOWS)} begin Result:= _wfopen(PWideChar(UTF16LongName(path)), PWideChar(UnicodeString(mode))); end; {$ELSE} begin Result:= fopen(PAnsiChar(CeUtf8ToSys(path)), PAnsiChar(mode)); end; {$ENDIF} function cpopen(const command, mode: String): Pointer; {$IF DEFINED(MSWINDOWS)} begin Result:= _wpopen(PWideChar(UTF8ToUTF16(command)), PWideChar(UnicodeString(mode))); end; {$ELSE} begin cfflush(nil); Result:= popen(PAnsiChar(CeUtf8ToSys(command)), PAnsiChar(mode)); end; {$ENDIF} function csystem(const command: String): cint; {$IF DEFINED(MSWINDOWS)} begin Result:= _wsystem(PWideChar(UTF8ToUTF16(command))); end; {$ELSE} begin Result:= system(PAnsiChar(CeUtf8ToSys(command))); end; {$ENDIF} end. doublecmd-1.1.30/src/platform/ukeyboard.pas0000644000175000001440000011260615104114162017700 0ustar alexxusers{ This unit handles anything regarding keyboard and keys. It is heavily dependent on operating system and widget set. For MSWINDOWS and Unix GTK1/2, QT. } unit uKeyboard; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLType; type TMenuKeyCap = (mkcClear, mkcBkSp, mkcTab, mkcEsc, mkcEnter, mkcSpace, mkcPgUp, mkcPgDn, mkcEnd, mkcHome, mkcLeft, mkcUp, mkcRight, mkcDown, mkcIns, mkcDel, mkcShift, mkcCtrl, mkcAlt, mkcMeta, mkcNumDivide, mkcNumMultiply, mkcNumAdd, mkcNumSubstract); const SmkcClear = 'Clear'; SmkcBkSp = 'BkSp'; SmkcTab = 'Tab'; SmkcEsc = 'Esc'; SmkcEnter = 'Enter'; SmkcSpace = 'Space'; SmkcPgUp = 'PgUp'; SmkcPgDn = 'PgDn'; SmkcEnd = 'End'; SmkcHome = 'Home'; SmkcLeft = 'Left'; SmkcUp = 'Up'; SmkcRight = 'Right'; SmkcDown = 'Down'; SmkcIns = 'Ins'; SmkcDel = 'Del'; SmkcShift = 'Shift+'; SmkcCtrl = 'Ctrl+'; SmkcAlt = 'Alt+'; SmkcCmd = 'Cmd+'; SmkcWin = 'WinKey+'; SmkcNumDivide = 'Num/'; SmkcNumMultiply = 'Num*'; SmkcNumAdd = 'Num+'; SmkcNumSubstract = 'Num-'; SmkcAtem = {$IF DEFINED(DARWIN)}SmkcWin{$ELSE}SmkcCmd{$ENDIF}; SmkcMeta = {$IF DEFINED(DARWIN)}SmkcCmd{$ELSE}SmkcWin{$ENDIF}; SmkcSuper = {$IF DEFINED(DARWIN)}SmkcCmd{$ELSE}SmkcCtrl{$ENDIF}; MenuKeyCaps: array[TMenuKeyCap] of string = ( SmkcClear, SmkcBkSp, SmkcTab, SmkcEsc, SmkcEnter, SmkcSpace, SmkcPgUp, SmkcPgDn, SmkcEnd, SmkcHome, SmkcLeft, SmkcUp, SmkcRight, SmkcDown, SmkcIns, SmkcDel, SmkcShift, SmkcCtrl, SmkcAlt, SmkcMeta, SmkcNumDivide, SmkcNumMultiply, SmkcNumAdd, SmkcNumSubstract); // Modifiers that can be used for shortcuts (non-toggable). KeyModifiersShortcut = [ssShift, ssAlt, ssCtrl, ssMeta, ssSuper, ssHyper, ssAltGr]; // Modifiers that change meaning of entered text (case, non-ASCII characters). KeyModifiersText = [ssShift, ssAltGr, ssCaps]; // Modifiers that can be used for shortcuts without taking into account text modifiers. KeyModifiersShortcutNoText = KeyModifiersShortcut - KeyModifiersText; {en Retrieves current modifiers state of the keyboard. } function GetKeyShiftStateEx: TShiftState; function KeyToShortCutEx(Key: Word; Shift: TShiftState): TShortCut; function ModifiersTextToShortcutEx(const ModifiersText: String; out ModLength: Integer): TShortCut; {en Changes order of modifiers in text to always be the same. } function NormalizeModifiers(ShortCutText: String): String; function ShiftToShortcutEx(ShiftState: TShiftState): TShortCut; function ShiftToTextEx(ShiftState: TShiftState): String; function ShortcutToShiftEx(Shortcut: TShortCut): TShiftState; function ShortCutToTextEx(ShortCut: TShortCut): String; function TextToShortCutEx(const ShortCutText: String): TShortCut; {en Tries to translate virtual key (VK_..) into a valid UTF8 character, taking into account modifiers state. @param(Key Virtual key code.) @param(ShiftState Keyboard modifiers that should be taken into account when determining the character.) } function VirtualKeyToUTF8Char(Key: Byte; ShiftState: TShiftState = []): TUTF8Char; {en Returns text description of a virtual key trying to take into account given modifiers state. For keys that have characters assigned it usually returns that character, for others some textual description. @param(Key Virtual key code.) @param(ShiftState Keyboard modifiers that should be taken into account when determining the description.) @return(UTF8 character assigned to Key or an empty string.) } function VirtualKeyToText(Key: Byte; ShiftState: TShiftState = []): string; {$IFDEF MSWINDOWS} {en If a virtual key with any modifiers produces valid ANSI or UNICODE character, that character is returned in UTF8 encoding. @param(Key Virtual key code.) @param(ExcludeShiftState Which modifiers should not be taken into account when determining possible character.) @return(UTF8 character assigned to Key or an empty string.) } function GetInternationalCharacter(Key: Word; ExcludeShiftState: TShiftState = []): TUTF8Char; {$ENDIF} function IsShortcutConflictingWithOS(Shortcut: String): Boolean; {en Initializes keyboard module. Should be called after Application.Initialize. } procedure InitializeKeyboard; procedure CleanupKeyboard; {en Should be called after main form has been created. } procedure HookKeyboardLayoutChanged; {en Should be called whenever a keyboard layout modification is detected. } procedure OnKeyboardLayoutChanged; {$IFDEF MSWINDOWS} var // True, if the current keyboard layout's right Alt key is mapped as AltGr. HasKeyboardAltGrKey : Boolean = False; {$ENDIF} implementation {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$DEFINE X11} {$ENDIF} uses LCLProc, LCLIntf, LazUTF8 {$IF DEFINED(MSWINDOWS)} , Windows {$ENDIF} {$IF DEFINED(LCLGTK)} , Gdk, GLib , GtkProc , XLib, X {$ENDIF} {$IF DEFINED(LCLGTK2)} , Gdk2, GLib2, Gtk2Extra , Gtk2Proc {$ENDIF} {$IF DEFINED(LCLGTK3)} , LazGdk3, LazGLib2, LazGObject2 {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} {$IF DEFINED(LCLQT)} , qt4, qtwidgets, qtint {$ELSEIF DEFINED(LCLQT5)} , qt5, qtwidgets, qtint {$ELSEIF DEFINED(LCLQT6)} , qt6, qtwidgets, qtint {$ENDIF} , XLib, X , xutil, KeySym , Forms // for Application.MainForm {$ENDIF} ; type TModifiersMap = record Shift: TShiftStateEnum; Shortcut: TShortCut; Text: TMenuKeyCap; end; const ModifiersMap: array [0..3] of TModifiersMap = ((Shift: ssCtrl; Shortcut: scCtrl; Text: mkcCtrl), (Shift: ssShift; Shortcut: scShift; Text: mkcShift), (Shift: ssAlt; Shortcut: scAlt; Text: mkcAlt), (Shift: ssMeta; Shortcut: scMeta; Text: mkcMeta) ); {$IF DEFINED(X11)} var {$IF DEFINED(LCLGTK)} XDisplay: PDisplay = nil; {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} XDisplay: PGdkDisplay = nil; {$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} XDisplay: PDisplay = nil; {$ENDIF} {$ENDIF} {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))} var {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // This is set to a virtual key number that AltGr is mapped on. VK_ALTGR: Byte = VK_UNDEFINED; {$ENDIF} {$IF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} KeysChangesSignalHandlerId : gulong = 0; {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} type TKeyboardLayoutChangedHook = class private EventHook: QObject_hookH; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; // called by QT public constructor Create(QObject: QObjectH); destructor Destroy; override; end; var // Used to catch "keyboard layout modified" event. KeyboardLayoutChangedHook: TKeyboardLayoutChangedHook = nil; ShiftMask : Cardinal = 0; AltGrMask : Cardinal = 0; {$ENDIF} var VKToCharArray: array[Low(Byte)..High(Byte)] of String; {$IF DEFINED(LCLGTK)} function XKeycodeToKeysym(para1:PDisplay; para2:TKeyCode; index:integer):TKeySym;cdecl;external libX11; {$ENDIF} procedure CacheVKToChar; var Key: Byte; begin for Key := Low(VKToCharArray) to High(VKToCharArray) do case Key of VK_BACK: VKToCharArray[Key] := MenuKeyCaps[mkcBkSp]; VK_TAB: VKToCharArray[Key] := MenuKeyCaps[mkcTab]; VK_CLEAR: VKToCharArray[Key] := MenuKeyCaps[mkcClear]; VK_RETURN: VKToCharArray[Key] := MenuKeyCaps[mkcEnter]; VK_ESCAPE: VKToCharArray[Key] := MenuKeyCaps[mkcEsc]; VK_SPACE..VK_DOWN: VKToCharArray[Key] := MenuKeyCaps[TMenuKeyCap(Ord(mkcSpace) + Key - VK_SPACE)]; VK_INSERT: VKToCharArray[Key] := MenuKeyCaps[mkcIns]; VK_DELETE: VKToCharArray[Key] := MenuKeyCaps[mkcDel]; VK_0..VK_9: VKToCharArray[Key] := Chr(Key - VK_0 + Ord('0')); VK_A..VK_Z: VKToCharArray[Key] := Chr(Key - VK_A + Ord('A')); VK_NUMPAD0..VK_NUMPAD9: VKToCharArray[Key] := Chr(Key - VK_NUMPAD0 + Ord('0')); VK_DIVIDE: VKToCharArray[Key] := MenuKeyCaps[mkcNumDivide]; VK_MULTIPLY: VKToCharArray[Key] := MenuKeyCaps[mkcNumMultiply]; VK_SUBTRACT: VKToCharArray[Key] := MenuKeyCaps[mkcNumSubstract]; VK_ADD: VKToCharArray[Key] := MenuKeyCaps[mkcNumAdd]; VK_F1..VK_F24: VKToCharArray[Key] := 'F' + IntToStr(Key - VK_F1 + 1); VK_LCL_MINUS: VKToCharArray[Key] := '-'; VK_LCL_EQUAL: VKToCharArray[Key] := '='; VK_LCL_OPEN_BRACKET: VKToCharArray[Key] := '['; VK_LCL_CLOSE_BRACKET: VKToCharArray[Key] := ']'; VK_LCL_BACKSLASH: VKToCharArray[Key] := '\'; VK_LCL_SEMI_COMMA: VKToCharArray[Key] := ';'; VK_LCL_QUOTE: VKToCharArray[Key] := ''''; VK_LCL_COMMA: VKToCharArray[Key] := ','; VK_LCL_POINT: VKToCharArray[Key] := '.'; VK_LCL_SLASH: VKToCharArray[Key] := '/'; VK_LCL_TILDE: VKToCharArray[Key] := '`'; else VKToCharArray[Key] := VirtualKeyToUTF8Char(Key, []); end; end; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} {en Retrieves the character and respective modifiers state for the given keysym and given level. } procedure XKeysymToUTF8Char(XKeysym: TKeySym; ShiftLevel: Cardinal; out ShiftState: TShiftState; out KeyChar: TUTF8Char); var XKeycode: TKeyCode; XKeyEvent: TXKeyEvent; KeySymChars: array[0..16] of Char; KeySymCharLen: Integer; Level: Integer; begin KeyChar := ''; ShiftState := []; XKeycode := XKeysymToKeycode(XDisplay, XKeysym); if XKeycode <> 0 then begin // 4 levels - two groups of two characters each (unshifted/shifted). // AltGr is usually the group switch. for Level := 0 to 3 do begin if XKeysym = XKeycodeToKeysym(XDisplay, XKeyCode, Level) then begin // Init dummy XEvent to retrieve the char corresponding to the keycode. FillChar(XKeyEvent, SizeOf(XKeyEvent), 0); XKeyEvent._Type := KeyPress; XKeyEvent.Display := XDisplay; XKeyEvent.Same_Screen := TBool(1); // True XKeyEvent.KeyCode := XKeyCode; case ShiftLevel of 0: XKeyEvent.State := 0; // 1st group 1: XKeyEvent.State := ShiftMask; // 1st group 2: XKeyEvent.State := AltGrMask; // 2nd group 3: XKeyEvent.State := AltGrMask or ShiftMask; // 2nd group else XKeyEvent.State := 0; end; // Retrieve the character for this KeySym. KeySymCharLen := XLookupString(@XKeyEvent, KeySymChars, SizeOf(KeySymChars), nil, nil); // Delete ending zero. if (KeySymCharLen > 0) and (KeySymChars[KeySymCharLen - 1] = #0) then Dec(KeySymCharLen); if KeySymCharLen > 0 then begin SetString(KeyChar, KeySymChars, KeySymCharLen); // Get modifier keys of the found keysym. case Level of 0: ShiftState := []; 1: ShiftState := [ssShift]; 2: ShiftState := [ssAltGr]; 3: ShiftState := [ssShift, ssAltGr]; end; end; Exit; end end; end; end; {$ENDIF} function GetKeyShiftStateEx: TShiftState; {$IF DEFINED(LCLGTK2) and DEFINED(X11)} function GetKeyState(nVirtKey: Integer): Smallint; var Mask, State: TGdkModifierType; begin Result := LCLIntf.GetKeyState(nVirtKey); case nVirtKey of VK_SHIFT, VK_LSHIFT, VK_RSHIFT : Mask := GDK_SHIFT_MASK; VK_CONTROL, VK_LCONTROL, VK_RCONTROL : Mask := GDK_CONTROL_MASK; else Exit; end; State := -1; gdk_window_get_pointer(nil, nil, nil, @State); if (State <> -1) and (State and Mask = 0) then Result := 0; end; {$ENDIF} function IsKeyDown(Key: Integer): Boolean; begin Result := (GetKeyState(Key) and $8000) <> 0; end; procedure GetMouseButtonState; var bSwapButton: Boolean; begin bSwapButton:= GetSystemMetrics(SM_SWAPBUTTON) <> 0; if IsKeyDown(VK_LBUTTON) then begin if bSwapButton then Include(Result, ssRight) else Include(Result, ssLeft); end; if IsKeyDown(VK_RBUTTON) then begin if bSwapButton then Include(Result, ssLeft) else Include(Result, ssRight); end; end; begin Result:=[]; GetMouseButtonState; {$IFDEF MSWINDOWS} if HasKeyboardAltGrKey then begin // Windows maps AltGr as Ctrl+Alt combination, so if AltGr is pressed, // it cannot be detected if Ctrl is pressed too. Therefore if AltGr // is pressed we don't include Ctrl in the result. Unless Left Alt is also // pressed - then we do include it under the assumption that the user // pressed Ctrl+Left Alt. The limitation is that a combination of // LeftAlt + AltGr is reported as [ssCtrl, ssAlt, ssAltGr]. if IsKeyDown(VK_LCONTROL) and ((not IsKeyDown(VK_RMENU)) or IsKeyDown(VK_LMENU)) then Include(Result,ssCtrl); if IsKeyDown(VK_RMENU) then Include(Result,ssAltGr); end else {$ENDIF} begin if IsKeyDown(VK_RMENU) or IsKeyDown(VK_MENU) then Include(Result,ssAlt); if IsKeyDown(VK_LCONTROL) or IsKeyDown(VK_CONTROL) then Include(Result,ssCtrl); end; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} if (VK_ALTGR <> VK_UNDEFINED) and IsKeyDown(VK_ALTGR) then Include(Result,ssAltGr); {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} // QtGroupSwitchModifier is only recognized on X11. if (QApplication_keyboardModifiers and QtGroupSwitchModifier) > 0 then Include(Result,ssAltGr); {$ENDIF} if IsKeyDown(VK_RCONTROL) then Include(Result, ssCtrl); if IsKeyDown(VK_LMENU) then Include(Result, ssAlt); if IsKeyDown(VK_SHIFT) then Include(Result, ssShift); if IsKeyDown(VK_LWIN) or IsKeyDown(VK_RWIN) then Include(Result, ssMeta); if (GetKeyState(VK_CAPITAL) and $1) <> 0 then // Caps-lock toggled Include(Result, ssCaps); end; function KeyToShortCutEx(Key: Word; Shift: TShiftState): TShortCut; begin Result := (Key and $FF) or ShiftToShortcutEx(Shift); end; function ModifiersTextToShortcutEx(const ModifiersText: String; out ModLength: Integer): TShortCut; var StartPos: Integer; i: Integer = 0; Found: Boolean = True; function CompareFront(const Front: String): Boolean; begin if (Front <> '') and (StartPos + length(Front) - 1 <= length(ModifiersText)) and (AnsiStrLIComp(@ModifiersText[StartPos], PChar(Front), Length(Front)) = 0) then begin Result := True; Inc(StartPos, length(Front)); end else Result := False; end; begin Result := 0; StartPos := 1; while Found do begin Found := False; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if CompareFront(MenuKeyCaps[ModifiersMap[i].Text]) then begin Result := Result or ModifiersMap[i].Shortcut; Found := True; Break; end; end; // Special case if not Found then begin if CompareFront(SmkcAtem) then begin Result := Result or scMeta; Found := True; end; end; end; ModLength := StartPos - 1; end; function NormalizeModifiers(ShortCutText: String): String; var ModLength: Integer; Shortcut: TShortCut; begin Shortcut := ModifiersTextToShortcutEx(ShortCutText, ModLength); Result := ShiftToTextEx(ShortcutToShiftEx(Shortcut)) + Copy(ShortCutText, ModLength + 1, MaxInt); end; function ShiftToShortcutEx(ShiftState: TShiftState): TShortCut; var i: Integer; begin Result := 0; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if ModifiersMap[i].Shift in ShiftState then Inc(Result, ModifiersMap[i].Shortcut); end; end; function ShiftToTextEx(ShiftState: TShiftState): String; var i: Integer; begin Result := EmptyStr; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if ModifiersMap[i].Shift in ShiftState then Result := Result + MenuKeyCaps[ModifiersMap[i].Text]; end; end; function ShortcutToShiftEx(Shortcut: TShortCut): TShiftState; var i: Integer; begin Result := []; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if Shortcut and ModifiersMap[i].Shortcut <> 0 then Include(Result, ModifiersMap[i].Shift); end; end; function ShortCutToTextEx(ShortCut: TShortCut): String; begin Result := VirtualKeyToText(Byte(ShortCut and $FF), ShortcutToShiftEx(ShortCut)); end; function TextToShortCutEx(const ShortCutText: String): TShortCut; var Key: TShortCut; Shift: TShortCut; Name: String; StartPos: Integer; begin Result := 0; Shift := ModifiersTextToShortcutEx(ShortCutText, StartPos); Inc(StartPos); // Get text for the key if anything left in the string. if StartPos <= Length(ShortCutText) then begin { Copy range from table in ShortCutToText } for Key := $08 to $FF do begin Name := VirtualKeyToText(Key); if (Name <> '') and (length(Name) = length(ShortCutText) - StartPos + 1) and (AnsiStrLIComp(@ShortCutText[StartPos], PChar(Name), length(Name)) = 0) then begin Exit(Key or Shift); end; end; end; end; function VirtualKeyToUTF8Char(Key: Byte; ShiftState: TShiftState): TUTF8Char; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} function ShiftStateToXModifierLevel(ShiftState: TShiftState): Cardinal; begin Result := 0; if ssShift in ShiftState then Result := Result or 1; if ssAltGr in ShiftState then Result := Result or 2; end; {$ENDIF} var {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} KeyInfo: TVKeyInfo; {$ENDIF} ShiftedChar: Boolean; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} KeyChar:TUTF8Char; KeySym: TKeySym; TempShiftState: TShiftState; {$ENDIF} begin Result := ''; // Upper case if either caps-lock is toggled or shift pressed. ShiftedChar := (ssCaps in ShiftState) xor (ssShift in ShiftState); {$IF DEFINED(MSWINDOWS)} Result := GetInternationalCharacter(Key, GetKeyShiftStateEx - ShiftState); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} KeyInfo := GetVKeyInfo(Key); // KeyInfo.KeyChar contains characters according to modifiers: // [0] - unshifted [2] - unshifted + AltGr // [1] - shifted [3] - shifted + AltGr // Caps-lock is handled below with ShiftedChar variable. Result := KeyInfo.KeyChar[ShiftStateToXModifierLevel(ShiftState)]; {$ELSEIF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} if (XDisplay = nil) then Exit; // For QT we'll use Xlib to get text for a key. KeySym := 0; case Key of VK_0..VK_9: Result := Char(Ord('0') + Key - VK_0); VK_A..VK_Z: Result := Char(Ord('A') + Key - VK_A); VK_NUMPAD0.. VK_NUMPAD9: Result := Char(Ord('0') + Key - VK_NUMPAD0); VK_MULTIPLY: KeySym := XK_KP_Multiply; VK_ADD: KeySym := XK_KP_Add; VK_SUBTRACT: KeySym := XK_KP_Subtract; VK_DIVIDE: KeySym := XK_KP_Divide; // These VKs might only work for US-layout keyboards. VK_OEM_PLUS: KeySym := XK_plus; VK_OEM_MINUS: KeySym := XK_minus; VK_OEM_COMMA: KeySym := XK_comma; VK_OEM_PERIOD: KeySym := XK_period; VK_SEPARATOR: KeySym := XK_comma; VK_DECIMAL: KeySym := XK_period; VK_OEM_1: KeySym := XK_semicolon; VK_OEM_3: KeySym := XK_quoteleft; VK_OEM_4: KeySym := XK_bracketleft; VK_OEM_5: KeySym := XK_backslash; VK_OEM_6: KeySym := XK_bracketright; VK_OEM_7: KeySym := XK_apostrophe; // Some additional keys for QT not mapped in TQtWidget.QtKeyToLCLKey. // Based on QT sources: src/gui/kernel/qkeymapper_x11.cpp. QtKey_Bar: KeySym := XK_bar; QtKey_Underscore: KeySym := XK_underscore; QtKey_Question: KeySym := XK_question; QtKey_AsciiCircum: KeySym := XK_asciicircum; // $C1 - $DA not used VK space // Some of these keys (not translated in QtKeyToLCLKey) are on international keyboards. QtKey_Aacute: KeySym := XK_aacute; QtKey_Acircumflex: KeySym := XK_acircumflex; QtKey_Atilde: KeySym := XK_atilde; QtKey_Adiaeresis: KeySym := XK_adiaeresis; QtKey_Aring: KeySym := XK_aring; QtKey_AE: KeySym := XK_ae; QtKey_Ccedilla: KeySym := XK_ccedilla; QtKey_Egrave: KeySym := XK_egrave; QtKey_Eacute: KeySym := XK_eacute; QtKey_Ecircumflex: KeySym := XK_ecircumflex; QtKey_Ediaeresis: KeySym := XK_ediaeresis; QtKey_Igrave: KeySym := XK_igrave; QtKey_Iacute: KeySym := XK_iacute; QtKey_Icircumflex: KeySym := XK_icircumflex; QtKey_Idiaeresis: KeySym := XK_idiaeresis; QtKey_ETH: KeySym := XK_eth; QtKey_Ntilde: KeySym := XK_ntilde; QtKey_Ograve: KeySym := XK_ograve; QtKey_Oacute: KeySym := XK_oacute; QtKey_Ocircumflex: KeySym := XK_ocircumflex; QtKey_Otilde: KeySym := XK_otilde; QtKey_Odiaeresis: KeySym := XK_odiaeresis; QtKey_multiply: KeySym := XK_multiply; QtKey_Ooblique: KeySym := XK_ooblique; QtKey_Ugrave: KeySym := XK_ugrave; QtKey_Uacute: KeySym := XK_uacute; end; if KeySym <> 0 then begin // Get character for a key with the given keysym // and with given modifiers applied. // Don't care about modifiers state, because we already have it. XKeysymToUTF8Char(KeySym, ShiftStateToXModifierLevel(ShiftState), TempShiftState, KeyChar); Result := KeyChar; end; {$ELSE} {$ENDIF} // Make upper case if either caps-lock is toggled or shift pressed. if Result <> '' then begin if ShiftedChar then Result := UTF8UpperCase(Result) else Result := UTF8LowerCase(Result); end; end; function VirtualKeyToText(Key: Byte; ShiftState: TShiftState): string; var Name: string; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} KeyChar: TUTF8Char; KeySym: TKeySym; TempShiftState: TShiftState; {$ENDIF} begin {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} // Overwrite behaviour for some keys in QT. case Key of QtKey_Bar: KeySym := XK_bar; // VK_F13 QtKey_Underscore: KeySym := XK_underscore; // VK_SLEEP {$IF DEFINED(LCLQT)} QtKey_QuoteLeft: KeySym := XK_quoteleft; {$ENDIF} else KeySym := 0; end; if (KeySym <> 0) and Assigned(XDisplay) then begin // Get base character for a key with the given keysym. // Don't care about modifiers state, because we already have it. XKeysymToUTF8Char(KeySym, 0, TempShiftState, KeyChar); Name := KeyChar; end else {$ENDIF} Name := VKToCharArray[Key]; if Name <> '' then Result := ShiftToTextEx(ShiftState) + Name else Result := ''; end; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} procedure UpdateGtkAltGrVirtualKeyCode; var VKNr: Byte; KeyInfo: TVKeyInfo; {$IFDEF LCLGTK2} GdkKey: TGdkKeymapKey = (KeyCode: 0; Group: 0; Level: 0); {$ENDIF} KeyVal: guint; begin VK_ALTGR := VK_UNDEFINED; // Search all virtual keys for a scancode of AltGraph. for VKNr := Low(Byte) to High(Byte) do begin KeyInfo := GetVKeyInfo(VKNr); if (KeyInfo.KeyCode[True] = 0) and // not extended (KeyInfo.KeyCode[False] <> 0) then begin {$IFDEF LCLGTK} KeyVal := XKeycodetoKeysym(XDisplay, KeyInfo.KeyCode[False], 0); if KeyVal = GDK_ISO_Level3_Shift then // AltGraph {$ELSE} GdkKey.keycode := KeyInfo.keycode[False]; KeyVal := gdk_keymap_lookup_key( gdk_keymap_get_for_display(XDisplay), @GdkKey); if KeyVal = GDK_KEY_ISO_Level3_Shift then // AltGraph {$ENDIF} begin VK_ALTGR := VKNr; Exit; end; end; end; end; {$ENDIF} {$IFDEF MSWINDOWS} function GetInternationalCharacter(Key: Word; ExcludeShiftState: TShiftState): TUTF8Char; var KeyboardState: array [0..255] of byte; wideChars: widestring; asciiChar: AnsiChar; IntResult: LongInt; function IsKeyDown(Key: Byte): Boolean; begin Result := (KeyboardState[Key] and $80)<>0; end; begin Result := ''; SetLength(wideChars, 16); // should be enough Windows.GetKeyboardState(KeyboardState); // Exclude not wanted modifiers. if ssCtrl in ExcludeShiftState then begin KeyboardState[VK_RCONTROL] := 0; if (not HasKeyboardAltGrKey) or (ssAltGr in ExcludeShiftState) or (not IsKeyDown(VK_RMENU)) // if AltGr not pressed then KeyboardState[VK_LCONTROL] := 0; end; if ssAlt in ExcludeShiftState then begin KeyboardState[VK_LMENU] := 0; if (not HasKeyboardAltGrKey) then KeyboardState[VK_RMENU] := 0; end; if ssAltGr in ExcludeShiftState then begin KeyboardState[VK_RMENU] := 0; if not IsKeyDown(VK_LMENU) then // if Left Alt not pressed KeyboardState[VK_LCONTROL] := 0; end; if ssCaps in ExcludeShiftState then KeyboardState[VK_CAPITAL] := 0; if ssShift in ExcludeShiftState then begin KeyboardState[VK_LSHIFT] := 0; KeyboardState[VK_RSHIFT] := 0; KeyboardState[VK_SHIFT] := 0; end; if (not IsKeyDown(VK_LCONTROL)) and (not IsKeyDown(VK_RCONTROL)) then KeyboardState[VK_CONTROL] := 0; if (not IsKeyDown(VK_LMENU)) and (not IsKeyDown(VK_RMENU)) then KeyboardState[VK_MENU] := 0; if (Win32Platform = VER_PLATFORM_WIN32_NT) then begin IntResult := Windows.ToUnicode(Key, 0, @KeyboardState, PWChar(wideChars), Length(wideChars), 0); if IntResult = 1 then Result := UTF8Copy(UTF16ToUTF8(wideChars), 1, 1); end else begin IntResult := Windows.ToAscii(Key, 0, @KeyboardState, @asciiChar, 0); if IntResult = 1 then Result := AnsiToUtf8(string(asciiChar)); end; end; procedure UpdateKeyboardLayoutAltGrFlag; type PKBDTABLES = ^KBDTABLES; KBDTABLES = record // not packed pCharModifers: Pointer; pVkToWCharTable: Pointer; pDeadKey: Pointer; pKeyNames: Pointer; pKeyNamesExt: Pointer; pKeyNamesDead: Pointer; pUsVscToVk: Pointer; MaxVscToVk: Byte; pVSCToVk_E0: Pointer; pVSCToVk_E1: Pointer; LocalFlags: DWORD; // <-- we only need this LgMaxD: Byte; cbLgEntry: Byte; pLigature: Pointer; end; const KBDTABLE_VERSION = 1; // Flags KLLF_ALTGR = 1; //KLLF_SHIFTLOCK = 2; //KLLF_LRM_RLM = 4; function GetKeyboardLayoutFileName: WideString; var KeyHandle: HKEY; KeyboardLayoutName: array [0..KL_NAMELENGTH-1] of WChar; RegistryKey : WideString = 'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\'; RegistryValue: WideString = 'Layout File'; BytesNeeded: DWORD; begin Result := ''; // Get current keyboard layout ID. if GetKeyboardLayoutNameW(KeyboardLayoutName) then begin RegistryKey := RegistryKey + PWChar(KeyboardLayoutName); // Read corresponding layout dll name from registry. if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWChar(RegistryKey), 0, KEY_QUERY_VALUE, @KeyHandle) = ERROR_SUCCESS) and (KeyHandle <> 0) then begin if RegQueryValueExW(KeyHandle, PWChar(RegistryValue), nil, nil, nil, @BytesNeeded) = ERROR_SUCCESS then begin SetLength(Result, BytesNeeded div SizeOf(WChar)); if RegQueryValueExW(KeyHandle, PWChar(RegistryValue), nil, nil, PByte(PWChar(Result)), @BytesNeeded) = ERROR_SUCCESS then begin Result := Result + #0; // end with zero to be sure end; end; RegCloseKey(KeyHandle); end; end; end; function GetKeyboardLayoutAltGrFlag(LayoutDllFileName: WideString): Boolean; type TKbdLayerDescriptor = function: PKBDTABLES; stdcall; var Handle: HMODULE; KbdLayerDescriptor: TKbdLayerDescriptor; Tables: PKBDTABLES; begin Result := False; // Load the keyboard layout dll. Handle := LoadLibraryW(PWChar(LayoutDllFileName)); if Handle <> 0 then begin KbdLayerDescriptor := TKbdLayerDescriptor(GetProcAddress(Handle, 'KbdLayerDescriptor')); if Assigned(KbdLayerDescriptor) then begin // Get the layout tables. Tables := KbdLayerDescriptor(); if Assigned(Tables) and (HIWORD(Tables^.LocalFlags) = KBDTABLE_VERSION) then begin // Read AltGr flag. Result := Boolean(Tables^.LocalFlags and KLLF_ALTGR); end; end; FreeLibrary(Handle); end; end; var FileName: WideString; begin HasKeyboardAltGrKey := False; FileName := GetKeyboardLayoutFileName; if FileName <> '' then HasKeyboardAltGrKey := GetKeyboardLayoutAltGrFlag(FileName); end; {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} procedure UpdateModifiersMasks; var Map: PXModifierKeymap; KeyCode: PKeyCode; KeySym: TKeySym; ModifierNr, l, Level: Integer; begin ShiftMask := 0; AltGrMask := 0; if Assigned(XDisplay) then begin Map := XGetModifierMapping(XDisplay); if Assigned(Map) then begin KeyCode := Map^.modifiermap; for ModifierNr := 0 to 7 do // Xlib uses up to 8 modifiers. begin // Scan through possible keycodes for each modifier. // We're looking for the keycodes assigned to Shift and AltGr. for l := 1 to Map^.max_keypermod do begin if KeyCode^ <> 0 then // Omit zero keycodes. begin for Level := 0 to 3 do // Check group 1 and group 2 (each has 2 keysyms) begin // Translate each keycode to keysym and check // if this is the modifier we are looking for. KeySym := XKeycodeToKeysym(XDisplay, KeyCode^, Level); // If found, assign mask according the the modifier number // (Shift by default should be the first modifier). case KeySym of XK_Mode_switch: AltGrMask := 1 shl ModifierNr; XK_Shift_L, XK_Shift_R: ShiftMask := 1 shl ModifierNr; end; end; end; Inc(KeyCode); end; end; XFreeModifiermap(Map); end; end; end; {$ENDIF} procedure OnKeyboardLayoutChanged; begin {$IFDEF MSWINDOWS} UpdateKeyboardLayoutAltGrFlag; {$ENDIF} {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} UpdateGtkAltGrVirtualKeyCode; {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} UpdateModifiersMasks; {$ENDIF} CacheVKToChar; end; {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} constructor TKeyboardLayoutChangedHook.Create(QObject: QObjectH); begin EventHook := QObject_hook_create(QObject); if Assigned(EventHook) then begin QObject_hook_hook_events(EventHook, @EventFilter); end; end; destructor TKeyboardLayoutChangedHook.Destroy; begin if Assigned(EventHook) then begin QObject_hook_destroy(EventHook); EventHook := nil; end; end; function TKeyboardLayoutChangedHook.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result := False; // Don't filter any events. // Somehow this event won't be sent to the window, // unless the user first presses a key inside it. if QEvent_type(Event) = QEventKeyboardLayoutChange then begin OnKeyboardLayoutChanged; end; end; {$ENDIF} {$IF DEFINED(UNIX)} {$IF DEFINED(LCLGTK)} function EventHandler(GdkXEvent: PGdkXEvent; GdkEvent: PGdkEvent; Data: gpointer): TGdkFilterReturn; cdecl; var XEvent: xlib.PXEvent; XMappingEvent: PXMappingEvent; begin Result := GDK_FILTER_CONTINUE; // Don't filter any events. XEvent := xlib.PXEvent(GdkXEvent); case XEvent^._type of MappingNotify{, 112}: begin XMappingEvent := PXMappingEvent(XEvent); case XMappingEvent^.request of MappingModifier, MappingKeyboard: begin XRefreshKeyboardMapping(XMappingEvent); OnKeyboardLayoutChanged; end; // Don't care about MappingPointer. end; end; end; end; {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} procedure KeysChangedSignalHandler(keymap: PGdkKeymap; Data: gpointer); cdecl; begin OnKeyboardLayoutChanged; end; {$ENDIF} {$ENDIF} procedure UnhookKeyboardLayoutChanged; begin {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} if Assigned(KeyboardLayoutChangedHook) then FreeAndNil(KeyboardLayoutChangedHook); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))} {$IF DEFINED(LCLGTK)} gdk_window_remove_filter(nil, @EventHandler, nil); {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} if (KeysChangesSignalHandlerId <> 0) and g_signal_handler_is_connected(gdk_keymap_get_for_display(XDisplay), KeysChangesSignalHandlerId) then begin g_signal_handler_disconnect(gdk_keymap_get_for_display(XDisplay), KeysChangesSignalHandlerId); KeysChangesSignalHandlerId := 0; end; {$ENDIF} {$ENDIF} end; procedure HookKeyboardLayoutChanged; begin UnhookKeyboardLayoutChanged; // On Unix (X server) the event for changing keyboard layout // is sent twice (on QT, GTK1 and GTK2). {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} KeyboardLayoutChangedHook := KeyboardLayoutChangedHook.Create( TQtWidget(Application.MainForm.Handle).TheObject); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLGTK3))} // On GTK1 XLib's MappingNotify event is used to detect keyboard mapping changes. // On GTK2 however (at least on my system), an event of type 112 instead of 34 // (which is a correct value for MappingNotify) is received, yet max value for // an event is 35. So, on GTK2 a GdkKeymap signal is used instead. {$IF DEFINED(LCLGTK)} gdk_window_add_filter(nil, @EventHandler, nil); // Filter events for all windows. {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} // Connect to GdkKeymap object for the given display. KeysChangesSignalHandlerId := g_signal_connect_data(gdk_keymap_get_for_display(XDisplay), 'keys-changed', TGCallback(@KeysChangedSignalHandler), nil, nil, {$IFDEF LCLGTK2}0{$ELSE}[]{$ENDIF}); {$ENDIF} {$ENDIF} end; function IsShortcutConflictingWithOS(Shortcut: String): Boolean; const KEY_HIGH = {$IF DEFINED(DARWIN)}28{$ELSE}27{$ENDIF}; const ConflictingShortcuts: array [0..KEY_HIGH] of String = (SmkcBkSp, // Delete previous character SmkcDel, // Delete next character SmkcLeft, // Move cursor left SmkcRight, // Move cursor right SmkcSpace, // Space {$IF DEFINED(DARWIN)} SmkcCmd + SmkcSpace, // Spotlight (Mac OS X) {$ENDIF DARWIN} SmkcWin, // Context menu SmkcShift + 'F10', // Context menu SmkcShift + SmkcDel, // Cut text SmkcShift + SmkcIns, // Paste text SmkcShift + SmkcHome, // Select to beginning SmkcShift + SmkcEnd, // Select to end SmkcShift + SmkcLeft, // Select previous character SmkcShift + SmkcRight, // Select next character SmkcSuper + 'A', // Select all SmkcSuper + 'C', // Copy text SmkcSuper + 'V', // Paste text SmkcSuper + 'X', // Cut text SmkcSuper + 'Z', // Undo SmkcSuper + SmkcBkSp, // Delete previous word SmkcSuper + SmkcDel, // Delete next word SmkcSuper + SmkcIns, // Copy text SmkcSuper + SmkcHome, // Move to beginning SmkcSuper + SmkcEnd, // Move to end SmkcSuper + SmkcLeft, // Move to beginning of word SmkcSuper + SmkcRight, // Move to end of word SmkcSuper + SmkcShift + 'Z', // Redo SmkcSuper + SmkcShift + SmkcLeft, // Select to beginning of word SmkcSuper + SmkcShift + SmkcRight); // Select to end of word var i: Integer; begin for i := Low(ConflictingShortcuts) to High(ConflictingShortcuts) do if Shortcut = ConflictingShortcuts[i] then Exit(True); Result := False; end; procedure InitializeKeyboard; begin OnKeyboardLayoutChanged; end; procedure CleanupKeyboard; begin UnhookKeyboardLayoutChanged; end; {$IF DEFINED(X11)} initialization // Get connection to X server. {$IF DEFINED(LCLGTK)} XDisplay := gdk_display; {$ELSEIF DEFINED(LCLGTK2) or DEFINED(LCLGTK3)} XDisplay := gdk_display_get_default; {$ELSEIF (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} if not IsWayland then XDisplay := XOpenDisplay(nil); {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and (DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6))} finalization if Assigned(XDisplay) then XCloseDisplay(XDisplay); {$ENDIF} end. doublecmd-1.1.30/src/platform/uinfotooltip.pas0000644000175000001440000002336115104114162020445 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains TFileInfoToolTip class and functions. Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uInfoToolTip; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, DCXmlConfig, uFile, uFileSource; type { THintItem } THintItem = class Name: String; Mask: String; Hint: String; function Clone: THintItem; end; { THintItemList } THintItemList = specialize TFPGObjectList; { TFileInfoToolTip } TFileInfoToolTip = class(TPersistent) protected FHintItemList: THintItemList; public constructor Create; destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure Clear; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure LoadFromFile(const FileName: String); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveToFile(const FileName: String); function ComputeSignature(Seed: dword = $00000000): dword; procedure Sort; property HintItemList: THintItemList read FHintItemList; end; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; implementation uses crc, LCLProc, StrUtils, uMasks, uDebug, uGlobs, uFileProperty, uFileFunctions, uSearchTemplate, uFileSourceProperty {$IF DEFINED(MSWINDOWS)} , uShlObjAdditional {$ENDIF} ,DCClassesUtf8; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; function GetDefaultToolTip(const Hint: String): String; begin Result:= Hint; if (fpModificationTime in aFile.SupportedProperties) and aFile.ModificationTimeProperty.IsValid then with (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if (fpSize in aFile.SupportedProperties) and aFile.SizeProperty.IsValid then with (aFile.Properties[fpSize] as TFileSizeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if (fpCompressedSize in aFile.SupportedProperties) and aFile.CompressedSizeProperty.IsValid then with (aFile.Properties[fpCompressedSize] as TFileCompressedSizeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; end; begin Result:= EmptyStr; if fspDirectAccess in aFileSource.Properties then begin case gShowToolTipMode of tttmCombineDcSystem, tttmDcSystemCombine, tttmDcIfPossThenSystem, tttmDcOnly: Result := StringReplace(gFileInfoToolTip.GetFileInfoToolTip(aFileSource, aFile), '\n', LineEnding, [rfReplaceAll]); tttmSystemOnly: Result := EmptyStr; end; {$IF DEFINED(MSWINDOWS)} case gShowToolTipMode of tttmCombineDcSystem: Result := IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + SHGetInfoTip(aFile.Path, aFile.Name); tttmDcSystemCombine: Result := SHGetInfoTip(aFile.Path, aFile.Name) + IfThen(Result = EmptyStr, EmptyStr, LineEnding + Result); tttmDcIfPossThenSystem: if Result = EmptyStr then Result := SHGetInfoTip(aFile.Path, aFile.Name); tttmDcOnly: ; tttmSystemOnly: Result := SHGetInfoTip(aFile.Path, aFile.Name); end; {$ELSE} case gShowToolTipMode of tttmCombineDcSystem: Result := IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDefaultToolTip(EmptyStr); tttmDcSystemCombine: Result := GetDefaultToolTip(EmptyStr) + IfThen(Result = EmptyStr, EmptyStr, LineEnding + Result); tttmDcIfPossThenSystem: if Result = EmptyStr then Result := GetDefaultToolTip(EmptyStr); tttmDcOnly: ; tttmSystemOnly: Result := GetDefaultToolTip(Result); end; {$ENDIF} end else begin Result:= GetDefaultToolTip(Result); end; end; { THintItem } function THintItem.Clone: THintItem; begin Result:= THintItem.Create; Result.Name:= Name; Result.Mask:= Mask; Result.Hint:= Hint; end; { TFileInfoToolTip } constructor TFileInfoToolTip.Create; begin FHintItemList:= THintItemList.Create(True); end; destructor TFileInfoToolTip.Destroy; begin FreeAndNil(FHintItemList); inherited Destroy; end; procedure TFileInfoToolTip.Clear; begin begin while FHintItemList.Count > 0 do begin //FHintItemList[0].Free; FHintItemList.Delete(0); end; end; end; procedure TFileInfoToolTip.Assign(Source: TPersistent); var I: LongInt; From: TFileInfoToolTip; begin Clear; From:= Source as TFileInfoToolTip; for I:= 0 to From.FHintItemList.Count - 1 do FHintItemList.Add(From.FHintItemList[I].Clone); end; function TFileInfoToolTip.GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; var I, J: Integer; HintItem: THintItem; begin Result:= EmptyStr; for I:= 0 to FHintItemList.Count - 1 do begin HintItem:= FHintItemList[I]; // Get hint by search template if IsMaskSearchTemplate(HintItem.Mask) then for J:= 0 to gSearchTemplateList.Count - 1 do with gSearchTemplateList do begin if (Templates[J].TemplateName = PChar(HintItem.Mask)+1) and Templates[J].CheckFile(AFile) then begin Result:= FormatFileFunctions(HintItem.Hint, aFile, aFileSource); Exit; end; end; // Get hint by file mask if MatchesMaskList(AFile.Name, HintItem.Mask) then begin Result:= FormatFileFunctions(HintItem.Hint, aFile, aFileSource); Exit; end; end; end; procedure TFileInfoToolTip.Load(AConfig: TXmlConfig; ANode: TXmlNode); var sMask, sName, sHint: String; MaskItem: THintItem; begin Clear; ANode := ANode.FindNode('CustomFields'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('CustomField') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', sName) and AConfig.TryGetValue(ANode, 'Mask', sMask) and AConfig.TryGetValue(ANode, 'Hint', sHint) then begin MaskItem:= THintItem.Create; MaskItem.Name := sName; MaskItem.Mask := sMask; MaskItem.Hint := sHint; FHintItemList.Add(MaskItem); end else begin DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; end; ANode := ANode.NextSibling; end; end; end; { TFileInfoToolTip.LoadFromFile } procedure TFileInfoToolTip.LoadFromFile(const FileName: String); var TooltipConfig: TXmlConfig = nil; Root, Node: TXmlNode; begin TooltipConfig := TXmlConfig.Create(FileName); try if TooltipConfig.Load then begin Root := TooltipConfig.RootNode; Node := Root.FindNode('ToolTips'); if Assigned(Node) then Load(TooltipConfig, Node); end; finally TooltipConfig.Free; end; end; procedure TFileInfoToolTip.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I : Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'CustomFields', True); AConfig.ClearNode(ANode); for I:=0 to FHintItemList.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'CustomField'); AConfig.AddValue(SubNode, 'Name', FHintItemList[I].Name); AConfig.AddValue(SubNode, 'Mask', FHintItemList[I].Mask); AConfig.AddValue(SubNode, 'Hint', FHintItemList[I].Hint); end; end; { TFileInfoToolTip.SaveToFile } procedure TFileInfoToolTip.SaveToFile(const FileName: String); var TooltipConfig: TXmlConfig = nil; Root, Node: TXmlNode; begin TooltipConfig := TXmlConfig.Create(FileName); try Root := TooltipConfig.RootNode; Node := TooltipConfig.FindNode(Root, 'ToolTips', True); Save(TooltipConfig, Node); TooltipConfig.Save; finally TooltipConfig.Free; end; end; { TFileInfoToolTip.ComputeSignature } function TFileInfoToolTip.ComputeSignature(Seed: dword): dword; procedure UpdateSignature(sInfo: string); begin if length(sInfo) > 0 then Result := crc32(Result, @sInfo[1], length(sInfo)); end; var Index: integer; begin Result := Seed; for Index := 0 to pred(FHintItemList.Count) do begin UpdateSignature(FHintItemList[Index].Name); UpdateSignature(FHintItemList[Index].Mask); UpdateSignature(FHintItemList[Index].Hint); end; end; { MyHintCompare } function MyHintCompare(const Item1, Item2: THintItem): integer; begin Result := CompareStr(Item1.Name, Item2.Name); end; { TFileInfoToolTip.Sort } procedure TFileInfoToolTip.Sort; begin Self.HintItemList.Sort(@MyHintCompare); end; end. doublecmd-1.1.30/src/platform/uicontheme.pas0000644000175000001440000005335215104114162020055 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Simple implementation of Icon Theme based on FreeDesktop.org specification (http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) (https://gitlab.gnome.org/GNOME/gtk/blob/main/docs/iconcache.txt) Copyright (C) 2009-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uIconTheme; {$mode objfpc}{$H+} interface uses SysUtils, Classes, DCOSUtils, DCStringHashListUtf8, DCClassesUtf8; type { TIconCache } TIconCache = class private FFile: TFileMapRec; function Validate: Boolean; function LoadFromFile(const FileName: String): Boolean; function GetDirectoryIndex(const Name: PAnsiChar): Integer; public destructor Destroy; override; function GetIcons(const Directory: String): TStringHashListUtf8; class function CreateFrom(const Directory: String): TIconCache; end; type TIconType = (itFixed, itScalable, itThreshold); TIconDirInfo = record IconSize: Integer; IconScale: Integer; //IconContext: String; // currently not used IconType: TIconType; IconMaxSize, IconMinSize, IconThreshold: Integer; FileListCache: array of TStringHashListUtf8; end; PIconDirInfo = ^TIconDirInfo; { TIconDirList } TIconDirList = class (TStringList) private function GetIconDir(Index: Integer): PIconDirInfo; public destructor Destroy; override; function Add(IconDirName: String; IconDirInfo: PIconDirInfo): Integer; reintroduce; property Items[Index: Integer]: PIconDirInfo read GetIconDir; end; { TIconTheme } TIconTheme = class protected FTheme, FThemeName: String; FComment: String; FCache: TIconCache; FCacheIndex: Integer; FDefaultTheme: String; FInherits: TStringList; FOwnsInheritsObject: Boolean; FDirectories: TIconDirList; FBaseDirList: array of String; //en> List of directories that have this theme's icons. FBaseDirListAtCreate: array of String; //en> Base dir list passed to Create function LoadIconDirInfo(const IniFile: TIniFileEx; const sIconDirName: String): PIconDirInfo; function FindIconHelper(aIconName: String; AIconSize, AIconScale: Integer): String; function LoadThemeWithInherited(AInherits: TStringList): Boolean; procedure LoadParentTheme(AThemeName: String); procedure CacheDirectoryFiles(SubDirIndex: Integer; BaseDirIndex: Integer); protected function LookupIcon(AIconName: String; AIconSize, AIconScale: Integer): String; function CreateParentTheme(const sThemeName: String): TIconTheme; virtual; public constructor Create(sThemeName: String; var BaseDirList: array of String; ADefaultTheme: String = ''); virtual; destructor Destroy; override; function Load: Boolean; virtual; function FindIcon(AIconName: String; AIconSize: Integer; AIconScale: Integer = 1): String; function DirectoryMatchesSize(SubDirIndex: Integer; AIconSize, AIconScale: Integer): Boolean; function DirectorySizeDistance(SubDirIndex: Integer; AIconSize, AIconScale: Integer): Integer; class function CutTrailingExtension(const AIconName: String): String; class procedure RegisterExtension(const AExtension: String); property ThemeName: String read FThemeName; property Directories: TIconDirList read FDirectories; property DefaultTheme: String read FDefaultTheme write FDefaultTheme; end; implementation uses LCLProc, StrUtils, uDebug, uFindEx, DCBasicTypes, DCStrUtils; const EXT_IDX_PNG = 0; EXT_IDX_XPM = 1; EXT_IDX_SVG = 2; const HAS_SUFFIX_XPM = 1; HAS_SUFFIX_SVG = 2; HAS_SUFFIX_PNG = 4; var IconExtensionList: TDynamicStringArray; function ReadUInt16(const P: Pointer; Offset: UInt32): UInt16; inline; begin Result:= BEtoN(PUInt16(PByte(P) + Offset)^); end; function ReadUInt32(const P: Pointer; Offset: UInt32): UInt32; inline; begin Result:= BEtoN(PUInt32(PByte(P) + Offset)^); end; { TIconCache } function TIconCache.Validate: Boolean; var I, J: Integer; Offset: UInt32; ACount: UInt32; AVersion: UInt16; HashOffset, HashCount: UInt32; ImageOffset, ImageCount: UInt32; ChainOffset, NameOffset: UInt32; function CheckString(S: PAnsiChar): Boolean; inline; begin Result:= (IndexByte(S^, 1024, 0) > -1); end; function CheckOffset(AOffset, ASize: UInt32): Boolean; inline; begin Result:= (AOffset + ASize < FFile.FileSize); end; begin Result:= False; if FFile.FileSize < 12 then Exit; AVersion:= ReadUInt16(FFile.MappedFile, 0); if AVersion <> 1 then Exit; AVersion:= ReadUInt16(FFile.MappedFile, 2); if AVersion <> 0 then Exit; Offset:= ReadUInt32(FFile.MappedFile, 8); if not CheckOffset(Offset, 4) then Exit; ACount:= ReadUInt32(FFile.MappedFile, Offset); for I:= 0 to Int32(ACount) - 1 do begin if not CheckOffset(Offset + 4 + I * 4, 4) then Exit; NameOffset:= ReadUInt32(FFile.MappedFile, Offset + 4 + I * 4); if not CheckOffset(NameOffset, 0) then Exit; CheckString(PAnsiChar(FFile.MappedFile) + NameOffset) end; HashOffset:= ReadUInt32(FFile.MappedFile, 4); if not CheckOffset(HashOffset, 4) then Exit; HashCount:= ReadUInt32(FFile.MappedFile, HashOffset); for I:= 0 to Int32(HashCount) - 1 do begin if not CheckOffset(HashOffset + 4 + I * 4, 4) then Exit(False); ChainOffset:= ReadUInt32(FFile.MappedFile, HashOffset + 4 + I * 4); while (ChainOffset <> $FFFFFFFF) do begin if not CheckOffset(ChainOffset + 8, 4) then Exit; NameOffset:= ReadUInt32(FFile.MappedFile, ChainOffset + 4); if not CheckOffset(NameOffset, 0) then Exit(False); CheckString(PAnsiChar(FFile.MappedFile) + NameOffset); ImageOffset:= ReadUInt32(FFile.MappedFile, ChainOffset + 8); if not CheckOffset(ImageOffset, 4) then Exit(False); ImageCount:= ReadUInt32(FFile.MappedFile, ImageOffset); for J:= 0 to Int32(ImageCount) - 1 do begin if not CheckOffset(ImageOffset + 4 + J * 8 + 2, 2) then Exit; end; ChainOffset:= ReadUInt32(FFile.MappedFile, ChainOffset); end; end; Result:= True; end; function TIconCache.LoadFromFile(const FileName: String): Boolean; begin Result:= MapFile(FileName, FFile); if Result and not Validate then begin Result:= False; UnMapFile(FFile); end; end; function TIconCache.GetDirectoryIndex(const Name: PAnsiChar): Integer; var Index: Integer; Offset: UInt32; ACount: UInt32; NameOffset: UInt32; DirectoryName: PAnsiChar; begin // Directory list offset Offset:= ReadUInt32(FFile.MappedFile, 8); ACount:= ReadUInt32(FFile.MappedFile, Offset); Offset:= Offset + 4; for Index:= 0 to Int32(ACount) - 1 do begin NameOffset:= ReadUInt32(FFile.MappedFile, Offset + Index * 4); DirectoryName:= PAnsiChar(FFile.MappedFile) + NameOffset; if StrComp(Name, DirectoryName) = 0 then Exit(Index); end; Result:= -1; end; destructor TIconCache.Destroy; begin UnMapFile(FFile); inherited Destroy; end; function TIconCache.GetIcons(const Directory: String): TStringHashListUtf8; var I, J: Integer; Flags: UInt16; ExtIdx: IntPtr; NameValue: PAnsiChar; DirectoryIndex: Integer; HashOffset, HashCount: UInt32; ImageOffset, ImageCount: UInt32; ChainOffset, NameOffset: UInt32; begin DirectoryIndex:= GetDirectoryIndex(PAnsiChar(Directory)); if DirectoryIndex < 0 then begin // DCDebug('Not found in cache ', Directory); Exit(nil); end; HashOffset:= ReadUInt32(FFile.MappedFile, 4); HashCount:= ReadUInt32(FFile.MappedFile, HashOffset); Result:= TStringHashListUtf8.Create(FileNameCaseSensitive); for I:= 0 to Int32(HashCount) - 1 do begin ChainOffset:= ReadUInt32(FFile.MappedFile, HashOffset + 4 + I * 4); while (ChainOffset <> $FFFFFFFF) do begin ImageOffset:= ReadUInt32(FFile.MappedFile, ChainOffset + 8); ImageCount:= ReadUInt32(FFile.MappedFile, ImageOffset); for J:= 0 to Int32(ImageCount) - 1 do begin if (DirectoryIndex = ReadUInt16(FFile.MappedFile, ImageOffset + 4 + J * 8)) then begin Flags:= ReadUInt16(FFile.MappedFile, ImageOffset + 4 + J * 8 + 2); if (Flags <> 0) then begin if (Flags and HAS_SUFFIX_SVG <> 0) then ExtIdx:= EXT_IDX_SVG else if (Flags and HAS_SUFFIX_PNG <> 0) then ExtIdx:= EXT_IDX_PNG else if (Flags and HAS_SUFFIX_XPM <> 0) then ExtIdx:= EXT_IDX_XPM else begin Break; end; NameOffset:= ReadUInt32(FFile.MappedFile, ChainOffset + 4); NameValue:= PAnsiChar(FFile.MappedFile) + NameOffset; Result.Add(StrPas(NameValue), Pointer(ExtIdx)); end; Break; end; end; ChainOffset:= ReadUInt32(FFile.MappedFile, ChainOffset); end; end; end; class function TIconCache.CreateFrom(const Directory: String): TIconCache; var FileName: String; CacheTime: DCBasicTypes.TFileTime; begin Result:= nil; FileName:= Directory + PathDelim + 'icon-theme.cache'; CacheTime:= mbFileAge(FileName); if (CacheTime <> DCBasicTypes.TFileTime(-1)) then begin if (CacheTime < mbFileAge(Directory)) then begin DCDebug('Icon cache outdated'); end else begin Result:= TIconCache.Create; if not Result.LoadFromFile(FileName) then begin FreeAndNil(Result); end; end; end; end; { TIconTheme } function TIconTheme.DirectoryMatchesSize(SubDirIndex: Integer; AIconSize, AIconScale: Integer): Boolean; begin Result:= False; // read Type and Size data from subdir if SubDirIndex < 0 then Exit; with FDirectories.Items[SubDirIndex]^ do begin if (IconScale <> AIconScale) then Exit; case IconType of itFixed: Result:= (IconSize = AIconSize); itScalable: Result:= (IconMinSize <= AIconSize) and (AIconSize <= IconMaxSize); itThreshold: Result:= ((IconSize - IconThreshold) <= AIconSize) and (AIconSize <= (IconSize + IconThreshold)); end; end; end; function TIconTheme.DirectorySizeDistance(SubDirIndex: Integer; AIconSize, AIconScale: Integer): Integer; begin Result:= 0; // read Type and Size data from subdir if SubDirIndex < 0 then Exit; with FDirectories.Items[SubDirIndex]^ do case IconType of itFixed: Result:= abs(IconSize * IconScale - AIconSize * AIconScale); itScalable: begin if AIconSize * AIconScale < IconMinSize * IconScale then Result:= IconMinSize * IconScale - AIconSize * AIconScale; if AIconSize * AIconScale > IconMaxSize * IconScale then Result:= AIconSize * AIconScale - IconMaxSize * IconScale; end; itThreshold: begin if AIconSize * AIconScale < (IconSize - IconThreshold) * IconScale then Result:= IconMinSize * IconScale - AIconSize * AIconScale; if AIconSize * AIconScale > (IconSize + IconThreshold) * IconScale then Result:= AIconSize * AIconScale - IconMaxSize * IconScale; end; end; end; constructor TIconTheme.Create(sThemeName: String; var BaseDirList: array of String; ADefaultTheme: String); var I, J: Integer; sElement: String; begin FTheme:= sThemeName; FDefaultTheme:= ADefaultTheme; FOwnsInheritsObject:= False; FDirectories:= nil; J:= 0; SetLength(FBaseDirList, Length(BaseDirList)); SetLength(FBaseDirListAtCreate, Length(BaseDirList)); for I:= Low(BaseDirList) to High(BaseDirList) do begin sElement:= BaseDirList[I]; // use only directories that has this theme if mbDirectoryExists(sElement + PathDelim + FTheme) then begin FBaseDirList[J]:= sElement; Inc(J); end; FBaseDirListAtCreate[I] := sElement; // Remember full base dir list. end; SetLength(FBaseDirList, J); end; destructor TIconTheme.Destroy; begin if FOwnsInheritsObject then begin FInherits.Free; end; FCache.Free; FreeAndNil(FDirectories); inherited Destroy; end; function TIconTheme.Load: Boolean; var ADefault: String; ADefaultArray: TDynamicStringArray; begin Result := LoadThemeWithInherited(FInherits); if Result and FOwnsInheritsObject then begin ADefaultArray:= SplitString(FDefaultTheme, PathSeparator); for ADefault in ADefaultArray do LoadParentTheme(ADefault); end; end; function TIconTheme.LoadThemeWithInherited(AInherits: TStringList): Boolean; var I: Integer; sValue: String; sElement: String; sThemeName: String; IniFile: TIniFileEx = nil; IconDirInfo: PIconDirInfo = nil; begin Result:= False; for I:= Low(FBaseDirList) to High(FBaseDirList) do begin sElement:= FBaseDirList[I] + PathDelim + FTheme + PathDelim + 'index.theme'; if mbFileExists(sElement) then begin DCDebug('Loading icon theme ', FTheme); FCache:= TIconCache.CreateFrom(FBaseDirList[I] + PathDelim + FTheme); sThemeName:= sElement; FCacheIndex:= I; Result:= True; Break; end; end; // theme not found if Result = False then begin DCDebug('Theme ', FTheme, ' not found'); Exit; end; FDirectories:= TIconDirList.Create; // list of parent themes if Assigned(AInherits) then // if this theme is child FInherits:= AInherits else // new theme begin FInherits:= TStringList.Create; FInherits.OwnsObjects:= True; FOwnsInheritsObject:= True; end; // load theme from file IniFile:= TIniFileEx.Create(sThemeName, fmOpenRead); try FThemeName:= IniFile.ReadString('Icon Theme', 'Name', EmptyStr); FComment:= IniFile.ReadString('Icon Theme', 'Comment', EmptyStr); // read theme directories sValue:= IniFile.ReadString('Icon Theme', 'Directories', EmptyStr); repeat sElement:= Copy2SymbDel(sValue, ','); IconDirInfo:= LoadIconDirInfo(IniFile, sElement); if Assigned(IconDirInfo) then FDirectories.Add(sElement, IconDirInfo); until sValue = EmptyStr; // load icons from cache if Assigned(FCache) then begin DCDebug('Loading theme icons from cache'); for I:= 0 to FDirectories.Count - 1 do begin FDirectories.Items[I]^.FileListCache[FCacheIndex]:= FCache.GetIcons(FDirectories[I]); end; end; // read parent themes sValue:= IniFile.ReadString('Icon Theme', 'Inherits', EmptyStr); if sValue <> EmptyStr then repeat sElement:= Copy2SymbDel(sValue, ','); LoadParentTheme(sElement); until sValue = EmptyStr; finally FreeAndNil(IniFile); end; end; procedure TIconTheme.LoadParentTheme(AThemeName: String); var Index: Integer; ATheme: TIconTheme; begin if (FTheme <> AThemeName) and (FInherits.IndexOf(AThemeName) < 0) then begin ATheme:= CreateParentTheme(AThemeName); Index:= FInherits.AddObject(AThemeName, ATheme); if not ATheme.LoadThemeWithInherited(FInherits) then begin FInherits.Delete(Index); end; end; end; function TIconTheme.FindIcon(AIconName: String; AIconSize: Integer; AIconScale: Integer): String; begin Result:= FindIconHelper(AIconName, AIconSize, AIconScale); { if Result = EmptyStr then Result:= LookupFallbackIcon(AIconName); } end; function TIconTheme.LookupIcon(AIconName: String; AIconSize, AIconScale: Integer): String; var ExtIdx: PtrInt; I, J, FoundIndex: Integer; MinimalSize, NewSize: Integer; begin Result:= EmptyStr; if not Assigned(FDirectories) then Exit; { This is a slightly more optimized version of the original algorithm from freedesktop.org. } MinimalSize:= MaxInt; for J:= Low(FBaseDirList) to High(FBaseDirList) do begin for I:= 0 to FDirectories.Count - 1 do begin NewSize:= DirectorySizeDistance(I, AIconSize, AIconScale); if (NewSize < MinimalSize) or (NewSize = 0) then begin if not Assigned(FDirectories.Items[I]^.FileListCache[J]) then CacheDirectoryFiles(I, J); FoundIndex:= FDirectories.Items[I]^.FileListCache[J].Find(AIconName); if FoundIndex >= 0 then begin ExtIdx:= PtrInt(FDirectories.Items[I]^.FileListCache[J].List[FoundIndex]^.Data); Result:= FBaseDirList[J] + PathDelim + FTheme + PathDelim + FDirectories.Strings[I] + PathDelim + AIconName + '.' + IconExtensionList[ExtIdx]; // Exact match if (NewSize = 0) and (AIconScale = FDirectories.Items[I]^.IconScale) then Exit else MinimalSize:= NewSize; end; end; end; end; end; function TIconTheme.CreateParentTheme(const sThemeName: String): TIconTheme; begin Result:= TIconTheme.Create(sThemeName, FBaseDirListAtCreate); end; function TIconTheme.LoadIconDirInfo(const IniFile: TIniFileEx; const sIconDirName: String): PIconDirInfo; var IconTypeStr: String; I: Integer; begin New(Result); with Result^ do begin IconSize:= IniFile.ReadInteger(sIconDirName, 'Size', 48); IconScale:= IniFile.ReadInteger(sIconDirName, 'Scale', 1); //IconContext:= IniFile.ReadString(sIconDirName, 'Context', EmptyStr); // currently not used IconTypeStr:= IniFile.ReadString(sIconDirName, 'Type', 'Threshold'); IconMaxSize:= IniFile.ReadInteger(sIconDirName, 'MaxSize', IconSize); IconMinSize:= IniFile.ReadInteger(sIconDirName, 'MinSize', IconSize); IconThreshold:= IniFile.ReadInteger(sIconDirName, 'Threshold', 2); if SameText(IconTypeStr, 'Fixed') then IconType:= itFixed else if SameText(IconTypeStr, 'Scalable') then IconType:= itScalable else if SameText(IconTypeStr, 'Threshold') then IconType:= itThreshold else begin Dispose(Result); DCDebug('Theme directory "%s" has unsupported icon type "%s"', [sIconDirName, IconTypeStr]); Exit(nil); end; SetLength(FileListCache, Length(FBaseDirList)); for I:= 0 to Length(FBaseDirList) - 1 do FileListCache[I]:= nil; end; end; function TIconTheme.FindIconHelper(aIconName: String; AIconSize, AIconScale: Integer): String; var I: Integer; begin Result:= LookupIcon(AIconName, AIconSize, AIconScale); if Result <> EmptyStr then Exit; if Assigned(FInherits) then begin // find in parent themes for I:= 0 to FInherits.Count - 1 do begin Result:= TIconTheme(FInherits.Objects[I]).LookupIcon(aIconName, AIconSize, AIconScale); if Result <> EmptyStr then Exit; end; end; Result:= EmptyStr; end; procedure TIconTheme.CacheDirectoryFiles(SubDirIndex: Integer; BaseDirIndex: Integer); var SearchDir, FoundName, FoundExt: String; SearchRec: TSearchRecEx; DirList: TStringHashListUtf8; I: Integer; begin DirList:= TStringHashListUtf8.Create(True); FDirectories.Items[SubDirIndex]^.FileListCache[BaseDirIndex]:= DirList; SearchDir := FBaseDirList[BaseDirIndex] + PathDelim + FTheme + PathDelim + FDirectories.Strings[SubDirIndex]; if FindFirstEx(SearchDir + PathDelim + '*', 0, SearchRec) = 0 then repeat if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin FoundExt := ExtractFileExt(SearchRec.Name); if Length(FoundExt) > 0 then begin FoundName := Copy(SearchRec.Name, 1, Length(SearchRec.Name) - Length(FoundExt)); Delete(FoundExt, 1, 1); // remove the dot // Add only files with supported extensions. for I:= Low(IconExtensionList) to High(IconExtensionList) do if IconExtensionList[I] = FoundExt then begin DirList.Add(FoundName, Pointer(PtrInt(I))); break; end; end; end; until FindNextEx(SearchRec) <> 0; FindCloseEx(SearchRec); end; class function TIconTheme.CutTrailingExtension(const AIconName: String): String; var I: Integer; begin for I:= Low(IconExtensionList) to High(IconExtensionList) do if StrEnds(AIconName, '.' + IconExtensionList[I]) then Exit(Copy(AIconName, 1, Length(AIconName) - Length(IconExtensionList[I]) - 1)); Result := AIconName; end; class procedure TIconTheme.RegisterExtension(const AExtension: String); var I: Integer; ExtList: TDynamicStringArray; begin ExtList:= SplitString(AExtension, ';'); for I:= Low(ExtList) to High(ExtList) do begin AddString(IconExtensionList, ExtList[I]); end; end; { TIconDirList } function TIconDirList.Add(IconDirName: String; IconDirInfo: PIconDirInfo): Integer; begin Result:= AddObject(IconDirName, TObject(IconDirInfo)); end; function TIconDirList.GetIconDir(Index: Integer): PIconDirInfo; begin Result:= PIconDirInfo(Objects[Index]); end; destructor TIconDirList.Destroy; var I, J: Integer; IconDirInfo: PIconDirInfo; begin for I:= Count - 1 downto 0 do begin if Assigned(Objects[I]) then begin IconDirInfo:= PIconDirInfo(Objects[I]); for J := 0 to Length(IconDirInfo^.FileListCache) - 1 do IconDirInfo^.FileListCache[J].Free; Dispose(IconDirInfo); end; end; inherited Destroy; end; initialization AddString(IconExtensionList, 'png'); // EXT_IDX_PNG AddString(IconExtensionList, 'xpm'); // EXT_IDX_XPM end. doublecmd-1.1.30/src/platform/ufindex.pas0000644000175000001440000002070115104114162017347 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains UTF-8 versions of Find(First, Next, Close) functions Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uFindEx; {$macro on} {$mode objfpc}{$H+} {$modeswitch advancedrecords} interface uses SysUtils, DCBasicTypes {$IFDEF UNIX} , BaseUnix, DCUnix, uMasks {$ENDIF} {$IFDEF MSWINDOWS} , Windows {$ENDIF} {$IFDEF DARWIN} , MacOSAll {$ENDIF} ; const fffPortable = $80000000; fffElevated = $40000000; type {$IFDEF UNIX} TUnixFindHandle = record DirPtr: PDir; //en> directory pointer for reading directory FindPath: String; //en> file name path Mask: TMask; //en> object that will check mask end; PUnixFindHandle = ^TUnixFindHandle; {$ENDIF} PSearchRecEx = ^TSearchRecEx; TSearchRecEx = record Time : DCBasicTypes.TFileTime; // modification time Size : Int64; Attr : TFileAttrs; Name : String; Flags : UInt32; {$IF DEFINED(MSWINDOWS)} FindHandle : THandle; FindData : Windows.TWin32FindDataW; property PlatformTime: TFileTime read FindData.ftCreationTime; property LastAccessTime: TFileTime read FindData.ftLastAccessTime; {$ELSE} FindHandle : Pointer; FindData : TDCStat; property PlatformTime: TUnixTime read FindData.st_ctime; property LastAccessTime: TUnixTime read FindData.st_atime; {$IF DEFINED(DARWIN)} property BirthdayTime: TUnixTime read FindData.st_birthtime; property BirthdayTimensec: clong read FindData.st_birthtimensec; {$ENDIF} {$ENDIF} end; function FindFirstEx(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; function FindNextEx(var SearchRec: TSearchRecEx): Integer; procedure FindCloseEx(var SearchRec: TSearchRecEx); implementation uses LazUTF8, DCConvertEncoding, uDebug {$IFDEF LINUX} , InitC {$ENDIF} {$IFDEF MSWINDOWS} , DCWindows, DCDateTimeUtils, uMyWindows {$ENDIF} {$IFDEF UNIX} , Unix, DCOSUtils, DCFileAttributes {$ENDIF}; {$IF DEFINED(DARWIN) AND DEFINED(CPUX86_64)} const DARWIN_MAXPATHLEN = 1024; {$push}{$packrecords c} type dirent = record d_ino: UInt64; d_seekoff: UInt64; d_reclen: UInt16; d_namlen: UInt16; d_type: UInt8; d_name: array[0..Pred(DARWIN_MAXPATHLEN)] of AnsiChar; end; TDirent = dirent; PDirent = ^TDirent; {$pop} function fpReadDir(var dirp: TDir): PDirent; cdecl; external clib name 'readdir$INODE64'; {$ENDIF} {$IF DEFINED(LINUX)} {$define fpgeterrno:= fpgetCerrno} function fpOpenDir(dirname: PAnsiChar): pDir; cdecl; external clib name 'opendir'; function fpReadDir(var dirp: TDir): pDirent; cdecl; external clib name 'readdir64'; function fpCloseDir(var dirp: TDir): cInt; cdecl; external clib name 'closedir'; {$ENDIF} function mbFindMatchingFile(var SearchRec: TSearchRecEx): Integer; {$IFDEF MSWINDOWS} begin with SearchRec do begin if (Flags and fffPortable = 0) then Time:= TWinFileTime(FindData.ftLastWriteTime) else begin Time:= WinFileTimeToUnixTime(TWinFileTime(FindData.ftLastWriteTime)); end; FindData.dwFileAttributes:= ExtractFileAttributes(FindData); Size:= (Int64(FindData.nFileSizeHigh) shl 32) + FindData.nFileSizeLow; Name:= CeUtf16ToUtf8(UnicodeString(FindData.cFileName)); Attr:= FindData.dwFileAttributes; end; Result:= 0; end; {$ELSE} var UnixFindHandle: PUnixFindHandle absolute SearchRec.FindHandle; begin Result:= -1; if UnixFindHandle = nil then Exit; if (UnixFindHandle^.Mask = nil) or UnixFindHandle^.Mask.Matches(SearchRec.Name) then begin if DC_fpLStat(UTF8ToSys(UnixFindHandle^.FindPath + SearchRec.Name), SearchRec.FindData) >= 0 then begin with SearchRec.FindData do begin // On Unix a size for directory entry on filesystem is returned in StatInfo. // We don't want to use it. if fpS_ISDIR(st_mode) then SearchRec.Size:= 0 else begin SearchRec.Size:= Int64(st_size); end; SearchRec.Time:= DCBasicTypes.TFileTime(st_mtime); if (SearchRec.Flags and fffPortable = 0) then SearchRec.Attr:= DCBasicTypes.TFileAttrs(st_mode) else begin SearchRec.Attr:= UnixToWinFileAttr(SearchRec.Name, TFileAttrs(st_mode)); end; end; Result:= 0; end; end; end; {$ENDIF} function FindFirstEx(const Path: String; Flags: UInt32; out SearchRec: TSearchRecEx): Integer; {$IFDEF MSWINDOWS} var wsPath: UnicodeString; fInfoLevelId: FINDEX_INFO_LEVELS; begin SearchRec.Flags:= Flags; wsPath:= UTF16LongName(Path); if CheckWin32Version(6, 1) then begin fInfoLevelId:= FindExInfoBasic; Flags:= FIND_FIRST_EX_LARGE_FETCH; end else begin Flags:= 0; fInfoLevelId:= FindExInfoStandard; end; SearchRec.FindHandle:= FindFirstFileExW(PWideChar(wsPath), fInfoLevelId, @SearchRec.FindData, FindExSearchNameMatch, nil, Flags); if SearchRec.FindHandle = INVALID_HANDLE_VALUE then Result:= GetLastError else begin Result:= mbFindMatchingFile(SearchRec); end; end; {$ELSE} var UnixFindHandle: PUnixFindHandle; begin New(UnixFindHandle); SearchRec.Flags:= Flags; SearchRec.FindHandle:= UnixFindHandle; FillChar(UnixFindHandle^, SizeOf(TUnixFindHandle), 0); with UnixFindHandle^ do begin FindPath:= ExtractFileDir(Path); if FindPath = '' then begin FindPath := mbGetCurrentDir; end; FindPath:= IncludeTrailingBackSlash(FindPath); // Assignment of SearchRec.Name also needed if the path points to a specific // file and only a single mbFindMatchingFile() check needs to be done below. SearchRec.Name:= ExtractFileName(Path); // Check if searching for all files. If yes don't need to use Mask. if (SearchRec.Name <> '*') and (SearchRec.Name <> '') then // '*.*' searches for files with a dot in name so mask needs to be checked. begin // If searching for single specific file, just check if it exists and exit. if (Pos('?', SearchRec.Name) = 0) and (Pos('*', SearchRec.Name) = 0) then begin if mbFileSystemEntryExists(Path) and (mbFindMatchingFile(SearchRec) = 0) then Exit(0) else Exit(-1); end; Mask := TMask.Create(SearchRec.Name); end; DirPtr:= fpOpenDir(PAnsiChar(CeUtf8ToSys(FindPath))); if (DirPtr = nil) then Exit(fpgeterrno); end; Result:= FindNextEx(SearchRec); end; {$ENDIF} function FindNextEx(var SearchRec: TSearchRecEx): Integer; {$IFDEF MSWINDOWS} begin if FindNextFileW(SearchRec.FindHandle, SearchRec.FindData) then Result:= mbFindMatchingFile(SearchRec) else begin Result:= GetLastError; end; end; {$ELSE} var PtrDirEnt: pDirent; UnixFindHandle: PUnixFindHandle absolute SearchRec.FindHandle; begin Result:= -1; if UnixFindHandle = nil then Exit; if UnixFindHandle^.DirPtr = nil then Exit; PtrDirEnt:= fpReadDir(UnixFindHandle^.DirPtr^); while PtrDirEnt <> nil do begin SearchRec.Name:= CeSysToUtf8(PtrDirEnt^.d_name); Result:= mbFindMatchingFile(SearchRec); if Result = 0 then // if found then exit Exit else // else read next PtrDirEnt:= fpReadDir(UnixFindHandle^.DirPtr^); end; end; {$ENDIF} procedure FindCloseEx(var SearchRec: TSearchRecEx); {$IFDEF MSWINDOWS} begin if SearchRec.FindHandle <> INVALID_HANDLE_VALUE then Windows.FindClose(SearchRec.FindHandle); end; {$ELSE} var UnixFindHandle: PUnixFindHandle absolute SearchRec.FindHandle; begin if UnixFindHandle = nil then Exit; if UnixFindHandle^.DirPtr <> nil then fpCloseDir(UnixFindHandle^.DirPtr^); if Assigned(UnixFindHandle^.Mask) then UnixFindHandle^.Mask.Free; Dispose(UnixFindHandle); SearchRec.FindHandle:= nil; end; {$ENDIF} end. doublecmd-1.1.30/src/platform/ufilesystemwatcher.pas0000644000175000001440000015131515104114162021642 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This is a thread-component sends an event when a change in the file system occurs. Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2011 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFileSystemWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion {$IFDEF DARWIN} , uDarwinFSWatch {$ENDIF} ; //{$DEFINE DEBUG_WATCHER} type TFSWatchFilter = set of (wfFileNameChange, wfAttributesChange); TFSWatcherEventType = (fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed, fswSelfDeleted, fswUnknownChange); TFSWatcherEventTypes = set of TFSWatcherEventType; TFSFeatures = set of (fsfFlatView); TFSWatcherEventData = record Path: String; EventType: TFSWatcherEventType; FileName: String; // Valid for fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed NewFileName: String; // Valid for fswFileRenamed UserData: Pointer; {$IFDEF DARWIN} OriginalEvent: TDarwinFSWatchEvent; {$ENDIF} end; PFSWatcherEventData = ^TFSWatcherEventData; TFSWatcherEvent = procedure(const EventData: TFSWatcherEventData) of object; { TFileSystemWatcher } TFileSystemWatcher = class private class procedure CreateFileSystemWatcher; class procedure DestroyFileSystemWatcher; public {en Returns @true if watch has been successfully added or already exists. } class function AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; class procedure RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); class procedure RemoveWatch(aWatcherEvent: TFSWatcherEvent); {$IFDEF DARWIN} class procedure UpdateWatch; {$ENDIF} class function CanWatch(const WatchPaths: array of String): Boolean; class function AvailableWatchFilter: TFSWatchFilter; class function Features: TFSFeatures; end; implementation uses LCLProc, LazUTF8, LazMethodList, uDebug, uExceptions, syncobjs, fgl, Forms {$IF DEFINED(MSWINDOWS)} , Windows, JwaWinNT, JwaWinBase, DCWindows, DCStrUtils, uGlobs, DCOSUtils, DCConvertEncoding {$ELSEIF DEFINED(LINUX)} , inotify, BaseUnix, FileUtil, DCConvertEncoding, DCUnix {$ELSEIF DEFINED(DARWIN)} , uFileView, uGlobs {$ELSEIF DEFINED(BSD)} , BSD, Unix, BaseUnix, UnixType, FileUtil, DCOSUtils {$ELSEIF DEFINED(HAIKU)} , DCConvertEncoding {$IF DEFINED(LCLQT5)} , Qt5 {$ELSEIF DEFINED(LCLQT6)} , Qt6 {$ENDIF} {$ENDIF}; {$IF DEFINED(UNIX) AND not DEFINED(DARWIN)} {$DEFINE UNIX_butnot_DARWIN} {$ENDIF} {$IF DEFINED(HAIKU) AND (DEFINED(LCLQT5) OR DEFINED(LCLQT6))} {$DEFINE HAIKUQT} {$ENDIF} {$if lcl_fullversion < 2030000} {$macro on} {$define SameMethod:= CompareMethods} {$endif} {$IF DEFINED(UNIX_butnot_DARWIN)} type {$IF DEFINED(HAIKUQT)} TNotifyHandle = QFileSystemWatcherH; {$ELSE} TNotifyHandle = THandle; {$ENDIF} {$ENDIF} {$IF DEFINED(MSWINDOWS)} const // For each outstanding ReadDirectoryW a buffer of this size will be allocated // by kernel, so this value should be rather small. READDIRECTORYCHANGESW_BUFFERSIZE = 4096; READDIRECTORYCHANGESW_DRIVE_BUFFERSIZE = 32768; var VAR_READDIRECTORYCHANGESW_BUFFERSIZE: DWORD = READDIRECTORYCHANGESW_BUFFERSIZE; CREATEFILEW_SHAREMODE: DWORD = FILE_SHARE_READ or FILE_SHARE_WRITE; type TOverlappedEx = packed record Overlapped: TOverlapped; OSWatch: Pointer; end; POverlappedEx = ^TOverlappedEx; function GetTargetPath(const Path: String): String; begin Result := mbReadAllLinks(Path); if Result = EmptyStr then Result := Path; end; function GetDriveOfPath(const Path: String): String; begin Result := ExtractFileDrive(GetTargetPath(Path)) + PathDelim; end; {$ENDIF} type TOSWatchObserver = class UserData: Pointer; WatcherEvent: TFSWatcherEvent; WatchFilter: TFSWatchFilter; {$IF DEFINED(MSWINDOWS)} RegisteredWatchPath: String; // Path that was registered to watch (for watching whole drive mode). TargetWatchPath: String; // What path is actually to be watched (for watching whole drive mode). {$ENDIF} end; TOSWatchObservers = specialize TFPGObjectList; TOSWatch = class private {$IF NOT DEFINED(DARWIN)} FHandle: THandle; {$ENDIF} FObservers: TOSWatchObservers; FWatchFilter: TFSWatchFilter; FWatchPath: String; {$IF DEFINED(MSWINDOWS)} FOverlapped: TOverlappedEx; FBuffer: PByte; FNotifyFilter: DWORD; FReferenceCount: LongInt; FOldFileName: String; // for FILE_ACTION_RENAMED_OLD_NAME action {$ENDIF} {$IF DEFINED(UNIX_butnot_DARWIN)} FNotifyHandle: TNotifyHandle; {$ENDIF} {$IF NOT DEFINED(DARWIN)} procedure CreateHandle; procedure DestroyHandle; {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure QueueCancelRead; procedure QueueRead; procedure SetFilter(aWatchFilter: TFSWatchFilter); {$ENDIF} public constructor Create(const aWatchPath: String {$IFDEF UNIX_butnot_DARWIN}; aNotifyHandle: TNotifyHandle{$ENDIF}); reintroduce; destructor Destroy; override; {$IF not DEFINED(DARWIN)} procedure UpdateFilter; {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure Reference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; procedure Dereference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$ENDIF} {$IF not DEFINED(DARWIN)} property Handle: THandle read FHandle; {$ENDIF} property Observers: TOSWatchObservers read FObservers; property WatchPath: String read FWatchPath; end; TOSWatchs = specialize TFPGObjectList; { TFileSystemWatcherImpl } TFileSystemWatcherImpl = class(TThread) private FWatcherLock: syncobjs.TCriticalSection; FOSWatchers: TOSWatchs; {$IF DEFINED(UNIX_butnot_DARWIN)} FNotifyHandle: TNotifyHandle; {$ENDIF} {$IF DEFINED(DARWIN)} FDarwinFSWatcher: TDarwinFSWatcher; FWatcherSubdirs: TStringList; {$ENDIF} {$IF DEFINED(LINUX)} FEventPipe: TFilDes; {$ENDIF} FCurrentEventData: TFSWatcherEventData; FFinished: Boolean; {$IF DEFINED(HAIKUQT)} FFinishEvent: TSimpleEvent; FHook: QFileSystemWatcher_hookH; procedure DirectoryChanged(Path: PWideString); cdecl; {$ENDIF} {$IF DEFINED(DARWIN)} procedure handleFSEvent(event:TDarwinFSWatchEvent); {$ENDIF} procedure DoWatcherEvent; function GetWatchersCount: Integer; function GetWatchPath(var aWatchPath: String): Boolean; {$IF DEFINED(MSWINDOWS)} function IsPathObserved(Watch: TOSWatch; FileName: String): Boolean; {$ENDIF} {en Call only under FWatcherLock. } procedure RemoveObserverLocked(OSWatcherIndex: Integer; aWatcherEvent: TFSWatcherEvent); {en Call only under FWatcherLock. } procedure RemoveOSWatchLocked(Index: Integer); procedure RemoveOSWatch(Watch: TOSWatch); procedure TriggerTerminateEvent; protected procedure Execute; override; procedure ExecuteWatcher; {$IFDEF DARWIN} function isWatchSubdir(const path: String): Boolean; {$ENDIF} public constructor Create; destructor Destroy; override; procedure Terminate; function AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; procedure RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); procedure RemoveWatch(aWatcherEvent: TFSWatcherEvent); {$IFDEF DARWIN} procedure UpdateWatch; {$ENDIF} property WatchersCount: Integer read GetWatchersCount; end; var FileSystemWatcher: TFileSystemWatcherImpl = nil; procedure SyncDoWatcherEvent; inline; begin // if Main Thread terminated, Synchronize() will never return if not Application.Terminated then FileSystemWatcher.Synchronize( @FileSystemWatcher.DoWatcherEvent ); end; { TFileSystemWatcher } class procedure TFileSystemWatcher.CreateFileSystemWatcher; begin if Assigned(FileSystemWatcher) and FileSystemWatcher.FFinished then // Thread finished prematurely maybe because of an error. // Destroy and recreate below. DestroyFileSystemWatcher; if not Assigned(FileSystemWatcher) then FileSystemWatcher := TFileSystemWatcherImpl.Create; end; class procedure TFileSystemWatcher.DestroyFileSystemWatcher; begin if Assigned(FileSystemWatcher) then begin DCDebug('Waiting for FileSystemWatcher thread'); FileSystemWatcher.Terminate; FileSystemWatcher.WaitFor; FreeAndNil(FileSystemWatcher); end; end; class function TFileSystemWatcher.AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; begin CreateFileSystemWatcher; if Assigned(FileSystemWatcher) then Result := FileSystemWatcher.AddWatch(aWatchPath, aWatchFilter, aWatcherEvent, UserData) else Result := False; end; class procedure TFileSystemWatcher.RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); begin if Assigned(FileSystemWatcher) then begin FileSystemWatcher.RemoveWatch(aWatchPath, aWatcherEvent); if FileSystemWatcher.WatchersCount = 0 then DestroyFileSystemWatcher; end; end; class procedure TFileSystemWatcher.RemoveWatch(aWatcherEvent: TFSWatcherEvent); begin if Assigned(FileSystemWatcher) then begin FileSystemWatcher.RemoveWatch(aWatcherEvent); if FileSystemWatcher.WatchersCount = 0 then DestroyFileSystemWatcher; end; end; {$IFDEF DARWIN} class procedure TFileSystemWatcher.UpdateWatch; begin if Assigned(FileSystemWatcher) then begin FileSystemWatcher.UpdateWatch; end; end; {$ENDIF} class function TFileSystemWatcher.CanWatch(const WatchPaths: array of String): Boolean; {$IF DEFINED(MSWINDOWS)} var Index: Integer; DrivePath: UnicodeString; begin for Index:= Low(WatchPaths) to High(WatchPaths) do begin if (Pos('\\', WatchPaths[Index]) = 1) then Exit(False); DrivePath:= UnicodeString(Copy(WatchPaths[Index], 1, 3)); if GetDriveTypeW(PWideChar(DrivePath)) = DRIVE_REMOTE then Exit(False); end; Result:= True; end; {$ELSE} begin Result:= True; end; {$ENDIF} class function TFileSystemWatcher.AvailableWatchFilter: TFSWatchFilter; begin Result := [wfFileNameChange {$IF NOT DEFINED(HAIKUQT)} , wfAttributesChange {$ENDIF} ]; end; class function TFileSystemWatcher.Features: TFSFeatures; begin Result := [ {$IF DEFINED(DARWIN)} fsfFlatView {$ENDIF} ]; end; // ---------------------------------------------------------------------------- procedure ShowError(const sErrMsg: String); begin DCDebug('FSWatcher: ' + sErrMsg + ': (' + IntToStr(GetLastOSError) + ') ' + SysErrorMessage(GetLastOSError)); end; {$IF DEFINED(MSWINDOWS)} procedure NotifyRoutine(dwErrorCode: DWORD; dwNumberOfBytes: DWORD; Overlapped: LPOVERLAPPED); stdcall; forward; function StartReadDirectoryChanges(Watch: TOSWatch): Boolean; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChanges for ', Watch.FWatchPath); {$ENDIF} if Watch.Handle <> feInvalidHandle then begin Result := ReadDirectoryChangesW( Watch.Handle, Watch.FBuffer, VAR_READDIRECTORYCHANGESW_BUFFERSIZE, gWatcherMode = fswmWholeDrive, Watch.FNotifyFilter, nil, LPOVERLAPPED(@Watch.FOverlapped), @NotifyRoutine) or // ERROR_IO_PENDING is a confirmation that the I/O operation has started. (GetLastError = ERROR_IO_PENDING); if Result then Watch.Reference{$IFDEF DEBUG_WATCHER}('StartReadDirectoryChanges'){$ENDIF} else begin // ERROR_INVALID_HANDLE will be when handle was destroyed // just before the call to ReadDirectoryChangesW. if GetLastError <> ERROR_INVALID_HANDLE then ShowError('ReadDirectoryChangesW error'); end; end else Result := False; end; procedure ProcessFileNotifyInfo(Watch: TOSWatch; dwBytesReceived: DWORD); var wFilename: Widestring; fnInfo: PFILE_NOTIFY_INFORMATION; begin with FileSystemWatcher do begin FCurrentEventData.Path := Watch.WatchPath; if dwBytesReceived = 0 then begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Buffer overflowed. Some events happened though.'); {$ENDIF} // Buffer was not large enough to store all events. In this case it is only // known that something has changed but all specific events have been lost. FCurrentEventData.EventType := fswUnknownChange; FCurrentEventData.FileName := EmptyStr; FCurrentEventData.NewFileName := EmptyStr; SyncDoWatcherEvent; Exit; end; fnInfo := @Watch.FBuffer[0]; // FCurrentEventData can be accessed safely because only one ProcessFileNotifyInfo // is called at a time due to completion routines being in a queue. while True do begin SetString(wFilename, PWideChar(@fnInfo^.FileName), fnInfo^.FileNameLength div SizeOf(WideChar)); FCurrentEventData.NewFileName := EmptyStr; case fnInfo^.Action of FILE_ACTION_ADDED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileCreated; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Created file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_REMOVED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileDeleted; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Deleted file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_MODIFIED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileChanged; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Modified file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_RENAMED_OLD_NAME: begin Watch.FOldFileName := UTF16ToUTF8(wFilename); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Rename from ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_RENAMED_NEW_NAME: begin FCurrentEventData.FileName := Watch.FOldFileName; FCurrentEventData.NewFileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileRenamed; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Rename to ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; else begin FCurrentEventData.EventType := fswUnknownChange; FCurrentEventData.FileName := EmptyStr; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Process watch ', hexStr(Watch), ': Action ', fnInfo^.Action, ' for ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName]); {$ENDIF} end; end; if (fnInfo^.Action <> FILE_ACTION_RENAMED_OLD_NAME) and ((gWatcherMode <> fswmWholeDrive) or IsPathObserved(Watch, FCurrentEventData.FileName)) then SyncDoWatcherEvent; if fnInfo^.NextEntryOffset = 0 then Break else fnInfo := PFILE_NOTIFY_INFORMATION(PByte(fnInfo) + fnInfo^.NextEntryOffset); end; end; end; procedure NotifyRoutine(dwErrorCode: DWORD; dwNumberOfBytes: DWORD; Overlapped: LPOVERLAPPED); stdcall; var Watch: TOSWatch; bReadStarted: Boolean = False; begin Watch := TOSWatch(POverlappedEx(Overlapped)^.OSWatch); {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine for watch ', hexStr(Watch), ' bytes=', dwNumberOfBytes, ' code=', dwErrorCode, ' handle=', Integer(Watch.Handle)]); {$ENDIF} case dwErrorCode of ERROR_SUCCESS: begin if Watch.FHandle <> feInvalidHandle then begin ProcessFileNotifyInfo(Watch, dwNumberOfBytes); bReadStarted := StartReadDirectoryChanges(Watch); end else begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: NotifyRoutine Handle destroyed, not starting Read'); {$ENDIF}; end; end; ERROR_OPERATION_ABORTED: begin // I/O operation has been cancelled to change parameters. {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: NotifyRoutine aborted, will restart'); {$ENDIF} bReadStarted := StartReadDirectoryChanges(Watch); end; ERROR_ACCESS_DENIED: begin // Most probably handle has been closed or become invalid. {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine ERROR_ACCESS_DENIED watch=', hexStr(Watch)]); {$ENDIF} end; else begin DCDebug(['FSWatcher: NotifyRoutine error=', dwErrorCode]); end; end; if not bReadStarted then begin if Watch.Handle <> feInvalidHandle then // This will destroy the handle. FileSystemWatcher.RemoveOSWatch(Watch); // If Handle = feInvalidHandle that means Watch has already been // removed from FileSystemWatcher by main thread. end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('NotifyRoutine'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine for watch ', hexStr(Watch), ' done']); {$ENDIF} end; procedure ReadChangesProc(dwParam: ULONG_PTR); stdcall; var Watch: TOSWatch absolute dwParam; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChangesProc for watch ', hexStr(Watch)); {$ENDIF} if not StartReadDirectoryChanges(Watch) then begin if Watch.Handle <> feInvalidHandle then FileSystemWatcher.RemoveOSWatch(Watch); end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('ReadChangesProc'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChangesProc done for watch ', hexStr(Watch)); {$ENDIF} end; procedure CancelReadChangesProc(dwParam: ULONG_PTR); stdcall; var Watch: TOSWatch absolute dwParam; begin {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: CancelReadChangesProc for watch ', hexStr(Watch), ' handle ', Integer(Watch.Handle)]); {$ENDIF} // CancelIo will cause the completion routine to be called with ERROR_OPERATION_ABORTED. // Must be called from the same thread which started the I/O operation. if CancelIo(Watch.Handle) = False then begin if GetLastOSError <> ERROR_INVALID_HANDLE then ShowError('CancelReadChangesProc: CancelIo error'); end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('CancelReadChangesProc'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: CancelReadChangesProc done for watch ', hexStr(Watch)); {$ENDIF} end; procedure TerminateProc(dwParam: ULONG_PTR); stdcall; begin // This procedure does nothing. Simply queueing and executing it will cause // SleepEx to exit if there were no other APCs in the queue. end; {$ENDIF} { TFileSystemWatcherImpl } procedure TFileSystemWatcherImpl.Execute; begin DCDebug('FileSystemWatcher thread starting'); try try ExecuteWatcher; except on e: Exception do HandleException(e, Self); end; finally FFinished := True; DCDebug('FileSystemWatcher thread finished'); end; end; procedure TFileSystemWatcherImpl.ExecuteWatcher; {$IF DEFINED(MSWINDOWS)} begin while not Terminated do begin {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: SleepEx (', FOSWatchers.Count, ' watches)']); {$ENDIF} // Contrary to documentation: // SleepEx does not return until all APCs (including I/O completion routines) // in queue are called. Then it returns with WAIT_IO_COMPLETION. // Therefore there is no need to artificially flush queue. SleepEx(INFINITE, True); end; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: SleepEx loop done'); {$ENDIF} end; {$ELSEIF DEFINED(LINUX)} const // Buffer size passed to read() must be at least the size of the first event // to be read from the file descriptor, otherwise Invalid Parameter is returned. // Event record size is variable, we use maximum possible for a single event. // Usually it is big enough so that multiple events can be read with single read(). // The 'name' field is always padded up to multiple of 16 bytes with NULLs. buffer_size = (sizeof(inotify_event) + MAX_PATH) * 8; var bytes_to_parse, p, k, i: Integer; buf: PChar = nil; ev, v: pinotify_event; fds: array[0..1] of tpollfd; ret: cint; begin if (FNotifyHandle = feInvalidHandle) or (FEventPipe[0] = -1) or (FEventPipe[1] = -1) then Exit; try buf := GetMem(buffer_size); // set file descriptors fds[0].fd:= FEventPipe[0]; fds[0].events:= POLLIN; fds[1].fd:= FNotifyHandle; fds[1].events:= POLLIN; while not Terminated do begin // wait for events repeat ret:= fpPoll(@fds[0], Length(fds), -1); until (ret <> -1) or (fpGetErrNo <> ESysEINTR); if ret = -1 then begin ShowError('fpPoll() failed'); Exit; end; { if } if (fds[0].revents and POLLIN <> 0) then begin // clear pipe while FileRead(FEventPipe[0], buf^, 1) <> -1 do; end; { if } if (fds[1].revents and POLLIN = 0) then // inotify handle didn't change, so user triggered Continue; // Read events. bytes_to_parse := FileRead(FNotifyHandle, buf^, buffer_size); if bytes_to_parse = -1 then begin ShowError('read(): failed'); Continue; end; { if } // parse events and print them p := 0; while p < bytes_to_parse do begin ev := pinotify_event(buf + p); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Read event, mask %s, name %s', [HexStr(ev^.mask, 8), StrPas(PChar(@ev^.name))]); {$ENDIF}; for i := 0 to FOSWatchers.Count - 1 do begin if ev^.wd = FOSWatchers[i].Handle then begin with FCurrentEventData do begin Path := FOSWatchers[i].WatchPath; FileName := StrPas(PChar(@ev^.name)); NewFileName := EmptyStr; // IN_MOVED_FROM is converted to FileDelete. // IN_MOVED_TO is converted to FileCreate. // There is no guarantee we will receive as sequence of // IN_MOVED_FROM, IN_MOVED_TO as the events are only sent // if the source and destination directories respectively // are being watched. if (ev^.mask and (IN_IGNORED or IN_Q_OVERFLOW)) <> 0 then begin // Ignore this event. Break; end else if (ev^.mask and (IN_ACCESS or IN_MODIFY or IN_ATTRIB or IN_CLOSE or IN_OPEN or IN_CLOSE_WRITE or IN_CLOSE_NOWRITE)) <> 0 then begin EventType := fswFileChanged; end else if (ev^.mask and IN_CREATE) <> 0 then begin EventType := fswFileCreated; end else if (ev^.mask and IN_DELETE) <> 0 then begin EventType := fswFileDeleted; end else if (ev^.mask and IN_MOVED_FROM) <> 0 then begin EventType := fswFileDeleted; // Try to find related event k := p + sizeof(inotify_event) + ev^.len; while (k < bytes_to_parse) do begin v := pinotify_event(buf + k); if (v^.mask and IN_MOVED_TO) <> 0 then begin // Same cookie and path if (v^.cookie = ev^.cookie) and (v^.wd = ev^.wd) then begin v^.mask := IN_IGNORED; EventType := fswFileRenamed; NewFileName := StrPas(PChar(@v^.name)); Break; end; end; k := k + sizeof(inotify_event) + v^.len; end; end else if (ev^.mask and IN_MOVED_TO) <> 0 then begin EventType := fswFileCreated end else if (ev^.mask and (IN_DELETE_SELF or IN_MOVE_SELF)) <> 0 then begin // Watched file/directory was deleted or moved. EventType := fswSelfDeleted; end else begin EventType := fswUnknownChange; end; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Send event, Path %s, FileName %s, EventType %d', [Path, FileName, EventType]); {$ENDIF}; end; // call event handler SyncDoWatcherEvent; Break; end; { if } end; { for } p := p + sizeof(inotify_event) + ev^.len; end; { while } end; { while } finally if Assigned(buf) then FreeMem(buf); end; { try - finally } end; {$ELSEIF DEFINED(DARWIN)} begin FDarwinFSWatcher.start; end; {$ELSEIF DEFINED(BSD)} var ret: cint; ke: TKEvent; begin if FNotifyHandle = feInvalidHandle then exit; while not Terminated do begin FillByte(ke, SizeOf(ke), 0); // Wait for events repeat ret:= kevent(FNotifyHandle, nil, 0, @ke, 1, nil); until (ret <> -1) or (fpGetErrNo <> ESysEINTR); if ret = -1 then begin ShowError('kevent() failed'); Break; end; { if } case ke.Filter of EVFILT_TIMER: // user triggered Continue; EVFILT_VNODE: begin with FCurrentEventData do begin Path := TOSWatch(ke.uData).WatchPath; EventType := fswUnknownChange; FileName := EmptyStr; NewFileName := EmptyStr; end; SyncDoWatcherEvent; end; end; { case } end; { while } end; {$ELSEIF DEFINED(HAIKUQT)} begin while not Terminated do begin FFinishEvent.WaitFor(INFINITE); end; end; {$ELSE} begin end; {$ENDIF} {$IF DEFINED(DARWIN)} function TFileSystemWatcherImpl.isWatchSubdir(const path: String): Boolean; begin FWatcherLock.Acquire; try Result:= FWatcherSubdirs.IndexOf(path) >= 0; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.handleFSEvent(event:TDarwinFSWatchEvent); begin if [watch_file_name_change, watch_attributes_change] * gWatchDirs = [] then exit; if event.isDropabled then exit; if (ecChildChanged in event.categories) and (not isWatchSubdir(event.watchPath) ) then exit; FCurrentEventData.Path := event.watchPath; FCurrentEventData.FileName := EmptyStr; FCurrentEventData.NewFileName := EmptyStr; FCurrentEventData.OriginalEvent := event; FCurrentEventData.EventType := fswUnknownChange; if TDarwinFSWatchEventCategory.ecRootChanged in event.categories then begin FCurrentEventData.EventType := fswSelfDeleted; end else if event.fullPath.Length >= event.watchPath.Length+2 then begin // 1. file-level update only valid if there is a FileName, // otherwise keep directory-level update // 2. the order of the following judgment conditions must be preserved if (not (watch_file_name_change in gWatchDirs)) and ([ecStructChanged, ecAttribChanged] * event.categories = [ecStructChanged]) then exit; if (not (watch_attributes_change in gWatchDirs)) and ([ecStructChanged, ecAttribChanged] * event.categories = [ecAttribChanged]) then exit; FCurrentEventData.FileName := ExtractFileName( event.fullPath ); if TDarwinFSWatchEventCategory.ecRemoved in event.categories then FCurrentEventData.EventType := fswFileDeleted else if TDarwinFSWatchEventCategory.ecRenamed in event.categories then begin if ExtractFilePath(event.fullPath)=ExtractFilePath(event.renamedPath) then begin // fswFileRenamed only when FileName and NewFileName in the same dir // otherwise keep fswUnknownChange FCurrentEventData.EventType := fswFileRenamed; FCurrentEventData.NewFileName := ExtractFileName( event.renamedPath ); end; end else if TDarwinFSWatchEventCategory.ecCreated in event.categories then FCurrentEventData.EventType := fswFileCreated else if TDarwinFSWatchEventCategory.ecCoreAttribChanged in event.categories then FCurrentEventData.EventType := fswFileChanged else exit; end; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Send event, Path %s', [FCurrentEventData.Path]); {$ENDIF}; SyncDoWatcherEvent; FCurrentEventData.OriginalEvent := nil; end; {$ENDIF} {$IF DEFINED(HAIKUQT)} procedure TFileSystemWatcherImpl.DirectoryChanged(Path: PWideString); cdecl; begin FCurrentEventData.Path := CeUtf16ToUtf8(Path^); FCurrentEventData.EventType := fswUnknownChange; FCurrentEventData.FileName := EmptyStr; FCurrentEventData.NewFileName := EmptyStr; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Send event, Path %s', [FCurrentEventData.Path]); {$ENDIF}; SyncDoWatcherEvent; end; {$ENDIF} procedure TFileSystemWatcherImpl.DoWatcherEvent; var i, j: Integer; AWatchPath: String; begin if not Terminated then begin AWatchPath := FCurrentEventData.Path; try FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i].WatchPath = AWatchPath then begin for j := 0 to FOSWatchers[i].Observers.Count - 1 do begin // TODO: Check filter. // Can be called under the lock because this function is run from // the main thread and the watcher thread is suspended anyway because // it's waiting until Synchronize call (thus this function) finishes. with FOSWatchers[i].Observers[j] do begin if Assigned(WatcherEvent) {$IFDEF MSWINDOWS} and ((gWatcherMode <> fswmWholeDrive) or IsInPath(TargetWatchPath, UTF8UpperCase(FOSWatchers[i].WatchPath + FCurrentEventData.FileName), False, False)) {$ENDIF} then begin FCurrentEventData.UserData := UserData; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then FCurrentEventData.Path := RegisteredWatchPath; {$ENDIF} {$IFDEF DARWIN} // FlatView Watch is supported on MacOS // FCurrentEventData.Path contains WatchPath // so in FlatView Mode, Path need to be adjusted to the Real Path if TFileView(UserData).FlatView then begin if ecDir in FCurrentEventData.OriginalEvent.categories then begin // in FlatView Mode, when receiving events about subdirectories, // WatchPath reload should be used instead of partial update FCurrentEventData.EventType:= fswUnknownChange; FCurrentEventData.Path := AWatchPath; end else begin FCurrentEventData.Path := ExcludeTrailingPathDelimiter(ExtractFilePath(FCurrentEventData.OriginalEvent.fullPath)); end; end else begin if TDarwinFSWatchEventCategory.ecChildChanged in FCurrentEventData.OriginalEvent.categories then // not watching SubDir, then SubDir event should be discarded continue; FCurrentEventData.Path := AWatchPath; end; {$ENDIF} WatcherEvent(FCurrentEventData); end; end; end; Break; end; { if } end; { for } finally FWatcherLock.Release; end; { try - finally } except on e: Exception do HandleException(e, Self); end; end; { if } end; function TFileSystemWatcherImpl.GetWatchersCount: Integer; begin FWatcherLock.Acquire; try Result := FOSWatchers.Count; finally FWatcherLock.Release; end; { try - finally } end; function TFileSystemWatcherImpl.GetWatchPath(var aWatchPath: String): Boolean; begin Result := True; {$IFDEF UNIX} if aWatchPath <> PathDelim then {$ENDIF} aWatchPath := ExcludeTrailingPathDelimiter(aWatchPath); {$IFDEF MSWINDOWS} // Special check for network path if (Pos(PathDelim, aWatchPath) = 1) and (NumCountChars(PathDelim, aWatchPath) < 3) then Exit(False); // Special check for drive root if (Length(aWatchPath) = 2) and (aWatchPath[2] = ':') then aWatchPath := aWatchPath + PathDelim; {$ENDIF} end; {$IF DEFINED(MSWINDOWS)} function TFileSystemWatcherImpl.IsPathObserved(Watch: TOSWatch; FileName: String): Boolean; var j: Integer; Path: String; begin Path := UTF8UpperCase(Watch.WatchPath + FileName); FWatcherLock.Acquire; try for j := 0 to Watch.Observers.Count - 1 do begin if IsInPath(Watch.Observers[j].TargetWatchPath, Path, False, False) then Exit(True); end; finally FWatcherLock.Release; end; { try - finally } Result := False; end; {$ENDIF} constructor TFileSystemWatcherImpl.Create; begin FOSWatchers := TOSWatchs.Create({$IFDEF MSWINDOWS}False{$ELSE}True{$ENDIF}); FWatcherLock := syncobjs.TCriticalSection.Create; {$IFDEF DARWIN} FWatcherSubdirs := TStringList.Create; FWatcherSubdirs.Sorted := true; FWatcherSubdirs.Duplicates := dupIgnore; {$ENDIF} FFinished := False; {$IF DEFINED(MSWINDOWS)} case gWatcherMode of fswmPreventDelete: VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_BUFFERSIZE; fswmAllowDelete: begin VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_BUFFERSIZE; CREATEFILEW_SHAREMODE := CREATEFILEW_SHAREMODE or FILE_SHARE_DELETE; end; fswmWholeDrive: begin VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_DRIVE_BUFFERSIZE; CREATEFILEW_SHAREMODE := CREATEFILEW_SHAREMODE or FILE_SHARE_DELETE; end; end; {$ELSEIF DEFINED(LINUX)} // create inotify instance FNotifyHandle := fpinotify_init(); if FNotifyHandle < 0 then ShowError('inotify_init() failed'); // create pipe for user triggered fake event FEventPipe[0] := -1; FEventPipe[1] := -1; if FpPipe(FEventPipe) = 0 then begin // set both ends of pipe non blocking FileCloseOnExec(FEventPipe[0]); FileCloseOnExec(FEventPipe[1]); FpFcntl(FEventPipe[0], F_SetFl, FpFcntl(FEventPipe[0], F_GetFl) or O_NONBLOCK); FpFcntl(FEventPipe[1], F_SetFl, FpFcntl(FEventPipe[1], F_GetFl) or O_NONBLOCK); end else ShowError('pipe() failed'); {$ELSEIF DEFINED(DARWIN)} FDarwinFSWatcher := TDarwinFSWatcher.create(@handleFSEvent); {$ELSEIF DEFINED(BSD)} FNotifyHandle := kqueue(); if FNotifyHandle = feInvalidHandle then ShowError('kqueue() failed'); {$ELSEIF DEFINED(HAIKUQT)} FFinishEvent:= TSimpleEvent.Create; FNotifyHandle:= QFileSystemWatcher_Create(); FHook:= QFileSystemWatcher_hook_Create(FNotifyHandle); QFileSystemWatcher_hook_hook_directoryChanged(FHook, @DirectoryChanged); {$ELSEIF DEFINED(UNIX)} FNotifyHandle := feInvalidHandle; {$ENDIF} inherited Create(False); FreeOnTerminate := False; end; destructor TFileSystemWatcherImpl.Destroy; begin {$IF DEFINED(LINUX)} // close both ends of pipe if FEventPipe[0] <> -1 then begin FileClose(FEventPipe[0]); FEventPipe[0] := -1; end; if FEventPipe[1] <> -1 then begin FileClose(FEventPipe[1]); FEventPipe[1] := -1; end; if FNotifyHandle <> feInvalidHandle then begin FileClose(FNotifyHandle); FNotifyHandle := feInvalidHandle; end; {$ELSEIF DEFINED(DARWIN)} FreeAndNil(FDarwinFSWatcher); {$ELSEIF DEFINED(BSD)} if FNotifyHandle <> feInvalidHandle then begin FileClose(FNotifyHandle); FNotifyHandle := feInvalidHandle; end; {$ELSEIF DEFINED(HAIKUQT)} QFileSystemWatcher_hook_hook_directoryChanged(FHook, nil); QFileSystemWatcher_hook_Destroy(FHook); QFileSystemWatcher_Destroy(FNotifyHandle); FreeAndNil(FFinishEvent); {$ENDIF} if Assigned(FOSWatchers) then FreeAndNil(FOSWatchers); if Assigned(FWatcherLock) then FreeAndNil(FWatcherLock); {$IFDEF DARWIN} if Assigned(FWatcherSubdirs) then FreeAndNil(FWatcherSubdirs); {$ENDIF} inherited Destroy; end; procedure TFileSystemWatcherImpl.Terminate; begin {$IF DEFINED(MSWINDOWS)} // Remove leftover watchers before queueing TerminateProc. // Their handles will be destroyed which will cause completion routines // to be called before Terminate is set and SleepEx loop breaks. while FOSWatchers.Count > 0 do RemoveOSWatch(FOSWatchers[0]); // Then queue TerminateProc in TriggerTerminateEvent. {$ENDIF} inherited Terminate; TriggerTerminateEvent; end; function TFileSystemWatcherImpl.AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer): Boolean; var OSWatcher: TOSWatch = nil; OSWatcherCreated: Boolean = False; Observer: TOSWatchObserver; i, j: Integer; WatcherIndex: Integer = -1; {$IFDEF MSWINDOWS} RegisteredPath: String; {$ENDIF} begin if (aWatchPath = '') or (aWatcherEvent = nil) then Exit(False); if not GetWatchPath(aWatchPath) then Exit(False); {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then begin RegisteredPath := aWatchPath; aWatchPath := GetDriveOfPath(aWatchPath); end; {$ENDIF} // Check if the path is not already watched. FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do if FOSWatchers[i].WatchPath = aWatchPath then begin OSWatcher := FOSWatchers[i]; WatcherIndex := i; // Check if the observer is not already registered. for j := 0 to OSWatcher.Observers.Count - 1 do begin if SameMethod(TMethod(OSWatcher.Observers[j].WatcherEvent), TMethod(aWatcherEvent)) then Exit(True); end; Break; end; finally FWatcherLock.Release; end; if not Assigned(OSWatcher) then begin OSWatcher := TOSWatch.Create(aWatchPath {$IFDEF UNIX_butnot_DARWIN}, FNotifyHandle {$ENDIF}); {$IF DEFINED(MSWINDOWS)} OSWatcher.Reference{$IFDEF DEBUG_WATCHER}('AddWatch'){$ENDIF}; // For usage by FileSystemWatcher (main thread) {$ELSEIF DEFINED(DARWIN)} FDarwinFSWatcher.addPath(aWatchPath); {$ENDIF} OSWatcherCreated := True; end; Observer := TOSWatchObserver.Create; Observer.WatchFilter := aWatchFilter; Observer.WatcherEvent := aWatcherEvent; Observer.UserData := UserData; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then begin Observer.RegisteredWatchPath := RegisteredPath; Observer.TargetWatchPath := UTF8UpperCase(GetTargetPath(RegisteredPath)); end; {$ENDIF} FWatcherLock.Acquire; try if OSWatcherCreated then WatcherIndex := FOSWatchers.Add(OSWatcher); OSWatcher.Observers.Add(Observer); {$IF DEFINED(DARWIN)} Result:= true; {$ELSE} OSWatcher.UpdateFilter; // This creates or recreates handle. Result := OSWatcher.Handle <> feInvalidHandle; {$ENDIF} // Remove watcher if could not create notification handle. if not Result then RemoveOSWatchLocked(WatcherIndex); {$IFDEF DARWIN} UpdateWatch; {$ENDIF} finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); var i: Integer; begin if not GetWatchPath(aWatchPath) then Exit; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then aWatchPath := GetDriveOfPath(aWatchPath); {$ENDIF} FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i].WatchPath = aWatchPath then begin RemoveObserverLocked(i, aWatcherEvent); Break; end; end; {$IFDEF DARWIN} UpdateWatch; {$ENDIF} finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveWatch(aWatcherEvent: TFSWatcherEvent); var i: Integer; begin FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin RemoveObserverLocked(i, aWatcherEvent); end; {$IFDEF DARWIN} UpdateWatch; {$ENDIF} finally FWatcherLock.Release; end; end; {$IFDEF DARWIN} // udpate FWatcherSubdirs List, in order to facilitate the processing of // subsequent subdirectory events in isWatchSubdir() procedure TFileSystemWatcherImpl.UpdateWatch; var i, j: Integer; watch: TOSWatch; observer: TOSWatchObserver; begin FWatcherLock.Acquire; try FWatcherSubdirs.Clear; for i := 0 to FOSWatchers.Count - 1 do begin watch := FOSWatchers[i]; for j := 0 to watch.Observers.Count - 1 do begin observer := watch.Observers[j]; if TFileView(observer.UserData).FlatView then FWatcherSubdirs.Add(watch.WatchPath); end; end; FDarwinFSWatcher.watchSubtree:= (FWatcherSubdirs.Count>0); finally FWatcherLock.Release; end; end; {$ENDIF} procedure TFileSystemWatcherImpl.RemoveObserverLocked(OSWatcherIndex: Integer; aWatcherEvent: TFSWatcherEvent); var j: Integer; begin for j := 0 to FOSWatchers[OSWatcherIndex].Observers.Count - 1 do begin if SameMethod(TMethod(FOSWatchers[OSWatcherIndex].Observers[j].WatcherEvent), TMethod(aWatcherEvent)) then begin FOSWatchers[OSWatcherIndex].Observers.Delete(j); if FOSWatchers[OSWatcherIndex].Observers.Count = 0 then RemoveOSWatchLocked(OSWatcherIndex) {$IF NOT DEFINED(DARWIN)} else FOSWatchers[OSWatcherIndex].UpdateFilter {$ENDIF}; Break; end; end; end; procedure TFileSystemWatcherImpl.RemoveOSWatchLocked(Index: Integer); begin {$IF DEFINED(MSWINDOWS)} with FOSWatchers[Index] do begin DestroyHandle; Dereference{$IFDEF DEBUG_WATCHER}('RemoveOSWatchLocked'){$ENDIF}; // Not using anymore by FileSystemWatcher from main thread end; {$ENDIF} {$IF DEFINED(DARWIN)} FDarwinFSWatcher.removePath(FOSWatchers[Index].WatchPath); {$ENDIF} FOSWatchers.Delete(Index); end; procedure TFileSystemWatcherImpl.RemoveOSWatch(Watch: TOSWatch); var i: Integer; begin FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i] = Watch then begin RemoveOSWatchLocked(i); Break; end; end; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.TriggerTerminateEvent; {$IF DEFINED(MSWINDOWS)} begin QueueUserAPC(@TerminateProc, Self.Handle, ULONG_PTR(Self)); end; {$ELSEIF DEFINED(LINUX)} var buf: Char; begin // check if thread has been started if Self.FNotifyHandle <> feInvalidHandle then begin buf := #0; FileWrite(FEventPipe[1], buf, 1); end; { if } end; {$ELSEIF DEFINED(DARWIN)} begin FDarwinFSWatcher.terminate; end; {$ELSEIF DEFINED(BSD)} var ke: TKEvent; begin // check if thread has been started if Self.FNotifyHandle <> feInvalidHandle then begin FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 0, EVFILT_TIMER, EV_ADD or EV_ONESHOT, 0, 0, nil); if kevent(FNotifyHandle, @ke, 1, nil, 0, nil) = -1 then begin ShowError('ERROR: kevent()'); end; { if } end; { if } end; {$ELSEIF DEFINED(HAIKUQT)} begin FFinishEvent.SetEvent; end; {$ELSE} begin end; {$ENDIF} // ---------------------------------------------------------------------------- { TOSWatch } constructor TOSWatch.Create(const aWatchPath: String {$IFDEF UNIX_butnot_DARWIN}; aNotifyHandle: TNotifyHandle{$ENDIF}); begin FObservers := TOSWatchObservers.Create(True); FWatchFilter := []; FWatchPath := aWatchPath; {$IFDEF UNIX_butnot_DARWIN} FNotifyHandle := aNotifyHandle; {$ENDIF} {$IF DEFINED(MSWINDOWS)} FReferenceCount := 0; FBuffer := GetMem(VAR_READDIRECTORYCHANGESW_BUFFERSIZE); {$ENDIF} {$IF not DEFINED(DARWIN)} FHandle := feInvalidHandle; {$ENDIF} end; destructor TOSWatch.Destroy; begin {$IF not DEFINED(DARWIN)} DestroyHandle; {$ENDIF} inherited; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Destroying watch ', hexStr(Self)]); {$ENDIF} FObservers.Free; {$IF DEFINED(MSWINDOWS)} Freemem(FBuffer); {$ENDIF} end; {$IF not DEFINED(DARWIN)} procedure TOSWatch.UpdateFilter; var i: Integer; NewFilter: TFSWatchFilter = []; begin for i := 0 to Observers.Count - 1 do NewFilter := NewFilter + Observers[i].WatchFilter; if FWatchFilter <> NewFilter then begin FWatchFilter := NewFilter; // Change watcher filter or recreate watcher. {$IF DEFINED(MSWINDOWS)} SetFilter(FWatchFilter); if FHandle = feInvalidHandle then CreateHandle else QueueCancelRead; // Will cancel and restart Read {$ELSE} DestroyHandle; CreateHandle; {$ENDIF} end; end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure TOSWatch.Reference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$IFDEF DEBUG_WATCHER} var CurrentRefCount: LongInt; {$ENDIF} begin {$IFDEF DEBUG_WATCHER} CurrentRefCount := {$ENDIF} System.InterlockedIncrement(FReferenceCount); {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Watch ', hexStr(Self), ' ++ref=', CurrentRefCount, ' ', s]); {$ENDIF} end; procedure TOSWatch.Dereference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$IFDEF DEBUG_WATCHER} var CurrentRefCount: LongInt; {$ENDIF} begin {$IFDEF DEBUG_WATCHER} CurrentRefCount := System.InterlockedDecrement(FReferenceCount); DCDebug(['FSWatcher: Watch ', hexStr(Self), ' --ref=', CurrentRefCount, ' ', s]); if CurrentRefCount = 0 then {$ELSE} if System.InterlockedDecrement(FReferenceCount) = 0 then {$ENDIF} Free; end; {$ENDIF} {$IF not DEFINED(DARWIN)} procedure TOSWatch.CreateHandle; {$IF DEFINED(MSWINDOWS)} begin FHandle := CreateFileW(PWideChar(UTF16LongName(FWatchPath)), FILE_LIST_DIRECTORY, CREATEFILEW_SHAREMODE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0); if FHandle = INVALID_HANDLE_VALUE then begin FHandle := CreateFileW(PWideChar(CeUtf8ToUtf16(FWatchPath)), FILE_LIST_DIRECTORY, CREATEFILEW_SHAREMODE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0); end; if FHandle = INVALID_HANDLE_VALUE then begin FHandle := feInvalidHandle; ShowError('CreateFileW failed for ' + FWatchPath); end else begin FillChar(FOverlapped, SizeOf(FOverlapped), 0); // Pass pointer to watcher to the notify routine FOverlapped.OSWatch := Self; QueueRead; end; end; {$ELSEIF DEFINED(LINUX)} var hNotifyFilter: cuint32 = IN_DELETE_SELF or IN_MOVE_SELF; begin if wfFileNameChange in FWatchFilter then hNotifyFilter := hNotifyFilter or IN_CREATE or IN_DELETE or IN_MOVE; if wfAttributesChange in FWatchFilter then hNotifyFilter := hNotifyFilter or IN_ATTRIB or IN_MODIFY; FHandle := fpinotify_add_watch(FNotifyHandle, FWatchPath, hNotifyFilter); if FHandle < 0 then begin FHandle := feInvalidHandle; ShowError('inotify_add_watch() failed for ' + FWatchPath); end; end; {$ELSEIF DEFINED(BSD)} var ke: TKEvent; hNotifyFilter: cuint = 0; begin if wfFileNameChange in FWatchFilter then hNotifyFilter := hNotifyFilter or NOTE_DELETE or NOTE_WRITE or NOTE_EXTEND or NOTE_RENAME; if wfAttributesChange in FWatchFilter then hNotifyFilter := hNotifyFilter or NOTE_ATTRIB or NOTE_REVOKE; FHandle := mbFileOpen(FWatchPath, fmOpenRead); if FHandle < 0 then begin FHandle := feInvalidHandle; ShowError('failed to open file ' + FWatchPath); end else begin FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, FHandle, EVFILT_VNODE, EV_ADD or EV_CLEAR, hNotifyFilter, 0, Self); if kevent(FNotifyHandle, @ke, 1, nil, 0, nil) = -1 then begin DestroyHandle; ShowError('kevent failed'); end; { if } end; end; {$ELSEIF DEFINED(HAIKUQT)} var APath: WideString; begin FHandle := 1; APath := CeUtf8ToUtf16(FWatchPath); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Add watch ', FWatchPath); {$ENDIF} QFileSystemWatcher_addPath(FNotifyHandle, @APath); end; {$ELSE} begin FHandle := feInvalidHandle; end; {$ENDIF} procedure TOSWatch.DestroyHandle; {$IF DEFINED(MSWINDOWS)} var tmpHandle: THandle; {$ELSEIF DEFINED(HAIKUQT)} var APath: WideString; {$ENDIF} begin if FHandle <> feInvalidHandle then begin {$IF DEFINED(LINUX)} fpinotify_rm_watch(FNotifyHandle, FHandle); {$ENDIF} {$IF DEFINED(BSD)} FileClose(FHandle); {$ENDIF} {$IF DEFINED(MSWINDOWS)} // If there are outstanding I/O operations on the handle calling CloseHandle // will fail those operations and cause completion routines to be called // but with ErrorCode = 0. Clearing FHandle before the call allows to know // that handle has been destroyed and to not schedule new Reads. {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Watch ', hexStr(Self),' DestroyHandle ', Integer(FHandle), ' done']); {$ENDIF} tmpHandle := FHandle; FHandle := feInvalidHandle; CloseHandle(tmpHandle); {$ELSEIF DEFINED(HAIKUQT)} FHandle := feInvalidHandle; APath := CeUtf8ToUtf16(FWatchPath); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Remove watch ', FWatchPath); {$ENDIF} QFileSystemWatcher_removePath(FNotifyHandle, @APath); {$ELSE} FHandle := feInvalidHandle; {$ENDIF} end; end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure TOSWatch.QueueCancelRead; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueCancelRead: Queueing Cancel APC'); {$ENDIF} Reference{$IFDEF DEBUG_WATCHER}('QueueCancelRead'){$ENDIF}; // For use by CancelReadChangesProc. QueueUserAPC(@CancelReadChangesProc, FileSystemWatcher.Handle, ULONG_PTR(Self)); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueCancelRead: Queueing Cancel APC done'); {$ENDIF} end; procedure TOSWatch.QueueRead; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueRead: Queueing Read APC'); {$ENDIF} Reference{$IFDEF DEBUG_WATCHER}('QueueRead'){$ENDIF}; // For use by ReadChangesProc. QueueUserAPC(@ReadChangesProc, FileSystemWatcher.Handle, ULONG_PTR(Self)); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueRead: Queueing Read APC done'); {$ENDIF} end; procedure TOSWatch.SetFilter(aWatchFilter: TFSWatchFilter); var // Use temp variable so that assigning FNotifyFilter is coherent. dwFilter: DWORD = 0; begin if wfFileNameChange in aWatchFilter then dwFilter := dwFilter or FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME; if wfAttributesChange in aWatchFilter then dwFilter := dwFilter or FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_SIZE or FILE_NOTIFY_CHANGE_LAST_WRITE; FNotifyFilter := dwFilter; end; {$ENDIF} finalization TFileSystemWatcher.DestroyFileSystemWatcher; end. doublecmd-1.1.30/src/platform/ufilecopyex.pas0000644000175000001440000000365015104114162020245 0ustar alexxusersunit uFileCopyEx; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCOSUtils; const FILE_COPY_NO_BUFFERING = $01; type TFileCopyProgress = function(TotalBytes, DoneBytes: Int64; UserData: Pointer): LongBool; TFileCopyEx = function(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): LongBool; var FileCopyEx: TFileCopyEx = nil; CopyAttributesOptionEx: TCopyAttributesOptions = []; implementation {$IF DEFINED(MSWINDOWS)} uses Windows, DCWindows; type TCopyInfo = class UserData: Pointer; UpdateProgress: TFileCopyProgress; end; function Progress(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWord; hSourceFile, hDestinationFile: THandle; lpdata: pointer): Dword; Stdcall; var ACopyInfo: TCopyInfo absolute lpData; begin if ACopyInfo.UpdateProgress(TotalFileSize.QuadPart, TotalBytesTransferred.QuadPart, ACopyInfo.UserData) then Result:= PROGRESS_CONTINUE else begin Result:= PROGRESS_CANCEL; end; end; function CopyFile(const Source, Target: String; Options: UInt32; UpdateProgress: TFileCopyProgress; UserData: Pointer): LongBool; var ACopyInfo: TCopyInfo; dwCopyFlags: DWORD = COPY_FILE_ALLOW_DECRYPTED_DESTINATION; begin ACopyInfo:= TCopyInfo.Create; ACopyInfo.UserData:= UserData; ACopyInfo.UpdateProgress:= UpdateProgress; if (Options and FILE_COPY_NO_BUFFERING <> 0) then begin if (Win32MajorVersion > 5) then dwCopyFlags:= dwCopyFlags or COPY_FILE_NO_BUFFERING; end; Result:= CopyFileExW(PWideChar(UTF16LongName(Source)), PWideChar(UTF16LongName(Target)), @Progress, ACopyInfo, nil, dwCopyFlags) <> 0; ACopyInfo.Free; end; initialization FileCopyEx:= @CopyFile; CopyAttributesOptionEx:= [caoCopyTimeEx, caoCopyAttrEx]; {$ENDIF} end. doublecmd-1.1.30/src/platform/uearlyconfig.pas0000644000175000001440000000337415104114162020403 0ustar alexxusersunit uEarlyConfig; {$mode objfpc}{$H+} {$IF DEFINED(darwin)} {$DEFINE DARKWIN} {$ENDIF} interface uses Classes, SysUtils; var {$IFDEF DARKWIN} gAppMode: Integer = 1; {$ENDIF} gSplashForm: Boolean = True; procedure SaveEarlyConfig; implementation uses DCOSUtils, DCStrUtils, DCClassesUtf8, uSysFolders, uGlobsPaths; var AConfig: String; function GetEarlyConfig: String; var Index: Integer; begin for Index:= 1 to ParamCount do begin if StrBegins(ParamStr(Index), '--config-dir=') then begin Result:= Copy(ParamStr(Index), 14, MaxInt); Result:= IncludeTrailingBackslash(Result) + ApplicationName + ConfigExtension; Exit; end; end; if mbFileExists(gpGlobalCfgDir + ApplicationName + '.inf') then Result:= gpGlobalCfgDir + ApplicationName + ConfigExtension else begin Result:= IncludeTrailingBackslash(GetAppConfigDir) + ApplicationName + ConfigExtension; end; end; procedure Initialize; begin AConfig:= GetEarlyConfig; if mbFileExists(AConfig) then try with TStringListEx.Create do try LoadFromFile(AConfig); gSplashForm:= StrToBoolDef(Values['SplashForm'], gSplashForm); {$IFDEF DARKWIN} gAppMode:= StrToIntDef(Values['DarkMode'], gAppMode); {$ENDIF} finally Free; end; except // Skip end; end; procedure SaveEarlyConfig; begin AConfig:= GetEarlyConfig; ForceDirectories(ExtractFileDir(AConfig)); with TStringListEx.Create do try Add('SplashForm' + NameValueSeparator + BoolToStr(gSplashForm)); {$IFDEF DARKWIN} AddPair('DarkMode', IntToStr(gAppMode)); {$ENDIF} SaveToFile(AConfig); finally Free; end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/udrivewatcher.pas0000644000175000001440000013512115104114162020564 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Enumerating and monitoring drives in the system. Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDriveWatcher; {$mode objfpc}{$H+} {$IFDEF BSD} {$IF not DEFINED(DARWIN)} {$DEFINE BSD_not_DARWIN} {$ENDIF} {$ENDIF} interface uses Classes, SysUtils, fgl, LCLType, uDrive; type TDriveWatcherEvent = (dweDriveAdded, dweDriveRemoved, dweDriveChanged); TDriveWatcherEventNotify = procedure(EventType: TDriveWatcherEvent; const ADrive: PDrive) of object; TDriveWatcherObserverList = specialize TFPGList; TDriveWatcher = class class procedure Initialize(Handle: HWND); class procedure Finalize; class procedure AddObserver(Func: TDriveWatcherEventNotify); class procedure RemoveObserver(Func: TDriveWatcherEventNotify); class function GetDrivesList: TDrivesList; end; implementation uses {$IFDEF UNIX} Unix, DCConvertEncoding, uMyUnix, uDebug {$IFDEF BSD_not_DARWIN} , BSD, BaseUnix, StrUtils, FileUtil {$ENDIF} {$IFDEF LINUX} , uUDisks, uUDev, uMountWatcher, DCStrUtils, uOSUtils, FileUtil, uGVolume, DCOSUtils {$ENDIF} {$IFDEF DARWIN} , StrUtils, uMyDarwin, uDarwinFSWatch {$ENDIF} {$IFDEF HAIKU} , BaseUnix, DCHaiku {$ENDIF} {$ENDIF} {$IFDEF MSWINDOWS} uMyWindows, Windows, JwaDbt, LazUTF8, JwaWinNetWk, ShlObj, DCOSUtils, uDebug, uShlObjAdditional, JwaNative, uGlobs {$ENDIF} ; {$IFDEF LINUX} type { TFakeClass } TFakeClass = class public procedure OnMountWatcherNotify(Sender: TObject); procedure OnGVolumeNotify(Signal: TGVolumeSignal; ADrive: PDrive); procedure OnUDisksNotify(Reason: TUDisksMethod; const ObjectPath: String); end; {$ENDIF} {$IFDEF DARWIN} // Workarounds for FPC RTL Bug type TFixedStatfs = TDarwinStatfs; const MNT_RDONLY = $00000001; MNT_DONTBROWSE = $00100000; type { TDarwinDriverWatcher } TDarwinDriverWatcher = class private _monitor: TSimpleDarwinFSWatcher; procedure handleEvent( event:TDarwinFSWatchEvent ); public constructor Create; destructor Destroy; override; end; {$ENDIF} {$IFDEF BSD_not_DARWIN} type TFixedStatfs = TStatFs; const {$warning Remove this two constants when they are added to FreePascal} NOTE_MOUNTED = $0008; NOTE_UMOUNTED = $0010; type TKQueueDriveEvent = procedure(Event: TDriveWatcherEvent); TKQueueDriveEventWatcher = class(TThread) private kq: Longint; Event: TDriveWatcherEvent; FErrorMsg: String; FOnError: TNotifyEvent; FOnDriveEvent: TKQueueDriveEvent; FFinished: Boolean; procedure RaiseErrorEvent; procedure RaiseDriveEvent; protected procedure Execute; override; procedure DoTerminate; override; public property ErrorMsg: String read FErrorMsg; property OnError: TNotifyEvent read FOnError write FOnError; property OnDriveEvent: TKQueueDriveEvent read FOnDriveEvent write FOnDriveEvent; constructor Create(); destructor Destroy; override; end; {$ENDIF} {$IFDEF HAIKU} type TMountPoint = class Path: String; Device: dev_t; Root: ino_t; end; TMountPoints = specialize TFPGObjectList; {$ENDIF} var FObservers: TDriveWatcherObserverList = nil; InitializeCounter: Integer = 0; {$IFDEF LINUX} FakeClass: TFakeClass = nil; MountWatcher: TMountWatcher = nil; {$ENDIF} {$IFDEF MSWINDOWS} OldWProc: WNDPROC; {$ENDIF} {$IFDEF DARWIN} DarwinDriverWatcher: TDarwinDriverWatcher; {$ENDIF} {$IFDEF BSD_not_DARWIN} KQueueDriveWatcher: TKQueueDriveEventWatcher; {$ENDIF} procedure DoDriveAdded(const ADrive: PDrive); var i: Integer; begin if Assigned(FObservers) then begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveAdded, ADrive); end; end; procedure DoDriveRemoved(const ADrive: PDrive); var i: Integer; begin if Assigned(FObservers) then begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveRemoved, ADrive); end; end; procedure DoDriveChanged(const ADrive: PDrive); var i: Integer; begin if Assigned(FObservers) then begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveChanged, ADrive); end; end; {$IFDEF DARWIN} { TDarwinDriverWatcher } procedure TDarwinDriverWatcher.handleEvent( event:TDarwinFSWatchEvent ); var drive: TDrive; begin Sleep( 1*1000 ); // wait so drive gets available in MacOSX drive.Path:= event.fullPath; if ecCreated in event.categories then begin DoDriveAdded( @drive ); end else if ecRemoved in event.categories then begin DoDriveRemoved( @drive ); end else if not event.fullPath.IsEmpty then begin DoDriveChanged( @drive ); end; end; constructor TDarwinDriverWatcher.Create; const VOLUME_PATH = '/Volumes'; begin Inherited; _monitor:= TSimpleDarwinFSWatcher.Create( VOLUME_PATH , @handleEvent ); end; destructor TDarwinDriverWatcher.Destroy; begin FreeAndNil( _monitor ); inherited Destroy; end; {$ENDIF} {$IFDEF MSWINDOWS} const WM_USER_MEDIACHANGED = WM_USER + 200; var SHChangeNotifyRegister: function(hwnd: HWND; fSources: Longint; fEvents: LONG; wMsg: UINT; cEntries: Longint; pshcne: PSHChangeNotifyEntry): ULONG; stdcall; function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var ADrive: TDrive; AName: array[0..MAX_PATH] of WideChar; rgpidl: PLPITEMIDLIST absolute wParam; lpdb: PDEV_BROADCAST_HDR absolute lParam; lpdbv: PDEV_BROADCAST_VOLUME absolute lpdb; function GetDrivePath(UnitMask: ULONG): String; var DriveNum: Byte; DriveLetterOffset: Integer; begin if (gUpperCaseDriveLetter) then DriveLetterOffset := Ord('A') else begin DriveLetterOffset := Ord('a') end; for DriveNum:= 0 to 25 do begin if ((UnitMask shr DriveNum) and $01) <> 0 then Exit(AnsiChar(DriveNum + DriveLetterOffset) + ':\'); end; end; begin case uiMsg of WM_DEVICECHANGE: begin case wParam of DBT_DEVICEARRIVAL: begin if (lpdb^.dbch_devicetype <> DBT_DEVTYP_VOLUME) then DoDriveAdded(nil) else begin ADrive.Path:= GetDrivePath(lpdbv^.dbcv_unitmask); DoDriveAdded(@ADrive); end; end; DBT_DEVICEREMOVECOMPLETE: begin if (lpdb^.dbch_devicetype <> DBT_DEVTYP_VOLUME) then DoDriveRemoved(nil) else begin ADrive.Path:= GetDrivePath(lpdbv^.dbcv_unitmask); DoDriveRemoved(@ADrive); end; end; DBT_DEVNODES_CHANGED: begin if (lParam = 0) then DoDriveChanged(nil); end; end; end; WM_USER_MEDIACHANGED: begin case lParam of SHCNE_MEDIAINSERTED: begin if not SHGetPathFromIDListW(rgpidl^, AName) then DoDriveAdded(nil) else begin ADrive.Path:= UTF16ToUTF8(UnicodeString(AName)); DoDriveAdded(@ADrive); end; end; SHCNE_MEDIAREMOVED: begin if not SHGetPathFromIDListW(rgpidl^, AName) then DoDriveRemoved(nil) else begin ADrive.Path:= UTF16ToUTF8(UnicodeString(AName)); DoDriveRemoved(@ADrive); end; end; end; end; end; // case Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; procedure SetMyWndProc(Handle : HWND); const SHCNRF_InterruptLevel = $0001; SHCNRF_ShellLevel = $0002; SHCNRF_RecursiveInterrupt = $1000; var AEntries: TSHChangeNotifyEntry; begin {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtrW(Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} if Assigned(SHChangeNotifyRegister) then begin if Succeeded(SHGetFolderLocation(Handle, CSIDL_DRIVES, 0, 0, AEntries.pidl)) then begin AEntries.fRecursive:= False; SHChangeNotifyRegister(Handle, SHCNRF_InterruptLevel or SHCNRF_ShellLevel or SHCNRF_RecursiveInterrupt, SHCNE_MEDIAINSERTED or SHCNE_MEDIAREMOVED, WM_USER_MEDIACHANGED, 1, @AEntries); end; end; end; {$ENDIF} {$IFDEF BSD_not_DARWIN} procedure KQueueDriveWatcher_OnDriveEvent(Event: TDriveWatcherEvent); begin case Event of dweDriveAdded: DoDriveAdded(nil); dweDriveRemoved: DoDriveRemoved(nil); end; { case } end; {$ENDIF} class procedure TDriveWatcher.Initialize(Handle: HWND); begin Inc(InitializeCounter); if InitializeCounter > 1 then // Already initialized. Exit; FObservers := TDriveWatcherObserverList.Create; {$IFDEF LINUX} FakeClass := TFakeClass.Create; if HasUdev then begin if uUDev.Initialize then uUDev.AddObserver(@FakeClass.OnUDisksNotify); end; DCDebug('Detecting mounts through /proc/self/mounts'); MountWatcher:= TMountWatcher.Create; MountWatcher.OnMountEvent:= @FakeClass.OnMountWatcherNotify; MountWatcher.Start; uGVolume.Initialize; uGVolume.AddObserver(@FakeClass.OnGVolumeNotify); {$ENDIF} {$IFDEF MSWINDOWS} SetMyWndProc(Handle); {$ENDIF} {$IFDEF DARWIN} DarwinDriverWatcher := TDarwinDriverWatcher.Create; {$ENDIF} {$IFDEF BSD_not_DARWIN} KQueueDriveWatcher := TKQueueDriveEventWatcher.Create(); KQueueDriveWatcher.OnDriveEvent := @KQueueDriveWatcher_OnDriveEvent; KQueueDriveWatcher.Start; {$ENDIF} end; class procedure TDriveWatcher.Finalize; begin Dec(InitializeCounter); if InitializeCounter <> 0 then // Don't finalize yet. Exit; {$IFDEF LINUX} if HasUdev then begin uUDev.RemoveObserver(@FakeClass.OnUDisksNotify); uUDev.Finalize; end; uGVolume.RemoveObserver(@FakeClass.OnGVolumeNotify); uGVolume.Finalize; FreeAndNil(MountWatcher); if Assigned(FakeClass) then FreeAndNil(FakeClass); {$ENDIF} {$IFDEF DARWIN} FreeAndNil( DarwinDriverWatcher ); {$ENDIF} {$IFDEF BSD_not_DARWIN} KQueueDriveWatcher.Terminate; FreeAndNil(KQueueDriveWatcher); {$ENDIF} if Assigned(FObservers) then FreeAndNil(FObservers); end; class procedure TDriveWatcher.AddObserver(Func: TDriveWatcherEventNotify); begin if FObservers.IndexOf(Func) < 0 then FObservers.Add(Func); end; class procedure TDriveWatcher.RemoveObserver(Func: TDriveWatcherEventNotify); begin FObservers.Remove(Func); end; {$IFDEF LINUX} function BeginsWithString(const patterns: array of string; const strings: array of string): Boolean; var i, j: Integer; begin for i := Low(strings) to High(strings) do begin for j := Low(patterns) to High(patterns) do if StrBegins(strings[i], patterns[j]) then Exit(True); end; Result := False; end; function IsPartOfString(const patterns: array of string; const str: string): Boolean; var I: Integer; begin for I := Low(patterns) to High(patterns) do if Pos(patterns[I], str) > 0 then Exit(True); Result := False; end; function UDisksGetDeviceInfo(const DeviceObjectPath: String; const Devices: TUDisksDevicesInfos; out DeviceInfo: TUDisksDeviceInfo): Boolean; var i: Integer; begin if Assigned(Devices) then begin for i := Low(Devices) to High(Devices) do begin if Devices[i].DeviceObjectPath = DeviceObjectPath then begin DeviceInfo := Devices[i]; Exit(True); end; end; Result := False; end else begin // Devices not supplied, retrieve info from UDev. Result := uUDev.GetDeviceInfo(DeviceObjectPath, DeviceInfo); end; end; procedure UDisksDeviceToDrive(const Devices: TUDisksDevicesInfos; const DeviceInfo: TUDisksDeviceInfo; out Drive: PDrive); var OwnerDevice: TUDisksDeviceInfo; begin New(Drive); with DeviceInfo do begin Drive^.DeviceId := DeviceFile; Drive^.DisplayName := DevicePresentationName; if DeviceIsMounted and (Length(DeviceMountPaths) > 0) then begin Drive^.Path := DeviceMountPaths[0]; if Drive^.DisplayName = EmptyStr then begin if Drive^.Path <> PathDelim then Drive^.DisplayName := ExtractFileName(Drive^.Path) else Drive^.DisplayName := PathDelim; end; if Drive^.DisplayName = IdUuid then begin Drive^.DisplayName := ExtractFileName(DeviceFile); end; end else begin Drive^.Path := EmptyStr; if Drive^.DisplayName = EmptyStr then begin if (IdLabel <> EmptyStr) then Drive^.DisplayName := IdLabel else Drive^.DisplayName := ExtractFileName(DeviceFile); end; end; Drive^.DriveLabel := IdLabel; Drive^.FileSystem := IdType; Drive^.DriveSize := StrToInt64Def(DeviceSize, 0) * 512; if DeviceIsPartition then begin if UDisksGetDeviceInfo(PartitionSlave, Devices, OwnerDevice) and OwnerDevice.DeviceIsRemovable then begin // Removable partition usually means pen-drive type. if BeginsWithString(['usb'], OwnerDevice.DriveConnectionInterface) then Drive^.DriveType := dtRemovableUsb else Drive^.DriveType := dtRemovable; end else Drive^.DriveType := dtHardDisk; end else if DeviceIsDrive then begin if BeginsWithString(['flash'], DriveMediaCompatibility) then Drive^.DriveType := dtFlash else if BeginsWithString(['floppy'], DriveMediaCompatibility) then Drive^.DriveType := dtFloppy else if BeginsWithString(['optical'], DriveMediaCompatibility) then Drive^.DriveType := dtOptical else if BeginsWithString(['usb'], DriveConnectionInterface) then Drive^.DriveType := dtRemovableUsb else Drive^.DriveType := dtUnknown; end else if DeviceIsSystemInternal then Drive^.DriveType := dtHardDisk else Drive^.DriveType := dtUnknown; Drive^.IsMediaAvailable := DeviceIsMediaAvailable; Drive^.IsMediaEjectable := DriveIsMediaEjectable; Drive^.IsMediaRemovable := DeviceIsRemovable; Drive^.IsMounted := DeviceIsMounted; Drive^.AutoMount := (DeviceAutomountHint = EmptyStr) or (DeviceAutomountHint = 'always'); end; // DriveSize is not correct when Optical drive isn't mounted (at least in Linux) with Drive^ do if (DriveType = dtOptical) and not IsMounted then DriveSize := 0; end; {$ENDIF} class function TDriveWatcher.GetDrivesList: TDrivesList; {$IF DEFINED(MSWINDOWS)} var Key: HKEY = 0; Drive : PDrive; dwResult: DWORD; DriveBits: DWORD; DriveNum: Integer; DrivePath: String; WinDriveType: UINT; nFile: TNetResourceW; OptionalColon: String; DriveLetter: AnsiChar; NetworkPathSize: DWORD; lpBuffer: Pointer = nil; nFileList: PNetResourceW; DriveLetterOffset: Integer; RegDrivePath: UnicodeString; dwCount, dwBufferSize: DWORD; hEnum: THandle = INVALID_HANDLE_VALUE; NetworkPath: array[0..MAX_PATH] of WideChar; begin if gUpperCaseDriveLetter then DriveLetterOffset := Ord('A') else begin DriveLetterOffset := Ord('a'); end; if gShowColonAfterDrive then OptionalColon := ':' else begin OptionalColon := EmptyStr; end; Result := TDrivesList.Create; { fill list } DriveBits := GetLogicalDrives; for DriveNum := 0 to 25 do begin if ((DriveBits shr DriveNum) and $1) = 0 then begin // Try to find in mapped network drives DriveLetter := AnsiChar(DriveNum + DriveLetterOffset); RegDrivePath := 'Network' + PathDelim + WideChar(DriveLetter); if RegOpenKeyExW(HKEY_CURRENT_USER, PWideChar(RegDrivePath), 0, KEY_READ, Key) = ERROR_SUCCESS then begin NetworkPathSize := MAX_PATH * SizeOf(WideChar); if RegQueryValueExW(Key, 'RemotePath', nil, nil, @NetworkPath, @NetworkPathSize) = ERROR_SUCCESS then begin New(Drive); Result.Add(Drive); ZeroMemory(Drive, SizeOf(TDrive)); with Drive^ do begin Path := DriveLetter + ':\'; DisplayName := DriveLetter + OptionalColon; DriveLabel := UTF16ToUTF8(UnicodeString(NetworkPath)); DriveType := dtNetwork; AutoMount := True; end; end; RegCloseKey(Key); end; Continue; end; DriveLetter := AnsiChar(DriveNum + DriveLetterOffset); DrivePath := DriveLetter + ':\'; WinDriveType := GetDriveType(PChar(DrivePath)); if WinDriveType = DRIVE_NO_ROOT_DIR then Continue; New(Drive); Result.Add(Drive); ZeroMemory(Drive, SizeOf(TDrive)); with Drive^ do begin DeviceId := EmptyStr; Path := DrivePath; DisplayName := DriveLetter + OptionalColon; DriveLabel := EmptyStr; FileSystem := EmptyStr; IsMediaAvailable := True; IsMediaEjectable := False; IsMediaRemovable := False; IsMounted := True; AutoMount := True; case WinDriveType of DRIVE_REMOVABLE: begin WinDriveType:= mbGetDriveType(DriveLetter); if (WinDriveType and FILE_FLOPPY_DISKETTE <> 0) then DriveType := dtFloppy else begin DriveType := dtFlash; IsMounted := mbDriveReady(DrivePath); end; IsMediaEjectable := True; IsMediaRemovable := True; end; DRIVE_FIXED: DriveType := dtHardDisk; DRIVE_REMOTE: DriveType := dtNetwork; DRIVE_CDROM: begin DriveType := dtOptical; IsMediaEjectable := True; IsMediaRemovable := True; end; DRIVE_RAMDISK: DriveType := dtRamDisk; else DriveType := dtUnknown; end; if IsMediaAvailable then begin case DriveType of dtFloppy: ; // Don't retrieve, it's slow. dtFlash, dtHardDisk: begin DriveLabel := mbGetVolumeLabel(Path, True); FileSystem := mbGetFileSystem(DrivePath); end; dtNetwork: DriveLabel := mbGetRemoteFileName(Path); else DriveLabel := mbGetVolumeLabel(Path, True); end; if DriveType in [dtFlash, dtHardDisk] then begin case mbDriveBusType(DriveLetter) of BusTypeUsb: DriveType := dtRemovableUsb; BusTypeSd, BusTypeMmc: DriveType := dtFlash; end; end; end; end; end; // Enumerate Terminal Services Disks if RemoteSession then try ZeroMemory(@nFile, SizeOf(TNetResourceW)); nFile.dwScope := RESOURCE_GLOBALNET; nFile.dwType := RESOURCETYPE_DISK; nFile.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; nFile.dwUsage := RESOURCEUSAGE_CONTAINER; nFile.lpRemoteName := '\\tsclient'; dwResult := WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, @nFile, hEnum); if (dwResult <> NO_ERROR) then Exit; dwCount := DWORD(-1); // 512 Kb must be enough dwBufferSize:= $80000; // Allocate output buffer GetMem(lpBuffer, dwBufferSize); // Enumerate all resources dwResult := WNetEnumResourceW(hEnum, dwCount, lpBuffer, dwBufferSize); if dwResult = ERROR_NO_MORE_ITEMS then Exit; if (dwResult <> NO_ERROR) then Exit; nFileList:= PNetResourceW(lpBuffer); for DriveNum := 0 to Int64(dwCount) - 1 do begin New(Drive); Result.Add(Drive); ZeroMemory(Drive, SizeOf(TDrive)); with Drive^ do begin Path := UTF16ToUTF8(UnicodeString(nFileList^.lpRemoteName)); DriveLabel := ExcludeTrailingBackslash(Path); DisplayName := PathDelim + UTF8LowerCase(ExtractFileName(DriveLabel)); DriveType := dtNetwork; IsMediaAvailable := True; IsMounted := True; AutoMount := True; end; Inc(nFileList); end; finally if (hEnum <> INVALID_HANDLE_VALUE) then dwResult := WNetCloseEnum(hEnum); if (dwResult <> NO_ERROR) and (dwResult <> ERROR_NO_MORE_ITEMS) then DCDebug(mbSysErrorMessage(dwResult)); if Assigned(lpBuffer) then FreeMem(lpBuffer); end; end; {$ELSEIF DEFINED(LINUX)} function CheckMountEntry(MountEntry: PMountEntry): Boolean; begin Result:= False; with MountEntry^ do begin if DesktopEnv = DE_FLATPAK then begin if (not StrBegins(mnt_dir, '/mnt/')) and (not StrBegins(mnt_dir, '/media/')) and (not StrBegins(mnt_dir, '/run/user/')) and (not StrBegins(mnt_dir, '/run/media/')) and (not StrBegins(mnt_dir, '/var/run/user/')) and (not StrBegins(mnt_dir, '/var/run/media/')) then Exit; end; // check filesystem if (mnt_fsname = 'proc') then Exit; // check mount dir if (mnt_dir = '') or (mnt_dir = '/') or (mnt_dir = 'none') or (mnt_dir = '/proc') or (StrBegins(mnt_dir, '/dev/')) or (StrBegins(mnt_dir, '/sys/')) or (StrBegins(mnt_dir, '/proc/')) or (StrBegins(mnt_dir, '/snap/')) or (StrPos(mnt_dir, '/snapd/') <> nil) or (StrBegins(ExtractFileName(mnt_dir), '.')) then Exit; // check file system type if (mnt_type = 'ignore') or (mnt_type = 'none') or (mnt_type = 'cgroup') or (mnt_type = 'cpuset') or (mnt_type = 'ramfs') or (mnt_type = 'tmpfs') or (mnt_type = 'proc') or (mnt_type = 'swap') or (mnt_type = 'sysfs') or (mnt_type = 'debugfs') or (mnt_type = 'devtmpfs') or (mnt_type = 'devpts') or (mnt_type = 'fusectl') or (mnt_type = 'securityfs') or (mnt_type = 'binfmt_misc') or (mnt_type = 'fuse.portal') or (mnt_type = 'fuse.gvfsd-fuse') or (mnt_type = 'fuse.gvfs-fuse-daemon') or (mnt_type = 'fuse.truecrypt') or (mnt_type = 'nfsd') or (mnt_type = 'usbfs') or (mnt_type = 'mqueue') or (mnt_type = 'configfs') or (mnt_type = 'hugetlbfs') or (mnt_type = 'selinuxfs') or (mnt_type = 'rpc_pipefs') then Exit; // check mount options if (StrPos(mnt_opts, 'bind') <> nil) or (StrPos(mnt_opts, 'x-gvfs-hide') <> nil) then Exit; end; Result:= True; end; function UDisksGetDeviceObjectByUUID(const UUID: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].IdUuid = UUID then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; function UDisksGetDeviceObjectByLabel(const DriveLabel: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].IdLabel = DriveLabel then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; function UDisksGetDeviceObjectByDeviceFile(const DeviceFile: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].DeviceFile = DeviceFile then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; var AddedDevices: TStringList = nil; AddedMountPoints: TStringList = nil; HaveUDisksDevices: Boolean = False; function CheckDevice(const Device: String): Boolean; begin // If UDisks is available name=value pair should have been handled, // so we are free to check the device name. Otherwise don't check it // if it is a known name=value pair. Result := HaveUDisksDevices or not (StrBegins(Device, 'UUID=') or StrBegins(Device, 'LABEL=')); end; // Checks if device on some mount point hasn't been added yet. function CanAddDevice(const Device, MountPoint: String): Boolean; var Idx: Integer; begin Idx := AddedMountPoints.IndexOf(MountPoint); Result := (Idx < 0) or (CheckDevice(Device) and CheckDevice(AddedDevices[Idx]) and (AddedDevices[Idx] <> Device)); end; function GetDrive(const DrivesList: TDrivesList; const Device, MountPoint: String): PDrive; var K: Integer; begin for K := 0 to DrivesList.Count - 1 do begin if (DrivesList[K]^.Path = MountPoint) or (DrivesList[K]^.DeviceId = Device) then Exit(DrivesList[K]); end; Result := nil; end; function GetStrMaybeQuoted(const s: string): string; var i: Integer; begin Result := ''; if Length(s) > 0 then begin if s[1] in ['"', ''''] then begin for i := Length(s) downto 2 do begin if s[i] = s[1] then Exit(Copy(s, 2, i-2)); end; end else Result := s; end; end; function IsDeviceMountedAtRoot(const UDisksDevice: TUDisksDeviceInfo): Boolean; var i: Integer; begin if UDisksDevice.DeviceIsMounted then begin for i := Low(UDisksDevice.DeviceMountPaths) to High(UDisksDevice.DeviceMountPaths) do if UDisksDevice.DeviceMountPaths[i] = PathDelim then Exit(True); end; Result := False; end; function UDisksGetDevice(const UDisksDevices: TUDisksDevicesInfos; var DeviceFile: String; out UDisksDeviceObject: String): Boolean; begin // Handle "/dev/", "UUID=" and "LABEL=" through UDisks if available. if StrBegins(DeviceFile, 'UUID=') then begin UDisksDeviceObject := UDisksGetDeviceObjectByUUID( GetStrMaybeQuoted(Copy(DeviceFile, 6, MaxInt)), UDisksDevices); if UDisksDeviceObject <> EmptyStr then DeviceFile := '/dev/' + ExtractFileName(UDisksDeviceObject); Result := True; end else if StrBegins(DeviceFile, 'LABEL=') then begin UDisksDeviceObject := UDisksGetDeviceObjectByLabel( GetStrMaybeQuoted(Copy(DeviceFile, 7, MaxInt)), UDisksDevices); if UDisksDeviceObject <> EmptyStr then DeviceFile := '/dev/' + ExtractFileName(UDisksDeviceObject); Result := True; end else if StrBegins(DeviceFile, 'PARTUUID=') then begin DeviceFile := mbReadAllLinks('/dev/disk/by-partuuid/' + GetStrMaybeQuoted(Copy(DeviceFile, 10, MaxInt))); if Length(DeviceFile) > 0 then UDisksDeviceObject := UDisksGetDeviceObjectByDeviceFile(DeviceFile, UDisksDevices); Result := True; end else if StrBegins(DeviceFile, 'PARTLABEL=') then begin DeviceFile := mbReadAllLinks('/dev/disk/by-partlabel/' + GetStrMaybeQuoted(Copy(DeviceFile, 11, MaxInt))); if Length(DeviceFile) > 0 then UDisksDeviceObject := UDisksGetDeviceObjectByDeviceFile(DeviceFile, UDisksDevices); Result := True; end else if StrBegins(DeviceFile, '/dev/') then begin DeviceFile := mbCheckReadLinks(DeviceFile); UDisksDeviceObject := UDisksGetDeviceObjectByDeviceFile(DeviceFile, UDisksDevices); Result := True; end else Result := False; end; const MntEntFileList: array[1..2] of PChar = (_PATH_MOUNTED, _PATH_FSTAB); var Drive : PDrive = nil; fstab: PIOFile; pme: PMountEntry; I: Integer; UpdateDrive: Boolean; UDisksDevices: TUDisksDevicesInfos; UDisksDevice: TUDisksDeviceInfo; UDisksDeviceObject: String; DeviceFile: String; MountPoint: String; HandledByUDisks: Boolean = False; begin Result := TDrivesList.Create; try AddedDevices := TStringList.Create; AddedMountPoints := TStringList.Create; if HasUdev then HaveUDisksDevices := uUDev.EnumerateDevices(UDisksDevices); // Storage devices have to be in mtab or fstab and reported by UDisks. for I:= Low(MntEntFileList) to High(MntEntFileList) do begin fstab:= setmntent(MntEntFileList[I],'r'); if not Assigned(fstab) then Continue; pme:= getmntent(fstab); while (pme <> nil) do begin if CheckMountEntry(pme) then begin DeviceFile := StrPas(pme^.mnt_fsname); MountPoint := CeSysToUtf8(StrPas(pme^.mnt_dir)); if MountPoint <> PathDelim then MountPoint := ExcludeTrailingPathDelimiter(MountPoint); if HaveUDisksDevices then begin HandledByUDisks := UDisksGetDevice(UDisksDevices, DeviceFile, UDisksDeviceObject); if HandledByUDisks then begin if CanAddDevice(DeviceFile, MountPoint) and UDisksGetDeviceInfo(UDisksDeviceObject, UDisksDevices, UDisksDevice) then begin if not UDisksDevice.DevicePresentationHide then begin UDisksDevice.DeviceIsMounted:= (I = 1); AddString(UDisksDevice.DeviceMountPaths, MountPoint); UDisksDeviceToDrive(UDisksDevices, UDisksDevice, Drive); end; end // Even if mounted device is not listed by UDisks add it anyway the standard way. else if I = 1 then // MntEntFileList[1] = _PATH_MOUNTED HandledByUDisks := False; // Else don't add the device if it's not listed by UDisks. end; end; // Add by entry in fstab/mtab. if not HandledByUDisks then begin DeviceFile := mbCheckReadLinks(DeviceFile); Drive := GetDrive(Result, DeviceFile, MountPoint); if (Drive = nil) then begin New(Drive); FillChar(Drive^, SizeOf(TDrive), 0); UpdateDrive := False; end else begin UpdateDrive := (Drive^.FileSystem = 'autofs'); if not UpdateDrive then Drive:= nil; end; if Assigned(Drive) then begin with Drive^ do begin DeviceId := DeviceFile; Path := MountPoint; if MountPoint <> PathDelim then DisplayName := ExtractFileName(Path) else DisplayName := PathDelim; DriveLabel := Path; FileSystem := StrPas(pme^.mnt_type); if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD', 'UDF'], UpperCase(FileSystem)) then // for external usb cdrom and dvd DriveType := dtOptical else if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(DeviceFile)) then DriveType := dtOptical else if IsPartOfString(['FLOPPY'], UpperCase(FileSystem)) then DriveType := dtFloppy else if IsPartOfString(['FLOPPY', '/DEV/FD'], UpperCase(DeviceFile)) then DriveType := dtFloppy else if IsPartOfString(['ZIP', 'USB', 'CAMERA'], UpperCase(FileSystem)) then DriveType := dtFlash else if IsPartOfString(['/MEDIA/', '/RUN/MEDIA/'], UpperCase(MountPoint)) then DriveType := dtFlash else if IsPartOfString(['NFS', 'SMB', 'NETW', 'CIFS'], UpperCase(FileSystem)) then DriveType := dtNetwork else DriveType := dtHardDisk; IsMediaAvailable:= True; IsMediaEjectable:= (DriveType = dtOptical); IsMediaRemovable:= DriveType in [dtFloppy, dtOptical, dtFlash]; // If drive from /etc/mtab then it is mounted IsMounted:= (MntEntFileList[I] = _PATH_MOUNTED); AutoMount:= True; end; if UpdateDrive then Drive:= nil; end; end; // If drive object has been created add it to the list. if Assigned(Drive) then begin Result.Add(Drive); Drive := nil; AddedDevices.Add(DeviceFile); AddedMountPoints.Add(MountPoint); {$IFDEF DEBUG} DCDebug('Adding drive "' + DeviceFile + '" with mount point "' + MountPoint + '"'); {$ENDIF} end; end // Add root drive in added list to skip it later else if HasUdev and (pme^.mnt_dir = PathDelim) then begin DeviceFile := StrPas(pme^.mnt_fsname); UDisksGetDevice(UDisksDevices, DeviceFile, UDisksDeviceObject); AddedDevices.Add(DeviceFile); AddedMountPoints.Add(PathDelim); end; pme:= getmntent(fstab); end; endmntent(fstab); end; if HaveUDisksDevices then begin for i := Low(UDisksDevices) to High(UDisksDevices) do begin // Add drives not having a partition table which are usually devices // with removable media like CDROM, floppy - they can be mounted. // Don't add drives with partition table because they cannot be mounted. // Don't add drives with ram and loop device because they cannot be mounted. // Add devices reported as "filesystem". if ((UDisksDevices[i].DeviceIsDrive and (not UDisksDevices[i].DeviceIsPartitionTable) and (BeginsWithString(['floppy', 'optical'], UDisksDevices[i].DriveMediaCompatibility)) and (UDisksDevices[i].IdType <> 'swap')) or (UDisksDevices[i].IdUsage = 'filesystem')) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/ram') = False) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/zram') = False) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/loop') = False) and (not UDisksDevices[i].DevicePresentationHide) then begin if (AddedDevices.IndexOf(UDisksDevices[i].DeviceFile) < 0) and (not IsDeviceMountedAtRoot(UDisksDevices[i])) then begin UDisksDeviceToDrive(UDisksDevices, UDisksDevices[i], Drive); Result.Add(Drive); Drive := nil; AddedDevices.Add(UDisksDevices[i].DeviceFile); AddedMountPoints.Add(EmptyStr); {$IFDEF DEBUG} DCDebug('Adding UDisks drive "' + UDisksDevices[i].DeviceFile + '"'); {$ENDIF} end; end; end; end; EnumerateVolumes(Result); finally if Assigned(AddedDevices) then AddedDevices.Free; if Assigned(AddedMountPoints) then AddedMountPoints.Free; if Assigned(Drive) then Dispose(Drive); end; end; {$ELSEIF DEFINED(BSD)} function GetDriveTypeFromDeviceOrFSType(const DeviceId, FSType: String): TDriveType; begin // using filesystem type if FSType = 'swap' then Result := dtUnknown else if FSType = 'zfs' then Result := dtHardDisk else if FSType = 'nfs' then Result := dtNetwork else if FSType = 'smbfs' then Result := dtNetwork else if FSType = 'cifs' then Result := dtNetwork {$IF DEFINED(DARWIN)} else if FSType = 'hfs' then Result := dtHardDisk else if FSType = 'apfs' then Result := dtHardDisk else if FSType = 'ntfs' then Result := dtHardDisk else if FSType = 'msdos' then Result := dtHardDisk else if FSType = 'exfat' then Result := dtHardDisk else if FSType = 'lifs' then Result := dtHardDisk else if FSType = 'macfuse' then Result := dtHardDisk else if FSType = 'ufsd_NTFS' then Result := dtHardDisk else if FSType = 'tuxera_ntfs' then Result := dtHardDisk else if FSType = 'fusefs_txantfs' then Result := dtHardDisk else if FSType = 'udf' then Result := dtOptical else if FSType = 'cd9660' then Result := dtOptical else if FSType = 'cddafs' then Result := dtOptical else if FSType = 'afpfs' then Result := dtNetwork else if FSType = 'webdav' then Result := dtNetwork {$ENDIF} // using device name else if AnsiStartsStr('/dev/ad', DeviceId) then Result := dtHardDisk else if AnsiStartsStr('/dev/acd', DeviceId) then Result := dtOptical // CD-ROM (IDE) else if AnsiStartsStr('/dev/da', DeviceId) then Result := dtFlash // USB else if AnsiStartsStr('/dev/cd', DeviceId) then Result := dtOptical // CD-ROM (SCSI) else if AnsiStartsStr('/dev/mcd', DeviceId) then Result := dtOptical // CD-ROM (other) else if AnsiStartsStr('/dev/fd', DeviceId) then Result := dtFloppy else if AnsiStartsStr('/dev/sa', DeviceId) then Result := dtUnknown // Tape (SCSI) else if AnsiStartsStr('/dev/ast', DeviceId) then Result := dtUnknown // Tape (IDE) else if AnsiStartsStr('/dev/fla', DeviceId) then Result := dtHardDisk // Flash drive else if AnsiStartsStr('/dev/aacd', DeviceId) or AnsiStartsStr('/dev/mlxd', DeviceId) or AnsiStartsStr('/dev/mlyd', DeviceId) or AnsiStartsStr('/dev/amrd', DeviceId) or AnsiStartsStr('/dev/idad', DeviceId) or AnsiStartsStr('/dev/idad', DeviceId) or AnsiStartsStr('/dev/twed', DeviceId) then Result := dtHardDisk else Result := dtUnknown; // devfs, nullfs, procfs, etc. end; const MAX_FS = 128; var drive: PDrive; fstab: PFSTab; fs: TFixedStatfs; fsList: array[0..MAX_FS] of TFixedStatfs; iMounted, iAdded, count: Integer; found: boolean; dtype: TDriveType; begin Result := TDrivesList.Create; fstab := getfsent(); while fstab <> nil do begin dtype := GetDriveTypeFromDeviceOrFSType(fstab^.fs_spec, fstab^.fs_vfstype); // only add known drive types and skip root directory if (dtype = dtUnknown) or (fstab^.fs_file = PathDelim) then begin fstab := getfsent(); Continue; end; { if } New(drive); Result.Add(drive); with drive^ do begin Path := CeSysToUtf8(fstab^.fs_file); DisplayName := ExtractFileName(Path); DriveLabel := Path; FileSystem := fstab^.fs_vfstype; DeviceId := fstab^.fs_spec; DriveType := dtype; IsMediaAvailable := false; IsMediaEjectable := false; IsMediaRemovable := false; IsMounted := false; AutoMount := true; end; { with } fstab := getfsent(); end; { while } endfsent(); count := getfsstat(@fsList, SizeOf(fsList), MNT_WAIT); for iMounted := 0 to count - 1 do begin fs := fsList[iMounted]; {$IF DEFINED(DARWIN)} if (fs.fflags and MNT_DONTBROWSE <> 0) then Continue; {$ENDIF} // check if already added using fstab found := false; for iAdded := 0 to Result.Count - 1 do begin if Result[iAdded]^.Path = fs.mountpoint then begin drive := Result[iAdded]; with drive^ do begin IsMounted := true; IsMediaAvailable := true; end; found := true; break; end; { if } end; { for } if found then continue; dtype := GetDriveTypeFromDeviceOrFSType( {$IF DEFINED(DARWIN)} fs.mntfromname {$ELSE} fs.mnfromname {$ENDIF}, fs.fstypename ); // only add known drive types and skip root directory if (dtype = dtUnknown) {$IFNDEF DARWIN}or (fs.mountpoint = PathDelim){$ENDIF} then Continue; New(drive); Result.Add(drive); with drive^ do begin Path := CeSysToUtf8(fs.mountpoint); DisplayName := ExtractFileName(Path); DriveLabel := Path; FileSystem := fs.fstypename; DeviceId := {$IF DEFINED(DARWIN)}fs.mntfromname{$ELSE}fs.mnfromname{$ENDIF}; DriveType := dtype; IsMediaAvailable := true; IsMediaEjectable := false; IsMediaRemovable := false; IsMounted := true; AutoMount := true; end; { with } {$IF DEFINED(DARWIN)} if (fs.mountpoint = PathDelim) then begin Drive^.DisplayName:= GetVolumeName(fs.mntfromname); if Length(Drive^.DisplayName) = 0 then Drive^.DisplayName:= 'System'; end else begin if (fs.fstypename = 'apfs') and (fs.fflags and MNT_RDONLY = MNT_RDONLY) then begin // APFS bootable specifications, there are two Volumns: // VolumnName: ReadOnly, No FSEvent // VolumnName - Data: Writable, MNT_DONTBROWSE, FSEvent Drive^.Path := Drive^.Path + ' - Data'; Drive^.DriveLabel := Drive^.Path; end; end; {$ENDIF} end; { for } end; {$ELSEIF DEFINED(HAIKU)} var dev: dev_t; DirPtr: pDir; Drive: PDrive; APath: String; APos: cint = 0; Index: Integer; fs_info: Tfs_info; PtrDirEnt: pDirent; Info: BaseUnix.Stat; MountPoint: TMountPoint; MountPoints: TMountPoints; begin Result := TDrivesList.Create; MountPoints:= TMountPoints.Create(True); // Haiku mounts drives to root directory DirPtr:= fpOpenDir(PAnsiChar('/')); if Assigned(DirPtr) then try PtrDirEnt:= fpReadDir(DirPtr^); while PtrDirEnt <> nil do begin if (PtrDirEnt^.d_name <> '..') and (PtrDirEnt^.d_name <> '.') then begin APath:= PathDelim + PtrDirEnt^.d_name; if fpLStat(APath, Info) = 0 then begin if fpS_ISDIR(Info.st_mode) then begin MountPoint:= TMountPoint.Create; MountPoint.Path:= APath; MountPoint.Device:= Info.st_dev; MountPoint.Root:= Info.st_ino; MountPoints.Add(MountPoint); end; end; end; PtrDirEnt:= fpReadDir(DirPtr^); end; finally fpCloseDir(DirPtr^); end; dev:= next_dev(@APos); while (dev >= 0) do begin if (fs_stat_dev(dev, @fs_info) >= 0) then begin if (fs_info.fsh_name <> 'devfs') then begin for Index:= 0 to MountPoints.Count - 1 do begin MountPoint:= MountPoints[Index]; if (MountPoint.Device = fs_info.dev) and (MountPoint.Root = fs_info.root) then begin New(Drive); Result.Add(Drive); with Drive^ do begin DeviceId := fs_info.device_name; Path := MountPoint.Path; DisplayName := ExtractFilename(Path); DriveLabel := fs_info.volume_name; FileSystem := fs_info.fsh_name; IsMediaAvailable := True; IsMediaEjectable := False; IsMediaRemovable := (fs_info.flags and B_FS_IS_REMOVABLE <> 0); IsMounted := True; AutoMount := True; end; Break; end; end; end; end; dev:= next_dev(@APos) end; MountPoints.Free; end; {$ELSE} begin Result := TDrivesList.Create; end; {$ENDIF} {$IFDEF LINUX} procedure TFakeClass.OnMountWatcherNotify(Sender: TObject); var ADrive: PDrive = nil; begin DoDriveChanged(ADrive); end; procedure TFakeClass.OnGVolumeNotify(Signal: TGVolumeSignal; ADrive: PDrive); begin try case Signal of GVolume_Added: DoDriveAdded(ADrive); GVolume_Removed: DoDriveRemoved(ADrive); GVolume_Changed: DoDriveChanged(ADrive); end; finally if Assigned(ADrive) then Dispose(ADrive); end; end; procedure TFakeClass.OnUDisksNotify(Reason: TUDisksMethod; const ObjectPath: String); var Result: Boolean; ADrive: PDrive = nil; DeviceInfo: TUDisksDeviceInfo; begin Result:= uUDev.GetDeviceInfo(ObjectPath, DeviceInfo); if Result then UDisksDeviceToDrive(nil, DeviceInfo, ADrive); try case Reason of UDisks_DeviceAdded: DoDriveAdded(ADrive); UDisks_DeviceRemoved: DoDriveRemoved(ADrive); UDisks_DeviceChanged: DoDriveChanged(ADrive); end; finally if Assigned(ADrive) then Dispose(ADrive); end; end; {$ENDIF} {$IFDEF BSD_not_DARWIN} { TKQueueDriveEventWatcher } procedure TKQueueDriveEventWatcher.RaiseErrorEvent; begin DCDebug(Self.ErrorMsg); if Assigned(Self.FOnError) then Self.FOnError(Self); end; procedure TKQueueDriveEventWatcher.RaiseDriveEvent; begin if Assigned(Self.FOnDriveEvent) then Self.FOnDriveEvent(Self.Event); end; procedure TKQueueDriveEventWatcher.Execute; const KQUEUE_ERROR = -1; var ke: TKEvent; begin try Self.kq := kqueue(); if Self.kq = KQUEUE_ERROR then begin Self.FErrorMsg := 'ERROR: kqueue()'; Synchronize(@Self.RaiseErrorEvent); exit; end; { if } try FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 1, EVFILT_FS, EV_ADD, 0, 0, nil); if kevent(kq, @ke, 1, nil, 0, nil) = KQUEUE_ERROR then begin Self.FErrorMsg := 'ERROR: kevent()'; Synchronize(@Self.RaiseErrorEvent); exit; end; { if } while not Terminated do begin FillByte(ke, SizeOf(ke), 0); if kevent(kq, nil, 0, @ke, 1, nil) = KQUEUE_ERROR then break; case ke.Filter of EVFILT_TIMER: // user triggered continue; EVFILT_FS: begin if (ke.FFlags and NOTE_MOUNTED <> 0) then begin Self.Event := dweDriveAdded; Synchronize(@Self.RaiseDriveEvent); end { if } else if (ke.FFlags and NOTE_UMOUNTED <> 0) then begin Self.Event := dweDriveRemoved; Synchronize(@Self.RaiseDriveEvent); end; { else if } end; end; { case } end; { while } finally FileClose(Self.kq); end; { try - finally } finally FFinished := True; end; { try - finally } end; procedure TKQueueDriveEventWatcher.DoTerminate; var ke: TKEvent; begin inherited DoTerminate; if Self.kq = -1 then Exit; FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 0, EVFILT_TIMER, EV_ADD or EV_ONESHOT, 0, 0, nil); kevent(Self.kq, @ke, 1, nil, 0, nil); end; constructor TKQueueDriveEventWatcher.Create(); begin Self.FreeOnTerminate := true; Self.FFinished := false; inherited Create(true); end; destructor TKQueueDriveEventWatcher.Destroy; begin if not Terminated then begin Self.Terminate; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not FFinished do CheckSynchronize(100); {$ENDIF} WaitFor; end; { if } end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} initialization Pointer(SHChangeNotifyRegister):= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHChangeNotifyRegister'); {$ENDIF} end. doublecmd-1.1.30/src/platform/udragdropqt.pas0000644000175000001440000003101715104114162020243 0ustar alexxusers{ Drag&Drop operations for QT. } unit uDragDropQt; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, uDragDropEx, qtwidgets {$IF DEFINED(LCLQT)} , qt4 {$ELSEIF DEFINED(LCLQT5)} , qt5 {$ELSEIF DEFINED(LCLQT6)} , qt6 {$ENDIF} ; type TDragDropSourceQT = class(TDragDropSource) function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; private function GetWidget: QWidgetH; end; TDragDropTargetQT = class(TDragDropTarget) public constructor Create(TargetControl: TWinControl); override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private FEventHook : QObject_hookH; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; // called by QT function GetWidget: QWidgetH; function HasSupportedFormat(DropEvent: QDropEventH): Boolean; function OnDragEnter(DragEnterEvent: QDragEnterEventH): Boolean; function OnDragOver(DragMoveEvent: QDragMoveEventH): Boolean; function OnDrop(DropEvent: QDropEventH): Boolean; function OnDragLeave(DragLeaveEvent: QDragLeaveEventH): Boolean; end; function QtActionToDropEffect(Action: QtDropAction): TDropEffect; function DropEffectToQtAction(DropEffect: TDropEffect): QtDropAction; function QtDropEventPointToLCLPoint(const PDropEventPoint: PQtPoint): TPoint; implementation uses uClipboard, LCLIntf; const uriListMimeW : WideString = uriListMime; textPlainMimeW : WideString = textPlainMime; {$IF DEFINED(LCLQT5) or DEFINED(LCLQT6)} function QDropEvent_pos(handle: QDropEventH): PQtPoint; overload; const retval: TQtPoint = (x: 0; y: 0); begin Result:= @retval; QDropEvent_pos(handle, Result); end; {$ENDIF} function GetWidgetFromLCLControl(AWinControl: TWinControl): QWidgetH; inline; begin // Custom controls (TQtCustomControl) are created by LCL as // QAbstractScrollArea with a viewport (and two scrollbars). // We want the viewport to be the source/target of drag&drop, so we use // GetContainerWidget which returns the viewport widget for custom controls // and regular widget handle for others. Result := TQtWidget(AWinControl.Handle).GetContainerWidget; end; { ---------- TDragDropSourceQT ---------- } function TDragDropSourceQT.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled in QT. Result := True; end; function TDragDropSourceQT.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; procedure SetMimeDataInFormat(MimeData: QMimeDataH; MimeType: WideString; DataString: AnsiString); var ByteArray: QByteArrayH; begin ByteArray := QByteArray_create(PAnsiChar(DataString)); try QMimeData_setData(MimeData, @MimeType, ByteArray); finally QByteArray_destroy(ByteArray); end; end; var DragObject: QDragH = nil; MimeData: QMimeDataH = nil; begin Result := False; // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; DragObject := QDrag_create(GetWidget); // deleted automatically by QT try MimeData := QMimeData_create; QDrag_setMimeData(DragObject, MimeData); // MimeData owned by DragObject after this SetMimeDataInFormat(MimeData, uriListMimeW, FormatUriList(FileNamesList)); SetMimeDataInFormat(MimeData, textPlainMimeW, FormatTextPlain(FileNamesList)); except QDrag_destroy(DragObject); raise; end; // Start drag&drop operation (default to Copy action). QDrag_exec(DragObject, QtCopyAction or QtLinkAction or QtMoveAction, qtCopyAction); // Simulate drag-end event. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; end; function TDragDropSourceQT.GetWidget: QWidgetH; begin Result := GetWidgetFromLCLControl(GetControl); end; { ---------- TDragDropTargetQT ---------- } constructor TDragDropTargetQT.Create(TargetControl: TWinControl); begin inherited; FEventHook := nil; end; function TDragDropTargetQT.RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin inherited; QWidget_setAcceptDrops(GetWidget, True); if Assigned(FEventHook) then QObject_hook_destroy(FEventHook); // Tap into target widget's events. FEventHook := QObject_hook_create(GetWidget); QObject_hook_hook_events(FEventHook, @EventFilter); Result := True; end; procedure TDragDropTargetQT.UnregisterEvents; begin QWidget_setAcceptDrops(GetWidget, False); if Assigned(FEventHook) then begin QObject_hook_destroy(FEventHook); FEventHook := nil; end; inherited; end; function TDragDropTargetQT.GetWidget: QWidgetH; begin Result := GetWidgetFromLCLControl(GetControl); end; function TDragDropTargetQT.HasSupportedFormat(DropEvent: QDropEventH): Boolean; var MimeData: QMimeDataH; begin MimeData := QDropEvent_mimeData(DropEvent); if Assigned(MimeData) then begin if QMimeData_hasFormat(mimedata, @urilistmimew) or QMimeData_hasFormat(mimedata, @textPlainMimeW) then Exit(True); end; Result := False; end; function TDragDropTargetQT.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result := False; // False means the event is not filtered out. case QEvent_type(Event) of QEventDragEnter: begin QEvent_accept(Event); OnDragEnter(QDragEnterEventH(Event)); end; QEventDragMove: begin QEvent_accept(Event); OnDragOver(QDragMoveEventH(Event)); end; QEventDrop: begin QEvent_accept(Event); OnDrop(QDropEventH(Event)); end; QEventDragLeave: begin QEvent_accept(Event); OnDragLeave(QDragLeaveEventH(Event)); end; // QEventDragResponse - used internally by QT end; end; function TDragDropTargetQT.OnDragEnter(DragEnterEvent: QDragEnterEventH): Boolean; var CursorPosition: TPoint; DropEffect: TDropEffect; DropEvent: QDropEventH; QtAction: QtDropAction; begin // QDragEnterEvent inherits from QDragMoveEvent, which inherits from QDropEvent. DropEvent := QDropEventH(DragEnterEvent); if not HasSupportedFormat(DropEvent) then begin QDropEvent_setDropAction(DropEvent, QtIgnoreAction); Result := False; end else if Assigned(GetDragEnterEvent) then begin DropEffect := QtActionToDropEffect(QDropEvent_proposedAction(DropEvent)); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(DropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); Result := GetDragEnterEvent()(DropEffect, CursorPosition); if Result then QtAction := DropEffectToQtAction(DropEffect) else QtAction := QtIgnoreAction; QDropEvent_setDropAction(DropEvent, QtAction); end else begin QDropEvent_acceptProposedAction(DropEvent); Result := True; end; end; function TDragDropTargetQT.OnDragOver(DragMoveEvent: QDragMoveEventH): Boolean; var CursorPosition: TPoint; DropEffect: TDropEffect; DropEvent: QDropEventH; QtAction: QtDropAction; begin // QDragMoveEvent inherits from QDropEvent. DropEvent := QDropEventH(DragMoveEvent); if not HasSupportedFormat(DropEvent) then begin QDropEvent_setDropAction(DropEvent, QtIgnoreAction); Result := False; end else if Assigned(GetDragOverEvent) then begin DropEffect := QtActionToDropEffect(QDropEvent_proposedAction(DropEvent)); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(DropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); Result := GetDragOverEvent()(DropEffect, CursorPosition); if Result then QtAction := DropEffectToQtAction(DropEffect) else QtAction := QtIgnoreAction; QDropEvent_setDropAction(DropEvent, QtAction); end else begin QDropEvent_acceptProposedAction(DropEvent); Result := True; end; end; function TDragDropTargetQT.OnDrop(DropEvent: QDropEventH): Boolean; function GetMimeDataInFormat(MimeData: QMimeDataH; MimeType: WideString): AnsiString; var ByteArray: QByteArrayH; Size: Integer; Data: PAnsiChar; begin if QMimeData_hasFormat(MimeData, @MimeType) then begin ByteArray := QByteArray_create(); try QMimeData_data(MimeData, ByteArray, @MimeType); Size := QByteArray_size(ByteArray); Data := QByteArray_data(ByteArray); if (Size > 0) and Assigned(Data) then SetString(Result, Data, Size); finally QByteArray_destroy(ByteArray); end; end else Result := ''; end; var DropAction: QtDropAction; DropEffect: TDropEffect; CursorPosition: TPoint; uriList: String; FileNamesList: TStringList = nil; MimeData: QMimeDataH; begin Result := False; // QDropEvent_possibleActions() returns all actions allowed by the source. // QDropEvent_proposedAction() is the action proposed by the source. DropAction := QDropEvent_dropAction(DropEvent); // action to be performed by the target DropEffect := QtActionToDropEffect(DropAction); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(dropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); QDropEvent_setDropAction(DropEvent, QtIgnoreAction); // default to ignoring the drop MimeData := QDropEvent_mimeData(DropEvent); if Assigned(GetDropEvent) and Assigned(MimeData) then begin if QMimeData_hasFormat(MimeData, @uriListMimeW) then uriList := Trim(GetMimeDataInFormat(MimeData, uriListMimeW)) else if QMimeData_hasFormat(MimeData, @textPlainMimeW) then // try decoding, as text/plain may also be percent-encoded uriList := Trim(GetMimeDataInFormat(MimeData, textPlainMimeW)) else Exit; // reject the drop try FileNamesList := ExtractFilenames(uriList, True); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then Result := GetDropEvent()(FileNamesList, DropEffect, CursorPosition); finally if Assigned(FileNamesList) then FreeAndNil(FileNamesList); end; QDropEvent_setDropAction(DropEvent, DropAction); // accept the drop end; end; function TDragDropTargetQT.OnDragLeave(DragLeaveEvent: QDragLeaveEventH): Boolean; begin if Assigned(GetDragLeaveEvent) then Result := GetDragLeaveEvent()() else Result := True; end; { ---------------------------------------------------------------------------- } function QtActionToDropEffect(Action: QtDropAction): TDropEffect; begin case Action of QtCopyAction: Result := DropCopyEffect; QtMoveAction: Result := DropMoveEffect; QtTargetMoveAction: Result := DropMoveEffect; QtLinkAction: Result := DropLinkEffect; else Result := DropNoEffect; end; end; function DropEffectToQtAction(DropEffect: TDropEffect): QtDropAction; begin case DropEffect of DropCopyEffect: Result := QtCopyAction; DropMoveEffect: Result := QtMoveAction; DropLinkEffect: Result := QtLinkAction; else Result := QtIgnoreAction; end; end; function QtDropEventPointToLCLPoint(const PDropEventPoint: PQtPoint): TPoint; begin if Assigned(PDropEventPoint) then begin if (PDropEventPoint^.x <> 0) or (PDropEventPoint^.y <> 0) then begin Result.X := PDropEventPoint^.x; Result.Y := PDropEventPoint^.y; Exit; end; end; GetCursorPos(Result); end; end. doublecmd-1.1.30/src/platform/udragdropgtk.pas0000644000175000001440000003631415104114162020411 0ustar alexxusers{ Drag&Drop operations for GTK. } unit uDragDropGtk; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, uDragDropEx {$IF DEFINED(LCLGTK)} ,GLib, Gtk, Gdk {$ELSEIF DEFINED(LCLGTK2)} ,GLib2, Gtk2, Gdk2 {$ENDIF} ; type TDragDropSourceGTK = class(TDragDropSource) constructor Create(TargetControl: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; procedure UnregisterEvents; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; private procedure ConnectSignal(name: pgChar; func: Pointer); procedure DisconnectSignal(func: Pointer); end; TDragDropTargetGTK = class(TDragDropTarget) public constructor Create(TargetControl: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private procedure ConnectSignal(name: pgChar; func: Pointer); procedure DisconnectSignal(func: Pointer); end; { Source events } function OnDragBegin(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; function OnDragDataGet(widget: PGtkWidget; context: PGdkDragContext; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; function OnDragDataDelete(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; function OnDragEnd(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; { Target events } function OnDragMotion(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; function OnDrop(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; function OnDataReceived(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; function OnDragLeave(widget: PGtkWidget; context: PGdkDragContext; time: guint; param: gPointer): GBoolean; cdecl; function GtkActionToDropEffect(Action: TGdkDragAction):TDropEffect; function DropEffectToGtkAction(DropEffect: TDropEffect):TGdkDragAction; implementation uses uClipboard; // URI handling type // Order of these should be the same as in Targets array. TTargetId = (tidTextUriList, tidTextPlain); var Targets: array [0..1] of TGtkTargetEntry // 'info' field is a unique target id // Uri-list should be first so it can be catched before other targets, if available. = ((target: uriListMime ; flags: 0; info:LongWord(tidTextUriList)), (target: textPlainMime; flags: 0; info:LongWord(tidTextPlain))); // True, if the user is already dragging inside the target control. // Used to simulate drag-enter event in drag-motion handler. DragEntered: Boolean = False; { ---------- TDragDropSourceGTK ---------- } constructor TDragDropSourceGTK.Create(TargetControl: TWinControl); begin inherited Create(TargetControl); end; destructor TDragDropSourceGTK.Destroy; begin inherited; end; procedure TDragDropSourceGTK.ConnectSignal(name: pgChar; func: Pointer); begin gtk_signal_connect(PGtkObject(GetControl.Handle), name, TGtkSignalFunc(func), gPointer(Self)); // Pointer to class instance end; procedure TDragDropSourceGTK.DisconnectSignal(func: Pointer); begin gtk_signal_disconnect_by_func(PGtkObject(GetControl.Handle), TGtkSignalFunc(func), gPointer(Self)); end; function TDragDropSourceGTK.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; GetControl.HandleNeeded; if GetControl.HandleAllocated = True then begin // We don't set up as a drag source here, as we handle it manually. ConnectSignal('drag_begin', @OnDragBegin); ConnectSignal('drag_data_get', @OnDragDataGet); ConnectSignal('drag_data_delete', @OnDragDataDelete); ConnectSignal('drag_end', @OnDragEnd); //'drag-failed'(widget, context, result:guint); Result := True; end; end; procedure TDragDropSourceGTK.UnregisterEvents; begin DisconnectSignal(@OnDragBegin); DisconnectSignal(@OnDragDataGet); DisconnectSignal(@OnDragDataDelete); DisconnectSignal(@OnDragEnd); inherited; end; function TDragDropSourceGTK.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var PList: PGtkTargetList; context: PGdkDragContext; ButtonNr: Integer; begin Result := False; FFileNamesList.Assign(FileNamesList); case MouseButton of mbLeft : ButtonNr := 1; mbMiddle: ButtonNr := 2; mbRight : ButtonNr := 3; else Exit; end; PList := gtk_target_list_new(@Targets[0], Length(Targets)); // Will be freed by GTK if Assigned(PList) then begin context := gtk_drag_begin( PGtkWidget(GetControl.Handle), PList, // Allowed effects GDK_ACTION_COPY or GDK_ACTION_MOVE or GDK_ACTION_LINK or GDK_ACTION_ASK, ButtonNr, nil // no event - we're starting manually ); if Assigned(context) then Result:=True; end; end; { ---------- TDragDropTargetGTK ---------- } constructor TDragDropTargetGTK.Create(TargetControl: TWinControl); begin inherited Create(TargetControl); end; destructor TDragDropTargetGTK.Destroy; begin inherited; end; procedure TDragDropTargetGTK.ConnectSignal(name: pgChar; func: Pointer); begin gtk_signal_connect(PGtkObject(GetControl.Handle), name, TGtkSignalFunc(func), gPointer(Self)); // Pointer to class instance end; procedure TDragDropTargetGTK.DisconnectSignal(func: Pointer); begin gtk_signal_disconnect_by_func(PGtkObject(GetControl.Handle), TGtkSignalFunc(func), gPointer(Self)); end; function TDragDropTargetGTK.RegisterEvents( DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin inherited; GetControl.HandleNeeded; if GetControl.HandleAllocated = True then begin // Set up as drag target. gtk_drag_dest_set( PGtkWidget(GetControl.Handle), // default handling of some signals GTK_DEST_DEFAULT_ALL, // What targets the drag source promises to supply. @Targets[0], Length(Targets), // Effects that target supports GDK_ACTION_COPY or GDK_ACTION_MOVE or GDK_ACTION_LINK or GDK_ACTION_ASK ); ConnectSignal('drag_motion', @OnDragMotion); ConnectSignal('drag_drop', @OnDrop); ConnectSignal('drag_data_received', @OnDataReceived); ConnectSignal('drag_leave', @OnDragLeave); Result := True; end; end; procedure TDragDropTargetGTK.UnregisterEvents; begin DisconnectSignal(@OnDragMotion); DisconnectSignal(@OnDrop); DisconnectSignal(@OnDataReceived); DisconnectSignal(@OnDragLeave); if GetControl.HandleAllocated = True then gtk_drag_dest_unset(PGtkWidget(GetControl.Handle)); inherited; end; { ---------- Source events ---------- } function OnDragBegin(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); if Assigned(DragDropSource.GetDragBeginEvent) then Result := DragDropSource.GetDragBeginEvent()() else Result := True; end; function OnDragDataGet(widget: PGtkWidget; context: PGdkDragContext; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; dataString: string; begin DragDropSource := TDragDropSourceGTK(param); if (info < Low(Targets)) or (info > High(Targets)) then begin // Should not happen, as we didn't promise other targets in gtk_drag_begin. Result := False; Exit; end; if Assigned(DragDropSource.GetRequestDataEvent) then begin // Event has a handler assigned, so ask the control for data string. dataString := DragDropSource.GetRequestDataEvent()( DragDropSource.GetFileNamesList, Targets[info].target, // context^.action - the action chosen by the destination GtkActionToDropEffect(context^.action)); end else case TTargetId(info) of tidTextUriList: dataString := FormatUriList(DragDropSource.GetFileNamesList); tidTextPlain: dataString := FormatTextPlain(DragDropSource.GetFileNamesList); end; // gtk_selection_data_set makes a copy of passed data and zero-terminates it. gtk_selection_data_set(selection, gdk_atom_intern(Targets[info].target, gtk_true), Sizeof(dataString[1]) * 8, // nr of bits per unit (char) pguchar(@dataString[1]), Length(dataString)); Result := True; end; function OnDragDataDelete(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); Result := True; end; function OnDragEnd(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); if Assigned(DragDropSource.GetDragEndEvent) then Result := DragDropSource.GetDragEndEvent()() else Result := True; end; { ---------- Target events ---------- } function OnDragMotion(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; var DropEffect: TDropEffect; Action: TGdkDragAction; CursorPosition: TPoint; DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); Result := True; // default to accepting drag movement // context^.suggested_action - the action suggested by the source // context^.actions - a bitmask of actions proposed by the source // when suggested_action is GDK_ACTION_ASK. DropEffect := GtkActionToDropEffect(context^.suggested_action); CursorPosition := DragDropTarget.GetControl.ClientToScreen(Point(X, Y)); if DragEntered = False then begin // This is the first time a cursor is moving inside the window // (possibly after a previous drag-leave event). DragEntered := True; if Assigned(DragDropTarget.GetDragEnterEvent) then Result := DragDropTarget.GetDragEnterEvent()(DropEffect, CursorPosition); end else begin if Assigned(DragDropTarget.GetDragOverEvent) then Result := DragDropTarget.GetDragOverEvent()(DropEffect, CursorPosition); end; if Result = True then Action := DropEffectToGtkAction(DropEffect) else Action := 0; // don't accept dragging // Reply with appropriate 'action'. gdk_drag_status(context, Action, time); end; function OnDataReceived(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; DropEffect: TDropEffect; FileNamesList: TStringList = nil; CursorPosition: TPoint; uriList: string; begin DragDropTarget := TDragDropTargetGTK(param); DropEffect := GtkActionToDropEffect(context^.suggested_action); CursorPosition := DragDropTarget.GetControl.ClientToScreen(Point(X, Y)); Result := False; if Assigned(DragDropTarget.GetDropEvent) and Assigned(selection) and Assigned(selection^.data) and (selection^.length > 0) // if selection length < 0 data is invalid then begin SetString(uriList, PChar(selection^.data), selection^.length); // 'info' denotes which target was matched by gtk_drag_get_data case TTargetId(info) of tidTextUriList: uriList := Trim(uriList); tidTextPlain: // try decoding, as text/plain may also be percent-encoded uriList := Trim(uriList); else Exit; // not what we hoped for end; try FileNamesList := ExtractFilenames(uriList, True); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then Result := DragDropTarget.GetDropEvent()(FileNamesList, DropEffect, CursorPosition); finally if Assigned(FileNamesList) then FreeAndNil(FileNamesList); end; end; // gtk_drag_finish is called automatically, because // GTK_DEST_DEFAULT_DROP flag was passed to gtk_drag_dest_set. end; function OnDrop(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); Result := True; end; function OnDragLeave(widget: PGtkWidget; context: PGdkDragContext; time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); DragEntered := False; if Assigned(DragDropTarget.GetDragLeaveEvent) then Result := DragDropTarget.GetDragLeaveEvent()() else Result:= True; end; { ---------------------------------------------------------------------------- } function GtkActionToDropEffect(Action: TGdkDragAction):TDropEffect; begin case Action of GDK_ACTION_COPY: Result := DropCopyEffect; GDK_ACTION_MOVE: Result := DropMoveEffect; GDK_ACTION_LINK: Result := DropLinkEffect; GDK_ACTION_ASK : Result := DropAskEffect; else Result := DropNoEffect; end; end; function DropEffectToGtkAction(DropEffect: TDropEffect):TGdkDragAction; begin case DropEffect of DropCopyEffect: Result := GDK_ACTION_COPY; DropMoveEffect: Result := GDK_ACTION_MOVE; DropLinkEffect: Result := GDK_ACTION_LINK; DropAskEffect : Result := GDK_ACTION_ASK; else Result := 0; end; end; end. doublecmd-1.1.30/src/platform/udragdropex.pas0000644000175000001440000003161515104114162020237 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Interface unit for Drag&Drop to external applications. Copyright (C) 2009-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } {en Be aware that raw HWND handles are used to register controls for drag&drop in the system. Some LCL's functions may destroy a control's handle and create a new one during the lifetime of that control, making drag&drop invalid. Override TWinControl.InitializeWnd and TWinControl.FinalizeWnd to handle registration/unregistration in each control. } unit uDragDropEx; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls; type TDropEffect = (DropNoEffect, DropCopyEffect, DropMoveEffect, DropLinkEffect, DropAskEffect); TDragDropStatus = (DragDropAborted, DragDropSuccessful, DragDropError); { Source events } { Dragging has started } TDragBeginEvent = function:Boolean of object; { Drag destination has requested data } TRequestDataEvent = function( // This is the same as given to DoDragDrop. const FileNamesList: TStringList; // MIME-type format in which target requested data, e.g. text/plain. MimeType: string; // Effect chosen by target (may not be final). DropEffect: TDropEffect):string of object; { Dragging has ended } TDragEndEvent = function:Boolean of object; { Target events } { Mouse entered into the control when dragging something } TDragEnterEvent = function( // Proposed drop effect by the source (can be changed by the target to inform the source). var DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse moved inside the control when dragging something } TDragOverEvent = function( // Proposed drop effect by the source (can be changed by the target to inform the source). var DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse button has been lifted causing a drop event } TDropEvent = function( // List of filenames given by the source. const FileNamesList: TStringList; // Drop effect chosen by the source. DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse has left the control when dragging something } TDragLeaveEvent = function:Boolean of object; { Base class for external source } TDragDropSource = class(TObject) public constructor Create(SourceControl: TWinControl); virtual; destructor Destroy; override; function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; virtual; procedure UnregisterEvents; virtual; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; // button that initiated dragging ScreenStartPoint: TPoint // mouse position in screen coords ): Boolean; virtual; function GetLastStatus: TDragDropStatus; function GetFileNamesList: TStringList; function GetDragBeginEvent : TDragBeginEvent; function GetRequestDataEvent: TRequestDataEvent; function GetDragEndEvent : TDragEndEvent; private FDragDropControl: TWinControl; FDragBeginEvent : TDragBeginEvent; FRequestDataEvent : TRequestDataEvent; FDragEndEvent : TDragEndEvent; protected FLastStatus: TDragDropStatus; FFileNamesList: TStringList; function GetControl: TWinControl; end; { Base class for external target } TDragDropTarget = class(TObject) public constructor Create(TargetControl: TWinControl); virtual; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; virtual; procedure UnregisterEvents; virtual; function GetDragEnterEvent: TDragEnterEvent; function GetDragOverEvent : TDragOverEvent; function GetDropEvent : TDropEvent; function GetDragLeaveEvent: TDragLeaveEvent; private FDragDropControl: TWinControl; FDragEnterEvent: TDragEnterEvent; FDragOverEvent : TDragOverEvent; FDropEvent : TDropEvent; FDragLeaveEvent: TDragLeaveEvent; protected function GetControl: TWinControl; end; { These functions return system-appropriate DragDrop... object. } function CreateDragDropSource(Control: TWinControl): TDragDropSource; function CreateDragDropTarget(Control: TWinControl): TDragDropTarget; { Returns True if external dragging is supported based on operating system and LCLWidgetType (compile-time) } function IsExternalDraggingSupported: Boolean; { Analyzes keyboard modifier keys (Shift, Ctrl, etc.) and mouse button nr and returns the appropriate drop effect. } function GetDropEffectByKeyAndMouse(ShiftState: TShiftState; MouseButton: TMouseButton; DefaultEffect: Boolean): TDropEffect; function GetDropEffectByKey(ShiftState: TShiftState; DefaultEffect: Boolean): TDropEffect; var { If set to True, then dragging is being transformed: internal to external or vice-versa. } TransformDragging : Boolean = False; { If set to True, then transforming from external back to internal dragging is enabled. } AllowTransformToInternal : Boolean = True; implementation {$IF DEFINED(MSWINDOWS)} uses uOleDragDrop; {$ELSEIF DEFINED(LCLCOCOA)} uses uDragDropCocoa; {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} uses uDragDropGtk; {$ELSEIF DEFINED(LCLQT) and DEFINED(DARWIN)} uses uDragDropQt, uDragDropCocoa; {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6)} uses uDragDropQt; {$ENDIF} const DropDefaultEffect: array[Boolean] of TDropEffect = (DropMoveEffect, DropCopyEffect); { ---------- TDragDropSource ---------- } constructor TDragDropSource.Create(SourceControl: TWinControl); begin FDragDropControl := SourceControl; FDragBeginEvent := nil; FRequestDataEvent := nil; FDragEndEvent := nil; FFileNamesList := TStringList.Create; FLastStatus := DragDropSuccessful; end; destructor TDragDropSource.Destroy; begin UnregisterEvents; FDragDropControl := nil; if Assigned(FFileNamesList) then FreeAndNil(FFileNamesList); end; function TDragDropSource.GetControl:TWinControl; begin Result := FDragDropControl; end; function TDragDropSource.GetFileNamesList: TStringList; begin Result := FFileNamesList; end; function TDragDropSource.GetLastStatus: TDragDropStatus; begin Result := FLastStatus; end; function TDragDropSource.GetDragBeginEvent: TDragBeginEvent; begin Result := FDragBeginEvent; end; function TDragDropSource.GetRequestDataEvent: TRequestDataEvent; begin Result := FRequestDataEvent; end; function TDragDropSource.GetDragEndEvent: TDragEndEvent; begin Result := FDragEndEvent; end; function TDragDropSource.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin FDragBeginEvent := DragBeginEvent; FRequestDataEvent := RequestDataEvent; FDragEndEvent := DragEndEvent; Result := False; end; procedure TDragDropSource.UnregisterEvents; begin FDragBeginEvent := nil; FRequestDataEvent := nil; FDragEndEvent := nil; end; function TDragDropSource.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; begin FLastStatus := DragDropError; Result := False; end; { ---------- TDragDropTarget ---------- } constructor TDragDropTarget.Create(TargetControl: TWinControl); begin FDragDropControl := TargetControl; FDragEnterEvent := nil; FDragOverEvent := nil; FDropEvent := nil; FDragLeaveEvent := nil; end; destructor TDragDropTarget.Destroy; begin UnregisterEvents; FDragDropControl := nil; end; function TDragDropTarget.GetControl:TWinControl; begin Result := FDragDropControl; end; function TDragDropTarget.GetDragEnterEvent: TDragEnterEvent; begin Result := FDragEnterEvent; end; function TDragDropTarget.GetDragOverEvent: TDragOverEvent; begin Result := FDragOverEvent; end; function TDragDropTarget.GetDropEvent: TDropEvent; begin Result := FDropEvent; end; function TDragDropTarget.GetDragLeaveEvent: TDragLeaveEvent; begin Result := FDragLeaveEvent; end; function TDragDropTarget.RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin FDragEnterEvent := DragEnterEvent; FDragOverEvent := DragOverEvent; FDropEvent := DropEvent; FDragLeaveEvent := DragLeaveEvent; Result := False; end; procedure TDragDropTarget.UnregisterEvents; begin FDragEnterEvent := nil; FDragOverEvent := nil; FDropEvent := nil; FDragLeaveEvent := nil; end; { --------------------------------------------------------------------------- } function IsExternalDraggingSupported: Boolean; begin {$IF DEFINED(MSWINDOWS)} Result := True; {$ELSEIF DEFINED(LCLCOCOA)} Result := True; {$ELSEIF DEFINED(LCLGTK) OR DEFINED(LCLGTK2)} Result := True; {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6)} Result := True; {$ELSE} Result := False; {$ENDIF} end; function CreateDragDropSource(Control: TWinControl): TDragDropSource; begin {$IF DEFINED(MSWINDOWS)} Result := TDragDropSourceWindows.Create(Control); {$ELSEIF DEFINED(LCLCOCOA)} Result := TDragDropSourceCocoa.Create(Control); {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} Result := TDragDropSourceGTK.Create(Control); {$ELSEIF DEFINED(LCLQT) and DEFINED(DARWIN)} Result := TDragDropSourceCocoa.Create(Control); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6)} Result := TDragDropSourceQT.Create(Control); {$ELSE} Result := TDragDropSource.Create(Control); // Dummy {$ENDIF} end; function CreateDragDropTarget(Control: TWinControl): TDragDropTarget; begin {$IF DEFINED(MSWINDOWS)} Result := TDragDropTargetWindows.Create(Control); {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} Result := TDragDropTargetGTK.Create(Control); {$ELSEIF DEFINED(LCLQT) or DEFINED(LCLQT5) OR DEFINED(LCLQT6)} Result := TDragDropTargetQT.Create(Control); {$ELSE} Result := TDragDropTarget.Create(Control); // Dummy {$ENDIF} end; function GetDropEffectByKey(ShiftState: TShiftState; DefaultEffect: Boolean): TDropEffect; const ssBoth = [ssLeft, ssRight]; begin if (ssBoth * ShiftState = ssBoth) then Exit(DropDefaultEffect[not DefaultEffect]); ShiftState := [ssModifier, ssShift, ssAlt] * ShiftState; if ShiftState = [] then Result := DropDefaultEffect[DefaultEffect] // default to Copy when no keys pressed else if ShiftState = [ssShift] then Result := DropDefaultEffect[not DefaultEffect] else if ShiftState = [ssModifier] then Result := DropDefaultEffect[not DefaultEffect] else if ShiftState = [ssAlt] then Result := DropAskEffect else if ShiftState = [ssModifier, ssShift] then Result := DropLinkEffect else Result := DropNoEffect; // some other key combination pressed end; function GetDropEffectByKeyAndMouse(ShiftState: TShiftState; MouseButton: TMouseButton; DefaultEffect: Boolean): TDropEffect; begin case MouseButton of mbLeft: begin if ShiftState = [ssRight] then Result := DropDefaultEffect[not DefaultEffect] else Result := GetDropEffectByKey(ShiftState, DefaultEffect); end; mbMiddle: Result := DropAskEffect; mbRight: Result := DropAskEffect; end; end; end. doublecmd-1.1.30/src/platform/udragdropcocoa.pas0000644000175000001440000000664115104114162020710 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Drag&Drop operations for Cocoa. Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDragDropCocoa; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface uses Classes, SysUtils, Controls, uDragDropEx; type TDragDropSourceCocoa = class(TDragDropSource) function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; end; implementation uses CocoaAll, uMyDarwin; { ---------- TDragDropSourceCocoa ---------- } function TDragDropSourceCocoa.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled in Cocoa. Result := True; end; function TDragDropSourceCocoa.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var I: Integer; Window: NSWindow; DragIcon: NSImage; DragPoint: NSPoint; FileList: NSMutableArray; PasteBoard: NSPasteboard; begin Result := False; // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; FileList:= NSMutableArray.arrayWithCapacity(FileNamesList.Count); for I:= 0 to FileNamesList.Count - 1 do begin FileList.addObject(StringToNSString(FileNamesList[I])); end; DragPoint.x:= ScreenStartPoint.X; DragPoint.y:= ScreenStartPoint.Y; Window:= NSApplication.sharedApplication.keyWindow; PasteBoard:= NSPasteboard.pasteboardWithName(NSDragPboard); PasteBoard.declareTypes_owner(NSArray.arrayWithObject(NSFileNamesPboardType), nil); PasteBoard.setPropertyList_forType(FileList, NSFileNamesPboardType); DragIcon:= NSWorkspace.sharedWorkspace.iconForFile(StringToNSString(FileNamesList[0])); Window.dragImage_at_offset_event_pasteboard_source_slideBack(DragIcon, DragPoint, NSZeroSize, nil, PasteBoard, Window, True); // Simulate drag-end event. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; end; end. doublecmd-1.1.30/src/platform/udefaultplugins.pas0000644000175000001440000003050615104114162021124 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Some useful functions to work with plugins Copyright (C) 2011-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDefaultPlugins; {$mode objfpc}{$H+} interface uses Classes, SysUtils; const WcxMask = '*.wcx'{$IFDEF CPU64} + ';*.wcx64'{$ENDIF}; WdxMask = '*.wdx'{$IFDEF CPU64} + ';*.wdx64'{$ENDIF}; WfxMask = '*.wfx'{$IFDEF CPU64} + ';*.wfx64'{$ENDIF}; WlxMask = '*.wlx'{$IFDEF CPU64} + ';*.wlx64'{$ENDIF}; type TBinaryType = (btUnknown, btPe32, btPe64, btElf32, btElf64, btMacho32, btMacho64); const PluginBinaryType = {$IF DEFINED(WIN32)} btPe32 {$ELSEIF DEFINED(WIN64)} btPe64 {$ELSEIF DEFINED(DARWIN) AND DEFINED(CPU32)} btMacho32 {$ELSEIF DEFINED(DARWIN) AND DEFINED(CPU64)} btMacho64 {$ELSEIF DEFINED(UNIX) AND DEFINED(CPU32)} btElf32 {$ELSEIF DEFINED(UNIX) AND DEFINED(CPU64)} btElf64 {$ELSE} btUnknown {$ENDIF} ; PluginBinaryTypeString: array[TBinaryType] of String = ( 'Unknown', 'Windows 32 bit', 'Windows 64 bit', 'Unix 32 bit', 'Unix 64 bit', 'Mac OS X 32 bit', 'Mac OS X 64 bit' ); procedure UpdatePlugins; function CheckPlugin(var FileName: String): Boolean; function GetPluginBinaryType(const FileName: String): TBinaryType; implementation uses //Lazarus, Free-Pascal, etc. Forms, Dialogs, //DC {$IF DEFINED(CPU64)} DCStrUtils, {$ENDIF} DCOSUtils, DCClassesUtf8, uGlobs, uLng, uDCUtils; procedure UpdatePlugins; var I: Integer; Folder: String; begin // Wcx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wcx' + PathDelim; I:= gWCXPlugins.IndexOfName('zip'); if I < 0 then gWCXPlugins.Add('zip', 735, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 735; I:= gWCXPlugins.IndexOfName('jar'); if I < 0 then gWCXPlugins.Add('jar', 990, Folder + 'zip' + PathDelim + 'zip.wcx'); {$IF DEFINED(MSWINDOWS)} I:= gWCXPlugins.IndexOfName('7z'); if I < 0 then gWCXPlugins.Add('7z', 607, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); {$ENDIF} I:= gWCXPlugins.IndexOfName('tar'); if I < 0 then gWCXPlugins.Add('tar', 223, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 223; I:= gWCXPlugins.IndexOfName('bz2'); if I < 0 then gWCXPlugins.Add('bz2', 91, Folder + 'zip' + PathDelim + 'zip.wcx') else begin gWCXPlugins.Flags[I]:= 91; // For bz2 used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'zip' + PathDelim + 'zip.wcx'; end; I:= gWCXPlugins.IndexOfName('tbz'); if I < 0 then gWCXPlugins.Add('tbz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; I:= gWCXPlugins.IndexOfName('gz'); if I < 0 then gWCXPlugins.Add('gz', 91, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 91; I:= gWCXPlugins.IndexOfName('tgz'); if I < 0 then gWCXPlugins.Add('tgz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; I:= gWCXPlugins.IndexOfName('lzma'); if I < 0 then gWCXPlugins.Add('lzma', 1, Folder + 'zip' + PathDelim + 'zip.wcx') else begin gWCXPlugins.Flags[I]:= 1; // For lzma used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'zip' + PathDelim + 'zip.wcx'; end; I:= gWCXPlugins.IndexOfName('tlz'); if I < 0 then gWCXPlugins.Add('tlz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; {$IF NOT DEFINED(DARWIN)} I:= gWCXPlugins.IndexOfName('xz'); if I < 0 then gWCXPlugins.Add('xz', 91, Folder + 'zip' + PathDelim + 'zip.wcx'); I:= gWCXPlugins.IndexOfName('zst'); if I < 0 then gWCXPlugins.Add('zst', 91, Folder + 'zip' + PathDelim + 'zip.wcx'); I:= gWCXPlugins.IndexOfName('txz'); if I < 0 then gWCXPlugins.Add('txz', 95, Folder + 'zip' + PathDelim + 'zip.wcx'); I:= gWCXPlugins.IndexOfName('zipx'); if I < 0 then gWCXPlugins.Add('zipx', 223, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 223; {$ENDIF} {$IF DEFINED(MSWINDOWS)} I:= gWCXPlugins.IndexOfName('cpio'); if I < 0 then gWCXPlugins.Add('cpio', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx') else begin gWCXPlugins.Flags[I]:= 4; // For cpio used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'; end; I:= gWCXPlugins.IndexOfName('deb'); if I < 0 then gWCXPlugins.Add('deb', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx') else begin gWCXPlugins.Flags[I]:= 4; // For deb used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'; end; I:= gWCXPlugins.IndexOfName('arj'); if I < 0 then gWCXPlugins.Add('arj', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('cab'); if I < 0 then gWCXPlugins.Add('cab', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('cramfs'); if I < 0 then gWCXPlugins.Add('cramfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('dmg'); if I < 0 then gWCXPlugins.Add('dmg', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('fat'); if I < 0 then gWCXPlugins.Add('fat', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('hfs'); if I < 0 then gWCXPlugins.Add('hfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('iso'); if I < 0 then gWCXPlugins.Add('iso', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('lha'); if I < 0 then gWCXPlugins.Add('lha', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('lzh'); if I < 0 then gWCXPlugins.Add('lzh', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('ntfs'); if I < 0 then gWCXPlugins.Add('ntfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('squashfs'); if I < 0 then gWCXPlugins.Add('squashfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('taz'); if I < 0 then gWCXPlugins.Add('taz', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('vhd'); if I < 0 then gWCXPlugins.Add('vhd', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('wim'); if I < 0 then gWCXPlugins.Add('wim', 85, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('xar'); if I < 0 then gWCXPlugins.Add('xar', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('z'); if I < 0 then gWCXPlugins.Add('z', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); {$ELSE} I:= gWCXPlugins.IndexOfName('cpio'); if I < 0 then gWCXPlugins.Add('cpio', 4, Folder + 'cpio' + PathDelim + 'cpio.wcx') else gWCXPlugins.Flags[I]:= 4; I:= gWCXPlugins.IndexOfName('deb'); if I < 0 then gWCXPlugins.Add('deb', 4, Folder + 'deb' + PathDelim + 'deb.wcx') else gWCXPlugins.Flags[I]:= 4; {$ENDIF} I:= gWCXPlugins.IndexOfName('rpm'); if I < 0 then gWCXPlugins.Add('rpm', 4, Folder + 'rpm' + PathDelim + 'rpm.wcx') else gWCXPlugins.Flags[I]:= 4; I:= gWCXPlugins.IndexOfName('rar'); if I < 0 then gWCXPlugins.Add('rar', 607, Folder + 'unrar' + PathDelim + 'unrar.wcx') else gWCXPlugins.Flags[I]:= 607; I:= gWCXPlugins.IndexOfName('b64'); if I < 0 then gWCXPlugins.Add('b64', 1, Folder + 'base64' + PathDelim + 'base64.wcx'); // Wdx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wdx' + PathDelim; if gWdxPlugins.IndexOfName('deb_wdx') < 0 then begin gWdxPlugins.Add('deb_wdx', Folder + 'deb_wdx' + PathDelim + 'deb_wdx.wdx', 'EXT="DEB"'); end; if gWdxPlugins.IndexOfName('rpm_wdx') < 0 then begin gWdxPlugins.Add('rpm_wdx', Folder + 'rpm_wdx' + PathDelim + 'rpm_wdx.wdx', 'EXT="RPM"'); end; if gWdxPlugins.IndexOfName('audioinfo') < 0 then begin gWdxPlugins.Add(Folder + 'audioinfo' + PathDelim + 'audioinfo.wdx'); end; // Wfx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wfx' + PathDelim; if gWFXPlugins.IndexOfName('FTP') < 0 then begin gWFXPlugins.Add('FTP', Folder + 'ftp' + PathDelim + 'ftp.wfx'); end; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} I:= gWFXPlugins.IndexOfName('Windows Network'); if I >= 0 then gWFXPlugins.Enabled[I]:= False; {$ENDIF} // Wlx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wlx' + PathDelim; {$IF DEFINED(LINUX)} I:= gWlxPlugins.IndexOfName('wlxMplayer'); if I >= 0 then begin gWlxPlugins.GetWlxModule(I).FileName:= Folder + 'wlxmplayer' + PathDelim + 'wlxmplayer.wlx'; end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} if gWlxPlugins.IndexOfName('richview') < 0 then begin gWlxPlugins.Add(Folder + 'richview' + PathDelim + 'richview.wlx'); end; if gWlxPlugins.IndexOfName('preview') < 0 then begin gWlxPlugins.Add(Folder + 'preview' + PathDelim + 'preview.wlx'); end; if gWlxPlugins.IndexOfName('wmp') < 0 then begin gWlxPlugins.Add(Folder + 'wmp' + PathDelim + 'wmp.wlx'); end; {$ENDIF} {$IF DEFINED(DARWIN)} if gWlxPlugins.IndexOfName('MacPreview') < 0 then begin gWlxPlugins.Add(Folder + 'MacPreview' + PathDelim + 'MacPreview.wlx'); end; {$ENDIF} end; function CheckPlugin(var FileName: String): Boolean; var PluginType: TBinaryType; begin {$IF DEFINED(CPU64)} if (StrEnds(FileName, '64') = False) and mbFileExists(FileName + '64') then begin FileName:= FileName + '64'; end; {$ENDIF} PluginType:= GetPluginBinaryType(FileName); case PluginType of PluginBinaryType: Exit(True); btUnknown: MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); else MessageDlg(Application.Title, Format(rsMsgInvalidPluginArchitecture, [ PluginBinaryTypeString[PluginType], LineEnding, PluginBinaryTypeString[PluginBinaryType] ]), mtError, [mbOK], 0, mbOK); end; Result:= False; end; function GetPluginBinaryType(const FileName: String): TBinaryType; var fsFileStream: TFileStreamEx; begin try fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try // Check Windows executable if fsFileStream.ReadWord = $5A4D then // 'MZ' begin fsFileStream.Seek(60, soBeginning); fsFileStream.Seek(fsFileStream.ReadDWord, soBeginning); if fsFileStream.ReadDWord = $4550 then // 'PE' begin fsFileStream.Seek(20, soCurrent); case fsFileStream.ReadWord of $10B: Exit(btPe32); // 32 bit $20B: Exit(btPe64); // 64 bit end; end; end; fsFileStream.Seek(0, soBeginning); // Check Unix executable if fsFileStream.ReadDWord = $464C457F then // 'ELF' begin case fsFileStream.ReadByte of 1: Exit(btElf32); // 32 bit 2: Exit(btElf64); // 64 bit end; end; fsFileStream.Seek(0, soBeginning); // Check Darwin executable case fsFileStream.ReadDWord of $feedface, $cefaedfe: Exit(btMacho32); // 32 bit $feedfacf, $cffaedfe: Exit(btMacho64); // 64 bit end; Result:= btUnknown; finally fsFileStream.Free; end; except Result:= btUnknown; end; end; end. doublecmd-1.1.30/src/platform/udcversion.pas0000644000175000001440000004045415104114162020075 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Version information about DC, building tools and running environment. Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uDCVersion; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion; {$I dcrevision.inc} // Double Commander revision number const dcBuildDate = {$I %DATE%}; lazVersion = lcl_version; // Lazarus version (major.minor.micro) fpcVersion = {$I %FPCVERSION%}; // FPC version (major.minor.micro) TargetCPU = {$I %FPCTARGETCPU%}; // Target CPU of FPC TargetOS = {$I %FPCTARGETOS%}; // Target Operating System of FPC var DCVersion, // Double Commander version TargetWS, // Target WidgetSet of Lazarus OSVersion, // Operating System where DC is run WSVersion, // WidgetSet library version where DC is run Copyright : String; procedure InitializeVersionInfo; function GetVersionInformation: String; implementation uses InterfaceBase, FileInfo, VersionConsts {$IF DEFINED(UNIX)} , BaseUnix, DCOSUtils, uDCUtils, DCClassesUtf8 {$IF DEFINED(DARWIN)} , MacOSAll {$ELSEIF NOT DEFINED(HAIKU)} , StrUtils {$ENDIF} {$ENDIF} {$IFDEF LCLQT} , qt4 {$ENDIF} {$IFDEF LCLQT5} , qt5 {$ENDIF} {$IFDEF LCLQT6} , qt6 {$ENDIF} {$IFDEF LCLGTK2} , gtk2 {$ENDIF} {$IFDEF LCLGTK3} , LazGtk3 {$ENDIF} {$IFDEF MSWINDOWS} , Windows, JwaNative, JwaNtStatus, JwaWinType, uMyWindows {$ENDIF} , LCLPlatformDef ; {$IF DEFINED(UNIX)} {en Reads file into strings. Returns @false if file not found or cannot be read. } function GetStringsFromFile(FileName: String; out sl: TStringListEx): Boolean; begin Result := False; sl := nil; if mbFileAccess(FileName, fmOpenRead) then begin sl := TStringListEx.Create; try sl.LoadFromFile(FileName); Result := True; except on EStreamError do sl.Free; end; end; end; {en Reads first line of file into a string. Returns @false if file not found or cannot be read. } function GetStringFromFile(FileName: String; out str: String): Boolean; var sl: TStringListEx; begin str := EmptyStr; Result := GetStringsFromFile(FileName, sl); if Result then try if sl.Count > 0 then str := sl.Strings[0]; finally sl.Free; end; end; function GetOsFromLsbRelease: String; var sl: TStringListEx; begin Result := EmptyStr; if GetStringsFromFile('/etc/lsb-release', sl) then try if sl.Count > 0 then begin Result := sl.Values['DISTRIB_DESCRIPTION']; if Result <> EmptyStr then Result := TrimQuotes(Result) else Result := sl.Values['DISTRIB_ID'] + ' ' + sl.Values['DISTRIB_RELEASE'] + ' ' + sl.Values['DISTRIB_CODENAME']; end; finally sl.Free; end; end; function GetOsFromOsRelease: String; var sl: TStringListEx; begin Result := EmptyStr; if GetStringsFromFile('/etc/os-release', sl) then try if sl.Count > 0 then begin Result := sl.Values['PRETTY_NAME']; if Result <> EmptyStr then Result := TrimQuotes(Result) else Result := sl.Values['NAME'] + ' ' + sl.Values['VERSION'] + ' ' + sl.Values['ID']; end; finally sl.Free; end; end; function GetOsFromProcVersion: String; var i: Integer; s: String; begin Result := EmptyStr; if GetStringFromFile('/proc/version', s) then begin // Get first three strings separated by space. i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i); Delete(s, 1, i); i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i); Delete(s, 1, i); i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i - 1); Delete(s, 1, i); end; end; function GetOsFromIssue: String; begin if not GetStringFromFile('/etc/issue', Result) then Result := EmptyStr; end; {$IF DEFINED(LINUX)} function GetDebianVersion: String; var s: String; begin if GetStringFromFile('/etc/debian_version', s) then begin Result := 'Debian'; if s <> EmptyStr then Result := Result + ' ' + s; end else Result := EmptyStr; end; function GetSuseVersion: String; begin if GetStringFromFile('/etc/SuSE-release', Result) or GetStringFromFile('/etc/suse-release', Result) then begin if Result = EmptyStr then Result := 'Suse'; end else Result := EmptyStr; end; function GetRedHatVersion: String; begin if GetStringFromFile('/etc/redhat-release', Result) then begin if Result = EmptyStr then Result := 'RedHat'; end else Result := EmptyStr; end; function GetMandrakeVersion: String; begin if GetStringFromFile('/etc/mandrake-release', Result) then begin if Result = EmptyStr then Result := 'Mandrake'; end else Result := EmptyStr; end; {$ENDIF} function GetVersionNumber: String; var Info: utsname; I: Integer = 1; begin FillChar(Info, SizeOf(Info), 0); fpUname(Info); Result := Info.release; while (I <= Length(Result)) and (Result[I] in ['0'..'9', '.']) do Inc(I); Result := Copy(Result, 1, I - 1); end; {$IFDEF DARWIN} function GetMacOSXVersion: String; var versionMajor, versionMinor, versionBugFix: SInt32; begin Result:= EmptyStr; if (Gestalt(gestaltSystemVersionMajor, versionMajor) <> noErr) then Exit; if (Gestalt(gestaltSystemVersionMinor, versionMinor) <> noErr) then Exit; if (Gestalt(gestaltSystemVersionBugFix, versionBugFix) <> noErr) then Exit; Result:= Format('macOS %d.%d.%d', [versionMajor, versionMinor, versionBugFix]); end; {$ENDIF} {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure TryGetNativeSystemInfo(var SystemInfo: TSystemInfo); type TGetNativeSystemInfo = procedure (var lpSystemInfo: TSystemInfo); stdcall; var hLib: HANDLE; GetNativeSystemInfoProc: TGetNativeSystemInfo; begin hLib := GetModuleHandleW(Kernel32); if hLib <> 0 then begin try GetNativeSystemInfoProc := TGetNativeSystemInfo(GetProcAddress(hLib, 'GetNativeSystemInfo')); if Assigned(GetNativeSystemInfoProc) then GetNativeSystemInfoProc(SystemInfo) else GetSystemInfo(SystemInfo); finally FreeLibrary(hLib); end; end else GetSystemInfo(SystemInfo); end; {$ENDIF} procedure InitializeVersionInfo; {$IF DEFINED(MSWINDOWS)} const PROCESSOR_ARCHITECTURE_AMD64 = 9; CURRENT_VERSION = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion'; var si: SYSTEM_INFO; osvi: TOsVersionInfoExW; ReleaseId: UnicodeString; {$ENDIF} begin with TVersionInfo.Create do begin Load(HINSTANCE); Copyright:= StringFileInfo.Items[0].Values['LegalCopyright']; DCVersion:= Format('%d.%d.%.d', [FixedInfo.FileVersion[0], FixedInfo.FileVersion[1], FixedInfo.FileVersion[2]]); if (FixedInfo.FileFlags and VS_FF_PRERELEASE <> 0) then begin if (FixedInfo.FileFlags and VS_FF_PRIVATEBUILD <> 0) then DCVersion+= ' alpha' else begin DCVersion+= ' gamma'; end; end; Free; end; TargetWS := LCLPlatformDirNames[WidgetSet.LCLPlatform]; {$IF DEFINED(MSWINDOWS)} OSVersion := 'Windows'; ZeroMemory(@osvi, SizeOf(TOsVersionInfoExW)); osvi.dwOSVersionInfoSize := SizeOf(TOsVersionInfoExW); if (RtlGetVersion(@osvi) = STATUS_SUCCESS) or GetVersionExW(@osvi) then begin ZeroMemory(@si, SizeOf(si)); TryGetNativeSystemInfo(si); case osvi.dwPlatformId of VER_PLATFORM_WIN32_WINDOWS: case osvi.dwMajorVersion of 4: case osvi.dwMinorVersion of 0: OSVersion := OSVersion + ' 95'; 10: OSVersion := OSVersion + ' 98'; 90: OSVersion := OSVersion + ' ME'; end; end; VER_PLATFORM_WIN32_NT: begin case osvi.dwMajorVersion of 3: OSVersion := OSVersion + ' NT 3.5'; 4: OSVersion := OSVersion + ' NT 4'; 5: case osvi.dwMinorVersion of 0: OSVersion := OSVersion + ' 2000'; 1: begin OSVersion := OSVersion + ' XP'; if osvi.wSuiteMask = $0000 then OSVersion := OSVersion + ' Home' else if osvi.wSuiteMask = $0200 then OSVersion := OSVersion + ' Professional'; end; 2: if (osvi.wProductType = VER_NT_WORKSTATION) and (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) then begin OSVersion := OSVersion + ' XP Professional x64' end else if (osvi.wProductType = VER_NT_SERVER) then begin if osvi.wSuiteMask = $8000 then OSVersion := OSVersion + ' Home Server' else OSVersion := OSVersion + ' Server 2003'; end; end; 6: case osvi.dwMinorVersion of 0: if (osvi.wProductType = VER_NT_WORKSTATION) then begin OSVersion := OSVersion + ' Vista'; if osvi.wSuiteMask = $0000 then OSVersion := OSVersion + ' Ultimate' else if osvi.wSuiteMask = $0200 then OSVersion := OSVersion + ' Home'; end else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2008'; 1: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 7' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2008 R2'; 2: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 8' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2012'; 3: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 8.1' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2012 R2'; end; 10: case osvi.dwMinorVersion of 0: if (osvi.wProductType = VER_NT_WORKSTATION) then begin if (osvi.dwBuildNumber >= 22000) then OSVersion := OSVersion + ' 11' else begin OSVersion := OSVersion + ' 10'; end; if (osvi.wSuiteMask and VER_SUITE_PERSONAL <> 0) then OSVersion := OSVersion + ' Home'; if ((osvi.dwBuildNumber >= 19042) and RegReadKey(HKEY_LOCAL_MACHINE, CURRENT_VERSION, 'DisplayVersion', ReleaseId)) or RegReadKey(HKEY_LOCAL_MACHINE, CURRENT_VERSION, 'ReleaseId', ReleaseId) then begin OSVersion := OSVersion + ' ' + String(ReleaseId); end; end else if (osvi.wProductType = VER_NT_SERVER) then begin OSVersion += ' Server '; case osvi.dwBuildNumber of 14393: OSVersion += '2016'; 17763: OSVersion += '2019'; 18363: OSVersion += '1909'; 19041: OSVersion += '2004'; 19042: OSVersion += '20H2'; 20348: OSVersion += '2022'; else OSVersion += '10.0.' + IntToStr(osvi.dwBuildNumber); end; end; end; end; end; end; // If something detected then add service pack number and architecture. if OSVersion <> 'Windows' then begin if osvi.wServicePackMajor > 0 then begin OSVersion := OSVersion + ' SP' + IntToStr(osvi.wServicePackMajor); if osvi.wServicePackMinor > 0 then OSVersion := OSVersion + '.' + IntToStr(osvi.wServicePackMinor); end; if si.wProcessorArchitecture in [PROCESSOR_ARCHITECTURE_AMD64] then OSVersion := OSVersion + ' x86_64' else OSVersion := OSVersion + ' i386'; end else OSVersion := OSVersion + ' Build ' + IntToStr(osvi.dwBuildNumber); end; {$ELSEIF DEFINED(UNIX)} // Try using linux standard base. OSVersion := GetOsFromLsbRelease; {$IF DEFINED(LINUX)} // Try some distribution-specific files. if OSVersion = EmptyStr then OSVersion := GetDebianVersion; if OSVersion = EmptyStr then OSVersion := GetRedHatVersion; if OSVersion = EmptyStr then OSVersion := GetSuseVersion; if OSVersion = EmptyStr then OSVersion := GetMandrakeVersion; {$ENDIF} {$IFDEF DARWIN} if OSVersion = EmptyStr then OSVersion := GetMacOSXVersion; {$ENDIF} // Try using linux systemd base. if OSVersion = EmptyStr then OSVersion := GetOsFromOsRelease; // Other methods. if OSVersion = EmptyStr then OSVersion := GetOsFromProcVersion; if OSVersion = EmptyStr then OSVersion := GetOsFromIssue; // Set default names. if OSVersion = EmptyStr then begin {$IF DEFINED(LINUX)} OSVersion := 'Linux'; {$ELSEIF DEFINED(DARWIN)} OSVersion := 'Darwin'; // MacOS {$ELSEIF DEFINED(FREEBSD)} OSVersion := 'FreeBSD'; {$ELSEIF DEFINED(BSD)} OSVersion := 'BSD'; {$ELSEIF DEFINED(HAIKU)} OSVersion := 'Haiku'; {$ELSE} OSVersion := 'Unix'; {$ENDIF} OSVersion += ' ' + GetVersionNumber; end; {$ENDIF} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} WSVersion := 'Qt ' + QtVersion; {$ELSEIF DEFINED(LCLGTK2)} WSVersion := 'GTK ' + IntToStr(gtk_major_version) + '.' + IntToStr(gtk_minor_version) + '.' + IntToStr(gtk_micro_version); {$ELSEIF DEFINED(LCLGTK3)} WSVersion := 'GTK ' + IntToStr(gtk_get_major_version) + '.' + IntToStr(gtk_get_minor_version) + '.' + IntToStr(gtk_get_micro_version); {$ENDIF} end; function GetVersionInformation: String; {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} var S: String; {$ENDIF} begin Result:= Format('Double Commander' + LineEnding + 'Version: %s' + LineEnding + 'Revision: %s' + LineEnding + 'Commit: %s' + LineEnding + 'Build: %s' + LineEnding + 'Lazarus: %s' + LineEnding + 'Free Pascal: %s' + LineEnding + 'Platform: %s' + LineEnding + 'System: %s', [dcVersion, dcRevision, dcCommit, dcBuildDate, lazVersion, fpcVersion, TargetCPU + '-' + TargetOS + '-' + TargetWS, OSVersion ]); {$IF DEFINED(UNIX) AND NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} S:= GetEnvironmentVariable('XDG_CURRENT_DESKTOP'); if (Length(S) > 0) then begin Result += LineEnding + 'Desktop Environment: ' + Copy2Symb(S, ':'); S:= GetEnvironmentVariable('XDG_SESSION_TYPE'); if (Length(S) > 0) then begin Result += ' (' + S + ')'; end; end; {$ENDIF} if WSVersion <> EmptyStr then Result += LineEnding + 'Widgetset library: ' + WSVersion; end; procedure Initialize; begin LCLPlatformDirNames[lpQT]:= 'qt4'; LCLPlatformDirNames[lpWin32]:= 'win32/win64'; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/udcreadsvg.pas0000644000175000001440000001544715104114162020047 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Scalable Vector Graphics reader implementation (via Image32 library) Copyright (C) 2022-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDCReadSVG; {$mode delphi} interface uses Classes, SysUtils, Graphics, FPImage, ZStream, Img32.SVG.Reader, uVectorImage; type { TSvgReaderEx } TSvgReaderEx = class(TSvgReader) public function LoadFromStream(Stream: TStream): Boolean; function LoadFromFile(const FileName: String): Boolean; end; { TDCReaderSVG } TDCReaderSVG = class(TVectorReader) private FSvgReader: TSvgReaderEx; protected function InternalCheck(Stream: TStream): Boolean; override; procedure InternalRead(Stream: TStream; Img: TFPCustomImage); override; public constructor Create; override; destructor Destroy; override; public class function CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; override; end; implementation uses IntfGraphics, GraphType, Types, LazUTF8, DCClassesUtf8, Img32, Img32.Text, Img32.Vector, Img32.Fmt.SVG, uThumbnails, uGraphics; const HEAD_CRC = $02; { bit 1 set: header CRC present } EXTRA_FIELD = $04; { bit 2 set: extra field present } ORIG_NAME = $08; { bit 3 set: original file name present } COMMENT = $10; { bit 4 set: file comment present } type TGzHeader = packed record ID1 : Byte; ID2 : Byte; Method : Byte; Flags : Byte; ModTime : UInt32; XtraFlags : Byte; OS : Byte; end; function CheckGzipHeader(ASource: TStream): Boolean; var ALength: Integer; AHeader: TGzHeader; begin ASource.ReadBuffer(AHeader, SizeOf(TGzHeader)); Result:= (AHeader.ID1 = $1F) and (AHeader.ID2 = $8B) and (AHeader.Method = 8); if Result then begin // Skip the extra field if (AHeader.Flags and EXTRA_FIELD <> 0) then begin ALength:= ASource.ReadWord; while ALength > 0 do begin ASource.ReadByte; Dec(ALength); end; end; // Skip the original file name if (AHeader.Flags and ORIG_NAME <> 0) then begin while (ASource.ReadByte > 0) do; end; // Skip the .gz file comment if (AHeader.Flags and COMMENT <> 0) then begin while (ASource.ReadByte > 0) do; end; // Skip the header crc if (AHeader.Flags and HEAD_CRC <> 0) then begin ASource.ReadWord; end; end; end; function BitmapLoadFromScalable(const FileName: String; AWidth, AHeight: Integer): TBitmap; var Image32: TImage32; Image: TLazIntfImage; SvgReader: TSvgReaderEx; Description: TRawImageDescription; begin Result:= nil; SvgReader:= TSvgReaderEx.Create; try if SvgReader.LoadFromFile(FileName) then begin Image32:= TImage32.Create(AWidth, AHeight); try SvgReader.DrawImage(Image32, True); AWidth:= Image32.Width; AHeight:= Image32.Height; Image:= TLazIntfImage.Create(AWidth, AHeight); try Description.Init_BPP32_B8G8R8A8_BIO_TTB(AWidth, AHeight); Image.DataDescription:= Description; Move(Image32.PixelBase^, Image.PixelData^, AWidth * AHeight * SizeOf(TColor32)); Result:= TBitmap.Create; BitmapAssign(Result, Image); finally Image.Free; end; finally Image32.Free; end; end; finally SvgReader.Free; end; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; begin Result:= nil; if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(aFileName)) then begin Result:= BitmapLoadFromScalable(aFileName, aSize.cx, aSize.cy); end; end; { TSvgReaderEx } function TSvgReaderEx.LoadFromStream(Stream: TStream): Boolean; var MemoryStream: TMemoryStream; GzipStream: TDecompressionStream; begin if not CheckGzipHeader(Stream) then Result:= inherited LoadFromStream(Stream) else begin MemoryStream:= TMemoryStream.Create; try GzipStream:= TDecompressionStream.Create(Stream, True); try MemoryStream.CopyFrom(GzipStream, 0); Result:= inherited LoadFromStream(MemoryStream); finally GzipStream.Free; end; finally MemoryStream.Free; end; end; end; function TSvgReaderEx.LoadFromFile(const FileName: String): Boolean; var AStream: TFileStreamEx; begin try AStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try Result:= LoadFromStream(AStream); finally AStream.Free; end; except Result:= False; end; end; { TDCReaderSVG } function TDCReaderSVG.InternalCheck(Stream: TStream): Boolean; begin Result:= FSvgReader.LoadFromStream(Stream) end; procedure TDCReaderSVG.InternalRead(Stream: TStream; Img: TFPCustomImage); var Image32: TImage32; Description: TRawImageDescription; begin Image32:= TImage32.Create(0, 0); try FSvgReader.DrawImage(Image32, False); Description.Init_BPP32_B8G8R8A8_BIO_TTB(Image32.Width, Image32.Height); TLazIntfImage(Img).DataDescription:= Description; Move(Image32.PixelBase^, TLazIntfImage(Img).PixelData^, Img.Width * Img.Height * SizeOf(TColor32)); finally Image32.Free; end; end; constructor TDCReaderSVG.Create; begin inherited Create; FSvgReader:= TSvgReaderEx.Create; end; destructor TDCReaderSVG.Destroy; begin inherited Destroy; FSvgReader.Free; end; class function TDCReaderSVG.CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; begin Result:= BitmapLoadFromScalable(FileName, AWidth, AHeight); end; procedure Initialize; begin if (TScalableVectorGraphics.GetReaderClass = nil) then begin {$IF DEFINED(MSWINDOWS)} FontManager.LoadFontReaderFamily('Arial'); FontManager.LoadFontReaderFamily('Times New Roman'); {$ENDIF} // Register image handler and format TThumbnailManager.RegisterProvider(@GetThumbnail); TScalableVectorGraphics.RegisterReaderClass(TDCReaderSVG); ImageHandlers.RegisterImageReader('Scalable Vector Graphics', 'SVG;SVGZ', TDCReaderSVG); end; end; initialization Initialize; end. doublecmd-1.1.30/src/platform/udcreadrsvg.pas0000644000175000001440000002361115104114162020221 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Scalable Vector Graphics reader implementation (via rsvg and cairo) Copyright (C) 2012-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uDCReadRSVG; {$mode delphi} interface uses Classes, SysUtils, Graphics, FPImage, uVectorImage; type { TDCReaderRSVG } TDCReaderRSVG = class (TVectorReader) private FRsvgHandle: Pointer; protected function InternalCheck (Stream: TStream): Boolean; override; procedure InternalRead({%H}Stream: TStream; Img: TFPCustomImage); override; public class function CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; override; end; implementation uses DynLibs, IntfGraphics, GraphType, Types, CTypes, LazUTF8, DCOSUtils, uThumbnails, uIconTheme, uGraphics; type cairo_format_t = ( CAIRO_FORMAT_ARGB32, CAIRO_FORMAT_RGB24, CAIRO_FORMAT_A8, CAIRO_FORMAT_A1 ); type Pcairo_surface_t = Pointer; Pcairo_t = Pointer; PRsvgHandle = Pointer; PPGError = Pointer; type PRsvgDimensionData = ^TRsvgDimensionData; TRsvgDimensionData = record width: cint; height: cint; em: cdouble; ex: cdouble; end; var cairo_image_surface_create: function(format: cairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; cairo_surface_destroy: procedure(surface: Pcairo_surface_t); cdecl; cairo_image_surface_get_data: function(surface: Pcairo_surface_t): PByte; cdecl; cairo_create: function(target: Pcairo_surface_t): Pcairo_t; cdecl; cairo_destroy: procedure (cr: Pcairo_t); cdecl; cairo_scale: procedure(cr: Pcairo_t; sx, sy: cdouble); cdecl; rsvg_handle_new_from_file: function(const file_name: PAnsiChar; error: PPGError): PRsvgHandle; cdecl; rsvg_handle_new_from_data: function(data: PByte; data_len: SizeUInt; error: PPGError): PRsvgHandle; cdecl; rsvg_handle_get_dimensions: procedure(handle: PRsvgHandle; dimension_data: PRsvgDimensionData); cdecl; rsvg_handle_render_cairo: function(handle: PRsvgHandle; cr: Pcairo_t): LongBool; cdecl; g_type_init: procedure; cdecl; g_object_unref: procedure(anObject: Pointer); cdecl; type PBGRA = ^TBGRA; TBGRA = packed record Blue, Green, Red, Alpha: Byte; end; procedure RsvgHandleRender(RsvgHandle: Pointer; CairoSurface: Pcairo_surface_t; Cairo: Pcairo_t; Img: TFPCustomImage); var ImageData: PBGRA; Desc: TRawImageDescription; begin try // Draws a SVG to a Cairo surface if rsvg_handle_render_cairo(RsvgHandle, Cairo) then begin // Get a pointer to the data of the image surface, for direct access ImageData:= PBGRA(cairo_image_surface_get_data(CairoSurface)); // Initialize image description Desc.Init_BPP32_B8G8R8A8_BIO_TTB(Img.Width, Img.Height); TLazIntfImage(Img).DataDescription:= Desc; // Copy image data Move(ImageData^, TLazIntfImage(Img).PixelData^, Img.Width * Img.Height * SizeOf(TBGRA)); end; finally g_object_unref(RsvgHandle); cairo_destroy(Cairo); cairo_surface_destroy(CairoSurface); end; end; function BitmapLoadFromScalable(const FileName: String; AWidth, AHeight: Integer): TBitmap; var Cairo: Pcairo_t; RsvgHandle: Pointer; Image: TLazIntfImage; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin Result:= nil; RsvgHandle:= rsvg_handle_new_from_file(PAnsiChar(UTF8ToSys(FileName)), nil); if Assigned(RsvgHandle) then begin Image:= TLazIntfImage.Create(AWidth, AHeight); try // Get the SVG's size rsvg_handle_get_dimensions(RsvgHandle, @RsvgDimensionData); // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, Image.Width, Image.Height); Cairo:= cairo_create(CairoSurface); // Scale image if needed if (Image.Width <> RsvgDimensionData.width) or (Image.Height <> RsvgDimensionData.height) then begin cairo_scale(Cairo, Image.Width / RsvgDimensionData.width, Image.Height / RsvgDimensionData.height); end; RsvgHandleRender(RsvgHandle, CairoSurface, Cairo, Image); Result:= TBitmap.Create; BitmapAssign(Result, Image); finally Image.Free; end; end; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Scale: Boolean; Cairo: Pcairo_t; RsvgHandle: Pointer; Image: TLazIntfImage; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin Result:= nil; if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(aFileName)) then begin RsvgHandle:= rsvg_handle_new_from_file(PAnsiChar(UTF8ToSys(aFileName)), nil); if Assigned(RsvgHandle) then begin Result:= TBitmap.Create; // Get the SVG's size rsvg_handle_get_dimensions(RsvgHandle, @RsvgDimensionData); Scale:= (RsvgDimensionData.width > aSize.cx) or (RsvgDimensionData.height > aSize.cy); if Scale then begin // Calculate aspect width and height of thumb aSize:= TThumbnailManager.GetPreviewScaleSize(RsvgDimensionData.width, RsvgDimensionData.height); end else begin aSize.cx:= RsvgDimensionData.width; aSize.cy:= RsvgDimensionData.height; end; // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, aSize.cx, aSize.cy); Cairo:= cairo_create(CairoSurface); // Scale image if needed if Scale then begin cairo_scale(Cairo, aSize.cx / RsvgDimensionData.width, aSize.cy / RsvgDimensionData.height); end; Image:= TLazIntfImage.Create(aSize.cx, aSize.cy); try RsvgHandleRender(RsvgHandle, CairoSurface, Cairo, Image); BitmapAssign(Result, Image); finally Image.Free; end; end; end; end; { TDCReaderRSVG } function TDCReaderRSVG.InternalCheck(Stream: TStream): boolean; var MemoryStream: TMemoryStream; begin Result:= Stream is TMemoryStream; if Result then begin MemoryStream:= TMemoryStream(Stream); FRsvgHandle:= rsvg_handle_new_from_data(MemoryStream.Memory, MemoryStream.Size, nil); Result:= Assigned(FRsvgHandle); end; end; procedure TDCReaderRSVG.InternalRead(Stream: TStream; Img: TFPCustomImage); var Cairo: Pcairo_t; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin // Get the SVG's size rsvg_handle_get_dimensions(FRsvgHandle, @RsvgDimensionData); // Set output image size Img.SetSize(RsvgDimensionData.width, RsvgDimensionData.height); // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, RsvgDimensionData.width, RsvgDimensionData.height); Cairo:= cairo_create(CairoSurface); // Render vector graphics to raster image RsvgHandleRender(FRsvgHandle, CairoSurface, Cairo, Img); end; class function TDCReaderRSVG.CreateBitmap(const FileName: String; AWidth, AHeight: Integer): TBitmap; begin Result:= BitmapLoadFromScalable(FileName, AWidth, AHeight); end; const {$IF DEFINED(UNIX)} cairolib = 'libcairo.so.2'; rsvglib = 'librsvg-2.so.2'; gobjectlib = 'libgobject-2.0.so.0'; {$ELSEIF DEFINED(MSWINDOWS)} cairolib = 'libcairo-2.dll'; rsvglib = 'librsvg-2-2.dll'; gobjectlib = 'libgobject-2.0-0.dll'; {$ENDIF} var libcairo, librsvg, libgobject: TLibHandle; procedure Initialize; begin librsvg:= mbLoadLibraryEx(rsvglib); if (librsvg <> NilHandle) then begin libcairo:= mbLoadLibraryEx(cairolib); libgobject:= mbLoadLibraryEx(gobjectlib); end; if (libcairo <> NilHandle) and (librsvg <> NilHandle) and (libgobject <> NilHandle) then try @cairo_image_surface_create:= SafeGetProcAddress(libcairo, 'cairo_image_surface_create'); @cairo_surface_destroy:= SafeGetProcAddress(libcairo, 'cairo_surface_destroy'); @cairo_image_surface_get_data:= SafeGetProcAddress(libcairo, 'cairo_image_surface_get_data'); @cairo_create:= SafeGetProcAddress(libcairo, 'cairo_create'); @cairo_destroy:= SafeGetProcAddress(libcairo, 'cairo_destroy'); @cairo_scale:= SafeGetProcAddress(libcairo, 'cairo_scale'); @rsvg_handle_new_from_file:= SafeGetProcAddress(librsvg, 'rsvg_handle_new_from_file'); @rsvg_handle_new_from_data:= SafeGetProcAddress(librsvg, 'rsvg_handle_new_from_data'); @rsvg_handle_get_dimensions:= SafeGetProcAddress(librsvg, 'rsvg_handle_get_dimensions'); @rsvg_handle_render_cairo:= SafeGetProcAddress(librsvg, 'rsvg_handle_render_cairo'); @g_type_init:= SafeGetProcAddress(libgobject, 'g_type_init'); @g_object_unref:= SafeGetProcAddress(libgobject, 'g_object_unref'); g_type_init(); // Register image handler and format TThumbnailManager.RegisterProvider(@GetThumbnail); TScalableVectorGraphics.RegisterReaderClass(TDCReaderRSVG); ImageHandlers.RegisterImageReader('Scalable Vector Graphics', 'SVG;SVGZ', TDCReaderRSVG); except // Ignore end; end; procedure Finalize; begin if (libcairo <> NilHandle) then FreeLibrary(libcairo); if (librsvg <> NilHandle) then FreeLibrary(librsvg); if (libgobject <> NilHandle) then FreeLibrary(libgobject); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/udcreadheif.pas0000644000175000001440000002520615104114162020155 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- High Efficiency Image reader implementation (via libheif) Copyright (C) 2021-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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, see . } unit uDCReadHEIF; {$mode delphi} {$packrecords c} {$packenum 4} interface uses Classes, SysUtils, Graphics, FPImage; type { TDCReaderHEIF } TDCReaderHEIF = class (TFPCustomImageReader) private FContext: Pointer; protected function InternalCheck (Stream: TStream): boolean;override; procedure InternalRead({%H-}Stream: TStream; Img: TFPCustomImage);override; public constructor Create; override; destructor Destroy; override; end; { THighEfficiencyImage } THighEfficiencyImage = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: string; override; end; implementation uses DynLibs, IntfGraphics, GraphType, Types, CTypes, LazUTF8, DCOSUtils, uDebug; const HEIF_EXT = 'heif;heic;avif'; type Theif_error_code = ( heif_error_Ok = 0, heif_error_Input_does_not_exist = 1, heif_error_Invalid_input = 2, heif_error_Unsupported_filetype = 3, heif_error_Unsupported_feature = 4, heif_error_Usage_error = 5, heif_error_Memory_allocation_error = 6, heif_error_Decoder_plugin_error = 7, heif_error_Encoder_plugin_error = 8, heif_error_Encoding_error = 9, heif_error_Color_profile_does_not_exist = 10 ); Theif_colorspace = ( heif_colorspace_YCbCr = 0, heif_colorspace_RGB = 1, heif_colorspace_monochrome = 2, heif_colorspace_undefined = 99 ); Theif_channel = ( heif_channel_Y = 0, heif_channel_Cb = 1, heif_channel_Cr = 2, heif_channel_R = 3, heif_channel_G = 4, heif_channel_B = 5, heif_channel_Alpha = 6, heif_channel_interleaved = 10 ); Theif_chroma = ( heif_chroma_monochrome = 0, heif_chroma_420 = 1, heif_chroma_422 = 2, heif_chroma_444 = 3, heif_chroma_interleaved_RGB = 10, heif_chroma_interleaved_RGBA = 11, heif_chroma_interleaved_RRGGBB_BE = 12, heif_chroma_interleaved_RRGGBBAA_BE = 13, heif_chroma_interleaved_RRGGBB_LE = 14, heif_chroma_interleaved_RRGGBBAA_LE = 15, heif_chroma_undefined = 99 ); Theif_context = record end; Pheif_context = ^Theif_context; Theif_error = record code: Theif_error_code; subcode: UInt32; message: PAnsiChar; end; Pheif_decoding_options = ^Theif_decoding_options; Theif_decoding_options = record version: cuint8; ignore_transformations: cuint8; start_progress: pointer; on_progress: pointer; end_progress: pointer; progress_user_data: pointer; // version 2 options convert_hdr_to_8bit: cuint8; end; var heif_context_alloc: function(): Pheif_context; cdecl; heif_context_free: procedure(context: Pheif_context); cdecl; heif_decoding_options_alloc: function(): Pheif_decoding_options; cdecl; heif_decoding_options_free: procedure(options: Pheif_decoding_options); cdecl; heif_context_read_from_memory_without_copy: function(context: Pheif_context; mem: Pointer; size: csize_t; options: Pointer): Theif_error; cdecl; heif_context_get_primary_image_handle: function(ctx: Pheif_context; image_handle: PPointer): Theif_error; cdecl; heif_image_handle_release: procedure(heif_image_handle: Pointer); cdecl; heif_image_handle_has_alpha_channel: function(image_handle: Pointer): cint; cdecl; heif_decode_image: function(in_handle: Pointer; out_img: PPointer; colorspace: Theif_colorspace; chroma: Theif_chroma; options: Pointer): Theif_error; cdecl; heif_image_release: procedure(heif_image: Pointer); cdecl; heif_image_get_width: function(heif_image: Pointer; channel: Theif_channel): cint; cdecl; heif_image_get_height: function(heif_image: Pointer; channel: Theif_channel): cint; cdecl; heif_image_get_plane_readonly: function(heif_image: Pointer; channel: Theif_channel; out_stride: pcint): pcuint8; cdecl; { THighEfficiencyImage } class function THighEfficiencyImage.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderHEIF; end; class function THighEfficiencyImage.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function THighEfficiencyImage.GetFileExtensions: string; begin Result:= HEIF_EXT; end; { TDCReaderHEIF } function TDCReaderHEIF.InternalCheck(Stream: TStream): boolean; var Err: Theif_error; MemoryStream: TMemoryStream; begin Result:= Stream is TMemoryStream; if Result then begin MemoryStream:= TMemoryStream(Stream); Err:= heif_context_read_from_memory_without_copy(FContext, MemoryStream.Memory, MemoryStream.Size, nil); Result:= (Err.code = heif_error_Ok); end; end; procedure TDCReaderHEIF.InternalRead(Stream: TStream; Img: TFPCustomImage); var Y: cint; Alpha: cint; ASize: cint; AData: PByte; ADelta: cint; AStride: cint; ATarget: PByte; Err: Theif_error; Chroma: Theif_chroma; AWidth, AHeight: cint; AImage: Pointer = nil; AHandle: Pointer = nil; AOptions: Pheif_decoding_options; Description: TRawImageDescription; begin Err:= heif_context_get_primary_image_handle(FContext, @AHandle); if (Err.code <> heif_error_Ok) then raise Exception.Create(Err.message); try // Library works wrong with some images from // https://github.com/link-u/avif-sample-images // when decode image into RGB, but it works fine with RGBA Alpha:= 1; // heif_image_handle_has_alpha_channel(AHandle); if (Alpha <> 0) then Chroma:= heif_chroma_interleaved_RGBA else begin Chroma:= heif_chroma_interleaved_RGB; end; AOptions:= heif_decoding_options_alloc(); try if AOptions^.version > 1 then begin AOptions^.convert_hdr_to_8bit:= 1; end; Err:= heif_decode_image(AHandle, @AImage, heif_colorspace_RGB, Chroma, AOptions); finally heif_decoding_options_free(AOptions); end; if (Err.code <> heif_error_Ok) then raise Exception.Create(Err.message); try AWidth:= heif_image_get_width(AImage, heif_channel_interleaved); AHeight:= heif_image_get_height(AImage, heif_channel_interleaved); AData:= heif_image_get_plane_readonly(AImage, heif_channel_interleaved, @AStride); if (AData = nil) then raise Exception.Create(EmptyStr); if (Alpha <> 0) then begin ASize:= 4; Description.Init_BPP32_R8G8B8A8_BIO_TTB(AWidth, AHeight) end else begin ASize:= 3; Description.Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight); end; ADelta:= AStride - AWidth * ASize; TLazIntfImage(Img).DataDescription:= Description; if ADelta = 0 then // We can transfer the whole image at once Move(AData^, TLazIntfImage(Img).PixelData^, AStride * AHeight) else begin AStride:= AWidth * ASize; ATarget:= TLazIntfImage(Img).PixelData; // Stride has some padding, we have to send the image line by line for Y:= 0 to AHeight - 1 do begin Move(AData^, ATarget[Y * AStride], AStride); Inc(AData, AStride + ADelta) end; end; finally heif_image_release(AImage); end; finally heif_image_handle_release(AHandle); end; end; constructor TDCReaderHEIF.Create; begin inherited Create; FContext:= heif_context_alloc(); end; destructor TDCReaderHEIF.Destroy; begin inherited Destroy; if Assigned(FContext) then heif_context_free(FContext); end; const {$IF DEFINED(UNIX)} heiflib = 'libheif.so.1'; {$ELSEIF DEFINED(MSWINDOWS)} heiflib = 'libheif.dll'; {$ENDIF} var libheif: TLibHandle; procedure Initialize; var AVersion: cint; AOptions: Pheif_decoding_options; begin libheif:= mbLoadLibraryEx(heiflib); if (libheif <> NilHandle) then try @heif_context_alloc:= SafeGetProcAddress(libheif, 'heif_context_alloc'); @heif_context_free:= SafeGetProcAddress(libheif, 'heif_context_free'); @heif_decode_image:= SafeGetProcAddress(libheif, 'heif_decode_image'); @heif_image_release:= SafeGetProcAddress(libheif, 'heif_image_release'); @heif_image_get_width:= SafeGetProcAddress(libheif, 'heif_image_get_width'); @heif_image_get_height:= SafeGetProcAddress(libheif, 'heif_image_get_height'); @heif_image_handle_release:= SafeGetProcAddress(libheif, 'heif_image_handle_release'); @heif_decoding_options_free:= SafeGetProcAddress(libheif, 'heif_decoding_options_free'); @heif_decoding_options_alloc:= SafeGetProcAddress(libheif, 'heif_decoding_options_alloc'); @heif_image_get_plane_readonly:= SafeGetProcAddress(libheif, 'heif_image_get_plane_readonly'); @heif_image_handle_has_alpha_channel:= SafeGetProcAddress(libheif, 'heif_image_handle_has_alpha_channel'); @heif_context_get_primary_image_handle:= SafeGetProcAddress(libheif, 'heif_context_get_primary_image_handle'); @heif_context_read_from_memory_without_copy:= SafeGetProcAddress(libheif, 'heif_context_read_from_memory_without_copy'); AOptions:= heif_decoding_options_alloc(); AVersion:= AOptions^.version; heif_decoding_options_free(AOptions); if (AVersion < 2) then raise Exception.Create('HEIF: Old version'); // Register image handler and format ImageHandlers.RegisterImageReader ('High Efficiency Image', HEIF_EXT, TDCReaderHEIF); TPicture.RegisterFileFormat(HEIF_EXT, 'High Efficiency Image', THighEfficiencyImage); except on E: Exception do begin DCDebug(E.Message); FreeLibrary(libheif); libheif:= NilHandle; end; end; end; procedure Finalize; begin if (libheif <> NilHandle) then FreeLibrary(libheif); end; initialization Initialize; finalization Finalize; end. doublecmd-1.1.30/src/platform/uOleDragDrop.pas0000644000175000001440000014614115104114162020243 0ustar alexxusers{ DRAGDROP.PAS -- simple realization of OLE drag and drop. Author: Jim Mischel Last modification date: 30/05/97 Add some changes for compatibility with FPC/Lazarus Copyright (C) 2009 Alexander Koblov (Alexx2000@mail.ru) Some inspiration for drag-and-drop using CF_FILEGROUPDESCRIPTORW and CFU_FILECONTENTS: -http://msdn.microsoft.com/en-us/library/windows/desktop/bb776904%28v=vs.85%29.aspx#filecontents -http://www.unitoops.com/uoole/examples/outlooktest.htm } unit uOleDragDrop; {$mode delphi}{$H+} interface uses DCBasicTypes, Windows, ActiveX, Classes, Controls, ShlObj, uDragDropEx; type { IEnumFormatEtc } TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FIndex: Integer; public constructor Create(Index: Integer = 0); function Next(celt: LongWord; out elt: FormatEtc; pceltFetched: pULong): HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Clone(out enum: IEnumFormatEtc): HResult; stdcall; end; { TDragDropInfo } TDragDropInfo = class(TObject) private FFileList: TStringList; FPreferredWinDropEffect: DWORD; function CreateHDrop(bUnicode: Boolean): HGlobal; function CreateFileNames(bUnicode: Boolean): HGlobal; function CreateURIs(bUnicode: Boolean): HGlobal; function CreateShellIdListArray: HGlobal; function MakeHGlobal(ptr: Pointer; Size: LongWord): HGlobal; public constructor Create(PreferredWinDropEffect: DWORD); destructor Destroy; override; procedure Add(const s: string); function MakeDataInFormat(const formatEtc: TFormatEtc): HGlobal; function CreatePreferredDropEffect(WinDropEffect: DWORD): HGlobal; property Files: TStringList Read FFileList; end; TDragDropTargetWindows = class; // forward declaration { TFileDropTarget знает, как принимать сброшенные файлы } TFileDropTarget = class(TInterfacedObject, IDropTarget) private FHandle: HWND; FReleased: Boolean; FDragDropTarget: TDragDropTargetWindows; protected function GetFiles(const dataObj: IDataObject; ChosenFormat: TFormatETC; out FileNames: TStringList; out Medium: TSTGMedium): HRESULT; public constructor Create(DragDropTarget: TDragDropTargetWindows); {en Unregisters drag&drop target and releases the object (it is destroyed). This is the function that should be called to cleanup the object instead of Free. Do not use the object after calling it. } procedure FinalRelease; function DragEnter(const {%H-}dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; function DragOver(grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function Drop(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; {en Retrieves the filenames from the HDROP format as a list of UTF-8 strings. @returns(List of filenames or nil in case of an error.) } class function GetDropFilenames(hDropData: HDROP): TStringList; {en Retrieves the filenames from the CFU_FILEGROUPDESCRIPTORW/CFU_FILEGROUPDESCRIPTOR format as a list of UTF-8 strings. @returns(List of filenames or nil in case of an error.) } function GetDropFileGroupFilenames(const dataObj: IDataObject; var Medium: TSTGMedium; Format: TFormatETC): TStringList; function SaveCfuContentToFile(const dataObj:IDataObject; Index:Integer; WantedFilename:String; FileInfo: PFileDescriptorW):boolean; {en Retrieves the text from the CF_UNICODETEXT/CF_TEXT format, will store this in a single file return filename as a list of a single UTF-8 string. @returns(List of filenames or nil in case of an error.) } function GetDropTextCreatedFilenames(var Medium: TSTGMedium; Format: TFormatETC): TStringList; end; { TFileDropSource - источник для перетаскивания файлов } TFileDropSource = class(TInterfacedObject, IDropSource) public constructor Create; function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; stdcall; function GiveFeedback(dwEffect: DWORD): HResult; stdcall; end; { THDropDataObject - объект данных с информацией о перетаскиваемых файлах } THDropDataObject = class(TInterfacedObject, IDataObject) private FDropInfo: TDragDropInfo; public constructor Create(PreferredWinDropEffect: DWORD); destructor Destroy; override; procedure Add(const s: string); { из IDataObject } function GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; stdcall; function GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; stdcall; function QueryGetData(const formatetc: TFormatEtc): HResult; stdcall; function GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; stdcall; function SetData(const formatetc: TFormatEtc; {$IF FPC_FULLVERSION < 30200}const{$ELSE}var{$ENDIF} medium: TStgMedium; fRelease: BOOL): HResult; stdcall; function EnumFormatEtc(dwDirection: LongWord; out enumFormatEtc: IEnumFormatEtc): HResult; stdcall; function DAdvise(const formatetc: TFormatEtc; advf: LongWord; const advSink: IAdviseSink; out dwConnection: LongWord): HResult; stdcall; function DUnadvise(dwConnection: LongWord): HResult; stdcall; function EnumDAdvise(out enumAdvise: IEnumStatData): HResult; stdcall; end; TDragDropSourceWindows = class(TDragDropSource) public function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent;// not handled in Windows DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint ): Boolean; override; end; TDragDropTargetWindows = class(TDragDropTarget) public constructor Create(Control: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private FDragDropTarget: TFileDropTarget; end; function GetEffectByKeyState(grfKeyState: LongWord) : Integer; { These functions convert Windows-specific effect value to { TDropEffect values and vice-versa. } function WinEffectToDropEffect(dwEffect: LongWord): TDropEffect; function DropEffectToWinEffect(DropEffect: TDropEffect): LongWord; { Query DROPFILES structure for [BOOL fWide] parameter } function DragQueryWide( hGlobalDropInfo: HDROP ): boolean; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, SysUtils, ShellAPI, LCLIntf, ComObj, IntegerList, DCDateTimeUtils, Forms, DCConvertEncoding, //DC uOSUtils, fOptionsDragDrop, uShowMsg, UGlobs, DCStrUtils, DCOSUtils, uClipboard, uLng, uDebug, uShlObjAdditional, uOSForms; var // Supported formats by the source. DataFormats: TList = nil; // of TFormatEtc procedure InitDataFormats; procedure AddFormat(FormatId: Word); var FormatEtc: PFormatEtc; begin if FormatId > 0 then begin New(FormatEtc); if Assigned(FormatEtc) then begin DataFormats.Add(FormatEtc); with FormatEtc^ do begin CfFormat := FormatId; Ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := -1; tymed := TYMED_HGLOBAL; end; end; end; end; begin DataFormats := TList.Create; AddFormat(CF_HDROP); AddFormat(CFU_PREFERRED_DROPEFFECT); AddFormat(CFU_FILENAME); AddFormat(CFU_FILENAMEW); // URIs disabled for now. This implementation does not work correct. // See bug http://doublecmd.sourceforge.net/mantisbt/view.php?id=692 { AddFormat(CFU_UNIFORM_RESOURCE_LOCATOR); AddFormat(CFU_UNIFORM_RESOURCE_LOCATORW); } AddFormat(CFU_SHELL_IDLIST_ARRAY); end; procedure DestroyDataFormats; var i : Integer; begin if Assigned(DataFormats) then begin for i := 0 to DataFormats.Count - 1 do if Assigned(DataFormats.Items[i]) then Dispose(PFormatEtc(DataFormats.Items[i])); FreeAndNil(DataFormats); end; end; { TEnumFormatEtc.Create } constructor TEnumFormatEtc.Create(Index: Integer); begin inherited Create; FIndex := Index; end; { TEnumFormatEtc.Next извлекает заданное количество структур TFormatEtc в передаваемый массив elt. Извлекается celt элементов, начиная с текущей позиции в списке. } function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; pceltFetched: pULong): HResult; var i: Integer; eltout: PFormatEtc; begin // Support returning only 1 format at a time. if celt > 1 then celt := 1; eltout := @elt; i := 0; while (i < celt) and (FIndex < DataFormats.Count) do begin (eltout + i)^ := PFormatEtc(DataFormats.Items[FIndex])^; Inc(FIndex); Inc(i); end; if (pceltFetched <> nil) then pceltFetched^ := i; if (I = celt) then Result := S_OK else Result := S_FALSE; end; { TEnumFormatEtc.Skip пропускает celt элементов списка, устанавливая текущую позицию на (CurrentPointer + celt) или на конец списка в случае переполнения. } function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if (celt <= DataFormats.Count - FIndex) then begin FIndex := FIndex + celt; Result := S_OK; end else begin FIndex := DataFormats.Count; Result := S_FALSE; end; end; { TEnumFormatEtc.Reset устанавливает указатель текущей позиции на начало списка } function TEnumFormatEtc.Reset: HResult; begin FIndex := 0; Result := S_OK; end; { TEnumFormatEtc.Clone копирует список структур } function TEnumFormatEtc.Clone(out enum: IEnumFormatEtc): HResult; begin enum := TEnumFormatEtc.Create(FIndex); Result := S_OK; end; { TDragDropInfo.Create } constructor TDragDropInfo.Create(PreferredWinDropEffect: DWORD); begin inherited Create; FFileList := TStringList.Create; FPreferredWinDropEffect := PreferredWinDropEffect; end; { TDragDropInfo.Destroy } destructor TDragDropInfo.Destroy; begin FFileList.Free; inherited Destroy; end; { TDragDropInfo.Add } procedure TDragDropInfo.Add(const s: string); begin Files.Add(s); end; { TDragDropInfo.MakeDataInFormat } function TDragDropInfo.MakeDataInFormat(const formatEtc: TFormatEtc): HGlobal; begin Result := 0; if (formatEtc.tymed = DWORD(-1)) or // Transport medium not specified. (Boolean(formatEtc.tymed and TYMED_HGLOBAL)) // Support only HGLOBAL medium. then begin if formatEtc.CfFormat = CF_HDROP then begin Result := CreateHDrop(Win32Platform = VER_PLATFORM_WIN32_NT) end else if formatEtc.CfFormat = CFU_PREFERRED_DROPEFFECT then begin Result := CreatePreferredDropEffect(FPreferredWinDropEffect); end else if (formatEtc.CfFormat = CFU_FILENAME) then begin Result := CreateFileNames(False); end else if (formatEtc.CfFormat = CFU_FILENAMEW) then begin Result := CreateFileNames(True); end // URIs disabled for now. This implementation does not work correct. // See bug http://doublecmd.sourceforge.net/mantisbt/view.php?id=692 { else if (formatEtc.CfFormat = CFU_UNIFORM_RESOURCE_LOCATOR) then begin Result := CreateURIs(False); end else if (formatEtc.CfFormat = CFU_UNIFORM_RESOURCE_LOCATORW) then begin Result := CreateURIs(True); end } else if (formatEtc.CfFormat = CFU_SHELL_IDLIST_ARRAY) then begin Result := CreateShellIdListArray; end; end; end; { TDragDropInfo.CreateFileNames } function TDragDropInfo.CreateFileNames(bUnicode: Boolean): HGlobal; var FileList: AnsiString; wsFileList: WideString; begin if Files.Count = 0 then Exit; if bUnicode then begin wsFileList := CeUtf8ToUtf16(Self.Files[0]) + #0; Result := MakeHGlobal(PWideChar(wsFileList), Length(wsFileList) * SizeOf(WideChar)); end else begin FileList := CeUtf8ToAnsi(Self.Files[0]) + #0; Result := MakeHGlobal(PAnsiChar(FileList), Length(FileList) * SizeOf(AnsiChar)); end; end; { TDragDropInfo.CreateURIs } function TDragDropInfo.CreateURIs(bUnicode: Boolean): HGlobal; var UriList: AnsiString; wsUriList: WideString; I: Integer; begin wsUriList := ''; for I := 0 to Self.Files.Count - 1 do begin if I > 0 then wsUriList := wsUriList + LineEnding; wsUriList := wsUriList + fileScheme + '//' { don't put hostname } + CeUtf8ToUtf16(URIEncode(StringReplace(Files[I], '\', '/', [rfReplaceAll] ))); end; wsUriList := wsUriList + #0; if bUnicode then Result := MakeHGlobal(PWideChar(wsUriList), Length(wsUriList) * SizeOf(WideChar)) else begin // Wide to Ansi UriList := CeUtf8ToAnsi(UTF16ToUTF8(wsUriList)); Result := MakeHGlobal(PAnsiChar(UriList), Length(UriList) * SizeOf(AnsiChar)); end; end; { TDragDropInfo.CreateShellIdListArray } function TDragDropInfo.CreateShellIdListArray: HGlobal; var pidl: LPITEMIDLIST; pidlSize: Integer; pIdA: LPIDA = nil; // ShellIdListArray structure ShellDesktop: IShellFolder = nil; CurPosition: UINT; dwTotalSizeToAllocate: DWORD; I: Integer; function GetPidlFromPath(ShellFolder: IShellFolder; Path: WideString): LPITEMIDLIST; var chEaten: ULONG = 0; dwAttributes: ULONG = 0; begin if ShellFolder.ParseDisplayName(0, nil, PWideChar(Path), chEaten, Result, dwAttributes) <> S_OK then begin Result := nil; end; end; function GetPidlSize(Pidl: LPITEMIDLIST): Integer; var pidlTmp: LPITEMIDLIST; begin Result := 0; pidlTmp := pidl; while pidlTmp^.mkid.cb <> 0 do begin Result := Result + pidlTmp^.mkid.cb; pidlTmp := LPITEMIDLIST(LPBYTE(pidlTmp) + PtrInt(pidlTmp^.mkid.cb)); // Next Item. end; Inc(Result, SizeOf(BYTE) * 2); // PIDL ends with two zeros. end; begin Result := 0; // Get Desktop shell interface. if SHGetDesktopFolder(ShellDesktop) = S_OK then begin // Get Desktop PIDL, which will be the root PIDL for the files' PIDLs. if SHGetFolderLocation(0, CSIDL_DESKTOP, 0, 0, pidl) = S_OK then begin pidlSize := GetPidlSize(pidl); // How much memory to allocate for the whole structure. // We don't know how much memory each PIDL takes yet // (estimate using desktop pidl size). dwTotalSizeToAllocate := SizeOf(_IDA.cidl) + SizeOf(UINT) * (Files.Count + 1) // PIDLs' offsets + pidlSize * (Files.Count + 1); // PIDLs pIda := AllocMem(dwTotalSizeToAllocate); // Number of files PIDLs (without root). pIdA^.cidl := Files.Count; // Calculate offset for the first pidl (root). CurPosition := SizeOf(_IDA.cidl) + SizeOf(UINT) * (Files.Count + 1); // Write first PIDL. pIdA^.aoffset[0] := CurPosition; CopyMemory(LPBYTE(pIda) + PtrInt(CurPosition), pidl, pidlSize); Inc(CurPosition, pidlSize); CoTaskMemFree(pidl); for I := 0 to Self.Files.Count - 1 do begin // Get PIDL for each file (if Desktop is the root, then // absolute paths are acceptable). pidl := GetPidlFromPath(ShellDesktop, CeUtf8ToUtf16(Files[i])); if pidl <> nil then begin pidlSize := GetPidlSize(pidl); // If not enough memory then reallocate. if dwTotalSizeToAllocate < CurPosition + pidlSize then begin // Estimate using current PIDL's size. Inc(dwTotalSizeToAllocate, (Files.Count - i) * pidlSize); pIdA := ReAllocMem(pIda, dwTotalSizeToAllocate); if not Assigned(pIda) then Break; end; // Write PIDL. {$R-} pIdA^.aoffset[i + 1] := CurPosition; {$R+} CopyMemory(LPBYTE(pIdA) + PtrInt(CurPosition), pidl, pidlSize); Inc(CurPosition, pidlSize); CoTaskMemFree(pidl); end; end; if Assigned(pIda) then begin // Current position it at the end of the structure. Result := MakeHGlobal(pIdA, CurPosition); Freemem(pIda); end; end; // SHGetSpecialFolderLocation ShellDesktop := nil; end; // SHGetDesktopFolder end; { TDragDropInfo.CreatePreferredDropEffect } function TDragDropInfo.CreatePreferredDropEffect(WinDropEffect: DWORD) : HGlobal; begin Result := MakeHGlobal(@WinDropEffect, SizeOf(WinDropEffect)); end; { TDragDropInfo.MakeHGlobal } function TDragDropInfo.MakeHGlobal(ptr: Pointer; Size: LongWord): HGlobal; var DataPointer : Pointer; DataHandle : HGLOBAL; begin Result := 0; if Assigned(ptr) then begin DataHandle := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, Size); if (DataHandle <> 0) then begin DataPointer := GlobalLock(DataHandle); if Assigned(DataPointer) then begin CopyMemory(DataPointer, ptr, Size); GlobalUnlock(DataHandle); Result := DataHandle; end else begin GlobalFree(DataHandle); end; end; end; end; { TDragDropInfo.CreateHDrop } function TDragDropInfo.CreateHDrop(bUnicode: Boolean): HGlobal; var RequiredSize: Integer; I: Integer; hGlobalDropInfo: HGlobal; DropFiles: PDropFiles; FileList: AnsiString = ''; wsFileList: WideString = ''; begin { Построим структуру TDropFiles в памяти, выделенной через GlobalAlloc. Область памяти сделаем глобальной и совместной, поскольку она, вероятно, будет передаваться другому процессу. Bring the filenames in a form, separated by #0 and ending with a double #0#0 } if bUnicode then begin for I := 0 to Self.Files.Count - 1 do wsFileList := wsFileList + CeUtf8ToUtf16(Self.Files[I]) + #0; wsFileList := wsFileList + #0; { Определяем необходимый размер структуры } RequiredSize := SizeOf(TDropFiles) + Length(wsFileList) * SizeOf(WChar); end else begin for I := 0 to Self.Files.Count - 1 do FileList := FileList + CeUtf8ToAnsi(Self.Files[I]) + #0; FileList := FileList + #0; { Определяем необходимый размер структуры } RequiredSize := SizeOf(TDropFiles) + Length(FileList) * SizeOf(AnsiChar); end; hGlobalDropInfo := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, RequiredSize); if (hGlobalDropInfo <> 0) then begin { Заблокируем область памяти, чтобы к ней можно было обратиться } DropFiles := GlobalLock(hGlobalDropInfo); { Заполним поля структуры DropFiles pFiles -- смещение от начала структуры до первого байта массива с именами файлов. } DropFiles.pFiles := SizeOf(TDropFiles); DropFiles.fWide := bUnicode; { Копируем имена файлов в буфер. Буфер начинается со смещения DropFiles + DropFiles.pFiles, то есть после последнего поля структуры. The pointer should be aligned nicely, because the TDropFiles record is not packed. } DropFiles := Pointer(DropFiles) + DropFiles.pFiles; if bUnicode then CopyMemory(DropFiles, PWideChar(wsFileList), Length(wsFileList) * SizeOf(WChar)) else CopyMemory(DropFiles, PAnsiChar(FileList), Length(FileList) * SizeOf(AnsiChar)); { Снимаем блокировку } GlobalUnlock(hGlobalDropInfo); end; Result := hGlobalDropInfo; end; function TFileDropTarget.GetFiles(const dataObj: IDataObject; ChosenFormat: TFormatETC; out FileNames: TStringList; out Medium: TSTGMedium): HRESULT; begin ChosenFormat.ptd := nil; ChosenFormat.dwAspect := DVASPECT_CONTENT; ChosenFormat.lindex := -1; ChosenFormat.tymed := TYMED_HGLOBAL; Result:= dataObj.GetData(ChosenFormat, Medium); if Result = S_OK then begin if Medium.Tymed = TYMED_HGLOBAL then begin case ChosenFormat.CfFormat of CF_HDROP: FileNames := GetDropFilenames(Medium.hGlobal); CF_UNICODETEXT, CF_TEXT: FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); else begin if (ChosenFormat.CfFormat = CFU_FILEGROUPDESCRIPTORW) or (ChosenFormat.CfFormat = CFU_FILEGROUPDESCRIPTOR) then FileNames := GetDropFileGroupFilenames(dataObj, Medium, ChosenFormat) else if (ChosenFormat.CfFormat = CFU_HTML) or (ChosenFormat.CfFormat = CFU_RICHTEXT) then FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat) end; end; end; end; end; { TFileDropTarget.Create } constructor TFileDropTarget.Create(DragDropTarget: TDragDropTargetWindows); begin inherited Create; // Here RefCount is 1 - as set in TInterfacedObject.NewInstance, // but it's decremented back in TInterfacedObject.AfterConstruction // (when this constructor finishes). So we must manually again increase it. _AddRef; FReleased := False; FDragDropTarget := DragDropTarget; // Increases RefCount. ActiveX.CoLockObjectExternal(Self, True, False); // Increases RefCount. FHandle:= GetControlHandle(DragDropTarget.GetControl); if ActiveX.RegisterDragDrop(FHandle, Self) <> S_OK then FHandle := 0; end; { TFileDropTarget.FinalRelease } procedure TFileDropTarget.FinalRelease; begin if not FReleased then begin FReleased := True; // Decreases reference count. ActiveX.CoLockObjectExternal(Self, False, True); // Check if window was not already destroyed. if (FHandle <> 0) and (IsWindow(FHandle)) then begin // Decreases reference count. ActiveX.RevokeDragDrop(FHandle); FHandle := 0; end else _Release; // Cannot revoke - just release reference. _Release; // For _AddRef in Create. end; end; function TFileDropTarget.DragEnter(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var DropEffect: TDropEffect; begin // dwEffect parameter states which effects are allowed by the source. dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); if Assigned(FDragDropTarget.GetDragEnterEvent) then begin DropEffect := WinEffectToDropEffect(dwEffect); if FDragDropTarget.GetDragEnterEvent()(DropEffect, pt) = True then begin dwEffect := DropEffectToWinEffect(DropEffect); Result := S_OK end else Result := S_FALSE; end else Result := S_OK; end; { TFileDropTarget.DragOver } function TFileDropTarget.DragOver(grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var DropEffect: TDropEffect; begin // dwEffect parameter states which effects are allowed by the source. dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); if Assigned(FDragDropTarget.GetDragOverEvent) then begin DropEffect := WinEffectToDropEffect(dwEffect); if FDragDropTarget.GetDragOverEvent()(DropEffect, pt) = True then begin dwEffect := DropEffectToWinEffect(DropEffect); Result := S_OK end else Result := S_FALSE; end else Result := S_OK; end; { TFileDropTarget.DragLeave } function TFileDropTarget.DragLeave: HResult; stdcall; begin if Assigned(FDragDropTarget.GetDragLeaveEvent) then begin if FDragDropTarget.GetDragLeaveEvent() = True then Result := S_OK else Result := S_FALSE; end else Result := S_OK; end; { Обработка сброшенных данных. } { TFileDropTarget.Drop } function TFileDropTarget.Drop(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var Medium: TSTGMedium; CyclingThroughFormat, ChosenFormat: TFormatETC; i: Integer; DropInfo: TDragDropInfo; FileNames, DragTextModeOfferedList: TStringList; SelectedFormatName:String; DropEffect: TDropEffect; Enum: IEnumFormatEtc; DragAndDropSupportedFormatList: TWordList; UnusedInteger : integer; begin DragAndDropSupportedFormatList:= TWordList.Create; try FileNames:=nil; UnusedInteger:=0; dataObj._AddRef; { Получаем данные. Структура TFormatETC сообщает dataObj.GetData, как получить данные и в каком формате они должны храниться (эта информация содержится в структуре TSTGMedium). } //1. Let's build as quick list of the supported formats of what we've just been dropped. // We scan through all because sometimes the best one is not the first compatible one. OleCheck(DataObj.EnumFormatEtc(DATADIR_GET, Enum)); while Enum.Next(1, CyclingThroughFormat, nil) = S_OK do begin DragAndDropSupportedFormatList.Add(CyclingThroughFormat.CfFormat); end; //2. Let's determine our best guess. // The order for this will be: // 1nd) CFU_FILEGROUPDESCRIPTORW + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 2rd) CFU_FILEGROUPDESCRIPTOR + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 3st) CF_HDROP (for legacy purpose, since DC was using it first). // 4th) We'll see if user would like to create a new text file from possible selected text dropped on the panel // CF_UNICODETEXT (Notepad++ / Wordpad / Firefox) // CF_TEXT (Notepad / Wordpad / Firefox) // CFU_HTML (Firefox) // Rich Text (Wordpad / Microsoft Word) Result:= S_FALSE; ChosenFormat.CfFormat:= 0; if (DragAndDropSupportedFormatList.IndexOf(CFU_FILECONTENTS) > -1) then begin if (DragAndDropSupportedFormatList.IndexOf(CFU_FILEGROUPDESCRIPTORW) > -1) then begin ChosenFormat.CfFormat:= CFU_FILEGROUPDESCRIPTORW; Result:= GetFiles(dataObj, ChosenFormat, FileNames, Medium); end; if (Result <> S_OK) AND (DragAndDropSupportedFormatList.IndexOf(CFU_FILEGROUPDESCRIPTOR) > -1) then begin ChosenFormat.CfFormat:= CFU_FILEGROUPDESCRIPTOR; Result:= GetFiles(dataObj, ChosenFormat, FileNames, Medium); end; end; if (Result <> S_OK) AND (DragAndDropSupportedFormatList.IndexOf(CF_HDROP) > -1) then begin ChosenFormat.CfFormat:= CF_HDROP; Result:= GetFiles(dataObj, ChosenFormat, FileNames, Medium); end; // If we have no chosen format yet, let's attempt for text ones... if (Result <> S_OK) then begin ChosenFormat.CfFormat:= 0; DragTextModeOfferedList:= TStringList.Create; try if (DragAndDropSupportedFormatList.IndexOf(CFU_RICHTEXT) > -1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(CFU_HTML) > -1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(CF_UNICODETEXT) > -1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(CF_TEXT) > -1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name); SortThisListAccordingToDragAndDropDesiredFormat(DragTextModeOfferedList); if DragTextModeOfferedList.Count>0 then SelectedFormatName:=DragTextModeOfferedList.Strings[0] else SelectedFormatName:=''; if (DragTextModeOfferedList.Count>1) AND (gDragAndDropAskFormatEachTime) then if not ShowInputListBox(rsCaptionForTextFormatToImport,rsMsgForTextFormatToImport,DragTextModeOfferedList,SelectedFormatName,UnusedInteger) then SelectedFormatName:=''; if SelectedFormatName<>'' then begin if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name then ChosenFormat.CfFormat:=CFU_RICHTEXT; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name then ChosenFormat.CfFormat:=CFU_HTML; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name then ChosenFormat.CfFormat:=CF_UNICODETEXT; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name then ChosenFormat.CfFormat:=CF_TEXT; end; finally DragTextModeOfferedList.Free; end; if ChosenFormat.CfFormat <> 0 then begin Result:= GetFiles(dataObj, ChosenFormat, FileNames, Medium); end; end; //3. If we have some filenames in our list, continue to process the actual "Drop" of files if (Result = S_OK) then begin { Создаем объект TDragDropInfo } DropInfo := TDragDropInfo.Create(dwEffect); if Assigned(FileNames) then begin for i := 0 to FileNames.Count - 1 do DropInfo.Add(FileNames[i]); FreeAndNil(FileNames); end; { Если указан обработчик, вызываем его } if (Assigned(FDragDropTarget.GetDropEvent)) then begin // Set default effect by examining keyboard keys, taking into // consideration effects allowed by the source (dwEffect parameter). dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); DropEffect := WinEffectToDropEffect(dwEffect); FDragDropTarget.GetDropEvent()(DropInfo.Files, DropEffect, pt); dwEffect := DropEffectToWinEffect(DropEffect); end; DropInfo.Free; if (Medium.PUnkForRelease = nil) then // Drop target must release the medium allocated by GetData. // This does the same as DragFinish(Medium.hGlobal) in this case, // but can support other media. ReleaseStgMedium(@Medium) else // Drop source is responsible for releasing medium via this object. IUnknown(Medium.PUnkForRelease)._Release; end; dataObj._Release; finally DragAndDropSupportedFormatList.Free; end; end; { TFileDropTarget.GetDropFilenames } class function TFileDropTarget.GetDropFilenames(hDropData: HDROP): TStringList; var NumFiles: Integer; i: Integer; wszFilename: PWideChar; FileName: WideString; RequiredSize: Cardinal; begin Result := nil; if hDropData <> 0 then begin Result := TStringList.Create; try NumFiles := DragQueryFileW(hDropData, $FFFFFFFF, nil, 0); for i := 0 to NumFiles - 1 do begin RequiredSize := DragQueryFileW(hDropData, i, nil, 0) + 1; // + 1 = terminating zero wszFilename := GetMem(RequiredSize * SizeOf(WideChar)); if Assigned(wszFilename) then try if DragQueryFileW(hDropData, i, wszFilename, RequiredSize) > 0 then begin FileName := wszFilename; // Windows inserts '?' character where Wide->Ansi conversion // of a character was not possible, in which case filename is invalid. // This may happen if a non-Unicode application was the source. if Pos('?', FileName) = 0 then Result.Add(UTF16ToUTF8(FileName)) else raise Exception.Create(rsMsgInvalidFilename + ': ' + LineEnding + UTF16ToUTF8(FileName)); end; finally FreeMem(wszFilename); end; end; except FreeAndNil(Result); raise; end; end; end; { TFileDropTarget.SaveCfuContentToFile } function TFileDropTarget.SaveCfuContentToFile(const dataObj: IDataObject; Index: Integer; WantedFilename: String; FileInfo: PFileDescriptorW): boolean; const TEMPFILENAME='CfuContentFile.bin'; var Format : TFORMATETC; Medium : TSTGMedium; Ifile, iStg : IStorage; tIID : PGuid; hFile: THandle; pvStrm: IStream; statstg: TStatStg; dwSize: LongInt; AnyPointer: PAnsiChar; InnerFilename: String; StgDocFile: WideString; msStream: TMemoryStream; i64Size, i64Move: {$IF FPC_FULLVERSION < 030002}Int64{$ELSE}QWord{$ENDIF}; begin result:=FALSE; InnerFilename:= ExtractFilepath(WantedFilename) + TEMPFILENAME; Format.cfFormat := CFU_FILECONTENTS; Format.dwAspect := DVASPECT_CONTENT; Format.lindex := Index; Format.ptd := nil; Format.TYMED := TYMED_ISTREAM OR TYMED_ISTORAGE or TYMED_HGLOBAL; if dataObj.GetData(Format, Medium) = S_OK then begin if Medium.TYMED = TYMED_ISTORAGE then begin iStg := IStorage(Medium.pstg); StgDocFile := CeUtf8ToUtf16(InnerFilename); StgCreateDocfile(PWideChar(StgDocFile), STGM_CREATE Or STGM_READWRITE Or STGM_SHARE_EXCLUSIVE, 0, iFile); tIID:=nil; iStg.CopyTo(0, tIID, nil, iFile); iFile.Commit(0); iFile := nil; iStg := nil; end else if Medium.Tymed = TYMED_HGLOBAL then begin AnyPointer := GlobalLock(Medium.HGLOBAL); try hFile := mbFileCreate(InnerFilename); if hFile <> feInvalidHandle then begin FileWrite(hFile, AnyPointer^, GlobalSize(Medium.HGLOBAL)); FileClose(hFile); end; finally GlobalUnlock(Medium.HGLOBAL); end; if Medium.PUnkForRelease = nil then GlobalFree(Medium.HGLOBAL); end else begin pvStrm:= IStream(Medium.pstm); // Figure out how large the data is if (FileInfo^.dwFlags and FD_FILESIZE <> 0) then i64Size:= Int64(FileInfo.nFileSizeLow) or (Int64(FileInfo.nFileSizeHigh) shl 32) else if (pvStrm.Stat(statstg, STATFLAG_DEFAULT) = S_OK) then i64Size:= statstg.cbSize else if (pvStrm.Seek(0, STREAM_SEEK_END, i64Size) = S_OK) then // Seek back to start of stream pvStrm.Seek(0, STREAM_SEEK_SET, i64Move) else begin Exit; end; // Create memory stream to convert to msStream:= TMemoryStream.Create; // Allocate size msStream.Size:= i64Size; // Read from the IStream into the memory for the TMemoryStream if pvStrm.Read(msStream.Memory, i64Size, @dwSize) = S_OK then msStream.Size:= dwSize else msStream.Size:= 0; // Release interface pvStrm:=nil; msStream.Position:=0; msStream.SaveToFile(UTF8ToSys(InnerFilename)); msStream.Free; end; end; if mbFileExists(InnerFilename) then begin if mbRenameFile(InnerFilename, WantedFilename) then begin if (FileInfo^.dwFlags and FD_CREATETIME = 0) then TWinFileTime(FileInfo^.ftCreationTime):= 0; if (FileInfo^.dwFlags and FD_WRITESTIME = 0) then TWinFileTime(FileInfo^.ftLastWriteTime):= 0; if (FileInfo^.dwFlags and FD_ACCESSTIME = 0) then TWinFileTime(FileInfo^.ftLastAccessTime):= 0; Result:= mbFileSetTime(WantedFilename, TWinFileTime(FileInfo^.ftLastWriteTime), TWinFileTime(FileInfo^.ftCreationTime), TWinFileTime(FileInfo^.ftLastAccessTime)); end; end; end; { TFileDropTarget.GetDropFileGroupFilenames } function TFileDropTarget.GetDropFileGroupFilenames(const dataObj: IDataObject; var Medium: TSTGMedium; Format: TFormatETC): TStringList; var SuffixStr: String; AnyPointer: Pointer; DC_FileDescriptorW: PFILEDESCRIPTORW; ActualFilename, DroppedTextFilename: String; NumberOfFiles, CopyNumber, IndexFile: Integer; DC_FileDescriptorA: PFILEDESCRIPTORA absolute DC_FileDescriptorW; DC_FileGroupeDescriptorW: PFILEGROUPDESCRIPTORW absolute AnyPointer; begin Result := nil; AnyPointer := GlobalLock(Medium.HGLOBAL); try NumberOfFiles:= DC_FileGroupeDescriptorW.cItems; // Return the number of messages if NumberOfFiles > 0 then begin DC_FileDescriptorW:= AnyPointer + SizeOf(FILEGROUPDESCRIPTORW.cItems); Result:= TStringList.Create; for IndexFile:= 0 to Pred(NumberOfFiles) do begin if Format.CfFormat = CFU_FILEGROUPDESCRIPTORW then ActualFilename:= UTF16ToUTF8(UnicodeString(DC_FileDescriptorW^.cFileName)) else begin ActualFilename:= CeSysToUTF8(AnsiString(DC_FileDescriptorA^.cFileName)); end; DroppedTextFilename := GetTempFolderDeletableAtTheEnd + ActualFilename; if Result.IndexOf(DroppedTextFilename) <> -1 then begin CopyNumber := 2; repeat case gTypeOfDuplicatedRename of drLikeWindows7: SuffixStr:=' ('+IntToStr(CopyNumber)+')'; drLikeTC: SuffixStr:='('+IntToStr(CopyNumber)+')'; end; case gTypeOfDuplicatedRename of drLegacyWithCopy: DroppedTextFilename := GetTempFolderDeletableAtTheEnd+SysUtils.Format(rsCopyNameTemplate, [CopyNumber, ActualFilename]); drLikeWindows7, drLikeTC: DroppedTextFilename := GetTempFolderDeletableAtTheEnd+RemoveFileExt(ActualFilename) + SuffixStr + ExtractFileExt(ActualFilename); end; Inc(CopyNumber); until Result.IndexOf(DroppedTextFilename) = -1; end; if SaveCfuContentToFile(dataObj, IndexFile, DroppedTextFilename, DC_FileDescriptorW) then Result.Add(DroppedTextFilename); if Format.CfFormat = CFU_FILEGROUPDESCRIPTORW then Inc(DC_FileDescriptorW) else begin Inc(DC_FileDescriptorA); end; end; end; finally // Release the pointer GlobalUnlock(Medium.HGLOBAL); end; end; { TFileDropTarget.GetDropTextCreatedFilenames } function TFileDropTarget.GetDropTextCreatedFilenames(var Medium: TSTGMedium; Format: TFormatETC): TStringList; var hFile: THandle; AnyPointer: Pointer; MyUtf8String: String; FlagKeepGoing: Boolean; DroppedTextFilename: String; procedure SetDefaultFilename; begin DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedText+'.txt'; if Format.CfFormat=CFU_RICHTEXT then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextRichtextFilename+'.rtf'; if Format.CfFormat=CFU_HTML then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextHTMLFilename+'.html'; if (Format.CfFormat=CF_UNICODETEXT) AND not gDragAndDropSaveUnicodeTextInUFT8 then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextUnicodeUTF16Filename+'.txt'; if (Format.CfFormat=CF_UNICODETEXT) AND gDragAndDropSaveUnicodeTextInUFT8 then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextUnicodeUTF8Filename+'.txt'; if Format.CfFormat=CF_TEXT then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextSimpleFilename+'.txt'; end; begin Result:= nil; FlagKeepGoing:=TRUE; SetDefaultFilename; if not gDragAndDropTextAutoFilename then FlagKeepGoing:=ShowInputQuery(rsCaptionForAskingFilename, rsMsgPromptAskingFilename, DroppedTextFilename); if FlagKeepGoing then begin if DroppedTextFilename='' then SetDefaultFilename; //Just minimal idot-proof... DroppedTextFilename:=GetTempFolderDeletableAtTheEnd+DroppedTextFilename; AnyPointer := GlobalLock(Medium.hGlobal); try hFile:= mbFileCreate(DroppedTextFilename); try case Format.CfFormat of CF_TEXT: begin FileWrite(hFile, AnyPointer^, StrLen(PAnsiChar(AnyPointer))); end; CF_UNICODETEXT: begin if gDragAndDropSaveUnicodeTextInUFT8 then begin MyUtf8String:= CeUtf16toUtf8(PUnicodeChar(AnyPointer)); // Adding Byte Order Mark for UTF8 FileWrite(hFile, PAnsiChar(#$EF#$BB#$BF)[0], 3); FileWrite(hFile, Pointer(MyUtf8String)^, Length(MyUtf8String)); end else begin // Adding Byte Order Mark for UTF16LE FileWrite(hFile, PAnsiChar(#$FF#$FE)[0], 2); FileWrite(hFile, AnyPointer^, StrLen(PUnicodeChar(AnyPointer)) * SizeOf(WideChar)); end; end; else begin if (Format.CfFormat = CFU_HTML) or (Format.CfFormat = CFU_RICHTEXT) then begin FileWrite(hFile, AnyPointer^, StrLen(PAnsiChar(AnyPointer))); end; end; end; finally FileClose(hFile); end; result:=TStringList.Create; result.Add(DroppedTextFilename); finally GlobalUnlock(Medium.hGlobal); end; end; end; { TFileDropSource.Create } constructor TFileDropSource.Create; begin inherited Create; _AddRef; end; { TFileDropSource.QueryContinueDrag } function TFileDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; var Point:TPoint; begin if (fEscapePressed) then begin Result := DRAGDROP_S_CANCEL; // Set flag to notify that dragging was canceled by the user. uDragDropEx.TransformDragging := False; end else if ((grfKeyState and (MK_LBUTTON or MK_MBUTTON or MK_RBUTTON)) = 0) then begin Result := DRAGDROP_S_DROP; end else begin if uDragDropEx.AllowTransformToInternal then begin GetCursorPos(Point); // Call LCL function, not the Windows one. // LCL version will return 0 if mouse is over a window belonging to another process. if LCLIntf.WindowFromPoint(Point) <> 0 then begin // Mouse cursor has been moved back into the application window. // Cancel external dragging. Result := DRAGDROP_S_CANCEL; // Set flag to notify that dragging has not finished, // but rather it is to be transformed into internal dragging. uDragDropEx.TransformDragging := True; end else Result := S_OK; // Continue dragging end else Result := S_OK; // Continue dragging end; end; function TFileDropSource.GiveFeedback(dwEffect: DWORD): HResult; begin Result := DRAGDROP_S_USEDEFAULTCURSORS; end; { THDropDataObject.Create } constructor THDropDataObject.Create(PreferredWinDropEffect: DWORD); begin inherited Create; _AddRef; FDropInfo := TDragDropInfo.Create(PreferredWinDropEffect); end; { THDropDataObject.Destroy } destructor THDropDataObject.Destroy; begin if (FDropInfo <> nil) then FDropInfo.Free; inherited Destroy; end; { THDropDataObject.Add } procedure THDropDataObject.Add(const s: string); begin FDropInfo.Add(s); end; { THDropDataObject.GetData } function THDropDataObject.GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; begin Result := DV_E_FORMATETC; { Необходимо обнулить все поля medium на случай ошибки } medium.tymed := 0; medium.hGlobal := 0; medium.PUnkForRelease := nil; { Если формат поддерживается, создаем и возвращаем данные } if (QueryGetData(formatetcIn) = S_OK) then begin if (FDropInfo <> nil) then begin { Create data in specified format. } { The hGlobal will be released by the caller of GetData. } medium.hGlobal := FDropInfo.MakeDataInFormat(formatetcIn); if medium.hGlobal <> 0 then begin medium.tymed := TYMED_HGLOBAL; Result := S_OK; end; end; end; end; { THDropDataObject.GetDataHere } function THDropDataObject.GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; begin Result := DV_E_FORMATETC; { К сожалению, не поддерживается } end; { THDropDataObject.QueryGetData } function THDropDataObject.QueryGetData(const formatetc: TFormatEtc): HResult; var i:Integer; begin with formatetc do if dwAspect = DVASPECT_CONTENT then begin Result := DV_E_FORMATETC; // begin with 'format not supported' // See if the queried format is supported. for i := 0 to DataFormats.Count - 1 do begin if Assigned(DataFormats[i]) then begin if cfFormat = PFormatEtc(DataFormats[i])^.CfFormat then begin // Format found, see if transport medium is supported. if (tymed = DWORD(-1)) or (Boolean(tymed and PFormatEtc(DataFormats[i])^.tymed)) then begin Result := S_OK; end else Result := DV_E_TYMED; // transport medium not supported Exit; // exit if format found (regardless of transport medium) end end end end else Result := DV_E_DVASPECT; // aspect not supported end; { THDropDataObject.GetCanonicalFormatEtc } function THDropDataObject.GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; begin formatetcOut.ptd := nil; Result := E_NOTIMPL; end; { THDropDataObject.SetData } function THDropDataObject.SetData(const formatetc: TFormatEtc; {$IF FPC_FULLVERSION < 30200}const{$ELSE}var{$ENDIF} medium: TStgMedium; fRelease: BOOL): HResult; begin Result := E_NOTIMPL; end; { THDropDataObject.EnumFormatEtc возвращает список поддерживаемых форматов} function THDropDataObject.EnumFormatEtc(dwDirection: LongWord; out enumFormatEtc: IEnumFormatEtc): HResult; begin { Поддерживается только Get. Задать содержимое данных нельзя } if dwDirection = DATADIR_GET then begin enumFormatEtc := TEnumFormatEtc.Create; Result := S_OK; end else begin enumFormatEtc := nil; Result := E_NOTIMPL; end; end; { THDropDataObject.DAdviseDAdvise не поддерживаются} function THDropDataObject.DAdvise(const formatetc: TFormatEtc; advf: LongWord; const advSink: IAdviseSink; out dwConnection: LongWord): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; { THDropDataObject.DUnadvise } function THDropDataObject.DUnadvise(dwConnection: LongWord): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; { THDropDataObject.EnumDAdvise } function THDropDataObject.EnumDAdvise(out enumAdvise: IEnumStatData): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; function GetEffectByKeyState(grfKeyState: LongWord): Integer; begin Result := DROPEFFECT_COPY; { default effect } if (grfKeyState and MK_CONTROL) > 0 then begin if (grfKeyState and MK_SHIFT) > 0 then Result := DROPEFFECT_LINK else Result := DROPEFFECT_COPY; end else if (grfKeyState and MK_SHIFT) > 0 then Result := DROPEFFECT_MOVE; end; function WinEffectToDropEffect(dwEffect: LongWord): TDropEffect; begin case dwEffect of DROPEFFECT_COPY: Result := DropCopyEffect; DROPEFFECT_MOVE: Result := DropMoveEffect; DROPEFFECT_LINK: Result := DropLinkEffect; else Result := DropNoEffect; end; end; function DropEffectToWinEffect(DropEffect: TDropEffect): LongWord; begin case DropEffect of DropCopyEffect: Result := DROPEFFECT_COPY; DropMoveEffect: Result := DROPEFFECT_MOVE; DropLinkEffect: Result := DROPEFFECT_LINK; else Result := DROPEFFECT_NONE; end; end; function DragQueryWide( hGlobalDropInfo: HDROP ): boolean; var DropFiles: PDropFiles; begin DropFiles := GlobalLock( hGlobalDropInfo ); Result := DropFiles^.fWide; GlobalUnlock( hGlobalDropInfo ); end; { ---------------------------------------------------------} { TDragDropSourceWindows } function TDragDropSourceWindows.RegisterEvents( DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; // not Handled in Windows DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled, because the system has control of all data transfer. Result := True; // confirm that events are registered end; function TDragDropSourceWindows.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var DropSource: TFileDropSource; DropData: THDropDataObject; Rslt: HRESULT; dwEffect: LongWord; I: Integer; begin // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; // Create source-object DropSource:= TFileDropSource.Create; // and data object DropData:= THDropDataObject.Create(DROPEFFECT_COPY { default effect } ); for I:= 0 to FileNamesList.Count - 1 do DropData.Add (FileNamesList[i]); // Start OLE Drag&Drop Rslt:= ActiveX.DoDragDrop(DropData, DropSource, DROPEFFECT_MOVE or DROPEFFECT_COPY or DROPEFFECT_LINK, // Allowed effects @dwEffect); case Rslt of DRAGDROP_S_DROP: begin FLastStatus := DragDropSuccessful; Result := True; end; DRAGDROP_S_CANCEL: begin FLastStatus := DragDropAborted; Result := False; end; else begin MessageBox(0, PAnsiChar(SysErrorMessage(Rslt)), nil, MB_OK or MB_ICONERROR); FLastStatus := DragDropError; Result := False; end; end; // Simulate drag-end event. This must be called here, // after DoDragDrop returns from the system. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; // Release created objects. DropSource._Release; DropData._Release; end; { ---------------------------------------------------------} { TDragDropTargetWindows } constructor TDragDropTargetWindows.Create(Control: TWinControl); begin FDragDropTarget := nil; inherited Create(Control); end; destructor TDragDropTargetWindows.Destroy; begin inherited Destroy; if Assigned(FDragDropTarget) then begin FDragDropTarget.FinalRelease; FDragDropTarget := nil; end; end; function TDragDropTargetWindows.RegisterEvents( DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin // Unregister if registered before. UnregisterEvents; inherited; // Call inherited Register now. GetControl.HandleNeeded; // force creation of the handle if GetControl.HandleAllocated = True then begin FDragDropTarget := TFileDropTarget.Create(Self); Result := True; end; end; procedure TDragDropTargetWindows.UnregisterEvents; begin inherited; if Assigned(FDragDropTarget) then begin FDragDropTarget.FinalRelease; // Releasing will unregister events FDragDropTarget := nil; end; end; initialization OleInitialize(nil); InitDataFormats; finalization OleUninitialize; DestroyDataFormats; end. doublecmd-1.1.30/src/platform/uOSUtils.pas0000644000175000001440000006462415104114162017450 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uOSUtils; {$mode delphi} {$IFDEF DARWIN} {$modeswitch objectivec1} {$ENDIF} interface uses SysUtils, Classes, LCLType, uDrive, DCBasicTypes, uFindEx {$IF DEFINED(UNIX)} , DCFileAttributes {$IFDEF DARWIN} , MacOSAll {$ENDIF} {$ENDIF} ; const CnstUserCommand = '{command}'; {$IF DEFINED(MSWINDOWS)} faFolder = faDirectory; ReversePathDelim = '/'; RunTermCmd = 'cmd.exe'; // default terminal RunTermParams = ''; RunInTermStayOpenCmd = 'cmd.exe'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '/K {command}'; RunInTermCloseCmd = 'cmd.exe'; // default run in terminal command AND Close after command RunInTermCloseParams = '/C {command}'; fmtCommandPath = '%s>'; MonoSpaceFont = 'Courier New'; {$ELSEIF DEFINED(UNIX)} faFolder = S_IFDIR; ReversePathDelim = '\'; {$IF DEFINED(DARWIN)} RunTermCmd: String = '/Applications/Utilities/Terminal.app'; // default terminal RunTermParams = '%D'; RunInTermStayOpenCmd = '%COMMANDER_PATH%/scripts/terminal.sh'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '''{command}'''; RunInTermCloseCmd = ''; // default run in terminal command AND Close after command RunInTermCloseParams = ''; MonoSpaceFont = 'Monaco'; {$ELSEIF DEFINED(HAIKU)} RunTermCmd: String = 'Terminal'; // default terminal RunTermParams: String = '-w %D'; RunInTermStayOpenCmd: String = ''; // default run in terminal command AND Stay open after command RunInTermStayOpenParams: String = ''; RunInTermCloseCmd: String = ''; // default run in terminal command AND Close after command RunInTermCloseParams: String = ''; MonoSpaceFont = 'Noto Sans Mono'; {$ELSE} RunTermCmd: String = 'xterm'; // default terminal RunTermParams: String = ''; RunInTermStayOpenCmd: String = 'xterm'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams: String = '-e sh -c ''{command}; echo -n Press ENTER to exit... ; read a'''; RunInTermCloseCmd: String = 'xterm'; // default run in terminal command AND Close after command RunInTermCloseParams: String = '-e sh -c ''{command}'''; MonoSpaceFont: String = 'Monospace'; {$ENDIF} fmtCommandPath = '[%s]$:'; {$ENDIF} termStayOpen=True; termClose=False; type tTerminalEndindMode = boolean; EInvalidCommandLine = class(Exception); EInvalidQuoting = class(EInvalidCommandLine) constructor Create; reintroduce; end; {$IF DEFINED(MSWINDOWS) and DEFINED(FPC_HAS_CPSTRING)} NativeString = UnicodeString; {$ELSE} NativeString = String; {$ENDIF} function NtfsHourTimeDelay(const SourceName, TargetName: String): Boolean; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; function FileIsLinkToDirectory(const FileName: String; Attr: TFileAttrs): Boolean; {en Execute command line } function ExecCmdFork(sCmd: String): Boolean; {en Execute external commands @param(sCmd The executable) @param(sParams The optional parameters) @param(sStartPath The initial working directory) @param(bShowCommandLinePriorToExecute Flag indicating if we want the user to be prompted at the very last seconds prior to launch execution by offering a dialog window where he can adjust/confirm the three above parameters.) @param(bTerm Flag indicating if it should be launch through terminal) @param(bKeepTerminalOpen Value indicating the type of terminal to use (closed at the end, remain opened, etc.)) } function ExecCmdFork(sCmd: String; sParams: String; sStartPath: String = ''; bShowCommandLinePriorToExecute: Boolean = False; bTerm: Boolean = False; bKeepTerminalOpen: tTerminalEndindMode = termStayOpen): Boolean; {en Opens a file or URL in the user's preferred application @param(URL File name or URL) @returns(The function returns @true if successful, @false otherwise) } function ShellExecute(URL: String): Boolean; function GetDiskFreeSpace(const Path : String; out FreeSize, TotalSize : Int64) : Boolean; {en Get maximum file size for a mounted file system @param(Path The pathname of any file within the mounted file system) @returns(The maximum file size for a mounted file system) } function GetDiskMaxFileSize(const Path : String) : Int64; function GetTempFolder: String; { Similar to "GetTempFolder" but that we can unilaterally delete at the end when closin application} function GetTempFolderDeletableAtTheEnd: String; procedure DeleteTempFolderDeletableAtTheEnd; {en Get the system specific self extracting archive extension @returns(Self extracting archive extension) } function GetSfxExt: String; function IsAvailable(Drive: PDrive; TryMount: Boolean = True) : Boolean; function GetShell : String; {en Formats a string which will execute Command via shell. } function FormatShell(const Command: String): String; {en Formats a string which will execute Command in a terminal. } procedure FormatTerminal(var sCmd: String; var sParams: String; bKeepTerminalOpen: tTerminalEndindMode); {en Convert file name to system encoding, if name can not be represented in current locale then use short file name under Windows. } function mbFileNameToSysEnc(const LongPath: String): String; {en Converts file name to native representation } function mbFileNameToNative(const FileName: String): NativeString; inline; function AccessDenied(LastError: Integer): Boolean; inline; procedure FixFormIcon(Handle: LCLType.HWND); procedure HideConsoleWindow; procedure FixDateNamesToUTF8; function ParamStrU(Param: Integer): String; overload; function ParamStrU(const Param: String): String; overload; {en Get the current username of the current session } function GetCurrentUserName : String; {en Get the current machine name } function GetComputerNetName: String; implementation uses StrUtils, uFileProcs, FileUtil, uDCUtils, DCOSUtils, DCStrUtils, uGlobs, uLng, fConfirmCommandLine, uLog, DCConvertEncoding, LazUTF8 {$IF DEFINED(MSWINDOWS)} , Windows, Shlwapi, WinRT.Classes, uMyWindows, JwaWinNetWk, uShlObjAdditional, DCWindows, uNetworkThread, uClipboard {$ENDIF} {$IF DEFINED(UNIX)} , BaseUnix, Unix, uMyUnix, dl {$IF DEFINED(DARWIN)} , CocoaAll, uMyDarwin {$ELSEIF NOT DEFINED(HAIKU)} , uGio, uClipboard, uXdg, uKde {$ENDIF} {$IF DEFINED(LINUX)} , DCUnix, uMyLinux, uFlatpak {$ENDIF} {$ENDIF} ; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; {$IF DEFINED(MSWINDOWS)} begin Result:= False; if LowerCase(ExtractOnlyFileExt(FileName)) = 'lnk' then Result:= SHFileIsLinkToFolder(FileName, LinkTarget); end; {$ELSEIF DEFINED(UNIX)} begin Result:= False; if LowerCase(ExtractOnlyFileExt(FileName)) = 'desktop' then Result:= uMyUnix.FileIsLinkToFolder(FileName, LinkTarget); end; {$ENDIF} function ExecCmdFork(sCmd, sParams, sStartPath:String; bShowCommandLinePriorToExecute, bTerm : Boolean; bKeepTerminalOpen: tTerminalEndindMode) : Boolean; {$IFDEF UNIX} var Args : TDynamicStringArray; bFlagKeepGoing: boolean = True; begin result:=False; if bTerm then FormatTerminal(sCmd, sParams, bKeepTerminalOpen); if bShowCommandLinePriorToExecute then bFlagKeepGoing:= ConfirmCommandLine(sCmd, sParams, sStartPath); if bFlagKeepGoing then begin if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch+': '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); if sCmd = EmptyStr then Exit(False); sCmd := UTF8ToSys(sCmd); SplitCommandArgs(UTF8ToSys(sParams), Args); Result := ExecuteCommand(sCmd, Args, sStartPath); if (log_commandlineexecution in gLogOptions) then begin if Result then logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + rsSimpleWordSuccessExcla + ' / ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams + ' / ' + rsSimpleWordWorkDir + '=' + sStartPath) else logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + rsSimpleWordFailedExcla + ' / ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams + ' / ' + rsSimpleWordWorkDir + '=' + sStartPath); end; end else begin Result := True; end; end; {$ELSE} var wFileName, wParams, wStartPath: WideString; bFlagKeepGoing: boolean = True; ExecutionResult:HINST; begin sStartPath:=RemoveQuotation(sStartPath); if sStartPath='' then sStartPath:=mbGetCurrentDir; if not bTerm then sCmd:= NormalizePathDelimiters(sCmd) else // if bTerm then begin sCmd := ConcatenateStrWithSpace(sCmd,sParams); if bKeepTerminalOpen = termStayOpen then begin sParams:=StringReplace(gRunInTermStayOpenParams, '{command}', QuoteFilenameIfNecessary(sCmd) , [rfIgnoreCase]); sCmd := gRunInTermStayOpenCmd; end else begin sParams:=StringReplace(gRunInTermCloseParams, '{command}', QuoteFilenameIfNecessary(sCmd) , [rfIgnoreCase]); sCmd := gRunInTermCloseCmd; end; end; if bShowCommandLinePriorToExecute then bFlagKeepGoing:= ConfirmCommandLine(sCmd, sParams, sStartPath); if bFlagKeepGoing then begin wFileName:= CeUtf8ToUtf16(sCmd); wParams:= CeUtf8ToUtf16(sParams); wStartPath:= CeUtf8ToUtf16(sStartPath); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch+': '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); ExecutionResult:=ShellExecuteW(0, nil, PWChar(wFileName), PWChar(wParams), PWChar(wStartPath), SW_SHOW); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + ifThen((ExecutionResult > 32), rsSimpleWordSuccessExcla, IntToStr(ExecutionResult) + ':' + SysErrorMessage(ExecutionResult)) + ' / ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams + ' / ' + rsSimpleWordWorkDir + '=' + sStartPath); Result := (ExecutionResult > 32); end else begin result:=True; //User abort, so let's fake all things completed. end; end; {$ENDIF} function FileIsLinkToDirectory(const FileName: String; Attr: TFileAttrs): Boolean; {$IFDEF UNIX} var Info: BaseUnix.Stat; begin Result:= FPS_ISLNK(Attr) and (fpStat(UTF8ToSys(FileName), Info) >= 0) and FPS_ISDIR(Info.st_mode); end; {$ELSE} begin Result:= FPS_ISLNK(Attr) and FPS_ISDIR(Attr); end; {$ENDIF} function ExecCmdFork(sCmd: String): Boolean; {$IFDEF UNIX} var Command: String; Args : TDynamicStringArray; begin SplitCmdLine(sCmd, Command, Args); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch + ': ' + rsSimpleWordCommand + '=' + sCmd); Result:= ExecuteCommand(Command, Args, EmptyStr); if (log_commandlineexecution in gLogOptions) then begin if Result then logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + rsSimpleWordSuccessExcla + ' / ' + rsSimpleWordCommand + '=' + sCmd) else logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + rsSimpleWordFailedExcla + ' / ' + rsSimpleWordCommand + '=' + sCmd); end; end; {$ELSE} var sFileName, sParams: String; ExecutionResult: HINST; wsStartPath: UnicodeString; begin SplitCmdLine(sCmd, sFileName, sParams); wsStartPath:= CeUtf8ToUtf16(mbGetCurrentDir()); sFileName:= NormalizePathDelimiters(sFileName); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch + ': ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams); ExecutionResult := ShellExecuteW(0, nil, PWideChar(CeUtf8ToUtf16(sFileName)), PWideChar(CeUtf8ToUtf16(sParams)), PWideChar(wsStartPath), SW_SHOW); if (log_commandlineexecution in gLogOptions) then begin logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + IfThen((ExecutionResult > 32), rsSimpleWordSuccessExcla, IntToStr(ExecutionResult) + ':' + SysErrorMessage(ExecutionResult)) + ' / ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams); end; Result := (ExecutionResult > 32); end; {$ENDIF} function ShellExecute(URL: String): Boolean; {$IF DEFINED(MSWINDOWS)} var cchOut: DWORD; Return: HINST; wsFileName: UnicodeString; wsStartPath: UnicodeString; AppID, FileExt: UnicodeString; begin URL:= NormalizePathDelimiters(URL); if CheckWin32Version(10) then begin cchOut:= MAX_PATH; SetLength(AppID, cchOut); FileExt:= CeUtf8ToUtf16(ExtractFileExt(URL)); if (AssocQueryStringW(ASSOCF_NONE, ASSOCSTR_APPID, PWideChar(FileExt), nil, PWideChar(AppID), @cchOut) = S_OK) then begin if cchOut > 0 then begin SetLength(AppID, cchOut - 1); // Special case Microsoft Photos if (AppID = 'Microsoft.Windows.Photos_8wekyb3d8bbwe!App') then begin // https://blogs.windows.com/windowsdeveloper/2024/06/03/microsoft-photos-migrating-from-uwp-to-windows-app-sdk/ if CheckPhotosVersion(2024, 11050) then begin // Photos 2025.11010 and 2025.11020 had a bug: // it did not understand an URL-encoded file name if (not CheckPhotosVersion(2025, 0)) or CheckPhotosVersion(2025, 11030) then begin URL:= URIEncode(URL); URL:= StringReplace(URL, '%5C', '\', [rfReplaceAll]); end; URL:= 'ms-photos:viewer?fileName=' + URL; end // Microsoft Photos does not work correct // when process has administrator rights else if (IsUserAdmin <> dupAccept) then begin TLauncherThread.LaunchFileAsync(URL); Exit(True); end; end; end; end; end; wsFileName:= CeUtf8ToUtf16(URL); wsStartPath:= CeUtf8ToUtf16(mbGetCurrentDir()); Return:= ShellExecuteW(0, nil, PWideChar(wsFileName), nil, PWideChar(wsStartPath), SW_SHOWNORMAL); if Return = SE_ERR_NOASSOC then Result:= ExecCmdFork('rundll32 shell32.dll OpenAs_RunDLL ' + QuoteDouble(URL)) else begin Result:= Return > 32; end; end; {$ELSEIF DEFINED(DARWIN)} var theFileNameCFRef: CFStringRef = nil; theFileNameUrlRef: CFURLRef = nil; theFileNameFSRef: FSRef; begin Result:= False; try theFileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PAnsiChar(URL)); theFileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, theFileNameCFRef, kCFURLPOSIXPathStyle, False); if (CFURLGetFSRef(theFileNameUrlRef, theFileNameFSRef)) then begin Result:= (LSOpenFSRef(theFileNameFSRef, nil) = noErr); end; finally if Assigned(theFileNameCFRef) then CFRelease(theFileNameCFRef); if Assigned(theFileNameUrlRef) then CFRelease(theFileNameUrlRef); end; end; {$ELSE} var sCmdLine: String; begin Result:= False; if GetPathType(URL) = ptAbsolute then sCmdLine:= URL else begin sCmdLine:= IncludeTrailingPathDelimiter(mbGetCurrentDir); sCmdLine:= GetAbsoluteFileName(sCmdLine, URL) end; if FileIsUnixExecutable(sCmdLine) then begin Result:= ExecuteCommand(sCmdLine, [], mbGetCurrentDir); end else begin {$IF DEFINED(LINUX)} if (DesktopEnv = DE_FLATPAK) then Result:= FlatpakOpen(sCmdLine, False) else {$ENDIF} {$IF NOT DEFINED(HAIKU)} if (DesktopEnv = DE_KDE) and (HasKdeOpen = True) then Result:= KioOpen(sCmdLine) // Under KDE use "kioclient" to open files else if HasGio and (DesktopEnv <> DE_XFCE) then Result:= GioOpen(sCmdLine) // Under GNOME, Unity and LXDE use "GIO" to open files else {$ENDIF} begin sCmdLine:= GetDefaultAppCmd(sCmdLine); if Length(sCmdLine) > 0 then begin Result:= ExecCmdFork(sCmdLine); end; end; end; end; {$ENDIF} (* Get Disk Free Space *) function GetDiskFreeSpace(const Path : String; out FreeSize, TotalSize : Int64) : Boolean; {$IFDEF UNIX} var sbfs: TStatFS; begin Result:= (fpStatFS(PAnsiChar(CeUtf8ToSys(Path)), @sbfs) = 0); if not Result then Exit; {$IFDEF LINUX} if (sbfs.fstype = RAMFS_MAGIC) then begin Exit(GetFreeMem(FreeSize, TotalSize)); end; {$ENDIF} if (sbfs.blocks = 0) then Exit(False); FreeSize := (Int64(sbfs.bavail) * sbfs.bsize); TotalSize := (Int64(sbfs.blocks) * sbfs.bsize); end; {$ELSE} var wPath: UnicodeString; begin FreeSize := 0; TotalSize := 0; wPath:= UTF16LongName(Path); Result:= GetDiskFreeSpaceExW(PWideChar(wPath), FreeSize, TotalSize, nil); end; {$ENDIF} function GetDiskMaxFileSize(const Path: String): Int64; {$IFDEF UNIX} const MSDOS_SUPER_MAGIC = $4d44; var sbfs: TStatFS; begin Result := High(Int64); {$IF NOT DEFINED(HAIKU)} if (fpStatFS(PAnsiChar(CeUtf8ToSys(Path)), @sbfs) = 0) then begin {$IFDEF BSD} if (sbfs.ftype = MSDOS_SUPER_MAGIC) then {$ELSE} if (sbfs.fstype = MSDOS_SUPER_MAGIC) then {$ENDIF} Result:= $FFFFFFFF; // 4 Gb end; {$ENDIF} end; {$ELSE} var lpVolumeNameBuffer, lpFileSystemNameBuffer: array [0..255] of WideChar; lpMaximumComponentLength: DWORD = 0; lpFileSystemFlags: DWORD = 0; begin Result := High(Int64); if GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(ExtractFileDrive(Path)) + PathDelim), lpVolumeNameBuffer, SizeOf(lpVolumeNameBuffer), nil, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, SizeOf(lpFileSystemNameBuffer)) then begin if SameText(lpFileSystemNameBuffer, 'FAT') then Result:= $80000000 // 2 Gb else if SameText(lpFileSystemNameBuffer, 'FAT32') then Result:= $FFFFFFFF; // 4 Gb end; end; {$ENDIF} function NtfsHourTimeDelay(const SourceName, TargetName: String): Boolean; {$IFDEF MSWINDOWS} var lpDummy: DWORD = 0; lpSourceFileSystem, lpTargetFileSystem: array [0..MAX_PATH] of WideChar; begin Result:= False; if GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(ExtractFileDrive(SourceName)) + PathDelim), nil, 0, nil, lpDummy, lpDummy, lpSourceFileSystem, MAX_PATH) and GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(ExtractFileDrive(TargetName)) + PathDelim), nil, 0, nil, lpDummy, lpDummy, lpTargetFileSystem, MAX_PATH) then begin Result:= (SameText(lpSourceFileSystem, 'FAT32') and SameText(lpTargetFileSystem, 'NTFS')) or (SameText(lpTargetFileSystem, 'FAT32') and SameText(lpSourceFileSystem, 'NTFS')) end; end; {$ELSE} begin Result:= False; end; {$ENDIF} function GetShell : String; {$IFDEF MSWINDOWS} begin Result:= mbGetEnvironmentVariable('ComSpec'); end; {$ELSE} begin Result:= SysToUTF8(GetEnvironmentVariable('SHELL')); end; {$ENDIF} function FormatShell(const Command: String): String; begin {$IF DEFINED(UNIX)} Result := Format('%s -c %s', [GetShell, QuoteSingle(Command)]); {$ELSEIF DEFINED(MSWINDOWS)} Result := Format('%s /C %s', [GetShell, QuoteDouble(Command)]); {$ENDIF} end; procedure FormatTerminal(var sCmd: String; var sParams: String; bKeepTerminalOpen: tTerminalEndindMode); var sConfigParam:string; begin {$IF DEFINED(UNIX)} sParams := ConcatenateStrWithSpace(sCmd, sParams); if bKeepTerminalOpen = termStayOpen then begin sCmd := gRunInTermStayOpenCmd; sConfigParam := gRunInTermStayOpenParams; end else begin sCmd := gRunInTermCloseCmd; sConfigParam := gRunInTermCloseParams; end; sCmd := ReplaceEnvVars(sCmd); if Pos(CnstUserCommand, sConfigParam) <> 0 then sParams := StringReplace(sConfigParam, CnstUserCommand, sParams , [rfIgnoreCase]) else sParams := ConcatenateStrWithSpace(sConfigParam, sParams); {$ELSEIF DEFINED(MSWINDOWS)} // if bKeepTerminalOpen then // Result := Format('%s %s', [gRunInTermStayOpenCmd, QuoteDouble(Command)]) // else // Result := Format('%s %s', [gRunInTermCloseCmd, QuoteDouble(Command)]); sParams := ConcatenateStrWithSpace(sCmd, sParams); if bKeepTerminalOpen = termStayOpen then begin sCmd := gRunInTermStayOpenCmd; sConfigParam := gRunInTermStayOpenParams; end else begin sCmd := gRunInTermCloseCmd; sConfigParam := gRunInTermCloseParams; end; if pos(CnstUserCommand,sConfigParam)<>0 then sParams := StringReplace(sConfigParam, CnstUserCommand, sParams , [rfIgnoreCase]) else sParams:=ConcatenateStrWithSpace(sConfigParam, sParams); {$ENDIF} end; function GetTempFolder: String; begin Result:= GetTempDir + '_dc'; if not mbDirectoryExists(Result) then mbCreateDir(Result); Result:= Result + PathDelim; end; function GetTempFolderDeletableAtTheEnd: String; begin Result:= GetTempDir + '_dc~~~'; if not mbDirectoryExists(Result) then mbCreateDir(Result); Result:= Result + PathDelim; end; procedure DeleteTempFolderDeletableAtTheEnd; var TempFolderName:string; begin TempFolderName:= GetTempDir + '_dc~~~'; if mbDirectoryExists(TempFolderName) then DelTree(TempFolderName); end; function GetSfxExt: String; {$IFDEF MSWINDOWS} begin Result:= '.exe'; end; {$ELSE} begin Result:= '.run'; end; {$ENDIF} function IsAvailable(Drive: PDrive; TryMount: Boolean): Boolean; {$IF DEFINED(MSWINDOWS)} var Drv: String; DriveLabel: String; wsLocalName, wsRemoteName: WideString; begin Drv:= ExtractFileDrive(Drive^.Path) + PathDelim; // Try to close CD/DVD drive if (Drive^.DriveType = dtOptical) and TryMount and (not mbDriveReady(Drv)) then begin DriveLabel:= mbGetVolumeLabel(Drv, False); mbCloseCD(Drv); if mbDriveReady(Drv) then mbWaitLabelChange(Drv, DriveLabel); end // Try to connect to mapped network drive else if (Drive^.DriveType = dtNetwork) and TryMount and (not mbDriveReady(Drv)) then begin wsLocalName := CeUtf8ToUtf16(ExtractFileDrive(Drive^.Path)); wsRemoteName := CeUtf8ToUtf16(Drive^.DriveLabel); TNetworkThread.Connect(PWideChar(wsLocalName), PWideChar(wsRemoteName), RESOURCETYPE_DISK); end // Try to unlock BitLocker Drive else if TryMount then begin mbDriveUnlock(Drive^.Path); end; Result:= mbDriveReady(Drv); end; {$ELSEIF DEFINED(DARWIN)} begin // Because we show under Mac OS X only mounted volumes Result:= True; end; {$ELSEIF DEFINED(LINUX)} var mtab: PIOFile; pme: PMountEntry; begin Result:= False; mtab:= setmntent(_PATH_MOUNTED,'r'); if not Assigned(mtab) then exit; pme:= getmntent(mtab); while (pme <> nil) do begin if CeSysToUtf8(pme.mnt_dir) = Drive^.Path then begin Result:= True; Break; end; pme:= getmntent(mtab); end; endmntent(mtab); if not Result and TryMount then Result := MountDrive(Drive); end; {$ELSE} begin Result:= True; end; {$ENDIF} function mbFileNameToSysEnc(const LongPath: String): String; {$IFDEF MSWINDOWS} begin Result:= CeUtf8ToSys(LongPath); if Pos('?', Result) <> 0 then mbGetShortPathName(LongPath, Result); end; {$ELSE} begin Result:= CeUtf8ToSys(LongPath); end; {$ENDIF} function AccessDenied(LastError: Integer): Boolean; {$IF DEFINED(MSWINDOWS)} begin Result:= (LastError = ERROR_ACCESS_DENIED); end; {$ELSE} begin Result:= (LastError = ESysEPERM) or (LastError = ESysEACCES); end; {$ENDIF} procedure FixFormIcon(Handle: LCLType.HWND); begin // Workaround for Lazarus issue 0018484. // Any form that sets its own icon should call this in FormCreate. {$IFDEF WINDOWS} Windows.SetClassLong(Handle, GCL_HICONSM, 0); Windows.SetClassLong(Handle, GCL_HICON, 0); {$ENDIF} end; procedure HideConsoleWindow; begin {$IFDEF WINDOWS} if isConsole then ShowWindow(GetConsoleWindow, SW_HIDE); {$ENDIF} end; procedure FixDateNamesToUTF8; var i: Integer; begin with DefaultFormatSettings do begin for i := Low(ShortMonthNames) to High(ShortMonthNames) do ShortMonthNames[i] := SysToUTF8(ShortMonthNames[i]); for i := Low(ShortDayNames) to High(ShortDayNames) do ShortDayNames[i] := SysToUTF8(ShortDayNames[i]); for i := Low(LongMonthNames) to High(LongMonthNames) do LongMonthNames[i] := SysToUTF8(LongMonthNames[i]); for i := Low(LongDayNames) to High(LongDayNames) do LongDayNames[i] := SysToUTF8(LongDayNames[i]); end; end; function ParamStrU(Param: Integer): String; {$IFDEF UNIX} begin Result:= SysToUTF8(ObjPas.ParamStr(Param)); end; {$ELSE} begin if (Param >= 0) and (Param < argc) then Result:= StrPas(argv[Param]) else Result:= EmptyStr; end; {$ENDIF} function ParamStrU(const Param: String): String; {$IFDEF UNIX} begin Result:= SysToUTF8(Param); end; {$ELSE} begin Result:= Param; end; {$ENDIF} { EInvalidQuoting } constructor EInvalidQuoting.Create; begin inherited Create(rsMsgInvalidQuoting); end; { GetCurrentUserName } function GetCurrentUserName : String; {$IF DEFINED(MSWINDOWS)} var wsUserName : UnicodeString; dwUserNameLen : DWORD = UNLEN + 1; begin SetLength(wsUserName, dwUserNameLen); if GetUserNameW(PWideChar(wsUserName), dwUserNameLen) then begin SetLength(wsUserName, dwUserNameLen - 1); Result := UTF16ToUTF8(wsUserName); end else Result := 'Unknown'; end; {$ELSEIF DEFINED(UNIX)} begin Result:= SysToUTF8(GetEnvironmentVariable('USER')); end; {$ENDIF} { GetComputerNetName } function GetComputerNetName: String; {$IF DEFINED(MSWINDOWS)} var Size: DWORD = MAX_PATH; Buffer: array[0..Pred(MAX_PATH)] of WideChar; begin if GetComputerNameW(Buffer, Size) then Result := UTF16ToUTF8(UnicodeString(Buffer)) else Result := '' end; {$ELSEIF DEFINED(UNIX)} begin Result:= SysToUTF8(GetHostName); end; {$ENDIF} function mbFileNameToNative(const FileName: String): NativeString; {$IF DEFINED(MSWINDOWS) and DEFINED(FPC_HAS_CPSTRING)} begin Result:= UTF16LongName(FileName); end; {$ELSE} begin Result:= Utf8ToSys(FileName); end; {$ENDIF} end. doublecmd-1.1.30/src/platform/uClipboard.pas0000644000175000001440000005367015104114162020004 0ustar alexxusersunit uClipboard; {$mode objfpc}{$H+} {$IFDEF DARWIN} {$modeswitch objectivec1} {$ENDIF} {$IF DEFINED(UNIX) and not DEFINED(DARWIN)} {$Define UNIX_not_DARWIN} {$ENDIF} interface uses Classes, SysUtils, LCLType; type TClipboardOperation = ( ClipboardCopy, ClipboardCut ); function CopyToClipboard(const filenames:TStringList):Boolean; function CutToClipboard(const filenames:TStringList):Boolean; function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; function URIDecode(encodedUri: String): String; function URIEncode(path: String): String; {$IF DEFINED(UNIX_not_DARWIN)} function ExtractFilenames(uriList: String; uriDec: Boolean): TStringList; function FileNameToURI(const FileName: String): String; function FormatUriList(FileNames: TStringList): String; function FormatTextPlain(FileNames: TStringList): String; {$ENDIF} procedure ClearClipboard; procedure ClipboardSetText(AText: String); const fileScheme = 'file:'; // for URI {$IF DEFINED(MSWINDOWS)} CFSTR_PREFERRED_DROPEFFECT = 'Preferred DropEffect'; CFSTR_FILENAME = 'FileName'; CFSTR_FILENAMEW = 'FileNameW'; CFSTR_UNIFORM_RESOURCE_LOCATOR = 'UniformResourceLocator'; CFSTR_UNIFORM_RESOURCE_LOCATORW = 'UniformResourceLocatorW'; CFSTR_SHELL_IDLIST_ARRAY = 'Shell IDList Array'; CFSTR_FILEDESCRIPTOR = 'FileGroupDescriptor'; CFSTR_FILEDESCRIPTORW = 'FileGroupDescriptorW'; CFSTR_FILECONTENTS = 'FileContents'; CFSTR_HTMLFORMAT = 'HTML Format'; CFSTR_RICHTEXTFORMAT = 'Rich Text Format'; {$ELSEIF DEFINED(UNIX_not_DARWIN)} // General MIME uriListMime = 'text/uri-list'; textPlainMime = 'text/plain'; // Gnome cutText = 'cut'; copyText = 'copy'; gnomeClipboardMime = 'x-special/gnome-copied-files'; // Kde kdeClipboardMime = 'application/x-kde-cutselection'; {$ELSEIF DEFINED(DARWIN)} TClipboardOperationName : array[TClipboardOperation] of string = ( 'copy', 'cut' ); darwinPasteboardOpMime = 'application/x-darwin-doublecmd-PbOp'; {$ENDIF} {$IF DEFINED(MSWINDOWS)} var CFU_PREFERRED_DROPEFFECT, CFU_FILENAME, CFU_FILENAMEW, CFU_UNIFORM_RESOURCE_LOCATOR, CFU_UNIFORM_RESOURCE_LOCATORW, CFU_SHELL_IDLIST_ARRAY, CFU_FILECONTENTS, CFU_FILEGROUPDESCRIPTOR, CFU_FILEGROUPDESCRIPTORW, CFU_HTML, CFU_RICHTEXT: TClipboardFormat; {$ELSEIF DEFINED(UNIX_not_DARWIN)} var CFU_KDE_CUT_SELECTION, CFU_GNOME_COPIED_FILES, CFU_TEXT_PLAIN, CFU_URI_LIST: TClipboardFormat; {$ENDIF} implementation uses {$IF DEFINED(MSWINDOWS)} Clipbrd, Windows, ActiveX, uOleDragDrop, fMain, uShellContextMenu, uOSForms {$ELSEIF DEFINED(UNIX_not_DARWIN)} Clipbrd, LCLIntf {$ELSEIF DEFINED(DARWIN)} DCStrUtils, CocoaAll, CocoaUtils, uMyDarwin {$ENDIF} ; procedure RegisterUserFormats; begin {$IF DEFINED(MSWINDOWS)} CFU_PREFERRED_DROPEFFECT := RegisterClipboardFormat(CFSTR_PREFERRED_DROPEFFECT); CFU_FILENAME := RegisterClipboardFormat(CFSTR_FILENAME); CFU_FILENAMEW := RegisterClipboardFormat(CFSTR_FILENAMEW); CFU_UNIFORM_RESOURCE_LOCATOR := RegisterClipboardFormat(CFSTR_UNIFORM_RESOURCE_LOCATOR); CFU_UNIFORM_RESOURCE_LOCATORW := RegisterClipboardFormat(CFSTR_UNIFORM_RESOURCE_LOCATORW); CFU_SHELL_IDLIST_ARRAY := RegisterClipboardFormat(CFSTR_SHELL_IDLIST_ARRAY); CFU_FILECONTENTS := $8000 OR RegisterClipboardFormat(CFSTR_FILECONTENTS) And $7FFF; CFU_FILEGROUPDESCRIPTOR := $8000 OR RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR) And $7FFF; CFU_FILEGROUPDESCRIPTORW := $8000 OR RegisterClipboardFormat(CFSTR_FILEDESCRIPTORW) And $7FFF; CFU_HTML := $8000 OR RegisterClipboardFormat(CFSTR_HTMLFORMAT) And $7FFF; CFU_RICHTEXT := $8000 OR RegisterClipboardFormat(CFSTR_RICHTEXTFORMAT) And $7FFF; {$ELSEIF DEFINED(UNIX_not_DARWIN)} CFU_GNOME_COPIED_FILES := RegisterClipboardFormat(gnomeClipboardMime); CFU_KDE_CUT_SELECTION := RegisterClipboardFormat(kdeClipboardMime); CFU_TEXT_PLAIN := RegisterClipboardFormat(textPlainMime); CFU_URI_LIST := RegisterClipboardFormat(uriListMime); {$ENDIF} end; { Changes all '%XX' to bytes (XX is a hex number). } function URIDecode(encodedUri: String): String; var i, oldIndex: Integer; len: Integer; begin len := Length(encodedUri); Result := ''; oldIndex := 1; i := 1; while i <= len-2 do // must be at least 2 more characters after '%' begin if encodedUri[i] = '%' then begin Result := Result + Copy(encodedUri, oldIndex, i-oldIndex) + Chr(StrToInt('$' + Copy(encodedUri, i+1, 2))); i := i + 3; oldIndex := i; end else Inc(i); end; Result := Result + Copy(encodedUri, oldIndex, len - oldIndex + 1 ); end; { Escapes forbidden characters to '%XX' (XX is a hex number). } function URIEncode(path: String): String; const { Per RFC-3986, what's allowed in uri-encoded path. path-absolute = "/" [ segment-nz *( "/" segment ) ] segment = *pchar segment-nz = 1*pchar pchar = unreserved / pct-encoded / sub-delims / ":" / "@" <-- pct-encoded = "%" HEXDIG HEXDIG unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" We'll also allow "/" in pchar, because it happens to also be the OS path delimiter. } allowed : set of char = [ '-', '.', '_', '~', // 'A'..'Z', 'a'..'z', '0'..'9', '!', '$', '&', #39 {'}, '(', ')', '*', '+', ',', ';', '=', ':', '@', '/' ]; var i, oldIndex: Integer; len: Integer; begin len := Length(path); Result := ''; oldIndex := 1; i := 1; for i := 1 to len do begin if not ((path[i] >= 'a') and (path[i] <= 'z')) and not ((path[i] >= 'A') and (path[i] <= 'Z')) and not ((path[i] >= '0') and (path[i] <= '9')) and not (path[i] in allowed) then begin Result := Result + Copy(path, oldIndex, i-oldIndex) + '%' + Format('%.2x', [Ord(path[i])]); oldIndex := i + 1; end; end; Result := Result + Copy(path, oldIndex, len - oldIndex + 1 ); end; {$IFDEF UNIX_not_DARWIN} { Extracts a path from URI } function ExtractPath(uri: String): String; var len: Integer; i, j: Integer; begin len := Length(uri); if (len >= Length(fileScheme)) and (CompareChar(uri[1], fileScheme, Length(fileScheme)) = 0) then begin i := 1 + Length(fileScheme); // Omit case where we would have a root-less path - it is useless to us. if (i <= len) and (uri[i] = '/') then begin // Check if we have a: - "//" authority - part. if (i+1 <= len) and (uri[i+1] = '/') then begin // Authority (usually a hostname) may be empty. for j := i + 2 to len do if uri[j] = '/' then begin Result := Copy(uri, j, len - j + 1); Break; end; end else begin // We have only a path. Result := Copy(uri, i, len - i + 1); end; end; end else Result := ''; end; { Retrieves file names delimited by line ending characters. } function ExtractFilenames(uriList: String; uriDec: Boolean): TStringList; var i, oldIndex: Integer; len: Integer; path: String; begin // Format should be: file://hostname/path/to/file // Hostname may be empty. len := Length(uriList); Result := TStringList.Create; // For compatibility with apps that end the string with zero. while (len > 0) and (uriList[len] = #0) do Dec(len); if len = 0 then Exit; oldIndex := 1; for i := 1 to len do begin // Search for the end of line. if uriList[i] in [ #10, #13 ] then begin if i > oldIndex then begin path := ExtractPath(Copy(uriList, oldIndex, i - oldIndex)); if Length(path) > 0 then begin if uriDec then begin path := URIDecode(path); end; Result.Add(path); end; end; oldIndex := i + 1; end end; if i >= oldIndex then begin // copy including 'i'th character path := ExtractPath(Copy(uriList, oldIndex, i - oldIndex + 1)); if Length(path) > 0 then begin if uriDec then begin path := URIDecode(path); end; Result.Add(path); end; end; end; function FileNameToURI(const FileName: String): String; begin Result := fileScheme + '//' + URIEncode(FileName); end; function FormatUriList(FileNames: TStringList): String; var i : integer; begin Result := ''; for i := 0 to filenames.Count-1 do begin // Separate previous uris with line endings, // but do not end the whole string with it. if i > 0 then Result := Result + LineEnding; Result := Result + fileScheme + '//' { don't put hostname } + URIEncode(filenames[i]); end; end; function FormatTextPlain(FileNames: TStringList): String; var i : integer; begin Result := ''; for i := 0 to filenames.Count-1 do begin if i > 0 then Result := Result + LineEnding; Result := Result + fileScheme + '//' { don't put hostname } + filenames[i]; end; end; function GetClipboardFormatAsString(formatId: TClipboardFormat): String; var PBuffer: PChar = nil; stream: TMemoryStream; begin Result := ''; stream := TMemoryStream.Create; if stream <> nil then try Clipboard.GetFormat(formatId, stream); stream.Seek(0, soFromBeginning); PBuffer := AllocMem(stream.Size); if PBuffer <> nil then begin stream.Read(PBuffer^, stream.Size); SetString(Result, PBuffer, stream.Size); end; finally if PBuffer <> nil then begin FreeMem(PBuffer); PBuffer := nil; end; FreeAndNil(stream); end; end; function GetClipboardFormatAsString(formatName: String): String; var formatId: Integer; begin formatId := Clipboard.FindFormatID(formatName); if formatId <> 0 then Result := GetClipboardFormatAsString(formatId) else Result := ''; end; {$ENDIF} {$IFDEF MSWINDOWS} function SendToClipboard(const filenames:TStringList; ClipboardOp: TClipboardOperation):Boolean; var DragDropInfo: TDragDropInfo; i: Integer; hGlobalBuffer: HGLOBAL; PreferredEffect: DWORD = DROPEFFECT_COPY; formatEtc: TFormatEtc = (CfFormat: 0; Ptd: nil; dwAspect: 0; lindex: 0; tymed: TYMED_HGLOBAL); begin Result := False; if filenames.Count = 0 then Exit; if OpenClipboard(GetWindowHandle(frmMain)) = False then Exit; // Empty clipboard, freeing handles to data inside it. // Assign ownership of clipboard to self (frmMain.Handle). EmptyClipboard; { Create a helper object. } DragDropInfo := TDragDropInfo.Create(PreferredEffect); try for i := 0 to filenames.Count - 1 do DragDropInfo.Add(filenames[i]); { Now, set preferred effect. } if CFU_PREFERRED_DROPEFFECT <> 0 then begin if ClipboardOp = ClipboardCopy then PreferredEffect := DROPEFFECT_COPY else if ClipboardOp = ClipboardCut then PreferredEffect := DROPEFFECT_MOVE; hGlobalBuffer := DragDropInfo.CreatePreferredDropEffect(PreferredEffect); if hGlobalBuffer <> 0 then begin if SetClipboardData(CFU_PREFERRED_DROPEFFECT, hGlobalBuffer) = 0 then begin // Failed. GlobalFree(hGlobalBuffer); CloseClipboard; Exit; end // else SetClipboardData succeeded, // so hGlobalBuffer is now owned by the operating system. end else begin CloseClipboard; Exit; end; end; { Now, set clipboard data. } formatEtc.CfFormat := CF_HDROP; hGlobalBuffer := DragDropInfo.MakeDataInFormat(formatEtc); if SetClipboardData(CF_HDROP, hGlobalBuffer) = 0 then GlobalFree(hGlobalBuffer); formatEtc.CfFormat := CFU_SHELL_IDLIST_ARRAY; hGlobalBuffer := DragDropInfo.MakeDataInFormat(formatEtc); if SetClipboardData(CFU_SHELL_IDLIST_ARRAY, hGlobalBuffer) = 0 then GlobalFree(hGlobalBuffer); CloseClipboard; Result := True; finally FreeAndNil(DragDropInfo); end; end; {$ENDIF} {$IFDEF UNIX_not_DARWIN} function SendToClipboard(const filenames:TStringList; ClipboardOp: TClipboardOperation):Boolean; var s: String; uriList: String; plainList: String; begin Result := False; if filenames.Count = 0 then Exit; // Prepare filenames list. uriList := FormatUriList(filenames); plainList := FormatTextPlain(filenames); Clipboard.Open; Clipboard.Clear; { Gnome } if CFU_GNOME_COPIED_FILES <> 0 then begin case ClipboardOp of ClipboardCopy: s := copyText; ClipboardCut: s := cutText; else // unsupported operation s := ''; end; if s <> '' then begin s := s + LineEnding + uriList; Clipboard.AddFormat(CFU_GNOME_COPIED_FILES, s[1], Length(s)); end; end; { KDE } if CFU_KDE_CUT_SELECTION <> 0 then begin case ClipboardOp of ClipboardCopy: s := '0'; ClipboardCut: s := '1'; else // unsupported operation s := ''; end; if s <> '' then Clipboard.AddFormat(CFU_KDE_CUT_SELECTION, s[1], Length(s)); end; // Common to all, plain text. Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), plainList[1], Length(plainList)); // Send also as URI-list. if CFU_URI_LIST <> 0 then Clipboard.AddFormat(CFU_URI_LIST, uriList[1], Length(uriList)); Clipboard.Close; Result := True; end; {$ENDIF} // MacOs 10.5 compatibility {$IFDEF DARWIN} function FilenamesToString(const filenames:TStringList): String; begin Result := TrimRightLineEnding( filenames.Text, filenames.TextLineBreakStyle); end; procedure NSPasteboardAddFiles(const filenames:TStringList; pb:NSPasteboard); begin pb.addTypes_owner(NSArray.arrayWithObject(NSFileNamesPboardType), nil); pb.setPropertyList_forType(ListToNSArray(filenames), NSFileNamesPboardType); end; procedure NSPasteboardAddFiles(const filenames:TStringList); begin NSPasteboardAddFiles( filenames, NSPasteboard.generalPasteboard ); end; procedure NSPasteboardAddString(const value:String; const pbType:NSString ); var pb: NSPasteboard; begin pb:= NSPasteboard.generalPasteboard; pb.addTypes_owner(NSArray.arrayWithObject(pbType), nil); pb.setString_forType(StringToNSString(value), pbType); end; procedure NSPasteboardAddString(const value:String); begin NSPasteboardAddString( value , NSStringPboardType ); end; function SendToClipboard(const filenames:TStringList; ClipboardOp: TClipboardOperation):Boolean; var s : string; begin Result := false; if filenames.Count = 0 then Exit; ClearClipboard; NSPasteboardAddFiles( filenames ); NSPasteboardAddString( FilenamesToString(filenames) ); NSPasteboardAddString( TClipboardOperationName[ClipboardOp] , StringToNSString(darwinPasteboardOpMime) ); Result := true; end; {$ENDIF} function CopyToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCopy); end; function CutToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCut); end; {$IFDEF MSWINDOWS} function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; var hGlobalBuffer: HGLOBAL; pBuffer: LPVOID; PreferredEffect: DWORD; begin filenames := nil; Result := False; // Default to 'copy' if effect hasn't been given. ClipboardOp := ClipboardCopy; if OpenClipboard(0) = False then Exit; if CFU_PREFERRED_DROPEFFECT <> 0 then begin hGlobalBuffer := GetClipboardData(CFU_PREFERRED_DROPEFFECT); if hGlobalBuffer <> 0 then begin pBuffer := GlobalLock(hGlobalBuffer); if pBuffer <> nil then begin PreferredEffect := PDWORD(pBuffer)^; if PreferredEffect = DROPEFFECT_COPY then ClipboardOp := ClipboardCopy else if PreferredEffect = DROPEFFECT_MOVE then ClipboardOp := ClipboardCut; GlobalUnlock(hGlobalBuffer); end; end; end; { Now, retrieve file names. } hGlobalBuffer := GetClipboardData(CF_HDROP); if hGlobalBuffer = 0 then begin with frmMain do begin CloseClipboard; uShellContextMenu.PasteFromClipboard(Handle, ActiveFrame.CurrentPath); Exit(False); end; end; filenames := uOleDragDrop.TFileDropTarget.GetDropFilenames(hGlobalBuffer); if Assigned(filenames) then Result := True; CloseClipboard; end; {$ENDIF} {$IFDEF UNIX_not_DARWIN} function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; var formatId: TClipboardFormat; uriDec: Boolean = False; uriList: String; s: String; begin filenames := nil; Result := False; // Default to 'copy' if effect hasn't been given. ClipboardOp := ClipboardCopy; uriList := ''; // Check if clipboard is not empty. if Clipboard.FormatCount = 0 then Exit; { Gnome } formatId := Clipboard.FindFormatID(gnomeClipboardMime); if formatId <> 0 then begin s := GetClipboardFormatAsString(formatId); { Format is: 'cut' or 'copy' + line ending character, followed by an URI-list delimited with line ending characters. Filenames may be UTF-8 encoded. e.g. cut#10file://host/path/to/file/name%C4%85%C3%B3%C5%9B%C5%BA%C4%87 } { Check operation } if (Length(s) >= Length(CutText)) and (CompareChar(s[1], CutText, Length(CutText)) = 0) then begin ClipboardOp := ClipboardCut; uriList := Copy(s, 1 + Length(CutText), Length(s)-Length(CutText)); end else if (Length(s) >= Length(CopyText)) and (CompareChar(s[1], CopyText, Length(CopyText)) = 0) then begin ClipboardOp := ClipboardCopy; uriList := Copy(s, 1 + Length(CopyText), Length(s)-Length(CopyText)); end; uriList := Trim(uriList); uriDec := Length(uriList) > 0; end else { KDE } begin formatId := Clipboard.FindFormatID(kdeClipboardMime); if formatId <> 0 then begin s := GetClipboardFormatAsString(formatId); { We should have a single char: '1' if 'cut', '0' if 'copy'. } { No uri-list in this target. } if Length(s) > 0 then begin if s[1] = '1' then ClipboardOp := ClipboardCut else ClipboardOp := ClipboardCopy; end; end; end; { Common formats } if uriList = '' then begin // Try to read one of the text formats. // The URIs in targets like STRING, UTF8_STRING, etc. are not encoded. // First try default target choosing behaviour. // Some buggy apps, however, supply UTF8_STRING or other targets // with 0 size and it's not detected by this function under gtk. uriList := Clipboard.AsText; // Next, try URI encoded list. if uriList = '' then begin uriList := GetClipboardFormatAsString(uriListMime); uriList := Trim(uriList); uriDec := Length(uriList) > 0; end; // Try plain texts now. // On non-UTF8 systems these should be encoded in system locale, // and may be displayed badly, but will be copied successfully. if uriList = '' then begin uriList := GetClipboardFormatAsString('STRING'); end; if uriList = '' then begin uriList := GetClipboardFormatAsString(textPlainMime); end; // If still nothing, then maybe the clipboard has no data in text format. if uriList = '' then Exit; end; filenames := ExtractFilenames(uriList, uriDec); if (filenames <> nil) and (filenames.Count > 0) then Result := True; end; {$ENDIF} // MacOs 10.5 compatibility {$IFDEF DARWIN} function getStringFromPasteboard( pbType : NSString ) : String; var pb : NSPasteboard; begin pb := NSPasteboard.generalPasteboard; Result := NSStringToString( pb.stringForType( pbType ) ); end; function getOpFromPasteboard() : TClipboardOperation; var opString : String; begin Result := ClipboardCopy; opString := getStringFromPasteboard( StringToNSString(darwinPasteboardOpMime) ); if TClipboardOperationName[ClipboardCut].CompareTo(opString) = 0 then Result := ClipboardCut; end; function getFilenamesFromPasteboard() : TStringList; var pb : NSPasteboard; filenameArray{, lClasses}: NSArray; begin Result := nil; pb := NSPasteboard.generalPasteboard; filenameArray := pb.propertyListForType(NSFilenamesPboardType); if filenameArray <> nil then Result := NSArrayToList( filenameArray ); end; function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; begin Result := false; ClipboardOp := ClipboardCopy; filenames := getFilenamesFromPasteboard(); if filenames <> nil then begin ClipboardOp := getOpFromPasteboard(); Result := true; end; end; {$ENDIF} {$IFDEF MSWINDOWS} procedure ClearClipboard; begin if OpenClipboard(0) then begin EmptyClipboard; CloseClipboard; end; end; {$ENDIF} {$IFDEF UNIX_not_DARWIN} procedure ClearClipboard; begin Clipboard.Open; Clipboard.AsText := ''; Clipboard.Close; end; {$ENDIF} // MacOs 10.5 compatibility {$IFDEF DARWIN} procedure ClearClipboard( pb:NSPasteboard ); begin pb.clearContents; end; procedure ClearClipboard; begin ClearClipboard( NSPasteboard.generalPasteboard ); end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure ClipboardSetText(AText: String); begin Clipboard.AsText := AText; end; {$ENDIF} {$IF DEFINED(UNIX_not_DARWIN)} procedure ClipboardSetText(AText: String); begin {$IFNDEF LCLGTK2} Clipboard.AsText := AText; {$ELSE} // Workaround for Lazarus bug #0021453. LCL adds trailing zero to clipboard in Clipboard.AsText. if Length(AText) = 0 then Clipboard.AsText := '' else begin Clipboard.Clear; Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), AText[1], Length(AText)); end; {$ENDIF} end; {$ENDIF} // MacOs 10.5 compatibility {$IFDEF DARWIN} procedure ClipboardSetText(AText: String); begin ClearClipboard; NSPasteboardAddString(AText); end; {$ENDIF} initialization RegisterUserFormats; end. doublecmd-1.1.30/src/platform/lua.pas0000644000175000001440000013546215104114162016501 0ustar alexxusers(* * A Pascal wrapper for Lua 5.1-5.4 library. * * Created by Geo Massar, 2006 * Distributed as free/open source. * 2008 Added dynamically library loading by Dmitry Kolomiets (B4rr4cuda@rambler.ru) * 2018-2023 Added Lua 5.2 - 5.4 library support by Alexander Koblov (alexx2000@mail.ru) *) unit lua; {$mode delphi} interface uses DynLibs; type size_t = SizeUInt; Psize_t = ^size_t; lua_State = record end; Plua_State = ^lua_State; const {$IF DEFINED(MSWINDOWS)} LuaDLL = 'lua5.1.dll'; {$ELSEIF DEFINED(DARWIN)} LuaDLL = 'liblua5.1.dylib'; {$ELSEIF DEFINED(UNIX)} LuaDLL = 'liblua5.1.so.0'; {$ENDIF} (* formats for Lua numbers *) {$IFNDEF LUA_NUMBER_SCAN} const LUA_NUMBER_SCAN = '%lf'; {$ENDIF} {$IFNDEF LUA_NUMBER_FMT} const LUA_NUMBER_FMT = '%.14g'; {$ENDIF} {$IFNDEF LUA_INTEGER_FMT} const LUA_INTEGER_FMT = '%d'; {$ENDIF} function LoadLuaLib(FileName: String): Boolean; procedure UnloadLuaLib; function IsLuaLibLoaded: Boolean; (*****************************************************************************) (* luaconfig.h *) (*****************************************************************************) (* ** $Id: luaconf.h,v 1.81 2006/02/10 17:44:06 roberto Exp $ ** Configuration file for Lua ** See Copyright Notice in lua.h *) (* ** {================================================================== @@ LUA_NUMBER is the type of numbers in Lua. ** CHANGE the following definitions only if you want to build Lua ** with a number type different from double. You may also need to ** change lua_number2int & lua_number2integer. ** =================================================================== *) type LUA_NUMBER_ = type Double; // ending underscore is needed in Pascal LUA_INTEGER_ = type Int64; (* @@ LUA_IDSIZE gives the maximum size for the description of the source @* of a function in debug information. ** CHANGE it if you want a different size. *) const LUA_IDSIZE = 60; (* @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. *) var LUAL_BUFFERSIZE: Integer; (* @@ LUA_PROMPT is the default prompt used by stand-alone Lua. @@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. ** CHANGE them if you want different prompts. (You can also change the ** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) *) const LUA_PROMPT = '> '; LUA_PROMPT2 = '>> '; (* @@ lua_readline defines how to show a prompt and then read a line from @* the standard input. @@ lua_saveline defines how to "save" a read line in a "history". @@ lua_freeline defines how to free a line read by lua_readline. ** CHANGE them if you want to improve this functionality (e.g., by using ** GNU readline and history facilities). *) function lua_readline(L : Plua_State; var b : PChar; p : PChar): Boolean; procedure lua_saveline(L : Plua_State; idx : Integer); procedure lua_freeline(L : Plua_State; b : PChar); (* @@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that @* is, whether we're running lua interactively). ** CHANGE it if you have a better definition for non-POSIX/non-Windows ** systems. */ #include #include #define lua_stdin_is_tty() _isatty(_fileno(stdin)) *) const lua_stdin_is_tty = TRUE; (*****************************************************************************) (* lua.h *) (*****************************************************************************) (* ** $Id: lua.h,v 1.216 2006/01/10 12:50:13 roberto Exp $ ** Lua - An Extensible Extension Language ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) ** See Copyright Notice at the end of this file *) const LUA_VERSION_ = 'Lua 5.1'; LUA_VERSION_NUM = 501; LUA_COPYRIGHT = 'Copyright (C) 1994-2006 Tecgraf, PUC-Rio'; LUA_AUTHORS = 'R. Ierusalimschy, L. H. de Figueiredo & W. Celes'; (* mark for precompiled code (`Lua') *) LUA_SIGNATURE = #27'Lua'; (* option for multiple returns in `lua_pcall' and `lua_call' *) LUA_MULTRET = -1; var (* ** pseudo-indices *) LUA_REGISTRYINDEX: Integer; function lua_upvalueindex(idx : Integer) : Integer; // a marco const (* thread status; 0 is OK *) LUA_YIELD_ = 1; // Note: the ending underscore is needed in Pascal LUA_ERRRUN = 2; LUA_ERRSYNTAX = 3; LUA_ERRMEM = 4; LUA_ERRERR = 5; type // Type for continuation-function contexts lua_KContext = Pointer; // Type for continuation functions lua_KFunction = function(L : Plua_State; status: Integer; ctx: lua_KContext): Integer; cdecl; // Type for C functions registered with Lua lua_CFunction = function(L : Plua_State) : Integer; cdecl; (* ** functions that read/write blocks when loading/dumping Lua chunks *) lua_Reader = function (L : Plua_State; ud : Pointer; sz : Psize_t) : PChar; cdecl; lua_Writer = function (L : Plua_State; const p : Pointer; sz : size_t; ud : Pointer) : Integer; cdecl; (* ** prototype for memory-allocation functions *) lua_Alloc = function (ud, ptr : Pointer; osize, nsize : size_t) : Pointer; cdecl; const (* ** basic types *) LUA_TNONE = -1; LUA_TNIL = 0; LUA_TBOOLEAN = 1; LUA_TLIGHTUSERDATA = 2; LUA_TNUMBER = 3; LUA_TSTRING = 4; LUA_TTABLE = 5; LUA_TFUNCTION = 6; LUA_TUSERDATA = 7; LUA_TTHREAD = 8; (* minimum Lua stack available to a C function *) LUA_MINSTACK = 20; type (* type of numbers in Lua *) lua_Number = LUA_NUMBER_; Plua_Number = ^lua_Number; (* type for integer functions *) lua_Integer = LUA_INTEGER_; (* ** state manipulation *) var lua_newstate: function (f : lua_Alloc; ud : Pointer) : Plua_State; cdecl; lua_close: procedure (L: Plua_State); cdecl; lua_newthread: function (L : Plua_State) : Plua_State; cdecl; lua_atpanic: function (L : Plua_State; panicf : lua_CFunction) : lua_CFunction; cdecl; (* ** basic stack manipulation *) var lua_gettop: function (L : Plua_State) : Integer; cdecl; lua_settop: procedure (L : Plua_State; idx : Integer); cdecl; lua_pushvalue: procedure (L : Plua_State; idx : Integer); cdecl; lua_rotate: procedure (L : Plua_State; idx, n: Integer); cdecl; lua_remove: procedure (L : Plua_State; idx : Integer); cdecl; lua_insert: procedure (L : Plua_State; idx : Integer); cdecl; lua_replace: procedure (L : Plua_State; idx : Integer); cdecl; lua_copy: procedure (L : Plua_State; fromidx, toidx: Integer); cdecl; lua_checkstack: function (L : Plua_State; sz : Integer) : LongBool; cdecl; lua_xmove: procedure (src, dest : Plua_State; n : Integer); cdecl; (* ** access functions (stack -> C) *) lua_isnumber: function (L : Plua_State; idx : Integer) : LongBool; cdecl; lua_isstring: function (L : Plua_State; idx : Integer) : LongBool; cdecl; lua_iscfunction: function (L : Plua_State; idx : Integer) : LongBool; cdecl; lua_isinteger: function (L: Plua_State; idx: Integer) : LongBool; cdecl; lua_isuserdata: function (L : Plua_State; idx : Integer) : LongBool; cdecl; lua_type: function (L : Plua_State; idx : Integer) : Integer; cdecl; lua_typename: function (L : Plua_State; tp : Integer) : PChar; cdecl; lua_equal: function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; lua_rawequal: function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; lua_lessthan: function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; lua_toboolean: function (L : Plua_State; idx : Integer) : LongBool; cdecl; lua_tolstring: function (L : Plua_State; idx : Integer; len : Psize_t) : PChar; cdecl; lua_tocfunction: function (L : Plua_State; idx : Integer) : lua_CFunction; cdecl; lua_touserdata: function (L : Plua_State; idx : Integer) : Pointer; cdecl; lua_tothread: function (L : Plua_State; idx : Integer) : Plua_State; cdecl; lua_topointer: function (L : Plua_State; idx : Integer) : Pointer; cdecl; function lua_tonumber(L : Plua_State; idx : Integer) : lua_Number; function lua_tointeger(L : Plua_State; idx : Integer) : lua_Integer; function lua_objlen(L : Plua_State; idx : Integer) : size_t; (* ** push functions (C -> stack) *) var lua_pushnil: procedure (L : Plua_State); cdecl; lua_pushnumber: procedure (L : Plua_State; n : lua_Number); cdecl; lua_pushlstring: procedure (L : Plua_State; const s : PChar; ls : size_t); cdecl; lua_pushvfstring: function (L : Plua_State; const fmt : PChar; argp : Pointer) : PChar; cdecl; lua_pushfstring: function (L : Plua_State; const fmt : PChar) : PChar; varargs; cdecl; lua_pushcclosure: procedure (L : Plua_State; fn : lua_CFunction; n : Integer); cdecl; lua_pushboolean: procedure (L : Plua_State; b : LongBool); cdecl; lua_pushlightuserdata: procedure (L : Plua_State; p : Pointer); cdecl; lua_pushthread: function (L : Plua_state) : Cardinal; cdecl; procedure lua_pushinteger(L : Plua_State; n : lua_Integer); var (* ** get functions (Lua -> stack) *) lua_gettable: procedure (L : Plua_State ; idx : Integer); cdecl; lua_getfield: procedure (L : Plua_State; idx : Integer; k : PChar); cdecl; lua_rawget: procedure (L : Plua_State; idx : Integer); cdecl; lua_rawgeti: procedure (L : Plua_State; idx, n : Integer); cdecl; lua_createtable: procedure (L : Plua_State; narr, nrec : Integer); cdecl; lua_getmetatable: function (L : Plua_State; objindex : Integer) : LongBool; cdecl; lua_getfenv: procedure (L : Plua_State; idx : Integer); cdecl; (* ** set functions (stack -> Lua) *) lua_settable: procedure (L : Plua_State; idx : Integer); cdecl; lua_setfield: procedure (L : Plua_State; idx : Integer; const k : PChar); cdecl; lua_rawset: procedure (L : Plua_State; idx : Integer); cdecl; lua_rawseti: procedure (L : Plua_State; idx , n: Integer); cdecl; lua_setmetatable: function (L : Plua_State; objindex : Integer): LongBool; cdecl; lua_setfenv: function (L : Plua_State; idx : Integer): LongBool; cdecl; procedure lua_setglobal(L: Plua_State; const name : PAnsiChar); procedure lua_getglobal(L: Plua_State; const name : PAnsiChar); function lua_newuserdata(L : Plua_State; sz : size_t) : Pointer; (* ** `load' and `call' functions (load and run Lua code) *) var lua_call: procedure (L : Plua_State; nargs, nresults : Integer); cdecl; lua_cpcall: function (L : Plua_State; func : lua_CFunction; ud : Pointer) : Integer; cdecl; lua_load: function (L : Plua_State; reader : lua_Reader; dt : Pointer; const chunkname : PChar) : Integer; cdecl; lua_dump: function (L : Plua_State; writer : lua_Writer; data: Pointer) : Integer; cdecl; function lua_pcall(L : Plua_State; nargs, nresults, errfunc : Integer) : Integer; (* ** coroutine functions *) var lua_yield: function (L : Plua_State; nresults : Integer) : Integer; cdecl; lua_status: function (L : Plua_State) : Integer; cdecl; function lua_resume(L : Plua_State; narg : Integer; nresults : PInteger) : Integer; (* ** garbage-collection functions and options *) const LUA_GCSTOP = 0; LUA_GCRESTART = 1; LUA_GCCOLLECT = 2; LUA_GCCOUNT = 3; LUA_GCCOUNTB = 4; LUA_GCSTEP = 5; LUA_GCSETPAUSE = 6; LUA_GCSETSTEPMUL = 7; var lua_gc: function(L : Plua_State; what, data : Integer):Integer; cdecl; (* ** miscellaneous functions *) var lua_error: function (L : Plua_State) : Integer; cdecl; lua_next: function (L : Plua_State; idx : Integer) : Integer; cdecl; lua_concat: procedure (L : Plua_State; n : Integer); cdecl; lua_getallocf: function (L : Plua_State; ud : PPointer) : lua_Alloc; cdecl; lua_setallocf: procedure (L : Plua_State; f : lua_Alloc; ud : Pointer); cdecl; (* ** =============================================================== ** some useful macros ** =============================================================== *) procedure lua_pop(L : Plua_State; n : Integer); procedure lua_newtable(L : Plua_State); procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction); procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction); function lua_strlen(L : Plua_State; idx : Integer) : Integer; function lua_isfunction(L : Plua_State; n : Integer) : Boolean; function lua_istable(L : Plua_State; n : Integer) : Boolean; function lua_islightuserdata(L : Plua_State; n : Integer) : Boolean; function lua_isnil(L : Plua_State; n : Integer) : Boolean; function lua_isboolean(L : Plua_State; n : Integer) : Boolean; function lua_isthread(L : Plua_State; n : Integer) : Boolean; function lua_isnone(L : Plua_State; n : Integer) : Boolean; function lua_isnoneornil(L : Plua_State; n : Integer) : Boolean; procedure lua_pushliteral(L : Plua_State; s : PChar); procedure lua_pushstring(L : Plua_State; const S : PChar); overload; procedure lua_pushstring(L : Plua_State; const S : String); overload; function lua_tostring(L : Plua_State; idx : Integer) : String; function lua_tocstring(L : Plua_State; idx : Integer) : PAnsiChar; (* ** compatibility macros and functions *) function lua_open : Plua_State; procedure lua_getregistry(L : Plua_State); function lua_getgccount(L : Plua_State) : Integer; type lua_Chuckreader = type lua_Reader; lua_Chuckwriter = type lua_Writer; (* ====================================================================== *) (* ** {====================================================================== ** Debug API ** ======================================================================= *) (* ** Event codes *) const LUA_HOOKCALL = 0; LUA_HOOKRET = 1; LUA_HOOKLINE = 2; LUA_HOOKCOUNT = 3; LUA_HOOKTAILRET = 4; (* ** Event masks *) LUA_MASKCALL = 1 shl LUA_HOOKCALL; LUA_MASKRET = 1 shl LUA_HOOKRET; LUA_MASKLINE = 1 shl LUA_HOOKLINE; LUA_MASKCOUNT = 1 shl LUA_HOOKCOUNT; type lua_Debug = packed record event : Integer; name : PChar; (* (n) *) namewhat : PChar; (* (n) `global', `local', `field', `method' *) what : PChar; (* (S) `Lua', `C', `main', `tail' *) source : PChar; (* (S) *) currentline : Integer; (* (l) *) nups : Integer; (* (u) number of upvalues *) linedefined : Integer; (* (S) *) short_src : array [0..LUA_IDSIZE-1] of Char; (* (S) *) (* private part *) i_ci : Integer; (* active function *) end; Plua_Debug = ^lua_Debug; (* Functions to be called by the debuger in specific events *) lua_Hook = procedure (L : Plua_State; ar : Plua_Debug); cdecl; var lua_getstack: function (L : Plua_State; level : Integer; ar : Plua_Debug) : Integer; cdecl; lua_getinfo: function (L : Plua_State; const what : PChar; ar: Plua_Debug): Integer; cdecl; lua_getlocal: function (L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; lua_setlocal: function (L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; lua_getupvalue: function (L : Plua_State; funcindex, n : Integer) : PChar; cdecl; lua_setupvalue: function (L : Plua_State; funcindex, n : Integer) : PChar; cdecl; lua_sethook: function (L : Plua_State; func : lua_Hook; mask, count: Integer): Integer; cdecl; {function lua_gethook(L : Plua_State) : lua_Hook; cdecl;} lua_gethookmask: function (L : Plua_State) : Integer; cdecl; lua_gethookcount: function (L : Plua_State) : Integer; cdecl; (*****************************************************************************) (* lualib.h *) (*****************************************************************************) (* ** $Id: lualib.h,v 1.36 2005/12/27 17:12:00 roberto Exp $ ** Lua standard libraries ** See Copyright Notice at the end of this file *) const (* Key to file-handle type *) LUA_FILEHANDLE = 'FILE*'; LUA_COLIBNAME = 'coroutine'; LUA_TABLIBNAME = 'table'; LUA_IOLIBNAME = 'io'; LUA_OSLIBNAME = 'os'; LUA_STRLIBNAME = 'string'; LUA_MATHLIBNAME = 'math'; LUA_DBLIBNAME = 'debug'; LUA_LOADLIBNAME = 'package'; var luaopen_base: function (L : Plua_State) : Integer; cdecl; luaopen_table: function (L : Plua_State) : Integer; cdecl; luaopen_io: function (L : Plua_State) : Integer; cdecl; luaopen_os: function (L : Plua_State) : Integer; cdecl; luaopen_string: function (L : Plua_State) : Integer; cdecl; luaopen_math: function (L : Plua_State) : Integer; cdecl; luaopen_debug: function (L : Plua_State) : Integer; cdecl; luaopen_package: function (L : Plua_State) : Integer; cdecl; luaL_openlibs: procedure (L : Plua_State); cdecl; procedure lua_assert(x : Boolean); // a macro (*****************************************************************************) (* lauxlib.h *) (*****************************************************************************) (* ** $Id: lauxlib.h,v 1.87 2005/12/29 15:32:11 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice at the end of this file. *) // not compatibility with the behavior of setn/getn in Lua 5.0 function luaL_getn(L : Plua_State; idx : Integer) : Integer; procedure luaL_setn(L : Plua_State; i, j : Integer); const LUA_ERRFILE = LUA_ERRERR + 1; type luaL_Reg = packed record name : PChar; func : lua_CFunction; end; PluaL_Reg = ^luaL_Reg; var luaL_openlib: procedure (L : Plua_State; const libname : PChar; const lr : PluaL_Reg; nup : Integer); cdecl; luaL_register: procedure (L : Plua_State; const libname : PChar; const lr : PluaL_Reg); cdecl; luaL_getmetafield: function (L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; luaL_callmeta: function (L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; luaL_typerror: function (L : Plua_State; narg : Integer; const tname : PChar) : Integer; cdecl; luaL_argerror: function (L : Plua_State; numarg : Integer; const extramsg : PChar) : Integer; cdecl; luaL_checklstring: function (L : Plua_State; numArg : Integer; ls : Psize_t) : PChar; cdecl; luaL_optlstring: function (L : Plua_State; numArg : Integer; const def: PChar; ls: Psize_t) : PChar; cdecl; luaL_checknumber: function (L : Plua_State; numArg : Integer) : lua_Number; cdecl; luaL_optnumber: function (L : Plua_State; nArg : Integer; def : lua_Number) : lua_Number; cdecl; luaL_checkstack: procedure (L : Plua_State; sz : Integer; const msg : PChar); cdecl; luaL_checktype: procedure (L : Plua_State; narg, t : Integer); cdecl; luaL_checkany: procedure (L : Plua_State; narg : Integer); cdecl; luaL_newmetatable: function (L : Plua_State; const tname : PChar) : Integer; cdecl; luaL_checkudata: function (L : Plua_State; ud : Integer; const tname : PChar) : Pointer; cdecl; luaL_where: procedure (L : Plua_State; lvl : Integer); cdecl; luaL_error: function (L : Plua_State; const fmt : PChar) : Integer; varargs; cdecl; luaL_checkoption: function (L : Plua_State; narg : Integer; const def : PChar; const lst : array of PChar) : Integer; cdecl; luaL_ref: function (L : Plua_State; t : Integer) : Integer; cdecl; luaL_unref: procedure (L : Plua_State; t, ref : Integer); cdecl; luaL_loadfilex : function (L: Plua_State; const filename, mode: PAnsiChar): Integer; cdecl; luaL_loadbuffer: function (L : Plua_State; const buff : PChar; sz : size_t; const name: PChar) : Integer; cdecl; luaL_loadstring: function (L : Plua_State; const s : Pchar) : Integer; cdecl; luaL_newstate: function : Plua_State; cdecl; luaL_gsub: function (L : Plua_State; const s, p, r : PChar) : PChar; cdecl; luaL_findtable: function (L : Plua_State; idx : Integer; const fname : PChar; szhint : Integer) : PChar; cdecl; luaL_execresult: function (L: Plua_State; stat: Integer): Integer; cdecl; function luaL_loadfile(L: Plua_State; const filename: PAnsiChar): Integer; function luaL_checkinteger(L : Plua_State; numArg : Integer) : lua_Integer; function luaL_optinteger(L : Plua_State; nArg : Integer; def : lua_Integer) : lua_Integer; (* ** =============================================================== ** some useful macros ** =============================================================== *) function luaL_argcheck(L : Plua_State; cond : Boolean; numarg : Integer; extramsg : PChar): Integer; function luaL_checkstring(L : Plua_State; n : Integer) : PChar; function luaL_optstring(L : Plua_State; n : Integer; d : PChar) : PChar; function luaL_checkint(L : Plua_State; n : Integer) : Integer; function luaL_optint(L : Plua_State; n, d : Integer): Integer; function luaL_checklong(L : Plua_State; n : LongInt) : LongInt; function luaL_optlong(L : Plua_State; n : Integer; d : LongInt) : LongInt; function luaL_typename(L : Plua_State; idx : Integer) : PChar; function luaL_dofile(L : Plua_State; fn : PChar) : Integer; function luaL_dostring(L : Plua_State; s : PChar) : Integer; procedure luaL_getmetatable(L : Plua_State; n : PChar); (* not implemented yet #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) *) (* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= *) const LUAL_BUFFERSIZE_OLD = 1024; // Lua 5.1, LuaJIT LUAL_BUFFERSIZE_NEW = 8192; // Lua 5.2, Lua 5.3 type luaL_Buffer = packed record case Boolean of False: ( p : PAnsiChar; (* current position in buffer *) lvl : Integer; (* number of strings in the stack (level) *) L : Plua_State; buffer : array [0..(LUAL_BUFFERSIZE_OLD - 1)] of AnsiChar; ); True: ( b: PAnsiChar; //* buffer address */ size: size_t; //* buffer size */ n: size_t; //* number of characters in buffer */ LL: Plua_State; initb: array[0..(LUAL_BUFFERSIZE_NEW - 1)] of AnsiChar; //* initial buffer */ ); end; PluaL_Buffer = ^luaL_Buffer; procedure luaL_addchar(B : PluaL_Buffer; c : Char); procedure luaL_addsize(B : PluaL_Buffer; n : Integer); var luaL_buffinit: procedure (L : Plua_State; B : PluaL_Buffer); cdecl; luaL_addlstring: procedure (B : PluaL_Buffer; const s : PChar; ls : size_t); cdecl; luaL_addstring: procedure (B : PluaL_Buffer; const s : PChar); cdecl; luaL_addvalue: procedure (B : PluaL_Buffer); cdecl; luaL_pushresult: procedure (B : PluaL_Buffer); cdecl; function luaL_prepbuffer(B: PluaL_Buffer): PAnsiChar; cdecl; (* ====================================================== *) (* compatibility with ref system *) (* pre-defined references *) const LUA_NOREF = -2; LUA_REFNIL = -1; function lua_ref(L : Plua_State; lock : Boolean) : Integer; procedure lua_unref(L : Plua_State; ref : Integer); procedure lua_getref(L : Plua_State; ref : Integer); (******************************************************************************) (******************************************************************************) (******************************************************************************) var LuaLibD: TLibHandle = NilHandle; luaJIT: Boolean; implementation uses SysUtils {$IFDEF UNIX} , dl {$ENDIF} ; const (* ** pseudo-indices *) LUA_GLOBALSINDEX = -10002; var LUA_UPVALUEINDEX_: Integer; var LUA_VERSION_DYN: Integer; var lua_version: function (L: Plua_State): Plua_Number; cdecl; luaL_prepbuffer_: function (B : PluaL_Buffer) : PAnsiChar; cdecl; lua_rawlen: function (L : Plua_State; idx : Integer): size_t; cdecl; lua_pushstring_: procedure (L : Plua_State; const s : PChar); cdecl; lua_objlen_: function (L : Plua_State; idx : Integer) : size_t; cdecl; lua_setglobal_: procedure (L: Plua_State; const name: PAnsiChar); cdecl; lua_newuserdata_: function (L : Plua_State; sz : size_t) : Pointer; cdecl; luaL_prepbuffsize: function (B: PluaL_Buffer; sz: size_t): PAnsiChar; cdecl; lua_getglobal_: function (L: Plua_State; const name: PAnsiChar): Integer; cdecl; lua_tonumber_: function (L : Plua_State; idx : Integer) : lua_Number; cdecl; luaL_loadfile_: function (L: Plua_State; const filename: PAnsiChar): Integer; cdecl; lua_newuserdatauv: function(L: Plua_State; sz: size_t; nuvalue: Integer): Pointer; cdecl; lua_tonumberx: function(L: Plua_State; idx: Integer; isnum: PLongBool): lua_Number; cdecl; luaL_loadfilex_: function (L: Plua_State; const filename, mode: PAnsiChar): Integer; cdecl; lua_pcall_: function (L : Plua_State; nargs, nresults, errfunc : Integer) : Integer; cdecl; lua_pcallk: function(L: Plua_State; nargs, nresults, errfunc: Integer; ctx: lua_KContext; k: lua_KFunction): Integer; cdecl; var lua_tointeger_: function (L : Plua_State; idx : Integer) : IntPtr; cdecl; lua_tointegerx64: function(L: Plua_State; idx: Integer; isnum: PLongBool): Int64; cdecl; lua_tointegerxPtr: function(L: Plua_State; idx: Integer; isnum: PLongBool): IntPtr; cdecl; lua_pushinteger64: procedure (L : Plua_State; n : Int64); cdecl; lua_pushintegerPtr: procedure (L : Plua_State; n : IntPtr); cdecl; luaL_checkinteger64: function (L : Plua_State; numArg : Integer) : Int64; cdecl; luaL_checkintegerPtr: function (L : Plua_State; numArg : Integer) : IntPtr; cdecl; luaL_optinteger64: function (L : Plua_State; nArg : Integer; def : Int64) : Int64; cdecl; luaL_optintegerPtr: function (L : Plua_State; nArg : Integer; def : IntPtr) : IntPtr; cdecl; lua_resume51: function (L : Plua_State; narg : Integer) : Integer; cdecl; lua_resume54: function (L : Plua_State; narg : Integer; nresults : PInteger) : Integer; cdecl; procedure lua_insert53(L : Plua_State; idx : Integer); cdecl; begin lua_rotate(L, idx, 1); end; procedure lua_remove53(L : Plua_State; idx : Integer); cdecl; begin lua_rotate(L, idx, -1); lua_pop(L, 1); end; procedure lua_replace53(L : Plua_State; idx : Integer); cdecl; begin lua_copy(L, -1, idx); lua_pop(L, 1); end; procedure UnloadLuaLib; begin if LuaLibD <> NilHandle then begin FreeLibrary(LuaLibD); LuaLibD := NilHandle; end; end; function IsLuaLibLoaded: Boolean; begin Result:= (LuaLibD <> NilHandle); end; function LuaVersion: Integer; var lua_version_ex: function(L: Plua_State): lua_Number; cdecl; begin // Lua 5.1 if (@lua_version = nil) then Result:= LUA_VERSION_NUM else begin // Lua 5.2 - 5.3 if (@lua_newuserdatauv = nil) then begin Result:= Trunc(lua_version(nil)^); end // Lua >= 5.4 else begin @lua_version_ex:= @lua_version; Result:= Trunc(lua_version_ex(nil)); end; end; end; function LoadLuaLib(FileName: String): Boolean; const LUA_REGISTRYINDEX_OLD = -10000; // Lua 5.1, LuaJIT LUA_REGISTRYINDEX_NEW = -1001000; // Lua 5.2, Lua 5.3 begin {$IF DEFINED(UNIX)} LuaLibD:= TLibHandle(dlopen(PAnsiChar(FileName), RTLD_NOW or RTLD_GLOBAL)); {$ELSE} LuaLibD:= LoadLibrary(FileName); {$ENDIF} Result:= (LuaLibD <> NilHandle); if not Result then Exit; @lua_newstate := GetProcAddress(LuaLibD, 'lua_newstate'); @lua_close := GetProcAddress(LuaLibD, 'lua_close'); @lua_newthread := GetProcAddress(LuaLibD, 'lua_newthread'); @lua_atpanic := GetProcAddress(LuaLibD, 'lua_atpanic'); @luaL_buffinit := GetProcAddress(LuaLibD, 'luaL_buffinit'); @luaL_prepbuffer_ := GetProcAddress(LuaLibD, 'luaL_prepbuffer'); @luaL_addlstring := GetProcAddress(LuaLibD, 'luaL_addlstring'); @luaL_addstring := GetProcAddress(LuaLibD, 'luaL_addstring'); @luaL_addvalue := GetProcAddress(LuaLibD, 'luaL_addvalue'); @luaL_pushresult := GetProcAddress(LuaLibD, 'luaL_pushresult'); @luaL_openlib := GetProcAddress(LuaLibD, 'luaL_openlib'); @luaL_register := GetProcAddress(LuaLibD, 'luaL_register'); @luaL_getmetafield := GetProcAddress(LuaLibD, 'luaL_getmetafield'); @luaL_callmeta := GetProcAddress(LuaLibD, 'luaL_callmeta'); @luaL_typerror := GetProcAddress(LuaLibD, 'luaL_typerror'); @luaL_argerror := GetProcAddress(LuaLibD, 'luaL_argerror'); @luaL_checklstring := GetProcAddress(LuaLibD, 'luaL_checklstring'); @luaL_optlstring := GetProcAddress(LuaLibD, 'luaL_optlstring'); @luaL_checknumber := GetProcAddress(LuaLibD, 'luaL_checknumber'); @luaL_optnumber := GetProcAddress(LuaLibD, 'luaL_optnumber'); @luaL_checkstack := GetProcAddress(LuaLibD, 'luaL_checkstack'); @luaL_checktype := GetProcAddress(LuaLibD, 'luaL_checktype'); @luaL_checkany := GetProcAddress(LuaLibD, 'luaL_checkany'); @luaL_newmetatable := GetProcAddress(LuaLibD, 'luaL_newmetatable'); @luaL_checkudata := GetProcAddress(LuaLibD, 'luaL_checkudata'); @luaL_where := GetProcAddress(LuaLibD, 'luaL_where'); @luaL_error := GetProcAddress(LuaLibD, 'luaL_error'); @luaL_checkoption := GetProcAddress(LuaLibD, 'luaL_checkoption'); @luaL_ref := GetProcAddress(LuaLibD, 'luaL_ref'); @luaL_unref := GetProcAddress(LuaLibD, 'luaL_unref'); @luaL_loadfile_ := GetProcAddress(LuaLibD, 'luaL_loadfile'); @luaL_loadbuffer := GetProcAddress(LuaLibD, 'luaL_loadbuffer'); @luaL_loadstring := GetProcAddress(LuaLibD, 'luaL_loadstring'); @luaL_newstate := GetProcAddress(LuaLibD, 'luaL_newstate'); @luaL_gsub := GetProcAddress(LuaLibD, 'luaL_gsub'); @luaL_findtable := GetProcAddress(LuaLibD, 'luaL_findtable'); @luaL_execresult := GetProcAddress(LuaLibD, 'luaL_execresult'); @luaopen_base := GetProcAddress(LuaLibD, 'luaopen_base'); @luaopen_table := GetProcAddress(LuaLibD, 'luaopen_table'); @luaopen_io := GetProcAddress(LuaLibD, 'luaopen_io'); @luaopen_os := GetProcAddress(LuaLibD, 'luaopen_os'); @luaopen_string := GetProcAddress(LuaLibD, 'luaopen_string'); @luaopen_math := GetProcAddress(LuaLibD, 'luaopen_math'); @luaopen_debug := GetProcAddress(LuaLibD, 'luaopen_debug'); @luaopen_package := GetProcAddress(LuaLibD, 'luaopen_package'); @luaL_openlibs := GetProcAddress(LuaLibD, 'luaL_openlibs'); @lua_getstack := GetProcAddress(LuaLibD, 'lua_getstack'); @lua_getinfo := GetProcAddress(LuaLibD, 'lua_getinfo'); @lua_getlocal := GetProcAddress(LuaLibD, 'lua_getlocal'); @lua_setlocal := GetProcAddress(LuaLibD, 'lua_setlocal'); @lua_getupvalue := GetProcAddress(LuaLibD, 'lua_getupvalue'); @lua_setupvalue := GetProcAddress(LuaLibD, 'lua_setupvalue'); @lua_sethook := GetProcAddress(LuaLibD, 'lua_sethook'); // function lua_gethook(L : Plua_State) : lua_Hook; cdecl; @lua_gethookmask := GetProcAddress(LuaLibD, 'lua_gethookmask'); @lua_gethookcount := GetProcAddress(LuaLibD, 'lua_gethookcount'); @lua_error := GetProcAddress(LuaLibD, 'lua_error'); @lua_next := GetProcAddress(LuaLibD, 'lua_next'); @lua_concat := GetProcAddress(LuaLibD, 'lua_concat'); @lua_getallocf := GetProcAddress(LuaLibD, 'lua_getallocf'); @lua_setallocf := GetProcAddress(LuaLibD, 'lua_setallocf'); @lua_gc := GetProcAddress(LuaLibD, 'lua_gc'); @lua_yield := GetProcAddress(LuaLibD, 'lua_yield'); @lua_status := GetProcAddress(LuaLibD, 'lua_status'); @lua_call := GetProcAddress(LuaLibD, 'lua_call'); @lua_pcall_ := GetProcAddress(LuaLibD, 'lua_pcall'); @lua_cpcall := GetProcAddress(LuaLibD, 'lua_cpcall'); @lua_load := GetProcAddress(LuaLibD, 'lua_load'); @lua_dump := GetProcAddress(LuaLibD, 'lua_dump'); @lua_settable := GetProcAddress(LuaLibD, 'lua_settable'); @lua_setfield := GetProcAddress(LuaLibD, 'lua_setfield'); @lua_rawset := GetProcAddress(LuaLibD, 'lua_rawset'); @lua_rawseti := GetProcAddress(LuaLibD, 'lua_rawseti'); @lua_setmetatable := GetProcAddress(LuaLibD, 'lua_setmetatable'); @lua_setfenv := GetProcAddress(LuaLibD, 'lua_setfenv'); @lua_gettable := GetProcAddress(LuaLibD, 'lua_gettable'); @lua_getfield := GetProcAddress(LuaLibD, 'lua_getfield'); @lua_rawget := GetProcAddress(LuaLibD, 'lua_rawget'); @lua_rawgeti := GetProcAddress(LuaLibD, 'lua_rawgeti'); @lua_createtable := GetProcAddress(LuaLibD, 'lua_createtable'); @lua_newuserdata_ := GetProcAddress(LuaLibD, 'lua_newuserdata'); @lua_getmetatable := GetProcAddress(LuaLibD, 'lua_getmetatable'); @lua_getfenv := GetProcAddress(LuaLibD, 'lua_getfenv'); @lua_pushnil := GetProcAddress(LuaLibD, 'lua_pushnil'); @lua_pushnumber := GetProcAddress(LuaLibD, 'lua_pushnumber'); @lua_pushlstring := GetProcAddress(LuaLibD, 'lua_pushlstring'); @lua_pushstring_ := GetProcAddress(LuaLibD, 'lua_pushstring'); @lua_pushvfstring := GetProcAddress(LuaLibD, 'lua_pushvfstring'); @lua_pushfstring := GetProcAddress(LuaLibD, 'lua_pushfstring'); @lua_pushcclosure := GetProcAddress(LuaLibD, 'lua_pushcclosure'); @lua_pushboolean := GetProcAddress(LuaLibD, 'lua_pushboolean'); @lua_pushlightuserdata := GetProcAddress(LuaLibD, 'lua_pushlightuserdata'); @lua_pushthread := GetProcAddress(LuaLibD, 'lua_pushthread'); @lua_isnumber := GetProcAddress(LuaLibD, 'lua_isnumber'); @lua_isstring := GetProcAddress(LuaLibD, 'lua_isstring'); @lua_iscfunction := GetProcAddress(LuaLibD, 'lua_iscfunction'); @lua_isinteger :=GetProcAddress(LuaLibD, 'lua_isinteger'); @lua_isuserdata := GetProcAddress(LuaLibD, 'lua_isuserdata'); @lua_type := GetProcAddress(LuaLibD, 'lua_type'); @lua_typename := GetProcAddress(LuaLibD, 'lua_typename'); @lua_equal := GetProcAddress(LuaLibD, 'lua_equal'); @lua_rawequal := GetProcAddress(LuaLibD, 'lua_rawequal'); @lua_lessthan := GetProcAddress(LuaLibD, 'lua_lessthan'); @lua_tonumber_ := GetProcAddress(LuaLibD, 'lua_tonumber'); @lua_tointeger_ := GetProcAddress(LuaLibD, 'lua_tointeger'); @lua_toboolean := GetProcAddress(LuaLibD, 'lua_toboolean'); @lua_tolstring := GetProcAddress(LuaLibD, 'lua_tolstring'); @lua_objlen_ := GetProcAddress(LuaLibD, 'lua_objlen'); @lua_tocfunction := GetProcAddress(LuaLibD, 'lua_tocfunction'); @lua_touserdata := GetProcAddress(LuaLibD, 'lua_touserdata'); @lua_tothread := GetProcAddress(LuaLibD, 'lua_tothread'); @lua_topointer := GetProcAddress(LuaLibD, 'lua_topointer'); @lua_gettop := GetProcAddress(LuaLibD, 'lua_gettop'); @lua_settop := GetProcAddress(LuaLibD, 'lua_settop'); @lua_pushvalue := GetProcAddress(LuaLibD, 'lua_pushvalue'); @lua_checkstack := GetProcAddress(LuaLibD, 'lua_checkstack'); @lua_xmove := GetProcAddress(LuaLibD, 'lua_xmove'); // Lua 5.2 - 5.4 specific stuff @lua_rawlen := GetProcAddress(LuaLibD, 'lua_rawlen'); @lua_pcallk := GetProcAddress(LuaLibD, 'lua_pcallk'); @lua_version := GetProcAddress(LuaLibD, 'lua_version'); @lua_tonumberx := GetProcAddress(LuaLibD, 'lua_tonumberx'); @lua_setglobal_ := GetProcAddress(LuaLibD, 'lua_setglobal'); @lua_getglobal_ := GetProcAddress(LuaLibD, 'lua_getglobal'); @luaL_loadfilex_ := GetProcAddress(LuaLibD, 'luaL_loadfilex'); @luaL_prepbuffsize := GetProcAddress(LuaLibD, 'luaL_prepbuffsize'); @lua_newuserdatauv := GetProcAddress(LuaLibD, 'lua_newuserdatauv'); // luaJIT specific stuff luaJIT := GetProcAddress(LuaLibD, 'luaJIT_setmode') <> nil; LUA_VERSION_DYN:= LuaVersion; // Determine pseudo-indices values if (LUA_VERSION_DYN > LUA_VERSION_NUM) then begin LUAL_BUFFERSIZE := LUAL_BUFFERSIZE_NEW; LUA_UPVALUEINDEX_:= LUA_REGISTRYINDEX_NEW; LUA_REGISTRYINDEX:= LUA_REGISTRYINDEX_NEW; end else begin LUAL_BUFFERSIZE := LUAL_BUFFERSIZE_OLD; LUA_UPVALUEINDEX_:= LUA_GLOBALSINDEX; LUA_REGISTRYINDEX:= LUA_REGISTRYINDEX_OLD; end; if (LUA_VERSION_DYN >= 502) then begin @lua_copy := GetProcAddress(LuaLibD, 'lua_copy'); end; if (LUA_VERSION_DYN >= 503) then begin @lua_insert := @lua_insert53; @lua_remove := @lua_remove53; @lua_replace := @lua_replace53; @lua_rotate := GetProcAddress(LuaLibD, 'lua_rotate'); end else begin @lua_remove := GetProcAddress(LuaLibD, 'lua_remove'); @lua_insert := GetProcAddress(LuaLibD, 'lua_insert'); @lua_replace := GetProcAddress(LuaLibD, 'lua_replace'); end; // Determine integer type if (LUA_VERSION_DYN >= 503) then begin @lua_pushinteger64 := GetProcAddress(LuaLibD, 'lua_pushinteger'); @luaL_checkinteger64 := GetProcAddress(LuaLibD, 'luaL_checkinteger'); @luaL_optinteger64 := GetProcAddress(LuaLibD, 'luaL_optinteger'); @lua_tointegerx64 := GetProcAddress(LuaLibD, 'lua_tointegerx'); end else begin @lua_pushintegerPtr := GetProcAddress(LuaLibD, 'lua_pushinteger'); @luaL_checkintegerPtr := GetProcAddress(LuaLibD, 'luaL_checkinteger'); @luaL_optintegerPtr := GetProcAddress(LuaLibD, 'luaL_optinteger'); @lua_tointegerxPtr := GetProcAddress(LuaLibD, 'lua_tointegerx'); end; if (LUA_VERSION_DYN >= 504) then @lua_resume54 := GetProcAddress(LuaLibD, 'lua_resume') else begin @lua_resume51 := GetProcAddress(LuaLibD, 'lua_resume'); end; end; (*****************************************************************************) (* luaconfig.h *) (*****************************************************************************) function lua_readline(L : Plua_State; var b : PChar; p : PChar): Boolean; var s : AnsiString; begin Write(p); // show prompt ReadLn(s); // get line b := PChar(s); // and return it lua_readline := (b[0] <> #4); // test for ctrl-D end; procedure lua_saveline(L : Plua_State; idx : Integer); begin end; procedure lua_freeline(L : Plua_State; b : PChar); begin end; (*****************************************************************************) (* lua.h *) (*****************************************************************************) function lua_upvalueindex(idx : Integer) : Integer; begin lua_upvalueindex := LUA_UPVALUEINDEX_ - idx; end; procedure lua_pop(L : Plua_State; n : Integer); begin lua_settop(L, -n - 1); end; procedure lua_newtable(L : Plua_State); begin lua_createtable(L, 0, 0); end; procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction); begin lua_pushcfunction(L, f); lua_setglobal(L, n); end; procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction); begin lua_pushcclosure(L, f, 0); end; function lua_strlen(L : Plua_State; idx : Integer) : Integer; begin lua_strlen := lua_objlen(L, idx); end; function lua_isfunction(L : Plua_State; n : Integer) : Boolean; begin lua_isfunction := lua_type(L, n) = LUA_TFUNCTION; end; function lua_istable(L : Plua_State; n : Integer) : Boolean; begin lua_istable := lua_type(L, n) = LUA_TTABLE; end; function lua_islightuserdata(L : Plua_State; n : Integer) : Boolean; begin lua_islightuserdata := lua_type(L, n) = LUA_TLIGHTUSERDATA; end; function lua_isnil(L : Plua_State; n : Integer) : Boolean; begin lua_isnil := lua_type(L, n) = LUA_TNIL; end; function lua_isboolean(L : Plua_State; n : Integer) : Boolean; begin lua_isboolean := lua_type(L, n) = LUA_TBOOLEAN; end; function lua_isthread(L : Plua_State; n : Integer) : Boolean; begin lua_isthread := lua_type(L, n) = LUA_TTHREAD; end; function lua_isnone(L : Plua_State; n : Integer) : Boolean; begin lua_isnone := lua_type(L, n) = LUA_TNONE; end; function lua_isnoneornil(L : Plua_State; n : Integer) : Boolean; begin lua_isnoneornil := lua_type(L, n) <= 0; end; procedure lua_pushliteral(L : Plua_State; s : PChar); begin lua_pushlstring(L, s, StrLen(s)); end; procedure lua_pushstring(L: Plua_State; const S: PChar); inline; begin lua_pushstring_(L, S); end; procedure lua_pushstring(L: Plua_State; const S: String); inline; begin lua_pushlstring(L, PAnsiChar(S), Length(S)); end; function lua_tonumber(L: Plua_State; idx: Integer): lua_Number; begin if Assigned(lua_tonumberx) then Result:= lua_tonumberx(L, idx, nil) else Result:= lua_tonumber_(L, idx); end; function lua_tointeger(L: Plua_State; idx: Integer): lua_Integer; begin if Assigned(lua_tointegerx64) then Result:= lua_tointegerx64(L, idx, nil) else if Assigned(lua_tointegerxPtr) then Result:= lua_tointegerxPtr(L, idx, nil) else Result:= lua_tointeger_(L, idx); end; function lua_objlen(L: Plua_State; idx: Integer): size_t; begin if Assigned(lua_rawlen) then Result:= lua_rawlen(L, idx) else Result:= lua_objlen_(L, idx); end; procedure lua_pushinteger(L: Plua_State; n: lua_Integer); begin if Assigned(lua_pushinteger64) then lua_pushinteger64(L, n) else lua_pushintegerPtr(L, IntPtr(n)); end; procedure lua_setglobal(L: Plua_State; const name: PAnsiChar); begin if Assigned(lua_setglobal_) then lua_setglobal_(L, name) else lua_setfield(L, LUA_GLOBALSINDEX, name); end; procedure lua_getglobal(L: Plua_State; const name: PAnsiChar); begin if Assigned(lua_getglobal_) then lua_getglobal_(L, name) else lua_getfield(L, LUA_GLOBALSINDEX, name); end; function lua_newuserdata(L : Plua_State; sz : size_t) : Pointer; begin if Assigned(lua_newuserdatauv) then Result:= lua_newuserdatauv(L, sz, 1) else begin Result:= lua_newuserdata_(L, sz); end; end; function lua_tostring(L : Plua_State; idx : Integer) : String; var N: size_t; begin SetString(Result, lua_tolstring(L, idx, @N), N); end; function lua_tocstring(L : Plua_State; idx : Integer) : PAnsiChar; begin lua_tocstring := lua_tolstring(L, idx, nil); end; function lua_open : Plua_State; begin lua_open := luaL_newstate(); end; procedure lua_getregistry(L : Plua_State); begin lua_pushvalue(L, LUA_REGISTRYINDEX); end; function lua_getgccount(L : Plua_State) : Integer; begin lua_getgccount := lua_gc(L, LUA_GCCOUNT, 0); end; function lua_pcall(L: Plua_State; nargs, nresults, errfunc: Integer): Integer; begin if Assigned(lua_pcallk) then Result:= lua_pcallk(L, nargs, nresults, errfunc, nil, nil) else Result:= lua_pcall_(L, nargs, nresults, errfunc); end; function lua_resume(L: Plua_State; narg: Integer; nresults: PInteger): Integer; begin if Assigned(lua_resume54) then Result:= lua_resume54(L, narg, nresults) else begin nresults := nil; Result:= lua_resume51(L, narg); end; end; (*****************************************************************************) (* lualib.h *) (*****************************************************************************) procedure lua_assert(x : Boolean); begin end; (*****************************************************************************) (* lauxlib.h n *) (*****************************************************************************) function luaL_getn(L : Plua_State; idx : Integer) : Integer; begin luaL_getn := lua_objlen(L, idx); end; procedure luaL_setn(L: Plua_State; i, j: Integer); begin (* no op *) end; function luaL_argcheck(L : Plua_State; cond : Boolean; numarg : Integer; extramsg : PChar): Integer; begin if not cond then luaL_argcheck := luaL_argerror(L, numarg, extramsg) else luaL_argcheck := 0; end; function luaL_checkstring(L : Plua_State; n : Integer) : PChar; begin luaL_checkstring := luaL_checklstring(L, n, nil); end; function luaL_optstring(L : Plua_State; n : Integer; d : PChar) : PChar; begin luaL_optstring := luaL_optlstring(L, n, d, nil); end; function luaL_checkint(L : Plua_State; n : Integer) : Integer; begin luaL_checkint := luaL_checkinteger(L, n); end; function luaL_optint(L : Plua_State; n, d : Integer): Integer; begin luaL_optint := luaL_optinteger(L, n, d); end; function luaL_checklong(L : Plua_State; n : LongInt) : LongInt; begin luaL_checklong := luaL_checkinteger(L, n); end; function luaL_optlong(L : Plua_State; n : Integer; d : LongInt) : LongInt; begin luaL_optlong := luaL_optinteger(L, n, d); end; function luaL_typename(L : Plua_State; idx : Integer) : PChar; begin luaL_typename := lua_typename( L, lua_type(L, idx) ); end; function luaL_loadfile(L: Plua_State; const filename: PAnsiChar): Integer; begin if Assigned(luaL_loadfilex_) then Result:= luaL_loadfilex_(L, filename, nil) else Result:= luaL_loadfile_(L, filename); end; function luaL_checkinteger(L: Plua_State; numArg: Integer): lua_Integer; begin if Assigned(luaL_checkinteger64) then Result:= luaL_checkinteger64(L, numArg) else Result:= luaL_checkintegerPtr(L, numArg); end; function luaL_optinteger(L: Plua_State; nArg: Integer; def: lua_Integer): lua_Integer; begin if Assigned(luaL_optinteger64) then Result:= luaL_optinteger64(L, nArg, def) else Result:= luaL_optintegerPtr(L, nArg, IntPtr(def)); end; function luaL_dofile(L : Plua_State; fn : PChar) : Integer; Var Res : Integer; begin // WC 2007\03\22 - Updated for Delphi Res := luaL_loadfile(L, fn); if Res = 0 then Res := lua_pcall(L, 0, 0, 0); Result := Res; end; function luaL_dostring(L : Plua_State; s : PChar) : Integer; Var Res : Integer; begin // WC 2007\03\22 - Updated for Delphi Res := luaL_loadstring(L, s); if Res = 0 then Res := lua_pcall(L, 0, 0, 0); Result := Res; end; procedure luaL_getmetatable(L : Plua_State; n : PChar); begin lua_getfield(L, LUA_REGISTRYINDEX, n); end; procedure luaL_addchar(B : PluaL_Buffer; c : Char); begin if LUA_VERSION_DYN > LUA_VERSION_NUM then begin if not (B^.n < B^.size) then luaL_prepbuffsize(B, 1); B^.b[B^.n] := c; Inc(B^.n); end else begin if not (B^.p < B^.buffer + LUAL_BUFFERSIZE) then luaL_prepbuffer_(B); B^.p^ := c; Inc(B^.p); end; end; procedure luaL_addsize(B : PluaL_Buffer; n : Integer); begin if LUA_VERSION_DYN > LUA_VERSION_NUM then Inc(B^.n, n) else begin Inc(B^.p, n); end; end; function luaL_prepbuffer(B: PluaL_Buffer): PAnsiChar; cdecl; begin if Assigned(luaL_prepbuffsize) then Result := luaL_prepbuffsize(B, LUAL_BUFFERSIZE) else Result := luaL_prepbuffer_(B); end; function lua_ref(L : Plua_State; lock : Boolean) : Integer; begin if lock then lua_ref := luaL_ref(L, LUA_REGISTRYINDEX) else begin lua_pushstring(L, 'unlocked references are obsolete'); lua_error(L); lua_ref := 0; end; end; procedure lua_unref(L : Plua_State; ref : Integer); begin luaL_unref(L, LUA_REGISTRYINDEX, ref); end; procedure lua_getref(L : Plua_State; ref : Integer); begin lua_rawgeti(L, LUA_REGISTRYINDEX, ref); end; (****************************************************************************** * Original copyright for the lua source and headers: * 1994-2004 Tecgraf, PUC-Rio. * www.lua.org. * * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ******************************************************************************) end. doublecmd-1.1.30/src/platform/git2revisioninc.exe.cmd0000644000175000001440000000136515104114162021570 0ustar alexxusers@echo off if not exist "%1" ( md "%1" ) set REVISION_TXT="%1\revision.txt" set REVISION_INC="%1\dcrevision.inc" del /Q %REVISION_TXT% 2> nul del /Q %REVISION_INC% 2> nul copy ..\units\dcrevision.inc %REVISION_INC% > nul git -C %1 rev-list --count 3e11343..HEAD > %REVISION_TXT% IF ERRORLEVEL 1 goto EXIT set /P REVISION=<%REVISION_TXT% echo %REVISION% | find "fatal:" > nul IF NOT ERRORLEVEL 1 goto EXIT git -C %1 rev-parse --short HEAD > %REVISION_TXT% IF ERRORLEVEL 1 goto EXIT set /P COMMIT=<%REVISION_TXT% echo // Created by Git2RevisionInc> %REVISION_INC% echo const dcRevision = '%REVISION%';>> %REVISION_INC% echo const dcCommit = '%COMMIT%';>> %REVISION_INC% :EXIT echo Git revision %REVISION% %COMMIT%doublecmd-1.1.30/src/platform/git2revisioninc.cmd0000755000175000001440000000075415104114162021014 0ustar alexxusers#!/bin/sh mkdir -p $1 export REVISION_INC=$1/dcrevision.inc rm -f $REVISION_INC cp ../units/dcrevision.inc $REVISION_INC export REVISION=$(git -C $1 rev-list --count 3e11343..HEAD) export COMMIT=$(git -C $1 rev-parse --short HEAD) if [ $REVISION ] && [ $COMMIT ]; then echo "// Created by Git2RevisionInc" > $REVISION_INC echo "const dcRevision = '$REVISION';" >> $REVISION_INC echo "const dcCommit = '$COMMIT';" >> $REVISION_INC fi echo "Git revision" $REVISION $COMMIT doublecmd-1.1.30/src/fviewoperations.pas0000644000175000001440000010746015104114162017315 0ustar alexxusersunit fViewOperations; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, StdCtrls, ExtCtrls, LCLType, ComCtrls, Buttons, LCLIntf, Menus, uFileSourceOperation, uOperationsManager, Themes; type TViewBaseItem = class; TViewBaseItemClick = procedure(Item: TViewBaseItem; Button: TMouseButton; Shift: TShiftState; const Pt: TPoint) of object; TViewBaseItemContextMenu = procedure(Item: TViewBaseItem; const Point: TPoint) of object; TViewBaseItemSelected = procedure(Item: TViewBaseItem) of object; TViewOperationsStatusIcon = (vosiPlay, vosiPause, vosiHourglass); { TViewBaseItem } TViewBaseItem = class private FOnClick: TViewBaseItemClick; FOnContextMenu: TViewBaseItemContextMenu; FOnSelected: TViewBaseItemSelected; FTreeNode: TTreeNode; FText: String; FTextRect: TRect; procedure CalculateSizes(Canvas: TCanvas; NeedsStatusIcon, NeedsProgress: Boolean); procedure DrawProgress(Canvas: TCanvas; NodeRect: TRect; Progress: Double); procedure DrawStatusIcon(Canvas: TCanvas; NodeRect: TRect; Icon: TViewOperationsStatusIcon); procedure DrawThemedBackground(Canvas: TCanvas; Element: TThemedTreeview; ARect: TRect); procedure DrawThemedText(Canvas: TCanvas; Element: TThemedTreeview; NodeRect: TRect; Center: Boolean; AText: String); function GetStatusIconRect(NodeRect: TRect): TRect; function GetTextIndent: Integer; virtual; abstract; procedure UpdateView(Canvas: TCanvas); virtual; abstract; public constructor Create(ANode: TTreeNode); virtual; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); virtual; procedure Draw(Canvas: TCanvas; NodeRect: TRect); virtual; abstract; function GetBackgroundColor: TColor; virtual; abstract; procedure KeyDown(var Key: Word; Shift: TShiftState); virtual; procedure Selected; virtual; procedure StartPause; virtual; abstract; procedure Stop; virtual; abstract; property OnClick: TViewBaseItemClick read FOnClick write FOnClick; property OnContextMenu: TViewBaseItemContextMenu read FOnContextMenu write FOnContextMenu; property OnSelected: TViewBaseItemSelected read FOnSelected write FOnSelected; end; { TViewQueueItem } TViewQueueItem = class(TViewBaseItem) private FQueueIdentifier: TOperationsManagerQueueIdentifier; function GetTextIndent: Integer; override; procedure UpdateView(Canvas: TCanvas); override; public constructor Create(ANode: TTreeNode; AQueueId: TOperationsManagerQueueIdentifier); reintroduce; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); override; procedure Draw(Canvas: TCanvas; NodeRect: TRect); override; function GetBackgroundColor: TColor; override; procedure StartPause; override; procedure Stop; override; end; TViewOperationItem = class; { TViewOperationItem } TViewOperationItem = class(TViewBaseItem) private FOperationHandle: TOperationHandle; FProgress: Double; function GetTextIndent: Integer; override; procedure UpdateView(Canvas: TCanvas); override; public constructor Create(ANode: TTreeNode; AOperationHandle: TOperationHandle); reintroduce; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); override; procedure Draw(Canvas: TCanvas; NodeRect: TRect); override; function GetBackgroundColor: TColor; override; procedure StartPause; override; procedure Stop; override; end; { TfrmViewOperations } TfrmViewOperations = class(TForm) btnStop: TBitBtn; btnStartPause: TBitBtn; cbAlwaysOnTop: TCheckBox; lblUseDragDrop: TLabel; mnuCancelQueue: TMenuItem; mnuNewQueue: TMenuItem; mnuCancelOperation: TMenuItem; mnuPutFirstInQueue: TMenuItem; mnuPutLastInQueue: TMenuItem; mnuOperationShowDetached: TMenuItem; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue5: TMenuItem; mnuQueue4: TMenuItem; mnuQueue1: TMenuItem; mnuQueue0: TMenuItem; mnuQueue: TMenuItem; mnuQueueShowDetached: TMenuItem; pnlHeader: TPanel; pmQueuePopup: TPopupMenu; pnlTopHeader: TPanel; pmOperationPopup: TPopupMenu; tbPauseAll: TToggleBox; tvOperations: TTreeView; UpdateTimer: TTimer; procedure btnStopClick(Sender: TObject); procedure cbAlwaysOnTopChange(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure mnuCancelOperationClick(Sender: TObject); procedure mnuCancelQueueClick(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuPutFirstInQueueClick(Sender: TObject); procedure mnuPutLastInQueueClick(Sender: TObject); procedure mnuOperationShowDetachedClick(Sender: TObject); procedure mnuQueueShowDetachedClick(Sender: TObject); procedure OnOperationItemContextMenu(Item: TViewBaseItem; const Point: TPoint); procedure OnOperationItemSelected(Item: TViewBaseItem); procedure OnQueueContextMenu(Item: TViewBaseItem; const Point: TPoint); procedure OnQueueItemSelected(Item: TViewBaseItem); procedure OnUpdateTimer(Sender: TObject); procedure btnStartPauseClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); procedure tbPauseAllChange(Sender: TObject); procedure tvOperationsCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); procedure tvOperationsDeletion(Sender: TObject; Node: TTreeNode); procedure tvOperationsDragDrop(Sender, Source: TObject; X, Y: Integer); procedure tvOperationsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure tvOperationsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tvOperationsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tvOperationsResize(Sender: TObject); procedure tvOperationsSelectionChanged(Sender: TObject); private FDraggedOperation: TOperationHandle; FMenuOperation: TOperationHandle; FMenuQueueIdentifier: TOperationsManagerQueueIdentifier; procedure CreateNodes; function GetFocusedItem: TViewBaseItem; procedure MoveWithinQueue(MoveToTop: Boolean); procedure SetFocusItem(AOperationHandle: TOperationHandle); procedure SetFocusItem(AQueueIdentifier: TOperationsManagerQueueIdentifier); procedure SetNewQueue(Item: TViewOperationItem; NewQueue: TOperationsManagerQueueIdentifier); procedure SetStartPauseCaption(SetPause: Boolean); procedure UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent); procedure UpdateSizes; end; procedure ShowOperationsViewer; procedure ShowOperationsViewer(AOperationHandle: TOperationHandle); procedure ShowOperationsViewer(AQueueIdentifier: TOperationsManagerQueueIdentifier); implementation {$R *.lfm} uses GraphMath, GraphType, Math, fFileOpDlg, uLng, uGlobs, uFileSourceOperationMisc; const ExpandSignSize = 9; StatusIconPlay: array[0..2] of TPoint = ((x: 5; y: 1), (x: 13; y: 9), (x: 5; y: 17)); StatusIconPause1: array[0..3] of TPoint = ((x: 3; y: 2), (x: 3; y: 16), (x: 7; y: 16), (x: 7; y: 2)); StatusIconPause2: array[0..3] of TPoint = ((x: 10; y: 2), (x: 10; y: 16), (x: 14; y: 16), (x: 14; y: 2)); StatusIconHourglass1: array[0..2] of TPoint = ((x: 3; y: 4), (x: 13; y: 4), (x: 8; y: 10)); StatusIconHourglass2: array[0..2] of TPoint = ((x: 8; y: 10), (x: 13; y: 15), (x: 3; y: 15)); StatusIconFrame: TRect = (Left: 0; Top: 0; Right: 18; Bottom: 19); StatusIconRightMargin = 5; ProgressHeight = 16; ProgressWidth = 150; ProgressHorizontalMargin = 5; FreeOperationTextIndent = 3; MarginTopBottom = 2; var frmViewOperations: TfrmViewOperations = nil; ProgressRight: Integer; procedure ShowOperationsViewer; begin if not Assigned(frmViewOperations) then frmViewOperations := TfrmViewOperations.Create(Application); frmViewOperations.ShowOnTop; end; procedure ShowOperationsViewer(AOperationHandle: TOperationHandle); begin ShowOperationsViewer; if AOperationHandle <> InvalidOperationHandle then frmViewOperations.SetFocusItem(AOperationHandle); end; procedure ShowOperationsViewer(AQueueIdentifier: TOperationsManagerQueueIdentifier); begin ShowOperationsViewer; frmViewOperations.SetFocusItem(AQueueIdentifier); end; procedure ApplyProgress(var ARect: TRect; Progress: Double); begin ARect.Right := ARect.Left + Round((ARect.Right - ARect.Left) * Progress); end; function MoveRect(aRect: TRect; DeltaX, DeltaY: Integer): TRect; begin Result.Left := aRect.Left + DeltaX; Result.Right := aRect.Right + DeltaX; Result.Top := aRect.Top + DeltaY; Result.Bottom := aRect.Bottom + DeltaY; end; procedure DrawMovePolygon(Canvas: TCanvas; const Points: array of TPoint; DeltaX, DeltaY: Integer); var CopyPoints: PPoint; i: Integer; begin CopyPoints := GetMem(SizeOf(TPoint) * Length(Points)); for i := 0 to Length(Points) - 1 do begin CopyPoints[i].x := Points[i].x + DeltaX; CopyPoints[i].y := Points[i].y + DeltaY; end; Canvas.Polygon(CopyPoints, Length(Points), True); FreeMem(CopyPoints); end; { TViewBaseItem } procedure TViewBaseItem.DrawThemedBackground(Canvas: TCanvas; Element: TThemedTreeview; ARect: TRect); var Details: TThemedElementDetails; begin Details := ThemeServices.GetElementDetails(Element); if ThemeServices.HasTransparentParts(Details) then begin Canvas.Brush.Color := GetBackgroundColor; Canvas.FillRect(ARect); end; ThemeServices.DrawElement(Canvas.Handle, Details, ARect, nil); end; procedure TViewBaseItem.DrawProgress(Canvas: TCanvas; NodeRect: TRect; Progress: Double); var Details: TThemedElementDetails; begin if Progress > 0 then begin NodeRect.Right := NodeRect.Right - ProgressRight; NodeRect.Left := NodeRect.Right - ProgressWidth; NodeRect.Top := NodeRect.Top + (NodeRect.Bottom - NodeRect.Top - ProgressHeight) div 2; NodeRect.Bottom := NodeRect.Top + ProgressHeight; if ThemeServices.ThemesEnabled then begin Details := ThemeServices.GetElementDetails(tpBar); ThemeServices.DrawElement(Canvas.Handle, Details, NodeRect, nil); Details := ThemeServices.GetElementDetails(tpChunk); InflateRect(NodeRect, -2, -2); ApplyProgress(NodeRect, Progress); ThemeServices.DrawElement(Canvas.Handle, Details, NodeRect, nil); end else begin Canvas.Pen.Color := clWindowText; Canvas.Brush.Color := clForm; Canvas.RoundRect(NodeRect, 3, 3); Canvas.Brush.Color := clHighlight; ApplyProgress(NodeRect, Progress); Canvas.RoundRect(NodeRect, 3, 3); end; end; end; procedure TViewBaseItem.DrawStatusIcon(Canvas: TCanvas; NodeRect: TRect; Icon: TViewOperationsStatusIcon); var IconRect: TRect; begin Canvas.Brush.Color := GetBackgroundColor; Canvas.Pen.Color := clWindowText; IconRect := MoveRect(GetStatusIconRect(NodeRect), NodeRect.Left, NodeRect.Top); Canvas.Rectangle(IconRect); case Icon of vosiPlay: // Paint "Play" triangle begin Canvas.Brush.Color := RGBToColor(0, 200, 0); DrawMovePolygon(Canvas, StatusIconPlay, IconRect.Left, IconRect.Top); end; vosiPause: // Paint "Pause" double line begin Canvas.Brush.Color := RGBToColor(0, 0, 200); DrawMovePolygon(Canvas, StatusIconPause1, IconRect.Left, IconRect.Top); DrawMovePolygon(Canvas, StatusIconPause2, IconRect.Left, IconRect.Top); end; else // Paint "Hourglass" begin Canvas.Brush.Color := RGBToColor(255, 255, 255); DrawMovePolygon(Canvas, StatusIconHourglass1, IconRect.Left, IconRect.Top); DrawMovePolygon(Canvas, StatusIconHourglass2, IconRect.Left, IconRect.Top); end; end; end; procedure TViewBaseItem.DrawThemedText(Canvas: TCanvas; Element: TThemedTreeview; NodeRect: TRect; Center: Boolean; AText: String); var Details: TThemedElementDetails; Flags: Cardinal = DT_WORDBREAK or DT_NOPREFIX; begin Details := ThemeServices.GetElementDetails(Element); if Center then Flags := Flags + DT_VCENTER; ThemeServices.DrawText(Canvas, Details, AText, NodeRect, Flags, 0); end; function TViewBaseItem.GetStatusIconRect(NodeRect: TRect): TRect; begin Result := MoveRect(StatusIconFrame, (NodeRect.Right - NodeRect.Left) - (StatusIconFrame.Right - StatusIconFrame.Left) - StatusIconRightMargin, ((NodeRect.Bottom - NodeRect.Top) - (StatusIconFrame.Bottom - StatusIconFrame.Top)) div 2); end; constructor TViewBaseItem.Create(ANode: TTreeNode); begin FTreeNode := ANode; end; procedure TViewBaseItem.CalculateSizes(Canvas: TCanvas; NeedsStatusIcon, NeedsProgress: Boolean); var NodeRect: TRect; NeededHeight: Integer; begin // Calculate available width for text. NodeRect := FTreeNode.DisplayRect(False); FTextRect := Rect(0, 0, 0, 0); FTextRect.Right := (NodeRect.Right - NodeRect.Left) - GetTextIndent - (ProgressRight + ProgressWidth + ProgressHorizontalMargin); // Calculate text height. DrawText(Canvas.Handle, PChar(FText), Length(FText), FTextRect, DT_NOPREFIX + DT_CALCRECT + DT_WORDBREAK); // Take max of text, progress and status icon. NeededHeight := FTextRect.Bottom - FTextRect.Top; if NeedsProgress then NeededHeight := Max(NeededHeight, ProgressHeight); if NeedsStatusIcon then NeededHeight := Max(NeededHeight, StatusIconFrame.Bottom - StatusIconFrame.Top); Inc(NeededHeight, 2 * MarginTopBottom); FTextRect := MoveRect(FTextRect, NodeRect.Left + GetTextIndent, NodeRect.Top); FTreeNode.Height := NeededHeight; end; procedure TViewBaseItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; begin case Button of mbRight: if Assigned(FOnContextMenu) then begin OnContextMenu(Self, Pt); Handled := True; end; end; if not Handled and Assigned(FOnClick) then FOnClick(Self, Button, Shift, Pt); end; procedure TViewBaseItem.KeyDown(var Key: Word; Shift: TShiftState); var Rect: TRect; Point: TPoint; begin case Key of VK_APPS: if Assigned(FOnContextMenu) then begin Rect := FTreeNode.DisplayRect(False); Point.x := Rect.Left + (Rect.Right - Rect.Left) div 2; Point.y := Rect.Top + (Rect.Bottom - Rect.Top) div 2; OnContextMenu(Self, Point); Key := 0; end; VK_SPACE: begin StartPause; Key := 0; end; VK_DELETE, VK_BACK: begin Stop; Key := 0; end; end; end; procedure TViewBaseItem.Selected; begin if Assigned(FOnSelected) then FOnSelected(Self); end; { TViewOperationItem } constructor TViewOperationItem.Create(ANode: TTreeNode; AOperationHandle: TOperationHandle); begin FOperationHandle := AOperationHandle; inherited Create(ANode); end; procedure TViewOperationItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; OpManItem: TOperationsManagerItem; NodeRect: TRect; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin case Button of mbLeft: if OpManItem.Queue.IsFree then begin NodeRect := FTreeNode.DisplayRect(False); if ((ssDouble in Shift) or PtInRect(GetStatusIconRect(NodeRect), Pt)) then begin StartPause; Handled := True; end; end; end; end; if not Handled then inherited Click(Pt, Button, Shift); end; procedure TViewOperationItem.Draw(Canvas: TCanvas; NodeRect: TRect); var OpManItem: TOperationsManagerItem; Element: TThemedTreeview; Icon: TViewOperationsStatusIcon; begin if FTreeNode.Selected then Element := ttItemSelected else Element := ttItemNormal; DrawThemedBackground(Canvas, Element, NodeRect); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin DrawThemedText(Canvas, Element, FTextRect, True, FText); if OpManItem.Queue.IsFree then begin case OpManItem.Operation.State of fsosRunning: Icon := vosiPlay; fsosPaused: Icon := vosiPause; else Icon := vosiHourglass; end; DrawStatusIcon(Canvas, NodeRect, Icon); end; DrawProgress(Canvas, NodeRect, FProgress); end; end; function TViewOperationItem.GetBackgroundColor: TColor; begin Result := FTreeNode.TreeView.BackgroundColor; end; procedure TViewOperationItem.StartPause; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) and OpManItem.Queue.IsFree then OpManItem.Operation.TogglePause; end; procedure TViewOperationItem.Stop; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.Stop; end; procedure TViewOperationItem.UpdateView(Canvas: TCanvas); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin FText := IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJobAndTarget); FProgress := OpManItem.Operation.Progress; if FProgress > 0 then FText := FText + ' - ' + GetProgressString(FProgress); FText := FText + GetOperationStateString(OpManItem.Operation.State); CalculateSizes(Canvas, OpManItem.Queue.IsFree, FProgress > 0); end else begin FText := ''; FProgress := 0; FTreeNode.Height := 10; end; end; function TViewOperationItem.GetTextIndent: Integer; begin Result := FTreeNode.DisplayExpandSignLeft; if FTreeNode.Level = 0 then Inc(Result, FreeOperationTextIndent) else Dec(Result, TTreeView(FTreeNode.TreeView).Indent * (FTreeNode.Level - 1)); end; { TViewQueueItem } procedure TViewQueueItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; NodeRect: TRect; begin case Button of mbLeft: begin NodeRect := FTreeNode.DisplayRect(False); if (ssDouble in Shift) or PtInRect(GetStatusIconRect(NodeRect), Pt) then begin StartPause; Handled := True; end; end; end; if not Handled then inherited Click(Pt, Button, Shift); end; constructor TViewQueueItem.Create(ANode: TTreeNode; AQueueId: TOperationsManagerQueueIdentifier); begin FQueueIdentifier := AQueueId; inherited Create(ANode); end; procedure TViewQueueItem.Draw(Canvas: TCanvas; NodeRect: TRect); var Element: TThemedTreeview; Queue: TOperationsManagerQueue; Icon: TViewOperationsStatusIcon; begin if FTreeNode.Selected then Element := ttItemSelected else Element := ttItemSelectedNotFocus; DrawThemedBackground(Canvas, Element, NodeRect); Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin DrawThemedText(Canvas, Element, FTextRect, True, FText); if Queue.Paused then Icon := vosiPause else Icon := vosiPlay; DrawStatusIcon(Canvas, NodeRect, Icon); end; end; function TViewQueueItem.GetBackgroundColor: TColor; begin Result := FTreeNode.TreeView.BackgroundColor; end; function TViewQueueItem.GetTextIndent: Integer; var ATreeView: TCustomTreeView; begin Result := FTreeNode.DisplayExpandSignLeft; ATreeView := FTreeNode.TreeView; if ATreeView is TTreeView then Inc(Result, TTreeView(ATreeView).Indent); end; procedure TViewQueueItem.StartPause; var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then Queue.TogglePause; end; procedure TViewQueueItem.Stop; var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin Queue.Stop; end; end; procedure TViewQueueItem.UpdateView(Canvas: TCanvas); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin FText := Queue.GetDescription(False); if Queue.Paused then FText := FText + GetOperationStateString(fsosPaused); CalculateSizes(Canvas, True, False); end else begin FText := ''; FTreeNode.Height := 10; end; end; { TfrmViewOperations } procedure TfrmViewOperations.FormCreate(Sender: TObject); begin InitPropStorage(Self); cbAlwaysOnTopChange(nil); FMenuOperation := InvalidOperationHandle; tvOperations.DoubleBuffered := True; DoubleBuffered := True; CreateNodes; OperationsManager.AddEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @UpdateView); tvOperations.OnResize := @tvOperationsResize; end; procedure TfrmViewOperations.btnStopClick(Sender: TObject); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.Stop; end; procedure TfrmViewOperations.cbAlwaysOnTopChange(Sender: TObject); begin if cbAlwaysOnTop.Checked then begin FormStyle := fsStayOnTop; ShowInTaskBar := stDefault; end else begin FormStyle := fsNormal; ShowInTaskBar := stAlways; end; end; procedure TfrmViewOperations.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction := caFree; frmViewOperations := nil; end; procedure TfrmViewOperations.FormDestroy(Sender: TObject); begin OperationsManager.RemoveEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @UpdateView); end; procedure TfrmViewOperations.mnuNewQueueClick(Sender: TObject); var Item: TViewBaseItem; OpManItem: TOperationsManagerItem; begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then OpManItem.MoveToNewQueue; end; end; procedure TfrmViewOperations.mnuPutFirstInQueueClick(Sender: TObject); begin MoveWithinQueue(True); end; procedure TfrmViewOperations.mnuPutLastInQueueClick(Sender: TObject); begin MoveWithinQueue(False); end; procedure TfrmViewOperations.mnuOperationShowDetachedClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) and OpManItem.Queue.IsFree then TfrmFileOp.ShowFor(OpManItem.Handle, [opwoIfExistsBringToFront]); end; procedure TfrmViewOperations.OnOperationItemContextMenu(Item: TViewBaseItem; const Point: TPoint); var i: Integer; PopupPoint: TPoint; OpManItem: TOperationsManagerItem; begin FMenuOperation := (Item as TViewOperationItem).FOperationHandle; OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) then begin for i := 0 to mnuQueue.Count - 1 do if i = OpManItem.Queue.Identifier then mnuQueue.Items[i].Checked := True else mnuQueue.Items[i].Checked := False; mnuOperationShowDetached.Enabled := OpManItem.Queue.IsFree; PopupPoint := tvOperations.ClientToScreen(Point); pmOperationPopup.PopUp(PopupPoint.x, PopupPoint.y); end; end; procedure TfrmViewOperations.OnOperationItemSelected(Item: TViewBaseItem); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then begin SetStartPauseCaption(OpManItem.Operation.State in [fsosStarting, fsosRunning, fsosWaitingForConnection]); btnStartPause.Enabled := OpManItem.Queue.IsFree; btnStop.Enabled := True; end else begin btnStartPause.Enabled := False; btnStop.Enabled := False; end; end; procedure TfrmViewOperations.OnQueueContextMenu(Item: TViewBaseItem; const Point: TPoint); var PopupPoint: TPoint; begin FMenuQueueIdentifier := (Item as TViewQueueItem).FQueueIdentifier; PopupPoint := tvOperations.ClientToScreen(Point); pmQueuePopup.PopUp(PopupPoint.x, PopupPoint.y); end; procedure TfrmViewOperations.OnQueueItemSelected(Item: TViewBaseItem); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[TViewQueueItem(Item).FQueueIdentifier]; if Assigned(Queue) then begin SetStartPauseCaption(not Queue.Paused); btnStartPause.Enabled := True; end else begin btnStartPause.Enabled := False; end; btnStop.Enabled := btnStartPause.Enabled; end; procedure TfrmViewOperations.OnUpdateTimer(Sender: TObject); begin UpdateSizes; tvOperationsSelectionChanged(tvOperations); tvOperations.Invalidate; end; procedure TfrmViewOperations.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: integer; Item: TViewBaseItem; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then SetNewQueue(TViewOperationItem(Item), NewQueueNumber); end; end; procedure TfrmViewOperations.mnuQueueShowDetachedClick(Sender: TObject); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FMenuQueueIdentifier]; if Assigned(Queue) then TfrmFileOp.ShowFor(Queue.Identifier, [opwoIfExistsBringToFront]); end; procedure TfrmViewOperations.tbPauseAllChange(Sender: TObject); begin if tbPauseAll.State = cbChecked then OperationsManager.PauseAll else OperationsManager.UnPauseAll; end; procedure TfrmViewOperations.tvOperationsCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var Item: TViewBaseItem; NodeRect: TRect; procedure DrawExpandSign(MidX, MidY: integer; CollapseSign: boolean); const ExpandSignColor = clWindowText; var HalfSize, ALeft, ATop, ARight, ABottom: integer; Points: array [0..2] of TPoint; R: TRect; begin with Sender.Canvas do begin Brush.Color := clWindow; Pen.Color := ExpandSignColor; Pen.Style := psSolid; HalfSize := ExpandSignSize shr 1; if not Odd(ExpandSignSize) then dec(HalfSize); ALeft := MidX - HalfSize; ATop := MidY - HalfSize; ARight := ALeft + ExpandSignSize; ABottom := ATop + ExpandSignSize; // draw an arrow. down for collapse and right for expand R := Rect(ALeft, ATop, ARight, ABottom); if CollapseSign then begin // draw an arrow down Points[0] := Point(R.Left, MidY); Points[1] := Point(R.Right - 1, MidY); Points[2] := Point(MidX, R.Bottom - 1); end else begin // draw an arrow right Points[0] := Point(MidX - 1, ATop); Points[1] := Point(R.Right - 2, MidY); Points[2] := Point(MidX - 1, R.Bottom - 1); end; Polygon(Points, False); end; end; var VertMid: Integer; begin if not Assigned(Node.Data) then Exit; Item := TViewBaseItem(Node.Data); NodeRect := Node.DisplayRect(False); Item.Draw(Sender.Canvas, NodeRect); if tvOperations.ShowButtons and Node.HasChildren and ((tvoShowRoot in tvOperations.Options) or (Node.Parent <> nil)) then begin VertMid := (NodeRect.Top + NodeRect.Bottom) div 2; DrawExpandSign(Node.DisplayExpandSignLeft + tvOperations.Indent shr 1, VertMid, Node.Expanded); end; // draw separator if (tvoShowSeparators in tvOperations.Options) then begin Sender.Canvas.Pen.Color:=tvOperations.SeparatorColor; Sender.Canvas.MoveTo(NodeRect.Left,NodeRect.Bottom-1); Sender.Canvas.LineTo(NodeRect.Right,NodeRect.Bottom-1); end; DefaultDraw := False; end; procedure TfrmViewOperations.tvOperationsDeletion(Sender: TObject; Node: TTreeNode); var Item: TViewBaseItem; begin Item := TViewBaseItem(Node.Data); Node.Data := nil; Item.Free; end; procedure TfrmViewOperations.tvOperationsDragDrop(Sender, Source: TObject; X, Y: Integer); var TargetNode: TTreeNode; NodeRect: TRect; TargetItem: TViewBaseItem; QueueItem: TViewQueueItem; OperItem: TViewOperationItem; SourceOpManItem, TargetOpManItem: TOperationsManagerItem; TargetQueue: TOperationsManagerQueue; TargetQueueId: TOperationsManagerQueueIdentifier; HitTopPart: Boolean; begin if Source = tvOperations then begin SourceOpManItem := OperationsManager.GetItemByHandle(FDraggedOperation); if Assigned(SourceOpManItem) then begin TargetNode := tvOperations.GetNodeAt(X, Y); if not Assigned(TargetNode) then begin SourceOpManItem.MoveToNewQueue; end else begin NodeRect := TargetNode.DisplayRect(False); TargetItem := TViewBaseItem(TargetNode.Data); HitTopPart := Y - NodeRect.Top < (NodeRect.Bottom - NodeRect.Top) div 2; if TargetItem is TViewQueueItem then begin QueueItem := TViewQueueItem(TargetItem); if HitTopPart and (TargetNode = tvOperations.Items.GetFirstNode) and (QueueItem.FQueueIdentifier <> FreeOperationsQueueId) then begin // There are no free operations and item was dropped at the top of the list // on some queue. Create a free operations queue and move to it. TargetQueueId := FreeOperationsQueueId; TargetQueue := OperationsManager.GetOrCreateQueue(TargetQueueId); end else begin TargetQueueId := QueueItem.FQueueIdentifier; TargetQueue := OperationsManager.QueueByIdentifier[TargetQueueId]; end; SourceOpManItem.SetQueue(TargetQueue); end else if (TargetItem is TViewOperationItem) and (FDraggedOperation <> TViewOperationItem(TargetItem).FOperationHandle) then begin OperItem := TViewOperationItem(TargetItem); TargetOpManItem := OperationsManager.GetItemByHandle(OperItem.FOperationHandle); if Assigned(TargetOpManItem) then SourceOpManItem.Move(TargetOpManItem.Handle, HitTopPart); end; end; end; end; end; procedure TfrmViewOperations.tvOperationsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end; procedure TfrmViewOperations.tvOperationsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.KeyDown(Key, Shift); end; procedure TfrmViewOperations.tvOperationsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Node: TTreeNode; NodeRect: TRect; begin FDraggedOperation := InvalidOperationHandle; Node := tvOperations.GetNodeAt(X, Y); if Assigned(Node) then begin NodeRect := Node.DisplayRect(False); TViewBaseItem(Node.Data).Click(Point(X - NodeRect.Left, Y - NodeRect.Top), Button, Shift); if TViewBaseItem(Node.Data) is TViewOperationItem then FDraggedOperation := TViewOperationItem(Node.Data).FOperationHandle; end; end; procedure TfrmViewOperations.tvOperationsResize(Sender: TObject); begin UpdateSizes; end; procedure TfrmViewOperations.tvOperationsSelectionChanged(Sender: TObject); var Node: TTreeNode; begin Node := tvOperations.Selected; if Assigned(Node) then TViewBaseItem(Node.Data).Selected; end; function TfrmViewOperations.GetFocusedItem: TViewBaseItem; var Node: TTreeNode; begin Node := tvOperations.Selected; if Assigned(Node) then Result := TViewBaseItem(Node.Data) else Result := nil; end; procedure TfrmViewOperations.mnuCancelOperationClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) then OpManItem.Operation.Stop; end; procedure TfrmViewOperations.mnuCancelQueueClick(Sender: TObject); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FMenuQueueIdentifier]; if Assigned(Queue) then Queue.Stop; end; procedure TfrmViewOperations.MoveWithinQueue(MoveToTop: Boolean); var Item: TViewBaseItem; OpManItem: TOperationsManagerItem; begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.Identifier <> FreeOperationsQueueId then begin if MoveToTop then OpManItem.MoveToTop else OpManItem.MoveToBottom; end; end; end; end; procedure TfrmViewOperations.SetFocusItem(AOperationHandle: TOperationHandle); var Node: TTreeNode; begin for Node in tvOperations.Items do begin if (TViewBaseItem(Node.Data) is TViewOperationItem) and (TViewOperationItem(Node.Data).FOperationHandle = AOperationHandle) then begin Node.Selected := True; Exit; end; end; end; procedure TfrmViewOperations.SetFocusItem(AQueueIdentifier: TOperationsManagerQueueIdentifier); var Node: TTreeNode; begin for Node in tvOperations.Items do begin if (TViewBaseItem(Node.Data) is TViewQueueItem) and (TViewQueueItem(Node.Data).FQueueIdentifier = AQueueIdentifier) then begin Node.Selected := True; Exit; end; end; end; procedure TfrmViewOperations.SetNewQueue(Item: TViewOperationItem; NewQueue: TOperationsManagerQueueIdentifier); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(Item.FOperationHandle); if Assigned(OpManItem) then OpManItem.SetQueue(OperationsManager.GetOrCreateQueue(NewQueue)); end; procedure TfrmViewOperations.SetStartPauseCaption(SetPause: Boolean); begin if SetPause then btnStartPause.Caption := rsDlgOpPause else btnStartPause.Caption := rsDlgOpStart; end; procedure TfrmViewOperations.btnStartPauseClick(Sender: TObject); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.StartPause; end; procedure TfrmViewOperations.CreateNodes; procedure AddOperations(Queue: TOperationsManagerQueue; QueueNode: TTreeNode); var OperIndex: Integer; OpManItem: TOperationsManagerItem; OperNode: TTreeNode; Item: TViewBaseItem; begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; OperNode := tvOperations.Items.AddChild(QueueNode, ''); Item := TViewOperationItem.Create(OperNode, OpManItem.Handle); OperNode.Data := Item; Item.UpdateView(tvOperations.Canvas); Item.OnContextMenu := @OnOperationItemContextMenu; Item.OnSelected := @OnOperationItemSelected; end; end; var QueueIndex: Integer; Queue: TOperationsManagerQueue; QueueNode: TTreeNode; Item: TViewBaseItem; begin tvOperations.Items.Clear; // First add all free operations. Queue := OperationsManager.QueueByIdentifier[FreeOperationsQueueId]; if Assigned(Queue) then AddOperations(Queue, nil); for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Identifier <> FreeOperationsQueueId then begin QueueNode := tvOperations.Items.AddChild(nil, ''); Item := TViewQueueItem.Create(QueueNode, Queue.Identifier); QueueNode.Data := Item; Item.UpdateView(tvOperations.Canvas); Item.OnContextMenu := @OnQueueContextMenu; Item.OnSelected := @OnQueueItemSelected; AddOperations(Queue, QueueNode); end; end; end; procedure TfrmViewOperations.UpdateSizes; var Node: TTreeNode; begin Node := tvOperations.Items.GetFirstNode; while Assigned(Node) do begin if Assigned(Node.Data) then TViewBaseItem(Node.Data).UpdateView(tvOperations.Canvas); Node := Node.GetNext; end; end; procedure TfrmViewOperations.UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent); begin CreateNodes; tvOperations.Invalidate; end; initialization ProgressRight := ProgressHorizontalMargin + StatusIconRightMargin + (StatusIconFrame.Right - StatusIconFrame.Left); end. doublecmd-1.1.30/src/fviewoperations.lrj0000644000175000001440000000612715104114162017317 0ustar alexxusers{"version":1,"strings":[ {"hash":184414099,"name":"tfrmviewoperations.caption","sourcebytes":[70,105,108,101,32,111,112,101,114,97,116,105,111,110,115],"value":"File operations"}, {"hash":211145388,"name":"tfrmviewoperations.tbpauseall.caption","sourcebytes":[38,80,97,117,115,101,32,97,108,108],"value":"&Pause all"}, {"hash":5626720,"name":"tfrmviewoperations.btnstop.caption","sourcebytes":[83,38,116,111,112],"value":"S&top"}, {"hash":45787284,"name":"tfrmviewoperations.btnstartpause.caption","sourcebytes":[38,83,116,97,114,116],"value":"&Start"}, {"hash":45418739,"name":"tfrmviewoperations.lblusedragdrop.caption","sourcebytes":[38,85,115,101,32,34,100,114,97,103,32,38,38,32,100,114,111,112,34,32,116,111,32,109,111,118,101,32,111,112,101,114,97,116,105,111,110,115,32,98,101,116,119,101,101,110,32,113,117,101,117,101,115],"value":"&Use \"drag && drop\" to move operations between queues"}, {"hash":259910512,"name":"tfrmviewoperations.cbalwaysontop.caption","sourcebytes":[65,108,119,97,121,115,32,111,110,32,116,111,112],"value":"Always on top"}, {"hash":5815477,"name":"tfrmviewoperations.mnuqueue.caption","sourcebytes":[81,117,101,117,101],"value":"Queue"}, {"hash":219470821,"name":"tfrmviewoperations.mnuqueue0.caption","sourcebytes":[79,117,116,32,111,102,32,113,117,101,117,101],"value":"Out of queue"}, {"hash":146585441,"name":"tfrmviewoperations.mnuqueue1.caption","sourcebytes":[81,117,101,117,101,32,49],"value":"Queue 1"}, {"hash":146585442,"name":"tfrmviewoperations.mnuqueue2.caption","sourcebytes":[81,117,101,117,101,32,50],"value":"Queue 2"}, {"hash":146585443,"name":"tfrmviewoperations.mnuqueue3.caption","sourcebytes":[81,117,101,117,101,32,51],"value":"Queue 3"}, {"hash":146585444,"name":"tfrmviewoperations.mnuqueue4.caption","sourcebytes":[81,117,101,117,101,32,52],"value":"Queue 4"}, {"hash":146585445,"name":"tfrmviewoperations.mnuqueue5.caption","sourcebytes":[81,117,101,117,101,32,53],"value":"Queue 5"}, {"hash":158918773,"name":"tfrmviewoperations.mnunewqueue.caption","sourcebytes":[78,101,119,32,113,117,101,117,101],"value":"New queue"}, {"hash":186662487,"name":"tfrmviewoperations.mnuoperationshowdetached.caption","sourcebytes":[83,104,111,119,32,105,110,32,100,101,116,97,99,104,101,100,32,119,105,110,100,111,119],"value":"Show in detached window"}, {"hash":94289029,"name":"tfrmviewoperations.mnuputfirstinqueue.caption","sourcebytes":[80,117,116,32,102,105,114,115,116,32,105,110,32,113,117,101,117,101],"value":"Put first in queue"}, {"hash":44375077,"name":"tfrmviewoperations.mnuputlastinqueue.caption","sourcebytes":[80,117,116,32,108,97,115,116,32,105,110,32,113,117,101,117,101],"value":"Put last in queue"}, {"hash":77089212,"name":"tfrmviewoperations.mnucanceloperation.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"}, {"hash":186662487,"name":"tfrmviewoperations.mnuqueueshowdetached.caption","sourcebytes":[83,104,111,119,32,105,110,32,100,101,116,97,99,104,101,100,32,119,105,110,100,111,119],"value":"Show in detached window"}, {"hash":77089212,"name":"tfrmviewoperations.mnucancelqueue.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"} ]} doublecmd-1.1.30/src/fviewoperations.lfm0000644000175000001440000001503515104114162017304 0ustar alexxusersobject frmViewOperations: TfrmViewOperations Left = 18 Height = 353 Top = 117 Width = 507 ActiveControl = tvOperations Caption = 'File operations' ClientHeight = 353 ClientWidth = 507 Constraints.MinHeight = 100 Constraints.MinWidth = 300 OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState;cbAlwaysOnTop.Checked' LCLVersion = '1.1' object pnlHeader: TPanel Left = 0 Height = 64 Top = 0 Width = 507 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 64 ClientWidth = 507 TabOrder = 0 object pnlTopHeader: TPanel AnchorSideLeft.Control = pnlHeader AnchorSideTop.Control = pnlHeader AnchorSideRight.Control = pnlHeader AnchorSideRight.Side = asrBottom Left = 0 Height = 40 Top = 0 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 40 ClientWidth = 507 TabOrder = 0 object tbPauseAll: TToggleBox AnchorSideLeft.Control = pnlTopHeader AnchorSideTop.Control = pnlTopHeader AnchorSideBottom.Control = pnlTopHeader AnchorSideBottom.Side = asrBottom Left = 0 Height = 40 Top = 0 Width = 70 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Right = 40 Caption = '&Pause all' OnChange = tbPauseAllChange TabOrder = 0 end object btnStop: TBitBtn AnchorSideLeft.Control = tbPauseAll AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTopHeader AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 110 Height = 40 Top = 0 Width = 80 AutoSize = True Caption = 'S&top' Constraints.MinHeight = 40 Constraints.MinWidth = 80 Enabled = False OnClick = btnStopClick TabOrder = 1 end object btnStartPause: TBitBtn AnchorSideLeft.Control = btnStop AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTopHeader AnchorSideBottom.Side = asrBottom Left = 200 Height = 40 Top = 0 Width = 80 AutoSize = True BorderSpacing.Left = 10 Caption = '&Start' Constraints.MinHeight = 40 Constraints.MinWidth = 80 Enabled = False OnClick = btnStartPauseClick TabOrder = 2 end end object lblUseDragDrop: TLabel AnchorSideLeft.Control = pnlHeader AnchorSideTop.Control = pnlTopHeader AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlHeader AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 43 Width = 487 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 3 BorderSpacing.Right = 10 BorderSpacing.Bottom = 3 Caption = '&Use "drag && drop" to move operations between queues' FocusControl = tvOperations ParentColor = False end object cbAlwaysOnTop: TCheckBox AnchorSideTop.Control = pnlTopHeader AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTopHeader AnchorSideRight.Side = asrBottom Left = 391 Height = 23 Top = 9 Width = 116 Anchors = [akTop, akRight] Caption = 'Always on top' OnChange = cbAlwaysOnTopChange TabOrder = 1 end end object tvOperations: TTreeView AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlHeader AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 289 Top = 64 Width = 507 Anchors = [akTop, akLeft, akRight, akBottom] AutoExpand = True DefaultItemHeight = 24 DragMode = dmAutomatic ExpandSignType = tvestArrow MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect] ReadOnly = True RowSelect = True ScrollBars = ssAutoVertical ShowLines = False TabOrder = 1 OnCustomDrawItem = tvOperationsCustomDrawItem OnDeletion = tvOperationsDeletion OnDragDrop = tvOperationsDragDrop OnDragOver = tvOperationsDragOver OnKeyDown = tvOperationsKeyDown OnMouseDown = tvOperationsMouseDown OnSelectionChanged = tvOperationsSelectionChanged Options = [tvoAllowMultiselect, tvoAutoExpand, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowRoot, tvoShowSeparators, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw] end object UpdateTimer: TTimer Interval = 100 OnTimer = OnUpdateTimer left = 112 top = 136 end object pmOperationPopup: TPopupMenu left = 224 top = 136 object mnuQueue: TMenuItem Caption = 'Queue' object mnuQueue0: TMenuItem Caption = 'Out of queue' OnClick = mnuQueueNumberClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end end object mnuOperationShowDetached: TMenuItem Caption = 'Show in detached window' OnClick = mnuOperationShowDetachedClick end object mnuPutFirstInQueue: TMenuItem Caption = 'Put first in queue' OnClick = mnuPutFirstInQueueClick end object mnuPutLastInQueue: TMenuItem Caption = 'Put last in queue' OnClick = mnuPutLastInQueueClick end object mnuCancelOperation: TMenuItem Caption = 'Cancel' OnClick = mnuCancelOperationClick end end object pmQueuePopup: TPopupMenu left = 224 top = 208 object mnuQueueShowDetached: TMenuItem Caption = 'Show in detached window' OnClick = mnuQueueShowDetachedClick end object mnuCancelQueue: TMenuItem Caption = 'Cancel' OnClick = mnuCancelQueueClick end end end doublecmd-1.1.30/src/fviewer.pas0000644000175000001440000036010315104114162015533 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Build-in File Viewer. Copyright (C) 2007-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Legacy comment from its origin: ------------------------------------------------------------------------- Seksi Commander Integrated viewer form Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Radek Polak ported to lazarus: changes: 23.7. - fixed: scroll bar had wrong max value until user pressed key (by Radek Polak) - fixed: wrong scrolling with scroll bar - now look at ScrollBarVertScroll (by Radek Polak) Dmitry Kolomiets 15.03.08 changes: - Added WLX api support (TC WLX api v 1.8) Rustem Rakhimov 25.04.10 changes: - fullscreen - function for edit image - slide show - some Viwer function } unit fViewer; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls, ComCtrls, LMessages, LCLProc, Menus, Dialogs, ExtDlgs, StdCtrls, Buttons, SynEditHighlighter, Grids, ActnList, viewercontrol, GifAnim, fFindView, WLXPlugin, uWLXModule, uFileSource, fModView, Types, uThumbnails, uFormCommands, uOSForms,Clipbrd, uExifReader, KASStatusBar, SynEdit, uShowForm, uRegExpr, uRegExprU, Messages, fEditSearch, uMasks, uSearchTemplate, uFileSourceOperation, uFileSourceCalcStatisticsOperation, KASComCtrls; type TEncodingMenu = (emViewer, emPlugin, emEditor); TViewerCopyMoveAction=(vcmaCopy,vcmaMove); { TDrawGrid } TDrawGrid = class(Grids.TDrawGrid) private FMutex: Integer; FFileList: TStringList; private function GetIndex: Integer; procedure SetIndex(AValue: Integer); protected procedure CalculateColRowCount; function MouseOnGrid(X, Y: LongInt): Boolean; function CellToIndex(ACol, ARow: Integer): Integer; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); protected procedure MoveSelection; override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y: Integer); override; public procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; property Index: Integer read GetIndex write SetIndex; property FileList: TStringList write FFileList; end; { TfrmViewer } TfrmViewer = class(TAloneForm, IFormCommands) actAbout: TAction; actCopyFile: TAction; actDeleteFile: TAction; actCopyToClipboard: TAction; actImageCenter: TAction; actFullscreen: TAction; actCopyToClipboardFormatted: TAction; actChangeEncoding: TAction; actAutoReload: TAction; actShowCode: TAction; actUndo: TAction; actShowTransparency: TAction; actWrapText: TAction; actShowCaret: TAction; actPrint: TAction; actPrintSetup: TAction; actShowAsDec: TAction; actScreenShotDelay5sec: TAction; actScreenShotDelay3Sec: TAction; actScreenshot: TAction; actZoomOut: TAction; actZoomIn: TAction; actZoom: TAction; actStretchOnlyLarge: TAction; actFindNext: TAction; actShowGraphics: TAction; actExitViewer: TAction; actMirrorVert: TAction; actSave: TAction; actShowOffice: TAction; actShowPlugins: TAction; actShowAsBook: TAction; actShowAsWrapText: TAction; actShowAsHex: TAction; actShowAsBin: TAction; actShowAsText: TAction; actPreview: TAction; actGotoLine: TAction; actFindPrev: TAction; actFind: TAction; actSelectAll: TAction; actMirrorHorz: TAction; actRotate270: TAction; actRotate180: TAction; actRotate90: TAction; actSaveAs: TAction; actStretchImage: TAction; actMoveFile: TAction; actLoadPrevFile: TAction; actLoadNextFile: TAction; actReload: TAction; actionList: TActionList; btnCopyFile1: TSpeedButton; btnDeleteFile1: TSpeedButton; btnMoveFile1: TSpeedButton; btnNext1: TSpeedButton; btnPenColor: TToolButtonClr; btnPrev1: TSpeedButton; btnReload1: TSpeedButton; DrawPreview: TDrawGrid; GifAnim: TGifAnim; memFolder: TMemo; mnuPlugins: TMenuItem; miCode: TMenuItem; miShowTransparency: TMenuItem; miWrapText: TMenuItem; miPen: TMenuItem; miRect: TMenuItem; miEllipse: TMenuItem; miShowCaret: TMenuItem; miPrintSetup: TMenuItem; miAutoReload: TMenuItem; pmiCopyFormatted: TMenuItem; miDec: TMenuItem; MenuItem2: TMenuItem; miScreenshot5sec: TMenuItem; miScreenshot3sec: TMenuItem; miScreenshotImmediately: TMenuItem; miReload: TMenuItem; miLookBook: TMenuItem; miDiv4: TMenuItem; miPreview: TMenuItem; miScreenshot: TMenuItem; miFullScreen: TMenuItem; miSave: TMenuItem; miSaveAs: TMenuItem; Image: TImage; miZoomOut: TMenuItem; miZoomIn: TMenuItem; miRotate: TMenuItem; miMirror: TMenuItem; mi270: TMenuItem; mi180: TMenuItem; mi90: TMenuItem; miGotoLine: TMenuItem; miSearchPrev: TMenuItem; miPrint: TMenuItem; miSearchNext: TMenuItem; pnlFolder: TPanel; pnlPreview: TPanel; pnlEditFile: TPanel; pmiSelectAll: TMenuItem; miDiv5: TMenuItem; pmiCopy: TMenuItem; pnlImage: TPanel; pnlText: TPanel; pnlCode: TPanel; pmStatusBar: TPopupMenu; SynEdit: TSynEdit; miDiv3: TMenuItem; miOffice: TMenuItem; miEncoding: TMenuItem; miPlugins: TMenuItem; miSeparator: TMenuItem; pmEditMenu: TPopupMenu; pmPenTools: TPopupMenu; pmPenWidth: TPopupMenu; pmTimeShow: TPopupMenu; SavePictureDialog: TSavePictureDialog; sboxImage: TScrollBox; Splitter: TSplitter; Status: TKASStatusBar; MainMenu: TMainMenu; miFile: TMenuItem; miPrev: TMenuItem; miNext: TMenuItem; miView: TMenuItem; miExit: TMenuItem; miImage: TMenuItem; miStretch: TMenuItem; miStretchOnlyLarge: TMenuItem; miCenter: TMenuItem; miText: TMenuItem; miBin: TMenuItem; miHex: TMenuItem; miAbout: TMenuItem; miAbout2: TMenuItem; miDiv1: TMenuItem; miSearch: TMenuItem; miDiv2: TMenuItem; miGraphics: TMenuItem; miEdit: TMenuItem; miSelectAll: TMenuItem; miCopyToClipboard: TMenuItem; TimerReload: TTimer; TimerScreenshot: TTimer; TimerViewer: TTimer; tmUpdateFolderSize: TTimer; ToolBar1: TToolBarAdv; btnReload: TToolButton; btn270: TToolButton; btn90: TToolButton; btnMirror: TToolButton; btnCutTuImage: TToolButton; btnRedEye: TToolButton; btnPaintSeparator: TToolButton; btnUndo: TToolButton; btnPenMode: TToolButton; btnGifSeparator: TToolButton; btnGifMove: TToolButton; btnPrevGifFrame: TToolButton; btnNextGifFrame: TToolButton; btnGifToBmp: TToolButton; btnPenWidth: TToolButton; btnPrev: TToolButton; btnNext: TToolButton; btnCopyFile: TToolButton; btnMoveFile: TToolButton; btnDeleteFile: TToolButton; btnSeparator: TToolButton; btnSlideShow: TToolButton; btnFullScreen: TToolButton; btnResize: TToolButton; btnPaint: TToolButton; btnZoomSeparator: TToolButton; btnZoomIn: TToolButton; btnZoomOut: TToolButton; btnHightlightSeparator: TToolButton; btnHightlight: TToolButton; ViewerControl: TViewerControl; procedure actExecute(Sender: TObject); procedure btnCutTuImageClick(Sender: TObject); procedure btnFullScreenClick(Sender: TObject); procedure btnGifMoveClick(Sender: TObject); procedure btnGifToBmpClick(Sender: TObject); procedure btnPaintHightlight(Sender: TObject); procedure btnPenModeClick(Sender: TObject); procedure btnPrevGifFrameClick(Sender: TObject); procedure btnRedEyeClick(Sender: TObject); procedure btnResizeClick(Sender: TObject); procedure btnSlideShowClick(Sender: TObject); procedure DrawPreviewSelection(Sender: TObject; aCol, aRow: Integer); procedure DrawPreviewTopleftChanged(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender : TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormResize(Sender: TObject); procedure FormShow(Sender: TObject); procedure GifAnimMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure GifAnimMouseEnter(Sender: TObject); procedure ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ImageMouseEnter(Sender: TObject); procedure ImageMouseLeave(Sender: TObject); procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer ); procedure ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ImageMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure ImageMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure miPenClick(Sender: TObject); procedure miLookBookClick(Sender: TObject); procedure pmEditMenuPopup(Sender: TObject); procedure pnlImageResize(Sender: TObject); procedure miPluginsClick(Sender: TObject); procedure pnlTextMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure sboxImageMouseEnter(Sender: TObject); procedure sboxImageMouseLeave(Sender: TObject); procedure sboxImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure btnNextGifFrameClick(Sender: TObject); procedure SplitterChangeBounds; procedure TimerReloadTimer(Sender: TObject); procedure TimerScreenshotTimer(Sender: TObject); procedure TimerViewerTimer(Sender: TObject); procedure tmUpdateFolderSizeTimer(Sender: TObject); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure ViewerControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure frmViewerClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormDestroy(Sender: TObject); procedure miPaintClick(Sender:TObject); procedure miChangeEncodingClick(Sender:TObject); procedure SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SynEditMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure ViewerControlMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure ViewerControlMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure ViewerPositionChanged(Sender:TObject); function PluginShowFlags : Integer; procedure UpdateImagePlacement; procedure StartCalcFolderSize; procedure StopCalcFolderSize; private FFileName: String; FileList: TStringList; iActiveFile, tmpX, tmpY, startX, startY, endX, endY, UndoSX, UndoSY, UndoEX, UndoEY, cas, i_timer:Integer; bAnimation, bImage, bPlugin, bQuickView, MDFlag, ImgEdit: Boolean; FThumbSize: TSize; FFindDialog:TfrmFindView; FWaitData: TWaitData; FLastSearchPos: PtrInt; FLastMatchLength: IntPtr; tmp_all: TCustomBitmap; FModSizeDialog: TfrmModView; FThumbnailManager: TThumbnailManager; FFileSourceCalcStatisticsOperation: TFileSourceCalcStatisticsOperation; FCommands: TFormCommands; FZoomFactor: Integer; FExif: TExifReader; FWindowState: TWindowState; FElevate: TDuplicates; {$IF DEFINED(LCLWIN32)} FWindowBounds: TRect; {$ENDIF} FThread: TThread; FMode: Integer; FRegExp: TRegExprEx; FPluginEncoding: Integer; //--------------------- FSynEditOriginalText: String; FSearchOptions: TEditSearchOptions; FHighlighter: TSynCustomHighlighter; //--------------------- WlxPlugins: TWLXModuleList; FWlxModule: TWlxModule; ActivePlugin: Integer; //--------------------- function GetListerRect: TRect; function CheckOffice(const sFileName: String): Boolean; function CheckSynEdit(const sFileName: String; bForce: Boolean = False): Boolean; function CheckPlugins(const sFileName: String; bForce: Boolean = False): Boolean; function CheckGraphics(const sFileName:String):Boolean; function LoadGraphics(const sFileName:String): Boolean; function LoadSynEdit(const sFileName: String): Boolean; function LoadPlugin(const sFileName: String; Index, ShowFlags: Integer): Boolean; procedure AdjustImageSize; procedure DoSearchCode(bQuickSearch: Boolean; bSearchBackwards: Boolean); procedure DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); procedure UpdateTextEncodingsMenu(AType: TEncodingMenu); procedure MakeTextEncodingsMenu; procedure ActivatePanel(Panel: TPanel); procedure ReopenAsTextIfNeeded; procedure UpdatePluginsMenu; procedure MakePluginsMenu; procedure CheckXY; procedure UndoTmp; procedure CreateTmp; procedure CutToImage; procedure Res(W, H: integer); procedure RedEyes; procedure SynEditCaret; procedure ExitPluginMode; procedure DeleteCurrentFile; procedure EnableCopy(AEnabled: Boolean); procedure EnablePrint(AEnabled: Boolean); procedure EnableSearch(AEnabled: Boolean); procedure EnableActions(AEnabled: Boolean); procedure SavingProperties(Sender: TObject); procedure SetFileName(const AValue: String); procedure SaveImageAs (Var sExt: String; senderSave: boolean; Quality: integer); procedure ImagePaintBackground(ASender: TObject; ACanvas: TCanvas; ARect: TRect); procedure CreatePreview(FullPathToFile:string; index:integer; delete: boolean = false); property Commands: TFormCommands read FCommands implements IFormCommands; property FileName: String write SetFileName; protected procedure WMCommand(var Message: TLMCommand); message LM_COMMAND; procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public constructor Create(TheOwner: TComponent; aWaitData: TWaitData; aQuickView: Boolean = False); overload; constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure AfterConstruction; override; procedure LoadFile(iIndex: Integer); procedure LoadFile(const aFileName: String); procedure LoadNextFile(Index: Integer); procedure LoadNextFile(const aFileName: String); procedure ExitQuickView; procedure ShowTextViewer(AMode: TViewerControlMode); procedure CopyMoveFile(AViewerAction:TViewerCopyMoveAction); procedure ZoomImage(ADelta: Double); procedure RotateImage(AGradus:integer); procedure MirrorImage(AVertically:boolean=False); published // Commands for hotkey manager procedure cm_About(const Params: array of string); procedure cm_Reload(const Params: array of string); procedure cm_AutoReload(const Params: array of string); procedure cm_LoadNextFile(const Params: array of string); procedure cm_LoadPrevFile(const Params: array of string); procedure cm_MoveFile(const Params: array of string); procedure cm_CopyFile(const Params: array of string); procedure cm_DeleteFile(const Params: array of string); procedure cm_StretchImage(const Params: array of string); procedure cm_StretchOnlyLarge(const Params: array of string); procedure cm_ShowTransparency(const Params: array of string); procedure cm_Save(const Params:array of string); procedure cm_Undo(const Params: array of string); procedure cm_SaveAs(const Params: array of string); procedure cm_Rotate90(const Params: array of string); procedure cm_Rotate180(const Params: array of string); procedure cm_Rotate270(const Params: array of string); procedure cm_MirrorHorz(const Params: array of string); procedure cm_MirrorVert(const Params: array of string); procedure cm_ImageCenter(const Params: array of string); procedure cm_Zoom(const Params: array of string); procedure cm_ZoomIn(const Params: array of string); procedure cm_ZoomOut(const Params: array of string); procedure cm_Fullscreen(const Params: array of string); procedure cm_Screenshot(const Params: array of string); procedure cm_ScreenshotWithDelay(const Params: array of string); procedure cm_ScreenshotDelay3sec(const Params: array of string); procedure cm_ScreenshotDelay5sec(const Params: array of string); procedure cm_ChangeEncoding(const Params: array of string); procedure cm_CopyToClipboard (const Params: array of string); procedure cm_CopyToClipboardFormatted (const Params: array of string); procedure cm_SelectAll (const Params: array of string); procedure cm_Find (const Params: array of string); procedure cm_FindNext (const Params: array of string); procedure cm_FindPrev (const Params: array of string); procedure cm_GotoLine (const Params: array of string); procedure cm_Preview (const Params: array of string); procedure cm_ShowAsText (const Params: array of string); procedure cm_ShowAsBin (const Params: array of string); procedure cm_ShowAsHex (const Params: array of string); procedure cm_ShowAsDec (const Params: array of string); procedure cm_ShowAsWrapText (const Params: array of string); procedure cm_ShowAsBook (const Params: array of string); procedure cm_ShowGraphics (const Params: array of string); procedure cm_ShowPlugins (const Params: array of string); procedure cm_ShowOffice (const Params: array of string); procedure cm_ShowCode (const Params: array of string); procedure cm_ExitViewer (const Params: array of string); procedure cm_Print(const Params:array of string); procedure cm_PrintSetup(const Params:array of string); procedure cm_ShowCaret(const Params: array of string); procedure cm_WrapText(const Params: array of string); end; procedure ShowViewer(const FilesToView: TStringList; WaitData: TWaitData = nil); overload; procedure ShowViewer(const FilesToView: TStringList; AMode: Integer; WaitData: TWaitData = nil); overload; implementation {$R *.lfm} uses FileUtil, IntfGraphics, Math, uLng, uShowMsg, uGlobs, LCLType, LConvEncoding, DCClassesUtf8, uFindMmap, DCStrUtils, uDCUtils, LCLIntf, uDebug, uHotkeyManager, uConvEncoding, DCBasicTypes, DCOSUtils, uOSUtils, uFindByrMr, uFileViewWithGrid, fPrintSetup, uFindFiles, uAdministrator, uOfficeXML, uHighlighterProcs, dmHigh, SynEditTypes, uFile, uFileSystemFileSource, uFileProcs, uOperationsManager, uFileSourceOperationOptions {$IFDEF LCLGTK2} , uGraphics {$ENDIF} ; const HotkeysCategory = 'Viewer'; // Status bar panels indexes. sbpFileName = 4; sbpFileNr = 0; // Text sbpPosition = 1; sbpFileSize = 2; sbpTextEncoding = 3; // WLX sbpPluginName = 1; // Graphics sbpCurrentResolution = 1; sbpFullResolution = 2; sbpImageSelection = 3; const WRAP_MODE: array[Boolean] of TViewerControlMode = (vcmText, vcmWrap); type { TThumbThread } TThumbThread = class(TThread) private FOwner: TfrmViewer; procedure ClearList; procedure DoOnTerminate(Sender: TObject); protected procedure Execute; override; public constructor Create(Owner: TfrmViewer); class procedure Finish(var Thread: TThread); end; procedure ShowViewer(const FilesToView: TStringList; WaitData: TWaitData); begin ShowViewer(FilesToView, 0, WaitData); end; procedure ShowViewer(const FilesToView: TStringList; AMode: Integer; WaitData: TWaitData); var Viewer: TfrmViewer; begin //DCDebug('ShowViewer - Using Internal'); Viewer := TfrmViewer.Create(Application, WaitData); Viewer.FileList.Assign(FilesToView);// Make a copy of the list Viewer.DrawPreview.FileList:= Viewer.FileList; Viewer.actMoveFile.Enabled := FilesToView.Count > 1; Viewer.actDeleteFile.Enabled := FilesToView.Count > 1; with Viewer.ViewerControl do begin if (AMode = 0) then AMode:= gViewerMode else begin Viewer.FMode:= AMode; end; case AMode of 1: Mode:= WRAP_MODE[gViewerWrapText]; 2: Mode:= vcmBin; 3: Mode:= vcmHex; 6: Mode:= vcmDec; end; end; Viewer.LoadFile(0); if (WaitData = nil) then Viewer.ShowOnTop else begin WaitData.ShowOnTop(Viewer); end; end; { TDrawGrid } function TDrawGrid.GetIndex: Integer; begin Result:= Row * ColCount + Col; end; procedure TDrawGrid.SetIndex(AValue: Integer); begin if (FMutex = 0) then try Inc(FMutex); MoveExtend(False, AValue mod ColCount, AValue div ColCount); finally Dec(FMutex) end; end; procedure TDrawGrid.CalculateColRowCount; begin if ClientWidth div (DefaultColWidth + 6) > 0 then begin ColCount:= ClientWidth div (DefaultColWidth + 6); end; if Assigned(FFileList) then begin if FFileList.Count mod ColCount > 0 then RowCount:= FFileList.Count div ColCount + 1 else begin RowCount:= FFileList.Count div ColCount; end; end; end; function TDrawGrid.MouseOnGrid(X, Y: LongInt): Boolean; var bTemp: Boolean; iRow, iCol: LongInt; begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= not (CellToIndex(iCol, iRow) < 0); end; function TDrawGrid.CellToIndex(ACol, ARow: Integer): Integer; begin if (ARow < 0) or (ARow >= RowCount) or (ACol < 0) or (ACol >= ColCount) then Exit(-1); Result:= ARow * ColCount + ACol; if (Result < 0) or (Result >= FFileList.Count) then Result:= -1; end; procedure TDrawGrid.IndexToCell(Index: Integer; out ACol, ARow: Integer); begin if (Index < 0) or (Index >= FFileList.Count) or (ColCount = 0) then begin ACol:= -1; ARow:= -1; end else begin ARow:= Index div ColCount; ACol:= Index mod ColCount; end; end; procedure TDrawGrid.MoveSelection; begin if (FMutex = 0) then try Inc(FMutex); inherited MoveSelection; finally Dec(FMutex) end; end; procedure TDrawGrid.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust vertical layout inherited DoAutoAdjustLayout(AMode, AXProportion, 1.0); end; procedure TDrawGrid.KeyDown(var Key: Word; Shift: TShiftState); var ACol, ARow: Integer; begin case Key of VK_LEFT: begin if (Col - 1 < 0) and (Row > 0) then begin MoveExtend(False, ColCount - 1, Row - 1); Key:= 0; end; end; VK_RIGHT: begin if (CellToIndex(Col + 1, Row) < 0) then begin if (Row + 1 < RowCount) then MoveExtend(False, 0, Row + 1) else begin IndexToCell(FFileList.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); end; Key:= 0; end; end; VK_HOME: begin MoveExtend(False, 0, 0); Key:= 0; end; VK_END: begin IndexToCell(FFileList.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_DOWN: begin if (CellToIndex(Col, Row + 1) < 0) then begin IndexToCell(FFileList.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end end; end; inherited KeyDown(Key, Shift); end; procedure TDrawGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if MouseOnGrid(X, Y) then inherited MouseDown(Button, Shift, X, Y) else begin if Assigned(OnMouseDown) then begin OnMouseDown(Self, Button, Shift, X, Y); end; if not Focused then begin if CanSetFocus then SetFocus; end; end; end; procedure TDrawGrid.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var ATextSize: TSize; sFileName: String; bmpThumb: TBitmap; AIndex, X, Y: Integer; begin AIndex:= CellToIndex(aCol, aRow); if InRange(AIndex, 0, FFileList.Count - 1) then begin PrepareCanvas(aCol, aRow, aState); DefaultDrawCell(aCol, aRow, aRect, aState); LCLIntf.InflateRect(aRect, -2, -2); bmpThumb:= TBitmap(FFileList.Objects[AIndex]); sFileName:= ExtractFileName(FFileList.Strings[AIndex]); sFileName:= FitOtherCellText(sFileName, Canvas, aRect.Width); ATextSize:= Canvas.TextExtent(sFileName); if Assigned(bmpThumb) then begin // Draw thumbnail at center X:= aRect.Left + (aRect.Width - bmpThumb.Width) div 2; Y:= aRect.Top + (aRect.Height - bmpThumb.Height - ATextSize.Height - 4) div 2; Canvas.Draw(X, Y, bmpThumb); end; // Draw file name at center Y:= (aRect.Bottom - ATextSize.Height) - 2; X:= aRect.Left + (aRect.Width - ATextSize.Width) div 2; Canvas.TextOut(X, Y, sFileName); // Draw grid LCLIntf.InflateRect(aRect, 2, 2); DrawCellGrid(aCol, aRow, aRect, aState); end else begin Canvas.Brush.Color:= Color; Canvas.FillRect(aRect); end; end; { TThumbThread } procedure TThumbThread.ClearList; var Index: Integer; begin for Index:= 0 to FOwner.FileList.Count - 1 do begin FOwner.FileList.Objects[Index].Free; FOwner.FileList.Objects[Index]:= nil; end; end; procedure TThumbThread.DoOnTerminate(Sender: TObject); begin FOwner.EnableActions(True); FOwner := nil; end; procedure TThumbThread.Execute; var I: Integer = 0; begin while (not Terminated) and (I < FOwner.FileList.Count) do begin FOwner.CreatePreview(FOwner.FileList.Strings[I], I); if (I mod 3 = 0) then Synchronize(@FOwner.DrawPreview.Invalidate); Inc(I); end; Synchronize(@FOwner.DrawPreview.Invalidate); end; constructor TThumbThread.Create(Owner: TfrmViewer); begin inherited Create(True); Owner.EnableActions(False); OnTerminate := @DoOnTerminate; FOwner := Owner; ClearList; Start; end; class procedure TThumbThread.Finish(var Thread: TThread); begin if Assigned(Thread) then begin Thread.Terminate; Thread.WaitFor; FreeAndNil(Thread); end; end; constructor TfrmViewer.Create(TheOwner: TComponent; aWaitData: TWaitData; aQuickView: Boolean); begin bQuickView:= aQuickView; inherited Create(TheOwner); FWaitData := aWaitData; FLastSearchPos := -1; FZoomFactor := 100; ActivePlugin := -1; FThumbnailManager:= nil; FExif:= TExifReader.Create; FRegExp:= TRegExprEx.Create; if not bQuickView then Menu:= MainMenu; FCommands := TFormCommands.Create(Self, actionList); FontOptionsToFont(gFonts[dcfMain], memFolder.Font); memFolder.Color:= gColors.FilePanel^.BackColor; actShowCaret.Checked := gShowCaret; actWrapText.Checked := gViewerWrapText; ViewerControl.ShowCaret := gShowCaret; ViewerControl.TabSpaces := gTabSpaces; ViewerControl.AutoCopy := gViewerAutoCopy; ViewerControl.MaxTextWidth := gMaxTextWidth; ViewerControl.LeftMargin := gViewerLeftMargin; ViewerControl.ExtraLineSpacing := gViewerLineSpacing; if gViewerWrapText then ViewerControl.Mode:= vcmWrap; end; constructor TfrmViewer.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; destructor TfrmViewer.Destroy; begin FExif.Free; StopCalcFolderSize; FreeAndNil(FRegExp); FreeAndNil(FileList); FreeAndNil(FThumbnailManager); inherited Destroy; FreeAndNil(WlxPlugins); FWaitData.Free; // If this is temp file source, the files will be deleted. tmp_all.Free; end; procedure TfrmViewer.AfterConstruction; begin inherited AfterConstruction; ToolBar1.ImagesWidth:= gToolIconsSize; ToolBar1.SetButtonSize(gToolIconsSize + ScaleX(6, 96), gToolIconsSize + ScaleY(6, 96)); end; procedure TfrmViewer.LoadFile(const aFileName: String); var i: Integer; aName: String; dwFileAttributes: TFileAttrs; begin FLastSearchPos := -1; Caption := ReplaceHome(aFileName); ViewerControl.FileName := EmptyStr; // Clear text on status bar. for i := 0 to Status.Panels.Count - 1 do Status.Panels[i].Text := ''; dwFileAttributes := mbFileGetAttr(aFileName); if FPS_ISLNK(dwFileAttributes) then begin dwFileAttributes := mbFileGetAttrNoLinks(aFileName); end; if dwFileAttributes = faInvalidAttributes then begin ActivatePanel(pnlFolder); ExitPluginMode; memFolder.Font.Color:= clRed; memFolder.Lines.Text:= rsMsgErrNoFiles; Exit; end; if bQuickView then begin iActiveFile := 0; FileList.Text := aFileName; end; Screen.BeginWaitCursor; try if FPS_ISDIR(dwFileAttributes) then aName:= IncludeTrailingPathDelimiter(aFileName) else begin aName:= aFileName; end; if (FMode > 0) then begin ViewerControl.FileName := aFileName; ActivatePanel(pnlText); FMode:= 0; end else if CheckPlugins(aName) then ActivatePanel(nil) else if FPS_ISDIR(dwFileAttributes) then begin ActivatePanel(pnlFolder); memFolder.Clear; memFolder.Font.Color:= gColors.FilePanel^.ForeColor; memFolder.Lines.Add(rsPropsFolder + ': '); memFolder.Lines.Add(aFileName); memFolder.Lines.Add(''); StartCalcFolderSize; end else if CheckGraphics(aFileName) and LoadGraphics(aFileName) then ActivatePanel(pnlImage) else if CheckOffice(aFileName) then begin ActivatePanel(pnlText); miOffice.Checked:= True; end else if CheckSynEdit(aFileName) and LoadSynEdit(aFileName) then begin ActivatePanel(pnlCode); end else begin ViewerControl.FileName := aFileName; ActivatePanel(pnlText) end; FileName:= aFileName; finally Screen.EndWaitCursor; end; end; procedure TfrmViewer.LoadNextFile(Index: Integer); begin try if bPlugin and FWlxModule.FileParamVSDetectStr(FileList[Index], False) then begin if (FWlxModule.CallListLoadNext(Self.Handle, FileList[Index], PluginShowFlags) <> LISTPLUGIN_ERROR) then begin Status.Panels[sbpFileNr].Text:= Format('%d/%d', [Index + 1, FileList.Count]); FileName:= FileList[Index]; Caption:= ReplaceHome(FFileName); iActiveFile := Index; Exit; end; end; ExitPluginMode; LoadFile(Index); finally if pnlPreview.Visible then DrawPreview.Index:= iActiveFile; end; end; procedure TfrmViewer.LoadNextFile(const aFileName: String); begin if bPlugin and FWlxModule.FileParamVSDetectStr(aFileName, False) then begin if FWlxModule.CallListLoadNext(Self.Handle, aFileName, PluginShowFlags) <> LISTPLUGIN_ERROR then begin Self.FileName:= aFileName; Exit; end; end; ExitPluginMode; ViewerControl.ResetEncoding; LoadFile(aFileName); if ViewerControl.IsFileOpen then begin ViewerControl.GoHome; if (ViewerControl.Mode = vcmText) then ViewerControl.HGoHome; end; if actAutoReload.Checked then cm_AutoReload([]); end; procedure TfrmViewer.LoadFile(iIndex: Integer); var ANewFile: Boolean; begin ANewFile:= iActiveFile <> iIndex; iActiveFile := iIndex; LoadFile(FileList.Strings[iIndex]); btnPaint.Down:= False; btnHightlight.Down:= False; Status.Panels[sbpFileNr].Text:= Format('%d/%d', [iIndex + 1, FileList.Count]); if ANewFile then begin if ViewerControl.IsFileOpen then begin ViewerControl.GoHome; if (ViewerControl.Mode = vcmText) then ViewerControl.HGoHome; end; if actAutoReload.Checked then cm_AutoReload([]); end; end; procedure TfrmViewer.FormResize(Sender: TObject); begin if bPlugin then FWlxModule.ResizeWindow(GetListerRect); end; procedure TfrmViewer.FormShow(Sender: TObject); begin {$IF DEFINED(LCLGTK2)} if not pnlPreview.Visible then begin pnlPreview.Visible:= True; pnlPreview.Visible:= False; end; {$ENDIF} // Was not supposed to be necessary, but this fix a problem with old "hpg_ed" plugin // that needed a resize to be spotted in correct position. Through 27 plugins tried, was the only one required that. :-( FormResize(Self); if miPreview.Checked then begin miPreview.Checked := not (miPreview.Checked); cm_Preview(['']); end; end; procedure TfrmViewer.GifAnimMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbRight then begin pmEditMenu.PopUp; end; end; procedure TfrmViewer.GifAnimMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MDFlag := true; X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); cas:=0; if (button = mbLeft) and btnHightlight.Down then begin if (X>StartX) and (X<=StartX+10) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=1; tmpX:=X-StartX; tmpY:=Y-StartY; end; if (Y>StartY+10) and (Y<=EndY-10) then begin cas:=2; tmpX:=X-StartX; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=3; tmpX:=X-StartX; tmpY:=EndY-Y; end; if (YEndY) then cas:=0; end; if (X>StartX+10) and (X<=EndX-10) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=4; tmpY:=Y-StartY; end; if (Y>StartY+10) and (Y<=EndY-10)then begin cas:=5; tmpX:=X-StartX; tmpY:=Y-StartY; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=6; tmpY:=EndY-Y; end; If (YEndY) then cas:=0; end; if (X>EndX-10) and (X<=EndX) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=7; tmpX := EndX-X; tmpY:=StartY-Y; end; if (Y>StartY+10) and (Y<=EndY-10) then begin cas:=8; tmpX := EndX-X; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=9; tmpX := EndX-X; tmpY:=EndY-Y; end; If (YEndY) then cas:=0; end; if (XEndX) then cas:=0; end; if Button=mbRight then begin pmEditMenu.PopUp; end; if cas=0 then begin StartX := X; StartY := Y; end; if btnPaint.Down then begin CreateTmp; Image.Picture.Bitmap.Canvas.MoveTo (x,y); end; if not (btnHightlight.Down) and not (btnPaint.Down) then begin tmpX:=x; tmpY:=y; Image.Cursor:=crHandPoint; end; end; procedure TfrmViewer.ImageMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.ImageMouseLeave(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=false; end; procedure TfrmViewer.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var tmp: integer; begin if btnHightlight.Down then Image.Cursor:=crCross; if miFullScreen.Checked then begin sboxImage.Cursor:=crDefault; Image.Cursor:=crDefault; i_timer:=0; end; X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); if MDFlag then begin if btnHightlight.Down then begin if cas=0 then begin EndX:=X; EndY:=Y; end; if cas=1 then begin StartX:= X-tmpX; StartY:=Y-tmpY; end; if cas=2 then StartX:= X-tmpX; if cas=3then begin StartX:= X-tmpX; EndY:=Y+tmpY; end; if cas=4 then StartY:=Y-tmpY; if cas=5 then begin tmp:=EndX-StartX; StartX:= X-tmpX; EndX:=StartX+tmp; tmp:=EndY-StartY; StartY:= Y-tmpY; EndY:=StartY+tmp; end; if cas=6 then EndY:=Y+tmpY; if cas=7 then begin EndX:=X+tmpX; StartY:=Y-tmpY; end; if cas=8 then endX:=X+tmpX; if cas=9 then begin EndX:=X+tmpX; EndY:=Y+tmpY; end; if StartX<0 then begin StartX:=0; EndX:= UndoEX; end; if StartY<0 then begin StartY:=0; EndY:= UndoEY; end; if endX> Image.Picture.Width then endX:=Image.Picture.Width; if endY> Image.Picture.Height then endY:=Image.Picture.Height; with Image.Picture.Bitmap.Canvas do begin DrawFocusRect(Rect(UndoSX,UndoSY,UndoEX,UndoEY)); DrawFocusRect(Rect(UndoSX+10,UndoSY+10,UndoEX-10,UndoEY-10)); DrawFocusRect(Rect(StartX,StartY,EndX,EndY)); DrawFocusRect(Rect(StartX+10,StartY+10,EndX-10,EndY-10));//Pen.Mode := pmNotXor; Status.Panels[sbpImageSelection].Text := IntToStr(EndX-StartX)+'x'+IntToStr(EndY-StartY); UndoSX:=StartX; UndoSY:=StartY; UndoEX:=EndX; UndoEY:=EndY; end; end; if btnPaint.Down then begin with Image.Picture.Bitmap.Canvas do begin Brush.Style:= bsClear; Pen.Width := btnPenWidth.Tag; Pen.Color := btnPenColor.ButtonColor; Pen.Style := psSolid; tmp:= Pen.Width+10; case TViewerPaintTool(btnPenMode.Tag) of vptPen: LineTo (x,y); vptRectangle, vptEllipse: begin if (startX>x) and (startYy) then CopyRect (Rect(UndoSX-tmp,UndoSY+tmp,UndoEX+tmp,UndoEY-tmp), tmp_all.canvas,Rect(UndoSX-tmp,UndoSY+tmp,UndoEX+tmp,UndoEY-tmp)); if (startX>x) and (startY>y) then CopyRect (Rect(UndoSX+tmp,UndoSY+tmp,UndoEX-tmp,UndoEY-tmp), tmp_all.canvas,Rect(UndoSX+tmp,UndoSY+tmp,UndoEX-tmp,UndoEY-tmp)) else CopyRect (Rect(UndoSX-tmp,UndoSY-tmp,UndoEX+tmp,UndoEY+tmp), tmp_all.canvas,Rect(UndoSX-tmp,UndoSY-tmp,UndoEX+tmp,UndoEY+tmp));//UndoTmp; case TViewerPaintTool(btnPenMode.Tag) of vptRectangle: Rectangle(Rect(StartX,StartY,X,Y)); vptEllipse:Ellipse(StartX,StartY,X,Y); end; end; end; UndoSX:=StartX; UndoSY:=StartY; UndoEX:=X; UndoEY:=Y; end; end; if not (btnHightlight.Down) and not (btnPaint.Down) then begin sboxImage.VertScrollBar.Position:=sboxImage.VertScrollBar.Position+tmpY-y; sboxImage.HorzScrollBar.Position:=sboxImage.HorzScrollBar.Position+tmpX-x; end; end; end; procedure TfrmViewer.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); MDFlag:=false; if ToolBar1.Visible then begin if (button = mbLeft) and btnHightlight.Down then begin UndoTmp; CheckXY; with Image.Picture.Bitmap.Canvas do begin Brush.Style := bsClear; Pen.Style := psDot; Pen.Color := clHighlight; DrawFocusRect(Rect(StartX,StartY,EndX,EndY)); DrawFocusRect(Rect(StartX+10,StartY+10,EndX-10,EndY-10)); Status.Panels[sbpImageSelection].Text := IntToStr(EndX-StartX)+'x'+IntToStr(EndY-StartY); end; end; end; Image.Cursor:=crDefault; end; procedure TfrmViewer.ImageMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if ssCtrl in Shift then ZoomImage(0.9); end; procedure TfrmViewer.ImageMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if ssCtrl in Shift then ZoomImage(1.1); end; procedure TfrmViewer.miPenClick(Sender: TObject); begin btnPenMode.Tag:= TMenuItem(Sender).Tag; btnPenMode.ImageIndex:= TMenuItem(Sender).ImageIndex; end; procedure TfrmViewer.miLookBookClick(Sender: TObject); begin cm_ShowAsBook(['']); // miLookBook.Checked:=not miLookBook.Checked; end; procedure TfrmViewer.pmEditMenuPopup(Sender: TObject); begin pmiCopyFormatted.Visible:= ViewerControl.Mode in [vcmHex, vcmDec]; end; procedure TfrmViewer.CreatePreview(FullPathToFile: string; index: integer; delete: boolean); var bmpThumb : TBitmap = nil; begin if pnlPreview.Visible or delete then begin if not Assigned(FThumbnailManager) then FThumbnailManager:= TThumbnailManager.Create(DrawPreview.Canvas.Brush.Color); if delete then begin FThumbnailManager.RemovePreview(FullPathToFile); // delete thumb if need if pnlPreview.Visible then begin FileList.Objects[Index].Free; FileList.Objects[Index]:= nil; end; end else begin bmpThumb:= FThumbnailManager.CreatePreview(FullPathToFile); // Insert to the BitmapList FileList.Objects[Index]:= bmpThumb; end; end; end; procedure TfrmViewer.WMCommand(var Message: TLMCommand); var Index: Integer; begin case Message.NotifyCode of itm_center: miCenter.Checked:= Boolean(Message.ItemID); itm_next: begin if Message.ItemID = 0 then cm_LoadNextFile([]); end; itm_wrap: begin gViewerWrapText:= Boolean(Message.ItemID); actWrapText.Checked:= gViewerWrapText; end; itm_fit: begin case Message.ItemID of 0: begin miStretch.Checked:= False; miStretchOnlyLarge.Checked:= False; end; 2, 3: begin miStretch.Checked:= (Message.ItemID = 2); miStretchOnlyLarge.Checked:= (Message.ItemID = 3); end; end; end; itm_fontstyle: begin case Message.ItemID of lcp_ansi: begin FPluginEncoding:= lcp_ansi; Index:= miEncoding.IndexOfCaption(ViewerEncodingsNames[veAnsi]); end; lcp_ascii: begin FPluginEncoding:= lcp_ascii; Index:= miEncoding.IndexOfCaption(ViewerEncodingsNames[veOem]); end; else begin Index:= 0; FPluginEncoding:= 0; end; miEncoding.Items[Index].Checked:= True; ViewerControl.Encoding:= TViewerEncoding(Index); Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end; end; end; end; procedure TfrmViewer.WMSetFocus(var Message: TLMSetFocus); begin if bPlugin then FWlxModule.SetFocus; end; procedure TfrmViewer.CMThemeChanged(var Message: TLMessage); var Highlighter: TSynCustomHighlighter; begin if miCode.Checked then begin Highlighter:= TSynCustomHighlighter(dmHighl.SynHighlighterHashList.Data[SynEdit.Highlighter.LanguageName]); if Assigned(Highlighter) then dmHighl.SetHighlighter(SynEdit, Highlighter); end; end; procedure TfrmViewer.RedEyes; var tmp:TBitMap; x,y,r,g,b: integer; col: TColor; begin if (EndX=StartX) or (EndY=StartY) then Exit; UndoTmp; tmp:=TBitMap.Create; tmp.Width:= EndX-StartX; tmp.Height:= EndY-StartY; for x:=0 to (EndX-StartX) div 2 do begin for y:=0 to (EndY-StartY) div 2 do begin if y100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[x+(EndX-StartX) div 2,y+(EndY-StartY) div 2]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,y+(EndY-StartY) div 2]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX+x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2+x,(EndY-StartY) div 2-y]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,(EndY-StartY) div 2-y]:= rgb(r,g,b); end else begin col:=Image.Picture.Bitmap.Canvas.Pixels[x+StartX+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; tmp.Canvas.Pixels[x+(EndX-StartX) div 2,y+(EndY-StartY) div 2]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,y+(EndY-StartY) div 2]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX+x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2+x,(EndY-StartY) div 2-y]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,(EndY-StartY) div 2-y]:= col; end; end; end; Image.Picture.Bitmap.Canvas.Draw (StartX,StartY,tmp); CreateTmp; tmp.Free; end; procedure TfrmViewer.SynEditCaret; begin if gShowCaret then SynEdit.Options:= SynEdit.Options - [eoNoCaret] else begin SynEdit.Options:= SynEdit.Options + [eoNoCaret]; end; end; procedure TfrmViewer.DeleteCurrentFile; var OldIndex, NewIndex: Integer; begin if (iActiveFile + 1) < FileList.Count then NewIndex := iActiveFile + 1 else begin NewIndex := iActiveFile - 1; end; OldIndex:= iActiveFile; LoadNextFile(NewIndex); CreatePreview(FileList.Strings[OldIndex], OldIndex, True); mbDeleteFile(FileList.Strings[OldIndex]); FileList.Delete(OldIndex); if OldIndex < FileList.Count then iActiveFile := OldIndex else begin iActiveFile := FileList.Count - 1; end; if pnlPreview.Visible then DrawPreview.Index := iActiveFile; actMoveFile.Enabled := FileList.Count > 1; actDeleteFile.Enabled := FileList.Count > 1; DrawPreview.Repaint; SplitterChangeBounds; end; procedure TfrmViewer.EnableCopy(AEnabled: Boolean); begin actSelectAll.Enabled:= AEnabled; actCopyToClipboard.Enabled:= AEnabled; actSelectAll.Visible:= AEnabled; actCopyToClipboard.Visible:= AEnabled; end; procedure TfrmViewer.EnablePrint(AEnabled: Boolean); begin actPrint.Enabled:= AEnabled; actPrint.Visible:= AEnabled; actPrintSetup.Enabled:= AEnabled; actPrintSetup.Visible:= AEnabled; end; procedure TfrmViewer.EnableSearch(AEnabled: Boolean); begin actFind.Enabled:= AEnabled; actFindNext.Enabled:= AEnabled; actFindPrev.Enabled:= AEnabled; actFind.Visible:= AEnabled; actFindNext.Visible:= AEnabled; actFindPrev.Visible:= AEnabled; end; procedure TfrmViewer.EnableActions(AEnabled: Boolean); begin actCopyFile.Enabled:= AEnabled; actSave.Enabled:= AEnabled and bImage; actSaveAs.Enabled:= AEnabled and bImage; actMoveFile.Enabled:= AEnabled and (FileList.Count > 1); actDeleteFile.Enabled:= AEnabled and (FileList.Count > 1); end; procedure TfrmViewer.SavingProperties(Sender: TObject); begin if miFullScreen.Checked then SessionProperties:= EmptyStr; end; procedure TfrmViewer.SetFileName(const AValue: String); begin if actAutoReload.Checked then Status.Panels[sbpFileName].Text:= '* ' + AValue else begin Status.Panels[sbpFileName].Text:= AValue; end; if FFileName <> AValue then begin FFileName:= AValue; MakePluginsMenu; end; UpdatePluginsMenu; end; procedure TfrmViewer.CutToImage; var w,h:integer; begin UndoTmp; with Image.Picture.Bitmap do begin w:=EndX-StartX; h:=EndY-StartY; Canvas.CopyRect(rect(0,0,w,h), Image.Picture.Bitmap.Canvas, rect(startX,StartY,EndX,EndY)); SetSize (w,h); end; Image.Width:=w; Image.Height:=h; CreateTmp; StartX:=0;StartY:=0;EndX:=0;EndY:=0; end; procedure TfrmViewer.UndoTmp; begin Image.Picture.Bitmap.Canvas.Clear; Image.Picture.Bitmap.Canvas.Draw(0,0,tmp_all); end; procedure TfrmViewer.CreateTmp; begin tmp_all.Free; tmp_all:= TBitmap.Create; tmp_all.Assign(Image.Picture.Graphic); end; procedure TfrmViewer.CheckXY; var tmp: integer; begin if EndX mrOk then Exit; Quality:= FModSizeDialog.teQuality.Value; finally FreeAndNil(FModSizeDialog); end; end; end; try fsFileStream:= TFileStreamEx.Create(sFileName, fmCreate); try if (sExt = '.jpg') or (sExt = '.jpeg') then begin with TJpegImage.Create do try // Special case if Image.Picture.Graphic is TJPEGImage then begin LoadFromRawImage(Image.Picture.Jpeg.RawImage, False); end else begin Assign(Image.Picture.Graphic); end; CompressionQuality := Quality; SaveToStream(fsFileStream); finally Free; end; end else if sExt = '.ico' then begin with TIcon.Create do try Assign(Image.Picture.Graphic); SaveToStream(fsFileStream); finally Free; end; end else begin Image.Picture.SaveToStreamWithFileExt(fsFileStream, sExt); end; finally FreeAndNil(fsFileStream); end; except on E: Exception do msgError(E.Message); end; end; procedure TfrmViewer.ImagePaintBackground(ASender: TObject; ACanvas: TCanvas; ARect: TRect); const CELL_SIZE = 8; var X, Y: Integer; begin with gColors.Viewer^ do begin if ImageBackColor2 = clDefault then ACanvas.Brush.Color:= ContrastColor(sboxImage.Color, 30) else begin ACanvas.Brush.Color:= ImageBackColor2; end; end; for Y:= 0 to (ARect.Height div CELL_SIZE) + 1 do begin for X:= 0 to (ARect.Width div CELL_SIZE) + 1 do begin if Odd(X) <> Odd(Y) then begin ACanvas.FillRect(X * CELL_SIZE, Y * CELL_SIZE, (X + 1) * CELL_SIZE, (Y + 1) * CELL_SIZE); end; end; end; end; procedure TfrmViewer.pnlImageResize(Sender: TObject); begin if bImage then AdjustImageSize; end; procedure TfrmViewer.miPluginsClick(Sender: TObject); var ShowFlags: Integer; MenuItem: TMenuItem absolute Sender; begin ExitPluginMode; ShowFlags:= PluginShowFlags or lcp_forceshow; if LoadPlugin(FFileName, MenuItem.Tag, ShowFlags) then begin ActivatePanel(nil); end else begin LoadFile(FFileName); end; end; procedure TfrmViewer.pnlTextMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if Shift=[ssCtrl] then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; pnlText.Font.Size:=gFonts[dcfMain].Size; pnlText.Repaint; Handled:=True; Exit; end; end; procedure TfrmViewer.sboxImageMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.sboxImageMouseLeave(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=false; end; procedure TfrmViewer.sboxImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if miFullScreen.Checked then begin sboxImage.Cursor:=crDefault; Image.Cursor:=crDefault; i_timer:=0; end; end; procedure TfrmViewer.btnNextGifFrameClick(Sender: TObject); begin GifAnim.Animate:=false; GifAnim.NextFrame; end; procedure TfrmViewer.SplitterChangeBounds; begin DrawPreview.CalculateColRowCount; if bPlugin then FWlxModule.ResizeWindow(GetListerRect); end; procedure TfrmViewer.TimerReloadTimer(Sender: TObject); var NewSize: Int64; begin if ViewerControl.IsFileOpen then begin if ViewerControl.FileHandle <> 0 then NewSize:= FileGetSize(ViewerControl.FileHandle) else begin NewSize:= mbFileSize(ViewerControl.FileName); end; if (NewSize <> ViewerControl.FileSize) then begin Screen.BeginWaitCursor; try ViewerControl.FileName := ViewerControl.FileName; ViewerControl.Enabled := Self.Active; try ActivatePanel(pnlText); finally ViewerControl.Enabled := True; end; FLastSearchPos := -1; ViewerControl.GoEnd; finally Screen.EndWaitCursor; end; end; end; end; procedure TfrmViewer.TimerScreenshotTimer(Sender: TObject); begin cm_Screenshot(['']); TimerScreenshot.Enabled:=False; Application.Restore; Self.BringToFront; end; procedure TfrmViewer.DrawPreviewSelection(Sender: TObject; aCol, aRow: Integer); begin LoadNextFile(DrawPreview.Index); end; procedure TfrmViewer.DrawPreviewTopleftChanged(Sender: TObject); begin DrawPreview.LeftCol:= 0; end; procedure TfrmViewer.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin TThumbThread.Finish(FThread); end; procedure TfrmViewer.TimerViewerTimer(Sender: TObject); begin if (miFullScreen.Checked) then begin if (ToolBar1.Visible) and (i_timer > 60) and (not ToolBar1.MouseInClient) then begin ToolBar1.Visible:= False; AdjustImageSize; end else if (not ToolBar1.Visible) and (sboxImage.ScreenToClient(Mouse.CursorPos).Y < ToolBar1.Height div 2) then begin ToolBar1.Visible:= True; AdjustImageSize; end; end; Inc(i_timer); if (btnSlideShow.Down) and (i_timer = 60 * btnSlideShow.Tag) then begin if (ToolBar1.Visible) and (not ToolBar1.MouseInClient) then begin ToolBar1.Visible:= False; AdjustImageSize; end; cm_LoadNextFile([]); i_timer:= 0; end; if i_timer = 180 then begin sboxImage.Cursor:= crNone; Image.Cursor:= crNone; end; end; procedure TfrmViewer.tmUpdateFolderSizeTimer(Sender: TObject); begin if Assigned(FFileSourceCalcStatisticsOperation) then with FFileSourceCalcStatisticsOperation.RetrieveStatistics do begin if Size < 0 then memFolder.Lines[2]:= Format(rsSpaceMsg, [Files, Directories, '???', '???']) else begin memFolder.Lines[2]:= Format(rsSpaceMsg, [Files, Directories, cnvFormatFileSize(Size), IntToStrTS(Size)]); end; end; end; procedure TfrmViewer.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if Assigned(FFileSourceCalcStatisticsOperation) and (State = fsosStopped) then begin tmUpdateFolderSize.Enabled:= False; tmUpdateFolderSizeTimer(tmUpdateFolderSize); FFileSourceCalcStatisticsOperation := nil; end; end; procedure TfrmViewer.ViewerControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then pmEditMenu.PopUp(); end; procedure TfrmViewer.frmViewerClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:=caFree; gImageStretch:= miStretch.Checked; gImageStretchOnlyLarge:= miStretchOnlyLarge.Checked; gImageShowTransparency:= actShowTransparency.Checked; gImageCenter:= miCenter.Checked; gPreviewVisible := miPreview.Checked; gImagePaintMode := TViewerPaintTool(btnPenMode.Tag); gImagePaintWidth := btnPenWidth.Tag; gImagePaintColor := btnPenColor.ButtonColor; case ViewerControl.Mode of vcmText: gViewerMode := 1; vcmWrap: gViewerMode := 1; vcmBin : gViewerMode := 2; vcmHex : gViewerMode := 3; vcmDec : gViewerMode := 6; vcmBook: gTextPosition := ViewerControl.Position; end; if Assigned(WlxPlugins) then ExitPluginMode; {$IF NOT DEFINED(LCLWIN32)} if WindowState = wsFullScreen then WindowState:= wsNormal; {$ENDIF} end; procedure TfrmViewer.UpdateImagePlacement; begin if bPlugin then FWlxModule.CallListSendCommand(lc_newparams , PluginShowFlags) else if bImage then begin if btnHightlight.Down then begin btnPaint.Down:=false; btnHightlight.Down:=false; //gboxView.Visible:=true; UndoTmp; end; AdjustImageSize; end; end; procedure TfrmViewer.StartCalcFolderSize; var aFile: TFile; aFiles: TFiles; AFileSource: IFileSource; begin try aFile:= TFileSystemFileSource.CreateFileFromFile(memFolder.Lines[1]); except Exit; end; aFiles:= TFiles.Create(EmptyStr); try aFiles.Add(aFile); AFileSource:= TFileSystemFileSource.GetFileSource; FFileSourceCalcStatisticsOperation:= AFileSource.CreateCalcStatisticsOperation(aFiles) as TFileSourceCalcStatisticsOperation; if Assigned(FFileSourceCalcStatisticsOperation) then begin FFileSourceCalcStatisticsOperation.SkipErrors:= True; FFileSourceCalcStatisticsOperation.SymLinkOption:= fsooslDontFollow; FFileSourceCalcStatisticsOperation.AddStateChangedListener([fsosStopped], @FileSourceOperationStateChangedNotify); OperationsManager.AddOperation(FFileSourceCalcStatisticsOperation, False); tmUpdateFolderSize.Enabled:= True; end; finally aFiles.Free; end; end; procedure TfrmViewer.StopCalcFolderSize; begin if Assigned(FFileSourceCalcStatisticsOperation) then begin tmUpdateFolderSize.Enabled:= False; FFileSourceCalcStatisticsOperation.RemoveStateChangedListener([fsosStopped], @FileSourceOperationStateChangedNotify); FFileSourceCalcStatisticsOperation.Stop; end; FFileSourceCalcStatisticsOperation:= nil; end; procedure TfrmViewer.FormCreate(Sender: TObject); var Index: Integer; HMViewer: THMForm; MenuItem: TMenuItem; begin if not bQuickView then begin with InitPropStorage(Self) do OnSavingProperties:= @SavingProperties; end else begin miDiv4.Visible:= False; actPreview.Enabled:= False; actPreview.Visible:= False; actScreenshot.Enabled:= False; actFullscreen.Enabled:= False; actScreenShotDelay3Sec.Enabled:= False; actScreenShotDelay5Sec.Enabled:= False; Status.PopupMenu:= pmStatusBar; MainMenu.Items.Remove(miView); MainMenu.Items.Remove(mnuPlugins); MainMenu.Items.Remove(miEncoding); MainMenu.Items.Remove(miImage); pmStatusBar.Items.Add(miView); pmStatusBar.Items.Add(mnuPlugins); pmStatusBar.Items.Add(miEncoding); pmStatusBar.Items.Add(miImage); end; actExitViewer.Enabled:= not bQuickView; HMViewer := HotMan.Register(Self, HotkeysCategory); HMViewer.RegisterActionList(actionList); ViewerControl.OnFileOpen:= @FileOpenUAC; ViewerControl.OnGuessEncoding:= @DetectEncoding; FontOptionsToFont(gFonts[dcfViewer], ViewerControl.Font); FileList := TStringList.Create; FileList.OwnsObjects:= True; WlxPlugins:=TWLXModuleList.Create; WlxPlugins.Assign(gWLXPlugins); FFindDialog:= nil; // dialog is created in first use sboxImage.DoubleBuffered := True; miStretch.Checked := gImageStretch; sboxImage.Color := gColors.Viewer^.ImageBackColor1; miStretchOnlyLarge.Checked := gImageStretchOnlyLarge; miCenter.Checked := gImageCenter; miPreview.Checked := gPreviewVisible; btnPenMode.Tag := Integer(gImagePaintMode); btnPenWidth.Tag := gImagePaintWidth; btnPenColor.ButtonColor := gImagePaintColor; if gImageShowTransparency then begin Image.OnPaintBackground:= @ImagePaintBackground; actShowTransparency.Checked := gImageShowTransparency; end; Image.Stretch:= True; Image.AutoSize:= False; Image.Proportional:= False; Image.SetBounds(0, 0, sboxImage.ClientWidth, sboxImage.ClientHeight); FThumbSize := gThumbSize; DrawPreview.DefaultColWidth := FThumbSize.cx + 4; DrawPreview.DefaultRowHeight := FThumbSize.cy + DrawPreview.Canvas.TextHeight('Pp') + 6; MakeTextEncodingsMenu; Status.Panels[sbpFileNr].Alignment := taRightJustify; Status.Panels[sbpPosition].Alignment := taRightJustify; Status.Panels[sbpFileSize].Alignment := taRightJustify; ViewerPositionChanged(Self); FixFormIcon(Handle); GifAnim.Align:=alClient; for Index:= 1 to 25 do begin MenuItem:= TMenuItem.Create(btnPenWidth); MenuItem.Caption:= IntToStr(Index); MenuItem.OnClick:= @miPaintClick; MenuItem.Tag:= Index; pmPenWidth.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(btnSlideShow); MenuItem.Caption:= IntToStr(Index); MenuItem.OnClick:= @miPaintClick; MenuItem.Tag:= Index; pmTimeShow.Items.Add(MenuItem); end; // SynEdit FSearchOptions.Flags := [ssoEntireScope]; HotMan.Register(pnlText ,'Text files'); HotMan.Register(pnlImage,'Image files'); SavePictureDialog.Filter:= GraphicFilter(TPortableNetworkGraphic) + '|' + GraphicFilter(TBitmap) + '|' + GraphicFilter(TJPEGImage) + '|' + GraphicFilter(TIcon) + '|' + GraphicFilter(TPortableAnyMapGraphic); end; procedure TfrmViewer.FormKeyPress(Sender: TObject; var Key: Char); begin // The following keys work only in QuickView mode because there is no menu there. // Otherwise this function is never called for those keys // because the menu shortcuts are automatically used. if bQuickView then case Key of 'N', 'n': begin cm_LoadNextFile([]); Key := #0; end; 'P', 'p': begin cm_LoadPrevFile([]); Key := #0; end; '1': begin cm_ShowAsText(['']); Key := #0; end; '2': begin cm_ShowAsBin(['']); Key := #0; end; '3': begin cm_ShowAsHex(['']); Key := #0; end; '4': begin cm_ShowAsDec(['']); Key := #0; end; '6': begin cm_ShowGraphics(['']); Key := #0; end; '7': begin cm_ShowPlugins(['']); Key := #0; end; '8': begin cm_ShowOffice(['']); Key := #0; end; end; end; procedure TfrmViewer.btnCutTuImageClick(Sender: TObject); begin CutToImage; end; procedure TfrmViewer.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmViewer.btnFullScreenClick(Sender: TObject); begin cm_Fullscreen(['']); end; procedure TfrmViewer.btnGifMoveClick(Sender: TObject); begin GifAnim.Animate:=not GifAnim.Animate; btnNextGifFrame.Enabled:= not GifAnim.Animate; btnPrevGifFrame.Enabled:= not GifAnim.Animate; if GifAnim.Animate then btnGifMove.ImageIndex:= 11 else begin btnGifMove.ImageIndex:= 12 end; end; procedure TfrmViewer.btnGifToBmpClick(Sender: TObject); begin GifAnim.Animate:=False; Image.Picture.Bitmap.Create; Image.Picture.Bitmap.Width := GifAnim.Width; Image.Picture.Bitmap.Height := GifAnim.Height; Image.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,GifAnim.Width,GifAnim.Height),GifAnim.Canvas,Rect(0,0,GifAnim.Width,GifAnim.Height)); cm_SaveAs(['']); end; procedure TfrmViewer.btnPaintHightlight(Sender: TObject); var bmp: TCustomBitmap = nil; GraphicClass: TGraphicClass; sExt: String; fsFileStream: TFileStreamEx = nil; begin if not ImgEdit then begin try sExt:= ExtractFileExt(FileList.Strings[iActiveFile]); fsFileStream:= TFileStreamEx.Create(FileList.Strings[iActiveFile], fmOpenRead or fmShareDenyNone); GraphicClass := GetGraphicClassForFileExtension(sExt); if (GraphicClass <> nil) and (GraphicClass.InheritsFrom(TCustomBitmap)) then begin Image.DisableAutoSizing; bmp := TCustomBitmap(GraphicClass.Create); bmp.LoadFromStream(fsFileStream); Image.Picture.Bitmap := TBitmap.Create; Image.Picture.Bitmap.Height:= bmp.Height; Image.Picture.Bitmap.Width:= bmp.Width; Image.Picture.Bitmap.Canvas.Draw(0, 0, bmp); Image.EnableAutoSizing; end; finally FreeAndNil(bmp); FreeAndNil(fsFileStream); end; {miStretch.Checked:= False; Image.Stretch:= miStretch.Checked; Image.Proportional:= Image.Stretch; Image.Autosize:= not(miStretch.Checked); AdjustImageSize; } end; if Sender = btnHightlight then begin //btnHightlight.Down := not (btnHightlight.Down); btnPaint.Down:= False; if not btnHightlight.Down then UndoTmp; end else begin if btnHightlight.Down then UndoTmp; // btnPaint.Down:= not (btnPaint.Down); btnHightlight.Down:= False; end; btnCutTuImage.Enabled:= btnHightlight.Down; btnRedEye.Enabled:= btnHightlight.Down; actUndo.Enabled:= btnPaint.Down; btnPenMode.Enabled:= btnPaint.Down; btnPenWidth.Enabled:= btnPaint.Down; btnPenColor.Enabled:= btnPaint.Down; ImgEdit:= True; CreateTmp; end; procedure TfrmViewer.btnPenModeClick(Sender: TObject); begin btnPenMode.Down:= not btnPenMode.Down; end; procedure TfrmViewer.btnPrevGifFrameClick(Sender: TObject); begin GifAnim.Animate:=False; GifAnim.PriorFrame; end; procedure TfrmViewer.btnRedEyeClick(Sender: TObject); begin RedEyes; end; procedure TfrmViewer.btnResizeClick(Sender: TObject); begin FModSizeDialog:= TfrmModView.Create(Self); try FModSizeDialog.pnlQuality.Visible:=false; FModSizeDialog.pnlCopyMoveFile.Visible :=false; FModSizeDialog.pnlSize.Visible:=true; FModSizeDialog.teHeight.Text:= IntToStr(Image.Picture.Bitmap.Height); FModSizeDialog.teWidth.Text := IntToStr(Image.Picture.Bitmap.Width); FModSizeDialog.Caption:= rsViewNewSize; if FModSizeDialog.ShowModal = mrOk then begin Res(StrToInt(FModSizeDialog.teWidth.Text), StrToInt(FModSizeDialog.teHeight.Text)); AdjustImageSize; end; finally FreeAndNil(FModSizeDialog); end; end; procedure TfrmViewer.btnSlideShowClick(Sender: TObject); begin btnSlideShow.Down:= not btnSlideShow.Down; end; procedure TfrmViewer.FormDestroy(Sender: TObject); begin if Assigned(HotMan) then begin HotMan.UnRegister(pnlText); HotMan.UnRegister(pnlImage); end; FreeAndNil(FFindDialog); HotMan.UnRegister(Self); end; procedure TfrmViewer.miPaintClick(Sender: TObject); var MenuItem: TMenuItem absolute Sender; begin MenuItem.Owner.Tag:= MenuItem.Tag; TToolButton(MenuItem.Owner).Caption:= MenuItem.Caption; end; procedure TfrmViewer.ReopenAsTextIfNeeded; begin if bImage or bAnimation or bPlugin or miPlugins.Checked or miOffice.Checked or miCode.Checked then begin Image.Picture := nil; ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; procedure TfrmViewer.UpdatePluginsMenu; var I: Integer; begin for I:= mnuPlugins.Count - 1 downto 0 do begin if mnuPlugins.Items[I].Tag = ActivePlugin then begin mnuPlugins.Items[I].Checked:= True; Exit; end; end; end; procedure TfrmViewer.MakePluginsMenu; var I, J: Integer; MenuItem: TMenuItem; WlxModule: TWlxModule; begin J:= 1; mnuPlugins.Clear; MenuItem:= TMenuItem.Create(mnuPlugins); MenuItem.Caption:= rsDlgButtonNone; MenuItem.RadioItem:= True; MenuItem.Enabled:= False; MenuItem.Checked:= True; MenuItem.GroupIndex:= 2; MenuItem.Tag:= -1; mnuPlugins.Add(MenuItem); for I:= 0 to WlxPlugins.Count - 1 do begin WlxModule:= WlxPlugins.GetWlxModule(I); if not WlxModule.Enabled then Continue; MenuItem:= TMenuItem.Create(mnuPlugins); MenuItem.RadioItem:= True; MenuItem.GroupIndex:= 2; MenuItem.Tag:= I; MenuItem.OnClick:= @miPluginsClick; MenuItem.Caption:= ExtractOnlyFileName(WlxModule.FileName); if WlxModule.FileParamVSDetectStr(FFileName, True) then begin mnuPlugins.Insert(J, MenuItem); Inc(J); end else begin mnuPlugins.Add(MenuItem); end; if ActivePlugin = I then begin MenuItem.Checked:= True; end; end; if (J > 1) and (J < mnuPlugins.Count) then begin MenuItem:= TMenuItem.Create(mnuPlugins); MenuItem.Caption:= '-'; mnuPlugins.Insert(J, MenuItem); end; mnuPlugins.Visible:= (mnuPlugins.Count > 1); end; procedure TfrmViewer.miChangeEncodingClick(Sender: TObject); begin cm_ChangeEncoding([(Sender as TMenuItem).Caption]); end; procedure TfrmViewer.SynEditStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin Status.Panels[sbpPosition].Text:= Format('%d:%d', [SynEdit.CaretX, SynEdit.CaretY]); end; procedure TfrmViewer.SynEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (not gShowCaret) and (Key in [VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT, VK_LEFT, VK_RIGHT]) then begin case Key of VK_UP: SynEdit.Perform(WM_VSCROLL, SB_LINEUP, 0); VK_DOWN: SynEdit.Perform(WM_VSCROLL, SB_LINEDOWN, 0); VK_PRIOR: SynEdit.Perform(WM_VSCROLL, SB_PAGEUP, 0); VK_NEXT: SynEdit.Perform(WM_VSCROLL, SB_PAGEDOWN, 0); VK_LEFT: SynEdit.Perform(WM_HSCROLL, SB_LINELEFT, 0); VK_RIGHT: SynEdit.Perform(WM_HSCROLL, SB_LINERIGHT, 0); end; Key:= 0; end; end; procedure TfrmViewer.SynEditMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); var ALine: Integer; begin if (Shift = [ssCtrl]) then begin if (WheelDelta > 0) and (gFonts[dcfViewer].Size < gFonts[dcfViewer].MaxValue) then begin Handled:= True; Inc(gFonts[dcfViewer].Size); end else if (WheelDelta < 0) and (gFonts[dcfViewer].Size > gFonts[dcfViewer].MinValue) then begin Handled:= True; Dec(gFonts[dcfViewer].Size); end; if Handled then begin ALine:= SynEdit.TopLine; FontOptionsToFont(gFonts[dcfViewer], SynEdit.Font); SynEdit.TopLine:= ALine; SynEdit.Refresh; end; end; end; procedure TfrmViewer.ViewerControlMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift=[ssCtrl])and(gFonts[dcfViewer].Size > gFonts[dcfViewer].MinValue) then begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size-1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; Handled:=True; Exit; end; end; procedure TfrmViewer.ViewerControlMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift=[ssCtrl])and(gFonts[dcfViewer].Size < gFonts[dcfViewer].MaxValue) then begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size+1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; Handled:=True; Exit; end; end; function TfrmViewer.CheckGraphics(const sFileName:String):Boolean; var sExt: String; begin sExt:= LowerCase(ExtractFileExt(sFileName)); Result:= Image.Picture.FindGraphicClassWithFileExt(sExt, False) <> nil; end; // Adjust Image size (width and height) to sboxImage size procedure TfrmViewer.AdjustImageSize; const fmtImageInfo = '%dx%d (%.0f %%)'; var dScaleFactor : Double; iLeft, iTop, iWidth, iHeight : Integer; begin if (Image.Picture = nil) then Exit; if (Image.Picture.Width = 0) or (Image.Picture.Height = 0) then Exit; dScaleFactor:= FZoomFactor / 100; // Place and resize image if (FZoomFactor = 100) and (miStretch.Checked or miStretchOnlyLarge.Checked) then begin dScaleFactor:= Min(sboxImage.ClientWidth / Image.Picture.Width ,sboxImage.ClientHeight / Image.Picture.Height); dScaleFactor:= IfThen((miStretchOnlyLarge.Checked) and (dScaleFactor > 1.0), 1.0, dScaleFactor); end; iWidth:= Trunc(Image.Picture.Width * dScaleFactor); iHeight:= Trunc(Image.Picture.Height * dScaleFactor); if (miCenter.Checked) then begin iLeft:= (sboxImage.ClientWidth - iWidth) div 2; iTop:= (sboxImage.ClientHeight - iHeight) div 2; end else begin iLeft:= 0; iTop:= 0; end; Image.SetBounds(Max(iLeft,0), Max(iTop,0), iWidth , iHeight); // Update scrollbars // TODO: fix - calculations are correct but it seems like scroll bars // are being updated only after a second call to Form.Resize if sboxImage.HandleAllocated then begin if (iLeft < 0) then sboxImage.HorzScrollBar.Position:= -iLeft; if (iTop < 0) then sboxImage.VertScrollBar.Position:= -iTop; end; // Update status bar Status.Panels[sbpCurrentResolution].Text:= Format(fmtImageInfo, [iWidth,iHeight, 100.0 * dScaleFactor]); Status.Panels[sbpFullResolution].Text:= Format(fmtImageInfo, [Image.Picture.Width,Image.Picture.Height, 100.0]); end; function TfrmViewer.GetListerRect: TRect; begin Result:= ClientRect; Dec(Result.Bottom, Status.Height); if Splitter.Visible then begin Inc(Result.Left, Splitter.Left + Splitter.Width); end; end; function TfrmViewer.CheckOffice(const sFileName: String): Boolean; var AText: String; begin Result:= OfficeMask.Matches(sFileName) and LoadFromOffice(sFileName, AText); if Result then begin ViewerControl.Text:= AText; ViewerControl.Mode:= WRAP_MODE[gViewerWrapText]; ViewerControl.Encoding:= veUtf8; end; end; function TfrmViewer.CheckSynEdit(const sFileName: String; bForce: Boolean = False): Boolean; var AFile: TFile; ATemplate: TSearchTemplate; begin if bForce then Result:= True else if (Length(gViewerSynEditMask) = 0) then Result:= False else if not IsMaskSearchTemplate(gViewerSynEditMask) then begin Result:= MatchesMaskList(sFileName, gViewerSynEditMask); end else try ATemplate:= gSearchTemplateList.TemplateByName[gViewerSynEditMask]; if (ATemplate = nil) then Result:= False else begin AFile:= TFileSystemFileSource.CreateFileFromFile(sFileName); try Result:= ATemplate.CheckFile(AFile); finally AFile.Free; end; end; except Exit(False); end; if Result and not bForce then begin if (mbFileSize(sFileName) > (gMaxCodeSize * $100000)) then Exit(False); end; if Result then begin FHighlighter:= GetHighlighterFromFileExt(dmHighl.SynHighlighterList, ExtractFileExt(sFileName)); Result:= Assigned(FHighlighter); end; if Result and not bForce then begin PushPop(FElevate); try Result:= mbFileIsText(sFileName); finally PushPop(FElevate); end; end; end; function TfrmViewer.LoadGraphics(const sFileName:String): Boolean; procedure UpdateToolbar(bImage: Boolean); begin btnHightlight.Enabled:= bImage and (not miFullScreen.Checked); btnPaint.Enabled:= bImage and (not miFullScreen.Checked); btnResize.Enabled:= bImage and (not miFullScreen.Checked); miImage.Visible:= bImage; btnZoomIn.Enabled:= bImage; btnZoomOut.Enabled:= bImage; btn270.Enabled:= bImage; btn90.Enabled:= bImage; btnMirror.Enabled:= bImage; btnZoomSeparator.Enabled:= bImage; btnGifMove.Enabled:= not bImage; btnGifToBmp.Enabled:= not bImage; btnGifSeparator.Enabled:= not bImage; btnNextGifFrame.Enabled:= not bImage; btnPrevGifFrame.Enabled:= not bImage; end; var sExt: String; fsFileHandle: System.THandle; fsFileStream: TFileStreamEx = nil; gifHeader: array[0..5] of AnsiChar; begin Result:= True; FZoomFactor:= 100; sExt:= ExtractOnlyFileExt(sFilename); if SameText(sExt, 'gif') then begin fsFileHandle:= mbFileOpen(sFileName, fmOpenRead or fmShareDenyNone); if (fsFileHandle = feInvalidHandle) then Exit(False); FileRead(fsFileHandle, gifHeader, SizeOf(gifHeader)); FileClose(fsFileHandle); end; // GifAnim supports only GIF89a if gifHeader <> 'GIF89a' then begin Image.Visible:= True; GifAnim.Visible:= False; try fsFileStream:= TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try Image.Picture.LoadFromStreamWithFileExt(fsFileStream, sExt); {$IF DEFINED(LCLGTK2)} // TImage crash on displaying monochrome bitmap on Linux/GTK2 // https://doublecmd.sourceforge.io/mantisbt/view.php?id=2474 // http://bugs.freepascal.org/view.php?id=12362 if Image.Picture.Graphic is TRasterImage then begin if TRasterImage(Image.Picture.Graphic).RawImage.Description.BitsPerPixel = 1 then begin BitmapConvert(TRasterImage(Image.Picture.Graphic)); end; end; {$ENDIF} UpdateToolbar(True); finally FreeAndNil(fsFileStream); end; if gImageExifRotate and SameText(sExt, 'jpg') then begin if FExif.LoadFromFile(sFileName) then begin bImage:= True; case FExif.Orientation of 2: cm_MirrorHorz([]); 3: cm_Rotate180([]); 4: cm_MirrorVert([]); 6: cm_Rotate90([]); 8: cm_Rotate270([]); end; end; end; AdjustImageSize; except on E: Exception do begin DCDebug(E.Message); Exit(False); end; end; end else begin GifAnim.Visible:= True; Image.Visible:= False; try GifAnim.FileName:= sFileName; UpdateToolbar(False); except on E: Exception do begin DCDebug(E.Message); Exit(False); end; end; end; ImgEdit:= False; end; function TfrmViewer.LoadSynEdit(const sFileName: String): Boolean; var Index: Integer; sEncoding: String; Buffer: AnsiString; Reader: TFileStreamUAC; begin if (SynEdit = nil) then begin SynEdit:= TSynEdit.Create(pnlCode); SynEdit.Parent:= pnlCode; SynEdit.Align:= alClient; SynEdit.ReadOnly:= True; SynEdit.PopupMenu:= pmEditMenu; with SynEdit.Gutter.SeparatorPart() do begin MarkupInfo.Background:= clWindow; MarkupInfo.Foreground:= clGrayText; end; with SynEdit.Gutter.LineNumberPart() do begin MarkupInfo.Background:= clBtnFace; MarkupInfo.Foreground:= clBtnText; end; SynEdit.Options:= gEditorSynEditOptions; SynEdit.TabWidth := gEditorSynEditTabWidth; SynEdit.RightEdge := gEditorSynEditRightEdge; FontOptionsToFont(gFonts[dcfViewer], SynEdit.Font); SynEdit.OnKeyDown:= @SynEditKeyDown; SynEdit.OnMouseWheel:= @SynEditMouseWheel; SynEdit.OnStatusChange:= @SynEditStatusChange; SynEditCaret; end; dmHighl.SetHighlighter(SynEdit, FHighlighter); PushPop(FElevate); try Result := False; try Reader := TFileStreamUAC.Create(sFileName, fmOpenRead or fmShareDenyNone); try SetLength(FSynEditOriginalText, Reader.Size); Reader.Read(Pointer(FSynEditOriginalText)^, Length(FSynEditOriginalText)); finally Reader.Free; end; Status.Panels[sbpTextEncoding].Text:= EmptyStr; // Try to detect encoding by first 4 kb of text Buffer := Copy(FSynEditOriginalText, 1, 4096); sEncoding := NormalizeEncoding(DetectEncoding(Buffer)); for Index:= 0 to miEncoding.Count - 1 do begin if SameStr(miEncoding.Items[Index].Hint, sEncoding) then begin miEncoding.Items[Index].Checked:= True; Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + miEncoding.Items[Index].Caption; Break; end; end; // Convert encoding if needed if sEncoding = EncodingUTF8 then Buffer := FSynEditOriginalText else begin if (sEncoding = EncodingUTF16LE) or (sEncoding = EncodingUTF16BE) then begin FSynEditOriginalText := Copy(FSynEditOriginalText, 3, MaxInt); // Skip BOM end; Buffer := ConvertEncoding(FSynEditOriginalText, sEncoding, EncodingUTF8); end; // Load text into editor SynEdit.Lines.Text := Buffer; // Add empty line if needed if (Length(Buffer) > 0) and (Buffer[Length(Buffer)] in [#10, #13]) then SynEdit.Lines.Add(EmptyStr); Result := True; except // Ignore end; finally PushPop(FElevate); end; end; function TfrmViewer.LoadPlugin(const sFileName: String; Index, ShowFlags: Integer): Boolean; var WlxModule: TWlxModule; begin if not WlxPlugins.LoadModule(Index) then Exit(False); WlxModule:= WlxPlugins.GetWlxModule(Index); WlxModule.QuickView:= bQuickView; if WlxModule.CallListLoad(Self.Handle, sFileName, ShowFlags) = 0 then begin WlxModule.UnloadModule; Exit(False); end; ActivePlugin:= Index; FWlxModule:= WlxModule; WlxModule.ResizeWindow(GetListerRect); EnablePrint(WlxModule.CanPrint); // Set focus to plugin window if not bQuickView then WlxModule.SetFocus; UpdatePluginsMenu; Result:= True; end; procedure TfrmViewer.DoSearchCode(bQuickSearch: Boolean; bSearchBackwards: Boolean); var Index: Integer; Options: TTextSearchOptions; begin for Index:= 0 to glsSearchHistory.Count - 1 do begin Options:= TTextSearchOptions(UInt32(UIntPtr(glsSearchHistory.Objects[Index]))); if (tsoHex in Options) then Continue; if (tsoMatchCase in Options) then FSearchOptions.Flags += [ssoMatchCase]; if (tsoRegExpr in Options) then FSearchOptions.Flags += [ssoRegExpr]; FSearchOptions.SearchText:= glsSearchHistory[Index]; Break; end; if (bQuickSearch and gFirstTextSearch) or (not bQuickSearch) then begin if bQuickSearch then begin if bSearchBackwards then FSearchOptions.Flags += [ssoBackwards] else begin FSearchOptions.Flags -= [ssoBackwards]; end; end; ShowSearchReplaceDialog(Self, SynEdit, cbGrayed, FSearchOptions); end else begin if bSearchBackwards then begin SynEdit.SelEnd := SynEdit.SelStart; end; DoSearchReplaceText(SynEdit, False, bSearchBackwards, FSearchOptions); FSearchOptions.Flags -= [ssoEntireScope]; end; end; procedure TfrmViewer.DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); const bNewSearch: Boolean = False; var T: QWord; PAdr: PtrInt; PAnsiAddr: PByte; bTextFound: Boolean; sSearchTextU: String; sSearchTextA: AnsiString; RecodeTable: TRecodeTable; Options: TTextSearchOptions; iSearchParameter: Integer = 0; begin // in first use create dialog if not Assigned(FFindDialog) then FFindDialog:= TfrmFindView.Create(Self); if glsSearchHistory.Count > 0 then begin Options:= TTextSearchOptions(UInt32(UIntPtr(glsSearchHistory.Objects[0]))); if (tsoMatchCase in Options) then FFindDialog.cbCaseSens.Checked:= True; if (tsoRegExpr in Options) then FFindDialog.cbRegExp.Checked:= True; if (tsoHex in Options) then FFindDialog.chkHex.Checked:= True; end; if (bQuickSearch and gFirstTextSearch) or (not bQuickSearch) or (bPlugin and FFindDialog.chkHex.Checked) then begin if bPlugin then begin FFindDialog.chkHex.Checked:= False; // if plugin has specific search dialog if FWlxModule.CallListSearchDialog(0) = LISTPLUGIN_OK then Exit; iSearchParameter:= iSearchParameter or lcs_findfirst; end; FFindDialog.chkHex.Visible:= not bPlugin; FFindDialog.cbRegExp.Visible:= (not bPlugin) and (ViewerControl.FileSize < High(IntPtr)) and ( (ViewerControl.Encoding = veUtf16le) or (not (ViewerControl.Encoding in ViewerEncodingMultiByte)) or (TRegExprU.Available and (ViewerControl.Encoding in [veUtf8, veUtf8bom])) ); if not FFindDialog.cbRegExp.Visible then FFindDialog.cbRegExp.Checked:= False; if FFindDialog.cbRegExp.Checked then bSearchBackwards:= False; FFindDialog.cbBackwards.Checked:= bSearchBackwards; // Load search history FFindDialog.cbDataToFind.Items.Assign(glsSearchHistory); sSearchTextU:= ViewerControl.Selection; if Length(sSearchTextU) > 0 then FFindDialog.cbDataToFind.Text:= sSearchTextU; if FFindDialog.ShowModal <> mrOK then Exit; if FFindDialog.cbDataToFind.Text = '' then Exit; sSearchTextU:= FFindDialog.cbDataToFind.Text; bSearchBackwards:= FFindDialog.cbBackwards.Checked; // Save search history glsSearchHistory.Assign(FFindDialog.cbDataToFind.Items); gFirstTextSearch:= False; end else begin if bPlugin then begin // if plugin has specific search dialog if FWlxModule.CallListSearchDialog(1) = LISTPLUGIN_OK then Exit; end; if glsSearchHistory.Count > 0 then sSearchTextU:= glsSearchHistory[0]; FFindDialog.cbBackwards.Checked:= bSearchBackwards; end; if FFindDialog.cbRegExp.Checked then begin FRegExp.SetInputString(ViewerControl.GetDataAdr, ViewerControl.FileSize) end; if bPlugin then begin if bSearchBackwards then iSearchParameter:= iSearchParameter or lcs_backwards; if FFindDialog.cbCaseSens.Checked then iSearchParameter:= iSearchParameter or lcs_matchcase; FWlxModule.CallListSearchText(sSearchTextU, iSearchParameter); end else if ViewerControl.IsFileOpen then begin T:= GetTickCount64; if bSearchBackwards and FFindDialog.cbRegExp.Checked then begin msgError(rsMsgErrNotSupported); Exit; end; if not FFindDialog.cbRegExp.Checked then begin if not FFindDialog.chkHex.Checked then sSearchTextA:= ViewerControl.ConvertFromUTF8(sSearchTextU) else try sSearchTextA:= HexToBin(sSearchTextU); except on E: EConvertError do begin msgError(E.Message); Exit; end; end; end; // Choose search start position. if FLastSearchPos <> ViewerControl.CaretPos then begin FLastMatchLength := 0; FLastSearchPos := ViewerControl.CaretPos end else if FFindDialog.cbRegExp.Checked then begin if bNewSearch then begin FLastSearchPos := 0; FLastMatchLength := 0; end; end else if not bSearchBackwards then begin iSearchParameter:= Length(sSearchTextA); if bNewSearch then FLastSearchPos := 0 else if FLastSearchPos < ViewerControl.FileSize - iSearchParameter then FLastSearchPos := FLastSearchPos + iSearchParameter; end else begin iSearchParameter:= IfThen(ViewerControl.Encoding in ViewerEncodingDoubleByte, 2, 1); if bNewSearch then FLastSearchPos := ViewerControl.FileSize - 1 else if FLastSearchPos >= iSearchParameter then FLastSearchPos := FLastSearchPos - iSearchParameter; end; bNewSearch := False; if FFindDialog.cbRegExp.Checked then begin FRegExp.ModifierI:= not FFindDialog.cbCaseSens.Checked; try FRegExp.Expression:= sSearchTextU; bTextFound:= FRegExp.Exec(FLastSearchPos + FLastMatchLength + 1); except on E: Exception do begin msgError(StripHotkey(FFindDialog.cbRegExp.Caption) + ': ' + E.Message); Exit; end; end; if bTextFound then begin FLastMatchLength:= FRegExp.MatchLen[0]; FLastSearchPos:= FRegExp.MatchPos[0] - 1; end; end else begin // Using standard search algorithm if hex or case sensitive and multibyte if FFindDialog.chkHex.Checked or (FFindDialog.cbCaseSens.Checked and (ViewerControl.Encoding in ViewerEncodingMultiByte)) then begin PAnsiAddr := PosMem(ViewerControl.GetDataAdr, ViewerControl.FileSize, FLastSearchPos, sSearchTextA, FFindDialog.cbCaseSens.Checked, bSearchBackwards); bTextFound := (PAnsiAddr <> Pointer(-1)); if bTextFound then FLastSearchPos := PAnsiAddr - ViewerControl.GetDataAdr; end // Using special case insensitive UTF-8 search algorithm else if (ViewerControl.Encoding in [veUtf8, veUtf8bom]) then begin PAnsiAddr := PosMemU(ViewerControl.GetDataAdr, ViewerControl.FileSize, FLastSearchPos, sSearchTextA, bSearchBackwards); bTextFound := (PAnsiAddr <> Pointer(-1)); if bTextFound then FLastSearchPos := PAnsiAddr - ViewerControl.GetDataAdr; end // Using special case insensitive UTF-16 search algorithm else if (ViewerControl.Encoding in [veUtf16le, veUtf16be, veUcs2le, veUcs2be]) then begin PAnsiAddr := PosMemW(ViewerControl.GetDataAdr, ViewerControl.FileSize, FLastSearchPos, sSearchTextA, bSearchBackwards, ViewerControl.Encoding in [veUtf16le, veUcs2le]); bTextFound := (PAnsiAddr <> Pointer(-1)); if bTextFound then FLastSearchPos := PAnsiAddr - ViewerControl.GetDataAdr; end // Using very slow search algorithm else if (ViewerControl.Encoding in [veUtf32le, veUtf32be]) then begin PAdr := ViewerControl.FindUtf8Text(FLastSearchPos, sSearchTextU, FFindDialog.cbCaseSens.Checked, bSearchBackwards); bTextFound := (PAdr <> PtrInt(-1)); if bTextFound then FLastSearchPos := PAdr; end // Using special case insensitive single byte encoding search algorithm else if bSearchBackwards then begin RecodeTable:= InitRecodeTable(ViewerControl.EncodingName, FFindDialog.cbCaseSens.Checked); PAnsiAddr := PosMemA(ViewerControl.GetDataAdr, ViewerControl.FileSize, FLastSearchPos, sSearchTextA, FFindDialog.cbCaseSens.Checked, bSearchBackwards, RecodeTable); bTextFound := (PAnsiAddr <> Pointer(-1)); if bTextFound then FLastSearchPos := PAnsiAddr - ViewerControl.GetDataAdr; end // Using very fast Boyer–Moore search algorithm else begin RecodeTable:= InitRecodeTable(ViewerControl.EncodingName, FFindDialog.cbCaseSens.Checked); PAdr := PosMemBoyerMur(ViewerControl.GetDataAdr + FLastSearchPos, ViewerControl.FileSize - FLastSearchPos, sSearchTextA, RecodeTable); bTextFound := (PAdr <> PtrInt(-1)); if bTextFound then FLastSearchPos := PAdr + FLastSearchPos; end; FLastMatchLength:= Length(sSearchTextA); end; if bTextFound then begin DCDebug('Search time: ' + IntToStr(GetTickCount64 - T)); // Text found, show it in ViewerControl if not visible ViewerControl.MakeVisible(FLastSearchPos); // Select found text. ViewerControl.CaretPos := FLastSearchPos; ViewerControl.SelectText(FLastSearchPos, FLastSearchPos + FLastMatchLength); end else begin msgOK(Format(rsViewNotFound, ['"' + sSearchTextU + '"'])); if (ViewerControl.Selection <> sSearchTextU) then begin ViewerControl.SelectText(0, 0); end; bNewSearch := True; FLastMatchLength := 0; FLastSearchPos := ViewerControl.CaretPos; end; end; end; procedure TfrmViewer.MakeTextEncodingsMenu; var I: Integer; mi: TMenuItem; EncodingsList: TStringList; begin miEncoding.Clear; EncodingsList := TStringList.Create; try ViewerControl.GetSupportedEncodings(EncodingsList); for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncoding); mi.Caption:= EncodingsList[I]; mi.Hint:= NormalizeEncoding(mi.Caption); mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 1; mi.Tag:= I; mi.OnClick:= @miChangeEncodingClick; if ViewerControl.EncodingName = EncodingsList[I] then mi.Checked := True; miEncoding.Add(mi); end; finally FreeAndNil(EncodingsList); end; end; procedure TfrmViewer.UpdateTextEncodingsMenu(AType: TEncodingMenu); var I: Integer; Encoding: TViewerEncoding; begin if AType = emViewer then begin for I:= 0 to miEncoding.Count - 1 do begin miEncoding.Items[I].Visible:= True; end; end else if AType = emEditor then begin for I:= 0 to miEncoding.Count - 1 do begin Encoding:= TViewerEncoding(I); miEncoding.Items[I].Visible:= not (Encoding in [veAutoDetect, veUcs2le, veUcs2be, veUtf32le, veUtf32be]); end; end else begin for I:= 0 to miEncoding.Count - 1 do begin Encoding:= TViewerEncoding(I); miEncoding.Items[I].Visible:= Encoding in [veAutoDetect, veAnsi, veOem]; end; end; end; procedure TfrmViewer.ViewerPositionChanged(Sender:TObject); begin if ViewerControl.FileSize > 0 then begin Status.Panels[sbpPosition].Text := cnvFormatFileSize(ViewerControl.Position) + ' (' + IntToStr(ViewerControl.Percent) + ' %)'; end else Status.Panels[sbpPosition].Text:= cnvFormatFileSize(0) + ' (0 %)'; end; procedure TfrmViewer.ActivatePanel(Panel: TPanel); begin bPlugin := (Panel = nil); bAnimation := (Panel = pnlImage) and (GifAnim.Visible); bImage := (Panel = pnlImage) and (bAnimation = False); if Panel <> pnlText then pnlText.Hide; if Panel <> pnlCode then pnlCode.Hide; if Panel <> pnlImage then pnlImage.Hide; if Panel <> pnlFolder then pnlFolder.Hide; if Assigned(Panel) then Panel.Visible := True; if Panel = nil then begin Status.Panels[sbpFileSize].Text:= EmptyStr; Status.Panels[sbpPluginName].Text:= FWlxModule.Name; UpdateTextEncodingsMenu(emPlugin); Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end else if Panel = pnlCode then begin miCode.Checked:= True; UpdateTextEncodingsMenu(emEditor); if (not bQuickView) and CanFocus and SynEdit.CanFocus then SynEdit.SetFocus; Status.Panels[sbpFileSize].Text:= IntToStr(SynEdit.Lines.Count); end else if Panel = pnlText then begin if (not bQuickView) and CanFocus and ViewerControl.CanFocus then ViewerControl.SetFocus; case ViewerControl.Mode of vcmText: miText.Checked := True; vcmWrap: miText.Checked := True; vcmBin: miBin.Checked := True; vcmHex: miHex.Checked := True; vcmDec: miDec.Checked := True; vcmBook: miLookBook.Checked := True; end; UpdateTextEncodingsMenu(emViewer); FRegExp.ChangeEncoding(ViewerControl.EncodingName); Status.Panels[sbpFileSize].Text:= cnvFormatFileSize(ViewerControl.FileSize) + ' (100 %)'; Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end else if Panel = pnlImage then begin pnlImage.TabStop:= True; Status.Panels[sbpTextEncoding].Text:= EmptyStr; if (not bQuickView) and CanFocus and pnlImage.CanFocus then pnlImage.SetFocus; ToolBar1.Visible:= not (bQuickView or (miFullScreen.Checked and not ToolBar1.MouseInClient)); end; miPlugins.Checked := (Panel = nil); miGraphics.Checked := (Panel = pnlImage); miEncoding.Visible := (Panel = pnlText) or (Panel = pnlCode) or (bPlugin and FWlxModule.CanCommand); miAutoReload.Visible := (Panel = pnlText); miImage.Visible := (bImage or (bPlugin and FWlxModule.CanCommand)); miRotate.Visible := bImage; miZoomIn.Visible := bImage; miZoomOut.Visible := bImage; miFullScreen.Visible := (bImage and not bQuickView); miScreenshot.Visible := (bImage and not bQuickView); miSave.Visible := bImage; actSave.Enabled := bImage; miSaveAs.Visible := bImage; actSaveAs.Enabled := bImage; miShowTransparency.Visible := bImage; actGotoLine.Enabled := (Panel = pnlCode); actShowCaret.Enabled := (Panel = pnlText) or (Panel = pnlCode); actWrapText.Enabled := (bPlugin and FWlxModule.CanCommand) or ((Panel = pnlText) and (ViewerControl.Mode in [vcmText, vcmWrap])); miGotoLine.Visible := (Panel = pnlCode); miDiv5.Visible := (Panel = pnlText) or (Panel = pnlCode); pmiSelectAll.Visible := (Panel = pnlText) or (Panel = pnlCode); pmiCopyFormatted.Visible := (Panel = pnlText); EnableCopy((Panel = pnlText) or (Panel = pnlCode) or (bPlugin and FWlxModule.CanCommand)); EnableSearch((Panel = pnlText) or (Panel = pnlCode) or (bPlugin and FWlxModule.CanSearch)); miDiv3.Visible:= actFind.Visible and actCopyToClipboard.Visible; miEdit.Visible:= (actFind.Visible or actCopyToClipboard.Visible); if (Panel <> pnlText) and actAutoReload.Checked then cm_AutoReload([]); StopCalcFolderSize; end; procedure TfrmViewer.cm_About(const Params: array of string); begin MsgOK(rsViewAboutText); end; procedure TfrmViewer.cm_Reload(const Params: array of string); begin ExitPluginMode; LoadFile(iActiveFile); end; procedure TfrmViewer.cm_AutoReload(const Params: array of string); begin actAutoReload.Checked := not actAutoReload.Checked; if actAutoReload.Checked then ViewerControl.GoEnd; TimerReload.Enabled := actAutoReload.Checked; FileName:= FFileName; end; procedure TfrmViewer.cm_LoadNextFile(const Params: array of string); var Index : Integer; begin if not bQuickView then begin Index:= iActiveFile + 1; if Index >= FileList.Count then Index:= 0; LoadNextFile(Index); end; end; procedure TfrmViewer.cm_LoadPrevFile(const Params: array of string); var Index: Integer; begin if not bQuickView then begin Index:= iActiveFile - 1; if Index < 0 then Index:= FileList.Count - 1; LoadNextFile(Index); end; end; procedure TfrmViewer.cm_MoveFile(const Params: array of string); begin if actMoveFile.Enabled then CopyMoveFile(vcmaMove); end; procedure TfrmViewer.cm_CopyFile(const Params: array of string); begin if actCopyFile.Enabled then CopyMoveFile(vcmaCopy); end; procedure TfrmViewer.cm_DeleteFile(const Params: array of string); begin if actDeleteFile.Enabled and msgYesNo(Format(rsMsgDelSel, [FileList.Strings[iActiveFile]])) then begin DeleteCurrentFile; end; end; procedure TfrmViewer.cm_StretchImage(const Params: array of string); begin miStretch.Checked:= not miStretch.Checked; if miStretch.Checked then begin FZoomFactor:= 100; miStretchOnlyLarge.Checked:= False end; UpdateImagePlacement; end; procedure TfrmViewer.cm_StretchOnlyLarge(const Params: array of string); begin miStretchOnlyLarge.Checked:= not miStretchOnlyLarge.Checked; if miStretchOnlyLarge.Checked then miStretch.Checked:= False; UpdateImagePlacement; end; procedure TfrmViewer.cm_ShowTransparency(const Params: array of string); begin gImageShowTransparency:= not gImageShowTransparency; actShowTransparency.Checked:= gImageShowTransparency; if actShowTransparency.Checked then Image.OnPaintBackground:= @ImagePaintBackground else begin Image.OnPaintBackground:= nil; end; Image.Repaint; end; procedure TfrmViewer.cm_Save(const Params: array of string); var sExt: String; begin if actSave.Enabled then begin DrawPreview.BeginUpdate; try CreatePreview(FileList.Strings[iActiveFile], iActiveFile, True); sExt:= ExtractFileExt(FileList.Strings[iActiveFile]); SaveImageAs(sExt, True, gViewerJpegQuality); CreatePreview(FileList.Strings[iActiveFile], iActiveFile); finally DrawPreview.EndUpdate; end; end; end; procedure TfrmViewer.cm_Undo(const Params: array of string); begin if bImage then UndoTmp; end; procedure TfrmViewer.cm_SaveAs(const Params: array of string); var sExt: String; begin if bAnimation or bImage then begin sExt:= EmptyStr; SaveImageAs(sExt, False, gViewerJpegQuality); end; end; procedure TfrmViewer.cm_Rotate90(const Params: array of string); begin if bImage then RotateImage(90); end; procedure TfrmViewer.cm_Rotate180(const Params: array of string); begin if bImage then RotateImage(180); end; procedure TfrmViewer.cm_Rotate270(const Params: array of string); begin if bImage then RotateImage(270); end; procedure TfrmViewer.cm_MirrorHorz(const Params: array of string); begin if bImage then MirrorImage; end; procedure TfrmViewer.cm_MirrorVert(const Params: array of string); begin if bImage then MirrorImage(True); end; procedure TfrmViewer.cm_ImageCenter(const Params: array of string); begin miCenter.Checked:= not miCenter.Checked; UpdateImagePlacement; end; procedure TfrmViewer.cm_Zoom(const Params: array of string); begin if miGraphics.Checked then try ZoomImage(StrToFloat(Params[0])); except // Exit end; end; procedure TfrmViewer.cm_ZoomIn(const Params: array of string); begin if miGraphics.Checked then ZoomImage(1.1) else begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size+1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; end; end; procedure TfrmViewer.cm_ZoomOut(const Params: array of string); begin if miGraphics.Checked then ZoomImage(0.9) else begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size-1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; end; end; procedure TfrmViewer.cm_Fullscreen(const Params: array of string); begin miFullScreen.Checked:= not (miFullScreen.Checked); if miFullScreen.Checked then begin FWindowState:= WindowState; {$IF DEFINED(LCLWIN32)} FWindowBounds.Top:= Top; FWindowBounds.Left:= Left; FWindowBounds.Right:= Width; FWindowBounds.Bottom:= Height; BorderStyle:= bsNone; {$ENDIF} WindowState:= wsFullScreen; Self.Menu:= nil; btnPaint.Down:= false; btnHightlight.Down:=false; ToolBar1.Visible:= False; miStretch.Checked:= True; miStretchOnlyLarge.Checked:= False; if miPreview.Checked then cm_Preview(['']); actFullscreen.ImageIndex:= 25; sboxImage.BorderStyle:= bsNone; end else begin Self.Menu:= MainMenu; {$IFDEF LCLGTK2} WindowState:= wsFullScreen; {$ENDIF} WindowState:= FWindowState; {$IF DEFINED(LCLWIN32)} BorderStyle:= bsSizeable; SetBounds(FWindowBounds.Left, FWindowBounds.Top, FWindowBounds.Right, FWindowBounds.Bottom); {$ENDIF} ToolBar1.Visible:= True; actFullscreen.ImageIndex:= 22; sboxImage.BorderStyle:= bsSingle; end; if ExtractOnlyFileExt(FileList.Strings[iActiveFile]) <> 'gif' then begin btnHightlight.Enabled:= not (miFullScreen.Checked); btnPaint.Enabled:= not (miFullScreen.Checked); btnResize.Enabled:= not (miFullScreen.Checked); end; sboxImage.HorzScrollBar.Visible:= not(miFullScreen.Checked); sboxImage.VertScrollBar.Visible:= not(miFullScreen.Checked); TimerViewer.Enabled:=miFullScreen.Checked; btnReload.Enabled:=not(miFullScreen.Checked); Status.Visible:=not(miFullScreen.Checked); btnSlideShow.Visible:=miFullScreen.Checked; AdjustImageSize; ShowOnTop; end; procedure TfrmViewer.cm_Screenshot(const Params: array of string); var ScreenDC: HDC; bmp: TCustomBitmap; begin Visible:= False; Application.ProcessMessages; // Hide viewer window bmp := TBitmap.Create; ScreenDC := GetDC(0); bmp.LoadFromDevice(ScreenDC); ReleaseDC(0, ScreenDC); Image.Picture.Bitmap.Height:= bmp.Height; Image.Picture.Bitmap.Width:= bmp.Width; Image.Picture.Bitmap.Canvas.Draw(0, 0, bmp); CreateTmp; bmp.Free; Visible:= True; ImgEdit:= True; end; procedure TfrmViewer.cm_ScreenshotWithDelay(const Params: array of string); var i:integer; begin i:=StrToInt(Params[0]); i:=i*1000; TimerScreenshot.Interval:=i; TimerScreenshot.Enabled:=True; end; procedure TfrmViewer.cm_ScreenshotDelay3sec(const Params: array of string); begin cm_ScreenshotWithDelay(['3']); end; procedure TfrmViewer.cm_ScreenshotDelay5sec(const Params: array of string); begin cm_ScreenshotWithDelay(['5']); end; procedure TfrmViewer.cm_ChangeEncoding(const Params: array of string); var Encoding: String; MenuItem: TMenuItem; begin if miEncoding.Visible and (Length(Params) > 0) then begin MenuItem:= miEncoding.Find(Params[0]); if Assigned(MenuItem) then begin MenuItem.Checked := True; Encoding:= NormalizeEncoding(Params[0]); if miCode.Checked then begin SynEdit.Lines.Text:= ConvertEncoding(FSynEditOriginalText, Encoding, EncodingUTF8); Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + MenuItem.Caption; end else begin if bPlugin then begin if (Encoding = EncodingAnsi) then FPluginEncoding:= lcp_ansi else if (Encoding = EncodingOem) then FPluginEncoding:= lcp_ascii else begin FPluginEncoding:= 0; end; FWlxModule.CallListSendCommand(lc_newparams, PluginShowFlags); end; FRegExp.ChangeEncoding(Encoding); ViewerControl.EncodingName := Encoding; Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end; end; end; end; procedure TfrmViewer.cm_CopyToClipboard(const Params: array of string); begin if miCode.Checked then SynEdit.CopyToClipboard else if bPlugin then FWlxModule.CallListSendCommand(lc_copy, 0) else begin if (miGraphics.Checked)and(Image.Picture<>nil)and(Image.Picture.Bitmap<>nil)then begin if not bAnimation then Clipboard.Assign(Image.Picture) else Clipboard.Assign(GifAnim.GifBitmaps[GifAnim.GifIndex].Bitmap); end else ViewerControl.CopyToClipboard; end; end; procedure TfrmViewer.cm_CopyToClipboardFormatted(const Params: array of string); begin if ViewerControl.Mode in [vcmHex, vcmDec] then ViewerControl.CopyToClipboardF; end; procedure TfrmViewer.cm_SelectAll(const Params: array of string); begin if miCode.Checked then SynEdit.SelectAll else if bPlugin then FWlxModule.CallListSendCommand(lc_selectall, 0) else begin ViewerControl.SelectAll; end; end; procedure TfrmViewer.cm_Find(const Params: array of string); var bSearchBackwards: Boolean; begin if miCode.Checked then begin DoSearchCode(False, ssoBackwards in FSearchOptions.Flags); end else if not miGraphics.Checked then begin if (FFindDialog = nil) then bSearchBackwards:= False else begin bSearchBackwards:= FFindDialog.cbBackwards.Checked; end; DoSearch(False, bSearchBackwards); end; end; procedure TfrmViewer.cm_FindNext(const Params: array of string); begin if miCode.Checked then begin DoSearchCode(True, False); end else if not miGraphics.Checked then begin DoSearch(True, False); end; end; procedure TfrmViewer.cm_FindPrev(const Params: array of string); begin if miCode.Checked then begin DoSearchCode(True, True); end else if not miGraphics.Checked then begin DoSearch(True, True); end; end; procedure TfrmViewer.cm_GotoLine(const Params: array of string); var P: TPoint; Value: String; NewTopLine: Integer; begin if ShowInputQuery(rsEditGotoLineTitle, rsEditGotoLineQuery, Value) then begin P.X := 1; P.Y := StrToIntDef(Value, 1); NewTopLine := P.Y - (SynEdit.LinesInWindow div 2); if NewTopLine < 1 then NewTopLine:= 1; SynEdit.CaretXY := P; SynEdit.TopLine := NewTopLine; SynEdit.SetFocus; end; end; procedure TfrmViewer.cm_Preview(const Params: array of string); begin if not actPreview.Enabled then Exit; miPreview.Checked:= not (miPreview.Checked); pnlPreview.Visible := miPreview.Checked; Splitter.Visible := pnlPreview.Visible; if miPreview.Checked then FThread:= TThumbThread.Create(Self) else begin TThumbThread.Finish(FThread); end; if bPlugin then FWlxModule.ResizeWindow(GetListerRect); end; procedure TfrmViewer.cm_ShowAsText(const Params: array of string); begin ShowTextViewer(WRAP_MODE[gViewerWrapText]); end; procedure TfrmViewer.cm_ShowAsBin(const Params: array of string); begin ShowTextViewer(vcmBin); end; procedure TfrmViewer.cm_ShowAsHex(const Params: array of string); begin ShowTextViewer(vcmHex); end; procedure TfrmViewer.cm_ShowAsDec(const Params: array of string); begin ShowTextViewer(vcmDec); end; procedure TfrmViewer.cm_ShowAsWrapText(const Params: array of string); begin gViewerWrapText:= True; actWrapText.Checked:= True; ShowTextViewer(vcmWrap); end; procedure TfrmViewer.cm_ShowAsBook(const Params: array of string); begin ShowTextViewer(vcmBook); end; procedure TfrmViewer.cm_ShowGraphics(const Params: array of string); begin if CheckGraphics(FileList.Strings[iActiveFile]) then begin ExitPluginMode; ViewerControl.FileName := ''; // unload current file if any is loaded if LoadGraphics(FileList.Strings[iActiveFile]) then ActivatePanel(pnlImage) else begin ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; end; procedure TfrmViewer.cm_ShowPlugins(const Params: array of string); var Index: Integer; begin Index := ActivePlugin; ExitPluginMode; ActivePlugin := Index; bPlugin:= CheckPlugins(FileList.Strings[iActiveFile], True); if bPlugin then begin ViewerControl.FileName := ''; // unload current file if any is loaded ActivatePanel(nil); end; end; procedure TfrmViewer.cm_ShowOffice(const Params: array of string); begin if CheckOffice(FileList.Strings[iActiveFile]) then begin ExitPluginMode; ActivatePanel(pnlText); miOffice.Checked:= True; end; end; procedure TfrmViewer.cm_ShowCode(const Params: array of string); begin if CheckSynEdit(FileList.Strings[iActiveFile], True) then begin ExitPluginMode; ViewerControl.FileName := ''; // unload current file if any is loaded if LoadSynEdit(FileList.Strings[iActiveFile]) then ActivatePanel(pnlCode) else begin ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; end; procedure TfrmViewer.cm_ExitViewer(const Params: array of string); begin if not bQuickView then Close; end; procedure TfrmViewer.cm_Print(const Params: array of string); begin if bPlugin and actPrint.Enabled then FWlxModule.CallListPrint(ExtractFileName(FileList.Strings[iActiveFile]), '', 0, gPrintMargins); end; procedure TfrmViewer.cm_PrintSetup(const Params: array of string); begin if bPlugin and actPrintSetup.Enabled then begin with TfrmPrintSetup.Create(Self) do try ShowModal; finally Free; end; end; end; procedure TfrmViewer.cm_ShowCaret(const Params: array of string); begin if not miGraphics.Checked then begin gShowCaret:= not gShowCaret; actShowCaret.Checked:= gShowCaret; ViewerControl.ShowCaret:= gShowCaret; if Assigned(SynEdit) then SynEditCaret; end; end; procedure TfrmViewer.cm_WrapText(const Params: array of string); begin gViewerWrapText:= not gViewerWrapText; actWrapText.Checked:= gViewerWrapText; if bPlugin then FWlxModule.CallListSendCommand(lc_newparams, PluginShowFlags) else if not miGraphics.Checked then begin if ViewerControl.Mode in [vcmText, vcmWrap] then begin ViewerControl.Mode:= WRAP_MODE[gViewerWrapText]; end; end; end; initialization TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer); end. doublecmd-1.1.30/src/fviewer.lrj0000644000175000001440000003007615104114162015542 0ustar alexxusers{"version":1,"strings":[ {"hash":97504706,"name":"tfrmviewer.caption","sourcebytes":[86,105,101,119,101,114],"value":"Viewer"}, {"hash":226526597,"name":"tfrmviewer.btnprevgifframe.hint","sourcebytes":[80,114,101,118,105,111,117,115,32,70,114,97,109,101],"value":"Previous Frame"}, {"hash":105434309,"name":"tfrmviewer.btnnextgifframe.hint","sourcebytes":[78,101,120,116,32,70,114,97,109,101],"value":"Next Frame"}, {"hash":42136229,"name":"tfrmviewer.btngiftobmp.hint","sourcebytes":[69,120,112,111,114,116,32,70,114,97,109,101],"value":"Export Frame"}, {"hash":234009348,"name":"tfrmviewer.btnhightlight.hint","sourcebytes":[72,105,103,104,108,105,103,104,116],"value":"Highlight"}, {"hash":305504,"name":"tfrmviewer.btncuttuimage.hint","sourcebytes":[67,114,111,112],"value":"Crop"}, {"hash":191154755,"name":"tfrmviewer.btnredeye.hint","sourcebytes":[82,101,100,32,69,121,101,115],"value":"Red Eyes"}, {"hash":5668948,"name":"tfrmviewer.btnpaint.hint","sourcebytes":[80,97,105,110,116],"value":"Paint"}, {"hash":49,"name":"tfrmviewer.btnpenwidth.caption","sourcebytes":[49],"value":"1"}, {"hash":93102341,"name":"tfrmviewer.btnresize.hint","sourcebytes":[82,101,115,105,122,101],"value":"Resize"}, {"hash":97995102,"name":"tfrmviewer.btnfullscreen.hint","sourcebytes":[70,117,108,108,32,83,99,114,101,101,110],"value":"Full Screen"}, {"hash":175127959,"name":"tfrmviewer.btnslideshow.caption","sourcebytes":[83,108,105,100,101,32,83,104,111,119],"value":"Slide Show"}, {"hash":2805797,"name":"tfrmviewer.mifile.caption","sourcebytes":[38,70,105,108,101],"value":"&File"}, {"hash":2800388,"name":"tfrmviewer.miedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":2871239,"name":"tfrmviewer.miview.caption","sourcebytes":[38,86,105,101,119],"value":"&View"}, {"hash":121364483,"name":"tfrmviewer.mnuplugins.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":212198471,"name":"tfrmviewer.miencoding.caption","sourcebytes":[69,110,38,99,111,100,105,110,103],"value":"En&coding"}, {"hash":45103061,"name":"tfrmviewer.miimage.caption","sourcebytes":[38,73,109,97,103,101],"value":"&Image"}, {"hash":93759653,"name":"tfrmviewer.mirotate.caption","sourcebytes":[82,111,116,97,116,101],"value":"Rotate"}, {"hash":197133796,"name":"tfrmviewer.miscreenshot.caption","sourcebytes":[83,99,114,101,101,110,115,104,111,116],"value":"Screenshot"}, {"hash":4691652,"name":"tfrmviewer.miabout.caption","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":169503854,"name":"tfrmviewer.actabout.caption","sourcebytes":[65,98,111,117,116,32,86,105,101,119,101,114,46,46,46],"value":"About Viewer..."}, {"hash":27368309,"name":"tfrmviewer.actabout.hint","sourcebytes":[68,105,115,112,108,97,121,115,32,116,104,101,32,65,98,111,117,116,32,109,101,115,115,97,103,101],"value":"Displays the About message"}, {"hash":93074804,"name":"tfrmviewer.actreload.caption","sourcebytes":[82,101,108,111,97,100],"value":"Reload"}, {"hash":185139637,"name":"tfrmviewer.actreload.hint","sourcebytes":[82,101,108,111,97,100,32,99,117,114,114,101,110,116,32,102,105,108,101],"value":"Reload current file"}, {"hash":2837748,"name":"tfrmviewer.actloadnextfile.caption","sourcebytes":[38,78,101,120,116],"value":"&Next"}, {"hash":168992725,"name":"tfrmviewer.actloadnextfile.hint","sourcebytes":[76,111,97,100,32,78,101,120,116,32,70,105,108,101],"value":"Load Next File"}, {"hash":147647923,"name":"tfrmviewer.actloadprevfile.caption","sourcebytes":[38,80,114,101,118,105,111,117,115],"value":"&Previous"}, {"hash":250443285,"name":"tfrmviewer.actloadprevfile.hint","sourcebytes":[76,111,97,100,32,80,114,101,118,105,111,117,115,32,70,105,108,101],"value":"Load Previous File"}, {"hash":208968773,"name":"tfrmviewer.actmovefile.caption","sourcebytes":[77,111,118,101,32,70,105,108,101],"value":"Move File"}, {"hash":208968773,"name":"tfrmviewer.actmovefile.hint","sourcebytes":[77,111,118,101,32,70,105,108,101],"value":"Move File"}, {"hash":129271365,"name":"tfrmviewer.actcopyfile.caption","sourcebytes":[67,111,112,121,32,70,105,108,101],"value":"Copy File"}, {"hash":129271365,"name":"tfrmviewer.actcopyfile.hint","sourcebytes":[67,111,112,121,32,70,105,108,101],"value":"Copy File"}, {"hash":171839205,"name":"tfrmviewer.actdeletefile.caption","sourcebytes":[68,101,108,101,116,101,32,70,105,108,101],"value":"Delete File"}, {"hash":171839205,"name":"tfrmviewer.actdeletefile.hint","sourcebytes":[68,101,108,101,116,101,32,70,105,108,101],"value":"Delete File"}, {"hash":179882696,"name":"tfrmviewer.actstretchimage.caption","sourcebytes":[83,116,114,101,116,99,104],"value":"Stretch"}, {"hash":16317717,"name":"tfrmviewer.actstretchimage.hint","sourcebytes":[83,116,114,101,116,99,104,32,73,109,97,103,101],"value":"Stretch Image"}, {"hash":122542542,"name":"tfrmviewer.actsaveas.caption","sourcebytes":[83,97,118,101,32,65,115,46,46,46],"value":"Save As..."}, {"hash":188537006,"name":"tfrmviewer.actsaveas.hint","sourcebytes":[83,97,118,101,32,70,105,108,101,32,65,115,46,46,46],"value":"Save File As..."}, {"hash":185280,"name":"tfrmviewer.actrotate90.caption","sourcebytes":[43,32,57,48],"value":"+ 90"}, {"hash":134668547,"name":"tfrmviewer.actrotate90.hint","sourcebytes":[82,111,116,97,116,101,32,43,57,48,32,100,101,103,114,101,101,115],"value":"Rotate +90 degrees"}, {"hash":2962608,"name":"tfrmviewer.actrotate180.caption","sourcebytes":[43,32,49,56,48],"value":"+ 180"}, {"hash":136089859,"name":"tfrmviewer.actrotate180.hint","sourcebytes":[82,111,116,97,116,101,32,49,56,48,32,100,101,103,114,101,101,115],"value":"Rotate 180 degrees"}, {"hash":193472,"name":"tfrmviewer.actrotate270.caption","sourcebytes":[45,32,57,48],"value":"- 90"}, {"hash":142139651,"name":"tfrmviewer.actrotate270.hint","sourcebytes":[82,111,116,97,116,101,32,45,57,48,32,100,101,103,114,101,101,115],"value":"Rotate -90 degrees"}, {"hash":111502873,"name":"tfrmviewer.actmirrorhorz.caption","sourcebytes":[77,105,114,114,111,114,32,72,111,114,105,122,111,110,116,97,108,108,121],"value":"Mirror Horizontally"}, {"hash":88119650,"name":"tfrmviewer.actmirrorhorz.hint","sourcebytes":[77,105,114,114,111,114],"value":"Mirror"}, {"hash":126668695,"name":"tfrmviewer.actpreview.caption","sourcebytes":[80,114,101,118,105,101,119],"value":"Preview"}, {"hash":215824932,"name":"tfrmviewer.actshowastext.caption","sourcebytes":[83,104,111,119,32,97,115,32,38,84,101,120,116],"value":"Show as &Text"}, {"hash":231588254,"name":"tfrmviewer.actshowasbin.caption","sourcebytes":[83,104,111,119,32,97,115,32,38,66,105,110],"value":"Show as &Bin"}, {"hash":231589800,"name":"tfrmviewer.actshowashex.caption","sourcebytes":[83,104,111,119,32,97,115,32,38,72,101,120],"value":"Show as &Hex"}, {"hash":366789,"name":"tfrmviewer.actsave.caption","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":216582201,"name":"tfrmviewer.actmirrorvert.caption","sourcebytes":[77,105,114,114,111,114,32,86,101,114,116,105,99,97,108,108,121],"value":"Mirror Vertically"}, {"hash":4710148,"name":"tfrmviewer.actexitviewer.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, {"hash":125591877,"name":"tfrmviewer.actstretchonlylarge.caption","sourcebytes":[83,116,114,101,116,99,104,32,111,110,108,121,32,108,97,114,103,101],"value":"Stretch only large"}, {"hash":77355714,"name":"tfrmviewer.actimagecenter.caption","sourcebytes":[67,101,110,116,101,114],"value":"Center"}, {"hash":398941,"name":"tfrmviewer.actzoom.caption","sourcebytes":[90,111,111,109],"value":"Zoom"}, {"hash":23458974,"name":"tfrmviewer.actzoomin.caption","sourcebytes":[90,111,111,109,32,73,110],"value":"Zoom In"}, {"hash":23458974,"name":"tfrmviewer.actzoomin.hint","sourcebytes":[90,111,111,109,32,73,110],"value":"Zoom In"}, {"hash":106909908,"name":"tfrmviewer.actzoomout.caption","sourcebytes":[90,111,111,109,32,79,117,116],"value":"Zoom Out"}, {"hash":106909908,"name":"tfrmviewer.actzoomout.hint","sourcebytes":[90,111,111,109,32,79,117,116],"value":"Zoom Out"}, {"hash":97995102,"name":"tfrmviewer.actfullscreen.caption","sourcebytes":[70,117,108,108,32,83,99,114,101,101,110],"value":"Full Screen"}, {"hash":197133796,"name":"tfrmviewer.actscreenshot.caption","sourcebytes":[83,99,114,101,101,110,115,104,111,116],"value":"Screenshot"}, {"hash":192920371,"name":"tfrmviewer.actscreenshotdelay3sec.caption","sourcebytes":[68,101,108,97,121,32,51,32,115,101,99],"value":"Delay 3 sec"}, {"hash":192789299,"name":"tfrmviewer.actscreenshotdelay5sec.caption","sourcebytes":[68,101,108,97,121,32,53,32,115,101,99],"value":"Delay 5 sec"}, {"hash":231588819,"name":"tfrmviewer.actshowasdec.caption","sourcebytes":[83,104,111,119,32,97,115,32,38,68,101,99],"value":"Show as &Dec"}, {"hash":99253012,"name":"tfrmviewer.actshowaswraptext.caption","sourcebytes":[83,104,111,119,32,97,115,32,38,87,114,97,112,32,116,101,120,116],"value":"Show as &Wrap text"}, {"hash":213017739,"name":"tfrmviewer.actshowasbook.caption","sourcebytes":[83,104,111,119,32,97,115,32,66,38,111,111,107],"value":"Show as B&ook"}, {"hash":143059779,"name":"tfrmviewer.actshowgraphics.caption","sourcebytes":[71,114,97,112,104,105,99,115],"value":"Graphics"}, {"hash":132775577,"name":"tfrmviewer.actshowoffice.caption","sourcebytes":[79,102,102,105,99,101,32,88,77,76,32,40,116,101,120,116,32,111,110,108,121,41],"value":"Office XML (text only)"}, {"hash":121364483,"name":"tfrmviewer.actshowplugins.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":93615908,"name":"tfrmviewer.actcopytoclipboard.caption","sourcebytes":[67,111,112,121,32,84,111,32,67,108,105,112,98,111,97,114,100],"value":"Copy To Clipboard"}, {"hash":1794964,"name":"tfrmviewer.actcopytoclipboardformatted.caption","sourcebytes":[67,111,112,121,32,84,111,32,67,108,105,112,98,111,97,114,100,32,70,111,114,109,97,116,116,101,100],"value":"Copy To Clipboard Formatted"}, {"hash":195288076,"name":"tfrmviewer.actselectall.caption","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"}, {"hash":315460,"name":"tfrmviewer.actfind.caption","sourcebytes":[70,105,110,100],"value":"Find"}, {"hash":73859572,"name":"tfrmviewer.actfindnext.caption","sourcebytes":[70,105,110,100,32,110,101,120,116],"value":"Find next"}, {"hash":97034739,"name":"tfrmviewer.actfindprev.caption","sourcebytes":[70,105,110,100,32,112,114,101,118,105,111,117,115],"value":"Find previous"}, {"hash":102945374,"name":"tfrmviewer.actgotoline.caption","sourcebytes":[71,111,116,111,32,76,105,110,101,46,46,46],"value":"Goto Line..."}, {"hash":185950757,"name":"tfrmviewer.actgotoline.hint","sourcebytes":[71,111,116,111,32,76,105,110,101],"value":"Goto Line"}, {"hash":216568103,"name":"tfrmviewer.actchangeencoding.caption","sourcebytes":[67,104,97,110,103,101,32,101,110,99,111,100,105,110,103],"value":"Change encoding"}, {"hash":96796260,"name":"tfrmviewer.actautoreload.caption","sourcebytes":[65,117,116,111,32,82,101,108,111,97,100],"value":"Auto Reload"}, {"hash":216689422,"name":"tfrmviewer.actprintsetup.caption","sourcebytes":[80,114,105,110,116,32,38,115,101,116,117,112,46,46,46],"value":"Print &setup..."}, {"hash":151339998,"name":"tfrmviewer.actprint.caption","sourcebytes":[80,38,114,105,110,116,46,46,46],"value":"P&rint..."}, {"hash":36280978,"name":"tfrmviewer.actshowcaret.caption","sourcebytes":[83,104,111,119,32,116,101,120,116,32,99,38,117,114,115,111,114],"value":"Show text c&ursor"}, {"hash":136647284,"name":"tfrmviewer.actwraptext.caption","sourcebytes":[38,87,114,97,112,32,116,101,120,116],"value":"&Wrap text"}, {"hash":110327497,"name":"tfrmviewer.actshowtransparency.caption","sourcebytes":[83,104,111,119,32,116,114,97,110,115,112,97,114,101,110,99,38,121],"value":"Show transparenc&y"}, {"hash":378031,"name":"tfrmviewer.actundo.caption","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":378031,"name":"tfrmviewer.actundo.hint","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":304549,"name":"tfrmviewer.actshowcode.caption","sourcebytes":[67,111,100,101],"value":"Code"}, {"hash":22206,"name":"tfrmviewer.mipen.caption","sourcebytes":[80,101,110],"value":"Pen"}, {"hash":363428,"name":"tfrmviewer.mirect.caption","sourcebytes":[82,101,99,116],"value":"Rect"}, {"hash":204670933,"name":"tfrmviewer.miellipse.caption","sourcebytes":[69,108,108,105,112,115,101],"value":"Ellipse"} ]} doublecmd-1.1.30/src/fviewer.lfm0000755000175000001440000022646115104114162015541 0ustar alexxusersobject frmViewer: TfrmViewer Left = 930 Height = 366 Top = 427 Width = 521 HorzScrollBar.Page = 951 VertScrollBar.Page = 491 Caption = 'Viewer' ClientHeight = 366 ClientWidth = 521 Constraints.MinHeight = 100 Constraints.MinWidth = 200 Icon.Data = { CE1E000000000100030010100000010020006804000036000000181800000100 2000880900009E0400002020000001002000A8100000260E0000280000001000 0000200000000100200000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000959595B4818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF959595A8000000000000 0000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0 F0FFF0F0F0FFF1F1F1FFF2F2F2FFF2F2F2FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEDEDEDFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFF2F2F2FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FF927A6DFF927B6EFF937B6EFF8F79 6DFF867469FF847368FFCF9F72FFF1F1F1FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FFAD9889FFAE9989FFAF9A8AFF948C 86FF948C86FFA29489FFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FFCCC2A8FFD6F1EDFFC4D4C0FFD8B8 9AFFD8B89AFFD8B89AFFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDED EDFFE5EDEDFFECECECFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFC5C5C5FFC6C6C6FFC6C6C6FFC6C6C6FFC6C6 C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFFECEC ECFFEDEDEDFFEDEDEDFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEAEAEAFFC4C4C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6 C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEB EBFFECECECFFECECECFFEDEDEDFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF000000000000 0000999999AC818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF81818156000000000000 0000FFFF00000003000000030000000300000003000000030000000300000003 0000000300000003000000030000000300000003000000030000000300000003 0000280000001800000030000000010020000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0004000000100000001D0000002A000000360000004100000043000000460000 0045000000400000003700000026000000180000000D00000004000000010000 0000000000000000000000000000000000000000000083888683858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF696C6B620000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE8E8 E8FFEBEBEBFFE9E9E9FFEBEAEAFFECECECFFEDEDECFFEDEEEEFFEFEEEFFFF0F0 F0FFF1F2F1FFF2F2F3FFF3F4F3FFF4F5F5FFF5F6F5FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE8E8 E8FFEBEBEBFFE9E9E9FFE9E9E9FFEBEAEAFFEBEBEBFFECEDECFFEEEDEDFFEEEF EEFFF0F0F0FFF2F2F2FFF3F3F3FFF4F4F4FFF5F4F5FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE8E8 E8FFEAEAEAFFE8E8E9FFA9ACAAFFA9ACABFFAAADACFFAAADACFFABAEACFFABAE ADFFABAFADFFACAFADFFF2F2F2FFF3F3F3FFF4F4F3FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE8E8 E8FFEAEAEAFFE8E8E8FFE8E9E9FFEAEAE9FFEBEBEBFFECECECFFEDEDEDFFEDEE EEFFEFEEEFFFF0F0F0FFF0F1F0FFF2F2F2FFF3F3F2FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE7E7 E7FFFFFFFFFFE8E8E9FFA9ACAAFFA9ACABFFAAACACFFAAADACFFAAAEACFFAAAE ACFFABAEADFFABAEADFFABAFADFFABAFADFFF1F1F1FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFADAF AEFFE9E9E9FFE8E8E8FFE8E8E8FFE9E9E9FFEAEAEAFFEAEBEBFFEBECECFFECEC ECFFEDEDEDFFEEEEEEFFEEEEEEFFF0F0F0FFF0F0EFFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE6E6 E6FFE9E9E9FFE7E8E7FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFEFEEEFFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE6E6 E6FFE8E8E8FFE6E6E7FFCF9F72FF927A6DFF927B6EFF937B6EFF937C6EFF937C 6FFF8F796DFF867469FF847368FFCF9F72FFEEEEEEFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE5E5 E5FFE7E7E7FFE5E6E6FFCF9F72FFAD9889FFAE9989FFAF9A8AFFAF9A8AFFAC99 8AFF948C86FF948C86FFA29489FFCF9F72FFEDEDEDFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE4E4 E4FFFFFFFFFFE5E5E5FFCF9F72FFD8B89AFFCFBFA3FFD8B89AFFD9B99BFFD9B9 9BFFB8A492FFA79A8EFFAB9D8FFFCF9F72FFEBEBEBFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFACAF ADFFE6E6E6FFE4E4E5FFCF9F72FFC7C8B1FFE4F5F4FFC3DFD1FFD8B89AFFD8B8 9AFFD9B99BFFAF9F90FFCDB298FFCF9F72FFEAEBEAFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE2E2 E2FFE6E6E6FFE4E4E3FFCF9F72FFCCC2A8FFD6F1EDFFC4D4C0FFD8B89AFFD8B8 9AFFD8B89AFFD8B89AFFD8B89AFFCF9F72FFE9E9E9FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE1E1 E1FFE4E4E4FFE3E3E3FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFE8E8E8FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFE0E0 E0FFE3E3E3FFE2E2E2FFE2E2E2FFE3E3E4FFE4E4E5FFE4E4E4FFE4E4E4FFE5E6 E6FFE6E6E6FFE7E6E6FFE7E6E7FFE7E7E6FFE7E7E7FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFDFDF DFFFE2E2E2FFE1E1E1FFA6A9A8FFA6A9A8FFA6A9A8FFA6A9A8FFA6AAA8FFA7AA A9FFA7AAA9FFA7AAA9FFA7AAA9FFA7AAA9FFE5E5E5FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFDEDE DEFFE1E1E1FFE0E0E0FFE1E0E1FFE2E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E4 E4FFE4E4E4FFE4E4E4FFE5E5E4FFE5E5E5FFE4E4E4FFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A88FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000 00000000000000000000000000000000000000000000858A8882858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF848987820000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000FFFFFF00F8000700E0000700E0000700E0000700E000 0700E0000700E0000700E0000700E0000700E0000700E0000700E0000700E000 0700E0000700E0000700E0000700E0000700E0000700E0000700E0000700E000 0700FFFFFF00FFFFFF0028000000200000004000000001002000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000070000000F00000015000000160000001600000016000000160000 0016000000160000001600000016000000160000001600000016000000160000 00160000001600000016000000160000001600000016000000140000000F0000 0008000000010000000000000000000000000000000000000000000000060000 001D0000003000000040000000470000004A0000004A0000004A0000004A0000 004A0000004A0000004A0000004A0000004A0000004A0000004A0000004A0000 004A0000004A0000004A0000004A0000004A0000004A00000042000000460000 003B000000290000000C000000000000000000000000000000000000000D0000 002237373778565656F6565656FF565656FF565656FF565656FF565656FF5656 56FF565656FF565656FF565656FF565656FF565656FF565656FF565656FF5656 56FF565656FF565656FF565656FF565656FF565656FF565656FF575757F73333 3381000000310000001B00000002000000000000000000000000000000000000 000D515151F1F7F7F7FFF6F6F6FFF6F6F6FFF3F3F3FFF8F8F8FFF7F7F7FFF7F7 F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7 F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FF5151 51F2000000180000000700000000000000000000000000000000000000000000 00004F4F4FFFF8F8F8FFE6E6E6FFE8E8E8FFE4E4E4FFEEEEEEFFEBEBEBFFECEC ECFFEDEDEDFFEEEEEEFFEFEFEFFFF0F0F0FFF2F2F2FFF3F3F3FFF4F4F4FFF5F5 F5FFF5F5F5FFF6F6F6FFF6F6F6FFF6F6F6FFF5F5F5FFF4F4F4FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000535353FFF8F8F8FFE6E6E6FFE8E8E8FFE4E4E4FFEEEEEEFFEBEBEBFFECEC ECFFEDEDEDFFEEEEEEFFF0F0F0FFF1F1F1FFF2F2F2FFF3F3F3FFF4F4F4FFF5F5 F5FFF6F6F6FFF7F7F7FFF7F7F7FFF6F6F6FFF5F5F5FFF4F4F4FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000565656FFF8F8F8FFE7E7E7FFE8E8E8FFE4E4E4FFEEEEEEFFEBEBEBFFC3C3 C3FFC0C0C0FFC1C1C1FFC1C1C1FFC2C2C2FFC2C2C2FFC3C3C3FFC3C3C3FFC7C7 C7FFF7F7F7FFF8F8F8FFF8F8F8FFF7F7F7FFF6F6F6FFF5F5F5FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000595959FFF9F9F9FFE7E7E7FFE8E8E8FFE4E4E4FFEEEEEEFFEBEBEBFFECEC ECFFEDEDEDFFEFEFEFFFF0F0F0FFF1F1F1FFF2F2F2FFF3F3F3FFF4F4F4FFF5F5 F5FFF6F6F6FFF7F7F7FFF8F8F8FFF7F7F7FFF6F6F6FFF5F5F5FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 00005D5D5DFFF9F9F9FFE6E6E6FFE8E8E8FFE4E4E4FFEEEEEEFFEBEBEBFFC3C3 C3FFC0C0C0FFC0C0C0FFC1C1C1FFC2C2C2FFC2C2C2FFC3C3C3FFC3C3C3FFC3C3 C3FFC4C4C4FFC4C4C4FFC4C4C4FFC8C8C8FFF5F5F5FFF4F4F4FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000606060FFF9F9F9FFE6E6E6FFE7E7E7FFE4E4E4FFEEEEEEFFEBEBEBFFECEC ECFFEDEDEDFFEEEEEEFFEFEFEFFFF0F0F0FFF1F1F1FFF2F2F2FFF3F3F3FFF4F4 F4FFF5F5F5FFF6F6F6FFF6F6F6FFF5F5F5FFF5F5F5FFF4F4F4FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000636363FFFAFAFAFFE6E6E6FFEAEAEAFFE3E3E3FFEDEDEDFFEBEBEBFFC3C3 C3FFC0C0C0FFC0C0C0FFC1C1C1FFC1C1C1FFC2C2C2FFC2C2C2FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC7C7C7FFF4F4F4FFF3F3F3FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 0000666666FFFAFAFAFFE6E6E6FFB1B1B1FFE5E5E5FFEDEDEDFFEAEAEAFFEBEB EBFFECECECFFEDEDEDFFEEEEEEFFEFEFEFFFF0F0F0FFF1F1F1FFF2F2F2FFF3F3 F3FFF3F3F3FFF4F4F4FFF4F4F4FFF3F3F3FFF3F3F3FFF2F2F2FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 00006A6A6AFFFAFAFAFFE6E6E6FFE7E7E7FFE3E3E3FFEDEDEDFFEAEAEAFFB7B7 B7FFB8B8B8FFB8B8B8FFB8B8B8FFB9B9B9FFB9B9B9FFB9B9B9FFB9B9B9FFBABA BAFFBABABAFFBABABAFFBABABAFFBABABAFFF2F2F2FFF1F1F1FFF7F7F7FF4B4B 4BFF000000000000000000000000000000000000000000000000000000000000 00006D6D6DFFFBFBFBFFE5E5E5FFE6E6E6FFE2E2E2FFEDEDEDFFE9E9E9FFB7B6 B6FF9B8579FF9C867AFF9C867AFF9C867AFF9D877BFF9D877BFF9D877BFF9D87 7BFF9D877BFF998378FF958177FFB9B9B9FFF1F1F1FFF0F0F0FFF7F7F7FF4C4C 4CFF000000000000000000000000000000000000000000000000000000000000 0000707070FFFBFBFBFFE5E5E5FFE6E6E6FFE2E2E2FFEDEDEDFFE9E9E9FFB8B7 B6FFA99184FFAA9285FFAA9285FFAA9285FFAA9285FFAB9386FFAB9386FFA78F 83FF97847BFF9B877DFF98857BFFB9B9B9FFF0F0F0FFF0F0F0FFF7F7F7FF4E4E 4EFF000000000000000000000000000000000000000000000000000000000000 0000737373FFFBFBFBFFE4E4E4FFE5E5E5FFE1E1E1FFECECECFFE8E8E8FFB8B7 B6FFB99F94FFB99F94FFBAA095FFBAA095FFBAA095FFBAA095FFAA988FFF9F90 8AFF9D8F8AFF9F9189FFB9A195FFB9B9B9FFEFEFEFFFEFEFEFFFF8F8F8FF5050 50FF000000000000000000000000000000000000000000000000000000000000 0000777777FFFBFBFBFFE4E4E4FFE5E5E5FFE1E1E1FFECECECFFE8E8E8FFB9B8 B7FFDAC2AEFFDBC3AFFFDBC3AFFFDCC4B0FFDCC4B0FFDCC4B0FFCCB8A9FF8B8A 89FFAEA39AFF96928EFFDDC5B1FFB8B8B8FFEEEEEEFFEEEEEEFFF8F8F8FF5252 52FF000000000000000000000000000000000000000000000000000000000000 00007A7A7AFFFCFCFCFFE3E3E3FFE4E4E4FFE1E1E1FFEBEBEBFFE7E7E7FFB9B8 B7FFD8B89AFFD5BA9DFFD1BCA0FFD7B79AFFD9B99BFFD9B99BFFD9B99BFFA89A 8EFFAC9D8FFF858585FFD4B69AFFB8B8B8FFEDEDEDFFEDEDEDFFF8F8F8FF5454 54FF000000000000000000000000000000000000000000000000000000000000 00007D7D7DFFFCFCFCFFE3E3E3FFE4E4E4FFE1E1E1FFEAEAEAFFE6E6E6FFB9B8 B7FFD2BA9CFFC5E9DFFFD2F1ECFFC5C9B3FFD8B89AFFD8B89AFFD8B89AFFD4B6 9AFFA89B8EFFA0968CFFD9B99BFFB8B8B8FFECECECFFECECECFFF8F8F8FF5555 55FF000000000000000000000000000000000000000000000000000000000000 0000808080FFFCFCFCFFE2E2E2FFE6E6E6FFE0E0E0FFEAEAEAFFE6E6E6FFB8B7 B6FFCAC0A7FFE4F5F3FFF2F7F6FFBDDCCFFFD8B89AFFD8B89AFFD8B89AFFD8B8 9AFFC6AD95FFD4B699FFD8B89AFFB7B7B7FFEBEBEBFFEBEBEBFFF8F8F8FF5757 57FF000000000000000000000000000000000000000000000000000000000000 0000838383FFFDFDFDFFE1E1E1FFB0B0B0FFE1E1E1FFEAEAEAFFE5E5E5FFB8B7 B6FFD3B99CFFBEDFD4FFC8ECE5FFC7C4AAFFD8B89AFFD8B89AFFD8B89AFFD8B8 9AFFD8B89AFFD8B89AFFD8B89AFFB7B7B7FFEAEAEAFFEAEAEAFFF8F8F8FF5858 58FF000000000000000000000000000000000000000000000000000000000000 0000868686FFFDFDFDFFE1E1E1FFE2E2E2FFDEDEDEFFE9E9E9FFE4E4E4FFB5B5 B5FFB5B5B5FFB6B6B6FFB6B6B6FFB6B6B6FFB6B6B6FFB6B6B6FFB6B6B6FFB7B7 B7FFB7B7B7FFB7B7B7FFB7B7B7FFB7B7B7FFE9E9E9FFE9E9E9FFF8F8F8FF5959 59FF000000000000000000000000000000000000000000000000000000000000 0000898989FFFDFDFDFFE0E0E0FFE1E1E1FFDEDEDEFFE8E8E8FFE3E3E3FFE4E4 E4FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6E6FFE7E7E7FFE7E7E7FFE7E7E7FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFF8F8F8FF5A5A 5AFF000000000000000000000000000000000000000000000000000000000000 00008B8B8BFFFDFDFDFFDFDFDFFFE0E0E0FFDDDDDDFFE8E8E8FFE2E2E2FFBEBE BEFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBDBDBDFFBDBDBDFFBDBDBDFFC0C0 C0FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE6E6E6FFF8F8F8FF5B5B 5BFF000000000000000000000000000000000000000000000000000000000000 00008E8E8EFFFDFDFDFFDFDFDFFFDFDFDFFFDCDCDCFFE7E7E7FFE2E2E2FFE2E2 E2FFE3E3E3FFE3E3E3FFE4E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5E5FFF8F8F8FF5C5C 5CFF000000000000000000000000000000000000000000000000000000000000 0000909090FFFEFEFEFFDEDEDEFFDFDFDFFFDBDBDBFFE6E6E6FFE1E1E1FFBDBD BDFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBCBCBCFFBCBCBCFFBCBCBCFFBCBC BCFFBCBCBCFFBCBCBCFFBCBCBCFFBFBFBFFFE5E5E5FFE4E4E4FFF8F8F8FF5C5C 5CFF000000000000000000000000000000000000000000000000000000000000 0000929292FFFEFEFEFFDDDDDDFFDEDEDEFFDADADAFFE6E6E6FFE0E0E0FFE0E0 E0FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE3E3E3FFE3E3E3FFE3E3E3FFE4E4 E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE3E3E3FFF8F8F8FF5D5D 5DFF000000000000000000000000000000000000000000000000000000000000 0000939393FFFDFDFDFFDCDCDCFFDDDDDDFFDADADAFFE5E5E5FFDFDFDFFFDFDF DFFFE0E0E0FFE1E1E1FFE1E1E1FFE1E1E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2 E2FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE2E2E2FFF8F8F8FF5D5D 5DFF000000000000000000000000000000000000000000000000000000000000 0000969696EFFDFDFDFFFDFDFDFFFEFEFEFFFAFAFAFFFEFEFEFFFDFDFDFFFDFD FDFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFBFB FBFFFAFAFAFFFAFAFAFFFAFAFAFFF9F9F9FFF9F9F9FFF9F9F9FFF8F8F8FF6363 63EF000000000000000000000000000000000000000000000000000000000000 000095959552999999F2999999FF9C9C9CFF9E9E9EFF9C9C9CFF999999FF9696 96FF939393FF8F8F8FFF8C8C8CFF888888FF848484FF818181FF7D7D7DFF7A7A 7AFF767676FF727272FF6F6F6FFF6B6B6BFF686868FF646464FF646464F26060 6052000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F0000007C0000003C0000001E000 0003F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000 000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000 000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000 000FF000000FF000000FFFFFFFFFFFFFFFFF } KeyPreview = True OnClose = frmViewerClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyPress = FormKeyPress OnResize = FormResize OnShow = FormShow SessionProperties = 'Height;Width;Left;Top;WindowState' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '2.2.7.0' object pnlFolder: TPanel Left = 179 Height = 343 Top = 0 Width = 342 Align = alClient BevelOuter = bvNone ClientHeight = 343 ClientWidth = 342 ParentFont = False TabOrder = 0 Visible = False object memFolder: TMemo Left = 0 Height = 343 Top = 0 Width = 342 Align = alClient BorderStyle = bsNone ParentFont = False ReadOnly = True TabOrder = 0 end end object Status: TKASStatusBar Left = 0 Height = 23 Top = 343 Width = 521 Panels = < item Width = 50 end item Width = 50 end item Width = 100 end item Width = 100 end item Width = 200 end> ParentFont = False SimplePanel = False end object pnlText: TPanel Left = 179 Height = 343 Top = 0 Width = 342 Align = alClient BevelOuter = bvNone ClientHeight = 343 ClientWidth = 342 ParentFont = False TabOrder = 2 Visible = False OnMouseWheelUp = pnlTextMouseWheelUp object ViewerControl: TViewerControl Left = 0 Height = 343 Top = 0 Width = 342 Mode = vcmText OnPositionChanged = ViewerPositionChanged ShowCaret = False OnMouseUp = ViewerControlMouseUp OnMouseWheelUp = ViewerControlMouseWheelUp OnMouseWheelDown = ViewerControlMouseWheelDown Align = alClient Color = clWindow Font.Color = clWindowText end end object pnlCode: TPanel Left = 179 Height = 343 Top = 0 Width = 342 Align = alClient BevelOuter = bvNone ParentFont = False TabOrder = 4 Visible = False end object pnlImage: TPanel Left = 179 Height = 343 Top = 0 Width = 342 Align = alClient BevelOuter = bvNone ClientHeight = 343 ClientWidth = 342 ParentFont = False TabOrder = 3 Visible = False OnResize = pnlImageResize object sboxImage: TScrollBox Left = 0 Height = 307 Top = 36 Width = 342 HorzScrollBar.Page = 321 VertScrollBar.Page = 286 Align = alClient ClientHeight = 286 ClientWidth = 321 Color = clWindow ParentColor = False ParentFont = False TabOrder = 0 OnMouseEnter = sboxImageMouseEnter OnMouseLeave = sboxImageMouseLeave OnMouseMove = sboxImageMouseMove object Image: TImage Left = 56 Height = 288 Top = 96 Width = 376 AntialiasingMode = amOn Align = alCustom BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter OnMouseDown = ImageMouseDown OnMouseEnter = ImageMouseEnter OnMouseLeave = ImageMouseLeave OnMouseMove = ImageMouseMove OnMouseUp = ImageMouseUp OnMouseWheelDown = ImageMouseWheelDown OnMouseWheelUp = ImageMouseWheelUp Proportional = True end object GifAnim: TGifAnim Left = 0 Height = 90 Top = 0 Width = 106 AutoSize = False OnMouseDown = GifAnimMouseDown OnMouseEnter = GifAnimMouseEnter end end object ToolBar1: TToolBarAdv AnchorSideLeft.Control = pnlImage AnchorSideTop.Control = pnlImage AnchorSideRight.Control = pnlImage AnchorSideBottom.Control = sboxImage Left = 0 Height = 34 Top = 0 Width = 342 AutoSize = True ButtonHeight = 32 ButtonWidth = 32 Images = dmComData.ilViewerImages List = True ParentFont = False ShowCaptions = True TabOrder = 1 object btnReload: TToolButton Left = 1 Top = 2 Action = actReload ShowCaption = False end object btnPrev: TToolButton Left = 33 Top = 2 Action = actLoadPrevFile ShowCaption = False end object btnNext: TToolButton Left = 65 Top = 2 Action = actLoadNextFile ShowCaption = False end object btnCopyFile: TToolButton Left = 97 Top = 2 Action = actCopyFile ShowCaption = False end object btnMoveFile: TToolButton Left = 129 Top = 2 Action = actMoveFile ShowCaption = False end object btnDeleteFile: TToolButton Left = 161 Top = 2 Action = actDeleteFile ShowCaption = False end object btnZoomSeparator: TToolButton Left = 193 Height = 32 Top = 2 Style = tbsSeparator end object btnZoomIn: TToolButton Left = 199 Top = 2 Action = actZoomIn ShowCaption = False end object btnZoomOut: TToolButton Left = 231 Top = 2 Action = actZoomOut ShowCaption = False end object btn270: TToolButton Left = 263 Top = 2 Action = actRotate270 ShowCaption = False end object btn90: TToolButton Left = 295 Top = 2 Action = actRotate90 ShowCaption = False end object btnMirror: TToolButton Left = 1 Top = 34 Action = actMirrorHorz ShowCaption = False end object btnGifSeparator: TToolButton Left = 33 Height = 32 Top = 34 Style = tbsSeparator end object btnGifMove: TToolButton Left = 39 Top = 34 ImageIndex = 11 OnClick = btnGifMoveClick ShowCaption = False end object btnPrevGifFrame: TToolButton Left = 71 Hint = 'Previous Frame' Top = 34 ImageIndex = 13 OnClick = btnPrevGifFrameClick ShowCaption = False end object btnNextGifFrame: TToolButton Left = 103 Hint = 'Next Frame' Top = 34 ImageIndex = 14 OnClick = btnNextGifFrameClick ShowCaption = False end object btnGifToBmp: TToolButton Left = 135 Hint = 'Export Frame' Top = 34 ImageIndex = 26 OnClick = btnGifToBmpClick ShowCaption = False end object btnHightlightSeparator: TToolButton Left = 167 Height = 32 Top = 34 Style = tbsSeparator end object btnHightlight: TToolButton Left = 173 Hint = 'Highlight' Top = 34 AllowAllUp = True Grouped = True ImageIndex = 23 OnClick = btnPaintHightlight ShowCaption = False Style = tbsCheck end object btnCutTuImage: TToolButton Left = 205 Hint = 'Crop' Top = 34 Enabled = False ImageIndex = 15 OnClick = btnCutTuImageClick ShowCaption = False end object btnRedEye: TToolButton Left = 237 Hint = 'Red Eyes' Top = 34 Enabled = False ImageIndex = 16 OnClick = btnRedEyeClick ShowCaption = False end object btnPaintSeparator: TToolButton Left = 269 Height = 32 Top = 34 Style = tbsSeparator end object btnPaint: TToolButton Left = 275 Hint = 'Paint' Top = 34 AllowAllUp = True Grouped = True ImageIndex = 21 OnClick = btnPaintHightlight ShowCaption = False Style = tbsCheck end object btnUndo: TToolButton Left = 307 Top = 34 Action = actUndo ShowCaption = False end object btnPenMode: TToolButton Left = 1 Top = 66 AllowAllUp = True DropdownMenu = pmPenTools Enabled = False Grouped = True ImageIndex = 17 OnClick = btnPenModeClick ShowCaption = False Style = tbsDropDown end object btnPenWidth: TToolButton Left = 45 Top = 66 Caption = '1' DropdownMenu = pmPenWidth Enabled = False Style = tbsButtonDrop end object btnPenColor: TToolButtonClr Left = 97 Top = 2 Enabled = False end object btnSeparator: TToolButton Left = 162 Height = 32 Top = 66 Style = tbsSeparator end object btnResize: TToolButton Left = 168 Hint = 'Resize' Top = 66 ImageIndex = 24 OnClick = btnResizeClick ShowCaption = False end object btnFullScreen: TToolButton Left = 200 Hint = 'Full Screen' Top = 66 Action = actFullscreen ShowCaption = False end object btnSlideShow: TToolButton Tag = 1 Left = 232 Top = 66 AutoSize = True Caption = 'Slide Show' DropdownMenu = pmTimeShow OnClick = btnSlideShowClick Style = tbsDropDown Visible = False end end end object Splitter: TSplitter Left = 170 Height = 343 Top = 0 Width = 9 AutoSnap = False MinSize = 160 OnChangeBounds = SplitterChangeBounds Visible = False end object pnlPreview: TPanel Left = 0 Height = 343 Top = 0 Width = 170 Align = alLeft BevelOuter = bvNone ClientHeight = 343 ClientWidth = 170 ParentFont = False TabOrder = 5 Visible = False object pnlEditFile: TPanel Left = 0 Height = 30 Top = 0 Width = 170 Align = alTop Alignment = taLeftJustify ClientHeight = 30 ClientWidth = 170 ParentFont = False TabOrder = 0 object btnReload1: TSpeedButton AnchorSideBottom.Control = btnPrev1 Left = 1 Height = 28 Top = 1 Width = 32 Action = actReload Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000005B0007004E006C0050 01AB095E12DB015B01F5005D00F7095F11E2015102BA004F007F004A00110000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000050004C075D0DEB076B0DFF0A92 30FF15B125FF0AD113FF06E60BFF0DD317FF17B12CFF06790BFF05580AEE004E 006D004E00090000000000000000000000000000000000000000000000000000 00000000000000000000004E0009015002BB0B6515FD159227FF18A72DFF1AB1 31FF14C226FF0FD11DFF0CDA17FF0CDA17FF0FD11DFF14C226FF21AD3EFF1274 22F2005001C2004A001B00000000000000000000000000000000000000000000 00000000000000000000025003B80F721DFF0A9513FF0F9D1DFF15A427FF1AAA 31FF18B52FFF15C027FF12C723FF12C723FF14C027FF18B52EFF1AAA32F016A5 2ACD137923C0004F00A700550008000000000000000000000000000000000000 0000000000000051005C085B0FFE028D05FF07940DFF0C9A17FF119F20FF16A5 29FF19A931FF1BAE33FF19B330FF19B330FF1AAE33FF1AA931EF16A529D1119F 21AD0F9C1C8D0B68139B00540030000000000000000000000000000000000000 0000004D000F045108F505750AFF008C01FF049108FF08950FFF0D9A18FF17A2 2AFF0D7B19FF0B6A14FD0A6413FD0D7019FF189F2EEB14A326D3119F20B10D9A 1890089510730B95155809651137000000000000000000000000000000000000 00000255057B06530CFF007000FF008100FF018D02FF049109FF0F8E1CFF075F 0EF00253048F004C0041004E003B02500474045208D70D8019B00B99167E0895 0F6305910949018D02350D731824046A07020000000000000000000000000000 0000035306C1045109FF006300FF007300FF008300FF068E0AFF05590AF5004D 014F00000000000000000000000000000000004C0026025004B106880B490490 0730018D02230083001709770F0D05620B020000000000000000000000000000 0000045108E8014D01FF005500FF006400FF007300FF06660CFF015103AB0000 00000000000000000000000000000000000000000000004E01290A6211160263 040F02540609044F07050A5B140100000000000000000000000000000000004D 0001054D07F9085508FF0B570BFF0A5D0AFF006200FF055207FE014F015A0000 0000000000000000000000000000000000000000000000000000065210050957 1303000000000000000000000000000000000000000000000000000000000000 0000065108FB267026FF287228FF277127FF005000FF034B06FE014D015A0000 00000000000000000000004D0004125E1BEC025C03FF045C04FF045B05FF0459 06FF015503FF025304FF025405FF07600DA90000000000000000000000000000 000008550CE62B752BFF357E35FF357E35FF085408FF034B06FF035306870000 00000000000000000000004D0008024E04D1028004FF13C813FF2DC72DFF35BD 35FF34AF34FF249824FF127B12FF055A08FF0000000000000000000000000000 0000095B10BE266E27FF418A41FF418A41FF266F26FF014C01FF045107F30351 0311000000000000000000000000004D0033034F07E2027704FF019601FF20A1 20FF41AD41FF41A641FF419D41FF0B5F0EFF0000000000000000000000000000 000007610F7D1C641DFF4F964FFF4F964FFF4F964FFF166016FF014E03FF044F 08F30758105900802B030064140605540A6B034D05F7016A02FF017A01FF3CA2 3CFF4FAB4FFF4FA64FFF4FA24FFF0C610FFF0000000000000000000000000000 00000057000A09560BF4498F49FF5BA15BFF5BA15BFF549A54FF1B641BFF014D 01FF024C03FF024B04FE044C06FE024C03FF015401FF086508FF3F963FFF5BAC 5BFF5BAB5BFF5BA95BFF5BA75BFF0D610FFF0000000000000000000000000000 000000000000045C0852155F17FE66AA66FF68AD68FF68AD68FF69AE69FF468B 46FF226A22FF085408FF045004FF176017FF307930FF5FA75FFF68B068FF68B0 68FF68B068FF68AF68FF68AF68FF0E6210FF0000000000000000000000000000 00000000000000000000035A06BB337933FF70B570FF74B974FF74B974FF74B9 74FF74B974FF77BA77FF75B875FF74B974FF74B974FF74B974FF74B974FF76BA 76FF61A361FF539A55FF75B975FF0F6311FF0000000000000000000000000000 0000000000000000000000540007035D05B71C691DFE65A865FF81C581FF81C5 81FF81C581FF81C581FF81C581FF81C581FF81C581FF81C581FF80BF80FF367E 38FE025703D5015903D7479147FF116612FF0000000000000000000000000000 0000000000000000000000000000000000000060024D0E620EF1347C34FF5799 57FF74B474FF7FC47FFF84C984FF80BF80FF6EAA6EFF4A8E4AFF0D5E0DF40056 018C004D0010004D001F005C01B8458E45E60000000000000000000000000000 00000000000000000000000000000000000000000000006000080063007A0160 01B5216F21E6337633FD347634FE2D732DEF166816CA015C0194005000290000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end object btnPrev1: TSpeedButton Left = 33 Height = 28 Top = 1 Width = 24 Action = actLoadPrevFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000383004F189514EB048A 008D000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000048200841D9819FB2CA92AFF048B 00BC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000520005058501B5219E1EFE07A707FE18AF17FE048A 00BB000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000072001E0C8708DB1D9E1BFF01A701FF00B500FF16BE15FD0388 00B9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000372004A10870DF1149413FE009E00FF00AF00FF00BF00FF13C712FD0384 00B7000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000026F 007D128310FA0B850BFE008F00FF009F00FF00B000FF00C000FF11C610FF0381 00B5000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000660004037100AE026C 00FE057005FE007D00FF008D00FF009C00FF00AB00FF00B800FF0EBB0DFF037D 00B3000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000006A001C076C05D510650FFF005A 00FF006900FF007900FF008700FF009500FF00A200FF00AC00FF0CAD0BFF017A 00B1000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000590018086406EE094B09FE004700FF0357 03FF076807FF057505FF018001FF008C00FF009600FF009E00FF08A008FF0176 00AF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000005D00170B610AED316F31FE347434FF327E 32FF2E842EFF2D8C2DFF2B942BFF2A9A2AFF28A128FF26A426FF2CA62CFF0171 00AE000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000052001B045E03D02D722DFF4388 43FF408E40FF3D933DFF399739FF369B36FF329E32FF2FA12FFF319F31FF016D 00AC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000260004005600A52671 25FE519651FE4F9B4FFF4B9E4BFF48A048FF44A244FF41A341FF3D9F3DFF0069 00AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000051 00711C671CFA5A9F5AFE5EA75EFF5AA85AFF57A857FF53A753FF499F49FF0061 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000004B0041105910EB5DA05DFE6CB16CFF69B169FF65AF65FF56A256FE005A 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000055001A085208D0579657FF7CBC7CFF78BA78FF65A765FD0052 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000260004004D00A4478447FE8AC78AFF71AE71FE004E 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000004C0070347234FA7AAF7AFF0451 04AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000004C0040115811E3447D 4493000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000010000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end object btnNext1: TSpeedButton Left = 57 Height = 28 Top = 1 Width = 24 Action = actLoadNextFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000012950ED0169618D60078 0018000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001F9C1BF31EA41DFF1492 0FEF047B00400000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001B9C18F200AE00FF11AE 11FE199715FA027E007400000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000199C16F100C200FF00BD 00FF08B308FE1D9C1AFE037D00A8008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000169B13EF00D600FF00CA 00FF00BA00FF01A901FF028E00FF0A8006D2006B001600000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000149911EF00D200FF00CA 00FF00BB00FF00AB00FF009A00FF129111FE0D7F0AEC046A003C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000011930EEF00C300FF00BF 00FF00B400FF00A600FF009700FF008800FF0A7F0AFD0F7C0DF8026B006D0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000E8D0CEE00B300FF00B1 00FF00A900FF009E00FF009100FF008300FF007400FF056905FE10720EFE0266 00A0008000010000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B8709ED00A400FF00A2 00FF009C00FF009300FF028902FF067F06FF057105FF026102FF015101FF0D5E 0CFF046303BC0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188917ED23A723FF26A7 26FF28A428FF2BA12BFF2B9B2BFF2C922CFF2F8C2FFF338433FF377E37FF2770 27FF046003BA0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188418EC2DA22DFF30A3 30FF34A234FF37A037FF3A9C3AFF3D983DFF419441FF448D44FE217120FE0258 009B008000010000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177C17EB3FA33FFF42A5 42FF46A546FF49A449FF4CA34CFF4FA04FFF4A964AFE166615F7005200650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177417EB51A751FF54A9 54FF58AB58FF5BAB5BFF5EAB5EFF4D964DFE0C5B0CE600500035000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000176C17EA63AE63FF67B1 67FF6AB36AFF6EB46EFF468B46FF025102C50045001300000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000186518EB75B875FF79BC 79FF7BBB7BFF387B38FE004D0098008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001A601AEB87C587FF80BC 80FE286B28F7004D006300000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001C601CEC86B986FF165E 16E8004E00350000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B550BC61E611EC80045 0013000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000001000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end object btnCopyFile1: TSpeedButton Left = 81 Height = 28 Top = 1 Width = 32 Action = actCopyFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000008A8F8DAE868B 89FF868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF848A87FF848A 86FD858A88C3848A860A00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF2F2 F2FFF2F2F2FFF1F1F1FFF0F0F0FFF1F1F1FFF4F4F4FFF7F7F7FFF6F6F6FF858A 86FFB9BBBAFF858A88FF868C8861000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF7F7 F7FFEAEAEAFFE9E9E9FFEDEEEEFFF1F1F1FFF1F1F1FFF3F3F3FFF4F4F4FF878D 89FFCFCFCFFFB4B5B4FF858A88FF8F9490920000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCFAFA FAFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEFEFFFEFEFEFFFF1F1F1FF848A 86FFCFCFCFFFCFCFCFFFB9BBBAFF858A88FF858B876400000000000000008B90 8D57858A887F858A887F858A887F858A887F858A887F858A8883868B89FDFDFD FDFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFECECECFFF0F0F0FFEEEEEEFF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88CC0000000000000000858A 887EF2F2F27FF3F3F37FF1F1F17FF0F0F07FF1F1F17FEDEDED83878C8AFDFFFF FFFFECEDEDFFECECECFFEBECECFFEAEBEBFFEAEAEAFFEEEFEFFFF0F0F0FFEFEF EFFFF1F1F1FFF2F2F2FFF1F1F1FFBBBEBDFF868B89FC0000000000000000868B 897EF7F7F77FEAEAEA7FE9E9E97FE8E9E97FE8E8E87FE2E3E383878C8AFDFFFF FFFFEDEEEEFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEF EFFFEDEDEDFFEFEFEFFFF2F2F2FFF7F7F7FF888D8BFC0000000000000000868B 897EFAFAFA7FEAEBEB7FEAEAEA7FE9EAEA7FE9E9E97FE1E2E283878C8AFDFFFF FFFFEEEFEFFFC5C5C5FFC5C5C5FFC4C5C5FFC4C4C4FFC3C4C4FFC3C3C3FFCDCD CDFFDCDCDCFFDCDCDCFFF2F2F2FFF9F9F9FF888D8BFC0000000000000000868B 897EFDFDFD7FEBECEC7FEBEBEB7FEAEBEB7FEAEAEA7FE2E3E383878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEEEEFFEDEEEEFFECEDEDFFECEDEDFFEBECECFFEBEB EBFFEFEFEFFFF2F2F2FFEFEFEFFFFCFCFCFF898E8CFC0000000000000000868B 897EFFFFFF7FECEDED7FC7C7C77FC6C7C77FC5C6C67FC1C1C183868B89FDFFFF FFFFEFF0F0FFC7C8C8FFC6C7C7FFC6C7C7FFC5C6C6FFC5C6C6FFC5C5C5FFC5C5 C5FFEDEEEEFFEDEDEDFFF4F4F4FFFEFEFEFF898E8CFC0000000000000000868B 897EFFFFFF7FEDEEEE7FECEDED7FECECEC7FEBECEC7FE4E5E483878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEEEFEFFFEEEFEFFFEDEEEEFFEDED EDFFECEDEDFFEDEEEEFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEEEFEF7FC8C9C97FC8C8C87FC7C8C87FC2C3C383868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC5C6C6FFC5C5 C5FFC5C5C5FFC4C5C5FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEEEFEF7FEEEEEE7FEDEEEE7FE5E6E683878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEDEE EEFFEDEEEEFFECEDEDFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FC9CACA7FC9CACA7FC3C5C583868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC5C6C6FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE7E8E883878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEEEFEFFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC5C6C583868B89FDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE8E9E983868B89FEFFFF FFFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFFFFFF898E8CFD0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC9C9C980959997DA898E 8CFE898E8CFD898E8CFD898E8CFD8A8E8CFD8A8F8DFD898E8CFD898E8CFC898E 8CFC898E8CFC898E8CFC898E8CFC898E8CFD8A8F8DB40000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEEEFEF80E8E9 E983E8E9E983E8E9E983E8E9E983E7E8E883F6F6F6838D919082000000000000 000000000000000000000000000000000000000000000000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0 F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FFEFEFE7F8E92917E000000000000 000000000000000000000000000000000000000000000000000000000000858A 887EFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7F8D91907E000000000000 0000000000000000000000000000000000000000000000000000000000008B90 8D57898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E 8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F8B908D57000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end object btnMoveFile1: TSpeedButton Left = 145 Height = 28 Top = 1 Width = 31 Action = actMoveFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000010000000200000004000000060000000A0000000F0000 001000000010000000100000001200000013000000110000000D0000000A0000 0006000000030000000300000002000000000000000000000000000000000000 000000000003000000070808AC7D0707AEC00606ACC10505937D0000002B0000 002E0000002C0000002C00000030000000300000002C04048F810606A9C40707 ADC10808A6810000000D00000009000000040000000100000000000000000000 0001000000040C0CB58A1212C5FF1A1AD8FF1818D0FF0A0AB6FF0808A0AF0000 00390000003700000036000000390000003908089FB00A0AB6FF1818D0FF1A1A D8FF1212C5FF0C0CAD9000000010000000070000000200000000000000000000 0000000000020808AFE82121E1FF1515CCFB1111C7FF2323E3FF0909B2EA0404 948E0000002500000024000000240404958D0909B3E92323E3FF1111C7FF1515 CCFB2121E1FF0808AFE800000009000000040000000100000000000000000000 0000000000000C0DAECC2929EFFF0D0DBEFB020299480707B1EA2222E2FF0808 B3E40000000A00000008000000070808B3E42222E2FF0707B1EA020299480D0D BEFB2929EFFF0B0CADCD00000001000000000000000000000000000000000000 0000000000001112AEA82525E7FF1313C9FF0505AE960303AA831C1CD7FF0707 B1FF0000A257000000000000A4560707B1FF1C1CD7FF0303AA830505AE961313 C9FF2525E7FF1112AEA800000000000000000000000000000000000000000000 0000000000001B1CAE440505ADDF1E1EDCFF1111C4EC0606B0EE1717CEFF1515 CBFF0000A4875558AE990000A4871515CBFF1717CEFF0606B0EE1111C4EC1E1E DCFF0505ADDF1B1CAE4400000000000000000000000000000000000000000000 000000000000000000000606B0680909B5E61A1AD4FF1F1FDCFF2121E1FF2121 E1FF0303AAFE0303AAFF0303AAFE2121E1FF2121E1FF1F1FDCFF1A1AD4FF0909 B5E60606B0680000000000000000000000000000000000000000000000000000 00000000000000000000000000000000A4200808B3A10909B5F60505AEFE3031 DAFF393AC7FF0303AAFF393AC7FF3031DAFF0505AEFE0909B5F60808B3A10000 A420000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000606B0816B6F 94FFB1B3B6FF00000000B1B3B6FF6B6F94FF0606B08100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000858A88878B8F 9BFFE2E2E2FFD8D8D8FFBEC0BFFF9295A9FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A881F878C8AFCDEE0 DFFFDADADAFFD8D8D8FFB1B4B3FFBABCBAFF989C9BD500000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A88C0ABAEADFDDFDF DFFFDBDBDBFFAFB2B0FFBDBFBEFFDCDCDCFF959997FF858A883C000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A8857878C8AFFE9EAEAFFDCDC DCFFD6D6D6FFA7ABA9FFC1C3C1FFDBDBDBFFDDDEDEFF929795F9000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88EFC0C3C2FEE0E0E0FFDDDD DDFF9A9E9DFF9A9E9C90A2A5A4FFDCDCDCFFDCDCDCFFB0B2B1FF909593A80000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000858A889C8D9290FEEBEBEBFFDFDFDFFFC8C9 C9FFA8ABAAD900000000919694F1D3D5D4FFDDDDDDFFE2E2E2FF898E8CFF858A 881F000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A881F858A88FEDFE0E0FFE0E0E0FFE0E0E0FF959A 98FF0000000000000000858A883C8F9492FFE1E1E1FFDEDEDEFFCBCCCBFF8F93 91EF000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A88CF9A9E9DFDE8E8E8FFE1E1E1FFB1B3B2FFA2A6 A4BE000000000000000000000000929795CFC3C6C5FFDFDFDFFFE2E2E2FF959A 98FF858A88700000000000000000000000000000000000000000000000000000 000000000000000000008C918FF5EBEBEBFFE2E2E2FFDCDDDCFF989C9BFC0000 0000000000000000000000000000858A881F898E8CFFE2E3E3FFE0E0E0FFD8D9 D8FF929795F90000000000000000000000000000000000000000000000000000 00000000000000000000909593DAD6D8D7FFE2E2E2FF9C9F9FFF989C9B810000 000000000000000000000000000000000000909593A8A8ACABFFE3E3E3FFD0D1 D0FF9DA1A0DC0000000000000000000000000000000000000000000000000000 00000000000000000000858A88708E9391FEC1C4C2FF999D9CF7000000000000 000000000000000000000000000000000000000000008D9290FBD1D3D2FF9094 92FF858A88AF0000000000000000000000000000000000000000000000000000 00000000000000000000000000008C918FC78A8F8DFF858A883C000000000000 00000000000000000000000000000000000000000000858A8870858A88FF8E92 90E4000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end object btnDeleteFile1: TSpeedButton Left = 113 Height = 28 Top = 1 Width = 32 Action = actDeleteFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000972000009BC000009720000000000000 0000000000000000000000000000000000000000000000000000000097200000 9BC0000097200000000000000000000000000000000000000000000000000000 0000000000000000000000009F2001019DE02E2EB4FF05059FE000009F200000 0000000000000000000000000000000000000000000000009F2000009DE02525 B3FF01019EE100009F2000000000000000000000000000000000000000000000 00000000000000009F200101A1E03E3EBFFF2424C1FF4242C5FF0303A2E00000 9F200000000000000000000000000000000000009F200000A1E03838C4FF2C2C C9FF4242C4FF0101A2E100009F20000000000000000000000000000000000000 000000009F200101A3E04242C0FF1A1ABEFF0808C0FF1313C9FF4343CCFF0303 A4E000009F20000000000000000000009F200000A3E03A3ACBFF1C1CD1FF0707 C6FF1717C4FF4444C5FF0101A4E000009F200000000000000000000000000000 00000000A6C02525B5FF3232C3FF0808BEFF0707C4FF0606CCFF1313D4FF4444 D3FF0202A7E00000A7200000A7200101A6E03F3FD2FF1C1CDCFF0606D2FF0606 CCFF0707C4FF2424C5FF3636BDFF0000A6C00000000000000000000000000000 00000000A7200000A8E03D3DC4FF1F1FC7FF0606C8FF0606CFFF0505D7FF1414 E0FF4444D9FF0202A9E00101A8E04242D9FF1A1AE7FF0404DEFF0505D7FF0606 CFFF1313CBFF4848CBFF0505AAE00000A7200000000000000000000000000000 0000000000000000A7200000ABE03F3FCCFF1D1DD0FF0606D2FF0404DAFF0303 E1FF1414EAFF4545DFFF4444DFFF1818F1FF0202E8FF0303E1FF0404DAFF1515 D5FF4B4BD3FF0303ADE10000A720000000000000000000000000000000000000 000000000000000000000000AF200000AFE14343D2FF1C1CD8FF0404DCFF0303 E3FF0202E9FF1313F1FF1414F4FF0101F0FF0202E9FF0303E3FF1414DEFF4C4C DAFF0303B1E10000AF2000000000000000000000000000000000000000000000 00000000000000000000000000000000AF200000B1E14545D8FF1818DEFF0303 E1FF0202E7FF0202EBFF0101EDFF0202EBFF0202E7FF1515E3FF4D4DDFFF0303 B2E10000AF200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000AF200101B4E14B4BDEFF4646 E6FF5858EDFF6162F0FF6465F1FF6666EFFF6C6CEEFF8080EAFF0303B6E20000 AF20000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000B7200606B9E19899EBFF7D7E EDFF5D5EE9FF5555EAFF4E4EEAFF4748E9FF5151E8FF9191ECFF0707B9E20000 B720000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000B7200202BAE09495E9FF8082E9FF696B E8FF6465E8FF5B5CEAFF5555E7FF4F4FE7FF4748E4FF5555E4FF8B8BE7FF0404 BCE10000B7200000000000000000000000000000000000000000000000000000 000000000000000000000000BF200101BBE08F8FE4FF8C8EEAFF797AE7FF7273 E6FF6A6CE7FF7374E9FF6E6EE8FF5656E3FF5050E1FF4849DFFF5556DFFF8484 E2FF0202BCE10000BF2000000000000000000000000000000000000000000000 0000000000000000BF200000BFE08989E0FF989AE9FF8687E7FF7F81E6FF797A E7FF7F81E7FF8B8BE7FF8585E5FF6F6FE5FF5757DFFF5050DDFF4949D9FF5758 D9FF7C7CDDFF0101BFE10000BF20000000000000000000000000000000000000 00000000BF200000C2E08182DEFFA3A4EBFF9596E8FF8E8FE7FF8687E6FF898B E8FF8B8BE5FF0303C4E00202C3E08282E4FF6F6FE1FF5757DAFF5050D8FF4949 D3FF595AD4FF7676D9FF0202C0E10000BF200000000000000000000000000000 00000000C5C0B6B6EDFFB3B5EEFFA1A3EAFF9B9CE8FF9596E8FF9596E8FF8B8C E5FF0404C6E00000C7200000C7200303C5E08182E1FF6D6DDDFF5858D6FF5252 D2FF4A4ACDFF6D6ED4FF5353D2FF0000C5C00000000000000000000000000000 00000000C7202A2ACDE4ABACEFFFAEB0EEFFA1A3EAFFA1A3E9FF8C8CE2FF0606 C4E00000C72000000000000000000000C7200303C5E07F7FDFFF6B6CDAFF5959 D1FF6666D3FF7D7EDEFF0808C6E10000C7200000000000000000000000000000 0000000000000000C7201212C8E2A9ABEDFFB3B4EFFF8C8CE1FF0505C4E00000 C720000000000000000000000000000000000000C7200505C5E07D7EDEFF7E7F DBFF8081DDFF0606C6E10000C720000000000000000000000000000000000000 000000000000000000000000C7201D1DCAE3C3C3F1FF0606C4E10000C7200000 000000000000000000000000000000000000000000000000C7200505C5E0AAAB EAFF2525CCE30000C72000000000000000000000000000000000000000000000 00000000000000000000000000000000C7200000C5C00000C720000000000000 00000000000000000000000000000000000000000000000000000000C7200000 C5C00000C7200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False ParentFont = False end end object DrawPreview: TDrawGrid Left = 0 Height = 313 Top = 30 Width = 170 Align = alClient AutoAdvance = aaNone AutoFillColumns = True BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter BorderStyle = bsNone ColCount = 1 DefaultColWidth = 150 DefaultRowHeight = 140 ExtendedSelect = False FixedColor = clAppWorkspace FixedCols = 0 FixedRows = 0 Font.Style = [fsItalic] MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goSmoothScroll] ParentFont = False RowCount = 1 ScrollBars = ssAutoVertical TabOrder = 1 TitleStyle = tsNative OnSelection = DrawPreviewSelection OnTopleftChanged = DrawPreviewTopleftChanged ColWidths = ( 170 ) end end object MainMenu: TMainMenu ParentBidiMode = False Left = 80 Top = 64 object miFile: TMenuItem Caption = '&File' object miPrev: TMenuItem Action = actLoadPrevFile end object miNext: TMenuItem Action = actLoadNextFile end object miSave: TMenuItem Action = actSave end object miSaveAs: TMenuItem Action = actSaveAs end object miPrint: TMenuItem Action = actPrint end object miPrintSetup: TMenuItem Action = actPrintSetup end object miReload: TMenuItem Action = actReload end object miAutoReload: TMenuItem Action = actAutoReload end object miSeparator: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExitViewer end end object miEdit: TMenuItem Caption = '&Edit' object miCopyToClipboard: TMenuItem Action = actCopyToClipboard end object miSelectAll: TMenuItem Action = actSelectAll end object miDiv3: TMenuItem Caption = '-' end object miSearch: TMenuItem Action = actFind end object miSearchNext: TMenuItem Action = actFindNext end object miSearchPrev: TMenuItem Action = actFindPrev end object miGotoLine: TMenuItem Action = actGotoLine end end object miView: TMenuItem Caption = '&View' object miPreview: TMenuItem Action = actPreview end object miDiv4: TMenuItem Caption = '-' end object miText: TMenuItem Action = actShowAsText GroupIndex = 1 RadioItem = True end object miBin: TMenuItem Action = actShowAsBin GroupIndex = 1 RadioItem = True end object miHex: TMenuItem Action = actShowAsHex GroupIndex = 1 RadioItem = True end object miDec: TMenuItem Action = actShowAsDec GroupIndex = 1 RadioItem = True end object miLookBook: TMenuItem Action = actShowAsBook GroupIndex = 1 RadioItem = True end object miDiv2: TMenuItem Caption = '-' end object miGraphics: TMenuItem Action = actShowGraphics GroupIndex = 1 RadioItem = True end object miPlugins: TMenuItem Action = actShowPlugins GroupIndex = 1 RadioItem = True end object miOffice: TMenuItem Action = actShowOffice GroupIndex = 1 RadioItem = True end object miCode: TMenuItem Action = actShowCode GroupIndex = 1 RadioItem = True end object miDiv1: TMenuItem Caption = '-' end object miWrapText: TMenuItem Action = actWrapText end object miShowCaret: TMenuItem Action = actShowCaret end end object mnuPlugins: TMenuItem Caption = 'Plugins' end object miEncoding: TMenuItem Caption = 'En&coding' end object miImage: TMenuItem Caption = '&Image' object miStretch: TMenuItem Action = actStretchImage end object miStretchOnlyLarge: TMenuItem Action = actStretchOnlyLarge end object miCenter: TMenuItem Action = actImageCenter end object miShowTransparency: TMenuItem Action = actShowTransparency end object miRotate: TMenuItem Caption = 'Rotate' object mi90: TMenuItem Action = actRotate90 end object mi180: TMenuItem Action = actRotate180 end object mi270: TMenuItem Action = actRotate270 end object miMirror: TMenuItem Action = actMirrorHorz end object MenuItem2: TMenuItem Action = actMirrorVert end end object miZoomIn: TMenuItem Action = actZoomIn end object miZoomOut: TMenuItem Action = actZoomOut end object miFullScreen: TMenuItem Action = actFullscreen end object miScreenshot: TMenuItem Caption = 'Screenshot' object miScreenshotImmediately: TMenuItem Action = actScreenshot end object miScreenshot3sec: TMenuItem Action = actScreenShotDelay3Sec end object miScreenshot5sec: TMenuItem Action = actScreenShotDelay5sec end end end object miAbout: TMenuItem Caption = 'About' object miAbout2: TMenuItem Action = actAbout end end end object pmEditMenu: TPopupMenu OnPopup = pmEditMenuPopup Left = 152 Top = 64 object pmiCopy: TMenuItem Action = actCopyToClipboard end object pmiCopyFormatted: TMenuItem Action = actCopyToClipboardFormatted end object miDiv5: TMenuItem Caption = '-' end object pmiSelectAll: TMenuItem Action = actSelectAll end end object SavePictureDialog: TSavePictureDialog Left = 768 Top = 296 end object TimerViewer: TTimer Enabled = False Interval = 10 OnTimer = TimerViewerTimer Left = 752 Top = 240 end object actionList: TActionList Images = dmComData.ilViewerImages Left = 408 Top = 144 object actAbout: TAction Category = 'Help' Caption = 'About Viewer...' Hint = 'Displays the About message' OnExecute = actExecute end object actReload: TAction Category = 'File' Caption = 'Reload' Hint = 'Reload current file' ImageIndex = 0 OnExecute = actExecute end object actLoadNextFile: TAction Category = 'File' Caption = '&Next' Hint = 'Load Next File' ImageIndex = 2 OnExecute = actExecute end object actLoadPrevFile: TAction Category = 'File' Caption = '&Previous' Hint = 'Load Previous File' ImageIndex = 1 OnExecute = actExecute end object actMoveFile: TAction Category = 'File' Caption = 'Move File' Hint = 'Move File' ImageIndex = 4 OnExecute = actExecute end object actCopyFile: TAction Category = 'File' Caption = 'Copy File' Hint = 'Copy File' ImageIndex = 3 OnExecute = actExecute end object actDeleteFile: TAction Category = 'File' Caption = 'Delete File' Hint = 'Delete File' ImageIndex = 5 OnExecute = actExecute end object actStretchImage: TAction Category = 'Image' Caption = 'Stretch' Hint = 'Stretch Image' OnExecute = actExecute end object actSaveAs: TAction Category = 'File' Caption = 'Save As...' Hint = 'Save File As...' OnExecute = actExecute end object actRotate90: TAction Category = 'Image' Caption = '+ 90' Hint = 'Rotate +90 degrees' ImageIndex = 9 OnExecute = actExecute end object actRotate180: TAction Category = 'Image' Caption = '+ 180' Hint = 'Rotate 180 degrees' OnExecute = actExecute end object actRotate270: TAction Category = 'Image' Caption = '- 90' Hint = 'Rotate -90 degrees' ImageIndex = 8 OnExecute = actExecute end object actMirrorHorz: TAction Category = 'Image' Caption = 'Mirror Horizontally' Hint = 'Mirror' ImageIndex = 10 OnExecute = actExecute end object actPreview: TAction Category = 'View' Caption = 'Preview' OnExecute = actExecute end object actShowAsText: TAction Category = 'View' Caption = 'Show as &Text' GroupIndex = 1 OnExecute = actExecute end object actShowAsBin: TAction Category = 'View' Caption = 'Show as &Bin' GroupIndex = 1 OnExecute = actExecute end object actShowAsHex: TAction Category = 'View' Caption = 'Show as &Hex' GroupIndex = 1 OnExecute = actExecute end object actSave: TAction Category = 'File' Caption = 'Save' OnExecute = actExecute end object actMirrorVert: TAction Category = 'Image' Caption = 'Mirror Vertically' OnExecute = actExecute end object actExitViewer: TAction Category = 'File' Caption = 'E&xit' OnExecute = actExecute end object actStretchOnlyLarge: TAction Category = 'Image' Caption = 'Stretch only large' OnExecute = actExecute end object actImageCenter: TAction Category = 'Image' Caption = 'Center' OnExecute = actExecute end object actZoom: TAction Category = 'Image' Caption = 'Zoom' end object actZoomIn: TAction Category = 'Image' Caption = 'Zoom In' Hint = 'Zoom In' ImageIndex = 6 OnExecute = actExecute end object actZoomOut: TAction Category = 'Image' Caption = 'Zoom Out' Hint = 'Zoom Out' ImageIndex = 7 OnExecute = actExecute end object actFullscreen: TAction Category = 'Image' Caption = 'Full Screen' ImageIndex = 22 OnExecute = actExecute end object actScreenshot: TAction Category = 'Image' Caption = 'Screenshot' OnExecute = actExecute end object actScreenShotDelay3Sec: TAction Category = 'Image' Caption = 'Delay 3 sec' OnExecute = actExecute end object actScreenShotDelay5sec: TAction Category = 'Image' Caption = 'Delay 5 sec' OnExecute = actExecute end object actShowAsDec: TAction Category = 'View' Caption = 'Show as &Dec' GroupIndex = 1 OnExecute = actExecute end object actShowAsWrapText: TAction Category = 'View' Caption = 'Show as &Wrap text' GroupIndex = 1 OnExecute = actExecute end object actShowAsBook: TAction Category = 'View' Caption = 'Show as B&ook' GroupIndex = 1 OnExecute = actExecute end object actShowGraphics: TAction Category = 'View' Caption = 'Graphics' GroupIndex = 1 OnExecute = actExecute end object actShowOffice: TAction Category = 'View' Caption = 'Office XML (text only)' GroupIndex = 1 OnExecute = actExecute end object actShowPlugins: TAction Category = 'View' Caption = 'Plugins' GroupIndex = 1 OnExecute = actExecute end object actCopyToClipboard: TAction Category = 'Edit' Caption = 'Copy To Clipboard' OnExecute = actExecute end object actCopyToClipboardFormatted: TAction Category = 'Edit' Caption = 'Copy To Clipboard Formatted' OnExecute = actExecute end object actSelectAll: TAction Category = 'Edit' Caption = 'Select All' OnExecute = actExecute end object actFind: TAction Category = 'Edit' Caption = 'Find' OnExecute = actExecute end object actFindNext: TAction Category = 'Edit' Caption = 'Find next' OnExecute = actExecute end object actFindPrev: TAction Category = 'Edit' Caption = 'Find previous' OnExecute = actExecute end object actGotoLine: TAction Category = 'Edit' Caption = 'Goto Line...' Hint = 'Goto Line' OnExecute = actExecute end object actChangeEncoding: TAction Caption = 'Change encoding' OnExecute = actExecute end object actAutoReload: TAction Category = 'File' Caption = 'Auto Reload' OnExecute = actExecute end object actPrintSetup: TAction Category = 'File' Caption = 'Print &setup...' Enabled = False OnExecute = actExecute Visible = False end object actPrint: TAction Category = 'File' Caption = 'P&rint...' Enabled = False OnExecute = actExecute Visible = False end object actShowCaret: TAction Category = 'View' Caption = 'Show text c&ursor' OnExecute = actExecute end object actWrapText: TAction Category = 'View' Caption = '&Wrap text' OnExecute = actExecute end object actShowTransparency: TAction Category = 'Image' Caption = 'Show transparenc&y' OnExecute = actExecute end object actUndo: TAction Category = 'Edit' Caption = 'Undo' Enabled = False Hint = 'Undo' ImageIndex = 20 OnExecute = actExecute end object actShowCode: TAction Category = 'View' Caption = 'Code' GroupIndex = 1 OnExecute = actExecute end end object TimerScreenshot: TTimer Enabled = False OnTimer = TimerScreenshotTimer Left = 196 Top = 165 end object TimerReload: TTimer Enabled = False Interval = 2000 OnTimer = TimerReloadTimer Left = 592 Top = 80 end object pmPenTools: TPopupMenu Images = dmComData.ilViewerImages Left = 903 Top = 249 object miPen: TMenuItem Caption = 'Pen' ImageIndex = 17 OnClick = miPenClick end object miRect: TMenuItem Tag = 1 Caption = 'Rect' ImageIndex = 18 OnClick = miPenClick end object miEllipse: TMenuItem Tag = 2 Caption = 'Ellipse' ImageIndex = 19 OnClick = miPenClick end end object pmPenWidth: TPopupMenu Tag = 1 Left = 996 Top = 249 end object pmTimeShow: TPopupMenu Left = 1088 Top = 248 end object pmStatusBar: TPopupMenu Left = 80 Top = 211 end object tmUpdateFolderSize: TTimer Enabled = False Interval = 500 OnTimer = tmUpdateFolderSizeTimer Left = 196 Top = 232 end end doublecmd-1.1.30/src/ftweakplugin.pas0000644000175000001440000003244615104114162016572 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Plugin tweak window Copyright (C) 2008-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fTweakPlugin; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, EditBtn, Buttons, Menus, uWCXModule, uGlobs; type { TfrmTweakPlugin } TfrmTweakPlugin = class(TForm) btnAdd: TButton; btnCancel: TButton; btnChange: TButton; btnDefault: TButton; btnOK: TButton; btnRelativePlugin2: TSpeedButton; btnRelativePlugin1: TSpeedButton; btnRemove: TButton; cbExt: TComboBox; cbPK_CAPS_BY_CONTENT: TCheckBox; cbPK_CAPS_DELETE: TCheckBox; cbPK_CAPS_ENCRYPT: TCheckBox; cbPK_CAPS_HIDE: TCheckBox; cbPK_CAPS_MEMPACK: TCheckBox; cbPK_CAPS_MODIFY: TCheckBox; cbPK_CAPS_MULTIPLE: TCheckBox; cbPK_CAPS_NEW: TCheckBox; cbPK_CAPS_OPTIONS: TCheckBox; cbPK_CAPS_SEARCHTEXT: TCheckBox; edtDescription: TEdit; edtDetectStr: TEdit; edtName: TEdit; fnePlugin2: TFileNameEdit; fnePlugin1: TFileNameEdit; pmPathHelper: TPopupMenu; pnlTweakOther: TPanel; lblDescription: TLabel; lblDetectStr: TLabel; lblName: TLabel; lblExtension: TLabel; lblFlags: TLabel; lblFlagsValue: TLabel; lblPlugin2: TLabel; lblPackerPlugin: TLabel; lblPlugin: TLabel; nbTweakAll: TNotebook; pnlButtons: TPanel; pnlFlags: TPanel; pnlPackerExtsButtons: TPanel; pgTweakPacker: TPage; pgTweakOther: TPage; pnlTweak: TPanel; procedure btnAddClick(Sender: TObject); procedure btnChangeClick(Sender: TObject); procedure btnDefaultClick(Sender: TObject); procedure btnRelativePlugin1Click(Sender: TObject); procedure btnRelativePlugin2Click(Sender: TObject); procedure btnRemoveClick(Sender: TObject); procedure cbExtChange(Sender: TObject); procedure cbPackerFlagsClick(Sender: TObject); procedure FormCreate(Sender: TObject); private FWCXPlugins: TWCXModuleList; FPluginFileName: String; iPrevIndex: Integer; function GetDefaultFlags(PluginFileName: String): PtrInt; public constructor Create(TheOwner: TComponent); override; procedure LoadConfiguration(PluginIndex:integer); procedure SaveConfiguration(PluginIndex:integer); destructor Destroy; override; end; function ShowTweakPluginDlg(PluginType: TPluginType; PluginIndex: Integer): Boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Math, Dialogs, LCLVersion, //DC fOptionsPluginsDSX, fOptionsPluginsWCX, fOptionsPluginsWDX, fOptionsPluginsWFX, fOptionsPluginsWLX, WcxPlugin, uDCUtils, uLng, uSpecialDir, uWfxPluginUtil; function ShowTweakPluginDlg(PluginType: TPluginType; PluginIndex: Integer): Boolean; var I, iIndex: Integer; begin with TfrmTweakPlugin.Create(Application) do try case PluginType of ptDSX: begin nbTweakAll.PageIndex:= 1; fnePlugin2.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).FileName; edtDescription.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).Descr; edtName.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).Name; lblDetectStr.Visible:= False; edtDetectStr.Visible:= False; ActiveControl:=fnePlugin2; end; ptWCX: begin nbTweakAll.PageIndex:= 0; FWCXPlugins:= TWCXModuleList.Create; FWCXPlugins.Assign(tmpWCXPlugins); FPluginFileName := FWCXPlugins.FileName[PluginIndex]; fnePlugin1.FileName:= FPluginFileName; for I:= 0 to FWCXPlugins.Count - 1 do if FWCXPlugins.FileName[I] = fnePlugin1.FileName then begin if cbExt.Items.Count=0 then lblPlugin.Tag:=IfThen(FWCXPlugins.Enabled[I],1,0); cbExt.Items.AddObject(FWCXPlugins.Ext[I], TObject(FWCXPlugins.Flags[I])); end; iPrevIndex:= -1; cbExt.ItemIndex := cbExt.Items.IndexOf(FWCXPlugins.Ext[PluginIndex]); if (cbExt.ItemIndex = -1) then cbExt.ItemIndex := 0; cbExtChange(cbExt); btnRemove.Enabled:= (cbExt.Items.Count > 1); end; ptWDX: begin nbTweakAll.PageIndex:= 1; fnePlugin2.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).FileName; edtDetectStr.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).DetectStr; edtName.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).Name; lblDescription.Visible:= False; edtDescription.Visible:= False; ActiveControl:=fnePlugin2; end; ptWFX: begin nbTweakAll.PageIndex:= 1; fnePlugin2.Text:= tmpWFXPlugins.FileName[PluginIndex]; edtName.Text:= tmpWFXPlugins.Name[PluginIndex]; lblDetectStr.Visible:= False; edtDetectStr.Visible:= False; lblDescription.Visible:= False; edtDescription.Visible:= False; ActiveControl:=fnePlugin2; end; ptWLX: begin nbTweakAll.PageIndex:= 1; fnePlugin2.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).FileName; edtDetectStr.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).DetectStr; edtName.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).Name; lblDescription.Visible:= False; edtDescription.Visible:= False; ActiveControl:=fnePlugin2; end; end; LoadConfiguration(ord(PluginType)); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); Result:= (ShowModal = mrOK); if Result then case PluginType of ptDSX: begin tmpDSXPlugins.GetDsxModule(PluginIndex).FileName:= fnePlugin2.Text; tmpDSXPlugins.GetDsxModule(PluginIndex).Descr := edtDescription.Text; tmpDSXPlugins.GetDsxModule(PluginIndex).Name:= edtName.Text; end; ptWCX: begin for I:= 0 to cbExt.Items.Count - 1 do begin iIndex:= FWCXPlugins.Find(FPluginFileName, cbExt.Items[I]); if iIndex >= 0 then begin FWCXPlugins.FileName[iIndex]:= fnePlugin1.FileName; FWCXPlugins.Flags[iIndex]:= PtrInt(cbExt.Items.Objects[I]); end; end; tmpWCXPlugins.Assign(FWCXPlugins); end; ptWDX: begin tmpWDXPlugins.GetWdxModule(PluginIndex).FileName:= fnePlugin2.Text; tmpWDXPlugins.GetWdxModule(PluginIndex).DetectStr:= edtDetectStr.Text; tmpWDXPlugins.GetWdxModule(PluginIndex).Name:= edtName.Text; end; ptWFX: begin tmpWFXPlugins.FileName[PluginIndex]:= fnePlugin2.Text; tmpWFXPlugins.Name[PluginIndex]:= RepairPluginName(edtName.Text); end; ptWLX: begin tmpWLXPlugins.GetWlxModule(PluginIndex).FileName:= fnePlugin2.Text; tmpWLXPlugins.GetWlxModule(PluginIndex).DetectStr:= edtDetectStr.Text; tmpWLXPlugins.GetWlxModule(PluginIndex).Name:= edtName.Text; end; end; SaveConfiguration(ord(PluginType)); finally Free; end; end; { TfrmTweakPlugin } constructor TfrmTweakPlugin.Create(TheOwner: TComponent); begin iPrevIndex := -1; inherited Create(TheOwner); pgTweakOther.AutoSize:= True; pgTweakPacker.AutoSize:= True; end; { TfrmTweakPlugin.LoadConfiguration } // Just to save width. // Firt time it opens according to "autosize" system will determine, then when we exit it will be saved and then it will be restore to next session. procedure TfrmTweakPlugin.LoadConfiguration(PluginIndex:integer); begin if (gTweakPluginWidth[PluginIndex]<>0) AND (gTweakPluginHeight[PluginIndex]<>0) then begin AutoSize:=False; width := gTweakPluginWidth[PluginIndex]; height := gTweakPluginHeight[PluginIndex]; end; end; procedure TfrmTweakPlugin.SaveConfiguration(PluginIndex:integer); begin gTweakPluginWidth[PluginIndex] := width; gTweakPluginHeight[PluginIndex] := height; end; destructor TfrmTweakPlugin.Destroy; begin inherited; if Assigned(FWCXPlugins) then FreeAndNil(FWCXPlugins); end; procedure TfrmTweakPlugin.cbExtChange(Sender: TObject); var iFlags: PtrInt; begin iPrevIndex:= cbExt.ItemIndex; iFlags:= PtrInt(cbExt.Items.Objects[cbExt.ItemIndex]); lblFlagsValue.Caption:= '('+IntToStr(iFlags)+')'; cbPK_CAPS_NEW.Checked := (iFlags and PK_CAPS_NEW) <> 0; cbPK_CAPS_MODIFY.Checked := (iFlags and PK_CAPS_MODIFY) <> 0; cbPK_CAPS_MULTIPLE.Checked := (iFlags and PK_CAPS_MULTIPLE) <> 0; cbPK_CAPS_DELETE.Checked := (iFlags and PK_CAPS_DELETE) <> 0; cbPK_CAPS_OPTIONS.Checked := (iFlags and PK_CAPS_OPTIONS) <> 0; cbPK_CAPS_MEMPACK.Checked := (iFlags and PK_CAPS_MEMPACK) <> 0; cbPK_CAPS_BY_CONTENT.Checked := (iFlags and PK_CAPS_BY_CONTENT) <> 0; cbPK_CAPS_SEARCHTEXT.Checked := (iFlags and PK_CAPS_SEARCHTEXT) <> 0; cbPK_CAPS_HIDE.Checked := (iFlags and PK_CAPS_HIDE) <> 0; cbPK_CAPS_ENCRYPT.Checked := (iFlags and PK_CAPS_ENCRYPT) <> 0; end; procedure TfrmTweakPlugin.cbPackerFlagsClick(Sender: TObject); var iFlags: PtrInt; begin if iPrevIndex >= 0 then // save new flags begin iFlags:= 0; if cbPK_CAPS_NEW.Checked then iFlags:= iFlags or PK_CAPS_NEW; if cbPK_CAPS_MODIFY.Checked then iFlags:= iFlags or PK_CAPS_MODIFY; if cbPK_CAPS_MULTIPLE.Checked then iFlags:= iFlags or PK_CAPS_MULTIPLE; if cbPK_CAPS_DELETE.Checked then iFlags:= iFlags or PK_CAPS_DELETE; if cbPK_CAPS_OPTIONS.Checked then iFlags:= iFlags or PK_CAPS_OPTIONS; if cbPK_CAPS_MEMPACK.Checked then iFlags:= iFlags or PK_CAPS_MEMPACK; if cbPK_CAPS_BY_CONTENT.Checked then iFlags:= iFlags or PK_CAPS_BY_CONTENT; if cbPK_CAPS_SEARCHTEXT.Checked then iFlags:= iFlags or PK_CAPS_SEARCHTEXT; if cbPK_CAPS_HIDE.Checked then iFlags:= iFlags or PK_CAPS_HIDE; if cbPK_CAPS_ENCRYPT.Checked then iFlags:= iFlags or PK_CAPS_ENCRYPT; cbExt.Items.Objects[iPrevIndex]:= TObject(iFlags); lblFlagsValue.Caption:= '('+IntToStr(iFlags)+')'; end; end; procedure TfrmTweakPlugin.FormCreate(Sender: TObject); begin {$if not declared(lcl_fullversion) or (lcl_fullversion < 093100)} nbTweakAll.ShowTabs := False; nbTweakAll.TabStop := True; {$endif} end; procedure TfrmTweakPlugin.btnDefaultClick(Sender: TObject); begin cbExt.Items.Objects[cbExt.ItemIndex]:= TObject(GetDefaultFlags(fnePlugin1.FileName)); iPrevIndex:= -1; cbExtChange(cbExt); end; procedure TfrmTweakPlugin.btnRelativePlugin1Click(Sender: TObject); begin fnePlugin1.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fnePlugin1, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmTweakPlugin.btnRelativePlugin2Click(Sender: TObject); begin fnePlugin2.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fnePlugin2, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmTweakPlugin.btnRemoveClick(Sender: TObject); var I, OldIndex: Integer; begin iPrevIndex:= -1; // Must be before cbExt.Items.Delete, because it may trigger cbExtChange. OldIndex := cbExt.ItemIndex; I:= FWCXPlugins.Find(FPluginFileName, cbExt.Text); if I >= 0 then FWCXPlugins.Delete(I); cbExt.Items.Delete(cbExt.ItemIndex); if OldIndex >= cbExt.Items.Count then OldIndex := OldIndex - 1; cbExt.ItemIndex := OldIndex; if iPrevIndex = -1 then // Call only if not already triggerred. cbExtChange(cbExt); btnRemove.Enabled:= (cbExt.Items.Count > 1); end; procedure TfrmTweakPlugin.btnAddClick(Sender: TObject); var sExt: String = ''; iFlags: PtrInt; I: Integer; begin if InputQuery(rsOptEnterExt,Format(rsOptAssocPluginWith, [fnePlugin1.FileName]), sExt) then begin iFlags:= GetDefaultFlags(fnePlugin1.FileName); cbExt.ItemIndex:= cbExt.Items.AddObject(sExt, TObject(iFlags)); I := FWCXPlugins.Add(cbExt.Items[cbExt.ItemIndex], iFlags, FPluginFileName); FWCXPlugins.Enabled[I] := (lblPlugin.Tag=1); iPrevIndex:= -1; cbExtChange(cbExt); btnRemove.Enabled:= (cbExt.Items.Count > 1); end; end; procedure TfrmTweakPlugin.btnChangeClick(Sender: TObject); var I: Integer; sExt: String; begin sExt:= cbExt.Items[cbExt.ItemIndex]; I:= FWCXPlugins.Find(FPluginFileName, sExt); if (I >= 0) and InputQuery(rsOptEnterExt,Format(rsOptAssocPluginWith, [fnePlugin1.FileName]), sExt) then begin FWCXPlugins.Ext[I]:= sExt; cbExt.Items[cbExt.ItemIndex]:= sExt; end; end; function TfrmTweakPlugin.GetDefaultFlags(PluginFileName: String): PtrInt; var WcxModule: TWcxModule; begin WcxModule := gWCXPlugins.LoadModule(PluginFileName); if not Assigned(WcxModule) then Exit(0); Result := WcxModule.GetPluginCapabilities; end; end. doublecmd-1.1.30/src/ftweakplugin.lrj0000644000175000001440000001123715104114162016571 0ustar alexxusers{"version":1,"strings":[ {"hash":49154606,"name":"tfrmtweakplugin.caption","sourcebytes":[84,119,101,97,107,32,112,108,117,103,105,110],"value":"Tweak plugin"}, {"hash":121364138,"name":"tfrmtweakplugin.lblplugin.caption","sourcebytes":[38,80,108,117,103,105,110,58],"value":"&Plugin:"}, {"hash":208882618,"name":"tfrmtweakplugin.lblextension.caption","sourcebytes":[38,69,120,116,101,110,115,105,111,110,58],"value":"&Extension:"}, {"hash":80903786,"name":"tfrmtweakplugin.lblflags.caption","sourcebytes":[70,108,97,103,115,58],"value":"Flags:"}, {"hash":193742565,"name":"tfrmtweakplugin.btnremove.caption","sourcebytes":[38,82,101,109,111,118,101],"value":"&Remove"}, {"hash":212234487,"name":"tfrmtweakplugin.btnadd.caption","sourcebytes":[65,38,100,100,32,110,101,119],"value":"A&dd new"}, {"hash":97420437,"name":"tfrmtweakplugin.btnchange.caption","sourcebytes":[67,38,104,97,110,103,101],"value":"C&hange"}, {"hash":16913811,"name":"tfrmtweakplugin.cbpk_caps_new.caption","sourcebytes":[67,97,110,32,99,114,101,97,116,101,32,110,101,119,32,97,114,99,104,105,38,118,101,115],"value":"Can create new archi&ves"}, {"hash":79381779,"name":"tfrmtweakplugin.cbpk_caps_modify.caption","sourcebytes":[67,97,110,32,38,109,111,100,105,102,121,32,101,120,105,115,116,105,110,103,32,97,114,99,104,105,118,101,115],"value":"Can &modify existing archives"}, {"hash":238525683,"name":"tfrmtweakplugin.cbpk_caps_multiple.caption","sourcebytes":[38,65,114,99,104,105,118,101,32,99,97,110,32,99,111,110,116,97,105,110,32,109,117,108,116,105,112,108,101,32,102,105,108,101,115],"value":"&Archive can contain multiple files"}, {"hash":224030211,"name":"tfrmtweakplugin.cbpk_caps_delete.caption","sourcebytes":[67,97,110,32,100,101,38,108,101,116,101,32,102,105,108,101,115],"value":"Can de&lete files"}, {"hash":159368872,"name":"tfrmtweakplugin.cbpk_caps_options.caption","sourcebytes":[83,38,117,112,112,111,114,116,115,32,116,104,101,32,111,112,116,105,111,110,115,32,100,105,97,108,111,103,98,111,120],"value":"S&upports the options dialogbox"}, {"hash":124048393,"name":"tfrmtweakplugin.cbpk_caps_mempack.caption","sourcebytes":[83,117,112,112,111,114,116,115,32,112,97,99,38,107,105,110,103,32,105,110,32,109,101,109,111,114,121],"value":"Supports pac&king in memory"}, {"hash":83979044,"name":"tfrmtweakplugin.cbpk_caps_by_content.caption","sourcebytes":[68,101,38,116,101,99,116,32,97,114,99,104,105,118,101,32,116,121,112,101,32,98,121,32,99,111,110,116,101,110,116],"value":"De&tect archive type by content"}, {"hash":120574099,"name":"tfrmtweakplugin.cbpk_caps_searchtext.caption","sourcebytes":[65,108,108,111,119,32,115,101,97,114,99,104,105,110,38,103,32,102,111,114,32,116,101,120,116,32,105,110,32,97,114,99,104,105,118,101,115],"value":"Allow searchin&g for text in archives"}, {"hash":231932041,"name":"tfrmtweakplugin.cbpk_caps_hide.caption","sourcebytes":[83,104,111,38,119,32,97,115,32,110,111,114,109,97,108,32,102,105,108,101,115,32,40,104,105,100,101,32,112,97,99,107,101,114,32,105,99,111,110,41],"value":"Sho&w as normal files (hide packer icon)"}, {"hash":18290926,"name":"tfrmtweakplugin.cbpk_caps_encrypt.caption","sourcebytes":[83,117,112,112,111,114,116,115,32,101,38,110,99,114,121,112,116,105,111,110],"value":"Supports e&ncryption"}, {"hash":130846868,"name":"tfrmtweakplugin.btndefault.caption","sourcebytes":[68,101,38,102,97,117,108,116],"value":"De&fault"}, {"hash":15252584,"name":"tfrmtweakplugin.btnrelativeplugin1.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":45384586,"name":"tfrmtweakplugin.lblname.caption","sourcebytes":[38,78,97,109,101,58],"value":"&Name:"}, {"hash":101917722,"name":"tfrmtweakplugin.lbldetectstr.caption","sourcebytes":[68,38,101,116,101,99,116,32,115,116,114,105,110,103,58],"value":"D&etect string:"}, {"hash":181829802,"name":"tfrmtweakplugin.lbldescription.caption","sourcebytes":[38,68,101,115,99,114,105,112,116,105,111,110,58],"value":"&Description:"}, {"hash":121364138,"name":"tfrmtweakplugin.lblplugin2.caption","sourcebytes":[38,80,108,117,103,105,110,58],"value":"&Plugin:"}, {"hash":15252584,"name":"tfrmtweakplugin.btnrelativeplugin2.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":11067,"name":"tfrmtweakplugin.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmtweakplugin.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/ftweakplugin.lfm0000644000175000001440000004743515104114162016571 0ustar alexxusersobject frmTweakPlugin: TfrmTweakPlugin Left = 297 Height = 703 Top = 155 Width = 533 AutoSize = True Caption = 'Tweak plugin' ClientHeight = 703 ClientWidth = 533 OnCreate = FormCreate Position = poScreenCenter ShowInTaskBar = stNever LCLVersion = '2.2.7.0' object nbTweakAll: TNotebook Left = 0 Height = 664 Top = 0 Width = 533 PageIndex = 0 Align = alClient AutoSize = True TabOrder = 0 TabStop = True object pgTweakPacker: TPage object pnlTweak: TPanel Left = 6 Height = 652 Top = 6 Width = 521 Align = alClient BorderSpacing.Around = 6 BevelOuter = bvNone BorderStyle = bsSingle ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 8 ClientHeight = 648 ClientWidth = 517 TabOrder = 0 object lblFlagsValue: TLabel AnchorSideLeft.Control = lblFlags AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblFlags AnchorSideTop.Side = asrBottom Left = 25 Height = 1 Top = 87 Width = 1 ParentColor = False end object lblPlugin: TLabel AnchorSideLeft.Control = pnlTweak AnchorSideTop.Control = fnePlugin1 AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 12 Width = 37 BorderSpacing.Top = 12 Caption = '&Plugin:' ParentColor = False end object lblExtension: TLabel AnchorSideLeft.Control = lblPlugin AnchorSideTop.Control = pnlPackerExtsButtons AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 44 Width = 54 BorderSpacing.Top = 12 Caption = '&Extension:' FocusControl = cbExt ParentColor = False end object lblFlags: TLabel AnchorSideLeft.Control = lblExtension AnchorSideTop.Control = pnlPackerExtsButtons AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 72 Width = 30 BorderSpacing.Top = 8 Caption = 'Flags:' ParentColor = False end object pnlPackerExtsButtons: TPanel AnchorSideLeft.Control = lblExtension AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fnePlugin1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativePlugin1 AnchorSideRight.Side = asrBottom Left = 76 Height = 25 Top = 39 Width = 431 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 12 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 25 ClientWidth = 431 TabOrder = 0 object cbExt: TComboBox Left = 0 Height = 23 Top = 0 Width = 128 Constraints.MinWidth = 80 ItemHeight = 15 OnChange = cbExtChange Style = csDropDownList TabOrder = 0 end object btnRemove: TButton Left = 128 Height = 25 Top = 0 Width = 101 AutoSize = True Caption = '&Remove' Constraints.MinWidth = 80 OnClick = btnRemoveClick TabOrder = 1 end object btnAdd: TButton Left = 229 Height = 25 Top = 0 Width = 101 AutoSize = True Caption = 'A&dd new' Constraints.MinWidth = 80 OnClick = btnAddClick TabOrder = 2 end object btnChange: TButton Left = 330 Height = 25 Top = 0 Width = 101 AutoSize = True Caption = 'C&hange' Constraints.MinWidth = 80 OnClick = btnChangeClick TabOrder = 3 end end object pnlFlags: TPanel AnchorSideLeft.Control = pnlPackerExtsButtons AnchorSideTop.Control = lblFlags AnchorSideRight.Control = pnlTweak AnchorSideRight.Side = asrBottom Left = 76 Height = 221 Top = 72 Width = 226 AutoSize = True BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 221 ClientWidth = 226 TabOrder = 1 object cbPK_CAPS_NEW: TCheckBox Left = 0 Height = 19 Top = 0 Width = 226 Caption = 'Can create new archi&ves' OnClick = cbPackerFlagsClick TabOrder = 0 end object cbPK_CAPS_MODIFY: TCheckBox Left = 0 Height = 19 Top = 19 Width = 226 Caption = 'Can &modify existing archives' OnClick = cbPackerFlagsClick TabOrder = 1 end object cbPK_CAPS_MULTIPLE: TCheckBox Left = 0 Height = 19 Top = 38 Width = 226 Caption = '&Archive can contain multiple files' OnClick = cbPackerFlagsClick TabOrder = 2 end object cbPK_CAPS_DELETE: TCheckBox Left = 0 Height = 19 Top = 57 Width = 226 Caption = 'Can de&lete files' OnClick = cbPackerFlagsClick TabOrder = 3 end object cbPK_CAPS_OPTIONS: TCheckBox Left = 0 Height = 19 Top = 76 Width = 226 Caption = 'S&upports the options dialogbox' OnClick = cbPackerFlagsClick TabOrder = 4 end object cbPK_CAPS_MEMPACK: TCheckBox Left = 0 Height = 19 Top = 95 Width = 226 Caption = 'Supports pac&king in memory' OnClick = cbPackerFlagsClick TabOrder = 5 end object cbPK_CAPS_BY_CONTENT: TCheckBox Left = 0 Height = 19 Top = 114 Width = 226 Caption = 'De&tect archive type by content' OnClick = cbPackerFlagsClick TabOrder = 6 end object cbPK_CAPS_SEARCHTEXT: TCheckBox Left = 0 Height = 19 Top = 133 Width = 226 Caption = 'Allow searchin&g for text in archives' OnClick = cbPackerFlagsClick TabOrder = 7 end object cbPK_CAPS_HIDE: TCheckBox Left = 0 Height = 19 Top = 152 Width = 226 Caption = 'Sho&w as normal files (hide packer icon)' OnClick = cbPackerFlagsClick TabOrder = 8 end object cbPK_CAPS_ENCRYPT: TCheckBox Left = 0 Height = 19 Top = 171 Width = 226 Caption = 'Supports e&ncryption' OnClick = cbPackerFlagsClick TabOrder = 9 end object btnDefault: TButton AnchorSideLeft.Control = cbPK_CAPS_ENCRYPT AnchorSideTop.Control = cbPK_CAPS_ENCRYPT AnchorSideTop.Side = asrBottom Left = 0 Height = 25 Top = 196 Width = 100 AutoSize = True BorderSpacing.Top = 6 Caption = 'De&fault' Constraints.MinWidth = 100 OnClick = btnDefaultClick TabOrder = 10 end end object fnePlugin1: TFileNameEdit AnchorSideLeft.Control = lblPlugin2 AnchorSideTop.Control = pnlTweak AnchorSideRight.Control = btnRelativePlugin1 Left = 71 Height = 23 Top = 8 Width = 412 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 MaxLength = 0 TabOrder = 2 end object btnRelativePlugin1: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fnePlugin1 AnchorSideRight.Control = pnlTweak AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fnePlugin1 AnchorSideBottom.Side = asrBottom Left = 483 Height = 23 Hint = 'Some functions to select appropriate path' Top = 8 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativePlugin1Click end end end object pgTweakOther: TPage object pnlTweakOther: TPanel Left = 6 Height = 652 Top = 6 Width = 521 Align = alClient Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone BorderStyle = bsSingle ClientHeight = 648 ClientWidth = 517 TabOrder = 0 object lblName: TLabel AnchorSideLeft.Control = lblPlugin2 AnchorSideTop.Control = fnePlugin2 AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 60 Width = 35 Caption = '&Name:' FocusControl = edtName ParentColor = False end object lblDetectStr: TLabel AnchorSideLeft.Control = lblName AnchorSideTop.Control = edtName AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 112 Width = 70 Caption = 'D&etect string:' FocusControl = edtDetectStr ParentColor = False end object lblDescription: TLabel AnchorSideLeft.Control = lblDetectStr AnchorSideTop.Control = edtDetectStr AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 164 Width = 63 Caption = '&Description:' FocusControl = edtDescription ParentColor = False end object edtName: TEdit AnchorSideLeft.Control = lblName AnchorSideTop.Control = lblName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativePlugin2 AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 81 Width = 497 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 1 end object edtDetectStr: TEdit AnchorSideTop.Control = lblDetectStr AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativePlugin2 AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 133 Width = 497 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 2 end object edtDescription: TEdit AnchorSideTop.Control = lblDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativePlugin2 AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 185 Width = 497 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 3 end object lblPlugin2: TLabel AnchorSideLeft.Control = pnlTweakOther AnchorSideTop.Control = pnlTweakOther Left = 10 Height = 15 Top = 8 Width = 37 BorderSpacing.Left = 10 BorderSpacing.Top = 8 Caption = '&Plugin:' FocusControl = fnePlugin2 ParentColor = False end object fnePlugin2: TFileNameEdit AnchorSideLeft.Control = lblPlugin2 AnchorSideTop.Control = lblPlugin2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativePlugin2 Left = 10 Height = 23 Top = 29 Width = 473 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 Constraints.MinWidth = 350 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 MaxLength = 0 TabOrder = 0 end object btnRelativePlugin2: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fnePlugin2 AnchorSideRight.Control = pnlTweakOther AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fnePlugin2 AnchorSideBottom.Side = asrBottom Left = 483 Height = 23 Hint = 'Some functions to select appropriate path' Top = 29 Width = 24 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 10 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativePlugin2Click end end end end object pnlButtons: TPanel Left = 0 Height = 39 Top = 664 Width = 533 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 39 ClientWidth = 533 TabOrder = 1 object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 318 Height = 25 Top = 7 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 Caption = '&OK' Constraints.MinWidth = 100 Default = True ModalResult = 1 TabOrder = 0 end object btnCancel: TButton AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButtons AnchorSideBottom.Side = asrBottom Left = 426 Height = 25 Top = 7 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Around = 7 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 ModalResult = 2 TabOrder = 1 end end object pmPathHelper: TPopupMenu Left = 224 Top = 600 end end doublecmd-1.1.30/src/ftreeviewmenu.pas0000644000175000001440000015355015104114162016757 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Menu offered to user via a Tree View look where user might type sequence of letters Copyright (C) 2016-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fTreeViewMenu; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls, StdCtrls, ExtCtrls, Menus, Types, LMessages, //DC kastoolitems, KASToolBar, uKASToolItemsExtended; type // *IMPORTANT: "tvmcLASTONE" always must be the last one as it is used to give the number of element here. tvmContextMode = (tvmcHotDirectory, tvmcFavoriteTabs, tvmcDirHistory, tvmcViewHistory, tvmcKASToolBar, tvmcMainMenu, tvmcCommandLineHistory, tvmcFileSelectAssistant, tvmcLASTONE); TTreeViewMenuOptions = record CaseSensitive: boolean; IgnoreAccents: boolean; ShowWholeBranchIfMatch: boolean; end; { TTreeMenuItem } // In out TreeView, the "pointer" will actually point this type of element where the "FPointerSourceData" might actually point the actual vital items user actually choose. TTreeMenuItem = class private FPointerSourceData: Pointer; FTypeDispatcher: integer; FSecondaryText: string; FKeyboardShortcut: char; public constructor Create(PointerSourceData: Pointer); property PointerSourceData: Pointer read FPointerSourceData; property KeyboardShortcut: char read FKeyboardShortcut write FKeyboardShortcut; property SecondaryText: string read FSecondaryText write FSecondaryText; property TypeDispatcher: integer read FTypeDispatcher write FTypeDispatcher; end; { TTreeViewMenuGenericRoutineAndVarHolder } // Everything could have been placed into the "TfrmTreeViewMenu" form. // But this "sub-object" exists just to allow the configuration form to use the *same* routine to draw the tree so the test color could be tested this way. TTreeViewMenuGenericRoutineAndVarHolder = class(TObject) private FContextMode: tvmContextMode; FCaseSensitive: boolean; FIgnoreAccents: boolean; FShowWholeBranchIfMatch: boolean; FSearchingText: string; FShowShortcut: boolean; FMayStopOnNode: boolean; FBackgroundColor: TColor; FShortcutColor: TColor; FNormalTextColor: TColor; FSecondaryTextColor: TColor; FFoundTextColor: TColor; FUnselectableTextColor: TColor; FCursorColor: TColor; FShortcutUnderCursor: TColor; FNormalTextUnderCursor: TColor; FSecondaryTextUnderCursor: TColor; FFoundTextUnderCursor: TColor; FUnselectableUnderCursor: TColor; public function AddTreeViewMenuItem(ATreeView: TTreeView; ParentNode: TTreeNode; const S: string; const SecondaryText: string = ''; TypeDispatcher: integer = 0; Data: Pointer = nil): TTreeNode; procedure TreeViewMenuAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var {%H-}PaintImages, DefaultDraw: boolean); property ContextMode: tvmContextMode read FContextMode write FContextMode; property CaseSensitive: boolean read FCaseSensitive write FCaseSensitive; property IgnoreAccents: boolean read FIgnoreAccents write FIgnoreAccents; property ShowWholeBranchIfMatch: boolean read FShowWholeBranchIfMatch write FShowWholeBranchIfMatch; property SearchingText: string read FSearchingText write FSearchingText; property ShowShortcut: boolean read FShowShortcut write FShowShortcut; property MayStopOnNode: boolean read FMayStopOnNode write FMayStopOnNode; property BackgroundColor: TColor read FBackgroundColor write FBackgroundColor; property ShortcutColor: TColor read FShortcutColor write FShortcutColor; property NormalTextColor: TColor read FNormalTextColor write FNormalTextColor; property SecondaryTextColor: TColor read FSecondaryTextColor write FSecondaryTextColor; property FoundTextColor: TColor read FFoundTextColor write FFoundTextColor; property UnselectableTextColor: TColor read FUnselectableTextColor write FUnselectableTextColor; property CursorColor: TColor read FCursorColor write FCursorColor; property ShortcutUnderCursor: TColor read FShortcutUnderCursor write FShortcutUnderCursor; property NormalTextUnderCursor: TColor read FNormalTextUnderCursor write FNormalTextUnderCursor; property SecondaryTextUnderCursor: TColor read FSecondaryTextUnderCursor write FSecondaryTextUnderCursor; property FoundTextUnderCursor: TColor read FFoundTextUnderCursor write FFoundTextUnderCursor; property UnselectableUnderCursor: TColor read FUnselectableUnderCursor write FUnselectableUnderCursor; end; { TfrmTreeViewMenu } TfrmTreeViewMenu = class(TForm) pnlAll: TPanel; lblSearchingEntry: TLabel; edSearchingEntry: TEdit; tvMainMenu: TTreeView; tbOptions: TToolBar; tbCaseSensitive: TToolButton; tbIgnoreAccents: TToolButton; tbShowWholeBranchOrNot: TToolButton; tbDivider: TToolButton; tbFullExpandOrNot: TToolButton; tbClose: TToolBar; tbConfigurationTreeViewMenus: TToolButton; tbConfigurationTreeViewMenusColors: TToolButton; tbCancelAndQuit: TToolButton; pmCaseSensitiveOrNot: TPopupMenu; pmiCaseSensitive: TMenuItem; pmiNotCaseSensitive: TMenuItem; pmIgnoreAccentsOrNot: TPopupMenu; pmiIgnoreAccents: TMenuItem; pmiNotIgnoreAccents: TMenuItem; pmShowWholeBranchIfMatchOrNot: TPopupMenu; pmiShowWholeBranchIfMatch: TMenuItem; pmiNotShowWholeBranchIfMatch: TMenuItem; pmFullExpandOrNot: TPopupMenu; pmiFullExpand: TMenuItem; pmiFullCollapse: TMenuItem; imgListButton: TImageList; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction); procedure FormCloseQuery(Sender: TObject; var {%H-}CanClose: boolean); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure tbCaseSensitiveClick(Sender: TObject); procedure pmiCaseSensitiveOrNotClick(Sender: TObject); procedure tbIgnoreAccentsClick(Sender: TObject); procedure pmiIgnoreAccentsOrNotClick(Sender: TObject); procedure tbShowWholeBranchOrNotClick(Sender: TObject); procedure pmiShowWholeBranchIfMatchOrNotClick(Sender: TObject); procedure tbFullExpandOrNotClick(Sender: TObject); procedure pmiFullExpandOrNotClick(Sender: TObject); procedure tbConfigurationTreeViewMenusClick(Sender: TObject); procedure tbConfigurationTreeViewMenusColorsClick(Sender: TObject); procedure tbCancelAndQuitClick(Sender: TObject); procedure edSearchingEntryChange(Sender: TObject); procedure tvMainMenuClick(Sender: TObject); procedure tvMainMenuDblClick(Sender: TObject); procedure tvMainMenuEnter(Sender: TObject); procedure tvMainMenuMouseMove(Sender: TObject; {%H-}Shift: TShiftState; X, Y: integer); procedure tvMainMenuMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure tvMainMenuMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure tvMainMenuSelectionChanged(Sender: TObject); procedure tvMainMenuExpandOrCollapseClick(Sender: TObject; {%H-}Node: TTreeNode); function isAtLeastOneItemVisibleAndSelectable: boolean; procedure SelectNextVisibleItem; procedure SelectPreviousVisibleItem; procedure SelectFirstVisibleItem; procedure SelectLastVisibleItem; procedure SetShortcuts; function WasAbleToSelectShortCutLetter(SearchKey: char): boolean; function AttemptToExitWithCurrentSelection: boolean; procedure SetSizeToLargestElement; private { private declarations } bTargetFixedWidth: boolean; LastMousePos: TPoint; protected procedure UpdateColors; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public { public declarations } iFinalSelectedIndex: integer; TreeViewMenuGenericRoutineAndVarHolder: TTreeViewMenuGenericRoutineAndVarHolder; procedure SetContextMode(WantedContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0); procedure HideUnmatchingNode; end; // Actual routine called from the outside to help user to quickly select something using the "Tree View Menu" concept. function GetUserChoiceFromTStrings(ATStrings: TStrings; ContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0): string; function GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(pmAnyMenu: TMenu; ContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0): TMenuItem; function GetUserChoiceFromKASToolBar(AKASToolBar: TKASToolBar; ContextMode: tvmContextMode; WantedPosX, WantedPosY, WantedWidth, WantedHeight: integer; var ReturnedTypeDispatcher: integer): Pointer; var frmTreeViewMenu: TfrmTreeViewMenu; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLType, LCLIntf, LazUTF8, //DC uLng, fMain, uGlobs, uAccentsUtils; const CONST_CANCEL_ACTION = -1; CONST_CONFIG_ACTION = -2; CONST_CONFIG_COLOR_ACTION = -3; var sTreeViewMenuShortcutString: string = '0123456789abcdefghijklmnopqrstuvwxyz'; { TTreeMenuItem.Create } constructor TTreeMenuItem.Create(PointerSourceData: Pointer); begin FPointerSourceData := PointerSourceData; FTypeDispatcher := 0; FSecondaryText := ''; FKeyboardShortcut := ' '; end; { TTreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem } function TTreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(ATreeView: TTreeView; ParentNode: TTreeNode; const S: string; const SecondaryText: string = ''; TypeDispatcher: integer = 0; Data: Pointer = nil): TTreeNode; var ATreeMenuItem: TTreeMenuItem; begin ATreeMenuItem := TTreeMenuItem.Create(Data); ATreeMenuItem.TypeDispatcher := TypeDispatcher; ATreeMenuItem.KeyboardShortcut := ' '; ATreeMenuItem.SecondaryText := SecondaryText; Result := ATreeView.Items.AddChildObject(ParentNode, S, ATreeMenuItem); end; { TTreeViewMenuGenericRoutineAndVarHolder.TreeViewMenuAdvancedCustomDrawItem } procedure TTreeViewMenuGenericRoutineAndVarHolder.TreeViewMenuAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: boolean); var NodeRect: TRect; sPart, sStringToShow: string; iRenduX: integer; iPosNormal: integer = 0; iMatchingLengthInSource: integer = 0; iTotalWidth: integer; local_TextColor: TColor; local_ShortcutColor: TColor; local_SecondaryTextColor: TColor; local_FoundTextColor: TColor; begin if TCustomTreeView(Sender).BackgroundColor <> BackgroundColor then TCustomTreeView(Sender).BackgroundColor := BackgroundColor; if TCustomTreeView(Sender).Color <> BackgroundColor then TCustomTreeView(Sender).Color := BackgroundColor; if Stage = cdPostPaint then begin if Node <> nil then begin NodeRect := Node.DisplayRect(True); iTotalWidth := ((TCustomTreeView(Sender).Width - Node.DisplayTextLeft) - 25); NodeRect.Right := NodeRect.Left + iTotalWidth; if cdsSelected in State then begin // Draw something under selection. TTreeView(Sender).Canvas.Brush.Color := CursorColor; local_ShortcutColor := ShortcutUnderCursor; local_SecondaryTextColor := SecondaryTextUnderCursor; if (Node.Count = 0) or (FMayStopOnNode) then local_TextColor := NormalTextUnderCursor else local_TextColor := UnselectableUnderCursor; local_FoundTextColor := FoundTextUnderCursor; end else begin // Draw something unselected. TTreeView(Sender).Canvas.Brush.Color := BackgroundColor; local_ShortcutColor := ShortcutColor; local_SecondaryTextColor := SecondaryTextColor; if (Node.Count = 0) or (FMayStopOnNode) then local_TextColor := NormalTextColor else local_TextColor := UnselectableTextColor; local_FoundTextColor := FoundTextColor; end; TTreeView(Sender).Canvas.Brush.Style := bsSolid; TTreeView(Sender).Canvas.FillRect(NodeRect); TTreeView(Sender).Canvas.Brush.Style := bsClear; sStringToShow := Node.Text; iRenduX := NodeRect.Left + 3; // Short the shortcut name if config wants it AND if we have one to give. if (FShowShortcut) and (TTreeMenuItem(Node.Data).KeyboardShortcut <> ' ') then begin TTreeView(Sender).Canvas.Font.Color := local_ShortcutColor; sPart := '[' + TTreeMenuItem(Node.Data).KeyboardShortcut + '] '; TTreeView(Sender).Canvas.TextOut(iRenduX, NodeRect.Top + 1, sPart); iRenduX := iRenduX + TTreeView(Sender).Canvas.TextWidth(sPart); end; if (Node.Count = 0) or (FMayStopOnNode or ShowWholeBranchIfMatch) then begin while sStringToShow <> '' do begin iPosNormal := PosOfSubstrWithVersatileOptions(FSearchingText, sStringToShow, CaseSensitive, IgnoreAccents, iMatchingLengthInSource); if iPosNormal > 0 then begin if iPosNormal > 1 then begin // What we have in black prior the red... TTreeView(Sender).Canvas.Font.Color := local_TextColor; sPart := UTF8LeftStr(sStringToShow, pred(iPosNormal)); TTreeView(Sender).Canvas.TextOut(iRenduX, NodeRect.Top + 1, sPart); iRenduX := iRenduX + TTreeView(Sender).Canvas.TextWidth(sPart); sStringToShow := UTF8RightStr(sStringToShow, ((UTF8Length(sStringToShow) - iPosNormal) + 1)); end; // What we have in red... TTreeView(Sender).Canvas.Font.Style := TTreeView(Sender).Canvas.Font.Style + [fsUnderline, fsBold]; TTreeView(Sender).Canvas.Font.Color := local_FoundTextColor; sPart := UTF8Copy(sStringToShow, 1, iMatchingLengthInSource); TTreeView(Sender).Canvas.TextOut(iRenduX, NodeRect.Top + 1, sPart); iRenduX := iRenduX + TTreeView(Sender).Canvas.TextWidth(sPart); TTreeView(Sender).Canvas.Font.Style := TTreeView(Sender).Canvas.Font.Style - [fsUnderline, fsBold]; sStringToShow := UTF8RightStr(sStringToShow, ((UTF8Length(sStringToShow) - iMatchingLengthInSource))); end else begin TTreeView(Sender).Canvas.Font.Color := local_TextColor; TTreeView(Sender).Canvas.TextOut(iRenduX, NodeRect.Top + 1, sStringToShow); iRenduX := iRenduX + TTreeView(Sender).Canvas.TextWidth(sStringToShow); sStringToShow := ''; end; end; end else begin TTreeView(Sender).Canvas.Font.Color := local_TextColor; TTreeView(Sender).Canvas.TextOut(iRenduX, NodeRect.Top + 1, sStringToShow); iRenduX := iRenduX + TTreeView(Sender).Canvas.TextWidth(sStringToShow); end; if TTreeMenuItem(Node.Data).SecondaryText <> '' then begin TTreeView(Sender).Canvas.Font.Color := local_SecondaryTextColor; TTreeView(Sender).Canvas.Font.Style := TTreeView(Sender).Canvas.Font.Style + [fsItalic]; TTreeView(Sender).Canvas.TextOut(iRenduX + 4, NodeRect.Top + 1 + 1, TTreeMenuItem(Node.Data).SecondaryText); //If we ever add something else after one day: iRenduX := iRenduX+4 + TTreeView(Sender).Canvas.TextWidth(TTreeMenuItem(Node.Data).SecondaryText); TTreeView(Sender).Canvas.Font.Style := TTreeView(Sender).Canvas.Font.Style - [fsItalic]; end; DefaultDraw := False; end; end; end; { TfrmTreeViewMenu.FormCreate } procedure TfrmTreeViewMenu.FormCreate(Sender: TObject); begin bTargetFixedWidth := False; LastMousePos.x := -1; LastMousePos.y := -1; iFinalSelectedIndex := CONST_CANCEL_ACTION; FontOptionsToFont(gFonts[dcfTreeViewMenu], tvMainMenu.Font); TreeViewMenuGenericRoutineAndVarHolder := TTreeViewMenuGenericRoutineAndVarHolder.Create; UpdateColors; tvMainMenu.OnAdvancedCustomDrawItem := @TreeViewMenuGenericRoutineAndVarHolder.TreeViewMenuAdvancedCustomDrawItem; edSearchingEntryChange(nil); end; { TfrmTreeViewMenu.FormClose } procedure TfrmTreeViewMenu.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin case iFinalSelectedIndex of CONST_CANCEL_ACTION: ModalResult := mrCancel; CONST_CONFIG_ACTION: ModalResult := mrYes; CONST_CONFIG_COLOR_ACTION: ModalResult := mrAll; else ModalResult := mrOk; end; end; { TfrmTreeViewMenu.FormCloseQuery } procedure TfrmTreeViewMenu.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin tvMainMenu.OnExpanded := nil; tvMainMenu.OnCollapsed := nil; tvMainMenu.OnSelectionChanged := nil; Application.ProcessMessages; //We saved our options. We're aware it will save it even if user CANCEL the action but after a few test, the author of these lines feels it is better this way. gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].CaseSensitive := TreeViewMenuGenericRoutineAndVarHolder.CaseSensitive; gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].IgnoreAccents := TreeViewMenuGenericRoutineAndVarHolder.IgnoreAccents; gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].ShowWholeBranchIfMatch := TreeViewMenuGenericRoutineAndVarHolder.ShowWholeBranchIfMatch; end; { TfrmTreeViewMenu.FormDestroy } procedure TfrmTreeViewMenu.FormDestroy(Sender: TObject); begin FreeAndNil(TreeViewMenuGenericRoutineAndVarHolder); inherited; end; { TfrmTreeViewMenu.FormKeyDown } procedure TfrmTreeViewMenu.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); var ChoiceNode: TTreeNode; begin if edSearchingEntry.Focused then begin case Key of VK_HOME: // Home Key begin if SSCTRL in Shift then begin SelectFirstVisibleItem; Key := 0; end; end; VK_END: // End Key begin if SSCTRL in Shift then begin SelectLastVisibleItem; Key := 0; end; end; end; end; if ssALT in Shift then begin case Key of VK_0..VK_9, VK_A..VK_Z: if WasAbleToSelectShortCutLetter(char(Key)) then Key := 0; end; if (Key = 0) and gTreeViewMenuShortcutExit then AttemptToExitWithCurrentSelection; end; case Key of VK_UP: // Up Arrow Key begin SelectPreviousVisibleItem; Key := 0; end; VK_DOWN: // Down Arrow Key begin SelectNextVisibleItem; Key := 0; end; VK_END: // End Key - Let's play tricky: if cursor is at the end into the edit box, let's assume user pressed the "end" key to go to the end in the list. begin if edSearchingEntry.SelStart >= utf8Length(edSearchingEntry.Text) then begin SelectLastVisibleItem; Key := 0; end; end; VK_HOME: // Home Key - Let's play tricky: if cursor is at the beginning into the edit box, let's assume user pressed the "home" key to go to the first in the list. begin if edSearchingEntry.SelStart = 0 then begin SelectFirstVisibleItem; Key := 0; end; end; VK_RETURN: // Enter key begin ChoiceNode := tvMainMenu.Selected; if ChoiceNode <> nil then begin if (TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode) or (ChoiceNode.Count = 0) then begin Key := 0; AttemptToExitWithCurrentSelection; end; end; end; VK_ESCAPE: // Escape key begin Key := 0; Close; end; end; end; { TfrmTreeViewMenu.tbCaseSensitiveClick } procedure TfrmTreeViewMenu.tbCaseSensitiveClick(Sender: TObject); var pmiToSwitchTo: TMenuItem = nil; begin if pmiNotCaseSensitive.Checked then pmiToSwitchTo := pmiCaseSensitive else if pmiCaseSensitive.Checked then pmiToSwitchTo := pmiNotCaseSensitive; if pmiToSwitchTo <> nil then begin pmiToSwitchTo.Checked := True; pmiCaseSensitiveOrNotClick(pmiToSwitchTo); end; end; { TfrmTreeViewMenu.pmiCaseSensitiveOrNotClick } procedure TfrmTreeViewMenu.pmiCaseSensitiveOrNotClick(Sender: TObject); begin begin with Sender as TMenuItem do begin tbCaseSensitive.ImageIndex := ImageIndex; tbCaseSensitive.Hint := Caption; end; edSearchingEntryChange(edSearchingEntry); end; end; { TfrmTreeViewMenu.tbIgnoreAccentsClick } procedure TfrmTreeViewMenu.tbIgnoreAccentsClick(Sender: TObject); var pmiToSwitchTo: TMenuItem = nil; begin if pmiIgnoreAccents.Checked then pmiToSwitchTo := pmiNotIgnoreAccents else if pmiNotIgnoreAccents.Checked then pmiToSwitchTo := pmiIgnoreAccents; if pmiToSwitchTo <> nil then begin pmiToSwitchTo.Checked := True; pmiIgnoreAccentsOrNotClick(pmiToSwitchTo); end; end; { TfrmTreeViewMenu.pmiIgnoreAccentsOrNotClick } procedure TfrmTreeViewMenu.pmiIgnoreAccentsOrNotClick(Sender: TObject); begin with Sender as TMenuItem do begin tbIgnoreAccents.ImageIndex := ImageIndex; tbIgnoreAccents.Hint := Caption; end; edSearchingEntryChange(edSearchingEntry); end; { TfrmTreeViewMenu.tbShowWholeBranchOrNotClick } procedure TfrmTreeViewMenu.tbShowWholeBranchOrNotClick(Sender: TObject); var pmiToSwitchTo: TMenuItem = nil; begin if pmiShowWholeBranchIfMatch.Checked then pmiToSwitchTo := pmiNotShowWholeBranchIfMatch else if pmiNotShowWholeBranchIfMatch.Checked then pmiToSwitchTo := pmiShowWholeBranchIfMatch; if pmiToSwitchTo <> nil then begin pmiToSwitchTo.Checked := True; pmiShowWholeBranchIfMatchOrNotClick(pmiToSwitchTo); end; end; { TfrmTreeViewMenu.pmiShowWholeBranchIfMatchOrNotClick } procedure TfrmTreeViewMenu.pmiShowWholeBranchIfMatchOrNotClick(Sender: TObject); begin with Sender as TMenuItem do begin tbShowWholeBranchOrNot.ImageIndex := ImageIndex; tbShowWholeBranchOrNot.Hint := Caption; end; edSearchingEntryChange(edSearchingEntry); end; { TfrmTreeViewMenu.tbFullExpandOrNotClick } procedure TfrmTreeViewMenu.tbFullExpandOrNotClick(Sender: TObject); var pmiToSwitchTo: TMenuItem = nil; begin if pmiFullExpand.Checked then pmiToSwitchTo := pmiFullCollapse else if pmiFullCollapse.Checked then pmiToSwitchTo := pmiFullExpand; if pmiToSwitchTo <> nil then begin pmiToSwitchTo.Checked := True; pmiFullExpandOrNotClick(pmiToSwitchTo); end; end; { TfrmTreeViewMenu.pmiFullExpandOrNotClick } procedure TfrmTreeViewMenu.pmiFullExpandOrNotClick(Sender: TObject); begin with Sender as TMenuItem do begin tbFullExpandOrNot.ImageIndex := ImageIndex; tbFullExpandOrNot.Hint := Caption; end; if pmiFullExpand.Checked then tvMainMenu.FullExpand else tvMainMenu.FullCollapse; end; { TfrmTreeViewMenu.tbConfigurationTreeViewMenusClick } procedure TfrmTreeViewMenu.tbConfigurationTreeViewMenusClick(Sender: TObject); begin iFinalSelectedIndex := CONST_CONFIG_ACTION; Close; end; { TfrmTreeViewMenu.tbConfigurationTreeViewMenusColorsClick } procedure TfrmTreeViewMenu.tbConfigurationTreeViewMenusColorsClick(Sender: TObject); begin iFinalSelectedIndex := CONST_CONFIG_COLOR_ACTION; Close; end; { TfrmTreeViewMenu.tbCancelAndQuitClick } procedure TfrmTreeViewMenu.tbCancelAndQuitClick(Sender: TObject); begin Close; end; { TfrmTreeViewMenu.edSearchingEntryChange } procedure TfrmTreeViewMenu.edSearchingEntryChange(Sender: TObject); begin TreeViewMenuGenericRoutineAndVarHolder.CaseSensitive := pmiCaseSensitive.Checked; TreeViewMenuGenericRoutineAndVarHolder.IgnoreAccents := pmiIgnoreAccents.Checked; TreeViewMenuGenericRoutineAndVarHolder.ShowWholeBranchIfMatch := pmiShowWholeBranchIfMatch.Checked; TreeViewMenuGenericRoutineAndVarHolder.SearchingText := edSearchingEntry.Text; TreeViewMenuGenericRoutineAndVarHolder.ShowShortcut := gTreeViewMenuUseKeyboardShortcut; if pmiIgnoreAccents.Checked then TreeViewMenuGenericRoutineAndVarHolder.SearchingText := NormalizeAccentedChar(TreeViewMenuGenericRoutineAndVarHolder.SearchingText); if not pmiCaseSensitive.Checked then TreeViewMenuGenericRoutineAndVarHolder.SearchingText := UTF8UpperCase(TreeViewMenuGenericRoutineAndVarHolder.SearchingText); HideUnmatchingNode; end; { TfrmTreeViewMenu.tvMainMenuClick } procedure TfrmTreeViewMenu.tvMainMenuClick(Sender: TObject); begin if gTreeViewMenuSingleClickExit then AttemptToExitWithCurrentSelection; end; { TfrmTreeViewMenu.tvMainMenuDblClick } procedure TfrmTreeViewMenu.tvMainMenuDblClick(Sender: TObject); begin if gTreeViewMenuDoubleClickExit then AttemptToExitWithCurrentSelection; end; { TfrmTreeViewMenu.tvMainMenuEnter } procedure TfrmTreeViewMenu.tvMainMenuEnter(Sender: TObject); begin if edSearchingEntry.CanFocus then edSearchingEntry.SetFocus; end; { TfrmTreeViewMenu.tvMainMenuMouseMove } procedure TfrmTreeViewMenu.tvMainMenuMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); var ANode: TTreeNode; begin if (LastMousePos.x <> -1) and (LastMousePos.y <> -1) then begin ANode := tvMainMenu.GetNodeAt(X, Y); if ANode <> nil then if not ANode.Selected then ANode.Selected := True; end; LastMousePos.x := X; LastMousePos.y := Y; end; { TfrmTreeViewMenu.tvMainMenuMouseWheelDown } procedure TfrmTreeViewMenu.tvMainMenuMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift = [ssCtrl]) and (gFonts[dcfTreeViewMenu].Size > gFonts[dcfTreeViewMenu].MinValue) then begin dec(gFonts[dcfTreeViewMenu].Size); tvMainMenu.Font.Size := gFonts[dcfTreeViewMenu].Size; Handled := True; end; end; { TfrmTreeViewMenu.tvMainMenuMouseWheelUp } procedure TfrmTreeViewMenu.tvMainMenuMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift = [ssCtrl]) and (gFonts[dcfTreeViewMenu].Size < gFonts[dcfTreeViewMenu].MaxValue) then begin inc(gFonts[dcfTreeViewMenu].Size); tvMainMenu.Font.Size := gFonts[dcfTreeViewMenu].Size; Handled := True; end; end; { TfrmTreeViewMenu.tvMainMenuSelectionChanged } procedure TfrmTreeViewMenu.tvMainMenuSelectionChanged(Sender: TObject); begin tvMainMenu.BeginUpdate; SetShortcuts; tvMainMenu.EndUpdate; end; { TfrmTreeViewMenu.ExpandOrCollapseClick } procedure TfrmTreeViewMenu.tvMainMenuExpandOrCollapseClick(Sender: TObject; Node: TTreeNode); begin if edSearchingEntry.Text = '' then begin tvMainMenu.BeginUpdate; SetShortcuts; tvMainMenu.EndUpdate; end; end; { TfrmTreeViewMenu.isAtLeastOneItemVisibleAndSelectable } function TfrmTreeViewMenu.isAtLeastOneItemVisibleAndSelectable: boolean; var iSearchIndex: integer; begin Result := False; if tvMainMenu.Items.Count > 0 then begin iSearchIndex := 0; while (not Result) and (iSearchIndex < tvMainMenu.Items.Count) do begin if tvMainMenu.Items[iSearchIndex].Visible then Result := ((tvMainMenu.Items[iSearchIndex].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode); Inc(iSearchIndeX); end; end; end; { TfrmTreeViewMenu.SelectNextVisibleItem } procedure TfrmTreeViewMenu.SelectNextVisibleItem; var iCurrentIndex: integer; begin if isAtLeastOneItemVisibleAndSelectable then begin if tvMainMenu.Selected = nil then iCurrentIndex := -1 else iCurrentIndex := tvMainMenu.Selected.AbsoluteIndex; begin repeat iCurrentIndex := ((iCurrentIndex + 1) mod tvMainMenu.Items.Count); until (tvMainMenu.Items[iCurrentIndex].Visible and ((tvMainMenu.Items[iCurrentIndex].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode)); tvMainMenu.Items[iCurrentIndex].Selected := True; end; end; end; { TfrmTreeViewMenu.SelectPreviousVisibleItem } procedure TfrmTreeViewMenu.SelectPreviousVisibleItem; var iCurrentIndex: integer; begin if isAtLeastOneItemVisibleAndSelectable then begin if tvMainMenu.Selected = nil then iCurrentIndex := -1 else iCurrentIndex := tvMainMenu.Selected.AbsoluteIndex; begin repeat if iCurrentIndex = 0 then iCurrentIndex := pred(tvMainMenu.Items.Count) else Dec(iCurrentIndex); until (tvMainMenu.Items[iCurrentIndex].Visible and ((tvMainMenu.Items[iCurrentIndex].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode)); tvMainMenu.Items[iCurrentIndex].Selected := True; end; end; end; { TfrmTreeViewMenu.SelectFirstVisibleItem } procedure TfrmTreeViewMenu.SelectFirstVisibleItem; var iCurrentIndex: integer; begin if isAtLeastOneItemVisibleAndSelectable then begin iCurrentIndex := -1; repeat iCurrentIndex := ((iCurrentIndex + 1) mod tvMainMenu.Items.Count); until (tvMainMenu.Items[iCurrentIndex].Visible and ((tvMainMenu.Items[iCurrentIndex].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode)); tvMainMenu.Items[iCurrentIndex].Selected := True; end; end; { TfrmTreeViewMenu.SelectLastVisibleItem } procedure TfrmTreeViewMenu.SelectLastVisibleItem; var iCurrentIndex: integer; begin if isAtLeastOneItemVisibleAndSelectable then begin iCurrentIndex := tvMainMenu.Items.Count; repeat if iCurrentIndex = 0 then iCurrentIndex := pred(tvMainMenu.Items.Count) else Dec(iCurrentIndex); until (tvMainMenu.Items[iCurrentIndex].Visible and ((tvMainMenu.Items[iCurrentIndex].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode)); tvMainMenu.Items[iCurrentIndex].Selected := True; end; end; { TfrmTreeViewMenu.SetShortcuts } procedure TfrmTreeViewMenu.SetShortcuts; var iCurrentShortcut: integer = 1; function GetCurrentShortcutLetter: char; begin if iCurrentShortcut > 0 then begin Result := sTreeViewMenuShortcutString[iCurrentShortcut]; Inc(iCurrentShortcut); if iCurrentShortcut > length(sTreeViewMenuShortcutString) then iCurrentShortcut := 0; end else begin Result := ' '; end; end; function GetShortcutLetterForThisNode(paramNode: TTreeNode): char; begin Result := ' '; if paramNode.Visible then if (paramNode.Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode then Result := GetCurrentShortcutLetter; end; var iNode, iNbOfVisibleNode: integer; ANode: TTreeNode; begin for iNode := 0 to pred(tvMainMenu.Items.Count) do TTreeMenuItem(tvMainMenu.Items[iNode].Data).KeyboardShortcut := ' '; iNbOfVisibleNode := tvMainMenu.Height div tvMainMenu.DefaultItemHeight; iNode := 0; while iNode < iNbOfVisibleNode do begin ANode := tvMainMenu.GetNodeAt(100, (iNode * tvMainMenu.DefaultItemHeight)); if ANode <> nil then begin if (ANode.Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode then TTreeMenuItem(ANode.Data).KeyboardShortcut := GetShortcutLetterForThisNode(ANode); end; Inc(iNode); end; end; { TfrmTreeViewMenu.WasAbleToSelectShortCutLetter } function TfrmTreeViewMenu.WasAbleToSelectShortCutLetter(SearchKey: char): boolean; var iSearchIndex: integer; begin Result := False; if tvMainMenu.Items.Count > 0 then begin iSearchIndex := 0; while (not Result) and (iSearchIndex < tvMainMenu.Items.Count) do begin if (LowerCase(TTreeMenuItem(tvMainMenu.Items[iSearchIndex].Data).KeyboardShortcut) = LowerCase(SearchKey)) and (tvMainMenu.Items[iSearchIndex].Visible) then Result := True else Inc(iSearchIndeX); end; end; if Result then tvMainMenu.Items[iSearchIndex].Selected := True; end; { TfrmTreeViewMenu.AttemptToExitWithCurrentSelection } function TfrmTreeViewMenu.AttemptToExitWithCurrentSelection: boolean; begin Result := False; if tvMainMenu.Selected <> nil then if (TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode) or (tvMainMenu.Selected.Count = 0) then begin Result := True; iFinalSelectedIndex := tvMainMenu.Selected.AbsoluteIndex; Close; end; end; { TfrmTreeViewMenu.SetSizeToLargestElement } procedure TfrmTreeViewMenu.SetSizeToLargestElement; var iNode, iLargest: integer; mntrWhereToShowForm: TMonitor; begin iLargest := 0; for iNode := 0 to pred(tvMainMenu.Items.Count) do if tvMainMenu.Items[iNode].DisplayRect(True).Right > iLargest then iLargest := tvMainMenu.Items[iNode].DisplayRect(True).Right; Width := iLargest + 50; mntrWhereToShowForm := Screen.MonitorFromPoint(Mouse.CursorPos); if (Mouse.CursorPos.x + Width) > (mntrWhereToShowForm.Left + mntrWhereToShowForm.Width) then begin Left := ((mntrWhereToShowForm.Left + mntrWhereToShowForm.Width) - Width); end else Left := Mouse.CursorPos.x; end; procedure TfrmTreeViewMenu.UpdateColors; begin with gColors.TreeViewMenu^ do begin TreeViewMenuGenericRoutineAndVarHolder.BackgroundColor := BackgroundColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutColor := ShortcutColor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextColor := NormalTextColor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextColor := SecondaryTextColor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextColor := FoundTextColor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableTextColor := UnselectableTextColor; TreeViewMenuGenericRoutineAndVarHolder.CursorColor := CursorColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutUnderCursor := ShortcutUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextUnderCursor := NormalTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextUnderCursor := SecondaryTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextUnderCursor := FoundTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableUnderCursor := UnselectableUnderCursor; tvMainMenu.BackgroundColor := BackgroundColor; tvMainMenu.Color := BackgroundColor; end; end; procedure TfrmTreeViewMenu.CMThemeChanged(var Message: TLMessage); begin UpdateColors; tvMainMenu.Repaint; end; { TfrmTreeViewMenu.SetContextMode } procedure TfrmTreeViewMenu.SetContextMode(WantedContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0); var ARect: TRect; APoint: TPoint; pmiToSwitchTo: TMenuItem = nil; mntrWhereToShowForm: TMonitor; begin TreeViewMenuGenericRoutineAndVarHolder.ContextMode := WantedContextMode; // Let's set our option checked menu item AND our internal options according to settings saved previously for that context. if gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].CaseSensitive then pmiToSwitchTo := pmiCaseSensitive else pmiToSwitchTo := pmiNotCaseSensitive; pmiToSwitchTo.Checked := True; pmiCaseSensitiveOrNotClick(pmiToSwitchTo); if gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].IgnoreAccents then pmiToSwitchTo := pmiIgnoreAccents else pmiToSwitchTo := pmiNotIgnoreAccents; pmiToSwitchTo.Checked := True; pmiIgnoreAccentsOrNotClick(pmiToSwitchTo); if gTreeViewMenuOptions[Ord(TreeViewMenuGenericRoutineAndVarHolder.ContextMode)].ShowWholeBranchIfMatch then pmiToSwitchTo := pmiShowWholeBranchIfMatch else pmiToSwitchTo := pmiNotShowWholeBranchIfMatch; pmiToSwitchTo.Checked := True; pmiShowWholeBranchIfMatchOrNotClick(pmiToSwitchTo); // We set the appropriate title to give feedback to user. case TreeViewMenuGenericRoutineAndVarHolder.ContextMode of tvmcHotDirectory: lblSearchingEntry.Caption := rsStrTVMChooseHotDirectory; tvmcFavoriteTabs: lblSearchingEntry.Caption := rsStrTVMChooseFavoriteTabs; tvmcDirHistory: lblSearchingEntry.Caption := rsStrTVMChooseDirHistory; tvmcViewHistory: lblSearchingEntry.Caption := rsStrTVMChooseViewHistory; tvmcKASToolBar: lblSearchingEntry.Caption := rsStrTVMChooseFromToolbar; tvmcMainMenu: lblSearchingEntry.Caption := rsStrTVMChooseFromMainMenu; tvmcCommandLineHistory: lblSearchingEntry.Caption := rsStrTVMChooseFromCmdLineHistory; tvmcFileSelectAssistant: lblSearchingEntry.Caption := rsStrTVMChooseYourFileOrDir; else raise Exception.Create(rsMsgUnexpectedUsageTreeViewMenu); end; // We set the "look and feel" of the form for the user. case TreeViewMenuGenericRoutineAndVarHolder.ContextMode of tvmcHotDirectory, tvmcFavoriteTabs, tvmcKASToolBar, tvmcMainMenu: TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode := False; tvmcDirHistory, tvmcViewHistory, tvmcCommandLineHistory: TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode := False; tvmcFileSelectAssistant: TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode := True; // But on first revision, won't happen else raise Exception.Create(rsMsgUnexpectedUsageTreeViewMenu); end; case TreeViewMenuGenericRoutineAndVarHolder.ContextMode of tvmcHotDirectory, tvmcFavoriteTabs, tvmcDirHistory, tvmcViewHistory, tvmcKASToolBar, tvmcMainMenu, tvmcCommandLineHistory, tvmcFileSelectAssistant: begin if WantedHeight <> 0 then begin bTargetFixedWidth := True; Left := WantedPosX; Top := WantedPosY; Width := WantedWidth; Height := WantedHeight; end else begin APoint := Mouse.CursorPos; mntrWhereToShowForm := Screen.MonitorFromPoint(APoint); ARect := mntrWhereToShowForm.WorkareaRect; if (APoint.X + Width) > ARect.Right then Left := (ARect.Right - Width) else begin Left := APoint.X; end; if Abs(APoint.Y - ARect.Bottom) > Abs(APoint.Y - ARect.Top) then begin Top := APoint.Y; Height := ARect.Bottom - APoint.Y; end else begin Top := ARect.Top; Height := APoint.Y - ARect.Top; end; end; BorderStyle := bsNone; end; else begin raise Exception.Create(rsMsgUnexpectedUsageTreeViewMenu); end; end; end; { TfrmTreeViewMenu.HideUnmatchingNode } // The *key* routine off all this. // Routine will make visible in tree view the items that match with what the user has typed. // Eliminating from the view the non matching item helps user to quickly see what he was looking for. // So choosing it through a lot of data speed up things. procedure TfrmTreeViewMenu.HideUnmatchingNode; var iDummy: integer = 0; iNode: integer; nFirstMatchingNode: TTreeNode = nil; //WARNING: The following procedure is recursive and so may call itself back! procedure KeepMeThisWholeBranch(paramNode: TTreeNode); begin while paramNode <> nil do begin paramNode.Visible := True; if paramNode.Count > 0 then KeepMeThisWholeBranch(paramNode.Items[0]); paramNode := paramNode.GetNextSibling; end; end; //WARNING: The following procedure is recursive and so may call itself back! function UpdateVisibilityAccordingToSearchingString(paramNode: TTreeNode): boolean; begin Result := False; while paramNode <> nil do begin if paramNode.Count = 0 then begin paramNode.Visible := (PosOfSubstrWithVersatileOptions(TreeViewMenuGenericRoutineAndVarHolder.SearchingText, paramNode.Text, pmiCaseSensitive.Checked, pmiIgnoreAccents.Checked, iDummy) <> 0); end else begin if pmiShowWholeBranchIfMatch.Checked then begin paramNode.Visible := (PosOfSubstrWithVersatileOptions(TreeViewMenuGenericRoutineAndVarHolder.SearchingText, paramNode.Text, pmiCaseSensitive.Checked, pmiIgnoreAccents.Checked, iDummy) <> 0); if paramNode.Visible then begin KeepMeThisWholeBranch(paramNode); end else begin paramNode.Visible := UpdateVisibilityAccordingToSearchingString(paramNode.Items[0]); end; end else begin paramNode.Visible := UpdateVisibilityAccordingToSearchingString(paramNode.Items[0]); if not paramNode.Visible then begin if TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode then paramNode.Visible := (PosOfSubstrWithVersatileOptions(TreeViewMenuGenericRoutineAndVarHolder.SearchingText, paramNode.Text, pmiCaseSensitive.Checked, pmiIgnoreAccents.Checked, iDummy) <> 0); end; end; end; if paramNode.Visible then begin Result := True; if nFirstMatchingNode = nil then if (paramNode.Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode then nFirstMatchingNode := paramNode; end; paramNode := paramNode.GetNextSibling; end; end; begin tbFullExpandOrNot.Visible := (TreeViewMenuGenericRoutineAndVarHolder.SearchingText = ''); if tvMainMenu.Items.Count > 0 then begin tvMainMenu.BeginUpdate; try if TreeViewMenuGenericRoutineAndVarHolder.SearchingText <> '' then begin UpdateVisibilityAccordingToSearchingString(tvMainMenu.Items.Item[0]); end else begin for iNode := 0 to pred(tvMainMenu.Items.Count) do begin tvMainMenu.Items.Item[iNode].Visible := True; if nFirstMatchingNode = nil then if (tvMainMenu.Items.Item[iNode].Count = 0) or TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode then nFirstMatchingNode := tvMainMenu.Items.Item[iNode]; end; end; if TreeViewMenuGenericRoutineAndVarHolder.SearchingText <> '' then begin for iNode := pred(tvMainMenu.Items.Count) downto 0 do tvMainMenu.Items.Item[iNode].MakeVisible; end else begin pmiFullExpand.Checked := True; pmiFullExpandOrNotClick(pmiFullExpand); end; // It might happen we hit no direct found BUT we're still displaying item because of branch name matching. If so, let's select the first item of a branch matching name. if nFirstMatchingNode=nil then begin iNode:=0; while (iNode nil then nFirstMatchingNode.Selected := True; SetShortcuts; finally tvMainMenu.EndUpdate; end; end; end; { GetUserChoiceFromTStrings } // We provide a "TStrings" for input. // Function will show strings into a ttreeview. // User select the one he wants. // Function returns the chosen string. // If user cancel action, returned string is empty. function GetUserChoiceFromTStrings(ATStrings: TStrings; ContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0): string; var iIndex: integer; local_Result: integer; begin Result := ''; if ATStrings.Count > 0 then begin frmTreeViewMenu := TfrmTreeViewMenu.Create(frmMain); try frmTreeViewMenu.SetContextMode(ContextMode, WantedPosX, WantedPosY, WantedWidth, WantedHeight); frmTreeViewMenu.tvMainMenu.BeginUpdate; for iIndex := 0 to pred(ATStrings.Count) do frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, nil, ATStrings.Strings[iIndex], '', 0, nil); frmTreeViewMenu.HideUnmatchingNode; if not frmTreeViewMenu.bTargetFixedWidth then frmTreeViewMenu.SetSizeToLargestElement; frmTreeViewMenu.tvMainMenu.EndUpdate; local_Result := frmTreeViewMenu.ShowModal; case local_Result of mrOk: Result := frmTreeViewMenu.tvMainMenu.Items[frmTreeViewMenu.iFinalSelectedIndex].Text; mrYes: frmMain.Commands.cm_ConfigTreeViewMenus([]); mrAll: frmMain.Commands.cm_ConfigTreeViewMenusColors([]); end; finally FreeAndNil(frmTreeViewMenu); end; end; end; { GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu } // We provide a "TMenu" for input (either a popup menu or a mainmenu). // Function will show items into a ttreeview. // User select the one he wants. // Function returns the chosen TMenuItem. // If user cancel action, returned TMenuItem is nil. function GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(pmAnyMenu: TMenu; ContextMode: tvmContextMode; WantedPosX, WantedPosY: integer; WantedWidth: integer = 0; WantedHeight: integer = 0): TMenuItem; var RootNode: TTreeNode; iMenuItem: integer; local_Result: integer; function NormalizeMenuCaption(sMenuCaption: string): string; var iChar: integer; begin if Pos('&', sMenuCaption) = 0 then begin Result := sMenuCaption; end else begin Result := ''; iChar := 1; while iChar <= Length(sMenuCaption) do begin if sMenuCaption[iChar] <> '&' then Result := Result + sMenuCaption[iChar] else begin if iChar < Length(sMenuCaption) then begin if sMenuCaption[iChar + 1] = '&' then begin Result := Result + '&'; Inc(iChar); end; end; end; Inc(iChar); end; end; end; //WARNING: This procedure is recursive and may call itself! procedure RecursiveAddMenuBranch(AMenuItem: TMenuItem; ANode: TTreeNode); var iIndexSubMenuItem: integer; ASubNode: TTreeNode; begin for iIndexSubMenuItem := 0 to pred(AMenuItem.Count) do begin if AMenuItem.Items[iIndexSubMenuItem].Caption <> '-' then begin if (AMenuItem.Items[iIndexSubMenuItem].Enabled) and (AMenuItem.Items[iIndexSubMenuItem].Visible) then begin ASubNode := frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, ANode, NormalizeMenuCaption(AMenuItem.Items[iIndexSubMenuItem].Caption), '', 0, AMenuItem.Items[iIndexSubMenuItem]); if AMenuItem.Items[iIndexSubMenuItem].Count > 0 then RecursiveAddMenuBranch(AMenuItem.Items[iIndexSubMenuItem], ASubNode); end; end; end; end; begin Result := nil; frmTreeViewMenu := TfrmTreeViewMenu.Create(frmMain); try frmTreeViewMenu.SetContextMode(ContextMode, WantedPosX, WantedPosY, WantedWidth, WantedHeight); frmTreeViewMenu.tvMainMenu.BeginUpdate; for iMenuItem := 0 to pred(pmAnyMenu.Items.Count) do begin if pmAnyMenu.Items[iMenuItem].Caption <> '-' then begin if (pmAnyMenu.Items[iMenuItem].Enabled) and (pmAnyMenu.Items[iMenuItem].Visible) then begin RootNode := frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, nil, NormalizeMenuCaption(pmAnyMenu.Items[iMenuItem].Caption), '', 0, pmAnyMenu.Items[iMenuItem]); if pmAnyMenu.Items[iMenuItem].Count > 0 then RecursiveAddMenuBranch(pmAnyMenu.Items[iMenuItem], RootNode); end; end; end; frmTreeViewMenu.HideUnmatchingNode; if not frmTreeViewMenu.bTargetFixedWidth then frmTreeViewMenu.SetSizeToLargestElement; frmTreeViewMenu.tvMainMenu.EndUpdate; local_Result := frmTreeViewMenu.ShowModal; case local_Result of mrOk: Result := TMenuItem(TTreeMenuItem(frmTreeViewMenu.tvMainMenu.Items[frmTreeViewMenu.iFinalSelectedIndex].Data).PointerSourceData); mrYes: frmMain.Commands.cm_ConfigTreeViewMenus([]); mrAll: frmMain.Commands.cm_ConfigTreeViewMenusColors([]); end; finally FreeAndNil(frmTreeViewMenu); end; end; { GetUserChoiceFromKASToolBar } function GetUserChoiceFromKASToolBar(AKASToolBar: TKASToolBar; ContextMode: tvmContextMode; WantedPosX, WantedPosY, WantedWidth, WantedHeight: integer; var ReturnedTypeDispatcher: integer): Pointer; var frmTreeViewMenu: TfrmTreeViewMenu; sSimiliCaptionToAddToMenu: string; sSecondaryText: string; procedure AddToSecondyText(sInfo: string); begin if sInfo <> '' then begin if sSecondaryText <> '' then sSecondaryText := sSecondaryText + ' / '; sSecondaryText := sSecondaryText + sInfo; end; end; //WARNING: This procedure is recursive and may call itself! procedure RecursiveAddTheseTKASToolItems(AKASMenuItem: TKASMenuItem; ANode: TTreeNode); var ASubNode: TTreeNode; iIndexKASMenuItem: integer; AKASToolItem: TKASToolItem; begin for iIndexKASMenuItem := 0 to pred(AKASMenuItem.SubItems.Count) do begin sSimiliCaptionToAddToMenu := ''; sSecondaryText := ''; AKASToolItem := AKASMenuItem.SubItems.Items[iIndexKASMenuItem]; if AKASToolItem is TKASNormalItem then sSimiliCaptionToAddToMenu := TKASNormalItem(AKASToolItem).Hint; if AKASToolItem is TKASCommandItem then begin AddToSecondyText(TKASCommandItem(AKASToolItem).Command); frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, ANode, sSimiliCaptionToAddToMenu, sSecondaryText, 2, AKASToolItem); end else begin if AKASToolItem is TKASProgramItem then begin AddToSecondyText(TKASProgramItem(AKASToolItem).Command); frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem( frmTreeViewMenu.tvMainMenu, ANode, sSimiliCaptionToAddToMenu, sSecondaryText, 2, AKASToolItem); end else begin if AKASToolItem is TKASMenuItem then begin if TKASMenuItem(AKASToolItem).SubItems.Count > 0 then begin ASubNode := frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, ANode, sSimiliCaptionToAddToMenu, sSecondaryText, 0, nil); RecursiveAddTheseTKASToolItems(TKASMenuItem(AKASToolItem), ASubNode); end; end; end; end; end; end; var // Variables declared *afer* the recursive block to make sure we won't use it. RootNode: TTreeNode; iKASToolButton: integer; local_Result: integer; AKASToolButton: TKASToolButton; begin Result := nil; ReturnedTypeDispatcher := -1; frmTreeViewMenu := TfrmTreeViewMenu.Create(frmMain); try frmTreeViewMenu.SetContextMode(ContextMode, WantedPosX, WantedPosY, WantedWidth, WantedHeight); frmTreeViewMenu.tvMainMenu.BeginUpdate; for iKASToolButton := 0 to pred(AKASToolBar.ButtonList.Count) do begin sSimiliCaptionToAddToMenu := ''; sSecondaryText := ''; AKASToolButton := TKASToolButton(AKASToolBar.ButtonList.Items[iKASToolButton]); if AKASToolButton.ToolItem is TKASNormalItem then sSimiliCaptionToAddToMenu := TKASNormalItem(AKASToolButton.ToolItem).Hint; if AKASToolButton.ToolItem is TKASCommandItem then begin AddToSecondyText(TKASCommandItem(AKASToolButton.ToolItem).Command); frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, nil, sSimiliCaptionToAddToMenu, sSecondaryText, 1, AKASToolButton); end else begin if AKASToolButton.ToolItem is TKASProgramItem then begin AddToSecondyText(TKASProgramItem(AKASToolButton.ToolItem).Command); frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, nil, sSimiliCaptionToAddToMenu, sSecondaryText, 1, AKASToolButton); end else begin if AKASToolButton.ToolItem is TKASMenuItem then begin if TKASMenuItem(AKASToolButton.ToolItem).SubItems.Count > 0 then begin RootNode := frmTreeViewMenu.TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(frmTreeViewMenu.tvMainMenu, nil, sSimiliCaptionToAddToMenu, sSecondaryText, 0, nil); RecursiveAddTheseTKASToolItems(TKASMenuItem(AKASToolButton.ToolItem), RootNode); end; end; end; end; end; frmTreeViewMenu.HideUnmatchingNode; if not frmTreeViewMenu.bTargetFixedWidth then frmTreeViewMenu.SetSizeToLargestElement; frmTreeViewMenu.tvMainMenu.EndUpdate; local_Result := frmTreeViewMenu.ShowModal; case local_Result of mrOk: begin ReturnedTypeDispatcher := TTreeMenuItem(frmTreeViewMenu.tvMainMenu.Items[frmTreeViewMenu.iFinalSelectedIndex].Data).TypeDispatcher; Result := TTreeMenuItem(frmTreeViewMenu.tvMainMenu.Items[frmTreeViewMenu.iFinalSelectedIndex].Data).PointerSourceData; end; mrYes: frmMain.Commands.cm_ConfigTreeViewMenus([]); mrAll: frmMain.Commands.cm_ConfigTreeViewMenusColors([]); end; finally FreeAndNil(frmTreeViewMenu); end; end; end. doublecmd-1.1.30/src/ftreeviewmenu.lrj0000644000175000001440000000676215104114162016765 0ustar alexxusers{"version":1,"strings":[ {"hash":69493525,"name":"tfrmtreeviewmenu.caption","sourcebytes":[84,114,101,101,32,86,105,101,119,32,77,101,110,117],"value":"Tree View Menu"}, {"hash":160185434,"name":"tfrmtreeviewmenu.lblsearchingentry.caption","sourcebytes":[83,101,108,101,99,116,32,121,111,117,114,32,104,111,116,32,100,105,114,101,99,116,111,114,121,58],"value":"Select your hot directory:"}, {"hash":122361781,"name":"tfrmtreeviewmenu.tbcancelandquit.hint","sourcebytes":[67,108,111,115,101,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117],"value":"Close Tree View Menu"}, {"hash":45842709,"name":"tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117],"value":"Configuration of Tree View Menu"}, {"hash":255739843,"name":"tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117,32,67,111,108,111,114,115],"value":"Configuration of Tree View Menu Colors"}, {"hash":50447813,"name":"tfrmtreeviewmenu.pminotcasesensitive.caption","sourcebytes":[83,101,97,114,99,104,32,105,115,32,110,111,116,32,99,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"Search is not case sensitive"}, {"hash":219944789,"name":"tfrmtreeviewmenu.pmicasesensitive.caption","sourcebytes":[83,101,97,114,99,104,32,105,115,32,99,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"Search is case sensitive"}, {"hash":62671032,"name":"tfrmtreeviewmenu.pmishowwholebranchifmatch.caption","sourcebytes":[73,102,32,115,101,97,114,99,104,101,100,32,115,116,114,105,110,103,32,105,115,32,102,111,117,110,100,32,105,110,32,97,32,98,114,97,110,99,104,32,110,97,109,101,44,32,115,104,111,119,32,116,104,101,32,119,104,111,108,101,32,98,114,97,110,99,104,32,101,118,101,110,32,105,102,32,101,108,101,109,101,110,116,115,32,100,111,110,39,116,32,109,97,116,99,104],"value":"If searched string is found in a branch name, show the whole branch even if elements don't match"}, {"hash":12232485,"name":"tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption","sourcebytes":[68,111,110,39,116,32,115,104,111,119,32,116,104,101,32,98,114,97,110,99,104,32,99,111,110,116,101,110,116,32,34,106,117,115,116,34,32,98,101,99,97,117,115,101,32,116,104,101,32,115,101,97,114,99,104,101,100,32,115,116,114,105,110,103,32,105,115,32,102,111,117,110,100,32,105,110,32,116,104,101,32,98,114,97,110,99,104,101,32,110,97,109,101],"value":"Don't show the branch content \"just\" because the searched string is found in the branche name"}, {"hash":253218323,"name":"tfrmtreeviewmenu.pmiignoreaccents.caption","sourcebytes":[83,101,97,114,99,104,32,105,103,110,111,114,101,32,97,99,99,101,110,116,115,32,97,110,100,32,108,105,103,97,116,117,114,101,115],"value":"Search ignore accents and ligatures"}, {"hash":152606995,"name":"tfrmtreeviewmenu.pminotignoreaccents.caption","sourcebytes":[83,101,97,114,99,104,32,105,115,32,115,116,114,105,99,116,32,114,101,103,97,114,100,105,110,103,32,97,99,99,101,110,116,115,32,97,110,100,32,108,105,103,97,116,117,114,101,115],"value":"Search is strict regarding accents and ligatures"}, {"hash":109225636,"name":"tfrmtreeviewmenu.pmifullexpand.caption","sourcebytes":[70,117,108,108,32,101,120,112,97,110,100],"value":"Full expand"}, {"hash":166748533,"name":"tfrmtreeviewmenu.pmifullcollapse.caption","sourcebytes":[70,117,108,108,32,99,111,108,108,97,112,115,101],"value":"Full collapse"} ]} doublecmd-1.1.30/src/ftreeviewmenu.lfm0000644000175000001440000015252415104114162016752 0ustar alexxusersobject frmTreeViewMenu: TfrmTreeViewMenu Left = 338 Height = 787 Top = 184 Width = 524 BorderIcons = [biSystemMenu] Caption = 'Tree View Menu' ClientHeight = 787 ClientWidth = 524 Font.CharSet = ANSI_CHARSET Font.Height = -13 Font.Name = 'Arial' Font.Pitch = fpVariable Font.Quality = fqDraft KeyPreview = True OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown ShowHint = True LCLVersion = '1.6.0.4' object pnlAll: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 787 Top = 0 Width = 524 Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone BorderWidth = 1 BorderStyle = bsSingle ClientHeight = 783 ClientWidth = 520 TabOrder = 0 object tvMainMenu: TTreeView AnchorSideLeft.Control = pnlAll AnchorSideTop.Control = edSearchingEntry AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlAll AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlAll AnchorSideBottom.Side = asrBottom Left = 1 Height = 717 Top = 65 Width = 518 Anchors = [akTop, akLeft, akRight, akBottom] AutoExpand = True BackgroundColor = clBtnFace Color = clBtnFace DefaultItemHeight = 18 Font.CharSet = ANSI_CHARSET Font.Color = clBlack Font.Height = -13 Font.Name = 'Arial' Font.Pitch = fpVariable Font.Quality = fqDraft HotTrack = True ParentFont = False ReadOnly = True TabOrder = 0 OnClick = tvMainMenuClick OnCollapsed = tvMainMenuExpandOrCollapseClick OnDblClick = tvMainMenuDblClick OnEnter = tvMainMenuEnter OnExpanded = tvMainMenuExpandOrCollapseClick OnMouseMove = tvMainMenuMouseMove OnMouseWheelDown = tvMainMenuMouseWheelDown OnMouseWheelUp = tvMainMenuMouseWheelUp OnSelectionChanged = tvMainMenuSelectionChanged Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end object edSearchingEntry: TEdit AnchorSideLeft.Control = pnlAll AnchorSideTop.Control = lblSearchingEntry AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlAll AnchorSideRight.Side = asrBottom Left = 1 Height = 24 Top = 41 Width = 518 Anchors = [akTop, akLeft, akRight] OnChange = edSearchingEntryChange TabStop = False TabOrder = 1 end object lblSearchingEntry: TLabel AnchorSideLeft.Control = pnlAll AnchorSideTop.Control = tbOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlAll AnchorSideRight.Side = asrBottom Left = 1 Height = 18 Top = 23 Width = 518 Anchors = [akTop, akLeft, akRight] Caption = 'Select your hot directory:' FocusControl = edSearchingEntry Font.CharSet = ANSI_CHARSET Font.Height = -15 Font.Name = 'Arial' Font.Pitch = fpVariable Font.Quality = fqDraft Font.Style = [fsBold] ParentColor = False ParentFont = False end object tbOptions: TToolBar AnchorSideLeft.Control = pnlAll AnchorSideTop.Control = pnlAll AnchorSideRight.Control = tbClose AnchorSideBottom.Side = asrBottom Left = 1 Height = 22 Top = 1 Width = 457 Align = alNone Anchors = [akTop, akLeft, akRight] ButtonHeight = 20 ButtonWidth = 20 EdgeBorders = [] Images = imgListButton TabOrder = 2 object tbCaseSensitive: TToolButton Left = 1 Top = 0 DropdownMenu = pmCaseSensitiveOrNot ImageIndex = 0 OnClick = tbCaseSensitiveClick Style = tbsDropDown end object tbShowWholeBranchOrNot: TToolButton Left = 70 Top = 0 DropdownMenu = pmShowWholeBranchIfMatchOrNot ImageIndex = 5 OnClick = tbShowWholeBranchOrNotClick Style = tbsDropDown end object tbDivider: TToolButton Left = 65 Height = 20 Top = 0 Width = 5 Style = tbsDivider end object tbIgnoreAccents: TToolButton Left = 33 Top = 0 DropdownMenu = pmIgnoreAccentsOrNot ImageIndex = 2 OnClick = tbIgnoreAccentsClick Style = tbsDropDown end object tbFullExpandOrNot: TToolButton Left = 102 Top = 0 DropdownMenu = pmFullExpandOrNot ImageIndex = 9 OnClick = tbFullExpandOrNotClick Style = tbsDropDown end end object tbClose: TToolBar AnchorSideTop.Control = pnlAll AnchorSideRight.Control = pnlAll AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 458 Height = 20 Top = 1 Width = 61 Align = alNone Anchors = [akTop, akRight] AutoSize = True ButtonHeight = 20 ButtonWidth = 20 EdgeBorders = [] Images = imgListButton TabOrder = 3 object tbCancelAndQuit: TToolButton Left = 41 Hint = 'Close Tree View Menu' Top = 0 ImageIndex = 6 OnClick = tbCancelAndQuitClick end object tbConfigurationTreeViewMenus: TToolButton Left = 1 Hint = 'Configuration of Tree View Menu' Top = 0 ImageIndex = 7 OnClick = tbConfigurationTreeViewMenusClick end object tbConfigurationTreeViewMenusColors: TToolButton Left = 21 Hint = 'Configuration of Tree View Menu Colors' Top = 0 ImageIndex = 8 OnClick = tbConfigurationTreeViewMenusColorsClick end end end object imgListButton: TImageList left = 208 top = 112 Bitmap = { 4C690B0000001000000010000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF007F00FF007F00FF007F00FF007F00FF007F00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF007F00FF007F00FF007F00FF007F00FF007F00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F9F5FF098309FF007F 00FF098309FFF5F9F5FFFFFFFFFFFFFFFFFFDDEDDDFF46A146FF0E850EFF0983 09FF359935FFC9E3C9FFFFFFFFFFFFFFFFFFFFFFFFFFAED5AEFF007F00FF007F 00FF007F00FFAFD6AFFFFFFFFFFFFFFFFFFF389A38FF007F00FF007F00FF007F 00FF007F00FF2C942CFFFFFFFFFFFFFFFFFFFFFFFFFF5DAD5DFF007F00FF51A7 51FF007F00FF5EAD5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFCCE4 CCFF007F00FF078207FFFFFFFFFFFFFFFFFFFBFCFBFF118711FF078207FFE6F1 E6FF088208FF128712FFFBFCFBFFFFFFFFFFFFFFFFFFC2DFC2FF72B772FF2C94 2CFF007F00FF007F00FFFFFFFFFFFFFFFFFFBBDCBBFF007F00FF4AA34AFFFFFF FFFF4FA64FFF007F00FFBCDCBCFFFFFFFFFF96C996FF007F00FF74B874FFCFE6 CFFF007F00FF007F00FFFFFFFFFFFFFFFFFF6BB46BFF007F00FF9BCC9BFFFFFF FFFFA2CFA2FF007F00FF6BB46BFFFFFFFFFF108610FF007F00FFD0E6D0FFA9D3 A9FF007F00FF007F00FFFDFDFDFFFEFEFEFF1B8C1BFF007F00FF007F00FF007F 00FF007F00FF007F00FF1C8C1CFFFEFEFEFF279227FF007F00FF007F00FF007F 00FF0E850EFF007F00FFE5F1E5FFC9E3C9FF007F00FF007F00FF007F00FF007F 00FF007F00FF007F00FF007F00FFCAE3CAFFC7E2C7FF2E952EFF088208FF46A1 46FFCBE4CBFF007F00FF6BB46BFF78BA78FF007F00FF88C288FFFFFFFFFFFFFF FFFFFFFFFFFF83C083FF007F00FF79BB79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF279227FF007F00FFD2E7D2FFFFFFFFFFFFFF FFFFFFFFFFFFD3E8D3FF007F00FF289228FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF21007EFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF21007FFF21007FFF21007FFF21007FFF21007FFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF21007EFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF21007FFF21007FFF21007FFF21007FFF21007FFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF21007EFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF01F5F9FF1F0983FF2100 7FFF1F0983FF01F5F9FF00FFFFFF00FFFFFF04DDEDFF1746A1FF1F0E85FF1F09 83FF1A3599FF06C9E3FF00FFFFFF00FFFFFF00FFFFFF0AAED5FF21007FFF2100 7FFF21007FFF0AAFD6FF00FFFFFF00FFFFFF19389AFF21007FFF21007FFF2100 7FFF21007FFF1B2C94FF00FFFFFF00FFFFFF00FFFFFF145DADFF21007FFF1651 A7FF21007FFF145EADFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFF06CC E4FF21007FFF200782FF00FFFFFF00FFFFFF00FBFCFF1E1187FF200782FF03E6 F1FF1F0882FF1E1287FF00FBFCFF00FFFFFF00FFFFFF07C2DFFF1272B7FF1B2C 94FF21007FFF21007FFF00FFFFFF00FFFFFF08BBDCFF21007FFF174AA3FF00FF FFFF164FA6FF21007FFF08BCDCFF00FFFFFF0D96C9FF21007FFF1174B8FF06CF E6FF21007FFF21007FFF00FFFFFF00FFFFFF136BB4FF21007FFF0C9BCCFF00FF FFFF0BA2CFFF21007FFF136BB4FF00FFFFFF1E1086FF21007FFF05D0E6FF0BA9 D3FF21007FFF21007FFF00FDFDFF00FEFEFF1D1B8CFF21007FFF21007FFF2100 7FFF21007FFF21007FFF1D1C8CFF00FEFEFF1B2792FF21007FFF21007FFF2100 7FFF1F0E85FF21007FFF03E5F1FF06C9E3FF21007FFF21007FFF21007FFF2100 7FFF21007FFF21007FFF21007FFF06CAE3FF07C7E2FF1B2E95FF1F0882FF1746 A1FF06CBE4FF21007FFF136BB4FF1178BAFF21007FFF0E88C2FF00FFFFFF00FF FFFF00FFFFFF1083C0FF21007FFF1179BBFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF1B2792FF21007FFF05D2E7FF00FFFFFF00FF FFFF00FFFFFF05D3E8FF21007FFF1B2892FF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007F00FF007F 00FF007F00FF007F00FF007F00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF007F00FF007F 00FF007F00FF007F00FF007F00FFFFFFFFFFFFFFFFFFFFFFFFFFBFDEBFFF007F 00FF7FBE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9E3FFF7FBE 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4D0A4FF269126FF068106FF2C94 2CFFB1D7B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4D0A4FF269126FF0681 06FF2C942CFFB1D7B1FFFFFFFFFFBADBBAFF007F00FF007F00FF007F00FF007F 00FF038003FFC2DFC2FFFFFFFFFFFFFFFFFFBADBBAFF007F00FF007F00FF007F 00FF007F00FF038003FFC2DFC2FF3F9E3FFF007F00FFA7D2A7FFF8FAF8FFB0D6 B0FF007F00FF4FA64FFFFFFFFFFFFFFFFFFF3F9E3FFF007F00FFA7D2A7FFF8FA F8FFB0D6B0FF007F00FF4FA64FFF138813FF007F00FF007F00FF007F00FF007F 00FF007F00FF188A18FFFFFFFFFFFFFFFFFF138813FF007F00FF007F00FF007F 00FF007F00FF007F00FF188A18FF0E850EFF007F00FF007F00FF007F00FF007F 00FF007F00FF048004FFFFFFFFFFFFFFFFFF0E850EFF007F00FF007F00FF007F 00FF007F00FF007F00FF048004FF399B39FF007F00FFA8D2A8FFF9FBF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF399B39FF007F00FFA8D2A8FFF9FB F9FFFFFFFFFFFFFFFFFFFFFFFFFFACD4ACFF007F00FF007F00FF007F00FF007F 00FF007F00FF4BA44BFFFFFFFFFFFFFFFFFFACD4ACFF007F00FF007F00FF007F 00FF007F00FF007F00FF4BA44BFFFFFFFFFF9ECD9EFF299329FF068106FF178A 17FF67B267FFF3F8F3FFFFFFFFFFFFFFFFFFFFFFFFFF9ECD9EFF299329FF0681 06FF178A17FF67B267FFF3F8F3FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF21007EFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF21007FFF2100 7FFF21007FFF21007FFF21007FFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF21007EFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF21007FFF2100 7FFF21007FFF21007FFF21007FFF00FFFFFF00FFFFFF00FFFFFF05BFDEFF1500 7FFF0A7FBEFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF2100 7EFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0F3F9EFF0A7F BEFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF07A4D0FF112691FF140681FF112C 94FF06B1D7FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF07A4D0FF112691FF1406 81FF112C94FF06B1D7FF00FFFFFF05BADBFF15007FFF15007FFF15007FFF1500 7FFF140380FF05C2DFFF00FFFFFF00FFFFFF05BADBFF15007FFF15007FFF1500 7FFF15007FFF140380FF05C2DFFF0F3F9EFF15007FFF07A7D2FF00F8FAFF06B0 D6FF15007FFF0E4FA6FF00FFFFFF00FFFFFF0F3F9EFF15007FFF07A7D2FF00F8 FAFF06B0D6FF15007FFF0E4FA6FF131388FF15007FFF15007FFF15007FFF1500 7FFF15007FFF13188AFF00FFFFFF00FFFFFF131388FF15007FFF15007FFF1500 7FFF15007FFF15007FFF13188AFF130E85FF15007FFF15007FFF15007FFF1500 7FFF15007FFF140480FF00FFFFFF00FFFFFF130E85FF15007FFF15007FFF1500 7FFF15007FFF15007FFF140480FF10399BFF15007FFF07A8D2FF00F9FBFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF10399BFF15007FFF07A8D2FF00F9 FBFF00FFFFFF00FFFFFF00FFFFFF06ACD4FF15007FFF15007FFF15007FFF1500 7FFF15007FFF0E4BA4FF00FFFFFF00FFFFFF06ACD4FF15007FFF15007FFF1500 7FFF15007FFF15007FFF0E4BA4FF00FFFFFF079ECDFF112993FF140681FF1317 8AFF0C67B2FF00F3F8FF00FFFFFF00FFFFFF00FFFFFF079ECDFF112993FF1406 81FF13178AFF0C67B2FF00F3F8FF000000000000000000000000008A47FF008A 47FF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008742FF9AE0D3FF9AE0 D3FF008742FF0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000008844FF8EDBCBFF00B99DFF00B9 9DFF8EDBCBFF008844FF00000000000000000000000000000000000000000000 0000000000000000000000000000008C4AFF82DCCAFF00C1A0FF00BE9BFF00BE 9BFF00C1A0FF83DCCAFF008C4AFF000000000000000000000000000000000000 0000000000000000000000000000008B4BF2008946FF00AE7FFF00C39EFF00C3 9EFF00AE80FF008946FF008B4BF2000000000000000000000000000000000000 00000000000000000000000000000000003000000033008742FF6AE2CCFF00C9 A1FF008744FF0000003300000030000000000000000000000000464646B14646 46FF0000000000000000000000000000000000000000008844FF59E1C8FF00CB A2FF008846FF0000000000000000000000000000000000000000444444FFC4C4 C4FF434343FF00000000000000000000000000000000008845FF4BE0C1FF00CF A0FF068144FF00000000444444A7444444FF434343FF434343FF555555FF6060 60FFBDBDBDFF434343FF000000000000000000000000008845FF3EDFBCFF00D1 9FFF04803FFF545454CF8A8A8AFF8D8D8DFF8D8D8DFF8D8D8DFF626262FF6262 62FF626262FFB2B2B2FF454545FF0000000000000000008846FF30DFB6FF00D1 9DFF1CAB7AFF8D8D8DFF787878FF686868FF686868FF676767FF666666FF6565 65FF666666FFA7A7A7FF454545FF0000000000000000008746FF23DFB1FF00D3 9CFF20D5ADFF6B6B6BFF555555FF434343FF444444FF434343FF5C5C5CFF6C6C 6CFF9E9E9EFF434343FF000000330000000000000000008747FF16DFABFF00D8 9EFF00C890FF4B4B4BFF3E3E3EB6000000330000003300000033444444FF9797 97FF434343FF00000033000000000000000000000000008847FF08E1A6FF00DF A1FF008544FF3E3E3EB500000021000000000000000000000000404040C14646 46FF0000003300000000000000000000000000000000008949FF00E7A7FF00E7 A7FF008949FF2F2F2F4C00000000000000000000000000000000000000230000 00330000000000000000000000000000000000000000008B4CF2008A4AFF008A 4AFF008B4CF10000000A00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000030000000330000 00330000002F0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000008A47FF008A 47FF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008742FF9AE0D3FF9AE0 D3FF008742FF0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000008844FF8EDBCBFF00B99DFF00B9 9DFF8EDBCBFF008844FF00000000000000000000000000000000000000000000 0000000000000000000000000000008C4AFF82DCCAFF00C1A0FF00BE9BFF00BE 9BFF00C1A0FF83DCCAFF008C4AFF000000000000000000000000000000000000 0000000000000000000000000000008B4BF2008946FF00AE7FFF00C39EFF00C3 9EFF00AE80FF008946FF008B4BF2000000000000000000000000000000000000 00000000000000000000000000000000003000000033008742FF6AE2CCFF00C9 A1FF008744FF0000003300000030000000000000000000000000008D4CB1008C 49FF0000000000000000000000000000000000000000008844FF59E1C8FF00CB A2FF008846FF0000000000000000000000000000000000000000008945FFA4E4 D9FF008743FF00000000000000000000000000000000008845FF4BE0C1FF00CF A0FF008744FF00000000008946A7008845FF008744FF008641FF00AB7DFF00C0 9EFF9BE0D0FF008743FF000000000000000000000000008845FF3EDFBCFF00D1 9FFF00843FFF0F9960CF4ACBB0FF42D9BEFF42D9BEFF42D9BEFF00C49AFF00C4 9AFF00C59CFF86DEC8FF008A48FF0000000000000000008846FF30DFB6FF00D1 9DFF1CAB7AFF42D9BEFF20D1B0FF00D09FFF00D0A0FF00CF9FFF00CD9CFF00CB 9AFF00CD9CFF74DABDFF008A48FF0000000000000000008746FF23DFB1FF00D3 9CFF20D5ADFF04D3A5FF00AB73FF008744FF008846FF008644FF00B97FFF00D8 A0FF65D7B3FF008744FF000000330000000000000000008747FF16DFABFF00D8 9EFF00C890FF009657FF007C42B6000000330000003300000033008847FF54DA B0FF008746FF00000033000000000000000000000000008847FF08E1A6FF00DF A1FF008544FF007D43B500000021000000000000000000000000008147C1008C 4BFF0000003300000000000000000000000000000000008949FF00E7A7FF00E7 A7FF008949FF005E334C00000000000000000000000000000000000000230000 00330000000000000000000000000000000000000000008B4CF2008A4AFF008A 4AFF008B4CF10000000A00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000030000000330000 00330000002F0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C7C9DBFF2D2DB4FF0303A5FF0000 A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0202 A4FF1B1FA4FF798B98FC00000000000000003636B8FF3434C8FF6464DFFF6666 E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6464 DFFF3333C9FE0101A7C700000000000000000303A5FF6464DFFF0505CDFF0000 CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0505 CDFF6464DFFF0000A5FC00000000000000000000A4FF6666E0FF0000CCFF0404 CDFF3C3CD8FF0000CCFF0000CCFF0000CCFF0000CCFF4040D9FF0404CDFF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF3636 D7FFFFFFFFFF8F8FE9FF0000CCFF0000CCFF8F8FE9FFFFFFFFFF3434D6FF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF0000 CCFF8F8FE9FFFFFFFFFF8F8FE9FF8F8FE9FFFFFFFFFF8F8FE9FF0000CCFF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF0000 CCFF0000CCFF8F8FE9FFFFFFFFFFFFFFFFFF8F8FE9FF0000CCFF0000CCFF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF0000 CCFF0000CCFF8F8FE9FFFFFFFFFFFFFFFFFF8F8FE9FF0000CCFF0000CCFF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF0000 CCFF8F8FE9FFFFFFFFFF8F8FE9FF8F8FE9FFFFFFFFFF8F8FE9FF0000CCFF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF3434 D6FFFFFFFFFF8F8FE9FF0000CCFF0000CCFF8F8FE9FFFFFFFFFF3636D7FF0000 CCFF6666E0FF0000A4FF00000000000000000000A4FF6666E0FF0000CCFF0404 CDFF4040D9FF0000CCFF0000CCFF0000CCFF0000CCFF3C3CD8FF0404CDFF0000 CCFF6666E0FF0000A4FF00000000000000000102A4FF6464DFFF0505CDFF0000 CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0000CCFF0505 CDFF6464DFFF0000A5FC00000000000000000607A3D53333C8FF6464DFFF6666 E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6666E0FF6464 DFFF3232C9FD0000A7C60000000000000000000092230202A6D30000A5FC0000 A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000A4FF0000 A5FC0000A6CE0000A51F00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000BA8545FFB9843FFFB9843FFFBA8545FF0000000000000000000000000000 00000000000000000000000000000000000000000000B98544AFB98443E90000 0000B78140FFE9D4B4FFE9D4B4FFB78140FF00000000B98443E9B98544AF0000 000000000000000000000000000000000000B98544AFCCA26CFFD4B080FFB983 43FFCCA470FFC9984EFFC9984EFFCCA470FFB98343FFD4B080FFCCA26CFFB985 44AF00000000000000000000000000000000B78242ECD3AE7CFFE7CBA4FFEAD4 B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4B2FFE7CBA4FFD3AE7CFFB782 42EC000000000000000000000000000000000000002FBA8547FFCE9949FFDAB2 76FFC9944BFFBE8943FFBE8943FFC9944BFFDAB276FFCE9949FFBA8546FF0000 002F000000000000000000000000B98442FFB6803EFFCEA673FFDBAE6EFFCB95 4BFFB88344FF6E4F2A616E4F2A61B88344FFCD974AFFDCAE6DFFD0A772FFB981 3CFFBE843FFF0000000000000000C5995FFFF1DCBBFFECD2ACFFD6A152FFC18C 49FF70502A620000000C0000000C704F2861C88D44FFDFA24CFFEACEA6FFF1D7 B2FFD79A51FF0000000000000000C38F4EFFE2B572FFDEB06AFFDBA658FFC595 55FF926935300000000000000000AA7333436A8399FFCD9F5FFF298DE2FF2B8F E1FFB48B5AFF3081D29100000000B98545FFB78242FFC8934EFFDFAB5EFFE4C4 94FFB68245DAB8813F3CBE823B2561809CFF37A8EFFF399DE3FF4CCFFDFF4AC7 F8FF3D9EE1FF45AAE4FF3982CB9F0000003300000033B78242FFE4B163FFEBC6 8EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399CE1FF4CCEFBFF3FB0EEFF40B1 EFFF4FCFFCFF429EDCFF16324E3100000000B98443E9DDBB8CFFEEC486FFE8B4 66FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCEFBFF3FAFEDFFFAB66DFFC775 1FCE41B1EFFF52D0F9FF3F92D5FF00000000AA7A3FBED2A76FFFD7A561FFB882 41FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCFFCFF40B0EDFFC39F7BFF9876 53CB42B1EEFF52D0F9FF3F92D5FF0000000000000023AA7A3EBFB68243ED0000 0033B58142FFF5C378FFFCC371FFAD7E49FF3B9EE3FF4ECFFBFF41B0EDFF42B1 EDFF50CFFAFF439EDCFF1B3D5F520000000000000000000000230000002F0000 0000B88445FFC89451FFCE934AFF6D8192FF40A9EAFF429EDDFF52D0F8FF52D0 F8FF439EDCFF48AAE2FF3980C8B6000000000000000000000000000000000000 0000000000330000003300000033000000332D73BAAF1B3D60523F93D4FF3F93 D4FF102438413578BAC300000024000000000000000000000000000000000000 0000000000000000000000000000000000000000001F00000008000000330000 00330000000400000024000000000000000000000000000000000000000000D7 769500D66FF700D66BFF01D2A3FF00CDD8FF00CDD5F700CFD695000000000000 00000000000000000000FFFFFF00000000000000000057D7004659D500FF95EC B5FFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF91E6EBFF03ACD6FF04B1 D7460000000000000000FFFFFF00000000004ED8004659D801FFEAF9D7FFFDFF EAFF7BFFCBFF49FFAAFF37FCD0FF50F9FFFF82FDFFFFF3FDFFFFDCF3F9FF10B4 D8FF05B6D84600000000FFFFFF00000000004AD600FFDAF8C9FFE5FFD0FF8EFF 33FF61FF86FF52FFB1FF5FFCDAFF5AFAFFFF50F0FEFF4ADEFFFFD5FAFFFFCDF1 F8FF07B4D6FF00000000FFFFFF00A1D70095C1E86DFFE2FFCEFF88FF3BFF94FF 49FFA4FF60FF72FFBDFF7CFCE1FF79FAFFFF74E4FFFF5CE1FFFF4BE1FFFFD3F9 FFFF71C3E8FF0088D795FFFFFF009CD600F8EAF9B4FFDEFF66FFBAFF46FFA2FF 64FFAEFF75FFA1FFA7FF92FFEAFF95F4FFFF89E9FFFF75E6FFFF4FCBFFFF6AC9 FFFFB5E0F9FF0088D5F8FFFFFF009BDB00FFECFFBBFFCEFF40FFD4FF50FFDBFF 6EFFCCFF8AFFC3FF99FFB1FFEAFFAFF2FFFF94E3FFFF74CFFEFF54C5FFFF44C1 FFFFBCEBFFFF008BD6FFFFFFFF00B7A10CFFF2E8B1FFE4CF44FFE9D664FFEFDD 80FFF5E499FFF5E9ACFFE7E6D9FFB3D9FFFF9DCDFCFF86C0FBFF6CB3FBFF4DA2 FBFFB6D8FDFF1670D0FFFFFFFF00D2651AFFFCC5A5FFFF9D5CFFFFA76CFFFFB3 85FFF0B48BFFEABA88FFFFB5DBFFBCAAFFFF98A9FEFF8CABF7FF779AF5FF698E F5FFACBEF6FF2A51CAFFFFFFFF00CF6817F9F3B481FFFFAD6AFFE69557FFC98C 59FFD29C67FFF09C9AFFFF98D4FFFC97E6FF7A85FFFF7074FFFF6882F9FF769D F7FF8BA7EDFF2852C8F9FFFFFF00BB5F15A9CF8246FFCB9366FFB26B32FFBD7D 43FFC88E58FFFF76A9FFFF7EC5FFFF7BD8FFAD74EFFF5661FFFF4B4BFFFF777B FFFF546FD9FF244DB3A9FFFFFF000000001E732C00FFA36A3DFFBC7F4DFFB273 2FFFE96178FFFF5999FFFF62B7FFFF5DD1FFFF56CBFF4A51FFFF5C63FFFF4E4E ECFF0A06D8FF0000001EFFFFFF00000000004D1F006B7D3600FF9C6128FFC071 49FFFF3D92FFFF4189FFFF45AAFFFF43CAFFFF44C4FFBA51E0FF3243EDFF0D12 D7FF02018F6B00000000FFFFFF00000000000000000E5124006B753C00FFCC23 54FFF42677FFF9317AFFF8369FFFF931BEFFF429B1FFEF1B9AFF1811D4FF0006 8F6B0000000E00000000FFFFFF0000000000000000000000000E00000033C100 4CAAD60051F9D60551FFD60972FFD60297FFD60092F9C5007FAA000000330000 000E0000000000000000FFFFFF00000000000000000000000000000000000000 001E00000031000000330000003300000033000000310000001E000000000000 00000000000000000000FFFFFF00929292EF8E8F8FFF8D8D8EFF8D8D8EFF8D8E 8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8C 8DFF8C8D8DFF8E8E8EFF929292EF8E8F8FFFFFFFFFFFF7F7FAFFF7F9FDFFF7F9 FEFFF7F7FAFFF5F4F5FFF5F3F3FFF5F3F3FFF5F3F3FFF5F3F3FFF5F2F2FFF4F2 F2FFF4F2F2FFFFFFFFFF8E8E8EFF8C8D8DFFFFFFFFFFC4A47FFFAE7A41FFAF7B 41FFC5A581FFE2E2E3FFE2E0E0FFE2E0DFFFE1DFDEFFE0DEDDFFDEDCDBFFDDDB D9FFDCDAD9FFFFFEFEFF8C8C8CFF8C8D8DFFFFFFFFFF9F6931FFF0DABCFFE2BE 91FFA06A33FFE8E9ECFF626364FFA2A3A3FFA1A1A1FF9E9F9FFFE2E0DFFFE0DE DDFFE0DDDCFFFCFDFBFF8C8C8CFF8C8C8DFFFFFFFFFFBC9C7AFFA36E37FFA26D 36FFBC9C7BFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8C8CFFFEFEFFFFEFEFF2FF858A8EFFF1F4 FAFFEDF1F7FFECEFF4FFEBEDF2FFEAEAEDFFE8E7E8FFE8E6E6FFE8E5E6FFE7E5 E5FFE7E5E5FFFCFBFBFF8C8C8CFF8C8C8CFFFDFCFCFFF1F1F0FF868788FFF7FA FCFFCBAB89FFAE7A40FFAD7A40FFC8A885FFEFF1F2FFEFEFEEFFEFEEEDFFEFEE ECFFEEEDECFFFDFCFCFF8C8C8CFF8B8C8CFFFEFDFDFFF5F4F3FF878788FF878B 8FFFA26C34FFF0DABCFFE1BD90FF9E6931FFF5F8FBFF5F6061FFA0A0A0FF9E9F 9FFF9C9D9DFFFFFEFEFF8C8C8CFF8B8B8BFFFFFEFEFFF8F7F6FF858585FFFFFF FFFFC2A280FF9F6A34FF9F6A34FFC0A07EFFF5F7F9FFF6F5F4FFF5F4F3FFF5F4 F2FFF4F3F2FFFFFEFEFF8C8C8CFF8B8B8BFFFFFFFFFFFAFAFAFF838383FFFDFF FFFFFAFFFFFFFCFFFFFFFCFFFFFFF9FEFFFFF4F7F9FFF4F4F4FFF3F4F4FFF3F3 F3FFF4F4F4FFFFFEFEFF8B8B8BFF8B8B8BFFFFFFFFFFFEFEFEFF838384FFFFFF FFFFCFB08CFFAD7941FFAD7941FFCCAD8AFFFBFEFFFFFBFCFCFFFBFBFBFFFAFA FAFFFAFAFAFFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFFFFFFFFF808182FF8387 8AFFA16A32FFF0D9BBFFE0BC8FFF9D672FFFFFFFFFFF5C5D5DFF9E9E9EFF9C9C 9CFF9A9A9AFFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC6A584FF9E6932FF9E6932FFC4A482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF8B8B8BFF8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF8D8D8DFF868686C08D8D8DFF8A8A8AFF8A8A8AFF8A8A 8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A8BFF8A8A8AFF8A8A8AFF8A8A 8AFF8A8A8AFF8D8D8DFF868686C0000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000000929292EF8E8F8FFF8D8D8EFF8D8D8EFF8D8E 8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8C 8DFF8C8D8DFF8E8E8EFF929292EF8E8F8FFFFFFFFFFFF7F7FAFFF7F9FDFFF7F9 FEFFF7F7FAFFF5F4F5FFF5F3F3FFF5F3F3FFF5F3F3FFF5F3F3FFF5F2F2FFF4F2 F2FFF4F2F2FFFFFFFFFF8E8E8EFF8C8D8DFFFFFFFFFFC4A47FFFAE7A41FFAF7B 41FFC5A581FFE2E2E3FFE2E0E0FFE2E0DFFFE1DFDEFFE0DEDDFFDEDCDBFFDDDB D9FFDCDAD9FFFFFEFEFF8C8C8CFF8C8D8DFFFFFFFFFF9F6931FFF0DABCFFE2BE 91FFA06A33FFE8E9ECFF626364FFA2A3A3FFA1A1A1FF9E9F9FFFE2E0DFFFE0DE DDFFE0DDDCFFFCFDFBFF8C8C8CFF8C8C8DFFFFFFFFFFBC9C7AFFA36E37FFA26D 36FFBC9C7BFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8C8CFFFEFEFFFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8C8CFFFDFCFCFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFDFCFCFF8C8C8CFF8B8C8CFFFEFDFDFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFEFEFF8C8C8CFF8B8B8BFFFFFEFEFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFEFEFF8C8C8CFF8B8B8BFFFFFFFFFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFEFEFF8B8B8BFF8B8B8BFFFFFFFFFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFE9EAEEFFE9E8E9FFE9E7 E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFE6E4E4FFE4E2E3FFE3E1 E1FFE3E1E1FFFFFFFFFF8B8B8BFF8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF8D8D8DFF868686C08D8D8DFF8A8A8AFF8A8A8AFF8A8A 8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A8BFF8A8A8AFF8A8A8AFF8A8A 8AFF8A8A8AFF8D8D8DFF868686C0000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000000 } end object pmCaseSensitiveOrNot: TPopupMenu Images = imgListButton left = 80 top = 104 object pmiNotCaseSensitive: TMenuItem AutoCheck = True Caption = 'Search is not case sensitive' Checked = True Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000BDECBDFF00000000000000000000000000000000000000000000000054CF 54FF114011FF227922FF00000000000000001C671CFF114011FF33B833FF1C67 1CFF114011FF114011FF165116FF114011FFBDECBDFF0000000000000000D3F2 D3FF114011FF114011FF114011FF114011FF114011FF114011FF68D568FF1140 11FF1C671CFF93E093FF114011FF114011FF00000000000000000000000054CF 5400227922FF114011FF114011FF114011FF114011FF1C671CFF33B83300288F 28FF114011FF165116FF114011FF114011FFBDECBD000E0E890000000000D3F2 D30068D568FF114011FF33B833FF2DA42DFF114011FF40C940FFD3F2D3FF54CF 54FF33B833FF68D568FF114011FF114011FF9090F3000C0C7700000000000000 0000D3F2D3FF114011FF165116FF165116FF114011FFBDECBDFF0C0C77001C67 1CFF114011FF114011FF114011FF227922FF0E0E89000C0C7700000000000000 000068D56800227922FF114011FF114011FF1C671CFF40C94000D3F2D30054CF 540093E093FF54CF54FF93E093FF114011006464EF000C0C7700000000000000 0000D3F2D30068D568FF114011FF114011FF68D568FFBDECBD000E0E89001C67 1C00114011001140110011401100227922000C0C77000C0C7700000000000000 00000000000022792200A7E6A7FFA7E6A7FF1C671C000C0C77000C0C77001010 9F0093E0930054CF540093E093009090F3005050ED009090F300000000000000 00000000000068D56800114011001140110068D568000C0C77000C0C77006464 EF0054CF54FF54CF54FF54CF54FF54CF54FF54CF54FF00000000000000000000 00000000000000000000A7E6A700A7E6A70000000000A4A4F500A4A4F5001140 11FF114011FF114011FF114011FF114011FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000054CF54FF54CF54FF54CF54FF54CF54FF54CF54FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000001140 11FF114011FF114011FF114011FF114011FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 1 ImageIndex = 0 RadioItem = True OnClick = pmiCaseSensitiveOrNotClick end object pmiCaseSensitive: TMenuItem AutoCheck = True Caption = 'Search is case sensitive' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000BBBBF8FF0000000000000000000000000000000000000000000000005050 EDFF0C0C77FF1212B3FF000000000000000010109FFF0C0C77FF2323E8FF1010 9FFF0C0C77FF0C0C77FF0E0E89FF0C0C77FFBBBBF8FF0000000000000000D1D1 FAFF0C0C77FF0C0C77FF0C0C77FF0C0C77FF0C0C77FF0C0C77FF6464EFFF0C0C 77FF10109FFF9090F3FF0C0C77FF0C0C77FF0000000000000000000000000000 00001212B3FF0C0C77FF0C0C77FF0C0C77FF0C0C77FF10109FFF000000001414 C9FF0C0C77FF0E0E89FF0C0C77FF0C0C77FF0000000000000000000000000000 00006464EFFF0C0C77FF2323E8FF1616DDFF0C0C77FF3A3AEBFFD1D1FAFF5050 EDFF2323E8FF6464EFFF0C0C77FF0C0C77FF0000000000000000000000000000 0000D1D1FAFF0C0C77FF0E0E89FF0E0E89FF0C0C77FFBBBBF8FF000000001010 9FFF0C0C77FF0C0C77FF0C0C77FF1212B3FF0000000000000000000000000000 0000000000001212B3FF0C0C77FF0C0C77FF10109FFF00000000000000000000 00009090F3FF5050EDFF9090F3FF000000000000000000000000000000000000 0000000000006464EFFF0C0C77FF0C0C77FF6464EFFF00000000000000000000 00000000000000000000000000005050EDFF0000000000000000000000000000 00000000000000000000A4A4F5FFA4A4F5FF0000000000000000000000000000 000000000000000000000C0C77FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000005050EDFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C0C77FF5050EDFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C0C77FF5050EDFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C0C77FF5050EDFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C0C77FF5050EDFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C0C77FF000000000000000000000000 } GroupIndex = 1 ImageIndex = 1 RadioItem = True OnClick = pmiCaseSensitiveOrNotClick end end object pmShowWholeBranchIfMatchOrNot: TPopupMenu Images = imgListButton left = 104 top = 264 object pmiShowWholeBranchIfMatch: TMenuItem AutoCheck = True Caption = 'If searched string is found in a branch name, show the whole branch even if elements don''t match' Checked = True Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000003000000033000000330000002F0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008B4CF2008A4AFF008A4AFF008B4CF10000000A00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008949FF00E7A7FF00E7A7FF008949FF005E334C00000000000000000000 0000000000000000002300000033000000000000000000000000000000000000 0000008847FF08E1A6FF00DFA1FF008544FF007D43B500000021000000000000 000000000000008147C1008C4BFF000000330000000000000000000000000000 0000008747FF16DFABFF00D89EFF00C890FF009657FF007C42B6000000330000 003300000033008847FF54DAB0FF008746FF0000003300000000000000000000 0000008746FF23DFB1FF00D39CFF20D5ADFF04D3A5FF00AB73FF008744FF0088 46FF008644FF00B97FFF00D8A0FF65D7B3FF008744FF00000033000000000000 0000008846FF30DFB6FF00D19DFF1CAB7AFF42D9BEFF20D1B0FF00D09FFF00D0 A0FF00CF9FFF00CD9CFF00CB9AFF00CD9CFF74DABDFF008A48FF000000000000 0000008845FF3EDFBCFF00D19FFF00843FFF0F9960CF4ACBB0FF42D9BEFF42D9 BEFF42D9BEFF00C49AFF00C49AFF00C59CFF86DEC8FF008A48FF000000000000 0000008845FF4BE0C1FF00CFA0FF008744FF00000000008946A7008845FF0087 44FF008641FF00AB7DFF00C09EFF9BE0D0FF008743FF00000000000000000000 0000008844FF59E1C8FF00CBA2FF008846FF0000000000000000000000000000 000000000000008945FFA4E4D9FF008743FF0000000000000000000000300000 0033008742FF6AE2CCFF00C9A1FF008744FF0000003300000030000000000000 000000000000008D4CB1008C49FF000000000000000000000000008B4BF20089 46FF00AE7FFF00C39EFF00C39EFF00AE80FF008946FF008B4BF2000000000000 0000000000000000000000000000000000000000000000000000008C4AFF82DC CAFF00C1A0FF00BE9BFF00BE9BFF00C1A0FF83DCCAFF008C4AFF000000000000 0000000000000000000000000000000000000000000000000000000000000088 44FF8EDBCBFF00B99DFF00B99DFF8EDBCBFF008844FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008742FF9AE0D3FF9AE0D3FF008742FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000008A47FF008A47FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 3 ImageIndex = 5 RadioItem = True OnClick = pmiShowWholeBranchIfMatchOrNotClick end object pmiNotShowWholeBranchIfMatch: TMenuItem AutoCheck = True Caption = 'Don''t show the branch content "just" because the searched string is found in the branche name' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000003000000033000000330000002F0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008B4CF2008A4AFF008A4AFF008B4CF10000000A00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008949FF00E7A7FF00E7A7FF008949FF2F2F2F4C00000000000000000000 0000000000000000002300000033000000000000000000000000000000000000 0000008847FF08E1A6FF00DFA1FF008544FF3E3E3EB500000021000000000000 000000000000404040C1464646FF000000330000000000000000000000000000 0000008747FF16DFABFF00D89EFF00C890FF4B4B4BFF3E3E3EB6000000330000 003300000033444444FF979797FF434343FF0000003300000000000000000000 0000008746FF23DFB1FF00D39CFF20D5ADFF6B6B6BFF555555FF434343FF4444 44FF434343FF5C5C5CFF6C6C6CFF9E9E9EFF434343FF00000033000000000000 0000008846FF30DFB6FF00D19DFF1CAB7AFF8D8D8DFF787878FF686868FF6868 68FF676767FF666666FF656565FF666666FFA7A7A7FF454545FF000000000000 0000008845FF3EDFBCFF00D19FFF04803FFF545454CF8A8A8AFF8D8D8DFF8D8D 8DFF8D8D8DFF626262FF626262FF626262FFB2B2B2FF454545FF000000000000 0000008845FF4BE0C1FF00CFA0FF068144FF00000000444444A7444444FF4343 43FF434343FF555555FF606060FFBDBDBDFF434343FF00000000000000000000 0000008844FF59E1C8FF00CBA2FF008846FF0000000000000000000000000000 000000000000444444FFC4C4C4FF434343FF0000000000000000000000300000 0033008742FF6AE2CCFF00C9A1FF008744FF0000003300000030000000000000 000000000000464646B1464646FF000000000000000000000000008B4BF20089 46FF00AE7FFF00C39EFF00C39EFF00AE80FF008946FF008B4BF2000000000000 0000000000000000000000000000000000000000000000000000008C4AFF82DC CAFF00C1A0FF00BE9BFF00BE9BFF00C1A0FF83DCCAFF008C4AFF000000000000 0000000000000000000000000000000000000000000000000000000000000088 44FF8EDBCBFF00B99DFF00B99DFF8EDBCBFF008844FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008742FF9AE0D3FF9AE0D3FF008742FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000008A47FF008A47FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 3 ImageIndex = 4 RadioItem = True OnClick = pmiShowWholeBranchIfMatchOrNotClick end end object pmIgnoreAccentsOrNot: TPopupMenu Images = imgListButton left = 80 top = 168 object pmiIgnoreAccents: TMenuItem AutoCheck = True Caption = 'Search ignore accents and ligatures' Checked = True Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000022C7220023C8 23E923C823FF23C823E923C8236C23C923FF23C723910000000022C7220023C8 23E923C823FF23C823E923C8236C23C923FF23C723910000000023C823F023C9 23EF23C8239623C823B123C823F623C923FF25BE251726DE260723C823F023C9 23EF23C8239623C823B123C823F623C923FF25BE25170000000022C822FF23C9 23D922C8224223C8231C23C923C723C923FF28C9280926DE260822C822FF23C9 23D922C8224223C8231C23C923C723C923FF28C928090000000022C8228923C8 23FF23C823EE23C823CC23C823EE23C923FF24D2240925D9250322C8228923C8 23FF23C823EE23C823CC23C823EE23C923FF24D22409000000000000000021C5 213023C8238422C822CE23C823FA23C823FF24CE2409000000000000000021C5 213023C8238422C822CE23C823FA23C823FF24CE24090000000022C822F123C8 23CD23C8232224C8240B23C923C922C922FF26DE260823D0230822C822F123C8 23CD23C8232224C8240B23C923C922C922FF26DE26080000000022C8229C23C8 23FF23C823FF23C823FF23C823FF23C823C928E328062AF82A0422C8229C23C8 23FF23C823FF23C823FF23C823FF23C823C928E328060000000028BD280923C8 238422C822CD22C722D422C822A622C82220000000000000000028BD280923C8 238422C822CB22C722D122C822A622C822200000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000022C922272AFF2A01000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000025CF250423C8 233E22C822B422C822CB23CA23270000000000000000000000000000000023C8 23FF23C823FF23C823FF23C823FF23C823FF000000000000000026D8260422C8 223E22C9227923C7233C23B523020000000000000000000000000000000023C8 238422C822CD22C722D422C822A6000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000023C8 23FF23C823FF23C823FF23C823FF23C823FF0000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000023C8 238422C822CD22C722D422C822A6000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 2 ImageIndex = 2 RadioItem = True OnClick = pmiIgnoreAccentsOrNotClick end object pmiNotIgnoreAccents: TMenuItem AutoCheck = True Caption = 'Search is strict regarding accents and ligatures' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000081BED00081B EFE9081BEFFF081BEFE9081BEF6C081BEFFF081BED9100000000081BED00081B EFE9081BEFFF081BEFE9081BEF6C081BEFFF081BED9100000000081BEFF0081B EFEF081BEF96081BEFB1081BEFF6081BEFFF081AE3171B2DF607081BEFF0081B EFEF081BEF96081BEFB1081BEFF6081BEFFF081AE31700000000081BEFFF081B EFD9081BEF42081BEF1C081BEFC7081BEFFF091BF0091B2DF608081BEFFF081B EFD9081BEF42081BEF1C081BEFC7081BEFFF091BF00900000000081BEF89081B EFFF081BEFEE081BEFCC081BEFEE081BEFFF0E20F5091527F603081BEF89081B EFFF081BEFEE081BEFCC081BEFEE081BEFFF0E20F5090000000000000000081B EB30081BEF84081BEFCE081BEFFA081BEFFF091CF4090000000000000000081B EB30081BEF84081BEFCE081BEFFA081BEFFF091CF40900000000081BEFF1081B EFCD081BEF22081BEF0B081BEFC9081BEFFF1B2DF6080A1DF508081BEFF1081B EFCD081BEF22081BEF0B081BEFC9081BEFFF1B2DF60800000000081BEF9C081B EFFF081BEFFF081BEFFF081BEFFF081BEFC92334F6063C4BF704081BEF9C081B EFFF081BEFFF081BEFFF081BEFFF081BEFC92334F60600000000081AE309081B EF84081BEFCD081BEDD4081BEFA6081BEF200000000000000000081AE309081B EF84081BEFCB081BEDD1081BEFA6081BEF200000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000081BEF274352F801000000000000000000000000000000000000 000000000000081BEF3E081BEFFF0000000000000000000000000A1DF504081B EF3E081BEFB4081BEFCB091BF027000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000001527F604081B EF3E081BEF79081BED3C0819D902000000000000000000000000000000000000 000000000000081BEF3E081BEFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000081BEF3E081BEFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000081BEF3E081BEFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000081BEF3E081BEFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 2 ImageIndex = 3 RadioItem = True OnClick = pmiIgnoreAccentsOrNotClick end end object pmFullExpandOrNot: TPopupMenu Images = imgListButton left = 112 top = 344 object pmiFullExpand: TMenuItem AutoCheck = True Caption = 'Full expand' Checked = True Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000033000000330000003300000000868686C08D8D 8DFF8A8A8AFF8A8A8AFF8A8A8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A 8BFF8A8A8AFF8A8A8AFF8A8A8AFF8A8A8AFF8D8D8DFF868686C08D8D8DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D8D8DFF8B8B8BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFC6A584FF9E6932FF9E6932FFC4A482FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFFFFFFFFF808182FF83878AFFA16A32FFF0D9BBFFE0BC8FFF9D672FFFFFFF FFFF5C5D5DFF9E9E9EFF9C9C9CFF9A9A9AFFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFFEFEFEFF838384FFFFFFFFFFCFB08CFFAD7941FFAD7941FFCCAD8AFFFBFE FFFFFBFCFCFFFBFBFBFFFAFAFAFFFAFAFAFFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFFAFAFAFF838383FFFDFFFFFFFAFFFFFFFCFFFFFFFCFFFFFFF9FEFFFFF4F7 F9FFF4F4F4FFF3F4F4FFF3F3F3FFF4F4F4FFFFFEFEFF8B8B8BFF8B8B8BFFFFFE FEFFF8F7F6FF858585FFFFFFFFFFC2A280FF9F6A34FF9F6A34FFC0A07EFFF5F7 F9FFF6F5F4FFF5F4F3FFF5F4F2FFF4F3F2FFFFFEFEFF8C8C8CFF8B8C8CFFFEFD FDFFF5F4F3FF878788FF878B8FFFA26C34FFF0DABCFFE1BD90FF9E6931FFF5F8 FBFF5F6061FFA0A0A0FF9E9F9FFF9C9D9DFFFFFEFEFF8C8C8CFF8C8C8CFFFDFC FCFFF1F1F0FF868788FFF7FAFCFFCBAB89FFAE7A40FFAD7A40FFC8A885FFEFF1 F2FFEFEFEEFFEFEEEDFFEFEEECFFEEEDECFFFDFCFCFF8C8C8CFF8C8C8CFFFEFE FFFFEFEFF2FF858A8EFFF1F4FAFFEDF1F7FFECEFF4FFEBEDF2FFEAEAEDFFE8E7 E8FFE8E6E6FFE8E5E6FFE7E5E5FFE7E5E5FFFCFBFBFF8C8C8CFF8C8C8DFFFFFF FFFFBC9C7AFFA36E37FFA26D36FFBC9C7BFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6 E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8D8DFFFFFF FFFF9F6931FFF0DABCFFE2BE91FFA06A33FFE8E9ECFF626364FFA2A3A3FFA1A1 A1FF9E9F9FFFE2E0DFFFE0DEDDFFE0DDDCFFFCFDFBFF8C8C8CFF8C8D8DFFFFFF FFFFC4A47FFFAE7A41FFAF7B41FFC5A581FFE2E2E3FFE2E0E0FFE2E0DFFFE1DF DEFFE0DEDDFFDEDCDBFFDDDBD9FFDCDAD9FFFFFEFEFF8C8C8CFF8E8F8FFFFFFF FFFFF7F7FAFFF7F9FDFFF7F9FEFFF7F7FAFFF5F4F5FFF5F3F3FFF5F3F3FFF5F3 F3FFF5F3F3FFF5F2F2FFF4F2F2FFF4F2F2FFFFFFFFFF8E8E8EFF929292EF8E8F 8FFF8D8D8EFF8D8D8EFF8D8E8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D 8DFF8C8D8DFF8C8D8DFF8C8C8DFF8C8D8DFF8E8E8EFF929292EF } GroupIndex = 4 ImageIndex = 9 RadioItem = True OnClick = pmiFullExpandOrNotClick end object pmiFullCollapse: TMenuItem AutoCheck = True Caption = 'Full collapse' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000033000000330000003300000000868686C08D8D 8DFF8A8A8AFF8A8A8AFF8A8A8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A 8BFF8A8A8AFF8A8A8AFF8A8A8AFF8A8A8AFF8D8D8DFF868686C08D8D8DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D8D8DFF8B8B8BFFFFFF FFFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFFFFFF8B8B8BFF8B8B8BFFFFFF FFFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFEFEFF8B8B8BFF8B8B8BFFFFFE FEFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFEFEFF8C8C8CFF8B8C8CFFFEFD FDFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFFFEFEFF8C8C8CFF8C8C8CFFFDFC FCFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFDFCFCFF8C8C8CFF8C8C8CFFFEFE FFFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1 E1FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8C8DFFFFFF FFFFBC9C7AFFA36E37FFA26D36FFBC9C7BFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6 E6FFE6E4E4FFE4E2E3FFE3E1E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8D8DFFFFFF FFFF9F6931FFF0DABCFFE2BE91FFA06A33FFE8E9ECFF626364FFA2A3A3FFA1A1 A1FF9E9F9FFFE2E0DFFFE0DEDDFFE0DDDCFFFCFDFBFF8C8C8CFF8C8D8DFFFFFF FFFFC4A47FFFAE7A41FFAF7B41FFC5A581FFE2E2E3FFE2E0E0FFE2E0DFFFE1DF DEFFE0DEDDFFDEDCDBFFDDDBD9FFDCDAD9FFFFFEFEFF8C8C8CFF8E8F8FFFFFFF FFFFF7F7FAFFF7F9FDFFF7F9FEFFF7F7FAFFF5F4F5FFF5F3F3FFF5F3F3FFF5F3 F3FFF5F3F3FFF5F2F2FFF4F2F2FFF4F2F2FFFFFFFFFF8E8E8EFF929292EF8E8F 8FFF8D8D8EFF8D8D8EFF8D8E8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D 8DFF8C8D8DFF8C8D8DFF8C8C8DFF8C8D8DFF8E8E8EFF929292EF } GroupIndex = 4 ImageIndex = 10 RadioItem = True OnClick = pmiFullExpandOrNotClick end end end doublecmd-1.1.30/src/fsyncdirsperformdlg.pas0000644000175000001440000000130215104114162020143 0ustar alexxusersunit fSyncDirsPerformDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ButtonPanel; type { TfrmSyncDirsPerformDlg } TfrmSyncDirsPerformDlg = class(TForm) Bevel1: TBevel; ButtonPanel1: TButtonPanel; chkDeleteLeft: TCheckBox; chkDeleteRight: TCheckBox; chkConfirmOverwrites: TCheckBox; chkLeftToRight: TCheckBox; chkRightToLeft: TCheckBox; edRightPath: TEdit; edLeftPath: TEdit; private { private declarations } public { public declarations } end; var frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg; implementation {$R *.lfm} end. doublecmd-1.1.30/src/fsyncdirsperformdlg.lrj0000644000175000001440000000055615104114162020161 0ustar alexxusers{"version":1,"strings":[ {"hash":267343253,"name":"tfrmsyncdirsperformdlg.caption","sourcebytes":[83,121,110,99,104,114,111,110,105,122,101],"value":"Synchronize"}, {"hash":96086787,"name":"tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption","sourcebytes":[67,111,110,102,105,114,109,32,111,118,101,114,119,114,105,116,101,115],"value":"Confirm overwrites"} ]} doublecmd-1.1.30/src/fsyncdirsperformdlg.lfm0000644000175000001440000000663415104114162020153 0ustar alexxusersobject frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg Left = 234 Height = 219 Top = 137 Width = 326 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Synchronize' ClientHeight = 200 ClientWidth = 326 Position = poOwnerFormCenter LCLVersion = '1.4.0.4' object chkLeftToRight: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 19 Top = 3 Width = 20 BorderSpacing.Left = 6 BorderSpacing.Top = 3 Enabled = False ParentBidiMode = False TabOrder = 0 end object edRightPath: TEdit AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = chkLeftToRight AnchorSideTop.Side = asrBottom Left = 22 Height = 23 Top = 22 Width = 270 BorderSpacing.Left = 16 BorderSpacing.Right = 6 Enabled = False ReadOnly = True TabOrder = 1 end object chkRightToLeft: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = edRightPath AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 51 Width = 20 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Enabled = False ParentBidiMode = False TabOrder = 2 end object edLeftPath: TEdit AnchorSideLeft.Control = chkRightToLeft AnchorSideTop.Control = chkRightToLeft AnchorSideTop.Side = asrBottom Left = 22 Height = 23 Top = 70 Width = 270 BorderSpacing.Left = 16 Enabled = False ReadOnly = True TabOrder = 3 end object Bevel1: TBevel AnchorSideLeft.Control = Owner AnchorSideTop.Control = chkDeleteRight AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 6 Top = 140 Width = 326 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Shape = bsBottomLine end object chkConfirmOverwrites: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 152 Width = 121 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Confirm overwrites' Checked = True State = cbChecked TabOrder = 5 end object ButtonPanel1: TButtonPanel AnchorSideTop.Control = chkConfirmOverwrites AnchorSideTop.Side = asrBottom Left = 6 Height = 26 Top = 177 Width = 314 Align = alNone Anchors = [akTop, akLeft, akRight] OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 6 ShowButtons = [pbOK, pbCancel] ShowBevel = False end object chkDeleteLeft: TCheckBox AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = edLeftPath AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 99 Width = 20 BorderSpacing.Top = 6 TabOrder = 4 end object chkDeleteRight: TCheckBox AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = chkDeleteLeft AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 118 Width = 20 BorderSpacing.Top = 6 TabOrder = 4 end end doublecmd-1.1.30/src/fsyncdirsdlg.pas0000644000175000001440000017471415104114162016572 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Directories synchronization utility (specially for DC) Copyright (C) 2013 Anton Panferov (ast.a_s@mail.ru) Copyright (C) 2014-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fSyncDirsDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, Menus, ActnList, EditBtn, DCClassesUtf8, uFileView, uFileSource, uFileSourceCopyOperation, uFile, uFileSourceOperation, uFileSourceOperationMessageBoxesUI, uFormCommands, uHotkeyManager, uClassesEx, uFileSourceDeleteOperation, KASProgressBar; const HotkeysCategory = 'Synchronize Directories'; type TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteLeft, srsDeleteRight, srsDeleteBoth, srsDoNothing); { TDrawGrid } TDrawGrid = class(Grids.TDrawGrid) protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; { TfrmSyncDirsDlg } TfrmSyncDirsDlg = class(TForm, IFormCommands) actDeleteLeft: TAction; actDeleteRight: TAction; actDeleteBoth: TAction; actSelectDeleteLeft: TAction; actSelectDeleteRight: TAction; actSelectDeleteBoth: TAction; actSelectCopyReverse: TAction; actSelectClear: TAction; actSelectCopyLeftToRight: TAction; actSelectCopyRightToLeft: TAction; actSelectCopyDefault: TAction; ActionList: TActionList; btnAbort: TBitBtn; btnCompare: TButton; btnSynchronize: TButton; btnClose: TButton; chkAsymmetric: TCheckBox; chkSubDirs: TCheckBox; chkByContent: TCheckBox; chkIgnoreDate: TCheckBox; chkOnlySelected: TCheckBox; cbExtFilter: TComboBox; edPath1: TDirectoryEdit; edPath2: TDirectoryEdit; HeaderDG: TDrawGrid; lblProgress: TLabel; lblProgressDelete: TLabel; MainDrawGrid: TDrawGrid; GroupBox1: TGroupBox; ImageList1: TImageList; Label1: TLabel; LeftPanel1: TPanel; LeftPanel2: TPanel; miDeleteBoth: TMenuItem; miDeleteRight: TMenuItem; miDeleteLeft: TMenuItem; miSeparator3: TMenuItem; miSelectDeleteLeft: TMenuItem; miSelectDeleteRight: TMenuItem; miSelectDeleteBoth: TMenuItem; miSeparator2: TMenuItem; miSelectCopyReverse: TMenuItem; miSeparator1: TMenuItem; miSelectCopyLeftToRight: TMenuItem; miSelectCopyRightToLeft: TMenuItem; miSelectCopyDefault: TMenuItem; miSelectClear: TMenuItem; MenuItemCompare: TMenuItem; MenuItemViewRight: TMenuItem; MenuItemViewLeft: TMenuItem; pnlFilter: TPanel; pnlProgress: TPanel; pnlCopyProgress: TPanel; pnlDeleteProgress: TPanel; pmGridMenu: TPopupMenu; ProgressBar: TKASProgressBar; ProgressBarDelete: TKASProgressBar; sbCopyRight: TSpeedButton; sbEqual: TSpeedButton; sbNotEqual: TSpeedButton; sbUnknown: TSpeedButton; sbCopyLeft: TSpeedButton; sbDuplicates: TSpeedButton; sbSingles: TSpeedButton; btnSearchTemplate: TSpeedButton; StatusBar1: TStatusBar; Timer: TTimer; TopPanel: TPanel; procedure actExecute(Sender: TObject); procedure btnAbortClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnSearchTemplateClick(Sender: TObject); procedure btnCompareClick(Sender: TObject); procedure btnSynchronizeClick(Sender: TObject); procedure edPath1AcceptDirectory(Sender: TObject; var Value: String); procedure RestoreProperties(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormResize(Sender: TObject); procedure MainDrawGridDblClick(Sender: TObject); procedure MainDrawGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure MainDrawGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MainDrawGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure HeaderDGHeaderClick(Sender: TObject; IsColumn: Boolean; Index: Integer); procedure HeaderDGHeaderSizing(sender: TObject; const IsColumn: boolean; const aIndex, aSize: Integer); procedure FilterSpeedButtonClick(Sender: TObject); procedure MenuItemViewClick(Sender: TObject); procedure pmGridMenuPopup(Sender: TObject); procedure TimerTimer(Sender: TObject); private FCommands: TFormCommands; FIniPropStorage: TIniPropStorageEx; private { private declarations } FCancel: Boolean; FScanning: Boolean; FComparing: Boolean; FFoundItems: TStringListEx; FVisibleItems: TStringListEx; FSortIndex: Integer; FSortDesc: Boolean; FNtfsShift: Boolean; FFileExists: TSyncRecState; FSelectedItems: TStringListEx; FFileSourceL, FFileSourceR: IFileSource; FCmpFileSourceL, FCmpFileSourceR: IFileSource; FCmpFilePathL, FCmpFilePathR: string; FAddressL, FAddressR: string; hCols: array [0..6] of record Left, Width: Integer end; CheckContentThread: TObject; Ftotal, Fequal, Fnoneq, FuniqueL, FuniqueR: Integer; FOperation: TFileSourceOperation; FCopyStatistics: TFileSourceCopyOperationStatistics; FDeleteStatistics: TFileSourceDeleteOperationStatistics; FFileSourceOperationMessageBoxesUI: TFileSourceOperationMessageBoxesUI; procedure ClearFoundItems; procedure Compare; procedure FillFoundItemsDG; procedure InitVisibleItems; procedure RecalcHeaderCols; procedure ScanDirs; procedure SetSortIndex(AValue: Integer); procedure SortFoundItems; procedure SortFoundItems(sl: TStringList); procedure UpdateStatusBar; procedure StopCheckContentThread; procedure UpdateSelection(R: Integer); procedure EnableControls(AEnabled: Boolean); procedure SetSyncRecState(AState: TSyncRecState); procedure DeleteFiles(ALeft, ARight: Boolean); function DeleteFiles(FileSource: IFileSource; var Files: TFiles): Boolean; procedure UpdateList(ALeft, ARight: TFiles; ARemoveLeft, ARemoveRight: Boolean); procedure SetProgressBytes(AProgressBar: TKASProgressBar; CurrentBytes: Int64; TotalBytes: Int64); procedure SetProgressFiles(AProgressBar: TKASProgressBar; CurrentFiles: Int64; TotalFiles: Int64); private property SortIndex: Integer read FSortIndex write SetSortIndex; property Commands: TFormCommands read FCommands implements IFormCommands; protected procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; public { public declarations } constructor Create(AOwner: TComponent; FileView1, FileView2: TFileView); reintroduce; destructor Destroy; override; public procedure CopyToClipboard; published procedure cm_SelectClear(const {%H-}Params:array of string); procedure cm_SelectDeleteLeft(const {%H-}Params:array of string); procedure cm_SelectDeleteRight(const {%H-}Params:array of string); procedure cm_SelectDeleteBoth(const {%H-}Params:array of string); procedure cm_SelectCopyDefault(const {%H-}Params:array of string); procedure cm_SelectCopyReverse(const {%H-}Params:array of string); procedure cm_SelectCopyLeftToRight(const {%H-}Params:array of string); procedure cm_SelectCopyRightToLeft(const {%H-}Params:array of string); procedure cm_DeleteLeft(const {%H-}Params:array of string); procedure cm_DeleteRight(const {%H-}Params:array of string); procedure cm_DeleteBoth(const {%H-}Params:array of string); end; resourcestring rsComparingPercent = 'Comparing... %d%% (ESC to cancel)'; rsLeftToRightCopy = 'Left to Right: Copy %d files, total size: %s (%s)'; rsRightToLeftCopy = 'Right to Left: Copy %d files, total size: %s (%s)'; rsDeleteLeft = 'Left: Delete %d file(s)'; rsDeleteRight = 'Right: Delete %d file(s)'; rsFilesFound = 'Files found: %d (Identical: %d, Different: %d, ' + 'Unique left: %d, Unique right: %d)'; procedure ShowSyncDirsDlg(FileView1, FileView2: TFileView); implementation uses fMain, uDebug, fDiffer, fSyncDirsPerformDlg, uGlobs, LCLType, LazUTF8, LazFileUtils, uFileSystemFileSource, uFileSourceOperationOptions, DCDateTimeUtils, uDCUtils, uFileSourceUtil, uFileSourceOperationTypes, uShowForm, uAdministrator, uOSUtils, uLng, uMasks, Math, uClipboard, IntegerList, fMaskInputDlg, uSearchTemplate, StrUtils, DCStrUtils, uTypes, uFileSystemDeleteOperation, uFindFiles; {$R *.lfm} const GRID_COLUMN_FMT = 'HeaderDG_Column%d_Width'; type { TFileSyncRec } TFileSyncRec = class private FRelPath: string; FState: TSyncRecState; FAction: TSyncRecState; FFileR, FFileL: TFile; FForm: TfrmSyncDirsDlg; public constructor Create(AForm: TfrmSyncDirsDlg; RelPath: string); destructor Destroy; override; procedure UpdateState(ignoreDate: Boolean); end; { TCheckContentThread } TCheckContentThread = class(TThread) private FDone: Boolean; FOwner: TfrmSyncDirsDlg; private procedure DoStart; procedure DoFinish; procedure UpdateGrid; procedure ReapplyFilter; protected procedure Execute; override; public constructor Create(Owner: TfrmSyncDirsDlg); property Done: Boolean read FDone; end; procedure ShowSyncDirsDlg(FileView1, FileView2: TFileView); begin if not Assigned(FileView1) then raise Exception.Create('ShowSyncDirsDlg: FileView1=nil'); if not Assigned(FileView2) then raise Exception.Create('ShowSyncDirsDlg: FileView2=nil'); with TfrmSyncDirsDlg.Create(Application, FileView1, FileView2) do Show; end; { TDrawGrid } procedure TDrawGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var C, R: Integer; begin if Button <> mbRight then inherited MouseDown(Button, Shift, X, Y) else begin MouseToCell(X, Y, {%H-}C, {%H-}R); if (R >= 0) and (R < RowCount) then begin if not IsCellSelected[Col, R] then MoveExtend(False, Col, R, False) else begin C:= Row; PInteger(@Row)^:= R; InvalidateRow(C); InvalidateRow(R); end; end; end; end; { TCheckContentThread } procedure TCheckContentThread.DoStart; begin FOwner.HeaderDG.Enabled:= False; FOwner.GroupBox1.Enabled:= False; end; procedure TCheckContentThread.DoFinish; begin FOwner.FComparing:= False; FOwner.HeaderDG.Enabled:= True; FOwner.TopPanel.Enabled:= True; FOwner.GroupBox1.Enabled:= True; end; procedure TCheckContentThread.UpdateGrid; begin FOwner.MainDrawGrid.Invalidate; FOwner.UpdateStatusBar; end; procedure TCheckContentThread.ReapplyFilter; begin FOwner.FillFoundItemsDG; FOwner.UpdateStatusBar; end; procedure TCheckContentThread.Execute; function CompareFiles(fn1, fn2: String; len: Int64): Boolean; const BUFLEN = 1024 * 32; var fs1, fs2: TFileStreamEx; buf1, buf2: array [1..BUFLEN] of Byte; i, j: Int64; begin fs1 := TFileStreamEx.Create(fn1, fmOpenRead or fmShareDenyWrite); try fs2 := TFileStreamEx.Create(fn2, fmOpenRead or fmShareDenyWrite); try i := 0; repeat if len - i <= BUFLEN then j := len - i else j := BUFLEN; fs1.Read(buf1, j); fs2.Read(buf2, j); i := i + j; Result := CompareMem(@buf1, @buf2, j); until Terminated or not Result or (i >= len); finally fs2.Free; end; finally fs1.Free; end; end; var B: Boolean; i, j: Integer; r: TFileSyncRec; begin Synchronize(@DoStart); try with FOwner do for i := 0 to FFoundItems.Count - 1 do begin for j := 0 to TStringList(FFoundItems.Objects[i]).Count - 1 do begin if Terminated then Exit; r := TFileSyncRec(TStringList(FFoundItems.Objects[i]).Objects[j]); if Assigned(r) and (r.FState = srsUnknown) then begin try B:= CompareFiles(r.FFileL.FullPath, r.FFileR.FullPath, r.FFileL.Size); if Terminated then Exit; if B then begin Inc(Fequal); Dec(Fnoneq); r.FState := srsEqual end else r.FState := srsNotEq; if r.FAction = srsUnknown then r.FAction := r.FState; if j mod 20 = 0 then Synchronize(@UpdateGrid); except on e: Exception do DCDebug('[SyncDirs::CmpContentThread] ' + e.Message); end; end; end; end; FDone := True; Synchronize(@ReapplyFilter); finally Synchronize(@DoFinish); end; end; constructor TCheckContentThread.Create(Owner: TfrmSyncDirsDlg); begin FOwner := Owner; inherited Create(False); end; constructor TFileSyncRec.Create(AForm: TfrmSyncDirsDlg; RelPath: string); begin FForm:= AForm; FRelPath := RelPath; end; destructor TFileSyncRec.Destroy; begin FreeAndNil(FFileL); FreeAndNil(FFileR); inherited Destroy; end; procedure TFileSyncRec.UpdateState(ignoreDate: Boolean); var FileTimeDiff: Integer; begin FState := srsNotEq; if Assigned(FFileR) and not Assigned(FFileL) then FState := FForm.FFileExists else if not Assigned(FFileR) and Assigned(FFileL) then FState := srsCopyRight else begin FileTimeDiff := FileTimeCompare(FFileL.ModificationTime, FFileR.ModificationTime, FForm.FNtfsShift); if ((FileTimeDiff = 0) or ignoreDate) and (FFileL.Size = FFileR.Size) then FState := srsEqual else if not ignoreDate then if FileTimeDiff > 0 then FState := srsCopyRight else if FileTimeDiff < 0 then FState := srsCopyLeft; end; if FForm.chkAsymmetric.Checked and (FState = srsCopyLeft) then FAction := srsDoNothing else begin FAction := FState; end; end; { TfrmSyncDirsDlg } procedure TfrmSyncDirsDlg.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmSyncDirsDlg.btnCloseClick(Sender: TObject); begin Close end; procedure TfrmSyncDirsDlg.btnSearchTemplateClick(Sender: TObject); var sMask: String; bTemplate: Boolean; begin sMask:= cbExtFilter.Text; if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate:= IsMaskSearchTemplate(sMask); cbExtFilter.Enabled:= not bTemplate; cbExtFilter.Text:= sMask; end; end; procedure TfrmSyncDirsDlg.btnAbortClick(Sender: TObject); begin if Assigned(FOperation) then FOperation.Stop else begin pnlProgress.Hide; end; end; procedure TfrmSyncDirsDlg.btnCompareClick(Sender: TObject); begin if not IsMaskSearchTemplate(cbExtFilter.Text) then InsertFirstItem(Trim(cbExtFilter.Text), cbExtFilter); StatusBar1.Panels[0].Text := Format(rsComparingPercent, [0]); StopCheckContentThread; Compare; end; procedure TfrmSyncDirsDlg.btnSynchronizeClick(Sender: TObject); var OperationType: TFileSourceOperationType; FileExistsOption: TFileSourceOperationOptionFileExists; SymLinkOption: TFileSourceOperationOptionSymLink = fsooslNone; function CopyFiles(src, dst: IFileSource; fs: TFiles; Dest: string): Boolean; begin if not GetCopyOperationType(Src, Dst, OperationType) then begin MessageDlg(rsMsgErrNotSupported, mtError, [mbOK], 0); Exit(False); end else begin Fs.Path:= fs[0].Path; // Create destination directory Dst.CreateDirectory(ExcludeBackPathDelimiter(Dest)); // Determine operation type case OperationType of fsoCopy: begin // Copy within the same file source. FOperation := Src.CreateCopyOperation( Fs, Dest) as TFileSourceCopyOperation; end; fsoCopyOut: begin // CopyOut to filesystem. FOperation := Src.CreateCopyOutOperation( Dst, Fs, Dest) as TFileSourceCopyOperation; end; fsoCopyIn: begin // CopyIn from filesystem. FOperation := Dst.CreateCopyInOperation( Src, Fs, Dest) as TFileSourceCopyOperation; end; end; if not Assigned(FOperation) then begin MessageDlg(rsMsgErrNotSupported, mtError, [mbOK], 0); Exit(False); end; FOperation.Elevate:= ElevateAction; TFileSourceCopyOperation(FOperation).SymLinkOption := SymLinkOption; TFileSourceCopyOperation(FOperation).FileExistsOption := FileExistsOption; FOperation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try FOperation.Execute; Result := FOperation.Result = fsorFinished; SymLinkOption := TFileSourceCopyOperation(FOperation).SymLinkOption; FileExistsOption := TFileSourceCopyOperation(FOperation).FileExistsOption; FCopyStatistics.DoneBytes+= TFileSourceCopyOperation(FOperation).RetrieveStatistics.TotalBytes; SetProgressBytes(ProgressBar, FCopyStatistics.DoneBytes, FCopyStatistics.TotalBytes); finally FreeAndNil(FOperation); end; end; end; var i, DeleteLeftCount, DeleteRightCount, CopyLeftCount, CopyRightCount: Integer; CopyLeftSize, CopyRightSize: Int64; fsr: TFileSyncRec; DeleteLeft, DeleteRight, CopyLeft, CopyRight: Boolean; DeleteLeftFiles, DeleteRightFiles, CopyLeftFiles, CopyRightFiles: TFiles; Dest: string; begin DeleteLeftCount := 0; DeleteRightCount := 0; CopyLeftCount := 0; CopyRightCount := 0; CopyLeftSize := 0; CopyRightSize := 0; for i := 0 to FVisibleItems.Count - 1 do if Assigned(FVisibleItems.Objects[i]) then begin fsr := TFileSyncRec(FVisibleItems.Objects[i]); case fsr.FAction of srsCopyLeft: begin Inc(CopyLeftCount); Inc(CopyLeftSize, fsr.FFileR.Size); end; srsCopyRight: begin Inc(CopyRightCount); Inc(CopyRightSize, fsr.FFileL.Size); end; srsDeleteLeft: begin Inc(DeleteLeftCount); end; srsDeleteRight: begin Inc(DeleteRightCount); end; srsDeleteBoth: begin Inc(DeleteLeftCount); Inc(DeleteRightCount); end; end; end; FCopyStatistics.DoneBytes:= 0; FDeleteStatistics.DoneFiles:= 0; FCopyStatistics.TotalBytes:= CopyLeftSize + CopyRightSize; FDeleteStatistics.TotalFiles:= DeleteLeftCount + DeleteRightCount; with TfrmSyncDirsPerformDlg.Create(Self) do try edLeftPath.Text := FCmpFileSourceL.CurrentAddress + FCmpFilePathL; edRightPath.Text := FCmpFileSourceR.CurrentAddress + FCmpFilePathR; if (CopyLeftCount > 0) and GetCopyOperationType(FFileSourceR, FFileSourceL, OperationType) then begin chkRightToLeft.Enabled := True; chkRightToLeft.Checked := True; edLeftPath.Enabled := True; end; if (CopyRightCount > 0) and GetCopyOperationType(FFileSourceL, FFileSourceR, OperationType) then begin chkLeftToRight.Enabled := True; chkLeftToRight.Checked := True; edRightPath.Enabled := True; end; chkDeleteLeft.Enabled := DeleteLeftCount > 0; chkDeleteLeft.Checked := chkDeleteLeft.Enabled; chkDeleteRight.Enabled := DeleteRightCount > 0; chkDeleteRight.Checked := chkDeleteRight.Enabled; chkDeleteLeft.Caption := Format(rsDeleteLeft, [DeleteLeftCount]); chkDeleteRight.Caption := Format(rsDeleteRight, [DeleteRightCount]); chkLeftToRight.Caption := Format(rsLeftToRightCopy, [CopyRightCount, cnvFormatFileSize(CopyRightSize, fsfFloat, gFileSizeDigits), IntToStrTS(CopyRightSize)]); chkRightToLeft.Caption := Format(rsRightToLeftCopy, [CopyLeftCount, cnvFormatFileSize(CopyLeftSize, fsfFloat, gFileSizeDigits), IntToStrTS(CopyLeftSize)]); if ShowModal = mrOk then begin EnableControls(False); if chkConfirmOverwrites.Checked then FileExistsOption := fsoofeNone else begin FileExistsOption := fsoofeOverwrite; end; CopyLeft := chkRightToLeft.Checked; CopyRight := chkLeftToRight.Checked; DeleteLeft := chkDeleteLeft.Checked; DeleteRight := chkDeleteRight.Checked; lblProgress.Caption := rsOperCopying; lblProgressDelete.Caption := rsOperDeleting; ProgressBar.Position:=0; ProgressBarDelete.Position:=0; pnlCopyProgress.Visible:= CopyLeft or CopyRight; pnlDeleteProgress.Visible:= DeleteLeft or DeleteRight; i := 0; while i < FVisibleItems.Count do begin CopyLeftFiles := TFiles.Create(''); CopyRightFiles := TFiles.Create(''); DeleteLeftFiles := TFiles.Create(''); DeleteRightFiles := TFiles.Create(''); if FVisibleItems.Objects[i] <> nil then repeat fsr := TFileSyncRec(FVisibleItems.Objects[i]); Dest := fsr.FRelPath; case fsr.FAction of srsCopyRight: if CopyRight then CopyRightFiles.Add(fsr.FFileL.Clone); srsCopyLeft: if CopyLeft then CopyLeftFiles.Add(fsr.FFileR.Clone); srsDeleteRight: if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone); srsDeleteLeft: if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone); srsDeleteBoth: begin if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone); if DeleteLeft then DeleteLeftFiles.Add(fsr.FFileL.Clone); end; end; i := i + 1; until (i = FVisibleItems.Count) or (FVisibleItems.Objects[i] = nil); i := i + 1; if CopyLeftFiles.Count > 0 then begin if not CopyFiles(FCmpFileSourceR, FCmpFileSourceL, CopyLeftFiles, FCmpFilePathL + Dest) then Break; end else CopyLeftFiles.Free; if CopyRightFiles.Count > 0 then begin if not CopyFiles(FCmpFileSourceL, FCmpFileSourceR, CopyRightFiles, FCmpFilePathR + Dest) then Break; end else CopyRightFiles.Free; if DeleteLeftFiles.Count > 0 then begin if not DeleteFiles(FCmpFileSourceL, DeleteLeftFiles) then Break; end else DeleteLeftFiles.Free; if DeleteRightFiles.Count > 0 then begin if not DeleteFiles(FCmpFileSourceR, DeleteRightFiles) then Break; end else DeleteRightFiles.Free; if not pnlProgress.Visible then Break; end; EnableControls(True); btnCompare.Click; end; finally Free; end; end; procedure TfrmSyncDirsDlg.edPath1AcceptDirectory(Sender: TObject; var Value: String); begin if Sender = edPath1 then begin FFileSourceL := TFileSystemFileSource.GetFileSource; FAddressL := ''; end else if Sender = edPath2 then begin FFileSourceR := TFileSystemFileSource.GetFileSource; FAddressR := ''; end; end; procedure TfrmSyncDirsDlg.RestoreProperties(Sender: TObject); var Index: Integer; begin with HeaderDG.Columns do begin for Index := 0 to Count - 1 do Items[Index].Width:= StrToIntDef(FIniPropStorage.StoredValue[Format(GRID_COLUMN_FMT, [Index])], Items[Index].Width); end; RecalcHeaderCols; end; procedure TfrmSyncDirsDlg.FormClose(Sender: TObject; var CloseAction: TCloseAction); var Index: Integer; begin StopCheckContentThread; CloseAction := caFree; { settings } gSyncDirsSubdirs := chkSubDirs.Checked; gSyncDirsAsymmetric := chkAsymmetric.Checked and gSyncDirsAsymmetricSave; gSyncDirsIgnoreDate := chkIgnoreDate.Checked; gSyncDirsShowFilterCopyRight := sbCopyRight.Down; gSyncDirsShowFilterEqual := sbEqual.Down; gSyncDirsShowFilterNotEqual := sbNotEqual.Down; gSyncDirsShowFilterUnknown := sbUnknown.Down; gSyncDirsShowFilterCopyLeft := sbCopyLeft.Down; gSyncDirsShowFilterDuplicates := sbDuplicates.Down; gSyncDirsShowFilterSingles := sbSingles.Down; if gSyncDirsFileMaskSave = True then begin if not IsMaskSearchTemplate(cbExtFilter.Text) then gSyncDirsFileMask := cbExtFilter.Text; end; if chkByContent.Enabled then gSyncDirsByContent := chkByContent.Checked; glsMaskHistory.Assign(cbExtFilter.Items); with HeaderDG.Columns do begin for Index := 0 to Count - 1 do FIniPropStorage.StoredValue[Format(GRID_COLUMN_FMT, [Index])]:= IntToStr(Items[Index].Width); end; end; procedure TfrmSyncDirsDlg.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if Assigned(FOperation) then begin FOperation.Stop; CanClose := False; end else if FScanning then begin FCancel := True; CanClose := False; end else if FComparing then begin CanClose := False; StopCheckContentThread; end; end; procedure TfrmSyncDirsDlg.FormCreate(Sender: TObject); var Index: Integer; HMSync: THMForm; begin // Initialize property storage FIniPropStorage := InitPropStorage(Self); FIniPropStorage.OnRestoreProperties:= @RestoreProperties; for Index := 0 to HeaderDG.Columns.Count - 1 do begin FIniPropStorage.StoredValues.Add.DisplayName:= Format(GRID_COLUMN_FMT, [Index]); end; {$IFDEF LCLCOCOA} pnlProgress.Color:=clBtnHighlight; {$ENDIF} lblProgress.Caption := rsOperCopying; lblProgressDelete.Caption := rsOperDeleting; { settings } chkSubDirs.Checked := gSyncDirsSubdirs; chkAsymmetric.Checked := gSyncDirsAsymmetric; chkByContent.Checked := gSyncDirsByContent and chkByContent.Enabled; chkIgnoreDate.Checked := gSyncDirsIgnoreDate; sbCopyRight.Down := gSyncDirsShowFilterCopyRight; sbEqual.Down := gSyncDirsShowFilterEqual; sbNotEqual.Down := gSyncDirsShowFilterNotEqual; sbUnknown.Down := gSyncDirsShowFilterUnknown; sbCopyLeft.Down := gSyncDirsShowFilterCopyLeft; sbDuplicates.Down := gSyncDirsShowFilterDuplicates; sbSingles.Down := gSyncDirsShowFilterSingles; if gSyncDirsFileMaskSave = False then begin Index := glsMaskHistory.IndexOf(gSyncDirsFileMask); if Index <> -1 then glsMaskHistory.Move(Index, 0) else glsMaskHistory.Insert(0, gSyncDirsFileMask); end; cbExtFilter.Items.Assign(glsMaskHistory); cbExtFilter.Text := gSyncDirsFileMask; HMSync := HotMan.Register(Self, HotkeysCategory); HMSync.RegisterActionList(ActionList); FCommands := TFormCommands.Create(Self, ActionList); end; procedure TfrmSyncDirsDlg.FormResize(Sender: TObject); begin ProgressBar.Width:= ClientWidth div 3; ProgressBarDelete.Width:= ProgressBar.Width; end; procedure TfrmSyncDirsDlg.MainDrawGridDblClick(Sender: TObject); var r, x: Integer; sr: TFileSyncRec; begin r := MainDrawGrid.Row; if (r < 0) or (r >= FVisibleItems.Count) then Exit; x := MainDrawGrid.ScreenToClient(Mouse.CursorPos).X; if (x > hCols[3].Left) and (x < hCols[3].Left + hCols[3].Width) then Exit; sr := TFileSyncRec(FVisibleItems.Objects[r]); if not Assigned(sr) or not Assigned(sr.FFileR) or not Assigned(sr.FFileL) or (sr.FState = srsEqual) then Exit; PrepareToolData(FFileSourceL, sr.FFileL, FFileSourceR, sr.FFileR, @ShowDifferByGlobList); end; procedure TfrmSyncDirsDlg.MainDrawGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var r: TFileSyncRec; x: Integer; s: string; begin if (FVisibleItems = nil) or (aRow >= FVisibleItems.Count) then Exit; with MainDrawGrid.Canvas do begin r := TFileSyncRec(FVisibleItems.Objects[aRow]); if r = nil then begin Brush.Color := clBtnFace; FillRect(aRect); Font.Bold := True; Font.Color := clWindowText; with hCols[0] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, FVisibleItems[aRow]); end else begin with gColors.SyncDirs^ do begin case r.FState of srsNotEq: Font.Color := UnknownColor; srsCopyLeft: Font.Color := RightColor; srsCopyRight: Font.Color := LeftColor; srsDeleteLeft: Font.Color := LeftColor; srsDeleteRight: Font.Color := RightColor; else Font.Color := clWindowText; end; end; if Assigned(r.FFileL) then begin with hCols[0] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, FVisibleItems[aRow]); s := IntToStrTS(r.FFileL.Size); with hCols[1] do begin x := Left + Width - 8 - TextWidth(s); TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), x, aRect.Top + 2, s); end; s := FormatDateTime(gDateTimeFormatSync, r.FFileL.ModificationTime); with hCols[2] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, s) end; if Assigned(r.FFileR) then begin TextOut(hCols[6].Left + 2, aRect.Top + 2, FVisibleItems[aRow]); s := IntToStrTS(r.FFileR.Size); with hCols[5] do begin x := Left + Width - 8 - TextWidth(s); TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), x, aRect.Top + 2, s); end; s := FormatDateTime(gDateTimeFormatSync, r.FFileR.ModificationTime); with hCols[4] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, s) end; ImageList1.Draw(MainDrawGrid.Canvas, hCols[3].Left + (hCols[3].Width - ImageList1.Width) div 2 - 2, (aRect.Top + aRect.Bottom - ImageList1.Height - 1) div 2, Ord(r.FAction)); end; end; end; procedure TfrmSyncDirsDlg.MainDrawGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ASelection: TGridRect; begin case Key of VK_SPACE: UpdateSelection(MainDrawGrid.Row); VK_A: begin if (Shift = [ssModifier]) then begin ASelection.Top:= 0; ASelection.Left:= 0; ASelection.Right:= MainDrawGrid.ColCount - 1; ASelection.Bottom:= MainDrawGrid.RowCount - 1; MainDrawGrid.Selection:= ASelection; end; end; VK_C: if (Shift = [ssModifier]) then begin CopyToClipboard; end; VK_INSERT: if (Shift = [ssModifier]) then begin CopyToClipboard; end; end; end; procedure TfrmSyncDirsDlg.MainDrawGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var c, r: Integer; begin MainDrawGrid.MouseToCell(X, Y, c, r); if (r < 0) or (r >= FVisibleItems.Count) or (x - 2 < hCols[3].Left) or (x - 2 > hCols[3].Left + hCols[3].Width) then Exit; UpdateSelection(R); end; procedure TfrmSyncDirsDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key := 0; if FScanning then FCancel := True else if FComparing then StopCheckContentThread else Close; end; end; procedure TfrmSyncDirsDlg.HeaderDGHeaderClick(Sender: TObject; IsColumn: Boolean; Index: Integer); begin if (Index <> 3) and (Index <= 6) then SortIndex := Index; end; procedure TfrmSyncDirsDlg.HeaderDGHeaderSizing(sender: TObject; const IsColumn: boolean; const aIndex, aSize: Integer); begin RecalcHeaderCols; MainDrawGrid.Invalidate; end; procedure TfrmSyncDirsDlg.FilterSpeedButtonClick(Sender: TObject); begin FillFoundItemsDG end; procedure TfrmSyncDirsDlg.MenuItemViewClick(Sender: TObject); var r: Integer; f: TFile = nil; sr: TFileSyncRec; begin r := MainDrawGrid.Row; if (r < 0) or (r >= FVisibleItems.Count) then Exit; sr := TFileSyncRec(FVisibleItems.Objects[r]); if Assigned(sr) then begin if Sender = MenuItemViewLeft then f := sr.FFileL else if Sender = MenuItemViewRight then begin f := sr.FFileR; end; if Assigned(f) then ShowViewerByGlob(f.FullPath); end; end; procedure TfrmSyncDirsDlg.pmGridMenuPopup(Sender: TObject); begin miSelectDeleteLeft.Visible := not chkAsymmetric.Checked; miSelectDeleteBoth.Visible := not chkAsymmetric.Checked; end; procedure TfrmSyncDirsDlg.TimerTimer(Sender: TObject); var CopyStatistics: TFileSourceCopyOperationStatistics; DeleteStatistics: TFileSourceDeleteOperationStatistics; begin if Assigned(FOperation) then begin if (FOperation is TFileSourceCopyOperation) then begin CopyStatistics:= TFileSourceCopyOperation(FOperation).RetrieveStatistics; SetProgressBytes(ProgressBar, FCopyStatistics.DoneBytes + CopyStatistics.DoneBytes, FCopyStatistics.TotalBytes); end else if (FOperation is TFileSourceDeleteOperation) then begin DeleteStatistics:= TFileSourceDeleteOperation(FOperation).RetrieveStatistics; SetProgressFiles(ProgressBarDelete, FDeleteStatistics.DoneFiles + DeleteStatistics.DoneFiles, FDeleteStatistics.TotalFiles); end; end; end; procedure TfrmSyncDirsDlg.SetSortIndex(AValue: Integer); var s: string; begin if AValue = FSortIndex then begin s := HeaderDG.Columns[AValue].Title.Caption; UTF8Delete(s, 1, 1); FSortDesc := not FSortDesc; if FSortDesc then s := '↑' + s else s := '↓' + s; HeaderDG.Columns[AValue].Title.Caption := s; SortFoundItems; FillFoundItemsDG; end else begin if FSortIndex >= 0 then begin s := HeaderDG.Columns[FSortIndex].Title.Caption; UTF8Delete(s, 1, 1); HeaderDG.Columns[FSortIndex].Title.Caption := s; end; FSortIndex := AValue; FSortDesc := False; with HeaderDG.Columns[FSortIndex].Title do Caption := '↓' + Caption; SortFoundItems; FillFoundItemsDG; end; end; procedure TfrmSyncDirsDlg.ClearFoundItems; var i, j: Integer; begin for i := 0 to FFoundItems.Count - 1 do with TStringList(FFoundItems.Objects[i]) do begin for j := 0 to Count - 1 do Objects[j].Free; Clear; end; FFoundItems.Clear; end; procedure TfrmSyncDirsDlg.Compare; begin TopPanel.Enabled := False; try ClearFoundItems; MainDrawGrid.RowCount := 0; ScanDirs; MainDrawGrid.SetFocus; finally TopPanel.Enabled := not FComparing; end; end; procedure TfrmSyncDirsDlg.FillFoundItemsDG; procedure CalcStat; var i: Integer; r: TFileSyncRec; begin Ftotal := 0; Fequal := 0; Fnoneq := 0; FuniqueL := 0; FuniqueR := 0; for i := 0 to FVisibleItems.Count - 1 do begin r := TFileSyncRec(FVisibleItems.Objects[i]); if Assigned(r) then begin Inc(Ftotal); if Assigned(r.FFileL) and not Assigned(r.FFileR) then Inc(FuniqueL) else if Assigned(r.FFileR) and not Assigned(r.FFileL) then Inc(FuniqueR); if r.FState = srsEqual then Inc(Fequal) else if r.FState = srsNotEq then Inc(Fnoneq) else if Assigned(r.FFileL) and Assigned(r.FFileR) then Inc(Fnoneq); end; end; end; begin InitVisibleItems; MainDrawGrid.ColCount := 1; MainDrawGrid.RowCount := FVisibleItems.Count; MainDrawGrid.Invalidate; CalcStat; UpdateStatusBar; if FVisibleItems.Count > 0 then begin btnCompare.Default := False; btnSynchronize.Enabled := True; btnSynchronize.Default := True; end else begin btnCompare.Default := True; btnSynchronize.Enabled := False; btnSynchronize.Default := False; end; end; procedure TfrmSyncDirsDlg.InitVisibleItems; var i, j: Integer; AFilter: record copyLeft, copyRight, eq, neq, unkn: Boolean; dup, single: Boolean; end; r: TFileSyncRec; begin if Assigned(FVisibleItems) then FVisibleItems.Clear else begin FVisibleItems := TStringListEx.Create; FVisibleItems.CaseSensitive := FileNameCaseSensitive; end; { init filter } with AFilter do begin copyLeft := sbCopyLeft.Down; copyRight := sbCopyRight.Down; eq := sbEqual.Down; neq := sbNotEqual.Down; unkn := sbUnknown.Down; dup := sbDuplicates.Down; single := sbSingles.Down; end; for i := 0 to FFoundItems.Count - 1 do begin if FFoundItems[i] <> '' then FVisibleItems.Add(AppendPathDelim(FFoundItems[i])); with TStringList(FFoundItems.Objects[i]) do for j := 0 to Count - 1 do begin { check filter } r := TFileSyncRec(Objects[j]); if ((Assigned(r.FFileL) <> Assigned(r.FFileR)) and AFilter.single or (Assigned(r.FFileL) = Assigned(r.FFileR)) and AFilter.dup) and ((r.FState = srsCopyLeft) and AFilter.copyLeft or (r.FState = srsCopyRight) and AFilter.copyRight or (r.FState = srsDeleteLeft) and AFilter.copyRight or (r.FState = srsDeleteRight) and AFilter.copyLeft or (r.FState = srsEqual) and AFilter.eq or (r.FState = srsNotEq) and AFilter.neq or (r.FState = srsUnknown) and AFilter.unkn) then FVisibleItems.AddObject(Strings[j], Objects[j]); end; end; { remove empty dirs after filtering } for i := FVisibleItems.Count - 1 downto 0 do if (FVisibleItems.Objects[i] = nil) and ((i + 1 >= FVisibleItems.Count) or (FVisibleItems.Objects[i + 1] = nil)) then FVisibleItems.Delete(i); end; procedure TfrmSyncDirsDlg.RecalcHeaderCols; var i, l: Integer; begin l := 0; for i := 0 to 6 do with hCols[i] do begin Left := l; Width := HeaderDG.Columns[i].Width; l := l + Width; end; end; procedure TfrmSyncDirsDlg.ScanDirs; var MaskList: TMaskList; Template: TSearchTemplate; LeftFirst: Boolean = True; RightFirst: Boolean = True; BaseDirL, BaseDirR: string; ignoreDate, Subdirs, ByContent: Boolean; procedure ScanDir(dir: string); procedure ProcessOneSide(it, dirs: TStringList; var ASide: Boolean; sideLeft: Boolean); var fs: TFiles; i, j: Integer; f: TFile; r: TFileSyncRec; begin if sideLeft then fs := FFileSourceL.GetFiles(BaseDirL + dir) else begin fs := FFileSourceR.GetFiles(BaseDirR + dir); end; if chkOnlySelected.Checked and ASide then begin ASide:= False; for I:= fs.Count - 1 downto 0 do begin if FSelectedItems.IndexOf(fs[I].Name) < 0 then fs.Delete(I); end; end; try for i := 0 to fs.Count - 1 do begin f := fs.Items[i]; if f.IsDirectory or f.IsLinkToDirectory then begin if (f.NameNoExt <> '.') and (f.NameNoExt <> '..') then begin if (Template = nil) or (CheckDirectoryName(Template.FileChecks, f.Name)) then dirs.Add(f.Name); end; end else if (Template = nil) or Template.CheckFile(f) then begin if ((MaskList = nil) or MaskList.Matches(f.Name)) then begin j := it.IndexOf(f.Name); if j < 0 then r := TFileSyncRec.Create(Self, dir) else r := TFileSyncRec(it.Objects[j]); if sideLeft then begin r.FFileL := f.Clone; r.UpdateState(ignoreDate); end else begin r.FFileR := f.Clone; r.UpdateState(ignoreDate); if ByContent and (r.FState = srsEqual) and (r.FFileR.Size > 0) then begin r.FAction := srsUnknown; r.FState := srsUnknown; end; end; it.AddObject(f.Name, r); end; end; end; finally fs.Free; end; end; var i, j, tot: Integer; it: TStringList; dirsLeft, dirsRight: TStringListEx; d: string; begin i := FFoundItems.IndexOf(dir); if i < 0 then begin it := TStringListEx.Create; it.CaseSensitive := FileNameCaseSensitive; it.Sorted := True; FFoundItems.AddObject(dir, it); end else it := TStringList(FFoundItems.Objects[i]); if dir <> '' then dir := AppendPathDelim(dir); dirsLeft := TStringListEx.Create; dirsLeft.CaseSensitive := FileNameCaseSensitive; dirsLeft.Sorted := True; dirsRight := TStringListEx.Create; dirsRight.CaseSensitive := FileNameCaseSensitive; dirsRight.Sorted := True; try Application.ProcessMessages; if FCancel then Exit; ProcessOneSide(it, dirsLeft, LeftFirst, True); ProcessOneSide(it, dirsRight, RightFirst, False); SortFoundItems(it); if not Subdirs then Exit; tot := dirsLeft.Count + dirsRight.Count; for i := 0 to dirsLeft.Count - 1 do begin if dir = '' then StatusBar1.Panels[0].Text := Format(rsComparingPercent, [i * 100 div tot]); d := dirsLeft[i]; ScanDir(dir + d); if FCancel then Exit; j := dirsRight.IndexOf(d); if j >= 0 then begin dirsRight.Delete(j); Dec(tot); end end; for i := 0 to dirsRight.Count - 1 do begin if dir = '' then StatusBar1.Panels[0].Text := Format(rsComparingPercent, [(dirsLeft.Count + i) * 100 div tot]); d := dirsRight[i]; ScanDir(dir + d); if FCancel then Exit; end; finally dirsLeft.Free; dirsRight.Free; end; end; begin FScanning := True; try FCancel := False; FCmpFileSourceL := FFileSourceL; FCmpFileSourceR := FFileSourceR; BaseDirL := AppendPathDelim(edPath1.Text); if IsMaskSearchTemplate(cbExtFilter.Text) then begin MaskList := nil; Template:= gSearchTemplateList.TemplateByName[cbExtFilter.Text]; end else begin Template := nil; MaskList := TMaskList.Create(cbExtFilter.Text); end; if (FAddressL <> '') and (Copy(BaseDirL, 1, Length(FAddressL)) = FAddressL) then Delete(BaseDirL, 1, Length(FAddressL)); BaseDirR := AppendPathDelim(edPath2.Text); if (FAddressR <> '') and (Copy(BaseDirR, 1, Length(FAddressR)) = FAddressR) then Delete(BaseDirR, 1, Length(FAddressR)); FCmpFilePathL := BaseDirL; FCmpFilePathR := BaseDirR; ignoreDate := chkIgnoreDate.Checked; Subdirs := chkSubDirs.Checked; ByContent := chkByContent.Checked; if chkAsymmetric.Checked then FFileExists:= srsDeleteRight else begin FFileExists:= srsCopyLeft; end; ScanDir(''); MaskList.Free; FillFoundItemsDG; if FCancel then Exit; if (FFoundItems.Count > 0) and chkByContent.Checked then begin CheckContentThread := TCheckContentThread.Create(Self); FComparing := True; end; finally FScanning := False; end; end; procedure TfrmSyncDirsDlg.SortFoundItems; var i: Integer; begin if FSortIndex < 0 then Exit; for i := 0 to FFoundItems.Count - 1 do SortFoundItems(TStringList(FFoundItems.Objects[i])); end; procedure TfrmSyncDirsDlg.SortFoundItems(sl: TStringList); function CompareFn(sl: TStringList; i, j: Integer): Integer; var r1, r2: TFileSyncRec; begin if FSortIndex in [1..5] then begin r1 := TFileSyncRec(sl.Objects[i]); r2 := TFileSyncRec(sl.Objects[j]); end; case FSortIndex of 0: Result := UTF8CompareStr(sl[i], sl[j]); 1: if (Assigned(r1.FFileL) < Assigned(r2.FFileL)) or Assigned(r2.FFileL) and (r1.FFileL.Size < r2.FFileL.Size) then Result := -1 else if (Assigned(r1.FFileL) > Assigned(r2.FFileL)) or Assigned(r1.FFileL) and (r1.FFileL.Size > r2.FFileL.Size) then Result := 1 else Result := 0; 2: if (Assigned(r1.FFileL) < Assigned(r2.FFileL)) or Assigned(r2.FFileL) and (r1.FFileL.ModificationTime < r2.FFileL.ModificationTime) then Result := -1 else if (Assigned(r1.FFileL) > Assigned(r2.FFileL)) or Assigned(r1.FFileL) and (r1.FFileL.ModificationTime > r2.FFileL.ModificationTime) then Result := 1 else Result := 0; 4: if (Assigned(r1.FFileR) < Assigned(r2.FFileR)) or Assigned(r2.FFileR) and (r1.FFileR.ModificationTime < r2.FFileR.ModificationTime) then Result := -1 else if (Assigned(r1.FFileR) > Assigned(r2.FFileR)) or Assigned(r1.FFileR) and (r1.FFileR.ModificationTime > r2.FFileR.ModificationTime) then Result := 1 else Result := 0; 5: if (Assigned(r1.FFileR) < Assigned(r2.FFileR)) or Assigned(r2.FFileR) and (r1.FFileR.Size < r2.FFileR.Size) then Result := -1 else if (Assigned(r1.FFileR) > Assigned(r2.FFileR)) or Assigned(r1.FFileR) and (r1.FFileR.Size > r2.FFileR.Size) then Result := 1 else Result := 0; 6: Result := UTF8CompareStr(sl[i], sl[j]); end; if FSortDesc then Result := -Result; end; procedure QuickSort(L, R: Integer; sl: TStringList); var Pivot, vL, vR: Integer; begin if R - L <= 1 then begin // a little bit of time saver if L < R then if CompareFn(sl, L, R) > 0 then sl.Exchange(L, R); Exit; end; vL := L; vR := R; Pivot := L + Random(R - L); // they say random is best while vL < vR do begin while (vL < Pivot) and (CompareFn(sl, vL, Pivot) <= 0) do Inc(vL); while (vR > Pivot) and (CompareFn(sl, vR, Pivot) > 0) do Dec(vR); sl.Exchange(vL, vR); if Pivot = vL then // swap pivot if we just hit it from one side Pivot := vR else if Pivot = vR then Pivot := vL; end; if Pivot - 1 >= L then QuickSort(L, Pivot - 1, sl); if Pivot + 1 <= R then QuickSort(Pivot + 1, R, sl); end; begin QuickSort(0, sl.Count - 1, sl); end; procedure TfrmSyncDirsDlg.UpdateStatusBar; var s: string; begin s := Format(rsFilesFound, [Ftotal, Fequal, Fnoneq, FuniqueL, FuniqueR]); if Assigned(CheckContentThread) and not TCheckContentThread(CheckContentThread).Done then s := s + ' ...'; StatusBar1.Panels[0].Text := s; end; procedure TfrmSyncDirsDlg.StopCheckContentThread; begin if Assigned(CheckContentThread) then begin with TCheckContentThread(CheckContentThread) do begin Terminate; WaitFor; end; FreeAndNil(CheckContentThread); end; end; procedure TfrmSyncDirsDlg.UpdateSelection(R: Integer); var sr: TFileSyncRec; ca: TSyncRecState; begin sr := TFileSyncRec(FVisibleItems.Objects[r]); if not Assigned(sr) or (sr.FState = srsEqual) then Exit; ca := sr.FAction; case ca of srsNotEq: ca := srsCopyRight; srsCopyRight: if Assigned(sr.FFileR) then ca := srsCopyLeft else ca := srsDoNothing; srsCopyLeft: if Assigned(sr.FFileL) then ca := srsNotEq else ca := srsDoNothing; srsDeleteRight: if not chkAsymmetric.Checked then ca := sr.FState else ca := srsDoNothing; srsDeleteLeft: ca := sr.FState; srsDeleteBoth: ca := sr.FState; srsDoNothing: if Assigned(sr.FFileL) then ca := srsCopyRight else ca := FFileExists; end; sr.FAction := ca; MainDrawGrid.InvalidateRow(r); end; procedure TfrmSyncDirsDlg.EnableControls(AEnabled: Boolean); begin edPath1.Enabled:= AEnabled; edPath2.Enabled:= AEnabled; TopPanel.Enabled:= AEnabled; HeaderDG.Enabled:= AEnabled; pnlFilter.Enabled:= AEnabled; MainDrawGrid.Enabled:= AEnabled; pnlProgress.Visible:= not AEnabled; Timer.Enabled:= not AEnabled; end; procedure TfrmSyncDirsDlg.SetSyncRecState(AState: TSyncRecState); var R, Y: Integer; Selection: TGridRect; SyncRec: TFileSyncRec; procedure UpdateAction(NewAction: TSyncRecState); begin case NewAction of srsUnknown: NewAction:= SyncRec.FState; srsNotEq: begin if (SyncRec.FAction = srsCopyLeft) and Assigned(SyncRec.FFileL) then NewAction:= srsCopyRight else if (SyncRec.FAction = srsCopyRight) and Assigned(SyncRec.FFileR) then NewAction:= srsCopyLeft else NewAction:= SyncRec.FAction end; srsCopyLeft: begin if not Assigned(SyncRec.FFileR) then NewAction:= srsDoNothing; end; srsCopyRight: begin if not Assigned(SyncRec.FFileL) then NewAction:= srsDoNothing; end; srsDeleteLeft: begin if not Assigned(SyncRec.FFileL) then NewAction:= srsDoNothing; end; srsDeleteRight: begin if not Assigned(SyncRec.FFileR) then NewAction:= srsDoNothing; end; srsDeleteBoth: begin if not Assigned(SyncRec.FFileL) then NewAction:= srsDeleteRight; if not Assigned(SyncRec.FFileR) then NewAction:= srsDeleteLeft; end; end; SyncRec.FAction:= NewAction; MainDrawGrid.InvalidateRow(R); end; begin Selection:= MainDrawGrid.Selection; if (MainDrawGrid.HasMultiSelection) or (Selection.Bottom <> Selection.Top) then begin for Y:= 0 to MainDrawGrid.SelectedRangeCount - 1 do begin Selection:= MainDrawGrid.SelectedRange[Y]; for R := Selection.Top to Selection.Bottom do begin SyncRec := TFileSyncRec(FVisibleItems.Objects[R]); if Assigned(SyncRec) then UpdateAction(AState); end; end; Exit; end; R := MainDrawGrid.Row; if (R < 0) or (R >= FVisibleItems.Count) then Exit; SyncRec := TFileSyncRec(FVisibleItems.Objects[r]); if Assigned(SyncRec) then begin UpdateAction(AState); end else begin Inc(R); while R < FVisibleItems.Count do begin SyncRec := TFileSyncRec(FVisibleItems.Objects[R]); if (SyncRec = nil) then Break; UpdateAction(AState); Inc(R); end; end; end; procedure TfrmSyncDirsDlg.DeleteFiles(ALeft, ARight: Boolean); var Message: String; ALeftList: TFiles; ARightList: TFiles; begin if not ALeft then ALeftList:= nil else begin ALeftList:= TFiles.Create(EmptyStr); end; if not ARight then ARightList:= nil else begin ARightList:= TFiles.Create(EmptyStr); end; try Message:= EmptyStr; UpdateList(ALeftList, ARightList, False, False); ALeft:= ALeft and (ALeftList.Count > 0); ARight:= ARight and (ARightList.Count > 0); if (ALeft = False) and (ARight = False) then Exit; FDeleteStatistics.DoneFiles:= 0; FDeleteStatistics.TotalFiles:= 0; if ALeft then begin FDeleteStatistics.TotalFiles+= ALeftList.Count; Message:= Format(rsVarLeftPanel + ': ' + rsMsgDelFlDr, [ALeftList.Count]) + LineEnding; end; if ARight then begin FDeleteStatistics.TotalFiles+= ARightList.Count; Message+= Format(rsVarRightPanel + ': ' + rsMsgDelFlDr, [ARightList.Count]) + LineEnding; end; if MessageDlg(Message, mtWarning, [mbYes, mbNo], 0, mbYes) = mrYes then begin EnableControls(False); pnlCopyProgress.Visible:= False; pnlDeleteProgress.Visible:= True; if ALeft then DeleteFiles(FCmpFileSourceL, ALeftList); if ARight then DeleteFiles(FCmpFileSourceR, ARightList); UpdateList(nil, nil, ALeft, ARight); EnableControls(True); end; finally ALeftList.Free; ARightList.Free; end; end; function TfrmSyncDirsDlg.DeleteFiles(FileSource: IFileSource; var Files: TFiles): Boolean; begin Files.Path := Files[0].Path; FOperation:= FileSource.CreateDeleteOperation(Files); if not Assigned(FOperation) then begin MessageDlg(rsMsgErrNotSupported, mtError, [mbOK], 0); Exit(False); end; if (FOperation is TFileSystemDeleteOperation) then begin TFileSystemDeleteOperation(FOperation).Recycle:= gUseTrash; end; FOperation.Elevate:= ElevateAction; FOperation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try FOperation.Execute; Result := FOperation.Result = fsorFinished; FDeleteStatistics.DoneFiles+= TFileSourceDeleteOperation(FOperation).RetrieveStatistics.TotalFiles; SetProgressFiles(ProgressBarDelete, FDeleteStatistics.DoneFiles, FDeleteStatistics.TotalFiles); finally FreeAndNil(FOperation); end; end; procedure TfrmSyncDirsDlg.UpdateList(ALeft, ARight: TFiles; ARemoveLeft, ARemoveRight: Boolean); var R, Y: Integer; ARemove: Boolean; Selection: TGridRect; SyncRec: TFileSyncRec; procedure AddRemoveItem; begin if Assigned(ALeft) and Assigned(SyncRec.FFileL) then ALeft.Add(SyncRec.FFileL.Clone); if Assigned(ARight) and Assigned(SyncRec.FFileR) then ARight.Add(SyncRec.FFileR.Clone); if ARemove then begin if ARemoveLeft and Assigned(SyncRec.FFileL) then FreeAndNil(SyncRec.FFileL); if ARemoveRight and Assigned(SyncRec.FFileR) then FreeAndNil(SyncRec.FFileR); if Assigned(SyncRec.FFileL) or Assigned(SyncRec.FFileR) then SyncRec.UpdateState(chkIgnoreDate.Checked) else begin MainDrawGrid.DeleteRow(R); FVisibleItems.Delete(R); end; end; end; begin Selection:= MainDrawGrid.Selection; ARemove:= ARemoveLeft or ARemoveRight; if (MainDrawGrid.HasMultiSelection) or (Selection.Bottom <> Selection.Top) then begin if ARemove then MainDrawGrid.BeginUpdate; for Y:= 0 to MainDrawGrid.SelectedRangeCount - 1 do begin Selection:= MainDrawGrid.SelectedRange[Y]; for R := Selection.Bottom downto Selection.Top do begin SyncRec := TFileSyncRec(FVisibleItems.Objects[R]); if Assigned(SyncRec) then AddRemoveItem; end; end; if ARemove then MainDrawGrid.EndUpdate; Exit; end; R := MainDrawGrid.Row; if (R < 0) or (R >= FVisibleItems.Count) then Exit; SyncRec := TFileSyncRec(FVisibleItems.Objects[r]); if ARemove then MainDrawGrid.BeginUpdate; if Assigned(SyncRec) then begin AddRemoveItem; end else begin Y:= R; Inc(R); while R < FVisibleItems.Count do begin if (FVisibleItems.Objects[R] = nil) then Break; Inc(R); end; Dec(R); while R > Y do begin SyncRec := TFileSyncRec(FVisibleItems.Objects[R]); AddRemoveItem; Dec(R); end; end; if ARemove then MainDrawGrid.EndUpdate; end; procedure TfrmSyncDirsDlg.SetProgressBytes(AProgressBar: TKASProgressBar; CurrentBytes: Int64; TotalBytes: Int64); var BarText : String; CaptionText : String; begin BarText := cnvFormatFileSize(CurrentBytes, uoscOperation) + '/' + cnvFormatFileSize(TotalBytes, uoscOperation); AProgressBar.SetProgress(CurrentBytes, TotalBytes, BarText ); {$IFDEF LCLCOCOA} if TotalBytes > 0 then CaptionText := rsOperCopying + ': ' + BarText + ' (' + FloatToStrF((CurrentBytes / TotalBytes) * 100, ffFixed, 0, 0) + '%)' else CaptionText := rsOperCopying; lblProgress.Caption := CaptionText; {$ENDIF} end; procedure TfrmSyncDirsDlg.SetProgressFiles(AProgressBar: TKASProgressBar; CurrentFiles: Int64; TotalFiles: Int64); var BarText : String; CaptionText : String; begin BarText := IntToStrTS(CurrentFiles) + '/' + IntToStrTS(TotalFiles); AProgressBar.SetProgress(CurrentFiles, TotalFiles, BarText ); {$IFDEF LCLCOCOA} if TotalFiles > 0 then CaptionText := rsOperDeleting + ': ' + BarText + ' (' + FloatToStrF((CurrentFiles / TotalFiles) * 100, ffFixed, 0, 0) + '%)' else CaptionText := rsOperDeleting; lblProgressDelete.Caption := CaptionText; {$ENDIF} end; procedure TfrmSyncDirsDlg.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin inherited DoAutoAdjustLayout(AMode, AXProportion, AYProportion); RecalcHeaderCols; end; constructor TfrmSyncDirsDlg.Create(AOwner: TComponent; FileView1, FileView2: TFileView); var Index: Integer; AFiles: TFiles; begin inherited Create(AOwner); FFoundItems := TStringListEx.Create; FFoundItems.CaseSensitive := FileNameCaseSensitive; FFoundItems.Sorted := True; FFileSourceL := FileView1.FileSource; FFileSourceR := FileView2.FileSource; FAddressL := FileView1.CurrentAddress; FAddressR := FileView2.CurrentAddress; with FileView1 do edPath1.Text := FAddressL + CurrentPath; with FileView2 do edPath2.Text := FAddressR + CurrentPath; RecalcHeaderCols; MainDrawGrid.DoubleBuffered := True; MainDrawGrid.Font.Bold := True; FSortIndex := -1; SortIndex := 0; FScanning := False; FSortDesc := False; MainDrawGrid.RowCount := 0; // --------------------------------------------------------------------------- FSelectedItems := TStringListEx.Create; FSelectedItems.Sorted := True; FSelectedItems.Duplicates := dupIgnore; FSelectedItems.CaseSensitive := FileNameCaseSensitive; // Get selected items from active panel AFiles := FileView1.CloneSelectedFiles; for Index := 0 to AFiles.Count - 1 do begin FSelectedItems.Add(AFiles[Index].Name); end; AFiles.Free; // Get selected items from passive panel AFiles := FileView2.CloneSelectedFiles; for Index := 0 to AFiles.Count - 1 do begin FSelectedItems.Add(AFiles[Index].Name); end; AFiles.Free; // --------------------------------------------------------------------------- chkOnlySelected.Enabled := (FSelectedItems.Count > 0) and (FileView1.FlatView = False) and (FileView2.FlatView = False); chkOnlySelected.Checked := chkOnlySelected.Enabled; // --------------------------------------------------------------------------- chkByContent.Enabled := FFileSourceL.IsClass(TFileSystemFileSource) and FFileSourceR.IsClass(TFileSystemFileSource); chkAsymmetric.Enabled := fsoDelete in FileView2.FileSource.GetOperationsTypes; // --------------------------------------------------------------------------- actDeleteLeft.Enabled := fsoDelete in FileView1.FileSource.GetOperationsTypes; actDeleteRight.Enabled := fsoDelete in FileView2.FileSource.GetOperationsTypes; actDeleteBoth.Enabled := actDeleteLeft.Enabled and actDeleteRight.Enabled; // --------------------------------------------------------------------------- FFileSourceOperationMessageBoxesUI := TFileSourceOperationMessageBoxesUI.Create; if (FFileSourceL.IsClass(TFileSystemFileSource)) and (FFileSourceR.IsClass(TFileSystemFileSource)) then begin FNtfsShift := gNtfsHourTimeDelay and NtfsHourTimeDelay(FileView1.CurrentPath, FileView2.CurrentPath); end; end; destructor TfrmSyncDirsDlg.Destroy; begin HotMan.UnRegister(Self); FFileSourceOperationMessageBoxesUI.Free; FVisibleItems.Free; FSelectedItems.Free; if Assigned(FFoundItems) then begin ClearFoundItems; FFoundItems.Free; end; inherited Destroy; end; procedure TfrmSyncDirsDlg.CopyToClipboard; var sl: TStringList; RowList: TIntegerList; I: Integer; procedure FillRowList(RowList: TIntegerList); var R, Y: Integer; Selection: TGridRect; begin Selection := MainDrawGrid.Selection; if (MainDrawGrid.HasMultiSelection) or (Selection.Bottom <> Selection.Top) then begin for Y:= 0 to MainDrawGrid.SelectedRangeCount - 1 do begin Selection:= MainDrawGrid.SelectedRange[Y]; for R := Selection.Top to Selection.Bottom do begin if RowList.IndexOf(R) = -1 then begin RowList.Add(R); end; end; end; end else begin R := MainDrawGrid.Row; if RowList.IndexOf(R) = -1 then begin RowList.Add(R); end; end; RowList.Sort; end; procedure PrintRow(R: Integer); var s: string; SyncRec: TFileSyncRec; begin s := ''; SyncRec := TFileSyncRec(FVisibleItems.Objects[R]); if not Assigned(SyncRec) then begin s := s + FVisibleItems[R]; end else begin if Assigned(SyncRec.FFileL) then begin s := s + FVisibleItems[R]; s := s + #9; s := s + IntToStrTS(SyncRec.FFileL.Size); s := s + #9; s := s + FormatDateTime(gDateTimeFormatSync, SyncRec.FFileL.ModificationTime); end; if Length(s) <> 0 then s := s + #9; case SyncRec.FState of srsUnknown: s := s + '?'; srsEqual: s := s + '='; srsNotEq: s := s + '!='; srsCopyLeft: s := s + '<-'; srsCopyRight: s := s + '->'; end; if Length(s) <> 0 then s := s + #9; if Assigned(SyncRec.FFileR) then begin s := s + FormatDateTime(gDateTimeFormatSync, SyncRec.FFileR.ModificationTime); s := s + #9; s := s + IntToStrTS(SyncRec.FFileR.Size); s := s + #9; s := s + FVisibleItems[R]; end; end; sl.Add(s); end; begin sl := TStringList.Create; RowList := TIntegerList.Create; try FillRowList(RowList); for I := 0 to RowList.Count - 1 do begin PrintRow(RowList[I]); end; ClipboardSetText(sl.Text); finally FreeAndNil(sl); FreeAndNil(RowList); end; end; procedure TfrmSyncDirsDlg.cm_SelectClear(const Params: array of string); begin SetSyncRecState(srsDoNothing); end; procedure TfrmSyncDirsDlg.cm_SelectDeleteLeft(const Params: array of string); begin SetSyncRecState(srsDeleteLeft); end; procedure TfrmSyncDirsDlg.cm_SelectDeleteRight(const Params: array of string); begin SetSyncRecState(srsDeleteRight); end; procedure TfrmSyncDirsDlg.cm_SelectDeleteBoth(const Params: array of string); begin SetSyncRecState(srsDeleteBoth); end; procedure TfrmSyncDirsDlg.cm_SelectCopyDefault(const Params: array of string); begin SetSyncRecState(srsUnknown); end; procedure TfrmSyncDirsDlg.cm_SelectCopyReverse(const Params: array of string); begin SetSyncRecState(srsNotEq); end; procedure TfrmSyncDirsDlg.cm_SelectCopyLeftToRight(const Params: array of string); begin SetSyncRecState(srsCopyRight); end; procedure TfrmSyncDirsDlg.cm_SelectCopyRightToLeft(const Params: array of string); begin SetSyncRecState(srsCopyLeft); end; procedure TfrmSyncDirsDlg.cm_DeleteLeft(const Params: array of string); begin DeleteFiles(True, False); end; procedure TfrmSyncDirsDlg.cm_DeleteRight(const Params: array of string); begin DeleteFiles(False, True); end; procedure TfrmSyncDirsDlg.cm_DeleteBoth(const Params: array of string); begin DeleteFiles(True, True); end; initialization TFormCommands.RegisterCommandsForm(TfrmSyncDirsDlg, HotkeysCategory, @rsHotkeyCategorySyncDirs); end. doublecmd-1.1.30/src/fsyncdirsdlg.lrj0000644000175000001440000001440615104114162016565 0ustar alexxusers{"version":1,"strings":[ {"hash":36754147,"name":"tfrmsyncdirsdlg.caption","sourcebytes":[83,121,110,99,104,114,111,110,105,122,101,32,100,105,114,101,99,116,111,114,105,101,115],"value":"Synchronize directories"}, {"hash":42,"name":"tfrmsyncdirsdlg.cbextfilter.text","sourcebytes":[42],"value":"*"}, {"hash":47236478,"name":"tfrmsyncdirsdlg.btnsearchtemplate.hint","sourcebytes":[84,101,109,112,108,97,116,101,46,46,46],"value":"Template..."}, {"hash":174352581,"name":"tfrmsyncdirsdlg.btncompare.caption","sourcebytes":[67,111,109,112,97,114,101],"value":"Compare"}, {"hash":242752852,"name":"tfrmsyncdirsdlg.chkonlyselected.caption","sourcebytes":[111,110,108,121,32,115,101,108,101,99,116,101,100],"value":"only selected"}, {"hash":181520105,"name":"tfrmsyncdirsdlg.label1.caption","sourcebytes":[40,105,110,32,109,97,105,110,32,119,105,110,100,111,119,41],"value":"(in main window)"}, {"hash":70923251,"name":"tfrmsyncdirsdlg.chkasymmetric.caption","sourcebytes":[97,115,121,109,109,101,116,114,105,99],"value":"asymmetric"}, {"hash":179876035,"name":"tfrmsyncdirsdlg.chksubdirs.caption","sourcebytes":[83,117,98,100,105,114,115],"value":"Subdirs"}, {"hash":174272820,"name":"tfrmsyncdirsdlg.chkbycontent.caption","sourcebytes":[98,121,32,99,111,110,116,101,110,116],"value":"by content"}, {"hash":135876037,"name":"tfrmsyncdirsdlg.chkignoredate.caption","sourcebytes":[105,103,110,111,114,101,32,100,97,116,101],"value":"ignore date"}, {"hash":5895850,"name":"tfrmsyncdirsdlg.groupbox1.caption","sourcebytes":[83,104,111,119,58],"value":"Show:"}, {"hash":62,"name":"tfrmsyncdirsdlg.sbcopyright.caption","sourcebytes":[62],"value":">"}, {"hash":61,"name":"tfrmsyncdirsdlg.sbequal.caption","sourcebytes":[61],"value":"="}, {"hash":589,"name":"tfrmsyncdirsdlg.sbnotequal.caption","sourcebytes":[33,61],"value":"!="}, {"hash":60,"name":"tfrmsyncdirsdlg.sbcopyleft.caption","sourcebytes":[60],"value":"<"}, {"hash":50280115,"name":"tfrmsyncdirsdlg.sbduplicates.caption","sourcebytes":[100,117,112,108,105,99,97,116,101,115],"value":"duplicates"}, {"hash":168092339,"name":"tfrmsyncdirsdlg.sbsingles.caption","sourcebytes":[115,105,110,103,108,101,115],"value":"singles"}, {"hash":267343253,"name":"tfrmsyncdirsdlg.btnsynchronize.caption","sourcebytes":[83,121,110,99,104,114,111,110,105,122,101],"value":"Synchronize"}, {"hash":4863637,"name":"tfrmsyncdirsdlg.btnclose.caption","sourcebytes":[67,108,111,115,101],"value":"Close"}, {"hash":197576788,"name":"tfrmsyncdirsdlg.statusbar1.panels[0].text","sourcebytes":[80,108,101,97,115,101,32,112,114,101,115,115,32,34,67,111,109,112,97,114,101,34,32,116,111,32,115,116,97,114,116],"value":"Please press \"Compare\" to start"}, {"hash":346165,"name":"tfrmsyncdirsdlg.headerdg.columns[0].title.caption","sourcebytes":[78,97,109,101],"value":"Name"}, {"hash":368901,"name":"tfrmsyncdirsdlg.headerdg.columns[1].title.caption","sourcebytes":[83,105,122,101],"value":"Size"}, {"hash":305317,"name":"tfrmsyncdirsdlg.headerdg.columns[2].title.caption","sourcebytes":[68,97,116,101],"value":"Date"}, {"hash":16398,"name":"tfrmsyncdirsdlg.headerdg.columns[3].title.caption","sourcebytes":[60,61,62],"value":"<=>"}, {"hash":305317,"name":"tfrmsyncdirsdlg.headerdg.columns[4].title.caption","sourcebytes":[68,97,116,101],"value":"Date"}, {"hash":368901,"name":"tfrmsyncdirsdlg.headerdg.columns[5].title.caption","sourcebytes":[83,105,122,101],"value":"Size"}, {"hash":346165,"name":"tfrmsyncdirsdlg.headerdg.columns[6].title.caption","sourcebytes":[78,97,109,101],"value":"Name"}, {"hash":211253028,"name":"tfrmsyncdirsdlg.menuitemviewleft.caption","sourcebytes":[86,105,101,119,32,108,101,102,116],"value":"View left"}, {"hash":159199796,"name":"tfrmsyncdirsdlg.menuitemviewright.caption","sourcebytes":[86,105,101,119,32,114,105,103,104,116],"value":"View right"}, {"hash":174352581,"name":"tfrmsyncdirsdlg.menuitemcompare.caption","sourcebytes":[67,111,109,112,97,114,101],"value":"Compare"}, {"hash":2265465,"name":"tfrmsyncdirsdlg.actselectcopylefttoright.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,99,111,112,121,105,110,103,32,45,62,32,40,108,101,102,116,32,116,111,32,114,105,103,104,116,41],"value":"Select for copying -> (left to right)"}, {"hash":71953785,"name":"tfrmsyncdirsdlg.actselectcopyrighttoleft.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,99,111,112,121,105,110,103,32,60,45,32,40,114,105,103,104,116,32,116,111,32,108,101,102,116,41],"value":"Select for copying <- (right to left)"}, {"hash":14033049,"name":"tfrmsyncdirsdlg.actselectcopydefault.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,99,111,112,121,105,110,103,32,40,100,101,102,97,117,108,116,32,100,105,114,101,99,116,105,111,110,41],"value":"Select for copying (default direction)"}, {"hash":74996318,"name":"tfrmsyncdirsdlg.actselectclear.caption","sourcebytes":[82,101,109,111,118,101,32,115,101,108,101,99,116,105,111,110],"value":"Remove selection"}, {"hash":39665470,"name":"tfrmsyncdirsdlg.actselectcopyreverse.caption","sourcebytes":[82,101,118,101,114,115,101,32,99,111,112,121,32,100,105,114,101,99,116,105,111,110],"value":"Reverse copy direction"}, {"hash":105823177,"name":"tfrmsyncdirsdlg.actselectdeleteleft.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,100,101,108,101,116,105,110,103,32,60,45,32,40,108,101,102,116,41],"value":"Select for deleting <- (left)"}, {"hash":38619657,"name":"tfrmsyncdirsdlg.actselectdeleteright.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,100,101,108,101,116,105,110,103,32,45,62,32,40,114,105,103,104,116,41],"value":"Select for deleting -> (right)"}, {"hash":254352617,"name":"tfrmsyncdirsdlg.actselectdeleteboth.caption","sourcebytes":[83,101,108,101,99,116,32,102,111,114,32,100,101,108,101,116,105,110,103,32,60,45,62,32,40,98,111,116,104,41],"value":"Select for deleting <-> (both)"}, {"hash":87943924,"name":"tfrmsyncdirsdlg.actdeleteleft.caption","sourcebytes":[60,45,32,68,101,108,101,116,101,32,108,101,102,116],"value":"<- Delete left"}, {"hash":64282708,"name":"tfrmsyncdirsdlg.actdeleteright.caption","sourcebytes":[45,62,32,68,101,108,101,116,101,32,114,105,103,104,116],"value":"-> Delete right"}, {"hash":5492659,"name":"tfrmsyncdirsdlg.actdeleteboth.caption","sourcebytes":[68,101,108,101,116,101,32,111,110,32,98,111,116,104,32,115,105,100,101,115],"value":"Delete on both sides"} ]} doublecmd-1.1.30/src/fsyncdirsdlg.lfm0000644000175000001440000005630415104114162016557 0ustar alexxusersobject frmSyncDirsDlg: TfrmSyncDirsDlg Left = 553 Height = 445 Top = 163 Width = 763 Caption = 'Synchronize directories' ClientHeight = 445 ClientWidth = 763 KeyPreview = True OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnKeyDown = FormKeyDown OnResize = FormResize Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '2.2.0.4' object edPath1: TDirectoryEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = pnlFilter Left = 3 Height = 23 Top = 3 Width = 307 OnAcceptDirectory = edPath1AcceptDirectory ShowHidden = False ButtonWidth = 18 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 3 MaxLength = 0 ParentFont = False TabOrder = 1 end object pnlFilter: TPanel AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = Owner AnchorSideRight.Control = edPath2 Left = 313 Height = 26 Top = 0 Width = 137 AutoSize = True BevelOuter = bvNone ClientHeight = 26 ClientWidth = 137 TabOrder = 2 object cbExtFilter: TComboBox Left = 0 Height = 23 Top = 3 Width = 111 BorderSpacing.Top = 3 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( '*' ) ParentFont = False TabOrder = 0 Text = '*' end object btnSearchTemplate: TSpeedButton AnchorSideLeft.Control = cbExtFilter AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbExtFilter AnchorSideBottom.Control = cbExtFilter AnchorSideBottom.Side = asrBottom Left = 114 Height = 23 Hint = 'Template...' Top = 3 Width = 23 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 3 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000330000 0033000000330000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000214F6B83FF4966 85FF5191D9FF0000003300000000000000000000000000000000000000000000 00000000000000000000000000000000000000000021B07836B75485ABFF7EA7 B8FF8FD5FFFF356A9CFF00000033000000000000000000000000000000000000 000000000000000000000000000000000022A7753BB9D49849FF3CB4FFFFA3F1 FFFF9CE0FEFF109BFFFF306BA2FF000000330000000A00000000000000000000 0000000000000000000000000000A7763BBDE9C590FFDFAA5CFFC87F2EFF287B D2FF3FC7FFFF20ACFFFF83B1D8FF807873FF413F3D5B00000000000000000000 0000000000000000000000000000B57F3DFFFFF1D0FFDAA85BFFC28236FF0000 00002C7DCFFFB3DEF2FF938881FFC2C0BAFF797B71FF00000033000000000000 0000000000000000000000000021B37C3AFFFFFFFAFFD6A559FFBA803BFF0000 0020000000008E8780FFDAD7D3FF8A8C84FFA27F9BFF9969CCFF000000000000 00000000000000000021AA7A3EB6DEAF68FFF3CB8AFFEEC684FFD8AA65FFAC79 3AB50000002100000000858884FFE3B3E3FFCB96C7FFAE7DCEFF000000000000 000000000021A9783CB9EDC385FFF9D292FFF3CD8BFFEDC380FFE8BE7CFFDDB3 74FFAA783BB70000002100000000C28BDCFFBF8AD4FF00000000000000000000 0021A77639B9EFCA96FFF8D59CFFF6CF8DFFEEC684FFE7BB77FFE0B26BFFE1BB 80FFDBB57FFFA87637B70000002100000000000000000000000000000022BB8D 4DB9F0D3ABFFFADFB1FFF5CC88FFEEC480FFE8BC76FFE1B36CFFDBAA61FFD4A1 55FFE0BC89FFDCBD8FFFAA7831B8000000220000000000000000A67437BDFFED CAFFFFF1D8FFFBE4BCFFFFF1D9FFFEF4E4FFF6E7CCFFF5E4CAFFF6E9D6FFEFDD C1FFE3C597FFECDABDFFE4CCA6FFA77636BD0000000000000000B57E3AFFFFFA E8FFF5E3C5FFE3C798FFD8B070FFD19E50FFD8A14DFFDCA553FFD19D4AFFD2A7 63FFD5AF74FFDDC194FFE9D2B3FFB7813DFF0000000000000000B57E3AFFFFFF FFFFA16100FFB17616FFBF852BFFCB933DFFD9A24FFFDDA755FFCF9A43FFC48B 32FFB87E1FFFAA6C08FFF7EDE0FFB7813EFF0000000000000000B67F3DFFFFF9 E2FFEBC992FFF3DBB5FFF5E2C0FFF5E1C0FFF6E2BFFFF5DFBDFFEFD9B5FFECD3 AFFFE4C9A0FFD4AD73FFE4C9A1FFB88241FF0000000000000000B8834238D19E 58A9C99753E0C69351FFC69453FFC5914FFFC6975EFFC49356FFBF8B48FFBF8A 46FFBD8946FFBE8844E0BD873FA9BA8545380000000000000000 } OnClick = btnSearchTemplateClick end end object edPath2: TDirectoryEdit AnchorSideLeft.Control = pnlFilter AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 453 Height = 23 Top = 3 Width = 307 OnAcceptDirectory = edPath1AcceptDirectory ShowHidden = False ButtonWidth = 18 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 3 MaxLength = 0 ParentFont = False TabOrder = 3 end object TopPanel: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edPath1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 78 Top = 29 Width = 763 Anchors = [akTop, akLeft, akRight] AutoSize = True ClientHeight = 78 ClientWidth = 763 ParentFont = False TabOrder = 0 object LeftPanel1: TPanel AnchorSideLeft.Control = TopPanel AnchorSideTop.Control = TopPanel Left = 1 Height = 68 Top = 1 Width = 95 AutoSize = True BevelOuter = bvNone ClientHeight = 68 ClientWidth = 95 ParentFont = False TabOrder = 0 object btnCompare: TButton AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = LeftPanel1 Left = 3 Height = 25 Top = 3 Width = 75 AutoSize = True BorderSpacing.Around = 3 Caption = 'Compare' Default = True OnClick = btnCompareClick ParentFont = False TabOrder = 0 end object chkOnlySelected: TCheckBox AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = btnCompare AnchorSideTop.Side = asrBottom Left = 3 Height = 19 Top = 31 Width = 89 BorderSpacing.Around = 3 Caption = 'only selected' Enabled = False ParentFont = False TabOrder = 1 end object Label1: TLabel AnchorSideLeft.Control = chkOnlySelected AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = chkOnlySelected AnchorSideTop.Side = asrBottom Left = 1 Height = 15 Top = 53 Width = 93 Caption = '(in main window)' Enabled = False ParentFont = False end end object LeftPanel2: TPanel AnchorSideLeft.Control = LeftPanel1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 101 Height = 76 Top = 1 Width = 82 AutoSize = True BorderSpacing.Left = 5 BevelOuter = bvNone ClientHeight = 76 ClientWidth = 82 ParentFont = False TabOrder = 1 object chkAsymmetric: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = LeftPanel2 Left = 0 Height = 19 Top = 0 Width = 82 Caption = 'asymmetric' Enabled = False ParentFont = False TabOrder = 0 end object chkSubDirs: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkAsymmetric AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 19 Width = 59 Caption = 'Subdirs' ParentFont = False TabOrder = 1 end object chkByContent: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkSubDirs AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 38 Width = 77 Caption = 'by content' ParentFont = False TabOrder = 2 end object chkIgnoreDate: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkByContent AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 57 Width = 80 Caption = 'ignore date' ParentFont = False TabOrder = 3 end end object GroupBox1: TGroupBox AnchorSideLeft.Control = LeftPanel2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 188 Height = 65 Top = 1 Width = 228 AutoSize = True BorderSpacing.Left = 5 Caption = 'Show:' ClientHeight = 45 ClientWidth = 198 ParentFont = False TabOrder = 2 object sbCopyRight: TSpeedButton AnchorSideLeft.Control = GroupBox1 AnchorSideTop.Control = GroupBox1 Left = 6 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '>' Down = True GroupIndex = 1 OnClick = FilterSpeedButtonClick ParentFont = False end object sbEqual: TSpeedButton AnchorSideLeft.Control = sbCopyRight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 32 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '=' Down = True GroupIndex = 2 OnClick = FilterSpeedButtonClick ParentFont = False end object sbNotEqual: TSpeedButton AnchorSideLeft.Control = sbEqual AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 58 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '!=' Down = True GroupIndex = 3 OnClick = FilterSpeedButtonClick ParentFont = False end object sbUnknown: TSpeedButton AnchorSideLeft.Control = sbNotEqual AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 84 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '?' Down = True GroupIndex = 4 OnClick = FilterSpeedButtonClick ParentFont = False end object sbCopyLeft: TSpeedButton AnchorSideLeft.Control = sbUnknown AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 110 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '<' Down = True GroupIndex = 5 OnClick = FilterSpeedButtonClick ParentFont = False end object sbDuplicates: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = GroupBox1 Left = 138 Height = 18 Top = 0 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Right = 6 Caption = 'duplicates' Down = True GroupIndex = 6 OnClick = FilterSpeedButtonClick ParentFont = False end object sbSingles: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbDuplicates AnchorSideTop.Side = asrBottom Left = 138 Height = 18 Top = 21 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Top = 3 BorderSpacing.Bottom = 6 Caption = 'singles' Down = True GroupIndex = 7 OnClick = FilterSpeedButtonClick ParentFont = False end end object btnSynchronize: TButton AnchorSideTop.Control = TopPanel AnchorSideRight.Control = TopPanel AnchorSideRight.Side = asrBottom Left = 666 Height = 25 Top = 7 Width = 90 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Synchronize' Enabled = False OnClick = btnSynchronizeClick ParentFont = False TabOrder = 3 end object btnClose: TButton AnchorSideLeft.Control = btnSynchronize AnchorSideTop.Control = btnSynchronize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSynchronize AnchorSideRight.Side = asrBottom Left = 666 Height = 25 Top = 38 Width = 90 Anchors = [akTop, akLeft, akRight] AutoSize = True Cancel = True Caption = 'Close' OnClick = btnCloseClick ParentFont = False TabOrder = 4 end end object StatusBar1: TStatusBar Left = 0 Height = 23 Top = 422 Width = 763 Panels = < item Text = 'Please press "Compare" to start' Width = 50 end> ParentFont = False SimplePanel = False end object HeaderDG: TDrawGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = TopPanel AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 20 Top = 107 Width = 763 Anchors = [akTop, akLeft, akRight] AutoFillColumns = True BorderStyle = bsNone ColCount = 7 Columns = < item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = 'Name' Width = 250 end item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = 'Size' Width = 150 end item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = 'Date' Width = 170 end item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = '<=>' Width = 30 end item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = 'Date' Width = 170 end item MinSize = 10 MaxSize = 200 SizePriority = 0 Title.Caption = 'Size' Width = 120 end item MinSize = 10 MaxSize = 200 Title.Caption = 'Name' Width = 0 end> ExtendedSelect = False FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goSmoothScroll, goHeaderPushedLook] ParentFont = False RowCount = 1 ScrollBars = ssNone TabOrder = 5 TabStop = False OnHeaderClick = HeaderDGHeaderClick OnHeaderSizing = HeaderDGHeaderSizing ColWidths = ( 250 150 170 30 170 120 0 ) end object MainDrawGrid: TDrawGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = HeaderDG AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = StatusBar1 Left = 0 Height = 295 Top = 127 Width = 763 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True ColCount = 0 ExtendedSelect = False FixedCols = 0 FixedRows = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSelect, goThumbTracking, goSmoothScroll, goHeaderPushedLook, goDontScrollPartCell, goRowHighlight] ParentFont = False PopupMenu = pmGridMenu RangeSelectMode = rsmMulti RowCount = 0 ScrollBars = ssAutoVertical TabOrder = 6 OnDblClick = MainDrawGridDblClick OnDrawCell = MainDrawGridDrawCell OnKeyDown = MainDrawGridKeyDown OnMouseDown = MainDrawGridMouseDown end object pnlProgress: TPanel AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = Owner AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 253 Height = 154 Top = 145 Width = 256 AutoSize = True ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 8 ClientHeight = 154 ClientWidth = 256 Constraints.MinWidth = 240 ParentBackground = False ParentColor = False ParentFont = False TabOrder = 7 Visible = False object pnlCopyProgress: TPanel AnchorSideLeft.Control = pnlProgress AnchorSideTop.Control = pnlProgress Left = 9 Height = 47 Top = 9 Width = 238 AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 8 ClientHeight = 47 ClientWidth = 238 TabOrder = 0 object lblProgress: TLabel AnchorSideLeft.Control = pnlCopyProgress AnchorSideTop.Control = pnlCopyProgress AnchorSideRight.Control = pnlCopyProgress AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 8 Width = 222 Alignment = taCenter Anchors = [akTop, akLeft, akRight] ParentFont = False end object ProgressBar: TKASProgressBar AnchorSideLeft.Control = pnlCopyProgress AnchorSideTop.Control = lblProgress AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlCopyProgress AnchorSideRight.Side = asrBottom Left = 8 Height = 22 Top = 17 Width = 222 Max = 222 ParentFont = False TabOrder = 0 BarShowText = True end end object pnlDeleteProgress: TPanel AnchorSideLeft.Control = pnlCopyProgress AnchorSideTop.Control = pnlCopyProgress AnchorSideTop.Side = asrBottom Left = 9 Height = 47 Top = 64 Width = 238 AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 8 ClientHeight = 47 ClientWidth = 238 TabOrder = 1 object lblProgressDelete: TLabel AnchorSideLeft.Control = pnlDeleteProgress AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlDeleteProgress AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 8 Width = 222 Alignment = taCenter Anchors = [akTop, akLeft, akRight] ParentFont = False end object ProgressBarDelete: TKASProgressBar AnchorSideLeft.Control = pnlDeleteProgress AnchorSideTop.Control = lblProgressDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlDeleteProgress AnchorSideRight.Side = asrBottom Left = 8 Height = 22 Top = 17 Width = 222 Max = 222 ParentFont = False TabOrder = 0 BarShowText = True end end object btnAbort: TBitBtn AnchorSideLeft.Control = pnlProgress AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlDeleteProgress AnchorSideTop.Side = asrBottom Left = 79 Height = 26 Top = 119 Width = 98 AutoSize = True DefaultCaption = True Kind = bkAbort ModalResult = 3 OnClick = btnAbortClick ParentFont = False TabOrder = 2 end end object ImageList1: TImageList Left = 56 Top = 152 Bitmap = { 4C7A0900000010000000100000002D0100000000000078DAED98CD0DC2300C85 B3042766415C198D0B53E5CA260C012A52A580FC13FBD5A5348E64A9B2F225B6 9BD7BAADB53E2B68A51497B5BC6748FCA15C3FCCC27F33DC1A14CFCDA5FC113C 3710DE927F2FDBC34BEC1A3C72FED68C1FB11CDB19966767049FF98F37EA4EDF FF517C298FB779F896E5F8798E66517C4FDC96FA71EC96F39762EE8D7FCDF3FB 6B1B49FF16FE7E39BBF989F5F233CB99C46BACC6A3FB2F91FF12F5FFA7F397FA DF367FBA1D619E5A83E2E7B99CA17CBB46C4FE68FE11F54FFD8FA37FEEAC79F4 23F9A4F87BB4A3E5AFB1913C123F5A3FF4FEA5FEF7AE7FADFFA5FB46AA1FD5FA 67C9E7E99F3DDF0F521F1DC523F1A3F5E3F6B2D43FF53FEEFB7FBAA496A3FC12 DFCEA57CF2FF27DA2CF96B6C248FC48FD60FBD7FA9FFFCFE4F3EF951F4FF023D 7775DA } end object pmGridMenu: TPopupMenu OnPopup = pmGridMenuPopup Left = 121 Top = 217 object miSelectCopyDefault: TMenuItem Action = actSelectCopyDefault end object miSelectClear: TMenuItem Action = actSelectClear end object miSelectCopyLeftToRight: TMenuItem Action = actSelectCopyLeftToRight end object miSelectCopyRightToLeft: TMenuItem Action = actSelectCopyRightToLeft end object miSelectCopyReverse: TMenuItem Action = actSelectCopyReverse end object miSeparator1: TMenuItem Caption = '-' end object MenuItemViewLeft: TMenuItem Caption = 'View left' ShortCut = 114 OnClick = MenuItemViewClick end object MenuItemViewRight: TMenuItem Caption = 'View right' ShortCut = 8306 OnClick = MenuItemViewClick end object MenuItemCompare: TMenuItem Caption = 'Compare' ShortCut = 16498 OnClick = MainDrawGridDblClick end object miSeparator2: TMenuItem Caption = '-' end object miSelectDeleteLeft: TMenuItem Action = actSelectDeleteLeft end object miSelectDeleteRight: TMenuItem Action = actSelectDeleteRight end object miSelectDeleteBoth: TMenuItem Action = actSelectDeleteBoth end object miSeparator3: TMenuItem Caption = '-' end object miDeleteLeft: TMenuItem Action = actDeleteLeft end object miDeleteRight: TMenuItem Action = actDeleteRight end object miDeleteBoth: TMenuItem Action = actDeleteBoth end end object ActionList: TActionList Left = 528 Top = 192 object actSelectCopyLeftToRight: TAction Caption = 'Select for copying -> (left to right)' OnExecute = actExecute end object actSelectCopyRightToLeft: TAction Caption = 'Select for copying <- (right to left)' OnExecute = actExecute end object actSelectCopyDefault: TAction Caption = 'Select for copying (default direction)' OnExecute = actExecute end object actSelectClear: TAction Caption = 'Remove selection' OnExecute = actExecute end object actSelectCopyReverse: TAction Caption = 'Reverse copy direction' OnExecute = actExecute end object actSelectDeleteLeft: TAction Caption = 'Select for deleting <- (left)' OnExecute = actExecute end object actSelectDeleteRight: TAction Caption = 'Select for deleting -> (right)' OnExecute = actExecute end object actSelectDeleteBoth: TAction Caption = 'Select for deleting <-> (both)' OnExecute = actExecute end object actDeleteLeft: TAction Caption = '<- Delete left' OnExecute = actExecute end object actDeleteRight: TAction Caption = '-> Delete right' OnExecute = actExecute end object actDeleteBoth: TAction Caption = 'Delete on both sides' OnExecute = actExecute end end object Timer: TTimer Enabled = False Interval = 200 OnTimer = TimerTimer Left = 123 Top = 297 end end doublecmd-1.1.30/src/fsymlink.pas0000644000175000001440000000513215104114162015716 0ustar alexxusersunit fSymLink; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons; type { TfrmSymLink } TfrmSymLink = class(TForm) chkUseRelativePath: TCheckBox; lblExistingFile: TLabel; lblLinkToCreate: TLabel; edtExistingFile: TEdit; edtLinkToCreate: TEdit; btnOK: TBitBtn; btnCancel: TBitBtn; procedure btnOKClick(Sender: TObject); procedure FormShow(Sender: TObject); private FCurrentPath: String; public constructor Create(TheOwner: TComponent; CurrentPath: String); reintroduce; end; function ShowSymLinkForm(TheOwner: TComponent; const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, DCStrUtils, DCOSUtils, uAdministrator; function ShowSymLinkForm(TheOwner: TComponent; const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmSymLink.Create(TheOwner, CurrentPath) do begin try edtLinkToCreate.Text := sLinkToCreate; edtExistingFile.Text := sExistingFile; Result:= (ShowModal = mrOK); finally Free; end; end; end; constructor TfrmSymLink.Create(TheOwner: TComponent; CurrentPath: String); begin inherited Create(TheOwner); FCurrentPath := CurrentPath; end; procedure TfrmSymLink.btnOKClick(Sender: TObject); var sSrc, sDst, Message: String; AElevate: TDuplicates = dupIgnore; begin sSrc:=edtExistingFile.Text; sDst:=edtLinkToCreate.Text; if CompareFilenames(sSrc, sDst) = 0 then Exit; sDst := GetAbsoluteFileName(FCurrentPath, sDst); if chkUseRelativePath.Checked then begin sSrc:= CreateRelativePath(sSrc, ExtractFileDir(sDst)); end; PushPop(AElevate); try if CreateSymbolicLinkUAC(sSrc, sDst) then begin // write log if (log_cp_mv_ln in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess+rsMsgLogSymLink,[sSrc+' -> '+sDst]), lmtSuccess); end else begin Message:= mbSysErrorMessage; // write log if (log_cp_mv_ln in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError+rsMsgLogSymLink,[sSrc+' -> '+sDst]), lmtError); // Standart error modal dialog MsgError(rsSymErrCreate + LineEnding + LineEnding + Message); end; finally PushPop(AElevate); end; end; procedure TfrmSymLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. doublecmd-1.1.30/src/fsymlink.lrj0000644000175000001440000000206415104114162015723 0ustar alexxusers{"version":1,"strings":[ {"hash":219027899,"name":"tfrmsymlink.caption","sourcebytes":[67,114,101,97,116,101,32,115,121,109,98,111,108,105,99,32,108,105,110,107],"value":"Create symbolic link"}, {"hash":37813087,"name":"tfrmsymlink.lblexistingfile.caption","sourcebytes":[38,68,101,115,116,105,110,97,116,105,111,110,32,116,104,97,116,32,116,104,101,32,108,105,110,107,32,119,105,108,108,32,112,111,105,110,116,32,116,111],"value":"&Destination that the link will point to"}, {"hash":81130805,"name":"tfrmsymlink.lbllinktocreate.caption","sourcebytes":[38,76,105,110,107,32,110,97,109,101],"value":"&Link name"}, {"hash":11067,"name":"tfrmsymlink.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmsymlink.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":131237333,"name":"tfrmsymlink.chkuserelativepath.caption","sourcebytes":[85,115,101,32,38,114,101,108,97,116,105,118,101,32,112,97,116,104,32,119,104,101,110,32,112,111,115,115,105,98,108,101],"value":"Use &relative path when possible"} ]} doublecmd-1.1.30/src/fsymlink.lfm0000644000175000001440000000576615104114162015726 0ustar alexxusersobject frmSymLink: TfrmSymLink Left = 320 Height = 177 Top = 320 Width = 512 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create symbolic link' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 177 ClientWidth = 512 KeyPreview = True OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '1.8.4.0' object lblExistingFile: TLabel AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtLinkToCreate AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 59 Width = 240 BorderSpacing.Top = 6 Caption = '&Destination that the link will point to' FocusControl = edtExistingFile ParentColor = False end object lblLinkToCreate: TLabel AnchorSideLeft.Control = edtLinkToCreate AnchorSideTop.Control = Owner Left = 6 Height = 16 Top = 6 Width = 69 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 81 Width = 500 BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 28 Width = 500 BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 0 end object chkUseRelativePath: TCheckBox AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 24 Top = 118 Width = 219 BorderSpacing.Top = 6 Caption = 'Use &relative path when possible' TabOrder = 2 end object btnOK: TBitBtn AnchorSideTop.Control = chkUseRelativePath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel Left = 390 Height = 33 Top = 148 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 3 end object btnCancel: TBitBtn AnchorSideTop.Control = chkUseRelativePath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExistingFile AnchorSideRight.Side = asrBottom Left = 496 Height = 33 Top = 148 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 4 end end doublecmd-1.1.30/src/fstartingsplash.pas0000644000175000001440000000350115104114162017274 0ustar alexxusersunit fstartingsplash; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TfrmStartingSplash } TfrmStartingSplash = class(TForm) imgLogo: TImage; lblBuild: TLabel; lblCommit: TLabel; lblFreePascalVer: TLabel; lblLazarusVer: TLabel; lblOperatingSystem: TLabel; lblPlatform: TLabel; lblRevision: TLabel; lblTitle: TLabel; lblVersion: TLabel; lblWidgetsetVer: TLabel; pnlVersionInfos: TPanel; pnlInfo: TPanel; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormHide(Sender: TObject); private { private declarations } public { public declarations } end; var frmStartingSplash: TfrmStartingSplash; implementation {$R *.lfm} uses uDCVersion; { TfrmStartingSplash } procedure TfrmStartingSplash.FormCreate(Sender: TObject); begin lblVersion.Caption := lblVersion.Caption + #32 + dcVersion; lblRevision.Caption := lblRevision.Caption + #32 + dcRevision; lblCommit.Caption := lblCommit.Caption + #32 + dcCommit; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + lazVersion; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; end; procedure TfrmStartingSplash.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmStartingSplash.FormHide(Sender: TObject); begin close(); end; end. doublecmd-1.1.30/src/fstartingsplash.lrj0000644000175000001440000000310515104114162017300 0ustar alexxusers{"version":1,"strings":[ {"hash":185879090,"name":"tfrmstartingsplash.caption","sourcebytes":[68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114],"value":"Double Commander"}, {"hash":185879090,"name":"tfrmstartingsplash.lbltitle.caption","sourcebytes":[68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114],"value":"Double Commander"}, {"hash":214540302,"name":"tfrmstartingsplash.lblversion.caption","sourcebytes":[86,101,114,115,105,111,110],"value":"Version"}, {"hash":214997982,"name":"tfrmstartingsplash.lblrevision.caption","sourcebytes":[82,101,118,105,115,105,111,110],"value":"Revision"}, {"hash":4833316,"name":"tfrmstartingsplash.lblbuild.caption","sourcebytes":[66,117,105,108,100],"value":"Build"}, {"hash":43026835,"name":"tfrmstartingsplash.lbllazarusver.caption","sourcebytes":[76,97,122,97,114,117,115],"value":"Lazarus"}, {"hash":86315532,"name":"tfrmstartingsplash.lblfreepascalver.caption","sourcebytes":[70,114,101,101,32,80,97,115,99,97,108],"value":"Free Pascal"}, {"hash":42652669,"name":"tfrmstartingsplash.lblplatform.caption","sourcebytes":[80,108,97,116,102,111,114,109],"value":"Platform"}, {"hash":222234861,"name":"tfrmstartingsplash.lbloperatingsystem.caption","sourcebytes":[79,112,101,114,97,116,105,110,103,32,83,121,115,116,101,109],"value":"Operating System"}, {"hash":239284482,"name":"tfrmstartingsplash.lblwidgetsetver.caption","sourcebytes":[87,105,100,103,101,116,115,101,116,86,101,114],"value":"WidgetsetVer"}, {"hash":78005252,"name":"tfrmstartingsplash.lblcommit.caption","sourcebytes":[67,111,109,109,105,116],"value":"Commit"} ]} doublecmd-1.1.30/src/fstartingsplash.lfm0000644000175000001440000025132615104114162017301 0ustar alexxusersobject frmStartingSplash: TfrmStartingSplash Left = 120 Height = 330 Top = 207 Width = 206 Anchors = [] AutoSize = True BorderIcons = [] BorderStyle = bsNone Caption = 'Double Commander' ClientHeight = 330 ClientWidth = 206 DefaultMonitor = dmPrimary FormStyle = fsSplash Icon.Data = { 267D000000000100040010100000010020006804000046000000202000000100 2000A8100000AE0400003030000001002000A825000056150000404000000100 200028420000FE3A000028000000100000002000000001002000000000004004 00000000000000000000000000000000000000000000BCA3A51A8182BB517E82 C1586E72B94F6D70B64F6C6DB34F6B6BB14F6A68AE4F6966AB4F6764A84F736D AB57837CB1677A72AB607B6D9E3EFEEDD506B7A4B60D4F6BDAE62653E6FE234B DEFE2046D7FE1D3FD1FE1A39CAFE1834C4FE142EBEFE1228B8FE0F23B2FE0D1C ABFE0A17A4FF06109EFE050C97FE594F997BCECFD296BEC6DBFEB1BAD9FE889A D9FF2F52D7FF193ED2FF1939CCFF1634C6FF132DBFFF1127B9FF0E22B3FF0314 AAFF444EB3FF9295C4FFB1B2CCFFC2C2CFF7D1D0D0ABD7D7D5FFD6D6D5FFD6D6 D5FFD9D9D4FF4963D0FF1738CCFF1634C6FF132DBFFF1127B9FF0E22B3FF848B C5FFDBDBD7FFD6D6D5FFD7D7D6FED7D7D6FFAFB5D15A6A87E1FB8B9DD6FFD9D7 D2FFD3D3D3FFD1D1D2FF3F58CBFF1634C6FF132DBFFF0B22B8FF9299C8FFD7D6 D4FFD3D3D3FFC1C2CEFF5D62B1FF6868B0D69AA7E3344B72EDF92C58E9FF375C DDFFBFC2D0FFD0D0D0FFAAB0CAFF0D2DC6FF132DBFFF3245BDFFCECECFFFD3D3 D1FF9A9DC2FF040F9EFF000697FF2B2DA1C3A3ADE1366D8CF0F9577AECFF3E62 E3FF6D83D6FFCECECCFFD7D6CCFF2741C3FF122CBFFF616FC0FFCDCDCCFFC4C4 CAFF0514A5FF0712A0FF070E9AFF3334A3C4A3ADE1366D8CF0F96988EEFF6482 E9FF6F86DEFFCDCCCAFFD1D0CAFF5C6DC7FF213AC4FF8991C4FFCBCBCAFF9EA2 C3FF1C29ADFF222CAAFF2B32A9FF5858B3C4A3ADE1366D8CF0F96888EEFF6684 EAFF7E92E0FFD8D7D5FFDCDBD6FF7686D1FF596CD3FF9DA4CEFFD6D6D6FFB8BB D0FF545EC1FF555DBDFF5359BAFF6B6CBCC4A3ADE1366D8CF0F96888EEFF6583 EAFFAFBAE1FFE5E5E5FFE6E5E1FF596FD7FF5C6FD3FF8690D2FFE5E5E5FFE9E8 E5FF5F69C0FF525ABDFF5157B9FF6B6BBBC498A4E72F6687F1F96887EBFFA7B4 E3FFE6E6E5FFE6E6E6FFA5AFDCFF5D72D8FF5D6FD3FF6371CEFFE0E0E3FFE6E6 E6FFDBDCE1FF7A7FC4FF484EB5FF605FB4C2D9D9DC9CD8DAE1FFEAE8E3FFE7E7 E6FFE7E7E6FFD5D7E2FF677BDBFF5F74D8FF5D6FD3FF5A69CFFF7681CBFFE6E6 E5FFE6E6E6FFEBEBE8FFE6E6E3FFD7D8DEF9E0E0E0ABE8E8E8FFE9E9E8FFEEED E9FFB6BFE0FF677FE0FF6076DCFF5F74D8FF5D6FD3FF5B6BCFFF5866CBFF6F79 C9FFDBDCE0FFEEEDEAFFE9E9E8FEE8E8E8FFCECCD36EAFBDE9FD9BADE7FE768F E6FF5F7AE5FF627BE0FF6176DCFF5F74D8FF5C6FD3FF5B6BCFFF5866CBFF5662 C6FF4F59C0FF777DC4FF9699CBFFB5B2CCDEFFF0D5098283BBCA718EEFFC6683 E8FB6A82E4FB687FE0FB667ADCFB6478D7FB6373D3FB6170CEFB5F6CCBFB5C66 C5FB5660C0FB555CBCFB6A6CBDF9998DB15200000000FFFFFF0399839924917C 962A907B962A8F7B942A8F7A942A8F79942A8E79942A8E78932A8E78922A8F77 922A8F77922A8E76912A9D83921F000000008000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF8001FFFF2800000020000000400000000100 2000000000008010000000000000000000000000000000000000000000000000 000000000000FFFFFF03FFFFFF07FFFFFF0BFFFFFF14FFFFFF09FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF0CFFFFFF1AFFFFFF1CFFFF FF1CFFFFFF17FFFFFF0AFFFFFF04000000000000000000000000000000000000 0000FFFFFF10E1D6D55362456CBA584273D6594374DD584175D3563F73D2563E 72D2553E71D2543D70D2543C70D2543B6ED2533B6ED2533A6DD2533A6DD25338 6BD252396BD252386AD252376AD2513669D253386AD5513262E6513262E85132 61E8503161E4533563CA89729187FFFFFF2BFCFCFC040000000000000000FFFF FF08948BB17F5263C1FF3E66E8FF315DEBFF2C58E7FF2B54E4FF2A51E1FF284E DDFF264BDAFF2448D7FF2345D4FF2242D0FF2140CDFF1F3DCAFF1E39C7FF1C36 C4FF1B33C1FF1A31BEFF192EBBFF172BB7FF1527B3FF1425B1FF1322AEFF121F ABFF101CA8FF141EA5FF191A92FF45357FE4FEF6EE3AFFFFFF0200000000FFFF FF22546BD1F12C5AEBFE2754E8FF224FE4FF224BE1FF2149DEFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0816A5FF0613 A2FF040F9FFF010A9BFF020A98FF0B139DFF453075C7FFFFFF0ECACACA4EDBDB DBE7C5C9D8FFC0C5D7FFB7BED6FF8598D7FF395DDCFF1842DFFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0615A5FF000C A0FF434BACFF9395C1FFB7B8CAFFBDBECFFFC7C6D1FDD6D6D6E3C8C8C858D7D7 D7FFD7D7D7FFD7D7D7FFD8D8D7FFDCDBD8FFE1DED5FFB3BAD4FF5873D6FF1940 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF081AABFF0F1DA8FF7077BCFFCECE D4FFE2E2DBFFDADAD8FFD8D8D7FFD7D7D7FFD7D7D7FFD4D4D4FFC8C8C858D5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD7D6D6FF9FA9 D1FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0B1FB0FF2D3BB0FFD7D8D9FFD6D6D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD3D3D3FFC7C7C758D3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD8D7 D4FFBBBFD2FF1F40CFFF193ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0B20B3FF5662B9FFD4D4D5FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD2D2D2FFC8C8C84BD1CF D0E9BBC3D9FFBDC2D4FFCCCDD1FFD8D7D3FFD4D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFB1B6CCFF193ACBFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0D24B6FF2E3FB6FFD3D4D5FFD2D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFD8D8D5FFC2C2CEFFB4B5CAFFB6B7CAFDD3D3D2DBFFFFFF05BAA4 AD75426DF1FF3461EBFF2E5AE8FF5874D4FFCECFD1FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD3D2D2FF8491CAFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0A21B4FFCECFD2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3 D2FFAAACC6FF1D259FFF070F9AFF030996FF181B9CF4FAEEE322FFFFFF04B9A2 AD734B75F2FF3B66ECFF315CE8FF2753E6FF2750DEFF96A3D1FFD1D1D0FFD0D0 D0FFD0D0D0FFD0D0D0FFCDCDCDFF2240C7FF1534C6FF1431C3FF132EC0FF112B BDFF1027BAFF737EC3FFD3D3D1FFD0D0D0FFD0D0D0FFD0D0D0FFD7D6D1FF5961 B3FF000B9DFF020C9CFF030B99FF000695FF161A9BF4FFF4E71FFFFFFF04B7A1 AD735F84F3FF4971EDFF3C65E9FF325BE5FF2B54E2FF2049DEFFB5BACEFFD0CF CEFFCECECEFFCECECEFFD2D2CFFF848FC1FF1130C7FF1431C3FF132EC0FF112B BDFF0F26B9FFB6B9CBFFCECECEFFCECECEFFCECECEFFD0CFCFFF6067B4FF0411 A2FF05109FFF030D9CFF030B99FF010795FF171A9BF4FFF4E71FFFFFFF04B7A0 AC736D8FF5FF6384EFFF5074EBFF4268E7FF365DE3FF2E55E0FF3256DAFFC8C9 CCFFCDCDCDFFCDCDCDFFCDCDCDFFC4C4C6FF1C39C5FF1532C3FF142FC0FF112A BDFF273BB8FFD4D3CDFFCDCDCDFFCDCDCDFFCECDCDFFBABBC6FF0412A4FF0714 A2FF06119FFF050E9CFF040C99FF030896FF191D9CF4FFF3E71FFFFFFF04B7A0 AC736D90F5FF6A8AF0FF6887EEFF5D7EEAFF4E71E6FF4164E2FF375ADDFFA7B0 D0FFCCCCCCFFCDCDCDFFCDCDCDFFCCCCCDFF364EC3FF1733C3FF152FC0FF1029 BDFF6A75BCFFD2D1CEFFCDCDCDFFCDCDCDFFD3D3CEFF444EAFFF0715A6FF0915 A4FF0914A0FF09129EFF0A119BFF0A1099FF2226A0F4FDF1E61FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF617EE7FF5372E3FF909D D3FFCCCCCAFFCACACAFFCACACAFFCACACAFF4B60C5FF213BC5FF1D37C2FF152E BFFF979DC1FFCDCDCBFFCACACAFFCACACAFFCCCCCAFF1626ACFF1220A9FF131F A7FF141EA5FF161FA2FF1920A2FF1D23A1FF3639A8F4F8ECE41FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FF94A1 D6FFCCCCCAFFCACACAFFCACACAFFCACACAFF6778CBFF3850CCFF324AC8FF293F C4FFB0B3C5FFCCCBCBFFCACACAFFCACACAFFC1C2C9FF2A38B4FF2935B1FF2C36 B0FF3039AFFF353DAFFF3D44B0FF4448B1FF595CB7F4EFE3E01FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF647FE5FF9EA9 D6FFD3D3D2FFD2D2D2FFD2D2D2FFD1D2D2FF7988D1FF5C70D5FF586BD2FF5163 D0FFADB0C5FFD4D3D2FFD2D2D2FFD2D2D2FFCBCCCFFF515CC1FF505AC0FF525B BEFF535BBDFF535ABBFF5257B9FF5054B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FFBAC0 D9FFD9D9D9FFD9D9D9FFD9D9D9FFD9D9D9FF7182D3FF5D71D6FF5D6FD3FF596B D2FF989EC6FFDDDCDAFFD9D9D9FFD9D9D9FFDDDCD9FF656FC2FF545EC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6781E3FFDBDC DEFFE2E2E2FFE2E2E2FFE2E2E2FFDDDDDDFF6175D5FF5D71D6FF5D6FD3FF5A6C D1FF737EC8FFE5E5E1FFE2E2E2FFE2E2E2FFE4E4E3FFB4B6CEFF4E59C0FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF637FE8FFB5BDD6FFE8E8 E7FFE6E6E6FFE6E6E6FFE8E8E7FFB5BAD4FF5B71D8FF5D71D6FF5D6FD3FF5B6D D1FF5A69CFFFD7D8DBFFE6E6E6FFE6E6E6FFE5E5E5FFEAE9E8FF737BC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6180EBFFA4B0DCFFE6E6E5FFE5E5 E6FFE6E6E6FFE6E6E6FFE7E6E3FF687BD7FF5E74D8FF5D71D6FF5D6FD3FF5B6D D1FF5B6ACFFFA6ACD1FFE7E7E6FFE5E5E5FFE6E6E6FFE5E5E5FFDDDEE1FF5E66 BAFF5159BDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EFE3E11FFFFFFF01B29F BC6E6A8DF6FF6586F1FF6584EDFF8097E4FFBDC4DDFFEBEAE5FFE5E5E5FFE6E6 E6FFE5E5E5FFE7E7E6FFB3BADAFF5F74DBFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF6270C9FFE2E1DFFFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E5 E4FF9296C9FF5D62B8FF4B51B6FF4A4FB4FF595BB8F4D3B9BA1BCDCDCC3CD2CF D6CFB5C0E0FFC2C8DCFFE0E0DFFFE7E7E6FFE6E6E5FFE6E6E6FFE5E5E5FFE5E5 E5FFE6E6E6FFDFDFDFFF6277D8FF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5968CDFF7681C9FFE5E5E4FFE5E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFEAE9E8FFD2D3D7FFB6B7CFFFB0B0CEFBD5D4D4B3D2D2D259E6E6 E6FFE8E8E6FEE8E7E7FFE7E7E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E7FFE1E1E3FF7085DAFF6076DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF9299CBFFEEEEE8FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8E7FFE8E8E7FFE2E2E2FFD2D2D258E6E6 E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE9E9E7FFD3D6 E0FF6D83D8FF6179DEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5360C9FF8B92C9FFE1E1E3FFE9E9E8FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE2E2E2FFD2D2D258E7E7 E7FFE8E8E8FFE8E8E8FFE7E7E7FFE7E7E7FFE8E8E8FFEAEAE6FF9BA8D8FF647E E2FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5E68C4FFC0C2D3FFECEC EBFFE8E8E8FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE3E3E3FFCECECE57E1E1 E1FFE1E1E3FFDEDFE0FFCDD2E1FFB5BFE2FF93A6E4FF6C86E3FF627DE6FF647E E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5660C4FF515BC0FF6B72 C1FF9498CAFFB8BAD2FFD1D1DAFFDEDFDFFEE1E1E2FFDBDBDBFC00000000EFE3 E3386779D2FF6385F2FE6485F0FF6585EDFF6684EAFF6682E8FF647FE5FF647D E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5761C4FF555FC1FF535C BFFF525ABDFF4F55BAFF4B51B7FF494FB7FF55468DEAFFFFFF0900000000FFFF FF1D837DAED37395F7FF6786EFFE6786ECFF6684EAFF6581E8FF647FE5FF637D E3FF627CE0FF6179DEFF6077DCFF5F74DAFF5E74D8FF5D71D6FF5C6ED3FF5B6D D1FF5B6ACEFF5969CDFF5867CBFF5764C9FF5662C5FF5761C4FF555FC1FF535C BFFF535BBDFF5157BAFF4E53B7FE6562ADFFA18DA574FFFFFF0400000000F6F5 F604CFC0C3428D85AFC27C84CAF46874C6FF6874C5FF6A74C4FF6C75C2FF6C74 C2FF6C73BFFF6B71BEFF6A6FBCFF696EBBFF696DB9FF686BB8FF676AB6FF6669 B5FF6667B3FF6566B2FF6464B1FF6462AEFF6261ACFF5C5AA9FF5B58A7FF5A57 A6FF5B56A4FF655EA5FF7F76ABEF95819C93FFFFFF1300000000000000000000 0000FBFAFB02FFFFFF11FFFFFF2AFFFFF937D4C5C340D4C5C340D4C5C340D4C5 C340D4C5C340D5C6C340D5C6C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6 C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6C540D5C6C440D5C7C540D5C7 C540D5C6C440EBE2DF3BFFFFFF2CFFFFFF0E0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000E0000007C000 0001800000008000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000800000008000000080000001C0000003FFFFFFFF280000003000 0000600000000100200000000000802500000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF01FFFFFF03FFFF FF04FFFFFF07FFFFFF0BFFFFFF08FFFFFF04FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF05FFFFFF0BFFFFFF0FFFFFFF10FFFFFF10FFFFFF10FFFF FF0EFFFFFF09FFFFFF04FFFFFF02000000000000000000000000000000000000 0000000000000000000000000000FFFFFF01FFFFFF0AF0EBEC1FD4CAD332CCC3 D03BD4CDD947D9D3DD53D4CDD948CCC4D23BCAC1D039CAC1D039CAC1D039C9C1 D039C9C1D039C9C1CF39C9C0D039C9C1CF39C9C0CF39C9C0CF39C9C0CF39C9C0 CF39C9C0CF39C9C0CE39C9C0CE39C8C0CE39C9BFCE39C9BFCE39C9BFCE39C9BF CE39C9C0CE3ACEC6D340D8D1DB53DBD4DD61DCD5DE64DCD5DE64DCD5DE63DAD2 DC5DD3CBD64BCDC4D039D7CFD829FBFAF916FFFFFF0700000000000000000000 00000000000000000000FFFFFF02FFFFFE12D8CFD63F9B8CA88B675687CC5243 81E7514688EF504586F2504588EE4F4487EB4E4286EB4E4285EB4D4185EB4C40 84EB4C3F83EB4B3F82EB4B3E82EB4B3D80EB4B3C7FEB4A3C7FEB4A3B7EEB4A3A 7DEB49397CEB49397CEB49387AEB48387AEB48377AEB483679EB483578EB4835 77EB473476EB473476EC473274F2442C6CFA442C6CFA442C6BFA432B6AFB432A 6AFA442D6CF04B3370DE675284B6A394AE76E1D9DE37FFFFFF0EFFFFFF020000 00000000000000000000FFFFFF0BD1CAD545776FA3BB5157ABFF4F6EDEFF436C F0FF3963EEFF3661EBFF345EE9FF345BE7FF3359E4FF3158E2FF3056E0FF2F54 DEFF2E51DBFF2D4FDAFF2C4ED8FF2C4BD6FF2A49D3FF2A48D1FF2947D0FF2844 CDFF2742CBFF2640CAFF253FC8FF253CC5FF233BC3FF2239C2FF2237BFFF2135 BDFF2033BBFF1F31B9FF1E2FB7FF1D2EB5FF1C2CB4FF1B2AB1FF1B28AFFF1926 ADFF1C27ADFF232BA8FF292894FF362577FF715C8AADDAD1D83EFFFFFF0C0000 000000000000FFFFFF02DEDAE7237B7BB79D4D64CCFF3B6AF5FF2655EAFE2552 E6FF224FE3FF204CE1FF2049DFFF1F47DDFF1E45DBFF1C42D8FF1B41D5FF193F D3FF183DD1FF173BCFFF1638CDFF1636CBFF1534C9FF1433C6FF1331C4FF122F C2FF112DC0FF102ABEFF0F28BCFF0F26B9FF0E25B7FF0D23B5FF0B21B3FF0A1F B1FF091CAFFF081AACFF0818A9FF0716A7FF0615A5FF0513A3FF0411A1FF030E 9FFF010C9CFF00099AFF000699FE09129FFF271F83FF7664939CEDE9F024FFFF FF0100000000BAB9B309B2B6D9474D5FC2F14370F4FF2957EAFE2452E9FF1D4C E6FF1D4BE4FF1F4AE2FF214ADFFF2149DDFF1F46DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0817A6FF0715A4FF0612A2FF010D 9FFF00079CFF000298FF000597FF000695FE09119CFF2C1F7AEFC4C1CF4DB0B0 AF0CB0B0B016D4D4D4A5D1D2DABD9DA8D5FF98A9E0FF92A4DCFF899CDCFF758D DCFF5876DBFF355ADDFF1B46DFFF1A44DEFF1E45DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0716A6FF000EA2FF000C9FFF1E28 A3FF464DAEFF6469B5FF787CB9FF8285BCFF8184BBFE8E8BB7FFD3D3D6C4D1D1 D1A4B1B1B125D5D5D5FFD9D9D9FFDDDCD8FEDEDCD7FEDDDBD5FFDCDBD5FFD4D5 D6FFC4C8D7FFAEB7D7FF8A9BD7FF4C6AD6FF1B43DAFF1A41D8FF1C43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0414A7FF0615A4FF3F49ADFF8489C1FFABAE CBFFC2C3D1FFD4D5D5FFDDDDD8FFDFDFD9FFE0E0DBFEE0E1DCFEDADADAFFD4D4 D4FFB0B0B023D4D4D4FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD8D7 D7FFD9D9D7FFDBDAD7FFD5D5D5FFC3C8D7FF97A4D4FF3858D3FF173ED6FF1B40 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0515A9FF2C38ACFF969AC6FFC5C6D3FFD7D7D6FFDDDC D9FFDAD9D8FFD8D8D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD4D4 D4FFB0B0B023D3D3D3FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD8D8D6FFD4D5D5FFC3C6D5FF687DCFFF183D D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF091AABFF636BB9FFC6C8D4FFD5D5D5FFD9D9D7FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD3D3 D3FFB0B0B023D2D2D2FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D5D5FFD2D3D6FF8895 CCFF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0C20 B2FF0C1FAFFF888EC1FFD6D6D8FFD6D6D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD2D2 D2FFB0B0B023D2D2D2FFD4D4D4FFD3D3D3FFD3D3D3FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D3FFD6D6 D6FF99A3CBFF1438CFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0A1F B0FF989DC4FFD8D8D8FFD4D4D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4D4FFD1D1 D1FFB0B0B023D4D4D4FFD5D5D5FDD3D4D6FFD3D3D5FFD1D2D3FFD2D3D3FFD3D3 D3FFD4D4D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D5FF818EC7FF1436CDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0A20B3FF828A C0FFDAD9D8FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4 D3FFD4D4D4FFD3D3D3FFD2D2D3FFD3D3D4FFD2D3D4FFD2D2D4FFD5D5D5FCD4D4 D4FBB5B5B50CC5C4C469AAA6BDB46989E5FF6583E0FF728AD8FF909FD0FFB6BC CFFFCBCCD2FFD1D2D2FFD3D3D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD1D1D3FF5B6EC6FF1434CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0B21B5FF5864BAFFD8D8 D7FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2 D2FFCDCED3FFB4B5CBFF8084BAFF585CACFF3F43A3FF4144A3FFB1ACBF9DC1C1 C15B00000000FDF6F71A9B93BD914470F4FF3361EEFF2C5BECFF2453EBFF2651 E3FF5673D4FFA2ADD1FFCBCDD2FFD2D2D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFD2D2D1FFBFC2CDFF2A46C7FF1434C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0D25B8FF2135B6FFC6C8D2FFD1D1 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD2D2D2FFCDCED1FF9FA2 C5FF3F46A8FF000899FF000197FF000395FF000193FF060B97FFA59AC26CFFFF FF0AFFFFFF01F0EAEC209E96BD934F78F3FF3E69EEFF3763EBFF315CE9FF2C57 E7FF214EE6FF234EDEFF7389D5FFC1C4D0FFD1D1D0FFD0D0D0FFD0D0D0FFD0D0 D0FFD0D0D0FFD1D0D0FFCECED0FF8792C5FF1232C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0921B7FF8B93C5FFD0D0D1FFD0D0 D0FFD0D0D0FFD0D0D0FFD0D0D0FFD0D0D0FFD2D2D1FFC4C5CDFF6A71B6FF0814 9EFF00069CFF020C9BFF030B99FF020997FF000694FF0A0F98FFA79CC270F9F8 F910FFFFFF01F0EAEC20A098BD935A81F3FF4770EEFF3F68ECFF3861E9FF315C E7FF2D57E4FF2751E3FF1C47DFFF667ED3FFC3C6CFFFD0D0CFFFCFCFCFFFCFCF CFFFCFCFCFFFCFCFCFFFD1D0CFFFBBBECBFF364FC4FF1232C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF0D25BAFF2F41B8FFC5C6CFFFD0D0CFFFCFCF CFFFCFCFCFFFCFCFCFFFCFCFCFFFD1D1CFFFC4C5CCFF5E65B4FF000D9FFF020E 9FFF040F9DFF030C9BFF020B99FF020997FF000694FF0B1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39ABD93698CF5FF557BEFFF4A71EDFF4169EAFF3962 E8FF335BE5FF2E56E2FF2951E1FF1D46DDFF7D8FD1FFCBCCCFFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFC7C8CCFF7582C2FF0C2DC8FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF061EB9FF7A83C1FFCACBCEFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFCACACEFF747AB8FF020FA1FF0411A2FF0511 A0FF040F9DFF030D9BFF030B99FF020997FF000794FF0C1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F5FF6587F1FF5B7EEEFF4F74EBFF446B E9FF3D63E6FF365CE3FF3057E1FF2950DFFF2E52D9FFACB3CEFFCCCCCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECDCCFF9EA5C4FF1A37C5FF1432C5FF1531 C3FF132FC0FF122CBEFF112ABCFF0F27B8FFA9ADC7FFCECECDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFA7AAC4FF1421A6FF0412A3FF0713A2FF0611 9FFF050F9DFF040E9BFF040C9AFF040A98FF020895FF0D1299FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8BF2FF6788F0FF6182EEFF5779 EBFF4C6FE8FF4267E5FF3B60E2FF355AE0FF284EDEFF6C81CFFFCACBCFFFCDCD CCFFCCCCCCFFCCCCCCFFCCCCCCFFCECECCFFB2B6C8FF3A52C1FF1230C5FF1631 C3FF152FC0FF132DBEFF0E27BCFF3547B8FFB9BCCAFFCECECDFFCCCCCCFFCCCC CCFFCCCCCCFFCDCDCDFFC5C6CBFF6269B4FF000EA5FF0916A4FF0814A2FF0712 A0FF06109EFF060F9CFF060E9AFF070D99FF060B96FF11179BFFA89DC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6685 EDFF6080EAFF5778E8FF4C6EE5FF4465E2FF3B5DDFFF3E5ED9FFC7C9CEFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECECDFFBDBFC9FF586AC0FF1230C6FF1733 C3FF1631C0FF152EBFFF0D26BDFF5664BBFFBFC1CAFFCECDCDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFBDBECAFF1E2BA9FF0917A7FF0A17A6FF0A16A3FF0A15 A1FF0A149FFF0B139EFF0B139CFF0C129BFF0C1299FF191E9EFFA99EC370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6988EFFF6887 EEFF6786EBFF6583EAFF617FE8FF5A78E6FF5170E2FF4163E0FFB1B7CEFFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC1C2C8FF6B7AC1FF1835C8FF1E39 C4FF1C36C2FF1A33C0FF0F29BDFF717DBEFFC4C4C9FFCCCBCBFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFABAFC4FF0617A9FF101EA9FF101DA7FF111DA5FF111C A4FF121BA3FF131CA1FF151CA0FF181E9FFF191F9FFF272BA4FFABA0C370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF637EE5FF5B77E4FFA7B0CFFFC8C8 C9FFC9C9C9FFC9C9C9FFC9C9C9FFC9C9C9FFC5C5C6FF838DC3FF243FCBFF2942 C8FF263FC5FF243CC3FF1831C1FF838BC0FFC5C5C7FFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC7C7C8FF8F95BFFF1221ADFF1B29ACFF1B28ABFF1D28AAFF1E29 A9FF202AA8FF232BA7FF262DA7FF2A31A8FF2F34A8FF3F44AEFFAEA3C570F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607BE5FFAAB1D1FFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC9C9CAFF8F99C8FF3952D0FF3D54 CCFF3950CAFF364CC7FF2A40C5FF949AC5FFCACACBFFCCCCCBFFCBCBCBFFCBCB CBFFCBCBCBFFC9CACBFF9398C2FF2533B4FF2E3BB4FF303BB3FF323CB2FF353E B2FF3941B2FF3D45B2FF4349B3FF484DB4FF4B4FB4FF5659B8FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607AE5FFB1B7D2FFD0D0 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFCACBCEFF919BCAFF566BD7FF596C D4FF5668D2FF5265D0FF495CCEFF959CC6FFCDCDCEFFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFCFCFD0FF9EA2C6FF444FBEFF4C57BFFF4E58BDFF5058BCFF5159 BCFF5259BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF617BE4FFC6C9D2FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D6D5FFCCCDD2FF8D99CEFF596FD8FF5D71 D6FF5D70D3FF5C6ED2FF5669D2FF939BC8FFCFCFD2FFD6D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFBABCCEFF505BC3FF5660C2FF545EC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF637FE7FF7689D8FFD7D8DBFFDBDB DBFFDBDBDBFFDBDBDBFFDBDBDBFFDCDCDBFFCBCDD7FF7E8CCFFF5A70D8FF5D71 D6FF5D6FD3FF5C6ED2FF5769D2FF818AC7FFCFD0D7FFDBDBDBFFDBDBDBFFDBDB DBFFDBDBDBFFDBDBDAFFCDCED6FF5F69C0FF545EC2FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF607CE6FFA5AFD7FFDEDEE0FFE0E0 E0FFE0E0E0FFE0E0E0FFE0E0E0FFE2E2E0FFC7CADAFF6A7BD0FF5C71D8FF5D71 D6FF5D6FD3FF5C6ED2FF596BD2FF6D78C7FFCDCED8FFE1E1E0FFE0E0E0FFE0E0 E0FFE0E0E0FFE1E1E0FFDADADEFF8C92C6FF4F5AC1FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6683E9FF627FE8FF7389DDFFD6D8DFFFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E3FFB7BDD7FF5A70D7FF5E72D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6CD1FF5969CDFFBDC1D2FFE4E4E4FFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFC6C8D7FF5B65BFFF525CC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6381EAFF6781E2FFB5BDDAFFE4E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFDDDEE3FF919CD3FF5970D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5C6DD1FF5566D0FF969DC8FFE0E1E3FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE1E2E4FF9EA3CAFF525BBDFF525BBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6282EBFF6783E4FFA6B1DCFFE1E2E3FFE6E6E5FFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E5FFCDD1DEFF6679D5FF5E73D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5A6ACFFF6572C8FFCFD1DAFFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E6FFE7E7E6FFDBDCE0FF8F95C8FF515ABBFF5058 BDFF535ABBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB2A8C86FF9F8 F910FFFFFF01EFEAED20A39BC1937092F5FF6A8AF2FF6989F0FF6888EFFF6686 EFFF6081ECFF758DE1FFB1BADEFFE0E1E3FFE6E6E5FFE6E6E6FFE5E5E5FFE6E6 E6FFE5E5E5FFE6E6E6FFE2E3E5FF99A3D4FF5A70DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5666CDFF99A0C9FFE4E4E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFDBDCE0FF9EA2CBFF5D64 BBFF4B52BAFF5056BAFF5157B9FF5156B7FF4F53B5FF575BB9FFA596B775F7F5 F71000000000FDF6FF159D99CE8E6B8FF6FF6487F4FF6284F2FF6283EEFF768F E3FFA1AFDDFFCCD0E0FFE4E4E4FFE7E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE5E5E5FFC5C8D9FF6277D9FF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5A6ACEFF5F6EC9FFC9CBD5FFE6E6 E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFE2E2E3FFC3C5 D7FF9093C3FF5E63B5FF4A50B5FF484EB5FF484CB4FF5256B8FF9580A473FFFF FF05B4B4B413D7D6D793C3C2D6C9A3B4E5FFA7B5E0FFB2BCDEFFC5CBDEFFD5D9 E3FFE0E1E4FFE6E6E5FFE6E6E6FFE5E5E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5 E5FFE6E6E6FFDCDDDFFF7687D5FF5E74DCFF6074DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5867CDFF737EC7FFE1E1 E0FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6 E5FFDFDFE3FFD3D3DEFFBEC0D2FFABADCBFF9B9DC7FF9799C8FFC3BDC8BDD4D3 D487B2B2B222E0E0E0FFE4E4E5FCE1E2E5FFE2E3E5FFE3E3E4FFE5E5E5FFE6E6 E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6 E6FFE4E4E2FF8897D4FF5F76DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5867CBFF888F C6FFE8E8E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE3E3E4FFE1E1E3FFE1E1E3FFE4E4E4FBDFDF DFF8B2B2B223E1E1E1FFE7E7E7FFE7E7E6FEE7E7E6FFE7E7E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E7 E5FF8E9CD5FF6079DEFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 C9FF8C93C8FFE8E8E4FFE7E7E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E6FFE7E7E6FFE7E7E6FEE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE6E7E7FFE1E1E2FF8797 D5FF6079E0FF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF888EC5FFE3E3E2FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E7FFE5E5E7FFC9CCDCFF788BDAFF617B E1FF627ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5562C5FF7179C3FFCBCCD9FFE6E6E7FFE8E8E7FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE1E1 E1FFB2B2B223E2E2E2FFE8E8E8FFE8E8E8FEE8E8E8FFE8E8E8FFE8E8E8FFE9E9 E8FFE9E9E8FFE7E7E6FFE1E2E7FFD3D6E3FF99A7D9FF657EE1FF627CE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF545FC4FF5A64C2FF959AC9FFD0D1DCFFE1E1E5FFE7E7 E6FFE9E9E8FFE9E9E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FEE8E8E8FFE2E2 E2FFB2B2B223DFDFDFFFE5E5E5FEE4E5E6FFE5E5E5FEE2E3E4FFDEDFE5FFD9DC E6FFD0D5E5FFBDC6E2FF95A5DEFF6B84E2FF607CE6FF647DE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF555FC3FF505AC1FF5D66BFFF8C91C6FFB6B8 D2FFCACCDBFFD6D6DFFFDCDDE1FFE2E3E4FFE3E4E4FEE5E5E5FFE4E4E4FEDEDE DEFDB1B1B114D7D7D79CD3D1DAC0AAB1D5FFACBAE8FEA5B4E3FF97A9E3FF879C E2FF718BE3FF6180E9FF607FEAFF6480E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF525CC0FF4D56BEFF4F57 BBFF6268BAFF787CBEFF8B8EC3FF9A9DC9FF9B9ECAFEA09CBEFFD5D3D8BAD4D4 D4950000000000000000BBB4CF546367B2FF6D91FCFF6183F1FE6384F0FF6484 EFFF6585ECFF6684EAFF6683E9FF6681E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF545EC0FF545CBFFF535B BDFF5057BBFF4D54B9FF4B51B8FF474DB4FE4E54BBFF50418BF9D5CFE2450000 000000000000FFFFFF06D8D1DA3B7B6E9CCA7B8FE1FF6C8FF6FE6686EFFE6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF647FE6FF647DE4FF637DE2FF627C E0FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5D72D7FF5C70 D5FF5C6FD3FF5B6DD2FF5B6CD1FF5B6ACFFF5A6ACDFF5968CCFF5867CBFF5865 C9FF5764C8FF5663C5FF5661C4FF5660C3FF555FC2FF545EC0FF535CBFFF535B BDFF5259BBFF5056B9FF4D53B7FE585EBEFF6460ADFF7B6895AEE7E2E929FFFF FF0300000000FFFFFF02F8F4F419BBAEBE6A7E77A7E07B89D4FF7C9AF7FF6D8D F4FF6688F1FF6587F0FF6585EFFF6986EDFF6A88ECFF6A86EBFF6A85EAFF6984 E7FF6882E6FF6881E4FF677FE3FF667EE2FF667DE1FF657CDFFF657ADEFF6378 DCFF6377DAFF6276D9FF6275D7FF6273D6FF6172D4FF6071D3FF5F6FD2FF5F6D D0FF5E6CCFFF5C6BCCFF5A67CAFF5561C7FF5460C6FF535FC4FF525DC3FF525C C1FF565FC1FF6269C5FF7279CBFF6F6AADFF776491D3C4B8C650FCFAFA0E0000 00000000000000000000FFFFFF05F9F7F620BFB2C05D978DB2A47973A9DF6F6C ABFC6968AAFF6A68AAFF6967A9FF6B68A8FF6B68A7FF6B67A7FF6B66A7FF6B66 A5FF6A65A4FF6A65A4FF6A63A3FF6963A3FF6862A2FF6862A1FF6861A0FF6860 9FFF675F9EFF675F9EFF675E9DFF675D9CFF665D9CFF665C9BFF655B9AFF655A 99FF645A98FF645997FF635796FF615595FF615494FF605393FF605392FF6052 91FF625392FF65538DFF6F5B8BEA917F9EAEC0B2BF56FEFDFC17FFFFFF020000 0000000000000000000000000000FFFFFF04FFFFFF10DBD1D827C1B6C745C5BE D157B3A8BB62A696AA66A898AB66A797AB66A797AB66A797AA66A797AB66A797 AA66A796AA66A796AA66A796AA66A796AA66A696AA66A696A966A695A966A695 A966A695A966A695A866A695A866A694A866A694A866A694A866A694A866A694 A766A594A766A593A766A594A766A694A766A693A766A593A766A593A666A593 A666A593A665B5A7B95FC1B4C351DDD3D831FFFFFF11FFFFFF03000000000000 00000000000000000000000000000000000000000000FFFFFF02FFFFFF07FFFF FF0AFFFFFA0CF6EFEA0CF7F1EB0CF7F1EB0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1 EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F2EC0CF7F2 EC0CF7F2EC0CF7F2EC0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2 ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F3ED0CF8F3ED0CF8F3EE0CF8F2 ED0CF8F3EE0CFFFFFF0BFFFFFF09FFFFFF05FFFFFF0100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F8000000001FFFFFE00000000007FFFFC00000000001FFFFC00000000001 FFFF800000000000FFFF800000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF800000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF800000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFC00000000001FFFF800000000000FFFF800000000001 FFFFC00000000001FFFFE00000000003FFFFF80000000007FFFFFFFFFFFFFFFF FFFF280000004000000080000000010020000000000000420000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F7F7FA01FBFBFC04FCFCFC05FBFB FD03F6F6F90100000000F7F6FA0100000000F6F6F901F6F6F901F6F6F901F7F6 F901F6F6F901F6F6F901F7F6F901F6F6F901F7F6F901F6F5F901F6F5F901F6F5 F801F6F6F901F6F6F901F6F6F901F5F5F801F6F5F801F6F5F801F6F6F901F6F6 F901F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801FCFCFD04FCFC FD07FDFDFD08FCFCFD08FCFCFD08FDFDFD08FDFDFD08FCFCFC07FCFCFD04F5F4 F701000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FBFA FB01FBFBFC04FCFCFD0EFAF9F914F4F0F117F0EDF01BF4F1F325F4F1F32BF4F1 F324F1EDEF1BEEE9ED16EFEAED16EEEAED16EDE9EC15EFEAED16EDE9EC15EFEB ED16EFEAED16EFEBED16EFEAED16EEEAEC16EFEAED16EFEAED16EFEAED16EFEA ED16EFEAED16EFEAED16EEE9EC16EEEAED16EFEAED16EFEAED16EDE9EC15EFEA ED16EEEAED15EFEBEE16EFEBEE16EFEBED16EFEBEE17F2EEF01BF4F1F327F6F3 F533F5F3F438F5F3F438F5F3F438F5F3F438F5F3F438F4F2F333F4F2F326F4F1 F41AFBF9F913FCFCFC0DFBFBFB05F9F8F9020000000000000000000000000000 0000000000000000000000000000000000000000000000000000FDFDFD02FBFB FC0CF8F7F822E9E5E83ED5C8C95AA289927090748A80977C908A93778A979980 92879073897E8D6F867A8D6F867A8D70867A8D6F867A8D70867A8D70867A8C70 86798D70867A8D7086798D70857A8D70857A8D7085798D70857A8E6F867A8E6F 867A8E6F867A8E70867A8D6F857A8D70867A8D70867A8C6F867A8D7086798D70 857A8C70867A8D7086798D71867A8D71867A8D70867A92768B80977B908E9477 89A094788AA795788BA794778AA794788AA795788AA6917486A194788C8EA48E A275D7CACD58E4DEE53DF4F2F428FBFBFC16FAFAFB0600000000000000000000 00000000000000000000000000000000000000000000FCFCFD02F9F9F912F1EF F234C6BCCB696A4E72C4412B68F63B2E74FD48448DFD484793FE474693FD4645 92FE454391FE454290FE444190FE44408FFE443F8DFE433E8DFE433E8CFE423D 8BFD423C8AFE423B8AFE413B88FD413A87FE413986FE403985FE403785FE3F37 84FE3F3683FE3F3582FE3E3481FE3D3480FE3D3380FE3D337FFE3C327EFD3C31 7DFE3C317CFE3B307BFE3B2F7BFE3B2E7AFD3A2D79FE3A2C79FE3A2B78FD392A 77FE392A77FE392976FE382875FE382874FE382773FE372771FE372672FE2F16 59FD2B0C52FD4A2B63D7AB9CB085E0DAE14DF7F7F921FCFCFC09000000000000 00000000000000000000000000000000000000000000FAFAFB0DEFEDF034A699 B084493B7BEF6C79C9FD4C6EE1FD3E67EAFD355EE8FE325CE6FE3059E4FD2E57 E2FE2E55E1FE2D53DFFE2C52DEFE2B51DCFE2A50DAFE294DD8FE284CD7FE284A D5FD2748D4FE2647D2FE2645D0FD2544CFFE2543CEFE2442CCFE2340CBFE233F C9FE223DC7FE213CC6FE203AC4FE1F38C2FE1F37C1FE1E35BFFE1E34BEFD1D33 BCFE1C31BBFE1B30B9FE1B2EB8FE1A2DB6FD192BB4FE192AB2FE1828B1FD1727 AFFE1726AEFE1625ACFE1523AAFE1522A9FE1420A7FE131FA6FD121DA4FE1923 A6FD1C219EFD34339BFD4C3A7DFD553563CACCC3D055F8F7F921FBFAFB060000 000000000000000000000000000000000000F7F7F904F6F5F71FBFB7CC694946 93F76A8BF0FD315DE9FD2B57E6FE2854E5FE2550E3FE234EE0FF224CDFFE2149 DDFF2047DCFF1F46DAFF1F44D8FF1D43D6FF1D41D4FF1C40D3FF1A3ED1FF1A3D CFFE193BCEFF183ACCFF1839CBFE1737C9FF1736C7FF1635C6FF1533C4FF1532 C3FF1430C1FF132EBFFF122CBDFF112ABBFF1129BAFF1027B8FF0F26B7FE0E25 B5FF0D23B3FF0D22B2FF0C20B0FF0B1FAFFE0B1DACFF0A1BAAFF0A1AA9FE0918 A7FF0817A6FF0816A4FF0614A2FF0613A1FF05119FFF04109EFF040E9CFF030C 9AFE030B99FE000695FE070F9BFC38318AFD4F3265CDDCD6DE4DFAFAFA16F5F5 F70200000000000000000000000000000000FAFBFC0BD8D5E33C4A4592D95B82 F2FD315EEAFD2D59E8FE2A56E6FE2753E5FE2451E3FE234FE1FE214CE0FE2049 DEFE2048DDFE1F47DBFE1E44D9FE1D43D7FE1C42D5FE1C41D4FE1A3FD2FE1A3D D0FE193CCFFE183ACDFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F26B8FE0E25 B6FE0D23B4FE0D22B3FE0C20B1FE0B1FB0FE0B1DADFE0A1BABFE0A1AAAFE0918 A8FE0817A7FE0816A5FE0614A3FE0613A2FE0511A0FE04109FFE040E9DFE030C 9BFE020B9AFE020A98FE010895FE050A96FC302A8EFDA395AF87F3F1F429F8F8 FA05000000000000000000000000B6B6B608E2E2E419C2C4E05D4B69D7F65278 EDFD315EE9FE2E5AE8FE2956E6FF2652E4FD2350E2FF224DE0FF214BDFFD204A DDFF2049DCFF1E46DAFF1E44D9FF1D43D7FF1C42D4FF1C40D3FF193FD1FF1A3D D0FD193BCEFF173ACCFF1839CCFD1736C9FF1735C8FF1534C6FF1533C5FF1532 C4FF132FC2FF122EBFFF112BBDFF112ABBFF1129BAFF1026B8FF0F26B8FD0E24 B5FF0C23B3FF0C22B2FF0B20B0FF0B1FB0FD0A1DACFF091AABFF0A1AAAFD0818 A8FF0817A6FF0816A4FF0614A3FF0613A2FF0511A0FF04109FFF040E9DFF040C 9BFF030C9AFE040C99FF060B97FE060894FE1F229EFD3C2369DFD8D5DB40D2D2 D312B2B2B20300000000A6A6A605BDBDBD60C8C8C872B2B4CDA98597D5FD6B87 DEFE6D87DFFE6985DEFF4A6EE2FE3F65E1FD3860E0FF3158DEFF2850DEFD214A DDFF1F48DDFF1E46DAFF1E44D8FF1D43D6FF1C42D4FF1C40D4FF1A3FD2FF1A3D D0FD193CCFFF183ACDFF1839CCFD1737CAFF1735C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABBFF1128BBFF1027B9FF0F26B8FD0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FD0B1DADFF0A1AABFF0A1AAAFD0817 A8FF0817A7FF0816A5FF0614A3FF0512A1FF0814A0FF111BA0FF1821A2FF2027 A2FF252CA3FF3C42A8FE4F53ABFE4C4FA5FE5052A6FD564D8EFDC8C7C4A7C0C0 C07BB6B6B62D00000000A1A1A10CCFCFCFF7D8D8D8FCD8D8D6FCD8D8D7FED9D8 D6FED8D7D5FED9D8D6FED9D8D6FFD1D4D9FEBEC3D4FFA3ADD0FF7187D2FE3A5E DCFF274EDCFF2148DAFF1D44D9FF1D43D6FF1C42D4FF1B40D4FF1A3FD2FF193C CFFE193BCFFF1839CCFF1838CCFE1737CAFF1736C8FF1535C7FF1433C5FF1432 C4FF1330C1FF132EC0FF122BBEFF1129BCFF1128BBFF1027B9FF0E26B7FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1EB0FE0A1CADFF091BABFF0A1AA9FE0918 A8FF0817A6FF0917A5FF0C19A4FF161DA4FF3840AAFF7E82B9FFACAEC8FFC6C7 D4FFD6D7D6FFD8D8D5FFD8D9D7FFD9D9D8FEDADAD9FEDCDBD9FDD9D9D9FCD8D8 D8FDC0C0C07400000000A1A1A10CCFCFCFF3D6D6D6FCD5D5D5FDD6D6D6FED6D6 D7FED5D5D6FED6D6D7FED4D5D6FED4D5D6FDD5D6D7FED8D9D9FED9D9D7FDC7C9 D0FE8596D2FE4A67D6FE2C4FD7FE1E44D6FE1C42D4FE1C41D3FE1A3FD2FE1A3D D0FD193CCFFE183ACDFE1839CCFD1737CAFE1735C8FE1635C7FE1532C5FE1532 C4FE1430C2FE132EC0FE112CBEFE112ABCFE1129BBFE1027B9FE0F26B8FD0E25 B6FE0D22B4FE0D22B3FE0C20B1FE0B1FB0FD0B1DADFE0A1BABFE0A1AAAFD0919 A8FE0D1CA6FE2530AAFE4B54B2FE9FA3C3FED9D9D8FEDDDDDCFED6D7D7FED5D5 D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D5FDD6D6 D6FDC0C0C07300000000A1A1A10DCFCFCFF5D5D5D5FDD5D5D5FDD6D6D6FED6D6 D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FDD6D6D6FED5D5D5FED5D5D6FDD4D4 D6FED4D5D6FECCCED6FE909DCCFE3C5CD5FE2549D4FE1C41D3FE1A3FD1FE193D D0FD193BCEFE1739CCFE1839CBFD1636CAFE1635C8FE1535C7FE1532C4FE1532 C3FE142FC2FE122DBFFE122BBDFE112ABCFE1128BAFE1027B9FE0F26B8FD0E25 B5FE0D22B4FE0D22B2FE0C20B1FE0B1EAFFD0B1DADFE0A1BABFE0B1BA9FD1826 AAFE4650AFFEACAEC9FED5D6D9FED5D5D7FED5D5D6FED5D5D5FED5D5D5FED5D5 D5FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED5D5D5FED5D5D5FDD5D5 D5FEC0C0C07400000000A1A1A10DCFCFCFF5D4D4D4FED4D4D4FED5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FED5D5D5FFD4D4D4FFD4D4D4FED5D5 D5FFD4D4D4FFD4D3D5FFD5D5D7FFB7BCD0FF6379CFFF294CD2FF1C40D2FF193D CFFE193CCEFF183ACDFF1839CCFE1737CAFF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FE0B1DADFF0E20ABFF2B38ADFE7F84 BEFFCBCCD4FFD7D7D7FFD3D3D4FFD4D4D4FFD5D5D5FFD4D4D4FFD5D5D5FFD4D4 D4FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD4D4D4FFD4D4D4FED4D4 D4FFC0C0C07400000000A1A1A10DCECECEF5D3D3D3FED3D3D3FED4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FED3D3D3FFD3D3D3FFD4D4D4FED4D4 D4FFD4D4D4FFD3D3D4FFD2D2D3FFD3D3D4FFC8CAD4FF8290CBFF3252D1FF1C3F CFFE193CCEFF1739CDFF1839CCFE1737CAFF1736C8FF1635C6FF1532C4FF1532 C3FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0C1FB0FE1324AEFF3B48B3FFA8ACCBFED4D4 D7FFD3D3D4FFD2D2D3FFD3D3D3FFD3D3D3FFD4D4D4FFD3D3D3FFD4D4D4FFD3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FED4D4 D4FFC0C0C07400000000A2A2A20CCDCDCDF4D2D3D2FDD2D2D2FDD3D3D4FED3D3 D4FED3D3D3FED4D4D3FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED4D4D4FED4D4 D4FED4D4D4FED4D4D4FED3D3D3FED2D2D3FED2D2D3FECCCDD3FE939FCEFE3855 CEFE1C3DCEFE183ACCFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F25B8FE0E25 B6FE0D23B4FE0D22B2FE0D21B1FE1426B0FE4955B5FEB3B6CEFED3D4D5FED2D2 D2FED2D2D3FED3D3D3FED3D3D3FED3D3D3FED4D4D4FED3D3D3FED4D4D4FED3D3 D3FED4D4D4FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED3D3D3FED2D2D2FDD3D3 D3FEBFBFBF7300000000A2A2A20CCECECEF3D3D3D3FDD2D2D2FDD3D3D3FED3D3 D3FED3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD2D3D4FFCFD0D2FF9AA3 CBFE3552CCFF193BCDFF1839CBFE1736CAFF1735C7FF1635C6FF1533C4FF1531 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0E22B3FF1226B2FF4956B8FEB5B8CEFFD2D2D3FFD1D2D2FED3D3 D3FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD4D4D4FFD2D2 D2FFD3D3D3FFD3D3D3FFD2D2D3FFD2D2D3FFD2D2D3FED2D2D2FED2D2D2FDD3D3 D3FDBFBFBF7300000000A2A2A20CCCCCCCEFD1D1D1F9CFCFCFFCCFD0D3FECFD0 D3FED0D0D0FFD3D2D1FFD4D4D3FFD3D3D4FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2D2FFD1D1D2FFC7C9 CFFE8893C9FF2947CCFF193ACBFE1737C9FF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBDFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D24B4FF1124B2FF3C4BB6FFAAAECFFED1D2D5FFD2D2D2FFD3D3D3FED2D2 D2FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD2D2D2FFD2D2D3FFD2D2 D2FFD4D4D4FFD5D5D4FFD4D4D2FFCECED1FFCCCCD0FECDCDD0FED0D0D0FAD1D1 D1F9BEBEBE7100000000A4A4A408C7C7C7A9CFD0CFC0B7B4C0E8A1B0DAFE9EAD D9FEA2ADD2FEACB5D1FEB9BED1FEC6C8D0FECECED0FED0D1D1FED1D1D2FED1D1 D1FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1 D2FEC1C4D0FE7181C7FE203FCAFE1837C9FE1736C8FE1635C7FE1433C5FE1432 C4FE1430C2FE132EC0FE122CBEFE1129BCFE1129BAFE1027B8FE0F26B7FE0E25 B6FE1025B5FE2B3CB4FE959BC6FECCCDD1FED0D0D1FED1D1D1FED1D1D1FED2D2 D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1D1FED1D1D2FED2D2D3FECECE D1FEC0C1CEFEAFB0C9FEA4A4C3FE9292BDFE8C8CBAFE9293BCFECAC8CBCDCDCC CDB4BDBDBD4F0000000000000000EFF0F109ECEAF03B7C6C9CBB3E6BF1FE3361 ECFE2F5DEBFF335CE2FF516FD3FF7D8FCDFE9EAAD1FFB3BAD1FFCCCDCFFED2D2 D2FFD1D1D1FFD2D2D1FFD1D1D1FFD1D1D1FFD2D2D2FFD1D1D1FFD1D1D1FFD0D0 D0FED0D0D0FFABB1CDFF4B61C7FE1A39C9FF1736C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B7FE0F26 B6FF182CB5FF7780C0FFC5C7D0FFD1D1D3FED1D1D1FFD1D1D1FFD1D1D1FED1D1 D1FFD2D2D2FFD1D1D1FFD1D1D2FFD0D0D1FFD3D3D3FFC4C5CDFFACAECAFF9194 C1FF5458A9FF1B219AFF030695FF020494FF020392FE15199CFEC3B5C864F1F0 F113C9C9CA010000000000000000F4F4F50EEDEBF03F7E709DBC4570F0FD3A66 ECFD3562EAFE315DE8FE2D59E7FE2955E5FD3259DEFE5471D6FE96A3CEFDC1C4 D2FED0D0D1FED0D0D1FED0D0D0FED1D1D1FED1D1D1FED1D1D1FED1D1D1FED0D0 D0FDCFD0D0FECDCDCFFE959FC9FD2F4AC6FE1836C8FE1635C7FE1533C4FE1532 C3FE142FC2FE122DBFFE122CBDFE112ABBFE1128BBFE1027B9FE1027B8FD1027 B6FE4555B9FEABB0CAFED0D0D1FECFCFD0FDD1D1D1FED0D0D0FED0D0D0FDD1D1 D1FED1D1D1FED0D0D0FED0D0D1FECDCED0FEBABCCCFE777BB6FE2C34A3FE0811 9BFE020A99FE020A98FE020A96FE020895FE010593FD171C9DFDC3B5C868F3F2 F318D7D7DA020000000000000000FCFDFD0BEFECF13D7E6F9CBB4A73F1FD3F69 EDFD3864ECFF345EE9FF305BE7FF2D57E5FD2A55E3FF2651E2FF2E55DDFD7388 CFFFB2B9CFFFCFCECEFFCFCFCFFFD0D0CFFFCFCFCFFFD0D0D0FFCFCFCFFFCFCF CFFDCFCFCFFFCECED0FFB8BBCBFD6173C5FF1837C8FF1735C6FF1533C5FF1532 C4FF1430C1FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF1128B8FD1F34 B7FF9097C6FFCECFD0FFCECECFFFD0D0CFFDCFCFCFFFD0D0D0FFCFCFCFFDCFCF D0FFCFCFD0FFCECECFFFCCCCCFFFA3A6C7FF4E55ACFF0D169FFF050F9DFF040D 9BFF030C9AFF010A98FF010795FF000694FF000392FD161B9CFDC3B4C766F7F6 F715000000000000000000000000FCFDFD0CEFEDF23E80709DBC527AF2FD466E EEFD3F68EBFF3862EAFF345EE8FF2F5AE6FD2B56E3FF2853E1FF2851E0FD2C53 DCFF5A75D1FFB4BACDFFCECECFFFCECFCEFFCFCFCFFFCFCFCFFFCFCFCFFFCECE CEFDCECFCFFFCDCDCEFFCCCDCCFD949DC6FF2E49C5FF1635C6FF1533C5FF1431 C4FF1330C1FF132EC0FF112BBEFF112ABCFF1129BBFF1128B9FF0F26B8FD4E5C BCFFAEB2CAFFCECECFFFCECECEFFCFCFCFFDCFCFCFFFCFCFCFFFCECECEFDCFCF CFFFCDCDCFFFCBCBCEFFA2A4C4FF323BA9FF0A16A1FF06119FFF040E9DFF030C 9BFF010A99FF010998FF000896FF010795FF000493FD171C9DFDC3B5C867F8F6 F815F4F4F9010000000000000000FDFDFE0BEFEDF13E81729DBB5C82F2FD4E75 EEFD466FECFF3F69EAFF3962E8FF345EE7FD2F59E4FF2B55E2FF2952E0FD2750 DEFF2C52DCFF627BD2FFBEC1CDFFCDCECEFFCECECEFFCECECEFFCECECEFFCECE CEFDCECECEFFCDCDCDFFCDCECEFDB8BBC8FF6273C1FF1837C6FF1633C5FF1532 C3FF142FC1FF132EBFFF122CBDFF112ABBFF1129BAFF1129B9FF172CB8FD7D86 C2FFC6C7CBFFCCCDCDFFCDCDCEFFCECECDFDCECECEFFCECECEFFCDCDCDFDCDCD CDFFCCCCCFFFA6A9C4FF3A43ABFF0C18A2FF0611A0FF04109EFF030D9DFF030C 9BFF020B9AFF010A98FF010896FF010795FF000593FD171C9DFDC3B4C866F8F6 F816F4F4FA010000000000000000FDFDFE0CF0EDF23E83739DBC668AF3FE5A7E EFFE5076EDFF486FEBFF4168E9FF3B63E7FE355EE5FF3159E3FF2D55E1FE2A52 DFFF274FDDFF3255D9FF7C8ECCFFC8CACEFFCCCCCCFFCDCDCDFFCDCDCDFFCDCD CDFECDCDCDFFCDCDCDFFCCCCCDFEC6C7CBFF808CC6FF213EC5FF1634C5FF1431 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1028B9FF3C4DB9FEA3A8 C6FFCECECDFFCCCDCDFFCDCDCDFFCECECEFECECECEFFCECECEFFCDCDCDFECCCC CDFFBDBECAFF4F58B0FF101EA4FF0713A2FF0511A0FF04109FFF040E9DFF030C 9BFF030B9AFF020B98FF020996FF020895FF000593FE171C9DFEC2B5C867F8F6 F816F4F4F9010000000000000000FDFEFE0BF0EDF23D83739DBC6C8DF3FD6587 F0FD5D80EEFF5479ECFF4B71EAFF456BE8FD3E65E6FF385FE3FF335AE2FD2F56 E0FF2C52DEFF2A4FDCFF4464D6FFA6AECCFFCDCCCEFFCBCCCCFFCCCCCCFFCCCC CCFDCCCCCCFFCCCCCCFFCBCCCCFDCACACBFF969EC7FF364FC3FF1634C5FF1531 C3FF1330C1FF132EC0FF122CBEFF112ABCFF122ABBFF1229BAFF6672BDFDBCBE C9FFCCCCCCFFCCCCCCFFCDCDCDFFCCCCCCFDCDCDCDFFCCCCCCFFCBCBCCFDCACB CCFF787DB7FF1A27A7FF0615A3FF0613A2FF0511A0FF04109EFF040F9DFF040D 9BFF030C9AFF030B98FF020996FF020896FF010694FD191E9EFDC2B4C766F8F6 F815F5F5FA010000000000000000FDFEFE0CF0EDF23D83739DBC6C8DF3FE698A F0FE6688EFFF6082EDFF597CEBFF5174E9FE496DE7FF4167E5FF3C61E2FE365C E1FF3157DFFF2E53DDFF3457D8FF6C81CFFFCCCCCCFFCACBCBFFCBCCCCFFCBCB CBFECCCCCCFFCCCCCBFFCBCBCBFECACACBFFB0B4C5FF5669C0FF1432C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122BBCFF122BBBFF1930B9FF7D87C2FEC5C6 CBFFCACACBFFCBCBCBFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCACACBFEB8B8 C6FF3642ADFF0A18A5FF0815A3FF0714A2FF0612A0FF05109EFF050F9DFF040E 9CFF040D9BFF030C99FF040B98FF040A96FF040994FE1C219FFEC2B4C767F8F6 F816F5F5FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF4FE6989 F0FE6888EFFF6787EEFF6484ECFF5F7EEBFE5678E9FF4E71E6FF476AE4FE4064 E2FF3B5FE0FF375ADEFF3155DBFF4B68D7FFB2B7CAFFCBCBCCFFCBCBCBFFCCCC CBFECBCBCBFFCBCBCBFFCBCBCBFECACACBFFC2C2C4FF727EBFFF1734C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122CBCFF132CBBFF253ABAFF8B93C5FEC9CA CCFFCACBCBFFCBCBCCFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCDCDCDFE8B8F BBFF2431A9FF0A18A6FF0815A4FF0714A3FF0713A1FF06129FFF06119EFF0710 9CFF060F9BFF060E9AFF070E98FF080E97FF090D96FE2026A0FEC2B4C767F7F6 F716F5F5FA010000000000000000FDFDFD0CEFEDF13D84739DBC6D8EF4FE6A8A F1FE6888F0FE6787EEFE6886EDFE6785ECFE6281EAFE5D7DE8FE5676E6FE4F6F E4FE486AE2FE4264E0FE3C5EDEFE4766DAFE8B99D0FECACACBFECACACBFECBCB CAFECBCBCBFECBCBCBFECACACAFEC9C9CAFEC7C7C5FE838DC0FE2540C5FE1A36 C4FE1733C2FE1631C1FE152FBFFE152DBDFE142CBCFE3347BAFE969CC3FEC9C9 CAFEC9CACAFECACACAFECBCBCBFECACACAFECBCBCBFEC9C9CAFED0D0CDFE5860 B3FE1422A8FE0C19A6FE0B17A5FE0A16A3FE0A15A2FE0A15A0FE0A149FFE0B14 9EFE0B139DFE0B139CFE0C139BFE0E149AFE0F1499FE272CA3FEC2B3C766F8F6 F815F5F5FA010000000000000000FDFEFE0CEFEDF13E84749DBC6C8DF4FE6989 F0FE6988F0FF6788EEFF6886EDFF6785ECFE6685EAFF6584E9FF6280E8FE5D7C E6FF5876E4FF5270E2FF4B6BE0FF4C6ADDFF798CD4FFC9CACBFFC8C9CAFFCACA CAFECACACAFFCACACAFFCACAC9FEC9C9CAFFC8C7C7FF8D96C1FF334CC4FF1F3B C5FF1C37C3FF1A35C1FF1933BFFF1832BEFF162FBDFF4455B9FFA1A5C3FEC9C9 C9FFC9C9C9FFCACACAFFCACACAFFCACACAFECACACAFFC8C8C9FFC6C6C8FE3D48 B1FF0F1EA9FF0F1DA7FF0E1BA6FF0F1BA5FF0F1BA3FF0F1AA2FF101AA1FF111A A0FF111AA0FF131B9FFF151B9EFF171D9EFF191E9DFE3135A8FEC1B3C767F7F6 F816F5F6FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EDFF6785ECFE6585EAFF6584E9FF6482E8FE6481 E7FF637FE6FF5F7CE5FF5C78E3FF5A75DFFF7C8FD6FFC8C9CCFFC7C8C9FFC9C9 C9FEC9C9C9FFC9C9C9FFC9C9C8FEC8C8C8FFC7C7C7FF989FC3FF445AC3FF2741 C7FF243EC5FF223BC3FF1F39C1FF1F37BFFF1B33BEFF5564BBFFACAFC2FEC8C8 C8FFC8C8C8FFC9C9C8FFC9C9C9FFC9C9C9FEC8C8C8FFC7C8C9FFACAFC2FE3441 B1FF1422ABFF1523AAFF1522A9FF1623A8FF1723A6FF1723A5FF1923A5FF1A24 A4FF1C24A4FF1F26A4FF2128A4FF2429A4FF282CA4FE4145AEFEC1B2C667F7F5 F815F6F6FB010000000000000000FDFEFE0CEFEEF13D84749CBB6C8EF3FE6A8A F0FE6988F0FE6787EFFE6987EEFE6785ECFE6684EBFE6684E9FE6582E8FE6481 E7FE6480E6FE647FE5FE647EE4FE657DE1FE8394D8FEC8C9CDFEC7C8C9FEC9C9 C9FEC9C9C9FEC9C9C9FEC8C8C8FEC8C8C8FEC7C7C7FEA3A9C4FE576AC6FE334C CAFE2F48C8FE2D45C6FE2A42C4FE2A40C2FE243CC1FE6572BDFEB4B7C3FEC8C8 C8FEC8C8C8FEC9C9C8FEC9C9C9FEC9C9C9FEC8C8C8FEC7C8C9FE9C9FBFFE3844 B3FE1F2DAFFE202EAEFE212DADFE222EACFE242EABFE242FAAFE2730AAFE2932 ABFE2C34ABFE2F36ABFE3339ABFE383CACFE3D40ACFE5357B6FEC0B2C667F7F5 F816F7F7FB010000000000000000FDFEFE0CEFEEF23E84749DBC6C8DF4FE6989 F0FE6989F0FF6888EFFF6987EEFF6785ECFE6685EBFF6684EAFF6583E8FE6482 E8FF6480E6FF647EE5FF647EE3FF667EE1FF8596D9FFCACBCEFFCACACBFFCBCB CBFECBCBCBFFCBCBCBFFCBCBCBFECACACAFFCBCBCAFFA8AEC8FF6375C8FF445B CEFF4057CCFF3D53CBFF3A50C8FF394EC6FF3348C5FF7480C1FFBCBDC6FECACA CBFFCACACAFFCBCBCBFFCBCBCBFFCBCBCBFECACACAFFCACACBFF9FA3C2FE4550 B8FF303CB5FF313EB4FF333DB3FF343EB2FF3740B2FF3942B2FF3C44B2FF3E46 B3FF4148B2FF444AB2FF474CB3FF4A4EB3FF4C4FB3FE5E62BBFEBFB1C667F7F5 F816F7F7FB010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6987EDFF6886EDFE6685EBFF6684EAFF6583E9FE6582 E8FF6581E6FF647FE5FF647EE4FF677FE1FF8899DAFFCECFD2FFCECECFFFCFCF D0FECFCFCFFFD0D0D0FFCFCFCFFECFCFCFFFCECECEFFA9AFCAFF6A7BCDFF576B D3FF5368D1FF5165D0FF4E62CDFF4E60CCFF495CCBFF7984C4FFBBBDC8FECECF CFFFCFCFCFFFD0D0CFFFD0D0D0FFD0D0CFFECFCFCFFFCFCECFFFA5A8C4FE5761 BDFF4550BDFF4752BCFF4851BBFF4952BAFF4A53B9FF4C54B9FF4D54B8FF4E54 B8FF4E54B7FF4F54B7FF4F54B6FF4F53B5FF4E52B4FE5F63BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFDFD0CEFEEF13E84739DBC6D8EF4FE6A8A F1FE6989EFFE6888EEFE6987EEFE6886EDFE6685EBFE6684EAFE6683E9FE6582 E7FE6581E7FE657FE5FE647EE4FE6981E1FE909FDAFED1D2D3FED2D2D3FED2D2 D3FED3D3D3FED3D3D3FED2D2D2FED2D2D2FED0D0D0FEA7ADCCFE697BD0FE5E71 D5FE5C6FD3FE5B6ED2FE5A6DD1FE5A6CD0FE5869D0FE7B86C7FEB9BCCBFED2D2 D2FED2D2D2FED3D3D2FED3D3D3FED3D3D2FED2D2D2FED2D2D2FEB8BAC8FE6770 C3FE525CC2FE535DC0FE525CBFFE525BBEFE525BBCFE525ABBFE5158BAFE5157 B9FE5056B8FE4F55B7FE4F54B5FE4E53B5FE4E52B4FE5F62BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFEFE0CEFEDF23E84749DBC6D8EF4FE6A8A F1FE6989F0FF6887EFFF6987EEFF6886EDFE6585EBFF6584E9FF6683E9FE6582 E7FF6580E7FF657FE5FF647EE3FF6D84E0FFA0ABD6FFD5D5D6FFD6D6D6FFD6D6 D6FED7D7D7FFD7D7D7FFD6D6D6FED6D6D6FFD2D2D1FFA3ABCDFF6578D4FF5E71 D5FF5C6FD4FF5B6ED2FF5B6DD1FF5B6DD0FF5B6BD0FF7681CAFFB6BACEFED5D5 D6FFD6D6D6FFD6D6D6FFD7D7D7FFD6D6D6FED6D6D6FFD5D5D6FFD0D0D0FE767E C5FF5560C2FF545EC0FF525CBEFF525BBDFF525ABCFF5259BBFF5158BAFF5157 B9FF5056B8FF4F55B7FF5055B6FF4F54B6FF4F53B5FE6063BCFEBFB0C667F7F5 F815F8F8FC010000000000000000FCFDFD0CF0EEF13E84749CBC6C8EF4FE6A8A F1FE6989F0FE6787EFFE6987EEFE6886ECFE6685EAFE6683EAFE6683E9FE6582 E8FE6581E7FE657FE5FE637EE4FE758BDEFEBDC1D0FED9D9DAFED9D9D9FEDADA DAFEDADADAFEDADADAFED9D9D9FED9D9DAFED1D1D2FE98A2CDFE5E73D7FE5E72 D6FE5C70D4FE5B6ED3FE5B6DD1FE5B6CD0FE5B6CCFFE6A77CBFEAEB3D0FED8D8 D9FED9D9D9FED9D9D9FEDADADAFED9D9D9FEDADADAFED9D9D9FEDBDBD9FE8E94 C5FE5C66C1FE555FC0FE535CBFFE535CBEFE535BBDFE535ABCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4E54B6FE4F52B5FE6062BCFEBFB1C667F7F5 F816F8F8FC010000000000000000FCFDFD0CF0EEF23E84749DBC6D8EF4FD6A8A F1FD6889F0FE6888EFFE6887EEFE6786EDFD6685EBFE6684E9FE6583E9FD6582 E7FE6580E7FE6580E5FE6881E1FE8D9CD8FEDAD9DAFEDEDEDEFEDFDFDFFEDFDF DFFDDFDFDFFEDFDFDEFEDEDEDEFDDDDEDEFEC9CBD4FE8894CEFE5D71D7FE5E72 D6FE5C70D4FE5C6ED3FE5C6ED1FE5B6DD1FE5C6CD0FE6371CCFEA7ADD1FDD9D9 DBFEDEDEDEFEDEDEDEFEDFDFDFFEDFDFDFFDDFDFDFFEDEDEDEFEDFDFDFFDB4B7 CFFE6971C4FE555FC1FE535DBEFE535CBEFE535BBCFE5359BCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4F53B6FE4F53B5FD6063BCFDBFB1C666F7F5 F816F8F8FC010000000000000000FCFDFD0CEFEEF23E84749DBC6C8EF3FE6989 F0FE6989F0FF6888EFFF6987EDFF6785ECFE6685EBFF6684EAFF6582E8FE6582 E8FF6581E6FF6580E5FF768CE0FFB8BFD8FFE3E3E4FFE2E2E2FFE3E3E3FFE3E3 E3FEE3E3E3FFE3E3E2FFE2E2E2FEE0E1E2FFBBC0D9FF7585D2FF5E73D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5C6CD0FF5E6ECEFF989FCBFED5D5 D9FFE2E2E3FFE2E2E2FFE3E3E3FFE3E3E3FEE3E3E3FFE2E2E2FFE1E1E2FED6D6 DBFF7D84C6FF5861C0FF535DBFFF525CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4E52B4FE5F62BBFEBFB1C567F6F5 F816F8F8FC010000000000000000FDFEFE0CF0EEF23E84739DBC6D8EF4FE6A8A F1FE6888EFFF6888EFFF6887EEFF6886EDFE6685EBFF6683E9FF6583E9FE6581 E7FF6581E7FF6983E3FF92A1D8FFDADBE0FFE3E3E4FFE5E5E4FFE4E4E4FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E4E4FEE0E0E2FFAEB6DAFF677AD4FF5E73D6FF5E72 D5FF5C6FD5FF5C6FD3FF5C6ED1FF5B6DD1FF5B6CD0FF5C6BCEFF828BC5FEC8C9 D5FFE3E3E4FFE4E4E4FFE4E4E4FFE4E4E4FEE5E5E5FFE5E5E5FFE4E4E4FEE3E3 E3FFB6B9D1FF6971C1FF545EBEFF535DBEFF535BBDFF535ABCFF5258BAFF5258 BAFF5157B8FF5056B8FF5055B6FF4F54B6FF4F53B4FE6063BCFEBFB1C667F6F5 F816F8F8FC010000000000000000FDFEFE0BF0EEF23D84739CBB6D8EF4FD698A F1FD6888EFFF6787EFFF6886EDFF6886EDFD6584EAFF6583EAFF6583E9FD6682 E7FF6883E6FF8296DDFFC8CCDAFFE3E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5 E5FDE5E5E5FFE4E4E4FFE5E4E5FDD6D7DDFF98A2D2FF6175D6FF5E73D6FF5E71 D5FF5D6FD5FF5B6ED2FF5B6DD1FF5B6DD1FF5B6CCFFF5C6BCEFF6774CAFDAEB3 D0FFDFDFDFFFE4E4E4FFE4E4E4FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE4E4 E4FFDEDEE0FF999EC8FF5D66BFFF535DBFFF535BBCFF525ABBFF5259BAFF5258 BAFF5056B9FF4F55B7FF4F55B5FF4F54B5FF4F53B5FD6063BCFDBEB0C567F6F4 F716F7F7FB010000000000000000FDFEFE0CF0EDF23E83749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EEFF6786ECFE6685EBFF6684E9FF6683E8FE6783 E7FF788EDFFFBCC3D8FFE2E2E2FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E3E4FEBEC3DAFF7585D3FF5F74D7FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6BCEFF5B6ACDFE8E96 CBFFD0D1DAFFE4E4E4FFE4E4E4FFE5E5E5FEE5E5E5FFE5E5E5FFE5E5E5FEE5E5 E5FFE3E3E4FFD3D3DDFF8F94C4FF5B65BEFF545CBDFF535ABCFF5259BAFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4F53B5FE6063BCFEBEB0C567F6F4 F716F8F8FB010000000000000000FDFDFE0BEFEDF23D84749CBB6C8EF4FE6989 F1FE6888F0FE6787EFFE6886EDFE6886ECFE6685EAFE6684EAFE6784E8FE8195 DDFEBAC2DCFEE0E1E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED7D9E0FE9DA7D7FE6276D8FE5F74D7FE5E72D6FE5D71 D6FE5D6FD5FE5C6FD2FE5C6ED1FE5B6CD0FE5B6CD0FE5B6ACEFE5B6ACDFE6D7A C8FEB8BCD4FEE2E2E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED1D2DBFE9599C7FE5D65BCFE535BBCFE535ABBFE5258 B9FE5157B8FE4F55B7FE4F54B6FE4E53B6FE4E52B5FE5F63BCFEBAAABF68F6F4 F615000000000000000000000000F8F8F80DEFEDF33E8376AEBC6D8EF3FD6A8A F0FD6989EFFF6888EEFF6987EDFF6887ECFD6886EAFF6F8BE5FF96A5D8FDCBCF E1FFE0E0E2FFE5E5E6FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5 E5FDE4E4E4FFE4E4E4FFC0C6DEFD7888D4FF6074D9FF5F74D8FF5E72D6FF5D71 D6FF5D70D4FF5C6FD3FF5C6ED1FF5B6CD1FF5B6CD0FF5B6ACEFF5B6ACDFD5B6B CCFF9198C7FFD1D2D9FFE3E3E4FFE5E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE4E4E5FFD4D5DEFFAFB1CEFF6B72BEFF565DBAFF5359 BAFF5258B9FF5157B8FF5055B6FF4F54B6FF4F53B5FD6165BCFDA892A86FF1ED F017E1E1E3010000000000000000F5F5F60BEEECF43D8278BCBB6D8EF3FD698A F2FE6888F1FE6586F0FF6686EDFF768FE0FD9AAADBFFB9C2E1FFD3D6DEFDE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FDE4E4E4FFD1D4DDFF94A0D5FD6378D8FF6074D8FF5F74D8FF5E72D6FF5E71 D6FF5C70D5FF5B6FD3FF5B6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFD5969 CDFF6875C9FFAFB4D1FFDDDEE0FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E5FFDFDFE1FFC2C4D8FFA4A6CBFF7A7D B9FF5A5EB3FF4E54B7FF4E53B6FF4E53B6FE4F53B5FE6064BEFDA28AA171EFEB EE15D0D0D10100000000A7A7A704C9C9C957DBDBDB7C9F99C2D18CA3E5FE8EA1 DFFE96A6DCFFA2B0DBFFB6BEDAFFC9CFE1FED7D9E1FFE0E1E3FFE5E5E5FEE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E4FFE4E4 E4FEDCDDE2FFACB4D8FF6A7FD8FE6075DAFF5F74D9FF5F74D8FF5D71D7FF5D71 D5FF5D6FD4FF5B6ED3FF5B6DD1FF5B6CD0FF5B6CCFFF5B6ACDFF5A6ACDFE5A6A CCFF5A6ACCFF7A85C6FFC5C8D7FFE4E3E3FEE4E4E4FFE5E5E5FFE5E5E5FEE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE5E5E5FFE4E4E4FFDBDBDFFFD0D0 DCFFBDBDD1FFA4A6C5FF9194BEFF8587BDFF797BBBFE8385C1FEB7ACB7A0D0D0 D062B9B9B927000000009F9F9F0BD7D7D7D1E2E2E2E1D6D5DCF4D0D5E3FED1D5 E2FED4D7E0FED9DADFFFE0E0DFFFE5E5E4FEE5E5E5FFE5E5E5FFE4E5E5FEE5E5 E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE0E0 E1FEBBC1D8FF7688D7FF6177DBFE6075D9FF5F74D8FF5F73D8FF5E72D7FF5E72 D6FF5D70D4FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5D6CC8FF8991CAFFCDCFDCFEE3E3E4FFE5E4E4FFE6E6E6FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE6E6 E6FFE4E4E3FFDCDCDEFFD5D5DBFFD1D1DBFECCCDDBFECDCEDBFEDCDADCE9E1E1 E1DCC4C4C462000000009E9E9E0CD8D8D8F3E5E5E5FDE3E3E4FDE4E4E5FEE4E4 E5FEE4E4E5FEE3E3E4FFE4E4E5FFE4E4E4FDE4E4E4FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE4E4E4FFE5E5E5FFE5E5E5FFE4E4E4FFE3E3E4FFE2E2E3FFC6CA DBFD8292D5FF6279DBFF6077DAFD5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CCFFF5B6ACEFF5A6ACDFD5969 CDFF5868CBFF5968CAFF606DC8FF979ECBFDD5D6DDFFE3E4E4FFE4E4E4FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4 E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E5FEE4E4E5FEE4E4E4FEE4E4E4FDE5E5 E5FDC6C6C673000000009E9E9E0CD8D8D8F4E5E5E5FDE5E5E5FDE6E6E6FEE6E6 E6FEE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FEE6E6E6FFE6E6E6FFE6E6E6FEE6E6 E6FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE4E5E5FFE3E3E4FFC8CCDCFF8191 D5FE667CDBFF6078DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6DD2FF5B6DD1FF5B6CD0FF5B6ACEFF5A69CDFE5969 CDFF5868CBFF5867CAFF5966C9FF636FC8FE9A9FCBFFD6D6DEFFE4E4E5FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE5E5E5FEE5E5E5FDE5E5 E5FEC6C6C673000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FEE7E7E7FEE6E6E6FEE6E6E6FEE7E7E7FEE7E7E7FEE6E6E6FEE7E7E7FEE6E6 E6FEE6E6E6FEE6E6E6FEE5E6E6FEE5E5E5FEE3E3E2FEC3C7D8FE8092D9FE647C DCFE6179DCFE6077DBFE6076DBFE5F74DAFE5F74D9FE5F74D7FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6BD0FE5B6ACEFE596ACDFE5869 CDFE5868CBFE5867CBFE5865C8FE5865C8FE636FC6FE9198C9FED4D5DFFEE5E5 E6FEE4E4E5FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE7E7 E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE6E6E6FEE6E6E6FEE6E6 E6FEC6C6C674000000009E9E9E0DD8D8D8F5E6E6E6FEE6E6E6FEE7E7E7FFE7E7 E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE6E6E6FFE6E6E6FFE7E7E7FEE7E7 E6FFE6E6E5FFE5E5E6FFE4E5E5FFDDDEE2FFB3BBDAFF798CDCFF647DDEFF617A DEFE6179DCFF6077DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CAFF5865C9FF5864C7FE5764C6FF5E6AC5FF868CC4FEC7C8 D8FFE3E3E5FFE5E5E6FFE5E5E5FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FFE6E6E6FFE6E6E6FEE6E6 E6FFC6C6C674000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FFE7E7E7FEE6E6E6FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FFE7E7E7FEE6E6 E6FFE5E6E6FFE6E6E6FFCFD2DDFF919FD9FF7187DFFF647CE0FF627BDFFF617A DDFE6178DCFF6077DCFF5F77DAFE5F74D9FF5F74D8FF5F74D8FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACDFF5A6ACCFE5969 CDFF5868CBFF5866CBFF5865C8FF5764C8FE5764C6FF5662C5FF5C67C2FE7078 C6FFA4A8C8FFDCDDE0FFE6E6E6FFE4E5E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FEE6E6E6FEE6E6 E6FFC7C7C774000000009E9E9E0CD8D8D8F4E6E6E6FDE6E6E6FDE7E7E7FEE7E7 E7FEE6E6E7FFE6E6E6FFE6E6E7FFE6E6E7FEE6E6E7FFE5E6E6FFE8E8E8FEE7E6 E7FFCDD0DCFFA4B1DCFF798EDDFF6780E1FF637DE1FF637CE0FF617BDEFF6079 DEFE6179DDFF6077DCFF5F76DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5969CCFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C6FF5662C4FF5661C4FE5761 C3FF5E68C2FF7D84C4FFB0B2CFFFD7D7DBFFE8E8E7FFE7E7E8FFE6E6E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FEE6E6E6FEE6E6E6FDE6E6 E6FEC6C6C673000000009E9E9E0CD9D9D9F3E7E7E7FCE6E6E6FDE7E7E7FEE6E6 E7FEE6E7E7FEE6E6E7FEE5E6E7FEE6E7E7FDE6E7E9FEDEDFE3FEC3C8D6FD90A0 D8FE748DE4FE6C85E4FE657EE3FE647EE3FE637DE1FE637CE0FE617BDFFE617A DDFD6179DCFE5F77DBFE6076DBFD5E74D9FE5E73D8FE5E73D7FE5D72D6FE5D72 D5FE5D70D5FE5B6ED3FE5B6DD2FE5A6CD0FE5A6BCFFE5A69CDFE5A6ACDFD5869 CCFE5767CAFE5766CAFE5765C8FE5864C8FD5763C5FE5662C5FE5661C4FD5660 C3FE545FC2FE5862C0FE5F68C0FE6F76C4FE9DA0C5FEC7C8D1FEDCDCDFFEE4E4 E5FEE4E5E5FEE5E5E5FEE5E5E6FEE5E5E6FEE5E6E6FEE5E5E6FEE6E6E7FCE7E7 E7FDC7C7C77300000000A4A4A40CC6C6C6D8DADADAE6D2D1D6F2C9CCD7FDCCD0 DCFEC6CAD7FEB7BFD7FFAEB8D9FF9CACE0FD8A9EE3FF7C95E3FF718BE5FD6884 E6FF6481E7FF647FE5FF647EE3FF647EE2FF637CE1FF637CE1FF617BDFFF6179 DEFD6179DDFF6077DCFF6076DAFD5F75DAFF5F73D8FF5F73D7FF5E71D6FF5E71 D6FF5D70D5FF5B6FD3FF5B6ED2FF5B6DD1FF5B6BCFFF5B6ACDFF596ACCFD5969 CDFF5867CBFF5866CBFF5865C9FF5763C7FD5764C6FF5662C4FF5561C4FD5660 C3FF555FC2FF555FC1FF535DBFFF545DBEFF5A61BDFF646BBEFF7277C0FF8186 C3FF989AC7FFADAECAFFC1C2CFFFC0C0CCFEC7C8D3FEC7C6CFFDD0D0D1EBD2D2 D2E3BFBFBF6600000000A4A4A401C3C3C31CE0DFE235A599B894889AE0FD708F EFFE708EEEFE6F8CEDFF6E8BEBFE6C89EBFE6986E9FF6784E9FF6683E9FE6582 E8FF6581E6FF647FE4FF647EE3FF637DE3FF627CE2FF627CE1FF607BDFFF617A DEFE6078DDFF6077DCFF6077DBFE5F74D9FF5F73D9FF5F73D8FF5E72D7FF5E72 D5FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C5FF5762C5FF5661C5FE5660 C3FF545EC2FF555FC0FF535DBFFF535CBEFF535BBDFF535ABCFF545BBBFF565C BAFF575BBAFF585DB9FE595DB8FF585BB7FE5E63BBFE503C7CFDDCDAE05FD5D5 D523BEBEBE0D0000000000000000F2F2F402F7F5F81BC3BBCF6B696FB8FA7D9A F5FD6888F0FE6788EFFE6887EEFF6886ECFD6685EAFF6684E9FF6683E8FD6582 E7FF6481E7FF647EE5FF647EE4FF637DE3FF627CE2FF627CE1FF617BDEFF6179 DEFD6178DDFF6076DCFF6076DBFD5F74DAFF5F74D9FF5E73D8FF5D72D6FF5D71 D6FF5C70D5FF5C6FD3FF5B6ED2FF5B6DD1FF5A6CD0FF5A69CEFF5A6ACDFD5869 CDFF5868CAFF5867CAFF5765C9FF5764C8FD5663C6FF5662C4FF5661C5FD5560 C3FF555FC2FF555FC1FF525CBFFF535CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5156B9FF4F55B8FF4F54B6FE4D51B4FE5D5FB5FD593E75D8E6E1EA3BFCFC FD0C000000000000000000000000E9E8EA01FAFAFB13DBD4DD4D5C4678E08AA0 EDFD6786EEFD6889EEFE6887EEFE6886EDFD6685EAFE6584EAFE6582E9FD6481 E8FE6480E7FE657FE5FE657EE4FE647EE3FE637DE2FE637CE1FE617BDFFE617A DEFD6179DDFE6077DCFE6077DBFD5F75DAFE5F74D9FE5F74D8FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6CD0FE5B6ACEFE5A6ACDFD5969 CDFE5868CBFE5867CBFE5865C9FE5864C8FD5764C6FE5762C5FE5661C5FD5560 C3FE545EC2FE545EC1FE525CBFFE525BBEFE525ABDFE5259BCFE5259BBFE5258 BAFE5157B9FE5157B8FE4F54B5FE656AC0FC645B9EFDA99AB580F3F1F425F9F9 FA0600000000000000000000000000000000FBFBFC09F3F0F12EAD9BAA85645B 94FA93A8EFFD6989EEFD6787EDFE6785ECFD6684EAFE6683E9FE6682E8FD6581 E7FE6580E6FE647EE4FE647DE3FE637DE2FE627CE1FE627BE0FE617ADEFE6179 DDFD6178DCFE6076DBFE6076DAFD5F74D9FE5F73D8FE5E73D7FE5D71D5FE5D71 D5FE5C6FD4FE5C6ED2FE5B6DD1FE5B6CD0FE5A6BCFFE5A69CDFE5A69CCFD5968 CCFE5867CAFE5867CAFE5765C8FE5764C7FD5663C5FE5662C4FE5661C4FD5560 C2FE555FC1FE555FC0FE535DBEFE535CBDFE535BBCFE535ABBFE5259BAFE5258 B9FE5156B8FE5156B7FE6266BDFD7A74B2FD5D406CCFDCD6DF46FBFAFB100000 000000000000000000000000000000000000FBFAFB01FAFAFA14EBE7EA40A392 A791645388F48B97D7FD93ACF9FD7492F1FD6686ECFD6484EBFE6382EAFD6381 E9FE6581E9FE6D88E9FE6F89E8FE6F88E7FE6F88E6FE6F87E5FE6E86E3FE6E85 E2FD6D84E1FE6D82E0FE6C82DFFD6C81DEFE6C80DDFE6B7FDCFE6A7EDBFE6A7D DAFE697CD9FE687BD8FE687AD7FE6879D6FE6778D5FE6776D4FE6776D3FD6675 D2FE6574D1FE6573D0FE6471CEFE6470CDFD636FCCFE636ECBFE5E6AC8FD5560 C4FE535EC2FE525DC1FE515BBFFE505ABEFE515ABDFE5058BCFE5A61BFFE686E C4FE8186CFFE9297D5FD70649CFD6F5379CBCFC5CF5CF8F6F81FFBFAFB040000 00000000000000000000000000000000000000000000FDFCFD05FAF9FA16F0EE F137CFC7D560725A7FB365578BE5776EA0F47677B2FA7776B1F97775B2FA7775 B1FA7674B0FA7674AFFA7673AFFA7673AEFA7572AEFA7572ADFA7571ABFA7471 ABFA7571AAFA7470A9FA7470A9FA746FA9FA746EA8FA736EA8FA736DA7FA736D A7FA726DA6FA726CA6FA726BA5FA726BA4FA716AA4FA716AA3FA7169A3FA7168 A2FA7167A2FA7067A1FA7066A1FA7066A0FA7065A0FA70659FFA6F659EFA6F64 9DFA6F649DFA6F639CFA6E639CFA6D629BF96D629BFA6D619AFA6D6198F96C5F 97FA675384F6593B69E381647DA9D7CED753F8F6F824FBFBFB09000000000000 0000000000000000000000000000000000000000000000000000FBFBFB03FCFB FC0EF9F8FA1DE3DDE432DAD5DE4AD7D1DD5CCDC6D365A28D9C76A28D9C76A28D 9C76A18C9C77A28C9B77A18C9B77A28C9B76A28C9A77A28C9B77A18C9A77A28C 9B76A28C9B77A28C9A77A28C9A77A28C9A77A28C9A77A28C9A76A28B9A77A28C 9A77A18B9A76A18B9A77A28B9A77A28B9977A28A9977A28B9977A18A9977A28B 9877A28A9877A18B9876A18B9977A18B9976A18B9976A18A9877A18B9977A18B 9976A18B9977A18B9977A18B9976A18B9976A08A9877A18A9876A0899776B09E AB6FCFC6D161DCD5DD52EAE5E937FAF9FA1AFBFAFB09FCFCFC01000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F7F7F903FCFCFC08FBFBFC10FAF9FA17F7F6F718EEEAED18EEEAEC19EEE9 EC18EFEBED19EFEBED19EFEBED19EEEAEC19EFEBED19EFEBED19EFEBED19EEEA ED18EFEBED19EFEBED19EDE9EB18EFEBED19EFEBED19EFEBED19EFEBED19EFEB ED19EFEBED19EFEBED19EFEBED19EEEAEC18EFEBED19EFEBED19EEEAEC19EEEA EC19EEEAEC18EEEAEC19EFEBED19EEEAEC18EFEBED19EFEBED19EFEBED19EEEA EC19EFEBED19EFEBED19EEEAEC19EFEBED19EEEAEC19EEEAEC19EEEAEC19F2F0 F119F9F8F918FBFBFC14FDFCFD0BFAF9FA030000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000F6F6F901F6F6F901F6F5 F801F7F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F6 F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6 F901F6F6F901F6F6F901F6F6F901F6F6F901F6F5F801F6F5F801F6F5F801F6F5 F801F5F5F801F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801F6F5 F801F6F6F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5 F801000000000000000000000000000000000000000000000000000000000000 00000000000000000000FFFFFFFFFFFFFFFFFFC14000000003FFF80000000000 003FF00000000000001FE00000000000000FE000000000000007C00000000000 0003C00000000000000380000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001800000000000000180000000000000018000000000000003800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0003800000000000000180000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000180000000000000038000000000000003C00000000000 0007C000000000000007E00000000000000FF00000000000000FFC0000000000 003FFFE00000000003FF } OnCreate = FormCreate Position = poScreenCenter LCLVersion = '2.0.12.0' OnClose = FormClose OnCreate = FormCreate OnHide = FormHide object pnlInfo: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 11 Height = 302 Top = 11 Width = 196 AutoSize = True BorderSpacing.Around = 11 BevelInner = bvRaised BevelOuter = bvLowered BevelWidth = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 302 ClientWidth = 196 ParentColor = False ParentFont = False TabOrder = 0 object lblTitle: TLabel AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = imgLogo AnchorSideTop.Side = asrBottom Left = 43 Height = 15 Top = 96 Width = 111 BorderSpacing.Top = 6 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Double Commander' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False end object pnlVersionInfos: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = lblTitle AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlInfo AnchorSideBottom.Side = asrBottom Left = 24 Height = 187 Top = 111 Width = 104 AutoSize = True BorderSpacing.Left = 20 BorderSpacing.Right = 20 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 10 ClientHeight = 187 ClientWidth = 104 ParentFont = False TabOrder = 0 object lblVersion: TLabel AnchorSideLeft.Control = pnlVersionInfos AnchorSideTop.Control = pnlVersionInfos Left = 0 Height = 15 Top = 10 Width = 38 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Version' ParentColor = False ParentFont = False end object lblRevision: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblVersion AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 29 Width = 44 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Revision' ParentColor = False ParentFont = False end object lblCommit: TLabel AnchorSideTop.Control = lblRevision AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 48 Width = 44 BorderSpacing.Top = 4 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Commit' ParentColor = False end object lblBuild: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblCommit AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 67 Width = 27 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False ParentFont = False end object lblLazarusVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblBuild AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 86 Width = 39 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False ParentFont = False end object lblFreePascalVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblLazarusVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 105 Width = 58 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False ParentFont = False end object lblPlatform: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblFreePascalVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 124 Width = 46 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Platform' ParentColor = False ParentFont = False end object lblOperatingSystem: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblPlatform AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 143 Width = 94 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Operating System' ParentColor = False ParentFont = False end object lblWidgetsetVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblOperatingSystem AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 162 Width = 69 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'WidgetsetVer' ParentColor = False ParentFont = False end end object imgLogo: TImage AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfo AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 66 Height = 64 Top = 26 Width = 64 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 62 BorderSpacing.Top = 22 BorderSpacing.Right = 62 Center = True Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963D610000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 0970485973000013AF000013AF0163E68EC30000001974455874536F66747761 7265007777772E696E6B73636170652E6F72679BEE3C1A000010634944415478 9CED9B79901F4775C73F6FAEDFB99776B52BAD2DAD8D2C5F088BD896B108B688 8B0470C58194A99429822109458070958D2988932A02A6A89439420C011C0713 A8C4260125E13038408C1593C3088365CB8714C992AD952CEDFDDBDF3DD3FDF2 C7CCFCF4DB43BBABDD35B8125ED5ECFC76A6FB75BF6FBF7EFD5ECF6BF825FDFF 2639D58B7B7F6353BF35FCB68B7D998A9CA18A6754C18255050503A805551BFF 56C5C6AF500BD66AEBBD45514D9EA34449216B897929287179AB8A85989749EA ABB6BD074BF2DCC4FC503036EEBB5145AD4691B1C30DB50FB8C6DF795BB93CB2 2400765F72893FBD76E2532ADE1B7BBABA0BF942D195A4582AB85A4D3A10FF51 55688191084A0C46DC5B8D416903416DFC3F8930315F1BD7C1C6E514B0F1BDD5 9E8DDB8BEB26F56D1B78D07ADE88229E9D98320726262B4D6BBEDC9CACDD703B 84A704E09E579F93C93BEE7F7477F76C5DDBD7EFBA9EAB204967B4EDAE2D015A A39A76CA265AD02ADF5627014FD1B69157D15490F672ED3C12A16D0232AA49D9 A44C0A70AB6CAC15621557958C55F61C3D66F68D8E3E2C53B597DE068D5466A7 1D80A2E7FEDDDADEB55B07D6AD7383C057115960923CFF498987BB24C2858383 EE85FD035BB5A7F895F6322D0076FDD6791705BEFFAA356B7B5DCFF3F4E7DDD9 E79A2AC0F9EBFADD9CE75FFDD69EC28BD2E72900629CCC0DDD3D7D791547436B 89AC1259C524EA16AB788CEAF395D2FEA553C86ADCFFF49AB6CA796BFB0A819F B99144B7BDE4875F6D345F5E735C31F550554112C32622382A88802B820BC433 439E1760A4425B558C85C8248387C51AC5A8C5D89306BB98CFD268863B001F08 3D40EEBFFFFEDB326347078362012F08926156A2CA34CDC951EA4F3D49F3F0FF E0DB888C2304AE832F0E9E1303F18B3014E9481B552263695A4BC3581A91C178 011D176CA1EFFC17925FDB4FA6B32B19AC78ADEC2895CEF8DDB3CEBE6DC78E1D 6FF7003CCFBBB6B0798BBFA6AF8F5C2E37AF34AA4A657C8CD281C774F4DEAFE3 8C0C93F75DB2AE8B2F0E223F3F109458F0A6B5D42343358CF0360CB1F977DEC0 C00B2FA2A3AFEF94FDA9D56A644747FD52A9742D1003B01412118ABD7D147BAF 94F5DBAEA03236C2F03DFFA0D30FDE47D1F3C9780EBE2B33979555A654D59BC6 528D22CA61C4DAAB5EC9B6EBDE4867FFC0B20661C900B4938850ECEBE7BCEBDF 29956B5ECFC1BFFD4BADECDF4B47C623E73C37DAA080B14ADD18CACD90EC8B2E E6AAF7DC44714DEF8AF82E0B80762AF4F4B2E53D1F92137B7EA2CFDCFE31BA5C 879CE7E139AB07820291B554224329522EFAE047D870E965AB02F4AA68AC8830 B0F552B9F0A37748A9D84BA919D234B1FFBE52B2AA84D6321D46347A07F8B53B FE9E8DDB5EB222E113CFD4C22A019052BEBB878B3EF469696E3887E9664898B8 A8CBA578E4957218618736B1E3139FA3D0DDB3B4BA895B6DAD9D711963D2BB81 550600C00F326CB9E12352EBDF40B919121ABB2C1052B52F4711E6CCB3B9E2A3 9F22C8665BEFDB3560B6B0C698D6FFB39FB78131038086908497D660AD694578 CB21CFF7B9E8FD1F934AA19B6A14614E53135283578D0C8DAE35BCF4C3B7E2B8 EE0C61A228C218D3BAB78D2CAA3AE37F6B0C61B349D46C629A4D6C1401948196 1793FDA7579E7B7470C3C66E713DB556314671FB06710737D275C99574BEE07C C9168AA705C4F4C871F6DEFC365D1378E45C27F61E97100D1AAB5443C35833E2 B24FDE4EE7C0FA189834EC56454466FC9FDE637F659C138FFC8C23BBEEA7FACC D3948F0EE320A04A9708DFDB7F60F2CEA9F22050F712C09B9D8167FBF3595CDF 8BE36BAB44B531A2FDA3541FDBCD6818A95C70311B5FF71629ACE95B12001D6B 0738E3FA7732FAE5CFE0657CFC25AC0CAD791F459CF5E67750E8EB2799AE33C8 5A3B437880C9679EE6913B3E4769CFC3048EE02364816C2668F9CC5D0219110B 34014D9741E3BB42D677F17C2F0E268CC5AA83058CA7140297DA813D3CF5676F D7DC8E6B38FB356F10C775E70A306B54062FDF21C7BEF375AD8F1FC7F5177794 ACC66BBDF60FB2F1CAAB5AA33A9B77BB06448D060F7FF10B8CDDF73D72E2D013 F8B82238C97B9B6EAEA812D05AFB671A41997539223822B82278AE43CE73E9CA F8F4E533D807BECD639FFA536DD4AA8B1A1F0586AEFF232987D1A2065181D05A 2AA1E19CDF7B0788CC305CEDBCD3E7E5B1517E74F3FB98DEF503BA7D9F82EF91 755C5C27EEFF6CB966EBE09256811410D771C8FB2EDD599FFCD1833C76CB7BB5 5E29CF5E5EE680D13DB4095D3F446311DF2075736570033D9BCE9D97673B20F5 A929FEFBE6F7E10C3F4D87EF91755D5C114E671FE7B496C11488C075E8C8F874 D4A6D87FC7AD1A369BF3AEB52D0B6D2D03575F2BB5C8109D6245482D7F2D320C FEE6B5F3ADDB335680B05E67F7ADB790999EA4E87B04E29C96E0CB02A0554904 DF118A818777F07186EFFFAEB67778F648596BE9DEFC42EA2A44890ACF0120F1 F81A38ACB9E045F33A30E9A5AAECDBF955F4D0010A9E9744A3CB9164058ED049 4DF098BAE7ABD44B5373E66AFBC83941407EEB36423BBF1D88E7BF52DC7A294E 90990362FBFC2F1F3FC6F17BBF49C177F11D59B6F02B0200621032AE4B4194A3 DFFF173D9573925EB9CD174A1A23B48390C6F7A1B514365F30EFC8B7F37EEA1B 3B298810AC42E4B9220004701D21E7B9941FDC8509C3793520BDF2679E45D3C6 8ECE6CB2C906477168D3BCF33EE5699A4D2677FF2719D7890DDE4A0460156201 4704DF75C88475A60EED5FD0170FBAD6101A1B7FB969B303E917A5D05AFCEE9E 05A7D2E8DE3D045184BF4AFB0E2BDE0F00F01C21E33A940F3EA9858D9B049823 A088204180143B50DB98C3C3AAE2143B7132D996E7379FB19CDAF704BE138FFE AAF47DA50C0470105C47A84F8CB4466EB6AFDE122657C096EB73F85855245B68 B9B8A7A2E6D4049E7372AD5FE98EC3AA6800124F857062AC0500CC1D415545FC 8039036B0CA65EC7E6E7FAFCB3A97AE800C1D123B89E87E37A88E781E723AE8F 93C99C76D7570780843431760B910D9B98D2048D6613AD5509EB754C18528D94 2673638BD964AA551A1363B802927C8CB536FD200BE20538D91C4E368B9B2FE0 E5F2E09C9AEFEA009084B26E67D7A2451B870FD01819C611109DA925B65A5DB4 7ED0DB474822EC9C7E28A65127AAD7E3A536F13A9D4C0EAFD841D0D505B342FA 1503107FC18E973629742E5ADE94A7E65DBA1CC096A716AD1FF4AEA5AE27BF08 2DDE4125AA56092B15AACF1EC3F53C8C755B6ABA2A5B629155EA8D3AD9C1A105 4D73549986E9A9791B15013B394E54292FD856F796AD849AC4B2CB208D22D446 2DEC5606802A616982CAD307983E364C71F396058B579F39842F12ABFFAC772E E0895079E6D0823CFA2FB98C289325D2956DB8A6B43C005431D393D40FEDA336 7C984AB98CB7F5729C2058B05AF9F13DF88EE0CEA327AE08BE03938FFE6CE10E 0719BAB75F4943D3B49A95D1E901602D66EC388D838F111E7B1AD368D0B04A59 85B5AF79E3A29E4975EF4FD497D86F682F9C6E54F822941EDEBD6837365DFF16 EA8E43C8CAB5606900A862A6C6691E7A8268EC386A4CE2BA2AE5C8125C7135D9 75672EC8A239394EF3893D04327FF4E608F802F5471FA23939B120AFE28621FA 5EF55AAA16C2156AC1A200D8CA34E1D3FB884E1C41E3EDE4587855CAC6521B18 A2FF757FB0E8E88F3DF07DB258BC05362D3C81AC5A9EBDEFDE453B7EFE1FBE0B 1D7A01358D33CE960BC229015013119D384274F410DA8C7DF724498BA655A643 CB445064DD3B3F2C6E36B760236A224AF7EED49C23A78CE0047011B28E70E25B FF889A68419E5EBEC0C51FFD24D58E2E2AAA2D4D385D20E605C04E8D111EDE87 2DC5AA980A6E54A919CB546899EA59C7C04D9F90A06F60D146467EF85DFC8913 044EBC029CB233028180377A9C63F7FDEBA27CF3EB07D9F6E9BF261ADC485995 BA26E9742C1D8816000AD828223A769868E4283699E7469375DE584AA165B469 A85EB08DF51FF8B464D76F58B481A85A66FC6B776AC115FC45E277215E0AF38E 30FCE5CF13562A8BF2EF183A9BCB3FFF2532DBAF60CA2A15255E21980946FBD5 4EA993ECBE61D39A9BB2532772A6D9A06995A6551A261EF17268990C2D9581B3 295EFF3E5973F5EB65B1252FA5E1AF7C56FDFD7B28BAB1FAA73D483D60E564B2 51DA3901C25A9572B942EFB6972EDA869BC970C62B5E4561CB56460E1EA03C36 4AA48A49073001C400017000A7FA50643F49F2614480A054ABDB11C7E2781E56 21B2600B5D68773FFE792FA678D176C96E3C674942A734FEE02E1AF77F9B1ED7 C19399429E8ADAB560FC3B3B39F12BDBE8DF7EE592DA1BD87639FD97BE84C97D 4F7074D70F19F9AF1F517BF6188DD1712449AC74804622335017C0B9FBEEBBBF D953CCBFBAA7B35332994C2B809079BEFC2C95AACF3CC5F02DEFD5EEB04A4E04 8759599F49046754A595DD990430E9125B892CA56C812D1FBF9DE2C6B396DD17 1B454449A0D56C34182F9574BA5EFFCE75D75D778D03608C29E2674472059C7C 11375F5C91F0CDB1130C7FFC83DA1956C9269EDFE9ECDF08E00AE41CA150ABF0 E8CDEFA536727CD9FD713C8FA0B393A0B313AFA3032F9713634C119E83FC80C6 F1A31CF9F39BB4737A8CA21B7F3F58CEE6553C1520EF08D9F1133C7CE3DB281F 39BCDADD5D5D00A6F73EC4F02DEFD2E2F8313A3C27DEBA5A01BFD83D86822364 479FE56737BC95D19FFE78B5BA0BAC1200360C39BEF34E1DFF8B3FD69E46990E CFC177562765AE1D8462798AC73FF86EF6DDF9056C182E5A7729B4E20D91E947 7ECCF85D7FA5C1E8517A3D212312873A2BCC0F6AA7743A14447051C6EEFA2223 BBBECFE677DC48FFB6CB57C47B79005843E9E107297DF76E750F3F49B713E716 F8719E4D6B7F6E3529FE300BD944B36AC38779FC03EFE6C0055B18BAEE4DACDF FEB26519EE250360EA55AAFB1EA5BE77B7361EDA45A652A2DB814CE0B632AE9F 2BE1538AB7E06377D949F60F1A8F3FC2937F72234F74ADA1EFAA5FA7FFB2EDF4 BDF8E278337409E401D4EBF5BBAA0F7CEB52CF957C2DF05AC72F4CB58C4E8D63 4F0CA363CF12584BDE113A05FCC0C5174D322F92BDFFE748F0D9946A4346E28F 32BE42581AA7B4F36E46BE7617A1B8F8EB07C96D1822E8EDC32F76A089390E8C E5B048B577FBAFDE95F212C0FFC62BCEDEBBCE89CE0982405BD14F5A40C14171 547013A1D31DDDF4F84CEBB84B7A642675784EF57B014768CEEF567D6D9D4BB2 6DEDDAA44DAB4A686217384C9E1BD5245D3EE6D109FC086FFF97EAE116927479 05C2BCE3FC20E7BB9BBAFC58D1D2465049CE012927CF2969BB2FFF0BA5564A4F F2BF2FB15AFB809524204AEE1E30AD0E3EFC1BF1691A4DEBA9EFE9674BD62DAB 31E2398227F1E54AAC6EE946E6EA6500AF7E42F59C3C27E2682FBD77014FB9CE B4F5E4332463D75AAA77DC73F011A3FAED89081385E1CFFF04C4734C9DC04171 A3BA956FFC4DB9F968FA7C86AF5216E7CD13D6F9E96853C3B0D114350B7FA87C BE930364811EE0A038E1219187C66ACDDF6F2F3367A4775F72893FB566E25641 DFD4E950CCAAF544ED496304ADD3A369EE9DD1C438B41F60D4F4A0651C94A7B6 A375A6D040726E1293FC5063139E497B4A62F45223462BD33435B8A95D6A378A 24A731EBAA8C5A273A02E5267267FF74E3FD1F8268410052FAE6CBCFEDF39DF0 B5225C61D59E292A9E898F681225C2C6C765693BD498E4F0A5C6B2758832CE0B B26DC244C9014843DC5F63419313A3D628B605561B9FD6FBF424699C72DB3A3A 9B5864632D6A3532702454FE3DB4FE3FDF3E3D3DBA1C2DFA25FD5FA7FF05C879 747F48E5EE350000000049454E44AE426082 } Proportional = True end end end doublecmd-1.1.30/src/fsplitter.pas0000644000175000001440000003111515104114162016076 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Take a single file and split it in part based on few parameters. Copyright (C) 2007-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fSplitter; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, Menus, EditBtn, ExtCtrls, //DC fButtonForm, uFileSource, uFile, KASComboBox; type { TfrmSplitter } TfrmSplitter = class(TfrmButtonForm) btnRelativeFTChoice: TSpeedButton; edDirTarget: TDirectoryEdit; lbDirTarget: TLabel; teNumberParts: TEdit; lblNumberParts: TLabel; grbxSize: TGroupBox; cmbxSize: TComboBoxAutoWidth; rbtnKiloB: TRadioButton; rbtnMegaB: TRadioButton; rbtnGigaB: TRadioButton; rbtnByte: TRadioButton; cbRequireACRC32VerificationFile: TCheckBox; pmPathHelper: TPopupMenu; procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure SetNumberOfPart; procedure SetSizeOfPart; procedure cmbxSizeChange(Sender: TObject); procedure btnRelativeFTChoiceClick(Sender: TObject); procedure rbtnByteChange(Sender: TObject); procedure teNumberPartsChange(Sender: TObject); private FFileName: String; iVolumeSize: Int64; MyModalResult: integer; iVolumeNumber: Integer; function StrConvert(sExpression: String): Int64; public { Public declarations } end; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowSplitterFileForm(TheOwner: TComponent; aFileSource: IFileSource; var aFile: TFile; const TargetPath: String): Boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LazUTF8, LCLType, LCLProc, //DC uTypes, DCStrUtils, uLng, uFileProcs, uOperationsManager, uFileSourceSplitOperation, uShowMsg, DCOSUtils, uGlobs, uSpecialDir, uDCUtils; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowSplitterFileForm(TheOwner: TComponent; aFileSource: IFileSource; var aFile: TFile; const TargetPath: String): Boolean; var frmSplitter:TfrmSplitter; Operation: TFileSourceSplitOperation = nil; begin frmSplitter:=TfrmSplitter.Create(TheOwner); //Did not use the "with..." here to make absolutely sure of what is referenced in the following. try frmSplitter.FFileName:= aFile.FullPath; frmSplitter.edDirTarget.Text:= TargetPath; frmSplitter.SetNumberOfPart; // Show form Result:= (frmSplitter.ShowModal = mrOK); if Result then begin try Operation:= aFileSource.CreateSplitOperation(aFile, frmSplitter.edDirTarget.Text) as TFileSourceSplitOperation; if Assigned(Operation) then begin Operation.VolumeSize:= frmSplitter.iVolumeSize; Operation.VolumeNumber:= frmSplitter.iVolumeNumber; Operation.RequireACRC32VerificationFile:= frmSplitter.cbRequireACRC32VerificationFile.Checked; Operation.AutomaticSplitMode:=(frmSplitter.cmbxSize.ItemIndex=0); OperationsManager.AddOperation(Operation, frmSplitter.QueueIdentifier, False); end; finally FreeAndNil(aFile); end; end; finally frmSplitter.Free; end; end; { TfrmSplitter.SetNumberOfPart } procedure TfrmSplitter.SetNumberOfPart; begin if cmbxSize.ItemIndex<>0 then begin if StrConvert(cmbxSize.Text)>0 then begin if mbFileSize(FFileName) mod StrConvert(cmbxSize.Text)>0 then teNumberParts.Text:= IntToStr( (mbFileSize(FFileName) div StrConvert(cmbxSize.Text)) +1) else teNumberParts.Text:= IntToStr(mbFileSize(FFileName) div StrConvert(cmbxSize.Text)); end else begin teNumberParts.Text:=rsSimpleWordError; end; end else begin teNumberParts.Text:=rsMSgUndeterminedNumberOfFile; end; end; { TfrmSplitter.SetSizeOfPart } procedure TfrmSplitter.SetSizeOfPart; begin if StrToInt64Def(teNumberParts.Text,0)>0 then begin if mbFileSize(FFileName) mod StrToInt64Def(teNumberParts.Text,0)>0 then cmbxSize.Text := IntToStr(mbFileSize(FFileName) div StrToInt64Def(teNumberParts.Text, 0) + 1) else cmbxSize.Text := IntToStr(mbFileSize(FFileName) div StrToInt64Def(teNumberParts.Text, 0)); rbtnByte.Checked := True; rbtnByte.Enabled := True; rbtnKiloB.Enabled := True; rbtnMegaB.Enabled := True; rbtnGigaB.Enabled := True; end else begin cmbxSize.Text:=rsSimpleWordError; end; end; { TfrmSplitter.StrConvert } //Let's do a basic conversion that maybe is not a full idiot-proof, but versatile and simple enough to fit in a few lines. function TfrmSplitter.StrConvert(sExpression: String): Int64; var iMult: int64 = 1; bUseRadioButtons: boolean = True; procedure CheckIfMemSizeAndSetMultiplicator(sExpressionToCheck:string; iMultiplicatorToSetIfAny:int64); var iSeekPos: integer; begin iSeekPos := pos(UTF8LowerCase(sExpressionToCheck), sExpression); if iSeekPos <> 0 then begin iMult := iMultiplicatorToSetIfAny; sExpression := UTF8LeftStr(sExpression, pred(iSeekPos)); bUseRadioButtons := False; end; end; begin //1.Let's place string in lowercase to avoid any later problem. sExpression := UTF8LowerCase(sExpression); //2.Let's check first if we have the personalized unit in the expression. // We check first since they may include spaces and byte suffix. CheckIfMemSizeAndSetMultiplicator(gSizeDisplayUnits[fsfPersonalizedByte], 1); CheckIfMemSizeAndSetMultiplicator(gSizeDisplayUnits[fsfPersonalizedKilo], 1024); CheckIfMemSizeAndSetMultiplicator(gSizeDisplayUnits[fsfPersonalizedMega], 1024*1024); CheckIfMemSizeAndSetMultiplicator(gSizeDisplayUnits[fsfPersonalizedGiga], 1024*1024*1024); //4.Let's check if there are single letter multiplier or byte suffix. CheckIfMemSizeAndSetMultiplicator(rsLegacyOperationByteSuffixLetter, 1); CheckIfMemSizeAndSetMultiplicator(rsLegacyDisplaySizeSingleLetterKilo, 1024); CheckIfMemSizeAndSetMultiplicator(rsLegacyDisplaySizeSingleLetterMega, 1024*1024); CheckIfMemSizeAndSetMultiplicator(rsLegacyDisplaySizeSingleLetterGiga, 1024*1024*1024); //5. Well... It looks like the pre-defined disk size strings has not been translated in all languages so let's simplify with english values... //NO NEED TO TRANSLATE THESE ONES! Either translate all disk size strings and/or accept that english abbreviation always work here. CheckIfMemSizeAndSetMultiplicator('B', 1); CheckIfMemSizeAndSetMultiplicator('K', 1024); CheckIfMemSizeAndSetMultiplicator('M', 1024*1024); CheckIfMemSizeAndSetMultiplicator('G', 1024*1024*1024); //5.We remove the spaces since they are irrevelant. sExpression := UTF8StringReplace(sExpression, ' ', '', [rfReplaceAll]); //6.If we return a number here, let's disable the unit selector below. if cmbxSize.Focused then begin rbtnByte.Enabled := bUseRadioButtons; rbtnKiloB.Enabled := bUseRadioButtons; rbtnMegaB.Enabled := bUseRadioButtons; rbtnGigaB.Enabled := bUseRadioButtons; end; //7.If we return a number here, let's disable the unit selector below. if bUseRadioButtons then begin if rbtnKiloB.Checked then iMult:=1024; if rbtnMegaB.Checked then iMult:=1024*1024; if rbtnGigaB.Checked then iMult:=1024*1024*1024; end; //7.Since we're now supposed to have just numbers in our string, we should be ready to do our conversion. Result := StrToInt64Def(sExpression, 0) * iMult; end; { TfrmSplitter.FormCreate } procedure TfrmSplitter.FormCreate(Sender: TObject); begin InitPropStorage(Self); // Initialize property storage MyModalResult:=mrCancel; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); ParseLineToList(rsSplitPreDefinedSizes, cmbxSize.Items); end; procedure TfrmSplitter.FormShow(Sender: TObject); begin if (rbtnGigaB.Left + rbtnGigaB.Width > cmbxSize.Left + cmbxSize.Width) then begin cmbxSize.AnchorParallel(akRight, 0, rbtnGigaB); end; end; { TfrmSplitter.rbtnByteChange } procedure TfrmSplitter.rbtnByteChange(Sender: TObject); const sDigits:string='0123456789'; var iFirstNonDigit: integer = 0; iIndex: integer; sExpression, sSanitize: string; begin if rbtnByte.focused OR rbtnKiloB.focused OR rbtnMegaB.focused OR rbtnGigaB.focused then begin if TRadioButton(Sender).Checked then begin sExpression := UTF8StringReplace(cmbxSize.Text, ' ', '', [rfIgnoreCase , rfReplaceAll]); sSanitize := ''; iFirstNonDigit := 0; for iIndex := 1 to UTF8Length(sExpression) do begin if (UTF8Pos(UTF8Copy(sExpression, iIndex, 1), sDigits) = 0) then begin if iFirstNonDigit = 0 then iFirstNonDigit := iIndex; end else begin if iIndex=UTF8Length(sExpression) then iFirstNonDigit := succ(iIndex); end; end; if iFirstNonDigit <> 0 then sSanitize:=UTF8LeftStr(sExpression, pred(iFirstNonDigit)); cmbxSize.Text := sSanitize; SetNumberOfPart; end; end; end; { TfrmSplitter.btnRelativeFTChoiceClick } procedure TfrmSplitter.btnRelativeFTChoiceClick(Sender: TObject); begin edDirTarget.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edDirTarget,pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmSplitter.cmbxSizeChange } procedure TfrmSplitter.cmbxSizeChange(Sender: TObject); begin if cmbxSize.Focused then //Do the function ONLY-IF it's the result of someone typing in the field begin if cmbxSize.ItemIndex<>0 then begin SetNumberOfPart; end else begin teNumberParts.Text:=''; if teNumberParts.CanFocus then teNumberParts.SetFocus; SetSizeOfPart; end; end; end; { TfrmSplitter.teNumberPartsChange } procedure TfrmSplitter.teNumberPartsChange(Sender: TObject); begin if teNumberParts.Focused then SetSizeOfPart; //Do the function ONLY-IF it's the result of someone typing in the field end; { TfrmSplitter.FormCloseQuery } procedure TfrmSplitter.FormCloseQuery(Sender: TObject; var CanClose: boolean); var isTooManyFiles: boolean; begin if (ModalResult <> mrCancel) then begin if cmbxSize.ItemIndex <> 0 then iVolumeSize:= StrConvert(cmbxSize.Text) else begin iVolumeSize:= 0; end; if (iVolumeSize <= 0) AND (cmbxSize.ItemIndex<>0) then begin ShowMessageBox(rsSplitErrFileSize, rsSimpleWordError+'!', MB_OK or MB_ICONERROR); //Incorrect file size format! (Used "ShowMessageBox" instead of "MsgError" 'cause with "MsgError", user can still click on the frmSplitter form and type in it). end else begin if not mbForceDirectory(IncludeTrailingPathDelimiter(mbExpandFileName(edDirTarget.Text))) then begin ShowMessageBox(rsSplitErrDirectory, rsSimpleWordError+'!', MB_OK or MB_ICONERROR); //Unable to create target directory! end else begin if teNumberParts.Text <> rsMSgUndeterminedNumberOfFile then iVolumeNumber := StrToInt(teNumberParts.Text) else iVolumeNumber := 0; if (iVolumeNumber < 1) AND (teNumberParts.Text <> rsMSgUndeterminedNumberOfFile) then begin ShowMessageBox(rsSplitErrSplitFile, rsSimpleWordError+'!', MB_OK or MB_ICONERROR); //Unable to split the file! end else begin isTooManyFiles:=(iVolumeNumber > 100); if isTooManyFiles then isTooManyFiles:=(MessageDlg(Caption, rsSplitMsgManyParts, mtWarning, mbYesNo, 0) <> mrYes); if not isTooManyFiles then begin MyModalResult:= mrOk; end; //if isTooManyFiles then end; //if (iVolumeNumber = 0) then end; //if not mbForceDirectory(edDirTarget.Text) then end; //if iVolumeSize <= 0 then CanClose:= (MyModalResult = mrOK); end; ModalResult := MyModalResult; // Don't save properties when cancel operation if ModalResult = mrCancel then SessionProperties:= EmptyStr; end; end. doublecmd-1.1.30/src/fsplitter.lrj0000644000175000001440000000363215104114162016105 0ustar alexxusers{"version":1,"strings":[ {"hash":120635234,"name":"tfrmsplitter.caption","sourcebytes":[83,112,108,105,116,116,101,114],"value":"Splitter"}, {"hash":136166403,"name":"tfrmsplitter.grbxsize.caption","sourcebytes":[83,105,122,101,32,97,110,100,32,110,117,109,98,101,114,32,111,102,32,112,97,114,116,115],"value":"Size and number of parts"}, {"hash":173739330,"name":"tfrmsplitter.cmbxsize.text","sourcebytes":[49,52,53,55,54,54,52,66,32,45,32,51,46,53,34],"value":"1457664B - 3.5\""}, {"hash":44698307,"name":"tfrmsplitter.rbtnbyte.caption","sourcebytes":[38,66,121,116,101,115],"value":"&Bytes"}, {"hash":56408259,"name":"tfrmsplitter.rbtnkilob.caption","sourcebytes":[38,75,105,108,111,98,121,116,101,115],"value":"&Kilobytes"}, {"hash":226277747,"name":"tfrmsplitter.rbtnmegab.caption","sourcebytes":[38,77,101,103,97,98,121,116,101,115],"value":"&Megabytes"}, {"hash":200834339,"name":"tfrmsplitter.lblnumberparts.caption","sourcebytes":[38,78,117,109,98,101,114,32,111,102,32,112,97,114,116,115],"value":"&Number of parts"}, {"hash":226273075,"name":"tfrmsplitter.rbtngigab.caption","sourcebytes":[38,71,105,103,97,98,121,116,101,115],"value":"&Gigabytes"}, {"hash":118175221,"name":"tfrmsplitter.cbrequireacrc32verificationfile.caption","sourcebytes":[82,101,113,117,105,114,101,32,97,32,67,82,67,51,50,32,118,101,114,105,102,105,99,97,116,105,111,110,32,102,105,108,101],"value":"Require a CRC32 verification file"}, {"hash":101971834,"name":"tfrmsplitter.lbdirtarget.caption","sourcebytes":[83,112,108,105,116,32,116,104,101,32,102,105,108,101,32,116,111,32,100,105,114,101,99,116,111,114,121,58],"value":"Split the file to directory:"}, {"hash":15252584,"name":"tfrmsplitter.btnrelativeftchoice.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"} ]} doublecmd-1.1.30/src/fsplitter.lfm0000644000175000001440000002135515104114162016076 0ustar alexxusersinherited frmSplitter: TfrmSplitter Left = 890 Height = 247 Top = 363 Width = 500 HorzScrollBar.Page = 464 HorzScrollBar.Range = 369 VertScrollBar.Page = 301 VertScrollBar.Range = 227 ActiveControl = cmbxSize AutoSize = True BorderIcons = [biSystemMenu] Caption = 'Splitter' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 247 ClientWidth = 500 Constraints.MinWidth = 500 OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnShow = FormShow Position = poOwnerFormCenter SessionProperties = 'cmbxSize.Text;rbtnByte.Checked;rbtnGigaB.Checked;rbtnKiloB.Checked;rbtnMegaB.Checked;teNumberParts.Text;Width;cbRequireACRC32VerificationFile.Checked' inherited pnlContent: TPanel Left = 6 Height = 197 Top = 6 Width = 488 ClientHeight = 197 ClientWidth = 488 object grbxSize: TGroupBox[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = edDirTarget AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 138 Top = 52 Width = 488 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 10 Caption = 'Size and number of parts' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 118 ClientWidth = 484 Constraints.MinWidth = 300 TabOrder = 1 object cmbxSize: TComboBoxAutoWidth AnchorSideLeft.Control = grbxSize AnchorSideTop.Control = grbxSize AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 6 Width = 272 DropDownCount = 16 ItemHeight = 15 Items.Strings = ( 'Automatic' '1457664B - 3.5" High Density 1.44M' '1213952B - 5.25" High Density 1.2M' '730112B - 3.5" Double Density 720K' '362496B - 5.25" Double Density 360K' '98078KB - ZIP 100MB' '650MB - CD 650MB' '700MB - CD 700MB' '4482MB - DVD+R' ) OnChange = cmbxSizeChange TabOrder = 0 Text = '1457664B - 3.5"' end object rbtnByte: TRadioButton AnchorSideLeft.Control = grbxSize AnchorSideTop.Control = cmbxSize AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 31 Width = 48 BorderSpacing.Top = 2 Caption = '&Bytes' Checked = True OnChange = rbtnByteChange TabOrder = 1 TabStop = True end object rbtnKiloB: TRadioButton AnchorSideLeft.Control = rbtnByte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnByte Left = 56 Height = 19 Top = 31 Width = 68 BorderSpacing.Left = 2 Caption = '&Kilobytes' OnChange = rbtnByteChange TabOrder = 2 end object rbtnMegaB: TRadioButton AnchorSideLeft.Control = rbtnKiloB AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB Left = 126 Height = 19 Top = 31 Width = 78 BorderSpacing.Left = 2 Caption = '&Megabytes' OnChange = rbtnByteChange TabOrder = 3 end object teNumberParts: TEdit AnchorSideLeft.Control = lblNumberParts AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB AnchorSideTop.Side = asrBottom Left = 97 Height = 23 Top = 60 Width = 128 BorderSpacing.Left = 4 BorderSpacing.Top = 10 OnChange = teNumberPartsChange TabOrder = 5 end object lblNumberParts: TLabel AnchorSideLeft.Control = rbtnByte AnchorSideTop.Control = teNumberParts AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 64 Width = 87 Caption = '&Number of parts' FocusControl = teNumberParts ParentColor = False end object rbtnGigaB: TRadioButton AnchorSideLeft.Control = rbtnMegaB AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB Left = 206 Height = 19 Top = 31 Width = 72 BorderSpacing.Left = 2 Caption = '&Gigabytes' OnChange = rbtnByteChange TabOrder = 4 end object cbRequireACRC32VerificationFile: TCheckBox AnchorSideLeft.Control = cmbxSize AnchorSideTop.Control = teNumberParts AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 93 Width = 188 BorderSpacing.Top = 10 Caption = 'Require a CRC32 verification file' Checked = True State = cbChecked TabOrder = 6 end end object lbDirTarget: TLabel[1] AnchorSideTop.Control = pnlContent Left = 0 Height = 15 Top = 0 Width = 129 Caption = 'Split the file to directory:' FocusControl = edDirTarget ParentColor = False end object edDirTarget: TDirectoryEdit[2] AnchorSideTop.Control = lbDirTarget AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeFTChoice Left = 0 Height = 23 Top = 19 Width = 462 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 0 end object btnRelativeFTChoice: TSpeedButton[3] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edDirTarget AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edDirTarget AnchorSideBottom.Side = asrBottom Left = 462 Height = 23 Hint = 'Some functions to select appropriate path' Top = 19 Width = 26 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeFTChoiceClick end end inherited pnlButtons: TPanel Left = 6 Top = 207 Width = 488 ClientWidth = 488 inherited btnCancel: TBitBtn Left = 306 end inherited btnOK: TBitBtn Left = 400 end end inherited pmQueuePopup: TPopupMenu left = 192 end object pmPathHelper: TPopupMenu[3] left = 368 top = 104 end end doublecmd-1.1.30/src/fsortanything.pas0000644000175000001440000001611015104114162016757 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Form allowing user to sort a list of element via drag and drop Copyright (C) 2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fSortAnything; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, ButtonPanel, //DC uOSForms, uClassesEx; type { TfrmSortAnything } TfrmSortAnything = class(TModalForm) ButtonPanel: TButtonPanel; btnSort: TBitBtn; lblSortAnything: TLabel; lbSortAnything: TListBox; procedure FormCreate(Sender: TObject); procedure btnSortClick(Sender: TObject); procedure lbSortAnythingDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure lbSortAnythingDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); private IniPropStorage: TIniPropStorageEx; end; var frmSortAnything: TfrmSortAnything; function HaveUserSortThisList(TheOwner: TCustomForm; const ACaption: string; const slListToSort: TStringList): integer; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC uGlobs; { TfrmSortAnything } { TfrmSortAnything.FormCreate } procedure TfrmSortAnything.FormCreate(Sender: TObject); begin IniPropStorage := InitPropStorage(Self); end; { TfrmSortAnything.btnSortClick } // Simply "lbSortAnything.Sorted" was working fine in Windows. // When tested under Ubuntu 64 with "LAZ 2.0.6/FPC 3.0.4 x86_64-linux-gtk2", it was not working correctly. // For example, if our list was like "D,A,C,B", it was sorted correctly. // But if list was like sorted in reverse, like "D,C,B,A", it did nothing. // If we set "D,C,A,B", or "C,D,B,A" or "D,B,C,A", it was working. // So it seems when it was pre-sorted reversed, it does not sort. // For the moment let's use a TStringList on-the-side for the job. procedure TfrmSortAnything.btnSortClick(Sender: TObject); var slJustForSort: TStringList; iIndex: integer; begin slJustForSort := TStringList.Create; try slJustForSort.Sorted := True; slJustForSort.Duplicates := dupAccept; slJustForSort.CaseSensitive := False; for iIndex := 0 to pred(lbSortAnything.items.Count) do slJustForSort.Add(lbSortAnything.Items.Strings[iIndex]); lbSortAnything.Items.BeginUpdate; try lbSortAnything.Items.Clear; for iIndex := 0 to pred(slJustForSort.Count) do lbSortAnything.Items.Add(slJustForSort.Strings[iIndex]); lbSortAnything.ItemIndex := 0; finally lbSortAnything.Items.EndUpdate; end; finally slJustForSort.Free; end; end; { TfrmSortAnything.lbSortAnythingDragOver } procedure TfrmSortAnything.lbSortAnythingDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmSortAnything.lbSortAnythingDragDrop } // Key prodecure here that will let user do the drag and drop in the list to move item in the order he wants. // Basically we first remove from the list the elements to be moved... // ... and then we place them back to the correct destination. // The key thing is to determine where will be this destination location based on current selection and target position. procedure TfrmSortAnything.lbSortAnythingDragDrop(Sender, Source: TObject; X, Y: integer); var iFirstSelection, iBeforeTarget, iSeeker, iDestIndex: integer; bMoveSelectionUp: boolean; slBuffer: TStringList; begin iDestIndex := lbSortAnything.GetIndexAtXY(X, Y); if (iDestIndex >= 0) and (iDestIndex < lbSortAnything.Items.Count) then //Don't laught, apparently it's possible to get a iDestIndex=-1 if we move totally on top. begin //1o) Let's determine in which direction the move is taken place with hint about down move. iFirstSelection := -1; iBeforeTarget := 0; iSeeker := 0; while (iSeeker < lbSortAnything.Count) do begin if lbSortAnything.Selected[iSeeker] then begin if iFirstSelection = -1 then iFirstSelection := iSeeker; if iSeeker < iDestIndex then Inc(iBeforeTarget); end; Inc(iSeeker); end; bMoveSelectionUp := (iDestIndex <= iFirstSelection); if (iFirstSelection >= 0) then begin lbSortAnything.Items.BeginUpdate; try slBuffer := TStringList.Create; try //2o) Let's remove from the list the element that will be relocated. for iSeeker := pred(lbSortAnything.Items.Count) downto 0 do begin if lbSortAnything.Selected[iSeeker] then begin slBuffer.Insert(0, lbSortAnything.Items[iSeeker]); lbSortAnything.Items.Delete(iSeeker); end; end; //3o) If we're moving down, we need to readjust destination based on elements seen prior the destination. if not bMoveSelectionUp then iDestIndex := iDestIndex - pred(iBeforeTarget); //4o) Putting back elements in the list after move. It could be "inserted" or "added at the end" based on the result of move. if iDestIndex < lbSortAnything.Items.Count then begin for iSeeker := pred(slBuffer.Count) downto 0 do begin lbSortAnything.Items.Insert(iDestIndex, slBuffer.Strings[iSeeker]); lbSortAnything.Selected[iDestIndex] := True; end; end else begin for iSeeker := 0 to pred(slBuffer.Count) do begin lbSortAnything.Items.Add(slBuffer.Strings[iSeeker]); lbSortAnything.Selected[pred(lbSortAnything.Items.Count)] := True; end; end; finally lbSortAnything.Items.EndUpdate; end; finally slBuffer.Free; end; end; end; end; { HaveUserSortThisList } function HaveUserSortThisList(TheOwner: TCustomForm; const ACaption: string; const slListToSort: TStringList): integer; begin Result := mrCancel; with TfrmSortAnything.Create(TheOwner) do begin try Caption := ACaption; lbSortAnything.Items.Assign(slListToSort); Result := ShowModal; if Result = mrOk then slListToSort.Assign(lbSortAnything.Items); finally Free; end; end; end; end. doublecmd-1.1.30/src/fsortanything.lrj0000644000175000001440000000145015104114162016764 0ustar alexxusers{"version":1,"strings":[ {"hash":145497015,"name":"tfrmsortanything.caption","sourcebytes":[102,114,109,83,111,114,116,65,110,121,116,104,105,110,103],"value":"frmSortAnything"}, {"hash":195101837,"name":"tfrmsortanything.lblsortanything.caption","sourcebytes":[68,114,97,103,32,97,110,100,32,100,114,111,112,32,101,108,101,109,101,110,116,115,32,116,111,32,115,111,114,116,32,116,104,101,109],"value":"Drag and drop elements to sort them"}, {"hash":11067,"name":"tfrmsortanything.buttonpanel.okbutton.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmsortanything.buttonpanel.cancelbutton.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":2860692,"name":"tfrmsortanything.btnsort.caption","sourcebytes":[38,83,111,114,116],"value":"&Sort"} ]} doublecmd-1.1.30/src/fsortanything.lfm0000644000175000001440000000456115104114162016761 0ustar alexxusersobject frmSortAnything: TfrmSortAnything Left = 571 Height = 375 Top = 241 Width = 397 Caption = 'frmSortAnything' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 375 ClientWidth = 397 OnCreate = FormCreate SessionProperties = 'Height;Width;Left;Top' LCLVersion = '2.0.6.0' object lbSortAnything: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSortAnything AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ButtonPanel Left = 6 Height = 313 Top = 24 Width = 389 Anchors = [akTop, akLeft, akBottom] DragMode = dmAutomatic ItemHeight = 0 MultiSelect = True OnDragDrop = lbSortAnythingDragDrop OnDragOver = lbSortAnythingDragOver TabOrder = 0 end object lblSortAnything: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner Left = 6 Height = 15 Top = 6 Width = 385 Align = alTop Caption = 'Drag and drop elements to sort them' ParentColor = False end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 26 Top = 343 Width = 385 Align = alNone Anchors = [akLeft, akRight, akBottom] OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.Caption = '&Cancel' CancelButton.DefaultCaption = False TabOrder = 1 ShowButtons = [pbOK, pbCancel] ShowBevel = False object btnSort: TBitBtn AnchorSideLeft.Control = ButtonPanel AnchorSideBottom.Side = asrBottom Left = 0 Height = 25 Top = 0 Width = 47 Anchors = [akTop, akLeft, akBottom] AutoSize = True Caption = '&Sort' OnClick = btnSortClick TabOrder = 4 end end end doublecmd-1.1.30/src/fsetfileproperties.pas0000644000175000001440000004213515104114162020004 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Change file properties dialog Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fSetFileProperties; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, Buttons, uFileSourceSetFilePropertyOperation, DCBasicTypes, DateTimePicker; type { TfrmSetFileProperties } TfrmSetFileProperties = class(TForm) Bevel2: TBevel; Bevel1: TBevel; btnCancel: TBitBtn; btnCreationTime: TSpeedButton; btnLastAccessTime: TSpeedButton; btnLastWriteTime: TSpeedButton; btnOK: TBitBtn; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; chkArchive: TCheckBox; chkCreationTime: TCheckBox; chkHidden: TCheckBox; chkLastAccessTime: TCheckBox; chkLastWriteTime: TCheckBox; chkReadOnly: TCheckBox; chkRecursive: TCheckBox; chkSystem: TCheckBox; edtOctal: TEdit; gbTimeSamp: TGroupBox; gbWinAttributes: TGroupBox; gbUnixAttributes: TGroupBox; lblAttrBitsStr: TLabel; lblAttrGroupStr: TLabel; lblAttrInfo: TLabel; lblModeInfo: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblAttrText: TLabel; lblAttrTextStr: TLabel; lblExec: TLabel; lblOctal: TLabel; lblRead: TLabel; lblWrite: TLabel; DatesPanel: TPanel; ChecksPanel: TPanel; ZVCreationDateTime: TDateTimePicker; ZVLastWriteDateTime: TDateTimePicker; ZVLastAccessDateTime: TDateTimePicker; procedure btnCreationTimeClick(Sender: TObject); procedure btnLastAccessTimeClick(Sender: TObject); procedure btnLastWriteTimeClick(Sender: TObject); procedure SetOtherDateLikeThis(ReferenceZVDateTimePicker:TDateTimePicker); procedure btnOKClick(Sender: TObject); procedure cbChangeModeClick(Sender: TObject); procedure chkChangeAttrClick(Sender: TObject); procedure chkCreationTimeChange(Sender: TObject); procedure chkLastAccessTimeChange(Sender: TObject); procedure chkLastWriteTimeChange(Sender: TObject); procedure edtOctalKeyPress(Sender: TObject; var Key: char); procedure edtOctalKeyUp(Sender: TObject; var {%H-}Key: Word; {%H-}Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure ZVCreationDateTimeChange(Sender: TObject); procedure ZVLastAccessDateTimeChange(Sender: TObject); procedure ZVLastWriteDateTimeChange(Sender: TObject); procedure ZVCreationDateTimeClick(Sender: TObject); procedure ZVLastWriteDateTimeClick(Sender: TObject); procedure ZVLastAccessDateTimeClick(Sender: TObject); private FOperation: TFileSourceSetFilePropertyOperation; FChangeTriggersEnabled: Boolean; procedure ShowMode(Mode: TFileAttrs); procedure ShowAttr(Attr: TFileAttrs); procedure UpdateAllowGrayed(AllowGrayed: Boolean); function FormatUnixAttributesEx(iAttr: TFileAttrs): String; function GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; function GetAttrFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; public constructor Create(aOwner: TComponent; const aOperation: TFileSourceSetFilePropertyOperation); reintroduce; end; function ShowChangeFilePropertiesDialog(const aOperation: TFileSourceSetFilePropertyOperation): Boolean; implementation {$R *.lfm} uses LCLType, DCFileAttributes, DCStrUtils, uDCUtils, uFileProperty, uKeyboard; function ShowChangeFilePropertiesDialog(const aOperation: TFileSourceSetFilePropertyOperation): Boolean; begin with TfrmSetFileProperties.Create(Application, aOperation) do try Result:= (ShowModal = mrOK); finally Free; end; end; { TfrmSetFileProperties } procedure TfrmSetFileProperties.btnOKClick(Sender: TObject); var theNewProperties: TFileProperties; begin with FOperation do begin theNewProperties:= NewProperties; if fpAttributes in SupportedProperties then begin if theNewProperties[fpAttributes] is TNtfsFileAttributesProperty then IncludeAttributes:= GetAttrFromForm(ExcludeAttributes); if theNewProperties[fpAttributes] is TUnixFileAttributesProperty then IncludeAttributes:= GetModeFromForm(ExcludeAttributes); // Nothing changed, clear new property if (IncludeAttributes = 0) and (ExcludeAttributes = 0) then begin theNewProperties[fpAttributes].Free; theNewProperties[fpAttributes]:= nil; end; end; if chkCreationTime.Checked then (theNewProperties[fpCreationTime] as TFileCreationDateTimeProperty).Value:= ZVCreationDateTime.DateTime else begin theNewProperties[fpCreationTime].Free; theNewProperties[fpCreationTime]:= nil; end; if chkLastWriteTime.Checked then (theNewProperties[fpModificationTime] as TFileModificationDateTimeProperty).Value:= ZVLastWriteDateTime.DateTime else begin theNewProperties[fpModificationTime].Free; theNewProperties[fpModificationTime]:= nil; end; if chkLastAccessTime.Checked then (theNewProperties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value:= ZVLastAccessDateTime.DateTime else begin theNewProperties[fpLastAccessTime].Free; theNewProperties[fpLastAccessTime]:= nil; end; NewProperties:= theNewProperties; Recursive:= chkRecursive.Checked; end; end; procedure TfrmSetFileProperties.cbChangeModeClick(Sender: TObject); var AMode, ExcludeAttrs: TFileAttrs; CheckBox: TCheckBox absolute Sender; begin if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; if CheckBox.State = cbGrayed then begin edtOctal.Text:= EmptyStr; lblAttrText.Caption:= EmptyStr; end else begin AMode:= GetModeFromForm(ExcludeAttrs); edtOctal.Text:= DecToOct(AMode); lblAttrText.Caption:= FormatUnixAttributesEx(AMode); end; FChangeTriggersEnabled := True; end; end; procedure TfrmSetFileProperties.chkChangeAttrClick(Sender: TObject); begin // Called after checking any windows-check end; procedure TfrmSetFileProperties.edtOctalKeyPress(Sender: TObject; var Key: char); begin if not ((Key in ['0'..'7']) or (Key = Chr(VK_BACK)) or (Key = Chr(VK_DELETE))) then Key:= #0; end; procedure TfrmSetFileProperties.edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var AMode: TFileAttrs; begin if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; AMode:= OctToDec(edtOctal.Text); lblAttrText.Caption:= FormatUnixAttributesEx(AMode); ShowMode(AMode); FChangeTriggersEnabled := True; end; end; procedure TfrmSetFileProperties.FormCreate(Sender: TObject); begin end; procedure TfrmSetFileProperties.ShowMode(Mode: TFileAttrs); begin cbReadOwner.Checked:= ((Mode and S_IRUSR) = S_IRUSR); cbWriteOwner.Checked:= ((Mode and S_IWUSR) = S_IWUSR); cbExecOwner.Checked:= ((Mode and S_IXUSR) = S_IXUSR); cbReadGroup.Checked:= ((Mode and S_IRGRP) = S_IRGRP); cbWriteGroup.Checked:= ((Mode and S_IWGRP) = S_IWGRP); cbExecGroup.Checked:= ((Mode and S_IXGRP) = S_IXGRP); cbReadOther.Checked:= ((Mode and S_IROTH) = S_IROTH); cbWriteOther.Checked:= ((Mode and S_IWOTH) = S_IWOTH); cbExecOther.Checked:= ((Mode and S_IXOTH) = S_IXOTH); cbSuid.Checked:= ((Mode and S_ISUID) = S_ISUID); cbSgid.Checked:= ((Mode and S_ISGID) = S_ISGID); cbSticky.Checked:= ((Mode and S_ISVTX) = S_ISVTX); end; procedure TfrmSetFileProperties.ShowAttr(Attr: TFileAttrs); begin chkArchive.Checked:= ((Attr and FILE_ATTRIBUTE_ARCHIVE) <> 0); chkReadOnly.Checked:= ((Attr and FILE_ATTRIBUTE_READONLY) <> 0); chkHidden.Checked:= ((Attr and FILE_ATTRIBUTE_HIDDEN) <> 0); chkSystem.Checked:= ((Attr and FILE_ATTRIBUTE_SYSTEM) <> 0); end; procedure TfrmSetFileProperties.UpdateAllowGrayed(AllowGrayed: Boolean); var Index: Integer; begin lblAttrInfo.Visible:= AllowGrayed; for Index:= 0 to gbWinAttributes.ControlCount - 1 do begin if gbWinAttributes.Controls[Index] is TCheckBox then TCheckBox(gbWinAttributes.Controls[Index]).AllowGrayed:= AllowGrayed; end; lblModeInfo.Visible:= AllowGrayed; for Index:= 0 to gbUnixAttributes.ControlCount - 1 do begin if gbUnixAttributes.Controls[Index] is TCheckBox then TCheckBox(gbUnixAttributes.Controls[Index]).AllowGrayed:= AllowGrayed; end; end; function TfrmSetFileProperties.FormatUnixAttributesEx(iAttr: TFileAttrs): String; begin Result:= Copy(FormatUnixAttributes(iAttr), 2, MaxInt); end; function TfrmSetFileProperties.GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; begin Result:= 0; ExcludeAttrs:= 0; case cbReadOwner.State of cbChecked: Result:= (Result or S_IRUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRUSR; end; case cbWriteOwner.State of cbChecked: Result:= (Result or S_IWUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWUSR; end; case cbExecOwner.State of cbChecked: Result:= (Result or S_IXUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXUSR; end; case cbReadGroup.State of cbChecked: Result:= (Result or S_IRGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRGRP; end; case cbWriteGroup.State of cbChecked: Result:= (Result or S_IWGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWGRP; end; case cbExecGroup.State of cbChecked: Result:= (Result or S_IXGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXGRP; end; case cbReadOther.State of cbChecked: Result:= (Result or S_IROTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IROTH; end; case cbWriteOther.State of cbChecked: Result:= (Result or S_IWOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWOTH; end; case cbExecOther.State of cbChecked: Result:= (Result or S_IXOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXOTH; end; case cbSuid.State of cbChecked: Result:= (Result or S_ISUID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISUID; end; case cbSgid.State of cbChecked: Result:= (Result or S_ISGID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISGID; end; case cbSticky.State of cbChecked: Result:= (Result or S_ISVTX); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISVTX; end; end; function TfrmSetFileProperties.GetAttrFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; begin Result:= 0; ExcludeAttrs:= 0; case chkArchive.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_ARCHIVE); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_ARCHIVE; end; case chkReadOnly.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_READONLY); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_READONLY; end; case chkHidden.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_HIDDEN); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_HIDDEN; end; case chkSystem.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_SYSTEM); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_SYSTEM; end; end; constructor TfrmSetFileProperties.Create(aOwner: TComponent; const aOperation: TFileSourceSetFilePropertyOperation); begin inherited Create(aOwner); FOperation:= aOperation; FChangeTriggersEnabled:= True; ZVCreationDateTime.DateTime:= NullDate; ZVLastWriteDateTime.DateTime:= NullDate; ZVLastAccessDateTime.DateTime:= NullDate; // Enable only supported file properties with FOperation do begin if fpAttributes in SupportedProperties then begin UpdateAllowGrayed((TargetFiles.Count > 1) or TargetFiles[0].IsDirectory); if NewProperties[fpAttributes] is TNtfsFileAttributesProperty then begin if TargetFiles.Count = 1 then ShowAttr((NewProperties[fpAttributes] as TNtfsFileAttributesProperty).Value); gbWinAttributes.Show; end; if NewProperties[fpAttributes] is TUnixFileAttributesProperty then begin if TargetFiles.Count = 1 then ShowMode((NewProperties[fpAttributes] as TUnixFileAttributesProperty).Value); gbUnixAttributes.Show; end; end; if (fpCreationTime in SupportedProperties) and Assigned(NewProperties[fpCreationTime]) then begin ZVCreationDateTime.DateTime:= (NewProperties[fpCreationTime] as TFileCreationDateTimeProperty).Value; ZVCreationDateTime.Enabled:= True; chkCreationTime.Enabled:= True; btnCreationTime.Enabled:= True; end; if (fpModificationTime in SupportedProperties) and Assigned(NewProperties[fpModificationTime]) then begin ZVLastWriteDateTime.DateTime:= (NewProperties[fpModificationTime] as TFileModificationDateTimeProperty).Value; ZVLastWriteDateTime.Enabled:= True; chkLastWriteTime.Enabled:= True; btnLastWriteTime.Enabled:= True; end; if (fpLastAccessTime in SupportedProperties) and Assigned(NewProperties[fpLastAccessTime]) then begin ZVLastAccessDateTime.DateTime:= (NewProperties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value; ZVLastAccessDateTime.Enabled:= True; chkLastAccessTime.Enabled:= True; btnLastAccessTime.Enabled:= True; end; end; chkCreationTime.Checked:=False; chkLastWriteTime.Checked:=False; chkLastAccessTime.Checked:=False; end; procedure TfrmSetFileProperties.btnCreationTimeClick(Sender: TObject); begin ZVCreationDateTime.DateTime:= Now; if not chkCreationTime.Checked then chkCreationTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVCreationDateTime); end; procedure TfrmSetFileProperties.btnLastWriteTimeClick(Sender: TObject); begin ZVLastWriteDateTime.DateTime:= Now; if not chkLastWriteTime.Checked then chkLastWriteTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastWriteDateTime); end; procedure TfrmSetFileProperties.btnLastAccessTimeClick(Sender: TObject); begin ZVLastAccessDateTime.DateTime:= Now; if not chkLastAccessTime.Checked then chkLastAccessTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastAccessDateTime); end; procedure TfrmSetFileProperties.SetOtherDateLikeThis(ReferenceZVDateTimePicker:TDateTimePicker); begin if ReferenceZVDateTimePicker<>ZVCreationDateTime then begin ZVCreationDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkCreationTime.Checked:=TRUE; end; if ReferenceZVDateTimePicker<>ZVLastWriteDateTime then begin ZVLastWriteDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkLastWriteTime.Checked:=TRUE; end; if ReferenceZVDateTimePicker<>ZVLastAccessDateTime then begin ZVLastAccessDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkLastAccessTime.Checked:=TRUE; end; ReferenceZVDateTimePicker.SetFocus; end; procedure TfrmSetFileProperties.chkCreationTimeChange(Sender: TObject); begin UpdateColor(ZVCreationDateTime, chkCreationTime.Checked); if (chkCreationTime.Checked and Visible) then ZVCreationDateTime.SetFocus; end; procedure TfrmSetFileProperties.chkLastAccessTimeChange(Sender: TObject); begin UpdateColor(ZVLastAccessDateTime, chkLastAccessTime.Checked); if (chkLastAccessTime.Checked and Visible) then ZVLastAccessDateTime.SetFocus; end; procedure TfrmSetFileProperties.chkLastWriteTimeChange(Sender: TObject); begin UpdateColor(ZVLastWriteDateTime, chkLastWriteTime.Checked); if (chkLastWriteTime.Checked and Visible) then ZVLastWriteDateTime.SetFocus; end; procedure TfrmSetFileProperties.ZVCreationDateTimeChange(Sender: TObject); begin chkCreationTime.Checked:=True; end; procedure TfrmSetFileProperties.ZVLastAccessDateTimeChange(Sender: TObject); begin chkLastAccessTime.Checked:=True; end; procedure TfrmSetFileProperties.ZVLastWriteDateTimeChange(Sender: TObject); begin chkLastWriteTime.Checked:=True; end; procedure TfrmSetFileProperties.ZVCreationDateTimeClick(Sender: TObject); begin if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVCreationDateTime); end; procedure TfrmSetFileProperties.ZVLastWriteDateTimeClick(Sender: TObject); begin if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastWriteDateTime); end; procedure TfrmSetFileProperties.ZVLastAccessDateTimeClick(Sender: TObject); begin if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastAccessDateTime); end; end. doublecmd-1.1.30/src/fsetfileproperties.lrj0000644000175000001440000001062415104114162020006 0ustar alexxusers{"version":1,"strings":[ {"hash":96905523,"name":"tfrmsetfileproperties.caption","sourcebytes":[67,104,97,110,103,101,32,97,116,116,114,105,98,117,116,101,115],"value":"Change attributes"}, {"hash":11067,"name":"tfrmsetfileproperties.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmsetfileproperties.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":225888019,"name":"tfrmsetfileproperties.chkrecursive.caption","sourcebytes":[73,110,99,108,117,100,105,110,103,32,115,117,98,102,111,108,100,101,114,115],"value":"Including subfolders"}, {"hash":47347571,"name":"tfrmsetfileproperties.gbtimesamp.caption","sourcebytes":[84,105,109,101,115,116,97,109,112,32,112,114,111,112,101,114,116,105,101,115],"value":"Timestamp properties"}, {"hash":32,"name":"tfrmsetfileproperties.zvcreationdatetime.textfornulldate","sourcebytes":[32],"value":" "}, {"hash":32,"name":"tfrmsetfileproperties.zvlastwritedatetime.textfornulldate","sourcebytes":[32],"value":" "}, {"hash":32,"name":"tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate","sourcebytes":[32],"value":" "}, {"hash":146321370,"name":"tfrmsetfileproperties.chkcreationtime.caption","sourcebytes":[67,114,101,97,116,101,100,58],"value":"Created:"}, {"hash":184332074,"name":"tfrmsetfileproperties.chklastwritetime.caption","sourcebytes":[77,111,100,105,102,105,101,100,58],"value":"Modified:"}, {"hash":164289770,"name":"tfrmsetfileproperties.chklastaccesstime.caption","sourcebytes":[65,99,99,101,115,115,101,100,58],"value":"Accessed:"}, {"hash":150815091,"name":"tfrmsetfileproperties.gbwinattributes.caption","sourcebytes":[65,116,116,114,105,98,117,116,101,115],"value":"Attributes"}, {"hash":95464125,"name":"tfrmsetfileproperties.chksystem.caption","sourcebytes":[83,121,115,116,101,109],"value":"System"}, {"hash":82815678,"name":"tfrmsetfileproperties.chkhidden.caption","sourcebytes":[72,105,100,100,101,110],"value":"Hidden"}, {"hash":143257733,"name":"tfrmsetfileproperties.chkarchive.caption","sourcebytes":[65,114,99,104,105,118,101],"value":"Archive"}, {"hash":124198281,"name":"tfrmsetfileproperties.chkreadonly.caption","sourcebytes":[82,101,97,100,32,111,110,108,121],"value":"Read only"}, {"hash":97017545,"name":"tfrmsetfileproperties.lblattrinfo.caption","sourcebytes":[40,103,114,97,121,32,102,105,101,108,100,32,109,101,97,110,115,32,117,110,99,104,97,110,103,101,100,32,118,97,108,117,101,41],"value":"(gray field means unchanged value)"}, {"hash":150815091,"name":"tfrmsetfileproperties.gbunixattributes.caption","sourcebytes":[65,116,116,114,105,98,117,116,101,115],"value":"Attributes"}, {"hash":363380,"name":"tfrmsetfileproperties.lblread.caption","sourcebytes":[82,101,97,100],"value":"Read"}, {"hash":6197413,"name":"tfrmsetfileproperties.lblwrite.caption","sourcebytes":[87,114,105,116,101],"value":"Write"}, {"hash":216771813,"name":"tfrmsetfileproperties.lblexec.caption","sourcebytes":[69,120,101,99,117,116,101],"value":"Execute"}, {"hash":5694658,"name":"tfrmsetfileproperties.lblattrownerstr.caption","sourcebytes":[79,119,110,101,114],"value":"Owner"}, {"hash":5150400,"name":"tfrmsetfileproperties.lblattrgroupstr.caption","sourcebytes":[71,114,111,117,112],"value":"Group"}, {"hash":5680834,"name":"tfrmsetfileproperties.lblattrotherstr.caption","sourcebytes":[79,116,104,101,114],"value":"Other"}, {"hash":95091241,"name":"tfrmsetfileproperties.cbsticky.caption","sourcebytes":[83,116,105,99,107,121],"value":"Sticky"}, {"hash":359380,"name":"tfrmsetfileproperties.cbsgid.caption","sourcebytes":[83,71,73,68],"value":"SGID"}, {"hash":362964,"name":"tfrmsetfileproperties.cbsuid.caption","sourcebytes":[83,85,73,68],"value":"SUID"}, {"hash":4787050,"name":"tfrmsetfileproperties.lblattrbitsstr.caption","sourcebytes":[66,105,116,115,58],"value":"Bits:"}, {"hash":89827322,"name":"tfrmsetfileproperties.lbloctal.caption","sourcebytes":[79,99,116,97,108,58],"value":"Octal:"}, {"hash":5951354,"name":"tfrmsetfileproperties.lblattrtextstr.caption","sourcebytes":[84,101,120,116,58],"value":"Text:"}, {"hash":265289741,"name":"tfrmsetfileproperties.lblattrtext.caption","sourcebytes":[45,45,45,45,45,45,45,45,45,45,45],"value":"-----------"}, {"hash":97017545,"name":"tfrmsetfileproperties.lblmodeinfo.caption","sourcebytes":[40,103,114,97,121,32,102,105,101,108,100,32,109,101,97,110,115,32,117,110,99,104,97,110,103,101,100,32,118,97,108,117,101,41],"value":"(gray field means unchanged value)"} ]} doublecmd-1.1.30/src/fsetfileproperties.lfm0000644000175000001440000006533315104114162020004 0ustar alexxusersobject frmSetFileProperties: TfrmSetFileProperties Left = 477 Height = 593 Top = 127 Width = 309 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Change attributes' ClientHeight = 593 ClientWidth = 309 OnCreate = FormCreate Position = poScreenCenter LCLVersion = '1.4.3.0' object btnOK: TBitBtn AnchorSideTop.Control = chkRecursive AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 95 Height = 26 Top = 518 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 10 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 4 end object btnCancel: TBitBtn AnchorSideTop.Control = btnOK AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 201 Height = 26 Top = 518 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 BorderSpacing.Bottom = 10 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 5 end object chkRecursive: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbUnixAttributes AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 493 Width = 128 BorderSpacing.Left = 12 BorderSpacing.Top = 8 Caption = 'Including subfolders' TabOrder = 3 end object gbTimeSamp: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 113 Top = 6 Width = 293 AutoSize = True BorderSpacing.Around = 6 Caption = 'Timestamp properties' ClientHeight = 93 ClientWidth = 289 TabOrder = 0 object DatesPanel: TPanel AnchorSideLeft.Control = ChecksPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbTimeSamp AnchorSideRight.Control = gbTimeSamp AnchorSideRight.Side = asrBottom Left = 96 Height = 81 Top = 6 Width = 193 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 81 ClientWidth = 193 TabOrder = 1 object ZVCreationDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = DatesPanel AnchorSideRight.Control = DatesPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 0 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 0 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVCreationDateTimeChange OnClick = ZVCreationDateTimeClick end object ZVLastWriteDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = ZVCreationDateTime AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 29 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 1 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVLastWriteDateTimeChange OnClick = ZVLastWriteDateTimeClick end object ZVLastAccessDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = ZVLastWriteDateTime AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 58 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 2 BorderSpacing.Top = 6 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVLastAccessDateTimeChange OnClick = ZVLastAccessDateTimeClick end object btnLastWriteTime: TSpeedButton AnchorSideLeft.Control = ZVLastWriteDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVLastWriteDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 21 Top = 30 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnLastWriteTimeClick end object btnCreationTime: TSpeedButton AnchorSideLeft.Control = ZVCreationDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVCreationDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 20 Top = 1 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnCreationTimeClick end object btnLastAccessTime: TSpeedButton AnchorSideLeft.Control = ZVLastAccessDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVLastAccessDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 21 Top = 59 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnLastAccessTimeClick end end object ChecksPanel: TPanel AnchorSideTop.Control = DatesPanel AnchorSideBottom.Control = DatesPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 81 Top = 6 Width = 78 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 81 ClientWidth = 78 TabOrder = 0 object chkCreationTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Control = ChecksPanel Left = 6 Height = 19 Top = 6 Width = 64 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Created:' Enabled = False OnChange = chkCreationTimeChange TabOrder = 0 end object chkLastWriteTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Control = ChecksPanel AnchorSideTop.Side = asrCenter Left = 6 Height = 19 Top = 31 Width = 71 BorderSpacing.Left = 6 Caption = 'Modified:' Enabled = False OnChange = chkLastWriteTimeChange TabOrder = 1 end object chkLastAccessTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Side = asrCenter AnchorSideBottom.Control = ChecksPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 19 Top = 56 Width = 72 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Bottom = 6 Caption = 'Accessed:' Enabled = False OnChange = chkLastAccessTimeChange TabOrder = 2 end end end object gbWinAttributes: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbTimeSamp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 97 Top = 125 Width = 297 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Attributes' ClientHeight = 77 ClientWidth = 293 TabOrder = 1 Visible = False object chkSystem: TCheckBox AnchorSideLeft.Control = chkHidden AnchorSideTop.Control = chkReadOnly Left = 171 Height = 19 Top = 31 Width = 58 AllowGrayed = True BorderSpacing.Bottom = 6 Caption = 'System' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 3 end object chkHidden: TCheckBox AnchorSideTop.Control = chkArchive Left = 171 Height = 19 Top = 6 Width = 59 AllowGrayed = True Anchors = [akTop] Caption = 'Hidden' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 2 end object chkArchive: TCheckBox AnchorSideLeft.Control = gbWinAttributes AnchorSideTop.Control = gbWinAttributes Left = 6 Height = 19 Top = 6 Width = 60 AllowGrayed = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Archive' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 0 end object chkReadOnly: TCheckBox AnchorSideLeft.Control = chkArchive AnchorSideTop.Control = chkArchive AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 31 Width = 72 AllowGrayed = True BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = 'Read only' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 1 end object lblAttrInfo: TLabel AnchorSideLeft.Control = chkReadOnly AnchorSideTop.Control = chkReadOnly AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 17 Top = 56 Width = 189 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = '(gray field means unchanged value)' ParentColor = False end end object gbUnixAttributes: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbWinAttributes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 257 Top = 228 Width = 297 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Attributes' ClientHeight = 237 ClientWidth = 293 TabOrder = 2 Visible = False object lblRead: TLabel AnchorSideLeft.Control = cbReadOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = gbUnixAttributes Left = 94 Height = 15 Top = 0 Width = 26 Caption = 'Read' ParentColor = False end object lblWrite: TLabel AnchorSideLeft.Control = cbWriteOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead Left = 168 Height = 15 Top = 0 Width = 28 Caption = 'Write' ParentColor = False end object lblExec: TLabel AnchorSideLeft.Control = cbExecOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead Left = 235 Height = 15 Top = 0 Width = 40 Caption = 'Execute' ParentColor = False end object cbExecOwner: TCheckBox AnchorSideTop.Control = cbReadOwner Left = 245 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] OnClick = cbChangeModeClick State = cbGrayed TabOrder = 2 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = cbReadOwner Left = 172 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] OnClick = cbChangeModeClick State = cbGrayed TabOrder = 1 end object cbReadOwner: TCheckBox AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 0 end object lblAttrOwnerStr: TLabel AnchorSideLeft.Control = gbUnixAttributes AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 23 Width = 35 BorderSpacing.Left = 7 Caption = 'Owner' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 48 Width = 33 Caption = 'Group' ParentColor = False end object cbReadGroup: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 46 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbReadGroup Left = 172 Height = 19 Top = 46 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbReadGroup Left = 245 Height = 19 Top = 46 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 5 end object lblAttrOtherStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 73 Width = 30 Caption = 'Other' ParentColor = False end object cbReadOther: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 71 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbReadOther Left = 172 Height = 19 Top = 71 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbReadOther Left = 245 Height = 19 Top = 71 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 8 end object Bevel1: TBevel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 4 Height = 4 Top = 96 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object cbSticky: TCheckBox AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 131 Width = 51 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'Sticky' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 11 end object cbSgid: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 172 Height = 19 Top = 106 Width = 45 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SGID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 10 end object cbSuid: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 106 Width = 45 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SUID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 9 end object lblAttrBitsStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 108 Width = 22 Caption = 'Bits:' ParentColor = False end object Bevel2: TBevel AnchorSideTop.Control = lblModeInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 4 Height = 4 Top = 177 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object lblOctal: TLabel AnchorSideLeft.Control = lblAttrOtherStr AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 191 Width = 31 Caption = 'Octal:' FocusControl = edtOctal ParentColor = False end object edtOctal: TEdit AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = Bevel2 AnchorSideTop.Side = asrBottom Left = 97 Height = 23 Top = 187 Width = 80 BorderSpacing.Top = 6 MaxLength = 4 OnKeyPress = edtOctalKeyPress OnKeyUp = edtOctalKeyUp TabOrder = 12 end object lblAttrTextStr: TLabel AnchorSideLeft.Control = lblAttrOtherStr AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrBottom Left = 7 Height = 15 Top = 216 Width = 24 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = 'Text:' ParentColor = False end object lblAttrText: TLabel AnchorSideLeft.Control = edtOctal AnchorSideTop.Control = lblAttrTextStr AnchorSideTop.Side = asrCenter Left = 97 Height = 15 Top = 216 Width = 55 BorderSpacing.Bottom = 6 Caption = '-----------' ParentColor = False ParentFont = False end object lblModeInfo: TLabel AnchorSideLeft.Control = lblAttrBitsStr AnchorSideTop.Control = cbSticky AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 7 Height = 15 Top = 156 Width = 189 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = '(gray field means unchanged value)' ParentColor = False end end end doublecmd-1.1.30/src/fselecttextrange.pas0000644000175000001440000001310315104114162017426 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi-Rename text range selector dialog window Copyright (C) 2007-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fSelectTextRange; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, Buttons, ExtCtrls, //DC uOSForms; type { TfrmSelectTextRange } TfrmSelectTextRange = class(TModalForm) ButtonPanel: TButtonPanel; edtSelectText: TEdit; gbRangeDescription: TGroupBox; gbCountFirstFrom: TGroupBox; gbCountLastFrom: TGroupBox; lblResult: TLabel; lblValueToReturn: TLabel; lblSelectText: TLabel; rbDescriptionFirstLast: TRadioButton; rbFirstFromStart: TRadioButton; rbLastFromStart: TRadioButton; rbDescriptionFirstLength: TRadioButton; rbFirstFromEnd: TRadioButton; rbLastFromEnd: TRadioButton; procedure edtSelectTextKeyUp(Sender: TObject; var {%H-}Key: word; {%H-}Shift: TShiftState); procedure edtSelectTextMouseUp(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: integer); procedure FormCreate(Sender: TObject); procedure SomethingChange(Sender: TObject); private FCanvaForAutosize: TControlCanvas; FSelStart, FSelFinish, FWholeLength: integer; FPrefix: string; procedure ResfreshHint; public property Prefix: string read FPrefix write FPrefix; end; function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText, sPrefix: string; var sResultingMaskValue: string): boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC uGlobs; function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText, sPrefix: string; var sResultingMaskValue: string): boolean; begin with TfrmSelectTextRange.Create(TheOwner) do try Result := False; Caption := ACaption; edtSelectText.Constraints.MinWidth := FCanvaForAutosize.TextWidth(AText) + 20; edtSelectText.Text := AText; Prefix := sPrefix; rbDescriptionFirstLength.Checked := not rbDescriptionFirstLast.Checked; rbFirstFromEnd.Checked := not rbFirstFromStart.Checked; rbLastFromEnd.Checked := not rbLastFromStart.Checked; if ShowModal = mrOk then begin if (FSelFinish >= FSelStart) and (lblValueToReturn.Caption <> '') then begin sResultingMaskValue := lblValueToReturn.Caption; Result := True; end; end; finally Free; end; end; { TfrmSelectTextRange } procedure TfrmSelectTextRange.SomethingChange(Sender: TObject); begin ResfreshHint; end; procedure TfrmSelectTextRange.edtSelectTextKeyUp(Sender: TObject; var Key: word; Shift: TShiftState); begin SomethingChange(Sender); end; procedure TfrmSelectTextRange.edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin SomethingChange(Sender); end; procedure TfrmSelectTextRange.FormCreate(Sender: TObject); begin InitPropStorage(Self); // TEdit "edtSelectText" does not have Canvas. // We will use "FCanvaForAutosize" to determine the required width to hold the whole text. // This way, we will see it all. FCanvaForAutosize := TControlCanvas.Create; FCanvaForAutosize.Control := edtSelectText; FCanvaForAutosize.Font.Assign(edtSelectText.Font); end; procedure TfrmSelectTextRange.ResfreshHint; var sTempo: string; begin gbCountLastFrom.Enabled := not rbDescriptionFirstLength.Checked; sTempo := ''; FSelStart := edtSelectText.SelStart + 1; FSelFinish := edtSelectText.SelStart + edtSelectText.SelLength; FWholeLength := length(edtSelectText.Text); if (FSelFinish >= FSelStart) and (FWholeLength > 0) then begin if rbFirstFromStart.Checked then begin if FSelFinish = FSelStart then sTempo := Format('%d', [FSelStart]) else begin if rbDescriptionFirstLength.Checked then sTempo := Format('%d,%d', [FSelStart, succ(FSelFinish - FSelStart)]) else if rbLastFromStart.Checked then sTempo := Format('%d:%d', [FSelStart, FSelFinish]) else sTempo := Format('%d:-%d', [FSelStart, succ(FWholeLength - FSelFinish)]); end; end else begin if FSelFinish = FSelStart then sTempo := Format('-%d', [succ(FWholeLength - FSelStart)]) else begin if rbDescriptionFirstLength.Checked then sTempo := Format('-%d,%d', [succ(FWholeLength - FSelFinish), succ(FSelFinish - FSelStart)]) else if rbLastFromStart.Checked then sTempo := Format('-%d:%d', [succ(FWholeLength - FSelStart), FSelFinish]) else sTempo := Format('-%d:-%d', [succ(FWholeLength - FSelStart), succ(FWholeLength - FSelFinish)]); end; end; lblValueToReturn.Caption := Format('[%s%s]', [Prefix, sTempo]); end else begin lblValueToReturn.Caption := ''; end; end; end. doublecmd-1.1.30/src/fselecttextrange.lrj0000644000175000001440000000407615104114162017443 0ustar alexxusers{"version":1,"strings":[ {"hash":155530970,"name":"tfrmselecttextrange.lblselecttext.caption","sourcebytes":[38,83,101,108,101,99,116,32,116,104,101,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,105,110,115,101,114,116,58],"value":"&Select the characters to insert:"}, {"hash":11067,"name":"tfrmselecttextrange.buttonpanel.okbutton.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmselecttextrange.buttonpanel.cancelbutton.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":3531742,"name":"tfrmselecttextrange.gbrangedescription.caption","sourcebytes":[82,97,110,103,101,32,100,101,115,99,114,105,112,116,105,111,110],"value":"Range description"}, {"hash":174031725,"name":"tfrmselecttextrange.rbdescriptionfirstlast.caption","sourcebytes":[91,38,70,105,114,115,116,58,76,97,115,116,93],"value":"[&First:Last]"}, {"hash":37673821,"name":"tfrmselecttextrange.rbdescriptionfirstlength.caption","sourcebytes":[91,70,105,114,115,116,44,38,76,101,110,103,116,104,93],"value":"[First,&Length]"}, {"hash":147505962,"name":"tfrmselecttextrange.lblresult.caption","sourcebytes":[82,101,115,117,108,116,58],"value":"Result:"}, {"hash":251965197,"name":"tfrmselecttextrange.gbcountfirstfrom.caption","sourcebytes":[67,111,117,110,116,32,102,105,114,115,116,32,102,114,111,109],"value":"Count first from"}, {"hash":128947172,"name":"tfrmselecttextrange.rbfirstfromstart.caption","sourcebytes":[84,104,101,32,115,116,97,38,114,116],"value":"The sta&rt"}, {"hash":242664804,"name":"tfrmselecttextrange.rbfirstfromend.caption","sourcebytes":[84,104,101,32,101,110,38,100],"value":"The en&d"}, {"hash":103866813,"name":"tfrmselecttextrange.gbcountlastfrom.caption","sourcebytes":[67,111,117,110,116,32,108,97,115,116,32,102,114,111,109],"value":"Count last from"}, {"hash":123209444,"name":"tfrmselecttextrange.rblastfromstart.caption","sourcebytes":[84,104,101,32,115,38,116,97,114,116],"value":"The s&tart"}, {"hash":242405348,"name":"tfrmselecttextrange.rblastfromend.caption","sourcebytes":[84,104,101,32,38,101,110,100],"value":"The &end"} ]} doublecmd-1.1.30/src/fselecttextrange.lfm0000644000175000001440000001500215104114162017421 0ustar alexxusersobject frmSelectTextRange: TfrmSelectTextRange Left = 693 Height = 215 Top = 288 Width = 518 AutoSize = True BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 215 ClientWidth = 518 OnCreate = FormCreate Position = poOwnerFormCenter SessionProperties = 'Width;Top;Left;rbDescriptionFirstLast.Checked;rbDescriptionFirstLength.Checked;rbFirstFromEnd.Checked;rbFirstFromStart.Checked;rbLastFromEnd.Checked;rbLastFromStart.Checked' LCLVersion = '2.0.6.0' object edtSelectText: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 24 Width = 506 Anchors = [akTop, akLeft, akRight] AutoSelect = False Constraints.MinWidth = 300 HideSelection = False OnChange = SomethingChange OnKeyUp = edtSelectTextKeyUp OnMouseUp = edtSelectTextMouseUp TabOrder = 0 end object lblSelectText: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 6 Width = 157 Caption = '&Select the characters to insert:' FocusControl = edtSelectText ParentColor = False end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblResult AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 26 Top = 141 Width = 506 Align = alNone Anchors = [akTop, akLeft, akRight] OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.Caption = '&Cancel' CancelButton.DefaultCaption = False TabOrder = 1 ShowButtons = [pbOK, pbCancel] ShowBevel = False end object gbRangeDescription: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 64 Top = 53 Width = 114 AutoSize = True BorderSpacing.Top = 6 Caption = 'Range description' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 44 ClientWidth = 110 TabOrder = 2 object rbDescriptionFirstLast: TRadioButton AnchorSideLeft.Control = gbRangeDescription AnchorSideTop.Control = gbRangeDescription Left = 6 Height = 19 Top = 0 Width = 74 Caption = '[&First:Last]' Checked = True OnChange = SomethingChange TabOrder = 0 TabStop = True end object rbDescriptionFirstLength: TRadioButton AnchorSideLeft.Control = gbRangeDescription AnchorSideTop.Control = rbDescriptionFirstLast AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 22 Width = 90 BorderSpacing.Bottom = 3 Caption = '[First,&Length]' OnChange = SomethingChange TabOrder = 1 end end object lblResult: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbRangeDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 120 Width = 35 Caption = 'Result:' ParentColor = False end object gbCountFirstFrom: TGroupBox AnchorSideLeft.Control = gbRangeDescription AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 126 Height = 64 Top = 53 Width = 104 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Count first from' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 44 ClientWidth = 100 TabOrder = 3 object rbFirstFromStart: TRadioButton AnchorSideLeft.Control = gbCountFirstFrom AnchorSideTop.Control = gbCountFirstFrom Left = 6 Height = 19 Top = 0 Width = 65 Caption = 'The sta&rt' Checked = True OnChange = SomethingChange TabOrder = 0 TabStop = True end object rbFirstFromEnd: TRadioButton AnchorSideLeft.Control = gbCountFirstFrom AnchorSideTop.Control = rbFirstFromStart AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 22 Width = 62 BorderSpacing.Bottom = 3 Caption = 'The en&d' OnChange = SomethingChange TabOrder = 1 end end object gbCountLastFrom: TGroupBox AnchorSideLeft.Control = gbCountFirstFrom AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 236 Height = 64 Top = 53 Width = 102 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Count last from' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 44 ClientWidth = 98 TabOrder = 4 object rbLastFromStart: TRadioButton AnchorSideLeft.Control = gbCountLastFrom AnchorSideTop.Control = gbCountLastFrom Left = 6 Height = 19 Top = 0 Width = 65 Caption = 'The s&tart' Checked = True OnChange = SomethingChange TabOrder = 0 TabStop = True end object rbLastFromEnd: TRadioButton AnchorSideLeft.Control = gbCountLastFrom AnchorSideTop.Control = rbLastFromStart AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 22 Width = 62 BorderSpacing.Bottom = 3 Caption = 'The &end' OnChange = SomethingChange TabOrder = 1 end end object lblValueToReturn: TLabel AnchorSideLeft.Control = lblResult AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbRangeDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 44 Height = 15 Top = 120 Width = 468 Anchors = [akTop, akLeft, akRight] AutoSize = False ParentColor = False end end doublecmd-1.1.30/src/fselectpathrange.pas0000644000175000001440000001127015104114162017401 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi-Rename path range selector dialog window Copyright (C) 2007-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fSelectPathRange; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, Buttons, ExtCtrls, //DC uOSForms; type { TfrmSelectPathRange } TfrmSelectPathRange = class(TModalForm) lblSelectDirectories: TLabel; lbDirectories: TListBox; pnlChoices: TPanel; gbCountFrom: TGroupBox; rbFirstFromStart: TRadioButton; rbFirstFromEnd: TRadioButton; edSeparator: TLabeledEdit; lblResult: TLabel; lblValueToReturn: TLabel; ButtonPanel: TButtonPanel; procedure FormCreate(Sender: TObject); procedure edtSelectTextKeyUp(Sender: TObject; var {%H-}Key: word; {%H-}Shift: TShiftState); procedure edtSelectTextMouseUp(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: integer); procedure lbDirectoriesSelectionChange(Sender: TObject; {%H-}User: boolean); procedure SomethingChange(Sender: TObject); private FPrefix: string; procedure ResfreshHint; public property Prefix: string read FPrefix write FPrefix; end; function ShowSelectPathRangeDlg(TheOwner: TCustomForm; const ACaption, AText, sPrefix: string; var sResultingMaskValue: string): boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC uGlobs; { TfrmSelectPathRange } { TfrmSelectPathRange.FormCreate } procedure TfrmSelectPathRange.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; { TfrmSelectPathRange.edtSelectTextKeyUp } procedure TfrmSelectPathRange.edtSelectTextKeyUp(Sender: TObject; var Key: word; Shift: TShiftState); begin SomethingChange(Sender); end; { TfrmSelectPathRange.edtSelectTextMouseUp } procedure TfrmSelectPathRange.edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin SomethingChange(Sender); end; { TfrmSelectPathRange.lbDirectoriesSelectionChange } procedure TfrmSelectPathRange.lbDirectoriesSelectionChange(Sender: TObject; User: boolean); begin SomethingChange(Sender); end; { TfrmSelectPathRange.SomethingChange } procedure TfrmSelectPathRange.SomethingChange(Sender: TObject); begin ResfreshHint; end; { TfrmSelectPathRange.ResfreshHint } procedure TfrmSelectPathRange.ResfreshHint; var sTempo: string; iSeeker: integer; begin rbFirstFromEnd.Checked := not rbFirstFromStart.Checked; sTempo := ''; for iSeeker := 0 to pred(lbDirectories.Items.Count) do if lbDirectories.Selected[iSeeker] then begin if sTempo <> '' then sTempo += edSeparator.Text; if rbFirstFromStart.Checked then sTempo += '[' + Prefix + IntToStr(iSeeker) + ']' else sTempo += '[' + Prefix + '-' + IntToStr(lbDirectories.Items.Count - iSeeker) + ']'; end; lblValueToReturn.Caption := sTempo; end; { ShowSelectPathRangeDlg } function ShowSelectPathRangeDlg(TheOwner: TCustomForm; const ACaption, AText, sPrefix: string; var sResultingMaskValue: string): boolean; var Directories: TStringArray; sDirectory: string; begin with TfrmSelectPathRange.Create(TheOwner) do try Result := False; rbFirstFromEnd.Checked := not rbFirstFromStart.Checked; edSeparator.Text := gMulRenPathRangeSeparator; Caption := ACaption; Directories := (Trim(AText)).Split([PathDelim]); for sDirectory in Directories do lbDirectories.Items.Add(sDirectory); Prefix := sPrefix; if ShowModal = mrOk then begin if lblValueToReturn.Caption <> '' then begin gMulRenPathRangeSeparator := edSeparator.Text; sResultingMaskValue := lblValueToReturn.Caption; Result := True; end; end; finally Free; end; end; end. doublecmd-1.1.30/src/fselectpathrange.lrj0000644000175000001440000000257115104114162017411 0ustar alexxusers{"version":1,"strings":[ {"hash":136763673,"name":"tfrmselectpathrange.lblselectdirectories.caption","sourcebytes":[38,83,101,108,101,99,116,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,116,111,32,105,110,115,101,114,116,32,40,121,111,117,32,109,97,121,32,115,101,108,101,99,116,32,109,111,114,101,32,116,104,97,110,32,111,110,101,41],"value":"&Select the directories to insert (you may select more than one)"}, {"hash":11067,"name":"tfrmselectpathrange.buttonpanel.okbutton.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmselectpathrange.buttonpanel.cancelbutton.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":147505962,"name":"tfrmselectpathrange.lblresult.caption","sourcebytes":[82,101,115,117,108,116,58],"value":"Result:"}, {"hash":90341277,"name":"tfrmselectpathrange.gbcountfrom.caption","sourcebytes":[67,111,117,110,116,32,102,114,111,109],"value":"Count from"}, {"hash":128947172,"name":"tfrmselectpathrange.rbfirstfromstart.caption","sourcebytes":[84,104,101,32,115,116,97,38,114,116],"value":"The sta&rt"}, {"hash":242664804,"name":"tfrmselectpathrange.rbfirstfromend.caption","sourcebytes":[84,104,101,32,101,110,38,100],"value":"The en&d"}, {"hash":210573122,"name":"tfrmselectpathrange.edseparator.editlabel.caption","sourcebytes":[83,101,112,38,97,114,97,116,111,114],"value":"Sep&arator"} ]} doublecmd-1.1.30/src/fselectpathrange.lfm0000644000175000001440000001224415104114162017376 0ustar alexxusersobject frmSelectPathRange: TfrmSelectPathRange Left = 696 Height = 307 Top = 219 Width = 362 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 307 ClientWidth = 362 OnCreate = FormCreate Position = poOwnerFormCenter SessionProperties = 'Left;Top;Width;rbFirstFromEnd.Checked;rbFirstFromStart.Checked' LCLVersion = '2.0.6.0' object lblSelectDirectories: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 6 Width = 326 Caption = '&Select the directories to insert (you may select more than one)' FocusControl = lbDirectories ParentColor = False end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 26 Top = 275 Width = 350 Align = alNone Anchors = [akLeft, akRight, akBottom] OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.Caption = '&Cancel' CancelButton.DefaultCaption = False TabOrder = 2 ShowButtons = [pbOK, pbCancel] ShowBevel = False end object lblResult: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lbDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ButtonPanel Left = 6 Height = 15 Top = 254 Width = 35 Anchors = [akLeft, akBottom] Caption = 'Result:' ParentColor = False end object lblValueToReturn: TLabel AnchorSideLeft.Control = lblResult AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ButtonPanel Left = 44 Height = 15 Top = 254 Width = 312 Anchors = [akLeft, akRight, akBottom] AutoSize = False ParentColor = False end object lbDirectories: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSelectDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlChoices AnchorSideBottom.Control = lblResult Left = 6 Height = 227 Top = 24 Width = 247 Anchors = [akTop, akLeft, akRight, akBottom] ItemHeight = 0 MultiSelect = True OnSelectionChange = lbDirectoriesSelectionChange TabOrder = 0 end object pnlChoices: TPanel AnchorSideTop.Control = lblSelectDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblResult Left = 256 Height = 227 Top = 24 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.VerticalSpacing = 2 ClientHeight = 227 ClientWidth = 100 TabOrder = 1 object gbCountFrom: TGroupBox AnchorSideLeft.Control = pnlChoices AnchorSideTop.Control = pnlChoices AnchorSideRight.Control = pnlChoices AnchorSideRight.Side = asrBottom Left = 0 Height = 64 Top = 0 Width = 100 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Count from' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 3 ClientHeight = 44 ClientWidth = 96 TabOrder = 0 object rbFirstFromStart: TRadioButton AnchorSideLeft.Control = gbCountFrom AnchorSideTop.Control = gbCountFrom Left = 6 Height = 19 Top = 0 Width = 65 Caption = 'The sta&rt' Checked = True OnChange = SomethingChange TabOrder = 0 TabStop = True end object rbFirstFromEnd: TRadioButton AnchorSideLeft.Control = gbCountFrom AnchorSideTop.Control = rbFirstFromStart AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 22 Width = 62 BorderSpacing.Bottom = 3 Caption = 'The en&d' OnChange = SomethingChange TabOrder = 1 end end object edSeparator: TLabeledEdit AnchorSideLeft.Control = pnlChoices AnchorSideRight.Control = pnlChoices AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlChoices AnchorSideBottom.Side = asrBottom Left = 0 Height = 23 Top = 204 Width = 100 Anchors = [akLeft, akRight, akBottom] Constraints.MinWidth = 100 EditLabel.Height = 15 EditLabel.Width = 100 EditLabel.Caption = 'Sep&arator' EditLabel.ParentColor = False TabOrder = 1 OnChange = SomethingChange end end end doublecmd-1.1.30/src/fselectduplicates.pas0000644000175000001440000001511115104114162017563 0ustar alexxusersunit fSelectDuplicates; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls, ExtCtrls, KASComboBox, KASButtonPanel, uFileView; type { TfrmSelectDuplicates } TfrmSelectDuplicates = class(TForm) btnApply: TBitBtn; btnCancel: TBitBtn; btnOK: TBitBtn; btnIncludeMask: TSpeedButton; btnExcludeMask: TSpeedButton; cmbFirstMethod: TComboBoxAutoWidth; cmbIncludeMask: TComboBox; cmbExcludeMask: TComboBox; chkLeaveUnselected: TCheckBox; cmbSecondMethod: TComboBoxAutoWidth; lblIncludeMask: TLabel; lblExcludeMask: TLabel; lblFirstMethod: TLabel; lblSecondMethod: TLabel; pnlMethods: TPanel; pnlButtons: TKASButtonPanel; procedure btnApplyClick(Sender: TObject); procedure btnIncludeMaskClick(Sender: TObject); procedure chkLeaveUnselectedChange(Sender: TObject); procedure cmbFirstMethodChange(Sender: TObject); private FFileView: TFileView; end; procedure ShowSelectDuplicates(TheOwner: TCustomForm; AFileView: TFileView); implementation {$R *.lfm} uses uFile, uFileSorting, uFileFunctions, uDisplayFile, uFileProperty, uTypes, uGlobs, fMaskInputDlg, uLng, uSearchTemplate, DCStrUtils; procedure ShowSelectDuplicates(TheOwner: TCustomForm; AFileView: TFileView); begin with TfrmSelectDuplicates.Create(TheOwner) do begin FFileView:= AFileView; cmbFirstMethod.ItemIndex:= 0; cmbSecondMethod.ItemIndex:= 2; cmbIncludeMask.Items.Assign(glsMaskHistory); cmbExcludeMask.Items.Assign(glsMaskHistory); // Localize methods ParseLineToList(rsSelectDuplicateMethod, cmbFirstMethod.Items); ParseLineToList(rsSelectDuplicateMethod, cmbSecondMethod.Items); cmbSecondMethod.Items.Delete(cmbSecondMethod.Items.Count - 1); cmbSecondMethod.Items.Delete(cmbSecondMethod.Items.Count - 1); if ShowModal = mrOK then begin btnApplyClick(btnApply); end; Free; end; end; { TfrmSelectDuplicates } procedure TfrmSelectDuplicates.cmbFirstMethodChange(Sender: TObject); begin cmbSecondMethod.Enabled:= cmbFirstMethod.ItemIndex < 4; end; procedure TfrmSelectDuplicates.btnApplyClick(Sender: TObject); var ARange: TRange; AFinish: Integer; Index, J: Integer; ASelected: Integer; AFiles: TDisplayFiles; AGroup, AValue: Variant; NewSorting: TFileSortings = nil; begin FFileView.MarkGroup(cmbIncludeMask.Text, True); if Length(cmbExcludeMask.Text) > 0 then begin FFileView.MarkGroup(cmbExcludeMask.Text, False); end; if not chkLeaveUnselected.Checked then Exit; AFiles:= FFileView.DisplayFiles; // First sort by group SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 1); NewSorting[0].SortFunctions[0] := fsfVariant; NewSorting[0].SortDirection := sdAscending; case cmbFirstMethod.ItemIndex of 0, 1: // Newest/Oldest begin SetLength(NewSorting, 2); SetLength(NewSorting[1].SortFunctions, 1); NewSorting[1].SortFunctions[0] := fsfModificationTime; if (cmbFirstMethod.ItemIndex = 1) then // First item will be Oldest NewSorting[1].SortDirection := sdAscending else begin // First item will be Newest NewSorting[1].SortDirection := sdDescending; end; end; 2, 3: // Largest/Smallest begin SetLength(NewSorting, 2); SetLength(NewSorting[1].SortFunctions, 1); NewSorting[1].SortFunctions[0] := fsfSize; if (cmbFirstMethod.ItemIndex = 3) then // First item will be Smallest NewSorting[1].SortDirection := sdAscending else begin // First item will be Largest NewSorting[1].SortDirection := sdDescending; end; end; end; if cmbSecondMethod.Enabled then begin case cmbSecondMethod.ItemIndex of 0, 1: begin SetLength(NewSorting, 3); SetLength(NewSorting[2].SortFunctions, 1); NewSorting[2].SortFunctions[0] := fsfModificationTime; if (cmbSecondMethod.ItemIndex = 1) then NewSorting[2].SortDirection := sdAscending else begin NewSorting[2].SortDirection := sdDescending; end; end; 2, 3: begin SetLength(NewSorting, 3); SetLength(NewSorting[2].SortFunctions, 1); NewSorting[2].SortFunctions[0] := fsfSize; if (cmbSecondMethod.ItemIndex = 3) then NewSorting[2].SortDirection := sdAscending else begin NewSorting[2].SortDirection := sdDescending; end; end; end; end; FFileView.Sorting:= NewSorting; // Skip '..' item if AFiles[0].FSFile.IsNameValid then ARange.First:= 0 else begin ARange.First:= 1; end; AFinish:= AFiles.Count - 1; AGroup:= TFileVariantProperty(AFiles[ARange.First].FSFile.Properties[fpVariant]).Value; for Index:= ARange.First + 1 to AFinish do begin AValue:= TFileVariantProperty(AFiles[Index].FSFile.Properties[fpVariant]).Value; if (AValue <> AGroup) or (Index = AFinish) then begin if (AValue <> AGroup) then begin ASelected:= 0; ARange.Last:= Index - 1; end else begin ASelected:= -1; ARange.Last:= Index; end; for J:= ARange.First to ARange.Last do begin if AFiles[J].Selected then Inc(ASelected); end; // Selected all files in the group if ASelected = (Index - ARange.First) then begin if cmbFirstMethod.ItemIndex = 5 then AFiles[ARange.Last].Selected:= False else begin AFiles[ARange.First].Selected:= False; end; end; AGroup:= AValue; ARange.First:= Index; end; end; end; procedure TfrmSelectDuplicates.btnIncludeMaskClick(Sender: TObject); var sMask: String; bTemplate: Boolean; AComboBox: TComboBox; begin if Sender = btnIncludeMask then AComboBox:= cmbIncludeMask else begin AComboBox:= cmbExcludeMask; end; sMask:= AComboBox.Text; if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate:= IsMaskSearchTemplate(sMask); AComboBox.Enabled:= not bTemplate; AComboBox.Text:= sMask; end; end; procedure TfrmSelectDuplicates.chkLeaveUnselectedChange(Sender: TObject); begin cmbFirstMethod.Enabled:= chkLeaveUnselected.Checked; cmbSecondMethod.Enabled:= chkLeaveUnselected.Checked; end; end. doublecmd-1.1.30/src/fselectduplicates.lrj0000644000175000001440000000372615104114162017600 0ustar alexxusers{"version":1,"strings":[ {"hash":165719427,"name":"tfrmselectduplicates.caption","sourcebytes":[83,101,108,101,99,116,32,100,117,112,108,105,99,97,116,101,32,102,105,108,101,115],"value":"Select duplicate files"}, {"hash":47236478,"name":"tfrmselectduplicates.btnincludemask.hint","sourcebytes":[84,101,109,112,108,97,116,101,46,46,46],"value":"Template..."}, {"hash":42,"name":"tfrmselectduplicates.cmbincludemask.text","sourcebytes":[42],"value":"*"}, {"hash":245718570,"name":"tfrmselectduplicates.lblincludemask.caption","sourcebytes":[83,101,108,101,99,116,32,98,121,32,38,110,97,109,101,47,101,120,116,101,110,115,105,111,110,58],"value":"Select by &name/extension:"}, {"hash":214104570,"name":"tfrmselectduplicates.lblexcludemask.caption","sourcebytes":[38,82,101,109,111,118,101,32,115,101,108,101,99,116,105,111,110,32,98,121,32,110,97,109,101,47,101,120,116,101,110,115,105,111,110,58],"value":"&Remove selection by name/extension:"}, {"hash":47236478,"name":"tfrmselectduplicates.btnexcludemask.hint","sourcebytes":[84,101,109,112,108,97,116,101,46,46,46],"value":"Template..."}, {"hash":14425802,"name":"tfrmselectduplicates.chkleaveunselected.caption","sourcebytes":[38,76,101,97,118,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,102,105,108,101,32,105,110,32,101,97,99,104,32,103,114,111,117,112,32,117,110,115,101,108,101,99,116,101,100,58],"value":"&Leave at least one file in each group unselected:"}, {"hash":10558,"name":"tfrmselectduplicates.lblfirstmethod.caption","sourcebytes":[38,49,46],"value":"&1."}, {"hash":10574,"name":"tfrmselectduplicates.lblsecondmethod.caption","sourcebytes":[38,50,46],"value":"&2."}, {"hash":11067,"name":"tfrmselectduplicates.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmselectduplicates.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":44595001,"name":"tfrmselectduplicates.btnapply.caption","sourcebytes":[38,65,112,112,108,121],"value":"&Apply"} ]} doublecmd-1.1.30/src/fselectduplicates.lfm0000644000175000001440000002640515104114162017566 0ustar alexxusersobject frmSelectDuplicates: TfrmSelectDuplicates Left = 509 Height = 252 Top = 205 Width = 526 AutoSize = True BorderStyle = bsDialog Caption = 'Select duplicate files' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 4 ClientHeight = 252 ClientWidth = 526 Constraints.MinWidth = 480 DesignTimePPI = 120 Position = poOwnerFormCenter LCLVersion = '2.0.10.0' object btnIncludeMask: TSpeedButton AnchorSideLeft.Control = cmbIncludeMask AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbIncludeMask AnchorSideBottom.Control = cmbIncludeMask AnchorSideBottom.Side = asrBottom Left = 490 Height = 28 Hint = 'Template...' Top = 24 Width = 29 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000330000 0033000000330000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000214F6B83FF4966 85FF5191D9FF0000003300000000000000000000000000000000000000000000 00000000000000000000000000000000000000000021B07836B75485ABFF7EA7 B8FF8FD5FFFF356A9CFF00000033000000000000000000000000000000000000 000000000000000000000000000000000022A7753BB9D49849FF3CB4FFFFA3F1 FFFF9CE0FEFF109BFFFF306BA2FF000000330000000A00000000000000000000 0000000000000000000000000000A7763BBDE9C590FFDFAA5CFFC87F2EFF287B D2FF3FC7FFFF20ACFFFF83B1D8FF807873FF413F3D5B00000000000000000000 0000000000000000000000000000B57F3DFFFFF1D0FFDAA85BFFC28236FF0000 00002C7DCFFFB3DEF2FF938881FFC2C0BAFF797B71FF00000033000000000000 0000000000000000000000000021B37C3AFFFFFFFAFFD6A559FFBA803BFF0000 0020000000008E8780FFDAD7D3FF8A8C84FFA27F9BFF9969CCFF000000000000 00000000000000000021AA7A3EB6DEAF68FFF3CB8AFFEEC684FFD8AA65FFAC79 3AB50000002100000000858884FFE3B3E3FFCB96C7FFAE7DCEFF000000000000 000000000021A9783CB9EDC385FFF9D292FFF3CD8BFFEDC380FFE8BE7CFFDDB3 74FFAA783BB70000002100000000C28BDCFFBF8AD4FF00000000000000000000 0021A77639B9EFCA96FFF8D59CFFF6CF8DFFEEC684FFE7BB77FFE0B26BFFE1BB 80FFDBB57FFFA87637B70000002100000000000000000000000000000022BB8D 4DB9F0D3ABFFFADFB1FFF5CC88FFEEC480FFE8BC76FFE1B36CFFDBAA61FFD4A1 55FFE0BC89FFDCBD8FFFAA7831B8000000220000000000000000A67437BDFFED CAFFFFF1D8FFFBE4BCFFFFF1D9FFFEF4E4FFF6E7CCFFF5E4CAFFF6E9D6FFEFDD C1FFE3C597FFECDABDFFE4CCA6FFA77636BD0000000000000000B57E3AFFFFFA E8FFF5E3C5FFE3C798FFD8B070FFD19E50FFD8A14DFFDCA553FFD19D4AFFD2A7 63FFD5AF74FFDDC194FFE9D2B3FFB7813DFF0000000000000000B57E3AFFFFFF FFFFA16100FFB17616FFBF852BFFCB933DFFD9A24FFFDDA755FFCF9A43FFC48B 32FFB87E1FFFAA6C08FFF7EDE0FFB7813EFF0000000000000000B67F3DFFFFF9 E2FFEBC992FFF3DBB5FFF5E2C0FFF5E1C0FFF6E2BFFFF5DFBDFFEFD9B5FFECD3 AFFFE4C9A0FFD4AD73FFE4C9A1FFB88241FF0000000000000000B8834238D19E 58A9C99753E0C69351FFC69453FFC5914FFFC6975EFFC49356FFBF8B48FFBF8A 46FFBD8946FFBE8844E0BD873FA9BA8545380000000000000000 } OnClick = btnIncludeMaskClick end object cmbIncludeMask: TComboBox AnchorSideLeft.Control = lblIncludeMask AnchorSideTop.Control = lblIncludeMask AnchorSideTop.Side = asrBottom Left = 8 Height = 28 Top = 24 Width = 478 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 20 ItemIndex = 0 Items.Strings = ( '*' ) ParentFont = False TabOrder = 0 Text = '*' end object lblIncludeMask: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 8 Height = 20 Top = 0 Width = 173 Caption = 'Select by &name/extension:' ParentColor = False end object lblExcludeMask: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbIncludeMask AnchorSideTop.Side = asrBottom Left = 8 Height = 20 Top = 52 Width = 250 Caption = '&Remove selection by name/extension:' ParentColor = False end object cmbExcludeMask: TComboBox AnchorSideLeft.Control = lblExcludeMask AnchorSideTop.Control = lblExcludeMask AnchorSideTop.Side = asrBottom Left = 8 Height = 28 Top = 76 Width = 478 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 20 Items.Strings = ( '*' ) ParentFont = False TabOrder = 1 end object btnExcludeMask: TSpeedButton AnchorSideLeft.Control = cmbExcludeMask AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbExcludeMask AnchorSideBottom.Control = cmbExcludeMask AnchorSideBottom.Side = asrBottom Left = 490 Height = 28 Hint = 'Template...' Top = 76 Width = 29 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000330000 0033000000330000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000214F6B83FF4966 85FF5191D9FF0000003300000000000000000000000000000000000000000000 00000000000000000000000000000000000000000021B07836B75485ABFF7EA7 B8FF8FD5FFFF356A9CFF00000033000000000000000000000000000000000000 000000000000000000000000000000000022A7753BB9D49849FF3CB4FFFFA3F1 FFFF9CE0FEFF109BFFFF306BA2FF000000330000000A00000000000000000000 0000000000000000000000000000A7763BBDE9C590FFDFAA5CFFC87F2EFF287B D2FF3FC7FFFF20ACFFFF83B1D8FF807873FF413F3D5B00000000000000000000 0000000000000000000000000000B57F3DFFFFF1D0FFDAA85BFFC28236FF0000 00002C7DCFFFB3DEF2FF938881FFC2C0BAFF797B71FF00000033000000000000 0000000000000000000000000021B37C3AFFFFFFFAFFD6A559FFBA803BFF0000 0020000000008E8780FFDAD7D3FF8A8C84FFA27F9BFF9969CCFF000000000000 00000000000000000021AA7A3EB6DEAF68FFF3CB8AFFEEC684FFD8AA65FFAC79 3AB50000002100000000858884FFE3B3E3FFCB96C7FFAE7DCEFF000000000000 000000000021A9783CB9EDC385FFF9D292FFF3CD8BFFEDC380FFE8BE7CFFDDB3 74FFAA783BB70000002100000000C28BDCFFBF8AD4FF00000000000000000000 0021A77639B9EFCA96FFF8D59CFFF6CF8DFFEEC684FFE7BB77FFE0B26BFFE1BB 80FFDBB57FFFA87637B70000002100000000000000000000000000000022BB8D 4DB9F0D3ABFFFADFB1FFF5CC88FFEEC480FFE8BC76FFE1B36CFFDBAA61FFD4A1 55FFE0BC89FFDCBD8FFFAA7831B8000000220000000000000000A67437BDFFED CAFFFFF1D8FFFBE4BCFFFFF1D9FFFEF4E4FFF6E7CCFFF5E4CAFFF6E9D6FFEFDD C1FFE3C597FFECDABDFFE4CCA6FFA77636BD0000000000000000B57E3AFFFFFA E8FFF5E3C5FFE3C798FFD8B070FFD19E50FFD8A14DFFDCA553FFD19D4AFFD2A7 63FFD5AF74FFDDC194FFE9D2B3FFB7813DFF0000000000000000B57E3AFFFFFF FFFFA16100FFB17616FFBF852BFFCB933DFFD9A24FFFDDA755FFCF9A43FFC48B 32FFB87E1FFFAA6C08FFF7EDE0FFB7813EFF0000000000000000B67F3DFFFFF9 E2FFEBC992FFF3DBB5FFF5E2C0FFF5E1C0FFF6E2BFFFF5DFBDFFEFD9B5FFECD3 AFFFE4C9A0FFD4AD73FFE4C9A1FFB88241FF0000000000000000B8834238D19E 58A9C99753E0C69351FFC69453FFC5914FFFC6975EFFC49356FFBF8B48FFBF8A 46FFBD8946FFBE8844E0BD873FA9BA8545380000000000000000 } OnClick = btnIncludeMaskClick end object chkLeaveUnselected: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbExcludeMask AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 116 Width = 341 BorderSpacing.Top = 12 Caption = '&Leave at least one file in each group unselected:' Checked = True State = cbChecked TabOrder = 2 OnChange = chkLeaveUnselectedChange end object pnlMethods: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = chkLeaveUnselected AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 63 Top = 146 Width = 510 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 63 ClientWidth = 510 TabOrder = 3 object lblFirstMethod: TLabel Left = 48 Height = 28 Top = 0 Width = 11 Caption = '&1.' FocusControl = cmbFirstMethod Layout = tlCenter ParentColor = False end object cmbFirstMethod: TComboBoxAutoWidth Left = 107 Height = 28 Top = 0 Width = 125 ItemHeight = 20 Items.Strings = ( 'Newest' 'Oldest' 'Largest' 'Smallest' 'First in group' 'Last in group' ) OnChange = cmbFirstMethodChange Style = csDropDownList TabOrder = 0 end object lblSecondMethod: TLabel Left = 280 Height = 28 Top = 0 Width = 11 Caption = '&2.' FocusControl = cmbSecondMethod Layout = tlCenter ParentColor = False end object cmbSecondMethod: TComboBoxAutoWidth Left = 339 Height = 28 Top = 0 Width = 125 ItemHeight = 20 Items.Strings = ( 'Newest' 'Oldest' 'Largest' 'Smallest' ) Style = csDropDownList TabOrder = 1 end end object pnlButtons: TKASButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlMethods AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 34 Top = 209 Width = 510 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 34 ClientWidth = 510 FullRepaint = False ParentFont = False TabOrder = 4 object btnOK: TBitBtn AnchorSideRight.Control = btnCancel Left = 257 Height = 34 Top = 0 Width = 70 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 2 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 ParentFont = False TabOrder = 0 end object btnCancel: TBitBtn AnchorSideRight.Control = btnApply Left = 337 Height = 34 Top = 0 Width = 94 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 ParentFont = False TabOrder = 1 end object btnApply: TBitBtn AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 441 Height = 34 Top = 0 Width = 69 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Apply' OnClick = btnApplyClick ParentFont = False TabOrder = 2 end end enddoublecmd-1.1.30/src/frames/0000755000175000001440000000000015104114162014631 5ustar alexxusersdoublecmd-1.1.30/src/frames/ucomponentssignature.pas0000644000175000001440000001400015104114162021625 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Compute signature of a form, frame, etc. based on current options set Copyright (C) 2016-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit uComponentsSignature; {$mode objfpc}{$H+} interface uses Classes, EditBtn; function ComputeSignatureBasedOnComponent(aComponent: TComponent; seed: dword): dword; function ComputeSignatureSingleComponent(aComponent: TComponent; seed: dword): dword; function ComputeSignatureString(seed: dword; sParamString: string): dword; function ComputeSignatureBoolean(seed: dword; bParamBoolean: boolean): dword; function ComputeSignaturePtrInt(seed: dword; iPtrInt: PtrInt): dword; implementation uses Graphics, ComCtrls, ColorBox, ExtCtrls, Spin, StdCtrls, Math, Dialogs, SysUtils, crc; const SAMPLEBYTES: array[0..1] of byte = ($23, $35); { ComputeSignatureSingleComponent } function ComputeSignatureSingleComponent(aComponent: TComponent; seed: dword): dword; var SampleValue: dword; iSampleValue, iIndex: integer; ColorSampleValue: TColor; begin Result := seed; case aComponent.ClassName of 'TCheckBox': Result := crc32(Result, @SAMPLEBYTES[ifthen(TCheckBox(aComponent).Checked, 1, 0)], 1); 'TRadioGroup': begin SampleValue := TRadioGroup(aComponent).ItemIndex; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; 'TRadioButton': begin Result := crc32(Result, @SAMPLEBYTES[ifthen(TRadioButton(aComponent).Checked, 1, 0)], 1); end; 'TEdit': if length(TEdit(aComponent).Text) > 0 then Result := crc32(Result, @TEdit(aComponent).Text[1], length(TEdit(aComponent).Text)); 'TLabeledEdit': begin if length(TLabeledEdit(aComponent).Text) > 0 then Result := crc32(Result, @TLabeledEdit(aComponent).Text[1], length(TLabeledEdit(aComponent).Text)); end; 'TFileNameEdit': if length(TFileNameEdit(aComponent).FileName) > 0 then Result := crc32(Result, @TFileNameEdit(aComponent).FileName[1], length(TFileNameEdit(aComponent).FileName)); 'TDirectoryEdit': if length(TDirectoryEdit(aComponent).Text) > 0 then Result := crc32(Result, @TDirectoryEdit(aComponent).Text[1], length(TDirectoryEdit(aComponent).Text)); 'TComboBox', 'TComboBoxAutoWidth': begin if TComboBox(aComponent).ItemIndex <> -1 then begin SampleValue := TComboBox(aComponent).ItemIndex; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; if TComboBox(aComponent).Style <> csDropDownList then begin if length(TComboBox(aComponent).Text) > 0 then Result := crc32(Result, @TComboBox(aComponent).Text[1], length(TComboBox(aComponent).Text)); end; end; 'TSpinEdit': begin SampleValue := TSpinEdit(aComponent).Value; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; 'TColorBox', 'TKASColorBox': begin ColorSampleValue := TColorBox(aComponent).Selected; Result := crc32(Result, @ColorSampleValue, 4); end; 'TTrackBar': begin iSampleValue := TTrackBar(aComponent).Position; Result := crc32(Result, @iSampleValue, 4); end; 'TListBox': begin if not TListBox(aComponent).MultiSelect then begin iSampleValue := TListBox(aComponent).ItemIndex; Result := crc32(Result, @iSampleValue, sizeof(iSampleValue)); end; end; 'TMemo': begin SampleValue := TMemo(aComponent).Lines.Count; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); for iIndex:=0 to pred(TMemo(aComponent).Lines.Count) do begin if length(TMemo(aComponent).Lines.Strings[iIndex]) > 0 then Result := crc32(Result, @TMemo(aComponent).Lines.Strings[iIndex][1], length(TMemo(aComponent).Lines.Strings[iIndex])); end; end; end; end; { ComputeSignatureBasedOnComponent } function ComputeSignatureBasedOnComponent(aComponent: TComponent; seed: dword): dword; var iComponent: integer; begin Result := ComputeSignatureSingleComponent(aComponent, seed); case aComponent.ClassName of 'TRadioGroup': begin end; // Nothing. Because if we go inside, we'll analyse *always* ALL unchecked "TRadioButton" after load but they're not when it's time to save them. else begin for iComponent := 0 to pred(aComponent.ComponentCount) do Result := ComputeSignatureBasedOnComponent(aComponent.Components[iComponent], Result) end; end; end; { ComputeSignatureString } function ComputeSignatureString(seed: dword; sParamString: string): dword; begin result := seed; if length(sParamString) > 0 then result := crc32(result, @sParamString[1], length(sParamString)); end; { ComputeSignatureBoolean } function ComputeSignatureBoolean(seed: dword; bParamBoolean: boolean): dword; const SAMPLEBYTES: array[0..1] of byte = ($23, $35); begin result := crc32(seed, @SAMPLEBYTES[ifthen(bParamBoolean, 1, 0)], 1); end; { ComputeSignaturePtrInt } function ComputeSignaturePtrInt(seed: dword; iPtrInt: PtrInt): dword; begin result := crc32(seed, @iPtrInt, sizeof(PtrInt)); end; end. doublecmd-1.1.30/src/frames/fsearchplugin.pas0000644000175000001440000001073015104114162020171 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Content plugins search frame Copyright (C) 2014-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fSearchPlugin; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls, StdCtrls, ComCtrls, Buttons, uFindFiles; type { TfrmSearchPlugin } TfrmSearchPlugin = class(TFrame) btnDelete: TBitBtn; btnAdd: TButton; chkUsePlugins: TCheckBox; HeaderControl: THeaderControl; pnlHeader: TPanel; pnlButtons: TPanel; pnlTable: TScrollBox; rbAnd: TRadioButton; rbOr: TRadioButton; procedure btnAddClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure chkUsePluginsChange(Sender: TObject); procedure pnlTableResize(Sender: TObject); private { private declarations } public procedure Save(var SearchTemplate: TSearchTemplateRec); procedure Load(const SearchTemplate: TSearchTemplateRec); end; implementation {$R *.lfm} uses uSearchContent; { TfrmSearchPlugin } procedure TfrmSearchPlugin.Save(var SearchTemplate: TSearchTemplateRec); var I: Integer; Plugin: TPluginPanel; begin SearchTemplate.ContentPlugin:= chkUsePlugins.Checked; if not SearchTemplate.ContentPlugin then Exit; SearchTemplate.ContentPluginCombine:= rbAnd.Checked; SetLength(SearchTemplate.ContentPlugins, pnlTable.ControlCount); for I:= 0 to pnlTable.ControlCount - 1 do begin Plugin:= TPluginPanel(pnlTable.Controls[I]); SearchTemplate.ContentPlugins[I].Plugin:= Plugin.Plugin; SearchTemplate.ContentPlugins[I].FieldType:= Plugin.FieldType; SearchTemplate.ContentPlugins[I].Field:= Plugin.Field; SearchTemplate.ContentPlugins[I].Compare:= Plugin.Compare; SearchTemplate.ContentPlugins[I].Value:= Plugin.Value; SearchTemplate.ContentPlugins[I].UnitName:= Plugin.UnitName; //Set the unit *after* the field has been set so if we have error setting the unit, the error message gives the "field" has a hint. end; end; procedure TfrmSearchPlugin.Load(const SearchTemplate: TSearchTemplateRec); var I: Integer; Panel: TPluginPanel; begin chkUsePlugins.Checked:= SearchTemplate.ContentPlugin; if SearchTemplate.ContentPluginCombine then rbAnd.Checked:= True else begin rbOr.Checked:= True; end; for I:= pnlTable.ControlCount - 1 downto 0 do pnlTable.Controls[I].Free; for I:= Low(SearchTemplate.ContentPlugins) to High(SearchTemplate.ContentPlugins) do begin Panel:= TPluginPanel.Create(pnlTable); Panel.Parent:= pnlTable; Panel.Plugin:= SearchTemplate.ContentPlugins[I].Plugin; Panel.Field:= SearchTemplate.ContentPlugins[I].Field; Panel.Compare:= SearchTemplate.ContentPlugins[I].Compare; Panel.Value:= SearchTemplate.ContentPlugins[I].Value; Panel.UnitName:= SearchTemplate.ContentPlugins[I].UnitName; end; end; procedure TfrmSearchPlugin.btnAddClick(Sender: TObject); var Panel: TPluginPanel; begin Panel:= TPluginPanel.Create(pnlTable); Panel.Parent:= pnlTable; end; procedure TfrmSearchPlugin.btnDeleteClick(Sender: TObject); var Index: Integer; begin Index:= pnlTable.ControlCount - 1; if Index >= 0 then pnlTable.Controls[Index].Free; end; procedure TfrmSearchPlugin.chkUsePluginsChange(Sender: TObject); begin rbAnd.Enabled:= chkUsePlugins.Checked; rbOr.Enabled:= chkUsePlugins.Checked; HeaderControl.Enabled:= chkUsePlugins.Checked; pnlTable.Enabled:= chkUsePlugins.Checked; pnlButtons.Enabled:= chkUsePlugins.Checked; end; procedure TfrmSearchPlugin.pnlTableResize(Sender: TObject); var I, ColumnWidth: Integer; begin ColumnWidth:= pnlTable.ClientWidth div HeaderControl.Sections.Count; for I:= 0 to HeaderControl.Sections.Count - 1 do begin HeaderControl.Sections[I].Width:= ColumnWidth; end; end; end. doublecmd-1.1.30/src/frames/fsearchplugin.lrj0000644000175000001440000000260115104114162020173 0ustar alexxusers{"version":1,"strings":[ {"hash":122881091,"name":"tfrmsearchplugin.btnadd.caption","sourcebytes":[38,77,111,114,101,32,114,117,108,101,115],"value":"&More rules"}, {"hash":87527011,"name":"tfrmsearchplugin.btndelete.caption","sourcebytes":[76,38,101,115,115,32,114,117,108,101,115],"value":"L&ess rules"}, {"hash":91471358,"name":"tfrmsearchplugin.headercontrol.sections[0].text","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":5045284,"name":"tfrmsearchplugin.headercontrol.sections[1].text","sourcebytes":[70,105,101,108,100],"value":"Field"}, {"hash":113807362,"name":"tfrmsearchplugin.headercontrol.sections[2].text","sourcebytes":[79,112,101,114,97,116,111,114],"value":"Operator"}, {"hash":6063029,"name":"tfrmsearchplugin.headercontrol.sections[3].text","sourcebytes":[86,97,108,117,101],"value":"Value"}, {"hash":157776522,"name":"tfrmsearchplugin.chkuseplugins.caption","sourcebytes":[85,115,101,32,38,99,111,110,116,101,110,116,32,112,108,117,103,105,110,115,44,32,99,111,109,98,105,110,101,32,119,105,116,104,58],"value":"Use &content plugins, combine with:"}, {"hash":18107753,"name":"tfrmsearchplugin.rband.caption","sourcebytes":[38,65,78,68,32,40,97,108,108,32,109,97,116,99,104,41],"value":"&AND (all match)"}, {"hash":51824473,"name":"tfrmsearchplugin.rbor.caption","sourcebytes":[38,79,82,32,40,97,110,121,32,109,97,116,99,104,41],"value":"&OR (any match)"} ]} doublecmd-1.1.30/src/frames/fsearchplugin.lfm0000644000175000001440000000630415104114162020166 0ustar alexxusersobject frmSearchPlugin: TfrmSearchPlugin Left = 0 Height = 240 Top = 0 Width = 581 ClientHeight = 240 ClientWidth = 581 TabOrder = 0 DesignLeft = 573 DesignTop = 336 object pnlTable: TScrollBox Left = 0 Height = 125 Top = 65 Width = 581 HorzScrollBar.Page = 1 HorzScrollBar.Visible = False VertScrollBar.Page = 1 Align = alClient ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 Enabled = False TabOrder = 0 OnResize = pnlTableResize end object pnlButtons: TPanel Left = 0 Height = 50 Top = 190 Width = 581 Align = alBottom BevelOuter = bvNone ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 50 ClientWidth = 581 Enabled = False TabOrder = 1 object btnAdd: TButton Left = 12 Height = 25 Top = 12 Width = 82 AutoSize = True Caption = '&More rules' OnClick = btnAddClick TabOrder = 0 end object btnDelete: TBitBtn Left = 106 Height = 25 Top = 12 Width = 76 Caption = 'L&ess rules' OnClick = btnDeleteClick TabOrder = 1 end end object HeaderControl: THeaderControl Left = 0 Height = 34 Top = 31 Width = 581 DragReorder = False Sections = < item Alignment = taLeftJustify Text = 'Plugin' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Field' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Operator' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Value' Width = 30 Visible = True end item Alignment = taLeftJustify Width = 30 Visible = True end> Align = alTop Enabled = False end object pnlHeader: TPanel Left = 0 Height = 31 Top = 0 Width = 581 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 31 ClientWidth = 581 TabOrder = 3 object chkUsePlugins: TCheckBox Left = 0 Height = 19 Top = 6 Width = 259 Caption = 'Use &content plugins, combine with:' OnChange = chkUsePluginsChange TabOrder = 0 end object rbAnd: TRadioButton Left = 265 Height = 19 Top = 6 Width = 157 Caption = '&AND (all match)' Checked = True Enabled = False TabOrder = 1 TabStop = True end object rbOr: TRadioButton Left = 428 Height = 19 Top = 6 Width = 153 Caption = '&OR (any match)' Enabled = False TabOrder = 2 end end end doublecmd-1.1.30/src/frames/fquicksearch.pas0000644000175000001440000005633715104114162020024 0ustar alexxusersunit fQuickSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, LCLType, ExtCtrls, Buttons; type TQuickSearchMode = (qsSearch, qsFilter, qsNone); TQuickSearchDirection = (qsdNone, qsdFirst, qsdLast, qsdNext, qsdPrevious); TQuickSearchMatch = (qsmBeginning, qsmEnding); TQuickSearchCase = (qscSensitive, qscInsensitive); TQuickSearchItems = (qsiFiles, qsiDirectories, qsiFilesAndDirectories); TQuickSearchCancelMode = (qscmNode, qscmAtLeastOneThenCancelIfNoFound, qscmCancelIfNoFound); TQuickSearchOptions = record Match: set of TQuickSearchMatch; SearchCase: TQuickSearchCase; Items: TQuickSearchItems; Direction: TQuickSearchDirection; LastSearchMode: TQuickSearchMode; CancelSearchMode: TQuickSearchCancelMode; end; TOnChangeSearch = procedure(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions; InvertSelection: Boolean = False) of Object; TOnChangeFilter = procedure(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions) of Object; TOnExecute = procedure(Sender: TObject) of Object; TOnHide = procedure(Sender: TObject) of Object; { TfrmQuickSearch } TfrmQuickSearch = class(TFrame) btnCancel: TButton; edtSearch: TEdit; pnlOptions: TPanel; sbMatchBeginning: TSpeedButton; sbMatchEnding: TSpeedButton; sbCaseSensitive: TSpeedButton; sbFiles: TSpeedButton; sbDirectories: TSpeedButton; tglFilter: TToggleBox; procedure btnCancelClick(Sender: TObject); procedure edtSearchChange(Sender: TObject); procedure edtSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FrameExit(Sender: TObject); procedure sbCaseSensitiveClick(Sender: TObject); procedure sbFilesAndDirectoriesClick(Sender: TObject); procedure sbMatchBeginningClick(Sender: TObject); procedure sbMatchEndingClick(Sender: TObject); procedure tglFilterChange(Sender: TObject); procedure btnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure btnCancelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private Options: TQuickSearchOptions; Mode: TQuickSearchMode; Active: Boolean; FilterOptions: TQuickSearchOptions; FilterText: String; Finalizing: Boolean; FUpdateCount: Integer; FNeedsChangeSearch: Boolean; FIntendedLeave: Boolean; procedure BeginUpdate; procedure CheckFilesOrDirectoriesDown; procedure EndUpdate; procedure DoHide; procedure DoOnChangeSearch; {en Loads control states from options values } procedure LoadControlStates; procedure PushFilter; procedure PopFilter; procedure ClearFilter; procedure CancelFilter; procedure SetFocus(Data: PtrInt); procedure RestoreFocus(Data: PtrInt); procedure ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String); public LimitedAutoHide: Boolean; OnChangeSearch: TOnChangeSearch; OnChangeFilter: TOnChangeFilter; OnExecute: TOnExecute; OnHide: TOnHide; constructor Create(TheOwner: TWinControl); reintroduce; destructor Destroy; override; procedure CloneTo(AQuickSearch: TfrmQuickSearch); procedure Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0); procedure Reset; procedure Finalize; function CheckSearchOrFilter(var Key: Word): Boolean; overload; function CheckSearchOrFilter(var UTF8Key: TUTF8Char): Boolean; overload; end; {en Allows to compare TQuickSearchOptions structures } operator = (qsOptions1, qsOptions2: TQuickSearchOptions) CompareResult: Boolean; implementation uses LazUTF8, uKeyboard, uGlobs, uFormCommands {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} , uFileView {$ENDIF} ; const { Parameters: "filter" - set filtering (on/off/toggle) "search" - set searching (on/off/cycle) "matchbeginning" - set match beginning option (on/off/toggle) "matchending" - set match ending option (on/off/toggle) "casesensitive" - set case sensitive searching (on/off/toggle) "files" - set filtering files (on/off/toggle) "directories" - set filtering directories (on/off/toggle) "filesdirectories" - toggle between files, directories and both (no value) "text"="<...>" - set <...> as new text to search/filter (string) 'toggle' switches between on and off 'cycle' goto to next, next, next and so one } // parameters for quick search / filter actions PARAMETER_FILTER = 'filter'; PARAMETER_SEARCH = 'search'; PARAMETER_DIRECTION = 'direction'; PARAMETER_MATCH_BEGINNING = 'matchbeginning'; PARAMETER_MATCH_ENDING = 'matchending'; PARAMETER_CASE_SENSITIVE = 'casesensitive'; PARAMETER_FILES = 'files'; PARAMETER_DIRECTORIES = 'directories'; PARAMETER_FILES_DIRECTORIES = 'filesdirectories'; PARAMETER_TEXT = 'text'; TOGGLE_VALUE = 'toggle'; CYCLE_VALUE = 'cycle'; FIRST_VALUE = 'first'; LAST_VALUE = 'last'; NEXT_VALUE = 'next'; {$R *.lfm} operator = (qsOptions1, qsOptions2: TQuickSearchOptions) CompareResult: Boolean; begin Result := True; if qsOptions1.Match <> qsOptions2.Match then Result := False; if qsOptions1.Items <> qsOptions2.Items then Result := False; if qsOptions1.SearchCase <> qsOptions2.SearchCase then Result := False; end; function GetBoolState(const Value: String; OldState: Boolean): Boolean; begin if Value = TOGGLE_VALUE then Result := not OldState else if not GetBoolValue(Value, Result) then Result := OldState; end; { TfrmQuickSearch } constructor TfrmQuickSearch.Create(TheOwner: TWinControl); begin inherited Create(TheOwner); Self.Parent := TheOwner; // load default options Options := gQuickSearchOptions; Options.LastSearchMode := qsNone; LoadControlStates; FilterOptions := gQuickSearchOptions; FilterText := EmptyStr; Finalizing := False; HotMan.Register(Self.edtSearch, 'Quick Search'); end; destructor TfrmQuickSearch.Destroy; begin if Assigned(HotMan) then HotMan.UnRegister(Self.edtSearch); inherited Destroy; end; procedure TfrmQuickSearch.CloneTo(AQuickSearch: TfrmQuickSearch); var TempEvent: TNotifyEvent; begin AQuickSearch.Active := Self.Active; AQuickSearch.Mode := Self.Mode; AQuickSearch.Options := Self.Options; AQuickSearch.LoadControlStates; AQuickSearch.FilterOptions := Self.FilterOptions; AQuickSearch.FilterText := Self.FilterText; TempEvent := AQuickSearch.edtSearch.OnChange; AQuickSearch.edtSearch.OnChange := nil; AQuickSearch.edtSearch.Text := Self.edtSearch.Text; AQuickSearch.edtSearch.SelStart := Self.edtSearch.SelStart; AQuickSearch.edtSearch.SelLength := Self.edtSearch.SelLength; AQuickSearch.edtSearch.OnChange := TempEvent; TempEvent := AQuickSearch.tglFilter.OnChange; AQuickSearch.tglFilter.OnChange := nil; AQuickSearch.tglFilter.Checked := Self.tglFilter.Checked; AQuickSearch.tglFilter.OnChange := TempEvent; AQuickSearch.Visible := Self.Visible; // Do not clone LimitedAutoHide but honor it instead, because it depends on the parent fileview if Self.Visible and not Self.edtSearch.Focused and Self.LimitedAutoHide and not AQuickSearch.LimitedAutoHide then AQuickSearch.FrameExit(nil); // do autohide if needed end; procedure TfrmQuickSearch.DoOnChangeSearch; begin if FUpdateCount > 0 then FNeedsChangeSearch := True else begin Options.LastSearchMode:=Self.Mode; case Self.Mode of qsSearch: if Assigned(Self.OnChangeSearch) then Self.OnChangeSearch(Self, edtSearch.Text, Options); qsFilter: if Assigned(Self.OnChangeFilter) then Self.OnChangeFilter(Self, edtSearch.Text, Options); end; FNeedsChangeSearch := False; end; end; procedure TfrmQuickSearch.Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0); begin Self.Visible := True; if not edtSearch.Focused then begin edtSearch.SetFocus; edtSearch.SelectAll; end; if Char <> #0 then edtSearch.SelText := Char; Self.Active := True; ProcessParams(SearchMode, Params); end; procedure TfrmQuickSearch.Reset; begin PopFilter; Options.LastSearchMode := qsNone; Options.Direction := qsdNone; Options.CancelSearchMode:=qscmNode; end; procedure TfrmQuickSearch.Finalize; begin Reset; Hide; end; { TfrmQuickSearch.ProcessParams } procedure TfrmQuickSearch.ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String); var Param: String; Value: String; bWeGotMainParam: boolean = False; bLegacyBehavior: boolean = False; begin BeginUpdate; try Options.Direction:=qsdNone; for Param in Params do begin if (SearchMode=qsFilter) AND (GetParamValue(Param, PARAMETER_FILTER, Value)) then begin if (Value <> TOGGLE_VALUE) then tglFilter.Checked := GetBoolState(Value, tglFilter.Checked) else tglFilter.Checked := (not tglFilter.Checked) OR (Options.LastSearchMode<>qsFilter); //With "toggle", if mode was not previously, we activate filter mode. bWeGotMainParam := True; end else if (SearchMode=qsSearch) AND (GetParamValue(Param, PARAMETER_FILTER, Value)) then //Legacy begin tglFilter.Checked := GetBoolState(Value, tglFilter.Checked); bWeGotMainParam := True; bLegacyBehavior:= True; end else if (SearchMode=qsSearch) AND (GetParamValue(Param, PARAMETER_SEARCH, Value)) then begin if (Value <> CYCLE_VALUE) then begin Options.CancelSearchMode:=qscmNode; if (Value <> TOGGLE_VALUE) then tglFilter.Checked := not (GetBoolState(Value, tglFilter.Checked)) else tglFilter.Checked := not((tglFilter.Checked) OR (Options.LastSearchMode<>qsSearch)); //With "toggle", if mode was not previously, we activate search mode. end else begin tglFilter.Checked:=FALSE; if Options.LastSearchMode<>qsSearch then begin Options.Direction:=qsdFirst; //With "cycle", if mode was not previously, we activate search mode AND do to first item Options.CancelSearchMode:=qscmAtLeastOneThenCancelIfNoFound; end else begin Options.Direction:=qsdNext; Options.CancelSearchMode:=qscmCancelIfNoFound; end; end; bWeGotMainParam := True; end else if (SearchMode=qsSearch) AND GetParamValue(Param, PARAMETER_DIRECTION, Value) then begin if Value = FIRST_VALUE then Options.Direction:=qsdFirst; if Value = LAST_VALUE then Options.Direction:=qsdLast; if Value = NEXT_VALUE then Options.Direction:=qsdNext; end else if GetParamValue(Param, PARAMETER_MATCH_BEGINNING, Value) then begin sbMatchBeginning.Down := GetBoolState(Value, sbMatchBeginning.Down); sbMatchBeginningClick(nil); end else if GetParamValue(Param, PARAMETER_MATCH_ENDING, Value) then begin sbMatchEnding.Down := GetBoolState(Value, sbMatchEnding.Down); sbMatchEndingClick(nil); end else if GetParamValue(Param, PARAMETER_CASE_SENSITIVE, Value) then begin sbCaseSensitive.Down := GetBoolState(Value, sbCaseSensitive.Down); sbCaseSensitiveClick(nil); end else if GetParamValue(Param, PARAMETER_FILES, Value) then begin sbFiles.Down := GetBoolState(Value, sbFiles.Down); sbFilesAndDirectoriesClick(nil); end else if GetParamValue(Param, PARAMETER_DIRECTORIES, Value) then begin sbDirectories.Down := GetBoolState(Value, sbDirectories.Down); sbFilesAndDirectoriesClick(nil); end else if Param = PARAMETER_FILES_DIRECTORIES then begin if sbFiles.Down and sbDirectories.Down then sbDirectories.Down := False else if sbFiles.Down then begin sbDirectories.Down := True; sbFiles.Down := False; end else if sbDirectories.Down then sbFiles.Down := True; sbFilesAndDirectoriesClick(nil); end else if GetParamValue(Param, PARAMETER_TEXT, Value) then begin edtSearch.Text := Value; edtSearch.SelectAll; end; end; CheckFilesOrDirectoriesDown; //If search or filter was called with no parameter... case SearchMode of qsSearch: if not bWeGotMainParam then tglFilter.Checked:=False; qsFilter: if not bWeGotMainParam then tglFilter.Checked:=True; end; if not bLegacyBehavior then begin case SearchMode of qsSearch: if tglFilter.Checked then CancelFilter; qsFilter: if not tglFilter.Checked then CancelFilter; end; end; finally EndUpdate; end; end; function TfrmQuickSearch.CheckSearchOrFilter(var Key: Word): Boolean; var ModifierKeys: TShiftState; SearchOrFilterModifiers: TShiftState; SearchMode: TQuickSearchMode; UTF8Char: TUTF8Char; KeyTypingModifier: TKeyTypingModifier; begin Result := False; ModifierKeys := GetKeyShiftStateEx; for KeyTypingModifier in TKeyTypingModifier do begin if gKeyTyping[KeyTypingModifier] in [ktaQuickSearch, ktaQuickFilter] then begin SearchOrFilterModifiers := TKeyTypingModifierToShift[KeyTypingModifier]; if ((SearchOrFilterModifiers <> []) and (ModifierKeys * KeyModifiersShortcutNoText = SearchOrFilterModifiers)) {$IFDEF MSWINDOWS} // Entering international characters with Ctrl+Alt on Windows. or (HasKeyboardAltGrKey and (SearchOrFilterModifiers = []) and (ModifierKeys * KeyModifiersShortcutNoText = [ssCtrl, ssAlt])) {$ENDIF} then begin if (Key <> VK_SPACE) or (edtSearch.Text <> '') then begin UTF8Char := VirtualKeyToUTF8Char(Key, ModifierKeys - SearchOrFilterModifiers); Result := (UTF8Char <> '') and (not ((Length(UTF8Char) = 1) and (UTF8Char[1] in [#0..#31]))); if Result then begin Key := 0; case gKeyTyping[KeyTypingModifier] of ktaQuickSearch: SearchMode := qsSearch; ktaQuickFilter: SearchMode := qsFilter; end; Self.Execute(SearchMode, [], UTF8Char); end; end; Exit; end; end; end; end; function TfrmQuickSearch.CheckSearchOrFilter(var UTF8Key: TUTF8Char): Boolean; var ModifierKeys: TShiftState; SearchMode: TQuickSearchMode; begin Result := False; // Check for certain Ascii keys. if (Length(UTF8Key) = 1) and (UTF8Key[1] in [#0..#32,'+','-','*']) then Exit; ModifierKeys := GetKeyShiftStateEx; if gKeyTyping[ktmNone] in [ktaQuickSearch, ktaQuickFilter] then begin if ModifierKeys * KeyModifiersShortcutNoText = TKeyTypingModifierToShift[ktmNone] then begin // Make upper case if either caps-lock is toggled or shift pressed. if (ssCaps in ModifierKeys) xor (ssShift in ModifierKeys) then UTF8Key := UTF8UpperCase(UTF8Key) else UTF8Key := UTF8LowerCase(UTF8Key); case gKeyTyping[ktmNone] of ktaQuickSearch: SearchMode := qsSearch; ktaQuickFilter: SearchMode := qsFilter; end; Self.Execute(SearchMode, [], UTF8Key); UTF8Key := ''; Result := True; Exit; end; end; end; procedure TfrmQuickSearch.LoadControlStates; begin sbDirectories.Down := (Options.Items = qsiDirectories) or (Options.Items = qsiFilesAndDirectories); sbFiles.Down := (Options.Items = qsiFiles) or (Options.Items = qsiFilesAndDirectories); sbCaseSensitive.Down := Options.SearchCase = qscSensitive; sbMatchBeginning.Down := qsmBeginning in Options.Match; sbMatchEnding.Down := qsmEnding in Options.Match; end; procedure TfrmQuickSearch.PushFilter; begin FilterText := edtSearch.Text; FilterOptions := Options; end; procedure TfrmQuickSearch.PopFilter; begin edtSearch.Text := FilterText; // there was no filter saved, do not continue loading if FilterText = EmptyStr then Exit; Options := FilterOptions; LoadControlStates; FilterText := EmptyStr; tglFilter.Checked := True; end; procedure TfrmQuickSearch.ClearFilter; begin FilterText := EmptyStr; FilterOptions := Options; if Assigned(Self.OnChangeFilter) then Self.OnChangeFilter(Self, EmptyStr, FilterOptions); end; procedure TfrmQuickSearch.CancelFilter; begin Finalize; {$IFDEF LCLGTK2} // On GTK2 OnExit for frame is not called when it is hidden, // but only when a control from outside of frame gains focus. FrameExit(nil); {$ENDIF} DoHide; end; procedure TfrmQuickSearch.SetFocus(Data: PtrInt); begin if edtSearch.CanFocus then edtSearch.SetFocus; end; procedure TfrmQuickSearch.RestoreFocus(Data: PtrInt); begin if Assigned(Screen.ActiveControl) then begin // The file panel has lost focus if Screen.ActiveControl is TCustomForm then begin if Parent.CanSetFocus then Parent.SetFocus; end; end; end; procedure TfrmQuickSearch.CheckFilesOrDirectoriesDown; begin if not (sbFiles.Down or sbDirectories.Down) then begin // unchecking both should not be possible, so recheck last unchecked case Options.Items of qsiFiles: sbFiles.Down := True; qsiDirectories: sbDirectories.Down := True; end; end; end; procedure TfrmQuickSearch.edtSearchChange(Sender: TObject); begin Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.BeginUpdate; begin Inc(FUpdateCount); end; procedure TfrmQuickSearch.btnCancelClick(Sender: TObject); begin CancelFilter; end; procedure TfrmQuickSearch.edtSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if CheckSearchOrFilter(Key) then Exit; case Key of VK_DOWN: begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction:=qsdNext; Self.OnChangeSearch(Self, edtSearch.Text, Options, ssShift in Shift); end; end; VK_UP: begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction:=qsdPrevious; Self.OnChangeSearch(Self, edtSearch.Text, Options, ssShift in Shift); end; end; // Request to have CTRL pressed at the same time. // VK_HOME alone reserved to get to start position of edtSearch. VK_HOME: begin if ssCtrl in Shift then begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction := qsdFirst; Self.OnChangeSearch(Self, edtSearch.Text, Options, ssShift in Shift); end; end; end; // Request to have CTRL pressed at the same time. // VK_END alone reserved to get to end position of edtSearch. VK_END: begin if ssCtrl in Shift then begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction := qsdLast; Self.OnChangeSearch(Self, edtSearch.Text, Options, ssShift in Shift); end; end; end; VK_INSERT: begin if Shift = [] then // no modifiers pressed, to not capture Ctrl+Insert and Shift+Insert begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction := qsdNext; Self.OnChangeSearch(Self, edtSearch.Text, Options, True); end; end; end; VK_RETURN, VK_SELECT: begin Key := 0; if Assigned(Self.OnExecute) then Self.OnExecute(Self); CancelFilter; end; VK_TAB: begin Key := 0; FIntendedLeave := True; DoHide; end; VK_ESCAPE: begin Key := 0; CancelFilter; end; end; end; procedure TfrmQuickSearch.EndUpdate; begin Dec(FUpdateCount); if FUpdateCount = 0 then begin if FNeedsChangeSearch then DoOnChangeSearch; end; end; procedure TfrmQuickSearch.DoHide; begin if Assigned(Self.OnHide) then Self.OnHide(Self); end; procedure TfrmQuickSearch.FrameExit(Sender: TObject); var DontHide: Boolean; begin {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} // Workaround: QuickSearch frame lose focus on SpeedButton click if Screen.ActiveControl is TFileView then edtSearch.SetFocus else {$ENDIF} if not Finalizing then begin Finalizing := True; Self.Active := False; if FIntendedLeave then begin FIntendedLeave := False; DontHide := False; end else DontHide := LimitedAutoHide; if (Mode = qsFilter) and (edtSearch.Text <> EmptyStr) then Self.Visible := DontHide or not gQuickFilterAutoHide else begin if DontHide then Reset else Finalize; end; Application.QueueAsyncCall(@RestoreFocus, 0); Finalizing := False; end; end; procedure TfrmQuickSearch.sbCaseSensitiveClick(Sender: TObject); begin if sbCaseSensitive.Down then Options.SearchCase := qscSensitive else Options.SearchCase := qscInsensitive; if gQuickFilterSaveSessionModifications then gQuickSearchOptions.SearchCase := Options.SearchCase; Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbFilesAndDirectoriesClick(Sender: TObject); begin if sbFiles.Down and sbDirectories.Down then Options.Items := qsiFilesAndDirectories else if sbFiles.Down then Options.Items := qsiFiles else if sbDirectories.Down then Options.Items := qsiDirectories else if FUpdateCount = 0 then begin CheckFilesOrDirectoriesDown; Exit; end; if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Items := Options.Items; Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbMatchBeginningClick(Sender: TObject); begin if sbMatchBeginning.Down then Include(Options.Match, qsmBeginning) else Exclude(Options.Match, qsmBeginning); if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Match := Options.Match; Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbMatchEndingClick(Sender: TObject); begin if sbMatchEnding.Down then Include(Options.Match, qsmEnding) else Exclude(Options.Match, qsmEnding); if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Match := Options.Match; Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.tglFilterChange(Sender: TObject); begin Options.LastSearchMode := qsNone; if tglFilter.Checked then Mode := qsFilter else Mode := qsSearch; // if a filter was set in background and a search is opened, the filter // will get pushed staying active. Otherwise the filter will be converted // in a search if not Active and (Mode = qsSearch) then PushFilter else if Active then ClearFilter; Options.Direction := qsdNone; DoOnChangeSearch; end; procedure TfrmQuickSearch.btnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Application.QueueAsyncCall(@SetFocus, 0); end; procedure TfrmQuickSearch.btnCancelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Self.Visible then Application.QueueAsyncCall(@SetFocus, 0); end; end. doublecmd-1.1.30/src/frames/fquicksearch.lrj0000644000175000001440000000406415104114162020016 0ustar alexxusers{"version":1,"strings":[ {"hash":176342841,"name":"tfrmquicksearch.edtsearch.hint","sourcebytes":[69,110,116,101,114,32,116,101,120,116,32,116,111,32,115,101,97,114,99,104,32,102,111,114,32,111,114,32,102,105,108,116,101,114,32,98,121],"value":"Enter text to search for or filter by"}, {"hash":159680658,"name":"tfrmquicksearch.tglfilter.hint","sourcebytes":[84,111,103,103,108,101,32,98,101,116,119,101,101,110,32,115,101,97,114,99,104,32,111,114,32,102,105,108,116,101,114],"value":"Toggle between search or filter"}, {"hash":80755394,"name":"tfrmquicksearch.tglfilter.caption","sourcebytes":[70,105,108,116,101,114],"value":"Filter"}, {"hash":102446860,"name":"tfrmquicksearch.btncancel.hint","sourcebytes":[67,108,111,115,101,32,102,105,108,116,101,114,32,112,97,110,101,108],"value":"Close filter panel"}, {"hash":88,"name":"tfrmquicksearch.btncancel.caption","sourcebytes":[88],"value":"X"}, {"hash":125785463,"name":"tfrmquicksearch.sbmatchbeginning.hint","sourcebytes":[77,97,116,99,104,32,66,101,103,105,110,110,105,110,103],"value":"Match Beginning"}, {"hash":123,"name":"tfrmquicksearch.sbmatchbeginning.caption","sourcebytes":[123],"value":"{"}, {"hash":27002855,"name":"tfrmquicksearch.sbmatchending.hint","sourcebytes":[77,97,116,99,104,32,69,110,100,105,110,103],"value":"Match Ending"}, {"hash":125,"name":"tfrmquicksearch.sbmatchending.caption","sourcebytes":[125],"value":"}"}, {"hash":219680245,"name":"tfrmquicksearch.sbcasesensitive.hint","sourcebytes":[67,97,115,101,32,83,101,110,115,105,116,105,118,101],"value":"Case Sensitive"}, {"hash":1137,"name":"tfrmquicksearch.sbcasesensitive.caption","sourcebytes":[65,97],"value":"Aa"}, {"hash":5046979,"name":"tfrmquicksearch.sbfiles.hint","sourcebytes":[70,105,108,101,115],"value":"Files"}, {"hash":70,"name":"tfrmquicksearch.sbfiles.caption","sourcebytes":[70],"value":"F"}, {"hash":184387443,"name":"tfrmquicksearch.sbdirectories.hint","sourcebytes":[68,105,114,101,99,116,111,114,105,101,115],"value":"Directories"}, {"hash":68,"name":"tfrmquicksearch.sbdirectories.caption","sourcebytes":[68],"value":"D"} ]} doublecmd-1.1.30/src/frames/fquicksearch.lfm0000644000175000001440000001160315104114162020002 0ustar alexxusersobject frmQuickSearch: TfrmQuickSearch Left = 0 Height = 43 Top = 0 Width = 436 AutoSize = True ClientHeight = 43 ClientWidth = 436 OnExit = FrameExit TabOrder = 0 DesignLeft = 134 DesignTop = 120 object edtSearch: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = tglFilter Left = 2 Height = 23 Hint = 'Enter text to search for or filter by' Top = 2 Width = 211 Anchors = [akTop, akLeft, akRight] AutoSelect = False BorderSpacing.Around = 2 OnChange = edtSearchChange OnKeyDown = edtSearchKeyDown ParentShowHint = False ShowHint = True TabOrder = 0 end object tglFilter: TToggleBox AnchorSideTop.Control = edtSearch AnchorSideRight.Control = pnlOptions AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 215 Height = 23 Hint = 'Toggle between search or filter' Top = 2 Width = 46 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 2 Caption = 'Filter' OnChange = tglFilterChange OnMouseUp = btnMouseUp ParentShowHint = False ShowHint = True TabOrder = 1 TabStop = False end object btnCancel: TButton AnchorSideTop.Control = edtSearch AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 399 Height = 23 Hint = 'Close filter panel' Top = 2 Width = 33 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 4 Caption = 'X' OnClick = btnCancelClick OnMouseUp = btnCancelMouseUp ParentShowHint = False ShowHint = True TabOrder = 3 TabStop = False end object pnlOptions: TPanel AnchorSideTop.Control = edtSearch AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 263 Height = 23 Top = 2 Width = 132 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 4 BevelOuter = bvNone ClientHeight = 23 ClientWidth = 132 TabOrder = 2 object sbMatchBeginning: TSpeedButton AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideTop.Side = asrCenter Left = 0 Height = 24 Hint = 'Match Beginning' Top = -1 Width = 24 AllowAllUp = True Caption = '{' GroupIndex = 1 OnClick = sbMatchBeginningClick ShowHint = True ParentShowHint = False end object sbMatchEnding: TSpeedButton AnchorSideLeft.Control = sbMatchBeginning AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 26 Height = 24 Hint = 'Match Ending' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 Caption = '}' GroupIndex = 2 OnClick = sbMatchEndingClick ShowHint = True ParentShowHint = False end object sbCaseSensitive: TSpeedButton AnchorSideLeft.Control = sbMatchEnding AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 54 Height = 24 Hint = 'Case Sensitive' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Caption = 'Aa' GroupIndex = 3 OnClick = sbCaseSensitiveClick ShowHint = True ParentShowHint = False end object sbFiles: TSpeedButton AnchorSideLeft.Control = sbCaseSensitive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 82 Height = 24 Hint = 'Files' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Caption = 'F' GroupIndex = 4 OnClick = sbFilesAndDirectoriesClick ShowHint = True ParentShowHint = False end object sbDirectories: TSpeedButton AnchorSideLeft.Control = sbFiles AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 108 Height = 24 Hint = 'Directories' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 Caption = 'D' GroupIndex = 5 OnClick = sbFilesAndDirectoriesClick ShowHint = True ParentShowHint = False end end end doublecmd-1.1.30/src/frames/foptionstreeviewmenucolor.pas0000644000175000001440000003366215104114162022710 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of Tree View Menu Color and Layout. Copyright (C) 2016-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsTreeViewMenuColor; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, KASComboBox, Spin, LMessages, //DC uGlobs, fOptionsFrame, fTreeViewMenu, Types; type { TfrmOptionsTreeViewMenuColor } TfrmOptionsTreeViewMenuColor = class(TOptionsEditor) btFont: TButton; dlgFnt: TFontDialog; edFontName: TEdit; sedFont: TSpinEdit; gbFont: TGroupBox; gbLayoutAndColors: TGroupBox; cbkUsageKeyboardShortcut: TCheckBox; lblBackgroundColor: TLabel; cbBackgroundColor: TKASColorBoxButton; lblShortcutColor: TLabel; cbShortcutColor: TKASColorBoxButton; lblNormalTextColor: TLabel; cbNormalTextColor: TKASColorBoxButton; lblSecondaryTextColor: TLabel; cbSecondaryTextColor: TKASColorBoxButton; lblFoundTextColor: TLabel; cbFoundTextColor: TKASColorBoxButton; lblUnselectableTextColor: TLabel; cbUnselectableTextColor: TKASColorBoxButton; lblCursorColor: TLabel; cbCursorColor: TKASColorBoxButton; lblShortcutUnderCursor: TLabel; cbShortcutUnderCursor: TKASColorBoxButton; lblNormalTextUnderCursor: TLabel; cbNormalTextUnderCursor: TKASColorBoxButton; lblSecondaryTextUnderCursor: TLabel; cbSecondaryTextUnderCursor: TKASColorBoxButton; lblFoundTextUnderCursor: TLabel; cbFoundTextUnderCursor: TKASColorBoxButton; lblUnselectableUnderCursor: TLabel; cbUnselectableUnderCursor: TKASColorBoxButton; lblPreview: TLabel; TreeViewMenuSample: TTreeView; optColorDialog: TColorDialog; procedure btFontClick(Sender: TObject); procedure RefreshColorOfOurSampleClick(Sender: TObject); procedure sedFontChange(Sender: TObject); procedure TreeViewMenuSampleMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure TreeViewMenuSampleMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; private { Private declarations } TreeViewMenuGenericRoutineAndVarHolder: TTreeViewMenuGenericRoutineAndVarHolder; TempoFont: TDCFontOptions; procedure ApplyTempoFontToVisual; public { Public declarations } class function GetIconIndex: integer; override; class function GetTitle: string; override; destructor Destroy; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LCLProc, LCLIntf, //DC uLng, uDCUtils, fmain, DCOSUtils; { TfrmOptionsTreeViewMenuColor.Init } procedure TfrmOptionsTreeViewMenuColor.Init; var iLonguestName: integer = 150; BaseLevelNode, SubLevelNode: TTreeNode; procedure ProcessLabelLength(ALabel: TLabel); begin if ALabel.Canvas.TextWidth(ALabel.Caption) > iLonguestName then iLonguestName := ALabel.Canvas.TextWidth(ALabel.Caption); end; begin // All the combobox are referenced to "cbBackgroundColor". // Let's determine the longuest label and then we'll set the "cbBackgroundColor" to a location far enough on right so all labels will be visible correctly. ProcessLabelLength(lblBackgroundColor); ProcessLabelLength(lblShortcutColor); ProcessLabelLength(lblNormalTextColor); ProcessLabelLength(lblSecondaryTextColor); ProcessLabelLength(lblFoundTextColor); ProcessLabelLength(lblUnselectableTextColor); ProcessLabelLength(lblCursorColor); ProcessLabelLength(lblShortcutUnderCursor); ProcessLabelLength(lblNormalTextUnderCursor); ProcessLabelLength(lblSecondaryTextUnderCursor); ProcessLabelLength(lblFoundTextUnderCursor); ProcessLabelLength(lblUnselectableUnderCursor); cbBackgroundColor.Left := 10 + iLonguestName + 6 + 10; cbBackgroundColor.BorderSpacing.Left:=10 + iLonguestName + 6 + 10; TreeViewMenuGenericRoutineAndVarHolder := TTreeViewMenuGenericRoutineAndVarHolder.Create; TreeViewMenuGenericRoutineAndVarHolder.SearchingText := rsStrPreviewSearchingLetters; TreeViewMenuGenericRoutineAndVarHolder.CaseSensitive := False; TreeViewMenuGenericRoutineAndVarHolder.IgnoreAccents := True; TreeViewMenuGenericRoutineAndVarHolder.ShowWholeBranchIfMatch := True; TreeViewMenuGenericRoutineAndVarHolder.MayStopOnNode := False; TreeViewMenuGenericRoutineAndVarHolder.ShowShortcut := gTreeViewMenuUseKeyboardShortcut; with gColors.TreeViewMenu^ do begin TreeViewMenuGenericRoutineAndVarHolder.BackgroundColor := BackgroundColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutColor := ShortcutColor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextColor := NormalTextColor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextColor := SecondaryTextColor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextColor := FoundTextColor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableTextColor := UnselectableTextColor; TreeViewMenuGenericRoutineAndVarHolder.CursorColor := CursorColor; TreeViewMenuGenericRoutineAndVarHolder.ShortcutUnderCursor := ShortcutUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.NormalTextUnderCursor := NormalTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextUnderCursor := SecondaryTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.FoundTextUnderCursor := FoundTextUnderCursor; TreeViewMenuGenericRoutineAndVarHolder.UnselectableUnderCursor := UnselectableUnderCursor; end; TreeViewMenuSample.OnAdvancedCustomDrawItem := @TreeViewMenuGenericRoutineAndVarHolder.TreeViewMenuAdvancedCustomDrawItem; // Let's populate our treeview sample with at least an example of each. TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, nil, rsStrPreviewJustPreview); BaseLevelNode := TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, nil, 'Double Commander'); SubLevelNode := TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithSearched1, rsStrPreviewSideNote); TTreeMenuItem(SubLevelNode.Data).KeyboardShortcut := '1'; SubLevelNode := TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithSearched2, rsStrPreviewSideNote); TTreeMenuItem(SubLevelNode.Data).KeyboardShortcut := '2'; SubLevelNode := TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithSearched3, rsStrPreviewSideNote); TTreeMenuItem(SubLevelNode.Data).KeyboardShortcut := '3'; BaseLevelNode := TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, nil, rsStrPreviewOthers); TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithoutSearched1); TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithoutSearched2); TreeViewMenuGenericRoutineAndVarHolder.AddTreeViewMenuItem(TreeViewMenuSample, BaseLevelNode, rsStrPreviewWordWithoutSearched3); TreeViewMenuSample.FullExpand; TreeViewMenuSample.Items[0].Selected := True; end; { TfrmOptionsTreeViewMenuColor.Load } procedure TfrmOptionsTreeViewMenuColor.Load; begin cbkUsageKeyboardShortcut.Checked := gTreeViewMenuUseKeyboardShortcut; with gColors.TreeViewMenu^ do begin cbBackgroundColor.Selected := BackgroundColor; cbShortcutColor.Selected := ShortcutColor; cbNormalTextColor.Selected := NormalTextColor; cbSecondaryTextColor.Selected := SecondaryTextColor; cbFoundTextColor.Selected := FoundTextColor; cbUnselectableTextColor.Selected := UnselectableTextColor; cbCursorColor.Selected := CursorColor; cbShortcutUnderCursor.Selected := ShortcutUnderCursor; cbNormalTextUnderCursor.Selected := NormalTextUnderCursor; cbSecondaryTextUnderCursor.Selected := SecondaryTextUnderCursor; cbFoundTextUnderCursor.Selected := FoundTextUnderCursor; cbUnselectableUnderCursor.Selected := UnselectableUnderCursor; end; TempoFont := gFonts[dcfTreeViewMenu]; ApplyTempoFontToVisual; end; { TfrmOptionsTreeViewMenuColor.Save } function TfrmOptionsTreeViewMenuColor.Save: TOptionsEditorSaveFlags; begin Result := []; gTreeViewMenuUseKeyboardShortcut := cbkUsageKeyboardShortcut.Checked; with gColors.TreeViewMenu^ do begin BackgroundColor := cbBackgroundColor.Selected; ShortcutColor := cbShortcutColor.Selected; NormalTextColor := cbNormalTextColor.Selected; SecondaryTextColor := cbSecondaryTextColor.Selected; FoundTextColor := cbFoundTextColor.Selected; UnselectableTextColor := cbUnselectableTextColor.Selected; CursorColor := cbCursorColor.Selected; ShortcutUnderCursor := cbShortcutUnderCursor.Selected; NormalTextUnderCursor := cbNormalTextUnderCursor.Selected; SecondaryTextUnderCursor := cbSecondaryTextUnderCursor.Selected; FoundTextUnderCursor := cbFoundTextUnderCursor.Selected; UnselectableUnderCursor := cbUnselectableUnderCursor.Selected; end; gFonts[dcfTreeViewMenu] := TempoFont; end; procedure TfrmOptionsTreeViewMenuColor.CMThemeChanged(var Message: TLMessage); begin LoadSettings; RefreshColorOfOurSampleClick(Self); end; { TfrmOptionsTreeViewMenuColor.GetIconIndex } class function TfrmOptionsTreeViewMenuColor.GetIconIndex: integer; begin Result := 40; end; { TfrmOptionsTreeViewMenuColor.GetTitle } class function TfrmOptionsTreeViewMenuColor.GetTitle: string; begin Result := rsOptionsEditorTreeViewMenuColors; end; { TfrmOptionsTreeViewMenuColor.Destroy } destructor TfrmOptionsTreeViewMenuColor.Destroy; begin FreeAndNil(TreeViewMenuGenericRoutineAndVarHolder); inherited Destroy; end; { TfrmOptionsTreeViewMenuColor.RefreshColorOfOurSampleClick } procedure TfrmOptionsTreeViewMenuColor.RefreshColorOfOurSampleClick(Sender: TObject); begin TreeViewMenuGenericRoutineAndVarHolder.ShowShortcut := cbkUsageKeyboardShortcut.Checked; TreeViewMenuGenericRoutineAndVarHolder.BackgroundColor := cbBackgroundColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.ShortcutColor := cbShortcutColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.NormalTextColor := cbNormalTextColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextColor := cbSecondaryTextColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.FoundTextColor := cbFoundTextColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.UnselectableTextColor := cbUnselectableTextColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.CursorColor := cbCursorColor.Selected; TreeViewMenuGenericRoutineAndVarHolder.ShortcutUnderCursor := cbShortcutUnderCursor.Selected; TreeViewMenuGenericRoutineAndVarHolder.NormalTextUnderCursor := cbNormalTextUnderCursor.Selected; TreeViewMenuGenericRoutineAndVarHolder.SecondaryTextUnderCursor := cbSecondaryTextUnderCursor.Selected; TreeViewMenuGenericRoutineAndVarHolder.FoundTextUnderCursor := cbFoundTextUnderCursor.Selected; TreeViewMenuGenericRoutineAndVarHolder.UnselectableUnderCursor := cbUnselectableUnderCursor.Selected; TreeViewMenuSample.Refresh; end; { TfrmOptionsTreeViewMenuColor.ApplyTempoFontToVisual } procedure TfrmOptionsTreeViewMenuColor.ApplyTempoFontToVisual; begin FontOptionsToFont(TempoFont, edFontName.Font); FontOptionsToFont(TempoFont, TreeViewMenuSample.Font); FontOptionsToFont(TempoFont, sedFont.Font); FontOptionsToFont(TempoFont, btFont.Font); edFontName.Text := TempoFont.Name; if sedFont.Value <> TempoFont.Size then sedFont.Value := TempoFont.Size; end; { TfrmOptionsTreeViewMenuColor.sedFontChange } procedure TfrmOptionsTreeViewMenuColor.sedFontChange(Sender: TObject); begin if TempoFont.Size <> TSpinEdit(Sender).Value then begin TempoFont.Size := TSpinEdit(Sender).Value; ApplyTempoFontToVisual; end; end; { TfrmOptionsTreeViewMenuColor.btFontClick } procedure TfrmOptionsTreeViewMenuColor.btFontClick(Sender: TObject); begin FontOptionsToFont(TempoFont, dlgFnt.Font); if dlgFnt.Execute then begin FontToFontOptions(dlgFnt.Font, TempoFont); ApplyTempoFontToVisual; end; end; { TfrmOptionsTreeViewMenuColor.TreeViewMenuSampleMouseWheelDown } procedure TfrmOptionsTreeViewMenuColor.TreeViewMenuSampleMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift = [ssCtrl]) and (TempoFont.Size > TempoFont.MinValue) then begin dec(TempoFont.Size); ApplyTempoFontToVisual; Handled := True; end; end; { TfrmOptionsTreeViewMenuColor.TreeViewMenuSampleMouseWheelUp } procedure TfrmOptionsTreeViewMenuColor.TreeViewMenuSampleMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift = [ssCtrl]) and (TempoFont.Size < TempoFont.MaxValue) then begin inc(TempoFont.Size); ApplyTempoFontToVisual; Handled := True; end; end; end. doublecmd-1.1.30/src/frames/foptionstreeviewmenucolor.lrj0000644000175000001440000001025015104114162022700 0ustar alexxusers{"version":1,"strings":[ {"hash":159890218,"name":"tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption","sourcebytes":[76,97,121,111,117,116,32,97,110,100,32,99,111,108,111,114,115,32,111,112,116,105,111,110,115,58],"value":"Layout and colors options:"}, {"hash":31991555,"name":"tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption","sourcebytes":[85,115,101,32,97,110,100,32,100,105,115,112,108,97,121,32,107,101,121,98,111,97,114,100,32,115,104,111,114,116,99,117,116,32,102,111,114,32,99,104,111,111,115,105,110,103,32,105,116,101,109,115],"value":"Use and display keyboard shortcut for choosing items"}, {"hash":140314666,"name":"tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,32,99,111,108,111,114,58],"value":"Background color:"}, {"hash":2155466,"name":"tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption","sourcebytes":[83,104,111,114,116,99,117,116,32,99,111,108,111,114,58],"value":"Shortcut color:"}, {"hash":231377482,"name":"tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption","sourcebytes":[78,111,114,109,97,108,32,116,101,120,116,32,99,111,108,111,114,58],"value":"Normal text color:"}, {"hash":127674394,"name":"tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption","sourcebytes":[83,101,99,111,110,100,97,114,121,32,116,101,120,116,32,99,111,108,111,114,58],"value":"Secondary text color:"}, {"hash":11769210,"name":"tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption","sourcebytes":[70,111,117,110,100,32,116,101,120,116,32,99,111,108,111,114,58],"value":"Found text color:"}, {"hash":261168186,"name":"tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption","sourcebytes":[85,110,115,101,108,101,99,116,97,98,108,101,32,116,101,120,116,32,99,111,108,111,114,58],"value":"Unselectable text color:"}, {"hash":208506970,"name":"tfrmoptionstreeviewmenucolor.lblcursorcolor.caption","sourcebytes":[67,117,114,115,111,114,32,99,111,108,111,114,58],"value":"Cursor color:"}, {"hash":153885482,"name":"tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption","sourcebytes":[83,104,111,114,116,99,117,116,32,117,110,100,101,114,32,99,117,114,115,111,114,58],"value":"Shortcut under cursor:"}, {"hash":4629498,"name":"tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption","sourcebytes":[78,111,114,109,97,108,32,116,101,120,116,32,117,110,100,101,114,32,99,117,114,115,111,114,58],"value":"Normal text under cursor:"}, {"hash":23119450,"name":"tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption","sourcebytes":[83,101,99,111,110,100,97,114,121,32,116,101,120,116,32,117,110,100,101,114,32,99,117,114,115,111,114,58],"value":"Secondary text under cursor:"}, {"hash":66678826,"name":"tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption","sourcebytes":[70,111,117,110,100,32,116,101,120,116,32,117,110,100,101,114,32,99,117,114,115,111,114,58],"value":"Found text under cursor:"}, {"hash":258370346,"name":"tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption","sourcebytes":[85,110,115,101,108,101,99,116,97,98,108,101,32,117,110,100,101,114,32,99,117,114,115,111,114,58],"value":"Unselectable under cursor:"}, {"hash":251513754,"name":"tfrmoptionstreeviewmenucolor.lblpreview.caption","sourcebytes":[84,114,101,101,32,86,105,101,119,32,77,101,110,117,32,80,114,101,118,105,101,119,58],"value":"Tree View Menu Preview:"}, {"hash":108342734,"name":"tfrmoptionstreeviewmenucolor.treeviewmenusample.hint","sourcebytes":[67,104,97,110,103,101,32,99,111,108,111,114,32,111,110,32,108,101,102,116,32,97,110,100,32,121,111,117,39,108,108,32,115,101,101,32,104,101,114,101,32,97,32,112,114,101,118,105,101,119,32,111,102,32,119,104,97,116,32,121,111,117,114,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117,115,32,119,105,108,108,32,108,111,111,107,32,108,105,107,101,115,32,119,105,116,104,32,116,104,105,115,32,115,97,109,112,108,101,46],"value":"Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample."}, {"hash":317012,"name":"tfrmoptionstreeviewmenucolor.gbfont.caption","sourcebytes":[70,111,110,116],"value":"Font"}, {"hash":12558,"name":"tfrmoptionstreeviewmenucolor.btfont.caption","sourcebytes":[46,46,46],"value":"..."} ]} doublecmd-1.1.30/src/frames/foptionstreeviewmenucolor.lfm0000644000175000001440000004242415104114162022677 0ustar alexxusersinherited frmOptionsTreeViewMenuColor: TfrmOptionsTreeViewMenuColor Height = 478 Width = 600 HelpKeyword = '/configuration.html#ConfigTreeMenuColor' AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 478 ClientWidth = 600 Constraints.MinHeight = 400 Constraints.MinWidth = 500 ParentShowHint = False ShowHint = True DesignLeft = 418 DesignTop = 264 object gbLayoutAndColors: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 387 Top = 10 Width = 588 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 10 Caption = 'Layout and colors options:' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 367 ClientWidth = 584 TabOrder = 0 object cbkUsageKeyboardShortcut: TCheckBox AnchorSideLeft.Control = gbLayoutAndColors AnchorSideTop.Control = gbLayoutAndColors Left = 10 Height = 19 Top = 6 Width = 303 Caption = 'Use and display keyboard shortcut for choosing items' OnChange = RefreshColorOfOurSampleClick TabOrder = 0 end object lblBackgroundColor: TLabel Tag = 1 AnchorSideTop.Control = cbBackgroundColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 59 Height = 15 Top = 34 Width = 97 Anchors = [akTop, akRight] Caption = 'Background color:' FocusControl = cbBackgroundColor ParentColor = False end object cbBackgroundColor: TKASColorBoxButton Tag = 1 AnchorSideLeft.Control = gbLayoutAndColors AnchorSideTop.Control = cbkUsageKeyboardShortcut AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 29 Width = 126 TabOrder = 1 BorderSpacing.Left = 160 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblShortcutColor: TLabel Tag = 2 AnchorSideTop.Control = cbShortcutColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbShortcutColor Left = 78 Height = 15 Top = 62 Width = 78 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Shortcut color:' FocusControl = cbShortcutColor ParentColor = False end object cbShortcutColor: TKASColorBoxButton Tag = 2 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbBackgroundColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 57 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 2 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblNormalTextColor: TLabel Tag = 3 AnchorSideTop.Control = cbNormalTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 60 Height = 15 Top = 90 Width = 96 Anchors = [akTop, akRight] Caption = 'Normal text color:' FocusControl = cbNormalTextColor ParentColor = False end object cbNormalTextColor: TKASColorBoxButton Tag = 3 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbShortcutColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 85 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 3 Constraints.MinWidth = 100 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblSecondaryTextColor: TLabel Tag = 4 AnchorSideTop.Control = cbSecondaryTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 45 Height = 15 Top = 118 Width = 111 Anchors = [akTop, akRight] Caption = 'Secondary text color:' FocusControl = cbSecondaryTextColor ParentColor = False end object cbSecondaryTextColor: TKASColorBoxButton Tag = 4 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbNormalTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 113 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 4 Constraints.MinWidth = 100 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblFoundTextColor: TLabel Tag = 5 AnchorSideTop.Control = cbFoundTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 66 Height = 15 Top = 146 Width = 90 Anchors = [akTop, akRight] Caption = 'Found text color:' FocusControl = cbFoundTextColor ParentColor = False end object cbFoundTextColor: TKASColorBoxButton Tag = 5 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbSecondaryTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 141 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 5 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblUnselectableTextColor: TLabel Tag = 6 AnchorSideTop.Control = cbUnselectableTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 33 Height = 15 Top = 174 Width = 123 Anchors = [akTop, akRight] Caption = 'Unselectable text color:' FocusControl = cbUnselectableTextColor ParentColor = False end object cbUnselectableTextColor: TKASColorBoxButton Tag = 6 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbFoundTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 169 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 6 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblCursorColor: TLabel Tag = 7 AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 88 Height = 15 Top = 202 Width = 68 Anchors = [akTop, akRight] Caption = 'Cursor color:' FocusControl = cbCursorColor ParentColor = False end object cbCursorColor: TKASColorBoxButton Tag = 7 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbUnselectableTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 197 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 7 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblShortcutUnderCursor: TLabel Tag = 8 AnchorSideTop.Control = cbShortcutUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 38 Height = 15 Top = 230 Width = 118 Anchors = [akTop, akRight] Caption = 'Shortcut under cursor:' FocusControl = cbShortcutUnderCursor ParentColor = False end object cbShortcutUnderCursor: TKASColorBoxButton Tag = 8 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 225 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 8 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblNormalTextUnderCursor: TLabel Tag = 9 AnchorSideTop.Control = cbNormalTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 20 Height = 15 Top = 258 Width = 136 Anchors = [akTop, akRight] Caption = 'Normal text under cursor:' FocusControl = cbNormalTextUnderCursor ParentColor = False end object cbNormalTextUnderCursor: TKASColorBoxButton Tag = 9 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbShortcutUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 253 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 9 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblSecondaryTextUnderCursor: TLabel Tag = 10 AnchorSideTop.Control = cbSecondaryTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 286 Width = 151 Anchors = [akTop, akRight] Caption = 'Secondary text under cursor:' FocusControl = cbSecondaryTextUnderCursor ParentColor = False end object cbSecondaryTextUnderCursor: TKASColorBoxButton Tag = 10 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbNormalTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 281 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 10 Constraints.MinWidth = 100 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblFoundTextUnderCursor: TLabel Tag = 11 AnchorSideTop.Control = cbFoundTextUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 26 Height = 15 Top = 314 Width = 130 Anchors = [akTop, akRight] Caption = 'Found text under cursor:' FocusControl = cbFoundTextUnderCursor ParentColor = False end object cbFoundTextUnderCursor: TKASColorBoxButton Tag = 11 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbSecondaryTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 309 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 11 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblUnselectableUnderCursor: TLabel Tag = 12 AnchorSideTop.Control = cbUnselectableUnderCursor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblShortcutColor AnchorSideRight.Side = asrBottom Left = 16 Height = 15 Top = 342 Width = 140 Anchors = [akTop, akRight] Caption = 'Unselectable under cursor:' FocusControl = cbUnselectableUnderCursor ParentColor = False end object cbUnselectableUnderCursor: TKASColorBoxButton Tag = 12 AnchorSideLeft.Control = cbBackgroundColor AnchorSideTop.Control = cbFoundTextUnderCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 337 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 12 BorderSpacing.Top = 4 OnChange = RefreshColorOfOurSampleClick ColorDialog = optColorDialog end object lblPreview: TLabel AnchorSideLeft.Control = TreeViewMenuSample AnchorSideTop.Control = cbkUsageKeyboardShortcut AnchorSideTop.Side = asrCenter AnchorSideRight.Control = TreeViewMenuSample AnchorSideRight.Side = asrBottom Left = 296 Height = 15 Top = 8 Width = 278 Alignment = taCenter Anchors = [akTop, akLeft, akRight] Caption = 'Tree View Menu Preview:' Color = clInactiveCaption ParentColor = False Transparent = False end object TreeViewMenuSample: TTreeView AnchorSideLeft.Control = cbNormalTextUnderCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPreview AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbLayoutAndColors AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbLayoutAndColors AnchorSideBottom.Side = asrBottom Left = 296 Height = 338 Hint = 'Change color on left and you''ll see here a preview of what your Tree View Menus will look likes with this sample.' Top = 23 Width = 278 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 10 BackgroundColor = clBtnFace Color = clBtnFace ReadOnly = True ScrollBars = ssNone TabOrder = 13 OnMouseWheelDown = TreeViewMenuSampleMouseWheelDown OnMouseWheelUp = TreeViewMenuSampleMouseWheelUp Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end object gbFont: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLayoutAndColors AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 55 Top = 397 Width = 588 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Font' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ClientHeight = 35 ClientWidth = 584 TabOrder = 1 object edFontName: TEdit AnchorSideLeft.Control = gbFont AnchorSideTop.Control = gbFont AnchorSideRight.Control = sedFont Left = 6 Height = 23 Top = 6 Width = 411 Anchors = [akTop, akLeft, akRight] Enabled = False ReadOnly = True TabOrder = 0 end object sedFont: TSpinEdit AnchorSideTop.Control = edFontName AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btFont Left = 420 Height = 23 Top = 6 Width = 120 Anchors = [akTop, akRight] OnChange = sedFontChange TabOrder = 1 Value = 12 end object btFont: TButton AnchorSideTop.Control = edFontName AnchorSideRight.Control = gbFont AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edFontName AnchorSideBottom.Side = asrBottom Left = 543 Height = 23 Top = 6 Width = 35 Anchors = [akTop, akRight, akBottom] AutoSize = True Caption = '...' OnClick = btFontClick TabOrder = 2 end end object optColorDialog: TColorDialog[2] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) Left = 488 Top = 288 end object dlgFnt: TFontDialog[3] MinFontSize = 0 MaxFontSize = 0 Options = [fdNoStyleSel] Left = 416 Top = 344 end end doublecmd-1.1.30/src/frames/foptionstreeviewmenu.pas0000644000175000001440000001146715104114162021650 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of TreeView Menu behavior options. Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsTreeViewMenu; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, //DC fOptionsFrame; type { TfrmOptionsTreeViewMenu } TfrmOptionsTreeViewMenu = class(TOptionsEditor) gbTreeViewMenuSettings: TGroupBox; gbWhereToUseTreeViewMenu: TGroupBox; lblUseInDirectoryHotlist: TLabel; ckbDirectoryHotlistFromMenuCommand: TCheckBox; ckbDirectoryHotlistFromDoubleClick: TCheckBox; lblUseWithFavoriteTabs: TLabel; ckbFavoritaTabsFromMenuCommand: TCheckBox; ckbFavoriteTabsFromDoubleClick: TCheckBox; lblUseWithHistory: TLabel; ckbUseForDirHistory: TCheckBox; ckbUseForViewHistory: TCheckBox; ckbUseForCommandLineHistory: TCheckBox; gbBehavior: TGroupBox; ckbShortcutSelectAndClose: TCheckBox; ckbSingleClickSelect: TCheckBox; ckbDoubleClickSelect: TCheckBox; lblNote: TLabel; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public { Public declarations } class function GetIconIndex: integer; override; class function GetTitle: string; override; destructor Destroy; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LCLProc, LCLIntf, //DC uGlobs, uLng, fmain, DCOSUtils; { TfrmOptionsTreeViewMenu.Init } procedure TfrmOptionsTreeViewMenu.Init; begin //Nothing here for the moment, but let's take the good habit to reserve the place to load eventual TComboBox and stuff like that with a ressource form the language file. end; { TfrmOptionsTreeViewMenu.Load } procedure TfrmOptionsTreeViewMenu.Load; begin ckbDirectoryHotlistFromMenuCommand.Checked := gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand; ckbDirectoryHotlistFromDoubleClick.Checked := gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick; ckbFavoritaTabsFromMenuCommand.Checked := gUseTreeViewMenuWithFavoriteTabsFromMenuCommand; ckbFavoriteTabsFromDoubleClick.Checked := gUseTreeViewMenuWithFavoriteTabsFromDoubleClick; ckbUseForDirHistory.Checked := gUseTreeViewMenuWithDirHistory; ckbUseForViewHistory.Checked := gUseTreeViewMenuWithViewHistory; ckbUseForCommandLineHistory.Checked := gUseTreeViewMenuWithCommandLineHistory; ckbShortcutSelectAndClose.Checked := gTreeViewMenuShortcutExit; ckbSingleClickSelect.Checked := gTreeViewMenuSingleClickExit; ckbDoubleClickSelect.Checked := gTreeViewMenuDoubleClickExit; end; { TfrmOptionsTreeViewMenu.Save } function TfrmOptionsTreeViewMenu.Save: TOptionsEditorSaveFlags; begin Result := []; gUseTreeViewMenuWithDirectoryHotlistFromMenuCommand := ckbDirectoryHotlistFromMenuCommand.Checked; gUseTreeViewMenuWithDirectoryHotlistFromDoubleClick := ckbDirectoryHotlistFromDoubleClick.Checked; gUseTreeViewMenuWithFavoriteTabsFromMenuCommand := ckbFavoritaTabsFromMenuCommand.Checked; gUseTreeViewMenuWithFavoriteTabsFromDoubleClick := ckbFavoriteTabsFromDoubleClick.Checked; gUseTreeViewMenuWithDirHistory := ckbUseForDirHistory.Checked; gUseTreeViewMenuWithViewHistory := ckbUseForViewHistory.Checked; gUseTreeViewMenuWithCommandLineHistory := ckbUseForCommandLineHistory.Checked; gTreeViewMenuShortcutExit := ckbShortcutSelectAndClose.Checked; gTreeViewMenuSingleClickExit := ckbSingleClickSelect.Checked; gTreeViewMenuDoubleClickExit := ckbDoubleClickSelect.Checked; end; { TfrmOptionsTreeViewMenu.GetIconIndex } class function TfrmOptionsTreeViewMenu.GetIconIndex: integer; begin Result := 39; end; { TfrmOptionsTreeViewMenu.GetTitle } class function TfrmOptionsTreeViewMenu.GetTitle: string; begin Result := rsOptionsEditorTreeViewMenu; end; { TfrmOptionsTreeViewMenu.Destroy } destructor TfrmOptionsTreeViewMenu.Destroy; begin inherited Destroy; end; end. doublecmd-1.1.30/src/frames/foptionstreeviewmenu.lrj0000644000175000001440000001264715104114162021655 0ustar alexxusers{"version":1,"strings":[ {"hash":125359418,"name":"tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption","sourcebytes":[84,114,101,101,32,86,105,101,119,32,77,101,110,117,115,32,114,101,108,97,116,101,100,32,111,112,116,105,111,110,115,58],"value":"Tree View Menus related options:"}, {"hash":238805770,"name":"tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption","sourcebytes":[87,104,101,114,101,32,116,111,32,117,115,101,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117,115,58],"value":"Where to use Tree View Menus:"}, {"hash":114703482,"name":"tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption","sourcebytes":[87,105,116,104,32,68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116,58],"value":"With Directory Hotlist:"}, {"hash":153935412,"name":"tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption","sourcebytes":[87,105,116,104,32,116,104,101,32,109,101,110,117,32,97,110,100,32,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"With the menu and internal command"}, {"hash":198705532,"name":"tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption","sourcebytes":[87,105,116,104,32,100,111,117,98,108,101,45,99,108,105,99,107,32,111,110,32,116,104,101,32,98,97,114,32,111,110,32,116,111,112,32,111,102,32,97,32,102,105,108,101,32,112,97,110,101,108],"value":"With double-click on the bar on top of a file panel"}, {"hash":25578842,"name":"tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption","sourcebytes":[87,105,116,104,32,70,97,118,111,114,105,116,101,32,84,97,98,115,58],"value":"With Favorite Tabs:"}, {"hash":153935412,"name":"tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption","sourcebytes":[87,105,116,104,32,116,104,101,32,109,101,110,117,32,97,110,100,32,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"With the menu and internal command"}, {"hash":217214649,"name":"tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption","sourcebytes":[87,105,116,104,32,100,111,117,98,108,101,45,99,108,105,99,107,32,111,110,32,97,32,116,97,98,32,40,105,102,32,99,111,110,102,105,103,117,114,101,100,32,102,111,114,32,105,116,41],"value":"With double-click on a tab (if configured for it)"}, {"hash":245484810,"name":"tfrmoptionstreeviewmenu.lblusewithhistory.caption","sourcebytes":[87,105,116,104,32,72,105,115,116,111,114,121,58],"value":"With History:"}, {"hash":5303177,"name":"tfrmoptionstreeviewmenu.ckbusefordirhistory.caption","sourcebytes":[85,115,101,32,105,116,32,102,111,114,32,116,104,101,32,68,105,114,32,72,105,115,116,111,114,121],"value":"Use it for the Dir History"}, {"hash":200045257,"name":"tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption","sourcebytes":[85,115,101,32,105,116,32,102,111,114,32,116,104,101,32,86,105,101,119,32,72,105,115,116,111,114,121,32,40,86,105,115,105,116,101,100,32,112,97,116,104,115,32,102,111,114,32,97,99,116,105,118,101,32,118,105,101,119,41],"value":"Use it for the View History (Visited paths for active view)"}, {"hash":205832569,"name":"tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption","sourcebytes":[85,115,101,32,105,116,32,102,111,114,32,67,111,109,109,97,110,100,32,76,105,110,101,32,72,105,115,116,111,114,121],"value":"Use it for Command Line History"}, {"hash":137041466,"name":"tfrmoptionstreeviewmenu.gbbehavior.caption","sourcebytes":[66,101,104,97,118,105,111,114,32,114,101,103,97,114,100,105,110,103,32,115,101,108,101,99,116,105,111,110,58],"value":"Behavior regarding selection:"}, {"hash":131316693,"name":"tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption","sourcebytes":[87,104,101,110,32,117,115,105,110,103,32,116,104,101,32,107,101,121,98,111,97,114,100,32,115,104,111,114,116,99,117,116,44,32,105,116,32,119,105,108,108,32,101,120,105,116,32,116,104,101,32,119,105,110,100,111,119,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32,99,117,114,114,101,110,116,32,99,104,111,105,99,101],"value":"When using the keyboard shortcut, it will exit the window returning the current choice"}, {"hash":112843860,"name":"tfrmoptionstreeviewmenu.ckbsingleclickselect.caption","sourcebytes":[83,105,110,103,108,101,32,109,111,117,115,101,32,99,108,105,99,107,32,105,110,32,116,114,101,101,32,115,101,108,101,99,116,32,97,110,100,32,101,120,105,116],"value":"Single mouse click in tree select and exit"}, {"hash":16466372,"name":"tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption","sourcebytes":[68,111,117,98,108,101,32,99,108,105,99,107,32,105,110,32,116,114,101,101,32,115,101,108,101,99,116,32,97,110,100,32,101,120,105,116],"value":"Double click in tree select and exit"}, {"hash":7462014,"name":"tfrmoptionstreeviewmenu.lblnote.caption","sourcebytes":[42,78,79,84,69,58,32,82,101,103,97,114,100,105,110,103,32,116,104,101,32,111,112,116,105,111,110,115,32,108,105,107,101,32,116,104,101,32,99,97,115,101,32,115,101,110,115,105,116,105,118,105,116,121,44,32,105,103,110,111,114,105,110,103,32,97,99,99,101,110,116,115,32,111,114,32,110,111,116,44,32,116,104,101,115,101,32,97,114,101,32,115,97,118,101,100,32,97,110,100,32,114,101,115,116,111,114,101,100,32,105,110,100,105,118,105,100,117,97,108,108,121,32,102,111,114,32,101,97,99,104,32,99,111,110,116,101,120,116,32,102,114,111,109,32,97,32,117,115,97,103,101,32,97,110,100,32,115,101,115,115,105,111,110,32,116,111,32,97,110,111,116,104,101,114,46],"value":"*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another."} ]} doublecmd-1.1.30/src/frames/foptionstreeviewmenu.lfm0000644000175000001440000001762715104114162021647 0ustar alexxusersinherited frmOptionsTreeViewMenu: TfrmOptionsTreeViewMenu Height = 415 Width = 590 HelpKeyword = '/configuration.html#ConfigTreeMenu' AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 415 ClientWidth = 590 Constraints.MinHeight = 400 Constraints.MinWidth = 500 ParentShowHint = False ShowHint = True DesignLeft = 289 DesignTop = 231 object gbTreeViewMenuSettings: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 403 Top = 6 Width = 578 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True Caption = 'Tree View Menus related options:' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 383 ClientWidth = 574 TabOrder = 0 object gbWhereToUseTreeViewMenu: TGroupBox AnchorSideLeft.Control = gbTreeViewMenuSettings AnchorSideTop.Control = gbTreeViewMenuSettings AnchorSideRight.Control = gbTreeViewMenuSettings AnchorSideRight.Side = asrBottom Left = 10 Height = 230 Top = 6 Width = 554 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Where to use Tree View Menus:' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 210 ClientWidth = 550 TabOrder = 0 object lblUseInDirectoryHotlist: TLabel AnchorSideLeft.Control = gbWhereToUseTreeViewMenu AnchorSideTop.Control = gbWhereToUseTreeViewMenu Left = 10 Height = 15 Top = 6 Width = 117 Caption = 'With Directory Hotlist:' ParentColor = False end object ckbDirectoryHotlistFromMenuCommand: TCheckBox AnchorSideLeft.Control = lblUseInDirectoryHotlist AnchorSideTop.Control = lblUseInDirectoryHotlist AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 21 Width = 223 BorderSpacing.Left = 6 Caption = 'With the menu and internal command' TabOrder = 0 end object ckbDirectoryHotlistFromDoubleClick: TCheckBox AnchorSideLeft.Control = ckbDirectoryHotlistFromMenuCommand AnchorSideTop.Control = ckbDirectoryHotlistFromMenuCommand AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 40 Width = 283 Caption = 'With double-click on the bar on top of a file panel' TabOrder = 1 end object lblUseWithFavoriteTabs: TLabel AnchorSideLeft.Control = gbWhereToUseTreeViewMenu AnchorSideTop.Control = ckbDirectoryHotlistFromDoubleClick AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 69 Width = 100 BorderSpacing.Top = 10 Caption = 'With Favorite Tabs:' ParentColor = False end object ckbFavoritaTabsFromMenuCommand: TCheckBox AnchorSideLeft.Control = lblUseInDirectoryHotlist AnchorSideTop.Control = lblUseWithFavoriteTabs AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 84 Width = 223 BorderSpacing.Left = 6 Caption = 'With the menu and internal command' TabOrder = 2 end object ckbFavoriteTabsFromDoubleClick: TCheckBox AnchorSideLeft.Control = ckbDirectoryHotlistFromMenuCommand AnchorSideTop.Control = ckbFavoritaTabsFromMenuCommand AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 103 Width = 267 Caption = 'With double-click on a tab (if configured for it)' TabOrder = 3 end object lblUseWithHistory: TLabel AnchorSideLeft.Control = gbWhereToUseTreeViewMenu AnchorSideTop.Control = ckbFavoriteTabsFromDoubleClick AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 132 Width = 69 BorderSpacing.Top = 10 Caption = 'With History:' ParentColor = False end object ckbUseForDirHistory: TCheckBox AnchorSideLeft.Control = lblUseInDirectoryHotlist AnchorSideTop.Control = lblUseWithHistory AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 147 Width = 146 BorderSpacing.Left = 6 Caption = 'Use it for the Dir History' TabOrder = 4 end object ckbUseForViewHistory: TCheckBox AnchorSideLeft.Control = lblUseInDirectoryHotlist AnchorSideTop.Control = ckbUseForDirHistory AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 166 Width = 313 BorderSpacing.Left = 6 Caption = 'Use it for the View History (Visited paths for active view)' TabOrder = 5 end object ckbUseForCommandLineHistory: TCheckBox AnchorSideLeft.Control = lblUseInDirectoryHotlist AnchorSideTop.Control = ckbUseForViewHistory AnchorSideTop.Side = asrBottom Left = 16 Height = 19 Top = 185 Width = 193 BorderSpacing.Left = 6 Caption = 'Use it for Command Line History' TabOrder = 6 end end object gbBehavior: TGroupBox AnchorSideLeft.Control = gbWhereToUseTreeViewMenu AnchorSideTop.Control = gbWhereToUseTreeViewMenu AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbTreeViewMenuSettings AnchorSideRight.Side = asrBottom Left = 10 Height = 89 Top = 246 Width = 554 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 10 Caption = 'Behavior regarding selection:' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 69 ClientWidth = 550 TabOrder = 1 object ckbShortcutSelectAndClose: TCheckBox AnchorSideLeft.Control = gbBehavior AnchorSideTop.Control = gbBehavior Left = 10 Height = 19 Top = 6 Width = 473 Caption = 'When using the keyboard shortcut, it will exit the window returning the current choice' TabOrder = 0 end object ckbSingleClickSelect: TCheckBox AnchorSideLeft.Control = ckbShortcutSelectAndClose AnchorSideTop.Control = ckbShortcutSelectAndClose AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 25 Width = 231 Caption = 'Single mouse click in tree select and exit' TabOrder = 1 end object ckbDoubleClickSelect: TCheckBox AnchorSideLeft.Control = ckbShortcutSelectAndClose AnchorSideTop.Control = ckbSingleClickSelect AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 44 Width = 198 Caption = 'Double click in tree select and exit' TabOrder = 2 end end object lblNote: TLabel AnchorSideLeft.Control = gbTreeViewMenuSettings AnchorSideTop.Control = gbBehavior AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbTreeViewMenuSettings AnchorSideRight.Side = asrBottom Left = 10 Height = 30 Top = 345 Width = 550 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 10 Caption = '*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another.' Constraints.MaxWidth = 550 ParentColor = False WordWrap = True end end end doublecmd-1.1.30/src/frames/foptionstooltips.pas0000644000175000001440000006307215104114162021005 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tooltips options page Copyright (C) 2011-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsToolTips; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, DividerBevel, Forms, Controls, StdCtrls, Buttons, Menus, ExtCtrls, Dialogs, fOptionsFrame, uInfoToolTip; type { TfrmOptionsToolTips } TfrmOptionsToolTips = class(TOptionsEditor) pnlGeneralToolTipsOptions: TPanel; pnlShowTooltip: TPanel; chkShowToolTip: TCheckBox; pnlToolTipsListbox: TPanel; lblToolTipsListBox: TLabel; lsbCustomFields: TListBox; splToolTips: TSplitter; pnlConfigurationToolTips: TPanel; pnlTooltipButtons: TPanel; btnApplyToolTipsFileType: TBitBtn; btnAddToolTipsFileType: TBitBtn; btnCopyToolTipsFileType: TBitBtn; btnRenameToolTipsFileType: TBitBtn; btnDeleteToolTipsFileType: TBitBtn; btnTooltipOther: TBitBtn; pnlActualToolTipsConfiguration: TPanel; bvlToolTips1: TDividerBevel; lblFieldsMask: TLabel; edtFieldsMask: TEdit; btnFieldsSearchTemplate: TBitBtn; lblFieldsList: TLabel; memFieldsList: TMemo; btnFieldsList: TButton; pmFields: TPopupMenu; bvlToolTips2: TDividerBevel; lblTooltipShowingMode: TLabel; cbTooltipShowingMode: TComboBox; lblTooltipHidingDelay: TLabel; cbToolTipHideTimeOut: TComboBox; pmTooltipOther: TPopupMenu; miToolTipsFileTypeDiscardModification: TMenuItem; miSeparator1: TMenuItem; miToolTipsFileTypeSortFileType: TMenuItem; miSeparator2: TMenuItem; miToolTipsFileTypeExport: TMenuItem; miToolTipsFileTypeImport: TMenuItem; OpenTooltipFileTypeDialog: TOpenDialog; SaveTooltipFileTypeDialog: TSaveDialog; procedure FillListBoxWithToolTipsList; procedure SetActiveButtonsBasedOnToolTipsQuantity; procedure LoadMemoWithThisHint(sHint: string); procedure LoadThisHintWithThisMemo(var sHint: string); procedure ActualSaveCurrentToolTips; procedure edtAnyChange({%H-}Sender: TObject); procedure SetConfigurationState(bConfigurationSaved: boolean); procedure chkShowToolTipChange(Sender: TObject); procedure lsbCustomFieldsSelectionChange({%H-}Sender: TObject; {%H-}User: boolean); procedure lsbCustomFieldsDragOver({%H-}Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure lsbCustomFieldsDragDrop({%H-}Sender, {%H-}Source: TObject; {%H-}X, Y: integer); procedure btnApplyToolTipsFileTypeClick({%H-}Sender: TObject); procedure btnAddToolTipsFileTypeClick({%H-}Sender: TObject); procedure btnCopyToolTipsFileTypeClick({%H-}Sender: TObject); procedure btnRenameToolTipsFileTypeClick({%H-}Sender: TObject); procedure btnDeleteToolTipsFileTypeClick({%H-}Sender: TObject); procedure btnTooltipOtherClick({%H-}Sender: TObject); procedure miToolTipsFileTypeDiscardModificationClick({%H-}Sender: TObject); procedure miToolTipsFileTypeSortFileTypeClick({%H-}Sender: TObject); procedure miToolTipsFileTypeExportClick({%H-}Sender: TObject); procedure miToolTipsFileTypeImportClick({%H-}Sender: TObject); procedure miPluginClick(Sender: TObject); procedure btnFieldsListClick({%H-}Sender: TObject); procedure btnFieldsSearchTemplateClick({%H-}Sender: TObject); function isUniqueFileType(paramNewName: string): boolean; procedure ClearData; private bCurrentlyLoadingSettings, bCurrentlyFilling: boolean; FFileInfoToolTipTemp: TFileInfoToolTip; protected procedure Init; override; procedure Load; override; procedure Done; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, LCLProc, //DC DCStrUtils, uShowMsg, uComponentsSignature, fMaskInputDlg, uLng, uGlobs, uSearchTemplate, uFileFunctions; const CONFIG_NOTSAVED = False; CONFIG_SAVED = True; var iLastDisplayedIndex: integer = -1; { TfrmOptionsToolTips } { TfrmOptionsToolTips.Init } procedure TfrmOptionsToolTips.Init; begin FFileInfoToolTipTemp := TFileInfoToolTip.Create; bCurrentlyLoadingSettings := True; bCurrentlyFilling := True; ParseLineToList(rsToolTipModeList, cbTooltipShowingMode.Items); ParseLineToList(rsToolTipHideTimeOutList, cbToolTipHideTimeOut.Items); OpenTooltipFileTypeDialog.Filter := ParseLineToFileFilter([rsFilterDCToolTipFiles, '*.tooltip', rsFilterAnyFiles, AllFilesMask]); SaveTooltipFileTypeDialog.Filter := OpenTooltipFileTypeDialog.Filter; end; { TfrmOptionsToolTips.Load } procedure TfrmOptionsToolTips.Load; begin bCurrentlyLoadingSettings := True; try chkShowToolTip.Checked := gShowToolTip; cbTooltipShowingMode.ItemIndex := integer(gShowToolTipMode); cbToolTipHideTimeOut.ItemIndex := integer(gToolTipHideTimeOut); FFileInfoToolTipTemp.Assign(gFileInfoToolTip); FillListBoxWithToolTipsList; finally bCurrentlyLoadingSettings := False; end; end; { TfrmOptionsToolTips.Done } procedure TfrmOptionsToolTips.Done; begin if lsbCustomFields.ItemIndex <> -1 then if lsbCustomFields.ItemIndex < FFileInfoToolTipTemp.HintItemList.Count then iLastDisplayedIndex := lsbCustomFields.ItemIndex; FreeAndNil(FFileInfoToolTipTemp); end; { TfrmOptionsToolTips.Save } function TfrmOptionsToolTips.Save: TOptionsEditorSaveFlags; begin Result := []; if not lsbCustomFields.Enabled then ActualSaveCurrentToolTips; gShowToolTip := chkShowToolTip.Checked; gShowToolTipMode := TToolTipMode(cbTooltipShowingMode.ItemIndex); gToolTipHideTimeOut := TToolTipHideTimeOut(cbToolTipHideTimeOut.ItemIndex); gFileInfoToolTip.Assign(FFileInfoToolTipTemp); SetConfigurationState(CONFIG_SAVED); LastLoadedOptionSignature := ComputeCompleteOptionsSignature; end; { TfrmOptionsToolTips.GetIconIndex } class function TfrmOptionsToolTips.GetIconIndex: integer; begin Result := 19; end; { TfrmOptionsToolTips.GetTitle } class function TfrmOptionsToolTips.GetTitle: string; begin Result := rsOptionsEditorTooltips; end; { TfrmOptionsToolTips.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsToolTips.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsToolTips.ExtraOptionsSignature } function TfrmOptionsToolTips.ExtraOptionsSignature(CurrentSignature: dword): dword; begin if not lsbCustomFields.Enabled then //If currently our Listbox is disabled, it's because we did at least one modification... Result := (LastLoadedOptionSignature xor $01) //...so let's make sure the reported signature for the whole thing is affected. else begin CurrentSignature := ComputeSignatureSingleComponent(chkShowToolTip, CurrentSignature); CurrentSignature := ComputeSignatureSingleComponent(cbTooltipShowingMode, CurrentSignature); CurrentSignature := ComputeSignatureSingleComponent(cbToolTipHideTimeOut, CurrentSignature); Result := FFileInfoToolTipTemp.ComputeSignature(CurrentSignature); end; end; { TfrmOptionsToolTips.FillListBoxWithToolTipsList } procedure TfrmOptionsToolTips.FillListBoxWithToolTipsList; var I, iRememberIndex: integer; begin bCurrentlyFilling := True; try iRememberIndex := lsbCustomFields.ItemIndex; lsbCustomFields.Clear; for I := 0 to pred(FFileInfoToolTipTemp.HintItemList.Count) do lsbCustomFields.Items.Add(FFileInfoToolTipTemp.HintItemList[I].Name); if lsbCustomFields.Items.Count > 0 then begin if (iRememberIndex <> -1) and (iRememberIndex < lsbCustomFields.Items.Count) then lsbCustomFields.ItemIndex := iRememberIndex else if (iLastDisplayedIndex <> -1) and (iLastDisplayedIndex < lsbCustomFields.Items.Count) then lsbCustomFields.ItemIndex := iLastDisplayedIndex else lsbCustomFields.ItemIndex := 0; end; SetActiveButtonsBasedOnToolTipsQuantity; btnApplyToolTipsFileType.Enabled := False; lsbCustomFieldsSelectionChange(lsbCustomFields, False); finally bCurrentlyFilling := False; end; end; { TfrmOptionsToolTips.SetActiveButtonsBasedOnToolTipsQuantity } procedure TfrmOptionsToolTips.SetActiveButtonsBasedOnToolTipsQuantity; begin btnAddToolTipsFileType.Enabled := lsbCustomFields.Enabled; btnCopyToolTipsFileType.Enabled := ((lsbCustomFields.Items.Count > 0) and (lsbCustomFields.Enabled)); btnRenameToolTipsFileType.Enabled := btnCopyToolTipsFileType.Enabled; btnDeleteToolTipsFileType.Enabled := btnCopyToolTipsFileType.Enabled; miToolTipsFileTypeSortFileType.Enabled := ((lsbCustomFields.Items.Count > 1) and (lsbCustomFields.Enabled)); miToolTipsFileTypeExport.Enabled := btnCopyToolTipsFileType.Enabled; end; { TfrmOptionsToolTips.LoadMemoWithThisHint } //To be backward compatible with past versions and existing config, let's keep the "/n" separator for each line. //[Plugin(<Exif>).Width{}]\nGenre:[Plugin(audioinfo).Genre{}] procedure TfrmOptionsToolTips.LoadMemoWithThisHint(sHint: string); var iStartingPoint, iPosDelimiter: integer; begin memFieldsList.Clear; iStartingPoint := 1; repeat iPosDelimiter := PosEx('\n', LowerCase(sHint), iStartingPoint); if iPosDelimiter <> 0 then begin memFieldsList.Lines.Add(copy(sHint, iStartingPoint, (iPosDelimiter - iStartingPoint))); iStartingPoint := iPosDelimiter + 2; end; until iPosDelimiter = 0; if iStartingPoint < length(sHint) then memFieldsList.Lines.Add(RightStr(sHint, succ(length(sHint) - iStartingPoint))); memFieldsList.SelStart := 0; end; { TfrmOptionsToolTips.LoadThisHintWithThisMemo } procedure TfrmOptionsToolTips.LoadThisHintWithThisMemo(var sHint: string); var iIndexLine: integer; begin sHint := ''; for iIndexLine := 0 to pred(memFieldsList.Lines.Count) do sHint := sHint + memFieldsList.Lines.Strings[iIndexLine] + IfThen(iIndexLine < pred(memFieldsList.Lines.Count), '\n', ''); end; { TfrmOptionsToolTips.ActualSaveCurrentToolTips } procedure TfrmOptionsToolTips.ActualSaveCurrentToolTips; begin if lsbCustomFields.ItemIndex <> -1 then begin FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Name := lsbCustomFields.Items.Strings[lsbCustomFields.ItemIndex]; FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Mask := edtFieldsMask.Text; LoadThisHintWithThisMemo(FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Hint); end; end; { TfrmOptionsToolTips.edtAnyChange } procedure TfrmOptionsToolTips.edtAnyChange(Sender: TObject); begin if not bCurrentlyLoadingSettings then if lsbCustomFields.Enabled then SetConfigurationState(CONFIG_NOTSAVED); end; { TfrmOptionsToolTips.SetConfigurationState } procedure TfrmOptionsToolTips.SetConfigurationState(bConfigurationSaved: boolean); begin if lsbCustomFields.Enabled <> bConfigurationSaved then begin chkShowToolTip.Enabled := bConfigurationSaved; btnApplyToolTipsFileType.Enabled := not bConfigurationSaved; lsbCustomFields.Enabled := bConfigurationSaved; btnAddToolTipsFileType.Enabled := bConfigurationSaved; btnCopyToolTipsFileType.Enabled := bConfigurationSaved; btnRenameToolTipsFileType.Enabled := bConfigurationSaved; btnDeleteToolTipsFileType.Enabled := bConfigurationSaved; miToolTipsFileTypeDiscardModification.Enabled := not bConfigurationSaved; miToolTipsFileTypeSortFileType.Enabled := bConfigurationSaved; miToolTipsFileTypeExport.Enabled := bConfigurationSaved; miToolTipsFileTypeImport.Enabled := bConfigurationSaved; lsbCustomFields.Hint := IfThen(bConfigurationSaved = CONFIG_SAVED, EmptyStr, rsOptTooltipConfigureSaveToChange); end; end; { TfrmOptionsToolTips.chkShowToolTipChange } procedure TfrmOptionsToolTips.chkShowToolTipChange(Sender: TObject); begin pnlConfigurationToolTips.Enabled := TCheckBox(Sender).Checked; pnlToolTipsListbox.Enabled := pnlConfigurationToolTips.Enabled; end; { lsbCustomFieldsSelectionChange } procedure TfrmOptionsToolTips.lsbCustomFieldsSelectionChange(Sender: TObject; User: boolean); begin bCurrentlyLoadingSettings := True; pnlActualToolTipsConfiguration.Enabled:= lsbCustomFields.ItemIndex <> -1; if pnlActualToolTipsConfiguration.Enabled then begin edtFieldsMask.Text := FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Mask; LoadMemoWithThisHint(FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Hint); end; bCurrentlyLoadingSettings := False; end; { TfrmOptionsToolTips.lsbCustomFieldsDragOver } procedure TfrmOptionsToolTips.lsbCustomFieldsDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmOptionsToolTips.lsbCustomFieldsDragDrop } procedure TfrmOptionsToolTips.lsbCustomFieldsDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin SrcIndex := lsbCustomFields.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lsbCustomFields.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lsbCustomFields.Count) then DestIndex := lsbCustomFields.Count - 1; lsbCustomFields.Items.Move(SrcIndex, DestIndex); FFileInfoToolTipTemp.HintItemList.Move(SrcIndex, DestIndex); lsbCustomFields.ItemIndex := DestIndex; lsbCustomFieldsSelectionChange(lsbCustomFields, False); end; { TfrmOptionsToolTips.btnApplyToolTipsFileTypeClick } procedure TfrmOptionsToolTips.btnApplyToolTipsFileTypeClick(Sender: TObject); begin Save; if lsbCustomFields.CanFocus then lsbCustomFields.SetFocus; end; {TfrmOptionsToolTips.btnCopyToolTipsFileTypeClick } procedure TfrmOptionsToolTips.btnCopyToolTipsFileTypeClick(Sender: TObject); var sCurrentSelectedName, sNewName: string; iIndexCopy, iPosOpenPar, iNewInsertedPosition: integer; ANewHintItem: THintItem; begin if lsbCustomFields.ItemIndex < 0 then Exit; sCurrentSelectedName := lsbCustomFields.Items.Strings[lsbCustomFields.ItemIndex]; if LastDelimiter(')', sCurrentSelectedName) = length(sCurrentSelectedName) then begin iPosOpenPar := LastDelimiter('(', sCurrentSelectedName); if (iPosOpenPar > 0) and (iPosOpenPar > (length(sCurrentSelectedName) - 4)) then sCurrentSelectedName := LeftStr(sCurrentSelectedName, pred(pred(iPosOpenPar))); end; iIndexCopy := 2; while lsbCustomFields.Items.IndexOf(Format('%s (%d)', [sCurrentSelectedName, iIndexCopy])) <> -1 do Inc(iIndexCopy); sNewName := Format('%s (%d)', [sCurrentSelectedName, iIndexCopy]); ANewHintItem := FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Clone; //Let's place our copy right after the original one. iNewInsertedPosition := succ(lsbCustomFields.ItemIndex); if iNewInsertedPosition < FFileInfoToolTipTemp.HintItemList.Count then begin lsbCustomFields.Items.Insert(iNewInsertedPosition, sNewName); FFileInfoToolTipTemp.HintItemList.Insert(iNewInsertedPosition, ANewHintItem); end else begin lsbCustomFields.Items.Add(sNewName); FFileInfoToolTipTemp.HintItemList.Add(ANewHintItem); end; lsbCustomFields.ItemIndex := iNewInsertedPosition; SetActiveButtonsBasedOnToolTipsQuantity; if edtFieldsMask.CanFocus then edtFieldsMask.SetFocus; end; { TfrmOptionsToolTips.btnAddToolTipsFileTypeClick } procedure TfrmOptionsToolTips.btnAddToolTipsFileTypeClick(Sender: TObject); var sName: string; ANewHintItem: THintItem; begin sName := EmptyStr; if InputQuery(rsOptAddingToolTipFileType, rsOptToolTipFileType, sName) then begin if sName <> EmptyStr then begin if isUniqueFileType(sName) then begin ANewHintItem := THintItem.Create; ANewHintItem.Name := sName; FFileInfoToolTipTemp.HintItemList.Add(ANewHintItem); lsbCustomFields.ItemIndex := lsbCustomFields.Items.Add(sName); lsbCustomFieldsSelectionChange(lsbCustomFields, False); ClearData; SetActiveButtonsBasedOnToolTipsQuantity; if edtFieldsMask.CanFocus then edtFieldsMask.SetFocus; end; end; end; end; { TfrmOptionsToolTips.btnRenameToolTipsFileTypeClick } procedure TfrmOptionsToolTips.btnRenameToolTipsFileTypeClick(Sender: TObject); var sNewName: string; begin if lsbCustomFields.ItemIndex < 0 then Exit; sNewName := lsbCustomFields.Items.Strings[lsbCustomFields.ItemIndex]; if InputQuery(rsOptRenamingToolTipFileType, rsOptToolTipsFileTypeName, sNewName) then begin if isUniqueFileType(sNewName) then if lsbCustomFields.Items.IndexOf(sNewName) = -1 then begin lsbCustomFields.Items.Strings[lsbCustomFields.ItemIndex] := sNewName; FFileInfoToolTipTemp.HintItemList[lsbCustomFields.ItemIndex].Name := sNewName; end else begin msgError(Format(rsOptToolTipFileTypeAlreadyExists, [sNewName])); end; end; end; { TfrmOptionsToolTips.btnDeleteToolTipsFileTypeClick } procedure TfrmOptionsToolTips.btnDeleteToolTipsFileTypeClick(Sender: TObject); var iIndexDelete: longint; begin iIndexDelete := lsbCustomFields.ItemIndex; if (iIndexDelete < 0) then Exit; if MsgBox(Format(rsOptToolTipFileTypeConfirmDelete, [lsbCustomFields.Items.Strings[lsbCustomFields.ItemIndex]]), [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then begin bCurrentlyFilling := True; try lsbCustomFields.Items.Delete(iIndexDelete); FFileInfoToolTipTemp.HintItemList.Delete(iIndexDelete); if lsbCustomFields.Items.Count > 0 then begin if iIndexDelete >= FFileInfoToolTipTemp.HintItemList.Count then lsbCustomFields.ItemIndex := pred(FFileInfoToolTipTemp.HintItemList.Count) else lsbCustomFields.ItemIndex := iIndexDelete; end else begin ClearData; end; lsbCustomFieldsSelectionChange(lsbCustomFields, False); SetActiveButtonsBasedOnToolTipsQuantity; if edtFieldsMask.CanFocus then edtFieldsMask.SetFocus; finally bCurrentlyFilling := False; end; end; end; { TfrmOptionsToolTips.btnTooltipOtherClick } procedure TfrmOptionsToolTips.btnTooltipOtherClick(Sender: TObject); var pWantedPos: TPoint; begin pWantedPos := btnTooltipOther.ClientToScreen(Point(btnTooltipOther.Width div 2, btnTooltipOther.Height - 5)); // Position this way instead of using mouse cursor since it will work for keyboard user. pmTooltipOther.PopUp(pWantedPos.X, pWantedPos.Y); end; { TfrmOptionsToolTips.miToolTipsFileTypeDiscardModificationClick } procedure TfrmOptionsToolTips.miToolTipsFileTypeDiscardModificationClick(Sender: TObject); begin FFileInfoToolTipTemp.Assign(gFileInfoToolTip); FillListBoxWithToolTipsList; SetConfigurationState(CONFIG_SAVED); SetActiveButtonsBasedOnToolTipsQuantity; end; { TfrmOptionsToolTips.miToolTipsFileTypeSortFileTypeClick } procedure TfrmOptionsToolTips.miToolTipsFileTypeSortFileTypeClick(Sender: TObject); begin if FFileInfoToolTipTemp.HintItemList.Count > 0 then begin FFileInfoToolTipTemp.Sort; FillListBoxWithToolTipsList; end; end; { TfrmOptionsToolTips.miToolTipsFileTypeExportClick } procedure TfrmOptionsToolTips.miToolTipsFileTypeExportClick(Sender: TObject); var slValueList, slOutputIndexSelected: TStringList; ExportedFileInfoToolTipTemp: TFileInfoToolTip; iIndex, iExportedIndex: integer; begin if FFileInfoToolTipTemp.HintItemList.Count > 0 then begin slValueList := TStringList.Create; slOutputIndexSelected := TStringList.Create; try for iIndex := 0 to pred(FFileInfoToolTipTemp.HintItemList.Count) do slValueList.Add(FFileInfoToolTipTemp.HintItemList[iIndex].Name); if ShowInputMultiSelectListBox(rsOptToolTipFileTypeExportCaption, rsOptToolTipFileTypeExportPrompt, slValueList, slOutputIndexSelected) then begin ExportedFileInfoToolTipTemp := TFileInfoToolTip.Create; try for iIndex := 0 to pred(slOutputIndexSelected.Count) do begin iExportedIndex := StrToIntDef(slOutputIndexSelected.Strings[iIndex], -1); if iExportedIndex <> -1 then ExportedFileInfoToolTipTemp.HintItemList.Add(FFileInfoToolTipTemp.HintItemList[iExportedIndex].Clone); end; if ExportedFileInfoToolTipTemp.HintItemList.Count > 0 then begin SaveTooltipFileTypeDialog.DefaultExt := '*.tooltip'; SaveTooltipFileTypeDialog.FilterIndex := 1; SaveTooltipFileTypeDialog.Title := rsOptToolTipFileTypeWhereToSave; SaveTooltipFileTypeDialog.FileName := rsOptToolTipFileTypeDefaultExportFilename; if SaveTooltipFileTypeDialog.Execute then begin ExportedFileInfoToolTipTemp.SaveToFile(SaveTooltipFileTypeDialog.FileName); msgOK(Format(rsOptToolTipFileTypeExportDone, [ExportedFileInfoToolTipTemp.HintItemList.Count, SaveTooltipFileTypeDialog.FileName])); end; end; finally ExportedFileInfoToolTipTemp.Free; end; end; finally slOutputIndexSelected.Free; slValueList.Free; end; end; end; { TfrmOptionsToolTips.miToolTipsFileTypeImportClick} procedure TfrmOptionsToolTips.miToolTipsFileTypeImportClick(Sender: TObject); var ImportedFileInfoToolTipTemp: TFileInfoToolTip; slValueList, slOutputIndexSelected: TStringList; iIndex, iImportedIndex, iNbImported: integer; begin OpenTooltipFileTypeDialog.DefaultExt := '*.tooltip'; OpenTooltipFileTypeDialog.FilterIndex := 1; OpenTooltipFileTypeDialog.Title := rsOptToolTipFileTypeImportFile; if OpenTooltipFileTypeDialog.Execute then begin ImportedFileInfoToolTipTemp := TFileInfoToolTip.Create; try ImportedFileInfoToolTipTemp.LoadFromFile(OpenTooltipFileTypeDialog.FileName); if ImportedFileInfoToolTipTemp.HintItemList.Count > 0 then begin slValueList := TStringList.Create; slOutputIndexSelected := TStringList.Create; try for iIndex := 0 to pred(ImportedFileInfoToolTipTemp.HintItemList.Count) do slValueList.Add(ImportedFileInfoToolTipTemp.HintItemList[iIndex].Name); if ShowInputMultiSelectListBox(rsOptToolTipFileTypeImportCaption, rsOptToolTipFileTypeImportPrompt, slValueList, slOutputIndexSelected) then begin iNbImported := 0; for iIndex := 0 to pred(slOutputIndexSelected.Count) do begin iImportedIndex := StrToIntDef(slOutputIndexSelected.Strings[iIndex], -1); if iImportedIndex <> -1 then begin FFileInfoToolTipTemp.HintItemList.Add(ImportedFileInfoToolTipTemp.HintItemList[iImportedIndex].Clone); lsbCustomFields.Items.add(FFileInfoToolTipTemp.HintItemList[pred(FFileInfoToolTipTemp.HintItemList.Count)].Name); Inc(iNbImported); end; end; lsbCustomFields.ItemIndex := lsbCustomFields.Items.Count - 1; if iNbImported > 0 then begin SetActiveButtonsBasedOnToolTipsQuantity; msgOK(Format(rsOptToolTipFileTypeImportDone, [iNbImported, OpenTooltipFileTypeDialog.FileName])); end; end; finally slOutputIndexSelected.Free; slValueList.Free; end; end; finally ImportedFileInfoToolTipTemp.Free; end; end; end; { TfrmOptionsToolTips.miPluginClick } procedure TfrmOptionsToolTips.miPluginClick(Sender: TObject); var sMask: string; MenuItem: TMenuItem absolute Sender; begin case MenuItem.Tag of 0: sMask := '[DC().' + MenuItem.Hint + '{}]'; 1: sMask := '[Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Hint + '{}]'; 2: sMask := '[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'; 3: sMask := '[DC().' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}] '; else sMask := EmptyStr; end; if sMask <> EmptyStr then begin memFieldsList.SelText := sMask; if memFieldsList.CanFocus then memFieldsList.SetFocus; end; end; { TfrmOptionsToolTips.btnFieldsListClick } procedure TfrmOptionsToolTips.btnFieldsListClick(Sender: TObject); begin FillContentFieldMenu(pmFields.Items, @miPluginClick); pmFields.PopUp(Mouse.CursorPos.x, Mouse.CursorPos.y); end; { TfrmOptionsToolTips.btnFieldsSearchTemplateClick } procedure TfrmOptionsToolTips.btnFieldsSearchTemplateClick(Sender: TObject); var sMask: string; bTemplate: boolean; begin sMask := ''; if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate := IsMaskSearchTemplate(sMask); edtFieldsMask.Text := sMask; edtFieldsMask.Enabled := not bTemplate; end; end; { TfrmOptionsToolTips.isUniqueFileType } function TfrmOptionsToolTips.isUniqueFileType(paramNewName: string): boolean; begin Result := (lsbCustomFields.Items.IndexOf(paramNewName) = -1); if not Result then msgError(Format(rsOptToolTipFileTypeAlreadyExists, [paramNewName])); end; { TfrmOptionsToolTips.ClearData } procedure TfrmOptionsToolTips.ClearData; begin bCurrentlyLoadingSettings := True; edtFieldsMask.Text := EmptyStr; memFieldsList.Clear; bCurrentlyLoadingSettings := False; end; end. doublecmd-1.1.30/src/frames/foptionstooltips.lrj0000644000175000001440000000702715104114162021007 0ustar alexxusers{"version":1,"strings":[ {"hash":86863386,"name":"tfrmoptionstooltips.lbltooltipslistbox.caption","sourcebytes":[38,70,105,108,101,32,116,121,112,101,115,58],"value":"&File types:"}, {"hash":71137081,"name":"tfrmoptionstooltips.btnapplytooltipsfiletype.caption","sourcebytes":[65,38,112,112,108,121],"value":"A&pply"}, {"hash":277668,"name":"tfrmoptionstooltips.btnaddtooltipsfiletype.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":4874969,"name":"tfrmoptionstooltips.btncopytooltipsfiletype.caption","sourcebytes":[67,111,112,38,121],"value":"Cop&y"}, {"hash":193742869,"name":"tfrmoptionstooltips.btnrenametooltipsfiletype.caption","sourcebytes":[38,82,101,110,97,109,101],"value":"&Rename"}, {"hash":78392485,"name":"tfrmoptionstooltips.btndeletetooltipsfiletype.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":181151662,"name":"tfrmoptionstooltips.btntooltipother.caption","sourcebytes":[79,116,104,38,101,114,46,46,46],"value":"Oth&er..."}, {"hash":1054,"name":"tfrmoptionstooltips.btnfieldslist.caption","sourcebytes":[62,62],"value":">>"}, {"hash":47236478,"name":"tfrmoptionstooltips.btnfieldssearchtemplate.hint","sourcebytes":[84,101,109,112,108,97,116,101,46,46,46],"value":"Template..."}, {"hash":141616458,"name":"tfrmoptionstooltips.lblfieldslist.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,38,104,105,110,116,58],"value":"Category &hint:"}, {"hash":143501786,"name":"tfrmoptionstooltips.lblfieldsmask.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,38,109,97,115,107,58],"value":"Category &mask:"}, {"hash":153365194,"name":"tfrmoptionstooltips.bvltooltips1.caption","sourcebytes":[84,111,111,108,116,105,112,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,111,114,32,115,101,108,101,99,116,101,100,32,102,105,108,101,32,116,121,112,101,58],"value":"Tooltip configuration for selected file type:"}, {"hash":85767978,"name":"tfrmoptionstooltips.bvltooltips2.caption","sourcebytes":[71,101,110,101,114,97,108,32,111,112,116,105,111,110,115,32,97,98,111,117,116,32,116,111,111,108,116,105,112,115,58],"value":"General options about tooltips:"}, {"hash":111140314,"name":"tfrmoptionstooltips.lbltooltipshowingmode.caption","sourcebytes":[84,111,111,108,116,105,112,32,115,104,111,119,105,110,103,32,109,111,100,101,58],"value":"Tooltip showing mode:"}, {"hash":241931610,"name":"tfrmoptionstooltips.lbltooltiphidingdelay.caption","sourcebytes":[84,111,111,108,116,105,112,32,104,105,100,105,110,103,32,100,101,108,97,121,58],"value":"Tooltip hiding delay:"}, {"hash":206895052,"name":"tfrmoptionstooltips.chkshowtooltip.caption","sourcebytes":[38,83,104,111,119,32,116,111,111,108,116,105,112,32,102,111,114,32,102,105,108,101,115,32,105,110,32,116,104,101,32,102,105,108,101,32,112,97,110,101,108],"value":"&Show tooltip for files in the file panel"}, {"hash":38327795,"name":"tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption","sourcebytes":[68,105,115,99,97,114,100,32,77,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Discard Modifications"}, {"hash":24150067,"name":"tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption","sourcebytes":[83,111,114,116,32,84,111,111,108,116,105,112,32,70,105,108,101,32,84,121,112,101,115],"value":"Sort Tooltip File Types"}, {"hash":124337662,"name":"tfrmoptionstooltips.mitooltipsfiletypeexport.caption","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."}, {"hash":124338510,"name":"tfrmoptionstooltips.mitooltipsfiletypeimport.caption","sourcebytes":[73,109,112,111,114,116,46,46,46],"value":"Import..."} ]} doublecmd-1.1.30/src/frames/foptionstooltips.lfm0000644000175000001440000003777315104114162021011 0ustar alexxusersinherited frmOptionsToolTips: TfrmOptionsToolTips Height = 480 Width = 826 HelpKeyword = '/configuration.html#ConfigTooltips' AutoSize = True ClientHeight = 480 ClientWidth = 826 DesignLeft = 420 DesignTop = 145 object pnlToolTipsListbox: TPanel[0] Left = 5 Height = 441 Top = 39 Width = 120 Align = alLeft BorderSpacing.Left = 5 BevelOuter = bvNone ClientHeight = 441 ClientWidth = 120 Constraints.MinWidth = 120 TabOrder = 1 object lblToolTipsListBox: TLabel Left = 0 Height = 15 Top = 0 Width = 120 Align = alTop Caption = '&File types:' FocusControl = lsbCustomFields end object lsbCustomFields: TListBox Left = 0 Height = 421 Top = 15 Width = 120 Align = alClient BorderSpacing.Bottom = 5 DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lsbCustomFieldsDragDrop OnDragOver = lsbCustomFieldsDragOver OnSelectionChange = lsbCustomFieldsSelectionChange TabOrder = 0 end end object splToolTips: TSplitter[1] Left = 125 Height = 441 Top = 39 Width = 5 end object pnlConfigurationToolTips: TPanel[2] Left = 130 Height = 441 Top = 39 Width = 696 Align = alClient BevelOuter = bvNone ClientHeight = 441 ClientWidth = 696 TabOrder = 3 object pnlTooltipButtons: TPanel Left = 0 Height = 34 Top = 0 Width = 696 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 34 ClientWidth = 696 TabOrder = 0 object btnApplyToolTipsFileType: TBitBtn AnchorSideLeft.Control = pnlTooltipButtons AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 5 Height = 25 Top = 5 Width = 57 AutoSize = True BorderSpacing.Left = 5 Caption = 'A&pply' OnClick = btnApplyToolTipsFileTypeClick TabOrder = 0 end object btnAddToolTipsFileType: TBitBtn AnchorSideLeft.Control = btnApplyToolTipsFileType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 65 Height = 25 Top = 5 Width = 48 AutoSize = True BorderSpacing.Left = 3 Caption = 'A&dd' OnClick = btnAddToolTipsFileTypeClick TabOrder = 1 end object btnCopyToolTipsFileType: TBitBtn AnchorSideLeft.Control = btnAddToolTipsFileType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 116 Height = 25 Top = 5 Width = 54 AutoSize = True BorderSpacing.Left = 3 Caption = 'Cop&y' OnClick = btnCopyToolTipsFileTypeClick TabOrder = 2 end object btnRenameToolTipsFileType: TBitBtn AnchorSideLeft.Control = btnCopyToolTipsFileType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 173 Height = 25 Top = 5 Width = 69 AutoSize = True BorderSpacing.Left = 3 Caption = '&Rename' OnClick = btnRenameToolTipsFileTypeClick TabOrder = 3 end object btnDeleteToolTipsFileType: TBitBtn AnchorSideLeft.Control = btnRenameToolTipsFileType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 245 Height = 25 Top = 5 Width = 59 AutoSize = True BorderSpacing.Left = 3 Caption = 'Delete' OnClick = btnDeleteToolTipsFileTypeClick TabOrder = 4 end object btnTooltipOther: TBitBtn AnchorSideLeft.Control = btnDeleteToolTipsFileType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 307 Height = 25 Top = 5 Width = 65 AutoSize = True BorderSpacing.Left = 3 Caption = 'Oth&er...' OnClick = btnTooltipOtherClick TabOrder = 5 end end object pnlActualToolTipsConfiguration: TPanel AnchorSideLeft.Control = pnlConfigurationToolTips AnchorSideTop.Control = pnlTooltipButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlConfigurationToolTips AnchorSideRight.Side = asrBottom Left = 0 Height = 271 Top = 34 Width = 696 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 271 ClientWidth = 696 TabOrder = 1 object edtFieldsMask: TEdit AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = lblFieldsMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFieldsSearchTemplate Left = 5 Height = 23 Top = 45 Width = 656 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 2 OnChange = edtAnyChange TabOrder = 0 end object btnFieldsList: TButton AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = memFieldsList AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 5 Height = 23 Top = 248 Width = 28 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnFieldsListClick TabOrder = 3 end object btnFieldsSearchTemplate: TBitBtn AnchorSideTop.Control = edtFieldsMask AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtFieldsMask AnchorSideBottom.Side = asrBottom Left = 663 Height = 23 Hint = 'Template...' Top = 45 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } Layout = blGlyphRight OnClick = btnFieldsSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 1 end object lblFieldsList: TLabel AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = edtFieldsMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 70 Width = 681 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Category &hint:' FocusControl = memFieldsList end object lblFieldsMask: TLabel AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = bvlToolTips1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlActualToolTipsConfiguration AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 30 Width = 681 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 5 BorderSpacing.Right = 10 Caption = 'Category &mask:' FocusControl = edtFieldsMask end object memFieldsList: TMemo AnchorSideLeft.Control = bvlToolTips1 AnchorSideTop.Control = lblFieldsList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips1 AnchorSideRight.Side = asrBottom Left = 5 Height = 163 Top = 85 Width = 681 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange ScrollBars = ssBoth TabOrder = 2 WordWrap = False end object bvlToolTips1: TDividerBevel AnchorSideLeft.Control = pnlActualToolTipsConfiguration AnchorSideTop.Control = pnlActualToolTipsConfiguration AnchorSideRight.Control = pnlActualToolTipsConfiguration AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 10 Width = 681 Caption = 'Tooltip configuration for selected file type:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 10 BorderSpacing.Right = 10 ParentFont = False end end object pnlGeneralToolTipsOptions: TPanel AnchorSideLeft.Control = pnlConfigurationToolTips AnchorSideTop.Control = pnlActualToolTipsConfiguration AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlConfigurationToolTips AnchorSideRight.Side = asrBottom Left = 0 Height = 81 Top = 304 Width = 681 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 81 ClientWidth = 681 TabOrder = 2 object bvlToolTips2: TDividerBevel AnchorSideLeft.Control = pnlGeneralToolTipsOptions AnchorSideTop.Control = pnlGeneralToolTipsOptions AnchorSideRight.Control = pnlGeneralToolTipsOptions AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 10 Width = 681 Caption = 'General options about tooltips:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 10 BorderSpacing.Right = 10 ParentFont = False end object lblTooltipShowingMode: TLabel AnchorSideLeft.Control = bvlToolTips2 AnchorSideTop.Control = cbTooltipShowingMode AnchorSideTop.Side = asrCenter Left = 5 Height = 15 Top = 34 Width = 121 Caption = 'Tooltip showing mode:' FocusControl = cbTooltipShowingMode end object cbTooltipShowingMode: TComboBox AnchorSideLeft.Control = lblTooltipShowingMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = bvlToolTips2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips2 AnchorSideRight.Side = asrBottom Left = 131 Height = 23 Top = 30 Width = 555 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 5 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end object lblTooltipHidingDelay: TLabel AnchorSideLeft.Control = bvlToolTips2 AnchorSideTop.Control = cbToolTipHideTimeOut AnchorSideTop.Side = asrCenter Left = 5 Height = 15 Top = 62 Width = 107 Caption = 'Tooltip hiding delay:' FocusControl = cbToolTipHideTimeOut end object cbToolTipHideTimeOut: TComboBox AnchorSideLeft.Control = lblTooltipHidingDelay AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTooltipShowingMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = bvlToolTips2 AnchorSideRight.Side = asrBottom Left = 117 Height = 23 Top = 58 Width = 569 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 5 ItemHeight = 15 Style = csDropDownList TabOrder = 1 end end end object pnlShowTooltip: TPanel[3] Left = 0 Height = 39 Top = 0 Width = 826 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 39 ClientWidth = 826 TabOrder = 0 object chkShowToolTip: TCheckBox Left = 10 Height = 19 Top = 10 Width = 213 BorderSpacing.Around = 10 Caption = '&Show tooltip for files in the file panel' OnChange = chkShowToolTipChange TabOrder = 0 end end object pmFields: TPopupMenu[4] left = 160 top = 256 end object pmTooltipOther: TPopupMenu[5] left = 536 top = 40 object miToolTipsFileTypeDiscardModification: TMenuItem Caption = 'Discard Modifications' Enabled = False OnClick = miToolTipsFileTypeDiscardModificationClick end object miSeparator1: TMenuItem Caption = '-' end object miToolTipsFileTypeSortFileType: TMenuItem Caption = 'Sort Tooltip File Types' OnClick = miToolTipsFileTypeSortFileTypeClick end object miSeparator2: TMenuItem Caption = '-' end object miToolTipsFileTypeExport: TMenuItem Caption = 'Export...' OnClick = miToolTipsFileTypeExportClick end object miToolTipsFileTypeImport: TMenuItem Caption = 'Import...' OnClick = miToolTipsFileTypeImportClick end end object SaveTooltipFileTypeDialog: TSaveDialog[6] DefaultExt = '.*.tooltip' Filter = 'DC Tooltip files|*.tooltip|Any files|*.*' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 664 top = 32 end object OpenTooltipFileTypeDialog: TOpenDialog[7] DefaultExt = '.*.tooltip' Filter = 'DC Tooltip Files|*.tooltip|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 720 top = 136 end end doublecmd-1.1.30/src/frames/foptionstoolseditor.pas0000644000175000001440000001111415104114162021465 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tools options page for the editor tool Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsToolsEditor; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, Dialogs, LCLVersion, Buttons, EditBtn, Menus, SpinEx, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsEditor } TfrmOptionsEditor = class(TfrmOptionsToolBase) gbInternalEditor: TGroupBox; chkRightEdge: TCheckBox; lblBlockIndent: TLabel; pnlBooleanOptions: TPanel; chkAutoIndent: TCheckBox; chkTrimTrailingSpaces: TCheckBox; chkScrollPastEndLine: TCheckBox; chkShowSpecialChars: TCheckBox; chkTabsToSpaces: TCheckBox; chkTabIndent: TCheckBox; lblTabWidth: TLabel; edTabWidth: TEdit; chkSmartTabs: TCheckBox; chkGroupUndo: TCheckBox; seeRightEdge: TSpinEditEx; seeBlockIndent: TSpinEditEx; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses {$if lcl_fullversion < 2010000} SynEdit {$else} SynEditTypes {$endif} , uGlobs, uLng, fEditor; { TfrmOptionsEditor } procedure TfrmOptionsEditor.Init; begin ExternalTool := etEditor; inherited Init; end; procedure TfrmOptionsEditor.Load; begin inherited Load; chkScrollPastEndLine.Checked := eoScrollPastEoL in gEditorSynEditOptions; chkShowSpecialChars.Checked := eoShowSpecialChars in gEditorSynEditOptions; chkTrimTrailingSpaces.Checked := eoTrimTrailingSpaces in gEditorSynEditOptions; chkTabsToSpaces.Checked := eoTabsToSpaces in gEditorSynEditOptions; chkAutoIndent.Checked := eoAutoIndent in gEditorSynEditOptions; chkTabIndent.Checked := eoTabIndent in gEditorSynEditOptions; chkSmartTabs.Checked := eoSmartTabs in gEditorSynEditOptions; chkRightEdge.Checked := not (eoHideRightMargin in gEditorSynEditOptions); chkGroupUndo.Checked := eoGroupUndo in gEditorSynEditOptions; edTabWidth.Text := IntToStr(gEditorSynEditTabWidth); seeBlockIndent.Value := gEditorSynEditBlockIndent; seeRightEdge.Value := gEditorSynEditRightEdge; end; function TfrmOptionsEditor.Save: TOptionsEditorSaveFlags; procedure UpdateOptionFromBool(AValue: Boolean; AnOption: TSynEditorOption); begin if AValue then gEditorSynEditOptions := gEditorSynEditOptions + [AnOption] else gEditorSynEditOptions := gEditorSynEditOptions - [AnOption]; end; begin Result:= inherited Save; UpdateOptionFromBool(not chkRightEdge.Checked, eoHideRightMargin); UpdateOptionFromBool(chkScrollPastEndLine.Checked, eoScrollPastEoL); UpdateOptionFromBool(chkShowSpecialChars.Checked, eoShowSpecialChars); UpdateOptionFromBool(chkTrimTrailingSpaces.Checked, eoTrimTrailingSpaces); UpdateOptionFromBool(chkTabsToSpaces.Checked, eoTabsToSpaces); UpdateOptionFromBool(chkAutoIndent.Checked, eoAutoIndent); UpdateOptionFromBool(chkTabIndent.Checked, eoTabIndent); UpdateOptionFromBool(chkSmartTabs.Checked, eoSmartTabs); UpdateOptionFromBool(chkGroupUndo.Checked, eoGroupUndo); edTabWidth.Text := IntToStr(StrToIntDef(edTabWidth.Text,8)); gEditorSynEditTabWidth := StrToIntDef(edTabWidth.Text,8); gEditorSynEditBlockIndent := seeBlockIndent.Value; gEditorSynEditRightEdge := seeRightEdge.Value; if LastEditorUsedForConfiguration<>nil then LastEditorUsedForConfiguration.LoadGlobalOptions; end; constructor TfrmOptionsEditor.Create(TheOwner: TComponent); begin inherited Create(TheOwner); Name := 'frmOptionsEditor'; end; class function TfrmOptionsEditor.GetIconIndex: Integer; begin Result := 10; end; class function TfrmOptionsEditor.GetTitle: String; begin Result := rsToolEditor; end; end. doublecmd-1.1.30/src/frames/foptionstoolseditor.lrj0000644000175000001440000001567015104114162021504 0ustar alexxusers{"version":1,"strings":[ {"hash":40124019,"name":"tfrmoptionseditor.gbinternaleditor.caption","sourcebytes":[73,110,116,101,114,110,97,108,32,101,100,105,116,111,114,32,111,112,116,105,111,110,115],"value":"Internal editor options"}, {"hash":162766773,"name":"tfrmoptionseditor.chkautoindent.hint","sourcebytes":[65,108,108,111,119,115,32,116,111,32,105,110,100,101,110,116,32,116,104,101,32,99,97,114,101,116,44,32,119,104,101,110,32,110,101,119,32,108,105,110,101,32,105,115,32,99,114,101,97,116,101,100,32,119,105,116,104,32,60,69,110,116,101,114,62,44,32,119,105,116,104,32,116,104,101,32,115,97,109,101,32,97,109,111,117,110,116,32,111,102,32,108,101,97,100,105,110,103,32,119,104,105,116,101,32,115,112,97,99,101,32,97,115,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,108,105,110,101],"value":"Allows to indent the caret, when new line is created with , with the same amount of leading white space as the preceding line"}, {"hash":80503108,"name":"tfrmoptionseditor.chkautoindent.caption","sourcebytes":[65,117,116,111,32,73,110,100,101,110,116],"value":"Auto Indent"}, {"hash":108628419,"name":"tfrmoptionseditor.chktrimtrailingspaces.hint","sourcebytes":[65,117,116,111,32,100,101,108,101,116,101,32,116,114,97,105,108,105,110,103,32,115,112,97,99,101,115,44,32,116,104,105,115,32,97,112,112,108,105,101,115,32,111,110,108,121,32,116,111,32,101,100,105,116,101,100,32,108,105,110,101,115],"value":"Auto delete trailing spaces, this applies only to edited lines"}, {"hash":214387443,"name":"tfrmoptionseditor.chktrimtrailingspaces.caption","sourcebytes":[68,101,108,101,116,101,32,116,114,97,105,108,105,110,103,32,115,112,97,99,101,115],"value":"Delete trailing spaces"}, {"hash":23065182,"name":"tfrmoptionseditor.chkscrollpastendline.hint","sourcebytes":[65,108,108,111,119,115,32,99,97,114,101,116,32,116,111,32,103,111,32,105,110,116,111,32,101,109,112,116,121,32,115,112,97,99,101,32,98,101,121,111,110,100,32,101,110,100,45,111,102,45,108,105,110,101,32,112,111,115,105,116,105,111,110],"value":"Allows caret to go into empty space beyond end-of-line position"}, {"hash":261134869,"name":"tfrmoptionseditor.chkscrollpastendline.caption","sourcebytes":[67,97,114,101,116,32,112,97,115,116,32,101,110,100,32,111,102,32,108,105,110,101],"value":"Caret past end of line"}, {"hash":86627171,"name":"tfrmoptionseditor.chkshowspecialchars.hint","sourcebytes":[83,104,111,119,115,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,115,32,102,111,114,32,115,112,97,99,101,115,32,97,110,100,32,116,97,98,117,108,97,116,105,111,110,115],"value":"Shows special characters for spaces and tabulations"}, {"hash":140737907,"name":"tfrmoptionseditor.chkshowspecialchars.caption","sourcebytes":[83,104,111,119,32,115,112,101,99,105,97,108,32,99,104,97,114,97,99,116,101,114,115],"value":"Show special characters"}, {"hash":245290889,"name":"tfrmoptionseditor.chktabstospaces.hint","sourcebytes":[67,111,110,118,101,114,116,115,32,116,97,98,32,99,104,97,114,97,99,116,101,114,115,32,116,111,32,97,32,115,112,101,99,105,102,105,101,100,32,110,117,109,98,101,114,32,111,102,32,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,115,32,40,119,104,101,110,32,101,110,116,101,114,105,110,103,41],"value":"Converts tab characters to a specified number of space characters (when entering)"}, {"hash":245861139,"name":"tfrmoptionseditor.chktabstospaces.caption","sourcebytes":[85,115,101,32,115,112,97,99,101,115,32,105,110,115,116,101,97,100,32,116,97,98,32,99,104,97,114,97,99,116,101,114,115],"value":"Use spaces instead tab characters"}, {"hash":253069796,"name":"tfrmoptionseditor.chktabindent.hint","sourcebytes":[87,104,101,110,32,97,99,116,105,118,101,32,60,84,97,98,62,32,97,110,100,32,60,83,104,105,102,116,43,84,97,98,62,32,97,99,116,32,97,115,32,98,108,111,99,107,32,105,110,100,101,110,116,44,32,117,110,105,110,100,101,110,116,32,119,104,101,110,32,116,101,120,116,32,105,115,32,115,101,108,101,99,116,101,100],"value":"When active and act as block indent, unindent when text is selected"}, {"hash":127944307,"name":"tfrmoptionseditor.chktabindent.caption","sourcebytes":[84,97,98,32,105,110,100,101,110,116,115,32,98,108,111,99,107,115],"value":"Tab indents blocks"}, {"hash":145722565,"name":"tfrmoptionseditor.chksmarttabs.hint","sourcebytes":[87,104,101,110,32,117,115,105,110,103,32,60,84,97,98,62,32,107,101,121,44,32,99,97,114,101,116,32,119,105,108,108,32,103,111,32,116,111,32,116,104,101,32,110,101,120,116,32,110,111,110,45,115,112,97,99,101,32,99,104,97,114,97,99,116,101,114,32,111,102,32,116,104,101,32,112,114,101,118,105,111,117,115,32,108,105,110,101],"value":"When using key, caret will go to the next non-space character of the previous line"}, {"hash":157287443,"name":"tfrmoptionseditor.chksmarttabs.caption","sourcebytes":[83,109,97,114,116,32,84,97,98,115],"value":"Smart Tabs"}, {"hash":53591125,"name":"tfrmoptionseditor.chkgroupundo.hint","sourcebytes":[65,108,108,32,99,111,110,116,105,110,117,111,117,115,32,99,104,97,110,103,101,115,32,111,102,32,116,104,101,32,115,97,109,101,32,116,121,112,101,32,119,105,108,108,32,98,101,32,112,114,111,99,101,115,115,101,100,32,105,110,32,111,110,101,32,99,97,108,108,32,105,110,115,116,101,97,100,32,111,102,32,117,110,100,111,105,110,103,47,114,101,100,111,105,110,103,32,101,97,99,104,32,111,110,101],"value":"All continuous changes of the same type will be processed in one call instead of undoing/redoing each one"}, {"hash":203517391,"name":"tfrmoptionseditor.chkgroupundo.caption","sourcebytes":[71,114,111,117,112,32,85,110,100,111],"value":"Group Undo"}, {"hash":61127412,"name":"tfrmoptionseditor.edtabwidth.hint","sourcebytes":[80,108,101,97,115,101,32,110,111,116,101,32,116,104,97,116,32,116,104,101,32,34,83,109,97,114,116,32,84,97,98,115,34,32,111,112,116,105,111,110,32,116,97,107,101,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32,116,104,101,32,116,97,98,117,108,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100],"value":"Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed"}, {"hash":61127412,"name":"tfrmoptionseditor.lbltabwidth.hint","sourcebytes":[80,108,101,97,115,101,32,110,111,116,101,32,116,104,97,116,32,116,104,101,32,34,83,109,97,114,116,32,84,97,98,115,34,32,111,112,116,105,111,110,32,116,97,107,101,115,32,112,114,101,99,101,100,101,110,99,101,32,111,118,101,114,32,116,104,101,32,116,97,98,117,108,97,116,105,111,110,32,116,111,32,98,101,32,112,101,114,102,111,114,109,101,100],"value":"Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed"}, {"hash":131735034,"name":"tfrmoptionseditor.lbltabwidth.caption","sourcebytes":[84,97,98,32,119,105,100,116,104,58],"value":"Tab width:"}, {"hash":192227930,"name":"tfrmoptionseditor.chkrightedge.caption","sourcebytes":[82,105,103,104,116,32,109,97,114,103,105,110,58],"value":"Right margin:"}, {"hash":125778010,"name":"tfrmoptionseditor.lblblockindent.caption","sourcebytes":[66,108,111,99,107,32,105,110,100,101,110,116,58],"value":"Block indent:"} ]} doublecmd-1.1.30/src/frames/foptionstoolseditor.lfm0000644000175000001440000001446515104114162021474 0ustar alexxusersinherited frmOptionsEditor: TfrmOptionsEditor Height = 513 Width = 586 HelpKeyword = '/configuration.html#ConfigToolsEditor' ClientHeight = 513 ClientWidth = 586 ParentShowHint = False ShowHint = True DesignLeft = 117 DesignTop = 255 object gbInternalEditor: TGroupBox[8] AnchorSideLeft.Control = fneToolsPath AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtToolsParameters AnchorSideRight.Side = asrBottom Left = 8 Height = 176 Top = 235 Width = 571 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 10 Caption = 'Internal editor options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 151 ClientWidth = 567 TabOrder = 5 object pnlBooleanOptions: TPanel Left = 6 Height = 108 Top = 6 Width = 555 AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 12 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 108 ClientWidth = 555 TabOrder = 0 object chkAutoIndent: TCheckBox Left = 6 Height = 24 Hint = 'Allows to indent the caret, when new line is created with , with the same amount of leading white space as the preceding line' Top = 6 Width = 306 Caption = 'Auto Indent' TabOrder = 0 end object chkTrimTrailingSpaces: TCheckBox Left = 324 Height = 24 Hint = 'Auto delete trailing spaces, this applies only to edited lines' Top = 6 Width = 225 Caption = 'Delete trailing spaces' TabOrder = 1 end object chkScrollPastEndLine: TCheckBox AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Hint = 'Allows caret to go into empty space beyond end-of-line position' Top = 30 Width = 306 BorderSpacing.Left = 6 Caption = 'Caret past end of line' TabOrder = 2 end object chkShowSpecialChars: TCheckBox Left = 324 Height = 24 Hint = 'Shows special characters for spaces and tabulations' Top = 30 Width = 225 Caption = 'Show special characters' TabOrder = 3 end object chkTabsToSpaces: TCheckBox Left = 6 Height = 24 Hint = 'Converts tab characters to a specified number of space characters (when entering)' Top = 54 Width = 306 Caption = 'Use spaces instead tab characters' TabOrder = 4 end object chkTabIndent: TCheckBox Left = 324 Height = 24 Hint = 'When active and act as block indent, unindent when text is selected' Top = 54 Width = 225 Caption = 'Tab indents blocks' TabOrder = 5 end object chkSmartTabs: TCheckBox Left = 6 Height = 24 Hint = 'When using key, caret will go to the next non-space character of the previous line' Top = 78 Width = 306 Caption = 'Smart Tabs' TabOrder = 6 end object chkGroupUndo: TCheckBox Left = 323 Height = 24 Hint = 'All continuous changes of the same type will be processed in one call instead of undoing/redoing each one' Top = 63 Width = 226 Caption = 'Group Undo' TabOrder = 7 end end object edTabWidth: TEdit AnchorSideLeft.Control = lblTabWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlBooleanOptions AnchorSideTop.Side = asrBottom Left = 77 Height = 28 Hint = 'Please note that the "Smart Tabs" option takes precedence over the tabulation to be performed' Top = 117 Width = 100 BorderSpacing.Left = 4 BorderSpacing.Top = 3 TabOrder = 1 end object lblTabWidth: TLabel AnchorSideLeft.Control = pnlBooleanOptions AnchorSideTop.Control = edTabWidth AnchorSideTop.Side = asrCenter Left = 6 Height = 20 Hint = 'Please note that the "Smart Tabs" option takes precedence over the tabulation to be performed' Top = 121 Width = 67 Caption = 'Tab width:' FocusControl = edTabWidth ParentColor = False end object chkRightEdge: TCheckBox AnchorSideLeft.Control = seeBlockIndent AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblTabWidth AnchorSideTop.Side = asrCenter Left = 363 Height = 23 Top = 120 Width = 108 BorderSpacing.Left = 12 Caption = 'Right margin:' Color = clDefault ParentColor = False TabOrder = 3 end object seeRightEdge: TSpinEditEx AnchorSideLeft.Control = chkRightEdge AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edTabWidth AnchorSideTop.Side = asrCenter Left = 475 Height = 36 Top = 113 Width = 103 BorderSpacing.Left = 4 MaxLength = 0 TabOrder = 4 MaxValue = 512 MinValue = 16 NullValue = 0 Value = 80 end object lblBlockIndent: TLabel AnchorSideLeft.Control = edTabWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblTabWidth AnchorSideTop.Side = asrCenter Left = 164 Height = 19 Top = 122 Width = 80 BorderSpacing.Left = 12 Caption = 'Block indent:' ParentColor = False end object seeBlockIndent: TSpinEditEx AnchorSideLeft.Control = lblBlockIndent AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edTabWidth AnchorSideTop.Side = asrCenter Left = 248 Height = 36 Top = 113 Width = 103 BorderSpacing.Left = 4 MaxLength = 0 TabOrder = 2 MaxValue = 20 NullValue = 0 Value = 0 end end inherited pmPathHelper: TPopupMenu[9] Left = 424 Top = 8 end end doublecmd-1.1.30/src/frames/foptionstoolsdiffer.pas0000644000175000001440000000434215104114162021443 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tools options page for the differ tool Copyright (C) 2006-2016 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsToolsDiffer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, Dialogs, Buttons, Menus, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsDiffer } TfrmOptionsDiffer = class(TfrmOptionsToolBase) rgResultingFramePositionAfterCompare: TRadioGroup; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsDiffer } procedure TfrmOptionsDiffer.Init; begin ExternalTool := etDiffer; inherited Init; ParseLineToList(rsOptDifferFramePosition, rgResultingFramePositionAfterCompare.Items); end; procedure TfrmOptionsDiffer.Load; begin inherited; rgResultingFramePositionAfterCompare.ItemIndex := Integer(gResultingFramePositionAfterCompare); end; function TfrmOptionsDiffer.Save: TOptionsEditorSaveFlags; begin Result := inherited; gResultingFramePositionAfterCompare := TResultingFramePositionAfterCompare(rgResultingFramePositionAfterCompare.ItemIndex); end; class function TfrmOptionsDiffer.GetIconIndex: Integer; begin Result := 25; end; class function TfrmOptionsDiffer.GetTitle: String; begin Result := rsToolDiffer; end; end. doublecmd-1.1.30/src/frames/foptionstoolsdiffer.lrj0000644000175000001440000000055115104114162021445 0ustar alexxusers{"version":1,"strings":[ {"hash":185038314,"name":"tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption","sourcebytes":[80,111,115,105,116,105,111,110,32,111,102,32,102,114,97,109,101,32,112,97,110,101,108,32,97,102,116,101,114,32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,58],"value":"Position of frame panel after the comparison:"} ]} doublecmd-1.1.30/src/frames/foptionstoolsdiffer.lfm0000644000175000001440000000266415104114162021443 0ustar alexxusersinherited frmOptionsDiffer: TfrmOptionsDiffer Height = 478 Width = 586 HelpKeyword = '/configuration.html#ConfigToolsDiffer' ClientHeight = 478 ClientWidth = 586 DesignLeft = 377 DesignTop = 160 inherited btnRelativeToolPath: TSpeedButton Anchors = [akTop, akRight, akBottom] end object rgResultingFramePositionAfterCompare: TRadioGroup[8] AnchorSideLeft.Control = edtToolsParameters AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtToolsParameters AnchorSideRight.Side = asrBottom Left = 8 Height = 58 Top = 200 Width = 571 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 12 Caption = 'Position of frame panel after the comparison:' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 38 ClientWidth = 567 ItemIndex = 0 Items.Strings = ( 'Active frame panel on left, inactive on right (legacy)' 'Left frame panel on left, right on right' ) TabOrder = 5 end inherited pmPathHelper: TPopupMenu[9] left = 464 top = 8 end end doublecmd-1.1.30/src/frames/foptionstools.pas0000644000175000001440000000405315104114162020262 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tools options page Copyright (C) 2006-2023 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsTools; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, ColorBox, Dialogs, Types, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsViewer } TfrmOptionsViewer = class(TfrmOptionsToolBase) gbInternalViewer: TGroupBox; lblNumberColumnsViewer: TLabel; seNumberColumnsViewer: TSpinEdit; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsViewer } class function TfrmOptionsViewer.GetIconIndex: Integer; begin Result := 22; end; class function TfrmOptionsViewer.GetTitle: String; begin Result := rsToolViewer; end; procedure TfrmOptionsViewer.Init; begin ExternalTool := etViewer; inherited Init; end; procedure TfrmOptionsViewer.Load; begin inherited Load; seNumberColumnsViewer.Value := gColCount; end; function TfrmOptionsViewer.Save: TOptionsEditorSaveFlags; begin Result := inherited Save; gColCount := seNumberColumnsViewer.Value; end; end. doublecmd-1.1.30/src/frames/foptionstools.lrj0000644000175000001440000000076315104114162020272 0ustar alexxusers{"version":1,"strings":[ {"hash":10525987,"name":"tfrmoptionsviewer.gbinternalviewer.caption","sourcebytes":[73,110,116,101,114,110,97,108,32,118,105,101,119,101,114,32,111,112,116,105,111,110,115],"value":"Internal viewer options"}, {"hash":70997378,"name":"tfrmoptionsviewer.lblnumbercolumnsviewer.caption","sourcebytes":[38,78,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,110,32,98,111,111,107,32,118,105,101,119,101,114],"value":"&Number of columns in book viewer"} ]} doublecmd-1.1.30/src/frames/foptionstools.lfm0000644000175000001440000000355715104114162020265 0ustar alexxusersinherited frmOptionsViewer: TfrmOptionsViewer Height = 513 Width = 586 HelpKeyword = '/configuration.html#ConfigToolsViewer' ClientHeight = 513 ClientWidth = 586 DesignLeft = 384 DesignTop = 288 inherited lblToolsPath: TLabel Width = 145 end inherited cbToolsKeepTerminalOpen: TCheckBox Width = 297 end inherited cbToolsRunInTerminal: TCheckBox Width = 119 end inherited cbToolsUseExternalProgram: TCheckBox Width = 131 end object gbInternalViewer: TGroupBox[8] AnchorSideLeft.Control = fneToolsPath AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtToolsParameters AnchorSideRight.Side = asrBottom Left = 8 Height = 55 Top = 200 Width = 571 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 10 Caption = 'Internal viewer options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ClientHeight = 48 ClientWidth = 569 TabOrder = 5 object seNumberColumnsViewer: TSpinEdit AnchorSideLeft.Control = lblNumberColumnsViewer AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom Left = 211 Height = 23 Top = 6 Width = 50 BorderSpacing.Left = 12 BorderSpacing.Top = 5 MaxValue = 3 MinValue = 1 TabOrder = 0 Value = 1 end object lblNumberColumnsViewer: TLabel AnchorSideTop.Control = seNumberColumnsViewer AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 10 Width = 187 Caption = '&Number of columns in book viewer' FocusControl = seNumberColumnsViewer ParentColor = False end end inherited pmPathHelper: TPopupMenu[9] Left = 520 Top = 152 end end doublecmd-1.1.30/src/frames/foptionstoolbase.pas0000644000175000001440000001302515104114162020731 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Base options page for external tools (Viewer, Editor, Differ) Copyright (C) 2006-2015 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsToolBase; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, EditBtn, Buttons, Menus, fOptionsFrame, uGlobs; type { TfrmOptionsToolBase } TfrmOptionsToolBase = class(TOptionsEditor) btnRelativeToolPath: TSpeedButton; cbToolsKeepTerminalOpen: TCheckBox; cbToolsRunInTerminal: TCheckBox; cbToolsUseExternalProgram: TCheckBox; edtToolsParameters: TEdit; fneToolsPath: TFileNameEdit; lblToolsParameters: TLabel; lblToolsPath: TLabel; pmPathHelper: TPopupMenu; procedure btnRelativeToolPathClick(Sender: TObject); procedure cbToolsKeepTerminalOpenChange(Sender: TObject); procedure cbToolsRunInTerminalChange(Sender: TObject); procedure cbToolsUseExternalProgramChange(Sender: TObject); procedure edtToolsParametersChange(Sender: TObject); procedure fneToolsPathAcceptFileName(Sender: TObject; var Value: String); procedure fneToolsPathChange(Sender: TObject); private FExternalTool: TExternalTool; FExternalToolOptions: TExternalToolOptions; FOnUseExternalProgramChange: TNotifyEvent; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; property ExternalTool: TExternalTool read FExternalTool write FExternalTool; property OnUseExternalProgramChange: TNotifyEvent read FOnUseExternalProgramChange write FOnUseExternalProgramChange; public constructor Create(TheOwner: TComponent); override; end; implementation {$R *.lfm} uses uDCUtils, uSpecialDir; { TfrmOptionsToolBase } procedure TfrmOptionsToolBase.cbToolsKeepTerminalOpenChange(Sender: TObject); begin FExternalToolOptions.KeepTerminalOpen := cbToolsKeepTerminalOpen.Checked; end; procedure TfrmOptionsToolBase.btnRelativeToolPathClick(Sender: TObject); begin fneToolsPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneToolsPath,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolBase.cbToolsRunInTerminalChange(Sender: TObject); begin cbToolsKeepTerminalOpen.Enabled := cbToolsRunInTerminal.Checked; FExternalToolOptions.RunInTerminal := cbToolsRunInTerminal.Checked; end; procedure TfrmOptionsToolBase.cbToolsUseExternalProgramChange(Sender: TObject); begin lblToolsPath.Enabled := cbToolsUseExternalProgram.Checked; fneToolsPath.Enabled := cbToolsUseExternalProgram.Checked; btnRelativeToolPath.Enabled := cbToolsUseExternalProgram.Checked; lblToolsParameters.Enabled := cbToolsUseExternalProgram.Checked; edtToolsParameters.Enabled := cbToolsUseExternalProgram.Checked; cbToolsRunInTerminal.Enabled := cbToolsUseExternalProgram.Checked; cbToolsKeepTerminalOpen.Enabled := cbToolsUseExternalProgram.Checked; FExternalToolOptions.Enabled := cbToolsUseExternalProgram.Checked; if Assigned(FOnUseExternalProgramChange) then FOnUseExternalProgramChange(Self); end; procedure TfrmOptionsToolBase.edtToolsParametersChange(Sender: TObject); begin FExternalToolOptions.Parameters := edtToolsParameters.Text; end; procedure TfrmOptionsToolBase.fneToolsPathAcceptFileName(Sender: TObject; var Value: String); begin Value := SetCmdDirAsEnvVar(Value); {$IF DEFINED(LCLCARBON)} // OnChange don't called under Carbon when choose file name // from open dialog so assign path in this event. FExternalToolOptions.Path := Value; {$ENDIF} end; procedure TfrmOptionsToolBase.fneToolsPathChange(Sender: TObject); begin FExternalToolOptions.Path := fneToolsPath.FileName; end; procedure TfrmOptionsToolBase.Init; begin // Enable/disable tools controls. cbToolsUseExternalProgramChange(nil); end; procedure TfrmOptionsToolBase.Load; begin FExternalToolOptions := gExternalTools[FExternalTool]; cbToolsUseExternalProgram.Checked := FExternalToolOptions.Enabled; fneToolsPath.FileName := FExternalToolOptions.Path; edtToolsParameters.Text := FExternalToolOptions.Parameters; cbToolsRunInTerminal.Checked := FExternalToolOptions.RunInTerminal; cbToolsKeepTerminalOpen.Checked := FExternalToolOptions.KeepTerminalOpen; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; function TfrmOptionsToolBase.Save: TOptionsEditorSaveFlags; begin gExternalTools[FExternalTool] := FExternalToolOptions; Result := []; end; constructor TfrmOptionsToolBase.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FOnUseExternalProgramChange := nil; end; end. doublecmd-1.1.30/src/frames/foptionstoolbase.lrj0000644000175000001440000000274715104114162020746 0ustar alexxusers{"version":1,"strings":[ {"hash":80679221,"name":"tfrmoptionstoolbase.lbltoolspath.caption","sourcebytes":[38,80,97,116,104,32,116,111,32,112,114,111,103,114,97,109,32,116,111,32,101,120,101,99,117,116,101],"value":"&Path to program to execute"}, {"hash":215293683,"name":"tfrmoptionstoolbase.lbltoolsparameters.caption","sourcebytes":[65,38,100,100,105,116,105,111,110,97,108,32,112,97,114,97,109,101,116,101,114,115],"value":"A&dditional parameters"}, {"hash":177722141,"name":"tfrmoptionstoolbase.cbtoolskeepterminalopen.caption","sourcebytes":[38,75,101,101,112,32,116,101,114,109,105,110,97,108,32,119,105,110,100,111,119,32,111,112,101,110,32,97,102,116,101,114,32,101,120,101,99,117,116,105,110,103,32,112,114,111,103,114,97,109],"value":"&Keep terminal window open after executing program"}, {"hash":118910428,"name":"tfrmoptionstoolbase.cbtoolsruninterminal.caption","sourcebytes":[38,69,120,101,99,117,116,101,32,105,110,32,116,101,114,109,105,110,97,108],"value":"&Execute in terminal"}, {"hash":26702445,"name":"tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption","sourcebytes":[38,85,115,101,32,101,120,116,101,114,110,97,108,32,112,114,111,103,114,97,109],"value":"&Use external program"}, {"hash":15252584,"name":"tfrmoptionstoolbase.btnrelativetoolpath.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"} ]} doublecmd-1.1.30/src/frames/foptionstoolbase.lfm0000644000175000001440000001340415104114162020725 0ustar alexxusersinherited frmOptionsToolBase: TfrmOptionsToolBase Height = 265 Width = 589 Anchors = [akTop] ClientHeight = 265 ClientWidth = 589 DesignLeft = 382 DesignTop = 371 object edtToolsParameters: TEdit[0] AnchorSideLeft.Control = lblToolsParameters AnchorSideTop.Control = lblToolsParameters AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeToolPath AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 113 Width = 571 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 OnChange = edtToolsParametersChange TabOrder = 2 end object fneToolsPath: TFileNameEdit[1] AnchorSideLeft.Control = lblToolsPath AnchorSideTop.Control = lblToolsPath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeToolPath Left = 8 Height = 23 Top = 61 Width = 547 OnAcceptFileName = fneToolsPathAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 1 OnChange = fneToolsPathChange end object lblToolsPath: TLabel[2] AnchorSideLeft.Control = cbToolsUseExternalProgram AnchorSideTop.Control = cbToolsUseExternalProgram AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 42 Width = 144 BorderSpacing.Top = 15 Caption = '&Path to program to execute' FocusControl = fneToolsPath ParentColor = False end object lblToolsParameters: TLabel[3] AnchorSideLeft.Control = cbToolsUseExternalProgram AnchorSideTop.Control = fneToolsPath AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 94 Width = 117 BorderSpacing.Top = 10 Caption = 'A&dditional parameters' FocusControl = edtToolsParameters ParentColor = False end object cbToolsKeepTerminalOpen: TCheckBox[4] AnchorSideLeft.Control = cbToolsRunInTerminal AnchorSideTop.Control = cbToolsRunInTerminal AnchorSideTop.Side = asrBottom Left = 23 Height = 19 Top = 169 Width = 298 BorderSpacing.Left = 15 BorderSpacing.Top = 2 Caption = '&Keep terminal window open after executing program' OnChange = cbToolsKeepTerminalOpenChange TabOrder = 4 end object cbToolsRunInTerminal: TCheckBox[5] AnchorSideLeft.Control = edtToolsParameters AnchorSideTop.Control = edtToolsParameters AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 148 Width = 120 BorderSpacing.Top = 12 Caption = '&Execute in terminal' OnChange = cbToolsRunInTerminalChange TabOrder = 3 end object cbToolsUseExternalProgram: TCheckBox[6] Left = 8 Height = 19 Top = 8 Width = 132 BorderSpacing.Top = 12 Caption = '&Use external program' OnChange = cbToolsUseExternalProgramChange TabOrder = 0 end object btnRelativeToolPath: TSpeedButton[7] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneToolsPath AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneToolsPath AnchorSideBottom.Side = asrBottom Left = 555 Height = 23 Hint = 'Some functions to select appropriate path' Top = 61 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeToolPathClick end object pmPathHelper: TPopupMenu[8] left = 544 top = 88 end end doublecmd-1.1.30/src/frames/foptionstoolbarmiddle.pas0000644000175000001440000000553015104114162021744 0ustar alexxusersunit fOptionsToolbarMiddle; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, fOptionsFrame, fOptionsToolbarBase; type { TfrmOptionsToolbarMiddle } TfrmOptionsToolbarMiddle = class(TfrmOptionsToolbarBase) private protected procedure Load; override; class function GetNode: String; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses KASToolBar, DCXmlConfig, uGlobs, uGlobsPaths, uSpecialDir, uLng; { TfrmOptionsToolbarMiddle } procedure TfrmOptionsToolbarMiddle.Load; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin trbBarSize.Position := gMiddleToolBarButtonSize div 2; trbIconSize.Position := gMiddleToolBarIconSize div 2; cbFlatButtons.Checked := gMiddleToolBarFlat; cbShowCaptions.Checked := gMiddleToolBarShowCaptions; cbReportErrorWithCommands.Checked := gMiddleToolbarReportErrorWithCommands; lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2); lblIconSizeValue.Caption := IntToStr(trbIconSize.Position*2); FCurrentButton := nil; CloseToolbarsBelowCurrentButton; ToolBar := GetTopToolbar; ToolBarNode := gConfig.FindNode(gConfig.RootNode, GetNode, False); LoadToolbar(ToolBar, gConfig, ToolBarNode, tocl_FlushCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); FUpdateHotKey := False; end; class function TfrmOptionsToolbarMiddle.GetNode: String; begin Result:= 'Toolbars/MiddleToolbar'; end; function TfrmOptionsToolbarMiddle.Save: TOptionsEditorSaveFlags; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin ApplyEditControls; gMiddleToolBarFlat := cbFlatButtons.Checked; gMiddleToolBarShowCaptions := cbShowCaptions.Checked; gMiddleToolbarReportErrorWithCommands := cbReportErrorWithCommands.Checked; gMiddleToolBarButtonSize := trbBarSize.Position * 2; gMiddleToolBarIconSize := trbIconSize.Position * 2; ToolBar := GetTopToolbar; if Assigned(ToolBar) then begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, GetNode, True); gConfig.ClearNode(ToolBarNode); Toolbar.SaveConfiguration(gConfig, ToolBarNode); end; if FUpdateHotKey then begin FUpdateHotKey := False; HotMan.Save(gpCfgDir + gNameSCFile); end; Result := []; end; constructor TfrmOptionsToolbarMiddle.Create(TheOwner: TComponent); begin inherited Create(TheOwner); Name := 'frmOptionsToolbarMiddle'; end; class function TfrmOptionsToolbarMiddle.GetTitle: String; begin Result:= rsOptionsEditorToolbarMiddle; end; end. doublecmd-1.1.30/src/frames/foptionstoolbarmiddle.lfm0000644000175000001440000000016715104114162021740 0ustar alexxusersinherited frmOptionsToolbarMiddle: TfrmOptionsToolbarMiddle HelpKeyword = '/configuration.html#ConfigToolbar' end doublecmd-1.1.30/src/frames/foptionstoolbarextra.pas0000644000175000001440000001176615104114162021641 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Toolbar configuration for extra options page Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsToolbarExtra; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus, EditBtn, //DC fOptionsFrame; type { TfrmOptionsToolbarExtra } TfrmOptionsToolbarExtra = class(TOptionsEditor) btnPathToBeRelativeToAll: TButton; btnPathToBeRelativeToHelper: TSpeedButton; cbToolbarFilenameStyle: TComboBox; ckbToolbarIcons: TCheckBox; ckbToolbarCommand: TCheckBox; ckbToolbarStartPath: TCheckBox; dePathToBeRelativeTo: TDirectoryEdit; gbToolbarOptionsExtra: TGroupBox; lblApplySettingsFor: TLabel; lbPathToBeRelativeTo: TLabel; lbToolbarFilenameStyle: TLabel; pmPathToBeRelativeToHelper: TPopupMenu; procedure btnPathToBeRelativeToAllClick(Sender: TObject); procedure btnPathToBeRelativeToHelperClick(Sender: TObject); procedure cbToolbarFilenameStyleChange(Sender: TObject); private protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC uGlobs, uLng, DCStrUtils, fOptions, fOptionsToolbar, uSpecialDir; procedure TfrmOptionsToolbarExtra.Init; begin ParseLineToList(rsPluginFilenameStyleList, cbToolbarFilenameStyle.Items); end; procedure TfrmOptionsToolbarExtra.Load; begin cbToolbarFilenameStyle.ItemIndex := integer(gToolbarFilenameStyle); cbToolbarFilenameStyleChange(cbToolbarFilenameStyle); dePathToBeRelativeTo.Text := gToolbarPathToBeRelativeTo; ckbToolbarIcons.Checked := tpmeIcon in gToolbarPathModifierElements; ckbToolbarCommand.Checked := tpmeCommand in gToolbarPathModifierElements; ckbToolbarStartPath.Checked := tpmeStartingPath in gToolbarPathModifierElements; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; function TfrmOptionsToolbarExtra.Save: TOptionsEditorSaveFlags; begin gToolbarFilenameStyle := TConfigFilenameStyle(cbToolbarFilenameStyle.ItemIndex); gToolbarPathToBeRelativeTo := dePathToBeRelativeTo.Text; gToolbarPathModifierElements := []; if ckbToolbarIcons.Checked then gToolbarPathModifierElements := gToolbarPathModifierElements + [tpmeIcon]; if ckbToolbarCommand.Checked then gToolbarPathModifierElements := gToolbarPathModifierElements + [tpmeCommand]; if ckbToolbarStartPath.Checked then gToolbarPathModifierElements := gToolbarPathModifierElements + [tpmeStartingPath]; Result := []; end; class function TfrmOptionsToolbarExtra.GetIconIndex: integer; begin Result := 32; end; class function TfrmOptionsToolbarExtra.GetTitle: string; begin Result := rsOptionsEditorToolbarExtra; end; procedure TfrmOptionsToolbarExtra.cbToolbarFilenameStyleChange(Sender: TObject); begin lbPathToBeRelativeTo.Visible := (TConfigFilenameStyle(cbToolbarFilenameStyle.ItemIndex) = TConfigFilenameStyle.pfsRelativeToFollowingPath); dePathToBeRelativeTo.Visible := lbPathToBeRelativeTo.Visible; btnPathToBeRelativeToHelper.Visible := lbPathToBeRelativeTo.Visible; end; procedure TfrmOptionsToolbarExtra.btnPathToBeRelativeToAllClick(Sender: TObject); var Options: IOptionsDialog; Editor: TOptionsEditor; begin Self.SaveSettings; //Call "SaveSettings" instead of just "Save" to get option signature set right away do we don't bother user for that page when close. Options := ShowOptions(TfrmOptionsToolbar); Editor := Options.GetEditor(TfrmOptionsToolbar); TfrmOptionsToolbar(Editor).ScanToolbarForFilenameAndPath(TfrmOptionsToolbar(Editor).TopToolbar); TfrmOptionsToolbar(Editor).RefrechCurrentButton; ShowOptions(TfrmOptionsToolbar); end; procedure TfrmOptionsToolbarExtra.btnPathToBeRelativeToHelperClick(Sender: TObject); begin dePathToBeRelativeTo.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(dePathToBeRelativeTo, pfPATH); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end. doublecmd-1.1.30/src/frames/foptionstoolbarextra.lrj0000644000175000001440000000363715104114162021643 0ustar alexxusers{"version":1,"strings":[ {"hash":5671667,"name":"tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption","sourcebytes":[80,97,116,104,115],"value":"Paths"}, {"hash":75021338,"name":"tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption","sourcebytes":[87,97,121,32,116,111,32,115,101,116,32,112,97,116,104,115,32,119,104,101,110,32,97,100,100,105,110,103,32,101,108,101,109,101,110,116,115,32,102,111,114,32,105,99,111,110,115,44,32,99,111,109,109,97,110,100,115,32,97,110,100,32,115,116,97,114,116,105,110,103,32,112,97,116,104,115,58],"value":"Way to set paths when adding elements for icons, commands and starting paths:"}, {"hash":256553386,"name":"tfrmoptionstoolbarextra.lbpathtoberelativeto.caption","sourcebytes":[80,97,116,104,32,116,111,32,98,101,32,114,101,108,97,116,105,118,101,32,116,111,58],"value":"Path to be relative to:"}, {"hash":163913811,"name":"tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption","sourcebytes":[65,112,112,108,121,32,99,117,114,114,101,110,116,32,115,101,116,116,105,110,103,115,32,116,111,32,97,108,108,32,99,111,110,102,105,103,117,114,101,100,32,102,105,108,101,110,97,109,101,115,32,97,110,100,32,112,97,116,104,115],"value":"Apply current settings to all configured filenames and paths"}, {"hash":5219923,"name":"tfrmoptionstoolbarextra.ckbtoolbaricons.caption","sourcebytes":[73,99,111,110,115],"value":"Icons"}, {"hash":47274650,"name":"tfrmoptionstoolbarextra.lblapplysettingsfor.caption","sourcebytes":[68,111,32,116,104,105,115,32,102,111,114,32,102,105,108,101,115,32,97,110,100,32,112,97,116,104,115,32,102,111,114,58],"value":"Do this for files and paths for:"}, {"hash":105086995,"name":"tfrmoptionstoolbarextra.ckbtoolbarcommand.caption","sourcebytes":[67,111,109,109,97,110,100,115],"value":"Commands"}, {"hash":67051795,"name":"tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption","sourcebytes":[83,116,97,114,116,105,110,103,32,112,97,116,104,115],"value":"Starting paths"} ]} doublecmd-1.1.30/src/frames/foptionstoolbarextra.lfm0000644000175000001440000001674015104114162021631 0ustar alexxusersinherited frmOptionsToolbarExtra: TfrmOptionsToolbarExtra Height = 573 Width = 850 HelpKeyword = '/configuration.html#ConfigToolbarEx' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 573 ClientWidth = 850 DesignLeft = 221 DesignTop = 229 object gbToolbarOptionsExtra: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 161 Top = 6 Width = 838 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Paths' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 6 ClientHeight = 141 ClientWidth = 834 TabOrder = 0 object lbToolbarFilenameStyle: TLabel AnchorSideLeft.Control = gbToolbarOptionsExtra AnchorSideTop.Control = gbToolbarOptionsExtra Left = 6 Height = 15 Top = 6 Width = 426 Caption = 'Way to set paths when adding elements for icons, commands and starting paths:' ParentColor = False end object cbToolbarFilenameStyle: TComboBox AnchorSideLeft.Control = lbToolbarFilenameStyle AnchorSideTop.Control = lbToolbarFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbToolbarOptionsExtra AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 27 Width = 822 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 OnChange = cbToolbarFilenameStyleChange Style = csDropDownList TabOrder = 0 end object btnPathToBeRelativeToHelper: TSpeedButton AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideRight.Control = cbToolbarFilenameStyle AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = dePathToBeRelativeTo AnchorSideBottom.Side = asrBottom Left = 805 Height = 23 Top = 56 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnPathToBeRelativeToHelperClick end object dePathToBeRelativeTo: TDirectoryEdit AnchorSideLeft.Control = lbPathToBeRelativeTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbToolbarFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnPathToBeRelativeToHelper Left = 120 Height = 23 Top = 56 Width = 683 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 1 MaxLength = 0 TabOrder = 1 end object lbPathToBeRelativeTo: TLabel AnchorSideLeft.Control = lbToolbarFilenameStyle AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 60 Width = 112 Caption = 'Path to be relative to:' ParentColor = False end object btnPathToBeRelativeToAll: TButton AnchorSideLeft.Control = lbToolbarFilenameStyle AnchorSideTop.Control = ckbToolbarIcons AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 110 Width = 341 AutoSize = True Caption = 'Apply current settings to all configured filenames and paths' OnClick = btnPathToBeRelativeToAllClick TabOrder = 2 end object ckbToolbarIcons: TCheckBox AnchorSideLeft.Control = lblApplySettingsFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 167 Height = 19 Top = 85 Width = 48 BorderSpacing.Left = 6 Caption = 'Icons' TabOrder = 3 end object lblApplySettingsFor: TLabel AnchorSideLeft.Control = lbToolbarFilenameStyle AnchorSideTop.Control = ckbToolbarIcons AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 87 Width = 155 Caption = 'Do this for files and paths for:' ParentColor = False end object ckbToolbarCommand: TCheckBox AnchorSideLeft.Control = ckbToolbarIcons AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 221 Height = 19 Top = 85 Width = 82 BorderSpacing.Left = 6 Caption = 'Commands' TabOrder = 4 end object ckbToolbarStartPath: TCheckBox AnchorSideLeft.Control = ckbToolbarCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 309 Height = 19 Top = 85 Width = 93 BorderSpacing.Left = 6 Caption = 'Starting paths' TabOrder = 5 end end object pmPathToBeRelativeToHelper: TPopupMenu[1] left = 568 top = 112 end end doublecmd-1.1.30/src/frames/foptionstoolbarbase.pas0000644000175000001440000021556115104114162021427 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Toolbar configuration options page Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsToolbarBase; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus, //DC uGlobs, fOptionsFrame, KASToolBar, KASToolItems, uFormCommands, uHotkeyManager, DCBasicTypes, fOptionsHotkeysEditHotkey, DCXmlConfig; type { TfrmOptionsToolbarBase } TfrmOptionsToolbarBase = class(TOptionsEditor) btnInsertButton: TButton; btnCloneButton: TButton; btnDeleteButton: TButton; btnParametersHelper: TSpeedButton; btnInternalParametersHelper: TSpeedButton; btnSuggestionTooltip: TButton; btnOpenFile: TButton; btnEditHotkey: TButton; btnOpenCmdDlg: TButton; btnRelativeStartPath: TSpeedButton; btnStartPath: TButton; btnRelativeIconFileName: TSpeedButton; btnRemoveHotkey: TButton; cbInternalCommand: TComboBox; cbFlatButtons: TCheckBox; cbShowCaptions: TCheckBox; edtExternalParameters: TEdit; edtExternalCommand: TEdit; lblStyle: TLabel; lblHelpOnInternalCommand: TLabel; lblHotkeyValue: TLabel; edtStartPath: TEdit; edtToolTip: TEdit; gbGroupBox: TGroupBox; edtIconFileName: TEdit; lblInternalParameters: TLabel; lblBarSize: TLabel; lblBarSizeValue: TLabel; lblInternalCommand: TLabel; lblExternalCommand: TLabel; lblHotkey: TLabel; lblIconFile: TLabel; lblIconSize: TLabel; lblIconSizeValue: TLabel; lblExternalParameters: TLabel; lblStartPath: TLabel; lblToolTip: TLabel; edtInternalParameters: TMemo; miSrcRplIconNames: TMenuItem; miSrcRplCommands: TMenuItem; miSrcRplParameters: TMenuItem; miSrcRplStartPath: TMenuItem; miSrcRplClickSeparator: TMenuItem; miSrcRplAllOfAll: TMenuItem; miSearchAndReplace: TMenuItem; miExportCurrent: TMenuItem; miImportAllDCCommands: TMenuItem; miAddSeparatorSubMenu: TMenuItem; miExternalCommandFirstElement: TMenuItem; miSubToolBarFirstElement: TMenuItem; miInternalCommandPriorCurrent: TMenuItem; miExternalCommandPriorCurrent: TMenuItem; miSubToolBarPriorCurrent: TMenuItem; miInternalCommandAfterCurrent: TMenuItem; miExternalCommandAfterCurrent: TMenuItem; miSubToolBarAfterCurrent: TMenuItem; miInternalCommandLastElement: TMenuItem; miExternalCommandLastElement: TMenuItem; miAddInternalCommandSubMenu: TMenuItem; miSubToolBarLastElement: TMenuItem; miAddExternalCommandSubMenu: TMenuItem; miAddSubToolBarSubMenu: TMenuItem; miSeparatorFirstItem: TMenuItem; miSeparatorPriorCurrent: TMenuItem; miSeparatorAfterCurrent: TMenuItem; miSeparatorLastElement: TMenuItem; miInternalCommandFirstElement: TMenuItem; OpenDialog: TOpenDialog; pmPathHelper: TPopupMenu; pnlEditControls: TPanel; pnlFullToolbarButtons: TPanel; pnlEditToolbar: TPanel; pnlToolbarButtons: TPanel; pmInsertButtonMenu: TPopupMenu; rbSeparator: TRadioButton; rbSpace: TRadioButton; ReplaceDialog: TReplaceDialog; rgToolItemType: TRadioGroup; btnOpenIcon: TSpeedButton; pnToolbars: TPanel; btnRelativeExternalCommand: TSpeedButton; trbBarSize: TTrackBar; trbIconSize: TTrackBar; miImportSeparator: TMenuItem; SaveDialog: TSaveDialog; cbReportErrorWithCommands: TCheckBox; btnOther: TButton; pmOtherClickToolbar: TPopupMenu; miAddAllCmds: TMenuItem; miSeparator1: TMenuItem; miExport: TMenuItem; miExportTop: TMenuItem; miExportTopToDCBar: TMenuItem; miExportSeparator1: TMenuItem; miExportTopToTCIniKeep: TMenuItem; miExportTopToTCIniNoKeep: TMenuItem; miExportSeparator2: TMenuItem; miExportTopToTCBarKeep: TMenuItem; miExportTopToTCBarNoKeep: TMenuItem; miExportCurrentToDCBar: TMenuItem; miExportSeparator3: TMenuItem; miExportCurrentToTCIniKeep: TMenuItem; miExportCurrentToTCIniNoKeep: TMenuItem; miExportSeparator4: TMenuItem; miExportCurrentToTCBarKeep: TMenuItem; miExportCurrentToTCBarNoKeep: TMenuItem; miImport: TMenuItem; miImportDCBAR: TMenuItem; miImportDCBARReplaceTop: TMenuItem; miSeparator8: TMenuItem; miImportDCBARAddTop: TMenuItem; miImportDCBARAddMenuTop: TMenuItem; miSeparator9: TMenuItem; miImportDCBARAddCurrent: TMenuItem; miImportDCBARAddMenuCurrent: TMenuItem; miImportSeparator2: TMenuItem; miImportTCINI: TMenuItem; miImportTCINIReplaceTop: TMenuItem; miSeparator6: TMenuItem; miImportTCINIAddTop: TMenuItem; miImportTCINIAddMenuTop: TMenuItem; miSeparator7: TMenuItem; miImportTCINIAddCurrent: TMenuItem; miImportTCINIAddMenuCurrent: TMenuItem; miImportTCBAR: TMenuItem; miImportTCBARReplaceTop: TMenuItem; miSeparator10: TMenuItem; miImportTCBARAddTop: TMenuItem; miImportTCBARAddMenuTop: TMenuItem; miSeparator11: TMenuItem; miImportTCBARAddCurrent: TMenuItem; miImportTCBARAddMenuCurrent: TMenuItem; miSeparator2: TMenuItem; miBackup: TMenuItem; miExportTopToBackup: TMenuItem; miImportBackup: TMenuItem; miImportBackupReplaceTop: TMenuItem; miSeparator13: TMenuItem; miImportBackupAddTop: TMenuItem; miImportBackupAddMenuTop: TMenuItem; miSeparator14: TMenuItem; miImportBackupAddCurrent: TMenuItem; miImportBackupAddMenuCurrent: TMenuItem; procedure btnEditHotkeyClick(Sender: TObject); procedure btnInsertButtonClick(Sender: TObject); procedure btnInternalParametersHelperClick(Sender: TObject); procedure btnOpenCmdDlgClick(Sender: TObject); procedure btnParametersHelperClick(Sender: TObject); procedure btnRelativeExternalCommandClick(Sender: TObject); procedure btnRelativeIconFileNameClick(Sender: TObject); procedure btnRelativeStartPathClick(Sender: TObject); procedure btnRemoveHotKeyClick(Sender: TObject); procedure btnCloneButtonClick(Sender: TObject); procedure btnDeleteButtonClick(Sender: TObject); procedure btnOpenFileClick(Sender: TObject); procedure btnStartPathClick(Sender: TObject); procedure btnSuggestionTooltipClick(Sender: TObject); procedure cbInternalCommandSelect(Sender: TObject); procedure cbFlatButtonsChange(Sender: TObject); procedure edtIconFileNameChange(Sender: TObject); procedure lblHelpOnInternalCommandClick(Sender: TObject); procedure miAddAllCmdsClick(Sender: TObject); procedure miInsertButtonClick(Sender: TObject); procedure miSrcRplClick(Sender: TObject); procedure ToolbarDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean); procedure ToolbarDragDrop(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer); function ToolbarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; function ToolbarLoadButtonOverlay(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; procedure ToolbarToolButtonClick(Sender: TObject); procedure ToolbarToolButtonDragDrop(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer); procedure ToolbarToolButtonDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean; {%H-}NumberOfButton: Integer); procedure ToolbarToolButtonMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure ToolbarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer); procedure ToolbarToolButtonMouseUp(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); procedure btnOpenIconClick(Sender: TObject); function ToolbarToolItemShortcutsHint(Sender: TObject; ToolItem: TKASNormalItem): String; procedure rgToolItemTypeSelectionChanged(Sender: TObject); procedure trbBarSizeChange(Sender: TObject); procedure trbIconSizeChange(Sender: TObject); procedure FrameEnter(Sender: TObject); function ComputeToolbarsSignature(Seed:dword=$00000000): dword; procedure btnOtherClick(Sender: TObject); procedure miExportToAnythingClick(Sender: TObject); procedure miImportFromAnythingClick(Sender: TObject); protected FUpdateHotKey: Boolean; FCurrentButton: TKASToolButton; FEditForm: TfrmEditHotkey; FFormCommands: IFormCommands; FToolButtonMouseX, FToolButtonMouseY, FToolDragButtonNumber: Integer; // For dragging FUpdatingButtonType: Boolean; FUpdatingIconText: Boolean; bFirstTimeDrawn: boolean; function AddNewSubToolbar(ToolItem: TKASMenuItem; bIncludeButtonOnNewBar:boolean=True): TKASToolBar; procedure ApplyEditControls; procedure CloseToolbarsBelowCurrentButton; procedure CloseToolbar(Index: Integer); function CreateToolbar(Items: TKASToolBarItems): TKASToolBar; class function FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey; class function FindHotkey(NormalItem: TKASNormalItem): THotkey; function GetTopToolbar: TKASToolBar; procedure LoadCurrentButton; procedure LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode; ConfigurationLoadType: TTypeOfConfigurationLoad); procedure PressButtonDown(Button: TKASToolButton); procedure UpdateIcon(Icon: String); procedure DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram: boolean); class function GetNode: String; virtual; protected procedure Init; override; public property TopToolbar: TKASToolBar read GetTopToolbar; class function GetIconIndex: Integer; override; class function GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; function IsSignatureComputedFromAllWindowComponents: Boolean; override; function ExtraOptionsSignature(CurrentSignature:dword):dword; override; procedure SelectButton(ButtonNumber: Integer); procedure ScanToolbarForFilenameAndPath(Toolbar: TKASToolbar); procedure RefrechCurrentButton; end; function GetToolbarFilenameToSave(AToolbarPathModifierElement: tToolbarPathModifierElement; sParamFilename: string): string; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, crc, LazUTF8, LCLVersion, Toolwin, //DC {$IFDEF MSWINDOWS} uTotalCommander, {$ENDIF} uVariableMenuSupport, uComponentsSignature, fEditSearch, fMainCommandsDlg, uFileProcs, uDebug, DCOSUtils, uShowMsg, DCStrUtils, uLng, uOSForms, uDCUtils, uPixMapManager, uKASToolItemsExtended, fMain, uSpecialDir, dmHelpManager, uGlobsPaths; const cHotKeyCommand = 'cm_ExecuteToolbarItem'; { Constants used with export/import } MASK_ACTION_WITH_WHAT = $03; ACTION_WITH_WINCMDINI = $00; ACTION_WITH_TC_TOOLBARFILE = $01; ACTION_WITH_DC_TOOLBARFILE = $02; ACTION_WITH_BACKUP = $03; MASK_ACTION_TOOLBAR = $03; ACTION_WITH_MAIN_TOOLBAR = $0; IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR = $1; ACTION_WITH_CURRENT_BAR = $2; IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR = $3; MASK_FLUSHORNOT_EXISTING = $80; ACTION_FLUSH_EXISTING = $80; MASK_IMPORT_DESTIONATION = $30; { TfrmOptionsToolbarBase } class function TfrmOptionsToolbarBase.GetIconIndex: Integer; begin Result := 32; end; class function TfrmOptionsToolbarBase.GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; var Hotkey: THotkey; begin Hotkey := FindHotkey(NormalItem); if Assigned(Hotkey) then Result := Hotkey.Shortcuts else Result := nil; end; { TfrmOptionsToolbarBase.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsToolbarBase.IsSignatureComputedFromAllWindowComponents: Boolean; begin Result := False; end; { TfrmOptionsToolbarBase.ExtraOptionsSignature } function TfrmOptionsToolbarBase.ExtraOptionsSignature(CurrentSignature:dword):dword; begin Result := ComputeToolbarsSignature(CurrentSignature); Result := ComputeSignatureSingleComponent(trbBarSize, Result); Result := ComputeSignatureSingleComponent(trbIconSize, Result); Result := ComputeSignatureSingleComponent(cbFlatButtons, Result); Result := ComputeSignatureSingleComponent(cbReportErrorWithCommands, Result); end; function TfrmOptionsToolbarBase.GetTopToolbar: TKASToolBar; begin if pnToolbars.ControlCount > 0 then Result := pnToolbars.Controls[0] as TKASToolBar else Result := nil; end; procedure TfrmOptionsToolbarBase.Init; var ToolBar: TKASToolBar; begin bFirstTimeDrawn := True; FFormCommands := frmMain as IFormCommands; FFormCommands.GetCommandsList(cbInternalCommand.Items); cbInternalCommand.Sorted := True; FUpdatingButtonType := True; ParseLineToList(rsOptToolbarButtonType, rgToolItemType.Items); OpenDialog.Filter := ParseLineToFileFilter([rsFilterToolbarFiles, '*.toolbar', rsFilterXmlConfigFiles, '*.xml', rsFilterTCToolbarFiles, '*.BAR', rsFilterAnyFiles, AllFilesMask]); SaveDialog.Filter := ParseLineToFileFilter([rsFilterToolbarFiles, '*.toolbar', rsFilterTCToolbarFiles, '*.BAR', rsFilterAnyFiles, AllFilesMask]); FUpdatingButtonType := False; FToolDragButtonNumber := -1; {$IF LCL_FULLVERSION >= 093100} rgToolItemType.OnSelectionChanged := @rgToolItemTypeSelectionChanged; {$ELSE} rgToolItemType.OnClick := @rgToolItemTypeSelectionChanged; {$ENDIF} ToolBar := CreateToolbar(nil); if Assigned(ToolBar) then // Put first one on top so that any other toolbars // created before Show are put below it. ToolBar.Top := 0; {$IFNDEF MSWINDOWS} miExportSeparator1.free; miExportTopToTCIniKeep.free; miExportTopToTCIniNoKeep.free; miExportSeparator2.free; miExportTopToTCBarKeep.free; miExportTopToTCBarNoKeep.free; miExportSeparator3.free; miExportCurrentToTCIniKeep.free; miExportCurrentToTCIniNoKeep.free; miExportSeparator4.free; miExportCurrentToTCBarKeep.free; miExportCurrentToTCBarNoKeep.free; miImportSeparator.free; miImportTCINI.free; miImportTCBAR.free; {$ENDIF} end; procedure TfrmOptionsToolbarBase.LoadCurrentButton; var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; EnableNormal, EnableCommand, EnableProgram: Boolean; ButtonTypeIndex: Integer = -1; ShortcutsHint: String; begin EnableNormal := False; EnableCommand := False; EnableProgram := False; DisableAutoSizing; try CloseToolbarsBelowCurrentButton; if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASSeparatorItem then begin ButtonTypeIndex := 0; if TKASSeparatorItem(ToolItem).Style then rbSpace.Checked := True else rbSeparator.Checked := True; end; if ToolItem is TKASNormalItem then begin EnableNormal := True; NormalItem := TKASNormalItem(ToolItem); FUpdatingIconText := True; edtIconFileName.Text := NormalItem.Icon; FUpdatingIconText := False; edtToolTip.Text:=StringReplace(NormalItem.Hint, #$0A, '\n', [rfReplaceAll]); ShortcutsHint := NormalItem.GetShortcutsHint; if ShortcutsHint = '' then lblHotkeyValue.Caption := rsOptHotkeysNoHotkey else lblHotkeyValue.Caption := ShortcutsHint; btnRemoveHotkey.Enabled := ShortcutsHint <> ''; end; if ToolItem is TKASCommandItem then begin ButtonTypeIndex := 1; EnableCommand := True; CommandItem := TKASCommandItem(ToolItem); cbInternalCommand.Text := CommandItem.Command; SetStringsFromArray(edtInternalParameters.Lines, CommandItem.Params); end; if ToolItem is TKASProgramItem then begin ButtonTypeIndex := 2; EnableProgram := True; ProgramItem := TKASProgramItem(ToolItem); edtExternalCommand.Text := ProgramItem.Command; edtExternalParameters.Text := ProgramItem.Params; edtStartPath.Text := ProgramItem.StartPath; end; if ToolItem is TKASMenuItem then begin ButtonTypeIndex := 3; AddNewSubToolbar(TKASMenuItem(ToolItem)); end; end; FUpdatingButtonType := True; rgToolItemType.ItemIndex := ButtonTypeIndex; FUpdatingButtonType := False; DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram); finally EnableAutoSizing; end; //Let's display the menuitem related with a subtoolbar only if current selected toolbar is a subtoolbar. miExportCurrent.Enabled := Assigned(FCurrentButton) and (FCurrentButton.ToolBar.Tag > 1); {$IFDEF MSWINDOWS} miImportTCINIAddCurrent.Enabled := miExportCurrent.Enabled; miImportTCINIAddMenuCurrent.Enabled := miExportCurrent.Enabled; miImportTCBARAddCurrent.Enabled := miExportCurrent.Enabled; miImportTCBARAddMenuCurrent.Enabled := miExportCurrent.Enabled; {$ENDIF} miImportDCBARAddCurrent.Enabled := miExportCurrent.Enabled; miImportDCBARAddMenuCurrent.Enabled := miExportCurrent.Enabled; miImportBackupAddCurrent.Enabled := miExportCurrent.Enabled; miImportBackupAddMenuCurrent.Enabled := miExportCurrent.Enabled; end; procedure TfrmOptionsToolbarBase.RefrechCurrentButton; begin LoadCurrentButton; end; procedure TfrmOptionsToolbarBase.DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram: boolean); begin lblIconFile.Visible := EnableNormal; edtIconFileName.Visible := EnableNormal; btnOpenIcon.Visible := EnableNormal; btnRelativeIconFileName.Visible := EnableNormal; lblToolTip.Visible := EnableNormal; edtToolTip.Visible := EnableNormal; btnSuggestionTooltip.Visible := EnableNormal; lblInternalCommand.Visible := EnableCommand; cbInternalCommand.Visible := EnableCommand; btnOpenCmdDlg.Visible := EnableCommand; lblHelpOnInternalCommand.Visible := EnableCommand; lblInternalParameters.Visible := EnableCommand; btnInternalParametersHelper.Visible := EnableCommand; edtInternalParameters.Visible := EnableCommand; lblExternalCommand.Visible := EnableProgram; edtExternalCommand.Visible := EnableProgram; lblExternalParameters.Visible := EnableProgram; edtExternalParameters.Visible := EnableProgram; btnParametersHelper.Visible := EnableProgram; lblStartPath.Visible := EnableProgram; edtStartPath.Visible := EnableProgram; btnOpenFile.Visible := EnableProgram; btnRelativeExternalCommand.Visible := EnableProgram; btnStartPath.Visible := EnableProgram; btnRelativeStartPath.Visible := EnableProgram; lblHotkey.Visible := EnableNormal; lblHotkeyValue.Visible := EnableNormal; btnEditHotkey.Visible := EnableNormal; btnRemoveHotkey.Visible := EnableNormal; btnCloneButton.Visible := Assigned(FCurrentButton); btnDeleteButton.Visible := Assigned(FCurrentButton); rgToolItemType.Visible := Assigned(FCurrentButton); lblStyle.Visible := not (EnableNormal or EnableCommand or EnableProgram); rbSeparator.Visible := lblStyle.Visible; rbSpace.Visible := lblStyle.Visible; end; class function TfrmOptionsToolbarBase.GetNode: String; begin Result:= 'Toolbars/MainToolbar'; end; procedure TfrmOptionsToolbarBase.LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode; ConfigurationLoadType: TTypeOfConfigurationLoad); var ToolBarLoader: TKASToolBarExtendedLoader; begin ToolBarLoader := TKASToolBarExtendedLoader.Create(FFormCommands); try if Assigned(RootNode) then ToolBar.LoadConfiguration(Config, RootNode, ToolBarLoader, ConfigurationLoadType); finally ToolBarLoader.Free; end; end; procedure TfrmOptionsToolbarBase.PressButtonDown(Button: TKASToolButton); begin FUpdatingButtonType := True; Button.Click; FUpdatingButtonType := False; end; procedure TfrmOptionsToolbarBase.rgToolItemTypeSelectionChanged(Sender: TObject); var ToolBar: TKASToolBar; ToolItem: TKASToolItem = nil; NewButton: TKASToolButton; begin if not FUpdatingButtonType and Assigned(FCurrentButton) then begin case rgToolItemType.ItemIndex of 0: ToolItem := TKASSeparatorItem.Create; 1: ToolItem := TKASCommandItem.Create(FFormCommands); 2: ToolItem := TKASProgramItem.Create; 3: ToolItem := TKASMenuItem.Create; end; if Assigned(ToolItem) then begin ToolBar := FCurrentButton.ToolBar; // Copy what you can from previous button type. ToolItem.Assign(FCurrentButton.ToolItem); NewButton := ToolBar.InsertButton(FCurrentButton, ToolItem); ToolBar.RemoveButton(FCurrentButton); FCurrentButton := NewButton; PressButtonDown(NewButton); end; end; end; procedure TfrmOptionsToolbarBase.btnOpenIconClick(Sender: TObject); var sFileName: String; begin sFileName := GetCmdDirFromEnvVar(edtIconFileName.Text); if ShowOpenIconDialog(Self, sFileName) then edtIconFileName.Text := GetToolbarFilenameToSave(tpmeIcon, sFileName); end; function TfrmOptionsToolbarBase.CreateToolbar(Items: TKASToolBarItems): TKASToolBar; begin Result := TKASToolBar.Create(pnToolbars); Result.AutoSize := True; Result.Anchors := [akTop, akLeft, akRight]; Result.Constraints.MinHeight := 24; Result.Flat := cbFlatButtons.Checked; Result.GlyphSize := trbIconSize.Position * 2; Result.RadioToolBar := True; Result.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2); Result.ShowDividerAsButton := True; Result.OnDragOver := @ToolbarDragOver; Result.OnDragDrop := @ToolbarDragDrop; Result.OnLoadButtonGlyph := @ToolbarLoadButtonGlyph; Result.OnToolButtonClick := @ToolbarToolButtonClick; Result.OnLoadButtonOverlay := @ToolbarLoadButtonOverlay; Result.OnToolButtonMouseDown := @ToolbarToolButtonMouseDown; Result.OnToolButtonMouseUp := @ToolbarToolButtonMouseUp; Result.OnToolButtonMouseMove := @ToolbarToolButtonMouseMove; Result.OnToolButtonDragDrop := @ToolbarToolButtonDragDrop; Result.OnToolButtonDragOver := @ToolbarToolButtonDragOver; Result.OnToolItemShortcutsHint := @ToolbarToolItemShortcutsHint; Result.BorderSpacing.Bottom := 2; Result.EdgeInner := esRaised; Result.EdgeOuter := esLowered; Result.EdgeBorders := [ebBottom]; Result.Top := MaxSmallInt; // So that it is put under all existing toolbars (because of Align=alTop). Result.UseItems(Items); Result.Parent := pnToolbars; Result.Tag := pnToolbars.ComponentCount; end; function TfrmOptionsToolbarBase.AddNewSubToolbar(ToolItem: TKASMenuItem; bIncludeButtonOnNewBar:boolean=True): TKASToolBar; begin Result := CreateToolbar(ToolItem.SubItems); if bIncludeButtonOnNewBar then if Result.ButtonCount = 0 then Result.AddButton(TKASCommandItem.Create(FFormCommands)); end; procedure TfrmOptionsToolbarBase.ApplyEditControls; var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; begin if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASSeparatorItem then begin TKASSeparatorItem(ToolItem).Style:= rbSpace.Checked; end; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); NormalItem.Icon := edtIconFileName.Text; NormalItem.Hint := StringReplace(edtToolTip.Text, '\n', #$0A, [rfReplaceAll]); NormalItem.Text := EmptyStr; end; if ToolItem is TKASCommandItem then begin CommandItem := TKASCommandItem(ToolItem); CommandItem.Command := cbInternalCommand.Text; CommandItem.Params := GetArrayFromStrings(edtInternalParameters.Lines); end; if ToolItem is TKASProgramItem then begin ProgramItem := TKASProgramItem(ToolItem); ProgramItem.Command := edtExternalCommand.Text; ProgramItem.Params := edtExternalParameters.Text; ProgramItem.StartPath := edtStartPath.Text; end; end; end; (*Add new button on tool bar*) procedure TfrmOptionsToolbarBase.btnInsertButtonClick(Sender: TObject); begin pmInsertButtonMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbarBase.btnInternalParametersHelperClick } procedure TfrmOptionsToolbarBase.btnInternalParametersHelperClick(Sender: TObject); begin BringPercentVariablePopupMenu(edtInternalParameters); end; { TfrmOptionsToolbarBase.btnParametersHelperClick } procedure TfrmOptionsToolbarBase.btnParametersHelperClick(Sender: TObject); begin BringPercentVariablePopupMenu(edtExternalParameters); end; { TfrmOptionsToolbarBase.btnOpenCmdDlgClick } procedure TfrmOptionsToolbarBase.btnOpenCmdDlgClick(Sender: TObject); var WantedCommand: String = ''; IndexMaybe:longint; begin if cbInternalCommand.ItemIndex=-1 then begin cbInternalCommand.ItemIndex:=0; cbInternalCommandSelect(cbInternalCommand); end; if ShowMainCommandDlgForm(cbInternalCommand.Items.Strings[cbInternalCommand.ItemIndex],WantedCommand) then begin IndexMaybe:=cbInternalCommand.Items.IndexOf(WantedCommand); if IndexMaybe<>-1 then begin cbInternalCommand.ItemIndex:=IndexMaybe; cbInternalCommandSelect(cbInternalCommand); end; end; end; procedure TfrmOptionsToolbarBase.miInsertButtonClick(Sender: TObject); var ToolBar: TKASToolBar; ToolItem: TKASToolItem = nil; WhereToAdd:longint; IndexWhereToAdd:longint; begin if Assigned(FCurrentButton) then begin ApplyEditControls; ToolBar := FCurrentButton.ToolBar; end else begin ToolBar := GetTopToolbar; end; if Assigned(ToolBar) then begin with Sender as TComponent do begin case ((tag shr 4) and $0F) of 1: ToolItem := TKASSeparatorItem.Create; 2: ToolItem := TKASCommandItem.Create(FFormCommands); 3: ToolItem := TKASProgramItem.Create; 4: ToolItem := TKASMenuItem.Create; end; WhereToAdd:=tag and $0F; end; IndexWhereToAdd:=0; if (ToolBar.ButtonCount=0) then IndexWhereToAdd:=-1; if (IndexWhereToAdd=0) AND (WhereToAdd=4) then IndexWhereToAdd:=-1; if Assigned(FCurrentButton) then begin if (IndexWhereToAdd=0) AND (WhereToAdd=3) AND (FCurrentButton.Tag=pred(ToolBar.ButtonCount)) then IndexWhereToAdd:=-1; if (IndexWhereToAdd=0) AND (WhereToAdd=3) then IndexWhereToAdd:=(FCurrentButton.Tag+1); if (IndexWhereToAdd=0) AND (WhereToAdd=2) then IndexWhereToAdd:=FCurrentButton.Tag; end; if IndexWhereToAdd=-1 then begin //We simply add the button at the end FCurrentButton := ToolBar.AddButton(ToolItem); end else begin //We add the button *after* the current selected button FCurrentButton := ToolBar.InsertButton(IndexWhereToAdd, ToolItem); end; PressButtonDown(FCurrentButton); //Let's speed up process if we can pre-open requester according to what was just inserted as new button with Sender as TComponent do begin case ((tag shr 4) and $0F) of 2: btnOpenCmdDlgClick(btnOpenCmdDlg); 3: btnOpenFileClick(btnOpenFile); end; end; end; end; { TfrmOptionsToolbarBase.miSrcRplClick } procedure TfrmOptionsToolbarBase.miSrcRplClick(Sender: TObject); const SaRMASK_ICON = $01; SaRMASK_COMMAND = $02; SaRMASK_PARAMS = $04; SaRMASK_STARTPATH = $08; var ActionDispatcher, NbOfReplacement:integer; sSearchText, sReplaceText:string; ReplaceFlags: TReplaceFlags; function ReplaceIfNecessary(sWorkingText:string):string; begin result := UTF8StringReplace(sWorkingText, sSearchText, sReplaceText, ReplaceFlags); if result<>sWorkingText then inc(NbOfReplacement); end; procedure PossiblyRecursiveSearchAndReplaceInThisButton(ToolItem: TKASToolItem); var IndexItem, IndexParam: integer; begin if ToolItem is TKASSeparatorItem then begin end; if ToolItem is TKASCommandItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASCommandItem(ToolItem).Icon:=ReplaceIfNecessary(TKASCommandItem(ToolItem).Icon); if (ActionDispatcher AND SaRMASK_PARAMS) <> 0 then for IndexParam:=0 to pred(length(TKASCommandItem(ToolItem).Params)) do TKASCommandItem(ToolItem).Params[IndexParam]:=ReplaceIfNecessary(TKASCommandItem(ToolItem).Params[IndexParam]); end; if ToolItem is TKASProgramItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASProgramItem(ToolItem).Icon:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Icon); if (ActionDispatcher AND SaRMASK_COMMAND) <> 0 then TKASProgramItem(ToolItem).Command:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Command); if (ActionDispatcher AND SaRMASK_STARTPATH) <> 0 then TKASProgramItem(ToolItem).StartPath:=ReplaceIfNecessary(TKASProgramItem(ToolItem).StartPath); if (ActionDispatcher AND SaRMASK_PARAMS) <> 0 then TKASProgramItem(ToolItem).Params:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Params); end; if ToolItem is TKASMenuItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASMenuItem(ToolItem).Icon:=ReplaceIfNecessary(TKASMenuItem(ToolItem).Icon); for IndexItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do PossiblyRecursiveSearchAndReplaceInThisButton(TKASMenuItem(ToolItem).SubItems[IndexItem]); end; end; var //Placed intentionnally *AFTER* above routine to make sure these variable names are not used in above possibly recursive routines. IndexButton: integer; Toolbar: TKASToolbar; EditSearchOptionToOffer: TEditSearchDialogOption = []; EditSearchOptionReturned: TEditSearchDialogOption = []; CaseSensitive: array[Boolean] of TEditSearchDialogOption = ([eswoCaseSensitiveUnchecked], [eswoCaseSensitiveChecked]); begin with Sender as TComponent do ActionDispatcher:=tag; ApplyEditControls; Application.ProcessMessages; if ((ActionDispatcher AND SaRMASK_ICON) <>0) AND (edtIconFileName.Visible) AND (edtIconFileName.Text<>'') then sSearchText:=edtIconFileName.Text else if ((ActionDispatcher AND SaRMASK_COMMAND) <>0) AND (edtExternalCommand.Visible) AND (edtExternalCommand.Text<>'') then sSearchText:=edtExternalCommand.Text else if ((ActionDispatcher AND SaRMASK_PARAMS) <>0) AND (edtExternalParameters.Visible) AND (edtExternalParameters.Text<>'') then sSearchText:=edtExternalParameters.Text else if ((ActionDispatcher AND SaRMASK_STARTPATH) <>0) AND (edtStartPath.Visible) AND (edtStartPath.Text<>'') then sSearchText:=edtStartPath.Text else if ((ActionDispatcher AND SaRMASK_PARAMS) <>0) AND (edtInternalParameters.Visible) AND (edtInternalParameters.Lines.Count>0) then sSearchText:=edtInternalParameters.Lines.Strings[0] else sSearchText:=''; sReplaceText:=sSearchText; EditSearchOptionToOffer:= CaseSensitive[FileNameCaseSensitive]; if GetSimpleSearchAndReplaceString(self, EditSearchOptionToOffer, sSearchText, sReplaceText, EditSearchOptionReturned, glsSearchPathHistory, glsReplacePathHistory) then begin NbOfReplacement:=0; ReplaceFlags:=[rfReplaceAll]; if eswoCaseSensitiveUnchecked in EditSearchOptionReturned then ReplaceFlags := ReplaceFlags + [rfIgnoreCase]; Toolbar := GetTopToolbar; //Let's scan the current bar! for IndexButton := 0 to pred(Toolbar.ButtonCount) do begin PossiblyRecursiveSearchAndReplaceInThisButton(Toolbar.Buttons[IndexButton].ToolItem); ToolBar.UpdateIcon(Toolbar.Buttons[IndexButton]); end; if NbOfReplacement=0 then begin msgOk(rsZeroReplacement); end else begin if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); msgOk(format(rsXReplacements,[NbOfReplacement])); end; end; end; procedure TfrmOptionsToolbarBase.btnRelativeExternalCommandClick(Sender: TObject); begin edtExternalCommand.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtExternalCommand,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbarBase.btnRelativeIconFileNameClick(Sender: TObject); begin edtIconFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtIconFileName,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbarBase.btnRelativeStartPathClick(Sender: TObject); begin edtStartPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtStartPath,pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbarBase.btnRemoveHotKeyClick(Sender: TObject); procedure RemoveHotkey(Hotkeys: THotkeys; NormalItem: TKASNormalItem); var Hotkey: THotkey; begin Hotkey := FindHotkey(NormalItem, Hotkeys); Hotkeys.Remove(Hotkey); end; var HMForm: THMForm; ToolItem: TKASToolItem; NormalItem: TKASNormalItem; I: Integer; begin if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin RemoveHotkey(HMForm.Hotkeys, NormalItem); for I := 0 to HMForm.Controls.Count - 1 do RemoveHotkey(HMForm.Controls[I].Hotkeys, NormalItem); end; LoadCurrentButton; FUpdateHotKey:= True; end; end; end; (*Clone selected button on tool bar*) procedure TfrmOptionsToolbarBase.btnCloneButtonClick(Sender: TObject); var SourceItem: TKASToolItem; Button: TKASToolButton; begin if Assigned(FCurrentButton) then begin ApplyEditControls; SourceItem := FCurrentButton.ToolItem; if FCurrentButton.Tag < pred(FCurrentButton.ToolBar.ButtonCount) then Button := FCurrentButton.ToolBar.InsertButton((FCurrentButton.Tag + 1), SourceItem.Clone) else Button := FCurrentButton.ToolBar.AddButton(SourceItem.Clone); PressButtonDown(Button); end; end; (*Remove current button*) procedure TfrmOptionsToolbarBase.btnDeleteButtonClick(Sender: TObject); var NextButton: Integer; ToolBar: TKASToolBar; begin if Assigned(FCurrentButton) then begin ToolBar := FCurrentButton.ToolBar; NextButton := FCurrentButton.Tag; Toolbar.RemoveButton(FCurrentButton); FCurrentButton := nil; if Toolbar.ButtonCount > 0 then begin // Select next button or the last one. if NextButton >= Toolbar.ButtonCount then NextButton := Toolbar.ButtonCount - 1; PressButtonDown(Toolbar.Buttons[NextButton]); end else begin LoadCurrentButton; end; end; end; procedure TfrmOptionsToolbarBase.btnEditHotkeyClick(Sender: TObject); var HMForm: THMForm; TemplateHotkey, Hotkey: THotkey; ToolItem: TKASToolItem; NormalItem: TKASNormalItem; AControls: TDynamicStringArray = nil; I: Integer; begin if Assigned(FCurrentButton) then begin if not Assigned(FEditForm) then FEditForm := TfrmEditHotkey.Create(Self); ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); TemplateHotkey := THotkey.Create; try TemplateHotkey.Command := cHotKeyCommand; SetValue(TemplateHotkey.Params, 'ToolBarID', Self.ClassName); SetValue(TemplateHotkey.Params, 'ToolItemID', NormalItem.ID); HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin Hotkey := FindHotkey(NormalItem, HMForm.Hotkeys); if Assigned(Hotkey) then TemplateHotkey.Shortcuts := Hotkey.Shortcuts; for I := 0 to HMForm.Controls.Count - 1 do begin Hotkey := FindHotkey(NormalItem, HMForm.Controls[I].Hotkeys); if Assigned(Hotkey) then begin TemplateHotkey.Shortcuts := Hotkey.Shortcuts; AddString(AControls, HMForm.Controls[I].Name); end; end; end; if FEditForm.Execute(True, 'Main', cHotKeyCommand, TemplateHotkey, AControls, [ehoHideParams]) then begin LoadCurrentButton; FUpdateHotKey:= True; end; finally TemplateHotkey.Free; end; end; end; end; procedure TfrmOptionsToolbarBase.btnOpenFileClick(Sender: TObject); begin OpenDialog.DefaultExt:= EmptyStr; OpenDialog.Filter:= EmptyStr; if edtExternalCommand.Text<>'' then OpenDialog.InitialDir:=ExtractFilePath(edtExternalCommand.Text); if OpenDialog.Execute then begin edtExternalCommand.Text := GetToolbarFilenameToSave(tpmeIcon, OpenDialog.FileName); edtStartPath.Text := GetToolbarFilenameToSave(tpmeCommand, ExtractFilePath(OpenDialog.FileName)); edtIconFileName.Text := GetToolbarFilenameToSave(tpmeStartingPath, OpenDialog.FileName); edtToolTip.Text := ExtractOnlyFileName(OpenDialog.FileName); end; end; procedure TfrmOptionsToolbarBase.btnStartPathClick(Sender: TObject); var MaybeResultingOutputPath:string; begin MaybeResultingOutputPath := edtStartPath.Text; if MaybeResultingOutputPath = '' then MaybeResultingOutputPath := frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, MaybeResultingOutputPath, MaybeResultingOutputPath, False) then edtStartPath.Text := GetToolbarFilenameToSave(tpmeStartingPath, MaybeResultingOutputPath); end; { TfrmOptionsToolbarBase.btnSuggestionTooltipClick } procedure TfrmOptionsToolbarBase.btnSuggestionTooltipClick(Sender: TObject); var sSuggestion : string; iLineIndex, pOriginalSuggestion : integer; begin sSuggestion:=EmptyStr; case rgToolItemType.ItemIndex of 1: //Internal command: Idea is to keep the existing one for the single first line, then add systematically the parameters. begin pOriginalSuggestion:=pos('\n',edtToolTip.Text); if pOriginalSuggestion<>0 then sSuggestion:=leftstr(edtToolTip.Text,pred(pOriginalSuggestion))+'\n----' else sSuggestion:=edtToolTip.Text+'\n----'; if edtInternalParameters.Lines.Count>0 then begin for iLineIndex:=0 to pred(edtInternalParameters.Lines.Count) do sSuggestion:=sSuggestion+'\n'+edtInternalParameters.Lines.Strings[iLineIndex]; end; end; 2://External command: Idea is to keep the existing one for the first line, then add systematically command, parameters and start path, one per line. begin pOriginalSuggestion:=pos(('\n----\n'+StringReplace(lblExternalCommand.Caption, '&', '', [rfReplaceAll])),edtToolTip.Text); if pOriginalSuggestion<>0 then sSuggestion:=leftstr(edtToolTip.Text,pred(pOriginalSuggestion))+'\n----\n' else sSuggestion:=edtToolTip.Text+'\n----\n'; sSuggestion:=sSuggestion+StringReplace(lblExternalCommand.Caption, '&', '', [rfReplaceAll])+' '+edtExternalCommand.Text; if edtExternalParameters.Text<>EmptyStr then sSuggestion:=sSuggestion+'\n'+StringReplace(lblExternalParameters.Caption, '&', '', [rfReplaceAll])+' '+edtExternalParameters.Text; if edtStartPath.Text<>EmptyStr then sSuggestion:=sSuggestion+'\n'+StringReplace(lblStartPath.Caption, '&', '', [rfReplaceAll])+' '+edtStartPath.Text; end; end; if sSuggestion<>EmptyStr then edtToolTip.Text:=sSuggestion; end; procedure TfrmOptionsToolbarBase.cbInternalCommandSelect(Sender: TObject); var Command: String; begin Command := cbInternalCommand.Items[cbInternalCommand.ItemIndex]; edtToolTip.Text := FFormCommands.GetCommandCaption(Command, cctLong); edtIconFileName.Text := UTF8LowerCase(Command); end; procedure TfrmOptionsToolbarBase.CloseToolbarsBelowCurrentButton; var CloseFrom: Integer = 1; i: Integer; begin if Assigned(FCurrentButton) then begin for i := 0 to pnToolbars.ControlCount - 1 do if pnToolbars.Controls[i] = FCurrentButton.ToolBar then begin CloseFrom := i + 1; Break; end; end; for i := pnToolbars.ControlCount - 1 downto CloseFrom do CloseToolbar(i); end; procedure TfrmOptionsToolbarBase.CloseToolbar(Index: Integer); begin if Index > 0 then pnToolbars.Controls[Index].Free; end; procedure TfrmOptionsToolbarBase.cbFlatButtonsChange(Sender: TObject); var i: Integer; ToolBar: TKASToolBar; begin for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.Flat := cbFlatButtons.Checked; end; end; procedure TfrmOptionsToolbarBase.edtIconFileNameChange(Sender: TObject); begin if not FUpdatingIconText then UpdateIcon(edtIconFileName.Text); end; procedure TfrmOptionsToolbarBase.lblHelpOnInternalCommandClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/cmds.html#' + cbInternalCommand.Text); end; class function TfrmOptionsToolbarBase.FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey; var i: Integer; AToolBar: Boolean; ToolItemID, ToolBarID: String; begin for i := 0 to Hotkeys.Count - 1 do begin Result := Hotkeys.Items[i]; if (Result.Command = cHotKeyCommand) then begin AToolBar := not GetParamValue(Result.Params, 'ToolBarID', ToolBarID); if not AToolBar then AToolBar := (ToolBarID = Self.ClassName); if (AToolBar) and (GetParamValue(Result.Params, 'ToolItemID', ToolItemID)) and (ToolItemID = NormalItem.ID) then Exit; end; end; Result := nil; end; class function TfrmOptionsToolbarBase.FindHotkey(NormalItem: TKASNormalItem): THotkey; var HMForm: THMForm; i: Integer; begin HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin Result := FindHotkey(NormalItem, HMForm.Hotkeys); if not Assigned(Result) then begin for i := 0 to HMForm.Controls.Count - 1 do begin Result := FindHotkey(NormalItem, HMForm.Controls[i].Hotkeys); if Assigned(Result) then Break; end; end; end else Result := nil; end; procedure TfrmOptionsToolbarBase.trbBarSizeChange(Sender: TObject); var ToolBar: TKASToolBar; i: Integer; begin DisableAutoSizing; try lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2); trbIconSize.Position := trbBarSize.Position - (trbBarSize.Position div 5); for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2); end; finally EnableAutoSizing; end; end; procedure TfrmOptionsToolbarBase.trbIconSizeChange(Sender: TObject); var ToolBar: TKASToolBar; i: Integer; begin DisableAutoSizing; try lblIconSizeValue.Caption := IntToStr(trbIconSize.Position * 2); for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.GlyphSize := trbIconSize.Position * 2; end; finally EnableAutoSizing; end; end; procedure TfrmOptionsToolbarBase.UpdateIcon(Icon: String); var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; begin if Assigned(FCurrentButton) then begin // Refresh icon on the toolbar. ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); NormalItem.Icon := Icon; FCurrentButton.ToolBar.UpdateIcon(FCurrentButton); end; end; end; procedure TfrmOptionsToolbarBase.ToolbarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // Drag to a different toolbar. Accept := (Source is TKASToolButton) and (TKASToolButton(Source).ToolBar <> Sender); end; procedure TfrmOptionsToolbarBase.ToolbarDragDrop(Sender, Source: TObject; X, Y: Integer); var SourceButton: TKASToolButton; TargetToolbar: TKASToolBar; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetToolbar := Sender as TKASToolBar; if SourceButton.ToolBar <> TargetToolBar then begin if (SourceButton = FCurrentButton) then FCurrentButton := nil; SourceButton.ToolBar.MoveButton(SourceButton, TargetToolbar, nil); end; end; end; function TfrmOptionsToolbarBase.ToolbarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASSeparatorItem then // Paint 'separator' icon begin Result := TBitmap.Create; Result.Transparent := True; Result.TransparentColor := clFuchsia; Result.SetSize(iIconSize, iIconSize); Result.Canvas.Brush.Color:= clFuchsia; Result.Canvas.FillRect(Rect(0,0,iIconSize,iIconSize)); Result.Canvas.Brush.Color:= clBtnText; Result.Canvas.RoundRect(Rect(Round(iIconSize * 0.4), 2, Round(iIconSize * 0.6), iIconSize - 2),iIconSize div 8,iIconSize div 4); end else if ToolItem is TKASNormalItem then Result := PixMapManager.LoadBitmapEnhanced(TKASNormalItem(ToolItem).Icon, iIconSize, True, clBackColor, nil) else Result := nil; end; function TfrmOptionsToolbarBase.ToolbarLoadButtonOverlay(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASMenuItem then Result := PixMapManager.LoadBitmapEnhanced('emblem-symbolic-link', iIconSize, True, clBackColor, nil) else Result := nil; end; (*Select button on panel*) procedure TfrmOptionsToolbarBase.ToolbarToolButtonClick(Sender: TObject); var ClickedButton: TKASToolButton; begin ClickedButton := Sender as TKASToolButton; if not FUpdatingButtonType then ApplyEditControls; if Assigned(FCurrentButton) then begin // If current toolbar has changed depress the previous button. if FCurrentButton.ToolBar <> ClickedButton.ToolBar then FCurrentButton.Down := False; end; FCurrentButton := ClickedButton; LoadCurrentButton; end; procedure TfrmOptionsToolbarBase.ToolbarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var SourceButton, TargetButton: TKASToolButton; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetButton := Sender as TKASToolButton; // Drop to a different toolbar. if SourceButton.ToolBar <> TargetButton.ToolBar then begin SourceButton.ToolBar.MoveButton(SourceButton, TargetButton.ToolBar, TargetButton); end; end; end; (* Move button if it is dragged*) procedure TfrmOptionsToolbarBase.ToolbarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); var SourceButton, TargetButton: TKASToolButton; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetButton := Sender as TKASToolButton; // Move on the same toolbar. if SourceButton.ToolBar = TargetButton.ToolBar then begin if FToolDragButtonNumber <> TargetButton.Tag then begin SourceButton.ToolBar.MoveButton(SourceButton.Tag, TargetButton.Tag); FToolDragButtonNumber := TargetButton.Tag; Accept := True; end; end; end; end; (* Do not start drag in here, because oterwise button wouldn't be pushed down*) procedure TfrmOptionsToolbarBase.ToolbarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FToolButtonMouseX := X; FToolButtonMouseY := Y; end; (* Start dragging only if mbLeft if pressed and mouse moved.*) procedure TfrmOptionsToolbarBase.ToolbarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer); var Button: TKASToolButton; begin if Sender is TKASToolButton then begin if (ssLeft in Shift) and (FToolDragButtonNumber = -1) then if (abs(FToolButtonMouseX-X)>10) or (abs(FToolButtonMouseY-Y)>10) then begin Button := TKASToolButton(Sender); FToolDragButtonNumber := NumberOfButton; Button.Toolbar.Buttons[NumberOfButton].BeginDrag(False, 5); end; end; end; (* End button drag*) procedure TfrmOptionsToolbarBase.ToolbarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FToolDragButtonNumber := -1; end; function TfrmOptionsToolbarBase.ToolbarToolItemShortcutsHint(Sender: TObject; ToolItem: TKASNormalItem): String; begin Result := ShortcutsToText(GetShortcuts(ToolItem)); end; procedure TfrmOptionsToolbarBase.SelectButton(ButtonNumber: Integer); var ToolBar: TKASToolBar; begin if pnToolbars.ControlCount > 0 then begin ToolBar := pnToolbars.Controls[0] as TKASToolBar; if (ButtonNumber >= 0) and (ButtonNumber < Toolbar.ButtonCount) then begin FCurrentButton := Toolbar.Buttons[ButtonNumber]; PressButtonDown(FCurrentButton); end; end; end; { TfrmOptionsToolbarBase.FrameEnter } procedure TfrmOptionsToolbarBase.FrameEnter(Sender: TObject); begin //Tricky pass to don't have the "pnlEditToolbar" being continously resized depending on the button task we're going through. //The idea is to have system arrange for the "CommandItem", which is the taller size one, then freeze size there and keep this way. if bFirstTimeDrawn then begin bFirstTimeDrawn := False; DisplayAppropriateControls(True, True, False); Application.ProcessMessages; pnlEditToolbar.AutoSize := False; LoadCurrentButton; end; end; { TfrmOptionsToolbarBase.ComputeToolbarsSignature } // Routine tries to pickup all char chain from element of toolbar toolbar and compute a unique CRC32. // This CRC32 will bea kind of signature of the toolbar. // We compute the CRC32 at the start of edition and at the end. // If they are different, it's a sign that toolbars have been modified. // It's not "perfect" since it might happen that two different combinaisons will // give the same CRC32 but odds are very good that it will be a different one. function TfrmOptionsToolbarBase.ComputeToolbarsSignature(Seed:dword): dword; const CONSTFORTOOLITEM: array[1..4] of byte = ($23, $35, $28, $DE); procedure RecursiveGetSignature(ToolItem: TKASToolItem; var Result: dword); var IndexToolItem: longint; sInnerParam: string; begin if ToolItem is TKASSeparatorItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[1], 1); Result := crc32(Result, @TKASSeparatorItem(ToolItem).Style, SizeOf(TKASSeparatorItem(ToolItem).Style)); end; if ToolItem is TKASCommandItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[2], 1); if length(TKASCommandItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Icon[1], length(TKASCommandItem(ToolItem).Icon)); if length(TKASCommandItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Hint[1], length(TKASCommandItem(ToolItem).Hint)); if length(TKASCommandItem(ToolItem).Command) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Command[1], length(TKASCommandItem(ToolItem).Command)); for sInnerParam in TKASCommandItem(ToolItem).Params do Result := crc32(Result, @sInnerParam[1], length(sInnerParam)); end; if ToolItem is TKASProgramItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[3], 1); if length(TKASProgramItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Icon[1], length(TKASProgramItem(ToolItem).Icon)); if length(TKASProgramItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Hint[1], length(TKASProgramItem(ToolItem).Hint)); if length(TKASProgramItem(ToolItem).Command) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Command[1], length(TKASProgramItem(ToolItem).Command)); if length(TKASProgramItem(ToolItem).Params) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Params[1], length(TKASProgramItem(ToolItem).Params)); if length(TKASProgramItem(ToolItem).StartPath) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).StartPath[1], length(TKASProgramItem(ToolItem).StartPath)); end; if ToolItem is TKASMenuItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[4], 1); if length(TKASMenuItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASMenuItem(ToolItem).Icon[1], length(TKASMenuItem(ToolItem).Icon)); if length(TKASMenuItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASMenuItem(ToolItem).Hint[1], length(TKASMenuItem(ToolItem).Hint)); for IndexToolItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do RecursiveGetSignature(TKASMenuItem(ToolItem).SubItems[IndexToolItem], Result); end; end; var IndexButton: longint; Toolbar: TKASToolBar; begin ApplyEditControls; Toolbar := GetTopToolbar; Result := Seed; for IndexButton := 0 to pred(Toolbar.ButtonCount) do RecursiveGetSignature(Toolbar.Buttons[IndexButton].ToolItem, Result); end; { TfrmOptionsToolbarBase.btnExportClick } procedure TfrmOptionsToolbarBase.btnOtherClick(Sender: TObject); begin pmOtherClickToolbar.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbarBase.miImportAllDCCommandsClick } // Will add on the top toolbar a button giving access to a sub menu with ALL the internal DC internal commands. // This submenu will contain submenus entries, one per internal command category. // This is mainly to help to validate run-time that each command has its own icon and so on. procedure TfrmOptionsToolbarBase.miAddAllCmdsClick(Sender: TObject); var slListCommands: TStringList; AToolbarConfig: TXmlConfig; ToolBarNode, RowNode, AllDCCommandsSubMenuNode, SubMenuNode, CommandCategoryNode, CommandNode: TXmlNode; MenuItemsNode: TXmlNode = nil; // We should preinitialize that one. IndexCommand: integer; bFlagCategoryTitle: boolean = False; sCmdName, sHintName, sHotKey, sCategory: string; ATopToolBar: TKASToolBar; begin slListCommands := TStringList.Create; try // 1. Recuperate the list of all the DC internal commands. FFormCommands.GetCommandsListForACommandCategory(slListCommands, '(' + rsSimpleWordAll + ')', csLegacy); // 2. Create our XML structure to hold all our tree of sub menu and commands. AToolbarConfig := TXmlConfig.Create; try ToolBarNode := AToolbarConfig.FindNode(AToolbarConfig.RootNode, GetNode, True); AToolbarConfig.ClearNode(ToolBarNode); RowNode := AToolbarConfig.AddNode(ToolBarNode, 'Row'); AllDCCommandsSubMenuNode := AToolbarConfig.AddNode(RowNode, 'Menu'); AToolbarConfig.AddValue(AllDCCommandsSubMenuNode, 'ID', GuidToString(DCGetNewGUID)); AToolbarConfig.AddValue(AllDCCommandsSubMenuNode, 'Icon', 'cm_doanycmcommand'); AToolbarConfig.AddValue(AllDCCommandsSubMenuNode, 'Hint', rsMsgAllDCIntCmds); CommandCategoryNode := AToolbarConfig.AddNode(AllDCCommandsSubMenuNode, 'MenuItems'); for IndexCommand := 0 to pred(slListCommands.Count) do begin FFormCommands.ExtractCommandFields(slListCommands.Strings[IndexCommand], sCategory, sCmdName, sHintName, sHotKey, bFlagCategoryTitle); if not bFlagCategoryTitle then begin if MenuItemsNode <> nil then begin CommandNode := AToolbarConfig.AddNode(MenuItemsNode, 'Command'); AToolbarConfig.AddValue(CommandNode, 'ID', GuidToString(DCGetNewGUID)); AToolbarConfig.AddValue(CommandNode, 'Icon', UTF8LowerCase(sCmdName)); AToolbarConfig.AddValue(CommandNode, 'Command', sCmdName); AToolbarConfig.AddValue(CommandNode, 'Hint', sHintName); end; end else begin SubMenuNode := AToolbarConfig.AddNode(CommandCategoryNode, 'Menu'); AToolbarConfig.AddValue(SubMenuNode, 'ID', GuidToString(DCGetNewGUID)); AToolbarConfig.AddValue(SubMenuNode, 'Hint', sCmdName); //Let's take icon of first command of the category for the subtoolbar icon for this "new" category FFormCommands.ExtractCommandFields(slListCommands.Strings[IndexCommand + 1], sCategory, sCmdName, sHintName, sHotKey, bFlagCategoryTitle); AToolbarConfig.AddValue(SubMenuNode, 'Icon', UTF8LowerCase(sCmdName)); MenuItemsNode := AToolbarConfig.AddNode(SubMenuNode, 'MenuItems'); end; end; // 3. Now, we import our structure and at once, bang! we'll have added our bar and sub ones. ATopToolBar := GetTopToolbar; ToolBarNode := AToolbarConfig.FindNode(AToolbarConfig.RootNode, GetNode, False); if ToolBarNode <> nil then begin LoadToolbar(ATopToolBar, AToolbarConfig, ToolBarNode, tocl_AddToCurrentToolbarContent); if ATopToolBar.ButtonCount > 0 then PressButtonDown(ATopToolBar.Buttons[pred(ATopToolBar.ButtonCount)]); //Let's press the last added button since user might wants to complement what he just added end; finally FreeAndNil(AToolbarConfig); end; finally slListCommands.Free; end; end; { TfrmOptionsToolbarBase.miExportToAnythingClick } procedure TfrmOptionsToolbarBase.miExportToAnythingClick(Sender: TObject); var ToolbarConfig: TXmlConfig; FlagKeepGoing: boolean = False; BackupPath: string; ToolBarNode: TXmlNode; ToolBar: TKASToolBar; InnerResult: boolean = False; ActionDispatcher: integer; begin with Sender as TComponent do ActionDispatcher := tag; //1. Make we got an invalid name from the start SaveDialog.Filename := ''; //2. Let's determine from which which level of toolbar we need to export ToolBar := GetTopToolbar; if (ActionDispatcher and MASK_ACTION_TOOLBAR) = ACTION_WITH_CURRENT_BAR then begin if Assigned(FCurrentButton) then begin ApplyEditControls; ToolBar := FCurrentButton.ToolBar; end; end; if Assigned(ToolBar) then begin //3. Let's get a filename for the export case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_DC_TOOLBARFILE: begin SaveDialog.DefaultExt := '*.toolbar'; SaveDialog.FilterIndex := 1; SaveDialog.Title := rsMsgDCToolbarWhereToSave; SaveDialog.FileName := 'New DC Toolbar filename'; FlagKeepGoing := SaveDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin SaveDialog.Filename := BackupPath + DirectorySeparator + 'Backup_' + GetDateTimeInStrEZSortable(now) + '.toolbar'; FlagKeepGoing := True; end; end; {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin SaveDialog.Filename := sTotalCommanderMainbarFilename; FlagKeepGoing := True; end; end; ACTION_WITH_TC_TOOLBARFILE: begin SaveDialog.DefaultExt := '*.BAR'; SaveDialog.FilterIndex := 2; SaveDialog.Title := rsMsgTCToolbarWhereToSave; SaveDialog.FileName := 'New TC Toolbar filename'; SaveDialog.InitialDir := ExcludeTrailingPathDelimiter(mbExpandFilename(gTotalCommanderToolbarPath)); FlagKeepGoing := SaveDialog.Execute; if FlagKeepGoing then FlagKeepGoing := areWeInSituationToPlayWithTCFiles; end; {$ENDIF} end; //4. Let's do the actual exportation if FlagKeepGoing and (SaveDialog.Filename <> '') then begin case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of //If it's DC format, let's save the XML in regular fashion. ACTION_WITH_DC_TOOLBARFILE, ACTION_WITH_BACKUP: begin ToolbarConfig := TXmlConfig.Create(SaveDialog.Filename); try ToolBarNode := ToolbarConfig.FindNode(ToolbarConfig.RootNode, GetNode, True); ToolbarConfig.ClearNode(ToolBarNode); ToolBar.SaveConfiguration(ToolbarConfig, ToolBarNode); InnerResult := ToolbarConfig.Save; finally FreeAndNil(ToolbarConfig); end; end; {$IFDEF MSWINDOWS} //If it's TC format, we first create the necessary .BAR files. //If requested, we also update the Wincmd.ini file. ACTION_WITH_WINCMDINI, ACTION_WITH_TC_TOOLBARFILE: begin ExportDCToolbarsToTC(Toolbar,SaveDialog.Filename,((ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING), ((actionDispatcher and MASK_ACTION_WITH_WHAT) = ACTION_WITH_WINCMDINI) ); InnerResult := True; end; {$ENDIF} end; end; if InnerResult then msgOK(Format(rsMsgToolbarSaved, [SaveDialog.Filename])); end; end; { TfrmOptionsToolbarBase.miImportFromAnythingClick } // We can import elements to DC toolbar... // FROM... // -a previously exported DC .toolbar file // -a previously backuped DC .toolbar file // -the TC toolbar and subtoolbar right from the main toolbar in TC // -a specified TC toolbar file // TO... // -replace the top toolbar in DC // -extend the top toolbar in DC // -a subtoolbar of the top toolbar in DC // -replace the current selected toolbar in DC // -extend the current selected toolbar in DC // -a subtoolbar of the current selected in DC procedure TfrmOptionsToolbarBase.miImportFromAnythingClick(Sender: TObject); var ActionDispatcher: longint; FlagKeepGoing: boolean = False; BackupPath, ImportedToolbarHint: string; ImportDestination: byte; ToolBar: TKASToolBar; LocalKASMenuItem: TKASMenuItem; ToolbarConfig: TXmlConfig; ToolBarNode: TXmlNode; begin with Sender as TComponent do ActionDispatcher := tag; //1o) Make sure we got the the filename to import into "OpenDialog.Filename" variable. case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.Filename := sTotalCommanderMainbarFilename; ImportedToolbarHint := rsDefaultImportedTCToolbarHint; FlagKeepGoing := True; end; end; ACTION_WITH_TC_TOOLBARFILE: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.DefaultExt := '*.BAR'; OpenDialog.FilterIndex := 3; OpenDialog.Title := rsMsgToolbarLocateTCToolbarFile; ImportedToolbarHint := rsDefaultImportedTCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; end; {$ENDIF} ACTION_WITH_DC_TOOLBARFILE: begin OpenDialog.DefaultExt := '*.toolbar'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgToolbarLocateDCToolbarFile; ImportedToolbarHint := rsDefaultImportedDCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin OpenDialog.DefaultExt := '*.toolbar'; OpenDialog.FilterIndex := 1; OpenDialog.InitialDir := ExcludeTrailingPathDelimiter(BackupPath); OpenDialog.Title := rsMsgToolbarRestoreWhat; ImportedToolbarHint := rsDefaultImportedDCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; end; end; //2o) If we got something valid, let's attempt to import it! if FlagKeepGoing then begin //3o) Let's make "Toolbar" hold the toolbar where to import in. ImportDestination := (ActionDispatcher and MASK_IMPORT_DESTIONATION); ImportDestination := ImportDestination shr 4; case ImportDestination of ACTION_WITH_MAIN_TOOLBAR: begin ToolBar := GetTopToolbar; end; ACTION_WITH_CURRENT_BAR: begin if Assigned(FCurrentButton) then Toolbar := FCurrentButton.ToolBar; if Toolbar = nil then ToolBar := GetTopToolbar; end; IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR, IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR: begin case ImportDestination of IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR: begin FCurrentButton := nil; ToolBar := GetTopToolbar; CloseToolbarsBelowCurrentButton; end; IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR: begin if Assigned(FCurrentButton) then Toolbar := FCurrentButton.ToolBar; if Toolbar = nil then ToolBar := GetTopToolbar; end; end; if FCurrentButton <> nil then FCurrentButton.Down := False; LocalKASMenuItem := TKASMenuItem.Create; LocalKASMenuItem.Icon := 'cm_configtoolbars'; LocalKASMenuItem.Hint := ImportedToolbarHint; FCurrentButton := ToolBar.AddButton(LocalKASMenuItem); Toolbar := AddNewSubToolbar(LocalKASMenuItem, False); end; end; //4o) Let's attempt the actual import case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI, ACTION_WITH_TC_TOOLBARFILE: begin ToolbarConfig := TXmlConfig.Create; try ConvertTCToolbarToDCXmlConfig(OpenDialog.FileName, ToolbarConfig); ToolBarNode := ToolbarConfig.FindNode(ToolbarConfig.RootNode, GetNode, False); if ToolBarNode <> nil then begin FCurrentButton := nil; if (ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING then LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_FlushCurrentToolbarContent) else LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_AddToCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[pred(ToolBar.ButtonCount)]); //Let's press the last added button since user might wants to complement what he just added end; finally FreeAndNil(ToolbarConfig); end; end; {$ENDIF} ACTION_WITH_DC_TOOLBARFILE, ACTION_WITH_BACKUP: begin ToolbarConfig := TXmlConfig.Create(OpenDialog.FileName, True); try ToolBarNode := ToolbarConfig.FindNode(ToolbarConfig.RootNode, GetNode, False); if ToolBarNode <> nil then begin FCurrentButton := nil; if (ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING then LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_FlushCurrentToolbarContent) else LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_AddToCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[pred(ToolBar.ButtonCount)]); //Let's press the last added button since user might wants to complement what he just added end; finally FreeAndNil(ToolbarConfig); end; end; end; end; end; procedure TfrmOptionsToolbarBase.ScanToolbarForFilenameAndPath(Toolbar: TKASToolbar); procedure PossiblyRecursiveAddThisToolItemToConfigFile(ToolItem: TKASToolItem); var IndexItem: integer; begin if ToolItem is TKASProgramItem then begin TKASProgramItem(ToolItem).Icon := GetToolbarFilenameToSave(tpmeIcon, TKASProgramItem(ToolItem).Icon); TKASProgramItem(ToolItem).Command := GetToolbarFilenameToSave(tpmeCommand, TKASProgramItem(ToolItem).Command); TKASProgramItem(ToolItem).StartPath := GetToolbarFilenameToSave(tpmeStartingPath, TKASProgramItem(ToolItem).StartPath); end else if ToolItem is TKASCommandItem then begin //In the rare unexpected case that someone would use internal command with an icon file from somewhere else... TKASCommandItem(ToolItem).Icon := GetToolbarFilenameToSave(tpmeIcon, TKASCommandItem(ToolItem).Icon); end else if ToolItem is TKASMenuItem then begin TKASMenuItem(ToolItem).Icon := GetToolbarFilenameToSave(tpmeIcon, TKASMenuItem(ToolItem).Icon); for IndexItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do PossiblyRecursiveAddThisToolItemToConfigFile(TKASMenuItem(ToolItem).SubItems[IndexItem]); end else if ToolItem is TKASSeparatorItem then begin end; end; var //Placed intentionnally *AFTER* above routine to make sure these variable names are not used in above possibly recursive routines. IndexButton: integer; begin for IndexButton := 0 to pred(Toolbar.ButtonCount) do PossiblyRecursiveAddThisToolItemToConfigFile(Toolbar.Buttons[IndexButton].ToolItem); end; { GetToolbarFilenameToSave } function GetToolbarFilenameToSave(AToolbarPathModifierElement: tToolbarPathModifierElement; sParamFilename: string): string; var sMaybeBasePath, SubWorkingPath, MaybeSubstitionPossible: string; begin sParamFilename := mbExpandFileName(sParamFilename); Result := sParamFilename; if AToolbarPathModifierElement in gToolbarPathModifierElements then begin sMaybeBasePath := IfThen((gToolbarFilenameStyle = pfsRelativeToDC), EnvVarCommanderPath, gToolbarPathToBeRelativeTo); case gToolbarFilenameStyle of pfsAbsolutePath: ; pfsRelativeToDC, pfsRelativeToFollowingPath: begin SubWorkingPath := IncludeTrailingPathDelimiter(mbExpandFileName(sMaybeBasePath)); MaybeSubstitionPossible := ExtractRelativePath(IncludeTrailingPathDelimiter(SubWorkingPath), sParamFilename); if MaybeSubstitionPossible <> sParamFilename then Result := IncludeTrailingPathDelimiter(sMaybeBasePath) + MaybeSubstitionPossible; end; end; end; end; end. doublecmd-1.1.30/src/frames/foptionstoolbarbase.lrj0000644000175000001440000005022115104114162021421 0ustar alexxusers{"version":1,"strings":[ {"hash":193790965,"name":"tfrmoptionstoolbarbase.gbgroupbox.caption","sourcebytes":[65,112,112,101,97,114,97,110,99,101],"value":"Appearance"}, {"hash":75282442,"name":"tfrmoptionstoolbarbase.lblbarsize.caption","sourcebytes":[38,66,97,114,32,115,105,122,101,58],"value":"&Bar size:"}, {"hash":131368586,"name":"tfrmoptionstoolbarbase.lbliconsize.caption","sourcebytes":[73,99,111,110,32,115,105,38,122,101,58],"value":"Icon si&ze:"}, {"hash":51983379,"name":"tfrmoptionstoolbarbase.cbflatbuttons.caption","sourcebytes":[38,70,108,97,116,32,98,117,116,116,111,110,115],"value":"&Flat buttons"}, {"hash":124221267,"name":"tfrmoptionstoolbarbase.cbshowcaptions.caption","sourcebytes":[83,104,111,38,119,32,99,97,112,116,105,111,110,115],"value":"Sho&w captions"}, {"hash":47614275,"name":"tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption","sourcebytes":[82,101,112,111,114,116,32,101,114,114,111,114,115,32,119,105,116,104,32,99,111,109,109,97,110,100,115],"value":"Report errors with commands"}, {"hash":223064078,"name":"tfrmoptionstoolbarbase.btninsertbutton.caption","sourcebytes":[38,73,110,115,101,114,116,32,110,101,119,32,98,117,116,116,111,110],"value":"&Insert new button"}, {"hash":55566190,"name":"tfrmoptionstoolbarbase.btnclonebutton.caption","sourcebytes":[67,38,108,111,110,101,32,98,117,116,116,111,110],"value":"C&lone button"}, {"hash":179055749,"name":"tfrmoptionstoolbarbase.btndeletebutton.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"}, {"hash":183260782,"name":"tfrmoptionstoolbarbase.btnother.caption","sourcebytes":[79,116,104,101,114,46,46,46],"value":"Other..."}, {"hash":105810901,"name":"tfrmoptionstoolbarbase.rgtoolitemtype.caption","sourcebytes":[66,117,116,116,111,110,32,116,121,112,101],"value":"Button type"}, {"hash":83500314,"name":"tfrmoptionstoolbarbase.lbliconfile.caption","sourcebytes":[73,99,111,38,110,58],"value":"Ico&n:"}, {"hash":107191178,"name":"tfrmoptionstoolbarbase.lbltooltip.caption","sourcebytes":[38,84,111,111,108,116,105,112,58],"value":"&Tooltip:"}, {"hash":222514794,"name":"tfrmoptionstoolbarbase.lblinternalcommand.caption","sourcebytes":[67,111,38,109,109,97,110,100,58],"value":"Co&mmand:"}, {"hash":24920554,"name":"tfrmoptionstoolbarbase.lblinternalparameters.caption","sourcebytes":[38,80,97,114,97,109,101,116,101,114,115,58],"value":"&Parameters:"}, {"hash":116981518,"name":"tfrmoptionstoolbarbase.edtinternalparameters.hint","sourcebytes":[69,110,116,101,114,32,99,111,109,109,97,110,100,32,112,97,114,97,109,101,116,101,114,115,44,32,101,97,99,104,32,105,110,32,97,32,115,101,112,97,114,97,116,101,32,108,105,110,101,46,32,80,114,101,115,115,32,70,49,32,116,111,32,115,101,101,32,104,101,108,112,32,111,110,32,112,97,114,97,109,101,116,101,114,115,46],"value":"Enter command parameters, each in a separate line. Press F1 to see help on parameters."}, {"hash":222514794,"name":"tfrmoptionstoolbarbase.lblexternalcommand.caption","sourcebytes":[67,111,38,109,109,97,110,100,58],"value":"Co&mmand:"}, {"hash":1054,"name":"tfrmoptionstoolbarbase.btnopenfile.caption","sourcebytes":[62,62],"value":">>"}, {"hash":163890522,"name":"tfrmoptionstoolbarbase.lblexternalparameters.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,38,115,58],"value":"Parameter&s:"}, {"hash":46327258,"name":"tfrmoptionstoolbarbase.lblstartpath.caption","sourcebytes":[83,116,97,114,116,32,112,97,116,38,104,58],"value":"Start pat&h:"}, {"hash":107419706,"name":"tfrmoptionstoolbarbase.lblhotkey.caption","sourcebytes":[72,111,116,32,107,101,121,58],"value":"Hot key:"}, {"hash":199088041,"name":"tfrmoptionstoolbarbase.btnedithotkey.caption","sourcebytes":[69,100,105,116,32,104,111,116,38,107,101,121],"value":"Edit hot&key"}, {"hash":53335353,"name":"tfrmoptionstoolbarbase.btnremovehotkey.caption","sourcebytes":[82,101,109,111,118,101,32,104,111,116,107,101,38,121],"value":"Remove hotke&y"}, {"hash":1054,"name":"tfrmoptionstoolbarbase.btnstartpath.caption","sourcebytes":[62,62],"value":">>"}, {"hash":94120868,"name":"tfrmoptionstoolbarbase.btnopencmddlg.caption","sourcebytes":[83,101,108,101,99,116],"value":"Select"}, {"hash":322608,"name":"tfrmoptionstoolbarbase.lblhelponinternalcommand.caption","sourcebytes":[72,101,108,112],"value":"Help"}, {"hash":113085971,"name":"tfrmoptionstoolbarbase.btnsuggestiontooltip.hint","sourcebytes":[72,97,118,101,32,68,67,32,115,117,103,103,101,115,116,32,116,104,101,32,116,111,111,108,116,105,112,32,98,97,115,101,100,32,111,110,32,98,117,116,116,111,110,32,116,121,112,101,44,32,99,111,109,109,97,110,100,32,97,110,100,32,112,97,114,97,109,101,116,101,114,115],"value":"Have DC suggest the tooltip based on button type, command and parameters"}, {"hash":180215028,"name":"tfrmoptionstoolbarbase.btnsuggestiontooltip.caption","sourcebytes":[83,117,103,103,101,115,116],"value":"Suggest"}, {"hash":109630626,"name":"tfrmoptionstoolbarbase.rbseparator.caption","sourcebytes":[83,101,112,97,114,97,116,111,114],"value":"Separator"}, {"hash":5924757,"name":"tfrmoptionstoolbarbase.rbspace.caption","sourcebytes":[83,112,97,99,101],"value":"Space"}, {"hash":95158922,"name":"tfrmoptionstoolbarbase.lblstyle.caption","sourcebytes":[83,116,121,108,101,58],"value":"Style:"}, {"hash":48996290,"name":"tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption","sourcebytes":[102,111,114,32,97,32,115,101,112,97,114,97,116,111,114],"value":"for a separator"}, {"hash":119871828,"name":"tfrmoptionstoolbarbase.miseparatorfirstitem.caption","sourcebytes":[97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116],"value":"as first element"}, {"hash":150375262,"name":"tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption","sourcebytes":[106,117,115,116,32,112,114,105,111,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just prior current selection"}, {"hash":149346878,"name":"tfrmoptionstoolbarbase.miseparatoraftercurrent.caption","sourcebytes":[106,117,115,116,32,97,102,116,101,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just after current selection"}, {"hash":218429028,"name":"tfrmoptionstoolbarbase.miseparatorlastelement.caption","sourcebytes":[97,115,32,108,97,115,116,32,101,108,101,109,101,110,116],"value":"as last element"}, {"hash":247327204,"name":"tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption","sourcebytes":[102,111,114,32,97,110,32,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"for an internal command"}, {"hash":119871828,"name":"tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption","sourcebytes":[97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116],"value":"as first element"}, {"hash":150375262,"name":"tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption","sourcebytes":[106,117,115,116,32,112,114,105,111,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just prior current selection"}, {"hash":149346878,"name":"tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption","sourcebytes":[106,117,115,116,32,97,102,116,101,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just after current selection"}, {"hash":218429028,"name":"tfrmoptionstoolbarbase.miinternalcommandlastelement.caption","sourcebytes":[97,115,32,108,97,115,116,32,101,108,101,109,101,110,116],"value":"as last element"}, {"hash":247325668,"name":"tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption","sourcebytes":[102,111,114,32,97,110,32,101,120,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"for an external command"}, {"hash":119871828,"name":"tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption","sourcebytes":[97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116],"value":"as first element"}, {"hash":150375262,"name":"tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption","sourcebytes":[106,117,115,116,32,112,114,105,111,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just prior current selection"}, {"hash":149346878,"name":"tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption","sourcebytes":[106,117,115,116,32,97,102,116,101,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just after current selection"}, {"hash":218429028,"name":"tfrmoptionstoolbarbase.miexternalcommandlastelement.caption","sourcebytes":[97,115,32,108,97,115,116,32,101,108,101,109,101,110,116],"value":"as last element"}, {"hash":86211106,"name":"tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption","sourcebytes":[102,111,114,32,97,32,115,117,98,45,116,111,111,108,32,98,97,114],"value":"for a sub-tool bar"}, {"hash":119871828,"name":"tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption","sourcebytes":[97,115,32,102,105,114,115,116,32,101,108,101,109,101,110,116],"value":"as first element"}, {"hash":150375262,"name":"tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption","sourcebytes":[106,117,115,116,32,112,114,105,111,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just prior current selection"}, {"hash":149346878,"name":"tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption","sourcebytes":[106,117,115,116,32,97,102,116,101,114,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110],"value":"just after current selection"}, {"hash":218429028,"name":"tfrmoptionstoolbarbase.misubtoolbarlastelement.caption","sourcebytes":[97,115,32,108,97,115,116,32,101,108,101,109,101,110,116],"value":"as last element"}, {"hash":72262595,"name":"tfrmoptionstoolbarbase.miaddallcmds.caption","sourcebytes":[65,100,100,32,116,111,111,108,98,97,114,32,119,105,116,104,32,65,76,76,32,68,67,32,99,111,109,109,97,110,100,115],"value":"Add toolbar with ALL DC commands"}, {"hash":244782286,"name":"tfrmoptionstoolbarbase.misearchandreplace.caption","sourcebytes":[83,101,97,114,99,104,32,97,110,100,32,114,101,112,108,97,99,101,46,46,46],"value":"Search and replace..."}, {"hash":137523518,"name":"tfrmoptionstoolbarbase.misrcrpliconnames.caption","sourcebytes":[105,110,32,97,108,108,32,105,99,111,110,32,110,97,109,101,115,46,46,46],"value":"in all icon names..."}, {"hash":253832478,"name":"tfrmoptionstoolbarbase.misrcrplcommands.caption","sourcebytes":[105,110,32,97,108,108,32,99,111,109,109,97,110,100,115,46,46,46],"value":"in all commands..."}, {"hash":204032958,"name":"tfrmoptionstoolbarbase.misrcrplparameters.caption","sourcebytes":[105,110,32,97,108,108,32,112,97,114,97,109,101,116,101,114,115,46,46,46],"value":"in all parameters..."}, {"hash":206188558,"name":"tfrmoptionstoolbarbase.misrcrplstartpath.caption","sourcebytes":[105,110,32,97,108,108,32,115,116,97,114,116,32,112,97,116,104,46,46,46],"value":"in all start path..."}, {"hash":187465454,"name":"tfrmoptionstoolbarbase.misrcrplallofall.caption","sourcebytes":[105,110,32,97,108,108,32,111,102,32,97,108,108,32,116,104,101,32,97,98,111,118,101,46,46,46],"value":"in all of all the above..."}, {"hash":124337662,"name":"tfrmoptionstoolbarbase.miexport.caption","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."}, {"hash":78643966,"name":"tfrmoptionstoolbarbase.miexporttop.caption","sourcebytes":[84,111,112,32,116,111,111,108,98,97,114,46,46,46],"value":"Top toolbar..."}, {"hash":235578425,"name":"tfrmoptionstoolbarbase.miexporttoptodcbar.caption","sourcebytes":[116,111,32,97,32,84,111,111,108,98,97,114,32,70,105,108,101,32,40,46,116,111,111,108,98,97,114,41],"value":"to a Toolbar File (.toolbar)"}, {"hash":149668585,"name":"tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,107,101,101,112,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (keep existing)"}, {"hash":990713,"name":"tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,101,114,97,115,101,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (erase existing)"}, {"hash":119283481,"name":"tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption","sourcebytes":[116,111,32,97,32,84,67,32,46,66,65,82,32,102,105,108,101,32,40,107,101,101,112,32,101,120,105,115,116,105,110,103,41],"value":"to a TC .BAR file (keep existing)"}, {"hash":259329065,"name":"tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption","sourcebytes":[116,111,32,97,32,84,67,32,46,66,65,82,32,102,105,108,101,32,40,101,114,97,115,101,32,101,120,105,115,116,105,110,103,41],"value":"to a TC .BAR file (erase existing)"}, {"hash":54730670,"name":"tfrmoptionstoolbarbase.miexportcurrent.caption","sourcebytes":[67,117,114,114,101,110,116,32,116,111,111,108,98,97,114,46,46,46],"value":"Current toolbar..."}, {"hash":235578425,"name":"tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption","sourcebytes":[116,111,32,97,32,84,111,111,108,98,97,114,32,70,105,108,101,32,40,46,116,111,111,108,98,97,114,41],"value":"to a Toolbar File (.toolbar)"}, {"hash":149668585,"name":"tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,107,101,101,112,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (keep existing)"}, {"hash":990713,"name":"tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,101,114,97,115,101,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (erase existing)"}, {"hash":119283481,"name":"tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption","sourcebytes":[116,111,32,97,32,84,67,32,46,66,65,82,32,102,105,108,101,32,40,107,101,101,112,32,101,120,105,115,116,105,110,103,41],"value":"to a TC .BAR file (keep existing)"}, {"hash":259329065,"name":"tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption","sourcebytes":[116,111,32,97,32,84,67,32,46,66,65,82,32,102,105,108,101,32,40,101,114,97,115,101,32,101,120,105,115,116,105,110,103,41],"value":"to a TC .BAR file (erase existing)"}, {"hash":124338510,"name":"tfrmoptionstoolbarbase.miimport.caption","sourcebytes":[73,109,112,111,114,116,46,46,46],"value":"Import..."}, {"hash":187796025,"name":"tfrmoptionstoolbarbase.miimportdcbar.caption","sourcebytes":[102,114,111,109,32,97,32,84,111,111,108,98,97,114,32,70,105,108,101,32,40,46,116,111,111,108,98,97,114,41],"value":"from a Toolbar File (.toolbar)"}, {"hash":117300242,"name":"tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption","sourcebytes":[116,111,32,114,101,112,108,97,99,101,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to replace top toolbar"}, {"hash":241522226,"name":"tfrmoptionstoolbarbase.miimportdcbaraddtop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to top toolbar"}, {"hash":173097890,"name":"tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to top toolbar"}, {"hash":2715186,"name":"tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to current toolbar"}, {"hash":194869810,"name":"tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to current toolbar"}, {"hash":17047070,"name":"tfrmoptionstoolbarbase.miimporttcini.caption","sourcebytes":[102,114,111,109,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,46,46,46],"value":"from \"wincmd.ini\" of TC..."}, {"hash":117300242,"name":"tfrmoptionstoolbarbase.miimporttcinireplacetop.caption","sourcebytes":[116,111,32,114,101,112,108,97,99,101,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to replace top toolbar"}, {"hash":241522226,"name":"tfrmoptionstoolbarbase.miimporttciniaddtop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to top toolbar"}, {"hash":173097890,"name":"tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to top toolbar"}, {"hash":2715186,"name":"tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to current toolbar"}, {"hash":194869810,"name":"tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to current toolbar"}, {"hash":58211221,"name":"tfrmoptionstoolbarbase.miimporttcbar.caption","sourcebytes":[102,114,111,109,32,97,32,115,105,110,103,108,101,32,84,67,32,46,66,65,82,32,102,105,108,101],"value":"from a single TC .BAR file"}, {"hash":117300242,"name":"tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption","sourcebytes":[116,111,32,114,101,112,108,97,99,101,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to replace top toolbar"}, {"hash":241522226,"name":"tfrmoptionstoolbarbase.miimporttcbaraddtop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to top toolbar"}, {"hash":173097890,"name":"tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to top toolbar"}, {"hash":2715186,"name":"tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to current toolbar"}, {"hash":194869810,"name":"tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to current toolbar"}, {"hash":170686846,"name":"tfrmoptionstoolbarbase.mibackup.caption","sourcebytes":[66,97,99,107,117,112,46,46,46],"value":"Backup..."}, {"hash":26464146,"name":"tfrmoptionstoolbarbase.miexporttoptobackup.caption","sourcebytes":[83,97,118,101,32,97,32,98,97,99,107,117,112,32,111,102,32,84,111,111,108,98,97,114],"value":"Save a backup of Toolbar"}, {"hash":12441442,"name":"tfrmoptionstoolbarbase.miimportbackup.caption","sourcebytes":[82,101,115,116,111,114,101,32,97,32,98,97,99,107,117,112,32,111,102,32,84,111,111,108,98,97,114],"value":"Restore a backup of Toolbar"}, {"hash":117300242,"name":"tfrmoptionstoolbarbase.miimportbackupreplacetop.caption","sourcebytes":[116,111,32,114,101,112,108,97,99,101,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to replace top toolbar"}, {"hash":241522226,"name":"tfrmoptionstoolbarbase.miimportbackupaddtop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to top toolbar"}, {"hash":173097890,"name":"tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,116,111,112,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to top toolbar"}, {"hash":2715186,"name":"tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to current toolbar"}, {"hash":194869810,"name":"tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption","sourcebytes":[116,111,32,97,100,100,32,116,111,32,97,32,110,101,119,32,116,111,111,108,98,97,114,32,116,111,32,99,117,114,114,101,110,116,32,116,111,111,108,98,97,114],"value":"to add to a new toolbar to current toolbar"} ]} doublecmd-1.1.30/src/frames/foptionstoolbarbase.lfm0000644000175000001440000014632415104114162021422 0ustar alexxusersinherited frmOptionsToolbarBase: TfrmOptionsToolbarBase Height = 573 Width = 850 ClientHeight = 573 ClientWidth = 850 OnEnter = FrameEnter DesignLeft = 440 DesignTop = 255 object gbGroupBox: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 111 Top = 0 Width = 838 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = 'Appearance' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 4 ClientHeight = 86 ClientWidth = 834 TabOrder = 0 object lblBarSize: TLabel AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 8 Height = 20 Top = 17 Width = 54 Caption = '&Bar size:' FocusControl = trbBarSize ParentColor = False end object lblBarSizeValue: TLabel AnchorSideLeft.Control = lblBarSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 64 Height = 1 Top = 27 Width = 1 BorderSpacing.Left = 2 ParentColor = False end object trbBarSize: TTrackBar AnchorSideLeft.Control = lblBarSizeValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbGroupBox Left = 68 Height = 46 Top = 4 Width = 150 Frequency = 4 Max = 40 Min = 10 OnChange = trbBarSizeChange Position = 18 ScalePos = trRight BorderSpacing.Around = 3 Constraints.MinWidth = 40 TabOrder = 0 end object lblIconSize: TLabel AnchorSideLeft.Control = trbBarSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrCenter Left = 233 Height = 20 Top = 17 Width = 60 BorderSpacing.Left = 15 Caption = 'Icon si&ze:' FocusControl = trbIconSize ParentColor = False end object lblIconSizeValue: TLabel AnchorSideLeft.Control = lblIconSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrCenter Left = 295 Height = 1 Top = 27 Width = 1 BorderSpacing.Left = 2 ParentColor = False end object trbIconSize: TTrackBar AnchorSideLeft.Control = lblIconSizeValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbGroupBox AnchorSideBottom.Side = asrBottom Left = 299 Height = 46 Top = 4 Width = 150 Frequency = 4 Max = 32 Min = 8 OnChange = trbIconSizeChange Position = 16 ScalePos = trRight BorderSpacing.Around = 3 Constraints.MinWidth = 40 ParentShowHint = False ShowHint = True TabOrder = 1 end object cbFlatButtons: TCheckBox AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 58 Width = 102 BorderSpacing.Top = 8 Caption = '&Flat buttons' Checked = True OnChange = cbFlatButtonsChange State = cbChecked TabOrder = 2 end object cbShowCaptions: TCheckBox AnchorSideLeft.Control = cbFlatButtons AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFlatButtons Left = 122 Height = 24 Top = 58 Width = 120 BorderSpacing.Left = 12 Caption = 'Sho&w captions' TabOrder = 3 end object cbReportErrorWithCommands: TCheckBox AnchorSideLeft.Control = cbShowCaptions AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFlatButtons Left = 254 Height = 24 Top = 58 Width = 220 BorderSpacing.Left = 12 Caption = 'Report errors with commands' TabOrder = 4 end end object pnlFullToolbarButtons: TPanel[1] AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEditToolbar Left = 6 Height = 30 Top = 208 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 2 BorderSpacing.Bottom = 2 BevelOuter = bvNone ClientHeight = 30 ClientWidth = 838 TabOrder = 1 object pnlToolbarButtons: TPanel AnchorSideLeft.Control = pnlFullToolbarButtons AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlFullToolbarButtons AnchorSideBottom.Side = asrBottom Left = 181 Height = 30 Top = 0 Width = 476 AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 8 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ChildSizing.ControlsPerLine = 1 ClientHeight = 30 ClientWidth = 476 TabOrder = 0 object btnInsertButton: TButton Left = 0 Height = 30 Top = 0 Width = 141 AutoSize = True Caption = '&Insert new button' OnClick = btnInsertButtonClick TabOrder = 0 end object btnCloneButton: TButton Left = 149 Height = 30 Top = 0 Width = 112 AutoSize = True Caption = 'C&lone button' OnClick = btnCloneButtonClick TabOrder = 1 end object btnDeleteButton: TButton Left = 269 Height = 30 Top = 0 Width = 70 AutoSize = True Caption = '&Delete' OnClick = btnDeleteButtonClick TabOrder = 2 end object btnOther: TButton Left = 404 Height = 30 Top = 0 Width = 72 AutoSize = True BorderSpacing.Left = 65 Caption = 'Other...' OnClick = btnOtherClick TabOrder = 3 end end end object pnlEditToolbar: TPanel[2] AnchorSideLeft.Control = gbGroupBox AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 327 Top = 240 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 BevelOuter = bvNone ClientHeight = 327 ClientWidth = 838 TabOrder = 2 object rgToolItemType: TRadioGroup AnchorSideLeft.Control = pnlEditToolbar AnchorSideTop.Control = pnlEditToolbar AnchorSideBottom.Control = pnlEditToolbar AnchorSideBottom.Side = asrBottom Left = 0 Height = 327 Top = 0 Width = 96 Anchors = [akTop, akLeft, akBottom] AutoFill = True AutoSize = True Caption = 'Button type' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 TabOrder = 0 end object pnlEditControls: TPanel AnchorSideLeft.Control = rgToolItemType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlEditToolbar AnchorSideRight.Control = pnlEditToolbar AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEditToolbar AnchorSideBottom.Side = asrBottom Left = 102 Height = 327 Top = 0 Width = 730 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 327 ClientWidth = 730 TabOrder = 1 object lblIconFile: TLabel Left = 0 Height = 20 Top = 6 Width = 76 Alignment = taRightJustify Caption = 'Ico&n:' FocusControl = edtIconFileName ParentColor = False Visible = False end object edtIconFileName: TEdit AnchorSideLeft.Control = lblIconFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblIconFile AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenIcon Left = 78 Height = 28 Top = 2 Width = 588 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 OnChange = edtIconFileNameChange TabOrder = 0 Visible = False end object btnOpenIcon: TSpeedButton AnchorSideTop.Control = edtIconFileName AnchorSideRight.Control = btnRelativeIconFileName AnchorSideBottom.Control = edtIconFileName AnchorSideBottom.Side = asrBottom Left = 666 Height = 28 Top = 2 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000328B D83F328BD83F328BD83F328BD83F328BD83F328BD83F328BD83F328BD83F328B D83F328BD83F328BD83F328BD83F328BD83F328BD83F000000004994D7FF328B D8FF328AD8FF328BD8FF328BD8FF328BD8FF328BD8FF328BD8FF328BD8FF328B D8FF328BD8FF328AD8FF328BD8FF4994D7FF328BD83F00000000358FD8FFDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF79D7 F3FF73D5F3FF6FD3F2FFC2EAF8FF3494DAFF328BD83F000000003A96DAFFEFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF79DFF7FF70DEF6FF66DBF5FF5AD8 F4FF4CD4F3FF3FD1F2FFCAF2FBFF3494DAFF328BD83F000000003A9CDAFFF2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7EE1F7FF76DEF6FF6BDC F6FF5DD9F4FF4ED5F3FFCCF2FBFF3494DAFF328BD83F0000000039A2DAFFF6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF86E2F7FF7EE1F7FF76DEF6FF6BDC F6FF5DD9F4FF4ED5F3FFCCF2FBFF3494DAFF328BD83F0000000039A7D9FFFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF3176 B3FF2F72B1FF2D71B2FF2B72B6FF2C73B9FF1C476DFF0000000037ABD9FFE8F6 FBFF6FBCE7FF54AAE2FF4CA5E0FF91C9EBFFFDFEFDFFFDFEFDFFFFFDFCFF2F72 B1FF6FD1F6FF6ACEF8FF84BFB3FFA0AC64FF3684C7FF193D5EFF3EACDAFFF1FA FDFF94DEF5FF93DCF4FF63BCE9FF3494DAFF3494DAFF3494DAFF3494DAFF2E70 AFFF65C4EDFF5FBFF1FF9DA461FFDD8A00FF5BBCF3FF2E6FAEFF3FB3DBFFF7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FF1E486EFF3075B1FF3075AFFF4492 C6FF5FBAE6FF5DB5E9FF40C0D7FF20CCBFFF66BDF1FF2E72B2FF3AB4DAFFFDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFF2F74B2FF6EC1E5FF2F6EEDFF4791 E5FF5CB0DEFF5CABE1FF24C3B0FF00DF7CFF83C3F0FF2D71B1FF56BFDDFF60C3 E1FF62C4E2FF62C4E2FF62C4E2FF61C4E2FF2C72B0FFA2DAEDFF001AF4FF126C F1FF24B9EEFF3DBAE4FF22D3F3FF58A2DFFFACD4F0FF2C71B1FF000000000000 0000000000000000000000000000000000002C71AEFFA4CFE7FF87ACEEFF25B0 F5FF00C5FFFF2AD6EEFF00FFFFFFB8D5F0FF73A7D2FF1E4D77FF000000000000 000000000000000000000000000000000000000000003378B3FF84B5D8FFBCDB EFFFBDD8EDFFBDD6EEFFABCAE7FF699CCCFF27659FFF00000000000000000000 0000000000000000000000000000000000000000000000000000215583FF2A70 B0FF2A6FAFFF2A6FB0FF2B70B0FF1F4D77FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } Visible = False OnClick = btnOpenIconClick end object lblToolTip: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 20 Top = 36 Width = 76 Alignment = taRightJustify Caption = '&Tooltip:' FocusControl = edtToolTip ParentColor = False Visible = False end object edtToolTip: TEdit AnchorSideLeft.Control = lblToolTip AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblToolTip AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSuggestionTooltip Left = 78 Height = 28 Top = 32 Width = 562 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 1 Visible = False end object lblInternalCommand: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 20 Top = 66 Width = 76 Alignment = taRightJustify Caption = 'Co&mmand:' FocusControl = cbInternalCommand ParentColor = False Visible = False end object cbInternalCommand: TComboBox AnchorSideLeft.Control = lblInternalCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblInternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenCmdDlg Left = 78 Height = 28 Top = 62 Width = 540 HelpType = htKeyword Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 DropDownCount = 20 ItemHeight = 20 OnSelect = cbInternalCommandSelect Style = csDropDownList TabOrder = 2 Visible = False end object lblInternalParameters: TLabel Left = 0 Height = 100 Top = 96 Width = 76 Alignment = taRightJustify Caption = '&Parameters:' Constraints.MinHeight = 100 FocusControl = edtInternalParameters ParentColor = False Visible = False end object edtInternalParameters: TMemo AnchorSideLeft.Control = lblInternalParameters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblInternalParameters AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnInternalParametersHelper Left = 78 Height = 100 Hint = 'Enter command parameters, each in a separate line. Press F1 to see help on parameters.' Top = 96 Width = 617 HelpType = htKeyword Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 Constraints.MinWidth = 100 ParentShowHint = False ScrollBars = ssAutoBoth ShowHint = True TabOrder = 3 Visible = False WordWrap = False end object lblExternalCommand: TLabel AnchorSideTop.Side = asrBottom Left = 0 Height = 20 Top = 206 Width = 76 Alignment = taRightJustify Caption = 'Co&mmand:' FocusControl = edtExternalCommand ParentColor = False Visible = False end object edtExternalCommand: TEdit AnchorSideLeft.Control = lblExternalCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenFile Left = 78 Height = 28 Top = 202 Width = 588 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 4 Visible = False end object btnOpenFile: TButton AnchorSideTop.Control = edtExternalCommand AnchorSideRight.Control = btnRelativeExternalCommand AnchorSideBottom.Control = edtExternalCommand AnchorSideBottom.Side = asrBottom Left = 666 Height = 28 Top = 202 Width = 32 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnOpenFileClick TabOrder = 5 Visible = False end object lblExternalParameters: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 20 Top = 236 Width = 76 Alignment = taRightJustify Caption = 'Parameter&s:' FocusControl = edtExternalParameters ParentColor = False Visible = False end object edtExternalParameters: TEdit AnchorSideLeft.Control = lblExternalParameters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExternalParameters AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnParametersHelper Left = 78 Height = 28 Top = 232 Width = 620 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 6 Visible = False end object lblStartPath: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 20 Top = 266 Width = 76 Alignment = taRightJustify Caption = 'Start pat&h:' FocusControl = edtStartPath ParentColor = False Visible = False end object edtStartPath: TEdit AnchorSideLeft.Control = lblStartPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblStartPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnStartPath Left = 78 Height = 28 Top = 262 Width = 588 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 7 Visible = False end object lblHotkey: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 20 Top = 296 Width = 76 Alignment = taRightJustify Caption = 'Hot key:' ParentColor = False Visible = False end object lblHotkeyValue: TLabel AnchorSideLeft.Control = lblHotkey AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey Left = 78 Height = 1 Top = 296 Width = 1 BorderSpacing.Left = 2 BorderSpacing.Right = 10 ParentColor = False Visible = False end object btnEditHotkey: TButton AnchorSideLeft.Control = lblHotkeyValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey AnchorSideTop.Side = asrCenter Left = 89 Height = 30 Top = 291 Width = 100 AutoSize = True BorderSpacing.Left = 2 Caption = 'Edit hot&key' OnClick = btnEditHotkeyClick TabOrder = 8 Visible = False end object btnRemoveHotkey: TButton AnchorSideLeft.Control = btnEditHotkey AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey AnchorSideTop.Side = asrCenter Left = 191 Height = 30 Top = 291 Width = 128 AutoSize = True BorderSpacing.Left = 2 Caption = 'Remove hotke&y' OnClick = btnRemoveHotKeyClick TabOrder = 9 Visible = False end object btnRelativeExternalCommand: TSpeedButton AnchorSideTop.Control = edtExternalCommand AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtExternalCommand AnchorSideBottom.Side = asrBottom Left = 698 Height = 28 Top = 202 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeExternalCommandClick end object btnRelativeIconFileName: TSpeedButton AnchorSideTop.Control = edtIconFileName AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtIconFileName AnchorSideBottom.Side = asrBottom Left = 698 Height = 28 Top = 2 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeIconFileNameClick end object btnStartPath: TButton AnchorSideTop.Control = edtStartPath AnchorSideRight.Control = btnRelativeStartPath AnchorSideBottom.Control = edtStartPath AnchorSideBottom.Side = asrBottom Left = 666 Height = 28 Top = 262 Width = 32 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnStartPathClick TabOrder = 10 Visible = False end object btnRelativeStartPath: TSpeedButton AnchorSideTop.Control = edtStartPath AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtStartPath AnchorSideBottom.Side = asrBottom Left = 698 Height = 28 Top = 262 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeStartPathClick end object btnOpenCmdDlg: TButton AnchorSideLeft.Control = cbInternalCommand AnchorSideTop.Control = cbInternalCommand AnchorSideRight.Control = lblHelpOnInternalCommand AnchorSideBottom.Control = cbInternalCommand AnchorSideBottom.Side = asrBottom Left = 621 Height = 28 Top = 62 Width = 74 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 4 Caption = 'Select' OnClick = btnOpenCmdDlgClick TabOrder = 12 Visible = False end object lblHelpOnInternalCommand: TLabel AnchorSideTop.Control = lblInternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom Cursor = crHandPoint Left = 698 Height = 20 Top = 66 Width = 32 Anchors = [akTop, akRight] BorderSpacing.Left = 3 Caption = 'Help' Font.Style = [fsUnderline] ParentColor = False ParentFont = False Visible = False OnClick = lblHelpOnInternalCommandClick end object btnSuggestionTooltip: TButton AnchorSideTop.Control = edtToolTip AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtToolTip AnchorSideBottom.Side = asrBottom Left = 643 Height = 28 Hint = 'Have DC suggest the tooltip based on button type, command and parameters' Top = 32 Width = 87 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 4 Caption = 'Suggest' OnClick = btnSuggestionTooltipClick TabOrder = 11 Visible = False end object btnParametersHelper: TSpeedButton AnchorSideTop.Control = edtExternalParameters AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtExternalParameters AnchorSideBottom.Side = asrBottom Left = 698 Height = 28 Top = 232 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } Visible = False OnClick = btnParametersHelperClick end object btnInternalParametersHelper: TSpeedButton AnchorSideTop.Control = lblInternalParameters AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom Left = 698 Height = 23 Top = 96 Width = 32 Anchors = [akTop, akRight] BorderSpacing.Left = 3 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } Visible = False OnClick = btnInternalParametersHelperClick end object lblStyle: TLabel AnchorSideTop.Side = asrBottom Left = 12 Height = 20 Top = 328 Width = 76 BorderSpacing.Left = 12 BorderSpacing.Top = 12 Caption = 'Style:' ParentColor = False end object rbSeparator: TRadioButton AnchorSideLeft.Control = lblStyle AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblStyle AnchorSideTop.Side = asrCenter Left = 100 Height = 24 Top = 326 Width = 89 BorderSpacing.Left = 12 Caption = 'Separator' Checked = True TabOrder = 13 TabStop = True end object rbSpace: TRadioButton AnchorSideLeft.Control = rbSeparator AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbSeparator AnchorSideTop.Side = asrCenter Left = 201 Height = 24 Top = 326 Width = 64 BorderSpacing.Left = 12 Caption = 'Space' TabOrder = 14 end end end object pnToolbars: TPanel[3] AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = gbGroupBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlFullToolbarButtons Left = 6 Height = 93 Top = 113 Width = 838 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 2 ParentColor = False TabOrder = 3 end object OpenDialog: TOpenDialog[4] Filter = 'DC Toolbar files|*.toolbar|.xml Config files|*.xml|TC Toolbar files|*.BAR|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 48 top = 104 end object pmPathHelper: TPopupMenu[5] left = 784 top = 216 end object pmInsertButtonMenu: TPopupMenu[6] left = 256 top = 176 object miAddSeparatorSubMenu: TMenuItem Caption = 'for a separator' object miSeparatorFirstItem: TMenuItem Tag = 17 Caption = 'as first element' OnClick = miInsertButtonClick end object miSeparatorPriorCurrent: TMenuItem Tag = 18 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miSeparatorAfterCurrent: TMenuItem Tag = 19 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miSeparatorLastElement: TMenuItem Tag = 20 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddInternalCommandSubMenu: TMenuItem Caption = 'for an internal command' object miInternalCommandFirstElement: TMenuItem Tag = 33 Caption = 'as first element' OnClick = miInsertButtonClick end object miInternalCommandPriorCurrent: TMenuItem Tag = 34 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miInternalCommandAfterCurrent: TMenuItem Tag = 35 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miInternalCommandLastElement: TMenuItem Tag = 36 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddExternalCommandSubMenu: TMenuItem Caption = 'for an external command' object miExternalCommandFirstElement: TMenuItem Tag = 49 Caption = 'as first element' OnClick = miInsertButtonClick end object miExternalCommandPriorCurrent: TMenuItem Tag = 50 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miExternalCommandAfterCurrent: TMenuItem Tag = 51 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miExternalCommandLastElement: TMenuItem Tag = 52 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddSubToolBarSubMenu: TMenuItem Caption = 'for a sub-tool bar' object miSubToolBarFirstElement: TMenuItem Tag = 65 Caption = 'as first element' OnClick = miInsertButtonClick end object miSubToolBarPriorCurrent: TMenuItem Tag = 66 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miSubToolBarAfterCurrent: TMenuItem Tag = 67 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miSubToolBarLastElement: TMenuItem Tag = 68 Caption = 'as last element' OnClick = miInsertButtonClick end end end object pmOtherClickToolbar: TPopupMenu[7] left = 592 top = 176 object miAddAllCmds: TMenuItem Caption = 'Add toolbar with ALL DC commands' OnClick = miAddAllCmdsClick end object miSearchAndReplace: TMenuItem Caption = 'Search and replace...' object miSrcRplIconNames: TMenuItem Tag = 1 Caption = 'in all icon names...' OnClick = miSrcRplClick end object miSrcRplCommands: TMenuItem Tag = 2 Caption = 'in all commands...' OnClick = miSrcRplClick end object miSrcRplParameters: TMenuItem Tag = 4 Caption = 'in all parameters...' OnClick = miSrcRplClick end object miSrcRplStartPath: TMenuItem Tag = 8 Caption = 'in all start path...' OnClick = miSrcRplClick end object miSrcRplClickSeparator: TMenuItem Caption = '-' end object miSrcRplAllOfAll: TMenuItem Tag = 15 Caption = 'in all of all the above...' OnClick = miSrcRplClick end end object miSeparator1: TMenuItem Caption = '-' end object miExport: TMenuItem Caption = 'Export...' object miExportTop: TMenuItem Caption = 'Top toolbar...' object miExportTopToDCBar: TMenuItem Tag = 2 Caption = 'to a Toolbar File (.toolbar)' OnClick = miExportToAnythingClick end object miExportSeparator1: TMenuItem Caption = '-' end object miExportTopToTCIniKeep: TMenuItem Caption = 'to a "wincmd.ini" of TC (keep existing)' OnClick = miExportToAnythingClick end object miExportTopToTCIniNoKeep: TMenuItem Tag = 128 Caption = 'to a "wincmd.ini" of TC (erase existing)' OnClick = miExportToAnythingClick end object miExportSeparator2: TMenuItem Caption = '-' end object miExportTopToTCBarKeep: TMenuItem Tag = 1 Caption = 'to a TC .BAR file (keep existing)' OnClick = miExportToAnythingClick end object miExportTopToTCBarNoKeep: TMenuItem Tag = 129 Caption = 'to a TC .BAR file (erase existing)' OnClick = miExportToAnythingClick end end object miExportCurrent: TMenuItem Caption = 'Current toolbar...' object miExportCurrentToDCBar: TMenuItem Tag = 34 Caption = 'to a Toolbar File (.toolbar)' OnClick = miExportToAnythingClick end object miExportSeparator3: TMenuItem Caption = '-' end object miExportCurrentToTCIniKeep: TMenuItem Tag = 32 Caption = 'to a "wincmd.ini" of TC (keep existing)' OnClick = miExportToAnythingClick end object miExportCurrentToTCIniNoKeep: TMenuItem Tag = 160 Caption = 'to a "wincmd.ini" of TC (erase existing)' OnClick = miExportToAnythingClick end object miExportSeparator4: TMenuItem Caption = '-' end object miExportCurrentToTCBarKeep: TMenuItem Tag = 33 Caption = 'to a TC .BAR file (keep existing)' OnClick = miExportToAnythingClick end object miExportCurrentToTCBarNoKeep: TMenuItem Tag = 161 Caption = 'to a TC .BAR file (erase existing)' OnClick = miExportToAnythingClick end end end object miImport: TMenuItem Caption = 'Import...' object miImportDCBAR: TMenuItem Caption = 'from a Toolbar File (.toolbar)' object miImportDCBARReplaceTop: TMenuItem Tag = 130 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator8: TMenuItem Caption = '-' end object miImportDCBARAddTop: TMenuItem Tag = 2 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportDCBARAddMenuTop: TMenuItem Tag = 18 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator9: TMenuItem Caption = '-' end object miImportDCBARAddCurrent: TMenuItem Tag = 34 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportDCBARAddMenuCurrent: TMenuItem Tag = 50 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end object miImportSeparator: TMenuItem Caption = '-' end object miImportTCINI: TMenuItem Caption = 'from "wincmd.ini" of TC...' object miImportTCINIReplaceTop: TMenuItem Tag = 128 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator6: TMenuItem Caption = '-' end object miImportTCINIAddTop: TMenuItem Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportTCINIAddMenuTop: TMenuItem Tag = 16 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator7: TMenuItem Caption = '-' end object miImportTCINIAddCurrent: TMenuItem Tag = 32 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportTCINIAddMenuCurrent: TMenuItem Tag = 48 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end object miImportTCBAR: TMenuItem Caption = 'from a single TC .BAR file' object miImportTCBARReplaceTop: TMenuItem Tag = 129 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator10: TMenuItem Caption = '-' end object miImportTCBARAddTop: TMenuItem Tag = 1 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportTCBARAddMenuTop: TMenuItem Tag = 17 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator11: TMenuItem Caption = '-' end object miImportTCBARAddCurrent: TMenuItem Tag = 33 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportTCBARAddMenuCurrent: TMenuItem Tag = 49 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end end object miSeparator2: TMenuItem Caption = '-' end object miBackup: TMenuItem Caption = 'Backup...' object miExportTopToBackup: TMenuItem Tag = 3 Caption = 'Save a backup of Toolbar' OnClick = miExportToAnythingClick end object miImportBackup: TMenuItem Caption = 'Restore a backup of Toolbar' object miImportBackupReplaceTop: TMenuItem Tag = 131 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator13: TMenuItem Caption = '-' end object miImportBackupAddTop: TMenuItem Tag = 3 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportBackupAddMenuTop: TMenuItem Tag = 19 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator14: TMenuItem Caption = '-' end object miImportBackupAddCurrent: TMenuItem Tag = 35 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportBackupAddMenuCurrent: TMenuItem Tag = 51 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end end end object SaveDialog: TSaveDialog[8] DefaultExt = '.hotlist' Filter = 'DC Toolbar files|*.toolbar|TC Toolbar files|*.BAR|Any files|*.*' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 152 top = 104 end object ReplaceDialog: TReplaceDialog[9] Options = [frHideWholeWord, frHideUpDown, frDisableUpDown, frDisableWholeWord, frHideEntireScope, frHidePromptOnReplace] left = 288 top = 112 end end doublecmd-1.1.30/src/frames/foptionstoolbar.pas0000644000175000001440000000653615104114162020574 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Toolbar configuration options page Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsToolbar; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, fOptionsFrame, fOptionsToolbarBase; type { TfrmOptionsToolbar } TfrmOptionsToolbar = class(TfrmOptionsToolbarBase) protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses KASToolBar, DCXmlConfig, uGlobs, uGlobsPaths, uSpecialDir, uLng; { TfrmOptionsToolbar } class function TfrmOptionsToolbar.GetTitle: String; begin Result := rsOptionsEditorToolbar; end; procedure TfrmOptionsToolbar.Load; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin trbBarSize.Position := gToolBarButtonSize div 2; trbIconSize.Position := gToolBarIconSize div 2; cbFlatButtons.Checked := gToolBarFlat; cbShowCaptions.Checked := gToolBarShowCaptions; cbReportErrorWithCommands.Checked := gToolbarReportErrorWithCommands; lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2); lblIconSizeValue.Caption := IntToStr(trbIconSize.Position*2); FCurrentButton := nil; CloseToolbarsBelowCurrentButton; ToolBar := GetTopToolbar; ToolBarNode := gConfig.FindNode(gConfig.RootNode, GetNode, False); LoadToolbar(ToolBar, gConfig, ToolBarNode, tocl_FlushCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); FUpdateHotKey := False; end; function TfrmOptionsToolbar.Save: TOptionsEditorSaveFlags; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin ApplyEditControls; gToolBarFlat := cbFlatButtons.Checked; gToolBarShowCaptions := cbShowCaptions.Checked; gToolbarReportErrorWithCommands := cbReportErrorWithCommands.Checked; gToolBarButtonSize := trbBarSize.Position * 2; gToolBarIconSize := trbIconSize.Position * 2; ToolBar := GetTopToolbar; if Assigned(ToolBar) then begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, GetNode, True); gConfig.ClearNode(ToolBarNode); Toolbar.SaveConfiguration(gConfig, ToolBarNode); end; if FUpdateHotKey then begin FUpdateHotKey := False; HotMan.Save(gpCfgDir + gNameSCFile); end; Result := []; end; constructor TfrmOptionsToolbar.Create(TheOwner: TComponent); begin inherited Create(TheOwner); Name := 'frmOptionsToolbar'; end; end. doublecmd-1.1.30/src/frames/foptionstoolbar.lfm0000644000175000001440000000015015104114162020551 0ustar alexxusersinherited frmOptionsToolbar: TfrmOptionsToolbar HelpKeyword = '/configuration.html#ConfigToolbar' end doublecmd-1.1.30/src/frames/foptionsterminal.pas0000644000175000001440000000543515104114162020742 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Terminal options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsTerminal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls, Buttons, Menus; type { TfrmOptionsTerminal } TfrmOptionsTerminal = class(TOptionsEditor) gbRunInTerminalStayOpen: TGroupBox; lbRunInTermStayOpenCmd: TLabel; edRunInTermStayOpenCmd: TEdit; lbRunInTermStayOpenParams: TLabel; edRunInTermStayOpenParams: TEdit; gbRunInTerminalClose: TGroupBox; lbRunInTermCloseCmd: TLabel; edRunInTermCloseCmd: TEdit; lbRunInTermCloseParams: TLabel; edRunInTermCloseParams: TEdit; gbJustRunTerminal: TGroupBox; lbRunTermCmd: TLabel; edRunTermCmd: TEdit; lbRunTermParams: TLabel; edRunTermParams: TEdit; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsTerminal } procedure TfrmOptionsTerminal.Load; begin edRunInTermStayOpenCmd.Text := gRunInTermStayOpenCmd; edRunInTermStayOpenParams.Text := gRunInTermStayOpenParams; edRunInTermCloseCmd.Text := gRunInTermCloseCmd; edRunInTermCloseParams.Text := gRunInTermCloseParams; edRunTermCmd.Text := gRunTermCmd; edRunTermParams.Text := gRunTermParams; end; function TfrmOptionsTerminal.Save: TOptionsEditorSaveFlags; begin gRunInTermStayOpenCmd := edRunInTermStayOpenCmd.Text; gRunInTermStayOpenParams := edRunInTermStayOpenParams.Text; gRunInTermCloseCmd := edRunInTermCloseCmd.Text; gRunInTermCloseParams := edRunInTermCloseParams.Text; gRunTermCmd := edRunTermCmd.Text; gRunTermParams := edRunTermParams.Text; Result := []; end; class function TfrmOptionsTerminal.GetIconIndex: Integer; begin Result := 24; end; class function TfrmOptionsTerminal.GetTitle: String; begin Result := rsOptionsEditorTerminal; end; end. doublecmd-1.1.30/src/frames/foptionsterminal.lrj0000644000175000001440000000561715104114162020750 0ustar alexxusers{"version":1,"strings":[ {"hash":144666826,"name":"tfrmoptionsterminal.gbruninterminalstayopen.caption","sourcebytes":[67,111,109,109,97,110,100,32,102,111,114,32,114,117,110,110,105,110,103,32,97,32,99,111,109,109,97,110,100,32,105,110,32,116,101,114,109,105,110,97,108,32,97,110,100,32,115,116,97,121,32,111,112,101,110,58],"value":"Command for running a command in terminal and stay open:"}, {"hash":105087194,"name":"tfrmoptionsterminal.lbrunintermstayopencmd.caption","sourcebytes":[67,111,109,109,97,110,100,58],"value":"Command:"}, {"hash":60572138,"name":"tfrmoptionsterminal.lbrunintermstayopenparams.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,115,58],"value":"Parameters:"}, {"hash":31240492,"name":"tfrmoptionsterminal.edrunintermstayopenparams.hint","sourcebytes":[123,99,111,109,109,97,110,100,125,32,115,104,111,117,108,100,32,110,111,114,109,97,108,108,121,32,98,101,32,112,114,101,115,101,110,116,32,104,101,114,101,32,116,111,32,114,101,102,108,101,99,116,32,116,104,101,32,99,111,109,109,97,110,100,32,116,111,32,98,101,32,114,117,110,32,105,110,32,116,101,114,109,105,110,97,108],"value":"{command} should normally be present here to reflect the command to be run in terminal"}, {"hash":238065354,"name":"tfrmoptionsterminal.gbruninterminalclose.caption","sourcebytes":[67,111,109,109,97,110,100,32,102,111,114,32,114,117,110,110,105,110,103,32,97,32,99,111,109,109,97,110,100,32,105,110,32,116,101,114,109,105,110,97,108,32,97,110,100,32,99,108,111,115,101,32,97,102,116,101,114,58],"value":"Command for running a command in terminal and close after:"}, {"hash":31240492,"name":"tfrmoptionsterminal.edrunintermcloseparams.hint","sourcebytes":[123,99,111,109,109,97,110,100,125,32,115,104,111,117,108,100,32,110,111,114,109,97,108,108,121,32,98,101,32,112,114,101,115,101,110,116,32,104,101,114,101,32,116,111,32,114,101,102,108,101,99,116,32,116,104,101,32,99,111,109,109,97,110,100,32,116,111,32,98,101,32,114,117,110,32,105,110,32,116,101,114,109,105,110,97,108],"value":"{command} should normally be present here to reflect the command to be run in terminal"}, {"hash":105087194,"name":"tfrmoptionsterminal.lbrunintermclosecmd.caption","sourcebytes":[67,111,109,109,97,110,100,58],"value":"Command:"}, {"hash":60572138,"name":"tfrmoptionsterminal.lbrunintermcloseparams.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,115,58],"value":"Parameters:"}, {"hash":113853514,"name":"tfrmoptionsterminal.gbjustrunterminal.caption","sourcebytes":[67,111,109,109,97,110,100,32,102,111,114,32,106,117,115,116,32,114,117,110,110,105,110,103,32,116,101,114,109,105,110,97,108,58],"value":"Command for just running terminal:"}, {"hash":105087194,"name":"tfrmoptionsterminal.lbruntermcmd.caption","sourcebytes":[67,111,109,109,97,110,100,58],"value":"Command:"}, {"hash":60572138,"name":"tfrmoptionsterminal.lbruntermparams.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,115,58],"value":"Parameters:"} ]} doublecmd-1.1.30/src/frames/foptionsterminal.lfm0000644000175000001440000001500715104114162020731 0ustar alexxusersinherited frmOptionsTerminal: TfrmOptionsTerminal Height = 324 Width = 519 HelpKeyword = '/configuration.html#ConfigToolsTerminal' AutoSize = True ClientHeight = 324 ClientWidth = 519 ParentShowHint = False ShowHint = True object gbRunInTerminalStayOpen: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 6 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for running a command in terminal and stay open:' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 62 ClientWidth = 503 TabOrder = 0 object lbRunInTermStayOpenCmd: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 8 Width = 62 Alignment = taRightJustify Caption = 'Command:' ParentColor = False end object edRunInTermStayOpenCmd: TEdit AnchorSideLeft.Control = lbRunInTermStayOpenCmd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunInTermStayOpenCmd AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbRunInTerminalStayOpen AnchorSideRight.Side = asrBottom Left = 78 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object lbRunInTermStayOpenParams: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 35 Width = 62 Alignment = taRightJustify Caption = 'Parameters:' ParentColor = False end object edRunInTermStayOpenParams: TEdit AnchorSideLeft.Control = lbRunInTermStayOpenParams AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunInTermStayOpenParams AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edRunInTermStayOpenCmd AnchorSideRight.Side = asrBottom Left = 78 Height = 23 Hint = '{command} should normally be present here to reflect the command to be run in terminal' Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 1 end end object gbRunInTerminalClose: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbRunInTerminalStayOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 94 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for running a command in terminal and close after:' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 62 ClientWidth = 503 TabOrder = 1 object edRunInTermCloseParams: TEdit AnchorSideLeft.Control = lbRunInTermCloseParams AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunInTermCloseParams AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edRunInTermCloseCmd AnchorSideRight.Side = asrBottom Left = 78 Height = 23 Hint = '{command} should normally be present here to reflect the command to be run in terminal' Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 1 end object edRunInTermCloseCmd: TEdit AnchorSideLeft.Control = lbRunInTermCloseCmd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunInTermCloseCmd AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbRunInTerminalClose AnchorSideRight.Side = asrBottom Left = 78 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object lbRunInTermCloseCmd: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 8 Width = 62 Alignment = taRightJustify Caption = 'Command:' ParentColor = False end object lbRunInTermCloseParams: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 35 Width = 62 Alignment = taRightJustify Caption = 'Parameters:' ParentColor = False end end object gbJustRunTerminal: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbRunInTerminalClose AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 182 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for just running terminal:' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 62 ClientWidth = 503 TabOrder = 2 object lbRunTermCmd: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 8 Width = 62 Alignment = taRightJustify Caption = 'Command:' ParentColor = False end object edRunTermCmd: TEdit AnchorSideLeft.Control = lbRunTermCmd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunTermCmd AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbJustRunTerminal AnchorSideRight.Side = asrBottom Left = 78 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object lbRunTermParams: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 35 Width = 62 Alignment = taRightJustify Caption = 'Parameters:' ParentColor = False end object edRunTermParams: TEdit AnchorSideLeft.Control = lbRunTermParams AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbRunTermParams AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edRunTermCmd AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 78 Height = 23 Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] TabOrder = 1 end end end doublecmd-1.1.30/src/frames/foptionstabsextra.pas0000644000175000001440000001272015104114162021117 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tabs "Extra" options page Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsTabsExtra; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ComCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsTabsExtra } TfrmOptionsTabsExtra = class(TOptionsEditor) cbDefaultExistingTabsToKeep: TComboBox; cbDefaultSaveDirHistory: TComboBox; cbDefaultTargetPanelLeftSaved: TComboBox; cbDefaultTargetPanelRightSaved: TComboBox; cbGoToConfigAfterReSave: TCheckBox; cbGoToConfigAfterSave: TCheckBox; cbUseFavoriteTabsExtraOptions: TCheckBox; gbTabs: TGroupBox; gbDefaultTabSavedRestoration: TGroupBox; lblDefaultExistingTabsToKeep: TLabel; lblFavoriteTabsSaveDirHistory: TLabel; lblDefaultTargetPanelLeftSaved: TLabel; lblDefaultTargetPanelRightSaved: TLabel; rgWhereToAdd: TRadioGroup; procedure cbUseFavoriteTabsExtraOptionsChange(Sender: TObject); private FPageControl: TPageControl; // For checking Tabs capabilities protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Forms, //DC fOptions, DCStrUtils, uLng, uGlobs, ufavoritetabs, fOptionsFavoriteTabs; { TfrmOptionsTabsExtra } procedure TfrmOptionsTabsExtra.cbUseFavoriteTabsExtraOptionsChange(Sender: TObject); var Options: IOptionsDialog = nil; Editor: TOptionsEditor = nil; begin gFavoriteTabsUseRestoreExtraOptions := TCheckBox(Sender).Checked; gbDefaultTabSavedRestoration.Enabled := TCheckBox(Sender).Checked; if not TCheckBox(Sender).Checked then lblFavoriteTabsSaveDirHistory.Caption := rsMsgFavoriteTabsSimpleMode else lblFavoriteTabsSaveDirHistory.Caption := rsMsgFavoriteTabsExtraMode; // Le't be dynamic and update possible already displayed Favorite Tabs Configuration frame. Options := GetOptionsForm; if Options <> nil then // and it will be since we're here! :-) Editor := Options.GetEditor(TfrmOptionsFavoriteTabs); if Editor <> nil then TfrmOptionsFavoriteTabs(Editor).gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; end; { TfrmOptionsTabsExtra.Init } procedure TfrmOptionsTabsExtra.Init; begin FPageControl := TPageControl.Create(Self); ParseLineToList(rsOptFavoriteTabsWhereToAddInList, rgWhereToAdd.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultTargetPanelLeftSaved.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultTargetPanelRightSaved.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultExistingTabsToKeep.Items); ParseLineToList(rsFavTabsSaveDirHistory,cbDefaultSaveDirHistory.Items); end; class function TfrmOptionsTabsExtra.GetIconIndex: integer; begin Result := 38; end; class function TfrmOptionsTabsExtra.GetTitle: string; begin Result := rsOptionsEditorFolderTabsExtra; end; procedure TfrmOptionsTabsExtra.Load; begin cbUseFavoriteTabsExtraOptions.Checked := gFavoriteTabsUseRestoreExtraOptions; cbUseFavoriteTabsExtraOptionsChange(cbUseFavoriteTabsExtraOptions); cbDefaultTargetPanelLeftSaved.ItemIndex := integer(gDefaultTargetPanelLeftSaved); cbDefaultTargetPanelRightSaved.ItemIndex := integer(gDefaultTargetPanelRightSaved); cbDefaultExistingTabsToKeep.ItemIndex := integer(gDefaultExistingTabsToKeep); if gFavoriteTabsSaveDirHistory then cbDefaultSaveDirHistory.ItemIndex := 1 else cbDefaultSaveDirHistory.ItemIndex := 0; rgWhereToAdd.ItemIndex := integer(gWhereToAddNewFavoriteTabs); cbGoToConfigAfterSave.Checked := gFavoriteTabsGoToConfigAfterSave; cbGoToConfigAfterReSave.Checked := gFavoriteTabsGoToConfigAfterReSave; Application.ProcessMessages; end; function TfrmOptionsTabsExtra.Save: TOptionsEditorSaveFlags; begin Result := []; gFavoriteTabsUseRestoreExtraOptions := cbUseFavoriteTabsExtraOptions.Checked; gDefaultTargetPanelLeftSaved := TTabsConfigLocation(cbDefaultTargetPanelLeftSaved.ItemIndex); gDefaultTargetPanelRightSaved := TTabsConfigLocation(cbDefaultTargetPanelRightSaved.ItemIndex); gDefaultExistingTabsToKeep := TTabsConfigLocation(cbDefaultExistingTabsToKeep.ItemIndex); gFavoriteTabsSaveDirHistory := (cbDefaultSaveDirHistory.ItemIndex = 1); gWhereToAddNewFavoriteTabs := TPositionWhereToAddFavoriteTabs(rgWhereToAdd.ItemIndex); gFavoriteTabsGoToConfigAfterSave := cbGoToConfigAfterSave.Checked; gFavoriteTabsGoToConfigAfterReSave := cbGoToConfigAfterReSave.Checked; end; end. doublecmd-1.1.30/src/frames/foptionstabsextra.lrj0000644000175000001440000000745415104114162021133 0ustar alexxusers{"version":1,"strings":[ {"hash":18771569,"name":"tfrmoptionstabsextra.gbtabs.caption","sourcebytes":[70,111,108,100,101,114,32,116,97,98,115,32,104,101,97,100,101,114,115,32,101,120,116,114,97],"value":"Folder tabs headers extra"}, {"hash":148591481,"name":"tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption","sourcebytes":[69,110,97,98,108,101,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,101,120,116,114,97,32,111,112,116,105,111,110,115,32,40,115,101,108,101,99,116,32,116,97,114,103,101,116,32,115,105,100,101,32,119,104,101,110,32,114,101,115,116,111,114,101,44,32,101,116,99,46,41],"value":"Enable Favorite Tabs extra options (select target side when restore, etc.)"}, {"hash":180600330,"name":"tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption","sourcebytes":[68,101,102,97,117,108,116,32,101,120,116,114,97,32,115,101,116,116,105,110,103,115,32,119,104,101,110,32,115,97,118,105,110,103,32,110,101,119,32,70,97,118,111,114,105,116,101,32,84,97,98,115,58],"value":"Default extra settings when saving new Favorite Tabs:"}, {"hash":338900,"name":"tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text","sourcebytes":[76,101,102,116],"value":"Left"}, {"hash":261845882,"name":"tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption","sourcebytes":[84,97,98,115,32,115,97,118,101,100,32,111,110,32,108,101,102,116,32,119,105,108,108,32,98,101,32,114,101,115,116,111,114,101,100,32,116,111,58],"value":"Tabs saved on left will be restored to:"}, {"hash":5832180,"name":"tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text","sourcebytes":[82,105,103,104,116],"value":"Right"}, {"hash":199356746,"name":"tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption","sourcebytes":[84,97,98,115,32,115,97,118,101,100,32,111,110,32,114,105,103,104,116,32,119,105,108,108,32,98,101,32,114,101,115,116,111,114,101,100,32,116,111,58],"value":"Tabs saved on right will be restored to:"}, {"hash":349765,"name":"tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text","sourcebytes":[78,111,110,101],"value":"None"}, {"hash":102588762,"name":"tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption","sourcebytes":[87,104,101,110,32,114,101,115,116,111,114,105,110,103,32,116,97,98,44,32,101,120,105,115,116,105,110,103,32,116,97,98,115,32,116,111,32,107,101,101,112,58],"value":"When restoring tab, existing tabs to keep:"}, {"hash":102690789,"name":"tfrmoptionstabsextra.cbgotoconfigaftersave.caption","sourcebytes":[71,111,116,111,32,116,111,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,67,111,110,102,105,103,117,114,97,116,105,111,110,32,97,102,116,101,114,32,115,97,118,105,110,103,32,97,32,110,101,119,32,111,110,101],"value":"Goto to Favorite Tabs Configuration after saving a new one"}, {"hash":212226695,"name":"tfrmoptionstabsextra.cbgotoconfigafterresave.caption","sourcebytes":[71,111,116,111,32,116,111,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,67,111,110,102,105,103,117,114,97,116,105,111,110,32,97,102,116,101,114,32,114,101,115,97,118,105,110,103],"value":"Goto to Favorite Tabs Configuration after resaving"}, {"hash":115430234,"name":"tfrmoptionstabsextra.rgwheretoadd.caption","sourcebytes":[68,101,102,97,117,108,116,32,112,111,115,105,116,105,111,110,32,105,110,32,109,101,110,117,32,119,104,101,110,32,115,97,118,105,110,103,32,97,32,110,101,119,32,70,97,118,111,114,105,116,101,32,84,97,98,115,58],"value":"Default position in menu when saving a new Favorite Tabs:"}, {"hash":1359,"name":"tfrmoptionstabsextra.cbdefaultsavedirhistory.text","sourcebytes":[78,111],"value":"No"}, {"hash":190887898,"name":"tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption","sourcebytes":[75,101,101,112,32,115,97,118,105,110,103,32,100,105,114,32,104,105,115,116,111,114,121,32,119,105,116,104,32,70,97,118,111,114,105,116,101,32,84,97,98,115,58],"value":"Keep saving dir history with Favorite Tabs:"} ]} doublecmd-1.1.30/src/frames/foptionstabsextra.lfm0000644000175000001440000002016415104114162021113 0ustar alexxusersinherited frmOptionsTabsExtra: TfrmOptionsTabsExtra Height = 418 Width = 720 HelpKeyword = '/configuration.html#ConfigTabsEx' AutoSize = True ClientHeight = 418 ClientWidth = 720 DesignLeft = 140 DesignTop = 288 object gbTabs: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 474 Top = 6 Width = 708 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 Caption = 'Folder tabs headers extra' ChildSizing.TopBottomSpacing = 6 ClientHeight = 444 ClientWidth = 704 TabOrder = 0 object cbUseFavoriteTabsExtraOptions: TCheckBox AnchorSideLeft.Control = gbTabs AnchorSideTop.Control = gbTabs Left = 12 Height = 29 Top = 6 Width = 592 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = 'Enable Favorite Tabs extra options (select target side when restore, etc.)' OnChange = cbUseFavoriteTabsExtraOptionsChange TabOrder = 0 end object gbDefaultTabSavedRestoration: TGroupBox AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Side = asrBottom Left = 12 Height = 153 Top = 45 Width = 450 AutoSize = True BorderSpacing.Top = 10 Caption = 'Default extra settings when saving new Favorite Tabs:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 123 ClientWidth = 446 TabOrder = 1 object cbDefaultTargetPanelLeftSaved: TComboBox AnchorSideTop.Control = gbDefaultTabSavedRestoration AnchorSideRight.Control = gbDefaultTabSavedRestoration AnchorSideRight.Side = asrBottom Left = 340 Height = 33 Top = 6 Width = 100 Anchors = [akTop, akRight] ItemHeight = 25 ItemIndex = 0 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 0 Text = 'Left' end object lblDefaultTargetPanelLeftSaved: TLabel AnchorSideTop.Control = cbDefaultTargetPanelLeftSaved AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultTargetPanelLeftSaved Left = 42 Height = 25 Top = 10 Width = 294 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on left will be restored to:' ParentColor = False end object cbDefaultTargetPanelRightSaved: TComboBox AnchorSideTop.Control = cbDefaultTargetPanelLeftSaved AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDefaultTargetPanelLeftSaved AnchorSideRight.Side = asrBottom Left = 340 Height = 33 Top = 45 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Top = 6 ItemHeight = 25 ItemIndex = 1 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 1 Text = 'Right' end object lblDefaultTargetPanelRightSaved: TLabel AnchorSideTop.Control = cbDefaultTargetPanelRightSaved AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultTargetPanelRightSaved Left = 30 Height = 25 Top = 49 Width = 306 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on right will be restored to:' ParentColor = False end object cbDefaultExistingTabsToKeep: TComboBox AnchorSideTop.Control = cbDefaultTargetPanelRightSaved AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDefaultTargetPanelRightSaved AnchorSideRight.Side = asrBottom Left = 340 Height = 33 Top = 84 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Top = 6 ItemHeight = 25 ItemIndex = 5 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 2 Text = 'None' end object lblDefaultExistingTabsToKeep: TLabel AnchorSideTop.Control = cbDefaultExistingTabsToKeep AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultExistingTabsToKeep Left = 6 Height = 25 Top = 88 Width = 330 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 Caption = 'When restoring tab, existing tabs to keep:' ParentColor = False end end object cbGoToConfigAfterSave: TCheckBox AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = rgWhereToAdd AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 12 Height = 29 Top = 380 Width = 499 BorderSpacing.Top = 10 Caption = 'Goto to Favorite Tabs Configuration after saving a new one' TabOrder = 4 end object cbGoToConfigAfterReSave: TCheckBox AnchorSideLeft.Control = gbDefaultTabSavedRestoration AnchorSideTop.Control = cbGoToConfigAfterSave AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 12 Height = 29 Top = 409 Width = 428 Caption = 'Goto to Favorite Tabs Configuration after resaving' TabOrder = 5 end object rgWhereToAdd: TRadioGroup AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbDefaultSaveDirHistory AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDefaultTabSavedRestoration AnchorSideRight.Side = asrBottom Left = 12 Height = 129 Top = 241 Width = 450 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 4 Caption = 'Default position in menu when saving a new Favorite Tabs:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 99 ClientWidth = 446 Constraints.MinWidth = 200 Items.Strings = ( 'Add at beginning' 'Add at the end' 'Alphabetical order' ) TabOrder = 3 end object cbDefaultSaveDirHistory: TComboBox AnchorSideLeft.Control = lblFavoriteTabsSaveDirHistory AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbDefaultTabSavedRestoration AnchorSideTop.Side = asrBottom Left = 345 Height = 33 Top = 204 Width = 100 BorderSpacing.Top = 6 ItemHeight = 25 ItemIndex = 0 Items.Strings = ( 'No' 'Yes' ) Style = csDropDownList TabOrder = 2 Text = 'No' end object lblFavoriteTabsSaveDirHistory: TLabel AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbDefaultSaveDirHistory AnchorSideTop.Side = asrCenter Left = 12 Height = 25 Top = 208 Width = 329 BorderSpacing.Top = 6 BorderSpacing.Right = 4 Caption = 'Keep saving dir history with Favorite Tabs:' ParentColor = False end end end doublecmd-1.1.30/src/frames/foptionstabs.pas0000644000175000001440000001531015104114162020051 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Tabs options page Copyright (C) 2006-2016 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsTabs; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ComCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsTabs } TfrmOptionsTabs = class(TOptionsEditor) cbTabsActivateOnClick: TCheckBox; cbTabsAlwaysVisible: TCheckBox; cbTabsConfirmCloseAll: TCheckBox; cbTabsLimitOption: TCheckBox; cbTabsLockedAsterisk: TCheckBox; cbTabsMultiLines: TCheckBox; cbTabsOpenForeground: TCheckBox; cbTabsOpenNearCurrent: TCheckBox; cbTabsShowCloseButton: TCheckBox; cmbTabsPosition: TComboBox; cbTabsActionOnDoubleClick: TComboBox; edtTabsLimitLength: TEdit; gbTabs: TGroupBox; lblTabsActionOnDoubleClick: TLabel; lblChar: TLabel; lblTabsPosition: TLabel; cbKeepRenamedNameBackToNormal: TCheckBox; cbTabsConfirmCloseLocked: TCheckBox; cbTabsReuseTabWhenPossible: TCheckBox; cbTabsShowDriveLetter: TCheckBox; cbTabsCloseDuplicateWhenClosing: TCheckBox; private FPageControl: TPageControl; // For checking Tabs capabilities protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses Forms, DCStrUtils, uLng, uGlobs; { TfrmOptionsTabs } procedure TfrmOptionsTabs.Init; begin ParseLineToList(rsOptTabsPosition, cmbTabsPosition.Items); ParseLineToList(rsTabsActionOnDoubleClickChoices, cbTabsActionOnDoubleClick.Items); FPageControl := TPageControl.Create(Self); end; class function TfrmOptionsTabs.GetIconIndex: integer; begin Result := 9; end; class function TfrmOptionsTabs.GetTitle: string; begin Result := rsOptionsEditorFolderTabs; end; procedure TfrmOptionsTabs.Load; begin {$IFDEF MSWINDOWS} cbTabsShowDriveLetter.Visible := True; {$ENDIF} cbTabsAlwaysVisible.Checked := (tb_always_visible in gDirTabOptions) and gDirectoryTabs; cbTabsLimitOption.Checked := tb_text_length_limit in gDirTabOptions; cbTabsConfirmCloseAll.Checked := tb_confirm_close_all in gDirTabOptions; cbTabsConfirmCloseLocked.Checked := tb_confirm_close_locked_tab in gDirTabOptions; cbTabsCloseDuplicateWhenClosing.Checked := tb_close_duplicate_when_closing in gDirTabOptions; cbTabsOpenForeground.Checked := tb_open_new_in_foreground in gDirTabOptions; cbTabsOpenNearCurrent.Checked := tb_open_new_near_current in gDirTabOptions; cbTabsReuseTabWhenPossible.Checked := tb_reusing_tab_when_possible in gDirTabOptions; cbTabsLockedAsterisk.Checked := tb_show_asterisk_for_locked in gDirTabOptions; cbKeepRenamedNameBackToNormal.Checked := tb_keep_renamed_when_back_normal in gDirTabOptions; cbTabsActivateOnClick.Checked := tb_activate_panel_on_click in gDirTabOptions; cbTabsShowDriveLetter.Checked := tb_show_drive_letter in gDirTabOptions; cbTabsActionOnDoubleClick.ItemIndex := integer(gDirTabActionOnDoubleClick); if cbTabsActionOnDoubleClick.ItemIndex = -1 then cbTabsActionOnDoubleClick.ItemIndex := 1; // Because with r6597 to r6599 we saved incorrect value for "gDirTabActionOnDoubleClick"... cbTabsActionOnDoubleClick.Refresh; cbTabsMultiLines.Visible := (nbcMultiline in FPageControl.GetCapabilities); if cbTabsMultiLines.Visible then cbTabsMultiLines.Checked := tb_multiple_lines in gDirTabOptions; cbTabsShowCloseButton.Visible := (nbcShowCloseButtons in FPageControl.GetCapabilities); if cbTabsShowCloseButton.Visible then cbTabsShowCloseButton.Checked := tb_show_close_button in gDirTabOptions; edtTabsLimitLength.Text := IntToStr(gDirTabLimit); case gDirTabPosition of tbpos_top: cmbTabsPosition.ItemIndex := 0; tbpos_bottom: cmbTabsPosition.ItemIndex := 1; else cmbTabsPosition.ItemIndex := 0; end; Application.ProcessMessages; end; function TfrmOptionsTabs.Save: TOptionsEditorSaveFlags; begin Result := []; gDirTabOptions := []; // Reset tab options if cbTabsAlwaysVisible.Checked then gDirTabOptions := gDirTabOptions + [tb_always_visible]; if cbTabsMultiLines.Checked then gDirTabOptions := gDirTabOptions + [tb_multiple_lines]; if cbTabsLimitOption.Checked then gDirTabOptions := gDirTabOptions + [tb_text_length_limit]; if cbTabsConfirmCloseAll.Checked then gDirTabOptions := gDirTabOptions + [tb_confirm_close_all]; if cbTabsConfirmCloseLocked.Checked then gDirTabOptions := gDirTabOptions + [tb_confirm_close_locked_tab]; if cbTabsCloseDuplicateWhenClosing.Checked then gDirTabOptions := gDirTabOptions + [tb_close_duplicate_when_closing]; if cbTabsOpenForeground.Checked then gDirTabOptions := gDirTabOptions + [tb_open_new_in_foreground]; if cbTabsOpenNearCurrent.Checked then gDirTabOptions := gDirTabOptions + [tb_open_new_near_current]; if cbTabsReuseTabWhenPossible.Checked then gDirTabOptions := gDirTabOptions + [tb_reusing_tab_when_possible]; if cbTabsLockedAsterisk.Checked then gDirTabOptions := gDirTabOptions + [tb_show_asterisk_for_locked]; if cbKeepRenamedNameBackToNormal.Checked then gDirTabOptions := gDirTabOptions + [tb_keep_renamed_when_back_normal]; if cbTabsActivateOnClick.Checked then gDirTabOptions := gDirTabOptions + [tb_activate_panel_on_click]; if cbTabsShowDriveLetter.Checked then gDirTabOptions := gDirTabOptions + [tb_show_drive_letter]; if cbTabsShowCloseButton.Checked then gDirTabOptions := gDirTabOptions + [tb_show_close_button]; gDirTabActionOnDoubleClick := TTabsOptionsDoubleClick(cbTabsActionOnDoubleClick.ItemIndex); gDirTabLimit := StrToIntDef(edtTabsLimitLength.Text, 32); case cmbTabsPosition.ItemIndex of 0: gDirTabPosition := tbpos_top; 1: gDirTabPosition := tbpos_bottom; end; end; end. doublecmd-1.1.30/src/frames/foptionstabs.lrj0000644000175000001440000001056115104114162020060 0ustar alexxusers{"version":1,"strings":[ {"hash":74618355,"name":"tfrmoptionstabs.gbtabs.caption","sourcebytes":[70,111,108,100,101,114,32,116,97,98,115,32,104,101,97,100,101,114,115],"value":"Folder tabs headers"}, {"hash":142357011,"name":"tfrmoptionstabs.lblchar.caption","sourcebytes":[99,104,97,114,97,99,116,101,114,115],"value":"characters"}, {"hash":90832526,"name":"tfrmoptionstabs.lbltabsposition.caption","sourcebytes":[84,97,38,98,115,32,112,111,115,105,116,105,111,110],"value":"Ta&bs position"}, {"hash":192530514,"name":"tfrmoptionstabs.cbtabsalwaysvisible.caption","sourcebytes":[38,83,104,111,119,32,116,97,98,32,104,101,97,100,101,114,32,97,108,115,111,32,119,104,101,110,32,116,104,101,114,101,32,105,115,32,111,110,108,121,32,111,110,101,32,116,97,98],"value":"&Show tab header also when there is only one tab"}, {"hash":135553331,"name":"tfrmoptionstabs.cbtabsmultilines.caption","sourcebytes":[38,84,97,98,115,32,111,110,32,109,117,108,116,105,112,108,101,32,108,105,110,101,115],"value":"&Tabs on multiple lines"}, {"hash":12421679,"name":"tfrmoptionstabs.cbtabslimitoption.caption","sourcebytes":[38,76,105,109,105,116,32,116,97,98,32,116,105,116,108,101,32,108,101,110,103,116,104,32,116,111],"value":"&Limit tab title length to"}, {"hash":262751956,"name":"tfrmoptionstabs.cbtabsopenforeground.caption","sourcebytes":[67,116,114,108,43,38,85,112,32,111,112,101,110,115,32,110,101,119,32,116,97,98,32,105,110,32,102,111,114,101,103,114,111,117,110,100],"value":"Ctrl+&Up opens new tab in foreground"}, {"hash":46942083,"name":"tfrmoptionstabs.cbtabsconfirmcloseall.caption","sourcebytes":[67,111,110,38,102,105,114,109,32,99,108,111,115,101,32,97,108,108,32,116,97,98,115],"value":"Con&firm close all tabs"}, {"hash":173431514,"name":"tfrmoptionstabs.cbtabslockedasterisk.caption","sourcebytes":[83,104,111,119,32,108,111,99,107,101,100,32,116,97,98,115,32,38,119,105,116,104,32,97,110,32,97,115,116,101,114,105,115,107,32,42],"value":"Show locked tabs &with an asterisk *"}, {"hash":204561027,"name":"tfrmoptionstabs.cbtabsactivateonclick.caption","sourcebytes":[65,99,116,105,118,97,116,101,32,116,97,114,103,101,116,32,38,112,97,110,101,108,32,119,104,101,110,32,99,108,105,99,107,105,110,103,32,111,110,32,111,110,101,32,111,102,32,105,116,115,32,84,97,98,115],"value":"Activate target &panel when clicking on one of its Tabs"}, {"hash":157446414,"name":"tfrmoptionstabs.cbtabsshowclosebutton.caption","sourcebytes":[83,104,111,119,32,116,97,38,98,32,99,108,111,115,101,32,98,117,116,116,111,110],"value":"Show ta&b close button"}, {"hash":97026210,"name":"tfrmoptionstabs.cbtabsopennearcurrent.caption","sourcebytes":[79,112,101,110,32,38,110,101,119,32,116,97,98,115,32,110,101,97,114,32,99,117,114,114,101,110,116,32,116,97,98],"value":"Open &new tabs near current tab"}, {"hash":263911774,"name":"tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption","sourcebytes":[67,108,111,115,101,32,100,117,112,108,105,99,97,116,101,32,116,97,98,115,32,119,104,101,110,32,99,108,111,115,105,110,103,32,97,112,112,108,105,99,97,116,105,111,110],"value":"Close duplicate tabs when closing application"}, {"hash":73851701,"name":"tfrmoptionstabs.cbtabsshowdriveletter.caption","sourcebytes":[65,108,119,97,121,115,32,115,104,111,119,32,100,114,105,118,101,32,108,101,116,116,101,114,32,105,110,32,116,97,98,32,116,105,116,108,101],"value":"Always show drive letter in tab title"}, {"hash":33183493,"name":"tfrmoptionstabs.cbtabsreusetabwhenpossible.caption","sourcebytes":[82,101,117,115,101,32,101,120,105,115,116,105,110,103,32,116,97,98,32,119,104,101,110,32,112,111,115,115,105,98,108,101],"value":"Reuse existing tab when possible"}, {"hash":152684499,"name":"tfrmoptionstabs.cbtabsconfirmcloselocked.caption","sourcebytes":[67,111,110,102,105,114,109,32,99,108,111,115,101,32,108,111,99,107,101,100,32,116,97,98,115],"value":"Confirm close locked tabs"}, {"hash":29336242,"name":"tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption","sourcebytes":[75,101,101,112,32,114,101,110,97,109,101,100,32,110,97,109,101,32,119,104,101,110,32,117,110,108,111,99,107,105,110,103,32,97,32,116,97,98],"value":"Keep renamed name when unlocking a tab"}, {"hash":241063306,"name":"tfrmoptionstabs.lbltabsactionondoubleclick.caption","sourcebytes":[65,99,116,105,111,110,32,116,111,32,100,111,32,119,104,101,110,32,100,111,117,98,108,101,32,99,108,105,99,107,32,111,110,32,97,32,116,97,98,58],"value":"Action to do when double click on a tab:"} ]} doublecmd-1.1.30/src/frames/foptionstabs.lfm0000644000175000001440000002035715104114162020053 0ustar alexxusersinherited frmOptionsTabs: TfrmOptionsTabs Height = 492 Width = 731 HelpKeyword = '/configuration.html#ConfigTabs' ClientHeight = 492 ClientWidth = 731 DesignLeft = 147 DesignTop = 342 object gbTabs: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 434 Top = 6 Width = 719 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 Caption = 'Folder tabs headers' ChildSizing.TopBottomSpacing = 6 ClientHeight = 414 ClientWidth = 715 TabOrder = 0 object lblChar: TLabel AnchorSideLeft.Control = edtTabsLimitLength AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtTabsLimitLength AnchorSideTop.Side = asrCenter Left = 239 Height = 15 Top = 58 Width = 54 BorderSpacing.Left = 6 Caption = 'characters' ParentColor = False end object lblTabsPosition: TLabel AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cmbTabsPosition AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 360 Width = 71 BorderSpacing.Top = 14 Caption = 'Ta&bs position' FocusControl = cmbTabsPosition ParentColor = False end object cbTabsAlwaysVisible: TCheckBox AnchorSideLeft.Control = gbTabs AnchorSideTop.Control = gbTabs Left = 12 Height = 19 Top = 6 Width = 274 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = '&Show tab header also when there is only one tab' TabOrder = 0 end object cbTabsMultiLines: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsAlwaysVisible AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 31 Width = 136 BorderSpacing.Top = 6 Caption = '&Tabs on multiple lines' TabOrder = 1 end object cbTabsLimitOption: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsMultiLines AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 56 Width = 141 BorderSpacing.Top = 6 Caption = '&Limit tab title length to' TabOrder = 2 end object edtTabsLimitLength: TEdit AnchorSideLeft.Control = cbTabsLimitOption AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTabsLimitOption AnchorSideTop.Side = asrCenter Left = 153 Height = 23 Top = 54 Width = 80 TabOrder = 3 end object cbTabsOpenForeground: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsCloseDuplicateWhenClosing AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 156 Width = 218 BorderSpacing.Top = 6 Caption = 'Ctrl+&Up opens new tab in foreground' TabOrder = 7 end object cbTabsConfirmCloseAll: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsConfirmCloseLocked AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 106 Width = 134 BorderSpacing.Top = 6 Caption = 'Con&firm close all tabs' TabOrder = 5 end object cbTabsLockedAsterisk: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsShowCloseButton AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 256 Width = 204 BorderSpacing.Top = 6 Caption = 'Show locked tabs &with an asterisk *' TabOrder = 11 end object cbTabsActivateOnClick: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbKeepRenamedNameBackToNormal AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 306 Width = 302 BorderSpacing.Top = 6 Caption = 'Activate target &panel when clicking on one of its Tabs' TabOrder = 13 end object cbTabsShowCloseButton: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsReuseTabWhenPossible AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 231 Width = 138 BorderSpacing.Top = 6 Caption = 'Show ta&b close button' TabOrder = 10 end object cmbTabsPosition: TComboBox AnchorSideLeft.Control = lblTabsPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTabsShowDriveLetter AnchorSideTop.Side = asrBottom Left = 89 Height = 23 Top = 356 Width = 100 BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 ItemHeight = 15 Items.Strings = ( 'Top' 'Bottom' ) Style = csDropDownList TabOrder = 15 end object cbTabsOpenNearCurrent: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsOpenForeground AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 181 Width = 186 BorderSpacing.Top = 6 Caption = 'Open &new tabs near current tab' TabOrder = 8 end object cbTabsCloseDuplicateWhenClosing: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsConfirmCloseAll AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 131 Width = 261 BorderSpacing.Top = 6 Caption = 'Close duplicate tabs when closing application' TabOrder = 6 end object cbTabsShowDriveLetter: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsActivateOnClick AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 331 Width = 203 BorderSpacing.Top = 6 Caption = 'Always show drive letter in tab title' TabOrder = 14 Visible = False end object cbTabsReuseTabWhenPossible: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsOpenNearCurrent AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 206 Width = 192 BorderSpacing.Top = 6 Caption = 'Reuse existing tab when possible' TabOrder = 9 end object cbTabsConfirmCloseLocked: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsLimitOption AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 81 Width = 157 BorderSpacing.Top = 6 Caption = 'Confirm close locked tabs' TabOrder = 4 end object cbKeepRenamedNameBackToNormal: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsLockedAsterisk AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 281 Width = 246 BorderSpacing.Top = 6 Caption = 'Keep renamed name when unlocking a tab' TabOrder = 12 end object lblTabsActionOnDoubleClick: TLabel AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsActionOnDoubleClick AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 389 Width = 214 Caption = 'Action to do when double click on a tab:' ParentColor = False end object cbTabsActionOnDoubleClick: TComboBox AnchorSideLeft.Control = lblTabsActionOnDoubleClick AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbTabsPosition AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbTabs AnchorSideRight.Side = asrBottom Left = 232 Height = 23 Top = 385 Width = 477 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ItemHeight = 15 Items.Strings = ( 'Do nothing' 'Close tab' 'Access Favorite Tabs' 'Tabs popup menu' ) Style = csDropDownList TabOrder = 16 end end end doublecmd-1.1.30/src/frames/foptionsquicksearchfilter.pas0000644000175000001440000000660715104114162022641 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Quick search/filter options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsQuickSearchFilter; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsQuickSearchFilter } TfrmOptionsQuickSearchFilter = class(TOptionsEditor) cbExactBeginning: TCheckBox; cbExactEnding: TCheckBox; cgpOptions: TCheckGroup; gbExactNameMatch: TGroupBox; rgpSearchCase: TRadioGroup; rgpSearchItems: TRadioGroup; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng, fQuickSearch; const OPTION_AUTOHIDE_POSITION = 0; OPTION_SAVE_SESSION_MODIFICATIONS = 1; { TfrmOptionsQuickSearchFilter } class function TfrmOptionsQuickSearchFilter.GetIconIndex: Integer; begin Result := 12; end; class function TfrmOptionsQuickSearchFilter.GetTitle: String; begin Result := rsOptionsEditorQuickSearch; end; procedure TfrmOptionsQuickSearchFilter.Init; begin // Copy localized strings to each combo box. ParseLineToList(rsOptSearchItems, rgpSearchItems.Items); ParseLineToList(rsOptSearchCase, rgpSearchCase.Items); ParseLineToList(rsOptSearchOpt, cgpOptions.Items); end; procedure TfrmOptionsQuickSearchFilter.Load; begin cbExactBeginning.Checked := qsmBeginning in gQuickSearchOptions.Match; cbExactEnding.Checked := qsmEnding in gQuickSearchOptions.Match; rgpSearchItems.ItemIndex := Integer(gQuickSearchOptions.Items); rgpSearchCase.ItemIndex := Integer(gQuickSearchOptions.SearchCase); cgpOptions.Checked[OPTION_AUTOHIDE_POSITION] := gQuickFilterAutoHide; cgpOptions.Checked[OPTION_SAVE_SESSION_MODIFICATIONS] := gQuickFilterSaveSessionModifications; end; function TfrmOptionsQuickSearchFilter.Save: TOptionsEditorSaveFlags; begin Result := []; if cbExactBeginning.Checked then Include(gQuickSearchOptions.Match, qsmBeginning) else Exclude(gQuickSearchOptions.Match, qsmBeginning); if cbExactEnding.Checked then Include(gQuickSearchOptions.Match, qsmEnding) else Exclude(gQuickSearchOptions.Match, qsmEnding); gQuickSearchOptions.Items := TQuickSearchItems(rgpSearchItems.ItemIndex); gQuickSearchOptions.SearchCase := TQuickSearchCase(rgpSearchCase.ItemIndex); gQuickFilterAutoHide := cgpOptions.Checked[OPTION_AUTOHIDE_POSITION]; gQuickFilterSaveSessionModifications := cgpOptions.Checked[OPTION_SAVE_SESSION_MODIFICATIONS]; end; end. doublecmd-1.1.30/src/frames/foptionsquicksearchfilter.lrj0000644000175000001440000000265715104114162022646 0ustar alexxusers{"version":1,"strings":[ {"hash":219152600,"name":"tfrmoptionsquicksearchfilter.gbexactnamematch.caption","sourcebytes":[69,120,97,99,116,32,110,97,109,101,32,109,97,116,99,104],"value":"Exact name match"}, {"hash":216088953,"name":"tfrmoptionsquicksearchfilter.cbexactbeginning.caption","sourcebytes":[38,66,101,103,105,110,110,105,110,103,32,40,110,97,109,101,32,109,117,115,116,32,115,116,97,114,116,32,119,105,116,104,32,102,105,114,115,116,32,116,121,112,101,100,32,99,104,97,114,97,99,116,101,114,41],"value":"&Beginning (name must start with first typed character)"}, {"hash":126009481,"name":"tfrmoptionsquicksearchfilter.cbexactending.caption","sourcebytes":[69,110,38,100,105,110,103,32,40,108,97,115,116,32,99,104,97,114,97,99,116,101,114,32,98,101,102,111,114,101,32,97,32,116,121,112,101,100,32,100,111,116,32,46,32,109,117,115,116,32,109,97,116,99,104,41],"value":"En&ding (last character before a typed dot . must match)"}, {"hash":194363443,"name":"tfrmoptionsquicksearchfilter.rgpsearchitems.caption","sourcebytes":[83,101,97,114,99,104,32,102,111,114,32,116,104,101,115,101,32,105,116,101,109,115],"value":"Search for these items"}, {"hash":167714837,"name":"tfrmoptionsquicksearchfilter.rgpsearchcase.caption","sourcebytes":[83,101,97,114,99,104,32,99,97,115,101],"value":"Search case"}, {"hash":108725763,"name":"tfrmoptionsquicksearchfilter.cgpoptions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"} ]} doublecmd-1.1.30/src/frames/foptionsquicksearchfilter.lfm0000644000175000001440000001065115104114162022626 0ustar alexxusersinherited frmOptionsQuickSearchFilter: TfrmOptionsQuickSearchFilter Height = 354 Width = 702 HelpKeyword = '/configuration.html#ConfigQuick' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 354 ClientWidth = 702 DesignLeft = 418 DesignTop = 232 object gbExactNameMatch: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 68 Top = 6 Width = 690 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Exact name match' ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 4 ClientHeight = 50 ClientWidth = 686 TabOrder = 0 object cbExactBeginning: TCheckBox AnchorSideLeft.Control = gbExactNameMatch AnchorSideTop.Control = gbExactNameMatch Left = 10 Height = 19 Top = 6 Width = 305 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&Beginning (name must start with first typed character)' TabOrder = 0 end object cbExactEnding: TCheckBox AnchorSideLeft.Control = cbExactBeginning AnchorSideTop.Control = cbExactBeginning AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = gbExactNameMatch AnchorSideBottom.Side = asrBottom Left = 10 Height = 15 Top = 29 Width = 311 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Bottom = 6 Caption = 'En&ding (last character before a typed dot . must match)' TabOrder = 1 end end object rgpSearchItems: TRadioGroup[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbExactNameMatch AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 87 Top = 74 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Search for these items' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 69 ClientWidth = 686 Items.Strings = ( 'Files' 'Directories' 'Files and Directories' ) TabOrder = 1 end object rgpSearchCase: TRadioGroup[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = rgpSearchItems AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 68 Top = 161 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Search case' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 686 Items.Strings = ( 'Sensitive' 'Insensitive' ) TabOrder = 2 end object cgpOptions: TCheckGroup[3] AnchorSideLeft.Control = Owner AnchorSideTop.Control = rgpSearchCase AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 68 Top = 229 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 686 Items.Strings = ( 'Hide filter panel when not focused' 'Keep saving setting modifications for next session' ) TabOrder = 3 Data = { 020000000202 } end end doublecmd-1.1.30/src/frames/foptionspluginswlx.pas0000644000175000001440000001636715104114162021351 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WLX options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsWLX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, Grids, Buttons, Controls, ExtCtrls, //DC fOptionsFrame, uWLXModule, foptionspluginsbase; type { TfrmOptionsPluginsWLX } TfrmOptionsPluginsWLX = class(TfrmOptionsPluginsBase) procedure btnAddPluginClick(Sender: TObject); procedure btnEnablePluginClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, aRow: integer); override; procedure ActualAddPlugin(sPluginFilename: string); override; procedure ActualDeletePlugin(iIndex: integer); override; procedure ActualPluginsMove(iSource, iDestination: integer); override; public class function GetTitle: string; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ShowPluginsTable; override; end; var tmpWLXPlugins: TWLXModuleList; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, LCLProc, Forms, Dialogs, DynLibs, //DC uLng, uGlobs, dmCommonData, DCStrUtils, DCConvertEncoding, uDefaultPlugins; const COLNO_ACTIVE = 0; COLNO_NAME = 1; COLNO_EXT = 2; COLNO_FILENAME = 3; { TfrmOptionsPluginsWLX } { TfrmOptionsPluginsWLX.Init } procedure TfrmOptionsPluginsWLX.Init; begin PluginType := ptWLX; inherited Init; btnConfigPlugin.Visible := False; tmpWLXPlugins := TWLXModuleList.Create; end; { TfrmOptionsPluginsWLX.Load } procedure TfrmOptionsPluginsWLX.Load; begin tmpWLXPlugins.Assign(gWLXPlugins); ShowPluginsTable; end; { TfrmOptionsPluginsWLX.Save } function TfrmOptionsPluginsWLX.Save: TOptionsEditorSaveFlags; begin gWLXPlugins.Assign(tmpWLXPlugins); Result := []; end; { TfrmOptionsPluginsWLX.Done } procedure TfrmOptionsPluginsWLX.Done; begin FreeAndNil(tmpWLXPlugins); end; { TfrmOptionsPluginsWLX.GetTitle } class function TfrmOptionsPluginsWLX.GetTitle: string; begin Result := rsOptionsEditorPlugins + ' WLX'; end; { TfrmOptionsPluginsWLX.ExtraOptionsSignature } function TfrmOptionsPluginsWLX.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := tmpWLXPlugins.ComputeSignature(CurrentSignature); end; { TfrmOptionsPluginsWLX.ShowPluginsTable } procedure TfrmOptionsPluginsWLX.ShowPluginsTable; var I: integer; begin stgPlugins.RowCount := tmpWLXPlugins.Count + stgPlugins.FixedRows; for i := 0 to pred(tmpWLXPlugins.Count) do begin stgPlugins.Cells[COLNO_ACTIVE, I + stgPlugins.FixedRows] := IfThen(tmpWLXPlugins.GetWlxModule(i).Enabled, '+', '-'); stgPlugins.Cells[COLNO_NAME, I + stgPlugins.FixedRows] := tmpWLXPlugins.GetWlxModule(i).Name; stgPlugins.Cells[COLNO_EXT, I + stgPlugins.FixedRows] := tmpWLXPlugins.GetWlxModule(i).DetectStr; stgPlugins.Cells[COLNO_FILENAME, I + stgPlugins.FixedRows] := tmpWLXPlugins.GetWlxModule(i).FileName; end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWLX.stgPluginsOnSelection } procedure TfrmOptionsPluginsWLX.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); var bEnable: boolean = False; bEnabled: boolean; begin if (aRow > 0) and (aRow < stgPlugins.RowCount) then begin bEnabled := (stgPlugins.Cells[COLNO_ACTIVE, aRow] = '-'); btnEnablePlugin.Caption := IfThen(bEnabled, rsOptPluginEnable, rsOptPluginDisable); if bEnabled then btnEnablePlugin.Glyph.Assign(ImgSwitchDisable.Picture.Bitmap) else btnEnablePlugin.Glyph.Assign(ImgSwitchEnable.Picture.Bitmap); bEnable := True; end; btnEnablePlugin.Enabled := bEnable; btnRemovePlugin.Enabled := bEnable; btnTweakPlugin.Enabled := bEnable; btnConfigPlugin.Enabled := bEnable; end; { TfrmOptionsPluginsWFX.btnAddPluginClick } procedure TfrmOptionsPluginsWLX.btnAddPluginClick(Sender: TObject); begin dmComData.OpenDialog.Filter := Format('Viewer plugins (%s)|%s', [WlxMask, WlxMask]); if dmComData.OpenDialog.Execute then ActualAddPlugin(dmComData.OpenDialog.FileName); end; { TfrmOptionsPluginsWLX.ActualAddPlugin } procedure TfrmOptionsPluginsWLX.ActualAddPlugin(sPluginFilename: string); const cNextLine = LineEnding + LineEnding; var I, J: integer; sPluginName: string; begin if not CheckPlugin(sPluginFilename) then Exit; sPluginName := ExtractOnlyFileName(sPluginFilename); I := tmpWLXPlugins.Add(sPluginName, GetPluginFilenameToSave(sPluginFilename), EmptyStr); if not tmpWLXPlugins.LoadModule(pred(tmpWLXPlugins.Count)) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin + cNextLine + CeSysToUtf8(GetLoadErrorStr), mtError, [mbOK], 0, mbOK); tmpWLXPlugins.DeleteItem(I); Exit; end; tmpWLXPlugins.GetWlxModule(pred(tmpWLXPlugins.Count)).DetectStr := tmpWLXPlugins.GetWlxModule(pred(tmpWLXPlugins.Count)).CallListGetDetectString; stgPlugins.RowCount := stgPlugins.RowCount + 1; J := pred(stgPlugins.RowCount); stgPlugins.Cells[COLNO_ACTIVE, J] := '+'; stgPlugins.Cells[COLNO_NAME, J] := tmpWLXPlugins.GetWlxModule(I).Name; stgPlugins.Cells[COLNO_EXT, J] := tmpWLXPlugins.GetWlxModule(I).DetectStr; stgPlugins.Cells[COLNO_FILENAME, J] := tmpWLXPlugins.GetWlxModule(I).FileName; stgPlugins.Row := J; //This will trig automatically the "OnSelection" event. if gPluginInAutoTweak then btnTweakPlugin.click; end; { TfrmOptionsPluginsWLX.ActualDeletePlugin } procedure TfrmOptionsPluginsWLX.ActualDeletePlugin(iIndex: integer); begin tmpWLXPlugins.DeleteItem(iIndex); end; { TfrmOptionsPluginsWLX.ActualPluginsMove } procedure TfrmOptionsPluginsWLX.ActualPluginsMove(iSource, iDestination: integer); begin tmpWLXPlugins.Move(iSource, iDestination); end; { TfrmOptionsPluginsWLX.btnEnablePluginClick } procedure TfrmOptionsPluginsWLX.btnEnablePluginClick(Sender: TObject); begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; with tmpWLXPlugins.GetWlxModule(stgPlugins.Row - stgPlugins.FixedRows) do begin Enabled := not Enabled; stgPlugins.Cells[COLNO_ACTIVE, stgPlugins.Row] := IfThen(Enabled, '+', '-'); btnEnablePlugin.Caption := IfThen(Enabled, rsOptPluginDisable, rsOptPluginEnable); end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; end. doublecmd-1.1.30/src/frames/foptionspluginswlx.lrj0000644000175000001440000000241215104114162021337 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginswlx.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginswlx.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginswlx.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginswlx.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":128139241,"name":"tfrmoptionspluginswlx.lblplugindescription.caption","sourcebytes":[86,105,101,38,119,101,114,32,112,108,117,103,105,110,115,32,97,108,108,111,119,32,111,110,101,32,116,111,32,100,105,115,112,108,97,121,32,102,105,108,101,32,102,111,114,109,97,116,115,32,108,105,107,101,32,105,109,97,103,101,115,44,32,115,112,114,101,97,100,115,104,101,101,116,115,44,32,100,97,116,97,98,97,115,101,115,32,101,116,99,46,32,105,110,32,86,105,101,119,101,114,32,40,70,51,44,32,67,116,114,108,43,81,41],"value":"Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)"} ]} doublecmd-1.1.30/src/frames/foptionspluginswlx.lfm0000644000175000001440000000142615104114162021332 0ustar alexxusersinherited frmOptionsPluginsWLX: TfrmOptionsPluginsWLX inherited stgPlugins: TStringGrid AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner end inherited pnlPlugIn: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner inherited lblPlugInDescription: TLabel Caption = 'Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)' end end inherited pnlButton: TPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideBottom.Control = Owner inherited btnAddPlugin: TBitBtn OnClick = btnAddPluginClick end inherited btnEnablePlugin: TBitBtn OnClick = btnEnablePluginClick end end end doublecmd-1.1.30/src/frames/foptionspluginswfx.pas0000644000175000001440000001730215104114162021331 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WFX options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsWFX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, Grids, Buttons, Controls, ExtCtrls, //DC uDCUtils, fOptionsFrame, uWFXModule, foptionspluginsbase; type { TfrmOptionsPluginsWFX } TfrmOptionsPluginsWFX = class(TfrmOptionsPluginsBase) procedure btnAddPluginClick(Sender: TObject); procedure btnEnablePluginClick(Sender: TObject); procedure btnConfigPluginClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, aRow: integer); override; procedure ActualAddPlugin(sPluginFilename: string); override; procedure ActualDeletePlugin(iIndex: integer); override; procedure ActualPluginsMove(iSource, iDestination: integer); override; public class function GetTitle: string; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ShowPluginsTable; override; end; var tmpWFXPlugins: TWFXModuleList; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, LCLProc, Forms, Dialogs, //DC uLng, uGlobs, uShowMsg, dmCommonData, DCStrUtils, uDefaultPlugins; const COLNO_ACTIVE = 0; COLNO_NAME = 1; COLNO_FILENAME = 2; { TfrmOptionsPluginsWFX } { TfrmOptionsPluginsWFX.Init } procedure TfrmOptionsPluginsWFX.Init; begin PluginType := ptWFX; inherited Init; stgPlugins.Columns.Items[COLNO_FILENAME].Title.Caption := rsOptPluginsFileName; stgPlugins.Columns.Delete(succ(COLNO_FILENAME)); tmpWFXPlugins := TWFXModuleList.Create; end; { TfrmOptionsPluginsWFX.Load } procedure TfrmOptionsPluginsWFX.Load; begin tmpWFXPlugins.Assign(gWFXPlugins); ShowPluginsTable; end; { TfrmOptionsPluginsWFX.Save } function TfrmOptionsPluginsWFX.Save: TOptionsEditorSaveFlags; begin gWFXPlugins.Assign(tmpWFXPlugins); Result := []; end; { TfrmOptionsPluginsWFX.Done } procedure TfrmOptionsPluginsWFX.Done; begin FreeAndNil(tmpWFXPlugins); end; { TfrmOptionsPluginsWFX.GetTitle } class function TfrmOptionsPluginsWFX.GetTitle: string; begin Result := rsOptionsEditorPlugins + ' WFX'; end; { TfrmOptionsPluginsWFX.ExtraOptionsSignature } function TfrmOptionsPluginsWFX.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := tmpWFXPlugins.ComputeSignature(CurrentSignature); end; { TfrmOptionsPluginsWFX.ShowPluginsTable } procedure TfrmOptionsPluginsWFX.ShowPluginsTable; var I, iRow: integer; begin stgPlugins.RowCount := tmpWFXPlugins.Count + stgPlugins.FixedRows; for I := 0 to pred(tmpWFXPlugins.Count) do begin iRow := I + stgPlugins.FixedRows; stgPlugins.Cells[COLNO_ACTIVE, iRow] := IfThen(tmpWFXPlugins.Enabled[I], '+', '-'); stgPlugins.Cells[COLNO_NAME, iRow] := tmpWFXPlugins.Name[I]; stgPlugins.Cells[COLNO_FILENAME, iRow] := tmpWFXPlugins.FileName[I]; end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWFX.stgPluginsOnSelection } procedure TfrmOptionsPluginsWFX.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); var bEnable: boolean = False; bEnabled: boolean; begin if (aRow > 0) and (aRow < stgPlugins.RowCount) then begin bEnabled := (stgPlugins.Cells[COLNO_ACTIVE, aRow] = '-'); btnEnablePlugin.Caption := IfThen(bEnabled, rsOptPluginEnable, rsOptPluginDisable); if bEnabled then btnEnablePlugin.Glyph.Assign(ImgSwitchDisable.Picture.Bitmap) else btnEnablePlugin.Glyph.Assign(ImgSwitchEnable.Picture.Bitmap); bEnable := True; end; btnEnablePlugin.Enabled := bEnable; btnRemovePlugin.Enabled := bEnable; btnTweakPlugin.Enabled := bEnable; btnConfigPlugin.Enabled := bEnable; end; { TfrmOptionsPluginsWFX.btnAddPluginClick } procedure TfrmOptionsPluginsWFX.btnAddPluginClick(Sender: TObject); begin dmComData.OpenDialog.Filter := Format('File system plugins (%s)|%s', [WfxMask, WfxMask]); if dmComData.OpenDialog.Execute then ActualAddPlugin(dmComData.OpenDialog.FileName); end; { TfrmOptionsPluginsWFX.ActualAddPlugin } procedure TfrmOptionsPluginsWFX.ActualAddPlugin(sPluginFilename: string); var I, J: integer; WfxModule: TWFXmodule; sPluginName, sRootName: string; begin if not CheckPlugin(sPluginFilename) then Exit; sPluginFilename := GetPluginFilenameToSave(sPluginFilename); WfxModule := gWFXPlugins.LoadModule(sPluginFilename); try if not Assigned(WfxModule) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); Exit; end; sRootName := WfxModule.VFSRootName; if Length(sRootName) = 0 then begin sRootName := ExtractOnlyFileName(sPluginFilename); end; sPluginName := sRootName + '=' + sPluginFilename; I := tmpWFXPlugins.AddObject(sPluginName, TObject(True)); stgPlugins.RowCount := tmpWFXPlugins.Count + 1; J := stgPlugins.RowCount - 1; stgPlugins.Cells[COLNO_ACTIVE, J] := '+'; stgPlugins.Cells[COLNO_NAME, J] := tmpWFXPlugins.Name[I]; stgPlugins.Cells[COLNO_FILENAME, J] := tmpWFXPlugins.FileName[I]; stgPlugins.Row := J; //This will trig automatically the "OnSelection" event. if gPluginInAutoTweak then btnTweakPlugin.Click; finally end; end; { TfrmOptionsPluginsDSX.ActualDeletePlugin } procedure TfrmOptionsPluginsWFX.ActualDeletePlugin(iIndex: integer); begin tmpWFXPlugins.Delete(iIndex); end; { TfrmOptionsPluginsWFX.ActualPluginsMove } procedure TfrmOptionsPluginsWFX.ActualPluginsMove(iSource, iDestination: integer); begin tmpWFXPlugins.Move(iSource, iDestination); end; { TfrmOptionsPluginsWFX.btnEnablePluginClick } procedure TfrmOptionsPluginsWFX.btnEnablePluginClick(Sender: TObject); var bEnabled: boolean; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; bEnabled := not tmpWFXPlugins.Enabled[stgPlugins.Row - stgPlugins.FixedRows]; stgPlugins.Cells[COLNO_ACTIVE, stgPlugins.Row] := IfThen(bEnabled, '+', '-'); tmpWFXPlugins.Enabled[stgPlugins.Row - stgPlugins.FixedRows] := bEnabled; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWFX.btnConfigPluginClick } procedure TfrmOptionsPluginsWFX.btnConfigPluginClick(Sender: TObject); var WFXmodule: TWFXmodule; PluginFileName: string; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; // no plugins PluginFileName := stgPlugins.Cells[COLNO_FILENAME, stgPlugins.Row]; WFXmodule := gWFXPlugins.LoadModule(PluginFileName); if Assigned(WFXmodule) then begin WfxModule.VFSInit; WFXmodule.VFSConfigure(stgPlugins.Handle); end else begin msgError(rsMsgErrEOpen + ': ' + PluginFileName); end; end; end. doublecmd-1.1.30/src/frames/foptionspluginswfx.lrj0000644000175000001440000000243715104114162021340 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginswfx.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginswfx.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginswfx.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginswfx.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":49157102,"name":"tfrmoptionspluginswfx.lblplugindescription.caption","sourcebytes":[70,105,38,108,101,32,115,121,115,116,101,109,32,112,108,117,103,105,110,115,32,97,108,108,111,119,32,97,99,99,101,115,115,32,116,111,32,100,105,115,107,115,32,105,110,97,99,99,101,115,115,105,98,108,101,32,98,121,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,111,114,32,116,111,32,101,120,116,101,114,110,97,108,32,100,101,118,105,99,101,115,32,108,105,107,101,32,80,97,108,109,47,80,111,99,107,101,116,80,67,46],"value":"Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC."} ]} doublecmd-1.1.30/src/frames/foptionspluginswfx.lfm0000644000175000001440000000156115104114162021324 0ustar alexxusersinherited frmOptionsPluginsWFX: TfrmOptionsPluginsWFX inherited stgPlugins: TStringGrid AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner end inherited pnlPlugIn: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner inherited lblPlugInDescription: TLabel Caption = 'Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC.' end end inherited pnlButton: TPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideBottom.Control = Owner inherited btnAddPlugin: TBitBtn OnClick = btnAddPluginClick end inherited btnEnablePlugin: TBitBtn OnClick = btnEnablePluginClick end inherited btnConfigPlugin: TBitBtn OnClick = btnConfigPluginClick end end end doublecmd-1.1.30/src/frames/foptionspluginswdx.pas0000644000175000001440000001620315104114162021326 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WDX options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsWDX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, Grids, Buttons, Controls, ExtCtrls, //DC fOptionsFrame, uWDXModule, foptionspluginsbase; type { TfrmOptionsPluginsWDX } TfrmOptionsPluginsWDX = class(TfrmOptionsPluginsBase) procedure btnAddPluginClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, aRow: integer); override; procedure ActualAddPlugin(sPluginFilename: string); override; procedure ActualDeletePlugin(iIndex: integer); override; procedure ActualPluginsMove(iSource, iDestination: integer); override; public class function GetTitle: string; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ShowPluginsTable; override; end; var tmpWDXPlugins: TWDXModuleList; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Forms, Dialogs, //DC uShowMsg, fOptions, lua, uLng, uGlobs, dmCommonData, DCStrUtils, uDefaultPlugins; const COLNO_NAME = 0; COLNO_EXT = 1; COLNO_FILENAME = 2; { TfrmOptionsPluginsWDX } { TfrmOptionsPluginsWDX.Init } procedure TfrmOptionsPluginsWDX.Init; begin PluginType := ptWDX; inherited Init; stgPlugins.Columns.Items[COLNO_NAME].Title.Caption := rsOptPluginsName; stgPlugins.Columns.Items[COLNO_NAME].Alignment := taLeftJustify; // Because from the "Base", it was centered. stgPlugins.Columns.Items[COLNO_NAME].Width := stgPlugins.Columns.Items[succ(COLNO_NAME)].Width; stgPlugins.Columns.Items[COLNO_EXT].Title.Caption := rsOptPluginsRegisteredFor; stgPlugins.Columns.Items[COLNO_EXT].Width := 183; stgPlugins.Columns.Items[COLNO_EXT].Width := stgPlugins.Columns.Items[succ(COLNO_EXT)].Width; stgPlugins.Columns.Items[COLNO_FILENAME].Title.Caption := rsOptPluginsFileName; stgPlugins.Columns.Delete(succ(COLNO_FILENAME)); btnEnablePlugin.Visible := False; //Because with WDX there is no enable/disable. btnConfigPlugin.Visible := False; tmpWDXPlugins := TWDXModuleList.Create; end; { TfrmOptionsPluginsWDX.Load } procedure TfrmOptionsPluginsWDX.Load; begin tmpWDXPlugins.Assign(gWDXPlugins); ShowPluginsTable; end; { TfrmOptionsPluginsWDX.Save } function TfrmOptionsPluginsWDX.Save: TOptionsEditorSaveFlags; begin gWDXPlugins.Assign(tmpWDXPlugins); Result := []; end; { TfrmOptionsPluginsWDX.Done } procedure TfrmOptionsPluginsWDX.Done; begin FreeAndNil(tmpWDXPlugins); end; { TfrmOptionsPluginsWDX.GetTitle } class function TfrmOptionsPluginsWDX.GetTitle: string; begin Result := rsOptionsEditorPlugins + ' WDX'; end; { TfrmOptionsPluginsWDX.ExtraOptionsSignature } function TfrmOptionsPluginsWDX.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := tmpWDXPlugins.ComputeSignature(CurrentSignature); end; { TfrmOptionsPluginsWDX.ShowPluginsTable } procedure TfrmOptionsPluginsWDX.ShowPluginsTable; var I: integer; begin stgPlugins.RowCount := tmpWDXPlugins.Count + stgPlugins.FixedRows; for i := 0 to pred(tmpWDXPlugins.Count) do begin stgPlugins.Cells[COLNO_NAME, I + stgPlugins.FixedRows] := tmpWDXPlugins.GetWdxModule(i).Name; stgPlugins.Cells[COLNO_EXT, I + stgPlugins.FixedRows] := tmpWDXPlugins.GetWdxModule(i).DetectStr; stgPlugins.Cells[COLNO_FILENAME, I + stgPlugins.FixedRows] := tmpWDXPlugins.GetWdxModule(i).FileName; end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWDX.stgPluginsOnSelection } procedure TfrmOptionsPluginsWDX.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); var bEnable: boolean = False; begin if (aRow > 0) and (aRow < stgPlugins.RowCount) then bEnable := not (tmpWDXPlugins.GetWdxModule(aRow - stgPlugins.FixedRows) is TEmbeddedWDX); btnRemovePlugin.Enabled := bEnable; btnTweakPlugin.Enabled := bEnable; btnConfigPlugin.Enabled := bEnable; end; { TfrmOptionsPluginsWDX.btnAddPluginClick } procedure TfrmOptionsPluginsWDX.btnAddPluginClick(Sender: TObject); begin dmComData.OpenDialog.Filter := Format('Content plugins (%s;*.lua)|%s;*.lua', [WdxMask, WdxMask]); if dmComData.OpenDialog.Execute then ActualAddPlugin(dmComData.OpenDialog.FileName); end; { TfrmOptionsPluginsWDX.ActualAddPlugin } procedure TfrmOptionsPluginsWDX.ActualAddPlugin(sPluginFilename: string); var I, J: integer; sPluginName: string; begin if not (StrEnds(sPluginFilename, '.lua') or CheckPlugin(sPluginFilename)) then Exit; sPluginName := ExtractOnlyFileName(sPluginFilename); I := tmpWDXPlugins.Add(sPluginName, GetPluginFilenameToSave(sPluginFilename), EmptyStr); if not tmpWDXPlugins.LoadModule(pred(tmpWDXPlugins.Count)) then begin if tmpWDXPlugins.GetWdxModule(pred(tmpWDXPlugins.Count)).ClassNameIs('TLuaWdx') and (not IsLuaLibLoaded) then begin if msgYesNo(Format(rsMsgScriptCantFindLibrary, [gLuaLib]) + #$0A + rsMsgWantToConfigureLibraryLocation) then ShowOptions('TfrmOptionsPluginsGroup'); end else MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); tmpWDXPlugins.DeleteItem(I); Exit; end; tmpWDXPlugins.GetWdxModule(pred(tmpWDXPlugins.Count)).DetectStr := tmpWDXPlugins.GetWdxModule(pred(tmpWDXPlugins.Count)).CallContentGetDetectString; stgPlugins.RowCount := stgPlugins.RowCount + 1; J := stgPlugins.RowCount - 1; stgPlugins.Cells[COLNO_NAME, J] := tmpWDXPlugins.GetWdxModule(I).Name; stgPlugins.Cells[COLNO_EXT, J] := tmpWDXPlugins.GetWdxModule(I).DetectStr; stgPlugins.Cells[COLNO_FILENAME, J] := tmpWDXPlugins.GetWdxModule(I).FileName; stgPlugins.Row := J; //This will trig automatically the "OnSelection" event. if gPluginInAutoTweak then btnTweakPlugin.Click; end; { TfrmOptionsPluginsWDX.ActualDeletePlugin } procedure TfrmOptionsPluginsWDX.ActualDeletePlugin(iIndex: integer); begin tmpWDXPlugins.DeleteItem(iIndex); end; { TfrmOptionsPluginsWDX.ActualPluginsMove } procedure TfrmOptionsPluginsWDX.ActualPluginsMove(iSource, iDestination: integer); begin tmpWDXPlugins.Move(iSource, iDestination); end; end. doublecmd-1.1.30/src/frames/foptionspluginswdx.lrj0000644000175000001440000000270515104114162021334 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginswdx.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginswdx.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginswdx.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginswdx.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":2805628,"name":"tfrmoptionspluginswdx.lblplugindescription.caption","sourcebytes":[67,111,110,116,101,110,116,32,112,108,117,38,103,105,110,115,32,97,108,108,111,119,32,111,110,101,32,116,111,32,100,105,115,112,108,97,121,32,101,120,116,101,110,100,101,100,32,102,105,108,101,32,100,101,116,97,105,108,115,32,108,105,107,101,32,109,112,51,32,116,97,103,115,32,111,114,32,105,109,97,103,101,32,97,116,116,114,105,98,117,116,101,115,32,105,110,32,102,105,108,101,32,108,105,115,116,115,44,32,111,114,32,117,115,101,32,116,104,101,109,32,105,110,32,115,101,97,114,99,104,32,97,110,100,32,109,117,108,116,105,45,114,101,110,97,109,101,32,116,111,111,108],"value":"Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool"} ]} doublecmd-1.1.30/src/frames/foptionspluginswdx.lfm0000644000175000001440000000134515104114162021322 0ustar alexxusersinherited frmOptionsPluginsWDX: TfrmOptionsPluginsWDX inherited stgPlugins: TStringGrid AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner end inherited pnlPlugIn: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner inherited lblPlugInDescription: TLabel Caption = 'Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool' end end inherited pnlButton: TPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideBottom.Control = Owner inherited btnAddPlugin: TBitBtn OnClick = btnAddPluginClick end end end doublecmd-1.1.30/src/frames/foptionspluginswcx.pas0000644000175000001440000003217615104114162021334 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins WCX options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsWCX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, Grids, Buttons, Controls, ExtCtrls, //DC fOptionsFrame, uWCXModule, foptionspluginsbase; type { TfrmOptionsPluginsWCX } TfrmOptionsPluginsWCX = class(TfrmOptionsPluginsBase) procedure stgPluginsWCXDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure btnToggleViewClick(Sender: TObject); procedure btnAddPluginClick(Sender: TObject); procedure btnEnablePluginClick(Sender: TObject); procedure btnRemovePluginClick(Sender: TObject); procedure btnTweakPluginClick(Sender: TObject); procedure btnConfigPluginClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, aRow: integer); override; procedure ActualAddPlugin(sPluginFilename: string); override; public class function GetTitle: string; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ShowPluginsTable; override; end; var tmpWCXPlugins: TWCXModuleList; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, LCLProc, Forms, Dialogs, //DC uLng, uGlobs, uShowMsg, fTweakPlugin, dmCommonData, DCStrUtils, uDefaultPlugins; const COLNO_ACTIVE = 0; COLNO_NAME = 1; COLNO_EXT = 2; COLNO_FILENAME = 3; { TfrmOptionsPluginsWCX } { TfrmOptionsPluginsWCX.Init } procedure TfrmOptionsPluginsWCX.Init; begin PluginType := ptWCX; inherited Init; tmpWCXPlugins := TWCXModuleList.Create; stgPlugins.OnDragDrop := @stgPluginsWCXDragDrop; btnToggleOptionPlugins.OnClick := @btnToggleViewClick; btnToggleOptionPlugins.Visible := True; end; { TfrmOptionsPluginsWCX.Load } procedure TfrmOptionsPluginsWCX.Load; begin tmpWCXPlugins.Assign(gWCXPlugins); ShowPluginsTable; end; { TfrmOptionsPluginsWCX.Save } function TfrmOptionsPluginsWCX.Save: TOptionsEditorSaveFlags; begin gWCXPlugins.Assign(tmpWCXPlugins); Result := []; end; { TfrmOptionsPluginsWCX.Done } procedure TfrmOptionsPluginsWCX.Done; begin FreeAndNil(tmpWCXPlugins); end; { TfrmOptionsPluginsWCX.GetTitle } class function TfrmOptionsPluginsWCX.GetTitle: string; begin Result := rsOptionsEditorPlugins + ' WCX'; end; { TfrmOptionsPluginsWCX.ExtraOptionsSignature } function TfrmOptionsPluginsWCX.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := tmpWCXPlugins.ComputeSignature(CurrentSignature); end; { TfrmOptionsPluginsWCX.ShowPluginsTable } procedure TfrmOptionsPluginsWCX.ShowPluginsTable; var I, iIndex: integer; sFileName, sExt: string; iRememberOriginalRow, iRow: integer; begin iRememberOriginalRow := stgPlugins.Row; case gWCXConfigViewMode of wcvmByPlugin: begin btnToggleOptionPlugins.Caption := rsOptPluginShowByExtension; btnToggleOptionPlugins.Glyph.Assign(ImgByExtension.Picture.Bitmap); stgPlugins.RowCount := stgPlugins.FixedRows; end; wcvmByExtension: begin btnToggleOptionPlugins.Caption := rsOptPluginShowByPlugin; btnToggleOptionPlugins.Glyph.Assign(ImgByPlugin.Picture.Bitmap); stgPlugins.RowCount := succ(tmpWCXPlugins.Count); end; end; for I := 0 to pred(tmpWCXPlugins.Count) do begin // get associated extension sExt := tmpWCXPlugins.Ext[I]; //get file name sFileName := tmpWCXPlugins.FileName[I]; case gWCXConfigViewMode of wcvmByPlugin: begin iIndex := stgPlugins.Cols[COLNO_FILENAME].IndexOf(sFileName); if iIndex < 0 then begin stgPlugins.RowCount := stgPlugins.RowCount + 1; iRow := pred(stgPlugins.RowCount); stgPlugins.Cells[COLNO_ACTIVE, iRow] := IfThen(tmpWCXPlugins.Enabled[I], '+', '-'); stgPlugins.Cells[COLNO_NAME, iRow] := ExtractOnlyFileName(sFileName); stgPlugins.Cells[COLNO_EXT, iRow] := sExt + #32; stgPlugins.Cells[COLNO_FILENAME, iRow] := sFileName; end else begin stgPlugins.Cells[COLNO_EXT, iIndex] := stgPlugins.Cells[COLNO_EXT, iIndex] + sExt + #32; stgPlugins.Cells[COLNO_ACTIVE, iIndex] := stgPlugins.Cells[COLNO_ACTIVE, iIndex] + IfThen(tmpWCXPlugins.Enabled[I], '+', '-'); end; end; wcvmByExtension: begin stgPlugins.Cells[COLNO_ACTIVE, succ(I)] := IfThen(tmpWCXPlugins.Enabled[I], '+', '-'); stgPlugins.Cells[COLNO_NAME, succ(I)] := ExtractOnlyFileName(sFileName); stgPlugins.Cells[COLNO_EXT, succ(I)] := sExt; stgPlugins.Cells[COLNO_FILENAME, succ(I)] := sFileName; end; end; end; if iRememberOriginalRow <> -1 then stgPlugins.Row := iRememberOriginalRow; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWCX.stgPluginsOnSelection } procedure TfrmOptionsPluginsWCX.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); var bEnable: boolean = False; bEnabled: boolean; begin if (aRow > 0) and (aRow < stgPlugins.RowCount) then begin bEnabled := (stgPlugins.Cells[COLNO_ACTIVE, aRow][1] = '-'); btnEnablePlugin.Caption := IfThen(bEnabled, rsOptPluginEnable, rsOptPluginDisable); if bEnabled then btnEnablePlugin.Glyph.Assign(ImgSwitchDisable.Picture.Bitmap) else btnEnablePlugin.Glyph.Assign(ImgSwitchEnable.Picture.Bitmap); bEnable := True; end; btnEnablePlugin.Enabled := bEnable; btnRemovePlugin.Enabled := bEnable; btnTweakPlugin.Enabled := bEnable; btnConfigPlugin.Enabled := bEnable; end; { TfrmOptionsPluginsWCX.stgPluginsWCXDragDrop } procedure TfrmOptionsPluginsWCX.stgPluginsWCXDragDrop(Sender, Source: TObject; X, Y: integer); var iDestCol, iDestRow, iSourceRow: integer; begin case gWCXConfigViewMode of wcvmByPlugin: begin MsgError(rsOptPluginSortOnlyWhenByExtension); end; wcvmByExtension: begin stgPlugins.MouseToCell(X, Y, {%H-}iDestCol, {%H-}iDestRow); if iDestRow > 0 then begin iSourceRow := stgPlugins.Row; //We need to that because after having done the following "MoveColRow", the "stgPlugins.Row" changed! So we need to remember original index. stgPlugins.MoveColRow(False, iSourceRow, iDestRow); tmpWCXPlugins.Move(pred(iSourceRow), pred(iDestRow)); end; end; end; end; { TfrmOptionsPluginsWCX.btnToggleViewClick } procedure TfrmOptionsPluginsWCX.btnToggleViewClick(Sender: TObject); begin case gWCXConfigViewMode of wcvmByPlugin: gWCXConfigViewMode := wcvmByExtension; wcvmByExtension: gWCXConfigViewMode := wcvmByPlugin; end; ShowPluginsTable; end; { TfrmOptionsPluginsWCX.btnAddPluginClick } procedure TfrmOptionsPluginsWCX.btnAddPluginClick(Sender: TObject); begin dmComData.OpenDialog.Filter := Format('Archive plugins (%s)|%s', [WcxMask, WcxMask]); if dmComData.OpenDialog.Execute then ActualAddPlugin(dmComData.OpenDialog.FileName); end; { v.ActualAddPlugin } procedure TfrmOptionsPluginsWCX.ActualAddPlugin(sPluginFilename: string); var J, iPluginIndex, iFlags, iNbItemOnStart: integer; sExt: string; sExts: string; sExtsTemp: string; sPluginName: string; sAlreadyAssignedExts: string; WCXmodule: TWCXmodule; begin iNbItemOnStart := tmpWCXPlugins.Count; if not CheckPlugin(sPluginFilename) then Exit; sPluginFilename := GetPluginFilenameToSave(sPluginFilename); WCXmodule := gWCXPlugins.LoadModule(sPluginFilename); if not Assigned(WCXmodule) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); Exit; end; iFlags := WCXmodule.GetPluginCapabilities; sPluginName := sPluginFilename; sExts := ''; if InputQuery(rsOptEnterExt, Format(rsOptAssocPluginWith, [sPluginFilename]), sExts) then begin sExtsTemp := sExts; sExts := ''; sAlreadyAssignedExts := ''; sExt := Copy2SpaceDel(sExtsTemp); repeat iPluginIndex := tmpWCXPlugins.Find(sPluginName, sExt); if iPluginIndex <> -1 then begin AddStrWithSep(sAlreadyAssignedExts, sExt); end else begin tmpWCXPlugins.AddObject(sExt + '=' + IntToStr(iFlags) + ',' + sPluginName, TObject(True)); AddStrWithSep(sExts, sExt); end; sExt := Copy2SpaceDel(sExtsTemp); until sExt = ''; if sAlreadyAssignedExts <> '' then MessageDlg(Format(rsOptPluginAlreadyAssigned, [sPluginFilename]) + LineEnding + sAlreadyAssignedExts, mtWarning, [mbOK], 0); if iNbItemOnStart <> tmpWCXPlugins.Count then begin stgPlugins.RowCount := stgPlugins.RowCount + 1; // Add new row J := pred(stgPlugins.RowCount); stgPlugins.Cells[COLNO_ACTIVE, J] := '+'; // Enabled stgPlugins.Cells[COLNO_NAME, J] := ExtractOnlyFileName(sPluginFilename); stgPlugins.Cells[COLNO_EXT, J] := sExts; stgPlugins.Cells[COLNO_FILENAME, J] := sPluginName; stgPlugins.Row := J; //This will trig automatically the "OnSelection" event. if gPluginInAutoTweak then btnTweakPlugin.Click; end; end; end; { TfrmOptionsPluginsWCX.btnEnablePluginClick } procedure TfrmOptionsPluginsWCX.btnEnablePluginClick(Sender: TObject); var sExt, sExts, sFinalSigns: string; iPluginIndex: integer; bEnabled: boolean; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; case gWCXConfigViewMode of wcvmByExtension: begin tmpWCXPlugins.Enabled[pred(stgPlugins.Row)] := not tmpWCXPlugins.Enabled[pred(stgPlugins.Row)]; stgPlugins.Cells[COLNO_ACTIVE, stgPlugins.Row] := IfThen(tmpWCXPlugins.Enabled[pred(stgPlugins.Row)], '+', '-'); end; wcvmByPlugin: begin bEnabled := (stgPlugins.Cells[COLNO_ACTIVE, stgPlugins.Row][1] = '-'); sExts := stgPlugins.Cells[COLNO_EXT, stgPlugins.Row]; sExt := Copy2SpaceDel(sExts); sFinalSigns := ''; repeat iPluginIndex := tmpWCXPlugins.Find(stgPlugins.Cells[COLNO_FILENAME, stgPlugins.Row], sExt); if iPluginIndex <> -1 then tmpWCXPlugins.Enabled[iPluginIndex] := bEnabled; sExt := Copy2SpaceDel(sExts); sFinalSigns := sFinalSigns + IfThen(bEnabled, '+', '-'); until sExt = ''; stgPlugins.Cells[COLNO_ACTIVE, stgPlugins.Row] := sFinalSigns; end; end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsWCX } procedure TfrmOptionsPluginsWCX.btnRemovePluginClick(Sender: TObject); var sExt, sExts: string; iPluginIndex: integer; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; case gWCXConfigViewMode of wcvmByPlugin: begin sExts := stgPlugins.Cells[COLNO_EXT, stgPlugins.Row]; sExt := Copy2SpaceDel(sExts); repeat iPluginIndex := tmpWCXPlugins.Find(stgPlugins.Cells[COLNO_FILENAME, stgPlugins.Row], sExt); if iPluginIndex <> -1 then tmpWCXPlugins.Delete(iPluginIndex); sExt := Copy2SpaceDel(sExts); until sExt = ''; end; wcvmByExtension: begin tmpWCXPlugins.Delete(pred(stgPlugins.Row)); end; end; ShowPluginsTable; end; { TfrmOptionsPluginsWCX.btnTweakPluginClick } procedure TfrmOptionsPluginsWCX.btnTweakPluginClick(Sender: TObject); var iPluginIndex: integer; begin iPluginIndex := tmpWCXPlugins.Find(stgPlugins.Cells[COLNO_FILENAME, stgPlugins.Row], Copy2Space(stgPlugins.Cells[COLNO_EXT, stgPlugins.Row])); if iPluginIndex < 0 then Exit; if ShowTweakPluginDlg(PluginType, iPluginIndex) then ShowPluginsTable; end; { TfrmOptionsPluginsWCX.btnConfigPluginClick } procedure TfrmOptionsPluginsWCX.btnConfigPluginClick(Sender: TObject); var WCXmodule: TWCXmodule; PluginFileName: string; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; // no plugins PluginFileName := stgPlugins.Cells[COLNO_FILENAME, stgPlugins.Row]; WCXmodule := gWCXPlugins.LoadModule(PluginFileName); if Assigned(WCXmodule) then begin WCXmodule.VFSConfigure(stgPlugins.Handle); end else begin msgError(rsMsgErrEOpen + ': ' + PluginFileName); end; end; end. doublecmd-1.1.30/src/frames/foptionspluginswcx.lrj0000644000175000001440000000171715104114162021335 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginswcx.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginswcx.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginswcx.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginswcx.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":70897075,"name":"tfrmoptionspluginswcx.lblplugindescription.caption","sourcebytes":[80,97,99,107,38,101,114,32,112,108,117,103,105,110,115,32,97,114,101,32,117,115,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,97,114,99,104,105,118,101,115],"value":"Pack&er plugins are used to work with archives"} ]} doublecmd-1.1.30/src/frames/foptionspluginswcx.lfm0000644000175000001440000000334515104114162021323 0ustar alexxusersinherited frmOptionsPluginsWCX: TfrmOptionsPluginsWCX inherited stgPlugins: TStringGrid AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner Columns = < item Alignment = taCenter MaxSize = 80 PickList.Strings = ( ) SizePriority = 0 Title.Caption = 'Active' Width = 161 end item PickList.Strings = ( ) SizePriority = 0 Title.Caption = 'Plugin' Width = 183 end item PickList.Strings = ( ) SizePriority = 0 Title.Caption = 'Registered for' Width = 277 end item PickList.Strings = ( ) SizePriority = 0 Title.Caption = 'File name' Width = 64 end> ColWidths = ( 161 183 277 64 ) end inherited pnlPlugIn: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner inherited lblPlugInDescription: TLabel Caption = 'Pack&er plugins are used to work with archives' end end inherited pnlButton: TPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideBottom.Control = Owner inherited btnAddPlugin: TBitBtn OnClick = btnAddPluginClick end inherited btnEnablePlugin: TBitBtn OnClick = btnEnablePluginClick end inherited btnRemovePlugin: TBitBtn OnClick = btnRemovePluginClick end inherited btnConfigPlugin: TBitBtn OnClick = btnConfigPluginClick end end inherited ImgSwitchEnable: TImage Top = 20 end inherited ImgSwitchDisable: TImage Left = 16 Top = 20 end end doublecmd-1.1.30/src/frames/foptionspluginsgroup.pas0000644000175000001440000002460715104114162021667 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options Plugins group Copyright (C) 2018-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsGroup; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, StdCtrls, Buttons, EditBtn, Menus, fOptionsFrame, //DC DCStrUtils; type { TfrmOptionsPluginsGroup } TfrmOptionsPluginsGroup = class(TOptionsEditor) gbConfiguration: TGroupBox; ckbAutoTweak: TCheckBox; lbPluginFilenameStyle: TLabel; cbPluginFilenameStyle: TComboBox; lbPathToBeRelativeTo: TLabel; dePathToBeRelativeTo: TDirectoryEdit; btnPathToBeRelativeToHelper: TSpeedButton; btnPathToBeRelativeToAll: TButton; pmPathToBeRelativeToHelper: TPopupMenu; lblLuaLibraryFilename: TLabel; fneLuaLibraryFilename: TFileNameEdit; btnLuaLibraryFilename: TSpeedButton; procedure cbPluginFilenameStyleChange(Sender: TObject); procedure btnPathToBeRelativeToHelperClick(Sender: TObject); procedure btnPathToBeRelativeToAllClick(Sender: TObject); procedure fneLuaLibraryFilenameAcceptFileName(Sender: TObject; var Value: String); procedure fneLuaLibraryFilenameButtonClick(Sender: TObject); procedure btnLuaLibraryFilenameClick(Sender: TObject); procedure FrameExit(Sender: TObject); private FResultForWhenWeExit: TOptionsEditorSaveFlags; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Controls, Forms, //DC uShowMsg, fOptionsPluginsBase, uDebug, lua, uWDXModule, uGlobs, uDCUtils, uSpecialDir, uLng, uDefaultPlugins, fOptions, fOptionsPluginsDSX, fOptionsPluginsWCX, fOptionsPluginsWDX, fOptionsPluginsWFX, fOptionsPluginsWLX; { TOptionsPluginsGroup } { TfrmOptionsPluginsGroup.Init } procedure TfrmOptionsPluginsGroup.Init; begin fneLuaLibraryFilename.DialogTitle := rsOptPluginsSelectLuaLibrary; ParseLineToList(rsPluginFilenameStyleList, cbPluginFilenameStyle.Items); {$IF DEFINED(MSWINDOWS)} fneLuaLibraryFilename.Filter := ParseLineToFileFilter([rsFilterLibraries, '*.dll', rsFilterAnyFiles, AllFilesMask]); {$ELSEIF DEFINED(DARWIN)} fneLuaLibraryFilename.Filter := ParseLineToFileFilter([rsFilterLibraries, '*.dylib', rsFilterAnyFiles, AllFilesMask]); {$ELSEIF DEFINED(UNIX)} fneLuaLibraryFilename.Filter := ParseLineToFileFilter([rsFilterLibraries, '*.so', rsFilterAnyFiles, AllFilesMask]); {$ELSE} fneLuaLibraryFilename.Filter := ParseLineToFileFilter([rsFilterLibraries, '*.dll;*.dylib;*.so', rsFilterAnyFiles, AllFilesMask]); {$ENDIF} FResultForWhenWeExit := []; end; { TfrmOptionsPluginsGroup.Load } procedure TfrmOptionsPluginsGroup.Load; begin ckbAutoTweak.Checked := gPluginInAutoTweak; cbPluginFilenameStyle.ItemIndex := integer(gPluginFilenameStyle); cbPluginFilenameStyleChange(cbPluginFilenameStyle); dePathToBeRelativeTo.Text := gPluginPathToBeRelativeTo; fneLuaLibraryFilename.FileName := gLuaLib; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; { TfrmOptionsPluginsGroup.Save } function TfrmOptionsPluginsGroup.Save: TOptionsEditorSaveFlags; var iIndexPlugin:integer; begin gPluginInAutoTweak := ckbAutoTweak.Checked; gPluginFilenameStyle := TConfigFilenameStyle(cbPluginFilenameStyle.ItemIndex); gPluginPathToBeRelativeTo := dePathToBeRelativeTo.Text; if gLuaLib <> fneLuaLibraryFilename.FileName then begin for iIndexPlugin:=0 to pred(gWDXPlugins.Count) do if gWDXPlugins.GetWdxModule(iIndexPlugin).ClassType = TLuaWdx then TLuaWdx(gWDXPlugins.GetWdxModule(iIndexPlugin)).UnloadModule; UnloadLuaLib; gLuaLib := fneLuaLibraryFilename.FileName; if not LoadLuaLib(mbExpandFileName(gLuaLib)) then MsgError(Format(rsMsgScriptCantFindLibrary, [gLuaLib])); Include(FResultForWhenWeExit, oesfNeedsRestart); end; Result := FResultForWhenWeExit; end; { TfrmOptionsPluginsGroup.GetIconIndex } class function TfrmOptionsPluginsGroup.GetIconIndex: integer; begin Result := 6; end; { TfrmOptionsPluginsGroup.GetTitle } class function TfrmOptionsPluginsGroup.GetTitle: string; begin Result := rsOptionsEditorPlugins; end; { TfrmOptionsPluginsGroup.cbPluginFilenameStyleChange } procedure TfrmOptionsPluginsGroup.cbPluginFilenameStyleChange(Sender: TObject); begin lbPathToBeRelativeTo.Visible := (TConfigFilenameStyle(cbPluginFilenameStyle.ItemIndex) = TConfigFilenameStyle.pfsRelativeToFollowingPath); dePathToBeRelativeTo.Visible := lbPathToBeRelativeTo.Visible; btnPathToBeRelativeToHelper.Visible := lbPathToBeRelativeTo.Visible; end; { TfrmOptionsPluginsGroup.btnPathToBeRelativeToHelperClick } procedure TfrmOptionsPluginsGroup.btnPathToBeRelativeToHelperClick(Sender: TObject); begin dePathToBeRelativeTo.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(dePathToBeRelativeTo, pfPATH); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsPluginsGroup.btnPathToBeRelativeToAllClick } // Let's don't apply the modification right away on "Global" plugin strutures. // Let's load the configuration page of each and do the modifications on temporary plugin structure. // If user is happy with what he sees, he will apply/save it. procedure TfrmOptionsPluginsGroup.btnPathToBeRelativeToAllClick(Sender: TObject); var iIndexPlugin: integer; Options: IOptionsDialog; Editor: TOptionsEditor; begin Self.SaveSettings; //Call "SaveSettings" instead of just "Save" to get option signature set right away do we don't bother user for that page when close. Options := ShowOptions(TfrmOptionsPluginsDSX); Editor := Options.GetEditor(TfrmOptionsPluginsDSX); for iIndexPlugin := 0 to pred(tmpDSXPlugins.Count) do tmpDSXPlugins.GetDSXModule(iIndexPlugin).FileName := GetPluginFilenameToSave(mbExpandFileName(tmpDSXPlugins.GetDSXModule(iIndexPlugin).FileName)); TfrmOptionsPluginsDSX(Editor).ShowPluginsTable; Options := ShowOptions(TfrmOptionsPluginsWCX); Editor := Options.GetEditor(TfrmOptionsPluginsWCX); for iIndexPlugin := 0 to pred(tmpWCXPlugins.Count) do tmpWCXPlugins.FileName[iIndexPlugin] := GetPluginFilenameToSave(mbExpandFileName(tmpWCXPlugins.FileName[iIndexPlugin])); TfrmOptionsPluginsWCX(Editor).ShowPluginsTable; Options := ShowOptions(TfrmOptionsPluginsWDX); Editor := Options.GetEditor(TfrmOptionsPluginsWDX); for iIndexPlugin := 0 to pred(tmpWDXPlugins.Count) do tmpWDXPlugins.GetWdxModule(iIndexPlugin).FileName := GetPluginFilenameToSave(mbExpandFileName(tmpWDXPlugins.GetWdxModule(iIndexPlugin).FileName)); TfrmOptionsPluginsWDX(Editor).ShowPluginsTable; Options := ShowOptions(TfrmOptionsPluginsWFX); Editor := Options.GetEditor(TfrmOptionsPluginsWFX); for iIndexPlugin := 0 to pred(tmpWFXPlugins.Count) do tmpWFXPlugins.FileName[iIndexPlugin] := GetPluginFilenameToSave(mbExpandFileName(tmpWFXPlugins.FileName[iIndexPlugin])); TfrmOptionsPluginsWFX(Editor).ShowPluginsTable; Options := ShowOptions(TfrmOptionsPluginsWLX); Editor := Options.GetEditor(TfrmOptionsPluginsWLX); for iIndexPlugin := 0 to pred(tmpWLXPlugins.Count) do tmpWLXPlugins.GetWlxModule(iIndexPlugin).FileName := GetPluginFilenameToSave(mbExpandFileName(tmpWLXPlugins.GetWlxModule(iIndexPlugin).FileName)); TfrmOptionsPluginsWLX(Editor).ShowPluginsTable; fneLuaLibraryFilename.FileName := GetPluginFilenameToSave(mbExpandFileName(fneLuaLibraryFilename.FileName)); //Let's switch to plugin configuration tab with at least one configure element. if tmpDSXPlugins.Count > 0 then ShowOptions(TfrmOptionsPluginsDSX) else if tmpWCXPlugins.Count > 0 then ShowOptions(TfrmOptionsPluginsWCX) else if tmpWDXPlugins.Count > 1 then //For the WDX one we validate more than the default embedded one. ShowOptions(TfrmOptionsPluginsWDX) else if tmpWFXPlugins.Count > 0 then ShowOptions(TfrmOptionsPluginsWFX) else if tmpWLXPlugins.Count > 0 then ShowOptions(TfrmOptionsPluginsWLX); end; { TfrmOptionsPluginsGroup.FrameExit } // When focus is lost, let's save the settings here immediately. // People will expect the settings here be effective right after changing them. // Still in configuration, when they go in specific plugin configuration, they want to see the effects immediately. procedure TfrmOptionsPluginsGroup.FrameExit(Sender: TObject); begin Self.SaveSettings; //Call "SaveSettings" instead of just "Save" to get option signature set right away do we don't bother user for that page when close. end; { TfrmOptionsPluginsGroup.btnLuaDllFilenameClick } procedure TfrmOptionsPluginsGroup.btnLuaLibraryFilenameClick(Sender: TObject); begin fneLuaLibraryFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneLuaLibraryFilename, pfFILE); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsPluginsGroup.fneLuaDllFilenameButtonClick } procedure TfrmOptionsPluginsGroup.fneLuaLibraryFilenameButtonClick(Sender: TObject); var sInitialDirectory: string; begin sInitialDirectory := ExcludeTrailingPathDelimiter(ExtractFilePath(mbExpandFileName(fneLuaLibraryFilename.FileName))); if DirectoryExists(sInitialDirectory) then fneLuaLibraryFilename.InitialDir := sInitialDirectory; end; { TfrmOptionsPluginsGroup.fneLuaDllFilenameAcceptFileName } procedure TfrmOptionsPluginsGroup.fneLuaLibraryFilenameAcceptFileName(Sender: TObject; var Value: String); begin Value := GetPluginFilenameToSave(Value); end; end. doublecmd-1.1.30/src/frames/foptionspluginsgroup.lrj0000644000175000001440000000327515104114162021671 0ustar alexxusers{"version":1,"strings":[ {"hash":247865466,"name":"tfrmoptionspluginsgroup.gbconfiguration.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,58],"value":"Configuration:"}, {"hash":216983,"name":"tfrmoptionspluginsgroup.ckbautotweak.caption","sourcebytes":[87,104,101,110,32,97,100,100,105,110,103,32,97,32,110,101,119,32,112,108,117,103,105,110,44,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,103,111,32,105,110,32,116,119,101,97,107,32,119,105,110,100,111,119],"value":"When adding a new plugin, automatically go in tweak window"}, {"hash":256553386,"name":"tfrmoptionspluginsgroup.lbpathtoberelativeto.caption","sourcebytes":[80,97,116,104,32,116,111,32,98,101,32,114,101,108,97,116,105,118,101,32,116,111,58],"value":"Path to be relative to:"}, {"hash":94551482,"name":"tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption","sourcebytes":[80,108,117,103,105,110,32,102,105,108,101,110,97,109,101,32,115,116,121,108,101,32,119,104,101,110,32,97,100,100,105,110,103,32,97,32,110,101,119,32,112,108,117,103,105,110,58],"value":"Plugin filename style when adding a new plugin:"}, {"hash":251510723,"name":"tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption","sourcebytes":[65,112,112,108,121,32,99,117,114,114,101,110,116,32,115,101,116,116,105,110,103,115,32,116,111,32,97,108,108,32,99,117,114,114,101,110,116,32,99,111,110,102,105,103,117,114,101,100,32,112,108,117,103,105,110,115],"value":"Apply current settings to all current configured plugins"}, {"hash":125456490,"name":"tfrmoptionspluginsgroup.lbllualibraryfilename.caption","sourcebytes":[76,117,97,32,108,105,98,114,97,114,121,32,102,105,108,101,32,116,111,32,117,115,101,58],"value":"Lua library file to use:"} ]} doublecmd-1.1.30/src/frames/foptionspluginsgroup.lfm0000644000175000001440000002450115104114162021653 0ustar alexxusersinherited frmOptionsPluginsGroup: TfrmOptionsPluginsGroup Height = 244 Width = 622 HelpKeyword = '/configuration.html#ConfigPlugins' ClientHeight = 244 ClientWidth = 622 OnExit = FrameExit DesignLeft = 134 DesignTop = 310 object gbConfiguration: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 200 Top = 6 Width = 610 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Configuration:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 6 ClientHeight = 180 ClientWidth = 606 ParentShowHint = False ShowHint = True TabOrder = 0 object ckbAutoTweak: TCheckBox AnchorSideLeft.Control = gbConfiguration AnchorSideTop.Control = gbConfiguration Left = 6 Height = 19 Top = 6 Width = 349 Caption = 'When adding a new plugin, automatically go in tweak window' TabOrder = 0 end object lbPathToBeRelativeTo: TLabel AnchorSideLeft.Control = ckbAutoTweak AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 64 Width = 112 Caption = 'Path to be relative to:' ParentColor = False end object dePathToBeRelativeTo: TDirectoryEdit AnchorSideLeft.Control = lbPathToBeRelativeTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbPluginFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnPathToBeRelativeToHelper Left = 120 Height = 23 Top = 60 Width = 455 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 1 end object btnPathToBeRelativeToHelper: TSpeedButton AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideRight.Control = cbPluginFilenameStyle AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = dePathToBeRelativeTo AnchorSideBottom.Side = asrBottom Left = 577 Height = 23 Top = 60 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnPathToBeRelativeToHelperClick end object cbPluginFilenameStyle: TComboBox AnchorSideLeft.Control = lbPluginFilenameStyle AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ckbAutoTweak AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbConfiguration AnchorSideRight.Side = asrBottom Left = 265 Height = 23 Top = 31 Width = 335 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 ItemHeight = 15 OnChange = cbPluginFilenameStyleChange Style = csDropDownList TabOrder = 2 end object lbPluginFilenameStyle: TLabel AnchorSideLeft.Control = ckbAutoTweak AnchorSideTop.Control = cbPluginFilenameStyle AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 35 Width = 256 Caption = 'Plugin filename style when adding a new plugin:' ParentColor = False end object btnPathToBeRelativeToAll: TButton AnchorSideLeft.Control = ckbAutoTweak AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 89 Width = 315 AutoSize = True Caption = 'Apply current settings to all current configured plugins' OnClick = btnPathToBeRelativeToAllClick TabOrder = 3 end object fneLuaLibraryFilename: TFileNameEdit AnchorSideLeft.Control = ckbAutoTweak AnchorSideTop.Control = lblLuaLibraryFilename AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnLuaLibraryFilename Left = 6 Height = 23 Top = 151 Width = 569 OnAcceptFileName = fneLuaLibraryFilenameAcceptFileName DialogTitle = 'Select Lua library file' DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 4 OnButtonClick = fneLuaLibraryFilenameButtonClick end object lblLuaLibraryFilename: TLabel AnchorSideLeft.Control = ckbAutoTweak AnchorSideTop.Control = btnPathToBeRelativeToAll AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 130 Width = 112 BorderSpacing.Top = 16 Caption = 'Lua library file to use:' ParentColor = False end object btnLuaLibraryFilename: TSpeedButton AnchorSideTop.Control = fneLuaLibraryFilename AnchorSideRight.Control = cbPluginFilenameStyle AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneLuaLibraryFilename AnchorSideBottom.Side = asrBottom Left = 577 Height = 23 Top = 151 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnLuaLibraryFilenameClick end end object pmPathToBeRelativeToHelper: TPopupMenu[1] left = 424 top = 32 end end doublecmd-1.1.30/src/frames/foptionspluginsdsx.pas0000644000175000001440000001453715104114162021332 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins DSX options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsDSX; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, Grids, Buttons, Controls, ExtCtrls, //DC fOptionsFrame, uDSXModule, foptionspluginsbase; type { TfrmOptionsPluginsDSX } TfrmOptionsPluginsDSX = class(TfrmOptionsPluginsBase) procedure btnAddPluginClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, aRow: integer); override; procedure ActualAddPlugin(sPluginFilename: string); override; procedure ActualDeletePlugin(iIndex: integer); override; procedure ActualPluginsMove(iSource, iDestination: integer); override; public class function GetTitle: string; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ShowPluginsTable; override; end; var tmpDSXPlugins: TDSXModuleList; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Forms, Dialogs, //DC uLng, uGlobs, dmCommonData, DCStrUtils, uDefaultPlugins; const COLNO_NAME = 0; COLNO_DESCRIPTION = 1; COLNO_FILENAME = 2; { TfrmOptionsPluginsDSX } { TfrmOptionsPluginsDSX.Init } procedure TfrmOptionsPluginsDSX.Init; begin PluginType := ptDSX; inherited Init; stgPlugins.Columns.Items[COLNO_NAME].Title.Caption := rsOptPluginsName; stgPlugins.Columns.Items[COLNO_NAME].Alignment := taLeftJustify; //Because from the "Base", it was centered. stgPlugins.Columns.Items[COLNO_DESCRIPTION].Title.Caption := rsOptPluginsDescription; stgPlugins.Columns.Items[COLNO_FILENAME].Title.Caption := rsOptPluginsFileName; stgPlugins.Columns.Delete(succ(COLNO_FILENAME)); //Because from the "Base" it has one column more than required. btnEnablePlugin.Visible := False; //Because with DSX there is no enable/disable. btnConfigPlugin.Visible := False; tmpDSXPlugins := TDSXModuleList.Create; end; { TfrmOptionsPluginsDSX.Load } procedure TfrmOptionsPluginsDSX.Load; begin tmpDSXPlugins.Assign(gDSXPlugins); ShowPluginsTable; end; { TfrmOptionsPluginsDSX.Save } function TfrmOptionsPluginsDSX.Save: TOptionsEditorSaveFlags; begin gDSXPlugins.Assign(tmpDSXPlugins); Result := []; end; { TfrmOptionsPluginsDSX.Done } procedure TfrmOptionsPluginsDSX.Done; begin FreeAndNil(tmpDSXPlugins); end; { TfrmOptionsPluginsDSX.GetTitle } class function TfrmOptionsPluginsDSX.GetTitle: string; begin Result := rsOptionsEditorPlugins + ' DSX'; end; { TfrmOptionsPluginsDSX.ExtraOptionsSignature } function TfrmOptionsPluginsDSX.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := tmpDSXPlugins.ComputeSignature(CurrentSignature); end; { TfrmOptionsPluginsDSX.ShowPluginsTable } procedure TfrmOptionsPluginsDSX.ShowPluginsTable; var I: integer; begin stgPlugins.RowCount := tmpDSXPlugins.Count + stgPlugins.FixedRows; for i := 0 to pred(tmpDSXPlugins.Count) do begin stgPlugins.Cells[COLNO_NAME, I + stgPlugins.FixedRows] := tmpDSXPlugins.GetDsxModule(i).Name; stgPlugins.Cells[COLNO_DESCRIPTION, I + stgPlugins.FixedRows] := tmpDSXPlugins.GetDsxModule(i).Descr; stgPlugins.Cells[COLNO_FILENAME, I + stgPlugins.FixedRows] := tmpDSXPlugins.GetDsxModule(i).FileName; end; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsDSX.stgPluginsOnSelection } procedure TfrmOptionsPluginsDSX.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); var bEnable: boolean = False; begin if (aRow > 0) and (aRow < stgPlugins.RowCount) then bEnable := True; btnRemovePlugin.Enabled := bEnable; btnTweakPlugin.Enabled := bEnable; btnConfigPlugin.Enabled := bEnable; end; { TfrmOptionsPluginsDSX.ActualDeletePlugin } procedure TfrmOptionsPluginsDSX.ActualDeletePlugin(iIndex: integer); begin tmpDSXPlugins.DeleteItem(iIndex); end; { TfrmOptionsPluginsDSX.ActualPluginsMove } procedure TfrmOptionsPluginsDSX.ActualPluginsMove(iSource, iDestination: integer); begin tmpDSXPlugins.Move(iSource, iDestination); end; { TfrmOptionsPluginsDSX.btnAddPluginClick } procedure TfrmOptionsPluginsDSX.btnAddPluginClick(Sender: TObject); begin dmComData.OpenDialog.Filter := 'Search plugins (*.dsx)|*.dsx'; if dmComData.OpenDialog.Execute then ActualAddPlugin(dmComData.OpenDialog.FileName); end; { TfrmOptionsPluginsDSX.ActualAddPlugin } procedure TfrmOptionsPluginsDSX.ActualAddPlugin(sPluginFilename: string); var I, J: integer; sPluginName: string; begin if not CheckPlugin(sPluginFilename) then Exit; sPluginName := ExtractOnlyFileName(sPluginFilename); I := tmpDSXPlugins.Add(sPluginName, GetPluginFilenameToSave(sPluginFilename), EmptyStr); if not tmpDSXPlugins.LoadModule(sPluginName) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); tmpDSXPlugins.DeleteItem(I); Exit; end; stgPlugins.RowCount := stgPlugins.RowCount + 1; J := stgPlugins.RowCount - stgPlugins.FixedRows; stgPlugins.Cells[COLNO_NAME, J] := tmpDSXPlugins.GetDsxModule(I).Name; stgPlugins.Cells[COLNO_DESCRIPTION, J] := tmpDSXPlugins.GetDsxModule(I).Descr; stgPlugins.Cells[COLNO_FILENAME, J] := tmpDSXPlugins.GetDsxModule(I).FileName; stgPlugins.Row := J; //This will trig automatically the "OnSelection" event. if gPluginInAutoTweak then btnTweakPlugin.click; end; end. doublecmd-1.1.30/src/frames/foptionspluginsdsx.lrj0000644000175000001440000000232615104114162021327 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":216158153,"name":"tfrmoptionspluginsdsx.lblplugindescription.caption","sourcebytes":[83,101,97,114,99,38,104,32,112,108,117,103,105,110,115,32,97,108,108,111,119,32,111,110,101,32,116,111,32,117,115,101,32,97,108,116,101,114,110,97,116,105,118,101,32,115,101,97,114,99,104,32,97,108,103,111,114,105,116,104,109,115,32,111,114,32,101,120,116,101,114,110,97,108,32,116,111,111,108,115,32,40,108,105,107,101,32,34,108,111,99,97,116,101,34,44,32,101,116,99,46,41],"value":"Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)"} ]} doublecmd-1.1.30/src/frames/foptionspluginsdsx.lfm0000644000175000001440000000133215104114162021312 0ustar alexxusersinherited frmOptionsPluginsDSX: TfrmOptionsPluginsDSX DesignLeft = 291 DesignTop = 266 inherited stgPlugins: TStringGrid AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner end inherited pnlPlugIn: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner inherited lblPlugInDescription: TLabel Caption = 'Searc&h plugins allow one to use alternative search algorithms or external tools (like "locate", etc.)' end end inherited pnlButton: TPanel AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideBottom.Control = Owner inherited btnAddPlugin: TBitBtn OnClick = btnAddPluginClick end end end doublecmd-1.1.30/src/frames/foptionspluginsbase.pas0000644000175000001440000002055615104114162021444 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Plugins options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsPluginsBase; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, ComCtrls, StdCtrls, Grids, Buttons, Controls, ExtCtrls, //DC fOptionsFrame, uGlobs; type { TfrmOptionsPluginsBase } TfrmOptionsPluginsBase = class(TOptionsEditor) pnlPlugIn: TPanel; lblPlugInDescription: TLabel; stgPlugins: TStringGrid; pnlButton: TPanel; btnToggleOptionPlugins: TBitBtn; btnAddPlugin: TBitBtn; btnEnablePlugin: TBitBtn; btnRemovePlugin: TBitBtn; btnTweakPlugin: TBitBtn; btnConfigPlugin: TBitBtn; ImgSwitchEnable: TImage; ImgSwitchDisable: TImage; ImgByPlugin: TImage; ImgByExtension: TImage; procedure btnPluginsNotImplementedClick(Sender: TObject); procedure btnRemovePluginClick(Sender: TObject); procedure btnTweakPluginClick(Sender: TObject); procedure stgPluginsDblClick(Sender: TObject); procedure stgPluginsDragOver(Sender, {%H-}Source: TObject; X, Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure stgPluginsDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure stgPluginsGetCellHint(Sender: TObject; ACol, ARow: integer; var HintText: string); procedure stgPluginsShowHint(Sender: TObject; HintInfo: PHintInfo); procedure ActualAddPlugin({%H-}sPluginFilename: string); virtual; private FPluginType: TPluginType; protected property PluginType: TPluginType read FPluginType write FPluginType; procedure Init; override; procedure ShowPluginsTable; virtual; procedure stgPluginsOnSelection(Sender: TObject; {%H-}aCol, {%H-}aRow: integer); virtual; procedure ActualDeletePlugin({%H-}iIndex: integer); virtual; procedure ActualPluginsMove({%H-}iSource, {%H-}iDestination: integer); virtual; public class function GetIconIndex: integer; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; end; function GetPluginFilenameToSave(const Filename: string): string; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. StrUtils, LCLProc, Forms, Dialogs, //DC udcutils, uLng, uShowMsg, fTweakPlugin, uDefaultPlugins; { TfrmOptionsPluginsBase } { TfrmOptionsPluginsBase.Init } procedure TfrmOptionsPluginsBase.Init; begin // Localize plugins. stgPlugins.Columns.Items[0].Title.Caption := rsOptPluginsActive; stgPlugins.Columns.Items[1].Title.Caption := rsOptPluginsName; stgPlugins.Columns.Items[2].Title.Caption := rsOptPluginsRegisteredFor; stgPlugins.Columns.Items[3].Title.Caption := rsOptPluginsFileName; stgPlugins.OnSelection := @stgPluginsOnSelection; end; { TfrmOptionsPluginsBase } procedure TfrmOptionsPluginsBase.ShowPluginsTable; begin //empty end; { TfrmOptionsPluginsBase.stgPluginsOnSelection} procedure TfrmOptionsPluginsBase.stgPluginsOnSelection(Sender: TObject; aCol, aRow: integer); begin //empty end; { TfrmOptionsPluginsBase.ActualAddPlugin } procedure TfrmOptionsPluginsBase.ActualAddPlugin(sPluginFilename: string); begin //empty end; { TfrmOptionsPluginsBase.ActualDeletePlugin } procedure TfrmOptionsPluginsBase.ActualDeletePlugin(iIndex: integer); begin //empty end; { TfrmOptionsPluginsBase.ActualPluginsMove } procedure TfrmOptionsPluginsBase.ActualPluginsMove(iSource, iDestination: integer); begin //empty end; { TfrmOptionsPluginsBase.GetIconIndex } class function TfrmOptionsPluginsBase.GetIconIndex: integer; begin Result := 6; end; { TfrmOptionsPluginsBase.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsPluginsBase.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsPluginsBase.btnPluginsNotImplementedClick } procedure TfrmOptionsPluginsBase.btnPluginsNotImplementedClick(Sender: TObject); begin msgError(rsMsgNotImplemented); end; { TfrmOptionsPluginsBase.btnRemovePluginClick } procedure TfrmOptionsPluginsBase.btnRemovePluginClick(Sender: TObject); var iCurrentSelection: integer; begin iCurrentSelection := stgPlugins.Row; if iCurrentSelection < stgPlugins.FixedRows then Exit; self.ActualDeletePlugin(pred(iCurrentSelection)); stgPlugins.DeleteColRow(False, iCurrentSelection); if iCurrentSelection < stgPlugins.RowCount then stgPlugins.Row := iCurrentSelection else if stgPlugins.RowCount > 1 then stgPlugins.Row := pred(stgPlugins.RowCount) else stgPlugins.Row := -1; stgPluginsOnSelection(stgPlugins, 0, stgPlugins.Row); end; { TfrmOptionsPluginsBase. } procedure TfrmOptionsPluginsBase.btnTweakPluginClick(Sender: TObject); var iPluginIndex: integer; begin iPluginIndex := stgPlugins.Row - stgPlugins.FixedRows; if iPluginIndex < 0 then Exit; if ShowTweakPluginDlg(PluginType, iPluginIndex) then ShowPluginsTable; end; { TfrmOptionsPluginsBase.stgPluginsDblClick } procedure TfrmOptionsPluginsBase.stgPluginsDblClick(Sender: TObject); begin if btnTweakPlugin.Enabled then btnTweakPlugin.Click; end; { TfrmOptionsPluginsBase.stgPluginsDragOver } procedure TfrmOptionsPluginsBase.stgPluginsDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); var iDestCol: integer = 0; iDestRow: integer = 0; begin stgPlugins.MouseToCell(X, Y, iDestCol, iDestRow); Accept := (iDestRow > 0); end; { TfrmOptionsPluginsBase.stgPluginsDragDrop } procedure TfrmOptionsPluginsBase.stgPluginsDragDrop(Sender, Source: TObject; X, Y: integer); var iDestCol, iDestRow, iSourceRow: integer; begin stgPlugins.MouseToCell(X, Y, {%H-}iDestCol, {%H-}iDestRow); if iDestRow > 0 then begin iSourceRow := stgPlugins.Row; //We need to that because after having done the following "MoveColRow", the "stgPlugins.Row" changed! So we need to remember original index. stgPlugins.MoveColRow(False, iSourceRow, iDestRow); ActualPluginsMove(pred(iSourceRow), pred(iDestRow)); end; end; { TfrmOptionsPluginsBase.stgPluginsGetCellHint } procedure TfrmOptionsPluginsBase.stgPluginsGetCellHint(Sender: TObject; ACol, ARow: integer; var HintText: string); var sMaybeHint: string; begin //The actual "pipe" symbol interfere when showing the hint. Let's replace it with a similar look-alike symbol. sMaybeHint := Stringreplace(stgPlugins.Cells[ACol, ARow], '|', '¦', [rfReplaceAll]); HintText := IfThen(((stgPlugins.Canvas.TextWidth(sMaybeHint) + 10) > stgPlugins.ColWidths[ACol]), sMaybeHint, ''); end; { TfrmOptionsPluginsWLX.stgPluginsShowHint } procedure TfrmOptionsPluginsBase.stgPluginsShowHint(Sender: TObject; HintInfo: PHintInfo); begin if gFileInfoToolTipValue[Ord(gToolTipHideTimeOut)] <> -1 then HintInfo^.HideTimeout := gFileInfoToolTipValue[Ord(gToolTipHideTimeOut)]; end; { GetPluginFilenameToSave } function GetPluginFilenameToSave(const Filename: string): string; var sMaybeBasePath, SubWorkingPath, MaybeSubstitionPossible: string; begin Result := Filename; sMaybeBasePath := IfThen((gPluginFilenameStyle = pfsRelativeToDC), EnvVarCommanderPath, gPluginPathToBeRelativeTo); case gPluginFilenameStyle of pfsAbsolutePath: ; pfsRelativeToDC, pfsRelativeToFollowingPath: begin SubWorkingPath := IncludeTrailingPathDelimiter(mbExpandFileName(sMaybeBasePath)); MaybeSubstitionPossible := ExtractRelativePath(IncludeTrailingPathDelimiter(SubWorkingPath), Filename); if MaybeSubstitionPossible <> Filename then Result := IncludeTrailingPathDelimiter(sMaybeBasePath) + MaybeSubstitionPossible; end; end; end; end. doublecmd-1.1.30/src/frames/foptionspluginsbase.lrj0000644000175000001440000000271715104114162021447 0ustar alexxusers{"version":1,"strings":[ {"hash":75149509,"name":"tfrmoptionspluginsbase.stgplugins.columns[0].title.caption","sourcebytes":[65,99,116,105,118,101],"value":"Active"}, {"hash":91471358,"name":"tfrmoptionspluginsbase.stgplugins.columns[1].title.caption","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":56017954,"name":"tfrmoptionspluginsbase.stgplugins.columns[2].title.caption","sourcebytes":[82,101,103,105,115,116,101,114,101,100,32,102,111,114],"value":"Registered for"}, {"hash":41356085,"name":"tfrmoptionspluginsbase.stgplugins.columns[3].title.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":156067838,"name":"tfrmoptionspluginsbase.lblplugindescription.caption","sourcebytes":[68,101,115,99,114,105,112,116,105,111,110],"value":"Description"}, {"hash":277668,"name":"tfrmoptionspluginsbase.btnaddplugin.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":131365221,"name":"tfrmoptionspluginsbase.btnenableplugin.caption","sourcebytes":[69,38,110,97,98,108,101],"value":"E&nable"}, {"hash":193742565,"name":"tfrmoptionspluginsbase.btnremoveplugin.caption","sourcebytes":[38,82,101,109,111,118,101],"value":"&Remove"}, {"hash":214649477,"name":"tfrmoptionspluginsbase.btnconfigplugin.caption","sourcebytes":[67,111,110,38,102,105,103,117,114,101],"value":"Con&figure"}, {"hash":45865851,"name":"tfrmoptionspluginsbase.btntweakplugin.caption","sourcebytes":[38,84,119,101,97,107],"value":"&Tweak"} ]} doublecmd-1.1.30/src/frames/foptionspluginsbase.lfm0000644000175000001440000007444715104114162021447 0ustar alexxusersinherited frmOptionsPluginsBase: TfrmOptionsPluginsBase Height = 376 Width = 705 HelpKeyword = '/configuration.html#ConfigPlugins' ClientHeight = 376 ClientWidth = 705 ParentShowHint = False ShowHint = True DesignLeft = 291 DesignTop = 266 object stgPlugins: TStringGrid[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlPlugIn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButton Left = 8 Height = 302 Top = 35 Width = 689 Anchors = [akTop, akLeft, akRight, akBottom] AutoAdvance = aaRightDown AutoFillColumns = True BorderSpacing.Left = 8 BorderSpacing.Right = 8 ColCount = 4 Columns = < item Alignment = taCenter MaxSize = 80 SizePriority = 0 Title.Caption = 'Active' Width = 161 end item SizePriority = 0 Title.Caption = 'Plugin' Width = 183 end item SizePriority = 0 Title.Caption = 'Registered for' Width = 277 end item SizePriority = 0 Title.Caption = 'File name' Width = 64 end> DragMode = dmAutomatic FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goThumbTracking, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook, goCellHints] ParentShowHint = False RowCount = 1 ShowHint = True TabOrder = 0 TitleStyle = tsNative OnDragDrop = stgPluginsDragDrop OnDragOver = stgPluginsDragOver OnDblClick = stgPluginsDblClick OnGetCellHint = stgPluginsGetCellHint ColWidths = ( 161 183 277 64 ) end object pnlPlugIn: TPanel[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 35 Top = 0 Width = 689 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BevelOuter = bvNone ClientHeight = 35 ClientWidth = 689 TabOrder = 1 object lblPlugInDescription: TLabel AnchorSideLeft.Control = pnlPlugIn AnchorSideTop.Control = pnlPlugIn AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlPlugIn AnchorSideRight.Side = asrBottom Left = 5 Height = 15 Top = 10 Width = 679 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 5 Caption = 'Description' FocusControl = stgPlugins ParentColor = False WordWrap = True end end object pnlButton: TPanel[2] AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 36 Top = 340 Width = 697 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 3 BorderSpacing.Right = 8 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 3 ClientHeight = 36 ClientWidth = 697 TabOrder = 2 object btnAddPlugin: TBitBtn AnchorSideRight.Control = btnEnablePlugin AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 123 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 Caption = 'A&dd' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000009E9E9EA38181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF9E9E9E950000000000000000818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF2F2F2FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF1F1F1FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1 F1FFF1F1F1FFF1F1F1FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFF0F0F0FFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFEFEFEFFFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFE2EE EEFFB1F0F3FF92F0F5FF9AF0F5FF779696FF0000000000000000818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFE0EEEFFF96EF F4FF63F1F8FF46F3FBFF45F3FBFF5DEFF7FD36DDE67603F3FF01818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFFEDEDEDFFB1EEF1FF67F1 F8FF40F4FDFF71F7FDFF72F7FDFF43F3FCFE24ECF6B60AF3FF25818181FFFFFF FFFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFF9BEFF3FF4EF2 FAFF6AF6FDFFBBFAFEFFBFFBFEFF6EF6FDFF22F0FAD20DF3FF50818181FFFFFF FFFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFF9CEEF2FF4EF2 FAFF67F6FDFFB5FAFEFFB8FAFEFF6BF5FDFF22EFFAD10DF3FF5C818181FFFFFF FFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFB4EDF0FF6AF0 F7FF3AF4FCFF68F6FDFF6AF6FDFF3CF2FBFD1EEFF9A909F3FF37818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BEE F2FF69F0F7FF4DF2FAFF46EFF7FA28EBF4B60DF3FF6102F3FF099E9E9EA38181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF7C8C 8CFF729F9FFF6AAEAFFF36E4ED8A09F3FF4502F3FF0F00000000 } OnClick = btnPluginsNotImplementedClick TabOrder = 0 end object btnEnablePlugin: TBitBtn AnchorSideRight.Control = btnRemovePlugin AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 239 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 Caption = 'E&nable' OnClick = btnPluginsNotImplementedClick TabOrder = 1 end object btnRemovePlugin: TBitBtn AnchorSideRight.Control = btnTweakPlugin AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 355 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 Caption = '&Remove' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00008B9C1F008C9DED008D9EEC008D 9E9E008B9C21FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00008B9C13008D9EE24FC3D2FD5BD3E1FF30B5 C6FA0890A1F6008D9FA9008B9C14FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00008E9FC536B5C5FA5FD8E7FF26CADFFF4ED4 E5FF6DD9E7FF32B4C5FB008D9EE6008B9C26FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00008B9C431A9BABF66CDAE8FF10C5DCFF03C2DAFF03C2 DAFF15C6DCFF5BD7E7FF56C8D6FE058FA0F1008B9C3FFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00018EA0D45ECFDDFF46DAEDFF18D0E7FF11CBE3FF07C4 DCFF03C2DAFF03C2DAFF4CD3E4FF58CDDCFF048E9FF4008B9C1CFFFFFF00FFFF FF00FFFFFF00008B9C1A1194A5F78BEDFBFF3CE5FCFF37E4FBFF2FDEF6FF23D7 EEFF14CDE5FF04C3DBFF03C2DAFF56D6E6FF33B6C6FB008E9FA8FFFFFF00FFFF FF00FFFFFF00007F9C5F2FB0C0F58AEFFDFF5FEAFDFF61EBFDFF52E9FDFF3CE6 FDFF2ADBF3FF18D0E7FF10C6DCFF49D2E4FF67D4E2FF018D9FE9FFFFFF00FFFF FF00008B9C070024A1D71342ADFC84EAFBFF6BECFDFF84EFFDFF6DECFDFF52E9 FDFF44E5FBFF65E3F3FF77DDEBFF49C1CFFE1B9EAEF3008C9DEAFFFFFF00008B 9C5F008D9EEB29A5BBF6284ABBFF1D38B8FF61D8F6FF63EAFDFF6CEBFDFF7DEE FDFF88EAF8FF45BECDFA058F9FF7008E9FA3008B9C40008B9C02FFFFFF00008B 9C5A018D9EF64FC8D8FF68DCECFF336DC8FF0D1BABFF62B1D7FF72DCEAFF43BD CCF70990A2F6018E9F9F008B9C1BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000064878100889CFE41BDCDFF77DEEBFF1769B0F70036A0E4018FA0D2008C 9D77008B9C15FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000487802004A 7B95014E80F40B76B2FF0188A1FF32AEBEFE1DA0B1F2008B9C3DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000049796F0352 86F40F7ABCFF107DC1FF015284F200859ACE008B9CFF008B9C29FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00004A7BED0C72 B2FF107DC1FF0A6BA9FF004A7BDA00698A02008B9C82008B9C13FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00004A7BE50A69 A6FF0B6DABFF004A7BF500487844FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000048783B004B 7CDA004A7BE300487847FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = btnRemovePluginClick TabOrder = 2 end object btnConfigPlugin: TBitBtn AnchorSideRight.Control = pnlButton AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 587 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 Caption = 'Con&figure' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 001F000000080000003300000033000000040000002400000000000000000000 0000000000000000000000000000000000330000003300000033000000332D73 BAAF1B3D60523F93D4FF3F93D4FF102438413578BAC300000024000000000000 0000000000230000002F00000000B88445FFC89451FFCE934AFF6D8192FF40A9 EAFF429EDDFF52D0F8FF52D0F8FF439EDCFF48AAE2FF3980C8B6000000000000 0023AA7A3EBFB68243ED00000033B58142FFF5C378FFFCC371FFAD7E49FF3B9E E3FF4ECFFBFF41B0EDFF42B1EDFF50CFFAFF439EDCFF1B3D5F5200000000AA7A 3FBED2A76FFFD7A561FFB88241FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCF FCFF40B0EDFFC39F7BFF987653CB42B1EEFF52D0F9FF3F92D5FF00000000B984 43E9DDBB8CFFEEC486FFE8B466FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCE FBFF3FAFEDFFFAB66DFFC7751FCE41B1EFFF52D0F9FF3F92D5FF000000330000 0033B78242FFE4B163FFEBC68EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399C E1FF4CCEFBFF3FB0EEFF40B1EFFF4FCFFCFF429EDCFF16324E31B98545FFB782 42FFC8934EFFDFAB5EFFE4C494FFB68245DAB8813F3CBE823B2561809CFF37A8 EFFF399DE3FF4CCFFDFF4AC7F8FF3D9EE1FF45AAE4FF3982CB9FC38F4EFFE2B5 72FFDEB06AFFDBA658FFC59555FF926935300000000000000000AA7333436A83 99FFCD9F5FFF298DE2FF2B8FE1FFB48B5AFF3081D29100000000C5995FFFF1DC BBFFECD2ACFFD6A152FFC18C49FF70502A620000000C0000000C704F2861C88D 44FFDFA24CFFEACEA6FFF1D7B2FFD79A51FF0000000000000000B98442FFB680 3EFFCEA673FFDBAE6EFFCB954BFFB88344FF6E4F2A616E4F2A61B88344FFCD97 4AFFDCAE6DFFD0A772FFB9813CFFBE843FFF0000000000000000000000000000 002FBA8547FFCE9949FFDAB276FFC9944BFFBE8943FFBE8943FFC9944BFFDAB2 76FFCE9949FFBA8546FF0000002F00000000000000000000000000000000B782 42ECD3AE7CFFE7CBA4FFEAD4B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4 B2FFE7CBA4FFD3AE7CFFB78242EC00000000000000000000000000000000B985 44AFCCA26CFFD4B080FFB98343FFCCA470FFC9984EFFC9984EFFCCA470FFB983 43FFD4B080FFCCA26CFFB98544AF000000000000000000000000000000000000 0000B98544AFB98443E900000000B78140FFE9D4B4FFE9D4B4FFB78140FF0000 0000B98443E9B98544AF00000000000000000000000000000000000000000000 0000000000000000000000000000BA8545FFB9843FFFB9843FFFBA8545FF0000 0000000000000000000000000000000000000000000000000000 } OnClick = btnPluginsNotImplementedClick TabOrder = 3 end object btnTweakPlugin: TBitBtn AnchorSideRight.Control = btnConfigPlugin AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 471 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 Caption = '&Tweak' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000009595 95B4818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF959595A800000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0 F0FFE0E0E0FFADADADFFBABABAFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFC6C6C6FFC7C7C7FFC7C7C7FFC8C8C8FFC8C8C8FFB5B5 B5FF929292FF9E9E9EFFABABABFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFD4D4D4FF7777 77FF858585FF909090FF9D9D9DFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFB0B0B0FF585858FF585858FF585858FF585858FF5959 59FF626262FF6C6C6CFFDCDCDCFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFF696969FF696969FF696969FF6A6A6AFF6A6A6AFF6A6A 6AFF6A6A6AFFD6D6D6FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF585858FF585858FFB0B0B0FF585858FF6A6A6AFF6A6A 6AFFCCD2D2FFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF696969FFD2D2D2FFECECECFFD2D2D2FF696969FF6669 69FFECECECFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFFC5C5C5FFC6C6C6FFB0B0B0FF585858FF585858FF5858 58FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFEBEBEBFFEBEBEBFF696969FF696969FF696969FFD2D2 D2FFEDEDEDFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFC4C4C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6C6FFC6C6 C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFEDEDEDFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000009999 99AC818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF8181815600000000 } OnClick = btnTweakPluginClick TabOrder = 4 end object btnToggleOptionPlugins: TBitBtn AnchorSideRight.Control = btnAddPlugin AnchorSideBottom.Control = pnlButton AnchorSideBottom.Side = asrBottom Left = 7 Height = 30 Top = 3 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Left = 6 OnClick = btnPluginsNotImplementedClick TabOrder = 5 Visible = False end end object ImgSwitchEnable: TImage[3] Left = 16 Height = 16 Top = 16 Width = 16 Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963B108000089504E47 0D0A1A0A0000000D49484452000000100000001008060000001FF3FF61000004 177A5458745261772070726F66696C6520747970652065786966000078DAAD56 6DB2EB260CFDCF2ABA04242104CBE173A63BE8F22BC026B9499CA4EFD64C2C06 84743847E098F6CFDFDDFCA50F4470C6B1041FBDB7FAB8E82226ED047B7BDA61 D7185837DFE703C71BCCCB09544B6A690D8A3B66E9183FFDFDB61AE8C504F0C3 02DA69F03EB1A4631C2DFE40D4D3CE71DBCEF1EBBD86DEDBDA5D725E69F06B53 2B8539C3A8635696682EF3DA447FAC7D992D6A0B36D902CE565B6CD656946404 B21D1C5403093A34A86A0B14C5E8B0A1A8452C48732C9060C4429680DC68D051 2852A54048051B113943B8B1C0CC1B67BE024133575057040D06BAE46D339F1C BE69BD17AB1C01E8EEE1E04A71210E1D60D048E3AD6E2A08F443379E049F6D3F E64E58520579D21C7483C9E6152233DC6A8B660190FAB1DA555F2075A886B34A 9CE6660503A412580FC4E0C10AA20038C2A00225458EE430AB02C08C5541A223 F2AA4DD03AD2DCBA4660FA22E31AD7A3A2FA307912D5265252B19C63AD1F7141 6B2831B16366CFC2812327E3C93BCFDE7BF1E3CC252171C2E2452448941428B8 C0C1070921C4902246D223C9D1478921C69892E64CCE244EBA3AA9474A193365 9739FB2C39E49853D1F229AE70F1454A28B1A48A95AAAB5C7D951A6AACA941D3 5232CD356EBE490B2DB6D4B5D63A75D7B9FB2E3DF4D8D356ED50F5A9FD07D5E0 500DA752C34FB66A3A2A3202CD1030EE191E9AA962E8401597A18016340ECD6C 00E770283734B311F554302A481EDA54B0C98057095D03E40E5BBB9B725FEB66 94EB4FBAE137CA9921DDFFA01C9A460FBABD50AD8E9BB04CC5D6291C9C5AD2D3 97B363703C2EB6B3F35BFB6D20C99167DFEA2D98F760A86BD0B2393BBFB51781 C6E5FB1E8BD47370CD1A56E26A7B8C13E3975BF6F10868F6DA023B47EAD30D21 36FC40923F1605535CC2903086A7DD95F02541A0D5B4547B9ECAB230592D452D 544D65FD05263E38B210D620C133E3027B8FE9201FEDDC817E7B0F4BA58E5466 E612BE8A95F946577E479791D51BA36FA031ED78A5BF846606368F270D29AFB5 C53DE95CD74CF012F2D6B7F189D204BF47CB4903819F91FDF349D12FFE8A67BB CFF790CC0FDAF880663B87ABAA38591B3BF13741CD2B457769867AC91A1D9BA2 0386B18F726E7C351E099FF92A75F3759E2E734FD83D5F74603951BDB8597690 B238524A4E6A1E6DF7B4F0BD2830DAF1FAE89809F065F1A77E1EC8E2AF98DF54 59E3E24FD25E70153E7265BBFE1B39B0C7D75C9DB7BBD656BAAAAD59A066FAEF 827874627FE481562FEFB689CB2C60F801176F0DFB4538F3DBEF902FFB3E6A2E EFA3FD1A0F9C789ADF9F044F3F239A3F8622B7EF4C72E755ABA8FA7B54E9EAD4 9DD6FCFED3B8CFDADDED770353FA099CFB45A59E76496EDE786C4FFEE4A0F7EA C951978DE5CFE837FFC35F1AA9BDCF2332FA5DFF4E45F32FD63F5DDF07C73A67 00000006624B474400FF00FF00FFA0BDA793000000097048597300002E230000 2E230178A53F760000000774494D4507E2090A022831FAF2E8C20000041B4944 41543811011004EFFB018D8D8DCF000000300000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000D07272723104000000307171710000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000008F8F8F30000000000400000000FEFEFE00A8A9AA003C3C3C0000000000 EDEDED00000000000000000000000000000000001313130000000000C4C4C400 5857560000000000000000000400000000FDFEFE003A3A3A00FEFEFE00000000 00E1E2E3000000000000000000000000000000000011111100000000003A3A3A 00FDFEFE0000000000000000000400000000FEFDFE00FEFEFE00000000000000 0000E8E6E500555655000000000000000000B8B7B800FEFEFE00000000000000 0000FEFDFE0000000000000000000200000000FEFEFD00FEFEFE00FEFEFE00FE FEFE00EFEFEF00000000000000000000000000E2E2E200FEFEFE00FEFEFE00FE FEFE00FEFEFD0000000000000000000400000000FDFEFE00FEFEFE0000000000 00000000FBFCFB00000000000000000000000000FBFCFB00FEFEFE0000000000 00000000FDFEFE0000000000000000000400000000FEFDFE00FEFEFE00000000 0000000000F2F1F30087868800000000000000000000000000FEFEFE00000000 0000000000FEFDFE0000000000000000000400000000FDFEFE00FEFEFF000000 0000000000000000000000000000000000000000000000000000FEFEFF000000 000000000000FDFEFE0000000000000000000400000000FEFEFD00FEFEFE0000 00000000000000FBFCFB0005040500000000000000000000000000FEFEFE0000 00000000000000FEFEFD0000000000000000000400000000FEFEFE00FEFEFE00 0000000000000000FBFBFB00050405000000000000000000F6F7F600FEFEFE00 0000000000000000FEFEFE0000000000000000000400000000FDFDFE00FEFEFE 0000000000000000006666670000000000000000000000000000000000FEFEFE 000000000000000000FDFDFE0000000000000000000200000000FEFEFE00CDCD CD00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFEFE00FEFE FE00FEFEFE00CDCDCD00FEFEFE0000000000000000000400000000FEFEFE0047 4746000000000000000000000000000000000000000000000000000000000000 0000000000000047474600FEFEFE00000000000000000004F1F1F1B3ABAAA94D 000000000000000000000000FBFBFB0000000000000000000000000000000000 05050500000000000000000000000000F7F7F7CD000000000100000020000000 1300000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000F3FFFFFFDA588BEB22DF1301 E30000000049454E44AE426082 } Visible = False end object ImgSwitchDisable: TImage[4] Left = 88 Height = 16 Top = 16 Width = 16 Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963D508000089504E47 0D0A1A0A0000000D49484452000000100000001008060000001FF3FF61000004 3B7A5458745261772070726F66696C6520747970652065786966000078DAAD57 6D92EB280CFCCF29F6084842028EC367D5DE608FBF02639289E399BC9A672AC1 25CB52D32D4162DA7FFF76F38F5E10D11AC73E4814B17AB9E82226BD09F671B5 351F36B06E7E9F17AC6F306F1FA0CEA4331D46EFD6535AF6D35FF6AC81DE3C00 7E7981761A7C4EECD3B2A3C52F887ADF391ECB599FDE6BE8BD1DAB4B4E940639 1675A430671875CCCA12CDD74487D70FEBBD9F23EA0836D902CE565B6CD65120 0202D90E0EAA81041D1A549D0B14C5E8B0A1D719B1204D5B208F110B59027263 40474F912A05422AD888C819C28D0566DE38F315089AB982BA226830D057BE1D E627874F46EFC52A4700BA7A585C292EC4A1030C1A697CAB9B0A027DE9C693E0 73ECCB3C094BAA204F9A832E30D97C84C80C8FDAA25900A47EACF3515FE0EB50 0D679538CDCD0A064825B002C420603DA207708441054A8A1CC96156058019AB 82444724AA4DD03AD2DCFA8E87E98B8C875D5B45F56112F2AA4DA4A46239C75A 3FDE05ADA1C4C48E99853D078E9C8C90386111F1327A2E79F2CEB317EF7DF0D1 A740C1050E127C082186143192B62447893E8618634A9A33399338E9DB493D52 CA9829BBCC59B2CF21C79C8A964F71858B145F42892555AC545DE52AD5D75063 4D0D9A969269AE7193E65B68B1A5AEB5D6A9BBCE5DBAEFA1C79EB66A4BD5CBF8 03D560A98653A9E1E7B76A6AF57E049A2160EC333C3453C5D0812AEE87025AD0 3834B3019CC3A1DCD0CC46D4AE6054903CB4A960930151095D03E40E5BBB8772 1FEB6694EB9F74C34F943343BABFA01C9A462FBABD51AD8E9DB04CC58E2E1C9C 5AD2EECBD931381E1BDB79F3DBF9D3403E479EF75677C1BC8DA11E46CBE6BCF9 ED7C13686CBEDF63F1F5341E4F0D2B71B5FD1AD0C191D56ADD09529F591162C3 1F1892F552282E190C0963B8A468693CD0F3EC87798735AFF2483DD2043DAEF0 F0566C8D4F184136F67A1A45BB6D2EADB88BDA319D6B290F895F04A97EAF37FA BB3A927A3805F1216D0CEF812DD50E6437C01EFE226395497799171F96498009 F094E83B5CF97B5CA6ACC2D373FEC829D7F6089B305C37050F7C76CF66DD74F1 4BA20BA7F900A0FB68D9EBBB16969995B5CB311CF8E81AAED15A10BD2F29F330 508D2BE18574297573D5F82D57E6B4165A584E546FB6921DE44A51305F0D5DE8 962ADAF1FAD6F24195796AC2D477131EB571ED41DD34F249BDEED44FB8CC173C E0365F2EDD14C3E6CB76B48F6634EF8AEBDCD2B5B6EEC2F91837FF99EA907F2C E595BB0E61E78AF1AE22166BA3C04232B71536595B2D529CD0DD1E5068DE9981 2DE565BD422339A155E19BD696C26B69D05CDEFBEBDB96CC705659937D2A083D 453433247CB8C9C3E3643DA39DA78D5122DC4EECFAF7C0D25D2BEE730D227F78 E44A7ACFBA792E5A7A83A7F49313EEDF9D287A1CE9FF970FCF1EE47B077378E4 0DABFB8DE58F7E9298BFF29BE60CE4ABFE77B42712FD6115F5E4FC1F5116642E 95DC3D9600000006624B474400FF00FF00FFA0BDA79300000009704859730000 2E2300002E230178A53F760000000774494D4507E2090A02270955684C930000 041B494441543811011004EFFB018D8D8DCF0000003000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000D072727231040000003071717100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000008F8F8F30000000000400000000FEFEFE00A8A9AA003C3C3C00 0000000000000000000000000000000000000000000000000000000000000000 C4C4C4005857560000000000000000000400000000FDFEFE003A3A3A00FEFEFE 00000000000202020000000000000000000000000000000000FEFEFE00000000 003A3A3A00FDFEFE0000000000000000000400000000FEFDFE00FEFEFE000000 000000000000B3B3B400D2D2D20000000000000000002E2E2E004B4B4A000000 000000000000FEFDFE0000000000000000000200000000FEFEFD00FEFEFE00FE FEFE00FEFEFE00D7D7D6000F0E0E000F0E0E000F0E0E00D7D7D600FEFEFE00FE FEFE00FEFEFE00FEFEFD0000000000000000000400000000FDFEFE00FEFEFE00 0000000000000000050505000000000000000000000000000A090A00FEFEFE00 0000000000000000FDFEFE0000000000000000000400000000FEFDFE00FEFEFE 0000000000000000000504050000000000000000000000000000000000FEFEFE 000000000000000000FEFDFE0000000000000000000400000000FDFEFE00FEFE FF0000000000000000000000000000000000000000000000000000000000FEFE FF000000000000000000FDFEFE0000000000000000000400000000FEFEFD00FE FEFE0000000000000000000E0F0D006B6B6B00000000000000000095959500FE FEFE000000000000000000FEFEFD0000000000000000000400000000FEFEFE00 FEFEFE0000000000000000000504050000000000000000000000000005040500 FEFEFE000000000000000000FEFEFE0000000000000000000400000000FDFDFE 00FEFEFE000000000000000000111111000000000000000000000000001E1E1E 00FEFEFE000000000000000000FDFDFE0000000000000000000400000000FEFE FE00CDCDCD003131310000000000181A1B00C3C4C60000000000000000000B0D 0E00FEFEFE0000000000CFCFCF004949480000000000000000000400000000FE FEFE004747460000000000000000000101000000000000000000000000000000 000000151515000000000047474600FEFEFE00000000000000000004F1F1F1B3 ABAAA94D000000000000000000000000FBFBFB00000000000000000000000000 0000000005050500000000000000000000000000F7F7F7CD0000000001000000 2000000013000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000F3FFFFFFDA0D89BE DA0408C07B0000000049454E44AE426082 } Visible = False end object ImgByExtension: TImage[5] Left = 48 Height = 16 Top = 16 Width = 16 Picture.Data = { 1754506F727461626C654E6574776F726B477261706869638E04000089504E47 0D0A1A0A0000000D49484452000000100000001008060000001FF3FF61000000 06624B474400FF00FF00FFA0BDA793000000097048597300000B1300000B1301 009A9C180000000774494D4507E20A0B021E1F502469CD0000041B4944415438 11011004EFFB0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000001CECFD1FF000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000F1F1F1 0041403E00A1A2A3002D2D2E0002000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000200000000C7C7C7007978770064636200AF AEAD00FCFCFC00CCCBCB0032312F00DDDDDD00E4E3E3003A393700C9C8C800A0 9F9E00000000005F5E5D007574730001A9A9ABFF57575500B7B8B90002020300 474644009FA0A2002F2F2F00A8A8A700C1C1C0000C0B0C003232320058595A00 F2F2F20041403E00A1A2A3002D2D2E0004E5E5E5000000000049484700000000 0000000000EAE9E900000000004B4B4C0092919000F8F8F8007C7C7D00010101 0000000000000000000000000000000000041819190000000000B0B1B3001D1D 1D00010101000000000000000000B4B4B300393A3A0000000000AFB0AF005F5F 60000303030000000000F2F1F2000000000000000000FF959698FF4C4D4DFF19 1919FF373838FFA2A3A5FF979799FF080808FFB1B2B4FFB0B1B3FF000000FF93 9495FFCECFD1FF7B7C7DFF232324FF525353FF01000000FF00000000CECFD100 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B36A77076CCD6E9C0000 000049454E44AE426082 } Visible = False end object ImgByPlugin: TImage[6] Left = 64 Height = 16 Top = 16 Width = 16 Picture.Data = { 1754506F727461626C654E6574776F726B477261706869639D02000089504E47 0D0A1A0A0000000D49484452000000100000001008060000001FF3FF61000000 1974455874536F6674776172650041646F626520496D616765526561647971C9 653C0000023F4944415478DA94534D681341187DB3BB894934B4066B69215E1A 8D17C160F18F4A6C4EDE22420F9E2C9EF52E1541457A2882A0288805152F1E3C C48B378B12A42069AA9556121BBD58B5084D5A6336C9FE8CDFCC6C4DA9ABE047 66F3CDEC7C6FBFF7DE0CE39C8331868D313B3E940BC7FAB3223757BE565363F9 187C42D4AAC7A698B97A98F366590E91E32F216A35BF174B2B8D27B5E233584B F3309BED45FC230CD5F2B15C787B4F56338272D1755C44E303D08361ECD89548 9427F772D76E139DE5A744E7E41F00AEE3649367CE03ED36CD74800580F26DB9 2179FA1CCD5DDAA9A178FD42D6B7031526215940E53E507D03685BD4F2EBB344 B6051C990477B93F859AC9A74A0FEE6622BD7D88674681B79714002389387DDD 6DC9C1F4000A578ECE05B746F639965DA5D218F36C1CA04977F9DEA9C2EE9111 60E10601083D84C65C75D6B507E8398ED5CA07741D486176E2265217F36C9D42 C533867E44C508291D9807C0758585260D47D105DBE842FA45B83B9A0EC5A2B4 F927AD8AF60DB547D2A6EABE4328DE7A0CB3652D469E4F2738D3D63A2ED86E3A 393A4C622C03DF5F01FD07A9D83B9D42B8C6179A37C06D0743D7A68513614367 8E35E601C8C3683780FA2760DB4E9472EFA0194C7E3D148B203E9CA4BC4E8D48 D005F1B01DDEA120EF82414AF726E85F47FDDB1C062FE707C5BBF7774E1410B4 240BC6347F1B09F947E96121AA053412DC85CDD8477125E4B1FEBC36C51ECD64 841EAB2DE7E56680751BF7AB23F83B84DCF35E2E2DF6F25AC731759998DF6DFC 9FF825C000F91FE26A96DA3C930000000049454E44AE426082 } Visible = False end end doublecmd-1.1.30/src/frames/foptionsmultirename.pas0000644000175000001440000001400215104114162021437 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi-Rename options page Copyright (C) 2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsMultiRename; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, StdCtrls, ExtCtrls, EditBtn, Buttons, Menus, //DC fOptionsFrame; type { TfrmOptionsMultiRename } TfrmOptionsMultiRename = class(TOptionsEditor) ckbShowMenuBarOnTop: TCheckBox; edInvalidCharReplacement: TEdit; lbInvalidCharReplacement: TLabel; rgLaunchBehavior: TRadioGroup; rgExitModifiedPreset: TRadioGroup; gbSaveRenamingLog: TGroupBox; rbRenamingLogPerPreset: TRadioButton; rbRenamingLogAppendSameFile: TRadioButton; fneMulRenLogFilename: TFileNameEdit; btnMulRenLogFilenameRelative: TSpeedButton; btnMulRenLogFilenameView: TSpeedButton; ckbDailyIndividualDirMultRenLog: TCheckBox; ckbFilenameWithFullPathInLog: TCheckBox; pmPathToBeRelativeToHelper: TPopupMenu; procedure rbRenamingLogAppendSameFileChange(Sender: TObject); procedure btnMulRenLogFilenameRelativeClick(Sender: TObject); procedure btnMulRenLogFilenameViewClick(Sender: TObject); private protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Controls, //DC uShowMsg, uShowForm, uDCUtils, uSpecialDir, DCStrUtils, uGlobs, uLng; { TfrmOptionsMultiRename } { TfrmOptionsMultiRename.GetIconIndex } class function TfrmOptionsMultiRename.GetIconIndex: integer; begin Result := 42; end; { TfrmOptionsMultiRename.GetTitle } class function TfrmOptionsMultiRename.GetTitle: string; begin Result := rsOptionsEditorMultiRename; end; { TfrmOptionsMultiRename.Init } procedure TfrmOptionsMultiRename.Init; begin ParseLineToList(rsMulRenExitModifiedPresetOptions, rgExitModifiedPreset.Items); ParseLineToList(rsMulRenLaunchBehaviorOptions, rgLaunchBehavior.Items); end; { TfrmOptionsMultiRename.Load } procedure TfrmOptionsMultiRename.Load; begin ckbShowMenuBarOnTop.Checked := gMulRenShowMenuBarOnTop; edInvalidCharReplacement.Text := gMulRenInvalidCharReplacement; rgLaunchBehavior.ItemIndex := integer(gMulRenLaunchBehavior); rgExitModifiedPreset.ItemIndex := integer(gMulRenExitModifiedPreset); case gMulRenSaveRenamingLog of mrsrlPerPreset: begin rbRenamingLogPerPreset.Checked := True; rbRenamingLogAppendSameFileChange(rbRenamingLogAppendSameFile); end; mrsrlAppendSameLog: rbRenamingLogAppendSameFile.Checked := True; end; fneMulRenLogFilename.FileName := gMulRenLogFilename; ckbDailyIndividualDirMultRenLog.Checked := gMultRenDailyIndividualDirLog; ckbFilenameWithFullPathInLog.Checked := gMulRenFilenameWithFullPathInLog; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; { TfrmOptionsMultiRename.Save } function TfrmOptionsMultiRename.Save: TOptionsEditorSaveFlags; begin Result := []; gMulRenShowMenuBarOnTop := ckbShowMenuBarOnTop.Checked; gMulRenInvalidCharReplacement := edInvalidCharReplacement.Text; gMulRenLaunchBehavior := TMulRenLaunchBehavior(rgLaunchBehavior.ItemIndex); gMulRenExitModifiedPreset := TMulRenExitModifiedPreset(rgExitModifiedPreset.ItemIndex); if rbRenamingLogPerPreset.Checked then gMulRenSaveRenamingLog := mrsrlPerPreset else gMulRenSaveRenamingLog := mrsrlAppendSameLog; gMulRenLogFilename := fneMulRenLogFilename.FileName; gMultRenDailyIndividualDirLog := ckbDailyIndividualDirMultRenLog.Checked; gMulRenFilenameWithFullPathInLog := ckbFilenameWithFullPathInLog.Checked; end; { TfrmOptionsMultiRename.rbRenamingLogAppendSameFileChange } procedure TfrmOptionsMultiRename.rbRenamingLogAppendSameFileChange(Sender: TObject); begin fneMulRenLogFilename.Enabled := rbRenamingLogAppendSameFile.Checked; btnMulRenLogFilenameRelative.Enabled := rbRenamingLogAppendSameFile.Checked; btnMulRenLogFilenameView.Enabled := rbRenamingLogAppendSameFile.Checked; ckbDailyIndividualDirMultRenLog.Enabled := rbRenamingLogAppendSameFile.Checked; end; { TfrmOptionsMultiRename.btnMulRenLogFilenameRelativeClick } procedure TfrmOptionsMultiRename.btnMulRenLogFilenameRelativeClick(Sender: TObject); begin fneMulRenLogFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneMulRenLogFilename, pfFILE); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMultiRename.btnMulRenLogFilenameViewClick } procedure TfrmOptionsMultiRename.btnMulRenLogFilenameViewClick(Sender: TObject); var sRenameLogFilename: string; begin if ckbDailyIndividualDirMultRenLog.Checked then sRenameLogFilename := mbExpandFileName(ExtractFilePath(fneMulRenLogFilename.FileName) + IncludeTrailingPathDelimiter(EnvVarTodaysDate) + ExtractFilename(fneMulRenLogFilename.FileName)) else sRenameLogFilename := mbExpandFileName(fneMulRenLogFilename.FileName); if FileExists(sRenameLogFilename) then ShowViewerByGlob(sRenameLogFilename) else MsgError(Format(rsMsgFileNotFound, [sRenameLogFilename])); end; end. doublecmd-1.1.30/src/frames/foptionsmultirename.lrj0000644000175000001440000000476115104114162021456 0ustar alexxusers{"version":1,"strings":[ {"hash":100159984,"name":"tfrmoptionsmultirename.ckbshowmenubarontop.caption","sourcebytes":[83,104,111,119,32,109,101,110,117,32,98,97,114,32,111,110,32,116,111,112,32],"value":"Show menu bar on top "}, {"hash":15447080,"name":"tfrmoptionsmultirename.rglaunchbehavior.caption","sourcebytes":[80,114,101,115,101,116,32,97,116,32,108,97,117,110,99,104],"value":"Preset at launch"}, {"hash":31336276,"name":"tfrmoptionsmultirename.rgexitmodifiedpreset.caption","sourcebytes":[69,120,105,116,32,119,105,116,104,32,109,111,100,105,102,105,101,100,32,112,114,101,115,101,116],"value":"Exit with modified preset"}, {"hash":137559831,"name":"tfrmoptionsmultirename.gbsaverenaminglog.caption","sourcebytes":[82,101,110,97,109,101,32,108,111,103],"value":"Rename log"}, {"hash":125674884,"name":"tfrmoptionsmultirename.rbrenaminglogperpreset.caption","sourcebytes":[80,101,114,32,112,114,101,115,101,116],"value":"Per preset"}, {"hash":204365733,"name":"tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption","sourcebytes":[65,112,112,101,110,100,32,105,110,32,116,104,101,32,115,97,109,101,32,114,101,110,97,109,101,32,108,111,103,32,102,105,108,101],"value":"Append in the same rename log file"}, {"hash":15252584,"name":"tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":68945492,"name":"tfrmoptionsmultirename.btnmulrenlogfilenameview.hint","sourcebytes":[86,105,101,119,32,108,111,103,32,102,105,108,101,32,99,111,110,116,101,110,116],"value":"View log file content"}, {"hash":33348585,"name":"tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption","sourcebytes":[73,110,100,105,118,105,100,117,97,108,32,100,105,114,101,99,116,111,114,105,101,115,32,112,101,114,32,100,97,121],"value":"Individual directories per day"}, {"hash":12209432,"name":"tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption","sourcebytes":[76,111,103,32,102,105,108,101,110,97,109,101,115,32,119,105,116,104,32,102,117,108,108,32,112,97,116,104],"value":"Log filenames with full path"}, {"hash":211525865,"name":"tfrmoptionsmultirename.lbinvalidcharreplacement.caption","sourcebytes":[82,101,112,108,97,99,101,32,105,110,118,97,108,105,100,32,102,105,108,101,110,97,109,101,32,99,104,97,114,97,99,116,101,114,32,98,38,121],"value":"Replace invalid filename character b&y"} ]} doublecmd-1.1.30/src/frames/foptionsmultirename.lfm0000644000175000001440000002704715104114162021447 0ustar alexxusersinherited frmOptionsMultiRename: TfrmOptionsMultiRename Height = 649 Width = 735 HelpKeyword = '/multirename.html#configuration' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 6 ClientHeight = 649 ClientWidth = 735 DesignLeft = 753 DesignTop = 243 object ckbShowMenuBarOnTop: TCheckBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 19 Top = 6 Width = 144 BorderSpacing.Top = 6 Caption = 'Show menu bar on top ' TabOrder = 0 end object rgLaunchBehavior: TRadioGroup[1] AnchorSideLeft.Control = ckbShowMenuBarOnTop AnchorSideTop.Control = edInvalidCharReplacement AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 101 Top = 60 Width = 723 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Preset at launch' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 81 ClientWidth = 719 ItemIndex = 0 Items.Strings = ( 'Last masks under [Last One] preset' 'Last preset' 'New fresh masks' ) TabOrder = 2 end object rgExitModifiedPreset: TRadioGroup[2] AnchorSideLeft.Control = ckbShowMenuBarOnTop AnchorSideTop.Control = rgLaunchBehavior AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 101 Top = 167 Width = 723 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Exit with modified preset' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 81 ClientWidth = 719 ItemIndex = 0 Items.Strings = ( 'Ignore, just save as the [Last One]' 'Prompt user to confirm if we save it' 'Save automatically' ) TabOrder = 3 end object gbSaveRenamingLog: TGroupBox[3] AnchorSideLeft.Control = ckbShowMenuBarOnTop AnchorSideTop.Control = rgExitModifiedPreset AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 155 Top = 274 Width = 723 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Rename log' ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 6 ClientHeight = 135 ClientWidth = 719 TabOrder = 4 object rbRenamingLogPerPreset: TRadioButton AnchorSideLeft.Control = gbSaveRenamingLog AnchorSideTop.Control = gbSaveRenamingLog Left = 8 Height = 19 Top = 6 Width = 72 BorderSpacing.Left = 8 Caption = 'Per preset' Checked = True TabOrder = 2 TabStop = True end object rbRenamingLogAppendSameFile: TRadioButton AnchorSideLeft.Control = rbRenamingLogPerPreset AnchorSideTop.Control = rbRenamingLogPerPreset AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 31 Width = 208 BorderSpacing.Top = 6 Caption = 'Append in the same rename log file' OnChange = rbRenamingLogAppendSameFileChange TabOrder = 1 end object fneMulRenLogFilename: TFileNameEdit AnchorSideLeft.Control = rbRenamingLogPerPreset AnchorSideTop.Control = rbRenamingLogAppendSameFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnMulRenLogFilenameRelative Left = 8 Height = 23 Top = 56 Width = 655 DialogOptions = [] FilterIndex = 0 DefaultExt = 'log' HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 0 end object btnMulRenLogFilenameRelative: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneMulRenLogFilename AnchorSideRight.Control = btnMulRenLogFilenameView AnchorSideBottom.Control = fneMulRenLogFilename AnchorSideBottom.Side = asrBottom Left = 663 Height = 23 Hint = 'Some functions to select appropriate path' Top = 56 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnMulRenLogFilenameRelativeClick end object btnMulRenLogFilenameView: TSpeedButton AnchorSideTop.Control = fneMulRenLogFilename AnchorSideRight.Control = gbSaveRenamingLog AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneMulRenLogFilename AnchorSideBottom.Side = asrBottom Left = 687 Height = 23 Hint = 'View log file content' Top = 56 Width = 24 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 8 Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000130B0000130B00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C17213B6E9E3A6EA000000000000000000000000000 00000000000000000000000000000000000000000000000000003A83CC44C8FF 29B2FF316DA70000000000000000000000000000000000000000000000000000 000000000000000000003881CC55DBFF3AC6FF82756C6F6C6B69696C68696F73 6F66CFAA61B87E0BB67D0AB67D0AB67C0AB67D0AB77F0F7F580A0000002980DB 9F928C7D7773E9D7A3FFF5B0FFEEA8E7CA94737379F6FBFFF2F7FFF2F7FFF2F6 FFF2F7FFF7FFFFB77F0F000000C98506828088E9D8A5FFF8BBFFEFB2FFE7A6FF E6A6E6C28984858AECECEDECECEDEAEBEEEAEBEEF5FBFFB67D0A000000C08511 7F8290FFF2AFFFEFB2FFE9ABFFE7B3FFEFCAFFE09C7B7B7EEAE9E8EAE9E8E6E6 E6E6E6E6F5FBFFB67C09000000BD8412868C9AFFEAA5FFE6A4FFE7B2FFEDC8FF F7E3FFDC96858689E5E4E3E5E4E3E0E0E1E0E0E1F5FBFFB67C09000000BB8210 9DA3B0ECCE97FFE4A3FFEEC9FFF7E3FFF3DAECBE8096979AE1E1E0DEDDDCDBDB DCDBDBDCF5FBFFB67C09000000B9800DDDE3EE9E9B9BEECA8FFFDD9AFFDA95EE C2829B9895D9D7D7D9D7D7D9D7D7D8D6D8D8D6D8F6FCFFB67C0A000000B77E0B F9FFFFC4C4C6A5A4A6A4A4A7A4A3A6B1AFB3D6D4D3D4D2D3D4D2D3D4D2D3D4D2 D3D4D2D3F6FCFFB67D0A000000B67D0AF7FDFFCFCED0CFCECECCCBCDCFCECECC CBCDCCCBCDCCCBCDCFCECECCCBCDCCCBCDCCCBCDF6FCFFB67D0A000000B67D0C F5FDFFF3F8FFF5F9FFF6FBFFF6FBFFF6FBFFF6FAFFF5FAFFF5F9FFF4F8FFF3F7 FFF3F7FFF4FDFFB67D0C000000B67F10F7E4C0DCAA4ADDAB4BDDAC4CDDAC4CDD AC4CDDAC4CDDAC4CDDAC4CDDAB4BDCAB4ADCAA4AF7E4C0B67F10000000B88216 EFD2A0EDCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF 9BEDCF9BEFD2A0B88216000000825D14B88217B78114B68114B68114B68114B6 8114B68114B68114B68114B68114B68114B78114B88217825D14 } OnClick = btnMulRenLogFilenameViewClick end object ckbDailyIndividualDirMultRenLog: TCheckBox AnchorSideLeft.Control = rbRenamingLogPerPreset AnchorSideTop.Control = fneMulRenLogFilename AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 85 Width = 172 BorderSpacing.Bottom = 4 Caption = 'Individual directories per day' TabOrder = 3 end object ckbFilenameWithFullPathInLog: TCheckBox AnchorSideLeft.Control = rbRenamingLogPerPreset AnchorSideTop.Control = ckbDailyIndividualDirMultRenLog AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 110 Width = 167 BorderSpacing.Top = 6 Caption = 'Log filenames with full path' TabOrder = 4 end end object lbInvalidCharReplacement: TLabel[4] AnchorSideLeft.Control = ckbShowMenuBarOnTop AnchorSideTop.Control = edInvalidCharReplacement AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 35 Width = 196 Caption = 'Replace invalid filename character b&y' FocusControl = edInvalidCharReplacement ParentColor = False end object edInvalidCharReplacement: TEdit[5] AnchorSideLeft.Control = lbInvalidCharReplacement AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ckbShowMenuBarOnTop AnchorSideTop.Side = asrBottom Left = 205 Height = 23 Top = 31 Width = 112 TabOrder = 1 end object pmPathToBeRelativeToHelper: TPopupMenu[6] left = 452 top = 60 end end doublecmd-1.1.30/src/frames/foptionsmouse.pas0000644000175000001440000001111215104114162020244 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Mouse options page Copyright (C) 2006-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsMouse; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, Spin, ExtCtrls; type { TfrmOptionsMouse } TfrmOptionsMouse = class(TOptionsEditor) cbMouseMode: TComboBox; cbSelectionByMouse: TCheckBox; chkCursorNoFollow: TCheckBox; chkMouseSelectionIconClick: TCheckBox; gbScrolling: TGroupBox; gbSelection: TGroupBox; gbOpenWith: TGroupBox; lblMouseMode: TLabel; rbDoubleClick: TRadioButton; rbSingleClickBoth: TRadioButton; rbSingleClickFolders: TRadioButton; rbScrollLineByLine: TRadioButton; rbScrollLineByLineCursor: TRadioButton; rbScrollPageByPage: TRadioButton; seWheelScrollLines: TSpinEdit; procedure cbSelectionByMouseChange(Sender: TObject); procedure rbDoubleClickChange(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsMouse } procedure TfrmOptionsMouse.cbSelectionByMouseChange(Sender: TObject); begin cbMouseMode.Enabled:= cbSelectionByMouse.Checked; chkMouseSelectionIconClick.Enabled:= cbSelectionByMouse.Checked; if not cbSelectionByMouse.Checked then chkMouseSelectionIconClick.Checked:= False; end; procedure TfrmOptionsMouse.rbDoubleClickChange(Sender: TObject); begin chkCursorNoFollow.Enabled:= not rbDoubleClick.Checked; if rbDoubleClick.Checked then chkCursorNoFollow.Checked:= False; end; procedure TfrmOptionsMouse.Init; begin ParseLineToList(rsOptMouseSelectionButton, cbMouseMode.Items); end; procedure TfrmOptionsMouse.Load; begin cbSelectionByMouse.Checked:=gMouseSelectionEnabled; cbMouseMode.ItemIndex := gMouseSelectionButton; seWheelScrollLines.Value:= gWheelScrollLines; chkMouseSelectionIconClick.Checked:= Boolean(gMouseSelectionIconClick); case gScrollMode of smLineByLineCursor: rbScrollLineByLineCursor.Checked:= True; smLineByLine: rbScrollLineByLine.Checked:= True; smPageByPage: rbScrollPageByPage.Checked:= True; else rbScrollLineByLine.Checked:= True; end; case gMouseSingleClickStart of 0: rbDoubleClick.Checked:= True; 1, 5: rbSingleClickBoth.Checked:= True; 2, 6: rbSingleClickFolders.Checked:= True; end; chkCursorNoFollow.Enabled:= gMouseSingleClickStart > 0; chkCursorNoFollow.Checked:= gMouseSingleClickStart > 4; cbSelectionByMouseChange(cbSelectionByMouse); end; function TfrmOptionsMouse.Save: TOptionsEditorSaveFlags; begin gMouseSelectionEnabled := cbSelectionByMouse.Checked; gMouseSelectionButton := cbMouseMode.ItemIndex; gWheelScrollLines:= seWheelScrollLines.Value; gMouseSelectionIconClick:= Integer(chkMouseSelectionIconClick.Checked); if rbScrollLineByLineCursor.Checked then gScrollMode:= smLineByLineCursor else if rbScrollLineByLine.Checked then gScrollMode:= smLineByLine else if rbScrollPageByPage.Checked then gScrollMode:= smPageByPage; if rbDoubleClick.Checked then gMouseSingleClickStart:= 0 else if rbSingleClickBoth.Checked then gMouseSingleClickStart:= 1 else if rbSingleClickFolders.Checked then gMouseSingleClickStart:= 2; if chkCursorNoFollow.Checked then gMouseSingleClickStart += 4; Result := []; end; class function TfrmOptionsMouse.GetIconIndex: Integer; begin Result := 27; end; class function TfrmOptionsMouse.GetTitle: String; begin Result := rsOptionsEditorMouse; end; end. doublecmd-1.1.30/src/frames/foptionsmouse.lrj0000644000175000001440000000512715104114162020261 0ustar alexxusers{"version":1,"strings":[ {"hash":45807518,"name":"tfrmoptionsmouse.gbselection.caption","sourcebytes":[83,101,108,101,99,116,105,111,110],"value":"Selection"}, {"hash":170541445,"name":"tfrmoptionsmouse.cbselectionbymouse.caption","sourcebytes":[38,83,101,108,101,99,116,105,111,110,32,98,121,32,109,111,117,115,101],"value":"&Selection by mouse"}, {"hash":45374090,"name":"tfrmoptionsmouse.lblmousemode.caption","sourcebytes":[38,77,111,100,101,58],"value":"&Mode:"}, {"hash":242261230,"name":"tfrmoptionsmouse.chkmouseselectioniconclick.caption","sourcebytes":[66,121,32,99,108,105,99,38,107,105,110,103,32,111,110,32,105,99,111,110],"value":"By clic&king on icon"}, {"hash":157513703,"name":"tfrmoptionsmouse.gbscrolling.caption","sourcebytes":[83,99,114,111,108,108,105,110,103],"value":"Scrolling"}, {"hash":116243732,"name":"tfrmoptionsmouse.rbscrolllinebylinecursor.caption","sourcebytes":[76,105,110,101,32,98,121,32,108,105,110,101,32,38,119,105,116,104,32,99,117,114,115,111,114,32,109,111,118,101,109,101,110,116],"value":"Line by line &with cursor movement"}, {"hash":42428677,"name":"tfrmoptionsmouse.rbscrolllinebyline.caption","sourcebytes":[38,76,105,110,101,32,98,121,32,108,105,110,101],"value":"&Line by line"}, {"hash":47231125,"name":"tfrmoptionsmouse.rbscrollpagebypage.caption","sourcebytes":[38,80,97,103,101,32,98,121,32,112,97,103,101],"value":"&Page by page"}, {"hash":201823944,"name":"tfrmoptionsmouse.gbopenwith.caption","sourcebytes":[79,112,101,110,32,119,105,116,104],"value":"Open with"}, {"hash":65050299,"name":"tfrmoptionsmouse.rbdoubleclick.caption","sourcebytes":[68,111,117,98,108,101,32,99,108,105,99,107],"value":"Double click"}, {"hash":31955305,"name":"tfrmoptionsmouse.rbsingleclickboth.caption","sourcebytes":[83,105,110,103,108,101,32,99,108,105,99,107,32,40,111,112,101,110,115,32,102,105,108,101,115,32,97,110,100,32,102,111,108,100,101,114,115,41],"value":"Single click (opens files and folders)"}, {"hash":3492345,"name":"tfrmoptionsmouse.rbsingleclickfolders.caption","sourcebytes":[83,105,110,103,108,101,32,99,108,105,99,107,32,40,111,112,101,110,115,32,102,111,108,100,101,114,115,44,32,100,111,117,98,108,101,32,99,108,105,99,107,32,102,111,114,32,102,105,108,101,115,41],"value":"Single click (opens folders, double click for files)"}, {"hash":36904834,"name":"tfrmoptionsmouse.chkcursornofollow.caption","sourcebytes":[84,104,101,32,116,101,120,116,32,99,117,114,115,111,114,32,110,111,32,108,111,110,103,101,114,32,102,111,108,108,111,119,115,32,116,104,101,32,109,111,117,115,101,32,99,117,114,115,111,114],"value":"The text cursor no longer follows the mouse cursor"} ]} doublecmd-1.1.30/src/frames/foptionsmouse.lfm0000644000175000001440000001353615104114162020253 0ustar alexxusersinherited frmOptionsMouse: TfrmOptionsMouse Height = 385 Width = 488 HelpKeyword = '/configuration.html#ConfigMouse' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 385 ClientWidth = 488 DesignLeft = 380 DesignTop = 148 object gbSelection: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 89 Top = 6 Width = 476 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Selection' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 64 ClientWidth = 472 TabOrder = 0 object cbSelectionByMouse: TCheckBox AnchorSideRight.Side = asrBottom Left = 6 Height = 24 Top = 6 Width = 153 Caption = '&Selection by mouse' OnChange = cbSelectionByMouseChange TabOrder = 0 end object lblMouseMode: TLabel AnchorSideLeft.Control = cbSelectionByMouse AnchorSideTop.Control = cbMouseMode AnchorSideTop.Side = asrCenter Left = 6 Height = 20 Top = 34 Width = 42 Caption = '&Mode:' FocusControl = cbMouseMode ParentColor = False end object cbMouseMode: TComboBox AnchorSideLeft.Control = lblMouseMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSelectionByMouse AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSelection AnchorSideRight.Side = asrBottom Left = 56 Height = 28 Top = 30 Width = 408 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Right = 8 ItemHeight = 20 Style = csDropDownList TabOrder = 2 end object chkMouseSelectionIconClick: TCheckBox AnchorSideLeft.Control = cbSelectionByMouse AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSelectionByMouse Left = 171 Height = 24 Top = 6 Width = 147 BorderSpacing.Left = 12 Caption = 'By clic&king on icon' TabOrder = 1 end end object gbScrolling: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSelection AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 121 Top = 99 Width = 476 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Scrolling' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 96 ClientWidth = 472 TabOrder = 1 object rbScrollLineByLineCursor: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = gbScrolling AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 6 Height = 24 Top = 6 Width = 460 Anchors = [akTop, akLeft, akRight] Caption = 'Line by line &with cursor movement' Checked = True TabOrder = 0 TabStop = True end object rbScrollLineByLine: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = seWheelScrollLines AnchorSideTop.Side = asrCenter Left = 6 Height = 24 Top = 36 Width = 99 BorderSpacing.Right = 6 Caption = '&Line by line' TabOrder = 1 end object rbScrollPageByPage: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = seWheelScrollLines AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 6 Height = 24 Top = 66 Width = 460 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Caption = '&Page by page' TabOrder = 3 end object seWheelScrollLines: TSpinEdit AnchorSideLeft.Control = rbScrollLineByLine AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbScrollLineByLineCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 123 Height = 28 Top = 34 Width = 341 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 18 BorderSpacing.Top = 4 BorderSpacing.Right = 8 MaxValue = 10 MinValue = 1 TabOrder = 2 Value = 1 end end object gbOpenWith: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbScrolling AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 133 Top = 224 Width = 476 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Open with' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 108 ClientWidth = 472 TabOrder = 2 object rbDoubleClick: TRadioButton Left = 6 Height = 24 Top = 6 Width = 358 Caption = 'Double click' OnChange = rbDoubleClickChange TabOrder = 0 end object rbSingleClickBoth: TRadioButton Left = 6 Height = 24 Top = 30 Width = 358 Caption = 'Single click (opens files and folders)' TabOrder = 1 end object rbSingleClickFolders: TRadioButton Left = 6 Height = 24 Top = 54 Width = 358 Caption = 'Single click (opens folders, double click for files)' TabOrder = 2 end object chkCursorNoFollow: TCheckBox Left = 6 Height = 24 Top = 78 Width = 358 Caption = 'The text cursor no longer follows the mouse cursor' TabOrder = 3 end end end doublecmd-1.1.30/src/frames/foptionsmisc.pas0000644000175000001440000002174115104114162020060 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Miscellaneous options page Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsMisc; {$mode objfpc}{$H+} interface uses EditBtn, Buttons, Menus, Classes, SysUtils, StdCtrls, Spin, ExtCtrls, DividerBevel, fOptionsFrame; type { TfrmOptionsMisc } TfrmOptionsMisc = class(TOptionsEditor) btnThumbCompactCache: TButton; chkShowSplashForm: TCheckBox; chkDescCreateUnicode: TCheckBox; chkGoToRoot: TCheckBox; chkShowCurDirTitleBar: TCheckBox; chkThumbSave: TCheckBox; chkShowWarningMessages: TCheckBox; cmbDescDefaultEncoding: TComboBox; cmbDescCreateEncoding: TComboBox; cmbDefaultEncoding: TComboBox; dblThumbnails: TDividerBevel; gbExtended: TGroupBox; gbFileComments: TGroupBox; lblDefaultEncoding: TLabel; lblDescrDefaultEncoding: TLabel; lblThumbPixels: TLabel; lblThumbSize: TLabel; lblThumbSeparator: TLabel; speThumbWidth: TSpinEdit; speThumbHeight: TSpinEdit; gbTCExportImport: TGroupBox; lblTCExecutable: TLabel; fneTCExecutableFilename: TFileNameEdit; btnRelativeTCExecutableFile: TSpeedButton; lblTCConfig: TLabel; fneTCConfigFilename: TFileNameEdit; btnRelativeTCConfigFile: TSpeedButton; btnViewConfigFile: TSpeedButton; lblTCPathForTool: TLabel; edOutputPathForToolbar: TEdit; btnOutputPathForToolbar: TButton; btnRelativeOutputPathForToolbar: TSpeedButton; pmPathHelper: TPopupMenu; procedure btnThumbCompactCacheClick(Sender: TObject); procedure btnRelativeTCExecutableFileClick(Sender: TObject); procedure btnRelativeTCConfigFileClick(Sender: TObject); procedure btnViewConfigFileClick(Sender: TObject); procedure btnOutputPathForToolbarClick(Sender: TObject); procedure btnRelativeOutputPathForToolbarClick(Sender: TObject); procedure chkDescCreateUnicodeChange(Sender: TObject); private FSplashForm: Boolean; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; procedure BringUsToTCConfigurationPage; implementation {$R *.lfm} uses LConvEncoding, fOptions, Forms, Dialogs, fMain, Controls, DCStrUtils, uDCUtils, uSpecialDir, uShowForm, uGlobs, uLng, uThumbnails, uConvEncoding, uEarlyConfig; { TfrmOptionsMisc } class function TfrmOptionsMisc.GetIconIndex: Integer; begin Result := 14; end; class function TfrmOptionsMisc.GetTitle: String; begin Result := rsOptionsEditorMiscellaneous; end; procedure TfrmOptionsMisc.btnThumbCompactCacheClick(Sender: TObject); begin TThumbnailManager.CompactCache; end; procedure TfrmOptionsMisc.Init; var Index: Integer; begin FSplashForm:= gSplashForm; GetSupportedEncodings(cmbDefaultEncoding.Items); for Index:= cmbDefaultEncoding.Items.Count - 1 downto 0 do begin if (not SingleByteEncoding(cmbDefaultEncoding.Items[Index])) then cmbDefaultEncoding.Items.Delete(Index); end; cmbDefaultEncoding.Items.Insert(0, UpperCase(EncodingNone)); fneTCExecutableFilename.Filter := ParseLineToFileFilter([rsFilterExecutableFiles, '*.exe', rsFilterAnyFiles, AllFilesMask]); fneTCConfigFilename.Filter := ParseLineToFileFilter([rsFilterIniConfigFiles, '*.ini', rsFilterAnyFiles, AllFilesMask]); end; procedure TfrmOptionsMisc.Load; var Index: Integer; begin chkShowSplashForm.Checked := gSplashForm; chkShowWarningMessages.Checked := gShowWarningMessages; chkThumbSave.Checked := gThumbSave; speThumbWidth.Value := gThumbSize.cx; speThumbHeight.Value := gThumbSize.cy; chkGoToRoot.Checked := gGoToRoot; chkShowCurDirTitleBar.Checked := gShowCurDirTitleBar; Index:= cmbDefaultEncoding.Items.IndexOf(gDefaultTextEncoding); if (Index < 0) then cmbDefaultEncoding.ItemIndex:= 0 else begin cmbDefaultEncoding.ItemIndex:= Index; end; {$IFDEF MSWINDOWS} gbTCExportImport.Visible:=True; fneTCExecutableFilename.FileName := gTotalCommanderExecutableFilename; fneTCConfigFilename.FileName := gTotalCommanderConfigFilename; edOutputPathForToolbar.Text := gTotalCommanderToolbarPath; fneTCExecutableFilename.DialogTitle := rsMsgLocateTCExecutable; fneTCConfigFilename.DialogTitle := rsMsgLocateTCConfiguation; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); {$ENDIF} case gDescReadEncoding of meOEM: cmbDescDefaultEncoding.ItemIndex:= 0; meANSI: cmbDescDefaultEncoding.ItemIndex:= 1; meUTF8: cmbDescDefaultEncoding.ItemIndex:= 2; else cmbDescDefaultEncoding.ItemIndex:= 2; end; case gDescWriteEncoding of meUTF8BOM: cmbDescCreateEncoding.ItemIndex:= 0; meUTF16LE: cmbDescCreateEncoding.ItemIndex:= 1; meUTF16BE: cmbDescCreateEncoding.ItemIndex:= 2; else cmbDescCreateEncoding.ItemIndex:= 0; end; chkDescCreateUnicode.Checked:= gDescCreateUnicode; chkDescCreateUnicodeChange(chkDescCreateUnicode); end; function TfrmOptionsMisc.Save: TOptionsEditorSaveFlags; begin Result := []; gSplashForm := chkShowSplashForm.Checked; gShowWarningMessages := chkShowWarningMessages.Checked; gThumbSave := chkThumbSave.Checked; gThumbSize.cx := speThumbWidth.Value; gThumbSize.cy := speThumbHeight.Value; gGoToRoot := chkGoToRoot.Checked; gShowCurDirTitleBar := chkShowCurDirTitleBar.Checked; gDefaultTextEncoding := NormalizeEncoding(cmbDefaultEncoding.Text); {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename := fneTCExecutableFilename.FileName; gTotalCommanderConfigFilename := fneTCConfigFilename.FileName; gTotalCommanderToolbarPath := edOutputPathForToolbar.Text; {$ENDIF} case cmbDescDefaultEncoding.ItemIndex of 0: gDescReadEncoding:= meOEM; 1: gDescReadEncoding:= meANSI; 2: gDescReadEncoding:= meUTF8; end; case cmbDescCreateEncoding.ItemIndex of 0: gDescWriteEncoding:= meUTF8BOM; 1: gDescWriteEncoding:= meUTF16LE; 2: gDescWriteEncoding:= meUTF16BE; end; gDescCreateUnicode:= chkDescCreateUnicode.Checked; if gSplashForm <> FSplashForm then try SaveEarlyConfig; except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; end; { TfrmOptionsMisc.btnRelativeTCExecutableFileClick } procedure TfrmOptionsMisc.btnRelativeTCExecutableFileClick(Sender: TObject); begin fneTCExecutableFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneTCExecutableFilename, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMisc.btnRelativeTCConfigFileClick } procedure TfrmOptionsMisc.btnRelativeTCConfigFileClick(Sender: TObject); begin fneTCConfigFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneTCConfigFilename, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMisc.btnViewConfigFileClick } procedure TfrmOptionsMisc.btnViewConfigFileClick(Sender: TObject); begin ShowViewerByGlob(mbExpandFileName(fneTCConfigFilename.FileName)); end; { TfrmOptionsMisc.btnOutputPathForToolbarClick } procedure TfrmOptionsMisc.btnOutputPathForToolbarClick(Sender: TObject); var MaybeResultingOutputPath: string; begin MaybeResultingOutputPath := edOutputPathForToolbar.Text; if MaybeResultingOutputPath = '' then MaybeResultingOutputPath := frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, MaybeResultingOutputPath, MaybeResultingOutputPath, False) then edOutputPathForToolbar.Text := MaybeResultingOutputPath; end; { TfrmOptionsMisc.btnRelativeOutputPathForToolbarClick } procedure TfrmOptionsMisc.btnRelativeOutputPathForToolbarClick(Sender: TObject); begin edOutputPathForToolbar.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edOutputPathForToolbar, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsMisc.chkDescCreateUnicodeChange(Sender: TObject); begin cmbDescCreateEncoding.Enabled:= chkDescCreateUnicode.Checked; end; procedure BringUsToTCConfigurationPage; var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsMisc); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsMisc); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; end. doublecmd-1.1.30/src/frames/foptionsmisc.lrj0000644000175000001440000001210715104114162020060 0ustar alexxusers{"version":1,"strings":[ {"hash":71209118,"name":"tfrmoptionsmisc.chkshowsplashform.caption","sourcebytes":[83,104,111,119,32,38,115,112,108,97,115,104,32,115,99,114,101,101,110],"value":"Show &splash screen"}, {"hash":1395673,"name":"tfrmoptionsmisc.chkshowwarningmessages.caption","sourcebytes":[83,104,111,119,32,38,119,97,114,110,105,110,103,32,109,101,115,115,97,103,101,115,32,40,34,79,75,34,32,98,117,116,116,111,110,32,111,110,108,121,41],"value":"Show &warning messages (\"OK\" button only)"}, {"hash":114241301,"name":"tfrmoptionsmisc.chkthumbsave.caption","sourcebytes":[38,83,97,118,101,32,116,104,117,109,98,110,97,105,108,115,32,105,110,32,99,97,99,104,101],"value":"&Save thumbnails in cache"}, {"hash":38014346,"name":"tfrmoptionsmisc.lblthumbsize.caption","sourcebytes":[38,84,104,117,109,98,110,97,105,108,32,115,105,122,101,58],"value":"&Thumbnail size:"}, {"hash":59888115,"name":"tfrmoptionsmisc.dblthumbnails.caption","sourcebytes":[84,104,117,109,98,110,97,105,108,115],"value":"Thumbnails"}, {"hash":88,"name":"tfrmoptionsmisc.lblthumbseparator.caption","sourcebytes":[88],"value":"X"}, {"hash":124841011,"name":"tfrmoptionsmisc.lblthumbpixels.caption","sourcebytes":[112,105,120,101,108,115],"value":"pixels"}, {"hash":241754643,"name":"tfrmoptionsmisc.btnthumbcompactcache.caption","sourcebytes":[38,82,101,109,111,118,101,32,116,104,117,109,98,110,97,105,108,115,32,102,111,114,32,110,111,32,108,111,110,103,101,114,32,101,120,105,115,116,105,110,103,32,102,105,108,101,115],"value":"&Remove thumbnails for no longer existing files"}, {"hash":158470307,"name":"tfrmoptionsmisc.chkgotoroot.caption","sourcebytes":[65,108,119,97,121,115,32,38,103,111,32,116,111,32,116,104,101,32,114,111,111,116,32,111,102,32,97,32,100,114,105,118,101,32,119,104,101,110,32,99,104,97,110,103,105,110,103,32,100,114,105,118,101,115],"value":"Always &go to the root of a drive when changing drives"}, {"hash":3256530,"name":"tfrmoptionsmisc.chkshowcurdirtitlebar.caption","sourcebytes":[83,104,111,119,32,38,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,32,105,110,32,116,104,101,32,109,97,105,110,32,119,105,110,100,111,119,32,116,105,116,108,101,32,98,97,114],"value":"Show ¤t directory in the main window title bar"}, {"hash":138614058,"name":"tfrmoptionsmisc.lbldefaultencoding.caption","sourcebytes":[38,68,101,102,97,117,108,116,32,115,105,110,103,108,101,45,98,121,116,101,32,116,101,120,116,32,101,110,99,111,100,105,110,103,58],"value":"&Default single-byte text encoding:"}, {"hash":92360730,"name":"tfrmoptionsmisc.gbtcexportimport.caption","sourcebytes":[82,101,103,97,114,100,105,110,103,32,84,67,32,101,120,112,111,114,116,47,105,109,112,111,114,116,58],"value":"Regarding TC export/import:"}, {"hash":15252584,"name":"tfrmoptionsmisc.btnrelativetcexecutablefile.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":164330666,"name":"tfrmoptionsmisc.lbltcexecutable.caption","sourcebytes":[84,67,32,101,120,101,99,117,116,97,98,108,101,58],"value":"TC executable:"}, {"hash":109093002,"name":"tfrmoptionsmisc.lbltcconfig.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,58],"value":"Configuration file:"}, {"hash":15252584,"name":"tfrmoptionsmisc.btnrelativetcconfigfile.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":246620964,"name":"tfrmoptionsmisc.btnviewconfigfile.hint","sourcebytes":[86,105,101,119,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,32,99,111,110,116,101,110,116],"value":"View configuration file content"}, {"hash":125350026,"name":"tfrmoptionsmisc.lbltcpathfortool.caption","sourcebytes":[84,111,111,108,98,97,114,32,111,117,116,112,117,116,32,112,97,116,104,58],"value":"Toolbar output path:"}, {"hash":1054,"name":"tfrmoptionsmisc.btnoutputpathfortoolbar.caption","sourcebytes":[62,62],"value":">>"}, {"hash":15252584,"name":"tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":11054073,"name":"tfrmoptionsmisc.gbfilecomments.caption","sourcebytes":[70,105,108,101,32,99,111,109,109,101,110,116,115,32,40,100,101,115,99,114,105,112,116,46,105,111,110,41],"value":"File comments (descript.ion)"}, {"hash":103169130,"name":"tfrmoptionsmisc.lbldescrdefaultencoding.caption","sourcebytes":[68,101,102,97,117,108,116,32,101,110,99,111,100,105,110,103,58],"value":"Default encoding:"}, {"hash":255918986,"name":"tfrmoptionsmisc.chkdesccreateunicode.caption","sourcebytes":[67,114,101,97,116,101,32,110,101,119,32,119,105,116,104,32,116,104,101,32,101,110,99,111,100,105,110,103,58],"value":"Create new with the encoding:"} ]} doublecmd-1.1.30/src/frames/foptionsmisc.lfm0000644000175000001440000005377215104114162020064 0ustar alexxusersinherited frmOptionsMisc: TfrmOptionsMisc Height = 572 Width = 719 HelpKeyword = '/configuration.html#ConfigMisc' HorzScrollBar.Page = 1 VertScrollBar.Page = 1 AutoScroll = True ClientHeight = 572 ClientWidth = 719 ParentShowHint = False ShowHint = True DesignLeft = 398 DesignTop = 42 object gbExtended: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 259 Top = 6 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 239 ClientWidth = 703 TabOrder = 0 object chkShowSplashForm: TCheckBox Left = 12 Height = 19 Top = 6 Width = 122 Caption = 'Show &splash screen' TabOrder = 0 end object chkShowWarningMessages: TCheckBox AnchorSideTop.Control = chkShowSplashForm AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 29 Width = 251 BorderSpacing.Top = 4 Caption = 'Show &warning messages ("OK" button only)' TabOrder = 1 end object chkThumbSave: TCheckBox AnchorSideTop.Control = dblThumbnails AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 154 Width = 154 BorderSpacing.Top = 4 Caption = '&Save thumbnails in cache' TabOrder = 5 end object lblThumbSize: TLabel AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 183 Width = 82 Caption = '&Thumbnail size:' FocusControl = speThumbWidth ParentColor = False end object dblThumbnails: TDividerBevel AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = cmbDefaultEncoding AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 12 Height = 15 Top = 135 Width = 679 Caption = 'Thumbnails' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 ParentFont = False end object speThumbWidth: TSpinEdit AnchorSideLeft.Control = lblThumbSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkThumbSave AnchorSideTop.Side = asrBottom Left = 100 Height = 23 Top = 179 Width = 50 BorderSpacing.Left = 6 BorderSpacing.Top = 6 MaxValue = 512 MinValue = 16 TabOrder = 6 Value = 16 end object speThumbHeight: TSpinEdit AnchorSideLeft.Control = lblThumbSeparator AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth Left = 169 Height = 23 Top = 179 Width = 50 BorderSpacing.Left = 6 MaxValue = 512 MinValue = 16 TabOrder = 7 Value = 16 end object lblThumbSeparator: TLabel AnchorSideLeft.Control = speThumbWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 156 Height = 15 Top = 183 Width = 7 BorderSpacing.Left = 6 Caption = 'X' ParentColor = False end object lblThumbPixels: TLabel AnchorSideLeft.Control = speThumbHeight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 225 Height = 15 Top = 183 Width = 30 BorderSpacing.Left = 6 Caption = 'pixels' ParentColor = False end object btnThumbCompactCache: TButton AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrBottom Left = 12 Height = 25 Top = 208 Width = 272 AutoSize = True BorderSpacing.Top = 6 Caption = '&Remove thumbnails for no longer existing files' OnClick = btnThumbCompactCacheClick TabOrder = 8 end object chkGoToRoot: TCheckBox AnchorSideTop.Control = chkShowWarningMessages AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 52 Width = 304 BorderSpacing.Top = 4 Caption = 'Always &go to the root of a drive when changing drives' TabOrder = 2 end object chkShowCurDirTitleBar: TCheckBox AnchorSideTop.Control = chkGoToRoot AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 75 Width = 291 BorderSpacing.Top = 4 Caption = 'Show ¤t directory in the main window title bar' TabOrder = 3 end object lblDefaultEncoding: TLabel AnchorSideLeft.Control = chkShowSplashForm AnchorSideTop.Control = cmbDefaultEncoding AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 104 Width = 179 Caption = '&Default single-byte text encoding:' FocusControl = cmbDefaultEncoding ParentColor = False end object cmbDefaultEncoding: TComboBox AnchorSideLeft.Control = lblDefaultEncoding AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkShowCurDirTitleBar AnchorSideTop.Side = asrBottom Left = 209 Height = 23 Top = 100 Width = 100 BorderSpacing.Left = 18 BorderSpacing.Top = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 4 end end object gbTCExportImport: TGroupBox[1] AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = gbFileComments AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 6 Height = 164 Top = 344 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 Caption = 'Regarding TC export/import:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 2 ClientHeight = 144 ClientWidth = 703 TabOrder = 2 TabStop = True Visible = False object fneTCExecutableFilename: TFileNameEdit AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = lblTCExecutable AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeTCExecutableFile Left = 6 Height = 23 Top = 23 Width = 667 DialogOptions = [ofPathMustExist, ofFileMustExist] Filter = 'executables|*.exe|any files|*.*' FilterIndex = 1 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object btnRelativeTCExecutableFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCExecutableFilename AnchorSideRight.Control = gbTCExportImport AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneTCExecutableFilename AnchorSideBottom.Side = asrBottom Left = 673 Height = 23 Hint = 'Some functions to select appropriate path' Top = 23 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeTCExecutableFileClick end object lblTCExecutable: TLabel AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = gbTCExportImport AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 6 Width = 76 Alignment = taRightJustify Caption = 'TC executable:' ParentColor = False end object fneTCConfigFilename: TFileNameEdit AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = lblTCConfig AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeTCConfigFile Left = 6 Height = 23 Top = 69 Width = 643 DialogOptions = [ofPathMustExist, ofFileMustExist] Filter = 'ini configuration file|*.ini|any file|*.*' FilterIndex = 1 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 1 end object lblTCConfig: TLabel AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = fneTCExecutableFilename AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 52 Width = 96 BorderSpacing.Top = 6 Caption = 'Configuration file:' ParentColor = False end object btnRelativeTCConfigFile: TSpeedButton AnchorSideTop.Control = fneTCConfigFilename AnchorSideRight.Control = btnViewConfigFile AnchorSideBottom.Control = fneTCConfigFilename AnchorSideBottom.Side = asrBottom Left = 649 Height = 23 Hint = 'Some functions to select appropriate path' Top = 69 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeTCConfigFileClick end object btnViewConfigFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCConfigFilename AnchorSideRight.Control = gbTCExportImport AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneTCConfigFilename AnchorSideBottom.Side = asrBottom Left = 673 Height = 23 Hint = 'View configuration file content' Top = 69 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000130B0000130B00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C17213B6E9E3A6EA000000000000000000000000000 00000000000000000000000000000000000000000000000000003A83CC44C8FF 29B2FF316DA70000000000000000000000000000000000000000000000000000 000000000000000000003881CC55DBFF3AC6FF82756C6F6C6B69696C68696F73 6F66CFAA61B87E0BB67D0AB67D0AB67C0AB67D0AB77F0F7F580A0000002980DB 9F928C7D7773E9D7A3FFF5B0FFEEA8E7CA94737379F6FBFFF2F7FFF2F7FFF2F6 FFF2F7FFF7FFFFB77F0F000000C98506828088E9D8A5FFF8BBFFEFB2FFE7A6FF E6A6E6C28984858AECECEDECECEDEAEBEEEAEBEEF5FBFFB67D0A000000C08511 7F8290FFF2AFFFEFB2FFE9ABFFE7B3FFEFCAFFE09C7B7B7EEAE9E8EAE9E8E6E6 E6E6E6E6F5FBFFB67C09000000BD8412868C9AFFEAA5FFE6A4FFE7B2FFEDC8FF F7E3FFDC96858689E5E4E3E5E4E3E0E0E1E0E0E1F5FBFFB67C09000000BB8210 9DA3B0ECCE97FFE4A3FFEEC9FFF7E3FFF3DAECBE8096979AE1E1E0DEDDDCDBDB DCDBDBDCF5FBFFB67C09000000B9800DDDE3EE9E9B9BEECA8FFFDD9AFFDA95EE C2829B9895D9D7D7D9D7D7D9D7D7D8D6D8D8D6D8F6FCFFB67C0A000000B77E0B F9FFFFC4C4C6A5A4A6A4A4A7A4A3A6B1AFB3D6D4D3D4D2D3D4D2D3D4D2D3D4D2 D3D4D2D3F6FCFFB67D0A000000B67D0AF7FDFFCFCED0CFCECECCCBCDCFCECECC CBCDCCCBCDCCCBCDCFCECECCCBCDCCCBCDCCCBCDF6FCFFB67D0A000000B67D0C F5FDFFF3F8FFF5F9FFF6FBFFF6FBFFF6FBFFF6FAFFF5FAFFF5F9FFF4F8FFF3F7 FFF3F7FFF4FDFFB67D0C000000B67F10F7E4C0DCAA4ADDAB4BDDAC4CDDAC4CDD AC4CDDAC4CDDAC4CDDAC4CDDAB4BDCAB4ADCAA4AF7E4C0B67F10000000B88216 EFD2A0EDCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF 9BEDCF9BEFD2A0B88216000000825D14B88217B78114B68114B68114B68114B6 8114B68114B68114B68114B68114B68114B78114B88217825D14 } OnClick = btnViewConfigFileClick end object edOutputPathForToolbar: TEdit AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = lblTCPathForTool AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnOutputPathForToolbar Left = 6 Height = 23 Top = 115 Width = 643 Anchors = [akTop, akLeft, akRight] TabOrder = 2 end object lblTCPathForTool: TLabel AnchorSideLeft.Control = gbTCExportImport AnchorSideTop.Control = fneTCConfigFilename AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 98 Width = 108 BorderSpacing.Top = 6 Caption = 'Toolbar output path:' ParentColor = False end object btnOutputPathForToolbar: TButton AnchorSideTop.Control = edOutputPathForToolbar AnchorSideRight.Control = btnRelativeOutputPathForToolbar AnchorSideBottom.Control = edOutputPathForToolbar AnchorSideBottom.Side = asrBottom Left = 649 Height = 23 Top = 115 Width = 24 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnOutputPathForToolbarClick TabOrder = 3 end object btnRelativeOutputPathForToolbar: TSpeedButton AnchorSideTop.Control = edOutputPathForToolbar AnchorSideRight.Control = gbTCExportImport AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edOutputPathForToolbar AnchorSideBottom.Side = asrBottom Left = 673 Height = 23 Hint = 'Some functions to select appropriate path' Top = 115 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeOutputPathForToolbarClick end end object gbFileComments: TGroupBox[2] AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = gbExtended AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 6 Height = 55 Top = 277 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 Caption = 'File comments (descript.ion)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 35 ClientWidth = 703 TabOrder = 1 object lblDescrDefaultEncoding: TLabel Left = 6 Height = 23 Top = 6 Width = 94 Caption = 'Default encoding:' Layout = tlCenter ParentColor = False end object cmbDescDefaultEncoding: TComboBox Left = 108 Height = 23 Top = 6 Width = 100 ItemHeight = 15 Items.Strings = ( 'OEM' 'ANSI' 'UTF8' ) Style = csDropDownList TabOrder = 0 end object chkDescCreateUnicode: TCheckBox Left = 216 Height = 23 Top = 6 Width = 181 Caption = 'Create new with the encoding:' OnChange = chkDescCreateUnicodeChange TabOrder = 1 end object cmbDescCreateEncoding: TComboBox Left = 405 Height = 23 Top = 6 Width = 100 ItemHeight = 15 Items.Strings = ( 'UTF8BOM' 'UTF16LE' 'UTF16BE' ) Style = csDropDownList TabOrder = 2 end end object pmPathHelper: TPopupMenu[3] Left = 656 Top = 32 end end doublecmd-1.1.30/src/frames/foptionslog.pas0000644000175000001440000001257215104114162017710 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Log options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsLog; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, EditBtn, Buttons, Menus, SpinEx, fOptionsFrame; type { TfrmOptionsLog } TfrmOptionsLog = class(TOptionsEditor) cbLogArcOp: TCheckBox; cbLogCpMvLn: TCheckBox; cbLogDelete: TCheckBox; cbLogDirOp: TCheckBox; cbLogErrors: TCheckBox; cbLogFile: TCheckBox; cbIncludeDateInLogFilename: TCheckBox; cbLogInfo: TCheckBox; cbLogCommandLineExecution: TCheckBox; cbLogSuccess: TCheckBox; cbLogVFS: TCheckBox; cbLogStartShutdown: TCheckBox; cbLogFileCount: TCheckBox; fneLogFileName: TFileNameEdit; gbLogFile: TGroupBox; gbLogFileOp: TGroupBox; gbLogFileStatus: TGroupBox; btnRelativeLogFile: TSpeedButton; pmPathHelper: TPopupMenu; btnViewLogFile: TSpeedButton; seLogFileCount: TSpinEditEx; procedure btnRelativeLogFileClick(Sender: TObject); procedure cbIncludeDateInLogFilenameChange(Sender: TObject); procedure cbLogFileChange(Sender: TObject); procedure btnViewLogFileClick(Sender: TObject); procedure cbLogFileCountChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses fMain, uGlobs, uLng, uSpecialDir; { TfrmOptionsLog } class function TfrmOptionsLog.GetIconIndex: integer; begin Result := 23; end; class function TfrmOptionsLog.GetTitle: string; begin Result := rsOptionsEditorLog; end; procedure TfrmOptionsLog.cbLogFileChange(Sender: TObject); begin cbIncludeDateInLogFilename.Enabled := cbLogFile.Checked; cbIncludeDateInLogFilenameChange(cbIncludeDateInLogFilename); end; procedure TfrmOptionsLog.btnViewLogFileClick(Sender: TObject); begin frmMain.Commands.cm_ViewLogFile([]); end; procedure TfrmOptionsLog.cbLogFileCountChange(Sender: TObject); begin if not cbLogFileCount.Checked then seLogFileCount.Value:= 0 else if seLogFileCount.Value = 0 then seLogFileCount.Value:= 7; end; procedure TfrmOptionsLog.btnRelativeLogFileClick(Sender: TObject); begin fneLogFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneLogFileName, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsLog.cbIncludeDateInLogFilenameChange(Sender: TObject); begin cbLogFileCount.Enabled:= cbLogFile.Checked and cbIncludeDateInLogFilename.Checked; seLogFileCount.Enabled:= cbLogFileCount.Enabled; end; procedure TfrmOptionsLog.Load; begin seLogFileCount.Value:= gLogFileCount; cbLogFileCount.Checked:= gLogFileCount > 0; cbIncludeDateInLogFilename.Checked := gLogFileWithDateInName; cbLogFile.Checked := gLogFile; cbLogFileChange(cbLogFile); fneLogFileName.FileName := gLogFileName; cbLogCpMvLn.Checked := (log_cp_mv_ln in gLogOptions); cbLogDelete.Checked := (log_delete in gLogOptions); cbLogDirOp.Checked := (log_dir_op in gLogOptions); cbLogArcOp.Checked := (log_arc_op in gLogOptions); cbLogVFS.Checked := (log_vfs_op in gLogOptions); cbLogStartShutdown.Checked := (log_start_shutdown in gLogOptions); cbLogCommandLineExecution.Checked := (log_commandlineexecution in gLogOptions); cbLogSuccess.Checked := (log_success in gLogOptions); cbLogErrors.Checked := (log_errors in gLogOptions); cbLogInfo.Checked := (log_info in gLogOptions); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; function TfrmOptionsLog.Save: TOptionsEditorSaveFlags; begin Result := []; gLogFile := cbLogFile.Checked; gLogFileCount := seLogFileCount.Value; gLogFileWithDateInName := cbIncludeDateInLogFilename.Checked; gLogFileName := fneLogFileName.FileName; gLogOptions := []; // Reset log options if cbLogCpMvLn.Checked then Include(gLogOptions, log_cp_mv_ln); if cbLogDelete.Checked then Include(gLogOptions, log_delete); if cbLogDirOp.Checked then Include(gLogOptions, log_dir_op); if cbLogArcOp.Checked then Include(gLogOptions, log_arc_op); if cbLogVFS.Checked then Include(gLogOptions, log_vfs_op); if cbLogStartShutdown.Checked then Include(gLogOptions, log_start_shutdown); if cbLogCommandLineExecution.Checked then Include(gLogOptions, log_commandlineexecution); if cbLogSuccess.Checked then Include(gLogOptions, log_success); if cbLogErrors.Checked then Include(gLogOptions, log_errors); if cbLogInfo.Checked then Include(gLogOptions, log_info); end; end. doublecmd-1.1.30/src/frames/foptionslog.lrj0000644000175000001440000000671715104114162017720 0ustar alexxusers{"version":1,"strings":[ {"hash":142148549,"name":"tfrmoptionslog.gblogfile.caption","sourcebytes":[70,105,108,101,32,111,112,101,114,97,116,105,111,110,32,108,111,103,32,102,105,108,101],"value":"File operation log file"}, {"hash":198650170,"name":"tfrmoptionslog.cblogfile.caption","sourcebytes":[67,38,114,101,97,116,101,32,97,32,108,111,103,32,102,105,108,101,58],"value":"C&reate a log file:"}, {"hash":40358133,"name":"tfrmoptionslog.cbincludedateinlogfilename.caption","sourcebytes":[73,110,99,108,117,100,101,32,100,97,116,101,32,105,110,32,108,111,103,32,102,105,108,101,110,97,109,101],"value":"Include date in log filename"}, {"hash":15252584,"name":"tfrmoptionslog.btnrelativelogfile.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":68945492,"name":"tfrmoptionslog.btnviewlogfile.hint","sourcebytes":[86,105,101,119,32,108,111,103,32,102,105,108,101,32,99,111,110,116,101,110,116],"value":"View log file content"}, {"hash":45247380,"name":"tfrmoptionslog.cblogfilecount.caption","sourcebytes":[77,97,120,105,109,117,109,32,108,111,103,32,102,105,108,101,32,99,111,117,110,116],"value":"Maximum log file count"}, {"hash":220047267,"name":"tfrmoptionslog.gblogfileop.caption","sourcebytes":[76,111,103,32,111,112,101,114,97,116,105,111,110,115],"value":"Log operations"}, {"hash":88335854,"name":"tfrmoptionslog.cblogstartshutdown.caption","sourcebytes":[83,116,97,114,116,47,115,104,117,116,100,111,119,110],"value":"Start/shutdown"}, {"hash":459707,"name":"tfrmoptionslog.cblogcpmvln.caption","sourcebytes":[67,111,112,38,121,47,77,111,118,101,47,67,114,101,97,116,101,32,108,105,110,107,47,115,121,109,108,105,110,107],"value":"Cop&y/Move/Create link/symlink"}, {"hash":179055749,"name":"tfrmoptionslog.cblogdelete.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"}, {"hash":115504435,"name":"tfrmoptionslog.cblogdirop.caption","sourcebytes":[67,114,101,97,38,116,101,47,68,101,108,101,116,101,32,100,105,114,101,99,116,111,114,105,101,115],"value":"Crea&te/Delete directories"}, {"hash":101916283,"name":"tfrmoptionslog.cblogarcop.caption","sourcebytes":[38,80,97,99,107,47,85,110,112,97,99,107],"value":"&Pack/Unpack"}, {"hash":210966067,"name":"tfrmoptionslog.cblogvfs.caption","sourcebytes":[38,70,105,108,101,32,115,121,115,116,101,109,32,112,108,117,103,105,110,115],"value":"&File system plugins"}, {"hash":60018910,"name":"tfrmoptionslog.cblogcommandlineexecution.caption","sourcebytes":[69,120,116,101,114,110,97,108,32,99,111,109,109,97,110,100,32,108,105,110,101,32,101,120,101,99,117,116,105,111,110],"value":"External command line execution"}, {"hash":254095107,"name":"tfrmoptionslog.gblogfilestatus.caption","sourcebytes":[79,112,101,114,97,116,105,111,110,32,115,116,97,116,117,115],"value":"Operation status"}, {"hash":258209475,"name":"tfrmoptionslog.cblogsuccess.caption","sourcebytes":[76,111,103,32,38,115,117,99,99,101,115,115,102,117,108,32,111,112,101,114,97,116,105,111,110,115],"value":"Log &successful operations"}, {"hash":211480499,"name":"tfrmoptionslog.cblogerrors.caption","sourcebytes":[76,111,103,32,38,101,114,114,111,114,115],"value":"Log &errors"}, {"hash":29542339,"name":"tfrmoptionslog.cbloginfo.caption","sourcebytes":[76,111,103,32,38,105,110,102,111,114,109,97,116,105,111,110,32,109,101,115,115,97,103,101,115],"value":"Log &information messages"} ]} doublecmd-1.1.30/src/frames/foptionslog.lfm0000644000175000001440000002724315104114162017704 0ustar alexxusersinherited frmOptionsLog: TfrmOptionsLog Height = 522 Width = 528 HelpKeyword = '/configuration.html#ConfigLog' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 522 ClientWidth = 528 ParentShowHint = False ShowHint = True DesignLeft = 666 DesignTop = 236 object gbLogFile: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 125 Top = 6 Width = 516 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'File operation log file' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 100 ClientWidth = 512 TabOrder = 0 object cbLogFile: TCheckBox AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrCenter Left = 10 Height = 24 Top = 8 Width = 133 Caption = 'C&reate a log file:' OnChange = cbLogFileChange TabOrder = 0 end object fneLogFileName: TFileNameEdit AnchorSideLeft.Control = cbLogFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbLogFile AnchorSideRight.Control = btnRelativeLogFile Left = 147 Height = 28 Top = 6 Width = 307 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 MaxLength = 0 TabOrder = 1 end object cbIncludeDateInLogFilename: TCheckBox AnchorSideLeft.Control = cbLogFile AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 38 Width = 210 BorderSpacing.Bottom = 4 Caption = 'Include date in log filename' OnChange = cbIncludeDateInLogFilenameChange TabOrder = 2 end object btnRelativeLogFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneLogFileName AnchorSideRight.Control = btnViewLogFile AnchorSideBottom.Control = fneLogFileName AnchorSideBottom.Side = asrBottom Left = 454 Height = 28 Hint = 'Some functions to select appropriate path' Top = 6 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeLogFileClick end object btnViewLogFile: TSpeedButton AnchorSideTop.Control = fneLogFileName AnchorSideRight.Control = gbLogFile AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneLogFileName AnchorSideBottom.Side = asrBottom Left = 478 Height = 28 Hint = 'View log file content' Top = 6 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000130B0000130B00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C17213B6E9E3A6EA000000000000000000000000000 00000000000000000000000000000000000000000000000000003A83CC44C8FF 29B2FF316DA70000000000000000000000000000000000000000000000000000 000000000000000000003881CC55DBFF3AC6FF82756C6F6C6B69696C68696F73 6F66CFAA61B87E0BB67D0AB67D0AB67C0AB67D0AB77F0F7F580A0000002980DB 9F928C7D7773E9D7A3FFF5B0FFEEA8E7CA94737379F6FBFFF2F7FFF2F7FFF2F6 FFF2F7FFF7FFFFB77F0F000000C98506828088E9D8A5FFF8BBFFEFB2FFE7A6FF E6A6E6C28984858AECECEDECECEDEAEBEEEAEBEEF5FBFFB67D0A000000C08511 7F8290FFF2AFFFEFB2FFE9ABFFE7B3FFEFCAFFE09C7B7B7EEAE9E8EAE9E8E6E6 E6E6E6E6F5FBFFB67C09000000BD8412868C9AFFEAA5FFE6A4FFE7B2FFEDC8FF F7E3FFDC96858689E5E4E3E5E4E3E0E0E1E0E0E1F5FBFFB67C09000000BB8210 9DA3B0ECCE97FFE4A3FFEEC9FFF7E3FFF3DAECBE8096979AE1E1E0DEDDDCDBDB DCDBDBDCF5FBFFB67C09000000B9800DDDE3EE9E9B9BEECA8FFFDD9AFFDA95EE C2829B9895D9D7D7D9D7D7D9D7D7D8D6D8D8D6D8F6FCFFB67C0A000000B77E0B F9FFFFC4C4C6A5A4A6A4A4A7A4A3A6B1AFB3D6D4D3D4D2D3D4D2D3D4D2D3D4D2 D3D4D2D3F6FCFFB67D0A000000B67D0AF7FDFFCFCED0CFCECECCCBCDCFCECECC CBCDCCCBCDCCCBCDCFCECECCCBCDCCCBCDCCCBCDF6FCFFB67D0A000000B67D0C F5FDFFF3F8FFF5F9FFF6FBFFF6FBFFF6FBFFF6FAFFF5FAFFF5F9FFF4F8FFF3F7 FFF3F7FFF4FDFFB67D0C000000B67F10F7E4C0DCAA4ADDAB4BDDAC4CDDAC4CDD AC4CDDAC4CDDAC4CDDAC4CDDAB4BDCAB4ADCAA4AF7E4C0B67F10000000B88216 EFD2A0EDCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF 9BEDCF9BEFD2A0B88216000000825D14B88217B78114B68114B68114B68114B6 8114B68114B68114B68114B68114B68114B78114B88217825D14 } OnClick = btnViewLogFileClick end object cbLogFileCount: TCheckBox AnchorSideLeft.Control = cbIncludeDateInLogFilename AnchorSideTop.Control = seLogFileCount AnchorSideTop.Side = asrCenter Left = 10 Height = 24 Top = 68 Width = 182 Caption = 'Maximum log file count' OnChange = cbLogFileCountChange TabOrder = 3 end object seLogFileCount: TSpinEditEx AnchorSideLeft.Control = cbLogFileCount AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbIncludeDateInLogFilename AnchorSideTop.Side = asrBottom Left = 204 Height = 28 Top = 66 Width = 80 BorderSpacing.Left = 12 MaxLength = 0 TabOrder = 4 end end object gbLogFileOp: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLogFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 212 Top = 135 Width = 516 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Log operations' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 187 ClientWidth = 512 TabOrder = 1 object cbLogStartShutdown: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogVFS AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 134 Width = 125 Caption = 'Start/shutdown' TabOrder = 5 end object cbLogCpMvLn: TCheckBox AnchorSideTop.Control = gbLogFileOp Left = 10 Height = 24 Top = 4 Width = 232 Caption = 'Cop&y/Move/Create link/symlink' TabOrder = 0 end object cbLogDelete: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogCpMvLn AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 30 Width = 68 Caption = '&Delete' TabOrder = 1 end object cbLogDirOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDelete AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 56 Width = 191 Caption = 'Crea&te/Delete directories' TabOrder = 2 end object cbLogArcOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDirOp AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 82 Width = 109 Caption = '&Pack/Unpack' TabOrder = 3 end object cbLogVFS: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogArcOp AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 108 Width = 148 Caption = '&File system plugins' TabOrder = 4 end object cbLogCommandLineExecution: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogStartShutdown AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 160 Width = 244 BorderSpacing.Bottom = 15 Caption = 'External command line execution' TabOrder = 6 end end object gbLogFileStatus: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLogFileOp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 109 Top = 351 Width = 516 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Operation status' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 84 ClientWidth = 512 TabOrder = 2 object cbLogSuccess: TCheckBox Left = 10 Height = 24 Top = 4 Width = 199 Caption = 'Log &successful operations' TabOrder = 0 end object cbLogErrors: TCheckBox Left = 10 Height = 24 Top = 30 Width = 199 Caption = 'Log &errors' TabOrder = 1 end object cbLogInfo: TCheckBox Left = 10 Height = 24 Top = 56 Width = 199 Caption = 'Log &information messages' TabOrder = 2 end end object pmPathHelper: TPopupMenu[3] Left = 440 Top = 64 end end doublecmd-1.1.30/src/frames/foptionslayout.pas0000644000175000001440000001124215104114162020435 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Layout options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsLayout; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsLayout } TfrmOptionsLayout = class(TOptionsEditor) cbFlatDiskPanel: TCheckBox; cbFlatInterface: TCheckBox; cbFreespaceInd: TCheckBox; cbLogWindow: TCheckBox; cbPanelOfOperations: TCheckBox; cbProgInMenuBar: TCheckBox; cbShowCmdLine: TCheckBox; cbShowCurDir: TCheckBox; cbShowDiskPanel: TCheckBox; cbShowDriveFreeSpace: TCheckBox; cbShowDrivesListButton: TCheckBox; cbShowKeysPanel: TCheckBox; cbShowMainMenu: TCheckBox; cbShowMainToolBar: TCheckBox; cbShowStatusBar: TCheckBox; cbShowTabHeader: TCheckBox; cbShowTabs: TCheckBox; cbTermWindow: TCheckBox; cbTwoDiskPanels: TCheckBox; cbShowShortDriveFreeSpace: TCheckBox; chkShowMiddleToolBar: TCheckBox; gbScreenLayout: TGroupBox; procedure cbShowDiskPanelChange(Sender: TObject); procedure cbShowDriveFreeSpaceChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsLayout } procedure TfrmOptionsLayout.cbShowDiskPanelChange(Sender: TObject); begin cbTwoDiskPanels.Enabled := cbShowDiskPanel.Checked; cbFlatDiskPanel.Enabled := cbShowDiskPanel.Checked; end; procedure TfrmOptionsLayout.cbShowDriveFreeSpaceChange(Sender: TObject); begin cbShowShortDriveFreeSpace.Enabled:= cbShowDriveFreeSpace.Checked; if not(cbShowDriveFreeSpace.Checked) then cbShowShortDriveFreeSpace.Checked:= false; end; class function TfrmOptionsLayout.GetIconIndex: Integer; begin Result := 7; end; class function TfrmOptionsLayout.GetTitle: String; begin Result := rsOptionsEditorLayout; end; procedure TfrmOptionsLayout.Load; begin cbShowMainMenu.Checked := gMainMenu; cbShowMainToolBar.Checked := gButtonBar; chkShowMiddleToolBar.Checked := gMiddleToolBar; cbShowDiskPanel.Checked := gDriveBar1; cbTwoDiskPanels.Checked := gDriveBar2; cbFlatDiskPanel.Checked := gDriveBarFlat; cbShowDrivesListButton.Checked := gDrivesListButton; cbShowTabs.Checked := gDirectoryTabs; cbShowCurDir.Checked := gCurDir; cbShowTabHeader.Checked := gTabHeader; cbShowStatusBar.Checked := gStatusBar; cbShowCmdLine.Checked := gCmdLine; cbShowKeysPanel.Checked := gKeyButtons; cbFlatInterface.Checked := gInterfaceFlat; cbLogWindow.Checked := gLogWindow; cbTermWindow.Checked := gTermWindow; cbShowDriveFreeSpace.Checked := gDriveFreeSpace; cbFreespaceInd.Checked := gDriveInd; cbProgInMenuBar.Checked := gProgInMenuBar; cbPanelOfOperations.Checked := gPanelOfOp; cbShowShortDriveFreeSpace.Checked:= gShortFormatDriveInfo; end; function TfrmOptionsLayout.Save: TOptionsEditorSaveFlags; begin Result := []; gMainMenu := cbShowMainMenu.Checked; gButtonBar := cbShowMainToolBar.Checked; gMiddleToolBar := chkShowMiddleToolBar.Checked; gDriveBar1 := cbShowDiskPanel.Checked; gDriveBar2 := cbTwoDiskPanels.Checked; gDriveBarFlat := cbFlatDiskPanel.Checked; gDrivesListButton := cbShowDrivesListButton.Checked; gDirectoryTabs := cbShowTabs.Checked; gCurDir := cbShowCurDir.Checked; gTabHeader := cbShowTabHeader.Checked; gStatusBar := cbShowStatusBar.Checked; gCmdLine := cbShowCmdLine.Checked; gKeyButtons := cbShowKeysPanel.Checked; gInterfaceFlat := cbFlatInterface.Checked; gLogWindow := cbLogWindow.Checked; gTermWindow := cbTermWindow.Checked; gDriveFreeSpace := cbShowDriveFreeSpace.Checked; gDriveInd := cbFreespaceInd.Checked; gProgInMenuBar := cbProgInMenuBar.Checked; gPanelOfOp := cbPanelOfOperations.Checked; gShortFormatDriveInfo := cbShowShortDriveFreeSpace.Checked; end; end. doublecmd-1.1.30/src/frames/foptionslayout.lrj0000644000175000001440000001074415104114162020447 0ustar alexxusers{"version":1,"strings":[ {"hash":134597216,"name":"tfrmoptionslayout.gbscreenlayout.caption","sourcebytes":[32,83,99,114,101,101,110,32,108,97,121,111,117,116,32],"value":" Screen layout "}, {"hash":177574613,"name":"tfrmoptionslayout.cbshowmainmenu.caption","sourcebytes":[83,104,111,119,32,38,109,97,105,110,32,109,101,110,117],"value":"Show &main menu"}, {"hash":229134466,"name":"tfrmoptionslayout.cbshowmaintoolbar.caption","sourcebytes":[83,104,111,119,32,116,111,111,108,38,98,97,114],"value":"Show tool&bar"}, {"hash":189661603,"name":"tfrmoptionslayout.cbshowdiskpanel.caption","sourcebytes":[83,104,111,119,32,38,100,114,105,118,101,32,98,117,116,116,111,110,115],"value":"Show &drive buttons"}, {"hash":6470158,"name":"tfrmoptionslayout.cbshowdriveslistbutton.caption","sourcebytes":[83,104,111,119,32,100,114,105,118,101,115,32,108,105,115,116,32,98,117,38,116,116,111,110],"value":"Show drives list bu&tton"}, {"hash":138066537,"name":"tfrmoptionslayout.cbshowcurdir.caption","sourcebytes":[83,104,111,119,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,38,121],"value":"Show current director&y"}, {"hash":226967058,"name":"tfrmoptionslayout.cbshowtabheader.caption","sourcebytes":[83,38,104,111,119,32,116,97,98,115,116,111,112,32,104,101,97,100,101,114],"value":"S&how tabstop header"}, {"hash":49110370,"name":"tfrmoptionslayout.cbshowstatusbar.caption","sourcebytes":[83,104,111,119,32,38,115,116,97,116,117,115,32,98,97,114],"value":"Show &status bar"}, {"hash":196317541,"name":"tfrmoptionslayout.cbshowcmdline.caption","sourcebytes":[83,104,111,119,32,99,111,109,109,97,110,100,32,108,38,105,110,101],"value":"Show command l&ine"}, {"hash":14274819,"name":"tfrmoptionslayout.cbshowkeyspanel.caption","sourcebytes":[83,104,111,119,32,102,117,110,99,116,105,111,110,32,38,107,101,121,32,98,117,116,116,111,110,115],"value":"Show function &key buttons"}, {"hash":51983379,"name":"tfrmoptionslayout.cbflatdiskpanel.caption","sourcebytes":[38,70,108,97,116,32,98,117,116,116,111,110,115],"value":"&Flat buttons"}, {"hash":216809273,"name":"tfrmoptionslayout.cbtwodiskpanels.caption","sourcebytes":[83,104,111,119,32,116,119,111,32,100,114,105,118,101,32,98,117,116,116,111,110,32,98,97,114,115,32,40,102,105,38,120,101,100,32,119,105,100,116,104,44,32,97,98,111,118,101,32,102,105,108,101,32,119,105,110,100,111,119,115,41],"value":"Show two drive button bars (fi&xed width, above file windows)"}, {"hash":91296995,"name":"tfrmoptionslayout.cbshowtabs.caption","sourcebytes":[83,104,111,38,119,32,102,111,108,100,101,114,32,116,97,98,115],"value":"Sho&w folder tabs"}, {"hash":44971493,"name":"tfrmoptionslayout.cbflatinterface.caption","sourcebytes":[70,108,97,116,32,105,38,110,116,101,114,102,97,99,101],"value":"Flat i&nterface"}, {"hash":245942935,"name":"tfrmoptionslayout.cblogwindow.caption","sourcebytes":[83,104,111,119,32,108,111,38,103,32,119,105,110,100,111,119],"value":"Show lo&g window"}, {"hash":142079143,"name":"tfrmoptionslayout.cbtermwindow.caption","sourcebytes":[83,104,111,119,32,116,101,38,114,109,105,110,97,108,32,119,105,110,100,111,119],"value":"Show te&rminal window"}, {"hash":140527132,"name":"tfrmoptionslayout.cbfreespaceind.caption","sourcebytes":[83,104,111,119,32,102,114,38,101,101,32,115,112,97,99,101,32,105,110,100,105,99,97,116,111,114,32,111,110,32,100,114,105,118,101,32,108,97,98,101,108],"value":"Show fr&ee space indicator on drive label"}, {"hash":151685554,"name":"tfrmoptionslayout.cbproginmenubar.caption","sourcebytes":[83,104,111,119,32,99,111,109,109,111,110,32,112,114,111,103,114,101,115,115,32,105,110,32,109,101,110,117,32,98,97,114],"value":"Show common progress in menu bar"}, {"hash":11318116,"name":"tfrmoptionslayout.cbpanelofoperations.caption","sourcebytes":[83,104,111,119,32,112,97,110,101,108,32,111,102,32,111,112,101,114,97,116,105,111,110,32,105,110,32,98,97,99,107,103,114,111,117,110,100],"value":"Show panel of operation in background"}, {"hash":157748028,"name":"tfrmoptionslayout.cbshowdrivefreespace.caption","sourcebytes":[83,104,111,119,32,102,114,101,101,32,115,38,112,97,99,101,32,108,97,98,101,108],"value":"Show free s&pace label"}, {"hash":176489292,"name":"tfrmoptionslayout.cbshowshortdrivefreespace.caption","sourcebytes":[83,104,111,119,32,115,104,111,114,116,32,102,114,101,101,32,115,112,97,99,101,32,38,108,97,98,101,108],"value":"Show short free space &label"}, {"hash":219781266,"name":"tfrmoptionslayout.chkshowmiddletoolbar.caption","sourcebytes":[83,104,111,119,32,109,105,100,100,108,101,32,116,111,111,108,98,97,114],"value":"Show middle toolbar"} ]} doublecmd-1.1.30/src/frames/foptionslayout.lfm0000644000175000001440000001546315104114162020441 0ustar alexxusersinherited frmOptionsLayout: TfrmOptionsLayout Height = 550 Width = 784 HelpKeyword = '/configuration.html#ConfigLayout' ClientHeight = 550 ClientWidth = 784 DesignLeft = 276 DesignTop = 44 object gbScreenLayout: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 530 Top = 6 Width = 772 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Screen layout ' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 512 ClientWidth = 768 TabOrder = 0 object cbShowMainMenu: TCheckBox Left = 12 Height = 22 Top = 6 Width = 124 Caption = 'Show &main menu' TabOrder = 0 end object cbShowMainToolBar: TCheckBox AnchorSideTop.Control = cbShowMainMenu AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 30 Width = 99 BorderSpacing.Top = 2 Caption = 'Show tool&bar' TabOrder = 1 end object cbShowDiskPanel: TCheckBox AnchorSideTop.Control = chkShowMiddleToolBar AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 76 Width = 135 BorderSpacing.Top = 2 Caption = 'Show &drive buttons' OnChange = cbShowDiskPanelChange TabOrder = 3 end object cbShowDrivesListButton: TCheckBox AnchorSideTop.Control = cbFlatDiskPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 148 Width = 156 BorderSpacing.Top = 2 Caption = 'Show drives list bu&tton' TabOrder = 6 end object cbShowCurDir: TCheckBox AnchorSideTop.Control = cbShowTabs AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 268 Width = 154 BorderSpacing.Top = 2 Caption = 'Show current director&y' TabOrder = 11 end object cbShowTabHeader: TCheckBox AnchorSideTop.Control = cbShowCurDir AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 292 Width = 146 BorderSpacing.Top = 2 Caption = 'S&how tabstop header' TabOrder = 12 end object cbShowStatusBar: TCheckBox AnchorSideTop.Control = cbShowTabHeader AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 316 Width = 118 BorderSpacing.Top = 2 Caption = 'Show &status bar' TabOrder = 13 end object cbShowCmdLine: TCheckBox AnchorSideTop.Control = cbShowStatusBar AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 340 Width = 141 BorderSpacing.Top = 2 Caption = 'Show command l&ine' TabOrder = 14 end object cbShowKeysPanel: TCheckBox AnchorSideTop.Control = cbShowCmdLine AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 364 Width = 178 BorderSpacing.Top = 2 Caption = 'Show function &key buttons' TabOrder = 15 end object cbFlatDiskPanel: TCheckBox AnchorSideLeft.Control = cbTwoDiskPanels AnchorSideTop.Control = cbTwoDiskPanels AnchorSideTop.Side = asrBottom Left = 28 Height = 22 Top = 124 Width = 93 BorderSpacing.Top = 2 Caption = '&Flat buttons' Enabled = False TabOrder = 5 end object cbTwoDiskPanels: TCheckBox AnchorSideLeft.Control = cbShowDiskPanel AnchorSideTop.Control = cbShowDiskPanel AnchorSideTop.Side = asrBottom Left = 28 Height = 22 Top = 100 Width = 372 BorderSpacing.Left = 16 BorderSpacing.Top = 2 Caption = 'Show two drive button bars (fi&xed width, above file windows)' Enabled = False TabOrder = 4 end object cbShowTabs: TCheckBox AnchorSideTop.Control = cbFreespaceInd AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 244 Width = 121 BorderSpacing.Top = 2 Caption = 'Sho&w folder tabs' TabOrder = 10 end object cbFlatInterface: TCheckBox AnchorSideTop.Control = cbShowKeysPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 388 Width = 100 BorderSpacing.Top = 2 Caption = 'Flat i&nterface' TabOrder = 16 end object cbLogWindow: TCheckBox AnchorSideTop.Control = cbFlatInterface AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 412 Width = 123 BorderSpacing.Top = 2 Caption = 'Show lo&g window' TabOrder = 17 end object cbTermWindow: TCheckBox AnchorSideTop.Control = cbLogWindow AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 436 Width = 152 BorderSpacing.Top = 2 Caption = 'Show te&rminal window' TabOrder = 18 end object cbFreespaceInd: TCheckBox AnchorSideTop.Control = cbShowShortDriveFreeSpace AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 220 Width = 255 BorderSpacing.Top = 2 Caption = 'Show fr&ee space indicator on drive label' TabOrder = 9 end object cbProgInMenuBar: TCheckBox AnchorSideTop.Control = cbTermWindow AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 460 Width = 236 BorderSpacing.Top = 2 Caption = 'Show common progress in menu bar' TabOrder = 19 end object cbPanelOfOperations: TCheckBox AnchorSideTop.Control = cbProgInMenuBar AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 484 Width = 248 BorderSpacing.Top = 2 Caption = 'Show panel of operation in background' TabOrder = 20 end object cbShowDriveFreeSpace: TCheckBox AnchorSideTop.Control = cbShowDrivesListButton AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 172 Width = 152 BorderSpacing.Top = 2 Caption = 'Show free s&pace label' OnChange = cbShowDriveFreeSpaceChange TabOrder = 7 end object cbShowShortDriveFreeSpace: TCheckBox AnchorSideLeft.Control = cbFlatDiskPanel AnchorSideTop.Control = cbShowDriveFreeSpace AnchorSideTop.Side = asrBottom Left = 28 Height = 22 Top = 196 Width = 185 BorderSpacing.Top = 2 Caption = 'Show short free space &label' TabOrder = 8 end object chkShowMiddleToolBar: TCheckBox AnchorSideLeft.Control = cbShowMainToolBar AnchorSideTop.Control = cbShowMainToolBar AnchorSideTop.Side = asrBottom Left = 12 Height = 22 Top = 52 Width = 141 Caption = 'Show middle toolbar' TabOrder = 2 end end end doublecmd-1.1.30/src/frames/foptionslanguage.pas0000644000175000001440000000630615104114162020710 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Language options page Copyright (C) 2006-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsLanguage; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsLanguage } TfrmOptionsLanguage = class(TOptionsEditor) lngList: TListBox; private procedure FillLngListBox; procedure LanguageListDblClick(Sender:TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses fOptions, DCClassesUtf8, uDebug, uFindEx, uGlobs, uGlobsPaths, uLng; { TfrmOptionsLanguage } procedure TfrmOptionsLanguage.FillLngListBox; var iIndex: Integer; fr: TSearchRecEx; sLangName: String; LanguageFileList: TStringListEx; begin LanguageFileList:= TStringListEx.Create; LanguageFileList.Sorted:= True; LanguageFileList.Duplicates:= dupAccept; try lngList.Clear; DCDebug('Language directory: ' + gpLngDir); if FindFirstEx(gpLngDir + '*.po*', 0, fr) = 0 then repeat sLangName := GetLanguageName(gpLngDir + fr.Name); LanguageFileList.Add(Format('%s = %s', [sLangName, fr.Name])); until FindNextEx(fr) <> 0; FindCloseEx(fr); for iIndex:= 0 to pred(LanguageFileList.Count) do begin lngList.Items.add(LanguageFileList.Strings[iIndex]); if (gPOFileName = Trim(lngList.Items.ValueFromIndex[iIndex])) then lngList.ItemIndex:= iIndex; end; finally LanguageFileList.Free; end; end; class function TfrmOptionsLanguage.GetIconIndex: Integer; begin Result := 0; end; class function TfrmOptionsLanguage.GetTitle: String; begin Result := rsOptionsEditorLanguage; end; procedure TfrmOptionsLanguage.Load; begin FillLngListBox; lngList.OnDblClick := @LanguageListDblClick; end; procedure TfrmOptionsLanguage.LanguageListDblClick(Sender:TObject); begin GetOptionsForm.btnOK.Click; end; function TfrmOptionsLanguage.Save: TOptionsEditorSaveFlags; var SelectedPOFileName: String; begin Result := []; if lngList.ItemIndex > -1 then begin SelectedPOFileName := Trim(lngList.Items.ValueFromIndex[lngList.ItemIndex]); if SelectedPOFileName <> gPOFileName then Include(Result, oesfNeedsRestart); gPOFileName := SelectedPOFileName; end; end; end. doublecmd-1.1.30/src/frames/foptionslanguage.lfm0000644000175000001440000000037615104114162020704 0ustar alexxusersinherited frmOptionsLanguage: TfrmOptionsLanguage HelpKeyword = '/configuration.html#ConfigLang' object lngList: TListBox[0] Left = 0 Height = 240 Top = 0 Width = 320 Align = alClient ItemHeight = 0 TabOrder = 0 end end doublecmd-1.1.30/src/frames/foptionskeyboard.pas0000644000175000001440000000677115104114162020733 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Keyboard options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsKeyboard; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsKeyboard } TfrmOptionsKeyboard = class(TOptionsEditor) cbLynxLike: TCheckBox; cbNoModifier: TComboBox; cbAlt: TComboBox; cbCtrlAlt: TComboBox; gbTyping: TGroupBox; lblNoModifier: TLabel; lblAlt: TLabel; lblCtrlAlt: TLabel; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; const KeyAction_None = 0; KeyAction_CommandLine = 1; KeyAction_QuickSearch = 2; KeyAction_QuickFilter = 3; { TfrmOptionsKeyboard } procedure TfrmOptionsKeyboard.Init; begin // Copy localized strings to each combo box. ParseLineToList(rsOptLetters, cbNoModifier.Items); cbAlt.Items.Assign(cbNoModifier.Items); cbCtrlAlt.Items.Assign(cbNoModifier.Items); end; procedure TfrmOptionsKeyboard.Load; procedure SetAction(ComboBox: TComboBox; KeyTypingAction: TKeyTypingAction); begin case KeyTypingAction of ktaNone: ComboBox.ItemIndex := KeyAction_None; ktaCommandLine: ComboBox.ItemIndex := KeyAction_CommandLine; ktaQuickSearch: ComboBox.ItemIndex := KeyAction_QuickSearch; ktaQuickFilter: ComboBox.ItemIndex := KeyAction_QuickFilter; else raise Exception.Create('Unknown TKeyTypingMode'); end; end; begin SetAction(cbNoModifier, gKeyTyping[ktmNone]); SetAction(cbAlt, gKeyTyping[ktmAlt]); SetAction(cbCtrlAlt, gKeyTyping[ktmCtrlAlt]); cbLynxLike.Checked := gLynxLike; end; function TfrmOptionsKeyboard.Save: TOptionsEditorSaveFlags; function GetAction(ComboBox: TComboBox): TKeyTypingAction; begin case ComboBox.ItemIndex of KeyAction_None: Result := ktaNone; KeyAction_CommandLine: Result := ktaCommandLine; KeyAction_QuickSearch: Result := ktaQuickSearch; KeyAction_QuickFilter: Result := ktaQuickFilter; else raise Exception.Create('Unknown action selected'); end; end; begin gKeyTyping[ktmNone] := GetAction(cbNoModifier); gKeyTyping[ktmAlt] := GetAction(cbAlt); gKeyTyping[ktmCtrlAlt] := GetAction(cbCtrlAlt); gLynxLike := cbLynxLike.Checked; Result := []; end; class function TfrmOptionsKeyboard.GetIconIndex: Integer; begin Result := 26; end; class function TfrmOptionsKeyboard.GetTitle: String; begin Result := rsOptionsEditorKeyboard; end; end. doublecmd-1.1.30/src/frames/foptionskeyboard.lrj0000644000175000001440000000173015104114162020725 0ustar alexxusers{"version":1,"strings":[ {"hash":96497735,"name":"tfrmoptionskeyboard.gbtyping.caption","sourcebytes":[84,121,112,105,110,103],"value":"Typing"}, {"hash":213574218,"name":"tfrmoptionskeyboard.lblnomodifier.caption","sourcebytes":[38,76,101,116,116,101,114,115,58],"value":"&Letters:"}, {"hash":76298218,"name":"tfrmoptionskeyboard.lblalt.caption","sourcebytes":[65,108,116,43,76,38,101,116,116,101,114,115,58],"value":"Alt+L&etters:"}, {"hash":153568746,"name":"tfrmoptionskeyboard.lblctrlalt.caption","sourcebytes":[67,116,114,108,43,65,108,116,43,76,101,38,116,116,101,114,115,58],"value":"Ctrl+Alt+Le&tters:"}, {"hash":20000009,"name":"tfrmoptionskeyboard.cblynxlike.caption","sourcebytes":[76,101,38,102,116,44,32,82,105,103,104,116,32,97,114,114,111,119,115,32,99,104,97,110,103,101,32,100,105,114,101,99,116,111,114,121,32,40,76,121,110,120,45,108,105,107,101,32,109,111,118,101,109,101,110,116,41],"value":"Le&ft, Right arrows change directory (Lynx-like movement)"} ]} doublecmd-1.1.30/src/frames/foptionskeyboard.lfm0000644000175000001440000000657115104114162020724 0ustar alexxusersinherited frmOptionsKeyboard: TfrmOptionsKeyboard Height = 223 Width = 429 HelpKeyword = '/configuration.html#ConfigKeys' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 223 ClientWidth = 429 DesignTop = 20 object gbTyping: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 109 Top = 6 Width = 417 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Typing' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 89 ClientWidth = 413 TabOrder = 0 object lblNoModifier: TLabel Left = 8 Height = 15 Top = 8 Width = 88 Alignment = taRightJustify Caption = '&Letters:' FocusControl = cbNoModifier ParentColor = False end object cbNoModifier: TComboBox AnchorSideLeft.Control = lblNoModifier AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblNoModifier AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 106 Height = 23 Top = 4 Width = 299 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Items.Strings = ( 'None' 'Command Line' 'Quick Search' 'Quick Filter' ) Style = csDropDownList TabOrder = 0 end object lblAlt: TLabel Left = 8 Height = 15 Top = 35 Width = 88 Alignment = taRightJustify Caption = 'Alt+L&etters:' FocusControl = cbAlt ParentColor = False end object lblCtrlAlt: TLabel Left = 8 Height = 15 Top = 62 Width = 88 Alignment = taRightJustify Caption = 'Ctrl+Alt+Le&tters:' FocusControl = cbCtrlAlt ParentColor = False end object cbAlt: TComboBox AnchorSideLeft.Control = lblAlt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblAlt AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 106 Height = 23 Top = 31 Width = 299 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Style = csDropDownList TabOrder = 1 end object cbCtrlAlt: TComboBox AnchorSideLeft.Control = lblCtrlAlt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCtrlAlt AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 106 Height = 23 Top = 58 Width = 299 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Style = csDropDownList TabOrder = 2 end end object cbLynxLike: TCheckBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbTyping AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 19 Top = 123 Width = 323 BorderSpacing.Top = 8 Caption = 'Le&ft, Right arrows change directory (Lynx-like movement)' TabOrder = 1 end end doublecmd-1.1.30/src/frames/foptionsignorelist.pas0000644000175000001440000000760015104114162021302 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Ignore list options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsIgnoreList; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, EditBtn, Buttons, Menus, fOptionsFrame; type { TfrmOptionsIgnoreList } TfrmOptionsIgnoreList = class(TOptionsEditor) btnAddSel: TButton; btnAddSelWithPath: TButton; btnRelativeSaveIn: TSpeedButton; chkIgnoreEnable: TCheckBox; fneSaveIn: TFileNameEdit; lblSaveIn: TLabel; memIgnoreList: TMemo; pmPathHelper: TPopupMenu; procedure btnAddSelClick(Sender: TObject); procedure btnAddSelWithPathClick(Sender: TObject); procedure btnRelativeSaveInClick(Sender: TObject); procedure chkIgnoreEnableChange(Sender: TObject); private procedure FillIgnoreList(bWithFullPath: Boolean); public class function GetIconIndex: Integer; override; class function GetTitle: String; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; end; implementation {$R *.lfm} uses Controls, uGlobs, uFile, uLng, fMain, uSpecialDir; { TfrmOptionsIgnoreList } procedure TfrmOptionsIgnoreList.btnAddSelClick(Sender: TObject); begin FillIgnoreList(False); end; procedure TfrmOptionsIgnoreList.btnAddSelWithPathClick(Sender: TObject); begin FillIgnoreList(True); end; procedure TfrmOptionsIgnoreList.btnRelativeSaveInClick(Sender: TObject); begin fneSaveIn.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneSaveIn,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsIgnoreList.chkIgnoreEnableChange(Sender: TObject); begin memIgnoreList.Enabled:= chkIgnoreEnable.Checked; lblSaveIn.Enabled:= chkIgnoreEnable.Checked; fneSaveIn.Enabled:= chkIgnoreEnable.Checked; btnAddSelWithPath.Enabled:= chkIgnoreEnable.Checked; btnAddSel.Enabled:= chkIgnoreEnable.Checked; btnRelativeSaveIn.Enabled:= chkIgnoreEnable.Checked; end; procedure TfrmOptionsIgnoreList.FillIgnoreList(bWithFullPath: Boolean); var I: Integer; SelectedFiles: TFiles; begin SelectedFiles := frmMain.ActiveFrame.CloneSelectedOrActiveFiles; try for I:= 0 to SelectedFiles.Count - 1 do if bWithFullPath then memIgnoreList.Lines.Add(SelectedFiles[I].FullPath) else memIgnoreList.Lines.Add(SelectedFiles[I].Name); finally FreeAndNil(SelectedFiles); end; end; class function TfrmOptionsIgnoreList.GetIconIndex: Integer; begin Result := 17; end; class function TfrmOptionsIgnoreList.GetTitle: String; begin Result := rsOptionsEditorIgnoreList; end; procedure TfrmOptionsIgnoreList.Load; begin chkIgnoreEnable.Checked:= gIgnoreListFileEnabled; fneSaveIn.FileName:= gIgnoreListFile; memIgnoreList.Lines.Assign(glsIgnoreList); chkIgnoreEnableChange(chkIgnoreEnable); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; function TfrmOptionsIgnoreList.Save: TOptionsEditorSaveFlags; begin Result := []; gIgnoreListFileEnabled:= chkIgnoreEnable.Checked; gIgnoreListFile:= fneSaveIn.FileName; glsIgnoreList.Assign(memIgnoreList.Lines); end; end. doublecmd-1.1.30/src/frames/foptionsignorelist.lrj0000644000175000001440000000236215104114162021306 0ustar alexxusers{"version":1,"strings":[ {"hash":147277194,"name":"tfrmoptionsignorelist.lblsavein.caption","sourcebytes":[38,83,97,118,101,32,105,110,58],"value":"&Save in:"}, {"hash":240235098,"name":"tfrmoptionsignorelist.chkignoreenable.caption","sourcebytes":[38,73,103,110,111,114,101,32,40,100,111,110,39,116,32,115,104,111,119,41,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,102,105,108,101,115,32,97,110,100,32,102,111,108,100,101,114,115,58],"value":"&Ignore (don't show) the following files and folders:"}, {"hash":261476003,"name":"tfrmoptionsignorelist.btnaddsel.caption","sourcebytes":[65,38,100,100,32,115,101,108,101,99,116,101,100,32,110,97,109,101,115],"value":"A&dd selected names"}, {"hash":110533672,"name":"tfrmoptionsignorelist.btnaddselwithpath.caption","sourcebytes":[65,100,100,32,115,101,108,101,99,116,101,100,32,110,97,109,101,115,32,119,105,116,104,32,38,102,117,108,108,32,112,97,116,104],"value":"Add selected names with &full path"}, {"hash":15252584,"name":"tfrmoptionsignorelist.btnrelativesavein.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"} ]} doublecmd-1.1.30/src/frames/foptionsignorelist.lfm0000644000175000001440000001367015104114162021301 0ustar alexxusersinherited frmOptionsIgnoreList: TfrmOptionsIgnoreList Height = 325 Width = 644 HelpKeyword = '/configuration.html#ConfigIgnore' ClientHeight = 325 ClientWidth = 644 DesignTop = 27 object lblSaveIn: TLabel[0] Tag = 304 AnchorSideLeft.Control = memIgnoreList AnchorSideTop.Control = fneSaveIn AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 256 Width = 40 Caption = '&Save in:' FocusControl = fneSaveIn ParentColor = False end object chkIgnoreEnable: TCheckBox[1] Tag = 301 AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 19 Top = 8 Width = 624 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 8 BorderSpacing.Right = 10 Caption = '&Ignore (don''t show) the following files and folders:' OnChange = chkIgnoreEnableChange TabOrder = 0 end object memIgnoreList: TMemo[2] AnchorSideLeft.Control = chkIgnoreEnable AnchorSideTop.Control = chkIgnoreEnable AnchorSideTop.Side = asrBottom AnchorSideRight.Control = chkIgnoreEnable AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneSaveIn Left = 10 Height = 209 Top = 33 Width = 624 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Bottom = 10 Lines.Strings = ( '' ) ParentFont = False ScrollBars = ssBoth TabOrder = 1 end object btnAddSel: TButton[3] Tag = 303 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = memIgnoreList AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 502 Height = 30 Top = 285 Width = 132 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 10 Caption = 'A&dd selected names' Constraints.MinHeight = 30 OnClick = btnAddSelClick TabOrder = 4 end object btnAddSelWithPath: TButton[4] Tag = 302 AnchorSideLeft.Control = memIgnoreList AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 10 Height = 30 Top = 285 Width = 205 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Bottom = 10 Caption = 'Add selected names with &full path' Constraints.MinHeight = 30 OnClick = btnAddSelWithPathClick TabOrder = 3 end object fneSaveIn: TFileNameEdit[5] AnchorSideLeft.Control = lblSaveIn AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeSaveIn AnchorSideBottom.Control = btnAddSel Left = 58 Height = 23 Top = 252 Width = 549 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Bottom = 10 MaxLength = 0 TabOrder = 2 end object btnRelativeSaveIn: TSpeedButton[6] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneSaveIn AnchorSideRight.Control = memIgnoreList AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneSaveIn AnchorSideBottom.Side = asrBottom Left = 607 Height = 23 Hint = 'Some functions to select appropriate path' Top = 252 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeSaveInClick end object pmPathHelper: TPopupMenu[7] left = 456 top = 280 end end doublecmd-1.1.30/src/frames/foptionsicons.pas0000644000175000001440000002011515104114162020232 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Icons options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsIcons; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsIcons } TfrmOptionsIcons = class(TOptionsEditor) cbDiskIconsSize: TComboBox; cbIconsOnButtons: TCheckBox; cbIconsShowOverlay: TCheckBox; cbIconsExclude: TCheckBox; cbIconsInMenusSize: TComboBox; cbIconsInMenus: TCheckBox; cbIconsSize: TComboBox; chkShowHiddenDimmed: TCheckBox; cmbIconTheme: TComboBox; edtIconsExcludeDirs: TEdit; gbIconsSize: TGroupBox; gbShowIconsMode: TGroupBox; gbDisableSpecialIcons: TGroupBox; gbShowIcons: TGroupBox; gbIconTheme: TGroupBox; imgDiskIconExample: TImage; imgIconExample: TImage; lblDiskPanel: TLabel; lblFilePanel: TLabel; pnlComboBox: TPanel; pnlImage: TPanel; pnlLabel: TPanel; rbIconsShowAll: TRadioButton; rbIconsShowAllAndExe: TRadioButton; rbIconsShowNone: TRadioButton; rbIconsShowStandard: TRadioButton; procedure cbDiskIconsSizeChange(Sender: TObject); procedure cbIconsExcludeChange(Sender: TObject); procedure cbIconsSizeChange(Sender: TObject); procedure rbIconsShowNoneChange(Sender: TObject); private procedure FillIconThemes(const Path: String); public class function GetIconIndex: Integer; override; class function GetTitle: String; override; procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; end; implementation {$R *.lfm} uses Forms, Graphics, FileUtil, DCOSUtils, uPixMapManager, uGlobs, uLng, uOSUtils, uGlobsPaths, uSysFolders; { TfrmOptionsIcons } procedure TfrmOptionsIcons.cbIconsSizeChange(Sender: TObject); var iSize: Integer; bmpTemp: TBitmap; begin if cbIconsSize.ItemIndex < 0 then Exit; iSize:= PtrInt(cbIconsSize.Items.Objects[cbIconsSize.ItemIndex]); bmpTemp:= PixmapManager.GetFolderIcon(iSize, pnlImage.Color); imgIconExample.Picture.Assign(bmpTemp); FreeAndNil(bmpTemp); end; procedure TfrmOptionsIcons.cbIconsExcludeChange(Sender: TObject); begin edtIconsExcludeDirs.Enabled:= cbIconsExclude.Checked; end; procedure TfrmOptionsIcons.cbDiskIconsSizeChange(Sender: TObject); var iSize: Integer; bmpTemp: TBitmap; begin if cbDiskIconsSize.ItemIndex < 0 then Exit; iSize:= PtrInt(cbDiskIconsSize.Items.Objects[cbDiskIconsSize.ItemIndex]); bmpTemp:= PixmapManager.GetDefaultDriveIcon(iSize, pnlImage.Color); imgDiskIconExample.Picture.Assign(bmpTemp); FreeAndNil(bmpTemp); end; procedure TfrmOptionsIcons.rbIconsShowNoneChange(Sender: TObject); begin cbIconsSize.Enabled := not rbIconsShowNone.Checked; cbIconsShowOverlay.Enabled := not rbIconsShowNone.Checked; chkShowHiddenDimmed.Enabled := not rbIconsShowNone.Checked; gbDisableSpecialIcons.Enabled := not rbIconsShowNone.Checked; end; procedure TfrmOptionsIcons.FillIconThemes(const Path: String); var I: Integer; ADirectories: TStringList; begin ADirectories:= FindAllDirectories(Path, False); for I:= 0 to ADirectories.Count - 1 do begin if mbFileExists(ADirectories[I] + PathDelim + 'index.theme') then cmbIconTheme.Items.Add(ExtractFileName(ADirectories[I])); end; ADirectories.Free; end; class function TfrmOptionsIcons.GetIconIndex: Integer; begin Result := 16; end; class function TfrmOptionsIcons.GetTitle: String; begin Result := rsOptionsEditorIcons; end; procedure TfrmOptionsIcons.Init; var I: Integer; AIconSize: String; begin inherited Init; for I:= Low(ICON_SIZES) to High(ICON_SIZES) do begin AIconSize:= IntToStr(ICON_SIZES[I]) + 'x' + IntToStr(ICON_SIZES[I]); cbIconsSize.Items.AddObject(AIconSize, TObject(PtrInt(ICON_SIZES[I]))); end; for I:= Low(ICON_SIZES) to High(ICON_SIZES) - 1 do begin AIconSize:= IntToStr(ICON_SIZES[I]) + 'x' + IntToStr(ICON_SIZES[I]); cbDiskIconsSize.Items.AddObject(AIconSize, TObject(PtrInt(ICON_SIZES[I]))); end; TStringList(cmbIconTheme.Items).Duplicates:= dupIgnore; if not gUseConfigInProgramDir then begin FillIconThemes(IncludeTrailingBackslash(GetAppDataDir) + 'pixmaps'); end; FillIconThemes(gpPixmapPath); end; procedure TfrmOptionsIcons.Load; begin case gShowIconsNew of sim_none: rbIconsShowNone.Checked:= True; sim_standart: rbIconsShowStandard.Checked:= True; sim_all: rbIconsShowAll.Checked:= True; sim_all_and_exe: rbIconsShowAllAndExe.Checked := True; end; cmbIconTheme.Text:= gIconTheme; chkShowHiddenDimmed.Checked:= gShowHiddenDimmed; cbIconsShowOverlay.Checked:= gIconOverlays; cbIconsExclude.Checked:= gIconsExclude; cbIconsInMenus.Checked := gIconsInMenus; edtIconsExcludeDirs.Text:= gIconsExcludeDirs; edtIconsExcludeDirs.Enabled:= gIconsExclude; cbIconsSize.Text := IntToStr(gIconsSizeNew) + 'x' + IntToStr(gIconsSizeNew); cbDiskIconsSize.Text := IntToStr(gDiskIconsSize) + 'x' + IntToStr(gDiskIconsSize); cbIconsInMenusSize.Text := IntToStr(gIconsInMenusSizeNew) + 'x' + IntToStr(gIconsInMenusSizeNew); cbIconsSizeChange(nil); cbDiskIconsSizeChange(nil); cbIconsOnButtons.Checked := Application.ShowButtonGlyphs = sbgAlways; end; function TfrmOptionsIcons.Save: TOptionsEditorSaveFlags; var SelectedShowIcons: TShowIconsMode = sim_none; SelectedIconsSize: Integer; SelectedDiskIconsSize: Integer; begin Result := []; if rbIconsShowNone.Checked then SelectedShowIcons := sim_none else if rbIconsShowStandard.Checked then SelectedShowIcons := sim_standart else if rbIconsShowAll.Checked then SelectedShowIcons := sim_all else if rbIconsShowAllAndExe.Checked then SelectedShowIcons := sim_all_and_exe; if cbIconsSize.ItemIndex < 0 then SelectedIconsSize := gIconsSizeNew else begin SelectedIconsSize := PtrInt(cbIconsSize.Items.Objects[cbIconsSize.ItemIndex]) end; if cbDiskIconsSize.ItemIndex < 0 then SelectedDiskIconsSize := gDiskIconsSize else begin SelectedDiskIconsSize := PtrInt(cbDiskIconsSize.Items.Objects[cbDiskIconsSize.ItemIndex]) end; case cbIconsInMenusSize.ItemIndex of 0: gIconsInMenusSizeNew := 16; 1: gIconsInMenusSizeNew := 24; 2: gIconsInMenusSizeNew := 32; end; if (gIconsSizeNew <> SelectedIconsSize) or (gShowIconsNew <> SelectedShowIcons) or (gIconsInMenusSizeNew <> gIconsInMenusSize) then begin Include(Result, oesfNeedsRestart); end; if cbIconsInMenus.Checked <> gIconsInMenus then Include(Result, oesfNeedsRestart); //Main page menu's are created only at startup so we need to restart. gIconsSizeNew := SelectedIconsSize; gShowIconsNew := SelectedShowIcons; gDiskIconsSize := SelectedDiskIconsSize; gIconOverlays := cbIconsShowOverlay.Checked; gIconsExclude := cbIconsExclude.Checked; gIconsExcludeDirs := edtIconsExcludeDirs.Text; gIconsInMenus := cbIconsInMenus.Checked; gShowHiddenDimmed := chkShowHiddenDimmed.Checked; if cbIconsOnButtons.Checked then begin if Application.ShowButtonGlyphs <> sbgAlways then Include(Result, oesfNeedsRestart); Application.ShowButtonGlyphs := sbgAlways; end else begin if Application.ShowButtonGlyphs <> sbgNever then Include(Result, oesfNeedsRestart); Application.ShowButtonGlyphs := sbgNever; end; if cmbIconTheme.Text <> gIconTheme then begin gIconTheme:= cmbIconTheme.Text; Include(Result, oesfNeedsRestart); end; end; end. doublecmd-1.1.30/src/frames/foptionsicons.lrj0000644000175000001440000000636615104114162020252 0ustar alexxusers{"version":1,"strings":[ {"hash":203478128,"name":"tfrmoptionsicons.gbshowiconsmode.caption","sourcebytes":[32,83,104,111,119,32,105,99,111,110,115,32,116,111,32,116,104,101,32,108,101,102,116,32,111,102,32,116,104,101,32,102,105,108,101,110,97,109,101,32],"value":" Show icons to the left of the filename "}, {"hash":277804,"name":"tfrmoptionsicons.rbiconsshowall.caption","sourcebytes":[65,38,108,108],"value":"A&ll"}, {"hash":154150419,"name":"tfrmoptionsicons.rbiconsshowstandard.caption","sourcebytes":[79,110,108,121,32,38,115,116,97,110,100,97,114,100,32,105,99,111,110,115],"value":"Only &standard icons"}, {"hash":24104707,"name":"tfrmoptionsicons.rbiconsshownone.caption","sourcebytes":[38,78,111,32,105,99,111,110,115],"value":"&No icons"}, {"hash":264383097,"name":"tfrmoptionsicons.rbiconsshowallandexe.caption","sourcebytes":[65,108,108,32,97,115,115,111,99,105,97,116,101,100,32,43,32,38,69,88,69,47,76,78,75,32,40,115,108,111,119,41],"value":"All associated + &EXE/LNK (slow)"}, {"hash":25699715,"name":"tfrmoptionsicons.cbiconsshowoverlay.caption","sourcebytes":[83,104,111,119,32,111,38,118,101,114,108,97,121,32,105,99,111,110,115,44,32,101,46,103,46,32,102,111,114,32,108,105,110,107,115],"value":"Show o&verlay icons, e.g. for links"}, {"hash":256005833,"name":"tfrmoptionsicons.chkshowhiddendimmed.caption","sourcebytes":[38,68,105,109,109,101,100,32,104,105,100,100,101,110,32,102,105,108,101,115,32,40,115,108,111,119,101,114,41],"value":"&Dimmed hidden files (slower)"}, {"hash":226326355,"name":"tfrmoptionsicons.gbdisablespecialicons.caption","sourcebytes":[68,105,115,97,98,108,101,32,115,112,101,99,105,97,108,32,105,99,111,110,115],"value":"Disable special icons"}, {"hash":105351658,"name":"tfrmoptionsicons.cbiconsexclude.caption","sourcebytes":[70,111,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,38,112,97,116,104,115,32,97,110,100,32,116,104,101,105,114,32,115,117,98,100,105,114,101,99,116,111,114,105,101,115,58],"value":"For the following &paths and their subdirectories:"}, {"hash":157948723,"name":"tfrmoptionsicons.gbshowicons.caption","sourcebytes":[83,104,111,119,32,105,99,111,110,115],"value":"Show icons"}, {"hash":168408451,"name":"tfrmoptionsicons.cbiconsonbuttons.caption","sourcebytes":[83,104,111,119,32,105,99,111,110,115,32,111,110,32,98,117,116,116,111,110,115],"value":"Show icons on buttons"}, {"hash":165512787,"name":"tfrmoptionsicons.cbiconsinmenus.caption","sourcebytes":[83,104,111,119,32,105,99,111,110,115,32,102,111,114,32,97,99,116,105,111,110,115,32,105,110,32,38,109,101,110,117,115],"value":"Show icons for actions in &menus"}, {"hash":3464006,"name":"tfrmoptionsicons.cbiconsinmenussize.text","sourcebytes":[49,54,120,49,54],"value":"16x16"}, {"hash":6228496,"name":"tfrmoptionsicons.gbiconssize.caption","sourcebytes":[32,73,99,111,110,32,115,105,122,101,32],"value":" Icon size "}, {"hash":120277386,"name":"tfrmoptionsicons.lblfilepanel.caption","sourcebytes":[70,105,108,101,32,112,97,110,101,108,58],"value":"File panel:"}, {"hash":120406570,"name":"tfrmoptionsicons.lbldiskpanel.caption","sourcebytes":[68,105,115,107,32,112,97,110,101,108,58],"value":"Disk panel:"}, {"hash":8262229,"name":"tfrmoptionsicons.gbicontheme.caption","sourcebytes":[73,99,111,110,32,116,104,101,109,101],"value":"Icon theme"} ]} doublecmd-1.1.30/src/frames/foptionsicons.lfm0000644000175000001440000002404415104114162020232 0ustar alexxusersinherited frmOptionsIcons: TfrmOptionsIcons Height = 590 Width = 478 HelpKeyword = '/configuration.html#ConfigIcons' ClientHeight = 590 ClientWidth = 478 DesignLeft = 397 DesignTop = 37 object gbShowIconsMode: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 219 Top = 6 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Show icons to the left of the filename ' ChildSizing.TopBottomSpacing = 8 ClientHeight = 194 ClientWidth = 462 TabOrder = 0 object rbIconsShowAll: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowAllAndExe AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 38 Width = 42 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'A&ll' Checked = True TabOrder = 1 TabStop = True end object rbIconsShowStandard: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowAll AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 68 Width = 154 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Only &standard icons' TabOrder = 2 end object rbIconsShowNone: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowStandard AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 98 Width = 82 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&No icons' OnChange = rbIconsShowNoneChange TabOrder = 3 end object rbIconsShowAllAndExe: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = gbShowIconsMode Left = 10 Height = 24 Top = 8 Width = 236 BorderSpacing.Left = 10 Caption = 'All associated + &EXE/LNK (slow)' TabOrder = 0 end object cbIconsShowOverlay: TCheckBox AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowNone AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 130 Width = 236 BorderSpacing.Left = 10 BorderSpacing.Top = 8 Caption = 'Show o&verlay icons, e.g. for links' TabOrder = 4 end object chkShowHiddenDimmed: TCheckBox AnchorSideLeft.Control = cbIconsShowOverlay AnchorSideTop.Control = cbIconsShowOverlay AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 162 Width = 220 BorderSpacing.Top = 8 Caption = '&Dimmed hidden files (slower)' TabOrder = 5 end end object gbDisableSpecialIcons: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowIconsMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 100 Top = 231 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Disable special icons' ChildSizing.TopBottomSpacing = 8 ClientHeight = 75 ClientWidth = 462 TabOrder = 1 object edtIconsExcludeDirs: TEdit AnchorSideLeft.Control = cbIconsExclude AnchorSideTop.Control = cbIconsExclude AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDisableSpecialIcons AnchorSideRight.Side = asrBottom Left = 30 Height = 28 Top = 32 Width = 424 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 BorderSpacing.Right = 8 BorderSpacing.Bottom = 15 TabOrder = 1 end object cbIconsExclude: TCheckBox AnchorSideLeft.Control = gbDisableSpecialIcons AnchorSideTop.Control = gbDisableSpecialIcons Left = 10 Height = 24 Top = 8 Width = 340 BorderSpacing.Left = 10 Caption = 'For the following &paths and their subdirectories:' OnChange = cbIconsExcludeChange TabOrder = 0 end end object gbShowIcons: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbIconsSize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 99 Top = 482 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Show icons' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 8 ClientHeight = 74 ClientWidth = 462 TabOrder = 2 object cbIconsOnButtons: TCheckBox AnchorSideLeft.Control = gbShowIcons AnchorSideTop.Control = gbShowIcons Left = 10 Height = 24 Top = 8 Width = 173 Caption = 'Show icons on buttons' TabOrder = 0 end object cbIconsInMenus: TCheckBox AnchorSideLeft.Control = gbShowIcons AnchorSideTop.Control = cbIconsInMenusSize AnchorSideTop.Side = asrCenter Left = 10 Height = 24 Top = 40 Width = 235 Caption = 'Show icons for actions in &menus' TabOrder = 1 end object cbIconsInMenusSize: TComboBox AnchorSideTop.Control = cbIconsOnButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbShowIcons AnchorSideRight.Side = asrBottom Left = 321 Height = 28 Top = 38 Width = 131 Anchors = [akTop, akRight] BorderSpacing.Top = 6 ItemHeight = 20 ItemIndex = 0 Items.Strings = ( '16x16' '24x24' '32x32' ) OnChange = cbIconsSizeChange Style = csDropDownList TabOrder = 2 Text = '16x16' end end object gbIconsSize: TGroupBox[3] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbDisableSpecialIcons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 139 Top = 337 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Icon size ' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 3 ClientHeight = 114 ClientWidth = 462 TabOrder = 3 object pnlLabel: TPanel Left = 10 Height = 102 Top = 6 Width = 146 BevelOuter = bvNone ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ChildSizing.ControlsPerLine = 2 ClientHeight = 102 ClientWidth = 146 TabOrder = 0 object lblFilePanel: TLabel Left = 0 Height = 20 Top = 21 Width = 72 Caption = 'File panel:' Layout = tlCenter ParentColor = False end object lblDiskPanel: TLabel Left = 0 Height = 20 Top = 62 Width = 72 Caption = 'Disk panel:' Layout = tlCenter ParentColor = False end end object pnlComboBox: TPanel Left = 156 Height = 102 Top = 6 Width = 174 BevelOuter = bvNone ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ChildSizing.ControlsPerLine = 2 ClientHeight = 102 ClientWidth = 174 TabOrder = 1 object cbIconsSize: TComboBox AnchorSideTop.Side = asrCenter Left = 0 Height = 28 Top = 16 Width = 100 ItemHeight = 20 OnChange = cbIconsSizeChange Style = csDropDownList TabOrder = 0 end object cbDiskIconsSize: TComboBox AnchorSideTop.Side = asrCenter Left = 0 Height = 28 Top = 60 Width = 100 ItemHeight = 20 OnChange = cbDiskIconsSizeChange Style = csDropDownList TabOrder = 1 end end object pnlImage: TPanel Left = 330 Height = 102 Top = 6 Width = 122 BevelOuter = bvNone ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ChildSizing.ControlsPerLine = 2 ClientHeight = 102 ClientWidth = 122 TabOrder = 2 object imgIconExample: TImage Left = 37 Height = 48 Top = 0 Width = 48 Center = True Constraints.MaxHeight = 48 Constraints.MaxWidth = 48 Constraints.MinHeight = 48 Constraints.MinWidth = 48 end object imgDiskIconExample: TImage Left = 37 Height = 48 Top = 54 Width = 48 Center = True Constraints.MaxHeight = 48 Constraints.MaxWidth = 48 Constraints.MinHeight = 48 Constraints.MinWidth = 48 end end end object gbIconTheme: TGroupBox[4] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowIcons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 65 Top = 587 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Icon theme' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 40 ClientWidth = 462 TabOrder = 4 object cmbIconTheme: TComboBox AnchorSideLeft.Control = gbIconTheme AnchorSideTop.Control = gbIconTheme AnchorSideRight.Control = gbIconTheme AnchorSideRight.Side = asrBottom Left = 6 Height = 28 Top = 6 Width = 450 Anchors = [akTop, akLeft, akRight] ItemHeight = 20 Style = csDropDownList TabOrder = 0 end end end doublecmd-1.1.30/src/frames/foptionshotkeys.pas0000644000175000001440000014302415104114162020612 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Hotkeys options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsHotkeys; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, StdCtrls, Grids, fOptionsFrame, fOptionsHotkeysEditHotkey, uHotkeyManager, DCBasicTypes, Controls, Buttons, Menus, ActnList, uGlobs; type { TfrmOptionsHotkeys } TfrmOptionsHotkeys = class(TOptionsEditor) btnDeleteHotKey: TButton; btnAddHotKey: TButton; btnEditHotkey: TButton; edtFilter: TEdit; lblCommands: TLabel; lbFilter: TLabel; lblSCFiles: TLabel; lblCategories: TLabel; lbSCFilesList: TComboBox; lbxCategories: TComboBox; pnlHotkeyButtons: TPanel; stgCommands: TStringGrid; stgHotkeys: TStringGrid; btnFileAction: TSpeedButton; lblSortOrder: TLabel; cbCommandSortOrder: TComboBox; alMainActionList: TActionList; actAddHotKey: TAction; actEditHotKey: TAction; actDeleteHotKey: TAction; actPopupFileRelatedMenu: TAction; actSortByCommand: TAction; actSortByHotKeysGrouped: TAction; actSortByHotKeysOnePerLine: TAction; actPreviousCategory: TAction; actNextCategory: TAction; pmShortcutMenu: TPopupMenu; actSaveNow: TAction; actRename: TAction; actCopy: TAction; actDelete: TAction; actRestoreDefault: TAction; miSaveNow: TMenuItem; miCopy: TMenuItem; miRename: TMenuItem; miDelete: TMenuItem; miRestoreDefault: TMenuItem; miSeparator1: TMenuItem; miCategories: TMenuItem; miPreviousCategory: TMenuItem; miNextCategory: TMenuItem; miSortOrder: TMenuItem; miSortByCommand: TMenuItem; miSortByHotKeysOnePerLine: TMenuItem; miSortByHotKeysGrouped: TMenuItem; miCommands: TMenuItem; miAddHotKey: TMenuItem; miEditHotKey: TMenuItem; miDeleteHotKey: TMenuItem; procedure actRenameExecute(Sender: TObject); procedure edtFilterChange(Sender: TObject); procedure lbSCFilesListChange(Sender: TObject); procedure lbxCategoriesChange(Sender: TObject); procedure stgCommandsDblClick(Sender: TObject); procedure stgCommandsPrepareCanvas(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); procedure stgCommandsResize(Sender: TObject); procedure stgCommandsSelectCell(Sender: TObject; {%H-}aCol, aRow: integer; var {%H-}CanSelect: boolean); procedure stgHotkeysDblClick(Sender: TObject); procedure stgHotkeysKeyDown(Sender: TObject; var Key: word; {%H-}Shift: TShiftState); procedure stgHotkeysResize(Sender: TObject); procedure stgHotkeysSelectCell(Sender: TObject; {%H-}aCol, aRow: integer; var {%H-}CanSelect: boolean); procedure stgCommandsCompareCells(Sender: TObject; ACol, ARow, BCol, BRow: integer; var Result: integer); procedure stgCommandsHeaderClick(Sender: TObject; IsColumn: boolean; Index: integer); procedure cbCommandSortOrderChange(Sender: TObject); function isOkToContinueRegardingModifiedOrNot: boolean; function GetANewSetupName(var ASetupName: string): boolean; procedure actAddHotKeyExecute(Sender: TObject); procedure actCopyExecute(Sender: TObject); procedure actDeleteExecute(Sender: TObject); procedure actDeleteHotKeyExecute(Sender: TObject); procedure actEditHotKeyExecute(Sender: TObject); procedure actNextCategoryExecute(Sender: TObject); procedure actPopupFileRelatedMenuExecute(Sender: TObject); procedure actPreviousCategoryExecute(Sender: TObject); procedure actRestoreDefaultExecute(Sender: TObject); procedure actSaveNowExecute(Sender: TObject); procedure actAdjustSortOrderExecute(Sender: TObject); private FEditForm: TfrmEditHotkey; FHotkeysAutoColWidths: array of integer; FHotkeysAutoGridWidth: integer; FHotkeysCategories: TStringList; // Untranslated FUpdatingShortcutsFiles: boolean; FModified: boolean; procedure AutoSizeCommandsGrid; procedure AutoSizeHotkeysGrid; procedure ClearHotkeysGrid; procedure DeleteHotkeyFromGrid(aHotkey: string); function GetSelectedCommand: string; {en Refreshes all hotkeys from the Commands grid } procedure UpdateHotkeys(HMForm: THMForm); procedure UpdateHotkeysForCommand(HMForm: THMForm; RowNr: integer); procedure FillSCFilesList; {en Return hotkeys assigned for command for the form and its controls. } procedure GetHotKeyList(HMForm: THMForm; Command: string; HotkeysList: THotkeys); {en Fill hotkey grid with all hotkeys assigned to a command } procedure FillHotkeyList(sCommand: string); {en Fill Commands grid with all commands available for the selected category. @param(Filter If not empty string then shows only commands containing Filter string.) } procedure FillCommandList(Filter: string); procedure FillCategoriesList; {en Retrieves untranslated form name. } function GetSelectedForm: string; procedure SelectHotkey(Hotkey: THotkey); procedure ShowEditHotkeyForm(EditMode: boolean; aHotkeyRow: integer); procedure ShowEditHotkeyForm(EditMode: boolean; const AForm: string; const ACommand: string; const AHotkey: THotkey; const AControls: TDynamicStringArray); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure AddDeleteWithShiftHotkey(UseTrash: boolean); class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; procedure DeleteHotkey; procedure DeleteAllHotkeys; procedure TryToSelectThatCategory(sCategory: string); end; function GetSortableShortcutName(sToSort: string): string; implementation {$R *.lfm} uses fMain, Graphics, Forms, LCLType, Dialogs, LazUTF8, LCLVersion, uFindEx, uGlobsPaths, uLng, uKeyboard, uFormCommands, DCStrUtils, DCOSUtils, uShowMsg; const stgCmdCommandIndex = 0; stgCmdHotkeysIndex = 1; stgCmdDescriptionIndex = 2; type PHotkeyItem = ^THotkeyItem; THotkeyItem = record Hotkey: THotkey; Controls: TDynamicStringArray; end; procedure DestroyHotkeyItem(HotkeyItem: PHotkeyItem); begin if Assigned(HotkeyItem) then begin HotkeyItem^.Hotkey.Free; Dispose(HotkeyItem); end; end; { MyStrcompare } // Used to help "HotkeysToString" function to have the returned shortcut strings // sorted in such way that "Fx" are first, "ALT-Fx" second, etc. when there are // more than one shortcut per command. function MyStrcompare(List: TStringList; Index1, Index2: integer): integer; begin Result := CompareText(GetSortableShortcutName(List.Strings[Index1]), GetSortableShortcutName(List.Strings[Index2])); end; { HotkeysToString } // Converts hotkeys list to string. function HotkeysToString(const Hotkeys: THotkeys): string; var sCurrent: string; i: integer; sList: TStringList; begin Result := ''; sList := TStringList.Create; try sList.CaseSensitive := True; for i := 0 to Hotkeys.Count - 1 do begin sCurrent := ShortcutsToText(Hotkeys[i].Shortcuts); if sList.IndexOf(sCurrent) < 0 then sList.Add(sCurrent); end; sList.CustomSort(@MyStrcompare); for i := 0 to pred(sList.Count) do AddStrWithSep(Result, sList.Strings[i], ';'); finally sList.Free; end; end; function CompareCategories(List: TStringList; Index1, Index2: integer): integer; begin {$IF LCL_FULLVERSION >= 093100} Result := UTF8CompareText(List.Strings[Index1], List.Strings[Index2]); {$ELSE} Result := WideCompareText(CeUtf8ToUtf16(List.Strings[Index1]), CeUtf8ToUtf16(List.Strings[Index2])); {$ENDIF} end; { TfrmOptionsHotkeys } { TfrmOptionsHotkeys.edtFilterChange } procedure TfrmOptionsHotkeys.edtFilterChange(Sender: TObject); {< filtering active commands list} begin if lbxCategories.ItemIndex = -1 then Exit; FillCommandList(edtFilter.Text); end; { TfrmOptionsHotkeys.lbSCFilesListChange } procedure TfrmOptionsHotkeys.lbSCFilesListChange(Sender: TObject); begin if not FUpdatingShortcutsFiles then begin if not isOkToContinueRegardingModifiedOrNot then begin if gNameSCFile <> lbSCFilesList.Items[lbSCFilesList.ItemIndex] then lbSCFilesList.ItemIndex := lbSCFilesList.Items.indexof(gNameSCFile); end else begin if (lbSCFilesList.ItemIndex >= 0) then begin gNameSCFile := lbSCFilesList.Items[lbSCFilesList.ItemIndex]; HotMan.Load(gpCfgDir + gNameSCFile); FModified := False; FillCategoriesList; lbxCategoriesChange(lbxCategories); end; end; end; end; { TfrmOptionsHotkeys.lbxCategoriesChange } procedure TfrmOptionsHotkeys.lbxCategoriesChange(Sender: TObject); begin if lbxCategories.ItemIndex = -1 then Exit; edtFilter.Clear; FillCommandList(''); end; { TfrmOptionsHotkeys.stgCommandsDblClick } procedure TfrmOptionsHotkeys.stgCommandsDblClick(Sender: TObject); begin // add hot key ShowEditHotkeyForm(False, GetSelectedForm, GetSelectedCommand, nil, nil); end; procedure TfrmOptionsHotkeys.stgCommandsPrepareCanvas(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); begin if (aCol = stgCmdHotkeysIndex) and (aRow > 0) then begin with Sender as TStringGrid do begin if Cells[aCol, aRow] <> '' then begin if not (gdSelected in aState) then begin Canvas.Font.Color := clRed; end end; end; end; end; { TfrmOptionsHotkeys.stgCommandsResize } procedure TfrmOptionsHotkeys.stgCommandsResize(Sender: TObject); begin AutoSizeCommandsGrid; end; { TfrmOptionsHotkeys.stgCommandsSelectCell } procedure TfrmOptionsHotkeys.stgCommandsSelectCell(Sender: TObject; aCol, aRow: integer; var CanSelect: boolean); // < find hotkeys for command var sCommand: string; begin // clears all controls actAddHotKey.Enabled := False; actEditHotkey.Enabled := False; actDeleteHotKey.Enabled := False; ClearHotkeysGrid; if aRow >= stgCommands.FixedRows then begin sCommand := stgCommands.Cells[stgCmdCommandIndex, aRow]; FillHotkeyList(sCommand); actAddHotKey.Enabled := True; end; end; { TfrmOptionsHotkeys.stgHotkeysDblClick } procedure TfrmOptionsHotkeys.stgHotkeysDblClick(Sender: TObject); begin ShowEditHotkeyForm(True, stgHotkeys.Row); end; { TfrmOptionsHotkeys.stgHotkeysKeyDown } procedure TfrmOptionsHotkeys.stgHotkeysKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if Key = VK_DELETE then DeleteHotkey; end; { TfrmOptionsHotkeys.stgHotkeysResize } procedure TfrmOptionsHotkeys.stgHotkeysResize(Sender: TObject); begin AutoSizeHotkeysGrid; end; { TfrmOptionsHotkeys.stgHotkeysSelectCell } procedure TfrmOptionsHotkeys.stgHotkeysSelectCell(Sender: TObject; aCol, aRow: integer; var CanSelect: boolean); var aEnabled: boolean; begin aEnabled := aRow >= stgHotkeys.FixedRows; actEditHotkey.Enabled := aEnabled; actDeleteHotKey.Enabled := aEnabled; end; { TfrmOptionsHotkeys.AutoSizeCommandsGrid } procedure TfrmOptionsHotkeys.AutoSizeCommandsGrid; begin stgCommands.AutoSizeColumns; end; { TfrmOptionsHotkeys.AutoSizeHotkeysGrid } procedure TfrmOptionsHotkeys.AutoSizeHotkeysGrid; var Diff: integer = 0; i: integer; begin with stgHotkeys do begin if Length(FHotkeysAutoColWidths) = ColCount then begin if ClientWidth > FHotkeysAutoGridWidth then Diff := (ClientWidth - FHotkeysAutoGridWidth) div 3; for i := 0 to ColCount - 1 do ColWidths[i] := FHotkeysAutoColWidths[i] + Diff; end; end; end; { TfrmOptionsHotkeys.actAddHotKeyExecute } procedure TfrmOptionsHotkeys.actAddHotKeyExecute(Sender: TObject); begin ShowEditHotkeyForm(False, GetSelectedForm, GetSelectedCommand, nil, nil); end; { TfrmOptionsHotkeys.DeleteHotkeyFromGrid } procedure TfrmOptionsHotkeys.DeleteHotkeyFromGrid(aHotkey: string); var i: integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do if stgHotkeys.Cells[0, i] = aHotkey then begin DestroyHotkeyItem(PHotkeyItem(stgHotkeys.Objects[0, i])); stgHotkeys.DeleteColRow(False, i); Break; end; end; { TfrmOptionsHotkeys.UpdateHotkeys } procedure TfrmOptionsHotkeys.UpdateHotkeys(HMForm: THMForm); var i: integer; begin if cbCommandSortOrder.ItemIndex = 0 then begin for i := Self.stgCommands.FixedRows to Self.stgCommands.RowCount - 1 do Self.UpdateHotkeysForCommand(HMForm, i); end else begin FillCommandList(edtFilter.Text); end; end; { TfrmOptionsHotkeys.UpdateHotkeysForCommand } procedure TfrmOptionsHotkeys.UpdateHotkeysForCommand(HMForm: THMForm; RowNr: integer); var Hotkeys: THotkeys; begin Hotkeys := THotkeys.Create(False); try GetHotKeyList(HMForm, stgCommands.Cells[stgCmdCommandIndex, RowNr], Hotkeys); stgCommands.Cells[stgCmdHotkeysIndex, RowNr] := HotkeysToString(Hotkeys); finally Hotkeys.Free; end; end; { TfrmOptionsHotkeys.FillSCFilesList } procedure TfrmOptionsHotkeys.FillSCFilesList; var SR: TSearchRecEx; Res, iItem: integer; slSCFileList: TStringList; begin FUpdatingShortcutsFiles := True; slSCFileList := TStringList.Create; try slSCFileList.Sorted := True; Res := FindFirstEx(gpCfgDir + '*.scf', 0, SR); try while Res = 0 do begin slSCFileList.Add(Sr.Name); Res := FindNextEx(SR); end; finally FindCloseEx(SR); end; lbSCFilesList.Items.Clear; for iItem := 0 to pred(slSCFileList.Count) do lbSCFilesList.Items.Add(slSCFileList.Strings[iItem]); iItem := lbSCFilesList.Items.IndexOf(gNameSCFile); if iItem <> -1 then lbSCFilesList.ItemIndex := iItem else if lbSCFilesList.Items.Count > 0 then lbSCFilesList.ItemIndex := 0; finally FreeAndNil(slSCFileList); end; FUpdatingShortcutsFiles := False; end; { TfrmOptionsHotkeys.GetHotKeyList } procedure TfrmOptionsHotkeys.GetHotKeyList(HMForm: THMForm; Command: string; HotkeysList: THotkeys); procedure AddHotkeys(hotkeys: THotkeys); var i: integer; begin for i := 0 to hotkeys.Count - 1 do begin if hotkeys[i].Command = Command then HotkeysList.Add(hotkeys[i]); end; end; var i: integer; begin AddHotkeys(HMForm.Hotkeys); for i := 0 to HMForm.Controls.Count - 1 do AddHotkeys(HMForm.Controls[i].Hotkeys); end; { TfrmOptionsHotkeys.ClearHotkeysGrid } procedure TfrmOptionsHotkeys.ClearHotkeysGrid; var i: integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do DestroyHotkeyItem(PHotkeyItem(stgHotkeys.Objects[0, i])); stgHotkeys.RowCount := stgHotkeys.FixedRows; end; { TfrmOptionsHotkeys.FillHotkeyList } procedure TfrmOptionsHotkeys.FillHotkeyList(sCommand: string); function SetObject(RowNr: integer; AHotkey: THotkey): PHotkeyItem; var HotkeyItem: PHotkeyItem; begin New(HotkeyItem); stgHotkeys.Objects[0, RowNr] := TObject(HotkeyItem); HotkeyItem^.Hotkey := AHotkey.Clone; Result := HotkeyItem; end; var HMForm: THMForm; HMControl: THMControl; iHotKey, iControl, iGrid: integer; hotkey: THotkey; found: boolean; HotkeyItem: PHotkeyItem; begin ClearHotkeysGrid; if (sCommand = EmptyStr) or (lbxCategories.ItemIndex = -1) then Exit; HMForm := HotMan.Forms.Find(GetSelectedForm); if not Assigned(HMForm) then Exit; stgHotkeys.BeginUpdate; try // add hotkeys from form for iHotKey := 0 to HMForm.Hotkeys.Count - 1 do begin hotkey := HMForm.Hotkeys[iHotKey]; if hotkey.Command <> sCommand then continue; stgHotkeys.RowCount := stgHotkeys.RowCount + 1; stgHotkeys.Cells[0, stgHotkeys.RowCount - 1] := ShortcutsToText(hotkey.Shortcuts); stgHotkeys.Cells[1, stgHotkeys.RowCount - 1] := ArrayToString(hotkey.Params); SetObject(stgHotkeys.RowCount - 1, hotkey); end; // add hotkeys from controls for iControl := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[iControl]; for iHotKey := 0 to HMControl.Hotkeys.Count - 1 do begin hotkey := HMControl.Hotkeys[iHotKey]; if hotkey.Command <> sCommand then continue; // search for hotkey in grid and add control name to list found := False; for iGrid := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, iGrid]); if HotkeyItem^.Hotkey.SameShortcuts(hotkey.Shortcuts) and HotkeyItem^.Hotkey.SameParams(hotkey.Params) then begin stgHotkeys.Cells[2, iGrid] := stgHotkeys.Cells[2, iGrid] + HMControl.Name + ';'; HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, iGrid]); AddString(HotkeyItem^.Controls, HMControl.Name); found := True; break; end; { if } end; { for } // add new row for hotkey if not found then begin stgHotkeys.RowCount := stgHotkeys.RowCount + 1; stgHotkeys.Cells[0, stgHotkeys.RowCount - 1] := ShortcutsToText(hotkey.Shortcuts); stgHotkeys.Cells[1, stgHotkeys.RowCount - 1] := ArrayToString(hotkey.Params); stgHotkeys.Cells[2, stgHotkeys.RowCount - 1] := HMControl.Name + ';'; HotkeyItem := SetObject(stgHotkeys.RowCount - 1, hotkey); AddString(HotkeyItem^.Controls, HMControl.Name); end; { if } end; { for } end; { for } finally stgHotkeys.EndUpdate; end; stgHotkeys.AutoSizeColumns; SetLength(FHotkeysAutoColWidths, stgHotkeys.ColCount); for iHotKey := 0 to stgHotkeys.ColCount - 1 do FHotkeysAutoColWidths[iHotKey] := stgHotkeys.ColWidths[iHotKey]; FHotkeysAutoGridWidth := stgHotkeys.GridWidth; AutoSizeHotkeysGrid; end; { TfrmOptionsHotkeys.FillCommandList } // We will scan the hotkeys and fill progressively the list "slCommandsForGrid", "slDescriptionsFroGrid" and "slHotKeyForGrid". // Then we output to actual grid the element of the list. // Then we sort the grid. // Fill stgCommands with commands and descriptions procedure TfrmOptionsHotkeys.FillCommandList(Filter: string); var lcFilter: string; FilterParts: TStringList; slCommandsForGrid, slDescriptionsForGrid, slHotKeyForGrid: TStringList; procedure AddOrFilterOut(const Command, HotKeys, Description: string); function CheckHotKeys: Boolean; var lcHotKeys: string; i: integer; begin lcHotKeys := UTF8LowerCase(HotKeys); for i := 0 to pred(FilterParts.Count) do // Get filter parts split by '+' character begin if FilterParts[i] = '' then Continue; if Length(FilterParts[i]) = 1 then // Heurstics to make filtering more handy begin if FilterParts[i][1] in ['c','s','a','m'] then // Ctrl Shift Alt Meta first letters Result := Pos('+' + FilterParts[i] + ';', '+' + lcHotKeys + ';') <> 0 else // other single letters Result := Pos('+' + FilterParts[i], '+' + lcHotKeys) <> 0; end else // plain substring search for two or more letters Result := Pos(FilterParts[i], lcHotKeys) <> 0; if not Result then Break; end; end; begin if (lcFilter = '') or (Pos(lcFilter, UTF8LowerCase(Command)) <> 0) or (Pos(lcFilter, UTF8LowerCase(Description)) <> 0) or ((HotKeys <> '') and CheckHotKeys) then begin slCommandsForGrid.Add(Command); slHotKeyForGrid.Add(HotKeys); slDescriptionsForGrid.Add(Description); end; end; var slTmp: THotkeys; slAllCommands: TStringList; i, j: integer; HMForm: THMForm; sForm: string; CommandsFormClass: TComponentClass; CommandsForm: TComponent = nil; CommandsFormCreated: boolean = False; CommandsIntf: IFormCommands; begin sForm := GetSelectedForm; CommandsFormClass := TFormCommands.GetCommandsForm(sForm); if not Assigned(CommandsFormClass) or not Supports(CommandsFormClass, IFormCommands) then begin stgCommands.Clean; Exit; end; // Find an instance of the form to retrieve action list (for descriptions). for i := 0 to Screen.CustomFormCount - 1 do if Screen.CustomForms[i].ClassType = CommandsFormClass then begin CommandsForm := Screen.CustomForms[i]; Break; end; // If not found create an instance temporarily. if not Assigned(CommandsForm) then begin CommandsForm := CommandsFormClass.Create(Application); CommandsFormCreated := True; end; CommandsIntf := CommandsForm as IFormCommands; slAllCommands := TStringList.Create; slCommandsForGrid := TStringList.Create; slHotKeyForGrid := TStringList.Create; slDescriptionsForGrid := TStringList.Create; slTmp := THotkeys.Create(False); HMForm := HotMan.Forms.Find(sForm); // 1. Get all the "cm_" commands and store them in our list "slAllCommands". CommandsIntf.GetCommandsList(slAllCommands); // 2. Prepare filter to use in the next step. lcFilter := UTF8LowerCase(Filter); FilterParts := TStringList.Create; FilterParts.Delimiter := '+'; FilterParts.DelimitedText := lcFilter; // 3. Based on all the commands we got, populate "equally" our three string list of commands, hotkeys and descrition used to fill our grid. for i := 0 to pred(slAllCommands.Count) do begin if Assigned(HMForm) then begin slTmp.Clear; GetHotKeyList(HMForm, slAllCommands.Strings[i], slTmp); if (THotKeySortOrder(cbCommandSortOrder.ItemIndex) = hksoByHotKeyOnePerRow) and (slTmp.Count > 0) then begin for j := 0 to pred(slTmp.Count) do begin AddOrFilterOut( slAllCommands.Strings[i], ShortcutsToText(slTmp[j].Shortcuts), CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end else begin AddOrFilterOut( slAllCommands.Strings[i], HotkeysToString(slTmp), CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end else begin AddOrFilterOut( slAllCommands.Strings[i], '', CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong)); end; end; // 4. Add to list NAMES of columns. slCommandsForGrid.Insert(0, rsOptHotkeysCommand); slHotKeyForGrid.Insert(0, rsOptHotkeysHotkeys); slDescriptionsForGrid.Insert(0, rsOptHotkeysDescription); // 5. Set stringgrid rows count. stgCommands.RowCount := slCommandsForGrid.Count; // 6. Copy to grid our created list. stgCommands.BeginUpdate; stgCommands.Clean; stgCommands.Cols[stgCmdCommandIndex].Assign(slCommandsForGrid); stgCommands.Cols[stgCmdHotkeysIndex].Assign(slHotKeyForGrid); stgCommands.Cols[stgCmdDescriptionIndex].Assign(slDescriptionsForGrid); // 7. Sort our grid according to our wish case THotKeySortOrder(cbCommandSortOrder.ItemIndex) of hksoByCommand: stgCommands.SortColRow(True, stgCmdCommandIndex); hksoByHotKeyGrouped, hksoByHotKeyOnePerRow: stgCommands.SortColRow(True, stgCmdHotkeysIndex); end; // 8. We have finished playing in element of the grid. stgCommands.EndUpdate; // 9. Resize the columns to fit with the text now in all the cells. AutoSizeCommandsGrid; stgCommands.Row := 0; // needs for call select function for refresh hotkeylist slAllCommands.Free; slCommandsForGrid.Free; slHotKeyForGrid.Free; slDescriptionsForGrid.Free; slTmp.Free; FilterParts.Free; if CommandsFormCreated then Application.ReleaseComponent(CommandsForm); end; { TfrmOptionsHotkeys.FillCategoriesList } procedure TfrmOptionsHotkeys.FillCategoriesList; var i, MainIndex, Diff: integer; Translated: TStringList; begin Translated := TStringList.Create; try TFormCommands.GetCategoriesList(FHotkeysCategories, Translated); if FHotkeysCategories.Count > 0 then begin // Remove Main category so that it can be put to the top after sorting the rest. MainIndex := FHotkeysCategories.IndexOf('Main'); if (MainIndex >= 0) and (Translated[MainIndex] = rsHotkeyCategoryMain) then begin FHotkeysCategories.Delete(MainIndex); Translated.Delete(MainIndex); Diff := 1; // Account for Main category being at the top. end else begin MainIndex := -1; Diff := 0; end; // Assign indexes to FHotkeysCategories (untranslated). for i := 0 to Translated.Count - 1 do Translated.Objects[i] := TObject(i + Diff); Translated.CustomSort(@CompareCategories); if MainIndex >= 0 then begin FHotkeysCategories.InsertObject(0, 'Main', TObject(0)); Translated.InsertObject(0, rsHotkeyCategoryMain, TObject(0)); end; lbxCategories.Items.Assign(Translated); lbxCategories.ItemIndex := 0; end else lbxCategories.Items.Clear; finally Translated.Free; end; end; { TfrmOptionsHotkeys.GetSelectedForm } function TfrmOptionsHotkeys.GetSelectedForm: string; var Index: integer; begin Index := lbxCategories.ItemIndex; if (Index >= 0) and (Index < FHotkeysCategories.Count) then Result := FHotkeysCategories[PtrUInt(lbxCategories.Items.Objects[Index])] else Result := EmptyStr; end; { TfrmOptionsHotkeys.GetIconIndex } class function TfrmOptionsHotkeys.GetIconIndex: integer; begin Result := 5; end; { TfrmOptionsHotkeys.GetSelectedCommand } function TfrmOptionsHotkeys.GetSelectedCommand: string; begin if stgCommands.Row >= stgCommands.FixedRows then Result := stgCommands.Cells[stgCmdCommandIndex, stgCommands.Row] else Result := EmptyStr; end; { TfrmOptionsHotkeys.GetTitle } class function TfrmOptionsHotkeys.GetTitle: string; begin Result := rsOptionsEditorHotKeys; end; { TfrmOptionsHotkeys.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsHotkeys.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsHotkeys.DeleteAllHotkeys } // "ClearAllHotkeys" is a private procedure of "HotMan", so let's clear hotkeys manually by calling the same code procedure TfrmOptionsHotkeys.DeleteAllHotkeys; var iForm, iControl: integer; begin for iForm := 0 to pred(HotMan.Forms.Count) do begin HotMan.Forms[iForm].Hotkeys.Clear; for iControl := 0 to pred(HotMan.Forms[iForm].Controls.Count) do HotMan.Forms[iForm].Controls[iControl].Hotkeys.Clear; end; end; { TfrmOptionsHotkeys.DeleteHotkey } procedure TfrmOptionsHotkeys.DeleteHotkey; var i: integer; sCommand: string; HMForm: THMForm; HMControl: THMControl; hotkey: THotkey; HotkeyItem: PHotkeyItem; RememberSelectionGridRect: TGridRect; bCanSelect: boolean; begin if stgHotkeys.Row >= stgHotkeys.FixedRows then begin RememberSelectionGridRect := stgCommands.Selection; HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, stgHotkeys.Row]); sCommand := GetSelectedCommand; HMForm := HotMan.Forms.Find(GetSelectedForm); if Assigned(HMForm) then begin for i := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[i]; if Assigned(HMControl) then begin hotkey := HMControl.Hotkeys.FindByContents(HotkeyItem^.Hotkey); if Assigned(hotkey) then HMControl.Hotkeys.Remove(hotkey); end; end; hotkey := HMForm.Hotkeys.FindByContents(HotkeyItem^.Hotkey); if Assigned(hotkey) then HMForm.Hotkeys.Remove(hotkey); // refresh lists Self.UpdateHotkeys(HMForm); Self.FillHotkeyList(sCommand); FModified := True; if stgCommands.CanFocus then stgCommands.SetFocus; stgCommands.Row := RememberSelectionGridRect.Top; bCanSelect := True; stgCommandsSelectCell(stgCommands, stgCommands.Selection.Left, stgCommands.Selection.Top, bCanSelect); end; end; end; { TfrmOptionsHotkeys.Init } procedure TfrmOptionsHotkeys.Init; begin FModified := False; ParseLineToList(rsHotkeySortOrder, cbCommandSortOrder.Items); stgCommands.FocusRectVisible := False; stgCommands.SortOrder := soAscending; // Default initial sort ascending stgHotkeys.FocusRectVisible := False; // Localize Hotkeys. // stgCommands is localized in FillCommandList. stgHotkeys.Columns.Items[0].Title.Caption := rsOptHotkeysHotkey; stgHotkeys.Columns.Items[1].Title.Caption := rsOptHotkeysParameters; btnFileAction.Caption := ''; end; { TfrmOptionsHotkeys.Load } procedure TfrmOptionsHotkeys.Load; begin cbCommandSortOrder.ItemIndex := integer(gHotKeySortOrder); FillSCFilesList; FillCategoriesList; lbxCategoriesChange(lbxCategories); end; { TfrmOptionsHotkeys.Save } function TfrmOptionsHotkeys.Save: TOptionsEditorSaveFlags; begin Result := []; // Save hotkeys file name. if lbSCFilesList.ItemIndex >= 0 then gNameSCFile := lbSCFilesList.Items[lbSCFilesList.ItemIndex]; HotMan.Save(gpCfgDir + gNameSCFile); end; { TfrmOptionsHotkeys.SelectHotkey } procedure TfrmOptionsHotkeys.SelectHotkey(Hotkey: THotkey); var HotkeyItem: PHotkeyItem; i: integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, i]); if Assigned(HotkeyItem) and HotkeyItem^.Hotkey.SameAs(Hotkey) then begin stgHotkeys.Row := i; Break; end; end; end; { TfrmOptionsHotkeys.ShowEditHotkeyForm } procedure TfrmOptionsHotkeys.ShowEditHotkeyForm(EditMode: boolean; aHotkeyRow: integer); var HotkeyItem: PHotkeyItem; begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, aHotkeyRow]); if Assigned(HotkeyItem) then ShowEditHotkeyForm(EditMode, GetSelectedForm, HotkeyItem^.Hotkey.Command, HotkeyItem^.Hotkey, HotkeyItem^.Controls); end; { TfrmOptionsHotkeys.ShowEditHotkeyForm } procedure TfrmOptionsHotkeys.ShowEditHotkeyForm(EditMode: boolean; const AForm: string; const ACommand: string; const AHotkey: THotkey; const AControls: TDynamicStringArray); var HMForm: THMForm; Hotkey: THotkey = nil; begin if AForm <> EmptyStr then begin if not Assigned(FEditForm) then FEditForm := TfrmEditHotkey.Create(Self); if FEditForm.Execute(EditMode, AForm, ACommand, AHotkey, AControls) then begin HMForm := HotMan.Forms.FindOrCreate(AForm); // refresh hotkey lists Self.UpdateHotkeys(HMForm); Self.FillHotkeyList(ACommand); Hotkey := FEditForm.CloneNewHotkey; try // Select the new shortcut in the hotkeys table. SelectHotkey(Hotkey); finally Hotkey.Free; end; FModified := True; end; end; end; { TfrmOptionsHotkeys.Create } constructor TfrmOptionsHotkeys.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FHotkeysCategories := TStringList.Create; end; { TfrmOptionsHotkeys.Destroy } destructor TfrmOptionsHotkeys.Destroy; begin inherited Destroy; FHotkeysCategories.Free; end; { TfrmOptionsHotkeys.AddDeleteWithShiftHotkey } procedure TfrmOptionsHotkeys.AddDeleteWithShiftHotkey(UseTrash: boolean); procedure ReverseShift(Hotkey: THotkey; out Shortcut: TShortCut; out TextShortcut: string); var ShiftState: TShiftState; begin Shortcut := TextToShortCutEx(Hotkey.Shortcuts[0]); ShiftState := ShortcutToShiftEx(Shortcut); if ssShift in ShiftState then ShiftState := ShiftState - [ssShift] else ShiftState := ShiftState + [ssShift]; ShortCut := KeyToShortCutEx(Shortcut, ShiftState); TextShortcut := ShortCutToTextEx(Shortcut); end; function ConfirmFix({%H-}Hotkey: THotkey; const Msg: string): boolean; begin Result := QuestionDlg(rsOptHotkeysCannotSetShortcut, Msg, mtConfirmation, [mrYes, rsOptHotkeysFixParameter, 'isdefault', mrCancel], 0) = mrYes; end; function FixOverrides(Hotkey: THotkey; const OldTrashParam: string; NewTrashParam: boolean; ShouldUseTrash: boolean): boolean; begin if Contains(Hotkey.Params, OldTrashParam) or NewTrashParam then begin Result := ConfirmFix(Hotkey, Format(rsOptHotkeysDeleteTrashCanOverrides, [Hotkey.Shortcuts[0]])); if Result then begin DeleteString(Hotkey.Params, OldTrashParam); if ShouldUseTrash then SetValue(Hotkey.Params, 'trashcan', 'setting') else SetValue(Hotkey.Params, 'trashcan', 'reversesetting'); end; end else Result := True; end; procedure FixReversedShortcut(Hotkey: THotkey; NonReversedHotkey: THotkey; const ParamsToDelete: array of string; const AllowedOldParam: string; const NewTrashParam: string; HasTrashCan: boolean; TrashStr: string); var sDelete: string; begin if ContainsOneOf(Hotkey.Params, ParamsToDelete) or (HasTrashCan and (TrashStr <> NewTrashParam)) then if not ConfirmFix(Hotkey, Format(rsOptHotkeysDeleteTrashCanParameterExists, [Hotkey.Shortcuts[0], NonReversedHotkey.Shortcuts[0]])) then Exit; for sDelete in ParamsToDelete do DeleteString(Hotkey.Params, sDelete); if not Contains(Hotkey.Params, AllowedOldParam) then SetValue(Hotkey.Params, 'trashcan', NewTrashParam); end; procedure AddShiftShortcut(Hotkeys: THotkeys); var i, j: integer; Shortcut: TShortCut; TextShortcut: string; NewParams: array of string; HasTrashCan, HasTrashBool, NormalTrashSetting: boolean; TrashStr: string; TrashBoolValue: boolean; CheckedShortcuts: TDynamicStringArray; ReversedHotkey: THotkey; CountBeforeAdded: integer; SetShortcut: boolean; begin SetLength(CheckedShortcuts, 0); CountBeforeAdded := Hotkeys.Count; for i := 0 to CountBeforeAdded - 1 do begin if (Hotkeys[i].Command = 'cm_Delete') and (Length(Hotkeys[i].Shortcuts) > 0) then begin if Length(Hotkeys[i].Shortcuts) > 1 then begin MessageDlg(rsOptHotkeysCannotSetShortcut, Format(rsOptHotkeysShortcutForDeleteIsSequence, [ShortcutsToText(Hotkeys[i].Shortcuts)]), mtWarning, [mbOK], 0); Continue; end; if not Contains(CheckedShortcuts, Hotkeys[i].Shortcuts[0]) then begin ReversedHotkey := nil; SetShortcut := True; ReverseShift(Hotkeys[i], Shortcut, TextShortcut); AddString(CheckedShortcuts, TextShortcut); // Check if shortcut with reversed shift already exists. for j := 0 to CountBeforeAdded - 1 do begin if ArrBegins(Hotkeys[j].Shortcuts, [TextShortcut], False) then begin if Hotkeys[j].Command <> Hotkeys[i].Command then begin if QuestionDlg(rsOptHotkeysCannotSetShortcut, Format(rsOptHotkeysShortcutForDeleteAlreadyAssigned, [Hotkeys[i].Shortcuts[0], TextShortcut, Hotkeys[j].Command]), mtConfirmation, [mrYes, rsOptHotkeysChangeShortcut, 'isdefault', mrCancel], 0) = mrYes then begin Hotkeys[j].Command := Hotkeys[i].Command; end else SetShortcut := False; end; ReversedHotkey := Hotkeys[j]; Break; end; end; if not SetShortcut then Continue; // Fix parameters of original hotkey if needed. HasTrashCan := GetParamValue(Hotkeys[i].Params, 'trashcan', TrashStr); HasTrashBool := HasTrashCan and GetBoolValue(TrashStr, TrashBoolValue); if not FixOverrides(Hotkeys[i], 'recycle', HasTrashBool and TrashBoolValue, UseTrash) then Continue; if not FixOverrides(Hotkeys[i], 'norecycle', HasTrashBool and not TrashBoolValue, not UseTrash) then Continue; // Reverse trash setting for reversed hotkey. NewParams := Copy(Hotkeys[i].Params); HasTrashCan := GetParamValue(NewParams, 'trashcan', TrashStr); // Could have been added above so check again if Contains(NewParams, 'recyclesettingrev') then begin DeleteString(NewParams, 'recyclesettingrev'); NormalTrashSetting := True; end else if Contains(NewParams, 'recyclesetting') then begin DeleteString(NewParams, 'recyclesetting'); NormalTrashSetting := False; end else if HasTrashCan and (TrashStr = 'reversesetting') then NormalTrashSetting := True else NormalTrashSetting := False; if Assigned(ReversedHotkey) then begin HasTrashCan := GetParamValue(ReversedHotkey.Params, 'trashcan', TrashStr); if NormalTrashSetting then begin FixReversedShortcut(ReversedHotkey, Hotkeys[i], ['recyclesettingrev', 'recycle', 'norecycle'], 'recyclesetting', 'setting', HasTrashCan, TrashStr); end else begin FixReversedShortcut(ReversedHotkey, Hotkeys[i], ['recyclesetting', 'recycle', 'norecycle'], 'recyclesettingrev', 'reversesetting', HasTrashCan, TrashStr); end; end else if QuestionDlg(rsOptHotkeysSetDeleteShortcut, Format(rsOptHotkeysAddDeleteShortcutLong, [TextShortcut]), mtConfirmation, [mrYes, rsOptHotkeysAddShortcutButton, 'isdefault', mrCancel], 0) = mrYes then begin if NormalTrashSetting then TrashStr := 'setting' else TrashStr := 'reversesetting'; SetValue(NewParams, 'trashcan', TrashStr); Hotkeys.Add([TextShortcut], NewParams, Hotkeys[i].Command); end; end; end; end; end; var HMForm: THMForm; I: integer; begin HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin AddShiftShortcut(HMForm.Hotkeys); for I := 0 to HMForm.Controls.Count - 1 do AddShiftShortcut(HMForm.Controls[i].Hotkeys); // Refresh hotkeys list. if GetSelectedCommand = 'cm_Delete' then Self.FillHotkeyList('cm_Delete'); end; end; { TfrmOptionsHotkeys.TryToSelectThatCategory } procedure TfrmOptionsHotkeys.TryToSelectThatCategory(sCategory: string); var iCategoryIndex: integer; begin iCategoryIndex := lbxCategories.Items.IndexOf(sCategory); if iCategoryIndex <> -1 then begin lbxCategories.ItemIndex := iCategoryIndex; lbxCategoriesChange(lbxCategories); end; end; { TfrmOptionsHotkeys.cbCommandSortOrderChange } procedure TfrmOptionsHotkeys.cbCommandSortOrderChange(Sender: TObject); begin if THotKeySortOrder(cbCommandSortOrder.ItemIndex) <> gHotKeySortOrder then begin if (THotKeySortOrder(cbCommandSortOrder.ItemIndex) = hksoByHotKeyOnePerRow) or (gHotKeySortOrder = hksoByHotKeyOnePerRow) then FillCommandList(edtFilter.Text) else stgCommands.SortColRow(True, cbCommandSortOrder.ItemIndex); //hksoByCommand=0=column0=command hksoByHotKeyGrouped=1=column1=hotkey end; gHotKeySortOrder := THotKeySortOrder(cbCommandSortOrder.ItemIndex); end; { TfrmOptionsHotkeys.isOkToContinueRegardingModifiedOrNot } function TfrmOptionsHotkeys.isOkToContinueRegardingModifiedOrNot: boolean; var Answer: TMyMsgResult; begin Result := True; if FModified then begin Answer := MsgBox(Format(rsHotKeyFileSaveModified, [gNameSCFile]), [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: HotMan.Save(gpCfgDir + gNameSCFile); mmrCancel: Result := False; end; end; end; { TfrmOptionsHotkeys.GetANewSetupName } function TfrmOptionsHotkeys.GetANewSetupName(var ASetupName: string): boolean; var sSuggestedName: string; Answer: TMyMsgResult = mmrCancel; begin Result := False; repeat sSuggestedName := ASetupName; if InputQuery(rsHotKeyFileNewName, rsHotKeyFileInputNewName, sSuggestedName) then begin Result := not mbFileExists(gpCfgDir + sSuggestedName); if not Result then begin Answer := MsgBox(rsHotKeyFileAlreadyExists, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); Result := (Answer = mmrYes); end; end; until (Result) or (Answer = mmrCancel); if Result then ASetupName := sSuggestedName; end; { GetSortableShortcutName } // Will return a string representing the shortcut. // The string will have a prefix that it will help to sort it in such way that the shortcut will appear in this order, from the first to the last: // -:Fx (with F9 arranged to be shown prior F10) // -:ALT+Fx // -:CTRL+Fx // -:SHIFT+Fx // -:CTRL+SHIFT+Fx // -:Single letter stuff // -:CTRL+Letter // -:SHIFT+Letter // -:CTRL+SHIFT+Letter function GetSortableShortcutName(sToSort: string): string; var posSemiColon, i: integer; sFollowing: string; sAbsolute: string; sShifted: string; posPlus1, posPlus2: integer; icombine: integer = 0; isFxKey: boolean; iPrefix: word; begin if length(sToSort) > 1 then if sToSort[length(sToSort)] = '+' then sToSort[length(sToSort)] := ','; //1o) We get the first shortcut string in case there are many. posSemiColon := pos(';', sToSort); if posSemiColon <> 0 then sToSort := leftstr(sToSort, pred(posSemiColon)); //2o) Make sure we're in uppercase sToSort := UpperCase(sToSort); //3o) Let's arrange things so F9 will be coded F09 so it will easily be sortable prior F10 instead of being after. i := 1; while (i <= length(sToSort)) do begin if pos(sToSort[i], '0123456789') <> 0 then begin sFollowing := copy(sToSort, succ(i), 1); if pos(sFollowing, '0123456789') = 0 then sToSort := copy(sToSort, 1, pred(i)) + '0' + rightstr(sToSort, (length(sToSort) - pred(i))); Inc(i); end; Inc(i); end; //4o) Let's see if we have combined keys (CTRL+..., SHIFT+..., CTRL+SHIFT+....) posPlus1 := pos('+', sToSort); posPlus2 := UTF8Pos('+', sToSort, succ(PosPlus1)); if posPlus1 <> 0 then if posPlus2 = 0 then iCombine := 1 else iCombine := 2; //5o) Let's extract the unshifted absolute keys case iCombine of 0: sAbsolute := sToSort; 1: sAbsolute := copy(sToSort, succ(posPlus1), (length(sToSort) - posPlus1)); 2: sAbsolute := copy(sToSort, succ(posPlus2), (length(sToSort) - posPlus2)); end; case iCombine of 0: sShifted := ''; 1: sShifted := copy(sToSort, 1, pred(posPlus1)); 2: sShifted := copy(sToSort, 1, pred(posPlus2)); end; isFxKey := (pos('F', sAbsolute) = 1) and (length(sAbsolute) > 1); iPrefix := 0; if (not isFxKey) then iPrefix := iPrefix or $100; //Make sure if it's a "Fx" key, it appear FIRST if length(sAbsolute) > 1 then iPrefix := iPrefix or $01; case iCombine of 0: begin end; 1: begin if pos('ALT', sShifted) = 1 then iPrefix := (iPrefix or $02) else if pos('CTRL', sShifted) = 1 then iPrefix := (iPrefix or $04) else if pos('SHIFT', sShifted) = 1 then iPrefix := (iPrefix or $08); end; 2: begin if pos('CTRL+ALT', sShifted) = 1 then iPrefix := (iPrefix or $10) else if pos('CTRL+SHIFT', sShifted) = 1 then iPrefix := (iPrefix or $20) else if pos('SHIFT+ALT', sShifted) = 1 then iPrefix := (iPrefix or $40); end; end; Result := Format('%4.4d%s', [iPrefix, sAbsolute]); end; { TfrmOptionsHotkeys.stgCommandsCompareCells } // Add a word about "iSecondLevelSort" procedure TfrmOptionsHotkeys.stgCommandsCompareCells(Sender: TObject; ACol, ARow, BCol, BRow: integer; var Result: integer); var sText1, sText2: string; iSecondLevelSort: boolean = False; begin if ACol and $80 <> 0 then begin iSecondLevelSort := True; ACol := Acol and $7F; end; sText1 := TStringGrid(Sender).Cells[ACol, ARow]; sText2 := TStringGrid(Sender).Cells[BCol, BRow]; if aCol = stgCmdHotkeysIndex then begin if (sText1 = '') then begin if (sText2 = '') then begin if not iSecondLevelSort then stgCommandsCompareCells(Sender, stgCmdCommandIndex or $80, ARow, stgCmdCommandIndex, BRow, Result) else Result := 0; end else Result := 1; end else begin if (sText2 = '') then begin Result := -1; end else begin sText1 := GetSortableShortcutName(sText1); sText2 := GetSortableShortcutName(sText2); case TStringGrid(Sender).SortOrder of soAscending: Result := CompareText(sText1, sText2); soDescending: Result := CompareText(sText2, sText1); end; end; end; end else begin case TStringGrid(Sender).SortOrder of soAscending: Result := CompareText(sText1, sText2); soDescending: Result := CompareText(sText2, sText1); end; if (Result = 0) and (not iSecondLevelSort) then stgCommandsCompareCells(Sender, stgCmdHotkeysIndex or $80, ARow, stgCmdHotkeysIndex, BRow, Result); end; end; { TfrmOptionsHotkeys.stgCommandsHeaderClick } procedure TfrmOptionsHotkeys.stgCommandsHeaderClick(Sender: TObject; IsColumn: boolean; Index: integer); var iInitialIndex: integer; begin iInitialIndex := cbCommandSortOrder.ItemIndex; if (isColumn) then begin if (Index = stgCmdCommandIndex) and (THotKeySortOrder(cbCommandSortOrder.ItemIndex) <> hksoByCommand) then cbCommandSortOrder.ItemIndex := integer(hksoByCommand) else if (Index = stgCmdHotkeysIndex) then begin if (THotKeySortOrder(cbCommandSortOrder.ItemIndex) = hksoByCommand) then cbCommandSortOrder.ItemIndex := integer(hksoByHotKeyGrouped) else cbCommandSortOrder.ItemIndex := 3 - cbCommandSortOrder.ItemIndex; end; end; if iInitialIndex <> cbCommandSortOrder.ItemIndex then cbCommandSortOrderChange(cbCommandSortOrder); end; { TfrmOptionsHotkeys.actSaveNowExecute } procedure TfrmOptionsHotkeys.actSaveNowExecute(Sender: TObject); begin HotMan.Save(gpCfgDir + gNameSCFile); FModified := False; end; { TfrmOptionsHotkeys.actAdjustSortOrderExecute } procedure TfrmOptionsHotkeys.actAdjustSortOrderExecute(Sender: TObject); begin cbCommandSortOrder.ItemIndex := TComponent(Sender).Tag; cbCommandSortOrderChange(cbCommandSortOrder); end; { RemoveSCFextension } function RemoveSCFextension(sBaseName: string): string; begin Result := StringReplace(sBaseName, '.scf', '', [rfIgnoreCase, rfReplaceAll]); end; { TfrmOptionsHotkeys.actRenameExecute } procedure TfrmOptionsHotkeys.actRenameExecute(Sender: TObject); begin actCopyExecute(Sender); end; { TfrmOptionsHotkeys.actCopyExecute } procedure TfrmOptionsHotkeys.actCopyExecute(Sender: TObject); var sSetupName, sOldFilename: string; begin if isOkToContinueRegardingModifiedOrNot then begin sSetupName := RemoveSCFextension(Format(rsHotKeyFileCopyOf, [gNameSCFile])); if GetANewSetupName(sSetupName) then begin sOldFilename := gNameSCFile; gNameSCFile := RemoveSCFextension(sSetupName) + '.scf'; HotMan.Save(gpCfgDir + gNameSCFile); if TAction(Sender).Tag = 1 then mbDeletefile(gpCfgDir + sOldFilename); FillSCFilesList; FillCategoriesList; lbxCategoriesChange(lbxCategories); end; end; end; { TfrmOptionsHotkeys.actDeleteExecute } procedure TfrmOptionsHotkeys.actDeleteExecute(Sender: TObject); begin if lbSCFilesList.Items.Count > 1 then begin if MsgBox(Format(rsHotKeyFileConfirmErasure, [RemoveSCFextension(lbSCFilesList.Text)]), [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then begin if mbFileExists(gpCfgDir + lbSCFilesList.Items[lbSCFilesList.ItemIndex]) then mbDeleteFile(gpCfgDir + lbSCFilesList.Items[lbSCFilesList.ItemIndex]); FillSCFilesList; FillCategoriesList; lbxCategoriesChange(lbxCategories); end; end else begin MsgError(rsHotKeyFileMustKeepOne); end; end; { TfrmOptionsHotkeys.actRestoreDefaultExecute } procedure TfrmOptionsHotkeys.actRestoreDefaultExecute(Sender: TObject); begin if isOkToContinueRegardingModifiedOrNot then begin if MsgBox(rsHotKeyFileConfirmDefault, [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then begin DeleteAllHotkeys; LoadDefaultHotkeyBindings; HotMan.Save(gpCfgDir + gNameSCFile); HotMan.Load(gpCfgDir + gNameSCFile); FillCategoriesList; lbxCategoriesChange(lbxCategories); end; end; end; { TfrmOptionsHotkeys.actDeleteHotKeyExecute } procedure TfrmOptionsHotkeys.actDeleteHotKeyExecute(Sender: TObject); begin DeleteHotkey; end; { TfrmOptionsHotkeys.actEditHotKeyExecute } procedure TfrmOptionsHotkeys.actEditHotKeyExecute(Sender: TObject); begin ShowEditHotkeyForm(True, stgHotkeys.Row); end; { TfrmOptionsHotkeys.actNextCategoryExecute } procedure TfrmOptionsHotkeys.actNextCategoryExecute(Sender: TObject); begin if lbxCategories.ItemIndex < pred(lbxCategories.Items.Count) then lbxCategories.ItemIndex := lbxCategories.ItemIndex + 1 else lbxCategories.ItemIndex := 0; lbxCategoriesChange(lbxCategories); end; { TfrmOptionsHotkeys.actPopupFileRelatedMenuExecute } procedure TfrmOptionsHotkeys.actPopupFileRelatedMenuExecute(Sender: TObject); var TargetPopUpMenuPos: TPoint; begin TargetPopUpMenuPos := Self.ClientToScreen(Classes.Point(btnFileAction.Left + (btnFileAction.Width div 2), btnFileAction.Height + (btnFileAction.Height div 2))); pmShortCutMenu.PopUp(TargetPopUpMenuPos.x, TargetPopUpMenuPos.y); end; { TfrmOptionsHotkeys.actPreviousCategoryExecute } procedure TfrmOptionsHotkeys.actPreviousCategoryExecute(Sender: TObject); begin if lbxCategories.ItemIndex > 0 then lbxCategories.ItemIndex := lbxCategories.ItemIndex - 1 else lbxCategories.ItemIndex := pred(lbxCategories.Items.Count); lbxCategoriesChange(lbxCategories); end; end. doublecmd-1.1.30/src/frames/foptionshotkeys.lrj0000644000175000001440000001063115104114162020613 0ustar alexxusers{"version":1,"strings":[ {"hash":171210458,"name":"tfrmoptionshotkeys.lblcategories.caption","sourcebytes":[67,38,97,116,101,103,111,114,105,101,115,58],"value":"C&ategories:"}, {"hash":181418722,"name":"tfrmoptionshotkeys.lbfilter.caption","sourcebytes":[38,70,105,108,116,101,114],"value":"&Filter"}, {"hash":174340100,"name":"tfrmoptionshotkeys.stgcommands.columns[0].title.caption","sourcebytes":[67,111,109,109,97,110,100],"value":"Command"}, {"hash":258678083,"name":"tfrmoptionshotkeys.stgcommands.columns[1].title.caption","sourcebytes":[72,111,116,107,101,121,115],"value":"Hotkeys"}, {"hash":156067838,"name":"tfrmoptionshotkeys.stgcommands.columns[2].title.caption","sourcebytes":[68,101,115,99,114,105,112,116,105,111,110],"value":"Description"}, {"hash":83276233,"name":"tfrmoptionshotkeys.stghotkeys.columns[0].title.caption","sourcebytes":[72,111,116,107,101,121],"value":"Hotkey"}, {"hash":138003475,"name":"tfrmoptionshotkeys.stghotkeys.columns[1].title.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,115],"value":"Parameters"}, {"hash":106664595,"name":"tfrmoptionshotkeys.stghotkeys.columns[2].title.caption","sourcebytes":[67,111,110,116,114,111,108,115],"value":"Controls"}, {"hash":5782010,"name":"tfrmoptionshotkeys.lblscfiles.caption","sourcebytes":[38,83,104,111,114,116,99,117,116,32,102,105,108,101,115,58],"value":"&Shortcut files:"}, {"hash":80311610,"name":"tfrmoptionshotkeys.lblsortorder.caption","sourcebytes":[83,111,38,114,116,32,111,114,100,101,114,58],"value":"So&rt order:"}, {"hash":70576826,"name":"tfrmoptionshotkeys.lblcommands.caption","sourcebytes":[67,111,38,109,109,97,110,100,115,58],"value":"Co&mmands:"}, {"hash":147288823,"name":"tfrmoptionshotkeys.actsavenow.caption","sourcebytes":[83,97,118,101,32,110,111,119],"value":"Save now"}, {"hash":93079605,"name":"tfrmoptionshotkeys.actrename.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":304761,"name":"tfrmoptionshotkeys.actcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":78392485,"name":"tfrmoptionshotkeys.actdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":121939508,"name":"tfrmoptionshotkeys.actrestoredefault.caption","sourcebytes":[82,101,115,116,111,114,101,32,68,67,32,100,101,102,97,117,108,116],"value":"Restore DC default"}, {"hash":212932585,"name":"tfrmoptionshotkeys.actaddhotkey.caption","sourcebytes":[65,100,100,32,38,104,111,116,107,101,121],"value":"Add &hotkey"}, {"hash":73212329,"name":"tfrmoptionshotkeys.actedithotkey.caption","sourcebytes":[38,69,100,105,116,32,104,111,116,107,101,121],"value":"&Edit hotkey"}, {"hash":204765465,"name":"tfrmoptionshotkeys.actdeletehotkey.caption","sourcebytes":[38,68,101,108,101,116,101,32,104,111,116,107,101,121],"value":"&Delete hotkey"}, {"hash":143662297,"name":"tfrmoptionshotkeys.actpreviouscategory.caption","sourcebytes":[80,114,101,118,105,111,117,115,32,99,97,116,101,103,111,114,121],"value":"Previous category"}, {"hash":207929433,"name":"tfrmoptionshotkeys.actnextcategory.caption","sourcebytes":[78,101,120,116,32,99,97,116,101,103,111,114,121],"value":"Next category"}, {"hash":74656069,"name":"tfrmoptionshotkeys.actsortbycommand.caption","sourcebytes":[83,111,114,116,32,98,121,32,99,111,109,109,97,110,100,32,110,97,109,101],"value":"Sort by command name"}, {"hash":123816025,"name":"tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption","sourcebytes":[83,111,114,116,32,98,121,32,104,111,116,107,101,121,115,32,40,103,114,111,117,112,101,100,41],"value":"Sort by hotkeys (grouped)"}, {"hash":148770009,"name":"tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption","sourcebytes":[83,111,114,116,32,98,121,32,104,111,116,107,101,121,115,32,40,111,110,101,32,112,101,114,32,114,111,119,41],"value":"Sort by hotkeys (one per row)"}, {"hash":72687669,"name":"tfrmoptionshotkeys.actpopupfilerelatedmenu.caption","sourcebytes":[77,97,107,101,32,112,111,112,117,112,32,116,104,101,32,102,105,108,101,32,114,101,108,97,116,101,100,32,109,101,110,117],"value":"Make popup the file related menu"}, {"hash":199366499,"name":"tfrmoptionshotkeys.micategories.caption","sourcebytes":[67,97,116,101,103,111,114,105,101,115],"value":"Categories"}, {"hash":108211282,"name":"tfrmoptionshotkeys.misortorder.caption","sourcebytes":[83,111,114,116,32,111,114,100,101,114],"value":"Sort order"}, {"hash":174340100,"name":"tfrmoptionshotkeys.micommands.caption","sourcebytes":[67,111,109,109,97,110,100],"value":"Command"} ]} doublecmd-1.1.30/src/frames/foptionshotkeys.lfm0000644000175000001440000003331515104114162020606 0ustar alexxusersinherited frmOptionsHotkeys: TfrmOptionsHotkeys Height = 513 Width = 808 HelpKeyword = '/configuration.html#ConfigHotKeys' ClientHeight = 513 ClientWidth = 808 ParentShowHint = False PopupMenu = pmShortcutMenu ShowHint = True DesignLeft = 451 DesignTop = 209 object lblCategories: TLabel[0] AnchorSideLeft.Control = lbxCategories AnchorSideTop.Control = Owner Left = 299 Height = 15 Top = 6 Width = 59 BorderSpacing.Top = 6 Caption = 'C&ategories:' FocusControl = lbxCategories ParentColor = False end object lbFilter: TLabel[1] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = lbxCategories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtFilter Left = 6 Height = 15 Top = 50 Width = 26 BorderSpacing.Top = 6 Caption = '&Filter' FocusControl = edtFilter ParentColor = False end object lbxCategories: TComboBox[2] AnchorSideLeft.Control = btnFileAction AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCategories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 299 Height = 23 Top = 21 Width = 503 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 1 OnChange = lbxCategoriesChange end object edtFilter: TEdit[3] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = lbFilter AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFileAction AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 65 Width = 283 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 4 TabOrder = 2 OnChange = edtFilterChange end object stgCommands: TStringGrid[4] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = lblCommands AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 261 Top = 107 Width = 796 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True BorderSpacing.Right = 6 ColCount = 3 Columns = < item SizePriority = 0 Title.Caption = 'Command' Width = 265 end item SizePriority = 0 Title.Caption = 'Hotkeys' Width = 264 end item Title.Caption = 'Description' Width = 263 end> Constraints.MinHeight = 200 Constraints.MinWidth = 200 ExtendedSelect = False FixedCols = 0 MouseWheelOption = mwGrid Options = [goVertLine, goColSizing, goColMoving, goRowSelect, goThumbTracking, goDblClickAutoSize, goSmoothScroll] RowCount = 1 TabOrder = 4 TitleStyle = tsNative OnCompareCells = stgCommandsCompareCells OnDblClick = stgCommandsDblClick OnHeaderClick = stgCommandsHeaderClick OnPrepareCanvas = stgCommandsPrepareCanvas OnResize = stgCommandsResize OnSelectCell = stgCommandsSelectCell ColWidths = ( 265 264 263 ) end object stgHotkeys: TStringGrid[5] AnchorSideLeft.Control = stgCommands AnchorSideTop.Control = stgCommands AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlHotkeyButtons AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 137 Top = 372 Width = 682 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 4 BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 ColCount = 3 Columns = < item Title.Caption = 'Hotkey' Width = 119 end item Title.Caption = 'Parameters' Width = 119 end item Title.Caption = 'Controls' Width = 120 end> Constraints.MinHeight = 100 Constraints.MinWidth = 100 FixedCols = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goColSizing, goColMoving, goRowSelect, goThumbTracking, goDblClickAutoSize, goSmoothScroll] RowCount = 3 ScrollBars = ssAutoVertical TabOrder = 5 TitleStyle = tsNative OnDblClick = stgHotkeysDblClick OnKeyDown = stgHotkeysKeyDown OnResize = stgHotkeysResize OnSelectCell = stgHotkeysSelectCell ColWidths = ( 119 119 120 ) end object pnlHotkeyButtons: TPanel[6] AnchorSideTop.Control = stgHotkeys AnchorSideRight.Control = stgCommands AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = stgHotkeys AnchorSideBottom.Side = asrBottom Left = 696 Height = 137 Top = 372 Width = 106 Anchors = [akTop, akRight, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 137 ClientWidth = 106 TabOrder = 6 object btnAddHotKey: TButton AnchorSideRight.Side = asrBottom Left = 0 Height = 42 Top = 0 Width = 106 Action = actAddHotKey AutoSize = True BorderSpacing.InnerBorder = 4 TabOrder = 0 end object btnEditHotkey: TButton Left = 0 Height = 42 Top = 48 Width = 106 Action = actEditHotKey AutoSize = True BorderSpacing.InnerBorder = 4 TabOrder = 1 end object btnDeleteHotKey: TButton AnchorSideRight.Side = asrBottom Left = 0 Height = 41 Top = 96 Width = 106 Action = actDeleteHotKey AutoSize = True BorderSpacing.InnerBorder = 4 TabOrder = 2 end end object lbSCFilesList: TComboBox[7] AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSCFiles AnchorSideTop.Side = asrBottom Left = 6 Height = 23 Top = 21 Width = 258 BorderSpacing.Left = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 0 OnChange = lbSCFilesListChange end object lblSCFiles: TLabel[8] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = Owner Left = 6 Height = 15 Top = 6 Width = 72 BorderSpacing.Top = 6 Caption = '&Shortcut files:' FocusControl = lbSCFilesList ParentColor = False end object btnFileAction: TSpeedButton[9] AnchorSideLeft.Control = lbSCFilesList AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbSCFilesList AnchorSideTop.Side = asrCenter AnchorSideBottom.Control = lbSCFilesList AnchorSideBottom.Side = asrBottom Left = 266 Height = 23 Top = 21 Width = 23 Action = actPopupFileRelatedMenu BorderSpacing.Left = 2 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000300000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000330000003300000033000000239E9688F29E96 88FF9D9587FF9D9587FF9D9487FF9D9486FF9D9486FF9D9486FF9D9486FF9D94 86FF9D9486FF9D9487FF9D9587FF9D9587FF9E9688FF938B7FC09E9688FFCAC5 C2FFC7C2BEFFC7C2BEFFC6C1BDFFC5C0BCFFC5C0BBFFC5C0BBFFC5C0BBFFC5C0 BBFFC5C0BCFFC6C1BDFFC7C2BEFFC7C2BEFFCAC5C2FF9E9688FF9D9487FFC9C6 C1FFF6F8FAFFAFA89DFFF5F6F9FFF3F4F6FFF3F4F6FFF3F4F6FFF3F4F6FFF3F4 F6FFF3F4F6FFF5F6F8FFAFA89DFFF6F8FAFFC9C6C1FF9D9487FF9D9487FFCDCA C4FFAAA497FFACA598FFACA599FFAAA497FFABA498FFAAA497FFABA498FFAAA4 97FFABA498FFAAA497FFAAA397FFAAA396FFCDC9C4FF9D9487FF9C9486FFCFCD C6FFF5F6F9FFF7F8FAFFA9A296FFF8FAFDFFA9A396FFF8FAFDFFA9A396FFF8FA FDFFA9A296FFF6F7FAFFF3F4F6FFF2F3F5FFCECBC4FF9C9486FF9C9486FFD3D2 CBFFA49C8EFFA69E91FFA7A092FFA7A092FFA7A092FFA7A092FFA7A092FFA7A0 92FFA7A092FFA59E90FFA2998BFFF1F2F4FFD1D0C8FF9C9386FF9C9386FFD6D5 CDFFF6F7FAFFA1998CFFF8FAFDFFA29A8DFFF8FAFDFFA29A8DFFF8FAFDFFA29A 8DFFF8FAFDFFA1998CFFF5F6F9FFDDD9D7FFD5D4CBFF9C9386FF9C9386FFDADA D1FFB6B0A4FFB8B1A6FFB8B1A5FFB8B2A6FFB8B1A5FFB8B2A6FFB8B1A5FFB8B2 A6FFB8B1A5FFB8B1A6FFB6B0A4FFB6AFA3FFDADAD1FF9C9386FF9D9487FFDFE1 D7FFDDDED4FFDDDED4FFDDDED5FFDDDED5FFDDDED5FFDDDED5FFDDDED5FFDDDE D5FFDDDED5FFDDDED5FFDDDED4FFDDDED4FFDFE1D7FF9D9487FF9F978AB09D95 87FF9C9386FF9C9386FF9C9386FF9C9386FF9C9386FF9C9386FF9C9386FF9C93 86FF9C9386FF9C9386FF9C9386FF9C9386FF9D9587FF9F978AB0A1998C00A098 8B00A0988B00A0988BFF0000003300000024A0988B00A0988B00A0988B00A098 8B00A0988B00A0988B00A0988B00A0988B00A0988B00A1998C00A1998C00A199 8C00A1998C00A1998CB5A1998CFF948D81C4A1998C00A1998C00A1998C00A199 8C00A1998C00A1998C00A1998C00A1998C00A1998C00A1998C00A1998C00A199 8C00A1998C00A1998C00A1998C00A1998CFFA1998C00A1998C00A1998C00A199 8C00A1998C00A1998C00A1998C00A1998C00A1998C00A1998C00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object lblSortOrder: TLabel[10] AnchorSideLeft.Control = lbxCategories AnchorSideTop.Control = lbxCategories AnchorSideTop.Side = asrBottom Left = 299 Height = 15 Top = 50 Width = 55 BorderSpacing.Top = 6 Caption = 'So&rt order:' FocusControl = cbCommandSortOrder ParentColor = False end object cbCommandSortOrder: TComboBox[11] AnchorSideLeft.Control = lbxCategories AnchorSideTop.Control = lblSortOrder AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbxCategories AnchorSideRight.Side = asrBottom Left = 299 Height = 23 Top = 65 Width = 503 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 Style = csDropDownList TabOrder = 3 OnChange = cbCommandSortOrderChange end object lblCommands: TLabel[12] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = edtFilter AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 92 Width = 65 Caption = 'Co&mmands:' FocusControl = stgCommands ParentColor = False end object alMainActionList: TActionList[13] Left = 680 Top = 240 object actSaveNow: TAction Caption = 'Save now' OnExecute = actSaveNowExecute ShortCut = 16467 end object actRename: TAction Tag = 1 Caption = 'Rename' OnExecute = actRenameExecute ShortCut = 8309 end object actCopy: TAction Caption = 'Copy' OnExecute = actCopyExecute ShortCut = 116 end object actDelete: TAction Caption = 'Delete' OnExecute = actDeleteExecute ShortCut = 119 end object actRestoreDefault: TAction Caption = 'Restore DC default' OnExecute = actRestoreDefaultExecute ShortCut = 24658 end object actAddHotKey: TAction Caption = 'Add &hotkey' OnExecute = actAddHotKeyExecute ShortCut = 118 end object actEditHotKey: TAction Caption = '&Edit hotkey' OnExecute = actEditHotKeyExecute ShortCut = 115 end object actDeleteHotKey: TAction Caption = '&Delete hotkey' OnExecute = actDeleteHotKeyExecute ShortCut = 46 end object actPreviousCategory: TAction Caption = 'Previous category' ShortCut = 16493 OnExecute = actPreviousCategoryExecute end object actNextCategory: TAction Caption = 'Next category' ShortCut = 16491 OnExecute = actNextCategoryExecute end object actSortByCommand: TAction Caption = 'Sort by command name' OnExecute = actAdjustSortOrderExecute ShortCut = 16498 end object actSortByHotKeysGrouped: TAction Tag = 1 Caption = 'Sort by hotkeys (grouped)' OnExecute = actAdjustSortOrderExecute ShortCut = 16499 end object actSortByHotKeysOnePerLine: TAction Tag = 2 Caption = 'Sort by hotkeys (one per row)' OnExecute = actAdjustSortOrderExecute ShortCut = 16500 end object actPopupFileRelatedMenu: TAction Caption = 'Make popup the file related menu' OnExecute = actPopupFileRelatedMenuExecute ShortCut = 120 end end object pmShortcutMenu: TPopupMenu[14] Left = 328 Top = 216 object miSaveNow: TMenuItem Action = actSaveNow end object miRename: TMenuItem Action = actRename end object miCopy: TMenuItem Action = actCopy end object miDelete: TMenuItem Action = actDelete end object miRestoreDefault: TMenuItem Action = actRestoreDefault end object miSeparator1: TMenuItem Caption = '-' end object miCategories: TMenuItem Caption = 'Categories' object miPreviousCategory: TMenuItem Action = actPreviousCategory end object miNextCategory: TMenuItem Action = actNextCategory end end object miSortOrder: TMenuItem Caption = 'Sort order' object miSortByCommand: TMenuItem Action = actSortByCommand end object miSortByHotKeysGrouped: TMenuItem Action = actSortByHotKeysGrouped end object miSortByHotKeysOnePerLine: TMenuItem Action = actSortByHotKeysOnePerLine end end object miCommands: TMenuItem Caption = 'Command' object miAddHotKey: TMenuItem Action = actAddHotKey end object miEditHotKey: TMenuItem Action = actEditHotKey end object miDeleteHotKey: TMenuItem Action = actDeleteHotKey end end end end doublecmd-1.1.30/src/frames/foptionsgroups.pas0000644000175000001440000000317315104114162020443 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options groups Copyright (C) 2006-2023 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsGroups; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, fOptionsFrame; type { TOptionsGroup } TOptionsGroup = class(TOptionsEditor) public class function IsEmpty: Boolean; override; end; { TOptionsToolsGroup } TOptionsToolsGroup = class(TOptionsGroup) public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation uses uLng; { TOptionsGroup } class function TOptionsGroup.IsEmpty: Boolean; begin Result := True; end; { TOptionsToolsGroup } class function TOptionsToolsGroup.GetIconIndex: Integer; begin Result := 2; end; class function TOptionsToolsGroup.GetTitle: String; begin Result := rsOptionsEditorTools; end; end. doublecmd-1.1.30/src/frames/foptionsframe.pas0000644000175000001440000003130115104114162020210 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Options frame page Copyright (C) 2006-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFrame; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, fgl; type TOptionsEditorInitFlag = (oeifLoad); TOptionsEditorInitFlags = set of TOptionsEditorInitFlag; TOptionsEditorSaveFlag = (oesfNeedsRestart); TOptionsEditorSaveFlags = set of TOptionsEditorSaveFlag; TOptionsEditor = class; TOptionsEditorClass = class of TOptionsEditor; TOptionsEditorClassList = class; { IOptionsDialog } {$interfaces corba} IOptionsDialog = interface ['{E62AAF5E-74ED-49AB-93F2-DBE210BF6723}'] procedure LoadSettings; function GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; end; {$interfaces default} { TOptionsEditor } // Regarding warning to user when attempting to exit configuration window or "option editor" without having saved a modified setting: // 1o) Immediately after having load the options in "LoadSettings", we will compute a signature, // which is a CRC32 of the related settings and memorize it. // 2o) When will attempt to close options, we'll recalculate again this signature, if it is different, // we know user has change something and will prompt user to validate if he wants to save, discard or cancel quit. // 3o) For many option editors, signature may be computed simply by validating actual controls of the window like // checkboxes state, edit box, etc. // 4o) For others, we need to run specific computation like signature of list like hot directories list, favorites tabs list, etc. // 5o) For some computing the signature with controls should not be done. // 6o) Here is a list of function and procedure around that: // 7o) "IsSignatureComputedFromAllWindowComponents": Function that may be overloaded by specific option editor to indicate // if we may compute signature of controls of the editor or not. // By default, it is the case. // 8o) "ExtraOptionsSignature": Function that may overloaded by specifica option editor when signature must include extra element not present in controls of the editor like a list of structures, etc. // By default, nothing more is required. // 9o) "ComputeCompleteOptionsSignature": Will first compute signature based on controls >IF< "IsSignatureComputedFromAllWindowComponents" is not invalidated by specific option editor // Then will make progress that signature >IF< "ExtraOptionsSignature" has been overload by specific option editor. TOptionsEditor = class(TFrame) private FOptionsDialog: IOptionsDialog; FLastLoadedOptionSignature: dword; protected procedure Init; virtual; procedure Done; virtual; procedure Load; virtual; function Save: TOptionsEditorSaveFlags; virtual; property OptionsDialog: IOptionsDialog read FOptionsDialog; public property LastLoadedOptionSignature:dword read FLastLoadedOptionSignature write FLastLoadedOptionSignature; // Let it public so Options Forms will be able to know what was initial signature. destructor Destroy; override; class function GetIconIndex: Integer; virtual; abstract; class function GetTitle: String; virtual; abstract; class function IsEmpty: Boolean; virtual; function IsSignatureComputedFromAllWindowComponents: Boolean; virtual; function ComputeCompleteOptionsSignature: dword; function ExtraOptionsSignature(CurrentSignature:dword):dword; virtual; function CanWeClose(var SaveFlags:TOptionsEditorSaveFlags; bForceClose:boolean=false):boolean; virtual; procedure LoadSettings; function SaveSettings: TOptionsEditorSaveFlags; procedure Init(AParent: TWinControl; AOptionsDialog: IOptionsDialog; Flags: TOptionsEditorInitFlags); end; { TOptionsEditorRec } TOptionsEditorRec = class private FChildren: TOptionsEditorClassList; FEditorClass: TOptionsEditorClass; function GetChildren: TOptionsEditorClassList; public constructor Create; destructor Destroy; override; function Add(Editor: TOptionsEditorClass): TOptionsEditorRec; function HasChildren: Boolean; property Children: TOptionsEditorClassList read GetChildren; property EditorClass: TOptionsEditorClass read FEditorClass write FEditorClass; end; { TBaseOptionsEditorClassList } TBaseOptionsEditorClassList = specialize TFPGObjectList; { TOptionsEditorClassList } TOptionsEditorClassList = class(TBaseOptionsEditorClassList) public function Add(Editor: TOptionsEditorClass): TOptionsEditorRec; overload; end; var OptionsEditorClassList: TOptionsEditorClassList = nil; implementation uses uLng, uComponentsSignature, uShowMsg, fOptions, fOptionsArchivers, fOptionsAutoRefresh, fOptionsBehavior, fOptionsBriefView, fOptionsColumnsView, fOptionsConfiguration, fOptionsCustomColumns, fOptionsDragDrop, fOptionsDrivesListButton, fOptionsTreeViewMenu, fOptionsTreeViewMenuColor, fOptionsFileOperations, fOptionsFileSearch, fOptionsMultiRename, fOptionsFilePanelsColors, fOptionsFileTypesColors, fOptionsFilesViews, fOptionsFilesViewsComplement, fOptionsFonts, fOptionsGroups, fOptionsHotkeys, fOptionsIcons, fOptionsIgnoreList, fOptionsKeyboard, fOptionsLanguage, fOptionsLayout, fOptionsLog, fOptionsMisc, fOptionsMouse, fOptionsPluginsGroup, fOptionsPluginsDSX, fOptionsPluginsWCX, fOptionsPluginsWDX, fOptionsPluginsWFX, fOptionsPluginsWLX, fOptionsQuickSearchFilter, fOptionsTabs, fOptionsFavoriteTabs, fOptionsTabsExtra, fOptionsTerminal, fOptionsToolbar, fOptionsToolbarExtra, fOptionsToolbarMiddle, fOptionsTools, fOptionsToolsEditor, fOptionsToolsDiffer, fOptionsEditorColors, fOptionsToolTips, fOptionsFileAssoc, fOptionsFileAssocExtra, fOptionsDirectoryHotlist, fOptionsDirectoryHotlistExtra, fOptionsColors ; { TOptionsEditorRec } function TOptionsEditorRec.GetChildren: TOptionsEditorClassList; begin if not Assigned(FChildren) then FChildren := TOptionsEditorClassList.Create; Result := FChildren; end; constructor TOptionsEditorRec.Create; begin FChildren := nil; end; destructor TOptionsEditorRec.Destroy; begin inherited Destroy; FreeAndNil(FChildren); end; function TOptionsEditorRec.Add(Editor: TOptionsEditorClass): TOptionsEditorRec; begin Result := Children.Add(Editor); end; function TOptionsEditorRec.HasChildren: Boolean; begin Result := Assigned(FChildren) and (FChildren.Count > 0); end; { TOptionsEditorClassList } function TOptionsEditorClassList.Add(Editor: TOptionsEditorClass): TOptionsEditorRec; begin Result := TOptionsEditorRec.Create; Add(Result); Result.EditorClass:= Editor; end; { TOptionsEditor } procedure TOptionsEditor.Init; begin // Empty. end; { TOptionsEditor.ExtraOptionsSignature } function TOptionsEditor.ExtraOptionsSignature(CurrentSignature:dword):dword; begin result := CurrentSignature; end; { TOptionsEditor.ComputeCompleteOptionsSignature } function TOptionsEditor.ComputeCompleteOptionsSignature:dword; begin result := $000000; if IsSignatureComputedFromAllWindowComponents then result := ComputeSignatureBasedOnComponent(Self, result); result := ExtraOptionsSignature(result); end; { TOptionsEditor.CanWeClose } function TOptionsEditor.CanWeClose(var SaveFlags:TOptionsEditorSaveFlags; bForceClose:boolean=false):boolean; var Answer: TMyMsgResult; begin SaveFlags:=[]; if bForceClose then result:=True else result := (FLastLoadedOptionSignature = ComputeCompleteOptionsSignature); if (not result) OR bForceClose then begin if bForceClose then begin Answer:=mmrYes; end else begin ShowOptions(Self.ClassName); Answer := MsgBox(Format(rsOptionsEditorOptionsChanged, [GetTitle]), [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); end; case Answer of mmrYes: begin SaveFlags := SaveSettings; result := True; end; mmrNo: result := True; else result := False; end; end; end; procedure TOptionsEditor.Done; begin // Empty. end; destructor TOptionsEditor.Destroy; begin Done; inherited Destroy; end; class function TOptionsEditor.IsEmpty: Boolean; begin Result := False; end; { TOptionsEditor.IsSignatureComputedFromAllWindowComponents } function TOptionsEditor.IsSignatureComputedFromAllWindowComponents: Boolean; begin Result := True; end; procedure TOptionsEditor.LoadSettings; begin DisableAutoSizing; try Load; FLastLoadedOptionSignature := ComputeCompleteOptionsSignature; finally EnableAutoSizing; end; end; function TOptionsEditor.SaveSettings: TOptionsEditorSaveFlags; begin Result := Save; FLastLoadedOptionSignature := ComputeCompleteOptionsSignature; end; procedure TOptionsEditor.Load; begin // Empty. end; function TOptionsEditor.Save: TOptionsEditorSaveFlags; begin Result := []; end; procedure TOptionsEditor.Init(AParent: TWinControl; AOptionsDialog: IOptionsDialog; Flags: TOptionsEditorInitFlags); begin DisableAutoSizing; try Parent := AParent; FOptionsDialog := AOptionsDialog; Init; if oeifLoad in Flags then LoadSettings; finally EnableAutoSizing; end; end; procedure MakeEditorsClassList; var Main: TOptionsEditorClassList absolute OptionsEditorClassList; Colors, ColumnsView, FilesViews, Keyboard, Layout, Mouse, Tools, Editor, FileAssoc, ToolbarConfig, FileOperation, FolderTabs, Plugins, DirectoryHotlistConfig: TOptionsEditorRec; begin Main.Add(TfrmOptionsLanguage); Main.Add(TfrmOptionsBehavior); Tools := Main.Add(TOptionsToolsGroup); Tools.Add(TfrmOptionsViewer); Editor:= Tools.Add(TfrmOptionsEditor); Editor.Add(TfrmOptionsEditorColors); Tools.Add(TfrmOptionsDiffer); Tools.Add(TfrmOptionsTerminal); Main.Add(TfrmOptionsFonts); Colors := Main.Add(TfrmOptionsColors); Colors.Add(TfrmOptionsFilePanelsColors); Colors.Add(TfrmOptionsFileTypesColors); Keyboard := Main.Add(TfrmOptionsKeyboard); Keyboard.Add(TfrmOptionsHotkeys); Mouse := Main.Add(TfrmOptionsMouse); Mouse.Add(TfrmOptionsDragDrop); FilesViews := Main.Add(TfrmOptionsFilesViews); FilesViews.Add(TfrmOptionsFilesViewsComplement); FilesViews.Add(TfrmOptionsBriefView); ColumnsView := FilesViews.Add(TfrmOptionsColumnsView); ColumnsView.Add(TfrmOptionsCustomColumns); Plugins := Main.Add(TfrmOptionsPluginsGroup); Plugins.Add(TfrmOptionsPluginsDSX); Plugins.Add(TfrmOptionsPluginsWCX); Plugins.Add(TfrmOptionsPluginsWDX); Plugins.Add(TfrmOptionsPluginsWFX); Plugins.Add(TfrmOptionsPluginsWLX); Layout := Main.Add(TfrmOptionsLayout); Layout.Add(TfrmOptionsDrivesListButton); Layout.Add(TfrmOptionsTreeViewMenu); Layout.Add(TfrmOptionsTreeViewMenuColor); ToolbarConfig := Main.Add(TfrmOptionsToolbar); ToolbarConfig.Add(TfrmOptionsToolbarMiddle); ToolbarConfig.Add(TfrmOptionsToolbarExtra); FileOperation := Main.Add(TfrmOptionsFileOperations); FileOperation.Add(TfrmOptionsFileSearch); FileOperation.Add(TfrmOptionsMultiRename); FolderTabs := Main.Add(TfrmOptionsTabs); FolderTabs.Add(TfrmOptionsFavoriteTabs); FolderTabs.Add(TfrmOptionsTabsExtra); Main.Add(TfrmOptionsLog); Main.Add(TfrmOptionsConfiguration); Main.Add(TfrmOptionsQuickSearchFilter); Main.Add(TfrmOptionsMisc); Main.Add(TfrmOptionsAutoRefresh); Main.Add(TfrmOptionsIcons); Main.Add(TfrmOptionsIgnoreList); Main.Add(TfrmOptionsArchivers); Main.Add(TfrmOptionsToolTips); FileAssoc := Main.Add(TfrmOptionsFileAssoc); FileAssoc.Add(TfrmOptionsFileAssocExtra); DirectoryHotlistConfig := Main.Add(TfrmOptionsDirectoryHotlist); DirectoryHotlistConfig.Add(TfrmOptionsDirectoryHotlistExtra); end; initialization OptionsEditorClassList:= TOptionsEditorClassList.Create; MakeEditorsClassList; finalization if Assigned(OptionsEditorClassList) then FreeAndNil(OptionsEditorClassList); end. doublecmd-1.1.30/src/frames/foptionsframe.lfm0000644000175000001440000000027715104114162020213 0ustar alexxusersobject OptionsEditor: TOptionsEditor Left = 0 Height = 240 Top = 0 Width = 320 HelpType = htKeyword LCLVersion = '1.4.4.0' TabOrder = 0 DesignLeft = 181 DesignTop = 138 end doublecmd-1.1.30/src/frames/foptionsfonts.pas0000644000175000001440000002115215104114162020252 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Fonts options page Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFonts; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, StdCtrls, Spin, Dialogs, //DC fOptionsFrame, uGlobs; type { TVisualFontElements } TVisualFontElements = record FontEdit: TEdit; FontSpindEdit: TSpinEdit; end; { TSpinEdit } TSpinEdit = class(Spin.TSpinEdit) public function GetLimitedValue(const AValue: Double): Double; override; end; { TfrmOptionsFonts } TfrmOptionsFonts = class(TOptionsEditor) dlgFnt: TFontDialog; procedure edtFontExit(Sender: TObject); procedure edtMouseWheelDown(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var {%H-}Handled: boolean); procedure edtMouseWheelUp(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var {%H-}Handled: boolean); procedure edtFontSizeChange(Sender: TObject); procedure btnSelFontClick(Sender: TObject); private LocalVisualFontElements: array[0..pred(Length(TDCFontsOptions))] of TVisualFontElements; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Controls, //DC uLng; { TSpinEdit } function TSpinEdit.GetLimitedValue(const AValue: Double): Double; begin // Zero - default font size if (AValue = 0.0) then Exit(0); Result:= inherited GetLimitedValue(AValue); end; { TfrmOptionsFonts } { TfrmOptionsFonts.GetIconIndex } class function TfrmOptionsFonts.GetIconIndex: integer; begin Result := 3; end; { TfrmOptionsFonts.GetTitle } class function TfrmOptionsFonts.GetTitle: string; begin Result := rsOptionsEditorFonts; end; { TfrmOptionsFonts.Init } // We draw manually the whole thing from the gFont array instead of having designed the form at the conception time. // This way, we're sure to don't forget a font, for one, and second, if we ever add a font, no modification will be required here, in the configuration section. // ...or maybe just if the font has to be monospace. procedure TfrmOptionsFonts.Init; var ALabelFont: TLabel; AEditFont: TEdit; APreviousEditFont: TEdit = nil; ASpinEditFontSize: TSpinEdit; AButtonFont: TButton; iFontIndex: integer; begin for iFontIndex := 0 to pred(Length(TDCFontsOptions)) do begin ALabelFont := TLabel.Create(Self); ALabelFont.Parent := Self; ALabelFont.Caption := gFonts[TDCFont(iFontIndex)].Usage; AEditFont := TEdit.Create(Self); LocalVisualFontElements[iFontIndex].FontEdit := AEditFont; AEditFont.Parent := Self; AEditFont.Tag := iFontIndex; AEditFont.OnExit := @edtFontExit; AEditFont.OnMouseWheelDown := @edtMouseWheelDown; AEditFont.OnMouseWheelUp := @edtMouseWheelUp; AEditFont.Anchors := [akTop, akLeft, akRight]; ALabelFont.FocusControl := AEditFont; ASpinEditFontSize := TSpinEdit.Create(Self); LocalVisualFontElements[iFontIndex].FontSpindEdit := ASpinEditFontSize; ASpinEditFontSize.Tag := iFontIndex; ASpinEditFontSize.Parent := Self; ASpinEditFontSize.OnChange := @edtFontSizeChange; ASpinEditFontSize.MinValue := gFonts[TDCFont(iFontIndex)].MinValue; ASpinEditFontSize.MaxValue := gFonts[TDCFont(iFontIndex)].MaxValue; ASpinEditFontSize.Width := 55; ASpinEditFontSize.Anchors := [akTop, akRight]; AButtonFont := TButton.Create(Self); AButtonFont.Tag := iFontIndex; AButtonFont.Parent := Self;; AButtonFont.AutoSize := True; AButtonFont.Caption := '...'; AButtonFont.OnClick := @btnSelFontClick; AButtonFont.Anchors := [akTop, akRight]; ALabelFont.AnchorSideLeft.Control := Self; if APreviousEditFont <> nil then begin ALabelFont.AnchorSideTop.Control := APreviousEditFont; ALabelFont.AnchorSideTop.Side := asrBottom; ALabelFont.BorderSpacing.Top := 6; end else begin ALabelFont.AnchorSideTop.Control := Self; end; AEditFont.AnchorSideLeft.Control := ALabelFont; AEditFont.AnchorSideTop.Control := ALabelFont; AEditFont.AnchorSideTop.Side := asrBottom; AEditFont.AnchorSideRight.Control := ASpinEditFontSize; ASpinEditFontSize.AnchorSideTop.Control := AEditFont; ASpinEditFontSize.AnchorSideTop.Side := asrCenter; ASpinEditFontSize.AnchorSideRight.Control := AButtonFont; AButtonFont.AnchorSideTop.Control := AEditFont; AButtonFont.AnchorSideTop.Side := asrCenter; AButtonFont.AnchorSideRight.Control := Self; AButtonFont.AnchorSideRight.Side := asrBottom; AButtonFont.AnchorSideBottom.Side := asrBottom; APreviousEditFont := AEditFont; end; end; { TfrmOptionsFonts.Load } // The idea here is to take the general font style and apply them to TEdit in the page. // User plays with that to set the properties he wants. // Then at the end we recuperate the font from the TEdit's and store properties user set back to the general fonts. procedure TfrmOptionsFonts.Load; var iFontIndex: integer; begin for iFontIndex := 0 to pred(Length(TDCFontsOptions)) do begin LocalVisualFontElements[iFontIndex].FontEdit.Text := gFonts[TDCFont(iFontIndex)].Name; FontOptionsToFont(gFonts[TDCFont(iFontIndex)], LocalVisualFontElements[iFontIndex].FontEdit.Font); LocalVisualFontElements[iFontIndex].FontSpindEdit.Value := gFonts[TDCFont(iFontIndex)].Size; end; end; { TfrmOptionsFonts.Save } function TfrmOptionsFonts.Save: TOptionsEditorSaveFlags; var iFontIndex: integer; begin Result := []; for iFontIndex := 0 to pred(Length(TDCFontsOptions)) do FontToFontOptions(LocalVisualFontElements[iFontIndex].FontEdit.Font, gFonts[TDCFont(iFontIndex)]); end; { TfrmOptionsFonts.edtFontExit } procedure TfrmOptionsFonts.edtFontExit(Sender: TObject); begin TEdit(Sender).Font.Name := TEdit(Sender).Text; end; { TfrmOptionsFonts.edtMouseWheelDown } procedure TfrmOptionsFonts.edtMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: boolean); begin if (ssCtrl in Shift) and (LocalVisualFontElements[TEdit(Sender).Tag].FontSpindEdit.Value > gFonts[TDCFont(TEdit(Sender).Tag)].MinValue) then begin TEdit(Sender).Font.Size := TEdit(Sender).Font.Size - 1; LocalVisualFontElements[TEdit(Sender).Tag].FontSpindEdit.Value := TEdit(Sender).Font.Size; end; end; { TfrmOptionsFonts.edtMouseWheelUp } procedure TfrmOptionsFonts.edtMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: boolean); begin if (ssCtrl in Shift) and (LocalVisualFontElements[TEdit(Sender).Tag].FontSpindEdit.Value < gFonts[TDCFont(TEdit(Sender).Tag)].MaxValue) then begin TEdit(Sender).Font.Size := TEdit(Sender).Font.Size + 1; LocalVisualFontElements[TEdit(Sender).Tag].FontSpindEdit.Value := TEdit(Sender).Font.Size; end; end; { TfrmOptionsFonts.edtFontSizeChange } procedure TfrmOptionsFonts.edtFontSizeChange(Sender: TObject); begin if (LocalVisualFontElements[TSpinEdit(Sender).Tag].FontEdit.Font.Size <> TSpinEdit(Sender).Value) then LocalVisualFontElements[TSpinEdit(Sender).Tag].FontEdit.Font.Size := TSpinEdit(Sender).Value; end; { TfrmOptionsFonts.btnSelFontClick } procedure TfrmOptionsFonts.btnSelFontClick(Sender: TObject); const cMonoFonts = [dcfEditor, dcfViewer, dcfLog, dcfConsole]; begin begin dlgFnt.Font := LocalVisualFontElements[TButton(Sender).Tag].FontEdit.Font; if (TDCFont(TButton(Sender).Tag) in cMonoFonts) then dlgFnt.Options := dlgFnt.Options + [fdFixedPitchOnly, fdNoStyleSel] else dlgFnt.Options := dlgFnt.Options - [fdFixedPitchOnly, fdNoStyleSel]; if dlgFnt.Execute then begin LocalVisualFontElements[TButton(Sender).Tag].FontEdit.Font := dlgFnt.Font; LocalVisualFontElements[TButton(Sender).Tag].FontEdit.Text := dlgFnt.Font.Name; LocalVisualFontElements[TButton(Sender).Tag].FontSpindEdit.Value := dlgFnt.Font.Size; end; end; end; end. doublecmd-1.1.30/src/frames/foptionsfonts.lrj0000644000175000001440000000020215104114162020247 0ustar alexxusers{"version":1,"strings":[ {"hash":5072307,"name":"tfrmoptionsfonts.hint","sourcebytes":[70,111,110,116,115],"value":"Fonts"} ]} doublecmd-1.1.30/src/frames/foptionsfonts.lfm0000644000175000001440000000067315104114162020252 0ustar alexxusersinherited frmOptionsFonts: TfrmOptionsFonts Height = 372 Hint = 'Fonts' Width = 601 HelpKeyword = '/configuration.html#ConfigFonts' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 3 ChildSizing.VerticalSpacing = 2 DesignLeft = 804 DesignTop = 355 object dlgFnt: TFontDialog[0] MinFontSize = 0 MaxFontSize = 0 Options = [] left = 80 top = 40 end end doublecmd-1.1.30/src/frames/foptionsfiletypescolors.pas0000644000175000001440000002443615104114162022357 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File types colors options page Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsFileTypesColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, KASComboBox, Dialogs, Buttons, LMessages, fOptionsFrame; type { TfrmOptionsFileTypesColors } TfrmOptionsFileTypesColors = class(TOptionsEditor) btnAddCategory: TBitBtn; btnDeleteCategory: TBitBtn; btnSearchTemplate: TBitBtn; cbCategoryColor: TKASColorBoxButton; edtCategoryAttr: TEdit; edtCategoryMask: TEdit; edtCategoryName: TEdit; gbFileTypesColors: TGroupBox; lbCategories: TListBox; lblCategoryAttr: TLabel; lblCategoryColor: TLabel; lblCategoryMask: TLabel; lblCategoryName: TLabel; procedure cbCategoryColorChange(Sender: TObject); procedure edtCategoryAttrChange(Sender: TObject); procedure edtCategoryMaskChange(Sender: TObject); procedure edtCategoryNameChange(Sender: TObject); procedure btnSearchTemplateClick(Sender: TObject); procedure btnAddCategoryClick(Sender: TObject); procedure btnDeleteCategoryClick(Sender: TObject); procedure lbCategoriesDragDrop(Sender, {%H-}Source: TObject; {%H-}X, Y: Integer); procedure lbCategoriesDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean); procedure lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; {%H-}State: TOwnerDrawState); procedure lbCategoriesSelectionChange(Sender: TObject; User: boolean); procedure Clear; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public destructor Destroy; override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; function IsSignatureComputedFromAllWindowComponents: Boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; end; implementation {$R *.lfm} uses Graphics, CRC, uLng, uGlobs, uColorExt, fMaskInputDlg, uSearchTemplate; { TfrmOptionsFileTypesColors } procedure TfrmOptionsFileTypesColors.edtCategoryNameChange(Sender: TObject); begin if lbCategories.ItemIndex < 0 then Exit; lbCategories.Items[lbCategories.ItemIndex]:= edtCategoryName.Text; TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]).sName:= edtCategoryName.Text; end; procedure TfrmOptionsFileTypesColors.edtCategoryMaskChange(Sender: TObject); begin if lbCategories.ItemIndex < 0 then Exit; TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]).sExt:= edtCategoryMask.Text; end; procedure TfrmOptionsFileTypesColors.edtCategoryAttrChange(Sender: TObject); begin if lbCategories.ItemIndex < 0 then Exit; TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]).sModeStr:= edtCategoryAttr.Text; end; procedure TfrmOptionsFileTypesColors.cbCategoryColorChange(Sender: TObject); begin if lbCategories.ItemIndex < 0 then Exit; TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]).cColor:= cbCategoryColor.Selected; end; procedure TfrmOptionsFileTypesColors.btnSearchTemplateClick(Sender: TObject); var sMask: String; bTemplate: Boolean; begin sMask:= edtCategoryMask.Text; if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate:= IsMaskSearchTemplate(sMask); edtCategoryMask.Text:= sMask; if bTemplate then edtCategoryAttr.Text:= EmptyStr; edtCategoryMask.Enabled:= not bTemplate; edtCategoryAttr.Enabled:= not bTemplate; end; end; procedure TfrmOptionsFileTypesColors.btnAddCategoryClick(Sender: TObject); var iIndex : Integer; MaskItem: TMaskItem; begin MaskItem := TMaskItem.Create; try MaskItem.sName:= rsOptionsEditorFileNewFileTypes; MaskItem.sExt:= AllFilesMask; MaskItem.sModeStr:= EmptyStr; MaskItem.cColor:= gColors.FilePanel^.ForeColor; iIndex:= lbCategories.Items.AddObject(MaskItem.sName, MaskItem); except FreeAndNil(MaskItem); raise; end; lbCategories.ItemIndex:= iIndex; edtCategoryName.SetFocus; end; procedure TfrmOptionsFileTypesColors.btnDeleteCategoryClick(Sender: TObject); begin if (lbCategories.ItemIndex <> -1) then begin lbCategories.Items.Objects[lbCategories.ItemIndex].Free; lbCategories.Items.Delete(lbCategories.ItemIndex); if lbCategories.Count > 0 then lbCategories.ItemIndex:= 0 else begin lbCategoriesSelectionChange(lbCategories, True); end; end; end; procedure TfrmOptionsFileTypesColors.lbCategoriesDragDrop(Sender, Source: TObject; X, Y: Integer); var SrcIndex, DestIndex: Integer; begin SrcIndex := lbCategories.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbCategories.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbCategories.Count) then DestIndex := lbCategories.Count - 1; lbCategories.Items.Move(SrcIndex, DestIndex); lbCategories.ItemIndex := DestIndex; end; procedure TfrmOptionsFileTypesColors.lbCategoriesDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Source = lbCategories) and (lbCategories.ItemIndex <> -1); end; procedure TfrmOptionsFileTypesColors.lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); begin with (Control as TListBox), gColors.FilePanel^ do begin if (not Selected[Index]) and Assigned(Items.Objects[Index]) then begin Canvas.Brush.Color:= BackColor; Canvas.Font.Color:= TMaskItem(Items.Objects[Index]).cColor; end else begin Canvas.Brush.Color:= CursorColor; Canvas.Font.Color:= CursorText; end; Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left+2,ARect.Top,Items[Index]); end; end; procedure TfrmOptionsFileTypesColors.lbCategoriesSelectionChange( Sender: TObject; User: boolean); var Index: Integer; bEnabled: Boolean; MaskItem: TMaskItem; begin Index:= lbCategories.ItemIndex; if (Index <> -1) then begin MaskItem := TMaskItem(lbCategories.Items.Objects[Index]); edtCategoryName.Text := MaskItem.sName; edtCategoryMask.Text := MaskItem.sExt; cbCategoryColor.Selected := MaskItem.cColor; bEnabled:= (MaskItem.sExt = '') or (MaskItem.sExt[1] <> '>'); edtCategoryAttr.Text := MaskItem.sModeStr; end else begin bEnabled := False; edtCategoryName.Text := ''; edtCategoryMask.Text := ''; edtCategoryAttr.Text := ''; cbCategoryColor.Selected := gColors.FilePanel^.ForeColor; end; edtCategoryMask.Enabled:= bEnabled; edtCategoryAttr.Enabled:= bEnabled; edtCategoryName.Enabled:= (Index <> -1); cbCategoryColor.Enabled:= (Index <> -1); btnSearchTemplate.Enabled:= (Index <> -1); btnDeleteCategory.Enabled:= (Index <> -1); end; procedure TfrmOptionsFileTypesColors.Clear; var I: Integer; begin for I := lbCategories.Count - 1 downto 0 do lbCategories.Items.Objects[I].Free; lbCategories.Clear; end; procedure TfrmOptionsFileTypesColors.Init; begin lbCategories.Canvas.Font := lbCategories.Font; lbCategories.ItemHeight := lbCategories.Canvas.TextHeight('Wg'); end; class function TfrmOptionsFileTypesColors.GetIconIndex: Integer; begin Result := 21; end; class function TfrmOptionsFileTypesColors.GetTitle: String; begin Result := rsOptionsEditorFileTypes; end; function TfrmOptionsFileTypesColors.IsSignatureComputedFromAllWindowComponents: Boolean; begin Result := False; end; function TfrmOptionsFileTypesColors.ExtraOptionsSignature( CurrentSignature: dword): dword; var I: Integer; AColor: TColor; MaskItem: TMaskItem; begin Result:= CurrentSignature; for I:= 0 to lbCategories.Count - 1 do begin if Assigned(lbCategories.Items.Objects[I]) then begin MaskItem:= TMaskItem(lbCategories.Items.Objects[I]); AColor:= MaskItem.cColor; Result:= CRC32(Result, @AColor, SizeOf(AColor)); Result:= CRC32(Result, Pointer(MaskItem.sExt), Length(MaskItem.sExt)); Result:= CRC32(Result, Pointer(MaskItem.sName), Length(MaskItem.sName)); Result:= CRC32(Result, Pointer(MaskItem.sModeStr), Length(MaskItem.sModeStr)); end; end; end; procedure TfrmOptionsFileTypesColors.Load; var I : Integer; MaskItem: TMaskItem; begin Clear; lbCategories.Color:= gColors.FilePanel^.BackColor; { File lbtypes category color } for I := 0 to gColorExt.Count - 1 do begin MaskItem := TMaskItem.Create; try MaskItem.Assign(gColorExt[I]); lbCategories.Items.AddObject(MaskItem.sName, MaskItem); except FreeAndNil(MaskItem); raise; end; end; // for if lbCategories.Count > 0 then begin lbCategories.ItemIndex := 0 end; lbCategoriesSelectionChange(lbCategories, True); end; function TfrmOptionsFileTypesColors.Save: TOptionsEditorSaveFlags; var I: Integer; MaskItem: TMaskItem; begin Result := []; gColorExt.Clear; for I := 0 to lbCategories.Count - 1 do begin if Assigned(lbCategories.Items.Objects[I]) then begin MaskItem := TMaskItem.Create; try MaskItem.Assign(TMaskItem(lbCategories.Items.Objects[I])); gColorExt.Add(MaskItem); except FreeAndNil(MaskItem); raise; end; end; end; end; procedure TfrmOptionsFileTypesColors.CMThemeChanged(var Message: TLMessage); begin lbCategories.Color:= gColors.FilePanel^.BackColor; lbCategories.Repaint; end; destructor TfrmOptionsFileTypesColors.Destroy; begin Clear; inherited Destroy; end; end. doublecmd-1.1.30/src/frames/foptionsfiletypescolors.lrj0000644000175000001440000000270615104114162022357 0ustar alexxusers{"version":1,"strings":[ {"hash":239267657,"name":"tfrmoptionsfiletypescolors.gbfiletypescolors.caption","sourcebytes":[70,105,108,101,32,116,121,112,101,115,32,99,111,108,111,114,115,32,40,115,111,114,116,32,98,121,32,100,114,97,103,38,38,100,114,111,112,41],"value":"File types colors (sort by drag&&drop)"}, {"hash":143287226,"name":"tfrmoptionsfiletypescolors.lblcategoryname.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,38,110,97,109,101,58],"value":"Category &name:"}, {"hash":143501786,"name":"tfrmoptionsfiletypescolors.lblcategorymask.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,38,109,97,115,107,58],"value":"Category &mask:"}, {"hash":67057050,"name":"tfrmoptionsfiletypescolors.lblcategorycolor.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,99,111,38,108,111,114,58],"value":"Category co&lor:"}, {"hash":52377562,"name":"tfrmoptionsfiletypescolors.lblcategoryattr.caption","sourcebytes":[67,97,116,101,103,111,114,121,32,97,38,116,116,114,105,98,117,116,101,115,58],"value":"Category a&ttributes:"}, {"hash":277668,"name":"tfrmoptionsfiletypescolors.btnaddcategory.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":114044133,"name":"tfrmoptionsfiletypescolors.btndeletecategory.caption","sourcebytes":[68,38,101,108,101,116,101],"value":"D&elete"}, {"hash":47236478,"name":"tfrmoptionsfiletypescolors.btnsearchtemplate.hint","sourcebytes":[84,101,109,112,108,97,116,101,46,46,46],"value":"Template..."} ]} doublecmd-1.1.30/src/frames/foptionsfiletypescolors.lfm0000644000175000001440000001776715104114162022363 0ustar alexxusersinherited frmOptionsFileTypesColors: TfrmOptionsFileTypesColors Height = 356 Width = 759 HelpKeyword = '/configuration.html#ConfigColorFiles' AutoSize = True ClientHeight = 356 ClientWidth = 759 DesignLeft = 378 DesignTop = 92 object gbFileTypesColors: TGroupBox[0] AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 8 Height = 346 Top = 6 Width = 743 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'File types colors (sort by drag&&drop)' ChildSizing.LeftRightSpacing = 8 ClientHeight = 326 ClientWidth = 739 TabOrder = 0 object lblCategoryName: TLabel AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 163 Width = 84 Caption = 'Category &name:' FocusControl = edtCategoryName ParentColor = False end object lblCategoryMask: TLabel AnchorSideTop.Control = edtCategoryMask AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 194 Width = 82 Caption = 'Category &mask:' FocusControl = edtCategoryMask ParentColor = False end object lblCategoryColor: TLabel AnchorSideTop.Control = cbCategoryColor AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 256 Width = 81 Caption = 'Category co&lor:' FocusControl = cbCategoryColor ParentColor = False end object lblCategoryAttr: TLabel AnchorSideTop.Control = edtCategoryAttr AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 225 Width = 104 Caption = 'Category a&ttributes:' FocusControl = edtCategoryAttr ParentColor = False end object edtCategoryName: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryMask Left = 170 Height = 23 Top = 159 Width = 561 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 8 TabOrder = 1 OnChange = edtCategoryNameChange end object edtCategoryMask: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSearchTemplate AnchorSideBottom.Control = edtCategoryAttr Left = 170 Height = 23 Top = 190 Width = 532 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Top = 8 BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 TabOrder = 2 OnChange = edtCategoryMaskChange end object cbCategoryColor: TKASColorBoxButton AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtCategoryAttr AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnDeleteCategory Left = 170 Height = 25 Top = 249 Width = 561 Anchors = [akLeft, akRight, akBottom] TabOrder = 5 BorderSpacing.Bottom = 12 OnChange = cbCategoryColorChange end object btnAddCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnDeleteCategory AnchorSideBottom.Side = asrBottom Left = 505 Height = 32 Top = 286 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'A&dd' OnClick = btnAddCategoryClick TabOrder = 6 end object btnDeleteCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 621 Height = 32 Top = 286 Width = 110 Anchors = [akRight, akBottom] Caption = 'D&elete' OnClick = btnDeleteCategoryClick TabOrder = 7 end object lbCategories: TListBox AnchorSideTop.Control = gbFileTypesColors AnchorSideRight.Control = gbFileTypesColors AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryName Left = 8 Height = 141 Top = 6 Width = 723 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 12 DragMode = dmAutomatic ItemHeight = 0 Style = lbOwnerDrawFixed TabOrder = 0 OnDragDrop = lbCategoriesDragDrop OnDragOver = lbCategoriesDragOver OnDrawItem = lbCategoriesDrawItem OnSelectionChange = lbCategoriesSelectionChange end object edtCategoryAttr: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCategoryColor Left = 170 Height = 23 Top = 221 Width = 561 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 8 TabOrder = 4 OnChange = edtCategoryAttrChange end object btnSearchTemplate: TBitBtn AnchorSideTop.Control = edtCategoryMask AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryMask AnchorSideBottom.Side = asrBottom Left = 708 Height = 23 Hint = 'Template...' Top = 190 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } GlyphShowMode = gsmAlways Layout = blGlyphRight OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 3 end end end doublecmd-1.1.30/src/frames/foptionsfilesviewscomplement.pas0000644000175000001440000001206515104114162023370 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Files views complement options page Copyright (C) 2018-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFilesViewsComplement; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Graphics, ExtCtrls, KASButtonPanel, fOptionsFrame; type { TfrmOptionsFilesViewsComplement } TfrmOptionsFilesViewsComplement = class(TOptionsEditor) btnAddAttribute: TButton; btnAttrsHelp: TButton; cbDblClickToParent: TCheckBox; cbHighlightUpdatedFiles: TCheckBox; cbDirBrackets: TCheckBox; cbListFilesInThread: TCheckBox; cbLoadIconsSeparately: TCheckBox; cbDelayLoadingTabs: TCheckBox; cbShowSystemFiles: TCheckBox; cbSpaceMovesDown: TCheckBox; cbInplaceRename: TCheckBox; gbMisc: TGroupBox; pnlDefaultAttribute: TKASButtonPanel; chkMarkMaskFilterWindows: TCheckBox; gbMarking: TGroupBox; lbAttributeMask: TLabel; edtDefaultAttribute: TEdit; chkMarkMaskShowAttribute: TCheckBox; procedure btnAddAttributeClick(Sender: TObject); procedure btnAttrsHelpClick(Sender: TObject); private procedure OnAddAttribute(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses HelpIntfs, fAttributesEdit, uGlobs, uLng; { TfrmOptionsFilesViewsComplement } procedure TfrmOptionsFilesViewsComplement.Load; begin cbSpaceMovesDown.Checked := gSpaceMovesDown; cbDirBrackets.Checked := gDirBrackets; cbShowSystemFiles.Checked:= gShowSystemFiles; {$IFDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon cbListFilesInThread.Visible:= False; {$ELSE} cbListFilesInThread.Checked:= gListFilesInThread; {$ENDIF} cbLoadIconsSeparately.Checked:= gLoadIconsSeparately; cbDelayLoadingTabs.Checked:= gDelayLoadingTabs; cbHighlightUpdatedFiles.Checked:= gHighlightUpdatedFiles; cbInplaceRename.Checked := gInplaceRename; cbDblClickToParent.Checked := gDblClickToParent; chkMarkMaskFilterWindows.Checked := gMarkMaskFilterWindows; chkMarkMaskShowAttribute.Checked := gMarkShowWantedAttribute; edtDefaultAttribute.Text := gMarkDefaultWantedAttribute; end; function TfrmOptionsFilesViewsComplement.Save: TOptionsEditorSaveFlags; begin gSpaceMovesDown := cbSpaceMovesDown.Checked; gDirBrackets := cbDirBrackets.Checked; gShowSystemFiles:= cbShowSystemFiles.Checked; gListFilesInThread:= cbListFilesInThread.Checked; gLoadIconsSeparately:= cbLoadIconsSeparately.Checked; gDelayLoadingTabs := cbDelayLoadingTabs.Checked; gHighlightUpdatedFiles := cbHighlightUpdatedFiles.Checked; gInplaceRename := cbInplaceRename.Checked; gDblClickToParent := cbDblClickToParent.Checked; gMarkMaskFilterWindows := chkMarkMaskFilterWindows.Checked; gMarkShowWantedAttribute := chkMarkMaskShowAttribute.Checked; gMarkDefaultWantedAttribute := edtDefaultAttribute.Text; Result := []; end; class function TfrmOptionsFilesViewsComplement.GetIconIndex: Integer; begin Result := 29; end; class function TfrmOptionsFilesViewsComplement.GetTitle: String; begin Result := rsOptionsEditorFilesViewsComplement; end; procedure TfrmOptionsFilesViewsComplement.btnAddAttributeClick(Sender: TObject); var FFrmAttributesEdit: TfrmAttributesEdit; begin FFrmAttributesEdit := TfrmAttributesEdit.Create(Owner); try FFrmAttributesEdit.OnOk := @OnAddAttribute; FFrmAttributesEdit.Reset; FFrmAttributesEdit.ShowModal; finally FFrmAttributesEdit.Free; end; end; procedure TfrmOptionsFilesViewsComplement.btnAttrsHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', edtDefaultAttribute.HelpKeyword); end; procedure TfrmOptionsFilesViewsComplement.OnAddAttribute(Sender: TObject); var sAttr: String; begin sAttr := edtDefaultAttribute.Text; if edtDefaultAttribute.SelStart > 0 then Insert((Sender as TfrmAttributesEdit).AttrsAsText, sAttr, edtDefaultAttribute.SelStart + 1) // Insert at caret position. else sAttr := sAttr + (Sender as TfrmAttributesEdit).AttrsAsText; edtDefaultAttribute.Text := sAttr; end; end. doublecmd-1.1.30/src/frames/foptionsfilesviewscomplement.lrj0000644000175000001440000001125115104114162023370 0ustar alexxusers{"version":1,"strings":[ {"hash":103818425,"name":"tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption","sourcebytes":[38,87,104,101,110,32,115,101,108,101,99,116,105,110,103,32,102,105,108,101,115,32,119,105,116,104,32,60,83,80,65,67,69,66,65,82,62,44,32,109,111,118,101,32,100,111,119,110,32,116,111,32,110,101,120,116,32,102,105,108,101,32,40,97,115,32,119,105,116,104,32,60,73,78,83,69,82,84,62,41],"value":"&When selecting files with , move down to next file (as with )"}, {"hash":65976739,"name":"tfrmoptionsfilesviewscomplement.cbdirbrackets.caption","sourcebytes":[83,38,104,111,119,32,115,113,117,97,114,101,32,98,114,97,99,107,101,116,115,32,97,114,111,117,110,100,32,100,105,114,101,99,116,111,114,105,101,115],"value":"S&how square brackets around directories"}, {"hash":175165491,"name":"tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption","sourcebytes":[83,104,111,119,32,115,38,121,115,116,101,109,32,97,110,100,32,104,105,100,100,101,110,32,102,105,108,101,115],"value":"Show s&ystem and hidden files"}, {"hash":110856692,"name":"tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption","sourcebytes":[76,111,97,100,32,38,102,105,108,101,32,108,105,115,116,32,105,110,32,115,101,112,97,114,97,116,101,32,116,104,114,101,97,100],"value":"Load &file list in separate thread"}, {"hash":176402404,"name":"tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption","sourcebytes":[76,111,97,100,32,105,99,111,110,115,32,97,102,38,116,101,114,32,102,105,108,101,32,108,105,115,116],"value":"Load icons af&ter file list"}, {"hash":57459572,"name":"tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption","sourcebytes":[68,111,38,110,39,116,32,108,111,97,100,32,102,105,108,101,32,108,105,115,116,32,117,110,116,105,108,32,97,32,116,97,98,32,105,115,32,97,99,116,105,118,97,116,101,100],"value":"Do&n't load file list until a tab is activated"}, {"hash":89894099,"name":"tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption","sourcebytes":[72,105,38,103,104,108,105,103,104,116,32,110,101,119,32,97,110,100,32,117,112,100,97,116,101,100,32,102,105,108,101,115],"value":"Hi&ghlight new and updated files"}, {"hash":139135013,"name":"tfrmoptionsfilesviewscomplement.cbinplacerename.caption","sourcebytes":[69,110,97,98,108,101,32,105,110,112,108,97,99,101,32,38,114,101,110,97,109,105,110,103,32,119,104,101,110,32,99,108,105,99,107,105,110,103,32,116,119,105,99,101,32,111,110,32,97,32,110,97,109,101],"value":"Enable inplace &renaming when clicking twice on a name"}, {"hash":165018039,"name":"tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption","sourcebytes":[69,110,97,98,108,101,32,99,104,97,110,103,105,110,103,32,116,111,32,38,112,97,114,101,110,116,32,102,111,108,100,101,114,32,119,104,101,110,32,100,111,117,98,108,101,45,99,108,105,99,107,105,110,103,32,111,110,32,101,109,112,116,121,32,112,97,114,116,32,111,102,32,102,105,108,101,32,118,105,101,119],"value":"Enable changing to &parent folder when double-clicking on empty part of file view"}, {"hash":8828099,"name":"tfrmoptionsfilesviewscomplement.gbmarking.caption","sourcebytes":[77,97,114,107,105,110,103,47,85,110,109,97,114,107,105,110,103,32,101,110,116,114,105,101,115],"value":"Marking/Unmarking entries"}, {"hash":245486841,"name":"tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption","sourcebytes":[87,105,110,100,111,119,115,32,115,116,121,108,101,32,102,105,108,116,101,114,32,119,104,101,110,32,109,97,114,107,105,110,103,32,102,105,108,101,115,32,40,34,42,46,42,34,32,97,108,115,111,32,115,101,108,101,99,116,32,102,105,108,101,115,32,119,105,116,104,111,117,116,32,101,120,116,101,110,115,105,111,110,44,32,101,116,99,46,41],"value":"Windows style filter when marking files (\"*.*\" also select files without extension, etc.)"}, {"hash":228092554,"name":"tfrmoptionsfilesviewscomplement.lbattributemask.caption","sourcebytes":[68,101,102,97,117,108,116,32,97,116,116,114,105,98,117,116,101,32,109,97,115,107,32,118,97,108,117,101,32,116,111,32,117,115,101,58],"value":"Default attribute mask value to use:"}, {"hash":2812976,"name":"tfrmoptionsfilesviewscomplement.btnattrshelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, {"hash":173988,"name":"tfrmoptionsfilesviewscomplement.btnaddattribute.caption","sourcebytes":[38,65,100,100],"value":"&Add"}, {"hash":26924549,"name":"tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption","sourcebytes":[85,115,101,32,97,110,32,105,110,100,101,112,101,110,100,101,110,116,32,97,116,116,114,105,98,117,116,101,32,102,105,108,116,101,114,32,105,110,32,109,97,115,107,32,105,110,112,117,116,32,100,105,97,108,111,103,32,101,97,99,104,32,116,105,109,101],"value":"Use an independent attribute filter in mask input dialog each time"} ]} doublecmd-1.1.30/src/frames/foptionsfilesviewscomplement.lfm0000644000175000001440000001472215104114162023365 0ustar alexxusersinherited frmOptionsFilesViewsComplement: TfrmOptionsFilesViewsComplement Height = 550 Width = 640 HelpKeyword = '/configuration.html#ConfigViewEx' ClientHeight = 550 ClientWidth = 640 DesignLeft = 200 DesignTop = 261 object gbMisc: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbMarking AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 235 Top = 121 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 215 ClientWidth = 624 TabOrder = 1 object cbSpaceMovesDown: TCheckBox Left = 6 Height = 19 Top = 6 Width = 459 Caption = '&When selecting files with , move down to next file (as with )' TabOrder = 0 end object cbDirBrackets: TCheckBox Left = 6 Height = 19 Top = 29 Width = 459 Caption = 'S&how square brackets around directories' TabOrder = 1 end object cbShowSystemFiles: TCheckBox Left = 6 Height = 19 Top = 52 Width = 459 Caption = 'Show s&ystem and hidden files' TabOrder = 2 end object cbListFilesInThread: TCheckBox Left = 6 Height = 19 Top = 75 Width = 459 Caption = 'Load &file list in separate thread' TabOrder = 3 end object cbLoadIconsSeparately: TCheckBox Left = 6 Height = 19 Top = 98 Width = 459 Caption = 'Load icons af&ter file list' TabOrder = 4 end object cbDelayLoadingTabs: TCheckBox Left = 6 Height = 19 Top = 121 Width = 459 Caption = 'Do&n''t load file list until a tab is activated' TabOrder = 5 end object cbHighlightUpdatedFiles: TCheckBox Left = 6 Height = 19 Top = 144 Width = 459 Caption = 'Hi&ghlight new and updated files' TabOrder = 6 end object cbInplaceRename: TCheckBox Left = 6 Height = 19 Top = 167 Width = 459 Caption = 'Enable inplace &renaming when clicking twice on a name' TabOrder = 7 end object cbDblClickToParent: TCheckBox Left = 6 Height = 19 Top = 190 Width = 459 Caption = 'Enable changing to &parent folder when double-clicking on empty part of file view' TabOrder = 8 end end object gbMarking: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 109 Top = 6 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Marking/Unmarking entries' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 6 ChildSizing.VerticalSpacing = 4 ClientHeight = 89 ClientWidth = 624 TabOrder = 0 object chkMarkMaskFilterWindows: TCheckBox AnchorSideLeft.Control = gbMarking AnchorSideTop.Control = gbMarking Left = 12 Height = 19 Top = 8 Width = 463 Caption = 'Windows style filter when marking files ("*.*" also select files without extension, etc.)' TabOrder = 0 end object pnlDefaultAttribute: TKASButtonPanel AnchorSideLeft.Control = chkMarkMaskFilterWindows AnchorSideTop.Control = chkMarkMaskFilterWindows AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMarking AnchorSideRight.Side = asrBottom Left = 12 Height = 27 Top = 31 Width = 600 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 3 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 27 ClientWidth = 600 TabOrder = 1 SameWidth = False object lbAttributeMask: TLabel AnchorSideLeft.Control = pnlDefaultAttribute AnchorSideTop.Control = edtDefaultAttribute AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 6 Width = 186 Caption = 'Default attribute mask value to use:' ParentColor = False end object edtDefaultAttribute: TEdit AnchorSideLeft.Control = lbAttributeMask AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAddAttribute AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAddAttribute AnchorSideBottom.Side = asrCenter Left = 189 Height = 27 Top = 0 Width = 304 HelpType = htKeyword HelpKeyword = '/findfiles.html#attributes' Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object btnAttrsHelp: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAddAttribute AnchorSideRight.Control = pnlDefaultAttribute AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 547 Height = 27 Top = 0 Width = 53 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.InnerBorder = 1 Caption = '&Help' OnClick = btnAttrsHelpClick TabOrder = 2 end object btnAddAttribute: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlDefaultAttribute AnchorSideRight.Control = btnAttrsHelp Left = 496 Height = 26 Top = 0 Width = 48 Anchors = [akTop, akRight] AutoSize = True Caption = '&Add' OnClick = btnAddAttributeClick TabOrder = 1 end end object chkMarkMaskShowAttribute: TCheckBox AnchorSideLeft.Control = chkMarkMaskFilterWindows AnchorSideTop.Control = pnlDefaultAttribute AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 62 Width = 366 Caption = 'Use an independent attribute filter in mask input dialog each time' TabOrder = 2 end end end doublecmd-1.1.30/src/frames/foptionsfilesviews.pas0000644000175000001440000002624115104114162021305 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Files views options page Copyright (C) 2006-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFilesViews; {$mode objfpc}{$H+} interface uses uTypes, Classes, SysUtils, StdCtrls, Graphics, ExtCtrls, Spin, fOptionsFrame; type { TfrmOptionsFilesViews } TfrmOptionsFilesViews = class(TOptionsEditor) btnDefault: TButton; cbDateTimeFormat: TComboBox; cbHeaderSizeFormat: TComboBox; cbFooterSizeFormat: TComboBox; cbOperationSizeFormat: TComboBox; cbUpdatedFilesPosition: TComboBox; cbNewFilesPosition: TComboBox; cbSortMethod: TComboBox; cbCaseSensitivity: TComboBox; cbSortFolderMode: TComboBox; cbFileSizeFormat: TComboBox; edByte: TEdit; edKilo: TEdit; edMega: TEdit; edGiga: TEdit; edTera: TEdit; gbFormatting: TGroupBox; gbSorting: TGroupBox; gbPersonalizedAbbreviationToUse: TGroupBox; lblByte: TLabel; lblKilobyte: TLabel; lblMegabyte: TLabel; lblGigabyte: TLabel; lblTerabyte: TLabel; lblHeaderSizeExample: TLabel; lblHeaderSizeFormat: TLabel; lblFooterSizeExample: TLabel; lblFooterSizeFormat: TLabel; lblOperationSizeExample: TLabel; lblOperationSizeFormat: TLabel; lblFileSizeExample: TLabel; lblDateTimeExample: TLabel; lblUpdatedFilesPosition: TLabel; lblSortFolderMode: TLabel; lblCaseSensitivity: TLabel; lblDateTimeFormat: TLabel; lblNewFilesPosition: TLabel; lblSortMethod: TLabel; lblFileSizeFormat: TLabel; pnlDateTime: TPanel; speNumberOfDigitsFile: TSpinEdit; speNumberOfDigitsHeader: TSpinEdit; speNumberOfDigitsFooter: TSpinEdit; speNumberOfDigitsOperation: TSpinEdit; procedure btnDefaultClick(Sender: TObject); procedure cbDateTimeFormatChange(Sender: TObject); procedure RefreshOurExamples(Sender: TObject); procedure TransferUnitsToOfficialUnits; private FIncorrectFormatMessage: string; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public procedure AfterConstruction; override; class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng, uDCUtils; const cFileSizeExample = 1335875825; { TfrmOptionsFilesViews } procedure TfrmOptionsFilesViews.cbDateTimeFormatChange(Sender: TObject); begin try lblDateTimeExample.Caption := FormatDateTime(cbDateTimeFormat.Text, Now); lblDateTimeExample.Font.Color := clDefault; except on E: EConvertError do begin lblDateTimeExample.Caption := FIncorrectFormatMessage; lblDateTimeExample.Font.Color := clRed; end; end; end; procedure TfrmOptionsFilesViews.RefreshOurExamples(Sender: TObject); var PreserveUnits: array[fsfPersonalizedByte .. fsfPersonalizedTera] of string; iFileSizeFormat: TFileSizeFormat; begin //We will temporary switch our units with official ones the time to show the preview. for iFileSizeFormat := fsfPersonalizedByte to fsfPersonalizedTera do PreserveUnits[iFileSizeFormat] := gSizeDisplayUnits[iFileSizeFormat]; try TransferUnitsToOfficialUnits; lblFileSizeExample.Caption := CnvFormatFileSize(cFileSizeExample, TFileSizeFormat(cbFileSizeFormat.ItemIndex), speNumberOfDigitsFile.Value); lblHeaderSizeExample.Caption := CnvFormatFileSize(cFileSizeExample, TFileSizeFormat(cbHeaderSizeFormat.ItemIndex), speNumberOfDigitsHeader.Value); lblFooterSizeExample.Caption := CnvFormatFileSize(cFileSizeExample, TFileSizeFormat(cbFooterSizeFormat.ItemIndex), speNumberOfDigitsFooter.Value); lblOperationSizeExample.Caption := CnvFormatFileSize(cFileSizeExample, TFileSizeFormat(cbOperationSizeFormat.ItemIndex), speNumberOfDigitsOperation.Value); finally //We restore the previous units. for iFileSizeFormat := fsfPersonalizedByte to fsfPersonalizedTera do gSizeDisplayUnits[iFileSizeFormat] := PreserveUnits[iFileSizeFormat]; end; end; procedure TfrmOptionsFilesViews.Init; begin ParseLineToList(rsOptSortMethod, cbSortMethod.Items); ParseLineToList(rsOptSortCaseSens, cbCaseSensitivity.Items); ParseLineToList(rsOptSortFolderMode, cbSortFolderMode.Items); ParseLineToList(rsOptNewFilesPosition, cbNewFilesPosition.Items); ParseLineToList(rsOptUpdatedFilesPosition, cbUpdatedFilesPosition.Items); ParseLineToList(rsOptFileSizeFloat + ';' + rsLegacyOperationByteSuffixLetter + ';' + rsLegacyDisplaySizeSingleLetterKilo + ';' + rsLegacyDisplaySizeSingleLetterMega + ';' + rsLegacyDisplaySizeSingleLetterGiga + ';' + rsLegacyDisplaySizeSingleLetterTera + ';' + rsOptPersonalizedFileSizeFormat, cbFileSizeFormat.Items); cbHeaderSizeFormat.Items.Assign(cbFileSizeFormat.Items); cbFooterSizeFormat.Items.Assign(cbFileSizeFormat.Items); cbOperationSizeFormat.Items.Assign(cbFileSizeFormat.Items); if cbDateTimeFormat.Items.IndexOf(DefaultDateTimeFormat) < 0 then begin cbDateTimeFormat.Items.Insert(0, DefaultDateTimeFormat); end; end; procedure TfrmOptionsFilesViews.Load; begin case gSortCaseSensitivity of cstNotSensitive: cbCaseSensitivity.ItemIndex := 0; cstLocale: cbCaseSensitivity.ItemIndex := 1; cstCharValue: cbCaseSensitivity.ItemIndex := 2; end; if not gSortNatural then cbSortMethod.ItemIndex := 0 else cbSortMethod.ItemIndex := 2; if gSortSpecial then cbSortMethod.ItemIndex := cbSortMethod.ItemIndex + 1; case gSortFolderMode of sfmSortNameShowFirst: cbSortFolderMode.ItemIndex := 0; sfmSortLikeFileShowFirst: cbSortFolderMode.ItemIndex := 1; sfmSortLikeFile: cbSortFolderMode.ItemIndex := 2; end; case gNewFilesPosition of nfpTop: cbNewFilesPosition.ItemIndex := 0; nfpTopAfterDirectories: cbNewFilesPosition.ItemIndex := 1; nfpSortedPosition: cbNewFilesPosition.ItemIndex := 2; nfpBottom: cbNewFilesPosition.ItemIndex := 3; end; case gUpdatedFilesPosition of ufpNoChange: cbUpdatedFilesPosition.ItemIndex := 0; ufpSameAsNewFiles: cbUpdatedFilesPosition.ItemIndex := 1; ufpSortedPosition: cbUpdatedFilesPosition.ItemIndex := 2; end; cbFileSizeFormat.ItemIndex := Ord(gFileSizeFormat); cbHeaderSizeFormat.ItemIndex := Ord(gHeaderSizeFormat); cbFooterSizeFormat.ItemIndex := Ord(gFooterSizeFormat); cbOperationSizeFormat.ItemIndex := Ord(gOperationSizeFormat); speNumberOfDigitsFile.Value := gFileSizeDigits; speNumberOfDigitsHeader.Value := gHeaderDigits; speNumberOfDigitsFooter.Value := gFooterDigits; speNumberOfDigitsOperation.Value := gOperationSizeDigits; edByte.Text := Trim(gSizeDisplayUnits[fsfPersonalizedByte]); edKilo.Text := Trim(gSizeDisplayUnits[fsfPersonalizedKilo]); edMega.Text := Trim(gSizeDisplayUnits[fsfPersonalizedMega]); edGiga.Text := Trim(gSizeDisplayUnits[fsfPersonalizedGiga]); edTera.Text := Trim(gSizeDisplayUnits[fsfPersonalizedTera]); cbDateTimeFormat.Text := gDateTimeFormat; lblDateTimeExample.Caption := FormatDateTime(cbDateTimeFormat.Text, Now); lblFileSizeExample.Constraints.MinWidth := lblFileSizeExample.Canvas.TextWidth(CnvFormatFileSize(cFileSizeExample, fsfKilo, speNumberOfDigitsFile.MaxValue) + 'WWW'); lblHeaderSizeExample.Constraints.MinWidth := lblHeaderSizeExample.Canvas.TextWidth(CnvFormatFileSize(cFileSizeExample, fsfKilo, speNumberOfDigitsHeader.MaxValue) + 'WWW'); lblFooterSizeExample.Constraints.MinWidth := lblFooterSizeExample.Canvas.TextWidth(CnvFormatFileSize(cFileSizeExample, fsfKilo, speNumberOfDigitsFooter.MaxValue) + 'WWW'); lblOperationSizeExample.Constraints.MinWidth := lblOperationSizeExample.Canvas.TextWidth(CnvFormatFileSize(cFileSizeExample, fsfKilo, speNumberOfDigitsOperation.MaxValue) + 'WWW'); Self.RefreshOurExamples(nil); end; function TfrmOptionsFilesViews.Save: TOptionsEditorSaveFlags; begin case cbCaseSensitivity.ItemIndex of 0: gSortCaseSensitivity := cstNotSensitive; 1: gSortCaseSensitivity := cstLocale; 2: gSortCaseSensitivity := cstCharValue; end; gSortNatural := (cbSortMethod.ItemIndex in [2,3]); gSortSpecial := (cbSortMethod.ItemIndex in [1,3]); case cbSortFolderMode.ItemIndex of 0: gSortFolderMode := sfmSortNameShowFirst; 1: gSortFolderMode := sfmSortLikeFileShowFirst; 2: gSortFolderMode := sfmSortLikeFile; end; case cbNewFilesPosition.ItemIndex of 0: gNewFilesPosition := nfpTop; 1: gNewFilesPosition := nfpTopAfterDirectories; 2: gNewFilesPosition := nfpSortedPosition; 3: gNewFilesPosition := nfpBottom; end; case cbUpdatedFilesPosition.ItemIndex of 0: gUpdatedFilesPosition := ufpNoChange; 1: gUpdatedFilesPosition := ufpSameAsNewFiles; 2: gUpdatedFilesPosition := ufpSortedPosition; end; gFileSizeFormat := TFileSizeFormat(cbFileSizeFormat.ItemIndex); gHeaderSizeFormat := TFileSizeFormat(cbHeaderSizeFormat.ItemIndex); gFooterSizeFormat := TFileSizeFormat(cbFooterSizeFormat.ItemIndex); gOperationSizeFormat := TFileSizeFormat(cbOperationSizeFormat.ItemIndex); gFileSizeDigits := speNumberOfDigitsFile.Value; gHeaderDigits := speNumberOfDigitsHeader.Value; gFooterDigits := speNumberOfDigitsFooter.Value; gOperationSizeDigits := speNumberOfDigitsOperation.Value; TransferUnitsToOfficialUnits; gDateTimeFormat := GetValidDateTimeFormat(cbDateTimeFormat.Text, gDateTimeFormat); Result := []; end; procedure TfrmOptionsFilesViews.AfterConstruction; begin inherited AfterConstruction; //save localized "Incorrect format" string FIncorrectFormatMessage := lblDateTimeExample.Caption; end; class function TfrmOptionsFilesViews.GetIconIndex: integer; begin Result := 29; end; class function TfrmOptionsFilesViews.GetTitle: string; begin Result := rsOptionsEditorFilesViews; end; procedure TfrmOptionsFilesViews.btnDefaultClick(Sender: TObject); begin Self.edByte.Text := Trim(rsDefaultPersonalizedAbbrevByte); Self.edKilo.Text := Trim(rsDefaultPersonalizedAbbrevKilo); Self.edMega.Text := Trim(rsDefaultPersonalizedAbbrevMega); Self.edGiga.Text := Trim(rsDefaultPersonalizedAbbrevGiga); Self.edTera.Text := Trim(rsDefaultPersonalizedAbbrevTera); end; procedure TfrmOptionsFilesViews.TransferUnitsToOfficialUnits; begin gSizeDisplayUnits[fsfPersonalizedByte] := Trim(edByte.Text); if gSizeDisplayUnits[fsfPersonalizedByte] <> '' then gSizeDisplayUnits[fsfPersonalizedByte] := ' ' + gSizeDisplayUnits[fsfPersonalizedByte]; gSizeDisplayUnits[fsfPersonalizedKilo] := ' ' + Trim(edKilo.Text); gSizeDisplayUnits[fsfPersonalizedMega] := ' ' + Trim(edMega.Text); gSizeDisplayUnits[fsfPersonalizedGiga] := ' ' + Trim(edGiga.Text); gSizeDisplayUnits[fsfPersonalizedTera] := ' ' + Trim(edTera.Text); end; end. doublecmd-1.1.30/src/frames/foptionsfilesviews.lrj0000644000175000001440000000667015104114162021315 0ustar alexxusers{"version":1,"strings":[ {"hash":174698519,"name":"tfrmoptionsfilesviews.gbsorting.caption","sourcebytes":[83,111,114,116,105,110,103],"value":"Sorting"}, {"hash":141329194,"name":"tfrmoptionsfilesviews.lblsortmethod.caption","sourcebytes":[38,83,111,114,116,32,109,101,116,104,111,100,58],"value":"&Sort method:"}, {"hash":207209658,"name":"tfrmoptionsfilesviews.lblcasesensitivity.caption","sourcebytes":[67,97,115,101,32,115,38,101,110,115,105,116,105,118,105,116,121,58],"value":"Case s&ensitivity:"}, {"hash":35834186,"name":"tfrmoptionsfilesviews.lblsortfoldermode.caption","sourcebytes":[83,111,38,114,116,105,110,103,32,100,105,114,101,99,116,111,114,105,101,115,58],"value":"So&rting directories:"}, {"hash":219756858,"name":"tfrmoptionsfilesviews.lblnewfilesposition.caption","sourcebytes":[38,73,110,115,101,114,116,32,110,101,119,32,102,105,108,101,115,58],"value":"&Insert new files:"}, {"hash":67957370,"name":"tfrmoptionsfilesviews.lblupdatedfilesposition.caption","sourcebytes":[38,77,111,118,101,32,117,112,100,97,116,101,100,32,102,105,108,101,115,58],"value":"&Move updated files:"}, {"hash":59734743,"name":"tfrmoptionsfilesviews.gbformatting.caption","sourcebytes":[70,111,114,109,97,116,116,105,110,103],"value":"Formatting"}, {"hash":45474298,"name":"tfrmoptionsfilesviews.lbldatetimeformat.caption","sourcebytes":[38,68,97,116,101,32,97,110,100,32,116,105,109,101,32,102,111,114,109,97,116,58],"value":"&Date and time format:"}, {"hash":34019434,"name":"tfrmoptionsfilesviews.lblfilesizeformat.caption","sourcebytes":[70,105,108,101,32,115,105,38,122,101,32,102,111,114,109,97,116,58],"value":"File si&ze format:"}, {"hash":7032132,"name":"tfrmoptionsfilesviews.lbldatetimeexample.caption","sourcebytes":[73,110,99,111,114,114,101,99,116,32,102,111,114,109,97,116],"value":"Incorrect format"}, {"hash":135517946,"name":"tfrmoptionsfilesviews.lblheadersizeformat.caption","sourcebytes":[38,72,101,97,100,101,114,32,102,111,114,109,97,116,58],"value":"&Header format:"}, {"hash":184800970,"name":"tfrmoptionsfilesviews.lblfootersizeformat.caption","sourcebytes":[38,70,111,111,116,101,114,32,102,111,114,109,97,116,58],"value":"&Footer format:"}, {"hash":70585306,"name":"tfrmoptionsfilesviews.lbloperationsizeformat.caption","sourcebytes":[79,38,112,101,114,97,116,105,111,110,32,115,105,122,101,32,102,111,114,109,97,116,58],"value":"O&peration size format:"}, {"hash":78125914,"name":"tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption","sourcebytes":[80,101,114,115,111,110,97,108,105,122,101,100,32,97,98,98,114,101,118,105,97,116,105,111,110,115,32,116,111,32,117,115,101,58],"value":"Personalized abbreviations to use:"}, {"hash":44698250,"name":"tfrmoptionsfilesviews.lblbyte.caption","sourcebytes":[38,66,121,116,101,58],"value":"&Byte:"}, {"hash":56408202,"name":"tfrmoptionsfilesviews.lblkilobyte.caption","sourcebytes":[38,75,105,108,111,98,121,116,101,58],"value":"&Kilobyte:"}, {"hash":122237274,"name":"tfrmoptionsfilesviews.lblmegabyte.caption","sourcebytes":[77,101,103,97,98,38,121,116,101,58],"value":"Megab&yte:"}, {"hash":226273146,"name":"tfrmoptionsfilesviews.lblgigabyte.caption","sourcebytes":[38,71,105,103,97,98,121,116,101,58],"value":"&Gigabyte:"}, {"hash":130846868,"name":"tfrmoptionsfilesviews.btndefault.caption","sourcebytes":[68,101,38,102,97,117,108,116],"value":"De&fault"}, {"hash":142389322,"name":"tfrmoptionsfilesviews.lblterabyte.caption","sourcebytes":[38,84,101,114,97,98,121,116,101,58],"value":"&Terabyte:"} ]} doublecmd-1.1.30/src/frames/foptionsfilesviews.lfm0000644000175000001440000004476615104114162021314 0ustar alexxusersinherited frmOptionsFilesViews: TfrmOptionsFilesViews Height = 550 Width = 640 HelpKeyword = '/configuration.html#ConfigView' ClientHeight = 550 ClientWidth = 640 DesignLeft = 200 DesignTop = 261 object gbSorting: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 163 Top = 6 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Sorting' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 6 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 143 ClientWidth = 624 TabOrder = 0 object lblSortMethod: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 8 Width = 104 Caption = '&Sort method:' FocusControl = cbSortMethod ParentColor = False end object cbSortMethod: TComboBox AnchorSideLeft.Control = lblSortMethod AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSortMethod AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 126 Height = 23 Top = 4 Width = 486 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Items.Strings = ( 'Alphabetical, considering accents' 'Natural sorting: alphabetical and numbers' ) Style = csDropDownList TabOrder = 0 end object lblCaseSensitivity: TLabel Left = 12 Height = 15 Top = 35 Width = 104 Caption = 'Case s&ensitivity:' FocusControl = cbCaseSensitivity ParentColor = False end object cbCaseSensitivity: TComboBox AnchorSideLeft.Control = lblCaseSensitivity AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCaseSensitivity AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 126 Height = 23 Top = 31 Width = 486 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Items.Strings = ( 'not case sensitive' 'according to locale settings (aAbBcC)' 'first upper then lower case (ABCabc)' ) Style = csDropDownList TabOrder = 1 end object lblSortFolderMode: TLabel Left = 12 Height = 15 Top = 62 Width = 104 Caption = 'So&rting directories:' FocusControl = cbSortFolderMode ParentColor = False end object cbSortFolderMode: TComboBox AnchorSideLeft.Control = lblSortFolderMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSortFolderMode AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 126 Height = 23 Top = 58 Width = 486 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Items.Strings = ( 'sort by name and show first' 'sort like files and show first' 'sort like files' ) Style = csDropDownList TabOrder = 2 end object lblNewFilesPosition: TLabel Left = 12 Height = 15 Top = 89 Width = 104 Caption = '&Insert new files:' FocusControl = cbNewFilesPosition ParentColor = False end object cbNewFilesPosition: TComboBox AnchorSideLeft.Control = lblNewFilesPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblNewFilesPosition AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 126 Height = 23 Top = 85 Width = 486 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Style = csDropDownList TabOrder = 3 end object lblUpdatedFilesPosition: TLabel Left = 12 Height = 15 Top = 116 Width = 104 Caption = '&Move updated files:' FocusControl = cbUpdatedFilesPosition ParentColor = False end object cbUpdatedFilesPosition: TComboBox AnchorSideLeft.Control = lblUpdatedFilesPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblUpdatedFilesPosition AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 126 Height = 23 Top = 112 Width = 486 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 15 Style = csDropDownList TabOrder = 4 end end object gbFormatting: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSorting AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 136 Top = 175 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Formatting' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 6 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 116 ClientWidth = 624 TabOrder = 1 object lblDateTimeFormat: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 8 Width = 117 Caption = '&Date and time format:' FocusControl = cbDateTimeFormat ParentColor = False end object cbFileSizeFormat: TComboBox AnchorSideLeft.Control = lblFileSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = speNumberOfDigitsFile Left = 139 Height = 23 Top = 31 Width = 379 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 DropDownCount = 12 ItemHeight = 15 OnChange = RefreshOurExamples Style = csDropDownList TabOrder = 1 end object lblFileSizeFormat: TLabel Left = 12 Height = 15 Top = 35 Width = 117 Caption = 'File si&ze format:' FocusControl = cbFileSizeFormat ParentColor = False end object pnlDateTime: TPanel AnchorSideLeft.Control = lblDateTimeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDateTimeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 139 Height = 23 Top = 4 Width = 473 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 10 BevelOuter = bvNone ClientHeight = 23 ClientWidth = 473 TabOrder = 0 object lblDateTimeExample: TLabel AnchorSideTop.Control = cbDateTimeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlDateTime AnchorSideRight.Side = asrBottom Left = 379 Height = 15 Top = 4 Width = 94 Anchors = [akTop, akRight] Caption = 'Incorrect format' Font.Style = [fsBold] ParentColor = False ParentFont = False end object cbDateTimeFormat: TComboBox AnchorSideRight.Control = lblDateTimeExample Left = 0 Height = 23 Top = 0 Width = 371 Align = alLeft Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 8 ItemHeight = 15 Items.Strings = ( 'yyyy/mm/dd hh:mm:ss' 'yyyy/mm/dd hh:mm' 'yy/mm/dd hh:mm' 'dd/mm/yyyy hh:mm:ss' 'dd/mm/yyyy hh:mm' 'dd/mm/yy hh:mm' 'dd/mm/yyyy' 'dd/mm/yy' ) OnChange = cbDateTimeFormatChange TabOrder = 0 end end object speNumberOfDigitsFile: TSpinEdit AnchorSideLeft.Control = cbFileSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFileSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblFileSizeExample Left = 524 Height = 23 Top = 31 Width = 50 Anchors = [akTop, akRight] MaxValue = 3 OnChange = RefreshOurExamples TabOrder = 2 end object lblHeaderSizeFormat: TLabel Left = 12 Height = 20 Top = 72 Width = 148 Caption = '&Header format:' FocusControl = cbHeaderSizeFormat ParentColor = False end object cbHeaderSizeFormat: TComboBox AnchorSideLeft.Control = lblHeaderSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHeaderSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = speNumberOfDigitsHeader Left = 170 Height = 28 Top = 68 Width = 335 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 DropDownCount = 12 ItemHeight = 15 OnChange = RefreshOurExamples Style = csDropDownList TabOrder = 3 end object speNumberOfDigitsHeader: TSpinEdit AnchorSideLeft.Control = cbHeaderSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbHeaderSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblHeaderSizeExample Left = 511 Height = 28 Top = 68 Width = 63 Anchors = [akTop, akRight] MaxValue = 3 OnChange = RefreshOurExamples TabOrder = 4 end object lblHeaderSizeExample: TLabel AnchorSideTop.Control = cbHeaderSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 580 Height = 12 Top = 63 Width = 32 Alignment = taRightJustify Anchors = [akTop, akRight] Constraints.MinHeight = 12 Constraints.MinWidth = 32 Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblFooterSizeFormat: TLabel Left = 12 Height = 20 Top = 104 Width = 148 Caption = '&Footer format:' FocusControl = cbFooterSizeFormat ParentColor = False end object cbFooterSizeFormat: TComboBox AnchorSideLeft.Control = lblFooterSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFooterSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = speNumberOfDigitsFooter Left = 170 Height = 28 Top = 100 Width = 335 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 DropDownCount = 12 ItemHeight = 20 OnChange = RefreshOurExamples Style = csDropDownList TabOrder = 5 end object speNumberOfDigitsFooter: TSpinEdit AnchorSideLeft.Control = cbFooterSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFooterSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblFooterSizeExample Left = 511 Height = 28 Top = 100 Width = 63 Anchors = [akTop, akRight] MaxValue = 3 OnChange = RefreshOurExamples TabOrder = 6 end object lblFooterSizeExample: TLabel AnchorSideTop.Control = cbFooterSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 580 Height = 12 Top = 108 Width = 32 Alignment = taRightJustify Anchors = [akTop, akRight] Constraints.MinHeight = 12 Constraints.MinWidth = 32 Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblFileSizeExample: TLabel AnchorSideTop.Control = cbFileSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 580 Height = 12 Top = 36 Width = 32 Alignment = taRightJustify Anchors = [akTop, akRight] Constraints.MinHeight = 12 Constraints.MinWidth = 32 Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblOperationSizeExample: TLabel AnchorSideTop.Control = cbOperationSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 580 Height = 12 Top = 90 Width = 32 Alignment = taRightJustify Anchors = [akTop, akRight] Constraints.MinHeight = 12 Constraints.MinWidth = 32 Font.Style = [fsBold] ParentColor = False ParentFont = False end object speNumberOfDigitsOperation: TSpinEdit AnchorSideLeft.Control = cbOperationSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbOperationSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblOperationSizeExample Left = 524 Height = 23 Top = 85 Width = 50 Anchors = [akTop, akRight] MaxValue = 3 OnChange = RefreshOurExamples TabOrder = 8 end object cbOperationSizeFormat: TComboBox AnchorSideLeft.Control = lblOperationSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblOperationSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = speNumberOfDigitsOperation Left = 139 Height = 23 Top = 85 Width = 379 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 DropDownCount = 12 ItemHeight = 15 OnChange = RefreshOurExamples Style = csDropDownList TabOrder = 7 end object lblOperationSizeFormat: TLabel Left = 12 Height = 15 Top = 89 Width = 117 Caption = 'O&peration size format:' FocusControl = cbOperationSizeFormat ParentColor = False end end object gbPersonalizedAbbreviationToUse: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbFormatting AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 55 Top = 317 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Personalized abbreviations to use:' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 2 ClientHeight = 35 ClientWidth = 624 TabOrder = 2 object lblByte: TLabel AnchorSideLeft.Control = gbPersonalizedAbbreviationToUse AnchorSideTop.Control = gbPersonalizedAbbreviationToUse AnchorSideBottom.Side = asrBottom Left = 20 Height = 15 Top = 8 Width = 26 BorderSpacing.Left = 20 BorderSpacing.Top = 8 Caption = '&Byte:' FocusControl = edByte ParentColor = False end object edByte: TEdit AnchorSideLeft.Control = lblByte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 48 Height = 23 Top = 4 Width = 44 MaxLength = 10 OnChange = RefreshOurExamples TabOrder = 0 end object lblKilobyte: TLabel AnchorSideLeft.Control = edByte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblMegabyte AnchorSideTop.Side = asrCenter Left = 107 Height = 15 Top = 8 Width = 46 BorderSpacing.Left = 15 Caption = '&Kilobyte:' FocusControl = edKilo ParentColor = False end object edKilo: TEdit AnchorSideLeft.Control = lblKilobyte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 155 Height = 23 Top = 4 Width = 44 MaxLength = 10 OnChange = RefreshOurExamples TabOrder = 1 end object edMega: TEdit AnchorSideLeft.Control = lblMegabyte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 272 Height = 23 Top = 4 Width = 44 MaxLength = 10 OnChange = RefreshOurExamples TabOrder = 2 end object lblMegabyte: TLabel AnchorSideLeft.Control = edKilo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 214 Height = 15 Top = 8 Width = 56 BorderSpacing.Left = 15 Caption = 'Megab&yte:' FocusControl = edMega ParentColor = False end object lblGigabyte: TLabel AnchorSideLeft.Control = edMega AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 331 Height = 15 Top = 8 Width = 50 BorderSpacing.Left = 15 Caption = '&Gigabyte:' FocusControl = edGiga ParentColor = False end object edGiga: TEdit AnchorSideLeft.Control = lblGigabyte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 383 Height = 23 Top = 4 Width = 44 MaxLength = 10 OnChange = RefreshOurExamples TabOrder = 3 end object btnDefault: TButton AnchorSideLeft.Control = edTera AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 551 Height = 25 Top = 3 Width = 64 AutoSize = True BorderSpacing.Left = 15 Caption = 'De&fault' OnClick = btnDefaultClick TabOrder = 5 end object edTera: TEdit AnchorSideLeft.Control = lblTerabyte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 492 Height = 23 Top = 4 Width = 44 MaxLength = 10 OnChange = RefreshOurExamples TabOrder = 4 end object lblTerabyte: TLabel AnchorSideLeft.Control = edGiga AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblByte AnchorSideTop.Side = asrCenter Left = 442 Height = 15 Top = 8 Width = 48 BorderSpacing.Left = 15 Caption = '&Terabyte:' FocusControl = edTera ParentColor = False end end enddoublecmd-1.1.30/src/frames/foptionsfilesearch.pas0000644000175000001440000000771415104114162021236 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File search options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsFileSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, KASComboBox, DividerBevel, fOptionsFrame; type { TfrmOptionsFileSearch } TfrmOptionsFileSearch = class(TOptionsEditor) cbInitiallyClearFileMask: TCheckBox; cbNewSearchFilters: TComboBoxAutoWidth; cbShowMenuBarInFindFiles: TCheckBox; cbPartialNameSearch: TCheckBox; cbSearchDefaultTemplate: TComboBoxAutoWidth; dbTextSearch: TDividerBevel; gbFileSearch: TGroupBox; lblNewSearchFilters: TLabel; lblSearchDefaultTemplate: TLabel; rbUseMmapInSearch: TRadioButton; rbUseStreamInSearch: TRadioButton; private FLoading: Boolean; procedure FillTemplatesList(ListItems: TStrings); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsFileSearch } class function TfrmOptionsFileSearch.GetIconIndex: Integer; begin Result := 41; end; class function TfrmOptionsFileSearch.GetTitle: String; begin Result := rsOptionsEditorFileSearch; end; procedure TfrmOptionsFileSearch.Init; begin FillTemplatesList(cbSearchDefaultTemplate.Items); ParseLineToList(rsNewSearchClearFilterOptions, cbNewSearchFilters.Items); end; procedure TfrmOptionsFileSearch.FillTemplatesList(ListItems: TStrings); begin gSearchTemplateList.LoadToStringList(ListItems); ListItems.Insert(0, rsOptHotkeysNoHotkey); end; procedure TfrmOptionsFileSearch.Load; begin FLoading := True; rbUseMmapInSearch.Checked := gUseMmapInSearch; cbPartialNameSearch.Checked := gPartialNameSearch; cbInitiallyClearFileMask.Checked := gInitiallyClearFileMask; cbNewSearchFilters.ItemIndex := integer(gNewSearchClearFiltersAction); cbShowMenuBarInFindFiles.Checked := gShowMenuBarInFindFiles; cbSearchDefaultTemplate.ItemIndex := cbSearchDefaultTemplate.Items.IndexOf(gSearchDefaultTemplate); if cbSearchDefaultTemplate.ItemIndex < 0 then cbSearchDefaultTemplate.ItemIndex := 0; FLoading := False; end; function TfrmOptionsFileSearch.Save: TOptionsEditorSaveFlags; begin Result := []; gUseMmapInSearch := rbUseMmapInSearch.Checked; gPartialNameSearch := cbPartialNameSearch.Checked; gInitiallyClearFileMask := cbInitiallyClearFileMask.Checked; gNewSearchClearFiltersAction := TFiltersOnNewSearch(cbNewSearchFilters.ItemIndex); gShowMenuBarInFindFiles := cbShowMenuBarInFindFiles.Checked; if cbSearchDefaultTemplate.ItemIndex > 0 then gSearchDefaultTemplate:= cbSearchDefaultTemplate.Text else begin gSearchDefaultTemplate:= EmptyStr; end; end; constructor TfrmOptionsFileSearch.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FLoading := False; end; end. doublecmd-1.1.30/src/frames/foptionsfilesearch.lrj0000644000175000001440000000442215104114162021233 0ustar alexxusers{"version":1,"strings":[ {"hash":131500776,"name":"tfrmoptionsfilesearch.gbfilesearch.caption","sourcebytes":[70,105,108,101,32,115,101,97,114,99,104],"value":"File search"}, {"hash":166353845,"name":"tfrmoptionsfilesearch.cbpartialnamesearch.caption","sourcebytes":[38,83,101,97,114,99,104,32,102,111,114,32,112,97,114,116,32,111,102,32,102,105,108,101,32,110,97,109,101],"value":"&Search for part of file name"}, {"hash":184749170,"name":"tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption","sourcebytes":[87,104,101,110,32,108,97,117,110,99,104,105,110,103,32,102,105,108,101,32,115,101,97,114,99,104,44,32,99,108,101,97,114,32,102,105,108,101,32,109,97,115,107,32,102,105,108,116,101,114],"value":"When launching file search, clear file mask filter"}, {"hash":103938922,"name":"tfrmoptionsfilesearch.lblnewsearchfilters.caption","sourcebytes":[67,117,114,114,101,110,116,32,102,105,108,116,101,114,115,32,119,105,116,104,32,34,78,101,119,32,115,101,97,114,99,104,34,32,98,117,116,116,111,110,58],"value":"Current filters with \"New search\" button:"}, {"hash":189097922,"name":"tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption","sourcebytes":[83,104,111,119,32,109,101,110,117,32,98,97,114,32,105,110,32,34,70,105,110,100,32,102,105,108,101,115,34],"value":"Show menu bar in \"Find files\""}, {"hash":189046922,"name":"tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption","sourcebytes":[68,101,102,97,117,108,116,32,115,101,97,114,99,104,32,116,101,109,112,108,97,116,101,58],"value":"Default search template:"}, {"hash":68368435,"name":"tfrmoptionsfilesearch.dbtextsearch.caption","sourcebytes":[84,101,120,116,32,115,101,97,114,99,104,32,105,110,32,102,105,108,101,115],"value":"Text search in files"}, {"hash":182075603,"name":"tfrmoptionsfilesearch.rbusemmapinsearch.caption","sourcebytes":[85,115,101,32,109,101,109,111,114,121,32,109,97,112,112,105,110,103,32,102,111,114,32,115,101,97,114,99,104,32,116,101,38,120,116,32,105,110,32,102,105,108,101,115],"value":"Use memory mapping for search te&xt in files"}, {"hash":268007779,"name":"tfrmoptionsfilesearch.rbusestreaminsearch.caption","sourcebytes":[38,85,115,101,32,115,116,114,101,97,109,32,102,111,114,32,115,101,97,114,99,104,32,116,101,120,116,32,105,110,32,102,105,108,101,115],"value":"&Use stream for search text in files"} ]} doublecmd-1.1.30/src/frames/foptionsfilesearch.lfm0000644000175000001440000001075215104114162021225 0ustar alexxusersinherited frmOptionsFileSearch: TfrmOptionsFileSearch Height = 649 Width = 734 HelpKeyword = '/configuration.html#ConfigSearch' ChildSizing.LeftRightSpacing = 6 ClientHeight = 649 ClientWidth = 734 DesignLeft = 612 DesignTop = 188 object gbFileSearch: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 220 Top = 6 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'File search' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ClientHeight = 200 ClientWidth = 718 TabOrder = 0 object cbPartialNameSearch: TCheckBox AnchorSideLeft.Control = rbUseStreamInSearch AnchorSideTop.Control = gbFileSearch Left = 10 Height = 19 Top = 6 Width = 163 BorderSpacing.Top = 6 Caption = '&Search for part of file name' TabOrder = 0 end object cbInitiallyClearFileMask: TCheckBox AnchorSideLeft.Control = rbUseStreamInSearch AnchorSideTop.Control = cbPartialNameSearch AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 31 Width = 271 BorderSpacing.Top = 6 Caption = 'When launching file search, clear file mask filter' TabOrder = 1 end object lblNewSearchFilters: TLabel AnchorSideTop.Control = cbNewSearchFilters AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 58 Width = 214 Caption = 'Current filters with "New search" button:' ParentColor = False end object cbNewSearchFilters: TComboBoxAutoWidth AnchorSideLeft.Control = lblNewSearchFilters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbInitiallyClearFileMask AnchorSideTop.Side = asrBottom Left = 230 Height = 23 Top = 54 Width = 100 BorderSpacing.Left = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 2 end object cbShowMenuBarInFindFiles: TCheckBox AnchorSideLeft.Control = rbUseStreamInSearch AnchorSideTop.Control = cbNewSearchFilters AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 83 Width = 176 BorderSpacing.Top = 6 Caption = 'Show menu bar in "Find files"' TabOrder = 3 end object lblSearchDefaultTemplate: TLabel AnchorSideLeft.Control = cbPartialNameSearch AnchorSideTop.Control = cbSearchDefaultTemplate AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 110 Width = 128 Caption = 'Default search template:' ParentColor = False end object cbSearchDefaultTemplate: TComboBoxAutoWidth AnchorSideLeft.Control = lblSearchDefaultTemplate AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbShowMenuBarInFindFiles AnchorSideTop.Side = asrBottom Left = 144 Height = 23 Top = 106 Width = 100 BorderSpacing.Left = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 4 end object dbTextSearch: TDividerBevel AnchorSideLeft.Control = gbFileSearch AnchorSideTop.Control = cbSearchDefaultTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFileSearch AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 133 Width = 698 Caption = 'Text search in files' Anchors = [akTop, akLeft, akRight] end object rbUseMmapInSearch: TRadioButton AnchorSideLeft.Control = gbFileSearch AnchorSideTop.Control = dbTextSearch AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 152 Width = 252 Caption = 'Use memory mapping for search te&xt in files' TabOrder = 5 end object rbUseStreamInSearch: TRadioButton AnchorSideLeft.Control = rbUseMmapInSearch AnchorSideTop.Control = rbUseMmapInSearch AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 177 Width = 192 BorderSpacing.Top = 6 Caption = '&Use stream for search text in files' Checked = True TabOrder = 6 TabStop = True end end end doublecmd-1.1.30/src/frames/foptionsfilepanelscolors.pas0000644000175000001440000003473115104114162022474 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File panels colors options page Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsFilePanelsColors; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Graphics, Classes, SysUtils, ComCtrls, StdCtrls, ColorBox, ExtCtrls, Dialogs, DividerBevel, LMessages, KASComboBox, KASToolPanel, //DC uColumns, fOptionsFrame, uColumnsFileView, Controls; type { TfrmOptionsFilePanelsColors } TfrmOptionsFilePanelsColors = class(TOptionsEditor) btnResetToDCDefault: TButton; cbAllowOverColor: TCheckBox; cbPathActiveText: TKASColorBoxButton; cbPathInactiveText: TKASColorBoxButton; cbUseCursorBorder: TCheckBox; cbCursorBorderColor: TKASColorBoxButton; dbOptionsVertical: TDividerBevel; lblPathInactiveText: TLabel; lblPathActiveText: TLabel; lblPreview: TDividerBevel; lblTextColor: TLabel; cbTextColor: TKASColorBoxButton; lblBackgroundColor: TLabel; cbBackColor: TKASColorBoxButton; lblBackgroundColor2: TLabel; cbBackColor2: TKASColorBoxButton; lblMarkColor: TLabel; cbMarkColor: TKASColorBoxButton; lblCursorColor: TLabel; cbCursorColor: TKASColorBoxButton; lblCursorText: TLabel; cbCursorText: TKASColorBoxButton; lblInactiveCursorColor: TLabel; cbInactiveCursorColor: TKASColorBoxButton; lblInactiveMarkColor: TLabel; cbInactiveMarkColor: TKASColorBoxButton; cbbUseInvertedSelection: TCheckBox; cbbUseInactiveSelColor: TCheckBox; cbbUseFrameCursor: TCheckBox; lblInactivePanelBrightness: TLabel; pnlLeftPreview: TPanel; pnlPreviewCont: TKASToolPanel; pnlRightPreview: TPanel; spPanelSplitter: TSplitter; tbInactivePanelBrightness: TTrackBar; dbCurrentPath: TDividerBevel; lblPathActiveBack: TLabel; cbPathActiveBack: TKASColorBoxButton; lblPathInactiveBack: TLabel; cbPathInactiveBack: TKASColorBoxButton; optColorDialog: TColorDialog; procedure btnResetToDCDefaultClick(Sender: TObject); procedure cbbUseFrameCursorChange(Sender: TObject); procedure cbColorBoxChange(Sender: TObject); procedure cbbUseInactiveSelColorChange(Sender: TObject); procedure cbPathActiveTextChange(Sender: TObject); procedure cbPathInactiveBackChange(Sender: TObject); procedure cbPathInactiveTextChange(Sender: TObject); procedure cbUseCursorBorderChange(Sender: TObject); procedure tbInactivePanelBrightnessChange(Sender: TObject); procedure cbPathActiveBackChange(Sender: TObject); procedure RefreshPreviewPanel; procedure pnlLeftPreviewEnter(Sender: TObject); procedure pnlRightPreviewEnter(Sender: TObject); function JustForConfigDim(AColor: TColor): TColor; function JustForConfigNoDim(AColor: TColor): TColor; private bLoadCompleted: boolean; PreviewLeftPanel: TColumnsFileView; PreviewRightPanel: TColumnsFileView; ColumnClass: TPanelColumnsClass; ColPrm: TColPrm; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Forms, //DC uSampleForConfigFileSource, uFileFunctions, fMain, uLng, uGlobs, uDCUtils; { TfrmOptionsFilePanelsColors } { TfrmOptionsFilePanelsColors.GetIconIndex } class function TfrmOptionsFilePanelsColors.GetIconIndex: integer; begin Result := 20; end; { TfrmOptionsFilePanelsColors.GetTitle } class function TfrmOptionsFilePanelsColors.GetTitle: string; begin Result := rsOptionsEditorFilePanels; end; { TfrmOptionsFilePanelsColors.Load } procedure TfrmOptionsFilePanelsColors.Load; begin bLoadCompleted := False; //1. Let's create the element we'll need. ColPrm := TColPrm.Create; ColumnClass := TPanelColumnsClass.Create; //2. Let's load the current settings to be shown on screen with gColors.FilePanel^ do begin cbTextColor.Selected := ForeColor; cbBackColor.Selected := BackColor; cbBackColor2.Selected := BackColor2; cbMarkColor.Selected := MarkColor; cbCursorColor.Selected := CursorColor; cbCursorText.Selected := CursorText; cbInactiveCursorColor.Selected := InactiveCursorColor; cbInactiveMarkColor.Selected := InactiveMarkColor; cbCursorBorderColor.Selected := CursorBorderColor; end; cbAllowOverColor.Checked := gAllowOverColor; cbbUseInvertedSelection.Checked := gUseInvertedSelection; cbbUseInactiveSelColor.Checked := gUseInactiveSelColor; cbbUseFrameCursor.Checked := gUseFrameCursor; cbUseCursorBorder.Checked := gUseCursorBorder; tbInactivePanelBrightness.Position := gInactivePanelBrightness; cbbUseFrameCursorChange(cbbUseFrameCursor); cbbUseInactiveSelColorChange(cbbUseInactiveSelColor); //3. Let's create our preview panels PreviewLeftPanel := TColumnsFileView.Create(pnlLeftPreview, TSampleForConfigFileSource.Create, SAMPLE_PATH); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); PreviewLeftPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewRightPanel := TColumnsFileView.Create(pnlRightPreview, TSampleForConfigFileSource.Create, SAMPLE_PATH); PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.SetGridFunctionDim(@JustForConfigDim); //4. Let's define which ColumnClass it's gonna follow PreviewLeftPanel.ActiveColmSlave := ColumnClass; PreviewLeftPanel.isSlave := True; PreviewLeftPanel.Demo := True; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := True; PreviewRightPanel.Demo := True; with gColors.Path^ do begin cbPathActiveText.Selected := ActiveFontColor; cbPathActiveBack.Selected := ActiveColor; cbPathInactiveText.Selected := InactiveFontColor; cbPathInactiveBack.Selected := InactiveColor; end; //5. Let's refresh the panel so we will show something RefreshPreviewPanel; //6. Good. Loading is completed. bLoadCompleted := True; end; { TfrmOptionsFilePanelsColors.Save } function TfrmOptionsFilePanelsColors.Save: TOptionsEditorSaveFlags; begin with gColors.FilePanel^ do begin ForeColor := cbTextColor.Selected; BackColor := cbBackColor.Selected; BackColor2 := cbBackColor2.Selected; MarkColor := cbMarkColor.Selected; CursorColor := cbCursorColor.Selected; CursorText := cbCursorText.Selected; InactiveCursorColor := cbInactiveCursorColor.Selected; InactiveMarkColor := cbInactiveMarkColor.Selected; CursorBorderColor := cbCursorBorderColor.Selected; end; gUseInvertedSelection := cbbUseInvertedSelection.Checked; gAllowOverColor := cbAllowOverColor.Checked; gUseInactiveSelColor := cbbUseInactiveSelColor.Checked; gUseFrameCursor := cbbUseFrameCursor.Checked; gUseCursorBorder := cbUseCursorBorder.Checked; gInactivePanelBrightness := tbInactivePanelBrightness.Position; with gColors.Path^ do begin ActiveFontColor:= cbPathActiveText.Selected; ActiveColor:= cbPathActiveBack.Selected; InactiveFontColor:= cbPathInactiveText.Selected; InactiveColor:= cbPathInactiveBack.Selected; end; Result := []; end; procedure TfrmOptionsFilePanelsColors.CMThemeChanged(var Message: TLMessage); begin LoadSettings; end; { TfrmOptionsFilePanelsColors.cbColorBoxChange } procedure TfrmOptionsFilePanelsColors.cbColorBoxChange(Sender: TObject); begin if bLoadCompleted then RefreshPreviewPanel; end; procedure TfrmOptionsFilePanelsColors.btnResetToDCDefaultClick(Sender: TObject); begin cbTextColor.Selected := clWindowText; cbBackColor.Selected := clWindow; cbBackColor2.Selected := clWindow; cbMarkColor.Selected := clRed; cbCursorColor.Selected := clHighlight; cbCursorText.Selected := clHighlightText; cbInactiveCursorColor.Selected := clInactiveCaption; cbInactiveMarkColor.Selected := clMaroon; cbAllowOverColor.Checked := True; cbbUseInvertedSelection.Checked := False; cbbUseInactiveSelColor.Checked := False; cbbUseFrameCursor.Checked := False; cbUseCursorBorder.Checked := False; cbCursorBorderColor.Selected := clHighlight; tbInactivePanelBrightness.Position := 100; cbPathActiveText.Selected := clHighlightText; cbPathActiveBack.Selected := clHighlight; cbPathInactiveText.Selected := clBtnText; cbPathInactiveBack.Selected := clBtnFace; cbbUseFrameCursorChange(cbbUseFrameCursor); end; procedure TfrmOptionsFilePanelsColors.cbbUseFrameCursorChange(Sender: TObject); begin cbUseCursorBorder.Enabled := not cbbUseFrameCursor.Checked; lblCursorText.Enabled := not cbbUseFrameCursor.Checked; cbCursorText.Enabled := not cbbUseFrameCursor.Checked; cbUseCursorBorderChange(cbUseCursorBorder); end; { TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange } procedure TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange(Sender: TObject); begin lblInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; lblInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; if bLoadCompleted then begin RefreshPreviewPanel; end; end; procedure TfrmOptionsFilePanelsColors.cbPathActiveTextChange(Sender: TObject); begin PreviewLeftPanel.Header.PathLabel.ActiveFontColor:= cbPathActiveText.Selected; PreviewRightPanel.Header.PathLabel.ActiveFontColor:= cbPathActiveText.Selected; end; { TfrmOptionsFilePanelsColors.cbIndColorChange } procedure TfrmOptionsFilePanelsColors.cbPathActiveBackChange(Sender: TObject); begin PreviewLeftPanel.Header.PathLabel.ActiveColor:= cbPathActiveBack.Selected; PreviewRightPanel.Header.PathLabel.ActiveColor:= cbPathActiveBack.Selected; end; procedure TfrmOptionsFilePanelsColors.cbPathInactiveBackChange(Sender: TObject); begin PreviewLeftPanel.Header.PathLabel.InactiveColor:= cbPathInactiveBack.Selected; PreviewRightPanel.Header.PathLabel.InactiveColor:= cbPathInactiveBack.Selected; end; procedure TfrmOptionsFilePanelsColors.cbPathInactiveTextChange(Sender: TObject); begin PreviewLeftPanel.Header.PathLabel.InactiveFontColor:= cbPathInactiveText.Selected; PreviewRightPanel.Header.PathLabel.InactiveFontColor:= cbPathInactiveText.Selected; end; procedure TfrmOptionsFilePanelsColors.cbUseCursorBorderChange(Sender: TObject); begin cbCursorBorderColor.Enabled := cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled; if bLoadCompleted then RefreshPreviewPanel; end; { TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange } procedure TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange(Sender: TObject); begin if bLoadCompleted then begin PreviewLeftPanel.UpdateColumnsView; PreviewRightPanel.UpdateColumnsView; end; end; { TfrmOptionsFilePanelsColors.RefreshPreviewPanel } procedure TfrmOptionsFilePanelsColors.RefreshPreviewPanel; const DCFunc = '[DC().%s{}]'; var indx: integer; begin //Set color ColPrm.FontName := gFonts[dcfMain].Name; ColPrm.FontSize := gFonts[dcfMain].Size; ColPrm.FontStyle := gFonts[dcfMain].Style; ColPrm.Overcolor := cbAllowOverColor.Checked; ColPrm.UseInvertedSelection := cbbUseInvertedSelection.Checked; ColPrm.UseInactiveSelColor := cbbUseInactiveSelColor.Checked; ColPrm.TextColor := cbTextColor.Selected; ColPrm.Background := cbBackColor.Selected; ColPrm.Background2 := cbBackColor2.Selected; ColPrm.MarkColor := cbMarkColor.Selected; ColPrm.CursorColor := cbCursorColor.Selected; ColPrm.CursorText := cbCursorText.Selected; ColPrm.InactiveCursorColor := cbInactiveCursorColor.Selected; ColPrm.InactiveMarkColor := cbInactiveMarkColor.Selected; ColumnClass.Clear; ColumnClass.Add(rsColName, Format(DCFunc, [TFileFunctionStrings[fsfNameNoExtension]]), 200, taLeftJustify); ColumnClass.Add(rsColExt, Format(DCFunc, [TFileFunctionStrings[fsfExtension]]), 70, taLeftJustify); ColumnClass.Add(rsColSize, Format(DCFunc, [TFileFunctionStrings[fsfSize]]), 90, taRightJustify); for indx := 0 to pred(ColumnClass.Count) do ColumnClass.SetColumnPrm(Indx, ColPrm); ColumnClass.CustomView := True; ColumnClass.UseFrameCursor := cbbUseFrameCursor.Checked; ColumnClass.CursorBorderColor := clRed; ColumnClass.UseFrameCursor := cbbUseFrameCursor.Checked; ColumnClass.UseCursorBorder := cbUseCursorBorder.Checked; ColumnClass.CursorBorderColor := cbCursorBorderColor.Selected; ColumnClass.Name := 'JustForSetup'; PreviewLeftPanel.UpdateColumnsView; PreviewRightPanel.UpdateColumnsView; end; { TfrmOptionsFilePanelsColors.pnlLeftPreviewEnter } procedure TfrmOptionsFilePanelsColors.pnlLeftPreviewEnter(Sender: TObject); begin PreviewRightPanel.SetGridFunctionDim(@JustForConfigDim); PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewLeftPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsFilePanelsColors.pnlRightPreviewEnter } procedure TfrmOptionsFilePanelsColors.pnlRightPreviewEnter(Sender: TObject); begin PreviewLeftPanel.SetGridFunctionDim(@JustForConfigDim); PreviewLeftPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewRightPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsFilePanelsColors.JustForConfigDim } function TfrmOptionsFilePanelsColors.JustForConfigDim(AColor: TColor): TColor; begin if (tbInactivePanelBrightness.Position < 100) then Result := ModColor(AColor, tbInactivePanelBrightness.Position) else Result := AColor; end; { TfrmOptionsFilePanelsColors.JustForConfigNoDim } function TfrmOptionsFilePanelsColors.JustForConfigNoDim(AColor: TColor): TColor; begin Result := AColor; end; end. doublecmd-1.1.30/src/frames/foptionsfilepanelscolors.lrj0000644000175000001440000001061715104114162022475 0ustar alexxusers{"version":1,"strings":[ {"hash":34273594,"name":"tfrmoptionsfilepanelscolors.lbltextcolor.caption","sourcebytes":[84,38,101,120,116,32,67,111,108,111,114,58],"value":"T&ext Color:"}, {"hash":168950122,"name":"tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption","sourcebytes":[66,97,99,38,107,103,114,111,117,110,100,58],"value":"Bac&kground:"}, {"hash":19266122,"name":"tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption","sourcebytes":[66,97,99,107,103,38,114,111,117,110,100,32,50,58],"value":"Backg&round 2:"}, {"hash":104316554,"name":"tfrmoptionsfilepanelscolors.lblmarkcolor.caption","sourcebytes":[38,77,97,114,107,32,67,111,108,111,114,58],"value":"&Mark Color:"}, {"hash":158176330,"name":"tfrmoptionsfilepanelscolors.lblcursorcolor.caption","sourcebytes":[67,38,117,114,115,111,114,32,67,111,108,111,114,58],"value":"C&ursor Color:"}, {"hash":258898298,"name":"tfrmoptionsfilepanelscolors.lblcursortext.caption","sourcebytes":[67,117,114,115,111,114,32,84,101,38,120,116,58],"value":"Cursor Te&xt:"}, {"hash":83514154,"name":"tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,67,117,114,115,111,114,32,67,111,108,111,114,58],"value":"Inactive Cursor Color:"}, {"hash":132983626,"name":"tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,77,97,114,107,32,67,111,108,111,114,58],"value":"Inactive Mark Color:"}, {"hash":213836862,"name":"tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption","sourcebytes":[85,38,115,101,32,73,110,118,101,114,116,101,100,32,83,101,108,101,99,116,105,111,110],"value":"U&se Inverted Selection"}, {"hash":194038066,"name":"tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption","sourcebytes":[85,115,101,32,73,110,97,99,116,105,118,101,32,83,101,108,32,67,111,108,111,114],"value":"Use Inactive Sel Color"}, {"hash":237530674,"name":"tfrmoptionsfilepanelscolors.cbbuseframecursor.caption","sourcebytes":[85,115,101,32,38,70,114,97,109,101,32,67,117,114,115,111,114],"value":"Use &Frame Cursor"}, {"hash":195339690,"name":"tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption","sourcebytes":[38,66,114,105,103,104,116,110,101,115,115,32,108,101,118,101,108,32,111,102,32,105,110,97,99,116,105,118,101,32,112,97,110,101,108,58],"value":"&Brightness level of inactive panel:"}, {"hash":30011496,"name":"tfrmoptionsfilepanelscolors.dbcurrentpath.caption","sourcebytes":[67,117,114,114,101,110,116,32,80,97,116,104],"value":"Current Path"}, {"hash":249486954,"name":"tfrmoptionsfilepanelscolors.lblpathactiveback.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,58],"value":"Background:"}, {"hash":230984106,"name":"tfrmoptionsfilepanelscolors.lblpathinactiveback.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,66,97,99,107,103,114,111,117,110,100,58],"value":"Inactive Background:"}, {"hash":217190446,"name":"tfrmoptionsfilepanelscolors.lblpreview.caption","sourcebytes":[66,101,108,111,119,32,105,115,32,97,32,112,114,101,118,105,101,119,46,32,89,111,117,32,109,97,121,32,109,111,118,101,32,99,117,114,115,111,114,44,32,115,101,108,101,99,116,32,102,105,108,101,32,97,110,100,32,103,101,116,32,105,109,109,101,100,105,97,116,101,108,121,32,97,110,32,97,99,116,117,97,108,32,108,111,111,107,32,97,110,100,32,102,101,101,108,32,111,102,32,116,104,101,32,118,97,114,105,111,117,115,32,115,101,116,116,105,110,103,115,46],"value":"Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings."}, {"hash":207563970,"name":"tfrmoptionsfilepanelscolors.cbusecursorborder.caption","sourcebytes":[67,117,114,115,111,114,32,98,111,114,100,101,114],"value":"Cursor border"}, {"hash":157403508,"name":"tfrmoptionsfilepanelscolors.btnresettodcdefault.caption","sourcebytes":[82,101,115,101,116,32,116,111,32,68,67,32,100,101,102,97,117,108,116],"value":"Reset to DC default"}, {"hash":266427794,"name":"tfrmoptionsfilepanelscolors.cballowovercolor.caption","sourcebytes":[65,108,108,111,119,32,79,118,101,114,99,111,108,111,114],"value":"Allow Overcolor"}, {"hash":130444538,"name":"tfrmoptionsfilepanelscolors.lblpathinactivetext.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,84,101,120,116,32,67,111,108,111,114,58],"value":"Inactive Text Color:"}, {"hash":81852730,"name":"tfrmoptionsfilepanelscolors.lblpathactivetext.caption","sourcebytes":[84,101,120,116,32,67,111,108,111,114,58],"value":"Text Color:"} ]} doublecmd-1.1.30/src/frames/foptionsfilepanelscolors.lfm0000644000175000001440000004173615104114162022472 0ustar alexxusersinherited frmOptionsFilePanelsColors: TfrmOptionsFilePanelsColors Height = 521 Width = 880 HelpKeyword = '/configuration.html#ConfigColorPanels' ClientHeight = 521 ClientWidth = 880 DesignLeft = 325 DesignTop = 153 object lblTextColor: TLabel[0] AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbTextColor Left = 100 Height = 15 Top = 13 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'T&ext Color:' FocusControl = cbTextColor ParentColor = False end object cbTextColor: TKASColorBoxButton[1] Left = 160 Height = 24 Top = 8 Width = 126 TabOrder = 0 Constraints.MinWidth = 100 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblBackgroundColor: TLabel[2] AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 89 Height = 15 Top = 41 Width = 67 Anchors = [akTop, akRight] Caption = 'Bac&kground:' FocusControl = cbBackColor ParentColor = False end object cbBackColor: TKASColorBoxButton[3] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 36 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 1 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblBackgroundColor2: TLabel[4] AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 80 Height = 15 Top = 69 Width = 76 Anchors = [akTop, akRight] Caption = 'Backg&round 2:' FocusControl = cbBackColor2 ParentColor = False end object cbBackColor2: TKASColorBoxButton[5] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 64 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 2 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblMarkColor: TLabel[6] AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 94 Height = 15 Top = 97 Width = 62 Anchors = [akTop, akRight] Caption = '&Mark Color:' FocusControl = cbMarkColor ParentColor = False end object cbMarkColor: TKASColorBoxButton[7] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 92 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 3 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblCursorColor: TLabel[8] AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 86 Height = 15 Top = 125 Width = 70 Anchors = [akTop, akRight] Caption = 'C&ursor Color:' FocusControl = cbCursorColor ParentColor = False end object cbCursorColor: TKASColorBoxButton[9] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 120 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 4 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblCursorText: TLabel[10] AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 94 Height = 15 Top = 153 Width = 62 Anchors = [akTop, akRight] Caption = 'Cursor Te&xt:' FocusControl = cbCursorText ParentColor = False end object cbCursorText: TKASColorBoxButton[11] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 148 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 5 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblInactiveCursorColor: TLabel[12] AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 42 Height = 15 Top = 181 Width = 114 Anchors = [akTop, akRight] Caption = 'Inactive Cursor Color:' FocusControl = cbInactiveCursorColor ParentColor = False end object cbInactiveCursorColor: TKASColorBoxButton[13] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 176 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 6 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object lblInactiveMarkColor: TLabel[14] AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 50 Height = 15 Top = 209 Width = 106 Anchors = [akTop, akRight] Caption = 'Inactive Mark Color:' FocusControl = cbInactiveMarkColor ParentColor = False end object cbInactiveMarkColor: TKASColorBoxButton[15] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 204 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 7 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object dbOptionsVertical: TDividerBevel[16] AnchorSideLeft.Control = cbTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 298 Height = 240 Top = 16 Width = 15 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 12 BorderSpacing.Top = 8 BorderSpacing.Right = 12 Font.Style = [fsBold] Orientation = trVertical ParentFont = False end object cbbUseInvertedSelection: TCheckBox[17] AnchorSideLeft.Control = dbOptionsVertical AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 325 Height = 19 Top = 14 Width = 136 BorderSpacing.Top = 6 Caption = 'U&se Inverted Selection' OnChange = cbColorBoxChange TabOrder = 10 end object cbbUseInactiveSelColor: TCheckBox[18] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 471 Height = 19 Top = 14 Width = 133 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Use Inactive Sel Color' OnChange = cbbUseInactiveSelColorChange TabOrder = 11 end object cbbUseFrameCursor: TCheckBox[19] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbbUseInvertedSelection AnchorSideTop.Side = asrBottom Left = 325 Height = 19 Top = 38 Width = 113 BorderSpacing.Top = 5 Caption = 'Use &Frame Cursor' OnChange = cbbUseFrameCursorChange TabOrder = 12 end object lblInactivePanelBrightness: TLabel[20] AnchorSideLeft.Control = cbbUseFrameCursor AnchorSideTop.Control = lblBackgroundColor2 AnchorSideTop.Side = asrCenter AnchorSideBottom.Control = tbInactivePanelBrightness Left = 325 Height = 15 Top = 69 Width = 175 BorderSpacing.Top = 6 Caption = '&Brightness level of inactive panel:' FocusControl = tbInactivePanelBrightness ParentColor = False end object tbInactivePanelBrightness: TTrackBar[21] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblInactivePanelBrightness AnchorSideRight.Control = cbPathActiveText AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = dbCurrentPath Left = 506 Height = 22 Top = 69 Width = 91 Max = 100 OnChange = tbInactivePanelBrightnessChange PageSize = 10 Position = 0 ScalePos = trRight TickStyle = tsNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Bottom = 6 TabOrder = 14 end object dbCurrentPath: TDividerBevel[22] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveText AnchorSideRight.Side = asrBottom Left = 325 Height = 15 Top = 97 Width = 272 Caption = 'Current Path' Anchors = [akTop, akLeft, akRight] Style = gsHorLines end object lblPathActiveBack: TLabel[23] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbPathActiveBack AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathActiveBack Left = 400 Height = 15 Top = 153 Width = 67 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Background:' FocusControl = cbPathActiveBack ParentColor = False end object cbPathActiveBack: TKASColorBoxButton[24] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveBack AnchorSideRight.Side = asrBottom Left = 471 Height = 24 Top = 148 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 16 OnChange = cbPathActiveBackChange ColorDialog = optColorDialog end object lblPathInactiveBack: TLabel[25] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbPathInactiveBack AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblPathActiveBack AnchorSideRight.Side = asrBottom Left = 356 Height = 15 Top = 209 Width = 111 Anchors = [akTop, akRight] Caption = 'Inactive Background:' FocusControl = cbPathInactiveBack ParentColor = False end object cbPathInactiveBack: TKASColorBoxButton[26] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathActiveBack AnchorSideRight.Side = asrBottom Left = 471 Height = 24 Top = 204 Width = 126 TabOrder = 18 BorderSpacing.Top = 4 OnChange = cbPathInactiveBackChange ColorDialog = optColorDialog end object cbUseCursorBorder: TCheckBox[27] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorBorderColor Left = 67 Height = 19 Top = 235 Width = 93 Anchors = [akTop, akRight] Caption = 'Cursor border' OnChange = cbUseCursorBorderChange TabOrder = 8 end object cbCursorBorderColor: TKASColorBoxButton[28] AnchorSideLeft.Control = cbInactiveMarkColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 160 Height = 24 Top = 232 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 9 BorderSpacing.Top = 4 OnChange = cbColorBoxChange ColorDialog = optColorDialog end object btnResetToDCDefault: TButton[29] AnchorSideTop.Control = cbCursorBorderColor AnchorSideRight.Control = cbPathInactiveBack AnchorSideRight.Side = asrBottom Left = 470 Height = 25 Top = 232 Width = 127 Anchors = [akTop, akRight] AutoSize = True Caption = 'Reset to DC default' OnClick = btnResetToDCDefaultClick TabOrder = 19 end object cbAllowOverColor: TCheckBox[30] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbbUseFrameCursor AnchorSideTop.Side = asrCenter Left = 471 Height = 19 Top = 38 Width = 105 Caption = 'Allow Overcolor' OnChange = cbbUseInactiveSelColorChange TabOrder = 13 end object lblPathInactiveText: TLabel[31] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbPathInactiveText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveText Left = 367 Height = 15 Top = 181 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Inactive Text Color:' FocusControl = cbPathInactiveText ParentColor = False end object cbPathInactiveText: TKASColorBoxButton[32] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveBack AnchorSideRight.Side = asrBottom Left = 471 Height = 24 Top = 176 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 17 OnChange = cbPathInactiveTextChange ColorDialog = optColorDialog end object cbPathActiveText: TKASColorBoxButton[33] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveBack AnchorSideRight.Side = asrBottom Left = 471 Height = 24 Top = 120 Width = 126 Anchors = [akTop, akLeft, akRight] TabOrder = 15 OnChange = cbPathActiveTextChange ColorDialog = optColorDialog end object lblPathActiveText: TLabel[34] AnchorSideTop.Control = cbPathActiveText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbPathInactiveText Left = 411 Height = 15 Top = 125 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Text Color:' FocusControl = cbPathInactiveText ParentColor = False end object pnlPreviewCont: TKASToolPanel[35] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 259 Top = 262 Width = 880 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 ChildSizing.LeftRightSpacing = 8 TabOrder = 20 object pnlLeftPreview: TPanel Left = 8 Height = 222 Top = 29 Width = 439 Align = alClient Anchors = [] BorderSpacing.Bottom = 8 BevelOuter = bvNone ParentColor = False TabOrder = 0 TabStop = True OnEnter = pnlLeftPreviewEnter end object pnlRightPreview: TPanel Left = 457 Height = 222 Top = 29 Width = 415 Align = alRight Anchors = [] BorderSpacing.Bottom = 8 BevelOuter = bvNone ParentColor = False TabOrder = 1 TabStop = True OnEnter = pnlRightPreviewEnter end object spPanelSplitter: TSplitter Left = 447 Height = 230 Top = 29 Width = 10 Align = alRight Anchors = [akRight] ResizeAnchor = akRight end object lblPreview: TDividerBevel Left = 8 Height = 15 Top = 8 Width = 864 Caption = 'Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings.' Align = alTop BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Font.Style = [fsBold] ParentColor = False ParentFont = False Style = gsHorLines end end object optColorDialog: TColorDialog[36] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) Left = 728 Top = 376 end end doublecmd-1.1.30/src/frames/foptionsfileoperations.pas0000644000175000001440000001454115104114162022150 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File operations options page Copyright (C) 2006-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFileOperations; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, KASComboBox, DividerBevel, fOptionsFrame; type { TfrmOptionsFileOperations } TfrmOptionsFileOperations = class(TOptionsEditor) bvlConfirmations: TDividerBevel; cbDeleteToTrash: TCheckBox; cbDropReadOnlyFlag: TCheckBox; cbProcessComments: TCheckBox; cbRenameSelOnlyName: TCheckBox; cbShowCopyTabSelectPanel: TCheckBox; cbSkipFileOpError: TCheckBox; cbProgressKind: TComboBoxAutoWidth; cbCopyConfirmation: TCheckBox; cbMoveConfirmation: TCheckBox; cbDeleteConfirmation: TCheckBox; cbDeleteToTrashConfirmation: TCheckBox; cbVerifyChecksumConfirmation: TCheckBox; cbTestArchiveConfirmation: TCheckBox; cmbTypeOfDuplicatedRename: TComboBoxAutoWidth; edtBufferSize: TEdit; edtHashBufferSize: TEdit; gbUserInterface: TGroupBox; gbExecutingOperations: TGroupBox; lblHashBufferSize: TLabel; lblTypeOfDuplicatedRename: TLabel; lblBufferSize: TLabel; lblProgressKind: TLabel; lblWipePassNumber: TLabel; seWipePassNumber: TSpinEdit; procedure cbDeleteToTrashChange(Sender: TObject); private FLoading: Boolean; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng, fOptionsHotkeys; { TfrmOptionsFileOperations } class function TfrmOptionsFileOperations.GetIconIndex: Integer; begin Result := 8; end; class function TfrmOptionsFileOperations.GetTitle: String; begin Result := rsOptionsEditorFileOperations; end; procedure TfrmOptionsFileOperations.Init; begin ParseLineToList(rsOptFileOperationsProgressKind, cbProgressKind.Items); ParseLineToList(rsOptTypeOfDuplicatedRename, cmbTypeOfDuplicatedRename.Items); end; procedure TfrmOptionsFileOperations.cbDeleteToTrashChange(Sender: TObject); var HotkeysEditor: TOptionsEditor; begin if not FLoading then begin HotkeysEditor := OptionsDialog.GetEditor(TfrmOptionsHotkeys); if Assigned(HotkeysEditor) then (HotkeysEditor as TfrmOptionsHotkeys).AddDeleteWithShiftHotkey(cbDeleteToTrash.Checked); end; end; procedure TfrmOptionsFileOperations.Load; begin FLoading := True; edtBufferSize.Text := IntToStr(gCopyBlockSize div 1024); edtHashBufferSize.Text := IntToStr(gHashBlockSize div 1024); cbSkipFileOpError.Checked := gSkipFileOpError; cbDropReadOnlyFlag.Checked := gDropReadOnlyFlag; seWipePassNumber.Value := gWipePassNumber; cbProcessComments.Checked := gProcessComments; cbShowCopyTabSelectPanel.Checked := gShowCopyTabSelectPanel; cbDeleteToTrash.Checked := gUseTrash; cbRenameSelOnlyName.Checked := gRenameSelOnlyName; case gFileOperationsProgressKind of fopkSeparateWindow: cbProgressKind.ItemIndex := 0; fopkSeparateWindowMinimized: cbProgressKind.ItemIndex := 1; fopkOperationsPanel: cbProgressKind.ItemIndex := 2; end; cbCopyConfirmation.Checked := focCopy in gFileOperationsConfirmations; cbMoveConfirmation.Checked := focMove in gFileOperationsConfirmations; cbDeleteConfirmation.Checked := focDelete in gFileOperationsConfirmations; cbTestArchiveConfirmation.Checked := focTestArchive in gFileOperationsConfirmations; cbDeleteToTrashConfirmation.Checked := focDeleteToTrash in gFileOperationsConfirmations; cbVerifyChecksumConfirmation.Checked := focVerifyChecksum in gFileOperationsConfirmations; cmbTypeOfDuplicatedRename.ItemIndex := Integer(gTypeOfDuplicatedRename); FLoading := False; end; function TfrmOptionsFileOperations.Save: TOptionsEditorSaveFlags; begin Result := []; gCopyBlockSize := StrToIntDef(edtBufferSize.Text, gCopyBlockSize div 1024) * 1024; gHashBlockSize := StrToIntDef(edtHashBufferSize.Text, gHashBlockSize div 1024) * 1024; gSkipFileOpError := cbSkipFileOpError.Checked; gDropReadOnlyFlag := cbDropReadOnlyFlag.Checked; gWipePassNumber := seWipePassNumber.Value; gProcessComments := cbProcessComments.Checked; gShowCopyTabSelectPanel := cbShowCopyTabSelectPanel.Checked; gUseTrash := cbDeleteToTrash.Checked; gRenameSelOnlyName := cbRenameSelOnlyName.Checked; case cbProgressKind.ItemIndex of 0: gFileOperationsProgressKind := fopkSeparateWindow; 1: gFileOperationsProgressKind := fopkSeparateWindowMinimized; 2: gFileOperationsProgressKind := fopkOperationsPanel; end; gFileOperationsConfirmations := []; if cbCopyConfirmation.Checked then Include(gFileOperationsConfirmations, focCopy); if cbMoveConfirmation.Checked then Include(gFileOperationsConfirmations, focMove); if cbDeleteConfirmation.Checked then Include(gFileOperationsConfirmations, focDelete); if cbTestArchiveConfirmation.Checked then Include(gFileOperationsConfirmations, focTestArchive); if cbDeleteToTrashConfirmation.Checked then Include(gFileOperationsConfirmations, focDeleteToTrash); if cbVerifyChecksumConfirmation.Checked then Include(gFileOperationsConfirmations, focVerifyChecksum); gTypeOfDuplicatedRename := tDuplicatedRename(cmbTypeOfDuplicatedRename.ItemIndex); end; constructor TfrmOptionsFileOperations.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FLoading := False; end; end. doublecmd-1.1.30/src/frames/foptionsfileoperations.lrj0000644000175000001440000001203615104114162022151 0ustar alexxusers{"version":1,"strings":[ {"hash":51162117,"name":"tfrmoptionsfileoperations.gbuserinterface.caption","sourcebytes":[85,115,101,114,32,105,110,116,101,114,102,97,99,101],"value":"User interface"}, {"hash":84721614,"name":"tfrmoptionsfileoperations.lblprogresskind.caption","sourcebytes":[83,104,111,119,32,111,112,101,114,97,116,105,111,110,115,32,112,114,111,103,114,101,115,115,32,38,105,110,105,116,105,97,108,108,121,32,105,110],"value":"Show operations progress &initially in"}, {"hash":232270583,"name":"tfrmoptionsfileoperations.cbdropreadonlyflag.caption","sourcebytes":[68,38,114,111,112,32,114,101,97,100,111,110,108,121,32,102,108,97,103],"value":"D&rop readonly flag"}, {"hash":36207847,"name":"tfrmoptionsfileoperations.cbrenameselonlyname.caption","sourcebytes":[83,101,108,101,99,116,32,38,102,105,108,101,32,110,97,109,101,32,119,105,116,104,111,117,116,32,101,120,116,101,110,115,105,111,110,32,119,104,101,110,32,114,101,110,97,109,105,110,103],"value":"Select &file name without extension when renaming"}, {"hash":110955351,"name":"tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption","sourcebytes":[83,104,111,38,119,32,116,97,98,32,115,101,108,101,99,116,32,112,97,110,101,108,32,105,110,32,99,111,112,121,47,109,111,118,101,32,100,105,97,108,111,103],"value":"Sho&w tab select panel in copy/move dialog"}, {"hash":17379641,"name":"tfrmoptionsfileoperations.cbdeletetotrash.caption","sourcebytes":[68,101,108,101,38,116,101,32,116,111,32,114,101,99,121,99,108,101,32,98,105,110,32,40,83,104,105,102,116,32,107,101,121,32,114,101,118,101,114,115,101,115,32,116,104,105,115,32,115,101,116,116,105,110,103,41],"value":"Dele&te to recycle bin (Shift key reverses this setting)"}, {"hash":240358494,"name":"tfrmoptionsfileoperations.cbcopyconfirmation.caption","sourcebytes":[67,111,112,38,121,32,111,112,101,114,97,116,105,111,110],"value":"Cop&y operation"}, {"hash":173011838,"name":"tfrmoptionsfileoperations.cbmoveconfirmation.caption","sourcebytes":[38,77,111,118,101,32,111,112,101,114,97,116,105,111,110],"value":"&Move operation"}, {"hash":357918,"name":"tfrmoptionsfileoperations.cbdeleteconfirmation.caption","sourcebytes":[38,68,101,108,101,116,101,32,111,112,101,114,97,116,105,111,110],"value":"&Delete operation"}, {"hash":258035118,"name":"tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption","sourcebytes":[68,38,101,108,101,116,101,32,116,111,32,116,114,97,115,104,32,111,112,101,114,97,116,105,111,110],"value":"D&elete to trash operation"}, {"hash":151930842,"name":"tfrmoptionsfileoperations.bvlconfirmations.caption","sourcebytes":[83,104,111,119,32,99,111,110,102,105,114,109,97,116,105,111,110,32,119,105,110,100,111,119,32,102,111,114,58],"value":"Show confirmation window for:"}, {"hash":207724030,"name":"tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption","sourcebytes":[86,101,114,105,102,121,32,99,104,101,99,107,115,117,109,32,111,112,101,114,97,116,105,111,110],"value":"Verify checksum operation"}, {"hash":170065262,"name":"tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption","sourcebytes":[84,101,115,116,32,97,114,99,104,105,118,101,32,111,112,101,114,97,116,105,111,110],"value":"Test archive operation"}, {"hash":44527315,"name":"tfrmoptionsfileoperations.gbexecutingoperations.caption","sourcebytes":[69,120,101,99,117,116,105,110,103,32,111,112,101,114,97,116,105,111,110,115],"value":"Executing operations"}, {"hash":209010058,"name":"tfrmoptionsfileoperations.lblbuffersize.caption","sourcebytes":[38,66,117,102,102,101,114,32,115,105,122,101,32,102,111,114,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,40,105,110,32,75,66,41,58],"value":"&Buffer size for file operations (in KB):"}, {"hash":163951274,"name":"tfrmoptionsfileoperations.lblwipepassnumber.caption","sourcebytes":[38,78,117,109,98,101,114,32,111,102,32,119,105,112,101,32,112,97,115,115,101,115,58],"value":"&Number of wipe passes:"}, {"hash":208299555,"name":"tfrmoptionsfileoperations.cbprocesscomments.caption","sourcebytes":[38,80,114,111,99,101,115,115,32,99,111,109,109,101,110,116,115,32,119,105,116,104,32,102,105,108,101,115,47,102,111,108,100,101,114,115],"value":"&Process comments with files/folders"}, {"hash":138955607,"name":"tfrmoptionsfileoperations.cbskipfileoperror.caption","sourcebytes":[83,38,107,105,112,32,102,105,108,101,32,111,112,101,114,97,116,105,111,110,115,32,101,114,114,111,114,115,32,97,110,100,32,119,114,105,116,101,32,116,104,101,109,32,116,111,32,108,111,103,32,119,105,110,100,111,119],"value":"S&kip file operations errors and write them to log window"}, {"hash":218727434,"name":"tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption","sourcebytes":[68,117,112,108,105,99,97,116,101,100,32,110,97,109,101,32,97,117,116,111,45,114,101,110,97,109,101,32,115,116,121,108,101,58],"value":"Duplicated name auto-rename style:"}, {"hash":108031066,"name":"tfrmoptionsfileoperations.lblhashbuffersize.caption","sourcebytes":[66,117,102,102,101,114,32,115,105,122,101,32,102,111,114,32,38,104,97,115,104,32,99,97,108,99,117,108,97,116,105,111,110,32,40,105,110,32,75,66,41,58],"value":"Buffer size for &hash calculation (in KB):"} ]} doublecmd-1.1.30/src/frames/foptionsfileoperations.lfm0000644000175000001440000002330215104114162022136 0ustar alexxusersinherited frmOptionsFileOperations: TfrmOptionsFileOperations Height = 649 Width = 734 HelpKeyword = '/configuration.html#ConfigOperations' ChildSizing.LeftRightSpacing = 6 ClientHeight = 649 ClientWidth = 734 DesignLeft = 608 DesignTop = 181 object gbUserInterface: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = gbExecutingOperations AnchorSideRight.Side = asrBottom Left = 6 Height = 357 Top = 0 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'User interface' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 332 ClientWidth = 718 TabOrder = 0 object lblProgressKind: TLabel AnchorSideLeft.Control = gbUserInterface AnchorSideTop.Control = cbProgressKind AnchorSideTop.Side = asrCenter Left = 10 Height = 20 Top = 14 Width = 240 BorderSpacing.Bottom = 10 Caption = 'Show operations progress &initially in' FocusControl = cbProgressKind ParentColor = False end object cbProgressKind: TComboBoxAutoWidth AnchorSideLeft.Control = lblProgressKind AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbUserInterface AnchorSideRight.Side = asrBottom Left = 254 Height = 28 Top = 10 Width = 100 ItemHeight = 20 Style = csDropDownList TabOrder = 0 end object cbDropReadOnlyFlag: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbProgressKind AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 42 Width = 150 Caption = 'D&rop readonly flag' TabOrder = 1 end object cbRenameSelOnlyName: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDropReadOnlyFlag AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 70 Width = 357 Caption = 'Select &file name without extension when renaming' TabOrder = 2 end object cbShowCopyTabSelectPanel: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbRenameSelOnlyName AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 98 Width = 311 Caption = 'Sho&w tab select panel in copy/move dialog' TabOrder = 3 end object cbDeleteToTrash: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbShowCopyTabSelectPanel AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 126 Width = 364 Caption = 'Dele&te to recycle bin (Shift key reverses this setting)' OnChange = cbDeleteToTrashChange TabOrder = 4 end object cbCopyConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = bvlConfirmations AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 186 Width = 127 Caption = 'Cop&y operation' TabOrder = 5 end object cbMoveConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbCopyConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 214 Width = 130 Caption = '&Move operation' TabOrder = 6 end object cbDeleteConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbMoveConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 242 Width = 137 Caption = '&Delete operation' TabOrder = 7 end object cbDeleteToTrashConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDeleteConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 270 Width = 191 Caption = 'D&elete to trash operation' TabOrder = 8 end object bvlConfirmations: TDividerBevel AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDeleteToTrash AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbUserInterface AnchorSideRight.Side = asrBottom Left = 10 Height = 20 Top = 162 Width = 698 Caption = 'Show confirmation window for:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 ParentFont = False end object cbVerifyChecksumConfirmation: TCheckBox AnchorSideLeft.Control = cbDeleteToTrashConfirmation AnchorSideTop.Control = cbDeleteToTrashConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 298 Width = 199 Caption = 'Verify checksum operation' TabOrder = 9 end object cbTestArchiveConfirmation: TCheckBox AnchorSideLeft.Control = cbVerifyChecksumConfirmation AnchorSideTop.Control = cbVerifyChecksumConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 323 Width = 161 Caption = 'Test archive operation' TabOrder = 10 end end object gbExecutingOperations: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbUserInterface AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 225 Top = 363 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Executing operations' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 200 ClientWidth = 718 TabOrder = 1 object lblBufferSize: TLabel AnchorSideLeft.Control = gbExecutingOperations AnchorSideTop.Control = edtBufferSize AnchorSideTop.Side = asrCenter Left = 10 Height = 20 Top = 14 Width = 243 BorderSpacing.Bottom = 10 Caption = '&Buffer size for file operations (in KB):' FocusControl = edtBufferSize ParentColor = False end object edtBufferSize: TEdit AnchorSideLeft.Control = lblBufferSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbExecutingOperations AnchorSideBottom.Side = asrCenter Left = 257 Height = 28 Top = 10 Width = 80 TabOrder = 0 end object lblWipePassNumber: TLabel AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = seWipePassNumber AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 10 Height = 20 Top = 78 Width = 158 BorderSpacing.Bottom = 10 Caption = '&Number of wipe passes:' FocusControl = seWipePassNumber ParentColor = False end object seWipePassNumber: TSpinEdit AnchorSideLeft.Control = lblWipePassNumber AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtHashBufferSize AnchorSideTop.Side = asrBottom Left = 172 Height = 28 Top = 74 Width = 50 TabOrder = 2 end object cbProcessComments: TCheckBox AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = seWipePassNumber AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 106 Width = 261 Caption = '&Process comments with files/folders' TabOrder = 3 end object cbSkipFileOpError: TCheckBox AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = cbProcessComments AnchorSideTop.Side = asrBottom Left = 10 Height = 24 Top = 134 Width = 398 Caption = 'S&kip file operations errors and write them to log window' TabOrder = 4 end object lblTypeOfDuplicatedRename: TLabel AnchorSideLeft.Control = cbSkipFileOpError AnchorSideTop.Control = cmbTypeOfDuplicatedRename AnchorSideTop.Side = asrCenter Left = 10 Height = 20 Top = 166 Width = 241 Caption = 'Duplicated name auto-rename style:' ParentColor = False end object cmbTypeOfDuplicatedRename: TComboBoxAutoWidth AnchorSideLeft.Control = lblTypeOfDuplicatedRename AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSkipFileOpError AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 255 Height = 28 Top = 162 Width = 100 BorderSpacing.Top = 4 ItemHeight = 20 Items.Strings = ( 'DC legacy - Copy (x) filename.ext' 'Windows - filename (x).ext' 'Other - filename(x).ext' ) Style = csDropDownList TabOrder = 5 end object edtHashBufferSize: TEdit AnchorSideLeft.Control = lblHashBufferSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtBufferSize AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrCenter Left = 267 Height = 28 Top = 42 Width = 80 TabOrder = 1 end object lblHashBufferSize: TLabel AnchorSideLeft.Control = gbExecutingOperations AnchorSideTop.Control = edtHashBufferSize AnchorSideTop.Side = asrCenter Left = 10 Height = 20 Top = 46 Width = 253 BorderSpacing.Bottom = 10 Caption = 'Buffer size for &hash calculation (in KB):' FocusControl = edtHashBufferSize ParentColor = False end end end doublecmd-1.1.30/src/frames/foptionsfileassocextra.pas0000644000175000001440000001556715104114162022152 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Extra File Associations Configuration Copyright (C) 2016-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFileAssocExtra; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls, Buttons, EditBtn, Menus; type { TfrmOptionsFileAssocExtra } TfrmOptionsFileAssocExtra = class(TOptionsEditor) btnPathToBeRelativeToAll: TButton; btnPathToBeRelativeToHelper: TSpeedButton; cbOfferToAddToFileAssociations: TCheckBox; cbDefaultContextActions: TCheckBox; cbExecuteViaShell: TCheckBox; cbExtendedContextMenu: TCheckBox; cbOpenSystemWithTerminalClose: TCheckBox; cbOpenSystemWithTerminalStayOpen: TCheckBox; cbIncludeConfigFileAssoc: TCheckBox; cbFileAssocFilenameStyle: TComboBox; ckbFileAssocCommand: TCheckBox; ckbFileAssocIcons: TCheckBox; ckbFileAssocStartPath: TCheckBox; dePathToBeRelativeTo: TDirectoryEdit; gbExtendedContextMenuOptions: TGroupBox; gbToolbarOptionsExtra: TGroupBox; lblApplySettingsFor: TLabel; lbPathToBeRelativeTo: TLabel; lbFileAssocFilenameStyle: TLabel; pmPathToBeRelativeToHelper: TPopupMenu; procedure btnPathToBeRelativeToAllClick(Sender: TObject); procedure btnPathToBeRelativeToHelperClick(Sender: TObject); procedure cbExtendedContextMenuChange(Sender: TObject); procedure cbFileAssocFilenameStyleChange(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetTitle: string; override; class function GetIconIndex: integer; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Controls, //DC DCStrUtils, uGlobs, uLng, uSpecialDir, fOptions, fOptionsFileAssoc; {TfrmOptionsFileAssocExtra} procedure TfrmOptionsFileAssocExtra.Init; begin ParseLineToList(rsPluginFilenameStyleList, cbFileAssocFilenameStyle.Items); end; { TfrmOptionsFileAssocExtra.GetTitle } class function TfrmOptionsFileAssocExtra.GetTitle: string; begin Result := rsOptionsEditorFileAssicExtra; end; { TfrmOptionsFileAssocExtra.GetIconIndex } class function TfrmOptionsFileAssocExtra.GetIconIndex: integer; begin Result := 36; end; { TfrmOptionsFileAssocExtra.cbExtendedContextMenuChange } procedure TfrmOptionsFileAssocExtra.cbExtendedContextMenuChange(Sender: TObject); begin gbExtendedContextMenuOptions.Enabled := TCheckbox(Sender).Checked; end; { TfrmOptionsFileAssocExtra.Load } procedure TfrmOptionsFileAssocExtra.Load; begin cbOfferToAddToFileAssociations.Checked := gOfferToAddToFileAssociations; cbExtendedContextMenu.Checked := gExtendedContextMenu; cbOpenSystemWithTerminalStayOpen.Checked := gExecuteViaTerminalStayOpen; cbOpenSystemWithTerminalClose.Checked := gExecuteViaTerminalClose; cbDefaultContextActions.Checked := gDefaultContextActions; cbExecuteViaShell.Checked := gOpenExecuteViaShell; cbIncludeConfigFileAssoc.Checked := gIncludeFileAssociation; cbExtendedContextMenuChange(cbExtendedContextMenu); cbFileAssocFilenameStyle.ItemIndex := integer(gFileAssocFilenameStyle); cbFileAssocFilenameStyleChange(cbFileAssocFilenameStyle); dePathToBeRelativeTo.Text := gFileAssocPathToBeRelativeTo; ckbFileAssocIcons.Checked := fameIcon in gFileAssocPathModifierElements; ckbFileAssocCommand.Checked := fameCommand in gFileAssocPathModifierElements; ckbFileAssocStartPath.Checked := fameStartingPath in gFileAssocPathModifierElements; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; { TfrmOptionsFileAssocExtra.Save } function TfrmOptionsFileAssocExtra.Save: TOptionsEditorSaveFlags; begin gOfferToAddToFileAssociations := cbOfferToAddToFileAssociations.Checked; gExtendedContextMenu := cbExtendedContextMenu.Checked; gExecuteViaTerminalStayOpen := cbOpenSystemWithTerminalStayOpen.Checked; gExecuteViaTerminalClose := cbOpenSystemWithTerminalClose.Checked; gDefaultContextActions := cbDefaultContextActions.Checked; gOpenExecuteViaShell := cbExecuteViaShell.Checked; gIncludeFileAssociation := cbIncludeConfigFileAssoc.Checked; gFileAssocFilenameStyle := TConfigFilenameStyle(cbFileAssocFilenameStyle.ItemIndex); gFileAssocPathToBeRelativeTo := dePathToBeRelativeTo.Text; gFileAssocPathModifierElements := []; if ckbFileAssocIcons.Checked then gFileAssocPathModifierElements := gFileAssocPathModifierElements + [fameIcon]; if ckbFileAssocCommand.Checked then gFileAssocPathModifierElements := gFileAssocPathModifierElements + [fameCommand]; if ckbFileAssocStartPath.Checked then gFileAssocPathModifierElements := gFileAssocPathModifierElements + [fameStartingPath]; Result := []; end; { TfrmOptionsFileAssocExtra.btnPathToBeRelativeToHelperClick } procedure TfrmOptionsFileAssocExtra.btnPathToBeRelativeToHelperClick(Sender: TObject); begin dePathToBeRelativeTo.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(dePathToBeRelativeTo, pfPATH); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssocExtra.cbFileAssocFilenameStyleChange } procedure TfrmOptionsFileAssocExtra.cbFileAssocFilenameStyleChange(Sender: TObject); begin lbPathToBeRelativeTo.Visible := (TConfigFilenameStyle(cbFileAssocFilenameStyle.ItemIndex) = TConfigFilenameStyle.pfsRelativeToFollowingPath); dePathToBeRelativeTo.Visible := lbPathToBeRelativeTo.Visible; btnPathToBeRelativeToHelper.Visible := lbPathToBeRelativeTo.Visible; end; { TfrmOptionsFileAssocExtra.btnPathToBeRelativeToAllClick } procedure TfrmOptionsFileAssocExtra.btnPathToBeRelativeToAllClick(Sender: TObject); var Options: IOptionsDialog; Editor: TOptionsEditor; begin Self.SaveSettings; //Call "SaveSettings" instead of just "Save" to get option signature set right away do we don't bother user for that page when close. Options := ShowOptions(TfrmOptionsFileAssoc); Editor := Options.GetEditor(TfrmOptionsFileAssoc); TfrmOptionsFileAssoc(Editor).ScanFileAssocForFilenameAndPath; ShowOptions(TfrmOptionsFileAssoc); end; end. doublecmd-1.1.30/src/frames/foptionsfileassocextra.lrj0000644000175000001440000001133715104114162022145 0ustar alexxusers{"version":1,"strings":[ {"hash":161997381,"name":"tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint","sourcebytes":[87,104,101,110,32,97,99,99,101,115,115,105,110,103,32,102,105,108,101,32,97,115,115,111,99,105,97,116,105,111,110,44,32,111,102,102,101,114,32,116,111,32,97,100,100,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,101,100,32,102,105,108,101,32,105,102,32,110,111,116,32,97,108,114,101,97,100,121,32,105,110,99,108,117,100,101,100,32,105,110,32,97,32,99,111,110,102,105,103,117,114,101,100,32,102,105,108,101,32,116,121,112,101],"value":"When accessing file association, offer to add current selected file if not already included in a configured file type"}, {"hash":105904681,"name":"tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption","sourcebytes":[79,102,102,101,114,32,116,111,32,97,100,100,32,115,101,108,101,99,116,105,111,110,32,116,111,32,102,105,108,101,32,97,115,115,111,99,105,97,116,105,111,110,32,119,104,101,110,32,110,111,116,32,105,110,99,108,117,100,101,100,32,97,108,114,101,97,100,121],"value":"Offer to add selection to file association when not included already"}, {"hash":105086106,"name":"tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption","sourcebytes":[69,120,116,101,110,100,101,100,32,111,112,116,105,111,110,115,32,105,116,101,109,115,58],"value":"Extended options items:"}, {"hash":57448825,"name":"tfrmoptionsfileassocextra.cbdefaultcontextactions.caption","sourcebytes":[68,101,102,97,117,108,116,32,99,111,110,116,101,120,116,32,97,99,116,105,111,110,115,32,40,86,105,101,119,47,69,100,105,116,41],"value":"Default context actions (View/Edit)"}, {"hash":261258620,"name":"tfrmoptionsfileassocextra.cbexecuteviashell.caption","sourcebytes":[69,120,101,99,117,116,101,32,118,105,97,32,115,104,101,108,108],"value":"Execute via shell"}, {"hash":184702149,"name":"tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption","sourcebytes":[69,120,101,99,117,116,101,32,118,105,97,32,116,101,114,109,105,110,97,108,32,97,110,100,32,99,108,111,115,101],"value":"Execute via terminal and close"}, {"hash":183399550,"name":"tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption","sourcebytes":[69,120,101,99,117,116,101,32,118,105,97,32,116,101,114,109,105,110,97,108,32,97,110,100,32,115,116,97,121,32,111,112,101,110],"value":"Execute via terminal and stay open"}, {"hash":35282766,"name":"tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption","sourcebytes":[70,105,108,101,32,97,115,115,111,99,105,97,116,105,111,110,32,99,111,110,102,105,103,117,114,97,116,105,111,110],"value":"File association configuration"}, {"hash":50693893,"name":"tfrmoptionsfileassocextra.cbextendedcontextmenu.caption","sourcebytes":[69,120,116,101,110,100,101,100,32,99,111,110,116,101,120,116,32,109,101,110,117],"value":"Extended context menu"}, {"hash":5671667,"name":"tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption","sourcebytes":[80,97,116,104,115],"value":"Paths"}, {"hash":75021338,"name":"tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption","sourcebytes":[87,97,121,32,116,111,32,115,101,116,32,112,97,116,104,115,32,119,104,101,110,32,97,100,100,105,110,103,32,101,108,101,109,101,110,116,115,32,102,111,114,32,105,99,111,110,115,44,32,99,111,109,109,97,110,100,115,32,97,110,100,32,115,116,97,114,116,105,110,103,32,112,97,116,104,115,58],"value":"Way to set paths when adding elements for icons, commands and starting paths:"}, {"hash":256553386,"name":"tfrmoptionsfileassocextra.lbpathtoberelativeto.caption","sourcebytes":[80,97,116,104,32,116,111,32,98,101,32,114,101,108,97,116,105,118,101,32,116,111,58],"value":"Path to be relative to:"}, {"hash":49744051,"name":"tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption","sourcebytes":[65,112,112,108,121,32,99,117,114,114,101,110,116,32,115,101,116,116,105,110,103,115,32,116,111,32,97,108,108,32,99,117,114,114,101,110,116,32,99,111,110,102,105,103,117,114,101,100,32,102,105,108,101,110,97,109,101,115,32,97,110,100,32,112,97,116,104,115],"value":"Apply current settings to all current configured filenames and paths"}, {"hash":5219923,"name":"tfrmoptionsfileassocextra.ckbfileassocicons.caption","sourcebytes":[73,99,111,110,115],"value":"Icons"}, {"hash":209637018,"name":"tfrmoptionsfileassocextra.lblapplysettingsfor.caption","sourcebytes":[68,111,32,116,104,105,115,32,102,111,114,32,102,105,108,101,115,32,97,110,100,32,112,97,116,104,32,102,111,114,58],"value":"Do this for files and path for:"}, {"hash":105086995,"name":"tfrmoptionsfileassocextra.ckbfileassoccommand.caption","sourcebytes":[67,111,109,109,97,110,100,115],"value":"Commands"}, {"hash":67051795,"name":"tfrmoptionsfileassocextra.ckbfileassocstartpath.caption","sourcebytes":[83,116,97,114,116,105,110,103,32,112,97,116,104,115],"value":"Starting paths"} ]} doublecmd-1.1.30/src/frames/foptionsfileassocextra.lfm0000644000175000001440000002540715104114162022137 0ustar alexxusersinherited frmOptionsFileAssocExtra: TfrmOptionsFileAssocExtra Height = 508 Width = 937 HelpKeyword = '/configuration.html#ConfigAssocEx' AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 508 ClientWidth = 937 ParentShowHint = False ShowHint = True DesignLeft = 141 DesignTop = 288 object cbOfferToAddToFileAssociations: TCheckBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 19 Hint = 'When accessing file association, offer to add current selected file if not already included in a configured file type' Top = 6 Width = 372 Caption = 'Offer to add selection to file association when not included already' TabOrder = 0 end object gbExtendedContextMenuOptions: TGroupBox[1] AnchorSideLeft.Control = cbOfferToAddToFileAssociations AnchorSideTop.Control = cbExtendedContextMenu AnchorSideTop.Side = asrBottom Left = 6 Height = 147 Top = 58 Width = 223 AutoSize = True BorderSpacing.Top = 4 Caption = 'Extended options items:' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 127 ClientWidth = 219 TabOrder = 1 object cbDefaultContextActions: TCheckBox AnchorSideLeft.Control = gbExtendedContextMenuOptions AnchorSideTop.Control = gbExtendedContextMenuOptions Left = 8 Height = 19 Top = 8 Width = 203 BorderSpacing.Top = 4 Caption = 'Default context actions (View/Edit)' TabOrder = 0 end object cbExecuteViaShell: TCheckBox AnchorSideLeft.Control = cbDefaultContextActions AnchorSideTop.Control = cbDefaultContextActions AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 31 Width = 106 BorderSpacing.Top = 4 Caption = 'Execute via shell' TabOrder = 1 end object cbOpenSystemWithTerminalClose: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbExecuteViaShell AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 54 Width = 179 BorderSpacing.Top = 4 Caption = 'Execute via terminal and close' TabOrder = 2 end object cbOpenSystemWithTerminalStayOpen: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalClose AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 77 Width = 203 BorderSpacing.Top = 4 Caption = 'Execute via terminal and stay open' TabOrder = 3 end object cbIncludeConfigFileAssoc: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalStayOpen AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 100 Width = 175 BorderSpacing.Top = 4 Caption = 'File association configuration' TabOrder = 4 end end object cbExtendedContextMenu: TCheckBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbOfferToAddToFileAssociations AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 35 Width = 146 BorderSpacing.Top = 10 Caption = 'Extended context menu' OnChange = cbExtendedContextMenuChange TabOrder = 2 end object gbToolbarOptionsExtra: TGroupBox[3] AnchorSideLeft.Control = cbOfferToAddToFileAssociations AnchorSideTop.Control = gbExtendedContextMenuOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 161 Top = 205 Width = 925 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Paths' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 6 ClientHeight = 141 ClientWidth = 921 TabOrder = 3 object lbFileAssocFilenameStyle: TLabel AnchorSideLeft.Control = gbToolbarOptionsExtra AnchorSideTop.Control = gbToolbarOptionsExtra Left = 6 Height = 15 Top = 6 Width = 426 Caption = 'Way to set paths when adding elements for icons, commands and starting paths:' ParentColor = False end object cbFileAssocFilenameStyle: TComboBox AnchorSideLeft.Control = lbFileAssocFilenameStyle AnchorSideTop.Control = lbFileAssocFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbToolbarOptionsExtra AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 27 Width = 909 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 OnChange = cbFileAssocFilenameStyleChange Style = csDropDownList TabOrder = 0 end object btnPathToBeRelativeToHelper: TSpeedButton AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideRight.Control = cbFileAssocFilenameStyle AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = dePathToBeRelativeTo AnchorSideBottom.Side = asrBottom Left = 892 Height = 23 Top = 56 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnPathToBeRelativeToHelperClick end object dePathToBeRelativeTo: TDirectoryEdit AnchorSideLeft.Control = lbPathToBeRelativeTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFileAssocFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnPathToBeRelativeToHelper Left = 120 Height = 23 Top = 56 Width = 770 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 1 MaxLength = 0 TabOrder = 1 end object lbPathToBeRelativeTo: TLabel AnchorSideLeft.Control = lbFileAssocFilenameStyle AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 60 Width = 112 Caption = 'Path to be relative to:' ParentColor = False end object btnPathToBeRelativeToAll: TButton AnchorSideLeft.Control = lbFileAssocFilenameStyle AnchorSideTop.Control = ckbFileAssocIcons AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 110 Width = 382 AutoSize = True Caption = 'Apply current settings to all current configured filenames and paths' OnClick = btnPathToBeRelativeToAllClick TabOrder = 2 end object ckbFileAssocIcons: TCheckBox AnchorSideLeft.Control = lblApplySettingsFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 162 Height = 19 Top = 85 Width = 48 BorderSpacing.Left = 6 Caption = 'Icons' TabOrder = 3 end object lblApplySettingsFor: TLabel AnchorSideLeft.Control = lbFileAssocFilenameStyle AnchorSideTop.Control = ckbFileAssocIcons AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 87 Width = 150 Caption = 'Do this for files and path for:' ParentColor = False end object ckbFileAssocCommand: TCheckBox AnchorSideLeft.Control = ckbFileAssocIcons AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 216 Height = 19 Top = 85 Width = 82 BorderSpacing.Left = 6 Caption = 'Commands' TabOrder = 4 end object ckbFileAssocStartPath: TCheckBox AnchorSideLeft.Control = ckbFileAssocCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 304 Height = 19 Top = 85 Width = 93 BorderSpacing.Left = 6 Caption = 'Starting paths' TabOrder = 5 end end object pmPathToBeRelativeToHelper: TPopupMenu[4] Left = 596 Top = 140 end end doublecmd-1.1.30/src/frames/foptionsfileassoc.pas0000644000175000001440000014457415104114162021107 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File associations configuration Copyright (C) 2008-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFileAssoc; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ExtCtrls, EditBtn, ExtDlgs, Menus, ActnList, Types, //DC uGlobs, uExts, fOptionsFrame; type { TfrmOptionsFileAssoc } TfrmOptionsFileAssoc = class(TOptionsEditor) btnAddAct: TButton; btnCloneAct: TButton; btnCommands: TSpeedButton; btnInsertExt: TButton; btnInsertAct: TButton; btnAddExt: TButton; btnAddNewType: TButton; btnDownAct: TButton; btnEditExt: TButton; btnParametersHelper: TSpeedButton; btnRelativePathIcon: TSpeedButton; btnIconSelectFilename: TSpeedButton; btnStartPathVarHelper: TSpeedButton; btnRelativeCommand: TSpeedButton; btnStartPathPathHelper: TSpeedButton; btnUpAct: TButton; btnRemoveAct: TButton; btnRemoveExt: TButton; btnRemoveType: TButton; btnRenameType: TButton; deStartPath: TDirectoryEdit; edbActionName: TEditButton; edIconFileName: TEdit; edtParams: TEdit; fneCommand: TFileNameEdit; gbActionDescription: TGroupBox; gbFileTypes: TGroupBox; gbIcon: TGroupBox; gbExts: TGroupBox; gbActions: TGroupBox; lbActions: TListBox; lbExts: TListBox; lbFileTypes: TListBox; lblAction: TLabel; lblCommand: TLabel; lblExternalParameters: TLabel; lblStartPath: TLabel; MenuItem1: TMenuItem; miInternalViewer: TMenuItem; miInternalEditor: TMenuItem; miSeparator: TMenuItem; miCustom: TMenuItem; MenuItem3: TMenuItem; miOpenWith: TMenuItem; miViewWith: TMenuItem; miEditWith: TMenuItem; miGetOutputFromCommand: TMenuItem; miShell: TMenuItem; miViewer: TMenuItem; miEditor: TMenuItem; miEdit: TMenuItem; miView: TMenuItem; miOpen: TMenuItem; OpenDialog: TOpenDialog; OpenPictureDialog: TOpenPictureDialog; pnlBottomSettings: TPanel; pmPathHelper: TPopupMenu; pnlLeftSettings: TPanel; pnlActsEdits: TPanel; pnlActsButtons: TPanel; pnlExtsButtons: TPanel; pnlRightSettings: TPanel; pnlSettings: TPanel; pmActions: TPopupMenu; pmCommands: TPopupMenu; sbtnIcon: TSpeedButton; procedure btnActionsClick(Sender: TObject); procedure btnCloneActClick(Sender: TObject); procedure btnInsertAddActClick(Sender: TObject); procedure btnInsertAddExtClick(Sender: TObject); procedure btnParametersHelperClick(Sender: TObject); procedure btnRelativeCommandClick(Sender: TObject); procedure btnRelativePathIconClick(Sender: TObject); procedure btnStartPathPathHelperClick(Sender: TObject); procedure btnStartPathVarHelperClick(Sender: TObject); procedure deStartPathAcceptDirectory(Sender: TObject; var Value: String); procedure deStartPathChange(Sender: TObject); procedure edtParamsChange(Sender: TObject); procedure edIconFileNameChange(Sender: TObject); procedure fneCommandAcceptFileName(Sender: TObject; var Value: String); procedure FrameResize(Sender: TObject); function InsertAddSingleExtensionToLists(sExt: string; iInsertPosition: integer): boolean; procedure InsertAddExtensionToLists(sParamExt: string; iPositionToInsert: integer); procedure btnAddNewTypeClick(Sender: TObject); procedure btnCommandsClick(Sender: TObject); procedure btnDownActClick(Sender: TObject); procedure btnEditExtClick(Sender: TObject); procedure btnRemoveActClick(Sender: TObject); procedure btnRemoveExtClick(Sender: TObject); procedure btnRemoveTypeClick(Sender: TObject); procedure btnRemoveTypeResize(Sender: TObject); procedure btnRenameTypeClick(Sender: TObject); procedure btnRenameTypeResize(Sender: TObject); procedure btnUpActClick(Sender: TObject); procedure lbActionsDragDrop(Sender, {%H-}Source: TObject; {%H-}X, Y: integer); procedure lbActionsSelectionChange(Sender: TObject; {%H-}User: boolean); procedure lbExtsDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure lbGenericListDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); procedure lbExtsSelectionChange(Sender: TObject; {%H-}User: boolean); procedure lbFileTypesDragDrop(Sender, {%H-}Source: TObject; {%H-}X, Y: integer); procedure lbGenericDragOver(Sender, Source: TObject; {%H-}X, Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure lbFileTypesDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); procedure lbFileTypesSelectionChange(Sender: TObject; {%H-}User: boolean); procedure edbActionNameChange(Sender: TObject); procedure fneCommandChange(Sender: TObject); procedure miActionsClick(Sender: TObject); procedure miCommandsClick(Sender: TObject); procedure pnlRightSettingsResize(Sender: TObject); procedure pnlSettingsResize(Sender: TObject); procedure sbtnIconClick(Sender: TObject); procedure MakeUsInPositionToWorkWithActiveFile; procedure actSelectFileTypeExecute(Sender: TObject); procedure actSelectIconExecute(Sender: TObject); procedure actSelectExtensionsExecute(Sender: TObject); procedure actSelectActionsExecute(Sender: TObject); procedure actSelectActionDescriptionExecute(Sender: TObject); private Exts: TExts; FUpdatingControls: boolean; liveActionList: TActionList; actSelectFileType: TAction; actSelectIcon: TAction; actSelectExtensions: TAction; actSelectActions: TAction; actSelectActionDescription: TAction; procedure UpdateEnabledButtons; {en Frees icon cached in lbFileTypes.Items.Objects[Index]. } procedure FreeIcon(iIndex: integer); procedure SetIconFileName(const sFileName: string); procedure SetMinimumSize; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; procedure ScanFileAssocForFilenameAndPath; function GetFileAssocFilenameToSave(AFileAssocPathModifierElement: tFileAssocPathModifierElement; sParamFilename: string): string; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Math, LCLType, LazUTF8, //DC uVariableMenuSupport, DCStrUtils, uOSForms, fMain, uFile, uPixMapManager, uLng, uDCUtils, DCOSUtils, uShowMsg, uSpecialDir; const ACTUAL_ADD_ACTION = 1; SET_ACTION_WORD = 2; { TfrmOptionsFileAssoc } { TfrmOptionsFileAssoc.Init } procedure TfrmOptionsFileAssoc.Init; begin inherited Init; Exts := TExts.Create; FUpdatingControls := False; btnIconSelectFilename.Hint := sbtnIcon.Hint; OpenDialog.Filter := ParseLineToFileFilter([rsFilterExecutableFiles, '*.exe;*.com;*.bat', rsFilterAnyFiles, AllFilesMask]); // The following section is to help to speed up the the user with keyboard to pass to a section to another. // Each TGroupBox has their caption with 1, 2, 3... with underscore under each digit. // This suggest to user keyboard accelerator shortcut so he will type Alt+1, Alt+2, etc to pass to a section to another. // Unfortunately, at this moment in Windows at least, even if we have underscore, it does not work as keyboard accelerator... // It does not switch focus to the proper TGroupbox... // So what we will do is to mimic that. // We will display the caption of the TGroupBox with underscore to suggest the Alt+1, Alt+2, etc. // And we will add in our TActionList function to set the focus on proper TGroupBox and set the keyboard shortcut to Alt+1, Alt+2, etc. // So at the end it does the job. // If we defined that run-time here instead of having it in the form itself it's to avoid to have annoying empty caption yo appear in the languages files. liveActionList := TActionList.Create(Self); actSelectFileType := TAction.Create(nil); actSelectFileType.OnExecute := @actSelectFileTypeExecute; actSelectFileType.ShortCut := 32817; //Alt+1 actSelectFileType.ActionList := liveActionList; actSelectIcon := TAction.Create(nil); actSelectIcon.OnExecute := @actSelectIconExecute; actSelectIcon.ShortCut := 32818; //Alt+2 actSelectIcon.ActionList := liveActionList; actSelectExtensions := TAction.Create(nil); actSelectExtensions.OnExecute := @actSelectExtensionsExecute; actSelectExtensions.ShortCut := 32819; //Alt+3 actSelectExtensions.ActionList := liveActionList; actSelectActions := TAction.Create(nil); actSelectActions.OnExecute := @actSelectActionsExecute; actSelectActions.ShortCut := 32820; //Alt-4 actSelectActions.ActionList := liveActionList; actSelectActionDescription := TAction.Create(nil); actSelectActionDescription.OnExecute := @actSelectActionDescriptionExecute; actSelectActionDescription.ShortCut := 32821; //Alt-5 actSelectActionDescription.ActionList := liveActionList; end; { TfrmOptionsFileAssoc.Done } procedure TfrmOptionsFileAssoc.Done; var I: integer; begin for I := 0 to lbFileTypes.Items.Count - 1 do FreeIcon(I); FreeAndNil(Exts); FreeAndNil(actSelectActionDescription); FreeAndNil(actSelectActions); FreeAndNil(actSelectExtensions); FreeAndNil(actSelectIcon); FreeAndNil(actSelectFileType); FreeAndNil(liveActionList); inherited Done; end; { TfrmOptionsFileAssoc.Load } procedure TfrmOptionsFileAssoc.Load; var I: integer; sName: string; Bitmap: TBitmap; begin //Let's preserve the precious legacy .po translated groupbox name that we will re-use with dialog window concerning them gbFileTypes.hint := gbFileTypes.Caption; gbIcon.hint := gbIcon.Caption; gbExts.hint := gbExts.Caption; gbActions.hint := gbActions.Caption; gbActionDescription.hint := gbActionDescription.Caption; // Give some numerical step number to help user without losing legacy .po translated groubox name gbFileTypes.Caption := '&1 - ' + gbFileTypes.Caption; gbIcon.Caption := '&2 - ' + gbIcon.Caption; gbExts.Caption := '&3 - ' + gbExts.Caption; gbActions.Caption := '&4 - ' + gbActions.Caption; gbActionDescription.Caption := '&5 - ' + gbActionDescription.Caption; // load extension file Exts.Load; //'Pp'! A letter with the upper part and a letter with the lower part! This should give us approximation of highest room required! :-) lbFileTypes.ItemHeight := Max(gIconsSize, lbFileTypes.Canvas.TextHeight('Pp')) + 4; // fill file types list box for I := 0 to Exts.Count - 1 do begin sName := Exts.Items[I].Name; // load icon for use in OnDrawItem procedure Bitmap := PixMapManager.LoadBitmapEnhanced(Exts.Items[I].Icon, gIconsSize, True, lbFileTypes.Color); lbFileTypes.Items.AddObject(sName, Bitmap); end; if Exts.Count > 0 then lbFileTypes.ItemIndex := 0; UpdateEnabledButtons; // Populate helper menu gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); inherited Load; end; { TfrmOptionsFileAssoc.Save } function TfrmOptionsFileAssoc.Save: TOptionsEditorSaveFlags; var iExt: integer; begin Exts.SaveXMLFile; gExts.Clear; gExts.Load; // The "gExts.Clear" has flush the "IconIndex" that have been set via "Load" of PixMapManager. // Since it has been lost AND PixMapManager.Load won't set again our iconindex, let's do manually here. // It is required so the icon next to our actions in SheelContextMenu will be the correct ones. for iExt := 0 to pred(gExts.Count) do TExtAction(gExts.Items[iExt]).IconIndex := PixMapManager.GetIconByName(TExtAction(gExts.Items[iExt]).Icon); Result := inherited Save; end; { TfrmOptionsFileAssoc.GetIconIndex } class function TfrmOptionsFileAssoc.GetIconIndex: integer; begin Result := 34; end; { TfrmOptionsFileAssoc.GetTitle } class function TfrmOptionsFileAssoc.GetTitle: string; begin Result := rsOptionsEditorFileAssoc; end; { TfrmOptionsFileAssoc.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsFileAssoc.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsFileAssoc.ExtraOptionsSignature } function TfrmOptionsFileAssoc.ExtraOptionsSignature(CurrentSignature: dword): dword; begin Result := Exts.ComputeSignature(CurrentSignature); end; { TfrmOptionsFileAssoc.UpdateEnabledButtons } procedure TfrmOptionsFileAssoc.UpdateEnabledButtons; begin if (lbFileTypes.Items.Count = 0) or (lbFileTypes.ItemIndex = -1) then begin sbtnIcon.Enabled := False; btnInsertExt.Enabled := False; btnAddExt.Enabled := False; btnInsertAct.Enabled := False; btnAddAct.Enabled := False; end else begin btnInsertExt.Enabled := (lbExts.Items.Count > 0); btnAddExt.Enabled := True; btnInsertAct.Enabled := (lbExts.Items.Count > 0) and (lbActions.ItemIndex <> -1); btnAddAct.Enabled := btnInsertExt.Enabled; sbtnIcon.Enabled := btnInsertExt.Enabled; end; btnRemoveExt.Enabled := ((lbExts.Items.Count <> 0) and (lbExts.ItemIndex <> -1)); btnEditExt.Enabled := btnRemoveExt.Enabled; if (lbActions.Items.Count = 0) or (lbActions.ItemIndex = -1) then begin btnUpAct.Enabled := False; btnDownAct.Enabled := False; btnRemoveAct.Enabled := False; edbActionName.Enabled := False; fneCommand.Enabled := False; edtParams.Enabled := False; deStartPath.Enabled := False; btnCommands.Enabled := False; btnRelativeCommand.Enabled := False; btnParametersHelper.Enabled := False; btnStartPathPathHelper.Enabled := False; btnStartPathVarHelper.Enabled := False; edbActionName.Text := ''; fneCommand.FileName := ''; edtParams.Text := ''; deStartPath.Text := ''; end else begin btnUpAct.Enabled := (lbActions.ItemIndex > 0); btnDownAct.Enabled := (lbActions.ItemIndex < lbActions.Items.Count - 1); btnRemoveAct.Enabled := True; edbActionName.Enabled := True; fneCommand.Enabled := True; btnRelativeCommand.Enabled := True; btnParametersHelper.Enabled := True; btnStartPathPathHelper.Enabled := True; btnStartPathVarHelper.Enabled := True; edtParams.Enabled := True; deStartPath.Enabled := True; btnCommands.Enabled := True; end; btnCloneAct.Enabled := btnRemoveAct.Enabled; end; { TfrmOptionsFileAssoc.btnAddNewTypeClick } procedure TfrmOptionsFileAssoc.btnAddNewTypeClick(Sender: TObject); var ExtAction: TExtAction; s: string; begin s := InputBox(GetTitle + ' - ' + gbFileTypes.Hint, rsMsgEnterName, ''); if s = '' then exit; ExtAction := TExtAction.Create; ExtAction.IconIndex := -1; with lbFileTypes do begin ExtAction.Name := s; Items.AddObject(ExtAction.Name, nil); // add file type to TExts object Exts.AddItem(ExtAction); ItemIndex := Items.Count - 1; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRemoveTypeClick } procedure TfrmOptionsFileAssoc.btnRemoveTypeClick(Sender: TObject); var iIndex: integer; begin with lbFileTypes do begin iIndex := ItemIndex; if iIndex < 0 then Exit; FreeIcon(iIndex); Items.Delete(iIndex); Exts.DeleteItem(iIndex); if Items.Count = 0 then begin lbExts.Clear; lbActions.Clear; end else begin if iIndex = 0 then ItemIndex := 0 else ItemIndex := iIndex - 1; end; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRemoveTypeResize } procedure TfrmOptionsFileAssoc.btnRemoveTypeResize(Sender: TObject); begin SetMinimumSize; end; { TfrmOptionsFileAssoc.btnRenameTypeClick } procedure TfrmOptionsFileAssoc.btnRenameTypeClick(Sender: TObject); var iIndex: integer; sName: string; begin iIndex := lbFileTypes.ItemIndex; if iIndex < 0 then Exit; sName := lbFileTypes.Items[iIndex]; sName := InputBox(GetTitle + ' - ' + gbFileTypes.Hint, rsMsgEnterName, sName); lbFileTypes.Items[iIndex] := sName; // rename file type in TExts object Exts.Items[iIndex].Name := sName; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRenameTypeResize } procedure TfrmOptionsFileAssoc.btnRenameTypeResize(Sender: TObject); begin SetMinimumSize; end; { TfrmOptionsFileAssoc.lbActionsSelectionChange } procedure TfrmOptionsFileAssoc.lbActionsSelectionChange(Sender: TObject; User: boolean); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (iIndex < 0) or (lbActions.Tag = 1) then Exit; edbActionName.Tag := 1; edbActionName.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).ActionName; fneCommand.FileName := TExtActionCommand(lbActions.Items.Objects[iIndex]).CommandName; edtParams.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).Params; deStartPath.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).StartPath; edbActionName.Tag := 0; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbExtsDragDrop } procedure TfrmOptionsFileAssoc.lbExtsDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // exchange positions in extensions listbox SrcIndex := lbExts.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbExts.GetIndexAtXY(X, Y); if (DestIndex < 0) or (DestIndex >= lbExts.Count) then DestIndex := lbExts.Count - 1; lbExts.Items.Move(SrcIndex, DestIndex); lbExts.ItemIndex := DestIndex; // change extension in TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Move(SrcIndex, DestIndex); end; procedure TfrmOptionsFileAssoc.lbGenericListDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); begin with (Control as TListBox) do begin if (odSelected in State) then begin if focused then begin Canvas.Font.Color := clHighlightText; Canvas.Brush.Color := clHighlight; end else begin Canvas.Font.Color := clWindowText; Canvas.Brush.Color := clGradientActiveCaption; end; end else begin Canvas.Font.Color := Font.Color; Canvas.Brush.Color := Color; end; Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left, ARect.Top, Items[Index]); end; end; { TfrmOptionsFileAssoc.lbExtsSelectionChange } procedure TfrmOptionsFileAssoc.lbExtsSelectionChange(Sender: TObject; User: boolean); begin if (lbExts.ItemIndex < 0) then Exit; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbFileTypesDragDrop } procedure TfrmOptionsFileAssoc.lbFileTypesDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // Validate if the move is okay SrcIndex := lbFileTypes.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbFileTypes.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbFileTypes.Count) then DestIndex := lbFileTypes.Count - 1; // exchange positions in actions listbox lbActions.Tag := 1; // start moving try lbFileTypes.Items.Move(SrcIndex, DestIndex); lbFileTypes.ItemIndex := DestIndex; // exchange actions in TExts object Exts.MoveItem(SrcIndex, DestIndex); finally lbActions.Tag := 0; // end moving end; // trig the "SelectionChange" event to refresh extension and action lists lbFileTypesSelectionChange(lbFileTypes, False); UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbGenericDragOver } procedure TfrmOptionsFileAssoc.lbGenericDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin //Accept if it's coming from the same ListBox Accept := (Source is TListBox) and (TListBox(Source).Name = TListBox(Sender).Name); //Let's scroll up/down if user is dragging near the top/bottom if Y > (TListBox(Sender).Height - 15) then TListBox(Sender).TopIndex := TListBox(Sender).TopIndex + 1 else if Y < 15 then TListBox(Sender).TopIndex := TListBox(Sender).TopIndex - 1; end; { TfrmOptionsFileAssoc.lbFileTypesDrawItem } procedure TfrmOptionsFileAssoc.lbFileTypesDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var iDrawTop: integer; begin with (Control as TListBox) do begin if odSelected in State then begin if focused then begin Canvas.Font.Color := clHighlightText; Canvas.Brush.Color := clHighlight; end else begin Canvas.Font.Color := clWindowText; Canvas.Brush.Color := clGradientActiveCaption; end; Canvas.FillRect(ARect); end else begin Canvas.Font.Color := Font.Color; Canvas.Brush.Color := Color; Canvas.FillRect(ARect); end; if (Canvas.Locked = False) and (Assigned(Items.Objects[Index])) then begin iDrawTop := ARect.Top + ((lbFileTypes.ItemHeight - gIconsSize) div 2); Canvas.Draw(ARect.Left + 2, iDrawTop, TBitmap(Items.Objects[Index])); end; iDrawTop := ARect.Top + ((lbFileTypes.ItemHeight - Canvas.TextHeight(Items[Index])) div 2); Canvas.TextOut(ARect.Left + gIconsSize + 6, iDrawTop, Items[Index]); end; end; { TfrmOptionsFileAssoc.lbFileTypesSelectionChange } procedure TfrmOptionsFileAssoc.lbFileTypesSelectionChange(Sender: TObject; User: boolean); var ExtCommand: TExtAction; I: integer; bmpTemp: TBitmap = nil; begin if (lbFileTypes.ItemIndex >= 0) and (lbFileTypes.ItemIndex < Exts.Count) then begin lbActions.Items.Clear; Application.ProcessMessages; lbExts.Items.Clear; Application.ProcessMessages; ExtCommand := Exts.Items[lbFileTypes.ItemIndex]; lbExts.Items.Assign(ExtCommand.Extensions); if lbExts.Count > 0 then lbExts.ItemIndex := 0; for I := 0 to pred(ExtCommand.ActionList.Count) do begin lbActions.Items.AddObject(ExtCommand.ActionList.ExtActionCommand[I].ActionName, ExtCommand.ActionList.ExtActionCommand[I]); end; if lbActions.Count > 0 then lbActions.ItemIndex := 0; bmpTemp := PixMapManager.LoadBitmapEnhanced(ExtCommand.Icon, 32, True, sbtnIcon.Color); try sbtnIcon.Glyph := bmpTemp; finally if Assigned(bmpTemp) then FreeAndNil(bmpTemp); end; FUpdatingControls := True; // Don't trigger OnChange edIconFileName.Text := ExtCommand.Icon; FUpdatingControls := False; end else begin lbExts.Items.Clear; lbActions.Items.Clear; sbtnIcon.Glyph.Clear; edIconFileName.Text := ''; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.edbActionChange } procedure TfrmOptionsFileAssoc.edbActionNameChange(Sender: TObject); var iIndex: integer; begin if edbActionName.Tag = 1 then exit; iIndex := lbActions.ItemIndex; if (iIndex < 0) or (edbActionName.Text = '') then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).ActionName := edbActionName.Text; lbActions.Items[iIndex] := edbActionName.Text; end; { TfrmOptionsFileAssoc.fneCommandChange } procedure TfrmOptionsFileAssoc.fneCommandChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag = 1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).CommandName := fneCommand.Text; if fneCommand.InitialDir <> ExtractFilePath(fneCommand.Text) then fneCommand.InitialDir := ExtractFilePath(fneCommand.Text); end; { TfrmOptionsFileAssoc.edtExternalParametersChange } procedure TfrmOptionsFileAssoc.edtParamsChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag = 1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).Params := edtParams.Text; end; { TfrmOptionsFileAssoc.deStartPathChange } procedure TfrmOptionsFileAssoc.deStartPathChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag = 1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).StartPath := deStartPath.Text; if deStartPath.Directory <> deStartPath.Text then deStartPath.Directory := deStartPath.Text; end; { TfrmOptionsFileAssoc.miActionsClick } // The "tag" of the menu item calling this will give us information about the task to do. // xxxx xx10 : Bit 1 & 0 indicate if user wants "Open", "View", "Edit" or "Custom action". // xxx4 xxxx : Bit 4 indicates if user wants to specify immediately a .exe file for the command. (0=no, 1=yes). // xx5x xxxx : Bit 5 indicates if user wants to "Add" or "Insert" action in the current list. (0=add, 1=insert). procedure TfrmOptionsFileAssoc.miActionsClick(Sender: TObject); var miMenuItem: TMenuItem absolute Sender; I, iDispatcher: integer; ExtAction: TExtAction; sActionWords: string = ''; sCommandFilename: string = ''; begin with Sender as TComponent do iDispatcher := tag; // Transform the task in "add" if currently there is no action, nothing selected, any incoherence. if (Exts.Items[lbFileTypes.ItemIndex].ActionList.Count = 0) or (lbActions.Items.Count = 0) or (lbActions.ItemIndex = -1) then iDispatcher := (iDispatcher and $DF); if iDispatcher and $03 = $03 then gFileAssociationLastCustomAction := InputBox(GetTitle + ' - ' + gbActions.Hint, rsMsgEnterCustomAction, gFileAssociationLastCustomAction); case (iDispatcher and $DF) of $00: sActionWords := 'Open'; $01: sActionWords := 'View'; $02: sActionWords := 'Edit'; $03: sActionWords := gFileAssociationLastCustomAction; $10: OpenDialog.Title := rsMsgSelectExecutableFile + ' "Open"...'; $11: OpenDialog.Title := rsMsgSelectExecutableFile + ' "View"...'; $12: OpenDialog.Title := rsMsgSelectExecutableFile + ' "Edit"...'; $13: OpenDialog.Title := rsMsgSelectExecutableFile + ' "' + gFileAssociationLastCustomAction + '"...'; end; case iDispatcher and $10 of $10: begin if OpenDialog.Execute then begin sCommandFilename := GetFileAssocFilenameToSave(fameCommand, OpenDialog.Filename); case (iDispatcher and $03) of $00: sActionWords := 'Open ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $01: sActionWords := 'View ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $02: sActionWords := 'Edit ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $03: sActionWords := gFileAssociationLastCustomAction + ' ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); end; end; end; end; case pmActions.Tag of ACTUAL_ADD_ACTION: begin ExtAction := Exts.Items[lbFileTypes.ItemIndex]; // insert/add action to TExts object case iDispatcher and $20 of $20: // it is an "insert" begin I := lbActions.ItemIndex; case (iDispatcher and $DF) of $00, $01, $02, $03: ExtAction.ActionList.Insert(I, TExtActionCommand.Create(sActionWords, '', '', '')); $10, $11, $12, $13: ExtAction.ActionList.Insert(I, TExtActionCommand.Create(sActionWords, sCommandFilename, '%p', '')); end; // add action to actions listbox lbActions.Items.InsertObject(I, '', ExtAction.ActionList.ExtActionCommand[I]); end else begin // it is a "add" case (iDispatcher and $DF) of $00, $01, $02, $03: I := ExtAction.ActionList.Add(TExtActionCommand.Create(sActionWords, '', '', '')); $10, $11, $12, $13: I := ExtAction.ActionList.Add(TExtActionCommand.Create(sActionWords, sCommandFilename, '%p', '')); end; // add action to actions listbox lbActions.Items.AddObject(ExtAction.ActionList.ExtActionCommand[I].ActionName, ExtAction.ActionList.ExtActionCommand[I]); end; end; lbActions.ItemIndex := I; edbActionNameChange(edbActionName); //<--Trig this event to force redraw of lbActions current selected element because in case of switch from "open" to identical "open" for exemple, "edbActionChange" is not trig and so our element in the list is not drawn! // Update icon if possible, if necessary case (iDispatcher and $10) of $10: if Exts.Items[lbFileTypes.ItemIndex].Icon = '' then edIconFileName.Text := GetFileAssocFilenameToSave(fameIcon, OpenDialog.FileName); //No quote required here! So "sCommandFilename" is not used. end; UpdateEnabledButtons; if edbActionName.CanFocus then begin edbActionName.SetFocus; edbActionName.SelStart := UTF8Length(edbActionName.Text); end; end; SET_ACTION_WORD: begin case (iDispatcher and $DF) of $00, $01, $02, $03: edbActionName.Text := sActionWords; $10, $11, $12, $13: begin edbActionName.Text := sActionWords; fneCommand.Text := sCommandFilename; edtParams.Text := '%p'; end; end; end; else begin if miMenuItem.Name = 'miOpen' then edbActionName.Text := 'Open' else if miMenuItem.Name = 'miView' then edbActionName.Text := 'View' else if miMenuItem.Name = 'miEdit' then edbActionName.Text := 'Edit'; end; end; end; { TfrmOptionsFileAssoc.miCommandsClick } procedure TfrmOptionsFileAssoc.miCommandsClick(Sender: TObject); begin with Sender as TComponent do begin case tag of 2: fneCommand.SelText := '{!VIEWER}'; 3: fneCommand.SelText := '{!DC-VIEWER}'; 4: fneCommand.SelText := '{!EDITOR}'; 5: fneCommand.SelText := '{!DC-EDITOR}'; 6: fneCommand.SelText := '{!SHELL}'; 7: begin fneCommand.SelText := fneCommand.Text + ''; fneCommand.SetFocus; fneCommand.SelStart := Pos('?>', fneCommand.Text) - 1; end; end; end; end; { TfrmOptionsFileAssoc.pnlRightSettingsResize } procedure TfrmOptionsFileAssoc.pnlRightSettingsResize(Sender: TObject); begin gbExts.Height := pnlRightSettings.ClientHeight div 4; end; { TfrmOptionsFileAssoc.pnlSettingsResize } procedure TfrmOptionsFileAssoc.pnlSettingsResize(Sender: TObject); begin pnlLeftSettings.Width := pnlSettings.ClientWidth div 3; end; { TfrmOptionsFileAssoc.sbtnIconClick } procedure TfrmOptionsFileAssoc.sbtnIconClick(Sender: TObject); var sFileName: string; begin sFileName := mbExpandFileName(edIconFileName.Text); if ShowOpenIconDialog(Self, sFileName) then edIconFileName.Text := GetFileAssocFilenameToSave(fameIcon, sFileName); end; { TfrmOptionsFileAssoc.InsertAddSingleExtensionToLists } function TfrmOptionsFileAssoc.InsertAddSingleExtensionToLists(sExt: string; iInsertPosition: integer): boolean; begin Result := False; if (sExt <> '') then begin if Exts.Items[lbFileTypes.ItemIndex].Extensions.IndexOf(sExt) = -1 then begin if iInsertPosition = -1 then iInsertPosition := lbExts.Items.Add(sExt) else lbExts.Items.Insert(iInsertPosition, sExt); lbExts.ItemIndex := iInsertPosition; //add extension in TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Insert(iInsertPosition, sExt); Result := True; end else begin lbExts.ItemIndex := Exts.Items[lbFileTypes.ItemIndex].Extensions.IndexOf(sExt); end; UpdateEnabledButtons; end; end; { TfrmOptionsFileAssoc.InsertAddExtensionToLists } procedure TfrmOptionsFileAssoc.InsertAddExtensionToLists(sParamExt: string; iPositionToInsert: integer); var iIndex: integer; sExt: string; begin sParamExt := sParamExt + '|'; while Pos('|', sParamExt) <> 0 do begin iIndex := Pos('|', sParamExt); sExt := Copy(sParamExt, 1, iIndex - 1); Delete(sParamExt, 1, iIndex); if InsertAddSingleExtensionToLists(sExt, iPositionToInsert) then if iPositionToInsert <> -1 then Inc(iPositionToInsert); end; end; { TfrmOptionsFileAssoc.btnInsertAddExtClick } procedure TfrmOptionsFileAssoc.btnInsertAddExtClick(Sender: TObject); var sExt: string; Dispatcher: integer; begin with Sender as TComponent do Dispatcher := tag; if (lbExts.Items.Count = 0) or (lbExts.ItemIndex = -1) then Dispatcher := 0; sExt := InputBox(GetTitle + ' - ' + gbExts.Hint, rsMsgEnterFileExt, ''); InsertAddExtensionToLists(sExt, ifthen((Dispatcher = 0), -1, lbExts.ItemIndex)); if lbExts.CanFocus then lbExts.SetFocus; end; { TfrmOptionsFileAssoc.btnParametersHelperClick } procedure TfrmOptionsFileAssoc.btnParametersHelperClick(Sender: TObject); begin BringPercentVariablePopupMenu(edtParams); end; { TfrmOptionsFileAssoc.btnRelativeCommandClick } procedure TfrmOptionsFileAssoc.btnRelativeCommandClick(Sender: TObject); begin fneCommand.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneCommand, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnRelativePathIconClick } procedure TfrmOptionsFileAssoc.btnRelativePathIconClick(Sender: TObject); begin edIconFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edIconFileName, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnStartPathPathHelperClick } procedure TfrmOptionsFileAssoc.btnStartPathPathHelperClick(Sender: TObject); begin deStartPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(deStartPath, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnStartPathVarHelperClick } procedure TfrmOptionsFileAssoc.btnStartPathVarHelperClick(Sender: TObject); begin BringPercentVariablePopupMenu(deStartPath); end; procedure TfrmOptionsFileAssoc.deStartPathAcceptDirectory(Sender: TObject; var Value: String); begin Value := GetFileAssocFilenameToSave(fameStartingPath, Value); end; { TfrmOptionsFileAssoc.edIconFileNameChange } procedure TfrmOptionsFileAssoc.edIconFileNameChange(Sender: TObject); begin if not FUpdatingControls then SetIconFileName(edIconFileName.Text); end; procedure TfrmOptionsFileAssoc.fneCommandAcceptFileName(Sender: TObject; var Value: String); begin Value := GetFileAssocFilenameToSave(fameCommand, Value); end; { TfrmOptionsFileAssoc.FrameResize } procedure TfrmOptionsFileAssoc.FrameResize(Sender: TObject); begin lbExts.Columns := (lbExts.Width div 120); end; { TfrmOptionsFileAssoc.btnRemoveExtClick } procedure TfrmOptionsFileAssoc.btnRemoveExtClick(Sender: TObject); var I: integer; begin // remove extension from extensions listbox with lbExts do begin I := ItemIndex; if I < 0 then Exit; Items.Delete(I); if I < Items.Count then ItemIndex := I else if (I - 1) < Items.Count then ItemIndex := (I - 1); end; // remove extension from TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Delete(I); UpdateEnabledButtons; if lbExts.CanFocus then lbExts.SetFocus; end; { TfrmOptionsFileAssoc.btnUpActClick } procedure TfrmOptionsFileAssoc.btnUpActClick(Sender: TObject); var I: integer; begin // move action in actions listbox with lbActions do begin Tag := 1; // start moving I := ItemIndex; if I = -1 then exit; if I > 0 then begin Items.Move(I, I - 1); ItemIndex := I - 1; end; end; // move action in TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Move(I, I - 1); end; lbActions.Tag := 0; // end moving UpdateEnabledButtons; if lbActions.CanFocus then lbActions.SetFocus; end; { TfrmOptionsFileAssoc.lbActionsDragDrop } procedure TfrmOptionsFileAssoc.lbActionsDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // Validate if the move is okay SrcIndex := lbActions.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbActions.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbActions.Count) then DestIndex := lbActions.Count - 1; // exchange positions in actions listbox lbActions.Tag := 1; // start moving try lbActions.Items.Move(SrcIndex, DestIndex); lbActions.ItemIndex := DestIndex; // exchange actions in TExts object Exts.Items[lbFileTypes.ItemIndex].ActionList.Move(SrcIndex, DestIndex); finally lbActions.Tag := 0; // end moving end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnDownActClick } procedure TfrmOptionsFileAssoc.btnDownActClick(Sender: TObject); var I: integer; begin // move action in actions listbox with lbActions do begin Tag := 1; // start moving I := ItemIndex; if I = -1 then exit; if (I < Items.Count - 1) and (I > -1) then begin Items.Move(I, I + 1); ItemIndex := I + 1; end; end; // move action in TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Move(I, I + 1); end; lbActions.Tag := 0; // end moving UpdateEnabledButtons; if lbActions.CanFocus then lbActions.SetFocus; end; { TfrmOptionsFileAssoc.btnEditExtClick } procedure TfrmOptionsFileAssoc.btnEditExtClick(Sender: TObject); var iRememberIndex: integer; sExt: string; begin iRememberIndex := lbExts.ItemIndex; if iRememberIndex < 0 then Exit; // change extension from extensions listbox sExt := InputBox(GetTitle + ' - ' + gbExts.Hint, rsMsgEnterFileExt, lbExts.Items[iRememberIndex]); if sExt <> lbExts.Items[iRememberIndex] then begin btnRemoveExtClick(btnRemoveExt); //We remove the old value if iRememberIndex >= lbExts.Items.Count then iRememberIndex := -1; InsertAddExtensionToLists(sExt, iRememberIndex); //We may add new one, maybe not, maybe bunch of them, etc. end; if lbExts.CanFocus then lbExts.SetFocus; end; { TfrmOptionsFileAssoc.btnInsertAddActClick } procedure TfrmOptionsFileAssoc.btnInsertAddActClick(Sender: TObject); var iSubMenu: integer; begin pmActions.Tag := ACTUAL_ADD_ACTION; for iSubMenu := 0 to pred(pmActions.Items.Count) do with pmActions.Items[iSubMenu] do Tag := ifthen((TComponent(Sender).Tag = $20), (Tag or $20), (Tag and $DF)); pmActions.PopUp(); end; { TfrmOptionsFileAssoc.btnActionsClick } procedure TfrmOptionsFileAssoc.btnActionsClick(Sender: TObject); begin pmActions.tag := SET_ACTION_WORD; pmActions.PopUp(); end; { TfrmOptionsFileAssoc.btnCloneActClick } procedure TfrmOptionsFileAssoc.btnCloneActClick(Sender: TObject); var ExtAction: TExtAction; I: integer; begin ExtAction := Exts.Items[lbFileTypes.ItemIndex]; I := lbActions.ItemIndex; if (I + 1) <= pred(ExtAction.ActionList.Count) then begin ExtAction.ActionList.Insert(I + 1, ExtAction.ActionList.ExtActionCommand[I].CloneExtAction); // add action to TExtAction lbActions.Items.InsertObject(I + 1, '', ExtAction.ActionList.ExtActionCommand[I + 1]); // add action to actions listbox end else begin ExtAction.ActionList.Add(ExtAction.ActionList.ExtActionCommand[I].CloneExtAction); // add action to TExtAction lbActions.Items.AddObject(ExtAction.ActionList.ExtActionCommand[I + 1].ActionName, ExtAction.ActionList.ExtActionCommand[I + 1]); // add action to actions listbox end; lbActions.ItemIndex := I + 1; edbActionNameChange(edbActionName); //<--Trig this event to force redraw of lbActions current selected element because in case of switch from "open" to identical "open" for exemple, "edbActionChange" is not trig and so our element in the list is not drawn! UpdateEnabledButtons; if edbActionName.CanFocus then begin edbActionName.SetFocus; edbActionName.SelStart := UTF8Length(edbActionName.Text); end; end; { TfrmOptionsFileAssoc.btnRemoveActClick } procedure TfrmOptionsFileAssoc.btnRemoveActClick(Sender: TObject); var I: integer; begin // remove action from actions listbox with lbActions do begin I := ItemIndex; if I < 0 then Exit; Items.Delete(I); if I < Items.Count then ItemIndex := I else if (I - 1) < Items.Count then ItemIndex := (I - 1); end; // remove action from TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Delete(I); end; UpdateEnabledButtons; if lbActions.CanFocus then lbActions.SetFocus; end; { TfrmOptionsFileAssoc.btnCommandsClick } procedure TfrmOptionsFileAssoc.btnCommandsClick(Sender: TObject); begin pmCommands.PopUp(); end; { TfrmOptionsFileAssoc.FreeIcon } procedure TfrmOptionsFileAssoc.FreeIcon(iIndex: integer); begin with lbFileTypes do begin Canvas.Lock; try if Assigned(Items.Objects[iIndex]) then begin Items.Objects[iIndex].Free; Items.Objects[iIndex] := nil; end; finally Canvas.Unlock; end; end; end; { TfrmOptionsFileAssoc.SetIconFileName } procedure TfrmOptionsFileAssoc.SetIconFileName(const sFileName: string); var bmpTemp: TBitmap; Index: integer; begin if sFileName <> EmptyStr then begin bmpTemp := PixMapManager.LoadBitmapEnhanced(sFileName, 32, True, sbtnIcon.Color); if Assigned(bmpTemp) then begin sbtnIcon.Glyph.Assign(bmpTemp); FreeAndNil(bmpTemp); end else sbtnIcon.Glyph.Clear; end else sbtnIcon.Glyph.Clear; Index := lbFileTypes.ItemIndex; if (Index >= 0) and (Index < Exts.Count) then begin FreeIcon(Index); // save icon for use in OnDrawItem procedure if sFileName <> EmptyStr then lbFileTypes.Items.Objects[Index] := PixMapManager.LoadBitmapEnhanced(sFileName, gIconsSize, True, Color); lbFileTypes.Repaint; Exts.Items[Index].Icon := sFileName; Exts.Items[Index].IconIndex := -1; end; end; { TfrmOptionsFileAssoc.SetMinimumSize } procedure TfrmOptionsFileAssoc.SetMinimumSize; begin gbFileTypes.Constraints.MinWidth := gbFileTypes.BorderSpacing.Left + btnRemoveType.Left + btnRemoveType.Width + 5 + // space between btnRenameType.Width + gbFileTypes.Width - (btnRenameType.Left + btnRenameType.Width) + gbFileTypes.BorderSpacing.Right; pnlLeftSettings.Constraints.MinWidth := gbFileTypes.Constraints.MinWidth + gbFileTypes.BorderSpacing.Around; Constraints.MinWidth := pnlLeftSettings.Constraints.MinWidth + pnlLeftSettings.BorderSpacing.Left + pnlLeftSettings.BorderSpacing.Right + pnlLeftSettings.BorderSpacing.Around + pnlRightSettings.Constraints.MinWidth + pnlRightSettings.BorderSpacing.Left + pnlRightSettings.BorderSpacing.Right + pnlRightSettings.BorderSpacing.Around; end; { TfrmOptionsFileAssoc.MakeUsInPositionToWorkWithActiveFile } procedure TfrmOptionsFileAssoc.MakeUsInPositionToWorkWithActiveFile; var aFile: TFile; InnerActionList: TExtActionList; IndexOfFirstPossibleFileType: integer; sFileType, sDummy: string; ExtAction: TExtAction; iInsertPosition: integer; iSelectedFileType: integer = -1; InnerFileTypeNameList: TStringList; begin aFile := frmMain.ActiveFrame.CloneActiveFile; if Assigned(aFile) then begin if (not aFile.IsDirectory) and (not aFile.IsLink) and (not (aFile.Extension = '')) then begin InnerActionList := TExtActionList.Create; try if gExts.GetExtActions(aFile, InnerActionList, @IndexOfFirstPossibleFileType) then begin if (IndexOfFirstPossibleFileType <> -1) and (lbFileTypes.Items.Count > IndexOfFirstPossibleFileType) then //Double verification, but unnecessary. begin lbFileTypes.ItemIndex := IndexOfFirstPossibleFileType; lbFileTypesSelectionChange(lbFileTypes, False); lbExts.ItemIndex := lbExts.Items.IndexOf(aFile.Extension); if (lbExts.ItemIndex = -1) and (lbExts.Items.Count > 0) then lbExts.ItemIndex := 0; end; end else begin // Extension of current selected file is not in our file associations list. if gOfferToAddToFileAssociations then begin InnerFileTypeNameList := TStringList.Create; try InnerFileTypeNameList.Assign(lbFileTypes.Items); InnerFileTypeNameList.Insert(0, Format(rsMsgCreateANewFileType, [UpperCase(aFile.Extension)])); if ShowInputListBox(rsMsgTitleExtNotInFileType, Format(rsMsgSekectFileType, [aFile.Extension]), InnerFileTypeNameList, sDummy, iSelectedFileType) then begin if iSelectedFileType <> -1 then begin if iSelectedFileType <> 0 then begin Dec(iSelectedFileType); //1. Select the specified file type lbFileTypes.ItemIndex := iSelectedFileType; lbFileTypesSelectionChange(lbFileTypes, False); //2. Add the extension to listbox AND structure iInsertPosition := lbExts.Items.Add(aFile.Extension); lbExts.ItemIndex := iInsertPosition; Exts.Items[lbFileTypes.ItemIndex].Extensions.Add(aFile.Extension); end else begin sFileType := UpperCase(aFile.Extension) + ' ' + rsSimpleWordFiles; if InputQuery(rsMsgTitleExtNotInFileType, Format(rsMsgEnterNewFileTypeName, [aFile.Extension]), sFileType) then begin //1. Create the file type ExtAction := TExtAction.Create; ExtAction.IconIndex := -1; ExtAction.Name := sFileType; lbFileTypes.Items.AddObject(ExtAction.Name, nil); //2. Add it to our structure AND listbox Exts.AddItem(ExtAction); lbFileTypes.ItemIndex := pred(lbFileTypes.Items.Count); //3. Add the extension to listbox AND structure iInsertPosition := lbExts.Items.Add(aFile.Extension); lbExts.ItemIndex := iInsertPosition; Exts.Items[lbFileTypes.ItemIndex].Extensions.Add(aFile.Extension); //4. Select an action for "open" pmActions.tag := ACTUAL_ADD_ACTION; miActionsClick(miOpenWith); //5. Refresh display to have appropriate button shown. UpdateEnabledButtons; end; end; end; end; finally FreeAndNil(InnerFileTypeNameList); end; end; end; finally FreeAndNil(InnerActionList); end; FreeAndNil(aFile); end; end; if lbFileTypes.CanFocus then lbFileTypes.SetFocus; end; procedure TfrmOptionsFileAssoc.actSelectFileTypeExecute(Sender: TObject); begin if lbFileTypes.CanFocus then lbFileTypes.SetFocus; end; procedure TfrmOptionsFileAssoc.actSelectIconExecute(Sender: TObject); begin if edIconFileName.CanFocus then edIconFileName.SetFocus; end; procedure TfrmOptionsFileAssoc.actSelectExtensionsExecute(Sender: TObject); begin if lbExts.CanFocus then lbExts.SetFocus; end; procedure TfrmOptionsFileAssoc.actSelectActionsExecute(Sender: TObject); begin if lbActions.CanFocus then lbActions.SetFocus; end; procedure TfrmOptionsFileAssoc.actSelectActionDescriptionExecute(Sender: TObject); begin if edbActionName.CanFocus then edbActionName.SetFocus; end; { TfrmOptionsFileAssoc.GetFileAssocFilenameToSave } function TfrmOptionsFileAssoc.GetFileAssocFilenameToSave(AFileAssocPathModifierElement:tFileAssocPathModifierElement; sParamFilename: string): string; var sMaybeBasePath, SubWorkingPath, MaybeSubstitionPossible: string; begin sParamFilename := mbExpandFileName(sParamFilename); Result := sParamFilename; if AFileAssocPathModifierElement in gFileAssocPathModifierElements then begin if gFileAssocFilenameStyle = pfsRelativeToDC then sMaybeBasePath := EnvVarCommanderPath else sMaybeBasePath := gFileAssocPathToBeRelativeTo; case gFileAssocFilenameStyle of pfsAbsolutePath: ; pfsRelativeToDC, pfsRelativeToFollowingPath: begin SubWorkingPath := IncludeTrailingPathDelimiter(mbExpandFileName(sMaybeBasePath)); MaybeSubstitionPossible := ExtractRelativePath(IncludeTrailingPathDelimiter(SubWorkingPath), sParamFilename); if MaybeSubstitionPossible <> sParamFilename then Result := IncludeTrailingPathDelimiter(sMaybeBasePath) + MaybeSubstitionPossible; end; end; end; end; { TfrmOptionsFileAssoc.ScanFileAssocForFilenameAndPath } procedure TfrmOptionsFileAssoc.ScanFileAssocForFilenameAndPath; var ActionList: TExtActionList; iFileType, iAction: Integer; begin for iFileType := 0 to Pred(Exts.Count) do begin Exts.FileType[iFileType].Icon := GetFileAssocFilenameToSave(fameIcon, Exts.FileType[iFileType].Icon); ActionList := Exts.FileType[iFileType].ActionList; for iAction := 0 to Pred(ActionList.Count) do begin ActionList.ExtActionCommand[iAction].CommandName := GetFileAssocFilenameToSave(fameCommand, ActionList.ExtActionCommand[iAction].CommandName); ActionList.ExtActionCommand[iAction].StartPath := GetFileAssocFilenameToSave(fameStartingPath, ActionList.ExtActionCommand[iAction].StartPath); end; end; //Kind of refresh of what might be displayed. if lbFileTypes.ItemIndex <> -1 then lbFileTypesSelectionChange(lbFileTypes, True); end; end. doublecmd-1.1.30/src/frames/foptionsfileassoc.lrj0000644000175000001440000002223015104114162021073 0ustar alexxusers{"version":1,"strings":[ {"hash":128648723,"name":"tfrmoptionsfileassoc.gbactions.caption","sourcebytes":[65,99,116,105,111,110,115],"value":"Actions"}, {"hash":132951248,"name":"tfrmoptionsfileassoc.lbactions.hint","sourcebytes":[65,99,116,105,111,110,115,32,109,97,121,32,98,101,32,115,111,114,116,101,100,32,98,121,32,100,114,97,103,32,38,32,100,114,111,112],"value":"Actions may be sorted by drag & drop"}, {"hash":11200,"name":"tfrmoptionsfileassoc.btnupact.caption","sourcebytes":[38,85,112],"value":"&Up"}, {"hash":4922846,"name":"tfrmoptionsfileassoc.btndownact.caption","sourcebytes":[68,111,38,119,110],"value":"Do&wn"}, {"hash":84253844,"name":"tfrmoptionsfileassoc.btninsertact.caption","sourcebytes":[73,110,115,101,114,116],"value":"Insert"}, {"hash":18340,"name":"tfrmoptionsfileassoc.btnaddact.caption","sourcebytes":[65,100,100],"value":"Add"}, {"hash":73217605,"name":"tfrmoptionsfileassoc.btncloneact.caption","sourcebytes":[67,38,108,111,110,101],"value":"C&lone"}, {"hash":147070357,"name":"tfrmoptionsfileassoc.btnremoveact.caption","sourcebytes":[82,101,109,111,38,118,101],"value":"Remo&ve"}, {"hash":326238,"name":"tfrmoptionsfileassoc.gbicon.caption","sourcebytes":[73,99,111,110],"value":"Icon"}, {"hash":40085009,"name":"tfrmoptionsfileassoc.sbtnicon.hint","sourcebytes":[67,108,105,99,107,32,109,101,32,116,111,32,99,104,97,110,103,101,32,105,99,111,110,33],"value":"Click me to change icon!"}, {"hash":113622016,"name":"tfrmoptionsfileassoc.gbexts.hint","sourcebytes":[67,97,110,32,98,101,32,115,111,114,116,101,100,32,98,121,32,100,114,97,103,32,38,32,100,114,111,112],"value":"Can be sorted by drag & drop"}, {"hash":207440883,"name":"tfrmoptionsfileassoc.gbexts.caption","sourcebytes":[69,120,116,101,110,115,105,111,110,115],"value":"Extensions"}, {"hash":156618752,"name":"tfrmoptionsfileassoc.lbexts.hint","sourcebytes":[69,120,116,101,110,115,105,111,110,115,32,109,97,121,32,98,101,32,115,111,114,116,101,100,32,98,121,32,100,114,97,103,32,38,32,100,114,111,112],"value":"Extensions may be sorted by drag & drop"}, {"hash":4959188,"name":"tfrmoptionsfileassoc.btneditext.caption","sourcebytes":[69,100,105,38,116],"value":"Edi&t"}, {"hash":184917172,"name":"tfrmoptionsfileassoc.btninsertext.caption","sourcebytes":[38,73,110,115,101,114,116],"value":"&Insert"}, {"hash":18340,"name":"tfrmoptionsfileassoc.btnaddext.caption","sourcebytes":[65,100,100],"value":"Add"}, {"hash":142427797,"name":"tfrmoptionsfileassoc.btnremoveext.caption","sourcebytes":[82,101,38,109,111,118,101],"value":"Re&move"}, {"hash":125884131,"name":"tfrmoptionsfileassoc.gbfiletypes.caption","sourcebytes":[70,105,108,101,32,116,121,112,101,115],"value":"File types"}, {"hash":149820880,"name":"tfrmoptionsfileassoc.lbfiletypes.hint","sourcebytes":[70,105,108,101,32,116,121,112,101,115,32,109,97,121,32,98,101,32,115,111,114,116,101,100,32,98,121,32,100,114,97,103,32,38,32,100,114,111,112],"value":"File types may be sorted by drag & drop"}, {"hash":277668,"name":"tfrmoptionsfileassoc.btnaddnewtype.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":193742565,"name":"tfrmoptionsfileassoc.btnremovetype.caption","sourcebytes":[38,82,101,109,111,118,101],"value":"&Remove"}, {"hash":80496741,"name":"tfrmoptionsfileassoc.btnrenametype.caption","sourcebytes":[82,38,101,110,97,109,101],"value":"R&ename"}, {"hash":219666334,"name":"tfrmoptionsfileassoc.gbactiondescription.caption","sourcebytes":[65,99,116,105,111,110,32,100,101,115,99,114,105,112,116,105,111,110],"value":"Action description"}, {"hash":39517605,"name":"tfrmoptionsfileassoc.edbactionname.hint","sourcebytes":[78,97,109,101,32,111,102,32,116,104,101,32,97,99,116,105,111,110,46,32,73,116,32,105,115,32,110,101,118,101,114,32,112,97,115,115,101,100,32,116,111,32,116,104,101,32,115,121,115,116,101,109,44,32,105,116,39,115,32,106,117,115,116,32,97,32,109,110,101,109,111,110,105,99,32,110,97,109,101,32,99,104,111,115,101,110,32,98,121,32,121,111,117,44,32,102,111,114,32,121,111,117],"value":"Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you"}, {"hash":92243402,"name":"tfrmoptionsfileassoc.lblaction.caption","sourcebytes":[65,99,116,105,111,110,32,38,110,97,109,101,58],"value":"Action &name:"}, {"hash":93137918,"name":"tfrmoptionsfileassoc.fnecommand.hint","sourcebytes":[67,111,109,109,97,110,100,32,116,111,32,101,120,101,99,117,116,101,46,32,78,101,118,101,114,32,113,117,111,116,101,32,116,104,105,115,32,115,116,114,105,110,103,46],"value":"Command to execute. Never quote this string."}, {"hash":53701060,"name":"tfrmoptionsfileassoc.btncommands.hint","sourcebytes":[83,101,108,101,99,116,32,121,111,117,114,32,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"Select your internal command"}, {"hash":15252584,"name":"tfrmoptionsfileassoc.btnrelativecommand.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":197225810,"name":"tfrmoptionsfileassoc.btnparametershelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":105087194,"name":"tfrmoptionsfileassoc.lblcommand.caption","sourcebytes":[67,111,109,109,97,110,100,58],"value":"Command:"}, {"hash":230939086,"name":"tfrmoptionsfileassoc.edtparams.hint","sourcebytes":[80,97,114,97,109,101,116,101,114,32,116,111,32,112,97,115,115,32,116,111,32,116,104,101,32,99,111,109,109,97,110,100,46,32,76,111,110,103,32,102,105,108,101,110,97,109,101,32,119,105,116,104,32,115,112,97,99,101,115,32,115,104,111,117,108,100,32,98,101,32,113,117,111,116,101,100,32,40,109,97,110,117,97,108,108,121,32,101,110,116,101,114,105,110,103,41,46],"value":"Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)."}, {"hash":163890522,"name":"tfrmoptionsfileassoc.lblexternalparameters.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,38,115,58],"value":"Parameter&s:"}, {"hash":96005582,"name":"tfrmoptionsfileassoc.destartpath.hint","sourcebytes":[83,116,97,114,116,105,110,103,32,112,97,116,104,32,111,102,32,116,104,101,32,99,111,109,109,97,110,100,46,32,78,101,118,101,114,32,113,117,111,116,101,32,116,104,105,115,32,115,116,114,105,110,103,46],"value":"Starting path of the command. Never quote this string."}, {"hash":197225810,"name":"tfrmoptionsfileassoc.btnstartpathvarhelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":15252584,"name":"tfrmoptionsfileassoc.btnstartpathpathhelper.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":46327258,"name":"tfrmoptionsfileassoc.lblstartpath.caption","sourcebytes":[83,116,97,114,116,32,112,97,116,38,104,58],"value":"Start pat&h:"}, {"hash":353982,"name":"tfrmoptionsfileassoc.miopen.caption","sourcebytes":[79,112,101,110],"value":"Open"}, {"hash":380871,"name":"tfrmoptionsfileassoc.miview.caption","sourcebytes":[86,105,101,119],"value":"View"}, {"hash":310020,"name":"tfrmoptionsfileassoc.miedit.caption","sourcebytes":[69,100,105,116],"value":"Edit"}, {"hash":78424925,"name":"tfrmoptionsfileassoc.micustom.caption","sourcebytes":[67,117,115,116,111,109],"value":"Custom"}, {"hash":158101886,"name":"tfrmoptionsfileassoc.miopenwith.caption","sourcebytes":[79,112,101,110,32,119,105,116,104,46,46,46],"value":"Open with..."}, {"hash":163936894,"name":"tfrmoptionsfileassoc.miviewwith.caption","sourcebytes":[86,105,101,119,32,119,105,116,104,46,46,46],"value":"View with..."}, {"hash":179419006,"name":"tfrmoptionsfileassoc.mieditwith.caption","sourcebytes":[69,100,105,116,32,119,105,116,104,46,46,46],"value":"Edit with..."}, {"hash":44174558,"name":"tfrmoptionsfileassoc.menuitem3.caption","sourcebytes":[67,117,115,116,111,109,32,119,105,116,104,46,46,46],"value":"Custom with..."}, {"hash":51357346,"name":"tfrmoptionsfileassoc.miviewer.caption","sourcebytes":[79,112,101,110,32,105,110,32,86,105,101,119,101,114],"value":"Open in Viewer"}, {"hash":162573938,"name":"tfrmoptionsfileassoc.miinternalviewer.caption","sourcebytes":[79,112,101,110,32,105,110,32,73,110,116,101,114,110,97,108,32,86,105,101,119,101,114],"value":"Open in Internal Viewer"}, {"hash":41640450,"name":"tfrmoptionsfileassoc.mieditor.caption","sourcebytes":[79,112,101,110,32,105,110,32,69,100,105,116,111,114],"value":"Open in Editor"}, {"hash":147221202,"name":"tfrmoptionsfileassoc.miinternaleditor.caption","sourcebytes":[79,112,101,110,32,105,110,32,73,110,116,101,114,110,97,108,32,69,100,105,116,111,114],"value":"Open in Internal Editor"}, {"hash":218348060,"name":"tfrmoptionsfileassoc.mishell.caption","sourcebytes":[82,117,110,32,105,110,32,116,101,114,109,105,110,97,108],"value":"Run in terminal"}, {"hash":169726772,"name":"tfrmoptionsfileassoc.migetoutputfromcommand.caption","sourcebytes":[71,101,116,32,111,117,116,112,117,116,32,102,114,111,109,32,99,111,109,109,97,110,100],"value":"Get output from command"} ]} doublecmd-1.1.30/src/frames/foptionsfileassoc.lfm0000644000175000001440000012736315104114162021077 0ustar alexxusersinherited frmOptionsFileAssoc: TfrmOptionsFileAssoc Height = 585 Width = 568 HelpKeyword = '/configuration.html#ConfigAssociations' ClientHeight = 585 ClientWidth = 568 Constraints.MinHeight = 300 OnResize = FrameResize ParentShowHint = False ShowHint = True DesignLeft = 100 DesignTop = 118 object pnlSettings: TPanel[0] Left = 0 Height = 585 Top = 0 Width = 568 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 585 ClientWidth = 568 TabOrder = 0 OnResize = pnlSettingsResize object pnlRightSettings: TPanel AnchorSideLeft.Control = pnlLeftSettings AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlSettings AnchorSideRight.Control = pnlSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottomSettings Left = 266 Height = 437 Top = 6 Width = 292 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 437 ClientWidth = 292 Constraints.MinWidth = 200 TabOrder = 1 OnResize = pnlRightSettingsResize object gbActions: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = gbExts AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlRightSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 213 Top = 224 Width = 292 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Actions' ClientHeight = 193 ClientWidth = 288 TabOrder = 2 object lbActions: TListBox Left = 6 Height = 181 Hint = 'Actions may be sorted by drag & drop' Top = 6 Width = 197 Align = alClient BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lbActionsDragDrop OnDragOver = lbGenericDragOver OnDrawItem = lbGenericListDrawItem OnSelectionChange = lbActionsSelectionChange ScrollWidth = 198 Style = lbOwnerDrawFixed TabOrder = 0 end object pnlActsButtons: TPanel Left = 209 Height = 181 Top = 6 Width = 73 Align = alRight AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 181 ClientWidth = 73 TabOrder = 1 object btnUpAct: TButton Left = 0 Height = 29 Top = 0 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Up' OnClick = btnUpActClick TabOrder = 0 end object btnDownAct: TButton Left = 0 Height = 29 Top = 29 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Do&wn' OnClick = btnDownActClick TabOrder = 1 end object btnInsertAct: TButton Tag = 32 Left = 0 Height = 29 Top = 58 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Insert' OnClick = btnInsertAddActClick TabOrder = 2 end object btnAddAct: TButton Left = 0 Height = 29 Top = 87 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Add' OnClick = btnInsertAddActClick TabOrder = 3 end object btnCloneAct: TButton Left = 0 Height = 29 Top = 116 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'C&lone' OnClick = btnCloneActClick TabOrder = 4 end object btnRemoveAct: TButton Left = 0 Height = 29 Top = 145 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Remo&ve' OnClick = btnRemoveActClick TabOrder = 5 end end object pnlActsEdits: TPanel Left = 0 Height = 0 Top = 193 Width = 288 Align = alBottom AutoSize = True BevelOuter = bvNone TabOrder = 2 end end object gbIcon: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = pnlRightSettings AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlRightSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 64 Top = 0 Width = 292 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Icon' ChildSizing.LeftRightSpacing = 6 ClientHeight = 44 ClientWidth = 288 TabOrder = 0 object sbtnIcon: TSpeedButton AnchorSideLeft.Control = gbIcon AnchorSideTop.Control = gbIcon Left = 6 Height = 38 Hint = 'Click me to change icon!' Top = 2 Width = 38 BorderSpacing.Top = 2 BorderSpacing.Bottom = 4 OnClick = sbtnIconClick end object btnRelativePathIcon: TSpeedButton AnchorSideTop.Control = sbtnIcon AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbIcon AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 259 Height = 23 Top = 10 Width = 23 Anchors = [akTop, akRight] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativePathIconClick end object btnIconSelectFilename: TSpeedButton AnchorSideTop.Control = sbtnIcon AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativePathIcon AnchorSideBottom.Side = asrBottom Left = 236 Height = 23 Top = 10 Width = 23 Anchors = [akTop, akRight] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000328B D83F328BD83F328BD83F328BD83F328BD83F328BD83F328BD83F328BD83F328B D83F328BD83F328BD83F328BD83F328BD83F328BD83F000000004994D7FF328B D8FF328AD8FF328BD8FF328BD8FF328BD8FF328BD8FF328BD8FF328BD8FF328B D8FF328BD8FF328AD8FF328BD8FF4994D7FF328BD83F00000000358FD8FFDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF79D7 F3FF73D5F3FF6FD3F2FFC2EAF8FF3494DAFF328BD83F000000003A96DAFFEFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF79DFF7FF70DEF6FF66DBF5FF5AD8 F4FF4CD4F3FF3FD1F2FFCAF2FBFF3494DAFF328BD83F000000003A9CDAFFF2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7EE1F7FF76DEF6FF6BDC F6FF5DD9F4FF4ED5F3FFCCF2FBFF3494DAFF328BD83F0000000039A2DAFFF6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF86E2F7FF7EE1F7FF76DEF6FF6BDC F6FF5DD9F4FF4ED5F3FFCCF2FBFF3494DAFF328BD83F0000000039A7D9FFFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF3176 B3FF2F72B1FF2D71B2FF2B72B6FF2C73B9FF1C476DFF0000000037ABD9FFE8F6 FBFF6FBCE7FF54AAE2FF4CA5E0FF91C9EBFFFDFEFDFFFDFEFDFFFFFDFCFF2F72 B1FF6FD1F6FF6ACEF8FF84BFB3FFA0AC64FF3684C7FF193D5EFF3EACDAFFF1FA FDFF94DEF5FF93DCF4FF63BCE9FF3494DAFF3494DAFF3494DAFF3494DAFF2E70 AFFF65C4EDFF5FBFF1FF9DA461FFDD8A00FF5BBCF3FF2E6FAEFF3FB3DBFFF7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FF1E486EFF3075B1FF3075AFFF4492 C6FF5FBAE6FF5DB5E9FF40C0D7FF20CCBFFF66BDF1FF2E72B2FF3AB4DAFFFDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFF2F74B2FF6EC1E5FF2F6EEDFF4791 E5FF5CB0DEFF5CABE1FF24C3B0FF00DF7CFF83C3F0FF2D71B1FF56BFDDFF60C3 E1FF62C4E2FF62C4E2FF62C4E2FF61C4E2FF2C72B0FFA2DAEDFF001AF4FF126C F1FF24B9EEFF3DBAE4FF22D3F3FF58A2DFFFACD4F0FF2C71B1FF000000000000 0000000000000000000000000000000000002C71AEFFA4CFE7FF87ACEEFF25B0 F5FF00C5FFFF2AD6EEFF00FFFFFFB8D5F0FF73A7D2FF1E4D77FF000000000000 000000000000000000000000000000000000000000003378B3FF84B5D8FFBCDB EFFFBDD8EDFFBDD6EEFFABCAE7FF699CCCFF27659FFF00000000000000000000 0000000000000000000000000000000000000000000000000000215583FF2A70 B0FF2A6FAFFF2A6FB0FF2B70B0FF1F4D77FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = sbtnIconClick end object edIconFileName: TEdit AnchorSideLeft.Control = sbtnIcon AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbtnIcon AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnIconSelectFilename Left = 44 Height = 23 Top = 10 Width = 192 Anchors = [akTop, akLeft, akRight] OnChange = edIconFileNameChange TabOrder = 0 end end object gbExts: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = gbIcon AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom Left = 0 Height = 160 Hint = 'Can be sorted by drag & drop' Top = 64 Width = 292 Anchors = [akTop, akLeft, akRight] BorderSpacing.InnerBorder = 20 Caption = 'Extensions' ClientHeight = 140 ClientWidth = 288 Constraints.MinHeight = 160 TabOrder = 1 object lbExts: TListBox Left = 6 Height = 128 Hint = 'Extensions may be sorted by drag & drop' Top = 6 Width = 197 Align = alClient BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lbExtsDragDrop OnDragOver = lbGenericDragOver OnDrawItem = lbGenericListDrawItem OnSelectionChange = lbExtsSelectionChange ScrollWidth = 198 Style = lbOwnerDrawFixed TabOrder = 0 end object pnlExtsButtons: TPanel Left = 209 Height = 128 Top = 6 Width = 73 Align = alRight AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 128 ClientWidth = 73 TabOrder = 1 object btnEditExt: TButton Left = 0 Height = 29 Top = 0 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Edi&t' OnClick = btnEditExtClick TabOrder = 0 end object btnInsertExt: TButton Tag = 1 Left = 0 Height = 29 Top = 29 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Insert' OnClick = btnInsertAddExtClick TabOrder = 1 end object btnAddExt: TButton Left = 0 Height = 29 Top = 58 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Add' OnClick = btnInsertAddExtClick TabOrder = 2 end object btnRemoveExt: TButton Left = 0 Height = 29 Top = 87 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Re&move' OnClick = btnRemoveExtClick TabOrder = 3 end end end end object pnlLeftSettings: TPanel AnchorSideLeft.Control = pnlSettings AnchorSideTop.Control = pnlSettings AnchorSideBottom.Control = pnlBottomSettings Left = 6 Height = 437 Top = 6 Width = 250 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 437 ClientWidth = 250 TabOrder = 0 object gbFileTypes: TGroupBox AnchorSideBottom.Side = asrBottom Left = 0 Height = 437 Top = 0 Width = 250 Align = alClient Caption = 'File types' ClientHeight = 417 ClientWidth = 246 TabOrder = 0 object lbFileTypes: TListBox AnchorSideLeft.Control = gbFileTypes AnchorSideTop.Control = gbFileTypes AnchorSideRight.Control = gbFileTypes AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnAddNewType Left = 6 Height = 339 Hint = 'File types may be sorted by drag & drop' Top = 6 Width = 234 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 20 OnDragDrop = lbFileTypesDragDrop OnDragOver = lbGenericDragOver OnDrawItem = lbFileTypesDrawItem OnSelectionChange = lbFileTypesSelectionChange ScrollWidth = 232 Style = lbOwnerDrawFixed TabOrder = 0 end object btnAddNewType: TButton AnchorSideLeft.Control = gbFileTypes AnchorSideTop.Control = lbFileTypes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFileTypes AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnRemoveType Left = 6 Height = 29 Top = 351 Width = 234 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 2 BorderSpacing.InnerBorder = 2 Caption = 'A&dd' OnClick = btnAddNewTypeClick TabOrder = 1 end object btnRemoveType: TButton AnchorSideLeft.Control = btnAddNewType Left = 6 Height = 29 Top = 382 Width = 73 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Remove' OnClick = btnRemoveTypeClick OnResize = btnRemoveTypeResize TabOrder = 2 end object btnRenameType: TButton AnchorSideRight.Control = btnAddNewType AnchorSideRight.Side = asrBottom Left = 167 Height = 29 Top = 382 Width = 73 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'R&ename' OnClick = btnRenameTypeClick OnResize = btnRenameTypeResize TabOrder = 3 end end end object pnlBottomSettings: TPanel AnchorSideLeft.Control = pnlSettings AnchorSideRight.Control = pnlSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlSettings AnchorSideBottom.Side = asrBottom Left = 10 Height = 130 Top = 449 Width = 548 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 130 ClientWidth = 548 TabOrder = 2 object gbActionDescription: TGroupBox AnchorSideLeft.Control = pnlBottomSettings AnchorSideTop.Control = pnlBottomSettings AnchorSideRight.Control = pnlBottomSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottomSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 126 Top = 2 Width = 548 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 2 BorderSpacing.Bottom = 2 Caption = 'Action description' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 106 ClientWidth = 544 TabOrder = 0 object edbActionName: TEditButton AnchorSideLeft.Control = lblAction AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblAction AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom Left = 79 Height = 23 Hint = 'Name of the action. It is never passed to the system, it''s just a mnemonic name chosen by you, for you' Top = 2 Width = 459 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 ButtonWidth = 23 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } MaxLength = 0 NumGlyphs = 1 OnButtonClick = btnActionsClick OnChange = edbActionNameChange PasswordChar = #0 TabOrder = 0 end object lblAction: TLabel AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 6 Width = 71 Alignment = taRightJustify Caption = 'Action &name:' FocusControl = edbActionName ParentColor = False end object fneCommand: TFileNameEdit AnchorSideLeft.Control = lblCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCommands Left = 79 Height = 23 Hint = 'Command to execute. Never quote this string.' Top = 27 Width = 413 OnAcceptFileName = fneCommandAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 0 TabOrder = 1 OnChange = fneCommandChange end object btnCommands: TSpeedButton AnchorSideTop.Control = fneCommand AnchorSideRight.Control = btnRelativeCommand AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 492 Height = 23 Hint = 'Select your internal command' Top = 27 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCommandsClick end object btnRelativeCommand: TSpeedButton AnchorSideTop.Control = fneCommand AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 515 Height = 23 Hint = 'Some functions to select appropriate path' Top = 27 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeCommandClick end object btnParametersHelper: TSpeedButton AnchorSideTop.Control = edtParams AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtParams AnchorSideBottom.Side = asrBottom Left = 515 Height = 23 Hint = 'Variable reminder helper' Top = 52 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnParametersHelperClick end object lblCommand: TLabel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = fneCommand Left = 6 Height = 15 Top = 31 Width = 71 Alignment = taRightJustify Caption = 'Command:' ParentColor = False end object edtParams: TEdit AnchorSideLeft.Control = lblExternalParameters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExternalParameters AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnParametersHelper Left = 79 Height = 23 Hint = 'Parameter to pass to the command. Long filename with spaces should be quoted (manually entering).' Top = 52 Width = 436 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 OnChange = edtParamsChange TabOrder = 2 end object lblExternalParameters: TLabel AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 56 Width = 71 Alignment = taRightJustify Caption = 'Parameter&s:' FocusControl = edtParams ParentColor = False end object deStartPath: TDirectoryEdit AnchorSideLeft.Control = lblStartPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblStartPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnStartPathPathHelper Left = 79 Height = 23 Hint = 'Starting path of the command. Never quote this string.' Top = 77 Width = 413 OnAcceptDirectory = deStartPathAcceptDirectory ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 0 TabOrder = 3 OnChange = deStartPathChange end object btnStartPathVarHelper: TSpeedButton AnchorSideTop.Control = deStartPath AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = deStartPath AnchorSideBottom.Side = asrBottom Left = 515 Height = 23 Hint = 'Variable reminder helper' Top = 77 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnStartPathVarHelperClick end object btnStartPathPathHelper: TSpeedButton AnchorSideTop.Control = deStartPath AnchorSideRight.Control = btnStartPathVarHelper AnchorSideBottom.Control = deStartPath AnchorSideBottom.Side = asrBottom Left = 492 Height = 23 Hint = 'Some functions to select appropriate path' Top = 77 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnStartPathPathHelperClick end object lblStartPath: TLabel AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 81 Width = 71 Alignment = taRightJustify Caption = 'Start pat&h:' FocusControl = deStartPath ParentColor = False end end end end object OpenPictureDialog: TOpenPictureDialog[1] left = 65 top = 124 end object pmActions: TPopupMenu[2] left = 175 top = 60 object miOpen: TMenuItem Caption = 'Open' OnClick = miActionsClick end object miView: TMenuItem Tag = 1 Caption = 'View' OnClick = miActionsClick end object miEdit: TMenuItem Tag = 2 Caption = 'Edit' OnClick = miActionsClick end object miCustom: TMenuItem Tag = 3 Caption = 'Custom' OnClick = miActionsClick end object MenuItem1: TMenuItem Caption = '-' end object miOpenWith: TMenuItem Tag = 16 Caption = 'Open with...' OnClick = miActionsClick end object miViewWith: TMenuItem Tag = 17 Caption = 'View with...' OnClick = miActionsClick end object miEditWith: TMenuItem Tag = 18 Caption = 'Edit with...' OnClick = miActionsClick end object MenuItem3: TMenuItem Tag = 19 Caption = 'Custom with...' OnClick = miActionsClick end end object pmCommands: TPopupMenu[3] left = 175 top = 124 object miViewer: TMenuItem Tag = 2 Caption = 'Open in Viewer' OnClick = miCommandsClick end object miInternalViewer: TMenuItem Tag = 3 Caption = 'Open in Internal Viewer' OnClick = miCommandsClick end object miEditor: TMenuItem Tag = 4 Caption = 'Open in Editor' OnClick = miCommandsClick end object miInternalEditor: TMenuItem Tag = 5 Caption = 'Open in Internal Editor' OnClick = miCommandsClick end object miSeparator: TMenuItem Caption = '-' end object miShell: TMenuItem Tag = 6 Caption = 'Run in terminal' OnClick = miCommandsClick end object miGetOutputFromCommand: TMenuItem Tag = 7 Caption = 'Get output from command' OnClick = miCommandsClick end end object OpenDialog: TOpenDialog[4] Filter = 'Executables|*.exe;*.com;*.bat|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 65 top = 60 end object pmPathHelper: TPopupMenu[5] left = 65 top = 187 end end doublecmd-1.1.30/src/frames/foptionsfavoritetabs.pas0000644000175000001440000012517215104114162021621 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of Favorite Tabs Copyright (C) 2016-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsFavoriteTabs; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, uFavoriteTabs, types, fOptionsFrame; type { TfrmOptionsFavoriteTabs } TfrmOptionsFavoriteTabs = class(TOptionsEditor) btnRename: TBitBtn; cbExistingTabsToKeep: TComboBox; cbFullExpandTree: TCheckBox; cbSaveDirHistory: TComboBox; cbTargetPanelLeftSavedTabs: TComboBox; cbTargetPanelRightSavedTabs: TComboBox; gbFavoriteTabs: TGroupBox; gbFavoriteTabsOtherOptions: TGroupBox; gpSavedTabsRestorationAction: TGroupBox; lblExistingTabsToKeep: TLabel; lblSaveDirHistory: TLabel; lblTargetPanelLeftSavedTabs: TLabel; lblTargetPanelRightSavedTabs: TLabel; MenuItem1: TMenuItem; miImportLegacyTabFilesAtPos1: TMenuItem; miImportLegacyTabFilesInSubAtPos: TMenuItem; miImportLegacyTabFilesAccSetting: TMenuItem; miSeparator1: TMenuItem; miSeparator11: TMenuItem; miExportToLegacyTabsFile: TMenuItem; miImportLegacyTabFilesAtPos: TMenuItem; miRename: TMenuItem; miInsertSeparator: TMenuItem; MenuItem2: TMenuItem; miInsertSubMenu: TMenuItem; OpenDialog: TOpenDialog; pnlClient: TPanel; tvFavoriteTabs: TTreeView; pnlButtons: TPanel; btnInsert: TBitBtn; btnDelete: TBitBtn; btnImportExport: TBitBtn; btnAdd: TBitBtn; btnSort: TBitBtn; pmFavoriteTabsTestMenu: TPopupMenu; miFavoriteTabsTestMenu: TMenuItem; pmTreeView: TPopupMenu; miAddSeparator2: TMenuItem; miAddSubmenu2: TMenuItem; miSeparator7: TMenuItem; miDeleteSelectedEntry2: TMenuItem; miSeparator8: TMenuItem; miSortSingleGroup2: TMenuItem; miSeparator9: TMenuItem; miCutSelection: TMenuItem; miPasteSelection: TMenuItem; pmInsertAddToFavoriteTabs: TPopupMenu; miAddSeparator: TMenuItem; miAddSubmenu: TMenuItem; pmDeleteFavoriteTabs: TPopupMenu; miDeleteSelectedEntry: TMenuItem; miSeparator2: TMenuItem; miDeleteJustSubMenu: TMenuItem; miDeleteCompleteSubMenu: TMenuItem; miSeparator3: TMenuItem; miDeleteAllFavoriteTabs: TMenuItem; pmImportExport: TPopupMenu; miTestResultingFavoriteTabsMenu: TMenuItem; miSeparator10: TMenuItem; miOpenAllBranches: TMenuItem; miCollapseAll: TMenuItem; pmSortFavoriteTabsList: TPopupMenu; miSortSingleGroup: TMenuItem; miCurrentLevelOfItemOnly: TMenuItem; miSortSingleSubMenu: TMenuItem; miSortSubMenuAndSubLevel: TMenuItem; miSortEverything: TMenuItem; procedure btnRenameClick(Sender: TObject); procedure FrameEnter(Sender: TObject); function ActualAddFavoriteTabs(ParamDispatcher: TKindOfFavoriteTabsEntry; sFavoriteTabsName: string; InsertOrAdd: TNodeAttachMode): TTreeNode; function MySortViaGroup(Node1, Node2: TTreeNode): integer; procedure RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); function GetNextGroupNumber: integer; procedure ClearCutAndPasteList; function TryToGetExactFavoriteTabs(const index: integer): TTreeNode; procedure RefreshTreeView(NodeToSelect: TTreeNode); procedure tvFavoriteTabsDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure tvFavoriteTabsDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure tvFavoriteTabsEnter(Sender: TObject); procedure tvFavoriteTabsExit(Sender: TObject); procedure tvFavoriteTabsSelectionChanged(Sender: TObject); procedure btnActionClick(Sender: TObject); procedure cbFullExpandTreeChange(Sender: TObject); procedure cbTabsConfigChange(Sender: TObject); procedure lbleditFavoriteTabsEnter(Sender: TObject); procedure lbleditFavoriteTabsExit(Sender: TObject); procedure lbleditFavoriteTabsKeyPress(Sender: TObject; var Key: char); procedure miInsertAddFavoriteTabsClick(Sender: TObject); procedure miDeleteSelectedEntryClick(Sender: TObject); procedure miDeleteAllFavoriteTabsClick(Sender: TObject); procedure miSortFavoriteTabsClick(Sender: TObject); function MakeUsUpToDatePriorImportExport: boolean; procedure miExportToLegacyTabsFileClick(Sender: TObject); procedure miImportLegacyTabFilesClick(Sender: TObject); procedure miTestResultingFavoriteTabsMenuClick(Sender: TObject); procedure miShowWhereItWouldGo(Sender: TObject); procedure miOpenAllBranchesClick(Sender: TObject); procedure miCollapseAllClick(Sender: TObject); procedure miCutSelectionClick(Sender: TObject); procedure miPasteSelectionClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private { Private declarations } FavoriteTabsListTemp: TFavoriteTabsList; CutAndPasteIndexList: TStringList; GlobalGroupNumber: integer; public { Public declarations } class function GetIconIndex: integer; override; class function GetTitle: string; override; destructor Destroy; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature:dword):dword; override; procedure MakeUsInPositionToWorkWithActiveFavoriteTabs; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LCLProc, LCLIntf, //DC DCStrUtils, uGlobs, uLng, uDCUtils, uDebug, fmain, uShowMsg, DCOSUtils, uComponentsSignature; { TfrmOptionsFavoriteTabs.Init } procedure TfrmOptionsFavoriteTabs.Init; begin ParseLineToList(rsFavTabsPanelSideSelection, cbTargetPanelLeftSavedTabs.Items); ParseLineToList(rsFavTabsPanelSideSelection, cbTargetPanelRightSavedTabs.Items); ParseLineToList(rsFavTabsPanelSideSelection, cbExistingTabsToKeep.Items); ParseLineToList(rsFavTabsSaveDirHistory, cbSaveDirHistory.Items); OpenDialog.Filter := ParseLineToFileFilter([rsFilterLegacyTabFiles, '*.tab', rsFilterAnyFiles, AllFilesMask]); end; { TfrmOptionsFavoriteTabs.Load } procedure TfrmOptionsFavoriteTabs.Load; begin gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; cbFullExpandTree.Checked := gFavoriteTabsFullExpandOrNot; CutAndPasteIndexList := TStringList.Create; CutAndPasteIndexList.Sorted := True; CutAndPasteIndexList.Duplicates := dupAccept; if FavoriteTabsListTemp = nil then begin FavoriteTabsListTemp := TFavoriteTabsList.Create; gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); end; tvFavoriteTabs.Images := frmMain.imgLstDirectoryHotlist; FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); cbFullExpandTreeChange(cbFullExpandTree); if tvFavoriteTabs.Items.Count > 0 then tvFavoriteTabs.Items[0].Selected := True; //Select at least first one by default end; { TfrmOptionsFavoriteTabs.Save } function TfrmOptionsFavoriteTabs.Save: TOptionsEditorSaveFlags; begin Result := []; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); FavoriteTabsListTemp.CopyFavoriteTabsListToFavoriteTabsList(gFavoriteTabsList); gFavoriteTabsList.RefreshXmlFavoriteTabsListSection; gFavoriteTabsList.RefreshAssociatedMainMenu; gFavoriteTabsFullExpandOrNot := cbFullExpandTree.Checked; cbFullExpandTreeChange(cbFullExpandTree); end; { TfrmOptionsFavoriteTabs.GetIconIndex } class function TfrmOptionsFavoriteTabs.GetIconIndex: integer; begin Result := 37; end; { TfrmOptionsFavoriteTabs.GetTitle } class function TfrmOptionsFavoriteTabs.GetTitle: string; begin Result := rsOptionsEditorFavoriteTabs; end; { TfrmOptionsFavoriteTabs.Destroy } destructor TfrmOptionsFavoriteTabs.Destroy; begin CutAndPasteIndexList.Free; inherited Destroy; end; { TfrmOptionsFavoriteTabs.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsFavoriteTabs.IsSignatureComputedFromAllWindowComponents: boolean; begin result := False; end; { TfrmOptionsFavoriteTabs.ExtraOptionsSignature } function TfrmOptionsFavoriteTabs.ExtraOptionsSignature(CurrentSignature:dword):dword; begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); result := FavoriteTabsListTemp.ComputeSignature(CurrentSignature); result := ComputeSignatureSingleComponent(cbFullExpandTree, result); end; { TfrmOptionsFavoriteTabs.MakeUsInPositionToWorkWithActiveFavoriteTabs } procedure TfrmOptionsFavoriteTabs.MakeUsInPositionToWorkWithActiveFavoriteTabs; var NodeToSelect: TTreeNode = nil; begin NodeToSelect := TryToGetExactFavoriteTabs(FavoriteTabsListTemp.GetIndexLastFavoriteTabsLoaded); if (NodeToSelect = nil) and (tvFavoriteTabs.Items.Count > 0) then NodeToSelect := tvFavoriteTabs.Items.Item[0]; RefreshTreeView(NodeToSelect); if not tvFavoriteTabs.Focused then if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; function CompareStringsFromTStringList(List: TStringList; Index1, Index2: integer): integer; begin Result := CompareStrings(List.Strings[Index1], List.Strings[Index2], gSortNatural, gSortSpecial, gSortCaseSensitivity); end; { TfrmOptionsFavoriteTabs.btnRenameClick } procedure TfrmOptionsFavoriteTabs.btnRenameClick(Sender: TObject); var sInputText: string; FlagDoModif: boolean; begin if tvFavoriteTabs.Selected <> nil then begin if TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher in [fte_ACTUALFAVTABS, fte_STARTMENU] then begin sInputText := TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName; case TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher of fte_ACTUALFAVTABS: FlagDoModif := InputQuery(rsTitleRenameFavTabs, rsMsgRenameFavTabs, sInputText); fte_STARTMENU: FlagDoModif := InputQuery(rsTitleRenameFavTabsMenu, rsMsgRenameFavTabsMenu, sInputText); end; sInputText := Trim(sInputText); if FlagDoModif and (length(sInputText) > 0) then begin TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName := sInputText; tvFavoriteTabs.Selected.Text := sInputText; end; end; end; end; { TfrmOptionsFavoriteTabs.FrameEnter } procedure TfrmOptionsFavoriteTabs.FrameEnter(Sender: TObject); begin if gpSavedTabsRestorationAction.Visible <> gFavoriteTabsUseRestoreExtraOptions then gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; end; { TfrmOptionsFavoriteTabs.ActualAddFavoriteTabs } function TfrmOptionsFavoriteTabs.ActualAddFavoriteTabs(ParamDispatcher: TKindOfFavoriteTabsEntry; sFavoriteTabsName: string; InsertOrAdd: TNodeAttachMode): TTreeNode; var LocalFavoriteTabs: TFavoriteTabs; WorkingTreeNode: TTreeNode; begin ClearCutAndPasteList; LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := ParamDispatcher; LocalFavoriteTabs.FavoriteTabsName := sFavoriteTabsName; LocalFavoriteTabs.DestinationForSavedLeftTabs := gDefaultTargetPanelLeftSaved; LocalFavoriteTabs.DestinationForSavedRightTabs := gDefaultTargetPanelRightSaved; LocalFavoriteTabs.ExistingTabsToKeep := gDefaultExistingTabsToKeep; FavoriteTabsListTemp.Add(LocalFavoriteTabs); WorkingTreeNode := tvFavoriteTabs.Selected; if WorkingTreeNode <> nil then Result := tvFavoriteTabs.Items.AddNode(nil, WorkingTreeNode, sFavoriteTabsName, LocalFavoriteTabs, InsertOrAdd) else Result := tvFavoriteTabs.Items.AddNode(nil, nil, sFavoriteTabsName, LocalFavoriteTabs, naAddFirst); end; { TfrmOptionsFavoriteTabs.MySortViaGroup } function TfrmOptionsFavoriteTabs.MySortViaGroup(Node1, Node2: TTreeNode): integer; begin if (TFavoriteTabs(Node1.Data).GroupNumber = TFavoriteTabs(Node2.Data).GroupNumber) and (TFavoriteTabs(Node1.Data).GroupNumber <> 0) then begin Result := CompareStrings(TFavoriteTabs(Node1.Data).FavoriteTabsName, TFavoriteTabs(Node2.Data).FavoriteTabsName, gSortNatural, gSortSpecial, gSortCaseSensitivity); end else begin if Node1.AbsoluteIndex < Node2.AbsoluteIndex then Result := -1 else Result := 1; end; end; { TfrmOptionsFavoriteTabs.RecursiveSetGroupNumbers } // WARNING! This procedure calls itself. procedure TfrmOptionsFavoriteTabs.RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); var MaybeChild: TTreeNode; begin repeat if DoRecursion then begin MaybeChild := ParamNode.GetFirstChild; if MaybeChild <> nil then RecursiveSetGroupNumbers(MaybeChild, GetNextGroupNumber, DoRecursion, StopAtFirstGroup); end; if TFavoriteTabs(ParamNode.Data).Dispatcher <> fte_SEPARATOR then begin TFavoriteTabs(ParamNode.Data).GroupNumber := ParamGroupNumber; end else begin ParamGroupNumber := GetNextGroupNumber; if StopAtFirstGroup then while ParamNode <> nil do ParamNode := ParamNode.GetNextSibling; //To exit the loop! end; if ParamNode <> nil then ParamNode := ParamNode.GetNextSibling; until ParamNode = nil; end; { TfrmOptionsFavoriteTabs.GetNextGroupNumber } function TfrmOptionsFavoriteTabs.GetNextGroupNumber: integer; begin GlobalGroupNumber := GlobalGroupNumber + 1; Result := GlobalGroupNumber; end; { TfrmOptionsFavoriteTabs.ClearCutAndPasteList } procedure TfrmOptionsFavoriteTabs.ClearCutAndPasteList; begin CutAndPasteIndexList.Clear; miPasteSelection.Enabled := True; end; { TfrmOptionsFavoriteTabs.TryToGetExactFavoriteTabs } function TfrmOptionsFavoriteTabs.TryToGetExactFavoriteTabs(const index: integer): TTreeNode; var SearchingtvIndex: integer; begin Result := nil; if (index >= 0) and (index < FavoriteTabsListTemp.Count) then begin SearchingtvIndex := 0; while (SearchingtvIndex < tvFavoriteTabs.Items.Count) and (Result = nil) do begin if tvFavoriteTabs.Items[SearchingtvIndex].Data = FavoriteTabsListTemp.Items[Index] then Result := tvFavoriteTabs.Items[SearchingtvIndex] else Inc(SearchingtvIndex); end; end; end; { TfrmOptionsFavoriteTabs.RefreshTreeView } procedure TfrmOptionsFavoriteTabs.RefreshTreeView(NodeToSelect: TTreeNode); begin if NodeToSelect <> nil then begin tvFavoriteTabs.ClearSelection(False); NodeToSelect.Selected := True; end else begin tvFavoriteTabsSelectionChanged(tvFavoriteTabs); //At least to hide path, target, etc. end; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsDragDrop } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsDragDrop(Sender, Source: TObject; X, Y: integer); var Index: longint; DestinationNode: TTreeNode; begin DestinationNode := tvFavoriteTabs.GetNodeAt(X, Y); if Assigned(DestinationNode) and (tvFavoriteTabs.SelectionCount > 0) then begin //If we move toward the end, we place the moved item *after* the destination. //If we move toward the beginning, we place the moved item *before* the destination. if tvFavoriteTabs.Selections[pred(tvFavoriteTabs.SelectionCount)].AbsoluteIndex > DestinationNode.AbsoluteIndex then begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsert); end; end else begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsertBehind); end; end; ClearCutAndPasteList; end; miPasteSelection.Enabled := False; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsDragOver } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsEnter } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsEnter(Sender: TObject); begin tvFavoriteTabs.SelectionColor := clHighlight; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsExit } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsExit(Sender: TObject); begin tvFavoriteTabs.SelectionColor := clBtnShadow; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsSelectionChanged } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsSelectionChanged(Sender: TObject); var WorkingPointer: Pointer; begin if tvFavoriteTabs.Selected <> nil then begin WorkingPointer := tvFavoriteTabs.Selected.Data; if TFavoriteTabs(WorkingPointer).Dispatcher = fte_ACTUALFAVTABS then begin cbTargetPanelLeftSavedTabs.ItemIndex := integer(TFavoriteTabs(WorkingPointer).DestinationForSavedLeftTabs); cbTargetPanelRightSavedTabs.ItemIndex := integer(TFavoriteTabs(WorkingPointer).DestinationForSavedRightTabs); cbExistingTabsToKeep.ItemIndex := integer(TFavoriteTabs(WorkingPointer).ExistingTabsToKeep); if TFavoriteTabs(WorkingPointer).SaveDirHistory then cbSaveDirHistory.ItemIndex := 1 else cbSaveDirHistory.ItemIndex := 0; gpSavedTabsRestorationAction.Enabled := True; end else begin gpSavedTabsRestorationAction.Enabled := False; end; miDeleteSelectedEntry.Enabled := not (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteJustSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteCompleteSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miSortSingleSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miSortSubMenuAndSubLevel.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteSelectedEntry.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher <> fte_ENDMENU); miDeleteSelectedEntry2.Enabled := miDeleteSelectedEntry.Enabled; end //if tvFavoriteTabs.Selected<>nil then else begin gpSavedTabsRestorationAction.Enabled := False; end; end; { TfrmOptionsFavoriteTabs.btnActionClick } procedure TfrmOptionsFavoriteTabs.btnActionClick(Sender: TObject); var Dispatcher: integer; begin with Sender as TComponent do Dispatcher := tag; case Dispatcher of 1, 2: pmInsertAddToFavoriteTabs.Tag := Dispatcher; //To help in routine to determine if it's a "Insert" or a "Add" end; case Dispatcher of 1, 2: pmInsertAddToFavoriteTabs.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 3: pmDeleteFavoriteTabs.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 7: pmImportExport.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 8: pmSortFavoriteTabsList.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; { TfrmOptionsFavoriteTabs.cbFullExpandTreeChange } procedure TfrmOptionsFavoriteTabs.cbFullExpandTreeChange(Sender: TObject); begin if cbFullExpandTree.Checked then tvFavoriteTabs.FullExpand else tvFavoriteTabs.FullCollapse; end; { TfrmOptionsFavoriteTabs.cbTabsConfigChange } procedure TfrmOptionsFavoriteTabs.cbTabsConfigChange(Sender: TObject); begin if tvFavoriteTabs.Selected <> nil then begin if TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher = fte_ACTUALFAVTABS then begin case TComponent(Sender).tag of 1: TFavoriteTabs(tvFavoriteTabs.Selected.Data).DestinationForSavedLeftTabs := TTabsConfigLocation(cbTargetPanelLeftSavedTabs.ItemIndex); 2: TFavoriteTabs(tvFavoriteTabs.Selected.Data).DestinationForSavedRightTabs := TTabsConfigLocation(cbTargetPanelRightSavedTabs.ItemIndex); 3: TFavoriteTabs(tvFavoriteTabs.Selected.Data).ExistingTabsToKeep := TTabsConfigLocation(cbExistingTabsToKeep.ItemIndex); 4: TFavoriteTabs(tvFavoriteTabs.Selected.Data).SaveDirHistory := (cbSaveDirHistory.ItemIndex = 1); end; end; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsEnter } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsEnter(Sender: TObject); begin with Sender as TLabeledEdit do begin Font.Style := [fsBold]; EditLabel.Font.Style := [fsBold]; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsExit } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsExit(Sender: TObject); begin //If nothing currently selected, no need to update anything here. if tvFavoriteTabs.Selected <> nil then begin with Sender as TLabeledEdit do begin Font.Style := []; EditLabel.Font.Style := []; //Text not in bold anymore case tag of 1: // Favorite Tabs name begin try //Make sure we actually have something, not an attempt of submenu or end of menu if (Text <> '') and (Text[1] <> '-') then begin //Make sure it's different than what it was if TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName <> Text then begin TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName := Text; tvFavoriteTabs.Selected.Text := Text; end; end; except //Just in case the "Text" is empty to don't show error with Text[1] check. end; end; end; end; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsKeyPress } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsKeyPress(Sender: TObject; var Key: char); begin case Ord(Key) of $0D: //Enter? Let's save the field and we'll exit begin lblediTFavoriteTabsExit(Sender); //Doing this will SAVE the new typed text if it's different than what we have in memory for the entry. Then we could attempt to quit. end; $1B: //Escape? Place back the fields like they were begin with Sender as TLabeledEdit do begin //If typed text has been changed, yes we will restore it but if it was not change, we will quit so user won't have to press two times escape case tag of 1: if Text <> TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName then Key := #$00; end; case tag of 1: tvFavoriteTabsSelectionChanged(tvFavoriteTabs); end; end; if key <> #$1B then tvFavoriteTabs.SetFocus; end; end; Application.ProcessMessages; end; { TfrmOptionsFavoriteTabs.miInsertAddFavoriteTabsClick } // Regarding the tag... // bit 0 = Separator. // bit 1 = Sub menu. // bit 2 = Reserved. // bit 3 = Reserved. // bit 4 = Insert something. (Before index). // bit 5 = Add something. (At index). // bit 6 = Reserved... // bit 7 = Reserved... // bit 8 = Special function. procedure TfrmOptionsFavoriteTabs.miInsertAddFavoriteTabsClick(Sender: TObject); var Dispatcher: integer; NodeAfterAddition: TTreeNode = nil; SubNodeAfterAddition: TTreeNode = nil; //For fake submenu item, at the end of the add, focus will be in the menu name. localFavoriteTabs: TFavoriteTabs; begin Dispatcher := (TMenuItem(Sender).GetParentComponent.Tag shl 4) or TComponent(Sender).Tag; case Dispatcher of $011: NodeAfterAddition := ActualAddFavoriteTabs(fte_SEPARATOR, FAVORITETABS_SEPARATORSTRING, naInsert); $021: NodeAfterAddition := ActualAddFavoriteTabs(fte_SEPARATOR, FAVORITETABS_SEPARATORSTRING, naInsertBehind); $012, $022: begin case Dispatcher of $12: NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsSubMenuName, naInsert); $22: NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsSubMenuName, naInsertBehind); end; tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; SubNodeAfterAddition := ActualAddFavoriteTabs(fte_ACTUALFAVTABS, rsMsgFavoriteTabsDragHereEntry, naAddChildFirst); SubNodeAfterAddition.Selected := True; SubNodeAfterAddition.Expand(True); end; $100: // Note. It is true that the new added TFavoriteTemp will be at the end of the list and not just after where we might "think" we add it. But we don't care! What we do is setting up our tree the way we need and then at the end the tree will be translated back to our valid list and that's it! begin localFavoriteTabs := TFavoriteTabs.Create; TFavoriteTabs(tvFavoriteTabs.Selected.Data).CopyToFavoriteTabs(localFavoriteTabs, False); FavoriteTabsListTemp.Add(localFavoriteTabs); NodeAfterAddition := tvFavoriteTabs.Items.InsertObjectBehind(tvFavoriteTabs.Selected, TFavoriteTabs(FavoriteTabsListTemp[pred(FavoriteTabsListTemp.Count)]).FavoriteTabsName, FavoriteTabsListTemp[pred(FavoriteTabsListTemp.Count)]); end; end; if NodeAfterAddition <> nil then begin tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; case Dispatcher of $012, $022: btnRenameClick(btnRename); end; end; end; { TfrmOptionsFavoriteTabs.miDeleteSelectedEntryClick } procedure TfrmOptionsFavoriteTabs.miDeleteSelectedEntryClick(Sender: TObject); var DeleteDispatcher: integer; FlagQuitDeleting: boolean; Answer: TMyMsgResult; NodeAfterDeletion: TTreeNode = nil; isTreeHadFocus: boolean = False; procedure DeleteSelectionAndSetNodeAfterDeletion; begin if tvFavoriteTabs.Selections[0].GetNextSibling <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetNextSibling else if tvFavoriteTabs.Selections[0].GetPrevSibling <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetPrevSibling else if tvFavoriteTabs.Selections[0].Parent <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].Parent else NodeAfterDeletion := nil; tvFavoriteTabs.Selections[0].Delete; ClearCutAndPasteList; end; begin if tvFavoriteTabs.SelectionCount > 0 then begin isTreeHadFocus := tvFavoriteTabs.Focused; tvFavoriteTabs.Enabled := False; try with Sender as TComponent do DeleteDispatcher := tag; FlagQuitDeleting := False; //It's funny but as long we have something selected, we delete it and it will be index 0 since when //deleting something, the "Selections" array is updated! while (tvFavoriteTabs.SelectionCount > 0) and (not FlagQuitDeleting) do begin if tvFavoriteTabs.Selections[0].GetFirstChild = nil then begin DeleteSelectionAndSetNodeAfterDeletion; end else begin case DeleteDispatcher of 1: Answer := MsgBox(Format(rsMsgHotDirWhatToDelete, [tvFavoriteTabs.Selections[0].Text]), [msmbAll, msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); 2: Answer := mmrNo; 3: Answer := mmrYes; else Answer := mmrCancel; //Should not happen, but just in case end; case Answer of mmrAll: begin DeleteDispatcher := 3; DeleteSelectionAndSetNodeAfterDeletion; end; mmrYes: DeleteSelectionAndSetNodeAfterDeletion; mmrNo: begin NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetFirstChild; repeat tvFavoriteTabs.Selections[0].GetFirstChild.MoveTo(tvFavoriteTabs.Selections[0].GetFirstChild.Parent, naInsert); until tvFavoriteTabs.Selections[0].GetFirstChild = nil; tvFavoriteTabs.Selections[0].Delete; ClearCutAndPasteList; end; else FlagQuitDeleting := True; end; end; end; if (NodeAfterDeletion = nil) and (FlagQuitDeleting = False) and (tvFavoriteTabs.Items.Count > 0) then NodeAfterDeletion := tvFavoriteTabs.Items.Item[0]; if (NodeAfterDeletion <> nil) and (FlagQuitDeleting = False) then NodeAfterDeletion.Selected := True; finally tvFavoriteTabs.Enabled := True; if isTreeHadFocus and tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; end; { TfrmOptionsFavoriteTabs.miDeleteAllFavoriteTabsClick } procedure TfrmOptionsFavoriteTabs.miDeleteAllFavoriteTabsClick(Sender: TObject); begin if MsgBox(rsMsgFavoriteTabsDeleteAllEntries, [msmbYes, msmbNo], msmbNo, msmbNo) = mmrYes then begin tvFavoriteTabs.Items.Clear; gpSavedTabsRestorationAction.Enabled := False; ClearCutAndPasteList; end; end; { TfrmOptionsFavoriteTabs.miSortFavoriteTabsClick } //The trick here is that a "group number" identical has been assigned to the sibling between separator and then we sort //Teh sort has been arrange in such way that item from different group won't be mixed. procedure TfrmOptionsFavoriteTabs.miSortFavoriteTabsClick(Sender: TObject); var Dispatcher, Index: integer; StartingNode: TTreeNode; FlagKeepGoingBack: boolean; begin with Sender as TComponent do Dispatcher := tag; for Index := 0 to pred(tvFavoriteTabs.Items.Count) do TFavoriteTabs(tvFavoriteTabs.Items.Item[Index].Data).GroupNumber := 0; GlobalGroupNumber := 0; if tvFavoriteTabs.SelectionCount > 0 then begin case Dispatcher of 1, 2: //current group only or current level begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin if TFavoriteTabs(tvFavoriteTabs.Selections[Index].Data).GroupNumber = 0 then begin StartingNode := tvFavoriteTabs.Selections[Index]; case Dispatcher of 1: //We just need to make sure we start from first item of current level so we search the first one OR a separator begin FlagKeepGoingBack := True; while FlagKeepGoingBack do begin if StartingNode.GetPrevSibling <> nil then begin if TFavoriteTabs(StartingNode.GetPrevSibling.Data).Dispatcher <> fte_SEPARATOR then StartingNode := StartingNode.GetPrevSibling else FlagKeepGoingBack := False; end else begin FlagKeepGoingBack := False; end; end; end; 2: //We need to make sure we start from the first itm of current level begin while StartingNode.GetPrevSibling <> nil do StartingNode := StartingNode.GetPrevSibling; end; end; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, False, (Dispatcher = 1)); end; end; end; 3, 4: //submenu only, recusive or not begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin StartingNode := tvFavoriteTabs.Selections[Index].GetFirstChild; if StartingNode <> nil then begin if TFavoriteTabs(StartingNode.Data).GroupNumber = 0 then begin RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, (Dispatcher = 4), False); end; end; end; end; end; end; if Dispatcher = 5 then //We start from the very first one, the top one. begin StartingNode := tvFavoriteTabs.Items.Item[0]; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, True, False); end; //... and the finale! tvFavoriteTabs.CustomSort(@MySortViaGroup); ClearCutAndPasteList; end; { TfrmOptionsFavoriteTabs.MakeUsUpToDatePriorImportExport } function TfrmOptionsFavoriteTabs.MakeUsUpToDatePriorImportExport: boolean; var iIndex: integer; Answer: TMyMsgResult; slRememberCurrentSelections: TStringList; begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Result := (LastLoadedOptionSignature = ComputeCompleteOptionsSignature); if not Result then begin Answer := MsgBox(rsMsgFavoriteTabsModifiedNoImport, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: begin slRememberCurrentSelections := TStringList.Create; try // Saving a trace of what is selected right now. for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do if tvFavoriteTabs.Items[iIndex].Selected then if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then slRememberCurrentSelections.Add(GUIDtoString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)); gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); Result := True; // Restoring what was selected. tvFavoriteTabs.ClearSelection(False); for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then tvFavoriteTabs.Items[iIndex].Selected := (slRememberCurrentSelections.IndexOf(GUIDtoString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)) <> -1); finally FreeAndNil(slRememberCurrentSelections); end; end; end; end; end; { TfrmOptionsFavoriteTabs.miExportToLegacyTabsFileClick } // We will not annoy user nad even if nothing has been saved yet, even if he might have move entries from a place to another, // we will accept to export selection anyway. But because of this, we will do it from the "Temp" list AND // it will be based from "UniqueID" of each. procedure TfrmOptionsFavoriteTabs.miExportToLegacyTabsFileClick(Sender: TObject); var iIndex, iFileExportedSuccessfully, iMaybeExportedIndex, iSelectionMade: integer; sTargetDirectory, sUserMessage: string; begin if MakeUsUpToDatePriorImportExport then begin if SelectDirectory(rsSelectDir, '', sTargetDirectory, False) then begin iFileExportedSuccessfully := 0; iSelectionMade := 0; gFavoriteTabsList.LastImportationStringUniqueId.Clear; for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do begin if tvFavoriteTabs.Items[iIndex].Selected then begin Inc(iSelectionMade); if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then begin iMaybeExportedIndex := gFavoriteTabsList.GetIndexForSuchUniqueID(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID); if iMaybeExportedIndex <> -1 then if gFavoriteTabsList.ExportToLegacyTabsFile(iMaybeExportedIndex, sTargetDirectory) then Inc(iFileExportedSuccessfully); end; end; end; sUserMessage := ''; for iIndex := 0 to pred(gFavoriteTabsList.LastImportationStringUniqueId.Count) do sUserMessage := sUserMessage + #$0A + gFavoriteTabsList.LastImportationStringUniqueId.Strings[iIndex]; msgOk(Format(rsMsgFavoriteTabsExportedSuccessfully, [iFileExportedSuccessfully, iSelectionMade]) + #$0A + sUserMessage); end; end; end; { TfrmOptionsFavoriteTabs.miImportLegacyTabFilesClick } procedure TfrmOptionsFavoriteTabs.miImportLegacyTabFilesClick(Sender: TObject); var iIndex, iFileImportedSuccessfully: integer; iPositionToInsert: integer = -1; NodeAfterAddition: TTreeNode; RememberUniqueIdToRemove: TGUID; begin if MakeUsUpToDatePriorImportExport then begin // 1. If we need to create a sub menu, let's create it first if TComponent(Sender).Tag = 2 then begin NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsImportSubMenuName, naInsert); tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; NodeAfterAddition := ActualAddFavoriteTabs(fte_ACTUALFAVTABS, rsMsgFavoriteTabsDragHereEntry, naAddChildFirst); NodeAfterAddition.Selected := True; NodeAfterAddition.Expand(True); RememberUniqueIdToRemove := TFavoriteTabs(tvFavoriteTabs.Selected.Data).UniqueID; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Save; end; // 3. Prompt user for which file to import. OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgFavoriteTabsImportTitle; if OpenDialog.Execute then begin // 4. Now let's import them one by one. if tvFavoriteTabs.Selected <> nil then if (TComponent(Sender).Tag = 1) or (TComponent(Sender).Tag = 2) then iPositionToInsert := gFavoriteTabsList.GetIndexForSuchUniqueID(TFavoriteTabs(tvFavoriteTabs.Selected.Data).UniqueID); gFavoriteTabsList.LastImportationStringUniqueId.Clear; iIndex := 0; iFileImportedSuccessfully := 0; while iIndex < OpenDialog.Files.Count do begin if gFavoriteTabsList.ImportFromLegacyTabsFile(OpenDialog.Files.Strings[iIndex], iPositionToInsert) then begin Inc(iFileImportedSuccessfully); if iPositionToInsert <> -1 then Inc(iPositionToInsert); end; Inc(iIndex); end; // 5. Before we forget, let's update our mainmenu regarding Favorite Tabs we offer. gFavoriteTabsList.RefreshAssociatedMainMenu; // 6. Refresh what we see here in our Favorite Tabs configurations screen. gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); cbFullExpandTreeChange(cbFullExpandTree); if TComponent(Sender).Tag = 2 then begin for iIndex := pred(tvFavoriteTabs.Items.Count) downto 0 do // We go back since we're deleting something in a list. if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then if IsEqualGUID(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID, RememberUniqueIdToRemove) then tvFavoriteTabs.Items[iIndex].Delete; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Save; end; // 7. Let's higlight in our trees the one(s) that have been imported so it will give feeback to user. tvFavoriteTabs.ClearSelection(False); for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do begin if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then begin if gFavoriteTabsList.LastImportationStringUniqueId.IndexOf(GUIDToString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)) <> -1 then tvFavoriteTabs.Items[iIndex].Selected := True; end; end; // 7. Refresh our last signature since what we have is up to date. LastLoadedOptionSignature := ComputeCompleteOptionsSignature; // 8. Finally, let's inform our user we've complete importation. msgOk(Format(rsMsgFavoriteTabsImportedSuccessfully, [iFileImportedSuccessfully, OpenDialog.Files.Count])); if not tvFavoriteTabs.Focused then if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; end; { TfrmOptionsFavoriteTabs.miTestResultingFavoriteTabsMenuClick } procedure TfrmOptionsFavoriteTabs.miTestResultingFavoriteTabsMenuClick(Sender: TObject); var p: TPoint; begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); //We need to refresh our temporary Directory Hotlist in case user played with the tree and added/removed/moved item(s). FavoriteTabsListTemp.PopulateMenuWithFavoriteTabs(pmFavoriteTabsTestMenu, @miShowWhereItWouldGo, ftmp_JUSTFAVTABS); p := tvFavoriteTabs.ClientToScreen(Classes.Point(0, 0)); p.x := p.x + tvFavoriteTabs.Width; pmFavoriteTabsTestMenu.PopUp(p.X, p.Y); end; { TfrmOptionsFavoriteTabs.miShowWhereItWouldGo } procedure TfrmOptionsFavoriteTabs.miShowWhereItWouldGo(Sender: TObject); begin if FavoriteTabsListTemp.FavoriteTabs[tag].Dispatcher = fte_ACTUALFAVTABS then msgOK(Format(rsMsgFavoriteTabsThisWillLoadFavTabs, [FavoriteTabsListTemp.FavoriteTabs[TComponent(Sender).tag].FavoriteTabsName])); end; { TfrmOptionsFavoriteTabs.miOpenAllBranchesClick } procedure TfrmOptionsFavoriteTabs.miOpenAllBranchesClick(Sender: TObject); begin tvFavoriteTabs.FullExpand; if tvFavoriteTabs.Selected <> nil then begin tvFavoriteTabs.Selected.MakeVisible; if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; { TfrmOptionsFavoriteTabs.miCollapseAllClick } procedure TfrmOptionsFavoriteTabs.miCollapseAllClick(Sender: TObject); begin tvFavoriteTabs.FullCollapse; if tvFavoriteTabs.Selected <> nil then begin tvFavoriteTabs.Selected.MakeVisible; if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; { TfrmOptionsFavoriteTabs.miCutSelectionClick } procedure TfrmOptionsFavoriteTabs.miCutSelectionClick(Sender: TObject); var Index: integer; begin if tvFavoriteTabs.SelectionCount > 0 then begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin CutAndPasteIndexList.Add(IntToStr(tvFavoriteTabs.Selections[Index].AbsoluteIndex)); end; miPasteSelection.Enabled := True; end; end; { TfrmOptionsFavoriteTabs.miPasteSelectionClick } procedure TfrmOptionsFavoriteTabs.miPasteSelectionClick(Sender: TObject); var DestinationNode: TTreeNode; Index: longint; begin if CutAndPasteIndexList.Count > 0 then begin DestinationNode := tvFavoriteTabs.Selected; if DestinationNode <> nil then begin tvFavoriteTabs.ClearSelection(False); for Index := 0 to pred(CutAndPasteIndexList.Count) do begin tvFavoriteTabs.Items.Item[StrToInt(CutAndPasteIndexList.Strings[Index])].Selected := True; end; for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsert); end; ClearCutAndPasteList; end; end; end; end. doublecmd-1.1.30/src/frames/foptionsfavoritetabs.lrj0000644000175000001440000002335515104114162021625 0ustar alexxusers{"version":1,"strings":[ {"hash":177388665,"name":"tfrmoptionsfavoritetabs.gbfavoritetabs.caption","sourcebytes":[70,97,118,111,114,105,116,101,32,84,97,98,115,32,108,105,115,116,32,40,114,101,111,114,100,101,114,32,98,121,32,100,114,97,103,32,38,38,32,100,114,111,112,41],"value":"Favorite Tabs list (reorder by drag && drop)"}, {"hash":164184414,"name":"tfrmoptionsfavoritetabs.btninsert.caption","sourcebytes":[73,110,115,101,114,116,46,46,46],"value":"Insert..."}, {"hash":46812110,"name":"tfrmoptionsfavoritetabs.btndelete.caption","sourcebytes":[68,101,108,101,116,101,46,46,46],"value":"Delete..."}, {"hash":59252692,"name":"tfrmoptionsfavoritetabs.btnimportexport.caption","sourcebytes":[73,109,112,111,114,116,47,69,120,112,111,114,116],"value":"Import/Export"}, {"hash":75133198,"name":"tfrmoptionsfavoritetabs.btnadd.caption","sourcebytes":[65,100,100,46,46,46],"value":"Add..."}, {"hash":174682462,"name":"tfrmoptionsfavoritetabs.btnsort.caption","sourcebytes":[83,111,114,116,46,46,46],"value":"Sort..."}, {"hash":93079605,"name":"tfrmoptionsfavoritetabs.btnrename.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":13910547,"name":"tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption","sourcebytes":[79,116,104,101,114,32,111,112,116,105,111,110,115],"value":"Other options"}, {"hash":92837685,"name":"tfrmoptionsfavoritetabs.cbfullexpandtree.caption","sourcebytes":[65,108,119,97,121,115,32,101,120,112,97,110,100,32,116,114,101,101],"value":"Always expand tree"}, {"hash":241981898,"name":"tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption","sourcebytes":[87,104,97,116,32,116,111,32,114,101,115,116,111,114,101,32,119,104,101,114,101,32,102,111,114,32,116,104,101,32,115,101,108,101,99,116,101,100,32,101,110,116,114,121,58],"value":"What to restore where for the selected entry:"}, {"hash":174798330,"name":"tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption","sourcebytes":[84,97,98,115,32,115,97,118,101,100,32,111,110,32,108,101,102,116,32,116,111,32,98,101,32,114,101,115,116,111,114,101,100,32,116,111,58],"value":"Tabs saved on left to be restored to:"}, {"hash":69682042,"name":"tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption","sourcebytes":[84,97,98,115,32,115,97,118,101,100,32,111,110,32,114,105,103,104,116,32,116,111,32,98,101,32,114,101,115,116,111,114,101,100,32,116,111,58],"value":"Tabs saved on right to be restored to:"}, {"hash":29650394,"name":"tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption","sourcebytes":[69,120,105,115,116,105,110,103,32,116,97,98,115,32,116,111,32,107,101,101,112,58],"value":"Existing tabs to keep:"}, {"hash":349765,"name":"tfrmoptionsfavoritetabs.cbexistingtabstokeep.text","sourcebytes":[78,111,110,101],"value":"None"}, {"hash":5832180,"name":"tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text","sourcebytes":[82,105,103,104,116],"value":"Right"}, {"hash":338900,"name":"tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text","sourcebytes":[76,101,102,116],"value":"Left"}, {"hash":1359,"name":"tfrmoptionsfavoritetabs.cbsavedirhistory.text","sourcebytes":[78,111],"value":"No"}, {"hash":128230250,"name":"tfrmoptionsfavoritetabs.lblsavedirhistory.caption","sourcebytes":[83,97,118,101,32,100,105,114,32,104,105,115,116,111,114,121,58],"value":"Save dir history:"}, {"hash":249182357,"name":"tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption","sourcebytes":[70,97,118,111,114,105,116,101,84,97,98,115,84,101,115,116,77,101,110,117],"value":"FavoriteTabsTestMenu"}, {"hash":93079605,"name":"tfrmoptionsfavoritetabs.mirename.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":169604914,"name":"tfrmoptionsfavoritetabs.miinsertseparator.caption","sourcebytes":[73,110,115,101,114,116,32,115,101,112,97,114,97,116,111,114],"value":"Insert separator"}, {"hash":19854562,"name":"tfrmoptionsfavoritetabs.miaddseparator2.caption","sourcebytes":[65,100,100,32,115,101,112,97,114,97,116,111,114],"value":"Add separator"}, {"hash":43716005,"name":"tfrmoptionsfavoritetabs.miinsertsubmenu.caption","sourcebytes":[73,110,115,101,114,116,32,115,117,98,45,109,101,110,117],"value":"Insert sub-menu"}, {"hash":256531957,"name":"tfrmoptionsfavoritetabs.miaddsubmenu2.caption","sourcebytes":[65,100,100,32,115,117,98,45,109,101,110,117],"value":"Add sub-menu"}, {"hash":248058829,"name":"tfrmoptionsfavoritetabs.mideleteselectedentry2.caption","sourcebytes":[68,101,108,101,116,101,32,115,101,108,101,99,116,101,100,32,105,116,101,109],"value":"Delete selected item"}, {"hash":54478841,"name":"tfrmoptionsfavoritetabs.misortsinglegroup2.caption","sourcebytes":[83,111,114,116,32,115,105,110,103,108,101,32,103,114,111,117,112,32,111,102,32,105,116,101,109,40,115,41,32,111,110,108,121],"value":"Sort single group of item(s) only"}, {"hash":19140,"name":"tfrmoptionsfavoritetabs.micutselection.caption","sourcebytes":[67,117,116],"value":"Cut"}, {"hash":5671589,"name":"tfrmoptionsfavoritetabs.mipasteselection.caption","sourcebytes":[80,97,115,116,101],"value":"Paste"}, {"hash":75328558,"name":"tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption","sourcebytes":[73,109,112,111,114,116,32,108,101,103,97,99,121,32,46,116,97,98,32,102,105,108,101,40,115,41,32,97,116,32,115,101,108,101,99,116,101,100,32,112,111,115,105,116,105,111,110],"value":"Import legacy .tab file(s) at selected position"}, {"hash":116126882,"name":"tfrmoptionsfavoritetabs.miaddseparator.caption","sourcebytes":[97,32,115,101,112,97,114,97,116,111,114],"value":"a separator"}, {"hash":190070261,"name":"tfrmoptionsfavoritetabs.miaddsubmenu.caption","sourcebytes":[115,117,98,45,109,101,110,117],"value":"sub-menu"}, {"hash":44413037,"name":"tfrmoptionsfavoritetabs.mideleteselectedentry.caption","sourcebytes":[115,101,108,101,99,116,101,100,32,105,116,101,109],"value":"selected item"}, {"hash":252451043,"name":"tfrmoptionsfavoritetabs.mideletejustsubmenu.caption","sourcebytes":[106,117,115,116,32,115,117,98,45,109,101,110,117,32,98,117,116,32,107,101,101,112,32,101,108,101,109,101,110,116,115],"value":"just sub-menu but keep elements"}, {"hash":1127059,"name":"tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption","sourcebytes":[115,117,98,45,109,101,110,117,32,97,110,100,32,97,108,108,32,105,116,115,32,101,108,101,109,101,110,116,115],"value":"sub-menu and all its elements"}, {"hash":169656353,"name":"tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption","sourcebytes":[100,101,108,101,116,101,32,97,108,108,33],"value":"delete all!"}, {"hash":75328558,"name":"tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption","sourcebytes":[73,109,112,111,114,116,32,108,101,103,97,99,121,32,46,116,97,98,32,102,105,108,101,40,115,41,32,97,116,32,115,101,108,101,99,116,101,100,32,112,111,115,105,116,105,111,110],"value":"Import legacy .tab file(s) at selected position"}, {"hash":190394839,"name":"tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption","sourcebytes":[73,109,112,111,114,116,32,108,101,103,97,99,121,32,46,116,97,98,32,102,105,108,101,40,115,41,32,97,99,99,111,114,100,105,110,103,32,116,111,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103],"value":"Import legacy .tab file(s) according to default setting"}, {"hash":137181669,"name":"tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption","sourcebytes":[73,109,112,111,114,116,32,108,101,103,97,99,121,32,46,116,97,98,32,102,105,108,101,40,115,41,32,97,116,32,115,101,108,101,99,116,101,100,32,112,111,115,105,116,105,111,110,32,105,110,32,97,32,115,117,98,32,109,101,110,117],"value":"Import legacy .tab file(s) at selected position in a sub menu"}, {"hash":106971481,"name":"tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption","sourcebytes":[69,120,112,111,114,116,32,115,101,108,101,99,116,105,111,110,32,116,111,32,108,101,103,97,99,121,32,46,116,97,98,32,102,105,108,101,40,115,41],"value":"Export selection to legacy .tab file(s)"}, {"hash":49637221,"name":"tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption","sourcebytes":[84,101,115,116,32,114,101,115,117,108,116,105,110,103,32,109,101,110,117],"value":"Test resulting menu"}, {"hash":240129107,"name":"tfrmoptionsfavoritetabs.miopenallbranches.caption","sourcebytes":[79,112,101,110,32,97,108,108,32,98,114,97,110,99,104,101,115],"value":"Open all branches"}, {"hash":53565100,"name":"tfrmoptionsfavoritetabs.micollapseall.caption","sourcebytes":[67,111,108,108,97,112,115,101,32,97,108,108],"value":"Collapse all"}, {"hash":189620809,"name":"tfrmoptionsfavoritetabs.misortsinglegroup.caption","sourcebytes":[46,46,46,115,105,110,103,108,101,32,103,114,111,117,112,32,111,102,32,105,116,101,109,40,115,41,32,111,110,108,121],"value":"...single group of item(s) only"}, {"hash":130527337,"name":"tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption","sourcebytes":[46,46,46,99,117,114,114,101,110,116,32,108,101,118,101,108,32,111,102,32,105,116,101,109,40,115,41,32,115,101,108,101,99,116,101,100,32,111,110,108,121],"value":"...current level of item(s) selected only"}, {"hash":264540412,"name":"tfrmoptionsfavoritetabs.misortsinglesubmenu.caption","sourcebytes":[46,46,46,99,111,110,116,101,110,116,32,111,102,32,115,117,98,109,101,110,117,40,115,41,32,115,101,108,101,99,116,101,100,44,32,110,111,32,115,117,98,108,101,118,101,108],"value":"...content of submenu(s) selected, no sublevel"}, {"hash":63366227,"name":"tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption","sourcebytes":[46,46,46,99,111,110,116,101,110,116,32,111,102,32,115,117,98,109,101,110,117,40,115,41,32,115,101,108,101,99,116,101,100,32,97,110,100,32,97,108,108,32,115,117,98,108,101,118,101,108,115],"value":"...content of submenu(s) selected and all sublevels"}, {"hash":193526385,"name":"tfrmoptionsfavoritetabs.misorteverything.caption","sourcebytes":[46,46,46,101,118,101,114,121,116,104,105,110,103,44,32,102,114,111,109,32,65,32,116,111,32,90,33],"value":"...everything, from A to Z!"} ]} doublecmd-1.1.30/src/frames/foptionsfavoritetabs.lfm0000644000175000001440000004553715104114162021622 0ustar alexxusersinherited frmOptionsFavoriteTabs: TfrmOptionsFavoriteTabs Height = 604 Width = 584 HelpKeyword = '/configuration.html#ConfigFavoriteTabs' AutoSize = True ClientHeight = 604 ClientWidth = 584 Constraints.MinHeight = 400 Constraints.MinWidth = 500 OnEnter = FrameEnter ParentShowHint = False PopupMenu = pmTreeView ShowHint = True DesignLeft = 190 DesignTop = 277 object gbFavoriteTabs: TGroupBox[0] Left = 6 Height = 592 Top = 6 Width = 572 Align = alClient AutoSize = True BorderSpacing.Around = 6 Caption = 'Favorite Tabs list (reorder by drag && drop)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 572 ClientWidth = 568 TabOrder = 0 object pnlClient: TPanel AnchorSideLeft.Control = gbFavoriteTabs AnchorSideTop.Control = gbFavoriteTabs AnchorSideRight.Control = gbFavoriteTabs AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gpSavedTabsRestorationAction Left = 6 Height = 418 Top = 6 Width = 556 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 418 ClientWidth = 556 TabOrder = 0 object tvFavoriteTabs: TTreeView AnchorSideLeft.Control = pnlClient AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlButtons AnchorSideBottom.Control = pnlClient AnchorSideBottom.Side = asrBottom Left = 0 Height = 418 Top = 0 Width = 401 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 DefaultItemHeight = 18 DragMode = dmAutomatic HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentColor = True PopupMenu = pmTreeView ReadOnly = True ScrollBars = ssAutoBoth SelectionColor = clBtnShadow TabOrder = 0 ToolTips = False OnDblClick = btnRenameClick OnDragDrop = tvFavoriteTabsDragDrop OnDragOver = tvFavoriteTabsDragOver OnEnter = tvFavoriteTabsEnter OnExit = tvFavoriteTabsExit OnSelectionChanged = tvFavoriteTabsSelectionChanged Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot] end object pnlButtons: TPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 407 Height = 249 Top = 0 Width = 149 Anchors = [akTop, akRight] AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 249 ClientWidth = 149 TabOrder = 1 object btnInsert: TBitBtn Tag = 1 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnRename AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 37 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Insert...' OnClick = btnActionClick TabOrder = 1 end object btnDelete: TBitBtn Tag = 3 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 99 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Delete...' OnClick = btnActionClick TabOrder = 3 end object btnImportExport: TBitBtn Tag = 7 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnSort AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 161 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Import/Export' OnClick = btnActionClick TabOrder = 5 end object btnAdd: TBitBtn Tag = 2 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnInsert AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 68 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Add...' OnClick = btnActionClick TabOrder = 2 end object btnSort: TBitBtn Tag = 8 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 130 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Sort...' OnClick = btnActionClick TabOrder = 4 end object btnRename: TBitBtn Tag = 1 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 6 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Rename' OnClick = btnRenameClick TabOrder = 0 end object gbFavoriteTabsOtherOptions: TGroupBox AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnImportExport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 51 Top = 192 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Other options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 31 ClientWidth = 133 TabOrder = 6 object cbFullExpandTree: TCheckBox AnchorSideLeft.Control = gbFavoriteTabsOtherOptions AnchorSideTop.Control = gbFavoriteTabsOtherOptions Left = 6 Height = 19 Top = 6 Width = 121 Caption = 'Always expand tree' OnChange = cbFullExpandTreeChange TabOrder = 0 end end end end object gpSavedTabsRestorationAction: TGroupBox AnchorSideLeft.Control = gbFavoriteTabs AnchorSideRight.Control = gbFavoriteTabs AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFavoriteTabs AnchorSideBottom.Side = asrBottom Left = 6 Height = 142 Top = 424 Width = 556 Anchors = [akLeft, akRight, akBottom] AutoSize = True Caption = 'What to restore where for the selected entry:' ChildSizing.TopBottomSpacing = 6 ClientHeight = 122 ClientWidth = 552 TabOrder = 1 object lblTargetPanelLeftSavedTabs: TLabel AnchorSideTop.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTargetPanelRightSavedTabs AnchorSideRight.Side = asrBottom Left = 159 Height = 15 Top = 10 Width = 187 Anchors = [akTop, akRight] Caption = 'Tabs saved on left to be restored to:' ParentColor = False end object lblTargetPanelRightSavedTabs: TLabel AnchorSideTop.Control = cbTargetPanelRightSavedTabs AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbTargetPanelRightSavedTabs Left = 151 Height = 15 Top = 39 Width = 195 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on right to be restored to:' ParentColor = False end object lblExistingTabsToKeep: TLabel AnchorSideTop.Control = cbExistingTabsToKeep AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExistingTabsToKeep Left = 236 Height = 15 Top = 68 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Existing tabs to keep:' ParentColor = False end object cbExistingTabsToKeep: TComboBox Tag = 3 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbTargetPanelRightSavedTabs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 64 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 5 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 2 Text = 'None' end object cbTargetPanelRightSavedTabs: TComboBox Tag = 2 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 35 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 1 Text = 'Right' end object cbTargetPanelLeftSavedTabs: TComboBox Tag = 1 AnchorSideLeft.Control = gpSavedTabsRestorationAction AnchorSideTop.Control = gpSavedTabsRestorationAction AnchorSideRight.Control = gpSavedTabsRestorationAction AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 6 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 350 BorderSpacing.Top = 6 BorderSpacing.Right = 10 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 0 Text = 'Left' end object cbSaveDirHistory: TComboBox Tag = 4 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbExistingTabsToKeep AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 93 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'No' 'Yes' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 3 Text = 'No' end object lblSaveDirHistory: TLabel AnchorSideTop.Control = cbSaveDirHistory AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExistingTabsToKeep Left = 263 Height = 15 Top = 97 Width = 83 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Save dir history:' ParentColor = False end end end object pmFavoriteTabsTestMenu: TPopupMenu[1] left = 96 top = 336 object miFavoriteTabsTestMenu: TMenuItem Caption = 'FavoriteTabsTestMenu' end end object pmTreeView: TPopupMenu[2] left = 96 top = 272 object miRename: TMenuItem Caption = 'Rename' ShortCut = 117 OnClick = btnRenameClick end object MenuItem1: TMenuItem Caption = '-' end object miInsertSeparator: TMenuItem Tag = 17 Caption = 'Insert separator' ShortCut = 8313 OnClick = miInsertAddFavoriteTabsClick end object miAddSeparator2: TMenuItem Tag = 33 Caption = 'Add separator' ShortCut = 121 OnClick = miInsertAddFavoriteTabsClick end object MenuItem2: TMenuItem Caption = '-' end object miInsertSubMenu: TMenuItem Tag = 18 Caption = 'Insert sub-menu' ShortCut = 8310 OnClick = miInsertAddFavoriteTabsClick end object miAddSubmenu2: TMenuItem Tag = 34 Caption = 'Add sub-menu' ShortCut = 118 OnClick = miInsertAddFavoriteTabsClick end object miSeparator7: TMenuItem Caption = '-' end object miDeleteSelectedEntry2: TMenuItem Tag = 1 Caption = 'Delete selected item' ShortCut = 46 OnClick = miDeleteSelectedEntryClick end object miSeparator8: TMenuItem Caption = '-' end object miSortSingleGroup2: TMenuItem Tag = 1 Caption = 'Sort single group of item(s) only' ShortCut = 113 OnClick = miSortFavoriteTabsClick end object miSeparator9: TMenuItem Caption = '-' end object miCutSelection: TMenuItem Caption = 'Cut' ShortCut = 16472 OnClick = miCutSelectionClick end object miPasteSelection: TMenuItem Caption = 'Paste' Enabled = False ShortCut = 16470 OnClick = miPasteSelectionClick end object miSeparator1: TMenuItem Caption = '-' end object miImportLegacyTabFilesAtPos1: TMenuItem Tag = 1 Caption = 'Import legacy .tab file(s) at selected position' OnClick = miImportLegacyTabFilesClick end end object pmInsertAddToFavoriteTabs: TPopupMenu[3] left = 96 top = 40 object miAddSeparator: TMenuItem Tag = 1 Caption = 'a separator' ShortCut = 121 OnClick = miInsertAddFavoriteTabsClick end object miAddSubmenu: TMenuItem Tag = 2 Caption = 'sub-menu' ShortCut = 118 OnClick = miInsertAddFavoriteTabsClick end end object pmDeleteFavoriteTabs: TPopupMenu[4] left = 96 top = 96 object miDeleteSelectedEntry: TMenuItem Tag = 1 Caption = 'selected item' ShortCut = 119 OnClick = miDeleteSelectedEntryClick end object miSeparator2: TMenuItem Caption = '-' end object miDeleteJustSubMenu: TMenuItem Tag = 2 Caption = 'just sub-menu but keep elements' OnClick = miDeleteSelectedEntryClick end object miDeleteCompleteSubMenu: TMenuItem Tag = 3 Caption = 'sub-menu and all its elements' OnClick = miDeleteSelectedEntryClick end object miSeparator3: TMenuItem Caption = '-' end object miDeleteAllFavoriteTabs: TMenuItem Caption = 'delete all!' OnClick = miDeleteAllFavoriteTabsClick end end object pmImportExport: TPopupMenu[5] left = 96 top = 216 object miImportLegacyTabFilesAtPos: TMenuItem Tag = 1 Caption = 'Import legacy .tab file(s) at selected position' OnClick = miImportLegacyTabFilesClick end object miImportLegacyTabFilesAccSetting: TMenuItem Caption = 'Import legacy .tab file(s) according to default setting' OnClick = miImportLegacyTabFilesClick end object miImportLegacyTabFilesInSubAtPos: TMenuItem Tag = 2 Caption = 'Import legacy .tab file(s) at selected position in a sub menu' OnClick = miImportLegacyTabFilesClick end object miExportToLegacyTabsFile: TMenuItem Caption = 'Export selection to legacy .tab file(s)' OnClick = miExportToLegacyTabsFileClick end object miSeparator10: TMenuItem Caption = '-' end object miTestResultingFavoriteTabsMenu: TMenuItem Caption = 'Test resulting menu' OnClick = miTestResultingFavoriteTabsMenuClick end object miSeparator11: TMenuItem Caption = '-' end object miOpenAllBranches: TMenuItem Caption = 'Open all branches' OnClick = miOpenAllBranchesClick end object miCollapseAll: TMenuItem Caption = 'Collapse all' OnClick = miCollapseAllClick end end object pmSortFavoriteTabsList: TPopupMenu[6] left = 96 top = 152 object miSortSingleGroup: TMenuItem Tag = 1 Caption = '...single group of item(s) only' OnClick = miSortFavoriteTabsClick end object miCurrentLevelOfItemOnly: TMenuItem Tag = 2 Caption = '...current level of item(s) selected only' OnClick = miSortFavoriteTabsClick end object miSortSingleSubMenu: TMenuItem Tag = 3 Caption = '...content of submenu(s) selected, no sublevel' OnClick = miSortFavoriteTabsClick end object miSortSubMenuAndSubLevel: TMenuItem Tag = 4 Caption = '...content of submenu(s) selected and all sublevels' OnClick = miSortFavoriteTabsClick end object miSortEverything: TMenuItem Tag = 5 Caption = '...everything, from A to Z!' OnClick = miSortFavoriteTabsClick end end object OpenDialog: TOpenDialog[7] Filter = 'Legacy DC .tab files|*.tab|Any files|*.*' FilterIndex = 0 Options = [ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 96 top = 392 end end doublecmd-1.1.30/src/frames/foptionseditorcolors.pas0000644000175000001440000007611115104114162021636 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Internal editor highlighters configuration frame Copyright (C) 2012-2023 Alexander Koblov (alexx2000@mail.ru) Based on Lazarus IDE editor configuration frame (Editor/Display/Colors) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsEditorColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, SynEdit, Forms, Controls, StdCtrls, ExtCtrls, ColorBox, ComCtrls, Dialogs, Menus, Buttons, fOptionsFrame, DividerBevel, types, LMessages, Graphics, SynEditHighlighter, SynUniClasses, SynUniRules, dmHigh, LCLVersion, uHighlighters {$IF DEFINED(LCL_VER_499)} , LazEditTextAttributes {$ENDIF} ; type { TfrmOptionsEditorColors } TfrmOptionsEditorColors = class(TOptionsEditor) BackGroundColorBox: TColorBox; BackGroundLabel: TLabel; BackGroundUseDefaultCheckBox: TCheckBox; bvlAttributeSection: TDividerBevel; cmbLanguage: TComboBox; ColorPreview: TSynEdit; ColumnPosBevel: TPanel; edtFileExtensions: TEdit; ForegroundColorBox: TColorBox; ForeGroundLabel: TLabel; ForeGroundUseDefaultCheckBox: TCheckBox; FrameColorBox: TColorBox; FrameColorUseDefaultCheckBox: TCheckBox; FrameEdgesBox: TComboBox; FrameStyleBox: TComboBox; ColorElementTree: TTreeView; pnlBold: TPanel; pnlElementAttributes: TPanel; pnlItalic: TPanel; pnlStrikeOut: TPanel; pnlTop: TPanel; PnlTop2: TPanel; pnlUnderline: TPanel; btnResetMask: TSpeedButton; Splitter1: TSplitter; pnlFileExtensions: TPanel; tbtnGlobal: TToolButton; tbtnLocal: TToolButton; TextBoldCheckBox: TCheckBox; TextBoldRadioInvert: TRadioButton; TextBoldRadioOff: TRadioButton; TextBoldRadioOn: TRadioButton; TextBoldRadioPanel: TPanel; TextItalicCheckBox: TCheckBox; TextStrikeOutCheckBox: TCheckBox; TextItalicRadioInvert: TRadioButton; TextStrikeOutRadioInvert: TRadioButton; TextItalicRadioOff: TRadioButton; TextStrikeOutRadioOff: TRadioButton; TextItalicRadioOn: TRadioButton; TextStrikeOutRadioOn: TRadioButton; TextItalicRadioPanel: TPanel; TextStrikeOutRadioPanel: TPanel; TextUnderlineCheckBox: TCheckBox; TextUnderlineRadioInvert: TRadioButton; TextUnderlineRadioOff: TRadioButton; TextUnderlineRadioOn: TRadioButton; TextUnderlineRadioPanel: TPanel; ToolBar1: TToolBar; ToolButton3: TToolButton; procedure btnResetMaskClick(Sender: TObject); procedure edtFileExtensionsChange(Sender: TObject); procedure FrameStyleBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; {%H-}State: TOwnerDrawState); procedure cmbLanguageChange(Sender: TObject); procedure ForegroundColorBoxChange(Sender: TObject); procedure FrameEdgesBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; {%H-}State: TOwnerDrawState); procedure ColorElementTreeAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; {%H-}Stage: TCustomDrawStage; var {%H-}PaintImages, {%H-}DefaultDraw: Boolean); procedure ColorElementTreeChange(Sender: TObject; {%H-}Node: TTreeNode); procedure GeneralCheckBoxOnChange(Sender: TObject); procedure pnlElementAttributesResize(Sender: TObject); procedure tbtnGlobalClick(Sender: TObject); procedure TextStyleRadioOnChange(Sender: TObject); procedure SynPlainTextHighlighterChange(Sender: TObject); private FHighl: TdmHighl; FDefHighlightElement, FCurHighlightElement: TLazEditTextAttribute; FCurrentHighlighter: TSynCustomHighlighter; FCurHighlightRule: TSynRule; FIsEditingDefaults: Boolean; UpdatingColor: Boolean; procedure UpdateCurrentScheme; function TreeAddSet(Node: TTreeNode; SymbSet: TSynSet): TTreeNode; function TreeAddRange(Node: TTreeNode; Range: TSynRange): TTreeNode; function TreeAddKeyList(Node: TTreeNode; KeyList: TSynKeyList): TTreeNode; function SynAttributeSortCompare(Node1, Node2: TTreeNode): Integer; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; function IsSignatureComputedFromAllWindowComponents: Boolean; override; end; implementation {$R *.lfm} uses LCLType, LCLIntf, SynEditTypes, SynUniHighlighter, GraphUtil, uLng, uGlobs; const COLOR_NODE_PREFIX = ' abc '; function DefaultToNone(AColor: TColor): TColor; begin if AColor = clDefault then Result := clNone else Result := AColor; end; function NoneToDefault(AColor: TColor): TColor; begin if AColor = clNone then Result := clDefault else Result := AColor; end; { TfrmOptionsEditorColors } function TfrmOptionsEditorColors.SynAttributeSortCompare(Node1, Node2: TTreeNode): Integer; begin if CompareStr(Node1.Text, rsSynDefaultText) = 0 then Result:= -1 else if CompareStr(Node2.Text, rsSynDefaultText) = 0 then Result:= 1 else Result:= CompareStr(Node1.Text, Node2.Text); end; procedure TfrmOptionsEditorColors.FrameEdgesBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); //+++ var r: TRect; PCol: Integer; begin if Index < 0 then exit;; r.top := ARect.top + 3; r.bottom := ARect.bottom - 3; r.left := ARect.left + 5; r.right := ARect.Right - 5; with TCustomComboBox(Control).Canvas do begin FillRect(ARect); Pen.Width := 1; PCol := pen.Color; Pen.Color := clGray; Pen.Style := psDot; Pen.EndCap := pecFlat; Rectangle(r); Pen.Width := 2; pen.Color := PCol; Pen.Style := psSolid; case Index of ord(sfeAround): Rectangle(r); ord(sfeBottom): begin MoveTo(r.Left, r.Bottom); LineTo(r.Right-1, r.Bottom); end; ord(sfeLeft): begin MoveTo(r.Left, r.Top); LineTo(r.Left, r.Bottom-1); end; end; end; end; procedure TfrmOptionsEditorColors.FrameStyleBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); //++ var p: TPoint; begin if Index < 0 then exit;; with TCustomComboBox(Control).Canvas do begin FillRect(ARect); Pen.Width := 2; pen.EndCap := pecFlat; case Index of 0: Pen.Style := psSolid; 1: Pen.Style := psDash; 2: Pen.Style := psDot; 3: Pen.Style := psSolid; end; if Index = 3 then begin MoveToEx(Handle, ARect.Left + 5, (ARect.Top + ARect.Bottom) div 2 - 2, @p); WaveTo(Handle, ARect.Right - 5, (ARect.Top + ARect.Bottom) div 2 - 2, 4); end else begin MoveTo(ARect.Left + 5, (ARect.Top + ARect.Bottom) div 2); LineTo(ARect.Right - 5, (ARect.Top + ARect.Bottom) div 2); end; end; end; procedure TfrmOptionsEditorColors.edtFileExtensionsChange(Sender: TObject); begin FCurrentHighlighter.DefaultFilter:= FCurrentHighlighter.LanguageName + ' (' + edtFileExtensions.Text + ')|' + edtFileExtensions.Text; end; procedure TfrmOptionsEditorColors.btnResetMaskClick(Sender: TObject); begin with TSynCustomHighlighterClass(FCurrentHighlighter.ClassType).Create(nil) do begin FCurrentHighlighter.DefaultFilter:= DefaultFilter; edtFileExtensions.Text:= Copy(FCurrentHighlighter.DefaultFilter, Pos('|', FCurrentHighlighter.DefaultFilter) + 1, MaxInt); Free; end; end; procedure TfrmOptionsEditorColors.cmbLanguageChange(Sender: TObject); var I: LongInt; ANode: TTreeNode; SynUniSyn: Boolean; begin if (cmbLanguage.ItemIndex < 0) then Exit; FCurrentHighlighter:= TSynCustomHighlighter(cmbLanguage.Items.Objects[cmbLanguage.ItemIndex]); pnlFileExtensions.Enabled:= not (FCurrentHighlighter is TSynPlainTextHighlighter); edtFileExtensions.Text:= Copy(FCurrentHighlighter.DefaultFilter, Pos('|', FCurrentHighlighter.DefaultFilter) + 1, MaxInt); try ColorPreview.Lines.Text:= FCurrentHighlighter.SampleSource; except ColorPreview.Lines.Text:= EmptyStr; end; FHighl.SetHighlighter(ColorPreview, FCurrentHighlighter); SynUniSyn:= (FCurrentHighlighter is TSynUniSyn); ColorElementTree.ShowButtons:= SynUniSyn; ColorElementTree.ShowRoot:= SynUniSyn; btnResetMask.Enabled:= not SynUniSyn; ColorElementTree.Items.Clear; if SynUniSyn then begin ANode:= TreeAddRange(nil, TSynUniSyn(FCurrentHighlighter).MainRules); ANode.Expand(False); end else if (FCurrentHighlighter.AttrCount > 0) then begin for I:= 0 to FCurrentHighlighter.AttrCount - 1 do begin ANode:= ColorElementTree.Items.Add(nil, FCurrentHighlighter.Attribute[I].Name); ANode.Data:= FCurrentHighlighter.Attribute[I]; end; ColorElementTree.CustomSort(@SynAttributeSortCompare); end; if ColorElementTree.Items.GetFirstNode <> nil then begin ColorElementTree.Items.GetFirstNode.Selected := True; ColorElementTreeChange(ColorElementTree, ColorElementTree.Items.GetFirstNode); end; end; procedure TfrmOptionsEditorColors.ForegroundColorBoxChange(Sender: TObject); //+++ var AttrToEdit: TLazEditTextAttribute; begin if (FCurHighlightElement = nil) or UpdatingColor then Exit; UpdatingColor := True; if FIsEditingDefaults then AttrToEdit := FHighl.SynPlainTextHighlighter.Attribute[FHighl.SynPlainTextHighlighter.AttrCount-1] else AttrToEdit := FCurHighlightElement; if Sender = ForegroundColorBox then begin AttrToEdit.Foreground := DefaultToNone(ForeGroundColorBox.Selected); ForeGroundUseDefaultCheckBox.Checked := ForeGroundColorBox.Selected <> clDefault; end; if Sender = BackGroundColorBox then begin AttrToEdit.Background := DefaultToNone(BackGroundColorBox.Selected); BackGroundUseDefaultCheckBox.Checked := BackGroundColorBox.Selected <> clDefault; end; if Sender = FrameColorBox then begin AttrToEdit.FrameColor := DefaultToNone(FrameColorBox.Selected); FrameColorUseDefaultCheckBox.Checked := FrameColorBox.Selected <> clDefault; FrameEdgesBox.Enabled := FrameColorBox.Selected <> clDefault; FrameStyleBox.Enabled := FrameColorBox.Selected <> clDefault; end; if Sender = FrameEdgesBox then begin AttrToEdit.FrameEdges := TSynFrameEdges(FrameEdgesBox.ItemIndex); end; if Sender = FrameStyleBox then begin AttrToEdit.FrameStyle := TSynLineStyle(FrameStyleBox.ItemIndex); end; if AttrToEdit is TSynAttributes then begin if FCurHighlightRule is TSynRange then TSynRange(FCurHighlightRule).SetColorForChilds(); end; UpdatingColor := False; UpdateCurrentScheme; end; procedure TfrmOptionsEditorColors.ColorElementTreeAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); //+++ var NodeRect: TRect; FullAbcWidth, AbcWidth: Integer; Attri: TLazEditTextAttribute; TextY: Integer; AText: String; c: TColor; s: String; begin if not (TObject(Node.Data) is TLazEditTextAttribute) then begin AText:= TSynRule(Node.Data).Name; Attri := TSynRule(Node.Data).Attribs; end else begin if (ColorElementTree.Items.GetFirstNode = Node) and FIsEditingDefaults then Attri := FDefHighlightElement else begin Attri := TLazEditTextAttribute(Node.Data); end; AText:= Attri.Name; end; if (Attri = nil) then Exit; // Draw node background and name if cdsSelected in State then begin ColorElementTree.Canvas.Brush.Color := ColorElementTree.SelectionColor; ColorElementTree.Canvas.Font.Color := InvertColor(ColorElementTree.SelectionColor); end else begin ColorElementTree.Canvas.Brush.Color := ColorElementTree.Color; ColorElementTree.Canvas.Font.Color := Font.Color; end; NodeRect := Node.DisplayRect(True); FullAbcWidth := ColorElementTree.Canvas.TextExtent(COLOR_NODE_PREFIX).cx; TextY := (NodeRect.Top + NodeRect.Bottom - ColorElementTree.Canvas.TextHeight(Node.Text)) div 2; NodeRect.Right+= FullAbcWidth; ColorElementTree.Canvas.FillRect(NodeRect); ColorElementTree.Canvas.TextOut(NodeRect.Left+FullAbcWidth, TextY, AText); // Draw preview box - Background c := clNone; if (hafBackColor in Attri.Features) then c := Attri.Background; // Fallback Background-color for text if (c = clNone) or (c = clDefault) then c := ColorPreview.Color; ColorElementTree.Canvas.Brush.Color := c; ColorElementTree.Canvas.FillRect(NodeRect.Left+2, NodeRect.Top+2, NodeRect.Left+FullAbcWidth-2, NodeRect.Bottom-2); // Draw preview Frame ColorElementTree.Canvas.Pen.Color := Attri.FrameColor; if (hafFrameColor in Attri.Features) and (Attri.FrameColor <> clDefault) and (Attri.FrameColor <> clNone) then ColorElementTree.Canvas.Rectangle(NodeRect.Left+2, NodeRect.Top+2, NodeRect.Left+FullAbcWidth-2, NodeRect.Bottom-2); // Draw preview ForeGround if (hafForeColor in Attri.Features) //and //(ahaSupportedFeatures[TAdditionalHilightAttribute(AttriIdx)].BG) ) // if no BG, then FG was used then begin c := Attri.Foreground; if (c = clNone) or (c = clDefault) then c := ColorPreview.Font.Color; begin s := 'abc'; ColorElementTree.Canvas.Font.Color := c; ColorElementTree.Canvas.Font.Style := Attri.Style; ColorElementTree.Canvas.Font.Height := -(NodeRect.Bottom - NodeRect.Top - 7); TextY := (NodeRect.Top + NodeRect.Bottom - canvas.TextHeight(s)) div 2; AbcWidth := ColorElementTree.Canvas.TextExtent(s).cx; SetBkMode(ColorElementTree.Canvas.Handle, TRANSPARENT); ColorElementTree.Canvas.TextOut(NodeRect.Left+(FullAbcWidth - AbcWidth) div 2, TextY, s); SetBkMode(ColorElementTree.Canvas.Handle, OPAQUE); ColorElementTree.Canvas.Font.Height := Font.Height; ColorElementTree.Canvas.Font.Style := []; end; end; end; procedure TfrmOptionsEditorColors.SynPlainTextHighlighterChange(Sender: TObject); var SynPlainTextHighlighter: TLazEditTextAttribute absolute Sender; begin ColorPreview.Color:= SynPlainTextHighlighter.Background; ColorPreview.Font.Color:= SynPlainTextHighlighter.Foreground; end; procedure TfrmOptionsEditorColors.ColorElementTreeChange(Sender: TObject; Node: TTreeNode); //+++ var ParentFore, ParentBack: Boolean; AttrToShow: TLazEditTextAttribute; IsDefault, CanGlobal: Boolean; begin if UpdatingColor or (ColorElementTree.Selected = nil) or (ColorElementTree.Selected.Data = nil) then Exit; if (TObject(ColorElementTree.Selected.Data) is TLazEditTextAttribute) then begin FCurHighlightElement:= TLazEditTextAttribute(ColorElementTree.Selected.Data); IsDefault := SameText(rsSynDefaultText, FCurHighlightElement.Name); CanGlobal := (cmbLanguage.ItemIndex > 0) and IsDefault; ParentFore:= False; ParentBack:= False; end else begin FCurHighlightRule:= TSynRule(ColorElementTree.Selected.Data); ParentFore:= FCurHighlightRule.Attribs.ParentForeground; ParentBack:= FCurHighlightRule.Attribs.ParentBackground; FCurHighlightElement:= FCurHighlightRule.Attribs; IsDefault := (Node.Level = 0); CanGlobal := False; end; UpdatingColor := True; DisableAlign; try FDefHighlightElement:= FHighl.SynPlainTextHighlighter.Attribute[FHighl.SynPlainTextHighlighter.AttrCount - 1]; FIsEditingDefaults:= CanGlobal and (FCurrentHighlighter.Tag = 1); tbtnGlobal.Enabled := CanGlobal; tbtnLocal.Enabled := CanGlobal; tbtnGlobal.AllowAllUp := not CanGlobal; tbtnLocal.AllowAllUp := not CanGlobal; tbtnGlobal.Down := (FCurrentHighlighter.Tag = 1) and CanGlobal; tbtnLocal.Down := (FCurrentHighlighter.Tag = 0) and CanGlobal; if FIsEditingDefaults then AttrToShow := FDefHighlightElement else AttrToShow := FCurHighlightElement; ForegroundColorBox.Style := ForegroundColorBox.Style + [cbIncludeDefault]; BackGroundColorBox.Style := BackGroundColorBox.Style + [cbIncludeDefault]; // Foreground ForeGroundLabel.Visible := (hafForeColor in AttrToShow.Features) and (IsDefault = True); ForeGroundUseDefaultCheckBox.Visible := (hafForeColor in AttrToShow.Features) and (IsDefault = False); ForegroundColorBox.Visible := (hafForeColor in AttrToShow.Features); ForegroundColorBox.Selected := NoneToDefault(AttrToShow.Foreground); if ForegroundColorBox.Selected = clDefault then ForegroundColorBox.Tag := ForegroundColorBox.DefaultColorColor else ForegroundColorBox.Tag := ForegroundColorBox.Selected; ForeGroundUseDefaultCheckBox.Checked := (ForegroundColorBox.Selected <> clDefault) and (ParentFore = False); // BackGround BackGroundLabel.Visible := (hafBackColor in AttrToShow.Features) and (IsDefault = True); BackGroundUseDefaultCheckBox.Visible := (hafBackColor in AttrToShow.Features) and (IsDefault = False); BackGroundColorBox.Visible := (hafBackColor in AttrToShow.Features); BackGroundColorBox.Selected := NoneToDefault(AttrToShow.Background); if BackGroundColorBox.Selected = clDefault then BackGroundColorBox.Tag := BackGroundColorBox.DefaultColorColor else BackGroundColorBox.Tag := BackGroundColorBox.Selected; BackGroundUseDefaultCheckBox.Checked := (BackGroundColorBox.Selected <> clDefault) and (ParentBack = False); // Frame FrameColorUseDefaultCheckBox.Visible := hafFrameColor in AttrToShow.Features; FrameColorBox.Visible := hafFrameColor in AttrToShow.Features; FrameEdgesBox.Visible := hafFrameEdges in AttrToShow.Features; FrameStyleBox.Visible := hafFrameStyle in AttrToShow.Features; FrameColorBox.Selected := NoneToDefault(AttrToShow.FrameColor); if FrameColorBox.Selected = clDefault then FrameColorBox.Tag := FrameColorBox.DefaultColorColor else FrameColorBox.Tag := FrameColorBox.Selected; FrameColorUseDefaultCheckBox.Checked := FrameColorBox.Selected <> clDefault; FrameEdgesBox.ItemIndex := integer(AttrToShow.FrameEdges); FrameStyleBox.ItemIndex := integer(AttrToShow.FrameStyle); FrameEdgesBox.Enabled := FrameColorUseDefaultCheckBox.Checked; FrameStyleBox.Enabled := FrameColorUseDefaultCheckBox.Checked; // Styles TextBoldCheckBox.Visible := hafStyle in AttrToShow.Features; TextItalicCheckBox.Visible := hafStyle in AttrToShow.Features; TextUnderlineCheckBox.Visible := hafStyle in AttrToShow.Features; TextStrikeOutCheckBox.Visible := hafStyle in AttrToShow.Features; TextBoldRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextItalicRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextUnderlineRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextStrikeOutRadioPanel.Visible := hafStyleMask in AttrToShow.Features; if hafStyleMask in AttrToShow.Features then begin TextBoldCheckBox.Checked := (fsBold in AttrToShow.Style) or (fsBold in AttrToShow.StyleMask); TextBoldRadioPanel.Enabled := TextBoldCheckBox.Checked; if not(fsBold in AttrToShow.StyleMask) then TextBoldRadioInvert.Checked := True else if fsBold in AttrToShow.Style then TextBoldRadioOn.Checked := True else TextBoldRadioOff.Checked := True; TextItalicCheckBox.Checked := (fsItalic in AttrToShow.Style) or (fsItalic in AttrToShow.StyleMask); TextItalicRadioPanel.Enabled := TextItalicCheckBox.Checked; if not(fsItalic in AttrToShow.StyleMask) then TextItalicRadioInvert.Checked := True else if fsItalic in AttrToShow.Style then TextItalicRadioOn.Checked := True else TextItalicRadioOff.Checked := True; TextUnderlineCheckBox.Checked := (fsUnderline in AttrToShow.Style) or (fsUnderline in AttrToShow.StyleMask); TextUnderlineRadioPanel.Enabled := TextUnderlineCheckBox.Checked; if not(fsUnderline in AttrToShow.StyleMask) then TextUnderlineRadioInvert.Checked := True else if fsUnderline in AttrToShow.Style then TextUnderlineRadioOn.Checked := True else TextUnderlineRadioOff.Checked := True; TextStrikeOutCheckBox.Checked := (fsStrikeOut in AttrToShow.Style) or (fsStrikeOut in AttrToShow.StyleMask); TextStrikeOutRadioPanel.Enabled := TextStrikeOutCheckBox.Checked; if not(fsStrikeOut in AttrToShow.StyleMask) then TextStrikeOutRadioInvert.Checked := True else if fsStrikeOut in AttrToShow.Style then TextStrikeOutRadioOn.Checked := True else TextStrikeOutRadioOff.Checked := True; end else begin TextBoldCheckBox.Checked := fsBold in AttrToShow.Style; TextItalicCheckBox.Checked := fsItalic in AttrToShow.Style; TextUnderlineCheckBox.Checked := fsUnderline in AttrToShow.Style; TextStrikeOutCheckBox.Checked := fsStrikeOut in AttrToShow.Style; end; if IsDefault then begin AttrToShow.OnChange:= @SynPlainTextHighlighterChange; end; UpdatingColor := False; finally EnableAlign; end; pnlElementAttributesResize(nil); end; procedure TfrmOptionsEditorColors.GeneralCheckBoxOnChange(Sender: TObject); var TheColorBox: TColorBox; AttrToEdit: TLazEditTextAttribute; procedure SetCheckBoxStyle(CheckBox: TCheckBox; style: TFontStyle); begin if hafStyleMask in AttrToEdit.Features then TextStyleRadioOnChange(Sender) else if CheckBox.Checked xor (style in AttrToEdit.Style) then begin if CheckBox.Checked then AttrToEdit.Style := AttrToEdit.Style + [style] else AttrToEdit.Style := AttrToEdit.Style - [style]; UpdateCurrentScheme; end; end; begin if FCurHighlightElement = nil then Exit; if FIsEditingDefaults then AttrToEdit := FDefHighlightElement else AttrToEdit := FCurHighlightElement; if UpdatingColor = False then begin UpdatingColor := True; TheColorBox := nil; if Sender = ForeGroundUseDefaultCheckBox then TheColorBox := ForegroundColorBox; if Sender = BackGroundUseDefaultCheckBox then TheColorBox := BackGroundColorBox; if Sender = FrameColorUseDefaultCheckBox then TheColorBox := FrameColorBox; if Assigned(TheColorBox) then begin if TCheckBox(Sender).Checked then begin TheColorBox.Selected := TheColorBox.Tag; if (AttrToEdit is TSynAttributes) then begin if (Sender = ForeGroundUseDefaultCheckBox) then begin TSynAttributes(AttrToEdit).ParentForeground:= False; end else if (Sender = BackGroundUseDefaultCheckBox) then begin TSynAttributes(AttrToEdit).ParentBackground:= False; end; end; end else begin TheColorBox.Tag := TheColorBox.Selected; if not (AttrToEdit is TSynAttributes) then TheColorBox.Selected := clDefault else if Assigned(ColorElementTree.Selected) and Assigned(ColorElementTree.Selected.Parent) then begin if (Sender = ForeGroundUseDefaultCheckBox) then begin TSynAttributes(AttrToEdit).ParentForeground:= True; TheColorBox.Selected := TSynRange(ColorElementTree.Selected.Parent.Data).Attribs.Foreground end else if (Sender = BackGroundUseDefaultCheckBox) then begin TSynAttributes(AttrToEdit).ParentBackground:= True; TheColorBox.Selected := TSynRange(ColorElementTree.Selected.Parent.Data).Attribs.Background; end; end; end; if (Sender = ForeGroundUseDefaultCheckBox) and (DefaultToNone(ForegroundColorBox.Selected) <> AttrToEdit.Foreground) then begin AttrToEdit.Foreground := DefaultToNone(ForegroundColorBox.Selected); UpdateCurrentScheme; end; if (Sender = BackGroundUseDefaultCheckBox) and (DefaultToNone(BackGroundColorBox.Selected) <> AttrToEdit.Background) then begin AttrToEdit.Background := DefaultToNone(BackGroundColorBox.Selected); UpdateCurrentScheme; end; if (Sender = FrameColorUseDefaultCheckBox) and (DefaultToNone(FrameColorBox.Selected) <> AttrToEdit.FrameColor) then begin AttrToEdit.FrameColor := DefaultToNone(FrameColorBox.Selected); FrameEdgesBox.Enabled := TCheckBox(Sender).Checked; FrameStyleBox.Enabled := TCheckBox(Sender).Checked; UpdateCurrentScheme; end; end; UpdatingColor := False; end; if Sender = TextBoldCheckBox then SetCheckBoxStyle(TextBoldCheckBox, fsBold); if Sender = TextItalicCheckBox then SetCheckBoxStyle(TextItalicCheckBox, fsItalic); if Sender = TextUnderlineCheckBox then SetCheckBoxStyle(TextUnderlineCheckBox, fsUnderline); if Sender = TextStrikeOutCheckBox then SetCheckBoxStyle(TextStrikeOutCheckBox, fsStrikeOut); end; procedure TfrmOptionsEditorColors.pnlElementAttributesResize(Sender: TObject); //+++ var MinAnchor: TControl; MinWidth: Integer; procedure CheckControl(Other: TControl); var w: Integer = 0; h: Integer = 0; begin if not Other.Visible then exit; Other.GetPreferredSize(w,h); if w <= MinWidth then exit; MinAnchor := Other; MinWidth := w; end; begin MinWidth := -1; MinAnchor := ForeGroundLabel; CheckControl(ForeGroundLabel); CheckControl(BackGroundLabel); CheckControl(ForeGroundUseDefaultCheckBox); CheckControl(BackGroundUseDefaultCheckBox); CheckControl(FrameColorUseDefaultCheckBox); ColumnPosBevel.AnchorSide[akLeft].Control := MinAnchor; end; procedure TfrmOptionsEditorColors.tbtnGlobalClick(Sender: TObject); begin if (FCurHighlightElement = nil) or UpdatingColor then Exit; FCurrentHighlighter.Tag := PtrInt(tbtnGlobal.Down); ColorElementTreeChange(ColorElementTree, nil); UpdateCurrentScheme; end; procedure TfrmOptionsEditorColors.TextStyleRadioOnChange(Sender: TObject); //+++ var AttrToEdit: TLazEditTextAttribute; procedure CalcNewStyle(CheckBox: TCheckBox; RadioOn, RadioOff, RadioInvert: TRadioButton; fs : TFontStyle; Panel: TPanel); begin if CheckBox.Checked then begin Panel.Enabled := True; if RadioInvert.Checked then begin AttrToEdit.Style := AttrToEdit.Style + [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask - [fs]; end else if RadioOn.Checked then begin AttrToEdit.Style := AttrToEdit.Style + [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask + [fs]; end else if RadioOff.Checked then begin AttrToEdit.Style := AttrToEdit.Style - [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask + [fs]; end end else begin Panel.Enabled := False; AttrToEdit.Style := AttrToEdit.Style - [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask - [fs]; end; end; begin if UpdatingColor or not (hafStyleMask in FCurHighlightElement.Features) then Exit; if FIsEditingDefaults then AttrToEdit := FDefHighlightElement else AttrToEdit := FCurHighlightElement; if (Sender = TextBoldCheckBox) or (Sender = TextBoldRadioOn) or (Sender = TextBoldRadioOff) or (Sender = TextBoldRadioInvert) then CalcNewStyle(TextBoldCheckBox, TextBoldRadioOn, TextBoldRadioOff, TextBoldRadioInvert, fsBold, TextBoldRadioPanel); if (Sender = TextItalicCheckBox) or (Sender = TextItalicRadioOn) or (Sender = TextItalicRadioOff) or (Sender = TextItalicRadioInvert) then CalcNewStyle(TextItalicCheckBox, TextItalicRadioOn, TextItalicRadioOff, TextItalicRadioInvert, fsItalic, TextItalicRadioPanel); if (Sender = TextUnderlineCheckBox) or (Sender = TextUnderlineRadioOn) or (Sender = TextUnderlineRadioOff) or (Sender = TextUnderlineRadioInvert) then CalcNewStyle(TextUnderlineCheckBox, TextUnderlineRadioOn, TextUnderlineRadioOff, TextUnderlineRadioInvert, fsUnderline, TextUnderlineRadioPanel); if (Sender = TextStrikeOutCheckBox) or (Sender = TextStrikeOutRadioOn) or (Sender = TextStrikeOutRadioOff) or (Sender = TextStrikeOutRadioInvert) then CalcNewStyle(TextStrikeOutCheckBox, TextStrikeOutRadioOn, TextStrikeOutRadioOff, TextStrikeOutRadioInvert, fsStrikeOut, TextStrikeOutRadioPanel); end; procedure TfrmOptionsEditorColors.UpdateCurrentScheme; begin ColorPreview.Invalidate; ColorElementTree.Invalidate; end; function TfrmOptionsEditorColors.TreeAddSet(Node: TTreeNode; SymbSet: TSynSet ): TTreeNode; begin Result:= ColorElementTree.Items.AddChild(Node, SymbSet.Name); Result.Data:= SymbSet; end; function TfrmOptionsEditorColors.TreeAddRange(Node: TTreeNode; Range: TSynRange ): TTreeNode; var Index: Integer; begin if (Node = nil) then Result:= ColorElementTree.Items.Add(nil, Range.Name) else begin Result:= ColorElementTree.Items.AddChild(Node, Range.Name); end; Result.Data:= Range; for Index := 0 to Range.SetCount - 1 do TreeAddSet(Result, Range.Sets[Index]); for Index := 0 to Range.RangeCount - 1 do TreeAddRange(Result, Range.Ranges[Index]); for Index := 0 to Range.KeyListCount - 1 do TreeAddKeyList(Result, Range.KeyLists[Index]); end; function TfrmOptionsEditorColors.TreeAddKeyList(Node: TTreeNode; KeyList: TSynKeyList): TTreeNode; begin Result:= ColorElementTree.Items.AddChild(Node, KeyList.Name); Result.Data:= KeyList; end; procedure TfrmOptionsEditorColors.Init; begin inherited Init; FontOptionsToFont(gFonts[dcfEditor], ColorPreview.Font); end; procedure TfrmOptionsEditorColors.Done; begin FHighl.Free; inherited Done; end; procedure TfrmOptionsEditorColors.Load; begin if (FHighl = nil) then FHighl:= dmHighl.Clone else begin FHighl.Assign(dmHighl); end; cmbLanguage.Items.Assign(FHighl.SynHighlighterList); cmbLanguage.ItemIndex:= 0; cmbLanguageChange(nil); end; function TfrmOptionsEditorColors.Save: TOptionsEditorSaveFlags; begin Result:= []; dmHighl.Assign(FHighl); end; procedure TfrmOptionsEditorColors.CMThemeChanged(var Message: TLMessage); begin Load; end; class function TfrmOptionsEditorColors.GetIconIndex: Integer; begin Result:= 21; end; class function TfrmOptionsEditorColors.GetTitle: String; begin Result:= rsOptionsEditorHighlighters; end; { TfrmOptionsEditorColors.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsEditorColors.IsSignatureComputedFromAllWindowComponents: Boolean; begin Result := False; end; end. doublecmd-1.1.30/src/frames/foptionseditorcolors.lrj0000644000175000001440000000727715104114162021651 0ustar alexxusers{"version":1,"strings":[ {"hash":5818820,"name":"tfrmoptionseditorcolors.btnresetmask.hint","sourcebytes":[82,101,115,101,116],"value":"Reset"}, {"hash":195459012,"name":"tfrmoptionseditorcolors.foregroundlabel.caption","sourcebytes":[70,111,38,114,101,103,114,111,117,110,100],"value":"Fo®round"}, {"hash":27336596,"name":"tfrmoptionseditorcolors.backgroundlabel.caption","sourcebytes":[66,97,99,38,107,103,114,111,117,110,100],"value":"Bac&kground"}, {"hash":195459012,"name":"tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption","sourcebytes":[70,111,38,114,101,103,114,111,117,110,100],"value":"Fo®round"}, {"hash":27336596,"name":"tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption","sourcebytes":[66,97,99,38,107,103,114,111,117,110,100],"value":"Bac&kground"}, {"hash":259162699,"name":"tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption","sourcebytes":[38,84,101,120,116,45,109,97,114,107],"value":"&Text-mark"}, {"hash":157254323,"name":"tfrmoptionseditorcolors.bvlattributesection.caption","sourcebytes":[69,108,101,109,101,110,116,32,65,116,116,114,105,98,117,116,101,115],"value":"Element Attributes"}, {"hash":20942,"name":"tfrmoptionseditorcolors.textunderlineradioon.caption","sourcebytes":[79,38,110],"value":"O&n"}, {"hash":335046,"name":"tfrmoptionseditorcolors.textunderlineradiooff.caption","sourcebytes":[79,38,102,102],"value":"O&ff"}, {"hash":904388,"name":"tfrmoptionseditorcolors.textunderlineradioinvert.caption","sourcebytes":[73,110,38,118,101,114,116],"value":"In&vert"}, {"hash":181113861,"name":"tfrmoptionseditorcolors.textunderlinecheckbox.caption","sourcebytes":[38,85,110,100,101,114,108,105,110,101],"value":"&Underline"}, {"hash":904388,"name":"tfrmoptionseditorcolors.textboldradioinvert.caption","sourcebytes":[73,110,38,118,101,114,116],"value":"In&vert"}, {"hash":20942,"name":"tfrmoptionseditorcolors.textboldradioon.caption","sourcebytes":[79,38,110],"value":"O&n"}, {"hash":335046,"name":"tfrmoptionseditorcolors.textboldradiooff.caption","sourcebytes":[79,38,102,102],"value":"O&ff"}, {"hash":2790948,"name":"tfrmoptionseditorcolors.textboldcheckbox.caption","sourcebytes":[38,66,111,108,100],"value":"&Bold"}, {"hash":904388,"name":"tfrmoptionseditorcolors.textitalicradioinvert.caption","sourcebytes":[73,110,38,118,101,114,116],"value":"In&vert"}, {"hash":20942,"name":"tfrmoptionseditorcolors.textitalicradioon.caption","sourcebytes":[79,38,110],"value":"O&n"}, {"hash":335046,"name":"tfrmoptionseditorcolors.textitalicradiooff.caption","sourcebytes":[79,38,102,102],"value":"O&ff"}, {"hash":185238227,"name":"tfrmoptionseditorcolors.textitaliccheckbox.caption","sourcebytes":[38,73,116,97,108,105,99],"value":"&Italic"}, {"hash":904388,"name":"tfrmoptionseditorcolors.textstrikeoutradioinvert.caption","sourcebytes":[73,110,38,118,101,114,116],"value":"In&vert"}, {"hash":20942,"name":"tfrmoptionseditorcolors.textstrikeoutradioon.caption","sourcebytes":[79,38,110],"value":"O&n"}, {"hash":335046,"name":"tfrmoptionseditorcolors.textstrikeoutradiooff.caption","sourcebytes":[79,38,102,102],"value":"O&ff"}, {"hash":3997012,"name":"tfrmoptionseditorcolors.textstrikeoutcheckbox.caption","sourcebytes":[38,83,116,114,105,107,101,32,79,117,116],"value":"&Strike Out"}, {"hash":263354451,"name":"tfrmoptionseditorcolors.tbtnglobal.caption","sourcebytes":[85,115,101,32,40,97,110,100,32,101,100,105,116,41,32,38,103,108,111,98,97,108,32,115,99,104,101,109,101,32,115,101,116,116,105,110,103,115],"value":"Use (and edit) &global scheme settings"}, {"hash":41235059,"name":"tfrmoptionseditorcolors.tbtnlocal.caption","sourcebytes":[85,115,101,32,38,108,111,99,97,108,32,115,99,104,101,109,101,32,115,101,116,116,105,110,103,115],"value":"Use &local scheme settings"} ]} doublecmd-1.1.30/src/frames/foptionseditorcolors.lfm0000644000175000001440000010123015104114162021620 0ustar alexxusersinherited frmOptionsEditorColors: TfrmOptionsEditorColors Height = 357 Width = 680 HelpKeyword = '/configuration.html#ConfigToolsEditorHL' ClientHeight = 357 ClientWidth = 680 DesignLeft = 322 DesignTop = 122 object pnlTop: TPanel[0] Left = 0 Height = 26 Top = 0 Width = 680 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 3 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 26 ClientWidth = 680 Constraints.MaxWidth = 1000 ParentShowHint = False ShowHint = True TabOrder = 0 object cmbLanguage: TComboBox AnchorSideTop.Side = asrBottom Left = 0 Height = 23 Top = 3 Width = 326 BorderSpacing.Top = 3 ItemHeight = 15 OnChange = cmbLanguageChange Style = csDropDownList TabOrder = 0 end object pnlFileExtensions: TPanel AnchorSideBottom.Side = asrBottom Left = 329 Height = 23 Top = 3 Width = 351 AutoSize = True BevelOuter = bvNone ClientHeight = 23 ClientWidth = 351 TabOrder = 1 object edtFileExtensions: TEdit Left = 0 Height = 23 Top = 0 Width = 305 Align = alClient TabOrder = 0 OnChange = edtFileExtensionsChange end object btnResetMask: TSpeedButton Left = 317 Height = 23 Hint = 'Reset' Top = 0 Width = 23 Align = alRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000200000008000000120000001D000000271212126315151575151515751515 157515151575151515751515157515151575151515751212125E000000000000 000100000004000000090000000F0000001438383871ECECECFFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFECECECFF38383871000000000000 0000000000000000000000000000373737004949496EEAEAEAFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFEAEAEAFF666666FFEAEAEAFF4949496E0B0B0B000404 040000000000000000003E3E3E00525252005252526DEEEEEEFFC8C8C8FFFFFF FFFFFFFFFFFFC8C8C8FFF1F1F1FFEDEDEDFFEEEEEEFF5252526D151515000D0D 0D00191919581515157515151575151515752D2D2DAF8C8C8CFF747474FF9494 94FF949494FF7C7C7CFFC4C4C4FFC4C4C4FFF1F1F1FF5C5C5C6C151515000D0D 0D0038383871ECECECFFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFECECECFFD8D8D8FFFFFFFFFFC0C0C0FFF6F6F6FF6464646A191919581515 1575353535B1EAEAEAFF262626FF262626FF262626FF262626FFEAEAEAFF6666 66FFEAEAEAFFD8D8D8FFFFFFFFFFBBBBBBFFF9F9F9FF6C6C6C6938383871ECEC ECFFA8A8A8FFEEEEEEFF2A2A2AFF3C3C3CFF3C3C3CFF2A2A2AFFF1F1F1FFEDED EDFFEEEEEEFF9F9F9FFFADADADFFADADADFFFDFDFDFF747474684949496EEAEA EAFFADA639FFF1F1F1FF2E2E2EFF424242FF424242FF343434FF2E2E2EFF2E2E 2EFFF1F1F1FFD8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A675252526DEEEE EEFFB2AB3CFFF6F6F6FF333333FF4A4A4AFF4A4A4AFF4A4A4AFF4A4A4AFF3333 33FFF6F6F6FF7F7F7F947F7F7F667F7F7F667F7F7F667F7F7F4D5C5C5C6CF1F1 F1FFB6AE3FFFF9F9F9FF383838FF505050FF505050FF505050FF505050FF3838 38FFF9F9F9FF7F7F7F4D8080800080808000808080007F7F7F006464646AF6F6 F6FFB9B242FFFDFDFDFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B 3BFFFDFDFDFF747474688080800080808000808080007F7F7F006C6C6C69F9F9 F9FFBCB544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7A7A7A677C7C7C0080808000808080007F7F7F0074747468FDFD FDFFC9C13CFFBFB745FFBFB745FFBFB745FFBFB745FFBFB745FFCBCBCBFF7B7B 7BA47F7F7F667F7F7F4D747474007E7E7E00808080007F7F7F007A7A7A67FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A 7A677A7A7A007A7A7A007A7A7A007A7A7A007F7F7F007F7F7F007F7F7F4D7F7F 7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F 7F4D7E7E7E007E7E7E007E7E7E005F5F5F000000000000000000 } OnClick = btnResetMaskClick end end end object PnlTop2: TPanel[1] Left = 0 Height = 131 Top = 26 Width = 680 Align = alTop Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 131 ClientWidth = 680 TabOrder = 1 inline ColorPreview: TSynEdit Left = 211 Height = 130 Top = 1 Width = 469 Align = alClient BorderSpacing.Left = 1 BorderSpacing.Top = 1 Font.Height = -16 Font.Name = 'courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False TabOrder = 0 TabStop = False BookMarkOptions.Xoffset = 30 Gutter.Width = 59 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end> MouseActions = <> MouseTextActions = <> MouseSelActions = <> Lines.Strings = ( 'ColorPreview' ) VisibleSpecialChars = [vscSpace, vscTabAtLast] SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone inline TSynGutterPartList object TSynGutterMarks Width = 24 MouseActions = <> end object TSynGutterLineNumber Width = 19 MouseActions = <> MarkupInfo.Background = clBtnFace MarkupInfo.Foreground = clBtnText DigitCount = 2 ShowOnlyLineNumbersMultiplesOf = 1 ZeroStart = False LeadingZeros = False end object TSynGutterChanges Width = 4 MouseActions = <> ModifiedColor = 59900 SavedColor = clGreen end object TSynGutterSeparator Width = 2 MouseActions = <> MarkupInfo.Background = clWindow MarkupInfo.Foreground = clGrayText end object TSynGutterCodeFolding MouseActions = <> MarkupInfo.Background = clNone MarkupInfo.Foreground = clGray MouseActionsExpanded = <> MouseActionsCollapsed = <> end end end object Splitter1: TSplitter Left = 205 Height = 131 Top = 0 Width = 5 end object ColorElementTree: TTreeView Left = 0 Height = 131 Top = 0 Width = 205 Align = alLeft ReadOnly = True RowSelect = True ScrollBars = ssAutoBoth ShowButtons = False ShowRoot = False TabOrder = 2 OnAdvancedCustomDrawItem = ColorElementTreeAdvancedCustomDrawItem OnChange = ColorElementTreeChange Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowLines, tvoToolTips, tvoThemedDraw] end end object pnlElementAttributes: TPanel[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = PnlTop2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 200 Top = 157 Width = 680 Anchors = [akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 200 ClientWidth = 680 Constraints.MinHeight = 200 TabOrder = 2 OnResize = pnlElementAttributesResize object ForeGroundLabel: TLabel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 46 Width = 62 BorderSpacing.Left = 6 Caption = 'Fo®round' FocusControl = ForegroundColorBox ParentColor = False Visible = False end object BackGroundLabel: TLabel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 71 Width = 64 BorderSpacing.Left = 6 Caption = 'Bac&kground' FocusControl = BackGroundColorBox ParentColor = False Visible = False end object ForeGroundUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 19 Top = 44 Width = 82 BorderSpacing.Left = 6 Caption = 'Fo®round' OnChange = GeneralCheckBoxOnChange TabOrder = 0 end object ForegroundColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = ToolBar1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 94 Height = 22 Top = 42 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 1 end object BackGroundColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 94 Height = 22 Top = 67 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 3 end object BackGroundUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 6 Height = 19 Top = 69 Width = 84 BorderSpacing.Left = 6 Caption = 'Bac&kground' OnChange = GeneralCheckBoxOnChange TabOrder = 2 end object FrameColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 94 Height = 22 Top = 92 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 5 end object FrameColorUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = FrameColorBox AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 6 Height = 19 Top = 94 Width = 74 BorderSpacing.Left = 6 Caption = '&Text-mark' OnChange = GeneralCheckBoxOnChange TabOrder = 4 end object bvlAttributeSection: TDividerBevel Left = 0 Height = 15 Top = 0 Width = 680 Caption = 'Element Attributes' Align = alTop Font.Style = [fsBold] ParentFont = False end object pnlUnderline: TPanel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = FrameEdgesBox AnchorSideTop.Side = asrBottom Left = 6 Height = 40 Top = 141 Width = 134 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 3 BevelOuter = bvNone ClientHeight = 40 ClientWidth = 134 TabOrder = 6 object TextUnderlineRadioPanel: TPanel AnchorSideLeft.Control = TextUnderlineCheckBox AnchorSideTop.Control = TextUnderlineCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 21 Top = 19 Width = 134 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 21 ClientWidth = 134 TabOrder = 0 object TextUnderlineRadioOn: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioPanel AnchorSideTop.Control = TextUnderlineRadioPanel AnchorSideRight.Control = TextUnderlineRadioOff Left = 4 Height = 19 Top = 1 Width = 36 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextUnderlineRadioOff: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextUnderlineRadioOn AnchorSideRight.Control = TextUnderlineRadioInvert Left = 43 Height = 19 Top = 1 Width = 37 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end object TextUnderlineRadioInvert: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextUnderlineRadioPanel AnchorSideRight.Control = TextUnderlineRadioPanel AnchorSideRight.Side = asrBottom Left = 83 Height = 19 Top = 1 Width = 50 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end end object TextUnderlineCheckBox: TCheckBox AnchorSideLeft.Control = pnlUnderline AnchorSideTop.Control = pnlUnderline Left = 0 Height = 19 Top = 0 Width = 71 Caption = '&Underline' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object pnlBold: TPanel AnchorSideLeft.Control = pnlUnderline AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 146 Height = 40 Top = 141 Width = 134 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 40 ClientWidth = 134 TabOrder = 7 object TextBoldRadioPanel: TPanel AnchorSideLeft.Control = TextBoldCheckBox AnchorSideTop.Control = TextBoldCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 21 Top = 19 Width = 134 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 21 ClientWidth = 134 TabOrder = 0 object TextBoldRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioPanel AnchorSideRight.Side = asrBottom Left = 83 Height = 19 Top = 1 Width = 50 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextBoldRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioPanel AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioOff Left = 4 Height = 19 Top = 1 Width = 36 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextBoldRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioInvert Left = 43 Height = 19 Top = 1 Width = 37 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextBoldCheckBox: TCheckBox AnchorSideLeft.Control = pnlBold AnchorSideTop.Control = pnlBold Left = 0 Height = 19 Top = 0 Width = 44 Caption = '&Bold' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object pnlItalic: TPanel AnchorSideLeft.Control = pnlBold AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 286 Height = 40 Top = 141 Width = 134 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 40 ClientWidth = 134 TabOrder = 8 object TextItalicRadioPanel: TPanel AnchorSideLeft.Control = TextItalicCheckBox AnchorSideTop.Control = TextItalicCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 21 Top = 19 Width = 134 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 21 ClientWidth = 134 TabOrder = 0 object TextItalicRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioPanel AnchorSideRight.Side = asrBottom Left = 83 Height = 19 Top = 1 Width = 50 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextItalicRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioPanel AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioOff Left = 4 Height = 19 Top = 1 Width = 36 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextItalicRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioInvert Left = 43 Height = 19 Top = 1 Width = 37 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextItalicCheckBox: TCheckBox AnchorSideLeft.Control = pnlItalic AnchorSideTop.Control = pnlItalic Left = 0 Height = 19 Top = 0 Width = 45 Caption = '&Italic' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object FrameStyleBox: TComboBox AnchorSideLeft.Control = FrameEdgesBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = FrameEdgesBox Left = 197 Height = 21 Top = 117 Width = 97 BorderSpacing.Left = 6 ItemHeight = 15 Items.Strings = ( 'slsSolid' 'slsDashed' 'slsDotted' 'slsWaved' ) OnChange = ForegroundColorBoxChange OnDrawItem = FrameStyleBoxDrawItem ReadOnly = True Style = csOwnerDrawFixed TabOrder = 9 end object FrameEdgesBox: TComboBox AnchorSideLeft.Control = FrameColorBox AnchorSideTop.Control = FrameColorBox AnchorSideTop.Side = asrBottom Left = 94 Height = 21 Top = 117 Width = 97 BorderSpacing.Top = 3 ItemHeight = 15 Items.Strings = ( 'Around' 'Bottom' 'Left' ) OnChange = ForegroundColorBoxChange OnDrawItem = FrameEdgesBoxDrawItem ReadOnly = True Style = csOwnerDrawFixed TabOrder = 10 end object ColumnPosBevel: TPanel AnchorSideLeft.Control = ForeGroundUseDefaultCheckBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlElementAttributes AnchorSideBottom.Side = asrBottom Left = 94 Height = 1 Top = 181 Width = 50 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone Constraints.MinHeight = 1 Constraints.MinWidth = 50 TabOrder = 11 end object pnlStrikeOut: TPanel AnchorSideLeft.Control = pnlItalic AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 426 Height = 40 Top = 141 Width = 134 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 40 ClientWidth = 134 TabOrder = 12 object TextStrikeOutRadioPanel: TPanel AnchorSideLeft.Control = TextStrikeOutCheckBox AnchorSideTop.Control = TextStrikeOutCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 21 Top = 19 Width = 134 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 21 ClientWidth = 134 TabOrder = 0 object TextStrikeOutRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioPanel AnchorSideRight.Side = asrBottom Left = 83 Height = 19 Top = 1 Width = 50 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextStrikeOutRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioPanel AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioOff Left = 4 Height = 19 Top = 1 Width = 36 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextStrikeOutRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioInvert Left = 43 Height = 19 Top = 1 Width = 37 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextStrikeOutCheckBox: TCheckBox AnchorSideLeft.Control = pnlStrikeOut AnchorSideTop.Control = pnlStrikeOut Left = 0 Height = 19 Top = 0 Width = 72 Caption = '&Strike Out' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object ToolBar1: TToolBar Left = 3 Height = 24 Top = 15 Width = 674 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 EdgeBorders = [ebBottom] ParentShowHint = False ShowCaptions = True ShowHint = True TabOrder = 13 object tbtnGlobal: TToolButton Tag = 1 Left = 1 Top = 0 AutoSize = True Caption = 'Use (and edit) &global scheme settings' Down = True Grouped = True OnClick = tbtnGlobalClick Style = tbsCheck end object tbtnLocal: TToolButton Tag = 1 Left = 216 Top = 0 AutoSize = True Caption = 'Use &local scheme settings' Grouped = True OnClick = tbtnGlobalClick Style = tbsCheck end object ToolButton3: TToolButton Left = 206 Height = 22 Top = 0 Width = 10 Style = tbsSeparator end end end end doublecmd-1.1.30/src/frames/foptionsdriveslistbutton.pas0000644000175000001440000000461015104114162022545 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Drives list button options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsDrivesListButton; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsDrivesListButton } TfrmOptionsDrivesListButton = class(TOptionsEditor) cbShowLabel: TCheckBox; cbShowFileSystem: TCheckBox; cbShowFreeSpace: TCheckBox; gbDrivesList: TGroupBox; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsDrivesListButton } procedure TfrmOptionsDrivesListButton.Load; begin cbShowLabel.Checked := dlbShowLabel in gDrivesListButtonOptions; cbShowFileSystem.Checked := dlbShowFileSystem in gDrivesListButtonOptions; cbShowFreeSpace.Checked := dlbShowFreeSpace in gDrivesListButtonOptions; end; function TfrmOptionsDrivesListButton.Save: TOptionsEditorSaveFlags; begin gDrivesListButtonOptions := []; if cbShowLabel.Checked then Include(gDrivesListButtonOptions, dlbShowLabel); if cbShowFileSystem.Checked then Include(gDrivesListButtonOptions, dlbShowFileSystem); if cbShowFreeSpace.Checked then Include(gDrivesListButtonOptions, dlbShowFreeSpace); Result := []; end; class function TfrmOptionsDrivesListButton.GetIconIndex: Integer; begin Result := 31; end; class function TfrmOptionsDrivesListButton.GetTitle: String; begin Result := rsOptionsEditorDrivesListButton; end; end. doublecmd-1.1.30/src/frames/foptionsdriveslistbutton.lrj0000644000175000001440000000131315104114162022546 0ustar alexxusers{"version":1,"strings":[ {"hash":203341924,"name":"tfrmoptionsdriveslistbutton.gbdriveslist.caption","sourcebytes":[68,114,105,118,101,115,32,108,105,115,116],"value":"Drives list"}, {"hash":44797484,"name":"tfrmoptionsdriveslistbutton.cbshowlabel.caption","sourcebytes":[83,104,111,119,32,38,108,97,98,101,108],"value":"Show &label"}, {"hash":88456797,"name":"tfrmoptionsdriveslistbutton.cbshowfilesystem.caption","sourcebytes":[83,104,111,119,32,38,102,105,108,101,32,115,121,115,116,101,109],"value":"Show &file system"}, {"hash":236106821,"name":"tfrmoptionsdriveslistbutton.cbshowfreespace.caption","sourcebytes":[83,104,111,119,32,102,114,38,101,101,32,115,112,97,99,101],"value":"Show fr&ee space"} ]} doublecmd-1.1.30/src/frames/foptionsdriveslistbutton.lfm0000644000175000001440000000237015104114162022541 0ustar alexxusersinherited frmOptionsDrivesListButton: TfrmOptionsDrivesListButton HelpKeyword = '/configuration.html#ConfigDrivesList' object gbDrivesList: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 85 Top = 6 Width = 308 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Drives list' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 67 ClientWidth = 304 TabOrder = 0 object cbShowLabel: TCheckBox Left = 10 Height = 17 Top = 4 Width = 98 Caption = 'Show &label' TabOrder = 0 end object cbShowFileSystem: TCheckBox AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 25 Width = 98 Caption = 'Show &file system' TabOrder = 1 end object cbShowFreeSpace: TCheckBox Left = 10 Height = 17 Top = 46 Width = 98 Caption = 'Show fr&ee space' TabOrder = 2 end end end doublecmd-1.1.30/src/frames/foptionsdragdrop.pas0000644000175000001440000002252015104114162020723 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Drag&drop options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsDragDrop; {$mode objfpc}{$H+} interface uses Controls, Classes, SysUtils, StdCtrls, fOptionsFrame, Types; type { TfrmOptionsDragDrop } TfrmOptionsDragDrop = class(TOptionsEditor) cbShowConfirmationDialog: TCheckBox; cbDragAndDropAskFormatEachTime: TCheckBox; cbDragAndDropSaveUnicodeTextInUFT8: TCheckBox; cbDragAndDropTextAutoFilename: TCheckBox; gbTextDragAndDropRelatedOptions: TGroupBox; lblMostDesiredTextFormat1: TLabel; lblMostDesiredTextFormat2: TLabel; lblWarningForAskFormat: TLabel; lbMostDesiredTextFormat: TListBox; procedure lbMostDesiredTextFormatDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure lbMostDesiredTextFormatDragDrop(Sender, {%H-}Source: TObject; {%H-}X, Y: integer); protected slUserLanguageName, slLegacyName: TStringList; procedure Init; override; procedure Done; override; procedure Load; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; function Save: TOptionsEditorSaveFlags; override; function GetUserNameFromLegacyName(sLegacyName: string): string; procedure LoadDesiredOrderTextFormatList; procedure SaveDesiredOrderTextFormatList; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; procedure SortThisListAccordingToDragAndDropDesiredFormat(ListToSort: TStringList); implementation {$R *.lfm} uses DCStrUtils, crc, uGlobs, uLng; { TfrmOptionsDragDrop } { TfrmOptionsDragDrop.Init } procedure TfrmOptionsDragDrop.Init; var iFormat: integer; begin slUserLanguageName := TStringList.Create; ParseLineToList(rsDragAndDropTextFormat, slUserLanguageName); slLegacyName := TStringList.Create; for iFormat := 0 to pred(NbOfDropTextFormat) do slLegacyName.Add(gDragAndDropDesiredTextFormat[iFormat].Name); end; { TfrmOptionsDragDrop.Done } procedure TfrmOptionsDragDrop.Done; begin FreeAndNil(slUserLanguageName); FreeAndNil(slLegacyName); end; { TfrmOptionsDragDrop.GetUserNameFromLegacyName } function TfrmOptionsDragDrop.GetUserNameFromLegacyName(sLegacyName: string): string; var iPos: integer; begin Result := '???'; iPos := slLegacyName.indexof(sLegacyName); if (iPos >= 0) and (iPos < NbOfDropTextFormat) then Result := slUserLanguageName.Strings[iPos]; end; { TfrmOptionsDragDrop.Load } procedure TfrmOptionsDragDrop.Load; begin cbShowConfirmationDialog.Checked := gShowDialogOnDragDrop; {$IFDEF MSWINDOWS} gbTextDragAndDropRelatedOptions.Visible := True; LoadDesiredOrderTextFormatList; cbDragAndDropAskFormatEachTime.Checked := gDragAndDropAskFormatEachTime; cbDragAndDropTextAutoFilename.Checked := gDragAndDropTextAutoFilename; cbDragAndDropSaveUnicodeTextInUFT8.Checked := gDragAndDropSaveUnicodeTextInUFT8; {$ENDIF} end; { TfrmOptionsDragDrop.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsDragDrop.IsSignatureComputedFromAllWindowComponents: boolean; begin lbMostDesiredTextFormat.ItemIndex := -1; // Tricky pass but nothing was selected when we initially did the signature so let's unselect them all. Result := True; end; { TfrmOptionsDragDrop.ExtraOptionsSignature } function TfrmOptionsDragDrop.ExtraOptionsSignature(CurrentSignature: dword): dword; var iFormat: integer; begin Result := CurrentSignature; for iFormat := 0 to pred(lbMostDesiredTextFormat.Items.Count) do Result := crc32(Result, @lbMostDesiredTextFormat.Items.Strings[iFormat][1], length(lbMostDesiredTextFormat.Items.Strings[iFormat])); end; { TfrmOptionsDragDrop.Save } function TfrmOptionsDragDrop.Save: TOptionsEditorSaveFlags; begin gShowDialogOnDragDrop := cbShowConfirmationDialog.Checked; {$IFDEF MSWINDOWS} SaveDesiredOrderTextFormatList; gDragAndDropAskFormatEachTime := cbDragAndDropAskFormatEachTime.Checked; gDragAndDropTextAutoFilename := cbDragAndDropTextAutoFilename.Checked; gDragAndDropSaveUnicodeTextInUFT8 := cbDragAndDropSaveUnicodeTextInUFT8.Checked; {$ENDIF} Result := []; end; class function TfrmOptionsDragDrop.GetIconIndex: integer; begin Result := 28; end; class function TfrmOptionsDragDrop.GetTitle: string; begin Result := rsOptionsEditorDragAndDrop; end; procedure TfrmOptionsDragDrop.lbMostDesiredTextFormatDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := (Source = lbMostDesiredTextFormat) and (lbMostDesiredTextFormat.ItemIndex <> -1); end; procedure TfrmOptionsDragDrop.lbMostDesiredTextFormatDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin SrcIndex := lbMostDesiredTextFormat.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbMostDesiredTextFormat.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbMostDesiredTextFormat.Count) then DestIndex := lbMostDesiredTextFormat.Count - 1; lbMostDesiredTextFormat.Items.Move(SrcIndex, DestIndex); lbMostDesiredTextFormat.ItemIndex := DestIndex; end; { TfrmOptionsDragDrop.LoadDesiredOrderTextFormatList } procedure TfrmOptionsDragDrop.LoadDesiredOrderTextFormatList; var IndexDropTextFormat, ExpectedPosition, ActualPosition: integer; TempoString: string; begin lbMostDesiredTextFormat.Clear; for IndexDropTextFormat := 0 to pred(NbOfDropTextFormat) do lbMostDesiredTextFormat.Items.Add(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name); for IndexDropTextFormat := 0 to pred(NbOfDropTextFormat) do begin ExpectedPosition := gDragAndDropDesiredTextFormat[IndexDropTextFormat].DesireLevel; if (ExpectedPosition < 0) or (ExpectedPosition > pred(NbOfDropTextFormat)) then ExpectedPosition := pred(NbOfDropTextFormat); ActualPosition := lbMostDesiredTextFormat.Items.IndexOf(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name); if (ActualPosition <> -1) and (ExpectedPosition <> ActualPosition) then begin TempoString := lbMostDesiredTextFormat.Items.Strings[ActualPosition]; lbMostDesiredTextFormat.Items.Strings[ActualPosition] := lbMostDesiredTextFormat.Items.Strings[ExpectedPosition]; lbMostDesiredTextFormat.Items.Strings[ExpectedPosition] := TempoString; end; end; // At the last minutes, we translate to user's language the format names for ActualPosition := 0 to pred(lbMostDesiredTextFormat.Items.Count) do lbMostDesiredTextFormat.Items.Strings[ActualPosition] := GetUserNameFromLegacyName(lbMostDesiredTextFormat.Items.Strings[ActualPosition]); lbMostDesiredTextFormat.ItemIndex := -1; end; procedure TfrmOptionsDragDrop.SaveDesiredOrderTextFormatList; var IndexDropTextFormat, ActualPosition: integer; begin for IndexDropTextFormat := 0 to pred(NbOfDropTextFormat) do begin ActualPosition := lbMostDesiredTextFormat.Items.IndexOf(GetUserNameFromLegacyName(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name)); if (ActualPosition <> -1) then gDragAndDropDesiredTextFormat[IndexDropTextFormat].DesireLevel := ActualPosition; end; end; // Arrange the list in such way that the most desired format is on top. // This routine is also used in "uOleDragDrop" for offering user's suggestion so the list is arranged according to user's desire procedure SortThisListAccordingToDragAndDropDesiredFormat(ListToSort: TStringList); function GetDesireLevel(SearchingText: string): integer; var SearchingIndex: integer; begin Result := -1; SearchingIndex := 0; while (SearchingIndex < NbOfDropTextFormat) and (Result = -1) do begin if gDragAndDropDesiredTextFormat[SearchingIndex].Name = SearchingText then Result := gDragAndDropDesiredTextFormat[SearchingIndex].DesireLevel; Inc(SearchingIndex); end; end; var Index, InnerIndex, DesireLevelIndex, DesireLevelInnerIndex: integer; TempoString: string; begin //It's a poor sort... But we don't have too many so we keep it simple. for Index := 0 to (ListToSort.Count - 2) do begin for InnerIndex := Index + 1 to pred(ListToSort.Count) do begin DesireLevelIndex := GetDesireLevel(ListToSort.Strings[Index]); DesireLevelInnerIndex := GetDesireLevel(ListToSort.Strings[InnerIndex]); if (DesireLevelIndex > DesireLevelInnerIndex) and (DesireLevelIndex <> -1) and (DesireLevelInnerIndex <> -1) then begin TempoString := ListToSort.Strings[Index]; ListToSort.Strings[Index] := ListToSort.Strings[InnerIndex]; ListToSort.Strings[InnerIndex] := TempoString; end; end; end; end; end. doublecmd-1.1.30/src/frames/foptionsdragdrop.lrj0000644000175000001440000000633215104114162020732 0ustar alexxusers{"version":1,"strings":[ {"hash":79635136,"name":"tfrmoptionsdragdrop.cbshowconfirmationdialog.caption","sourcebytes":[38,83,104,111,119,32,99,111,110,102,105,114,109,97,116,105,111,110,32,100,105,97,108,111,103,32,97,102,116,101,114,32,100,114,111,112],"value":"&Show confirmation dialog after drop"}, {"hash":129159194,"name":"tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption","sourcebytes":[87,104,101,110,32,100,114,97,103,32,38,38,32,100,114,111,112,112,105,110,103,32,116,101,120,116,32,105,110,116,111,32,112,97,110,101,108,115,58],"value":"When drag && dropping text into panels:"}, {"hash":244618154,"name":"tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption","sourcebytes":[80,108,97,99,101,32,116,104,101,32,109,111,115,116,32,100,101,115,105,114,101,100,32,102,111,114,109,97,116,32,111,110,32,116,111,112,32,111,102,32,108,105,115,116,32,40,117,115,101,32,100,97,103,32,38,38,32,100,114,111,112,41,58],"value":"Place the most desired format on top of list (use dag && drop):"}, {"hash":95597433,"name":"tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption","sourcebytes":[40,105,102,32,116,104,101,32,109,111,115,116,32,100,101,115,105,114,101,100,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,44,32,119,101,39,108,108,32,116,97,107,101,32,115,101,99,111,110,100,32,111,110,101,32,97,110,100,32,115,111,32,111,110,41],"value":"(if the most desired is not present, we'll take second one and so on)"}, {"hash":100764917,"name":"tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption","sourcebytes":[70,114,111,109,32,97,108,108,32,116,104,101,32,115,117,112,112,111,114,116,101,100,32,102,111,114,109,97,116,115,44,32,97,115,107,32,119,104,105,99,104,32,111,110,101,32,116,111,32,117,115,101,32,101,118,101,114,121,32,116,105,109,101],"value":"From all the supported formats, ask which one to use every time"}, {"hash":184179561,"name":"tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption","sourcebytes":[87,104,101,110,32,100,114,111,112,112,105,110,103,32,116,101,120,116,44,32,103,101,110,101,114,97,116,101,32,102,105,108,101,110,97,109,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,40,111,116,104,101,114,119,105,115,101,32,119,105,108,108,32,112,114,111,109,112,116,32,116,104,101,32,117,115,101,114,41],"value":"When dropping text, generate filename automatically (otherwise will prompt the user)"}, {"hash":88623065,"name":"tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption","sourcebytes":[87,104,101,110,32,115,97,118,105,110,103,32,85,110,105,99,111,100,101,32,116,101,120,116,44,32,115,97,118,101,32,105,116,32,105,110,32,85,84,70,56,32,102,111,114,109,97,116,32,40,119,105,108,108,32,98,101,32,85,84,70,49,54,32,111,116,104,101,114,119,105,115,101,41],"value":"When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)"}, {"hash":105947385,"name":"tfrmoptionsdragdrop.lblwarningforaskformat.caption","sourcebytes":[40,119,105,108,108,32,110,111,116,32,119,111,114,107,32,119,105,116,104,32,115,111,109,101,32,115,111,117,114,99,101,32,97,112,112,108,105,99,97,116,105,111,110,44,32,115,111,32,116,114,121,32,116,111,32,117,110,99,104,101,99,107,32,105,102,32,112,114,111,98,108,101,109,41],"value":"(will not work with some source application, so try to uncheck if problem)"} ]} doublecmd-1.1.30/src/frames/foptionsdragdrop.lfm0000644000175000001440000000726515104114162020727 0ustar alexxusersinherited frmOptionsDragDrop: TfrmOptionsDragDrop Height = 467 Width = 845 HelpKeyword = '/configuration.html#ConfigMouseDD' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 467 ClientWidth = 845 DesignLeft = 65 DesignTop = 245 object cbShowConfirmationDialog: TCheckBox[0] Left = 8 Height = 19 Top = 8 Width = 212 Caption = '&Show confirmation dialog after drop' TabOrder = 0 end object gbTextDragAndDropRelatedOptions: TGroupBox[1] AnchorSideLeft.Control = cbShowConfirmationDialog AnchorSideTop.Control = cbShowConfirmationDialog AnchorSideTop.Side = asrBottom Left = 8 Height = 218 Top = 39 Width = 488 AutoSize = True BorderSpacing.Top = 12 Caption = 'When drag && dropping text into panels:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 198 ClientWidth = 484 TabOrder = 1 Visible = False object lblMostDesiredTextFormat1: TLabel Left = 6 Height = 15 Top = 6 Width = 324 Caption = 'Place the most desired format on top of list (use dag && drop):' ParentColor = False end object lblMostDesiredTextFormat2: TLabel AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblMostDesiredTextFormat1 AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 21 Width = 354 Caption = '(if the most desired is not present, we''ll take second one and so on)' ParentColor = False end object lbMostDesiredTextFormat: TListBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblMostDesiredTextFormat2 AnchorSideTop.Side = asrBottom Left = 6 Height = 72 Top = 36 Width = 208 DragMode = dmAutomatic Items.Strings = ( 'Rich test' 'HTML text' 'Unicode text' 'ANSI text' ) ItemHeight = 15 OnDragDrop = lbMostDesiredTextFormatDragDrop OnDragOver = lbMostDesiredTextFormatDragOver ScrollWidth = 190 TabOrder = 0 end object cbDragAndDropAskFormatEachTime: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lbMostDesiredTextFormat AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 108 Width = 358 Caption = 'From all the supported formats, ask which one to use every time' TabOrder = 1 end object cbDragAndDropTextAutoFilename: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblWarningForAskFormat AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 154 Width = 472 BorderSpacing.Top = 12 Caption = 'When dropping text, generate filename automatically (otherwise will prompt the user)' TabOrder = 2 end object cbDragAndDropSaveUnicodeTextInUFT8: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = cbDragAndDropTextAutoFilename AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 173 Width = 413 Caption = 'When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)' TabOrder = 3 end object lblWarningForAskFormat: TLabel AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = cbDragAndDropAskFormatEachTime AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 127 Width = 389 Caption = '(will not work with some source application, so try to uncheck if problem)' ParentColor = False end end end doublecmd-1.1.30/src/frames/foptionsdirectoryhotlistextra.pas0000644000175000001440000001173115104114162023602 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- DirectoryHotlist configuration for extra options page Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsDirectoryHotlistExtra; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus, EditBtn, //DC fOptionsFrame; type { TfrmOptionsDirectoryHotlistExtra } TfrmOptionsDirectoryHotlistExtra = class(TOptionsEditor) btnPathToBeRelativeToAll: TButton; btnPathToBeRelativeToHelper: TSpeedButton; cbDirectoryHotlistFilenameStyle: TComboBox; ckbDirectoryHotlistSource: TCheckBox; ckbDirectoryHotlistTarget: TCheckBox; dePathToBeRelativeTo: TDirectoryEdit; gbDirectoryHotlistOptionsExtra: TGroupBox; lblApplySettingsFor: TLabel; lbPathToBeRelativeTo: TLabel; lbDirectoryHotlistFilenameStyle: TLabel; pmPathToBeRelativeToHelper: TPopupMenu; procedure btnPathToBeRelativeToAllClick(Sender: TObject); procedure btnPathToBeRelativeToHelperClick(Sender: TObject); procedure cbDirectoryHotlistFilenameStyleChange(Sender: TObject); private protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC uGlobs, uLng, DCStrUtils, fOptions, fOptionsDirectoryHotlist, uSpecialDir; procedure TfrmOptionsDirectoryHotlistExtra.Init; begin ParseLineToList(rsPluginFilenameStyleList, cbDirectoryHotlistFilenameStyle.Items); end; procedure TfrmOptionsDirectoryHotlistExtra.Load; begin cbDirectoryHotlistFilenameStyle.ItemIndex := integer(gHotDirFilenameStyle); cbDirectoryHotlistFilenameStyleChange(cbDirectoryHotlistFilenameStyle); dePathToBeRelativeTo.Text := gHotDirPathToBeRelativeTo; ckbDirectoryHotlistSource.Checked := hdpmSource in gHotDirPathModifierElements; ckbDirectoryHotlistTarget.Checked := hdpmTarget in gHotDirPathModifierElements; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); end; function TfrmOptionsDirectoryHotlistExtra.Save: TOptionsEditorSaveFlags; begin gHotDirFilenameStyle := TConfigFilenameStyle(cbDirectoryHotlistFilenameStyle.ItemIndex); gHotDirPathToBeRelativeTo := dePathToBeRelativeTo.Text; gHotDirPathModifierElements := []; if ckbDirectoryHotlistSource.Checked then gHotDirPathModifierElements := gHotDirPathModifierElements + [hdpmSource]; if ckbDirectoryHotlistTarget.Checked then gHotDirPathModifierElements := gHotDirPathModifierElements + [hdpmTarget]; Result := []; end; class function TfrmOptionsDirectoryHotlistExtra.GetIconIndex: integer; begin Result := 33; end; class function TfrmOptionsDirectoryHotlistExtra.GetTitle: string; begin Result := rsOptionsEditorDirectoryHotlistExtra; end; procedure TfrmOptionsDirectoryHotlistExtra.cbDirectoryHotlistFilenameStyleChange(Sender: TObject); begin lbPathToBeRelativeTo.Visible := (TConfigFilenameStyle(cbDirectoryHotlistFilenameStyle.ItemIndex) = TConfigFilenameStyle.pfsRelativeToFollowingPath); dePathToBeRelativeTo.Visible := lbPathToBeRelativeTo.Visible; btnPathToBeRelativeToHelper.Visible := lbPathToBeRelativeTo.Visible; end; procedure TfrmOptionsDirectoryHotlistExtra.btnPathToBeRelativeToAllClick(Sender: TObject); var Options: IOptionsDialog; Editor: TOptionsEditor; begin Self.SaveSettings; //Call "SaveSettings" instead of just "Save" to get option signature set right away do we don't bother user for that page when close. Options := ShowOptions(TfrmOptionsDirectoryHotlist); Editor := Options.GetEditor(TfrmOptionsDirectoryHotlist); TfrmOptionsDirectoryHotlist(Editor).ScanHotDirForFilenameAndPath; ShowOptions(TfrmOptionsDirectoryHotlist); end; procedure TfrmOptionsDirectoryHotlistExtra.btnPathToBeRelativeToHelperClick(Sender: TObject); begin dePathToBeRelativeTo.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(dePathToBeRelativeTo, pfPATH); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end. doublecmd-1.1.30/src/frames/foptionsdirectoryhotlistextra.lrj0000644000175000001440000000300515104114162023601 0ustar alexxusers{"version":1,"strings":[ {"hash":5671667,"name":"tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption","sourcebytes":[80,97,116,104,115],"value":"Paths"}, {"hash":197101002,"name":"tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption","sourcebytes":[87,97,121,32,116,111,32,115,101,116,32,112,97,116,104,115,32,119,104,101,110,32,97,100,100,105,110,103,32,116,104,101,109,58],"value":"Way to set paths when adding them:"}, {"hash":256553386,"name":"tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption","sourcebytes":[80,97,116,104,32,116,111,32,98,101,32,114,101,108,97,116,105,118,101,32,116,111,58],"value":"Path to be relative to:"}, {"hash":171552500,"name":"tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption","sourcebytes":[65,112,112,108,121,32,99,117,114,114,101,110,116,32,115,101,116,116,105,110,103,115,32,116,111,32,100,105,114,101,99,116,111,114,121,32,104,111,116,108,105,115,116],"value":"Apply current settings to directory hotlist"}, {"hash":94816405,"name":"tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption","sourcebytes":[83,111,117,114,99,101],"value":"Source"}, {"hash":104754538,"name":"tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption","sourcebytes":[68,111,32,116,104,105,115,32,102,111,114,32,112,97,116,104,115,32,111,102,58],"value":"Do this for paths of:"}, {"hash":94932420,"name":"tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption","sourcebytes":[84,97,114,103,101,116],"value":"Target"} ]} doublecmd-1.1.30/src/frames/foptionsdirectoryhotlistextra.lfm0000644000175000001440000001633015104114162023575 0ustar alexxusersinherited frmOptionsDirectoryHotlistExtra: TfrmOptionsDirectoryHotlistExtra Height = 573 Width = 850 HelpKeyword = '/configuration.html#ConfigDirHotlistEx' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 573 ClientWidth = 850 DesignLeft = 79 DesignTop = 199 object gbDirectoryHotlistOptionsExtra: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 161 Top = 6 Width = 838 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Paths' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 6 ClientHeight = 141 ClientWidth = 834 TabOrder = 0 object lbDirectoryHotlistFilenameStyle: TLabel AnchorSideLeft.Control = gbDirectoryHotlistOptionsExtra AnchorSideTop.Control = gbDirectoryHotlistOptionsExtra Left = 6 Height = 15 Top = 6 Width = 193 Caption = 'Way to set paths when adding them:' ParentColor = False end object cbDirectoryHotlistFilenameStyle: TComboBox AnchorSideLeft.Control = lbDirectoryHotlistFilenameStyle AnchorSideTop.Control = lbDirectoryHotlistFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDirectoryHotlistOptionsExtra AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 27 Width = 822 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 OnChange = cbDirectoryHotlistFilenameStyleChange Style = csDropDownList TabOrder = 0 end object btnPathToBeRelativeToHelper: TSpeedButton AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideRight.Control = cbDirectoryHotlistFilenameStyle AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = dePathToBeRelativeTo AnchorSideBottom.Side = asrBottom Left = 805 Height = 23 Top = 56 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnPathToBeRelativeToHelperClick end object dePathToBeRelativeTo: TDirectoryEdit AnchorSideLeft.Control = lbPathToBeRelativeTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbDirectoryHotlistFilenameStyle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnPathToBeRelativeToHelper Left = 120 Height = 23 Top = 56 Width = 683 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 1 MaxLength = 0 TabOrder = 1 end object lbPathToBeRelativeTo: TLabel AnchorSideLeft.Control = lbDirectoryHotlistFilenameStyle AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 60 Width = 112 Caption = 'Path to be relative to:' ParentColor = False end object btnPathToBeRelativeToAll: TButton AnchorSideLeft.Control = lbDirectoryHotlistFilenameStyle AnchorSideTop.Control = ckbDirectoryHotlistSource AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 110 Width = 242 AutoSize = True Caption = 'Apply current settings to directory hotlist' OnClick = btnPathToBeRelativeToAllClick TabOrder = 2 end object ckbDirectoryHotlistSource: TCheckBox AnchorSideLeft.Control = lblApplySettingsFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 116 Height = 19 Top = 85 Width = 56 BorderSpacing.Left = 6 Caption = 'Source' TabOrder = 3 end object lblApplySettingsFor: TLabel AnchorSideLeft.Control = lbDirectoryHotlistFilenameStyle AnchorSideTop.Control = ckbDirectoryHotlistSource AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 87 Width = 104 Caption = 'Do this for paths of:' ParentColor = False end object ckbDirectoryHotlistTarget: TCheckBox AnchorSideLeft.Control = ckbDirectoryHotlistSource AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = dePathToBeRelativeTo AnchorSideTop.Side = asrBottom Left = 178 Height = 19 Top = 85 Width = 54 BorderSpacing.Left = 6 Caption = 'Target' TabOrder = 4 end end object pmPathToBeRelativeToHelper: TPopupMenu[1] left = 568 top = 112 end end doublecmd-1.1.30/src/frames/foptionsdirectoryhotlist.pas0000644000175000001440000025003215104114162022535 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration of HotDir Copyright (C) 2009-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit foptionsDirectoryHotlist; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. ActnList, SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, types, //DC {$IFDEF MSWINDOWS} uTotalCommander, {$ENDIF} uGlobs, fOptionsFrame, uFile, uHotDir; type TProcedureWhenClickingAMenuItem = procedure(Sender: TObject) of object; { TfrmOptionsDirectoryHotlist } TfrmOptionsDirectoryHotlist = class(TOptionsEditor) actList: TActionList; actInsertBrowsedDir: TAction; actInsertTypedDir: TAction; actInsertActiveFrameDir: TAction; actInsertBothFrameDir: TAction; actInsertSelectionsFromFrame: TAction; actInsertCopyOfEntry: TAction; actInsertSeparator: TAction; actInsertSubMenu: TAction; actAddBrowsedDir: TAction; actAddTypedDir: TAction; actAddActiveFrameDir: TAction; actAddBothFrameDir: TAction; actAddSelectionsFromFrame: TAction; actAddCopyOfEntry: TAction; miSeparator2: TMenuItem; actAddSeparator: TAction; actAddSubMenu: TAction; actDeleteSelectedItem: TAction; actDeleteSubMenuKeepElem: TAction; actDeleteSubMenuAndElem: TAction; actDeleteAll: TAction; actMoveToPrevious: TAction; actMoveToNext: TAction; actCut: TAction; actPaste: TAction; actSearchAndReplaceInPath: TAction; actSearchAndReplaceInTargetPath: TAction; actSearchAndReplaceInPathAndTarget: TAction; actTweakPath: TAction; actTweakTargetPath: TAction; actFocusTreeWindow: TAction; actGotoFirstItem: TAction; actGoToPreviousItem: TAction; actGoToNextItem: TAction; actGotoLastItem: TAction; actExpandItem: TAction; actOpenAllBranches: TAction; actCollapseItem: TAction; actCollapseAll: TAction; pmInsertDirectoryHotlist: TPopupMenu; miInsertBrowsedDir: TMenuItem; miInsertTypedDir: TMenuItem; miInsertActiveFrameDir: TMenuItem; miInsertBothFrameDir: TMenuItem; miInsertSelectionsFromFrame: TMenuItem; miInsertCopyOfEntry: TMenuItem; miSeparator1: TMenuItem; miInsertSeparator: TMenuItem; miInsertSubMenu: TMenuItem; pmAddDirectoryHotlist: TPopupMenu; miAddBrowsedDir: TMenuItem; miAddTypedDir: TMenuItem; miAddActiveFrameDir: TMenuItem; miAddBothFrameDir: TMenuItem; miAddSelectionsFromFrame: TMenuItem; miAddCopyOfEntry: TMenuItem; miAddSeparator: TMenuItem; miAddSubMenu: TMenuItem; pmDeleteDirectoryHotlist: TPopupMenu; miDeleteSelectedItem: TMenuItem; miSeparator3: TMenuItem; miDeleteSubMenuKeepElem: TMenuItem; miDeleteSubMenuAndElem: TMenuItem; miSeparator4: TMenuItem; miDeleteAll: TMenuItem; pmSortDirectoryHotlist: TPopupMenu; miSortSingleGroup: TMenuItem; miCurrentLevelOfItemOnly: TMenuItem; miSortSingleSubMenu: TMenuItem; miSortSubMenuAndSubLevel: TMenuItem; miSortEverything: TMenuItem; pmMiscellaneousDirectoryHotlist: TPopupMenu; miTestResultingHotlistMenu: TMenuItem; miSeparator5: TMenuItem; miNavigate: TMenuItem; miFocusTreeWindow: TMenuItem; miSeparator10: TMenuItem; miGotoFirstItem: TMenuItem; miGoToPreviousItem: TMenuItem; miGoToNextItem: TMenuItem; miGotoLastItem: TMenuItem; miSeparator11: TMenuItem; miExpandItem: TMenuItem; miOpenAllBranches: TMenuItem; miCollapseItem: TMenuItem; miCollapseAll: TMenuItem; miSeparator12: TMenuItem; miMoveToPrevious: TMenuItem; miMoveToNext: TMenuItem; miSeparator6: TMenuItem; miCut: TMenuItem; miPaste: TMenuItem; miSeparator7: TMenuItem; miSearchAndReplace: TMenuItem; miSearchAndReplaceInPath: TMenuItem; miSearchAndReplaceInTargetPath: TMenuItem; miSearchInReplaceInBothPaths: TMenuItem; miSeparator8: TMenuItem; miTweakPath: TMenuItem; miTweakTargetPath: TMenuItem; miSeparator9: TMenuItem; miDetectIfPathExist: TMenuItem; miDetectIfPathTargetExist: TMenuItem; pmExportDirectoryHotlist: TPopupMenu; miExportToHotlistFile: TMenuItem; miSeparator13: TMenuItem; miExportToTotalCommanderk: TMenuItem; miExportToTotalCommandernk: TMenuItem; miGotoConfigureTCInfo1: TMenuItem; pmImportDirectoryHotlist: TPopupMenu; miImportFromHotlistFile: TMenuItem; miSeparator14: TMenuItem; miImportTotalCommander: TMenuItem; miGotoConfigureTCInfo2: TMenuItem; pmBackupDirectoryHotlist: TPopupMenu; miSaveBackupHotlist: TMenuItem; miRestoreBackupHotlist: TMenuItem; pmHotDirTestMenu: TPopupMenu; miHotDirTestMenu: TMenuItem; gbDirectoryHotlist: TGroupBox; pnlClient: TPanel; tvDirectoryHotlist: TTreeView; pnlButtons: TPanel; btnInsert: TBitBtn; btnAdd: TBitBtn; btnDelete: TBitBtn; btnSort: TBitBtn; btnMiscellaneous: TBitBtn; btnExport: TBitBtn; btnImport: TBitBtn; btnBackup: TBitBtn; pnlBottom: TPanel; rgWhereToAdd: TRadioGroup; gbHotlistOtherOptions: TGroupBox; cbAddTarget: TCheckBox; cbFullExpandTree: TCheckBox; cbShowPathInPopup: TCheckBox; cbShowOnlyValidEnv: TCheckBox; lbleditHotDirName: TLabeledEdit; lbleditHotDirPath: TLabeledEdit; btnRelativePath: TSpeedButton; cbSortHotDirPath: TComboBox; lbleditHotDirTarget: TLabeledEdit; btnRelativeTarget: TSpeedButton; cbSortHotDirTarget: TComboBox; pmPathHelper: TPopupMenu; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; procedure actInsertOrAddSomethingExecute(Sender: TObject); procedure actDeleteSomethingExecute(Sender: TObject); procedure actDeleteAllExecute(Sender: TObject); procedure actMoveToPreviousExecute(Sender: TObject); procedure actMoveToNextExecute(Sender: TObject); procedure actCutExecute(Sender: TObject); procedure actPasteExecute(Sender: TObject); procedure actSearchAndReplaceExecute(Sender: TObject); procedure actTweakPathExecute(Sender: TObject); procedure actFocusTreeWindowExecute(Sender: TObject); procedure actGotoFirstItemExecute(Sender: TObject); procedure actGoToPreviousItemExecute(Sender: TObject); procedure actGoToNextItemExecute(Sender: TObject); procedure actGotoLastItemExecute(Sender: TObject); procedure actExpandItemExecute(Sender: TObject); procedure actOpenAllBranchesExecute(Sender: TObject); procedure actCollapseItemExecute(Sender: TObject); procedure actCollapseAllExecute(Sender: TObject); procedure miSortDirectoryHotlistClick(Sender: TObject); procedure miTestResultingHotlistMenuClick(Sender: TObject); procedure miDetectIfPathExistClick(Sender: TObject); procedure miExportToAnythingClick(Sender: TObject); procedure miImportFromAnythingClick(Sender: TObject); procedure miGotoConfigureTCInfoClick(Sender: TObject); procedure btnActionClick(Sender: TObject); procedure cbFullExpandTreeChange(Sender: TObject); procedure lbleditHotDirNameChange(Sender: TObject); procedure anyRelativeAbsolutePathClick(Sender: TObject); procedure cbSortHotDirPathChange(Sender: TObject); procedure cbSortHotDirTargetChange(Sender: TObject); procedure pnlButtonsResize(Sender: TObject); procedure tvDirectoryHotlistDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure tvDirectoryHotlistDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure tvDirectoryHotlistEnter(Sender: TObject); procedure tvDirectoryHotlistExit(Sender: TObject); procedure tvDirectoryHotlistSelectionChanged(Sender: TObject); procedure RefreshTreeView(NodeToSelect: TTreeNode); procedure PopulatePopupMenuWithCommands(pmMenuToPopulate: TPopupMenu); procedure miShowWhereItWouldGo(Sender: TObject); procedure miSimplyCopyCaption(Sender: TObject); procedure ClearCutAndPasteList; function ActualAddDirectories(ParamDispatcher: TKindOfHotDirEntry; sName, sPath, sTarget: string; InsertOrAdd: integer): TTreeNode; function TryToGetCloserHotDir(sDirToFindAPlaceFor: string; var TypeOfAddition: integer): TTreeNode; function TryToGetExactHotDir(const index: integer): TTreeNode; procedure RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); procedure RefreshExistingProperty(ScanMode: integer); procedure SetNormalIconsInTreeView; function MySortViaGroup(Node1, Node2: TTreeNode): integer; procedure CopyTTreeViewToAnother(tvSource, tvDestination: TTreeView); function GetNextGroupNumber: integer; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private { Private declarations } pmCommandHelper: TPopupMenu; DirectoryHotlistTemp: TDirectoryHotlist; CutAndPasteIndexList: TStringList; GlobalGroupNumber: integer; public { Public declarations } class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; destructor Destroy; override; procedure SubmitToAddOrConfigToHotDirDlg(paramActionDispatcher: integer; paramPath, paramTarget: string; paramOptionalIndex: integer); procedure ScanHotDirForFilenameAndPath; function GetHotDirFilenameToSave(AHotDirPathModifierElement: tHotDirPathModifierElement; sParamFilename: string): string; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LazUTF8, LCLIntf, LCLMessageGlue, helpintfs, //DC fEditSearch, fOptionsMisc, DCStrUtils, uLng, uDCUtils, fmain, uFormCommands, uFileProcs, uShowMsg, DCOSUtils, uSpecialDir, fhotdirexportimport, uComponentsSignature; { Constants used with export/import } const MASK_ACTION_WITH_WHAT = $03; MASK_FLUSHORNOT_EXISTING = $80; ACTION_WITH_WINCMDINI = $00; ACTION_WITH_HOTLISTFILE = $01; ACTION_WITH_BACKUP = $02; ACTION_ERASEEXISTING = $80; { Constant used with various action } ACTION_INSERTHOTDIR = 1; ACTION_ADDHOTDIR = 2; { TfrmOptionsDirectoryHotlist.Init } procedure TfrmOptionsDirectoryHotlist.Init; begin pnlBottom.Constraints.MinHeight := pnlBottom.Height; ParseLineToList(rsOptAddFromMainPanel, rgWhereToAdd.Items); ParseLineToList(rsHotDirForceSortingOrderChoices, cbSortHotDirPath.Items); ParseLineToList(rsHotDirForceSortingOrderChoices, cbSortHotDirTarget.Items); OpenDialog.Filter := ParseLineToFileFilter([rsFilterDirectoryHotListFiles, '*.hotlist', rsFilterXmlConfigFiles, '*.xml', rsFilterAnyFiles, AllFilesMask]); SaveDialog.Filter := ParseLineToFileFilter([rsFilterDirectoryHotListFiles, '*.hotlist']); end; { TfrmOptionsDirectoryHotlist.Load } procedure TfrmOptionsDirectoryHotlist.Load; begin gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); pmCommandHelper := TPopupMenu.Create(Self); PopulatePopupMenuWithCommands(pmCommandHelper); btnRelativePath.Hint := rsMsgHotDirTipSpecialDirBut; btnRelativeTarget.Hint := rsMsgHotDirTipSpecialDirBut; cbSortHotDirPath.Hint := rsMsgHotDirTipOrderPath; cbSortHotDirTarget.Hint := rsMsgHotDirTipOrderTarget; cbAddTarget.Checked := gHotDirAddTargetOrNot; cbFullExpandTree.Checked := gHotDirFullExpandOrNot; cbShowPathInPopup.Checked := gShowPathInPopup; cbShowOnlyValidEnv.Checked := gShowOnlyValidEnv; rgWhereToAdd.ItemIndex := integer(gWhereToAddNewHotDir); CutAndPasteIndexList := TStringList.Create; CutAndPasteIndexList.Sorted := True; CutAndPasteIndexList.Duplicates := dupAccept; {$IFNDEF MSWINDOWS} miExportToTotalCommanderk.Free; miExportToTotalCommandernk.Free; miGotoConfigureTCInfo1.Free; miImportTotalCommander.Free; miGotoConfigureTCInfo2.Free; miSeparator13.Free; miSeparator14.Free; {$ENDIF} if DirectoryHotlistTemp = nil then begin DirectoryHotlistTemp := TDirectoryHotlist.Create; gDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(DirectoryHotlistTemp); end; tvDirectoryHotlist.Images := frmMain.imgLstDirectoryHotlist; DirectoryHotlistTemp.LoadTTreeView(tvDirectoryHotlist, -1); cbFullExpandTreeChange(cbFullExpandTree); if tvDirectoryHotlist.Items.Count > 0 then tvDirectoryHotlist.Items[0].Selected := True //Select at least first one by default else RefreshTreeView(nil); //If zero hot directory we will hide the directory path, disable export button, etc. end; { TfrmOptionsDirectoryHotlist.Save } function TfrmOptionsDirectoryHotlist.Save: TOptionsEditorSaveFlags; begin Result := []; DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); DirectoryHotlistTemp.CopyDirectoryHotlistToDirectoryHotlist(gDirectoryHotlist); gHotDirAddTargetOrNot := cbAddTarget.Checked; gHotDirFullExpandOrNot := cbFullExpandTree.Checked; if gShowPathInPopup <> cbShowPathInPopup.Checked then begin gShowPathInPopup := cbShowPathInPopup.Checked; pmPathHelper.Items.Clear; //Let' re-populate it since option for environment variable path has changed... gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; if gShowOnlyValidEnv <> cbShowOnlyValidEnv.Checked then begin gShowOnlyValidEnv := cbShowOnlyValidEnv.Checked; LoadWindowsSpecialDir; pmPathHelper.Items.Clear; //Let' re-populate it since option for environment variabel path has changed... gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; gWhereToAddNewHotDir := TPositionWhereToAddHotDir(rgWhereToAdd.ItemIndex); cbFullExpandTreeChange(cbFullExpandTree); end; { TfrmOptionsDirectoryHotlist.GetIconIndex } class function TfrmOptionsDirectoryHotlist.GetIconIndex: integer; begin Result := 33; end; { TfrmOptionsDirectoryHotlist.GetTitle } class function TfrmOptionsDirectoryHotlist.GetTitle: string; begin Result := rsOptionsEditorDirectoryHotlist; end; { TfrmOptionsDirectoryHotlist.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsDirectoryHotlist.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsDirectoryHotlist.ExtraOptionsSignature } function TfrmOptionsDirectoryHotlist.ExtraOptionsSignature(CurrentSignature: dword): dword; begin DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); Result := DirectoryHotlistTemp.ComputeSignature(CurrentSignature); Result := ComputeSignatureSingleComponent(rgWhereToAdd, Result); Result := ComputeSignatureSingleComponent(cbAddTarget, Result); Result := ComputeSignatureSingleComponent(cbFullExpandTree, Result); Result := ComputeSignatureSingleComponent(cbShowPathInPopup, Result); Result := ComputeSignatureSingleComponent(cbShowOnlyValidEnv, Result); end; { TfrmOptionsDirectoryHotlist.Destroy } destructor TfrmOptionsDirectoryHotlist.Destroy; begin pmCommandHelper.Free; CutAndPasteIndexList.Free; inherited Destroy; end; { TfrmOptionsDirectoryHotlist.SubmitToAddOrConfigToHotDirDlg } procedure TfrmOptionsDirectoryHotlist.SubmitToAddOrConfigToHotDirDlg(paramActionDispatcher: integer; paramPath, paramTarget: string; paramOptionalIndex: integer); var TypeOfAddition, IndexFile: longint; sTempo: string; NodeToSelect: TTreeNode = nil; SelectedOrActiveDirectories: TFiles; procedure AddThisSubmittedDirectory(DirectoryPath: string); begin if ((paramActionDispatcher = ACTION_ADDTOHOTLIST) and (cbAddTarget.Checked)) or (paramActionDispatcher = ACTION_ADDBOTHTOHOTLIST) then sTempo := IncludeTrailingPathDelimiter(paramTarget) else sTempo := ''; if gWhereToAddNewHotDir = ahdLast then TypeOfAddition := ACTION_ADDHOTDIR else TypeOfAddition := ACTION_INSERTHOTDIR; NodeToSelect := nil; if (tvDirectoryHotlist.Items.Count > 0) then begin case gWhereToAddNewHotDir of ahdFirst: NodeToSelect := tvDirectoryHotlist.Items.Item[0]; ahdLast: NodeToSelect := tvDirectoryHotlist.Items.Item[pred(tvDirectoryHotlist.Items.Count)]; ahdSmart: NodeToSelect := TryToGetCloserHotDir(DirectoryPath, TypeOfAddition); else NodeToSelect := tvDirectoryHotlist.Items.Item[0]; end; if NodeToSelect <> nil then NodeToSelect.Selected := True; end; NodeToSelect := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(DirectoryPath).Replace('&','&&'), DirectoryPath, sTempo, TypeOfAddition); end; begin case paramActionDispatcher of ACTION_ADDTOHOTLIST, ACTION_ADDJUSTSOURCETOHOTLIST, ACTION_ADDBOTHTOHOTLIST: begin AddThisSubmittedDirectory(paramPath); end; ACTION_CONFIGTOHOTLIST: begin NodeToSelect := TryToGetCloserHotDir(paramPath, TypeOfAddition); end; ACTION_JUSTSHOWCONFIGHOTLIST: begin if tvDirectoryHotlist.Items.Count > 0 then NodeToSelect := tvDirectoryHotlist.Items.Item[0]; end; ACTION_ADDSELECTEDDIR: begin SelectedOrActiveDirectories := frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try if SelectedOrActiveDirectories.Count > 0 then begin for IndexFile := 0 to pred(SelectedOrActiveDirectories.Count) do AddThisSubmittedDirectory(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[IndexFile].FullPath)); end; finally FreeAndNil(SelectedOrActiveDirectories); end; end; ACTION_DIRECTLYCONFIGENTRY: begin NodeToSelect := TryToGetExactHotDir(paramOptionalIndex); end end; if (NodeToSelect = nil) and (tvDirectoryHotlist.Items.Count > 0) then NodeToSelect := tvDirectoryHotlist.Items.Item[0]; RefreshTreeView(NodeToSelect); //2014-08-27: These lines are a workaround a problem present at this moment in Lazarus regarding TSpeedButton present inside a TGroupBox. //See on the web if the following case is solved prior to remove these lines: http://bugs.freepascal.org/view.php?id=26638 {$IFDEF MSWINDOWS} if tvDirectoryHotlist.CanFocus then begin LCLSendMouseDownMsg(Self, 1, 1, mbLeft, []); LCLSendMouseUpMsg(Self, 1, 1, mbLeft, []); end; {$ENDIF MSWINDOWS} if not tvDirectoryHotlist.Focused then if tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; if not lbleditHotDirName.Focused then if lbleditHotDirName.CanFocus then lbleditHotDirName.SetFocus; end; { TfrmOptionsDirectoryHotlist.actInsertOrAddSomethingExecute } procedure TfrmOptionsDirectoryHotlist.actInsertOrAddSomethingExecute(Sender: TObject); var sPath, initialPath, stempo: string; AddOrInsertDispatcher, Dispatcher, Index: integer; MaybeNodeAfterAddition: TTreeNode = nil; NodeAfterAddition: TTreeNode = nil; SelectedOrActiveDirectories: TFiles; begin Dispatcher := (TComponent(Sender).tag and $0F); AddOrInsertDispatcher := ((TComponent(Sender).tag and $F0) shr 4) + 1; sPath := ''; case Dispatcher of 1: //Directory I will browse to begin initialPath := ''; if (tvDirectoryHotlist.Items.Count > 0) then begin if THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher = hd_CHANGEPATH then initialPath := mbExpandFileName(THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath); end; if initialPath = '' then initialPath := frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, initialPath, sPath, False) then begin NodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(sPath), sPath, '', AddOrInsertDispatcher); end; end; 2: //Directory I will type begin if cbAddTarget.Checked then sTempo := rsMsgHotDirTarget else sTempo := ''; NodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, rsMsgHotDirName, rsMsgHotDirPath, sTempo, AddOrInsertDispatcher); end; 3: //Directory of the active frame begin NodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(frmMain.ActiveFrame.CurrentLocation), frmMain.ActiveFrame.CurrentLocation, '', AddOrInsertDispatcher); end; 4: //Directory of the active AND inactive frames begin NodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(frmMain.ActiveFrame.CurrentLocation), frmMain.ActiveFrame.CurrentLocation, frmMain.NotActiveFrame.CurrentLocation, AddOrInsertDispatcher); end; 5: //Separator begin NodeAfterAddition := ActualAddDirectories(hd_SEPARATOR, HOTLIST_SEPARATORSTRING, '', '', AddOrInsertDispatcher); end; 6: //SubMenu, a new branch begin NodeAfterAddition := ActualAddDirectories(hd_STARTMENU, rsMsgHotDirSubMenuName, '', '', AddOrInsertDispatcher); tvDirectoryHotlist.ClearSelection(True); NodeAfterAddition.Selected := True; ActualAddDirectories(hd_CHANGEPATH, rsMsgHotDirName, rsMsgHotDirPath, sTempo, 3); NodeAfterAddition.Expand(False); tvDirectoryHotlist.SetFocus; //The fact to set momentary the focus here, even if we will lose it later on in the function is good anyway. Why? Because when focus will be given to the TLabeledEdit later, the whole content will be selected at that moment instead of just having the cursor flashing on start. That's good because 99.9% of the time, we'll need to rename the submenu anyway. end; 7: //Copy of entry begin NodeAfterAddition := ActualAddDirectories(THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher, THotDir(tvDirectoryHotlist.Selected.Data).HotDirName, THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath, THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget, AddOrInsertDispatcher); end; 8: //A command begin NodeAfterAddition := ActualAddDirectories(hd_COMMAND, rsMsgHotDirCommandName, rsMsgHotDirCommandSample, '', AddOrInsertDispatcher); end; 9: //Current selected directories of active frame begin SelectedOrActiveDirectories := frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try if SelectedOrActiveDirectories.Count > 0 then begin if AddOrInsertDispatcher = 1 then begin //When we INSERT, which mean BEFORE the selection, let's do it this way so last insert will be just above the previous selection AND ready to edit for Index := 0 to pred(SelectedOrActiveDirectories.Count) do begin MaybeNodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath)), ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath), '', AddOrInsertDispatcher); if NodeAfterAddition = nil then NodeAfterAddition := MaybeNodeAfterAddition; end; end else begin //When we ADD, which mean AFTER the selection, let's do it this way so last addition will be just below the previous selection AND will be the first one that selected in active frame for Index := pred(SelectedOrActiveDirectories.Count) downto 0 do begin NodeAfterAddition := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath)), ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath), '', AddOrInsertDispatcher); end; end; end; finally FreeAndNil(SelectedOrActiveDirectories); end; end; end; if NodeAfterAddition <> nil then begin tvDirectoryHotlist.ClearSelection(True); tvDirectoryHotlist.Select(NodeAfterAddition); if lbleditHotDirName.CanFocus then lbleditHotDirName.SetFocus; end; end; { TfrmOptionsDirectoryHotlist.actDeleteSomethingExecute } procedure TfrmOptionsDirectoryHotlist.actDeleteSomethingExecute(Sender: TObject); var DeleteDispatcher: integer; FlagQuitDeleting: boolean; Answer: TMyMsgResult; NodeAfterDeletion: TTreeNode = nil; isTreeHadFocus: boolean = False; procedure DeleteSelectionAndSetNodeAfterDeletion; begin if tvDirectoryHotList.Selections[0].GetNextSibling <> nil then NodeAfterDeletion := tvDirectoryHotList.Selections[0].GetNextSibling else if tvDirectoryHotList.Selections[0].GetPrevSibling <> nil then NodeAfterDeletion := tvDirectoryHotList.Selections[0].GetPrevSibling else if tvDirectoryHotList.Selections[0].Parent <> nil then NodeAfterDeletion := tvDirectoryHotList.Selections[0].Parent else NodeAfterDeletion := nil; tvDirectoryHotList.Selections[0].Delete; ClearCutAndPasteList; end; begin if tvDirectoryHotlist.SelectionCount > 0 then begin isTreeHadFocus := tvDirectoryHotlist.Focused; tvDirectoryHotlist.Enabled := False; try with Sender as TComponent do DeleteDispatcher := tag; FlagQuitDeleting := False; //It's funny but as long we have something selected, we delete it and it will be index 0 since when //deleting something, the "Selections" array is updated! while (tvDirectoryHotList.SelectionCount > 0) and (not FlagQuitDeleting) do begin if tvDirectoryHotList.Selections[0].GetFirstChild = nil then begin DeleteSelectionAndSetNodeAfterDeletion; end else begin case DeleteDispatcher of 1: Answer := MsgBox(Format(rsMsgHotDirWhatToDelete, [tvDirectoryHotList.Selections[0].Text]), [msmbAll, msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); 2: Answer := mmrNo; 3: Answer := mmrYes; else Answer := mmrCancel; //Should not happen, but just in case end; case Answer of mmrAll: begin DeleteDispatcher := 3; DeleteSelectionAndSetNodeAfterDeletion; end; mmrYes: DeleteSelectionAndSetNodeAfterDeletion; mmrNo: begin NodeAfterDeletion := tvDirectoryHotList.Selections[0].GetFirstChild; repeat tvDirectoryHotList.Selections[0].GetFirstChild.MoveTo(tvDirectoryHotList.Selections[0].GetFirstChild.Parent, naInsert); until tvDirectoryHotList.Selections[0].GetFirstChild = nil; tvDirectoryHotList.Selections[0].Delete; ClearCutAndPasteList; end; else FlagQuitDeleting := True; end; end; end; if (NodeAfterDeletion = nil) and (FlagQuitDeleting = False) and (tvDirectoryHotList.Items.Count > 0) then NodeAfterDeletion := tvDirectoryHotList.Items.Item[0]; if (NodeAfterDeletion <> nil) and (FlagQuitDeleting = False) then NodeAfterDeletion.Selected := True; finally tvDirectoryHotlist.Enabled := True; if isTreeHadFocus and tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; end; end; end; { TfrmOptionsDirectoryHotlist.actDeleteAllExecute } procedure TfrmOptionsDirectoryHotlist.actDeleteAllExecute(Sender: TObject); begin if MsgBox(rsMsgHotDirDeleteAllEntries, [msmbYes, msmbNo], msmbNo, msmbNo) = mmrYes then begin tvDirectoryHotlist.Items.Clear; lbleditHotDirName.Text := ''; lbleditHotDirPath.Text := ''; lbleditHotDirTarget.Text := ''; ClearCutAndPasteList; end; end; { TfrmOptionsDirectoryHotlist.actMoveToPreviousExecute } procedure TfrmOptionsDirectoryHotlist.actMoveToPreviousExecute(Sender: TObject); var AOriginalSelectedNode, AAboveNode: TTreeNode; begin AOriginalSelectedNode := tvDirectoryHotlist.Selected; if AOriginalSelectedNode <> nil then begin tvDirectoryHotlist.MoveToPrevNode(False); AAboveNode := tvDirectoryHotlist.Selected; if AOriginalSelectedNode <> AAboveNode then begin AOriginalSelectedNode.MoveTo(AAboveNode, naInsert); tvDirectoryHotlist.Select(AOriginalSelectedNode); end; end; end; { TfrmOptionsDirectoryHotlist.actMoveToNextExecute } procedure TfrmOptionsDirectoryHotlist.actMoveToNextExecute(Sender: TObject); var AOriginalSelectedNode, ABelowNode: TTreeNode; begin AOriginalSelectedNode := tvDirectoryHotlist.Selected; if AOriginalSelectedNode <> nil then begin tvDirectoryHotlist.MoveToNextNode(False); ABelowNode := tvDirectoryHotlist.Selected; if AOriginalSelectedNode <> ABelowNode then begin AOriginalSelectedNode.MoveTo(ABelowNode, naInsertBehind); tvDirectoryHotlist.Select(AOriginalSelectedNode); end; end; end; { TfrmOptionsDirectoryHotlist.actCutExecute } procedure TfrmOptionsDirectoryHotlist.actCutExecute(Sender: TObject); var Index: integer; begin if tvDirectoryHotlist.SelectionCount > 0 then begin for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin CutAndPasteIndexList.Add(IntToStr(tvDirectoryHotlist.Selections[Index].AbsoluteIndex)); end; actPaste.Enabled := True; end; end; { TfrmOptionsDirectoryHotlist.actPasteExecute } procedure TfrmOptionsDirectoryHotlist.actPasteExecute(Sender: TObject); var DestinationNode: TTreeNode; Index: longint; begin if CutAndPasteIndexList.Count > 0 then begin DestinationNode := tvDirectoryHotlist.Selected; if DestinationNode <> nil then begin tvDirectoryHotlist.ClearSelection(False); for Index := 0 to pred(CutAndPasteIndexList.Count) do begin tvDirectoryHotlist.Items.Item[StrToInt(CutAndPasteIndexList.Strings[Index])].Selected := True; end; for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode, naInsert); end; ClearCutAndPasteList; end; end; end; { TfrmOptionsDirectoryHotlist.actSearchAndReplaceExecute } procedure TfrmOptionsDirectoryHotlist.actSearchAndReplaceExecute(Sender: TObject); var NbOfReplacement: longint; sSearchText, sReplaceText: string; ReplaceFlags: TReplaceFlags; function ReplaceIfNecessary(sWorkingText: string): string; begin Result := UTF8StringReplace(sWorkingText, sSearchText, sReplaceText, ReplaceFlags); if Result <> sWorkingText then Inc(NbOfReplacement); end; var Index, ActionDispatcher: integer; EditSearchOptionToOffer: TEditSearchDialogOption; EditSearchOptionReturned: TEditSearchDialogOption = []; CaseSensitive: array[Boolean] of TEditSearchDialogOption = ([eswoCaseSensitiveUnchecked], [eswoCaseSensitiveChecked]); begin with Sender as TComponent do ActionDispatcher := tag; if ((ActionDispatcher and $01) <> 0) and (lbleditHotDirPath.Text <> '') then sSearchText := lbleditHotDirPath.Text else if ((ActionDispatcher and $02) <> 0) and (lbleditHotDirTarget.Text <> '') then sSearchText := lbleditHotDirTarget.Text else sSearchText := ''; sReplaceText := sSearchText; EditSearchOptionToOffer := CaseSensitive[FileNameCaseSensitive]; if GetSimpleSearchAndReplaceString(self, EditSearchOptionToOffer, sSearchText, sReplaceText, EditSearchOptionReturned, glsSearchPathHistory, glsReplacePathHistory) then begin NbOfReplacement := 0; ReplaceFlags := [rfReplaceAll]; if eswoCaseSensitiveUnchecked in EditSearchOptionReturned then ReplaceFlags := ReplaceFlags + [rfIgnoreCase]; for Index := 0 to pred(gDirectoryHotlist.Count) do begin case DirectoryHotlistTemp.HotDir[Index].Dispatcher of hd_CHANGEPATH: begin if (ActionDispatcher and $01) <> 0 then DirectoryHotlistTemp.HotDir[Index].HotDirPath := ReplaceIfNecessary(DirectoryHotlistTemp.HotDir[Index].HotDirPath); if (ActionDispatcher and $02) <> 0 then DirectoryHotlistTemp.HotDir[Index].HotDirTarget := ReplaceIfNecessary(DirectoryHotlistTemp.HotDir[Index].HotDirTarget); end; end; end; if NbOfReplacement = 0 then begin msgOk(rsZeroReplacement); end else begin tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); msgOk(format(rsXReplacements, [NbOfReplacement])); end; end; end; { TfrmOptionsDirectoryHotlist.actTweakPathExecute } procedure TfrmOptionsDirectoryHotlist.actTweakPathExecute(Sender: TObject); procedure ShowPopupMenu(APopupMenu: TPopupMenu; ASpeedButton: TSpeedButton); var ptPopupLocation: TPoint; begin APopupMenu.tag := ASpeedButton.tag; ptPopupLocation := ASpeedButton.ClientToScreen(Point(ASpeedButton.Width - 10, ASpeedButton.Height - 10)); Mouse.CursorPos := Point(ptPopupLocation.x + 8, ptPopupLocation.y + 8); APopupMenu.PopUp(ptPopupLocation.x, ptPopupLocation.y); end; begin with Sender as TComponent do begin case tag of 2: begin lbleditHotDirPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirPath, pfPATH); ShowPopupMenu(pmPathHelper,btnRelativePath); end; 3: begin lbleditHotDirTarget.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirTarget, pfPATH); ShowPopupMenu(pmPathHelper,btnRelativeTarget); end; end; end; end; { TfrmOptionsDirectoryHotlist.actFocusTreeWindowExecute } procedure TfrmOptionsDirectoryHotlist.actFocusTreeWindowExecute(Sender: TObject); begin if tvDirectoryHotlist.CanSetFocus then tvDirectoryHotlist.SetFocus; end; { TfrmOptionsDirectoryHotlist.actGotoFirstItemExecute } procedure TfrmOptionsDirectoryHotlist.actGotoFirstItemExecute(Sender: TObject); begin if tvDirectoryHotlist.Items.Count > 0 then tvDirectoryHotlist.Select(tvDirectoryHotlist.Items[0]); end; { TfrmOptionsDirectoryHotlist.actGoToPreviousItemExecute } procedure TfrmOptionsDirectoryHotlist.actGoToPreviousItemExecute(Sender: TObject); begin tvDirectoryHotlist.MoveToPrevNode(False); end; { TfrmOptionsDirectoryHotlist.actGoToNextItemExecute } procedure TfrmOptionsDirectoryHotlist.actGoToNextItemExecute(Sender: TObject); begin tvDirectoryHotlist.MoveToNextNode(False); end; { TfrmOptionsDirectoryHotlist.actGotoLastItemExecute } // Go to the last item that is displayable *without* opening a branche that is not already open. procedure TfrmOptionsDirectoryHotlist.actGotoLastItemExecute(Sender: TObject); var SeekingNode: TTreeNode; LastGoodNode: TTreeNode = nil; begin if tvDirectoryHotlist.Items.Count > 0 then begin SeekingNode := tvDirectoryHotlist.Items[0]; while SeekingNode <> nil do begin SeekingNode := SeekingNode.GetNextSibling; if SeekingNode <> nil then begin LastGoodNode := SeekingNode; end else begin if LastGoodNode.Expanded then SeekingNode := LastGoodNode.Items[0]; end; end; end; if LastGoodNode <> nil then tvDirectoryHotlist.Select(LastGoodNode); end; { TfrmOptionsDirectoryHotlist.actExpandItemExecute } procedure TfrmOptionsDirectoryHotlist.actExpandItemExecute(Sender: TObject); begin if tvDirectoryHotlist.Selected <> nil then if tvDirectoryHotlist.Selected.TreeNodes.Count > 0 then tvDirectoryHotlist.Selected.Expand(False); end; { TfrmOptionsDirectoryHotlist.actOpenAllBranchesExecute } procedure TfrmOptionsDirectoryHotlist.actOpenAllBranchesExecute(Sender: TObject); begin tvDirectoryHotlist.FullExpand; if tvDirectoryHotlist.Selected <> nil then tvDirectoryHotlist.Selected.MakeVisible; end; { TfrmOptionsDirectoryHotlist.actCollapseItemExecute } procedure TfrmOptionsDirectoryHotlist.actCollapseItemExecute(Sender: TObject); begin if tvDirectoryHotlist.Selected <> nil then if tvDirectoryHotlist.Selected.TreeNodes.Count > 0 then tvDirectoryHotlist.Selected.Collapse(True); end; { TfrmOptionsDirectoryHotlist.actCollapseAllExecute } procedure TfrmOptionsDirectoryHotlist.actCollapseAllExecute(Sender: TObject); begin tvDirectoryHotlist.FullCollapse; if tvDirectoryHotlist.Selected <> nil then tvDirectoryHotlist.Selected.MakeVisible; end; { TfrmOptionsDirectoryHotlist.miSortDirectoryHotlistClick } //The trick here is that a "group number" identical has been assigned to the sibling between separator and then we sort //Teh sort has been arrange in such way that item from different group won't be mixed. procedure TfrmOptionsDirectoryHotlist.miSortDirectoryHotlistClick(Sender: TObject); var Dispatcher, Index: integer; StartingNode: TTreeNode; FlagKeepGoingBack: boolean; begin with Sender as TComponent do Dispatcher := tag; for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do THotDir(tvDirectoryHotlist.Items.Item[Index].Data).GroupNumber := 0; GlobalGroupNumber := 0; if tvDirectoryHotlist.SelectionCount > 0 then begin case Dispatcher of 1, 2: //current group only or current level begin for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin if THotDir(tvDirectoryHotlist.Selections[Index].Data).GroupNumber = 0 then begin StartingNode := tvDirectoryHotlist.Selections[Index]; case Dispatcher of 1: //We just need to make sure we start from first item of current level so we search the first one OR a separator begin FlagKeepGoingBack := True; while FlagKeepGoingBack do begin if StartingNode.GetPrevSibling <> nil then begin if THotDir(StartingNode.GetPrevSibling.Data).Dispatcher <> hd_SEPARATOR then StartingNode := StartingNode.GetPrevSibling else FlagKeepGoingBack := False; end else begin FlagKeepGoingBack := False; end; end; end; 2: //We need to make sure we start from the first itm of current level begin while StartingNode.GetPrevSibling <> nil do StartingNode := StartingNode.GetPrevSibling; end; end; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, False, (Dispatcher = 1)); end; end; end; 3, 4: //submenu only, recusive or not begin for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin StartingNode := tvDirectoryHotlist.Selections[Index].GetFirstChild; if StartingNode <> nil then begin if THotDir(StartingNode.Data).GroupNumber = 0 then begin RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, (Dispatcher = 4), False); end; end; end; end; end; end; if Dispatcher = 5 then //We start from the very first one, the top one. begin StartingNode := tvDirectoryHotlist.Items.Item[0]; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, True, False); end; //... and the finale! tvDirectoryHotlist.CustomSort(@MySortViaGroup); ClearCutAndPasteList; end; { TfrmOptionsDirectoryHotlist.miTestResultingHotlistMenuClick } procedure TfrmOptionsDirectoryHotlist.miTestResultingHotlistMenuClick(Sender: TObject); var p: TPoint; begin DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); //We need to refresh our temporary Directory Hotlist in case user played with the tree and added/removed/moved item(s). DirectoryHotlistTemp.PopulateMenuWithHotDir(pmHotDirTestMenu, @miShowWhereItWouldGo, nil, mpJUSTHOTDIRS, 0); p := tvDirectoryHotlist.ClientToScreen(Classes.Point(0, 0)); p.x := p.x + tvDirectoryHotlist.Width; pmHotDirTestMenu.PopUp(p.X, p.Y); end; { TfrmOptionsDirectoryHotlist.miDetectIfPathExistClick } procedure TfrmOptionsDirectoryHotlist.miDetectIfPathExistClick(Sender: TObject); var iNodeIndex: integer; NodeToFocus: TTreeNode = nil; OriginalNode: TTreeNode; begin OriginalNode := tvDirectoryHotlist.Selected; lbleditHotDirName.Text := ''; lbleditHotDirName.Enabled := False; lbleditHotDirPath.Visible := False; cbSortHotDirPath.Visible := False; cbSortHotDirTarget.Visible := False; lbleditHotDirTarget.Visible := False; btnRelativePath.Visible := False; btnRelativeTarget.Visible := False; Application.ProcessMessages; try RefreshExistingProperty(TComponent(Sender).tag); finally lbleditHotDirName.Enabled := True; iNodeIndex := 0; while (iNodeIndex < tvDirectoryHotlist.Items.Count) and (NodeToFocus = nil) do if (THotDir(tvDirectoryHotlist.Items[iNodeIndex].Data).HotDirExisting = DirNotExist) and (tvDirectoryHotlist.Items[iNodeIndex].Count = 0) then NodeToFocus := tvDirectoryHotlist.Items[iNodeIndex] else Inc(iNodeIndex); if NodeToFocus <> nil then tvDirectoryHotlist.Select(NodeToFocus) else if OriginalNode <> nil then tvDirectoryHotlist.Select(OriginalNode); if lbleditHotDirName.CanSetFocus then lbleditHotDirName.SetFocus; end; end; { TfrmOptionsDirectoryHotlist.miExportToAnythingClick } //We could export to a few ways: // 0x00:To TC and keeping existing hotlist // 0x80:To TC after erasing existing Directory Hotlist // 0x01:To a Directory Hotlist file (.hotlist) // 0x02:To a backup file (all of them, to a "BACKUP_YYYY-MM-DD-HH-MM-SS.hotlist" file) // With the backup, we don't ask what to output, we output everything! procedure TfrmOptionsDirectoryHotlist.miExportToAnythingClick(Sender: TObject); var FlagKeepGoing: boolean = False; ActionDispatcher: integer; BackupPath: string; WorkingDirectoryHotlist: TDirectoryHotlist; Answer: integer; begin WorkingDirectoryHotlist := TDirectoryHotlist.Create; try with Sender as TComponent do ActionDispatcher := tag; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.Filename := gTotalCommanderConfigFilename; FlagKeepGoing := True; end; end; {$ENDIF} ACTION_WITH_HOTLISTFILE: begin SaveDialog.DefaultExt := '*.hotlist'; SaveDialog.FilterIndex := 1; SaveDialog.Title := rsMsgHotDirWhereToSave; SaveDialog.FileName := 'New Directory Hotlist'; FlagKeepGoing := SaveDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin SaveDialog.Filename := BackupPath + DirectorySeparator + 'Backup_' + GetDateTimeInStrEZSortable(now) + '.hotlist'; if gDirectoryHotlist.ExportDoubleCommander(SaveDialog.FileName, True) then msgOK(Format(rsMsgHotDirTotalBackuped, [gDirectoryHotlist.Count, SaveDialog.Filename])) else msgError(rsMsgHotDirErrorBackuping); end; Exit; end; end; //User select what to export if FlagKeepGoing then begin with Tfrmhotdirexportimport.Create(Application) do begin try CopyTTreeViewToAnother(tvDirectoryHotlist, tvDirectoryHotlistToExportImport); btnSelectAll.Caption := rsMsgHotDirExportall; btnSelectionDone.Caption := rsMsgHotDirExportSel; Caption := rsMsgHotDirExportHotlist; Answer := ShowModal; if ((Answer = mrOk) and (tvDirectoryHotlistToExportImport.SelectionCount > 0)) or ((Answer = mrAll) and (tvDirectoryHotlistToExportImport.Items.Count > 0)) then begin WorkingDirectoryHotlist.AddFromAnotherTTreeViewTheSelected(nil, tvDirectoryHotlistToExportImport, (Answer = mrAll)); if WorkingDirectoryHotlist.Count > 0 then begin case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: if WorkingDirectoryHotlist.ExportTotalCommander(OpenDialog.FileName, ((ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_ERASEEXISTING)) then msgOK(rsMsgHotDirTotalExported + IntToStr(WorkingDirectoryHotlist.Count)) else msgError(rsMsgHotDirErrorExporting); {$ENDIF} ACTION_WITH_HOTLISTFILE: if WorkingDirectoryHotlist.ExportDoubleCommander(SaveDialog.FileName, True) then msgOK(rsMsgHotDirTotalExported + IntToStr(WorkingDirectoryHotlist.Count)) else msgError(rsMsgHotDirErrorExporting); end; end else begin msgOK(rsMsgHotDirNothingToExport); end; end; //If user confirmed OK and have selected something... finally Free; end; end; end; finally WorkingDirectoryHotlist.Free; end; end; { TfrmOptionsDirectoryHotlist.miImportFromAnythingClick } //We could import from a few ways: // 0x00:From TC // 0x01:From a Directory Hotlist file (.hotlist) // 0x02:From a backup file (all of them, to a "BACKUP_YYYY-MM-DD-HH-MM-SS.hotlist" file) // With the backup, we erase existing ones procedure TfrmOptionsDirectoryHotlist.miImportFromAnythingClick(Sender: TObject); var WorkingDirectoryList: TDirectoryHotlist; Answer, NbOfAdditional, ActionDispatcher: longint; FlagKeepGoing: boolean = False; BackupPath: string; begin with Sender as TComponent do ActionDispatcher := tag; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_HOTLISTFILE: begin OpenDialog.DefaultExt := '*.hotlist'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgHotDirLocateHotlistFile; FlagKeepGoing := OpenDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin OpenDialog.DefaultExt := '*.hotlist'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgHotDirRestoreWhat; OpenDialog.InitialDir := ExcludeTrailingPathDelimiter(BackupPath); FlagKeepGoing := OpenDialog.Execute; end; end; {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.FileName := gTotalCommanderConfigFilename; FlagKeepGoing := True; end; end; {$ENDIF} end; if FlagKeepGoing then begin WorkingDirectoryList := TDirectoryHotlist.Create; try case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: WorkingDirectoryList.ImportTotalCommander(string(OpenDialog.Filename)); {$ENDIF} ACTION_WITH_HOTLISTFILE: WorkingDirectoryList.ImportDoubleCommander(string(OpenDialog.Filename)); ACTION_WITH_BACKUP: WorkingDirectoryList.ImportDoubleCommander(string(OpenDialog.Filename)); end; with Tfrmhotdirexportimport.Create(Application) do begin try WorkingDirectoryList.LoadTTreeView(tvDirectoryHotlistToExportImport, -1); btnSelectAll.Caption := rsMsgHotDirImportall; btnSelectionDone.Caption := rsMsgHotDirImportSel; Caption := rsMsgHotDirImportHotlist; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_HOTLISTFILE: Answer := ShowModal; ACTION_WITH_BACKUP: begin if MsgBox(rsHotDirWarningAbortRestoreBackup, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel) = mmrYes then Answer := mrAll else Exit; end; ACTION_WITH_WINCMDINI: Answer := ShowModal; end; if ((Answer = mrOk) and (tvDirectoryHotlistToExportImport.SelectionCount > 0)) or ((Answer = mrAll) and (tvDirectoryHotlistToExportImport.Items.Count > 0)) then begin ClearCutAndPasteList; if ((ActionDispatcher and MASK_ACTION_WITH_WHAT) = ACTION_WITH_BACKUP) and (Answer = mrAll) then begin DirectoryHotlistTemp.Clear; tvDirectoryHotlist.Items.Clear; end; NbOfAdditional := DirectoryHotlistTemp.AddFromAnotherTTreeViewTheSelected(tvDirectoryHotlist, tvDirectoryHotlistToExportImport, (Answer = mrAll)); if NbOfAdditional > 0 then begin //DirectoryHotlistTemp.LoadTTreeView(tvDirectoryHotlist,-1); tvDirectoryHotlist.ClearSelection(True); if tvDirectoryHotlist.Items.Count > 0 then tvDirectoryHotlist.Select(tvDirectoryHotlist.Items[pred(tvDirectoryHotlist.Items.Count)]); if lbleditHotDirName.CanFocus then lbleditHotDirName.SetFocus; msgOK(format(rsMsgHotDirNbNewEntries, [NbOfAdditional])); end; end; //If user confirmed OK and have selected something... finally Free; end; end; finally WorkingDirectoryList.Free; end; end; end; { TfrmOptionsDirectoryHotlist.miGotoConfigureTCInfoClick } procedure TfrmOptionsDirectoryHotlist.miGotoConfigureTCInfoClick(Sender: TObject); begin BringUsToTCConfigurationPage; end; { TfrmOptionsDirectoryHotlist.btnActionClick } procedure TfrmOptionsDirectoryHotlist.btnActionClick(Sender: TObject); begin case TComponent(Sender).tag of 1: pmInsertDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 2: pmAddDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 3: pmDeleteDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 4: pmExportDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 5: pmImportDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 6: pmBackupDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 7: pmMiscellaneousDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 8: pmSortDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; { TfrmOptionsDirectoryHotlist.cbFullExpandTreeChange } procedure TfrmOptionsDirectoryHotlist.cbFullExpandTreeChange(Sender: TObject); begin if cbFullExpandTree.Checked then tvDirectoryHotlist.FullExpand else tvDirectoryHotlist.FullCollapse; end; procedure TfrmOptionsDirectoryHotlist.lbleditHotDirNameChange(Sender: TObject); begin //If nothing currently selected, no need to update anything here. if (tvDirectoryHotlist.Selected <> nil) and (TLabeledEdit(Sender).Enabled) then begin case TLabeledEdit(Sender).tag of 1: //Hot dir name begin try //Make sure we actually have something, not an attempt of submenu or end of menu if (TLabeledEdit(Sender).Text <> '') and (TLabeledEdit(Sender).Text[1] <> '-') and (THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher <> hd_SEPARATOR) then begin //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirName <> TLabeledEdit(Sender).Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirName := TLabeledEdit(Sender).Text; tvDirectoryHotlist.Selected.Text := TLabeledEdit(Sender).Text; end; end; except //Just in case the "Text" is empty to don't show error with Text[1] check. end; end; 2: //Hot dir path begin try //if (TLabeledEdit(Sender).Text <> '') and (THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher = hd_CHANGEPATH) then // TLabeledEdit(Sender).Text := IncludeTrailingPathDelimiter(TLabeledEdit(Sender).Text); //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath <> TLabeledEdit(Sender).Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath := TLabeledEdit(Sender).Text; THotDir(tvDirectoryHotlist.Selected.Data).HotDirExisting := DirExistUnknown; end; except //Just in case we have an empty list so "DirectoryHotlistTemp.HotDir[tvDirectoryHotlist.Selected.ImageIndex]" will not caused an error (since ItemIndex=-1 at this moment); end; end; 3: //Hot dir target begin try //if (TLabeledEdit(Sender).Text <> '') and (THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher =hd_CHANGEPATH) then // TLabeledEdit(Sender).Text := IncludeTrailingPathDelimiter(TLabeledEdit(Sender).Text); //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget <> TLabeledEdit(Sender).Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget := TLabeledEdit(Sender).Text; end; except //Just in case we have an empty list so "DirectoryHotlistTemp.HotDir[tvDirectoryHotlist.Selected.ImageIndex]" will not caused an error (since ItemIndex=-1 at this moment); end; end; end; end; end; { TfrmOptionsDirectoryHotlist.anyRelativeAbsolutePathClick } procedure TfrmOptionsDirectoryHotlist.anyRelativeAbsolutePathClick(Sender: TObject); begin if tvDirectoryHotlist.Selected<>nil then //Should not happen, but if it happens, will avoid an error. begin case TComponent(Sender).tag of 2: begin lbleditHotDirPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirPath, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); if THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath <> lbleditHotDirPath.Text then THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath := lbleditHotDirPath.Text; end; 3: begin lbleditHotDirTarget.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirTarget, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); if THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget <> lbleditHotDirTarget.Text then THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget := lbleditHotDirTarget.Text; end; end; end; end; { TfrmOptionsDirectoryHotlist.cbSortHotDirPathChange } procedure TfrmOptionsDirectoryHotlist.cbSortHotDirPathChange(Sender: TObject); begin if Assigned(tvDirectoryHotlist.Selected) then THotDir(tvDirectoryHotlist.Selected.Data).HotDirPathSort := cbSortHotDirPath.ItemIndex; end; { TfrmOptionsDirectoryHotlist.cbSortHotDirTargetChange } procedure TfrmOptionsDirectoryHotlist.cbSortHotDirTargetChange(Sender: TObject); begin if Assigned(tvDirectoryHotlist.Selected) then THotDir(tvDirectoryHotlist.Selected.Data).HotDirTargetSort := cbSortHotDirTarget.ItemIndex; end; { TfrmOptionsDirectoryHotlist.pnlButtonsResize } procedure TfrmOptionsDirectoryHotlist.pnlButtonsResize(Sender: TObject); var I: integer; begin for I := 0 to pnlButtons.ControlCount - 1 do begin pnlButtons.Controls[I].Width := pnlButtons.ClientWidth div 2 - 3; end; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragDrop } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragDrop(Sender, Source: TObject; X, Y: integer); var Index: longint; ANode: TTreeNode; DestinationNode: TTreeNode; begin DestinationNode := tvDirectoryHotlist.GetNodeAt(X, Y); if Assigned(DestinationNode) and (tvDirectoryHotlist.SelectionCount > 0) then begin tvDirectoryHotlist.BeginUpdate; try ANode := tvDirectoryHotlist.Selected; //If we move toward the end, we place the moved item *after* the destination. //If we move toward the beginning, we place the moved item *before* the destination. if tvDirectoryHotlist.Selections[pred(tvDirectoryHotlist.SelectionCount)].AbsoluteIndex > DestinationNode.AbsoluteIndex then begin for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode, naInsert); end; end else begin for Index := 0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode, naInsertBehind); end; end; tvDirectoryHotlist.Selected := ANode; finally tvDirectoryHotlist.EndUpdate; end; ClearCutAndPasteList; end; actPaste.Enabled := False; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragOver } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistEnter } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistEnter(Sender: TObject); begin tvDirectoryHotlist.SelectionColor := clHighlight; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistExit } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistExit(Sender: TObject); begin tvDirectoryHotlist.SelectionColor := clBtnShadow; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistSelectionChanged } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistSelectionChanged(Sender: TObject); var WorkingPointer: Pointer; begin if tvDirectoryHotlist.Selected <> nil then begin btnAdd.Enabled := True; btnInsert.Enabled := True; btnMiscellaneous.Enabled := True; WorkingPointer := tvDirectoryHotlist.Selected.Data; case THotDir(WorkingPointer).Dispatcher of hd_NULL: begin end; hd_CHANGEPATH: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleName; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.ReadOnly := False; lbleditHotDirPath.EditLabel.Caption := rsMsgHotDirJustPath; lbleditHotDirPath.Text := THotDir(WorkingPointer).HotDirPath; //DirectoryHotlistTemp.HotDir[IndexInHotlist].HotDirPath; lbleditHotDirPath.Hint := mbExpandFileName(lbleditHotDirPath.Text); cbSortHotDirPath.ItemIndex := THotDir(WorkingPointer).HotDirPathSort; lbleditHotDirPath.Visible := True; btnRelativePath.Tag := 2; lbleditHotDirTarget.Text := THotDir(WorkingPointer).HotDirTarget; lbleditHotDirTarget.Hint := mbExpandFileName(lbleditHotDirTarget.Text); cbSortHotDirTarget.ItemIndex := THotDir(WorkingPointer).HotDirTargetSort; lbleditHotDirTarget.Visible := True; end; hd_COMMAND: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleName; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.ReadOnly := False; lbleditHotDirPath.EditLabel.Caption := rsMsgHotDirSimpleCommand; lbleditHotDirPath.Text := THotDir(WorkingPointer).HotDirPath; lbleditHotDirPath.Hint := ''; lbleditHotDirPath.Visible := True; btnRelativePath.Tag := 4; lbleditHotDirTarget.Visible := False; end; hd_SEPARATOR: begin lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := rsMsgHotDirSimpleSeparator; lbleditHotDirName.ReadOnly := True; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; hd_STARTMENU: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleMenu; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.ReadOnly := False; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; hd_ENDMENU: begin lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := rsMsgHotDirSimpleEndOfMenu; lbleditHotDirName.ReadOnly := True; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; end; //case THotDir(WorkingPointer).Dispatcher of actDeleteSelectedItem.Enabled := not (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); actDeleteSubMenuKeepElem.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); actDeleteSubMenuAndElem.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); actAddCopyOfEntry.Enabled := ((THotDir(WorkingPointer).Dispatcher <> hd_STARTMENU) and (THotDir(WorkingPointer).Dispatcher <> hd_ENDMENU)); actInsertCopyOfEntry.Enabled := actAddCopyOfEntry.Enabled; miSortSingleSubMenu.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miSortSubMenuAndSubLevel.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); actDeleteSelectedItem.Enabled := (THotDir(WorkingPointer).Dispatcher <> hd_ENDMENU); end //if tvDirectoryHotlist.Selected<>nil then else begin btnAdd.Enabled := (tvDirectoryHotlist.Items.Count = 0); btnInsert.Enabled := btnAdd.Enabled; btnMiscellaneous.Enabled := btnAdd.Enabled; lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := ''; lbleditHotDirName.ReadOnly := True; lbleditHotDirName.Text := 'Nothing...'; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; btnRelativePath.Visible := lbleditHotDirPath.Visible; cbSortHotDirPath.Visible := lbleditHotDirPath.Visible and (THotDir(WorkingPointer).Dispatcher <> hd_COMMAND); btnRelativeTarget.Visible := lbleditHotDirTarget.Visible; cbSortHotDirTarget.Visible := lbleditHotDirTarget.Visible; if Assigned(TForm(Self.Parent.Parent.Parent).ActiveControl) then begin if TForm(Self.Parent.Parent.Parent).ActiveControl.Name = 'tvTreeView' then if lbleditHotDirName.CanFocus then TForm(Self.Parent.Parent.Parent).ActiveControl := lbleditHotDirName; end; end; { TfrmOptionsDirectoryHotlist.RefreshTreeView } procedure TfrmOptionsDirectoryHotlist.RefreshTreeView(NodeToSelect: TTreeNode); begin if NodeToSelect <> nil then begin tvDirectoryHotlist.ClearSelection(False); NodeToSelect.Selected := True; end else begin tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); //At least to hide path, target, etc. end; btnExport.Enabled := (tvDirectoryHotlist.Items.Count > 0); miSaveBackupHotlist.Enabled := (tvDirectoryHotlist.Items.Count > 0); end; { TfrmOptionsDirectoryHotlist.PopulatePopupMenuWithCommands } procedure TfrmOptionsDirectoryHotlist.PopulatePopupMenuWithCommands(pmMenuToPopulate: TPopupMenu); var FFormCommands: IFormCommands; LocalDummyComboBox: TComboBox; miMainTree: TMenuItem; IndexCommand: longint; procedure LocalPopulateUntil(ParamMenuItem: TMenuItem; LetterUpTo: char); var LocalMenuItem: TMenuItem; MaybeItemName: string; begin MaybeItemName := '0000'; while (IndexCommand < LocalDummyComboBox.Items.Count) and (MaybeItemName[4] <> LetterUpTo) do begin MaybeItemName := LocalDummyComboBox.Items.Strings[IndexCommand]; if MaybeItemName[4] <> LetterUpTo then begin LocalMenuItem := TMenuItem.Create(ParamMenuItem); LocalMenuItem.Caption := MaybeItemName; LocalMenuItem.OnClick := @miSimplyCopyCaption; ParamMenuItem.Add(LocalMenuItem); Inc(IndexCommand); end; end; end; begin LocalDummyComboBox := TComboBox.Create(Self); try LocalDummyComboBox.Clear; FFormCommands := frmMain as IFormCommands; FFormCommands.GetCommandsList(LocalDummyComboBox.Items); LocalDummyComboBox.Sorted := True; IndexCommand := 0; miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_A..cm_C'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'D'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_D..cm_L'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'M'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_M..cm_R'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'S'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_S..cm_Z'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'A'); finally LocalDummyComboBox.Free; end; end; { TfrmOptionsDirectoryHotlist.miShowWhereItWouldGo } procedure TfrmOptionsDirectoryHotlist.miShowWhereItWouldGo(Sender: TObject); var StringToShow: string; begin with Sender as TComponent do begin StringToShow := rsMsgHotDirDemoName + '"' + DirectoryHotlistTemp.HotDir[tag].HotDirName + '"'; case DirectoryHotlistTemp.HotDir[tag].Dispatcher of hd_CHANGEPATH: begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoPath; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirPath); if DirectoryHotlistTemp.HotDir[tag].HotDirTarget <> '' then begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoTarget; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirTarget); end; end; hd_COMMAND: begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoCommand; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirPath); end; end; msgOK(StringToShow); end; end; { TfrmOptionsDirectoryHotlist.miSimplyCopyCaption } procedure TfrmOptionsDirectoryHotlist.miSimplyCopyCaption(Sender: TObject); begin with Sender as TMenuItem do begin if lbleditHotDirPath.Text = '' then lbleditHotDirPath.Text := Caption else lbleditHotDirPath.Text := Caption + ' ' + lbleditHotDirPath.Text; end; end; { TfrmOptionsDirectoryHotlist.ClearCutAndPasteList } procedure TfrmOptionsDirectoryHotlist.ClearCutAndPasteList; begin CutAndPasteIndexList.Clear; actPaste.Enabled := True; end; { TfrmOptionsDirectoryHotlist.ActualAddDirectories } function TfrmOptionsDirectoryHotlist.ActualAddDirectories(ParamDispatcher: TKindOfHotDirEntry; sName, sPath, sTarget: string; InsertOrAdd: integer): TTreeNode; var LocalHotDir: THotDir; WorkingTreeNode: TTreeNode; const SelectedNoAttachedMode: array[1..3] of TNodeAttachMode = (naInsert, naInsertBehind, naAddChildFirst); begin ClearCutAndPasteList; LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := ParamDispatcher; LocalHotDir.HotDirName := sName; LocalHotDir.HotDirPath := IncludeTrailingPathDelimiter(GetHotDirFilenameToSave(hdpmSource, sPath)); if sTarget <> '' then LocalHotDir.HotDirTarget := IncludeTrailingPathDelimiter(GetHotDirFilenameToSave(hdpmTarget, sTarget)); DirectoryHotlistTemp.Add(LocalHotDir); WorkingTreeNode := tvDirectoryHotlist.Selected; if WorkingTreeNode <> nil then Result := tvDirectoryHotlist.Items.AddNode(nil, WorkingTreeNode, sName, LocalHotDir, SelectedNoAttachedMode[InsertOrAdd]) else Result := tvDirectoryHotlist.Items.AddNode(nil, nil, sName, LocalHotDir, naAddFirst); case ParamDispatcher of hd_STARTMENU: begin Result.ImageIndex := ICONINDEX_SUBMENU; Result.SelectedIndex := ICONINDEX_SUBMENU; Result.StateIndex := ICONINDEX_SUBMENU; end; hd_CHANGEPATH: begin Result.ImageIndex := ICONINDEX_NEWADDEDDIRECTORY; Result.SelectedIndex := ICONINDEX_NEWADDEDDIRECTORY; Result.StateIndex := ICONINDEX_NEWADDEDDIRECTORY; end; end; end; function CompareStringsFromTStringList(List: TStringList; Index1, Index2: integer): integer; begin Result := CompareStrings(List.Strings[Index1], List.Strings[Index2], gSortNatural, gSortSpecial, gSortCaseSensitivity); end; { TfrmOptionsDirectoryHotlist.TryToGetCloserHotDir } //This routine "tries" to find the best place to eventually add a new directory in the tree accoring to directory names and ones alreayd in the tree. //ALSO, it will set the flag "bShouldBeAfter" to indicate if it should be "BEFORE" or "AFTER" what is returned. //"PerfectMatchIndex" is when the directory is found *exactly* in the tree as is. In other words, already there. //"SecondAlternative" is when the directory is not there, but one close to it is function TfrmOptionsDirectoryHotlist.TryToGetCloserHotDir(sDirToFindAPlaceFor: string; var TypeOfAddition: integer): TTreeNode; var BestOne, I: integer; localDirToFindAPlaceFor: string; sRepresentantString, sUnderPart, sOverPart: string; MagickSortedList: TStringList; function GetNumberOfIdenticalStartChars(A: string): longint; var I: integer; begin Result := 0; I := 1; while (I < UTF8Length(A)) and (I < UTF8Length(localDirToFindAPlaceFor)) do begin if A[I] = localDirToFindAPlaceFor[I] then Inc(Result) else I := UTF8Length(A); Inc(I); end; end; function GetBestDir(DirA, DirB: string): integer; var lengthA, lengthB: integer; begin lengthA := GetNumberOfIdenticalStartChars(DirA); lengthB := GetNumberOfIdenticalStartChars(DirB); if (lengthA = 0) and (lengthB = 0) then begin Result := 0; end else begin if lengthA > lengthB then Result := -1 else Result := 1; end; end; begin Result := nil; TypeOfAddition := ACTION_ADDHOTDIR; localDirToFindAPlaceFor := UTF8LowerCase(IncludeTrailingPathDelimiter(sDirToFindAPlaceFor)); //1st, let's try to see if we have an entry with the same *exact* directory I := 0; while (Result = nil) and (I < tvDirectoryHotlist.Items.Count) do begin if THotDir(tvDirectoryHotlist.Items.Item[I].Data).Dispatcher = hd_CHANGEPATH then begin if localDirToFindAPlaceFor = UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[I].Data).HotDirPath))) then Result := tvDirectoryHotlist.Items.Item[I]; end; Inc(I); end; //2nd, if nothing found, here is the "lazy-but-probably-easiest-to-write-method" if Result = nil then begin MagickSortedList := TStringList.Create; try MagickSortedList.Clear; for I := 0 to pred(tvDirectoryHotlist.Items.Count) do begin if THotDir(tvDirectoryHotlist.Items.Item[I].Data).Dispatcher = hd_CHANGEPATH then begin sRepresentantString := UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[I].Data).HotDirPath))) + IntToStr(I); MagickSortedList.Add(sRepresentantString); end; end; MagickSortedList.Add(localDirToFindAPlaceFor); //We call a custom sort to make sure sort order will make the sequence "école - Eric - Érika" MagickSortedList.CustomSort(@CompareStringsFromTStringList); I := MagickSortedList.IndexOf(localDirToFindAPlaceFor); if I = 0 then sUnderPart := '' else sUnderPart := UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I - 1]))].Data).HotDirPath))); if I = pred(MagickSortedList.Count) then sOverPart := '' else sOverPart := UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I + 1]))].Data).HotDirPath))); BestOne := GetBestDir(sUnderPart, sOverPart); case BestOne of -1: Result := tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I - 1]))]; 1: Result := tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I + 1]))]; end; if Result <> nil then begin if CompareStrings(localDirToFindAPlaceFor, UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(tHotDir(Result.Data).HotDirPath))), gSortNatural, gSortSpecial, gSortCaseSensitivity) = -1 then TypeOfAddition := ACTION_INSERTHOTDIR; end; finally MagickSortedList.Free; end; end; end; { TfrmOptionsDirectoryHotlist.TryToGetExactHotDir } function TfrmOptionsDirectoryHotlist.TryToGetExactHotDir(const index: integer): TTreeNode; var SearchingtvIndex: integer; begin Result := nil; SearchingtvIndex := 0; while (SearchingtvIndex < pred(tvDirectoryHotlist.Items.Count)) and (Result = nil) do begin if tvDirectoryHotlist.Items[SearchingtvIndex].Data = DirectoryHotlistTemp.Items[Index] then Result := tvDirectoryHotlist.Items[SearchingtvIndex] else Inc(SearchingtvIndex); end; end; { TfrmOptionsDirectoryHotlist.RecursiveSetGroupNumbers } procedure TfrmOptionsDirectoryHotlist.RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); var MaybeChild: TTreeNode; begin repeat if DoRecursion then begin MaybeChild := ParamNode.GetFirstChild; if MaybeChild <> nil then RecursiveSetGroupNumbers(MaybeChild, GetNextGroupNumber, DoRecursion, StopAtFirstGroup); end; if THotDir(ParamNode.Data).Dispatcher <> hd_SEPARATOR then begin THotDir(ParamNode.Data).GroupNumber := ParamGroupNumber; end else begin ParamGroupNumber := GetNextGroupNumber; if StopAtFirstGroup then while ParamNode <> nil do ParamNode := ParamNode.GetNextSibling; //To exit the loop! end; if ParamNode <> nil then ParamNode := ParamNode.GetNextSibling; until ParamNode = nil; end; { TfrmOptionsDirectoryHotlist.RefreshExistingProperty } procedure TfrmOptionsDirectoryHotlist.RefreshExistingProperty(ScanMode: integer); var Index, LocalThreadCount: longint; ListOfAlreadyCheckDrive, ListOfNonExistingDrive: TStringList; FreezeTime: dword; procedure StartThreadToSeeIfThisDriveExists(const sDrive: string); begin TCheckDrivePresenceThread.Create(sDrive, ListOfNonExistingDrive, LocalThreadCount); end; //Since we do that for both "Path" and "Target", it was useful to place in a routine so we can call two times the same routine procedure ScanForThisDir(DirToScan: string); var localPath, localDrive: string; begin localPath := ExcludeTrailingPathDelimiter(mbExpandFileName(DirToScan)); localDrive := UpperCase(ExtractFileDrive(localPath)); if ListOfAlreadyCheckDrive.IndexOf(localDrive) = -1 then begin Inc(LocalThreadCount); StartThreadToSeeIfThisDriveExists(localDrive); ListOfAlreadyCheckDrive.Add(localDrive); end; end; procedure RecursivelySetIconFolderNotPresent(WorkingTreeNode: TTreeNode); begin if WorkingTreeNode.Parent <> nil then begin if WorkingTreeNode.Parent.ImageIndex <> ICONINDEX_SUBMENUWITHMISSING then begin THotDir(WorkingTreeNode.Parent.Data).HotDirExisting := DirNotExist; WorkingTreeNode.Parent.ImageIndex := ICONINDEX_SUBMENUWITHMISSING; WorkingTreeNode.Parent.SelectedIndex := ICONINDEX_SUBMENUWITHMISSING; WorkingTreeNode.Parent.StateIndex := ICONINDEX_SUBMENUWITHMISSING; RecursivelySetIconFolderNotPresent(WorkingTreeNode.Parent); end; end; end; //Since we do that for both "Path" and "Target", it was useful to place in a routine so we can call two times the same routine function CheckIfThisDirectoryExists(RequestedDirectoryToCheck: string): boolean; var localPath, localDrive: string; begin if RequestedDirectoryToCheck <> '' then begin Result := False; localPath := ExcludeTrailingPathDelimiter(mbExpandFileName(RequestedDirectoryToCheck)); localDrive := UpperCase(ExtractFileDrive(localPath)); lbleditHotDirName.Text := localPath; Application.ProcessMessages; if ListOfNonExistingDrive.IndexOf(localDrive) = -1 then begin Result := mbDirectoryExists(localPath); end; if not Result then begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirNotExist; tvDirectoryHotlist.Items.Item[Index].ImageIndex := ICONINDEX_DIRECTORYNOTPRESENTHERE; tvDirectoryHotlist.Items.Item[Index].SelectedIndex := ICONINDEX_DIRECTORYNOTPRESENTHERE; tvDirectoryHotlist.Items.Item[Index].StateIndex := ICONINDEX_DIRECTORYNOTPRESENTHERE; RecursivelySetIconFolderNotPresent(tvDirectoryHotlist.Items.Item[Index]); end; end else begin Result := True; end; end; begin SetNormalIconsInTreeView; try Screen.BeginWaitCursor; ListOfAlreadyCheckDrive := TStringList.Create; ListOfAlreadyCheckDrive.Sorted := False; ListOfAlreadyCheckDrive.Clear; ListOfNonExistingDrive := TStringList.Create; ListOfNonExistingDrive.Sorted := False; ListOfNonExistingDrive.Clear; try LocalThreadCount := 0; //First, let's build a list of the "\\ServerName" that exists and let's check them in MultiThread //We scan only once each drive and "\\ServerName" //"\\ServerName" have a long timeout so that's why we check them this way for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do begin case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of hd_CHANGEPATH: begin ScanForThisDir(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirPath); if ScanMode = 2 then ScanForThisDir(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirTarget); end; end; end; //Let's wait all the threads to complete //10 seconds timeout in case it never ends for whatever reason FreezeTime := GetTickCount; while (LocalThreadCount <> 0) and ((FreezeTime + 10000) > FreezeTime) do begin lbleditHotDirName.Text := IntToStr(LocalThreadCount); Application.ProcessMessages; if LocalThreadCount = 0 then Sleep(100); end; //Second, now let's scan if the director exists! for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do begin case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of hd_CHANGEPATH: begin if CheckIfThisDirectoryExists(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirPath) then begin case ScanMode of 1: begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirExist; end; 2: begin if CheckIfThisDirectoryExists(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirTarget) then begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirExist; end; end; end; //case ScanMode end; end; //hd_CHANGEPATH: end; //case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of end; finally ListOfAlreadyCheckDrive.Free; ListOfNonExistingDrive.Free; lbleditHotDirName.Enabled := True; end; finally Screen.EndWaitCursor; end; tvDirectoryHotlist.Refresh; end; { TfrmOptionsDirectoryHotlist.SetNormalIconsInTreeView } procedure TfrmOptionsDirectoryHotlist.SetNormalIconsInTreeView; var Index: integer; begin for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do begin if tvDirectoryHotlist.Items.Item[Index].GetFirstChild = nil then begin tvDirectoryHotlist.Items.Item[Index].ImageIndex := -1; tvDirectoryHotlist.Items.Item[Index].SelectedIndex := -1; tvDirectoryHotlist.Items.Item[Index].StateIndex := -1; end else begin tvDirectoryHotlist.Items.Item[Index].ImageIndex := ICONINDEX_SUBMENU; tvDirectoryHotlist.Items.Item[Index].SelectedIndex := ICONINDEX_SUBMENU; tvDirectoryHotlist.Items.Item[Index].StateIndex := ICONINDEX_SUBMENU; end; end; end; { TfrmOptionsDirectoryHotlist.MySortViaGroup } function TfrmOptionsDirectoryHotlist.MySortViaGroup(Node1, Node2: TTreeNode): integer; begin if (THotdir(Node1.Data).GroupNumber = THotDir(Node2.Data).GroupNumber) and (THotdir(Node1.Data).GroupNumber <> 0) then begin Result := CompareStrings(THotdir(Node1.Data).HotDirName, THotDir(Node2.Data).HotDirName, gSortNatural, gSortSpecial, gSortCaseSensitivity); end else begin if Node1.AbsoluteIndex < Node2.AbsoluteIndex then Result := -1 else Result := 1; end; end; { TfrmOptionsDirectoryHotlist.CopyTTreeViewToAnother } procedure TfrmOptionsDirectoryHotlist.CopyTTreeViewToAnother(tvSource, tvDestination: TTreeView); procedure RecursiveNodeCopy(SourceNode, DestNode: TTreeNode); var NewNode: TTreeNode; begin repeat NewNode := tvDestination.Items.AddChild(DestNode, SourceNode.Text); NewNode.Assign(SourceNode); if SourceNode.GetFirstChild <> nil then begin RecursiveNodeCopy(SourceNode.GetFirstChild, NewNode); end; SourceNode := SourceNode.GetNextSibling; until SourceNode = nil; end; begin if tvSource.Items.GetFirstNode <> nil then RecursiveNodeCopy(tvSource.Items.GetFirstNode, nil); end; { TfrmOptionsDirectoryHotlist.GetNextGroupNumber } function TfrmOptionsDirectoryHotlist.GetNextGroupNumber: integer; begin GlobalGroupNumber := GlobalGroupNumber + 1; Result := GlobalGroupNumber; end; procedure TfrmOptionsDirectoryHotlist.ScanHotDirForFilenameAndPath; var Index: integer; begin for Index := 0 to pred(DirectoryHotlistTemp.Count) do begin case THotDir(DirectoryHotlistTemp.HotDir[Index]).Dispatcher of hd_CHANGEPATH: begin DirectoryHotlistTemp.HotDir[Index].HotDirPath := GetHotDirFilenameToSave(hdpmSource ,DirectoryHotlistTemp.HotDir[Index].HotDirPath); if DirectoryHotlistTemp.HotDir[Index].HotDirTarget <> '' then DirectoryHotlistTemp.HotDir[Index].HotDirTarget := GetHotDirFilenameToSave(hdpmTarget, DirectoryHotlistTemp.HotDir[Index].HotDirTarget); end; end; end; tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); end; function TfrmOptionsDirectoryHotlist.GetHotDirFilenameToSave(AHotDirPathModifierElement: tHotDirPathModifierElement; sParamFilename: string): string; var sMaybeBasePath, SubWorkingPath, MaybeSubstitionPossible: string; begin sParamFilename := mbExpandFileName(sParamFilename); Result := sParamFilename; if AHotDirPathModifierElement in gHotDirPathModifierElements then begin if gHotDirFilenameStyle = pfsRelativeToDC then sMaybeBasePath := EnvVarCommanderPath else sMaybeBasePath := gHotDirPathToBeRelativeTo; case gHotDirFilenameStyle of pfsAbsolutePath: ; pfsRelativeToDC, pfsRelativeToFollowingPath: begin SubWorkingPath := IncludeTrailingPathDelimiter(mbExpandFileName(sMaybeBasePath)); MaybeSubstitionPossible := ExtractRelativePath(IncludeTrailingPathDelimiter(SubWorkingPath), sParamFilename); if MaybeSubstitionPossible <> sParamFilename then Result := IncludeTrailingPathDelimiter(sMaybeBasePath) + MaybeSubstitionPossible; end; end; end; end; end. doublecmd-1.1.30/src/frames/foptionsdirectoryhotlist.lrj0000644000175000001440000004531715104114162022551 0ustar alexxusers{"version":1,"strings":[ {"hash":149144793,"name":"tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption","sourcebytes":[68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116,32,40,114,101,111,114,100,101,114,32,98,121,32,100,114,97,103,32,38,38,32,100,114,111,112,41],"value":"Directory Hotlist (reorder by drag && drop)"}, {"hash":164356446,"name":"tfrmoptionsdirectoryhotlist.btninsert.caption","sourcebytes":[38,73,110,115,101,114,116,46,46,46],"value":"&Insert..."}, {"hash":47114462,"name":"tfrmoptionsdirectoryhotlist.btndelete.caption","sourcebytes":[68,101,38,108,101,116,101,46,46,46],"value":"De&lete..."}, {"hash":124595966,"name":"tfrmoptionsdirectoryhotlist.btnexport.caption","sourcebytes":[69,38,120,112,111,114,116,46,46,46],"value":"E&xport..."}, {"hash":31225214,"name":"tfrmoptionsdirectoryhotlist.btnimport.caption","sourcebytes":[73,109,112,111,38,114,116,46,46,46],"value":"Impo&rt..."}, {"hash":220772446,"name":"tfrmoptionsdirectoryhotlist.btnbackup.caption","sourcebytes":[66,97,99,38,107,117,112,46,46,46],"value":"Bac&kup..."}, {"hash":63326686,"name":"tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption","sourcebytes":[38,77,105,115,99,101,108,108,97,110,101,111,117,115,46,46,46],"value":"&Miscellaneous..."}, {"hash":63598926,"name":"tfrmoptionsdirectoryhotlist.btnadd.caption","sourcebytes":[65,38,100,100,46,46,46],"value":"A&dd..."}, {"hash":174683070,"name":"tfrmoptionsdirectoryhotlist.btnsort.caption","sourcebytes":[38,83,111,114,116,46,46,46],"value":"&Sort..."}, {"hash":163294828,"name":"tfrmoptionsdirectoryhotlist.rgwheretoadd.caption","sourcebytes":[65,100,100,105,116,105,111,110,32,102,114,111,109,32,109,97,105,110,32,112,97,110,101,108],"value":"Addition from main panel"}, {"hash":13910547,"name":"tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption","sourcebytes":[79,116,104,101,114,32,111,112,116,105,111,110,115],"value":"Other options"}, {"hash":213892596,"name":"tfrmoptionsdirectoryhotlist.cbaddtarget.caption","sourcebytes":[38,87,104,101,110,32,97,100,100,105,110,103,32,100,105,114,101,99,116,111,114,121,44,32,97,100,100,32,97,108,115,111,32,116,97,114,103,101,116],"value":"&When adding directory, add also target"}, {"hash":154562805,"name":"tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption","sourcebytes":[65,108,119,97,38,121,115,32,101,120,112,97,110,100,32,116,114,101,101],"value":"Alwa&ys expand tree"}, {"hash":112571981,"name":"tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption","sourcebytes":[73,110,32,112,111,112,38,117,112,44,32,115,104,111,119,32,91,112,97,116,104,32,97,108,115,111,93],"value":"In pop&up, show [path also]"}, {"hash":25651843,"name":"tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption","sourcebytes":[83,104,111,119,32,111,110,108,121,32,38,118,97,108,105,100,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,115],"value":"Show only &valid environment variables"}, {"hash":5538698,"name":"tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption","sourcebytes":[78,97,109,101,58],"value":"Name:"}, {"hash":5671610,"name":"tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption","sourcebytes":[80,97,116,104,58],"value":"Path:"}, {"hash":15252584,"name":"tfrmoptionsdirectoryhotlist.btnrelativepath.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":58603722,"name":"tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text","sourcebytes":[78,97,109,101,44,32,97,45,122],"value":"Name, a-z"}, {"hash":176742090,"name":"tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption","sourcebytes":[38,84,97,114,103,101,116,58],"value":"&Target:"}, {"hash":142363940,"name":"tfrmoptionsdirectoryhotlist.btnrelativetarget.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,116,97,114,103,101,116],"value":"Some functions to select appropriate target"}, {"hash":58603722,"name":"tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text","sourcebytes":[78,97,109,101,44,32,97,45,122],"value":"Name, a-z"}, {"hash":7172799,"name":"tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption","sourcebytes":[73,110,115,101,114,116,32,100,105,114,101,99,116,111,114,121,32,73,32,119,105,108,108,32,98,114,111,38,119,115,101,32,116,111],"value":"Insert directory I will bro&wse to"}, {"hash":226835557,"name":"tfrmoptionsdirectoryhotlist.actinserttypeddir.caption","sourcebytes":[73,110,115,101,114,116,32,100,105,114,101,99,116,111,114,121,32,73,32,119,105,108,108,32,116,121,112,101],"value":"Insert directory I will type"}, {"hash":218973717,"name":"tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption","sourcebytes":[73,110,115,101,114,116,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,38,97,99,116,105,118,101,32,102,114,97,109,101],"value":"Insert directory of the &active frame"}, {"hash":146814867,"name":"tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption","sourcebytes":[73,110,115,101,114,116,32,38,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,97,99,116,105,118,101,32,38,38,32,105,110,97,99,116,105,118,101,32,102,114,97,109,101,115],"value":"Insert &directories of the active && inactive frames"}, {"hash":37368773,"name":"tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption","sourcebytes":[73,110,115,101,114,116,32,99,117,114,114,101,110,116,32,38,115,101,108,101,99,116,101,100,32,111,114,32,97,99,116,105,118,101,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,97,99,116,105,118,101,32,102,114,97,109,101],"value":"Insert current &selected or active directories of active frame"}, {"hash":44342361,"name":"tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption","sourcebytes":[73,110,115,101,114,116,32,97,32,99,111,112,121,32,111,102,32,116,104,101,32,115,101,108,101,99,116,101,100,32,101,110,116,114,121],"value":"Insert a copy of the selected entry"}, {"hash":99512370,"name":"tfrmoptionsdirectoryhotlist.actinsertseparator.caption","sourcebytes":[73,110,115,101,114,116,32,97,32,115,101,112,97,114,97,116,111,114],"value":"Insert a separator"}, {"hash":42995109,"name":"tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption","sourcebytes":[73,110,115,101,114,116,32,115,117,98,32,109,101,110,117],"value":"Insert sub menu"}, {"hash":190336655,"name":"tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption","sourcebytes":[65,100,100,32,100,105,114,101,99,116,111,114,121,32,73,32,119,105,108,108,32,98,114,111,38,119,115,101,32,116,111],"value":"Add directory I will bro&wse to"}, {"hash":112205909,"name":"tfrmoptionsdirectoryhotlist.actaddtypeddir.caption","sourcebytes":[65,100,100,32,100,105,114,101,99,116,111,114,121,32,73,32,119,105,108,108,32,116,121,112,101],"value":"Add directory I will type"}, {"hash":246454597,"name":"tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption","sourcebytes":[65,100,100,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,38,97,99,116,105,118,101,32,102,114,97,109,101],"value":"Add directory of the &active frame"}, {"hash":66664483,"name":"tfrmoptionsdirectoryhotlist.actaddbothframedir.caption","sourcebytes":[65,100,100,32,38,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,116,104,101,32,97,99,116,105,118,101,32,38,38,32,105,110,97,99,116,105,118,101,32,102,114,97,109,101,115],"value":"Add &directories of the active && inactive frames"}, {"hash":132163269,"name":"tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption","sourcebytes":[65,100,100,32,99,117,114,114,101,110,116,32,38,115,101,108,101,99,116,101,100,32,111,114,32,97,99,116,105,118,101,32,100,105,114,101,99,116,111,114,105,101,115,32,111,102,32,97,99,116,105,118,101,32,102,114,97,109,101],"value":"Add current &selected or active directories of active frame"}, {"hash":133489097,"name":"tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption","sourcebytes":[65,100,100,32,97,32,99,111,112,121,32,111,102,32,116,104,101,32,115,101,108,101,99,116,101,100,32,101,110,116,114,121],"value":"Add a copy of the selected entry"}, {"hash":15447298,"name":"tfrmoptionsdirectoryhotlist.actaddseparator.caption","sourcebytes":[65,100,100,32,97,32,115,101,112,97,114,97,116,111,114],"value":"Add a separator"}, {"hash":18942341,"name":"tfrmoptionsdirectoryhotlist.actaddsubmenu.caption","sourcebytes":[65,100,100,32,97,32,115,117,98,32,109,101,110,117],"value":"Add a sub menu"}, {"hash":248058829,"name":"tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption","sourcebytes":[68,101,108,101,116,101,32,115,101,108,101,99,116,101,100,32,105,116,101,109],"value":"Delete selected item"}, {"hash":48325955,"name":"tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption","sourcebytes":[68,101,108,101,116,101,32,106,117,115,116,32,115,117,98,45,109,101,110,117,32,98,117,116,32,107,101,101,112,32,101,108,101,109,101,110,116,115],"value":"Delete just sub-menu but keep elements"}, {"hash":29187699,"name":"tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption","sourcebytes":[68,101,108,101,116,101,32,115,117,98,45,109,101,110,117,32,97,110,100,32,97,108,108,32,105,116,115,32,101,108,101,109,101,110,116,115],"value":"Delete sub-menu and all its elements"}, {"hash":171753505,"name":"tfrmoptionsdirectoryhotlist.actdeleteall.caption","sourcebytes":[68,101,108,101,116,101,32,97,108,108,33],"value":"Delete all!"}, {"hash":256685939,"name":"tfrmoptionsdirectoryhotlist.actmovetoprevious.caption","sourcebytes":[77,111,118,101,32,116,111,32,112,114,101,118,105,111,117,115],"value":"Move to previous"}, {"hash":5344116,"name":"tfrmoptionsdirectoryhotlist.actmovetonext.caption","sourcebytes":[77,111,118,101,32,116,111,32,110,101,120,116],"value":"Move to next"}, {"hash":255018692,"name":"tfrmoptionsdirectoryhotlist.actpaste.caption","sourcebytes":[80,97,115,116,101,32,119,104,97,116,32,119,97,115,32,99,117,116],"value":"Paste what was cut"}, {"hash":249109187,"name":"tfrmoptionsdirectoryhotlist.actcut.caption","sourcebytes":[67,117,116,32,115,101,108,101,99,116,105,111,110,32,111,102,32,101,110,116,114,105,101,115],"value":"Cut selection of entries"}, {"hash":22744456,"name":"tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption","sourcebytes":[83,101,97,114,99,104,32,38,38,32,114,101,112,108,97,99,101,32,105,110,32,38,112,97,116,104],"value":"Search && replace in &path"}, {"hash":165393000,"name":"tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption","sourcebytes":[83,101,97,114,99,104,32,38,38,32,114,101,112,108,97,99,101,32,105,110,32,38,116,97,114,103,101,116,32,112,97,116,104],"value":"Search && replace in &target path"}, {"hash":234270420,"name":"tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption","sourcebytes":[83,101,97,114,99,104,32,38,38,32,114,101,112,108,97,99,101,32,105,110,32,98,111,116,104,32,112,97,116,104,32,97,110,100,32,116,97,114,103,101,116],"value":"Search && replace in both path and target"}, {"hash":48930007,"name":"tfrmoptionsdirectoryhotlist.actfocustreewindow.caption","sourcebytes":[70,111,99,117,115,32,116,114,101,101,32,119,105,110,100,111,119],"value":"Focus tree window"}, {"hash":24220749,"name":"tfrmoptionsdirectoryhotlist.actgotofirstitem.caption","sourcebytes":[71,111,116,111,32,102,105,114,115,116,32,105,116,101,109],"value":"Goto first item"}, {"hash":97416685,"name":"tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption","sourcebytes":[71,111,32,116,111,32,112,114,101,118,105,111,117,115,32,105,116,101,109],"value":"Go to previous item"}, {"hash":148385901,"name":"tfrmoptionsdirectoryhotlist.actgotonextitem.caption","sourcebytes":[71,111,32,116,111,32,110,101,120,116,32,105,116,101,109],"value":"Go to next item"}, {"hash":215514333,"name":"tfrmoptionsdirectoryhotlist.actgotolastitem.caption","sourcebytes":[71,111,116,111,32,108,97,115,116,32,105,116,101,109],"value":"Goto last item"}, {"hash":69991485,"name":"tfrmoptionsdirectoryhotlist.actexpanditem.caption","sourcebytes":[69,120,112,97,110,100,32,105,116,101,109],"value":"Expand item"}, {"hash":240129107,"name":"tfrmoptionsdirectoryhotlist.actopenallbranches.caption","sourcebytes":[79,112,101,110,32,97,108,108,32,98,114,97,110,99,104,101,115],"value":"Open all branches"}, {"hash":51782285,"name":"tfrmoptionsdirectoryhotlist.actcollapseitem.caption","sourcebytes":[67,111,108,108,97,112,115,101,32,105,116,101,109],"value":"Collapse item"}, {"hash":53565100,"name":"tfrmoptionsdirectoryhotlist.actcollapseall.caption","sourcebytes":[67,111,108,108,97,112,115,101,32,97,108,108],"value":"Collapse all"}, {"hash":131257624,"name":"tfrmoptionsdirectoryhotlist.acttweakpath.caption","sourcebytes":[84,119,101,97,107,32,112,97,116,104],"value":"Tweak path"}, {"hash":21379848,"name":"tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption","sourcebytes":[84,119,101,97,107,32,116,97,114,103,101,116,32,112,97,116,104],"value":"Tweak target path"}, {"hash":22505513,"name":"tfrmoptionsdirectoryhotlist.misortsinglegroup.caption","sourcebytes":[46,46,46,115,105,110,103,108,101,32,38,103,114,111,117,112,32,111,102,32,105,116,101,109,40,115,41,32,111,110,108,121],"value":"...single &group of item(s) only"}, {"hash":90604313,"name":"tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption","sourcebytes":[46,46,46,99,117,114,114,101,110,116,32,108,101,38,118,101,108,32,111,102,32,105,116,101,109,40,115,41,32,115,101,108,101,99,116,101,100,32,111,110,108,121],"value":"...current le&vel of item(s) selected only"}, {"hash":265984124,"name":"tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption","sourcebytes":[46,46,46,38,99,111,110,116,101,110,116,32,111,102,32,115,117,98,109,101,110,117,40,115,41,32,115,101,108,101,99,116,101,100,44,32,110,111,32,115,117,98,108,101,118,101,108],"value":"...&content of submenu(s) selected, no sublevel"}, {"hash":88578467,"name":"tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption","sourcebytes":[46,46,46,99,111,110,116,101,110,116,32,111,102,32,115,117,98,109,101,110,117,40,115,41,32,115,101,108,101,99,116,101,100,32,97,110,100,32,38,97,108,108,32,115,117,98,108,101,118,101,108,115],"value":"...content of submenu(s) selected and &all sublevels"}, {"hash":143642737,"name":"tfrmoptionsdirectoryhotlist.misorteverything.caption","sourcebytes":[46,46,46,101,118,101,114,121,116,104,105,110,103,44,32,102,114,111,109,32,65,32,116,111,32,38,90,33],"value":"...everything, from A to &Z!"}, {"hash":179628341,"name":"tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption","sourcebytes":[84,101,115,116,32,114,101,115,117,108,116,105,110,38,103,32,109,101,110,117],"value":"Test resultin&g menu"}, {"hash":255790590,"name":"tfrmoptionsdirectoryhotlist.minavigate.caption","sourcebytes":[38,78,97,118,105,103,97,116,101,46,46,46],"value":"&Navigate..."}, {"hash":214635198,"name":"tfrmoptionsdirectoryhotlist.misearchandreplace.caption","sourcebytes":[83,101,97,114,99,104,32,97,110,100,32,38,114,101,112,108,97,99,101,46,46,46],"value":"Search and &replace..."}, {"hash":225883096,"name":"tfrmoptionsdirectoryhotlist.mitweakpath.caption","sourcebytes":[84,119,101,97,107,32,38,112,97,116,104],"value":"Tweak &path"}, {"hash":184571816,"name":"tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption","sourcebytes":[84,119,101,97,107,32,38,116,97,114,103,101,116,32,112,97,116,104],"value":"Tweak &target path"}, {"hash":144284980,"name":"tfrmoptionsdirectoryhotlist.midetectifpathexist.caption","sourcebytes":[83,99,97,110,32,97,108,108,32,38,104,111,116,100,105,114,39,115,32,112,97,116,104,32,116,111,32,118,97,108,105,100,97,116,101,32,116,104,101,32,111,110,101,115,32,116,104,97,116,32,97,99,116,117,97,108,108,121,32,101,120,105,115,116],"value":"Scan all &hotdir's path to validate the ones that actually exist"}, {"hash":178514500,"name":"tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption","sourcebytes":[38,83,99,97,110,32,97,108,108,32,104,111,116,100,105,114,39,115,32,112,97,116,104,32,38,38,32,116,97,114,103,101,116,32,116,111,32,118,97,108,105,100,97,116,101,32,116,104,101,32,111,110,101,115,32,116,104,97,116,32,97,99,116,117,97,108,108,121,32,101,120,105,115,116],"value":"&Scan all hotdir's path && target to validate the ones that actually exist"}, {"hash":190135113,"name":"tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption","sourcebytes":[116,111,32,97,32,68,105,114,101,99,116,111,114,121,32,38,72,111,116,108,105,115,116,32,102,105,108,101,32,40,46,104,111,116,108,105,115,116,41],"value":"to a Directory &Hotlist file (.hotlist)"}, {"hash":56254025,"name":"tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,38,107,101,101,112,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (&keep existing)"}, {"hash":185653097,"name":"tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption","sourcebytes":[116,111,32,97,32,34,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67,32,40,38,101,114,97,115,101,32,101,120,105,115,116,105,110,103,41],"value":"to a \"wincmd.ini\" of TC (&erase existing)"}, {"hash":156397055,"name":"tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption","sourcebytes":[71,111,32,116,111,32,38,99,111,110,102,105,103,117,114,101,32,84,67,32,114,101,108,97,116,101,100,32,105,110,102,111],"value":"Go to &configure TC related info"}, {"hash":188656233,"name":"tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption","sourcebytes":[102,114,111,109,32,97,32,68,105,114,101,99,116,111,114,121,32,38,72,111,116,108,105,115,116,32,102,105,108,101,32,40,46,104,111,116,108,105,115,116,41],"value":"from a Directory &Hotlist file (.hotlist)"}, {"hash":86366963,"name":"tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption","sourcebytes":[102,114,111,109,32,34,38,119,105,110,99,109,100,46,105,110,105,34,32,111,102,32,84,67],"value":"from \"&wincmd.ini\" of TC"}, {"hash":156397055,"name":"tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption","sourcebytes":[71,111,32,116,111,32,38,99,111,110,102,105,103,117,114,101,32,84,67,32,114,101,108,97,116,101,100,32,105,110,102,111],"value":"Go to &configure TC related info"}, {"hash":241888772,"name":"tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption","sourcebytes":[38,83,97,118,101,32,97,32,98,97,99,107,117,112,32,111,102,32,99,117,114,114,101,110,116,32,68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116],"value":"&Save a backup of current Directory Hotlist"}, {"hash":216881220,"name":"tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption","sourcebytes":[38,82,101,115,116,111,114,101,32,97,32,98,97,99,107,117,112,32,111,102,32,68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116],"value":"&Restore a backup of Directory Hotlist"}, {"hash":170146053,"name":"tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption","sourcebytes":[72,111,116,68,105,114,84,101,115,116,77,101,110,117],"value":"HotDirTestMenu"} ]} doublecmd-1.1.30/src/frames/foptionsdirectoryhotlist.lfm0000644000175000001440000011234215104114162022531 0ustar alexxusersinherited frmOptionsDirectoryHotlist: TfrmOptionsDirectoryHotlist Height = 658 Width = 730 ClientHeight = 658 ClientWidth = 730 HelpKeyword = '/directoryhotlist.html' Constraints.MinHeight = 520 Constraints.MinWidth = 600 ParentShowHint = False ShowHint = True DesignLeft = 185 DesignTop = 243 object gbDirectoryHotlist: TGroupBox[0] Left = 6 Height = 646 Top = 6 Width = 718 Align = alClient BorderSpacing.Around = 6 Caption = 'Directory Hotlist (reorder by drag && drop)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 626 ClientWidth = 714 Constraints.MinHeight = 460 Constraints.MinWidth = 548 TabOrder = 0 object pnlClient: TPanel AnchorSideLeft.Control = gbDirectoryHotlist AnchorSideTop.Control = gbDirectoryHotlist AnchorSideRight.Control = gbDirectoryHotlist AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottom Left = 6 Height = 524 Top = 6 Width = 702 Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 524 ClientWidth = 702 TabOrder = 0 object tvDirectoryHotlist: TTreeView AnchorSideLeft.Control = pnlClient AnchorSideTop.Control = pnlClient AnchorSideRight.Control = gbHotlistOtherOptions AnchorSideBottom.Control = pnlClient AnchorSideBottom.Side = asrBottom Left = 0 Height = 524 Top = 0 Width = 382 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 BackgroundColor = clForm DragMode = dmAutomatic HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentColor = True ReadOnly = True ScrollBars = ssAutoBoth SelectionColor = clBtnShadow TabOrder = 0 ToolTips = False OnDragDrop = tvDirectoryHotlistDragDrop OnDragOver = tvDirectoryHotlistDragOver OnEnter = tvDirectoryHotlistEnter OnExit = tvDirectoryHotlistExit OnSelectionChanged = tvDirectoryHotlistSelectionChanged Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot] end object pnlButtons: TPanel AnchorSideLeft.Control = gbHotlistOtherOptions AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 388 Height = 161 Top = 0 Width = 314 Anchors = [akTop, akLeft, akRight] BevelOuter = bvNone ClientHeight = 161 ClientWidth = 314 TabOrder = 1 OnResize = pnlButtonsResize object btnInsert: TBitBtn Tag = 1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = btnExport Left = 8 Height = 25 Top = 0 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&Insert...' OnClick = btnActionClick TabOrder = 0 end object btnDelete: TBitBtn Tag = 3 AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnBackup Left = 8 Height = 25 Top = 62 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'De&lete...' OnClick = btnActionClick TabOrder = 2 end object btnExport: TBitBtn Tag = 4 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 0 Width = 150 Anchors = [akTop, akRight] Caption = 'E&xport...' OnClick = btnActionClick TabOrder = 5 end object btnImport: TBitBtn Tag = 5 AnchorSideTop.Control = btnExport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 31 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 Caption = 'Impo&rt...' OnClick = btnActionClick TabOrder = 6 end object btnBackup: TBitBtn Tag = 6 AnchorSideTop.Control = btnImport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 62 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 Caption = 'Bac&kup...' OnClick = btnActionClick TabOrder = 7 end object btnMiscellaneous: TBitBtn Tag = 7 AnchorSideTop.Control = btnSort AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnBackup Left = 8 Height = 25 Top = 124 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = '&Miscellaneous...' OnClick = btnActionClick TabOrder = 4 end object btnAdd: TBitBtn Tag = 2 AnchorSideTop.Control = btnInsert AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnImport Left = 8 Height = 25 Top = 31 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'A&dd...' OnClick = btnActionClick TabOrder = 1 end object btnSort: TBitBtn Tag = 8 AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnBackup Left = 8 Height = 25 Top = 93 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = '&Sort...' OnClick = btnActionClick TabOrder = 3 end end object rgWhereToAdd: TRadioGroup AnchorSideLeft.Control = gbHotlistOtherOptions AnchorSideTop.Control = pnlButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 388 Height = 89 Top = 164 Width = 314 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 3 Caption = 'Addition from main panel' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 69 ClientWidth = 310 Items.Strings = ( 'Add at beginning' 'Add at the end' 'Smart add' ) TabOrder = 2 end object gbHotlistOtherOptions: TGroupBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rgWhereToAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 388 Height = 114 Top = 253 Width = 314 Anchors = [akTop, akRight] AutoSize = True Caption = 'Other options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 94 ClientWidth = 310 Constraints.MinWidth = 314 TabOrder = 3 object cbAddTarget: TCheckBox Left = 6 Height = 19 Top = 6 Width = 225 Caption = '&When adding directory, add also target' TabOrder = 0 end object cbFullExpandTree: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbAddTarget AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 27 Width = 121 BorderSpacing.Top = 2 Caption = 'Alwa&ys expand tree' OnChange = cbFullExpandTreeChange TabOrder = 1 end object cbShowPathInPopup: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbFullExpandTree AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 48 Width = 161 BorderSpacing.Top = 2 Caption = 'In pop&up, show [path also]' TabOrder = 2 end object cbShowOnlyValidEnv: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbShowPathInPopup AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 69 Width = 223 BorderSpacing.Top = 2 Caption = 'Show only &valid environment variables' TabOrder = 3 end end end object pnlBottom: TPanel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbDirectoryHotlist AnchorSideBottom.Side = asrBottom Left = 6 Height = 90 Top = 530 Width = 702 Anchors = [akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 90 ClientWidth = 702 TabOrder = 1 object lbleditHotDirName: TLabeledEdit Tag = 1 AnchorSideTop.Control = pnlBottom Left = 104 Height = 23 Top = 9 Width = 598 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 9 BorderSpacing.Bottom = 6 EditLabel.AnchorSideTop.Control = lbleditHotDirName EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirName EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 66 EditLabel.Height = 15 EditLabel.Top = 13 EditLabel.Width = 35 EditLabel.Caption = 'Name:' EditLabel.ParentColor = False EditLabel.ParentFont = False LabelPosition = lpLeft ParentFont = False TabOrder = 0 OnChange = lbleditHotDirNameChange end object lbleditHotDirPath: TLabeledEdit Tag = 2 AnchorSideTop.Control = cbSortHotDirPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativePath Left = 104 Height = 23 Top = 38 Width = 449 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 2 EditLabel.Tag = 2 EditLabel.AnchorSideTop.Control = lbleditHotDirPath EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirPath EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 74 EditLabel.Height = 15 EditLabel.Top = 42 EditLabel.Width = 27 EditLabel.Caption = 'Path:' EditLabel.ParentColor = False EditLabel.ParentFont = False EditLabel.OnClick = anyRelativeAbsolutePathClick LabelPosition = lpLeft ParentFont = False TabOrder = 1 OnChange = lbleditHotDirNameChange end object btnRelativePath: TSpeedButton Tag = 2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirPath AnchorSideRight.Control = cbSortHotDirPath AnchorSideBottom.Control = lbleditHotDirPath AnchorSideBottom.Side = asrBottom Left = 555 Height = 23 Hint = 'Some functions to select appropriate path' Top = 38 Width = 23 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 2 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = anyRelativeAbsolutePathClick ParentFont = False end object cbSortHotDirPath: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirName AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 580 Height = 23 Top = 38 Width = 122 Anchors = [akTop, akRight] BorderSpacing.Bottom = 6 DropDownCount = 10 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'none' 'Name, a-z' 'Name, z-a' 'Ext, a-z' 'Ext, z-a' 'Size 9-0' 'Size 0-9' 'Date 9-0' 'Date 0-9' ) OnChange = cbSortHotDirPathChange ParentFont = False Style = csDropDownList TabOrder = 3 Text = 'Name, a-z' end object lbleditHotDirTarget: TLabeledEdit Tag = 3 AnchorSideTop.Control = cbSortHotDirTarget AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativeTarget Left = 104 Height = 23 Top = 67 Width = 449 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 2 EditLabel.Tag = 3 EditLabel.AnchorSideTop.Control = lbleditHotDirTarget EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirTarget EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 65 EditLabel.Height = 15 EditLabel.Top = 71 EditLabel.Width = 36 EditLabel.Caption = '&Target:' EditLabel.ParentColor = False EditLabel.ParentFont = False EditLabel.OnClick = anyRelativeAbsolutePathClick LabelPosition = lpLeft ParentFont = False TabOrder = 2 OnChange = lbleditHotDirNameChange end object btnRelativeTarget: TSpeedButton Tag = 3 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirTarget AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbSortHotDirTarget AnchorSideBottom.Side = asrBottom Left = 555 Height = 23 Hint = 'Some functions to select appropriate target' Top = 67 Width = 23 Anchors = [akTop, akRight] BorderSpacing.Right = 2 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = anyRelativeAbsolutePathClick ParentFont = False end object cbSortHotDirTarget: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSortHotDirPath AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 580 Height = 23 Top = 67 Width = 122 Anchors = [akTop, akRight] DropDownCount = 10 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'none' 'Name, a-z' 'Name, z-a' 'Ext, a-z' 'Ext, z-a' 'Size 9-0' 'Size 0-9' 'Date 9-0' 'Date 0-9' ) OnChange = cbSortHotDirTargetChange ParentFont = False Style = csDropDownList TabOrder = 4 Text = 'Name, a-z' end end end object actList: TActionList[1] left = 256 top = 336 object actInsertBrowsedDir: TAction Tag = 1 Category = 'Edition' Caption = 'Insert directory I will bro&wse to' OnExecute = actInsertOrAddSomethingExecute end object actInsertTypedDir: TAction Tag = 2 Category = 'Edition' Caption = 'Insert directory I will type' OnExecute = actInsertOrAddSomethingExecute ShortCut = 120 end object actInsertActiveFrameDir: TAction Tag = 3 Category = 'Edition' Caption = 'Insert directory of the &active frame' OnExecute = actInsertOrAddSomethingExecute end object actInsertBothFrameDir: TAction Tag = 4 Category = 'Edition' Caption = 'Insert &directories of the active && inactive frames' OnExecute = actInsertOrAddSomethingExecute end object actInsertSelectionsFromFrame: TAction Tag = 9 Category = 'Edition' Caption = 'Insert current &selected or active directories of active frame' OnExecute = actInsertOrAddSomethingExecute end object actInsertCopyOfEntry: TAction Tag = 7 Category = 'Edition' Caption = 'Insert a copy of the selected entry' OnExecute = actInsertOrAddSomethingExecute ShortCut = 116 end object actInsertSeparator: TAction Tag = 5 Category = 'Edition' Caption = 'Insert a separator' OnExecute = actInsertOrAddSomethingExecute ShortCut = 121 end object actInsertSubMenu: TAction Tag = 6 Category = 'Edition' Caption = 'Insert sub menu' OnExecute = actInsertOrAddSomethingExecute ShortCut = 118 end object actAddBrowsedDir: TAction Tag = 17 Category = 'Edition' Caption = 'Add directory I will bro&wse to' OnExecute = actInsertOrAddSomethingExecute end object actAddTypedDir: TAction Tag = 18 Category = 'Edition' Caption = 'Add directory I will type' OnExecute = actInsertOrAddSomethingExecute ShortCut = 16504 end object actAddActiveFrameDir: TAction Tag = 19 Category = 'Edition' Caption = 'Add directory of the &active frame' OnExecute = actInsertOrAddSomethingExecute end object actAddBothFrameDir: TAction Tag = 20 Category = 'Edition' Caption = 'Add &directories of the active && inactive frames' OnExecute = actInsertOrAddSomethingExecute end object actAddSelectionsFromFrame: TAction Tag = 25 Category = 'Edition' Caption = 'Add current &selected or active directories of active frame' OnExecute = actInsertOrAddSomethingExecute end object actAddCopyOfEntry: TAction Tag = 23 Category = 'Edition' Caption = 'Add a copy of the selected entry' OnExecute = actInsertOrAddSomethingExecute ShortCut = 16500 end object actAddSeparator: TAction Tag = 21 Category = 'Edition' Caption = 'Add a separator' OnExecute = actInsertOrAddSomethingExecute ShortCut = 16505 end object actAddSubMenu: TAction Tag = 22 Category = 'Edition' Caption = 'Add a sub menu' OnExecute = actInsertOrAddSomethingExecute ShortCut = 16502 end object actDeleteSelectedItem: TAction Tag = 1 Category = 'Edition' Caption = 'Delete selected item' OnExecute = actDeleteSomethingExecute ShortCut = 119 end object actDeleteSubMenuKeepElem: TAction Tag = 2 Category = 'Edition' Caption = 'Delete just sub-menu but keep elements' OnExecute = actDeleteSomethingExecute ShortCut = 16503 end object actDeleteSubMenuAndElem: TAction Tag = 3 Category = 'Edition' Caption = 'Delete sub-menu and all its elements' OnExecute = actDeleteSomethingExecute ShortCut = 24695 end object actDeleteAll: TAction Category = 'Edition' Caption = 'Delete all!' OnExecute = actDeleteAllExecute ShortCut = 57463 end object actMoveToPrevious: TAction Category = 'Edition' Caption = 'Move to previous' OnExecute = actMoveToPreviousExecute ShortCut = 16422 end object actMoveToNext: TAction Category = 'Edition' Caption = 'Move to next' OnExecute = actMoveToNextExecute ShortCut = 16424 end object actPaste: TAction Category = 'Edition' Caption = 'Paste what was cut' Enabled = False OnExecute = actPasteExecute ShortCut = 24662 end object actCut: TAction Category = 'Edition' Caption = 'Cut selection of entries' OnExecute = actCutExecute ShortCut = 24664 end object actSearchAndReplaceInPath: TAction Tag = 1 Category = 'Edition' Caption = 'Search && replace in &path' OnExecute = actSearchAndReplaceExecute end object actSearchAndReplaceInTargetPath: TAction Tag = 2 Category = 'Edition' Caption = 'Search && replace in &target path' OnExecute = actSearchAndReplaceExecute end object actSearchAndReplaceInPathAndTarget: TAction Tag = 3 Category = 'Edition' Caption = 'Search && replace in both path and target' OnExecute = actSearchAndReplaceExecute ShortCut = 32886 end object actFocusTreeWindow: TAction Category = 'Navigation' Caption = 'Focus tree window' OnExecute = actFocusTreeWindowExecute ShortCut = 113 end object actGotoFirstItem: TAction Category = 'Navigation' Caption = 'Goto first item' OnExecute = actGotoFirstItemExecute ShortCut = 16420 end object actGoToPreviousItem: TAction Category = 'Navigation' Caption = 'Go to previous item' OnExecute = actGoToPreviousItemExecute ShortCut = 38 end object actGoToNextItem: TAction Category = 'Navigation' Caption = 'Go to next item' OnExecute = actGoToNextItemExecute ShortCut = 40 end object actGotoLastItem: TAction Category = 'Navigation' Caption = 'Goto last item' OnExecute = actGotoLastItemExecute ShortCut = 16419 end object actExpandItem: TAction Category = 'Navigation' Caption = 'Expand item' OnExecute = actExpandItemExecute ShortCut = 16423 end object actOpenAllBranches: TAction Category = 'Navigation' Caption = 'Open all branches' OnExecute = actOpenAllBranchesExecute end object actCollapseItem: TAction Category = 'Navigation' Caption = 'Collapse item' OnExecute = actCollapseItemExecute ShortCut = 16421 end object actCollapseAll: TAction Category = 'Navigation' Caption = 'Collapse all' OnExecute = actCollapseAllExecute end object actTweakPath: TAction Tag = 2 Category = 'Edition' Caption = 'Tweak path' OnExecute = actTweakPathExecute ShortCut = 24656 end object actTweakTargetPath: TAction Tag = 3 Category = 'Edition' Caption = 'Tweak target path' OnExecute = actTweakPathExecute ShortCut = 24660 end end object pmInsertDirectoryHotlist: TPopupMenu[2] left = 80 top = 56 object miInsertBrowsedDir: TMenuItem Action = actInsertBrowsedDir end object miInsertTypedDir: TMenuItem Action = actInsertTypedDir end object miInsertActiveFrameDir: TMenuItem Action = actInsertActiveFrameDir end object miInsertBothFrameDir: TMenuItem Action = actInsertBothFrameDir end object miInsertSelectionsFromFrame: TMenuItem Action = actInsertSelectionsFromFrame end object miInsertCopyOfEntry: TMenuItem Action = actInsertCopyOfEntry end object miSeparator1: TMenuItem Caption = '-' end object miInsertSeparator: TMenuItem Action = actInsertSeparator end object miInsertSubMenu: TMenuItem Tag = 6 Action = actInsertSubMenu end end object pmAddDirectoryHotlist: TPopupMenu[3] left = 80 top = 112 object miAddBrowsedDir: TMenuItem Action = actAddBrowsedDir end object miAddTypedDir: TMenuItem Action = actAddTypedDir end object miAddActiveFrameDir: TMenuItem Action = actAddActiveFrameDir end object miAddBothFrameDir: TMenuItem Action = actAddBothFrameDir end object miAddSelectionsFromFrame: TMenuItem Action = actAddSelectionsFromFrame end object miAddCopyOfEntry: TMenuItem Action = actAddCopyOfEntry end object miSeparator2: TMenuItem Caption = '-' end object miAddSeparator: TMenuItem Action = actAddSeparator end object miAddSubMenu: TMenuItem Tag = 6 Action = actAddSubMenu end end object pmDeleteDirectoryHotlist: TPopupMenu[4] left = 80 top = 168 object miDeleteSelectedItem: TMenuItem Tag = 1 Action = actDeleteSelectedItem end object miSeparator3: TMenuItem Caption = '-' end object miDeleteSubMenuKeepElem: TMenuItem Tag = 2 Action = actDeleteSubMenuKeepElem end object miDeleteSubMenuAndElem: TMenuItem Tag = 3 Action = actDeleteSubMenuAndElem end object miSeparator4: TMenuItem Caption = '-' end object miDeleteAll: TMenuItem Action = actDeleteAll end end object pmSortDirectoryHotlist: TPopupMenu[5] left = 80 top = 224 object miSortSingleGroup: TMenuItem Tag = 1 Caption = '...single &group of item(s) only' OnClick = miSortDirectoryHotlistClick end object miCurrentLevelOfItemOnly: TMenuItem Tag = 2 Caption = '...current le&vel of item(s) selected only' OnClick = miSortDirectoryHotlistClick end object miSortSingleSubMenu: TMenuItem Tag = 3 Caption = '...&content of submenu(s) selected, no sublevel' OnClick = miSortDirectoryHotlistClick end object miSortSubMenuAndSubLevel: TMenuItem Tag = 4 Caption = '...content of submenu(s) selected and &all sublevels' OnClick = miSortDirectoryHotlistClick end object miSortEverything: TMenuItem Tag = 5 Caption = '...everything, from A to &Z!' OnClick = miSortDirectoryHotlistClick end end object pmMiscellaneousDirectoryHotlist: TPopupMenu[6] left = 80 top = 280 object miTestResultingHotlistMenu: TMenuItem Caption = 'Test resultin&g menu' OnClick = miTestResultingHotlistMenuClick end object miSeparator5: TMenuItem Caption = '-' end object miNavigate: TMenuItem Caption = '&Navigate...' object miFocusTreeWindow: TMenuItem Action = actFocusTreeWindow end object miSeparator10: TMenuItem Caption = '-' end object miGotoFirstItem: TMenuItem Action = actGotoFirstItem end object miGoToPreviousItem: TMenuItem Action = actGoToPreviousItem end object miGoToNextItem: TMenuItem Action = actGoToNextItem end object miGotoLastItem: TMenuItem Action = actGotoLastItem end object miSeparator11: TMenuItem Caption = '-' end object miExpandItem: TMenuItem Action = actExpandItem end object miOpenAllBranches: TMenuItem Action = actOpenAllBranches end object miCollapseItem: TMenuItem Action = actCollapseItem end object miCollapseAll: TMenuItem Action = actCollapseAll end object miSeparator12: TMenuItem Caption = '-' end object miMoveToPrevious: TMenuItem Action = actMoveToPrevious end object miMoveToNext: TMenuItem Action = actMoveToNext end end object miSeparator6: TMenuItem Caption = '-' end object miCut: TMenuItem Action = actCut end object miPaste: TMenuItem Action = actPaste end object miSeparator7: TMenuItem Caption = '-' end object miSearchAndReplace: TMenuItem Caption = 'Search and &replace...' object miSearchAndReplaceInPath: TMenuItem Action = actSearchAndReplaceInPath end object miSearchAndReplaceInTargetPath: TMenuItem Action = actSearchAndReplaceInTargetPath end object miSearchInReplaceInBothPaths: TMenuItem Action = actSearchAndReplaceInPathAndTarget end end object miSeparator8: TMenuItem Caption = '-' end object miTweakPath: TMenuItem Action = actTweakPath Caption = 'Tweak &path' end object miTweakTargetPath: TMenuItem Action = actTweakTargetPath Caption = 'Tweak &target path' end object miSeparator9: TMenuItem Caption = '-' end object miDetectIfPathExist: TMenuItem Tag = 1 Caption = 'Scan all &hotdir''s path to validate the ones that actually exist' OnClick = miDetectIfPathExistClick end object miDetectIfPathTargetExist: TMenuItem Tag = 2 Caption = '&Scan all hotdir''s path && target to validate the ones that actually exist' OnClick = miDetectIfPathExistClick end end object pmExportDirectoryHotlist: TPopupMenu[7] left = 256 top = 56 object miExportToHotlistFile: TMenuItem Tag = 1 Caption = 'to a Directory &Hotlist file (.hotlist)' OnClick = miExportToAnythingClick end object miSeparator13: TMenuItem Caption = '-' end object miExportToTotalCommanderk: TMenuItem Caption = 'to a "wincmd.ini" of TC (&keep existing)' OnClick = miExportToAnythingClick end object miExportToTotalCommandernk: TMenuItem Tag = 128 Caption = 'to a "wincmd.ini" of TC (&erase existing)' OnClick = miExportToAnythingClick end object miGotoConfigureTCInfo1: TMenuItem Caption = 'Go to &configure TC related info' OnClick = miGotoConfigureTCInfoClick end end object pmImportDirectoryHotlist: TPopupMenu[8] left = 256 top = 112 object miImportFromHotlistFile: TMenuItem Tag = 1 Caption = 'from a Directory &Hotlist file (.hotlist)' OnClick = miImportFromAnythingClick end object miSeparator14: TMenuItem Caption = '-' end object miImportTotalCommander: TMenuItem Caption = 'from "&wincmd.ini" of TC' OnClick = miImportFromAnythingClick end object miGotoConfigureTCInfo2: TMenuItem Caption = 'Go to &configure TC related info' OnClick = miGotoConfigureTCInfoClick end end object pmBackupDirectoryHotlist: TPopupMenu[9] left = 256 top = 168 object miSaveBackupHotlist: TMenuItem Tag = 2 Caption = '&Save a backup of current Directory Hotlist' OnClick = miExportToAnythingClick end object miRestoreBackupHotlist: TMenuItem Tag = 2 Caption = '&Restore a backup of Directory Hotlist' OnClick = miImportFromAnythingClick end end object pmHotDirTestMenu: TPopupMenu[10] left = 80 top = 336 object miHotDirTestMenu: TMenuItem Caption = 'HotDirTestMenu' end end object pmPathHelper: TPopupMenu[11] left = 256 top = 504 end object OpenDialog: TOpenDialog[12] DefaultExt = '.hotlist' Filter = 'Directory Hotlist files|*.hotlist|.xml Config files|*.xml|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 80 top = 504 end object SaveDialog: TSaveDialog[13] DefaultExt = '.hotlist' Filter = 'Directory Hotlist|*.hotlist' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 80 top = 448 end end doublecmd-1.1.30/src/frames/foptionscustomcolumns.pas0000644000175000001440000016161715104114162022047 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Custom columns options page Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsCustomColumns; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. ComCtrls, Controls, Classes, SysUtils, StdCtrls, ExtCtrls, Forms, ColorBox, Buttons, Spin, Grids, Menus, Dialogs, LMessages, DividerBevel, //DC uColumns, KASToolPanel, fOptionsFrame, uColumnsFileView; type { TfrmOptionsCustomColumns } TfrmOptionsCustomColumns = class(TOptionsEditor) btnAllAllowOverColor: TButton; btnAllBackColor: TButton; btnAllBackColor2: TButton; btnAllCursorColor: TButton; btnAllCursorText: TButton; btnAllFont: TButton; btnAllForeColor: TButton; btnAllInactiveCursorColor: TButton; btnAllInactiveMarkColor: TButton; btnAllMarkColor: TButton; btnAllUseInactiveSelColor: TButton; btnAllUseInvertedSelection: TButton; btnBackColor: TButton; btnBackColor2: TButton; btnCursorBorderColor: TButton; btnGotoSetDefault: TButton; btnResetCursorBorder: TButton; btnResetFrameCursor: TButton; btnSaveAsConfigColumns: TButton; btnCursorColor: TButton; btnCursorText: TButton; btnDeleteConfigColumns: TButton; btnFont: TBitBtn; btnForeColor: TButton; btnInactiveCursorColor: TButton; btnInactiveMarkColor: TButton; btnMarkColor: TButton; btnNext: TButton; btnNewConfig: TButton; btnPrev: TButton; btnRenameConfigColumns: TButton; btnResetAllowOverColor: TButton; btnResetBackColor: TButton; btnResetBackColor2: TButton; btnResetCursorColor: TButton; btnResetCursorText: TButton; btnResetFont: TButton; btnResetForeColor: TButton; btnResetInactiveCursorColor: TButton; btnResetInactiveMarkColor: TButton; btnResetMarkColor: TButton; btnResetUseInactiveSelColor: TButton; btnResetUseInvertedSelection: TButton; btnSaveConfigColumns: TButton; cbAllowOverColor: TCheckBox; cbApplyChangeForAllColumns: TCheckBox; cbBackColor: TColorBox; cbBackColor2: TColorBox; cbConfigColumns: TComboBox; cbCursorBorder: TCheckBox; cbCursorBorderColor: TColorBox; cbCursorColor: TColorBox; cbCursorText: TColorBox; cbForeColor: TColorBox; cbInactiveCursorColor: TColorBox; cbInactiveMarkColor: TColorBox; cbMarkColor: TColorBox; cbUseFrameCursor: TCheckBox; cbUseInactiveSelColor: TCheckBox; cbUseInvertedSelection: TCheckBox; chkUseCustomView: TCheckBox; cmbFileSystem: TComboBox; dlgcolor: TColorDialog; dlgfont: TFontDialog; edtFont: TEdit; lblFileSystem: TLabel; lblBackColor: TLabel; lblBackColor2: TLabel; lblConfigColumns: TLabel; lblCurrentColumn: TLabel; lblCursorColor: TLabel; lblCursorText: TLabel; lblFontName: TLabel; lblFontSize: TLabel; lblForeColor: TLabel; lblInactiveCursorColor: TLabel; lblInactiveMarkColor: TLabel; lblMarkColor: TLabel; lblPreviewTop: TDividerBevel; lblWorkingColumn: TLabel; miAddColumn: TMenuItem; pnlCommon: TPanel; pnlCustomColumnsViewSettings: TPanel; pmFields: TPopupMenu; pmStringGrid: TPopupMenu; pnlActualCont: TPanel; pnlConfigColumns: TPanel; pnlGeneralColumnsViewSettings: TPanel; pnlLeft: TPanel; pnlPreviewCont: TKASToolPanel; pnlRight: TPanel; sneFontSize: TSpinEdit; spGridArea: TSplitter; spltBetweenPanels: TSplitter; stgColumns: TStringGrid; procedure btnGotoSetDefaultClick(Sender: TObject); procedure cmbFileSystemChange(Sender: TObject); procedure FillFileSystemList; procedure FillColumnsList; procedure cbConfigColumnsChange(Sender: TObject); procedure btnSaveConfigColumnsClick(Sender: TObject); procedure btnDeleteConfigColumnsClick(Sender: TObject); procedure UpdatePageInfoFromColumnClass; procedure UpdateColumnClass; procedure stgColumnsSelectEditor(Sender: TObject; aCol, aRow: integer; var Editor: TWinControl); procedure stgColumnsKeyDown(Sender: TObject; var Key: word; {%H-}Shift: TShiftState); procedure stgColumnsMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: integer); procedure stgColumnsMouseMove(Sender: TObject; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: integer); procedure CreateEditingControls; procedure EditorKeyDown(Sender: TObject; var Key: word; {%H-}Shift: TShiftState); procedure AddNewField; procedure miAddColumnClick(Sender: TObject); procedure stgSetSelectionAsHintToUser; procedure stgColumnsEditingDone(Sender: TObject); procedure MenuFieldsClick(Sender: TObject); procedure EditorSaveResult(Sender: TObject); procedure CustomSomethingChanged(Sender: TObject); procedure LoadCustColumn(const Index: integer); procedure chkUseCustomViewChange(Sender: TObject); procedure cbCursorBorderChange(Sender: TObject); procedure cbCursorBorderColorChange(Sender: TObject); procedure btnCursorBorderColorClick(Sender: TObject); procedure btnResetCursorBorderClick(Sender: TObject); procedure cbUseFrameCursorChange(Sender: TObject); procedure btnResetFrameCursorClick(Sender: TObject); procedure btnPrevClick(Sender: TObject); procedure btnNextClick(Sender: TObject); procedure cbApplyChangeForAllColumnsChange(Sender: TObject); procedure btnFontClick(Sender: TObject); procedure sneFontSizeChange(Sender: TObject); procedure btnResetFontClick(Sender: TObject); procedure btnAllForeColorClick(Sender: TObject); procedure cbForeColorChange(Sender: TObject); procedure btnForeColorClick(Sender: TObject); procedure btnResetForeColorClick(Sender: TObject); procedure cbBackColorChange(Sender: TObject); procedure btnBackColorClick(Sender: TObject); procedure btnResetBackColorClick(Sender: TObject); procedure cbBackColor2Change(Sender: TObject); procedure btnBackColor2Click(Sender: TObject); procedure btnResetBackColor2Click(Sender: TObject); procedure cbMarkColorChange(Sender: TObject); procedure btnMarkColorClick(Sender: TObject); procedure btnResetMarkColorClick(Sender: TObject); procedure cbCursorColorChange(Sender: TObject); procedure btnCursorColorClick(Sender: TObject); procedure btnResetCursorColorClick(Sender: TObject); procedure cbCursorTextChange(Sender: TObject); procedure btnCursorTextClick(Sender: TObject); procedure btnResetCursorTextClick(Sender: TObject); procedure cbInactiveCursorColorChange(Sender: TObject); procedure btnInactiveCursorColorClick(Sender: TObject); procedure btnResetInactiveCursorColorClick(Sender: TObject); procedure cbInactiveMarkColorChange(Sender: TObject); procedure btnInactiveMarkColorClick(Sender: TObject); procedure btnResetInactiveMarkColorClick(Sender: TObject); procedure cbUseInvertedSelectionChange(Sender: TObject); procedure btnResetUseInvertedSelectionClick(Sender: TObject); procedure cbUseInactiveSelColorChange(Sender: TObject); procedure btnResetUseInactiveSelColorClick(Sender: TObject); procedure cbAllowOvercolorChange(Sender: TObject); procedure btnResetAllowOverColorClick(Sender: TObject); procedure pnlLeftEnter(Sender: TObject); procedure pnlRightEnter(Sender: TObject); procedure OnColumnResized(Sender: TObject; ColumnIndex: integer; ColumnNewsize: integer); {Editors} procedure SpinEditExit(Sender: TObject); procedure SpinEditChange(Sender: TObject); procedure EditExit(Sender: TObject); procedure BitBtnDeleteFieldClick(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure ComboBoxXSelect(Sender: TObject); procedure UpDownXClick(Sender: TObject; {%H-}Button: TUDBtnType); procedure UpDownXChanging(Sender: TObject; var {%H-}AllowChange: boolean); private ColPrm: TColPrm; ColumnClass: TPanelColumnsClass; PreviewLeftPanel: TColumnsFileView; PreviewRightPanel: TColumnsFileView; updWidth: TSpinEdit; cbbAlign: TComboBox; edtField: TEdit; btnAdd: TButton; btnDel: TBitBtn; updMove: TUpDown; bColumnConfigLoaded: boolean; FUpdating: boolean; ColumnClassOwnership: boolean; IndexRaw: integer; FCellValue: string; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: Boolean; override; function ExtraOptionsSignature(CurrentSignature:dword):dword; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. strutils, Graphics, LCLType, //DC DCStrUtils, fOptions, uShowMsg, uDebug, uFileFunctions, DCOSUtils, uFileSystemFileSource, uDCUtils, uGlobs, uLng, fMain, fOptionsFilePanelsColors; { TfrmOptionsCustomColumns } type THackStringGrid = class(TCustomStringGrid) end; { TfrmOptionsCustomColumns.Load } procedure TfrmOptionsCustomColumns.Load; var Index: Integer; AColumnClass: TPanelColumnsClass; begin //1. Init some flags bColumnConfigLoaded := False; FUpdating := False; ColumnClassOwnership := True; //2. Create some objects we need for this page. ColPrm := nil; ColumnClass := TPanelColumnsClass.Create; lblPreviewTop.Caption := rsMsgPanelPreview; CreateEditingControls; //3. Load stuff for our preview lblWorkingColumn.Caption := rsConfCustHeader + ':'; PreviewLeftPanel := TColumnsFileView.Create(pnlLeft, TFileSystemFileSource.Create, mbGetCurrentDir); PreviewLeftPanel.OnColumnResized := @Self.OnColumnResized; PreviewLeftPanel.JustForColorPreviewSetActiveState(True); PreviewRightPanel := TColumnsFileView.Create(pnlRight, TFileSystemFileSource.Create, mbGetCurrentDir); PreviewRightPanel.OnColumnResized := @Self.OnColumnResized; PreviewRightPanel.JustForColorPreviewSetActiveState(False); //4. Load our list of columns set. FillFileSystemList; cmbFileSystemChange(cmbFileSystem); //5. Select the one we currently have in the active panel if possible. User won't be lost and it's the most pertinent thing to do. if frmMain.ActiveNotebook.ActiveView.ClassNameIs('TColumnsFileView') then begin AColumnClass:= ColSet.GetColumnSet(TColumnsFileView(frmMain.ActiveNotebook.ActiveView).ActiveColm); if Assigned(AColumnClass) then begin Index:= cmbFileSystem.Items.IndexOf(AColumnClass.FileSystem); if Index >= 0 then begin cmbFileSystem.ItemIndex:= Index; cmbFileSystemChange(cmbFileSystem); cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(AColumnClass.Name); pnlLeft.Width := frmMain.ActiveNotebook.Width; end; end; end; if (cbConfigColumns.ItemIndex = -1) and (cbConfigColumns.Items.Count > 0) then cbConfigColumns.ItemIndex := 0; //6. We have mostly loaded what needed to be load. bColumnConfigLoaded := True; //7. Now let's show what we've got for that view. cbConfigColumnsChange(cbConfigColumns); //8. Local action cbApplyChangeForAllColumns.Checked := gCustomColumnsChangeAllColumns; end; { TfrmOptionsCustomColumns.Save } function TfrmOptionsCustomColumns.Save: TOptionsEditorSaveFlags; begin gCustomColumnsChangeAllColumns := cbApplyChangeForAllColumns.Checked; btnSaveConfigColumnsClick(btnSaveConfigColumns); Result := []; end; { TfrmOptionsCustomColumns.Done } procedure TfrmOptionsCustomColumns.Done; var i: integer; begin if Assigned(PreviewLeftPanel) then FreeAndNil(PreviewLeftPanel); if Assigned(PreviewRightPanel) then FreeAndNil(PreviewRightPanel); if (ColumnClassOwnership = True) and Assigned(ColumnClass) then FreeAndNil(ColumnClass); // Free TColPrm objects assigned to each row. for i := 0 to stgColumns.RowCount - 1 do begin if Assigned(stgColumns.Objects[6, i]) then begin (stgColumns.Objects[6, i] as TColPrm).Free; stgColumns.Objects[6, i] := nil; end; end; end; procedure TfrmOptionsCustomColumns.CMThemeChanged(var Message: TLMessage); begin cbConfigColumnsChange(cbConfigColumns); end; { TfrmOptionsCustomColumns.GetIconIndex } class function TfrmOptionsCustomColumns.GetIconIndex: integer; begin Result := 30; end; { TfrmOptionsCustomColumns.GetTitle } class function TfrmOptionsCustomColumns.GetTitle: string; begin Result := rsOptionsEditorCustomColumns; end; { TfrmOptionsCustomColumns.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsCustomColumns.IsSignatureComputedFromAllWindowComponents: Boolean; begin result := False; end; { TfrmOptionsCustomColumns.ExtraOptionsSignature } function TfrmOptionsCustomColumns.ExtraOptionsSignature(CurrentSignature:dword):dword; begin result := ColumnClass.GetSignature(CurrentSignature); end; { TfrmOptionsCustomColumns.FillColumnsList } procedure TfrmOptionsCustomColumns.FillColumnsList; var Index: Integer; begin cbConfigColumns.Clear; for Index:= 0 to ColSet.Items.Count - 1 do begin if SameText(TPanelColumnsClass(ColSet.Items.Objects[Index]).FileSystem, cmbFileSystem.Text) then begin cbConfigColumns.Items.AddObject(ColSet.Items[Index], TObject(PtrInt(Index))); end; end; end; { TfrmOptionsCustomColumns.btnGotoSetDefaultClick } procedure TfrmOptionsCustomColumns.btnGotoSetDefaultClick(Sender: TObject); begin ShowOptions(TfrmOptionsFilePanelsColors); end; procedure TfrmOptionsCustomColumns.cmbFileSystemChange(Sender: TObject); begin FillColumnsList; if cbConfigColumns.Items.Count > 0 then begin cbConfigColumns.ItemIndex:= 0; cbConfigColumnsChange(cbConfigColumns); end else begin stgColumns.RowCount:= 1; btnRenameConfigColumns.Enabled:= False; btnDeleteConfigColumns.Enabled:= False; end; pnlActualCont.Enabled:= cbConfigColumns.Items.Count > 0; btnSaveAsConfigColumns.Enabled:= pnlActualCont.Enabled; cbConfigColumns.Enabled:= pnlActualCont.Enabled; end; procedure TfrmOptionsCustomColumns.FillFileSystemList; var Index: Integer; begin cmbFileSystem.Clear; cmbFileSystem.Items.Add(FS_GENERAL); for Index:= 0 to gWFXPlugins.Count - 1 do begin cmbFileSystem.Items.Add(gWFXPlugins.Name[Index]); end; cmbFileSystem.ItemIndex:= 0; end; { TfrmOptionsCustomColumns.cbConfigColumnsChange } procedure TfrmOptionsCustomColumns.cbConfigColumnsChange(Sender: TObject); begin if bColumnConfigLoaded and (cbConfigColumns.ItemIndex >= 0) then begin ColumnClass.Assign(ColSet.GetColumnSet(PtrInt(cbConfigColumns.Items.Objects[cbConfigColumns.ItemIndex]))); LastLoadedOptionSignature := ComputeCompleteOptionsSignature; cbConfigColumns.Enabled := True; btnSaveConfigColumns.Enabled := False; btnRenameConfigColumns.Enabled := True; btnNewConfig.Enabled := True; UpdatePageInfoFromColumnClass; end; end; { TfrmOptionsCustomColumns.btnSaveConfigColumnsClick } procedure TfrmOptionsCustomColumns.btnSaveConfigColumnsClick(Sender: TObject); var Index: PtrInt = -1; SuggestedCustomColumnsName: String; ColumnClassForConfig: TPanelColumnsClass; begin // We won't free that one obviously because it's the one that will now be in global application system memory ColumnClassForConfig := TPanelColumnsClass.Create; if cbConfigColumns.Items.Count > 0 then begin UpdateColumnClass; ColumnClassForConfig.Assign(ColumnClass); Index:= PtrInt(cbConfigColumns.Items.Objects[cbConfigColumns.ItemIndex]); end; case TComponent(Sender).tag of 1: // Save. begin if Index < 0 then ColumnClassForConfig.Free else begin ColSet.DeleteColumnSet(Index); Colset.Insert(Index, ColumnClassForConfig); cbConfigColumnsChange(cbConfigColumns); end; end; 2: // Save as. begin SuggestedCustomColumnsName := ColumnClassForConfig.Name + '(' + GetDateTimeInStrEZSortable(now) + ')'; ShowInputQuery(rsOptionsEditorCustomColumns, rsMenuConfigureEnterCustomColumnName, SuggestedCustomColumnsName); if (SuggestedCustomColumnsName = '') or (cbConfigColumns.Items.indexof(SuggestedCustomColumnsName) <> -1) then SuggestedCustomColumnsName := ColumnClassForConfig.Name + '(' + GetDateTimeInStrEZSortable(now) + ')'; ColumnClassForConfig.Name := SuggestedCustomColumnsName; ColumnClassForConfig.Unique := EmptyStr; ColSet.Add(ColumnClassForConfig); FillColumnsList; cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end; 3: // New. begin FreeAndNil(ColumnClassForConfig); ColumnClassForConfig := TPanelColumnsClass.Create; ColumnClassForConfig.AddDefaultEverything; ColumnClassForConfig.FileSystem := cmbFileSystem.Text; ColumnClassForConfig.Name := ColumnClassForConfig.Name + ' (' + GetDateTimeInStrEZSortable(now) + ')'; ColSet.Add(ColumnClassForConfig); cmbFileSystemChange(cmbFileSystem); cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end; 4: // Rename. begin SuggestedCustomColumnsName := cbConfigColumns.Items.Strings[cbConfigColumns.ItemIndex]; if ShowInputQuery(rsOptionsEditorCustomColumns, rsMenuConfigureEnterCustomColumnName, SuggestedCustomColumnsName) then begin if (SuggestedCustomColumnsName <> '') then begin if Colset.Items.indexof(SuggestedCustomColumnsName) = -1 then begin ColumnClassForConfig.Name := SuggestedCustomColumnsName; ColSet.DeleteColumnSet(Index); Colset.Insert(Index, ColumnClassForConfig); FillColumnsList; cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end else begin msgError(rsMenuConfigureColumnsAlreadyExists); end; end; end; end; end; end; { TfrmOptionsCustomColumns.btnDeleteConfigColumnsClick } procedure TfrmOptionsCustomColumns.btnDeleteConfigColumnsClick(Sender: TObject); begin if cbConfigColumns.ItemIndex = -1 then Exit; if (cbConfigColumns.Items.Count = 1) and (cmbFileSystem.ItemIndex = 0) then Exit; ColSet.DeleteColumnSet(PtrInt(cbConfigColumns.Items.Objects[cbConfigColumns.ItemIndex])); cmbFileSystemChange(cmbFileSystem); end; { TfrmOptionsCustomColumns.UpdatePageInfoFromColumnClass } // ***Important routine. // Take the initial info from the ColumnClass and organize the form's components to reflect that. procedure TfrmOptionsCustomColumns.UpdatePageInfoFromColumnClass; var I: integer; begin PreviewLeftPanel.ActiveColmSlave := ColumnClass; PreviewLeftPanel.isSlave := True; PreviewLeftPanel.Demo := True; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := True; PreviewRightPanel.Demo := True; if ColumnClass.ColumnsCount > 0 then begin stgColumns.RowCount := ColumnClass.ColumnsCount + 1; for i := 0 to ColumnClass.ColumnsCount - 1 do begin stgColumns.Cells[1, i + 1] := ColumnClass.GetColumnTitle(i); stgColumns.Cells[2, i + 1] := IntToStr(ColumnClass.GetColumnWidth(i)); stgColumns.Cells[3, i + 1] := ColumnClass.GetColumnAlignString(i); stgColumns.Cells[4, i + 1] := ColumnClass.GetColumnFuncString(i); stgColumns.Objects[5, i + 1] := ColumnClass.GetColumnItem(i); stgColumns.Objects[6, i + 1] := ColumnClass.GetColumnPrm(i); end; end else begin stgColumns.RowCount := 1; AddNewField; end; PreviewLeftPanel.UpdateColumnsView; PreviewRightPanel.UpdateColumnsView; FUpdating := True; chkUseCustomView.Checked := ColumnClass.CustomView; chkUseCustomViewChange(chkUseCustomView); cbCursorBorder.Checked := ColumnClass.UseCursorBorder; SetColorInColorBox(cbCursorBorderColor, ColumnClass.CursorBorderColor); cbUseFrameCursor.Checked := ColumnClass.UseFrameCursor; FUpdating := False; // Localize StringGrid header stgColumns.Cells[0, 0] := rsSimpleWordColumnSingular; stgColumns.Cells[1, 0] := rsConfColCaption; stgColumns.Cells[2, 0] := rsConfColWidth; stgColumns.Cells[3, 0] := rsConfColAlign; stgColumns.Cells[4, 0] := rsConfColFieldCont; stgColumns.Cells[5, 0] := rsConfColMove; stgColumns.Cells[6, 0] := rsConfColDelete; LoadCustColumn(0); end; { TfrmOptionsCustomColumns.UpdateColumnClass } // ***Important routine. Convert the current form components into the current working "ColumnClass". // ***It is not saved to file yet, but if we do, it will be that one! procedure TfrmOptionsCustomColumns.UpdateColumnClass; var Index: Integer; AItem: TPanelColumn; begin // Save fields for Index := 1 to stgColumns.RowCount - 1 do begin with stgColumns do begin AItem:= TPanelColumn(Objects[5, Index]); AItem.Title := Cells[1, Index]; AItem.Width := StrToInt(Cells[2, Index]); AItem.Align := StrToAlign(Cells[3, Index]); AItem.FuncString := Cells[4, Index]; end; if stgColumns.Objects[6, Index] <> nil then ColumnClass.SetColumnPrm(Index - 1, TColPrm(stgColumns.Objects[6, Index])); end; ColumnClass.FileSystem := cmbFileSystem.Text; ColumnClass.CustomView := chkUseCustomView.Checked; ColumnClass.UseCursorBorder := cbCursorBorder.Checked; ColumnClass.CursorBorderColor := cbCursorBorderColor.Selected; ColumnClass.UseFrameCursor := cbUseFrameCursor.Checked; ColumnClass.Name := cbConfigColumns.Items.Strings[cbConfigColumns.ItemIndex]; if LastLoadedOptionSignature = ComputeCompleteOptionsSignature then begin cbConfigColumns.Enabled := True; cbConfigColumns.Hint := ''; btnSaveConfigColumns.Enabled := False; btnRenameConfigColumns.Enabled := True; btnNewConfig.Enabled := True; end else begin cbConfigColumns.Enabled := False; cbConfigColumns.Hint := rsMenuConfigureColumnsSaveToChange; btnSaveConfigColumns.Enabled := True; btnRenameConfigColumns.Enabled := False; btnNewConfig.Enabled := False; end; PreviewLeftPanel.UpdateColumnsView; PreviewLeftPanel.Reload; PreviewRightPanel.UpdateColumnsView; PreviewRightPanel.Reload; end; { TfrmOptionsCustomColumns.stgColumnsSelectEditor } procedure TfrmOptionsCustomColumns.stgColumnsSelectEditor(Sender: TObject; aCol, aRow: integer; var Editor: TWinControl); begin // Hide '+' button in other columns than 4th (Field contents). if (aCol <> 4) and btnAdd.Visible then btnAdd.Hide; try FUpdating := True; case aCol of 0: // Just the arrow pointing the "active" columns begin Editor := nil; end; 2: // Width begin with updWidth do begin Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Width := (Sender as TStringGrid).ColWidths[aCol]; Value := StrToInt((Sender as TStringGrid).Cells[aCol, aRow]); end; Editor := updWidth; end; 3: // Columns alignment begin with cbbAlign do begin Width := (Sender as TStringGrid).ColWidths[aCol]; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; ItemIndex := Items.IndexOf((Sender as TStringGrid).Cells[aCol, aRow]); end; Editor := cbbAlign; end; 4: // Field contents begin with btnAdd do begin Width := 20; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Tag := aRow; Show; end; with edtField do begin Width := (Sender as TStringGrid).ColWidths[aCol]; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Text := (Sender as TStringGrid).Cells[aCol, aRow]; end; Editor := edtField; end; 5: // Move columns begin with updMove do begin Height := stgColumns.RowHeights[aRow]; Width := stgColumns.ColWidths[aCol] - 2; Min := -((Sender as TStringGrid).RowCount - 1); Max := -1; Position := -aRow; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; end; Editor := updMove; end; 6: // Delete columns begin // Only show delete button if there is more than one column. if (stgColumns.RowCount - stgColumns.FixedRows) > 1 then begin with btnDel do begin Height := stgColumns.RowHeights[aRow]; Width := stgColumns.ColWidths[aCol] - 2; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; end; Editor := btnDel; end else Editor := nil; end; end; finally if Assigned(Editor) then begin Editor.Tag := aRow; Editor.Hint := IntToStr(aCol); if not stgColumns.EditorMode then FCellValue := stgColumns.Cells[aCol, aRow]; end; FUpdating := False; end; end; { TfrmOptionsCustomColumns.stgColumnsKeyDown } procedure TfrmOptionsCustomColumns.stgColumnsKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin case Key of VK_DOWN: if (stgColumns.Row = stgColumns.RowCount - 1) then begin AddNewField; end; VK_ESCAPE: if (stgColumns.EditorMode) then begin stgColumns.Cells[stgColumns.Col, stgColumns.Row] := FCellValue; stgColumns.EditorMode := False; Key := 0; end; end; end; { TfrmOptionsCustomColumns.stgColumnsMouseDown } procedure TfrmOptionsCustomColumns.stgColumnsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); var Col: integer = 0; Row: integer = 0; begin if Y < stgColumns.GridHeight then begin // Clicked on a cell, allow editing. stgColumns.Options := stgColumns.Options + [goEditing]; // Select clicked column in customize colors panel. stgColumns.MouseToCell(X, Y, Col, Row); LoadCustColumn(Row - stgColumns.FixedRows); end else begin // Clicked not on a cell, disable editing. stgColumns.Options := stgColumns.Options - [goEditing]; if btnAdd.Visible then btnAdd.Hide; end; end; { TfrmOptionsCustomColumns.stgColumnsMouseMove } procedure TfrmOptionsCustomColumns.stgColumnsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); var iCol: integer; StringGrid: THackStringGrid absolute Sender; begin if (StringGrid.fGridState = gsColSizing) then begin if StringGrid.EditorMode then with StringGrid.Editor do begin iCol := StrToInt(Hint); Width := StringGrid.ColWidths[iCol]; Left := StringGrid.CellRect(iCol, StringGrid.Row).Left; end; if btnAdd.Visible then btnAdd.Left := StringGrid.CellRect(4, StringGrid.Row).Right - btnAdd.Width; end; end; { TfrmOptionsCustomColumns.CreateEditingControls } procedure TfrmOptionsCustomColumns.CreateEditingControls; begin // Editing controls are created with no parent-control. // TCustomGrid handles their visibility when they are assigned to Editor property. btnDel := TBitBtn.Create(Self); with btnDel do begin // Glyph.Assign(btnCancel.Glyph); Caption := rsConfColDelete; OnClick := @BitBtnDeleteFieldClick; end; cbbAlign := TComboBox.Create(Self); with cbbAlign do begin Style := csDropDownList; AddItem('<-', nil); AddItem('->', nil); AddItem('=', nil); OnSelect := @ComboBoxXSelect; OnKeyDown := @EditorKeyDown; end; edtField := TEdit.Create(Self); with edtField do begin OnExit := @EditExit; OnKeyDown := @EditorKeyDown; end; updMove := TUpDown.Create(Self); with updMove do begin OnChanging := @UpDownXChanging; OnClick := @UpDownXClick; end; updWidth := TSpinEdit.Create(Self); with updWidth do begin MinValue := 0; MaxValue := 1000; OnKeyDown := @EditorKeyDown; OnChange := @SpinEditChange; OnExit := @SpinEditExit; end; // Add button displayed in 'Field contents'. btnAdd := TButton.Create(Self); with btnAdd do begin Visible := False; Parent := stgColumns; // set Parent, because this control is shown manually in stgColumns Caption := '+'; OnClick := @btnAddClick; end; end; { TfrmOptionsCustomColumns.EditorKeyDown } procedure TfrmOptionsCustomColumns.EditorKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin case Key of VK_RETURN: begin EditorSaveResult(Sender); stgColumns.EditorMode := False; Key := 0; end; VK_ESCAPE: begin stgColumns.EditorMode := False; stgColumns.Cells[stgColumns.Col, stgColumns.Row] := FCellValue; UpdateColumnClass; Key := 0; end; end; end; { TfrmOptionsCustomColumns.AddNewField } procedure TfrmOptionsCustomColumns.AddNewField; var Index: Integer; AItem: TPanelColumn; begin Index:= stgColumns.RowCount; AItem:= TPanelColumn.CreateNew; stgColumns.RowCount := Index + 1; stgColumns.Cells[1, Index] := EmptyStr; stgColumns.Cells[2, Index] := '50'; stgColumns.Cells[3, Index] := '<-'; stgColumns.Cells[4, Index] := ''; stgColumns.Objects[5, Index] := AItem; stgColumns.Objects[6, Index] := TColPrm.Create; ColumnClass.Add(AItem); UpdateColumnClass; end; { TfrmOptionsCustomColumns.miAddColumnClick } procedure TfrmOptionsCustomColumns.miAddColumnClick(Sender: TObject); begin AddNewField; end; { TfrmOptionsCustomColumns.SpinEditExit } procedure TfrmOptionsCustomColumns.SpinEditExit(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.SpinEditChange } procedure TfrmOptionsCustomColumns.SpinEditChange(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.EditExit } procedure TfrmOptionsCustomColumns.EditExit(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.BitBtnDeleteFieldClick } procedure TfrmOptionsCustomColumns.BitBtnDeleteFieldClick(Sender: TObject); var RowNr: integer; begin RowNr := (Sender as TBitBtn).Tag; // Free TColPrm object assigned to the row. if Assigned(stgColumns.Objects[6, RowNr]) then begin (stgColumns.Objects[6, RowNr] as TColPrm).Free; stgColumns.Objects[6, RowNr] := nil; end; ColumnClass.Delete(RowNr - 1); stgColumns.DeleteColRow(False, RowNr); EditorSaveResult(Sender); if RowNr = stgColumns.RowCount then // The last row was deleted, load previous column. LoadCustColumn(RowNr - stgColumns.FixedRows - 1) else // Load next column (RowNr will point to it after deleting). LoadCustColumn(RowNr - stgColumns.FixedRows); end; { TfrmOptionsCustomColumns.btnAddAddClick } procedure TfrmOptionsCustomColumns.btnAddClick(Sender: TObject); var Point: TPoint; begin // Fill column fields menu FillContentFieldMenu(pmFields.Items, @MenuFieldsClick, cmbFileSystem.Text); // Show popup menu Point.x := (Sender as TButton).Left - 25; Point.y := (Sender as TButton).Top + (Sender as TButton).Height + 40; Point := ClientToScreen(Point); pmFields.PopUp(Point.X, Point.Y); end; { TfrmOptionsCustomColumns.ComboBoxXSelect } procedure TfrmOptionsCustomColumns.ComboBoxXSelect(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.UpDownXClick } procedure TfrmOptionsCustomColumns.UpDownXClick(Sender: TObject; Button: TUDBtnType); begin ColumnClass.Exchange(updMove.Tag - 1, abs(updMove.Position) - 1); stgColumns.ExchangeColRow(False, updMove.Tag, abs(updMove.Position)); with updMove do begin Left := stgColumns.CellRect(5, abs(updMove.Position)).Right - Width; Top := stgColumns.CellRect(5, abs(updMove.Position)).Top; end; EditorSaveResult(Sender); LoadCustColumn(abs(updMove.Position) - 1); end; { TfrmOptionsCustomColumns.UpDownXChanging } procedure TfrmOptionsCustomColumns.UpDownXChanging(Sender: TObject; var AllowChange: boolean); begin updMove.tag := abs(updMove.Position); EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.stgSetSelectionAsHintToUser } procedure TfrmOptionsCustomColumns.stgSetSelectionAsHintToUser; var CellToSelect: TGridRect; begin CellToSelect.Left := 1; // Column for the name. CellToSelect.Right := 1; CellToSelect.Top := IndexRaw + 1; // Actual column of the view. This will give a visual hint to current column edited. CellToSelect.Bottom := IndexRaw + 1; stgColumns.Options := stgColumns.Options + [goRangeSelect, goSelectionActive]; // So we can change current grid selection. stgColumns.Selection := CellToSelect; stgColumns.Options := stgColumns.Options - [goRangeSelect, goSelectionActive]; // To place it back like original author wanted. stgColumns.SetFocus; end; { TfrmOptionsCustomColumns.stgColumnsEditingDone } procedure TfrmOptionsCustomColumns.stgColumnsEditingDone(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.MenuFieldsClick } procedure TfrmOptionsCustomColumns.MenuFieldsClick(Sender: TObject); var MenuItem: TMenuItem absolute Sender; procedure UpdateCell(const AText: String); begin if Length(stgColumns.Cells[4, btnAdd.Tag]) = 0 then stgColumns.Cells[4, btnAdd.Tag] := AText else begin if StrEnds(stgColumns.Cells[4, btnAdd.Tag], ' ') then stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + AText else stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + ' ' + AText; end; end; begin if Length(stgColumns.Cells[1, btnAdd.Tag]) = 0 then begin case MenuItem.Tag of 0: stgColumns.Cells[1, btnAdd.Tag] := Copy(MenuItem.Caption, 1, Pos('(', MenuItem.Caption) - 3); 3: stgColumns.Cells[1, btnAdd.Tag] := Copy(MenuItem.Parent.Caption, 1, Pos('(', MenuItem.Parent.Caption) - 3); else stgColumns.Cells[1, btnAdd.Tag] := MenuItem.Caption; end; end; case MenuItem.Tag of 0: UpdateCell('[DC().' + MenuItem.Hint + '{}]'); 1: UpdateCell('[Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Hint + '{}]'); 2: UpdateCell('[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'); 3: UpdateCell('[DC().' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'); end; EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.EditorSaveResult } procedure TfrmOptionsCustomColumns.EditorSaveResult(Sender: TObject); begin if not FUpdating then begin if Sender is TSpinEdit then stgColumns.Cells[2, (Sender as TSpinEdit).Tag] := IntToStr(updWidth.Value); if Sender is TComboBox then stgColumns.Cells[3, (Sender as TComboBox).Tag] := (Sender as TComboBox).Text; if Sender is TEdit then stgColumns.Cells[4, (Sender as TEdit).Tag] := (Sender as TEdit).Text; UpdateColumnClass; end; end; { TfrmOptionsCustomColumns.CustomSomethingChanged } procedure TfrmOptionsCustomColumns.CustomSomethingChanged(Sender: TObject); begin if cbApplyChangeForAllColumns.Checked then btnAllForeColorClick(Sender) else EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.LoadCustColumn } procedure TfrmOptionsCustomColumns.LoadCustColumn(const Index: integer); var InnerUpdateStateToBeRestored: boolean; iRow: integer; begin if (Index >= stgColumns.RowCount - 1) or (Index < 0) then exit; IndexRaw := Index; ColPrm := TColPrm(stgColumns.Objects[6, IndexRaw + 1]); InnerUpdateStateToBeRestored := FUpdating; FUpdating := True; for iRow := 1 to pred(stgColumns.RowCount) do stgColumns.Cells[0, iRow] := strutils.ifthen(iRow = (IndexRaw + 1), '--->', EmptyStr); lblCurrentColumn.Caption := ColumnClass.GetColumnTitle(IndexRaw); edtFont.Text := ColumnClass.GetColumnFontName(IndexRaw); sneFontSize.Value := ColumnClass.GetColumnFontSize(IndexRaw); SetColorInColorBox(cbForeColor, ColumnClass.GetColumnTextColor(IndexRaw)); SetColorInColorBox(cbBackColor, ColumnClass.GetColumnBackground(IndexRaw)); SetColorInColorBox(cbBackColor2, ColumnClass.GetColumnBackground2(IndexRaw)); SetColorInColorBox(cbMarkColor, ColumnClass.GetColumnMarkColor(IndexRaw)); SetColorInColorBox(cbCursorColor, ColumnClass.GetColumnCursorColor(IndexRaw)); SetColorInColorBox(cbCursorText, ColumnClass.GetColumnCursorText(IndexRaw)); SetColorInColorBox(cbInactiveCursorColor, ColumnClass.GetColumnInactiveCursorColor(IndexRaw)); SetColorInColorBox(cbInactiveMarkColor, ColumnClass.GetColumnInactiveMarkColor(IndexRaw)); cbAllowOverColor.Checked := ColumnClass.GetColumnOvercolor(IndexRaw); cbUseInvertedSelection.Checked := ColumnClass.GetColumnUseInvertedSelection(IndexRaw); cbUseInactiveSelColor.Checked := ColumnClass.GetColumnUseInactiveSelColor(IndexRaw); FUpdating := InnerUpdateStateToBeRestored; end; { TfrmOptionsCustomColumns.chkUseCustomViewChange } procedure TfrmOptionsCustomColumns.chkUseCustomViewChange(Sender: TObject); begin pnlCommon.Visible:= chkUseCustomView.Checked; pnlCustomColumnsViewSettings.Visible := chkUseCustomView.Checked; btnGotoSetDefault.Visible := not chkUseCustomView.Checked; EditorSaveResult(nil); if chkUsecustomView.Checked then begin LoadCustColumn(0); cbCursorBorder.Checked:= gUseCursorBorder; cbCursorBorderChange(cbCursorBorder); SetColorInColorBox(cbCursorBorderColor, gColors.FilePanel^.CursorBorderColor); cbUseFrameCursor.Checked:= gUseFrameCursor; cbUseFrameCursorChange(cbUseFrameCursor); end; end; { TfrmOptionsCustomColumns.cbCursorBorderChange } procedure TfrmOptionsCustomColumns.cbCursorBorderChange(Sender: TObject); begin cbCursorBorderColor.Enabled := cbCursorBorder.Checked and cbCursorBorder.Enabled; btnCursorBorderColor.Enabled := cbCursorBorderColor.Enabled; btnResetCursorBorder.Enabled:= cbCursorBorderColor.Enabled; if cbCursorBorder.Checked and cbCursorBorder.Enabled then cbCursorBorderColor.Font.Color := clDefault else cbCursorBorderColor.Font.Color := clInactiveCaption; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorBorderColorChange } procedure TfrmOptionsCustomColumns.cbCursorBorderColorChange(Sender: TObject); begin if Assigned(ColPrm) then begin EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnCursorBorderColorClick } procedure TfrmOptionsCustomColumns.btnCursorBorderColorClick(Sender: TObject); begin dlgcolor.Color := cbCursorBorderColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorBorderColor, dlgcolor.Color); EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorBorderClick } procedure TfrmOptionsCustomColumns.btnResetCursorBorderClick(Sender: TObject); begin cbCursorBorder.Checked := gUseCursorBorder; SetColorInColorBox(cbCursorBorderColor, gColors.FilePanel^.CursorBorderColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbUseFrameCursorChange } procedure TfrmOptionsCustomColumns.cbUseFrameCursorChange(Sender: TObject); begin btnResetFrameCursor.Enabled := cbUseFrameCursor.Checked; cbCursorBorder.Enabled := not cbUseFrameCursor.Checked; lblCursorText.Enabled := not cbUseFrameCursor.Checked; cbCursorText.Enabled := not cbUseFrameCursor.Checked; btnCursorText.Enabled := not cbUseFrameCursor.Checked; btnResetCursorText.Enabled := not cbUseFrameCursor.Checked; btnAllCursorText.Enabled := not cbUseFrameCursor.Checked and not cbApplyChangeForAllColumns.Checked; btnResetCursorBorder.Enabled := not cbUseFrameCursor.Checked; if not cbUseFrameCursor.Checked then cbCursorText.Font.Color := clDefault else cbCursorText.Font.Color := clInactiveCaption; cbCursorBorderChange(cbCursorBorder); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.btnResetFrameCursorClick } procedure TfrmOptionsCustomColumns.btnResetFrameCursorClick(Sender: TObject); begin cbUseFrameCursor.Checked := gUseFrameCursor; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.btnPrevClick } procedure TfrmOptionsCustomColumns.btnPrevClick(Sender: TObject); begin if IndexRaw > 0 then LoadCustColumn(IndexRaw - 1) else LoadCustColumn(stgColumns.RowCount - 2); stgSetSelectionAsHintToUser; end; { TfrmOptionsCustomColumns.btnNextClick } procedure TfrmOptionsCustomColumns.btnNextClick(Sender: TObject); begin if IndexRaw < (stgColumns.RowCount - 2) then LoadCustColumn(IndexRaw + 1) else LoadCustColumn(0); stgSetSelectionAsHintToUser; end; { TfrmOptionsCustomColumns.cbApplyChangeForAllColumnsChange } procedure TfrmOptionsCustomColumns.cbApplyChangeForAllColumnsChange(Sender: TObject); begin if cbApplyChangeForAllColumns.Checked then begin btnAllBackColor.Enabled := False; btnAllBackColor2.Enabled := False; btnAllCursorColor.Enabled := False; btnAllCursorText.Enabled := False; btnAllFont.Enabled := False; btnAllInactiveCursorColor.Enabled := False; btnAllInactiveMarkColor.Enabled := False; btnAllMarkColor.Enabled := False; btnAllForeColor.Enabled := False; btnAllAllowOverColor.Enabled := False; btnAllUseInvertedSelection.Enabled := False; btnAllUseInactiveSelColor.Enabled := False; end else begin btnAllBackColor.Enabled := True; btnAllBackColor2.Enabled := True; btnAllCursorColor.Enabled := True; btnAllCursorText.Enabled := True; btnAllFont.Enabled := True; btnAllMarkColor.Enabled := True; btnAllForeColor.Enabled := True; btnAllAllowOverColor.Enabled := True; btnAllUseInvertedSelection.Enabled := True; btnAllUseInactiveSelColor.Enabled := True; btnAllInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; end; end; { TfrmOptionsCustomColumns.btnFontClick } procedure TfrmOptionsCustomColumns.btnFontClick(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin with TColPrm(stgColumns.Objects[6, IndexRaw + 1]) do begin dlgfont.Font.Name := FontName; dlgfont.Font.Size := FontSize; dlgfont.Font.Style := FontStyle; if dlgfont.Execute then begin edtFont.Text := dlgfont.Font.Name; sneFontSize.Value := dlgfont.Font.Size; FontName := dlgfont.Font.Name; FontSize := dlgfont.Font.Size; FontStyle := dlgfont.Font.Style; CustomSomethingChanged(Sender); end; end; end; end; { TfrmOptionsCustomColumns.sneFontSizeChange } procedure TfrmOptionsCustomColumns.sneFontSizeChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize := sneFontSize.Value; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetFontClick } procedure TfrmOptionsCustomColumns.btnResetFontClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontName := gFonts[dcfMain].Name; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize := gFonts[dcfMain].Size; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontStyle := gFonts[dcfMain].Style; edtFont.Text := gFonts[dcfMain].Name; sneFontSize.Value := gFonts[dcfMain].Size; CustomSomethingChanged(Sender); end; { TfrmOptionsCustomColumns.btnAllForeColorClick } procedure TfrmOptionsCustomColumns.btnAllForeColorClick(Sender: TObject); var i: integer; begin for i := 1 to pred(stgColumns.RowCount) do case TComponent(Sender).tag of 0: begin TColPrm(stgColumns.Objects[6, i]).FontName := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontName; TColPrm(stgColumns.Objects[6, i]).FontSize := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize; TColPrm(stgColumns.Objects[6, i]).FontStyle := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontStyle; end; 1: TColPrm(stgColumns.Objects[6, i]).TextColor := cbForeColor.Selected; 2: TColPrm(stgColumns.Objects[6, i]).Background := cbBackColor.Selected; 3: TColPrm(stgColumns.Objects[6, i]).Background2 := cbBackColor2.Selected; 4: TColPrm(stgColumns.Objects[6, i]).MarkColor := cbMarkColor.Selected; 5: TColPrm(stgColumns.Objects[6, i]).CursorColor := cbCursorColor.Selected; 6: TColPrm(stgColumns.Objects[6, i]).CursorText := cbCursorText.Selected; 7: TColPrm(stgColumns.Objects[6, i]).InactiveCursorColor := cbInactiveCursorColor.Selected; 8: TColPrm(stgColumns.Objects[6, i]).InactiveMarkColor := cbInactiveMarkColor.Selected; 9: TColPrm(stgColumns.Objects[6, i]).UseInvertedSelection := cbUseInvertedSelection.Checked; 10: TColPrm(stgColumns.Objects[6, i]).UseInactiveSelColor := cbUseInactiveSelColor.Checked; 11: TColPrm(stgColumns.Objects[6, i]).Overcolor := cbAllowOverColor.Checked; end; UpdateColumnClass; end; { TfrmOptionsCustomColumns.cbForeColorChange } procedure TfrmOptionsCustomColumns.cbForeColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.TextColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnForeColorClick } procedure TfrmOptionsCustomColumns.btnForeColorClick(Sender: TObject); begin dlgcolor.Color := cbForeColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbForeColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).TextColor := cbForeColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetForeColorClick } procedure TfrmOptionsCustomColumns.btnResetForeColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).TextColor := ForeColor; SetColorInColorBox(cbForeColor, ForeColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbBackColorChange } procedure TfrmOptionsCustomColumns.cbBackColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.Background := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnBackColorClick } procedure TfrmOptionsCustomColumns.btnBackColorClick(Sender: TObject); begin dlgcolor.Color := cbBackColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbBackColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background := cbBackColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetBackColorClick } procedure TfrmOptionsCustomColumns.btnResetBackColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background := BackColor; SetColorInColorBox(cbBackColor, BackColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbBackColor2Change } procedure TfrmOptionsCustomColumns.cbBackColor2Change(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.Background2 := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnBackColor2Click } procedure TfrmOptionsCustomColumns.btnBackColor2Click(Sender: TObject); begin dlgcolor.Color := cbBackColor2.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbBackColor2, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background2 := cbBackColor2.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetBackColor2Click } procedure TfrmOptionsCustomColumns.btnResetBackColor2Click(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background2 := BackColor2; SetColorInColorBox(cbBackColor2, BackColor2); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbMarkColorChange } procedure TfrmOptionsCustomColumns.cbMarkColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.MarkColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnMarkColorClick } procedure TfrmOptionsCustomColumns.btnMarkColorClick(Sender: TObject); begin dlgcolor.Color := cbMarkColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbMarkColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).MarkColor := cbMarkColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetMarkColorClick } procedure TfrmOptionsCustomColumns.btnResetMarkColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).MarkColor := MarkColor; SetColorInColorBox(cbMarkColor, MarkColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorColorChange } procedure TfrmOptionsCustomColumns.cbCursorColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.CursorColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnCursorColorClick } procedure TfrmOptionsCustomColumns.btnCursorColorClick(Sender: TObject); begin dlgcolor.Color := cbCursorColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorColor := cbCursorColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorColorClick } procedure TfrmOptionsCustomColumns.btnResetCursorColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorColor := CursorColor; SetColorInColorBox(cbCursorColor, CursorColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorTextChange } procedure TfrmOptionsCustomColumns.cbCursorTextChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.CursorText := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnCursorTextClick } procedure TfrmOptionsCustomColumns.btnCursorTextClick(Sender: TObject); begin dlgcolor.Color := cbCursorText.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorText, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorText := cbCursorText.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorTextClick } procedure TfrmOptionsCustomColumns.btnResetCursorTextClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorText := CursorText; SetColorInColorBox(cbCursorText, CursorText); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbInactiveCursorColorChange } procedure TfrmOptionsCustomColumns.cbInactiveCursorColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.InactiveCursorColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnInactiveCursorColorClick } procedure TfrmOptionsCustomColumns.btnInactiveCursorColorClick(Sender: TObject); begin dlgcolor.Color := cbInactiveCursorColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbInactiveCursorColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveCursorColor := cbInactiveCursorColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetInactiveCursorColorClick } procedure TfrmOptionsCustomColumns.btnResetInactiveCursorColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveCursorColor := InactiveCursorColor; SetColorInColorBox(cbInactiveCursorColor, InactiveCursorColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbInactiveMarkColorChange } procedure TfrmOptionsCustomColumns.cbInactiveMarkColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.InactiveMarkColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnInactiveMarkColorClick } procedure TfrmOptionsCustomColumns.btnInactiveMarkColorClick(Sender: TObject); begin dlgcolor.Color := cbInactiveMarkColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbInactiveMarkColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveMarkColor := cbInactiveMarkColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetInactiveMarkColorClick } procedure TfrmOptionsCustomColumns.btnResetInactiveMarkColorClick(Sender: TObject); begin with gColors.FilePanel^ do begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveMarkColor := InactiveMarkColor; SetColorInColorBox(cbInactiveMarkColor, InactiveMarkColor); end; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbUseInvertedSelectionChange } procedure TfrmOptionsCustomColumns.cbUseInvertedSelectionChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).UseInvertedSelection := cbUseInvertedSelection.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetUseInvertedSelectionClick } procedure TfrmOptionsCustomColumns.btnResetUseInvertedSelectionClick(Sender: TObject); begin cbUseInvertedSelection.Checked := gUseInvertedSelection; cbUseInvertedSelectionChange(cbUseInvertedSelection); end; { TfrmOptionsCustomColumns.cbUseInactiveSelColorChange } procedure TfrmOptionsCustomColumns.cbUseInactiveSelColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin lblInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; cbInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnResetInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; lblInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; cbInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnResetInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).UseInactiveSelColor := cbUseInactiveSelColor.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetUseInactiveSelColorClick } procedure TfrmOptionsCustomColumns.btnResetUseInactiveSelColorClick(Sender: TObject); begin cbUseInactiveSelColor.Checked := gUSeInactiveSelColor; cbUseInactiveSelColorChange(cbUseInactiveSelColor); end; { TfrmOptionsCustomColumns.cbAllowOvercolorChange } procedure TfrmOptionsCustomColumns.cbAllowOvercolorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Overcolor := cbAllowOverColor.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetAllowOverColorClick } procedure TfrmOptionsCustomColumns.btnResetAllowOverColorClick(Sender: TObject); begin cbAllowOverColor.Checked := gAllowOverColor; cbAllowOvercolorChange(cbAllowOverColor); end; { TfrmOptionsCustomColumns.pnlLeftEnter } procedure TfrmOptionsCustomColumns.pnlLeftEnter(Sender: TObject); begin PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsCustomColumns.pnlRightEnter } procedure TfrmOptionsCustomColumns.pnlRightEnter(Sender: TObject); begin PreviewLeftPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsCustomColumns.OnColumnResized } procedure TfrmOptionsCustomColumns.OnColumnResized(Sender: TObject; ColumnIndex: integer; ColumnNewsize: integer); begin if ColumnIndex < pred(stgColumns.RowCount) then begin stgColumns.Cells[2, 1 + ColumnIndex] := IntToStr(ColumnNewSize); EditorSaveResult(Sender); //To like everywhere here, but it's not absolutely necessary... end; end; end. doublecmd-1.1.30/src/frames/foptionscustomcolumns.lrj0000644000175000001440000003677215104114162022056 0ustar alexxusers{"version":1,"strings":[ {"hash":253705818,"name":"tfrmoptionscustomcolumns.lblconfigcolumns.caption","sourcebytes":[38,67,111,108,117,109,110,115,32,118,105,101,119,58],"value":"&Columns view:"}, {"hash":231000124,"name":"tfrmoptionscustomcolumns.cbconfigcolumns.text","sourcebytes":[71,101,110,101,114,97,108],"value":"General"}, {"hash":366789,"name":"tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":93079605,"name":"tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":160200403,"name":"tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption","sourcebytes":[83,97,118,101,32,97,115],"value":"Save as"}, {"hash":179055749,"name":"tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"}, {"hash":21703,"name":"tfrmoptionscustomcolumns.btnnewconfig.caption","sourcebytes":[78,101,119],"value":"New"}, {"hash":31100250,"name":"tfrmoptionscustomcolumns.lblfilesystem.caption","sourcebytes":[38,70,105,108,101,32,115,121,115,116,101,109,58],"value":"&File system:"}, {"hash":59568839,"name":"tfrmoptionscustomcolumns.chkusecustomview.caption","sourcebytes":[85,115,101,32,99,117,115,116,111,109,32,102,111,110,116,32,97,110,100,32,99,111,108,111,114,32,102,111,114,32,116,104,105,115,32,118,105,101,119],"value":"Use custom font and color for this view"}, {"hash":193682404,"name":"tfrmoptionscustomcolumns.btngotosetdefault.caption","sourcebytes":[71,111,32,116,111,32,115,101,116,32,100,101,102,97,117,108,116],"value":"Go to set default"}, {"hash":207563970,"name":"tfrmoptionscustomcolumns.cbcursorborder.caption","sourcebytes":[67,117,114,115,111,114,32,98,111,114,100,101,114],"value":"Cursor border"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btncursorbordercolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetcursorborder.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetcursorborder.caption","sourcebytes":[82],"value":"R"}, {"hash":7427170,"name":"tfrmoptionscustomcolumns.cbuseframecursor.caption","sourcebytes":[85,115,101,32,70,114,97,109,101,32,67,117,114,115,111,114],"value":"Use Frame Cursor"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetframecursor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetframecursor.caption","sourcebytes":[82],"value":"R"}, {"hash":147653555,"name":"tfrmoptionscustomcolumns.btnprev.caption","sourcebytes":[80,114,101,118,105,111,117,115],"value":"Previous"}, {"hash":347380,"name":"tfrmoptionscustomcolumns.btnnext.caption","sourcebytes":[78,101,120,116],"value":"Next"}, {"hash":5072250,"name":"tfrmoptionscustomcolumns.lblfontname.caption","sourcebytes":[70,111,110,116,58],"value":"Font:"}, {"hash":12558,"name":"tfrmoptionscustomcolumns.btnfont.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":5902474,"name":"tfrmoptionscustomcolumns.lblfontsize.caption","sourcebytes":[83,105,122,101,58],"value":"Size:"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetfont.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetfont.caption","sourcebytes":[82],"value":"R"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallfont.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallfont.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":266427794,"name":"tfrmoptionscustomcolumns.cballowovercolor.caption","sourcebytes":[65,108,108,111,119,32,79,118,101,114,99,111,108,111,114],"value":"Allow Overcolor"}, {"hash":81852730,"name":"tfrmoptionscustomcolumns.lblforecolor.caption","sourcebytes":[84,101,120,116,32,67,111,108,111,114,58],"value":"Text Color:"}, {"hash":249486730,"name":"tfrmoptionscustomcolumns.lblbackcolor.caption","sourcebytes":[66,97,99,107,71,114,111,117,110,100,58],"value":"BackGround:"}, {"hash":249462154,"name":"tfrmoptionscustomcolumns.lblbackcolor2.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,32,50,58],"value":"Background 2:"}, {"hash":81247882,"name":"tfrmoptionscustomcolumns.lblmarkcolor.caption","sourcebytes":[77,97,114,107,32,67,111,108,111,114,58],"value":"Mark Color:"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btnforecolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btnbackcolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btnbackcolor2.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btnmarkcolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetmarkcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetmarkcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetbackcolor2.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetbackcolor2.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetbackcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetbackcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetforecolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetforecolor.caption","sourcebytes":[82],"value":"R"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallforecolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallforecolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallbackcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallbackcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallbackcolor2.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallbackcolor2.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallmarkcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallmarkcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":132983626,"name":"tfrmoptionscustomcolumns.lblinactivemarkcolor.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,77,97,114,107,32,67,111,108,111,114,58],"value":"Inactive Mark Color:"}, {"hash":83514154,"name":"tfrmoptionscustomcolumns.lblinactivecursorcolor.caption","sourcebytes":[73,110,97,99,116,105,118,101,32,67,117,114,115,111,114,32,67,111,108,111,114,58],"value":"Inactive Cursor Color:"}, {"hash":16143642,"name":"tfrmoptionscustomcolumns.lblcursortext.caption","sourcebytes":[67,117,114,115,111,114,32,84,101,120,116,58],"value":"Cursor Text:"}, {"hash":242061402,"name":"tfrmoptionscustomcolumns.lblcursorcolor.caption","sourcebytes":[67,117,114,115,111,114,32,67,111,108,111,114,58],"value":"Cursor Color:"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btninactivemarkcolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btninactivecursorcolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btncursortext.caption","sourcebytes":[62,62],"value":">>"}, {"hash":1054,"name":"tfrmoptionscustomcolumns.btncursorcolor.caption","sourcebytes":[62,62],"value":">>"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetcursortext.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetcursortext.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetcursorcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetcursorcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallcursorcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallcursorcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallcursortext.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallcursortext.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":218952766,"name":"tfrmoptionscustomcolumns.cbuseinvertedselection.caption","sourcebytes":[85,115,101,32,73,110,118,101,114,116,101,100,32,83,101,108,101,99,116,105,111,110],"value":"Use Inverted Selection"}, {"hash":120988962,"name":"tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption","sourcebytes":[85,115,101,32,73,110,97,99,116,105,118,101,32,83,101,108,101,99,116,105,111,110,32,67,111,108,111,114],"value":"Use Inactive Selection Color"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnalluseinvertedselection.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnalluseinvertedselection.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":8810707,"name":"tfrmoptionscustomcolumns.btnallallowovercolor.hint","sourcebytes":[65,112,112,108,121,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,111,32,97,108,108,32,99,111,108,117,109,110,115],"value":"Apply modification to all columns"}, {"hash":18476,"name":"tfrmoptionscustomcolumns.btnallallowovercolor.caption","sourcebytes":[65,108,108],"value":"All"}, {"hash":26994442,"name":"tfrmoptionscustomcolumns.lblworkingcolumn.caption","sourcebytes":[83,101,116,116,105,110,103,115,32,102,111,114,32,99,111,108,117,109,110,58],"value":"Settings for column:"}, {"hash":141213869,"name":"tfrmoptionscustomcolumns.lblcurrentcolumn.caption","sourcebytes":[91,67,117,114,114,101,110,116,32,67,111,108,117,109,110,32,78,97,109,101,93],"value":"[Current Column Name]"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetallowovercolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetallowovercolor.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption","sourcebytes":[82],"value":"R"}, {"hash":115259332,"name":"tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint","sourcebytes":[82,101,115,101,116,32,116,111,32,100,101,102,97,117,108,116],"value":"Reset to default"}, {"hash":82,"name":"tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption","sourcebytes":[82],"value":"R"}, {"hash":187433363,"name":"tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption","sourcebytes":[87,104,101,110,32,99,108,105,99,107,105,110,103,32,116,111,32,99,104,97,110,103,101,32,115,111,109,101,116,104,105,110,103,44,32,99,104,97,110,103,101,32,102,111,114,32,97,108,108,32,99,111,108,117,109,110,115],"value":"When clicking to change something, change for all columns"}, {"hash":97427902,"name":"tfrmoptionscustomcolumns.lblpreviewtop.caption","sourcebytes":[66,101,108,111,119,32,105,115,32,97,32,112,114,101,118,105,101,119,46,32,89,111,117,32,109,97,121,32,109,111,118,101,32,99,117,114,115,111,114,32,97,110,100,32,115,101,108,101,99,116,32,102,105,108,101,115,32,116,111,32,103,101,116,32,105,109,109,101,100,105,97,116,101,108,121,32,97,110,32,97,99,116,117,97,108,32,108,111,111,107,32,97,110,100,32,102,101,101,108,32,111,102,32,116,104,101,32,118,97,114,105,111,117,115,32,115,101,116,116,105,110,103,115,46],"value":"Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings."}, {"hash":111297118,"name":"tfrmoptionscustomcolumns.miaddcolumn.caption","sourcebytes":[65,100,100,32,99,111,108,117,109,110],"value":"Add column"} ]} doublecmd-1.1.30/src/frames/foptionscustomcolumns.lfm0000644000175000001440000012325115104114162022032 0ustar alexxusersinherited frmOptionsCustomColumns: TfrmOptionsCustomColumns Height = 596 Width = 1070 HelpKeyword = '/configuration.html#ConfigColumns' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 596 ClientWidth = 1070 ParentShowHint = False ShowHint = True DesignLeft = 328 DesignTop = 134 object pnlConfigColumns: TPanel[0] Left = 4 Height = 31 Top = 4 Width = 1062 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 31 ClientWidth = 1062 TabOrder = 0 object lblConfigColumns: TLabel AnchorSideLeft.Control = cmbFileSystem AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideTop.Side = asrCenter Left = 177 Height = 15 Top = 8 Width = 78 BorderSpacing.Left = 6 BorderSpacing.Right = 2 Caption = '&Columns view:' FocusControl = cbConfigColumns ParentColor = False end object cbConfigColumns: TComboBox AnchorSideLeft.Control = lblConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlConfigColumns AnchorSideRight.Side = asrBottom Left = 261 Height = 23 Top = 4 Width = 317 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 4 Constraints.MaxWidth = 440 Font.Style = [fsBold] ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'General' ) OnChange = cbConfigColumnsChange ParentFont = False Style = csDropDownList TabOrder = 1 Text = 'General' end object btnSaveConfigColumns: TButton Tag = 1 AnchorSideLeft.Control = cbConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Control = btnRenameConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 582 Height = 23 Top = 4 Width = 50 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Save' OnClick = btnSaveConfigColumnsClick TabOrder = 2 end object btnRenameConfigColumns: TButton Tag = 4 AnchorSideLeft.Control = btnNewConfig AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 758 Height = 23 Top = 4 Width = 69 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Rename' OnClick = btnSaveConfigColumnsClick TabOrder = 5 end object btnSaveAsConfigColumns: TButton Tag = 2 AnchorSideLeft.Control = btnSaveConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 636 Height = 23 Top = 4 Width = 64 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Save as' OnClick = btnSaveConfigColumnsClick TabOrder = 3 end object btnDeleteConfigColumns: TButton AnchorSideLeft.Control = btnRenameConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 831 Height = 23 Top = 4 Width = 59 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = '&Delete' OnClick = btnDeleteConfigColumnsClick TabOrder = 6 end object btnNewConfig: TButton Tag = 3 AnchorSideLeft.Control = btnSaveAsConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 704 Height = 23 Top = 4 Width = 50 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'New' OnClick = btnSaveConfigColumnsClick TabOrder = 4 end object cmbFileSystem: TComboBox AnchorSideLeft.Control = lblFileSystem AnchorSideLeft.Side = asrBottom Left = 71 Height = 23 Top = 4 Width = 100 BorderSpacing.Left = 6 ItemHeight = 15 OnChange = cmbFileSystemChange Style = csDropDownList TabOrder = 0 end object lblFileSystem: TLabel Left = 4 Height = 15 Top = 9 Width = 61 Caption = '&File system:' ParentColor = False end end object pnlActualCont: TPanel[1] Left = 4 Height = 557 Top = 35 Width = 1062 Align = alClient Anchors = [akTop, akLeft, akBottom] ClientHeight = 557 ClientWidth = 1062 TabOrder = 1 object pnlGeneralColumnsViewSettings: TPanel Left = 1 Height = 33 Top = 156 Width = 1060 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 4 ClientHeight = 33 ClientWidth = 1060 TabOrder = 2 object chkUseCustomView: TCheckBox AnchorSideLeft.Control = pnlGeneralColumnsViewSettings AnchorSideTop.Control = pnlCommon AnchorSideTop.Side = asrCenter Left = 8 Height = 19 Top = 9 Width = 239 Caption = 'Use custom font and color for this view' Font.Style = [fsBold] OnChange = chkUseCustomViewChange ParentFont = False TabOrder = 0 end object btnGotoSetDefault: TButton AnchorSideLeft.Control = pnlCommon AnchorSideLeft.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 806 Height = 25 Top = 4 Width = 113 AutoSize = True BorderSpacing.Left = 7 Caption = 'Go to set default' OnClick = btnGotoSetDefaultClick TabOrder = 1 Visible = False end object pnlCommon: TPanel AnchorSideLeft.Control = chkUseCustomView AnchorSideLeft.Side = asrBottom Left = 282 Height = 22 Top = 7 Width = 517 AutoSize = True BorderSpacing.Left = 35 BevelOuter = bvNone ClientHeight = 22 ClientWidth = 517 TabOrder = 2 object cbCursorBorder: TCheckBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter Left = 35 Height = 19 Top = 2 Width = 93 BorderSpacing.Left = 35 Caption = 'Cursor border' OnChange = cbCursorBorderChange TabOrder = 0 end object cbCursorBorderColor: TColorBox AnchorSideLeft.Control = cbCursorBorder AnchorSideLeft.Side = asrBottom Left = 128 Height = 22 Top = 0 Width = 144 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] ItemHeight = 16 OnChange = cbCursorBorderColorChange TabOrder = 1 end object btnCursorBorderColor: TButton AnchorSideLeft.Control = cbCursorBorderColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 273 Height = 22 Top = 0 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorBorderColorClick TabOrder = 2 end object btnResetCursorBorder: TButton AnchorSideLeft.Control = btnCursorBorderColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCursorBorderColor AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 302 Height = 22 Hint = 'Reset to default' Top = 0 Width = 33 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetCursorBorderClick TabOrder = 3 end object cbUseFrameCursor: TCheckBox AnchorSideLeft.Control = btnResetCursorBorder AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter Left = 370 Height = 19 Top = 2 Width = 113 BorderSpacing.Left = 35 Caption = 'Use Frame Cursor' OnChange = cbUseFrameCursorChange TabOrder = 4 end object btnResetFrameCursor: TButton AnchorSideLeft.Control = cbUseFrameCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCursorBorderColor AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 484 Height = 22 Hint = 'Reset to default' Top = 0 Width = 33 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetFrameCursorClick TabOrder = 5 end end end object stgColumns: TStringGrid Left = 1 Height = 140 Top = 1 Width = 1060 Align = alTop ColCount = 7 Constraints.MinHeight = 80 FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goSmoothScroll] PopupMenu = pmStringGrid RowCount = 3 TabOrder = 0 OnEditingDone = stgColumnsEditingDone OnKeyDown = stgColumnsKeyDown OnMouseDown = stgColumnsMouseDown OnMouseMove = stgColumnsMouseMove OnSelectEditor = stgColumnsSelectEditor ColWidths = ( 67 129 64 61 457 38 72 ) Cells = ( 7 0 0 'Column' 1 0 'Caption' 2 0 'Width' 3 0 'Align' 4 0 'Field contents' 5 0 'Move' 6 0 'Delete' ) end object spGridArea: TSplitter Cursor = crVSplit Left = 1 Height = 15 Top = 141 Width = 1060 Align = alTop Beveled = True MinSize = 15 ResizeAnchor = akTop end object pnlCustomColumnsViewSettings: TPanel Left = 1 Height = 179 Top = 189 Width = 1060 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 179 ClientWidth = 1060 TabOrder = 3 Visible = False object btnPrev: TButton AnchorSideLeft.Control = pnlCustomColumnsViewSettings AnchorSideTop.Control = pnlCustomColumnsViewSettings AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 8 Height = 25 Top = 0 Width = 71 Caption = 'Previous' OnClick = btnPrevClick TabOrder = 0 end object btnNext: TButton AnchorSideLeft.Control = btnPrev AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 79 Height = 25 Top = 0 Width = 50 AutoSize = True Caption = 'Next' OnClick = btnNextClick TabOrder = 1 end object lblFontName: TLabel AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edtFont Left = 51 Height = 15 Top = 34 Width = 27 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Font:' ParentColor = False end object edtFont: TEdit AnchorSideLeft.Control = btnNext AnchorSideTop.Control = btnNext AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFont Left = 79 Height = 23 Top = 30 Width = 301 BorderSpacing.Top = 5 BorderSpacing.Right = 1 ReadOnly = True TabOrder = 3 end object btnFont: TBitBtn AnchorSideLeft.Control = edtFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 381 Height = 22 Top = 30 Width = 40 BorderSpacing.Bottom = 2 Caption = '...' OnClick = btnFontClick TabOrder = 4 end object lblFontSize: TLabel AnchorSideLeft.Control = btnFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnFont AnchorSideTop.Side = asrCenter Left = 425 Height = 15 Top = 34 Width = 23 BorderSpacing.Left = 4 Caption = 'Size:' ParentColor = False end object sneFontSize: TSpinEdit AnchorSideLeft.Control = lblFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 452 Height = 23 Top = 30 Width = 48 BorderSpacing.Left = 4 MaxValue = 25 MinValue = 8 OnChange = sneFontSizeChange TabOrder = 5 Value = 8 end object btnResetFont: TButton AnchorSideLeft.Control = sneFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 501 Height = 22 Hint = 'Reset to default' Top = 30 Width = 33 BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetFontClick TabOrder = 6 end object btnAllFont: TButton AnchorSideLeft.Control = btnResetFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter Left = 535 Height = 22 Hint = 'Apply modification to all columns' Top = 30 Width = 40 BorderSpacing.Left = 1 Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 7 end object cbAllowOverColor: TCheckBox Tag = 11 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetAllowOverColor Left = 863 Height = 19 Top = 153 Width = 105 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Allow Overcolor' OnChange = cbAllowOvercolorChange TabOrder = 46 end object lblForeColor: TLabel Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbForeColor Left = 105 Height = 15 Top = 59 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'Text Color:' ParentColor = False end object lblBackColor: TLabel Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 93 Height = 15 Top = 83 Width = 68 Anchors = [akTop, akRight] Caption = 'BackGround:' ParentColor = False end object lblBackColor2: TLabel Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 85 Height = 15 Top = 107 Width = 76 Anchors = [akTop, akRight] Caption = 'Background 2:' ParentColor = False end object lblMarkColor: TLabel Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 99 Height = 15 Top = 131 Width = 62 Anchors = [akTop, akRight] Caption = 'Mark Color:' ParentColor = False end object cbMarkColor: TColorBox Tag = 4 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 127 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbMarkColorChange TabOrder = 20 end object cbBackColor2: TColorBox Tag = 3 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 103 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbBackColor2Change TabOrder = 16 end object cbBackColor: TColorBox Tag = 2 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 79 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbBackColorChange TabOrder = 12 end object cbForeColor: TColorBox Tag = 1 AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnForeColor Left = 167 Height = 22 Top = 55 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 1 ItemHeight = 16 OnChange = cbForeColorChange ParentFont = False TabOrder = 8 end object btnForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor Left = 318 Height = 22 Top = 55 Width = 28 Anchors = [akTop, akRight] BorderSpacing.Right = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnForeColorClick TabOrder = 9 end object btnBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 79 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColorClick TabOrder = 13 end object btnBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 103 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColor2Click TabOrder = 17 end object btnMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 127 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnMarkColorClick TabOrder = 21 end object btnResetMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 127 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetMarkColorClick TabOrder = 22 end object btnResetBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 103 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetBackColor2Click TabOrder = 18 end object btnResetBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 79 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetBackColorClick TabOrder = 14 end object btnResetForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllForeColor AnchorSideBottom.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 55 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetForeColorClick TabOrder = 10 end object btnAllForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 55 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 11 end object btnAllBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 79 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 15 end object btnAllBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 103 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 19 end object btnAllMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 127 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 23 end object lblInactiveMarkColor: TLabel Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 676 Height = 15 Top = 131 Width = 106 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Inactive Mark Color:' ParentColor = False end object lblInactiveCursorColor: TLabel Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 669 Height = 15 Top = 107 Width = 114 Anchors = [akTop, akRight] Caption = 'Inactive Cursor Color:' ParentColor = False end object lblCursorText: TLabel Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 721 Height = 15 Top = 83 Width = 62 Anchors = [akTop, akRight] Caption = 'Cursor Text:' ParentColor = False end object lblCursorColor: TLabel Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor Left = 713 Height = 15 Top = 59 Width = 70 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'Cursor Color:' ParentColor = False end object cbCursorColor: TColorBox Tag = 5 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor Left = 789 Height = 22 Top = 55 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Right = 1 ItemHeight = 16 OnChange = cbCursorColorChange TabOrder = 24 end object cbCursorText: TColorBox Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 789 Height = 22 Top = 79 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbCursorTextChange TabOrder = 28 end object cbInactiveCursorColor: TColorBox Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 789 Height = 22 Top = 103 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbInactiveCursorColorChange TabOrder = 32 end object cbInactiveMarkColor: TColorBox Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 789 Height = 22 Top = 127 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbInactiveMarkColorChange TabOrder = 36 end object btnInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 940 Height = 22 Top = 127 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveMarkColorClick TabOrder = 37 end object btnInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 940 Height = 22 Top = 103 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveCursorColorClick TabOrder = 33 end object btnCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 940 Height = 22 Top = 79 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorTextClick TabOrder = 29 end object btnCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor Left = 940 Height = 22 Top = 55 Width = 28 Anchors = [akTop, akRight] BorderSpacing.Right = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorColorClick TabOrder = 25 end object btnResetInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 969 Height = 22 Hint = 'Reset to default' Top = 103 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetInactiveCursorColorClick TabOrder = 34 end object btnResetCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 969 Height = 22 Hint = 'Reset to default' Top = 79 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetCursorTextClick TabOrder = 30 end object btnResetCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor Left = 969 Height = 22 Hint = 'Reset to default' Top = 55 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetCursorColorClick TabOrder = 26 end object btnAllCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 1003 Height = 22 Hint = 'Apply modification to all columns' Top = 55 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 27 end object btnAllCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 1003 Height = 22 Hint = 'Apply modification to all columns' Top = 79 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 31 end object btnAllInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 1003 Height = 22 Hint = 'Apply modification to all columns' Top = 103 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 35 end object btnAllInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 1003 Height = 22 Hint = 'Apply modification to all columns' Top = 127 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 39 end object btnResetInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 969 Height = 22 Hint = 'Reset to default' Top = 127 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetInactiveMarkColorClick TabOrder = 38 end object cbUseInvertedSelection: TCheckBox Tag = 9 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetUseInvertedSelection Left = 111 Height = 19 Top = 153 Width = 136 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Use Inverted Selection' OnChange = cbUseInvertedSelectionChange TabOrder = 40 end object cbUseInactiveSelColor: TCheckBox Tag = 10 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetUseInactiveSelColor Left = 582 Height = 19 Top = 153 Width = 166 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Use Inactive Selection Color' OnChange = cbUseInactiveSelColorChange TabOrder = 43 end object btnAllUseInvertedSelection: TButton Tag = 9 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbMarkColor AnchorSideRight.Side = asrBottom Left = 282 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 35 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 42 end object btnAllUseInactiveSelColor: TButton Tag = 10 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbAllowOverColor Left = 783 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 40 Anchors = [akTop, akRight] BorderSpacing.Right = 40 Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 45 end object btnAllAllowOverColor: TButton Tag = 11 AnchorSideTop.Control = btnAllInactiveMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 1003 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 40 Anchors = [akTop, akRight] BorderSpacing.Top = 2 BorderSpacing.Bottom = 6 Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 48 end object lblWorkingColumn: TLabel AnchorSideLeft.Control = btnNext AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter Left = 134 Height = 15 Top = 5 Width = 113 BorderSpacing.Left = 5 Caption = 'Settings for column:' Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblCurrentColumn: TLabel AnchorSideLeft.Control = lblWorkingColumn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter Left = 250 Height = 15 Top = 5 Width = 132 BorderSpacing.Left = 3 Caption = '[Current Column Name]' Font.Style = [fsBold] ParentColor = False ParentFont = False end object btnResetAllowOverColor: TButton Tag = 11 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 969 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetAllowOverColorClick TabOrder = 47 end object btnResetUseInvertedSelection: TButton Tag = 9 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllUseInvertedSelection Left = 248 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetUseInvertedSelectionClick TabOrder = 41 end object btnResetUseInactiveSelColor: TButton Tag = 10 AnchorSideLeft.Control = btnCursorColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllUseInactiveSelColor Left = 749 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetUseInactiveSelColorClick TabOrder = 44 end object cbApplyChangeForAllColumns: TCheckBox AnchorSideLeft.Control = sneFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 500 Height = 19 Top = 3 Width = 338 Caption = 'When clicking to change something, change for all columns' OnChange = cbApplyChangeForAllColumnsChange TabOrder = 2 end end object pnlPreviewCont: TKASToolPanel Left = 1 Height = 188 Top = 368 Width = 1060 Align = alClient ChildSizing.LeftRightSpacing = 8 TabOrder = 4 object lblPreviewTop: TDividerBevel Left = 8 Height = 15 Top = 8 Width = 1044 Caption = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.' Align = alTop BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Font.Style = [fsBold] ParentColor = False ParentFont = False Style = gsHorLines end object pnlLeft: TPanel Left = 8 Height = 165 Top = 15 Width = 437 Align = alLeft BorderSpacing.Bottom = 8 BevelOuter = bvNone Constraints.MinWidth = 50 ParentColor = False TabOrder = 0 OnEnter = pnlLeftEnter end object pnlRight: TPanel Left = 456 Height = 165 Top = 15 Width = 596 Align = alClient BorderSpacing.Bottom = 8 BevelOuter = bvNone Constraints.MinWidth = 50 ParentColor = False TabOrder = 2 OnEnter = pnlRightEnter end object spltBetweenPanels: TSplitter Left = 445 Height = 173 Top = 15 Width = 11 end end end object pmStringGrid: TPopupMenu[2] left = 48 top = 72 object miAddColumn: TMenuItem Caption = 'Add column' OnClick = miAddColumnClick end end object pmFields: TPopupMenu[3] left = 136 top = 72 end object dlgfont: TFontDialog[4] MinFontSize = 0 MaxFontSize = 0 left = 216 top = 72 end object dlgcolor: TColorDialog[5] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) left = 304 top = 72 end end doublecmd-1.1.30/src/frames/foptionsconfiguration.pas0000644000175000001440000001655115104114162021777 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Configuration options page Copyright (C) 2006-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsConfiguration; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, Buttons, ExtCtrls; type { TfrmOptionsConfiguration } TfrmOptionsConfiguration = class(TOptionsEditor) btnConfigApply: TBitBtn; btnConfigEdit: TBitBtn; cbCmdLineHistory: TCheckBox; cbDirHistory: TCheckBox; cbFileMaskHistory: TCheckBox; chkWindowState: TCheckBox; chkFolderTabs: TCheckBox; chkSaveConfiguration: TCheckBox; chkSearchReplaceHistory: TCheckBox; edtHighlighters: TEdit; edtThumbCache: TEdit; edtIconThemes: TEdit; gbLocConfigFiles: TGroupBox; gbSaveOnExit: TGroupBox; gbDirectories: TGroupBox; lblIconThemes: TLabel; lblHighlighters: TLabel; lblThumbCache: TLabel; lblCmdLineConfigDir: TLabel; gbSortOrderConfigurationOption: TRadioGroup; gpConfigurationTreeState: TRadioGroup; rbProgramDir: TRadioButton; rbUserHomeDir: TRadioButton; procedure btnConfigApplyClick(Sender: TObject); procedure btnConfigEditClick(Sender: TObject); procedure chkSaveConfigurationChange(Sender: TObject); procedure gbSortOrderConfigurationOptionClick(Sender: TObject); procedure gpConfigurationTreeStateClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses Forms, DCStrUtils, uGlobs, uGlobsPaths, uShowForm, uOSUtils, uLng, fOptions, uSysFolders; { TfrmOptionsConfiguration } procedure TfrmOptionsConfiguration.btnConfigApplyClick(Sender: TObject); begin if LoadConfig then // force reloading config from file begin LoadGlobs; OptionsDialog.LoadSettings; btnConfigApply.Enabled:= False; end else begin gSaveConfiguration := False; Application.Terminate; end; end; procedure TfrmOptionsConfiguration.btnConfigEditClick(Sender: TObject); begin ShowEditorByGlob(gpCfgDir + 'doublecmd.xml'); btnConfigApply.Enabled:= True; end; procedure TfrmOptionsConfiguration.chkSaveConfigurationChange(Sender: TObject); begin chkWindowState.Enabled:= chkSaveConfiguration.Checked; chkFolderTabs.Enabled:= chkSaveConfiguration.Checked; cbDirHistory.Enabled:= chkSaveConfiguration.Checked; cbCmdLineHistory.Enabled:= chkSaveConfiguration.Checked; cbFileMaskHistory.Enabled:= chkSaveConfiguration.Checked; chkSearchReplaceHistory.Enabled := chkSaveConfiguration.Checked; end; procedure TfrmOptionsConfiguration.gbSortOrderConfigurationOptionClick(Sender: TObject); begin //Exceptionnally for THIS setting, let's apply it immediately, even before quiting since the effect is... in the configuration area, just where we are at this moment! gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(gbSortOrderConfigurationOption.ItemIndex); SortConfigurationOptionsOnLeftTree; end; { TfrmOptionsConfiguration.gpConfigurationTreeStateClick } procedure TfrmOptionsConfiguration.gpConfigurationTreeStateClick(Sender: TObject); begin //Exceptionnally for THIS setting, let's apply it immediately, even before quiting since the effect is... in the configuration area, just where we are at this moment! gCollapseConfigurationOptionsTree := TConfigurationTreeState(gpConfigurationTreeState.ItemIndex); if GetOptionsForm<>nil then begin case gCollapseConfigurationOptionsTree of ctsFullExpand : GetOptionsForm.tvTreeView.FullExpand; ctsFullCollapse: GetOptionsForm.tvTreeView.FullCollapse; end; end; end; class function TfrmOptionsConfiguration.GetIconIndex: Integer; begin Result := 11; end; class function TfrmOptionsConfiguration.GetTitle: String; begin Result := rsOptionsEditorConfiguration; end; procedure TfrmOptionsConfiguration.Init; begin if gpCmdLineCfgDir = '' then begin rbProgramDir.Caption:= rbProgramDir.Caption + ' - [' + IncludeTrailingPathDelimiter(gpGlobalCfgDir) + ']'; rbUserHomeDir.Caption:= rbUserHomeDir.Caption + ' - [' + IncludeTrailingPathDelimiter(GetAppConfigDir) + ']'; end else begin rbProgramDir.Visible := False; rbProgramDir.Enabled := False; rbUserHomeDir.Visible := False; rbUserHomeDir.Enabled := False; lblCmdLineConfigDir.Visible := True; lblCmdLineConfigDir.Caption := lblCmdLineConfigDir.Caption + ' - [' + IncludeTrailingPathDelimiter(gpCmdLineCfgDir) + ']'; end; ParseLineToList(rsOptConfigSortOrder, gbSortOrderConfigurationOption.Items); ParseLineToList(rsOptConfigTreeState, gpConfigurationTreeState.Items); end; procedure TfrmOptionsConfiguration.Load; begin if gUseConfigInProgramDirNew then rbProgramDir.Checked := True else rbUserHomeDir.Checked := True; edtThumbCache.Text:= gpThumbCacheDir; edtIconThemes.Text:= EmptyStr; if not gUseConfigInProgramDir then begin edtIconThemes.Text:= IncludeTrailingBackslash(GetAppDataDir) + 'pixmaps' + PathSep; end; edtIconThemes.Text:= edtIconThemes.Text + ExcludeTrailingPathDelimiter(gpPixmapPath); edtHighlighters.Text:= EmptyStr; if not gUseConfigInProgramDir then begin edtHighlighters.Text:= IncludeTrailingBackslash(GetAppDataDir) + 'highlighters' + PathSep; end; edtHighlighters.Text:= edtHighlighters.Text + ExcludeTrailingPathDelimiter(gpHighPath); chkSaveConfiguration.Checked:= gSaveConfiguration; chkSaveConfigurationChange(chkSaveConfiguration); chkWindowState.Checked:= gSaveWindowState; chkFolderTabs.Checked:= gSaveFolderTabs; chkSearchReplaceHistory.Checked:= gSaveSearchReplaceHistory; cbDirHistory.Checked := gSaveDirHistory; cbCmdLineHistory.Checked := gSaveCmdLineHistory; cbFileMaskHistory.Checked := gSaveFileMaskHistory; gbSortOrderConfigurationOption.ItemIndex:=Integer(gSortOrderOfConfigurationOptionsTree); gpConfigurationTreeState.ItemIndex := Integer(gCollapseConfigurationOptionsTree); end; function TfrmOptionsConfiguration.Save: TOptionsEditorSaveFlags; begin Result := []; gUseConfigInProgramDirNew := rbProgramDir.Checked; gSaveConfiguration := chkSaveConfiguration.Checked; gSaveWindowState := chkWindowState.Checked; gSaveFolderTabs := chkFolderTabs.Checked; gSaveSearchReplaceHistory := chkSearchReplaceHistory.Checked; gSaveDirHistory := cbDirHistory.Checked; gSaveCmdLineHistory := cbCmdLineHistory.Checked; gSaveFileMaskHistory := cbFileMaskHistory.Checked; gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(gbSortOrderConfigurationOption.ItemIndex); gCollapseConfigurationOptionsTree := TConfigurationTreeState(gpConfigurationTreeState.ItemIndex); end; end. doublecmd-1.1.30/src/frames/foptionsconfiguration.lrj0000644000175000001440000000773415104114162022006 0ustar alexxusers{"version":1,"strings":[ {"hash":60838323,"name":"tfrmoptionsconfiguration.gblocconfigfiles.caption","sourcebytes":[76,111,99,97,116,105,111,110,32,111,102,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,102,105,108,101,115],"value":"Location of configuration files"}, {"hash":124099977,"name":"tfrmoptionsconfiguration.rbprogramdir.caption","sourcebytes":[80,38,114,111,103,114,97,109,32,100,105,114,101,99,116,111,114,121,32,40,112,111,114,116,97,98,108,101,32,118,101,114,115,105,111,110,41],"value":"P&rogram directory (portable version)"}, {"hash":34707961,"name":"tfrmoptionsconfiguration.rbuserhomedir.caption","sourcebytes":[38,85,115,101,114,32,104,111,109,101,32,100,105,114,101,99,116,111,114,121],"value":"&User home directory"}, {"hash":184777589,"name":"tfrmoptionsconfiguration.lblcmdlineconfigdir.caption","sourcebytes":[83,101,116,32,111,110,32,99,111,109,109,97,110,100,32,108,105,110,101],"value":"Set on command line"}, {"hash":27134580,"name":"tfrmoptionsconfiguration.gbsaveonexit.caption","sourcebytes":[83,97,118,101,32,111,110,32,101,120,105,116],"value":"Save on exit"}, {"hash":118965577,"name":"tfrmoptionsconfiguration.cbdirhistory.caption","sourcebytes":[38,68,105,114,101,99,116,111,114,121,32,104,105,115,116,111,114,121],"value":"&Directory history"}, {"hash":57130889,"name":"tfrmoptionsconfiguration.cbcmdlinehistory.caption","sourcebytes":[67,111,38,109,109,97,110,100,32,108,105,110,101,32,104,105,115,116,111,114,121],"value":"Co&mmand line history"}, {"hash":211765641,"name":"tfrmoptionsconfiguration.cbfilemaskhistory.caption","sourcebytes":[38,70,105,108,101,32,109,97,115,107,32,104,105,115,116,111,114,121],"value":"&File mask history"}, {"hash":233941134,"name":"tfrmoptionsconfiguration.chksaveconfiguration.caption","sourcebytes":[83,97,38,118,101,32,99,111,110,102,105,103,117,114,97,116,105,111,110],"value":"Sa&ve configuration"}, {"hash":196727225,"name":"tfrmoptionsconfiguration.chksearchreplacehistory.caption","sourcebytes":[83,101,97,114,99,38,104,47,82,101,112,108,97,99,101,32,104,105,115,116,111,114,121],"value":"Searc&h/Replace history"}, {"hash":202032435,"name":"tfrmoptionsconfiguration.chkfoldertabs.caption","sourcebytes":[70,111,108,100,101,114,32,116,97,98,115],"value":"Folder tabs"}, {"hash":251093957,"name":"tfrmoptionsconfiguration.chkwindowstate.caption","sourcebytes":[77,97,105,110,32,119,105,110,100,111,119,32,115,116,97,116,101],"value":"Main window state"}, {"hash":2800388,"name":"tfrmoptionsconfiguration.btnconfigedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":71137081,"name":"tfrmoptionsconfiguration.btnconfigapply.caption","sourcebytes":[65,38,112,112,108,121],"value":"A&pply"}, {"hash":217003093,"name":"tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption","sourcebytes":[83,111,114,116,32,111,114,100,101,114,32,111,102,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,111,114,100,101,114,32,105,110,32,108,101,102,116,32,116,114,101,101],"value":"Sort order of configuration order in left tree"}, {"hash":184387443,"name":"tfrmoptionsconfiguration.gbdirectories.caption","sourcebytes":[68,105,114,101,99,116,111,114,105,101,115],"value":"Directories"}, {"hash":260735466,"name":"tfrmoptionsconfiguration.lblthumbcache.caption","sourcebytes":[84,104,117,109,98,110,97,105,108,115,32,99,97,99,104,101,58],"value":"Thumbnails cache:"}, {"hash":236084250,"name":"tfrmoptionsconfiguration.lbliconthemes.caption","sourcebytes":[73,99,111,110,32,116,104,101,109,101,115,58],"value":"Icon themes:"}, {"hash":50805722,"name":"tfrmoptionsconfiguration.lblhighlighters.caption","sourcebytes":[72,105,103,104,108,105,103,104,116,101,114,115,58],"value":"Highlighters:"}, {"hash":149152117,"name":"tfrmoptionsconfiguration.gpconfigurationtreestate.caption","sourcebytes":[84,114,101,101,32,115,116,97,116,101,32,119,104,101,110,32,101,110,116,101,114,105,110,103,32,105,110,32,99,111,110,102,105,103,117,114,97,116,105,111,110,32,112,97,103,101],"value":"Tree state when entering in configuration page"} ]} doublecmd-1.1.30/src/frames/foptionsconfiguration.lfm0000644000175000001440000002271015104114162021764 0ustar alexxusersinherited frmOptionsConfiguration: TfrmOptionsConfiguration Height = 595 Width = 626 HelpKeyword = '/configuration.html#ConfigDC' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 595 ClientWidth = 626 DesignLeft = 783 DesignTop = 152 object gbLocConfigFiles: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 93 Top = 6 Width = 614 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Location of configuration files' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 73 ClientWidth = 610 TabOrder = 0 object rbProgramDir: TRadioButton Left = 10 Height = 19 Top = 5 Width = 212 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'P&rogram directory (portable version)' Checked = True TabOrder = 0 TabStop = True end object rbUserHomeDir: TRadioButton Left = 10 Height = 19 Top = 29 Width = 127 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = '&User home directory' TabOrder = 1 end object lblCmdLineConfigDir: TLabel Left = 10 Height = 15 Top = 53 Width = 113 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Set on command line' ParentColor = False Visible = False end end object gbSaveOnExit: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnConfigEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 175 Top = 141 Width = 614 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Save on exit' ChildSizing.TopBottomSpacing = 5 ClientHeight = 155 ClientWidth = 610 TabOrder = 3 object cbDirHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkSearchReplaceHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 89 Width = 107 BorderSpacing.Top = 2 Caption = '&Directory history' TabOrder = 4 end object cbCmdLineHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = cbDirHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 110 Width = 138 BorderSpacing.Top = 2 Caption = 'Co&mmand line history' TabOrder = 5 end object cbFileMaskHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = cbCmdLineHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 131 Width = 108 BorderSpacing.Top = 2 Caption = '&File mask history' TabOrder = 6 end object chkSaveConfiguration: TCheckBox AnchorSideLeft.Control = gbSaveOnExit AnchorSideTop.Control = gbSaveOnExit Left = 10 Height = 19 Top = 5 Width = 119 BorderSpacing.Left = 10 Caption = 'Sa&ve configuration' OnChange = chkSaveConfigurationChange TabOrder = 0 end object chkSearchReplaceHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkFolderTabs AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 68 Width = 140 BorderSpacing.Top = 2 Caption = 'Searc&h/Replace history' TabOrder = 3 end object chkFolderTabs: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkWindowState AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 47 Width = 78 BorderSpacing.Top = 2 Caption = 'Folder tabs' TabOrder = 2 end object chkWindowState: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkSaveConfiguration AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 26 Width = 120 BorderSpacing.Top = 2 Caption = 'Main window state' TabOrder = 1 end end object btnConfigEdit: TBitBtn[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLocConfigFiles AnchorSideTop.Side = asrBottom Left = 10 Height = 30 Top = 105 Width = 116 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&Edit' OnClick = btnConfigEditClick TabOrder = 1 end object btnConfigApply: TBitBtn[3] AnchorSideLeft.Control = btnConfigEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbLocConfigFiles AnchorSideTop.Side = asrBottom Left = 136 Height = 30 Top = 105 Width = 116 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'A&pply' Enabled = False OnClick = btnConfigApplyClick TabOrder = 2 end object gbSortOrderConfigurationOption: TRadioGroup[4] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSaveOnExit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 58 Top = 322 Width = 614 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 6 Caption = 'Sort order of configuration order in left tree' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 38 ClientWidth = 610 ItemIndex = 0 Items.Strings = ( 'Classic, legacy order' 'Alphabetic order (but language still first)' ) OnClick = gbSortOrderConfigurationOptionClick TabOrder = 4 end object gbDirectories: TGroupBox[5] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gpConfigurationTreeState AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 113 Top = 450 Width = 614 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Directories' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 93 ClientWidth = 610 TabOrder = 6 object lblThumbCache: TLabel AnchorSideTop.Control = edtThumbCache AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 10 Width = 100 Caption = 'Thumbnails cache:' ParentColor = False end object edtThumbCache: TEdit AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 197 Height = 23 Top = 6 Width = 407 Anchors = [akTop, akLeft, akRight] ReadOnly = True TabOrder = 0 end object lblIconThemes: TLabel AnchorSideTop.Control = edtIconThemes AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 39 Width = 68 Caption = 'Icon themes:' ParentColor = False end object edtIconThemes: TEdit AnchorSideTop.Control = edtThumbCache AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 197 Height = 23 Top = 35 Width = 407 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ReadOnly = True TabOrder = 1 end object edtHighlighters: TEdit AnchorSideTop.Control = edtIconThemes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 197 Height = 23 Top = 64 Width = 407 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ReadOnly = True TabOrder = 2 end object lblHighlighters: TLabel AnchorSideTop.Control = edtHighlighters AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 68 Width = 68 Caption = 'Highlighters:' ParentColor = False end end object gpConfigurationTreeState: TRadioGroup[6] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSortOrderConfigurationOption AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 58 Top = 386 Width = 614 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 6 Caption = 'Tree state when entering in configuration page' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 38 ClientWidth = 610 ItemIndex = 0 Items.Strings = ( 'Full expand' 'Full collapse' ) OnClick = gpConfigurationTreeStateClick TabOrder = 5 end end doublecmd-1.1.30/src/frames/foptionscolumnsview.pas0000644000175000001440000000672315104114162021503 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Columns files view options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsColumnsView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls; type { TfrmOptionsColumnsView } TfrmOptionsColumnsView = class(TOptionsEditor) cbCutTextToColWidth: TCheckBox; cbExtendCellWidth: TCheckBox; cbGridHorzLine: TCheckBox; cbGridVertLine: TCheckBox; cbColumnsTitleLikeValues: TCheckBox; chkAutoFillColumns: TCheckBox; cmbAutoSizeColumn: TComboBox; gbShowGrid: TGroupBox; grpMisc: TGroupBox; grpAutosizeColumns: TGroupBox; lblAutoSizeColumn: TLabel; procedure cbExtendCellWidthChange(Sender: TObject); procedure cbGridVertLineChange(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsColumnsView } procedure TfrmOptionsColumnsView.cbExtendCellWidthChange(Sender: TObject); begin if cbExtendCellWidth.Checked then cbGridVertLine.Checked:= False; end; procedure TfrmOptionsColumnsView.cbGridVertLineChange(Sender: TObject); begin if cbGridVertLine.Checked then cbExtendCellWidth.Checked:= False; end; procedure TfrmOptionsColumnsView.Init; begin ParseLineToList(rsOptAutoSizeColumn, cmbAutoSizeColumn.Items); end; procedure TfrmOptionsColumnsView.Load; begin cbGridVertLine.Checked := gGridVertLine; cbGridHorzLine.Checked := gGridHorzLine; chkAutoFillColumns.Checked := gAutoFillColumns; cmbAutoSizeColumn.ItemIndex := gAutoSizeColumn; cbColumnsTitleLikeValues.Checked := gColumnsTitleLikeValues; cbCutTextToColWidth.Checked := gCutTextToColWidth; cbExtendCellWidth.Checked := gExtendCellWidth; end; function TfrmOptionsColumnsView.Save: TOptionsEditorSaveFlags; begin gGridVertLine := cbGridVertLine.Checked; gGridHorzLine := cbGridHorzLine.Checked; gAutoFillColumns := chkAutoFillColumns.Checked; gAutoSizeColumn := cmbAutoSizeColumn.ItemIndex; gColumnsTitleLikeValues := cbColumnsTitleLikeValues.Checked; gCutTextToColWidth := cbCutTextToColWidth.Checked; gExtendCellWidth := cbExtendCellWidth.Checked; Result := []; end; class function TfrmOptionsColumnsView.GetIconIndex: Integer; begin Result := 13; end; class function TfrmOptionsColumnsView.GetTitle: String; begin Result := rsOptionsEditorColumnsView; end; end. doublecmd-1.1.30/src/frames/foptionscolumnsview.lrj0000644000175000001440000000365315104114162021506 0ustar alexxusers{"version":1,"strings":[ {"hash":248156179,"name":"tfrmoptionscolumnsview.grpautosizecolumns.caption","sourcebytes":[65,117,116,111,45,115,105,122,101,32,99,111,108,117,109,110,115],"value":"Auto-size columns"}, {"hash":212887331,"name":"tfrmoptionscolumnsview.chkautofillcolumns.caption","sourcebytes":[65,38,117,116,111,32,102,105,108,108,32,99,111,108,117,109,110,115],"value":"A&uto fill columns"}, {"hash":91297290,"name":"tfrmoptionscolumnsview.lblautosizecolumn.caption","sourcebytes":[65,117,116,111,32,115,105,38,122,101,32,99,111,108,117,109,110,58],"value":"Auto si&ze column:"}, {"hash":110539012,"name":"tfrmoptionscolumnsview.gbshowgrid.caption","sourcebytes":[83,104,111,119,32,103,114,105,100],"value":"Show grid"}, {"hash":50869875,"name":"tfrmoptionscolumnsview.cbgridvertline.caption","sourcebytes":[38,86,101,114,116,105,99,97,108,32,108,105,110,101,115],"value":"&Vertical lines"}, {"hash":254961699,"name":"tfrmoptionscolumnsview.cbgridhorzline.caption","sourcebytes":[38,72,111,114,105,122,111,110,116,97,108,32,108,105,110,101,115],"value":"&Horizontal lines"}, {"hash":13344632,"name":"tfrmoptionscolumnsview.cbcuttexttocolwidth.caption","sourcebytes":[67,117,116,32,38,116,101,120,116,32,116,111,32,99,111,108,117,109,110,32,119,105,100,116,104],"value":"Cut &text to column width"}, {"hash":124929006,"name":"tfrmoptionscolumnsview.cbextendcellwidth.caption","sourcebytes":[38,69,120,116,101,110,100,32,99,101,108,108,32,119,105,100,116,104,32,105,102,32,116,101,120,116,32,105,115,32,110,111,116,32,102,105,116,116,105,110,103,32,105,110,116,111,32,99,111,108,117,109,110],"value":"&Extend cell width if text is not fitting into column"}, {"hash":65940035,"name":"tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption","sourcebytes":[67,111,108,117,109,110,32,116,105,116,108,101,115,32,97,108,105,103,110,109,101,110,116,32,38,108,105,107,101,32,118,97,108,117,101,115],"value":"Column titles alignment &like values"} ]} doublecmd-1.1.30/src/frames/foptionscolumnsview.lfm0000644000175000001440000001107715104114162021474 0ustar alexxusersinherited frmOptionsColumnsView: TfrmOptionsColumnsView Height = 344 Width = 659 HelpKeyword = '/configuration.html#ConfigViewFull' ClientHeight = 344 ClientWidth = 659 DesignLeft = 419 DesignTop = 249 object grpAutosizeColumns: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowGrid AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 92 Top = 94 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Auto-size columns' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 74 ClientWidth = 645 TabOrder = 1 object chkAutoFillColumns: TCheckBox AnchorSideTop.Side = asrBottom Left = 12 Height = 23 Top = 6 Width = 138 Caption = 'A&uto fill columns' TabOrder = 0 end object lblAutoSizeColumn: TLabel AnchorSideLeft.Control = chkAutoFillColumns AnchorSideTop.Control = cmbAutoSizeColumn AnchorSideTop.Side = asrCenter Left = 12 Height = 17 Top = 45 Width = 118 Caption = 'Auto si&ze column:' FocusControl = cmbAutoSizeColumn ParentColor = False end object cmbAutoSizeColumn: TComboBox AnchorSideLeft.Control = lblAutoSizeColumn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkAutoFillColumns AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grpAutosizeColumns AnchorSideRight.Side = asrBottom Left = 142 Height = 29 Top = 39 Width = 491 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 10 BorderSpacing.Right = 10 ItemHeight = 0 Items.Strings = ( 'First' 'Last' ) Style = csDropDownList TabOrder = 1 end end object gbShowGrid: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 6 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Show grid' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 64 ClientWidth = 645 TabOrder = 0 object cbGridVertLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = gbShowGrid Left = 12 Height = 23 Top = 6 Width = 112 Caption = '&Vertical lines' OnChange = cbGridVertLineChange TabOrder = 0 end object cbGridHorzLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = cbGridVertLine AnchorSideTop.Side = asrBottom Left = 12 Height = 23 Top = 35 Width = 131 BorderSpacing.Top = 6 Caption = '&Horizontal lines' TabOrder = 1 end end object grpMisc: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = grpAutosizeColumns AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 95 Top = 192 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 93 ClientWidth = 645 TabOrder = 2 object cbCutTextToColWidth: TCheckBox AnchorSideLeft.Control = grpMisc AnchorSideTop.Control = cbColumnsTitleLikeValues AnchorSideTop.Side = asrBottom Left = 12 Height = 23 Top = 35 Width = 190 BorderSpacing.Top = 6 Caption = 'Cut &text to column width' TabOrder = 1 end object cbExtendCellWidth: TCheckBox AnchorSideLeft.Control = grpMisc AnchorSideTop.Control = cbCutTextToColWidth AnchorSideTop.Side = asrBottom Left = 12 Height = 23 Top = 64 Width = 349 BorderSpacing.Top = 6 Caption = '&Extend cell width if text is not fitting into column' OnChange = cbExtendCellWidthChange TabOrder = 2 end object cbColumnsTitleLikeValues: TCheckBox AnchorSideLeft.Control = grpMisc AnchorSideTop.Control = grpMisc Left = 12 Height = 23 Top = 6 Width = 256 Caption = 'Column titles alignment &like values' TabOrder = 0 end end end doublecmd-1.1.30/src/frames/foptionscolors.pas0000644000175000001440000002121315104114162020420 0ustar alexxusersunit fOptionsColors; {$mode ObjFPC}{$H+} {$IF DEFINED(darwin)} {$DEFINE DARKWIN} {$ENDIF} interface uses Classes, SysUtils, Forms, Controls, ExtCtrls, Dialogs, StdCtrls, DividerBevel, fOptionsFrame, KASComboBox, LMessages; type { TfrmOptionsColors } TfrmOptionsColors = class(TOptionsEditor) cbAdded: TKASColorBoxButton; cbBookBackground: TKASColorBoxButton; cbBookText: TKASColorBoxButton; cbbUseGradientInd: TCheckBox; cbDeleted: TKASColorBoxButton; cbError: TKASColorBoxButton; cbImageBackground1: TKASColorBoxButton; cbImageBackground2: TKASColorBoxButton; cbIndBackColor: TKASColorBoxButton; cbIndColor: TKASColorBoxButton; cbIndThresholdColor: TKASColorBoxButton; cbInformation: TKASColorBoxButton; cbLeft: TKASColorBoxButton; cbModifiedBinary: TKASColorBoxButton; cbRight: TKASColorBoxButton; cbSuccess: TKASColorBoxButton; cbUnknown: TKASColorBoxButton; cmbGroup: TComboBox; cbModified: TKASColorBoxButton; dbBookMode: TDividerBevel; dbImageMode: TDividerBevel; DividerBevel11: TDividerBevel; dbTextMode: TDividerBevel; DividerBevel4: TDividerBevel; dbBinaryMode: TDividerBevel; DividerBevel6: TDividerBevel; DividerBevel9: TDividerBevel; lblCategory: TLabel; lblAdded: TLabel; lblBookBackground: TLabel; lblBookText: TLabel; lblDeleted: TLabel; lblError: TLabel; lblImageBackground1: TLabel; lblImageBackground2: TLabel; lblIndBackColor: TLabel; lblIndColor: TLabel; lblIndThresholdColor: TLabel; lblInformation: TLabel; lblLeft: TLabel; lblModified: TLabel; lblModifiedBinary: TLabel; lblRight: TLabel; lblSuccess: TLabel; lblUnknown: TLabel; nbColors: TNotebook; pgDriveFreeInd: TPage; pbxFakeDrive: TPaintBox; pgDarkMode: TPage; pgDiffer: TPage; pgLog: TPage; pgSyncDirs: TPage; pgViewer: TPage; rgDarkMode: TRadioGroup; procedure cbbUseGradientIndChange(Sender: TObject); procedure cbIndColorChange(Sender: TObject); procedure cmbGroupChange(Sender: TObject); procedure pbxFakeDriveClick(Sender: TObject); procedure pbxFakeDrivePaint(Sender: TObject); {$IF DEFINED(DARKWIN)} private FAppMode: Integer; {$ENDIF} protected procedure Init; override; procedure Load; override; procedure DoAutoSize; override; function Save: TOptionsEditorSaveFlags; override; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng, uDCUtils, fMain {$IF DEFINED(DARKWIN)} , DCStrUtils, uEarlyConfig {$IF not DEFINED(darwin)} , uDarkStyle {$ELSE} , uMyDarwin {$ENDIF} {$ENDIF} ; { TfrmOptionsColors } procedure TfrmOptionsColors.cmbGroupChange(Sender: TObject); begin nbColors.PageIndex:= cmbGroup.ItemIndex; end; procedure TfrmOptionsColors.pbxFakeDriveClick(Sender: TObject); begin pbxFakeDrive.Tag:= (pbxFakeDrive.ScreenToClient(Mouse.CursorPos).X * 100) div pbxFakeDrive.Width; pbxFakeDrive.Hint:= pbxFakeDrive.Tag.ToString + '%'; pbxFakeDrive.Repaint; end; procedure TfrmOptionsColors.cbbUseGradientIndChange(Sender: TObject); var vNoGradient: boolean; begin vNoGradient := not (cbbUseGradientInd.Checked); lblIndThresholdColor.Enabled := vNoGradient; lblIndColor.Enabled := vNoGradient; lblIndBackColor.Enabled := vNoGradient; cbIndThresholdColor.Enabled := vNoGradient; cbIndColor.Enabled := vNoGradient; cbIndBackColor.Enabled := vNoGradient; pbxFakeDrive.Repaint; end; procedure TfrmOptionsColors.cbIndColorChange(Sender: TObject); begin pbxFakeDrive.Repaint; end; procedure TfrmOptionsColors.pbxFakeDrivePaint(Sender: TObject); begin frmMain.PaintDriveFreeBar(pbxFakeDrive, cbbUseGradientInd.Checked, cbIndColor.Selected, cbIndThresholdColor.Selected, cbIndBackColor.Selected); end; procedure TfrmOptionsColors.Init; begin cmbGroup.Items.Add(rsToolViewer); cmbGroup.Items.Add(rsToolDiffer); cmbGroup.Items.Add(rsOptionsEditorLog); cmbGroup.Items.Add(rsHotkeyCategorySyncDirs); cmbGroup.Items.Add(rsDriveFreeSpaceIndicator); cmbGroup.ItemIndex:= 0; {$IF DEFINED(DARKWIN)} FAppMode:= gAppMode; {$IFDEF LCLWIN32}if g_darkModeSupported then{$ENDIF} begin ParseLineToList(rsDarkModeOptions, rgDarkMode.Items); cmbGroup.ItemIndex:= cmbGroup.Items.Add(rsDarkMode); nbColors.PageIndex:= cmbGroup.ItemIndex; end; {$ENDIF} end; procedure TfrmOptionsColors.Load; begin {$IF DEFINED(DARKWIN)} case FAppMode of 1: rgDarkMode.ItemIndex:= 0; 2: rgDarkMode.ItemIndex:= 1; 3: rgDarkMode.ItemIndex:= 2; end; {$ENDIF} with gColors.Viewer^ do begin cbBookText.Selected:= BookFontColor; cbBookBackground.Selected:= BookBackgroundColor; cbImageBackground1.Selected:= ImageBackColor1; cbImageBackground2.Selected:= ImageBackColor2; end; with gColors.Differ^ do begin cbAdded.Selected:= AddedColor; cbDeleted.Selected:= DeletedColor; cbModified.Selected:= ModifiedColor; cbModifiedBinary.Selected:= ModifiedBinaryColor; end; with gColors.Log^ do begin cbInformation.Selected:= InfoColor; cbSuccess.Selected:= SuccessColor; cbError.Selected:= ErrorColor; end; with gColors.SyncDirs^ do begin cbLeft.Selected:= LeftColor; cbRight.Selected:= RightColor; cbUnknown.Selected:= UnknownColor; end; with gColors.FreeSpaceInd^ do begin cbIndColor.Selected:= ForeColor; cbIndBackColor.Selected:= BackColor; cbIndThresholdColor.Selected:= ThresholdForeColor; end; cbbUseGradientInd.Checked:= gIndUseGradient; pbxFakeDrive.Hint:= pbxFakeDrive.Tag.ToString + '%'; end; procedure TfrmOptionsColors.DoAutoSize; var I, J: Integer; AControl: TControl; AMaxWidth: Integer = 0; begin inherited DoAutoSize; if csDesigning in ComponentState then Exit; pbxFakeDrive.Constraints.MaxHeight:= cbbUseGradientInd.Height; for I:= 0 to nbColors.PageCount - 1 do begin with nbColors.Page[I] do begin for J := 0 to ControlCount - 1 do begin AControl:= Controls[J]; if AControl is TLabel then begin if (AControl.Width > AMaxWidth) then AMaxWidth:= AControl.Width; end; end; end; end; for I:= 0 to nbColors.PageCount - 1 do begin with nbColors.Page[I] do begin for J := 0 to ControlCount - 1 do begin AControl:= Controls[J]; if AControl is TLabel then begin AControl.Constraints.MinWidth:= AMaxWidth; end; end; end; end; end; function TfrmOptionsColors.Save: TOptionsEditorSaveFlags; begin Result:= []; {$IF DEFINED(DARKWIN)} case rgDarkMode.ItemIndex of 0: gAppMode:= 1; 1: gAppMode:= 2; 2: gAppMode:= 3; end; if gAppMode <> FAppMode then try FAppMode:= gAppMode; {$IF not DEFINED(darwin)} if g_darkModeSupported then Result:= [oesfNeedsRestart]; {$ELSE} setMacOSAppearance( gAppMode ); {$ENDIF} SaveEarlyConfig; except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; {$ENDIF} with gColors.Viewer^ do begin BookFontColor:= cbBookText.Selected; BookBackgroundColor:= cbBookBackground.Selected; ImageBackColor1:= cbImageBackground1.Selected; ImageBackColor2:= cbImageBackground2.Selected; end; with gColors.Differ^ do begin AddedColor:= cbAdded.Selected; DeletedColor:= cbDeleted.Selected; ModifiedColor:= cbModified.Selected; ModifiedBinaryColor:= cbModifiedBinary.Selected; end; with gColors.Log^ do begin InfoColor:= cbInformation.Selected; SuccessColor:= cbSuccess.Selected; ErrorColor:= cbError.Selected; end; with gColors.SyncDirs^ do begin LeftColor:= cbLeft.Selected; RightColor:= cbRight.Selected; UnknownColor:= cbUnknown.Selected; end; gIndUseGradient:= cbbUseGradientInd.Checked; with gColors.FreeSpaceInd^ do begin ForeColor := cbIndColor.Selected; BackColor := cbIndBackColor.Selected; ThresholdForeColor := cbIndThresholdColor.Selected; end; end; procedure TfrmOptionsColors.CMThemeChanged(var Message: TLMessage); begin LoadSettings; end; class function TfrmOptionsColors.GetIconIndex: Integer; begin Result:= 4; end; class function TfrmOptionsColors.GetTitle: String; begin Result:= rsOptionsEditorColors; end; end. doublecmd-1.1.30/src/frames/foptionscolors.lrj0000644000175000001440000000675215104114162020437 0ustar alexxusers{"version":1,"strings":[ {"hash":97881285,"name":"tfrmoptionscolors.dbbookmode.caption","sourcebytes":[66,111,111,107,32,77,111,100,101],"value":"Book Mode"}, {"hash":5951354,"name":"tfrmoptionscolors.lblbooktext.caption","sourcebytes":[84,101,120,116,58],"value":"Text:"}, {"hash":249486954,"name":"tfrmoptionscolors.lblbookbackground.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,58],"value":"Background:"}, {"hash":225593045,"name":"tfrmoptionscolors.dbimagemode.caption","sourcebytes":[73,109,97,103,101,32,77,111,100,101],"value":"Image Mode"}, {"hash":249462170,"name":"tfrmoptionscolors.lblimagebackground1.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,32,49,58],"value":"Background 1:"}, {"hash":249462154,"name":"tfrmoptionscolors.lblimagebackground2.caption","sourcebytes":[66,97,99,107,103,114,111,117,110,100,32,50,58],"value":"Background 2:"}, {"hash":258309989,"name":"tfrmoptionscolors.dbtextmode.caption","sourcebytes":[84,101,120,116,32,77,111,100,101],"value":"Text Mode"}, {"hash":75148154,"name":"tfrmoptionscolors.lbladded.caption","sourcebytes":[65,100,100,101,100,58],"value":"Added:"}, {"hash":204255194,"name":"tfrmoptionscolors.lbldeleted.caption","sourcebytes":[68,101,108,101,116,101,100,58],"value":"Deleted:"}, {"hash":184332074,"name":"tfrmoptionscolors.lblmodified.caption","sourcebytes":[77,111,100,105,102,105,101,100,58],"value":"Modified:"}, {"hash":167657765,"name":"tfrmoptionscolors.dbbinarymode.caption","sourcebytes":[66,105,110,97,114,121,32,77,111,100,101],"value":"Binary Mode"}, {"hash":184332074,"name":"tfrmoptionscolors.lblmodifiedbinary.caption","sourcebytes":[77,111,100,105,102,105,101,100,58],"value":"Modified:"}, {"hash":109982858,"name":"tfrmoptionscolors.lblinformation.caption","sourcebytes":[73,110,102,111,114,109,97,116,105,111,110,58],"value":"Information:"}, {"hash":194629578,"name":"tfrmoptionscolors.lblsuccess.caption","sourcebytes":[83,117,99,99,101,115,115,58],"value":"Success:"}, {"hash":80320090,"name":"tfrmoptionscolors.lblerror.caption","sourcebytes":[69,114,114,111,114,58],"value":"Error:"}, {"hash":5422458,"name":"tfrmoptionscolors.lblleft.caption","sourcebytes":[76,101,102,116,58],"value":"Left:"}, {"hash":93314938,"name":"tfrmoptionscolors.lblright.caption","sourcebytes":[82,105,103,104,116,58],"value":"Right:"}, {"hash":86338010,"name":"tfrmoptionscolors.lblunknown.caption","sourcebytes":[85,110,107,110,111,119,110,58],"value":"Unknown:"}, {"hash":135998194,"name":"tfrmoptionscolors.cbbusegradientind.caption","sourcebytes":[85,115,101,32,38,71,114,97,100,105,101,110,116,32,73,110,100,105,99,97,116,111,114],"value":"Use &Gradient Indicator"}, {"hash":171869450,"name":"tfrmoptionscolors.lblindcolor.caption","sourcebytes":[38,73,110,100,105,99,97,116,111,114,32,70,111,114,101,32,67,111,108,111,114,58],"value":"&Indicator Fore Color:"}, {"hash":115941530,"name":"tfrmoptionscolors.lblindthresholdcolor.caption","sourcebytes":[73,110,100,105,99,97,116,111,114,32,38,84,104,114,101,115,104,111,108,100,32,67,111,108,111,114,58],"value":"Indicator &Threshold Color:"}, {"hash":171107370,"name":"tfrmoptionscolors.lblindbackcolor.caption","sourcebytes":[73,110,38,100,105,99,97,116,111,114,32,66,97,99,107,32,67,111,108,111,114,58],"value":"In&dicator Back Color:"}, {"hash":5941413,"name":"tfrmoptionscolors.rgdarkmode.caption","sourcebytes":[83,116,97,116,101],"value":"State"}, {"hash":180232266,"name":"tfrmoptionscolors.lblcategory.caption","sourcebytes":[67,97,116,101,103,111,114,121,58],"value":"Category:"} ]} doublecmd-1.1.30/src/frames/foptionscolors.lfm0000644000175000001440000003026415104114162020421 0ustar alexxusersinherited frmOptionsColors: TfrmOptionsColors Height = 451 Width = 579 HelpKeyword = '/configuration.html#ConfigColor' AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 451 ClientWidth = 579 DesignLeft = 574 DesignTop = 216 object cmbGroup: TComboBox[0] AnchorSideLeft.Control = lblCategory AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner Left = 87 Height = 23 Top = 12 Width = 212 BorderSpacing.Left = 18 BorderSpacing.Top = 12 ItemHeight = 15 OnChange = cmbGroupChange Style = csDropDownList TabOrder = 0 end object nbColors: TNotebook[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbGroup AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 115 Top = 45 Width = 567 PageIndex = 0 AutoSize = True Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 10 TabOrder = 1 object pgViewer: TPage ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 object dbBookMode: TDividerBevel Left = 12 Height = 15 Top = 12 Width = 240 Caption = 'Book Mode' ParentFont = False Style = gsHorLines end object DividerBevel9: TDividerBevel Left = 260 Height = 15 Top = 12 Width = 240 ParentFont = False Style = gsHorLines end object lblBookText: TLabel Left = 12 Height = 25 Top = 35 Width = 240 Caption = 'Text:' Layout = tlCenter end object cbBookText: TKASColorBoxButton Left = 260 Height = 25 Top = 35 Width = 240 TabOrder = 0 end object lblBookBackground: TLabel Left = 12 Height = 25 Top = 68 Width = 240 Caption = 'Background:' Layout = tlCenter end object cbBookBackground: TKASColorBoxButton Left = 260 Height = 25 Top = 68 Width = 240 TabOrder = 1 end object dbImageMode: TDividerBevel Left = 12 Height = 15 Top = 101 Width = 240 Caption = 'Image Mode' ParentFont = False Style = gsHorLines end object DividerBevel11: TDividerBevel Left = 260 Height = 15 Top = 101 Width = 240 ParentFont = False Style = gsHorLines end object lblImageBackground1: TLabel Left = 12 Height = 25 Top = 124 Width = 240 Caption = 'Background 1:' Layout = tlCenter end object cbImageBackground1: TKASColorBoxButton Left = 260 Height = 25 Top = 124 Width = 240 TabOrder = 2 end object lblImageBackground2: TLabel Left = 12 Height = 25 Top = 157 Width = 240 Caption = 'Background 2:' Layout = tlCenter end object cbImageBackground2: TKASColorBoxButton Left = 260 Height = 25 Top = 157 Width = 240 TabOrder = 3 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbPrettyNames] end end object pgDiffer: TPage ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 object dbTextMode: TDividerBevel Left = 12 Height = 15 Top = 12 Width = 240 Caption = 'Text Mode' ParentFont = False Style = gsHorLines end object DividerBevel4: TDividerBevel Left = 260 Height = 15 Top = 12 Width = 240 ParentFont = False Style = gsHorLines end object lblAdded: TLabel Left = 12 Height = 25 Top = 35 Width = 240 Caption = 'Added:' Layout = tlCenter end object cbAdded: TKASColorBoxButton Left = 260 Height = 25 Top = 35 Width = 240 TabOrder = 0 end object lblDeleted: TLabel Left = 12 Height = 25 Top = 68 Width = 240 Caption = 'Deleted:' Layout = tlCenter end object cbDeleted: TKASColorBoxButton Left = 260 Height = 25 Top = 68 Width = 240 TabOrder = 1 end object lblModified: TLabel Left = 12 Height = 25 Top = 101 Width = 240 Caption = 'Modified:' Layout = tlCenter end object cbModified: TKASColorBoxButton Left = 260 Height = 25 Top = 101 Width = 240 TabOrder = 2 end object dbBinaryMode: TDividerBevel Left = 12 Height = 15 Top = 134 Width = 240 Caption = 'Binary Mode' ParentFont = False Style = gsHorLines end object DividerBevel6: TDividerBevel Left = 260 Height = 15 Top = 134 Width = 240 ParentFont = False Style = gsHorLines end object lblModifiedBinary: TLabel Left = 12 Height = 25 Top = 157 Width = 240 Caption = 'Modified:' Layout = tlCenter end object cbModifiedBinary: TKASColorBoxButton Left = 260 Height = 25 Top = 157 Width = 240 TabOrder = 3 end end object pgLog: TPage ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 object lblInformation: TLabel Left = 12 Height = 25 Top = 12 Width = 66 Caption = 'Information:' Layout = tlCenter end object cbInformation: TKASColorBoxButton Left = 86 Height = 25 Top = 12 Width = 125 TabOrder = 0 end object lblSuccess: TLabel Left = 12 Height = 25 Top = 45 Width = 66 Caption = 'Success:' Layout = tlCenter end object cbSuccess: TKASColorBoxButton Left = 86 Height = 25 Top = 45 Width = 125 TabOrder = 1 end object lblError: TLabel Left = 12 Height = 25 Top = 78 Width = 66 Caption = 'Error:' Layout = tlCenter end object cbError: TKASColorBoxButton Left = 86 Height = 25 Top = 78 Width = 125 TabOrder = 2 end end object pgSyncDirs: TPage ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 object lblLeft: TLabel Left = 12 Height = 25 Top = 12 Width = 54 Caption = 'Left:' Layout = tlCenter end object cbLeft: TKASColorBoxButton Left = 74 Height = 25 Top = 12 Width = 125 TabOrder = 0 end object lblRight: TLabel Left = 12 Height = 25 Top = 45 Width = 54 Caption = 'Right:' Layout = tlCenter end object cbRight: TKASColorBoxButton Left = 74 Height = 25 Top = 45 Width = 125 TabOrder = 1 end object lblUnknown: TLabel Left = 12 Height = 25 Top = 78 Width = 54 Caption = 'Unknown:' Layout = tlCenter end object cbUnknown: TKASColorBoxButton Left = 74 Height = 25 Top = 78 Width = 125 TabOrder = 2 end end object pgDriveFreeInd: TPage ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 object cbbUseGradientInd: TCheckBox Left = 12 Height = 19 Top = 12 Width = 137 BorderSpacing.Top = 6 Caption = 'Use &Gradient Indicator' OnChange = cbbUseGradientIndChange TabOrder = 0 end object pbxFakeDrive: TPaintBox Tag = 83 Left = 157 Height = 19 Top = 12 Width = 125 Constraints.MaxHeight = 19 ParentShowHint = False ShowHint = True OnClick = pbxFakeDriveClick OnPaint = pbxFakeDrivePaint end object lblIndColor: TLabel Left = 12 Height = 25 Top = 39 Width = 137 Caption = '&Indicator Fore Color:' FocusControl = cbIndColor Layout = tlCenter ParentColor = False end object cbIndColor: TKASColorBoxButton Left = 157 Height = 25 Top = 39 Width = 125 TabOrder = 1 OnChange = cbIndColorChange end object lblIndThresholdColor: TLabel Left = 12 Height = 25 Top = 72 Width = 137 BorderSpacing.Right = 4 Caption = 'Indicator &Threshold Color:' FocusControl = cbIndThresholdColor Layout = tlCenter ParentColor = False end object cbIndThresholdColor: TKASColorBoxButton Left = 157 Height = 25 Top = 72 Width = 125 TabOrder = 2 OnChange = cbIndColorChange end object lblIndBackColor: TLabel AnchorSideRight.Side = asrBottom Left = 12 Height = 25 Top = 105 Width = 137 Caption = 'In&dicator Back Color:' FocusControl = cbIndBackColor Layout = tlCenter ParentColor = False end object cbIndBackColor: TKASColorBoxButton AnchorSideRight.Side = asrBottom Left = 157 Height = 25 Top = 105 Width = 125 TabOrder = 3 OnChange = cbIndColorChange end end object pgDarkMode: TPage ChildSizing.LeftRightSpacing = 12 object rgDarkMode: TRadioGroup AnchorSideRight.Side = asrBottom Left = 0 Height = 77 Top = 6 Width = 567 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'State' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 57 ClientWidth = 563 ItemIndex = 0 Items.Strings = ( 'Auto' 'Enabled' 'Disabled' ) TabOrder = 0 end end end object lblCategory: TLabel[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbGroup AnchorSideTop.Side = asrCenter Left = 18 Height = 15 Top = 16 Width = 51 BorderSpacing.Left = 18 Caption = 'Category:' end end doublecmd-1.1.30/src/frames/foptionsbriefview.pas0000644000175000001440000000542215104114162021105 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Brief view options page Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit fOptionsBriefView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls, Spin; type { TfrmOptionsBriefView } TfrmOptionsBriefView = class(TOptionsEditor) gbShowFileExt: TGroupBox; gbColumns: TGroupBox; rbUseFixedWidth: TRadioButton; rbUseFixedCount: TRadioButton; rbUseAutoSize: TRadioButton; rbDirectly: TRadioButton; rbAligned: TRadioButton; speUseFixedWidth: TSpinEdit; speUseFixedCount: TSpinEdit; lblStub: TLabel; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsBriefView } procedure TfrmOptionsBriefView.Load; begin rbAligned.Checked := gBriefViewFileExtAligned; speUseFixedWidth.Value := gBriefViewFixedWidth; speUseFixedCount.Value := gBriefViewFixedCount; rbUseAutoSize.Checked := gBriefViewMode = bvmAutoSize; rbUseFixedWidth.Checked := gBriefViewMode = bvmFixedWidth; rbUseFixedCount.Checked := gBriefViewMode = bvmFixedCount; end; function TfrmOptionsBriefView.Save: TOptionsEditorSaveFlags; begin gBriefViewFileExtAligned := rbAligned.Checked; gBriefViewFixedWidth := speUseFixedWidth.Value; gBriefViewFixedCount := speUseFixedCount.Value; if rbUseAutoSize.Checked then gBriefViewMode := bvmAutoSize; if rbUseFixedWidth.Checked then gBriefViewMode := bvmFixedWidth; if rbUseFixedCount.Checked then gBriefViewMode := bvmFixedCount; Result := []; end; class function TfrmOptionsBriefView.GetIconIndex: Integer; begin Result := 35; end; class function TfrmOptionsBriefView.GetTitle: String; begin Result := rsOptionsEditorBriefView; end; end. doublecmd-1.1.30/src/frames/foptionsbriefview.lrj0000644000175000001440000000236415104114162021113 0ustar alexxusers{"version":1,"strings":[ {"hash":122053763,"name":"tfrmoptionsbriefview.gbshowfileext.caption","sourcebytes":[83,104,111,119,32,102,105,108,101,32,101,120,116,101,110,115,105,111,110,115],"value":"Show file extensions"}, {"hash":262172725,"name":"tfrmoptionsbriefview.rbdirectly.caption","sourcebytes":[100,105,38,114,101,99,116,108,121,32,97,102,116,101,114,32,102,105,108,101,110,97,109,101],"value":"di&rectly after filename"}, {"hash":166499177,"name":"tfrmoptionsbriefview.rbaligned.caption","sourcebytes":[97,108,105,38,103,110,101,100,32,40,119,105,116,104,32,84,97,98,41],"value":"ali&gned (with Tab)"}, {"hash":32619845,"name":"tfrmoptionsbriefview.gbcolumns.caption","sourcebytes":[67,111,108,117,109,110,115,32,115,105,122,101],"value":"Columns size"}, {"hash":298159,"name":"tfrmoptionsbriefview.rbuseautosize.caption","sourcebytes":[65,117,116,111],"value":"Auto"}, {"hash":1109464,"name":"tfrmoptionsbriefview.rbusefixedwidth.caption","sourcebytes":[70,105,120,101,100,32,99,111,108,117,109,110,115,32,119,105,100,116,104],"value":"Fixed columns width"}, {"hash":359972,"name":"tfrmoptionsbriefview.rbusefixedcount.caption","sourcebytes":[70,105,120,101,100,32,99,111,108,117,109,110,115,32,99,111,117,110,116],"value":"Fixed columns count"} ]} doublecmd-1.1.30/src/frames/foptionsbriefview.lfm0000644000175000001440000000577515104114162021113 0ustar alexxusersinherited frmOptionsBriefView: TfrmOptionsBriefView Height = 289 Width = 519 HelpKeyword = '/configuration.html#ConfigViewBrief' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 289 ClientWidth = 519 DesignLeft = 497 DesignTop = 187 object gbShowFileExt: TGroupBox[0] Left = 6 Height = 62 Top = 6 Width = 507 Align = alTop AutoSize = True Caption = 'Show file extensions' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 2 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 42 ClientWidth = 503 TabOrder = 0 object rbDirectly: TRadioButton Left = 6 Height = 19 Top = 2 Width = 491 Caption = 'di&rectly after filename' Checked = True TabOrder = 1 TabStop = True end object rbAligned: TRadioButton Left = 6 Height = 19 Top = 21 Width = 491 Caption = 'ali&gned (with Tab)' TabOrder = 0 end end object gbColumns: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowFileExt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbShowFileExt AnchorSideRight.Side = asrBottom Left = 6 Height = 89 Top = 68 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Columns size' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 69 ClientWidth = 503 TabOrder = 1 object rbUseAutoSize: TRadioButton Left = 6 Height = 19 Top = 2 Width = 130 Caption = 'Auto' Checked = True TabOrder = 0 TabStop = True end object lblStub: TLabel Left = 136 Height = 19 Top = 2 Width = 50 ParentColor = False end object rbUseFixedWidth: TRadioButton Left = 6 Height = 23 Top = 21 Width = 130 Caption = 'Fixed columns width' TabOrder = 1 end object speUseFixedWidth: TSpinEdit Left = 136 Height = 23 Top = 21 Width = 80 Constraints.MinWidth = 80 MaxValue = 1000 MinValue = 1 TabOrder = 2 Value = 1 end object rbUseFixedCount: TRadioButton Left = 6 Height = 23 Top = 44 Width = 130 Caption = 'Fixed columns count' TabOrder = 3 end object speUseFixedCount: TSpinEdit Left = 136 Height = 23 Top = 44 Width = 80 MinValue = 1 TabOrder = 4 Value = 1 end end end doublecmd-1.1.30/src/frames/foptionsbehavior.pas0000644000175000001440000000553215104114162020724 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Behavior options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsBehavior; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsBehavior } TfrmOptionsBehavior = class(TOptionsEditor) cbAlwaysShowTrayIcon: TCheckBox; cbMinimizeToTray: TCheckBox; cbOnlyOnce: TCheckBox; cbBlacklistUnmountedDevices: TCheckBox; edtDrivesBlackList: TEdit; gbMisc1: TGroupBox; gbMisc2: TGroupBox; lblDrivesBlackList: TLabel; procedure cbAlwaysShowTrayIconChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsBehavior } procedure TfrmOptionsBehavior.cbAlwaysShowTrayIconChange(Sender: TObject); begin // Force minimizing to tray when tray icon is always shown. cbMinimizeToTray.Enabled:= not cbAlwaysShowTrayIcon.Checked; end; class function TfrmOptionsBehavior.GetIconIndex: Integer; begin Result := 1; end; class function TfrmOptionsBehavior.GetTitle: String; begin Result := rsOptionsEditorBehavior; end; procedure TfrmOptionsBehavior.Load; begin cbOnlyOnce.Checked:= gOnlyOneAppInstance; cbMinimizeToTray.Checked:= gMinimizeToTray; cbMinimizeToTray.Enabled:= not gAlwaysShowTrayIcon; cbAlwaysShowTrayIcon.Checked:= gAlwaysShowTrayIcon; edtDrivesBlackList.Text:= gDriveBlackList; cbBlacklistUnmountedDevices.Checked:= gDriveBlackListUnmounted; end; function TfrmOptionsBehavior.Save: TOptionsEditorSaveFlags; begin Result := []; gOnlyOneAppInstance:=cbOnlyOnce.Checked; gMinimizeToTray:= cbMinimizeToTray.Checked; gAlwaysShowTrayIcon:= cbAlwaysShowTrayIcon.Checked; gDriveBlackList:= edtDrivesBlackList.Text; gDriveBlackListUnmounted:= cbBlacklistUnmountedDevices.Checked; end; end. doublecmd-1.1.30/src/frames/foptionsbehavior.lrj0000644000175000001440000000324515104114162020727 0ustar alexxusers{"version":1,"strings":[ {"hash":142894469,"name":"tfrmoptionsbehavior.cbonlyonce.caption","sourcebytes":[65,38,108,108,111,119,32,111,110,108,121,32,111,110,101,32,99,111,112,121,32,111,102,32,68,67,32,97,116,32,97,32,116,105,109,101],"value":"A&llow only one copy of DC at a time"}, {"hash":225240468,"name":"tfrmoptionsbehavior.cbminimizetotray.caption","sourcebytes":[77,111,38,118,101,32,105,99,111,110,32,116,111,32,115,121,115,116,101,109,32,116,114,97,121,32,119,104,101,110,32,109,105,110,105,109,105,122,101,100],"value":"Mo&ve icon to system tray when minimized"}, {"hash":206285982,"name":"tfrmoptionsbehavior.cbalwaysshowtrayicon.caption","sourcebytes":[65,108,38,119,97,121,115,32,115,104,111,119,32,116,114,97,121,32,105,99,111,110],"value":"Al&ways show tray icon"}, {"hash":194611524,"name":"tfrmoptionsbehavior.lbldrivesblacklist.caption","sourcebytes":[68,114,105,118,101,115,32,38,98,108,97,99,107,108,105,115,116],"value":"Drives &blacklist"}, {"hash":228532606,"name":"tfrmoptionsbehavior.edtdrivesblacklist.hint","sourcebytes":[72,101,114,101,32,121,111,117,32,99,97,110,32,101,110,116,101,114,32,111,110,101,32,111,114,32,109,111,114,101,32,100,114,105,118,101,115,32,111,114,32,109,111,117,110,116,32,112,111,105,110,116,115,44,32,115,101,112,97,114,97,116,101,100,32,98,121,32,34,59,34,46],"value":"Here you can enter one or more drives or mount points, separated by \";\"."}, {"hash":217108627,"name":"tfrmoptionsbehavior.cbblacklistunmounteddevices.caption","sourcebytes":[65,117,116,111,109,97,116,105,99,97,108,108,121,32,38,104,105,100,101,32,117,110,109,111,117,110,116,101,100,32,100,101,118,105,99,101,115],"value":"Automatically &hide unmounted devices"} ]} doublecmd-1.1.30/src/frames/foptionsbehavior.lfm0000644000175000001440000000745215104114162020722 0ustar alexxusersinherited frmOptionsBehavior: TfrmOptionsBehavior Height = 276 Width = 666 HelpKeyword = '/configuration.html#ConfigBehaviors' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 276 ClientWidth = 666 object gbMisc1: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 93 Top = 6 Width = 654 Anchors = [akTop, akLeft, akRight] AutoSize = True ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 6 ClientHeight = 75 ClientWidth = 650 TabOrder = 0 object cbOnlyOnce: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = gbMisc1 AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 6 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'A&llow only one copy of DC at a time' TabOrder = 0 end object cbMinimizeToTray: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = cbOnlyOnce AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 29 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Mo&ve icon to system tray when minimized' TabOrder = 1 end object cbAlwaysShowTrayIcon: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = cbMinimizeToTray AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 52 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Al&ways show tray icon' OnChange = cbAlwaysShowTrayIconChange TabOrder = 2 end end object gbMisc2: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbMisc1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 85 Top = 99 Width = 654 Anchors = [akTop, akLeft, akRight] AutoSize = True ClientHeight = 67 ClientWidth = 650 TabOrder = 1 object lblDrivesBlackList: TLabel AnchorSideLeft.Control = gbMisc2 AnchorSideTop.Control = gbMisc2 Left = 8 Height = 13 Top = 2 Width = 70 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'Drives &blacklist' FocusControl = edtDrivesBlackList ParentColor = False end object edtDrivesBlackList: TEdit AnchorSideLeft.Control = lblDrivesBlackList AnchorSideTop.Control = lblDrivesBlackList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc2 AnchorSideRight.Side = asrBottom Left = 8 Height = 21 Hint = 'Here you can enter one or more drives or mount points, separated by ";".' Top = 21 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 ParentShowHint = False ShowHint = True TabOrder = 0 end object cbBlacklistUnmountedDevices: TCheckBox AnchorSideLeft.Control = edtDrivesBlackList AnchorSideTop.Control = edtDrivesBlackList AnchorSideTop.Side = asrBottom Left = 8 Height = 27 Top = 65 Width = 314 BorderSpacing.Bottom = 4 Caption = 'Automatically &hide unmounted devices' TabOrder = 1 end end end doublecmd-1.1.30/src/frames/foptionsautorefresh.pas0000644000175000001440000000703615104114162021455 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Auto-refresh options page Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit fOptionsAutoRefresh; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, fOptionsFrame; type { TfrmOptionsAutoRefresh } TfrmOptionsAutoRefresh = class(TOptionsEditor) cbWatchAttributesChange: TCheckBox; cbWatchExcludeDirs: TCheckBox; cbWatchFileNameChange: TCheckBox; cbWatchOnlyForeground: TCheckBox; edtWatchExcludeDirs: TEdit; gbAutoRefreshDisable: TGroupBox; gbAutoRefreshEnable: TGroupBox; procedure cbWatchExcludeDirsChange(Sender: TObject); procedure OnAutoRefreshOptionChanged(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uFileSystemWatcher, uGlobs, uLng; { TfrmOptionsAutoRefresh } procedure TfrmOptionsAutoRefresh.cbWatchExcludeDirsChange(Sender: TObject); begin edtWatchExcludeDirs.Enabled := cbWatchExcludeDirs.Checked; end; procedure TfrmOptionsAutoRefresh.OnAutoRefreshOptionChanged(Sender: TObject); begin gbAutoRefreshDisable.Enabled := cbWatchFileNameChange.Checked or cbWatchAttributesChange.Checked; end; class function TfrmOptionsAutoRefresh.GetIconIndex: Integer; begin Result := 15; end; class function TfrmOptionsAutoRefresh.GetTitle: String; begin Result := rsOptionsEditorAutoRefresh; end; procedure TfrmOptionsAutoRefresh.Init; begin if not (wfAttributesChange in TFileSystemWatcher.AvailableWatchFilter) then cbWatchAttributesChange.Visible := False; end; procedure TfrmOptionsAutoRefresh.Load; begin cbWatchFileNameChange.Checked := (watch_file_name_change in gWatchDirs); cbWatchAttributesChange.Checked := (watch_attributes_change in gWatchDirs); cbWatchOnlyForeground.Checked := (watch_only_foreground in gWatchDirs); cbWatchExcludeDirs.Checked := (watch_exclude_dirs in gWatchDirs); edtWatchExcludeDirs.Text := gWatchDirsExclude; OnAutoRefreshOptionChanged(nil); cbWatchExcludeDirsChange(nil); end; function TfrmOptionsAutoRefresh.Save: TOptionsEditorSaveFlags; begin Result := []; gWatchDirs := []; // Reset watch options if cbWatchFileNameChange.Checked then Include(gWatchDirs, watch_file_name_change); if cbWatchAttributesChange.Checked then Include(gWatchDirs, watch_attributes_change); if cbWatchOnlyForeground.Checked then Include(gWatchDirs, watch_only_foreground); if cbWatchExcludeDirs.Checked then Include(gWatchDirs, watch_exclude_dirs); gWatchDirsExclude:= edtWatchExcludeDirs.Text; end; end. doublecmd-1.1.30/src/frames/foptionsautorefresh.lrj0000644000175000001440000000316015104114162021453 0ustar alexxusers{"version":1,"strings":[ {"hash":246808868,"name":"tfrmoptionsautorefresh.gbautorefreshenable.caption","sourcebytes":[82,101,102,114,101,115,104,32,102,105,108,101,32,108,105,115,116],"value":"Refresh file list"}, {"hash":122958068,"name":"tfrmoptionsautorefresh.cbwatchfilenamechange.caption","sourcebytes":[87,104,101,110,32,38,102,105,108,101,115,32,97,114,101,32,99,114,101,97,116,101,100,44,32,100,101,108,101,116,101,100,32,111,114,32,114,101,110,97,109,101,100],"value":"When &files are created, deleted or renamed"}, {"hash":35420293,"name":"tfrmoptionsautorefresh.cbwatchattributeschange.caption","sourcebytes":[87,104,101,110,32,38,115,105,122,101,44,32,100,97,116,101,32,111,114,32,97,116,116,114,105,98,117,116,101,115,32,99,104,97,110,103,101],"value":"When &size, date or attributes change"}, {"hash":245810200,"name":"tfrmoptionsautorefresh.gbautorefreshdisable.caption","sourcebytes":[68,105,115,97,98,108,101,32,97,117,116,111,45,114,101,102,114,101,115,104],"value":"Disable auto-refresh"}, {"hash":126628980,"name":"tfrmoptionsautorefresh.cbwatchonlyforeground.caption","sourcebytes":[87,104,101,110,32,97,112,112,108,105,99,97,116,105,111,110,32,105,115,32,105,110,32,116,104,101,32,38,98,97,99,107,103,114,111,117,110,100],"value":"When application is in the &background"}, {"hash":105351658,"name":"tfrmoptionsautorefresh.cbwatchexcludedirs.caption","sourcebytes":[70,111,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,38,112,97,116,104,115,32,97,110,100,32,116,104,101,105,114,32,115,117,98,100,105,114,101,99,116,111,114,105,101,115,58],"value":"For the following &paths and their subdirectories:"} ]} doublecmd-1.1.30/src/frames/foptionsautorefresh.lfm0000644000175000001440000000574615104114162021456 0ustar alexxusersinherited frmOptionsAutoRefresh: TfrmOptionsAutoRefresh Height = 228 Width = 501 HelpKeyword = '/configuration.html#ConfigRefresh' ClientHeight = 228 ClientWidth = 501 DesignTop = 27 object gbAutoRefreshEnable: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 6 Width = 489 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Refresh file list' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 3 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 59 ClientWidth = 485 TabOrder = 0 object cbWatchFileNameChange: TCheckBox Left = 10 Height = 23 Top = 5 Width = 309 Caption = 'When &files are created, deleted or renamed' OnChange = OnAutoRefreshOptionChanged TabOrder = 0 end object cbWatchAttributesChange: TCheckBox Left = 10 Height = 23 Top = 31 Width = 309 Caption = 'When &size, date or attributes change' OnChange = OnAutoRefreshOptionChanged TabOrder = 1 end end object gbAutoRefreshDisable: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbAutoRefreshEnable AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 117 Top = 94 Width = 489 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Disable auto-refresh' ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 3 ClientHeight = 94 ClientWidth = 485 TabOrder = 1 object cbWatchOnlyForeground: TCheckBox AnchorSideLeft.Control = gbAutoRefreshDisable AnchorSideTop.Control = gbAutoRefreshDisable Left = 10 Height = 23 Top = 5 Width = 269 BorderSpacing.Left = 10 Caption = 'When application is in the &background' TabOrder = 0 end object cbWatchExcludeDirs: TCheckBox AnchorSideLeft.Control = cbWatchOnlyForeground AnchorSideTop.Control = cbWatchOnlyForeground AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 31 Width = 339 Caption = 'For the following &paths and their subdirectories:' OnChange = cbWatchExcludeDirsChange TabOrder = 1 end object edtWatchExcludeDirs: TEdit AnchorSideLeft.Control = cbWatchExcludeDirs AnchorSideTop.Control = cbWatchExcludeDirs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbAutoRefreshDisable AnchorSideRight.Side = asrBottom Left = 30 Height = 28 Top = 57 Width = 447 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 BorderSpacing.Right = 8 BorderSpacing.Bottom = 15 TabOrder = 2 end end end doublecmd-1.1.30/src/frames/foptionsarchivers.pas0000644000175000001440000010065015104114162021110 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Archivers options page Copyright (C) 2006-2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptionsArchivers; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. DividerBevel, Classes, SysUtils, StdCtrls, ExtCtrls, ComCtrls, EditBtn, Buttons, Menus, Dialogs, //DC uMultiArc, fOptionsFrame, Controls; type { TfrmOptionsArchivers } TfrmOptionsArchivers = class(TOptionsEditor) chkFileNameOnlyList: TCheckBox; pnlFileNameOnlyList: TPanel; pnlArchiverListbox: TPanel; lblArchiverListBox: TLabel; lbxArchiver: TListBox; splArchiver: TSplitter; pnlArchiverCommands: TPanel; pnlArchiverButtons: TPanel; chkArchiverEnabled: TCheckBox; btnArchiverApply: TBitBtn; btnArchiverAdd: TBitBtn; btnArchiverCopy: TBitBtn; btnArchiverRename: TBitBtn; btnArchiverDelete: TBitBtn; btnArchiverOther: TBitBtn; pcArchiverCommands: TPageControl; tbArchiverGeneral: TTabSheet; lblArchiverDescription: TLabel; edtArchiverDescription: TEdit; lblArchiverArchiver: TLabel; edtArchiverArchiver: TEdit; btnArchiverSelectFileArchiver: TSpeedButton; btnArchiverRelativer: TSpeedButton; lblArchiverExtension: TLabel; edtArchiverExtension: TEdit; lblArchiverList: TLabel; edtArchiverList: TEdit; btnArchiverListHelper: TSpeedButton; lblArchiverListStart: TLabel; edtArchiverListStart: TEdit; lblArchiverListEnd: TLabel; edtArchiverListEnd: TEdit; lblArchiverListFormat: TLabel; memArchiverListFormat: TMemo; lblArchiverExtract: TLabel; edtArchiverExtract: TEdit; btnArchiverExtractHelper: TSpeedButton; lblArchiverAdd: TLabel; edtArchiverAdd: TEdit; btnArchiverAddHelper: TSpeedButton; tbArchiverAdditional: TTabSheet; lblArchiverDelete: TLabel; edtArchiverDelete: TEdit; btnArchiverDeleteHelper: TSpeedButton; lblArchiverTest: TLabel; edtArchiverTest: TEdit; btnArchiverTestHelper: TSpeedButton; lblArchiverExtractWithoutPath: TLabel; edtArchiverExtractWithoutPath: TEdit; btnArchiverExtractWithoutPathHelper: TSpeedButton; lblArchiverSelfExtract: TLabel; edtArchiverSelfExtract: TEdit; btnArchiverSelfExtractHelper: TSpeedButton; lblArchiverPasswordQuery: TLabel; edtArchiverPasswordQuery: TEdit; bvlArchiverIds: TDividerBevel; lblArchiverIds: TLabel; edtArchiverId: TEdit; lblArchiverIdPosition: TLabel; edtArchiverIdPosition: TEdit; lblArchiverIdSeekRange: TLabel; edtArchiverIdSeekRange: TEdit; bvlArchiverParsingMode: TDividerBevel; ckbArchiverUnixPath: TCheckBox; ckbArchiverWindowsPath: TCheckBox; ckbArchiverUnixFileAttributes: TCheckBox; ckbArchiverWindowsFileAttributes: TCheckBox; bvlArchiverOptions: TDividerBevel; chkArchiverMultiArcOutput: TCheckBox; chkArchiverMultiArcDebug: TCheckBox; pmArchiverOther: TPopupMenu; miArchiverAutoConfigure: TMenuItem; miArchiverDiscardModification: TMenuItem; miSeparator1: TMenuItem; miArchiverSortArchivers: TMenuItem; miArchiverDisableAll: TMenuItem; miArchiverEnableAll: TMenuItem; miSeparator2: TMenuItem; miArchiverExport: TMenuItem; miArchiverImport: TMenuItem; pmArchiverPathHelper: TPopupMenu; pmArchiverParamHelper: TPopupMenu; SaveArchiverDialog: TSaveDialog; OpenArchiverDialog: TOpenDialog; procedure chkFileNameOnlyListChange(Sender: TObject); procedure lbxArchiverSelectionChange(Sender: TObject; {%H-}User: boolean); procedure lbxArchiverDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure lbxArchiverDragDrop(Sender, {%H-}Source: TObject; {%H-}X, Y: integer); procedure edtAnyChange(Sender: TObject); procedure ckbArchiverUnixPathChange(Sender: TObject); procedure ckbArchiverWindowsPathChange(Sender: TObject); procedure ckbArchiverUnixFileAttributesChange(Sender: TObject); procedure ckbArchiverWindowsFileAttributesChange(Sender: TObject); procedure chkArchiverEnabledChange(Sender: TObject); procedure SetConfigurationState(bConfigurationSaved: boolean); procedure SetControlsState(bWantedState: boolean); procedure SetActiveButtonsBasedOnArchiversQuantity; procedure ActualSaveCurrentMultiArcItem; procedure btnArchiverApplyClick(Sender: TObject); procedure btnArchiverAddClick(Sender: TObject); procedure btnArchiverCopyClick(Sender: TObject); procedure btnArchiverRenameClick(Sender: TObject); procedure btnArchiverDeleteClick(Sender: TObject); procedure btnArchiverOtherClick(Sender: TObject); procedure miArchiverAutoConfigureClick(Sender: TObject); procedure miArchiverDiscardModificationClick(Sender: TObject); procedure miArchiverSortArchiversClick(Sender: TObject); procedure miAdjustEnableAllClick(Sender: TObject); procedure miArchiverExportClick(Sender: TObject); procedure miArchiverImportClick(Sender: TObject); procedure miHelperClick(Sender: TObject); procedure btnHelperClick(Sender: TObject); procedure btnArchiverSelectFileArchiverClick(Sender: TObject); procedure btnArchiverRelativerClick(Sender: TObject); procedure PopulateParamHelperMenu; private MultiArcListTemp: TMultiArcList; bCurrentlyFilling: boolean; bCurrentlyLoadingSettings: boolean; edtHelperRequested: TEdit; //Used as a kind of pointer of TEdit when it's time to use the % helper. procedure FillListBoxWithArchiverList; protected procedure Init; override; procedure Load; override; procedure Done; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function IsSignatureComputedFromAllWindowComponents: boolean; override; function ExtraOptionsSignature(CurrentSignature: dword): dword; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. //DC DCStrUtils, uGlobs, uLng, uSpecialDir, uGlobsPaths, uShowMsg; const CONFIG_NOTSAVED = False; CONFIG_SAVED = True; var iLastDisplayedIndex: integer = -1; { TfrmOptionsArchivers } { TfrmOptionsArchivers.Init } procedure TfrmOptionsArchivers.Init; begin OpenArchiverDialog.Filter := ParseLineToFileFilter([rsFilterArchiverConfigFiles, '*.ini;*.addon', rsFilterAnyFiles, AllFilesMask]); SaveArchiverDialog.Filter := ParseLineToFileFilter([rsFilterArchiverConfigFiles, '*.ini', rsFilterAnyFiles, AllFilesMask]); end; { TfrmOptionsArchivers.Load } procedure TfrmOptionsArchivers.Load; begin bCurrentlyLoadingSettings := True; bCurrentlyFilling := True; btnArchiverSelectFileArchiver.Hint := rsOptArchiverArchiver; FreeAndNil(MultiArcListTemp); MultiArcListTemp := gMultiArcList.Clone; FillListBoxWithArchiverList; gSpecialDirList.PopulateMenuWithSpecialDir(pmArchiverPathHelper, mp_PATHHELPER, nil); PopulateParamHelperMenu; pcArchiverCommands.ActivePage := tbArchiverGeneral; end; { TfrmOptionsArchivers.Done } procedure TfrmOptionsArchivers.Done; begin if lbxArchiver.ItemIndex <> -1 then if lbxArchiver.ItemIndex < MultiArcListTemp.Count then iLastDisplayedIndex := lbxArchiver.ItemIndex; // Let's preserve the last item we were at to select it if we come back here in this session. FreeAndNil(MultiArcListTemp); end; { TfrmOptionsArchivers.Save } function TfrmOptionsArchivers.Save: TOptionsEditorSaveFlags; begin Result := []; if not lbxArchiver.Enabled then ActualSaveCurrentMultiArcItem; MultiArcListTemp.SaveToFile(gpCfgDir + sMULTIARC_FILENAME); FreeAndNil(gMultiArcList); gMultiArcList := MultiArcListTemp.Clone; LastLoadedOptionSignature := ComputeCompleteOptionsSignature; end; { TfrmOptionsArchivers.GetIconIndex } class function TfrmOptionsArchivers.GetIconIndex: integer; begin Result := 18; end; { TfrmOptionsArchivers.GetTitle } class function TfrmOptionsArchivers.GetTitle: string; begin Result := rsOptionsEditorArchivers; end; { TfrmOptionsArchivers.IsSignatureComputedFromAllWindowComponents } function TfrmOptionsArchivers.IsSignatureComputedFromAllWindowComponents: boolean; begin Result := False; end; { TfrmOptionsArchivers.ExtraOptionsSignature } function TfrmOptionsArchivers.ExtraOptionsSignature(CurrentSignature: dword): dword; begin if not lbxArchiver.Enabled then //If currently our Listbox is disabled, it's because we did at least one modification... Result := (LastLoadedOptionSignature xor $01) //...so let's make sure the reported signature for the whole thing is affected. else Result := MultiArcListTemp.ComputeSignature(CurrentSignature); end; { TfrmOptionsArchivers.FillListBoxWithArchiverList } procedure TfrmOptionsArchivers.FillListBoxWithArchiverList; var I, iRememberIndex: integer; begin bCurrentlyFilling := True; iRememberIndex := lbxArchiver.ItemIndex; lbxArchiver.Clear; for I := 0 to MultiArcListTemp.Count - 1 do lbxArchiver.Items.AddObject(MultiArcListTemp.Names[I], MultiArcListTemp[I]); pcArchiverCommands.Enabled := (lbxArchiver.Items.Count <> 0); chkArchiverEnabled.Enabled := (lbxArchiver.Items.Count <> 0); if lbxArchiver.Items.Count > 0 then begin if (iRememberIndex <> -1) and (iRememberIndex < lbxArchiver.Items.Count) then lbxArchiver.ItemIndex := iRememberIndex else if (iLastDisplayedIndex <> -1) and (iLastDisplayedIndex < lbxArchiver.Items.Count) then lbxArchiver.ItemIndex := iLastDisplayedIndex else lbxArchiver.ItemIndex := 0; end; SetActiveButtonsBasedOnArchiversQuantity; btnArchiverApply.Enabled := False; bCurrentlyFilling := False; lbxArchiverSelectionChange(lbxArchiver, False); end; { TfrmOptionsArchivers.lbxArchiverSelectionChange } procedure TfrmOptionsArchivers.lbxArchiverSelectionChange(Sender: TObject; User: boolean); begin if not bCurrentlyFilling then begin bCurrentlyLoadingSettings := True; if lbxArchiver.ItemIndex < 0 then begin edtArchiverDescription.Text := EmptyStr; edtArchiverArchiver.Text := EmptyStr; edtArchiverExtension.Text := EmptyStr; edtArchiverList.Text := EmptyStr; edtArchiverListStart.Text := EmptyStr; edtArchiverListEnd.Text := EmptyStr; memArchiverListFormat.Lines.Clear; edtArchiverExtract.Text := EmptyStr; edtArchiverAdd.Text := EmptyStr; edtArchiverDelete.Text := EmptyStr; edtArchiverTest.Text := EmptyStr; edtArchiverExtractWithoutPath.Text := EmptyStr; edtArchiverSelfExtract.Text := EmptyStr; edtArchiverPasswordQuery.Text := EmptyStr; edtArchiverId.Text := EmptyStr; edtArchiverIdPosition.Text := EmptyStr; edtArchiverIdSeekRange.Text := EmptyStr; ckbArchiverUnixPath.Checked := False; ckbArchiverWindowsPath.Checked := False; ckbArchiverUnixFileAttributes.Checked := False; ckbArchiverWindowsFileAttributes.Checked := False; chkArchiverMultiArcOutput.Checked := False; chkArchiverMultiArcDebug.Checked := False; chkArchiverEnabled.Checked := False; pcArchiverCommands.Enabled := (lbxArchiver.Items.Count <> 0); chkArchiverEnabled.Enabled := (lbxArchiver.Items.Count <> 0); end else begin with TMultiArcItem(lbxArchiver.Items.Objects[lbxArchiver.ItemIndex]) do begin edtArchiverDescription.Text := FDescription; edtArchiverArchiver.Text := FArchiver; edtArchiverExtension.Text := FExtension; edtArchiverList.Text := FList; edtArchiverListStart.Text := FStart; edtArchiverListEnd.Text := FEnd; memArchiverListFormat.Lines.Assign(FFormat); edtArchiverExtract.Text := FExtract; edtArchiverAdd.Text := FAdd; edtArchiverDelete.Text := FDelete; edtArchiverTest.Text := FTest; edtArchiverExtractWithoutPath.Text := FExtractWithoutPath; edtArchiverSelfExtract.Text := FAddSelfExtract; edtArchiverPasswordQuery.Text := FPasswordQuery; edtArchiverId.Text := FID; edtArchiverIdPosition.Text := FIDPos; edtArchiverIdSeekRange.Text := FIDSeekRange; chkFileNameOnlyList.Checked:= mafFileNameList in FFlags; ckbArchiverUnixPath.Checked := (FFormMode and $01 <> $00); ckbArchiverWindowsPath.Checked := (FFormMode and $02 <> $00); ckbArchiverUnixFileAttributes.Checked := (FFormMode and $04 <> $00); ckbArchiverWindowsFileAttributes.Checked := (FFormMode and $08 <> $00); chkArchiverMultiArcOutput.Checked := FOutput; chkArchiverMultiArcDebug.Checked := FDebug; chkArchiverEnabled.Checked := FEnabled; end; end; chkFileNameOnlyListChange(chkFileNameOnlyList); SetControlsState(chkArchiverEnabled.Checked); SetConfigurationState(CONFIG_SAVED); bCurrentlyLoadingSettings := False; end; end; procedure TfrmOptionsArchivers.chkFileNameOnlyListChange(Sender: TObject); var AEnabled: Boolean; begin AEnabled:= (not chkFileNameOnlyList.Checked) and chkArchiverEnabled.Checked; edtArchiverList.Enabled:= AEnabled; btnArchiverListHelper.Enabled:= AEnabled; edtArchiverListStart.Enabled:= AEnabled; edtArchiverListEnd.Enabled:= AEnabled; memArchiverListFormat.Enabled:= AEnabled; edtAnyChange(Sender); end; { TfrmOptionsArchivers.lbxArchiverDragOver } procedure TfrmOptionsArchivers.lbxArchiverDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmOptionsArchivers.lbxArchiverDragDrop } procedure TfrmOptionsArchivers.lbxArchiverDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin SrcIndex := lbxArchiver.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbxArchiver.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbxArchiver.Count) then DestIndex := lbxArchiver.Count - 1; lbxArchiver.Items.Move(SrcIndex, DestIndex); MultiArcListTemp.FList.Move(SrcIndex, DestIndex); lbxArchiver.ItemIndex := DestIndex; lbxArchiverSelectionChange(lbxArchiver, False); end; { TfrmOptionsArchivers.edtAnyChange } procedure TfrmOptionsArchivers.edtAnyChange(Sender: TObject); begin if not bCurrentlyLoadingSettings then if lbxArchiver.Enabled then SetConfigurationState(CONFIG_NOTSAVED); end; { TfrmOptionsArchivers.ckbArchiverUnixPathChange } procedure TfrmOptionsArchivers.ckbArchiverUnixPathChange(Sender: TObject); begin if TCheckBox(Sender).Checked then if ckbArchiverWindowsPath.Checked then ckbArchiverWindowsPath.Checked := False; edtAnyChange(Sender); end; { TfrmOptionsArchivers.ckbArchiverWindowsPathChange } procedure TfrmOptionsArchivers.ckbArchiverWindowsPathChange(Sender: TObject); begin if TCheckbox(Sender).Checked then if ckbArchiverUnixPath.Checked then ckbArchiverUnixPath.Checked := False; edtAnyChange(Sender); end; { TfrmOptionsArchivers.ckbArchiverUnixFileAttributesChange } procedure TfrmOptionsArchivers.ckbArchiverUnixFileAttributesChange(Sender: TObject); begin if TCheckBox(Sender).Checked then if ckbArchiverWindowsFileAttributes.Checked then ckbArchiverWindowsFileAttributes.Checked := False; edtAnyChange(Sender); end; { TfrmOptionsArchivers.ckbArchiverWindowsFileAttributesChange } procedure TfrmOptionsArchivers.ckbArchiverWindowsFileAttributesChange(Sender: TObject); begin if TCheckBox(Sender).Checked then if ckbArchiverUnixFileAttributes.Checked then ckbArchiverUnixFileAttributes.Checked := False; edtAnyChange(Sender); end; { TfrmOptionsArchivers.chkArchiverEnabledChange } procedure TfrmOptionsArchivers.chkArchiverEnabledChange(Sender: TObject); begin if not bCurrentlyLoadingSettings then begin SetControlsState(chkArchiverEnabled.Checked); edtAnyChange(Sender); end; end; { TfrmOptionsArchivers.SetConfigurationState } procedure TfrmOptionsArchivers.SetConfigurationState(bConfigurationSaved: boolean); begin if lbxArchiver.Enabled <> bConfigurationSaved then begin lbxArchiver.Enabled := bConfigurationSaved; btnArchiverApply.Enabled := not bConfigurationSaved; btnArchiverAdd.Enabled := bConfigurationSaved; btnArchiverCopy.Enabled := bConfigurationSaved; btnArchiverRename.Enabled := bConfigurationSaved; miArchiverImport.Enabled := bConfigurationSaved; miArchiverSortArchivers.Enabled := bConfigurationSaved; miArchiverExport.Enabled := bConfigurationSaved; miArchiverDiscardModification.Enabled := not bConfigurationSaved; miArchiverDisableAll.Enabled := bConfigurationSaved; miArchiverEnableAll.Enabled := bConfigurationSaved; if bConfigurationSaved = CONFIG_SAVED then lbxArchiver.Hint := '' else lbxArchiver.Hint := rsOptArchiveConfigureSaveToChange; end; end; { TfrmOptionsArchivers.SetControlsState } procedure TfrmOptionsArchivers.SetControlsState(bWantedState: boolean); var iComponentIndex: integer; begin if lbxArchiver.ItemIndex < 0 then Exit; TMultiArcItem(lbxArchiver.Items.Objects[lbxArchiver.ItemIndex]).FEnabled := bWantedState; if bWantedState <> edtArchiverDescription.Enabled then //Let's use "edtDescription" as a reference. for iComponentIndex := 0 to pred(ComponentCount) do if Components[iComponentIndex].Owner <> nil then if Components[iComponentIndex].InheritsFrom(TControl) then if (TControl(Components[iComponentIndex]).Parent = tbArchiverGeneral) or (TControl(Components[iComponentIndex]).Parent = tbArchiverAdditional) then if Components[iComponentIndex].Name <> chkArchiverEnabled.Name then TControl(Components[iComponentIndex]).Enabled := bWantedState; end; { TfrmOptionsArchivers.SetActiveButtonsBasedOnArchiversQuantity } procedure TfrmOptionsArchivers.SetActiveButtonsBasedOnArchiversQuantity; begin btnArchiverCopy.Enabled := ((lbxArchiver.Items.Count > 0) and (lbxArchiver.Enabled)); btnArchiverRename.Enabled := btnArchiverCopy.Enabled; btnArchiverDelete.Enabled := btnArchiverCopy.Enabled; miArchiverAutoConfigure.Enabled := btnArchiverCopy.Enabled; miArchiverSortArchivers.Enabled := ((lbxArchiver.Items.Count > 1) and (lbxArchiver.Enabled)); miArchiverExport.Enabled := btnArchiverCopy.Enabled; end; { TfrmOptionsArchivers.ActualSaveCurrentMultiArcItem } procedure TfrmOptionsArchivers.ActualSaveCurrentMultiArcItem; begin if lbxArchiver.ItemIndex < 0 then Exit; with TMultiArcItem(lbxArchiver.Items.Objects[lbxArchiver.ItemIndex]) do begin FPacker := lbxArchiver.Items[lbxArchiver.ItemIndex]; FDescription := edtArchiverDescription.Text; FArchiver := edtArchiverArchiver.Text; FExtension := edtArchiverExtension.Text; FList := edtArchiverList.Text; FStart := edtArchiverListStart.Text; FEnd := edtArchiverListEnd.Text; FFormat.Assign(memArchiverListFormat.Lines); FExtract := edtArchiverExtract.Text; FAdd := edtArchiverAdd.Text; FDelete := edtArchiverDelete.Text; FTest := edtArchiverTest.Text; FExtractWithoutPath := edtArchiverExtractWithoutPath.Text; FAddSelfExtract := edtArchiverSelfExtract.Text; FPasswordQuery := edtArchiverPasswordQuery.Text; FID := edtArchiverId.Text; FIDPos := edtArchiverIdPosition.Text; FIDSeekRange := edtArchiverIdSeekRange.Text; FFlags := []; if chkFileNameOnlyList.Checked then Include(FFlags, mafFileNameList); FFormMode := 0; if ckbArchiverUnixPath.Checked then FFormMode := FFormMode or $01; if ckbArchiverWindowsPath.Checked then FFormMode := FFormMode or $02; if ckbArchiverUnixFileAttributes.Checked then FFormMode := FFormMode or $04; if ckbArchiverWindowsFileAttributes.Checked then FFormMode := FFormMode or $08; FOutput := chkArchiverMultiArcOutput.Checked; FDebug := chkArchiverMultiArcDebug.Checked; SetConfigurationState(CONFIG_SAVED); end; end; { TfrmOptionsArchivers.btnArchiverApplyClick } procedure TfrmOptionsArchivers.btnArchiverApplyClick(Sender: TObject); begin Save; if lbxArchiver.CanFocus then lbxArchiver.SetFocus; end; { TfrmOptionsArchivers.btnArchiverAddClick } procedure TfrmOptionsArchivers.btnArchiverAddClick(Sender: TObject); var sName: string; MultiArcItem: TMultiArcItem; begin if InputQuery(Caption, rsOptArchiveTypeName, sName) then begin MultiArcItem := TMultiArcItem.Create; MultiArcItem.FEnabled:=True; lbxArchiver.Items.AddObject(sName, MultiArcItem); MultiArcListTemp.Add(sName, MultiArcItem); lbxArchiver.ItemIndex := lbxArchiver.Items.Count - 1; lbxArchiverSelectionChange(lbxArchiver, False); pcArchiverCommands.Enabled := (lbxArchiver.Items.Count <> 0); chkArchiverEnabled.Enabled := (lbxArchiver.Items.Count <> 0); SetActiveButtonsBasedOnArchiversQuantity; if pcArchiverCommands.ActivePage<>tbArchiverGeneral then pcArchiverCommands.ActivePage:=tbArchiverGeneral; if edtArchiverDescription.CanFocus then edtArchiverDescription.SetFocus; end; end; { TfrmOptionsArchivers.btnArchiverCopyClick } procedure TfrmOptionsArchivers.btnArchiverCopyClick(Sender: TObject); var ANewMultiArcItem: TMultiArcItem; sCurrentSelectedName, sNewName: string; iIndexCopy, iPosOpenPar, iNewInsertedPosition: integer; begin if lbxArchiver.ItemIndex < 0 then Exit; sCurrentSelectedName := lbxArchiver.Items.Strings[lbxArchiver.ItemIndex]; if LastDelimiter(')', sCurrentSelectedName) = length(sCurrentSelectedName) then begin iPosOpenPar := LastDelimiter('(', sCurrentSelectedName); if (iPosOpenPar > 0) and (iPosOpenPar > (length(sCurrentSelectedName) - 4)) then sCurrentSelectedName := LeftStr(sCurrentSelectedName, pred(pred(iPosOpenPar))); end; iIndexCopy := 2; while lbxArchiver.Items.IndexOf(Format('%s (%d)', [sCurrentSelectedName, iIndexCopy])) <> -1 do Inc(iIndexCopy); sNewName := Format('%s (%d)', [sCurrentSelectedName, iIndexCopy]); ANewMultiArcItem := TMultiArcItem(lbxArchiver.Items.Objects[lbxArchiver.ItemIndex]).Clone; //Let's place our copy right after the original one. iNewInsertedPosition := succ(lbxArchiver.ItemIndex); if iNewInsertedPosition < MultiArcListTemp.Count then begin lbxArchiver.Items.InsertObject(iNewInsertedPosition, sNewName, ANewMultiArcItem); MultiArcListTemp.Insert(iNewInsertedPosition, sNewName, aNewMultiArcItem); end else begin lbxArchiver.Items.AddObject(sNewName, ANewMultiArcItem); MultiArcListTemp.Add(sNewName, aNewMultiArcItem); end; lbxArchiver.ItemIndex := iNewInsertedPosition; SetActiveButtonsBasedOnArchiversQuantity; end; { TfrmOptionsArchivers.btnArchiverRenameClick } procedure TfrmOptionsArchivers.btnArchiverRenameClick(Sender: TObject); var sNewName: string; begin if lbxArchiver.ItemIndex < 0 then Exit; sNewName := lbxArchiver.Items[lbxArchiver.ItemIndex]; if InputQuery(Caption, rsOptArchiveTypeName, sNewName) then begin lbxArchiver.Items[lbxArchiver.ItemIndex] := sNewName; MultiArcListTemp.Names[lbxArchiver.ItemIndex] := sNewName; end; end; { TfrmOptionsArchivers.btnArchiverDeleteClick } procedure TfrmOptionsArchivers.btnArchiverDeleteClick(Sender: TObject); var iIndexDelete: integer; begin if lbxArchiver.ItemIndex < 0 then Exit; if MsgBox(Format(rsOptArchiverConfirmDelete, [lbxArchiver.Items.Strings[lbxArchiver.ItemIndex]]), [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then begin iIndexDelete := lbxArchiver.ItemIndex; lbxArchiver.Items.Delete(iIndexDelete); MultiArcListTemp.Delete(iIndexDelete); if iIndexDelete >= MultiArcListTemp.Count then lbxArchiver.ItemIndex := lbxArchiver.Items.Count - 1 else lbxArchiver.ItemIndex := iIndexDelete; pcArchiverCommands.Enabled := (lbxArchiver.Items.Count <> 0); chkArchiverEnabled.Enabled := (lbxArchiver.Items.Count <> 0); lbxArchiverSelectionChange(lbxArchiver, False); if lbxArchiver.CanFocus then lbxArchiver.SetFocus; end; SetActiveButtonsBasedOnArchiversQuantity; end; { TfrmOptionsArchivers.btnArchiverOtherClick } procedure TfrmOptionsArchivers.btnArchiverOtherClick(Sender: TObject); var pWantedPos: TPoint; begin pWantedPos := btnArchiverOther.ClientToScreen(Point(btnArchiverOther.Width div 2, btnArchiverOther.Height - 5)); // Position this way instead of using mouse cursor since it will work for keyboard user. pmArchiverOther.PopUp(pWantedPos.X, pWantedPos.Y); end; { TfrmOptionsArchivers.miArchiverAutoConfigureClick } procedure TfrmOptionsArchivers.miArchiverAutoConfigureClick(Sender: TObject); begin MultiArcListTemp.AutoConfigure; lbxArchiverSelectionChange(lbxArchiver, False); end; { TfrmOptionsArchivers.miArchiverDiscardModificationClick } procedure TfrmOptionsArchivers.miArchiverDiscardModificationClick(Sender: TObject); begin if MultiArcListTemp <> nil then MultiArcListTemp.Free; MultiArcListTemp := gMultiArcList.Clone; lbxArchiverSelectionChange(lbxArchiver, False); end; { TfrmOptionsArchivers.miArchiverSortArchiversClick } procedure TfrmOptionsArchivers.miArchiverSortArchiversClick(Sender: TObject); begin if MultiArcListTemp.Count > 0 then begin MultiArcListTemp.FList.Sort; FillListBoxWithArchiverList; lbxArchiver.ItemIndex := 0; lbxArchiverSelectionChange(lbxArchiver, False); end; end; { TfrmOptionsArchivers.miAdjustEnableAllClick } procedure TfrmOptionsArchivers.miAdjustEnableAllClick(Sender: TObject); var iIndex: integer; begin for iIndex := 0 to pred(MultiArcListTemp.Count) do MultiArcListTemp.Items[iIndex].FEnabled := (TComponent(Sender).Tag = 1); lbxArchiverSelectionChange(lbxArchiver, False); end; { TfrmOptionsArchivers.miArchiverExportClick } procedure TfrmOptionsArchivers.miArchiverExportClick(Sender: TObject); var slValueList, slOutputIndexSelected: TStringList; ExportedMultiArcList: TMultiArcList; iIndex, iExportedIndex: integer; begin if MultiArcListTemp.Count > 0 then begin slValueList := TStringList.Create; slOutputIndexSelected := TStringList.Create; try for iIndex := 0 to pred(MultiArcListTemp.Count) do slValueList.Add(MultiArcListTemp.FList.Strings[iIndex]); if ShowInputMultiSelectListBox(rsOptArchiverExportCaption, rsOptArchiverExportPrompt, slValueList, slOutputIndexSelected) then begin ExportedMultiArcList := TMultiArcList.Create; try for iIndex := 0 to pred(slOutputIndexSelected.Count) do begin iExportedIndex := StrToIntDef(slOutputIndexSelected.Strings[iIndex], -1); if iExportedIndex <> -1 then ExportedMultiArcList.Add(MultiArcListTemp.FList.Strings[iExportedIndex], MultiArcListTemp.Items[iExportedIndex].Clone); end; if ExportedMultiArcList.Count > 0 then begin SaveArchiverDialog.DefaultExt := '*.ini'; SaveArchiverDialog.FilterIndex := 1; SaveArchiverDialog.Title := rsOptArchiverWhereToSave; SaveArchiverDialog.FileName := rsOptArchiverDefaultExportFilename; if SaveArchiverDialog.Execute then begin ExportedMultiArcList.SaveToFile(SaveArchiverDialog.FileName); msgOK(Format(rsOptArchiverExportDone, [ExportedMultiArcList.Count, SaveArchiverDialog.FileName])); end; end; finally ExportedMultiArcList.Free; end; end; finally slOutputIndexSelected.Free; slValueList.Free; end; end; end; { TfrmOptionsArchivers.miArchiverImportClick } procedure TfrmOptionsArchivers.miArchiverImportClick(Sender: TObject); var ImportedMultiArcList: TMultiArcList; slValueList, slOutputIndexSelected: TStringList; iIndex, iImportedIndex, iNbImported: integer; begin OpenArchiverDialog.DefaultExt := '*.ini'; OpenArchiverDialog.FilterIndex := 1; OpenArchiverDialog.Title := rsOptArchiverImportFile; if OpenArchiverDialog.Execute then begin ImportedMultiArcList := TMultiArcList.Create; try ImportedMultiArcList.LoadFromFile(OpenArchiverDialog.FileName); if ImportedMultiArcList.Count > 0 then begin slValueList := TStringList.Create; slOutputIndexSelected := TStringList.Create; try for iIndex := 0 to pred(ImportedMultiArcList.Count) do slValueList.Add(ImportedMultiArcList.FList.Strings[iIndex]); if ShowInputMultiSelectListBox(rsOptArchiverImportCaption, rsOptArchiverImportPrompt, slValueList, slOutputIndexSelected) then begin iNbImported := 0; for iIndex := 0 to pred(slOutputIndexSelected.Count) do begin iImportedIndex := StrToIntDef(slOutputIndexSelected.Strings[iIndex], -1); if iImportedIndex <> -1 then begin MultiArcListTemp.Add(ImportedMultiArcList.FList.Strings[iImportedIndex], ImportedMultiArcList.Items[iImportedIndex].Clone); lbxArchiver.Items.AddObject(MultiArcListTemp.FList.Strings[pred(MultiArcListTemp.Count)], MultiArcListTemp.Items[pred(MultiArcListTemp.Count)]); MultiArcListTemp.Items[pred(MultiArcListTemp.Count)].FEnabled := True; //; Inc(iNbImported); end; end; lbxArchiver.ItemIndex := lbxArchiver.Items.Count - 1; if iNbImported > 0 then begin SetActiveButtonsBasedOnArchiversQuantity; msgOK(Format(rsOptArchiverImportDone, [iNbImported, OpenArchiverDialog.FileName])); end; end; finally slOutputIndexSelected.Free; slValueList.Free; end; end; finally ImportedMultiArcList.Free; end; end; end; { TfrmOptionsArchivers.miHelperClick } procedure TfrmOptionsArchivers.miHelperClick(Sender: TObject); begin if edtHelperRequested <> nil then edtHelperRequested.SelText := Trim(LeftStr(TMenuItem(Sender).Caption, pred(pos('-', TMenuItem(Sender).Caption)))); end; { TfrmOptionsArchivers.btnHelperClick } procedure TfrmOptionsArchivers.btnHelperClick(Sender: TObject); begin edtHelperRequested := TEdit(TSpeedButton(Sender).AnchorSideTop.Control); pmArchiverParamHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsArchivers.btnArchiverSlectFileArchiverClick } procedure TfrmOptionsArchivers.btnArchiverSelectFileArchiverClick(Sender: TObject); begin OpenArchiverDialog.DefaultExt := '*.*'; OpenArchiverDialog.FilterIndex := 2; OpenArchiverDialog.Title := rsOptArchiverArchiver; if OpenArchiverDialog.Execute then begin edtArchiverArchiver.Text := OpenArchiverDialog.FileName; end; end; { TfrmOptionsArchivers.btnArchiverRelativerClick } procedure TfrmOptionsArchivers.btnArchiverRelativerClick(Sender: TObject); begin if edtArchiverArchiver.CanFocus then edtArchiverArchiver.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtArchiverArchiver, pfFILE); pmArchiverPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsArchivers.PopulateParamHelperMenu } procedure TfrmOptionsArchivers.PopulateParamHelperMenu; procedure AddThisItem(sParameter, sDescription: string); var AMenuItem: TMenuItem; begin AMenuItem := TMenuItem.Create(pmArchiverParamHelper); if sDescription <> '' then begin AMenuItem.Caption := Format('%s - %s', [sParameter, sDescription]); AMenuItem.OnClick := @miHelperClick; end else AMenuItem.Caption := sParameter; pmArchiverParamHelper.Items.Add(AMenuItem); end; begin pmArchiverParamHelper.Items.Clear; AddThisItem('%P', rsOptArchiverProgramL); AddThisItem('%p', rsOptArchiverProgramS); AddThisItem('%A', rsOptArchiverArchiveL); AddThisItem('%a', rsOptArchiverArchiveS); AddThisItem('%L', rsOptArchiverFileListL); AddThisItem('%l', rsOptArchiverFileListS); AddThisItem('%F', rsOptArchiverSingleFProcess); AddThisItem('%E', rsOptArchiverErrorLevel); AddThisItem('%O', rsOptArchiverChangeEncoding); AddThisItem('%R', rsOptArchiverTargetSubDir); AddThisItem('%S', rsOptArchiverAdditonalCmd); AddThisItem('{}', rsOptArchiverAddOnlyNotEmpty); AddThisItem('-', ''); AddThisItem('Q', rsOptArchiverQuoteWithSpace); AddThisItem('q', rsOptArchiverQuoteAll); AddThisItem('W', rsOptArchiverJustName); AddThisItem('P', rsOptArchiverJustPath); AddThisItem('A', rsOptArchiverUseAnsi); AddThisItem('U', rsOptArchiverUseUTF8); end; end. doublecmd-1.1.30/src/frames/foptionsarchivers.lrj0000644000175000001440000002321315104114162021113 0ustar alexxusers{"version":1,"strings":[ {"hash":194265226,"name":"tfrmoptionsarchivers.lblarchiverlistbox.caption","sourcebytes":[65,114,99,104,105,38,118,101,114,115,58],"value":"Archi&vers:"}, {"hash":222795460,"name":"tfrmoptionsarchivers.chkarchiverenabled.caption","sourcebytes":[69,38,110,97,98,108,101,100],"value":"E&nabled"}, {"hash":71137081,"name":"tfrmoptionsarchivers.btnarchiverapply.caption","sourcebytes":[65,38,112,112,108,121],"value":"A&pply"}, {"hash":277668,"name":"tfrmoptionsarchivers.btnarchiveradd.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":4874969,"name":"tfrmoptionsarchivers.btnarchivercopy.caption","sourcebytes":[67,111,112,38,121],"value":"Cop&y"}, {"hash":193742869,"name":"tfrmoptionsarchivers.btnarchiverrename.caption","sourcebytes":[38,82,101,110,97,109,101],"value":"&Rename"}, {"hash":78392485,"name":"tfrmoptionsarchivers.btnarchiverdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":181151662,"name":"tfrmoptionsarchivers.btnarchiverother.caption","sourcebytes":[79,116,104,38,101,114,46,46,46],"value":"Oth&er..."}, {"hash":231000124,"name":"tfrmoptionsarchivers.tbarchivergeneral.caption","sourcebytes":[71,101,110,101,114,97,108],"value":"General"}, {"hash":168263882,"name":"tfrmoptionsarchivers.lblarchiverdescription.caption","sourcebytes":[68,101,38,115,99,114,105,112,116,105,111,110,58],"value":"De&scription:"}, {"hash":217334794,"name":"tfrmoptionsarchivers.lblarchiverarchiver.caption","sourcebytes":[65,114,99,38,104,105,118,101,114,58],"value":"Arc&hiver:"}, {"hash":15252584,"name":"tfrmoptionsarchivers.btnarchiverrelativer.hint","sourcebytes":[83,111,109,101,32,102,117,110,99,116,105,111,110,115,32,116,111,32,115,101,108,101,99,116,32,97,112,112,114,111,112,114,105,97,116,101,32,112,97,116,104],"value":"Some functions to select appropriate path"}, {"hash":203307962,"name":"tfrmoptionsarchivers.lblarchiverextension.caption","sourcebytes":[69,38,120,116,101,110,115,105,111,110,58],"value":"E&xtension:"}, {"hash":45288058,"name":"tfrmoptionsarchivers.lblarchiverlist.caption","sourcebytes":[38,76,105,115,116,58],"value":"&List:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiverlisthelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":6599722,"name":"tfrmoptionsarchivers.lblarchiverliststart.caption","sourcebytes":[76,105,115,116,105,110,38,103,32,115,116,97,114,116,32,40,111,112,116,105,111,110,97,108,41,58],"value":"Listin&g start (optional):"}, {"hash":84636634,"name":"tfrmoptionsarchivers.lblarchiverlistend.caption","sourcebytes":[76,105,115,116,105,110,103,32,38,102,105,110,105,115,104,32,40,111,112,116,105,111,110,97,108,41,58],"value":"Listing &finish (optional):"}, {"hash":223256074,"name":"tfrmoptionsarchivers.lblarchiverlistformat.caption","sourcebytes":[76,105,115,116,105,110,103,32,102,111,114,38,109,97,116,58],"value":"Listing for&mat:"}, {"hash":230176474,"name":"tfrmoptionsarchivers.lblarchiverextract.caption","sourcebytes":[69,120,38,116,114,97,99,116,58],"value":"Ex&tract:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiverextracthelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":174915802,"name":"tfrmoptionsarchivers.lblarchiveradd.caption","sourcebytes":[65,100,100,38,105,110,103,58],"value":"Add&ing:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiveraddhelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":160240324,"name":"tfrmoptionsarchivers.chkfilenameonlylist.caption","sourcebytes":[85,115,101,32,97,114,99,104,105,118,101,32,110,97,109,101,32,119,105,116,104,111,117,116,32,101,120,116,101,110,115,105,111,110,32,97,115,32,108,105,115,116],"value":"Use archive name without extension as list"}, {"hash":11288268,"name":"tfrmoptionsarchivers.tbarchiveradditional.caption","sourcebytes":[65,100,100,105,116,105,111,110,97,108],"value":"Additional"}, {"hash":131255850,"name":"tfrmoptionsarchivers.lblarchiverdelete.caption","sourcebytes":[68,101,38,108,101,116,101,58],"value":"De&lete:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiverdeletehelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":95182202,"name":"tfrmoptionsarchivers.lblarchivertest.caption","sourcebytes":[84,101,115,38,116,58],"value":"Tes&t:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchivertesthelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":184602,"name":"tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption","sourcebytes":[69,120,116,114,97,99,116,32,38,119,105,116,104,111,117,116,32,112,97,116,104,58],"value":"Extract &without path:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":171034042,"name":"tfrmoptionsarchivers.lblarchiverselfextract.caption","sourcebytes":[67,114,101,97,116,101,32,115,101,108,102,32,101,120,116,114,97,99,116,105,110,38,103,32,97,114,99,104,105,118,101,58],"value":"Create self extractin&g archive:"}, {"hash":197225810,"name":"tfrmoptionsarchivers.btnarchiverselfextracthelper.hint","sourcebytes":[86,97,114,105,97,98,108,101,32,114,101,109,105,110,100,101,114,32,104,101,108,112,101,114],"value":"Variable reminder helper"}, {"hash":205166506,"name":"tfrmoptionsarchivers.lblarchiverpasswordquery.caption","sourcebytes":[80,97,115,115,119,111,114,100,32,38,113,117,101,114,121,32,115,116,114,105,110,103,58],"value":"Password &query string:"}, {"hash":215905370,"name":"tfrmoptionsarchivers.bvlarchiverids.caption","sourcebytes":[73,68,39,115,32,117,115,101,100,32,119,105,116,104,32,99,109,95,79,112,101,110,65,114,99,104,105,118,101,32,116,111,32,114,101,99,111,103,110,105,122,101,32,97,114,99,104,105,118,101,32,98,121,32,100,101,116,101,99,116,105,110,103,32,105,116,115,32,99,111,110,116,101,110,116,32,97,110,100,32,110,111,116,32,118,105,97,32,102,105,108,101,32,101,120,116,101,110,115,105,111,110,58],"value":"ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:"}, {"hash":175482,"name":"tfrmoptionsarchivers.lblarchiverids.caption","sourcebytes":[38,73,68,58],"value":"&ID:"}, {"hash":91198858,"name":"tfrmoptionsarchivers.lblarchiveridposition.caption","sourcebytes":[73,68,32,80,111,38,115,105,116,105,111,110,58],"value":"ID Po&sition:"}, {"hash":1932346,"name":"tfrmoptionsarchivers.lblarchiveridseekrange.caption","sourcebytes":[73,68,32,83,101,101,38,107,32,82,97,110,103,101,58],"value":"ID See&k Range:"}, {"hash":160056426,"name":"tfrmoptionsarchivers.bvlarchiverparsingmode.caption","sourcebytes":[70,111,114,109,97,116,32,112,97,114,115,105,110,103,32,109,111,100,101,58],"value":"Format parsing mode:"}, {"hash":95567826,"name":"tfrmoptionsarchivers.ckbarchiverunixpath.caption","sourcebytes":[38,85,110,105,120,32,112,97,116,104,32,100,101,108,105,109,105,116,101,114,32,34,47,34],"value":"&Unix path delimiter \"/\""}, {"hash":13879346,"name":"tfrmoptionsarchivers.ckbarchiverwindowspath.caption","sourcebytes":[87,105,110,100,111,119,115,32,112,97,116,104,32,100,101,108,105,38,109,105,116,101,114,32,34,92,34],"value":"Windows path deli&miter \"\\\""}, {"hash":22376883,"name":"tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption","sourcebytes":[85,110,105,38,120,32,102,105,108,101,32,97,116,116,114,105,98,117,116,101,115],"value":"Uni&x file attributes"}, {"hash":20825811,"name":"tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption","sourcebytes":[87,105,110,100,111,119,115,32,38,102,105,108,101,32,97,116,116,114,105,98,117,116,101,115],"value":"Windows &file attributes"}, {"hash":128999434,"name":"tfrmoptionsarchivers.bvlarchiveroptions.caption","sourcebytes":[79,112,116,105,111,110,115,58],"value":"Options:"}, {"hash":232547940,"name":"tfrmoptionsarchivers.chkarchivermultiarcoutput.caption","sourcebytes":[83,38,104,111,119,32,99,111,110,115,111,108,101,32,111,117,116,112,117,116],"value":"S&how console output"}, {"hash":199055669,"name":"tfrmoptionsarchivers.chkarchivermultiarcdebug.caption","sourcebytes":[68,101,38,98,117,103,32,109,111,100,101],"value":"De&bug mode"}, {"hash":142516837,"name":"tfrmoptionsarchivers.miarchiverautoconfigure.caption","sourcebytes":[65,117,116,111,32,67,111,110,102,105,103,117,114,101],"value":"Auto Configure"}, {"hash":38327763,"name":"tfrmoptionsarchivers.miarchiverdiscardmodification.caption","sourcebytes":[68,105,115,99,97,114,100,32,109,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Discard modifications"}, {"hash":260481459,"name":"tfrmoptionsarchivers.miarchiversortarchivers.caption","sourcebytes":[83,111,114,116,32,97,114,99,104,105,118,101,114,115],"value":"Sort archivers"}, {"hash":158101340,"name":"tfrmoptionsarchivers.miarchiverdisableall.caption","sourcebytes":[68,105,115,97,98,108,101,32,97,108,108],"value":"Disable all"}, {"hash":153330780,"name":"tfrmoptionsarchivers.miarchiverenableall.caption","sourcebytes":[69,110,97,98,108,101,32,97,108,108],"value":"Enable all"}, {"hash":124337662,"name":"tfrmoptionsarchivers.miarchiverexport.caption","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."}, {"hash":124338510,"name":"tfrmoptionsarchivers.miarchiverimport.caption","sourcebytes":[73,109,112,111,114,116,46,46,46],"value":"Import..."} ]} doublecmd-1.1.30/src/frames/foptionsarchivers.lfm0000644000175000001440000016634015104114162021113 0ustar alexxusersinherited frmOptionsArchivers: TfrmOptionsArchivers Height = 642 Width = 923 HelpKeyword = '/multiarc.html' ClientHeight = 642 ClientWidth = 923 ParentShowHint = False ShowHint = True DesignLeft = 159 DesignTop = 215 object pnlArchiverListbox: TPanel[0] Left = 5 Height = 642 Top = 0 Width = 120 Align = alLeft BorderSpacing.Left = 5 BevelOuter = bvNone ClientHeight = 642 ClientWidth = 120 Constraints.MinWidth = 120 TabOrder = 0 object lblArchiverListBox: TLabel AnchorSideLeft.Control = pnlArchiverListbox AnchorSideTop.Control = pnlArchiverListbox Left = 3 Height = 18 Top = 3 Width = 114 Align = alTop BorderSpacing.Around = 3 Caption = 'Archi&vers:' FocusControl = lbxArchiver ParentColor = False end object lbxArchiver: TListBox Left = 0 Height = 618 Top = 24 Width = 120 Align = alClient DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lbxArchiverDragDrop OnDragOver = lbxArchiverDragOver OnSelectionChange = lbxArchiverSelectionChange TabOrder = 0 end end object splArchiver: TSplitter[1] Left = 125 Height = 642 Top = 0 Width = 5 end object pnlArchiverCommands: TPanel[2] Left = 130 Height = 642 Top = 0 Width = 793 Align = alClient BevelOuter = bvNone ClientHeight = 642 ClientWidth = 793 TabOrder = 2 object pnlArchiverButtons: TPanel Left = 0 Height = 38 Top = 0 Width = 793 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 38 ClientWidth = 793 TabOrder = 0 object chkArchiverEnabled: TCheckBox AnchorSideLeft.Control = pnlArchiverButtons AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter Left = 10 Height = 24 Top = 7 Width = 75 BorderSpacing.Left = 10 Caption = 'E&nabled' OnChange = chkArchiverEnabledChange TabOrder = 0 end object btnArchiverApply: TBitBtn AnchorSideLeft.Control = chkArchiverEnabled AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 95 Height = 29 Top = 5 Width = 49 AutoSize = True BorderSpacing.Left = 10 Caption = 'A&pply' OnClick = btnArchiverApplyClick TabOrder = 1 end object btnArchiverAdd: TBitBtn AnchorSideLeft.Control = btnArchiverApply AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 147 Height = 29 Top = 5 Width = 39 AutoSize = True BorderSpacing.Left = 3 Caption = 'A&dd' OnClick = btnArchiverAddClick TabOrder = 2 end object btnArchiverCopy: TBitBtn AnchorSideLeft.Control = btnArchiverAdd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 189 Height = 29 Top = 5 Width = 45 AutoSize = True BorderSpacing.Left = 3 Caption = 'Cop&y' OnClick = btnArchiverCopyClick TabOrder = 3 end object btnArchiverRename: TBitBtn AnchorSideLeft.Control = btnArchiverCopy AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 237 Height = 29 Top = 5 Width = 65 AutoSize = True BorderSpacing.Left = 3 Caption = '&Rename' OnClick = btnArchiverRenameClick TabOrder = 4 end object btnArchiverDelete: TBitBtn AnchorSideLeft.Control = btnArchiverRename AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 305 Height = 29 Top = 5 Width = 54 AutoSize = True BorderSpacing.Left = 3 Caption = 'Delete' OnClick = btnArchiverDeleteClick TabOrder = 5 end object btnArchiverOther: TBitBtn AnchorSideLeft.Control = btnArchiverDelete AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlArchiverButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 362 Height = 29 Top = 5 Width = 60 AutoSize = True BorderSpacing.Left = 3 Caption = 'Oth&er...' OnClick = btnArchiverOtherClick TabOrder = 6 end end object pcArchiverCommands: TPageControl Left = 0 Height = 604 Top = 38 Width = 793 ActivePage = tbArchiverGeneral Align = alClient TabIndex = 0 TabOrder = 1 object tbArchiverGeneral: TTabSheet Caption = 'General' ClientHeight = 569 ClientWidth = 789 object lblArchiverDescription: TLabel AnchorSideLeft.Control = tbArchiverGeneral AnchorSideTop.Control = tbArchiverGeneral AnchorSideRight.Control = tbArchiverGeneral AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 10 Width = 769 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 Caption = 'De&scription:' FocusControl = edtArchiverDescription ParentColor = False end object edtArchiverDescription: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 26 Top = 28 Width = 769 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 0 end object lblArchiverArchiver: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 56 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Arc&hiver:' FocusControl = edtArchiverArchiver ParentColor = False end object edtArchiverArchiver: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverArchiver AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverSelectFileArchiver Left = 10 Height = 26 Top = 74 Width = 713 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 2 OnChange = edtAnyChange TabOrder = 1 end object btnArchiverSelectFileArchiver: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverArchiver AnchorSideRight.Control = btnArchiverRelativer AnchorSideBottom.Control = edtArchiverArchiver AnchorSideBottom.Side = asrBottom Left = 725 Height = 26 Top = 74 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 8A040000424D8A040000000000008A0000007C00000010000000100000000100 20000300000000040000232E0000232E000000000000000000000000FF0000FF 0000FF000000000000FF42475273000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000200 000000000000000000000000000000FFFFFFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFF1F1F1FFEFEFEFFFEEEEEEFFEDED EDFFEBEBEBFFEAEAEAFFE9E9E9FFE7E7E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFC87137FFC87137FFF3F3F3FFF1F1F1FFF0F0F0FFCD89 59FFCD8959FFCD8959FFCD8959FFCD8959FFCD8959FFCD8959FFCD8959FFE6E6 E6FFE6E6E6FFE6E6E6FFC87137FFC87137FFF4F4F4FFF3F3F3FFF2F2F2FFCD89 59FFFFF6D5FFFFF6D5FFFFF6D5FFFFF6D5FFFFF6D5FFFFF6D5FFCD8959FFE6E6 E6FFE6E6E6FFE6E6E6FFC87137FFC87137FFF6F6F6FFF5F5F5FFF3F3F3FFCD89 59FFFFF7DBFF918A6FFF918A6FFF918A6FFF918A6FFFFFF6D5FFCD8959FFE7E7 E7FFE6E6E6FFE6E6E6FFC87137FFC87137FFF8F8F8FFF6F6F6FFF5F5F5FFCD89 59FFFFF9E1FFFFF8DFFFFFF8DEFFFFF8DDFFFFF7DCFFFFF7DBFFCD8959FFE9E9 E9FFE8E8E8FFE7E7E7FFC87137FFC87137FFFAFAFAFFF8F8F8FFF7F7F7FFCD89 59FFFFFAE6FF918A6FFF918A6FFF918A6FFF918A6FFFFFF8E0FFCD8959FFEBEB EBFFEAEAEAFFE8E8E8FFC87137FFC87137FFFBFBFBFFFAFAFAFFF9F9F9FFCD89 59FFFFFBECFFFFFBEBFFFFFAEAFFFFFAE8FFFFFAE7FFFFFAE6FFCD8959FFEDED EDFFEBEBEBFFEAEAEAFFC87137FFC87137FFFDFDFDFFFCFCFCFFFAFAFAFFCD89 59FFFFFCF2FF918A6FFF918A6FFF918A6FFFFFFBEDFFFFFBECFFCD8959FFEEEE EEFFEDEDEDFFECECECFFC87137FFC87137FFFFFFFFFFFDFDFDFFFCFCFCFFCD89 59FFFFFDF8FFFFFDF6FFFFFDF5FFFFFDF4FFFFFCF3FFF2DFCBFFCF8E5FFFF0F0 F0FFEFEFEFFFEEEEEEFFC87137FFC87137FFFFFFFFFFFFFFFFFFFEFEFEFFCD89 59FFFFFFFDFFFFFEFCFFFFFEFBFFFFFEFAFFF3E2D3FFD19266FFE9D7CBFFF2F2 F2FFF4F4F4FFEFEFEFFFC87137FFC87137FFFFFFFFFFFFFFFFFFFFFFFFFFCD89 59FFCD8959FFCD8959FFCD8959FFCD8959FFCF8E60FFEBDACEFFF5F5F5FFF4F4 F4FFF2F2F2FFF1F1F1FFC87137FFC87137FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDFFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF4F4F4FFF5F5 F5FFF4F4F4FFF3F3F3FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FF0000FFFFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC87137FFC871 37FFC87137FFC87137FFC87137FF } OnClick = btnArchiverSelectFileArchiverClick end object btnArchiverRelativer: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverArchiver AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverArchiver AnchorSideBottom.Side = asrBottom Left = 752 Height = 26 Hint = 'Some functions to select appropriate path' Top = 74 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnArchiverRelativerClick end object lblArchiverExtension: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverArchiver AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 102 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'E&xtension:' FocusControl = edtArchiverExtension ParentColor = False end object edtArchiverExtension: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverExtension AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 26 Top = 120 Width = 769 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 2 end object lblArchiverList: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = pnlFileNameOnlyList AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 151 Width = 25 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = '&List:' FocusControl = edtArchiverList ParentColor = False end object edtArchiverList: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = pnlFileNameOnlyList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverListHelper Left = 10 Height = 26 Top = 172 Width = 739 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 4 end object btnArchiverListHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverList AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverList AnchorSideBottom.Side = asrBottom Left = 752 Height = 26 Hint = 'Variable reminder helper' Top = 172 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverListStart: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 200 Width = 769 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Listin&g start (optional):' FocusControl = edtArchiverListStart ParentColor = False end object edtArchiverListStart: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverListStart AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 26 Top = 218 Width = 769 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 5 end object lblArchiverListEnd: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverListStart AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 244 Width = 769 Anchors = [akTop, akLeft, akRight] Caption = 'Listing &finish (optional):' FocusControl = edtArchiverListEnd ParentColor = False end object edtArchiverListEnd: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverListEnd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 26 Top = 262 Width = 769 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 6 end object lblArchiverListFormat: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverListEnd AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 290 Width = 763 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Listing for&mat:' FocusControl = memArchiverListFormat ParentColor = False end object memArchiverListFormat: TMemo AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverListFormat AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 10 Height = 100 Top = 308 Width = 769 Anchors = [akTop, akLeft, akRight] Constraints.MaxHeight = 100 Lines.Strings = ( '' ) OnChange = edtAnyChange ScrollBars = ssAutoBoth TabOrder = 7 WordWrap = False end object lblArchiverExtract: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = memArchiverListFormat AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 410 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Ex&tract:' FocusControl = edtArchiverExtract ParentColor = False end object edtArchiverExtract: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverExtractHelper AnchorSideBottom.Control = tbArchiverGeneral AnchorSideBottom.Side = asrBottom Left = 10 Height = 26 Top = 428 Width = 739 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 8 end object btnArchiverExtractHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverExtract AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverExtract AnchorSideBottom.Side = asrBottom Left = 752 Height = 26 Hint = 'Variable reminder helper' Top = 428 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverAdd: TLabel AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = edtArchiverExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 456 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Add&ing:' FocusControl = edtArchiverAdd ParentColor = False end object edtArchiverAdd: TEdit AnchorSideLeft.Control = lblArchiverDescription AnchorSideTop.Control = lblArchiverAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverAddHelper AnchorSideBottom.Side = asrBottom Left = 10 Height = 26 Top = 474 Width = 739 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 BorderSpacing.Bottom = 6 OnChange = edtAnyChange TabOrder = 9 end object btnArchiverAddHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverAdd AnchorSideRight.Control = lblArchiverDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverAdd AnchorSideBottom.Side = asrBottom Left = 752 Height = 26 Hint = 'Variable reminder helper' Top = 474 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object pnlFileNameOnlyList: TPanel AnchorSideLeft.Control = lblArchiverList AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverExtension AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtArchiverList AnchorSideRight.Side = asrBottom Left = 45 Height = 24 Top = 148 Width = 704 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 2 BevelOuter = bvNone ClientHeight = 24 ClientWidth = 704 TabOrder = 3 object chkFileNameOnlyList: TCheckBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 419 Height = 24 Top = 0 Width = 285 Anchors = [akTop, akRight] Caption = 'Use archive name without extension as list' OnChange = chkFileNameOnlyListChange ParentBidiMode = False TabOrder = 0 end end end object tbArchiverAdditional: TTabSheet Caption = 'Additional' ClientHeight = 580 ClientWidth = 785 object lblArchiverDelete: TLabel AnchorSideLeft.Control = tbArchiverAdditional AnchorSideTop.Control = tbArchiverAdditional AnchorSideRight.Control = tbArchiverAdditional AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 10 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 Caption = 'De&lete:' FocusControl = edtArchiverDelete ParentColor = False end object edtArchiverDelete: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverDeleteHelper Left = 10 Height = 23 Top = 25 Width = 735 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 0 end object btnArchiverDeleteHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverDelete AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverDelete AnchorSideBottom.Side = asrBottom Left = 748 Height = 23 Hint = 'Variable reminder helper' Top = 25 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverTest: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 50 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Tes&t:' FocusControl = edtArchiverTest ParentColor = False end object edtArchiverTest: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverTest AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverTestHelper Left = 10 Height = 23 Top = 65 Width = 735 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 1 end object btnArchiverTestHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverTest AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverTest AnchorSideBottom.Side = asrBottom Left = 748 Height = 23 Hint = 'Variable reminder helper' Top = 65 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverExtractWithoutPath: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverTest AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 90 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Extract &without path:' FocusControl = edtArchiverExtractWithoutPath ParentColor = False end object edtArchiverExtractWithoutPath: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverExtractWithoutPath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverExtractWithoutPathHelper Left = 10 Height = 23 Top = 105 Width = 735 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 2 end object btnArchiverExtractWithoutPathHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverExtractWithoutPath AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverExtractWithoutPath AnchorSideBottom.Side = asrBottom Left = 748 Height = 23 Hint = 'Variable reminder helper' Top = 105 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverSelfExtract: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverExtractWithoutPath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 130 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Create self extractin&g archive:' FocusControl = edtArchiverSelfExtract ParentColor = False end object edtArchiverSelfExtract: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverSelfExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnArchiverSelfExtractHelper Left = 10 Height = 23 Top = 145 Width = 735 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 3 OnChange = edtAnyChange TabOrder = 3 end object btnArchiverSelfExtractHelper: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtArchiverSelfExtract AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtArchiverSelfExtract AnchorSideBottom.Side = asrBottom Left = 748 Height = 23 Hint = 'Variable reminder helper' Top = 145 Width = 27 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnHelperClick end object lblArchiverPasswordQuery: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverSelfExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 170 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Password &query string:' FocusControl = edtArchiverPasswordQuery ParentColor = False end object edtArchiverPasswordQuery: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverPasswordQuery AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 185 Width = 765 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 4 end object bvlArchiverIds: TDividerBevel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverPasswordQuery AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 223 Width = 765 Caption = 'ID''s used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 15 ParentFont = False end object lblArchiverIds: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = bvlArchiverIds AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 238 Width = 765 Anchors = [akTop, akLeft, akRight] Caption = '&ID:' FocusControl = edtArchiverId ParentColor = False end object edtArchiverId: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverIds AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 253 Width = 765 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 5 end object lblArchiverIdPosition: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverId AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 278 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'ID Po&sition:' FocusControl = edtArchiverIdPosition ParentColor = False end object edtArchiverIdPosition: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverIdPosition AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 293 Width = 765 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 6 end object lblArchiverIdSeekRange: TLabel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverIdPosition AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 318 Width = 765 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'ID See&k Range:' FocusControl = edtArchiverIdSeekRange ParentColor = False end object edtArchiverIdSeekRange: TEdit AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = lblArchiverIdSeekRange AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 333 Width = 765 Anchors = [akTop, akLeft, akRight] OnChange = edtAnyChange TabOrder = 7 end object bvlArchiverParsingMode: TDividerBevel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = edtArchiverIdSeekRange AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 371 Width = 765 Caption = 'Format parsing mode:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 15 ParentFont = False end object ckbArchiverUnixPath: TCheckBox AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = bvlArchiverParsingMode AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 391 Width = 138 BorderSpacing.Top = 5 Caption = '&Unix path delimiter "/"' OnChange = ckbArchiverUnixPathChange TabOrder = 8 end object ckbArchiverWindowsPath: TCheckBox AnchorSideLeft.Control = ckbArchiverUnixPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ckbArchiverUnixPath Left = 158 Height = 19 Top = 391 Width = 164 BorderSpacing.Left = 10 Caption = 'Windows path deli&miter "\"' OnChange = ckbArchiverWindowsPathChange TabOrder = 9 end object ckbArchiverUnixFileAttributes: TCheckBox AnchorSideLeft.Control = ckbArchiverWindowsPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ckbArchiverUnixPath Left = 332 Height = 19 Top = 391 Width = 115 BorderSpacing.Left = 10 Caption = 'Uni&x file attributes' OnChange = ckbArchiverUnixFileAttributesChange TabOrder = 10 end object ckbArchiverWindowsFileAttributes: TCheckBox AnchorSideLeft.Control = ckbArchiverUnixFileAttributes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ckbArchiverUnixPath Left = 457 Height = 19 Top = 391 Width = 141 BorderSpacing.Left = 10 Caption = 'Windows &file attributes' OnChange = ckbArchiverWindowsFileAttributesChange ParentBidiMode = False TabOrder = 11 end object bvlArchiverOptions: TDividerBevel AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = ckbArchiverUnixPath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblArchiverDelete AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 425 Width = 765 Caption = 'Options:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 15 ParentFont = False end object chkArchiverMultiArcOutput: TCheckBox AnchorSideLeft.Control = lblArchiverDelete AnchorSideTop.Control = bvlArchiverOptions AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 445 Width = 132 BorderSpacing.Top = 5 Caption = 'S&how console output' OnChange = edtAnyChange TabOrder = 12 end object chkArchiverMultiArcDebug: TCheckBox AnchorSideLeft.Control = chkArchiverMultiArcOutput AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkArchiverMultiArcOutput AnchorSideRight.Side = asrBottom Left = 152 Height = 19 Top = 445 Width = 89 BorderSpacing.Left = 10 Caption = 'De&bug mode' OnChange = edtAnyChange TabOrder = 13 end end end end object pmArchiverOther: TPopupMenu[3] left = 192 top = 552 object miArchiverAutoConfigure: TMenuItem Caption = 'Auto Configure' OnClick = miArchiverAutoConfigureClick end object miArchiverDiscardModification: TMenuItem Caption = 'Discard modifications' OnClick = miArchiverDiscardModificationClick end object miSeparator1: TMenuItem Caption = '-' end object miArchiverSortArchivers: TMenuItem Caption = 'Sort archivers' OnClick = miArchiverSortArchiversClick end object miArchiverDisableAll: TMenuItem Caption = 'Disable all' OnClick = miAdjustEnableAllClick end object miArchiverEnableAll: TMenuItem Tag = 1 Caption = 'Enable all' OnClick = miAdjustEnableAllClick end object miSeparator2: TMenuItem Caption = '-' end object miArchiverExport: TMenuItem Caption = 'Export...' OnClick = miArchiverExportClick end object miArchiverImport: TMenuItem Caption = 'Import...' OnClick = miArchiverImportClick end end object pmArchiverPathHelper: TPopupMenu[4] left = 320 top = 552 end object pmArchiverParamHelper: TPopupMenu[5] left = 456 top = 552 end object SaveArchiverDialog: TSaveDialog[6] DefaultExt = '.ini' Filter = 'Archiver configuration|*.ini' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 600 top = 552 end object OpenArchiverDialog: TOpenDialog[7] DefaultExt = '.*.ini' Filter = 'Archiver config files|*.ini;*.addon|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 728 top = 552 end end doublecmd-1.1.30/src/fpsnumformat.pas0000644000175000001440000042167015104114162016614 0ustar alexxusers{@@ ---------------------------------------------------------------------------- Unit @bold(fpsNumFormat) contains classes and procedures to analyze and process @bold(number formats). AUTHORS: Werner Pamler LICENSE: See the file COPYING.modifiedLGPL.txt, included in the Lazarus distribution, for details about the license. -------------------------------------------------------------------------------} unit fpsNumFormat; {$ifdef fpc} {$mode objfpc}{$H+} {$endif} interface uses Classes, SysUtils, fpscommon; const psOK = 0; psErrNoValidColorIndex = 1; psErrNoValidCompareNumber = 2; psErrUnknownInfoInBrackets = 3; psErrConditionalFormattingNotSupported = 4; psErrNoUsableFormat = 5; psErrNoValidNumberFormat = 6; psErrNoValidDateTimeFormat = 7; psErrQuoteExpected = 8; psErrMultipleCurrSymbols = 9; psErrMultipleFracSymbols = 10; psErrMultipleExpChars = 11; psErrGeneralExpected = 12; psAmbiguousSymbol = 13; psErrNoValidTextFormat = 14; type {@@ Set of characters } TsDecsChars = set of char; {@@ Tokens used by the elements of the number format parser. If, e.g. a format string is "0.000" then the number format parser detects the following three tokens - nftIntZeroDigit with integer value 1 (i.e. 1 zero-digit for the integer part) - nftDecSep (i.e. decimal separator) - ntZeroDecs with integer value 2 (i.e. 3 decimal places. } TsNumFormatToken = ( nftGeneral, // token for "general" number format nftText, // must be quoted, stored in TextValue nftThSep, // ',', replaced by FormatSettings.ThousandSeparator nftDecSep, // '.', replaced by FormatSettings.DecimalSeparator nftYear, // 'y' or 'Y', count stored in IntValue nftMonth, // 'm' or 'M', count stored in IntValue nftDay, // 'd' or 'D', count stored in IntValue nftHour, // 'h' or 'H', count stored in IntValue nftMinute, // 'n' or 'N' (or 'm'/'M'), count stored in IntValue nftSecond, // 's' or 'S', count stored in IntValue nftMilliseconds, // 'z', 'Z', '0', count stored in IntValue nftAMPM, // nftMonthMinute, // 'm'/'M' or 'n'/'N', meaning depending on context nftDateTimeSep, // '/' or ':', replaced by value from FormatSettings, stored in TextValue nftSign, // '+' or '-', stored in TextValue nftSignBracket, // '(' or ')' for negative values, stored in TextValue nftIntOptDigit, // '#', count stored in IntValue nftIntZeroDigit, // '0', count stored in IntValue nftIntSpaceDigit, // '?', count stored in IntValue nftIntTh, // '#,##0' sequence for nfFixed, count of 0 stored in IntValue nftZeroDecs, // '0' after dec sep, count stored in IntValue nftOptDecs, // '#' after dec sep, count stored in IntValue nftSpaceDecs, // '?' after dec sep, count stored in IntValue nftExpChar, // 'e' or 'E', stored in TextValue nftExpSign, // '+' or '-' in exponent nftExpDigits, // '0' digits in exponent, count stored in IntValue nftPercent, // '%' percent symbol nftFactor, // thousand separators at end of format string, each one divides value by 1000 nftFracSymbol, // '/' fraction symbol nftFracNumOptDigit, // '#' in numerator, count stored in IntValue nftFracNumSpaceDigit, // '?' in numerator, count stored in IntValue nftFracNumZeroDigit, // '0' in numerator, count stored in IntValue nftFracDenomOptDigit, // '#' in denominator, count stored in IntValue nftFracDenomSpaceDigit,// '?' in denominator, count stored in IntValue nftFracDenomZeroDigit, // '0' in denominator, count stored in IntValue nftFracDenom, // specified denominator, value stored in IntValue nftCurrSymbol, // e.g., '"€"' or '[$€]', stored in TextValue nftCountry, nftColor, // e.g., '[red]', Color in IntValue nftCompareOp, nftCompareValue, nftSpace, nftEscaped, // '\' nftRepeat, nftEmptyCharWidth, nftTextFormat // '@' ); {@@ Element of the parsed number format sequence. Each element is identified by a token and has optional parameters stored as integer, float, and/or text. @member Token Identifies the number format element @member IntValue Integer value associated with the number format element @member FloatValue Floating point value associated with the number format element @member TextValue String value associated with the number format element } TsNumFormatElement = record Token: TsNumFormatToken; IntValue: Integer; FloatValue: Double; TextValue: String; end; {@@ Array of parsed number format elements } TsNumFormatElements = array of TsNumFormatElement; {@@ Summary information classifying a number format section } TsNumFormatKind = (nfkPercent, nfkExp, nfkCurrency, nfkFraction, nfkDate, nfkTime, nfkTimeInterval, nfkText, nfkHasColor, nfkHasThSep, nfkHasFactor); {@@ Set of summary elements classifying and describing a number format section } TsNumFormatKinds = set of TsNumFormatKind; {@@ Number format string can be composed of several parts separated by a semicolon. The number format parser extracts the format information into individual sections for each part } TsNumFormatSection = record {@@ Parser number format elements used by this section } Elements: TsNumFormatElements; {@@ Summary information describing the section } Kind: TsNumFormatKinds; {@@ Reconstructed number format identifier for the built-in fps formats } NumFormat: TsNumberFormat; {@@ Number of decimal places used by the format string } Decimals: Byte; {@@ Minimum number of digits before the decimal separator } MinIntDigits: Byte; {@@ Factor by which a number will be multiplied before converting to string } Factor: Double; {@@ Digits to be used for the integer part of a fraction } FracInt: Integer; {@@ Digits to be used for the numerator part of a fraction } FracNumerator: Integer; {@@ Digits to be used for the denominator part of a fraction } FracDenominator: Integer; {@@ Currency string to be used in case of currency/accounting formats } CurrencySymbol: String; {@@ Color to be used when displaying the converted string } Color: TsColor; end; {@@ Pointer to a parsed number format section } PsNumFormatSection = ^TsNumFormatSection; {@@ Array of parsed number format sections } TsNumFormatSections = array of TsNumFormatSection; { TsNumFormatParams } {@@ Describes a parsed number format and provides all the information to convert a number value to a number or date/time string. These data are created by the number format parser from a format string. } TsNumFormatParams = class(TObject) private FAllowLocalizedAMPM: Boolean; protected function GetNumFormat: TsNumberFormat; virtual; function GetNumFormatStr: String; virtual; public {@@ Array of the format sections } Sections: TsNumFormatSections; constructor Create; procedure DeleteElement(ASectionIndex, AElementIndex: Integer); procedure InsertElement(ASectionIndex, AElementIndex: Integer; AToken: TsNumFormatToken); function SectionsEqualTo(ASections: TsNumFormatSections): Boolean; procedure SetCurrSymbol(AValue: String); procedure SetDecimals(AValue: Byte); procedure SetNegativeRed(AEnable: Boolean); procedure SetThousandSep(AEnable: Boolean); property AllowLocalizedAMPM: boolean read FAllowLocalizedAMPM write FAllowLocalizedAMPM; property NumFormat: TsNumberFormat read GetNumFormat; property NumFormatStr: String read GetNumFormatStr; end; { TsNumFormatList } {@@ Class of number format parameters } TsNumFormatParamsClass = class of TsNumFormatParams; {@@ List containing parsed number format parameters } TsNumFormatList = class(TFPList) { private } FOwnsData: Boolean; function GetItem(AIndex: Integer): TsNumFormatParams; procedure SetItem(AIndex: Integer; const AValue: TsNumFormatParams); protected FFormatSettings: TFormatSettings; FClass: TsNumFormatParamsClass; procedure AddBuiltinFormats; virtual; public constructor Create(AFormatSettings: TFormatSettings; AOwnsData: Boolean); destructor Destroy; override; function AddFormat(ASections: TsNumFormatSections): Integer; overload; function AddFormat(AFormatStr: String): Integer; overload; procedure Clear; procedure Delete(AIndex: Integer); function Find(ASections: TsNumFormatSections): Integer; overload; function Find(AFormatstr: String): Integer; overload; property Items[AIndex: Integer]: TsNumFormatParams read GetItem write SetItem; default; end; { TsNumFormatParser } TsNumFormatParser = class private FToken: Char; FCurrent: PChar; FStart: PChar; FEnd: PChar; FCurrSection: Integer; FStatus: Integer; function GetCurrencySymbol: String; function GetDecimals: byte; function GetFracDenominator: Integer; function GetFracInt: Integer; function GetFracNumerator: Integer; function GetFormatString: String; function GetNumFormat: TsNumberFormat; function GetParsedSectionCount: Integer; function GetParsedSections(AIndex: Integer): TsNumFormatSection; procedure SetDecimals(AValue: Byte); protected FFormatSettings: TFormatSettings; FSections: TsNumFormatSections; { Administration while scanning } procedure AddElement(AToken: TsNumFormatToken; AText: String); overload; procedure AddElement(AToken: TsNumFormatToken; AIntValue: Integer=0; AText: String = ''); overload; procedure AddElement(AToken: TsNumFormatToken; AFloatValue: Double); overload; procedure AddSection; procedure DeleteElement(ASection, AIndex: Integer); procedure InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AText: String); overload; procedure InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AIntValue: Integer); overload; procedure InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AFloatValue: Double); overload; function NextToken: Char; function PrevToken: Char; { Scanning/parsing } procedure ScanAMPM; procedure ScanAndCount(ATestChar: Char; out ACount: Integer); procedure ScanBrackets; procedure ScanCondition(AFirstChar: Char); procedure ScanCurrSymbol; procedure ScanDateTime; procedure ScanFormat; procedure ScanGeneral; procedure ScanNumber; procedure ScanQuotedText; // Main scanner procedure Parse(const AFormatString: String); { Analysis while scanning } procedure AnalyzeColor(AValue: String); function AnalyzeCurrency(const AValue: String): Boolean; { Analysis after scanning } // General procedure CheckSections; procedure CheckSection(ASection: Integer); procedure FixMonthMinuteToken(var ASection: TsNumFormatSection); // Format string function BuildFormatString: String; virtual; public constructor Create(const AFormatString: String; const AFormatSettings: TFormatSettings); destructor Destroy; override; procedure ClearAll; function GetDateTimeCode(ASection: Integer): String; function IsDateTimeFormat: Boolean; function IsTimeFormat: Boolean; procedure LimitDecimals; property CurrencySymbol: String read GetCurrencySymbol; property Decimals: Byte read GetDecimals write SetDecimals; property FormatString: String read GetFormatString; property FracDenominator: Integer read GetFracDenominator; property FracInt: Integer read GetFracInt; property FracNumerator: Integer read GetFracNumerator; property NumFormat: TsNumberFormat read GetNumFormat; property ParsedSectionCount: Integer read GetParsedSectionCount; property ParsedSections[AIndex: Integer]: TsNumFormatSection read GetParsedSections; property Status: Integer read FStatus; end; { Utility functions } function AddAMPM(const ATimeFormatString: String; const AFormatSettings: TFormatSettings): String; function AddIntervalBrackets(AFormatString: String): String; procedure BuildCurrencyFormatList(AList: TStrings; APositive: Boolean; AValue: Double; const ACurrencySymbol: String); function BuildCurrencyFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; ADecimals, APosCurrFmt, ANegCurrFmt: Integer; ACurrencySymbol: String; Accounting: Boolean = false): String; function BuildDateTimeFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; AFormatString: String = ''): String; function BuildFractionFormatString(AMixedFraction: Boolean; ANumeratorDigits, ADenominatorDigits: Integer): String; function BuildNumberFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; ADecimals: Integer = -1; AMinIntDigits: Integer = 1): String; function BuildFormatStringFromSection(const ASection: TsNumFormatSection; AllowLocalizedAMPM: Boolean = true): String; function ApplyTextFormat(AText: String; AParams: TsNumFormatParams): String; function ConvertFloatToStr(AValue: Double; AParams: TsNumFormatParams; AFormatSettings: TFormatSettings): String; function CountDecs(AFormatString: String; ADecChars: TsDecsChars = ['0']): Byte; function GeneralFormatFloat(AValue: Double; AFormatSettings: TFormatSettings): String; inline; function IsBoolValue(const AText, ATrueText, AFalseText: String; out AValue: Boolean): Boolean; function IsCurrencyFormat(AFormat: TsNumberFormat): Boolean; overload; function IsCurrencyFormat(ANumFormat: TsNumFormatParams): Boolean; overload; function IsDateTimeFormat(AFormat: TsNumberFormat): Boolean; overload; function IsDateTimeFormat(AFormatStr: String): Boolean; overload; function IsDateTimeFormat(ANumFormat: TsNumFormatParams): Boolean; overload; function IsDateTimeValue(AText: String; const AFormatSettings: TFormatSettings; out ADateTime: TDateTime; out ANumFormat: TsNumberFormat): Boolean; function IsDateFormat(ANumFormat: TsNumFormatParams): Boolean; function IsTimeFormat(AFormat: TsNumberFormat): Boolean; overload; function IsTimeFormat(AFormatStr: String): Boolean; overload; function IsTimeFormat(ANumFormat: TsNumFormatParams): Boolean; overload; function IsLongTimeFormat(AFormatStr: String; ATimeSeparator: char): Boolean; overload; function IsNumberValue(AText: String; AutoDetectNumberFormat: Boolean; const AFormatSettings: TFormatSettings; out ANumber: Double; out ANumFormat: TsNumberFormat; out ADecimals: Integer; out ACurrencySymbol, AWarning: String): Boolean; function IsTimeIntervalFormat(ANumFormat: TsNumFormatParams): Boolean; function IsTextFormat(ANumFormat: TsNumFormatParams): Boolean; function MakeLongDateFormat(ADateFormat: String): String; function MakeShortDateFormat(ADateFormat: String): String; procedure MakeTimeIntervalMask(Src: String; var Dest: String); function StripAMPM(const ATimeFormatString: String): String; procedure InitFormatSettings(out AFormatSettings: TFormatSettings); procedure ReplaceFormatSettings(var AFormatSettings: TFormatSettings; const ADefaultFormats: TFormatSettings); function CreateNumFormatParams(ANumFormatStr: String; const AFormatSettings: TFormatSettings): TsNumFormatParams; function ParamsOfNumFormatStr(ANumFormatStr: String; const AFormatSettings: TFormatSettings; var AResult: TsNumFormatParams): Integer; implementation uses StrUtils, Math, LazUTF8; const { Array of format strings identifying the order of number and currency symbol of a positive currency value. The number is expected at index 0, the currency symbol at index 1 of the parameter array used by the fpc Format() function. } POS_CURR_FMT: array[0..3] of string = ( ('%1:s%0:s'), // 0: $1 ('%0:s%1:s'), // 1: 1$ ('%1:s %0:s'), // 2: $ 1 ('%0:s %1:s') // 3: 1 $ ); { Array of format strings identifying the order of number and currency symbol of a negative currency value. The sign is shown as a dash character ("-") or by means of brackets. The number is expected at index 0, the currency symbol at index 1 of the parameter array for the fpc Format() function. } NEG_CURR_FMT: array[0..15] of string = ( ('(%1:s%0:s)'), // 0: ($1) ('-%1:s%0:s'), // 1: -$1 ('%1:s-%0:s'), // 2: $-1 ('%1:s%0:s-'), // 3: $1- ('(%0:s%1:s)'), // 4: (1$) ('-%0:s%1:s'), // 5: -1$ ('%0:s-%1:s'), // 6: 1-$ ('%0:s%1:s-'), // 7: 1$- ('-%0:s %1:s'), // 8: -1 $ ('-%1:s %0:s'), // 9: -$ 1 ('%0:s %1:s-'), // 10: 1 $- ('%1:s %0:s-'), // 11: $ 1- ('%1:s -%0:s'), // 12: $ -1 ('%0:s- %1:s'), // 13: 1- $ ('(%1:s %0:s)'), // 14: ($ 1) ('(%0:s %1:s)') // 15: (1 $) ); {==============================================================================} { Float-to-string conversion } {==============================================================================} type { Set of parsed number format tokens } TsNumFormatTokenSet = set of TsNumFormatToken; const { Set of tokens which terminate number information in a format string } TERMINATING_TOKENS: TsNumFormatTokenSet = [nftSpace, nftText, nftEscaped, nftPercent, nftCurrSymbol, nftSign, nftSignBracket]; { Set of tokens which describe the integer part of a number format } INT_TOKENS: TsNumFormatTokenSet = [nftIntOptDigit, nftIntZeroDigit, nftIntSpaceDigit]; { Set of tokens which describe the decimals of a number format } DECS_TOKENS: TsNumFormatTokenSet = [nftZeroDecs, nftOptDecs, nftSpaceDecs]; { Set of tokens which describe the numerator of a fraction format } FRACNUM_TOKENS: TsNumFormatTokenSet = [nftFracNumOptDigit, nftFracNumZeroDigit, nftFracNumSpaceDigit]; { Set of tokens which describe the denominator of a fraction format } FRACDENOM_TOKENS: TsNumFormatTokenSet = [nftFracDenomOptDigit, nftFracDenomZeroDigit, nftFracDenomSpaceDigit, nftFracDenom]; { Set of tokens which describe the exponent in exponential formatting of a number } EXP_TOKENS: TsNumFormatTokenSet = [nftExpDigits]; // todo: expand by optional digits (0.00E+#) { Helper function which checks whether a sequence of format tokens for exponential formatting begins at the specified index in the format elements } function CheckExp(const AElements: TsNumFormatElements; AIndex: Integer): Boolean; var numEl: Integer; i: Integer; begin numEl := Length(AElements); Result := (AIndex < numEl) and (AElements[AIndex].Token in INT_TOKENS); if not Result then exit; numEl := Length(AElements); i := AIndex + 1; while (i < numEl) and (AElements[i].Token in INT_TOKENS) do inc(i); // no decimal places if (i+2 < numEl) and (AElements[i].Token = nftExpChar) and (AElements[i+1].Token = nftExpSign) and (AElements[i+2].Token in EXP_TOKENS) then begin Result := true; exit; end; // with decimal places if (i < numEl) and (AElements[i].Token = nftDecSep) //and (AElements[i+1].Token in DECS_TOKENS) then begin inc(i); while (i < numEl) and (AElements[i].Token in DECS_TOKENS) do inc(i); if (i + 2 < numEl) and (AElements[i].Token = nftExpChar) and (AElements[i+1].Token = nftExpSign) and (AElements[i+2].Token in EXP_TOKENS) then begin Result := true; exit; end; end; Result := false; end; { Helper function which checks whether a sequence of format tokens for fraction formatting begins at the specified index in the format elements } function CheckFraction(const AElements: TsNumFormatElements; AIndex: Integer; out digits: Integer): Boolean; var numEl: Integer; i: Integer; begin digits := 0; numEl := Length(AElements); Result := (AIndex < numEl); if not Result then exit; i := AIndex; // Check for mixed fraction (integer split off, sample format "# ??/??" if (AElements[i].Token in (INT_TOKENS + [nftIntTh])) then begin inc(i); while (i < numEl) and (AElements[i].Token in (INT_TOKENS + [nftIntTh])) do inc(i); while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do inc(i); end; if (i = numEl) or not (AElements[i].Token in FRACNUM_TOKENS) then exit(false); // Here follows the ordinary fraction (no integer split off); sample format "??/??" while (i < numEl) and (AElements[i].Token in FRACNUM_TOKENS) do inc(i); while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do inc(i); if (i = numEl) or (AElements[i].Token <> nftFracSymbol) then exit(False); inc(i); while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do inc(i); if (i = numEl) or (not (AElements[i].Token in FRACDENOM_TOKENS)) then exit(false); while (i < numEL) and (AElements[i].Token in FRACDENOM_TOKENS) do begin case AElements[i].Token of nftFracDenomZeroDigit : inc(digits, AElements[i].IntValue); nftFracDenomSpaceDigit: inc(digits, AElements[i].IntValue); nftFracDenomOptDigit : inc(digits, AElements[i].IntValue); nftFracDenom : digits := -AElements[i].IntValue; // "-" indicates a literal denominator value! end; inc(i); end; Result := true; end; { Processes a sequence of #, 0, and ? tokens. Adds leading (GrowRight=false) or trailing (GrowRight=true) zeros and/or spaces as specified by the format elements to the number value string. On exit AIndex points to the first non-integer token. } function ProcessIntegerFormat(AValue: String; AFormatSettings: TFormatSettings; const AElements: TsNumFormatElements; var AIndex: Integer; ATokens: TsNumFormatTokenSet; GrowRight, UseThSep: Boolean): String; const OptTokens = [nftIntOptDigit, nftFracNumOptDigit, nftFracDenomOptDigit, nftOptDecs]; ZeroTokens = [nftIntZeroDigit, nftFracNumZeroDigit, nftFracDenomZeroDigit, nftZeroDecs, nftIntTh]; SpaceTokens = [nftIntSpaceDigit, nftFracNumSpaceDigit, nftFracDenomSpaceDigit, nftSpaceDecs]; AllOptTokens = OptTokens + SpaceTokens; var fs: TFormatSettings absolute AFormatSettings; i, j, L: Integer; numEl: Integer; begin Result := AValue; numEl := Length(AElements); if GrowRight then begin // This branch is intended for decimal places, i.e. there may be trailing zeros. i := AIndex; if (AValue = '0') and (AElements[i].Token in AllOptTokens) then Result := ''; // Remove trailing zeros while (Result <> '') and (Result[Length(Result)] = '0') do Delete(Result, Length(Result), 1); // Add trailing zeros or spaces as required by the elements. i := AIndex; L := 0; while (i < numEl) and (AElements[i].Token in ATokens) do begin if AElements[i].Token in ZeroTokens then begin inc(L, AElements[i].IntValue); while Length(Result) < L do Result := Result + '0' end else if AElements[i].Token in SpaceTokens then begin inc(L, AElements[i].IntValue); while Length(Result) < L do Result := Result + ' '; end; inc(i); end; if UseThSep then begin j := 2; while (j < Length(Result)) and (Result[j-1] <> ' ') and (Result[j] <> ' ') do begin Insert(fs.ThousandSeparator, Result, 1); inc(j, 3); end; end; AIndex := i; end else begin // This branch is intended for digits (or integer and numerator parts of fractions) // --> There are no leading zeros. // Find last digit token of the sequence i := AIndex; while (i < numEl) and (AElements[i].Token in ATokens) do inc(i); j := i; if i > 0 then dec(i); if (AValue = '0') and (AElements[i].Token in AllOptTokens) and (i = AIndex) then Result := ''; // From the end of the sequence, going backward, add leading zeros or spaces // as required by the elements of the format. L := 0; while (i >= AIndex) do begin if AElements[i].Token in ZeroTokens then begin inc(L, AElements[i].IntValue); while Length(Result) < L do Result := '0' + Result; end else if AElements[i].Token in SpaceTokens then begin inc(L, AElements[i].IntValue); while Length(Result) < L do Result := ' ' + Result; end; dec(i); end; AIndex := j; if UseThSep then begin // AIndex := j + 1; j := Length(Result) - 2; while (j > 1) and (Result[j-1] <> ' ') and (Result[j] <> ' ') do begin Insert(fs.ThousandSeparator, Result, j); dec(j, 3); end; end; end; end; { Converts the floating point number to an exponential number string according to the format specification in AElements. It must have been verified before, that the elements in fact are valid for an exponential format. } function ProcessExpFormat(AValue: Double; AFormatSettings: TFormatSettings; const AElements: TsNumFormatElements; var AIndex: Integer): String; var fs: TFormatSettings absolute AFormatSettings; expchar: String; expSign: String; se, si, sd: String; decs, expDigits: Integer; intZeroDigits, intOptDigits, intSpaceDigits: Integer; numStr: String; i, id, p: Integer; numEl: Integer; begin Result := ''; numEl := Length(AElements); // Determine digits of integer part of mantissa intZeroDigits := 0; intOptDigits := 0; intSpaceDigits := 0; i := AIndex; while (AElements[i].Token in INT_TOKENS) do begin case AElements[i].Token of nftIntZeroDigit : inc(intZeroDigits, AElements[i].IntValue); nftIntSpaceDigit: inc(intSpaceDigits, AElements[i].IntValue); nftIntOptDigit : inc(intOptDigits, AElements[i].IntValue); end; inc(i); end; // No decimal places if (i + 2 < numEl) and (AElements[i].Token = nftExpChar) then begin expChar := AElements[i].TextValue; expSign := AElements[i+1].TextValue; expDigits := 0; i := i+2; while (i < numEl) and (AElements[i].Token in EXP_TOKENS) do begin inc(expDigits, AElements[i].IntValue); // not exactly what Excel does... Rather exotic case... inc(i); end; numstr := FormatFloat('0'+expChar+expSign+DupeString('0', expDigits), AValue, fs); p := pos('e', Lowercase(numStr)); se := copy(numStr, p, Length(numStr)); // exp part of the number string, incl "E" numStr := copy(numstr, 1, p-1); // mantissa of the number string numStr := ProcessIntegerFormat(numStr, fs, AElements, AIndex, INT_TOKENS, false, false); Result := numStr + se; AIndex := i; end else // With decimal places if (i + 1 < numEl) and (AElements[i].Token = nftDecSep) then begin inc(i); id := i; // index of decimal elements decs := 0; while (i < numEl) and (AElements[i].Token in DECS_TOKENS) do begin case AElements[i].Token of nftZeroDecs, nftSpaceDecs: inc(decs, AElements[i].IntValue); end; inc(i); end; expChar := AElements[i].TextValue; expSign := AElements[i+1].TextValue; expDigits := 0; inc(i, 2); while (i < numEl) and (AElements[i].Token in EXP_TOKENS) do begin inc(expDigits, AElements[i].IntValue); inc(i); end; if decs=0 then numstr := FormatFloat('0'+expChar+expSign+DupeString('0', expDigits), AValue, fs) else numStr := FloatToStrF(AValue, ffExponent, decs+1, expDigits, fs); if (abs(AValue) >= 1.0) and (expSign = '-') then Delete(numStr, pos('+', numStr), 1); p := pos('e', Lowercase(numStr)); se := copy(numStr, p, Length(numStr)); // exp part of the number string, incl "E" numStr := copy(numStr, 1, p-1); // mantissa of the number string p := pos(fs.DecimalSeparator, numStr); if p = 0 then begin si := numstr; sd := ''; end else begin si := ProcessIntegerFormat(copy(numStr, 1, p-1), fs, AElements, AIndex, INT_TOKENS, false, false); // integer part of the mantissa sd := ProcessIntegerFormat(copy(numStr, p+1, Length(numStr)), fs, AElements, id, DECS_TOKENS, true, false); // fractional part of the mantissa end; // Put all parts together... Result := si + fs.DecimalSeparator + sd + se; AIndex := i; end; end; function ProcessFracFormat(AValue: Double; const AFormatSettings: TFormatSettings; ADigits: Integer; const AElements: TsNumFormatElements; var AIndex: Integer): String; var fs: TFormatSettings absolute AFormatSettings; frint, frnum, frdenom, maxdenom: Int64; sfrint, sfrnum, sfrdenom: String; sfrsym, sintnumspace, snumsymspace, ssymdenomspace: String; i, numEl: Integer; begin sintnumspace := ''; snumsymspace := ''; ssymdenomspace := ''; sfrsym := '/'; if ADigits >= 0 then maxDenom := Round(IntPower(10, ADigits)); numEl := Length(AElements); i := AIndex; if AElements[i].Token in (INT_TOKENS + [nftIntTh]) then begin // Split-off integer if (AValue >= 1) then begin frint := trunc(AValue); AValue := frac(AValue); end else frint := 0; if ADigits >= 0 then FloatToFraction(AValue, maxdenom, frnum, frdenom) else begin frdenom := -ADigits; frnum := round(AValue*frdenom); end; sfrint := ProcessIntegerFormat(IntToStr(frint), fs, AElements, i, INT_TOKENS + [nftIntTh], false, (AElements[i].Token = nftIntTh)); while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do begin sintnumspace := sintnumspace + AElements[i].TextValue; inc(i); end; end else begin // "normal" fraction sfrint := ''; if ADigits > 0 then FloatToFraction(AValue, maxdenom, frnum, frdenom) else begin frdenom := -ADigits; frnum := round(AValue*frdenom); end; sintnumspace := ''; end; // numerator and denominator sfrnum := ProcessIntegerFormat(IntToStr(frnum), fs, AElements, i, FRACNUM_TOKENS, false, false); while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do begin snumsymspace := snumsymspace + AElements[i].TextValue; inc(i); end; inc(i); // fraction symbol while (i < numEl) and (AElements[i].Token in TERMINATING_TOKENS) do begin ssymdenomspace := ssymdenomspace + AElements[i].TextValue; inc(i); end; sfrdenom := ProcessIntegerFormat(IntToStr(frdenom), fs, AElements, i, FRACDENOM_TOKENS, false, false); AIndex := i+1; // Special cases if (frnum = 0) then begin if sfrnum = '' then begin sintnumspace := ''; snumsymspace := ''; ssymdenomspace := ''; sfrdenom := ''; sfrsym := ''; end else if trim(sfrnum) = '' then begin sfrdenom := DupeString(' ', Length(sfrdenom)); sfrsym := ' '; end; end; if sfrint = '' then sintnumspace := ''; // Compose result string Result := sfrnum + snumsymspace + sfrsym + ssymdenomspace + sfrdenom; if (Trim(Result) = '') and (sfrint = '') then sfrint := '0'; if sfrint <> '' then Result := sfrint + sintnumSpace + result; end; function ProcessFloatFormat(AValue: Double; AFormatSettings: TFormatSettings; const AElements: TsNumFormatElements; var AIndex: Integer): String; var fs: TFormatSettings absolute AFormatSettings; // just to ease typing... numEl: Integer; numStr, s: String; p, i: Integer; decs: Integer; useThSep: Boolean; decsIndex: Integer; begin Result := ''; numEl := Length(AElements); useThSep := AElements[AIndex].Token = nftIntTh; // Find the element index of the decimal separator i := AIndex; while (i < numEl) and (AElements[i].Token <> nftDecSep) do inc(i); // No decimal separator --> format as integer if i >= numEl then begin // fpsUtils.Round() avoids Banker's rounding Result := ProcessIntegerFormat(IntToStr(fpsCommon.Round(AValue)), fs, AElements, AIndex, (INT_TOKENS + [nftIntTh]), false, useThSep); exit; end; // There is a decimal separator. Get the count of decimal places. decs := 0; inc(i); decsIndex := i; while (i < numEl) and (AElements[i].Token in DECS_TOKENS) do begin inc(decs, AElements[i].IntValue); inc(i); end; // Convert value to string; this will do some rounding if required. numstr := FloatToStrF(AValue, ffFixed, MaxInt, decs, fs); // Process the integer part of the rounded number string p := pos(fs.DecimalSeparator, numstr); if p > 0 then s := copy(numstr, 1, p-1) else s := numstr; Result := ProcessIntegerFormat(s, fs, AElements, AIndex, (INT_TOKENS + [nftIntTh]), false, UseThSep); // Process the fractional part of the rounded number string if p > 0 then begin s := Copy(numstr, p+1, Length(numstr)); AIndex := decsIndex; s := ProcessIntegerFormat(s, fs, AElements, AIndex, DECS_TOKENS, true, false); if s <> '' then Result := Result + fs.DecimalSeparator + s; end; end; {@@ ---------------------------------------------------------------------------- Converts a floating point number to a string as determined by the specified number format parameters @param AValue Value to be converted to a string @param AParams Number format parameters which will be applied in the conversion. The number format params are obtained by the number format parser from the number format string. @param AFormatSettings Format settings needed by the number format parser for the conversion @returns Converted string -------------------------------------------------------------------------------} function ConvertFloatToStr(AValue: Double; AParams: TsNumFormatParams; AFormatSettings: TFormatSettings): String; { Returns true if s represent the value 0; it can be written in various ways: '0', '0.00', '0,000.0', '0.00E+10' etc. } function IsZeroStr(s: String): Boolean; var i: Integer; begin Result := false; for i:=1 to Length(s) do case s[i] of 'e', 'E': break; '1'..'9': exit; end; Result := true; end; var fs: TFormatSettings absolute AFormatSettings; sidx: Integer; section: TsNumFormatSection; i, el, numEl: Integer; isNeg: Boolean; yr, mon, day, hr, min, sec, ms: Word; s: String; digits: Integer; begin Result := ''; if IsNaN(AValue) then exit; if AParams = nil then begin Result := GeneralFormatFloat(AValue, fs); exit; end; sidx := 0; if (AValue < 0) and (Length(AParams.Sections) > 1) then sidx := 1; if (AValue = 0) and (Length(AParams.Sections) > 2) then sidx := 2; isNeg := (AValue < 0); AValue := abs(AValue); // section 0 adds the sign back, section 1 has the sign in the elements section := AParams.Sections[sidx]; numEl := Length(section.Elements); if nfkPercent in section.Kind then AValue := AValue * 100.0; if nfkHasFactor in section.Kind then AValue := AValue * section.Factor; if nfkTime in section.Kind then DecodeTime(AValue, hr, min, sec, ms); if nfkDate in section.Kind then DecodeDate(AValue, yr, mon, day); el := 0; while (el < numEl) do begin if section.Elements[el].Token = nftGeneral then begin s := GeneralFormatFloat(AValue, fs); if (sidx=0) and isNeg then s := '-' + s; Result := Result + s; end else // Integer token: can be the start of a number, exp, or mixed fraction format // Cases with thousand separator are handled here as well. if section.Elements[el].Token in (INT_TOKENS + [nftIntTh]) then begin // Check for exponential format if CheckExp(section.Elements, el) then s := ProcessExpFormat(AValue, fs, section.Elements, el) else // Check for fraction format if CheckFraction(section.Elements, el, digits) then s := ProcessFracFormat(AValue, fs, digits, section.Elements, el) else // Floating-point or integer s := ProcessFloatFormat(AValue, fs, section.Elements, el); if (sidx = 0) and isNeg and not IsZeroStr(s) then s := '-' + s; Result := Result + s; Continue; end else // Regular fraction (without integer being split off) if (section.Elements[el].Token in FRACNUM_TOKENS) and CheckFraction(section.Elements, el, digits) then begin s := ProcessFracFormat(AValue, fs, digits, section.Elements, el); if (sidx = 0) and isNeg then s := '-' + s; Result := Result + s; Continue; end else case section.Elements[el].Token of nftSpace, nftText, nftEscaped, nftCurrSymbol, nftSign, nftSignBracket, nftPercent: Result := Result + section.Elements[el].TextValue; nftEmptyCharWidth: Result := Result + ' '; nftDateTimeSep: case section.Elements[el].TextValue of '/': Result := Result + fs.DateSeparator; ':': Result := Result + fs.TimeSeparator; else Result := Result + section.Elements[el].TextValue; end; nftDecSep: Result := Result + fs.DecimalSeparator; nftThSep: Result := Result + fs.ThousandSeparator; nftYear: case section.Elements[el].IntValue of 1, 2: Result := Result + IfThen(yr mod 100 < 10, '0'+IntToStr(yr mod 100), IntToStr(yr mod 100)); 4: Result := Result + IntToStr(yr); end; nftMonth: case section.Elements[el].IntValue of 1: Result := Result + IntToStr(mon); 2: Result := Result + IfThen(mon < 10, '0'+IntToStr(mon), IntToStr(mon)); 3: Result := Result + fs.ShortMonthNames[mon]; 4: Result := Result + fs.LongMonthNames[mon]; end; nftDay: case section.Elements[el].IntValue of 1: result := result + IntToStr(day); 2: result := Result + IfThen(day < 10, '0'+IntToStr(day), IntToStr(day)); 3: Result := Result + fs.ShortDayNames[DayOfWeek(AValue)]; 4: Result := Result + fs.LongDayNames[DayOfWeek(AValue)]; end; nftHour: begin if section.Elements[el].IntValue < 0 then // This case is for nfTimeInterval s := IntToStr(Int64(hr) + trunc(AValue) * 24) else if section.Elements[el].TextValue = 'AM' then // This tag is set in case of AM/FM format begin hr := hr mod 12; if hr = 0 then hr := 12; s := IntToStr(hr) end else s := IntToStr(hr); if (abs(section.Elements[el].IntValue) = 2) and (Length(s) = 1) then s := '0' + s; Result := Result + s; end; nftMinute: begin if section.Elements[el].IntValue < 0 then // case for nfTimeInterval s := IntToStr(int64(min) + trunc(AValue) * 24 * 60) else s := IntToStr(min); if (abs(section.Elements[el].IntValue) = 2) and (Length(s) = 1) then s := '0' + s; Result := Result + s; end; nftSecond: begin if section.Elements[el].IntValue < 0 then // case for nfTimeInterval s := IntToStr(Int64(sec) + trunc(AValue) * 24 * 60 * 60) else s := IntToStr(sec); if (abs(section.Elements[el].IntValue) = 2) and (Length(s) = 1) then s := '0' + s; Result := Result + s; end; nftMilliseconds: case section.Elements[el].IntValue of 1: Result := Result + IntToStr(round(ms/100)); 2: Result := Result + Format('%.2d', [round(ms/10)]); 3: Result := Result + Format('%.3d', [ms]); end; nftAMPM: begin s := section.Elements[el].TextValue; if lowercase(s) = 'ampm' then s := IfThen(frac(AValue) < 0.5, fs.TimeAMString, fs.TimePMString) else begin i := pos('/', s); if i > 0 then s := IfThen(frac(AValue) < 0.5, copy(s, 1, i-1), copy(s, i+1, Length(s))) else s := IfThen(frac(AValue) < 0.5, 'AM', 'PM'); end; Result := Result + s; end; end; // case inc(el); end; // while end; function GeneralFormatFloat(AValue: Double; AFormatSettings: TFormatSettings): String; begin Result := FloatToStrF(AValue, ffGeneral, 15, 15, AFormatSettings); // 15 is for best rounding results. // Note: Still more than Excel whichrounds pi to 9 digits only. end; {==============================================================================} { Utility functions } {==============================================================================} {@@ ---------------------------------------------------------------------------- Adds an AM/PM format code to a pre-built time formatting string. Example: ATimeFormatString = 'hh:nn' ==> 'hh:nn AM/PM' @param ATimeFormatString String of time formatting codes (such as 'hh:nn') @param AFormatSettings FormatSettings for locale-dependent information @returns Formatting string with AM/PM option activated. -------------------------------------------------------------------------------} function AddAMPM(const ATimeFormatString: String; const AFormatSettings: TFormatSettings): String; begin Result := Format('%s AM/PM', [StripAMPM(ATimeFormatString)]); end; {@@ ---------------------------------------------------------------------------- The given format string is assumed to represent a time interval, i.e. its first time symbol must be enclosed by square brackets. Checks if this is true, and adds the brackes if not. @param AFormatString String with time formatting codes @returns Unchanged format string if its first time code is in square brackets (as in '[h]:nn:ss'). If not, the first time code is enclosed in square brackets. -------------------------------------------------------------------------------} function AddIntervalBrackets(AFormatString: String): String; var p: Integer; s1, s2: String; begin if AFormatString[1] = '[' then Result := AFormatString else begin p := pos(':', AFormatString); if p <> 0 then begin s1 := copy(AFormatString, 1, p-1); s2 := copy(AFormatString, p, Length(AFormatString)); Result := Format('[%s]%s', [s1, s2]); end else Result := Format('[%s]', [AFormatString]); end; end; {@@ ---------------------------------------------------------------------------- Builds a string list with samples of the predefined currency formats @param AList String list in which the format samples are stored @param APositive If @true, samples are built for positive currency values, otherwise for negative values @param AValue Currency value to be used when calculating the sample strings @param ACurrencySymbol Currency symbol string to be used in the samples -------------------------------------------------------------------------------} procedure BuildCurrencyFormatList(AList: TStrings; APositive: Boolean; AValue: Double; const ACurrencySymbol: String); var valueStr: String; i: Integer; begin valueStr := Format('%.0n', [AValue]); AList.BeginUpdate; try if AList.Count = 0 then begin if APositive then for i:=0 to High(POS_CURR_FMT) do AList.Add(Format(POS_CURR_FMT[i], [valueStr, ACurrencySymbol])) else for i:=0 to High(NEG_CURR_FMT) do AList.Add(Format(NEG_CURR_FMT[i], [valueStr, ACurrencySymbol])); end else begin if APositive then for i:=0 to High(POS_CURR_FMT) do AList[i] := Format(POS_CURR_FMT[i], [valueStr, ACurrencySymbol]) else for i:=0 to High(NEG_CURR_FMT) do AList[i] := Format(NEG_CURR_FMT[i], [valueStr, ACurrencySymbol]); end; finally AList.EndUpdate; end; end; {@@ ---------------------------------------------------------------------------- Builds a currency format string. The presentation of negative values (brackets, or minus signs) is taken from the provided format settings. The format string consists of three sections, separated by semicolons. Example: '"$"#,##0.00;("$"#,##0.00);"$"0.00' @param ANumberFormat Identifier of the built-in number format for which the format string is to be generated. @param AFormatSettings FormatSettings to be applied (used to extract default values for the parameters following) @param ADecimals number of decimal places. If < 0, the CurrencyDecimals of the FormatSettings is used. @param APosCurrFmt Identifier for the order of currency symbol, value and spaces of positive values - see pcfXXXX constants in fpsTypes.pas. If < 0, the CurrencyFormat of the FormatSettings is used. @param ANegCurrFmt Identifier for the order of currency symbol, value and spaces of negative values. Specifies also usage of (). - see ncfXXXX constants in fpsTypes.pas. If < 0, the NegCurrFormat of the FormatSettings is used. @param ACurrencySymbol String to identify the currency, like $ or USD. If ? the CurrencyString of the FormatSettings is used. @param Accounting If true, adds spaces for alignment of decimals @returns String of formatting codes -------------------------------------------------------------------------------} function BuildCurrencyFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; ADecimals, APosCurrFmt, ANegCurrFmt: Integer; ACurrencySymbol: String; Accounting: Boolean = false): String; var decs: String; pcf, ncf: Byte; p, n: String; negRed: Boolean; begin pcf := IfThen(APosCurrFmt < 0, AFormatSettings.CurrencyFormat, APosCurrFmt); ncf := IfThen(ANegCurrFmt < 0, AFormatSettings.NegCurrFormat, ANegCurrFmt); if (ADecimals < 0) then ADecimals := AFormatSettings.CurrencyDecimals; if ACurrencySymbol = '?' then ACurrencySymbol := AFormatSettings.CurrencyString; if ACurrencySymbol <> '' then ACurrencySymbol := '[$' + ACurrencySymbol + ']'; // ACurrencySymbol := '"' + ACurrencySymbol + '"'; // <-- not good for biff2 decs := DupeString('0', ADecimals); if ADecimals > 0 then decs := '.' + decs; negRed := (ANumberFormat = nfCurrencyRed); p := POS_CURR_FMT[pcf]; // Format mask for positive values n := NEG_CURR_FMT[ncf]; // Format mask for negative values // add extra space for the sign of the number for perfect alignment in Excel if Accounting then case ncf of 0, 14: p := p + '_)'; 3, 11: p := p + '_-'; 4, 15: p := '_(' + p; 5, 8 : p := '_-' + p; end; if ACurrencySymbol <> '' then begin Result := Format(p, ['#,##0' + decs, ACurrencySymbol]) + ';' + IfThen(negRed, '[red]', '') + Format(n, ['#,##0' + decs, ACurrencySymbol]) + ';' + Format(p, ['0'+decs, ACurrencySymbol]); end else begin Result := '#,##0' + decs; if negRed then Result := Result +';[red]' else Result := Result +';'; case ncf of 0, 14, 15 : Result := Result + '(#,##0' + decs + ')'; 1, 2, 5, 6, 8, 9, 12: Result := Result + '-#,##0' + decs; else Result := Result + '#,##0' + decs + '-'; end; Result := Result + ';0' + decs; end; end; {@@ ---------------------------------------------------------------------------- Builds a date/time format string from the number format code. @param ANumberFormat Built-in number format identifier @param AFormatSettings Format settings from which locale-dependent information like day-month-year order is taken. @param AFormatString Optional pre-built formatting string. It is used only for the format nfInterval where square brackets are added to the first time code field. @returns String of date/time formatting code constructed from the built-in format information. -------------------------------------------------------------------------------} function BuildDateTimeFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; AFormatString: String = '') : string; var i, j: Integer; Unwanted: set of ansichar; begin case ANumberFormat of nfShortDateTime: Result := AFormatSettings.ShortDateFormat + ' ' + AFormatSettings.ShortTimeFormat; // In the DefaultFormatSettings this is: d/m/y hh:nn nfShortDate: Result := AFormatSettings.ShortDateFormat; // --> d/m/y nfLongDate: Result := AFormatSettings.LongDateFormat; // --> dd mm yyyy nfShortTime: Result := StripAMPM(AFormatSettings.ShortTimeFormat); // --> hh:nn nfLongTime: Result := StripAMPM(AFormatSettings.LongTimeFormat); // --> hh:nn:ss nfShortTimeAM: begin // --> hh:nn AM/PM Result := AFormatSettings.ShortTimeFormat; if (pos('a', lowercase(AFormatSettings.ShortTimeFormat)) = 0) then Result := AddAMPM(Result, AFormatSettings); end; nfLongTimeAM: // --> hh:nn:ss AM/PM begin Result := AFormatSettings.LongTimeFormat; if pos('a', lowercase(AFormatSettings.LongTimeFormat)) = 0 then Result := AddAMPM(Result, AFormatSettings); end; nfDayMonth, // --> dd/mmm nfMonthYear: // --> mmm/yy begin Result := AFormatSettings.ShortDateFormat; case ANumberFormat of nfDayMonth: unwanted := ['y', 'Y']; nfMonthYear: unwanted := ['d', 'D']; end; for i:=Length(Result) downto 1 do if Result[i] in unwanted then Delete(Result, i, 1); while not (Result[1] in (['m', 'M', 'd', 'D', 'y', 'Y'] - unwanted)) do Delete(Result, 1, 1); while not (Result[Length(Result)] in (['m', 'M', 'd', 'D', 'y', 'Y'] - unwanted)) do Delete(Result, Length(Result), 1); i := 1; while not (Result[i] in ['m', 'M']) do inc(i); j := i; while (j <= Length(Result)) and (Result[j] in ['m', 'M']) do inc(j); while (j - i < 3) do begin Insert(Result[i], Result, j); inc(j); end; end; nfTimeInterval: // --> [h]:nn:ss if AFormatString = '' then Result := '[h]:nn:ss' else Result := AddIntervalBrackets(AFormatString); end; end; {@@ ---------------------------------------------------------------------------- Builds a number format string for fraction formatting from the number format code and the count of numerator and denominator digits. @param AMixedFraction If @TRUE, fraction is presented as mixed fraction @param ANumeratorDigits Count of numerator digits @param ADenominatorDigits Count of denominator digits. If the value is negative then its absolute value is inserted literally as as denominator. @returns String of formatting code, here something like: '##/##' or '# ##/##' -------------------------------------------------------------------------------} function BuildFractionFormatString(AMixedFraction: Boolean; ANumeratorDigits, ADenominatorDigits: Integer): String; begin if ADenominatorDigits < 0 then // a negative value indicates a fixed denominator value Result := Format('%s/%d', [ DupeString('?', ANumeratorDigits), -ADenominatorDigits ]) else Result := Format('%s/%s', [ DupeString('?', ANumeratorDigits), DupeString('?', ADenominatorDigits) ]); if AMixedFraction then Result := '# ' + Result; end; {@@ ---------------------------------------------------------------------------- Builds a number format string from the number format code and the count of decimal places. Example: ANumberFormat = nfFixedTh, ADecimals = 2 --> '#,##0.00' @param ANumberFormat Identifier of the built-in numberformat for which a format string is to be generated @param AFormatSettings FormatSettings for default parameters @param ADecimals Number of decimal places. If < 0 the CurrencyDecimals value of the FormatSettings is used. In case of a fraction format "ADecimals" refers to the maximum count digits of the denominator. @param AMinIntDigits Minimum count of integer digits, i.e. count of '0' in the format string before the decimal separator @returns String of formatting codes -------------------------------------------------------------------------------} function BuildNumberFormatString(ANumberFormat: TsNumberFormat; const AFormatSettings: TFormatSettings; ADecimals: Integer = -1; AMinIntDigits: Integer = 1): String; var decdigits: String; intdigits: String; begin Result := ''; if AMinIntDigits > 0 then intdigits := DupeString('0', AMinIntDigits) else intdigits := '#'; if ADecimals = -1 then ADecimals := AFormatSettings.CurrencyDecimals; if ADecimals > 0 then decdigits := '.' + DupeString('0', ADecimals) else decdigits := ''; case ANumberFormat of nfText: Result := '@'; nfFixed: Result := intdigits + decdigits; nfFixedTh: begin while Length(IntDigits) < 4 do intDigits := '#' + intdigits; System.Insert(',', intdigits, Length(intdigits)-2); Result := intdigits + decdigits; end; nfExp: Result := intdigits + decdigits + 'E+00'; nfPercentage: Result := intdigits + decdigits + '%'; nfFraction: if ADecimals = 0 then // "ADecimals" has a different meaning here... Result := '# ??/??' // This is the default fraction format else begin decdigits := DupeString('?', ADecimals); Result := '# ' + decdigits + '/' + decdigits; end; nfCurrency, nfCurrencyRed: Result := BuildCurrencyFormatString(ANumberFormat, AFormatSettings, ADecimals, AFormatSettings.CurrencyFormat, AFormatSettings.NegCurrFormat, AFormatSettings.CurrencyString); nfShortDateTime, nfShortDate, nfLongDate, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM, nfDayMonth, nfMonthYear, nfTimeInterval: raise EFPSpreadsheet.Create('BuildNumberFormatString: Use BuildDateTimeFormatSstring '+ 'to create a format string for date/time values.'); end; end; {@@ ---------------------------------------------------------------------------- Creates a format string for the specified parsed number format section. The format string is created according to Excel convention (which is understood by ODS as well). @param ASection Parsed section of number format elements as created by the number format parser @param AllowLocalizedAMPM Replaces "AMPM" in a time format string by "AM/PM". "AMPM" is allowed by FPS, but not by Excel. When converting a time to string it is replaced by the localized strings FormatSettings.TimeAMString/.TimePMString. @returns Excel-compatible format string -------------------------------------------------------------------------------} function BuildFormatStringFromSection(const ASection: TsNumFormatSection; AllowLocalizedAMPM: Boolean = true): String; var element: TsNumFormatElement; i, n: Integer; begin Result := ''; for i := 0 to High(ASection.Elements) do begin element := ASection.Elements[i]; case element.Token of nftGeneral: Result := Result + 'General'; nftIntOptDigit, nftOptDecs, nftFracNumOptDigit, nftFracDenomOptDigit: if element.IntValue > 0 then Result := Result + DupeString('#', element.IntValue); nftIntZeroDigit, nftZeroDecs, nftFracNumZeroDigit, nftFracDenomZeroDigit, nftExpDigits: if element.IntValue > 0 then Result := result + DupeString('0', element.IntValue); nftIntSpaceDigit, nftSpaceDecs, nftFracNumSpaceDigit, nftFracDenomSpaceDigit: if element.Intvalue > 0 then Result := result + DupeString('?', element.IntValue); nftFracDenom: Result := Result + IntToStr(element.IntValue); nftIntTh: case element.Intvalue of 0: Result := Result + '#,###'; 1: Result := Result + '#,##0'; 2: Result := Result + '#,#00'; 3: Result := Result + '#,000'; end; nftDecSep, nftThSep: Result := Result + element.TextValue; nftFracSymbol: Result := Result + '/'; nftPercent: Result := Result + '%'; nftFactor: if element.IntValue <> 0 then begin n := element.IntValue; while (n > 0) do begin Result := Result + element.TextValue; dec(n); end; end; nftSpace: Result := Result + ' '; nftText: if element.TextValue <> '' then result := Result + '"' + element.TextValue + '"'; nftYear: Result := Result + DupeString('y', element.IntValue); nftMonth: Result := Result + DupeString('m', element.IntValue); nftDay: Result := Result + DupeString('d', element.IntValue); nftHour: if element.IntValue < 0 then Result := Result + '[' + DupeString('h', -element.IntValue) + ']' else Result := Result + DupeString('h', element.IntValue); nftMinute: if element.IntValue < 0 then Result := result + '[' + DupeString('m', -element.IntValue) + ']' else Result := Result + DupeString('m', element.IntValue); nftSecond: if element.IntValue < 0 then Result := Result + '[' + DupeString('s', -element.IntValue) + ']' else Result := Result + DupeString('s', element.IntValue); nftMilliseconds: Result := Result + DupeString('0', element.IntValue); nftAMPM: if Lowercase(element.TextValue) = 'ampm' then Result := Result + 'AM/PM' else if element.TextValue <> '' then Result := Result + element.TextValue; nftSign, nftSignBracket, nftExpChar, nftExpSign, nftDateTimeSep: if element.TextValue <> '' then Result := Result + element.TextValue; nftCurrSymbol: if element.TextValue <> '' then Result := Result + '[$' + element.TextValue + ']'; nftEscaped: if element.TextValue <> '' then Result := Result + '\' + element.TextValue; nftRepeat: if element.TextValue <> '' then Result := Result + '*' + element.TextValue; nftColor: case element.IntValue of scBlack : Result := '[black]'; scWhite : Result := '[white]'; scRed : Result := '[red]'; scBlue : Result := '[blue]'; scGreen : Result := '[green]'; scYellow : Result := '[yellow]'; scMagenta: Result := '[magenta]'; scCyan : Result := '[cyan]'; else Result := Format('[Color%d]', [element.IntValue]); end; nftTextFormat: Result := '@'; end; end; end; {@@ ---------------------------------------------------------------------------- Counts how many decimal places are coded into a given number format string. @param AFormatString String with number format codes, such as '0.000' @param ADecChars Characters which are considered as symbols for decimals. For the fixed decimals, this is the '0'. Optional decimals are encoced as '#'. @returns Count of decimal places found -------------------------------------------------------------------------------} function CountDecs(AFormatString: String; ADecChars: TsDecsChars = ['0']): Byte; var i: Integer; begin Result := 0; i := 1; while (i <= Length(AFormatString)) do begin if AFormatString[i] = '.' then begin inc(i); while (i <= Length(AFormatString)) and (AFormatString[i] in ADecChars) do begin inc(i); inc(Result); end; exit; end else inc(i); end; end; {@@ ---------------------------------------------------------------------------- Applies a text format to a text. The text placeholder is @. Supports appending and prepending text. -------------------------------------------------------------------------------} function ApplyTextFormat(AText: String; AParams: TsNumFormatParams): String; var sct: TsNumFormatSection; element: TsNumFormatElement; i: Integer; begin Result := ''; for sct in AParams.Sections do for i := 0 to High(sct.Elements) do begin element := sct.Elements[i]; case element.Token of nftTextFormat: Result := Result + AText; nftText: Result := Result + element.TextValue; end; end; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified text corresponds to a boolean value. For this, it must match the specified @TRUE and @FALSE text phrases. -------------------------------------------------------------------------------} function IsBoolValue(const AText, ATrueText, AFalseText: String; out AValue: Boolean): Boolean; begin if SameText(AText, ATrueText) then begin AValue := true; Result := true; end else if SameText(AText, AFalseText) then begin AValue := false; Result := true; end else Result := false; end; {@@ ---------------------------------------------------------------------------- Checks whether the given number format code is for currency, i.e. requires a currency symbol. @param AFormat Built-in number format identifier to be checked @returns @True if AFormat is nfCurrency or nfCurrencyRed, @false otherwise. -------------------------------------------------------------------------------} function IsCurrencyFormat(AFormat: TsNumberFormat): Boolean; begin Result := AFormat in [nfCurrency, nfCurrencyRed]; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified number format parameters apply to currency values. @param ANumFormat Number format parameters @returns @True if Kind of the 1st format parameter section contains the nfkCurrency elements; @false otherwise -------------------------------------------------------------------------------} function IsCurrencyFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind * [nfkCurrency] <> []); end; {@@ ---------------------------------------------------------------------------- Checks whether the given number format code is for date/time values. @param AFormat Built-in number format identifier to be checked @returns @True if AFormat is a date/time format (such as nfShortTime), @false otherwise -------------------------------------------------------------------------------} function IsDateTimeFormat(AFormat: TsNumberFormat): Boolean; begin Result := AFormat in [nfShortDateTime, nfShortDate, nfLongDate, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM, nfDayMonth, nfMonthYear, nfTimeInterval]; end; {@@ ---------------------------------------------------------------------------- Checks whether the given string with formatting codes is for date/time values. @param AFormatStr String with formatting codes to be checked. @returns @True if AFormatStr is a date/time format string (such as 'hh:nn'), @false otherwise -------------------------------------------------------------------------------} function IsDateTimeFormat(AFormatStr: string): Boolean; var parser: TsNumFormatParser; begin parser := TsNumFormatParser.Create(AFormatStr, DefaultFormatSettings); try Result := parser.IsDateTimeFormat; finally parser.Free; end; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified number format parameters apply to date/time values. @param ANumFormat Number format parameters @returns @True if Kind of the 1st format parameter section contains the nfkDate or nfkTime elements; @false otherwise -------------------------------------------------------------------------------} function IsDateTimeFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind * [nfkDate, nfkTime] <> []); end; {@@ ---------------------------------------------------------------------------- Checks whether the specified text corresponds to a date/time value and returns @true, its numerical value and its built-in numberformat if it is. -------------------------------------------------------------------------------} function IsDateTimeValue(AText: String; const AFormatSettings: TFormatSettings; out ADateTime: TDateTime; out ANumFormat: TsNumberFormat): Boolean; { Test whether the text is formatted according to a built-in date/time format. Converts the obtained date/time value back to a string and compares. } function TestFormat(lNumFmt: TsNumberFormat): Boolean; var fmt: string; begin fmt := BuildDateTimeFormatString(lNumFmt, AFormatSettings); Result := FormatDateTime(fmt, ADateTime, AFormatSettings) = AText; if Result then ANumFormat := lNumFmt; end; begin Result := TryStrToDateTime(AText, ADateTime, AFormatSettings); if Result then begin ANumFormat := nfCustom; if abs(ADateTime) > 1 then // this is most probably a date begin if TestFormat(nfShortDateTime) then exit; if TestFormat(nfLongDate) then exit; if TestFormat(nfShortDate) then exit; if TestFormat(nfMonthYear) then exit; if TestFormat(nfDayMonth) then exit; end else begin // this case is time-only if TestFormat(nfLongTimeAM) then exit; if TestFormat(nfLongTime) then exit; if TestFormat(nfShortTimeAM) then exit; if TestFormat(nfShortTime) then exit; end; end; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified number format parameters apply to a date value. @param ANumFormat Number format parameters @returns @True if Kind of the 1st format parameter section contains the nfkDate, but no nfkTime tags; @false otherwise -------------------------------------------------------------------------------} function IsDateFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind * [nfkDate, nfkTime] = [nfkDate]); end; {@@ ---------------------------------------------------------------------------- Checks whether the given built-in number format code is for time values. @param AFormat Built-in number format identifier to be checked @returns @True if AFormat represents to a time-format, @false otherwise -------------------------------------------------------------------------------} function IsTimeFormat(AFormat: TsNumberFormat): boolean; begin Result := AFormat in [nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM, nfTimeInterval]; end; {@@ ---------------------------------------------------------------------------- Checks whether the given string with formatting codes is for time values. @param AFormatStr String with formatting codes to be checked @return True if AFormatStr represents a time-format, false otherwise -------------------------------------------------------------------------------} function IsTimeFormat(AFormatStr: String): Boolean; var parser: TsNumFormatParser; begin parser := TsNumFormatParser.Create(AFormatStr, DefaultFormatSettings); try Result := parser.IsTimeFormat; finally parser.Free; end; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified number format parameters apply to time values. @param ANumFormat Number format parameters @returns @True if Kind of the 1st format parameter section contains the nfkTime, but no nfkDate elements; @false otherwise -------------------------------------------------------------------------------} function IsTimeFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind * [nfkTime, nfkDate] = [nfkTime]); end; {@@ ---------------------------------------------------------------------------- Returns @TRUE if the specified format string represents a long time format, i.e. it contains two TimeSeparators. -------------------------------------------------------------------------------} function IsLongTimeFormat(AFormatStr: String; ATimeSeparator: Char): Boolean; var i, n: Integer; begin n := 0; for i:=1 to Length(AFormatStr) do if AFormatStr[i] = ATimeSeparator then inc(n); Result := (n=2); end; {@@ ---------------------------------------------------------------------------- Checks whether the specified text corresponds to a numerical value. If it is then the function result is @TRUE, and the number value and its formatting parameters are returned. -------------------------------------------------------------------------------} function IsNumberValue(AText: String; AutoDetectNumberFormat: Boolean; const AFormatSettings: TFormatSettings; out ANumber: Double; out ANumFormat: TsNumberFormat; out ADecimals: Integer; out ACurrencySymbol, AWarning: String): Boolean; var p: Integer; DecSep, ThousSep: Char; begin Result := false; AWarning := ''; // To detect whether the text is a currency value we look for the currency // string. If we find it, we delete it and convert the remaining string to // a number. ACurrencySymbol := AFormatSettings.CurrencyString; if RemoveCurrencySymbol(ACurrencySymbol, AText) then begin if IsNegative(AText) then begin if AText = '' then exit; AText := '-' + AText; end; end else ACurrencySymbol := ''; if AutoDetectNumberFormat then Result := TryStrToFloatAuto(AText, ANumber, DecSep, ThousSep, AWarning) else begin Result := TryStrToFloat(AText, ANumber, AFormatSettings); if Result then begin if pos(AFormatSettings.DecimalSeparator, AText) = 0 then DecSep := #0 else DecSep := AFormatSettings.DecimalSeparator; if pos(AFormatSettings.ThousandSeparator, AText) = 0 then ThousSep := #0 else ThousSep := AFormatSettings.ThousandSeparator; end; end; // Try to determine the number format if Result then begin if ThousSep <> #0 then ANumFormat := nfFixedTh else ANumFormat := nfGeneral; // count number of decimal places and try to catch special formats ADecimals := 0; if DecSep <> #0 then begin // Go to the decimal separator and search towards the end of the string p := pos(DecSep, AText) + 1; while (p <= Length(AText)) do begin // exponential format if AText[p] in ['+', '-', 'E', 'e'] then begin ANumFormat := nfExp; break; end else // percent format if AText[p] = '%' then begin ANumFormat := nfPercentage; break; end else begin inc(p); inc(ADecimals); end; end; if (ADecimals > 0) and (ADecimals < 9) and (ANumFormat = nfGeneral) then // "no formatting" assumed if there are "many" decimals ANumFormat := nfFixed; end else begin p := Length(AText); while (p > 0) do begin case AText[p] of '%' : ANumFormat := nfPercentage; 'e', 'E': ANumFormat := nfExp; else dec(p); end; break; end; end; end else ACurrencySymbol := ''; end; {@@ ---------------------------------------------------------------------------- Checks whether the specified number format parameters is a time interval format. @param ANumFormat Number format parameters @returns @True if Kind of the 1st format parameter section contains the nfkTimeInterval elements; @false otherwise -------------------------------------------------------------------------------} function IsTimeIntervalFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind * [nfkTimeInterval] <> []); end; function IsTextFormat(ANumFormat: TsNumFormatParams): Boolean; begin Result := (ANumFormat <> nil) and (ANumFormat.Sections[0].Kind = [nfkText]); end; {@@ ---------------------------------------------------------------------------- Creates a long date format string out of a short date format string. Retains the order of year-month-day and the separators, but uses 4 digits for year and 3 digits of month. @param ADateFormat String with date formatting code representing a "short" date, such as 'dd/mm/yy' @returns Format string modified to represent a "long" date, such as 'dd/mmm/yyyy' -------------------------------------------------------------------------------} function MakeLongDateFormat(ADateFormat: String): String; var i: Integer; begin Result := ''; i := 1; while i < Length(ADateFormat) do begin case ADateFormat[i] of 'y', 'Y': begin Result := Result + DupeString(ADateFormat[i], 4); while (i < Length(ADateFormat)) and (ADateFormat[i] in ['y','Y']) do inc(i); end; 'm', 'M': begin result := Result + DupeString(ADateFormat[i], 3); while (i < Length(ADateFormat)) and (ADateFormat[i] in ['m','M']) do inc(i); end; else Result := Result + ADateFormat[i]; inc(i); end; end; end; {@@ ---------------------------------------------------------------------------- Modifies the short date format such that it has a two-digit year and a two-digit month. Retains the order of year-month-day and the separators. @param ADateFormat String with date formatting codes representing a "long" date, such as 'dd/mmm/yyyy' @returns Format string modified to represent a "short" date, such as 'dd/mm/yy' -------------------------------------------------------------------------------} function MakeShortDateFormat(ADateFormat: String): String; var i: Integer; begin Result := ''; i := 1; while i < Length(ADateFormat) do begin case ADateFormat[i] of 'y', 'Y': begin Result := Result + DupeString(ADateFormat[i], 2); while (i < Length(ADateFormat)) and (ADateFormat[i] in ['y','Y']) do inc(i); end; 'm', 'M': begin result := Result + DupeString(ADateFormat[i], 2); while (i < Length(ADateFormat)) and (ADateFormat[i] in ['m','M']) do inc(i); end; else Result := Result + ADateFormat[i]; inc(i); end; end; end; {@@ ---------------------------------------------------------------------------- Creates a "time interval" format string having the first time code identifier in square brackets. @param Src Source format string, must be a time format string, like 'hh:nn' @param Dest Destination format string, will have the first time code element of the src format string in square brackets, like '[hh]:nn'. -------------------------------------------------------------------------------} procedure MakeTimeIntervalMask(Src: String; var Dest: String); var L: TStrings; begin L := TStringList.Create; try L.StrictDelimiter := true; L.Delimiter := ':'; L.DelimitedText := Src; if L[0][1] <> '[' then L[0] := '[' + L[0]; if L[0][Length(L[0])] <> ']' then L[0] := L[0] + ']'; Dest := L.DelimitedText; finally L.Free; end; end; {@@ ---------------------------------------------------------------------------- Removes an AM/PM formatting code from a given time formatting string. Variants of "AM/PM" are considered as well. The string is left unchanged if it does not contain AM/PM codes. @param ATimeFormatString String of time formatting codes (such as 'hh:nn AM/PM') @returns Formatting string with AM/PM being removed (--> 'hh:nn') -------------------------------------------------------------------------------} function StripAMPM(const ATimeFormatString: String): String; var i: Integer; begin Result := ''; i := 1; while i <= Length(ATimeFormatString) do begin if ATimeFormatString[i] in ['a', 'A'] then begin inc(i); while (i <= Length(ATimeFormatString)) and (ATimeFormatString[i] in ['p', 'P', 'm', 'M', '/']) do inc(i); end else Result := Result + ATimeFormatString[i]; inc(i); end; end; {@@ ---------------------------------------------------------------------------- Initializes the FormatSettings of file a import/export parameters record to default values which can be replaced by the FormatSettings of the workbook's FormatSettings -------------------------------------------------------------------------------} procedure InitFormatSettings(out AFormatSettings: TFormatSettings); var i: Integer; begin with AFormatSettings do begin CurrencyFormat := Byte(-1); NegCurrFormat := Byte(-1); ThousandSeparator := #0; DecimalSeparator := #0; CurrencyDecimals := Byte(-1); DateSeparator := #0; TimeSeparator := #0; ListSeparator := #0; CurrencyString := ''; ShortDateFormat := ''; LongDateFormat := ''; TimeAMString := ''; TimePMString := ''; ShortTimeFormat := ''; LongTimeFormat := ''; for i:=1 to 12 do begin ShortMonthNames[i] := ''; LongMonthNames[i] := ''; end; for i:=1 to 7 do begin ShortDayNames[i] := ''; LongDayNames[i] := ''; end; TwoDigitYearCenturyWindow := Word(-1); end; end; {@@ ---------------------------------------------------------------------------- Replaces in AFormatSettings all members marked as having default values (#0, -1, '') by the corresponding values of the ADefaultFormats record -------------------------------------------------------------------------------} procedure ReplaceFormatSettings(var AFormatSettings: TFormatSettings; const ADefaultFormats: TFormatSettings); var i: Integer; begin if AFormatSettings.CurrencyFormat = Byte(-1) then AFormatSettings.CurrencyFormat := ADefaultFormats.CurrencyFormat; if AFormatSettings.NegCurrFormat = Byte(-1) then AFormatSettings.NegCurrFormat := ADefaultFormats.NegCurrFormat; if AFormatSettings.ThousandSeparator = #0 then AFormatSettings.ThousandSeparator := ADefaultFormats.ThousandSeparator; if AFormatSettings.DecimalSeparator = #0 then AFormatSettings.DecimalSeparator := ADefaultFormats.DecimalSeparator; if AFormatSettings.CurrencyDecimals = Byte(-1) then AFormatSettings.CurrencyDecimals := ADefaultFormats.CurrencyDecimals; if AFormatSettings.DateSeparator = #0 then AFormatSettings.DateSeparator := ADefaultFormats.DateSeparator; if AFormatSettings.TimeSeparator = #0 then AFormatSettings.TimeSeparator := ADefaultFormats.TimeSeparator; if AFormatSettings.ListSeparator = #0 then AFormatSettings.ListSeparator := ADefaultFormats.ListSeparator; if AFormatSettings.CurrencyString = '' then AFormatSettings.CurrencyString := ADefaultFormats.CurrencyString; if AFormatSettings.ShortDateFormat = '' then AFormatSettings.ShortDateFormat := ADefaultFormats.ShortDateFormat; if AFormatSettings.LongDateFormat = '' then AFormatSettings.LongDateFormat := ADefaultFormats.LongDateFormat; if AFormatSettings.ShortTimeFormat = '' then AFormatSettings.ShortTimeFormat := ADefaultFormats.ShortTimeFormat; if AFormatSettings.LongTimeFormat = '' then AFormatSettings.LongTimeFormat := ADefaultFormats.LongTimeFormat; for i:=1 to 12 do begin if AFormatSettings.ShortMonthNames[i] = '' then AFormatSettings.ShortMonthNames[i] := ADefaultFormats.ShortMonthNames[i]; if AFormatSettings.LongMonthNames[i] = '' then AFormatSettings.LongMonthNames[i] := ADefaultFormats.LongMonthNames[i]; end; for i:=1 to 7 do begin if AFormatSettings.ShortDayNames[i] = '' then AFormatSettings.ShortDayNames[i] := ADefaultFormats.ShortDayNames[i]; if AFormatSettings.LongDayNames[i] = '' then AFormatSettings.LongDayNames[i] := ADefaultFormats.LongDayNames[i]; end; if AFormatSettings.TwoDigitYearCenturyWindow = Word(-1) then AFormatSettings.TwoDigitYearCenturyWindow := ADefaultFormats.TwoDigitYearCenturyWindow; end; function CreateNumFormatParams(ANumFormatStr: String; const AFormatSettings: TFormatSettings): TsNumFormatParams; begin Result := TsNumFormatParams.Create; ParamsOfNumFormatStr(ANumFormatStr, AFormatSettings, result); end; function ParamsOfNumFormatStr(ANumFormatStr: String; const AFormatSettings: TFormatSettings; var AResult: TsNumFormatParams): Integer; var parser: TsNumFormatParser; begin Assert(AResult <> nil); if ANumFormatstr = 'General' then ANumFormatStr := ''; parser := TsNumFormatParser.Create(ANumFormatStr, AFormatSettings); try Result := parser.Status; AResult.Sections := parser.FSections; finally parser.Free; end; end; {==============================================================================} { TsNumFormatParams } {==============================================================================} constructor TsNumFormatParams.Create; begin inherited; FAllowLocalizedAMPM := true; end; {@@ ---------------------------------------------------------------------------- Deletes a parsed number format element from the specified format section. @param ASectionIndex Index of the format section containing the element to be deleted @param AElementIndex Index of the format element to be deleted -------------------------------------------------------------------------------} procedure TsNumFormatParams.DeleteElement(ASectionIndex, AElementIndex: Integer); var i, n: Integer; begin with Sections[ASectionIndex] do begin n := Length(Elements); for i := AElementIndex+1 to n-1 do Elements[i-1] := Elements[i]; SetLength(Elements, n-1); end; end; {@@ ---------------------------------------------------------------------------- Creates the built-in number format identifier from the parsed number format sections and elements @returns Built-in number format identifer if the format is built into fpspreadsheet, or nfCustom otherwise @seeAlso TsNumberFormat -------------------------------------------------------------------------------} function TsNumFormatParams.GetNumFormat: TsNumberFormat; begin Result := nfCustom; case Length(Sections) of 0: Result := nfGeneral; 1: Result := Sections[0].NumFormat; 2: if (Sections[0].NumFormat = Sections[1].NumFormat) and (Sections[0].NumFormat in [nfCurrency, nfCurrencyRed]) then Result := Sections[0].NumFormat; 3: if (Sections[0].NumFormat = Sections[1].NumFormat) and (Sections[1].NumFormat = Sections[2].NumFormat) and (Sections[0].NumFormat in [nfCurrency, nfCurrencyRed]) then Result := Sections[0].NumFormat; end; end; {@@ ---------------------------------------------------------------------------- Constructs the number format string from the parsed sections and elements. The format symbols are selected according to Excel syntax. @returns Excel-compatible number format string. -------------------------------------------------------------------------------} function TsNumFormatParams.GetNumFormatStr: String; var i: Integer; begin if Length(Sections) > 0 then begin Result := BuildFormatStringFromSection(Sections[0]); for i := 1 to High(Sections) do Result := Result + ';' + BuildFormatStringFromSection(Sections[i], FAllowLocalizedAMPM); end else Result := ''; end; {@@ ---------------------------------------------------------------------------- Inserts a parsed format token into the specified format section before the specified element. @param ASectionIndex Index of the parsed format section into which the token is to be inserted @param AElementIndex Index of the format element before which the token is to be inserted @param AToken Parsed format token to be inserted @seeAlso TsNumFormatToken -------------------------------------------------------------------------------} procedure TsNumFormatParams.InsertElement(ASectionIndex, AElementIndex: Integer; AToken: TsNumFormatToken); var i, n: Integer; begin with Sections[ASectionIndex] do begin n := Length(Elements); SetLength(Elements, n+1); for i:=n-1 downto AElementIndex do Elements[i+1] := Elements[i]; Elements[AElementIndex].Token := AToken; end; end; {@@ ---------------------------------------------------------------------------- Checks whether the parsed format sections passed as a parameter are identical to the interal section array. @param ASections Array of parsed format sections to be compared with the internal format sections -------------------------------------------------------------------------------} function TsNumFormatParams.SectionsEqualTo(ASections: TsNumFormatSections): Boolean; var i, j: Integer; begin Result := false; if Length(ASections) <> Length(Sections) then exit; for i := 0 to High(Sections) do begin if Length(Sections[i].Elements) <> Length(ASections[i].Elements) then exit; for j:=0 to High(Sections[i].Elements) do begin if Sections[i].Elements[j].Token <> ASections[i].Elements[j].Token then exit; if Sections[i].NumFormat <> ASections[i].NumFormat then exit; if Sections[i].Decimals <> ASections[i].Decimals then exit; { if Sections[i].Factor <> ASections[i].Factor then exit; } if Sections[i].FracInt <> ASections[i].FracInt then exit; if Sections[i].FracNumerator <> ASections[i].FracNumerator then exit; if Sections[i].FracDenominator <> ASections[i].FracDenominator then exit; if Sections[i].CurrencySymbol <> ASections[i].CurrencySymbol then exit; if Sections[i].Color <> ASections[i].Color then exit; case Sections[i].Elements[j].Token of nftText, nftThSep, nftDecSep, nftDateTimeSep, nftAMPM, nftSign, nftSignBracket, nftExpChar, nftExpSign, nftPercent, nftFracSymbol, nftCurrSymbol, nftCountry, nftSpace, nftEscaped, nftRepeat, nftEmptyCharWidth, nftTextFormat: if Sections[i].Elements[j].TextValue <> ASections[i].Elements[j].TextValue then exit; nftYear, nftMonth, nftDay, nftHour, nftMinute, nftSecond, nftMilliseconds, nftMonthMinute, nftIntOptDigit, nftIntZeroDigit, nftIntSpaceDigit, nftIntTh, nftZeroDecs, nftOptDecs, nftSpaceDecs, nftExpDigits, nftFactor, nftFracNumOptDigit, nftFracNumSpaceDigit, nftFracNumZeroDigit, nftFracDenomOptDigit, nftFracDenomSpaceDigit, nftFracDenomZeroDigit, nftColor: if Sections[i].Elements[j].IntValue <> ASections[i].Elements[j].IntValue then exit; nftCompareOp, nftCompareValue: if Sections[i].Elements[j].FloatValue <> ASections[i].Elements[j].FloatValue then exit; end; end; end; Result := true; end; {@@ ---------------------------------------------------------------------------- Defines the currency symbol used in the format params sequence @param AValue String containing the currency symbol to be used in the converted numbers -------------------------------------------------------------------------------} procedure TsNumFormatParams.SetCurrSymbol(AValue: String); var section: TsNumFormatSection; s, el: Integer; begin for s:=0 to High(Sections) do begin section := Sections[s]; if (nfkCurrency in section.Kind) then begin section.CurrencySymbol := AValue; for el := 0 to High(section.Elements) do if section.Elements[el].Token = nftCurrSymbol then section.Elements[el].Textvalue := AValue; end; end; end; {@@ ---------------------------------------------------------------------------- Adds or modifies parsed format tokens such that the specified number of decimal places is displayed @param AValue Number of decimal places to be shown -------------------------------------------------------------------------------} procedure TsNumFormatParams.SetDecimals(AValue: byte); var section: TsNumFormatSection; s, el: Integer; begin for s := 0 to High(Sections) do begin section := Sections[s]; if section.Kind * [nfkFraction, nfkDate, nfkTime] <> [] then Continue; section.Decimals := AValue; for el := High(section.Elements) downto 0 do case section.Elements[el].Token of nftZeroDecs: section.Elements[el].Intvalue := AValue; nftOptDecs, nftSpaceDecs: DeleteElement(s, el); end; end; end; {@@ ---------------------------------------------------------------------------- If AEnable is true a format section for negative numbers is added (or an existing one is modified) such that negative numbers are displayed in red. If AEnable is false the format tokens are modified such that negative values are displayed in default color. @param AEnable The format tokens are modified such as to display negative values in red if AEnable is true. -------------------------------------------------------------------------------} procedure TsNumFormatParams.SetNegativeRed(AEnable: Boolean); var el: Integer; begin // Enable negative-value color if AEnable then begin if Length(Sections) = 1 then begin SetLength(Sections, 2); Sections[1] := Sections[0]; InsertElement(1, 0, nftColor); Sections[1].Elements[0].Intvalue := scRed; InsertElement(1, 1, nftSign); Sections[1].Elements[1].TextValue := '-'; end else begin if not (nfkHasColor in Sections[1].Kind) then InsertElement(1, 0, nftColor); for el := 0 to High(Sections[1].Elements) do if Sections[1].Elements[el].Token = nftColor then Sections[1].Elements[el].IntValue := scRed; end; Sections[1].Kind := Sections[1].Kind + [nfkHasColor]; Sections[1].Color := scRed; end else // Disable negative-value color if Length(Sections) >= 2 then begin Sections[1].Kind := Sections[1].Kind - [nfkHasColor]; Sections[1].Color := scBlack; for el := High(Sections[1].Elements) downto 0 do if Sections[1].Elements[el].Token = nftColor then DeleteElement(1, el); end; end; {@@ ---------------------------------------------------------------------------- Inserts a thousand separator token into the format elements at the appropriate position, or removes it @param AEnable A thousand separator is inserted if AEnable is @true, or else deleted. -------------------------------------------------------------------------------} procedure TsNumFormatParams.SetThousandSep(AEnable: Boolean); var section: TsNumFormatSection; s, el: Integer; replaced: Boolean; begin for s := 0 to High(Sections) do begin section := Sections[s]; replaced := false; for el := High(section.Elements) downto 0 do begin if AEnable then begin if section.Elements[el].Token in [nftIntOptDigit, nftIntSpaceDigit, nftIntZeroDigit] then begin if replaced then DeleteElement(s, el) else begin section.Elements[el].Token := nftIntTh; Include(section.Kind, nfkHasThSep); replaced := true; end; end; end else begin if section.Elements[el].Token = nftIntTh then begin section.Elements[el].Token := nftIntZeroDigit; Exclude(section.Kind, nfkHasThSep); break; end; end; end; end; end; {==============================================================================} { TsNumFormatList } {==============================================================================} {@@ ---------------------------------------------------------------------------- Constructor of the number format list class. @param AFormatSettings Format settings needed internally by the number format parser (currency symbol, etc.) @param AOwnsData If @true then the list is responsible to destroy the list items -------------------------------------------------------------------------------} constructor TsNumFormatList.Create(AFormatSettings: TFormatSettings; AOwnsData: Boolean); begin inherited Create; FClass := TsNumFormatParams; FFormatSettings := AFormatSettings; FOwnsData := AOwnsData; end; {@@ ---------------------------------------------------------------------------- Destructor of the number format list class. Clears the list items if the list "owns" the data. -------------------------------------------------------------------------------} destructor TsNumFormatList.Destroy; begin Clear; inherited; end; {@@ ---------------------------------------------------------------------------- Adds the specified sections of a parsed number format to the list. Duplicates are not checked before adding the format item. @param ASections Array of number format sections as obtained by the number format parser for a given format string @returns Index of the format item in the list. -------------------------------------------------------------------------------} function TsNumFormatList.AddFormat(ASections: TsNumFormatSections): Integer; var nfp: TsNumFormatParams; begin Result := Find(ASections); if Result = -1 then begin nfp := FClass.Create; nfp.Sections := ASections; Result := inherited Add(nfp); end; end; {@@ ---------------------------------------------------------------------------- Adds a number format as specified by a format string to the list Uses the number format parser to convert the format string to format sections and elements. Duplicates are not checked before adding the format item. @param AFormatStr Excel-like format string describing the format to be added @returns Index of the format item in the list -------------------------------------------------------------------------------} function TsNumFormatList.AddFormat(AFormatStr: String): Integer; var parser: TsNumFormatParser; newSections: TsNumFormatSections = nil; i: Integer; begin parser := TsNumFormatParser.Create(AFormatStr, FFormatSettings); try SetLength(newSections, parser.ParsedSectionCount); for i:=0 to High(newSections) do newSections[i] := parser.ParsedSections[i]; Result := AddFormat(newSections); finally parser.Free; end; end; {@@ ---------------------------------------------------------------------------- Adds the number formats to the list which are built into the file format. Does nothing here. Must be overridden by derived classes for each file format. -------------------------------------------------------------------------------} procedure TsNumFormatList.AddBuiltinFormats; begin end; {@@ ---------------------------------------------------------------------------- Clears the list. If the list "owns" the format items they are destroyed. @seeAlso TsNumFormatList.Create -------------------------------------------------------------------------------} procedure TsNumFormatList.Clear; var i: Integer; begin for i := Count-1 downto 0 do Delete(i); inherited; end; {@@ ---------------------------------------------------------------------------- Deletes the number format item having the specified index in the list. If the list "owns" the format items, the item is destroyed. @param AIndex Index of the format item to be deleted @seeAlso TsNumformatList.Create -------------------------------------------------------------------------------} procedure TsNumFormatList.Delete(AIndex: Integer); var p: TsNumFormatParams; begin if FOwnsData then begin p := GetItem(AIndex); if p <> nil then p.Free; end; inherited Delete(AIndex); end; {@@ ---------------------------------------------------------------------------- Checks whether a parsed format item having the specified format sections is contained in the list and returns its index if found, or -1 if not found. @param ASections Array of number format sections as obtained by the number format parser for a given format string @returns Index of the found format item, or -1 if not found -------------------------------------------------------------------------------} function TsNumFormatList.Find(ASections: TsNumFormatSections): Integer; var nfp: TsNumFormatParams; begin for Result := 0 to Count-1 do begin nfp := GetItem(Result); if nfp.SectionsEqualTo(ASections) then exit; end; Result := -1; end; {@@ ---------------------------------------------------------------------------- Checks whether a format item corresponding to the specified format string is contained in the list and returns its index if found, or -1 if not. Should be called before adding a format to the list to avoid duplicates. @param AFormatStr Number format string of the format item which is seeked @returns Index of the found format item, or -1 if not found @seeAlso TsNumFormatList.AddFormat -------------------------------------------------------------------------------} function TsNumFormatList.Find(AFormatStr: String): Integer; var nfp: TsNumFormatParams; begin nfp := CreateNumFormatParams(AFormatStr, FFormatSettings); if nfp = nil then Result := -1 else Result := Find(nfp.Sections); end; {@@ ---------------------------------------------------------------------------- Getter function returning the correct type of the list items (i.e., @link(TsNumFormatParams) which are parsed format descriptions). @param AIndex Index of the format item @returns Pointer to the list item at the specified index, cast to the type @link(TsNumFormatParams) -------------------------------------------------------------------------------} function TsNumFormatList.GetItem(AIndex: Integer): TsNumFormatParams; begin Result := TsNumFormatParams(inherited Items[AIndex]); end; {@@ ---------------------------------------------------------------------------- Setter function for the list items @param AIndex Index of the format item @param AValue Pointer to the parsed format description to be stored in the list at the specified index. -------------------------------------------------------------------------------} procedure TsNumFormatList.SetItem(AIndex: Integer; const AValue: TsNumFormatParams); begin inherited Items[AIndex] := AValue; end; {==============================================================================} { TsNumFormatParser } {==============================================================================} {@@ ---------------------------------------------------------------------------- Creates a number format parser for analyzing a formatstring that has been read from a spreadsheet file. If ALocalized is true then the formatstring contains localized decimal separator etc. -------------------------------------------------------------------------------} constructor TsNumFormatParser.Create(const AFormatString: String; const AFormatSettings: TFormatSettings); begin inherited Create; FFormatSettings := AFormatSettings; Parse(AFormatString); CheckSections; if AFormatString = '' then FSections[0].NumFormat := nfGeneral; end; destructor TsNumFormatParser.Destroy; begin FSections := nil; inherited Destroy; end; procedure TsNumFormatParser.AddElement(AToken: TsNumFormatToken; AText: String); var n: Integer; begin n := Length(FSections[FCurrSection].Elements); SetLength(FSections[FCurrSection].Elements, n+1); FSections[FCurrSection].Elements[n].Token := AToken; FSections[FCurrSection].Elements[n].TextValue := AText; end; procedure TsNumFormatParser.AddElement(AToken: TsNumFormatToken; AIntValue: Integer=0; AText: String = ''); var n: Integer; begin n := Length(FSections[FCurrSection].Elements); SetLength(FSections[FCurrSection].Elements, n+1); FSections[FCurrSection].Elements[n].Token := AToken; FSections[FCurrSection].Elements[n].IntValue := AIntValue; FSections[FCurrSection].Elements[n].TextValue := AText; end; procedure TsNumFormatParser.AddElement(AToken: TsNumFormatToken; AFloatValue: Double); overload; var n: Integer; begin n := Length(FSections[FCurrSection].Elements); SetLength(FSections[FCurrSection].Elements, n+1); FSections[FCurrSection].Elements[n].Token := AToken; FSections[FCurrSection].Elements[n].FloatValue := AFloatValue; end; procedure TsNumFormatParser.AddSection; begin FCurrSection := Length(FSections); SetLength(FSections, FCurrSection + 1); with FSections[FCurrSection] do SetLength(Elements, 0); end; procedure TsNumFormatParser.AnalyzeColor(AValue: String); var n: Integer; begin AValue := lowercase(AValue); // Colors if AValue = 'red' then AddElement(nftColor, ord(scRed)) else if AValue = 'black' then AddElement(nftColor, ord(scBlack)) else if AValue = 'blue' then AddElement(nftColor, ord(scBlue)) else if AValue = 'white' then AddElement(nftColor, ord(scWhite)) else if AValue = 'green' then AddElement(nftColor, ord(scGreen)) else if AValue = 'cyan' then AddElement(nftColor, ord(scCyan)) else if AValue = 'magenta' then AddElement(nftColor, ord(scMagenta)) else if copy(AValue, 1, 5) = 'color' then begin AValue := copy(AValue, 6, Length(AValue)); if not TryStrToInt(trim(AValue), n) then begin FStatus := psErrNoValidColorIndex; exit; end; AddElement(nftColor, n); end else FStatus := psErrUnknownInfoInBrackets; end; function TsNumFormatParser.AnalyzeCurrency(const AValue: String): Boolean; begin if (FFormatSettings.CurrencyString = '') then Result := false else Result := CurrencyRegistered(AValue); end; {@@ Creates a formatstring for all sections. @Note This implementation is only valid for the fpc and Excel dialects of format string. } function TsNumFormatParser.BuildFormatString: String; var i: Integer; begin if Length(FSections) > 0 then begin Result := BuildFormatStringFromSection(FSections[0]); for i:=1 to High(FSections) do Result := Result + ';' + BuildFormatStringFromSection(FSections[i]); end; end; procedure TsNumFormatParser.CheckSections; var i: Integer; begin for i:=0 to High(FSections) do CheckSection(i); if (Length(FSections) > 1) and (FSections[1].NumFormat = nfCurrencyRed) then for i:=0 to High(FSections) do if FSections[i].NumFormat = nfCurrency then FSections[i].NumFormat := nfCurrencyRed; end; procedure TsNumFormatParser.CheckSection(ASection: Integer); var el, i: Integer; section: PsNumFormatSection; nfs, nfsTest: String; nf: TsNumberFormat; formats: set of TsNumberFormat; isMonthMinute: Boolean; begin if FStatus <> psOK then exit; section := @FSections[ASection]; section^.Kind := []; if (ASection = 0) and (Length(FSections) = 1) and (Length(section^.Elements) = 1) and (section^.Elements[0].Token = nftGeneral) then begin section^.NumFormat := nfGeneral; exit; end; i := 0; isMonthMinute := false; for el := 0 to High(section^.Elements) do begin case section^.Elements[el].Token of nftZeroDecs: section^.Decimals := section^.Elements[el].IntValue; nftIntZeroDigit: begin section^.MinIntDigits := section^.Elements[el].IntValue; i := section^.Elements[el].IntValue; end; nftIntOptDigit, nftIntSpaceDigit: i := section^.Elements[el].IntValue; nftFracNumSpaceDigit, nftFracNumZeroDigit: section^.FracNumerator := section^.Elements[el].IntValue; nftFracDenomSpaceDigit, nftFracDenomZeroDigit: section^.FracDenominator := section^.Elements[el].IntValue; nftFracDenom: section^.FracDenominator := -section^.Elements[el].IntValue; nftPercent: section^.Kind := section^.Kind + [nfkPercent]; nftExpChar: if (nfkExp in section^.Kind) then FStatus := psErrMultipleExpChars else section^.Kind := section^.Kind + [nfkExp]; nftFactor: if section^.Elements[el].IntValue <> 0 then begin section^.Elements[el].FloatValue := IntPower(10, -3*section^.Elements[el].IntValue); section^.Factor := section^.Elements[el].FloatValue; section^.Kind := section^.Kind + [nfkHasFactor]; end; nftFracSymbol: if (nfkFraction in section^.Kind) then FStatus := psErrMultipleFracSymbols else begin section^.Kind := section^.Kind + [nfkFraction]; section^.FracInt := i; end; nftCurrSymbol: begin if (nfkCurrency in section^.Kind) then FStatus := psErrMultipleCurrSymbols else begin section^.Kind := section^.Kind + [nfkCurrency]; section^.CurrencySymbol := section^.Elements[el].TextValue; end; end; nftYear, nftMonth, nftDay: section^.Kind := section^.Kind + [nfkDate]; nftHour, nftMinute, nftSecond, nftMilliseconds: begin section^.Kind := section^.Kind + [nfkTime]; if section^.Elements[el].IntValue < 0 then section^.Kind := section^.Kind + [nfkTimeInterval]; if section^.Elements[el].Token = nftMilliseconds then section^.Decimals := section^.Elements[el].IntValue else section^.Decimals := 0; end; nftMonthMinute: isMonthMinute := true; nftColor: begin section^.Kind := section^.Kind + [nfkHasColor]; section^.Color := section^.Elements[el].IntValue; end; nftIntTh: section^.Kind := section^.Kind + [nfkHasThSep]; nftTextFormat: section^.Kind := section^.Kind + [nfkText]; end; end; // for if FStatus <> psOK then exit; if (section^.Kind * [nfkDate, nfkTime] <> []) and (section^.Kind * [nfkPercent, nfkExp, nfkCurrency, nfkFraction] <> []) then begin FStatus := psErrNoValidDateTimeFormat; exit; end; if (Length(FSections) = 1) and (section^.Kind = [nfkText]) then begin section^.NumFormat := nfText; exit; end; section^.NumFormat := nfCustom; if (section^.Kind * [nfkDate, nfkTime] <> []) or isMonthMinute then begin FixMonthMinuteToken(section^); nfs := GetFormatString; if (nfkTimeInterval in section^.Kind) then section^.NumFormat := nfTimeInterval else begin formats := [nfShortDateTime, nfLongDate, nfShortDate, nfLongTime, nfShortTime, nfLongTimeAM, nfShortTimeAM, nfDayMonth, nfMonthYear]; for nf in formats do begin nfsTest := BuildDateTimeFormatString(nf, FFormatSettings); if Length(nfsTest) = Length(nfs) then begin if SameText(nfs, nfsTest) then begin section^.NumFormat := nf; break; end; for i := 1 to Length(nfsTest) do case nfsTest[i] of '/': if not (nf in [nfLongTimeAM, nfShortTimeAM]) then nfsTest[i] := FFormatSettings.DateSeparator; ':': nfsTest[i] := FFormatSettings.TimeSeparator; 'n': nfsTest[i] := 'm'; end; if SameText(nfs, nfsTest) then begin section^.NumFormat := nf; break; end; end; end; end; end else begin nfs := GetFormatString; nfsTest := BuildFractionFormatString(section^.FracInt > 0, section^.FracNumerator, section^.FracDenominator); if sameText(nfs, nfsTest) then section^.NumFormat := nfFraction else begin formats := [nfFixed, nfFixedTh, nfPercentage, nfExp]; for nf in formats do begin nfsTest := BuildNumberFormatString(nf, FFormatSettings, section^.Decimals); if SameText(nfs, nfsTest) then begin section^.NumFormat := nf; break; end; end; end; if (section^.NumFormat = nfCustom) and (nfkCurrency in section^.Kind) then begin section^.NumFormat := nfCurrency; if section^.Color = scRed then section^.NumFormat := nfCurrencyRed; end; end; end; procedure TsNumFormatParser.ClearAll; var i, j: Integer; begin for i:=0 to Length(FSections)-1 do begin for j:=0 to Length(FSections[i].Elements) do if FSections[i].Elements <> nil then FSections[i].Elements[j].TextValue := ''; FSections[i].Elements := nil; FSections[i].CurrencySymbol := ''; end; FSections := nil; end; procedure TsNumFormatParser.DeleteElement(ASection, AIndex: Integer); var i, n: Integer; begin n := Length(FSections[ASection].Elements); for i:= AIndex+1 to n-1 do FSections[ASection].Elements[i-1] := FSections[ASection].Elements[i]; SetLength(FSections[ASection].Elements, n-1); end; {@@ Identify the ambiguous "m" token ("month" or "minute") } procedure TsNumFormatParser.FixMonthMinuteToken(var ASection: TsNumFormatSection); var i, j: Integer; // Finds the previous date/time element skipping spaces, date/time sep etc. function PrevDateTimeElement(j: Integer): Integer; begin Result := -1; dec(j); while (j >= 0) do begin with ASection.Elements[j] do if Token in [nftYear, nftMonth, nftDay, nftHour, nftMinute, nftSecond] then begin Result := j; exit; end; dec(j); end; end; // Finds the next date/time element skipping spaces, date/time sep etc. function NextDateTimeElement(j: Integer): Integer; begin Result := -1; inc(j); while (j < Length(ASection.Elements)) do begin with ASection.Elements[j] do if Token in [nftYear, nftMonth, nftDay, nftHour, nftMinute, nftSecond] then begin Result := j; exit; end; inc(j); end; end; begin for i:=0 to High(ASection.Elements) do begin // Find index of nftMonthMinute token... if ASection.Elements[i].Token = nftMonthMinute then begin // ... and, using its neighbors, decide whether it is a month or a minute. j := NextDateTimeElement(i); if j <> -1 then case ASection.Elements[j].Token of nftDay, nftYear: begin ASection.Elements[i].Token := nftMonth; Continue; end; nftSecond: begin ASection.Elements[i].Token := nftMinute; Continue; end; end; j := PrevDateTimeElement(i); if j <> -1 then case ASection.Elements[j].Token of nftDay, nftYear: begin ASection.Elements[i].Token := nftMonth; Continue; end; nftHour: begin ASection.Elements[i].Token := nftMinute; Continue; end; end; // If we get here the token is isolated. In this case we assume // that it is a month - that's the way Excel does it when reading files // (for editing of a worksheet, however, Excel distinguishes between // uppercase "M" for "month" and lowercase "m" for "minute".) ASection.Elements[i].Token := nftMonth; Include(ASection.Kind, nfkDate); end; end; end; procedure TsNumFormatParser.InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AText: String); var i, n: Integer; begin n := Length(FSections[ASection].Elements); SetLength(FSections[ASection].Elements, n+1); for i:= n-1 downto AIndex+1 do FSections[ASection].Elements[i+1] := FSections[ASection].Elements[i]; FSections[ASection].Elements[AIndex+1].Token := AToken; FSections[ASection].Elements[AIndex+1].TextValue := AText; end; procedure TsNumFormatParser.InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AIntValue: Integer); var i, n: Integer; begin n := Length(FSections[ASection].Elements); SetLength(FSections[ASection].Elements, n+1); for i:= n-1 downto AIndex+1 do FSections[ASection].Elements[i+1] := FSections[ASection].Elements[i]; FSections[ASection].Elements[AIndex+1].Token := AToken; FSections[ASection].Elements[AIndex+1].IntValue := AIntValue; end; procedure TsNumFormatParser.InsertElement(ASection, AIndex: Integer; AToken: TsNumFormatToken; AFloatValue: Double); var i, n: Integer; begin n := Length(FSections[ASection].Elements); SetLength(FSections[ASection].Elements, n+1); for i:= n-1 downto AIndex+1 do FSections[ASection].Elements[i+1] := FSections[ASection].Elements[i]; FSections[ASection].Elements[AIndex+1].Token := AToken; FSections[ASection].Elements[AIndex+1].FloatValue := AFloatValue; end; function TsNumFormatParser.GetFormatString: String; begin Result := BuildFormatString; end; {@@ Extracts the currency symbol form the formatting sections. It is assumed that all two or three sections of the currency/accounting format use the same currency symbol, otherwise it would be custom format anyway which ignores the currencysymbol value. } function TsNumFormatParser.GetCurrencySymbol: String; begin if Length(FSections) > 0 then Result := FSections[0].CurrencySymbol else Result := ''; end; {@@ Creates a string which summarizes the date/time formats in the given section. The string contains a 'y' for a nftYear, a 'm' for a nftMonth, a 'd' for a nftDay, a 'h' for a nftHour, a 'n' for a nftMinute, a 's' for a nftSeconds, and a 'z' for a nftMilliseconds token. The order is retained. Needed for biff2 } function TsNumFormatParser.GetDateTimeCode(ASection: Integer): String; var i: Integer; begin Result := ''; if ASection < Length(FSections) then with FSections[ASection] do begin i := 0; while i < Length(Elements) do begin case Elements[i].Token of nftYear : Result := Result + 'y'; nftMonth : Result := Result + 'm'; nftDay : Result := Result + 'd'; nftHour : Result := Result + 'h'; nftMinute : Result := Result + 'n'; nftSecond : Result := Result + 's'; nftMilliSeconds: Result := Result + 'z'; end; inc(i); end; end; end; {@@ Extracts the number of decimals from the sections. Since they are needed only for default formats having only a single section, only the first section is considered. In case of currency/accounting having two or three sections, it is assumed that all sections have the same decimals count, otherwise it would not be a standard format. } function TsNumFormatParser.GetDecimals: Byte; begin if Length(FSections) > 0 then Result := FSections[0].Decimals else Result := 0; end; function TsNumFormatParser.GetFracDenominator: Integer; begin if Length(FSections) > 0 then Result := FSections[0].FracDenominator else Result := 0; end; function TsNumFormatParser.GetFracInt: Integer; begin if Length(FSections) > 0 then Result := FSections[0].FracInt else Result := 0; end; function TsNumFormatParser.GetFracNumerator: Integer; begin if Length(FSections) > 0 then Result := FSections[0].FracNumerator else Result := 0; end; {@@ Tries to extract a common built-in number format from the sections. If there are multiple sections, it is always a custom format, except for Currency and Accounting. } function TsNumFormatParser.GetNumFormat: TsNumberFormat; begin if Length(FSections) = 0 then result := nfGeneral else begin Result := FSections[0].NumFormat; if (Result = nfCurrency) then begin if Length(FSections) = 2 then begin Result := FSections[1].NumFormat; if FSections[1].CurrencySymbol <> FSections[0].CurrencySymbol then begin Result := nfCustom; exit; end; if (FSections[0].NumFormat in [nfCurrency, nfCurrencyRed]) and (FSections[1].NumFormat in [nfCurrency, nfCurrencyRed]) then exit; end else if Length(FSections) = 3 then begin Result := FSections[1].NumFormat; if (FSections[0].CurrencySymbol <> FSections[1].CurrencySymbol) or (FSections[1].CurrencySymbol <> FSections[2].CurrencySymbol) then begin Result := nfCustom; exit; end; if (FSections[0].NumFormat in [nfCurrency, nfCurrencyRed]) and (FSections[1].NumFormat in [nfCurrency, nfCurrencyRed]) and (FSections[2].NumFormat in [nfCurrency, nfCurrencyRed]) then exit; end; Result := nfCustom; exit; end; if Length(FSections) > 1 then Result := nfCustom; end; end; function TsNumFormatParser.GetParsedSectionCount: Integer; begin Result := Length(FSections); end; function TsNumFormatParser.GetParsedSections(AIndex: Integer): TsNumFormatSection; begin Result := FSections[AIndex]; end; { function TsNumFormatParser.GetTokenIntValueAt(AToken: TsNumFormatToken; ASection, AIndex: Integer): Integer; begin if IsTokenAt(AToken, ASection, AIndex) then Result := FSections[ASection].Elements[AIndex].IntValue else Result := -1; end; } { Returns true if the format elements contain at least one date/time token } function TsNumFormatParser.IsDateTimeFormat: Boolean; var section: TsNumFormatSection; begin for section in FSections do if section.Kind * [nfkDate, nfkTime] <> [] then begin Result := true; exit; end; Result := false; end; { function TsNumFormatParser.IsNumberAt(ASection, AIndex: Integer; out ANumFormat: TsNumberFormat; out ADecimals: Byte; out ANextIndex: Integer): Boolean; var token: TsNumFormatToken; begin if (ASection > High(FSections)) or (AIndex > High(FSections[ASection].Elements)) then begin Result := false; ANextIndex := AIndex; exit; end; Result := true; ANumFormat := nfCustom; ADecimals := 0; token := FSections[ASection].Elements[AIndex].Token; if token in [nftFracNumOptDigit, nftFracNumZeroDigit, nftFracNumSpaceDigit, nftFracDenomOptDigit, nftFracDenomZeroDigit, nftFracDenomSpaceDigit] then begin ANumFormat := nfFraction; ANextIndex := AIndex + 1; exit; end; if (token = nftIntTh) and (FSections[ASection].Elements[AIndex].IntValue = 1) then // '#,##0' ANumFormat := nfFixedTh else if (token = nftIntZeroDigit) and (FSections[ASection].Elements[AIndex].IntValue = 1) then // '0' ANumFormat := nfFixed; if (token in [nftIntTh, nftIntZeroDigit, nftIntOptDigit, nftIntSpaceDigit]) then begin if IsTokenAt(nftDecSep, ASection, AIndex+1) then begin if AIndex + 2 < Length(FSections[ASection].Elements) then begin token := FSections[ASection].Elements[AIndex+2].Token; if (token in [nftZeroDecs, nftOptDecs, nftSpaceDecs]) then begin ANextIndex := AIndex + 3; ADecimals := FSections[ASection].Elements[AIndex+2].IntValue; if (token <> nftZeroDecs) then ANumFormat := nfCustom; exit; end; end; end else if IsTokenAt(nftSpace, ASection, AIndex+1) then begin ANumFormat := nfFraction; ANextIndex := AIndex + 1; exit; end else begin ANextIndex := AIndex + 1; exit; end; end; ANextIndex := AIndex; Result := false; end; function TsNumFormatParser.IsTextAt(AText: String; ASection, AIndex: Integer): Boolean; begin Result := IsTokenAt(nftText, ASection, AIndex) and (FSections[ASection].Elements[AIndex].TextValue = AText); end; } {@@ Returns @true if the format elements contain only time, no date tokens. } function TsNumFormatParser.IsTimeFormat: Boolean; var section: TsNumFormatSection; begin for section in FSections do if (nfkTime in section.Kind) then begin Result := true; exit; end; Result := false; end; { function TsNumFormatParser.IsTokenAt(AToken: TsNumFormatToken; ASection, AIndex: Integer): Boolean; begin Result := (ASection < Length(FSections)) and (AIndex < Length(FSections[ASection].Elements)) and (FSections[ASection].Elements[AIndex].Token = AToken); end; } {@@ Limits the decimals to 0 or 2, as required by Excel2. } procedure TsNumFormatParser.LimitDecimals; var i, j: Integer; begin for j:=0 to High(FSections) do for i:=0 to High(FSections[j].Elements) do if FSections[j].Elements[i].Token = nftZeroDecs then if FSections[j].Elements[i].IntValue > 0 then FSections[j].Elements[i].IntValue := 2; end; function TsNumFormatParser.NextToken: Char; begin if FCurrent < FEnd then begin inc(FCurrent); Result := FCurrent^; end else Result := #0; end; function TsNumFormatParser.PrevToken: Char; begin if FCurrent > nil then begin dec(FCurrent); Result := FCurrent^; end else Result := #0; end; procedure TsNumFormatParser.Parse(const AFormatString: String); begin FStatus := psOK; AddSection; if (AFormatString = '') then begin AddElement(nftGeneral); exit; end; FStart := @AFormatString[1]; FEnd := FStart + Length(AFormatString); FCurrent := FStart; FToken := FCurrent^; while (FCurrent < FEnd) and (FStatus = psOK) do begin case FToken of 'G','g': ScanGeneral; '[': ScanBrackets; '"': ScanQuotedText; ':': AddElement(nftDateTimeSep, ':'); ';': AddSection; else ScanFormat; end; FToken := NextToken; end; end; {@@ Scans an AM/PM sequence (or AMPM or A/P). At exit, cursor is a next character } procedure TsNumFormatParser.ScanAMPM; var s: String; el: Integer; begin s := ''; while (FCurrent < FEnd) do begin if (FToken in ['A', 'a', 'P', 'p', 'm', 'M', '/']) then s := s + FToken else break; FToken := NextToken; end; if s <> '' then begin AddElement(nftAMPM, s); // Tag the hour element for AM/PM format needed el := High(FSections[FCurrSection].Elements)-1; for el := High(FSections[FCurrSection].Elements)-1 downto 0 do if FSections[FCurrSection].Elements[el].Token = nftHour then begin FSections[FCurrSection].Elements[el].TextValue := 'AM'; break; end; end; end; {@@ Counts the number of characters equal to ATestChar. Stops at the next different character. This is also where the cursor is at exit. } procedure TsNumFormatParser.ScanAndCount(ATestChar: Char; out ACount: Integer); begin ACount := 0; if FToken <> ATestChar then exit; repeat inc(ACount); FToken := NextToken; until (FToken <> ATestChar) or (FCurrent >= FEnd); end; {@@ Extracts the text between square brackets. This can be - a time duration like [hh] - a condition, like [>= 2.0] - a currency symbol like [$€-409] - a color like [red] or [color25] The procedure is left with the cursor at ']' } procedure TsNumFormatParser.ScanBrackets; var s: String; n: Integer; prevtok: Char; isText: Boolean; begin s := ''; isText := false; FToken := NextToken; // Cursor was at '[' while (FCurrent < FEnd) and (FStatus = psOK) do begin case FToken of 'h', 'H', 'm', 'M', 'n', 'N', 's', 'S': if isText then s := s + FToken else begin prevtok := FToken; ScanAndCount(FToken, n); if (FToken in [']', #0]) then begin case prevtok of 'h', 'H' : AddElement(nftHour, -n); 'm', 'M', 'n', 'N': AddElement(nftMinute, -n); 's', 'S' : AddElement(nftSecond, -n); end; break; end else FStatus := psErrUnknownInfoInBrackets; end; '<', '>', '=': begin ScanCondition(FToken); if FToken = ']' then break else FStatus := psErrUnknownInfoInBrackets; end; '$': begin ScanCurrSymbol; if FToken = ']' then break else FStatus := psErrUnknownInfoInBrackets; end; ']': begin AnalyzeColor(s); break; end; else s := s + FToken; isText := true; end; FToken := NextToken; end; end; {@@ Scans a condition like [>=2.0]. Starts after the "[" and ends before at "]". Returns first character after the number (spaces allowed). } procedure TsNumFormatParser.ScanCondition(AFirstChar: Char); var s: String; // op: TsCompareOperation; value: Double; res: Integer; begin s := AFirstChar; FToken := NextToken; if FToken in ['>', '<', '='] then s := s + FToken else FToken := PrevToken; { if s = '=' then op := coEqual else if s = '<>' then op := coNotEqual else if s = '<' then op := coLess else if s = '>' then op := coGreater else if s = '<=' then op := coLessEqual else if s = '>=' then op := coGreaterEqual else begin FStatus := psErrUnknownInfoInBrackets; FToken := #0; exit; end; } while (FToken = ' ') and (FCurrent < FEnd) do FToken := NextToken; if FCurrent >= FEnd then begin FStatus := psErrUnknownInfoInBrackets; FToken := #0; exit; end; s := FToken; while (FCurrent < FEnd) and (FToken in ['+', '-', '.', '0'..'9']) do begin FToken := NextToken; s := s + FToken; end; val(s, value, res); if res <> 0 then begin FStatus := psErrUnknownInfoInBrackets; FToken := #0; exit; end; while (FCurrent < FEnd) and (FToken = ' ') do FToken := NextToken; if FToken = ']' then AddElement(nftCompareOp, value) else begin FStatus := psErrUnknownInfoInBrackets; FToken := #0; end; end; {@@ Scans to end of a symbol like [$EUR-409], starting after the $ and ending at the "]". After the "$" follows the currency symbol, after the "-" country information } procedure TsNumFormatParser.ScanCurrSymbol; var s: String; begin s := ''; FToken := NextToken; while (FCurrent < FEnd) and not (FToken in ['-', ']']) do begin s := s + FToken; FToken := NextToken; end; if s <> '' then AddElement(nftCurrSymbol, s); if FToken <> ']' then begin FToken := NextToken; while (FCurrent < FEnd) and (FToken <> ']') do begin s := s + FToken; FToken := NextToken; end; if s <> '' then AddElement(nftCountry, s); end; end; {@@ Scans a date/time format. Procedure is left with the cursor at the last char of the date/time format. } procedure TsNumFormatParser.ScanDateTime; var n: Integer; token: Char; begin while (FCurrent < FEnd) and (FStatus = psOK) do begin case FToken of '\': // means that the next character is taken literally begin FToken := NextToken; // skip the "\"... AddElement(nftEscaped, FToken); FToken := NextToken; end; 'Y', 'y': begin ScanAndCount(FToken, n); AddElement(nftYear, n); end; 'm', 'M', 'n', 'N': begin token := FToken; ScanAndCount(FToken, n); AddElement(nftMonthMinute, n, token); // Decide on minute or month later end; 'D', 'd': begin ScanAndCount(FToken, n); AddElement(nftDay, n); end; 'H', 'h': begin ScanAndCount(FToken, n); AddElement(nftHour, n); end; 'S', 's': begin ScanAndCount(FToken, n); AddElement(nftSecond, n); end; '/', ':': begin AddElement(nftDateTimeSep, FToken); FToken := NextToken; end; '.': begin { AddElement(nftDecSep, FToken); FToken := NextToken; if FToken in ['z', 'Z', '0'] then begin ScanAndCount(FToken, n); AddElement(nftMilliseconds, n); end; } token := NextToken; if token in ['z', 'Z', '0'] then begin AddElement(nftDecSep, FToken); FToken := NextToken; if FToken in ['z', 'Z', '0'] then ScanAndCount(FToken, n) else n := 0; AddElement(nftMilliseconds, n+1); end else begin AddElement(nftDateTimeSep, FToken); FToken := token; end; end; '[': begin ScanBrackets; FToken := NextToken; end; 'A', 'a': ScanAMPM; ',', '-': begin AddElement(nftText, FToken); FToken := NextToken; end else // char pointer must be at end of date/time mask. FToken := PrevToken; Exit; end; end; end; procedure TsNumFormatParser.ScanFormat; var done: Boolean; n: Integer; uch: Cardinal; begin done := false; while (FCurrent < FEnd) and (FStatus = psOK) and (not done) do begin case FToken of '\': // Excel: add next character literally begin FToken := NextToken; AddElement(nftText, FToken); end; '*': // Excel: repeat next character to fill cell. For accounting format. begin FToken := NextToken; AddElement(nftRepeat, FToken); end; '_': // Excel: Leave width of next character empty begin FToken := NextToken; uch := UTF8CodepointToUnicode(FCurrent, n); // wp: Why Unicode ??? if n > 1 then begin AddElement(nftEmptyCharWidth, UnicodeToUTF8(uch)); inc(FCurrent, n-1); FToken := NextToken; Continue; end else AddElement(nftEmptyCharWidth, FToken); end; '@': // Excel: Indicates text format begin AddElement(nftTextFormat, FToken); end; '"': ScanQuotedText; '(', ')': AddElement(nftSignBracket, FToken); '0', '#', '?', '.', ',', '-': ScanNumber; 'y', 'Y', 'm', 'M', 'd', 'D', 'h', 'H', 'N', 'n', 's': ScanDateTime; '[': ScanBrackets; '%': AddElement(nftPercent, FToken); ' ': AddElement(nftSpace, FToken); 'A', 'a': begin ScanAMPM; FToken := PrevToken; end; 'G', 'g': ScanGeneral; ';': // End of the section. Important: Cursor must stay on ';' begin AddSection; Exit; end; else uch := UTF8CodepointToUnicode(FCurrent, n); if n > 1 then begin AddElement(nftText, UnicodeToUTF8(uch)); inc(FCurrent, n-1); end else AddElement(nftText, FToken); end; FToken := NextToken; end; end; {@@ Scans for the word "General", it may be used like other tokens } procedure TsNumFormatParser.ScanGeneral; begin FStatus := psErrGeneralExpected; FToken := NextToken; if not (FToken in ['e', 'E']) then exit; FToken := NextToken; if not (FToken in ['n', 'N']) then exit; FToken := NextToken; if not (FToken in ['e', 'E']) then exit; FToken := NextToken; if not (FToken in ['r', 'R']) then exit; FToken := NextToken; if not (FToken in ['a', 'A']) then exit; FToken := NextToken; if not (FToken in ['l', 'L']) then exit; AddElement(nftGeneral); FStatus := psOK; end; {@@ Scans a floating point format. Procedure is left with the cursor at the last character of the format. } procedure TsNumFormatParser.ScanNumber; var hasDecSep: Boolean; isFrac: Boolean; n, m: Integer; el: Integer; savedCurrent: PChar; thSep: Char; begin hasDecSep := false; isFrac := false; thSep := ','; while (FCurrent < FEnd) and (FStatus = psOK) do begin case FToken of ',': AddElement(nftThSep, ','); '.': begin AddElement(nftDecSep, '.'); hasDecSep := true; end; '#': begin ScanAndCount('#', n); savedCurrent := FCurrent; if not (hasDecSep or isFrac) and (n = 1) and (FToken = thSep) then begin m := 0; FToken := NextToken; ScanAndCount('#', n); case n of 0: begin ScanAndCount('0', n); ScanAndCount(thSep, m); FToken := prevToken; if n = 3 then AddElement(nftIntTh, 3, ',') else FCurrent := savedCurrent; end; 1: begin ScanAndCount('0', n); ScanAndCount(thSep, m); FToken := prevToken; if n = 2 then AddElement(nftIntTh, 2, ',') else FCurrent := savedCurrent; end; 2: begin ScanAndCount('0', n); ScanAndCount(thSep, m); FToken := prevToken; if (n = 1) then AddElement(nftIntTh, 1, ',') else FCurrent := savedCurrent; end; end; if m > 0 then AddElement(nftFactor, m, thSep); end else begin FToken := PrevToken; if isFrac then AddElement(nftFracDenomOptDigit, n) else if hasDecSep then AddElement(nftOptDecs, n) else AddElement(nftIntOptDigit, n); end; end; '0': begin ScanAndCount('0', n); ScanAndCount(thSep, m); FToken := PrevToken; if hasDecSep then AddElement(nftZeroDecs, n) else if isFrac then AddElement(nftFracDenomZeroDigit, n) else AddElement(nftIntZeroDigit, n); if m > 0 then AddElement(nftFactor, m, thSep); end; '1'..'9': begin if isFrac then begin n := 0; while (FToken in ['1'..'9','0']) do begin n := n*10 + StrToInt(FToken); FToken := nextToken; end; AddElement(nftFracDenom, n); end else AddElement(nftText, FToken); end; '?': begin ScanAndCount('?', n); FToken := PrevToken; if hasDecSep then AddElement(nftSpaceDecs, n) else if isFrac then AddElement(nftFracDenomSpaceDigit, n) else AddElement(nftIntSpaceDigit, n); end; 'E', 'e': begin AddElement(nftExpChar, FToken); FToken := NextToken; if FToken in ['+', '-'] then AddElement(nftExpSign, FToken); FToken := NextToken; if FToken = '0' then begin ScanAndCount('0', n); FToken := PrevToken; AddElement(nftExpDigits, n); end; end; '+', '-': AddElement(nftSign, FToken); '%': AddElement(nftPercent, FToken); '/': begin isFrac := true; AddElement(nftFracSymbol, FToken); // go back and replace correct token for numerator el := High(FSections[FCurrSection].Elements); while el > 0 do begin dec(el); case FSections[FCurrSection].Elements[el].Token of nftIntOptDigit: begin FSections[FCurrSection].Elements[el].Token := nftFracNumOptDigit; break; end; nftIntSpaceDigit: begin FSections[FCurrSection].Elements[el].Token := nftFracNumSpaceDigit; break; end; nftIntZeroDigit: begin FSections[FCurrSection].Elements[el].Token := nftFracNumZeroDigit; break; end; end; end; end; 'G', 'g': ScanGeneral; else FToken := PrevToken; Exit; end; FToken := NextToken; end; end; {@@ Scans a text in quotation marks. Tries to interpret the text as a currency symbol (--> AnalyzeText). The procedure is entered and left with the cursor at a quotation mark. } procedure TsNumFormatParser.ScanQuotedText; var s: String; begin s := ''; FToken := NextToken; // Cursor war at '"' while (FCurrent < FEnd) and (FStatus = psOK) do begin if FToken = '"' then begin if AnalyzeCurrency(s) then AddElement(nftCurrSymbol, s) else AddElement(nftText, s); exit; end else begin s := s + FToken; FToken := NextToken; end; end; // When the procedure gets here the final quotation mark is missing FStatus := psErrQuoteExpected; end; procedure TsNumFormatParser.SetDecimals(AValue: Byte); var i, j, n: Integer; foundDecs: Boolean; begin foundDecs := false; for j := 0 to High(FSections) do begin n := Length(FSections[j].Elements); i := n-1; while (i > -1) do begin case FSections[j].Elements[i].Token of nftDecSep: // this happens, e.g., for "0.E+00" if (AValue > 0) and not foundDecs then begin InsertElement(j, i, nftZeroDecs, AValue); break; end; nftIntOptDigit, nftIntZeroDigit, nftIntSpaceDigit, nftIntTh: // no decimals so far --> add decimal separator and decimals element if (AValue > 0) then begin // Don't use "AddElements" because nfCurrency etc have elements after the number. InsertElement(j, i, nftDecSep, '.'); InsertElement(j, i+1, nftZeroDecs, AValue); break; end; nftZeroDecs, nftOptDecs, nftSpaceDecs: begin foundDecs := true; if AValue > 0 then begin // decimals are already used, just replace value of decimal places FSections[j].Elements[i].IntValue := AValue; FSections[j].Elements[i].Token := nftZeroDecs; break; end else begin // No decimals any more: delete decs and decsep elements DeleteElement(j, i); DeleteElement(j, i-1); break; end; end; end; dec(i); end; end; end; end. doublecmd-1.1.30/src/fpscommon.pas0000644000175000001440000004750015104114162016070 0ustar alexxusersunit fpsCommon; {$mode objfpc}{$H+} interface uses Classes, SysUtils; const {@@ These are some basic rgb color volues. FPSpreadsheet will support only those built-in color constants originating in the EGA palette. } {@@ rgb value of @bold(black) color, BIFF2 palette index 0, BIFF8 index 8} scBlack = $00000000; {@@ rgb value of @bold(white) color, BIFF2 palette index 1, BIFF8 index 9 } scWhite = $00FFFFFF; {@@ rgb value of @bold(red) color, BIFF2 palette index 2, BIFF8 index 10 } scRed = $000000FF; {@@ rgb value of @bold(green) color, BIFF2 palette index 3, BIFF8 index 11 } scGreen = $0000FF00; {@@ rgb value of @bold(blue) color, BIFF2 palette index 4, BIFF8 indexes 12 and 39} scBlue = $00FF0000; {@@ rgb value of @bold(yellow) color, BIFF2 palette index 5, BIFF8 indexes 13 and 34} scYellow = $0000FFFF; {@@ rgb value of @bold(magenta) color, BIFF2 palette index 6, BIFF8 index 14 and 33} scMagenta = $00FF00FF; {@@ rgb value of @bold(cyan) color, BIFF2 palette index 7, BIFF8 indexes 15} scCyan = $00FFFF00; type {@@ Colors in fpspreadsheet are given as rgb values in little-endian notation (i.e. "r" is the low-value byte). The highest-value byte, if not zero, indicates special colors. @note(This byte order in TsColor is opposite to that in HTML colors.) } TsColor = DWord; {@@ Builtin number formats. Only uses a subset of the default formats, enough to be able to read/write date/time values. nfCustom allows to apply a format string directly. } TsNumberFormat = ( // general-purpose for all numbers nfGeneral, // numbers nfFixed, nfFixedTh, nfExp, nfPercentage, nfFraction, // currency nfCurrency, nfCurrencyRed, // dates and times nfShortDateTime, nfShortDate, nfLongDate, nfShortTime, nfLongTime, nfShortTimeAM, nfLongTimeAM, nfDayMonth, nfMonthYear, nfTimeInterval, // text nfText, // other (format string goes directly into the file) nfCustom); {@@ Ancestor of the fpSpreadsheet exceptions } EFpSpreadsheet = class(Exception); resourcestring // Format rsAmbiguousDecThouSeparator = 'Assuming usage of decimal separator in "%s".'; function Round(AValue: Double): Int64; procedure FloatToFraction(AValue: Double; AMaxDenominator: Int64; out ANumerator, ADenominator: Int64); function TryStrToFloatAuto(AText: String; out ANumber: Double; out ADecimalSeparator, AThousandSeparator: Char; out AWarning: String): Boolean; procedure AddBuiltinBiffFormats(AList: TStringList; AFormatSettings: TFormatSettings; ALastIndex: Integer); procedure RegisterCurrency(ACurrencySymbol: String); procedure RegisterCurrencies(AList: TStrings; AReplace: Boolean); procedure UnregisterCurrency(ACurrencySymbol: String); function CurrencyRegistered(ACurrencySymbol: String): Boolean; procedure GetRegisteredCurrencies(AList: TStrings); function IsNegative(var AText: String): Boolean; function RemoveCurrencySymbol(ACurrencySymbol: String; var AText: String): Boolean; function TryStrToCurrency(AText: String; out ANumber: Double; out ACurrencySymbol:String; const AFormatSettings: TFormatSettings): boolean; implementation uses Math, fpsNumFormat; {@@ ---------------------------------------------------------------------------- Special rounding function which avoids banker's rounding -------------------------------------------------------------------------------} function Round(AValue: Double): Int64; begin if AValue > 0 then Result := trunc(AValue + 0.5) else Result := trunc(AValue - 0.5); end; {@@ ---------------------------------------------------------------------------- Approximates a floating point value as a fraction and returns the values of numerator and denominator. @param AValue Floating point value to be analyzed @param AMaxDenominator Maximum value of the denominator allowed @param ANumerator (out) Numerator of the best approximating fraction @param ADenominator (out) Denominator of the best approximating fraction -------------------------------------------------------------------------------} procedure FloatToFraction(AValue: Double; AMaxDenominator: Int64; out ANumerator, ADenominator: Int64); // Uses method of continued fractions, adapted version from a function in // Bart Broersma's fractions.pp unit: // http://svn.code.sf.net/p/flyingsheep/code/trunk/ConsoleProjecten/fractions/ const MaxInt64 = High(Int64); MinInt64 = Low(Int64); var H1, H2, K1, K2, A, NewA, tmp, prevH1, prevK1: Int64; B, test, diff, prevdiff: Double; PendingOverflow: Boolean; i: Integer = 0; begin if (AValue > MaxInt64) or (AValue < MinInt64) then raise EFPSpreadsheet.Create('Range error'); if abs(AValue) < 0.5 / AMaxDenominator then begin ANumerator := 0; ADenominator := AMaxDenominator; exit; end; H1 := 1; H2 := 0; K1 := 0; K2 := 1; B := AValue; NewA := Round(Floor(B)); prevH1 := H1; prevK1 := K1; prevdiff := 1E308; repeat inc(i); A := NewA; tmp := H1; H1 := A * H1 + H2; H2 := tmp; tmp := K1; K1 := A * K1 + K2; K2 := tmp; test := H1/K1; diff := test - AValue; { Use the previous result if the denominator becomes larger than the allowed value, or if the difference becomes worse because the "best" result has been missed due to rounding error - this is more stable than using a predefined precision in comparing diff with zero. } if (abs(K1) >= AMaxDenominator) or (abs(diff) > abs(prevdiff)) then begin H1 := prevH1; K1 := prevK1; break; end; if (Abs(B - A) < 1E-30) then B := 1E30 //happens when H1/K1 exactly matches Value else B := 1 / (B - A); PendingOverFlow := (B * H1 + H2 > MaxInt64) or (B * K1 + K2 > MaxInt64) or (B > MaxInt64); if not PendingOverflow then NewA := Round(Floor(B)); prevH1 := H1; prevK1 := K1; prevdiff := diff; until PendingOverflow; ANumerator := H1; ADenominator := K1; end; {@@ ---------------------------------------------------------------------------- Converts a string to a floating point number. No assumption on decimal and thousand separator are made. Is needed for reading CSV files. -------------------------------------------------------------------------------} function TryStrToFloatAuto(AText: String; out ANumber: Double; out ADecimalSeparator, AThousandSeparator: Char; out AWarning: String): Boolean; var i: Integer; testSep: Char; testSepPos: Integer; lastDigitPos: Integer; isPercent: Boolean; fs: TFormatSettings; done: Boolean; begin Result := false; AWarning := ''; ADecimalSeparator := #0; AThousandSeparator := #0; if AText = '' then exit; fs := DefaultFormatSettings; // We scan the string starting from its end. If we find a point or a comma, // we have a candidate for the decimal or thousand separator. If we find // the same character again it was a thousand separator, if not it was // a decimal separator. // There is one amgiguity: Using a thousand separator for number < 1.000.000, // but no decimal separator misinterprets the thousand separator as a // decimal separator. done := false; // Indicates that both decimal and thousand separators are found testSep := #0; // Separator candidate to be tested testSepPos := 0; // Position of this separator candidate in the string lastDigitPos := 0; // Position of the last numerical digit isPercent := false; // Flag for percentage format i := Length(AText); // Start at end... while i >= 1 do // ...and search towards start begin case AText[i] of '0'..'9': if (lastDigitPos = 0) and (AText[i] in ['0'..'9']) then lastDigitPos := i; 'e', 'E': ; '%': begin isPercent := true; // There may be spaces before the % sign which we don't want dec(i); while (i >= 1) do if AText[i] = ' ' then dec(i) else begin inc(i); break; end; end; '+', '-': ; '.', ',': begin if testSep = #0 then begin testSep := AText[i]; testSepPos := i; end; // This is the right-most separator candidate in the text // It can be a decimal or a thousand separator. // Therefore, we continue searching from here. dec(i); while i >= 1 do begin if not (AText[i] in ['0'..'9', '+', '-', '.', ',']) then exit; // If we find the testSep character again it must be a thousand separator, // and there are no decimals. if (AText[i] = testSep) then begin // ... but only if there are 3 numerical digits in between if (testSepPos - i = 4) then begin fs.ThousandSeparator := testSep; // The decimal separator is the "other" character. if testSep = '.' then fs.DecimalSeparator := ',' else fs.DecimalSeparator := '.'; AThousandSeparator := fs.ThousandSeparator; ADecimalSeparator := #0; // this indicates that there are no decimals done := true; i := 0; end else begin Result := false; exit; end; end else // If we find the "other" separator character, then testSep was a // decimal separator and the current character is a thousand separator. // But there must be 3 digits in between. if AText[i] in ['.', ','] then begin if testSepPos - i <> 4 then // no 3 digits in between --> no number, maybe a date. exit; fs.DecimalSeparator := testSep; fs.ThousandSeparator := AText[i]; ADecimalSeparator := fs.DecimalSeparator; AThousandSeparator := fs.ThousandSeparator; done := true; i := 0; end; dec(i); end; end; else exit; // Non-numeric character found, no need to continue end; dec(i); end; // Only one separator candicate found, we assume it is a decimal separator if (testSep <> #0) and not done then begin // Warning in case of ambiguous detection of separator. If only one separator // type is found and it is at the third position from the string's end it // might by a thousand separator or a decimal separator. We assume the // latter case, but create a warning. if (lastDigitPos - testSepPos = 3) and not isPercent then AWarning := Format(rsAmbiguousDecThouSeparator, [AText]); fs.DecimalSeparator := testSep; ADecimalSeparator := fs.DecimalSeparator; // Make sure that the thousand separator is different from the decimal sep. if testSep = '.' then fs.ThousandSeparator := ',' else fs.ThousandSeparator := '.'; end; // Delete all thousand separators from the string - StrToFloat does not like them... AText := StringReplace(AText, fs.ThousandSeparator, '', [rfReplaceAll]); // Is the last character a percent sign? if isPercent then while (Length(AText) > 0) and (AText[Length(AText)] in ['%', ' ']) do Delete(AText, Length(AText), 1); // Try string-to-number conversion Result := TryStrToFloat(AText, ANumber, fs); // If successful ... if Result then begin // ... take care of the percentage sign if isPercent then ANumber := ANumber * 0.01; end; end; {@@ ---------------------------------------------------------------------------- These are the built-in number formats as expected in the biff spreadsheet file. In BIFF5+ they are not written to file but they are used for lookup of the number format that Excel used. -------------------------------------------------------------------------------} procedure AddBuiltinBiffFormats(AList: TStringList; AFormatSettings: TFormatSettings; ALastIndex: Integer); var fs: TFormatSettings absolute AFormatSettings; cs: String; i: Integer; begin cs := fs.CurrencyString; AList.Clear; AList.Add(''); // 0 AList.Add('0'); // 1 AList.Add('0.00'); // 2 AList.Add('#,##0'); // 3 AList.Add('#,##0.00'); // 4 AList.Add(BuildCurrencyFormatString(nfCurrency, fs, 0, fs.CurrencyFormat, fs.NegCurrFormat, cs)); // 5 AList.Add(BuildCurrencyFormatString(nfCurrencyRed, fs, 0, fs.CurrencyFormat, fs.NegCurrFormat, cs)); // 6 AList.Add(BuildCurrencyFormatString(nfCurrency, fs, 2, fs.CurrencyFormat, fs.NegCurrFormat, cs)); // 7 AList.Add(BuildCurrencyFormatString(nfCurrencyRed, fs, 2, fs.CurrencyFormat, fs.NegCurrFormat, cs)); // 8 AList.Add('0%'); // 9 AList.Add('0.00%'); // 10 AList.Add('0.00E+00'); // 11 AList.Add('# ?/?'); // 12 AList.Add('# ??/??'); // 13 AList.Add(BuildDateTimeFormatString(nfShortDate, fs)); // 14 AList.Add(BuildDateTimeFormatString(nfLongdate, fs)); // 15 AList.Add(BuildDateTimeFormatString(nfDayMonth, fs)); // 16: 'd/mmm' AList.Add(BuildDateTimeFormatString(nfMonthYear, fs)); // 17: 'mmm/yy' AList.Add(BuildDateTimeFormatString(nfShortTimeAM, fs)); // 18 AList.Add(BuildDateTimeFormatString(nfLongTimeAM, fs)); // 19 AList.Add(BuildDateTimeFormatString(nfShortTime, fs)); // 20 AList.Add(BuildDateTimeFormatString(nfLongTime, fs)); // 21 AList.Add(BuildDateTimeFormatString(nfShortDateTime, fs)); // 22 for i:=23 to 36 do AList.Add(''); // not supported AList.Add('_(#,##0_);(#,##0)'); // 37 AList.Add('_(#,##0_);[Red](#,##0)'); // 38 AList.Add('_(#,##0.00_);(#,##0.00)'); // 39 AList.Add('_(#,##0.00_);[Red](#,##0.00)'); // 40 AList.Add('_("'+cs+'"* #,##0_);_("'+cs+'"* (#,##0);_("'+cs+'"* "-"_);_(@_)'); // 41 AList.Add('_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'); // 42 AList.Add('_("'+cs+'"* #,##0.00_);_("'+cs+'"* (#,##0.00);_("'+cs+'"* "-"??_);_(@_)'); // 43 AList.Add('_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'); // 44 AList.Add('nn:ss'); // 45 AList.Add('[h]:nn:ss'); // 46 AList.Add('nn:ss.z'); // 47 AList.Add('##0.0E+00'); // 48 AList.Add('@'); // 49 "Text" format for i:=50 to ALastIndex do AList.Add(''); // not supported/used end; var CurrencyList: TStrings = nil; {@@ ---------------------------------------------------------------------------- Registers a currency symbol UTF8 string for usage by fpspreadsheet Currency symbols are the key for detection of currency values. In order to reckognize strings are currency symbols they have to be registered in the internal CurrencyList. Registration occurs automatically for USD, "$", the currencystring defined in the DefaultFormatSettings and for the currency symbols used explicitly when calling WriteCurrency or WriteNumerFormat. -------------------------------------------------------------------------------} procedure RegisterCurrency(ACurrencySymbol: String); begin if not CurrencyRegistered(ACurrencySymbol) and (ACurrencySymbol <> '') then CurrencyList.Add(ACurrencySymbol); end; {@@ RegisterCurrencies registers the currency strings contained in the string list If AReplace is true, the list replaces the currently registered list. -------------------------------------------------------------------------------} procedure RegisterCurrencies(AList: TStrings; AReplace: Boolean); var i: Integer; begin if AList = nil then exit; if AReplace then CurrencyList.Clear; for i:=0 to AList.Count-1 do RegisterCurrency(AList[i]); end; {@@ ---------------------------------------------------------------------------- Removes registration of a currency symbol string for usage by fpspreadsheet -------------------------------------------------------------------------------} procedure UnregisterCurrency(ACurrencySymbol: String); var i: Integer; begin i := CurrencyList.IndexOf(ACurrencySymbol); if i <> -1 then CurrencyList.Delete(i); end; {@@ ---------------------------------------------------------------------------- Checks whether a string is registered as valid currency symbol string -------------------------------------------------------------------------------} function CurrencyRegistered(ACurrencySymbol: String): Boolean; begin Result := CurrencyList.IndexOf(ACurrencySymbol) <> -1; end; {@@ ---------------------------------------------------------------------------- Writes all registered currency symbols to a string list -------------------------------------------------------------------------------} procedure GetRegisteredCurrencies(AList: TStrings); begin AList.Clear; AList.Assign(CurrencyList); end; {@@ ---------------------------------------------------------------------------- Checks whether the given number string is a negative value. In case of currency value, this can be indicated by brackets, or a minus sign at string start or end. -------------------------------------------------------------------------------} function IsNegative(var AText: String): Boolean; begin Result := false; if AText = '' then exit; if (AText[1] = '(') and (AText[Length(AText)] = ')') then begin Result := true; Delete(AText, 1, 1); Delete(AText, Length(AText), 1); AText := Trim(AText); end else if (AText[1] = '-') then begin Result := true; Delete(AText, 1, 1); AText := Trim(AText); end else if (AText[Length(AText)] = '-') then begin Result := true; Delete(AText, Length(AText), 1); AText := Trim(AText); end; end; {@@ ---------------------------------------------------------------------------- Checks wheter a specified currency symbol is contained in a string, removes the currency symbol and returns the remaining string. -------------------------------------------------------------------------------} function RemoveCurrencySymbol(ACurrencySymbol: String; var AText: String): Boolean; var p: Integer; begin p := pos(ACurrencySymbol, AText); if p > 0 then begin Delete(AText, p, Length(ACurrencySymbol)); AText := Trim(AText); Result := true; end else Result := false; end; {@@ ---------------------------------------------------------------------------- Checks whether a string is a number with attached currency symbol. Looks also for negative values in brackets. -------------------------------------------------------------------------------} function TryStrToCurrency(AText: String; out ANumber: Double; out ACurrencySymbol:String; const AFormatSettings: TFormatSettings): boolean; var i: Integer; s: String; isNeg: Boolean; begin Result := false; ANumber := 0.0; ACurrencySymbol := ''; // Check the text for the presence of each known curreny symbol for i:= 0 to CurrencyList.Count-1 do begin // Store string in temporary variable since it will be modified s := AText; // Check for this currency sign being contained in the string, remove it if found. if RemoveCurrencySymbol(CurrencyList[i], s) then begin // Check for negative signs and remove them, but keep this information isNeg := IsNegative(s); // Try to convert remaining string to number if TryStrToFloat(s, ANumber, AFormatSettings) then begin // if successful: take care of negative values if isNeg then ANumber := -ANumber; ACurrencySymbol := CurrencyList[i]; Result := true; exit; end; end; end; end; initialization // Known currency symbols CurrencyList := TStringList.Create; with TStringList(CurrencyList) do begin CaseSensitive := false; Duplicates := dupIgnore; end; RegisterCurrency('USD'); RegisterCurrency('$'); RegisterCurrency(AnsiToUTF8(DefaultFormatSettings.CurrencyString)); finalization FreeAndNil(CurrencyList); end. doublecmd-1.1.30/src/fprintsetup.pas0000644000175000001440000000310615104114162016444 0ustar alexxusersunit fPrintSetup; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, SpinEx, uOSForms; type { TfrmPrintSetup } TfrmPrintSetup = class(TModalForm) ButtonPanel: TButtonPanel; gbMargins: TGroupBox; lblLeft: TLabel; lblRight: TLabel; lblTop: TLabel; lblBottom: TLabel; seeLeft: TFloatSpinEditEx; seeRight: TFloatSpinEditEx; seeTop: TFloatSpinEditEx; seeBottom: TFloatSpinEditEx; procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private public end; implementation {$R *.lfm} uses LCLType, uGlobs; { TfrmPrintSetup } procedure TfrmPrintSetup.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if ModalResult = mrOK then begin gPrintMargins.Left:= Round(seeLeft.Value * 10); gPrintMargins.Top:= Round(seeTop.Value * 10); gPrintMargins.Right:= Round(seeRight.Value * 10); gPrintMargins.Bottom:= Round(seeBottom.Value * 10); end; end; procedure TfrmPrintSetup.FormCreate(Sender: TObject); begin seeLeft.Value:= gPrintMargins.Left / 10; seeTop.Value:= gPrintMargins.Top / 10; seeRight.Value:= gPrintMargins.Right / 10; seeBottom.Value:= gPrintMargins.Bottom / 10; end; procedure TfrmPrintSetup.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then ModalResult:= mrCancel; end; end. doublecmd-1.1.30/src/fprintsetup.lrj0000644000175000001440000000145315104114162016453 0ustar alexxusers{"version":1,"strings":[ {"hash":56375182,"name":"tfrmprintsetup.caption","sourcebytes":[80,114,105,110,116,32,99,111,110,102,105,103,117,114,97,116,105,111,110],"value":"Print configuration"}, {"hash":6979065,"name":"tfrmprintsetup.gbmargins.caption","sourcebytes":[77,97,114,103,105,110,115,32,40,109,109,41],"value":"Margins (mm)"}, {"hash":45268346,"name":"tfrmprintsetup.lblleft.caption","sourcebytes":[38,76,101,102,116,58],"value":"&Left:"}, {"hash":193978202,"name":"tfrmprintsetup.lblright.caption","sourcebytes":[38,82,105,103,104,116,58],"value":"&Right:"}, {"hash":2864698,"name":"tfrmprintsetup.lbltop.caption","sourcebytes":[38,84,111,112,58],"value":"&Top:"}, {"hash":158054570,"name":"tfrmprintsetup.lblbottom.caption","sourcebytes":[38,66,111,116,116,111,109,58],"value":"&Bottom:"} ]} doublecmd-1.1.30/src/fprintsetup.lfm0000644000175000001440000000731115104114162016441 0ustar alexxusersobject frmPrintSetup: TfrmPrintSetup Left = 356 Height = 209 Top = 178 Width = 432 AutoSize = True BorderStyle = bsDialog Caption = 'Print configuration' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ClientHeight = 209 ClientWidth = 432 DesignTimePPI = 120 KeyPreview = True OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnKeyDown = FormKeyDown Position = poOwnerFormCenter LCLVersion = '2.0.2.0' object gbMargins: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 12 Height = 113 Top = 12 Width = 383 AutoSize = True Caption = 'Margins (mm)' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 8 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 88 ClientWidth = 379 ParentFont = False TabOrder = 0 object lblLeft: TLabel Left = 8 Height = 28 Top = 10 Width = 28 Caption = '&Left:' FocusControl = seeLeft ParentColor = False ParentFont = False end object seeLeft: TFloatSpinEditEx Left = 44 Height = 28 Top = 10 Width = 129 MaxLength = 0 ParentFont = False TabOrder = 0 DecimalPlaces = 1 MinValue = 0 NullValue = 0 Value = 0 end object lblRight: TLabel Left = 181 Height = 28 Top = 10 Width = 53 Caption = '&Right:' FocusControl = seeRight ParentColor = False ParentFont = False end object seeRight: TFloatSpinEditEx Left = 242 Height = 28 Top = 10 Width = 129 MaxLength = 0 ParentFont = False TabOrder = 1 DecimalPlaces = 1 MinValue = 0 NullValue = 0 Value = 0 end object lblTop: TLabel Left = 8 Height = 28 Top = 50 Width = 28 Caption = '&Top:' FocusControl = seeTop ParentColor = False ParentFont = False end object seeTop: TFloatSpinEditEx Left = 44 Height = 28 Top = 50 Width = 129 MaxLength = 0 ParentFont = False TabOrder = 2 DecimalPlaces = 1 MinValue = 0 NullValue = 0 Value = 0 end object lblBottom: TLabel Left = 181 Height = 28 Top = 50 Width = 53 Caption = '&Bottom:' FocusControl = seeBottom ParentColor = False ParentFont = False end object seeBottom: TFloatSpinEditEx Left = 242 Height = 28 Top = 50 Width = 129 MaxLength = 0 ParentFont = False TabOrder = 3 DecimalPlaces = 1 MinValue = 0 NullValue = 0 Value = 0 end end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = gbMargins AnchorSideTop.Control = gbMargins AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMargins AnchorSideRight.Side = asrBottom Left = 20 Height = 30 Top = 148 Width = 367 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 15 BorderSpacing.Around = 8 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 1 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-1.1.30/src/fpackinfodlg.pas0000644000175000001440000001347115104114162016516 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Packed file information window Copyright (C) 2008-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fPackInfoDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Forms, StdCtrls, ExtCtrls, Controls, uFile, KASCDEdit, uArchiveFileSource, uFileSourceExecuteOperation; type { TfrmPackInfoDlg } TfrmPackInfoDlg = class(TForm) Bevel1: TBevel; Bevel2: TBevel; btnClose: TButton; btnUnpackAllAndExec: TButton; btnUnpackAndExec: TButton; lblAttributes: TLabel; lblCompressionRatio: TLabel; lblDate: TLabel; lblMethod: TLabel; lblOriginalSize: TLabel; lblPackedFile: TLabel; lblPackedSize: TLabel; lblPacker: TLabel; lblTime: TLabel; lblPackedAttr: TKASCDEdit; lblPackedCompression: TKASCDEdit; lblPackedDate: TKASCDEdit; edtPackedFile: TEdit; lblPackedMethod: TKASCDEdit; lblPackedOrgSize: TKASCDEdit; lblPackedPackedSize: TKASCDEdit; lblPackedPacker: TKASCDEdit; lblPackedTime: TKASCDEdit; pnlInfoProperties: TPanel; pnlInfoFile: TPanel; pnlInfo: TPanel; pnlButtons: TPanel; procedure btnCloseKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } public constructor Create(TheOwner: TComponent; aFileSource: IArchiveFileSource; aFile: TFile); reintroduce; end; function ShowPackInfoDlg(aFileSource: IArchiveFileSource; aFile: TFile): TFileSourceExecuteOperationResult; implementation {$R *.lfm} uses {$IF DEFINED(LCLGTK2)} LCLType, LCLVersion, {$ENDIF} uDCUtils, uFileSourceOperationTypes; function ShowPackInfoDlg(aFileSource: IArchiveFileSource; aFile: TFile): TFileSourceExecuteOperationResult; begin Result:= fseorSuccess; with TfrmPackInfoDlg.Create(Application, aFileSource, aFile) do begin case ShowModal of mrCancel: Result:= fseorCancelled; mrOK: Result:= fseorYourSelf; mrAll: Result:= fseorWithAll; end; Free; end; end; { TfrmPackInfoDlg } procedure TfrmPackInfoDlg.btnCloseKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin {$IF DEFINED(LCLGTK2) and (lcl_fullversion < 093100)} if Key = VK_RETURN then // Lazarus issue 0021483. ControlKeyUp not called after Enter pressed. Application.ControlKeyUp(btnClose, Key, Shift); {$ENDIF} end; constructor TfrmPackInfoDlg.Create(TheOwner: TComponent; aFileSource: IArchiveFileSource; aFile: TFile); var i: Integer; foundDividingControl: Boolean = False; upperInfoControls: array[0..4] of TControl; begin inherited Create(TheOwner); btnUnpackAndExec.Enabled:= (fsoCopyOut in aFileSource.GetOperationsTypes); btnUnpackAllAndExec.Enabled:= ([fsoList, fsoCopyOut] * aFileSource.GetOperationsTypes = [fsoList, fsoCopyOut]); edtPackedFile.Text:= aFile.FullPath; lblPackedPacker.Caption:= aFileSource.Packer; lblPackedOrgSize.Visible := not aFile.IsDirectory; lblPackedPackedSize.Visible := not aFile.IsDirectory; lblPackedCompression.Visible := False; lblPackedMethod.Visible := False; if not aFile.IsDirectory then begin lblPackedOrgSize.Caption := IntToStrTS(aFile.Size); lblPackedPackedSize.Caption := IntToStrTS(aFile.CompressedSize); lblPackedOrgSize.Visible := aFile.SizeProperty.IsValid; lblPackedPackedSize.Visible := aFile.CompressedSizeProperty.IsValid; if (aFile.Size > 0) and aFile.CompressedSizeProperty.IsValid then begin lblPackedCompression.Caption := IntToStr(100 - (aFile.CompressedSize * 100 div aFile.Size)) + '%'; lblPackedCompression.Visible := True; end; end; // DateTime and Attributes if not aFile.ModificationTimeProperty.IsValid then begin lblPackedDate.Visible:= False; lblPackedTime.Visible:= False; end else begin lblPackedDate.Caption:= DateToStr(aFile.ModificationTime); lblPackedTime.Caption:= TimeToStr(aFile.ModificationTime); end; lblPackedAttr.Caption:= aFile.AttributesProperty.AsString; // Hide labels for not visible values. lblOriginalSize.Visible := lblPackedOrgSize.Visible; lblPackedSize.Visible := lblPackedPackedSize.Visible; lblCompressionRatio.Visible := lblPackedCompression.Visible; lblMethod.Visible := lblPackedMethod.Visible; lblDate.Visible := lblPackedDate.Visible; lblTime.Visible := lblPackedTime.Visible; // Controls from the dividing line to top. upperInfoControls[0] := lblMethod; upperInfoControls[1] := lblCompressionRatio; upperInfoControls[2] := lblPackedSize; upperInfoControls[3] := lblOriginalSize; upperInfoControls[4] := lblPacker; // Make space for the dividing line. for i := Low(upperInfoControls) to High(upperInfoControls) do begin if foundDividingControl then upperInfoControls[i].BorderSpacing.Bottom := 0 else if upperInfoControls[i].Visible then begin foundDividingControl := True; upperInfoControls[i].BorderSpacing.Bottom := 12; end; end; end; end. doublecmd-1.1.30/src/fpackinfodlg.lrj0000644000175000001440000000365315104114162016523 0ustar alexxusers{"version":1,"strings":[ {"hash":242912677,"name":"tfrmpackinfodlg.caption","sourcebytes":[80,114,111,112,101,114,116,105,101,115,32,111,102,32,112,97,99,107,101,100,32,102,105,108,101],"value":"Properties of packed file"}, {"hash":5046922,"name":"tfrmpackinfodlg.lblpackedfile.caption","sourcebytes":[70,105,108,101,58],"value":"File:"}, {"hash":108665866,"name":"tfrmpackinfodlg.lblpacker.caption","sourcebytes":[80,97,99,107,101,114,58],"value":"Packer:"}, {"hash":109580698,"name":"tfrmpackinfodlg.lbloriginalsize.caption","sourcebytes":[79,114,105,103,105,110,97,108,32,115,105,122,101,58],"value":"Original size:"}, {"hash":52408634,"name":"tfrmpackinfodlg.lblpackedsize.caption","sourcebytes":[80,97,99,107,101,100,32,115,105,122,101,58],"value":"Packed size:"}, {"hash":260533674,"name":"tfrmpackinfodlg.lblcompressionratio.caption","sourcebytes":[67,111,109,112,114,101,115,115,105,111,110,32,114,97,116,105,111,58],"value":"Compression ratio:"}, {"hash":63632682,"name":"tfrmpackinfodlg.lblmethod.caption","sourcebytes":[77,101,116,104,111,100,58],"value":"Method:"}, {"hash":4885130,"name":"tfrmpackinfodlg.lbldate.caption","sourcebytes":[68,97,116,101,58],"value":"Date:"}, {"hash":5964682,"name":"tfrmpackinfodlg.lbltime.caption","sourcebytes":[84,105,109,101,58],"value":"Time:"}, {"hash":265557994,"name":"tfrmpackinfodlg.lblattributes.caption","sourcebytes":[65,116,116,114,105,98,117,116,101,115,58],"value":"Attributes:"}, {"hash":44709525,"name":"tfrmpackinfodlg.btnclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"}, {"hash":172526965,"name":"tfrmpackinfodlg.btnunpackandexec.caption","sourcebytes":[38,85,110,112,97,99,107,32,97,110,100,32,101,120,101,99,117,116,101],"value":"&Unpack and execute"}, {"hash":184645781,"name":"tfrmpackinfodlg.btnunpackallandexec.caption","sourcebytes":[85,110,112,97,99,107,32,38,97,108,108,32,97,110,100,32,101,120,101,99,117,116,101],"value":"Unpack &all and execute"} ]} doublecmd-1.1.30/src/fpackinfodlg.lfm0000644000175000001440000002136215104114162016507 0ustar alexxusersobject frmPackInfoDlg: TfrmPackInfoDlg Left = 525 Height = 400 Top = 83 Width = 284 ActiveControl = btnClose AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Properties of packed file' ClientHeight = 400 ClientWidth = 284 Position = poScreenCenter LCLVersion = '2.0.8.0' object pnlInfo: TPanel Left = 0 Height = 313 Top = 0 Width = 284 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 313 ClientWidth = 284 TabOrder = 0 object pnlInfoFile: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfo AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 38 Top = 0 Width = 254 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 15 BorderSpacing.Right = 15 BevelOuter = bvNone ClientHeight = 38 ClientWidth = 254 TabOrder = 1 object lblPackedFile: TLabel AnchorSideLeft.Control = pnlInfoFile AnchorSideTop.Control = edtPackedFile AnchorSideTop.Side = asrCenter Left = 0 Height = 18 Top = 15 Width = 28 BorderSpacing.Top = 10 Caption = 'File:' FocusControl = edtPackedFile ParentColor = False end object edtPackedFile: TEdit AnchorSideLeft.Control = lblPackedFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlInfoFile AnchorSideRight.Control = pnlInfoFile AnchorSideRight.Side = asrBottom Left = 43 Height = 28 Top = 10 Width = 211 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 15 BorderSpacing.Top = 10 Color = clBtnFace Constraints.MinWidth = 200 Font.Color = clBtnText ParentFont = False ReadOnly = True TabStop = False TabOrder = 0 end end object Bevel1: TBevel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfoFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 9 Top = 48 Width = 254 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 15 BorderSpacing.Top = 10 BorderSpacing.Right = 15 Shape = bsTopLine end object pnlInfoProperties: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 179 Top = 57 Width = 254 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 15 BorderSpacing.Right = 15 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 30 ChildSizing.VerticalSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 155 ClientWidth = 254 TabOrder = 0 object lblPacker: TLabel Left = 0 Height = 15 Top = 0 Width = 162 Caption = 'Packer:' ParentColor = False end object lblPackedPacker: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 0 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblOriginalSize: TLabel Left = 0 Height = 15 Top = 20 Width = 162 Caption = 'Original size:' ParentColor = False end object lblPackedOrgSize: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 20 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblPackedSize: TLabel Left = 0 Height = 15 Top = 40 Width = 162 Caption = 'Packed size:' ParentColor = False end object lblPackedPackedSize: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 40 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblCompressionRatio: TLabel Left = 0 Height = 15 Top = 60 Width = 162 Caption = 'Compression ratio:' ParentColor = False end object lblPackedCompression: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 60 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblMethod: TLabel Left = 0 Height = 15 Top = 80 Width = 162 Caption = 'Method:' ParentColor = False end object lblPackedMethod: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 80 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblDate: TLabel Left = 0 Height = 15 Top = 100 Width = 162 Caption = 'Date:' ParentColor = False end object lblPackedDate: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 100 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblTime: TLabel Left = 0 Height = 15 Top = 120 Width = 162 Caption = 'Time:' ParentColor = False end object lblPackedTime: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 120 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object lblAttributes: TLabel Left = 0 Height = 15 Top = 140 Width = 162 Caption = 'Attributes:' ParentColor = False end object lblPackedAttr: TKASCDEdit Cursor = crIBeam Left = 192 Height = 15 Top = 140 Width = 62 DrawStyle = dsExtra1 ReadOnly = True TabStop = False end object Bevel2: TBevel AnchorSideLeft.Control = pnlInfoProperties AnchorSideRight.Control = pnlInfoProperties AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblDate Left = 0 Height = 4 Top = 91 Width = 254 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 4 Shape = bsBottomLine end end end object pnlButtons: TPanel Left = 0 Height = 60 Top = 340 Width = 284 Align = alBottom AutoSize = True BorderSpacing.Top = 15 BevelOuter = bvNone ClientHeight = 60 ClientWidth = 284 TabOrder = 1 object btnClose: TButton AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlButtons AnchorSideBottom.Control = btnUnpackAndExec AnchorSideBottom.Side = asrBottom Left = 10 Height = 25 Top = 0 Width = 55 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 10 Cancel = True Caption = '&Close' Default = True ModalResult = 2 OnKeyUp = btnCloseKeyUp TabOrder = 0 end object btnUnpackAndExec: TButton AnchorSideLeft.Control = btnClose AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnUnpackAllAndExec Left = 69 Height = 25 Top = 0 Width = 205 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 4 BorderSpacing.Right = 10 BorderSpacing.Bottom = 4 Caption = '&Unpack and execute' ModalResult = 1 TabOrder = 1 end object btnUnpackAllAndExec: TButton AnchorSideLeft.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButtons AnchorSideBottom.Side = asrBottom Left = 10 Height = 25 Top = 29 Width = 264 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Right = 10 BorderSpacing.Bottom = 6 Caption = 'Unpack &all and execute' ModalResult = 8 TabOrder = 2 end end end doublecmd-1.1.30/src/fpackdlg.pas0000644000175000001440000005265715104114162015653 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File packing window Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fPackDlg; {$mode objfpc}{$H+} interface uses SysUtils, Forms, Controls, Dialogs, StdCtrls, EditBtn, ExtCtrls, Buttons, Menus, DividerBevel, uWcxArchiveFileSource, uArchiveFileSource, uFile, uFileSource, Classes, fButtonForm, uFileSourceOperation; type { TfrmPackDlg } TfrmPackDlg = class(TfrmButtonForm) btnConfig: TButton; btnHelp: TButton; cbCreateSeparateArchives: TCheckBox; cbCreateSFX: TCheckBox; cbEncrypt: TCheckBox; cbMoveToArchive: TCheckBox; cbMultivolume: TCheckBox; cbPackerList: TComboBox; cbOtherPlugins: TCheckBox; cbPutInTarFirst: TCheckBox; DividerBevel: TDividerBevel; edtPackCmd: TDirectoryEdit; lblPrompt: TLabel; cbStoreDir: TCheckBox; rgPacker: TRadioGroup; pnlOptions: TPanel; procedure btnConfigClick(Sender: TObject); procedure cbCreateSeparateArchivesChange(Sender: TObject); procedure cbCreateSFXClick(Sender: TObject); procedure cbOtherPluginsChange(Sender: TObject); procedure cbPutInTarFirstChange(Sender: TObject); procedure edtPackCmdAcceptDirectory(Sender: TObject; var Value: String); procedure FormShow(Sender: TObject); procedure arbChange(Sender: TObject); private FArchiveExt, FArchiveName, FArchiveType: String; FArchiveTypeCount: Integer; FHasFolder, FNewArchive, FExistsArchive : Boolean; FSourceFileSource: IFileSource; FTargetFileSource: IArchiveFileSource; FCount: Integer; FPlugin: Boolean; FPassword: String; FVolumeSize: String; FCustomParams: String; FTargetPathInArchive: String; procedure SwitchOptions(ArcTypeChange: Boolean); procedure ChangeArchiveExt(const NewArcExt: String); procedure AddArchiveType(const FileExt, ArcType: String); procedure OnPackCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure PackFiles(const SourceFileSource: IFileSource; var Files: TFiles); public { public declarations } end; // Frees 'Files'. procedure ShowPackDlg(TheOwner: TComponent; const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True); implementation {$R *.lfm} uses StrUtils, WcxPlugin, uGlobs, uDCUtils, uLng, uOSUtils, uOperationsManager, uArchiveFileSourceUtil, uMultiArchiveFileSource, uWcxArchiveCopyInOperation, uMultiArchiveCopyInOperation, uMasks, DCStrUtils, uMultiArc, uWcxModule, uTempFileSystemFileSource, uFileSourceCopyOperation, uShowForm, uShowMsg; procedure ShowPackDlg(TheOwner: TComponent; const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True); var I: Integer; PackDialog: TfrmPackDlg; begin PackDialog := TfrmPackDlg.Create(TheOwner); {$IF DEFINED(LCLGTK2)} // TRadioGroup.ItemIndex:= -1 will not work under Gtk2 // if items have been added dynamically, this workaround fixes it PackDialog.rgPacker.Items.Add(EmptyStr); PackDialog.rgPacker.Items.Clear; {$ENDIF} try with PackDialog do begin FCount:= Files.Count; FArchiveType:= 'none'; FNewArchive:= bNewArchive; FSourceFileSource:= SourceFileSource; FTargetFileSource:= TargetFileSource; FTargetPathInArchive:= TargetPathInArchive; FArchiveExt:= ExtensionSeparator + FArchiveType; if bNewArchive then // create new archive begin if Files.Count = 1 then // if one file selected begin FArchiveName:= Files[0].NameNoExt; FHasFolder:= Files[0].IsDirectory or Files[0].IsLinkToDirectory; edtPackCmd.Text := TargetArchivePath + FArchiveName + ExtensionSeparator + FArchiveType; end else // if some files selected begin FHasFolder:= False; for I:= 0 to Files.Count - 1 do begin if Files[I].IsDirectory or Files[I].IsLinkToDirectory then begin FHasFolder:= True; Break; end; end; FArchiveName:= MakeFileName(Files.Path, 'archive'); edtPackCmd.Text := TargetArchivePath + FArchiveName + ExtensionSeparator + FArchiveType; end end else // pack in exsists archive begin if Assigned(TargetFileSource) then edtPackCmd.Text := TargetFileSource.ArchiveFileName; end; if (ShowModal = mrOK) then begin case PrepareData(SourceFileSource, Files, @OnPackCopyOutStateChanged) of pdrInCallback: PackDialog:= nil; pdrSynchronous: PackFiles(SourceFileSource, Files); end; end; end; finally FreeAndNil(PackDialog); FreeAndNil(Files); end; end; const TAR_EXT = '.tar'; { TfrmPackDlg } procedure TfrmPackDlg.FormShow(Sender: TObject); var I, J : Integer; sExt : String; begin FArchiveTypeCount := 0; FExistsArchive := (FArchiveType <> 'none'); // WCX plugins for I:=0 to gWCXPlugins.Count - 1 do if gWCXPlugins.Enabled[I] then begin if (gWCXPlugins.Flags[I] and PK_CAPS_NEW) = PK_CAPS_NEW then begin AddArchiveType(FArchiveType, gWCXPlugins.Ext[I]); end; end; // MultiArc addons for I:= 0 to gMultiArcList.Count - 1 do if gMultiArcList[I].FEnabled and (gMultiArcList[I].FAdd <> EmptyStr) then begin J:= 1; repeat sExt:= ExtractDelimited(J, gMultiArcList[I].FExtension, [',']); if Length(sExt) = 0 then Break; AddArchiveType(FArchiveType, sExt); Inc(J); until False; end; if (rgPacker.Items.Count > 0) and (rgPacker.ItemIndex < 0) and (not cbOtherPlugins.Checked) then rgPacker.ItemIndex := 0; if cbPackerList.Items.Count > 0 then begin cbOtherPlugins.Visible := True; cbPackerList.Visible := True; if FExistsArchive then cbPackerList.Enabled:= False else cbOtherPlugins.Enabled := True; if cbPackerList.ItemIndex < 0 then cbPackerList.ItemIndex := 0; end else btnConfig.AnchorToCompanion(akTop, 6, rgPacker); end; procedure TfrmPackDlg.btnConfigClick(Sender: TObject); var WcxFileSource: IWcxArchiveFileSource; begin try WcxFileSource := TWcxArchiveFileSource.CreateByArchiveName(FSourceFileSource, edtPackCmd.Text, True); if Assigned(WcxFileSource) then // WCX plugin try WcxFileSource.WcxModule.VFSConfigure(Handle); finally WcxFileSource := nil; // free interface end else // MultiArc addon begin FCustomParams:= InputBox(Caption, rsMsgArchiverCustomParams, FCustomParams); end; except on e: Exception do MessageDlg(e.Message, mtError, [mbOK], 0); end; end; procedure TfrmPackDlg.cbCreateSeparateArchivesChange(Sender: TObject); begin if cbCreateSeparateArchives.Checked then edtPackCmd.Text:= ExtractFilePath(edtPackCmd.Text) + '*.*' + FArchiveExt else edtPackCmd.Text:= ExtractFilePath(edtPackCmd.Text) + FArchiveName + FArchiveExt; end; procedure TfrmPackDlg.cbCreateSFXClick(Sender: TObject); var State: Boolean; ANewExt: String; begin if cbCreateSFX.Tag = 0 then begin cbCreateSFX.Tag:= 1; // Save check box state State:= cbCreateSFX.Checked; if State then ANewExt:= GetSfxExt else begin ANewExt:= ExtensionSeparator + FArchiveType; end; ChangeArchiveExt(ANewExt); // Switch archiver options SwitchOptions(False); // Restore check box state cbCreateSFX.Checked:= State; cbCreateSFX.Tag:= 0; end; end; procedure TfrmPackDlg.cbOtherPluginsChange(Sender: TObject); begin if cbOtherPlugins.Checked then begin FArchiveType:= cbPackerList.Text; SwitchOptions(True); ChangeArchiveExt(FArchiveType); rgPacker.ItemIndex := -1; end else begin if rgPacker.ItemIndex = -1 then rgPacker.ItemIndex := 0; end; FCustomParams:= EmptyStr; cbPackerList.Enabled := cbOtherPlugins.Checked; end; procedure TfrmPackDlg.cbPutInTarFirstChange(Sender: TObject); begin if cbPutInTarFirst.Checked then ChangeArchiveExt(FArchiveExt) else if AnsiStartsText(TAR_EXT, FArchiveExt) then begin ChangeArchiveExt(Copy(FArchiveExt, Length(TAR_EXT) + 1, MaxInt)); end; end; procedure TfrmPackDlg.edtPackCmdAcceptDirectory(Sender: TObject; var Value: String); begin Value := IncludeTrailingPathDelimiter(Value) + ExtractFileName(edtPackCmd.Text); end; procedure TfrmPackDlg.arbChange(Sender: TObject); begin if rgPacker.ItemIndex >= 0 then begin FArchiveType:= rgPacker.Items[rgPacker.ItemIndex]; SwitchOptions(True); ChangeArchiveExt(FArchiveType); cbOtherPlugins.Checked := False; end; FCustomParams:= EmptyStr; end; procedure TfrmPackDlg.SwitchOptions(ArcTypeChange: Boolean); // Ugly but working var I: LongInt; sCmd: String; begin cbPutInTarFirst.OnChange:= nil; try if ArcTypeChange then begin // Reset some options cbCreateSFX.Checked:= False; end; // WCX plugins for I:= 0 to gWCXPlugins.Count - 1 do begin if gWCXPlugins.Enabled[I] and (gWCXPlugins.Ext[I] = FArchiveType) then begin // If plugin supports packing with password EnableControl(cbEncrypt, ((gWCXPlugins.Flags[I] and PK_CAPS_ENCRYPT) <> 0)); // If archive can not contain multiple files if ((gWCXPlugins.Flags[I] and PK_CAPS_MULTIPLE) = 0) then begin // If file list contain directory then // put to the tar archive first is needed if not FHasFolder then cbCreateSeparateArchives.Checked:= (FCount > 1) else begin cbPutInTarFirst.Checked:= True; EnableControl(cbPutInTarFirst, False); end; end else begin sCmd:= LowerCase(FArchiveType); cbPutInTarFirst.Checked:= False; EnableControl(cbPutInTarFirst, not ((sCmd = 'tar') or StrBegins(sCmd, 'tar.'))); cbCreateSeparateArchives.Checked:= False; end; FPlugin:= True; // Options that supported by plugins EnableControl(cbStoreDir, True); // Options that don't supported by plugins cbMultivolume.Checked:= False; EnableControl(cbMultivolume, False); Exit; end; end; // MultiArc addons for I := 0 to gMultiArcList.Count - 1 do begin with gMultiArcList.Items[I] do begin if FEnabled and MatchesMaskList(FArchiveType, FExtension, ',') then begin // Archive can contain multiple files cbCreateSeparateArchives.Checked:= False; // If addon supports create self extracting archive EnableControl(cbCreateSFX, (Length(FAddSelfExtract) <> 0)); if cbCreateSFX.Enabled and cbCreateSFX.Checked then sCmd:= FAddSelfExtract else sCmd:= FAdd; // If addon supports create multi volume archive EnableControl(cbMultivolume, (Pos('%V', sCmd) <> 0)); // If addon supports packing with password EnableControl(cbEncrypt, (Pos('%W', sCmd) <> 0)); // If archive can not contain multiple files if (mafFileNameList in FFlags) then begin // If file list contain directory then // put to the tar archive first is needed if not FHasFolder then cbCreateSeparateArchives.Checked:= (FCount > 1) else begin cbPutInTarFirst.Checked:= True; EnableControl(cbPutInTarFirst, False); end; end else begin sCmd:= LowerCase(FArchiveType); cbPutInTarFirst.Checked:= False; EnableControl(cbPutInTarFirst, not ((sCmd = 'tar') or StrBegins(sCmd, 'tar.'))); cbCreateSeparateArchives.Checked:= False; end; FPlugin:= False; // Options that don't supported by addons cbStoreDir.Checked:= True; EnableControl(cbStoreDir, False); Exit; end; end; end; finally cbPutInTarFirst.OnChange:= @cbPutInTarFirstChange; end; end; procedure TfrmPackDlg.ChangeArchiveExt(const NewArcExt: String); var AOldExt, ATarExt: String; begin AOldExt:= FArchiveExt; ATarExt:= IfThen(cbPutInTarFirst.Checked, TAR_EXT); if StrBegins(NewArcExt, ExtensionSeparator) then begin if AnsiStartsText(ATarExt, NewArcExt) then FArchiveExt:= NewArcExt else FArchiveExt:= ATarExt + NewArcExt; end else begin FArchiveExt:= ATarExt + ExtensionSeparator + NewArcExt; end; if AnsiEndsText(AOldExt, edtPackCmd.Text) then begin edtPackCmd.Text:= Copy(edtPackCmd.Text, 1, Length(edtPackCmd.Text) - Length(AOldExt)) + FArchiveExt; end; end; procedure TfrmPackDlg.AddArchiveType(const FileExt, ArcType: String); var iIndex: Integer; begin // First 9 plugins we display as RadioButtons if FArchiveTypeCount < 9 then begin iIndex := rgPacker.Items.Add(ArcType); if FExistsArchive then begin if (FileExt = ArcType) then rgPacker.ItemIndex := iIndex else rgPacker.Controls[iIndex + 1].Enabled := False; end else if (gLastUsedPacker = ArcType) then begin rgPacker.ItemIndex := iIndex; end; FArchiveTypeCount := FArchiveTypeCount + 1; end else // Other plugins we add in ComboBox begin iIndex := cbPackerList.Items.Add(ArcType); if (gLastUsedPacker = ArcType) or (FExistsArchive and (FileExt = ArcType)) then begin cbPackerList.ItemIndex := iIndex; cbOtherPlugins.Checked := True; end; end; end; procedure TfrmPackDlg.OnPackCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var aFiles: TFiles; aFileSource: ITempFileSystemFileSource; aCopyOutOperation: TFileSourceCopyOperation absolute Operation; begin if (State = fsosStopped) then try if (Operation.Result = fsorFinished) then begin aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; aFiles := aCopyOutOperation.SourceFiles.Clone; ChangeFileListRoot(aFileSource.FileSystemRoot, aFiles); PackFiles(aFileSource, aFiles); end; finally Free; end; end; procedure TfrmPackDlg.PackFiles(const SourceFileSource: IFileSource; var Files: TFiles); var I: Integer; aFlags : PtrInt; aFile: TFile = nil; aFiles: TFiles = nil; Operation: TFileSourceOperation; NewTargetFileSource: IArchiveFileSource = nil; procedure Pack(var FilesToPack: TFiles; QueueId: TOperationsManagerQueueIdentifier); begin if Assigned(NewTargetFileSource) then begin // Set flags according to user selection in the pack dialog. aFlags := 0; if cbMoveToArchive.Checked then aFlags := aFlags or PK_PACK_MOVE_FILES; if cbStoreDir.Checked then aFlags := aFlags or PK_PACK_SAVE_PATHS; if cbEncrypt.Checked then aFlags := aFlags or PK_PACK_ENCRYPT; Operation := NewTargetFileSource.CreateCopyInOperation( SourceFileSource, FilesToPack, FTargetPathInArchive); if Assigned(Operation) then begin if NewTargetFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyInOperation do begin PackingFlags:= aFlags; CreateNew:= FNewArchive; TarBefore:= cbPutInTarFirst.Checked; end; end else if NewTargetFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyInOperation do begin if cbEncrypt.Checked then Password:= FPassword; if cbMultivolume.Checked then VolumeSize:= FVolumeSize; PackingFlags := aFlags; CreateNew:= FNewArchive; CustomParams:= FCustomParams; TarBefore:= cbPutInTarFirst.Checked; end; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False, True); end; end; end; var sPassword, sPasswordTmp: String; QueueId: TOperationsManagerQueueIdentifier; begin if Assigned(FTargetFileSource) then begin // Already have a target file source. // It must be an archive file source. if not (FTargetFileSource.IsClass(TArchiveFileSource)) then raise Exception.Create('Invalid target file source type'); NewTargetFileSource := FTargetFileSource; end else // Create a new target file source. begin if not FPlugin then begin if cbEncrypt.Checked then begin sPassword:= EmptyStr; sPasswordTmp:= EmptyStr; repeat if not InputQuery(Caption, rsMsgPasswordEnter, True, sPassword) then Exit; if gRepeatPassword then begin if not InputQuery(Caption, rsMsgPasswordVerify, True, sPasswordTmp) then Exit; end else sPasswordTmp:= sPassword; if sPassword <> sPasswordTmp then ShowMessage(rsMsgPasswordDiff) else FPassword:= sPassword; until sPassword = sPasswordTmp; end; if cbMultivolume.Checked then begin if not ShowInputComboBox(Caption, rsMsgVolumeSizeEnter, glsVolumeSizeHistory, FVolumeSize) then Exit; end; end; // If create separate archives, one per selected file/dir if cbCreateSeparateArchives.Checked then begin // If files count > 1 then put to queue if (Files.Count > 1) and (QueueIdentifier = FreeOperationsQueueId) then QueueId := OperationsManager.GetNewQueueIdentifier else begin QueueId := QueueIdentifier; end; // Pack all selected files for I:= 0 to Files.Count - 1 do begin // Fill files to pack aFiles:= TFiles.Create(Files.Path); try aFiles.Add(Files[I].Clone); FArchiveName:= GetAbsoluteFileName(Files.Path, edtPackCmd.Text); try // Check if there is an ArchiveFileSource for possible archive. aFile := SourceFileSource.CreateFileObject(ExtractFilePath(FArchiveName)); try aFile.Name := Files[I].Name + FArchiveExt; NewTargetFileSource := GetArchiveFileSource(SourceFileSource, aFile, FArchiveType, False, True); finally FreeAndNil(aFile); end; except on E: Exception do begin if (E is EFileSourceException) or (E is EWcxModuleException) then begin if MessageDlg(E.Message, mtError, [mbIgnore, mbAbort], 0) = mrIgnore then Continue; Exit; end; raise; end; end; // Pack current item Pack(aFiles, QueueId); finally FreeAndNil(aFiles); end; end; // for end else begin FArchiveName:= GetAbsoluteFileName(Files.Path, edtPackCmd.Text); try // Check if there is an ArchiveFileSource for possible archive. aFile := SourceFileSource.CreateFileObject(ExtractFilePath(FArchiveName)); try aFile.Name := ExtractFileName(FArchiveName); NewTargetFileSource := GetArchiveFileSource(SourceFileSource, aFile, FArchiveType, False, True); finally FreeAndNil(aFile); end; except on E: Exception do begin if (E is EFileSourceException) or (E is EWcxModuleException) then begin MessageDlg(E.Message, mtError, [mbOK], 0); Exit; end; raise; end; end; // Pack files Pack(Files, QueueIdentifier); end; end; // Save last used packer gLastUsedPacker:= FArchiveType; end; end. doublecmd-1.1.30/src/fpackdlg.lrj0000644000175000001440000000430515104114162015642 0ustar alexxusers{"version":1,"strings":[ {"hash":225027411,"name":"tfrmpackdlg.caption","sourcebytes":[80,97,99,107,32,102,105,108,101,115],"value":"Pack files"}, {"hash":157530954,"name":"tfrmpackdlg.lblprompt.caption","sourcebytes":[80,97,99,107,32,102,105,108,101,40,115,41,32,116,111,32,116,104,101,32,102,105,108,101,58],"value":"Pack file(s) to the file:"}, {"hash":90677698,"name":"tfrmpackdlg.rgpacker.caption","sourcebytes":[80,97,99,107,101,114],"value":"Packer"}, {"hash":214649477,"name":"tfrmpackdlg.btnconfig.caption","sourcebytes":[67,111,110,38,102,105,103,117,114,101],"value":"Con&figure"}, {"hash":1038,"name":"tfrmpackdlg.cbotherplugins.caption","sourcebytes":[61,62],"value":"=>"}, {"hash":148783881,"name":"tfrmpackdlg.cbstoredir.caption","sourcebytes":[65,108,115,111,32,38,112,97,99,107,32,112,97,116,104,32,110,97,109,101,115,32,40,111,110,108,121,32,114,101,99,117,114,115,101,100,41],"value":"Also &pack path names (only recursed)"}, {"hash":229354261,"name":"tfrmpackdlg.cbmultivolume.caption","sourcebytes":[38,77,117,108,116,105,112,108,101,32,100,105,115,107,32,97,114,99,104,105,118,101],"value":"&Multiple disk archive"}, {"hash":83566709,"name":"tfrmpackdlg.cbmovetoarchive.caption","sourcebytes":[77,111,38,118,101,32,116,111,32,97,114,99,104,105,118,101],"value":"Mo&ve to archive"}, {"hash":149668741,"name":"tfrmpackdlg.cbcreatesfx.caption","sourcebytes":[67,114,101,97,116,101,32,115,101,108,102,32,101,38,120,116,114,97,99,116,105,110,103,32,97,114,99,104,105,118,101],"value":"Create self e&xtracting archive"}, {"hash":77915316,"name":"tfrmpackdlg.cbencrypt.caption","sourcebytes":[69,110,99,114,38,121,112,116],"value":"Encr&ypt"}, {"hash":235944836,"name":"tfrmpackdlg.cbputintarfirst.caption","sourcebytes":[80,38,117,116,32,105,110,32,116,104,101,32,84,65,82,32,97,114,99,104,105,118,101,32,102,105,114,115,116],"value":"P&ut in the TAR archive first"}, {"hash":150077090,"name":"tfrmpackdlg.cbcreateseparatearchives.caption","sourcebytes":[67,38,114,101,97,116,101,32,115,101,112,97,114,97,116,101,32,97,114,99,104,105,118,101,115,44,32,111,110,101,32,112,101,114,32,115,101,108,101,99,116,101,100,32,102,105,108,101,47,100,105,114],"value":"C&reate separate archives, one per selected file/dir"} ]} doublecmd-1.1.30/src/fpackdlg.lfm0000644000175000001440000001533715104114162015640 0ustar alexxusersinherited frmPackDlg: TfrmPackDlg Left = 338 Height = 272 Width = 540 HelpContext = 150 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Pack files' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 272 ClientWidth = 540 Constraints.MinHeight = 236 Constraints.MinWidth = 482 OnShow = FormShow Position = poOwnerFormCenter inherited pnlContent: TPanel Height = 179 Width = 532 Align = alNone ClientHeight = 179 ClientWidth = 532 ParentColor = True object lblPrompt: TLabel[0] Left = 0 Height = 15 Top = 0 Width = 113 Caption = 'Pack file(s) to the file:' FocusControl = edtPackCmd ParentColor = False ShowAccelChar = False end object edtPackCmd: TDirectoryEdit[1] AnchorSideLeft.Control = lblPrompt AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 15 Width = 340 OnAcceptDirectory = edtPackCmdAcceptDirectory ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object rgPacker: TRadioGroup[2] AnchorSideLeft.Control = edtPackCmd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPrompt AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 372 Height = 100 Top = 0 Width = 148 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Left = 32 BorderSpacing.Right = 12 Caption = 'Packer' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 3 Columns = 3 Constraints.MinHeight = 100 Constraints.MinWidth = 100 OnClick = arbChange TabOrder = 2 end object cbPackerList: TComboBox[3] AnchorSideLeft.Control = cbOtherPlugins AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rgPacker AnchorSideTop.Side = asrBottom AnchorSideRight.Control = rgPacker AnchorSideRight.Side = asrBottom Left = 414 Height = 23 Top = 106 Width = 100 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Enabled = False ItemHeight = 15 OnChange = cbOtherPluginsChange ParentFont = False Style = csDropDownList TabOrder = 4 Visible = False end object btnConfig: TButton[4] AnchorSideLeft.Control = rgPacker AnchorSideTop.Control = cbPackerList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = rgPacker AnchorSideRight.Side = asrBottom Left = 378 Height = 32 Top = 135 Width = 136 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 4 Caption = 'Con&figure' OnClick = btnConfigClick TabOrder = 5 end object cbOtherPlugins: TCheckBox[5] AnchorSideLeft.Control = rgPacker AnchorSideTop.Control = cbPackerList AnchorSideTop.Side = asrCenter Left = 378 Height = 19 Top = 108 Width = 36 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '=>' Enabled = False OnChange = cbOtherPluginsChange TabOrder = 3 Visible = False end object pnlOptions: TPanel[6] AnchorSideTop.Control = edtPackCmd AnchorSideTop.Side = asrBottom Left = 0 Height = 133 Top = 46 Width = 340 AutoSize = True BorderSpacing.Top = 8 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 133 ClientWidth = 340 Constraints.MinWidth = 340 TabOrder = 1 object cbStoreDir: TCheckBox Left = 0 Height = 19 Top = 0 Width = 277 Caption = 'Also &pack path names (only recursed)' Checked = True State = cbChecked TabOrder = 0 end object cbMultivolume: TCheckBox Left = 0 Height = 19 Top = 19 Width = 277 Caption = '&Multiple disk archive' TabOrder = 1 end object cbMoveToArchive: TCheckBox Left = 0 Height = 19 Top = 38 Width = 277 Caption = 'Mo&ve to archive' TabOrder = 2 end object cbCreateSFX: TCheckBox Left = 0 Height = 19 Top = 57 Width = 277 Caption = 'Create self e&xtracting archive' OnClick = cbCreateSFXClick TabOrder = 3 end object cbEncrypt: TCheckBox Left = 0 Height = 19 Top = 76 Width = 277 Caption = 'Encr&ypt' TabOrder = 4 end object cbPutInTarFirst: TCheckBox Left = 0 Height = 19 Top = 95 Width = 277 Caption = 'P&ut in the TAR archive first' OnChange = cbPutInTarFirstChange TabOrder = 5 end object cbCreateSeparateArchives: TCheckBox Left = 0 Height = 19 Top = 114 Width = 277 Caption = 'C&reate separate archives, one per selected file/dir' OnChange = cbCreateSeparateArchivesChange TabOrder = 6 end end end inherited pnlButtons: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = DividerBevel AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Top = 212 Width = 524 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 ClientWidth = 524 inherited btnCancel: TBitBtn Left = 342 end inherited btnOK: TBitBtn Left = 436 end end object DividerBevel: TDividerBevel[2] AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlContent AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 8 Height = 15 Top = 191 Width = 524 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Font.Style = [fsBold] ParentFont = False end inherited pmQueuePopup: TPopupMenu[3] left = 264 top = 216 end end doublecmd-1.1.30/src/foptionshotkeysedithotkey.pas0000644000175000001440000005723215104114162021434 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Editor for hotkeys Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fOptionsHotkeysEditHotkey; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, Menus, uHotkeyManager, DCBasicTypes; type TEditHotkeyOption = (ehoHideParams); TEditHotkeyOptions = set of TEditHotkeyOption; { TfrmEditHotkey } TfrmEditHotkey = class(TForm) btnOK: TBitBtn; btnCancel: TBitBtn; btnShowCommandHelp: TButton; cgHKControls: TCheckGroup; lblShortcuts: TLabel; lblHotKeyConflict: TLabel; lblParameters: TLabel; edtParameters: TMemo; pnlShortcuts: TPanel; btnAddShortcut: TSpeedButton; btnRemoveShortcut: TSpeedButton; pmWithAllShortcuts: TPopupMenu; btnSelectFromList: TSpeedButton; procedure btnAddShortcutClick(Sender: TObject); procedure btnRemoveShortcutClick(Sender: TObject); procedure btnShowCommandHelpClick(Sender: TObject); procedure cgHKControlsItemClick(Sender: TObject; {%H-}Index: integer); procedure edtShortcutKeyDown(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); procedure edtShortcutKeyPress(Sender: TObject; var Key: char); procedure edtShortcutKeyUp(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure ChangeEnterBehaviorClick(Sender: TObject); procedure ShortcutHelperClick(Sender: TObject); procedure PopulateHelperMenu; procedure btnSelectFromListClick(Sender: TObject); private FCommand: String; FEditMode: Boolean; FForm: String; FForms, FFormsTranslated: TStringList; FOldHotkey: THotkey; FOptions: TEditHotkeyOptions; function ApplyHotkey: Boolean; procedure AddShortcutEditor; {en Check if combination of pressed hotkey and checked controls are already in use. Conflicting hotkeys are deleted if DeleteConflicts parameter is true. } procedure CheckHotKeyConflicts(DeleteConflicts: Boolean = false); procedure CheckHotKeyConflicts(Key: Word; Shift: TShiftState); procedure FillHKControlList; function GetShortcutsEditorsCount: Integer; function GetParameters: TDynamicStringArray; function GetShortcuts: TDynamicStringArray; function GetTranslatedControlName(const AName: String): String; function GetTranslatedFormName(const AName: String): String; procedure RemoveLastShortcutEditor; procedure SetBitmapOrCaption(Button: TSpeedButton; const AIconName, ACaption: String); procedure SetCommand(NewCommand: String); procedure SetControls(const NewControls: TDynamicStringArray); procedure SetHotkey(Hotkey: THotkey); procedure SetParameters(const NewParameters: TDynamicStringArray); procedure SetShortcuts(const NewShortcuts: TDynamicStringArray); public destructor Destroy; override; function Execute(EditMode: Boolean; Form: String; Command: String; Hotkey: THotkey; AControls: TDynamicStringArray; Options: TEditHotkeyOptions = []): Boolean; function CloneNewHotkey: THotkey; end; implementation {$R *.lfm} uses LCLType, dmHelpManager, uKeyboard, uLng, uGlobs, uFormCommands, DCStrUtils, uPixMapManager; const MaxShortcutSequenceLength = 5; { TfrmEditHotkey } procedure TfrmEditHotkey.AddShortcutEditor; var EditControl: TEdit; begin if GetShortcutsEditorsCount < MaxShortcutSequenceLength then begin EditControl := TEdit.Create(Self); EditControl.Font.Color:=clRed; EditControl.Parent := pnlShortcuts; EditControl.OnKeyDown := @edtShortcutKeyDown; EditControl.OnKeyPress := @edtShortcutKeyPress; EditControl.OnKeyUp := @edtShortcutKeyUp; end; end; function TfrmEditHotkey.ApplyHotkey: Boolean; procedure UpdateHotkey(ShouldBePresent: Boolean; HotkeyOld, HotkeyNew: THotkey; Hotkeys: THotkeys); var hotkey: THotkey; begin if FEditMode then begin hotkey := Hotkeys.Find(HotkeyOld.Shortcuts); if Assigned(hotkey) and (hotkey.Command = FCommand) then begin if ShouldBePresent then begin hotkey.Assign(HotkeyNew); Hotkeys.UpdateHotkey(hotkey); end else if hotkey.SameParams(HotkeyOld.Params) then Hotkeys.Remove(hotkey); end else if ShouldBePresent then Hotkeys.Add(HotkeyNew.Shortcuts, HotkeyNew.Params, HotkeyNew.Command); end else if ShouldBePresent then begin // Overwrite old hotkey in Add mode too. hotkey := Hotkeys.Find(HotkeyNew.Shortcuts); if Assigned(hotkey) and (hotkey.Command = FCommand) then begin hotkey.Assign(HotkeyNew); Hotkeys.UpdateHotkey(hotkey); end else Hotkeys.Add(HotkeyNew.Shortcuts, HotkeyNew.Params, HotkeyNew.Command); end; end; var i: Integer; HMForm: THMForm; HMControl: THMControl; NewHotkey: THotkey; IsFormHotkey: Boolean; begin Result := False; NewHotkey := CloneNewHotkey; try // check for invalid hotkey if Length(NewHotkey.Shortcuts) = 0 then Exit; if (lblHotKeyConflict.Tag > 0) then begin if (MessageDlg(rsOptHotkeysShortCutUsed, Format(rsOptHotkeysShortCutUsedText1, [ShortcutsToText(NewHotkey.Shortcuts)]), mtWarning, [mbIgnore, mbCancel], 0) = mrCancel) then Exit; end else if (lblHotKeyConflict.Caption <> EmptyStr) then begin if (MessageDlg(rsOptHotkeysShortCutUsed, // delete command on assigned shortcut Format(rsOptHotkeysShortCutUsedText1, // if another was applied [ShortcutsToText(NewHotkey.Shortcuts)]) + LineEnding + Format(rsOptHotkeysShortCutUsedText2, [NewHotkey.Command]), mtConfirmation, mbYesNo, 0) = mrYes) then CheckHotKeyConflicts(True) else Exit; end; HMForm := HotMan.Forms.FindOrCreate(FForm); IsFormHotkey := True; for i := 0 to cgHKControls.Items.Count - 1 do begin HMControl := THMControl(cgHKControls.Items.Objects[i]); if Assigned(HMControl) then begin if cgHKControls.Checked[i] then IsFormHotkey := False; UpdateHotkey(cgHKControls.Checked[i], FOldHotkey, NewHotkey, HMControl.Hotkeys); end; end; UpdateHotkey(IsFormHotkey, FOldHotkey, NewHotkey, HMForm.Hotkeys); Result := True; finally NewHotkey.Free; end; end; procedure TfrmEditHotkey.btnAddShortcutClick(Sender: TObject); begin AddShortcutEditor; if TEdit(pnlShortcuts.Controls[pred(pnlShortcuts.ControlCount)]).CanFocus then TEdit(pnlShortcuts.Controls[pred(pnlShortcuts.ControlCount)]).SetFocus; end; procedure TfrmEditHotkey.btnRemoveShortcutClick(Sender: TObject); begin RemoveLastShortcutEditor; end; procedure TfrmEditHotkey.btnShowCommandHelpClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor(edtParameters.HelpKeyword); end; procedure TfrmEditHotkey.cgHKControlsItemClick(Sender: TObject; Index: integer); begin CheckHotKeyConflicts; end; procedure TfrmEditHotkey.CheckHotKeyConflicts(DeleteConflicts: Boolean); var ConflictsCount: Integer; ShortConflicts, LongConflicts: String; procedure AddCommandConflict(Hotkey: THotkey; const AName: String); var sConflict: String; begin sConflict := Format(rsOptHotkeysUsedBy, [Hotkey.Command, AName]); AddStrWithSep(ShortConflicts, sConflict, LineEnding); AddStrWithSep(LongConflicts, sConflict, LineEnding); end; procedure AddParamsConflict(Hotkey: THotkey); var sConflict: String; Param: String; begin sConflict := rsOptHotkeysUsedWithDifferentParams; AddStrWithSep(ShortConflicts, sConflict, LineEnding); if Length(Hotkey.Params) > 0 then begin sConflict := sConflict + ':'; for Param in Hotkey.Params do AddStrWithSep(sConflict, ' ' + Param, LineEnding); end; AddStrWithSep(LongConflicts, sConflict, LineEnding); end; procedure CheckHotkey(Hotkeys: THotkeys; const AObjectName: String; HotkeyToSearch: THotkey); var Hotkey: THotkey; begin Hotkey := Hotkeys.Find(HotkeyToSearch.Shortcuts); if Assigned(Hotkey) then begin if Hotkey.Command <> FCommand then begin Inc(ConflictsCount); if DeleteConflicts then Hotkeys.Remove(Hotkey) else AddCommandConflict(Hotkey, GetTranslatedControlName(AObjectName)); end else if not Hotkey.SameParams(HotkeyToSearch.Params) then begin Inc(ConflictsCount); if DeleteConflicts then Hotkeys.Remove(Hotkey) else AddParamsConflict(Hotkey); end; end; end; var HMForm: THMForm; HMControl: THMControl; i: Integer; IsFormHotKey: Boolean; Hotkey: THotkey; begin lblHotKeyConflict.Caption := EmptyStr; lblHotKeyConflict.Hint := EmptyStr; HMForm := HotMan.Forms.Find(FForm); if not Assigned(HMForm) then Exit; Hotkey := CloneNewHotkey; try ConflictsCount := 0; if Length(Hotkey.Shortcuts) > 0 then begin IsFormHotKey := True; // search if any checked control has same hotkey assigned somewhere else for i := 0 to cgHKControls.Items.Count - 1 do begin if cgHKControls.Checked[i] then begin IsFormHotKey := False; HMControl := THMControl(cgHKControls.Items.Objects[i]); if Assigned(HMControl) then CheckHotkey(HMControl.Hotkeys, HMControl.Name, Hotkey); end; end; if IsFormHotKey then CheckHotkey(HMForm.Hotkeys, HMForm.Name, Hotkey); lblHotKeyConflict.Caption := ShortConflicts; lblHotKeyConflict.Hint := LongConflicts; end; lblHotKeyConflict.Visible := ConflictsCount > 0; finally Hotkey.Free; end; end; procedure TfrmEditHotkey.CheckHotKeyConflicts(Key: Word; Shift: TShiftState); var Index: Integer; sConflict: String; UTF8Char: TUTF8Char; OptLetters: TStringArray; SearchOrFilterModifiers: TShiftState; KeyTypingModifier: TKeyTypingModifier; begin lblHotKeyConflict.Tag:= 0; if (Key = VK_SPACE) then Exit; for KeyTypingModifier in TKeyTypingModifier do begin if gKeyTyping[KeyTypingModifier] <> ktaNone then begin SearchOrFilterModifiers := TKeyTypingModifierToShift[KeyTypingModifier]; if (Shift * KeyModifiersShortcutNoText = SearchOrFilterModifiers) then begin UTF8Char := VirtualKeyToUTF8Char(Key, Shift - SearchOrFilterModifiers); if (UTF8Char <> '') and (not ((Length(UTF8Char) = 1) and (UTF8Char[1] < #32))) then begin Index:= Ord(gKeyTyping[KeyTypingModifier]); OptLetters:= rsOptLetters.Split([';']); sConflict := Format(rsOptHotkeysUsedBy, [OptLetters[Index], rsOptionsEditorKeyboard]); lblHotKeyConflict.Caption:= sConflict; lblHotKeyConflict.Hint:= sConflict; lblHotKeyConflict.Visible:= True; lblHotKeyConflict.Tag:= 1; Break; end; end; end; end; end; function TfrmEditHotkey.CloneNewHotkey: THotkey; begin Result := THotkey.Create; Result.Shortcuts := GetShortcuts; Result.Params := GetParameters; Result.Command := FCommand; end; destructor TfrmEditHotkey.Destroy; begin inherited Destroy; FForms.Free; FFormsTranslated.Free; FOldHotkey.Free; end; procedure TfrmEditHotkey.edtShortcutKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var sShortCut: String; EditControl: TEdit; ShortCut: TShortCut; begin if (Key<>VK_RETURN) or (not gUseEnterToCloseHotKeyEditor) then begin ShortCut := KeyToShortCutEx(Key, GetKeyShiftStateEx); sShortCut := ShortCutToTextEx(ShortCut); EditControl := Sender as TEdit; // Allow closing the dialog if Escape pressed twice. if (ShortCut <> VK_ESCAPE) or (EditControl.Text <> sShortCut) then begin EditControl.Text := sShortCut; btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; CheckHotKeyConflicts; if lblHotKeyConflict.Caption = EmptyStr then begin CheckHotKeyConflicts(Key, Shift); end; Key := 0; end; end; end; procedure TfrmEditHotkey.edtShortcutKeyPress(Sender: TObject; var Key: char); var EditControl: TEdit; begin if (Key <> Char(VK_RETURN)) or (not gUseEnterToCloseHotKeyEditor) then begin EditControl := Sender as TEdit; EditControl.Text := ''; btnOK.Enabled := GetShortcuts <> nil; Key := #0; end; end; procedure TfrmEditHotkey.edtShortcutKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var ShortCut: TShortCut; sShortCut: String; EditControl: TEdit; begin if (Key <> VK_RETURN) or (not gUseEnterToCloseHotKeyEditor) then begin ShortCut := KeyToShortCutEx(Key, GetKeyShiftStateEx); sShortCut := ShortCutToTextEx(ShortCut); EditControl := Sender as TEdit; // Select next shortcut editor. if (ShortCut <> VK_ESCAPE) and (sShortCut <> '') and (EditControl.Text = sShortCut) then pnlShortcuts.SelectNext(EditControl, True, True); end; end; function TfrmEditHotkey.Execute( EditMode: Boolean; Form: String; Command: String; Hotkey: THotkey; AControls: TDynamicStringArray; Options: TEditHotkeyOptions = []): Boolean; begin FEditMode := EditMode; FForm := Form; FOptions := Options; SetHotkey(Hotkey); SetCommand(Command); SetControls(AControls); PopulateHelperMenu; if EditMode then Caption := Format(rsOptHotkeysEditHotkey, [Command]) else Caption := Format(rsOptHotkeysAddHotkey, [Command]); lblParameters.Visible := not (ehoHideParams in Options); edtParameters.Visible := not (ehoHideParams in Options); btnShowCommandHelp.Visible := not (ehoHideParams in Options); btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; lblHotKeyConflict.Hint := ''; lblHotKeyConflict.Visible := False; if ShowModal = mrOK then Result := ApplyHotkey else Result := False; end; procedure TfrmEditHotkey.FillHKControlList; var HMForm: THMForm; i: Integer; ControlsList: TStringList; begin ControlsList := TStringList.Create; try HMForm := HotMan.Forms.Find(FForm); if Assigned(HMForm) then begin for i := 0 to HMForm.Controls.Count - 1 do ControlsList.AddObject(HMForm.Controls[i].Name, HMForm.Controls[i]); end; ControlsList.Sort; cgHKControls.Items.Assign(ControlsList); cgHKControls.Visible := cgHKControls.Items.Count <> 0; finally ControlsList.Free; end; end; procedure TfrmEditHotkey.FormCreate(Sender: TObject); begin FForms := TStringList.Create; FFormsTranslated := TStringList.Create; TFormCommands.GetCategoriesList(FForms, FFormsTranslated); SetBitmapOrCaption(btnAddShortcut, 'list-add', '+'); SetBitmapOrCaption(btnRemoveShortcut, 'list-remove', '-'); AddShortcutEditor; end; procedure TfrmEditHotkey.FormShow(Sender: TObject); var EditControl: TEdit; begin if pnlShortcuts.ControlCount > 0 then begin EditControl := pnlShortcuts.Controls[0] as TEdit; EditControl.SetFocus; EditControl.SelStart := Length(EditControl.Text); EditControl.SelLength := 0; end; end; function TfrmEditHotkey.GetParameters: TDynamicStringArray; begin Result := GetArrayFromStrings(edtParameters.Lines); end; function TfrmEditHotkey.GetShortcuts: TDynamicStringArray; var i: Integer; EditControl: TEdit; begin Result := nil; for i := 0 to pnlShortcuts.ControlCount - 1 do begin EditControl := pnlShortcuts.Controls[i] as TEdit; if EditControl.Text <> '' then AddString(Result, EditControl.Text); end; end; function TfrmEditHotkey.GetShortcutsEditorsCount: Integer; begin Result := pnlShortcuts.ControlCount; end; function TfrmEditHotkey.GetTranslatedControlName(const AName: String): String; begin // TODO: Translate controls names. Result := AName; end; function TfrmEditHotkey.GetTranslatedFormName(const AName: String): String; var i: Integer; begin i := FForms.IndexOf(AName); if i >= 0 then Result := FFormsTranslated.Strings[i] else Result := AName; end; procedure TfrmEditHotkey.RemoveLastShortcutEditor; begin if pnlShortcuts.ControlCount > 1 then pnlShortcuts.Controls[pnlShortcuts.ControlCount - 1].Free; end; procedure TfrmEditHotkey.SetBitmapOrCaption(Button: TSpeedButton; const AIconName, ACaption: String); var Bmp: TBitmap = nil; IconIndex: PtrInt; begin IconIndex := PixMapManager.GetIconByName(AIconName); if IconIndex <> -1 then Bmp := PixMapManager.GetBitmap(IconIndex); if Assigned(Bmp) then begin Button.Glyph := Bmp; Bmp.Free; end else begin Button.Caption := ACaption; end; end; procedure TfrmEditHotkey.SetCommand(NewCommand: String); begin FCommand := NewCommand; btnShowCommandHelp.Caption := Format(rsShowHelpFor, [FCommand]); edtParameters.HelpKeyword := '/cmds.html#' + FCommand; end; procedure TfrmEditHotkey.SetControls(const NewControls: TDynamicStringArray); var sControl: String; i: Integer; begin FillHKControlList; // Mark controls to which hotkey applies. for i := 0 to cgHKControls.Items.Count - 1 do begin cgHKControls.Checked[i] := False; for sControl in NewControls do if cgHKControls.Items[i] = sControl then begin cgHKControls.Checked[i] := True; Break; end; end; end; procedure TfrmEditHotkey.SetHotkey(Hotkey: THotkey); begin FreeAndNil(FOldHotkey); if Assigned(Hotkey) then begin FOldHotkey := Hotkey.Clone; SetShortcuts(Hotkey.Shortcuts); SetParameters(Hotkey.Params); end else begin SetShortcuts(nil); SetParameters(nil); end; end; procedure TfrmEditHotkey.SetParameters(const NewParameters: TDynamicStringArray); begin SetStringsFromArray(edtParameters.Lines, NewParameters); end; procedure TfrmEditHotkey.SetShortcuts(const NewShortcuts: TDynamicStringArray); var Index: Integer; EditControl: TEdit; Shortcut: String; begin if Assigned(NewShortcuts) then begin while pnlShortcuts.ControlCount < Length(NewShortcuts) do AddShortcutEditor; while pnlShortcuts.ControlCount > Length(NewShortcuts) do RemoveLastShortcutEditor; Index := 0; for Shortcut in NewShortcuts do begin EditControl := pnlShortcuts.Controls[Index] as TEdit; EditControl.Text := Shortcut; Inc(Index); end; end else begin while pnlShortcuts.ControlCount > 1 do RemoveLastShortcutEditor; if pnlShortcuts.ControlCount > 0 then begin EditControl := pnlShortcuts.Controls[0] as TEdit; EditControl.Clear; end; end; end; { TfrmEditHotkey.ShortcutHelperClick } procedure TfrmEditHotkey.ShortcutHelperClick(Sender: TObject); var EditControl:TEdit=nil; iSeeker:integer; begin for iSeeker:=0 to pred(pnlShortcuts.ControlCount) do if TEdit(pnlShortcuts.Controls[iSeeker]).Focused then EditControl:=TEdit(pnlShortcuts.Controls[iSeeker]); if (EditControl=nil) AND (pnlShortcuts.ControlCount>0) then EditControl:=TEdit(pnlShortcuts.Controls[pred(pnlShortcuts.ControlCount)]); if EditControl<>nil then begin EditControl.Text:=TMenuItem(Sender).Caption; btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; CheckHotKeyConflicts; // Select next shortcut editor. pnlShortcuts.SelectNext(EditControl, True, True); end; end; { TfrmEditHotKey.PopulateHelperMenu } procedure TfrmEditHotkey.PopulateHelperMenu; const STD_PREFIX=6; CommandPrefix:array[0..pred(STD_PREFIX)] of string =('','Alt+','Ctrl+','Shift+','Ctrl+Shift+','Shift+Alt+'); var ASubMenu:TMenuItem; AMenuItem:TMenuItem; sMaybeSC:string; iPrefix,iFunction:integer; HMForm: THMForm; Hotkeys: THotkeys; i,j:integer; slAllShortcuts:TStringList; begin slAllShortcuts:=TStringList.Create; try slAllShortcuts.Sorted:=True; slAllShortcuts.Duplicates:=dupIgnore; //1. Clear any previous menu entries. pmWithAllShortcuts.Items.Clear; //2. Scan to get all the shortcuts in a TStringList HMForm := HotMan.Forms.Find(FForm); if not Assigned(HMForm) then Exit; Hotkeys := HMForm.Hotkeys; for i:=0 to pred(Hotkeys.Count) do for j:=0 to pred(length(Hotkeys.Items[i].Shortcuts)) do slAllShortcuts.Add(Hotkeys.Items[i].Shortcuts[j]); //3. Begin to populate menu with the "F" fonction keys for iPrefix:=0 to pred(STD_PREFIX) do begin ASubMenu:=TMenuItem.Create(pmWithAllshortcuts); ASubMenu.Caption := CommandPrefix[iPrefix]+'Fx...'; pmWithAllShortcuts.Items.Add(ASubMenu); for iFunction:=1 to 12 do begin sMaybeSC:=Format('%sF%d',[CommandPrefix[iPrefix],iFunction]); if slAllShortcuts.IndexOf(sMaybeSC)=-1 then begin AMenuItem:=TMenuItem.Create(pmWithAllShortcuts); AMenuItem.Caption:=sMaybeSC; AMenuItem.Enabled:=(slAllShortcuts.IndexOf(sMaybeSC)=-1); if AMenuItem.Enabled then AMenuItem.OnClick:=@ShortcutHelperClick; ASubMenu.Add(AMenuItem); end; end; end; //4. Then a little separator ASubMenu:=TMenuItem.Create(pmWithAllshortcuts); ASubMenu.Caption:='-'; pmWithAllShortcuts.Items.Add(ASubMenu); //5. Continue to populate with the "letter" fonction keys for iPrefix:=2 to pred(STD_PREFIX) do begin ASubMenu:=TMenuItem.Create(pmWithAllshortcuts); ASubMenu.Caption:=CommandPrefix[iPrefix]+rsSimpleWordLetter; pmWithAllShortcuts.Items.Add(ASubMenu); for iFunction:=0 to pred(26) do begin sMaybeSC:=Format('%s%s',[CommandPrefix[iPrefix],AnsiChar(ord('A')+iFunction)]); if slAllShortcuts.IndexOf(sMaybeSC)=-1 then begin AMenuItem:=TMenuItem.Create(pmWithAllShortcuts); AMenuItem.Caption:=sMaybeSC; AMenuItem.Enabled:=(slAllShortcuts.IndexOf(sMaybeSC)=-1); if AMenuItem.Enabled then AMenuItem.OnClick:=@ShortcutHelperClick; ASubMenu.Add(AMenuItem); end; end; end; //6. Little separator ASubMenu:=TMenuItem.Create(pmWithAllshortcuts); ASubMenu.Caption:='-'; pmWithAllShortcuts.Items.Add(ASubMenu); //7. Option for the "Enter" ASubMenu := TMenuItem.Create(pmWithAllshortcuts); ASubMenu.Caption := rsHotKeyNoSCEnter; ASubMenu.Checked := gUseEnterToCloseHotKeyEditor; ASubMenu.OnClick := @ChangeEnterBehaviorClick; pmWithAllShortcuts.Items.Add(ASubMenu); finally FreeAndNil(slAllShortcuts); end; end; procedure TfrmEditHotkey.btnSelectFromListClick(Sender: TObject); begin pmWithAllShortcuts.PopUp(Mouse.CursorPos.x, Mouse.CursorPos.y); end; { TfrmEditHotkey.ChangeEnterBehaviorClick } procedure TfrmEditHotkey.ChangeEnterBehaviorClick(Sender: TObject); begin TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked; gUseEnterToCloseHotKeyEditor := TMenuItem(Sender).Checked; end; end. doublecmd-1.1.30/src/foptionshotkeysedithotkey.lrj0000644000175000001440000000324715104114162021435 0ustar alexxusers{"version":1,"strings":[ {"hash":162485258,"name":"tfrmedithotkey.lblshortcuts.caption","sourcebytes":[83,104,111,114,116,99,117,116,115,58],"value":"Shortcuts:"}, {"hash":150847754,"name":"tfrmedithotkey.lblparameters.caption","sourcebytes":[38,80,97,114,97,109,101,116,101,114,115,32,40,101,97,99,104,32,105,110,32,97,32,115,101,112,97,114,97,116,101,32,108,105,110,101,41,58],"value":"&Parameters (each in a separate line):"}, {"hash":238221475,"name":"tfrmedithotkey.cghkcontrols.caption","sourcebytes":[79,110,108,121,32,102,111,114,32,116,104,101,115,101,32,99,111,110,116,114,111,108,115],"value":"Only for these controls"}, {"hash":11067,"name":"tfrmedithotkey.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmedithotkey.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":14152757,"name":"tfrmedithotkey.btnaddshortcut.hint","sourcebytes":[65,100,100,32,110,101,119,32,115,104,111,114,116,99,117,116,32,116,111,32,115,101,113,117,101,110,99,101],"value":"Add new shortcut to sequence"}, {"hash":68285637,"name":"tfrmedithotkey.btnremoveshortcut.hint","sourcebytes":[82,101,109,111,118,101,32,108,97,115,116,32,115,104,111,114,116,99,117,116,32,102,114,111,109,32,115,101,113,117,101,110,99,101],"value":"Remove last shortcut from sequence"}, {"hash":224712627,"name":"tfrmedithotkey.btnselectfromlist.hint","sourcebytes":[83,101,108,101,99,116,32,115,104,111,114,116,99,117,116,32,102,114,111,109,32,108,105,115,116,32,111,102,32,114,101,109,97,105,110,105,110,103,32,102,114,101,101,32,97,118,97,105,108,97,98,108,101,32,107,101,121,115],"value":"Select shortcut from list of remaining free available keys"} ]} doublecmd-1.1.30/src/foptionshotkeysedithotkey.lfm0000644000175000001440000002062415104114162021422 0ustar alexxusersobject frmEditHotkey: TfrmEditHotkey Left = 577 Height = 465 Top = 168 Width = 458 BorderIcons = [biSystemMenu] ClientHeight = 465 ClientWidth = 458 Constraints.MinHeight = 200 Constraints.MinWidth = 200 OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter ShowHint = True LCLVersion = '3.3.0.0' object lblShortcuts: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = Owner AnchorSideBottom.Control = btnSelectFromList AnchorSideBottom.Side = asrBottom Left = 8 Height = 15 Top = 13 Width = 53 Anchors = [akLeft, akBottom] BorderSpacing.Top = 6 Caption = 'Shortcuts:' ParentColor = False end object pnlShortcuts: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnSelectFromList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 0 Top = 28 Width = 442 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 8 BorderSpacing.Right = 8 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 TabOrder = 0 end object lblHotKeyConflict: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = pnlShortcuts AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 32 Width = 442 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 Font.Style = [fsBold, fsUnderline] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True Visible = False WordWrap = True end object lblParameters: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = lblHotKeyConflict AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 39 Width = 189 BorderSpacing.Top = 6 Caption = '&Parameters (each in a separate line):' FocusControl = edtParameters ParentColor = False end object edtParameters: TMemo AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = lblParameters AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnShowCommandHelp Left = 8 Height = 328 Top = 54 Width = 442 HelpType = htKeyword Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Bottom = 2 ScrollBars = ssAutoBoth TabOrder = 1 WordWrap = False end object btnShowCommandHelp: TButton AnchorSideLeft.Control = pnlShortcuts AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cgHKControls Left = 8 Height = 10 Top = 386 Width = 442 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 4 TabOrder = 2 OnClick = btnShowCommandHelpClick end object cgHKControls: TCheckGroup AnchorSideLeft.Control = pnlShortcuts AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnOK Left = 8 Height = 19 Top = 396 Width = 442 Anchors = [akLeft, akRight, akBottom] AutoFill = True AutoSize = True Caption = 'Only for these controls' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 OnItemClick = cgHKControlsItemClick TabOrder = 3 Visible = False end object btnOK: TBitBtn AnchorSideLeft.Control = pnlShortcuts AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 8 Height = 40 Top = 419 Width = 120 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Top = 4 BorderSpacing.Bottom = 6 Caption = '&OK' Constraints.MinHeight = 40 Constraints.MinWidth = 120 Default = True Kind = bkOK ModalResult = 1 TabOrder = 4 end object btnCancel: TBitBtn AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 330 Height = 40 Top = 419 Width = 120 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 Cancel = True Caption = '&Cancel' Constraints.MinHeight = 40 Constraints.MinWidth = 120 Kind = bkCancel ModalResult = 2 TabOrder = 5 end object btnAddShortcut: TSpeedButton AnchorSideTop.Control = btnRemoveShortcut AnchorSideRight.Control = btnRemoveShortcut Left = 406 Height = 22 Hint = 'Add new shortcut to sequence' Top = 6 Width = 22 Anchors = [akTop, akRight] OnClick = btnAddShortcutClick ShowHint = True ParentShowHint = False end object btnRemoveShortcut: TSpeedButton AnchorSideTop.Control = Owner AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom Left = 428 Height = 22 Hint = 'Remove last shortcut from sequence' Top = 6 Width = 22 Anchors = [akTop, akRight] BorderSpacing.Top = 6 OnClick = btnRemoveShortcutClick ShowHint = True ParentShowHint = False end object btnSelectFromList: TSpeedButton AnchorSideTop.Control = btnRemoveShortcut AnchorSideRight.Control = btnAddShortcut Left = 382 Height = 22 Hint = 'Select shortcut from list of remaining free available keys' Top = 6 Width = 24 Anchors = [akTop, akRight] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000140000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000330000003300000014FFFFFF0073706F849390 8EFF93908EFF93908EFF93908EFF93908EFF93908EFF93908EFF93908EFF9390 8EFF93908EFF93908EFF93908EFF93908EFF73706F84FFFFFF00959290FFF1F2 F1FFD3D3D2FFD4D3D2FFD4D3D2FFD4D3D2FFD4D3D2FFD4D3D2FFD4D3D2FFD4D3 D2FFD4D3D2FFD4D3D2FFD3D3D2FFF1F1F0FF9A9796FFFFFFFF00969391FFF0F0 EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEFEEFFADAAA9FFFFFFFF00999694FFEFEF EFFFFFFFFFFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFD FDFFFDFDFDFFFDFDFDFFFFFFFFFFE9E9E9FFAEABAAFFFFFFFF009C9996FFEAEA EAFFFFFFFFFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFA FAFFFAFAFAFFFAFAFAFFFFFFFFFFE4E4E4FFB0AEADFFFFFFFF009E9B99FFE5E6 E6FFFFFFFFFFFBFBFBFFF8F8F9FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7 F7FFF7F7F7FFF6F6F6FFFFFFFFFFE0E0DFFFB1B0AEFFFFFFFF00A09D9BFFE1E1 E1FFFFFFFFFF696969FFFAFAF9FFF4F4F3FFF4F4F3FFF4F4F3FF696969FF6969 69FF696969FFF3F3F2FFFFFFFFFFDBDBDBFFB4B2B0FFFFFFFF00A3A09EFFDCDC DCFFFFFFFFFF6F6F6FFFFEFEFCFFF6F6F5FFF2F2F1FFF1F1F0FFF1F1F0FF6F6F 6FFFF1F1F0FFF0F0EFFFFFFFFFFFD6D7D7FFB6B4B2FFFFFFFF00A5A3A1FFD9D8 D8FFFFFFFFFF727272FF727272FF6B6B6BFFF2F2F1FFEEEEEDFFEEEEEDFF7272 72FFEEEEEDFFEDEDECFFFFFFFFFFD3D2D2FFB7B6B4FFFFFFFF00A8A5A3FFD4D3 D2FFFFFFFFFF707070FFF7F7F6FFF0F1EFFFECECEBFFEBEBEAFFEBEBEAFF7070 70FFEBEBEAFFEAEAE9FFFFFFFFFFCECDCCFFBAB8B7FFFFFFFF00ABA8A6FFCFCE CDFFFFFFFFFF707070FFF4F3F3FFEEEDEDFFEDECECFFE9E8E8FFE8E7E7FF7070 70FFE8E7E7FFE7E5E5FFFFFFFFFFCAC9C8FFBCBAB8FFFFFFFF00ADABA9FFC9CA C9FFFFFFFFFF6D6D6DFF707070FF6F6F6FFF6A6A6AFFE7E6E5FF696969FF6D6D 6DFFE3E2E1FFE2E1E0FFFFFFFFFFC5C5C4FFBDBCBAFFFFFFFF00AFADABFFC2C1 C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFC0BFBEFFC0BEBDFFFFFFFF00B1AFADFFE4E4 E3FFF1F1F1FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFF1F1F1FFE3E4E3FFB5B3B1FFFFFFFF00B5B3B165B3B1 AFFFB2AFADFFB1AFADFFB1AFADFFB1AFADFFB1AFADFFB1AFADFFB1AFADFFB1AF ADFFB1AFADFFB1AFADFFB2AFADFFB3B1AEFFB4B2B065FFFFFF00 } OnClick = btnSelectFromListClick end object pmWithAllShortcuts: TPopupMenu Left = 310 Top = 13 end end doublecmd-1.1.30/src/foptions.pas0000644000175000001440000004403015104114162015723 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implementing of Options dialog Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) contributors: Radek Cervinka This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOptions; {$mode objfpc}{$H+} interface uses ActnList, SysUtils, Classes, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, Buttons, StdCtrls, LMessages, TreeFilterEdit, KASButtonPanel, fgl, uGlobs, fOptionsFrame, uDCUtils, EditBtn; type { TOptionsEditorView } TOptionsEditorView = class EditorClass: TOptionsEditorClass; Instance: TOptionsEditor; TreeNode: TTreeNode; LegacyOrderIndex: integer; end; TOptionsEditorViews = specialize TFPGObjectList; { TfrmOptions } TfrmOptions = class(TForm, IOptionsDialog) btnHelp: TBitBtn; lblEmptyEditor: TLabel; OptionsEditorsImageList: TImageList; pnlButtons: TKASButtonPanel; Panel3: TPanel; pnlCaption: TPanel; btnOK: TBitBtn; btnApply: TBitBtn; btnCancel: TBitBtn; sboxOptionsEditor: TScrollBox; TreeFilterEdit: TTreeFilterEdit; tvTreeView: TTreeView; splOptionsSplitter: TSplitter; procedure btnCancelClick(Sender: TObject); procedure btnCancelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure btnHelpClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnApplyClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure splOptionsSplitterMoved(Sender: TObject); function TreeFilterEditFilterItem(ItemData: Pointer; out Done: Boolean): Boolean; procedure tvTreeViewChange(Sender: TObject; Node: TTreeNode); private FOptionsEditorList: TOptionsEditorViews; FOldEditor: TOptionsEditorView; function CreateEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; procedure CreateOptionsEditorList; function GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; procedure LoadSettings; procedure SelectEditor(EditorClassName: String); function CompareTwoNodeOfConfigurationOptionTree(Node1, Node2: TTreeNode): integer; function CycleThroughOptionEditors(bForceSaving:boolean):boolean; procedure MakeVisible(Data: PtrInt); protected procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent; EditorClass: TOptionsEditorClass); overload; constructor Create(TheOwner: TComponent; EditorClassName: String); overload; procedure LoadConfig; procedure SaveConfig; end; function ShowOptions(EditorClass: TOptionsEditorClass = nil): IOptionsDialog; function ShowOptions(EditorClassName: String): IOptionsDialog; procedure SortConfigurationOptionsOnLeftTree; //If the var "frmOptions" would be in the interface section, we could have called directly "frmOptions.tvTreeView.CustomSort(@frmOptions.CompareTwoNodeOfConfigurationOptionTree);" //But it's not the case... Let's create this routine and respect the wish of original authors to have it there. Maybe there is a raison why so let's play safe. function GetOptionsForm: TfrmOptions; implementation {$R *.lfm} uses HelpIntfs, LCLProc, LCLVersion, LazUTF8, LResources, Menus, Translations, Graphics, DCStrUtils, uTranslator, uLng, uGlobsPaths, fMain; var LastOpenedEditor: TOptionsEditorClass = nil; OptionsSearchFile: TPOFile = nil; OptionsSearchCache: TList = nil; frmOptions: TfrmOptions = nil; procedure CreateSearchCache; var POFile: TPOFile; procedure FillCache(AList: TOptionsEditorClassList); var I, J: Integer; AClassName: String; PoFileItem: TPoFileItem; AEditor: TOptionsEditorRec; begin for I:= 0 to AList.Count - 1 do begin AEditor:= AList[I]; AClassName:= LowerCase(AEditor.EditorClass.ClassName); for J:= 0 to POFile.Count - 1 do begin PoFileItem:= POFile.PoItems[J]; if StrBegins(PoFileItem.IdentifierLow, AClassName) then begin OptionsSearchCache.Add(PoFileItem); end; end; if AEditor.HasChildren then FillCache(AEditor.Children); end; end; begin OptionsSearchCache:= TList.Create; try if Assigned(LRSTranslator) then POFile:= (LRSTranslator as TTranslator).POFile else begin POFile:= TPOFile.Create(gpLngDir + gPOFileName, True); OptionsSearchFile:= POFile; end; FillCache(OptionsEditorClassList); except // Skip end; end; { GetOptionsForm } // To get a point on the frmOptions. // Could have been simple to place "frmOptions" in the "interface" section but not sure why original author hide it under. Let's play safe. function GetOptionsForm: TfrmOptions; begin Result := frmOptions; end; function ShowOptions(EditorClass: TOptionsEditorClass): IOptionsDialog; begin Result := ShowOptions(EditorClass.ClassName); end; function ShowOptions(EditorClassName: String): IOptionsDialog; begin if (OptionsSearchCache = nil) then begin CreateSearchCache; end; if Assigned(frmOptions) then begin if frmOptions.WindowState = wsMinimized then frmOptions.WindowState:= wsNormal else frmOptions.BringToFront; frmOptions.SelectEditor(EditorClassName); end else begin if EditorClassName = '' then frmOptions := TfrmOptions.Create(Application) else frmOptions := TfrmOptions.Create(Application, EditorClassName); frmOptions.Show; end; Result := frmOptions; end; procedure SortConfigurationOptionsOnLeftTree; begin if frmOptions<>nil then frmOptions.tvTreeView.CustomSort(@frmOptions.CompareTwoNodeOfConfigurationOptionTree); end; { TfrmOptions } procedure TfrmOptions.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); TreeFilterEdit.Visible:= (OptionsSearchCache.Count > 0); end; procedure TfrmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; frmOptions:= nil; end; procedure TfrmOptions.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin CanClose := (ModalResult in [mrOK, mrCancel]) or CycleThroughOptionEditors(False); end; procedure TfrmOptions.btnCancelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // set ModalResult when mouse click, to pass FormCloseQuery ModalResult:= mrCancel; end; procedure TfrmOptions.btnCancelClick(Sender: TObject); begin // close window Close; end; procedure TfrmOptions.btnHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', HelpKeyword); end; procedure TfrmOptions.btnOKClick(Sender: TObject); begin // save all configuration SaveConfig; // write to config file SaveGlobs; // close window Close; end; procedure TfrmOptions.btnApplyClick(Sender: TObject); begin // save all configuration SaveConfig; // write to config file SaveGlobs; end; procedure TfrmOptions.FormDestroy(Sender: TObject); begin FreeAndNil(FOptionsEditorList); end; procedure TfrmOptions.splOptionsSplitterMoved(Sender: TObject); var ARight, ADelta: Integer; begin ADelta:= ScaleX(8, DesignTimePPI) * 2 + btnHelp.Width; ARight:= splOptionsSplitter.Left; if (ARight > (btnOK.Left - ADelta)) then begin ARight:= btnOK.Left - ADelta; end; TreeFilterEdit.Width:= (ARight - TreeFilterEdit.Left); end; function TfrmOptions.TreeFilterEditFilterItem(ItemData: Pointer; out Done: Boolean): Boolean; var Index: Integer; AClassName: String; AFind, AText: String; POFileItem: TPOFileItem; aOptionsEditorView: TOptionsEditorView absolute ItemData; begin Done:= True; AFind:= TreeFilterEdit.Text; if Length(AFind) = 0 then Exit(True); AFind:= UTF8LowerCase(AFind); AClassName:= LowerCase(aOptionsEditorView.EditorClass.ClassName); for Index:= 0 to OptionsSearchCache.Count - 1 do begin POFileItem:= TPOFileItem(OptionsSearchCache[Index]); if Length(POFileItem.Translation) = 0 then AText:= POFileItem.Original else begin AText:= POFileItem.Translation; end; AText:= UTF8LowerCase(StripHotkey(AText)); if Pos(AFind, AText) > 0 then begin if StrBegins(POFileItem.IdentifierLow, AClassName) then begin // DebugLn(AClassName + ': ' + AText); Exit(True); end; end; end; Result:= False; end; function TfrmOptions.CompareTwoNodeOfConfigurationOptionTree(Node1, Node2: TTreeNode): integer; begin case gSortOrderOfConfigurationOptionsTree of scoClassicLegacy: begin if TOptionsEditorView(Node1.Data).LegacyOrderIndex < TOptionsEditorView(Node2.Data).LegacyOrderIndex then result:=-1 else result:=1; end; scoAlphabeticalButLanguage: begin if (TOptionsEditorView(Node1.Data).EditorClass.ClassName='TfrmOptionsLanguage') or (TOptionsEditorView(Node1.Data).EditorClass.ClassName='TfrmOptionsFilesViewsComplement') then result:=-1 else if (TOptionsEditorView(Node2.Data).EditorClass.ClassName='TfrmOptionsLanguage') or (TOptionsEditorView(Node1.Data).EditorClass.ClassName='TfrmOptionsFilesViewsComplement') then result:=1 else result:=CompareStrings(Node1.Text, Node2.Text, gSortNatural, gSortSpecial, gSortCaseSensitivity) end; end; end; procedure TfrmOptions.CreateOptionsEditorList; procedure AddEditors(EditorClassList: TOptionsEditorClassList; RootNode: TTreeNode); var I: LongInt; aOptionsEditorClass: TOptionsEditorClass; aOptionsEditorView: TOptionsEditorView; TreeNode: TTreeNode; IconIndex: Integer; begin for I:= 0 to EditorClassList.Count - 1 do begin aOptionsEditorClass := EditorClassList[I].EditorClass; aOptionsEditorView := TOptionsEditorView.Create; aOptionsEditorView.EditorClass := aOptionsEditorClass; aOptionsEditorView.Instance := nil; aOptionsEditorView.LegacyOrderIndex:=I; FOptionsEditorList.Add(aOptionsEditorView); TreeNode := tvTreeView.Items.AddChild(RootNode, {$IF lcl_fullversion >= 093100} aOptionsEditorClass.GetTitle {$ELSE} StringReplace(aOptionsEditorClass.GetTitle, '&', '&&', [rfReplaceAll]) {$ENDIF} ); if Assigned(TreeNode) then begin IconIndex := aOptionsEditorClass.GetIconIndex; TreeNode.ImageIndex := IconIndex; TreeNode.SelectedIndex := IconIndex; TreeNode.StateIndex := IconIndex; TreeNode.Data := aOptionsEditorView; end; aOptionsEditorView.TreeNode := TreeNode; if EditorClassList[I].HasChildren then AddEditors(EditorClassList[I].Children, TreeNode); end; //2014-08-12:Let's sort by alphabetical order this list. tvTreeView.CustomSort(@CompareTwoNodeOfConfigurationOptionTree); end; begin FOptionsEditorList:= TOptionsEditorViews.Create; AddEditors(OptionsEditorClassList, nil); case gCollapseConfigurationOptionsTree of ctsFullExpand: ; //By legacy, it was doing automaticall the tvTreeView.FullExpand; ctsFullCollapse: tvTreeView.FullCollapse; end; end; function TfrmOptions.GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; var I: Integer; begin for I := 0 to FOptionsEditorList.Count - 1 do begin if FOptionsEditorList[I].EditorClass = EditorClass then begin if not Assigned(FOptionsEditorList[I].Instance) then FOptionsEditorList[I].Instance := CreateEditor(FOptionsEditorList[I].EditorClass); Result := FOptionsEditorList[I].Instance; Exit; end; end; Result := nil; end; procedure TfrmOptions.LoadSettings; begin LoadConfig; end; procedure TfrmOptions.SelectEditor(EditorClassName: String); var I: Integer; begin for I := 0 to FOptionsEditorList.Count - 1 do begin if (FOptionsEditorList[I].EditorClass.ClassName = EditorClassName) then if Assigned(FOptionsEditorList[I].TreeNode) then begin FOptionsEditorList[I].TreeNode.Selected := True; Application.QueueAsyncCall(@MakeVisible, PtrInt(FOptionsEditorList[I].TreeNode)); Break; end; end; end; constructor TfrmOptions.Create(TheOwner: TComponent); begin if not Assigned(LastOpenedEditor) and (OptionsEditorClassList.Count > 0) then LastOpenedEditor := OptionsEditorClassList[0].EditorClass; // Select first editor. Create(TheOwner, LastOpenedEditor); end; constructor TfrmOptions.Create(TheOwner: TComponent; EditorClass: TOptionsEditorClass); begin if Assigned(EditorClass) then Create(TheOwner, EditorClass.ClassName) else Create(TheOwner, ''); end; constructor TfrmOptions.Create(TheOwner: TComponent; EditorClassName: String); begin if (EditorClassName = '') and Assigned(LastOpenedEditor) then EditorClassName := LastOpenedEditor.ClassName; FOldEditor := nil; inherited Create(TheOwner); CreateOptionsEditorList; SelectEditor(EditorClassName); {$if lcl_fullversion >= 2030000} // Lazarus 2.3 workaround (fixes selection reset) TreeFilterEdit.IdleConnected := False; {$endif} end; procedure TfrmOptions.tvTreeViewChange(Sender: TObject; Node: TTreeNode); var SelectedEditorView: TOptionsEditorView; begin if (Node = nil) then Exit; SelectedEditorView := TOptionsEditorView(Node.Data); if Assigned(SelectedEditorView) and (FOldEditor <> SelectedEditorView) then begin if Assigned(FOldEditor) and Assigned(FOldEditor.Instance) then FOldEditor.Instance.Visible := False; if not Assigned(SelectedEditorView.Instance) then SelectedEditorView.Instance := CreateEditor(SelectedEditorView.EditorClass); if Assigned(SelectedEditorView.Instance) then SelectedEditorView.Instance.Visible := True; lblEmptyEditor.Visible := not Assigned(SelectedEditorView.Instance); FOldEditor := SelectedEditorView; LastOpenedEditor := SelectedEditorView.EditorClass; pnlCaption.Caption := SelectedEditorView.EditorClass.GetTitle; if Assigned(SelectedEditorView.Instance) then begin HelpKeyword:= SelectedEditorView.Instance.HelpKeyword; btnHelp.Visible := HelpKeyword <> ''; end else btnHelp.Visible:= False; end; end; function TfrmOptions.CreateEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; begin if Assigned(EditorClass) and not EditorClass.IsEmpty then begin Result := EditorClass.Create(Self); Result.Align := alClient; Result.Visible := False; Result.Init(sboxOptionsEditor, Self, [oeifLoad]); end else Result := nil; end; procedure TfrmOptions.LoadConfig; var I: LongInt; begin { Load options to frames } for I:= 0 to FOptionsEditorList.Count - 1 do begin if Assigned(FOptionsEditorList[I].Instance) then FOptionsEditorList[I].Instance.LoadSettings; end; end; procedure TfrmOptions.SaveConfig; begin CycleThroughOptionEditors(True); end; { TfrmOptions.CycleThroughOptionEditors } // -Will cycle through all option editors to either: // >Prompt user to save change if any, discard change if any, etc. // >Force saving eventual modification without asking. // -In case we prompt user save changes or not, user may answer that he wants to // CANCEL exit. If so, that's the only case where the function will return FALSE. // -Could be call from a simple "APPLY" or "OK" from the main option window and // if so, will save any modification. // -Could be call from "CANCEL" or "Attempt to close with the 'x' of the window // and if so, will prompt user to save modifications, discard modification or // cancel exiting. function TfrmOptions.CycleThroughOptionEditors(bForceSaving: boolean): boolean; var I: integer; SaveFlags: TOptionsEditorSaveFlags = []; bNeedsRestart: boolean = False; begin Result := True; I := 0; while (I < FOptionsEditorList.Count) and (Result) do begin if Assigned(FOptionsEditorList[I].Instance) then begin try Result := FOptionsEditorList[I].Instance.CanWeClose(SaveFlags, bForceSaving); if oesfNeedsRestart in SaveFlags then bNeedsRestart := True; except on E: Exception do MessageDlg(FOptionsEditorList[I].Instance.GetTitle, E.Message, mtError, [mbOK], 0); end; end; Inc(I); end; if bNeedsRestart then MessageDlg(rsMsgRestartForApplyChanges, mtInformation, [mbOK], 0); frmMain.UpdateWindowView; // Let's refresh the views. // In fact, may settings would not really require it since they don't have an immediate visual impact. // But let's do it for two reasons: // 1st) Previously with "SaveConfig" it was updating it no matter what. // 2nd) The little delay and visual blink it gives to user is a good feedback to him confirming him he just saved settings. end; procedure TfrmOptions.MakeVisible(Data: PtrInt); var TreeNode: TTreeNode absolute Data; begin TreeNode.MakeVisible; TreeFilterEdit.StoreSelection; end; procedure TfrmOptions.CMThemeChanged(var Message: TLMessage); var Index: Integer; begin for Index:= 0 to FOptionsEditorList.Count - 1 do begin if Assigned(FOptionsEditorList[Index].Instance) then begin FOptionsEditorList[Index].Instance.Perform(CM_THEMECHANGED, 0, 0); end; end; end; finalization FreeAndNil(OptionsSearchCache); FreeAndNil(OptionsSearchFile); end. doublecmd-1.1.30/src/foptions.lrj0000644000175000001440000000176315104114162015735 0ustar alexxusers{"version":1,"strings":[ {"hash":108725763,"name":"tfrmoptions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"}, {"hash":80592254,"name":"tfrmoptions.lblemptyeditor.caption","sourcebytes":[80,108,101,97,115,101,32,115,101,108,101,99,116,32,111,110,101,32,111,102,32,116,104,101,32,115,117,98,112,97,103,101,115,44,32,116,104,105,115,32,112,97,103,101,32,100,111,101,115,32,110,111,116,32,99,111,110,116,97,105,110,32,97,110,121,32,115,101,116,116,105,110,103,115,46],"value":"Please select one of the subpages, this page does not contain any settings."}, {"hash":2812976,"name":"tfrmoptions.btnhelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, {"hash":11067,"name":"tfrmoptions.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmoptions.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":44595001,"name":"tfrmoptions.btnapply.caption","sourcebytes":[38,65,112,112,108,121],"value":"&Apply"} ]} doublecmd-1.1.30/src/foptions.lfm0000644000175000001440000013254215104114162015724 0ustar alexxusersobject frmOptions: TfrmOptions Left = 372 Height = 600 Top = 55 Width = 800 HelpType = htKeyword ActiveControl = tvTreeView Caption = 'Options' ClientHeight = 600 ClientWidth = 800 OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;Left;Top;TreeFilterEdit.Width;tvTreeView.Width;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '2.2.5.0' object tvTreeView: TTreeView Left = 0 Height = 437 Top = 0 Width = 193 Align = alLeft AutoExpand = True Images = OptionsEditorsImageList ReadOnly = True RowSelect = True ScrollBars = ssAutoBoth TabOrder = 0 OnChange = tvTreeViewChange Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end object Panel3: TPanel Left = 196 Height = 437 Top = 0 Width = 444 Align = alClient BevelOuter = bvNone ClientHeight = 437 ClientWidth = 444 TabOrder = 1 object pnlCaption: TPanel Left = 0 Height = 23 Top = 0 Width = 444 Align = alTop Color = clActiveCaption Font.Color = clCaptionText Font.Style = [fsBold] ParentColor = False ParentFont = False TabOrder = 0 end object sboxOptionsEditor: TScrollBox Left = 0 Height = 414 Top = 23 Width = 444 HorzScrollBar.Increment = 40 HorzScrollBar.Page = 401 HorzScrollBar.Smooth = True HorzScrollBar.Tracking = True VertScrollBar.Increment = 2 VertScrollBar.Page = 25 VertScrollBar.Smooth = True VertScrollBar.Tracking = True Align = alClient BorderStyle = bsNone ClientHeight = 414 ClientWidth = 444 TabOrder = 1 object lblEmptyEditor: TLabel AnchorSideLeft.Control = sboxOptionsEditor AnchorSideTop.Control = sboxOptionsEditor Left = 10 Height = 15 Top = 10 Width = 391 BorderSpacing.Left = 10 BorderSpacing.Top = 10 Caption = 'Please select one of the subpages, this page does not contain any settings.' ParentColor = False Visible = False end end end object splOptionsSplitter: TSplitter Left = 193 Height = 437 Top = 0 Width = 3 OnMoved = splOptionsSplitterMoved end object pnlButtons: TKASButtonPanel Left = 0 Height = 43 Top = 437 Width = 640 Align = alBottom AutoSize = True ChildSizing.TopBottomSpacing = 4 ClientHeight = 50 ClientWidth = 640 FullRepaint = False TabOrder = 2 object btnHelp: TBitBtn AnchorSideLeft.Side = asrCenter AnchorSideLeft.Control = TreeFilterEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnOK Left = 201 Height = 30 Top = 5 Width = 75 AutoSize = True BorderSpacing.Left = 8 BorderSpacing.Right = 16 BorderSpacing.InnerBorder = 2 Caption = '&Help' Kind = bkHelp OnClick = btnHelpClick TabOrder = 4 end object btnOK: TBitBtn AnchorSideRight.Control = btnCancel Left = 321 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 0 end object btnCancel: TBitBtn AnchorSideRight.Control = btnApply Left = 427 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel OnClick = btnCancelClick OnMouseDown = btnCancelMouseDown TabOrder = 1 end object btnApply: TBitBtn AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 533 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&Apply' OnClick = btnApplyClick TabOrder = 2 end object TreeFilterEdit: TTreeFilterEdit AnchorSideTop.Control = btnOK AnchorSideTop.Side = asrCenter Left = 9 Height = 23 Top = 9 Width = 184 OnFilterItem = TreeFilterEditFilterItem ButtonWidth = 23 BorderSpacing.Left = 8 NumGlyphs = 1 MaxLength = 0 TabOrder = 3 FilteredTreeview = tvTreeView end end object OptionsEditorsImageList: TImageList Left = 72 Top = 16 Bitmap = { 4C7A2B0000001000000010000000014900000000000078DAEDBD075C55C7B607 7CD27BDE7D37B7E4262FF7C698E426B9E946A3468D31C6D87BEFBD616F08222A 4A91A2802876446982F40E0AD28B34E9BDF7DEFBE1FFAD35878387A698DCF7FB DEFBBEB7F1EF9CBD67FEB3D6AC3D7DEF99BD65F1AF58BC7411B690AB3DFDFDA7 C6AA352B607AE59270A32D8E21D5E934A2CD951160B8166EC7A6C376EF6838EC 1F03E70363E17EE807F8AA4F41A0F602841BAD15FC356B57E2EA8DEBC28DB250 FFB7F2FD8C36E0FE851D08373B8CC0739BE07564D280FCCBD7AFF5E227D8EB20 D1D5180FAC4E20C2F20462EDF510EF6880882B7B106779AC1FDFF4CAE55EFCE2 87FE487237418C9D0EE29C0C1171F308A229AECC2007E1D7976F72C9B417BF28 F61EF263EE0A7EC8756544DE3A8AB83BA79119604F7E7EFDF846174C7AF17342 5D5092148204571384DE50451CE91F7B5B13D921CEC80E72ECC73F7BCEA89FFD B2298E7C929516E080547F3B6485B8E0A1AD26EE69CCE8C7D7373C3BA0FD1F7A 98E3A1E72DC4BA5CC73DDD65F0383C7E40FBEB18E8FDAEFB2FE79F9A31FCA9F3 AFA2FD366FDFEAB25969ABBDC0107E4BE850B4DF82258BDE943CE5A1683FC96F 38468C1821A1F4733C1292FFC26F8943535707BF0572EE6F3DE4F1F0515050F0 54904AA583F2434243616367DB0B7C6DA87C0E1F1A1686E2E26214971423343C 4C5C2B2A2C446141E1A0FC42F22F220E872D2B2D4359991CE5E25A4949A988B3 B0A8101D1D1DBDF8CC6559A5C4E3B0159515A8ACAC44655515A15276ADA25CC4 575C52D28FCFF1969596F64B775F54509CE514476B6B6B2F7E297139FE27F1AB ABAB51595189E6E6E65E7C4E23EBFB247E6D6D2DAA284D353535BDF8E524BB9A AE3F895F57578F9AEA9A7EFC8A8A0AA15B5474F4A0DC98D858343434A0A67620 7EB9E0D753FC4D4D4DC23E6CE3AEAE2E747676A2ADAD8DD2DC24E3D7F4E79797 57A0AABA8AF4AB43636323856D119C8EF60EB4B5B789F89A9A1A515F5F3F209F 650C84F6F6F61EB0CDE590F37F6FF9FD771F438977B0307CBD8CF2D6E3E260BF 6A85B40FE84F796C207FBE563B809FE239FF665B0FC6D7D6D7EDC76DA2FB71FB 8E9DE0B4B4B420BFA008B6F6F6A8A4FC3414BBB09F2C5F52D9204E3995230F6F 9F5EF7F769EBF0B887F1B86561F19BEFB5BBA797E0797A790F99AFD8AE6A9E3C 2A6C101E11897B7EFE4F8C833951BEF602AEE7D4647174EB9E9090F8D838386C 62F83D58181C16F0B334167C45DBE453BD1D181CDACF1E72B9CCBBA97B006EE7 557BE4F7B56F3CE91118143C20DFDAE828DC89EBA0B7AF1F57318EEBE637FAF1 595FAFAB5A028371FBDEE3C1ECFEBFB9FDB7B6B686868606BEFAEA2B01BE26DA 60053CAEFDCECFCF474646066262627AF8DCAE719BC92EE3717C676767C13B70 E08070E5ED3FBB45C5454F6CFF99939090007F7F7FF15BB1FD2F2B2B7D62FB2F 4F37C3CBDB0B3366CC10BFB9FDE736F749ED3FB7BFDCB6723BC6EDC3AFBFFE8A CF3FFF5CD4797CCED71FD7FECBDB650ECFEDD8D4A953F1FEFBEFE3BBEFBEE37B 8D679E7906EBD7AF176DD840EDBF9CCBFE5C9F319F79870E1D12D7366FDE2CCE D9CE03B5FF8A5C6E83A74D9B86175E78419C735BCAF796F96A6A6A03B6FFAC33 8795B5BFCD82FFE28B2F8AEB6C2FBE37727D066AFF59B69CCBF5F8F4E9D34578 15151571BE66CD1A716E4FF5DA40EDBF229FEDBB78F1627CF9E597F8E0830FF0 FCF3CF0BEEAC59B3445CFF53DA7F12DD8337522592E7E3DE92BCFE7024FE1CBF 086F271EC0DBC9FA782BF526DEC8F0C68B8569BDC22B626CD2F392F7E35EC1D8 94F1D85EAC069D065B5C680B86694702B45B32B0B52617EF9414E1D5A40ABCE0 DBD88BBB89E4CE4C7A1307F296C2BCF912AEC30A47E8FF3D702084410D05B044 3B2E367660516A13DEF06C83C4A053708F674B24CAE9AFC0247F097CDBAE4117 BBA08243D080294EC303DA78087554626747170E950257723AB1D0A7032F6934 B3D925177224921B79A3F1A0D994A4ED800554710D06B8825BF43B1837914331 5159A901762500874300E3904EFC69572324F36B252EC52F23B4620BB2881182 DD08823EFC600E6FB8E21E6209D5706A052E6503EA81C0865BC0F57BC0B293AD 786E543EA2CBDF446193068A889B4B9AE7E23C49744426A53B93CED2BADA1152 06584702DAB6C0363DD2E10CB05FAB032F7F90457D8537A97F698C76E946C211 B4492F92EB8EF6AE0402F5331B80B824C0D11530300276EC06B66C03344E76E0 9537D25097FE26506F4805783D5502878092730427AA50486051113AB3A5C80B 0502AD00F3539486CDC0A18D80CE9166BCF372129AFC5F4157D671E0E10E204C 89A009045F07EE9140FF3802F58729BAE40B80870A707E35D94299E46FAAC467 CFC7A1C34A02A9DF5A52F22A60B902B8B917B84C824CAF0066FE845C741977A0 440D8820D9367300BFF352EC9B988551922849BB8644D2AAF61A3ABCC928A6DB 01158A632FE971E834A0660F1C89A6F32AB46C00D2E603B1148FEBFE4A2C7B31 0A5388CF79A076B104B5CA93D169654CE1C940F39602CB49D9D5A4C3CABBC092 7460660BEA8E503A34EB60FA5D2CD649027BF26FC5AF1249FE671294CD9F8856 4DD2FD821970808CBDF632C1936E582A3A8D6B50BAB71C1EDF46E1B4E41E764A 627A9581A2BF4B2409CF4B90F8FCEBC89BB80CD51B4EA161BF396AF7BAA070B9 07E247B9C1EF5937D84B7C24A6DD7A0F8438C94B9220C97F49FC25DFC0EF99C9 F0952C87B7641FBC24BA92008963BFF0831DA7677D049D99C307C5E9391F0F4A D69BF729F273D25155538DDA7ABAFF34EE69A63AAF85C740547735501D99979E D82F0E791FE6CCE2AF514AF571727ABA400A213533432085909E9D2DFACA8AFD 1DC53ED099C5D47697962099DA8BF4DC2C64E6E720AB2017D98579F43B97E2C9 147D6C39BF6FFF89F9B905F9C8CECF13BCDC62EA5B50DD55505A446E2172A89F 5148FD82BE7CB92E06C4CFC8CE4409B5B379C42D2C2B464905F5412AA9EDAEA0 3E00B5B5D9B9393D9CD373FE09ED19C3081FD0B5613058F4155232D25043ED09 734B2BCB51515385AADA6A994B753FFB33FFF4DC4F10E06187A4B454B2551A1E C645E3ECB211F43B153575B568A576B32FCAA8AD94F35926F3523232845DE213 E27AF89E7EBE03C2DBFF6E3F7E21F53FE2521391909A00FD855F22E64108DDB7 D441111EE80D9DD91FF5F0794C97909E8C94EC0C789A1BE0CC926FA033EBC341 7176F977D09EF588CFED6D62462AD2E87EE7D07DE67B5542F62EAFAE10F6633B E61651FF302F5BE4CBCC9C1C8AE7119FDBDA26CAA39C4F9B292ECEAB2D6DADC2 5E2D0C3A6F16681161B3F3727BF1FD82031010163C24DC0F0D161C4E07DFBFFB 6E36C2DE7C6D684885BF9BB5E08AFC33F7D3A79EF7947307AA03C669C53A2DBE 980AC678ADD8EAC1CAF96075C8688D68A4539BC7E0DF4FCBFF728F8B9D61680D 1CB3DAF1AD6A70C693F8A4A3D37CD3542CBD922EC07ABB1674E22EB59BFC7BF9 D5742C94A5C56920FED893D1F0A7EE80772D7097105047BC073204D2EFFBF5E4 92FFD83E6951E47B90BF7335309738EFFB00FFBC2BC387BEC07B74EE4DEDF098 E35103F2C7A8DEBB37E7422AB6DAE7C389FA195FDC07BEA3BEC2A82099CBE72E A4C7049233F64454FC64FD784CD48EAD56B0DF709E0A9E4F69B726FD47517B3D 2E9CC213C61346D3F96AEA035C2FA7E631AC16B6EDE47F2A067DED3F8FF8D749 FE046AFA7FA674FC12054C264CA4DFAB53A85923FE21E29B137FBC02FF47ADD8 FB3349FFD5A4FF39D2EA17F29A164B8893B95308E76B65FA8F510BCE60EE8F9A D1753DF78FEC6A40F63B540C2C4DA32698FA696A65321C2901D665017A14FA87 63C27E9F715A9F79EEF9AF7BF827A27092EED1226AA6958A80D974AFE7D03D9F 43E959463A1D279D8E91FC712706B6FF0492AF46F25548865A13A54D769F4630 A65E48C19146D283FC270C72FF7F3C155D3F95F2DF7492C9EE8413E159F23063 55EFDEE36B5349A71F8EF8DD1F24FF7F2D97D78D7F29041BAE707DF840FCDF03 3E3CEEF9602818A80CF2F5A11E03C5C1D7788EF549F5158FB707E377507D6CB1 E9BBC782C77F83F1DB3BDAC5F892C1EDFED3D8835D6E7B64E3B2263CAD3D183C 1E6C68681463D7A7B50783C79DF231FFD3DA83514B3C1EBF969797A3AF3DDA44 9FA155A4B117E89A9C5F4DED69318D158A087DEDD1DC241BAF3635358B31BDCC 958DAF1FE92F9F93AFED678F4790CD0B34F0FC0085E73815EF812214ED3110D8 AF8EFAA583E507457BC8C1F32E3297CEBBE73A06E32BDA43CC1B15F507CFF30E C657B4876C4E4551FFDA9EDF8F2B9343CDBF83D50BE541D750EC7F0185BEC602 0F6FEC688ABBBEB339EAC29AF4609549EA2E5BC6BDF2B87AA5C88F067CE882B4 A18C508ECEFA52B4D714A0BDBE04E5BE3A88D55CE4EAB66DFCEB83F10B7DCFA1 ABA98AC69F21E8C80D435B66209A12DCD0D5D680F6FC6054069C43D0D1A9E706 E71BA3ABB9169DF9D1E82C88467B4E385AD2EEA2A92C0BED0D15E8686D40E4C9 055D8FE5B7D4A1B3281E9D850FD1911F85B6AC6034A7F8A2E1A123A5A51051DA 4BBBBE734B8B5B1D98D7BE3628BF076B0885BE34FE6BA94757499280B4E821DA 7323D1961D2CF490921DA2B497748D724D6F9552796745C881B40BE277A10FF3 A9D1626E4932A4C589A4078D970B1EA09D6CD1D5508A28ADC55D231DD36B5B3A BB70A6B01546D94D345C6EC29DBC66449EA2C12EE98F326A50CB33646E0935E2 941EE43F107E0F3417758DB24DAFAF6B97C284B8E7321BB1913A4D234DD29F88 8EE61A449D5CD435D22EBDBDB4B9037BEE9660916D3E6659E6C228A2826C5C43 699152823A05BA189DFC3C4D2AF835941F624E2CC6F756E9ED9CDE560ADA4C68 A2E00D949ECB858DB85CDC822BC5CDB856D484EB04B3A246A437B40ABEB4B11A 91C717B68D324F6F6BA6F02645AD38D70D237633CA702EA500E7E23361189302 FDF05868058422223559F0430E4C2E8D3CB6A06ED4E5F4D67A4E7F712B8C8967 48D02B6885567E0B8EE5B54039BB193B329BB13AAD1173921A1055DF21F8F27C 42BF5B6A28052CF72CDD83D3C4D5209E6A4E0BF612774B461356A43662566203 263EAC47641FFE8833691D99B5EDB848F7EC7C6E338C739A7186EEC5E9CC2668 A637E238C9554D69C00192BD27A11E81E5ADBDF89F6BA53EFC4227B5E50B6D82 CE13D01D86394F1AFFFF6F3BBC4F4D9EEA716262BBFBB109701B04ECC761386C 5FAE8FF61434253900D5D1543E3C8102AFDEE06BE4C76138AC621C1C677D820D 3AE24C50EFB212F5AEAB08ABFB6095F01361E26D841E3DCFDA482F94FAA3DE47 89B00BF5BEBB097BFA60B7CCCF5B89CA7310DCD5C74391DF99638BFA4015D407 1D21A80D8223224C67960DC22EADEAE1BB1D1D878E3C0744287F85E8C323D010 A533301E30B4D19E6189D00BCBE07572920DD90151377720EAD0D788349D8D28 8B3D48743C4E75C38F684DBD3A203A722C519F7805F74E4F838FE62F88561989 74E743883A3E0A11C6331073653A94177E4AF7EBC701E171FC47786A4C823771 234D97A332FE0EA24E4DE0F44C511AF9AE73CEAD59A84B71459F3EF5808856FE 0691863351186482409591DB4DB6EB62ECA57CCCBCDB8CE966B9432A2059770D 50EAB2192D99EEF8542F073FDDAE40D8BE7F342FA641E550F8F7367D5643CECA 26BA37515B3EC3BCE036FC625781A934A67ACA62B092F1EEF8B5BA3F1B3CC448 659FBA2711B80E08383A796DB8DE2CDF70FD39D58466428B80C19C960872C3F4 E6B4849C9E91187CE80723D7ADE35EECDB56066B4E0B6AA9AFAC6C6DACEE6C6D AC426B8302EA2BA919AC447D710AF25D8E22C3645393EBD61F5E52E487E8CC28 6F6FAEEF6CA776BE232F82DA5A426E38DA7242D09A1180C6642A7F1DD4DF7C10 88A596A9D074CEC0946B71F8D7F987AB991F7A7A66735B539D68E73B0A6208E4 521BD74671B472BF21D9078E057550F62B815B7C2D8A682C7E27BE0653F5C34A 65FC192D327E2C3AA88DED2C8C95F519F222459BEF181D811349D570296883DE FD123824342338B7139BCD125A7AF88DD4D7284E2024527B9D20EB33501C7E89 71389A588D606ADC7664356367641536DC4AC1C64BE15DF38C233F167C9DE9C4 AFA17E428AACADE7369FE2B9979C0495846A84B548B186DA8315D426A926D763 9E792EEC35D7B6C9ED17AA338DF855E82A4DED460A9C42A3A0FCA04470571377 39B5494712EB30E35206E273CA10AAF14B4B0FFFD4AF2D6D0D95C44B165C57E2 1EF24E4620E9BC81DAB155F9ADA4472DA65D4C477E5238F5E1CA117A7C520F3F 84E26AADAF20FD9361E5E10F558F24187A3EC4A28842ACC869C2E1B82ACCBB92 86BCE468D9FDA57E5188DA8F8FF814576B5D29BA8A92F0F3695BE4D2587EE1E5 54BCA3EA473243E83E05223D9EB8B9C4CD0B87B4BD0501877EE8E107AB4D6C69 A92D46ABDB227CB9590326616DD40769C34F9A11F878AB15E26D36A1C5651E61 8E40675B13FC778FEAE1071C1ED7D252550069E02EBC3D6909FEB54E1B334FDF C51E335714445C0692CF03492640E23974F86D22FD1BE1BBE59B1EBEFFDED14D 4D15395D52FFADE8BCB74584E9F4DB28C3BDF5E8B8B7011D77D7D1F95A74DE5D 0F6947ABD47BE3170D72FEDD6D23B25BEBCAEB5B2A73A4CD15D9682E67640A70 5F55806CDED9D2002A60D45D94D67AAEFD2C49CEF7DDFE9D92CFA6AFEFFA6EFE A6CA67F3D72D3DD8C4F8AAC57BD397326C14A8F15CFFF93DCFF55F6E18A0ECE3 69CA7DBFB2FF94E5BE5FD91FA4DC37A7BA21CF89E230DED8ECA634A1571CBDCB 7EFF724FB6A6324965B92802F91EA7E0AF32C9AA37FF51D9EF5BEE9BA99FDE58 9623D2D141B66FAA2943A0FA2F1DFDF8DD655FB1DCB7F7E840E3854477D4C5BB A295C2056B4C69E9C5EF55F665E5BEB3381E89A6BB9078FD08E22EEE45B28506 A2CF6C45B4E136C45D3E888797F6235C6F3DEC97BF3FAA77D94F1165505A9480 28834D68887692BD9B10E6DA6FEEA1DCDF1C11A7D742B1ECCBEA1E59FD13A6B5 0235F7AF8BB051E7763D227690FAAD752874D44798EE3A50D987BCECF7F08B93 10AEB30A352443DAD92EEBF74BA5620C20ED68A76B1DC8B2D144C0B105502CBB 2DEE0BC95D805697058824FDCBBD2E21CB521D5956C791714B0D693754092A48 353B8CD4EB87E17F6A1514CB2E5248DFE42BE45E4484DE3A14BB1B23DFFA04F2 08D9B78E22D3FC0832CC5490765D198997F7C3577D0914CBAE62B90D3EB110E5 1EA668A0B16B555D316A18A467555D111A685C9A7455054E7B26A357D95528B7 41C7E6A1C6E332CA699C36CFFF1476475CC4DE884B5848BF0B1BCB9075F5086C B78D459FB20B79B90D3DB90835313EC822936B5787E166630A6E36D338867EE7 D2B5AC9B9AB0DB3E01838D5F7DB68E08093AB514097A5B9177760F320D76205D 6F27527477215A6F07EC764E86D59A2F7BF8FF5BFA0003D505C6DA47FEA8BC73 3D0EEEDC84AC7077ECDEBC1A3BD62F1B525D7070C786FFB8A87FFCECD5B32731 7FE6AF78E0698D85B37E85A1A60A2EEB1F435356E863EB82F3A78FBEB779F5E2 06CDC3BB31FDA71F705E4B158BA74F84F1C90398F3EB4414C6FA3EB62E9830E6 3BCD150B67C1E98621B6AD9A07AD039BB061E96CD85ED4C1F279D3A1A9B28BEC 1185F69C30114773FA3DB201C5497546E8C9292D24BB66DBBAA5583C672A664D 9B02FDE3CA98F8C3F79832691CC68F1E81CF3FF9485627711C3C8F921524E269 A77BC47D004A7F6BB0B723AC2F1BE0B8EA7E2407B961C78695F075B480D5453D 2C983545D4271D62EE41A6477B4E684F1F60EFD635E2F9A3CA9ECD58BF72317C 6E5FC5AECDAB70CFD912EA07B663C497FF127CD681E7623AF21EF4EA036C58B1 50C8DEB365357EF9712CECAF1A61E5A2D9B8A07B0C9436BCFBB7B7BBB93184A8 7E7D8049E347A74D9D342E6DC6846FBA962E9C030FAD4918FFF5FBF869E487F8 FE5FEFE287CFFF8C16D7F9320CB10F80D41BBDEA12F1F2C2FF47FB00EE475E71 F1D2F82B3C4FFC99C6A47F22FCF909F89308CB1C19F72FA889BB8ECAE84BDDB8 FC04C8C23187B91EC7FE4065CC1399D7BE47E6F531C8341B8B0C720742A6FC37 85650E73DDD55EFBCDEF1F32D75DED15F1FBB8FA511CDABF0F2ACA87E0607F07 E9E96930BF6126909E9E0E73F31BB879D35CC0CCEC868C7FE41501D9FB7745A8 282F457959098A0AF3919F9783C2823C81827CD9EFE2A27C995F7E5E37FFE51E F97AA7754807359C3C710C3E3E9E282B2DC11D3B5BD8DFB113BFD97574B017BA D9D9D93DE213F8E0F7D69B797EBDB151CC17575755A2A6BA4A40FEBB8EAE3378 FEBB2FDFD8F02CB44E9E808ED6290407F8A3A1BE0EAE2E2E028DDDBFDDDDDC04 5C5CDCFAF13B79E2521C5D686F6F434B0BBF03D722207EB7B588EB0C7EA6DE97 7FE9C205E8E968E1ACBE2E2223C2D1497D045F5F5F01F9EF7BF7EE09F8DEF5EB C7FF2D879B82FD6F5CBB8EB367CFE29CB111E21FC68B6B01814184E0EEDFC108 0A0E15080C0EEBB9FF1EEA6FFE66F9CCB5DEFB7200BBAC470F482FB7EEB4F5FD 2DCF3372AE7C19D06F44FFE346F0BBCF9A87583C7F33A4FC59F36029E339FAFD 8C79F045F67BEC64C28DE08DCFDC08EEA86E6D476347270ADB6408AA6AC4DBB6 91EDE4DFCA6106E16E25E0646251574DA714312D9D706CECC46DC2D5DA76CC8E CAC6EA07391C07FAC5417A91DCCEA34945886E6E477987145E8D1D7027AE7D43 07AE56B7627E6C2EAC6B5AB12E3AB793C2B72BA685D276ED9D3B0FBA821B5AE1 50D3825CD2F95E431B1CEADA60419C33C5F558189F8780C636EC2EA8C15BB723 DA88AF2BE7BF702BB4D228BB02E74AEB615ED188680AE750DD0CF3CA265C286F C489FC1ACC8ECDC175F25B96598185D1B95DA46FBE9C4F36EEB228ADC3F1FC2A E815D5C2B0B80E862575D02BAE8546610D0EE45461477625366496E387F8424C 7C5800E24BE5FCE7CC837185C26E4E2FC5B68C32AC4C2BC1DCE462CC4B2EC11C 72272514E0DBE83C7C1A958B0F23B3F18FF02C083B3EB21F54B24A313C2C137F 0949C726E22F225BFE1A5F80D13179F824220B6F793E107E6F05A5E13F0353FB F1F5F22AF0CCDD043CEF97886F28FCCBFE4978C53F59807FBFE01422FC388CE8 74F6E147D4354397E29090FF072169C2ED05C760C1D5CE29EFC7E77B5FD0D88A 5B2535F0A96AC0A9EC721CCC28C18F94675E23D933E3727125AF1C11B5CD420E 877DC62CA85341BE2FC79755DF82730555B85C548D1BC535B02AAD855D791D1C 09CEDD2E87E9CE83768A59F0C59BC1317C7D79402AC2CAEB51DBD6017EAEC3E0 DF7C8DFD38CC7366F7C3072C03D703E63E73C537FA3F2D821B5FBA19DC49E9E2 FB8C97CD833BDF340F6878FE8A6FACE4A2CFF47FE7BCB9621FDC62D377EF596F 1B6B66BD7D6CB6E59651CDD6DBC614D1EFBB747D01E1853E6155087F78743E72 AED5D6D1CDF70DB7B627389D454EA00DB2036C90E87C0EDEDA6B1A2DB77C5F4B E1978AB09B476EEE7E0EFD1FDD717D6AB56D4C5382BD3E32EF5D43969F398A1E B8A12CC11FD55951A8CD4F4249BC3F1C956734915EF7EDF6FEDC427174128F2B 5F09E979E5BEE13669C8C57DB0511A07F203E9DDE9A9B9AA21CDD7BCABAE3095 C61E196828CD428CB58EB43C359CFDDB88FF06F349EF06BB3D3FE1F68E715D74 BD89AE1F24FC8DF08BD5B6D1D1DE3AEB9A2A32A2D154918FE6EA62010AD74EFE AF75A79D791D61465BAF513A8BE9FAF03EB65ACB3A95A584A12235144D9505B0 92F15FEDF6EF745599A91E7BEDD0BF7C4F2E798BCE9F55E03E4FFA05C7DD39DB DE5C5D22D2C1F289DF417EAF74877963B07120F9DD605BDB1FF8B5D55179668B C0E1992DDDF67FB93B0CDBA2AB1B52D687C0F17B739E20BC3D00FE4B41466753 55119A094D958548F1BC2AB5DAFA7DAE62FE9023C942FD9DE84BFBC674CB78BD 3B3F74729A2A5282519E16816E3DB6F749C76B969B4796459CDF61E0796C4160 B7FE224F92CDA5CC67BB365515A2383E004E2AB39AE8DE45529851DDFCEDB795 C65579A8CDE17BD765B9F5FB7679DC645F29E7914497F35D8D65B9229F546546 21DEFE6C97D3E1994D24B783F227085DB7778E075DE3386CE47C92DFE5796A45 0BE5CD4467D5D98D05916EA84C8F40C9C3BB28887042B6DF0DC4DBE920C65203 090E6740F2388F7DA6903610F75CF7EF85565BBEAF763FBEA821C6EA14523D4C 91E17D090977741168B2B393CB18D96B451FDBDC243CA370FE029759D2D18F6C 5046E1DBE977A1B5D20FB674FDC3DFF29E90CEF4F7B5B4A7BFDFA633635828B9 1FF5F527FDB5484E1BE9174A327AF9537825BDD9C31BCDD67D830B4B3F93EACC 783F8FAEBDD6A3EFE6914AB6BBC637865FD8069F930BA5565B46E5C9CB96903D E3FD2AB3B55FF7BCBBA23F67783DF16729C8AE0A3BBF05B166FB04EEEC99584F E16675CB7E9BF82D8AEFBE982CFEB493AE6B77DBEA6DE2B7C8B90CAFE3733B49 27ED6EFE2C83B91FD62AF22FAFFC02A7670C8BE8E6CFB2DF37A956911FA0BF1A D6DB464774F335589E22FFC6FA6FF81D9EE66EBE86D7F1799D8AFCC88B4AA03C D7DCCD57217EBB229F6DC13691D7C39EC7E6B62BF2C3CF6FE5FC54D5CD9F7766 EE47BDF4BFB4E273D6DFA79B3FCFF1C0E45EFAFBEBAE60FD7DBAF99F9E9E39AC 41917F6ED1276D745D555E77DB6C1FDBA0C8F7383A9BEB13D56EFE8B04E900EF 304DEEE6BFD85DE7F47D4769F2BFE3FDB66E1D0AFBC86EEF9577378F2CEC23BB 973FE779BEE7EC776DCD5764FB61798AFE9CE7EFEBAD12690F31DE48E5FBFBBC 3EF237EBCFF9B0F93A71CFCEFB88CAD0FBBA7DCAEF66CAB3CDA1E736C1E9E02F 6D74EF74FBF05FE67C446820EE0572FFD087FF32A54183D04065E7C240F56E77 3CCFFE16FB8584841C8C8A8ABA74F7EEDD7143E5ECDFBF7FDCBE7DFBB44C4D4D D3796D19AFC18A8D8D6DA1EBFA3B76EC18F704EE4AE266FAF8F820353555ACA9 E2F7DDF8FD2BD2014A4A4A99DBB76F5F3918FFE0C183A1C1C1C1C8C9C911EBC2 583EBF2FC6EBCBF83D2E1E3F930EA17D794E4E4ECFD8DBDB3F636E6E5E2F5FCB C6EBEAE46BEAF85DB8ACAC2C646767E3F4E9D3CD729EB3B3F3738E8E8E1FDCB9 7367DCEDDBB727513C5D0F1E3CE8794F4BBEAE4E0E2B2B2BE6F7CCBD12F733E2 5AD9D8D8145B5858D4937C787B7B232C2C0C7E7E7E623D218F7F030303C13609 0D0DC5A953A704DFC1C1E1754A8F474A4A8AD091DF91E3B5881E1E1E205D40F7 0DD1D1D1888C8C143CBECE505757177C5B5BDBF9010101422F7E2F4DBE8E8EE3 92C7C1F780D3131717876BD7AEC1DDDD5DAC891365C7D2D297D75D6666668A70 6C1F8E87E3635B6B69698175631D78FD1DE507B8B9B9893596A21B7FE3461CDB 98D3C8F127252589F9168E83DF173C7CF8B0D05BCE37323212EB0777EFDE2DF8 972F5F76E175817C8F3D3D3D7BD2CC71307FEFDEBD226ED6FFE1C387D0D7D707 D99BF390E09B98982CE7F4701E63991C1773197CFF77EDDAC5F916111111423F 9E23E07BC36B197BEA071D9D3B1C07DB9ED32CDF0B82ED676C6C2CE2E573CE37 898989A034F33ACA22395F4343E319353535075EFFCA72D98E9C5692D145E500 7BF6ECE1FC8AAD5BB762D3A64DEDC4CD5DB366CD5B7DF32FA5751585CBA77011 1B376EBCBB76EDDA754379FFF7DF72A87AA31F9E827BB9A64B80ED655AD9850B 84670E7B6028DC6BF55D02CC659BBFF9E69BB854DD858B84E7F6DBE3F9BDB678 6197255EDC7E032F6DB9829737993E1A3BAA7822A41534B6970A3EFF66BE752E 8D01D32A7025A90426B1053088CC817670264EF8A741D52709AFAD92ED03F0AC B21B829AA5B8DAD05BBE718514866552189448A15B28854EBE145AB9529CCC96 E290477C0FFF99832EF0E3390AD29FB9E27D22728D887BA6540AFD22294E1748 A19D27A571AD1427323BB1CF35B687FFDC0147F8D4B4E1725D9738671DD83524 AE417117F4BAB99A3952686449712C438A9D8ED18FF8641FF7CA665CACEDEAC9 AFEC9E21BDF50ABB703A5FC665D9C789AB9ED6896D760F7AF86C5BE7924698D6 F496AF5FD405DD822E05BD899F2E855AAA149B6CC27BF82FECB6867D613DCE57 497BC997DB8C659FCC92C93E9A26C591E44EACB5087DC4DF65019BDC1A98544A 7BC93FDD6DEF53D99D42F631E2AAA5744225A9132BCD831EF17798C322AB0AD7 534A611A5F0CC3E83CE88667E354603AD4EFA540D92B017B5DE2B0DD3E0A1BAD 23B0EA5630965C0BE8E1F3C1F9E9958D17F0F2C6F3786583095E596F4C30C2AB 6BCFE235C2ABAB0DF0DA6A3DBCBE5A17AFAF64E8FC8F7EF14E79C60F5ACAD3C7 E61D9E36BA5365FA68A9F28CB10587668E3778226FDAE8618767FE901F646F81 C69A2A483B3BD1D1D6829A927CF8595E86CAEC096587668DFF7830FEE159E38A 7393E2D0DEDA94D458536ADB509E6F515D9066539193E052959F9A961CEC8D23 F37EAA1D884BF19E61B9C44D6E69A8B9D1DED268D65C5B71B3BE34C7AA2A37D1 B63021D0BA282924C1EBAA0194E7FD7CB35F3532776215EBDC54537AA7BDA5C1 4CDAD97EADA5AED2BCBE24C7A2222BCEA2303EC032F8DA61DDBCF8101C5B34A5 B92F5F65FA18293FDBAE2FCBB56C6DA876E93BD79B121510E0ADB3EC4859460C 54678CE9DABB71DDB3BDE4CF18DB453AA32A2FD9BAAE24DB9A394DB5151195C5 B951F9E9F1E1D10E46461E1A0B8E962447C8F9AF29F2D517FED25855948BD2B4 07F6A529E1E2C17D41DC7DD3DC48F70BC9DED70C7D4EAF3C72F7CC5AFD8C3077 9C5C3AB5AD5FFA974CF7B967711195B98929A97E563C1645AA9FA549948DB6B6 F7E915AA2EEA338EA705D8263B1BA9E3E4DA85297DF9A4CFABC797FCDA9214E8 89C284A084906BCABA628EFCC47C751F83D50669F76F27873B5C81E6B269ED14 76C079E4FD4BE7CCA238DABCAEE823372E90D21285A2E430A487BAC3C5501D5A CBA777A8AD5FB6FD717990E27EEBE486A5592757CCE8BC78C70A17EDAD71D1D9 0EC7B7AE6E20BF7F0C25FF4F5AB6ECF509AB5723A0AA0291AD4DB0CBC9029F0F B5FC10FF250EBFF2F8719CB2B5C1663DDDA7E2F3C1E17D8A0BBA229A1BE09494 D0F51BF833478D19633965CA94CAAFBFFEFA369F0F146EDBE5AFF0D3F0E1BF09 A4907053CB2A7F137EABDC7E7AB4D60D8AC7F92BF2078B7320FF81F8BF573ECF C42AA21F5FD1F3BF413EF5067BFFF5E52B761BFF3BD2DFE7AF2F5FB1D3FADF92 FEDFC1FFDDF9B7FBE87BFEA4E3DF219BEB00DDB3064FBD77087314F70F7ADA83 F76CECCB6F91AFBB7E02787DDC60FCBEE5A82F9EC46FA431E3E3F024FEEFD5FF 49332BBC7FC26F91CFEBDA99CB69781ABE228FF76DE031EE63ED7F4CF258D4D5 D73F962F6410EA490E87ADADAB137B3DF0FE00BC668EC7E483F1FBEACA71F05A 409ECF107B2075C733189F79972E5D7A2C782E67303ECB54D495C3F29E4C3CA7 225F43C8FB2F0DC6E7EB4341DFF2C36591CF9F06BA67F4F1EF5A431C7165E308 39422FAE1F11747ECD88FBC62B47C8FD5D35E78E70383E73C4ED23BF8EB87568 D288EB7BC68FB8A8347A840217090E1A88BB731C31B78FE281D51184DE3800CF D30BBE703935E70BDFF3DBE165B21D6E869BE1A8B71E76DAAB61BCF15B5CDA31 6644E8A50D08BFBCA1D73E49BCFE342DD419CE276717DF519F5E9C12ECD86B3D 2B436FD5E730DD361ACC0F315D2B788AF3649C6FB252E351519423F67BE03925 9E03E2F74F987F6AC9C730DA3042F003CEAD147CF9DE8E7CAF791E8BE784780E 92E7A1380F725EE03920E61F9DFB3E74577F01B217EE9E592AF82C83E5878484 8879229E0FE2B920E6F3FC15CF07F23C20A74F79FA3B38B5F413049E5FCB7612 7C96C1798EF319F3799E51CE67BD381FF23C1DF3F74EFE338E2D180E3FA3956C 27A1933C8D2C9FE79FE47C9E1B93DB85E71F99AF34E10F509DF577F8182C85DD D169822F975F525222F896969662EE8FF93C9FC87691CBDF3CE6351C98FA0E3C 7416C252F9E7DEEB8DC99FE3E27934AE6FF85C7EBDAC7BEFB2F5235FC29EC97F 81D3C939A0FC04CA4F38B769040CD67E09EDE59F4263E187B0333C00DBB3FBB1 EF97BF60E7C4FFC4B6716F60D3E857B1EEBB17B1FA9BE7B0E3C73FC24E7D3A5C F5560D88A3F3864165E67B83FA6F1DF726283F0F2AFFDCD63130DC346A50F92B BE7C66D0F777896F7668DADFF2E83EE5D16F9F7FD7B39081101B1B3B75A35E20 A61DF6C327EBC4BAE05143C4FBC4FD92F24D6370582402C2A2F1CF355E83EE65 D6171CC7E1C3875F7476765EBB45DB1B5B2E87E09FABBDC4FA6F4570FEE53C24 0797335EBFCE7C45F9F749FEC72B3CFBF1E571C8C1798ACB4B2FF9273DB1F952 303E5EE6D9B3C63DCF521579B70E1394917BF310726F300E081DE4FC1EF9A1DD F217BBF7E463E696DFBF45B829DEB72FF7BB819CEB7B059F755294BF59C31D9B 2E04E1A3456E3DF598A2CC9CEBFB9179751F32AFEC96EFBF271D48FE47F35D84 6DE4F5A01CB235F5B2F690DB422A8F8DFC0E985CFEA663EED86812880FE7B9F4 7073CDF623EBDA5E645EDE85F44B4A48BBB81D89E7B68B72CC75593FF9A1D118 3EDB59F0E5E595E5F2B317C5FA9975E0B9F8E79E7B6EB45CFE4635576C300EC0 F019BDEB6AE6CAEF979CCB7514CFF7F7971F850FA639F46A07D8D6F2FDFF98CB F5183F6FE89BFF36A8B862DD597F7C30C5A1D77E7B2C5BFE5C45CEE5B8E4FCBE F287FD7C473CABE23072F95C27727BC075579FB97721FFC08103C33E9F618991 AB1C316C925DCFB314AEC3E3E3E385ADB83E6597DB016EA7B82D60BE3CAE3F7E B4F6C7B7BF513FF1D6C71B363E4DF9FDBD7587EDADEB9782FC7DDBC383FD111E E88790FB3E08F071C73D0F6778BBD8C1FD8E259CACCD6077E322ACAE18C3FCBC 1EAE9ED58489B65ABBFA7EA55DC4ED9A3E27017FB5CFC704A749C8CB487E3232 5350555E02BD23BBCE4504F9C3CBB70E2685CD702972435559F190D0D4580F2D E56D26ACEF37DF7C836FBFFD1623468C107B5D8E1C3912A3468DC2F7DF7F8F31 63C6E0871F7EC0B871E3307EFC78FCF8E38FF8E9A79FF0F3CF3FE3D89E8D2641 7EDE82C3FB640E1B364CECF5F8E1871FE2A38F3EC2C71F7F8C4F3EF9049F7DF6 99D887F38B2FBE10FB79B2BC2953A6E0ECB1FD266C2B399F9F33D9D8D80C994F E937F1F374113ACAC373FF829FAD0DC4E134CAD3C77B8B6A1EDA6AE2E37247A4 EBD34F3F15F98BF7B6E43D2BFB72E4F6183D7A34C68E1D8BD9B367437DF70613 0F076B4C9A344984FFFAEBAF05476E47E630E41CB623CB62CC9F3F1F8795D698 B8DC3617FB942A72E4769773D8F613264C10B69F3871A2B0FFA2458BB07FF30A 13078BAB222D2C43CE51BC57F2FBC53A32264F9E8C5F7EF9054B962CC1AE758B 4D6E9B5D106991EB259723E7F07D9673D8E60CDED774F9F2E5D8B66A81C9B573 BAF59C96050B1660E1C285422FDEF793E3672C5DBA14CB962D13E157AC588195 2B570AAC5AB50AEB16CFD4D738BC7BB791A65AFC394DB59CB31A8772F4D5F7E5 E8A8ECCC3975705BCEB13D9B725477AECB39B46D55CEDE8DCB7348DF1C9299B3 79F9BC9C758B66C62F9A3979E2BFAB0F40C77F75BF13FCC43A831F7B0DC01F41 F55D2DD57BD2C1DA7BAE0F4D4C4C8C068A83E3662ED7978A6D35D7DDF267C91C 07F72DCF9F3FDF2B0E7E8CC67CF6E7F686DB0D79BBCFF536B777DC66B13FD7E9 2C83C67246F2FA4FCEAFA9EDE8D5F6C8DB2E6E37B8EF3C50FF45CE7FE9D55193 366E6FC0FC05F5C26FF992466CDADA48E3BD965EFD7FD643B1FD61FEBB5FE4BE F5DD8482F80D9BEBB1784D377F4523B66E6DC006A5069496CBE2908F2FB83D91 F3DFFDAA72E9F459F52DEB37D561D1FA7A1494B40BBFC2E2762C59590FBE3E6B 411D6EBBD7F7B4671C8F9C3F657A5D9DD29E06FC3ABBBA333AA9A557FA62125B 317D5E0DB6ECAAC5F4653568686AEDD97F56CE7FEBBB92A593E7D6B6ACD8548B B99BAA905FDA26FC588F05EB6BC0D77F5D54051BEFFA5EFD7BC5F4BF3E2AF9AD 4F7E4D8F5FB4A91AB3B7CBEC3C7F630D9631F691CDAADB7AB5E97DF96CFF67DF FC76D292FDE598B25E769FA7ADAC12DCAADAB65E7D0F39FAF2E5F9A72FB81D1F 0883F0BB86DAF7254815DB6F3ABE23DB34F1F5A170296C03973905FE7B1CC753 B4FD5CD6DFFBEF1C573C0DD2D2D2B6507FA799DAC09AF0F0F0A2FBF7EFA77A7A 7A063938389CB3B0B0387AE5CA955D464646D3B4B5B59F1F70DFD3B8B856EA17 B60606066EF92DF2838383A577EFDE75737575FDC3D3F03AB3030A08F0F5F680 AB33F51D33FCD09AEA8BE6244F34C4BBA236C6015511B6280FB140C97D3314DC BD8C5CCFF3C872398B34075DC1ADC94FED41755E0AAA7393519D9388AAAC7854 663E44457A0CCA53A3509E1289D2A430942484A0E46120926C4E42CE17653EEA AE70F3223C859B13E424DC4CBFDBC24DF332176E4B432D8A62FCF0F0E651B467 FA0B79050F7C901FE185DC5037E4043B233BD01E99FEB648BF6B8534EF9B48F1 B88E64D7CB284B8E94956F0A1F734D59A4B52A3BB1276F66073A08378378ECA6 128FDD2427D35E79382FDC039197F6A129D183D21827BE4B94E56F878C7BD648 F3B985544F3324BB5D4592B329121C4CF0D0EE2CE26CF4116BA583E85B9AC80D 7145D8F95DA88F7316B6E138D37D2C9E58EEA2CC357A6C1362BC1DD50FECC8A6 E1284D249BC607A1282E40D8A6806C5910E94D36F1445E98BB90C776C90976A2 343A8A74061B6EE5FB5A31C07D45F26D4D24581E43DC8D2388BE7A48A435FCC2 2E849E5322DE36C12554FCBF5DEEFA1E77EEDC798F7096CA5CC9AD5BB71A08F5 0E4E8EBA7DC3393A3BCDB4B4B27219803FFD96C5AD4AF2176B93883BCFCCCC2C 91E22BB5B0B428A4F339DDFC04C289BEFC93274F9A181A19D59E3871A28860DE 27EE7F58595BC75B595B85DB3B3ADCE06BC74F9E3AA6A1A985933A5AE2B90471 C41C9DB9C52D689CD4905DD3D2C4318D9335274E695AF495774A5B87DBD32EEE 2370BB40F2C51C97ADADADF8CDD7B8DD4E4D4BEFE2B003F14B4A8A697C16DFC3 E7F7BBC86E3D7CF6E33043E133A88E13909F0F95CFEF99F56DE7F8DA50F972E4 E6CAE63C15AF3D8E9F9E968EE2A2E21EE4E5E5F53A677098C1F845E4FF30EEA1 187FF0DABB38FACDDF70888A8E42048DB9C3C2C3C43CEA20FC287EB72E263646 7CDF27262616D1CCED9E4BA5B6447CFBA99B1F3500FF16EBCBB2A3686CFDE001 F31E08B9E12497E73CA3E85A37FFCA00FC8DDE945FF8BD471EAFF3D89C65F2F8 9CE751395E7EA7D0CDDD9DF9CA03F0DFD4353813743F2040D82D373757D89FE5 31783C77CFDF1F97AF5D63FE5F06E0BF421846384F08631B0D805CC2BB8497FE 37EFFF33D83E2043D9FFE771FB803C69FF9F27ED03F2B8FD7F86B20FC860FBFF F03E208F5BFBFFB8FD7FE4FB80C8D7FE4FB1D9876FCC36F55AFB3FD8FE3F8AFB 80C8D7FEFF64A184E5AE27F0C9C5258FDDFF47CE1D6FB91B632D7663D4CD6DF8 F6FA062C725483D1035BCCB13B80778DA6227890FD7F581EE3FB5B4AB810E304 93687BC1337C608303770DA11B668E29965BF1AAF6483C73F28B67FAEEFFD3E2 B658EC23F28DD906C1DDED73064A5EA7B1D94313EB5C8F638BBB064E065EC4B8 1B2B2139F651DB606BFF3FBDB2028691B761106E09DD5073E8845CC7768A4323 D014532D37E33DD5E15D1295775F196CEDFF70D37978CF681AFE7AF667FCA7DE 0F186BB61AC7032E60CAADF5F8D2640ADC367DFE546BFFFFAC3F163F9BAFC1B7 26D3D1DAD1FAD46BFFDF3CF241D77347FE0E8F3EFBFFFC5EF89E5EAF541868D9 58E0731EA98E3A48B6D342E26DFE66A661A3D7A935B7F3EF9935E6B91920CF45 97FA9B6A88315346C4CD538D8E87172B897D36FDCCA455E1B75115662350196A 8DCA104B54065B20DFCB141541E6A8083043F9FD6B28F7BF8A723FEA83DEBB88 2093FD52E617789F4781B7090ABCCE21DFD388CAB621F2DDCF20CF551FB92433 D7F934721CB591E3A089EC3B1AC8B23B8EACDBEAB8AFBF45CCC5E67B180FFA8E 428EBDD6A07EBEA7D6097EAEDBD941C364DA6A0CBEF6FBD80AC1CF76D61F344C BA95FAA07ECECA8B053FE3313A269B1F1ED4CF7ECF7CC14FBB3DB88E09D7F60F EA67A3341BB2F57C6A838689BDB86B503F8B2DD3053FF6DAC141C3841B6E19D4 EFDADA5F04FF81E9DE41C3849CDE30A8DFA5553F0B7EB891D2A061024EAD1ED4 CF74F944C1B7DA39FBF67D9DF5B87B720DAC76CCC1CD6D3360B6691AAEAD9F82 AB6B7FC9F7565B02F7430BE1B26F1E2EAFFE19A62B26C174D944C6EDFF09E3EE DF7BDCDE3B4F29CBD9A031D3FA0832AD54916EA18AD49B2A48BA710889D70F22 9EF250ECE57D88B9B4070F2EEC4684C90E045F566D649ED83BF18EA6B4D4DB18 4F8B00C3DD62FDBB90FB1B705F4F7C8B4A9261A1FA9BF66EB8A7BD41F0D36EA9 C8F6C8EAEE6F727FB1ABBD45B64F85AFAF5893C2E7BC66C5C9C949CCAFF3E1A3 B956F0D956BFE5F03C217B1F94ED2CCA0AF53959F6FDFBF7853C1EC3787979C1 C5C5459CF3BA187E9F809FC98BF772D565DF9BE57BF4B4476279338E6B19E1EB EB09131E5E95D511BC368965F3DA1896C7EF3EB8BABA8AB5567C7EF3E64D5CBF 7E1DC76EDA4337A0040F0A5AB1F156627994E9EE21CB8DAC6AC5E5FC461C89A9 81964F110EDAA5DD8B3491D531BC4E8AD32C4F2FBB0E0E0E22BD7C7EF4869DE0 EECA6BC1EEF446AC3194ED7F1D6EBCE38972C3F3AA609A5CD6C33DE05684DB54 9EBBF3FFEDA0335B457EF2D3D9085FCD75F0A6BAC08DECEBA2B61CDA87B6E26A 583E665847637D44315619B883388CDB43295F6F2F3D745CDFAF12F32F24E3A3 DDCEFE4F5B3EDF9AB874E27B8B8F1EFF56DD4369B030A9A9A9BF262727BBD258 C5FFC18307FE346EF1277BFA7B7878F83B3A3AFA930D5D694CFBEB405CE2BD4D 631447C5BDD215F74CE77738786C44F9DEE9CC99336F0FC09F43E39E1A1EF7C8 9F7BF2B3521E4BB1CBE52A2D2D8DD7FD55137F6E5F7E4A4A8A07CFA7F31A341E 2BC9D76F713C0CE6B27C7E8E6A6868E8D1974FE3CC74F6E3FCEB26F6B67111E5 94F3CE9D3B7744B9E1732ECB2606DAFDEA202E733C56E5F24EF18BF569BC0685 5D3E279D4519E0758BC78F1FEF5707F1DA347E9ECD7997E5F1BC03CBE4776F2C 2C2C44B9E167825C96555555FBD54174BD8EE507050589B8580E97415E43C3E5 8FEB1D5EEFC6F510AFD9633F86BC0E22191BAF5DBB76FCFCF9F3C7F5F4F48EDB 1BAB8BB4B03C2EC36C0FE673BDC5D7F9D93643B10E523CE4F511AF2994974996 2D8F8BED2AAF03E57590E2A1581F29BEF32697CBE0B9093EB87CF5E5CBEB234E 23CBE4F4B33CB94DD99EBCBE920F27D5A5FDF8F2FA4851D640CF03F8B8737061 3FBEBC3EE2B4B25CBE777C1FCDCCCCC4DA49F97B847CD8EE5FD08F3F94FA487E C8EBA03EEDB1A88FFAD643CE4796C2416509EC48E7DB24B76F1DA463A0379550 6978FE5C52DF38E9BAA9BED1D9EA01F6EC59D5F3CD2FC333CD2D2D2D520AEB69 6C7AFE68CFB7B08C0C8BE312E2BB88EFDF873B5EECC3F34846575C623C7FF740 7AD6C4F88EF8AE96BEEE8FD6776C11141ECAEF1BB728703F7CEE6648FD73E621 8AEF403638B9BBF23BA05D14570AEB403AB547C444C1CED181F54AECE6FEE773 B7420B0EA65774FDC12ABC670F18923586DF8B4CCBCC601DBA28BE22572F0F3C 8889E6F725997F94B82F10377C494C41FBDD662914F9DD3AE4B978B88BE78657 CCAEC3957EBBFB783157CC9312D772AC5F5A8B7DA314CE4D52FC876558671F3B 8F603BE4E4E5C1F4EA6558DEB661D92D7CFDD99B21473E708D6BB2AEEBC0FAD2 365890FB661F7EB70EE69EBE3E52B61BA5BF8BD2654A7A2FF8834D64F3958A16 2815B760724E23AE56B7E10D8BDEFCB7DF7630F8EB5F6D5B5E7CD10ACF3E6B85 BFBD1386BFFEED4ED37F2CF1EAD029A8C781A2667C1F5F8E1FD3EB6052DE82D7 BBF97FFB9BC3D1975EBA2D7DFFFD78E9DFFF1ED3F5E67F784A9F7DDEBAEB9D77 22F08F6171F8C7FB0FF0EA6BB7F1F99944BC6C1D89B1C955D02B6EC46BB7C23A DF79C771E58B2FDA74FDE31F711DCF3D67E3F5A73FDF6F7DE6192B48E638BDF3 EEDFA3F0A7BFDDC73F27DDC37BEF47E3C517ADF1FA6A6F7C17578A53F9F578F5 5668E79FFE64573C7C789294B8AAE221D87B314DAFBE7ABBF3D99BA1FECF3D6F 837F7C1485710F4BF1CACABB1DFF783FAEEB8FC3ECF1D58322A86657E3959BA1 9D6FBC61D7F6DE7BB1221FBEF69ABBE1B06109D257DFBD53FDB16B5CF3B0EFBC 30FCC364FC617E90D8B7E7EF94963FBC65874F43F2B027AD022F13FFADB7EC72 FEF9CF0C29E94FF1C4485F7CE376DD9FF5835B55332BF1836D065E7DDB011F0C 4F24FD63F1DEDF63F0A7618EF828281B9B134B059FD3FFE69BB6257FF8835DE3 9FFF6AD7F69A5660AB12F929A75762674A39661925E0831FBCF09F140F73E7DF 49C7AAB822AC7F58849788AF5026BE20343E6F1ED2F9A66578F31B84D72D6478 4D01AF5A8409BC722BAC99F716FAF9627CCD7893388C358E15E0DF3F993E2CA4 EBFF9A7C31FE5BC2881E5C62247CAF9867387C2655C7A92D3264B40323CF4463 8C514C4F9C8AE0F0932EC697CBF93FD0B524E2AD7DD8867571AD70AB9022AD19 3DDF0F4B6FA338DB646E3AC59DD30511C72F971246CAF991147E5B521B7610B6 27B6611B837F27B74329B5034A699D504A97621B81FE61DCB9388C3A62FB95F8 D619F1EF3780EE6707F6A777E0801C191D38942DC59CDB9918A51789917A0FF0 1D61847E14BE378C113A908D1CC613DF8BF8CAA4D891DC2EA8E53180A3F9C07C BB2C2CF62E15E960DB44D5D198BC45860CB2D9048A63C2B958B890FEF3EE6463 A46E640F461156DCA33E27E9A594D28E2DF16DF8F24A3936927B32A713B679CD 18AB1B103EF17C1C0CB35A31F9462AB23A6536627B65937B806E8C7266070E67 7560B6571D8CCBBA30D5AD16B72A48BFFBC5F8F6E0AD3D932E3C8481C555685D BB88144F5DE8395BC1D0C512AA39521CCB9742A3B00B7BD89681F5E05D03B706 36E00CC539EB6A3CD7BD7FDCAD4D75A6B70152BDCE22C278A270337CCEE0B297 0D16FAD4E3DB2B65F8E252193CABBB60572515EE17948E6FAF964B479B575DDA 7EEC3842CE2FA2B1E11C5CBEAC8228D3D988B9BC18576CF5B13CA0098EA59DF0 6F04B4F2DBB186ECA059D08108B2A75369077E30CBF7CDF2388E42AF0338ACB6 1713E85EEC5153878FB516DC6F9DC68F676231E66A1E168634419D0CB232B155 B833E9867FA917E74EFA7FB877F64766B1A6D391E36F0CF3A3F3DCB75C0BC6B7 3484FA210018ABE51FF7C97A83ED7B29831DA29BB8F041138E64B6625B7803BA DF3F9138A98CDA5D784F132916AB80147DFCD9AAB3CBDCDA0CCA5A2733A779D7 E0D75B45A6CA49AD98605B856FF462EDD955A30C30E64685694F9DBDE6F3B3A6 5B479CA8765E8D0D7A969814D0865F7CAA304E2F3C78FAED2A8CBE5652FBD709 CBA751D07FFC85DC1F6F94D4FE625D8971B72A5E54288ACFF172E697BFDF3DEA D3E57ACBFFB9ECF4FCF726EDFCA5FB393FE77579D817BBCFF9FA33CB972E715E B66431962D5D727BF9B26592658CA5722C952C27B01F87E1B02B972F932882AF 87848661D1E22598B3703966CE5F8E19F39662C6DCC598397711E6CC5B84450B 1789301C9639AB562CEF019D63C9E2C598BB680570E303C07E0AE0B596069407 A8C06852C131C6DCF98BB164D122E662CDAA951245F035FEAEFBAC05C4B7FE81 3A5EEBD0E97F149DE16768E0A60B449FC2AC794B284C480F7FEDEA5592D52B57 08F9740E4A37C9A7FBE73C179DBE07D0EC73100DAE5BD1766731C53991FC6461 38ECBA35AB057FD58A15127D5D1DC93ABAC6712F5C4A7CF7058435E8F03B84F6 0035EA206FA48C3A158BC82F3028046B29EC7AE2AF21D9067AA7253A5AA724EB D7ACC1EA9514FF8AB598B36423A62DDC80A9F3D762EABC3598367F0D662F5A8B 65CB5763D58A95C45FC5909CD1D795E8EA6849B44E694836AE5B8380A0602C5F B98EECF71ED96F22E0BB1208DD0BC49C22FB1961E9B295F0F30FC0EA15CBA1AF AB2DB82C9BF99BD6AF03A507ABD6AC858DFE1E1C56D7C43E6535ECD873106735 55E81E9C24DD56E3F0A18338A5715CEC4FCAD03C79229120D9B2713D8D3BEEE3 A89A2A3C69CCC0DB80961497A0B0B008B676F6D0DFBB10BC8785178D47C41A9B BA3A949514C3C9E10ED4540F276EDDB4916D22F63EE5E3C4B1A3D84C71AAA9AA E0E811558AF7088E1D5523904B32B66EDE4479610132D2520567FB161A77D3B8 E7F0A103A8282B873A8551DAB2054ADBC4FE1CA8A47168617E1E8202FC457CBF 4EF965DB827973E1E2E448B2D4B161ED1AFF6D14E7817D7B505A5C24D2B863FB 562C5A309FD2791CAA879545DAF7EEDE25F28FD2B62D58387F1EEC6E5BD1B59D 907F9F6FC7F62D290E77EC90929488C0FBFE38A3AF871FC78FC3D75F7E513DF2 BB11D18B172E1069E374DBDA58C1D8D0002B962D95EE52DA2ED9BD530CCD3F5D B36A4596D2B6AD38B87F0FB651BABEF9EACB8ABFFEE52F93C9EFE3B1A347678E 1E3512DBB76EC1FAB56B3077F6ACCA7F7EFCD1AC3EDDBFCFFAECEFF925D7098F F17BE97FC2FEBFCD8AFBFF2AECF5CB7B01F73D7FB4FFAFC7BF61FFDF577BF67F 3D4A798CF300EFB39B4963806394B70EECDFDBEF9CF7E4E5352D8FF69F95F1F9 3B6F65A5C5282ACA177BFD96960C725E9827E629FAEEFFABA3AD497997C7E71E A8282F83AE8EA6C8CBFDCEBDDCC533FD9EFD6B15F6FF6D6CA817FBFBF25EBFBC 7F6F23AFA1EB735E5B235B87D3977FC6409FF2BB3A0228EF363536C090C6425C CEFB9EDFF7F713EF530ABE6AEFFD7FF97B5F627F5FFE462E7FEF6B80F3B6365E 63D9DCCD7FA9877FE19C89D87B38323C8CBF1A870BC646039F8785A2BD7BFCAD C8FF4DFBFF32BFDBFE572F5F8101D980DF43E0E3CAA58B039EF31E408FF60FFE 6FD8FFB7679FDFC79DFFFBF6FF556CFF079B1F74BD79AEDDFDA631DC6E9C85AB D959720DA97F750E5E56A6354369FF993BE01CB6E5050CA5FD7733374267475B 2FAECBBEE1F0B6BE84A1B4FFEE37CF51BB5309FB1DFF25BEADE7B07B188A5302 E06373094369FF3D6E99A0A230132D0D3570DAF3015A1A6B51599C032FD27F28 EDBFA7E57914A645233F350A056931C2E573E60FA5FD37D15117B6F2B038DF03 3EBF7D49EFDE50DAFF1933E7E0E2C5CB9831756ADF6F620DFF3DED3FE78DFF6B FF7F5FFBAF50CCFE5F69FFFFEFFB7FFFFFF9FEDF68B3F27EDFFFF3D69C6C23FF FE5FE3036DD937FE06F8F69F8E7B202E53B3AFE316D0EFFB7F85015AE8CCB319 F47B7F8CDD618DE05D44D8EDFBFD3F8A071EC727F6FBCEDF66933B1879BD1CDF 12BC6BBB70A74A2A5C3EE7EB5B2F383CF61B7FDF9F8B8F74ADE8444013A055D0 8135A9EDC28D6CA5AABEB403ECFF846CF5E1B7460FDD1786340E3A7F3084ACF9 FEDEC8A641E70F9E744CB7A934554E6C1960FEA0DC7448FCDB953C7F50D767FE A08EE70F9EA67C7D6DB40192ABEB20E17C737195CCB53E32781CBABF42407E9C FE05A78A72A09E9B02F59C2468E4A7C9E218E8D09A840325E90212AD9F1E8539 FE3D76E5C443E26E8A5DB909323D06E06E2C4981E4FE1548FCAF604349322427 A9AC68FC80F545BC97FC65487C2E637521C573A9CFF32BE2CE2F4B8424E41A24 A1D7210926045DC3DCE2580149D055D935F5EF30AD98E2BAB20E8ADC89157190 4410F78119585781480A1F76558608FA7DF45B19476334FDFED15BCEFDBA3A06 9298ABFC420C246ADF3E8A97C3C75C9741ED9BFEE93DFD2BFE5E1B85EF7C4FC2 45E3273C75FD777A0AC624DEC2EFA9FF5C4EFC88FFADDF3F1D6AFDF7B8EF9F0E A5FE7BDCF74F07ABFF86F2FDD3DFDB6E1A1B1BD79C397B96C6366764382373F5 0D0C0686BECCE5E7DA72AE7847C2D7199ED44FF61802C27C1C6463CE33323962 2C44D79B6ACAC53A50761F070ECB1FCBE6BD5CE57C1E230C952FC613D20E195F 5FC6A7F18CDB50F5E7B09D1D72BEBEF86EF7D34291CFFB2496EF9B27103EFEAF 03A2FCC00264A6A7F58039CCD563F95229EC46FE49A0E69CEA8060BFDCACCC1E C8EDA7A7A7277E976EFA49C079D49F0644E9969F519097D7835E7C3A6A6AEAA1 A97B06758DEDA8AA6B41654D232AAAEA515E5E85D29252EA5B17A3B4A8182545 4502CC67AE9C5F57570B2D6D1DB4B4778A772094959571E8D021B1FF6F5FF0DA 0AF1CD24053ECF5168135F5BEFACD8DB37393959BCC3207FDF4111DBB66DEBC7 6F6D69EE195BF2FB011C86C1FBEEF6C5952B577AF806DDF9EFB71CCCD5D2D2BA CFAEAEAE6E375827BEAF0632D06FBEF6C85F0639F7F78EFFFFAFFCFF5FF91F4A F91FE5B119555DCD62FEE4E5B894A72AFF9695FB710A1F601AEC3097FADE3FE7 03191D1852F9DF7F700782300C97B0082A08C609E2291500939201895ECA13CB FFB51409A2310AE9D889073087270D42D4E2BAF0AB3F609A2E7D62F98FDBF617 B45D9A832EF7A3287039895CDB3A9C716CC526832668DFAA7D62F9E7B549660B FE82BB877E04B6DBA06B5F1296AF05BE1F4558EA38A4F27F74ECAB305BF34760 9406302608F8DC0B1F7C98CFEBCB9E66FE6F55B2643E9225E7F127C99BBBE95C 3C3F3FA2A22C07F6EFDD8D9D4A94EECD9BC49CCCBAD5AB24EA6AAAFDFC36AC5D 838DEBD64A1872BEAACA21181AE8C3F08C3E366D5CC75CC13F7A4445A2A27C10 67F4746174D6005B376F1C902FF6A23978000F22C370E5F225AC273E3F2B3BAA AA22E1EB91E1A1B8687A413C43E3B08A7C95C3071DF6EEDA2974DB48713377E1 FC79B6475495259B36AC936CDFB6C576F70E25E1BF65E306F09C17E9E0C07C35 95C322FE7BBEDE88897A00CB5B37A1AE76443C2BE3746F5CBF162A870EE2AEAF 97F0B7B2B825BE15C87A501C9223879525CA07F6C3DBD31D1161A1B879C34CCC 33AD5CBA14CA07F661DD9A5510FE5E8FFC39FE1EBE8A8C7FD7C70BD10F227BE4 2F5BBC08C9490954C64E8BEF12DEF5F1445464042C6E9A0BFF352B5708FBA81E 3E84DD3B95B099E7F128CED52B9763F5F2E5983665CA9584F838E89ED6C6FA75 6BAEF09C16A557765FD7AC92DF1F1BD6313B2B0B151565C8A07A85BFBDE7EBE3 8D250B17C8E4EB9DC6C1FD7B294C66AF3077EFFA0A1B1D22BEAB93035D0B8393 BD3D8C0CCFE0205D5BB17489F06359228CB363EF3007F78B3428FA393B38E09C B121940F1DA0342C03A78DEDAF4C61070AC3E9ED15B7C323F9CC97E77D457E4F 9883FB847CF6E37D57D2529211171B23D6FC050504083E3FA7E5FCCF61E2060A 43E9671D4F507EB87AE9024E6B9EC4DEDD3BC4736ED68D203976F48864B0307C 0FF6EEDE799FD3B067E70EECDC4EE56BCB266CDEB01ECB972CBECF7C96FFB830 8F29FF7D8F01C3B8BA3AD73839D9C3C1E10EC1AE07F6DDAEA3A33D9C9C1CCA29 9CC4DDDD45E2E6ED2409D04994F8EBC64BEE1C8992B0FF930E7E0F98E2B77275 7592B8F6E1B35C3E7273B291C7C8CD112E9FF3616929EBEBF17E4F8E8E77AC5C BC1C24F77BF165DFC22C28C8A7BAB600854585C2E5733EACAD2D28DFCA9E7795 93EBEC617FF1BE7612FC7413C07CFB6E7E497121F5538BC5DC74594989E8AFCA DEEB8F848DB5256EDB58C99E13AA2B23CF39070F2E84C2E1680CECED657C7E46 5725BEB3598D869A1A3456D7A2ADB9B9971D8EABEC4759713E74F434E0A3EA81 8BDB227BF8CC498C8E434A5C22B21EA640B2E3EF68AF6F405B430DD0528DFFDA 138C3B69D530D23986007F2F28ABED12F95BCE6F6F6A8664F73094246741B2F7 23A0835AEAF616DC30D1C3C7078231311478DF1638E99402F5C37B05F7DAF658 89223F3D3611923DC39115974417F8794BB3E04E0E03FE45C1FE48DDDE4F379B 09AE8ACA6EC9E58D8FF86D2D2DFC10B0E71BA074057FDF1D8809C1C067B781B7 2E92BBEE3C42A89F78CFD743E243F0BAEBDAC3EFEAE84442542C52E312909B10 8FF1B6F5385D08A82700AF9F073E5C6928EB27BA3AC0C3DD55E2E1E12A71F778 C4178B7176BD8F92144AFFE17F62D9B11B386AE106EDD84EFC7DA9614F18CA43 707373A1BCEC2A20CF3F7CA4C52490ED3E44514A06A6ACD883D14B55314A3DA6 D73DE4F08A7C2E3B4F73707845BE85C5CDFB5C86B81C38129CE8B72873DD607D 1D14CA2287977319F2E70F4F81E18A95C2FF03529B5370 } end end doublecmd-1.1.30/src/fopenwith.pas0000644000175000001440000002533515104114162016074 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Open with other application dialog Copyright (C) 2012-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fOpenWith; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, EditBtn, Buttons, ButtonPanel, ComCtrls, Menus, Types; type { TfrmOpenWith } TfrmOpenWith = class(TForm) btnCommands: TSpeedButton; ButtonPanel: TButtonPanel; chkSaveAssociation: TCheckBox; chkCustomCommand: TCheckBox; chkUseAsDefault: TCheckBox; fneCommand: TFileNameEdit; ImageList: TImageList; lblMimeType: TLabel; miListOfURLs: TMenuItem; miSingleURL: TMenuItem; miListOfFiles: TMenuItem; miSingleFileName: TMenuItem; pnlFilter: TPanel; pnlOpenWith: TPanel; pmFieldCodes: TPopupMenu; tfeApplications: TTreeFilterEdit; tvApplications: TTreeView; procedure btnCommandsClick(Sender: TObject); procedure CancelButtonClick(Sender: TObject); procedure chkCustomCommandChange(Sender: TObject); procedure chkSaveAssociationChange(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure miFieldCodeClick(Sender: TObject); procedure OKButtonClick(Sender: TObject); procedure tvApplicationsDeletion(Sender: TObject; Node: TTreeNode); procedure tvApplicationsSelectionChanged(Sender: TObject); private FMimeType: String; FFileList: TStringList; procedure LoadApplicationList; function TreeNodeCompare(Node1, Node2: TTreeNode): Integer; procedure LoadBitmap(ANode: TTreeNode; const AName: String); public constructor Create(TheOwner: TComponent; AFileList: TStringList); reintroduce; end; procedure ShowOpenWithDlg(TheOwner: TComponent; const FileList: TStringList); implementation {$R *.lfm} uses LCLProc, DCStrUtils, uOSUtils, uPixMapManager, uGlobs, uMimeActions, uMimeType, uLng, LazUTF8, Math, uXdg, uGraphics; const CATEGORY_OTHER = 11; // 'Other' category index const // See https://specifications.freedesktop.org/menu-spec/latest CATEGORIES: array[0..12] of String = ( 'AudioVideo', 'Audio', 'Video', 'Development', 'Education', 'Game', 'Graphics', 'Network', 'Office', 'Science', 'Settings', 'System', 'Utility' ); procedure ShowOpenWithDlg(TheOwner: TComponent; const FileList: TStringList); begin with TfrmOpenWith.Create(TheOwner, FileList) do begin Show; end; end; { TfrmOpenWith } constructor TfrmOpenWith.Create(TheOwner: TComponent; AFileList: TStringList); begin FFileList:= AFileList; inherited Create(TheOwner); InitPropStorage(Self); end; procedure TfrmOpenWith.FormCreate(Sender: TObject); begin ImageList.Width:= gIconsSize; ImageList.Height:= gIconsSize; FMimeType:= GetFileMimeType(FFileList[0]); lblMimeType.Caption:= Format(lblMimeType.Caption, [FMimeType]); with tvApplications do begin LoadBitmap(Items.AddChild(nil, rsOpenWithMultimedia), 'applications-multimedia'); LoadBitmap(Items.AddChild(nil, rsOpenWithDevelopment), 'applications-development'); LoadBitmap(Items.AddChild(nil, rsOpenWithEducation), 'applications-education'); LoadBitmap(Items.AddChild(nil, rsOpenWithGames), 'applications-games'); LoadBitmap(Items.AddChild(nil, rsOpenWithGraphics), 'applications-graphics'); LoadBitmap(Items.AddChild(nil, rsOpenWithNetwork), 'applications-internet'); LoadBitmap(Items.AddChild(nil, rsOpenWithOffice), 'applications-office'); LoadBitmap(Items.AddChild(nil, rsOpenWithScience), 'applications-science'); LoadBitmap(Items.AddChild(nil, rsOpenWithSettings), 'preferences-system'); LoadBitmap(Items.AddChild(nil, rsOpenWithSystem), 'applications-system'); LoadBitmap(Items.AddChild(nil, rsOpenWithUtility), 'applications-accessories'); LoadBitmap(Items.AddChild(nil, rsOpenWithOther), 'applications-other'); end; LoadApplicationList; tvApplications.CustomSort(@TreeNodeCompare); end; procedure TfrmOpenWith.chkCustomCommandChange(Sender: TObject); begin pnlOpenWith.Enabled:= chkCustomCommand.Checked; end; procedure TfrmOpenWith.chkSaveAssociationChange(Sender: TObject); begin chkUseAsDefault.Enabled:= chkSaveAssociation.Checked; end; procedure TfrmOpenWith.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmOpenWith.btnCommandsClick(Sender: TObject); begin pmFieldCodes.PopUp(); end; procedure TfrmOpenWith.CancelButtonClick(Sender: TObject); begin Close; end; procedure TfrmOpenWith.FormDestroy(Sender: TObject); begin FFileList.Free; end; procedure TfrmOpenWith.miFieldCodeClick(Sender: TObject); begin fneCommand.Text:= fneCommand.Text + #32 + TMenuItem(Sender).Hint; fneCommand.SelStart:= UTF8Length(fneCommand.Text); end; procedure TfrmOpenWith.OKButtonClick(Sender: TObject); var DesktopEntry: TDesktopFileEntry; DesktopFile: PDesktopFileEntry = nil; begin if chkCustomCommand.Checked then begin DesktopFile:= @DesktopEntry; DesktopEntry.MimeType:= FMimeType; DesktopEntry.ExecWithParams:= fneCommand.Text; end else if tvApplications.SelectionCount > 0 then begin if Assigned(tvApplications.Selected.Data) then begin DesktopFile:= PDesktopFileEntry(tvApplications.Selected.Data); fneCommand.Text:= DesktopFile^.DesktopFilePath; end; end; if Assigned(DesktopFile) then begin if chkSaveAssociation.Checked then begin if not AddDesktopEntry(FMimeType, fneCommand.Text, chkUseAsDefault.Checked) then begin MessageDlg(rsMsgErrSaveAssociation, mtError, [mbOK], 0); end; end; fneCommand.Text:= TranslateAppExecToCmdLine(DesktopFile, FFileList); ExecCmdFork(fneCommand.Text); end; Close; end; procedure TfrmOpenWith.tvApplicationsDeletion(Sender: TObject; Node: TTreeNode); var DesktopFile: PDesktopFileEntry; begin if Assigned(Node.Data) then begin DesktopFile:= PDesktopFileEntry(Node.Data); Dispose(DesktopFile); end; end; procedure TfrmOpenWith.tvApplicationsSelectionChanged(Sender: TObject); var DesktopFile: PDesktopFileEntry; begin if tvApplications.SelectionCount > 0 then begin chkCustomCommand.Checked:= False; if (tvApplications.Selected.Data = nil) then begin DesktopFile:= nil; fneCommand.Text:= EmptyStr; end else begin DesktopFile:= PDesktopFileEntry(tvApplications.Selected.Data); fneCommand.Text:= DesktopFile^.ExecWithParams; end; end; end; procedure TfrmOpenWith.LoadApplicationList; const APPS = 'applications'; var Folder: String; I, J, K: Integer; TreeNode: TTreeNode; Index, Count: Integer; DataDirs: TStringArray; DesktopFile: PDesktopFileEntry; Applications, Folders: TStringList; function GetCategoryIndex(const Category: String): Integer; var Index: Integer; begin Result:= CATEGORY_OTHER; // Default 'other' category for Index:= Low(CATEGORIES) to High(CATEGORIES) do begin if SameText(CATEGORIES[Index], Category) then begin if Index < 3 then Result:= 0 else begin Result:= Index - 2; end; Break; end; end; end; begin Folders:= TStringList.Create; Folders.CaseSensitive:= True; // $XDG_DATA_HOME Folder:= IncludeTrailingBackslash(GetUserDataDir) + APPS; if (Folders.IndexOf(Folder) < 0) then Folders.Add(Folder); // $XDG_DATA_DIRS DataDirs:= GetSystemDataDirs; for I:= Low(DataDirs) to High(DataDirs) do begin Folder:= IncludeTrailingBackslash(DataDirs[I]) + APPS; if (Folders.IndexOf(Folder) < 0) then Folders.Add(Folder); end; for I:= 0 to Folders.Count - 1 do begin Applications:= FindAllFiles(Folders[I], '*.desktop', True); for J:= 0 to Applications.Count - 1 do begin DesktopFile:= GetDesktopEntry(Applications[J]); if Assigned(DesktopFile) then begin if DesktopFile^.Hidden or Contains(DesktopFile^.Categories, 'Screensaver') then begin Dispose(DesktopFile); Continue; end; with DesktopFile^ do begin DesktopFilePath:= ExtractDirLevel(Folders[I] + PathDelim, DesktopFilePath); DesktopFilePath:= StringReplace(DesktopFilePath, PathDelim, '-', [rfReplaceAll]); end; // Determine application category Count:= Min(3, Length(DesktopFile^.Categories)); if Count = 0 then Index:= CATEGORY_OTHER else begin for K:= 0 to Count - 1 do begin Index:= GetCategoryIndex(DesktopFile^.Categories[K]); if Index <> CATEGORY_OTHER then Break; end; end; TreeNode:= tvApplications.Items.TopLvlItems[Index]; TreeNode:= tvApplications.Items.AddChild(TreeNode, DesktopFile^.DisplayName); TreeNode.Data:= DesktopFile; LoadBitmap(TreeNode, DesktopFile^.IconName); end; end; Applications.Free; end; Folders.Free; // Hide empty categories for Index:= 0 to tvApplications.Items.TopLvlCount - 1 do begin if tvApplications.Items.TopLvlItems[Index].Count = 0 then tvApplications.Items.TopLvlItems[Index].Visible:= False; end; end; function TfrmOpenWith.TreeNodeCompare(Node1, Node2: TTreeNode): Integer; begin if SameText(Node1.Text, rsOpenWithOther) then Result:= +1 else if SameText(Node2.Text, rsOpenWithOther) then Result:= -1 else Result := LazUTF8.Utf8CompareStr(Node1.Text, Node2.Text); end; procedure TfrmOpenWith.LoadBitmap(ANode: TTreeNode; const AName: String); var Bitmap: TBitmap; ImageIndex: PtrInt; begin ImageIndex:= PixMapManager.GetIconByName(AName); if ImageIndex >= 0 then begin Bitmap:= PixMapManager.GetBitmap(ImageIndex); if Assigned(Bitmap) then begin BitmapCenter(Bitmap, ImageList.Width, ImageList.Height); ANode.ImageIndex:= ImageList.Add(Bitmap, nil); ANode.SelectedIndex:= ANode.ImageIndex; ANode.StateIndex:= ANode.ImageIndex; Bitmap.Free; end; end; end; end. doublecmd-1.1.30/src/fopenwith.lrj0000644000175000001440000000377315104114162016102 0ustar alexxusers{"version":1,"strings":[ {"hash":161081070,"name":"tfrmopenwith.caption","sourcebytes":[67,104,111,111,115,101,32,97,110,32,97,112,112,108,105,99,97,116,105,111,110],"value":"Choose an application"}, {"hash":177247699,"name":"tfrmopenwith.lblmimetype.caption","sourcebytes":[70,105,108,101,32,116,121,112,101,32,116,111,32,98,101,32,111,112,101,110,101,100,58,32,37,115],"value":"File type to be opened: %s"}, {"hash":194162686,"name":"tfrmopenwith.chkuseasdefault.caption","sourcebytes":[83,101,116,32,115,101,108,101,99,116,101,100,32,97,112,112,108,105,99,97,116,105,111,110,32,97,115,32,100,101,102,97,117,108,116,32,97,99,116,105,111,110],"value":"Set selected application as default action"}, {"hash":118058372,"name":"tfrmopenwith.chkcustomcommand.caption","sourcebytes":[67,117,115,116,111,109,32,99,111,109,109,97,110,100],"value":"Custom command"}, {"hash":244686542,"name":"tfrmopenwith.chksaveassociation.caption","sourcebytes":[83,97,118,101,32,97,115,115,111,99,105,97,116,105,111,110],"value":"Save association"}, {"hash":206933237,"name":"tfrmopenwith.misinglefilename.caption","sourcebytes":[83,105,110,103,108,101,32,102,105,108,101,32,110,97,109,101],"value":"Single file name"}, {"hash":694,"name":"tfrmopenwith.misinglefilename.hint","sourcebytes":[37,102],"value":"%f"}, {"hash":31589283,"name":"tfrmopenwith.milistoffiles.caption","sourcebytes":[77,117,108,116,105,112,108,101,32,102,105,108,101,32,110,97,109,101,115],"value":"Multiple file names"}, {"hash":662,"name":"tfrmopenwith.milistoffiles.hint","sourcebytes":[37,70],"value":"%F"}, {"hash":237173289,"name":"tfrmopenwith.misingleurl.caption","sourcebytes":[83,105,110,103,108,101,32,85,82,73],"value":"Single URI"}, {"hash":709,"name":"tfrmopenwith.misingleurl.hint","sourcebytes":[37,117],"value":"%u"}, {"hash":112596803,"name":"tfrmopenwith.milistofurls.caption","sourcebytes":[77,117,108,116,105,112,108,101,32,85,82,73,115],"value":"Multiple URIs"}, {"hash":677,"name":"tfrmopenwith.milistofurls.hint","sourcebytes":[37,85],"value":"%U"} ]} doublecmd-1.1.30/src/fopenwith.lfm0000644000175000001440000001720215104114162016061 0ustar alexxusersobject frmOpenWith: TfrmOpenWith Left = 421 Height = 520 Top = 126 Width = 410 Caption = 'Choose an application' ClientHeight = 520 ClientWidth = 410 OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy Position = poOwnerFormCenter LCLVersion = '1.8.2.0' object lblMimeType: TLabel Left = 6 Height = 18 Top = 6 Width = 404 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'File type to be opened: %s' ParentColor = False end object pnlOpenWith: TPanel Left = 0 Height = 38 Top = 385 Width = 410 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 38 ClientWidth = 410 Color = clForm Enabled = False ParentColor = False TabOrder = 0 object fneCommand: TFileNameEdit AnchorSideLeft.Control = pnlOpenWith AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCommands AnchorSideBottom.Side = asrBottom Left = 6 Height = 26 Top = 6 Width = 378 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 MaxLength = 0 TabOrder = 0 end object btnCommands: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneCommand AnchorSideRight.Control = pnlOpenWith AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 384 Height = 26 Top = 6 Width = 20 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCommandsClick PopupMenu = pmFieldCodes end end object ButtonPanel: TButtonPanel Left = 6 Height = 37 Top = 477 Width = 398 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True OKButton.OnClick = OKButtonClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True CancelButton.OnClick = CancelButtonClick TabOrder = 1 ShowButtons = [pbOK, pbCancel] end object tvApplications: TTreeView Left = 0 Height = 293 Top = 30 Width = 410 Align = alClient BorderSpacing.Top = 6 Images = ImageList ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 2 OnDeletion = tvApplicationsDeletion OnSelectionChanged = tvApplicationsSelectionChanged Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end object chkUseAsDefault: TCheckBox AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Top = 447 Width = 404 Align = alBottom BorderSpacing.Left = 6 Caption = 'Set selected application as default action' Enabled = False TabOrder = 3 end object chkCustomCommand: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 24 Top = 361 Width = 398 Align = alBottom Anchors = [akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = 'Custom command' OnChange = chkCustomCommandChange TabOrder = 4 end object chkSaveAssociation: TCheckBox Left = 6 Height = 24 Top = 423 Width = 404 Align = alBottom BorderSpacing.Left = 6 Caption = 'Save association' OnChange = chkSaveAssociationChange TabOrder = 5 end object pnlFilter: TPanel Left = 0 Height = 38 Top = 323 Width = 410 Align = alBottom AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ClientHeight = 38 ClientWidth = 410 Color = clForm ParentColor = False TabOrder = 6 object tfeApplications: TTreeFilterEdit AnchorSideLeft.Control = pnlFilter AnchorSideTop.Control = pnlFilter AnchorSideRight.Control = pnlFilter AnchorSideRight.Side = asrBottom Left = 6 Height = 26 Top = 6 Width = 398 ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 MaxLength = 0 TabOrder = 0 FilteredTreeview = tvApplications end end object ImageList: TImageList left = 208 top = 136 end object pmFieldCodes: TPopupMenu left = 123 top = 135 object miSingleFileName: TMenuItem Caption = 'Single file name' Hint = '%f' OnClick = miFieldCodeClick end object miListOfFiles: TMenuItem Caption = 'Multiple file names' Hint = '%F' OnClick = miFieldCodeClick end object miSingleURL: TMenuItem Caption = 'Single URI' Hint = '%u' OnClick = miFieldCodeClick end object miListOfURLs: TMenuItem Caption = 'Multiple URIs' Hint = '%U' OnClick = miFieldCodeClick end end end doublecmd-1.1.30/src/fmultirenamewait.pas0000644000175000001440000000175015104114162017441 0ustar alexxusersunit fMultiRenameWait; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, uOSForms; type { TfrmMultiRenameWait } TfrmMultiRenameWait = class(TModalDialog) ButtonPanel: TButtonPanel; lblMessage: TLabel; procedure FormPaint(Sender: TObject); private { private declarations } public { public declarations } end; function ShowMultiRenameWaitForm(const AFileName: String; TheOwner: TCustomForm): Boolean; implementation uses uShowForm; function ShowMultiRenameWaitForm(const AFileName: String; TheOwner: TCustomForm): Boolean; begin with TfrmMultiRenameWait.Create(TheOwner) do try Hint := AFileName; Result := (ShowModal = mrOK); finally Free; end; end; {$R *.lfm} { TfrmMultiRenameWait } procedure TfrmMultiRenameWait.FormPaint(Sender: TObject); begin OnPaint := nil; ShowEditorByGlob(Hint); end; end. doublecmd-1.1.30/src/fmultirenamewait.lrj0000644000175000001440000000112415104114162017440 0ustar alexxusers{"version":1,"strings":[ {"hash":185879090,"name":"tfrmmultirenamewait.caption","sourcebytes":[68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114],"value":"Double Commander"}, {"hash":58920577,"name":"tfrmmultirenamewait.lblmessage.caption","sourcebytes":[67,108,105,99,107,32,79,75,32,119,104,101,110,32,121,111,117,32,104,97,118,101,32,99,108,111,115,101,100,32,116,104,101,32,101,100,105,116,111,114,32,116,111,32,108,111,97,100,32,116,104,101,32,99,104,97,110,103,101,100,32,110,97,109,101,115,33],"value":"Click OK when you have closed the editor to load the changed names!"} ]} doublecmd-1.1.30/src/fmultirenamewait.lfm0000644000175000001440000000260015104114162017427 0ustar alexxusersobject frmMultiRenameWait: TfrmMultiRenameWait Left = 500 Height = 87 Top = 182 Width = 394 AutoSize = True BorderStyle = bsDialog Caption = 'Double Commander' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ClientHeight = 87 ClientWidth = 394 OnPaint = FormPaint Position = poOwnerFormCenter LCLVersion = '1.6.0.4' object lblMessage: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 12 Height = 15 Top = 12 Width = 369 Caption = 'Click OK when you have closed the editor to load the changed names!' ParentColor = False end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = lblMessage AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblMessage AnchorSideRight.Side = asrBottom Left = 18 Height = 34 Top = 57 Width = 357 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 24 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 0 ShowButtons = [pbOK, pbCancel] end end doublecmd-1.1.30/src/fmultirename.pas0000644000175000001440000032107115104114162016555 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi-Rename Tool dialog window Copyright (C) 2007-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Original comment: ---------------------------- Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : Pavel Letko (letcuv@centrum.cz) Advanced multi rename tool contributors: Copyright (C) 2007-2018 Alexander Koblov (alexx2000@mail.ru) } unit fMultiRename; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. LazUtf8, SysUtils, Classes, Graphics, Forms, StdCtrls, Menus, Controls, LCLType, StringHashList, Grids, ExtCtrls, Buttons, ActnList, EditBtn, KASButton, KASToolPanel, //DC DCXmlConfig, uOSForms, uRegExprW, uFileProperty, uFormCommands, uFileSourceSetFilePropertyOperation, DCStringHashListUtf8, uClassesEx, uFile, uFileSource, DCClassesUtf8, uHotkeyManager; const HotkeysCategoryMultiRename = 'MultiRename'; // <--Not displayed to user, stored in .scf (Shortcut Configuration File) type { TMultiRenamePreset } TMultiRenamePreset = class(TObject) private FPresetName: string; FFileName: string; FExtension: string; FFileNameStyle: integer; FExtensionStyle: integer; FFind: string; FReplace: string; FRegExp: boolean; FUseSubs: boolean; FCaseSens: Boolean; FOnlyFirst: Boolean; FCounter: string; FInterval: string; FWidth: integer; FLog: boolean; FLogFile: string; FLogAppend: boolean; public property PresetName: string read FPresetName write FPresetName; property FileName: string read FFileName write FFileName; property Extension: string read FExtension write FExtension; property FileNameStyle: integer read FFileNameStyle write FFileNameStyle; property ExtensionStyle: integer read FExtensionStyle write FExtensionStyle; property Find: string read FFind write FFind; property Replace: string read FReplace write FReplace; property RegExp: boolean read FRegExp write FRegExp; property UseSubs: boolean read FUseSubs write FUseSubs; property CaseSens: Boolean read FCaseSens write FCaseSens; property OnlyFirst: Boolean read FOnlyFirst write FOnlyFirst; property Counter: string read FCounter write FCounter; property Interval: string read FInterval write FInterval; property Width: integer read FWidth write FWidth; property Log: boolean read FLog write FLog; property LogFile: string read FLogFile write FLogFile; property LogAppend: boolean read FLogAppend write FLogAppend; constructor Create; destructor Destroy; override; end; { TMultiRenamePresetList } TMultiRenamePresetList = class(TList) private function GetMultiRenamePreset(Index: integer): TMultiRenamePreset; public property MultiRenamePreset[Index: integer]: TMultiRenamePreset read GetMultiRenamePreset; procedure Delete(Index: integer); procedure Clear; override; function Find(sPresetName: string): integer; end; { tTargetForMask } //Used to indicate of a mask is used for the "Filename" or the "Extension". tTargetForMask = (tfmFilename, tfmExtension); { tRenameMaskToUse } //Used as a parameter type to indicate the kind of field the mask is related to. tRenameMaskToUse = (rmtuFilename, rmtuExtension, rmtuCounter, rmtuDate, rmtuTime, rmtuPlugins); { tSourceOfInformation } tSourceOfInformation = (soiFilename, soiExtension, soiCounter, soiGUID, soiVariable, soiDate, soiTime, soiPlugins, soiFullName, soiPath); { tMenuActionStyle } //Used to help to group common or similar action done for each mask. tMenuActionStyle = (masStraight, masXCharacters, masXYCharacters, masAskVariable, masDirectorySelector); { TfrmMultiRename } TfrmMultiRename = class(TAloneForm, IFormCommands) cbCaseSens: TCheckBox; cbRegExp: TCheckBox; cbUseSubs: TCheckBox; cbOnlyFirst: TCheckBox; pnlFindReplace: TPanel; pnlButtons: TPanel; StringGrid: TStringGrid; pnlOptions: TPanel; pnlOptionsLeft: TPanel; gbMaska: TGroupBox; lbName: TLabel; cbName: TComboBox; btnAnyNameMask: TKASButton; cbNameMaskStyle: TComboBox; lbExt: TLabel; cbExt: TComboBox; btnAnyExtMask: TKASButton; cmbExtensionStyle: TComboBox; gbPresets: TGroupBox; cbPresets: TComboBox; btnPresets: TKASButton; spltMainSplitter: TSplitter; pnlOptionsRight: TKASToolPanel; gbFindReplace: TGroupBox; lbFind: TLabel; edFind: TEdit; lbReplace: TLabel; edReplace: TEdit; gbCounter: TGroupBox; lbStNb: TLabel; edPoc: TEdit; lbInterval: TLabel; edInterval: TEdit; lbWidth: TLabel; cmbxWidth: TComboBox; btnRestore: TBitBtn; btnRename: TBitBtn; btnConfig: TBitBtn; btnEditor: TBitBtn; btnClose: TBitBtn; cbLog: TCheckBox; cbLogAppend: TCheckBox; fneRenameLogFileFilename: TFileNameEdit; btnRelativeRenameLogFile: TSpeedButton; btnViewRenameLogFile: TSpeedButton; mmMainMenu: TMainMenu; miActions: TMenuItem; miResetAll: TMenuItem; miEditor: TMenuItem; miLoadNamesFromFile: TMenuItem; miEditNames: TMenuItem; miEditNewNames: TMenuItem; miSeparator1: TMenuItem; miConfiguration: TMenuItem; miSeparator2: TMenuItem; miRename: TMenuItem; miClose: TMenuItem; pmPresets: TPopupMenu; pmFloatingMainMaskMenu: TPopupMenu; pmDynamicMasks: TPopupMenu; pmEditDirect: TPopupMenu; mnuLoadFromFile: TMenuItem; mnuEditNames: TMenuItem; mnuEditNewNames: TMenuItem; pmPathToBeRelativeToHelper: TPopupMenu; actList: TActionList; actResetAll: TAction; actInvokeEditor: TAction; actLoadNamesFromFile: TAction; actLoadNamesFromClipboard: TAction; actEditNames: TAction; actEditNewNames: TAction; actConfig: TAction; actRename: TAction; actClose: TAction; actShowPresetsMenu: TAction; actDropDownPresetList: TAction; actLoadLastPreset: TAction; actLoadPreset: TAction; actLoadPreset1: TAction; actLoadPreset2: TAction; actLoadPreset3: TAction; actLoadPreset4: TAction; actLoadPreset5: TAction; actLoadPreset6: TAction; actLoadPreset7: TAction; actLoadPreset8: TAction; actLoadPreset9: TAction; actSavePreset: TAction; actSavePresetAs: TAction; actRenamePreset: TAction; actDeletePreset: TAction; actSortPresets: TAction; actAnyNameMask: TAction; actNameNameMask: TAction; actExtNameMask: TAction; actDateNameMask: TAction; actTimeNameMask: TAction; actCtrNameMask: TAction; actPlgnNameMask: TAction; actClearNameMask: TAction; actAnyExtMask: TAction; actNameExtMask: TAction; actExtExtMask: TAction; actDateExtMask: TAction; actTimeExtMask: TAction; actCtrExtMask: TAction; actPlgnExtMask: TAction; actClearExtMask: TAction; actInvokeRelativePath: TAction; actViewRenameLogFile: TAction; procedure FormCreate({%H-}Sender: TObject); procedure FormCloseQuery({%H-}Sender: TObject; var CanClose: boolean); procedure FormClose({%H-}Sender: TObject; var CloseAction: TCloseAction); procedure FormShow(Sender: TObject); procedure StringGridKeyDown({%H-}Sender: TObject; var Key: word; Shift: TShiftState); procedure StringGridMouseDown({%H-}Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: integer); procedure StringGridMouseUp({%H-}Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: integer); procedure StringGridSelection({%H-}Sender: TObject; {%H-}aCol, aRow: integer); procedure StringGridTopLeftChanged({%H-}Sender: TObject); procedure cbNameStyleChange({%H-}Sender: TObject); procedure cbPresetsChange({%H-}Sender: TObject); procedure cbPresetsCloseUp({%H-}Sender: TObject); procedure edFindChange({%H-}Sender: TObject); procedure edReplaceChange({%H-}Sender: TObject); procedure cbRegExpChange({%H-}Sender: TObject); procedure edPocChange({%H-}Sender: TObject); procedure edIntervalChange({%H-}Sender: TObject); procedure cbLogClick({%H-}Sender: TObject); procedure actExecute(Sender: TObject); procedure actInvokeRelativePathExecute(Sender: TObject); private IniPropStorage: TIniPropStorageEx; FCommands: TFormCommands; FActuallyRenamingFile: boolean; FSourceRow: integer; FMoveRow: boolean; FFileSource: IFileSource; FFiles: TFiles; FNewNames: TStringHashListUtf8; FOldNames: TStringHashListUtf8; FNames: TStringList; FslVariableNames, FslVariableValues, FslVariableSuggestionName, FslVariableSuggestionValue: TStringList; FRegExp: TRegExprW; FFindText: TStringList; FReplaceText: TStringList; FPluginDispatcher: tTargetForMask; FMultiRenamePresetList: TMultiRenamePresetList; FParamPresetToLoadOnStart: string; FLastPreset: string; FbRememberLog, FbRememberAppend: boolean; FsRememberRenameLogFilename: string; FLog: TStringListEx; property Commands: TFormCommands read FCommands implements IFormCommands; procedure RestoreProperties(Sender: TObject); procedure SetConfigurationState(bConfigurationSaved: boolean); function GetPresetNameForCommand(const Params: array of string): string; procedure LoadPresetsXml(AConfig: TXmlConfig); function isOkToLosePresetModification: boolean; procedure SavePreset(PresetName: string); procedure SavePresetsXml(AConfig: TXmlConfig); procedure SavePresets; procedure DeletePreset(PresetName: string); procedure FillPresetsList(const WantedSelectedPresetName: string = ''); procedure RefreshActivePresetCommands; procedure InitializeMaskHelper; procedure PopulateMainMenu; procedure PopulateFilenameMenu(AMenuSomething: TComponent); procedure PopulateExtensionMenu(AMenuSomething: TComponent); procedure BuildMaskMenu(AMenuSomething: TComponent; iTarget: tTargetForMask; iMenuTypeMask: tRenameMaskToUse); procedure BuildPresetsMenu(AMenuSomething: TComponent); procedure BuildMenuAndPopup(iTarget: tTargetForMask; iMenuTypeMask: tRenameMaskToUse); function GetMaskCategoryName(aRenameMaskToUse: tRenameMaskToUse): string; function GetImageIndexCategoryName(aRenameMaskToUse: tRenameMaskToUse): integer; function GetCategoryAction(TargetForMask: tTargetForMask; aRenameMask: tRenameMaskToUse): TAction; function AppendSubMenuToThisMenu(ATargetMenu: TMenuItem; sCaption: string; iImageIndex: integer): TMenuItem; function AppendActionMenuToThisMenu(ATargetMenu: TMenuItem; paramAction: TAction): TMenuItem; procedure MenuItemXCharactersMaskClick(Sender: TObject); procedure MenuItemVariableMaskClick(Sender: TObject); procedure MenuItemStraightMaskClick(Sender: TObject); procedure MenuItemDirectorySelectorMaskClick(Sender: TObject); procedure PopupDynamicMenuAtThisControl(APopUpMenu: TPopupMenu; AControl: TControl); procedure miPluginClick(Sender: TObject); procedure InsertMask(const Mask: string; edChoose: TComboBox); procedure InsertMask(const Mask: string; TargetForMask: tTargetForMask); function sReplace(sMask: string; ItemNr: integer): string; function sReplaceXX(const sFormatStr, sOrig: string): string; function sReplaceVariable(const sFormatStr: string): string; function sReplaceBadChars(const sPath: string): string; function IsLetter(AChar: AnsiChar): boolean; function ApplyStyle(InputString: string; Style: integer): string; function FirstCharToUppercaseUTF8(InputString: string): string; function FirstCharOfFirstWordToUppercaseUTF8(InputString: string): string; function FirstCharOfEveryWordToUppercaseUTF8(InputString: string): string; procedure LoadNamesFromList(const AFileList: TStrings); procedure LoadNamesFromFile(const AFileName: string); function FreshText(ItemIndex: integer): string; function sHandleFormatString(const sFormatStr: string; ItemNr: integer): string; procedure SetFilePropertyResult(Index: integer; aFile: TFile; aTemplate: TFileProperty; Result: TSetFilePropertyResult); procedure SetOutputGlobalRenameLogFilename; public { Public declarations } constructor Create(TheOwner: TComponent); override; //Not used for actual renaming file. Present there just for the "TfrmOptionsHotkeys.FillCommandList" function who need to create the form in memory to extract internal commands from it. constructor Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles; const paramPreset: string); reintroduce; destructor Destroy; override; published procedure cm_ResetAll(const Params: array of string); procedure cm_InvokeEditor(const {%H-}Params: array of string); procedure cm_LoadNamesFromFile(const {%H-}Params: array of string); procedure cm_LoadNamesFromClipboard(const {%H-}Params: array of string); procedure cm_EditNames(const {%H-}Params: array of string); procedure cm_EditNewNames(const {%H-}Params: array of string); procedure cm_Config(const {%H-}Params: array of string); procedure cm_Rename(const {%H-}Params: array of string); procedure cm_Close(const {%H-}Params: array of string); procedure cm_ShowPresetsMenu(const {%H-}Params: array of string); procedure cm_DropDownPresetList(const {%H-}Params: array of string); procedure cm_LoadPreset(const Params: array of string); procedure cm_LoadLastPreset(const {%H-}Params: array of string); procedure cm_LoadPreset1(const {%H-}Params: array of string); procedure cm_LoadPreset2(const {%H-}Params: array of string); procedure cm_LoadPreset3(const {%H-}Params: array of string); procedure cm_LoadPreset4(const {%H-}Params: array of string); procedure cm_LoadPreset5(const {%H-}Params: array of string); procedure cm_LoadPreset6(const {%H-}Params: array of string); procedure cm_LoadPreset7(const {%H-}Params: array of string); procedure cm_LoadPreset8(const {%H-}Params: array of string); procedure cm_LoadPreset9(const {%H-}Params: array of string); procedure cm_SavePreset(const Params: array of string); procedure cm_SavePresetAs(const Params: array of string); procedure cm_RenamePreset(const Params: array of string); procedure cm_DeletePreset(const Params: array of string); procedure cm_SortPresets(const Params: array of string); procedure cm_AnyNameMask(const {%H-}Params: array of string); procedure cm_NameNameMask(const {%H-}Params: array of string); procedure cm_ExtNameMask(const {%H-}Params: array of string); procedure cm_CtrNameMask(const {%H-}Params: array of string); procedure cm_DateNameMask(const {%H-}Params: array of string); procedure cm_TimeNameMask(const {%H-}Params: array of string); procedure cm_PlgnNameMask(const {%H-}Params: array of string); procedure cm_ClearNameMask(const {%H-}Params: array of string); procedure cm_AnyExtMask(const {%H-}Params: array of string); procedure cm_NameExtMask(const {%H-}Params: array of string); procedure cm_ExtExtMask(const {%H-}Params: array of string); procedure cm_CtrExtMask(const {%H-}Params: array of string); procedure cm_DateExtMask(const {%H-}Params: array of string); procedure cm_TimeExtMask(const {%H-}Params: array of string); procedure cm_PlgnExtMask(const {%H-}Params: array of string); procedure cm_ClearExtMask(const {%H-}Params: array of string); procedure cm_ViewRenameLogFile(const {%H-}Params: array of string); end; {initialization function} function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles; const PresetToLoad: string = ''): boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Dialogs, Math, Clipbrd, //DC fMain, uFileSourceOperation, uOperationsManager, uOSUtils, uDCUtils, uDebug, DCOSUtils, DCStrUtils, uLng, uGlobs, uSpecialDir, uFileProcs, uShowForm, fSelectTextRange, fSelectPathRange, uShowMsg, uFileFunctions, dmCommonData, fMultiRenameWait, fSortAnything, DCConvertEncoding; type tMaskHelper = record sMenuItem: string; sKeyword: string; MenuActionStyle: tMenuActionStyle; iMenuType: tRenameMaskToUse; iSourceOfInformation: tSourceOfInformation; end; const sPresetsSection = 'MultiRenamePresets'; sLASTPRESET = '{BC322BF1-2185-47F6-9F99-D27ED1E23E53}'; sFRESHMASKS = '{40422152-9D05-469E-9B81-791AF8C369D8}'; iTARGETMASK = $00000001; sREFRESHCOMMANDS = 'refreshcommands'; sDEFAULTLOGFILENAME = 'default.log'; CONFIG_NOTSAVED = False; CONFIG_SAVED = True; NBMAXHELPERS = 30; var //Sequence of operation to add a new mask: // 1. Add its entry below in the "MaskHelpers" array. // 2. Go immediately set its translatable string for the user in the function "InitializeMaskHelper" and the text in unit "uLng". // 3. When editing "InitializeMaskHelper", make sure to update the TWO columns of indexes. // 4. In the procedure "BuildMaskMenu", there is good chance you need to associated to the "AMenuItem.OnClick" the correct function based on "MaskHelpers[iSeekIndex].MenuActionStyle". // 5. If it's a NEW procedure, you'll need to write it. You may check "MenuItemXCharactersMaskClick" for inspiration. // 6. There is good chance you need to edit "sHandleFormatString" to add your new mask and action to do with it. MaskHelpers: array[0..pred(NBMAXHELPERS)] of tMaskHelper = ( (sMenuItem: ''; sKeyword: '[N]'; MenuActionStyle: masStraight; iMenuType: rmtuFilename; iSourceOfInformation: soiFilename), (sMenuItem: ''; sKeyword: '[Nx]'; MenuActionStyle: masXCharacters; iMenuType: rmtuFilename; iSourceOfInformation: soiFilename), (sMenuItem: ''; sKeyword: '[Nx:y]'; MenuActionStyle: masXYCharacters; iMenuType: rmtuFilename; iSourceOfInformation: soiFilename), (sMenuItem: ''; sKeyword: '[A]'; MenuActionStyle: masStraight; iMenuType: rmtuFilename; iSourceOfInformation: soiFullName), (sMenuItem: ''; sKeyword: '[Ax:y]'; MenuActionStyle: masXYCharacters; iMenuType: rmtuFilename; iSourceOfInformation: soiFullName), (sMenuItem: ''; sKeyword: '[P]'; MenuActionStyle: masDirectorySelector; iMenuType: rmtuFilename; iSourceOfInformation: soiPath), (sMenuItem: ''; sKeyword: '[E]'; MenuActionStyle: masStraight; iMenuType: rmtuExtension; iSourceOfInformation: soiExtension), (sMenuItem: ''; sKeyword: '[Ex]'; MenuActionStyle: masXCharacters; iMenuType: rmtuExtension; iSourceOfInformation: soiExtension), (sMenuItem: ''; sKeyword: '[Ex:y]'; MenuActionStyle: masXYCharacters; iMenuType: rmtuExtension; iSourceOfInformation: soiExtension), (sMenuItem: ''; sKeyword: '[C]'; MenuActionStyle: masStraight; iMenuType: rmtuCounter; iSourceOfInformation: soiCounter), (sMenuItem: ''; sKeyword: '[G]'; MenuActionStyle: masStraight; iMenuType: rmtuCounter; iSourceOfInformation: soiGUID), (sMenuItem: ''; sKeyword: '[V:x]'; MenuActionStyle: masAskVariable; iMenuType: rmtuCounter; iSourceOfInformation: soiVariable), (sMenuItem: ''; sKeyword: '[Y]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[YYYY]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[M]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[MM]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[MMM]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[MMMM]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[D]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[DD]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[DDD]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[DDDD]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[YYYY]-[MM]-[DD]'; MenuActionStyle: masStraight; iMenuType: rmtuDate; iSourceOfInformation: soiDate), (sMenuItem: ''; sKeyword: '[h]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[hh]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[n]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[nn]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[s]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[ss]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime), (sMenuItem: ''; sKeyword: '[hh]-[nn]-[ss]'; MenuActionStyle: masStraight; iMenuType: rmtuTime; iSourceOfInformation: soiTime) ); { TMultiRenamePreset.Create } constructor TMultiRenamePreset.Create; begin FPresetName := ''; FFileName := '[N]'; FExtension := '[E]'; FFileNameStyle := 0; FExtensionStyle := 0; FFind := ''; FReplace := ''; FRegExp := False; FUseSubs := False; FCaseSens := False; FOnlyFirst := False; FCounter := '1'; FInterval := '1'; FWidth := 0; FLog := False; FLogFile := ''; FLogAppend := False; end; { TMultiRenamePreset.Destory } // Not so necessary, but useful with a breakpoint to validate object is really free from memory when deleting an element from the list of clearing that list. destructor TMultiRenamePreset.Destroy; begin inherited Destroy; end; { TMultiRenamePresetList.GetMultiRenamePreset } function TMultiRenamePresetList.GetMultiRenamePreset(Index: integer): TMultiRenamePreset; begin Result := TMultiRenamePreset(Items[Index]); end; { TMultiRenamePresetList.Delete } procedure TMultiRenamePresetList.Delete(Index: integer); begin TMultiRenamePreset(Items[Index]).Free; inherited Delete(Index); end; { TMultiRenamePresetList.Clear } procedure TMultiRenamePresetList.Clear; var Index: integer; begin for Index := pred(Count) downto 0 do TMultiRenamePreset(Items[Index]).Free; inherited Clear; end; { TMultiRenamePresetList.Find } function TMultiRenamePresetList.Find(sPresetName: string): integer; var iSeeker: integer = 0; begin Result := -1; while (Result = -1) and (iSeeker < Count) do if SameText(sPresetName, MultiRenamePreset[iSeeker].PresetName) then Result := iSeeker else Inc(iSeeker); end; { TfrmMultiRename.Create } //Not used for actual renaming file. //Present there just for the "TfrmOptionsHotkeys.FillCommandList" function who need to create the form in memory to extract internal commands from it. constructor TfrmMultiRename.Create(TheOwner: TComponent); var FDummyFiles: TFiles; begin FDummyFiles := TFiles.Create(''); //Will be self destroyed by the "TfrmMultiRename" object itself. Create(TheOwner, nil, FDummyFiles, ''); end; { TfrmMultiRename.Create } constructor TfrmMultiRename.Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles; const paramPreset: string); begin FActuallyRenamingFile := False; FRegExp := TRegExprW.Create; FNames := TStringList.Create; FFindText := TStringList.Create; FFindText.StrictDelimiter := True; FFindText.Delimiter := '|'; FReplaceText := TStringList.Create; FReplaceText.StrictDelimiter := True; FReplaceText.Delimiter := '|'; FMultiRenamePresetList := TMultiRenamePresetList.Create; FNewNames := TStringHashListUtf8.Create(FileNameCaseSensitive); FOldNames := TStringHashListUtf8.Create(FileNameCaseSensitive); FslVariableNames := TStringList.Create; FslVariableValues := TStringList.Create; FslVariableSuggestionName := TStringList.Create; FslVariableSuggestionValue := TStringList.Create; FFileSource := aFileSource; FFiles := aFiles; aFiles := nil; FSourceRow := -1; FMoveRow := False; FParamPresetToLoadOnStart := paramPreset; inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, actList); end; { TfrmMultiRename.Destroy } destructor TfrmMultiRename.Destroy; begin inherited Destroy; FMultiRenamePresetList.Clear; FreeAndNil(FMultiRenamePresetList); FreeAndNil(FNewNames); FreeAndNil(FOldNames); FreeAndNil(FslVariableNames); FreeAndNil(FslVariableValues); FreeAndNil(FslVariableSuggestionName); FreeAndNil(FslVariableSuggestionValue); FreeAndNil(FFiles); FreeAndNil(FNames); FreeAndNil(FRegExp); FreeAndNil(FFindText); FreeAndNil(FReplaceText); end; { TfrmMultiRename.FormCreate } procedure TfrmMultiRename.FormCreate({%H-}Sender: TObject); var HMMultiRename: THMForm; begin // Localize File name style ComboBox ParseLineToList(rsMulRenFileNameStyleList, cbNameMaskStyle.Items); ParseLineToList(rsMulRenFileNameStyleList, cmbExtensionStyle.Items); InitializeMaskHelper; // Set row count StringGrid.RowCount := FFiles.Count + 1; StringGrid.FocusRectVisible := False; // Initialize property storage IniPropStorage := InitPropStorage(Self); IniPropStorage.OnRestoreProperties := @RestoreProperties; IniPropStorage.StoredValues.Add.DisplayName := 'lsvwFile_Columns.Item0_Width'; IniPropStorage.StoredValues.Add.DisplayName := 'lsvwFile_Columns.Item1_Width'; IniPropStorage.StoredValues.Add.DisplayName := 'lsvwFile_Columns.Item2_Width'; if gMulRenShowMenuBarOnTop then Menu := mmMainMenu else Menu := nil; if not gIconsInMenus then begin mmMainMenu.Images := nil; pmDynamicMasks.Images := nil; pmEditDirect.Images := nil; pmPresets.Images := nil; end; HMMultiRename := HotMan.Register(Self, HotkeysCategoryMultiRename); HMMultiRename.RegisterActionList(actList); cbExt.Items.Assign(glsRenameExtMaskHistory); cbName.Items.Assign(glsRenameNameMaskHistory); // Set default values for controls. cm_ResetAll([sREFRESHCOMMANDS + '=0']); // Initialize presets. LoadPresetsXml(gConfig); if (FParamPresetToLoadOnStart <> '') and (FMultiRenamePresetList.Find(FParamPresetToLoadOnStart) <> -1) then begin FillPresetsList(FParamPresetToLoadOnStart); end else begin case gMulRenLaunchBehavior of mrlbLastMaskUnderLastOne: FillPresetsList(sLASTPRESET); mrlbLastPreset: FillPresetsList(FLastPreset); mrlbFreshNew: FillPresetsList(sFRESHMASKS); end; end; PopulateMainMenu; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathToBeRelativeToHelper, mp_PATHHELPER, nil); FPluginDispatcher := tfmFilename; end; { TfrmMultiRename.FormCloseQuery } procedure TfrmMultiRename.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if not isOkToLosePresetModification then CanClose := False; end; { TfrmMultiRename.FormClose } procedure TfrmMultiRename.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin SavePreset(sLASTPRESET); glsRenameExtMaskHistory.Assign(cbExt.Items); glsRenameNameMaskHistory.Assign(cbName.Items); CloseAction := caFree; with StringGrid.Columns do begin IniPropStorage.StoredValue['lsvwFile_Columns.Item0_Width'] := IntToStr(Items[0].Width); IniPropStorage.StoredValue['lsvwFile_Columns.Item1_Width'] := IntToStr(Items[1].Width); IniPropStorage.StoredValue['lsvwFile_Columns.Item2_Width'] := IntToStr(Items[2].Width); end; end; procedure TfrmMultiRename.FormShow(Sender: TObject); var APoint: TPoint; begin {$IF DEFINED(LCLQT5)} gbPresets.Constraints.MaxHeight:= cbPresets.Height + (gbPresets.Height - gbPresets.ClientHeight) + gbPresets.ChildSizing.TopBottomSpacing * 2; {$ENDIF} APoint:= TPoint.Create(cbUseSubs.Left, 0); fneRenameLogFileFilename.BorderSpacing.Left:= gbFindReplace.ClientToParent(APoint, pnlOptionsRight).X; end; { TfrmMultiRename.StringGridKeyDown } procedure TfrmMultiRename.StringGridKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); var tmpFile: TFile; DestRow: integer; begin DestRow := StringGrid.Row; if (Shift = []) then begin if Key = VK_DELETE then begin FFiles.Delete(DestRow - 1); StringGrid.RowCount:= StringGrid.RowCount - 1; if FFiles.Count = 0 then begin OnCloseQuery:= nil; Close; end else begin StringGridTopLeftChanged(StringGrid); end; end; end; if (Shift = [ssShift]) then begin case Key of VK_UP: begin DestRow := StringGrid.Row - 1; end; VK_DOWN: begin DestRow := StringGrid.Row + 1; end; end; if (DestRow <> StringGrid.Row) and (0 < DestRow) and (DestRow < StringGrid.RowCount) then begin tmpFile := FFiles.Items[DestRow - 1]; FFiles.Items[DestRow - 1] := FFiles.Items[StringGrid.Row - 1]; FFiles.Items[StringGrid.Row - 1] := tmpFile; StringGridTopLeftChanged(StringGrid); end; end; end; { TfrmMultiRename.StringGridMouseDown } procedure TfrmMultiRename.StringGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); var SourceCol: integer = 0; begin if (Button = mbLeft) then begin StringGrid.MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then begin FMoveRow := True; end; end; end; { TfrmMultiRename.StringGridMouseUp } procedure TfrmMultiRename.StringGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin if Button = mbLeft then begin FMoveRow := False; end; end; { TfrmMultiRename.StringGridSelection } procedure TfrmMultiRename.StringGridSelection(Sender: TObject; aCol, aRow: integer); var tmpFile: TFile; begin if FMoveRow and (aRow <> FSourceRow) then begin tmpFile := FFiles.Items[aRow - 1]; FFiles.Items[aRow - 1] := FFiles.Items[FSourceRow - 1]; FFiles.Items[FSourceRow - 1] := tmpFile; FSourceRow := aRow; StringGridTopLeftChanged(StringGrid); end; end; { TfrmMultiRename.StringGridTopLeftChanged } procedure TfrmMultiRename.StringGridTopLeftChanged(Sender: TObject); var I, iRowCount: integer; begin iRowCount := StringGrid.TopRow + StringGrid.VisibleRowCount; if iRowCount > FFiles.Count then iRowCount := FFiles.Count; for I := StringGrid.TopRow to iRowCount do begin StringGrid.Cells[0, I] := FFiles[I - 1].Name; StringGrid.Cells[1, I] := FreshText(I - 1); StringGrid.Cells[2, I] := FFiles[I - 1].Path; end; end; { TfrmMultiRename.cbNameStyleChange } procedure TfrmMultiRename.cbNameStyleChange(Sender: TObject); begin StringGridTopLeftChanged(StringGrid); if ActiveControl <> cbPresets then SetConfigurationState(CONFIG_NOTSAVED); end; { TfrmMultiRename.cbPresetsChange } procedure TfrmMultiRename.cbPresetsChange(Sender: TObject); begin if cbPresets.ItemIndex <> 0 then cm_LoadPreset(['name=' + cbPresets.Items.Strings[cbPresets.ItemIndex]]) else cm_LoadPreset(['name=' + sLASTPRESET]); RefreshActivePresetCommands; end; { TfrmMultiRename.cbPresetsCloseUp } procedure TfrmMultiRename.cbPresetsCloseUp(Sender: TObject); begin if cbName.Enabled and gbMaska.Enabled then ActiveControl := cbName; cbName.SelStart := UTF8Length(cbName.Text); end; { TfrmMultiRename.edFindChange } procedure TfrmMultiRename.edFindChange(Sender: TObject); begin if cbRegExp.Checked then FRegExp.Expression := CeUtf8ToUtf16(edFind.Text) else begin FFindText.DelimitedText := edFind.Text; end; SetConfigurationState(CONFIG_NOTSAVED); StringGridTopLeftChanged(StringGrid); end; { TfrmMultiRename.edReplaceChange } procedure TfrmMultiRename.edReplaceChange(Sender: TObject); begin if not cbRegExp.Checked then begin FReplaceText.DelimitedText := edReplace.Text; end; SetConfigurationState(CONFIG_NOTSAVED); StringGridTopLeftChanged(StringGrid); end; { TfrmMultiRename.cbRegExpChange } procedure TfrmMultiRename.cbRegExpChange(Sender: TObject); begin if cbRegExp.Checked then cbUseSubs.Checked := boolean(cbUseSubs.Tag) else begin cbUseSubs.Tag := integer(cbUseSubs.Checked); cbUseSubs.Checked := False; end; cbUseSubs.Enabled := cbRegExp.Checked; edFindChange(edFind); edReplaceChange(edReplace); end; { TfrmMultiRename.edPocChange } procedure TfrmMultiRename.edPocChange(Sender: TObject); var c: integer; begin c := StrToIntDef(edPoc.Text, maxint); if c = MaxInt then with edPoc do //editbox only for numbers begin Text := '1'; SelectAll; end; SetConfigurationState(CONFIG_NOTSAVED); StringGridTopLeftChanged(StringGrid); end; { TfrmMultiRename.edIntervalChange } procedure TfrmMultiRename.edIntervalChange(Sender: TObject); var c: integer; begin c := StrToIntDef(edInterval.Text, maxint); if c = MaxInt then with edInterval do //editbox only for numbers begin Text := '1'; SelectAll; end; SetConfigurationState(CONFIG_NOTSAVED); StringGridTopLeftChanged(StringGrid); end; { TfrmMultiRename.cbLogClick } procedure TfrmMultiRename.cbLogClick(Sender: TObject); begin fneRenameLogFileFilename.Enabled := cbLog.Checked; actInvokeRelativePath.Enabled := cbLog.Checked; actViewRenameLogFile.Enabled := cbLog.Checked; cbLogAppend.Enabled := cbLog.Checked; SetConfigurationState(CONFIG_NOTSAVED); end; { TfrmMultiRename.actExecute } procedure TfrmMultiRename.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; { TfrmMultiRename.actInvokeRelativePathExecute } procedure TfrmMultiRename.actInvokeRelativePathExecute(Sender: TObject); begin fneRenameLogFileFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneRenameLogFileFilename, pfFILE); pmPathToBeRelativeToHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmMultiRename.RestoreProperties } procedure TfrmMultiRename.RestoreProperties(Sender: TObject); begin with StringGrid.Columns do begin Items[0].Width := StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item0_Width'], Items[0].Width); Items[1].Width := StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item1_Width'], Items[1].Width); Items[2].Width := StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item2_Width'], Items[2].Width); end; end; { TfrmMultiRename.SetConfigurationState } procedure TfrmMultiRename.SetConfigurationState(bConfigurationSaved: boolean); begin if not cbPresets.DroppedDown then begin if bConfigurationSaved or (cbPresets.ItemIndex <> 0) then begin if cbPresets.Enabled <> bConfigurationSaved then begin cbPresets.Enabled := bConfigurationSaved; end; end; end; end; { TfrmMultiRename.GetPresetNameForCommand } // Wanted preset may be given via "name=presetname" or via "index=indexno". function TfrmMultiRename.GetPresetNameForCommand(const Params: array of string): string; var Param, sValue: string; iIndex: integer; begin Result := ''; for Param in Params do begin if GetParamValue(Param, 'name', sValue) then Result := sValue else if GetParamValue(Param, 'index', sValue) then begin iIndex := StrToIntDef(sValue, -1); if (iIndex >= 0) and (iIndex < cbPresets.items.Count) then if iIndex = 0 then Result := sLASTPRESET else Result := cbPresets.Items.Strings[iIndex]; end; end; end; { TfrmMultiRename.LoadPresetsXml } procedure TfrmMultiRename.LoadPresetsXml(AConfig: TXmlConfig); var PresetName: string; AMultiRenamePreset: TMultiRenamePreset; ANode: TXmlNode; PresetIndex: integer; begin FMultiRenamePresetList.Clear; ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection); FLastPreset := AConfig.GetValue(ANode, 'LastPreset', sLASTPRESET); ANode := AConfig.FindNode(ANode, 'Presets'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Preset') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', PresetName) then begin if FMultiRenamePresetList.Find(PresetName) = -1 then //Make sure we don't load preset with the same name. begin AMultiRenamePreset := TMultiRenamePreset.Create; AMultiRenamePreset.PresetName := PresetName; FMultiRenamePresetList.Add(AMultiRenamePreset); AMultiRenamePreset.FileName := AConfig.GetValue(ANode, 'Filename', '[N]'); AMultiRenamePreset.Extension := AConfig.GetValue(ANode, 'Extension', '[E]'); AMultiRenamePreset.FileNameStyle := AConfig.GetValue(ANode, 'FilenameStyle', 0); AMultiRenamePreset.ExtensionStyle := AConfig.GetValue(ANode, 'ExtensionStyle', 0); AMultiRenamePreset.Find := AConfig.GetValue(ANode, 'Find', ''); AMultiRenamePreset.Replace := AConfig.GetValue(ANode, 'Replace', ''); AMultiRenamePreset.RegExp := AConfig.GetValue(ANode, 'RegExp', False); AMultiRenamePreset.UseSubs := AConfig.GetValue(ANode, 'UseSubs', False); AMultiRenamePreset.CaseSens := AConfig.GetValue(ANode, 'CaseSensitive', False); AMultiRenamePreset.OnlyFirst := AConfig.GetValue(ANode, 'OnlyFirst', False); AMultiRenamePreset.Counter := AConfig.GetValue(ANode, 'Counter', '1'); AMultiRenamePreset.Interval := AConfig.GetValue(ANode, 'Interval', '1'); AMultiRenamePreset.Width := AConfig.GetValue(ANode, 'Width', 0); AMultiRenamePreset.Log := AConfig.GetValue(ANode, 'Log/Enabled', False); AMultiRenamePreset.LogAppend := AConfig.GetValue(ANode, 'Log/Append', False); AMultiRenamePreset.LogFile := AConfig.GetValue(ANode, 'Log/File', ''); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; //Make sure the "sLASTPRESET" is at position 0. PresetIndex := FMultiRenamePresetList.Find(sLASTPRESET); if PresetIndex <> 0 then begin if PresetIndex <> -1 then begin //If it's present but not at zero, move it to 0. FMultiRenamePresetList.Move(PresetIndex, 0); end else begin AMultiRenamePreset := TMultiRenamePreset.Create; AMultiRenamePreset.PresetName := sLASTPRESET; FMultiRenamePresetList.Insert(0, AMultiRenamePreset); end; end; end; { TfrmMultiRename.isOkToLosePresetModification } function TfrmMultiRename.isOkToLosePresetModification: boolean; var MyMsgResult: TMyMsgResult; begin Result := False; if (cbPresets.ItemIndex <= 0) or (cbPresets.Enabled) or (not Visible) then Result := True else begin case gMulRenExitModifiedPreset of mrempIgnoreSaveLast: begin Result := True; end; mrempSaveAutomatically: begin if cbPresets.ItemIndex > 0 then cm_SavePreset(['name=' + cbPresets.Items.Strings[cbPresets.ItemIndex]]); Result := True; end; mrempPromptUser: begin MyMsgResult := msgYesNoCancel(Format(rsMulRenSaveModifiedPreset, [cbPresets.Items.Strings[cbPresets.ItemIndex]]), msmbCancel); case MyMsgResult of mmrYes: begin cm_SavePreset([]); Result := True; end; mmrNo: Result := True; mmrCancel: ; end; end; end; end; end; { TfrmMultiRename.SavePreset } procedure TfrmMultiRename.SavePreset(PresetName: string); var PresetIndex: integer; AMultiRenamePresetObject: TMultiRenamePreset; begin if PresetName <> '' then begin PresetIndex := FMultiRenamePresetList.Find(PresetName); if PresetIndex = -1 then begin AMultiRenamePresetObject := TMultiRenamePreset.Create; AMultiRenamePresetObject.PresetName := PresetName; PresetIndex := FMultiRenamePresetList.Add(AMultiRenamePresetObject); end; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].FileName := cbName.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Extension := cbExt.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].FileNameStyle := cbNameMaskStyle.ItemIndex; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].ExtensionStyle := cmbExtensionStyle.ItemIndex; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Find := edFind.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Replace := edReplace.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].RegExp := cbRegExp.Checked; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].UseSubs := cbUseSubs.Checked; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].CaseSens := cbCaseSens.Checked; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].OnlyFirst := cbOnlyFirst.Checked; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Counter := edPoc.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Interval := edInterval.Text; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Width := cmbxWidth.ItemIndex; case gMulRenSaveRenamingLog of mrsrlPerPreset: begin FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Log := cbLog.Checked; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogFile := fneRenameLogFileFilename.FileName; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogAppend := cbLogAppend.Checked; end; mrsrlAppendSameLog: begin FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Log := FbRememberLog; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogAppend := FbRememberAppend; FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogFile := FsRememberRenameLogFilename; end; end; SavePresets; end; end; { TfrmMultiRename.SavePresetsXml } procedure TfrmMultiRename.SavePresetsXml(AConfig: TXmlConfig); var i: integer; ANode, SubNode: TXmlNode; begin ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection, True); AConfig.ClearNode(ANode); if cbPresets.ItemIndex = 0 then AConfig.SetValue(ANode, 'LastPreset', sLASTPRESET) else AConfig.SetValue(ANode, 'LastPreset', cbPresets.Items.Strings[cbPresets.ItemIndex]); ANode := AConfig.FindNode(ANode, 'Presets', True); for i := 0 to pred(FMultiRenamePresetList.Count) do begin SubNode := AConfig.AddNode(ANode, 'Preset'); AConfig.AddValue(SubNode, 'Name', FMultiRenamePresetList.MultiRenamePreset[i].PresetName); AConfig.AddValue(SubNode, 'Filename', FMultiRenamePresetList.MultiRenamePreset[i].FileName); AConfig.AddValue(SubNode, 'Extension', FMultiRenamePresetList.MultiRenamePreset[i].Extension); AConfig.AddValue(SubNode, 'FilenameStyle', FMultiRenamePresetList.MultiRenamePreset[i].FileNameStyle); AConfig.AddValue(SubNode, 'ExtensionStyle', FMultiRenamePresetList.MultiRenamePreset[i].ExtensionStyle); AConfig.AddValue(SubNode, 'Find', FMultiRenamePresetList.MultiRenamePreset[i].Find); AConfig.AddValue(SubNode, 'Replace', FMultiRenamePresetList.MultiRenamePreset[i].Replace); AConfig.AddValue(SubNode, 'RegExp', FMultiRenamePresetList.MultiRenamePreset[i].RegExp); AConfig.AddValue(SubNode, 'UseSubs', FMultiRenamePresetList.MultiRenamePreset[i].UseSubs); AConfig.AddValue(SubNode, 'CaseSensitive', FMultiRenamePresetList.MultiRenamePreset[i].CaseSens); AConfig.AddValue(SubNode, 'OnlyFirst', FMultiRenamePresetList.MultiRenamePreset[i].OnlyFirst); AConfig.AddValue(SubNode, 'Counter', FMultiRenamePresetList.MultiRenamePreset[i].Counter); AConfig.AddValue(SubNode, 'Interval', FMultiRenamePresetList.MultiRenamePreset[i].Interval); AConfig.AddValue(SubNode, 'Width', FMultiRenamePresetList.MultiRenamePreset[i].Width); AConfig.SetValue(SubNode, 'Log/Enabled', FMultiRenamePresetList.MultiRenamePreset[i].Log); AConfig.SetValue(SubNode, 'Log/Append', FMultiRenamePresetList.MultiRenamePreset[i].LogAppend); AConfig.SetValue(SubNode, 'Log/File', FMultiRenamePresetList.MultiRenamePreset[i].LogFile); end; end; { TfrmMultiRename.SavePresets } procedure TfrmMultiRename.SavePresets; begin SavePresetsXml(gConfig); gConfig.Save; end; { TfrmMultiRename.DeletePreset } procedure TfrmMultiRename.DeletePreset(PresetName: string); var PresetIndex: integer; begin if PresetName <> '' then begin PresetIndex := FMultiRenamePresetList.Find(PresetName); if PresetIndex <> -1 then begin FMultiRenamePresetList.Delete(PresetIndex); SavePresets; end; end; end; { TfrmMultiRename.FillPresetsList } //We fill the preset drop list with the element in memory. //If it's specified when called, will attempt to load the specified preset in parameter. //If it's not specified, will attempt to re-select the one that was initially selected. //If nothing is still selected, we'll select the [Last One]. procedure TfrmMultiRename.FillPresetsList(const WantedSelectedPresetName: string = ''); var i: integer; sRememberSelection, PresetName: string; begin sRememberSelection := ''; if WantedSelectedPresetName <> '' then sRememberSelection := WantedSelectedPresetName; if sRememberSelection = '' then if cbPresets.ItemIndex <> -1 then if cbPresets.ItemIndex < cbPresets.Items.Count then sRememberSelection := cbPresets.Items.Strings[cbPresets.ItemIndex]; cbPresets.Clear; cbPresets.Items.Add(rsMulRenLastPreset); for i := 0 to pred(FMultiRenamePresetList.Count) do begin PresetName := FMultiRenamePresetList.MultiRenamePreset[i].PresetName; if (PresetName <> sLASTPRESET) then if cbPresets.Items.IndexOf(PresetName) = -1 then cbPresets.Items.Add(PresetName); end; if (WantedSelectedPresetName = sLASTPRESET) or (WantedSelectedPresetName = sFRESHMASKS) then cbPresets.ItemIndex := 0 else if sRememberSelection <> '' then if cbPresets.Items.IndexOf(sRememberSelection) <> -1 then cbPresets.ItemIndex := cbPresets.Items.IndexOf(sRememberSelection); if cbPresets.ItemIndex = -1 then if cbPresets.Items.Count > 0 then cbPresets.ItemIndex := 0; if WantedSelectedPresetName <> sFRESHMASKS then begin cbPresetsChange(cbPresets); RefreshActivePresetCommands; end; end; { TfrmMultiRename.RefreshActivePresetCommands } procedure TfrmMultiRename.RefreshActivePresetCommands; begin //"Load last preset" is always available since it's the [Last One]. actLoadPreset1.Enabled := (cbPresets.Items.Count > 1) and (cbPresets.Enabled); actLoadPreset2.Enabled := (cbPresets.Items.Count > 2) and (cbPresets.Enabled); actLoadPreset3.Enabled := (cbPresets.Items.Count > 3) and (cbPresets.Enabled); actLoadPreset4.Enabled := (cbPresets.Items.Count > 4) and (cbPresets.Enabled); actLoadPreset5.Enabled := (cbPresets.Items.Count > 5) and (cbPresets.Enabled); actLoadPreset6.Enabled := (cbPresets.Items.Count > 6) and (cbPresets.Enabled); actLoadPreset7.Enabled := (cbPresets.Items.Count > 7) and (cbPresets.Enabled); actLoadPreset8.Enabled := (cbPresets.Items.Count > 8) and (cbPresets.Enabled); actLoadPreset9.Enabled := (cbPresets.Items.Count > 9) and (cbPresets.Enabled); actSavePreset.Enabled := (cbPresets.ItemIndex > 0); //"Save as is always available so we may save the [Last One] actRenamePreset.Enabled := (cbPresets.ItemIndex > 0); actDeletePreset.Enabled := (cbPresets.ItemIndex > 0); end; { TfrmMultiRename.InitializeMaskHelper } procedure TfrmMultiRename.InitializeMaskHelper; begin if MaskHelpers[00].sMenuItem = '' then //"MaskHelpers" are no tin the object but generic, so we just need to initialize once. begin MaskHelpers[00].sMenuItem := MaskHelpers[00].sKeyword + ' ' + rsMulRenMaskName; MaskHelpers[01].sMenuItem := MaskHelpers[01].sKeyword + ' ' + rsMulRenMaskCharAtPosX; MaskHelpers[02].sMenuItem := MaskHelpers[02].sKeyword + ' ' + rsMulRenMaskCharAtPosXtoY; MaskHelpers[03].sMenuItem := MaskHelpers[03].sKeyword + ' ' + rsMulRenMaskFullName; MaskHelpers[04].sMenuItem := MaskHelpers[04].sKeyword + ' ' + rsMulRenMaskFullNameCharAtPosXtoY; MaskHelpers[05].sMenuItem := MaskHelpers[05].sKeyword + ' ' + rsMulRenMaskParent; MaskHelpers[06].sMenuItem := MaskHelpers[06].sKeyword + ' ' + rsMulRenMaskExtension; MaskHelpers[07].sMenuItem := MaskHelpers[07].sKeyword + ' ' + rsMulRenMaskCharAtPosX; MaskHelpers[08].sMenuItem := MaskHelpers[08].sKeyword + ' ' + rsMulRenMaskCharAtPosXtoY; MaskHelpers[09].sMenuItem := MaskHelpers[09].sKeyword + ' ' + rsMulRenMaskCounter; MaskHelpers[10].sMenuItem := MaskHelpers[10].sKeyword + ' ' + rsMulRenMaskGUID; MaskHelpers[11].sMenuItem := MaskHelpers[11].sKeyword + ' ' + rsMulRenMaskVarOnTheFly; MaskHelpers[12].sMenuItem := MaskHelpers[12].sKeyword + ' ' + rsMulRenMaskYear2Digits; MaskHelpers[13].sMenuItem := MaskHelpers[13].sKeyword + ' ' + rsMulRenMaskYear4Digits; MaskHelpers[14].sMenuItem := MaskHelpers[14].sKeyword + ' ' + rsMulRenMaskMonth; MaskHelpers[15].sMenuItem := MaskHelpers[15].sKeyword + ' ' + rsMulRenMaskMonth2Digits; MaskHelpers[16].sMenuItem := MaskHelpers[16].sKeyword + ' ' + rsMulRenMaskMonthAbrev; MaskHelpers[17].sMenuItem := MaskHelpers[17].sKeyword + ' ' + rsMulRenMaskMonthComplete; MaskHelpers[18].sMenuItem := MaskHelpers[18].sKeyword + ' ' + rsMulRenMaskDay; MaskHelpers[19].sMenuItem := MaskHelpers[19].sKeyword + ' ' + rsMulRenMaskDay2Digits; MaskHelpers[20].sMenuItem := MaskHelpers[20].sKeyword + ' ' + rsMulRenMaskDOWAbrev; MaskHelpers[21].sMenuItem := MaskHelpers[21].sKeyword + ' ' + rsMulRenMaskDOWComplete; MaskHelpers[22].sMenuItem := MaskHelpers[22].sKeyword + ' ' + rsMulRenMaskCompleteDate; MaskHelpers[23].sMenuItem := MaskHelpers[23].sKeyword + ' ' + rsMulRenMaskHour; MaskHelpers[24].sMenuItem := MaskHelpers[24].sKeyword + ' ' + rsMulRenMaskHour2Digits; MaskHelpers[25].sMenuItem := MaskHelpers[25].sKeyword + ' ' + rsMulRenMaskMin; MaskHelpers[26].sMenuItem := MaskHelpers[26].sKeyword + ' ' + rsMulRenMaskMin2Digits; MaskHelpers[27].sMenuItem := MaskHelpers[27].sKeyword + ' ' + rsMulRenMaskSec; MaskHelpers[28].sMenuItem := MaskHelpers[28].sKeyword + ' ' + rsMulRenMaskSec2Digits; MaskHelpers[29].sMenuItem := MaskHelpers[29].sKeyword + ' ' + rsMulRenMaskCompleteTime; end; end; { TfrmMultiRename.PopulateMainMenu } // This main menu is not essential. // But it does not occupy a lot of pixels and may benefit to user to help to both discover and remember the keyboard shortcut by visualizing them. // Also, we populate it run-time to save work to valuable translators so they won't have to re-translate the same strings or to validate copies. procedure TfrmMultiRename.PopulateMainMenu; var miPresets, miMasks, miSubMasks: TMenuItem; begin btnAnyNameMask.Action := actAnyNameMask; btnAnyNameMask.Caption := '...'; btnAnyNameMask.Width := fneRenameLogFileFilename.ButtonWidth; btnAnyExtMask.Action := actAnyExtMask; btnAnyExtMask.Caption := '...'; btnAnyExtMask.Width := fneRenameLogFileFilename.ButtonWidth; btnRelativeRenameLogFile.Action := actInvokeRelativePath; btnRelativeRenameLogFile.Caption := ''; btnRelativeRenameLogFile.Width := fneRenameLogFileFilename.ButtonWidth; btnRelativeRenameLogFile.Hint := actInvokeRelativePath.Caption; btnViewRenameLogFile.Action := actViewRenameLogFile; btnViewRenameLogFile.Caption := ''; btnViewRenameLogFile.Width := fneRenameLogFileFilename.ButtonWidth; btnViewRenameLogFile.Hint := actViewRenameLogFile.Caption; btnPresets.Action := actShowPresetsMenu; btnPresets.Caption := ''; btnPresets.Hint := actShowPresetsMenu.Caption; btnPresets.Constraints.MinWidth := fneRenameLogFileFilename.ButtonWidth; miPresets := TMenuItem.Create(mmMainMenu); miPresets.Caption := gbPresets.Caption; mmMainMenu.Items.Add(miPresets); BuildPresetsMenu(miPresets); BuildPresetsMenu(pmPresets); miMasks := TMenuItem.Create(mmMainMenu); miMasks.Caption := gbMaska.Caption; mmMainMenu.Items.Add(miMasks); //We add the sub-menu for the filename masks miSubMasks := TMenuItem.Create(miMasks); miSubMasks.Caption := lbName.Caption; miSubMasks.ImageIndex := GetImageIndexCategoryName(rmtuFilename); miMasks.Add(miSubMasks); PopulateFilenameMenu(miSubMasks); //We add the sub-menu for the filename masks miSubMasks := TMenuItem.Create(miMasks); miSubMasks.Caption := lbExt.Caption; miSubMasks.ImageIndex := GetImageIndexCategoryName(rmtuExtension); miMasks.Add(miSubMasks); PopulateExtensionMenu(miSubMasks); end; { TfrmMultiRename.PopulateFilenameMenu } procedure TfrmMultiRename.PopulateFilenameMenu(AMenuSomething: TComponent); var localMenuItem, miSubMenu, miMenuItem: TMenuItem; begin if AMenuSomething.ClassType = TPopupMenu then localMenuItem := TPopupMenu(AMenuSomething).Items else if AMenuSomething.ClassType = TMenuItem then begin localMenuItem := TMenuItem(AMenuSomething); miMenuItem := TMenuItem.Create(localMenuItem); miMenuItem.Action := actAnyNameMask; localMenuItem.Add(miMenuItem); miMenuItem := TMenuItem.Create(localMenuItem); miMenuItem.Caption := '-'; localMenuItem.Add(miMenuItem); end else exit; miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuFilename), GetImageIndexCategoryName(rmtuFilename)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuFilename); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuExtension), GetImageIndexCategoryName(rmtuExtension)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuExtension); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuCounter), GetImageIndexCategoryName(rmtuCounter)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuCounter); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuDate), GetImageIndexCategoryName(rmtuDate)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuDate); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuTime), GetImageIndexCategoryName(rmtuTime)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuTime); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuPlugins), GetImageIndexCategoryName(rmtuPlugins)); BuildMaskMenu(miSubMenu, tfmFilename, rmtuPlugins); AppendSubMenuToThisMenu(localMenuItem, '-', -1); AppendActionMenuToThisMenu(localMenuItem, actClearNameMask); AppendActionMenuToThisMenu(localMenuItem, actResetAll); end; { TfrmMultiRename.PopulateExtensionMenu } procedure TfrmMultiRename.PopulateExtensionMenu(AMenuSomething: TComponent); var localMenuItem, miSubMenu, miMenuItem: TMenuItem; begin if AMenuSomething.ClassType = TPopupMenu then localMenuItem := TPopupMenu(AMenuSomething).Items else if AMenuSomething.ClassType = TMenuItem then begin localMenuItem := TMenuItem(AMenuSomething); miMenuItem := TMenuItem.Create(localMenuItem); miMenuItem.Action := actAnyExtMask; localMenuItem.Add(miMenuItem); miMenuItem := TMenuItem.Create(localMenuItem); miMenuItem.Caption := '-'; localMenuItem.Add(miMenuItem); end else exit; miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuFilename), GetImageIndexCategoryName(rmtuFilename)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuFilename); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuExtension), GetImageIndexCategoryName(rmtuExtension)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuExtension); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuCounter), GetImageIndexCategoryName(rmtuCounter)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuCounter); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuDate), GetImageIndexCategoryName(rmtuDate)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuDate); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuTime), GetImageIndexCategoryName(rmtuTime)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuTime); miSubMenu := AppendSubMenuToThisMenu(localMenuItem, GetMaskCategoryName(rmtuPlugins), GetImageIndexCategoryName(rmtuPlugins)); BuildMaskMenu(miSubMenu, tfmExtension, rmtuPlugins); AppendSubMenuToThisMenu(localMenuItem, '-', -1); AppendActionMenuToThisMenu(localMenuItem, actClearExtMask); AppendActionMenuToThisMenu(localMenuItem, actResetAll); end; { TfrmMultiRename.BuildMaskMenu } procedure TfrmMultiRename.BuildMaskMenu(AMenuSomething: TComponent; iTarget: tTargetForMask; iMenuTypeMask: tRenameMaskToUse); var iSeekIndex: integer; AMenuItem, localMenuItem: TMenuItem; actCategoryActionToAdd: TAction = nil; begin if AMenuSomething.ClassType = TPopupMenu then localMenuItem := TPopupMenu(AMenuSomething).Items else if AMenuSomething.ClassType = TMenuItem then localMenuItem := TMenuItem(AMenuSomething) else exit; localMenuItem.Clear; if AMenuSomething.ClassType = TMenuItem then begin actCategoryActionToAdd := GetCategoryAction(iTarget, iMenuTypeMask); if actCategoryActionToAdd <> nil then begin AMenuItem := TMenuItem.Create(AMenuSomething); AMenuItem.Action := actCategoryActionToAdd; localMenuItem.Add(AMenuItem); AMenuItem := TMenuItem.Create(AMenuSomething); AMenuItem.Caption := '-'; localMenuItem.Add(AMenuItem); end; end; for iSeekIndex := 0 to pred(NBMAXHELPERS) do begin if MaskHelpers[iSeekIndex].iMenuType = iMenuTypeMask then begin AMenuItem := TMenuItem.Create(AMenuSomething); AMenuItem.Caption := MaskHelpers[iSeekIndex].sMenuItem; AMenuItem.Tag := (iSeekIndex shl 16) or Ord(iTarget); AMenuItem.Hint := MaskHelpers[iSeekIndex].sKeyword; AMenuItem.ImageIndex := GetImageIndexCategoryName(MaskHelpers[iSeekIndex].iMenuType); case MaskHelpers[iSeekIndex].MenuActionStyle of masStraight: AMenuItem.OnClick := @MenuItemStraightMaskClick; masXCharacters, masXYCharacters: AMenuItem.OnClick := @MenuItemXCharactersMaskClick; masAskVariable: AMenuItem.OnClick := @MenuItemVariableMaskClick; masDirectorySelector: AMenuItem.OnClick := @MenuItemDirectorySelectorMaskClick; end; localMenuItem.Add(AMenuItem); end; end; if rmtuPlugins = iMenuTypeMask then begin FPluginDispatcher := iTarget; FillContentFieldMenu(AMenuSomething, @miPluginClick); //No need to clear "pmDynamicMasks" because "FillContentFieldMenu" do it itself. if AMenuSomething.ClassType = TMenuItem then begin //We need to add the mask category menu item at the end since "FillContentFieldMenu" clears our "pmDynamicMasks". AMenuItem := TMenuItem.Create(AMenuSomething); AMenuItem.Caption := '-'; localMenuItem.Insert(0, AMenuItem); AMenuItem := TMenuItem.Create(AMenuSomething); AMenuItem.Action := actCategoryActionToAdd; localMenuItem.Insert(0, AMenuItem); end; end; end; { TfrmMultiRename.BuildPresetsMenu } procedure TfrmMultiRename.BuildPresetsMenu(AMenuSomething: TComponent); var localMenuItem: TMenuItem; begin if AMenuSomething.ClassType = TPopupMenu then localMenuItem := TPopupMenu(AMenuSomething).Items else if AMenuSomething.ClassType = TMenuItem then begin localMenuItem := TMenuItem(AMenuSomething); AppendActionMenuToThisMenu(localMenuItem, actShowPresetsMenu); AppendSubMenuToThisMenu(localMenuItem, '-', -1); end else exit; AppendActionMenuToThisMenu(localMenuItem, actDropDownPresetList); AppendSubMenuToThisMenu(localMenuItem, '-', -1); AppendActionMenuToThisMenu(localMenuItem, actLoadLastPreset); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset1); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset2); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset3); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset4); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset5); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset6); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset7); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset8); AppendActionMenuToThisMenu(localMenuItem, actLoadPreset9); AppendSubMenuToThisMenu(localMenuItem, '-', -1); AppendActionMenuToThisMenu(localMenuItem, actSavePreset); AppendActionMenuToThisMenu(localMenuItem, actSavePresetAs); AppendActionMenuToThisMenu(localMenuItem, actRenamePreset); AppendActionMenuToThisMenu(localMenuItem, actDeletePreset); AppendActionMenuToThisMenu(localMenuItem, actSortPresets); end; { TfrmMultiRename.BuildMenuAndPopup } procedure TfrmMultiRename.BuildMenuAndPopup(iTarget: tTargetForMask; iMenuTypeMask: tRenameMaskToUse); begin BuildMaskMenu(pmDynamicMasks, iTarget, iMenuTypeMask); case iTarget of tfmFilename: PopupDynamicMenuAtThisControl(pmDynamicMasks, cbName); tfmExtension: PopupDynamicMenuAtThisControl(pmDynamicMasks, cbExt); end; end; { TfrmMultiRename.GetMaskCategoryName } function TfrmMultiRename.GetMaskCategoryName(aRenameMaskToUse: tRenameMaskToUse): string; begin Result := ''; case aRenameMaskToUse of rmtuFilename: Result := rsMulRenFilename; rmtuExtension: Result := rsMulRenExtension; rmtuCounter: Result := rsMulRenCounter; rmtuDate: Result := rsMulRenDate; rmtuTime: Result := rsMulRenTime; rmtuPlugins: Result := rsMulRenPlugins; end; end; { TfrmMultiRename.GetImageIndexCategoryName } function TfrmMultiRename.GetImageIndexCategoryName(aRenameMaskToUse: tRenameMaskToUse): integer; begin Result := -1; case aRenameMaskToUse of rmtuFilename: Result := 20; rmtuExtension: Result := 21; rmtuCounter: Result := 22; rmtuDate: Result := 23; rmtuTime: Result := 24; rmtuPlugins: Result := 25; end; end; { TfrmMultiRename.GetCategoryAction } function TfrmMultiRename.GetCategoryAction(TargetForMask: tTargetForMask; aRenameMask: tRenameMaskToUse): TAction; begin Result := nil; case TargetForMask of tfmFilename: begin case aRenameMask of rmtuFilename: Result := actNameNameMask; rmtuExtension: Result := actExtNameMask; rmtuCounter: Result := actCtrNameMask; rmtuDate: Result := actDateNameMask; rmtuTime: Result := actTimeNameMask; rmtuPlugins: Result := actPlgnNameMask; end; end; tfmExtension: begin case aRenameMask of rmtuFilename: Result := actNameExtMask; rmtuExtension: Result := actExtExtMask; rmtuCounter: Result := actCtrExtMask; rmtuDate: Result := actDateExtMask; rmtuTime: Result := actTimeExtMask; rmtuPlugins: Result := actPlgnExtMask; end; end; end; end; { TfrmMultiRename.AppendSubMenuToThisMenu } function TfrmMultiRename.AppendSubMenuToThisMenu(ATargetMenu: TMenuItem; sCaption: string; iImageIndex: integer): TMenuItem; begin Result := TMenuItem.Create(ATargetMenu); Result.ImageIndex := iImageIndex; if sCaption <> '' then Result.Caption := sCaption; ATargetMenu.Add(Result); end; { TfrmMultiRename.AppendActionMenuToThisMenu } function TfrmMultiRename.AppendActionMenuToThisMenu(ATargetMenu: TMenuItem; paramAction: TAction): TMenuItem; begin Result := TMenuItem.Create(ATargetMenu); Result.Action := paramAction; ATargetMenu.Add(Result); end; { TfrmMultiRename.MenuItemXCharactersMaskClick } procedure TfrmMultiRename.MenuItemXCharactersMaskClick(Sender: TObject); var sSourceToSelectFromText, sPrefix: string; sResultingMaskValue: string = ''; iMaskHelperIndex: integer; begin iMaskHelperIndex := TMenuItem(Sender).Tag shr 16; if iMaskHelperIndex < length(MaskHelpers) then begin sSourceToSelectFromText := ''; case MaskHelpers[iMaskHelperIndex].iSourceOfInformation of soiFilename: begin sSourceToSelectFromText := FFiles[pred(StringGrid.Row)].NameNoExt; sPrefix := 'N'; end; soiExtension: begin sSourceToSelectFromText := FFiles[pred(StringGrid.Row)].Extension; sPrefix := 'E'; end; soiFullName: begin sSourceToSelectFromText := FFiles[pred(StringGrid.Row)].FullPath; sPrefix := 'A'; end; end; if ShowSelectTextRangeDlg(Self, Caption, sSourceToSelectFromText, sPrefix, sResultingMaskValue) then InsertMask(sResultingMaskValue, tTargetForMask(TMenuItem(Sender).Tag and iTARGETMASK)); end; end; { TfrmMultiRename.MenuItemDirectorySelectorMaskClick } procedure TfrmMultiRename.MenuItemDirectorySelectorMaskClick(Sender: TObject); var sSourceToSelectFromText, sPrefix: string; sResultingMaskValue: string = ''; iMaskHelperIndex: integer; begin iMaskHelperIndex := TMenuItem(Sender).Tag shr 16; if iMaskHelperIndex < length(MaskHelpers) then begin sSourceToSelectFromText := ''; case MaskHelpers[iMaskHelperIndex].iSourceOfInformation of soiPath: begin sSourceToSelectFromText := FFiles[pred(StringGrid.Row)].Path; sPrefix := 'P'; end; end; if ShowSelectPathRangeDlg(Self, Caption, sSourceToSelectFromText, sPrefix, sResultingMaskValue) then InsertMask(sResultingMaskValue, tTargetForMask(TMenuItem(Sender).Tag and iTARGETMASK)); end; end; { TfrmMultiRename.MenuItemVariableMaskClick } procedure TfrmMultiRename.MenuItemVariableMaskClick(Sender: TObject); var sVariableName: string; begin sVariableName := rsSimpleWordVariable; if InputQuery(rsMulRenDefineVariableName, rsMulRenEnterNameForVar, sVariableName) then begin if sVariableName = '' then sVariableName := rsSimpleWordVariable; InsertMask('[V:' + sVariableName + ']', tTargetForMask(TMenuItem(Sender).Tag and iTARGETMASK)); end; end; { TfrmMultiRename.MenuItemStraightMaskClick } procedure TfrmMultiRename.MenuItemStraightMaskClick(Sender: TObject); var sMaks: string; begin sMaks := TMenuItem(Sender).Hint; case tTargetForMask(TMenuItem(Sender).Tag and iTARGETMASK) of tfmFilename: begin InsertMask(sMaks, cbName); cbName.SetFocus; end; tfmExtension: begin InsertMask(sMaks, cbExt); cbExt.SetFocus; end; end; end; { TfrmMultiRename.PopupDynamicMenuAtThisControl } procedure TfrmMultiRename.PopupDynamicMenuAtThisControl(APopUpMenu: TPopupMenu; AControl: TControl); var PopupPoint: TPoint; begin PopupPoint := AControl.Parent.ClientToScreen(Point(AControl.Left + AControl.Width - 5, AControl.Top + AControl.Height - 5)); APopUpMenu.PopUp(PopupPoint.X, PopupPoint.Y); end; { TfrmMultiRename.miPluginClick } procedure TfrmMultiRename.miPluginClick(Sender: TObject); var sMask: string; MenuItem: TMenuItem absolute Sender; begin case MenuItem.Tag of 0: begin sMask := '[=DC().' + MenuItem.Hint + '{}]'; end; 1: begin sMask := '[=Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Hint + '{}]'; end; 2: begin sMask := '[=Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'; end; 3: begin sMask := '[=DC().' + MenuItem.Parent.Hint + '{' + MenuItem.Hint + '}]'; end; end; case FPluginDispatcher of tfmFilename: begin InsertMask(sMask, cbName); cbName.SetFocus; end; tfmExtension: begin InsertMask(sMask, cbExt); cbExt.SetFocus; end; end; end; { TfrmMultiRename.InsertMask } procedure TfrmMultiRename.InsertMask(const Mask: string; edChoose: TComboBox); var sTmp, sInitialString: string; I: integer; begin sInitialString := edChoose.Text; if edChoose.SelLength > 0 then edChoose.SelText := Mask // Replace selected text else begin sTmp := edChoose.Text; I := edChoose.SelStart + 1; // Insert on current position UTF8Insert(Mask, sTmp, I); Inc(I, UTF8Length(Mask)); edChoose.Text := sTmp; edChoose.SelStart := I - 1; end; if sInitialString <> edChoose.Text then cbNameStyleChange(edChoose); end; { TfrmMultiRename.InsertMask } procedure TfrmMultiRename.InsertMask(const Mask: string; TargetForMask: tTargetForMask); begin case TargetForMask of tfmFilename: begin InsertMask(Mask, cbName); cbName.SetFocus; end; tfmExtension: begin InsertMask(Mask, cbExt); cbExt.SetFocus; end; end; end; {TfrmMultiRename.sReplace } function TfrmMultiRename.sReplace(sMask: string; ItemNr: integer): string; var iStart, iEnd: integer; begin Result := ''; while Length(sMask) > 0 do begin iStart := Pos('[', sMask); if iStart > 0 then begin iEnd := Pos(']', sMask, iStart + 1); if iEnd > 0 then begin Result := Result + Copy(sMask, 1, iStart - 1) + sHandleFormatString(Copy(sMask, iStart + 1, iEnd - iStart - 1), ItemNr); Delete(sMask, 1, iEnd); end else Break; end else Break; end; Result := Result + sMask; end; { TfrmMultiRename.sReplaceXX } function TfrmMultiRename.sReplaceXX(const sFormatStr, sOrig: string): string; var iFrom, iTo, iDelim: integer; begin if Length(sFormatStr) = 1 then Result := sOrig else begin iDelim := Pos(':', sFormatStr); if iDelim = 0 then begin iDelim := Pos(',', sFormatStr); // Not found if iDelim = 0 then begin iFrom := StrToIntDef(Copy(sFormatStr, 2, MaxInt), 1); if iFrom < 0 then iFrom := sOrig.Length + iFrom + 1; iTo := iFrom; end // Range e.g. N1,3 (from 1, 3 symbols) else begin iFrom := StrToIntDef(Copy(sFormatStr, 2, iDelim - 2), 1); iDelim := Abs(StrToIntDef(Copy(sFormatStr, iDelim + 1, MaxSmallint), MaxSmallint)); if iFrom >= 0 then iTo := iDelim + iFrom - 1 else begin iTo := sOrig.Length + iFrom + 1; iFrom := Max(iTo - iDelim + 1, 1); end; end; end // Range e.g. N1:2 (from 1 to 2) else begin iFrom := StrToIntDef(Copy(sFormatStr, 2, iDelim - 2), 1); if iFrom < 0 then iFrom := sOrig.Length + iFrom + 1; iTo := StrToIntDef(Copy(sFormatStr, iDelim + 1, MaxSmallint), MaxSmallint); if iTo < 0 then iTo := sOrig.Length + iTo + 1; ; if iTo < iFrom then begin iDelim := iTo; iTo := iFrom; iFrom := iDelim; end; end; Result := UTF8Copy(sOrig, iFrom, iTo - iFrom + 1); end; end; { TfrmMultiRename.sReplaceVariable } function TfrmMultiRename.sReplaceVariable(const sFormatStr: string): string; var iDelim, iVariableIndex, iVariableSuggestionIndex: integer; sVariableName: string = ''; sVariableValue: string = ''; begin Result := ''; iDelim := Pos(':', sFormatStr); if iDelim <> 0 then sVariableName := copy(sFormatStr, succ(iDelim), length(sFormatStr) - iDelim) else sVariableName := rsSimpleWordVariable; iVariableIndex := FslVariableNames.IndexOf(sVariableName); if iVariableIndex = -1 then begin iVariableSuggestionIndex := FslVariableSuggestionName.IndexOf(sVariableName); if iVariableSuggestionIndex <> -1 then sVariableValue := FslVariableSuggestionValue.Strings[iVariableSuggestionIndex] else sVariableValue := sVariableName; if InputQuery(rsMulRenDefineVariableValue, Format(rsMulRenEnterValueForVar, [sVariableName]), sVariableValue) then begin FslVariableNames.Add(sVariableName); iVariableIndex := FslVariableValues.Add(sVariableValue); if iVariableSuggestionIndex = -1 then begin FslVariableSuggestionName.Add(sVariableName); FslVariableSuggestionValue.Add(sVariableValue); end; end else begin FActuallyRenamingFile := False; exit; end; end; Result := FslVariableValues.Strings[iVariableIndex]; end; { TfrmMultiRename.sReplaceBadChars }//Replace bad path chars in string function TfrmMultiRename.sReplaceBadChars(const sPath: string): string; const {$IFDEF MSWINDOWS} ForbiddenChars: set of char = ['<', '>', ':', '"', '/', '\', '|', '?', '*']; {$ELSE} ForbiddenChars: set of char = ['/']; {$ENDIF} var Index: integer; begin Result := ''; for Index := 1 to Length(sPath) do if not (sPath[Index] in ForbiddenChars) then Result += sPath[Index] else Result += gMulRenInvalidCharReplacement; end; { TfrmMultiRename.IsLetter } function TfrmMultiRename.IsLetter(AChar: AnsiChar): boolean; begin Result := // Ascii letters ((AChar < #128) and (((AChar >= 'a') and (AChar <= 'z')) or ((AChar >= 'A') and (AChar <= 'Z')))) or // maybe Ansi or UTF8 (AChar >= #128); end; { TfrmMultiRename.ApplyStyle } // Applies style (uppercase, lowercase, etc.) to a string. function TfrmMultiRename.ApplyStyle(InputString: string; Style: integer): string; begin case Style of 1: Result := UTF8UpperCase(InputString); 2: Result := UTF8LowerCase(InputString); 3: Result := FirstCharOfFirstWordToUppercaseUTF8(InputString); 4: Result := FirstCharOfEveryWordToUppercaseUTF8(InputString); else Result := InputString; end; end; { TfrmMultiRename.FirstCharToUppercaseUTF8 } // Changes first char to uppercase and the rest to lowercase function TfrmMultiRename.FirstCharToUppercaseUTF8(InputString: string): string; var FirstChar: string; begin if UTF8Length(InputString) > 0 then begin Result := UTF8LowerCase(InputString); FirstChar := UTF8Copy(Result, 1, 1); UTF8Delete(Result, 1, 1); Result := UTF8UpperCase(FirstChar) + Result; end else Result := ''; end; { TfrmMultiRename.FirstCharOfFirstWordToUppercaseUTF8 } // Changes first char of first word to uppercase and the rest to lowercase function TfrmMultiRename.FirstCharOfFirstWordToUppercaseUTF8(InputString: string): string; var SeparatorPos: integer; begin InputString := UTF8LowerCase(InputString); Result := ''; // Search for first letter. for SeparatorPos := 1 to Length(InputString) do if IsLetter(InputString[SeparatorPos]) then break; Result := Copy(InputString, 1, SeparatorPos - 1) + FirstCharToUppercaseUTF8(Copy(InputString, SeparatorPos, Length(InputString) - SeparatorPos + 1)); end; { TfrmMultiRename.FirstCharOfEveryWordToUppercaseUTF8 } // Changes first char of every word to uppercase and the rest to lowercase function TfrmMultiRename.FirstCharOfEveryWordToUppercaseUTF8(InputString: string): string; var SeparatorPos: integer; begin InputString := UTF8LowerCase(InputString); Result := ''; while InputString <> '' do begin // Search for first non-letter (word separator). for SeparatorPos := 1 to Length(InputString) do if not IsLetter(InputString[SeparatorPos]) then break; Result := Result + FirstCharToUppercaseUTF8(Copy(InputString, 1, SeparatorPos)); Delete(InputString, 1, SeparatorPos); end; end; procedure TfrmMultiRename.LoadNamesFromList(const AFileList: TStrings); begin if AFileList.Count <> FFiles.Count then begin msgError(Format(rsMulRenWrongLinesNumber, [AFileList.Count, FFiles.Count])); end else begin FNames.Assign(AFileList); gbMaska.Enabled := False; gbPresets.Enabled := False; gbCounter.Enabled := False; StringGridTopLeftChanged(StringGrid); end; end; { TfrmMultiRename.LoadNamesFromFile } procedure TfrmMultiRename.LoadNamesFromFile(const AFileName: string); var AFileList: TStringListEx; begin AFileList := TStringListEx.Create; try AFileList.LoadFromFile(AFileName); LoadNamesFromList(AFileList); except on E: Exception do msgError(E.Message); end; AFileList.Free; end; { TfrmMultiRename.FreshText } function TfrmMultiRename.FreshText(ItemIndex: integer): string; var I: integer; bError: boolean; wsText: UnicodeString; wsReplace: UnicodeString; Flags: TReplaceFlags = []; sTmpName, sTmpExt: string; begin bError := False; if FNames.Count > 0 then Result := FNames[ItemIndex] else begin // Use mask sTmpName := sReplace(cbName.Text, ItemIndex); sTmpExt := sReplace(cbExt.Text, ItemIndex); // Join Result := sTmpName; if sTmpExt <> '' then Result := Result + '.' + sTmpExt; end; // Find and replace if (edFind.Text <> '') then begin if cbRegExp.Checked then try wsText:= CeUtf8ToUtf16(Result); wsReplace:= CeUtf8ToUtf16(edReplace.Text); FRegExp.ModifierI := not cbCaseSens.Checked; if not cbOnlyFirst.Checked then begin Result := CeUtf16ToUtf8(FRegExp.Replace(wsText, wsReplace, cbUseSubs.Checked)); end else if FRegExp.Exec(wsText) then begin Delete(wsText, FRegExp.MatchPos[0], FRegExp.MatchLen[0]); if cbUseSubs.Checked then Insert(FRegExp.Substitute(wsReplace), wsText, FRegExp.MatchPos[0]) else begin Insert(wsReplace, wsText, FRegExp.MatchPos[0]); end; Result:= CeUtf16ToUtf8(wsText); end; except Result := rsMsgErrRegExpSyntax; bError := True; end else begin if not cbOnlyFirst.Checked then Flags:= [rfReplaceAll]; if not cbCaseSens.Checked then Flags+= [rfIgnoreCase]; // Many at once, split find and replace by | if (FReplaceText.Count = 0) then FReplaceText.Add(''); for I := 0 to FFindText.Count - 1 do Result := UTF8StringReplace(Result, FFindText[I], FReplaceText[Min(I, FReplaceText.Count - 1)], Flags); end; end; // File name style sTmpExt := ExtractFileExt(Result); sTmpName := Copy(Result, 1, Length(Result) - Length(sTmpExt)); sTmpName := ApplyStyle(sTmpName, cbNameMaskStyle.ItemIndex); sTmpExt := ApplyStyle(sTmpExt, cmbExtensionStyle.ItemIndex); Result := sTmpName + sTmpExt; actRename.Enabled := not bError; if bError then begin edFind.Color := clRed; edFind.Font.Color := clWhite; end else begin edFind.Color := clWindow; edFind.Font.Color := clWindowText; end; end; { TfrmMultiRename.sHandleFormatString } function TfrmMultiRename.sHandleFormatString(const sFormatStr: string; ItemNr: integer): string; var aFile: TFile; Index: int64; Counter: int64; Dirs: TStringArray; begin Result := ''; if Length(sFormatStr) > 0 then begin aFile := FFiles[ItemNr]; case sFormatStr[1] of '[', ']': begin Result := sFormatStr; end; 'N': begin Result := sReplaceXX(sFormatStr, aFile.NameNoExt); end; 'E': begin Result := sReplaceXX(sFormatStr, aFile.Extension); end; 'A': begin Result := sReplaceBadChars(sReplaceXX(sFormatStr, aFile.FullPath)); end; 'G': begin Result := GuidToString(DCGetNewGUID); end; 'V': begin if FActuallyRenamingFile then Result := sReplaceVariable(sFormatStr) else Result := '[' + sFormatStr + ']'; end; 'C': begin // Check for start value after C, e.g. C12 if not TryStrToInt64(Copy(sFormatStr, 2, MaxInt), Index) then Index := StrToInt64Def(edPoc.Text, 1); Counter := Index + StrToInt64Def(edInterval.Text, 1) * ItemNr; Result := Format('%.' + cmbxWidth.Items[cmbxWidth.ItemIndex] + 'd', [Counter]); end; 'P': // sub path index begin Index := StrToIntDef(Copy(sFormatStr, 2, MaxInt), 0); Dirs := (aFile.Path + ' ').Split([PathDelim]); Dirs[High(Dirs)] := EmptyStr; if Index < 0 then Result := Dirs[Max(0, High(Dirs) + Index)] else Result := Dirs[Min(Index, High(Dirs))]; end; '=': begin Result := sReplaceBadChars(FormatFileFunction(UTF8Copy(sFormatStr, 2, UTF8Length(sFormatStr) - 1), FFiles.Items[ItemNr], FFileSource, True)); end; else begin // Assume it is date/time formatting string ([h][n][s][Y][M][D]). with FFiles.Items[ItemNr] do if fpModificationTime in SupportedProperties then try Result := SysToUTF8(FormatDateTime(sFormatStr, ModificationTime)); except Result := sFormatStr; end; end; end; end; end; { TfrmMultiRename.SetFilePropertyResult } procedure TfrmMultiRename.SetFilePropertyResult(Index: integer; aFile: TFile; aTemplate: TFileProperty; Result: TSetFilePropertyResult); var sFilenameForLog, S: string; begin with TFileNameProperty(aTemplate) do begin if cbLog.Checked then if gMulRenFilenameWithFullPathInLog then sFilenameForLog := aFile.FullPath else sFilenameForLog := aFile.Name; case Result of sfprSuccess: begin S := 'OK ' + sFilenameForLog + ' -> ' + Value; if Index < FFiles.Count then FFiles[Index].Name := Value // Write new name to the file object else begin Index := StrToInt(aFile.Extension); FFiles[Index].Name := Value; // Write new name to the file object end; end; sfprError: S := 'FAILED ' + sFilenameForLog + ' -> ' + Value; sfprSkipped: S := 'SKIPPED ' + sFilenameForLog + ' -> ' + Value; end; end; if cbLog.Checked then FLog.Add(S); end; { TfrmMultiRename.SetOutputGlobalRenameLogFilename } procedure TfrmMultiRename.SetOutputGlobalRenameLogFilename; begin if gMultRenDailyIndividualDirLog then fneRenameLogFileFilename.FileName := mbExpandFileName(ExtractFilePath(gMulRenLogFilename) + IncludeTrailingPathDelimiter(EnvVarTodaysDate) + ExtractFilename(gMulRenLogFilename)) else fneRenameLogFileFilename.FileName := gMulRenLogFilename; end; { TfrmMultiRename.cm_ResetAll } procedure TfrmMultiRename.cm_ResetAll(const Params: array of string); var Param: string; bNeedRefreshActivePresetCommands: boolean = True; begin for Param in Params do GetParamBoolValue(Param, sREFRESHCOMMANDS, bNeedRefreshActivePresetCommands); cbName.Text := '[N]'; cbName.SelStart := UTF8Length(cbName.Text); cbExt.Text := '[E]'; cbExt.SelStart := UTF8Length(cbExt.Text); edFind.Text := ''; edReplace.Text := ''; cbRegExp.Checked := False; cbUseSubs.Checked := False; cbCaseSens.Checked := False; cbOnlyFirst.Checked := False; cbNameMaskStyle.ItemIndex := 0; cmbExtensionStyle.ItemIndex := 0; edPoc.Text := '1'; edInterval.Text := '1'; cmbxWidth.ItemIndex := 0; case gMulRenSaveRenamingLog of mrsrlPerPreset: begin cbLog.Checked := False; cbLog.Enabled := True; cbLogAppend.Checked := False; fneRenameLogFileFilename.Enabled := cbLog.Checked; actInvokeRelativePath.Enabled := cbLog.Checked; actViewRenameLogFile.Enabled := cbLog.Checked; cbLogAppend.Enabled := cbLog.Checked; if (FFiles.Count > 0) then fneRenameLogFileFilename.FileName := FFiles[0].Path + sDEFAULTLOGFILENAME else fneRenameLogFileFilename.FileName := sDEFAULTLOGFILENAME; end; mrsrlAppendSameLog: begin cbLog.Checked := True; cbLog.Enabled := False; cbLogAppend.Checked := True; cbLogAppend.Enabled := False; fneRenameLogFileFilename.Enabled := False; SetOutputGlobalRenameLogFilename; actInvokeRelativePath.Enabled := False; actViewRenameLogFile.Enabled := cbLog.Checked; end; end; cbPresets.Text := ''; FNames.Clear; gbMaska.Enabled := True; gbPresets.Enabled := True; cbPresets.ItemIndex := 0; gbCounter.Enabled := True; StringGridTopLeftChanged(StringGrid); if bNeedRefreshActivePresetCommands then RefreshActivePresetCommands; end; { TfrmMultiRename.cm_InvokeEditor } procedure TfrmMultiRename.cm_InvokeEditor(const {%H-}Params: array of string); begin DCPlaceCursorNearControlIfNecessary(btnEditor); pmEditDirect.PopUp; end; { TfrmMultiRename.cm_LoadNamesFromFile } procedure TfrmMultiRename.cm_LoadNamesFromFile(const {%H-}Params: array of string); begin dmComData.OpenDialog.FileName := EmptyStr; dmComData.OpenDialog.Filter := AllFilesMask; if dmComData.OpenDialog.Execute then LoadNamesFromFile(dmComData.OpenDialog.FileName); end; procedure TfrmMultiRename.cm_LoadNamesFromClipboard( const Params: array of string); var AFileList: TStringListEx; begin AFileList := TStringListEx.Create; try AFileList.Text := Clipboard.AsText; LoadNamesFromList(AFileList); except on E: Exception do msgError(E.Message); end; AFileList.Free; end; { TfrmMultiRename.cm_EditNames } procedure TfrmMultiRename.cm_EditNames(const {%H-}Params: array of string); var I: integer; AFileName: string; AFileList: TStringListEx; begin AFileList := TStringListEx.Create; AFileName := GetTempFolderDeletableAtTheEnd; AFileName := GetTempName(AFileName, 'txt'); if FNames.Count > 0 then AFileList.Assign(FNames) else begin for I := 0 to FFiles.Count - 1 do AFileList.Add(FFiles[I].Name); end; try AFileList.SaveToFile(AFileName); try if ShowMultiRenameWaitForm(AFileName, Self) then LoadNamesFromFile(AFileName); finally mbDeleteFile(AFileName); end; except on E: Exception do msgError(E.Message); end; AFileList.Free; end; { TfrmMultiRename.cm_EditNewNames } procedure TfrmMultiRename.cm_EditNewNames(const {%H-}Params: array of string); var sFileName: string; iIndexFile: integer; AFileList: TStringListEx; begin AFileList := TStringListEx.Create; try for iIndexFile := 0 to pred(FFiles.Count) do AFileList.Add(FreshText(iIndexFile)); sFileName := GetTempName(GetTempFolderDeletableAtTheEnd, 'txt'); try AFileList.SaveToFile(sFileName); try if ShowMultiRenameWaitForm(sFileName, Self) then LoadNamesFromFile(sFileName); finally mbDeleteFile(sFileName); end; except on E: Exception do msgError(E.Message); end; finally AFileList.Free; end; end; { TfrmMultiRename.cm_Config } procedure TfrmMultiRename.cm_Config(const {%H-}Params: array of string); begin frmMain.Commands.cm_Options(['TfrmOptionsMultiRename']); end; { TfrmMultiRename.cm_Rename } procedure TfrmMultiRename.cm_Rename(const {%H-}Params: array of string); var AFile: TFile; NewName: string; I, J, K: integer; TempFiles: TStringList; OldFiles, NewFiles: TFiles; AutoRename: boolean = False; Operation: TFileSourceOperation; theNewProperties: TFileProperties; LogFileStream: TFileStream; begin FActuallyRenamingFile := True; try if cbLog.Checked then begin if fneRenameLogFileFilename.FileName = EmptyStr then fneRenameLogFileFilename.FileName := FFiles[0].Path + sDEFAULTLOGFILENAME; mbForceDirectory(ExtractFileDir(mbExpandFileName(fneRenameLogFileFilename.FileName))); FLog := TStringListEx.Create; if cbLogAppend.Checked then FLog.Add(';' + DateTimeToStr(Now) + ' - ' + rsMulRenLogStart); end; OldFiles := FFiles.Clone; TempFiles := TStringList.Create; NewFiles := TFiles.Create(EmptyStr); FslVariableNames.Clear; FslVariableValues.Clear; //We don't clear the "Suggestion" parts because we may re-use them as their original values if we ever re-do rename pass witht he same instance. // OldNames FOldNames.Clear; for I := 0 to OldFiles.Count - 1 do FOldNames.Add(OldFiles[I].Name, Pointer(PtrInt(I))); try FNewNames.Clear; for I := 0 to FFiles.Count - 1 do begin AFile := TFile.Create(EmptyStr); AFile.Name := FreshText(I); //In "FreshText", if there was a "Variable on the fly / [V:Hint]" and the user aborted it, the "FActuallyRenamingFile" will be cleared and so we abort the actual renaming process. if not FActuallyRenamingFile then Exit; // Checking duplicates NewName := FFiles[I].Path + AFile.Name; J := FNewNames.Find(NewName); if J < 0 then FNewNames.Add(NewName) else begin if not AutoRename then begin if MessageDlg(rsMulRenWarningDuplicate + LineEnding + NewName + LineEnding + LineEnding + rsMulRenAutoRename, mtWarning, [mbYes, mbAbort], 0, mbAbort) <> mrYes then Exit; AutoRename := True; end; K := 1; while J >= 0 do begin NewName := FFiles[I].Path + AFile.NameNoExt + ' (' + IntToStr(K) + ')'; if AFile.Extension <> '' then NewName := NewName + ExtensionSeparator + AFile.Extension; J := FNewNames.Find(NewName); Inc(K); end; FNewNames.Add(NewName); AFile.Name := ExtractFileName(NewName); end; // Avoid collisions with OldNames J := FOldNames.Find(AFile.Name); if (J >= 0) and (PtrUInt(FOldNames.List[J]^.Data) <> I) then begin NewName := AFile.Name; // Generate temp file name, save file index as extension AFile.FullPath := GetTempName(FFiles[I].Path, IntToStr(I)); TempFiles.AddObject(NewName, AFile.Clone); end; NewFiles.Add(AFile); end; // Rename temp files back if TempFiles.Count > 0 then begin for I := 0 to TempFiles.Count - 1 do begin // Temp file name OldFiles.Add(TFile(TempFiles.Objects[I])); // Real new file name AFile := TFile.Create(EmptyStr); AFile.Name := TempFiles[I]; NewFiles.Add(AFile); end; end; // Rename files FillChar({%H-}theNewProperties, SizeOf(TFileProperties), 0); Operation := FFileSource.CreateSetFilePropertyOperation(OldFiles, theNewProperties); if Assigned(Operation) then begin with Operation as TFileSourceSetFilePropertyOperation do begin SetTemplateFiles(NewFiles); OnSetFilePropertyResult := @SetFilePropertyResult; end; OperationsManager.AddOperationModal(Operation); end; InsertFirstItem(cbExt.Text, cbExt); InsertFirstItem(cbName.Text, cbName); finally if cbLog.Checked then begin try if (cbLogAppend.Checked) and (FileExists(mbExpandFileName(fneRenameLogFileFilename.FileName))) then begin LogFileStream := TFileStream.Create(mbExpandFileName(fneRenameLogFileFilename.FileName), fmOpenWrite); try LogFileStream.Seek(0, soEnd); FLog.SaveToStream(LogFileStream); finally LogFileStream.Free; end; end else begin FLog.SaveToFile(mbExpandFileName(fneRenameLogFileFilename.FileName)); end; except on E: Exception do msgError(E.Message); end; FLog.Free; end; OldFiles.Free; NewFiles.Free; TempFiles.Free; end; finally FActuallyRenamingFile := False; end; StringGridTopLeftChanged(StringGrid); end; { TfrmMultiRename.cm_Close } procedure TfrmMultiRename.cm_Close(const {%H-}Params: array of string); begin Close; end; { TfrmMultiRename.cm_ShowPresetsMenu } procedure TfrmMultiRename.cm_ShowPresetsMenu(const {%H-}Params: array of string); begin PopupDynamicMenuAtThisControl(pmPresets, btnPresets); end; { TfrmMultiRename.cm_DropDownPresetList } procedure TfrmMultiRename.cm_DropDownPresetList(const {%H-}Params: array of string); begin if (not cbPresets.CanFocus) and (not cbPresets.Enabled) then if isOkToLosePresetModification = True then cbPresets.Enabled := True; if cbPresets.CanFocus then begin cbPresets.SetFocus; cbPresets.DroppedDown := True; end; end; { TfrmMultiRename.cm_LoadPreset } procedure TfrmMultiRename.cm_LoadPreset(const Params: array of string); var sPresetName: string; PresetIndex: integer; begin if isOkToLosePresetModification then begin //1.Get the preset name from the parameters. sPresetName := GetPresetNameForCommand(Params); //2.Make sure we got something. if sPresetName <> '' then begin //3.Make sure it is in our list. PresetIndex := FMultiRenamePresetList.Find(sPresetName); if PresetIndex <> -1 then begin cbName.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].FileName; cbName.SelStart := UTF8Length(cbName.Text); cbExt.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Extension; cbExt.SelStart := UTF8Length(cbExt.Text); cbNameMaskStyle.ItemIndex := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].FileNameStyle; cmbExtensionStyle.ItemIndex := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].ExtensionStyle; edFind.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Find; edReplace.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Replace; cbRegExp.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].RegExp; cbUseSubs.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].UseSubs; cbCaseSens.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].CaseSens; cbOnlyFirst.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].OnlyFirst; edPoc.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Counter; edInterval.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Interval; cmbxWidth.ItemIndex := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Width; case gMulRenSaveRenamingLog of mrsrlPerPreset: begin cbLog.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Log; cbLogAppend.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogAppend; fneRenameLogFileFilename.FileName := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogFile; end; mrsrlAppendSameLog: begin FbRememberLog := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Log; FbRememberAppend := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogAppend; FsRememberRenameLogFilename := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].LogFile; SetOutputGlobalRenameLogFilename; end; end; //4.Preserved the last loaded setup. FLastPreset := sPresetName; //5.Refresh the whole thing. edFindChange(edFind); edReplaceChange(edReplace); //6.We might come here with parameter "index=x" so make sure we switch also the preset combo box to the same index. if PresetIndex >= cbPresets.Items.Count then PresetIndex := 0; if cbPresets.ItemIndex <> PresetIndex then cbPresets.ItemIndex := PresetIndex; //7.Since we've load the setup, activate things so we may change setup if necessary. SetConfigurationState(CONFIG_SAVED); //8. If we're from anything else the preset droplist itself, let's go to focus on the name ready to edit it if necessary.. if (ActiveControl <> cbPresets) and (ActiveControl <> cbName) and (cbName.Enabled and gbMaska.Enabled) then begin ActiveControl := cbName; cbName.SelStart := UTF8Length(cbName.Text); end; end; end; end; end; { TfrmMultiRename.cm_LoadLastPreset } procedure TfrmMultiRename.cm_LoadLastPreset(const Params: array of string); begin cm_LoadPreset(['index=0']); end; { TfrmMultiRename.cm_LoadPreset1 } procedure TfrmMultiRename.cm_LoadPreset1(const Params: array of string); begin cm_LoadPreset(['index=1']); end; { TfrmMultiRename.cm_LoadPreset2 } procedure TfrmMultiRename.cm_LoadPreset2(const Params: array of string); begin cm_LoadPreset(['index=2']); end; { TfrmMultiRename.cm_LoadPreset3 } procedure TfrmMultiRename.cm_LoadPreset3(const Params: array of string); begin cm_LoadPreset(['index=3']); end; { TfrmMultiRename.cm_LoadPreset4 } procedure TfrmMultiRename.cm_LoadPreset4(const Params: array of string); begin cm_LoadPreset(['index=4']); end; { TfrmMultiRename.cm_LoadPreset5 } procedure TfrmMultiRename.cm_LoadPreset5(const Params: array of string); begin cm_LoadPreset(['index=5']); end; { TfrmMultiRename.cm_LoadPreset6 } procedure TfrmMultiRename.cm_LoadPreset6(const Params: array of string); begin cm_LoadPreset(['index=6']); end; { TfrmMultiRename.cm_LoadPreset7 } procedure TfrmMultiRename.cm_LoadPreset7(const Params: array of string); begin cm_LoadPreset(['index=7']); end; { TfrmMultiRename.cm_LoadPreset8 } procedure TfrmMultiRename.cm_LoadPreset8(const Params: array of string); begin cm_LoadPreset(['index=8']); end; { TfrmMultiRename.cm_LoadPreset9 } procedure TfrmMultiRename.cm_LoadPreset9(const Params: array of string); begin cm_LoadPreset(['index=9']); end; { TfrmMultiRename.cm_SavePreset } procedure TfrmMultiRename.cm_SavePreset(const Params: array of string); begin if cbPresets.ItemIndex > 0 then begin SavePreset(cbPresets.Items.Strings[cbPresets.ItemIndex]); SetConfigurationState(CONFIG_SAVED); end; end; { TfrmMultiRename.cm_SavePresetAs } procedure TfrmMultiRename.cm_SavePresetAs(const Params: array of string); var sNameForPreset: string; bKeepGoing: boolean; begin sNameForPreset := GetPresetNameForCommand(Params); if sNameForPreset <> '' then begin bKeepGoing := True; end else begin if (FLastPreset = '') or (FLastPreset = sLASTPRESET) then sNameForPreset := rsMulRenDefaultPresetName else sNameForPreset := FLastPreset; bKeepGoing := InputQuery(Caption, rsMulRenPromptForSavedPresetName, sNameForPreset); if bKeepGoing then bKeepGoing := (sNameForPreset <> ''); end; if bKeepGoing and (sNameForPreset <> FLastPreset) then if FMultiRenamePresetList.Find(sNameForPreset) <> -1 then if not msgYesNo(Format(rsMsgPresetAlreadyExists, [sNameForPreset]), msmbNo) then bKeepGoing := False; if bKeepGoing then begin SavePreset(sNameForPreset); if cbPresets.Items.IndexOf(sNameForPreset) = -1 then begin cbPresets.Items.Add(sNameForPreset); end; if cbPresets.ItemIndex <> cbPresets.Items.IndexOf(sNameForPreset) then cbPresets.ItemIndex := cbPresets.Items.IndexOf(sNameForPreset); SetConfigurationState(CONFIG_SAVED); RefreshActivePresetCommands; end; end; { TfrmMultiRename.cm_RenamePreset } // It also allow the at the same time to rename for changing case like "audio files" to "Audio Files". procedure TfrmMultiRename.cm_RenamePreset(const Params: array of string); var sCurrentName, sNewName: string; PresetIndex: integer; bKeepGoing: boolean; begin sCurrentName := cbPresets.Items.Strings[cbPresets.ItemIndex]; sNewName := sCurrentName; bKeepGoing := InputQuery(Caption, rsMulRenPromptNewPresetName, sNewName); if bKeepGoing and (sNewName <> '') and (sCurrentName <> sNewName) then begin PresetIndex := FMultiRenamePresetList.Find(sNewName); if (PresetIndex = -1) or (SameText(sCurrentName, sNewName)) then begin if SameText(FMultiRenamePresetList.MultiRenamePreset[cbPresets.ItemIndex].PresetName, cbPresets.Items.Strings[cbPresets.ItemIndex]) then begin FMultiRenamePresetList.MultiRenamePreset[cbPresets.ItemIndex].PresetName := sNewName; cbPresets.Items.Strings[cbPresets.ItemIndex] := sNewName; end; end else begin if msgYesNo(rsMulRenPromptNewNameExists, msmbNo) then begin if SameText(FMultiRenamePresetList.MultiRenamePreset[PresetIndex].PresetName, cbPresets.Items.Strings[PresetIndex]) and SameText(FMultiRenamePresetList.MultiRenamePreset[cbPresets.ItemIndex].PresetName, cbPresets.Items.Strings[cbPresets.ItemIndex]) then begin FMultiRenamePresetList.MultiRenamePreset[cbPresets.ItemIndex].PresetName := sNewName; cbPresets.Items.Strings[cbPresets.ItemIndex] := sNewName; cbPresets.Items.Delete(PresetIndex); FMultiRenamePresetList.Delete(PresetIndex); end; end; end; end; end; { TfrmMultiRename.cm_DeletePreset } procedure TfrmMultiRename.cm_DeletePreset(const Params: array of string); var Index: integer; sPresetName: string; begin sPresetName := GetPresetNameForCommand(Params); if sPresetName = '' then if cbPresets.ItemIndex > 0 then sPresetName := cbPresets.Items.Strings[cbPresets.ItemIndex]; if sPresetName <> '' then begin if msgYesNo(Format(rsMsgPresetConfigDelete, [sPresetName]), msmbNo) then begin DeletePreset(sPresetName); Index := cbPresets.Items.IndexOf(sPresetName); if Index = cbPresets.ItemIndex then cbPresets.ItemIndex := 0; if Index <> -1 then cbPresets.Items.Delete(Index); FillPresetsList; end; end; end; { TfrmMultiRename.cm_SortPresets } procedure TfrmMultiRename.cm_SortPresets(const Params: array of string); var slLocalPresets: TStringList; iSeeker, iPresetIndex: integer; begin if isOkToLosePresetModification then begin if FMultiRenamePresetList.Count > 1 then begin slLocalPresets := TStringList.Create; try for iSeeker := 1 to pred(FMultiRenamePresetList.Count) do slLocalPresets.Add(FMultiRenamePresetList.MultiRenamePreset[iSeeker].PresetName); if HaveUserSortThisList(Self, rsMulRenSortingPresets, slLocalPresets) = mrOk then begin for iSeeker := 0 to pred(slLocalPresets.Count) do begin iPresetIndex := FMultiRenamePresetList.Find(slLocalPresets.Strings[iSeeker]); if succ(iSeeker) <> iPresetIndex then FMultiRenamePresetList.Move(iPresetIndex, succ(iSeeker)); end; FillPresetsList(cbPresets.Items.Strings[cbPresets.ItemIndex]); end; finally slLocalPresets.Free; end; end; end; end; { TfrmMultiRename.cm_AnyNameMask } procedure TfrmMultiRename.cm_AnyNameMask(const {%H-}Params: array of string); begin pmFloatingMainMaskMenu.Items.Clear; PopulateFilenameMenu(pmFloatingMainMaskMenu); PopupDynamicMenuAtThisControl(pmFloatingMainMaskMenu, btnAnyNameMask); end; { TfrmMultiRename.cm_NameNameMask } procedure TfrmMultiRename.cm_NameNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuFilename); end; { TfrmMultiRename.cm_ExtNameMask } procedure TfrmMultiRename.cm_ExtNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuExtension); end; { TfrmMultiRename.cm_CtrNameMask } procedure TfrmMultiRename.cm_CtrNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuCounter); end; { TfrmMultiRename.cm_DateNameMask } procedure TfrmMultiRename.cm_DateNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuDate); end; { TfrmMultiRename.cm_TimeNameMask } procedure TfrmMultiRename.cm_TimeNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuTime); end; { TfrmMultiRename.cm_PlgnNameMask } procedure TfrmMultiRename.cm_PlgnNameMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmFilename, rmtuPlugins); end; { TfrmMultiRename.cm_ClearNameMask } procedure TfrmMultiRename.cm_ClearNameMask(const {%H-}Params: array of string); begin cbName.Text := ''; cbNameStyleChange(cbExt); if cbName.CanFocus then cbName.SetFocus; end; { TfrmMultiRename.cm_AnyExtMask } procedure TfrmMultiRename.cm_AnyExtMask(const {%H-}Params: array of string); begin pmFloatingMainMaskMenu.Items.Clear; PopulateExtensionMenu(pmFloatingMainMaskMenu); PopupDynamicMenuAtThisControl(pmFloatingMainMaskMenu, btnAnyExtMask); end; { TfrmMultiRename.cm_NameExtMask } procedure TfrmMultiRename.cm_NameExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuFilename); end; { TfrmMultiRename.cm_ExtExtMask } procedure TfrmMultiRename.cm_ExtExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuExtension); end; { TfrmMultiRename.cm_CtrExtMask } procedure TfrmMultiRename.cm_CtrExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuCounter); end; { TfrmMultiRename.cm_DateExtMask } procedure TfrmMultiRename.cm_DateExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuDate); end; { TfrmMultiRename.cm_TimeExtMask } procedure TfrmMultiRename.cm_TimeExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuTime); end; { TfrmMultiRename.cm_PlgnExtMask } procedure TfrmMultiRename.cm_PlgnExtMask(const {%H-}Params: array of string); begin BuildMenuAndPopup(tfmExtension, rmtuPlugins); end; { TfrmMultiRename.cm_ClearExtMask } procedure TfrmMultiRename.cm_ClearExtMask(const {%H-}Params: array of string); begin cbExt.Text := ''; cbNameStyleChange(cbExt); if cbExt.CanFocus then cbExt.SetFocus; end; { TfrmMultiRename.cm_ViewRenameLogFile } procedure TfrmMultiRename.cm_ViewRenameLogFile(const {%H-}Params: array of string); var sRenameLogFilename: string; begin sRenameLogFilename := mbExpandFileName(fneRenameLogFileFilename.FileName); if FileExists(sRenameLogFilename) then ShowViewerByGlob(sRenameLogFilename) else MsgError(Format(rsMsgFileNotFound, [sRenameLogFilename])); end; { ShowMultiRenameForm } // Will be in fact the lone function called externally to launch a MultiRename dialog. function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles; const PresetToLoad: string = ''): boolean; begin Result := True; try with TfrmMultiRename.Create(Application, aFileSource, aFiles, PresetToLoad) do begin Show; end; except Result := False; end; end; initialization TFormCommands.RegisterCommandsForm(TfrmMultiRename, HotkeysCategoryMultiRename, @rsHotkeyCategoryMultiRename); end. doublecmd-1.1.30/src/fmultirename.lrj0000644000175000001440000002402015104114162016553 0ustar alexxusers{"version":1,"strings":[ {"hash":252261308,"name":"tfrmmultirename.caption","sourcebytes":[77,117,108,116,105,45,82,101,110,97,109,101,32,84,111,111,108],"value":"Multi-Rename Tool"}, {"hash":72551557,"name":"tfrmmultirename.stringgrid.columns[0].title.caption","sourcebytes":[79,108,100,32,70,105,108,101,32,78,97,109,101],"value":"Old File Name"}, {"hash":113118341,"name":"tfrmmultirename.stringgrid.columns[1].title.caption","sourcebytes":[78,101,119,32,70,105,108,101,32,78,97,109,101],"value":"New File Name"}, {"hash":41231784,"name":"tfrmmultirename.stringgrid.columns[2].title.caption","sourcebytes":[70,105,108,101,32,80,97,116,104],"value":"File Path"}, {"hash":342171,"name":"tfrmmultirename.gbmaska.caption","sourcebytes":[77,97,115,107],"value":"Mask"}, {"hash":120559637,"name":"tfrmmultirename.lbname.caption","sourcebytes":[70,105,108,101,32,38,78,97,109,101],"value":"File &Name"}, {"hash":180827310,"name":"tfrmmultirename.lbext.caption","sourcebytes":[38,69,120,116,101,110,115,105,111,110],"value":"&Extension"}, {"hash":126655715,"name":"tfrmmultirename.gbpresets.caption","sourcebytes":[80,114,101,115,101,116,115],"value":"Presets"}, {"hash":212198085,"name":"tfrmmultirename.gbfindreplace.caption","sourcebytes":[70,105,110,100,32,38,38,32,82,101,112,108,97,99,101],"value":"Find && Replace"}, {"hash":218395566,"name":"tfrmmultirename.lbfind.caption","sourcebytes":[38,70,105,110,100,46,46,46],"value":"&Find..."}, {"hash":35724926,"name":"tfrmmultirename.lbreplace.caption","sourcebytes":[82,101,38,112,108,97,99,101,46,46,46],"value":"Re&place..."}, {"hash":20463635,"name":"tfrmmultirename.cbregexp.caption","sourcebytes":[82,101,103,117,108,97,114,32,101,38,120,112,114,101,115,115,105,111,110,115],"value":"Regular e&xpressions"}, {"hash":219672053,"name":"tfrmmultirename.cbcasesens.hint","sourcebytes":[67,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"Case sensitive"}, {"hash":5223265,"name":"tfrmmultirename.cbcasesens.caption","sourcebytes":[65,226,137,160,97],"value":"A\u2260a"}, {"hash":121437630,"name":"tfrmmultirename.cbusesubs.caption","sourcebytes":[38,85,115,101,32,115,117,98,115,116,105,116,117,116,105,111,110],"value":"&Use substitution"}, {"hash":54067429,"name":"tfrmmultirename.cbonlyfirst.hint","sourcebytes":[82,101,112,108,97,99,101,32,111,110,108,121,32,111,110,99,101,32,112,101,114,32,102,105,108,101],"value":"Replace only once per file"}, {"hash":904,"name":"tfrmmultirename.cbonlyfirst.caption","sourcebytes":[49,120],"value":"1x"}, {"hash":174873218,"name":"tfrmmultirename.gbcounter.caption","sourcebytes":[67,111,117,110,116,101,114],"value":"Counter"}, {"hash":42119666,"name":"tfrmmultirename.lbstnb.caption","sourcebytes":[83,38,116,97,114,116,32,78,117,109,98,101,114],"value":"S&tart Number"}, {"hash":49,"name":"tfrmmultirename.edpoc.text","sourcebytes":[49],"value":"1"}, {"hash":95205244,"name":"tfrmmultirename.lbinterval.caption","sourcebytes":[38,73,110,116,101,114,118,97,108],"value":"&Interval"}, {"hash":49,"name":"tfrmmultirename.edinterval.text","sourcebytes":[49],"value":"1"}, {"hash":46005160,"name":"tfrmmultirename.lbwidth.caption","sourcebytes":[38,87,105,100,116,104],"value":"&Width"}, {"hash":817,"name":"tfrmmultirename.cmbxwidth.text","sourcebytes":[48,49],"value":"01"}, {"hash":128425892,"name":"tfrmmultirename.cblog.caption","sourcebytes":[38,76,111,103,32,114,101,115,117,108,116],"value":"&Log result"}, {"hash":75983940,"name":"tfrmmultirename.cblogappend.caption","sourcebytes":[65,112,112,101,110,100],"value":"Append"}, {"hash":128648723,"name":"tfrmmultirename.miactions.caption","sourcebytes":[65,99,116,105,111,110,115],"value":"Actions"}, {"hash":79367010,"name":"tfrmmultirename.mieditor.caption","sourcebytes":[69,100,105,116,111,114],"value":"Editor"}, {"hash":2901221,"name":"tfrmmultirename.actanynamemask.caption","sourcebytes":[70,105,108,101,110,97,109,101],"value":"Filename"}, {"hash":2901221,"name":"tfrmmultirename.actnamenamemask.caption","sourcebytes":[70,105,108,101,110,97,109,101],"value":"Filename"}, {"hash":180737198,"name":"tfrmmultirename.actextnamemask.caption","sourcebytes":[69,120,116,101,110,115,105,111,110],"value":"Extension"}, {"hash":174873218,"name":"tfrmmultirename.actctrnamemask.caption","sourcebytes":[67,111,117,110,116,101,114],"value":"Counter"}, {"hash":305317,"name":"tfrmmultirename.actdatenamemask.caption","sourcebytes":[68,97,116,101],"value":"Date"}, {"hash":372789,"name":"tfrmmultirename.acttimenamemask.caption","sourcebytes":[84,105,109,101],"value":"Time"}, {"hash":121364483,"name":"tfrmmultirename.actplgnnamemask.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":208088252,"name":"tfrmmultirename.actresetall.caption","sourcebytes":[82,101,115,101,116,32,38,65,108,108],"value":"Reset &All"}, {"hash":4860802,"name":"tfrmmultirename.actclearnamemask.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, {"hash":180737198,"name":"tfrmmultirename.actanyextmask.caption","sourcebytes":[69,120,116,101,110,115,105,111,110],"value":"Extension"}, {"hash":2901221,"name":"tfrmmultirename.actnameextmask.caption","sourcebytes":[70,105,108,101,110,97,109,101],"value":"Filename"}, {"hash":180737198,"name":"tfrmmultirename.actextextmask.caption","sourcebytes":[69,120,116,101,110,115,105,111,110],"value":"Extension"}, {"hash":174873218,"name":"tfrmmultirename.actctrextmask.caption","sourcebytes":[67,111,117,110,116,101,114],"value":"Counter"}, {"hash":305317,"name":"tfrmmultirename.actdateextmask.caption","sourcebytes":[68,97,116,101],"value":"Date"}, {"hash":372789,"name":"tfrmmultirename.acttimeextmask.caption","sourcebytes":[84,105,109,101],"value":"Time"}, {"hash":121364483,"name":"tfrmmultirename.actplgnextmask.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":4860802,"name":"tfrmmultirename.actclearextmask.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, {"hash":196111650,"name":"tfrmmultirename.actinvokeeditor.caption","sourcebytes":[69,100,105,116,38,111,114],"value":"Edit&or"}, {"hash":241100437,"name":"tfrmmultirename.actviewrenamelogfile.caption","sourcebytes":[86,105,101,119,32,82,101,110,97,109,101,32,76,111,103,32,70,105,108,101],"value":"View Rename Log File"}, {"hash":263529797,"name":"tfrmmultirename.actinvokerelativepath.caption","sourcebytes":[73,110,118,111,107,101,32,82,101,108,97,116,105,118,101,32,80,97,116,104,32,77,101,110,117],"value":"Invoke Relative Path Menu"}, {"hash":256660862,"name":"tfrmmultirename.actloadnamesfromfile.caption","sourcebytes":[76,111,97,100,32,78,97,109,101,115,32,102,114,111,109,32,70,105,108,101,46,46,46],"value":"Load Names from File..."}, {"hash":227296782,"name":"tfrmmultirename.acteditnames.caption","sourcebytes":[69,100,105,116,32,78,97,109,101,115,46,46,46],"value":"Edit Names..."}, {"hash":72890318,"name":"tfrmmultirename.acteditnewnames.caption","sourcebytes":[69,100,105,116,32,67,117,114,114,101,110,116,32,78,101,119,32,78,97,109,101,115,46,46,46],"value":"Edit Current New Names..."}, {"hash":87501221,"name":"tfrmmultirename.actshowpresetsmenu.caption","sourcebytes":[83,104,111,119,32,80,114,101,115,101,116,32,77,101,110,117],"value":"Show Preset Menu"}, {"hash":207899652,"name":"tfrmmultirename.actdropdownpresetlist.caption","sourcebytes":[68,114,111,112,32,68,111,119,110,32,80,114,101,115,101,116,115,32,76,105,115,116],"value":"Drop Down Presets List"}, {"hash":53442260,"name":"tfrmmultirename.actloadlastpreset.caption","sourcebytes":[76,111,97,100,32,76,97,115,116,32,80,114,101,115,101,116],"value":"Load Last Preset"}, {"hash":169418520,"name":"tfrmmultirename.actloadpreset.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,98,121,32,78,97,109,101,32,111,114,32,73,110,100,101,120],"value":"Load Preset by Name or Index"}, {"hash":194945809,"name":"tfrmmultirename.actloadpreset1.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,49],"value":"Load Preset 1"}, {"hash":194945810,"name":"tfrmmultirename.actloadpreset2.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,50],"value":"Load Preset 2"}, {"hash":194945811,"name":"tfrmmultirename.actloadpreset3.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,51],"value":"Load Preset 3"}, {"hash":194945812,"name":"tfrmmultirename.actloadpreset4.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,52],"value":"Load Preset 4"}, {"hash":194945813,"name":"tfrmmultirename.actloadpreset5.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,53],"value":"Load Preset 5"}, {"hash":194945814,"name":"tfrmmultirename.actloadpreset6.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,54],"value":"Load Preset 6"}, {"hash":194945815,"name":"tfrmmultirename.actloadpreset7.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,55],"value":"Load Preset 7"}, {"hash":194945816,"name":"tfrmmultirename.actloadpreset8.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,56],"value":"Load Preset 8"}, {"hash":194945817,"name":"tfrmmultirename.actloadpreset9.caption","sourcebytes":[76,111,97,100,32,80,114,101,115,101,116,32,57],"value":"Load Preset 9"}, {"hash":366789,"name":"tfrmmultirename.actsavepreset.caption","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":122542542,"name":"tfrmmultirename.actsavepresetas.caption","sourcebytes":[83,97,118,101,32,65,115,46,46,46],"value":"Save As..."}, {"hash":93079605,"name":"tfrmmultirename.actrenamepreset.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":78392485,"name":"tfrmmultirename.actdeletepreset.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":370324,"name":"tfrmmultirename.actsortpresets.caption","sourcebytes":[83,111,114,116],"value":"Sort"}, {"hash":180623390,"name":"tfrmmultirename.actconfig.caption","sourcebytes":[67,111,110,102,105,38,103,117,114,97,116,105,111,110],"value":"Confi&guration"}, {"hash":193742869,"name":"tfrmmultirename.actrename.caption","sourcebytes":[38,82,101,110,97,109,101],"value":"&Rename"}, {"hash":44709525,"name":"tfrmmultirename.actclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"} ]} doublecmd-1.1.30/src/fmultirename.lfm0000644000175000001440000007202115104114162016546 0ustar alexxusersobject frmMultiRename: TfrmMultiRename Left = 492 Height = 624 Top = 132 Width = 788 ActiveControl = cbName Caption = 'Multi-Rename Tool' ClientHeight = 597 ClientWidth = 788 KeyPreview = True Menu = mmMainMenu OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState;pnlOptionsLeft.Width' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '2.0.12.0' object StringGrid: TStringGrid Left = 6 Height = 261 Top = 6 Width = 776 Align = alClient AutoFillColumns = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 ColCount = 3 Columns = < item SizePriority = 0 Title.Caption = 'Old File Name' Width = 248 end item SizePriority = 0 Title.Caption = 'New File Name' Width = 249 end item Title.Caption = 'File Path' Width = 277 end> ExtendedSelect = False FixedCols = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goSmoothScroll] ParentFont = False RowCount = 1 TabOrder = 2 TitleStyle = tsNative OnKeyDown = StringGridKeyDown OnMouseDown = StringGridMouseDown OnMouseUp = StringGridMouseUp OnResize = StringGridTopLeftChanged OnSelection = StringGridSelection OnTopLeftChanged = StringGridTopLeftChanged ColWidths = ( 248 249 277 ) end object pnlOptions: TPanel Left = 6 Height = 275 Top = 273 Width = 776 Align = alBottom AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 275 ClientWidth = 776 ParentFont = False TabOrder = 0 object pnlOptionsLeft: TPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 275 Top = 0 Width = 250 Align = alLeft BevelOuter = bvNone ClientHeight = 275 ClientWidth = 250 ParentFont = False TabOrder = 0 object gbMaska: TGroupBox AnchorSideLeft.Control = pnlOptionsLeft AnchorSideTop.Control = pnlOptionsLeft AnchorSideRight.Control = pnlOptionsLeft AnchorSideRight.Side = asrBottom Left = 0 Height = 210 Top = 0 Width = 250 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Mask' ChildSizing.LeftRightSpacing = 4 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 2 ClientHeight = 190 ClientWidth = 248 ParentFont = False TabOrder = 0 object lbName: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = gbMaska AnchorSideBottom.Control = cbName Left = 4 Height = 17 Top = 0 Width = 61 Caption = 'File &Name' FocusControl = cbName ParentColor = False ParentFont = False end object lbExt: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = cbNameMaskStyle AnchorSideTop.Side = asrBottom Left = 4 Height = 17 Top = 95 Width = 60 Caption = '&Extension' FocusControl = cbExt ParentColor = False ParentFont = False end object cbNameMaskStyle: TComboBox AnchorSideLeft.Control = btnAnyNameMask AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 29 Height = 35 Top = 56 Width = 215 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 4 ItemHeight = 0 OnChange = cbNameStyleChange ParentFont = False Style = csDropDownList TabOrder = 2 end object cmbExtensionStyle: TComboBox AnchorSideLeft.Control = btnAnyExtMask AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbExt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 29 Height = 35 Top = 151 Width = 215 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 4 ItemHeight = 0 OnChange = cbNameStyleChange ParentFont = False Style = csDropDownList TabOrder = 5 end object btnAnyNameMask: TKASButton AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = cbNameMaskStyle AnchorSideBottom.Control = cbNameMaskStyle AnchorSideBottom.Side = asrBottom Left = 4 Height = 35 Top = 56 Width = 23 Anchors = [akTop, akLeft, akBottom] TabOrder = 1 TabStop = True end object btnAnyExtMask: TKASButton AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = cmbExtensionStyle AnchorSideBottom.Control = cmbExtensionStyle AnchorSideBottom.Side = asrBottom Left = 4 Height = 35 Top = 151 Width = 23 Anchors = [akTop, akLeft, akBottom] TabOrder = 4 TabStop = True end object cbName: TComboBox AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 4 Height = 35 Top = 19 Width = 240 Anchors = [akTop, akLeft, akRight] AutoSelect = False ItemHeight = 0 OnChange = cbNameStyleChange ParentFont = False TabOrder = 0 end object cbExt: TComboBox AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbExt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 4 Height = 35 Top = 114 Width = 240 Anchors = [akTop, akLeft, akRight] AutoSelect = False ItemHeight = 0 OnChange = cbNameStyleChange ParentFont = False TabOrder = 3 end end object gbPresets: TGroupBox AnchorSideLeft.Control = pnlOptionsLeft AnchorSideTop.Control = gbMaska AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlOptionsLeft AnchorSideRight.Side = asrBottom Left = 0 Height = 59 Top = 216 Width = 250 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Presets' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 2 ChildSizing.HorizontalSpacing = 2 ClientHeight = 39 ClientWidth = 248 ParentColor = False ParentFont = False TabOrder = 1 object cbPresets: TComboBox AnchorSideLeft.Control = gbPresets AnchorSideTop.Control = gbPresets AnchorSideRight.Control = btnPresets AnchorSideBottom.Side = asrBottom Left = 4 Height = 35 Top = 2 Width = 222 Anchors = [akTop, akLeft, akRight] DropDownCount = 15 ItemHeight = 0 OnChange = cbPresetsChange OnCloseUp = cbPresetsCloseUp ParentFont = False Style = csDropDownList TabOrder = 1 end object btnPresets: TKASButton AnchorSideTop.Control = cbPresets AnchorSideRight.Control = gbPresets AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbPresets AnchorSideBottom.Side = asrBottom Left = 228 Height = 35 Top = 2 Width = 16 Anchors = [akTop, akRight, akBottom] AutoSize = True Constraints.MinWidth = 16 ParentBidiMode = False ParentFont = False TabOrder = 0 TabStop = True ShowCaption = False end end end object spltMainSplitter: TSplitter Left = 250 Height = 275 Top = 0 Width = 5 ResizeStyle = rsLine end object pnlOptionsRight: TKASToolPanel Left = 255 Height = 275 Top = 0 Width = 521 Align = alClient AutoSize = True ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 2 EdgeBorders = [ebBottom] TabOrder = 1 object gbFindReplace: TGroupBox AnchorSideLeft.Control = pnlOptionsRight AnchorSideTop.Control = pnlOptionsRight AnchorSideRight.Control = gbCounter Left = 0 Height = 184 Top = 0 Width = 318 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Right = 4 Caption = 'Find && Replace' ChildSizing.LeftRightSpacing = 4 ChildSizing.HorizontalSpacing = 2 ChildSizing.VerticalSpacing = 2 ClientHeight = 164 ClientWidth = 316 ParentFont = False TabOrder = 0 object lbFind: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = gbFindReplace Left = 4 Height = 17 Top = 0 Width = 38 Caption = '&Find...' FocusControl = edFind ParentColor = False ParentFont = False end object lbReplace: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = edFind AnchorSideTop.Side = asrBottom Left = 4 Height = 17 Top = 58 Width = 60 BorderSpacing.Top = 4 Caption = 'Re&place...' FocusControl = edReplace ParentColor = False ParentFont = False end object edFind: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbFind AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 35 Top = 19 Width = 308 Anchors = [akTop, akLeft, akRight] AutoSelect = False OnChange = edFindChange ParentFont = False TabOrder = 0 end object edReplace: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbReplace AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 35 Top = 77 Width = 308 Anchors = [akTop, akLeft, akRight] AutoSelect = False OnChange = edReplaceChange ParentFont = False TabOrder = 1 end object pnlFindReplace: TPanel AnchorSideLeft.Control = edReplace AnchorSideTop.Control = edReplace AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 46 Top = 86 Width = 318 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 2 ChildSizing.HorizontalSpacing = 12 ChildSizing.VerticalSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 46 ClientWidth = 318 TabOrder = 2 object cbRegExp: TCheckBox Left = 0 Height = 19 Top = 4 Width = 124 BorderSpacing.Top = 4 Caption = 'Regular e&xpressions' OnChange = cbRegExpChange ParentFont = False TabOrder = 0 end object cbCaseSens: TCheckBox Left = 136 Height = 19 Hint = 'Case sensitive' Top = 4 Width = 42 Caption = 'A≠a' OnChange = cbNameStyleChange TabOrder = 2 end object cbUseSubs: TCheckBox AnchorSideBottom.Side = asrBottom Left = 0 Height = 19 Top = 25 Width = 124 BorderSpacing.Top = 2 Caption = '&Use substitution' Enabled = False OnChange = cbNameStyleChange ParentFont = False TabOrder = 1 end object cbOnlyFirst: TCheckBox Left = 136 Height = 19 Hint = 'Replace only once per file' Top = 25 Width = 42 Caption = '1x' OnChange = cbNameStyleChange TabOrder = 3 end end end object btnEditor: TBitBtn AnchorSideLeft.Control = gbCounter AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbCounter AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFindReplace AnchorSideBottom.Side = asrBottom Left = 322 Height = 35 Top = 149 Width = 199 Action = actInvokeEditor Anchors = [akLeft, akRight, akBottom] AutoSize = True ParentFont = False TabOrder = 2 end object gbCounter: TGroupBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlOptionsRight AnchorSideRight.Control = pnlOptionsRight AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 322 Height = 135 Top = 0 Width = 199 Anchors = [akTop, akRight] AutoSize = True Caption = 'Counter' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 2 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 115 ClientWidth = 197 ParentFont = False TabOrder = 1 object lbStNb: TLabel Left = 4 Height = 17 Top = 11 Width = 85 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'S&tart Number' FocusControl = edPoc ParentColor = False ParentFont = False end object edPoc: TEdit Left = 93 Height = 35 Top = 2 Width = 100 AutoSelect = False MaxLength = 10 OnChange = edPocChange ParentFont = False TabOrder = 0 Text = '1' end object lbInterval: TLabel Left = 4 Height = 17 Top = 50 Width = 85 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Interval' FocusControl = edInterval ParentColor = False ParentFont = False end object edInterval: TEdit Left = 93 Height = 35 Top = 41 Width = 100 AutoSelect = False MaxLength = 10 OnChange = edIntervalChange ParentFont = False TabOrder = 1 Text = '1' end object lbWidth: TLabel Left = 4 Height = 17 Top = 87 Width = 85 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Width' FocusControl = cmbxWidth ParentColor = False ParentFont = False end object cmbxWidth: TComboBox Left = 93 Height = 31 Top = 80 Width = 100 BorderSpacing.Bottom = 4 ItemHeight = 0 ItemIndex = 0 Items.Strings = ( '01' '02' '03' '04' '05' '06' '07' '08' '09' '10' ) OnChange = cbNameStyleChange ParentFont = False Style = csDropDownList TabOrder = 2 Text = '01' end end object cbLog: TCheckBox AnchorSideLeft.Control = fneRenameLogFileFilename AnchorSideTop.Control = cbLogAppend AnchorSideTop.Side = asrCenter Left = 5 Height = 23 Top = 190 Width = 87 BorderSpacing.Top = 2 Caption = '&Log result' OnClick = cbLogClick ParentFont = False TabOrder = 3 end object btnRelativeRenameLogFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneRenameLogFileFilename AnchorSideRight.Control = btnViewRenameLogFile AnchorSideBottom.Control = fneRenameLogFileFilename AnchorSideBottom.Side = asrBottom Left = 473 Height = 35 Top = 215 Width = 23 Anchors = [akTop, akRight, akBottom] ParentFont = False end object btnViewRenameLogFile: TSpeedButton AnchorSideTop.Control = fneRenameLogFileFilename AnchorSideRight.Control = pnlOptionsRight AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneRenameLogFileFilename AnchorSideBottom.Side = asrBottom Left = 498 Height = 35 Top = 215 Width = 23 Anchors = [akTop, akRight, akBottom] ParentFont = False end object fneRenameLogFileFilename: TFileNameEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = cbLog AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeRenameLogFile AnchorSideBottom.Side = asrBottom Left = 5 Height = 35 Top = 215 Width = 466 DialogTitle = 'Select target log filename' DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 MaxLength = 0 ParentFont = False TabOrder = 5 OnChange = cbNameStyleChange end object cbLogAppend: TCheckBox AnchorSideLeft.Control = cbLog AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindReplace AnchorSideTop.Side = asrBottom Left = 102 Height = 23 Top = 190 Width = 75 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Append' OnClick = cbLogClick ParentFont = False TabOrder = 4 end end end object pnlButtons: TPanel Left = 0 Height = 43 Top = 554 Width = 788 Align = alBottom AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 4 ClientHeight = 43 ClientWidth = 788 TabOrder = 1 object btnClose: TBitBtn AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 702 Height = 35 Top = 4 Width = 80 Action = actClose Anchors = [akTop, akRight] AutoSize = True Constraints.MinWidth = 80 ParentFont = False TabOrder = 3 end object btnRestore: TBitBtn AnchorSideLeft.Control = btnConfig AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnClose AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 132 Height = 35 Top = 4 Width = 100 Action = actResetAll AutoSize = True BorderSpacing.Left = 6 Constraints.MinWidth = 100 ParentFont = False TabOrder = 1 end object btnRename: TBitBtn AnchorSideTop.Control = btnClose AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnClose Left = 629 Height = 35 Top = 4 Width = 67 Action = actRename Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 Default = True ParentFont = False TabOrder = 2 end object btnConfig: TBitBtn AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnRename AnchorSideTop.Side = asrCenter Left = 6 Height = 35 Top = 4 Width = 120 Action = actConfig AutoSize = True Constraints.MinWidth = 120 ParentFont = False TabOrder = 0 end end object pmEditDirect: TPopupMenu Images = dmComData.ilEditorImages Left = 504 Top = 160 object mnuLoadFromFile: TMenuItem Action = actLoadNamesFromFile end object mnuEditNames: TMenuItem Action = actEditNames end object mnuEditNewNames: TMenuItem Action = actEditNewNames end end object mmMainMenu: TMainMenu Images = dmComData.ilEditorImages Left = 96 Top = 40 object miActions: TMenuItem Caption = 'Actions' object miResetAll: TMenuItem Action = actResetAll end object miEditor: TMenuItem Caption = 'Editor' object miLoadNamesFromFile: TMenuItem Action = actLoadNamesFromFile end object miEditNames: TMenuItem Action = actEditNames end object miEditNewNames: TMenuItem Action = actEditNewNames end end object miSeparator1: TMenuItem Caption = '-' end object miConfiguration: TMenuItem Action = actConfig end object miSeparator2: TMenuItem Caption = '-' end object miRename: TMenuItem Action = actRename end object miClose: TMenuItem Action = actClose end end end object actList: TActionList Images = dmComData.ilEditorImages Left = 360 Top = 96 object actAnyNameMask: TAction Tag = 63 Category = 'Masks' Caption = 'Filename' ImageIndex = 20 OnExecute = actExecute end object actNameNameMask: TAction Tag = 1 Category = 'Masks' Caption = 'Filename' ImageIndex = 20 OnExecute = actExecute end object actExtNameMask: TAction Tag = 2 Category = 'Masks' Caption = 'Extension' ImageIndex = 21 OnExecute = actExecute end object actCtrNameMask: TAction Tag = 4 Category = 'Masks' Caption = 'Counter' ImageIndex = 22 OnExecute = actExecute end object actDateNameMask: TAction Tag = 8 Category = 'Masks' Caption = 'Date' ImageIndex = 23 OnExecute = actExecute end object actTimeNameMask: TAction Tag = 16 Category = 'Masks' Caption = 'Time' ImageIndex = 24 OnExecute = actExecute end object actPlgnNameMask: TAction Tag = 32 Category = 'Masks' Caption = 'Plugins' ImageIndex = 25 OnExecute = actExecute end object actResetAll: TAction Category = 'Generic' Caption = 'Reset &All' ImageIndex = 17 OnExecute = actExecute end object actClearNameMask: TAction Category = 'Masks' Caption = 'Clear' ImageIndex = 29 OnExecute = actExecute end object actAnyExtMask: TAction Category = 'Masks' Caption = 'Extension' ImageIndex = 21 OnExecute = actExecute end object actNameExtMask: TAction Category = 'Masks' Caption = 'Filename' ImageIndex = 20 OnExecute = actExecute end object actExtExtMask: TAction Category = 'Masks' Caption = 'Extension' ImageIndex = 21 OnExecute = actExecute end object actCtrExtMask: TAction Category = 'Masks' Caption = 'Counter' ImageIndex = 22 OnExecute = actExecute end object actDateExtMask: TAction Category = 'Masks' Caption = 'Date' ImageIndex = 23 OnExecute = actExecute end object actTimeExtMask: TAction Category = 'Masks' Caption = 'Time' ImageIndex = 24 OnExecute = actExecute end object actPlgnExtMask: TAction Category = 'Masks' Caption = 'Plugins' ImageIndex = 25 OnExecute = actExecute end object actClearExtMask: TAction Category = 'Masks' Caption = 'Clear' ImageIndex = 29 OnExecute = actExecute end object actInvokeEditor: TAction Category = 'Generic' Caption = 'Edit&or' ImageIndex = 19 OnExecute = actExecute end object actViewRenameLogFile: TAction Category = 'Log' Caption = 'View Rename Log File' ImageIndex = 26 OnExecute = actExecute end object actInvokeRelativePath: TAction Category = 'Log' Caption = 'Invoke Relative Path Menu' ImageIndex = 27 OnExecute = actInvokeRelativePathExecute end object actLoadNamesFromFile: TAction Category = 'Generic' Caption = 'Load Names from File...' OnExecute = actExecute end object actLoadNamesFromClipboard: TAction Category = 'Generic' Caption = 'Load Names from Clipboard' OnExecute = actExecute end object actEditNames: TAction Category = 'Generic' Caption = 'Edit Names...' OnExecute = actExecute end object actEditNewNames: TAction Category = 'Generic' Caption = 'Edit Current New Names...' OnExecute = actExecute end object actShowPresetsMenu: TAction Category = 'Presets' Caption = 'Show Preset Menu' ImageIndex = 30 OnExecute = actExecute end object actDropDownPresetList: TAction Category = 'Presets' Caption = 'Drop Down Presets List' ImageIndex = 33 OnExecute = actExecute end object actLoadLastPreset: TAction Category = 'Presets' Caption = 'Load Last Preset' OnExecute = actExecute end object actLoadPreset: TAction Category = 'Presets' Caption = 'Load Preset by Name or Index' OnExecute = actExecute end object actLoadPreset1: TAction Category = 'Presets' Caption = 'Load Preset 1' OnExecute = actExecute end object actLoadPreset2: TAction Category = 'Presets' Caption = 'Load Preset 2' OnExecute = actExecute end object actLoadPreset3: TAction Category = 'Presets' Caption = 'Load Preset 3' OnExecute = actExecute end object actLoadPreset4: TAction Category = 'Presets' Caption = 'Load Preset 4' OnExecute = actExecute end object actLoadPreset5: TAction Category = 'Presets' Caption = 'Load Preset 5' OnExecute = actExecute end object actLoadPreset6: TAction Category = 'Presets' Caption = 'Load Preset 6' OnExecute = actExecute end object actLoadPreset7: TAction Category = 'Presets' Caption = 'Load Preset 7' OnExecute = actExecute end object actLoadPreset8: TAction Category = 'Presets' Caption = 'Load Preset 8' OnExecute = actExecute end object actLoadPreset9: TAction Category = 'Presets' Caption = 'Load Preset 9' OnExecute = actExecute end object actSavePreset: TAction Category = 'Presets' Caption = 'Save' ImageIndex = 31 OnExecute = actExecute end object actSavePresetAs: TAction Category = 'Presets' Caption = 'Save As...' OnExecute = actExecute end object actRenamePreset: TAction Category = 'Presets' Caption = 'Rename' OnExecute = actExecute end object actDeletePreset: TAction Category = 'Presets' Caption = 'Delete' ImageIndex = 32 OnExecute = actExecute end object actSortPresets: TAction Category = 'Presets' Caption = 'Sort' OnExecute = actExecute end object actConfig: TAction Category = 'Generic' Caption = 'Confi&guration' ImageIndex = 18 OnExecute = actExecute end object actRename: TAction Category = 'Generic' Caption = '&Rename' ImageIndex = 28 OnExecute = actExecute end object actClose: TAction Category = 'Generic' Caption = '&Close' ImageIndex = 12 OnExecute = actExecute end end object pmDynamicMasks: TPopupMenu Images = dmComData.ilEditorImages Left = 96 Top = 152 end object pmPresets: TPopupMenu Images = dmComData.ilEditorImages Left = 120 Top = 376 end object pmFloatingMainMaskMenu: TPopupMenu Images = dmComData.ilEditorImages Left = 96 Top = 96 end object pmPathToBeRelativeToHelper: TPopupMenu Left = 648 Top = 160 end enddoublecmd-1.1.30/src/fmodview.pas0000644000175000001440000001437015104114162015706 0ustar alexxusersunit fModView; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ButtonPanel, Spin, uOSForms; type { TfrmModView } TfrmModView = class(TModalForm) btnPath1: TSpeedButton; btnPath2: TSpeedButton; btnPath3: TSpeedButton; btnPath4: TSpeedButton; btnPath5: TSpeedButton; btnProportion: TSpeedButton; bplButtons: TButtonPanel; ImageList: TImageList; lblHeight: TLabel; lblPath1: TLabel; lblPath2: TLabel; lblPath3: TLabel; lblPath4: TLabel; lblPath5: TLabel; lblQuality: TLabel; lblWidth: TLabel; pnlMain: TPanel; pnlCopyMoveFile: TPanel; pnlQuality: TPanel; pnlSize: TPanel; rbPath1: TRadioButton; rbPath2: TRadioButton; rbPath3: TRadioButton; rbPath4: TRadioButton; rbPath5: TRadioButton; sddCopyMoveFile: TSelectDirectoryDialog; tbQuality: TTrackBar; teHeight: TEdit; tePath1: TEdit; tePath2: TEdit; tePath3: TEdit; tePath4: TEdit; tePath5: TEdit; teQuality: TSpinEdit; teWidth: TEdit; procedure btnCancelClick(Sender: TObject); procedure btnOkClick(Sender: TObject); procedure btnPathClick(Sender: TObject); procedure btnProportionClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: char); procedure FormShow(Sender: TObject); procedure tbQualityChange(Sender: TObject); procedure teHeightKeyPress(Sender: TObject; var Key: char); procedure teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure teQualityChange(Sender: TObject); procedure teWidthKeyPress(Sender: TObject; var Key: char); procedure teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } prX, prY: integer; public Path : string; { public declarations } end; implementation {$R *.lfm} uses uGlobs; procedure TfrmModView.btnProportionClick(Sender: TObject); begin if btnProportion.Down then ImageList.GetBitmap(0, btnProportion.Glyph) else begin ImageList.GetBitmap(1, btnProportion.Glyph); end; end; procedure TfrmModView.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin gCopyMovePath1 := tePath1.Text; gCopyMovePath2 := tePath2.Text; gCopyMovePath3 := tePath3.Text; gCopyMovePath4 := tePath4.Text; gCopyMovePath5 := tePath5.Text; end; procedure TfrmModView.FormCreate(Sender: TObject); begin ImageList.GetBitmap(0, btnProportion.Glyph); end; procedure TfrmModView.FormKeyPress(Sender: TObject; var Key: char); begin if pnlCopyMoveFile.Visible then begin rbPath1.Checked:= false; rbPath2.Checked:= false; rbPath3.Checked:= false; rbPath4.Checked:= false; rbPath5.Checked:= false; case Key of '1': begin rbPath1.Checked:= true; Key := #0; btnOkClick(Sender); end; '2': begin rbPath2.Checked:= true; Key := #0; btnOkClick(Sender); end; '3': begin rbPath3.Checked:= true; Key := #0; btnOkClick(Sender); end; '4': begin rbPath4.Checked:= true; Key := #0; btnOkClick(Sender); end; '5': begin rbPath5.Checked:= true; Key := #0; btnOkClick(Sender); end; end; end; end; procedure TfrmModView.FormShow(Sender: TObject); begin if pnlSize.Visible then begin prX:=StrToInt(teWidth.Text); prY:=StrToInt(teHeight.Text); end; if pnlCopyMoveFile.Visible then begin rbPath1.SetFocus; tePath1.Text := gCopyMovePath1; tePath2.Text := gCopyMovePath2; tePath3.Text := gCopyMovePath3; tePath4.Text := gCopyMovePath4; tePath5.Text := gCopyMovePath5; end; if pnlQuality.Visible then begin tbQuality.Enabled:=true; lblQuality.Enabled:=True; tbQuality.Position:=gViewerJpegQuality; teQuality.Value:= gViewerJpegQuality; end; end; procedure TfrmModView.tbQualityChange(Sender: TObject); begin teQuality.Value:= tbQuality.Position; end; procedure TfrmModView.btnOkClick(Sender: TObject); begin if pnlCopyMoveFile.Visible then begin if rbPath1.Checked then Path:=tePath1.Text; if rbPath2.Checked then Path:=tePath2.Text; if rbPath3.Checked then Path:=tePath3.Text; if rbPath4.Checked then Path:=tePath4.Text; if rbPath5.Checked then Path:=tePath5.Text; end; ModalResult:= mrOk; end; procedure TfrmModView.btnPathClick(Sender: TObject); begin if sddCopyMoveFile.Execute then begin if sender=btnPath1 then begin tePath1.Text:= sddCopyMoveFile.Filename; rbPath1.Checked:=true; end; if sender=btnPath2 then begin tePath2.Text:= sddCopyMoveFile.Filename; rbPath2.Checked:=true; end; if sender=btnPath3 then begin tePath3.Text:= sddCopyMoveFile.Filename; rbPath3.Checked:=true; end; if sender=btnPath4 then begin tePath4.Text:= sddCopyMoveFile.Filename; rbPath4.Checked:=true; end; if sender=btnPath5 then begin tePath5.Text:= sddCopyMoveFile.Filename; rbPath5.Checked:=true; end; end; end; procedure TfrmModView.btnCancelClick(Sender: TObject); begin ModalResult:= mrCancel; end; procedure TfrmModView.teHeightKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if btnProportion.Down then begin teWidth.Text := IntToStr(Round(StrToInt(teHeight.Text) * prX / prY)); end; end; procedure TfrmModView.teQualityChange(Sender: TObject); begin tbQuality.Position:= teQuality.Value; end; procedure TfrmModView.teWidthKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if btnProportion.Down then begin teHeight.Text := IntToStr(Round(StrToInt(teWidth.Text) * prY / prX)); end; end; end. doublecmd-1.1.30/src/fmodview.lrj0000644000175000001440000000323715104114162015712 0ustar alexxusers{"version":1,"strings":[ {"hash":211134021,"name":"tfrmmodview.caption","sourcebytes":[78,101,119,32,83,105,122,101],"value":"New Size"}, {"hash":12558,"name":"tfrmmodview.btnpath1.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":12558,"name":"tfrmmodview.btnpath2.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":12558,"name":"tfrmmodview.btnpath3.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":12558,"name":"tfrmmodview.btnpath4.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":12558,"name":"tfrmmodview.btnpath5.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":49,"name":"tfrmmodview.lblpath1.caption","sourcebytes":[49],"value":"1"}, {"hash":50,"name":"tfrmmodview.lblpath2.caption","sourcebytes":[50],"value":"2"}, {"hash":51,"name":"tfrmmodview.lblpath3.caption","sourcebytes":[51],"value":"3"}, {"hash":52,"name":"tfrmmodview.lblpath4.caption","sourcebytes":[52],"value":"4"}, {"hash":53,"name":"tfrmmodview.lblpath5.caption","sourcebytes":[53],"value":"5"}, {"hash":201192154,"name":"tfrmmodview.lblheight.caption","sourcebytes":[72,101,105,103,104,116,32,58],"value":"Height :"}, {"hash":234596970,"name":"tfrmmodview.lblwidth.caption","sourcebytes":[87,105,100,116,104,32,58],"value":"Width :"}, {"hash":6159272,"name":"tfrmmodview.tewidth.text","sourcebytes":[87,105,100,116,104],"value":"Width"}, {"hash":82574836,"name":"tfrmmodview.teheight.text","sourcebytes":[72,101,105,103,104,116],"value":"Height"}, {"hash":219345735,"name":"tfrmmodview.lblquality.caption","sourcebytes":[81,117,97,108,105,116,121,32,111,102,32,99,111,109,112,114,101,115,115,32,116,111,32,74,112,103],"value":"Quality of compress to Jpg"} ]} doublecmd-1.1.30/src/fmodview.lfm0000644000175000001440000003314115104114162015676 0ustar alexxusersobject frmModView: TfrmModView Left = 395 Height = 319 Top = 104 Width = 488 AutoSize = True BorderIcons = [biSystemMenu] Caption = 'New Size' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 319 ClientWidth = 488 OnClose = FormClose OnCreate = FormCreate OnKeyPress = FormKeyPress OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '2.2.6.0' object bplButtons: TButtonPanel Left = 10 Height = 34 Top = 279 Width = 468 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True OKButton.OnClick = btnOkClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True CancelButton.OnClick = btnCancelClick TabOrder = 0 ShowButtons = [pbOK, pbCancel] end object pnlMain: TPanel Left = 10 Height = 267 Top = 6 Width = 468 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 267 ClientWidth = 468 TabOrder = 1 object pnlQuality: TPanel AnchorSideRight.Control = pnlSize AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 273 ClientWidth = 468 TabOrder = 2 object tbQuality: TTrackBar AnchorSideTop.Control = lblQuality AnchorSideTop.Side = asrBottom Left = 0 Height = 22 Top = 71 Width = 140 Max = 100 Min = 1 OnChange = tbQualityChange Position = 80 BorderSpacing.Top = 12 TabOrder = 0 end object lblQuality: TLabel Left = 32 Height = 15 Top = 47 Width = 141 Caption = 'Quality of compress to Jpg' Enabled = False ParentColor = False end object teQuality: TSpinEdit AnchorSideTop.Control = tbQuality AnchorSideTop.Side = asrCenter Left = 144 Height = 36 Top = 38 Width = 75 MaxValue = 100 MinValue = 1 OnChange = teQualityChange TabOrder = 1 Value = 1 end end object pnlCopyMoveFile: TPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 273 ClientWidth = 468 Constraints.MinWidth = 300 TabOrder = 0 object tePath1: TEdit AnchorSideLeft.Control = rbPath1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlCopyMoveFile AnchorSideRight.Control = btnPath1 Left = 38 Height = 23 Top = 5 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 5 BorderSpacing.Right = 6 TabOrder = 0 end object tePath2: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 38 Height = 23 Top = 34 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object tePath3: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom Left = 38 Height = 23 Top = 63 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 2 end object btnPath1: TSpeedButton AnchorSideTop.Control = tePath1 AnchorSideRight.Control = pnlCopyMoveFile AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath1 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 5 Width = 21 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 5 Caption = '...' OnClick = btnPathClick end object tePath4: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath3 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom Left = 38 Height = 23 Top = 92 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 3 end object tePath5: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath4 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 38 Height = 23 Top = 121 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 10 TabOrder = 4 end object rbPath1: TRadioButton AnchorSideTop.Control = tePath1 AnchorSideBottom.Control = tePath1 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 5 Width = 20 Anchors = [akTop, akLeft, akBottom] Checked = True OnKeyPress = FormKeyPress ParentBidiMode = False TabOrder = 5 TabStop = True end object rbPath2: TRadioButton AnchorSideTop.Control = tePath2 AnchorSideBottom.Control = tePath2 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 34 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 6 end object rbPath3: TRadioButton AnchorSideTop.Control = tePath3 AnchorSideBottom.Control = tePath3 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 63 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 7 end object rbPath4: TRadioButton AnchorSideTop.Control = tePath4 AnchorSideBottom.Control = tePath4 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 92 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 8 end object rbPath5: TRadioButton AnchorSideTop.Control = tePath5 AnchorSideBottom.Control = tePath5 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 121 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 9 end object btnPath2: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath2 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath2 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 34 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath3: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath3 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath3 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 63 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath4: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath4 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath4 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 92 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath5: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath5 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath5 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 121 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object lblPath1: TLabel AnchorSideTop.Control = rbPath1 AnchorSideBottom.Control = rbPath1 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 6 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 5 BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '1' ParentColor = False end object lblPath2: TLabel AnchorSideTop.Control = rbPath2 AnchorSideBottom.Control = rbPath2 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 35 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '2' ParentColor = False end object lblPath3: TLabel AnchorSideTop.Control = rbPath3 AnchorSideBottom.Control = rbPath3 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 64 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '3' ParentColor = False end object lblPath4: TLabel AnchorSideTop.Control = rbPath4 AnchorSideBottom.Control = rbPath4 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 93 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '4' ParentColor = False end object lblPath5: TLabel AnchorSideTop.Control = rbPath5 AnchorSideBottom.Control = rbPath5 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 122 Width = 6 Alignment = taCenter Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '5' ParentColor = False end end object pnlSize: TPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ClientHeight = 273 ClientWidth = 468 TabOrder = 1 object lblHeight: TLabel AnchorSideTop.Control = teHeight AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 31 Width = 42 Caption = 'Height :' ParentColor = False end object lblWidth: TLabel AnchorSideTop.Control = teWidth AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 4 Width = 38 Caption = 'Width :' ParentColor = False end object teWidth: TEdit AnchorSideLeft.Control = lblWidth AnchorSideLeft.Side = asrBottom Left = 54 Height = 23 Top = 0 Width = 82 BorderSpacing.Left = 10 OnKeyPress = teWidthKeyPress OnKeyUp = teWidthKeyUp TabOrder = 0 Text = 'Width' end object teHeight: TEdit AnchorSideLeft.Control = teWidth AnchorSideTop.Control = teWidth AnchorSideTop.Side = asrBottom Left = 54 Height = 23 Top = 27 Width = 82 BorderSpacing.Top = 4 OnKeyPress = teHeightKeyPress OnKeyUp = teHeightKeyUp TabOrder = 1 Text = 'Height' end object btnProportion: TSpeedButton AnchorSideLeft.Control = teWidth AnchorSideLeft.Side = asrBottom Left = 142 Height = 32 Top = 8 Width = 26 AllowAllUp = True BorderSpacing.Left = 6 Down = True GroupIndex = 1 OnClick = btnProportionClick end end end object sddCopyMoveFile: TSelectDirectoryDialog Left = 288 Top = 40 end object ImageList: TImageList Height = 24 Width = 9 Left = 288 Top = 112 Bitmap = { 4C7A020000000900000018000000D70000000000000078DA6360A01E080E0F0D 03E2FF587018929AFF7DBDBDFF5FBE7801C713FAFAC0EA90D580C491CD80F171 A86120A4061B9F1C35AD5D1D38DD33B1BFFFBF9989DEFF37EFDE81D581F8686A 5C407C6435E8E10303C86A7085373E3578EC724176F3CC193350D44C9F3A15A7 DF41EAE815CEC4A8C19736E6CD9D8B92C676EDDC896C2E5169154F3A1F12F902 48335023EF10A386D6F902E406A03E06347350E202EA4E901A06A01A06A01AB8 1896BC035783277FE154438C5D2036307F31A0E52F743583369F1213EFD8D218 BA3E72F3293179070068D29CC0 } end end doublecmd-1.1.30/src/fmkdir.pas0000644000175000001440000000700015104114162015332 0ustar alexxusersunit fMkDir; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, ButtonPanel; type { TfrmMkDir } TfrmMkDir = class(TForm) pnlMkDir: TPanel; ButtonPanel: TButtonPanel; cbExtended: TCheckBox; cbMkDir: TComboBox; lblExample: TLabel; lblMakeDir: TLabel; btnAutoComplete: TSpeedButton; procedure cbExtendedChange(Sender: TObject); procedure cbMkDirChange(Sender: TObject); procedure cbMkDirKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btnAutoCompleteClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RefreshExample; public end; function ShowMkDir(TheOwner: TComponent; var sPath: String): Boolean; implementation {$R *.lfm} uses DCStrUtils, uGlobs; function sReplace(sMask: string): string; var iStart, iEnd: integer; begin Result := ''; while Length(sMask) > 0 do begin iStart := Pos('[', sMask); if iStart > 0 then begin iEnd := Pos(']', sMask); if iEnd > iStart then begin Result := Result + Copy(sMask, 1, iStart - 1) + FormatDateTime(Copy(sMask, iStart + 1, iEnd - iStart - 1), Now); Delete(sMask, 1, iEnd); end else Break; end else Break; end; Result := Result + sMask; end; procedure TfrmMkDir.RefreshExample; var sPath: String; begin if not cbExtended.Checked then lblExample.Caption:= ' ' else begin sPath:= TrimPath(cbMkDir.Text); if StrBegins(sPath, '<') then lblExample.Caption:= sReplace(Copy(sPath, 2, MaxInt)) else lblExample.Caption:= ' ' end; end; procedure TfrmMkDir.cbMkDirKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin RefreshExample; end; procedure TfrmMkDir.btnAutoCompleteClick(Sender: TObject); begin cbMkDir.AutoComplete:= btnAutoComplete.Down; end; procedure TfrmMkDir.FormCreate(Sender: TObject); begin InitPropStorage(Self).IniSection:= ClassName; end; procedure TfrmMkDir.cbExtendedChange(Sender: TObject); begin RefreshExample; end; procedure TfrmMkDir.cbMkDirChange(Sender: TObject); var Index: Integer; begin Index:= cbMkDir.ItemIndex; if (Index >= 0) then begin cbExtended.Checked:= Boolean(UIntPtr(cbMkDir.Items.Objects[Index])); end; end; function ShowMkDir(TheOwner: TComponent; var sPath: String): Boolean; const MAX_LINES = 20; var Index: Integer; Syntax: TObject; begin with TfrmMkDir.Create(TheOwner) do try ActiveControl := cbMkDir; cbMkDir.Items.Assign(glsCreateDirectoriesHistory); if (sPath <> '..') then cbMkDir.Text := sPath else begin cbMkDir.Text := ''; end; RefreshExample; cbMkDir.SelectAll; Result := (ShowModal = mrOK); if Result then begin sPath := TrimPath(cbMkDir.Text); Syntax := TObject(UIntPtr(cbExtended.Checked)); glsCreateDirectoriesHistory.CaseSensitive := FileNameCaseSensitive; Index := glsCreateDirectoriesHistory.IndexOf(sPath); if (Index = -1) then glsCreateDirectoriesHistory.InsertObject(0, sPath, Syntax) else begin glsCreateDirectoriesHistory.Move(Index, 0); glsCreateDirectoriesHistory.Objects[0]:= Syntax; end; if (glsCreateDirectoriesHistory.Count > MAX_LINES) then glsCreateDirectoriesHistory.Delete(glsCreateDirectoriesHistory.Count - 1); if cbExtended.Checked and StrBegins(sPath, '<') then begin sPath := lblExample.Caption; end; end; finally Free; end; end; end. doublecmd-1.1.30/src/fmkdir.lrj0000644000175000001440000000107015104114162015337 0ustar alexxusers{"version":1,"strings":[ {"hash":80444489,"name":"tfrmmkdir.caption","sourcebytes":[67,114,101,97,116,101,32,110,101,119,32,100,105,114,101,99,116,111,114,121],"value":"Create new directory"}, {"hash":122714874,"name":"tfrmmkdir.lblmakedir.caption","sourcebytes":[38,73,110,112,117,116,32,110,101,119,32,100,105,114,101,99,116,111,114,121,32,110,97,109,101,58],"value":"&Input new directory name:"}, {"hash":225074456,"name":"tfrmmkdir.cbextended.caption","sourcebytes":[38,69,120,116,101,110,100,101,100,32,115,121,110,116,97,120],"value":"&Extended syntax"} ]} doublecmd-1.1.30/src/fmkdir.lfm0000644000175000001440000001271715104114162015340 0ustar alexxusersobject frmMkDir: TfrmMkDir Left = 366 Height = 125 Top = 429 Width = 350 ActiveControl = cbMkDir AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create new directory' ClientHeight = 125 ClientWidth = 350 Constraints.MinHeight = 50 Constraints.MinWidth = 350 KeyPreview = True OnCreate = FormCreate Position = poOwnerFormCenter SessionProperties = 'cbMkDir.AutoComplete;btnAutoComplete.Down' LCLVersion = '3.5.0.0' object lblMakeDir: TLabel Left = 6 Height = 15 Top = 6 Width = 338 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = '&Input new directory name:' FocusControl = cbMkDir ParentColor = False end object pnlMkDir: TPanel Left = 6 Height = 23 Top = 28 Width = 338 Align = alTop AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 23 ClientWidth = 338 TabOrder = 0 object cbMkDir: TComboBox AnchorSideLeft.Control = pnlMkDir AnchorSideTop.Control = pnlMkDir AnchorSideRight.Control = btnAutoComplete Left = 0 Height = 23 Top = 0 Width = 313 Anchors = [akTop, akLeft, akRight] AutoCompleteText = [cbactEndOfLineComplete, cbactRetainPrefixCase, cbactSearchAscending] BorderSpacing.Right = 2 DropDownCount = 16 ItemHeight = 15 TabOrder = 0 OnChange = cbMkDirChange OnKeyUp = cbMkDirKeyUp end object btnAutoComplete: TSpeedButton AnchorSideTop.Control = cbMkDir AnchorSideRight.Control = pnlMkDir AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbMkDir AnchorSideBottom.Side = asrBottom Left = 315 Height = 23 Top = 0 Width = 23 AllowAllUp = True Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000CCFF0000CC550000CCFF00000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000DD9F64FFD8965CFFD39054FFCD884BFFC98043FFC3783CFFBE7133FFBA6B 2BFFB56324FF00000000000000000000CCFF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000CCFF0000CC550000CCFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } GroupIndex = 1 OnClick = btnAutoCompleteClick end end object cbExtended: TCheckBox Left = 6 Height = 18 Top = 54 Width = 338 Align = alTop Anchors = [akLeft] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = '&Extended syntax' TabOrder = 1 OnChange = cbExtendedChange end object lblExample: TLabel Left = 6 Height = 1 Top = 78 Width = 338 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 end object ButtonPanel: TButtonPanel Left = 6 Height = 27 Top = 91 Width = 338 Align = alTop BorderSpacing.Top = 6 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True ButtonOrder = boCloseOKCancel TabOrder = 2 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-1.1.30/src/fmaskinputdlg.pas0000644000175000001440000001577015104114162016743 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File mask input dialog Copyright (C) 2010-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fMaskInputDlg; {$mode objfpc}{$H+} interface uses Classes, Forms, Controls, StdCtrls, Buttons; type { TMaskInputDlgStyle } TMaskInputDlgStyle = (midsLegacy, midsFull); { TfrmMaskInputDlg } TfrmMaskInputDlg = class(TForm) btnDefineTemplate: TBitBtn; chkIgnoreAccentsAndLigatures: TCheckBox; chkCaseSensitive: TCheckBox; lblPrompt: TLabel; lblSearchTemplate: TLabel; cmbMask: TComboBox; btnOK: TBitBtn; btnCancel: TBitBtn; lbxSearchTemplate: TListBox; lblAttributes: TLabel; edtAttrib: TEdit; btnAddAttribute: TButton; btnAttrsHelp: TButton; procedure btnDefineTemplateClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lbxSearchTemplateClick(Sender: TObject); procedure lbxSearchTemplateDblClick(Sender: TObject); procedure btnAddAttributeClick(Sender: TObject); procedure btnAttrsHelpClick(Sender: TObject); private { private declarations } procedure OnAddAttribute(Sender: TObject); public { public declarations } end; function ShowMaskInputDlg(const sCaption, sPrompt: string; slValueList: TStringList; var sValue: string): boolean; function ShowExtendedMaskInputDlg(const sCaption, sPrompt: string; slValueList: TStringList; var sValue: string; AMaskInputDlgStyle: TMaskInputDlgStyle; var bCaseSensitive: boolean; var bIgnoreAccents: boolean; var sAttribute:string): boolean; implementation {$R *.lfm} uses HelpIntfs, fAttributesEdit, fFindDlg, uGlobs, uSearchTemplate; { ShowMaskInputDlg } function ShowMaskInputDlg(const sCaption, sPrompt: string; slValueList: TStringList; var sValue: string): boolean; var dummybCaseSensitive: boolean = False; dummybIgnoreAccents: boolean = False; dummysAttribute: string = ''; begin Result := ShowExtendedMaskInputDlg(sCaption, sPrompt, slValueList, sValue, midsLegacy, dummybCaseSensitive, dummybIgnoreAccents, dummysAttribute); end; { ShowExtendedMaskInputDlg } function ShowExtendedMaskInputDlg(const sCaption, sPrompt: string; slValueList: TStringList; var sValue: string; AMaskInputDlgStyle: TMaskInputDlgStyle; var bCaseSensitive: boolean; var bIgnoreAccents: boolean; var sAttribute:string): boolean; var Index, iCurrentPos: integer; begin Result := False; with TfrmMaskInputDlg.Create(Application) do try Caption := sCaption; lblPrompt.Caption := sPrompt; cmbMask.Items.Assign(slValueList); cmbMask.Text := sValue; edtAttrib.Text := sAttribute; case AMaskInputDlgStyle of midsFull: begin chkCaseSensitive.Checked := bCaseSensitive; chkIgnoreAccentsAndLigatures.Checked := bIgnoreAccents; end; midsLegacy: begin chkIgnoreAccentsAndLigatures.Visible := False; chkCaseSensitive.Visible := False; end; end; // Don't show the attribute filter if we're in legacy request mode OR if user request to don't use it. if (AMaskInputDlgStyle=midsLegacy) OR (not gMarkShowWantedAttribute) then begin lblAttributes.Visible := False; btnAddAttribute.Visible := False; btnAttrsHelp.Visible := False; edtAttrib.Visible := False; end; if IsMaskSearchTemplate(sValue) then begin Index := lbxSearchTemplate.Items.IndexOf(PAnsiChar(sValue) + 1); if Index >= 0 then lbxSearchTemplate.ItemIndex := Index; end; if ShowModal = mrOk then begin if not IsMaskSearchTemplate(cmbMask.Text) then begin iCurrentPos := slValueList.IndexOf(cmbMask.Text); if iCurrentPos <> -1 then slValueList.Delete(iCurrentPos); if slValueList.Count = 0 then slValueList.Add(cmbMask.Text) else slValueList.Insert(0, cmbMask.Text); end; sValue := cmbMask.Text; bCaseSensitive := chkCaseSensitive.Checked; bIgnoreAccents := chkIgnoreAccentsAndLigatures.Checked; sAttribute := edtAttrib.Text; Result := True; end; finally Free; end; end; { TfrmMaskInputDlg } procedure TfrmMaskInputDlg.lbxSearchTemplateClick(Sender: TObject); begin if lbxSearchTemplate.ItemIndex < 0 then Exit; cmbMask.Text := cTemplateSign + lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; end; procedure TfrmMaskInputDlg.lbxSearchTemplateDblClick(Sender: TObject); begin if lbxSearchTemplate.ItemIndex < 0 then Exit; cmbMask.Text := cTemplateSign + lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; Close; ModalResult := mrOk; end; procedure TfrmMaskInputDlg.FormCreate(Sender: TObject); var I: integer; begin InitPropStorage(Self); for I := 0 to gSearchTemplateList.Count - 1 do lbxSearchTemplate.Items.Add(gSearchTemplateList.Templates[I].TemplateName); end; procedure TfrmMaskInputDlg.btnDefineTemplateClick(Sender: TObject); var Index: Integer; sTemplateName: String; begin if lbxSearchTemplate.ItemIndex >= 0 then sTemplateName := lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; if ShowDefineTemplateDlg(sTemplateName) then begin Index:= lbxSearchTemplate.Items.IndexOf(sTemplateName); if Index >= 0 then lbxSearchTemplate.ItemIndex := Index else begin lbxSearchTemplate.ItemIndex := lbxSearchTemplate.Items.Add(sTemplateName); end; cmbMask.Text := cTemplateSign + sTemplateName; end; end; procedure TfrmMaskInputDlg.btnAddAttributeClick(Sender: TObject); var FFrmAttributesEdit: TfrmAttributesEdit; begin FFrmAttributesEdit := TfrmAttributesEdit.Create(Self); try FFrmAttributesEdit.OnOk := @OnAddAttribute; FFrmAttributesEdit.Reset; FFrmAttributesEdit.ShowModal; finally FFrmAttributesEdit.Free; end; end; procedure TfrmMaskInputDlg.btnAttrsHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', edtAttrib.HelpKeyword); end; procedure TfrmMaskInputDlg.OnAddAttribute(Sender: TObject); var sAttr: String; begin sAttr := edtAttrib.Text; if edtAttrib.SelStart > 0 then Insert((Sender as TfrmAttributesEdit).AttrsAsText, sAttr, edtAttrib.SelStart + 1) // Insert at caret position. else sAttr := sAttr + (Sender as TfrmAttributesEdit).AttrsAsText; edtAttrib.Text := sAttr; end; end. doublecmd-1.1.30/src/fmaskinputdlg.lrj0000644000175000001440000000307715104114162016744 0ustar alexxusers{"version":1,"strings":[ {"hash":103013930,"name":"tfrmmaskinputdlg.lblprompt.caption","sourcebytes":[73,110,112,117,116,32,77,97,115,107,58],"value":"Input Mask:"}, {"hash":219672053,"name":"tfrmmaskinputdlg.chkcasesensitive.caption","sourcebytes":[67,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"Case sensitive"}, {"hash":76256915,"name":"tfrmmaskinputdlg.chkignoreaccentsandligatures.caption","sourcebytes":[73,103,110,111,114,101,32,97,99,99,101,110,116,115,32,97,110,100,32,108,105,103,97,116,117,114,101,115],"value":"Ignore accents and ligatures"}, {"hash":228881322,"name":"tfrmmaskinputdlg.lblsearchtemplate.caption","sourcebytes":[79,38,114,32,115,101,108,101,99,116,32,112,114,101,100,101,102,105,110,101,100,32,115,101,108,101,99,116,105,111,110,32,116,121,112,101,58],"value":"O&r select predefined selection type:"}, {"hash":218557374,"name":"tfrmmaskinputdlg.btndefinetemplate.caption","sourcebytes":[38,68,101,102,105,110,101,46,46,46],"value":"&Define..."}, {"hash":11067,"name":"tfrmmaskinputdlg.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmmaskinputdlg.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":135730394,"name":"tfrmmaskinputdlg.lblattributes.caption","sourcebytes":[65,116,116,114,105,38,98,117,116,101,115,58],"value":"Attri&butes:"}, {"hash":173988,"name":"tfrmmaskinputdlg.btnaddattribute.caption","sourcebytes":[38,65,100,100],"value":"&Add"}, {"hash":2812976,"name":"tfrmmaskinputdlg.btnattrshelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"} ]} doublecmd-1.1.30/src/fmaskinputdlg.lfm0000644000175000001440000001375615104114162016740 0ustar alexxusersobject frmMaskInputDlg: TfrmMaskInputDlg Left = 458 Height = 300 Top = 396 Width = 331 BorderIcons = [biSystemMenu] ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 300 ClientWidth = 331 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width' LCLVersion = '1.6.0.4' object lblPrompt: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 10 Width = 311 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Caption = 'Input Mask:' ParentColor = False WordWrap = True end object cmbMask: TComboBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 25 Width = 311 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 DropDownCount = 10 ItemHeight = 15 TabOrder = 0 end object chkCaseSensitive: TCheckBox AnchorSideLeft.Control = cmbMask AnchorSideTop.Control = cmbMask AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 50 Width = 93 BorderSpacing.Top = 2 Caption = 'Case sensitive' TabOrder = 1 end object chkIgnoreAccentsAndLigatures: TCheckBox AnchorSideLeft.Control = cmbMask AnchorSideTop.Control = chkCaseSensitive AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 69 Width = 168 Caption = 'Ignore accents and ligatures' TabOrder = 2 end object lblSearchTemplate: TLabel AnchorSideLeft.Control = cmbMask AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 125 Width = 185 BorderSpacing.Top = 10 Caption = 'O&r select predefined selection type:' FocusControl = lbxSearchTemplate ParentColor = False WordWrap = True end object lbxSearchTemplate: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSearchTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnOK Left = 10 Height = 116 Top = 140 Width = 311 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 10 BorderSpacing.Right = 10 ItemHeight = 0 OnClick = lbxSearchTemplateClick OnDblClick = lbxSearchTemplateDblClick ScrollWidth = 317 Sorted = True TabOrder = 6 end object btnDefineTemplate: TBitBtn AnchorSideTop.Control = btnOK AnchorSideRight.Control = btnOK AnchorSideBottom.Control = btnOK AnchorSideBottom.Side = asrBottom Left = 9 Height = 30 Top = 262 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&Define...' Constraints.MinWidth = 100 OnClick = btnDefineTemplateClick TabOrder = 7 end object btnOK: TBitBtn AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 115 Height = 30 Top = 262 Width = 100 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 TabOrder = 8 end object btnCancel: TBitBtn AnchorSideRight.Control = lbxSearchTemplate AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 221 Height = 30 Top = 262 Width = 100 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 9 end object lblAttributes: TLabel AnchorSideLeft.Control = cmbMask AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter Left = 13 Height = 15 Top = 96 Width = 55 BorderSpacing.Left = 3 BorderSpacing.Top = 8 Caption = 'Attri&butes:' FocusControl = edtAttrib ParentColor = False end object edtAttrib: TEdit AnchorSideLeft.Control = lblAttributes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkIgnoreAccentsAndLigatures AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAddAttribute Left = 71 Height = 23 Top = 92 Width = 143 HelpType = htKeyword HelpKeyword = '/findfiles.html#attributes' Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Top = 4 BorderSpacing.Right = 3 ParentShowHint = False ShowHint = True TabOrder = 3 end object btnAddAttribute: TButton AnchorSideLeft.Control = edtAttrib AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAttrsHelp Left = 217 Height = 26 Top = 90 Width = 48 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 3 Caption = '&Add' Constraints.MinHeight = 26 OnClick = btnAddAttributeClick TabOrder = 4 end object btnAttrsHelp: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 268 Height = 27 Top = 90 Width = 53 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 1 Caption = '&Help' Constraints.MinHeight = 26 OnClick = btnAttrsHelpClick TabOrder = 5 end end doublecmd-1.1.30/src/fmaincommandsdlg.pas0000644000175000001440000004257615104114162017402 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Internal Main Commands Selection Dialog Window Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fMainCommandsDlg; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, Menus, ExtCtrls, //DC KASComboBox, uFormCommands, types; type { TfrmMainCommandsDlg } TfrmMainCommandsDlg = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; cbCategorySortOrNot: TComboBoxAutoWidth; cbCommandsSortOrNot: TComboBoxAutoWidth; cbSelectAllCategoryDefault: TCheckBox; gbSelection: TGroupBox; imgCommandIcon: TImage; lblSelectedCommandCategory: TLabel; lblSelectedCommandHotkey: TLabel; lblHotKey: TLabel; lblSelectedCommandHelp: TLabel; lbledtFilter: TLabeledEdit; lblCategory: TLabel; lblCommandName: TLabel; lblHint: TLabel; lbCategory: TListBox; lbCommands: TListBox; lblSelectedCommand: TLabel; lblSelectedCommandHint: TLabel; pnlImage: TPanel; procedure cbCategorySortOrNotChange(Sender: TObject); procedure cbCommandsSortOrNotChange(Sender: TObject); procedure cbSelectAllCategoryDefaultChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure lbCategoryEnter(Sender: TObject); procedure lbCategoryExit(Sender: TObject); procedure lbCategorySelectionChange(Sender: TObject; {%H-}User: boolean); procedure lbCommandsDblClick(Sender: TObject); procedure lbCommandsDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); procedure lbCommandsEnter(Sender: TObject); procedure lbCommandsExit(Sender: TObject); procedure lbCommandsKeyPress(Sender: TObject; var Key: char); procedure lbledtFilterChange(Sender: TObject); procedure AttemptToSetupForThisCommand(CommandToShow: string); procedure lbledtFilterEnter(Sender: TObject); procedure lbledtFilterExit(Sender: TObject); procedure lbledtFilterKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure lblPlaceCaptionInClipClick(Sender: TObject); procedure lblSelectedCommandHelpClick(Sender: TObject); procedure lblSelectedCommandHelpMouseEnter(Sender: TObject); procedure lblSelectedCommandHelpMouseLeave(Sender: TObject); private { Private declarations } FFormCommands: IFormCommands; ListCommands: TStringList; OffsetForHotKey: integer; OffsetForHint: integer; lbCommandsItemHeight: Integer; public { Public declarations } procedure LoadCategoryListbox(CategoryToSelectIfAny: string); procedure LoadCommandsListbox(WantedCommandToSelect: string); end; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowMainCommandDlgForm(DefaultCmd: string; var ReturnedCmd: string): boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Clipbrd, LCLType, Graphics, LazUTF8, LCLIntf, Math, //DC DCStrUtils, dmHelpManager, uLng, uPixMapManager, uGlobs, fMain, uDebug, uClipboard; function ShowMainCommandDlgForm(DefaultCmd: string; var ReturnedCmd: string): boolean; var frmMainCommandsDlg: TfrmMainCommandsDlg; begin ReturnedCmd := ''; frmMainCommandsDlg := TfrmMainCommandsDlg.Create(Application); //Did not use the "with..." here to make absolutely sure of what is referenced in the following. try // Show form frmMainCommandsDlg.AttemptToSetupForThisCommand(DefaultCmd); Result := (frmMainCommandsDlg.ShowModal = mrOk) and (frmMainCommandsDlg.lbCommands.ItemIndex <> -1); if Result then begin ReturnedCmd := frmMainCommandsDlg.lbCommands.Items.Strings[frmMainCommandsDlg.lbCommands.ItemIndex]; if pos('|', ReturnedCmd) <> 0 then ReturnedCmd := leftstr(ReturnedCmd, (pos('|', ReturnedCmd) - 1)); end; finally frmMainCommandsDlg.Free; end; end; { TfrmMainCommandsDlg.FormCreate } procedure TfrmMainCommandsDlg.FormCreate(Sender: TObject); begin ParseLineToList(rsCmdKindOfSort, cbCategorySortOrNot.Items); ParseLineToList(rsCmdKindOfSort, cbCommandsSortOrNot.Items); InitPropStorage(Self); // Initialize property storage FFormCommands := frmMain as IFormCommands; ListCommands := TStringList.Create; end; { TfrmMainCommandsDlg.FormDestroy } procedure TfrmMainCommandsDlg.FormDestroy(Sender: TObject); begin ListCommands.Free; end; { TfrmMainCommandsDlg.lbCategoryEnter } procedure TfrmMainCommandsDlg.lbCategoryEnter(Sender: TObject); begin lblCategory.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbCategoryExit } procedure TfrmMainCommandsDlg.lbCategoryExit(Sender: TObject); begin lblCategory.Font.Style := []; end; { TfrmMainCommandsDlg.lbCategorySelectionChange } procedure TfrmMainCommandsDlg.lbCategorySelectionChange(Sender: TObject; User: boolean); begin LoadCommandsListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.lbCommandsDblClick } procedure TfrmMainCommandsDlg.lbCommandsDblClick(Sender: TObject); begin ModalResult := mrOk; //No need to call "CLOSE", setting the "ModalResult" close the window there. end; { TfrmMainCommandsDlg.lbCommandsDrawItem } procedure TfrmMainCommandsDlg.lbCommandsDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var sCommand: string = ''; sHint: string = ''; sHotKey: string = ''; sCategory: string = ''; FlagCategoryTitle: boolean = False; Bitmap: TBitmap = nil; begin lbCommandsItemHeight := ARect.Height; with Control as TListbox do begin FFormCommands.ExtractCommandFields(Items.Strings[Index], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if FlagCategoryTitle then begin Canvas.Brush.Color := clBtnFace; Canvas.FillRect(ARect); Canvas.Font.Style := [fsItalic, fsBold]; if (odSelected in State) then Canvas.Font.Color := clBlack; Canvas.TextOut(ARect.Left, ARect.Top, ' ' + rsSimpleWordCategory + ': ' + sCommand); //A little offset to the right, it's prettier. end else begin Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left, ARect.Top, sCommand); Canvas.TextOut(ARect.Left + OffsetForHint, ARect.Top, sHint); if not (odSelected in State) then Canvas.Font.Color := clRed; Canvas.TextOut(ARect.Left + OffsetForHotKey, ARect.Top, sHotKey); end; if odSelected in State then begin if not FlagCategoryTitle then begin lblSelectedCommand.Caption := sCommand; if sHotKey <> '' then lblSelectedCommandHotkey.Caption := '(' + sHotKey + ')' else lblSelectedCommandHotkey.Caption := ''; if sCategory <> '' then lblSelectedCommandCategory.Caption := rsSimpleWordCategory + ': ' + sCategory + ' -' else lblSelectedCommandCategory.Caption := ''; lblSelectedCommandHint.Caption := sHint; try Bitmap := PixMapManager.LoadBitmapEnhanced(LowerCase(sCommand), 32, True, clDefault, nil); imgCommandIcon.Picture.Bitmap.Assign(Bitmap); finally Bitmap.Free; end; end else begin lblSelectedCommand.Caption := ''; lblSelectedCommandHotkey.Caption := ''; lblSelectedCommandHint.Caption := ''; lblSelectedCommandCategory.Caption := ''; imgCommandIcon.Picture.Bitmap.Clear; end; end; end; end; { TfrmMainCommandsDlg.lbCommandsEnter } procedure TfrmMainCommandsDlg.lbCommandsEnter(Sender: TObject); begin lblCommandName.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbCommandsExit } procedure TfrmMainCommandsDlg.lbCommandsExit(Sender: TObject); begin lblCommandName.Font.Style := []; end; procedure TfrmMainCommandsDlg.lbCommandsKeyPress(Sender: TObject; var Key: char); begin case Key of #$0D: begin Key := #$00; ModalResult := mrOk; end; #$1B: begin Key := #$00; ModalResult := mrCancel; end; else inherited; end; end; { TfrmMainCommandsDlg.lbledtFilterChange } procedure TfrmMainCommandsDlg.lbledtFilterChange(Sender: TObject); var IndexItem: longint; LastSelectedText: string; begin lblSelectedCommand.Caption := ''; lblSelectedCommandHotkey.Caption := ''; lblSelectedCommandHint.Caption := ''; lblSelectedCommandCategory.Caption := ''; imgCommandIcon.Picture.Bitmap.Clear; if lbCommands.ItemIndex <> -1 then LastSelectedText := lbCommands.Items.Strings[lbCommands.ItemIndex] else LastSelectedText := ''; lbCommands.Items.Clear; for IndexItem := 0 to pred(ListCommands.Count) do begin if (lbledtFilter.Text = '') or (Pos(UTF8LowerCase(lbledtFilter.Text), UTF8LowerCase(ListCommands.Strings[IndexItem])) <> 0) then lbCommands.Items.Add(ListCommands.Strings[IndexItem]); end; if LastSelectedText <> '' then lbCommands.ItemIndex := lbCommands.Items.IndexOf(LastSelectedText); if (lbCommands.ItemIndex = -1) and (lbCommands.Items.Count > 0) then lbCommands.ItemIndex := 0; end; { procedure TfrmMainCommandsDlg.cbCategorySortOrNotChange } procedure TfrmMainCommandsDlg.cbCategorySortOrNotChange(Sender: TObject); begin LoadCategoryListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.cbCommandsSortOrNotChange } procedure TfrmMainCommandsDlg.cbCommandsSortOrNotChange(Sender: TObject); begin LoadCommandsListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.cbSelectAllCategoryDefaultChange } procedure TfrmMainCommandsDlg.cbSelectAllCategoryDefaultChange(Sender: TObject); begin if cbSelectAllCategoryDefault.Checked then if (lbCategory.ItemIndex <> 0) and (lbCategory.Count > 0) then lbCategory.ItemIndex := 0; end; procedure TfrmMainCommandsDlg.FormActivate(Sender: TObject); begin lbCommands.MakeCurrentVisible; //Looks like it's not necessary with Windows, but with Linux it is. lbCategory.MakeCurrentVisible; end; { TfrmMainCommandsDlg.LoadCategoryListbox } procedure TfrmMainCommandsDlg.LoadCategoryListbox(CategoryToSelectIfAny: string); var ListCategory: TStringList; LastCategorySelected: string; begin ListCategory := TStringList.Create; try if lbCategory.ItemIndex <> -1 then LastCategorySelected := lbCategory.Items.Strings[lbCategory.ItemIndex] else LastCategorySelected := ''; FFormCommands.GetCommandCategoriesList(ListCategory, TCommandCategorySortOrder(cbCategorySortOrNot.ItemIndex)); lbCategory.Items.Assign(ListCategory); lbCategory.ItemIndex := lbCategory.Items.IndexOf(CategoryToSelectIfAny); if lbCategory.ItemIndex = -1 then begin if LastCategorySelected <> '' then lbCategory.ItemIndex := lbCategory.Items.IndexOf(LastCategorySelected); if (lbCategory.ItemIndex = -1) and (lbCategory.Items.Count > 0) then lbCategory.ItemIndex := 0; end; finally ListCategory.Free; end; end; { TfrmMainCommandsDlg.LoadCommandsListbox } procedure TfrmMainCommandsDlg.LoadCommandsListbox(WantedCommandToSelect: string); var LastSelectedCommand: string; SearchingIndex, WantedCommandIndex, LastSelectedIndex: longint; sCommand: string = ''; sHint: string = ''; sHotKey: string = ''; sCategory: string; FlagCategoryTitle: boolean = False; LargestCommandName, LargestHotKeyName: longint; begin LastSelectedCommand := ''; if lbCommands.ItemIndex <> -1 then begin FFormCommands.ExtractCommandFields(ListCommands.Strings[lbCommands.ItemIndex], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if not FlagCategoryTitle then LastSelectedCommand := sCommand; end; FFormCommands.GetCommandsListForACommandCategory(ListCommands, lbCategory.Items.Strings[lbCategory.ItemIndex], TCommandSortOrder(cbCommandsSortOrNot.ItemIndex)); LargestCommandName := lblCommandName.Canvas.TextWidth(lblCommandName.Caption); LargestHotKeyName := lblCommandName.Canvas.TextWidth(lblHotKey.Caption); //This way, if the word "hotkey" once translated is longer than a hotkey, label will not be overwritten. WantedCommandIndex := -1; LastSelectedIndex := -1; SearchingIndex := 0; while (SearchingIndex < ListCommands.Count) do begin FFormCommands.ExtractCommandFields(ListCommands.Strings[SearchingIndex], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if not FlagCategoryTitle then begin if lblCommandName.Canvas.TextWidth(sCommand) > LargestCommandName then LargestCommandName := lblCommandName.Canvas.TextWidth(sCommand); if lblCommandName.Canvas.TextWidth(sHotKey) > LargestHotKeyName then LargestHotKeyName := lblCommandName.Canvas.TextWidth(sHotKey); if (WantedCommandToSelect <> '') and (WantedCommandToSelect = sCommand) then WantedCommandIndex := SearchingIndex; if (LastSelectedCommand <> '') and (LastSelectedCommand = sCommand) then LastSelectedIndex := SearchingIndex; end; Inc(SearchingIndex); end; OffsetForHotKey := LargestCommandName + 10; lblHotKey.BorderSpacing.Left := OffsetForHotKey + 1; OffsetForHint := LargestCommandName + 10 + LargestHotKeyName + 10; lblHint.BorderSpacing.Left := OffsetForHint + 1; lbCommands.Items.Assign(ListCommands); if WantedCommandIndex <> -1 then lbCommands.ItemIndex := WantedCommandIndex else if LastSelectedIndex <> -1 then lbCommands.ItemIndex := LastSelectedIndex else if lbCommands.Items.Count > 0 then lbCommands.ItemIndex := 0; end; { TfrmMainCommandsDlg.AttemptToSetupForThisCommand } procedure TfrmMainCommandsDlg.AttemptToSetupForThisCommand(CommandToShow: string); var CommandRec: PCommandRec; begin CommandRec := frmMain.Commands.Commands.GetCommandRec(CommandToShow); if Assigned(CommandRec) then begin if Assigned(CommandRec^.Action) and CommandRec^.Action.Enabled then begin if cbSelectAllCategoryDefault.Checked then LoadCategoryListbox('') else LoadCategoryListbox(CommandRec^.Action.Category); LoadCommandsListbox(CommandToShow); end; end; end; { TfrmMainCommandsDlg.lbledtFilterEnter } procedure TfrmMainCommandsDlg.lbledtFilterEnter(Sender: TObject); begin lbledtFilter.EditLabel.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbledtFilterExit } procedure TfrmMainCommandsDlg.lbledtFilterExit(Sender: TObject); begin lbledtFilter.EditLabel.Font.Style := []; end; procedure TfrmMainCommandsDlg.lbledtFilterKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var NewIndex: Integer; begin case Key of VK_UP: NewIndex := lbCommands.ItemIndex - 1; VK_DOWN: NewIndex := lbCommands.ItemIndex + 1; VK_PRIOR: NewIndex := lbCommands.ItemIndex - (lbCommands.ClientHeight div lbCommandsItemHeight) + 1; VK_NEXT: NewIndex := lbCommands.ItemIndex + (lbCommands.ClientHeight div lbCommandsItemHeight) - 1; VK_HOME: if (ssCtrl in Shift) then NewIndex := 0 else Exit; VK_END: if (ssCtrl in Shift) then NewIndex := lbCommands.Items.Count - 1 else Exit; else Exit; end; Key := 0; if lbCommands.Items.Count > 0 then lbCommands.ItemIndex := EnsureRange(NewIndex, 0, lbCommands.Items.Count - 1); end; { TfrmMainCommandsDlg.lblPlaceCaptionInClipClick } procedure TfrmMainCommandsDlg.lblPlaceCaptionInClipClick(Sender: TObject); begin with Sender as TLabel do ClipboardSetText(Caption); ShowMessage(Format(rsMsgThisIsNowInClipboard, [Clipboard.AsText])); end; { TfrmMainCommandsDlg.lblSelectedCommandHelpClick } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/cmds.html#' + lblSelectedCommand.Caption); end; { TfrmMainCommandsDlg.lblSelectedCommandHelpClick } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpMouseEnter(Sender: TObject); begin lblSelectedCommandHelp.Font.Color := clRed; end; { TfrmMainCommandsDlg.lblSelectedCommandHelpMouseLeave } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpMouseLeave(Sender: TObject); begin lblSelectedCommandHelp.Font.Color := clDefault; end; end. doublecmd-1.1.30/src/fmaincommandsdlg.lrj0000644000175000001440000000501315104114162017367 0ustar alexxusers{"version":1,"strings":[ {"hash":53701060,"name":"tfrmmaincommandsdlg.caption","sourcebytes":[83,101,108,101,99,116,32,121,111,117,114,32,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100],"value":"Select your internal command"}, {"hash":12678826,"name":"tfrmmaincommandsdlg.lblcategory.caption","sourcebytes":[38,67,97,116,101,103,111,114,105,101,115,58],"value":"&Categories:"}, {"hash":77071178,"name":"tfrmmaincommandsdlg.lblcommandname.caption","sourcebytes":[67,111,109,109,97,110,100,32,38,110,97,109,101,58],"value":"Command &name:"}, {"hash":5178746,"name":"tfrmmaincommandsdlg.lblhint.caption","sourcebytes":[72,105,110,116,58],"value":"Hint:"}, {"hash":218345210,"name":"tfrmmaincommandsdlg.lbledtfilter.editlabel.caption","sourcebytes":[38,70,105,108,116,101,114,58],"value":"&Filter:"}, {"hash":11067,"name":"tfrmmaincommandsdlg.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmmaincommandsdlg.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":87810132,"name":"tfrmmaincommandsdlg.cbcategorysortornot.text","sourcebytes":[76,101,103,97,99,121,32,115,111,114,116,101,100],"value":"Legacy sorted"}, {"hash":87810132,"name":"tfrmmaincommandsdlg.cbcommandssortornot.text","sourcebytes":[76,101,103,97,99,121,32,115,111,114,116,101,100],"value":"Legacy sorted"}, {"hash":196049466,"name":"tfrmmaincommandsdlg.gbselection.caption","sourcebytes":[83,101,108,101,99,116,105,111,110,58],"value":"Selection:"}, {"hash":171329621,"name":"tfrmmaincommandsdlg.lblselectedcommand.caption","sourcebytes":[99,109,95,110,97,109,101],"value":"cm_name"}, {"hash":323668,"name":"tfrmmaincommandsdlg.lblselectedcommandhint.caption","sourcebytes":[72,105,110,116],"value":"Hint"}, {"hash":322608,"name":"tfrmmaincommandsdlg.lblselectedcommandhelp.caption","sourcebytes":[72,101,108,112],"value":"Help"}, {"hash":83276233,"name":"tfrmmaincommandsdlg.lblselectedcommandhotkey.caption","sourcebytes":[72,111,116,107,101,121],"value":"Hotkey"}, {"hash":145482249,"name":"tfrmmaincommandsdlg.lblselectedcommandcategory.caption","sourcebytes":[67,97,116,101,103,111,114,121],"value":"Category"}, {"hash":5485524,"name":"tfrmmaincommandsdlg.cbselectallcategorydefault.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108,32,99,97,116,101,103,111,114,105,101,115,32,98,121,32,100,101,102,97,117,108,116],"value":"Select all categories by default"}, {"hash":258677898,"name":"tfrmmaincommandsdlg.lblhotkey.caption","sourcebytes":[72,111,116,107,101,121,58],"value":"Hotkey:"} ]} doublecmd-1.1.30/src/fmaincommandsdlg.lfm0000644000175000001440000002524615104114162017370 0ustar alexxusersobject frmMainCommandsDlg: TfrmMainCommandsDlg Left = 77 Height = 350 Top = 189 Width = 600 HorzScrollBar.Page = 464 HorzScrollBar.Range = 369 VertScrollBar.Page = 301 VertScrollBar.Range = 227 ActiveControl = lbledtFilter BorderIcons = [biSystemMenu] Caption = 'Select your internal command' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 350 ClientWidth = 600 Constraints.MinHeight = 350 Constraints.MinWidth = 600 KeyPreview = True OnActivate = FormActivate OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'cbCategorySortOrNot.ItemIndex;cbCommandsSortOrNot.ItemIndex;Height;Width;cbSelectAllCategoryDefault.Checked' LCLVersion = '1.6.0.4' object lblCategory: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 34 Width = 59 Caption = '&Categories:' FocusControl = lbCategory ParentColor = False end object lblCommandName: TLabel AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 162 Height = 15 Top = 34 Width = 93 BorderSpacing.Left = 1 Caption = 'Command &name:' FocusControl = lbCommands ParentColor = False end object lblHint: TLabel AnchorSideLeft.Control = lblCommandName AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 412 Height = 15 Top = 34 Width = 26 BorderSpacing.Left = 250 Caption = 'Hint:' ParentColor = False end object lbCategory: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblCategory AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbCategorySortOrNot AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCategorySortOrNot Left = 6 Height = 185 Top = 49 Width = 150 Anchors = [akTop, akLeft, akRight, akBottom] Constraints.MinWidth = 150 ItemHeight = 0 OnEnter = lbCategoryEnter OnExit = lbCategoryExit OnSelectionChange = lbCategorySelectionChange ScrollWidth = 134 TabOrder = 2 end object lbCommands: TListBox AnchorSideLeft.Control = lbCategory AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCommandName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCommandsSortOrNot Left = 161 Height = 185 Top = 49 Width = 433 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 5 ItemHeight = 0 OnDblClick = lbCommandsDblClick OnDrawItem = lbCommandsDrawItem OnEnter = lbCommandsEnter OnExit = lbCommandsExit OnKeyPress = lbCommandsKeyPress ScrollWidth = 445 Style = lbOwnerDrawFixed TabOrder = 1 end object lbledtFilter: TLabeledEdit AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = Owner Left = 161 Height = 23 Top = 6 Width = 250 BorderSpacing.Bottom = 5 EditLabel.AnchorSideTop.Control = lbledtFilter EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbledtFilter EditLabel.AnchorSideBottom.Control = lbledtFilter EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 129 EditLabel.Height = 15 EditLabel.Top = 10 EditLabel.Width = 29 EditLabel.Caption = '&Filter:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 0 OnChange = lbledtFilterChange OnEnter = lbledtFilterEnter OnExit = lbledtFilterExit OnKeyDown = lbledtFilterKeyDown end object btnOK: TBitBtn AnchorSideLeft.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCancel Left = 496 Height = 33 Top = 274 Width = 98 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 2 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 7 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 496 Height = 31 Top = 313 Width = 98 Anchors = [akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 8 end object cbCategorySortOrNot: TComboBoxAutoWidth AnchorSideLeft.Control = Owner AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbSelection Left = 6 Height = 23 Top = 237 Width = 136 Anchors = [akLeft, akBottom] BorderSpacing.Top = 3 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Legacy sorted' 'A-Z sorted' ) OnChange = cbCategorySortOrNotChange Style = csDropDownList TabOrder = 3 Text = 'Legacy sorted' end object cbCommandsSortOrNot: TComboBoxAutoWidth AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = lbCommands AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = gbSelection Left = 161 Height = 23 Top = 237 Width = 136 Anchors = [akLeft, akBottom] BorderSpacing.Top = 3 BorderSpacing.Right = 5 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Legacy sorted' 'Sorted A-Z' ) OnChange = cbCommandsSortOrNotChange Style = csDropDownList TabOrder = 4 Text = 'Legacy sorted' end object gbSelection: TGroupBox AnchorSideLeft.Control = Owner AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 78 Top = 266 Width = 480 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 10 Caption = 'Selection:' ClientHeight = 58 ClientWidth = 476 TabOrder = 6 object lblSelectedCommand: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbSelection AnchorSideRight.Control = pnlImage Left = 373 Height = 15 Top = 0 Width = 53 Anchors = [akTop, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Caption = 'cm_name' Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandHint: TLabel AnchorSideTop.Control = lblSelectedCommand AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblSelectedCommand AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 402 Height = 15 Top = 15 Width = 24 Anchors = [akTop, akRight] BorderSpacing.Left = 10 Caption = 'Hint' Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandHelp: TLabel AnchorSideTop.Control = pnlImage AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlImage AnchorSideRight.Side = asrBottom Cursor = crHandPoint Left = 440 Height = 15 Top = 40 Width = 32 Alignment = taCenter Anchors = [akTop, akRight] BorderSpacing.Right = 4 BorderSpacing.Bottom = 3 Caption = 'Help' Constraints.MinWidth = 32 Font.Style = [fsUnderline] ParentColor = False ParentFont = False OnClick = lblSelectedCommandHelpClick OnMouseEnter = lblSelectedCommandHelpMouseEnter OnMouseLeave = lblSelectedCommandHelpMouseLeave end object lblSelectedCommandHotkey: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSelectedCommandHint AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblSelectedCommand AnchorSideRight.Side = asrBottom Left = 385 Height = 15 Top = 30 Width = 41 Anchors = [akTop, akRight] BorderSpacing.Left = 10 Caption = 'Hotkey' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandCategory: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbSelection AnchorSideRight.Control = lblSelectedCommand Left = 315 Height = 15 Top = 0 Width = 48 Anchors = [akTop, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Caption = 'Category' ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object pnlImage: TPanel AnchorSideTop.Control = gbSelection AnchorSideRight.Control = gbSelection AnchorSideRight.Side = asrBottom Left = 436 Height = 40 Top = 0 Width = 40 Anchors = [akTop, akRight] BevelOuter = bvNone ClientHeight = 40 ClientWidth = 40 TabOrder = 0 object imgCommandIcon: TImage AnchorSideLeft.Control = pnlImage AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlImage AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Top = 4 Width = 32 BorderSpacing.Top = 3 BorderSpacing.Right = 10 OnDblClick = lbCommandsDblClick end end end object cbSelectAllCategoryDefault: TCheckBox AnchorSideLeft.Control = cbCommandsSortOrNot AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCommandsSortOrNot AnchorSideTop.Side = asrCenter Left = 302 Height = 19 Top = 239 Width = 179 Caption = 'Select all categories by default' Checked = True OnChange = cbSelectAllCategoryDefaultChange State = cbChecked TabOrder = 5 end object lblHotKey: TLabel AnchorSideLeft.Control = lblCommandName AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 312 Height = 15 Top = 34 Width = 41 BorderSpacing.Left = 150 Caption = 'Hotkey:' Font.Color = clRed ParentColor = False ParentFont = False end end doublecmd-1.1.30/src/fmain.pas0000644000175000001440000067456615104114162015203 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Licence : GNU GPL v 2.0 Copyright (C) 2006-2023 Alexander Koblov (Alexx2000@mail.ru) Main Dialog window based on: Seksi Commander (radekc.regnet.cz) ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz Main Dialog window and other stuff contributors: based on (heavy rewriten): main Unit of PFM : Peter's File Manager --------------------------------------- Copyright : Peter Cernoch 2002 Contact : pcernoch@volny.cz Licence : GNU GPL v 2.0 contributors: Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru) } unit fMain; {$mode objfpc}{$H+} interface uses ufavoritetabs, Graphics, Forms, Menus, Controls, StdCtrls, ExtCtrls, ActnList, Buttons, SysUtils, Classes, SynEdit, LCLType, ComCtrls, LResources, KASToolBar, KASComboBox, uFilePanelSelect, uBriefFileView, VTEmuCtl, VTEmuPty, uFileView, uFileSource, uFileViewNotebook, uFile, LCLVersion, KASToolPanel, uOperationsManager, uFileSourceOperation, uDrivesList, DCClassesUtf8, DCXmlConfig, uDrive, uDriveWatcher, uDCVersion, uMainCommands, uFormCommands, uOperationsPanel, KASToolItems, uKASToolItemsExtended, uCmdLineParams, uOSForms {$IF DEFINED(LCLQT)} , Qt4, QtWidgets {$ELSEIF DEFINED(LCLQT5)} , Qt5, QtWidgets {$ELSEIF DEFINED(LCLQT6)} , Qt6, QtWidgets {$ELSEIF DEFINED(LCLGTK2)} , Glib2, Gtk2 {$ELSEIF DEFINED(DARWIN)} , uMyDarwin {$ENDIF} , Types, LMessages; type TForEachViewFunction = procedure (AFileView: TFileView; UserData: Pointer) of object; { TfrmMain } TfrmMain = class(TAloneForm, IFormCommands) actAddPlugin: TAction; actShowTabsList: TAction; actSaveFileDetailsToFile: TAction; actLoadList: TAction; actExtractFiles: TAction; actAddPathToCmdLine: TAction; actFileAssoc: TAction; actFocusCmdLine: TAction; actContextMenu: TAction; actCopyNamesToClip: TAction; actCopyFullNamesToClip: TAction; actCutToClipboard: TAction; actCopyToClipboard: TAction; actSyncChangeDir: TAction; actChangeDirToRoot: TAction; actCountDirContent: TAction; actCheckSumVerify: TAction; actCheckSumCalc: TAction; actClearLogFile: TAction; actClearLogWindow: TAction; actChangeDir: TAction; actAddFilenameToCmdLine: TAction; actAddPathAndFilenameToCmdLine: TAction; actCopyNoAsk: TAction; actChangeDirToParent: TAction; actEditPath: TAction; actHorizontalFilePanels: TAction; actGoToFirstEntry: TAction; actGoToLastEntry: TAction; actGoToNextEntry: TAction; actGoToPrevEntry: TAction; actGoToFirstFile: TAction; actGoToLastFile: TAction; actCompareDirectories: TAction; actCmdLineNext: TAction; actCmdLinePrev: TAction; actBriefView: TAction; actColumnsView: TAction; actChangeDirToHome: TAction; actCopyFileDetailsToClip: TAction; actFlatView: TAction; actFlatViewSel: TAction; actConfigDirHotList: TAction; actCopyPathOfFilesToClip: TAction; actCopyPathNoSepOfFilesToClip: TAction; actDoAnyCmCommand: TAction; actCloseDuplicateTabs: TAction; actCopyAllTabsToOpposite: TAction; actConfigTreeViewMenus: TAction; actConfigTreeViewMenusColors: TAction; actConfigSavePos: TAction; actConfigSaveSettings: TAction; actExecuteScript: TAction; actFocusSwap: TAction; actConfigArchivers: TAction; actConfigTooltips: TAction; actConfigPlugins: TAction; actUnmarkCurrentNameExt: TAction; actMarkCurrentNameExt: TAction; actUnmarkCurrentName: TAction; actMarkCurrentName: TAction; actUnmarkCurrentPath: TAction; actMarkCurrentPath: TAction; actTreeView: TAction; actFocusTreeView: TAction; actToggleFullscreenConsole: TAction; actSrcOpenDrives: TAction; actRightReverseOrder: TAction; actLeftReverseOrder: TAction; actRightFlatView: TAction; actLeftFlatView: TAction; actRightSortByAttr: TAction; actRightSortByDate: TAction; actRightSortBySize: TAction; actRightSortByExt: TAction; actRightSortByName: TAction; actLeftSortByAttr: TAction; actLeftSortByDate: TAction; actLeftSortBySize: TAction; actLeftSortByExt: TAction; actLeftSortByName: TAction; actLeftThumbView: TAction; actRightThumbView: TAction; actRightColumnsView: TAction; actLeftColumnsView: TAction; actRightBriefView: TAction; actLeftBriefView: TAction; actWorkWithDirectoryHotlist: TAction; actUniversalSingleDirectSort: TAction; actViewLogFile: TAction; actLoadTabs: TAction; actSaveTabs: TAction; actSyncDirs: TAction; actThumbnailsView: TAction; actShellExecute: TAction; actRenameTab: TAction; actOperationsViewer: TAction; actCopyNetNamesToClip: TAction; actNetworkDisconnect: TAction; actNetworkQuickConnect: TAction; actNetworkConnect: TAction; actViewHistory: TAction; actViewHistoryPrev: TAction; actViewHistoryNext: TAction; actLoadSelectionFromClip: TAction; actLoadSelectionFromFile: TAction; actSaveSelectionToFile: TAction; actSaveSelection: TAction; actRestoreSelection: TAction; actSwitchIgnoreList: TAction; actTestArchive: TAction; actQuickView: TAction; actOpenBar: TAction; actSetFileProperties: TAction; actQuickFilter: TAction; actRenameNoAsk: TAction; actPanelsSplitterPerPos: TAction; actMinimize: TAction; actRightEqualLeft: TAction; actLeftEqualRight: TAction; actPasteFromClipboard: TAction; actExchange: TAction; actEditComment: TAction; actHelpIndex: TAction; actVisitHomePage: TAction; actKeyboard: TAction; actPrevTab: TAction; actNextTab: TAction; actMoveTabLeft: TAction; actMoveTabRight: TAction; actActivateTabByIndex: TAction; actCloseAllTabs: TAction; actSetTabOptionNormal: TAction; actSetTabOptionPathLocked: TAction; actSetTabOptionPathResets: TAction; actSetTabOptionDirsInNewTab: TAction; actUnmarkCurrentExtension: TAction; actMarkCurrentExtension: TAction; actWipe: TAction; actOpenDirInNewTab: TAction; actTargetEqualSource: TAction; actOpen: TAction; actQuickSearch: TAction; actShowButtonMenu: TAction; actOpenArchive: TAction; actTransferRight: TAction; actTransferLeft: TAction; actRightOpenDrives: TAction; actLeftOpenDrives: TAction; actOpenVirtualFileSystemList: TAction; actPackFiles: TAction; actCloseTab: TAction; actNewTab: TAction; actConfigToolbars: TAction; actDebugShowCommandParameters: TAction; actOpenDriveByIndex: TAction; btnF10: TSpeedButton; btnF3: TSpeedButton; btnF4: TSpeedButton; btnF5: TSpeedButton; btnF6: TSpeedButton; btnF7: TSpeedButton; btnF8: TSpeedButton; btnF9: TSpeedButton; btnLeftDirectoryHotlist: TSpeedButton; btnRightDirectoryHotlist: TSpeedButton; dskLeft: TKASToolBar; dskRight: TKASToolBar; edtCommand: TComboBoxWithDelItems; imgLstActions: TImageList; imgLstDirectoryHotlist: TImageList; lblRightDriveInfo: TLabel; lblLeftDriveInfo: TLabel; lblCommandPath: TLabel; mnuDoAnyCmCommand: TMenuItem; miConfigArchivers: TMenuItem; mnuConfigSavePos: TMenuItem; mnuConfigSaveSettings: TMenuItem; miLine55: TMenuItem; mnuConfigureFavoriteTabs: TMenuItem; mnuRewriteFavoriteTabs: TMenuItem; mnuCreateNewFavoriteTabs: TMenuItem; mnuReloadActiveFavoriteTabs: TMenuItem; mnuFavoriteTabs: TMenuItem; mnuCloseDuplicateTabs: TMenuItem; miCloseDuplicateTabs: TMenuItem; mnuTreeView: TMenuItem; mnuCmdConfigDirHotlist: TMenuItem; mnuLoadTabs: TMenuItem; mnuSaveTabs: TMenuItem; miLine38: TMenuItem; miFlatView: TMenuItem; miMakeDir: TMenuItem; miWipe: TMenuItem; miDelete: TMenuItem; miLine50: TMenuItem; miCopyFileDetailsToClip: TMenuItem; mnuCmdSyncDirs: TMenuItem; mnuContextRenameOnly: TMenuItem; mnuContextCopy: TMenuItem; mnuContextOpen: TMenuItem; mnuContextLine1: TMenuItem; mnuContextLine2: TMenuItem; mnuContextFileProperties: TMenuItem; mnuContextDelete: TMenuItem; mnuContextView: TMenuItem; mnuThumbnailsView: TMenuItem; mnuColumnsView: TMenuItem; mnuBriefView: TMenuItem; miLine33: TMenuItem; mnuAllOperStart: TMenuItem; mnuAllOperStop: TMenuItem; mnuAllOperPause: TMenuItem; mnuAllOperProgress: TMenuItem; miCompareDirectories: TMenuItem; miLine37: TMenuItem; miRenameTab: TMenuItem; pnlMain: TPanel; tbChangeDir: TMenuItem; mnuShowHorizontalFilePanels: TMenuItem; miLine20: TMenuItem; miNetworkDisconnect: TMenuItem; miNetworkQuickConnect: TMenuItem; miNetworkConnect: TMenuItem; mnuNetwork: TMenuItem; pnlDskLeft: TPanel; pnlDiskLeftInner: TKASToolPanel; pnlDskRight: TPanel; pnlDiskRightInner: TKASToolPanel; Timer: TTimer; PanelAllProgress: TPanel; pbxRightDrive: TPaintBox; pbxLeftDrive: TPaintBox; tbPaste: TMenuItem; tbCopy: TMenuItem; tbCut: TMenuItem; tbSeparator: TMenuItem; mnuLoadSelectionFromClip: TMenuItem; mnuLoadSelectionFromFile: TMenuItem; mnuSaveSelectionToFile: TMenuItem; mnuRestoreSelection: TMenuItem; mnuSaveSelection: TMenuItem; miLine47: TMenuItem; mnuTestArchive: TMenuItem; mnuQuickView: TMenuItem; miLine32: TMenuItem; miLine14: TMenuItem; mnuTabOptionNormal: TMenuItem; mnuTabOptionDirsInNewTabs: TMenuItem; mnuTabOptions: TMenuItem; miTabOptionPathResets: TMenuItem; miTabOptionDirsInNewTab: TMenuItem; miTabOptionPathLocked: TMenuItem; miTabOptionNormal: TMenuItem; miTabOptions: TMenuItem; miLine19: TMenuItem; mnuSetFileProperties: TMenuItem; mnuShowOperations: TMenuItem; miLine13: TMenuItem; miLogClear: TMenuItem; miLogHide: TMenuItem; miLine25: TMenuItem; miLogSelectAll: TMenuItem; miLogCopy: TMenuItem; miLine24: TMenuItem; miTrayIconRestore: TMenuItem; miLine8: TMenuItem; miTrayIconExit: TMenuItem; mnuCheckSumCalc: TMenuItem; mnuCheckSumVerify: TMenuItem; mnuCountDirContent: TMenuItem; miLine22: TMenuItem; miLine18: TMenuItem; mnuHelpIndex: TMenuItem; mnuHelpVisitHomePage: TMenuItem; mnuHelpKeyboard: TMenuItem; MenuItem2: TMenuItem; mnuPrevTab: TMenuItem; mnuNextTab: TMenuItem; miLine17: TMenuItem; miLine16: TMenuItem; mnuTabOptionPathLocked: TMenuItem; mnuTabOptionPathResets: TMenuItem; mnuCloseAllTabs: TMenuItem; mnuCloseTab: TMenuItem; miLine15: TMenuItem; mnuOpenDirInNewTab: TMenuItem; mnuNewTab: TMenuItem; miCloseAllTabs: TMenuItem; miCloseTab: TMenuItem; miNewTab: TMenuItem; miEditComment: TMenuItem; mnuMarkCurrentExtension: TMenuItem; mnuTabs: TMenuItem; mnuUnmarkCurrentExtension: TMenuItem; miSymLink: TMenuItem; miHardLink: TMenuItem; miCancel: TMenuItem; miLine12: TMenuItem; miCopy: TMenuItem; miMove: TMenuItem; mi8020: TMenuItem; mi7030: TMenuItem; mi6040: TMenuItem; mi5050: TMenuItem; mi4060: TMenuItem; mi3070: TMenuItem; mi2080: TMenuItem; miCopyFullNamesToClip: TMenuItem; miCopyNamesToClip: TMenuItem; mnuFileAssoc: TMenuItem; nbConsole: TPageControl; pgConsole: TTabSheet; pnlCmdLine: TPanel; MainSplitter: TPanel; MainToolBar: TKASToolBar; MiddleToolBar: TKASToolBar; mnuOpenVFSList: TMenuItem; mnuExtractFiles: TMenuItem; pmContextMenu: TPopupMenu; pmSplitterPercent: TPopupMenu; pnlCommand: TPanel; pnlKeys: TPanel; pnlLeftTools: TPanel; pnlRightTools: TPanel; pnlRight: TPanel; pnlLeft: TPanel; btnLeftDrive: TSpeedButton; btnLeftHome: TSpeedButton; btnLeftUp: TSpeedButton; btnLeftRoot: TSpeedButton; btnRightDrive: TSpeedButton; btnRightHome: TSpeedButton; btnRightUp: TSpeedButton; btnRightRoot: TSpeedButton; LogSplitter: TSplitter; pmColumnsMenu: TPopupMenu; pmDropMenu: TPopupMenu; pmTabMenu: TPopupMenu; pmTrayIconMenu: TPopupMenu; pmLogMenu: TPopupMenu; seLogWindow: TSynEdit; btnRightEqualLeft: TSpeedButton; btnLeftEqualRight: TSpeedButton; ConsoleSplitter: TSplitter; tbDelete: TMenuItem; tbEdit: TMenuItem; mnuMain: TMainMenu; pnlNotebooks: TPanel; pnlDisk: TKASToolPanel; mnuHelp: TMenuItem; mnuHelpAbout: TMenuItem; mnuShow: TMenuItem; mnuShowName: TMenuItem; mnuShowExtension: TMenuItem; mnuShowTime: TMenuItem; mnuShowSize: TMenuItem; mnuShowAttrib: TMenuItem; miLine7: TMenuItem; mnuShowReverse: TMenuItem; mnuShowReread: TMenuItem; mnuFiles: TMenuItem; mnuPackFiles : TMenuItem; mnuFilesSplit: TMenuItem; mnuFilesCombine: TMenuItem; mnuCmd: TMenuItem; mnuCmdDirHotlist: TMenuItem; miLine2: TMenuItem; mnuFilesSpace: TMenuItem; mnuFilesAttrib: TMenuItem; mnuFilesProperties: TMenuItem; miLine6: TMenuItem; mnuCmdSwapSourceTarget: TMenuItem; mnuCmdTargetIsSource: TMenuItem; miLine3: TMenuItem; mnuFilesShwSysFiles: TMenuItem; miLine1: TMenuItem; mnuFilesHardLink: TMenuItem; mnuFilesSymLink: TMenuItem; mnuConfig: TMenuItem; mnuConfigOptions: TMenuItem; mnuMark: TMenuItem; mnuMarkSGroup: TMenuItem; mnuMarkUGroup: TMenuItem; mnuMarkSAll: TMenuItem; mnuMarkUAll: TMenuItem; mnuMarkInvert: TMenuItem; miLine5: TMenuItem; mnuCmdSearch: TMenuItem; mnuCmdAddNewSearch:TMenuItem; mnuCmdViewSearches:TMenuItem; actionLst: TActionList; actExit: TAction; actView: TAction; actEdit: TAction; actCopy: TAction; actRename: TAction; actMakeDir: TAction; actDelete: TAction; actAbout: TAction; actShowSysFiles: TAction; actOptions: TAction; mnuFilesCmpCnt: TMenuItem; actCompareContents: TAction; actShowMainMenu: TAction; actRefresh: TAction; actSearch: TAction; actAddNewSearch: TAction; actViewSearches: TAction; actDeleteSearches: TAction; actConfigSearches: TAction; actConfigHotKeys: TAction; actDirHotList: TAction; actMarkMarkAll: TAction; actMarkInvert: TAction; actMarkUnmarkAll: TAction; pmHotList: TPopupMenu; actMarkPlus: TAction; actMarkMinus: TAction; actSymLink: TAction; actHardLink: TAction; actReverseOrder: TAction; actSortByName: TAction; actSortByExt: TAction; actSortBySize: TAction; actSortByDate: TAction; actSortByAttr: TAction; miLine4: TMenuItem; miExit: TMenuItem; actMultiRename: TAction; miMultiRename: TMenuItem; actCopySamePanel: TAction; actRenameOnly: TAction; actEditNew: TAction; actDirHistory: TAction; pmDirHistory: TPopupMenu; actShowCmdLineHistory: TAction; actRunTerm: TAction; miLine9: TMenuItem; miRunTerm: TMenuItem; actBenchmark: TAction; actCalculateSpace: TAction; actFileProperties: TAction; actFileLinker: TAction; actFileSpliter: TAction; pmToolBar: TPopupMenu; MainTrayIcon: TTrayIcon; TreePanel: TPanel; TreeSplitter: TSplitter; ShellTreeView: TCustomTreeView; miLine10: TMenuItem; miLine11: TMenuItem; miLine21: TMenuItem; miLine23: TMenuItem; miLine26: TMenuItem; miLine39: TMenuItem; miLine40: TMenuItem; actSetAllTabsOptionNormal: TAction; actSetAllTabsOptionPathLocked: TAction; actSetAllTabsOptionPathResets: TAction; actSetAllTabsOptionDirsInNewTab: TAction; actConfigFolderTabs: TAction; actLoadFavoriteTabs: TAction; actConfigFavoriteTabs: TAction; actSaveFavoriteTabs: TAction; actReloadFavoriteTabs: TAction; actNextFavoriteTabs: TAction; actPreviousFavoriteTabs: TAction; pmFavoriteTabs: TPopupMenu; mnuRenameTab: TMenuItem; mnuConfigFolderTabs: TMenuItem; mnuConfigFavoriteTabs: TMenuItem; mnuConfigurationFavoriteTabs: TMenuItem; mnuSaveFavoriteTabs: TMenuItem; mnuLoadFavoriteTabs: TMenuItem; mnuConfigurationFolderTabs: TMenuItem; mnuSetAllTabsOptionNormal: TMenuItem; mnuSetAllTabsOptionPathLocked: TMenuItem; mnuSetAllTabsOptionPathResets: TMenuItem; mnuSetAllTabsOptionDirsInNewTab: TMenuItem; miConfigFolderTabs: TMenuItem; miConfigFavoriteTabs: TMenuItem; miNextTab: TMenuItem; miPrevTab: TMenuItem; miSaveTabs: TMenuItem; miLoadTabs: TMenuItem; miSaveFavoriteTabs: TMenuItem; miLoadFavoriteTabs: TMenuItem; miSetAllTabsOptionNormal: TMenuItem; miSetAllTabsOptionPathLocked: TMenuItem; miSetAllTabsOptionPathResets: TMenuItem; miSetAllTabsOptionDirsInNewTab: TMenuItem; miOpenDirInNewTab: TMenuItem; actResaveFavoriteTabs: TAction; procedure actExecute(Sender: TObject); procedure btnF3MouseWheelDown(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var {%H-}Handled: Boolean); procedure btnF3MouseWheelUp(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var {%H-}Handled: Boolean); procedure btnF8MouseDown(Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure ConsoleSplitterMoved(Sender: TObject); procedure dskToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormKeyUp( Sender: TObject; var {%H-}Key: Word; Shift: TShiftState) ; procedure FormResize(Sender: TObject); procedure lblDriveInfoResize(Sender: TObject); function MainToolBarToolItemShortcutsHint(Sender: TObject; ToolItem: TKASNormalItem): String; procedure mnuAllOperStartClick(Sender: TObject); procedure mnuAllOperStopClick(Sender: TObject); procedure mnuAllOperPauseClick(Sender: TObject); procedure mnuAllOperProgressClick(Sender: TObject); procedure btnF8Click(Sender: TObject); procedure btnLeftClick(Sender: TObject); procedure btnLeftDirectoryHotlistClick(Sender: TObject); procedure btnRightClick(Sender: TObject); procedure btnRightDirectoryHotlistClick(Sender: TObject); procedure btnDriveMouseUp(Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure ConsoleSplitterCanResize(Sender: TObject; var NewSize: Integer; var {%H-}Accept: Boolean); procedure dskLeftRightToolButtonDragDrop(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: Integer); procedure dskToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure lblAllProgressPctClick(Sender: TObject); procedure MainToolBarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainToolBarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); procedure MainToolBarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainToolBarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure miLogMenuClick(Sender: TObject); procedure miTrayIconExitClick(Sender: TObject); procedure miTrayIconRestoreClick(Sender: TObject); procedure PanelButtonClick(Button: TSpeedButton; FileView: TFileView); procedure ShellTreeViewSelect; procedure ShellTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ShellTreeViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tbDeleteClick(Sender: TObject); procedure dskLeftToolButtonClick(Sender: TObject); procedure dskRightToolButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormDropFiles(Sender: TObject; const FileNames: array of String); procedure FormUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); procedure FormWindowStateChange(Sender: TObject); procedure MainSplitterDblClick(Sender: TObject); procedure MainSplitterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainSplitterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure MainSplitterMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainTrayIconClick(Sender: TObject); procedure lblDriveInfoDblClick(Sender: TObject); procedure MainToolBarDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainToolBarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); function MainToolBarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; function MainToolBarLoadButtonOverlay(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; procedure MainToolBarMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure frmMainClose(Sender: TObject; var CloseAction: TCloseAction); procedure frmMainAfterShow(Sender: TObject); procedure frmMainShow(Sender: TObject); procedure mnuDropClick(Sender: TObject); procedure mnuSplitterPercentClick(Sender: TObject); procedure mnuTabMenuExecute(Sender: TObject); procedure mnuTabMenuClick(Sender: TObject); procedure nbPageAfterMouseDown(Data: PtrInt); procedure nbPageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure nbPageChanged(Sender: TObject); procedure nbPageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure NotebookDragDrop(Sender, Source: TObject; X, Y: Integer); procedure NotebookDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure NotebookCloseTabClicked(Sender: TObject); procedure pmDropMenuClose(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure edtCommandKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure pmToolBarPopup(Sender: TObject); procedure ShellTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); procedure pnlLeftResize(Sender: TObject); procedure pnlLeftRightDblClick(Sender: TObject); procedure pnlNotebooksResize(Sender: TObject); procedure pnlRightResize(Sender: TObject); procedure sboxDrivePaint(Sender: TObject); procedure PaintDriveFreeBar(Sender: TObject; const bIndUseGradient: boolean; const pIndForeColor, pIndThresholdForeColor, pIndBackColor: TColor); procedure seLogWindowSpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); procedure FileViewFreeAsync(Data: PtrInt); function FileViewAutoSwitch(FileSource: IFileSource; var FileView: TFileView; Reason: TChangePathReason; const NewPath: String): Boolean; function FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; Reason: TChangePathReason; const NewPath : String): Boolean; procedure FileViewAfterChangePath(FileView: TFileView); procedure FileViewActivate(FileView: TFileView); procedure FileViewFilesChanged(FileView: TFileView); procedure edtCommandKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtCommandExit(Sender: TObject); procedure tbChangeDirClick(Sender: TObject); procedure tbCopyClick(Sender: TObject); procedure tbEditClick(Sender: TObject); procedure OnUniqueInstanceMessage(Sender: TObject; Params: TCommandLineParams); procedure tbPasteClick(Sender: TObject); procedure AllProgressOnUpdateTimer(Sender: TObject); procedure OperationManagerNotify(Item: TOperationsManagerItem; Event: TOperationManagerEvent); {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} private QEventHook: QObject_hookH; function QObjectEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; {$ENDIF} {$IF DEFINED(LCLGTK2)} procedure WindowStateUpdate(Data: PtrInt); {$ENDIF} private { Private declarations } FMainSplitterPos: Double; PanelSelected: TFilePanelSelect; DrivesList : TDrivesList; MainSplitterHintWnd: THintWindow; HiddenToTray: Boolean; HidingTrayIcon: Boolean; // @true if the icon is in the process of hiding nbLeft, nbRight: TFileViewNotebook; cmdConsole: TVirtualTerminal; FCommands: TMainCommands; FInitializedView: Boolean; {en Used to pass drag&drop parameters to pmDropMenu. Single variable can be used, because the user can do only one menu popup at a time. } FDropParams: TDropParams; FDrivesListPopup: TDrivesListPopup; FOperationsPanel: TOperationsPanel; FSyncChangeParent: Boolean; FSyncChangeDir: String; sStaticTitleBarString: String; // frost_asm begin // mainsplitter MainSplitterLeftMouseBtnDown: Boolean; MainSplitterMouseDownX, MainSplitterMouseDownY: Integer; FResizingFilePanels: Boolean; // lastWindowState lastWindowState:TWindowState; // frost_asm end // for dragging buttons and etc NumberOfMoveButton, NumberOfNewMoveButton: integer; Draging : boolean; FUpdateDiskCount: Boolean; FModalOperationResult: Boolean; FRestoredLeft: Integer; FRestoredTop: Integer; FRestoredWidth: Integer; FRestoredHeight: Integer; FDelayedEventCtr: Integer; FDelayedWMMove, FDelayedWMSize: Boolean; procedure DelayedEvent(Data: PtrInt); procedure CheckCommandLine(ShiftEx: TShiftState; var Key: Word); function ExecuteCommandFromEdit(sCmd: String; bRunInTerm: Boolean): Boolean; procedure SetMainSplitterPos(AValue: Double); procedure SetPanelSelected(AValue: TFilePanelSelect); procedure UpdateActionIcons; procedure UpdateHotDirIcons; procedure TypeInCommandLine(Str: String); procedure AddSpecialButtons(dskPanel: TKASToolBar); procedure HideToTray; procedure RestoreFromTray; procedure ShowTrayIcon(bShow: Boolean); procedure HideTrayIconDelayed(Data: PtrInt); procedure PopupDragDropMenu(var DropParams: TDropParams); procedure CloseNotebook(ANotebook: TFileViewNotebook); procedure DriveListDriveSelected(Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect); procedure DriveListClose(Sender: TObject); function FindMatchingDrive(Address, Path: String): Integer; procedure UpdateDriveToolbarSelection(DriveToolbar: TKAStoolBar; FileView: TFileView); procedure UpdateDriveButtonSelection(DriveButton: TSpeedButton; FileView: TFileView); {$IF DEFINED(MSWINDOWS)} procedure OnDriveIconLoaded(Data: PtrInt); {$ENDIF} procedure OnDriveGetFreeSpace(Data: PtrInt); procedure OnDriveWatcherEvent(EventType: TDriveWatcherEvent; const ADrive: PDrive); procedure AppActivate(Sender: TObject); procedure AppDeActivate(Sender: TObject); procedure AppEndSession(Sender: TObject); procedure AppThemeChange(Sender: TObject); procedure AppQueryEndSession(var Cancel: Boolean); procedure AppException(Sender: TObject; E: Exception); procedure AppShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); {en Convert toolbar configuration from .bar file to global config. } procedure ConvertToolbarBarConfig(BarFileName: String); procedure ConvertIniToolbarItem(Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String); procedure CreateDefaultToolbar; procedure EditToolbarButton(Toolbar: TKASToolBar; Button: TKASToolButton); procedure ToolbarExecuteCommand(ToolItem: TKASToolItem); procedure ToolbarExecuteProgram(ToolItem: TKASToolItem); procedure LeftDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure RightDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure SetDragCursor(Shift: TShiftState); {$IFDEF DARWIN} procedure createDarwinAppMenu; procedure aboutOnClick(Sender: TObject); procedure optionsOnClick(Sender: TObject); {$ENDIF} protected procedure CreateWnd; override; procedure DoFirstShow; override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; procedure WMMove(var Message: TLMMove); message LM_MOVE; procedure WMSize(var message: TLMSize); message LM_Size; public constructor Create(TheOwner: TComponent); override; procedure AfterConstruction; override; Function ActiveFrame: TFileView; // get Active frame Function NotActiveFrame: TFileView; // get NotActive frame :) function ActiveNotebook: TFileViewNotebook; function NotActiveNotebook: TFileViewNotebook; function FrameLeft: TFileView; function FrameRight: TFileView; procedure ForEachView(CallbackFunction: TForEachViewFunction; UserData: Pointer); procedure GetListOpenedPaths(const APaths:TStringList); //check selected count and generate correct msg, parameters is lng indexs Function GetFileDlgStr(sLngOne, sLngMulti : String; Files: TFiles):String; procedure HotDirSelected(Sender:TObject); procedure HotDirActualSwitchToDir(Index:longint); procedure HistorySelected(Sender:TObject); procedure HistorySomeSelected(Sender:TObject); procedure ViewHistorySelected(Sender:TObject); procedure ViewHistoryPrevSelected(Sender:TObject); procedure ViewHistoryNextSelected(Sender:TObject); procedure CreatePopUpDirHistory(UseTreeViewMenu: Boolean; FromPathIndex: Integer); procedure ShowFileViewHistory(const Params: array of string); procedure ShowFileViewHistory(const Params: array of string; FromFileSourceIndex, FromPathIndex, ToFileSourceIndex, ToPathIndex: Integer); procedure miHotAddOrConfigClick(Sender: TObject); procedure OnCopyOutTempStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); {en Returns @true if copy operation has been successfully started. } function CopyFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; {en Returns @true if move operation has been successfully started. } function MoveFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; function CopyFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; // this is for F5 and Shift+F5 function MoveFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; procedure GetDestinationPathAndMask(SourceFiles: TFiles; TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); overload; procedure GetDestinationPathAndMask(SourceFiles: TFiles; SourceFileSource: IFileSource; var TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); overload; procedure SetActiveFrame(panel: TFilePanelSelect); procedure SetActiveFrame(FileView: TFileView); procedure UpdateFileView; procedure UpdateShellTreeView; procedure UpdateTreeViewPath; procedure UpdateTreeView; procedure UpdateDiskCount; procedure UpdateSelectedDrives; procedure UpdateGUIFunctionKeys; procedure UpdateMainTitleBar; procedure CreateDiskPanel(dskPanel : TKASToolBar); procedure UpdateSelectedDrive(ANoteBook: TFileViewNotebook); procedure SetPanelDrive(aPanel: TFilePanelSelect; Drive: PDrive; ActivateIfNeeded: Boolean); function CreateFileView(sType: String; Page: TFileViewPage; AConfig: TXmlConfig; ANode: TXmlNode): TFileView; procedure AssignEvents(AFileView: TFileView); function RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True; ConfirmCloseLocked: integer = 0; ShowButtonAll: Boolean = False): LongInt; procedure LoadTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook); procedure SaveTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook; ASaveHistory: boolean); procedure LoadTheseTabsWithThisConfig(Config: TXmlConfig; ABranch:string; Source, Destination:TTabsConfigLocation; DestinationToKeep : TTabsConfigLocation; var TabsAlreadyDestroyedFlags:TTabsFlagsAlreadyDestroyed); procedure ToggleConsole; procedure UpdateWindowView; procedure MinimizeWindow; procedure RestoreWindow; procedure LoadTabs; procedure LoadTabsCommandLine(Params: TCommandLineParams); procedure AddTab(ANoteBook: TFileViewNotebook; aPath: String); {$IF DEFINED(DARWIN)} procedure OnNSServiceOpenWithNewTab( filenames:TStringList ); function NSServiceMenuIsReady(): boolean; function NSServiceMenuGetFilenames(): TStringList; procedure NSThemeChangedHandler(); {$ENDIF} procedure LoadWindowState; procedure SaveWindowState; procedure LoadToolbar(AToolBar: TKASToolBar); procedure SaveToolBar(AToolBar: TKASToolBar); procedure ShowLogWindow(Data: PtrInt); function IsCommandLineVisible: Boolean; procedure ShowCommandLine(AFocus: Boolean); procedure ConfigSaveSettings(bForce: Boolean); procedure ShowDrivesList(APanel: TFilePanelSelect); procedure ExecuteCommandLine(bRunInTerm: Boolean); procedure UpdatePrompt; procedure UpdateFreeSpace(Panel: TFilePanelSelect; Clear: Boolean); procedure ReLoadTabs(ANoteBook: TFileViewNotebook); procedure ShowOptionsLayout(Data: PtrInt); procedure ToggleFullscreenConsole; {en This function is called from various points to handle dropping files into the panel. It converts drop effects available on the system into TDragDropOperation operations. Handles freeing DropParams. } procedure DropFiles(var DropParams: TDropParams); {en Performs all drag&drop actions. Frees DropParams. } procedure DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); property Drives: TDrivesList read DrivesList; property SyncChangeDir: String write FSyncChangeDir; property Commands: TMainCommands read FCommands implements IFormCommands; property SelectedPanel: TFilePanelSelect read PanelSelected write SetPanelSelected; property LeftTabs: TFileViewNotebook read nbLeft; property RightTabs: TFileViewNotebook read nbRight; property MainSplitterPos: Double read FMainSplitterPos write SetMainSplitterPos; property StaticTitle: String read sStaticTitleBarString write sStaticTitleBarString; end; var frmMain: TfrmMain; Cons: TCustomPtyDevice = nil; implementation {$R *.lfm} uses Themes, uFileProcs, uShellContextMenu, fTreeViewMenu, uSearchResultFileSource, Math, LCLIntf, Dialogs, uGlobs, uLng, uMasks, fCopyMoveDlg, uQuickViewPanel, uShowMsg, uDCUtils, uLog, uGlobsPaths, LCLProc, uOSUtils, uPixMapManager, LazUTF8, uDragDropEx, uKeyboard, uFileSystemFileSource, fViewOperations, uMultiListFileSource, uFileSourceOperationTypes, uFileSourceCopyOperation, uFileSourceMoveOperation, uFileSourceProperty, uFileSourceExecuteOperation, uArchiveFileSource, uThumbFileView, uShellExecute, fSymLink, fHardLink, uExceptions, uUniqueInstance, Clipbrd, ShellCtrls, uFileSourceOperationOptionsUI, uDebug, uHotkeyManager, uFileSourceUtil, uTempFileSystemFileSource, Laz2_XMLRead, DCOSUtils, DCStrUtils, fOptions, fOptionsFrame, fOptionsToolbar, uClassesEx, uHotDir, uFileSorting, DCBasicTypes, foptionsDirectoryHotlist, uConnectionManager, fOptionsToolbarBase, fOptionsToolbarMiddle, fEditor, uColumns, StrUtils, uSysFolders, uColumnsFileView, dmHigh, uFileSourceOperationMisc {$IFDEF MSWINDOWS} , uShellFileSource, uNetworkThread {$ENDIF} ; const HotkeysCategory = 'Main'; DCToolItemClipboardHeader = 'DOUBLECMD#TOOLBAR#XMLDATA'; TCToolbarClipboardHeader = 'TOTALCMD#BAR#DATA'; DCToolbarClipboardHeader = 'DOUBLECMD#BAR#DATA'; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} var LastActiveWindow: TCustomForm = nil; {$ENDIF} {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} var CloseQueryResult: Boolean = False; {$ENDIF} {$IFDEF LCLGTK2} var MinimizedWindowButton: Boolean = False; {$ENDIF} var FunctionButtonsCaptions: array[0..7] of record ACaption: String; ACommand: String; end = ((ACaption: ''; ACommand: 'cm_View'), (ACaption: ''; ACommand: 'cm_Edit'), (ACaption: ''; ACommand: 'cm_Copy'), (ACaption: ''; ACommand: 'cm_Rename'), (ACaption: ''; ACommand: 'cm_MakeDir'), (ACaption: ''; ACommand: 'cm_Delete'), (ACaption: ''; ACommand: 'cm_RunTerm'), (ACaption: ''; ACommand: 'cm_Exit')); type { TFreeSpaceData } TFreeSpaceData = class Path: String; Result: Boolean; OnFinish: TDataEvent; Panel: TFilePanelSelect; FileSource: IFileSource; FreeSize, TotalSize : Int64; procedure GetFreeSpaceInThread; end; { TShellTreeView } TShellTreeView = class(ShellCtrls.TShellTreeView) protected function CanExpand(Node: TTreeNode): Boolean; override; function ShellTreeViewSort(Node1, Node2: TTreeNode): Integer; end; function HistoryIndexesToTag(aFileSourceIndex, aPathIndex: Integer): Longint; begin Result := (aFileSourceIndex << 16) or aPathIndex; end; procedure HistoryIndexesFromTag(aTag: Longint; out aFileSourceIndex, aPathIndex: Integer); begin aFileSourceIndex := aTag >> 16; aPathIndex := aTag and ((1<<16) - 1); end; { TFreeSpaceData } procedure TFreeSpaceData.GetFreeSpaceInThread; begin Result:= FileSource.GetFreeSpace(Path, FreeSize, TotalSize); if Assigned(Application) and not (AppDoNotCallAsyncQueue in Application.Flags) then Application.QueueAsyncCall(OnFinish, PtrInt(Self)); end; { TShellTreeView } function TShellTreeView.CanExpand(Node: TTreeNode): Boolean; begin Result:= inherited CanExpand(Node); if Result then Node.CustomSort(@ShellTreeViewSort); end; function TShellTreeView.ShellTreeViewSort(Node1, Node2: TTreeNode): Integer; begin Result:= CompareStrings(Node1.Text, Node2.Text, gSortNatural, gSortSpecial, gSortCaseSensitivity); end; { TfrmMain } procedure TfrmMain.FormCreate(Sender: TObject); function CreateNotebook(aParent: TWinControl; aSide: TFilePanelSelect): TFileViewNotebook; begin Result := TFileViewNotebook.Create(aParent, aSide); Result.Align := alClient; Result.Options := [nboHidePageListPopup]; {$if lcl_fullversion >= 1070000} Result.Options := Result.Options + [nboDoChangeOnSetIndex]; {$endif} Result.OnCloseTabClicked := @NotebookCloseTabClicked; Result.OnMouseDown := @nbPageMouseDown; Result.OnMouseUp := @nbPageMouseUp; Result.OnChange := @nbPageChanged; Result.OnDblClick := @pnlLeftRightDblClick; Result.OnDragOver:= @NotebookDragOver; Result.OnDragDrop:= @NotebookDragDrop; end; function GenerateTitle(): String; var R: Integer; ARevision, AServerName: String; begin if Length(UniqueInstance.ServernameByUser) > 0 then AServerName := ' [' + UniqueInstance.ServernameByUser + ']' else begin AServerName := EmptyStr; end; if TryStrToInt(dcRevision, R) then ARevision:= '~' + dcRevision else begin ARevision:= EmptyStr; end; Result := Format('%s%s %s%s', ['Double Commander', AServerName, Copy2Space(dcVersion), ARevision] ); end; var HMMainForm: THMForm; I: Integer; begin Application.OnException := @AppException; Application.OnActivate := @AppActivate; Application.OnDeActivate := @AppDeActivate; Application.OnShowHint := @AppShowHint; Application.OnEndSession := @AppEndSession; Application.OnQueryEndSession := @AppQueryEndSession; {$IF DEFINED(DARWIN)} // in LCL's DARWIN implements, there is no way but to Use LCL's method of dropping files // from external applications frmMain.OnDropFiles := @FormDropFiles; AllowDropFiles := true; // DARWIN support external DragDragSource only, not DragDragTarget {$ELSE} // Use LCL's method of dropping files from external // applications if we don't support it ourselves. if not IsExternalDraggingSupported then frmMain.OnDropFiles := @FormDropFiles; AllowDropFiles := not uDragDropEx.IsExternalDraggingSupported; {$ENDIF} {$IF DEFINED(DARWIN)} // MainForm receives in Mac OS closing events on system shortcut Command-Q // See details at http://doublecmd.sourceforge.net/mantisbt/view.php?id=712 Application.MainForm.OnClose := @frmMainClose; Application.MainForm.OnCloseQuery := @FormCloseQuery; {$ENDIF} ConvertToolbarBarConfig(gpCfgDir + 'default.bar'); CreateDefaultToolbar; sStaticTitleBarString := GenerateTitle(); // Remove the initial caption of the button, which is just a text of the associated action. // The text would otherwise be briefly shown before the drive button was updated. btnLeftDrive.Caption := ''; btnRightDrive.Caption := ''; //Have the correct button label to indicate root btnLeftRoot.Caption:=DirectorySeparator; btnRightRoot.Caption:=DirectorySeparator; for I := 0 to pnlKeys.ControlCount - 1 do FunctionButtonsCaptions[I].ACaption := pnlKeys.Controls[I].Caption; {$IF DEFINED(LCLGTK2)} // Workaround: "Layout and line" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=573 TreePanel.Visible := False; pnlLeftTools.Visible := False; pnlRightTools.Visible := False; PanelAllProgress.Visible := False; {$ENDIF} InitPropStorage(Self); PanelSelected:=fpLeft; seLogWindow.FixDefaultKeystrokes; HMMainForm := HotMan.Register(Self, HotkeysCategory); HotMan.Register(edtCommand, 'Command Line'); nbLeft := CreateNotebook(pnlLeft, fpLeft); nbRight := CreateNotebook(pnlRight, fpRight); FDrivesListPopup := TDrivesListPopup.Create(Self, Self); FDrivesListPopup.OnDriveSelected := @DriveListDriveSelected; FDrivesListPopup.OnClose := @DriveListClose; //NOTE: we don't check gOnlyOneAppInstance anymore, because cmdline option "--client" was implemented, // so, we should always listen for the messages if Assigned(UniqueInstance) then UniqueInstance.OnMessage:= @OnUniqueInstanceMessage; MainFormCreate(Self); // Load command line history edtCommand.Items.Assign(glsCmdLineHistory); // Initialize actions. actShowSysFiles.Checked := uGlobs.gShowSystemFiles; actHorizontalFilePanels.Checked := gHorizontalFilePanels; MainToolBar.AddToolItemExecutor(TKASCommandItem, @ToolbarExecuteCommand); MainToolBar.AddToolItemExecutor(TKASProgramItem, @ToolbarExecuteProgram); MiddleToolBar.AddToolItemExecutor(TKASCommandItem, @ToolbarExecuteCommand); MiddleToolBar.AddToolItemExecutor(TKASProgramItem, @ToolbarExecuteProgram); // Use the same tooltips for some left and right panel butttons. btnRightDirectoryHotlist.Hint := btnLeftDirectoryHotlist.Hint; btnRightHome.Hint := btnLeftHome.Hint; btnRightRoot.Hint := btnLeftRoot.Hint; btnRightUp.Hint := btnLeftUp.Hint; { *HotKeys* } if (HotMan.Forms.Count = 0) or (HotMan.Version < hkVersion) then LoadDefaultHotkeyBindings; // Register action list for main form hotkeys. HMMainForm.RegisterActionList(actionlst); { *HotKeys* } UpdateActionIcons; {$IF DEFINED(LCLCOCOA)} // 1. TCustomTabControl.GetControlClassDefaultSize() return 200 for Default Width // 2. on Cocoa, it is likely to cause TCocoaTabControl not wide enough to // accommodate all tabs loaded in LoadTabsXml() during startup. // 3. when setting PageIndex in LoadTabsXml(), it will cause an extra tab switch. // 4. and it will cause an extra directory to be monitored in FileView. // 5. the issue can be effectively avoided by setting a larger width. nbLeft.Width:= 2048; nbRight.Width:= 2048; {$ENDIF} LoadTabs; // Must be after LoadTabs TDriveWatcher.Initialize(GetWindowHandle(Application.MainForm)); TDriveWatcher.AddObserver(@OnDriveWatcherEvent); {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} // Fixes bug - [0000033] "DC cancels shutdown in KDE" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=33 QEventHook:= QObject_hook_create(TQtWidget(Self.Handle).Widget); QObject_hook_hook_events(QEventHook, @QObjectEventFilter); {$ENDIF} OperationsManager.AddEventsListener([omevOperationAdded, omevOperationRemoved], @OperationManagerNotify); UpdateWindowView; gFavoriteTabsList.AssociatedMainMenuItem := mnuFavoriteTabs; gFavoriteTabsList.RefreshAssociatedMainMenu; // Update selected drive and free space before main form is shown, // otherwise there is a bit of delay. UpdateTreeView; UpdateTreeViewPath; UpdateSelectedDrives; UpdateFreeSpace(fpLeft, True); UpdateFreeSpace(fpRight, True); ThemeServices.OnThemeChange:= @AppThemeChange; {$IF DEFINED(DARWIN)} InitNSServiceProvider( @OnNSServiceOpenWithNewTab, @NSServiceMenuIsReady, @NSServiceMenuGetFilenames ); InitNSThemeChangedObserver( @NSThemeChangedHandler ); createDarwinAppMenu; {$ENDIF} end; procedure TfrmMain.btnLeftClick(Sender: TObject); begin PanelButtonClick(Sender as TSpeedButton, FrameLeft); end; procedure TfrmMain.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.Commands.ExecuteCommand(cmd, []); end; procedure TfrmMain.btnF3MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (ssCtrl in Shift) and (gFonts[dcfFunctionButtons].Size > gFonts[dcfFunctionButtons].MinValue) then begin Dec(gFonts[dcfFunctionButtons].Size); UpdateGUIFunctionKeys; end; end; procedure TfrmMain.btnF3MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (ssCtrl in Shift) and (gFonts[dcfFunctionButtons].Size < gFonts[dcfFunctionButtons].MaxValue) then begin Inc(gFonts[dcfFunctionButtons].Size); UpdateGUIFunctionKeys; end; end; procedure TfrmMain.btnF8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Point: TPoint; begin if Button = mbRight then begin Point := (Sender as TControl).ClientToScreen(Classes.Point(X, Y)); ShowTrashContextMenu(Self, Point.X, Point.Y, nil); end; end; procedure TfrmMain.ConsoleSplitterMoved(Sender: TObject); var AHeight: Integer; begin AHeight:= nbConsole.Height + nbConsole.Tag - pnlCommand.Height; if AHeight > 0 then begin nbConsole.Height := AHeight; cmdConsole.Visible:= True; end else begin cmdConsole.Hide; nbConsole.Height := 0; end; end; procedure TfrmMain.dskToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ANotebook: TFileViewNotebook; begin if Button = mbMiddle then begin if Sender is TKASToolButton then begin if TKASToolButton(Sender).ToolBar = dskLeft then begin ANotebook:= nbLeft; end else if gDriveBar2 then begin ANotebook:= nbRight; end else begin ANotebook:= ActiveNotebook; end; Commands.DoNewTab(ANotebook); TKASToolButton(Sender).Click; end; end; end; procedure TfrmMain.mnuAllOperStopClick(Sender: TObject); begin OperationsManager.StopAll; end; procedure TfrmMain.mnuAllOperPauseClick(Sender: TObject); begin OperationsManager.PauseAll; end; procedure TfrmMain.mnuAllOperProgressClick(Sender: TObject); begin ShowOperationsViewer; end; procedure TfrmMain.mnuAllOperStartClick(Sender: TObject); begin OperationsManager.UnPauseAll; end; procedure TfrmMain.btnF8Click(Sender: TObject); begin if GetKeyShiftStateEx * KeyModifiersShortcut = [ssShift] then Commands.cm_Delete(['trashcan=reversesetting']) else Commands.cm_Delete([]); end; { TfrmMain.btnLeftDirectoryHotlistClick} //To make appear the Directory Hotlist popup menu when pressing "*" button on left // procedure TfrmMain.btnLeftDirectoryHotlistClick(Sender: TObject); var P:TPoint; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(fpLeft); gDirectoryHotlist.PopulateMenuWithHotDir(pmHotList,@HotDirSelected,@miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); p := Classes.Point(btnLeftDirectoryHotlist.Left,btnLeftDirectoryHotlist.Height); p := pnlLeftTools.ClientToScreen(p); pmHotList.PopUp(P.x,P.y); end; procedure TfrmMain.btnRightClick(Sender: TObject); begin PanelButtonClick(Sender as TSpeedButton, FrameRight); end; { TfrmMain.btnRightDirectoryHotlistClick} //To make appear the Directory Hotlist popup menu when pressing "*" button on right // procedure TfrmMain.btnRightDirectoryHotlistClick(Sender: TObject); var P:TPoint; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(fpRight); gDirectoryHotlist.PopulateMenuWithHotDir(pmHotList,@HotDirSelected,@miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); p := Classes.Point(btnRightDirectoryHotlist.Left,btnRightDirectoryHotlist.Height); p := pnlRightTools.ClientToScreen(p); pmHotList.PopUp(P.x,P.y); end; procedure TfrmMain.btnDriveMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; begin if Button = mbRight then with Sender as TSpeedButton do begin if (Tag >= 0) and (Tag < DrivesList.Count) then begin pt.X := X; pt.Y := Y; pt := ClientToScreen(pt); ShowDriveContextMenu(Parent, DrivesList[Tag], pt.X, pt.Y, nil); end; end; end; procedure TfrmMain.ConsoleSplitterCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); begin // ConsoleSplitter is trying to resize pnlCommand, // so NewSize is the new size of pnlCommand. // Instead, resize nbConsole by the same difference. nbConsole.Tag := NewSize; end; procedure TfrmMain.ConvertToolbarBarConfig(BarFileName: String); var ToolBarLoader: TKASToolBarIniLoader; MainToolBarNode: TXmlNode; begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if not Assigned(MainToolBarNode) then begin if mbFileExists(BarFileName) then begin ToolBarLoader := TKASToolBarIniLoader.Create(Commands.Commands); try ToolBarLoader.Load(BarFileName, MainToolBar, nil, @ConvertIniToolbarItem); SaveToolBar(MainToolBar); SaveGlobs; // Save toolbar and hotkeys mbRenameFile(BarFileName, BarFileName + '.obsolete'); finally ToolBarLoader.Free; end; end; end; end; procedure TfrmMain.dskRightToolButtonClick(Sender: TObject); var FileView : TFileView; begin if gDriveBar2 then FileView := FrameRight else FileView := ActiveFrame; PanelButtonClick(Sender as TKASToolButton, FileView); end; procedure TfrmMain.dskLeftRightToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var ToolItem: TKASToolItem; SourceFiles: TFiles; TargetFileSource: IFileSource; TargetPath: String; begin if Sender is TKASToolButton then begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; try ToolItem := TKASToolButton(Sender).ToolItem; if ToolItem is TKASDriveItem then begin TargetPath := TKASDriveItem(ToolItem).Drive^.Path; TargetFileSource := ParseFileSource(TargetPath, ActiveFrame.FileSource); TargetPath := IncludeTrailingPathDelimiter(TargetPath); if not Assigned(TargetFileSource) then TargetFileSource := TFileSystemFileSource.GetFileSource; case GetDropEffectByKeyAndMouse(GetKeyShiftStateEx, mbLeft, gDefaultDropEffect) of DropCopyEffect: Self.CopyFiles(ActiveFrame.FileSource, TargetFileSource, SourceFiles, TargetPath, gShowDialogOnDragDrop); DropMoveEffect: Self.MoveFiles(ActiveFrame.FileSource, TargetFileSource, SourceFiles, TargetPath, gShowDialogOnDragDrop); end; end; finally SourceFiles.Free; end; end; end; procedure TfrmMain.dskToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin btnDriveMouseUp(Sender, Button, Shift, X, Y); end; procedure TfrmMain.EditToolbarButton(Toolbar: TKASToolBar; Button: TKASToolButton); var Editor: TOptionsEditor; Options: IOptionsDialog; EditorClass: TOptionsEditorClass; begin if ToolBar = MainToolBar then EditorClass := TfrmOptionsToolbar else begin EditorClass := TfrmOptionsToolbarMiddle; end; Options := ShowOptions(EditorClass); Application.ProcessMessages; Editor := Options.GetEditor(EditorClass); if Assigned(Button) then begin (Editor as TfrmOptionsToolbarBase).SelectButton(Button.Tag); end; Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; procedure TfrmMain.lblAllProgressPctClick(Sender: TObject); begin ShowOperationsViewer; end; procedure TfrmMain.MainToolBarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var I: LongWord; SelectedFiles: TFiles = nil; Param: string; ToolItem: TKASToolItem; Toolbar: TKASToolBar; begin Toolbar:= (Sender as TKASToolButton).ToolBar; if (ssShift in GetKeyShiftState) then // Button was moved. SaveToolBar(Toolbar) else if (Sender is TKASToolButton) and not Draging then begin ToolItem := TKASToolButton(Sender).ToolItem; if ToolItem is TKASProgramItem then begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 0 then begin Param:= EmptyStr; for I := 0 to SelectedFiles.Count - 1 do begin // Workaround for not fully implemented TMultiListFileSource. if ActiveFrame.FileSource.IsClass(TMultiListFileSource) then Param := Param + QuoteStr(SelectedFiles[I].FullPath) + ' ' else Param := Param + QuoteStr(ActiveFrame.CurrentAddress + SelectedFiles[I].FullPath) + ' '; end; TKASProgramItem(ToolItem).Command := ReplaceEnvVars(ReplaceTilde(TKASProgramItem(ToolItem).Command)); Param := PrepareParameter(Param, nil, []); if not (Commands.Commands.ExecuteCommand(TKASProgramItem(ToolItem).Command, [Param]) = cfrSuccess) then ProcessExtCommandFork(TKASProgramItem(ToolItem).Command, Param, TKASProgramItem(ToolItem).StartPath); end; finally FreeAndNil(SelectedFiles); end; end; end; end; procedure TfrmMain.MainToolBarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); var aFile: TFile; tmp: Integer; ToolItem: TKASProgramItem; Toolbar: TKASToolBar; begin Toolbar:= (Sender as TKASToolButton).ToolBar; if (ssShift in GetKeyShiftState) then begin if not (Source is TKASToolButton) and not Draging then begin aFile := ActiveFrame.CloneActiveFile; try if Assigned(aFile) and aFile.IsNameValid then begin ToolItem := TKASProgramItem.Create; ToolItem.Command := aFile.FullPath; ToolItem.StartPath := aFile.Path; ToolItem.Icon := aFile.FullPath; ToolItem.Hint := ExtractOnlyFileName(aFile.Name); // ToolItem.Text := ExtractOnlyFileName(aFile.Name); Toolbar.InsertButton(Sender as TKASToolButton, ToolItem); NumberOfMoveButton := (Sender as TSpeedButton).Tag; NumberOfNewMoveButton := (Sender as TSpeedButton).Tag-1; Draging := True; Accept := True; end else begin Accept := False; Exit; end; finally FreeAndNil(aFile); end; end; if (Source is TKASToolButton) and (Toolbar <> TKASToolButton(Source).ToolBar) then begin Accept := False; Exit; end; if (NumberOfMoveButton <> (Sender as TSpeedButton).Tag) then begin Draging := True; if Source is TSpeedButton then Toolbar.MoveButton((Source as TSpeedButton).Tag, (Sender as TSpeedButton).Tag) else begin tmp:= (Sender as TSpeedButton).Tag; Toolbar.MoveButton(NumberOfNewMoveButton, (Sender as TSpeedButton).Tag); NumberOfNewMoveButton := tmp; end; NumberOfMoveButton := (Sender as TSpeedButton).Tag; Accept := True; end; end else begin Accept := not Draging and (Sender is TKASToolButton) and (TKASToolButton(Sender).ToolItem is TKASProgramItem); if Accept then begin aFile := ActiveFrame.CloneActiveFile; try Accept := Assigned(aFile) and aFile.IsNameValid; finally FreeAndNil(aFile); end; end; end; end; procedure TfrmMain.MainToolBarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssShift in Shift) and (Button = mbLeft) then begin (Sender as TKASToolButton).BeginDrag(False, 5); NumberOfMoveButton:= (Sender as TKASToolButton).Tag; end; Draging:= False; end; procedure TfrmMain.MainToolBarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then MainToolBarMouseUp(Sender, Button, Shift, X, Y); end; function TfrmMain.MainToolBarToolItemShortcutsHint(Sender: TObject; ToolItem: TKASNormalItem): String; begin if Sender = MainToolBar then Result := ShortcutsToText(TfrmOptionsToolbar.GetShortcuts(ToolItem)) else Result := ShortcutsToText(TfrmOptionsToolbarMiddle.GetShortcuts(ToolItem)); end; procedure TfrmMain.miLogMenuClick(Sender: TObject); begin case (Sender as TMenuItem).Tag of 0: seLogWindow.CopyToClipboard; 1: seLogWindow.SelectAll; 2: Commands.cm_ClearLogWindow([]); 3: ShowLogWindow(PtrInt(False)); end; end; procedure TfrmMain.miTrayIconExitClick(Sender: TObject); begin RestoreFromTray; Close; end; procedure TfrmMain.miTrayIconRestoreClick(Sender: TObject); begin RestoreFromTray; end; procedure TfrmMain.PanelButtonClick(Button: TSpeedButton; FileView: TFileView); begin with FileView do begin if Button.Caption = DirectorySeparator then Commands.DoChangeDirToRoot(FileView) else if Button.Caption = '..' then ChangePathToParent(True) else if Button.Caption = '~' then SetFileSystemPath(FileView, GetHomeDir); end; if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(FileView); end; procedure TfrmMain.ShellTreeViewSelect; begin ShellTreeView.Tag := 1; try SetFileSystemPath(ActiveFrame, (ShellTreeView as TShellTreeView).Path); finally ShellTreeView.Tag := 0; end; end; procedure TfrmMain.ShellTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then ShellTreeViewSelect; end; procedure TfrmMain.ShellTreeViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var AFile: TFile; AFiles: TFiles; APoint: TPoint; AFileName: String; begin {$IF DEFINED(MSWINDOWS)} if Button = mbRight then try AFileName:= ExcludeTrailingBackslash((ShellTreeView as TShellTreeView).Path); AFile:= TFileSystemFileSource.CreateFileFromFile(AFileName); try AFiles:= TFiles.Create(AFile.Path); AFiles.Add(AFile); APoint := ShellTreeView.ClientToScreen(Classes.Point(X, Y)); ShowContextMenu(ShellTreeView, AFiles, APoint.X, APoint.Y, False, nil); finally FreeAndNil(AFiles); end; except on E: EContextMenuException do ShowException(E) else; end; {$ENDIF} if Button = mbLeft then ShellTreeViewSelect; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin DCDebug('Destroying main form'); if Assigned(HotMan) then begin HotMan.UnRegister(edtCommand); HotMan.UnRegister(Self); end; OperationsManager.RemoveEventsListener([omevOperationAdded, omevOperationRemoved], @OperationManagerNotify); TDriveWatcher.RemoveObserver(@OnDriveWatcherEvent); TDriveWatcher.Finalize; DCDebug('Drive watcher finished'); // Close all tabs. CloseNotebook(LeftTabs); CloseNotebook(RightTabs); FreeAndNil(DrivesList); {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} QObject_hook_destroy(QEventHook); {$ENDIF} DCDebug('Main form destroyed'); end; procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean); var Index: Integer; AForm: TfrmEditor; begin if OperationsManager.OperationsCount > 0 then begin CanClose := MessageDlg(rsMsgFileOperationsActive, rsMsgFileOperationsActiveLong + LineEnding + rsMsgConfirmQuit, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes; end else if gConfirmQuit then begin CanClose := MessageDlg('', rsMsgConfirmQuit, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes; end else begin CanClose := True; end; if CanClose then begin for Index:= 0 to Screen.FormCount - 1 do begin if Screen.Forms[Index] is TfrmEditor then begin AForm:= TfrmEditor(Screen.Forms[Index]); if AForm.Editor.Modified then begin if Assigned(AForm.OnCloseQuery) then begin AForm.ShowOnTop; AForm.OnCloseQuery(AForm, CanClose); if not CanClose then Exit; end; end; end; end; end; {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} CloseQueryResult:= CanClose; {$ENDIF} end; procedure TfrmMain.FormDropFiles(Sender: TObject; const FileNames: array of String); var TargetFileView: TFileView = nil; TargetControl: TControl; I: Integer; Files: TFiles = nil; FileNamesList: TStringList = nil; Point: TPoint; DropParams: TDropParams; begin Point.x := 0; Point.y := 0; TargetControl := FindLCLControl(Mouse.CursorPos); while TargetControl <> nil do begin if TargetControl = FrameLeft then begin // drop on left panel TargetFileView := FrameLeft; break; end else if TargetControl = FrameRight then begin // drop on right panel TargetFileView := FrameRight; break; end; TargetControl := TargetControl.Parent; end; if Assigned(TargetFileView) then try // fill file list by files FileNamesList := TStringList.Create; for I := Low(FileNames) to High(FileNames) do begin if Length(FileNames[I]) > 0 then FileNamesList.Add(FileNames[I]); end; if FileNamesList.Count > 0 then try Files := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(FileNamesList[0]), FileNamesList); if Files.Count > 0 then begin GetCursorPos(Point); DropParams := TDropParams.Create( Files, GetDropEffectByKeyAndMouse(GetKeyShiftState, mbLeft, gDefaultDropEffect), Point, False, nil, TargetFileView, TargetFileView.FileSource, TargetFileView.CurrentPath); DropFiles(DropParams); end; except on e: EFileNotFound do MessageDlg(e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(Files); FreeAndNil(FileNamesList); end; end; procedure TfrmMain.DropFiles(var DropParams: TDropParams); begin if Assigned(DropParams) then begin if DropParams.Files.Count > 0 then begin case DropParams.DropEffect of DropMoveEffect: DropParams.TargetPanel.DoDragDropOperation(ddoMove, DropParams); DropCopyEffect: DropParams.TargetPanel.DoDragDropOperation(ddoCopy, DropParams); DropLinkEffect: DropParams.TargetPanel.DoDragDropOperation(ddoSymLink, DropParams); DropAskEffect: begin // Ask the user what he would like to do by displaying a menu. // Returns immediately after showing menu. PopupDragDropMenu(DropParams); end; else FreeAndNil(DropParams); end; end else FreeAndNil(DropParams); end; end; procedure TfrmMain.DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); var SourceFileName, TargetFileName: string; begin try with DropParams do begin if Assigned(TargetFileSource) then begin {$IF DEFINED(MSWINDOWS)} // If drop from external application and from temporary directory then // in most cases it is a drop from archiver application that extracting // files via temporary directory and requires run operation in the main thread // See http://doublecmd.sourceforge.net/mantisbt/view.php?id=1124 if (GetDragDropType = ddtExternal) and (Operation in [ddoMove, ddoCopy]) and IsInPath(GetTempDir, DropParams.Files[0].FullPath, True, True) then begin if gShowDialogOnDragDrop then begin case Operation of ddoMove: SourceFileName := GetFileDlgStr(rsMsgRenSel, rsMsgRenFlDr, DropParams.Files); ddoCopy: SourceFileName := GetFileDlgStr(rsMsgCpSel, rsMsgCpFlDr, DropParams.Files); end; if MessageDlg(SourceFileName, mtConfirmation, [mbOK, mbCancel], 0) <> mrOK then Exit; end; case Operation of ddoMove: Self.MoveFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, False, ModalQueueId); ddoCopy: Self.CopyFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, False, ModalQueueId); end; end else {$ENDIF} case Operation of ddoMove: if GetDragDropType = ddtInternal then begin if Self.MoveFiles(SourcePanel.FileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop) then begin SourcePanel.MarkFiles(False); end; end else begin Self.MoveFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop); end; ddoCopy: if GetDragDropType = ddtInternal then begin if Self.CopyFiles(SourcePanel.FileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop) then begin SourcePanel.MarkFiles(False); end; end else begin Self.CopyFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop); end; ddoSymLink, ddoHardLink: begin // Only for filesystem. if ((GetDragDropType = ddtExternal) or (SourcePanel.FileSource.IsClass(TFileSystemFileSource))) and (TargetFileSource.IsClass(TFileSystemFileSource)) then begin // TODO: process multiple files SourceFileName := Files.Items[0].FullPath; TargetFileName := TargetPath + ExtractFileName(SourceFileName); if ((Operation = ddoSymLink) and ShowSymLinkForm(Self, SourceFileName, TargetFileName, TargetPath)) or ((Operation = ddoHardLink) and ShowHardLinkForm(Self, SourceFileName, TargetFileName, TargetPath)) then TargetFileSource.Reload(TargetPath); end else begin msgWarning(rsMsgErrNotSupported); end; end; end; end else msgWarning(rsMsgErrNotSupported); end; finally FreeAndNil(DropParams); end; end; procedure TfrmMain.FormUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); begin // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; // Check for certain Ascii keys. if (not ((Length(UTF8Key) = 1) and (UTF8Key[1] in ['-', '*', '+', #0..#32]))) then begin if (gKeyTyping[ktmNone] = ktaCommandLine) {$IFDEF MSWINDOWS} // Allow entering international characters with Ctrl+Alt on Windows, // if there is no action for Ctrl+Alt and command line typing has no modifiers. or (HasKeyboardAltGrKey and (GetKeyShiftStateEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmCtrlAlt] = ktaNone)) {$ENDIF} then begin TypeInCommandLine(UTF8Key); UTF8Key := ''; end; end end; {$IF DEFINED(LCLGTK2)} procedure TfrmMain.WindowStateUpdate(Data: PtrInt); begin Resizing(lastWindowState); end; {$ENDIF} procedure TfrmMain.FormWindowStateChange(Sender: TObject); begin if FUpdateDiskCount and (WindowState <> wsMinimized) then begin UpdateDiskCount; FUpdateDiskCount:= False; end; {$IF DEFINED(LCLGTK2)} if MinimizedWindowButton then begin MinimizedWindowButton:= False; Application.QueueAsyncCall(@WindowStateUpdate, 0); Exit; end; {$ENDIF} if WindowState = wsMinimized then begin // Minimized MainToolBar.Top:= 0; // restore toolbar position if not HiddenToTray then begin {$IF DEFINED(LCLGTK2)} MinimizedWindowButton:= True; {$ENDIF} if gMinimizeToTray or gAlwaysShowTrayIcon then begin HideToTray; end; end else begin // If we get wsMinimized while HiddenToTray is true, // then this means it was sent by LCL when a hidden, minimized window was shown. // We don't react to this message in this case. HiddenToTray := False; {$IF DEFINED(LCLGTK2)} Application.QueueAsyncCall(@WindowStateUpdate, 0); {$ENDIF} end; end else begin // Not minimized // save window state before minimize for // future loading after restore from tray lastWindowState:=WindowState; HiddenToTray := False; end; end; procedure TfrmMain.MainSplitterDblClick(Sender: TObject); begin // To prevent MainSplitterMouseUp processing MainSplitterLeftMouseBtnDown:=false; MainSplitter.ParentColor:=true; // Set splitter to 50/50 Commands.DoPanelsSplitterPerPos(50); end; procedure TfrmMain.MainSplitterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button=mbLeft) and (not MainSplitterLeftMouseBtnDown) then begin // Under Linux MainSplitter.Color:=clBlack Doesn't work MainSplitter.ParentColor:=true; MainSplitter.Color:=ColorToRGB(clBlack); MainSplitterMouseDownX:=X; MainSplitterMouseDownY:=Y; MainSplitterLeftMouseBtnDown:=true; end; end; procedure TfrmMain.MainSplitterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Rect: TRect; sHint: String; Delta: Integer; APoint: TPoint; Moved: Boolean = False; begin if MainSplitterLeftMouseBtnDown then begin if not gHorizontalFilePanels and (MainSplitter.Left + X > MainSplitter.Width) and (MainSplitter.Left + X + MainSplitter.Width < pnlNotebooks.Width) then begin MainSplitter.Left := MainSplitter.Left + X - MainSplitterMouseDownX; Moved := True; end else if gHorizontalFilePanels and (MainSplitter.Top + Y > MainSplitter.Height) and (MainSplitter.Top + Y + MainSplitter.Height < pnlNotebooks.Height) then begin MainSplitter.Top := MainSplitter.Top + Y - MainSplitterMouseDownY; Moved := True; end; if Moved then begin // create hint if not Assigned(MainSplitterHintWnd) then begin MainSplitterHintWnd := THintWindow.Create(nil); MainSplitterHintWnd.Color := Application.HintColor; end; // calculate percent if not gHorizontalFilePanels then begin Delta:= IfThen(MiddleToolBar.Visible, MiddleToolBar.Width); FMainSplitterPos:= MainSplitter.Left * 100 / (pnlNotebooks.Width-MainSplitter.Width - Delta); end else begin Delta:= IfThen(MiddleToolBar.Visible, MiddleToolBar.Height); FMainSplitterPos:= MainSplitter.Top * 100 / (pnlNotebooks.Height-MainSplitter.Height - Delta); end; // generate hint text sHint:= FloatToStrF(FMainSplitterPos, ffFixed, 15, 1) + '%'; // calculate hint position Rect:= MainSplitterHintWnd.CalcHintRect(200, sHint, nil); APoint:= Mouse.CursorPos; with Rect do begin Right:= APoint.X + 8 + Right; Bottom:= APoint.Y + 12 + Bottom; Left:= APoint.X + 8; Top:= APoint.Y + 12; end; // show hint MainSplitterHintWnd.ActivateHint(Rect, sHint); end; end; end; procedure TfrmMain.MainSplitterMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // hide and destroy hint if Assigned(MainSplitterHintWnd) then begin MainSplitterHintWnd.Hide; FreeAndNil(MainSplitterHintWnd); end; if (MainSplitterLeftMouseBtnDown) then begin MainSplitter.ParentColor:=true; MainSplitterLeftMouseBtnDown:=false; if not FResizingFilePanels then begin FResizingFilePanels := True; if not gHorizontalFilePanels then pnlLeft.Width := MainSplitter.Left else pnlLeft.Height := MainSplitter.Top; FResizingFilePanels := False; end; end; end; procedure TfrmMain.MainTrayIconClick(Sender: TObject); begin // Only react to clicks if the icon is not scheduled to be hidden. if not HidingTrayIcon then begin if WindowState = wsMinimized then begin RestoreFromTray; end else begin MinimizeWindow; HideToTray; end; end; end; { TfrmMain.lblDriveInfoDblClick } //Shows the Directory Hotlist at the cursor position after double-clicking the panel. //This is NOT like TC but was here as legacy in DC. Let it there for respect to original authors. //Double-clicking on the "FPathLabel" of the "TFileViewHeader" does the same as in TC and is implemented now. // procedure TfrmMain.lblDriveInfoDblClick(Sender: TObject); begin if tb_activate_panel_on_click in gDirTabOptions then begin if Sender = lblRightDriveInfo then SetActiveFrame(fpRight) else if Sender = lblLeftDriveInfo then SetActiveFrame(fpLeft); end; Commands.cm_DirHotList(['position=cursor']); end; procedure TfrmMain.LeftDriveBarExecuteDrive(ToolItem: TKASToolItem); var DriveItem: TKASDriveItem; begin DriveItem := ToolItem as TKASDriveItem; SetPanelDrive(fpLeft, DriveItem.Drive, True); end; procedure TfrmMain.MainToolBarDragDrop(Sender, Source: TObject; X, Y: Integer); var aFile: TFile; ToolItem: TKASProgramItem; Toolbar: TKASToolBar absolute Sender; begin if not (Source is TSpeedButton) and not Draging then begin aFile := ActiveFrame.CloneActiveFile; try if Assigned(aFile) and aFile.IsNameValid then begin ToolItem := TKASProgramItem.Create; ToolItem.Command := GetToolbarFilenameToSave(tpmeCommand, aFile.FullPath); ToolItem.StartPath := GetToolbarFilenameToSave(tpmeStartingPath, aFile.Path); ToolItem.Hint := ExtractOnlyFileName(aFile.Name); // ToolItem.Text := ExtractOnlyFileName(aFile.Name); ToolItem.Icon := GetToolbarFilenameToSave(tpmeIcon, aFile.FullPath); Toolbar.AddButton(ToolItem); end; finally FreeAndNil(aFile); end; end; SaveToolBar(Toolbar); Draging := False; end; procedure TfrmMain.MainToolBarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var aFile: TFile; begin if (Source is TSpeedButton) then Accept := False else begin aFile := ActiveFrame.CloneActiveFile; try Accept := Assigned(aFile) and aFile.IsNameValid; finally FreeAndNil(aFile); end; end; end; function TfrmMain.MainToolBarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASNormalItem then Result := PixMapManager.LoadBitmapEnhanced(TKASNormalItem(ToolItem).Icon, iIconSize, True, clBackColor, nil) else Result := nil; end; function TfrmMain.MainToolBarLoadButtonOverlay(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASMenuItem then Result := PixMapManager.LoadBitmapEnhanced('emblem-symbolic-link', iIconSize, True, clBackColor, nil) else Result := nil; end; procedure TfrmMain.tbDeleteClick(Sender: TObject); var Toolbar: TKASToolBar; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then begin if msgYesNo(Format(rsMsgDelSel, [Button.Hint])) then begin Toolbar:= Button.ToolBar; ToolBar.RemoveButton(Button); SaveToolBar(Toolbar); end; end; end; procedure TfrmMain.dskLeftToolButtonClick(Sender: TObject); begin PanelButtonClick(Sender as TKASToolButton, FrameLeft); end; procedure TfrmMain.MainToolBarMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Point : TPoint; begin case Button of mbRight: begin Point.X := X; Point.Y := Y; Point := (Sender as TControl).ClientToScreen(Point); if Sender is TKASToolButton then begin pmToolBar.Tag := PtrInt(Sender); pmToolBar.PopupComponent := TKASToolButton(Sender).ToolBar; end else begin pmToolBar.Tag := 0; pmToolBar.PopupComponent := TComponent(Sender); end; pmToolBar.PopUp(Point.X, Point.Y); end; end; end; procedure TfrmMain.frmMainClose(Sender: TObject; var CloseAction: TCloseAction); begin // Process all queued asynchronous events before closing // (frmMainAfterShow, nbPageAfterMouseDown, etc.). Application.ProcessMessages; if tb_close_duplicate_when_closing in gDirTabOptions then begin Commands.cm_CloseDuplicateTabs(['LeftTabs']); Commands.cm_CloseDuplicateTabs(['RightTabs']); end; if gSaveConfiguration then ConfigSaveSettings(False); FreeAndNil(Cons); Application.Terminate; end; procedure TfrmMain.frmMainAfterShow(Sender: TObject); begin OnPaint := nil; if Assigned(ActiveFrame) then ActiveFrame.SetFocus else begin DCDebug('ActiveFrame = nil'); end; HiddenToTray := False; end; procedure TfrmMain.frmMainShow(Sender: TObject); begin DCDebug('frmMain.frmMainShow'); {$IF NOT (DEFINED(LCLWIN32) or DEFINED(LCLGTK2) or DEFINED(LCLCOCOA) OR (DEFINED(DARWIN) and DEFINED(LCLQT)))} OnPaint := @frmMainAfterShow; {$ELSE} Application.QueueAsyncCall(TDataEvent(@frmMainAfterShow), 0); {$ENDIF} end; procedure TfrmMain.mnuDropClick(Sender: TObject); var DropParamsRef: TDropParams; begin if (Sender is TMenuItem) and Assigned(FDropParams) then begin // Make a copy of the reference to parameters and clear FDropParams, // so that they're not destroyed if pmDropMenuClose is called while we're processing. DropParamsRef := FDropParams; FDropParams := nil; // release ownership with DropParamsRef do begin if (Sender as TMenuItem).Name = 'miMove' then begin TargetPanel.DoDragDropOperation(ddoMove, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miCopy' then begin TargetPanel.DoDragDropOperation(ddoCopy, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miSymLink' then begin TargetPanel.DoDragDropOperation(ddoSymLink, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miHardLink' then begin TargetPanel.DoDragDropOperation(ddoHardLink, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miCancel' then begin FreeAndNil(DropParamsRef); end; end; //with end; end; procedure TfrmMain.PopupDragDropMenu(var DropParams: TDropParams); begin // Disposing of the params is handled in pmDropMenuClose or mnuDropClick. if Assigned(DropParams) then begin FDropParams := DropParams; DropParams := nil; pmDropMenu.PopUp(FDropParams.ScreenDropPoint.X, FDropParams.ScreenDropPoint.Y); end; end; procedure TfrmMain.pmDropMenuClose(Sender: TObject); begin // Free drop parameters given to drop menu. FreeAndNil(FDropParams); end; procedure TfrmMain.mnuSplitterPercentClick(Sender: TObject); begin with (Sender as TMenuItem) do begin Commands.DoPanelsSplitterPerPos(Tag); end; end; procedure TfrmMain.mnuTabMenuExecute(Sender: TObject); begin (Sender as TAction).OnExecute:= @actExecute; end; procedure TfrmMain.mnuTabMenuClick(Sender: TObject); var Cmd: String; MenuItem: TMenuItem; NoteBook: TFileViewNotebook; begin MenuItem := (Sender as TMenuItem); NoteBook := (pmTabMenu.Parent as TFileViewNotebook); // pmTabMenu.Tag stores tab page nr where the menu was activated. if MenuItem = miCloseTab then Commands.DoCloseTab(NoteBook, pmTabMenu.Tag) else if MenuItem = miRenameTab then Commands.DoRenameTab(NoteBook.Page[pmTabMenu.Tag]) else if MenuItem = miTabOptionNormal then NoteBook.Page[pmTabMenu.Tag].LockState := tlsNormal else if MenuItem = miTabOptionPathLocked then NoteBook.Page[pmTabMenu.Tag].LockState := tlsPathLocked else if MenuItem = miTabOptionPathResets then NoteBook.Page[pmTabMenu.Tag].LockState := tlsPathResets else if MenuItem = miTabOptionDirsInNewTab then NoteBook.Page[pmTabMenu.Tag].LockState := tlsDirsInNewTab else begin Cmd:= MenuItem.Action.Name; Cmd:= 'cm_' + Copy(Cmd, 4, Length(Cmd) - 3); Commands.Commands.ExecuteCommand(Cmd, NoteBook.Name); end; // On click first the OnClick and then the Action.OnExecute is called MenuItem.Action.OnExecute:= @mnuTabMenuExecute; end; procedure TfrmMain.nbPageAfterMouseDown(Data: PtrInt); var Notebook: TFileViewNotebook; begin if TObject(Data) is TFileViewNotebook then begin Notebook := TObject(Data) as TFileViewNotebook; if (Notebook = nbLeft) and (FrameLeft <> nil) then begin if PanelSelected = fpLeft then // same panel FrameLeft.SetFocus else if (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(fpLeft) else FrameRight.SetFocus; end; if (Notebook = nbRight) and (FrameRight <> nil) then begin if PanelSelected = fpRight then // same panel FrameRight.SetFocus else if (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(fpRight) else FrameLeft.SetFocus; end; end; end; procedure TfrmMain.nbPageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); {$IFNDEF LCLCOCOA} begin {$ELSE} var Notebook: TFileViewNotebook; TabNr: Integer; begin Notebook := TFileViewNotebook(Sender); TabNr := Notebook.IndexOfPageAt(Point(X, Y)); if TabNr <> -1 then Notebook.ActivePageIndex := TabNr; {$ENDIF} Application.QueueAsyncCall(@nbPageAfterMouseDown, PtrInt(Sender)); end; procedure TfrmMain.nbPageChanged(Sender: TObject); var Notebook: TFileViewNotebook; Page: TFileViewPage; begin Notebook := Sender as TFileViewNotebook; Page := Notebook.ActivePage; if Assigned(Page) then begin if Page.LockState = tlsPathResets then // if locked with directory change ChooseFileSource(Page.FileView, Page.LockPath); // Update selected drive only on non-active panel, // because active panel is updated on focus change. if (PanelSelected <> Notebook.Side) and not (tb_activate_panel_on_click in gDirTabOptions) then begin UpdateSelectedDrive(Notebook); UpdateFreeSpace(Notebook.Side, True); end; end; QuickViewClose; if Visible then UpdatePrompt; UpdateTreeViewPath; UpdateMainTitleBar; end; procedure TfrmMain.nbPageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var PopUpPoint: TPoint; NoteBook: TFileViewNotebook; TabNr: Integer; begin NoteBook := Sender as TFileViewNotebook; case Button of mbMiddle: begin TabNr := NoteBook.IndexOfPageAt(Point(X, Y)); if TabNr <> -1 then begin Commands.DoCloseTab(NoteBook, TabNr); end; end; mbRight: begin TabNr := NoteBook.IndexOfPageAt(Point(X, Y)); if TabNr <> -1 then begin PopUpPoint := NoteBook.ClientToScreen(Point(X, Y)); // Check tab options items. case NoteBook.Page[TabNr].LockState of tlsNormal: miTabOptionNormal.Checked := True; tlsPathLocked: miTabOptionPathLocked.Checked := True; tlsDirsInNewTab: miTabOptionDirsInNewTab.Checked := True; tlsPathResets: miTabOptionPathResets.Checked := True; end; pmTabMenu.Parent := NoteBook; pmTabMenu.Tag := TabNr; pmTabMenu.PopUp(PopUpPoint.x, PopUpPoint.y); end; end; end; end; procedure TfrmMain.NotebookDragDrop(Sender, Source: TObject; X, Y: Integer); var ATabIndex: Integer; TargetPath: String; SourceFiles: TFiles; TargetFileSource: IFileSource; ANotebook: TFileViewNotebook absolute Sender; begin if (Source is TWinControl) and (TWinControl(Source).Parent is TFileView) then begin ATabIndex := ANotebook.IndexOfPageAt(Classes.Point(X, Y)); if (ATabIndex > -1) then begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; try begin TargetPath := ANotebook.View[ATabIndex].CurrentPath; TargetFileSource := ANotebook.View[ATabIndex].FileSource; case GetDropEffectByKeyAndMouse(GetKeyShiftStateEx, mbLeft, gDefaultDropEffect) of DropCopyEffect: Self.CopyFiles(ActiveFrame.FileSource, TargetFileSource, SourceFiles, TargetPath, gShowDialogOnDragDrop); DropMoveEffect: Self.MoveFiles(ActiveFrame.FileSource, TargetFileSource, SourceFiles, TargetPath, gShowDialogOnDragDrop); end; end; finally SourceFiles.Free; end; end; end; end; procedure TfrmMain.NotebookDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var ATabIndex: Integer; APage: TFileViewPage; ANotebook: TFileViewNotebook absolute Sender; begin Accept := False; if (Source is TWinControl) and (TWinControl(Source).Parent is TFileView) then begin ATabIndex := ANotebook.IndexOfPageAt(Classes.Point(X, Y)); if (ATabIndex > -1) then begin APage:= ANotebook.Page[ATabIndex]; Accept := (APage.FileView <> TWinControl(Source).Parent) and ((APage.LockState = tlsNormal) or (APage.LockPath = APage.FileView.CurrentPath)); end; end; end; procedure TfrmMain.NotebookCloseTabClicked(Sender: TObject); begin with (Sender As TFileViewPage) do if PageIndex <> -1 then begin RemovePage(Notebook, PageIndex); end; end; procedure TfrmMain.ConvertIniToolbarItem(Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String); procedure ConvertHotkeys(CommandItem: TKASCommandItem; Hotkeys: THotkeys; SearchHotkey: THotkey); var Hotkey: THotkey; begin Hotkey := Hotkeys.FindByContents(SearchHotkey); if Assigned(Hotkey) then begin Hotkey.Command := 'cm_ExecuteToolbarItem'; Hotkey.Params := nil; SetValue(Hotkey.Params, 'ToolItemID', CommandItem.ID); end; end; var HMForm: THMForm; Hotkey: THotkey; CommandItem: TKASCommandItem; MenuItem: TKASMenuItem; BarFileName: String; begin if Item is TKASCommandItem then begin CommandItem := TKASCommandItem(Item); // Convert toolbar hotkey to use ID as parameter. if Shortcut <> '' then begin Hotkey := THotkey.Create; try Hotkey.Command := 'cm_Int_RunCommandFromBarFile'; AddString(Hotkey.Shortcuts, Shortcut); Hotkey.Params := Hotkey.Shortcuts; HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then ConvertHotkeys(CommandItem, HMForm.Hotkeys, Hotkey); finally Hotkey.Free; end; end; if ((CommandItem.Command = 'cm_OpenBar') or (CommandItem.Command = 'cm_ShowButtonMenu')) and (Length(CommandItem.Params) > 0) then begin BarFileName := CommandItem.Params[0]; if Pos(PathDelim, BarFileName) <> 0 then BarFileName := GetCmdDirFromEnvVar(BarFileName) else BarFileName := gpCfgDir + BarFileName; if mbFileExists(BarFileName) then begin MenuItem := TKASMenuItem.Create; MenuItem.Assign(Item); // Copy whatever is possible from Command item Loader.Load(BarFileName, nil, MenuItem, @ConvertIniToolbarItem); mbRenameFile(BarFileName, BarFileName + '.obsolete'); Item.Free; Item := MenuItem; end; end; end; end; procedure TfrmMain.FormKeyPress(Sender: TObject; var Key: Char); var ModifierKeys: TShiftState; begin // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; ModifierKeys := GetKeyShiftStateEx; if gCmdLine and // If command line is enabled (GetKeyTypingAction(ModifierKeys) = ktaCommandLine) and not ((Key in ['-', '*', '+', #0..#32]) and (Trim(edtCommand.Text) = '')) then begin TypeInCommandLine(Key); Key := #0; end; end; function TfrmMain.ActiveFrame: TFileView; begin case PanelSelected of fpLeft: Result := FrameLeft; fpRight: Result := FrameRight; else assert(false,'Bad active frame'); end; end; function TfrmMain.NotActiveFrame: TFileView; begin case PanelSelected of fpRight: Result := FrameLeft; fpLeft: Result := FrameRight; else assert(false,'Bad active frame'); Result:=FrameLeft;// only for compilator warning; end; end; function TfrmMain.ActiveNotebook: TFileViewNotebook; begin case PanelSelected of fpLeft: Result := nbLeft; fpRight: Result := nbRight; else assert(false,'Bad active notebook'); end; end; function TfrmMain.NotActiveNotebook: TFileViewNotebook; begin case PanelSelected of fpLeft: Result := nbRight; fpRight: Result := nbLeft; else assert(false,'Bad active notebook'); end; end; function TfrmMain.FrameLeft: TFileView; begin Result := nbLeft.ActiveView; end; function TfrmMain.FrameRight: TFileView; begin Result := nbRight.ActiveView; end; procedure TfrmMain.ForEachView(CallbackFunction: TForEachViewFunction; UserData: Pointer); procedure EnumerateNotebook(ANoteBook: TFileViewNotebook); var i: Integer; begin for i := 0 to ANoteBook.PageCount - 1 do CallbackFunction(ANoteBook.View[i], UserData); end; begin EnumerateNotebook(nbLeft); EnumerateNotebook(nbRight); end; procedure TfrmMain.GetListOpenedPaths(const APaths: TStringList); procedure GetNotebookPaths(ANoteBook: TFileViewNotebook); var S: String; I: Integer; begin for I := 0 to ANoteBook.PageCount - 1 do begin S:= ANoteBook.View[I].CurrentPath; APaths.Add(S); end; end; begin APaths.Clear; GetNotebookPaths(nbLeft); GetNotebookPaths(nbRight); end; procedure TfrmMain.AppException(Sender: TObject; E: Exception); begin WriteExceptionToErrorFile; ShowExceptionDialog; end; procedure TfrmMain.AppShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); begin // Refresh monitor list Screen.UpdateMonitors; // Show hint only when application is active CanShow:= Application.Active; end; constructor TfrmMain.Create(TheOwner: TComponent); begin FMainSplitterPos := 50.0; inherited Create(TheOwner); FCommands := TMainCommands.Create(Self, actionLst); if Assigned(Application.Icon) then begin MainTrayIcon.Icon.Assign(Application.Icon); end; Screen.Cursors[crArrowCopy] := LoadCursorFromLazarusResource('ArrowCopy'); Screen.Cursors[crArrowMove] := LoadCursorFromLazarusResource('ArrowMove'); Screen.Cursors[crArrowLink] := LoadCursorFromLazarusResource('ArrowLink'); end; procedure TfrmMain.AfterConstruction; begin FResizingFilePanels:= True; inherited AfterConstruction; FResizingFilePanels:= False; pnlNotebooksResize(pnlNotebooks); end; procedure TfrmMain.UpdateActionIcons; var I: Integer; imgIndex: Integer; iconsDir: String; fileName: String; iconImg: TPicture; actionName: TComponentName; begin if not gIconsInMenus then Exit; actionLst.Images := nil; pmTabMenu.Images := nil; mnuMain.Images := nil; imgLstActions.Clear; // Temporarily while feature is not implemented // http://doublecmd.sourceforge.net/mantisbt/view.php?id=11 fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'actions'; if not mbDirectoryExists(iconsDir) then Exit; iconImg := TPicture.Create; try imgLstActions.Width := gIconsInMenusSize; imgLstActions.Height := gIconsInMenusSize; actionLst.Images := imgLstActions; pmTabMenu.Images := imgLstActions; mnuMain.Images := imgLstActions; for I:= 0 to actionLst.ActionCount - 1 do begin actionName := UTF8LowerCase(actionLst.Actions[I].Name); fileName := iconsDir + PathDelim + 'cm_' + UTF8Copy(actionName, 4, Length(actionName) - 3) + '.png'; if mbFileExists(fileName) then try iconImg.LoadFromFile(fileName); imgIndex := imgLstActions.Add(iconImg.Bitmap, nil); if imgIndex >= 0 then begin TAction(actionLst.Actions[I]).ImageIndex := imgIndex; end; except // Skip end; end; finally FreeAndNil(iconImg); end; end; procedure TfrmMain.UpdateHotDirIcons; var I: Integer; iconsDir: String; fileName: String; iconImg: TPicture; begin pmHotList.Images:=nil; { TODO -oDB : The images of popup menu in configuration should also be nilled to be correct } imgLstDirectoryHotlist.Clear; fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'actions'; if not mbDirectoryExists(iconsDir) then Exit; iconImg := TPicture.Create; try fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'dirhotlist'; imgLstDirectoryHotlist.Width := gIconsInMenusSize; imgLstDirectoryHotlist.Height := gIconsInMenusSize; pmHotList.Images:=imgLstDirectoryHotlist; for I:=0 to pred(length(ICONINDEXNAME)) do begin filename:=iconsDir+PathDelim+ICONINDEXNAME[I]+'.png'; if mbFileExists(fileName) then try iconImg.LoadFromFile(fileName); imgLstDirectoryHotlist.Add(iconImg.Bitmap, nil); except // Skip end; end; finally FreeAndNil(iconImg); end; end; procedure TfrmMain.CreateDefaultToolbar; var AToolbar: TKASToolBar; procedure AddCommand(const Command: String); var CommandItem: TKASCommandItem; begin CommandItem := TKASCommandItem.Create(Commands.Commands); CommandItem.Icon := UTF8LowerCase(Command); CommandItem.Command := Command; // Leave CommandItem.Hint empty. It will be loaded at startup based on language. AToolbar.AddButton(CommandItem); end; procedure AddSeparator(Style: Boolean = False); var SeparatorItem: TKASSeparatorItem; begin SeparatorItem:= TKASSeparatorItem.Create; SeparatorItem.Style:= Style; AToolbar.AddButton(SeparatorItem); end; var MainToolBarNode: TXmlNode; begin if MainToolBar.ButtonCount = 0 then begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/' + MainToolBar.Name, False); if not Assigned(MainToolBarNode) then begin AToolbar := MainToolBar; AddCommand('cm_Refresh'); AddCommand('cm_RunTerm'); AddCommand('cm_Options'); AddSeparator; AddCommand('cm_BriefView'); AddCommand('cm_ColumnsView'); AddCommand('cm_ThumbnailsView'); AddSeparator; AddCommand('cm_FlatView'); AddSeparator; AddCommand('cm_ViewHistoryPrev'); AddCommand('cm_ViewHistoryNext'); AddSeparator; AddCommand('cm_MarkPlus'); AddCommand('cm_MarkMinus'); AddCommand('cm_MarkInvert'); AddSeparator; AddCommand('cm_PackFiles'); AddCommand('cm_ExtractFiles'); AddSeparator; AddCommand('cm_NetworkConnect'); AddCommand('cm_Search'); AddCommand('cm_MultiRename'); AddCommand('cm_SyncDirs'); AddCommand('cm_CopyFullNamesToClip'); SaveToolBar(MainToolBar); end; end; if MiddleToolBar.ButtonCount = 0 then begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/' + MiddleToolBar.Name, False); if not Assigned(MainToolBarNode) then begin AToolbar := MiddleToolBar; AddCommand('cm_View'); AddCommand('cm_Edit'); AddCommand('cm_Copy'); AddCommand('cm_Rename'); AddSeparator(True); AddCommand('cm_PackFiles'); AddCommand('cm_MakeDir'); SaveToolBar(MiddleToolBar); end; end; end; function TfrmMain.GetFileDlgStr(sLngOne, sLngMulti: String; Files: TFiles): String; begin if Files.Count = 0 then raise Exception.Create(rsMsgNoFilesSelected); if Files.Count > 1 then Result := Format(sLngMulti, [Files.Count]) else Result := Format(sLngOne, [Files[0].Name]); end; procedure TfrmMain.miHotAddOrConfigClick(Sender: TObject); begin with Sender as TComponent do Commands.cm_WorkWithDirectoryHotlist(['action='+HOTLISTMAGICWORDS[tag], 'source='+QuoteStr(ActiveFrame.CurrentLocation), 'target='+QuoteStr(NotActiveFrame.CurrentLocation), 'index=0']); end; procedure TfrmMain.CreatePopUpDirHistory(UseTreeViewMenu: Boolean; FromPathIndex: Integer); var I, Finish: Integer; MenuItem: TMenuItem; begin pmDirHistory.Items.Clear; if UseTreeViewMenu then Finish:= glsDirHistory.Count - 1 else begin Finish:= Min(FromPathIndex + gDirHistoryCount, glsDirHistory.Count - 1); end; if (not UseTreeViewMenu) and (FromPathIndex > 0) then begin MenuItem := TMenuItem.Create(pmDirHistory); MenuItem.Caption := '...'; MenuItem.OnClick := @HistorySomeSelected; MenuItem.Tag := Max(0, FromPathIndex - gDirHistoryCount - 1); pmDirHistory.Items.Add(MenuItem); end; for I:= FromPathIndex to Finish do begin MenuItem:= TMenuItem.Create(pmDirHistory); MenuItem.Caption:= glsDirHistory[I].Replace('&','&&'); MenuItem.Hint:= glsDirHistory[I]; MenuItem.OnClick:= @HistorySelected; pmDirHistory.Items.Add(MenuItem); end; if (not UseTreeViewMenu) and (Finish < glsDirHistory.Count - 1) then begin MenuItem := TMenuItem.Create(pmDirHistory); MenuItem.Caption := '...'; MenuItem.OnClick := @HistorySomeSelected; MenuItem.Tag := Finish + 1; pmDirHistory.Items.Add(MenuItem); end; end; procedure TfrmMain.ShowFileViewHistory(const Params: array of string); begin ShowFileViewHistory(Params, -1, -1, -1, -1); end; procedure TfrmMain.ShowFileViewHistory(const Params: array of string; FromFileSourceIndex, FromPathIndex, ToFileSourceIndex, ToPathIndex: Integer); const MaxItemsShown = 20; var ItemsBackward: Integer = 0; ItemsForward: Integer = 0; function GoBack(var FileSourceIndex, PathIndex: Integer): Boolean; begin if PathIndex = 0 then begin if FileSourceIndex = 0 then Result := False else begin Dec(FileSourceIndex); PathIndex := ActiveFrame.PathsCount[FileSourceIndex] - 1; Result := True; end; end else begin Dec(PathIndex); Result := True; end; end; function GoForward(var FileSourceIndex, PathIndex: Integer): Boolean; begin if PathIndex = ActiveFrame.PathsCount[FileSourceIndex] - 1 then begin if FileSourceIndex = ActiveFrame.FileSourcesCount - 1 then Result := False else begin Inc(FileSourceIndex); PathIndex := 0; Result := True; end; end else begin Inc(PathIndex); Result := True; end; end; procedure AddCaptionItem(s: String); var mi: TMenuItem; begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := s; mi.Enabled := False; pmDirHistory.Items.Add(mi); end; procedure FindBoundsBackward; var I: Integer; begin GoBack(ToFileSourceIndex, ToPathIndex); FromFileSourceIndex := ToFileSourceIndex; FromPathIndex := ToPathIndex; for i := 0 to MaxItemsShown - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); end; end; procedure FindBoundsFromCenter; var I: Integer; begin FromFileSourceIndex := ActiveFrame.CurrentFileSourceIndex; FromPathIndex := ActiveFrame.CurrentPathIndex; ToFileSourceIndex := FromFileSourceIndex; ToPathIndex := FromPathIndex; for i := 0 to (MaxItemsShown div 2) - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; for i := ItemsForward to (MaxItemsShown div 2) - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); end; for i := ItemsBackward to (MaxItemsShown div 2) - 1 do begin if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; end; procedure FindBoundsForward; var I: Integer; begin GoForward(FromFileSourceIndex, FromPathIndex); ToFileSourceIndex := FromFileSourceIndex; ToPathIndex := FromPathIndex; for i := 0 to MaxItemsShown - 1 do begin if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; end; var bUseTreeViewMenu: boolean = false; bUsePanel: boolean = false; // As opposed as the other popup, for that one, by legacy, the position of the popup is the cursor position instead of top left corner of active panel. p: TPoint; iWantedWidth: integer = 0; iWantedHeight: integer = 0; sMaybeMenuItem: TMenuItem = nil; I: Integer; mi: TMenuItem; begin pmDirHistory.Items.Clear; p.x := 0; p.y := 0; if FromFileSourceIndex <> -1 then FindBoundsForward else if ToFileSourceIndex <> - 1 then FindBoundsBackward else FindBoundsFromCenter; if (FromFileSourceIndex > 0) or (FromPathIndex > 0) then begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := '...'; mi.OnClick := @ViewHistoryPrevSelected; mi.Tag := HistoryIndexesToTag(FromFileSourceIndex, FromPathIndex); pmDirHistory.Items.Add(mi); end; for i := 0 to ItemsForward + ItemsBackward do begin mi := TMenuItem.Create(pmDirHistory); pmDirHistory.Items.Add(mi); mi.Caption := ActiveFrame.Path[FromFileSourceIndex, FromPathIndex].Replace('&','&&'); mi.OnClick := @ViewHistorySelected; // Remember indexes into history. mi.Tag := HistoryIndexesToTag(FromFileSourceIndex, FromPathIndex); // Mark current history position. if (FromFileSourceIndex = ActiveFrame.CurrentFileSourceIndex) and (FromPathIndex = ActiveFrame.CurrentPathIndex) then mi.Checked := True; if not GoForward(FromFileSourceIndex, FromPathIndex) then Break; // Add separator and address of a file source as a caption. if FromPathIndex = 0 then begin AddCaptionItem('-'); AddCaptionItem('- ' + ActiveFrame.FileSources[FromFileSourceIndex].CurrentAddress.Replace('&','&&') + ' -'); end; end; if (ToFileSourceIndex < ActiveFrame.FileSourcesCount - 1) or (ToPathIndex < ActiveFrame.PathsCount[ToFileSourceIndex] - 1) then begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := '...'; mi.OnClick := @ViewHistoryNextSelected; mi.Tag := HistoryIndexesToTag(ToFileSourceIndex, ToPathIndex); pmDirHistory.Items.Add(mi); end; Application.ProcessMessages; // 1. Let's parse our parameters. Commands.DoParseParametersForPossibleTreeViewMenu(Params, gUseTreeViewMenuWithViewHistory, gUseTreeViewMenuWithViewHistory, bUseTreeViewMenu, bUsePanel, p); // 2. Show the appropriate menu. if bUseTreeViewMenu then begin if not bUsePanel then iWantedHeight := 0 else begin iWantedWidth := frmMain.ActiveFrame.Width; iWantedHeight := frmMain.ActiveFrame.Height; end; sMaybeMenuItem := GetUserChoiceFromTreeViewMenuLoadedFromPopupMenu(pmDirHistory, tvmcViewHistory, p.X, p.Y, iWantedWidth, iWantedHeight); if sMaybeMenuItem <> nil then sMaybeMenuItem.OnClick(sMaybeMenuItem); end else begin pmDirHistory.Popup(p.X, p.Y); end; end; { TfrmMain.HotDirActualSwitchToDir } // Actual routine called when user click the item from the Directory Hotlist popup menu to switch to a hot directory // The index received is the index from the "gDirectoryHotlist" to read hotdir entry from. // procedure TfrmMain.HotDirActualSwitchToDir(Index:longint); var aPath: String; isSHIFTDown, isCTRLDown: boolean; PossibleCommande,PossibleParam: string; PosFirstSpace: integer; Editor: TOptionsEditor; Options: IOptionsDialog; begin // This handler is used by HotDir AND SpecialDir. // HotDirs AND SpecialDirs are only supported by filesystem. // If the index is larger or equal to "TAGOFFSET_FORCHANGETOSPECIALDIR", it means it's a "SpecialDir" and we'll change accordingly if (Index < TAGOFFSET_FORCHANGETOSPECIALDIR) AND (Index >= 0) then begin isSHIFTDown:=((GetKeyState(VK_SHIFT) AND $80) <> 0); if not isSHIFTDown then //if SHIFT is NOT down, it's to change directory begin case gDirectoryHotlist.HotDir[Index].Dispatcher of hd_CHANGEPATH: begin isCTRLDown:=((GetKeyState(VK_CONTROL) AND $80) <> 0); //if CTRL is down, it's to request to DON'T CHANGE TARGET even if in the directoryhotlist entry it was requesting to do so aPath := gDirectoryHotlist.HotDir[Index].HotDirPath; if aPath<>'' then begin case gDirectoryHotlist.HotDir[Index].HotDirPathSort of 1: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_NAME,STR_ASCENDING]); //Name, a-z 2: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_NAME,STR_DESCENDING]); //Name, z-a 3: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_EXTENSION,STR_ASCENDING]); //Ext, a-z 4: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_EXTENSION,STR_DESCENDING]); //Ext, z-a 5: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_SIZE,STR_DESCENDING]); //Size 9-0 6: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_SIZE,STR_ASCENDING]); //Size 0-9 7: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_DESCENDING]); //Date 9-0 8: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_ASCENDING]); //Date 0-9 end; aPath := mbExpandFileName(aPath); ChooseFileSource(ActiveFrame, aPath); if (not isCTRLDown) then //We don't change target folder if CTRL key is pressed begin aPath := gDirectoryHotlist.HotDir[Index].HotDirTarget; if aPath<>'' then begin case gDirectoryHotlist.HotDir[Index].HotDirTargetSort of 1: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_NAME,STR_ASCENDING]); //Name, a-z 2: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_NAME,STR_DESCENDING]); //Name, z-a 3: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_EXTENSION,STR_ASCENDING]); //Ext, a-z 4: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_EXTENSION,STR_DESCENDING]); //Ext, z-a 5: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_SIZE,STR_DESCENDING]); //Size 9-0 6: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_SIZE,STR_ASCENDING]); //Size 0-9 7: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_DESCENDING]); //Date 9-0 8: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_ASCENDING]); //Date 0-9 end; aPath := mbExpandFileName(aPath); ChooseFileSource(NotActiveFrame, aPath); end; end; end; end; //hd_CHANGEPATH: hd_COMMAND: begin PosFirstSpace:=pos(' ',gDirectoryHotlist.HotDir[Index].HotDirPath); if PosFirstSpace=0 then begin PossibleCommande:=gDirectoryHotlist.HotDir[Index].HotDirPath; PossibleParam:=''; end else begin PossibleCommande:=leftstr(gDirectoryHotlist.HotDir[Index].HotDirPath,(PosFirstSpace-1)); PossibleParam:=rightstr(gDirectoryHotlist.HotDir[Index].HotDirPath,length(gDirectoryHotlist.HotDir[Index].HotDirPath)-PosFirstSpace); end; Commands.Commands.ExecuteCommand(PossibleCommande, SplitString(PossibleParam,' ')); end; end; //case gDirectoryHotlist.HotDir[Index].Dispatcher of end else begin //if SHIFT IS down, it's to EDIT current selected entry from the Directory Hotlist that the current selected popup menu selection is pointing. Options := ShowOptions(TfrmOptionsDirectoryHotlist); Editor := Options.GetEditor(TfrmOptionsDirectoryHotlist); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsDirectoryHotlist(Editor).SubmitToAddOrConfigToHotDirDlg(ACTION_DIRECTLYCONFIGENTRY,ActiveFrame.CurrentPath,NotActiveFrame.CurrentPath,Index); end; end else begin if Index>=0 then begin //So it's a SpecialDir... Index:=Index-TAGOFFSET_FORCHANGETOSPECIALDIR; aPath := mbExpandFileName((gSpecialDirList.SpecialDir[Index].PathValue)); ChooseFileSource(ActiveFrame, aPath); end; end; end; procedure TfrmMain.HotDirSelected(Sender: TObject); begin HotDirActualSwitchToDir((Sender as TMenuItem).Tag); end; procedure TfrmMain.HistorySelected(Sender: TObject); var aPath: String; begin // This handler is used by DirHistory. aPath := (Sender as TMenuItem).Hint; aPath := mbExpandFileName(aPath); ChooseFileSource(ActiveFrame, aPath); end; procedure TfrmMain.HistorySomeSelected(Sender: TObject); var P: TPoint; begin if Sender is TMenuItem then begin P:= ActiveFrame.ClientToScreen(Classes.Point(0, 0)); CreatePopUpDirHistory(False, TMenuItem(Sender).Tag); pmDirHistory.Popup(P.X, P.Y); end; end; procedure TfrmMain.ViewHistorySelected(Sender: TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ActiveFrame.GoToHistoryIndex(FileSourceIndex, PathIndex); end; end; procedure TfrmMain.ViewHistoryPrevSelected(Sender:TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ShowFileViewHistory([], -1, -1, FileSourceIndex, PathIndex); end; end; procedure TfrmMain.ViewHistoryNextSelected(Sender:TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ShowFileViewHistory([], FileSourceIndex, PathIndex, -1, -1); end; end; procedure TfrmMain.edtCommandKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=VK_Down) and (Shift=[ssCtrl]) and (edtCommand.Items.Count>0) then begin Key:=0; edtCommand.DroppedDown:=True; edtCommand.SetFocus; end; end; procedure TfrmMain.OnCopyOutTempStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); begin FModalOperationResult:= Operation.Result = fsorFinished; end; function TfrmMain.CopyFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier): Boolean; var BaseDir: String; sDestination: String; sDstMaskTemp: String; FileSource: IFileSource; TargetFiles: TFiles = nil; CopyDialog: TfrmCopyDlg = nil; OperationTemp: Boolean = False; OperationType: TFileSourceOperationType; OperationClass: TFileSourceOperationClass; Operation: TFileSourceCopyOperation = nil; OperationOptionsUIClass: TFileSourceOperationOptionsUIClass = nil; begin Result := False; try if SourceFiles.Count = 0 then Exit; if (SourceFiles.Count = 1) and ((not (SourceFiles[0].IsDirectory or SourceFiles[0].IsLinkToDirectory)) or (TargetPath = '')) then sDestination := TargetPath + ReplaceInvalidChars(SourceFiles[0].Name) else sDestination := TargetPath + '*.*'; // If same file source and address if (fsoCopy in SourceFileSource.GetOperationsTypes) and (fsoCopy in TargetFileSource.GetOperationsTypes) and SourceFileSource.Equals(TargetFileSource) and SameText(SourceFileSource.GetCurrentAddress, TargetFileSource.GetCurrentAddress) then begin OperationType := fsoCopy; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopy); end else if TargetFileSource.IsClass(TFileSystemFileSource) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin OperationType := fsoCopyOut; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopyOut); end else if SourceFileSource.IsClass(TFileSystemFileSource) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) then begin OperationType := fsoCopyIn; FileSource := TargetFileSource; OperationClass := TargetFileSource.GetOperationClass(fsoCopyIn); end else if (fsoCopyOut in SourceFileSource.GetOperationsTypes) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) then begin OperationTemp := True; OperationType := fsoCopyOut; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopyOut); if (fspCopyOutOnMainThread in SourceFileSource.Properties) or (fspCopyInOnMainThread in TargetFileSource.Properties) then begin QueueIdentifier:= ModalQueueId; end; end else begin msgWarning(rsMsgErrNotSupported); Exit; end; if bShowDialog then begin if Assigned(OperationClass) then OperationOptionsUIClass := OperationClass.GetOptionsUIClass; CopyDialog := TfrmCopyDlg.Create(Self, cmdtCopy, FileSource, OperationOptionsUIClass); CopyDialog.edtDst.Text := sDestination; CopyDialog.edtDst.ReadOnly := OperationTemp; CopyDialog.lblCopySrc.Caption := GetFileDlgStr(rsMsgCpSel, rsMsgCpFlDr, SourceFiles); if OperationTemp and (QueueIdentifier = ModalQueueId) then begin CopyDialog.QueueIdentifier:= QueueIdentifier; CopyDialog.btnAddToQueue.Visible:= False; CopyDialog.btnCreateSpecialQueue.Visible:= False; CopyDialog.btnOptions.Visible:= False; end; while True do begin if CopyDialog.ShowModal = mrCancel then Exit; sDestination := CopyDialog.edtDst.Text; if SourceFileSource.IsClass(TArchiveFileSource) then BaseDir := ExtractFilePath(SourceFileSource.CurrentAddress) else begin BaseDir := SourceFiles.Path; end; GetDestinationPathAndMask(SourceFiles, SourceFileSource, TargetFileSource, sDestination, BaseDir, TargetPath, sDstMaskTemp); if (TargetFileSource = nil) or (Length(TargetPath) = 0) then begin MessageDlg(rsMsgInvalidPath, rsMsgErrNotSupported, mtWarning, [mbOK], 0); Continue; end; if HasPathInvalidCharacters(TargetPath) then MessageDlg(rsMsgInvalidPath, Format(rsMsgInvalidPathLong, [TargetPath]), mtWarning, [mbOK], 0) else Break; end; QueueIdentifier := CopyDialog.QueueIdentifier; end else GetDestinationPathAndMask(SourceFiles, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); // Copy via temp directory if OperationTemp then begin // Execute both operations in one new queue if QueueIdentifier = FreeOperationsQueueId then QueueIdentifier := OperationsManager.GetNewQueueIdentifier; // Save real target sDestination := TargetPath; FileSource := TargetFileSource; TargetFiles := SourceFiles.Clone; // Replace target by temp directory TargetFileSource := TTempFileSystemFileSource.Create(); TargetPath := TargetFileSource.GetRootDir; BaseDir := SourceFileSource.CurrentAddress; if Length(BaseDir) > 0 then begin if StrBegins(TargetFiles[0].Path, BaseDir) and not StrBegins(TargetFiles.Path, BaseDir) then begin TargetFiles.Path := BaseDir + TargetFiles.Path; end; end; ChangeFileListRoot(TargetPath, TargetFiles); end; case OperationType of fsoCopy: begin // Copy within the same file source. Operation := SourceFileSource.CreateCopyOperation( SourceFiles, TargetPath) as TFileSourceCopyOperation; end; fsoCopyOut: // CopyOut to filesystem. Operation := SourceFileSource.CreateCopyOutOperation( TargetFileSource, SourceFiles, TargetPath) as TFileSourceCopyOperation; fsoCopyIn: // CopyIn from filesystem. Operation := TargetFileSource.CreateCopyInOperation( SourceFileSource, SourceFiles, TargetPath) as TFileSourceCopyOperation; end; if Assigned(Operation) then begin // Set operation options based on settings in dialog. Operation.RenameMask := sDstMaskTemp; if Assigned(CopyDialog) then CopyDialog.SetOperationOptions(Operation); if OperationTemp and (QueueIdentifier = ModalQueueId) then begin Operation.AddStateChangedListener([fsosStopped], @OnCopyOutTempStateChanged); end; // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); Result := True; end else msgWarning(rsMsgNotImplemented); // Copy via temp directory if OperationTemp and Result and ((QueueIdentifier <> ModalQueueId) or FModalOperationResult) then begin // CopyIn from temp filesystem Operation := FileSource.CreateCopyInOperation( TargetFileSource, TargetFiles, sDestination) as TFileSourceCopyOperation; Result := Assigned(Operation); if Result then begin if Assigned(CopyDialog) then CopyDialog.SetOperationOptions(Operation); // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); end; end; finally FreeAndNil(TargetFiles); FreeAndNil(SourceFiles); FreeAndNil(CopyDialog); end; end; function TfrmMain.MoveFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var sDestination: String; sDstMaskTemp: String; Operation: TFileSourceMoveOperation; bMove: Boolean; MoveDialog: TfrmCopyDlg = nil; begin Result := False; try // Special case for Search Result File Source if SourceFileSource.IsClass(TSearchResultFileSource) then begin SourceFileSource:= ISearchResultFileSource(SourceFileSource).FileSource; end; // Only allow moving within the same file source. if (SourceFileSource.IsInterface(TargetFileSource) or TargetFileSource.IsInterface(SourceFileSource)) and (SourceFileSource.CurrentAddress = TargetFileSource.CurrentAddress) and (fsoMove in SourceFileSource.GetOperationsTypes) and (fsoMove in TargetFileSource.GetOperationsTypes) then begin bMove := True; end else if ((fsoCopyOut in SourceFileSource.GetOperationsTypes) and (fsoCopyIn in TargetFileSource.GetOperationsTypes)) then begin bMove := False; // copy + delete through temporary file system msgWarning(rsMsgNotImplemented); Exit; end else begin msgWarning(rsMsgErrNotSupported); Exit; end; if SourceFiles.Count = 0 then Exit; if (SourceFiles.Count = 1) and (not (SourceFiles[0].IsDirectory or SourceFiles[0].IsLinkToDirectory)) then sDestination := TargetPath + ExtractFileName(SourceFiles[0].Name) else sDestination := TargetPath + '*.*'; if bShowDialog then begin MoveDialog := TfrmCopyDlg.Create(Self, cmdtMove, SourceFileSource, SourceFileSource.GetOperationClass(fsoMove).GetOptionsUIClass); MoveDialog.edtDst.Text := sDestination; MoveDialog.lblCopySrc.Caption := GetFileDlgStr(rsMsgRenSel, rsMsgRenFlDr, SourceFiles); while True do begin if MoveDialog.ShowModal = mrCancel then Exit; sDestination := MoveDialog.edtDst.Text; GetDestinationPathAndMask(SourceFiles, SourceFileSource, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); if (TargetFileSource = nil) or (Length(TargetPath) = 0) then begin MessageDlg(EmptyStr, rsMsgInvalidPath, mtWarning, [mbOK], 0); Continue; end; if HasPathInvalidCharacters(TargetPath) then MessageDlg(rsMsgInvalidPath, Format(rsMsgInvalidPathLong, [TargetPath]), mtWarning, [mbOK], 0) else Break; end; QueueIdentifier := MoveDialog.QueueIdentifier; end else GetDestinationPathAndMask(SourceFiles, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); if bMove then begin Operation := SourceFileSource.CreateMoveOperation( SourceFiles, TargetPath) as TFileSourceMoveOperation; if Assigned(Operation) then begin // Set operation options based on settings in dialog. Operation.RenameMask := sDstMaskTemp; if Assigned(MoveDialog) then MoveDialog.SetOperationOptions(Operation); // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); Result := True; end else msgWarning(rsMsgNotImplemented); end else begin // Use CopyOut, CopyIn operations. end; finally FreeAndNil(SourceFiles); FreeAndNil(MoveDialog); end; end; function TfrmMain.CopyFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var FileSource: IFileSource; SourceFiles: TFiles = nil; begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SourceFiles) then begin if Length(sDestPath) > 0 then FileSource := NotActiveFrame.FileSource else begin FileSource := ActiveFrame.FileSource; end; try Result := CopyFiles(ActiveFrame.FileSource, FileSource, SourceFiles, sDestPath, bShowDialog, QueueIdentifier); if Result then ActiveFrame.MarkFiles(False); finally FreeAndNil(SourceFiles); end; end else Result := False; end; function TfrmMain.MoveFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var SourceFiles: TFiles = nil; begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SourceFiles) then begin try Result := MoveFiles(ActiveFrame.FileSource, NotActiveFrame.FileSource, SourceFiles, sDestPath, bShowDialog, QueueIdentifier); if Result then ActiveFrame.MarkFiles(False); finally FreeAndNil(SourceFiles); end; end else Result := False; end; procedure TfrmMain.GetDestinationPathAndMask(SourceFiles: TFiles; TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); var AbsolutePath: String; begin if TargetFileSource.GetPathType(EnteredPath) = ptAbsolute then AbsolutePath := EnteredPath else begin // This only work for filesystem for now. if TargetFileSource.IsClass(TFileSystemFileSource) then AbsolutePath := BaseDir + EnteredPath else AbsolutePath := PathDelim{TargetFileSource.GetRoot} + EnteredPath; end; AbsolutePath := NormalizePathDelimiters(AbsolutePath); // normalize path delimiters AbsolutePath := ExpandAbsolutePath(AbsolutePath); if Length(AbsolutePath) = 0 then Exit; // If the entered path ends with a path delimiter // treat it as a path to a not yet existing directory // which should be created. if (AbsolutePath[Length(AbsolutePath)] = PathDelim) or ((TargetFileSource.IsClass(TFileSystemFileSource)) and mbDirectoryExists(AbsolutePath)) then begin // Destination is a directory. DestPath := AbsolutePath; DestMask := '*.*'; end else begin // Destination is a file name or mask. DestPath := ExtractFilePath(AbsolutePath); DestMask := ExtractFileName(AbsolutePath); if (SourceFiles.Count > 1) and not ContainsWildcards(DestMask) then begin // Assume it is a path to a directory because cannot put multiple // files/directories into one file. DestPath := AbsolutePath; DestMask := '*.*'; end // For convenience, treat '*' as "whole file name". // To remove extension '*.' can be used. else if DestMask = '*' then DestMask := '*.*'; end; end; procedure TfrmMain.GetDestinationPathAndMask(SourceFiles: TFiles; SourceFileSource: IFileSource; var TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); var FileSourceIndex, PathIndex: Integer; begin // If it is a file source root and we trying to copy/move to parent directory if StrBegins(EnteredPath, '..') and SourceFileSource.IsPathAtRoot(SourceFiles.Path) then begin // Change to previous file source and last path. FileSourceIndex := ActiveFrame.CurrentFileSourceIndex - 1; if FileSourceIndex < 0 then TargetFileSource := nil // No parent file sources. else begin PathIndex := ActiveFrame.PathsCount[FileSourceIndex] - 1; if PathIndex < 0 then TargetFileSource := nil // No paths. else begin TargetFileSource := ActiveFrame.FileSources[FileSourceIndex]; // Determine destination type if (Length(EnteredPath) = 2) or (EnteredPath[Length(EnteredPath)] = PathDelim) then EnteredPath:= EmptyStr // Destination is a directory else EnteredPath:= ExtractFileName(EnteredPath); // Destination is a file name or mask // Combine destination path EnteredPath := ActiveFrame.Path[FileSourceIndex, PathIndex] + EnteredPath; end; end; end; // Target file source is valid if Assigned(TargetFileSource) then begin GetDestinationPathAndMask(SourceFiles, TargetFileSource, EnteredPath, BaseDir, DestPath, DestMask); end; end; procedure TfrmMain.SetDragCursor(Shift: TShiftState); begin FrameLeft.SetDragCursor(Shift); FrameRight.SetDragCursor(Shift); end; procedure TfrmMain.CreateWnd; begin // Must be before CreateWnd LoadWindowState; inherited CreateWnd; // Save real main form handle Application.MainForm.Tag:= Handle; end; procedure TfrmMain.DoFirstShow; var ANode: TXmlNode; begin inherited DoFirstShow; // Load window state ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); if gConfig.GetValue(ANode, 'Maximized', True) then Self.WindowState := wsMaximized; lastWindowState := WindowState; end; procedure TfrmMain.WMMove(var Message: TLMMove); begin inherited WMMove(Message); if not (csDestroying in ComponentState) then begin FDelayedWMMove := True; Inc(FDelayedEventCtr); Application.QueueAsyncCall(@DelayedEvent, 0); end; end; procedure TfrmMain.WMSize(var message: TLMSize); begin // https://github.com/doublecmd/doublecmd/issues/736 if (Message.Width > High(Int16)) or (Message.Height > High(Int16)) then begin DCDebug('TfrmMain.WMSize invalid size %u x %u', [Message.Width, Message.Height]); Exit; end; inherited WMSize(Message); if not (csDestroying in ComponentState) then begin FDelayedWMSize := True; Inc(FDelayedEventCtr); Application.QueueAsyncCall(@DelayedEvent, 0); end; end; procedure TfrmMain.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then begin DisableAutoSizing; try // ScaleFontsPPI(AYProportion); BorderSpacing.AutoAdjustLayout(AXProportion, AYProportion); Constraints.AutoAdjustLayout(AXProportion, AYProportion); finally EnableAutoSizing; end; end; end; procedure TfrmMain.FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ; begin SetDragCursor(Shift); end; procedure TfrmMain.FormResize(Sender: TObject); begin UpdatePrompt; end; procedure TfrmMain.lblDriveInfoResize(Sender: TObject); begin with TLabel(Sender) do begin if Canvas.TextWidth(Caption) > Width then Alignment:= taLeftJustify else begin Alignment:= taCenter; end; end; end; procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ShiftEx : TShiftState; CmdText : String; begin SetDragCursor(Shift); // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; ShiftEx := GetKeyShiftStateEx; case Key of VK_BACK: if IsCommandLineVisible and (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin // Delete last character. CmdText := edtCommand.Text; UTF8Delete(CmdText, UTF8Length(CmdText), 1); edtCommand.Text := CmdText; edtCommand.SetFocus; edtCommand.SelStart := UTF8Length(edtCommand.Text) + 1; Key := 0; end; VK_ESCAPE: if IsCommandLineVisible and (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin edtCommand.Text := ''; Key := 0; end; VK_RETURN, VK_SELECT: if IsCommandLineVisible and (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin // execute command line (in terminal with Shift) ExecuteCommandLine(Shift = [ssShift]); Key := 0; end; VK_SPACE: if (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin TypeInCommandLine(' '); Key := 0; end; VK_TAB: begin if (QuickViewPanel = nil) then begin // Select opposite panel. case PanelSelected of fpLeft: SetActiveFrame(fpRight); fpRight: SetActiveFrame(fpLeft); else SetActiveFrame(fpLeft); end; end; Key := 0; end; end; CheckCommandLine(ShiftEx, Key); end; procedure TfrmMain.pmToolBarPopup(Sender: TObject); var sText: String; sDir: String; bPaste: Boolean; ToolItem: TKASToolItem; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); tbSeparator.Visible:= Assigned(Button); tbCut.Visible:= Assigned(Button); tbCopy.Visible:= Assigned(Button); tbChangeDir.Visible:= False; tbDelete.Visible:= Assigned(Button); if Assigned(Button) then begin ToolItem := Button.ToolItem; if ToolItem is TKASProgramItem then begin sDir := TKASProgramItem(ToolItem).StartPath; sDir:= PrepareParameter(sDir, nil, [ppoNormalizePathDelims, ppoReplaceTilde]); tbChangeDir.Caption := 'CD ' + sDir; tbChangeDir.Visible := True; end; end; sText:= Clipboard.AsText; bPaste:= StrBegins(sText, DCToolItemClipboardHeader) or StrBegins(sText, DCToolbarClipboardHeader) or StrBegins(sText, TCToolbarClipboardHeader); if bPaste then tbSeparator.Visible:= True; tbPaste.Visible:= bPaste; end; procedure TfrmMain.ShellTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); begin Node.ImageIndex:= 0; Node.SelectedIndex:= 0; end; procedure TfrmMain.pnlLeftResize(Sender: TObject); begin if gDriveBar1 and gDriveBar2 and not gHorizontalFilePanels then begin pnlDskLeft.Constraints.MinWidth:= pnlLeft.Width; pnlDskLeft.Constraints.MaxWidth:= pnlLeft.Width; end; // Put splitter after left panel. if not gHorizontalFilePanels then begin MainSplitter.Left := pnlLeft.Width; MainSplitter.Top := pnlLeft.Top; MainSplitter.Height := pnlLeft.Height; MainSplitter.Width := 3; end else begin MainSplitter.Top := pnlLeft.Height; MainSplitter.Left := pnlLeft.Left; MainSplitter.Width := pnlLeft.Width; MainSplitter.Height := 3; end; end; procedure TfrmMain.pnlLeftRightDblClick(Sender: TObject); var APanel: TPanel; APoint: TPoint; FileViewNotebook: TFileViewNotebook; begin if Sender is TPanel then begin APanel := Sender as TPanel; if APanel = pnlLeft then begin APoint := FrameLeft.ClientToScreen(Classes.Point(0, FrameLeft.Top)); if Mouse.CursorPos.Y < APoint.Y then Commands.DoNewTab(nbLeft); end else if APanel = pnlRight then begin APoint := FrameRight.ClientToScreen(Classes.Point(0, FrameRight.Top)); if Mouse.CursorPos.Y < APoint.Y then Commands.DoNewTab(nbRight); end; end; if Sender is TFileViewNotebook then begin FileViewNotebook:= Sender as TFileViewNotebook; if FileViewNotebook.DoubleClickPageIndex < 0 then Commands.DoNewTab(FileViewNotebook) else begin case gDirTabActionOnDoubleClick of tadc_Nothing: begin end; tadc_CloseTab: Commands.DoCloseTab(FileViewNotebook, FileViewNotebook.DoubleClickPageIndex); tadc_FavoriteTabs: Commands.cm_LoadFavoriteTabs(['position=cursor']); tadc_TabsPopup: begin if FileViewNotebook.DoubleClickPageIndex<>-1 then begin // Check tab options items. case FileViewNotebook.Page[FileViewNotebook.DoubleClickPageIndex].LockState of tlsNormal: miTabOptionNormal.Checked := True; tlsPathLocked: miTabOptionPathLocked.Checked := True; tlsDirsInNewTab: miTabOptionDirsInNewTab.Checked := True; tlsPathResets: miTabOptionPathResets.Checked := True; end; pmTabMenu.Parent := FileViewNotebook; pmTabMenu.Tag := FileViewNotebook.DoubleClickPageIndex; pmTabMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; end; end; end; end; procedure TfrmMain.pnlNotebooksResize(Sender: TObject); var Delta: Integer; begin if not FResizingFilePanels then begin FResizingFilePanels := True; if not gHorizontalFilePanels then begin pnlLeft.BorderSpacing.Bottom:= 0; Delta:= IfThen(MiddleToolBar.Visible, MiddleToolBar.Width); pnlLeft.BorderSpacing.Right:= 4 - (pnlNotebooks.Width - Delta) mod 2; pnlLeft.Width := Round(Double(pnlNotebooks.Width - pnlLeft.BorderSpacing.Right - Delta) * FMainSplitterPos / 100.0); end else begin pnlLeft.BorderSpacing.Right:= 0; Delta:= IfThen(MiddleToolBar.Visible, MiddleToolBar.Height); pnlLeft.BorderSpacing.Bottom:= 4 - (pnlNotebooks.Height - Delta) mod 2; pnlLeft.Height := Round(Double(pnlNotebooks.Height - pnlLeft.BorderSpacing.Bottom - Delta) * FMainSplitterPos / 100.0); end; FResizingFilePanels := False; end; end; procedure TfrmMain.pnlRightResize(Sender: TObject); var AWidth: Integer; begin if gDriveBar1 and not gHorizontalFilePanels then begin if gDriveBar2 then AWidth := pnlRight.Width + 1 else begin AWidth := pnlNotebooks.Width - 2; end; if AWidth < 0 then AWidth := 0; pnlDskRight.Constraints.MinWidth := AWidth; pnlDskRight.Constraints.MaxWidth := AWidth; end else if gHorizontalFilePanels and not gDriveBar2 then begin AWidth := Max(0, pnlNotebooks.Width - 2); pnlDskRight.Constraints.MinWidth := AWidth; pnlDskRight.Constraints.MaxWidth := AWidth; end; end; procedure TfrmMain.sboxDrivePaint(Sender: TObject); begin with gColors.FreeSpaceInd^ do PaintDriveFreeBar(Sender, gIndUseGradient, ForeColor, ThresholdForeColor, BackColor); end; procedure TfrmMain.PaintDriveFreeBar(Sender: TObject; const bIndUseGradient: boolean; const pIndForeColor, pIndThresholdForeColor, pIndBackColor: TColor); const OccupiedThresholdPercent = 90; var pbxDrive: TPaintBox absolute Sender; FillPercentage: PtrInt; i: Integer; AColor, AColor2: TColor; ARect: TRect; begin FillPercentage:= pbxDrive.Tag; if FillPercentage <> -1 then begin pbxDrive.Canvas.Brush.Color:= clBlack; pbxDrive.Canvas.FrameRect(0, 0, pbxDrive.Width - 1, pbxDrive.Height - 1); ARect.Top := 1; ARect.Bottom := pbxDrive.Height - 2; if not bIndUseGradient then begin ARect.Left := 1; ARect.Right := 1 + FillPercentage * (pbxDrive.Width - 2) div 100; if FillPercentage <= OccupiedThresholdPercent then AColor := pIndForeColor else AColor := pIndThresholdForeColor; pbxDrive.Canvas.GradientFill(ARect, LightColor(AColor, 25), DarkColor(AColor, 25), gdVertical); ARect.Left := ARect.Right + 1; ARect.Right := pbxDrive.Width - 2; AColor := pIndBackColor; pbxDrive.Canvas.GradientFill(ARect, DarkColor(AColor, 25), LightColor(AColor, 25), gdVertical); end else begin ARect.Right := 1; for i := 0 to FillPercentage - 1 do begin if i <= OccupiedThresholdPercent then AColor:= RGB((i * 255) div OccupiedThresholdPercent, 255, 0) else AColor:= RGB(255, ((100 - i) * 255) div (100 - OccupiedThresholdPercent), 0); AColor2:= DarkColor(AColor, 50); ARect.Left := ARect.Right; ARect.Right := 1 + (i + 1) * (pbxDrive.Width - 2) div 100; pbxDrive.Canvas.GradientFill(ARect, AColor, AColor2, gdVertical); end; ARect.Left := ARect.Right; ARect.Right := pbxDrive.Width - 2; pbxDrive.Canvas.GradientFill(ARect, clSilver, clWhite, gdVertical); end; end; end; procedure TfrmMain.seLogWindowSpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); var LogMsgTypeObject: TObject; LogMsgType : TLogMsgType absolute LogMsgTypeObject; begin LogMsgTypeObject := seLogWindow.Lines.Objects[Line-1]; Special := True; with gColors.Log^ do begin case LogMsgType of lmtInfo: FG := InfoColor; lmtSuccess: FG := SuccessColor; lmtError: FG := ErrorColor else FG := clWindowText; end; end; end; procedure TfrmMain.FileViewFreeAsync(Data: PtrInt); var FileView: TFileView absolute Data; begin FileView.Free; end; function TfrmMain.FileViewAutoSwitch(FileSource: IFileSource; var FileView: TFileView; Reason: TChangePathReason; const NewPath: String): Boolean; var AName: String; Index: Integer; AWidth: Integer; Percent: Double; Page: TFileViewPage; AClientWidth: Integer; RestoreFocus: Boolean; ColSe: TPanelColumnsClass; DefaultView: TFileSourceFields; begin Result:= True; if FileSource.Equals(FileView.FileSource) then Exit; Page:= TFileViewPage(FileView.NotebookPage); if Page.Tag > 0 then Exit; Page.Tag:= MaxInt; try RestoreFocus:= (ActiveFrame = FileView); if (fspDefaultView in FileSource.Properties) then begin AName:= '<' + FileSource.FileSystem + '>'; ColSe:= ColSet.GetColumnSet(AName, FileSource.FileSystem); if (ColSe = nil) then begin if FileSource.GetDefaultView(DefaultView) then begin AWidth:= 0; for Index:= 0 to High(DefaultView) do begin AWidth += DefaultView[Index].Width; end; AClientWidth:= FileView.ClientWidth; // Scale columns width if AWidth < AClientWidth then begin for Index:= 0 to High(DefaultView) do begin Percent:= DefaultView[Index].Width / AWidth; DefaultView[Index].Width:= Floor(AClientWidth * Percent); end; end; ColSe:= TPanelColumnsClass.Create; for Index:= 0 to High(DefaultView) do begin with DefaultView[Index] do ColSe.Add(Header, Content, Width, Align); end; ColSe.FileSystem:= FileSource.FileSystem; ColSe.Name:= AName; ColSet.Add(ColSe); end; end; if Assigned(ColSe) then begin // Save current file view type Page.BackupViewClass := TFileViewClass(FileView.ClassType); if (FileView is TColumnsFileView) then begin // Save current columns set name Page.BackupColumnSet:= TColumnsFileView(FileView).ActiveColm; TColumnsFileView(Page.FileView).SetColumnSet(ColSe.Name); end else begin Result:= False; Page.RemoveComponent(FileView); Application.QueueAsyncCall(@FileViewFreeAsync, PtrInt(FileView)); FileView:= TColumnsFileView.Create(Page, FileView, ColSe.Name); if Assigned(Page.OnChangeFileView) then Page.OnChangeFileView(FileView); if RestoreFocus then Page.FileView.SetFocus; end; Page.BackupViewMode:= FileSource.FileSystem; end; end else if (Length(Page.BackupViewMode) > 0) then begin Page.BackupViewMode:= EmptyStr; // Restore previous file view type if (FileView is Page.BackupViewClass) then begin if (FileView is TColumnsFileView) then TColumnsFileView(FileView).SetColumnSet(Page.BackupColumnSet) end else begin Result:= False; Page.RemoveComponent(FileView); Application.QueueAsyncCall(@FileViewFreeAsync, PtrInt(FileView)); if Page.BackupViewClass <> TColumnsFileView then FileView:= Page.BackupViewClass.Create(Page, FileView) else begin FileView:= TColumnsFileView.Create(Page, FileView, Page.BackupColumnSet); end; if Assigned(Page.OnChangeFileView) then Page.OnChangeFileView(FileView); end; if RestoreFocus then Page.FileView.SetFocus; end; if not Result then begin case Reason of cprAdd: FileView.AddFileSource(FileSource, NewPath); cprRemove: FileView.RemoveCurrentFileSource; end; end; finally Page.Tag:= 0; end; end; function TfrmMain.FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; Reason: TChangePathReason; const NewPath: String ): Boolean; var i: Integer; AFileSource: IFileSource; ANoteBook: TFileViewNotebook; Page, NewPage: TFileViewPage; PageAlreadyExists: Boolean = False; tlsLockStateToEvaluate: TTabLockState; begin Result:= True; if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; tlsLockStateToEvaluate:=Page.LockState; if tlsLockStateToEvaluate=tlsPathLocked then if MsgBox(Format(rsMsgTabForOpeningInNewTab,[Page.Caption]), [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then tlsLockStateToEvaluate:=tlsDirsInNewTab; case tlsLockStateToEvaluate of tlsPathLocked: Result := False; // do not change directory in this tab tlsDirsInNewTab: begin Result := False; // do not change directory in this tab if Assigned(NewFileSource) then begin ANoteBook := Page.Notebook; if tb_reusing_tab_when_possible in gDirTabOptions then begin for i := 0 to ANotebook.PageCount - 1 do begin NewPage := ANotebook.Page[i]; PageAlreadyExists := Assigned(NewPage.FileView) and mbCompareFileNames(NewPage.FileView.CurrentAddress, NewFileSource.CurrentAddress) and mbCompareFileNames(NewPage.FileView.CurrentPath, NewPath); if PageAlreadyExists then Break; end; end; if not PageAlreadyExists then begin // Open in a new page, cloned view. NewPage := ANotebook.NewPage(Page.FileView); NewPage.FileView.AddFileSource(NewFileSource, NewPath); end; NewPage.MakeActive; end; end; end; if Result and Assigned(NewFileSource) then begin if not FileViewAutoSwitch(NewFileSource, FileView, Reason, NewPath) then Exit(False); end; if actSyncChangeDir.Checked and (FileView = NotActiveFrame) then begin if not Result then actSyncChangeDir.Checked:= False else begin if Assigned(NewFileSource) and not NewFileSource.SetCurrentWorkingDirectory(NewPath) then begin actSyncChangeDir.Checked:= False; Exit(False); end else if not FSyncChangeParent then begin if Assigned(NewFileSource) then AFileSource:= NewFileSource else begin AFileSource:= FileView.FileSource; end; if not AFileSource.FileSystemEntryExists(ExcludeTrailingBackslash(NewPath)) then begin actSyncChangeDir.Checked:= False; Exit(False); end; end end; end; end; end; procedure TfrmMain.FileViewAfterChangePath(FileView: TFileView); var S: String; Index: Integer; Page: TFileViewPage; ANoteBook : TFileViewNotebook; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; ANoteBook := Page.Notebook; if Page.IsActive then begin if Assigned(FileView.FileSource) then begin if FileView.FileSource.IsClass(TFileSystemFileSource) then begin // Store only first 255 items if glsDirHistory.Count > $FF then begin glsDirHistory.Delete(glsDirHistory.Count - 1); end; Index:= glsDirHistory.IndexOf(FileView.CurrentPath); if Index = -1 then glsDirHistory.Insert(0, FileView.CurrentPath) else begin glsDirHistory.Move(Index, 0); end; UpdateTreeViewPath; UpdateMainTitleBar; end; if actSyncChangeDir.Checked and (FileView = ActiveFrame) then begin S:= ExcludeTrailingBackslash(FileView.CurrentPath); // Go to child directory if Length(S) > Length(FSyncChangeDir) then begin FSyncChangeParent:= False; if ExtractFileDir(S) = FSyncChangeDir then NotActiveFrame.CurrentPath:= NotActiveFrame.CurrentPath + ExtractFileName(S) else actSyncChangeDir.Checked:= False; end // Go to parent directory else begin FSyncChangeParent:= True; if S = ExtractFileDir(FSyncChangeDir) then NotActiveFrame.ChangePathToParent(True) else actSyncChangeDir.Checked:= False; end; if actSyncChangeDir.Checked then FSyncChangeDir:= S else begin FSyncChangeDir:= EmptyStr; end; end; UpdateSelectedDrive(ANoteBook); UpdatePrompt; end; // Update page hint ANoteBook.Hint := FileView.CurrentPath; end; {if (fspDirectAccess in FileView.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SetCurrentDir(FileView.CurrentPath); end;} end; end; procedure TfrmMain.FileViewActivate(FileView: TFileView); var Page: TFileViewPage; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; SelectedPanel := Page.Notebook.Side; UpdateSelectedDrive(Page.Notebook); UpdateFreeSpace(Page.Notebook.Side, False); end; UpdateFileView; end; procedure TfrmMain.FileViewFilesChanged(FileView: TFileView); var Page: TFileViewPage; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; if Page.IsActive then begin UpdateFreeSpace(Page.Notebook.Side, False); end; end; end; procedure TfrmMain.SetActiveFrame(panel: TFilePanelSelect); begin SelectedPanel:= panel; SetActiveFrame(ActiveFrame); end; procedure TfrmMain.SetActiveFrame(FileView: TFileView); begin FileView.SetFocus; if (fspDirectAccess in FileView.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.SetCurrentDir(FileView.CurrentPath); end; end; procedure TfrmMain.UpdateFileView; var AFileView: TFileView; begin AFileView:= ActiveFrame; if AFileView is TColumnsFileView then actColumnsView.Checked:= True else if AFileView is TBriefFileView then actBriefView.Checked:= True else if AFileView is TThumbFileView then actThumbnailsView.Checked:= True; end; procedure TfrmMain.UpdateShellTreeView; begin actTreeView.Checked := gSeparateTree; TreeSplitter.Visible := gSeparateTree; TreePanel.Visible := gSeparateTree; if gSeparateTree and (ShellTreeView = nil) then begin ShellTreeView := TShellTreeView.Create(TreePanel); ShellTreeView.Parent := TreePanel; ShellTreeView.Align := alClient; ShellTreeView.ScrollBars := ssAutoBoth; with ShellTreeView as TShellTreeView do begin UpdateTreeView; ReadOnly := True; RightClickSelect := True; FileSortType := fstNone; PopulateWithBaseFiles; CustomSort(@ShellTreeViewSort); Images := TImageList.Create(Self); Images.Width := gIconsSize; Images.Height := gIconsSize; Images.Add(PixMapManager.GetFolderIcon(gIconsSize, ShellTreeView.Color), nil); OnKeyDown := @ShellTreeViewKeyDown; OnMouseUp := @ShellTreeViewMouseUp; OnAdvancedCustomDrawItem := @ShellTreeViewAdvancedCustomDrawItem; ExpandSignType := tvestPlusMinus; Options := Options - [tvoThemedDraw]; Options := Options + [tvoReadOnly, tvoRightClickSelect]; end; end; if gSeparateTree then begin with gColors.FilePanel^ do begin ShellTreeView.Font.Color := ForeColor; ShellTreeView.BackgroundColor := BackColor; ShellTreeView.SelectionColor := CursorColor; end; FontOptionsToFont(gFonts[dcfMain], ShellTreeView.Font); end; end; procedure TfrmMain.UpdateTreeViewPath; begin if (ShellTreeView = nil) then Exit; if (ShellTreeView.Tag <> 0) then Exit; if (fspDirectAccess in ActiveFrame.FileSource.Properties) then try (ShellTreeView as TShellTreeView).Path := ActiveFrame.CurrentPath; except // Skip end; end; procedure TfrmMain.UpdateTreeView; begin if (ShellTreeView = nil) then Exit; with (ShellTreeView as TShellTreeView) do begin if gShowSystemFiles then ObjectTypes:= ObjectTypes + [otHidden] else begin ObjectTypes:= ObjectTypes - [otHidden]; end; end; end; function CompareDrives(Item1, Item2: Pointer): Integer; begin Result := CompareText(PDrive(Item1)^.DisplayName, PDrive(Item2)^.DisplayName); end; procedure TfrmMain.UpdateDiskCount; var I: Integer; Drive: PDrive; begin DrivesList.Free; DrivesList := TDriveWatcher.GetDrivesList; DrivesList.Sort(@CompareDrives); { Delete drives that in drives black list } for I:= DrivesList.Count - 1 downto 0 do begin Drive := DrivesList[I]; if (gDriveBlackListUnmounted and not Drive^.IsMounted) or MatchesMaskList(Drive^.Path, gDriveBlackList) or MatchesMaskList(Drive^.DeviceId, gDriveBlackList) then DrivesList.Remove(I); end; {$IF DEFINED(MSWINDOWS)} if (not (cimDrive in gCustomIcons)) then begin for I:= DrivesList.Count - 1 downto 0 do begin Drive := DrivesList[I]; if Drive^.DriveType = dtNetwork then begin with TNetworkDriveLoader.Create(Drive, dskRight.GlyphSize, clBtnFace, @OnDriveIconLoaded) do Start; end; end; end; if (Win32MajorVersion > 5) then begin TShellFileSource.ListDrives(DrivesList, gUpperCaseDriveLetter); end; {$ENDIF} UpdateDriveList(DrivesList); // Add virtual drive New(Drive); FillChar(Drive^, SizeOf(TDrive), 0); Drive^.IsMounted:= True; Drive^.DriveType:= dtVirtual; Drive^.Path:= 'vfs:' + PathDelim; Drive^.DisplayName:= PathDelim + PathDelim; Drive^.DriveLabel:= StripHotkey(actOpenVirtualFileSystemList.Caption); Drive^.FileSystem:= 'VFS'; DrivesList.Add(Drive); // create drives drop down menu FDrivesListPopup.UpdateDrivesList(DrivesList); // create drives left/right panels if gDriveBar1 then begin CreateDiskPanel(dskRight); if gDriveBar2 then CreateDiskPanel(dskLeft); end; dskLeft.AddToolItemExecutor(TKASDriveItem, @LeftDriveBarExecuteDrive); dskRight.AddToolItemExecutor(TKASDriveItem, @RightDriveBarExecuteDrive); if gSeparateTree and Assigned(ShellTreeView) then begin TShellTreeView(ShellTreeView).PopulateWithBaseFiles; UpdateTreeViewPath; end; end; procedure TfrmMain.AddSpecialButtons(dskPanel: TKASToolBar); procedure AddItem(FromButton: TSpeedButton); var Button: TKASToolButton; ToolItem: TKASNormalItem; begin ToolItem := TKASNormalItem.Create; ToolItem.Text := FromButton.Caption; ToolItem.Hint := FromButton.Hint; Button := dskPanel.AddButton(ToolItem); Button.GroupIndex := 0; end; begin AddItem(btnLeftRoot); AddItem(btnLeftUp); AddItem(btnLeftHome); end; procedure TfrmMain.CreateDiskPanel(dskPanel: TKASToolBar); var I, Count: Integer; Drive : PDrive; BitmapTmp: Graphics.TBitmap; ToolItem: TKASDriveItem; Button: TKASToolButton; begin dskPanel.BeginUpdate; try dskPanel.Clear; dskPanel.Flat := gDriveBarFlat; Count := DrivesList.Count - 1; for I := 0 to Count do begin Drive := DrivesList.Items[I]; ToolItem := TKASDriveItem.Create; ToolItem.Drive := Drive; ToolItem.Text := Drive^.DisplayName; ToolItem.Hint := GetDriveLabelOrStatus(Drive); Button := dskPanel.AddButton(ToolItem); // Set drive icon. BitmapTmp := PixMapManager.GetDriveIcon(Drive, dskPanel.GlyphSize, clBtnFace, False); Button.Glyph.Assign(BitmapTmp); FreeAndNil(BitmapTmp); {Set Buttons Transparent. Is need? } Button.Glyph.Transparent := True; Button.Transparent := True; {/Set Buttons Transparent} Button.Layout := blGlyphLeft; end; // for // Add special buttons if not gDrivesListButton then AddSpecialButtons(dskPanel); finally dskPanel.EndUpdate; end; end; function TfrmMain.CreateFileView(sType: String; Page: TFileViewPage; AConfig: TXmlConfig; ANode: TXmlNode): TFileView; var FileViewFlags: TFileViewFlags = []; begin // This function should be changed to a separate TFileView factory. if gDelayLoadingTabs then FileViewFlags := [fvfDelayLoadingFiles]; if sType = 'columns' then Result := TColumnsFileView.Create(Page, AConfig, ANode, FileViewFlags) else if sType = 'brief' then Result := TBriefFileView.Create(Page, AConfig, ANode, FileViewFlags) else if sType = 'thumbnails' then Result := TThumbFileView.Create(Page, AConfig, ANode, FileViewFlags) else begin DCDebug(rsMsgLogError + 'Invalid file view type "%s"', [sType]); Result := TColumnsFileView.Create(Page, AConfig, ANode, FileViewFlags); end; end; procedure TfrmMain.AssignEvents(AFileView: TFileView); begin with AFileView do begin OnBeforeChangePath := @FileViewBeforeChangePath; OnAfterChangePath := @FileViewAfterChangePath; OnActivate := @FileViewActivate; OnFileListChanged := @FileViewFilesChanged; end; end; // We ask the closing locked tab confirmation according to... // ConfirmCloseLocked = 0 ...option "tb_confirm_close_locked_tab". // ConfirmCloseLocked = 1 ...no matter the option, we ask confirmation // ConfirmCloseLocked = 2 ...no matter the option, we do not ask confirmation function TfrmMain.RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True; ConfirmCloseLocked: integer = 0; ShowButtonAll: Boolean = False): LongInt; var UserAnswer: TMyMsgResult; begin Result:= -1; if (ANoteBook.PageCount > 1) and (iPageIndex >= 0) and (iPageIndex < ANoteBook.PageCount) then begin if (ANoteBook.Page[iPageIndex].LockState <> tlsNormal) AND (((ConfirmCloseLocked=0) AND (tb_confirm_close_locked_tab in gDirTabOptions)) OR (ConfirmCloseLocked=1)) then begin if CloseLocked then begin if ShowButtonAll then UserAnswer := MsgBox(Format(rsMsgCloseLockedTab, [ANoteBook.Page[iPageIndex].Caption]), [msmbYes, msmbAll, msmbNo, msmbCancel], msmbYes, msmbCancel) else UserAnswer := MsgBox(Format(rsMsgCloseLockedTab, [ANoteBook.Page[iPageIndex].Caption]), [msmbYes, msmbNo, msmbCancel], msmbYes, msmbCancel); case UserAnswer of mmrNo: Exit(1); mmrCancel, mmrNone: Exit(2); end end else Exit(1); end; QuickViewClose; ANoteBook.RemovePage(iPageIndex); if UserAnswer=mmrAll then Result:=3 else Result:= 0; end; end; procedure TfrmMain.ReLoadTabs(ANoteBook: TFileViewNotebook); var I : Integer; begin for I := 0 to ANoteBook.PageCount - 1 do begin ANoteBook.View[I].UpdateView; end; end; procedure TfrmMain.LoadTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook); // default was ABranch: 'Tabs/OpenedTabs/' var sPath, sViewType: String; iActiveTab: Integer; Page: TFileViewPage; AFileView: TFileView; AFileViewFlags: TFileViewFlags; aFileSource: IFileSource; RootNode, TabNode, ViewNode: TXmlNode; begin RootNode := AConfig.FindNode(AConfig.RootNode,ABranch); if Assigned(RootNode) then begin TabNode := RootNode.FirstChild; while Assigned(TabNode) do begin if TabNode.CompareName('Tab') = 0 then begin Page := nil; AFileView := nil; ViewNode := AConfig.FindNode(TabNode, 'FileView', False); if Assigned(ViewNode) then begin // File view has its own configuration. if AConfig.TryGetAttr(ViewNode, 'Type', sViewType) then begin Page := ANoteBook.AddPage; Page.LoadConfiguration(AConfig, TabNode); AFileView := CreateFileView(sViewType, Page, AConfig, ViewNode); end else DCDebug('File view type not specified in configuration: ' + AConfig.GetPathFromNode(ViewNode) + '.'); end // Else try old configuration. else if AConfig.TryGetValue(TabNode, 'Path', sPath) then begin sPath := GetDeepestExistingPath(sPath); if sPath <> EmptyStr then begin Page := ANoteBook.AddPage; Page.LoadConfiguration(AConfig, TabNode); AFileView := CreateFileView('columns', Page, AConfig, TabNode); AFileView.AddFileSource(TFileSystemFileSource.GetFileSource, sPath); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(TabNode) + '.'); if Assigned(Page) then begin if (not Assigned(AFileView)) or (AFileView.FileSourcesCount = 0) then begin ANoteBook.RemovePage(Page); end else begin if (Page.LockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab]) and (Page.LockPath = '') then Page.LockPath := AFileView.CurrentPath; // Assign events after loading file source. AssignEvents(AFileView); end; end; end; TabNode := TabNode.NextSibling; end; end; // Create at least one tab. if ANoteBook.PageCount = 0 then begin Page := ANoteBook.AddPage; aFileSource := TFileSystemFileSource.GetFileSource; if gDelayLoadingTabs then AFileViewFlags := [fvfDelayLoadingFiles] else AFileViewFlags := []; AFileView := TColumnsFileView.Create(Page, aFileSource, gpExePath, AFileViewFlags); Commands.DoSortByFunctions(AFileView, ColSet.GetColumnSet('Default').GetColumnFunctions(0)); AssignEvents(AFileView); end else if Assigned(RootNode) then begin // read active tab index iActiveTab := AConfig.GetValue(RootNode, 'ActiveTab', 0); // set active tab if (iActiveTab >= 0) and (iActiveTab < ANoteBook.PageCount) then begin if ANoteBook.PageIndex = iActiveTab then nbPageChanged(ANoteBook) else ANoteBook.PageIndex := iActiveTab; end; end; end; procedure TfrmMain.SaveTabsXml(AConfig: TXmlConfig;ABranch:string; ANoteBook: TFileViewNotebook; ASaveHistory:boolean); // default was: 'Tabs/OpenedTabs' var I: Integer; TabsSection: String; Page: TFileViewPage; RootNode, TabNode, ViewNode: TXmlNode; begin RootNode := AConfig.FindNode(AConfig.RootNode, ABranch, True); if ANoteBook = nbLeft then TabsSection := 'Left' else TabsSection := 'Right'; RootNode := AConfig.FindNode(RootNode, TabsSection, True); AConfig.ClearNode(RootNode); AConfig.AddValue(RootNode, 'ActiveTab', ANoteBook.PageIndex); for I:= 0 to ANoteBook.PageCount - 1 do begin TabNode := AConfig.AddNode(RootNode, 'Tab'); ViewNode := AConfig.AddNode(TabNode, 'FileView'); Page := ANoteBook.Page[I]; Page.SaveConfiguration(AConfig, TabNode); Page.FileView.SaveConfiguration(AConfig, ViewNode, ASaveHistory); end; end; { TfrmMain.LoadTheseTabsWithThisConfig } // Will have tabs section from Xml from either left or right and store it back on actual form on left, right, active, inactive, both or none, with setting keep or not etc. // The "ABranch" *must* include the trailing slash when calling here. procedure TfrmMain.LoadTheseTabsWithThisConfig(Config: TXmlConfig; ABranch:string; Source, Destination:TTabsConfigLocation; DestinationToKeep : TTabsConfigLocation; var TabsAlreadyDestroyedFlags:TTabsFlagsAlreadyDestroyed); var sSourceSectionName: string; CheckNode: TXmlNode; begin if Destination<>tclNone then begin QuickViewClose; // 1. Normalize our destination side and destination to keep in case params specified active/inactive if ((Destination=tclActive) and (ActiveFrame=FrameLeft)) OR ((Destination=tclInactive) and (NotActiveFrame=FrameLeft)) then Destination:=tclLeft; if ((Destination=tclActive) and (ActiveFrame=FrameRight)) OR ((Destination=tclInactive) and (NotActiveFrame=FrameRight)) then Destination:=tclRight; if ((DestinationToKeep=tclActive) and (ActiveFrame=FrameLeft)) OR ((DestinationToKeep=tclInactive) and (NotActiveFrame=FrameLeft)) then DestinationToKeep:=tclLeft; if ((DestinationToKeep=tclActive) and (ActiveFrame=FrameRight)) OR ((DestinationToKeep=tclInactive) and (NotActiveFrame=FrameRight)) then DestinationToKeep:=tclRight; // 2. Setup our source section name. case Source of tclLeft: sSourceSectionName := 'Left'; tclRight: sSourceSectionName := 'Right'; end; // 3. Actual load infos from config file. if (Destination=tclLeft) OR (Destination=tclBoth) then begin CheckNode := Config.FindNode(Config.RootNode, ABranch + sSourceSectionName); if Assigned(CheckNode) then begin if (DestinationToKeep<>tclLeft) AND (DestinationToKeep<>tclBoth) AND (not(tfadLeft in TabsAlreadyDestroyedFlags)) then begin frmMain.LeftTabs.DestroyAllPages; TabsAlreadyDestroyedFlags := TabsAlreadyDestroyedFlags + [tfadLeft]; // To don't delete it twice in case both target are left. end; end; LoadTabsXml(Config, ABranch + sSourceSectionName, LeftTabs); end; if (Destination=tclRight) OR (Destination=tclBoth) then begin CheckNode := Config.FindNode(Config.RootNode, ABranch + sSourceSectionName); if Assigned(CheckNode) then begin if (DestinationToKeep<>tclRight) AND (DestinationToKeep<>tclBoth) AND (not(tfadRight in TabsAlreadyDestroyedFlags)) then begin frmMain.RightTabs.DestroyAllPages; TabsAlreadyDestroyedFlags := TabsAlreadyDestroyedFlags + [tfadRight]; // To don't delete it twice in case both target are right. end; LoadTabsXml(Config, ABranch + sSourceSectionName, RightTabs); end; end; // 4. Refresh content of tabs. case Destination of tclLeft: FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; tclRight: FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; tclBoth: begin FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; end; end; end; // if Destination<>tclNone then end; procedure TfrmMain.ToggleConsole; begin if gTermWindow then begin if not Assigned(cmdConsole) then begin cmdConsole:= TVirtualTerminal.Create(pgConsole); cmdConsole.Parent:= pgConsole; cmdConsole.Align:= alClient; cmdConsole.ShowHint:= False; end; FontOptionsToFont(gFonts[dcfConsole], cmdConsole.Font); //We set the font here because if we're coming back from configuration the font in options, we'll later pass here to affect that font if ever displayed. if not Assigned(Cons) then begin Cons:= TPtyDevice.Create(Self); cmdConsole.PtyDevice:= Cons; Cons.Connected:= True; end; end else begin if Assigned(cmdConsole) then begin cmdConsole.Hide; FreeAndNil(cmdConsole); end; FreeAndNil(Cons); end; nbConsole.Visible:= gTermWindow; ConsoleSplitter.Visible:= gTermWindow; end; procedure TfrmMain.ShowOptionsLayout(Data: PtrInt); begin ShowOptions('TfrmOptionsLayout'); end; procedure TfrmMain.ToggleFullscreenConsole; begin if not gTermWindow then begin if MessageDlg(rsMsgTerminalDisabled, mtWarning, [mbYes, mbNo], 0, mbYes) = mrYes then Application.QueueAsyncCall(@ShowOptionsLayout, 0); end else if nbConsole.Height < (nbConsole.Height + pnlNotebooks.Height - 1) then begin nbConsole.Height := nbConsole.Height + pnlNotebooks.Height; if not cmdConsole.Visible then cmdConsole.Visible:= True; if cmdConsole.CanFocus then cmdConsole.SetFocus; end else begin cmdConsole.Hide; nbConsole.Height := 0; if ActiveFrame.CanFocus then ActiveFrame.SetFocus; end; end; procedure TfrmMain.ToolbarExecuteCommand(ToolItem: TKASToolItem); var CommandItem: TKASCommandItem; CommandFuncResult: TCommandFuncResult; begin if not Draging then begin CommandItem := ToolItem as TKASCommandItem; CommandFuncResult:=Commands.Commands.ExecuteCommand(CommandItem.Command, CommandItem.Params); if gToolbarReportErrorWithCommands AND (CommandFuncResult=cfrNotFound) then begin MsgError(Format(rsMsgCommandNotFound, [CommandItem.Command])); end; end; Draging := False; end; procedure TfrmMain.ToolbarExecuteProgram(ToolItem: TKASToolItem); var ProgramItem: TKASProgramItem; CommandExecResult: boolean; begin if not Draging then begin ProgramItem := ToolItem as TKASProgramItem; CommandExecResult:=ProcessExtCommandFork(ProgramItem.Command, ProgramItem.Params, ProgramItem.StartPath); if gToolbarReportErrorWithCommands AND (CommandExecResult=FALSE) then MsgError(Format(rsMsgProblemExecutingCommand,[ProgramItem.Command])); end; Draging := False; end; procedure TfrmMain.UpdateWindowView; procedure UpdateNoteBook(NoteBook: TFileViewNotebook); var I: Integer; begin NoteBook.ShowTabs := ((NoteBook.PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; if tb_show_close_button in gDirTabOptions then begin NoteBook.Options := NoteBook.Options + [nboShowCloseButtons]; end else begin NoteBook.Options := NoteBook.Options - [nboShowCloseButtons]; end; if nbcMultiline in NoteBook.GetCapabilities then NoteBook.MultiLine := tb_multiple_lines in gDirTabOptions; case gDirTabPosition of tbpos_top: NoteBook.TabPosition := tpTop; tbpos_bottom: NoteBook.TabPosition := tpBottom; else NoteBook.TabPosition := tpTop; end; if FInitializedView then begin // Update all tabs for I := 0 to NoteBook.PageCount - 1 do begin NoteBook.View[I].UpdateView; end; // Update active tab if Assigned(NoteBook.ActiveView) then begin NoteBook.ActiveView.ApplySettings; end; end; end; procedure AnchorHorizontalBetween(AControl, ALeftSibling, ARightSibling: TControl); begin AControl.Anchors := AControl.Anchors + [akLeft, akRight]; AControl.AnchorSide[akLeft].Control := ALeftSibling; AControl.AnchorSide[akLeft].Side := asrRight; AControl.AnchorSide[akRight].Control := ARightSibling; AControl.AnchorSide[akRight].Side := asrLeft; end; procedure AnchorHorizontal(AControl, ASibling: TControl); begin AControl.Anchors := AControl.Anchors + [akLeft, akRight]; AControl.AnchorSide[akLeft].Control := ASibling; AControl.AnchorSide[akLeft].Side := asrLeft; AControl.AnchorSide[akRight].Control := ASibling; AControl.AnchorSide[akRight].Side := asrRight; end; procedure AnchorFreeSpace(LeftControl, RightControl: TControl; ExcludeVert: Boolean); begin if gDrivesListButton then begin AnchorHorizontalBetween(LeftControl, btnLeftDrive, btnLeftDirectoryHotlist); AnchorHorizontalBetween(RightControl, btnRightDrive, btnRightDirectoryHotlist); if not ExcludeVert then begin LeftControl.AnchorVerticalCenterTo(pnlLeftTools); RightControl.AnchorVerticalCenterTo(pnlRightTools); end; end else begin AnchorHorizontal(LeftControl, pnlLeftTools); AnchorHorizontal(RightControl, pnlRightTools); if not ExcludeVert then begin LeftControl.AnchorSide[akTop].Control := pnlLeftTools; LeftControl.AnchorSide[akTop].Side := asrTop; RightControl.AnchorSide[akTop].Control := pnlRightTools; RightControl.AnchorSide[akTop].Side := asrTop; end; end; end; var I: Integer; HMForm: THMForm; FunButton: TSpeedButton; Hotkey: THotkey; begin DisableAutoSizing; try if gHorizontalFilePanels then begin pnlLeft.Align := alTop; pnlLeft.BorderSpacing.Right := 0; pnlLeft.BorderSpacing.Bottom := 3; MainSplitter.Cursor := crVSplit; MiddleToolBar.Align:= alTop; MiddleToolBar.Top:= pnlLeft.Height + 1; end else begin pnlLeft.Align := alLeft; pnlLeft.BorderSpacing.Right := 3; pnlLeft.BorderSpacing.Bottom := 0; MainSplitter.Cursor := crHSplit; MiddleToolBar.Align:= alLeft; MiddleToolBar.Left:= pnlLeft.Width + 1; end; (* Middle Tool Bar *) MiddleToolbar.Visible:= gMiddleToolBar; MiddleToolbar.Flat:= gMiddleToolBarFlat; MiddleToolbar.GlyphSize:= gMiddleToolBarIconSize; MiddleToolbar.ShowCaptions:= gMiddleToolBarShowCaptions; MiddleToolbar.SetButtonSize(gMiddleToolBarButtonSize, gMiddleToolBarButtonSize); LoadToolbar(MiddleToolBar); pnlLeftResize(pnlLeft); pnlNotebooksResize(pnlNotebooks); (* Disk Panels *) if gHorizontalFilePanels and gDriveBar1 and gDriveBar2 then begin dskLeft.Parent := pnlDiskLeftInner; dskRight.Parent := pnlDiskRightInner; end else begin dskLeft.Parent := pnlDskLeft; dskRight.Parent := pnlDskRight; end; pnlRightResize(pnlRight); dskLeft.GlyphSize:= gDiskIconsSize; dskRight.GlyphSize:= gDiskIconsSize; dskLeft.ButtonHeight:= gDiskIconsSize + 6; dskRight.ButtonHeight:= gDiskIconsSize + 6; pnlDiskLeftInner.Visible := gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDiskRightInner.Visible := gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDskLeft.Visible := not gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDskRight.Visible := gDriveBar1 and (not gHorizontalFilePanels or not gDriveBar2); pnlDisk.Visible := pnlDskLeft.Visible or pnlDskRight.Visible; if gHorizontalFilePanels and gDriveBar1 and gDriveBar2 then begin pnlLeftTools.Top := pnlDiskLeftInner.Height + 1; pnlRightTools.Top := pnlDiskRightInner.Height + 1; end; // Create disk panels after assigning parent. UpdateDiskCount; // Update list of showed drives (*/ Disk Panels *) FDrivesListPopup.UpdateView; (*Main menu*) Commands.DoShowMainMenu(gMainMenu); (*Main Tool Bar*) MainToolBar.Visible:= gButtonBar; MainToolBar.Flat:= gToolBarFlat; MainToolBar.GlyphSize:= gToolBarIconSize; MainToolBar.ShowCaptions:= gToolBarShowCaptions; MainToolBar.SetButtonSize(gToolBarButtonSize, gToolBarButtonSize); LoadToolbar(MainToolBar); btnLeftDrive.Visible := gDrivesListButton; btnLeftDrive.Flat := gInterfaceFlat; btnLeftRoot.Visible := gDrivesListButton; btnLeftRoot.Flat := gInterfaceFlat; btnLeftUp.Visible := gDrivesListButton; btnLeftUp.Flat := gInterfaceFlat; btnLeftHome.Visible := gDrivesListButton; btnLeftHome.Flat := gInterfaceFlat; btnLeftDirectoryHotlist.Visible := gDrivesListButton; btnLeftDirectoryHotlist.Flat := gInterfaceFlat; btnLeftEqualRight.Visible := gDrivesListButton; btnLeftEqualRight.Flat:= gInterfaceFlat; lblLeftDriveInfo.Visible:= gDriveFreeSpace; pbxLeftDrive.Visible := gDriveInd; pnlLeftTools.Visible:= gDrivesListButton or gDriveFreeSpace or gDriveInd; pnlLeftTools.DoubleBuffered := True; btnRightDrive.Visible := gDrivesListButton; btnRightDrive.Flat := gInterfaceFlat; btnRightRoot.Visible := gDrivesListButton; btnRightRoot.Flat := gInterfaceFlat; btnRightUp.Visible := gDrivesListButton; btnRightUp.Flat := gInterfaceFlat; btnRightHome.Visible := gDrivesListButton;; btnRightHome.Flat := gInterfaceFlat; btnRightDirectoryHotlist.Visible := gDrivesListButton; btnRightDirectoryHotlist.Flat := gInterfaceFlat; btnRightEqualLeft.Visible := gDrivesListButton; btnRightEqualLeft.Flat:= gInterfaceFlat; lblRightDriveInfo.Visible:= gDriveFreeSpace; pbxRightDrive.Visible := gDriveInd; pnlRightTools.Visible:= gDrivesListButton or gDriveFreeSpace or gDriveInd; pnlRightTools.DoubleBuffered := True; // Free space indicator. if gDriveFreeSpace then begin AnchorFreeSpace(lblLeftDriveInfo, lblRightDriveInfo, gDriveInd); if gDriveInd then begin lblLeftDriveInfo.AnchorSide[akTop].Side := asrTop; lblRightDriveInfo.AnchorSide[akTop].Side := asrTop; end; end; // Drive free space indicator if gDriveInd then begin AnchorFreeSpace(pbxLeftDrive, pbxRightDrive, gDriveFreeSpace); if gDriveFreeSpace then begin pbxLeftDrive.AnchorSide[akTop].Control := lblLeftDriveInfo; pbxLeftDrive.AnchorSide[akTop].Side := asrBottom; pbxRightDrive.AnchorSide[akTop].Control := lblRightDriveInfo; pbxRightDrive.AnchorSide[akTop].Side := asrBottom; end; end; // Separate tree UpdateShellTreeView; UpdateTreeView; // Operations panel and menu if (gPanelOfOp = False) then FreeAndNil(FOperationsPanel) else if (FOperationsPanel = nil) then begin FOperationsPanel := TOperationsPanel.Create(Self); FOperationsPanel.Parent := PanelAllProgress; FOperationsPanel.DoubleBuffered := True; PanelAllProgress.OnResize := @FOperationsPanel.ParentResized; end; PanelAllProgress.Visible := gPanelOfOp; Timer.Enabled := (gPanelOfOp or gProgInMenuBar) and (OperationsManager.OperationsCount > 0); // Log window seLogWindow.Visible := gLogWindow; LogSplitter.Visible := gLogWindow; // Align log window seLogWindow.Top := 0; LogSplitter.Top := 0; FontOptionsToFont(gFonts[dcfLog], seLogWindow.Font); // Command line pnlCmdLine.Visible := gCmdLine; pnlCommand.Visible := gCmdLine or gTermWindow; // Align command line and terminal window pnlCommand.Top := -Height; ConsoleSplitter.Top:= -Height; ToggleConsole; // Function keys pnlKeys.Visible := gKeyButtons; if gKeyButtons then begin pnlKeys.Top:= Height * 2; HMForm := HotMan.Forms.Find('Main'); for I := 0 to pnlKeys.ControlCount - 1 do begin if pnlKeys.Controls[I] is TSpeedButton then begin FunButton := pnlKeys.Controls[I] as TSpeedButton; FunButton.Flat := gInterfaceFlat; if Assigned(HMForm) then begin Hotkey := HMForm.Hotkeys.FindByCommand(FunctionButtonsCaptions[I].ACommand); if Assigned(Hotkey) then FunButton.Caption := FunctionButtonsCaptions[I].ACaption + ' ' + ShortcutsToText(Hotkey.Shortcuts); end; end; end; UpdateGUIFunctionKeys; end; UpdateNoteBook(nbLeft); UpdateNoteBook(nbRight); if FInitializedView then begin UpdateSelectedDrives; UpdateFreeSpace(fpLeft, True); UpdateFreeSpace(fpRight, True); end; UpdateHotDirIcons; // Preferable to be loaded even if not required in popupmenu *because* in the tree it's a must, especially when checking for missing directories ShowTrayIcon(gAlwaysShowTrayIcon); UpdateMainTitleBar; FInitializedView := True; finally EnableAutoSizing; end; end; procedure TfrmMain.edtCommandKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if not edtCommand.DroppedDown and ((Key=VK_UP) or (Key=VK_DOWN)) then begin ActiveFrame.SetFocus; Key:= 0; end else if edtCommand.DroppedDown and (Key in [VK_RETURN, VK_SELECT, VK_ESCAPE]) then begin edtCommand.DroppedDown := False; Key := 0; end else case Key of VK_ESCAPE: begin if edtCommand.Text <> '' then edtCommand.Text := '' else ActiveFrame.SetFocus; Key := 0; end; VK_RETURN, VK_SELECT: begin if (Shift * [ssCtrl, ssAlt, ssMeta, ssAltGr] = []) then begin ExecuteCommandLine(ssShift in Shift); Key := 0; end; end; VK_TAB: begin ActiveFrame.SetFocus; Key := 0; end; VK_PAUSE: begin { if gTermWindow and Assigned(Cons) then Cons.Terminal.SendBreak_pty(); } end; end; CheckCommandLine(GetKeyShiftStateEx, Key); end; procedure TfrmMain.edtCommandExit(Sender: TObject); begin // Hide command line if it was temporarily shown. if (not gCmdLine) and IsCommandLineVisible and (edtCommand.Text = '') then begin pnlCmdLine.Visible := False; pnlCommand.Visible := gTermWindow; end; end; procedure TfrmMain.tbChangeDirClick(Sender: TObject); var sDir: String; ToolItem: TKASToolItem; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then begin ToolItem := Button.ToolItem; if ToolItem is TKASProgramItem then begin sDir := TKASProgramItem(ToolItem).StartPath; sDir := PrepareParameter(sDir, nil, [ppoNormalizePathDelims, ppoReplaceTilde]); Commands.cm_ChangeDir([sDir]); end; end; end; procedure TfrmMain.tbCopyClick(Sender: TObject); var ToolItem: TKASToolItem; ItemClone: TKASToolItem = nil; Serializer: TKASToolBarSerializer = nil; Stream: TStringStream = nil; Button: TKASToolButton; Toolbar: TKASToolBar; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then try Toolbar := Button.ToolBar; ToolItem := Button.ToolItem; // Create a copy so that ID of the button is different. if Sender = tbCopy then begin ItemClone := ToolItem.Clone; ToolItem := ItemClone; end; Stream := TStringStream.Create(''); Stream.WriteString(DCToolItemClipboardHeader); Serializer := TKASToolBarSerializer.Create; Serializer.Serialize(Stream, ToolItem); Clipboard.SetFormat(PredefinedClipboardFormat(pcfText), Stream); if Sender = tbCut then Toolbar.RemoveButton(Button); SaveToolBar(Toolbar); finally ItemClone.Free; Serializer.Free; Stream.Free; end; end; procedure TfrmMain.tbEditClick(Sender: TObject); begin EditToolbarButton(TKASToolBar(pmToolBar.PopupComponent), TKASToolButton(pmToolBar.Tag)); end; procedure TfrmMain.OnUniqueInstanceMessage(Sender: TObject; Params: TCommandLineParams); begin RestoreWindow; LoadTabsCommandLine(Params); end; procedure TfrmMain.tbPasteClick(Sender: TObject); var Data: TStringList = nil; ProgramItem: TKASProgramItem; ToolItem: TKASToolItem; Loader: TKASToolBarLoader = nil; Serializer: TKASToolBarSerializer = nil; Stream: TStringStream = nil; Pasted: Boolean = False; Button: TKASToolButton; Toolbar: TKASToolBar; begin Stream := TStringStream.Create(''); if Clipboard.GetFormat(PredefinedClipboardFormat(pcfText), Stream) then try Button := TKASToolButton(pmToolBar.Tag); Toolbar := TKASToolBar(pmToolBar.PopupComponent); // Cut any trailing zeros. while Stream.DataString[Length(Stream.DataString)] = #0 do Stream.Size := Stream.Size - 1; if StrBegins(Stream.DataString, TCToolbarClipboardHeader) or StrBegins(Stream.DataString, DCToolbarClipboardHeader) then begin Data:= TStringList.Create; Data.Text:= Stream.DataString; if Data.Count < 6 then Exit; if (Data[0] = TCToolbarClipboardHeader) or (Data[0] = DCToolbarClipboardHeader) then begin ProgramItem := TKASProgramItem.Create; ProgramItem.Command := Data[1]; ProgramItem.Params := Data[2]; ProgramItem.Icon := Data[3]; ProgramItem.Hint := Data[4]; ProgramItem.StartPath := Data[5]; Toolbar.InsertButton(Button, ProgramItem); SaveToolBar(Toolbar); Pasted := True; end; end else if StrBegins(Stream.DataString, DCToolItemClipboardHeader) then begin Stream.Position := Length(DCToolItemClipboardHeader); Serializer := TKASToolBarSerializer.Create; Loader := TKASToolBarExtendedLoader.Create(Commands.Commands); try ToolItem := Serializer.Deserialize(Stream, Loader); Toolbar.InsertButton(Button, ToolItem); SaveToolBar(Toolbar); Pasted := True; except on EXMLReadError do; end; end; if not Pasted then MessageDlg(Application.Title, rsClipboardContainsInvalidToolbarData, mtWarning, [mbOK], 0); finally Data.Free; Loader.Free; Serializer.Free; Stream.Free; end; end; procedure TfrmMain.CheckCommandLine(ShiftEx: TShiftState; var Key: Word); var ModifierKeys: TShiftState; UTF8Char: TUTF8Char; KeyTypingModifier: TKeyTypingModifier; begin for KeyTypingModifier in TKeyTypingModifier do begin if gKeyTyping[KeyTypingModifier] = ktaCommandLine then begin ModifierKeys := TKeyTypingModifierToShift[KeyTypingModifier]; if ((ModifierKeys <> []) and (ShiftEx * KeyModifiersShortcutNoText = ModifierKeys)) {$IFDEF MSWINDOWS} // Allow entering international characters with Ctrl+Alt on Windows, // if there is no action for Ctrl+Alt and command line typing has no modifiers. or (HasKeyboardAltGrKey and (ShiftEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmCtrlAlt] = ktaNone) and (gKeyTyping[ktmNone] = ktaCommandLine)) {$ENDIF} then begin if (Key <> VK_SPACE) or (edtCommand.Text <> '') then begin UTF8Char := VirtualKeyToUTF8Char(Key, ShiftEx - ModifierKeys); if (UTF8Char <> '') and (not ((Length(UTF8Char) = 1) and (UTF8Char[1] in [#0..#31]))) then begin TypeInCommandLine(UTF8Char); Key := 0; end; end; end; Break; end; end; end; function TfrmMain.ExecuteCommandFromEdit(sCmd: String; bRunInTerm: Boolean): Boolean; var iIndex: Integer; aFile: TFile = nil; sDir, sParams: String; sFilename: String = ''; Operation: TFileSourceExecuteOperation = nil; begin Result:= True; InsertFirstItem(sCmd, edtCommand); // only cMaxStringItems(see uGlobs.pas) is stored if edtCommand.Items.Count>cMaxStringItems then edtCommand.Items.Delete(edtCommand.Items.Count-1); edtCommand.DroppedDown:= False; if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin if FileNameCaseSensitive then sDir:= sCmd else begin sDir:= LowerCase(sCmd); end; iIndex:= Pos('cd ', sDir); if (iIndex = 1) or (sDir = 'cd') then begin sCmd:= ReplaceEnvVars(sCmd); if (iIndex <> 1) then sDir:= GetHomeDir else begin sDir:= RemoveQuotation(Copy(sCmd, iIndex + 3, Length(sCmd))); sDir:= NormalizePathDelimiters(Trim(sDir)); if (sDir = DirectorySeparator) or (sDir = '..') then begin if (sDir = DirectorySeparator) then Commands.DoChangeDirToRoot(ActiveFrame) else begin ActiveFrame.ChangePathToParent(True); end; Exit; end; sDir:= ReplaceTilde(sDir); sDir:= GetAbsoluteFileName(ActiveFrame.CurrentPath, sDir); if mbFileExists(sDir) then //if user entered an existing file, let's switch to the parent folder AND select that file begin sFilename:= ExtractFileName(sDir); sDir:= ExtractFileDir(sDir); end; end; // Choose FileSource by path ChooseFileSource(ActiveFrame, sDir, True); if sFilename <> '' then ActiveFrame.SetActiveFile(sFilename); if SameText(ExcludeBackPathDelimiter(ActiveFrame.CurrentPath), sDir) then begin if gTermWindow and Assigned(Cons) then Cons.SetCurrentDir(sDir); end; end else begin {$IFDEF MSWINDOWS} //Let's see if user typed something like "c:", "X:", etc. and if so, switch active panel to that drive (like TC) if (length(sCmd)=2) AND (pos(':',sCmd)=2) then begin iIndex:=0; while (iIndex'') do begin if lowercase(sCmd[1]) = lowercase(PDrive(DrivesList.Items[iIndex])^.DisplayName) then begin SetPanelDrive(PanelSelected, DrivesList.Items[iIndex],false); sCmd:=''; end; inc(iIndex); end; end; {$ENDIF} if sCmd<>'' then begin if gTermWindow and Assigned(Cons) then begin sCmd:= ReplaceEnvVars(sCmd); Cons.WriteStr(sCmd + sLineBreak) end else begin try SplitCmdLineToCmdParams(sCmd, sCmd, sParams); //TODO:Hum... ProcessExtCommandFork(sCmd, sParams, ActiveFrame.CurrentPath, nil, bRunInTerm, bRunInTerm); except on e: EInvalidCommandLine do MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; end; end; end else begin aFile:= ActiveFrame.CloneActiveFile; if Assigned(aFile) then try sCmd:= 'quote' + #32 + sCmd; aFile.FullPath:= ActiveFrame.CurrentPath; Operation:= ActiveFrame.FileSource.CreateExecuteOperation( aFile, ActiveFrame.CurrentPath, sCmd) as TFileSourceExecuteOperation; if Assigned(Operation) then begin Operation.Execute; case Operation.ExecuteOperationResult of fseorSuccess: begin ActiveFrame.Reload(True); end; fseorError: begin // Show error message if Length(Operation.ResultString) = 0 then msgError(rsMsgErrEOpen) else msgError(Operation.ResultString); end; fseorSymLink: begin // Change directory to new path (returned in Operation.ResultString) with ActiveFrame do begin // If path is URI if Pos('://', Operation.ResultString) > 0 then ChooseFileSource(ActiveFrame, Operation.ResultString) else if not mbSetCurrentDir(ExcludeTrailingPathDelimiter(Operation.ResultString)) then begin // Simply change path CurrentPath:= Operation.ResultString; end else begin // Get a new filesystem file source AddFileSource(TFileSystemFileSource.GetFileSource, Operation.ResultString); end; end; end; end; end; finally FreeAndNil(aFile); FreeAndNil(Operation); end; end; end; procedure TfrmMain.SetMainSplitterPos(AValue: Double); begin if (AValue >= 0) and (AValue <= 100) then FMainSplitterPos:= AValue; end; procedure TfrmMain.SetPanelSelected(AValue: TFilePanelSelect); begin if PanelSelected = AValue then Exit; PanelSelected := AValue; UpdateTreeViewPath; UpdateMainTitleBar; UpdatePrompt; if actSyncChangeDir.Checked then begin FSyncChangeDir:= ExcludeTrailingBackslash(ActiveFrame.CurrentPath); end; end; procedure TfrmMain.TypeInCommandLine(Str: String); begin Commands.cm_FocusCmdLine([]); edtCommand.Text := edtCommand.Text + Str; edtCommand.SelStart := UTF8Length(edtCommand.Text) + 1; end; //LaBero begin //Minimize the main window procedure TfrmMain.MinimizeWindow; begin Self.WindowState := wsMinimized; end; //LaBero end procedure TfrmMain.RestoreWindow; begin if HiddenToTray then RestoreFromTray else begin WindowState:= lastWindowState; BringToFront; end; end; procedure TfrmMain.LoadTabs; var AConfig: TXmlConfig; begin if gConfig.FindNode(gConfig.RootNode, 'Tabs/OpenedTabs') <> nil then AConfig:= gConfig else begin AConfig:= TXmlConfig.Create(gpCfgDir + 'tabs.xml', True); end; try LoadTabsXml(AConfig, 'Tabs/OpenedTabs/Left', nbLeft); LoadTabsXml(AConfig, 'Tabs/OpenedTabs/Right', nbRight); finally if (AConfig <> gConfig) then AConfig.Free; end; if not CommandLineParams.ActivePanelSpecified then begin CommandLineParams.ActivePanelSpecified:= True; CommandLineParams.ActiveRight:= gActiveRight; end; LoadTabsCommandLine(CommandLineParams); if gDelayLoadingTabs then begin // Load only the current active tab of each notebook. FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; end; end; procedure TfrmMain.LoadTabsCommandLine(Params: TCommandLineParams); procedure LoadPanel(aNoteBook: TFileViewNotebook; aPath: String); begin if Length(aPath) <> 0 then begin aPath:= ReplaceEnvVars(ReplaceTilde(aPath)); if not mbFileSystemEntryExists(aPath) then aPath:= GetDeepestExistingPath(aPath); if Length(aPath) <> 0 then begin if Params.NewTab then AddTab(aNoteBook, aPath) else aNoteBook.ActivePage.FileView.ChangePathAndSetActiveFile(aPath) end; end; end; begin //-- set path for left panel (if set) LoadPanel(nbLeft, Params.LeftPath); //-- set path for right panel (if set) LoadPanel(nbRight, Params.RightPath); //-- set active panel, if needed if Params.ActivePanelSpecified then begin if Params.ActiveRight then SetActiveFrame(fpRight) else SetActiveFrame(fpLeft); end; //-- set path for active panel (if set) if ActiveFrame.NotebookPage is TFileViewPage then begin LoadPanel((ActiveFrame.NotebookPage as TFileViewPage).Notebook, Params.ActivePanelPath); end; ActiveFrame.SetFocus; end; procedure TfrmMain.AddTab(ANoteBook: TFileViewNotebook; aPath: String); var Page: TFileViewPage; AFileView: TFileView; AFileViewFlags: TFileViewFlags; aFileSource: IFileSource; begin Page := ANoteBook.AddPage; aFileSource := TFileSystemFileSource.GetFileSource; if gDelayLoadingTabs then AFileViewFlags := [fvfDelayLoadingFiles] else AFileViewFlags := []; AFileView := TColumnsFileView.Create(Page, aFileSource, aPath, AFileViewFlags); AssignEvents(AFileView); ANoteBook.PageIndex := ANoteBook.PageCount - 1; end; {$IF DEFINED(DARWIN)} procedure TfrmMain.OnNSServiceOpenWithNewTab( filenames:TStringList ); begin if Assigned(filenames) and (filenames.Count>0) then begin AddTab( nbRight, filenames[0] ); SetActiveFrame(fpRight); ActiveFrame.SetFocus; end; end; function TfrmMain.NSServiceMenuIsReady(): boolean; begin Result:= true; end; function TfrmMain.NSServiceMenuGetFilenames(): TStringList; var filenames: TStringList; i: Integer; files: TFiles; activeFile: TFile; begin Result:= nil; filenames:= TStringList.Create; files:= ActiveFrame.CloneSelectedFiles(); if files.Count>0 then begin for i:=0 to files.Count-1 do begin filenames.add( files[i].FullPath ); end; end; FreeAndNil( files ); if filenames.Count = 0 then begin activeFile:= ActiveFrame.CloneActiveFile; if activeFile.IsNameValid() then filenames.add( activeFile.FullPath ) else filenames.add( activeFile.Path ); FreeAndNil( activeFile ); end; if filenames.Count>0 then Result:= filenames; end; procedure TfrmMain.NSThemeChangedHandler; begin ThemeServices.IntfDoOnThemeChange; end; {$ENDIF} procedure TfrmMain.LoadWindowState; var ANode: TXmlNode; FPixelsPerInch: Integer; begin // Load window bounds ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); begin MainSplitterPos := gConfig.GetValue(ANode, 'Splitter', 50.0); FRestoredLeft := gConfig.GetValue(ANode, 'Left', 80); FRestoredTop := gConfig.GetValue(ANode, 'Top', 48); FRestoredWidth := gConfig.GetValue(ANode, 'Width', 800); FRestoredHeight := gConfig.GetValue(ANode, 'Height', 480); FPixelsPerInch := gConfig.GetValue(ANode, 'PixelsPerInch', DesignTimePPI); if Scaled and (Screen.PixelsPerInch <> FPixelsPerInch) then begin FRestoredWidth := MulDiv(FRestoredWidth, Screen.PixelsPerInch, FPixelsPerInch); FRestoredHeight := MulDiv(FRestoredHeight, Screen.PixelsPerInch, FPixelsPerInch); end; if gConfig.GetValue(ANode, 'Maximized', True) then lastWindowState:= TWindowState.wsMaximized else lastWindowState:= TWindowState.wsNormal; SetBounds(FRestoredLeft, FRestoredTop, FRestoredWidth, FRestoredHeight); end; end; procedure TfrmMain.SaveWindowState; var ANode: TXmlNode; begin // Save window bounds and state ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); begin gConfig.SetValue(ANode, 'Left', FRestoredLeft); gConfig.SetValue(ANode, 'Top', FRestoredTop); gConfig.SetValue(ANode, 'Width', FRestoredWidth); gConfig.SetValue(ANode, 'Height', FRestoredHeight); gConfig.SetValue(ANode, 'PixelsPerInch', Screen.PixelsPerInch); gConfig.SetValue(ANode, 'Maximized', (WindowState in [wsMaximized,wsFullScreen])); gConfig.SetValue(ANode, 'Splitter', FMainSplitterPos); end; end; procedure TfrmMain.LoadToolbar(AToolBar: TKASToolBar); var ToolBarLoader: TKASToolBarExtendedLoader; ToolBarNode: TXmlNode; begin AToolBar.BeginUpdate; ToolBarLoader := TKASToolBarExtendedLoader.Create(Commands.Commands); try AToolBar.Clear; ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/' + AToolBar.Name, False); if Assigned(ToolBarNode) then AToolBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader, tocl_FlushCurrentToolbarContent); finally ToolBarLoader.Free; AToolBar.EndUpdate; end; end; procedure TfrmMain.SaveToolBar(AToolBar: TKASToolBar); var ToolBarNode: TXmlNode; begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/' + AToolBar.Name, True); gConfig.ClearNode(ToolBarNode); AToolBar.SaveConfiguration(gConfig, ToolBarNode); end; procedure TfrmMain.ShowLogWindow(Data: PtrInt); var bShow: Boolean absolute Data; begin LogSplitter.Visible:= bShow; seLogWindow.Visible:= bShow; LogSplitter.Top:= seLogWindow.Top - LogSplitter.Height; end; procedure TfrmMain.ConfigSaveSettings(bForce: Boolean); var AConfig: TXmlConfig; begin try DebugLn('Saving configuration'); if gSaveCmdLineHistory then glsCmdLineHistory.Assign(edtCommand.Items); (* Save all tabs *) if gSaveFolderTabs or bForce then begin AConfig:= TXmlConfig.Create(gpCfgDir + 'tabs.xml'); try SaveTabsXml(AConfig, 'Tabs/OpenedTabs/', nbLeft, gSaveDirHistory); SaveTabsXml(AConfig, 'Tabs/OpenedTabs/', nbRight, gSaveDirHistory); AConfig.Save; finally AConfig.Free; end; gConfig.DeleteNode(gConfig.RootNode, 'Tabs/OpenedTabs'); end; if gSaveWindowState then SaveWindowState; if gButtonBar then SaveToolBar(MainToolBar); SaveGlobs; // Should be last, writes configuration file except on E: Exception do DebugLn('Cannot save main configuration: ', e.Message); end; end; function TfrmMain.IsCommandLineVisible: Boolean; begin Result := (edtCommand.Visible and pnlCommand.Visible and pnlCmdLine.Visible); end; procedure TfrmMain.ShowCommandLine(AFocus: Boolean); begin if edtCommand.Visible then begin // Show temporarily command line on user request. if not (gCmdLine and frmMain.IsCommandLineVisible) then begin pnlCommand.Show; pnlCmdLine.Show; end; if AFocus then edtCommand.SetFocus; end; end; function TfrmMain.FindMatchingDrive(Address, Path: String): Integer; var I : Integer; DrivePath: String; DrivePathLen: PtrInt; LongestPathLen: Integer = 0; begin Result := -1; if Assigned(DrivesList) then begin Path := UTF8UpperCase(Path); for I := 0 to DrivesList.Count - 1 do begin if (DrivesList[I]^.DriveType = dtSpecial) and (Length(Address) > 0) then begin if Pos(Address, DrivesList[I]^.Path) = 1 then Exit(I); end else begin DrivePath := UTF8UpperCase(DrivesList[I]^.Path); DrivePathLen := UTF8Length(DrivePath); if (DrivePathLen > LongestPathLen) and IsInPath(DrivePath, Path, True, True) then begin LongestPathLen := DrivePathLen; Result := I; end; end; end; end; end; procedure TfrmMain.UpdateDriveToolbarSelection(DriveToolbar: TKAStoolBar; FileView: TFileView); var DriveIndex: Integer; begin DriveIndex := FindMatchingDrive(FileView.CurrentAddress, FileView.CurrentPath); if (DriveIndex >= 0) and (DriveIndex < DriveToolbar.ButtonCount) then DriveToolbar.Buttons[DriveIndex].Down := True else // Path not found in toolbar. DriveToolbar.UncheckAllButtons; end; procedure TfrmMain.UpdateDriveButtonSelection(DriveButton: TSpeedButton; FileView: TFileView); var Drive: PDrive; BitmapTmp: Graphics.TBitmap = nil; begin DriveButton.Tag := FindMatchingDrive(FileView.CurrentAddress, FileView.CurrentPath); if not gDrivesListButton then Exit; if DriveButton.Tag >= 0 then begin Drive := DrivesList[DriveButton.Tag]; DriveButton.Caption := Drive^.DisplayName; BitmapTmp := PixMapManager.GetDriveIcon(Drive, gDiskIconsSize, DriveButton.Color); end else begin DriveButton.Caption := ''; if FileView.FileSource.IsClass(TArchiveFileSource) then BitmapTmp := PixMapManager.GetArchiveIcon(gDiskIconsSize, DriveButton.Color) else BitmapTmp := PixMapManager.GetDefaultDriveIcon(gDiskIconsSize, DriveButton.Color); end; DriveButton.Glyph := BitmapTmp; DriveButton.Width := DriveButton.Glyph.Width + DriveButton.Canvas.TextWidth(DriveButton.Caption) + 24; FreeAndNil(BitmapTmp); end; procedure TfrmMain.UpdateSelectedDrive(ANoteBook: TFileViewNotebook); var FileView: TFileView; begin FileView := ANoteBook.ActiveView; if Assigned(FileView) then begin // Change left drive toolbar for left drive button. if (ANoteBook = nbLeft) then begin if gDriveBar1 then // If drives toolbar enabled at all begin if gDriveBar2 then // If showing two toolbars UpdateDriveToolbarSelection(dskLeft, FileView) else // dskRight is the main toolbar. UpdateDriveToolbarSelection(dskRight, FileView); end; UpdateDriveButtonSelection(btnLeftDrive, FileView); end // Change right drive toolbar for right drive button else if (ANoteBook = nbRight) then begin if gDriveBar1 then UpdateDriveToolbarSelection(dskRight, FileView); UpdateDriveButtonSelection(btnRightDrive, FileView); end; end; end; {$IF DEFINED(MSWINDOWS)} procedure TfrmMain.OnDriveIconLoaded(Data: PtrInt); var ADrive: TKASDriveItem; AIcon: TDriveIcon absolute Data; procedure UpdateDriveIcon(dskPanel: TKASToolBar); var Index: Integer; begin for Index:= 0 to dskPanel.ButtonCount - 1 do begin if dskPanel.Buttons[Index].ToolItem is TKASDriveItem then begin ADrive:= TKASDriveItem(dskPanel.Buttons[Index].ToolItem); if SameText(ADrive.Drive^.Path, AIcon.Drive.Path) then begin dskPanel.Buttons[Index].Glyph.Assign(AIcon.Bitmap); Break; end; end; end; end; begin if gDriveBar2 then UpdateDriveIcon(dskLeft); if gDriveBar1 then UpdateDriveIcon(dskRight); AIcon.Free; end; {$ENDIF} procedure TfrmMain.UpdateSelectedDrives; begin if gDriveBar1 then begin if gDriveBar2 then begin UpdateDriveToolbarSelection(dskLeft, FrameLeft); UpdateDriveToolbarSelection(dskRight, FrameRight); end else // dskRight is the main toolbar. UpdateDriveToolbarSelection(dskRight, ActiveFrame); end; UpdateDriveButtonSelection(btnLeftDrive, FrameLeft); UpdateDriveButtonSelection(btnRightDrive, FrameRight); end; procedure TfrmMain.UpdateMainTitleBar; var sTmp: String; begin if gShowCurDirTitleBar and (fspDirectAccess in ActiveFrame.FileSource.Properties) then begin sTmp := ActiveFrame.CurrentPath; Self.Caption:= Format('%s (%s) - %s', [GetLastDir(sTmp), sTmp, sStaticTitleBarString] ); end else begin Self.Caption := sStaticTitleBarString; end; end; procedure TfrmMain.UpdateGUIFunctionKeys; var I: Integer; H: Integer = 0; AButton: TSpeedButton; begin for I:= 0 to pnlKeys.ControlCount - 1 do begin if pnlKeys.Controls[I] is TSpeedButton then begin AButton:= TSpeedButton(pnlKeys.Controls[I]); FontOptionsToFont(gFonts[dcfFunctionButtons], AButton.Font); H:= Max(H, AButton.Canvas.TextHeight(AButton.Caption)); end; end; pnlKeys.Height := H + 4; end; procedure TfrmMain.ShowDrivesList(APanel: TFilePanelSelect); var p: TPoint; ADriveIndex: Integer; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(APanel); case APanel of fpLeft: begin p := Classes.Point(btnLeftDrive.Left, btnLeftDrive.Height); p := pnlLeftTools.ClientToScreen(p); ADriveIndex := btnLeftDrive.Tag; end; fpRight: begin p := Classes.Point(btnRightDrive.Left, btnRightDrive.Height); p := pnlRightTools.ClientToScreen(p); ADriveIndex := btnRightDrive.Tag; end; end; p := ScreenToClient(p); FDrivesListPopup.Show(p, APanel, ADriveIndex); end; procedure TfrmMain.HideToTray; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} var ActiveWindow: HWND; LCLObject: TObject; {$ENDIF} begin { If a modal form is active we have to hide it first before hiding the main form to avoid bugs: On GTK2 a modal form loses it's modal state after the main window is restored (GTK still says the window is modal and resetting modal state doesn't do anything). On QT the tray icon does not receive any mouse events (because the modal window has capture) thus preventing the user from restoring the main window. So when the main form is hidden the modal window is hidden too. } {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} LastActiveWindow := nil; if not Self.Active then // If there is another window active begin ActiveWindow := GetActiveWindow; if ActiveWindow <> 0 then begin LCLObject := GetLCLOwnerObject(ActiveWindow); if Assigned(LCLObject) and (LCLObject is TCustomForm) and (fsModal in (LCLObject as TCustomForm).FormState) then // only for modal windows begin LastActiveWindow := LCLObject as TCustomForm; {$IFDEF LCLGTK2} // Cannot use Hide method, because it closes the modal form. // We only want to hide it. LastActiveWindow.Visible := False; {$ENDIF} {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} // Have to use QT directly to hide the window for this to work. TQtWidget(LastActiveWindow.Handle).setVisible(False); {$ENDIF} end; end; end; {$ENDIF} Hide; ShowTrayIcon(True); HiddenToTray := True; end; procedure TfrmMain.RestoreFromTray; begin if lastWindowState=wsMaximized then WindowState:=wsMaximized; ShowOnTop; if not gAlwaysShowTrayIcon then ShowTrayIcon(False); // After the main form is shown, restore the last active modal form if there was any. {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} if Assigned(LastActiveWindow) then begin {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} TQtWidget(LastActiveWindow.Handle).setVisible(true); {$ENDIF} {$IFDEF LCLGTK2} LastActiveWindow.Show; {$ENDIF} LastActiveWindow := nil; end; {$ENDIF} end; procedure TfrmMain.RightDriveBarExecuteDrive(ToolItem: TKASToolItem); var DriveItem: TKASDriveItem; Panel: TFilePanelSelect; begin DriveItem := ToolItem as TKASDriveItem; if gDriveBar2 then Panel := fpRight else Panel := ActiveNotebook.Side; SetPanelDrive(Panel, DriveItem.Drive, True); end; procedure TfrmMain.ShowTrayIcon(bShow: Boolean); begin if (bShow <> MainTrayIcon.Visible) and (HidingTrayIcon = False) then begin if bShow then begin MainTrayIcon.Visible := True; end else begin // ShowTrayIcon might be called from within OnClick event of the icon // (MainTrayIconClick->RestoreFromTray->ShowTrayIcon), so the MainTrayIcon // cannot be hidden here, because it would be destroyed causing A/V. // Hiding it must be delayed until after the mouse click handler of the icon is finished. HidingTrayIcon := True; Application.QueueAsyncCall(@HideTrayIconDelayed, 0); end; end; end; procedure TfrmMain.HideTrayIconDelayed(Data: PtrInt); begin MainTrayIcon.Visible := False; HidingTrayIcon := False; end; procedure TfrmMain.ExecuteCommandLine(bRunInTerm: Boolean); begin mbSetCurrentDir(ActiveFrame.CurrentPath); ExecuteCommandFromEdit(edtCommand.Text, bRunInTerm); edtCommand.Text := ''; ActiveFrame.Reload; ActiveFrame.SetFocus; {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // workaround for GTK // edtCommandExit is not always called when losing focus edtCommandExit(Self); {$ENDIF} end; procedure TfrmMain.UpdatePrompt; var st: String; Properties: TFileSourceProperties; begin if (fsoExecute in ActiveFrame.FileSource.GetOperationsTypes) then begin with lblCommandPath do begin Visible := True; st := ExcludeTrailingBackslash(ActiveFrame.CurrentPath); Hint := st; Caption := MinimizeFilePath(Format(fmtCommandPath, [st]), Canvas, pnlCommand.Width div 3); end; // Change path in terminal if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.SetCurrentDir(ActiveFrame.CurrentPath); end; edtCommand.Visible := True; end else begin lblCommandPath.Visible := False; edtCommand.Visible := False; end; // Change program current path Properties := ActiveFrame.FileSource.GetProperties; if (fspDirectAccess in Properties) and not (fspLinksToLocalFiles in Properties) then begin mbSetCurrentDir(ActiveFrame.CurrentPath); end; end; procedure TfrmMain.OnDriveGetFreeSpace(Data: PtrInt); var aFileView: TFileView; sboxDrive: TPaintBox; lblDriveInfo: TLabel; AData: TFreeSpaceData absolute Data; begin case AData.Panel of fpLeft : begin sboxDrive := pbxLeftDrive; aFileView := FrameLeft; lblDriveInfo :=lblLeftDriveInfo; end; fpRight: begin sboxDrive := pbxRightDrive; aFileView := FrameRight; lblDriveInfo := lblRightDriveInfo; end; end; if mbCompareFileNames(AData.Path, aFileView.CurrentPath) then begin if not AData.Result then begin lblDriveInfo.Caption := ''; lblDriveInfo.Hint := ''; sboxDrive.Hint := ''; sboxDrive.Tag := -1; sboxDrive.Invalidate; end else begin if gDriveInd = True then begin if AData.TotalSize > 0 then sboxDrive.Tag := 100 - Round((AData.FreeSize / AData.TotalSize) * 100) // Save busy percent else begin sboxDrive.Tag := -1; end; sboxDrive.Invalidate; end; lblDriveInfo.Hint := Format(rsFreeMsg, [cnvFormatFileSize(AData.FreeSize, uoscHeader), cnvFormatFileSize(AData.TotalSize, uoscHeader)]); if gShortFormatDriveInfo then lblDriveInfo.Caption := Format(rsFreeMsgShort, [cnvFormatFileSize(AData.FreeSize, uoscHeader)]) else begin lblDriveInfo.Caption := lblDriveInfo.Hint; end; sboxDrive.Hint := lblDriveInfo.Hint; end; end; AData.Free; end; procedure TfrmMain.UpdateFreeSpace(Panel: TFilePanelSelect; Clear: Boolean); var aFileView: TFileView; sboxDrive: TPaintBox; lblDriveInfo: TLabel; AData: TFreeSpaceData; begin case Panel of fpLeft : begin sboxDrive := pbxLeftDrive; aFileView := FrameLeft; lblDriveInfo :=lblLeftDriveInfo; end; fpRight: begin sboxDrive := pbxRightDrive; aFileView := FrameRight; lblDriveInfo := lblRightDriveInfo; end; end; if Clear then begin lblDriveInfo.Caption := ''; lblDriveInfo.Hint := ''; sboxDrive.Hint := ''; sboxDrive.Tag := -1; sboxDrive.Invalidate; end; AData := TFreeSpaceData.Create; AData.Panel := Panel; AData.Path := aFileView.CurrentPath; AData.OnFinish := @OnDriveGetFreeSpace; AData.FileSource := aFileView.FileSource; TThread.ExecuteInThread(@AData.GetFreeSpaceInThread); end; procedure TfrmMain.CloseNotebook(ANotebook: TFileViewNotebook); var I: Integer; begin for I := 0 to ANotebook.PageCount - 1 do ANotebook.View[I].Clear; ANotebook.DestroyAllPages; end; procedure TfrmMain.DriveListDriveSelected(Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect); begin SetPanelDrive(APanel, DrivesList.Items[ADriveIndex], True); end; procedure TfrmMain.DriveListClose(Sender: TObject); begin SetActiveFrame(SelectedPanel); end; procedure TfrmMain.AllProgressOnUpdateTimer(Sender: TObject); var AllProgressPoint: Integer; begin if gPanelOfOp = True then begin FOperationsPanel.UpdateView; end; // Show progress in the menu if gProgInMenuBar = True then begin AllProgressPoint:= Round(OperationsManager.AllProgressPoint * 100); mnuAllOperProgress.Caption:= IntToStr(AllProgressPoint) + ' %'; end; Sleep(0); end; procedure TfrmMain.OperationManagerNotify(Item: TOperationsManagerItem; Event: TOperationManagerEvent); begin if Event = omevOperationRemoved then begin // Hide progress bar if there are no operations if OperationsManager.OperationsCount = 0 then begin mnuAllOperProgress.Visible:= False; mnuAllOperPause.Visible:= False; mnuAllOperStart.Visible:= False; mnuAllOperStop.Visible:= False; end; PlaySound(Item); end else if Event = omevOperationAdded then begin if gProgInMenuBar = True then begin mnuAllOperProgress.Visible:= True; mnuAllOperPause.Visible:= True; mnuAllOperStart.Visible:= True; mnuAllOperStop.Visible:= True; end; end; AllProgressOnUpdateTimer(Timer); Timer.Enabled := (gPanelOfOp or gProgInMenuBar) and (OperationsManager.OperationsCount > 0); end; procedure TfrmMain.SetPanelDrive(aPanel: TFilePanelSelect; Drive: PDrive; ActivateIfNeeded: Boolean); var Index: Integer; DrivePath: String; DriveIndex: Integer; FoundPath: Boolean = False; aFileView, OtherFileView: TFileView; begin if (Drive^.DriveType in [dtSpecial, dtVirtual]) or IsAvailable(Drive, True) then begin case aPanel of fpLeft: begin aFileView := FrameLeft; OtherFileView := FrameRight; end; fpRight: begin aFileView := FrameRight; OtherFileView := FrameLeft; end; end; // Special case for special drive if Drive^.DriveType = dtSpecial then begin ChooseFileSource(aFileView, Drive^.Path); if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); Exit; end; // Special case for virtual drive if Drive^.DriveType = dtVirtual then begin if Drive^.FileSystem = 'VFS' then Commands.DoOpenVirtualFileSystemList(aFileView) else begin ChooseFileSource(aFileView, GetNetworkPath(Drive)); if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); end; Exit; end; DrivePath:= ExcludeTrailingPathDelimiter(Drive^.Path); // Copy path opened in the other panel if the file source and drive match // and that path is not already opened in this panel. if (not gGoToRoot) and OtherFileView.FileSource.IsClass(TFileSystemFileSource) and mbCompareFileNames(ExtractRootDir(OtherFileView.CurrentPath), DrivePath) and not mbCompareFileNames(OtherFileView.CurrentPath, aFileView.CurrentPath) then begin FoundPath:= True; SetFileSystemPath(aFileView, OtherFileView.CurrentPath); end // Open archive parent directory else if (gGoToRoot = False) and OtherFileView.FileSource.IsClass(TArchiveFileSource) and (not IsInPath(GetTempFolder, OtherFileView.FileSource.CurrentAddress, True, False)) and mbCompareFileNames(ExtractRootDir(OtherFileView.FileSource.CurrentAddress), DrivePath) and not mbCompareFileNames(ExtractFilePath(OtherFileView.FileSource.CurrentAddress), aFileView.CurrentPath) then begin FoundPath:= True; SetFileSystemPath(aFileView, ExtractFilePath(OtherFileView.FileSource.CurrentAddress)); end // Open latest path from history for chosen drive else if (gGoToRoot = False) and aFileView.FileSource.IsClass(TFileSystemFileSource) and not mbCompareFileNames(ExtractRootDir(aFileView.CurrentPath), DrivePath) then begin for Index:= 0 to glsDirHistory.Count - 1 do begin DriveIndex:= FindMatchingDrive(EmptyStr, glsDirHistory[Index]); if (DriveIndex >= 0) and (DriveIndex < DrivesList.Count) then begin if mbCompareFileNames(Drive^.Path, DrivesList[DriveIndex]^.Path) then begin if mbDirectoryExists(ExcludeBackPathDelimiter(glsDirHistory[Index])) then begin SetFileSystemPath(aFileView, glsDirHistory[Index]); FoundPath:= True; Break; end; end; end; end; end; if not FoundPath then begin SetFileSystemPath(aFileView, Drive^.Path); end; if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); end else begin msgWarning(rsMsgDiskNotAvail); // Restore previous selected button. case aPanel of fpLeft: UpdateSelectedDrive(LeftTabs); fpRight: UpdateSelectedDrive(RightTabs); end; end; end; procedure TfrmMain.OnDriveWatcherEvent(EventType: TDriveWatcherEvent; const ADrive: PDrive); begin // Update disk panel does not work correctly when main // window is minimized. So set FUpdateDiskCount flag instead // and update disk count later in WindowStateChange event if WindowState = wsMinimized then FUpdateDiskCount:= True else begin UpdateDiskCount; end; if (FrameLeft = nil) or (FrameRight = nil) then Exit; if (EventType = dweDriveRemoved) and Assigned(ADrive) then begin if IsInPath(ADrive^.Path, ActiveFrame.CurrentPath, True, True) then ActiveFrame.CurrentPath:= GetHomeDir else if IsInPath(ADrive^.Path, NotActiveFrame.CurrentPath, True, True) then NotActiveFrame.CurrentPath:= GetHomeDir; end; UpdateSelectedDrives; end; procedure TfrmMain.DelayedEvent(Data: PtrInt); begin { discard duplicate calls, accept last call only } Dec(FDelayedEventCtr); if FDelayedEventCtr > 0 then Exit; { update restored bounds } if WindowState = wsNormal then begin if FDelayedWMMove then begin FRestoredLeft := Left; FRestoredTop := Top; end; if FDelayedWMSize then begin FRestoredWidth := Width; FRestoredHeight := Height; end; end; FDelayedWMMove := False; FDelayedWMSize := False; // Sync position and size with real main form with BoundsRect do Application.MainForm.SetBounds(Left, Top, Width, Height); end; procedure TfrmMain.AppActivate(Sender: TObject); begin if Assigned(FrameLeft) then FrameLeft.ReloadIfNeeded; if Assigned(FrameRight) then FrameRight.ReloadIfNeeded; end; procedure TfrmMain.AppDeActivate(Sender: TObject); begin if Assigned(frmTreeViewMenu) then begin frmTreeViewMenu.Close; end; Application.CancelHint; end; procedure TfrmMain.AppEndSession(Sender: TObject); var CloseAction: TCloseAction; begin frmMainClose(Sender, CloseAction); end; procedure TfrmMain.AppThemeChange(Sender: TObject); procedure UpdateNoteBook(NoteBook: TFileViewNotebook); var Index: Integer; begin for Index := 0 to NoteBook.PageCount - 1 do begin NoteBook.View[Index].UpdateColor; end; end; var Index: Integer; begin UpdateNoteBook(LeftTabs); UpdateNoteBook(RightTabs); ColSet.UpdateStyle; gColorExt.UpdateStyle; gHighlighters.UpdateStyle; DCDebug('AppThemeChange'); for Index:= 0 to Screen.CustomFormCount - 1 do begin Screen.CustomForms[Index].Perform(CM_THEMECHANGED, 0, 0); end; end; procedure TfrmMain.AppQueryEndSession(var Cancel: Boolean); var CanClose: Boolean = True; begin FormCloseQuery(Self, CanClose); Cancel := not CanClose; end; {$IFDEF DARWIN} procedure TfrmMain.createDarwinAppMenu; var appMenu: TMenuItem; aboutItem: TMenuItem; sepItem: TMenuItem; prefItem: TMenuItem; begin appMenu:= TMenuItem.Create(mnuMain); appMenu.Caption:= ''; mnuMain.Items.Insert(0, appMenu); aboutItem:= TMenuItem.Create(mnuMain); aboutItem.Caption:= 'About ' + Application.Title; aboutItem.OnClick:= @aboutOnClick; appMenu.Add(aboutItem); sepItem := TMenuItem.Create(mnuMain); sepItem.Caption := '-'; appMenu.Add(sepItem); prefItem := TMenuItem.Create(mnuMain); prefItem.Caption := 'Preferences...'; prefItem.OnClick := @optionsOnClick; prefItem.Shortcut := ShortCut(VK_OEM_COMMA, [ssMeta]); appMenu.Add(prefItem); end; procedure TfrmMain.aboutOnClick(Sender: TObject); begin Commands.cm_About([]); end; procedure TfrmMain.optionsOnClick(Sender: TObject); begin Commands.cm_Options([]); end; {$ENDIF} {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and not DEFINED(MSWINDOWS)} function TfrmMain.QObjectEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result:= False; case QEvent_type(Event) of QEventApplicationPaletteChange: begin ThemeServices.IntfDoOnThemeChange; end; QEventClose: begin TQtWidget(Self.Handle).SlotClose; Result:= CloseQueryResult; if Result then QEvent_accept(Event) else QEvent_ignore(Event); end; end; end; {$ENDIF} initialization {$I DragCursors.lrs} TFormCommands.RegisterCommandsForm(TfrmMain, HotkeysCategory, @rsHotkeyCategoryMain); end. doublecmd-1.1.30/src/fmain.lrj0000644000175000001440000014555115104114162015172 0ustar alexxusers{"version":1,"strings":[ {"hash":185879090,"name":"tfrmmain.caption","sourcebytes":[68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114],"value":"Double Commander"}, {"hash":234286985,"name":"tfrmmain.btnlefthome.hint","sourcebytes":[71,111,32,116,111,32,104,111,109,101,32,100,105,114,101,99,116,111,114,121],"value":"Go to home directory"}, {"hash":126,"name":"tfrmmain.btnlefthome.caption","sourcebytes":[126],"value":"~"}, {"hash":167727721,"name":"tfrmmain.btnleftup.hint","sourcebytes":[71,111,32,116,111,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,121],"value":"Go to parent directory"}, {"hash":782,"name":"tfrmmain.btnleftup.caption","sourcebytes":[46,46],"value":".."}, {"hash":229108969,"name":"tfrmmain.btnleftroot.hint","sourcebytes":[71,111,32,116,111,32,114,111,111,116,32,100,105,114,101,99,116,111,114,121],"value":"Go to root directory"}, {"hash":47,"name":"tfrmmain.btnleftroot.caption","sourcebytes":[47],"value":"/"}, {"hash":93897556,"name":"tfrmmain.btnleftdirectoryhotlist.hint","sourcebytes":[68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116],"value":"Directory Hotlist"}, {"hash":42,"name":"tfrmmain.btnleftdirectoryhotlist.caption","sourcebytes":[42],"value":"*"}, {"hash":134552684,"name":"tfrmmain.btnleftequalright.hint","sourcebytes":[83,104,111,119,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,114,105,103,104,116,32,112,97,110,101,108,32,105,110,32,116,104,101,32,108,101,102,116,32,112,97,110,101,108],"value":"Show current directory of the right panel in the left panel"}, {"hash":60,"name":"tfrmmain.btnleftequalright.caption","sourcebytes":[60],"value":"<"}, {"hash":126,"name":"tfrmmain.btnrighthome.caption","sourcebytes":[126],"value":"~"}, {"hash":782,"name":"tfrmmain.btnrightup.caption","sourcebytes":[46,46],"value":".."}, {"hash":47,"name":"tfrmmain.btnrightroot.caption","sourcebytes":[47],"value":"/"}, {"hash":93897556,"name":"tfrmmain.btnrightdirectoryhotlist.hint","sourcebytes":[68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116],"value":"Directory Hotlist"}, {"hash":42,"name":"tfrmmain.btnrightdirectoryhotlist.caption","sourcebytes":[42],"value":"*"}, {"hash":144103628,"name":"tfrmmain.btnrightequalleft.hint","sourcebytes":[83,104,111,119,32,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121,32,111,102,32,116,104,101,32,108,101,102,116,32,112,97,110,101,108,32,105,110,32,116,104,101,32,114,105,103,104,116,32,112,97,110,101,108],"value":"Show current directory of the left panel in the right panel"}, {"hash":62,"name":"tfrmmain.btnrightequalleft.caption","sourcebytes":[62],"value":">"}, {"hash":354472,"name":"tfrmmain.lblcommandpath.caption","sourcebytes":[80,97,116,104],"value":"Path"}, {"hash":146472345,"name":"tfrmmain.btnf7.caption","sourcebytes":[68,105,114,101,99,116,111,114,121],"value":"Directory"}, {"hash":78392485,"name":"tfrmmain.btnf8.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":211026396,"name":"tfrmmain.btnf9.caption","sourcebytes":[84,101,114,109,105,110,97,108],"value":"Terminal"}, {"hash":315140,"name":"tfrmmain.btnf10.caption","sourcebytes":[69,120,105,116],"value":"Exit"}, {"hash":44892867,"name":"tfrmmain.mnufiles.caption","sourcebytes":[38,70,105,108,101,115],"value":"&Files"}, {"hash":2832523,"name":"tfrmmain.mnumark.caption","sourcebytes":[38,77,97,114,107],"value":"&Mark"}, {"hash":105082387,"name":"tfrmmain.mnucmd.caption","sourcebytes":[38,67,111,109,109,97,110,100,115],"value":"&Commands"}, {"hash":80471771,"name":"tfrmmain.mnunetwork.caption","sourcebytes":[78,101,116,119,111,114,107],"value":"Network"}, {"hash":2860947,"name":"tfrmmain.mnutabs.caption","sourcebytes":[38,84,97,98,115],"value":"&Tabs"}, {"hash":64866531,"name":"tfrmmain.mnutaboptions.caption","sourcebytes":[84,97,98,32,38,79,112,116,105,111,110,115],"value":"Tab &Options"}, {"hash":225003075,"name":"tfrmmain.mnufavoritetabs.caption","sourcebytes":[70,97,118,111,114,105,116,101,115],"value":"Favorites"}, {"hash":2858855,"name":"tfrmmain.mnushow.caption","sourcebytes":[38,83,104,111,119],"value":"&Show"}, {"hash":32269806,"name":"tfrmmain.mnuconfig.caption","sourcebytes":[67,38,111,110,102,105,103,117,114,97,116,105,111,110],"value":"C&onfiguration"}, {"hash":2812976,"name":"tfrmmain.mnuhelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, {"hash":5941396,"name":"tfrmmain.mnualloperstart.caption","sourcebytes":[83,116,97,114,116],"value":"Start"}, {"hash":2108,"name":"tfrmmain.mnualloperpause.caption","sourcebytes":[124,124],"value":"||"}, {"hash":77089212,"name":"tfrmmain.mnualloperstop.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"}, {"hash":205778373,"name":"tfrmmain.acthorizontalfilepanels.caption","sourcebytes":[38,72,111,114,105,122,111,110,116,97,108,32,80,97,110,101,108,115,32,77,111,100,101],"value":"&Horizontal Panels Mode"}, {"hash":190227950,"name":"tfrmmain.actpanelssplitterperpos.caption","sourcebytes":[83,101,116,32,115,112,108,105,116,116,101,114,32,112,111,115,105,116,105,111,110],"value":"Set splitter position"}, {"hash":380871,"name":"tfrmmain.actview.caption","sourcebytes":[86,105,101,119],"value":"View"}, {"hash":310020,"name":"tfrmmain.actedit.caption","sourcebytes":[69,100,105,116],"value":"Edit"}, {"hash":106606355,"name":"tfrmmain.acthelpindex.caption","sourcebytes":[38,67,111,110,116,101,110,116,115],"value":"&Contents"}, {"hash":217674644,"name":"tfrmmain.actkeyboard.caption","sourcebytes":[38,75,101,121,98,111,97,114,100],"value":"&Keyboard"}, {"hash":220405653,"name":"tfrmmain.actvisithomepage.caption","sourcebytes":[38,86,105,115,105,116,32,68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114,32,87,101,98,115,105,116,101],"value":"&Visit Double Commander Website"}, {"hash":44537540,"name":"tfrmmain.actabout.caption","sourcebytes":[38,65,98,111,117,116],"value":"&About"}, {"hash":9324734,"name":"tfrmmain.actoptions.caption","sourcebytes":[38,79,112,116,105,111,110,115,46,46,46],"value":"&Options..."}, {"hash":159468684,"name":"tfrmmain.actmultirename.caption","sourcebytes":[77,117,108,116,105,45,38,82,101,110,97,109,101,32,84,111,111,108],"value":"Multi-&Rename Tool"}, {"hash":143338174,"name":"tfrmmain.actsearch.caption","sourcebytes":[38,83,101,97,114,99,104,46,46,46],"value":"&Search..."}, {"hash":196870062,"name":"tfrmmain.actaddnewsearch.caption","sourcebytes":[78,101,119,32,115,101,97,114,99,104,32,105,110,115,116,97,110,99,101,46,46,46],"value":"New search instance..."}, {"hash":28039203,"name":"tfrmmain.actviewsearches.caption","sourcebytes":[86,105,101,119,32,99,117,114,114,101,110,116,32,115,101,97,114,99,104,32,105,110,115,116,97,110,99,101,115],"value":"View current search instances"}, {"hash":78460649,"name":"tfrmmain.actdeletesearches.caption","sourcebytes":[70,111,114,32,97,108,108,32,115,101,97,114,99,104,101,115,44,32,99,97,110,99,101,108,44,32,99,108,111,115,101,32,97,110,100,32,102,114,101,101,32,109,101,109,111,114,121],"value":"For all searches, cancel, close and free memory"}, {"hash":223665710,"name":"tfrmmain.actsyncdirs.caption","sourcebytes":[83,121,110,38,99,104,114,111,110,105,122,101,32,100,105,114,115,46,46,46],"value":"Syn&chronize dirs..."}, {"hash":42862446,"name":"tfrmmain.actconfigtoolbars.caption","sourcebytes":[84,111,111,108,98,97,114,46,46,46],"value":"Toolbar..."}, {"hash":196668100,"name":"tfrmmain.actconfigdirhotlist.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116],"value":"Configuration of Directory Hotlist"}, {"hash":25350211,"name":"tfrmmain.actworkwithdirectoryhotlist.caption","sourcebytes":[87,111,114,107,32,119,105,116,104,32,68,105,114,101,99,116,111,114,121,32,72,111,116,108,105,115,116,32,97,110,100,32,112,97,114,97,109,101,116,101,114,115],"value":"Work with Directory Hotlist and parameters"}, {"hash":63627011,"name":"tfrmmain.actfileassoc.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,70,105,108,101,32,38,65,115,115,111,99,105,97,116,105,111,110,115],"value":"Configuration of File &Associations"}, {"hash":109519843,"name":"tfrmmain.actcomparecontents.caption","sourcebytes":[67,111,109,112,97,114,101,32,98,121,32,38,67,111,110,116,101,110,116,115],"value":"Compare by &Contents"}, {"hash":343125,"name":"tfrmmain.actshowmainmenu.caption","sourcebytes":[77,101,110,117],"value":"Menu"}, {"hash":225144965,"name":"tfrmmain.actshowbuttonmenu.caption","sourcebytes":[83,104,111,119,32,98,117,116,116,111,110,32,109,101,110,117],"value":"Show button menu"}, {"hash":74141794,"name":"tfrmmain.actoperationsviewer.caption","sourcebytes":[79,112,101,114,97,116,105,111,110,115,32,38,86,105,101,119,101,114],"value":"Operations &Viewer"}, {"hash":146640424,"name":"tfrmmain.actrefresh.caption","sourcebytes":[38,82,101,102,114,101,115,104],"value":"&Refresh"}, {"hash":217084787,"name":"tfrmmain.actshowsysfiles.caption","sourcebytes":[83,104,111,119,32,38,72,105,100,100,101,110,47,83,121,115,116,101,109,32,70,105,108,101,115],"value":"Show &Hidden/System Files"}, {"hash":100091209,"name":"tfrmmain.actdirhistory.caption","sourcebytes":[68,105,114,101,99,116,111,114,121,32,104,105,115,116,111,114,121],"value":"Directory history"}, {"hash":45361572,"name":"tfrmmain.actdirhotlist.caption","sourcebytes":[68,105,114,101,99,116,111,114,121,32,38,72,111,116,108,105,115,116],"value":"Directory &Hotlist"}, {"hash":210973262,"name":"tfrmmain.actmarkplus.caption","sourcebytes":[83,101,108,101,99,116,32,97,32,38,71,114,111,117,112,46,46,46],"value":"Select a &Group..."}, {"hash":35869182,"name":"tfrmmain.actmarkminus.caption","sourcebytes":[85,110,115,101,108,101,99,116,32,97,32,71,114,111,38,117,112,46,46,46],"value":"Unselect a Gro&up..."}, {"hash":193846284,"name":"tfrmmain.actmarkmarkall.caption","sourcebytes":[38,83,101,108,101,99,116,32,65,108,108],"value":"&Select All"}, {"hash":6544428,"name":"tfrmmain.actmarkunmarkall.caption","sourcebytes":[38,85,110,115,101,108,101,99,116,32,65,108,108],"value":"&Unselect All"}, {"hash":248745749,"name":"tfrmmain.actcalculatespace.caption","sourcebytes":[67,97,108,99,117,108,97,116,101,32,38,79,99,99,117,112,105,101,100,32,83,112,97,99,101],"value":"Calculate &Occupied Space"}, {"hash":77434955,"name":"tfrmmain.actbenchmark.caption","sourcebytes":[38,66,101,110,99,104,109,97,114,107],"value":"&Benchmark"}, {"hash":80304322,"name":"tfrmmain.actnewtab.caption","sourcebytes":[38,78,101,119,32,84,97,98],"value":"&New Tab"}, {"hash":305108,"name":"tfrmmain.actcuttoclipboard.caption","sourcebytes":[67,117,38,116],"value":"Cu&t"}, {"hash":2795129,"name":"tfrmmain.actcopytoclipboard.caption","sourcebytes":[38,67,111,112,121],"value":"&Copy"}, {"hash":45517477,"name":"tfrmmain.actpastefromclipboard.caption","sourcebytes":[38,80,97,115,116,101],"value":"&Paste"}, {"hash":89386892,"name":"tfrmmain.actrunterm.caption","sourcebytes":[82,117,110,32,38,84,101,114,109,105,110,97,108],"value":"Run &Terminal"}, {"hash":235402462,"name":"tfrmmain.actmarkinvert.caption","sourcebytes":[38,73,110,118,101,114,116,32,83,101,108,101,99,116,105,111,110],"value":"&Invert Selection"}, {"hash":262721944,"name":"tfrmmain.actmarkcurrentpath.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108,32,105,110,32,115,97,109,101,32,112,97,116,104],"value":"Select all in same path"}, {"hash":61395240,"name":"tfrmmain.actunmarkcurrentpath.caption","sourcebytes":[85,110,115,101,108,101,99,116,32,97,108,108,32,105,110,32,115,97,109,101,32,112,97,116,104],"value":"Unselect all in same path"}, {"hash":36779621,"name":"tfrmmain.actmarkcurrentname.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108,32,102,105,108,101,115,32,119,105,116,104,32,115,97,109,101,32,110,97,109,101],"value":"Select all files with same name"}, {"hash":36792933,"name":"tfrmmain.actunmarkcurrentname.caption","sourcebytes":[85,110,115,101,108,101,99,116,32,97,108,108,32,102,105,108,101,115,32,119,105,116,104,32,115,97,109,101,32,110,97,109,101],"value":"Unselect all files with same name"}, {"hash":250335950,"name":"tfrmmain.actmarkcurrentextension.caption","sourcebytes":[83,101,108,101,99,116,32,65,108,108,32,119,105,116,104,32,116,104,101,32,83,97,109,101,32,69,38,120,116,101,110,115,105,111,110],"value":"Select All with the Same E&xtension"}, {"hash":48981918,"name":"tfrmmain.actunmarkcurrentextension.caption","sourcebytes":[85,110,115,101,108,101,99,116,32,65,108,108,32,119,105,116,104,32,116,104,101,32,83,97,109,101,32,69,120,38,116,101,110,115,105,111,110],"value":"Unselect All with the Same Ex&tension"}, {"hash":232101886,"name":"tfrmmain.actmarkcurrentnameext.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108,32,102,105,108,101,115,32,119,105,116,104,32,115,97,109,101,32,110,97,109,101,32,97,110,100,32,101,120,116,101,110,115,105,111,110],"value":"Select all files with same name and extension"}, {"hash":229218302,"name":"tfrmmain.actunmarkcurrentnameext.caption","sourcebytes":[85,110,115,101,108,101,99,116,32,97,108,108,32,102,105,108,101,115,32,119,105,116,104,32,115,97,109,101,32,110,97,109,101,32,97,110,100,32,101,120,116,101,110,115,105,111,110],"value":"Unselect all files with same name and extension"}, {"hash":127528883,"name":"tfrmmain.actcomparedirectories.caption","sourcebytes":[67,111,109,112,97,114,101,32,68,105,114,101,99,116,111,114,105,101,115],"value":"Compare Directories"}, {"hash":127528883,"name":"tfrmmain.actcomparedirectories.hint","sourcebytes":[67,111,109,112,97,114,101,32,68,105,114,101,99,116,111,114,105,101,115],"value":"Compare Directories"}, {"hash":119974181,"name":"tfrmmain.acteditnew.caption","sourcebytes":[69,100,105,116,32,110,101,119,32,102,105,108,101],"value":"Edit new file"}, {"hash":304761,"name":"tfrmmain.actcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":187513902,"name":"tfrmmain.actcopynoask.caption","sourcebytes":[67,111,112,121,32,102,105,108,101,115,32,119,105,116,104,111,117,116,32,97,115,107,105,110,103,32,102,111,114,32,99,111,110,102,105,114,109,97,116,105,111,110],"value":"Copy files without asking for confirmation"}, {"hash":147302908,"name":"tfrmmain.actcopysamepanel.caption","sourcebytes":[67,111,112,121,32,116,111,32,115,97,109,101,32,112,97,110,101,108],"value":"Copy to same panel"}, {"hash":345797,"name":"tfrmmain.actrename.caption","sourcebytes":[77,111,118,101],"value":"Move"}, {"hash":261649614,"name":"tfrmmain.actrenamenoask.caption","sourcebytes":[77,111,118,101,47,82,101,110,97,109,101,32,102,105,108,101,115,32,119,105,116,104,111,117,116,32,97,115,107,105,110,103,32,102,111,114,32,99,111,110,102,105,114,109,97,116,105,111,110],"value":"Move/Rename files without asking for confirmation"}, {"hash":93079605,"name":"tfrmmain.actrenameonly.caption","sourcebytes":[82,101,110,97,109,101],"value":"Rename"}, {"hash":42112025,"name":"tfrmmain.actmakedir.caption","sourcebytes":[67,114,101,97,116,101,32,38,68,105,114,101,99,116,111,114,121],"value":"Create &Directory"}, {"hash":78392485,"name":"tfrmmain.actdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":385125,"name":"tfrmmain.actwipe.caption","sourcebytes":[87,105,112,101],"value":"Wipe"}, {"hash":173381502,"name":"tfrmmain.actpackfiles.caption","sourcebytes":[38,80,97,99,107,32,70,105,108,101,115,46,46,46],"value":"&Pack Files..."}, {"hash":90852617,"name":"tfrmmain.acttestarchive.caption","sourcebytes":[38,84,101,115,116,32,65,114,99,104,105,118,101,40,115,41],"value":"&Test Archive(s)"}, {"hash":267061525,"name":"tfrmmain.actopenarchive.caption","sourcebytes":[84,114,121,32,111,112,101,110,32,97,114,99,104,105,118,101],"value":"Try open archive"}, {"hash":142412926,"name":"tfrmmain.actextractfiles.caption","sourcebytes":[38,69,120,116,114,97,99,116,32,70,105,108,101,115,46,46,46],"value":"&Extract Files..."}, {"hash":227876452,"name":"tfrmmain.actopenvirtualfilesystemlist.caption","sourcebytes":[79,112,101,110,32,38,86,70,83,32,76,105,115,116],"value":"Open &VFS List"}, {"hash":36577715,"name":"tfrmmain.actfileproperties.caption","sourcebytes":[83,104,111,119,32,38,70,105,108,101,32,80,114,111,112,101,114,116,105,101,115],"value":"Show &File Properties"}, {"hash":151491698,"name":"tfrmmain.actopendirinnewtab.caption","sourcebytes":[79,112,101,110,32,38,70,111,108,100,101,114,32,105,110,32,97,32,78,101,119,32,84,97,98],"value":"Open &Folder in a New Tab"}, {"hash":126330690,"name":"tfrmmain.actnexttab.caption","sourcebytes":[83,119,105,116,99,104,32,116,111,32,78,101,120,38,116,32,84,97,98],"value":"Switch to Nex&t Tab"}, {"hash":71354354,"name":"tfrmmain.actprevtab.caption","sourcebytes":[83,119,105,116,99,104,32,116,111,32,38,80,114,101,118,105,111,117,115,32,84,97,98],"value":"Switch to &Previous Tab"}, {"hash":120834372,"name":"tfrmmain.actmovetableft.caption","sourcebytes":[77,111,118,101,32,99,117,114,114,101,110,116,32,116,97,98,32,116,111,32,116,104,101,32,108,101,102,116],"value":"Move current tab to the left"}, {"hash":53924996,"name":"tfrmmain.actmovetabright.caption","sourcebytes":[77,111,118,101,32,99,117,114,114,101,110,116,32,116,97,98,32,116,111,32,116,104,101,32,114,105,103,104,116],"value":"Move current tab to the right"}, {"hash":212173059,"name":"tfrmmain.actswitchignorelist.caption","sourcebytes":[69,110,97,98,108,101,47,100,105,115,97,98,108,101,32,105,103,110,111,114,101,32,108,105,115,116,32,102,105,108,101,32,116,111,32,110,111,116,32,115,104,111,119,32,102,105,108,101,32,110,97,109,101,115],"value":"Enable/disable ignore list file to not show file names"}, {"hash":241547140,"name":"tfrmmain.actcopynamestoclip.caption","sourcebytes":[67,111,112,121,32,38,70,105,108,101,110,97,109,101,40,115,41,32,116,111,32,67,108,105,112,98,111,97,114,100],"value":"Copy &Filename(s) to Clipboard"}, {"hash":252413336,"name":"tfrmmain.actcopyfullnamestoclip.caption","sourcebytes":[67,111,112,121,32,70,105,108,101,110,97,109,101,40,115,41,32,119,105,116,104,32,70,117,108,108,32,38,80,97,116,104],"value":"Copy Filename(s) with Full &Path"}, {"hash":259895502,"name":"tfrmmain.actsaveselection.caption","sourcebytes":[83,97,38,118,101,32,83,101,108,101,99,116,105,111,110],"value":"Sa&ve Selection"}, {"hash":109395278,"name":"tfrmmain.actrestoreselection.caption","sourcebytes":[38,82,101,115,116,111,114,101,32,83,101,108,101,99,116,105,111,110],"value":"&Restore Selection"}, {"hash":237579518,"name":"tfrmmain.actsaveselectiontofile.caption","sourcebytes":[83,97,118,101,32,83,38,101,108,101,99,116,105,111,110,32,116,111,32,70,105,108,101,46,46,46],"value":"Save S&election to File..."}, {"hash":116708158,"name":"tfrmmain.actloadselectionfromfile.caption","sourcebytes":[38,76,111,97,100,32,83,101,108,101,99,116,105,111,110,32,102,114,111,109,32,70,105,108,101,46,46,46],"value":"&Load Selection from File..."}, {"hash":65805316,"name":"tfrmmain.actloadselectionfromclip.caption","sourcebytes":[76,111,97,100,32,83,101,108,101,99,116,105,111,110,32,102,114,111,109,32,67,108,105,112,38,98,111,97,114,100],"value":"Load Selection from Clip&board"}, {"hash":224130478,"name":"tfrmmain.actnetworkconnect.caption","sourcebytes":[78,101,116,119,111,114,107,32,38,67,111,110,110,101,99,116,46,46,46],"value":"Network &Connect..."}, {"hash":76511870,"name":"tfrmmain.actnetworkquickconnect.caption","sourcebytes":[78,101,116,119,111,114,107,32,38,81,117,105,99,107,32,67,111,110,110,101,99,116,46,46,46],"value":"Network &Quick Connect..."}, {"hash":29760996,"name":"tfrmmain.actnetworkdisconnect.caption","sourcebytes":[78,101,116,119,111,114,107,32,38,68,105,115,99,111,110,110,101,99,116],"value":"Network &Disconnect"}, {"hash":213414664,"name":"tfrmmain.actcopynetnamestoclip.caption","sourcebytes":[67,111,112,121,32,110,97,109,101,115,32,119,105,116,104,32,85,78,67,32,112,97,116,104],"value":"Copy names with UNC path"}, {"hash":219077657,"name":"tfrmmain.actcopypathoffilestoclip.caption","sourcebytes":[67,111,112,121,32,70,117,108,108,32,80,97,116,104,32,111,102,32,115,101,108,101,99,116,101,100,32,102,105,108,101,40,115,41],"value":"Copy Full Path of selected file(s)"}, {"hash":3203618,"name":"tfrmmain.actcopypathnosepoffilestoclip.caption","sourcebytes":[67,111,112,121,32,70,117,108,108,32,80,97,116,104,32,111,102,32,115,101,108,101,99,116,101,100,32,102,105,108,101,40,115,41,32,119,105,116,104,32,110,111,32,101,110,100,105,110,103,32,100,105,114,32,115,101,112,97,114,97,116,111,114],"value":"Copy Full Path of selected file(s) with no ending dir separator"}, {"hash":25510579,"name":"tfrmmain.actcopyfiledetailstoclip.caption","sourcebytes":[67,111,112,121,32,97,108,108,32,115,104,111,119,110,32,38,99,111,108,117,109,110,115],"value":"Copy all shown &columns"}, {"hash":136107570,"name":"tfrmmain.actrenametab.caption","sourcebytes":[38,82,101,110,97,109,101,32,84,97,98],"value":"&Rename Tab"}, {"hash":19168668,"name":"tfrmmain.actleftbriefview.caption","sourcebytes":[66,114,105,101,102,32,118,105,101,119,32,111,110,32,108,101,102,116,32,112,97,110,101,108],"value":"Brief view on left panel"}, {"hash":58779596,"name":"tfrmmain.actleftcolumnsview.caption","sourcebytes":[67,111,108,117,109,110,115,32,118,105,101,119,32,111,110,32,108,101,102,116,32,112,97,110,101,108],"value":"Columns view on left panel"}, {"hash":178493820,"name":"tfrmmain.actleftthumbview.caption","sourcebytes":[84,104,117,109,98,110,97,105,108,115,32,118,105,101,119,32,111,110,32,108,101,102,116,32,112,97,110,101,108],"value":"Thumbnails view on left panel"}, {"hash":118738556,"name":"tfrmmain.actleftflatview.caption","sourcebytes":[38,70,108,97,116,32,118,105,101,119,32,111,110,32,108,101,102,116,32,112,97,110,101,108],"value":"&Flat view on left panel"}, {"hash":175854005,"name":"tfrmmain.actleftsortbyname.caption","sourcebytes":[83,111,114,116,32,108,101,102,116,32,112,97,110,101,108,32,98,121,32,38,78,97,109,101],"value":"Sort left panel by &Name"}, {"hash":35795934,"name":"tfrmmain.actleftsortbyext.caption","sourcebytes":[83,111,114,116,32,108,101,102,116,32,112,97,110,101,108,32,98,121,32,38,69,120,116,101,110,115,105,111,110],"value":"Sort left panel by &Extension"}, {"hash":175872133,"name":"tfrmmain.actleftsortbysize.caption","sourcebytes":[83,111,114,116,32,108,101,102,116,32,112,97,110,101,108,32,98,121,32,38,83,105,122,101],"value":"Sort left panel by &Size"}, {"hash":175816485,"name":"tfrmmain.actleftsortbydate.caption","sourcebytes":[83,111,114,116,32,108,101,102,116,32,112,97,110,101,108,32,98,121,32,38,68,97,116,101],"value":"Sort left panel by &Date"}, {"hash":42161907,"name":"tfrmmain.actleftsortbyattr.caption","sourcebytes":[83,111,114,116,32,108,101,102,116,32,112,97,110,101,108,32,98,121,32,38,65,116,116,114,105,98,117,116,101,115],"value":"Sort left panel by &Attributes"}, {"hash":104307628,"name":"tfrmmain.actleftreverseorder.caption","sourcebytes":[82,101,38,118,101,114,115,101,32,111,114,100,101,114,32,111,110,32,108,101,102,116,32,112,97,110,101,108],"value":"Re&verse order on left panel"}, {"hash":131203188,"name":"tfrmmain.actleftopendrives.caption","sourcebytes":[79,112,101,110,32,108,101,102,116,32,100,114,105,118,101,32,108,105,115,116],"value":"Open left drive list"}, {"hash":58570300,"name":"tfrmmain.actrightbriefview.caption","sourcebytes":[66,114,105,101,102,32,118,105,101,119,32,111,110,32,114,105,103,104,116,32,112,97,110,101,108],"value":"Brief view on right panel"}, {"hash":154538780,"name":"tfrmmain.actrightcolumnsview.caption","sourcebytes":[67,111,108,117,109,110,115,32,118,105,101,119,32,111,110,32,114,105,103,104,116,32,112,97,110,101,108],"value":"Columns view on right panel"}, {"hash":186906764,"name":"tfrmmain.actrightthumbview.caption","sourcebytes":[84,104,117,109,98,110,97,105,108,115,32,118,105,101,119,32,111,110,32,114,105,103,104,116,32,112,97,110,101,108],"value":"Thumbnails view on right panel"}, {"hash":2140252,"name":"tfrmmain.actrightflatview.caption","sourcebytes":[38,70,108,97,116,32,118,105,101,119,32,111,110,32,114,105,103,104,116,32,112,97,110,101,108],"value":"&Flat view on right panel"}, {"hash":148414997,"name":"tfrmmain.actrightsortbyname.caption","sourcebytes":[83,111,114,116,32,114,105,103,104,116,32,112,97,110,101,108,32,98,121,32,38,78,97,109,101],"value":"Sort right panel by &Name"}, {"hash":138997454,"name":"tfrmmain.actrightsortbyext.caption","sourcebytes":[83,111,114,116,32,114,105,103,104,116,32,112,97,110,101,108,32,98,121,32,38,69,120,116,101,110,115,105,111,110],"value":"Sort right panel by &Extension"}, {"hash":148277029,"name":"tfrmmain.actrightsortbysize.caption","sourcebytes":[83,111,114,116,32,114,105,103,104,116,32,112,97,110,101,108,32,98,121,32,38,83,105,122,101],"value":"Sort right panel by &Size"}, {"hash":148328069,"name":"tfrmmain.actrightsortbydate.caption","sourcebytes":[83,111,114,116,32,114,105,103,104,116,32,112,97,110,101,108,32,98,121,32,38,68,97,116,101],"value":"Sort right panel by &Date"}, {"hash":3057491,"name":"tfrmmain.actrightsortbyattr.caption","sourcebytes":[83,111,114,116,32,114,105,103,104,116,32,112,97,110,101,108,32,98,121,32,38,65,116,116,114,105,98,117,116,101,115],"value":"Sort right panel by &Attributes"}, {"hash":40097100,"name":"tfrmmain.actrightreverseorder.caption","sourcebytes":[82,101,38,118,101,114,115,101,32,111,114,100,101,114,32,111,110,32,114,105,103,104,116,32,112,97,110,101,108],"value":"Re&verse order on right panel"}, {"hash":253252116,"name":"tfrmmain.actrightopendrives.caption","sourcebytes":[79,112,101,110,32,114,105,103,104,116,32,100,114,105,118,101,32,108,105,115,116],"value":"Open right drive list"}, {"hash":104366453,"name":"tfrmmain.actfocuscmdline.caption","sourcebytes":[70,111,99,117,115,32,99,111,109,109,97,110,100,32,108,105,110,101],"value":"Focus command line"}, {"hash":66134857,"name":"tfrmmain.actshowcmdlinehistory.caption","sourcebytes":[83,104,111,119,32,99,111,109,109,97,110,100,32,108,105,110,101,32,104,105,115,116,111,114,121],"value":"Show command line history"}, {"hash":175182782,"name":"tfrmmain.actsyncchangedir.caption","sourcebytes":[83,121,110,99,104,114,111,110,111,117,115,32,110,97,118,105,103,97,116,105,111,110],"value":"Synchronous navigation"}, {"hash":193097747,"name":"tfrmmain.actsyncchangedir.hint","sourcebytes":[83,121,110,99,104,114,111,110,111,117,115,32,100,105,114,101,99,116,111,114,121,32,99,104,97,110,103,105,110,103,32,105,110,32,98,111,116,104,32,112,97,110,101,108,115],"value":"Synchronous directory changing in both panels"}, {"hash":109035716,"name":"tfrmmain.actchangedirtoparent.caption","sourcebytes":[67,104,97,110,103,101,32,68,105,114,101,99,116,111,114,121,32,84,111,32,80,97,114,101,110,116],"value":"Change Directory To Parent"}, {"hash":74842917,"name":"tfrmmain.actchangedirtohome.caption","sourcebytes":[67,104,97,110,103,101,32,100,105,114,101,99,116,111,114,121,32,116,111,32,104,111,109,101],"value":"Change directory to home"}, {"hash":74752884,"name":"tfrmmain.actchangedirtoroot.caption","sourcebytes":[67,104,97,110,103,101,32,100,105,114,101,99,116,111,114,121,32,116,111,32,114,111,111,116],"value":"Change directory to root"}, {"hash":140855781,"name":"tfrmmain.acttargetequalsource.caption","sourcebytes":[84,97,114,103,101,116,32,38,61,32,83,111,117,114,99,101],"value":"Target &= Source"}, {"hash":85185511,"name":"tfrmmain.acttransferleft.caption","sourcebytes":[84,114,97,110,115,102,101,114,32,100,105,114,32,117,110,100,101,114,32,99,117,114,115,111,114,32,116,111,32,108,101,102,116,32,119,105,110,100,111,119],"value":"Transfer dir under cursor to left window"}, {"hash":228838439,"name":"tfrmmain.acttransferright.caption","sourcebytes":[84,114,97,110,115,102,101,114,32,100,105,114,32,117,110,100,101,114,32,99,117,114,115,111,114,32,116,111,32,114,105,103,104,116,32,119,105,110,100,111,119],"value":"Transfer dir under cursor to right window"}, {"hash":233152308,"name":"tfrmmain.actleftequalright.caption","sourcebytes":[76,101,102,116,32,38,61,32,82,105,103,104,116],"value":"Left &= Right"}, {"hash":17489316,"name":"tfrmmain.actrightequalleft.caption","sourcebytes":[82,105,103,104,116,32,38,61,32,76,101,102,116],"value":"Right &= Left"}, {"hash":193156919,"name":"tfrmmain.actbriefview.caption","sourcebytes":[66,114,105,101,102,32,118,105,101,119],"value":"Brief view"}, {"hash":193025847,"name":"tfrmmain.actbriefview.hint","sourcebytes":[66,114,105,101,102,32,86,105,101,119],"value":"Brief View"}, {"hash":318508,"name":"tfrmmain.actcolumnsview.caption","sourcebytes":[70,117,108,108],"value":"Full"}, {"hash":32764807,"name":"tfrmmain.actcolumnsview.hint","sourcebytes":[67,111,108,117,109,110,115,32,86,105,101,119],"value":"Columns View"}, {"hash":59888115,"name":"tfrmmain.actthumbnailsview.caption","sourcebytes":[84,104,117,109,98,110,97,105,108,115],"value":"Thumbnails"}, {"hash":258790103,"name":"tfrmmain.actthumbnailsview.hint","sourcebytes":[84,104,117,109,98,110,97,105,108,115,32,86,105,101,119],"value":"Thumbnails View"}, {"hash":140862183,"name":"tfrmmain.actflatview.caption","sourcebytes":[38,70,108,97,116,32,118,105,101,119],"value":"&Flat view"}, {"hash":5637460,"name":"tfrmmain.actflatviewsel.caption","sourcebytes":[38,70,108,97,116,32,118,105,101,119,44,32,111,110,108,121,32,115,101,108,101,99,116,101,100],"value":"&Flat view, only selected"}, {"hash":11026572,"name":"tfrmmain.actquickview.caption","sourcebytes":[38,81,117,105,99,107,32,86,105,101,119,32,80,97,110,101,108],"value":"&Quick View Panel"}, {"hash":21242613,"name":"tfrmmain.actsortbyname.caption","sourcebytes":[83,111,114,116,32,98,121,32,38,78,97,109,101],"value":"Sort by &Name"}, {"hash":112305870,"name":"tfrmmain.actsortbyext.caption","sourcebytes":[83,111,114,116,32,98,121,32,38,69,120,116,101,110,115,105,111,110],"value":"Sort by &Extension"}, {"hash":21170117,"name":"tfrmmain.actsortbysize.caption","sourcebytes":[83,111,114,116,32,98,121,32,38,83,105,122,101],"value":"Sort by &Size"}, {"hash":21220965,"name":"tfrmmain.actsortbydate.caption","sourcebytes":[83,111,114,116,32,98,121,32,38,68,97,116,101],"value":"Sort by &Date"}, {"hash":163194803,"name":"tfrmmain.actsortbyattr.caption","sourcebytes":[83,111,114,116,32,98,121,32,38,65,116,116,114,105,98,117,116,101,115],"value":"Sort by &Attributes"}, {"hash":11159250,"name":"tfrmmain.actreverseorder.caption","sourcebytes":[82,101,38,118,101,114,115,101,32,79,114,100,101,114],"value":"Re&verse Order"}, {"hash":7462852,"name":"tfrmmain.actsrcopendrives.caption","sourcebytes":[79,112,101,110,32,100,114,105,118,101,32,108,105,115,116],"value":"Open drive list"}, {"hash":248236563,"name":"tfrmmain.actexchange.caption","sourcebytes":[83,119,97,112,32,38,80,97,110,101,108,115],"value":"Swap &Panels"}, {"hash":34632008,"name":"tfrmmain.actquicksearch.caption","sourcebytes":[81,117,105,99,107,32,115,101,97,114,99,104],"value":"Quick search"}, {"hash":157964709,"name":"tfrmmain.actviewlogfile.caption","sourcebytes":[86,105,101,119,32,108,111,103,32,102,105,108,101],"value":"View log file"}, {"hash":120491445,"name":"tfrmmain.actclearlogfile.caption","sourcebytes":[67,108,101,97,114,32,108,111,103,32,102,105,108,101],"value":"Clear log file"}, {"hash":262004295,"name":"tfrmmain.actclearlogwindow.caption","sourcebytes":[67,108,101,97,114,32,108,111,103,32,119,105,110,100,111,119],"value":"Clear log window"}, {"hash":54903570,"name":"tfrmmain.actquickfilter.caption","sourcebytes":[81,117,105,99,107,32,102,105,108,116,101,114],"value":"Quick filter"}, {"hash":227422212,"name":"tfrmmain.acteditpath.caption","sourcebytes":[69,100,105,116,32,112,97,116,104,32,102,105,101,108,100,32,97,98,111,118,101,32,102,105,108,101,32,108,105,115,116],"value":"Edit path field above file list"}, {"hash":208233241,"name":"tfrmmain.actchangedir.caption","sourcebytes":[67,104,97,110,103,101,32,100,105,114,101,99,116,111,114,121],"value":"Change directory"}, {"hash":12067941,"name":"tfrmmain.actcmdlinenext.caption","sourcebytes":[78,101,120,116,32,67,111,109,109,97,110,100,32,76,105,110,101],"value":"Next Command Line"}, {"hash":88408521,"name":"tfrmmain.actcmdlinenext.hint","sourcebytes":[83,101,116,32,99,111,109,109,97,110,100,32,108,105,110,101,32,116,111,32,110,101,120,116,32,99,111,109,109,97,110,100,32,105,110,32,104,105,115,116,111,114,121],"value":"Set command line to next command in history"}, {"hash":204683509,"name":"tfrmmain.actcmdlineprev.caption","sourcebytes":[80,114,101,118,105,111,117,115,32,67,111,109,109,97,110,100,32,76,105,110,101],"value":"Previous Command Line"}, {"hash":202537465,"name":"tfrmmain.actcmdlineprev.hint","sourcebytes":[83,101,116,32,99,111,109,109,97,110,100,32,108,105,110,101,32,116,111,32,112,114,101,118,105,111,117,115,32,99,111,109,109,97,110,100,32,105,110,32,104,105,115,116,111,114,121],"value":"Set command line to previous command in history"}, {"hash":860949,"name":"tfrmmain.actaddpathtocmdline.caption","sourcebytes":[67,111,112,121,32,112,97,116,104,32,116,111,32,99,111,109,109,97,110,100,32,108,105,110,101],"value":"Copy path to command line"}, {"hash":236945685,"name":"tfrmmain.actaddfilenametocmdline.caption","sourcebytes":[65,100,100,32,102,105,108,101,32,110,97,109,101,32,116,111,32,99,111,109,109,97,110,100,32,108,105,110,101],"value":"Add file name to command line"}, {"hash":164955621,"name":"tfrmmain.actaddpathandfilenametocmdline.caption","sourcebytes":[65,100,100,32,112,97,116,104,32,97,110,100,32,102,105,108,101,32,110,97,109,101,32,116,111,32,99,111,109,109,97,110,100,32,108,105,110,101],"value":"Add path and file name to command line"}, {"hash":87722821,"name":"tfrmmain.actgotofirstentry.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,102,105,114,115,116,32,102,111,108,100,101,114,32,111,114,32,102,105,108,101],"value":"Place cursor on first folder or file"}, {"hash":26911845,"name":"tfrmmain.actgotolastentry.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,108,97,115,116,32,102,111,108,100,101,114,32,111,114,32,102,105,108,101],"value":"Place cursor on last folder or file"}, {"hash":132097125,"name":"tfrmmain.actgotonextentry.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,110,101,120,116,32,102,111,108,100,101,114,32,111,114,32,102,105,108,101],"value":"Place cursor on next folder or file"}, {"hash":241610469,"name":"tfrmmain.actgotopreventry.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,112,114,101,118,105,111,117,115,32,102,111,108,100,101,114,32,111,114,32,102,105,108,101],"value":"Place cursor on previous folder or file"}, {"hash":254828868,"name":"tfrmmain.actgotofirstfile.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,102,105,114,115,116,32,102,105,108,101,32,105,110,32,108,105,115,116],"value":"Place cursor on first file in list"}, {"hash":139264356,"name":"tfrmmain.actgotolastfile.caption","sourcebytes":[80,108,97,99,101,32,99,117,114,115,111,114,32,111,110,32,108,97,115,116,32,102,105,108,101,32,105,110,32,108,105,115,116],"value":"Place cursor on last file in list"}, {"hash":232256295,"name":"tfrmmain.actviewhistory.caption","sourcebytes":[83,104,111,119,32,104,105,115,116,111,114,121,32,111,102,32,118,105,115,105,116,101,100,32,112,97,116,104,115,32,102,111,114,32,97,99,116,105,118,101,32,118,105,101,119],"value":"Show history of visited paths for active view"}, {"hash":7072137,"name":"tfrmmain.actviewhistorynext.caption","sourcebytes":[71,111,32,116,111,32,110,101,120,116,32,101,110,116,114,121,32,105,110,32,104,105,115,116,111,114,121],"value":"Go to next entry in history"}, {"hash":57781273,"name":"tfrmmain.actviewhistoryprev.caption","sourcebytes":[71,111,32,116,111,32,112,114,101,118,105,111,117,115,32,101,110,116,114,121,32,105,110,32,104,105,115,116,111,114,121],"value":"Go to previous entry in history"}, {"hash":70269112,"name":"tfrmmain.actopendrivebyindex.caption","sourcebytes":[79,112,101,110,32,68,114,105,118,101,32,98,121,32,73,110,100,101,120],"value":"Open Drive by Index"}, {"hash":237685493,"name":"tfrmmain.actopenbar.caption","sourcebytes":[79,112,101,110,32,98,97,114,32,102,105,108,101],"value":"Open bar file"}, {"hash":47984407,"name":"tfrmmain.actminimize.caption","sourcebytes":[77,105,110,105,109,105,122,101,32,119,105,110,100,111,119],"value":"Minimize window"}, {"hash":4710148,"name":"tfrmmain.actexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, {"hash":142873059,"name":"tfrmmain.actdebugshowcommandparameters.caption","sourcebytes":[83,104,111,119,32,67,111,109,109,97,110,100,32,80,97,114,97,109,101,116,101,114,115],"value":"Show Command Parameters"}, {"hash":35037726,"name":"tfrmmain.actdoanycmcommand.caption","sourcebytes":[69,120,101,99,117,116,101,32,38,105,110,116,101,114,110,97,108,32,99,111,109,109,97,110,100,46,46,46],"value":"Execute &internal command..."}, {"hash":170156852,"name":"tfrmmain.actdoanycmcommand.hint","sourcebytes":[83,101,108,101,99,116,32,97,110,121,32,99,111,109,109,97,110,100,32,97,110,100,32,101,120,101,99,117,116,101,32,105,116],"value":"Select any command and execute it"}, {"hash":207287774,"name":"tfrmmain.actsetfileproperties.caption","sourcebytes":[67,104,97,110,103,101,32,38,65,116,116,114,105,98,117,116,101,115,46,46,46],"value":"Change &Attributes..."}, {"hash":101439822,"name":"tfrmmain.acteditcomment.caption","sourcebytes":[69,100,105,116,32,67,111,38,109,109,101,110,116,46,46,46],"value":"Edit Co&mment..."}, {"hash":163354629,"name":"tfrmmain.actcontextmenu.caption","sourcebytes":[83,104,111,119,32,99,111,110,116,101,120,116,32,109,101,110,117],"value":"Show context menu"}, {"hash":353982,"name":"tfrmmain.actopen.caption","sourcebytes":[79,112,101,110],"value":"Open"}, {"hash":353982,"name":"tfrmmain.actshellexecute.caption","sourcebytes":[79,112,101,110],"value":"Open"}, {"hash":233849651,"name":"tfrmmain.actshellexecute.hint","sourcebytes":[79,112,101,110,32,117,115,105,110,103,32,115,121,115,116,101,109,32,97,115,115,111,99,105,97,116,105,111,110,115],"value":"Open using system associations"}, {"hash":87681710,"name":"tfrmmain.actsymlink.caption","sourcebytes":[67,114,101,97,116,101,32,83,121,109,98,111,108,105,99,32,38,76,105,110,107,46,46,46],"value":"Create Symbolic &Link..."}, {"hash":11863774,"name":"tfrmmain.acthardlink.caption","sourcebytes":[67,114,101,97,116,101,32,38,72,97,114,100,32,76,105,110,107,46,46,46],"value":"Create &Hard Link..."}, {"hash":170886382,"name":"tfrmmain.actfilespliter.caption","sourcebytes":[83,112,108,38,105,116,32,70,105,108,101,46,46,46],"value":"Spl&it File..."}, {"hash":149064718,"name":"tfrmmain.actfilelinker.caption","sourcebytes":[67,111,109,38,98,105,110,101,32,70,105,108,101,115,46,46,46],"value":"Com&bine Files..."}, {"hash":66284686,"name":"tfrmmain.actchecksumcalc.caption","sourcebytes":[67,97,108,99,117,108,97,116,101,32,67,104,101,99,107,38,115,117,109,46,46,46],"value":"Calculate Check&sum..."}, {"hash":36611454,"name":"tfrmmain.actchecksumverify.caption","sourcebytes":[38,86,101,114,105,102,121,32,67,104,101,99,107,115,117,109,46,46,46],"value":"&Verify Checksum..."}, {"hash":65392019,"name":"tfrmmain.actuniversalsingledirectsort.caption","sourcebytes":[83,111,114,116,32,97,99,99,111,114,100,105,110,103,32,116,111,32,112,97,114,97,109,101,116,101,114,115],"value":"Sort according to parameters"}, {"hash":15440613,"name":"tfrmmain.actcountdircontent.caption","sourcebytes":[83,104,111,38,119,32,79,99,99,117,112,105,101,100,32,83,112,97,99,101],"value":"Sho&w Occupied Space"}, {"hash":135333461,"name":"tfrmmain.acttogglefullscreenconsole.caption","sourcebytes":[84,111,103,103,108,101,32,102,117,108,108,115,99,114,101,101,110,32,109,111,100,101,32,99,111,110,115,111,108,101],"value":"Toggle fullscreen mode console"}, {"hash":35721468,"name":"tfrmmain.acttreeview.caption","sourcebytes":[38,84,114,101,101,32,86,105,101,119,32,80,97,110,101,108],"value":"&Tree View Panel"}, {"hash":149035031,"name":"tfrmmain.actfocustreeview.caption","sourcebytes":[70,111,99,117,115,32,111,110,32,116,114,101,101,32,118,105,101,119],"value":"Focus on tree view"}, {"hash":145180425,"name":"tfrmmain.actfocustreeview.hint","sourcebytes":[83,119,105,116,99,104,32,98,101,116,119,101,101,110,32,99,117,114,114,101,110,116,32,102,105,108,101,32,108,105,115,116,32,97,110,100,32,116,114,101,101,32,118,105,101,119,32,40,105,102,32,101,110,97,98,108,101,100,41],"value":"Switch between current file list and tree view (if enabled)"}, {"hash":34270371,"name":"tfrmmain.actconfigfoldertabs.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,102,111,108,100,101,114,32,116,97,98,115],"value":"Configuration of folder tabs"}, {"hash":110317811,"name":"tfrmmain.actconfigfavoritetabs.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,70,97,118,111,114,105,116,101,32,84,97,98,115],"value":"Configuration of Favorite Tabs"}, {"hash":110489666,"name":"tfrmmain.actclosetab.caption","sourcebytes":[38,67,108,111,115,101,32,84,97,98],"value":"&Close Tab"}, {"hash":74631107,"name":"tfrmmain.actclosealltabs.caption","sourcebytes":[67,108,111,115,101,32,38,65,108,108,32,84,97,98,115],"value":"Close &All Tabs"}, {"hash":91106819,"name":"tfrmmain.actcloseduplicatetabs.caption","sourcebytes":[67,108,111,115,101,32,68,117,112,108,105,99,97,116,101,32,84,97,98,115],"value":"Close Duplicate Tabs"}, {"hash":31278373,"name":"tfrmmain.actcopyalltabstoopposite.caption","sourcebytes":[67,111,112,121,32,97,108,108,32,116,97,98,115,32,116,111,32,111,112,112,111,115,105,116,101,32,115,105,100,101],"value":"Copy all tabs to opposite side"}, {"hash":20366981,"name":"tfrmmain.actloadtabs.caption","sourcebytes":[38,76,111,97,100,32,84,97,98,115,32,102,114,111,109,32,70,105,108,101],"value":"&Load Tabs from File"}, {"hash":235591461,"name":"tfrmmain.actsavetabs.caption","sourcebytes":[38,83,97,118,101,32,84,97,98,115,32,116,111,32,70,105,108,101],"value":"&Save Tabs to File"}, {"hash":190223196,"name":"tfrmmain.actsettaboptionnormal.caption","sourcebytes":[38,78,111,114,109,97,108],"value":"&Normal"}, {"hash":188064148,"name":"tfrmmain.actsettaboptionpathlocked.caption","sourcebytes":[38,76,111,99,107,101,100],"value":"&Locked"}, {"hash":40389188,"name":"tfrmmain.actsettaboptionpathresets.caption","sourcebytes":[76,111,99,107,101,100,32,119,105,116,104,32,38,68,105,114,101,99,116,111,114,121,32,67,104,97,110,103,101,115,32,65,108,108,111,119,101,100],"value":"Locked with &Directory Changes Allowed"}, {"hash":12351107,"name":"tfrmmain.actsettaboptiondirsinnewtab.caption","sourcebytes":[76,111,99,107,101,100,32,119,105,116,104,32,68,105,114,101,99,116,111,114,105,101,115,32,79,112,101,110,101,100,32,105,110,32,78,101,119,32,38,84,97,98,115],"value":"Locked with Directories Opened in New &Tabs"}, {"hash":107254188,"name":"tfrmmain.actsetalltabsoptionnormal.caption","sourcebytes":[83,101,116,32,97,108,108,32,116,97,98,115,32,116,111,32,78,111,114,109,97,108],"value":"Set all tabs to Normal"}, {"hash":105358180,"name":"tfrmmain.actsetalltabsoptionpathlocked.caption","sourcebytes":[83,101,116,32,97,108,108,32,116,97,98,115,32,116,111,32,76,111,99,107,101,100],"value":"Set all tabs to Locked"}, {"hash":207701892,"name":"tfrmmain.actsetalltabsoptionpathresets.caption","sourcebytes":[65,108,108,32,116,97,98,115,32,76,111,99,107,101,100,32,119,105,116,104,32,68,105,114,32,67,104,97,110,103,101,115,32,65,108,108,111,119,101,100],"value":"All tabs Locked with Dir Changes Allowed"}, {"hash":99885971,"name":"tfrmmain.actsetalltabsoptiondirsinnewtab.caption","sourcebytes":[65,108,108,32,116,97,98,115,32,76,111,99,107,101,100,32,119,105,116,104,32,68,105,114,32,79,112,101,110,101,100,32,105,110,32,78,101,119,32,84,97,98,115],"value":"All tabs Locked with Dir Opened in New Tabs"}, {"hash":105962483,"name":"tfrmmain.actloadfavoritetabs.caption","sourcebytes":[76,111,97,100,32,116,97,98,115,32,102,114,111,109,32,70,97,118,111,114,105,116,101,32,84,97,98,115],"value":"Load tabs from Favorite Tabs"}, {"hash":29531011,"name":"tfrmmain.actsavefavoritetabs.caption","sourcebytes":[83,97,118,101,32,99,117,114,114,101,110,116,32,116,97,98,115,32,116,111,32,97,32,78,101,119,32,70,97,118,111,114,105,116,101,32,84,97,98,115],"value":"Save current tabs to a New Favorite Tabs"}, {"hash":163923364,"name":"tfrmmain.actreloadfavoritetabs.caption","sourcebytes":[82,101,108,111,97,100,32,116,104,101,32,108,97,115,116,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,108,111,97,100,101,100],"value":"Reload the last Favorite Tabs loaded"}, {"hash":63258452,"name":"tfrmmain.actresavefavoritetabs.caption","sourcebytes":[82,101,115,97,118,101,32,111,110,32,116,104,101,32,108,97,115,116,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,108,111,97,100,101,100],"value":"Resave on the last Favorite Tabs loaded"}, {"hash":201540580,"name":"tfrmmain.actpreviousfavoritetabs.caption","sourcebytes":[76,111,97,100,32,116,104,101,32,80,114,101,118,105,111,117,115,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,105,110,32,116,104,101,32,108,105,115,116],"value":"Load the Previous Favorite Tabs in the list"}, {"hash":164033780,"name":"tfrmmain.actnextfavoritetabs.caption","sourcebytes":[76,111,97,100,32,116,104,101,32,78,101,120,116,32,70,97,118,111,114,105,116,101,32,84,97,98,115,32,105,110,32,116,104,101,32,108,105,115,116],"value":"Load the Next Favorite Tabs in the list"}, {"hash":98943880,"name":"tfrmmain.actactivatetabbyindex.caption","sourcebytes":[65,99,116,105,118,97,116,101,32,84,97,98,32,66,121,32,73,110,100,101,120],"value":"Activate Tab By Index"}, {"hash":45842709,"name":"tfrmmain.actconfigtreeviewmenus.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117],"value":"Configuration of Tree View Menu"}, {"hash":255739843,"name":"tfrmmain.actconfigtreeviewmenuscolors.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,84,114,101,101,32,86,105,101,119,32,77,101,110,117,32,67,111,108,111,114,115],"value":"Configuration of Tree View Menu Colors"}, {"hash":219249491,"name":"tfrmmain.actconfigsearches.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,115,101,97,114,99,104,101,115],"value":"Configuration of searches"}, {"hash":16841203,"name":"tfrmmain.actconfighotkeys.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,104,111,116,32,107,101,121,115],"value":"Configuration of hot keys"}, {"hash":254597918,"name":"tfrmmain.actconfigsavepos.caption","sourcebytes":[83,97,118,101,32,80,111,115,105,116,105,111,110],"value":"Save Position"}, {"hash":87462179,"name":"tfrmmain.actconfigsavesettings.caption","sourcebytes":[83,97,118,101,32,83,101,116,116,105,110,103,115],"value":"Save Settings"}, {"hash":186670788,"name":"tfrmmain.actexecutescript.caption","sourcebytes":[69,120,101,99,117,116,101,32,83,99,114,105,112,116],"value":"Execute Script"}, {"hash":40564547,"name":"tfrmmain.actfocusswap.caption","sourcebytes":[83,119,97,112,32,102,111,99,117,115],"value":"Swap focus"}, {"hash":49986228,"name":"tfrmmain.actfocusswap.hint","sourcebytes":[83,119,105,116,99,104,32,98,101,116,119,101,101,110,32,108,101,102,116,32,97,110,100,32,114,105,103,104,116,32,102,105,108,101,32,108,105,115,116],"value":"Switch between left and right file list"}, {"hash":9348211,"name":"tfrmmain.actconfigarchivers.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,65,114,99,104,105,118,101,114,115],"value":"Configuration of Archivers"}, {"hash":81417667,"name":"tfrmmain.actconfigtooltips.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,116,111,111,108,116,105,112,115],"value":"Configuration of tooltips"}, {"hash":122831395,"name":"tfrmmain.actconfigplugins.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,80,108,117,103,105,110,115],"value":"Configuration of Plugins"}, {"hash":91735966,"name":"tfrmmain.actaddplugin.caption","sourcebytes":[65,100,100,32,80,108,117,103,105,110],"value":"Add Plugin"}, {"hash":124093428,"name":"tfrmmain.actloadlist.caption","sourcebytes":[76,111,97,100,32,76,105,115,116],"value":"Load List"}, {"hash":228327845,"name":"tfrmmain.actloadlist.hint","sourcebytes":[76,111,97,100,32,108,105,115,116,32,111,102,32,102,105,108,101,115,47,102,111,108,100,101,114,115,32,102,114,111,109,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,116,101,120,116,32,102,105,108,101],"value":"Load list of files/folders from the specified text file"}, {"hash":230704005,"name":"tfrmmain.actsavefiledetailstofile.caption","sourcebytes":[83,97,118,101,32,97,108,108,32,115,104,111,119,110,32,99,111,108,117,109,110,115,32,116,111,32,102,105,108,101],"value":"Save all shown columns to file"}, {"hash":104763204,"name":"tfrmmain.actshowtabslist.caption","sourcebytes":[83,104,111,119,32,84,97,98,115,32,76,105,115,116],"value":"Show Tabs List"}, {"hash":154792195,"name":"tfrmmain.actshowtabslist.hint","sourcebytes":[83,104,111,119,32,108,105,115,116,32,111,102,32,97,108,108,32,111,112,101,110,32,116,97,98,115],"value":"Show list of all open tabs"}, {"hash":310020,"name":"tfrmmain.tbedit.caption","sourcebytes":[69,100,105,116],"value":"Edit"}, {"hash":78392485,"name":"tfrmmain.tbdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":1140,"name":"tfrmmain.tbchangedir.caption","sourcebytes":[67,68],"value":"CD"}, {"hash":19140,"name":"tfrmmain.tbcut.caption","sourcebytes":[67,117,116],"value":"Cut"}, {"hash":304761,"name":"tfrmmain.tbcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":5671589,"name":"tfrmmain.tbpaste.caption","sourcebytes":[80,97,115,116,101],"value":"Paste"}, {"hash":43332272,"name":"tfrmmain.mi2080.caption","sourcebytes":[38,50,48,47,56,48],"value":"&20/80"}, {"hash":43397792,"name":"tfrmmain.mi3070.caption","sourcebytes":[38,51,48,47,55,48],"value":"&30/70"}, {"hash":43463312,"name":"tfrmmain.mi4060.caption","sourcebytes":[38,52,48,47,54,48],"value":"&40/60"}, {"hash":43528832,"name":"tfrmmain.mi5050.caption","sourcebytes":[38,53,48,47,53,48],"value":"&50/50"}, {"hash":43594352,"name":"tfrmmain.mi6040.caption","sourcebytes":[38,54,48,47,52,48],"value":"&60/40"}, {"hash":43659872,"name":"tfrmmain.mi7030.caption","sourcebytes":[38,55,48,47,51,48],"value":"&70/30"}, {"hash":43725392,"name":"tfrmmain.mi8020.caption","sourcebytes":[38,56,48,47,50,48],"value":"&80/20"}, {"hash":174571854,"name":"tfrmmain.micopy.caption","sourcebytes":[67,111,112,121,46,46,46],"value":"Copy..."}, {"hash":74219870,"name":"tfrmmain.mimove.caption","sourcebytes":[77,111,118,101,46,46,46],"value":"Move..."}, {"hash":173835486,"name":"tfrmmain.mihardlink.caption","sourcebytes":[67,114,101,97,116,101,32,108,105,110,107,46,46,46],"value":"Create link..."}, {"hash":148506318,"name":"tfrmmain.misymlink.caption","sourcebytes":[67,114,101,97,116,101,32,115,121,109,108,105,110,107,46,46,46],"value":"Create symlink..."}, {"hash":77089212,"name":"tfrmmain.micancel.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"}, {"hash":102797859,"name":"tfrmmain.mitaboptions.caption","sourcebytes":[84,97,98,32,111,112,116,105,111,110,115],"value":"Tab options"}, {"hash":147502805,"name":"tfrmmain.mitrayiconrestore.caption","sourcebytes":[82,101,115,116,111,114,101],"value":"Restore"}, {"hash":4710148,"name":"tfrmmain.mitrayiconexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, {"hash":304761,"name":"tfrmmain.milogcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":195288076,"name":"tfrmmain.milogselectall.caption","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"}, {"hash":4860802,"name":"tfrmmain.milogclear.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, {"hash":323493,"name":"tfrmmain.miloghide.caption","sourcebytes":[72,105,100,101],"value":"Hide"} ]} doublecmd-1.1.30/src/fmain.lfm0000644000175000001440000045353415104114162015164 0ustar alexxusersobject frmMain: TfrmMain Left = 485 Height = 370 Top = 269 Width = 760 Caption = 'Double Commander' ClientHeight = 370 ClientWidth = 760 Constraints.MaxHeight = 32767 Constraints.MaxWidth = 32767 KeyPreview = True OnClose = frmMainClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnKeyPress = FormKeyPress OnKeyUp = FormKeyUp OnResize = FormResize OnShow = frmMainShow OnUTF8KeyPress = FormUTF8KeyPress OnWindowStateChange = FormWindowStateChange SessionProperties = 'nbConsole.Height;seLogWindow.Height;TreePanel.Width' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '1.8.4.0' object MainToolbar: TKASToolBar AnchorSideTop.Control = Owner Left = 0 Height = 20 Top = 0 Width = 760 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [] Flat = True TabOrder = 1 OnDragDrop = MainToolBarDragDrop OnDragOver = MainToolBarDragOver OnMouseUp = MainToolBarMouseUp OnLoadButtonGlyph = MainToolBarLoadButtonGlyph OnLoadButtonOverlay = MainToolBarLoadButtonOverlay OnToolButtonMouseDown = MainToolBarToolButtonMouseDown OnToolButtonMouseUp = MainToolBarToolButtonMouseUp OnToolButtonDragDrop = MainToolBarToolButtonDragDrop OnToolButtonDragOver = MainToolBarToolButtonDragOver OnToolItemShortcutsHint = MainToolBarToolItemShortcutsHint GlyphSize = 16 end object TreePanel: TPanel Left = 0 Height = 191 Top = 20 Width = 121 Align = alLeft BevelOuter = bvNone TabOrder = 0 Visible = False end object TreeSplitter: TSplitter Left = 121 Height = 191 Top = 20 Width = 5 end object pnlMain: TPanel Left = 126 Height = 191 Top = 20 Width = 634 Align = alClient BevelOuter = bvNone ClientHeight = 191 ClientWidth = 634 TabOrder = 5 object pnlDisk: TKASToolPanel AnchorSideTop.Control = MainToolbar Left = 0 Height = 24 Top = 0 Width = 634 Align = alTop AutoSize = True EdgeBorders = [ebTop, ebBottom] Visible = False object pnlDskLeft: TPanel AnchorSideLeft.Control = pnlDisk AnchorSideTop.Control = pnlDisk Left = 0 Height = 24 Top = 0 Width = 170 AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 170 TabOrder = 0 Visible = False object dskLeft: TKASToolBar Left = 0 Height = 20 Top = 0 Width = 170 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [] Flat = True ShowCaptions = True TabOrder = 0 OnToolButtonClick = dskLeftToolButtonClick OnToolButtonMouseDown = dskToolButtonMouseDown OnToolButtonMouseUp = dskToolButtonMouseUp OnToolButtonDragDrop = dskLeftRightToolButtonDragDrop RadioToolBar = True GlyphSize = 16 end end object pnlDskRight: TPanel AnchorSideTop.Control = pnlDisk AnchorSideRight.Control = pnlDisk AnchorSideRight.Side = asrBottom Left = 46 Height = 24 Top = 0 Width = 588 AutoSize = True Anchors = [akTop, akRight] BevelOuter = bvNone ClientHeight = 24 ClientWidth = 588 TabOrder = 1 Visible = False object dskRight: TKASToolBar Left = 0 Height = 20 Top = 0 Width = 588 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [] Flat = True ShowCaptions = True TabOrder = 0 OnToolButtonClick = dskRightToolButtonClick OnToolButtonMouseDown = dskToolButtonMouseDown OnToolButtonMouseUp = dskToolButtonMouseUp OnToolButtonDragDrop = dskLeftRightToolButtonDragDrop RadioToolBar = True GlyphSize = 16 end end end object pnlNotebooks: TPanel Left = 0 Height = 167 Top = 24 Width = 634 Align = alClient BevelOuter = bvNone ClientHeight = 167 ClientWidth = 634 FullRepaint = False TabOrder = 1 OnResize = pnlNotebooksResize object pnlLeft: TPanel Left = 0 Height = 167 Top = 0 Width = 511 Align = alLeft BevelOuter = bvNone ClientHeight = 167 ClientWidth = 511 TabOrder = 0 OnDblClick = pnlLeftRightDblClick OnResize = pnlLeftResize object pnlDiskLeftInner: TKASToolPanel Left = 0 Height = 10 Top = 0 Width = 511 Align = alTop AutoSize = True EdgeBorders = [ebTop, ebBottom] Visible = False end object pnlLeftTools: TPanel Left = 0 Height = 24 Top = 10 Width = 511 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 511 TabOrder = 0 Visible = False object btnLeftDrive: TSpeedButton Left = 0 Height = 24 Top = 0 Width = 48 Action = actLeftOpenDrives Align = alLeft Constraints.MinHeight = 24 OnMouseUp = btnDriveMouseUp end object btnLeftHome: TSpeedButton Left = 465 Height = 24 Hint = 'Go to home directory' Top = 0 Width = 23 Align = alRight Caption = '~' OnClick = btnLeftClick end object btnLeftUp: TSpeedButton Left = 442 Height = 24 Hint = 'Go to parent directory' Top = 0 Width = 23 Align = alRight Caption = '..' OnClick = btnLeftClick end object btnLeftRoot: TSpeedButton Left = 419 Height = 24 Hint = 'Go to root directory' Top = 0 Width = 23 Align = alRight Caption = '/' OnClick = btnLeftClick end object btnLeftDirectoryHotlist: TSpeedButton Left = 396 Height = 24 Hint = 'Directory Hotlist' Top = 0 Width = 23 Align = alRight Caption = '*' OnClick = btnLeftDirectoryHotlistClick end object btnLeftEqualRight: TSpeedButton Left = 488 Height = 24 Hint = 'Show current directory of the right panel in the left panel' Top = 0 Width = 23 Action = actLeftEqualRight Align = alRight Caption = '<' end object pbxLeftDrive: TPaintBox AnchorSideLeft.Control = lblLeftDriveInfo AnchorSideTop.Control = lblLeftDriveInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblLeftDriveInfo AnchorSideRight.Side = asrBottom Left = 52 Height = 10 Top = 1 Width = 342 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 OnPaint = sboxDrivePaint end object lblLeftDriveInfo: TLabel AnchorSideLeft.Control = btnLeftDrive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftTools AnchorSideRight.Side = asrBottom Left = 50 Height = 1 Top = 0 Width = 346 Alignment = taCenter Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 ParentColor = False OnDblClick = lblDriveInfoDblClick OnResize = lblDriveInfoResize end end end object MiddleToolbar: TKASToolBar Left = 511 Height = 161 Top = 0 Width = 20 Align = alLeft AutoSize = True Constraints.MinHeight = 20 Constraints.MinWidth = 20 EdgeBorders = [] Flat = True TabOrder = 3 Visible = False OnDragDrop = MainToolBarDragDrop OnDragOver = MainToolBarDragOver OnMouseUp = MainToolBarMouseUp OnLoadButtonGlyph = MainToolBarLoadButtonGlyph OnLoadButtonOverlay = MainToolBarLoadButtonOverlay OnToolButtonMouseDown = MainToolBarToolButtonMouseDown OnToolButtonMouseUp = MainToolBarToolButtonMouseUp OnToolButtonDragDrop = MainToolBarToolButtonDragDrop OnToolButtonDragOver = MainToolBarToolButtonDragOver OnToolItemShortcutsHint = MainToolBarToolItemShortcutsHint GlyphSize = 16 end object pnlRight: TPanel Left = 511 Height = 167 Top = 0 Width = 123 Align = alClient BevelOuter = bvNone ClientHeight = 167 ClientWidth = 123 TabOrder = 1 OnDblClick = pnlLeftRightDblClick OnResize = pnlRightResize object pnlDiskRightInner: TKASToolPanel Left = 0 Height = 10 Top = 0 Width = 123 Align = alTop AutoSize = True EdgeBorders = [ebTop, ebBottom] Visible = False end object pnlRightTools: TPanel Left = 0 Height = 24 Top = 10 Width = 123 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 123 TabOrder = 0 Visible = False object btnRightDrive: TSpeedButton Left = 0 Height = 24 Top = 0 Width = 48 Action = actRightOpenDrives Align = alLeft Constraints.MinHeight = 24 OnMouseUp = btnDriveMouseUp end object btnRightHome: TSpeedButton Left = 77 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '~' OnClick = btnRightClick end object btnRightUp: TSpeedButton Left = 54 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '..' OnClick = btnRightClick end object btnRightRoot: TSpeedButton Left = 31 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '/' OnClick = btnRightClick end object btnRightDirectoryHotlist: TSpeedButton Left = 25 Height = 24 Hint = 'Directory Hotlist' Top = 0 Width = 23 Align = alRight Caption = '*' OnClick = btnRightDirectoryHotlistClick end object btnRightEqualLeft: TSpeedButton Left = 100 Height = 24 Hint = 'Show current directory of the left panel in the right panel' Top = 0 Width = 23 Action = actRightEqualLeft Align = alRight Caption = '>' end object pbxRightDrive: TPaintBox AnchorSideLeft.Control = lblRightDriveInfo AnchorSideTop.Control = lblRightDriveInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblRightDriveInfo AnchorSideRight.Side = asrBottom Left = 52 Height = 10 Top = 1 Width = 0 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 OnPaint = sboxDrivePaint end object lblRightDriveInfo: TLabel AnchorSideLeft.Control = btnRightDrive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightTools AnchorSideRight.Side = asrBottom Left = 50 Height = 1 Top = 0 Width = 0 Alignment = taCenter Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 ParentColor = False OnDblClick = lblDriveInfoDblClick OnResize = lblDriveInfoResize end end end object MainSplitter: TPanel Cursor = crHSplit Left = 429 Height = 78 Top = -40 Width = 5 Anchors = [] BevelOuter = bvNone PopupMenu = pmSplitterPercent TabOrder = 2 OnDblClick = MainSplitterDblClick OnMouseDown = MainSplitterMouseDown OnMouseMove = MainSplitterMouseMove OnMouseUp = MainSplitterMouseUp end end end object PanelAllProgress: TPanel Left = 0 Height = 0 Top = 211 Width = 760 Align = alBottom AutoSize = True BevelOuter = bvNone TabOrder = 2 Visible = False end object ConsoleSplitter: TSplitter Cursor = crVSplit Left = 0 Height = 3 Top = 211 Width = 760 Align = alBottom AutoSnap = False OnCanResize = ConsoleSplitterCanResize OnMoved = ConsoleSplitterMoved ResizeAnchor = akBottom ResizeStyle = rsLine Visible = False end object pnlCommand: TPanel AnchorSideBottom.Control = LogSplitter Left = 0 Height = 81 Top = 214 Width = 760 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 81 ClientWidth = 760 FullRepaint = False TabOrder = 8 object pnlCmdLine: TPanel Left = 0 Height = 27 Top = 54 Width = 760 Align = alClient AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 2 ClientHeight = 27 ClientWidth = 760 TabOrder = 1 object lblCommandPath: TLabel AnchorSideTop.Control = edtCommand AnchorSideTop.Side = asrCenter Left = 2 Height = 15 Top = 6 Width = 24 BorderSpacing.Left = 2 Caption = 'Path' ParentColor = False ShowAccelChar = False end object edtCommand: TComboBoxWithDelItems AnchorSideLeft.Control = lblCommandPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlCmdLine AnchorSideRight.Control = pnlCmdLine AnchorSideRight.Side = asrBottom Left = 28 Height = 23 Top = 2 Width = 732 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 ItemHeight = 15 OnExit = edtCommandExit OnKeyDown = edtCommandKeyDown TabOrder = 0 TabStop = False end end object nbConsole: TPageControl Left = 0 Height = 54 Top = 0 Width = 760 TabStop = False ActivePage = pgConsole Align = alTop ShowTabs = False TabIndex = 0 TabOrder = 0 Visible = False object pgConsole: TTabSheet end end end object LogSplitter: TSplitter AnchorSideBottom.Control = seLogWindow Cursor = crVSplit Left = 0 Height = 4 Top = 295 Width = 760 Align = alBottom AutoSnap = False ResizeAnchor = akBottom ResizeStyle = rsLine Visible = False end inline seLogWindow: TSynEdit AnchorSideBottom.Control = pnlKeys Left = 0 Height = 51 Top = 299 Width = 760 Align = alBottom Color = clWindow Font.Color = clWindowText Font.Height = -16 Font.Name = 'courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False PopupMenu = pmLogMenu TabOrder = 4 TabStop = False Visible = False Gutter.Width = 0 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end> MouseActions = <> MouseTextActions = <> MouseSelActions = <> VisibleSpecialChars = [vscSpace, vscTabAtLast] ReadOnly = True RightEdge = 0 ScrollBars = ssVertical SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnSpecialLineColors = seLogWindowSpecialLineColors inline SynLeftGutterPartList1: TSynGutterPartList end end object pnlKeys: TPanel Left = 0 Height = 20 Top = 350 Width = 760 Align = alBottom BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 20 ClientWidth = 760 FullRepaint = False TabOrder = 3 Visible = False object btnF3: TSpeedButton Left = 0 Height = 20 Top = 0 Width = 89 Action = actView Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF4: TSpeedButton Left = 89 Height = 20 Top = 0 Width = 84 Action = actEdit Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF5: TSpeedButton Left = 173 Height = 20 Top = 0 Width = 92 Action = actCopy Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF6: TSpeedButton Left = 265 Height = 20 Top = 0 Width = 94 Action = actRename Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF7: TSpeedButton Left = 359 Height = 20 Top = 0 Width = 112 Action = actMakeDir Caption = 'Directory' Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF8: TSpeedButton Left = 471 Height = 20 Top = 0 Width = 97 Caption = 'Delete' Flat = True OnClick = btnF8Click OnMouseDown = btnF8MouseDown OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF9: TSpeedButton Left = 568 Height = 20 Top = 0 Width = 110 Action = actRunTerm Caption = 'Terminal' Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end object btnF10: TSpeedButton Left = 678 Height = 20 Top = 0 Width = 82 Action = actExit Caption = 'Exit' Flat = True OnMouseWheelDown = btnF3MouseWheelDown OnMouseWheelUp = btnF3MouseWheelUp end end object mnuMain: TMainMenu ParentBidiMode = False left = 232 top = 8 object mnuFiles: TMenuItem Caption = '&Files' object mnuFilesSymLink: TMenuItem Action = actSymLink end object mnuFilesHardLink: TMenuItem Action = actHardLink end object miMakeDir: TMenuItem Action = actMakeDir end object miLine1: TMenuItem Caption = '-' end object mnuSetFileProperties: TMenuItem Action = actSetFileProperties end object mnuFilesProperties: TMenuItem Action = actFileProperties end object miEditComment: TMenuItem Action = actEditComment end object mnuFilesSpace: TMenuItem Action = actCalculateSpace end object mnuFilesCmpCnt: TMenuItem Action = actCompareContents end object miMultiRename: TMenuItem Action = actMultiRename end object miLine2: TMenuItem Caption = '-' end object mnuPackFiles: TMenuItem Action = actPackFiles end object mnuExtractFiles: TMenuItem Action = actExtractFiles end object mnuTestArchive: TMenuItem Action = actTestArchive end object mnuFilesSplit: TMenuItem Action = actFileSpliter end object mnuFilesCombine: TMenuItem Action = actFileLinker end object mnuCheckSumCalc: TMenuItem Action = actCheckSumCalc end object mnuCheckSumVerify: TMenuItem Action = actCheckSumVerify end object miLine4: TMenuItem Caption = '-' end object miWipe: TMenuItem Action = actWipe end object miDelete: TMenuItem Action = actDelete end object miLine50: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExit end end object mnuMark: TMenuItem Caption = '&Mark' object mnuMarkSGroup: TMenuItem Action = actMarkPlus end object mnuMarkUGroup: TMenuItem Action = actMarkMinus end object mnuMarkSAll: TMenuItem Action = actMarkMarkAll end object mnuMarkUAll: TMenuItem Action = actMarkUnmarkAll end object mnuMarkInvert: TMenuItem Action = actMarkInvert end object mnuMarkCurrentExtension: TMenuItem Action = actMarkCurrentExtension end object mnuUnmarkCurrentExtension: TMenuItem Action = actUnmarkCurrentExtension end object miLine47: TMenuItem Caption = '-' end object mnuSaveSelection: TMenuItem Action = actSaveSelection end object mnuRestoreSelection: TMenuItem Action = actRestoreSelection end object mnuSaveSelectionToFile: TMenuItem Action = actSaveSelectionToFile end object mnuLoadSelectionFromFile: TMenuItem Action = actLoadSelectionFromFile end object mnuLoadSelectionFromClip: TMenuItem Action = actLoadSelectionFromClip end object miLine5: TMenuItem Caption = '-' end object miCopyNamesToClip: TMenuItem Action = actCopyNamesToClip end object miCopyFullNamesToClip: TMenuItem Action = actCopyFullNamesToClip end object miCopyFileDetailsToClip: TMenuItem Action = actCopyFileDetailsToClip end object miLine37: TMenuItem Caption = '-' end object miCompareDirectories: TMenuItem Action = actCompareDirectories end end object mnuCmd: TMenuItem Caption = '&Commands' object mnuCmdSearch: TMenuItem Action = actSearch end object mnuCmdAddNewSearch: TMenuItem Action = actAddNewSearch end object mnuCmdViewSearches: TMenuItem Action = actViewSearches end object mnuCmdDirHotlist: TMenuItem Action = actDirHotList end object mnuCmdSyncDirs: TMenuItem Action = actSyncDirs end object miLine6: TMenuItem Caption = '-' end object miRunTerm: TMenuItem Action = actRunTerm end object mnuDoAnyCmCommand: TMenuItem Action = actDoAnyCmCommand end object miLine9: TMenuItem Caption = '-' end object miFlatView: TMenuItem Action = actFlatView end object mnuOpenVFSList: TMenuItem Action = actOpenVirtualFileSystemList end object mnuCmdSwapSourceTarget: TMenuItem Action = actExchange end object mnuCmdTargetIsSource: TMenuItem Action = actTargetEqualSource end object miLine22: TMenuItem Caption = '-' end object mnuCountDirContent: TMenuItem Action = actCountDirContent end end object mnuNetwork: TMenuItem Caption = 'Network' object miNetworkConnect: TMenuItem Action = actNetworkConnect end object miNetworkQuickConnect: TMenuItem Action = actNetworkQuickConnect Visible = False end object miNetworkDisconnect: TMenuItem Action = actNetworkDisconnect Enabled = False end end object mnuTabs: TMenuItem Caption = '&Tabs' object mnuNewTab: TMenuItem Action = actNewTab end object mnuRenameTab: TMenuItem Action = actRenameTab end object mnuOpenDirInNewTab: TMenuItem Action = actOpenDirInNewTab end object miLine15: TMenuItem Caption = '-' end object mnuCloseTab: TMenuItem Action = actCloseTab end object mnuCloseAllTabs: TMenuItem Action = actCloseAllTabs end object mnuCloseDuplicateTabs: TMenuItem Action = actCloseDuplicateTabs end object miLine11: TMenuItem Caption = '-' end object mnuTabOptions: TMenuItem Caption = 'Tab &Options' object mnuTabOptionNormal: TMenuItem Action = actSetTabOptionNormal GroupIndex = 1 RadioItem = True end object mnuTabOptionPathLocked: TMenuItem Action = actSetTabOptionPathLocked GroupIndex = 1 RadioItem = True end object mnuTabOptionPathResets: TMenuItem Action = actSetTabOptionPathResets GroupIndex = 1 RadioItem = True end object mnuTabOptionDirsInNewTabs: TMenuItem Action = actSetTabOptionDirsInNewTab GroupIndex = 1 RadioItem = True end object miLine10: TMenuItem Caption = '-' end object mnuSetAllTabsOptionNormal: TMenuItem Action = actSetAllTabsOptionNormal end object mnuSetAllTabsOptionPathLocked: TMenuItem Action = actSetAllTabsOptionPathLocked end object mnuSetAllTabsOptionPathResets: TMenuItem Action = actSetAllTabsOptionPathResets end object mnuSetAllTabsOptionDirsInNewTab: TMenuItem Action = actSetAllTabsOptionDirsInNewTab end end object miLine17: TMenuItem Caption = '-' end object mnuNextTab: TMenuItem Action = actNextTab end object mnuPrevTab: TMenuItem Action = actPrevTab end object miLine38: TMenuItem Caption = '-' end object mnuSaveTabs: TMenuItem Action = actSaveTabs end object mnuLoadTabs: TMenuItem Action = actLoadTabs end object mnuSaveFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object mnuLoadFavoriteTabs: TMenuItem Action = actLoadFavoriteTabs end object miLine39: TMenuItem Caption = '-' end object mnuConfigurationFolderTabs: TMenuItem Action = actConfigFolderTabs end object mnuConfigurationFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object mnuFavoriteTabs: TMenuItem Caption = 'Favorites' object mnuCreateNewFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object mnuRewriteFavoriteTabs: TMenuItem Action = actResaveFavoriteTabs end object mnuReloadActiveFavoriteTabs: TMenuItem Action = actReloadFavoriteTabs end object mnuConfigureFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object mnuShow: TMenuItem Caption = '&Show' object mnuBriefView: TMenuItem Action = actBriefView end object mnuColumnsView: TMenuItem Action = actColumnsView end object mnuThumbnailsView: TMenuItem Action = actThumbnailsView end object miLine33: TMenuItem Caption = '-' end object mnuQuickView: TMenuItem Action = actQuickView end object mnuTreeView: TMenuItem Action = actTreeView end object miLine32: TMenuItem Caption = '-' end object mnuShowName: TMenuItem Action = actSortByName end object mnuShowExtension: TMenuItem Action = actSortByExt end object mnuShowSize: TMenuItem Action = actSortBySize end object mnuShowTime: TMenuItem Action = actSortByDate end object mnuShowAttrib: TMenuItem Action = actSortByAttr end object miLine7: TMenuItem Caption = '-' end object mnuShowReverse: TMenuItem Action = actReverseOrder end object mnuShowReread: TMenuItem Action = actRefresh end object miLine3: TMenuItem Caption = '-' end object mnuFilesShwSysFiles: TMenuItem Action = actShowSysFiles end object miLine20: TMenuItem Caption = '-' end object mnuShowHorizontalFilePanels: TMenuItem Action = actHorizontalFilePanels end object miLine13: TMenuItem Caption = '-' end object mnuShowOperations: TMenuItem Action = actOperationsViewer end end object mnuConfig: TMenuItem Caption = 'C&onfiguration' object mnuConfigOptions: TMenuItem Action = actOptions end object miLine40: TMenuItem Caption = '-' end object mnuCmdConfigDirHotlist: TMenuItem Action = actConfigDirHotList end object mnuConfigFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end object mnuFileAssoc: TMenuItem Action = actFileAssoc end object mnuConfigFolderTabs: TMenuItem Action = actConfigFolderTabs end object miConfigArchivers: TMenuItem Action = actConfigArchivers end object miLine55: TMenuItem Caption = '-' end object mnuConfigSavePos: TMenuItem Action = actConfigSavePos end object mnuConfigSaveSettings: TMenuItem Action = actConfigSaveSettings end end object mnuHelp: TMenuItem Caption = '&Help' object mnuHelpIndex: TMenuItem Action = actHelpIndex end object mnuHelpKeyboard: TMenuItem Action = actKeyboard end object mnuHelpVisitHomePage: TMenuItem Action = actVisitHomePage end object miLine18: TMenuItem Caption = '-' end object mnuHelpAbout: TMenuItem Action = actAbout end end object mnuAllOperProgress: TMenuItem RightJustify = True Visible = False OnClick = mnuAllOperProgressClick end object mnuAllOperStart: TMenuItem Caption = 'Start' RightJustify = True Visible = False OnClick = mnuAllOperStartClick end object mnuAllOperPause: TMenuItem Caption = '||' RightJustify = True Visible = False OnClick = mnuAllOperPauseClick end object mnuAllOperStop: TMenuItem Caption = 'Cancel' RightJustify = True Visible = False OnClick = mnuAllOperStopClick end end object actionLst: TActionList left = 320 top = 24 object actHorizontalFilePanels: TAction Tag = 16 Category = 'Window' Caption = '&Horizontal Panels Mode' GroupIndex = 5 OnExecute = actExecute end object actPanelsSplitterPerPos: TAction Tag = 16 Category = 'Window' Caption = 'Set splitter position' OnExecute = actExecute end object actView: TAction Tag = 4 Category = 'File Operations' Caption = 'View' HelpType = htKeyword OnExecute = actExecute end object actEdit: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit' HelpType = htKeyword OnExecute = actExecute end object actHelpIndex: TAction Tag = 15 Category = 'Help' Caption = '&Contents' OnExecute = actExecute end object actKeyboard: TAction Tag = 15 Category = 'Help' Caption = '&Keyboard' OnExecute = actExecute end object actVisitHomePage: TAction Tag = 15 Category = 'Help' Caption = '&Visit Double Commander Website' OnExecute = actExecute end object actAbout: TAction Tag = 15 Category = 'Help' Caption = '&About' HelpType = htKeyword OnExecute = actExecute end object actOptions: TAction Tag = 5 Category = 'Configuration' Caption = '&Options...' HelpType = htKeyword OnExecute = actExecute end object actMultiRename: TAction Tag = 18 Category = 'Tools' Caption = 'Multi-&Rename Tool' HelpType = htKeyword OnExecute = actExecute end object actSearch: TAction Tag = 18 Category = 'Tools' Caption = '&Search...' HelpType = htKeyword OnExecute = actExecute end object actAddNewSearch: TAction Tag = 18 Category = 'Tools' Caption = 'New search instance...' HelpType = htKeyword OnExecute = actExecute end object actViewSearches: TAction Tag = 18 Category = 'Tools' Caption = 'View current search instances' HelpType = htKeyword OnExecute = actExecute end object actDeleteSearches: TAction Tag = 18 Category = 'Tools' Caption = 'For all searches, cancel, close and free memory' HelpType = htKeyword OnExecute = actExecute end object actSyncDirs: TAction Tag = 18 Category = 'Tools' Caption = 'Syn&chronize dirs...' HelpType = htKeyword OnExecute = actExecute end object actConfigToolbars: TAction Tag = 5 Category = 'Configuration' Caption = 'Toolbar...' OnExecute = actExecute end object actConfigDirHotList: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Directory Hotlist' OnExecute = actExecute end object actWorkWithDirectoryHotlist: TAction Tag = 5 Category = 'Configuration' Caption = 'Work with Directory Hotlist and parameters' OnExecute = actExecute end object actFileAssoc: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of File &Associations' OnExecute = actExecute end object actCompareContents: TAction Tag = 18 Category = 'Tools' Caption = 'Compare by &Contents' HelpType = htKeyword OnExecute = actExecute end object actShowMainMenu: TAction Tag = 16 Category = 'Window' Caption = 'Menu' HelpType = htKeyword OnExecute = actExecute end object actShowButtonMenu: TAction Tag = 16 Category = 'Window' Caption = 'Show button menu' OnExecute = actExecute end object actOperationsViewer: TAction Tag = 16 Category = 'Window' Caption = 'Operations &Viewer' OnExecute = actExecute end object actRefresh: TAction Tag = 19 Category = 'View' Caption = '&Refresh' HelpType = htKeyword OnExecute = actExecute end object actShowSysFiles: TAction Tag = 19 Category = 'View' Caption = 'Show &Hidden/System Files' Checked = True GroupIndex = 2 HelpType = htKeyword OnExecute = actExecute end object actDirHistory: TAction Tag = 14 Category = 'Navigation' Caption = 'Directory history' HelpType = htKeyword OnExecute = actExecute end object actDirHotList: TAction Tag = 14 Category = 'Navigation' Caption = 'Directory &Hotlist' HelpType = htKeyword OnExecute = actExecute end object actMarkPlus: TAction Tag = 10 Category = 'Mark' Caption = 'Select a &Group...' HelpType = htKeyword OnExecute = actExecute end object actMarkMinus: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect a Gro&up...' HelpType = htKeyword OnExecute = actExecute end object actMarkMarkAll: TAction Tag = 10 Category = 'Mark' Caption = '&Select All' HelpType = htKeyword OnExecute = actExecute end object actMarkUnmarkAll: TAction Tag = 10 Category = 'Mark' Caption = '&Unselect All' HelpType = htKeyword OnExecute = actExecute end object actCalculateSpace: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Calculate &Occupied Space' HelpType = htKeyword OnExecute = actExecute end object actBenchmark: TAction Tag = 7 Category = 'Miscellaneous' Caption = '&Benchmark' OnExecute = actExecute end object actNewTab: TAction Tag = 21 Category = 'Tabs' Caption = '&New Tab' HelpType = htKeyword OnExecute = actExecute end object actCutToClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = 'Cu&t' OnExecute = actExecute end object actCopyToClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = '&Copy' OnExecute = actExecute end object actPasteFromClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = '&Paste' OnExecute = actExecute end object actRunTerm: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Run &Terminal' HelpType = htKeyword OnExecute = actExecute end object actMarkInvert: TAction Tag = 10 Category = 'Mark' Caption = '&Invert Selection' HelpType = htKeyword OnExecute = actExecute end object actMarkCurrentPath: TAction Tag = 10 Category = 'Mark' Caption = 'Select all in same path' OnExecute = actExecute end object actUnmarkCurrentPath: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect all in same path' OnExecute = actExecute end object actMarkCurrentName: TAction Tag = 10 Category = 'Mark' Caption = 'Select all files with same name' OnExecute = actExecute end object actUnmarkCurrentName: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect all files with same name' OnExecute = actExecute end object actMarkCurrentExtension: TAction Tag = 10 Category = 'Mark' Caption = 'Select All with the Same E&xtension' OnExecute = actExecute end object actUnmarkCurrentExtension: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect All with the Same Ex&tension' OnExecute = actExecute end object actMarkCurrentNameExt: TAction Tag = 10 Category = 'Mark' Caption = 'Select all files with same name and extension' OnExecute = actExecute end object actUnmarkCurrentNameExt: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect all files with same name and extension' OnExecute = actExecute end object actCompareDirectories: TAction Tag = 10 Category = 'Mark' Caption = 'Compare Directories' Hint = 'Compare Directories' OnExecute = actExecute end object actEditNew: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit new file' HelpType = htKeyword OnExecute = actExecute end object actCopy: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy' HelpType = htKeyword OnExecute = actExecute end object actCopyNoAsk: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy files without asking for confirmation' OnExecute = actExecute end object actCopySamePanel: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy to same panel' HelpType = htKeyword OnExecute = actExecute end object actRename: TAction Tag = 4 Category = 'File Operations' Caption = 'Move' HelpType = htKeyword OnExecute = actExecute end object actRenameNoAsk: TAction Tag = 4 Category = 'File Operations' Caption = 'Move/Rename files without asking for confirmation' OnExecute = actExecute end object actRenameOnly: TAction Tag = 4 Category = 'File Operations' Caption = 'Rename' HelpType = htKeyword OnExecute = actExecute end object actMakeDir: TAction Tag = 4 Category = 'File Operations' Caption = 'Create &Directory' HelpType = htKeyword OnExecute = actExecute end object actDelete: TAction Tag = 4 Category = 'File Operations' Caption = 'Delete' HelpType = htKeyword OnExecute = actExecute end object actWipe: TAction Tag = 4 Category = 'File Operations' Caption = 'Wipe' OnExecute = actExecute end object actPackFiles: TAction Tag = 4 Category = 'File Operations' Caption = '&Pack Files...' OnExecute = actExecute end object actTestArchive: TAction Tag = 4 Category = 'File Operations' Caption = '&Test Archive(s)' OnExecute = actExecute end object actOpenArchive: TAction Tag = 4 Category = 'File Operations' Caption = 'Try open archive' OnExecute = actExecute end object actExtractFiles: TAction Tag = 4 Category = 'File Operations' Caption = '&Extract Files...' OnExecute = actExecute end object actOpenVirtualFileSystemList: TAction Tag = 4 Category = 'File Operations' Caption = 'Open &VFS List' OnExecute = actExecute end object actFileProperties: TAction Tag = 4 Category = 'File Operations' Caption = 'Show &File Properties' HelpType = htKeyword OnExecute = actExecute end object actOpenDirInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Open &Folder in a New Tab' OnExecute = actExecute end object actNextTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Switch to Nex&t Tab' OnExecute = actExecute end object actPrevTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Switch to &Previous Tab' OnExecute = actExecute end object actMoveTabLeft: TAction Tag = 21 Category = 'Tabs' Caption = 'Move current tab to the left' OnExecute = actExecute end object actMoveTabRight: TAction Tag = 21 Category = 'Tabs' Caption = 'Move current tab to the right' OnExecute = actExecute end object actSwitchIgnoreList: TAction Tag = 19 Category = 'View' Caption = 'Enable/disable ignore list file to not show file names' GroupIndex = 4 OnExecute = actExecute end object actCopyNamesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy &Filename(s) to Clipboard' OnExecute = actExecute end object actCopyFullNamesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Filename(s) with Full &Path' OnExecute = actExecute end object actSaveSelection: TAction Tag = 10 Category = 'Mark' Caption = 'Sa&ve Selection' OnExecute = actExecute end object actRestoreSelection: TAction Tag = 10 Category = 'Mark' Caption = '&Restore Selection' OnExecute = actExecute end object actSaveSelectionToFile: TAction Tag = 10 Category = 'Mark' Caption = 'Save S&election to File...' OnExecute = actExecute end object actLoadSelectionFromFile: TAction Tag = 10 Category = 'Mark' Caption = '&Load Selection from File...' OnExecute = actExecute end object actLoadSelectionFromClip: TAction Tag = 10 Category = 'Mark' Caption = 'Load Selection from Clip&board' OnExecute = actExecute end object actNetworkConnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Connect...' OnExecute = actExecute end object actNetworkQuickConnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Quick Connect...' OnExecute = actExecute end object actNetworkDisconnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Disconnect' OnExecute = actExecute end object actCopyNetNamesToClip: TAction Tag = 6 Category = 'Network' Caption = 'Copy names with UNC path' OnExecute = actExecute end object actCopyPathOfFilesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Full Path of selected file(s)' OnExecute = actExecute end object actCopyPathNoSepOfFilesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Full Path of selected file(s) with no ending dir separator' OnExecute = actExecute end object actCopyFileDetailsToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy all shown &columns' OnExecute = actExecute end object actRenameTab: TAction Tag = 21 Category = 'Tabs' Caption = '&Rename Tab' OnExecute = actExecute end object actLeftBriefView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Brief view on left panel' OnExecute = actExecute end object actLeftColumnsView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Columns view on left panel' OnExecute = actExecute end object actLeftThumbView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Thumbnails view on left panel' OnExecute = actExecute end object actLeftFlatView: TAction Tag = 2 Category = 'Left Panel' Caption = '&Flat view on left panel' OnExecute = actExecute end object actLeftSortByName: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Name' OnExecute = actExecute end object actLeftSortByExt: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Extension' OnExecute = actExecute end object actLeftSortBySize: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Size' OnExecute = actExecute end object actLeftSortByDate: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Date' OnExecute = actExecute end object actLeftSortByAttr: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Attributes' OnExecute = actExecute end object actLeftReverseOrder: TAction Tag = 2 Category = 'Left Panel' Caption = 'Re&verse order on left panel' OnExecute = actExecute end object actLeftOpenDrives: TAction Tag = 2 Category = 'Left Panel' Caption = 'Open left drive list' OnExecute = actExecute end object actRightBriefView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Brief view on right panel' OnExecute = actExecute end object actRightColumnsView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Columns view on right panel' OnExecute = actExecute end object actRightThumbView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Thumbnails view on right panel' OnExecute = actExecute end object actRightFlatView: TAction Tag = 3 Category = 'Right Panel' Caption = '&Flat view on right panel' OnExecute = actExecute end object actRightSortByName: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Name' OnExecute = actExecute end object actRightSortByExt: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Extension' OnExecute = actExecute end object actRightSortBySize: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Size' OnExecute = actExecute end object actRightSortByDate: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Date' OnExecute = actExecute end object actRightSortByAttr: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Attributes' OnExecute = actExecute end object actRightReverseOrder: TAction Tag = 3 Category = 'Right Panel' Caption = 'Re&verse order on right panel' OnExecute = actExecute end object actRightOpenDrives: TAction Tag = 3 Category = 'Right Panel' Caption = 'Open right drive list' OnExecute = actExecute end object actFocusCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Focus command line' OnExecute = actExecute end object actShowCmdLineHistory: TAction Tag = 17 Category = 'Command Line' Caption = 'Show command line history' HelpType = htKeyword OnExecute = actExecute end object actSyncChangeDir: TAction Tag = 14 Category = 'Navigation' Caption = 'Synchronous navigation' Hint = 'Synchronous directory changing in both panels' GroupIndex = 7 OnExecute = actExecute end object actChangeDirToParent: TAction Tag = 14 Category = 'Navigation' Caption = 'Change Directory To Parent' OnExecute = actExecute end object actChangeDirToHome: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory to home' OnExecute = actExecute end object actChangeDirToRoot: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory to root' OnExecute = actExecute end object actTargetEqualSource: TAction Tag = 14 Category = 'Navigation' Caption = 'Target &= Source' OnExecute = actExecute end object actTransferLeft: TAction Tag = 14 Category = 'Navigation' Caption = 'Transfer dir under cursor to left window' OnExecute = actExecute end object actTransferRight: TAction Tag = 14 Category = 'Navigation' Caption = 'Transfer dir under cursor to right window' OnExecute = actExecute end object actLeftEqualRight: TAction Tag = 14 Category = 'Navigation' Caption = 'Left &= Right' OnExecute = actExecute end object actRightEqualLeft: TAction Tag = 14 Category = 'Navigation' Caption = 'Right &= Left' OnExecute = actExecute end object actBriefView: TAction Tag = 1 Category = 'Active Panel' AutoCheck = True Caption = 'Brief view' GroupIndex = 6 Hint = 'Brief View' OnExecute = actExecute end object actColumnsView: TAction Tag = 1 Category = 'Active Panel' AutoCheck = True Caption = 'Full' GroupIndex = 6 Hint = 'Columns View' OnExecute = actExecute end object actThumbnailsView: TAction Tag = 1 Category = 'Active Panel' AutoCheck = True Caption = 'Thumbnails' GroupIndex = 6 Hint = 'Thumbnails View' OnExecute = actExecute end object actFlatView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Flat view' OnExecute = actExecute end object actFlatViewSel: TAction Tag = 1 Category = 'Active Panel' Caption = '&Flat view, only selected' OnExecute = actExecute end object actQuickView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Quick View Panel' GroupIndex = 1 OnExecute = actExecute end object actSortByName: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Name' HelpType = htKeyword OnExecute = actExecute end object actSortByExt: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Extension' HelpType = htKeyword OnExecute = actExecute end object actSortBySize: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Size' HelpType = htKeyword OnExecute = actExecute end object actSortByDate: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Date' HelpType = htKeyword OnExecute = actExecute end object actSortByAttr: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Attributes' HelpType = htKeyword OnExecute = actExecute end object actReverseOrder: TAction Tag = 1 Category = 'Active Panel' Caption = 'Re&verse Order' HelpType = htKeyword OnExecute = actExecute end object actSrcOpenDrives: TAction Tag = 1 Category = 'Active Panel' Caption = 'Open drive list' OnExecute = actExecute end object actExchange: TAction Tag = 14 Category = 'Navigation' Caption = 'Swap &Panels' OnExecute = actExecute end object actQuickSearch: TAction Tag = 14 Category = 'Navigation' Caption = 'Quick search' OnExecute = actExecute end object actViewLogFile: TAction Tag = 23 Category = 'Log' Caption = 'View log file' OnExecute = actExecute end object actClearLogFile: TAction Tag = 23 Category = 'Log' Caption = 'Clear log file' OnExecute = actExecute end object actClearLogWindow: TAction Tag = 23 Category = 'Log' Caption = 'Clear log window' OnExecute = actExecute end object actQuickFilter: TAction Tag = 14 Category = 'Navigation' Caption = 'Quick filter' OnExecute = actExecute end object actEditPath: TAction Tag = 14 Category = 'Navigation' Caption = 'Edit path field above file list' OnExecute = actExecute end object actChangeDir: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory' OnExecute = actExecute end object actCmdLineNext: TAction Tag = 17 Category = 'Command Line' Caption = 'Next Command Line' Hint = 'Set command line to next command in history' OnExecute = actExecute end object actCmdLinePrev: TAction Tag = 17 Category = 'Command Line' Caption = 'Previous Command Line' Hint = 'Set command line to previous command in history' OnExecute = actExecute end object actAddPathToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Copy path to command line' OnExecute = actExecute end object actAddFilenameToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Add file name to command line' OnExecute = actExecute end object actAddPathAndFilenameToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Add path and file name to command line' OnExecute = actExecute end object actGoToFirstEntry: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on first folder or file' OnExecute = actExecute end object actGoToLastEntry: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on last folder or file' OnExecute = actExecute end object actGoToNextEntry: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on next folder or file' OnExecute = actExecute end object actGoToPrevEntry: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on previous folder or file' OnExecute = actExecute end object actGoToFirstFile: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on first file in list' OnExecute = actExecute end object actGoToLastFile: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on last file in list' OnExecute = actExecute end object actViewHistory: TAction Tag = 14 Category = 'Navigation' Caption = 'Show history of visited paths for active view' OnExecute = actExecute end object actViewHistoryNext: TAction Tag = 14 Category = 'Navigation' Caption = 'Go to next entry in history' OnExecute = actExecute end object actViewHistoryPrev: TAction Tag = 14 Category = 'Navigation' Caption = 'Go to previous entry in history' OnExecute = actExecute end object actOpenDriveByIndex: TAction Tag = 14 Category = 'Navigation' Caption = 'Open Drive by Index' OnExecute = actExecute end object actOpenBar: TAction Tag = 16 Category = 'Window' Caption = 'Open bar file' OnExecute = actExecute end object actMinimize: TAction Tag = 16 Category = 'Window' Caption = 'Minimize window' OnExecute = actExecute end object actExit: TAction Tag = 16 Category = 'Window' Caption = 'E&xit' HelpType = htKeyword OnExecute = actExecute end object actDebugShowCommandParameters: TAction Tag = 18 Category = 'Tools' Caption = 'Show Command Parameters' OnExecute = actExecute end object actDoAnyCmCommand: TAction Tag = 18 Category = 'Tools' Caption = 'Execute &internal command...' Hint = 'Select any command and execute it' OnExecute = actExecute end object actSetFileProperties: TAction Tag = 4 Category = 'File Operations' Caption = 'Change &Attributes...' OnExecute = actExecute end object actEditComment: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit Co&mment...' OnExecute = actExecute end object actContextMenu: TAction Tag = 4 Category = 'File Operations' Caption = 'Show context menu' OnExecute = actExecute end object actOpen: TAction Tag = 4 Category = 'File Operations' Caption = 'Open' OnExecute = actExecute end object actShellExecute: TAction Tag = 4 Category = 'File Operations' Caption = 'Open' Hint = 'Open using system associations' OnExecute = actExecute end object actSymLink: TAction Tag = 4 Category = 'File Operations' Caption = 'Create Symbolic &Link...' HelpType = htKeyword OnExecute = actExecute end object actHardLink: TAction Tag = 4 Category = 'File Operations' Caption = 'Create &Hard Link...' HelpType = htKeyword OnExecute = actExecute end object actFileSpliter: TAction Tag = 4 Category = 'File Operations' Caption = 'Spl&it File...' HelpType = htKeyword OnExecute = actExecute end object actFileLinker: TAction Tag = 4 Category = 'File Operations' Caption = 'Com&bine Files...' HelpType = htKeyword OnExecute = actExecute end object actCheckSumCalc: TAction Tag = 4 Category = 'File Operations' Caption = 'Calculate Check&sum...' OnExecute = actExecute end object actCheckSumVerify: TAction Tag = 4 Category = 'File Operations' Caption = '&Verify Checksum...' OnExecute = actExecute end object actUniversalSingleDirectSort: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort according to parameters' OnExecute = actExecute end object actCountDirContent: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sho&w Occupied Space' OnExecute = actExecute end object actToggleFullscreenConsole: TAction Tag = 17 Category = 'Command Line' Caption = 'Toggle fullscreen mode console' OnExecute = actExecute end object actTreeView: TAction Tag = 16 Category = 'Window' Caption = '&Tree View Panel' GroupIndex = 3 OnExecute = actExecute end object actFocusTreeView: TAction Tag = 16 Category = 'Window' Caption = 'Focus on tree view' Hint = 'Switch between current file list and tree view (if enabled)' OnExecute = actExecute end object actConfigFolderTabs: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of folder tabs' OnExecute = actExecute end object actConfigFavoriteTabs: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Favorite Tabs' OnExecute = actExecute end object actCloseTab: TAction Tag = 21 Category = 'Tabs' Caption = '&Close Tab' HelpType = htKeyword OnExecute = actExecute end object actCloseAllTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Close &All Tabs' OnExecute = actExecute end object actCloseDuplicateTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Close Duplicate Tabs' OnExecute = actExecute end object actCopyAllTabsToOpposite: TAction Tag = 21 Category = 'Tabs' Caption = 'Copy all tabs to opposite side' OnExecute = actExecute end object actLoadTabs: TAction Tag = 21 Category = 'Tabs' Caption = '&Load Tabs from File' OnExecute = actExecute end object actSaveTabs: TAction Tag = 21 Category = 'Tabs' Caption = '&Save Tabs to File' OnExecute = actExecute end object actSetTabOptionNormal: TAction Tag = 21 Category = 'Tabs' Caption = '&Normal' OnExecute = actExecute end object actSetTabOptionPathLocked: TAction Tag = 21 Category = 'Tabs' Caption = '&Locked' OnExecute = actExecute end object actSetTabOptionPathResets: TAction Tag = 21 Category = 'Tabs' Caption = 'Locked with &Directory Changes Allowed' OnExecute = actExecute end object actSetTabOptionDirsInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Locked with Directories Opened in New &Tabs' OnExecute = actExecute end object actSetAllTabsOptionNormal: TAction Tag = 21 Category = 'Tabs' Caption = 'Set all tabs to Normal' OnExecute = actExecute end object actSetAllTabsOptionPathLocked: TAction Tag = 21 Category = 'Tabs' Caption = 'Set all tabs to Locked' OnExecute = actExecute end object actSetAllTabsOptionPathResets: TAction Tag = 21 Category = 'Tabs' Caption = 'All tabs Locked with Dir Changes Allowed' OnExecute = actExecute end object actSetAllTabsOptionDirsInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'All tabs Locked with Dir Opened in New Tabs' OnExecute = actExecute end object actLoadFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load tabs from Favorite Tabs' OnExecute = actExecute end object actSaveFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Save current tabs to a New Favorite Tabs' OnExecute = actExecute end object actReloadFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Reload the last Favorite Tabs loaded' OnExecute = actExecute end object actResaveFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Resave on the last Favorite Tabs loaded' OnExecute = actExecute end object actPreviousFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load the Previous Favorite Tabs in the list' OnExecute = actExecute end object actNextFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load the Next Favorite Tabs in the list' OnExecute = actExecute end object actActivateTabByIndex: TAction Tag = 21 Category = 'Tabs' Caption = 'Activate Tab By Index' OnExecute = actExecute end object actConfigTreeViewMenus: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Tree View Menu' OnExecute = actExecute end object actConfigTreeViewMenusColors: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Tree View Menu Colors' OnExecute = actExecute end object actConfigSearches: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of searches' HelpType = htKeyword OnExecute = actExecute end object actConfigHotKeys: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of hot keys' HelpType = htKeyword OnExecute = actExecute end object actConfigSavePos: TAction Tag = 5 Category = 'Configuration' Caption = 'Save Position' OnExecute = actExecute end object actConfigSaveSettings: TAction Tag = 5 Category = 'Configuration' Caption = 'Save Settings' OnExecute = actExecute end object actExecuteScript: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Execute Script' OnExecute = actExecute end object actFocusSwap: TAction Tag = 14 Category = 'Navigation' Caption = 'Swap focus' Hint = 'Switch between left and right file list' OnExecute = actExecute end object actConfigArchivers: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Archivers' OnExecute = actExecute end object actConfigTooltips: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of tooltips' OnExecute = actExecute end object actConfigPlugins: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Plugins' OnExecute = actExecute end object actAddPlugin: TAction Tag = 5 Category = 'Configuration' Caption = 'Add Plugin' OnExecute = actExecute end object actLoadList: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Load List' Hint = 'Load list of files/folders from the specified text file' OnExecute = actExecute end object actSaveFileDetailsToFile: TAction Tag = 10 Category = 'Mark' Caption = 'Save all shown columns to file' OnExecute = actExecute end object actShowTabsList: TAction Tag = 21 Category = 'Tabs' Caption = 'Show Tabs List' Hint = 'Show list of all open tabs' OnExecute = actExecute end end object pmHotList: TPopupMenu Images = imgLstDirectoryHotlist left = 128 top = 88 end object pmDirHistory: TPopupMenu AutoPopup = False left = 184 top = 104 end object pmToolBar: TPopupMenu OnPopup = pmToolBarPopup left = 48 top = 152 object tbEdit: TMenuItem Caption = 'Edit' OnClick = tbEditClick end object tbDelete: TMenuItem Caption = 'Delete' OnClick = tbDeleteClick end object tbChangeDir: TMenuItem Caption = 'CD' OnClick = tbChangeDirClick end object tbSeparator: TMenuItem Caption = '-' Visible = False end object tbCut: TMenuItem Caption = 'Cut' Visible = False OnClick = tbCopyClick end object tbCopy: TMenuItem Caption = 'Copy' Visible = False OnClick = tbCopyClick end object tbPaste: TMenuItem Caption = 'Paste' Visible = False OnClick = tbPasteClick end end object pmContextMenu: TPopupMenu left = 40 top = 96 object mnuContextOpen: TMenuItem Action = actOpen end object mnuContextView: TMenuItem Action = actView end object mnuContextLine1: TMenuItem Caption = '-' end object mnuContextCopy: TMenuItem Action = actCopy end object mnuContextRenameOnly: TMenuItem Action = actRenameOnly end object mnuContextDelete: TMenuItem Action = actDelete end object mnuContextLine2: TMenuItem Caption = '-' end object mnuContextFileProperties: TMenuItem Action = actFileProperties end end object pmColumnsMenu: TPopupMenu left = 344 top = 144 object MenuItem2: TMenuItem Caption = '-' end end object pmSplitterPercent: TPopupMenu left = 312 top = 96 object mi2080: TMenuItem Tag = 20 Caption = '&20/80' OnClick = mnuSplitterPercentClick end object mi3070: TMenuItem Tag = 30 Caption = '&30/70' OnClick = mnuSplitterPercentClick end object mi4060: TMenuItem Tag = 40 Caption = '&40/60' OnClick = mnuSplitterPercentClick end object mi5050: TMenuItem Tag = 50 Caption = '&50/50' OnClick = mnuSplitterPercentClick end object mi6040: TMenuItem Tag = 60 Caption = '&60/40' OnClick = mnuSplitterPercentClick end object mi7030: TMenuItem Tag = 70 Caption = '&70/30' OnClick = mnuSplitterPercentClick end object mi8020: TMenuItem Tag = 80 Caption = '&80/20' OnClick = mnuSplitterPercentClick end end object pmDropMenu: TPopupMenu left = 384 top = 72 object miCopy: TMenuItem Caption = 'Copy...' OnClick = mnuDropClick end object miMove: TMenuItem Caption = 'Move...' OnClick = mnuDropClick end object miHardLink: TMenuItem Caption = 'Create link...' OnClick = mnuDropClick end object miSymLink: TMenuItem Caption = 'Create symlink...' OnClick = mnuDropClick end object miLine12: TMenuItem Caption = '-' end object miCancel: TMenuItem Caption = 'Cancel' OnClick = mnuDropClick end end object MainTrayIcon: TTrayIcon PopUpMenu = pmTrayIconMenu Icon.Data = { 267D000000000100040010100000010020006804000046000000202000000100 2000A8100000AE0400003030000001002000A825000056150000404000000100 200028420000FE3A000028000000100000002000000001002000000000004004 00000000000000000000000000000000000000000000BCA3A51A8182BB517E82 C1586E72B94F6D70B64F6C6DB34F6B6BB14F6A68AE4F6966AB4F6764A84F736D AB57837CB1677A72AB607B6D9E3EFEEDD506B7A4B60D4F6BDAE62653E6FE234B DEFE2046D7FE1D3FD1FE1A39CAFE1834C4FE142EBEFE1228B8FE0F23B2FE0D1C ABFE0A17A4FF06109EFE050C97FE594F997BCECFD296BEC6DBFEB1BAD9FE889A D9FF2F52D7FF193ED2FF1939CCFF1634C6FF132DBFFF1127B9FF0E22B3FF0314 AAFF444EB3FF9295C4FFB1B2CCFFC2C2CFF7D1D0D0ABD7D7D5FFD6D6D5FFD6D6 D5FFD9D9D4FF4963D0FF1738CCFF1634C6FF132DBFFF1127B9FF0E22B3FF848B C5FFDBDBD7FFD6D6D5FFD7D7D6FED7D7D6FFAFB5D15A6A87E1FB8B9DD6FFD9D7 D2FFD3D3D3FFD1D1D2FF3F58CBFF1634C6FF132DBFFF0B22B8FF9299C8FFD7D6 D4FFD3D3D3FFC1C2CEFF5D62B1FF6868B0D69AA7E3344B72EDF92C58E9FF375C DDFFBFC2D0FFD0D0D0FFAAB0CAFF0D2DC6FF132DBFFF3245BDFFCECECFFFD3D3 D1FF9A9DC2FF040F9EFF000697FF2B2DA1C3A3ADE1366D8CF0F9577AECFF3E62 E3FF6D83D6FFCECECCFFD7D6CCFF2741C3FF122CBFFF616FC0FFCDCDCCFFC4C4 CAFF0514A5FF0712A0FF070E9AFF3334A3C4A3ADE1366D8CF0F96988EEFF6482 E9FF6F86DEFFCDCCCAFFD1D0CAFF5C6DC7FF213AC4FF8991C4FFCBCBCAFF9EA2 C3FF1C29ADFF222CAAFF2B32A9FF5858B3C4A3ADE1366D8CF0F96888EEFF6684 EAFF7E92E0FFD8D7D5FFDCDBD6FF7686D1FF596CD3FF9DA4CEFFD6D6D6FFB8BB D0FF545EC1FF555DBDFF5359BAFF6B6CBCC4A3ADE1366D8CF0F96888EEFF6583 EAFFAFBAE1FFE5E5E5FFE6E5E1FF596FD7FF5C6FD3FF8690D2FFE5E5E5FFE9E8 E5FF5F69C0FF525ABDFF5157B9FF6B6BBBC498A4E72F6687F1F96887EBFFA7B4 E3FFE6E6E5FFE6E6E6FFA5AFDCFF5D72D8FF5D6FD3FF6371CEFFE0E0E3FFE6E6 E6FFDBDCE1FF7A7FC4FF484EB5FF605FB4C2D9D9DC9CD8DAE1FFEAE8E3FFE7E7 E6FFE7E7E6FFD5D7E2FF677BDBFF5F74D8FF5D6FD3FF5A69CFFF7681CBFFE6E6 E5FFE6E6E6FFEBEBE8FFE6E6E3FFD7D8DEF9E0E0E0ABE8E8E8FFE9E9E8FFEEED E9FFB6BFE0FF677FE0FF6076DCFF5F74D8FF5D6FD3FF5B6BCFFF5866CBFF6F79 C9FFDBDCE0FFEEEDEAFFE9E9E8FEE8E8E8FFCECCD36EAFBDE9FD9BADE7FE768F E6FF5F7AE5FF627BE0FF6176DCFF5F74D8FF5C6FD3FF5B6BCFFF5866CBFF5662 C6FF4F59C0FF777DC4FF9699CBFFB5B2CCDEFFF0D5098283BBCA718EEFFC6683 E8FB6A82E4FB687FE0FB667ADCFB6478D7FB6373D3FB6170CEFB5F6CCBFB5C66 C5FB5660C0FB555CBCFB6A6CBDF9998DB15200000000FFFFFF0399839924917C 962A907B962A8F7B942A8F7A942A8F79942A8E79942A8E78932A8E78922A8F77 922A8F77922A8E76912A9D83921F000000008000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF8001FFFF2800000020000000400000000100 2000000000008010000000000000000000000000000000000000000000000000 000000000000FFFFFF03FFFFFF07FFFFFF0BFFFFFF14FFFFFF09FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF0CFFFFFF1AFFFFFF1CFFFF FF1CFFFFFF17FFFFFF0AFFFFFF04000000000000000000000000000000000000 0000FFFFFF10E1D6D55362456CBA584273D6594374DD584175D3563F73D2563E 72D2553E71D2543D70D2543C70D2543B6ED2533B6ED2533A6DD2533A6DD25338 6BD252396BD252386AD252376AD2513669D253386AD5513262E6513262E85132 61E8503161E4533563CA89729187FFFFFF2BFCFCFC040000000000000000FFFF FF08948BB17F5263C1FF3E66E8FF315DEBFF2C58E7FF2B54E4FF2A51E1FF284E DDFF264BDAFF2448D7FF2345D4FF2242D0FF2140CDFF1F3DCAFF1E39C7FF1C36 C4FF1B33C1FF1A31BEFF192EBBFF172BB7FF1527B3FF1425B1FF1322AEFF121F ABFF101CA8FF141EA5FF191A92FF45357FE4FEF6EE3AFFFFFF0200000000FFFF FF22546BD1F12C5AEBFE2754E8FF224FE4FF224BE1FF2149DEFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0816A5FF0613 A2FF040F9FFF010A9BFF020A98FF0B139DFF453075C7FFFFFF0ECACACA4EDBDB DBE7C5C9D8FFC0C5D7FFB7BED6FF8598D7FF395DDCFF1842DFFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0615A5FF000C A0FF434BACFF9395C1FFB7B8CAFFBDBECFFFC7C6D1FDD6D6D6E3C8C8C858D7D7 D7FFD7D7D7FFD7D7D7FFD8D8D7FFDCDBD8FFE1DED5FFB3BAD4FF5873D6FF1940 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF081AABFF0F1DA8FF7077BCFFCECE D4FFE2E2DBFFDADAD8FFD8D8D7FFD7D7D7FFD7D7D7FFD4D4D4FFC8C8C858D5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD7D6D6FF9FA9 D1FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0B1FB0FF2D3BB0FFD7D8D9FFD6D6D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD3D3D3FFC7C7C758D3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD8D7 D4FFBBBFD2FF1F40CFFF193ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0B20B3FF5662B9FFD4D4D5FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD2D2D2FFC8C8C84BD1CF D0E9BBC3D9FFBDC2D4FFCCCDD1FFD8D7D3FFD4D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFB1B6CCFF193ACBFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0D24B6FF2E3FB6FFD3D4D5FFD2D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFD8D8D5FFC2C2CEFFB4B5CAFFB6B7CAFDD3D3D2DBFFFFFF05BAA4 AD75426DF1FF3461EBFF2E5AE8FF5874D4FFCECFD1FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD3D2D2FF8491CAFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0A21B4FFCECFD2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3 D2FFAAACC6FF1D259FFF070F9AFF030996FF181B9CF4FAEEE322FFFFFF04B9A2 AD734B75F2FF3B66ECFF315CE8FF2753E6FF2750DEFF96A3D1FFD1D1D0FFD0D0 D0FFD0D0D0FFD0D0D0FFCDCDCDFF2240C7FF1534C6FF1431C3FF132EC0FF112B BDFF1027BAFF737EC3FFD3D3D1FFD0D0D0FFD0D0D0FFD0D0D0FFD7D6D1FF5961 B3FF000B9DFF020C9CFF030B99FF000695FF161A9BF4FFF4E71FFFFFFF04B7A1 AD735F84F3FF4971EDFF3C65E9FF325BE5FF2B54E2FF2049DEFFB5BACEFFD0CF CEFFCECECEFFCECECEFFD2D2CFFF848FC1FF1130C7FF1431C3FF132EC0FF112B BDFF0F26B9FFB6B9CBFFCECECEFFCECECEFFCECECEFFD0CFCFFF6067B4FF0411 A2FF05109FFF030D9CFF030B99FF010795FF171A9BF4FFF4E71FFFFFFF04B7A0 AC736D8FF5FF6384EFFF5074EBFF4268E7FF365DE3FF2E55E0FF3256DAFFC8C9 CCFFCDCDCDFFCDCDCDFFCDCDCDFFC4C4C6FF1C39C5FF1532C3FF142FC0FF112A BDFF273BB8FFD4D3CDFFCDCDCDFFCDCDCDFFCECDCDFFBABBC6FF0412A4FF0714 A2FF06119FFF050E9CFF040C99FF030896FF191D9CF4FFF3E71FFFFFFF04B7A0 AC736D90F5FF6A8AF0FF6887EEFF5D7EEAFF4E71E6FF4164E2FF375ADDFFA7B0 D0FFCCCCCCFFCDCDCDFFCDCDCDFFCCCCCDFF364EC3FF1733C3FF152FC0FF1029 BDFF6A75BCFFD2D1CEFFCDCDCDFFCDCDCDFFD3D3CEFF444EAFFF0715A6FF0915 A4FF0914A0FF09129EFF0A119BFF0A1099FF2226A0F4FDF1E61FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF617EE7FF5372E3FF909D D3FFCCCCCAFFCACACAFFCACACAFFCACACAFF4B60C5FF213BC5FF1D37C2FF152E BFFF979DC1FFCDCDCBFFCACACAFFCACACAFFCCCCCAFF1626ACFF1220A9FF131F A7FF141EA5FF161FA2FF1920A2FF1D23A1FF3639A8F4F8ECE41FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FF94A1 D6FFCCCCCAFFCACACAFFCACACAFFCACACAFF6778CBFF3850CCFF324AC8FF293F C4FFB0B3C5FFCCCBCBFFCACACAFFCACACAFFC1C2C9FF2A38B4FF2935B1FF2C36 B0FF3039AFFF353DAFFF3D44B0FF4448B1FF595CB7F4EFE3E01FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF647FE5FF9EA9 D6FFD3D3D2FFD2D2D2FFD2D2D2FFD1D2D2FF7988D1FF5C70D5FF586BD2FF5163 D0FFADB0C5FFD4D3D2FFD2D2D2FFD2D2D2FFCBCCCFFF515CC1FF505AC0FF525B BEFF535BBDFF535ABBFF5257B9FF5054B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FFBAC0 D9FFD9D9D9FFD9D9D9FFD9D9D9FFD9D9D9FF7182D3FF5D71D6FF5D6FD3FF596B D2FF989EC6FFDDDCDAFFD9D9D9FFD9D9D9FFDDDCD9FF656FC2FF545EC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6781E3FFDBDC DEFFE2E2E2FFE2E2E2FFE2E2E2FFDDDDDDFF6175D5FF5D71D6FF5D6FD3FF5A6C D1FF737EC8FFE5E5E1FFE2E2E2FFE2E2E2FFE4E4E3FFB4B6CEFF4E59C0FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF637FE8FFB5BDD6FFE8E8 E7FFE6E6E6FFE6E6E6FFE8E8E7FFB5BAD4FF5B71D8FF5D71D6FF5D6FD3FF5B6D D1FF5A69CFFFD7D8DBFFE6E6E6FFE6E6E6FFE5E5E5FFEAE9E8FF737BC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6180EBFFA4B0DCFFE6E6E5FFE5E5 E6FFE6E6E6FFE6E6E6FFE7E6E3FF687BD7FF5E74D8FF5D71D6FF5D6FD3FF5B6D D1FF5B6ACFFFA6ACD1FFE7E7E6FFE5E5E5FFE6E6E6FFE5E5E5FFDDDEE1FF5E66 BAFF5159BDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EFE3E11FFFFFFF01B29F BC6E6A8DF6FF6586F1FF6584EDFF8097E4FFBDC4DDFFEBEAE5FFE5E5E5FFE6E6 E6FFE5E5E5FFE7E7E6FFB3BADAFF5F74DBFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF6270C9FFE2E1DFFFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E5 E4FF9296C9FF5D62B8FF4B51B6FF4A4FB4FF595BB8F4D3B9BA1BCDCDCC3CD2CF D6CFB5C0E0FFC2C8DCFFE0E0DFFFE7E7E6FFE6E6E5FFE6E6E6FFE5E5E5FFE5E5 E5FFE6E6E6FFDFDFDFFF6277D8FF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5968CDFF7681C9FFE5E5E4FFE5E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFEAE9E8FFD2D3D7FFB6B7CFFFB0B0CEFBD5D4D4B3D2D2D259E6E6 E6FFE8E8E6FEE8E7E7FFE7E7E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E7FFE1E1E3FF7085DAFF6076DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF9299CBFFEEEEE8FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8E7FFE8E8E7FFE2E2E2FFD2D2D258E6E6 E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE9E9E7FFD3D6 E0FF6D83D8FF6179DEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5360C9FF8B92C9FFE1E1E3FFE9E9E8FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE2E2E2FFD2D2D258E7E7 E7FFE8E8E8FFE8E8E8FFE7E7E7FFE7E7E7FFE8E8E8FFEAEAE6FF9BA8D8FF647E E2FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5E68C4FFC0C2D3FFECEC EBFFE8E8E8FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE3E3E3FFCECECE57E1E1 E1FFE1E1E3FFDEDFE0FFCDD2E1FFB5BFE2FF93A6E4FF6C86E3FF627DE6FF647E E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5660C4FF515BC0FF6B72 C1FF9498CAFFB8BAD2FFD1D1DAFFDEDFDFFEE1E1E2FFDBDBDBFC00000000EFE3 E3386779D2FF6385F2FE6485F0FF6585EDFF6684EAFF6682E8FF647FE5FF647D E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5761C4FF555FC1FF535C BFFF525ABDFF4F55BAFF4B51B7FF494FB7FF55468DEAFFFFFF0900000000FFFF FF1D837DAED37395F7FF6786EFFE6786ECFF6684EAFF6581E8FF647FE5FF637D E3FF627CE0FF6179DEFF6077DCFF5F74DAFF5E74D8FF5D71D6FF5C6ED3FF5B6D D1FF5B6ACEFF5969CDFF5867CBFF5764C9FF5662C5FF5761C4FF555FC1FF535C BFFF535BBDFF5157BAFF4E53B7FE6562ADFFA18DA574FFFFFF0400000000F6F5 F604CFC0C3428D85AFC27C84CAF46874C6FF6874C5FF6A74C4FF6C75C2FF6C74 C2FF6C73BFFF6B71BEFF6A6FBCFF696EBBFF696DB9FF686BB8FF676AB6FF6669 B5FF6667B3FF6566B2FF6464B1FF6462AEFF6261ACFF5C5AA9FF5B58A7FF5A57 A6FF5B56A4FF655EA5FF7F76ABEF95819C93FFFFFF1300000000000000000000 0000FBFAFB02FFFFFF11FFFFFF2AFFFFF937D4C5C340D4C5C340D4C5C340D4C5 C340D4C5C340D5C6C340D5C6C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6 C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6C540D5C6C440D5C7C540D5C7 C540D5C6C440EBE2DF3BFFFFFF2CFFFFFF0E0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000E0000007C000 0001800000008000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000800000008000000080000001C0000003FFFFFFFF280000003000 0000600000000100200000000000802500000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF01FFFFFF03FFFF FF04FFFFFF07FFFFFF0BFFFFFF08FFFFFF04FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF05FFFFFF0BFFFFFF0FFFFFFF10FFFFFF10FFFFFF10FFFF FF0EFFFFFF09FFFFFF04FFFFFF02000000000000000000000000000000000000 0000000000000000000000000000FFFFFF01FFFFFF0AF0EBEC1FD4CAD332CCC3 D03BD4CDD947D9D3DD53D4CDD948CCC4D23BCAC1D039CAC1D039CAC1D039C9C1 D039C9C1D039C9C1CF39C9C0D039C9C1CF39C9C0CF39C9C0CF39C9C0CF39C9C0 CF39C9C0CF39C9C0CE39C9C0CE39C8C0CE39C9BFCE39C9BFCE39C9BFCE39C9BF CE39C9C0CE3ACEC6D340D8D1DB53DBD4DD61DCD5DE64DCD5DE64DCD5DE63DAD2 DC5DD3CBD64BCDC4D039D7CFD829FBFAF916FFFFFF0700000000000000000000 00000000000000000000FFFFFF02FFFFFE12D8CFD63F9B8CA88B675687CC5243 81E7514688EF504586F2504588EE4F4487EB4E4286EB4E4285EB4D4185EB4C40 84EB4C3F83EB4B3F82EB4B3E82EB4B3D80EB4B3C7FEB4A3C7FEB4A3B7EEB4A3A 7DEB49397CEB49397CEB49387AEB48387AEB48377AEB483679EB483578EB4835 77EB473476EB473476EC473274F2442C6CFA442C6CFA442C6BFA432B6AFB432A 6AFA442D6CF04B3370DE675284B6A394AE76E1D9DE37FFFFFF0EFFFFFF020000 00000000000000000000FFFFFF0BD1CAD545776FA3BB5157ABFF4F6EDEFF436C F0FF3963EEFF3661EBFF345EE9FF345BE7FF3359E4FF3158E2FF3056E0FF2F54 DEFF2E51DBFF2D4FDAFF2C4ED8FF2C4BD6FF2A49D3FF2A48D1FF2947D0FF2844 CDFF2742CBFF2640CAFF253FC8FF253CC5FF233BC3FF2239C2FF2237BFFF2135 BDFF2033BBFF1F31B9FF1E2FB7FF1D2EB5FF1C2CB4FF1B2AB1FF1B28AFFF1926 ADFF1C27ADFF232BA8FF292894FF362577FF715C8AADDAD1D83EFFFFFF0C0000 000000000000FFFFFF02DEDAE7237B7BB79D4D64CCFF3B6AF5FF2655EAFE2552 E6FF224FE3FF204CE1FF2049DFFF1F47DDFF1E45DBFF1C42D8FF1B41D5FF193F D3FF183DD1FF173BCFFF1638CDFF1636CBFF1534C9FF1433C6FF1331C4FF122F C2FF112DC0FF102ABEFF0F28BCFF0F26B9FF0E25B7FF0D23B5FF0B21B3FF0A1F B1FF091CAFFF081AACFF0818A9FF0716A7FF0615A5FF0513A3FF0411A1FF030E 9FFF010C9CFF00099AFF000699FE09129FFF271F83FF7664939CEDE9F024FFFF FF0100000000BAB9B309B2B6D9474D5FC2F14370F4FF2957EAFE2452E9FF1D4C E6FF1D4BE4FF1F4AE2FF214ADFFF2149DDFF1F46DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0817A6FF0715A4FF0612A2FF010D 9FFF00079CFF000298FF000597FF000695FE09119CFF2C1F7AEFC4C1CF4DB0B0 AF0CB0B0B016D4D4D4A5D1D2DABD9DA8D5FF98A9E0FF92A4DCFF899CDCFF758D DCFF5876DBFF355ADDFF1B46DFFF1A44DEFF1E45DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0716A6FF000EA2FF000C9FFF1E28 A3FF464DAEFF6469B5FF787CB9FF8285BCFF8184BBFE8E8BB7FFD3D3D6C4D1D1 D1A4B1B1B125D5D5D5FFD9D9D9FFDDDCD8FEDEDCD7FEDDDBD5FFDCDBD5FFD4D5 D6FFC4C8D7FFAEB7D7FF8A9BD7FF4C6AD6FF1B43DAFF1A41D8FF1C43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0414A7FF0615A4FF3F49ADFF8489C1FFABAE CBFFC2C3D1FFD4D5D5FFDDDDD8FFDFDFD9FFE0E0DBFEE0E1DCFEDADADAFFD4D4 D4FFB0B0B023D4D4D4FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD8D7 D7FFD9D9D7FFDBDAD7FFD5D5D5FFC3C8D7FF97A4D4FF3858D3FF173ED6FF1B40 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0515A9FF2C38ACFF969AC6FFC5C6D3FFD7D7D6FFDDDC D9FFDAD9D8FFD8D8D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD4D4 D4FFB0B0B023D3D3D3FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD8D8D6FFD4D5D5FFC3C6D5FF687DCFFF183D D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF091AABFF636BB9FFC6C8D4FFD5D5D5FFD9D9D7FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD3D3 D3FFB0B0B023D2D2D2FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D5D5FFD2D3D6FF8895 CCFF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0C20 B2FF0C1FAFFF888EC1FFD6D6D8FFD6D6D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD2D2 D2FFB0B0B023D2D2D2FFD4D4D4FFD3D3D3FFD3D3D3FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D3FFD6D6 D6FF99A3CBFF1438CFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0A1F B0FF989DC4FFD8D8D8FFD4D4D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4D4FFD1D1 D1FFB0B0B023D4D4D4FFD5D5D5FDD3D4D6FFD3D3D5FFD1D2D3FFD2D3D3FFD3D3 D3FFD4D4D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D5FF818EC7FF1436CDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0A20B3FF828A C0FFDAD9D8FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4 D3FFD4D4D4FFD3D3D3FFD2D2D3FFD3D3D4FFD2D3D4FFD2D2D4FFD5D5D5FCD4D4 D4FBB5B5B50CC5C4C469AAA6BDB46989E5FF6583E0FF728AD8FF909FD0FFB6BC CFFFCBCCD2FFD1D2D2FFD3D3D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD1D1D3FF5B6EC6FF1434CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0B21B5FF5864BAFFD8D8 D7FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2 D2FFCDCED3FFB4B5CBFF8084BAFF585CACFF3F43A3FF4144A3FFB1ACBF9DC1C1 C15B00000000FDF6F71A9B93BD914470F4FF3361EEFF2C5BECFF2453EBFF2651 E3FF5673D4FFA2ADD1FFCBCDD2FFD2D2D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFD2D2D1FFBFC2CDFF2A46C7FF1434C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0D25B8FF2135B6FFC6C8D2FFD1D1 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD2D2D2FFCDCED1FF9FA2 C5FF3F46A8FF000899FF000197FF000395FF000193FF060B97FFA59AC26CFFFF FF0AFFFFFF01F0EAEC209E96BD934F78F3FF3E69EEFF3763EBFF315CE9FF2C57 E7FF214EE6FF234EDEFF7389D5FFC1C4D0FFD1D1D0FFD0D0D0FFD0D0D0FFD0D0 D0FFD0D0D0FFD1D0D0FFCECED0FF8792C5FF1232C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0921B7FF8B93C5FFD0D0D1FFD0D0 D0FFD0D0D0FFD0D0D0FFD0D0D0FFD0D0D0FFD2D2D1FFC4C5CDFF6A71B6FF0814 9EFF00069CFF020C9BFF030B99FF020997FF000694FF0A0F98FFA79CC270F9F8 F910FFFFFF01F0EAEC20A098BD935A81F3FF4770EEFF3F68ECFF3861E9FF315C E7FF2D57E4FF2751E3FF1C47DFFF667ED3FFC3C6CFFFD0D0CFFFCFCFCFFFCFCF CFFFCFCFCFFFCFCFCFFFD1D0CFFFBBBECBFF364FC4FF1232C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF0D25BAFF2F41B8FFC5C6CFFFD0D0CFFFCFCF CFFFCFCFCFFFCFCFCFFFCFCFCFFFD1D1CFFFC4C5CCFF5E65B4FF000D9FFF020E 9FFF040F9DFF030C9BFF020B99FF020997FF000694FF0B1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39ABD93698CF5FF557BEFFF4A71EDFF4169EAFF3962 E8FF335BE5FF2E56E2FF2951E1FF1D46DDFF7D8FD1FFCBCCCFFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFC7C8CCFF7582C2FF0C2DC8FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF061EB9FF7A83C1FFCACBCEFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFCACACEFF747AB8FF020FA1FF0411A2FF0511 A0FF040F9DFF030D9BFF030B99FF020997FF000794FF0C1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F5FF6587F1FF5B7EEEFF4F74EBFF446B E9FF3D63E6FF365CE3FF3057E1FF2950DFFF2E52D9FFACB3CEFFCCCCCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECDCCFF9EA5C4FF1A37C5FF1432C5FF1531 C3FF132FC0FF122CBEFF112ABCFF0F27B8FFA9ADC7FFCECECDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFA7AAC4FF1421A6FF0412A3FF0713A2FF0611 9FFF050F9DFF040E9BFF040C9AFF040A98FF020895FF0D1299FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8BF2FF6788F0FF6182EEFF5779 EBFF4C6FE8FF4267E5FF3B60E2FF355AE0FF284EDEFF6C81CFFFCACBCFFFCDCD CCFFCCCCCCFFCCCCCCFFCCCCCCFFCECECCFFB2B6C8FF3A52C1FF1230C5FF1631 C3FF152FC0FF132DBEFF0E27BCFF3547B8FFB9BCCAFFCECECDFFCCCCCCFFCCCC CCFFCCCCCCFFCDCDCDFFC5C6CBFF6269B4FF000EA5FF0916A4FF0814A2FF0712 A0FF06109EFF060F9CFF060E9AFF070D99FF060B96FF11179BFFA89DC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6685 EDFF6080EAFF5778E8FF4C6EE5FF4465E2FF3B5DDFFF3E5ED9FFC7C9CEFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECECDFFBDBFC9FF586AC0FF1230C6FF1733 C3FF1631C0FF152EBFFF0D26BDFF5664BBFFBFC1CAFFCECDCDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFBDBECAFF1E2BA9FF0917A7FF0A17A6FF0A16A3FF0A15 A1FF0A149FFF0B139EFF0B139CFF0C129BFF0C1299FF191E9EFFA99EC370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6988EFFF6887 EEFF6786EBFF6583EAFF617FE8FF5A78E6FF5170E2FF4163E0FFB1B7CEFFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC1C2C8FF6B7AC1FF1835C8FF1E39 C4FF1C36C2FF1A33C0FF0F29BDFF717DBEFFC4C4C9FFCCCBCBFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFABAFC4FF0617A9FF101EA9FF101DA7FF111DA5FF111C A4FF121BA3FF131CA1FF151CA0FF181E9FFF191F9FFF272BA4FFABA0C370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF637EE5FF5B77E4FFA7B0CFFFC8C8 C9FFC9C9C9FFC9C9C9FFC9C9C9FFC9C9C9FFC5C5C6FF838DC3FF243FCBFF2942 C8FF263FC5FF243CC3FF1831C1FF838BC0FFC5C5C7FFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC7C7C8FF8F95BFFF1221ADFF1B29ACFF1B28ABFF1D28AAFF1E29 A9FF202AA8FF232BA7FF262DA7FF2A31A8FF2F34A8FF3F44AEFFAEA3C570F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607BE5FFAAB1D1FFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC9C9CAFF8F99C8FF3952D0FF3D54 CCFF3950CAFF364CC7FF2A40C5FF949AC5FFCACACBFFCCCCCBFFCBCBCBFFCBCB CBFFCBCBCBFFC9CACBFF9398C2FF2533B4FF2E3BB4FF303BB3FF323CB2FF353E B2FF3941B2FF3D45B2FF4349B3FF484DB4FF4B4FB4FF5659B8FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607AE5FFB1B7D2FFD0D0 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFCACBCEFF919BCAFF566BD7FF596C D4FF5668D2FF5265D0FF495CCEFF959CC6FFCDCDCEFFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFCFCFD0FF9EA2C6FF444FBEFF4C57BFFF4E58BDFF5058BCFF5159 BCFF5259BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF617BE4FFC6C9D2FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D6D5FFCCCDD2FF8D99CEFF596FD8FF5D71 D6FF5D70D3FF5C6ED2FF5669D2FF939BC8FFCFCFD2FFD6D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFBABCCEFF505BC3FF5660C2FF545EC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF637FE7FF7689D8FFD7D8DBFFDBDB DBFFDBDBDBFFDBDBDBFFDBDBDBFFDCDCDBFFCBCDD7FF7E8CCFFF5A70D8FF5D71 D6FF5D6FD3FF5C6ED2FF5769D2FF818AC7FFCFD0D7FFDBDBDBFFDBDBDBFFDBDB DBFFDBDBDBFFDBDBDAFFCDCED6FF5F69C0FF545EC2FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF607CE6FFA5AFD7FFDEDEE0FFE0E0 E0FFE0E0E0FFE0E0E0FFE0E0E0FFE2E2E0FFC7CADAFF6A7BD0FF5C71D8FF5D71 D6FF5D6FD3FF5C6ED2FF596BD2FF6D78C7FFCDCED8FFE1E1E0FFE0E0E0FFE0E0 E0FFE0E0E0FFE1E1E0FFDADADEFF8C92C6FF4F5AC1FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6683E9FF627FE8FF7389DDFFD6D8DFFFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E3FFB7BDD7FF5A70D7FF5E72D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6CD1FF5969CDFFBDC1D2FFE4E4E4FFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFC6C8D7FF5B65BFFF525CC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6381EAFF6781E2FFB5BDDAFFE4E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFDDDEE3FF919CD3FF5970D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5C6DD1FF5566D0FF969DC8FFE0E1E3FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE1E2E4FF9EA3CAFF525BBDFF525BBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6282EBFF6783E4FFA6B1DCFFE1E2E3FFE6E6E5FFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E5FFCDD1DEFF6679D5FF5E73D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5A6ACFFF6572C8FFCFD1DAFFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E6FFE7E7E6FFDBDCE0FF8F95C8FF515ABBFF5058 BDFF535ABBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB2A8C86FF9F8 F910FFFFFF01EFEAED20A39BC1937092F5FF6A8AF2FF6989F0FF6888EFFF6686 EFFF6081ECFF758DE1FFB1BADEFFE0E1E3FFE6E6E5FFE6E6E6FFE5E5E5FFE6E6 E6FFE5E5E5FFE6E6E6FFE2E3E5FF99A3D4FF5A70DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5666CDFF99A0C9FFE4E4E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFDBDCE0FF9EA2CBFF5D64 BBFF4B52BAFF5056BAFF5157B9FF5156B7FF4F53B5FF575BB9FFA596B775F7F5 F71000000000FDF6FF159D99CE8E6B8FF6FF6487F4FF6284F2FF6283EEFF768F E3FFA1AFDDFFCCD0E0FFE4E4E4FFE7E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE5E5E5FFC5C8D9FF6277D9FF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5A6ACEFF5F6EC9FFC9CBD5FFE6E6 E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFE2E2E3FFC3C5 D7FF9093C3FF5E63B5FF4A50B5FF484EB5FF484CB4FF5256B8FF9580A473FFFF FF05B4B4B413D7D6D793C3C2D6C9A3B4E5FFA7B5E0FFB2BCDEFFC5CBDEFFD5D9 E3FFE0E1E4FFE6E6E5FFE6E6E6FFE5E5E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5 E5FFE6E6E6FFDCDDDFFF7687D5FF5E74DCFF6074DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5867CDFF737EC7FFE1E1 E0FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6 E5FFDFDFE3FFD3D3DEFFBEC0D2FFABADCBFF9B9DC7FF9799C8FFC3BDC8BDD4D3 D487B2B2B222E0E0E0FFE4E4E5FCE1E2E5FFE2E3E5FFE3E3E4FFE5E5E5FFE6E6 E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6 E6FFE4E4E2FF8897D4FF5F76DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5867CBFF888F C6FFE8E8E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE3E3E4FFE1E1E3FFE1E1E3FFE4E4E4FBDFDF DFF8B2B2B223E1E1E1FFE7E7E7FFE7E7E6FEE7E7E6FFE7E7E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E7 E5FF8E9CD5FF6079DEFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 C9FF8C93C8FFE8E8E4FFE7E7E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E6FFE7E7E6FFE7E7E6FEE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE6E7E7FFE1E1E2FF8797 D5FF6079E0FF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF888EC5FFE3E3E2FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E7FFE5E5E7FFC9CCDCFF788BDAFF617B E1FF627ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5562C5FF7179C3FFCBCCD9FFE6E6E7FFE8E8E7FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE1E1 E1FFB2B2B223E2E2E2FFE8E8E8FFE8E8E8FEE8E8E8FFE8E8E8FFE8E8E8FFE9E9 E8FFE9E9E8FFE7E7E6FFE1E2E7FFD3D6E3FF99A7D9FF657EE1FF627CE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF545FC4FF5A64C2FF959AC9FFD0D1DCFFE1E1E5FFE7E7 E6FFE9E9E8FFE9E9E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FEE8E8E8FFE2E2 E2FFB2B2B223DFDFDFFFE5E5E5FEE4E5E6FFE5E5E5FEE2E3E4FFDEDFE5FFD9DC E6FFD0D5E5FFBDC6E2FF95A5DEFF6B84E2FF607CE6FF647DE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF555FC3FF505AC1FF5D66BFFF8C91C6FFB6B8 D2FFCACCDBFFD6D6DFFFDCDDE1FFE2E3E4FFE3E4E4FEE5E5E5FFE4E4E4FEDEDE DEFDB1B1B114D7D7D79CD3D1DAC0AAB1D5FFACBAE8FEA5B4E3FF97A9E3FF879C E2FF718BE3FF6180E9FF607FEAFF6480E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF525CC0FF4D56BEFF4F57 BBFF6268BAFF787CBEFF8B8EC3FF9A9DC9FF9B9ECAFEA09CBEFFD5D3D8BAD4D4 D4950000000000000000BBB4CF546367B2FF6D91FCFF6183F1FE6384F0FF6484 EFFF6585ECFF6684EAFF6683E9FF6681E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF545EC0FF545CBFFF535B BDFF5057BBFF4D54B9FF4B51B8FF474DB4FE4E54BBFF50418BF9D5CFE2450000 000000000000FFFFFF06D8D1DA3B7B6E9CCA7B8FE1FF6C8FF6FE6686EFFE6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF647FE6FF647DE4FF637DE2FF627C E0FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5D72D7FF5C70 D5FF5C6FD3FF5B6DD2FF5B6CD1FF5B6ACFFF5A6ACDFF5968CCFF5867CBFF5865 C9FF5764C8FF5663C5FF5661C4FF5660C3FF555FC2FF545EC0FF535CBFFF535B BDFF5259BBFF5056B9FF4D53B7FE585EBEFF6460ADFF7B6895AEE7E2E929FFFF FF0300000000FFFFFF02F8F4F419BBAEBE6A7E77A7E07B89D4FF7C9AF7FF6D8D F4FF6688F1FF6587F0FF6585EFFF6986EDFF6A88ECFF6A86EBFF6A85EAFF6984 E7FF6882E6FF6881E4FF677FE3FF667EE2FF667DE1FF657CDFFF657ADEFF6378 DCFF6377DAFF6276D9FF6275D7FF6273D6FF6172D4FF6071D3FF5F6FD2FF5F6D D0FF5E6CCFFF5C6BCCFF5A67CAFF5561C7FF5460C6FF535FC4FF525DC3FF525C C1FF565FC1FF6269C5FF7279CBFF6F6AADFF776491D3C4B8C650FCFAFA0E0000 00000000000000000000FFFFFF05F9F7F620BFB2C05D978DB2A47973A9DF6F6C ABFC6968AAFF6A68AAFF6967A9FF6B68A8FF6B68A7FF6B67A7FF6B66A7FF6B66 A5FF6A65A4FF6A65A4FF6A63A3FF6963A3FF6862A2FF6862A1FF6861A0FF6860 9FFF675F9EFF675F9EFF675E9DFF675D9CFF665D9CFF665C9BFF655B9AFF655A 99FF645A98FF645997FF635796FF615595FF615494FF605393FF605392FF6052 91FF625392FF65538DFF6F5B8BEA917F9EAEC0B2BF56FEFDFC17FFFFFF020000 0000000000000000000000000000FFFFFF04FFFFFF10DBD1D827C1B6C745C5BE D157B3A8BB62A696AA66A898AB66A797AB66A797AB66A797AA66A797AB66A797 AA66A796AA66A796AA66A796AA66A796AA66A696AA66A696A966A695A966A695 A966A695A966A695A866A695A866A694A866A694A866A694A866A694A866A694 A766A594A766A593A766A594A766A694A766A693A766A593A766A593A666A593 A666A593A665B5A7B95FC1B4C351DDD3D831FFFFFF11FFFFFF03000000000000 00000000000000000000000000000000000000000000FFFFFF02FFFFFF07FFFF FF0AFFFFFA0CF6EFEA0CF7F1EB0CF7F1EB0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1 EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F2EC0CF7F2 EC0CF7F2EC0CF7F2EC0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2 ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F3ED0CF8F3ED0CF8F3EE0CF8F2 ED0CF8F3EE0CFFFFFF0BFFFFFF09FFFFFF05FFFFFF0100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F8000000001FFFFFE00000000007FFFFC00000000001FFFFC00000000001 FFFF800000000000FFFF800000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF800000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF800000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFC00000000001FFFF800000000000FFFF800000000001 FFFFC00000000001FFFFE00000000003FFFFF80000000007FFFFFFFFFFFFFFFF FFFF280000004000000080000000010020000000000000420000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F7F7FA01FBFBFC04FCFCFC05FBFB FD03F6F6F90100000000F7F6FA0100000000F6F6F901F6F6F901F6F6F901F7F6 F901F6F6F901F6F6F901F7F6F901F6F6F901F7F6F901F6F5F901F6F5F901F6F5 F801F6F6F901F6F6F901F6F6F901F5F5F801F6F5F801F6F5F801F6F6F901F6F6 F901F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801FCFCFD04FCFC FD07FDFDFD08FCFCFD08FCFCFD08FDFDFD08FDFDFD08FCFCFC07FCFCFD04F5F4 F701000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FBFA FB01FBFBFC04FCFCFD0EFAF9F914F4F0F117F0EDF01BF4F1F325F4F1F32BF4F1 F324F1EDEF1BEEE9ED16EFEAED16EEEAED16EDE9EC15EFEAED16EDE9EC15EFEB ED16EFEAED16EFEBED16EFEAED16EEEAEC16EFEAED16EFEAED16EFEAED16EFEA ED16EFEAED16EFEAED16EEE9EC16EEEAED16EFEAED16EFEAED16EDE9EC15EFEA ED16EEEAED15EFEBEE16EFEBEE16EFEBED16EFEBEE17F2EEF01BF4F1F327F6F3 F533F5F3F438F5F3F438F5F3F438F5F3F438F5F3F438F4F2F333F4F2F326F4F1 F41AFBF9F913FCFCFC0DFBFBFB05F9F8F9020000000000000000000000000000 0000000000000000000000000000000000000000000000000000FDFDFD02FBFB FC0CF8F7F822E9E5E83ED5C8C95AA289927090748A80977C908A93778A979980 92879073897E8D6F867A8D6F867A8D70867A8D6F867A8D70867A8D70867A8C70 86798D70867A8D7086798D70857A8D70857A8D7085798D70857A8E6F867A8E6F 867A8E6F867A8E70867A8D6F857A8D70867A8D70867A8C6F867A8D7086798D70 857A8C70867A8D7086798D71867A8D71867A8D70867A92768B80977B908E9477 89A094788AA795788BA794778AA794788AA795788AA6917486A194788C8EA48E A275D7CACD58E4DEE53DF4F2F428FBFBFC16FAFAFB0600000000000000000000 00000000000000000000000000000000000000000000FCFCFD02F9F9F912F1EF F234C6BCCB696A4E72C4412B68F63B2E74FD48448DFD484793FE474693FD4645 92FE454391FE454290FE444190FE44408FFE443F8DFE433E8DFE433E8CFE423D 8BFD423C8AFE423B8AFE413B88FD413A87FE413986FE403985FE403785FE3F37 84FE3F3683FE3F3582FE3E3481FE3D3480FE3D3380FE3D337FFE3C327EFD3C31 7DFE3C317CFE3B307BFE3B2F7BFE3B2E7AFD3A2D79FE3A2C79FE3A2B78FD392A 77FE392A77FE392976FE382875FE382874FE382773FE372771FE372672FE2F16 59FD2B0C52FD4A2B63D7AB9CB085E0DAE14DF7F7F921FCFCFC09000000000000 00000000000000000000000000000000000000000000FAFAFB0DEFEDF034A699 B084493B7BEF6C79C9FD4C6EE1FD3E67EAFD355EE8FE325CE6FE3059E4FD2E57 E2FE2E55E1FE2D53DFFE2C52DEFE2B51DCFE2A50DAFE294DD8FE284CD7FE284A D5FD2748D4FE2647D2FE2645D0FD2544CFFE2543CEFE2442CCFE2340CBFE233F C9FE223DC7FE213CC6FE203AC4FE1F38C2FE1F37C1FE1E35BFFE1E34BEFD1D33 BCFE1C31BBFE1B30B9FE1B2EB8FE1A2DB6FD192BB4FE192AB2FE1828B1FD1727 AFFE1726AEFE1625ACFE1523AAFE1522A9FE1420A7FE131FA6FD121DA4FE1923 A6FD1C219EFD34339BFD4C3A7DFD553563CACCC3D055F8F7F921FBFAFB060000 000000000000000000000000000000000000F7F7F904F6F5F71FBFB7CC694946 93F76A8BF0FD315DE9FD2B57E6FE2854E5FE2550E3FE234EE0FF224CDFFE2149 DDFF2047DCFF1F46DAFF1F44D8FF1D43D6FF1D41D4FF1C40D3FF1A3ED1FF1A3D CFFE193BCEFF183ACCFF1839CBFE1737C9FF1736C7FF1635C6FF1533C4FF1532 C3FF1430C1FF132EBFFF122CBDFF112ABBFF1129BAFF1027B8FF0F26B7FE0E25 B5FF0D23B3FF0D22B2FF0C20B0FF0B1FAFFE0B1DACFF0A1BAAFF0A1AA9FE0918 A7FF0817A6FF0816A4FF0614A2FF0613A1FF05119FFF04109EFF040E9CFF030C 9AFE030B99FE000695FE070F9BFC38318AFD4F3265CDDCD6DE4DFAFAFA16F5F5 F70200000000000000000000000000000000FAFBFC0BD8D5E33C4A4592D95B82 F2FD315EEAFD2D59E8FE2A56E6FE2753E5FE2451E3FE234FE1FE214CE0FE2049 DEFE2048DDFE1F47DBFE1E44D9FE1D43D7FE1C42D5FE1C41D4FE1A3FD2FE1A3D D0FE193CCFFE183ACDFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F26B8FE0E25 B6FE0D23B4FE0D22B3FE0C20B1FE0B1FB0FE0B1DADFE0A1BABFE0A1AAAFE0918 A8FE0817A7FE0816A5FE0614A3FE0613A2FE0511A0FE04109FFE040E9DFE030C 9BFE020B9AFE020A98FE010895FE050A96FC302A8EFDA395AF87F3F1F429F8F8 FA05000000000000000000000000B6B6B608E2E2E419C2C4E05D4B69D7F65278 EDFD315EE9FE2E5AE8FE2956E6FF2652E4FD2350E2FF224DE0FF214BDFFD204A DDFF2049DCFF1E46DAFF1E44D9FF1D43D7FF1C42D4FF1C40D3FF193FD1FF1A3D D0FD193BCEFF173ACCFF1839CCFD1736C9FF1735C8FF1534C6FF1533C5FF1532 C4FF132FC2FF122EBFFF112BBDFF112ABBFF1129BAFF1026B8FF0F26B8FD0E24 B5FF0C23B3FF0C22B2FF0B20B0FF0B1FB0FD0A1DACFF091AABFF0A1AAAFD0818 A8FF0817A6FF0816A4FF0614A3FF0613A2FF0511A0FF04109FFF040E9DFF040C 9BFF030C9AFE040C99FF060B97FE060894FE1F229EFD3C2369DFD8D5DB40D2D2 D312B2B2B20300000000A6A6A605BDBDBD60C8C8C872B2B4CDA98597D5FD6B87 DEFE6D87DFFE6985DEFF4A6EE2FE3F65E1FD3860E0FF3158DEFF2850DEFD214A DDFF1F48DDFF1E46DAFF1E44D8FF1D43D6FF1C42D4FF1C40D4FF1A3FD2FF1A3D D0FD193CCFFF183ACDFF1839CCFD1737CAFF1735C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABBFF1128BBFF1027B9FF0F26B8FD0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FD0B1DADFF0A1AABFF0A1AAAFD0817 A8FF0817A7FF0816A5FF0614A3FF0512A1FF0814A0FF111BA0FF1821A2FF2027 A2FF252CA3FF3C42A8FE4F53ABFE4C4FA5FE5052A6FD564D8EFDC8C7C4A7C0C0 C07BB6B6B62D00000000A1A1A10CCFCFCFF7D8D8D8FCD8D8D6FCD8D8D7FED9D8 D6FED8D7D5FED9D8D6FED9D8D6FFD1D4D9FEBEC3D4FFA3ADD0FF7187D2FE3A5E DCFF274EDCFF2148DAFF1D44D9FF1D43D6FF1C42D4FF1B40D4FF1A3FD2FF193C CFFE193BCFFF1839CCFF1838CCFE1737CAFF1736C8FF1535C7FF1433C5FF1432 C4FF1330C1FF132EC0FF122BBEFF1129BCFF1128BBFF1027B9FF0E26B7FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1EB0FE0A1CADFF091BABFF0A1AA9FE0918 A8FF0817A6FF0917A5FF0C19A4FF161DA4FF3840AAFF7E82B9FFACAEC8FFC6C7 D4FFD6D7D6FFD8D8D5FFD8D9D7FFD9D9D8FEDADAD9FEDCDBD9FDD9D9D9FCD8D8 D8FDC0C0C07400000000A1A1A10CCFCFCFF3D6D6D6FCD5D5D5FDD6D6D6FED6D6 D7FED5D5D6FED6D6D7FED4D5D6FED4D5D6FDD5D6D7FED8D9D9FED9D9D7FDC7C9 D0FE8596D2FE4A67D6FE2C4FD7FE1E44D6FE1C42D4FE1C41D3FE1A3FD2FE1A3D D0FD193CCFFE183ACDFE1839CCFD1737CAFE1735C8FE1635C7FE1532C5FE1532 C4FE1430C2FE132EC0FE112CBEFE112ABCFE1129BBFE1027B9FE0F26B8FD0E25 B6FE0D22B4FE0D22B3FE0C20B1FE0B1FB0FD0B1DADFE0A1BABFE0A1AAAFD0919 A8FE0D1CA6FE2530AAFE4B54B2FE9FA3C3FED9D9D8FEDDDDDCFED6D7D7FED5D5 D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D5FDD6D6 D6FDC0C0C07300000000A1A1A10DCFCFCFF5D5D5D5FDD5D5D5FDD6D6D6FED6D6 D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FDD6D6D6FED5D5D5FED5D5D6FDD4D4 D6FED4D5D6FECCCED6FE909DCCFE3C5CD5FE2549D4FE1C41D3FE1A3FD1FE193D D0FD193BCEFE1739CCFE1839CBFD1636CAFE1635C8FE1535C7FE1532C4FE1532 C3FE142FC2FE122DBFFE122BBDFE112ABCFE1128BAFE1027B9FE0F26B8FD0E25 B5FE0D22B4FE0D22B2FE0C20B1FE0B1EAFFD0B1DADFE0A1BABFE0B1BA9FD1826 AAFE4650AFFEACAEC9FED5D6D9FED5D5D7FED5D5D6FED5D5D5FED5D5D5FED5D5 D5FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED5D5D5FED5D5D5FDD5D5 D5FEC0C0C07400000000A1A1A10DCFCFCFF5D4D4D4FED4D4D4FED5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FED5D5D5FFD4D4D4FFD4D4D4FED5D5 D5FFD4D4D4FFD4D3D5FFD5D5D7FFB7BCD0FF6379CFFF294CD2FF1C40D2FF193D CFFE193CCEFF183ACDFF1839CCFE1737CAFF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FE0B1DADFF0E20ABFF2B38ADFE7F84 BEFFCBCCD4FFD7D7D7FFD3D3D4FFD4D4D4FFD5D5D5FFD4D4D4FFD5D5D5FFD4D4 D4FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD4D4D4FFD4D4D4FED4D4 D4FFC0C0C07400000000A1A1A10DCECECEF5D3D3D3FED3D3D3FED4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FED3D3D3FFD3D3D3FFD4D4D4FED4D4 D4FFD4D4D4FFD3D3D4FFD2D2D3FFD3D3D4FFC8CAD4FF8290CBFF3252D1FF1C3F CFFE193CCEFF1739CDFF1839CCFE1737CAFF1736C8FF1635C6FF1532C4FF1532 C3FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0C1FB0FE1324AEFF3B48B3FFA8ACCBFED4D4 D7FFD3D3D4FFD2D2D3FFD3D3D3FFD3D3D3FFD4D4D4FFD3D3D3FFD4D4D4FFD3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FED4D4 D4FFC0C0C07400000000A2A2A20CCDCDCDF4D2D3D2FDD2D2D2FDD3D3D4FED3D3 D4FED3D3D3FED4D4D3FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED4D4D4FED4D4 D4FED4D4D4FED4D4D4FED3D3D3FED2D2D3FED2D2D3FECCCDD3FE939FCEFE3855 CEFE1C3DCEFE183ACCFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F25B8FE0E25 B6FE0D23B4FE0D22B2FE0D21B1FE1426B0FE4955B5FEB3B6CEFED3D4D5FED2D2 D2FED2D2D3FED3D3D3FED3D3D3FED3D3D3FED4D4D4FED3D3D3FED4D4D4FED3D3 D3FED4D4D4FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED3D3D3FED2D2D2FDD3D3 D3FEBFBFBF7300000000A2A2A20CCECECEF3D3D3D3FDD2D2D2FDD3D3D3FED3D3 D3FED3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD2D3D4FFCFD0D2FF9AA3 CBFE3552CCFF193BCDFF1839CBFE1736CAFF1735C7FF1635C6FF1533C4FF1531 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0E22B3FF1226B2FF4956B8FEB5B8CEFFD2D2D3FFD1D2D2FED3D3 D3FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD4D4D4FFD2D2 D2FFD3D3D3FFD3D3D3FFD2D2D3FFD2D2D3FFD2D2D3FED2D2D2FED2D2D2FDD3D3 D3FDBFBFBF7300000000A2A2A20CCCCCCCEFD1D1D1F9CFCFCFFCCFD0D3FECFD0 D3FED0D0D0FFD3D2D1FFD4D4D3FFD3D3D4FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2D2FFD1D1D2FFC7C9 CFFE8893C9FF2947CCFF193ACBFE1737C9FF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBDFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D24B4FF1124B2FF3C4BB6FFAAAECFFED1D2D5FFD2D2D2FFD3D3D3FED2D2 D2FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD2D2D2FFD2D2D3FFD2D2 D2FFD4D4D4FFD5D5D4FFD4D4D2FFCECED1FFCCCCD0FECDCDD0FED0D0D0FAD1D1 D1F9BEBEBE7100000000A4A4A408C7C7C7A9CFD0CFC0B7B4C0E8A1B0DAFE9EAD D9FEA2ADD2FEACB5D1FEB9BED1FEC6C8D0FECECED0FED0D1D1FED1D1D2FED1D1 D1FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1 D2FEC1C4D0FE7181C7FE203FCAFE1837C9FE1736C8FE1635C7FE1433C5FE1432 C4FE1430C2FE132EC0FE122CBEFE1129BCFE1129BAFE1027B8FE0F26B7FE0E25 B6FE1025B5FE2B3CB4FE959BC6FECCCDD1FED0D0D1FED1D1D1FED1D1D1FED2D2 D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1D1FED1D1D2FED2D2D3FECECE D1FEC0C1CEFEAFB0C9FEA4A4C3FE9292BDFE8C8CBAFE9293BCFECAC8CBCDCDCC CDB4BDBDBD4F0000000000000000EFF0F109ECEAF03B7C6C9CBB3E6BF1FE3361 ECFE2F5DEBFF335CE2FF516FD3FF7D8FCDFE9EAAD1FFB3BAD1FFCCCDCFFED2D2 D2FFD1D1D1FFD2D2D1FFD1D1D1FFD1D1D1FFD2D2D2FFD1D1D1FFD1D1D1FFD0D0 D0FED0D0D0FFABB1CDFF4B61C7FE1A39C9FF1736C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B7FE0F26 B6FF182CB5FF7780C0FFC5C7D0FFD1D1D3FED1D1D1FFD1D1D1FFD1D1D1FED1D1 D1FFD2D2D2FFD1D1D1FFD1D1D2FFD0D0D1FFD3D3D3FFC4C5CDFFACAECAFF9194 C1FF5458A9FF1B219AFF030695FF020494FF020392FE15199CFEC3B5C864F1F0 F113C9C9CA010000000000000000F4F4F50EEDEBF03F7E709DBC4570F0FD3A66 ECFD3562EAFE315DE8FE2D59E7FE2955E5FD3259DEFE5471D6FE96A3CEFDC1C4 D2FED0D0D1FED0D0D1FED0D0D0FED1D1D1FED1D1D1FED1D1D1FED1D1D1FED0D0 D0FDCFD0D0FECDCDCFFE959FC9FD2F4AC6FE1836C8FE1635C7FE1533C4FE1532 C3FE142FC2FE122DBFFE122CBDFE112ABBFE1128BBFE1027B9FE1027B8FD1027 B6FE4555B9FEABB0CAFED0D0D1FECFCFD0FDD1D1D1FED0D0D0FED0D0D0FDD1D1 D1FED1D1D1FED0D0D0FED0D0D1FECDCED0FEBABCCCFE777BB6FE2C34A3FE0811 9BFE020A99FE020A98FE020A96FE020895FE010593FD171C9DFDC3B5C868F3F2 F318D7D7DA020000000000000000FCFDFD0BEFECF13D7E6F9CBB4A73F1FD3F69 EDFD3864ECFF345EE9FF305BE7FF2D57E5FD2A55E3FF2651E2FF2E55DDFD7388 CFFFB2B9CFFFCFCECEFFCFCFCFFFD0D0CFFFCFCFCFFFD0D0D0FFCFCFCFFFCFCF CFFDCFCFCFFFCECED0FFB8BBCBFD6173C5FF1837C8FF1735C6FF1533C5FF1532 C4FF1430C1FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF1128B8FD1F34 B7FF9097C6FFCECFD0FFCECECFFFD0D0CFFDCFCFCFFFD0D0D0FFCFCFCFFDCFCF D0FFCFCFD0FFCECECFFFCCCCCFFFA3A6C7FF4E55ACFF0D169FFF050F9DFF040D 9BFF030C9AFF010A98FF010795FF000694FF000392FD161B9CFDC3B4C766F7F6 F715000000000000000000000000FCFDFD0CEFEDF23E80709DBC527AF2FD466E EEFD3F68EBFF3862EAFF345EE8FF2F5AE6FD2B56E3FF2853E1FF2851E0FD2C53 DCFF5A75D1FFB4BACDFFCECECFFFCECFCEFFCFCFCFFFCFCFCFFFCFCFCFFFCECE CEFDCECFCFFFCDCDCEFFCCCDCCFD949DC6FF2E49C5FF1635C6FF1533C5FF1431 C4FF1330C1FF132EC0FF112BBEFF112ABCFF1129BBFF1128B9FF0F26B8FD4E5C BCFFAEB2CAFFCECECFFFCECECEFFCFCFCFFDCFCFCFFFCFCFCFFFCECECEFDCFCF CFFFCDCDCFFFCBCBCEFFA2A4C4FF323BA9FF0A16A1FF06119FFF040E9DFF030C 9BFF010A99FF010998FF000896FF010795FF000493FD171C9DFDC3B5C867F8F6 F815F4F4F9010000000000000000FDFDFE0BEFEDF13E81729DBB5C82F2FD4E75 EEFD466FECFF3F69EAFF3962E8FF345EE7FD2F59E4FF2B55E2FF2952E0FD2750 DEFF2C52DCFF627BD2FFBEC1CDFFCDCECEFFCECECEFFCECECEFFCECECEFFCECE CEFDCECECEFFCDCDCDFFCDCECEFDB8BBC8FF6273C1FF1837C6FF1633C5FF1532 C3FF142FC1FF132EBFFF122CBDFF112ABBFF1129BAFF1129B9FF172CB8FD7D86 C2FFC6C7CBFFCCCDCDFFCDCDCEFFCECECDFDCECECEFFCECECEFFCDCDCDFDCDCD CDFFCCCCCFFFA6A9C4FF3A43ABFF0C18A2FF0611A0FF04109EFF030D9DFF030C 9BFF020B9AFF010A98FF010896FF010795FF000593FD171C9DFDC3B4C866F8F6 F816F4F4FA010000000000000000FDFDFE0CF0EDF23E83739DBC668AF3FE5A7E EFFE5076EDFF486FEBFF4168E9FF3B63E7FE355EE5FF3159E3FF2D55E1FE2A52 DFFF274FDDFF3255D9FF7C8ECCFFC8CACEFFCCCCCCFFCDCDCDFFCDCDCDFFCDCD CDFECDCDCDFFCDCDCDFFCCCCCDFEC6C7CBFF808CC6FF213EC5FF1634C5FF1431 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1028B9FF3C4DB9FEA3A8 C6FFCECECDFFCCCDCDFFCDCDCDFFCECECEFECECECEFFCECECEFFCDCDCDFECCCC CDFFBDBECAFF4F58B0FF101EA4FF0713A2FF0511A0FF04109FFF040E9DFF030C 9BFF030B9AFF020B98FF020996FF020895FF000593FE171C9DFEC2B5C867F8F6 F816F4F4F9010000000000000000FDFEFE0BF0EDF23D83739DBC6C8DF3FD6587 F0FD5D80EEFF5479ECFF4B71EAFF456BE8FD3E65E6FF385FE3FF335AE2FD2F56 E0FF2C52DEFF2A4FDCFF4464D6FFA6AECCFFCDCCCEFFCBCCCCFFCCCCCCFFCCCC CCFDCCCCCCFFCCCCCCFFCBCCCCFDCACACBFF969EC7FF364FC3FF1634C5FF1531 C3FF1330C1FF132EC0FF122CBEFF112ABCFF122ABBFF1229BAFF6672BDFDBCBE C9FFCCCCCCFFCCCCCCFFCDCDCDFFCCCCCCFDCDCDCDFFCCCCCCFFCBCBCCFDCACB CCFF787DB7FF1A27A7FF0615A3FF0613A2FF0511A0FF04109EFF040F9DFF040D 9BFF030C9AFF030B98FF020996FF020896FF010694FD191E9EFDC2B4C766F8F6 F815F5F5FA010000000000000000FDFEFE0CF0EDF23D83739DBC6C8DF3FE698A F0FE6688EFFF6082EDFF597CEBFF5174E9FE496DE7FF4167E5FF3C61E2FE365C E1FF3157DFFF2E53DDFF3457D8FF6C81CFFFCCCCCCFFCACBCBFFCBCCCCFFCBCB CBFECCCCCCFFCCCCCBFFCBCBCBFECACACBFFB0B4C5FF5669C0FF1432C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122BBCFF122BBBFF1930B9FF7D87C2FEC5C6 CBFFCACACBFFCBCBCBFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCACACBFEB8B8 C6FF3642ADFF0A18A5FF0815A3FF0714A2FF0612A0FF05109EFF050F9DFF040E 9CFF040D9BFF030C99FF040B98FF040A96FF040994FE1C219FFEC2B4C767F8F6 F816F5F5FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF4FE6989 F0FE6888EFFF6787EEFF6484ECFF5F7EEBFE5678E9FF4E71E6FF476AE4FE4064 E2FF3B5FE0FF375ADEFF3155DBFF4B68D7FFB2B7CAFFCBCBCCFFCBCBCBFFCCCC CBFECBCBCBFFCBCBCBFFCBCBCBFECACACBFFC2C2C4FF727EBFFF1734C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122CBCFF132CBBFF253ABAFF8B93C5FEC9CA CCFFCACBCBFFCBCBCCFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCDCDCDFE8B8F BBFF2431A9FF0A18A6FF0815A4FF0714A3FF0713A1FF06129FFF06119EFF0710 9CFF060F9BFF060E9AFF070E98FF080E97FF090D96FE2026A0FEC2B4C767F7F6 F716F5F5FA010000000000000000FDFDFD0CEFEDF13D84739DBC6D8EF4FE6A8A F1FE6888F0FE6787EEFE6886EDFE6785ECFE6281EAFE5D7DE8FE5676E6FE4F6F E4FE486AE2FE4264E0FE3C5EDEFE4766DAFE8B99D0FECACACBFECACACBFECBCB CAFECBCBCBFECBCBCBFECACACAFEC9C9CAFEC7C7C5FE838DC0FE2540C5FE1A36 C4FE1733C2FE1631C1FE152FBFFE152DBDFE142CBCFE3347BAFE969CC3FEC9C9 CAFEC9CACAFECACACAFECBCBCBFECACACAFECBCBCBFEC9C9CAFED0D0CDFE5860 B3FE1422A8FE0C19A6FE0B17A5FE0A16A3FE0A15A2FE0A15A0FE0A149FFE0B14 9EFE0B139DFE0B139CFE0C139BFE0E149AFE0F1499FE272CA3FEC2B3C766F8F6 F815F5F5FA010000000000000000FDFEFE0CEFEDF13E84749DBC6C8DF4FE6989 F0FE6988F0FF6788EEFF6886EDFF6785ECFE6685EAFF6584E9FF6280E8FE5D7C E6FF5876E4FF5270E2FF4B6BE0FF4C6ADDFF798CD4FFC9CACBFFC8C9CAFFCACA CAFECACACAFFCACACAFFCACAC9FEC9C9CAFFC8C7C7FF8D96C1FF334CC4FF1F3B C5FF1C37C3FF1A35C1FF1933BFFF1832BEFF162FBDFF4455B9FFA1A5C3FEC9C9 C9FFC9C9C9FFCACACAFFCACACAFFCACACAFECACACAFFC8C8C9FFC6C6C8FE3D48 B1FF0F1EA9FF0F1DA7FF0E1BA6FF0F1BA5FF0F1BA3FF0F1AA2FF101AA1FF111A A0FF111AA0FF131B9FFF151B9EFF171D9EFF191E9DFE3135A8FEC1B3C767F7F6 F816F5F6FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EDFF6785ECFE6585EAFF6584E9FF6482E8FE6481 E7FF637FE6FF5F7CE5FF5C78E3FF5A75DFFF7C8FD6FFC8C9CCFFC7C8C9FFC9C9 C9FEC9C9C9FFC9C9C9FFC9C9C8FEC8C8C8FFC7C7C7FF989FC3FF445AC3FF2741 C7FF243EC5FF223BC3FF1F39C1FF1F37BFFF1B33BEFF5564BBFFACAFC2FEC8C8 C8FFC8C8C8FFC9C9C8FFC9C9C9FFC9C9C9FEC8C8C8FFC7C8C9FFACAFC2FE3441 B1FF1422ABFF1523AAFF1522A9FF1623A8FF1723A6FF1723A5FF1923A5FF1A24 A4FF1C24A4FF1F26A4FF2128A4FF2429A4FF282CA4FE4145AEFEC1B2C667F7F5 F815F6F6FB010000000000000000FDFEFE0CEFEEF13D84749CBB6C8EF3FE6A8A F0FE6988F0FE6787EFFE6987EEFE6785ECFE6684EBFE6684E9FE6582E8FE6481 E7FE6480E6FE647FE5FE647EE4FE657DE1FE8394D8FEC8C9CDFEC7C8C9FEC9C9 C9FEC9C9C9FEC9C9C9FEC8C8C8FEC8C8C8FEC7C7C7FEA3A9C4FE576AC6FE334C CAFE2F48C8FE2D45C6FE2A42C4FE2A40C2FE243CC1FE6572BDFEB4B7C3FEC8C8 C8FEC8C8C8FEC9C9C8FEC9C9C9FEC9C9C9FEC8C8C8FEC7C8C9FE9C9FBFFE3844 B3FE1F2DAFFE202EAEFE212DADFE222EACFE242EABFE242FAAFE2730AAFE2932 ABFE2C34ABFE2F36ABFE3339ABFE383CACFE3D40ACFE5357B6FEC0B2C667F7F5 F816F7F7FB010000000000000000FDFEFE0CEFEEF23E84749DBC6C8DF4FE6989 F0FE6989F0FF6888EFFF6987EEFF6785ECFE6685EBFF6684EAFF6583E8FE6482 E8FF6480E6FF647EE5FF647EE3FF667EE1FF8596D9FFCACBCEFFCACACBFFCBCB CBFECBCBCBFFCBCBCBFFCBCBCBFECACACAFFCBCBCAFFA8AEC8FF6375C8FF445B CEFF4057CCFF3D53CBFF3A50C8FF394EC6FF3348C5FF7480C1FFBCBDC6FECACA CBFFCACACAFFCBCBCBFFCBCBCBFFCBCBCBFECACACAFFCACACBFF9FA3C2FE4550 B8FF303CB5FF313EB4FF333DB3FF343EB2FF3740B2FF3942B2FF3C44B2FF3E46 B3FF4148B2FF444AB2FF474CB3FF4A4EB3FF4C4FB3FE5E62BBFEBFB1C667F7F5 F816F7F7FB010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6987EDFF6886EDFE6685EBFF6684EAFF6583E9FE6582 E8FF6581E6FF647FE5FF647EE4FF677FE1FF8899DAFFCECFD2FFCECECFFFCFCF D0FECFCFCFFFD0D0D0FFCFCFCFFECFCFCFFFCECECEFFA9AFCAFF6A7BCDFF576B D3FF5368D1FF5165D0FF4E62CDFF4E60CCFF495CCBFF7984C4FFBBBDC8FECECF CFFFCFCFCFFFD0D0CFFFD0D0D0FFD0D0CFFECFCFCFFFCFCECFFFA5A8C4FE5761 BDFF4550BDFF4752BCFF4851BBFF4952BAFF4A53B9FF4C54B9FF4D54B8FF4E54 B8FF4E54B7FF4F54B7FF4F54B6FF4F53B5FF4E52B4FE5F63BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFDFD0CEFEEF13E84739DBC6D8EF4FE6A8A F1FE6989EFFE6888EEFE6987EEFE6886EDFE6685EBFE6684EAFE6683E9FE6582 E7FE6581E7FE657FE5FE647EE4FE6981E1FE909FDAFED1D2D3FED2D2D3FED2D2 D3FED3D3D3FED3D3D3FED2D2D2FED2D2D2FED0D0D0FEA7ADCCFE697BD0FE5E71 D5FE5C6FD3FE5B6ED2FE5A6DD1FE5A6CD0FE5869D0FE7B86C7FEB9BCCBFED2D2 D2FED2D2D2FED3D3D2FED3D3D3FED3D3D2FED2D2D2FED2D2D2FEB8BAC8FE6770 C3FE525CC2FE535DC0FE525CBFFE525BBEFE525BBCFE525ABBFE5158BAFE5157 B9FE5056B8FE4F55B7FE4F54B5FE4E53B5FE4E52B4FE5F62BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFEFE0CEFEDF23E84749DBC6D8EF4FE6A8A F1FE6989F0FF6887EFFF6987EEFF6886EDFE6585EBFF6584E9FF6683E9FE6582 E7FF6580E7FF657FE5FF647EE3FF6D84E0FFA0ABD6FFD5D5D6FFD6D6D6FFD6D6 D6FED7D7D7FFD7D7D7FFD6D6D6FED6D6D6FFD2D2D1FFA3ABCDFF6578D4FF5E71 D5FF5C6FD4FF5B6ED2FF5B6DD1FF5B6DD0FF5B6BD0FF7681CAFFB6BACEFED5D5 D6FFD6D6D6FFD6D6D6FFD7D7D7FFD6D6D6FED6D6D6FFD5D5D6FFD0D0D0FE767E C5FF5560C2FF545EC0FF525CBEFF525BBDFF525ABCFF5259BBFF5158BAFF5157 B9FF5056B8FF4F55B7FF5055B6FF4F54B6FF4F53B5FE6063BCFEBFB0C667F7F5 F815F8F8FC010000000000000000FCFDFD0CF0EEF13E84749CBC6C8EF4FE6A8A F1FE6989F0FE6787EFFE6987EEFE6886ECFE6685EAFE6683EAFE6683E9FE6582 E8FE6581E7FE657FE5FE637EE4FE758BDEFEBDC1D0FED9D9DAFED9D9D9FEDADA DAFEDADADAFEDADADAFED9D9D9FED9D9DAFED1D1D2FE98A2CDFE5E73D7FE5E72 D6FE5C70D4FE5B6ED3FE5B6DD1FE5B6CD0FE5B6CCFFE6A77CBFEAEB3D0FED8D8 D9FED9D9D9FED9D9D9FEDADADAFED9D9D9FEDADADAFED9D9D9FEDBDBD9FE8E94 C5FE5C66C1FE555FC0FE535CBFFE535CBEFE535BBDFE535ABCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4E54B6FE4F52B5FE6062BCFEBFB1C667F7F5 F816F8F8FC010000000000000000FCFDFD0CF0EEF23E84749DBC6D8EF4FD6A8A F1FD6889F0FE6888EFFE6887EEFE6786EDFD6685EBFE6684E9FE6583E9FD6582 E7FE6580E7FE6580E5FE6881E1FE8D9CD8FEDAD9DAFEDEDEDEFEDFDFDFFEDFDF DFFDDFDFDFFEDFDFDEFEDEDEDEFDDDDEDEFEC9CBD4FE8894CEFE5D71D7FE5E72 D6FE5C70D4FE5C6ED3FE5C6ED1FE5B6DD1FE5C6CD0FE6371CCFEA7ADD1FDD9D9 DBFEDEDEDEFEDEDEDEFEDFDFDFFEDFDFDFFDDFDFDFFEDEDEDEFEDFDFDFFDB4B7 CFFE6971C4FE555FC1FE535DBEFE535CBEFE535BBCFE5359BCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4F53B6FE4F53B5FD6063BCFDBFB1C666F7F5 F816F8F8FC010000000000000000FCFDFD0CEFEEF23E84749DBC6C8EF3FE6989 F0FE6989F0FF6888EFFF6987EDFF6785ECFE6685EBFF6684EAFF6582E8FE6582 E8FF6581E6FF6580E5FF768CE0FFB8BFD8FFE3E3E4FFE2E2E2FFE3E3E3FFE3E3 E3FEE3E3E3FFE3E3E2FFE2E2E2FEE0E1E2FFBBC0D9FF7585D2FF5E73D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5C6CD0FF5E6ECEFF989FCBFED5D5 D9FFE2E2E3FFE2E2E2FFE3E3E3FFE3E3E3FEE3E3E3FFE2E2E2FFE1E1E2FED6D6 DBFF7D84C6FF5861C0FF535DBFFF525CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4E52B4FE5F62BBFEBFB1C567F6F5 F816F8F8FC010000000000000000FDFEFE0CF0EEF23E84739DBC6D8EF4FE6A8A F1FE6888EFFF6888EFFF6887EEFF6886EDFE6685EBFF6683E9FF6583E9FE6581 E7FF6581E7FF6983E3FF92A1D8FFDADBE0FFE3E3E4FFE5E5E4FFE4E4E4FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E4E4FEE0E0E2FFAEB6DAFF677AD4FF5E73D6FF5E72 D5FF5C6FD5FF5C6FD3FF5C6ED1FF5B6DD1FF5B6CD0FF5C6BCEFF828BC5FEC8C9 D5FFE3E3E4FFE4E4E4FFE4E4E4FFE4E4E4FEE5E5E5FFE5E5E5FFE4E4E4FEE3E3 E3FFB6B9D1FF6971C1FF545EBEFF535DBEFF535BBDFF535ABCFF5258BAFF5258 BAFF5157B8FF5056B8FF5055B6FF4F54B6FF4F53B4FE6063BCFEBFB1C667F6F5 F816F8F8FC010000000000000000FDFEFE0BF0EEF23D84739CBB6D8EF4FD698A F1FD6888EFFF6787EFFF6886EDFF6886EDFD6584EAFF6583EAFF6583E9FD6682 E7FF6883E6FF8296DDFFC8CCDAFFE3E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5 E5FDE5E5E5FFE4E4E4FFE5E4E5FDD6D7DDFF98A2D2FF6175D6FF5E73D6FF5E71 D5FF5D6FD5FF5B6ED2FF5B6DD1FF5B6DD1FF5B6CCFFF5C6BCEFF6774CAFDAEB3 D0FFDFDFDFFFE4E4E4FFE4E4E4FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE4E4 E4FFDEDEE0FF999EC8FF5D66BFFF535DBFFF535BBCFF525ABBFF5259BAFF5258 BAFF5056B9FF4F55B7FF4F55B5FF4F54B5FF4F53B5FD6063BCFDBEB0C567F6F4 F716F7F7FB010000000000000000FDFEFE0CF0EDF23E83749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EEFF6786ECFE6685EBFF6684E9FF6683E8FE6783 E7FF788EDFFFBCC3D8FFE2E2E2FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E3E4FEBEC3DAFF7585D3FF5F74D7FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6BCEFF5B6ACDFE8E96 CBFFD0D1DAFFE4E4E4FFE4E4E4FFE5E5E5FEE5E5E5FFE5E5E5FFE5E5E5FEE5E5 E5FFE3E3E4FFD3D3DDFF8F94C4FF5B65BEFF545CBDFF535ABCFF5259BAFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4F53B5FE6063BCFEBEB0C567F6F4 F716F8F8FB010000000000000000FDFDFE0BEFEDF23D84749CBB6C8EF4FE6989 F1FE6888F0FE6787EFFE6886EDFE6886ECFE6685EAFE6684EAFE6784E8FE8195 DDFEBAC2DCFEE0E1E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED7D9E0FE9DA7D7FE6276D8FE5F74D7FE5E72D6FE5D71 D6FE5D6FD5FE5C6FD2FE5C6ED1FE5B6CD0FE5B6CD0FE5B6ACEFE5B6ACDFE6D7A C8FEB8BCD4FEE2E2E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED1D2DBFE9599C7FE5D65BCFE535BBCFE535ABBFE5258 B9FE5157B8FE4F55B7FE4F54B6FE4E53B6FE4E52B5FE5F63BCFEBAAABF68F6F4 F615000000000000000000000000F8F8F80DEFEDF33E8376AEBC6D8EF3FD6A8A F0FD6989EFFF6888EEFF6987EDFF6887ECFD6886EAFF6F8BE5FF96A5D8FDCBCF E1FFE0E0E2FFE5E5E6FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5 E5FDE4E4E4FFE4E4E4FFC0C6DEFD7888D4FF6074D9FF5F74D8FF5E72D6FF5D71 D6FF5D70D4FF5C6FD3FF5C6ED1FF5B6CD1FF5B6CD0FF5B6ACEFF5B6ACDFD5B6B CCFF9198C7FFD1D2D9FFE3E3E4FFE5E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE4E4E5FFD4D5DEFFAFB1CEFF6B72BEFF565DBAFF5359 BAFF5258B9FF5157B8FF5055B6FF4F54B6FF4F53B5FD6165BCFDA892A86FF1ED F017E1E1E3010000000000000000F5F5F60BEEECF43D8278BCBB6D8EF3FD698A F2FE6888F1FE6586F0FF6686EDFF768FE0FD9AAADBFFB9C2E1FFD3D6DEFDE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FDE4E4E4FFD1D4DDFF94A0D5FD6378D8FF6074D8FF5F74D8FF5E72D6FF5E71 D6FF5C70D5FF5B6FD3FF5B6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFD5969 CDFF6875C9FFAFB4D1FFDDDEE0FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E5FFDFDFE1FFC2C4D8FFA4A6CBFF7A7D B9FF5A5EB3FF4E54B7FF4E53B6FF4E53B6FE4F53B5FE6064BEFDA28AA171EFEB EE15D0D0D10100000000A7A7A704C9C9C957DBDBDB7C9F99C2D18CA3E5FE8EA1 DFFE96A6DCFFA2B0DBFFB6BEDAFFC9CFE1FED7D9E1FFE0E1E3FFE5E5E5FEE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E4FFE4E4 E4FEDCDDE2FFACB4D8FF6A7FD8FE6075DAFF5F74D9FF5F74D8FF5D71D7FF5D71 D5FF5D6FD4FF5B6ED3FF5B6DD1FF5B6CD0FF5B6CCFFF5B6ACDFF5A6ACDFE5A6A CCFF5A6ACCFF7A85C6FFC5C8D7FFE4E3E3FEE4E4E4FFE5E5E5FFE5E5E5FEE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE5E5E5FFE4E4E4FFDBDBDFFFD0D0 DCFFBDBDD1FFA4A6C5FF9194BEFF8587BDFF797BBBFE8385C1FEB7ACB7A0D0D0 D062B9B9B927000000009F9F9F0BD7D7D7D1E2E2E2E1D6D5DCF4D0D5E3FED1D5 E2FED4D7E0FED9DADFFFE0E0DFFFE5E5E4FEE5E5E5FFE5E5E5FFE4E5E5FEE5E5 E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE0E0 E1FEBBC1D8FF7688D7FF6177DBFE6075D9FF5F74D8FF5F73D8FF5E72D7FF5E72 D6FF5D70D4FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5D6CC8FF8991CAFFCDCFDCFEE3E3E4FFE5E4E4FFE6E6E6FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE6E6 E6FFE4E4E3FFDCDCDEFFD5D5DBFFD1D1DBFECCCDDBFECDCEDBFEDCDADCE9E1E1 E1DCC4C4C462000000009E9E9E0CD8D8D8F3E5E5E5FDE3E3E4FDE4E4E5FEE4E4 E5FEE4E4E5FEE3E3E4FFE4E4E5FFE4E4E4FDE4E4E4FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE4E4E4FFE5E5E5FFE5E5E5FFE4E4E4FFE3E3E4FFE2E2E3FFC6CA DBFD8292D5FF6279DBFF6077DAFD5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CCFFF5B6ACEFF5A6ACDFD5969 CDFF5868CBFF5968CAFF606DC8FF979ECBFDD5D6DDFFE3E4E4FFE4E4E4FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4 E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E5FEE4E4E5FEE4E4E4FEE4E4E4FDE5E5 E5FDC6C6C673000000009E9E9E0CD8D8D8F4E5E5E5FDE5E5E5FDE6E6E6FEE6E6 E6FEE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FEE6E6E6FFE6E6E6FFE6E6E6FEE6E6 E6FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE4E5E5FFE3E3E4FFC8CCDCFF8191 D5FE667CDBFF6078DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6DD2FF5B6DD1FF5B6CD0FF5B6ACEFF5A69CDFE5969 CDFF5868CBFF5867CAFF5966C9FF636FC8FE9A9FCBFFD6D6DEFFE4E4E5FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE5E5E5FEE5E5E5FDE5E5 E5FEC6C6C673000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FEE7E7E7FEE6E6E6FEE6E6E6FEE7E7E7FEE7E7E7FEE6E6E6FEE7E7E7FEE6E6 E6FEE6E6E6FEE6E6E6FEE5E6E6FEE5E5E5FEE3E3E2FEC3C7D8FE8092D9FE647C DCFE6179DCFE6077DBFE6076DBFE5F74DAFE5F74D9FE5F74D7FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6BD0FE5B6ACEFE596ACDFE5869 CDFE5868CBFE5867CBFE5865C8FE5865C8FE636FC6FE9198C9FED4D5DFFEE5E5 E6FEE4E4E5FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE7E7 E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE6E6E6FEE6E6E6FEE6E6 E6FEC6C6C674000000009E9E9E0DD8D8D8F5E6E6E6FEE6E6E6FEE7E7E7FFE7E7 E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE6E6E6FFE6E6E6FFE7E7E7FEE7E7 E6FFE6E6E5FFE5E5E6FFE4E5E5FFDDDEE2FFB3BBDAFF798CDCFF647DDEFF617A DEFE6179DCFF6077DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CAFF5865C9FF5864C7FE5764C6FF5E6AC5FF868CC4FEC7C8 D8FFE3E3E5FFE5E5E6FFE5E5E5FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FFE6E6E6FFE6E6E6FEE6E6 E6FFC6C6C674000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FFE7E7E7FEE6E6E6FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FFE7E7E7FEE6E6 E6FFE5E6E6FFE6E6E6FFCFD2DDFF919FD9FF7187DFFF647CE0FF627BDFFF617A DDFE6178DCFF6077DCFF5F77DAFE5F74D9FF5F74D8FF5F74D8FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACDFF5A6ACCFE5969 CDFF5868CBFF5866CBFF5865C8FF5764C8FE5764C6FF5662C5FF5C67C2FE7078 C6FFA4A8C8FFDCDDE0FFE6E6E6FFE4E5E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FEE6E6E6FEE6E6 E6FFC7C7C774000000009E9E9E0CD8D8D8F4E6E6E6FDE6E6E6FDE7E7E7FEE7E7 E7FEE6E6E7FFE6E6E6FFE6E6E7FFE6E6E7FEE6E6E7FFE5E6E6FFE8E8E8FEE7E6 E7FFCDD0DCFFA4B1DCFF798EDDFF6780E1FF637DE1FF637CE0FF617BDEFF6079 DEFE6179DDFF6077DCFF5F76DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5969CCFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C6FF5662C4FF5661C4FE5761 C3FF5E68C2FF7D84C4FFB0B2CFFFD7D7DBFFE8E8E7FFE7E7E8FFE6E6E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FEE6E6E6FEE6E6E6FDE6E6 E6FEC6C6C673000000009E9E9E0CD9D9D9F3E7E7E7FCE6E6E6FDE7E7E7FEE6E6 E7FEE6E7E7FEE6E6E7FEE5E6E7FEE6E7E7FDE6E7E9FEDEDFE3FEC3C8D6FD90A0 D8FE748DE4FE6C85E4FE657EE3FE647EE3FE637DE1FE637CE0FE617BDFFE617A DDFD6179DCFE5F77DBFE6076DBFD5E74D9FE5E73D8FE5E73D7FE5D72D6FE5D72 D5FE5D70D5FE5B6ED3FE5B6DD2FE5A6CD0FE5A6BCFFE5A69CDFE5A6ACDFD5869 CCFE5767CAFE5766CAFE5765C8FE5864C8FD5763C5FE5662C5FE5661C4FD5660 C3FE545FC2FE5862C0FE5F68C0FE6F76C4FE9DA0C5FEC7C8D1FEDCDCDFFEE4E4 E5FEE4E5E5FEE5E5E5FEE5E5E6FEE5E5E6FEE5E6E6FEE5E5E6FEE6E6E7FCE7E7 E7FDC7C7C77300000000A4A4A40CC6C6C6D8DADADAE6D2D1D6F2C9CCD7FDCCD0 DCFEC6CAD7FEB7BFD7FFAEB8D9FF9CACE0FD8A9EE3FF7C95E3FF718BE5FD6884 E6FF6481E7FF647FE5FF647EE3FF647EE2FF637CE1FF637CE1FF617BDFFF6179 DEFD6179DDFF6077DCFF6076DAFD5F75DAFF5F73D8FF5F73D7FF5E71D6FF5E71 D6FF5D70D5FF5B6FD3FF5B6ED2FF5B6DD1FF5B6BCFFF5B6ACDFF596ACCFD5969 CDFF5867CBFF5866CBFF5865C9FF5763C7FD5764C6FF5662C4FF5561C4FD5660 C3FF555FC2FF555FC1FF535DBFFF545DBEFF5A61BDFF646BBEFF7277C0FF8186 C3FF989AC7FFADAECAFFC1C2CFFFC0C0CCFEC7C8D3FEC7C6CFFDD0D0D1EBD2D2 D2E3BFBFBF6600000000A4A4A401C3C3C31CE0DFE235A599B894889AE0FD708F EFFE708EEEFE6F8CEDFF6E8BEBFE6C89EBFE6986E9FF6784E9FF6683E9FE6582 E8FF6581E6FF647FE4FF647EE3FF637DE3FF627CE2FF627CE1FF607BDFFF617A DEFE6078DDFF6077DCFF6077DBFE5F74D9FF5F73D9FF5F73D8FF5E72D7FF5E72 D5FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C5FF5762C5FF5661C5FE5660 C3FF545EC2FF555FC0FF535DBFFF535CBEFF535BBDFF535ABCFF545BBBFF565C BAFF575BBAFF585DB9FE595DB8FF585BB7FE5E63BBFE503C7CFDDCDAE05FD5D5 D523BEBEBE0D0000000000000000F2F2F402F7F5F81BC3BBCF6B696FB8FA7D9A F5FD6888F0FE6788EFFE6887EEFF6886ECFD6685EAFF6684E9FF6683E8FD6582 E7FF6481E7FF647EE5FF647EE4FF637DE3FF627CE2FF627CE1FF617BDEFF6179 DEFD6178DDFF6076DCFF6076DBFD5F74DAFF5F74D9FF5E73D8FF5D72D6FF5D71 D6FF5C70D5FF5C6FD3FF5B6ED2FF5B6DD1FF5A6CD0FF5A69CEFF5A6ACDFD5869 CDFF5868CAFF5867CAFF5765C9FF5764C8FD5663C6FF5662C4FF5661C5FD5560 C3FF555FC2FF555FC1FF525CBFFF535CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5156B9FF4F55B8FF4F54B6FE4D51B4FE5D5FB5FD593E75D8E6E1EA3BFCFC FD0C000000000000000000000000E9E8EA01FAFAFB13DBD4DD4D5C4678E08AA0 EDFD6786EEFD6889EEFE6887EEFE6886EDFD6685EAFE6584EAFE6582E9FD6481 E8FE6480E7FE657FE5FE657EE4FE647EE3FE637DE2FE637CE1FE617BDFFE617A DEFD6179DDFE6077DCFE6077DBFD5F75DAFE5F74D9FE5F74D8FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6CD0FE5B6ACEFE5A6ACDFD5969 CDFE5868CBFE5867CBFE5865C9FE5864C8FD5764C6FE5762C5FE5661C5FD5560 C3FE545EC2FE545EC1FE525CBFFE525BBEFE525ABDFE5259BCFE5259BBFE5258 BAFE5157B9FE5157B8FE4F54B5FE656AC0FC645B9EFDA99AB580F3F1F425F9F9 FA0600000000000000000000000000000000FBFBFC09F3F0F12EAD9BAA85645B 94FA93A8EFFD6989EEFD6787EDFE6785ECFD6684EAFE6683E9FE6682E8FD6581 E7FE6580E6FE647EE4FE647DE3FE637DE2FE627CE1FE627BE0FE617ADEFE6179 DDFD6178DCFE6076DBFE6076DAFD5F74D9FE5F73D8FE5E73D7FE5D71D5FE5D71 D5FE5C6FD4FE5C6ED2FE5B6DD1FE5B6CD0FE5A6BCFFE5A69CDFE5A69CCFD5968 CCFE5867CAFE5867CAFE5765C8FE5764C7FD5663C5FE5662C4FE5661C4FD5560 C2FE555FC1FE555FC0FE535DBEFE535CBDFE535BBCFE535ABBFE5259BAFE5258 B9FE5156B8FE5156B7FE6266BDFD7A74B2FD5D406CCFDCD6DF46FBFAFB100000 000000000000000000000000000000000000FBFAFB01FAFAFA14EBE7EA40A392 A791645388F48B97D7FD93ACF9FD7492F1FD6686ECFD6484EBFE6382EAFD6381 E9FE6581E9FE6D88E9FE6F89E8FE6F88E7FE6F88E6FE6F87E5FE6E86E3FE6E85 E2FD6D84E1FE6D82E0FE6C82DFFD6C81DEFE6C80DDFE6B7FDCFE6A7EDBFE6A7D DAFE697CD9FE687BD8FE687AD7FE6879D6FE6778D5FE6776D4FE6776D3FD6675 D2FE6574D1FE6573D0FE6471CEFE6470CDFD636FCCFE636ECBFE5E6AC8FD5560 C4FE535EC2FE525DC1FE515BBFFE505ABEFE515ABDFE5058BCFE5A61BFFE686E C4FE8186CFFE9297D5FD70649CFD6F5379CBCFC5CF5CF8F6F81FFBFAFB040000 00000000000000000000000000000000000000000000FDFCFD05FAF9FA16F0EE F137CFC7D560725A7FB365578BE5776EA0F47677B2FA7776B1F97775B2FA7775 B1FA7674B0FA7674AFFA7673AFFA7673AEFA7572AEFA7572ADFA7571ABFA7471 ABFA7571AAFA7470A9FA7470A9FA746FA9FA746EA8FA736EA8FA736DA7FA736D A7FA726DA6FA726CA6FA726BA5FA726BA4FA716AA4FA716AA3FA7169A3FA7168 A2FA7167A2FA7067A1FA7066A1FA7066A0FA7065A0FA70659FFA6F659EFA6F64 9DFA6F649DFA6F639CFA6E639CFA6D629BF96D629BFA6D619AFA6D6198F96C5F 97FA675384F6593B69E381647DA9D7CED753F8F6F824FBFBFB09000000000000 0000000000000000000000000000000000000000000000000000FBFBFB03FCFB FC0EF9F8FA1DE3DDE432DAD5DE4AD7D1DD5CCDC6D365A28D9C76A28D9C76A28D 9C76A18C9C77A28C9B77A18C9B77A28C9B76A28C9A77A28C9B77A18C9A77A28C 9B76A28C9B77A28C9A77A28C9A77A28C9A77A28C9A77A28C9A76A28B9A77A28C 9A77A18B9A76A18B9A77A28B9A77A28B9977A28A9977A28B9977A18A9977A28B 9877A28A9877A18B9876A18B9977A18B9976A18B9976A18A9877A18B9977A18B 9976A18B9977A18B9977A18B9976A18B9976A08A9877A18A9876A0899776B09E AB6FCFC6D161DCD5DD52EAE5E937FAF9FA1AFBFAFB09FCFCFC01000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F7F7F903FCFCFC08FBFBFC10FAF9FA17F7F6F718EEEAED18EEEAEC19EEE9 EC18EFEBED19EFEBED19EFEBED19EEEAEC19EFEBED19EFEBED19EFEBED19EEEA ED18EFEBED19EFEBED19EDE9EB18EFEBED19EFEBED19EFEBED19EFEBED19EFEB ED19EFEBED19EFEBED19EFEBED19EEEAEC18EFEBED19EFEBED19EEEAEC19EEEA EC19EEEAEC18EEEAEC19EFEBED19EEEAEC18EFEBED19EFEBED19EFEBED19EEEA EC19EFEBED19EFEBED19EEEAEC19EFEBED19EEEAEC19EEEAEC19EEEAEC19F2F0 F119F9F8F918FBFBFC14FDFCFD0BFAF9FA030000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000F6F6F901F6F6F901F6F5 F801F7F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F6 F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6 F901F6F6F901F6F6F901F6F6F901F6F6F901F6F5F801F6F5F801F6F5F801F6F5 F801F5F5F801F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801F6F5 F801F6F6F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5 F801000000000000000000000000000000000000000000000000000000000000 00000000000000000000FFFFFFFFFFFFFFFFFFC14000000003FFF80000000000 003FF00000000000001FE00000000000000FE000000000000007C00000000000 0003C00000000000000380000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001800000000000000180000000000000018000000000000003800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0003800000000000000180000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000180000000000000038000000000000003C00000000000 0007C000000000000007E00000000000000FF00000000000000FFC0000000000 003FFFE00000000003FF } Hint = 'Double Commander - click to restore' OnClick = MainTrayIconClick OnDblClick = MainTrayIconClick left = 220 top = 168 end object pmTabMenu: TPopupMenu left = 392 top = 128 object miNewTab: TMenuItem Action = actNewTab OnClick = mnuTabMenuClick end object miRenameTab: TMenuItem Action = actRenameTab OnClick = mnuTabMenuClick end object miOpenDirInNewTab: TMenuItem Action = actOpenDirInNewTab OnClick = mnuTabMenuClick end object miLine14: TMenuItem Caption = '-' end object miCloseTab: TMenuItem Action = actCloseTab OnClick = mnuTabMenuClick end object miCloseAllTabs: TMenuItem Action = actCloseAllTabs OnClick = mnuTabMenuClick end object miCloseDuplicateTabs: TMenuItem Action = actCloseDuplicateTabs end object miLine19: TMenuItem Caption = '-' end object miTabOptions: TMenuItem Caption = 'Tab options' object miTabOptionNormal: TMenuItem Action = actSetTabOptionNormal GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionPathLocked: TMenuItem Action = actSetTabOptionPathLocked GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionPathResets: TMenuItem Action = actSetTabOptionPathResets GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionDirsInNewTab: TMenuItem Action = actSetTabOptionDirsInNewTab GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miLine16: TMenuItem Caption = '-' end object miSetAllTabsOptionNormal: TMenuItem Action = actSetAllTabsOptionNormal end object miSetAllTabsOptionPathLocked: TMenuItem Action = actSetAllTabsOptionPathLocked end object miSetAllTabsOptionPathResets: TMenuItem Action = actSetAllTabsOptionPathResets end object miSetAllTabsOptionDirsInNewTab: TMenuItem Action = actSetAllTabsOptionDirsInNewTab end end object miLine21: TMenuItem Caption = '-' end object miNextTab: TMenuItem Action = actNextTab end object miPrevTab: TMenuItem Action = actPrevTab end object miLine23: TMenuItem Caption = '-' end object miSaveTabs: TMenuItem Action = actSaveTabs end object miLoadTabs: TMenuItem Action = actLoadTabs end object miSaveFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object miLoadFavoriteTabs: TMenuItem Action = actLoadFavoriteTabs end object miLine26: TMenuItem Caption = '-' end object miConfigFolderTabs: TMenuItem Action = actConfigFolderTabs end object miConfigFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object pmTrayIconMenu: TPopupMenu left = 294 top = 193 object miTrayIconRestore: TMenuItem Caption = 'Restore' OnClick = miTrayIconRestoreClick end object miLine8: TMenuItem Caption = '-' end object miTrayIconExit: TMenuItem Caption = 'E&xit' OnClick = miTrayIconExitClick end end object pmLogMenu: TPopupMenu left = 440 top = 136 object miLogCopy: TMenuItem Caption = 'Copy' OnClick = miLogMenuClick end object miLine24: TMenuItem Caption = '-' end object miLogSelectAll: TMenuItem Tag = 1 Caption = 'Select All' OnClick = miLogMenuClick end object miLine25: TMenuItem Caption = '-' end object miLogClear: TMenuItem Tag = 2 Caption = 'Clear' OnClick = miLogMenuClick end object miLogHide: TMenuItem Tag = 3 Caption = 'Hide' OnClick = miLogMenuClick end end object Timer: TTimer Enabled = False Interval = 100 OnTimer = AllProgressOnUpdateTimer left = 704 top = 152 end object imgLstActions: TImageList left = 64 top = 224 end object imgLstDirectoryHotlist: TImageList left = 200 top = 224 end object pmFavoriteTabs: TPopupMenu Images = imgLstActions left = 128 top = 152 end enddoublecmd-1.1.30/src/flinker.pas0000644000175000001440000001464515104114162015525 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Take selected files and put them together to form one single file. Copyright (C) 2018-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Original comment: ---------------------------- Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : Pavel Letko (letcuv@centrum.cz) File combiner contributors: Radek Cervinka } unit fLinker; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Forms, Dialogs, StdCtrls, //DC fButtonForm, uFileSource, uFile; type { TfrmLinker } TfrmLinker = class(TfrmButtonForm) lblFileName: TLabel; lstFile: TListBox; gbSaveTo: TGroupBox; edSave: TEdit; btnSave: TButton; grbxControl: TGroupBox; spbtnUp: TButton; spbtnDown: TButton; spbtnRem: TButton; dlgSaveAll: TSaveDialog; procedure spbtnUpClick(Sender: TObject); procedure spbtnDownClick(Sender: TObject); procedure spbtnRemClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; { ShowLinkerFilesForm: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} function ShowLinkerFilesForm(TheOwner: TComponent; aFileSource: IFileSource; aFiles: TFiles; TargetPath: String): Boolean; { DoDynamicFilesLinking: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} procedure DoDynamicFilesLinking(aFileSource: IFileSource; aFiles: TFiles; TargetPath, aFirstFilenameOfSeries: String); implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Controls, //DC DCStrUtils, uLng, uFileProcs, uOperationsManager, uFileSourceCombineOperation, DCOSUtils, uShowMsg, uGlobs; { ShowLinkerFilesForm: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} function ShowLinkerFilesForm(TheOwner: TComponent; aFileSource: IFileSource; aFiles: TFiles; TargetPath: String): Boolean; var I: Integer; AFileName: String; ADirectory: String; xFiles: TFiles = nil; Operation: TFileSourceCombineOperation = nil; begin with TfrmLinker.Create(TheOwner) do begin try // Fill file list box for I:= 0 to aFiles.Count - 1 do with lstFile.Items do begin AddObject(aFiles[I].Name, aFiles[I]); end; // Use first file name without extension as target file name edSave.Text:= TargetPath + aFiles[0].NameNoExt; // Show form Result:= (ShowModal = mrOk); if Result then begin ADirectory:= ExtractFileDir(edSave.Text); if Length(ADirectory) > 0 then begin AFileName:= edSave.Text end else begin AFileName:= aFiles.Path + edSave.Text; ADirectory:= ExcludeTrailingBackslash(aFiles.Path); end; for I:= 0 to lstFile.Count - 1 do begin with lstFile.Items do if mbCompareFileNames(TFile(Objects[I]).FullPath, AFileName) then begin msgError(Format(rsMsgCanNotCopyMoveItSelf, [AFileName])); Exit; end; end; if mbForceDirectory(ADirectory) then try // Fill file list with new file order xFiles:= TFiles.Create(aFiles.Path); for I:= 0 to lstFile.Count - 1 do with lstFile.Items do begin xFiles.Add(TFile(Objects[I]).Clone); end; Operation:= aFileSource.CreateCombineOperation(xFiles, AFileName) as TFileSourceCombineOperation; OperationsManager.AddOperation(Operation, QueueIdentifier, False); finally FreeAndNil(xFiles); end; end; finally Free; end; end; end; { DoDynamicFilesLinking: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} procedure DoDynamicFilesLinking(aFileSource: IFileSource; aFiles: TFiles; TargetPath, aFirstFilenameOfSeries: String); var xFiles: TFiles = nil; Operation: TFileSourceCombineOperation = nil; begin xFiles:= TFiles.Create(aFiles.Path); try //Fill file list with new file order xFiles.Add(aFiles[0].Clone); Operation:= aFileSource.CreateCombineOperation(xFiles, TargetPath + aFiles[0].NameNoExt) as TFileSourceCombineOperation; Operation.RequireDynamicMode:=TRUE; OperationsManager.AddOperation(Operation); finally FreeAndNil(xFiles); end; end; { TfrmLinker.spbtnDownClick } procedure TfrmLinker.spbtnDownClick(Sender: TObject); var iSelected: Integer; begin with lstFile do begin if ItemIndex < 0 then Exit; if ItemIndex = Items.Count - 1 then Exit; iSelected:= ItemIndex; Items.Move(iSelected, iSelected + 1); ItemIndex:= iSelected + 1; end; end; { TfrmLinker.spbtnUpClick } procedure TfrmLinker.spbtnUpClick(Sender: TObject); var iSelected: Integer; begin with lstFile do begin if ItemIndex < 1 then Exit; iSelected:= ItemIndex; Items.Move(iSelected, iSelected - 1); ItemIndex:= iSelected - 1; end; end; { TfrmLinker.spbtnRemClick } procedure TfrmLinker.spbtnRemClick(Sender: TObject); begin with lstFile do begin if ItemIndex > -1 then Items.Delete(ItemIndex); end; end; { TfrmLinker.btnSaveClick } procedure TfrmLinker.btnSaveClick(Sender: TObject); begin dlgSaveAll.InitialDir:= ExtractFileDir(edSave.Text); dlgSaveAll.FileName:= ExtractFileName(edSave.Text); if dlgSaveAll.Execute then edSave.Text:= dlgSaveAll.FileName; end; {TfrmLinker.FormCreate } procedure TfrmLinker.FormCreate(Sender: TObject); begin InitPropStorage(Self); // Initialize property storage dlgSaveAll.Filter := ParseLineToFileFilter([rsFilterAnyFiles, AllFilesMask]); end; end. doublecmd-1.1.30/src/flinker.lrj0000644000175000001440000000226315104114162015522 0ustar alexxusers{"version":1,"strings":[ {"hash":87052738,"name":"tfrmlinker.caption","sourcebytes":[76,105,110,107,101,114],"value":"Linker"}, {"hash":125868494,"name":"tfrmlinker.gbsaveto.caption","sourcebytes":[83,97,118,101,32,116,111,46,46,46],"value":"Save to..."}, {"hash":41282357,"name":"tfrmlinker.lblfilename.caption","sourcebytes":[38,70,105,108,101,32,110,97,109,101],"value":"&File name"}, {"hash":12558,"name":"tfrmlinker.btnsave.caption","sourcebytes":[46,46,46],"value":"..."}, {"hash":330429,"name":"tfrmlinker.grbxcontrol.caption","sourcebytes":[73,116,101,109],"value":"Item"}, {"hash":1472,"name":"tfrmlinker.spbtnup.hint","sourcebytes":[85,112],"value":"Up"}, {"hash":11200,"name":"tfrmlinker.spbtnup.caption","sourcebytes":[38,85,112],"value":"&Up"}, {"hash":308958,"name":"tfrmlinker.spbtndown.hint","sourcebytes":[68,111,119,110],"value":"Down"}, {"hash":4922846,"name":"tfrmlinker.spbtndown.caption","sourcebytes":[68,111,38,119,110],"value":"Do&wn"}, {"hash":78392485,"name":"tfrmlinker.spbtnrem.hint","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":193742565,"name":"tfrmlinker.spbtnrem.caption","sourcebytes":[38,82,101,109,111,118,101],"value":"&Remove"} ]} doublecmd-1.1.30/src/flinker.lfm0000644000175000001440000001216015104114162015506 0ustar alexxusersinherited frmLinker: TfrmLinker Left = 411 Height = 425 Top = 166 Width = 397 HorzScrollBar.Page = 359 HorzScrollBar.Range = 289 VertScrollBar.Page = 363 VertScrollBar.Range = 331 ActiveControl = edSave BorderIcons = [biSystemMenu, biMaximize] Caption = 'Linker' ClientHeight = 425 ClientWidth = 397 OnCreate = FormCreate Position = poOwnerFormCenter SessionProperties = 'Height;Width' inherited pnlContent: TPanel AnchorSideBottom.Control = pnlButtons Height = 371 Width = 381 ClientHeight = 371 ClientWidth = 381 object gbSaveTo: TGroupBox[0] AnchorSideLeft.Control = pnlContent AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlContent AnchorSideBottom.Side = asrBottom Left = 0 Height = 76 Top = 290 Width = 381 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 Caption = 'Save to...' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 56 ClientWidth = 377 TabOrder = 1 object lblFileName: TLabel AnchorSideLeft.Control = gbSaveTo AnchorSideTop.Control = gbSaveTo Left = 6 Height = 15 Top = 6 Width = 51 Caption = '&File name' FocusControl = edSave ParentColor = False end object edSave: TEdit AnchorSideLeft.Control = gbSaveTo AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSave Left = 6 Height = 23 Top = 27 Width = 334 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 TabOrder = 0 end object btnSave: TButton AnchorSideTop.Control = edSave AnchorSideRight.Control = gbSaveTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edSave AnchorSideBottom.Side = asrBottom Left = 346 Height = 23 Top = 27 Width = 25 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSaveClick TabOrder = 1 end end object grbxControl: TGroupBox[1] AnchorSideTop.Control = lstFile AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lstFile AnchorSideBottom.Side = asrBottom Left = 281 Height = 284 Top = 0 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True Caption = 'Item' ClientHeight = 264 ClientWidth = 96 TabOrder = 2 object spbtnUp: TButton AnchorSideLeft.Control = grbxControl AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Up' Top = 1 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = '&Up' OnClick = spbtnUpClick ParentShowHint = False TabOrder = 0 end object spbtnDown: TButton AnchorSideLeft.Control = grbxControl AnchorSideTop.Control = spbtnUp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Down' Top = 39 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 6 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = 'Do&wn' OnClick = spbtnDownClick ParentShowHint = False TabOrder = 1 end object spbtnRem: TButton AnchorSideLeft.Control = grbxControl AnchorSideTop.Control = spbtnDown AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Delete' Top = 77 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 6 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = '&Remove' OnClick = spbtnRemClick ParentShowHint = False TabOrder = 2 end end object lstFile: TListBox[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideRight.Control = grbxControl AnchorSideBottom.Control = gbSaveTo Left = 0 Height = 284 Top = 0 Width = 275 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ItemHeight = 0 ScrollWidth = 240 TabOrder = 0 end end inherited pnlButtons: TPanel AnchorSideTop.Side = asrTop end object dlgSaveAll: TSaveDialog[3] Filter = 'All files|*.*' FilterIndex = 0 left = 288 top = 160 end enddoublecmd-1.1.30/src/fileviews/0000755000175000001440000000000015104114162015351 5ustar alexxusersdoublecmd-1.1.30/src/fileviews/uthumbfileview.pas0000644000175000001440000005705615104114162021132 0ustar alexxusersunit uThumbFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Types, DCXmlConfig, uFileSource, uOrderedFileView, uDisplayFile, uFileViewWorker, uThumbnails, uFileView, uTypes, uFileViewWithGrid, uFileProperty, uFile; type { TFileThumbnailsRetriever } TFileThumbnailsRetriever = class(TFileViewWorker) private FIndex: Integer; FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FThumbnailManager: TThumbnailManager; FUpdateFileMethod: TUpdateFileMethod; FAbortFileMethod: TAbortFileMethod; FFileSource: IFileSource; FBitmapList: TBitmapList; {en Updates file in the file view with new data from FWorkerData. It is called from GUI thread. } procedure DoUpdateFile; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; ABitmapList: TBitmapList; AUpdateFileMethod: TUpdateFileMethod; ABreakFileMethod: TAbortFileMethod; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; procedure Abort; override; end; TThumbFileView = class; { TThumbDrawGrid } TThumbDrawGrid = class(TFileViewGrid) private FThumbSize: TSize; FMouseDownY: Integer; FThumbView: TThumbFileView; FUpdateColCount: Integer; protected procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); override; protected procedure UpdateView; override; procedure CalculateColRowCount; override; procedure CalculateColumnWidth; override; procedure DoMouseMoveScroll(Sender: TObject; X, Y: Integer); public constructor Create(AOwner: TComponent; AParent: TWinControl); override; function CellToIndex(ACol, ARow: Integer): Integer; override; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; end; { TThumbFileView } TThumbFileView = class(TFileViewWithGrid) private FBitmapList: TBitmapList; FThumbnailManager: TThumbnailManager; procedure ThumbnailsRetrieverOnAbort(AStart: Integer; AList: TFPList); procedure ThumbnailsRetrieverOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); protected procedure CreateDefault(AOwner: TWinControl); override; procedure AfterChangePath; override; procedure EnsureDisplayProperties; override; function GetFileViewGridClass: TFileViewGridClass; override; function GetVisibleFilesIndexes: TRange; override; procedure ShowRenameFileEdit(var aFile: TFile); override; procedure UpdateRenameFileEditPosition(); override; function GetIconRect(FileIndex: PtrInt): TRect; override; procedure MouseScrollTimer(Sender: TObject); override; procedure DoFileChanged(ADisplayFile: TDisplayFile; APropertiesChanged: TFilePropertiesTypes); override; public constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TThumbFileView; override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; end; implementation uses LCLIntf, LCLType, LMessages, Graphics, Math, StdCtrls, uFileSourceProperty, uGlobs, uPixMapManager; { TFileThumbnailsRetriever } procedure TFileThumbnailsRetriever.DoUpdateFile; begin if Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; procedure TFileThumbnailsRetriever.Execute; var Bitmap: TBitmap; begin while (FIndex < FFileList.Count) and (Aborted = False) do begin FWorkingFile := FFileList.Files[FIndex]; FWorkingUserData := FFileList.Data[FIndex]; try if FWorkingFile.Tag < 0 then begin Bitmap:= FThumbnailManager.CreatePreview(FWorkingFile.FSFile); if Assigned(Bitmap) then begin FWorkingFile.Tag := FBitmapList.Add(Bitmap); end; end; TThread.Synchronize(Thread, @DoUpdateFile); except on EFileNotFound do; end; Inc(FIndex); end; end; constructor TFileThumbnailsRetriever.Create(AFileSource: IFileSource; AThread: TThread; ABitmapList: TBitmapList; AUpdateFileMethod: TUpdateFileMethod; ABreakFileMethod: TAbortFileMethod; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FBitmapList := ABitmapList; FAbortFileMethod := ABreakFileMethod; FThumbnailManager := AThumbnailManager; FUpdateFileMethod := AUpdateFileMethod; end; destructor TFileThumbnailsRetriever.Destroy; begin FFileList.Free; inherited Destroy; end; procedure TFileThumbnailsRetriever.Abort; begin inherited Abort; if Assigned(FAbortFileMethod) then begin FAbortFileMethod(FIndex, FFileList.UserData); end; end; { TThumbDrawGrid } procedure TThumbDrawGrid.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; FileIndex: Integer; ACol, ARow: Integer; begin if FThumbView.IsLoadingFileList then begin FThumbView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. FThumbView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_UP, VK_DOWN, VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_LEFT, VK_RIGHT]) and (ssShift in Shift) then FThumbView.InvertActiveFile; case Key of VK_LEFT: begin if (Col - 1 < 0) and (Row > 0) then begin MoveExtend(False, ColCount - 1, Row - 1); Key:= 0; end; end; VK_RIGHT: begin if (CellToIndex(Col + 1, Row) < 0) then begin if (Row + 1 < RowCount) then MoveExtend(False, 0, Row + 1) else begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); end; Key:= 0; end; end; VK_HOME: begin MoveExtend(False, 0, 0); Key:= 0; end; VK_END: begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_DOWN: begin if (CellToIndex(Col, Row + 1) < 0) then begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end end; end; inherited KeyDown(Key, Shift); if FThumbView.FRangeSelecting then begin FileIndex := CellToIndex(Col, Row); if FileIndex <> InvalidFileIndex then FThumbView.Selection(SavedKey, FileIndex); end; end; procedure TThumbDrawGrid.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited MouseMove(Shift, X, Y); if FThumbView.IsMouseSelecting then DoMouseMoveScroll(nil, X, Y); end; procedure TThumbDrawGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FMouseDownY := Y; inherited MouseDown(Button, Shift, X, Y); end; procedure TThumbDrawGrid.DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin inherited DragOver(Source, X, Y, State, Accept); DoMouseMoveScroll(nil, X, Y); end; procedure TThumbDrawGrid.UpdateView; var I: Integer; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; begin // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; Canvas.Font.PixelsPerInch := NewFont.PixelsPerInch; // Search columns settings for the biggest font (in height). Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Style := gFonts[dcfMain].Style; Canvas.Font.Size := gFonts[dcfMain].Size; if gUseFrameCursor then Result := gThumbSize.cy + Canvas.GetTextHeight('Wg') + gBorderFrameWidth*2 + 4 else Result := gThumbSize.cy + Canvas.GetTextHeight('Wg') + 6; // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); end; begin // Fix border blinking while scroll window Flat := True; // gInterfaceFlat; // Calculate row height. DefaultRowHeight := CalculateDefaultRowHeight; // Calculate column width CalculateColumnWidth; // Refresh thumbnails if (FThumbSize.cx <> gThumbSize.cx) or (FThumbSize.cy <> gThumbSize.cy) then begin FThumbSize:= gThumbSize; FThumbView.FBitmapList.Clear; if Assigned(FThumbView.FAllDisplayFiles) then begin // Clear thumbnail image index for I := 0 to FThumbView.FAllDisplayFiles.Count - 1 do FThumbView.FAllDisplayFiles[I].Tag:= -1; end; FThumbView.Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TThumbDrawGrid.CalculateColRowCount; var AIndex, ACol, ARow: Integer; AColCount, ABorderWidth: Integer; begin if (csDesigning in ComponentState) or (FUpdateColCount > 0) then Exit; if not Assigned(FFileView.DisplayFiles) then Exit; BeginUpdate; Inc(FUpdateColCount); try if (ClientWidth > 0) and (DefaultColWidth > 0) then begin // Save active file index AIndex:= CellToIndex(Col, Row); ABorderWidth:= BorderWidth * 2; AColCount := (ClientWidth - ABorderWidth) div DefaultColWidth; if AColCount > 0 then begin ColCount := AColCount; RowCount := (FFileView.DisplayFiles.Count + AColCount - 1) div AColCount; if ColCount > 0 then begin ARow := (ClientWidth - ABorderWidth) div ColCount; // Update columns widths for ACol := 0 to ColCount - 1 do ColWidths[ACol]:= ARow; end; // Restore active file index if AIndex >= 0 then begin IndexToCell(AIndex, ACol, ARow); MoveExtend(False, ACol, ARow); end; end; end; finally EndUpdate(True); Dec(FUpdateColCount); end; end; procedure TThumbDrawGrid.CalculateColumnWidth; begin if gUseFrameCursor then DefaultColWidth := gThumbSize.cx + gBorderFrameWidth*2 + 2 else DefaultColWidth := gThumbSize.cx + 4; end; procedure TThumbDrawGrid.DoMouseMoveScroll(Sender: TObject; X, Y: Integer); const LastPos: Integer = 0; var Delta: Integer; TickCount: QWord; AEvent: SmallInt = -1; begin TickCount := GetTickCount64; Delta := DefaultRowHeight div 3; if Y < Delta then AEvent := SB_LINEUP else if (Y > ClientHeight - Delta) and (Y - FMouseDownY > 8) then begin AEvent := SB_LINEDOWN; end; // Scroll at each 8 pixel mouse move if (Abs(LastPos - Y) < 8) and (Sender <> FThumbView.tmMouseScroll) then Exit; if (AEvent = -1) then begin FThumbView.tmMouseScroll.Enabled := False; Exit; end; LastPos := Y; if (FLastMouseMoveTime = 0) then FLastMouseMoveTime := TickCount else if (FLastMouseScrollTime = 0) then FLastMouseScrollTime := TickCount else if (TickCount - FLastMouseMoveTime > 200) and (TickCount - FLastMouseScrollTime > 50) then begin Scroll(LM_VSCROLL, AEvent); FLastMouseScrollTime := GetTickCount64; FThumbView.tmMouseScroll.Enabled := True; if (AEvent = SB_LINEDOWN) then FMouseDownY := -1; end; end; function TThumbDrawGrid.CellToIndex(ACol, ARow: Integer): Integer; begin if (ARow < 0) or (ARow >= RowCount) or (ACol < 0) or (ACol >= ColCount) then Exit(-1); Result:= ARow * ColCount + ACol; if (Result < 0) or (Result >= FFileView.DisplayFiles.Count) then Result:= -1; end; procedure TThumbDrawGrid.IndexToCell(Index: Integer; out ACol, ARow: Integer); begin if (Index < 0) or (Index >= FFileView.DisplayFiles.Count) or (ColCount = 0) then begin ACol:= -1; ARow:= -1; end else begin ARow:= Index div ColCount; ACol:= Index mod ColCount; end; end; constructor TThumbDrawGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FThumbSize:= gThumbSize; FThumbView:= AParent as TThumbFileView; inherited Create(AOwner, AParent); // Fix horizontal bar flash ScrollBars := ssAutoVertical; Options := Options + [goDontScrollPartCell]; end; procedure TThumbDrawGrid.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Idx: Integer; //shared variables AFile: TDisplayFile; FileSourceDirectAccess: Boolean; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell(aRect: TRect); var iTextTop: Integer; X, Y: Integer; s: string; IconID: PtrInt; Bitmap: TBitmap; begin iTextTop := aRect.Bottom - Canvas.TextHeight('Wg'); IconID := AFile.Tag; if (AFile.FSFile.IsNameValid) and (IconID >= 0) and (IconID < FThumbView.FBitmapList.Count) then begin Bitmap:= FThumbView.FBitmapList[IconID]; X:= aRect.Left + (aRect.Right - aRect.Left - Bitmap.Width) div 2; Y:= aRect.Top + (iTextTop - aRect.Top - Bitmap.Height) div 2; Canvas.Draw(X, Y, Bitmap); end else begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // Center icon X:= aRect.Left + (aRect.Right - aRect.Left - gIconsSize) div 2; Y:= aRect.Top + (iTextTop - aRect.Top - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, X, Y); end; // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + 2, iTextTop - gIconsSize - 2 ); end; s:= AFile.DisplayStrings[0]; s:= FitFileName(s, Canvas, AFile.FSFile, aRect.Width - 4); Canvas.TextOut(aRect.Left + 2, iTextTop - 1, s); Canvas.Pen.Color:= InvertColor(ColorToRGB(gColors.FilePanel^.BackColor)); Canvas.Pen.Width := 1; Canvas.Frame(aRect.Left + 1, aRect.Top + 1, aRect.Right - 1, aRect.Bottom - Canvas.TextHeight('Pp') - 1); end; //of DrawIconCell //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin Idx:= CellToIndex(aCol, aRow); if (Idx >= 0) and (FThumbView.FFiles.Count > 0) then begin AFile:= FThumbView.FFiles[Idx]; FileSourceDirectAccess:= fspDirectAccess in FFileView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then FThumbView.MakeColumnsStrings(AFile); PrepareColors(AFile, aCol, aRow, aRect, aState); if gUseFrameCursor then DrawIconCell(Rect(aRect.Left + gBorderFrameWidth - 1, aRect.Top + gBorderFrameWidth - 1, aRect.Right - gBorderFrameWidth + 1, aRect.Bottom - gBorderFrameWidth + 1)) else DrawIconCell(aRect); end else begin // Draw background. Canvas.Brush.Color := FThumbView.DimColor(gColors.FilePanel^.BackColor); Canvas.FillRect(aRect); end; DrawCellGrid(aCol, aRow, aRect, aState); DrawLines(Idx, aCol, aRow, aRect, aState); end; { TThumbFileView } procedure TThumbFileView.ThumbnailsRetrieverOnAbort(AStart: Integer; AList: TFPList); var ADisplayFile: TDisplayFile; begin while AStart < AList.Count do begin ADisplayFile := TDisplayFile(AList[AStart]); if IsReferenceValid(ADisplayFile) then begin ADisplayFile.Busy:= ADisplayFile.Busy - [bsTag]; end; Inc(AStart); end; end; procedure TThumbFileView.ThumbnailsRetrieverOnUpdate( const UpdatedFile: TDisplayFile; const UserData: Pointer); var OrigDisplayFile: TDisplayFile absolute UserData; begin if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). OrigDisplayFile.Busy:= OrigDisplayFile.Busy - [bsTag]; if UpdatedFile.Tag <> -1 then begin if OrigDisplayFile.Tag = -1 then begin OrigDisplayFile.Tag := UpdatedFile.Tag; RedrawFile(OrigDisplayFile); end // The file was changed while we creating a thumbnail // so we need to request a thumbnail creation again else begin OrigDisplayFile.Tag:= -1; FBitmapList[UpdatedFile.Tag]:= nil; Notify([fvnVisibleFilePropertiesChanged]); end; end; end; procedure TThumbFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); tmMouseScroll.Interval := 200; FBitmapList:= TBitmapList.Create(True); FThumbnailManager:= TThumbnailManager.Create(gColors.FilePanel^.BackColor); end; procedure TThumbFileView.AfterChangePath; begin FBitmapList.Clear; inherited AfterChangePath; end; procedure TThumbFileView.EnsureDisplayProperties; var VisibleFiles: TRange; i: Integer; Bitmap: TBitmap; AFileList: TFVWorkerFileList = nil; Worker: TFileViewWorker; AFile: TDisplayFile; begin if (csDestroying in ComponentState) or (GetCurrentWorkType = fvwtCreate) or IsEmpty then Exit; if fspDirectAccess in FileSource.Properties then begin VisibleFiles := GetVisibleFilesIndexes; if not gListFilesInThread then begin for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.Tag < 0) and AFile.FSFile.IsNameValid then begin Bitmap:= FThumbnailManager.CreatePreview(AFile.FSFile); if Assigned(Bitmap) then begin AFile.Tag := FBitmapList.Add(Bitmap); end; end; end; end else begin try for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.Tag < 0) and AFile.FSFile.IsNameValid and (AFile.Busy * [bsTag] = []) then begin if not Assigned(AFileList) then AFileList := TFVWorkerFileList.Create; AFileList.AddClone(AFile, AFile); AFile.Busy := AFile.Busy + [bsTag]; end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFileThumbnailsRetriever.Create( FileSource, WorkersThread, FBitmapList, @ThumbnailsRetrieverOnUpdate, @ThumbnailsRetrieverOnAbort, FThumbnailManager, AFileList); AddWorker(Worker, True); WorkersThread.QueueFunction(@Worker.StartParam); end; finally AFileList.Free; end; end; end; inherited EnsureDisplayProperties; end; function TThumbFileView.GetFileViewGridClass: TFileViewGridClass; begin Result:= TThumbDrawGrid; end; function TThumbFileView.GetVisibleFilesIndexes: TRange; begin with dgPanel do begin if (TopRow < 0) or (csLoading in ComponentState) then begin Result.First:= 0; Result.Last:= -1; end else begin Result.First:= (TopRow * VisibleColCount - 1); Result.Last:= (TopRow + VisibleRowCount + 1) * VisibleColCount - 1; if Result.First < 0 then Result.First:= 0; if Result.Last >= FFiles.Count then Result.Last:= FFiles.Count - 1; end; end; end; procedure TThumbFileView.ShowRenameFileEdit(var aFile: TFile); begin if not edtRename.Visible then begin edtRename.Font.Name := gFonts[dcfMain].Name; edtRename.Font.Size := gFonts[dcfMain].Size; edtRename.Font.Style := gFonts[dcfMain].Style; UpdateRenameFileEditPosition; end; inherited ShowRenameFileEdit(AFile); end; procedure TThumbFileView.UpdateRenameFileEditPosition(); var ARect: TRect; begin inherited UpdateRenameFileEditPosition; ARect := dgPanel.CellRect(dgPanel.Col, dgPanel.Row); ARect.Top := ARect.Bottom - dgPanel.Canvas.TextHeight('Wg') - 4; if gInplaceRenameButton and (ARect.Right + edtRename.ButtonWidth < dgPanel.ClientWidth) then Inc(ARect.Right, edtRename.ButtonWidth); edtRename.SetBounds(ARect.Left, ARect.Top, ARect.Right - ARect.Left, ARect.Bottom - ARect.Top); end; function TThumbFileView.GetIconRect(FileIndex: PtrInt): TRect; begin Result:= GetFileRect(FileIndex); Result.Right:= Result.Left + (Result.Right - Result.Left) div 4; end; procedure TThumbFileView.MouseScrollTimer(Sender: TObject); var APoint: TPoint; begin if DragManager.IsDragging or IsMouseSelecting then begin APoint := dgPanel.ScreenToClient(Mouse.CursorPos); TThumbDrawGrid(dgPanel).DoMouseMoveScroll(tmMouseScroll, APoint.X, APoint.Y); end; end; procedure TThumbFileView.DoFileChanged(ADisplayFile: TDisplayFile; APropertiesChanged: TFilePropertiesTypes); begin if (APropertiesChanged * [fpSize, fpModificationTime] = []) then Exit; ADisplayFile.Busy := ADisplayFile.Busy - [bsTag]; if InRange(ADisplayFile.Tag, 0, FBitmapList.Count - 1) then begin FBitmapList[ADisplayFile.Tag]:= nil; ADisplayFile.Tag:= -1; end else if ADisplayFile.Tag < 0 then ADisplayFile.Tag:= ADisplayFile.Tag - 1 else begin ADisplayFile.Tag:= -1; end; end; constructor TThumbFileView.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; constructor TThumbFileView.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags); var I: Integer; begin inherited Create(AOwner, AFileView, AFlags); if Assigned(FAllDisplayFiles) then begin // Clear thumbnail image index for I := 0 to FAllDisplayFiles.Count - 1 do FAllDisplayFiles[I].Tag:= -1; // Load thumbnails Notify([fvnVisibleFilePropertiesChanged]); end; end; destructor TThumbFileView.Destroy; begin inherited Destroy; FreeAndNil(FBitmapList); FreeAndNil(FThumbnailManager); end; function TThumbFileView.Clone(NewParent: TWinControl): TThumbFileView; begin Result := TThumbFileView.Create(NewParent, Self); end; procedure TThumbFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'thumbnails'); end; end. doublecmd-1.1.30/src/fileviews/usmoothscrollinggrid.pas0000644000175000001440000000356515104114162022350 0ustar alexxusersunit uSmoothScrollingGrid; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Grids; type { TSmoothScrollingGrid } TSmoothScrollingGrid = class( TDrawGrid ) private _wheelDeltaAccumulator: Array [Boolean] of Integer; private function calcCurrentDelta( isVert: Boolean; WheelDelta: Integer ): Integer; protected function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; function DoMouseWheelHorz(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; end; implementation const WHEEL_DELTA_UNIT = 120; { TSmoothScrollingGrid } function TSmoothScrollingGrid.calcCurrentDelta(isVert: Boolean; WheelDelta: Integer): Integer; begin if ((WheelDelta>0) and (_wheelDeltaAccumulator[isVert]<0)) or ((WheelDelta<0) and (_wheelDeltaAccumulator[isVert]>0)) then _wheelDeltaAccumulator[isVert]:= 0; inc( _wheelDeltaAccumulator[isVert], WheelDelta ); Result:= 0; if _wheelDeltaAccumulator[isVert] >= WHEEL_DELTA_UNIT then Result:= WHEEL_DELTA_UNIT else if _wheelDeltaAccumulator[isVert] <= -WHEEL_DELTA_UNIT then Result:= -WHEEL_DELTA_UNIT; if Result <> 0 then dec( _wheelDeltaAccumulator[isVert], Result ); end; function TSmoothScrollingGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; var currentDelta: Integer; begin Result:= True; currentDelta:= calcCurrentDelta( True, WheelDelta ); if currentDelta <> 0 then Result:= inherited DoMouseWheel(Shift, currentDelta, MousePos); end; function TSmoothScrollingGrid.DoMouseWheelHorz(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; var currentDelta: Integer; begin Result:= True; currentDelta:= calcCurrentDelta( False, WheelDelta ); if currentDelta <> 0 then Result:= inherited DoMouseWheelHorz(Shift, currentDelta, MousePos); end; end. doublecmd-1.1.30/src/fileviews/uorderedfileview.pas0000644000175000001440000007115415104114162021432 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Base class for file views which display an ordered (indexed) list of files Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uOrderedFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, Menus, uTypes, fQuickSearch, uFileView, uFileViewWithPanels, uDisplayFile; const InvalidFileIndex = PtrInt(-1); type { TOrderedFileView } TOrderedFileView = class(TFileViewWithPanels) private pmOperationsCancel: TPopupMenu; procedure lblFilterClick(Sender: TObject); procedure pmOperationsCancelClick(Sender: TObject); procedure quickSearchChangeSearch(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions; InvertSelection: Boolean = False); procedure quickSearchChangeFilter(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions); procedure quickSearchExecute(Sender: TObject); procedure quickSearchHide(Sender: TObject); procedure UpdateRangeSelectionState; protected lblFilter: TLabel; quickSearch: TfrmQuickSearch; FFocusQuickSearch: Boolean; FLastActiveFileIndex: PtrInt; FLastTopRowIndex: PtrInt; FRangeSelecting: Boolean; FRangeSelectionStartIndex: Integer; FRangeSelectionEndIndex: Integer; FRangeSelectionState: Boolean; FUpdatingActiveFile: Boolean; procedure InvertActiveFile; procedure AfterChangePath; override; procedure CreateDefault(AOwner: TWinControl); override; procedure DoFileIndexChanged(NewFileIndex, TopRowIndex: PtrInt); procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); override; procedure DoSelectionChanged; override; overload; procedure DoSelectionChanged(FileIndex: PtrInt); overload; procedure EnsureDisplayProperties; override; function GetActiveDisplayFile: TDisplayFile; override; function GetActiveFileIndex: PtrInt; virtual; abstract; function GetFileRect(FileIndex: PtrInt): TRect; virtual; abstract; function GetVisibleFilesIndexes: TRange; virtual; abstract; function IsFileIndexVisible(FileIndex: PtrInt): Boolean; function IsFileIndexInRange(FileIndex: PtrInt): Boolean; inline; function IsActiveFileVisible: Boolean; {en If marking a single file only redraws that file. Otherwise files are marked and full update is performed. } procedure MarkFilesWithCheck(FromIndex, ToIndex: PtrInt; bSelect: Boolean); procedure RedrawFile(FileIndex: PtrInt); overload; virtual; abstract; {en Search and position in a file that matches name taking into account passed options. } procedure SearchFile(SearchTerm,SeparatorCharset: String; SearchOptions: TQuickSearchOptions; InvertSelection: Boolean = False); procedure Selection(Key: Word; CurIndex: PtrInt); procedure SelectRange(FileIndex: PtrInt); procedure SetActiveFile(FileIndex: PtrInt; ScrollTo: Boolean = True; aLastTopRowIndex: PtrInt = -1); overload; virtual; abstract; procedure SetLastActiveFile(FileIndex, TopRowIndex: PtrInt); {en Sets a file as active if the file currently exists. @returns(@true if the file was found and selected.) } function SetActiveFileNow(aFilePath: String; ScrollTo: Boolean = True; aLastTopRowIndex: PtrInt = -1): Boolean; procedure PropertiesRetrieverOnAbort(AStart: Integer; AList: TFPList); public procedure CloneTo(AFileView: TFileView); override; procedure SetActiveFile(aFilePath: String); override; overload; procedure ChangePathAndSetActiveFile(aFilePath: String); override; overload; procedure SetFocus; override; published // commands procedure cm_QuickSearch(const Params: array of string); procedure cm_QuickFilter(const Params: array of string); procedure cm_GoToFirstEntry(const {%H-}Params: array of string); procedure cm_GoToLastEntry(const {%H-}Params: array of string); procedure cm_GoToNextEntry(const {%H-}Params: array of string); procedure cm_GoToPrevEntry(const {%H-}Params: array of string); procedure cm_GoToFirstFile(const Params: array of string); procedure cm_GoToLastFile(const Params: array of string); end; implementation uses LCLProc, LCLType, math, Forms, Graphics, DCStrUtils, DCOSUtils, uLng, uGlobs, uMasks, uDCUtils, uFileSourceProperty, uPixMapManager, uFileViewWorker, uFileProperty, uFileSource, uFile; const CANCEL_FILTER = 0; CANCEL_OPERATION = 1; { TOrderedFileView } procedure TOrderedFileView.AfterChangePath; begin if Filtered or quickSearch.Visible then begin FFileFilter:= EmptyStr; quickSearch.Finalize; end; FLastActiveFileIndex := -1; inherited AfterChangePath; end; procedure TOrderedFileView.CloneTo(AFileView: TFileView); begin if Assigned(AFileView) then begin inherited CloneTo(AFileView); with AFileView as TOrderedFileView do begin FLastActiveFileIndex := Self.FLastActiveFileIndex; FRangeSelectionStartIndex := Self.FRangeSelectionStartIndex; FRangeSelectionEndIndex := Self.FRangeSelectionEndIndex; FRangeSelectionState := Self.FRangeSelectionState; lblFilter.Caption := Self.lblFilter.Caption; lblFilter.Visible := Self.lblFilter.Visible; Self.quickSearch.CloneTo(quickSearch); FFocusQuickSearch := Self.quickSearch.edtSearch.Focused; end; end; end; procedure TOrderedFileView.cm_GoToFirstEntry(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(0); end; end; procedure TOrderedFileView.cm_GoToLastEntry(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(FFiles.Count - 1); end; end; procedure TOrderedFileView.cm_GoToNextEntry(const Params: array of string); var Index: PtrInt; begin Index:= GetActiveFileIndex + 1; if IsFileIndexInRange(Index) then begin SetActiveFile(Index); end; end; procedure TOrderedFileView.cm_GoToPrevEntry(const Params: array of string); var Index: PtrInt; begin Index:= GetActiveFileIndex - 1; if IsFileIndexInRange(Index) then begin SetActiveFile(Index); end; end; procedure TOrderedFileView.cm_GoToFirstFile(const Params: array of string); var I: Integer; begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; for I:= 0 to FFiles.Count - 1 do if not (FFiles[I].FSFile.IsDirectory or FFiles[I].FSFile.IsLinkToDirectory) then begin SetActiveFile(I); Exit; end; end; end; procedure TOrderedFileView.cm_GoToLastFile(const Params: array of string); var I: Integer; begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; for I:= FFiles.Count - 1 downto 0 do if not (FFiles[I].FSFile.IsDirectory or FFiles[I].FSFile.IsLinkToDirectory) then begin SetActiveFile(I); Exit; end; end; end; procedure TOrderedFileView.cm_QuickFilter(const Params: array of string); begin if not IsLoadingFileList then quickSearch.Execute(qsFilter, Params); end; procedure TOrderedFileView.cm_QuickSearch(const Params: array of string); begin if not IsLoadingFileList then quickSearch.Execute(qsSearch, Params); end; procedure TOrderedFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); FLastActiveFileIndex := -1; FRangeSelectionState := True; lblFilter := TLabel.Create(pnlFooter); lblFilter.Parent := pnlFooter; lblFilter.Align := alRight; lblFilter.Visible := False; lblFilter.OnClick := @lblFilterClick; quickSearch := TfrmQuickSearch.Create(Self); quickSearch.Parent := Self; quickSearch.Visible := False; quickSearch.Align := alBottom; quickSearch.OnChangeSearch := @quickSearchChangeSearch; quickSearch.OnChangeFilter := @quickSearchChangeFilter; quickSearch.OnExecute := @quickSearchExecute; quickSearch.OnHide := @quickSearchHide; pmOperationsCancel := TPopupMenu.Create(Self); pmOperationsCancel.Parent := Self; end; procedure TOrderedFileView.DoFileIndexChanged(NewFileIndex, TopRowIndex: PtrInt); begin if IsFileIndexInRange(NewFileIndex) and ( (FLastActiveFileIndex <> NewFileIndex) or (FLastTopRowIndex <> TopRowIndex) ) then begin if not FRangeSelecting then begin // Set range selection starting point. FRangeSelectionStartIndex := NewFileIndex; FRangeSelectionEndIndex := NewFileIndex; UpdateRangeSelectionState; end; if not FUpdatingActiveFile then begin SetLastActiveFile(NewFileIndex, TopRowIndex); end; if Assigned(OnChangeActiveFile) then OnChangeActiveFile(Self, FFiles[NewFileIndex].FSFile); if FlatView and (FSelectedCount = 0) then UpdateFlatFileName; end; end; procedure TOrderedFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var mi: TMenuItem; begin // check if ShiftState is equal to quick search / filter modes if quickSearch.CheckSearchOrFilter(Key) then Exit; case Key of VK_ESCAPE: begin if quickSearch.Visible and not Filtered then begin quickSearch.Finalize; Key := 0; end; if Filtered and (GetCurrentWorkType <> fvwtNone) then begin pmOperationsCancel.Items.Clear; mi := TMenuItem.Create(pmOperationsCancel); mi.Tag := CANCEL_FILTER; mi.Caption := rsCancelFilter; mi.OnClick := @pmOperationsCancelClick; pmOperationsCancel.Items.Add(mi); mi := TMenuItem.Create(pmOperationsCancel); mi.Tag := CANCEL_OPERATION; mi.Caption := rsCancelOperation; mi.OnClick := @pmOperationsCancelClick; pmOperationsCancel.Items.Add(mi); pmOperationsCancel.PopUp; Key := 0; end else if Filtered then begin quickSearch.Finalize; Key := 0; end else if GetCurrentWorkType <> fvwtNone then begin StopWorkers; Key := 0; end; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TOrderedFileView.DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); var bLoading: Boolean; begin case Key of VK_ESCAPE: if GetCurrentWorkType <> fvwtNone then begin bLoading := IsLoadingFileList; StopWorkers; if bLoading then CancelLastPathChange; Key := 0; end; end; inherited DoHandleKeyDownWhenLoading(Key, Shift); end; procedure TOrderedFileView.DoSelectionChanged; begin inherited DoSelectionChanged; RedrawFiles; UpdateRangeSelectionState; end; procedure TOrderedFileView.DoSelectionChanged(FileIndex: PtrInt); begin inherited DoSelectionChanged; if IsFileIndexInRange(FileIndex) then RedrawFile(FileIndex); UpdateRangeSelectionState; end; procedure TOrderedFileView.EnsureDisplayProperties; var VisibleFiles: TRange; i: Integer; AFileList: TFVWorkerFileList = nil; Worker: TFileViewWorker; AFile: TDisplayFile; HaveIcons: Boolean; DirectAccess: Boolean; AFilePropertiesNeeded: TFilePropertiesTypes; begin if (csDestroying in ComponentState) or (GetCurrentWorkType = fvwtCreate) or IsEmpty then Exit; HaveIcons := gShowIcons <> sim_none; VisibleFiles := GetVisibleFilesIndexes; AFilePropertiesNeeded := FilePropertiesNeeded; DirectAccess := fspDirectAccess in FileSource.Properties; // Property fpComment should be retrieved in main thread if gListFilesInThread and (fpComment in AFilePropertiesNeeded) then begin for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if FileSource.CanRetrieveProperties(AFile.FSFile, [fpComment]) then try FileSource.RetrieveProperties(AFile.FSFile, [fpComment], []); except on EFileNotFound do; end; end; AFilePropertiesNeeded := AFilePropertiesNeeded - [fpComment]; end; if not gListFilesInThread then begin if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, CurrentPath); end; for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if AFile.TextColor = clNone then AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if AFile.FSFile.Name <> '..' then begin if HaveIcons then begin if AFile.IconID < 0 then AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, True, gShowIcons, not gIconOverlays); {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} if gIconOverlays and (AFile.IconOverlayID < 0) then begin AFile.IconOverlayID := PixMapManager.GetIconOverlayByFile(AFile.FSFile, DirectAccess); end; {$ENDIF} end; if FileSource.CanRetrieveProperties(AFile.FSFile, FilePropertiesNeeded) then try FileSource.RetrieveProperties(AFile.FSFile, FilePropertiesNeeded, GetVariantFileProperties); except on EFileNotFound do; end; end; end; end else begin try for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.FSFile.Name <> '..') and (AFile.Busy * [bsProp] = []) and (FileSource.CanRetrieveProperties(AFile.FSFile, AFilePropertiesNeeded) or (AFile.TextColor = clNone) or (HaveIcons and ((AFile.IconID < 0) {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} or (gIconOverlays and (AFile.IconOverlayID < 0)) {$ENDIF} ))) then begin if not Assigned(AFileList) then AFileList := TFVWorkerFileList.Create; AFileList.AddClone(AFile, AFile); AFile.Busy := AFile.Busy + [bsProp]; end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFilePropertiesRetriever.Create( FileSource, WorkersThread, AFilePropertiesNeeded, GetVariantFileProperties, @PropertiesRetrieverOnUpdate, @PropertiesRetrieverOnAbort, AFileList); AddWorker(Worker, False); WorkersThread.QueueFunction(@Worker.StartParam); end; finally AFileList.Free; end; end; end; function TOrderedFileView.GetActiveDisplayFile: TDisplayFile; var Index: PtrInt; begin Index := GetActiveFileIndex; if IsFileIndexInRange(Index) then Result := FFiles[Index] else Result := nil; end; function TOrderedFileView.IsFileIndexVisible(FileIndex: PtrInt): Boolean; var VisibleFiles: TRange; begin VisibleFiles := GetVisibleFilesIndexes; Result := InRange(FileIndex, VisibleFiles.First, VisibleFiles.Last); end; function TOrderedFileView.IsFileIndexInRange(FileIndex: PtrInt): Boolean; begin Result := InRange(FileIndex, 0, FFiles.Count - 1); end; function TOrderedFileView.IsActiveFileVisible: Boolean; begin Result := IsFileIndexVisible(GetActiveFileIndex); end; procedure TOrderedFileView.lblFilterClick(Sender: TObject); begin quickSearch.Execute(qsFilter, []); end; procedure TOrderedFileView.MarkFilesWithCheck(FromIndex, ToIndex: PtrInt; bSelect: Boolean); begin if FromIndex = ToIndex then begin MarkFile(FFiles[FromIndex], bSelect, False); DoSelectionChanged(FromIndex); end else MarkFiles(FromIndex, ToIndex, bSelect); end; procedure TOrderedFileView.pmOperationsCancelClick(Sender: TObject); begin if (Sender is TMenuItem) then begin case (Sender as TMenuItem).Tag of CANCEL_FILTER: quickSearch.Finalize; CANCEL_OPERATION: StopWorkers; end; end; end; procedure TOrderedFileView.quickSearchChangeFilter(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions); begin if not ((FFileFilter = '') and (AFilterText = '')) then Active := True; // position in file before filtering, otherwise position could be lost if // current file is filtered out causing jumps SearchFile(AFilterText,';,', AFilterOptions); SetFileFilter(AFilterText, AFilterOptions); lblFilter.Caption := Format('(%s: %s)', [rsFilterStatus, AFilterText]); lblFilter.Visible := Filtered; end; procedure TOrderedFileView.quickSearchChangeSearch(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions; InvertSelection: Boolean = False); var Index, MaybeFoundIndex: PtrInt; begin Index:=GetActiveFileIndex; Active := True; SearchFile(ASearchText,';, ', ASearchOptions, InvertSelection); MaybeFoundIndex:=GetActiveFileIndex; if (MaybeFoundIndex <= Index) AND (ASearchOptions.CancelSearchMode=qscmCancelIfNoFound) then begin SetActiveFile(Index-1); quickSearch.Finalize; end else begin lblFilter.Caption := Format('(%s: %s)', [rsSearchStatus, ASearchText]); lblFilter.Visible := (ASearchText<>EmptyStr); end; end; procedure TOrderedFileView.quickSearchExecute(Sender: TObject); begin Active := True; ChooseFile(GetActiveDisplayFile); end; procedure TOrderedFileView.quickSearchHide(Sender: TObject); begin if CanFocus then SetFocus; end; procedure TOrderedFileView.SearchFile(SearchTerm,SeparatorCharset: String; SearchOptions: TQuickSearchOptions; InvertSelection: Boolean); var I, Index, StopIndex, ActiveIndex: PtrInt; S: String; NewSelectedState, FirstFound, Result: Boolean; sFileName : String; AFile: TFile; Masks: TMaskList; AOptions: TMaskOptions = [moPinyin]; function NextIndexWrap(Index: PtrInt): PtrInt; begin Result := Index + 1; if Result = FFiles.Count then Result := 0; end; function PrevIndexWrap(Index: PtrInt): PtrInt; begin Result := Index - 1; if Result < 0 then Result := FFiles.Count - 1; end; begin if IsEmpty then Exit; Index := GetActiveFileIndex; // start search from current position if not IsFileIndexInRange(Index) then begin Index := 0; InvertSelection := False; end; if InvertSelection then begin ActiveIndex := Index; FirstFound := False; NewSelectedState := not FFiles[Index].Selected; MarkFile(FFiles[Index], NewSelectedState, False); DoSelectionChanged(Index); end; case SearchOptions.Direction of qsdFirst: Index := 0; // begin search from first file qsdLast: Index := FFiles.Count - 1; // begin search from last file qsdNext: Index := NextIndexWrap(Index); // begin search from next file qsdPrevious: Index := PrevIndexWrap(Index); // begin search from previous file end; StopIndex := Index; try if (SearchOptions.SearchCase = qscSensitive) then AOptions += [moCaseSensitive]; Masks:= TMaskList.Create(SearchTerm, ';,', AOptions); for I := 0 to Masks.Count - 1 do begin S:= Masks.Items[I].Template; S:= TFileListBuilder.PrepareFilter(S, SearchOptions); Masks.Items[I].Template:= S; end; try repeat Result := True; AFile := FFiles[Index].FSFile; if (SearchOptions.Items = qsiFiles) and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := False; if (SearchOptions.Items = qsiDirectories) and not AFile.IsDirectory and not AFile.IsLinkToDirectory then Result := False; sFileName := AFile.Name; // Match the file name and Pinyin letter if not (Masks.Matches(sFileName)) then Result := False; if Result then begin if InvertSelection and (SearchOptions.Direction in [qsdFirst, qsdLast]) then begin if not FirstFound then begin FirstFound := True; SetActiveFile(Index); if ((SearchOptions.Direction = qsdFirst) and (Index < ActiveIndex) or (SearchOptions.Direction = qsdLast) and (Index > ActiveIndex)) then StopIndex := ActiveIndex // continue to mark files until the starting index else break; end; MarkFile(FFiles[Index], NewSelectedState, False); DoSelectionChanged(Index); end else begin SetActiveFile(Index); Break; end; end; // check next file depending on search direction if SearchOptions.Direction in [qsdNone, qsdFirst, qsdNext] then Index := NextIndexWrap(Index) else Index := PrevIndexWrap(Index); until Index = StopIndex; finally Masks.Free; end; except on EConvertError do; // bypass else raise; end; end; procedure TOrderedFileView.Selection(Key: Word; CurIndex: PtrInt); procedure OneLess; begin if CurIndex > FRangeSelectionStartIndex then Dec(CurIndex) else if CurIndex < FRangeSelectionStartIndex then Inc(CurIndex); end; begin // Key value doesn't neccessarily matter. // It just needs to correspond to scroll positions (similar to TScrollCode). case Key of VK_HOME, VK_END: ; VK_PRIOR, VK_UP, VK_LEFT: if CurIndex > 0 then OneLess; VK_NEXT, VK_DOWN, VK_RIGHT: if CurIndex < FFiles.Count - 1 then OneLess; else Exit; end; SelectRange(CurIndex); end; procedure TOrderedFileView.SelectRange(FileIndex: PtrInt); begin // Initially select file at starting point. if FRangeSelectionStartIndex = FRangeSelectionEndIndex then MarkFilesWithCheck(FRangeSelectionStartIndex, FRangeSelectionEndIndex, FRangeSelectionState); if FileIndex <> FRangeSelectionEndIndex then begin if FileIndex < FRangeSelectionStartIndex then begin // Focused file is before selection startpoint. // If previously selection was from startpoint forwards deselect all files after startpoint. if FRangeSelectionEndIndex > FRangeSelectionStartIndex then begin MarkFilesWithCheck(FRangeSelectionStartIndex + 1, FRangeSelectionEndIndex, not FRangeSelectionState); FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; if FileIndex > FRangeSelectionEndIndex then // Decrease selection range. MarkFilesWithCheck(FRangeSelectionEndIndex, FileIndex - 1, not FRangeSelectionState) else if FileIndex < FRangeSelectionEndIndex then // Increase selection range. MarkFilesWithCheck(FileIndex, FRangeSelectionEndIndex - 1, FRangeSelectionState); end else begin // Focused file is after selection startpoint. // If previously selection was from startpoint backwards deselect all files before startpoint. if FRangeSelectionEndIndex < FRangeSelectionStartIndex then begin MarkFilesWithCheck(FRangeSelectionEndIndex, FRangeSelectionStartIndex - 1, not FRangeSelectionState); FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; if FileIndex > FRangeSelectionEndIndex then // Increase selection range. MarkFilesWithCheck(FRangeSelectionEndIndex + 1, FileIndex, FRangeSelectionState) else if FileIndex < FRangeSelectionEndIndex then // Decrease selection range. MarkFilesWithCheck(FileIndex + 1, FRangeSelectionEndIndex, not FRangeSelectionState); end; FRangeSelectionEndIndex := FileIndex; end; end; procedure TOrderedFileView.SetActiveFile(aFilePath: String); begin if GetCurrentWorkType = fvwtCreate then begin // File list is currently loading - remember requested file for later. RequestedActiveFile := aFilePath; end else begin // First try to select the file in the current file list. // If not found save it for later selection (possibly after reload). if SetActiveFileNow(aFilePath) then RequestedActiveFile := '' else RequestedActiveFile := aFilePath; end; end; procedure TOrderedFileView.ChangePathAndSetActiveFile(aFilePath: String); begin if not mbFileExists(aFilePath) then CurrentPath := aFilePath else begin CurrentPath := ExtractFileDir(aFilePath); SetActiveFile(ExtractFileName(aFilePath)); end; end; procedure TOrderedFileView.SetFocus; begin inherited SetFocus; if FFocusQuickSearch then begin FFocusQuickSearch := False; if quickSearch.Visible then quickSearch.edtSearch.SetFocus; end; end; function TOrderedFileView.SetActiveFileNow(aFilePath: String; ScrollTo: Boolean; aLastTopRowIndex: PtrInt): Boolean; procedure SetUpdate(Index: PtrInt); begin FUpdatingActiveFile := True; SetActiveFile(Index, ScrollTo, aLastTopRowIndex); FUpdatingActiveFile := False; SetLastActiveFile(Index, aLastTopRowIndex); end; var APath: String; Index: PtrInt; PathIsAbsolute: Boolean; begin if aFilePath <> '' then // find correct cursor position in Panel (drawgrid) begin PathIsAbsolute := FileSource.GetPathType(aFilePath) = ptAbsolute; for Index := 0 to FFiles.Count - 1 do begin if PathIsAbsolute then Result := (FFiles[Index].FSFile.FullPath = aFilePath) else Result := (FFiles[Index].FSFile.Name = aFilePath); if Result then begin SetUpdate(Index); if Assigned(OnChangeActiveFile) then OnChangeActiveFile(Self, FFiles[Index].FSFile); Exit(True); end; end; if (FLastActiveFileIndex > -1) then begin if (StrBegins(LastActiveFile, CurrentAddress)) then APath:= CurrentLocation else begin APath:= CurrentPath; end; if FlatView or IsInPath(APath, LastActiveFile, False, False) then begin if (PathIsAbsolute and mbCompareFileNames(LastActiveFile, aFilePath)) or (FlatView) or (mbCompareFileNames(LastActiveFile, CurrentPath + aFilePath)) then begin if FLastActiveFileIndex < FFiles.Count then SetUpdate(FLastActiveFileIndex) else begin SetUpdate(FFiles.Count - 1); end; if Assigned(OnChangeActiveFile) then OnChangeActiveFile(Self, FFiles[FLastActiveFileIndex].FSFile); end; end; end; end; Result := False; end; procedure TOrderedFileView.PropertiesRetrieverOnAbort(AStart: Integer; AList: TFPList); var ADisplayFile: TDisplayFile; begin while AStart < AList.Count do begin ADisplayFile := TDisplayFile(AList[AStart]); if IsReferenceValid(ADisplayFile) then begin ADisplayFile.Busy:= ADisplayFile.Busy - [bsProp]; end; Inc(AStart); end; end; procedure TOrderedFileView.SetLastActiveFile(FileIndex, TopRowIndex: PtrInt); begin if IsFileIndexInRange(FileIndex) then begin LastActiveFile := FFiles[FileIndex].FSFile.FullPath; FLastActiveFileIndex := FileIndex; FLastTopRowIndex := TopRowIndex; end; end; procedure TOrderedFileView.UpdateRangeSelectionState; var NewSelectionState: Boolean; begin if not FRangeSelecting then begin if IsFileIndexInRange(FRangeSelectionStartIndex) then begin NewSelectionState := not FFiles[FRangeSelectionStartIndex].Selected; if (FRangeSelectionState <> NewSelectionState) and (FRangeSelectionStartIndex = FRangeSelectionEndIndex) then begin // Selection of starting point has changed. end else begin // Update was called but selection of starting point didn't change. // That means some other file's selection changed - reset starting point. FRangeSelectionStartIndex := GetActiveFileIndex; FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; FRangeSelectionState := NewSelectionState; end; end; end; procedure TOrderedFileView.InvertActiveFile; var Index: PtrInt; begin if IsActiveItemValid then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin InvertFileSelection(FFiles[Index], False); DoSelectionChanged(Index); end; end; end; end. doublecmd-1.1.30/src/fileviews/ufileviewworker.pas0000644000175000001440000007755515104114162021332 0ustar alexxusersunit uFileViewWorker; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, syncobjs, DCStringHashListUtf8, uDisplayFile, uFile, uFileSource, uFileSorting, uFileProperty, DCBasicTypes, uFileSourceOperation, uFileSourceListOperation, fQuickSearch,uMasks; type TFileViewWorkType = (fvwtNone, fvwtCreate, // Creates file list fvwtUpdate); // Updates file list TFileViewWorker = class; TStartingWorkMethod = procedure (const Worker: TFileViewWorker) of object; TFinishedWorkMethod = procedure (const Worker: TFileViewWorker) of object; { TFileViewWorker } TFileViewWorker = class strict private FAborted: Boolean; {en After FCanBeDestroyed is set to True the worker may be destroyed.} FCanBeDestroyed: Boolean; FWorking: Boolean; FOnStarting: TStartingWorkMethod; FOnFinished: TFinishedWorkMethod; FThread: TThread; procedure DoFinished; procedure DoStarting; protected FWorkType: TFileViewWorkType; procedure DoneWorking; procedure Execute; virtual; abstract; function IsWorking: Boolean; virtual; property Thread: TThread read FThread; public constructor Create(AThread: TThread); virtual; procedure Abort; virtual; procedure Start; procedure StartParam(Params: Pointer); property Aborted: Boolean read FAborted; property CanBeDestroyed: Boolean read FCanBeDestroyed; property OnFinished: TFinishedWorkMethod read FOnFinished write FOnFinished; property OnStarting: TStartingWorkMethod read FOnStarting write FOnStarting; property Working: Boolean read IsWorking; property WorkType: TFileViewWorkType read FWorkType; end; TFVWorkerFileList = class private FFiles: TFPObjectList; FUserData: TFPList; function GetCount: Integer; function GetFile(Index: Integer): TDisplayFile; function GetData(Index: Integer): Pointer; public constructor Create; destructor Destroy; override; function AddClone(const AFile: TDisplayFile; UserData: Pointer): Integer; property Count: Integer read GetCount; property Files[Index: Integer]: TDisplayFile read GetFile; property Data[Index: Integer]: Pointer read GetData; property UserData: TFPList read FUserData; end; TSetFileListMethod = procedure (var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles) of object; TUpdateFileMethod = procedure (const UpdatedFile: TDisplayFile; const UserData: Pointer) of object; TAbortFileMethod = procedure (AStart: Integer; AList: TFPList) of object; { TFileListBuilder } TFileListBuilder = class(TFileViewWorker) private FFilteredDisplayFiles: TDisplayFiles; FAllDisplayFiles: TDisplayFiles; FExistingDisplayFilesHashed: TStringHashListUtf8; FSetFileListMethod: TSetFileListMethod; FListOperation: TFileSourceListOperation; FListOperationLock: TCriticalSection; // Data captured from the file view before start. FFileSource: IFileSource; FFileSourceIndex: Integer; FFileFilter: String; FFilterOptions: TQuickSearchOptions; FCurrentPath: String; FFlatView: Boolean; FSortings: TFileSortings; FVariantProperties: TDynamicStringArray; FFilePropertiesNeeded: TFilePropertiesTypes; {en Calls the update method with the new built lists. It is called from GUI thread. } procedure DoSetFileList; class function InternalMatchesFilter(aFile: TFile; const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean;overload; class function InternalMatchesFilter(aFile: TFile; const aMasks: TMaskList; const aFilterOptions: TQuickSearchOptions): Boolean;overload; protected {en Retrieves file list from file source, sorts and creates a display file list. It may be run from a worker thread so it cannot access GUI directly. } procedure Execute; override; public constructor Create(AFileSource: IFileSource; AFileSourceIndex: Integer; const AFileFilter: String; const AFilterOptions: TQuickSearchOptions; const ACurrentPath: String; const ASorting: TFileSortings; AFlatView: Boolean; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AVariantProperties: TDynamicStringArray; ASetFileListMethod: TSetFileListMethod; var ExistingDisplayFiles: TDisplayFiles; var ExistingDisplayFilesHashed: TStringHashListUtf8); reintroduce; destructor Destroy; override; procedure Abort; override; {en Prepare filter string based on options. } class function PrepareFilter(const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): String; {en Fills aFiles with files from aFileSourceFiles. Filters out any files that shouldn't be shown using aFileFilter. } class procedure MakeDisplayFileList(allDisplayFiles: TDisplayFiles; filteredDisplayFiles: TDisplayFiles; aFileFilter: String; const aFilterOptions: TQuickSearchOptions); class procedure MakeAllDisplayFileList(aFileSource: IFileSource; aFileSourceFiles: TFiles; aDisplayFiles: TDisplayFiles; const aSortings: TFileSortings); class procedure MakeAllDisplayFileList(aFileSource: IFileSource; aFileSourceFiles: TFiles; aExistingDisplayFiles: TDisplayFiles; const aSortings: TFileSortings; aExistingDisplayFilesHashed: TStringHashListUtf8); class function MatchesFilter(aFile: TFile; aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; end; { TFilePropertiesRetriever } TFilePropertiesRetriever = class(TFileViewWorker) private FIndex: Integer; FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FUpdateFileMethod: TUpdateFileMethod; FAbortFileMethod: TAbortFileMethod; FFileSource: IFileSource; FVariantProperties: TDynamicStringArray; FFilePropertiesNeeded: TFilePropertiesTypes; {en Updates file in the file view with new data from FWorkerData. It is called from GUI thread. } procedure DoUpdateFile; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AVariantProperties: TDynamicStringArray; AUpdateFileMethod: TUpdateFileMethod; ABreakFileMethod: TAbortFileMethod; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; procedure Abort; override; end; { TCalculateSpaceWorker } TCalculateSpaceWorker = class(TFileViewWorker) private FWorkingIndex: Integer; FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FCompletedCalculations: Integer; FUpdateFileMethod: TUpdateFileMethod; FFileSource: IFileSource; FOperation: TFileSourceOperation; FOperationLock: TCriticalSection; {en Updates file in the file view with new data. It is called from GUI thread. } procedure DoUpdateFile; procedure DoUpdateFolders; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; procedure Abort; override; property CompletedCalculations: Integer read FCompletedCalculations; end; {$IFDEF timeFileView} var filelistTime, filelistPrevTime, filelistLoaderTime: QWord; {$ENDIF} implementation uses {$IFDEF timeFileView} uDebug, {$ENDIF} LCLProc, Graphics, DCFileAttributes, uFileSourceOperationTypes, uOSUtils, DCStrUtils, uDCUtils, uExceptions, uGlobs, uPixMapManager, uFileSourceProperty, uFileSourceCalcStatisticsOperation, uFileSourceOperationOptions; {$IFDEF timeFileView} procedure filelistPrintTime(const AMessage: String); inline; begin filelistTime:= GetTickCount64; DCDebug(AMessage + IntToStr(filelistTime - filelistLoaderTime) + ', offset ' + IntToStr(filelistTime - filelistPrevTime)); filelistPrevTime:= filelistTime; end; {$ENDIF} { TFVWorkerFileList } constructor TFVWorkerFileList.Create; begin FFiles := TFPObjectList.Create(True); FUserData := TFPList.Create; inherited; end; destructor TFVWorkerFileList.Destroy; begin inherited; FFiles.Free; FUserData.Free; end; function TFVWorkerFileList.AddClone(const AFile: TDisplayFile; UserData: Pointer): Integer; var ClonedFile: TDisplayFile; begin ClonedFile := AFile.Clone(True); Result := FFiles.Add(ClonedFile); FUserData.Add(UserData); end; function TFVWorkerFileList.GetCount: Integer; begin Result := FFiles.Count; end; function TFVWorkerFileList.GetFile(Index: Integer): TDisplayFile; begin Result := TDisplayFile(FFiles.Items[Index]); end; function TFVWorkerFileList.GetData(Index: Integer): Pointer; begin Result := FUserData.Items[Index]; end; { TFileViewWorker } constructor TFileViewWorker.Create(AThread: TThread); begin // Set Working=True on creation because these workers are usually scheduled // to run by a non-main thread, so it might take a while for Execute to be called. FWorking := True; FWorkType := fvwtNone; FThread := AThread; end; procedure TFileViewWorker.Abort; begin FAborted := True; end; procedure TFileViewWorker.DoFinished; begin FWorking := False; try FOnFinished(Self); except on e: Exception do HandleException(e); end; end; procedure TFileViewWorker.DoStarting; begin try FOnStarting(Self); except on e: Exception do HandleException(e); end; end; procedure TFileViewWorker.DoneWorking; begin FWorking := False; end; function TFileViewWorker.IsWorking: Boolean; begin Result := FWorking and not FAborted; end; procedure TFileViewWorker.Start; begin try if not Aborted then begin if Assigned(FOnStarting) then TThread.Synchronize(Thread, @DoStarting); if not Aborted then Execute; // virtual call if Assigned(FOnFinished) then TThread.Synchronize(Thread, @DoFinished); end; finally FWorking := False; FCanBeDestroyed := True; end; end; procedure TFileViewWorker.StartParam(Params: Pointer); begin Start; end; { TFileListBuilder } constructor TFileListBuilder.Create(AFileSource: IFileSource; AFileSourceIndex: Integer; const AFileFilter: String; const AFilterOptions: TQuickSearchOptions; const ACurrentPath: String; const ASorting: TFileSortings; AFlatView: Boolean; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AVariantProperties: TDynamicStringArray; ASetFileListMethod: TSetFileListMethod; var ExistingDisplayFiles: TDisplayFiles; var ExistingDisplayFilesHashed: TStringHashListUtf8); begin inherited Create(AThread); FAllDisplayFiles := ExistingDisplayFiles; ExistingDisplayFiles := nil; FExistingDisplayFilesHashed := ExistingDisplayFilesHashed; ExistingDisplayFilesHashed := nil; FWorkType := fvwtCreate; FListOperation := nil; FListOperationLock := TCriticalSection.Create; FFileSource := AFileSource; FFileSourceIndex := AFileSourceIndex; FFlatView := AFlatView; FFileFilter := AFileFilter; FFilterOptions := AFilterOptions; FCurrentPath := ACurrentPath; FSortings := CloneSortings(ASorting); FVariantProperties := AVariantProperties; FFilePropertiesNeeded := AFilePropertiesNeeded; FSetFileListMethod := ASetFileListMethod; end; destructor TFileListBuilder.Destroy; begin inherited Destroy; FListOperationLock.Free; FExistingDisplayFilesHashed.Free; FFilteredDisplayFiles.Free; FAllDisplayFiles.Free; end; procedure TFileListBuilder.Abort; begin inherited; FListOperationLock.Acquire; try if Assigned(FListOperation) then FListOperation.Stop; finally FListOperationLock.Release; end; end; procedure TFileListBuilder.Execute; var AFile: TFile; I: Integer; HaveUpDir: Boolean = False; FileSourceFiles: TFiles = nil; begin try if Aborted then Exit; if fsoList in FFileSource.GetOperationsTypes then begin FListOperationLock.Acquire; try FListOperation := FFileSource.CreateListOperation(FCurrentPath) as TFileSourceListOperation; finally FListOperationLock.Release; end; if Assigned(FListOperation) then try FListOperation.FlatView := FFlatView; FListOperation.AssignThread(Thread); FListOperation.Execute; if FListOperation.Result = fsorFinished then FileSourceFiles := FListOperation.ReleaseFiles; finally FListOperationLock.Acquire; try FreeAndNil(FListOperation); finally FListOperationLock.Release; end; end; end; {$IFDEF timeFileView} filelistPrintTime('Loaded files : '); {$ENDIF} if Aborted then Exit; if Assigned(FileSourceFiles) then begin // Check if up-dir '..' is present. // If it is present it will usually be the first file. for i := 0 to FileSourceFiles.Count - 1 do begin if FileSourceFiles[i].Name = '..' then begin HaveUpDir := True; Break; end; end; if (not HaveUpDir) and ((not FFileSource.IsPathAtRoot(FCurrentPath)) or // Add '..' to go to higher level file source, if there is more than one. ((FFileSourceIndex > 0) and not (fspNoneParent in FFileSource.Properties))) then begin AFile := FFileSource.CreateFileObject(FCurrentPath); AFile.Name := '..'; if fpAttributes in AFile.SupportedProperties then begin if AFile.AttributesProperty is TNtfsFileAttributesProperty then AFile.Attributes := FILE_ATTRIBUTE_DIRECTORY else if AFile.AttributesProperty is TUnixFileAttributesProperty then AFile.Attributes := S_IFDIR else AFile.Attributes := faFolder; end; FileSourceFiles.Insert(AFile, 0); end; end; if Aborted then Exit; // Retrieve RetrievableFileProperties which used in sorting if FFilePropertiesNeeded <> [] then begin for I:= 0 to FileSourceFiles.Count - 1 do FFileSource.RetrieveProperties(FileSourceFiles[I], FFilePropertiesNeeded, FVariantProperties); end; // Make display file list from file source file list. if Assigned(FAllDisplayFiles) and Assigned(FExistingDisplayFilesHashed) then begin // Updating existing list. MakeAllDisplayFileList( FFileSource, FileSourceFiles, FAllDisplayFiles, FSortings, FExistingDisplayFilesHashed); end else begin // Creating new list. if Assigned(FAllDisplayFiles) then FAllDisplayFiles.Clear else FAllDisplayFiles := TDisplayFiles.Create(True); MakeAllDisplayFileList(FFileSource, FileSourceFiles, FAllDisplayFiles, FSortings); end; // By now the TFile objects have been transfered to FAllDisplayFiles. if Assigned(FileSourceFiles) then FileSourceFiles.OwnsObjects := False; {$IFDEF timeFileView} filelistPrintTime('Made sorted disp.lst: '); {$ENDIF} FFilteredDisplayFiles := TDisplayFiles.Create(False); MakeDisplayFileList(FAllDisplayFiles, FFilteredDisplayFiles, FFileFilter, FFilterOptions); {$IFDEF timeFileView} filelistPrintTime('Made filtered list : '); {$ENDIF} if Aborted then Exit; // Loading file list is complete. Update grid with the new file list. TThread.Synchronize(Thread, @DoSetFilelist); {$IFDEF timeFileView} filelistPrintTime('Grid files updated : '); {$ENDIF} finally {$IFDEF timeFileView} filelistPrintTime('Finished : '); {$ENDIF} FreeAndNil(FFilteredDisplayFiles); FreeAndNil(FileSourceFiles); FreeAndNil(FAllDisplayFiles); end; end; class function TFileListBuilder.InternalMatchesFilter(aFile: TFile; const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; const ACaseSensitive: array[Boolean] of TMaskOptions = ([], [moCaseSensitive]); begin if (gShowSystemFiles = False) and AFile.IsSysFile and (AFile.Name <> '..') then Result := True // Ignore list else if gIgnoreListFileEnabled and MatchesMaskListEx(AFile, glsIgnoreList) then Result := True // Filter files. else if aFileFilter <> EmptyStr then begin Result := True; if (AFile.Name = '..') or (AFile.Name = '.') then Result := False else if (aFilterOptions.Items = qsiFiles) and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := False else if (aFilterOptions.Items = qsiDirectories) and not AFile.IsDirectory and not AFile.IsLinkToDirectory then Result := False else begin if MatchesMask(AFile.Name, aFileFilter, ACaseSensitive[aFilterOptions.SearchCase = qscSensitive]) then Result := False; end; end else Result := False; end; class function TFileListBuilder.InternalMatchesFilter(aFile: TFile; const aMasks: TMaskList; const aFilterOptions: TQuickSearchOptions): Boolean; begin if (gShowSystemFiles = False) and AFile.IsSysFile and (AFile.Name <> '..') then Result := True // Ignore list else if gIgnoreListFileEnabled and MatchesMaskListEx(AFile, glsIgnoreList) then Result := True // Filter files. else if aMasks.Count <> 0 then begin Result := True; if (AFile.Name = '..') or (AFile.Name = '.') then Result := False else if (aFilterOptions.Items = qsiFiles) and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := False else if (aFilterOptions.Items = qsiDirectories) and not AFile.IsDirectory and not AFile.IsLinkToDirectory then Result := False else begin // Match the file name and Pinyin letter if aMasks.Matches(AFile.Name) then Result := False; end; end else Result := False; end; class function TFileListBuilder.PrepareFilter(const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): String; var Index: Integer; sFileExt: String; sFilterNameNoExt: String; begin Result := aFileFilter; if Result <> EmptyStr then begin Index:= Pos('.', Result); if (Index > 0) and ((Index > 1) or FirstDotAtFileNameStartIsExtension) then begin sFileExt := ExtractFileExt(Result); sFilterNameNoExt := ExtractOnlyFileName(Result); if not (qsmBeginning in aFilterOptions.Match) then sFilterNameNoExt := '*' + sFilterNameNoExt; if not (qsmEnding in aFilterOptions.Match) then sFilterNameNoExt := sFilterNameNoExt + '*'; Result := sFilterNameNoExt + sFileExt + '*'; end else begin if not (qsmBeginning in aFilterOptions.Match) then Result := '*' + Result; Result := Result + '*'; end; end; end; class procedure TFileListBuilder.MakeDisplayFileList( allDisplayFiles: TDisplayFiles; filteredDisplayFiles: TDisplayFiles; aFileFilter: String; const aFilterOptions: TQuickSearchOptions); var S: String; I: Integer; AFile: TFile; AFilter: Boolean; Masks: TMaskList; AOptions: TMaskOptions = [moPinyin]; begin filteredDisplayFiles.Clear; if qscSensitive in [aFilterOptions.SearchCase] then AOptions += [moCaseSensitive]; if Assigned(allDisplayFiles) then try Masks:= TMaskList.Create(aFileFilter, ';,', AOptions); for I := 0 to Masks.Count - 1 do begin S:= Masks.Items[I].Template; S:= PrepareFilter(S, aFilterOptions); Masks.Items[I].Template:= S; end; for I := 0 to allDisplayFiles.Count - 1 do begin AFile := allDisplayFiles[I].FSFile; try AFilter := InternalMatchesFilter(AFile, Masks, aFilterOptions); except on EConvertError do aFileFilter := EmptyStr; end; if not AFilter then filteredDisplayFiles.Add(allDisplayFiles[I]); end; finally Masks.Free; end; end; class procedure TFileListBuilder.MakeAllDisplayFileList( aFileSource: IFileSource; aFileSourceFiles: TFiles; aDisplayFiles: TDisplayFiles; const aSortings: TFileSortings); var i: PtrInt; AFile: TDisplayFile; HaveIcons: Boolean; DirectAccess: Boolean; begin aDisplayFiles.Clear; if Assigned(aFileSourceFiles) then begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in aFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, aFileSourceFiles.Path); end; for i := 0 to aFileSourceFiles.Count - 1 do begin AFile := TDisplayFile.Create(aFileSourceFiles[i]); AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if HaveIcons then begin AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, not gLoadIconsSeparately, gShowIcons, not gIconOverlays); end; aDisplayFiles.Add(AFile); end; TDisplayFileSorter.Sort(aDisplayFiles, aSortings); end; end; class procedure TFileListBuilder.MakeAllDisplayFileList( aFileSource: IFileSource; aFileSourceFiles: TFiles; aExistingDisplayFiles: TDisplayFiles; const aSortings: TFileSortings; aExistingDisplayFilesHashed: TStringHashListUtf8); var i: PtrInt; j: Integer; AFile: TDisplayFile; aNewFiles: TDisplayFiles; HaveIcons: Boolean; DirectAccess: Boolean; begin if Assigned(aFileSourceFiles) then begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in aFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, aFileSourceFiles.Path); end; aNewFiles := TDisplayFiles.Create(False); try for i := 0 to aFileSourceFiles.Count - 1 do begin j := aExistingDisplayFilesHashed.Find(aFileSourceFiles[i].FullPath); if j >= 0 then begin // Existing file. AFile := TDisplayFile(aExistingDisplayFilesHashed.List[j]^.Data); AFile.FSFile := aFileSourceFiles[i]; end else begin AFile := TDisplayFile.Create(aFileSourceFiles[i]); AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if HaveIcons then begin AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, not gLoadIconsSeparately, gShowIcons, not gIconOverlays); end; // New file. aNewFiles.Add(AFile); end; end; // Remove files that don't exist anymore. for i := aExistingDisplayFiles.Count - 1 downto 0 do begin if not Assigned(aExistingDisplayFiles[i].FSFile) then aExistingDisplayFiles.Delete(i); end; // Merge new files into existing files list. TDisplayFileSorter.InsertSort(aNewFiles, aExistingDisplayFiles, aSortings); finally aNewFiles.Free; end; end else begin aExistingDisplayFiles.Clear; end; end; class function TFileListBuilder.MatchesFilter(aFile: TFile; aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; begin aFileFilter := PrepareFilter(aFileFilter, aFilterOptions); try Result := InternalMatchesFilter(AFile, aFileFilter, aFilterOptions); except on EConvertError do Result := False; end; end; procedure TFileListBuilder.DoSetFileList; begin DoneWorking; if not Aborted and Assigned(FSetFileListMethod) then FSetFileListMethod(FAllDisplayFiles, FFilteredDisplayFiles); end; { TFilePropertiesRetriever } constructor TFilePropertiesRetriever.Create(AFileSource: IFileSource; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AVariantProperties: TDynamicStringArray; AUpdateFileMethod: TUpdateFileMethod; ABreakFileMethod: TAbortFileMethod; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FVariantProperties := AVariantProperties; FFilePropertiesNeeded := AFilePropertiesNeeded; FUpdateFileMethod := AUpdateFileMethod; FAbortFileMethod := ABreakFileMethod; end; destructor TFilePropertiesRetriever.Destroy; begin FFileList.Free; inherited Destroy; end; procedure TFilePropertiesRetriever.Abort; begin inherited Abort; if Assigned(FAbortFileMethod) then begin FAbortFileMethod(FIndex, FFileList.FUserData); end; end; procedure TFilePropertiesRetriever.Execute; var HaveIcons: Boolean; DirectAccess: Boolean; begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in FFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, FFileList.Files[0].FSFile.Path); end; while (FIndex < FFileList.Count) and (Aborted = False) do begin try FWorkingFile := FFileList.Files[FIndex]; FWorkingUserData := FFileList.Data[FIndex]; if FFileSource.CanRetrieveProperties(FWorkingFile.FSFile, FFilePropertiesNeeded) then FFileSource.RetrieveProperties(FWorkingFile.FSFile, FFilePropertiesNeeded, FVariantProperties); if FWorkingFile.TextColor = clNone then FWorkingFile.TextColor:= gColorExt.GetColorBy(FWorkingFile.FSFile); if HaveIcons then begin if FWorkingFile.IconID < 0 then FWorkingFile.IconID := PixMapManager.GetIconByFile( FWorkingFile.FSFile, DirectAccess, True, gShowIcons, not gIconOverlays); {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} if gIconOverlays and (FWorkingFile.IconOverlayID < 0) then FWorkingFile.IconOverlayID := PixMapManager.GetIconOverlayByFile( FWorkingFile.FSFile, DirectAccess); {$ENDIF} end; TThread.Synchronize(Thread, @DoUpdateFile); except on EListError do; on EFileNotFound do; end; Inc(FIndex); end; end; procedure TFilePropertiesRetriever.DoUpdateFile; begin if Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; { TCalculateSpaceWorker } constructor TCalculateSpaceWorker.Create(AFileSource: IFileSource; AThread: TThread; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FUpdateFileMethod := AUpdateFileMethod; FOperation := nil; FOperationLock := TCriticalSection.Create; end; destructor TCalculateSpaceWorker.Destroy; begin FFileList.Free; inherited Destroy; FOperationLock.Free; end; procedure TCalculateSpaceWorker.Abort; begin inherited; FOperationLock.Acquire; try if Assigned(FOperation) then FOperation.Stop; finally FOperationLock.Release; end; end; procedure TCalculateSpaceWorker.Execute; var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; TargetFiles: TFiles = nil; AFile: TFile; begin if fsoCalcStatistics in FFileSource.GetOperationsTypes then begin FWorkingIndex:= 0; TThread.Synchronize(Thread, @DoUpdateFolders); try while FWorkingIndex < FFileList.Count do begin if Aborted then Break; FWorkingFile := FFileList.Files[FWorkingIndex]; FWorkingUserData := FFileList.Data[FWorkingIndex]; AFile := FWorkingFile.FSFile; if (fpSize in AFile.SupportedProperties) and (AFile.IsDirectory and not AFile.IsLinkToDirectory) then begin TargetFiles := TFiles.Create(AFile.Path); try TargetFiles.Add(AFile.Clone); AFile.Size:= FOLDER_SIZE_CALC; TThread.Synchronize(Thread, @DoUpdateFile); FOperationLock.Acquire; try FOperation := FFileSource.CreateCalcStatisticsOperation(TargetFiles); finally FOperationLock.Release; end; CalcStatisticsOperation := FOperation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperation.SkipErrors := True; CalcStatisticsOperation.SymLinkOption := fsooslDontFollow; if fspListOnMainThread in FFileSource.Properties then TThread.Synchronize(Thread, @FOperation.Execute) else begin FOperation.Execute; // blocks until finished end; if Aborted then Break; if FOperation.Result = fsorFinished then begin CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; AFile.Size := CalcStatisticsOperationStatistics.Size; if AFile.Size = 0 then AFile.Size:= FOLDER_SIZE_ZERO; Inc(FCompletedCalculations); TThread.Synchronize(Thread, @DoUpdateFile); end; finally FreeAndNil(TargetFiles); FOperationLock.Acquire; try FreeAndNil(FOperation); finally FOperationLock.Release; end; end; end; Inc(FWorkingIndex); end; finally if Aborted then begin TThread.Synchronize(Thread, @DoUpdateFolders); end; end; end; end; procedure TCalculateSpaceWorker.DoUpdateFile; begin if Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; procedure TCalculateSpaceWorker.DoUpdateFolders; var ASize: Int64; Index: Integer; begin if Assigned(FUpdateFileMethod) then begin if Aborted then ASize:= FOLDER_SIZE_UNKN else begin ASize:= FOLDER_SIZE_WAIT; end; Index:= FWorkingIndex; while Index < FFileList.Count do begin FWorkingFile:= FFileList.Files[Index]; FWorkingUserData := FFileList.Data[Index]; if FWorkingFile.FSFile.IsDirectory and not FWorkingFile.FSFile.IsLinkToDirectory then begin FWorkingFile.FSFile.Size:= ASize; FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; Inc(Index); end; end; end; end. doublecmd-1.1.30/src/fileviews/ufileviewwithpanels.pas0000644000175000001440000001577215104114162022170 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Generic file view containing default panels (header, footer, etc.) Copyright (C) 2012-2018 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFileViewWithPanels; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, StdCtrls, uFileView, uFileViewHeader, uFileSource; type { TFileViewWithPanels } TFileViewWithPanels = class(TFileView) protected FSelectedCount: Integer; lblInfo: TLabel; pnlFooter: TPanel; pnlHeader: TFileViewHeader; procedure UpdateStatusBarFont; procedure AfterChangePath; override; procedure CreateDefault(AOwner: TWinControl); override; procedure DisplayFileListChanged; override; procedure DoActiveChanged; override; procedure DoSelectionChanged; override; procedure ShowPathEdit; procedure DoUpdateView; override; procedure UpdateFlatFileName; virtual; procedure UpdateInfoPanel; virtual; public property Header:TFileViewHeader read pnlHeader; function AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; override; function RemoveCurrentFileSource: Boolean; override; procedure UpdateColor; override; published procedure cm_EditPath(const {%H-}Params: array of string); end; implementation uses DCStrUtils, uFile, uGlobs, uLng, uFileProperty, uFileViewWorker, uDCUtils; { TFileViewWithPanels } function TFileViewWithPanels.AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; begin Result:= inherited AddFileSource(aFileSource, aPath); if Result then pnlHeader.UpdateAddressLabel; end; procedure TFileViewWithPanels.UpdateStatusBarFont; begin FontOptionsToFont(gFonts[dcfStatusBar], lblInfo.Font); lblInfo.Height := lblInfo.Canvas.TextHeight('Wg'); end; procedure TFileViewWithPanels.AfterChangePath; begin inherited AfterChangePath; if FileSourcesCount > 0 then pnlHeader.UpdatePathLabel; end; procedure TFileViewWithPanels.cm_EditPath(const Params: array of string); begin ShowPathEdit; end; procedure TFileViewWithPanels.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); pnlHeader := TFileViewHeader.Create(Self, Self); pnlFooter := TPanel.Create(Self); pnlFooter.Parent := Self; pnlFooter.Align := alBottom; pnlFooter.BevelInner := bvNone; pnlFooter.BevelOuter := bvNone; pnlFooter.AutoSize := True; pnlFooter.DoubleBuffered := True; lblInfo := TLabel.Create(pnlFooter); lblInfo.Parent := pnlFooter; lblInfo.AutoSize := False; lblInfo.Align := alClient; {$IF DEFINED(LCLGTK2)} // Workaround: "Layout and line" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=573 pnlFooter.Visible := False; {$ENDIF} UpdateStatusBarFont; {$IFDEF LCLCARBON} // Under Carbon AutoSize don't work without it pnlHeader.ClientHeight:= 0; pnlFooter.ClientHeight:= 0; {$ENDIF} end; procedure TFileViewWithPanels.DisplayFileListChanged; begin inherited DisplayFileListChanged; UpdateInfoPanel; end; procedure TFileViewWithPanels.DoActiveChanged; begin inherited DoActiveChanged; pnlHeader.SetActive(Active); end; procedure TFileViewWithPanels.DoSelectionChanged; begin inherited DoSelectionChanged; UpdateInfoPanel; end; procedure TFileViewWithPanels.DoUpdateView; begin inherited DoUpdateView; pnlHeader.Visible := gCurDir; // Current directory pnlFooter.Visible := gStatusBar; // Status bar pnlHeader.UpdateFont; pnlHeader.UpdateAddressLabel; pnlHeader.UpdatePathLabel; UpdateStatusBarFont; end; function TFileViewWithPanels.RemoveCurrentFileSource: Boolean; begin Result:= inherited RemoveCurrentFileSource; if Result and (FileSourcesCount > 0) then pnlHeader.UpdateAddressLabel; end; procedure TFileViewWithPanels.UpdateColor; begin pnlHeader.UpdateColor; end; procedure TFileViewWithPanels.ShowPathEdit; begin pnlHeader.ShowPathEdit; end; procedure TFileViewWithPanels.UpdateFlatFileName; var AFile: TFile; begin AFile:= CloneActiveFile; if Assigned(AFile) then try lblInfo.Caption := MinimizeFilePath(ExtractDirLevel(CurrentPath, AFile.FullPath), lblInfo.Canvas, lblInfo.Width); finally AFile.Free; end; end; procedure TFileViewWithPanels.UpdateInfoPanel; var i: Integer; FilesInDir, FilesSelected, FolderInDir, FolderSelected: Integer; SizeInDir, SizeSelected: Int64; SizeProperty: TFileSizeProperty; begin FSelectedCount := 0; if GetCurrentWorkType = fvwtCreate then begin lblInfo.Caption := rsMsgLoadingFileList; end else if not Assigned(FAllDisplayFiles) or (FAllDisplayFiles.Count = 0) then begin lblInfo.Caption := rsMsgNoFiles; end else if Assigned(FileSource) then begin FilesInDir := 0; FilesSelected := 0; SizeInDir := 0; SizeSelected := 0; FolderInDir := 0; FolderSelected := 0; for i := 0 to FFiles.Count - 1 do begin with FFiles[i] do begin if FSFile.Name = '..' then Continue; if FSFile.IsDirectory then inc(FolderInDir) else inc(FilesInDir); if Selected then begin if FSFile.IsDirectory then inc(FolderSelected) else inc(FilesSelected); end; // Count size if Size property exists. if fpSize in FSFile.AssignedProperties then begin SizeProperty := FSFile.SizeProperty; if SizeProperty.Value > 0 then begin if Selected then SizeSelected := SizeSelected + SizeProperty.Value; SizeInDir := SizeInDir + SizeProperty.Value; end; end; end; end; FSelectedCount := FilesSelected + FolderSelected; if FlatView and (FSelectedCount = 0) then UpdateFlatFileName else lblInfo.Caption := Format(rsMsgSelectedInfo, [cnvFormatFileSize(SizeSelected, uoscFooter), cnvFormatFileSize(SizeInDir, uoscFooter), FilesSelected, FilesInDir, FolderSelected, FolderInDir]); end else if not (csDestroying in ComponentState) then lblInfo.Caption := ''; end; end. doublecmd-1.1.30/src/fileviews/ufileviewwithmainctrl.pas0000644000175000001440000015374715104114162022524 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Base class for file views which have a main control with a list of files. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFileViewWithMainCtrl; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, StdCtrls, LCLType, LMessages, EditBtn, Graphics, LCLVersion, uFile, uFileViewWorker, uOrderedFileView, uFileView, uDragDropEx, uFileViewNotebook, uDebug; type TRenameFileActionType=(rfatName,rfatExt,rfatFull,rfatToSeparators,rfatNextSeparated); TRenameFileEditInfo=record LenNam:integer; // length of renaming file name LenExt:integer; // length of renaming file ext LenFul:integer; // full length of renaming file name with ext and dot CycleFinished: Boolean; UserManualEdit:boolean; // true if user press a key or click/select part of filename, false - if pressed F2(or assigned key) LastAction:TRenameFileActionType; // need for organize correct cycle Name-FullName-Ext (or FullName-Name-Ext) end; { TEditButtonEx } TEditButtonEx = class(TEditButton) private procedure handleSpecialKeys( Key: Word ); function GetFont: TFont; procedure SetFont(AValue: TFont); protected // Workaround: https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/36006 {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and (LCL_FULLVERSION < 3020000)} procedure Hack(Data: PtrInt); procedure EditExit; override; {$ENDIF} function CalcButtonVisible: Boolean; override; function GetDefaultGlyphName: String; override; procedure EditKeyDown(var Key: word; Shift: TShiftState); override; public onKeyESCAPE: TNotifyEvent; onKeyRETURN: TNotifyEvent; property Font: TFont read GetFont write SetFont; end; { TFileViewWithMainCtrl } TFileViewWithMainCtrl = class(TOrderedFileView) private {$IFDEF LCLGTK2} FLastDoubleClickTime : TDateTime; {$ENDIF} FMainControl: TWinControl; { Events for drag&drop from external applications } function OnExDragBegin: Boolean; function OnExDragEnd: Boolean; function OnExDragEnter(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDragOver(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDrop(const FileNamesList: TStringList; DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDragLeave: Boolean; procedure SetMainControl(AValue: TWinControl); procedure tmContextMenuTimer(Sender: TObject); // Needed for rename on mouse procedure tmRenameFileTimer(Sender: TObject); // If internal dragging is currently in effect, this function // stops internal dragging and starts external. procedure TransformDraggingToExternal(ScreenPoint: TPoint); procedure edtRenameEnter(Sender: TObject); procedure edtRenameExit(Sender: TObject); procedure edtRenameButtonClick(Sender: TObject); procedure edtRenameMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); {$IFDEF LCLWIN32} procedure edtRenameKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); {$ENDIF} procedure edtRenameOnKeyESCAPE(Sender: TObject); procedure edtRenameOnKeyRETURN(Sender: TObject); protected edtRename: TEditButtonEx; FRenameFile: TFile; FRenFile:TRenameFileEditInfo; FRenTags:string; // rename separators FWindowProc: TWndMethod; // Used to register as a drag and drop source and target. FDragDropSource: uDragDropEx.TDragDropSource; FDragDropTarget: uDragDropEx.TDragDropTarget; FHintFileIndex: PtrInt; FMainControlLastMouseButton: TMouseButton; // Mouse button that initiated dragging {en Used to check if button-up was received after button-down or after dropping something after dragging with right mouse button. } FMainControlMouseDown: Boolean; FMainControlMouseDownPoint: TPoint; FMouseSelectionStartIndex: Integer; FMouseSelectionLastState: Boolean; FDragStartPoint: TPoint; FDragFileIndex: PtrInt; FDropFileIndex: PtrInt; FStartDrag: Boolean; tmContextMenu: TTimer; tmMouseScroll: TTimer; // Needed for rename on mouse FRenameFileIndex: PtrInt; tmRenameFile: TTimer; FMouseRename: Boolean; FMouseFocus: Boolean; {$IFNDEF LCLWIN32} FMouseEnter: Boolean; {$ENDIF} procedure AfterChangePath; override; // Simulates releasing mouse button that started a dragging operation, // but was released in another window or another application. procedure ClearAfterDragDrop; virtual; procedure CreateDefault(AOwner: TWinControl); override; procedure DisplayFileListChanged; override; {en Changes drawing colors depending on if this panel is active. } procedure DoActiveChanged; override; procedure DoLoadingFileListLongTime; override; procedure DoUpdateView; override; procedure FinalizeDragDropEx(AControl: TWinControl); {en Retrieves file index under mouse cursor. @param(X, Y Should be client coordinates of MainControl.) @param(AtFileList Whether X, Y point to the filelist, not at specific file but at empty space. If AtFileList is @false then X, Y point somewhere outside the file list.) } function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; virtual; abstract; procedure InitializeDragDropEx(AControl: TWinControl); procedure MouseScrollTimer(Sender: TObject); virtual; abstract; {en Returns @true if currently selecting with right mouse button. } function IsMouseSelecting: Boolean; inline; procedure MainControlDblClick(Sender: TObject); procedure DoMainControlFileWork; procedure MouseStateReset; procedure MainControlQuadClick(Sender: TObject); procedure MainControlDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainControlDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure MainControlEndDrag(Sender, Target: TObject; X, Y: Integer); procedure MainControlEnter(Sender: TObject); procedure MainControlExit(Sender: TObject); procedure MainControlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MainControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MainControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainControlMouseLeave(Sender: TObject); procedure MainControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure MainControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainControlShowHint(Sender: TObject; HintInfo: PHintInfo); procedure MainControlUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); procedure MainControlResize(Sender: TObject); procedure MainControlWindowProc(var TheMessage: TLMessage); {en Updates the drop row index, which is used to draw a rectangle on directories during drag&drop operations. } procedure SetDropFileIndex(NewFileIndex: PtrInt); function GetIconRect(FileIndex: PtrInt): TRect; virtual; procedure WorkerStarting(const Worker: TFileViewWorker); override; procedure WorkerFinished(const Worker: TFileViewWorker); override; procedure ShowRenameFileEditInitSelect(Data: PtrInt); procedure ShowRenameFileEdit(var AFile: TFile); virtual; procedure UpdateRenameFileEditPosition; virtual; procedure RenameSelectPart(AActionType:TRenameFileActionType); virtual; property MainControl: TWinControl read FMainControl write SetMainControl; {$IFDEF LCLGTK2} function TooManyDoubleClicks: Boolean; {$ENDIF} public destructor Destroy; override; procedure DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); override; function Focused: Boolean; override; procedure SetFocus; override; procedure SetDragCursor(Shift: TShiftState); override; procedure UpdateColor; override; published procedure cm_RenameOnly(const Params: array of string); procedure cm_ContextMenu(const Params: array of string); end; implementation uses {$IF DEFINED(LCLGTK2)} Gtk2Proc, // for ReleaseMouseCapture GTK2Globals, // for DblClickTime {$ENDIF} LCLIntf, LCLProc, LazUTF8, Forms, Dialogs, Buttons, DCOSUtils, DCStrUtils, fMain, uShowMsg, uLng, uFileProperty, uFileSource, uFileSourceOperationTypes, uGlobs, uInfoToolTip, uDisplayFile, uFileSystemFileSource, uFileSourceUtil, uArchiveFileSourceUtil, uFormCommands, uKeyboard, uFileSourceSetFilePropertyOperation, uFileSystemWatcher; type TControlHandlersHack = class(TWinControl) end; { TEditButtonEx } procedure TEditButtonEx.EditKeyDown(var Key: Word; Shift: TShiftState); begin inherited EditKeyDown(Key, Shift); case Key of VK_ESCAPE, VK_RETURN, VK_SELECT: handleSpecialKeys( Key ); {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: Key := 0; {$ENDIF} end; end; procedure TEditButtonEx.handleSpecialKeys( Key: Word ); begin if Key=VK_ESCAPE then begin if Assigned(onKeyESCAPE) then onKeyESCAPE( self ); end else begin if Assigned(onKeyRETURN) then onKeyRETURN( self ); end; end; function TEditButtonEx.GetFont: TFont; begin Result:= BaseEditor.Font; end; procedure TEditButtonEx.SetFont(AValue: TFont); begin BaseEditor.Font:= AValue; end; {$IF (DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)) and (LCL_FULLVERSION < 3020000)} procedure TEditButtonEx.Hack(Data: PtrInt); begin if (csClicked in Button.ControlState) then begin BuddyClick; Button.ControlState:= Button.ControlState - [csClicked]; end; inherited EditExit; end; procedure TEditButtonEx.EditExit; begin Application.QueueAsyncCall(@Hack, 0); end; {$ENDIF} function TEditButtonEx.GetDefaultGlyphName: String; begin Result:= BitBtnResNames[idButtonOk]; end; function TEditButtonEx.CalcButtonVisible: Boolean; begin Result:= (inherited CalcButtonVisible) and gInplaceRenameButton; end; { TFileViewWithMainCtrl } {$IFDEF LCLWIN32} procedure TFileViewWithMainCtrl.edtRenameKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin case Key of // Workaround for Win32 - right arrow must clear selection at first move. VK_RIGHT: begin if (Win32MajorVersion < 10) and (Shift = []) and (edtRename.SelLength > 0) then begin Key := edtRename.CaretPos.X; edtRename.SelLength := 0; edtRename.CaretPos := Classes.Point(Key, 0); Key := 0; end; FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection end; VK_LEFT: FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection end; end; {$ENDIF} procedure TFileViewWithMainCtrl.edtRenameOnKeyESCAPE(Sender: TObject); begin edtRename.Visible:=False; SetFocus; end; procedure TFileViewWithMainCtrl.edtRenameOnKeyRETURN(Sender: TObject); var NewFileName: String; OldFileName: String; begin NewFileName := edtRename.Text; OldFileName := ExtractFileName(edtRename.Hint); try case uFileSourceUtil.RenameFile(FileSource, FRenameFile, NewFileName, True) of sfprSuccess: begin // FRenameFile is nil when a file list // already updated by the real 'rename' event if FlatView and Assigned(FRenameFile) and (TFileSystemWatcher.Features * [fsfFlatView] = []) then begin PushRenameEvent(FRenameFile, NewFileName); end; edtRename.Visible:= False; SetActiveFile(CurrentPath + NewFileName); SetFocus; end; sfprError: msgError(Format(rsMsgErrRename, [OldFileName, NewFileName])); end; except on e: EInvalidFileProperty do msgError(Format(rsMsgErrRename + ':' + LineEnding + '%s (%s)', [OldFileName, NewFileName, rsMsgInvalidFileName, e.Message])); end; end; procedure TFileViewWithMainCtrl.ClearAfterDragDrop; begin tmMouseScroll.Enabled := False; // Clear some control specific flags. MainControl.ControlState := MainControl.ControlState - [csClicked, csLButtonDown]; end; procedure TFileViewWithMainCtrl.cm_ContextMenu(const Params: array of string); var Rect: TRect; Point: TPoint; AFileIndex: PtrInt; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete; bUserWishJustActionMenu: boolean; begin if IsLoadingFileList then Exit; if Length(Params)>0 then begin GetParamBoolValue(Params[0], 'justactionmenu', bUserWishJustActionMenu); if bUserWishJustActionMenu then UserWishForContextMenu:=uwcmJustDCAction else UserWishForContextMenu:=uwcmComplete; end; AFileIndex:= GetActiveFileIndex; if AFileIndex < 0 then begin Point.X:= 0; Point.Y:= 0; end else begin Rect := GetFileRect(AFileIndex); Point.X := Rect.Left + ((Rect.Right - Rect.Left) div 2); Point.Y := Rect.Top + ((Rect.Bottom - Rect.Top) div 2); end; Point := MainControl.ClientToScreen(Point); // SetCursorPos(Point.X+100, Point.Y+25); frmMain.Commands.DoContextMenu(Self, Point.X, Point.Y, False, UserWishForContextMenu); end; procedure TFileViewWithMainCtrl.CreateDefault(AOwner: TWinControl); begin FDropFileIndex := -1; FHintFileIndex := -1; {$IFDEF LCLGTK2} FLastDoubleClickTime := Now; {$ENDIF} FStartDrag := False; inherited CreateDefault(AOwner); edtRename := TEditButtonEx.Create(Self); edtRename.Visible := False; edtRename.TabStop := False; edtRename.AutoSize := False; {$IFDEF LCLWIN32} edtRename.onKeyDown:=@edtRenameKeyDown; {$ENDIF} edtRename.onKeyESCAPE:=@edtRenameOnKeyESCAPE; edtRename.onKeyRETURN:=@edtRenameOnKeyRETURN; edtRename.OnMouseDown:=@edtRenameMouseDown; edtRename.OnEnter := @edtRenameEnter; edtRename.OnExit := @edtRenameExit; edtRename.OnButtonClick := @edtRenameButtonClick; tmMouseScroll := TTimer.Create(Self); tmMouseScroll.Enabled := False; tmMouseScroll.Interval := 100; tmMouseScroll.OnTimer := @MouseScrollTimer; tmContextMenu := TTimer.Create(Self); tmContextMenu.Enabled := False; tmContextMenu.Interval := 500; tmContextMenu.OnTimer := @tmContextMenuTimer; tmRenameFile := TTimer.Create(Self); tmRenameFile.Enabled := False; tmRenameFile.Interval := 1000; tmRenameFile.OnTimer := @tmRenameFileTimer; FRenameFileIndex := -1; end; destructor TFileViewWithMainCtrl.Destroy; begin if Assigned(HotMan) then HotMan.UnRegister(MainControl); inherited Destroy; end; procedure TFileViewWithMainCtrl.DisplayFileListChanged; begin inherited DisplayFileListChanged; if edtRename.Visible then UpdateRenameFileEditPosition; end; procedure TFileViewWithMainCtrl.DoActiveChanged; begin inherited DoActiveChanged; UpdateColor; // Needed for rename on mouse FMouseRename := False; end; procedure TFileViewWithMainCtrl.DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); var AFile: TDisplayFile; ClientDropPoint: TPoint; FileIndex: PtrInt; AtFileList: Boolean; FileSourceIndex, PathIndex: Integer; begin try with DropParams do begin if Files.Count > 0 then begin ClientDropPoint := MainControl.ScreenToClient(ScreenDropPoint); FileIndex := GetFileIndexFromCursor(ClientDropPoint.X, ClientDropPoint.Y, AtFileList); // default to current active directory in the destination panel TargetPath := Self.CurrentPath; if (DropIntoDirectories = True) and IsFileIndexInRange(FileIndex) then begin AFile := FFiles[FileIndex]; // If dropped into a directory modify destination path and file source accordingly. if Assigned(AFile) and (AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory) then begin if AFile.FSFile.Name = '..' then begin if TargetFileSource.IsPathAtRoot(CurrentPath) then begin // Change to previous file source and last path. FileSourceIndex := History.CurrentFileSourceIndex - 1; if FileSourceIndex < 0 then TargetFileSource := nil // No parent file sources. else begin PathIndex := History.PathsCount[FileSourceIndex] - 1; if PathIndex < 0 then TargetFileSource := nil // No paths. else begin TargetFileSource := FileSources[FileSourceIndex]; TargetPath := History.Path[FileSourceIndex, PathIndex]; end; end; end else begin // Remove the last subdirectory in the path. TargetPath := TargetFileSource.GetParentDir(TargetPath); end; end else TargetPath := TargetPath + AFile.FSFile.Name + DirectorySeparator; end else if FileIsArchive(AFile.FSFile.FullPath) then try TargetFileSource:= GetArchiveFileSource(FileSource, AFile.FSFile, EmptyStr, False, False); if Assigned(TargetFileSource) then TargetPath:= TargetFileSource.GetRootDir; except on E: Exception do msgError(E.Message + LineEnding + AFile.FSFile.FullPath); end; end; end; end; // Execute the operation. frmMain.DoDragDropOperation(Operation, DropParams); finally FreeAndNil(DropParams); end; end; procedure TFileViewWithMainCtrl.DoLoadingFileListLongTime; begin UpdateColor; inherited DoLoadingFileListLongTime; end; procedure TFileViewWithMainCtrl.DoUpdateView; begin inherited DoUpdateView; UpdateColor; end; procedure TFileViewWithMainCtrl.UpdateColor; begin inherited UpdateColor; MainControl.Color := DimColor(gColors.FilePanel^.BackColor); end; procedure TFileViewWithMainCtrl.FinalizeDragDropEx(AControl: TWinControl); begin FreeAndNil(FDragDropSource); FreeAndNil(FDragDropTarget); end; function TFileViewWithMainCtrl.Focused: Boolean; begin Result := Assigned(MainControl) and MainControl.Focused; end; procedure TFileViewWithMainCtrl.InitializeDragDropEx(AControl: TWinControl); begin // Register as drag&drop source and target. FDragDropSource := uDragDropEx.CreateDragDropSource(AControl); if Assigned(FDragDropSource) then FDragDropSource.RegisterEvents(nil, nil, @OnExDragEnd); FDragDropTarget := uDragDropEx.CreateDragDropTarget(AControl); if Assigned(FDragDropTarget) then FDragDropTarget.RegisterEvents(@OnExDragEnter, @OnExDragOver, @OnExDrop, @OnExDragLeave); end; function TFileViewWithMainCtrl.IsMouseSelecting: Boolean; begin Result := FMainControlMouseDown and (FMainControlLastMouseButton = mbRight) and gMouseSelectionEnabled and (gMouseSelectionButton = 1); end; procedure TFileViewWithMainCtrl.MainControlDblClick(Sender: TObject); {$IFDEF LCLCOCOA} // Trigger MouseUp Event if Tab Changed var OldTabIndex: Integer; NewTabIndex: Integer; begin if not Assigned(NotebookPage) then begin DoMainControlFileWork(); exit; end; OldTabIndex := TFileViewPage(NotebookPage).Notebook.ActivePageIndex; DoMainControlFileWork(); NewTabIndex := TFileViewPage(NotebookPage).Notebook.ActivePageIndex; if NewTabIndex<> OldTabIndex then TControl(Sender).Perform(LM_LBUTTONUP,0,0); end; {$ELSE} begin DoMainControlFileWork(); end; {$ENDIF} procedure TFileViewWithMainCtrl.DoMainControlFileWork; var Point : TPoint; FileIndex : PtrInt; AtFileList: Boolean; begin // Needed for rename on mouse tmRenameFile.Enabled := False; FRenameFileIndex := -1; if IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. if TooManyDoubleClicks then Exit; {$ENDIF} FStartDrag := False; // don't start drag on double click Point := FMainControlMouseDownPoint; // If on a file/directory then choose it. FileIndex := GetFileIndexFromCursor(Point.x, Point.y, AtFileList); if IsFileIndexInRange(FileIndex) then begin {$IF DEFINED(LCLQT) or DEFINED(LCLQT5)} // Workaround: under Qt4 widgetset long operation (opening archive // for example) blocking mouse at whole system while operation executing Sleep(100); Application.ProcessMessages; {$ENDIF} ChooseFile(FFiles[FileIndex]); end else if gDblClickToParent and AtFileList then begin ChangePathToParent(True); end; {$IFDEF LCLGTK2} FLastDoubleClickTime := Now; {$ENDIF} end; procedure TFileViewWithMainCtrl.MouseStateReset; begin FStartDrag := False; FRangeSelecting := False; if IsMouseSelecting and (GetCaptureControl = MainControl) then SetCaptureControl(nil); FMainControlMouseDown := False; end; procedure TFileViewWithMainCtrl.MainControlDragDrop(Sender, Source: TObject; X, Y: Integer); var SourcePanel: TFileViewWithMainCtrl; SourceFiles: TFiles; DropParams: TDropParams; begin if not (Source is TWinControl) or not (TWinControl(Source).Parent is TFileViewWithMainCtrl) then Exit; SourcePanel := ((Source as TWinControl).Parent) as TFileViewWithMainCtrl; // Get file names from source panel. SourceFiles := SourcePanel.CloneSelectedOrActiveFiles; try // Drop onto target panel. DropParams := TDropParams.Create( SourceFiles, // Will be freed automatically. GetDropEffectByKeyAndMouse(GetKeyShiftStateEx, SourcePanel.FMainControlLastMouseButton, gDefaultDropEffect), MainControl.ClientToScreen(Classes.Point(X, Y)), True, SourcePanel, Self, Self.FileSource, Self.CurrentPath); frmMain.DropFiles(DropParams); SetDropFileIndex(-1); except FreeAndNil(SourceFiles); raise; end; end; procedure TFileViewWithMainCtrl.MainControlDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var AFile: TDisplayFile; SourcePanel: TFileView; TargetPanel: TFileView; SourceDir, TargetDir: String; FileIndex: PtrInt; AtFileList: Boolean; begin Accept := False; if not (Source is TWinControl) or not (TWinControl(Source).Parent is TFileView) then Exit; SourcePanel := ((Source as TWinControl).Parent) as TFileView; TargetPanel := Self; FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); // Always allow dropping into an empty panel. // And it is also allowed to drop onto header in case all visible items // are directories and the user wants to drop into panel's current directory. if FileIndex = InvalidFileIndex then begin SetDropFileIndex(-1); Accept := Sender <> Source; Exit; end; SourceDir := SourcePanel.CurrentPath; TargetDir := TargetPanel.CurrentPath; AFile := FFiles[FileIndex]; if AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory or FileIsArchive(AFile.FSFile.FullPath) then begin if State = dsDragLeave then // Mouse is leaving the control or drop will occur immediately. // Don't draw DropRow rectangle. SetDropFileIndex(-1) else SetDropFileIndex(FileIndex); if Sender = Source then begin if not ((FileIndex = FDragFileIndex) or (AFile.Selected = True)) then Accept := True; end else begin if Assigned(SourcePanel) and Assigned(TargetPanel) then begin if AFile.FSFile.Name = '..' then TargetDir := TargetPanel.FileSource.GetParentDir(TargetDir) else TargetDir := TargetDir + AFile.FSFile.Name + DirectorySeparator; if SourceDir <> TargetDir then Accept := True; end else Accept := True; end; end else if (Sender <> Source) then begin SetDropFileIndex(-1); if Assigned(SourcePanel) then begin if SourcePanel.CurrentPath <> TargetPanel.CurrentPath then Accept := True; end else Accept := True; end else begin SetDropFileIndex(-1); end; end; procedure TFileViewWithMainCtrl.MainControlEndDrag(Sender, Target: TObject; X, Y: Integer); procedure ClearDropNode(aFileView: TFileView); begin if aFileView is TFileViewWithMainCtrl then TFileViewWithMainCtrl(aFileView).SetDropFileIndex(-1); end; begin // If cancelled by the user, DragManager does not send drag-leave event // to the target, so we must clear the DropRow in both panels. ClearDropNode(frmMain.FrameLeft); ClearDropNode(frmMain.FrameRight); if uDragDropEx.TransformDragging = False then ClearAfterDragDrop; end; procedure TFileViewWithMainCtrl.MainControlEnter(Sender: TObject); begin Active := True; {$IFNDEF LCLWIN32} FMouseEnter:= ssLeft in GetKeyShiftStateEx; {$ENDIF} end; procedure TFileViewWithMainCtrl.MainControlExit(Sender: TObject); begin FRangeSelecting := False; end; procedure TFileViewWithMainCtrl.MainControlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ScreenPoint: TPoint; begin if IsLoadingFileList then Exit; case Key of VK_APPS: begin cm_ContextMenu([]); Key := 0; end; {$IFDEF DARWIN} VK_LWIN, VK_RWIN, {$ENDIF} VK_MENU: // Alt key if MainControl.Dragging then begin // Force transform to external dragging in anticipation of user // pressing Alt+Tab to change active application window. // Disable flag, so that dragging isn't immediately transformed // back to internal before the other application window is shown. uDragDropEx.AllowTransformToInternal := False; GetCursorPos(ScreenPoint); TransformDraggingToExternal(ScreenPoint); end; end; DoHandleKeyDown(Key, Shift); end; procedure TFileViewWithMainCtrl.MainControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FRangeSelecting := False; end; procedure TFileViewWithMainCtrl.MainControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var FileIndex: PtrInt; AtFileList: Boolean; AFile, APreviousFile: TDisplayFile; begin SetDragCursor(Shift); FMainControlMouseDownPoint:= Classes.Point(X, Y); if gRenameConfirmMouse and edtRename.Visible then edtRenameOnKeyRETURN(edtRename); if (DragManager <> nil) and DragManager.IsDragging and (Button = mbRight) then Exit; FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if not AtFileList then Exit; {$IF DEFINED(LCLWIN32) OR DEFINED(LCLCOCOA)} FMouseFocus:= MainControl.Focused; SetFocus; {$ELSE} FMouseFocus := not FMouseEnter; FMouseEnter := False; {$ENDIF} // history navigation for mice with extra buttons if Button in [mbExtra1, mbExtra2] then begin MouseStateReset; case Button of mbExtra1: GoToPrevHistory; mbExtra2: GoToNextHistory; end; Exit; end; if IsLoadingFileList then Exit; if IsFileIndexInRange(FileIndex) then begin AFile := FFiles[FileIndex]; FMainControlLastMouseButton := Button; // Needed for rename on mouse FRenameFileIndex := -1; case Button of mbRight: begin SetActiveFile(FileIndex, False); if gMouseSelectionEnabled and (gMouseSelectionButton = 1) then begin FMouseSelectionStartIndex := FileIndex; FMouseSelectionLastState := not AFile.Selected; tmContextMenu.Enabled:= True; // start context menu timer MarkFile(AFile, FMouseSelectionLastState, False); DoSelectionChanged(FileIndex); SetCaptureControl(MainControl); end; end; mbLeft: begin if gMouseSelectionEnabled then begin if ssModifier in Shift then begin // if there is no selected files then select also previous file if not HasSelectedFiles then begin APreviousFile := GetActiveDisplayFile; if Assigned(APreviousFile) and (APreviousFile <> AFile) then MarkFile(APreviousFile, True, False); end; InvertFileSelection(AFile, False); DoSelectionChanged(FileIndex); end else if ssShift in Shift then begin FRangeSelecting := True; SelectRange(FileIndex); end else begin if FMouseRename then begin APreviousFile := GetActiveDisplayFile; // Start the rename file timer if the actual file is clicked again if Assigned(APreviousFile) and (APreviousFile = AFile) then begin if AFile.FSFile.IsNameValid then begin FRenameFileIndex := FileIndex; tmRenameFile.Enabled := True; end; end; end; // Select files/folders with a left click on their icons if (gMouseSelectionIconClick > 0) and (PtInRect(GetIconRect(FileIndex), Classes.Point(X, Y))) then begin InvertFileSelection(AFile, False); DoSelectionChanged(FileIndex); FMainControlMouseDown:= False; end // If mark with left button enable else if (gMouseSelectionButton = 0) then begin if not AFile.Selected then MarkFiles(False); end; end; end;//of mouse selection handler end; else begin SetActiveFile(FileIndex); Exit; end; end; { Dragging } // Check if not already dragging (started by a different button) // and if the mouse button is not used for selection. if not MainControl.Dragging and not (gMouseSelectionEnabled and (Button = mbRight) and (gMouseSelectionButton = Integer(Button))) then begin // indicate that drag start at next mouse move event FStartDrag := True; FDragStartPoint.X := X; FDragStartPoint.Y := Y; FDragFileIndex := FileIndex; uDragDropEx.TransformDragging := False; uDragDropEx.AllowTransformToInternal := True; end; end else // if mouse on empty space begin if (Button = mbRight) and (gMouseSelectionEnabled) and (gMouseSelectionButton = 1) then tmContextMenu.Enabled:= True; // start context menu timer end; // Needed for rename on mouse FMouseRename := gInplaceRename; end; procedure TFileViewWithMainCtrl.MainControlMouseLeave(Sender: TObject); begin end; procedure TFileViewWithMainCtrl.MainControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Point: TPoint; AFile: TDisplayFile; ExpectedButton: TShiftStateEnum; FileIndex: PtrInt; AtFileList: Boolean; SelStartIndex, SelEndIndex: Integer; begin SetDragCursor(Shift); if FMainControlMouseDown and MainControl.Dragging then begin // If dragging has started then clear MouseDown flag. if (Abs(FDragStartPoint.X - X) > DragManager.DragThreshold) or (Abs(FDragStartPoint.Y - Y) > DragManager.DragThreshold) then begin FMainControlMouseDown := False; end; end; // If dragging is currently in effect, the window has mouse capture and // we can retrieve the window over which the mouse cursor currently is. if MainControl.Dragging and uDragDropEx.IsExternalDraggingSupported then begin Point := MainControl.ClientToScreen(Classes.Point(X, Y)); // use specifically LCLIntf.WindowFromPoint to avoid confusion with Windows.WindowFromPoint if LCLIntf.WindowFromPoint(Point) = 0 then begin // If result is 0 then the window belongs to another process // and we transform intra-process dragging into inter-process dragging. TransformDraggingToExternal(Point); end; end else // if we are about to start dragging if FStartDrag and ((Abs(FDragStartPoint.X - X) > DragManager.DragThreshold) or (Abs(FDragStartPoint.Y - Y) > DragManager.DragThreshold)) then begin FStartDrag := False; case FMainControlLastMouseButton of mbLeft : ExpectedButton := ssLeft; mbMiddle : ExpectedButton := ssMiddle; mbRight : ExpectedButton := ssRight; else Exit; end; // Make sure the same mouse button is still pressed. if not (ExpectedButton in Shift) then begin ClearAfterDragDrop; end else if IsFileIndexInRange(FDragFileIndex) then begin AFile := FFiles[FDragFileIndex]; // Check if valid item is being dragged. if IsItemValid(AFile) then begin MainControl.BeginDrag(False); // Restore selection of active file if (FSelectedCount > 0) and (not AFile.Selected) then MarkFile(AFile, True); end; end; end; // Disable the rename file timer if we are dragging if FMouseRename and MainControl.Dragging then begin tmRenameFile.Enabled := False; FRenameFileIndex := -1; end; // Show file info tooltip. if ShowHint and not MainControl.Dragging and ([ssLeft, ssMiddle, ssRight] * Shift = []) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if FileIndex <> FHintFileIndex then begin FHintFileIndex := FileIndex; Application.CancelHint; end; end; if edtRename.Visible then Exit; // A single click starts programs and opens files if (gMouseSingleClickStart in [1..3]) and (FMainControlMouseDown = False) and (Shift * [ssShift, ssAlt, ssModifier] = []) and (not MainControl.Dragging) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if IsFileIndexInRange(FileIndex) and (GetActiveFileIndex <> FileIndex) then begin SetActiveFile(FileIndex); end; end; // Selection with right mouse button, if enabled. if FMainControlMouseDown and (FMainControlLastMouseButton = mbRight) and gMouseSelectionEnabled and (gMouseSelectionButton = 1) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if IsFileIndexInRange(FileIndex) and (GetActiveFileIndex <> FileIndex) then begin tmContextMenu.Enabled:= False; // stop context menu timer if FMouseSelectionStartIndex < FileIndex then begin SelStartIndex := FMouseSelectionStartIndex; SelEndIndex := FileIndex; end else begin SelStartIndex := FileIndex; SelEndIndex := FMouseSelectionStartIndex; end; SetActiveFile(FileIndex, False); MarkFiles(SelStartIndex, SelEndIndex, FMouseSelectionLastState); end; end; end; procedure TFileViewWithMainCtrl.MainControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var FileIndex: PtrInt; AtFileList: Boolean; begin if IsLoadingFileList then Exit; FStartDrag := False; FRangeSelecting := False; // Handle only if button-up was not lifted to finish drag&drop operation. if not FMainControlMouseDown then Exit; if IsMouseSelecting and (GetCaptureControl = MainControl) then SetCaptureControl(nil); // A single click is used to open items if (gMouseSingleClickStart > 0) and (Button = mbLeft) and (Shift * [ssShift, ssAlt, ssModifier, ssDouble] = []) and FMouseFocus then begin // A single click only opens folders. For files, a double click is needed. if (gMouseSingleClickStart and 2 <> 0) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if IsFileIndexInRange(FileIndex) then begin with FFiles[FileIndex].FSFile do begin if (IsDirectory or IsLinkToDirectory) then DoMainControlFileWork(); end; end end // A single click starts programs and opens files else begin DoMainControlFileWork(); end; end; FMainControlMouseDown := False; end; procedure TFileViewWithMainCtrl.MainControlQuadClick(Sender: TObject); begin DoMainControlFileWork(); end; procedure TFileViewWithMainCtrl.MainControlShowHint(Sender: TObject; HintInfo: PHintInfo); var sHint: String; AFile: TDisplayFile; begin HintInfo^.HintStr:= EmptyStr; if not gShowToolTip then Exit; if not IsFileIndexInRange(FHintFileIndex) then Exit; AFile := FFiles[FHintFileIndex]; if AFile.FSFile.Name = '..' then Exit; HintInfo^.HintStr:= AFile.FSFile.Name; sHint:= GetFileInfoToolTip(FileSource, AFile.FSFile); if (sHint <> EmptyStr) then HintInfo^.HintStr:= HintInfo^.HintStr + LineEnding + sHint; if gFileInfoToolTipValue[ord(gToolTipHideTimeOut)] <> -1 then HintInfo^.HideTimeout := gFileInfoToolTipValue[ord(gToolTipHideTimeOut)]; end; procedure TFileViewWithMainCtrl.MainControlUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); begin if IsLoadingFileList then Exit; // check if ShiftState is equal to quick search / filter modes if quickSearch.CheckSearchOrFilter(UTF8Key) then Exit; end; procedure TFileViewWithMainCtrl.MainControlResize(Sender: TObject); begin if edtRename.Visible then UpdateRenameFileEditPosition; end; procedure TFileViewWithMainCtrl.MainControlWindowProc(var TheMessage: TLMessage); begin // Cancel rename if user scroll file list by mouse if (TheMessage.Msg = LM_VSCROLL) or (TheMessage.Msg = LM_HSCROLL) or (TheMessage.Msg = LM_MOUSEWHEEL) then begin edtRename.Hide; SetFocus; end; FWindowProc(TheMessage); end; function TFileViewWithMainCtrl.OnExDragBegin: Boolean; begin Result := True; end; function TFileViewWithMainCtrl.OnExDragEnd: Boolean; {$IF DEFINED(MSWINDOWS)} var startPoint: TPoint; currentPoint: TPoint; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} // On windows dragging can be transformed back into internal. // Check if drag was aborted due to mouse moving back into // the application window or the user just cancelled it. if TransformDragging and (FDragDropSource.GetLastStatus = DragDropAborted) then begin // Transform to internal dragging again. // Save current mouse position. GetCursorPos(currentPoint); // Temporarily set cursor position to the point where the drag was started // so that DragManager can properly read the control being dragged. startPoint := MainControl.ClientToScreen(FDragStartPoint); SetCursorPos(startPoint.X, startPoint.Y); // Begin internal dragging. MainControl.BeginDrag(True); // Move cursor back. SetCursorPos(currentPoint.X, currentPoint.Y); // Clear flag. TransformDragging := False; Exit(True); end; {$ENDIF} ClearAfterDragDrop; Result := True; end; function TFileViewWithMainCtrl.OnExDragEnter(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; begin Result := True; end; function TFileViewWithMainCtrl.OnExDragLeave: Boolean; begin SetDropFileIndex(-1); Result := True; end; function TFileViewWithMainCtrl.OnExDragOver(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; var ClientPoint: TPoint; AFile: TDisplayFile; FileIndex: PtrInt; AtFileList: Boolean; begin // Dropping into empty panel allowed. Result := True; ClientPoint := MainControl.ScreenToClient(ScreenPoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); if IsFileIndexInRange(FileIndex) then begin // Get the file over which there is something dragged. AFile := FFiles[FileIndex]; // If it is a directory or link mark possibility of drop. if AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory or FileIsArchive(AFile.FSFile.FullPath) then SetDropFileIndex(FileIndex) else SetDropFileIndex(-1); end else SetDropFileIndex(-1); end; function TFileViewWithMainCtrl.OnExDrop(const FileNamesList: TStringList; DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; var AFiles: TFiles = nil; DropParams: TDropParams; begin Result := False; if FileNamesList.Count > 0 then try AFiles := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(FileNamesList[0]), FileNamesList); try DropParams := TDropParams.Create( AFiles, DropEffect, ScreenPoint, True, nil, Self, Self.FileSource, Self.CurrentPath); frmMain.DropFiles(DropParams); Result := True; finally FreeAndNil(AFiles); end; except on e: EFileNotFound do MessageDlg(e.Message, mtError, [mbOK], 0); end; SetDropFileIndex(-1); end; procedure TFileViewWithMainCtrl.SetDropFileIndex(NewFileIndex: PtrInt); var OldDropIndex: PtrInt; begin if FDropFileIndex <> NewFileIndex then begin OldDropIndex := FDropFileIndex; // Set new index before redrawing. FDropFileIndex := NewFileIndex; if IsFileIndexInRange(OldDropIndex) then RedrawFile(OldDropIndex); if IsFileIndexInRange(NewFileIndex) then RedrawFile(NewFileIndex); end; end; function TFileViewWithMainCtrl.GetIconRect(FileIndex: PtrInt): TRect; begin Result:= Classes.Rect(0, 0, 0, 0); end; procedure TFileViewWithMainCtrl.SetFocus; begin // CanFocus checks parent controls, but not parent form. if GetParentForm(Self).CanFocus and MainControl.CanFocus then begin if FFocusQuickSearch then begin MainControl.SetFocus; inherited SetFocus; Exit; end; inherited SetFocus; MainControl.SetFocus; {$IFDEF LCLCOCOA} Active := true; {$ENDIF} end; end; procedure TFileViewWithMainCtrl.SetDragCursor(Shift: TShiftState); var DropEffect: TDropEffect; begin if (DragManager <> nil) and DragManager.IsDragging then begin DropEffect := GetDropEffectByKey(Shift, gDefaultDropEffect); if DropEffect = DropMoveEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowMove else if DropEffect = DropLinkEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowLink else if DropEffect = DropCopyEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowCopy else TControlHandlersHack(MainControl).DragCursor:= crDrag; DragManager.DragMove(Mouse.CursorPos); end else TControlHandlersHack(MainControl).DragCursor:= crDrag; end; procedure TFileViewWithMainCtrl.cm_RenameOnly(const Params: array of string); var aFile: TFile; begin if not IsLoadingFileList and (fsoSetFileProperty in FileSource.GetOperationsTypes) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then ShowRenameFileEdit(aFile) else if gCurDir then ShowPathEdit; finally FreeAndNil(aFile); end; end; end; procedure TFileViewWithMainCtrl.SetMainControl(AValue: TWinControl); begin if FMainControl = AValue then Exit; FMainControl := AValue; FMainControl.ControlStyle := FMainControl.ControlStyle + [csQuadClicks]; FMainControl.OnEnter := @MainControlEnter; FMainControl.OnExit := @MainControlExit; FMainControl.OnKeyDown := @MainControlKeyDown; FMainControl.OnKeyUp := @MainControlKeyUp; FMainControl.OnShowHint := @MainControlShowHint; FMainControl.OnUTF8KeyPress := @MainControlUTF8KeyPress; FMainControl.AddHandlerOnResize(@MainControlResize); TControlHandlersHack(FMainControl).OnDblClick := @MainControlDblClick; TControlHandlersHack(FMainControl).OnQuadClick := @MainControlQuadClick; TControlHandlersHack(FMainControl).OnDragDrop := @MainControlDragDrop; TControlHandlersHack(FMainControl).OnDragOver := @MainControlDragOver; TControlHandlersHack(FMainControl).OnEndDrag := @MainControlEndDrag; TControlHandlersHack(FMainControl).OnMouseDown := @MainControlMouseDown; TControlHandlersHack(FMainControl).OnMouseLeave := @MainControlMouseLeave; TControlHandlersHack(FMainControl).OnMouseMove := @MainControlMouseMove; TControlHandlersHack(FMainControl).OnMouseUp := @MainControlMouseUp; edtRename.Parent := FMainControl; HotMan.Register(MainControl, 'Files Panel'); end; procedure TFileViewWithMainCtrl.tmContextMenuTimer(Sender: TObject); var AFile: TDisplayFile; Index, Count: Integer; ClientPoint, MousePoint: TPoint; Background: Boolean; FileIndex: PtrInt; AtFileList: Boolean; Status: Boolean; begin FMainControlMouseDown:= False; tmContextMenu.Enabled:= False; // stop context menu timer MousePoint := Mouse.CursorPos; ClientPoint := MainControl.ScreenToClient(MousePoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); Background := not IsFileIndexInRange(FileIndex); if not Background then begin // Skip if a rename is in progress on the same file if FRenameFileIndex = FileIndex then Exit; // Restore selection status by default Status := not FMouseSelectionLastState; if (Status = False) then begin Count := 0; for Index := 0 to FFiles.Count - 1 do begin if FFiles[Index].Selected then begin Inc(Count); // If multiple files selected then // select file under cursor too if Count > 1 then begin Status := True; Break; end; end; end; end; AFile := FFiles[FileIndex]; MarkFile(AFile, Status, False); DoSelectionChanged(FileIndex); end; frmMain.Commands.DoContextMenu(Self, MousePoint.x, MousePoint.y, Background); end; procedure TFileViewWithMainCtrl.tmRenameFileTimer(Sender: TObject); var ClientPoint, MousePoint: TPoint; Background: Boolean; FileIndex: PtrInt; AtFileList: Boolean; begin if FMainControlMouseDown = True then begin FMainControlMouseDown := False; tmRenameFile.Enabled := False; // stop timer Exit; end; tmRenameFile.Enabled := False; // stop timer MousePoint := Mouse.CursorPos; ClientPoint := MainControl.ScreenToClient(MousePoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); Background := not IsFileIndexInRange(FileIndex); if not Background then begin if FRenameFileIndex = FileIndex then begin FMouseRename := False; cm_RenameOnly([]); end; end; FRenameFileIndex := -1; end; procedure TFileViewWithMainCtrl.TransformDraggingToExternal(ScreenPoint: TPoint); begin // Set flag temporarily before stopping internal dragging, // so that triggered events will know that dragging is transforming. TransformDragging := True; // Stop internal dragging DragManager.DragStop(False); {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // Under GTK, DragManager does not release it's mouse capture on // DragStop(). We must release it here manually or LCL will get confused // with who "owns" the capture after the GTK drag&drop finishes. ReleaseMouseCapture; {$ENDIF} // Clear flag before starting external dragging. TransformDragging := False; // Start external dragging. // On Windows it does not return until dragging is finished. if IsFileIndexInRange(FDragFileIndex) then begin BeginDragExternal(FFiles[FDragFileIndex], FDragDropSource, FMainControlLastMouseButton, ScreenPoint); end; end; procedure TFileViewWithMainCtrl.edtRenameEnter(Sender: TObject); begin FWindowProc:= MainControl.WindowProc; MainControl.WindowProc:= @MainControlWindowProc; end; procedure TFileViewWithMainCtrl.edtRenameExit(Sender: TObject); begin FreeAndNil(FRenameFile); edtRename.Visible := False; MainControl.WindowProc:= FWindowProc; // OnEnter don't called automatically (bug?) // TODO: Check on which widgetset/OS this is needed. FMainControl.OnEnter(Self); end; procedure TFileViewWithMainCtrl.edtRenameButtonClick(Sender: TObject); begin edtRenameOnKeyRETURN(Sender); end; procedure TFileViewWithMainCtrl.edtRenameMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FRenFile.UserManualEdit:=True; // user begin manual edit - no need cycle Name,Ext,FullName selection end; procedure TFileViewWithMainCtrl.AfterChangePath; begin if edtRename.Visible then begin edtRename.Hide; SetFocus; end; inherited AfterChangePath; if IsMouseSelecting then begin MouseStateReset; end; end; {$IFDEF LCLGTK2} function TFileViewWithMainCtrl.TooManyDoubleClicks: Boolean; begin Result := ((Now - FLastDoubleClickTime) <= ((1/86400)*(DblClickTime/1000))); end; {$ENDIF} procedure TFileViewWithMainCtrl.WorkerFinished(const Worker: TFileViewWorker); begin inherited WorkerFinished(Worker); MainControl.Cursor := crDefault; // Update status line only if not (csDestroying in ComponentState) then UpdateInfoPanel; end; procedure TFileViewWithMainCtrl.ShowRenameFileEditInitSelect(Data: PtrInt); begin if Assigned(FRenameFile) then begin if gRenameSelOnlyName and not (FRenameFile.IsDirectory or FRenameFile.IsLinkToDirectory) then RenameSelectPart(rfatName) else RenameSelectPart(rfatFull); end; end; procedure TFileViewWithMainCtrl.ShowRenameFileEdit(var AFile: TFile); var S: String; begin S:= AFile.Name; FRenFile.LenFul := UTF8Length(S); FRenFile.LenExt := UTF8Length(ExtractFileExt(S)); FRenFile.LenNam := FRenFile.LenFul - FRenFile.LenExt; if edtRename.Visible then begin if AFile.IsDirectory or AFile.IsLinkToDirectory then Exit; if FRenFile.UserManualEdit then FRenFile.CycleFinished:= True; if not FRenFile.CycleFinished then begin if gRenameSelOnlyName then begin if FRenFile.LastAction = rfatName then RenameSelectPart(rfatFull) else begin RenameSelectPart(rfatExt); FRenFile.CycleFinished:= True; Exit; end; end else begin if FRenFile.LastAction = rfatFull then RenameSelectPart(rfatName) else begin RenameSelectPart(rfatExt); FRenFile.CycleFinished:= True; Exit; end; end; exit; end; // if Cycle not finished - below code wil never execute, so cycle finished: if FRenFile.UserManualEdit then // if user do something(selecting by mouse or press key) and then press F2 - extend to nearest separators begin RenameSelectPart(rfatToSeparators); FRenFile.UserManualEdit:= False; end else // else - select next sepoarated part of file RenameSelectPart(rfatNextSeparated); end else begin FRenameFile := aFile; edtRename.Hint := aFile.FullPath; edtRename.Text := aFile.Name; edtRename.Visible := True; edtRename.SetFocus; FRenTags:= ' -_.'; // separator set FRenFile.UserManualEdit:= False; // cycle of selection Name-FullName-Ext or FullName-Name-Ext, // after finish this cycle will be part selection mechanism, don't need cycle if no extension FRenFile.CycleFinished:= (FRenFile.LenExt = 0); Application.QueueAsyncCall(@ShowRenameFileEditInitSelect, 0); aFile:= nil; end; end; procedure TFileViewWithMainCtrl.UpdateRenameFileEditPosition; var AFile: TDisplayFile; begin if edtRename.Visible then begin AFile:= GetActiveDisplayFile; // Cannot find original file, cancel rename if (AFile = nil) or (not mbCompareFileNames(AFile.FSFile.FullPath, FRenameFile.FullPath)) then begin edtRename.Hide; SetFocus; end; end; end; procedure TFileViewWithMainCtrl.RenameSelectPart(AActionType: TRenameFileActionType); var ib,ie:integer; begin FRenFile.LastAction:=AActionType; case AActionType of // get current selection action type rfatName: begin {$IFDEF LCLGTK2} edtRename.SelStart:=1; {$ENDIF} edtRename.SelStart:=0; edtRename.SelLength:=FRenFile.LenNam; end; rfatExt : begin edtRename.SelStart:=FRenFile.LenNam+1; edtRename.SelLength:=FRenFile.LenExt; end; rfatFull: begin {$IFDEF LCLGTK2} edtRename.SelStart:=1; {$ENDIF} edtRename.SelStart:=0; edtRename.SelLength:=FRenFile.LenFul; end; rfatToSeparators: begin // search backward the separator to set begin of selection ib:=TagPos(FRenTags,edtRename.Text,edtRename.SelStart,True); // begin // skip next separators if exist while (ib>0)and(ib0)do inc(ib); if ib>=FRenFile.LenFul then ib:=0; if ib>=edtRename.SelStart+edtRename.SelLength+1 then // if new position index higher of the same - search end index from it ie:=TagPos(FRenTags,edtRename.Text,ib+1,False) else // else search of end begin from last start index+selectionLength+1 ie:=TagPos(FRenTags,edtRename.Text,edtRename.SelStart+edtRename.SelLength+1,False); // end edtRename.SelStart:=ib; edtRename.SelLength:=ie-ib-1; end; rfatNextSeparated: begin ib:=TagPos(FRenTags,edtRename.Text,edtRename.SelStart+edtRename.SelLength+1,False); // skip next separators if exist while (ib>0)and(ib0)do inc(ib); //UTF8FindNearestCharStart(); if ib>=FRenFile.LenFul then edtRename.SelStart:=0 else edtRename.SelStart:=ib; ie:=TagPos(FRenTags,edtRename.Text,edtRename.SelStart+1,False)-1; // end if ie<0 then ie:=FRenFile.LenFul; edtRename.SelLength:=ie-edtRename.SelStart; end; end; end; procedure TFileViewWithMainCtrl.WorkerStarting(const Worker: TFileViewWorker); begin inherited WorkerStarting(Worker); MainControl.Cursor := crHourGlass; UpdateInfoPanel; // Update status line only end; end. doublecmd-1.1.30/src/fileviews/ufileviewwithgrid.pas0000644000175000001440000007031615104114162021626 0ustar alexxusersunit uFileViewWithGrid; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Graphics, StdCtrls, LCLVersion, uDisplayFile, DCXmlConfig, uFileSorting, uFileProperty, uFileViewWithMainCtrl, uFile, uFileViewHeader, uFileView, uFileSource, uSmoothScrollingGrid; type TFileViewWithGrid = class; { TFileViewGrid } TFileViewGrid = class(TSmoothScrollingGrid) protected FLastMouseMoveTime: QWord; FLastMouseScrollTime: QWord; FFileView: TFileViewWithGrid; protected procedure Scroll(Message: Cardinal; ScrollCode: SmallInt); {$IF lcl_fullversion < 1080003} function SelectCell(aCol, aRow: Integer): Boolean; override; {$ENDIF} procedure RowHeightsChanged; override; procedure ColWidthsChanged; override; procedure FinalizeWnd; override; procedure InitializeWnd; override; function MouseOnGrid(X, Y: LongInt): Boolean; procedure DoOnResize; override; procedure DragCanceled; override; procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure TopLeftChanged; override; function GetBorderWidth: Integer; protected procedure SetColRowCount(Count: Integer); procedure DrawLines(aIdx, aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure PrepareColors(aFile: TDisplayFile; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure UpdateView; virtual; abstract; procedure CalculateColRowCount; virtual; abstract; procedure CalculateColumnWidth; virtual; abstract; {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} public constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; virtual; function CellToIndex(ACol, ARow: Integer): Integer; virtual; abstract; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); virtual; abstract; property BorderWidth: Integer read GetBorderWidth; end; { TFileViewGridClass } TFileViewGridClass = class of TFileViewGrid; { TFileViewWithGrid } TFileViewWithGrid = class (TFileViewWithMainCtrl) protected TabHeader: TFileViewFixedHeader; dgPanel: TFileViewGrid; lblDetails: TLabel; private procedure SetFilesDisplayItems; procedure UpdateFooterDetails; procedure dgPanelSelection(Sender: TObject; aCol, aRow: Integer); protected procedure MakeColumnsStrings(AFile: TDisplayFile); function GetFileViewGridClass: TFileViewGridClass; virtual; abstract; protected procedure CreateDefault(AOwner: TWinControl); override; procedure BeforeMakeFileList; override; procedure ClearAfterDragDrop; override; procedure AfterChangePath; override; procedure DisplayFileListChanged; override; procedure DoOnResize; override; procedure FileSourceFileListLoaded; override; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(FileIndex: PtrInt): TRect; override; procedure RedrawFile(FileIndex: PtrInt); override; procedure RedrawFile(DisplayFile: TDisplayFile); override; procedure RedrawFiles; override; procedure SetActiveFile(FileIndex: PtrInt; ScrollTo: Boolean; aLastTopRowIndex: PtrInt = -1); override; procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure UpdateFlatFileName; override; procedure UpdateInfoPanel; override; procedure DoUpdateView; override; procedure SetSorting(const NewSortings: TFileSortings); override; public constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; destructor Destroy; override; procedure CloneTo(FileView: TFileView); override; function AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; end; function FitFileName(const AFileName: String; ACanvas: TCanvas; AFile: TFile; ATargetWidth: Integer): String; function FitOtherCellText(const sStringToFit:String; ACanvas:TCanvas; ATargetWidth: Integer): String; implementation uses Types, LCLIntf, LCLType, LCLProc, LazUTF8, Math, LMessages, DCStrUtils, uGlobs, uPixmapManager, uKeyboard, uDCUtils, fMain, uFileFunctions; { Workaround https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/40934 } function TextFitInfo(ACanvas: TCanvas; const Text: String; MaxWidth: Integer): Integer; var lSize: TSize; begin Result:= 0; LCLIntf.GetTextExtentExPoint(ACanvas.Handle, PChar(Text), Length(Text), MaxWidth, @Result, nil, lSize); end; function FitFileName(const AFileName: String; ACanvas: TCanvas; AFile: TFile; ATargetWidth: Integer): String; var S: String; Index: Integer; AMaxWidth: Integer; begin Index:= UTF8Length(AFileName); AMaxWidth:= TextFitInfo(ACanvas, AFileName, ATargetWidth); if Index <= AMaxWidth then Result:= AFileName else begin if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then S:= '..' + gFolderPostfix else begin S:= '..'; end; Index:= TextFitInfo(ACanvas, AFileName, ATargetWidth - ACanvas.TextWidth(S)); Result:= UTF8Copy(AFileName, 1, Index) + S; end; end; { FitOtherCellText } function FitOtherCellText(const sStringToFit:String; ACanvas:TCanvas; ATargetWidth: Integer): String; const ELLIPSIS = '..'; var Index: Integer; AMaxWidth: Integer; begin Index:= UTF8Length(sStringToFit); AMaxWidth:= TextFitInfo(ACanvas, sStringToFit, ATargetWidth); if Index <= AMaxWidth then Result:= sStringToFit else begin Index:= TextFitInfo(ACanvas, sStringToFit, ATargetWidth - ACanvas.TextWidth(ELLIPSIS)); Result:= UTF8Copy(sStringToFit, 1, Index) + ELLIPSIS; end; end; { TFileViewGrid } procedure TFileViewGrid.InitializeWnd; begin inherited InitializeWnd; FFileView.InitializeDragDropEx(Self); end; procedure TFileViewGrid.DoOnResize; begin CalculateColRowCount; CalculateColumnWidth; inherited DoOnResize; end; procedure TFileViewGrid.DragCanceled; begin fGridState:= gsNormal; end; procedure TFileViewGrid.KeyDown(var Key: Word; Shift: TShiftState); begin {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then begin if ((Row = RowCount-1) and (Key = VK_DOWN)) or ((Row = FixedRows) and (Key = VK_UP)) then Key := 0; end; {$ENDIF} inherited KeyDown(Key, Shift); end; procedure TFileViewGrid.Scroll(Message: Cardinal; ScrollCode: SmallInt); var Msg: TLMScroll; begin Msg.Msg := Message; Msg.ScrollCode := ScrollCode; Msg.SmallPos := 1; // How many lines scroll Msg.ScrollBar := Handle; Dispatch(Msg); end; {$IF lcl_fullversion < 1080003} // Workaround for Lazarus issue 31942. function TFileViewGrid.SelectCell(aCol, aRow: Integer): Boolean; begin Result:= inherited SelectCell(aCol, aRow); // ScrollToCell hangs when Width = 0 if Width = 0 then begin Result:= False; SetColRow(aCol, aRow); end; end; {$ENDIF} procedure TFileViewGrid.RowHeightsChanged; begin inherited RowHeightsChanged; CalculateColRowCount; end; procedure TFileViewGrid.ColWidthsChanged; begin inherited ColWidthsChanged; CalculateColRowCount; end; function TFileViewGrid.MouseOnGrid(X, Y: LongInt): Boolean; var bTemp: Boolean; iRow, iCol: LongInt; begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= not (CellToIndex(iCol, iRow) < 0); end; procedure TFileViewGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FLastMouseMoveTime := 0; FLastMouseScrollTime := 0; if FFileView.IsLoadingFileList then Exit; {$IF DECLARED(lcl_fullversion) and (lcl_fullversion >= 093100)} // Don't scroll partially visible cells on mouse click Options:= Options + [goDontScrollPartCell]; {$ENDIF} {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseDown event is sent just before doubleclick, so if we drop // doubleclick events we have to also drop MouseDown events that precede them. if FFileView.TooManyDoubleClicks then Exit; {$ENDIF} FFileView.FMainControlMouseDown := True; if MouseOnGrid(X, Y) then inherited MouseDown(Button, Shift, X, Y) else begin if Assigned(OnMouseDown) then begin OnMouseDown(Self, Button, Shift, X, Y); end; end; if not Focused then begin if CanSetFocus then SetFocus; end; end; procedure TFileViewGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var BackgroundClick: Boolean; Point: TPoint; begin if FFileView.IsLoadingFileList then Exit; {$IF DECLARED(lcl_fullversion) and (lcl_fullversion >= 093100)} // Don't scroll partially visible cells on mouse click Options:= Options - [goDontScrollPartCell]; {$ENDIF} {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseUp event is sent just after doubleclick, so if we drop // doubleclick events we have to also drop MouseUp events that follow them. if FFileView.TooManyDoubleClicks then Exit; {$ENDIF} // Handle only if button-up was not lifted to finish drag&drop operation. if not FFileView.FMainControlMouseDown then Exit; inherited MouseUp(Button, Shift, X, Y); FFileView.FMainControlMouseDown := False; if Button = mbRight then begin { If right click on file/directory } if ((gMouseSelectionButton <> 1) or not gMouseSelectionEnabled) then begin BackgroundClick:= not MouseOnGrid(X, Y); Point := ClientToScreen(Classes.Point(X, Y)); frmMain.Commands.DoContextMenu(FFileView, Point.x, Point.y, BackgroundClick); end else if (gMouseSelectionEnabled and (gMouseSelectionButton = 1)) then begin FFileView.tmContextMenu.Enabled:= False; // stop context menu timer end; end { Open folder in new tab on middle click } else if (Button = mbMiddle) and MouseOnGrid(X, Y) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TFileViewGrid.TopLeftChanged; begin inherited TopLeftChanged; FFileView.Notify([fvnVisibleFilePropertiesChanged]); end; function TFileViewGrid.GetBorderWidth: Integer; begin if Flat and (BorderStyle = bsSingle) then Result := 1 else Result := 0; end; procedure TFileViewGrid.SetColRowCount(Count: Integer); var aCol, aRow: Integer; begin if CellToIndex(Col, Row) < 0 then begin FFileView.FUpdatingActiveFile := True; IndexToCell(Count - 1, ACol, ARow); MoveExtend(False, aCol, aRow); FFileView.FUpdatingActiveFile := False; end; end; procedure TFileViewGrid.DrawLines(aIdx, aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var delta:integer; begin //Canvas.Pen.Width := ColumnsSet.GetColumnBorderFrameWidth(ACol); Canvas.Pen.Width := gBorderFrameWidth; delta := Canvas.Pen.Width shr 1; Canvas.Brush.Style:=bsClear; // Draw frame cursor. if gUseFrameCursor and (gdSelected in aState) and (FFileView.Active or gUseInactiveSelColor) then begin with gColors.FilePanel^ do begin if FFileView.Active then Canvas.Pen.Color := CursorColor else begin Canvas.Pen.Color := InactiveCursorColor; end; end; Canvas.Rectangle(Rect(aRect.Left+delta, aRect.Top+delta , aRect.Right - delta, aRect.Bottom - delta)); end; // Draw drop selection. if (FFileView.FDropFileIndex >= 0) and (aIdx = FFileView.FDropFileIndex) then begin Canvas.Pen.Color := gColors.FilePanel^.ForeColor; Canvas.Rectangle(Rect(aRect.Left+delta, aRect.Top+delta , aRect.Right - delta, aRect.Bottom - delta)); end; Canvas.Brush.Style:=bsSolid; end; procedure TFileViewGrid.PrepareColors(aFile: TDisplayFile; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; begin Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Size := gFonts[dcfMain].Size; Canvas.Font.Style := gFonts[dcfMain].Style; IsCursor := (gdSelected in aState) and FFileView.Active and (not gUseFrameCursor); IsCursorInactive := (gdSelected in aState) and (not FFileView.Active) and (not gUseFrameCursor); with gColors.FilePanel^ do begin // Set up default background color first. if IsCursor then BackgroundColor := CursorColor else begin if IsCursorInactive AND gUseInactiveSelColor then BackgroundColor := InactiveCursorColor else // Alternate rows background color. if odd(ARow) then BackgroundColor := BackColor else BackgroundColor := BackColor2; end; // Set text color. TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := ForeColor; if AFile.Selected then begin if gUseInvertedSelection then begin //------------------------------------------------------ if IsCursor OR (IsCursorInactive AND gUseInactiveSelColor) then begin TextColor := InvertColor(CursorText); end else begin if FFileView.Active OR (not gUseInactiveSelColor) then BackgroundColor := MarkColor else BackgroundColor := InactiveMarkColor; TextColor := BackColor; end; //------------------------------------------------------ end else begin if FFileView.Active OR (not gUseInactiveSelColor) then TextColor := MarkColor else TextColor := InactiveMarkColor; end; end else if IsCursor then begin TextColor := CursorText; end; end; BackgroundColor := FFileView.DimColor(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin if ColorIsLight(BackgroundColor) then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct) end else begin TextColor := DarkColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := DarkColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; end; // Draw background. Canvas.Brush.Color := BackgroundColor; Canvas.FillRect(aRect); Canvas.Font.Color := TextColor; end; {$if lcl_fullversion >= 1070000} procedure TFileViewGrid.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust vertical layout inherited DoAutoAdjustLayout(AMode, AXProportion, 1.0); end; {$endif} constructor TFileViewGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FFileView := AParent as TFileViewWithGrid; inherited Create(AOwner); // Workaround for Lazarus issue 18832. // Set Fixed... before setting ...Count. FixedRows := 0; FixedCols := 0; // Override default values to start with one column and one rows. RowCount := 1; ColCount := 1; DefaultColWidth := 200; BorderStyle := bsNone; // Border no need as grid inside pagectl Self.Parent := AParent; DoubleBuffered := True; Align := alClient; MouseWheelOption:= mwGrid; AllowOutboundEvents := False; Options := [goTabs, goThumbTracking]; TabStop := False; UpdateView; end; procedure TFileViewGrid.FinalizeWnd; begin FFileView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; { TFileViewWithGrid } procedure TFileViewWithGrid.RedrawFile(DisplayFile: TDisplayFile); var ACol, ARow: Integer; begin dgPanel.IndexToCell(PtrInt(DisplayFile.DisplayItem), ACol, ARow); dgPanel.InvalidateCell(ACol, ARow); end; procedure TFileViewWithGrid.RedrawFiles; begin dgPanel.Invalidate; end; procedure TFileViewWithGrid.MakeColumnsStrings(AFile: TDisplayFile); begin AFile.DisplayStrings.BeginUpdate; try AFile.DisplayStrings.Clear; AFile.DisplayStrings.Add(FormatFileFunction('DC().GETFILENAME{}', AFile.FSFile, FileSource)); finally AFile.DisplayStrings.EndUpdate; end; end; procedure TFileViewWithGrid.RedrawFile(FileIndex: PtrInt); var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); dgPanel.InvalidateCell(ACol, ARow); end; procedure TFileViewWithGrid.DisplayFileListChanged; var ScrollTo: Boolean; begin ScrollTo := IsActiveFileVisible; // Row count updates and Content updates should be grouped in one transaction // otherwise, Grids may have subtle synchronization issues. dgPanel.BeginUpdate; dgPanel.SetColRowCount(FFiles.Count); // Update grid col and row count dgPanel.CalculateColRowCount; dgPanel.CalculateColumnWidth; SetFilesDisplayItems; dgPanel.EndUpdate; if SetActiveFileNow(RequestedActiveFile, True, FLastTopRowIndex) then RequestedActiveFile := '' else // Requested file was not found, restore position to last active file. SetActiveFileNow(LastActiveFile, ScrollTo, FLastTopRowIndex); Notify([fvnVisibleFilePropertiesChanged]); inherited DisplayFileListChanged; end; procedure TFileViewWithGrid.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); dgPanel:= GetFileViewGridClass.Create(Self, Self); MainControl := dgPanel; TabHeader:= TFileViewFixedHeader.Create(Self, Self); TabHeader.Top:= pnlHeader.Height; lblDetails:= TLabel.Create(pnlFooter); lblDetails.Align:= alRight; lblDetails.Alignment:= taRightJustify; lblDetails.Parent:= pnlFooter; dgPanel.OnSelection:= @dgPanelSelection; // By default always use some properties. FilePropertiesNeeded := [fpName, fpSize, // For info panel (total size, selected size) fpAttributes, // For distinguishing directories fpLink, // For distinguishing directories (link to dir) and link icons fpModificationTime // For selecting/coloring files (by SearchTemplate) ]; end; procedure TFileViewWithGrid.BeforeMakeFileList; begin inherited BeforeMakeFileList; end; procedure TFileViewWithGrid.FileSourceFileListLoaded; begin inherited; FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; dgPanel.CalculateColRowCount; dgPanel.CalculateColumnWidth; end; procedure TFileViewWithGrid.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // reset TCustomGrid state dgPanel.FGridState := gsNormal; end; procedure TFileViewWithGrid.AfterChangePath; begin inherited AfterChangePath; if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; end; end; function TFileViewWithGrid.GetActiveFileIndex: PtrInt; begin Result := dgPanel.CellToIndex(dgPanel.Col, dgPanel.Row); end; function TFileViewWithGrid.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var bTemp: Boolean; iRow, iCol: LongInt; begin with dgPanel do begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= CellToIndex(iCol, iRow); AtFileList := True; // Always at file list because header in dgPanel not used end; end; function TFileViewWithGrid.GetFileRect(FileIndex: PtrInt): TRect; var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); Result := dgPanel.CellRect(ACol, ARow); end; procedure TFileViewWithGrid.DoOnResize; var I: Integer; AWidth: Integer; begin inherited DoOnResize; if Assigned(TabHeader) then begin AWidth:= Width div TabHeader.Sections.Count; for I:= 0 to TabHeader.Sections.Count - 1 do TabHeader.Sections[I].Width:= AWidth; end; UpdateFooterDetails; Notify([fvnVisibleFilePropertiesChanged]); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags); var I: Integer; begin inherited Create(AOwner, AFileView, AFlags); if (not (AFileView is TFileViewWithGrid)) and Assigned(FAllDisplayFiles) then begin // Update display strings in case FileView type have changed. for I := 0 to FAllDisplayFiles.Count - 1 do MakeColumnsStrings(FAllDisplayFiles[I]); end; TabHeader.UpdateSorting(Sorting); end; destructor TFileViewWithGrid.Destroy; begin inherited Destroy; end; procedure TFileViewWithGrid.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TFileViewWithGrid then with FileView as TFileViewWithGrid do begin TabHeader.UpdateSorting(Self.Sorting); end; end; end; function TFileViewWithGrid.AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; begin Result:= inherited AddFileSource(aFileSource, aPath); if Result and (not IsLoadingFileList) then begin FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; end; end; procedure TFileViewWithGrid.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); begin inherited LoadConfiguration(AConfig, ANode); TabHeader.UpdateSorting(Sorting); end; procedure TFileViewWithGrid.SetActiveFile(FileIndex: PtrInt; ScrollTo: Boolean; aLastTopRowIndex: PtrInt = -1); var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); if not ScrollTo then dgPanel.SetColRow(ACol, ARow) else begin dgPanel.MoveExtend(False, ACol, ARow); dgPanel.Click; end; end; procedure TFileViewWithGrid.SetFilesDisplayItems; var i: Integer; begin for i := 0 to FFiles.Count - 1 do FFiles[i].DisplayItem := Pointer(i); end; procedure TFileViewWithGrid.UpdateFooterDetails; var AFile: TFile; AFileName: String; begin if not Assigned(FAllDisplayFiles) or (FAllDisplayFiles.Count = 0) or (FSelectedCount > 0) then lblDetails.Caption:= EmptyStr else begin AFile:= CloneActiveFile; if Assigned(AFile) then try // Get details info about file AFileName:= #32#32 +FormatFileFunction('DC().GETFILEEXT{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILESIZE{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILETIME{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILEATTR{}', AFile, FileSource); lblDetails.Caption:= AFileName; // Get file name if not FlatView then begin AFileName:= FormatFileFunction('DC().GETFILENAMENOEXT{}', AFile, FileSource); lblInfo.Caption:= FitFileName(AFileName, lblInfo.Canvas, AFile, lblInfo.ClientWidth); end; finally AFile.Free; end; end; end; procedure TFileViewWithGrid.dgPanelSelection(Sender: TObject; aCol, aRow: Integer); begin DoFileIndexChanged(dgPanel.CellToIndex(aCol, aRow), dgPanel.TopRow); UpdateFooterDetails; end; procedure TFileViewWithGrid.UpdateInfoPanel; begin inherited UpdateInfoPanel; UpdateFooterDetails; end; procedure TFileViewWithGrid.DoUpdateView; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin with TabHeader do begin OldFont := Canvas.Font; Canvas.Font := Font; Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; end; var TabHeaderHeight: Integer; begin inherited DoUpdateView; dgPanel.FocusRectVisible := gUseCursorBorder and not gUseFrameCursor; dgPanel.FocusColor := gColors.FilePanel^.CursorBorderColor; dgPanel.UpdateView; TabHeader.Visible := gTabHeader; // Set rows of header. if gTabHeader then begin TabHeader.UpdateHeader; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; TabHeader.Height := TabHeaderHeight; end; Notify([fvnVisibleFilePropertiesChanged]); end; procedure TFileViewWithGrid.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); TabHeader.UpdateSorting(NewSortings); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags); begin inherited Create(AOwner, AFileSource, APath, AFlags); end; procedure TFileViewWithGrid.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TFileViewWithGrid.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var Index, aCol, aRow: Integer; AFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin AFile := FFiles[Index]; if IsItemValid(AFile) then begin InvertFileSelection(AFile, False); DoSelectionChanged(Index); end; dgPanel.IndexToCell(Index + 1, aCol, aRow); if not ((aCol < 0) and (aRow < 0)) then begin dgPanel.Col:= aCol; dgPanel.Row:= aRow; end; end; end; Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin AFile := FFiles[Index]; if IsItemValid(aFile) then begin if (aFile.FSFile.IsDirectory or aFile.FSFile.IsLinkToDirectory) and not aFile.Selected then begin CalculateSpace(aFile); end; InvertFileSelection(aFile, False); DoSelectionChanged(Index); if gSpaceMovesDown then begin dgPanel.IndexToCell(Index + 1, aCol, aRow); if not ((aCol < 0) and (aRow < 0)) then begin dgPanel.Col:= aCol; dgPanel.Row:= aRow; end; end; end; end; Key := 0; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TFileViewWithGrid.UpdateFlatFileName; var AFile: TFile; AFileName: String; begin AFile:= CloneActiveFile; if Assigned(AFile) then try AFileName:= ExtractDirLevel(CurrentPath, AFile.Path) + AFile.NameNoExt; lblInfo.Caption := MinimizeFilePath(AFileName, lblInfo.Canvas, lblInfo.Width); finally AFile.Free; end; end; end. doublecmd-1.1.30/src/fileviews/ufileviewhistory.pas0000644000175000001440000002346015104114162021504 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- History of visited paths, file sources for a file view. Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFileViewHistory; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type { TFileViewHistory } TFileViewHistory = class private FCurrentFileSource: Integer; FCurrentPath: Integer; FHistory: TFPList; // of PFileViewHistoryEntry procedure Delete(Index: Integer); {en Delete history after current indexes. } procedure DeleteAfterCurrent; function GetCount: Integer; // = FileSourcesCount function GetCurrentFileSource: IFileSource; function GetCurrentPath: String; function GetCurrentFilename: String; function GetFileSource(Index: Integer): IFileSource; function GetPath(FileSourceIndex, PathIndex: Integer): String; function GetFilename(FileSourceIndex, FilenameIndex: Integer): String; function GetPathsCount(Index: Integer): Integer; public constructor Create; destructor Destroy; override; procedure Clear; {$IFDEF DEBUG_HISTORY} procedure DebugShow; {$ENDIF} procedure Add(aFileSource: IFileSource; aPath: String); procedure AddFileSource(aFileSource: IFileSource); procedure AddPath(aPath: String); procedure SetFilenameForCurrentPath(aFilename: String); procedure Assign(otherHistory: TFileViewHistory); procedure DeleteFromCurrentFileSource; procedure SetIndexes(aFileSourceIndex: Integer; aCurrentPathIndex: Integer); property Count: Integer read GetCount; property CurrentFileSource: IFileSource read GetCurrentFileSource; property CurrentFileSourceIndex: Integer read FCurrentFileSource write FCurrentFileSource; property CurrentPath: String read GetCurrentPath; property CurrentFilename: String read GetCurrentFilename; property CurrentPathIndex: Integer read FCurrentPath write FCurrentPath; property FileSource[Index: Integer]: IFileSource read GetFileSource; property Path[FileSourceIndex, PathIndex: Integer]: String read GetPath; property Filename[FileSourceIndex, FilenameIndex: Integer]: String read GetFilename; property PathsCount[Index: Integer]: Integer read GetPathsCount; end; implementation type PFileViewHistoryEntry = ^TFileViewHistoryEntry; TFileViewHistoryEntry = record FileSource: IFileSource; PathsList : TStringList; // paths always include trailing path delimiter FilenamesList : TStringList; //TODO: refactor this! // it's much better to store list of objects each of them contain // both path and filename, instead of keeping two separate lists. // (right now, quick-n-dirty solution was applied) end; { TFileViewHistory } constructor TFileViewHistory.Create; begin FHistory := TFPList.Create; FCurrentFileSource := -1; FCurrentPath := -1; end; destructor TFileViewHistory.Destroy; begin inherited Destroy; Clear; FreeAndNil(FHistory); end; procedure TFileViewHistory.Clear; var i: Integer; begin for i := FHistory.Count - 1 downto 0 do Delete(i); FCurrentFileSource := -1; FCurrentPath := -1; end; {$IFDEF DEBUG_HISTORY} procedure TFileViewHistory.DebugShow; var i, j: Integer; HistEntry: PFileViewHistoryEntry; begin for i := 0 to FHistory.Count - 1 do begin HistEntry := PFileViewHistoryEntry(FHistory.Items[i]); WriteLn('--------------------------------------'); WriteLn(' ', HistEntry^.FileSource.ClassName); for j := 0 to HistEntry^.PathsList.Count - 1 do begin if (i = FCurrentFileSource) and (j = FCurrentPath) then Write('=> ') else Write(' '); WriteLn(HistEntry^.PathsList.Strings[j]); end; end; end; {$ENDIF} function TFileViewHistory.GetCount: Integer; begin Result := FHistory.Count; end; function TFileViewHistory.GetCurrentFileSource: IFileSource; begin if FCurrentFileSource >= 0 then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.FileSource else Result := nil; end; function TFileViewHistory.GetCurrentPath: String; begin if (FCurrentFileSource >= 0) and (FCurrentPath >= 0) then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.PathsList[FCurrentPath] else Result := EmptyStr; end; function TFileViewHistory.GetCurrentFilename: String; begin if (FCurrentFileSource >= 0) and (FCurrentPath >= 0) then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.FilenamesList[FCurrentPath] else Result := EmptyStr; end; function TFileViewHistory.GetFileSource(Index: Integer): IFileSource; begin Result := PFileViewHistoryEntry(FHistory.Items[Index])^.FileSource; end; function TFileViewHistory.GetPath(FileSourceIndex, PathIndex: Integer): String; begin Result := PFileViewHistoryEntry(FHistory.Items[FileSourceIndex])^.PathsList.Strings[PathIndex]; end; function TFileViewHistory.GetFilename(FileSourceIndex, FilenameIndex: Integer): String; begin Result := PFileViewHistoryEntry(FHistory.Items[FileSourceIndex])^.FilenamesList.Strings[FilenameIndex]; end; function TFileViewHistory.GetPathsCount(Index: Integer): Integer; begin Result := PFileViewHistoryEntry(FHistory.Items[Index])^.PathsList.Count; end; procedure TFileViewHistory.Add(aFileSource: IFileSource; aPath: String); begin AddFileSource(aFileSource); AddPath(aPath); end; procedure TFileViewHistory.AddFileSource(aFileSource: IFileSource); var HistEntry: PFileViewHistoryEntry; begin if FCurrentFileSource >= 0 then begin DeleteAfterCurrent; HistEntry := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource]); // Don't add if the current file source is the same. if HistEntry^.FileSource.Equals(aFileSource) then Exit; end; New(HistEntry); FHistory.Add(HistEntry); HistEntry^.FileSource := aFileSource; HistEntry^.PathsList := TStringList.Create; HistEntry^.FilenamesList := TStringList.Create; Inc(FCurrentFileSource); FCurrentPath := -1; end; procedure TFileViewHistory.SetFilenameForCurrentPath(aFilename: String); var aFilenames: TStringList; begin aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; if (FCurrentPath >= 0) then begin aFilenames[FCurrentPath] := aFilename; end end; procedure TFileViewHistory.AddPath(aPath: String); var aPaths: TStringList; aFilenames: TStringList; begin if FCurrentFileSource >= 0 then begin DeleteAfterCurrent; aPaths := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.PathsList; aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; if aPath <> '' then aPath := IncludeTrailingPathDelimiter(aPath); if (aPaths.Count = 0) or (aPaths.Strings[FCurrentPath] <> aPath) then begin aPaths.Add(aPath); aFilenames.Add(''); if aPaths.Count > 50 then begin aPaths.Delete(0); aFilenames.Delete(0); end else Inc(FCurrentPath); end; end; end; procedure TFileViewHistory.Assign(otherHistory: TFileViewHistory); var i: Integer; HistEntry, otherHistEntry: PFileViewHistoryEntry; begin Clear; for i := 0 to otherHistory.FHistory.Count - 1 do begin otherHistEntry := PFileViewHistoryEntry(otherHistory.FHistory.Items[i]); New(HistEntry); FHistory.Add(HistEntry); HistEntry^.FileSource := otherHistEntry^.FileSource; HistEntry^.PathsList := TStringList.Create; HistEntry^.PathsList.AddStrings(otherHistEntry^.PathsList); HistEntry^.FilenamesList := TStringList.Create; HistEntry^.FilenamesList.AddStrings(otherHistEntry^.FilenamesList); end; FCurrentFileSource := otherHistory.FCurrentFileSource; FCurrentPath := otherHistory.FCurrentPath; end; procedure TFileViewHistory.Delete(Index: Integer); var HistEntry: PFileViewHistoryEntry; begin HistEntry := PFileViewHistoryEntry(FHistory.Items[Index]); FHistory.Delete(Index); HistEntry^.FileSource := nil; HistEntry^.PathsList.Free; HistEntry^.FilenamesList.Free; Dispose(HistEntry); end; procedure TFileViewHistory.DeleteAfterCurrent; var i: Integer; aPaths: TStringList; aFilenames: TStringList; begin if FHistory.Count > 0 then begin for i := FHistory.Count - 1 downto FCurrentFileSource + 1 do Delete(i); aPaths := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.PathsList; aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; for i := aPaths.Count - 1 downto FCurrentPath + 1 do begin aPaths.Delete(i); aFilenames.Delete(i); end; end; end; procedure TFileViewHistory.DeleteFromCurrentFileSource; var i: Integer; begin if FHistory.Count > 0 then begin for i := FHistory.Count - 1 downto FCurrentFileSource do Delete(i); Dec(FCurrentFileSource); if FCurrentFileSource >= 0 then // Set to last entry. FCurrentPath := PathsCount[FCurrentFileSource] - 1 else FCurrentFileSource := -1; end; end; procedure TFileViewHistory.SetIndexes(aFileSourceIndex: Integer; aCurrentPathIndex: Integer); begin FCurrentFileSource := aFileSourceIndex; FCurrentPath := aCurrentPathIndex; end; end. doublecmd-1.1.30/src/fileviews/ufileviewheader.pas0000644000175000001440000004246615104114162021242 0ustar alexxusersunit uFileViewHeader; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, ComCtrls, LCLVersion, uPathLabel, uFileView, KASPathEdit, uFileSorting; type { TFileViewHeader } TFileViewHeader = class(TPanel) private FFileView: TFileView; FAddressLabel: TPathLabel; FPathLabel: TPathLabel; FPathEdit: TKASPathEdit; procedure HeaderResize(Sender: TObject); procedure PathEditExit(Sender: TObject); procedure onKeyESCAPE(Sender: TObject); procedure onKeyRETURN(Sender: TObject); procedure PathLabelClick(Sender: TObject); procedure PathLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure AddressLabelClick(Sender: TObject); procedure AddressLabelMouseEnter(Sender: TObject); procedure PathLabelDblClick(Sender: TObject); procedure tmViewHistoryMenuTimer(Sender: TObject); procedure PathLabelMouseWheelUp(Sender: TObject;Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); procedure PathLabelMouseWheelDown(Sender: TObject;Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); procedure HeaderShowHint(Sender: TObject; HintInfo: PHintInfo); procedure EachViewUpdateHeader(AFileView: TFileView; {%H-}UserData: Pointer); protected tmViewHistoryMenu: TTimer; procedure PathLabelSetColor(APathLabel: TPathLabel); public constructor Create(AOwner: TFileView; AParent: TWinControl); reintroduce; procedure UpdateAddressLabel; procedure UpdatePathLabel; procedure UpdateColor; procedure UpdateFont; procedure ShowPathEdit; procedure SetActive(bActive: Boolean); property PathLabel: TPathLabel read FPathLabel; end; { TFileViewFixedHeader } TFileViewFixedHeader = class(THeaderControl) private FFileView: TFileView; FDown: Boolean; FMouseInControl: Boolean; FSelectedSection: Integer; FSorting: TFileSortings; procedure UpdateState; protected procedure SectionClick(Section: THeaderSection); override; procedure MouseEnter; override; procedure MouseLeave; override; procedure MouseDown({%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); override; procedure MouseMove({%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); override; procedure MouseUp({%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); override; {$if lcl_fullversion >= 1070000} procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; {$endif} public constructor Create(AOwner: TFileView; AParent: TWinControl); reintroduce; destructor Destroy; override; procedure Click; override; procedure DblClick; override; procedure UpdateHeader; procedure UpdateSorting(Sorting: TFileSortings); end; implementation uses LCLType, ShellCtrls, Graphics, uDCUtils, DCOSUtils, DCStrUtils, uKeyboard, fMain, uFileSourceUtil, uGlobs, uPixMapManager, uLng, uFileFunctions, uArchiveFileSource, uFileViewWithPanels, uVfsModule; const SortingImageIndex: array[TSortDirection] of Integer = (-1, 0, 1); { TFileViewHeader } procedure TFileViewHeader.PathEditExit(Sender: TObject); begin FPathEdit.Visible := False; end; procedure TFileViewHeader.PathLabelClick(Sender: TObject); var walkPath, selectedDir, dirNameToSelect: String; begin FFileView.SetFocus; if FPathLabel.SelectedDir <> '' then begin // User clicked on a subdirectory of the path. walkPath := FFileView.CurrentPath; selectedDir := FPathLabel.SelectedDir; FFileView.CurrentPath := selectedDir; while (Length(walkPath) > Length(selectedDir) + 1) do begin dirNameToSelect := ExtractFileName(ExcludeTrailingPathDelimiter(walkPath)); walkPath := FFileView.FileSource.GetParentDir(walkPath); end; FFileView.SetActiveFile(dirNameToSelect); end else tmViewHistoryMenu.Enabled:=TRUE; //Let's start timer. If it's a double-click, we'll abort timer otherwise we'll show history as before but 250ms later. end; procedure TFileViewHeader.tmViewHistoryMenuTimer(Sender: TObject); begin tmViewHistoryMenu.Enabled:=FALSE; frmMain.Commands.cm_ViewHistory([]); end; procedure TFileViewHeader.PathLabelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); begin if (ssCtrl in Shift) and (gFonts[dcfPathEdit].Size < gFonts[dcfPathEdit].MaxValue) then begin gFonts[dcfPathEdit].Size:= gFonts[dcfPathEdit].Size + 1; frmMain.ForEachView(@EachViewUpdateHeader, nil); end; end; procedure TFileViewHeader.PathLabelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); begin if (ssCtrl in Shift) and (gFonts[dcfPathEdit].Size > gFonts[dcfPathEdit].MinValue) then begin gFonts[dcfPathEdit].Size:= gFonts[dcfPathEdit].Size - 1; frmMain.ForEachView(@EachViewUpdateHeader, nil); end; end; { TFileViewHeader.PathLabelDblClick } { -If we double-click on the the path label, it shows the Hot Dir popup menu at the cursor position. -If we click just once, after the 250ms of the timer, it shows the history. This will make both kind of people happy AND will make DC like TC} procedure TFileViewHeader.PathLabelDblClick(Sender: TObject); begin tmViewHistoryMenu.Enabled:=FALSE; //Cancel the possibility of a left click if gDblClickEditPath then ShowPathEdit else begin FFileView.SetFocus; frmMain.Commands.cm_DirHotList(['position=cursor']); end; end; procedure TFileViewHeader.PathLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin case Button of mbMiddle: begin FFileView.SetFocus; frmMain.Commands.cm_DirHotList(['position=cursor']); end; mbRight: begin ShowPathEdit; end; end; end; procedure TFileViewHeader.AddressLabelClick(Sender: TObject); var walkPath, dirNameToSelect: String; begin FFileView.SetFocus; if (FAddressLabel.AllowHighlight) and (Length(FAddressLabel.SelectedDir) > 0) then begin // User clicked on a subdirectory of the address. walkPath := FFileView.CurrentAddress; SetFileSystemPath(FFileView, FAddressLabel.SelectedDir); while (Length(walkPath) > Length(FAddressLabel.SelectedDir) + 1) do begin dirNameToSelect := ExtractFileName(ExcludeTrailingPathDelimiter(walkPath)); walkPath := FFileView.FileSource.GetParentDir(walkPath); end; FFileView.SetActiveFile(dirNameToSelect); end; end; procedure TFileViewHeader.AddressLabelMouseEnter(Sender: TObject); begin FAddressLabel.AllowHighlight:= FFileView.FileSource is TArchiveFileSource; end; procedure TFileViewHeader.EachViewUpdateHeader(AFileView: TFileView; UserData: Pointer); begin TFileViewWithPanels(AFileView).Header.UpdateFont; end; procedure TFileViewHeader.PathLabelSetColor(APathLabel: TPathLabel); begin with gColors.Path^ do begin APathLabel.ActiveColor:= ActiveColor; APathLabel.ActiveFontColor:= ActiveFontColor; APathLabel.InactiveColor:= InactiveColor; APathLabel.InactiveFontColor:= InactiveFontColor; end; end; procedure TFileViewHeader.onKeyESCAPE(Sender: TObject); begin FPathEdit.Visible:=False; FFileView.SetFocus; end; procedure TFileViewHeader.onKeyRETURN(Sender: TObject); var NewPath: String; AClass: TFileSourceClass; begin NewPath:= NormalizePathDelimiters(FPathEdit.Text); NewPath:= ReplaceEnvVars(ReplaceTilde(NewPath)); AClass:= gVfsModuleList.GetFileSource(NewPath); // Check file name on the local file system only if not ((AClass = nil) and mbFileExists(NewPath)) then begin if not ChooseFileSource(FFileView, NewPath, True) then Exit; end else begin if not ChooseFileSource(FFileView, ExtractFileDir(NewPath)) then Exit; FFileView.SetActiveFile(ExtractFileName(NewPath)); end; FPathEdit.Visible := False; FFileView.SetFocus; end; constructor TFileViewHeader.Create(AOwner: TFileView; AParent: TWinControl); begin inherited Create(AOwner); FFileView:= AOwner; Parent:= AParent; Align:= alTop; BevelInner:= bvNone; BevelOuter:= bvNone; AutoSize:= True; DoubleBuffered:= True; FAddressLabel := TPathLabel.Create(Self, False); FAddressLabel.Parent := Self; FAddressLabel.BorderSpacing.Bottom := 1; FPathLabel := TPathLabel.Create(Self, True); FPathLabel.Parent := Self; UpdateColor; // Display path below address. // For correct alignment, first put path at the top, then address at the top. FPathLabel.Align := alTop; FAddressLabel.Align := alTop; FPathEdit:= TKASPathEdit.Create(FPathLabel); FPathEdit.Parent:= Self; FPathEdit.Visible:= False; FPathEdit.TabStop:= False; FPathEdit.BorderStyle:= bsNone; FPathEdit.ObjectTypes:= [otFolders, otHidden]; OnResize:= @HeaderResize; OnShowHint:=@HeaderShowHint; FPathEdit.OnExit:= @PathEditExit; FPathEdit.onKeyESCAPE:=@onKeyESCAPE; FPathEdit.onKeyRETURN:=@onKeyRETURN; FPathEdit.OnShowHint:=@HeaderShowHint; FPathLabel.OnClick := @PathLabelClick; FPathLabel.OnDblClick := @PathLabelDblClick; FPathLabel.OnMouseUp := @PathLabelMouseUp; FPathLabel.OnMouseWheelDown := @PathLabelMouseWheelDown; FPathLabel.OnMouseWheelUp := @PathLabelMouseWheelUp; FPathLabel.OnShowHint:=@HeaderShowHint; FAddressLabel.OnClick := @AddressLabelClick; FAddressLabel.OnMouseEnter:= @AddressLabelMouseEnter; FAddressLabel.OnShowHint:=@HeaderShowHint; tmViewHistoryMenu := TTimer.Create(Self); //Timer used to show history after a while in case it was not a double click to show Hot dir tmViewHistoryMenu.Enabled := False; tmViewHistoryMenu.Interval := 250; tmViewHistoryMenu.OnTimer := @tmViewHistoryMenuTimer; UpdateFont; end; procedure TFileViewHeader.HeaderResize(Sender: TObject); begin UpdateAddressLabel; UpdatePathLabel; end; // 1. in most cases, as not to bother users, // the Header does not need to show hint, // 2. so set hint to the full path, only when the path in PathLabel is shortened // due to insufficient width procedure TFileViewHeader.HeaderShowHint(Sender: TObject; HintInfo: PHintInfo); begin HintInfo^.HintStr := ''; if FFileView.CurrentAddress<>'' then exit; if IncludeTrailingPathDelimiter(FPathLabel.Caption) <> FFileView.CurrentPath then HintInfo^.HintStr := FFileView.CurrentPath; end; procedure TFileViewHeader.UpdateAddressLabel; begin if FFileView.CurrentAddress = '' then begin FAddressLabel.Visible := False; end else begin FAddressLabel.Top:= 0; FAddressLabel.Caption := FFileView.CurrentAddress; FAddressLabel.Visible := True; end; end; procedure TFileViewHeader.UpdatePathLabel; begin FPathLabel.Caption := MinimizeFilePath(FFileView.CurrentPath, FPathLabel.Canvas, FPathLabel.Width); end; procedure TFileViewHeader.UpdateColor; begin PathLabelSetColor(FPathLabel); PathLabelSetColor(FAddressLabel); end; procedure TFileViewHeader.UpdateFont; begin FontOptionsToFont(gFonts[dcfPathEdit], FAddressLabel.Font); FontOptionsToFont(gFonts[dcfPathEdit], FPathLabel.Font); FontOptionsToFont(gFonts[dcfPathEdit], FPathEdit.Font); end; procedure TFileViewHeader.ShowPathEdit; begin with FPathLabel do begin FPathEdit.SetBounds(Left, Top, Width, Height); FPathEdit.Text := FFileView.CurrentPath; FPathEdit.Visible := True; FPathEdit.SetFocus; end; end; procedure TFileViewHeader.SetActive(bActive: Boolean); begin FAddressLabel.SetActive(bActive); FPathLabel.SetActive(bActive); end; { TFileViewFixedHeader } procedure TFileViewFixedHeader.UpdateState; var i, Index: Integer; MaxState: THeaderSectionState; P: TPoint; begin MaxState := hsNormal; if Enabled then if FDown then begin MaxState := hsPressed; Index := FSelectedSection; end else if FMouseInControl then begin MaxState := hsHot; P := ScreenToClient(Mouse.CursorPos); Index := GetSectionAt(P); end; for i := 0 to Sections.Count - 1 do if (i <> Index) then Sections[i].State := hsNormal else Sections[i].State := MaxState; end; procedure TFileViewFixedHeader.SectionClick(Section: THeaderSection); var SortingDirection : TSortDirection; NewSorting: TFileSortings; SortFunctions: TFileFunctions; begin with FFileView do begin NewSorting := Sorting; SortFunctions := FSorting[Section.Index].SortFunctions; if [ssShift, ssCtrl] * GetKeyShiftStateEx = [] then begin SortingDirection := GetSortDirection(NewSorting, SortFunctions); if SortingDirection = sdNone then begin // If there is no direction currently, sort "sdDescending" for size and date. // Commonly, we search seek more often for most recent files then older any others. // When sorting by size, often it is to find larger file to make room. // Anyway, it makes DC like TC, and also, Windows Explorer do the same. case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:= sdDescending; else SortingDirection:= sdAscending; end; end else begin SortingDirection := ReverseSortDirection(SortingDirection); end; NewSorting := nil; end else begin // If there is no direction currently, sort "sdDescending" for size and date (see previous comment). case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:= sdDescending; else SortingDirection:= sdAscending; end; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); FFileView.Sorting:= NewSorting; end; inherited SectionClick(Section); end; procedure TFileViewFixedHeader.Click; var Index: Integer; begin if FDown then begin inherited Click; Index := GetSectionAt(ScreenToClient(Mouse.CursorPos)); if Index <> -1 then SectionClick(Sections[Index]); end; end; procedure TFileViewFixedHeader.DblClick; begin Click; end; procedure TFileViewFixedHeader.UpdateHeader; var I: Integer; begin for I:= 0 to Sections.Count - 1 do begin Sections[I].ImageIndex:= SortingImageIndex[FSorting[I].SortDirection]; end; end; procedure TFileViewFixedHeader.UpdateSorting(Sorting: TFileSortings); var I, J: Integer; begin for I:= Low(FSorting) to High(FSorting) do begin FSorting[I].SortDirection:= sdNone; for J:= Low(Sorting) to High(Sorting) do begin if (FSorting[I].SortFunctions[0] = Sorting[J].SortFunctions[0]) or ((Sorting[J].SortFunctions[0] = fsfName) and (FSorting[I].SortFunctions[0] = fsfNameNoExtension))then begin FSorting[I].SortDirection:= Sorting[J].SortDirection; Break; end; end; end; UpdateHeader; end; procedure TFileViewFixedHeader.MouseEnter; begin inherited MouseEnter; if not (csDesigning in ComponentState) then begin FMouseInControl := True; UpdateState; end; end; procedure TFileViewFixedHeader.MouseLeave; begin inherited MouseLeave; if not (csDesigning in ComponentState) then begin FMouseInControl := False; FDown := False; UpdateState; end; end; procedure TFileViewFixedHeader.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin FDown:= True; FSelectedSection:=GetSectionAt(Point(X, Y)); UpdateState; end; end; procedure TFileViewFixedHeader.MouseMove(Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin UpdateState; end; end; procedure TFileViewFixedHeader.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin FDown:= False; UpdateState; end; end; {$if lcl_fullversion >= 1070000} procedure TFileViewFixedHeader.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust vertical layout inherited DoAutoAdjustLayout(AMode, AXProportion, 1.0); end; {$endif} constructor TFileViewFixedHeader.Create(AOwner: TFileView; AParent: TWinControl); var I: Integer; ABitmap: TBitmap; begin inherited Create(AOwner); FFileView:= AOwner; Parent:= AParent; Align:= alTop; DoubleBuffered:= True; Sections.Add.Text:= rsColName; Sections.Add.Text:= rsColExt; Sections.Add.Text:= rsColSize; Sections.Add.Text:= rsColDate; Sections.Add.Text:= rsColAttr; Images:= TImageList.CreateSize(gIconsSize, gIconsSize); ABitmap:= PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdAscending)); Images.Add(ABitmap, nil); ABitmap.Free; ABitmap:= PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdDescending)); Images.Add(ABitmap, nil); ABitmap.Free;; SetLength(FSorting, 5); for I:= Low(FSorting) to High(FSorting) do SetLength(FSorting[I].SortFunctions, 1); FSorting[0].SortDirection:= sdNone; FSorting[0].SortFunctions[0]:= fsfNameNoExtension; FSorting[1].SortDirection:= sdNone; FSorting[1].SortFunctions[0]:= fsfExtension; FSorting[2].SortDirection:= sdNone; FSorting[2].SortFunctions[0]:= fsfSize; FSorting[3].SortDirection:= sdNone; FSorting[3].SortFunctions[0]:= fsfModificationTime; FSorting[4].SortDirection:= sdNone; FSorting[4].SortFunctions[0]:= fsfAttr; end; destructor TFileViewFixedHeader.Destroy; begin Images.Free; inherited Destroy; end; end. doublecmd-1.1.30/src/fileviews/ufileview.pas0000644000175000001440000033457715104114162020100 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- FileView, base class of all of them Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFileView; {$mode objfpc}{$H+} interface uses uFindFiles, Classes, SysUtils, Controls, ExtCtrls, Graphics, ComCtrls, contnrs, fgl, LMessages, uFile, uDisplayFile, uFileSource, uFormCommands, uDragDropEx, DCXmlConfig, DCBasicTypes, DCClassesUtf8, uFileSorting, uFileViewHistory, uFileProperty, uFileViewWorker, uFunctionThread, uFileSystemWatcher, fQuickSearch, DCStringHashListUtf8, uGlobs; type TFileView = class; TFileViewClass = class of TFileView; TChangePathReason = (cprAdd, cprRemove, cprChange); {en Called before path is changed. If it returns @true the paths is changed (and if successful, OnAfterChangePath is called). If it returns @false, the path is not changed. NewFileSource is @nil the last file source is to be removed. } TOnBeforeChangePath = function (FileView: TFileView; NewFileSource: IFileSource; Reason: TChangePathReason; const NewPath : String): Boolean of object; TOnAfterChangePath = procedure (FileView: TFileView) of object; TOnChangeActiveFile = procedure (FileView: TFileView; const aFile : TFile) of object; TOnActivate = procedure (aFileView: TFileView) of object; TOnFileListChanged = procedure (aFileView: TFileView) of object; TDropParams = class; TDragDropType = (ddtInternal, ddtExternal); // Lists all operations supported by dragging and dropping items // in the panel (external, internal and via menu). TDragDropOperation = (ddoCopy, ddoMove, ddoSymLink, ddoHardLink); TFileViewWorkers = specialize TFPGObjectList; TFileViewFlag = (fvfDelayLoadingFiles, fvfDontLoadFiles, fvfDontWatch); TFileViewFlags = set of TFileViewFlag; TFileViewRequest = (fvrqApplyPendingFilesChanges, // Pending files changes need to be applied to the file list fvrqHashFileList, // Files names need rehashing due to file list changes fvrqMakeDisplayFileList); // Filtered file list needs to be created TFileViewRequests = set of TFileViewRequest; TFileViewNotification = (fvnDisplayFileListChanged, // Filtered file list was created (filter changed, show/hide hidden files option changed, etc.) fvnFileSourceFileListLoaded, // File list was loaded from FileSource fvnFileSourceFileListUpdated, // File list was updated (files added, removed or updated) fvnSelectionChanged, // Files were selected/deselected fvnVisibleFilePropertiesChanged); // Different files or their properties are now visible TFileViewNotifications = set of TFileViewNotification; TFileViewApplyFilterResult = (fvaprRemoved, fvaprInserted, fvaprExisting, fvaprNotExisting); { TMarkApplyOnAllDispatcher } TMarkApplyOnAllDispatcher = (tmaoa_Mark, tmaoa_UnMark, tmaoa_InvertMark); {en Base class for any view of a file or files. There should always be at least one file displayed on the view. } { TFileView } TFileView = class(TCustomControl) private {en History of viewed paths and file sources. Contains: - File sources hierarchy associated with this view. Last element is the file source that is currently being viewed, parent file source is (index-1) and so on up to zero (first file source). - Visited paths history for each file source. Last path is the currently viewed path. } FHistory: TFileViewHistory; FSortings: TFileSortings; {en Which file properties are needed to be displayed for each file. } FFilePropertiesNeeded: TFilePropertiesTypes; FFileViewWorkers: TFileViewWorkers; FFlags: TFileViewFlags; FHashedFiles: TBucketList; // 0 then begin MakeFileSourceFileList; end; finally EnableAutoSizing; end; end; procedure TFileView.CreateDefault(AOwner: TWinControl); begin FMethods := TFormCommands.Create(Self); FHistory := TFileViewHistory.Create; FSavedSelection:= TStringListEx.Create; FLastMark := '*'; FLastMarkCaseSensitive := gbMarkMaskCaseSensitive; FLastMarkIgnoreAccents := gbMarkMaskIgnoreAccents; FFiles := TDisplayFiles.Create(False); FFilterOptions := gQuickSearchOptions; FHashedNames := TStringHashListUtf8.Create(True); FFileViewWorkers := TFileViewWorkers.Create(False); FReloadTimer := TTimer.Create(Self); FReloadTimer.Enabled := False; FReloadTimer.OnTimer := @ReloadTimerEvent; FLoadingFileListLongTimer := TTimer.Create(Self); FLoadingFileListLongTimer.Enabled := False; FLoadingFileListLongTimer.Interval := 2000; FLoadingFileListLongTimer.OnTimer := @LoadingFileListTimer; BorderStyle := bsNone; // Before Create or the window handle may be recreated inherited Create(AOwner); Align := alClient; Parent := AOwner; if Parent is TFileViewPage then (Parent as TFileViewPage).OnActivate := @ActivateEvent; end; destructor TFileView.Destroy; var i: Integer; DbgWorkersThread: TFunctionThread; begin Clear; if Assigned(FWorkersThread) then begin // Wait until all the workers finish. FWorkersThread.Finish; DCDebug('Waiting for workers thread ', hexStr(FWorkersThread)); DbgWorkersThread := FWorkersThread; TFunctionThread.Finalize(FWorkersThread); DCDebug('Finalized workers thread ', hexStr(DbgWorkersThread)); end; // Now all the workers can be safely freed. if Assigned(FFileViewWorkers) then begin for i := 0 to FFileViewWorkers.Count - 1 do begin with FFileViewWorkers[i] do begin if Working then DCDebug('Error: Worker still working.') else if not CanBeDestroyed then DCDebug('Error: Worker cannot be destroyed.'); Free; end; end; FreeAndNil(FFileViewWorkers); end; inherited Destroy; FreeAndNil(FHashedFiles); FreeAndNil(FHashedNames); FreeAndNil(FHistory); FreeAndNil(FSavedSelection); FreeAndNil(FPendingFilesChanges); FreeAndNil(FRecentlyUpdatedFiles); end; function TFileView.Clone(NewParent: TWinControl): TFileView; begin raise Exception.Create('Cannot create object of abstract class'); Result := nil; // For compiler warning. end; procedure TFileView.CloneTo(AFileView: TFileView); var I: Integer; begin if Assigned(AFileView) then begin AFileView.FFlags := FFlags; AFileView.FFlatView := FFlatView; AFileView.FLastLoadedFileSource := FLastLoadedFileSource; AFileView.FLastLoadedPath := FLastLoadedPath; AFileView.FLastMark := FLastMark; AFileView.FLastMarkCaseSensitive := FLastMarkCaseSensitive; AFileView.FLastMarkIgnoreAccents := FLastMarkIgnoreAccents; // FFileSource should have been passed to FileView constructor already. // FMethods are created in FileView constructor. AFileView.OnBeforeChangePath := Self.OnBeforeChangePath; AFileView.OnAfterChangePath := Self.OnAfterChangePath; AFileView.OnActivate := Self.OnActivate; AFileView.OnFileListChanged := Self.OnFileListChanged; for I := 0 to FSavedSelection.Count - 1 do AFileView.FSavedSelection.Add(FSavedSelection.Strings[I]); AFileView.FHistory.Assign(Self.FHistory); AFileView.FSortings := CloneSortings(Self.FSortings); AFileView.FSortingProperties := GetSortingProperties; AFileView.FLastActiveFile := Self.FLastActiveFile; AFileView.FRequestedActiveFile := Self.FRequestedActiveFile; AFileView.FReloadNeeded := Self.FReloadNeeded; if Assigned(Self.FAllDisplayFiles) then begin AFileView.FAllDisplayFiles := Self.FAllDisplayFiles.Clone(True); AFileView.Notify([fvnFileSourceFileListLoaded]); AFileView.Request([fvrqHashFileList]); end; AFileView.FFileFilter := Self.FFileFilter; AFileView.FFilterOptions := Self.FFilterOptions; // FFiles need to be recreated because the filter is not cloned. // This is done in AFileView.UpdateView. // UPDATE: Added filter cloning, is the aforementioned statement relevant now? end; end; function TFileView.AddHistory(aFileSource: IFileSource; aPath: String): Boolean; begin if FileSource.Equals(aFileSource) then FHistory.AddPath(aPath) else begin FHistory.Add(aFileSource, aPath); end; end; procedure TFileView.AddEventToPendingFilesChanges(const EventData: TFSWatcherEventData); function CheckLast(const sFileName: String; const EventType: TFSWatcherEventTypes; bDelete: Boolean): Boolean; var i: Integer; pEvent: PFSWatcherEventData; begin Result := False; for i := FPendingFilesChanges.Count - 1 downto 0 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); if pEvent^.FileName = sFileName then begin if pEvent^.EventType in EventType then begin Result := True; if bDelete then begin Dispose(pEvent); FPendingFilesChanges.Delete(i); end else Break; end else Break; end; end; end; var pEvent: PFSWatcherEventData; begin if not Assigned(FPendingFilesChanges) then FPendingFilesChanges := TFPList.Create; if (Assigned(FAllDisplayFiles) and (FAllDisplayFiles.Count > 0) and (FPendingFilesChanges.Count > FAllDisplayFiles.Count div 4)) or (FPendingFilesChanges.Count > 100) then begin // Too many changes. Reload the whole file list again. Reload(EventData.Path); end else begin // Remove obsolete events if they exist. case EventData.EventType of fswFileCreated: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); fswFileDeleted: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); fswFileChanged: // If FileChanged or FileCreated already exists then new one is not scheduled. // FileCreated will cause update anyway if a file already exists in the filelist. if CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated], False) then Exit; fswFileRenamed: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); end; New(pEvent); FPendingFilesChanges.Add(pEvent); pEvent^ := EventData; end; end; procedure TFileView.ApplyPendingFilesChanges(NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var i: Integer; pEvent: PFSWatcherEventData; begin if Assigned(FPendingFilesChanges) then begin BeginUpdate; try // Check if another reload was not issued. if FileListLoaded and (GetCurrentWorkType <> fvwtCreate) then begin for i := 0 to FPendingFilesChanges.Count - 1 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); // Insert new files at sorted position since the filelist hasn't been // shown to the user yet, so no need to use user setting. HandleFSWatcherEvent(pEvent^, NewFilesPosition, UpdatedFilesPosition); // HandleFSWatcherEvent might call Reload which clears FPendingFilesChanges, so check for it. if not Assigned(FPendingFilesChanges) then Break; end; end; ClearPendingFilesChanges; finally EndUpdate; end; end; end; procedure TFileView.ClearPendingFilesChanges; var pEvent: PFSWatcherEventData; i: Integer; begin if Assigned(FPendingFilesTimer) then FPendingFilesTimer.Enabled := False; if Assigned(FPendingFilesChanges) then begin for i := 0 to FPendingFilesChanges.Count - 1 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); Dispose(pEvent); end; FreeAndNil(FPendingFilesChanges); end; end; procedure TFileView.ClearRecentlyUpdatedFiles; begin if Assigned(FRecentlyUpdatedFilesTimer) then FRecentlyUpdatedFilesTimer.Enabled := False; if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Clear; end; function TFileView.DimColor(AColor: TColor): TColor; begin if (not Active) and (gInactivePanelBrightness < 100) then Result := ModColor(AColor, gInactivePanelBrightness) else if FLoadingFileListLongTime then Result := DarkColor(AColor, 25) else Result := AColor; end; procedure TFileView.DisplayFileListChanged; begin // Empty. end; procedure TFileView.DoActiveChanged; begin // Empty. end; procedure TFileView.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin RedrawFile(AFile); end; procedure TFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); begin case Key of VK_BACK: begin ChangePathToParent(True); Key := 0; end; VK_RETURN, VK_SELECT: begin if (Shift * KeyModifiersShortcut = []) then begin // Only if there are items in the panel. if not IsEmpty then begin ChooseFile(GetActiveDisplayFile); Key := 0; end; end // execute active file in terminal (Shift+Enter) else if (Shift * KeyModifiersShortcut = [ssShift]) then begin if IsActiveItemValid then begin ProcessExtCommandFork(CurrentPath + GetActiveDisplayFile.FSFile.Name, '', CurrentPath, nil, True, True); Key := 0; end; end; end; end; end; procedure TFileView.DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); begin case Key of VK_BACK: begin ChangePathToParent(True); Key := 0; end; end; end; procedure TFileView.DoLoadingFileListLongTime; begin RedrawFiles; end; function TFileView.FileListLoaded: Boolean; begin Result := Assigned(FAllDisplayFiles); end; procedure TFileView.FileSourceFileListLoaded; begin FLoadingFileListLongTimer.Enabled := False; end; procedure TFileView.FileSourceFileListUpdated; begin // Empty. end; procedure TFileView.Clear; var i: Integer; begin StopWorkers; for i := 0 to FHistory.Count - 1 do FHistory.FileSource[i].RemoveReloadEventListener(@ReloadEvent); ClearRecentlyUpdatedFiles; ClearPendingFilesChanges; RemoveAllFileSources; FreeAndNil(FFiles); FreeAndNil(FAllDisplayFiles); HashFileList; end; procedure TFileView.ClearFiles; begin if Assigned(FAllDisplayFiles) then begin ClearRecentlyUpdatedFiles; ClearPendingFilesChanges; FFiles.Clear; FAllDisplayFiles.Clear; // Clear references to files from the source. HashFileList; Notify([fvnDisplayFileListChanged]); end; end; function TFileView.GetNotebookPage: TControl; begin if Parent is TFileViewPage then Result := TFileViewPage(Parent) else Result := nil; end; function TFileView.calcFileHashKey(const FileName, APath: String): String; var subPath: String; begin if not FFlatView then begin Result := FileName; end else begin subPath := APath.Substring( currentPath.Length ); if subPath<>EmptyStr then subPath := IncludeTrailingPathDelimiter(subPath); Result := subPath + FileName; end; end; procedure TFileView.AddFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var ADisplayFile: TDisplayFile; AFile: TFile; I: Integer; AFileKey: String; begin AFileKey := calcFileHashKey(FileName, APath); I := FHashedNames.Find(AFileKey); if I < 0 then begin AFile := TFile.Create(APath); AFile.Name := FileName; try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded, GetVariantFileProperties); if FFlatView and AFile.IsDirectory then raise EFileSourceException.Create(EmptyStr); except on EFileSourceException do begin FreeAndNil(AFile); Reload(APath); Exit; end; end; ADisplayFile := TDisplayFile.Create(AFile); FHashedFiles.Add(ADisplayFile, nil); FHashedNames.Add(AFileKey, ADisplayFile); InsertFile(ADisplayFile, FAllDisplayFiles, NewFilesPosition); if not TFileListBuilder.MatchesFilter(ADisplayFile.FSFile, FileFilter, FFilterOptions) then begin InsertFile(ADisplayFile, FFiles, NewFilesPosition); VisualizeFileUpdate(ADisplayFile); Notify([fvnFileSourceFileListUpdated, fvnDisplayFileListChanged]); end else Notify([fvnFileSourceFileListUpdated]); end else UpdateFile(FileName, APath, NewFilesPosition, UpdatedFilesPosition); end; procedure TFileView.RemoveFile(const FileName, APath: String); var I: Integer; begin I := FHashedNames.Find( calcFileHashKey(FileName,APath) ); if I >= 0 then RemoveFile(TDisplayFile(FHashedNames.List[I]^.Data)); end; procedure TFileView.RemoveFile(ADisplayFile: TDisplayFile); begin FHashedNames.Remove( calcFileHashKey(ADisplayFile.FSFile.Name, ADisplayFile.FSFile.Path) ); FHashedFiles.Remove(ADisplayFile); FFiles.Remove(ADisplayFile); FAllDisplayFiles.Remove(ADisplayFile); if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Remove(ADisplayFile); Notify([fvnFileSourceFileListUpdated, fvnDisplayFileListChanged]); end; procedure TFileView.RenameFile(const NewFileName, OldFileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var ADisplayFile: TDisplayFile; OldIndex, NewIndex: Integer; ANotifications: TFileViewNotifications; OldFileKey, NewFileKey : String; begin OldFileKey := calcFileHashKey(OldFileName,APath); NewFileKey := calcFileHashKey(NewFileName,APath); OldIndex := FHashedNames.Find( OldFileKey ); NewIndex := FHashedNames.Find( NewFileKey ); if OldIndex >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[OldIndex]^.Data); if NewIndex < 0 then begin ADisplayFile.FSFile.Name := NewFileName; FHashedNames.Remove(OldFileKey); FHashedNames.Add(NewFileKey, ADisplayFile); ADisplayFile.Busy:= []; ADisplayFile.IconID := -1; ADisplayFile.Selected := False; ADisplayFile.IconOverlayID := -1; ADisplayFile.TextColor := clNone; ADisplayFile.DisplayStrings.Clear; ResortFile(ADisplayFile, FAllDisplayFiles); DoFileRenamed(ADisplayFile); ANotifications := [fvnFileSourceFileListUpdated]; case ApplyFilter(ADisplayFile, NewFilesPosition) of fvaprInserted, fvaprRemoved: Include(ANotifications, fvnDisplayFileListChanged); fvaprExisting: begin if GetActiveDisplayFile = ADisplayFile then RequestedActiveFile := ADisplayFile.FSFile.FullPath; ResortFile(ADisplayFile, FFiles); VisualizeFileUpdate(ADisplayFile); Include(ANotifications, fvnDisplayFileListChanged); end; end; Notify(ANotifications); end else begin RemoveFile(ADisplayFile); UpdateFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition); end; end else begin if NewIndex < 0 then AddFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition) else UpdateFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition); end; end; procedure TFileView.Request(NewRequests: TFileViewRequests); begin FRequests := FRequests + NewRequests; if FUpdateCount = 0 then HandleRequests; end; procedure TFileView.ResortFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles); var I: Integer; begin I := AFileList.Find(ADisplayFile); if I >= 0 then TDisplayFileSorter.ResortSingle(I, AFileList, SortingForSorter); end; procedure TFileView.StartRecentlyUpdatedTimerIfNeeded; begin if Assigned(FRecentlyUpdatedFiles) and (FRecentlyUpdatedFiles.Count > 0) then begin if not Assigned(FRecentlyUpdatedFilesTimer) then begin FRecentlyUpdatedFilesTimer := TTimer.Create(Self); FRecentlyUpdatedFilesTimer.Interval := 50; FRecentlyUpdatedFilesTimer.OnTimer := @UpdatedFilesTimerEvent; end; FRecentlyUpdatedFilesTimer.Enabled := True; end; end; procedure TFileView.StartUpdatePendingTimer; begin if not Assigned(FPendingFilesTimer) then begin FPendingFilesTimer := TTimer.Create(Self); FPendingFilesTimer.Interval := UpdateFilelistInterval; FPendingFilesTimer.OnTimer := @UpdatePendingTimerEvent; end; FPendingFilesTimer.Enabled := True; end; procedure TFileView.UpdateFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var AFile: TFile; ADisplayFile: TDisplayFile; OldFile: TFile; propertiesChanged: TFilePropertiesTypes; // which property changed I: Integer; ANotifications: TFileViewNotifications; procedure Resort; begin ResortFile(ADisplayFile, FAllDisplayFiles); ResortFile(ADisplayFile, FFiles); end; procedure Update; begin case UpdatedFilesPosition of ufpNoChange: ; // Do nothing ufpSameAsNewFiles: if NewFilesPosition = nfpSortedPosition then Resort else begin FAllDisplayFiles.OwnsObjects := False; FAllDisplayFiles.Remove(ADisplayFile); // Remove only temporarily FAllDisplayFiles.OwnsObjects := True; InsertFile(ADisplayFile, FAllDisplayFiles, NewFilesPosition); FFiles.Remove(ADisplayFile); InsertFile(ADisplayFile, FFiles, NewFilesPosition); end; ufpSortedPosition: Resort; else raise Exception.Create('Unsupported UpdatedFilesPosition setting.'); end; // there are two cases of file update // 1. modified: VisualizeFileUpdate() should be called // 2. no modified: need not Visual Blink if TFileSystemWatcher.CanWatch(FWatchPath) and ((propertiesChanged+[fpLastAccessTime,fpChangeTime])=[fpLastAccessTime,fpChangeTime]) then exit; VisualizeFileUpdate(ADisplayFile); end; begin I := FHashedNames.Find( calcFileHashKey(FileName,APath) ); if I >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[I]^.Data); AFile := ADisplayFile.FSFile; OldFile := AFile.Clone; AFile.ClearProperties; try try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded, GetVariantFileProperties); propertiesChanged:= AFile.Compare(OldFile); if propertiesChanged = [] then Exit; finally FreeAndNil(OldFile); end; except on EFileNotFound do begin RemoveFile(ADisplayFile); Exit; end; on EFileSourceException do begin Exit; end; end; ADisplayFile.TextColor := clNone; ADisplayFile.IconOverlayID := -1; ADisplayFile.DisplayStrings.Clear; ADisplayFile.Busy := ADisplayFile.Busy - [bsProp]; DoFileChanged(ADisplayFile, propertiesChanged); ANotifications := [fvnFileSourceFileListUpdated]; case ApplyFilter(ADisplayFile, NewFilesPosition) of fvaprInserted, fvaprRemoved: Include(ANotifications, fvnDisplayFileListChanged); fvaprExisting: begin Update; Include(ANotifications, fvnDisplayFileListChanged); end; end; Notify(ANotifications); end else AddFile(FileName, APath, NewFilesPosition, UpdatedFilesPosition); end; procedure TFileView.UpdatedFilesTimerEvent(Sender: TObject); var AFile: TDisplayFile; i: Integer = 0; begin while i < FRecentlyUpdatedFiles.Count do begin AFile := FRecentlyUpdatedFiles[i]; if AFile.RecentlyUpdatedPct = 0 then begin FRecentlyUpdatedFiles.Delete(i); end else begin AFile.RecentlyUpdatedPct := AFile.RecentlyUpdatedPct - 10; Inc(i); RedrawFile(AFile); end; end; if i = 0 then FRecentlyUpdatedFilesTimer.Enabled := False; end; procedure TFileView.UpdatePath(UpdateAddressToo: Boolean); begin // Maybe better to do via some notification like FileSourceHasChanged. UpdateView; end; procedure TFileView.UpdatePendingTimerEvent(Sender: TObject); begin FPendingFilesTimer.Enabled := False; ApplyPendingFilesChanges(gNewFilesPosition, gUpdatedFilesPosition); end; procedure TFileView.UpdateTitle; begin if Parent is TFileViewPage then TFileViewPage(Parent).UpdateTitle; end; procedure TFileView.VisualizeFileUpdate(AFile: TDisplayFile); begin if gHighlightUpdatedFiles then begin if not Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles := TDisplayFiles.Create(False); if FRecentlyUpdatedFiles.Find(AFile) < 0 then begin FRecentlyUpdatedFiles.Add(AFile); AFile.RecentlyUpdatedPct := 100; end; end; end; function TFileView.GetCurrentAddress: String; begin if FileSourcesCount > 0 then Result := FileSource.CurrentAddress else Result := ''; end; function TFileView.GetCurrentLocation: String; begin if Length(CurrentAddress) = 0 then Result := GetCurrentPath else begin Result := CurrentAddress; if (PathDelim = '/') then {%H-}Result += GetCurrentPath else Result += StringReplace(GetCurrentPath, PathDelim, '/', [rfReplaceAll]); end; end; procedure TFileView.PushRenameEvent(AFile: TFile; const NewFileName: String); begin Self.RenameFile(NewFileName, AFile.Name, AFile.Path, gNewFilesPosition, gUpdatedFilesPosition); end; procedure TFileView.AddWorker(const Worker: TFileViewWorker; SetEvents: Boolean = True); begin FFileViewWorkers.Add(Worker); if SetEvents then begin Worker.OnStarting := @WorkerStarting; Worker.OnFinished := @WorkerFinished; end; end; procedure TFileView.DoFileChanged(ADisplayFile: TDisplayFile; APropertiesChanged: TFilePropertiesTypes); begin // Empty end; procedure TFileView.DoFileRenamed(ADisplayFile: TDisplayFile); begin // Empty end; procedure TFileView.BeginUpdate; begin Inc(FUpdateCount); end; procedure TFileView.CalculateSpace(AFile: TDisplayFile); var AFileList: TFVWorkerFileList; begin AFileList := TFVWorkerFileList.Create; try if IsItemValid(AFile) and AFile.FSFile.IsDirectory then AFileList.AddClone(AFile, AFile); CalculateSpace(AFileList); finally FreeAndNil(AFileList); end; end; procedure TFileView.CalculateSpace(var AFileList: TFVWorkerFileList); var Worker: TFileViewWorker; begin if GetCurrentWorkType = fvwtCreate then Exit; if AFileList.Count > 0 then begin Worker := TCalculateSpaceWorker.Create( FileSource, WorkersThread, @CalculateSpaceOnUpdate, AFileList); AddWorker(Worker); WorkersThread.QueueFunction(@Worker.StartParam); end else FreeAndNil(AFileList); end; procedure TFileView.CalculateSpaceOfAllDirectories; var i: Integer; AFileList: TFVWorkerFileList; AFile: TDisplayFile; begin if IsLoadingFileList then Exit; AFileList := TFVWorkerFileList.Create; try for i := 0 to FFiles.Count - 1 do begin AFile := FFiles[i]; if IsItemValid(AFile) and AFile.FSFile.IsDirectory then AFileList.AddClone(AFile, AFile); end; CalculateSpace(AFileList); finally FreeAndNil(AFileList); end; end; procedure TFileView.CalculateSpaceOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); var OrigDisplayFile: TDisplayFile; begin OrigDisplayFile := TDisplayFile(UserData); if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). OrigDisplayFile.FSFile.Size := UpdatedFile.FSFile.Size; DoFileUpdated(OrigDisplayFile, [fpSize]); end; procedure TFileView.CancelLastPathChange; var FSIndex, PathIndex: Integer; begin // Get previous entry in history. FSIndex := FHistory.CurrentFileSourceIndex; PathIndex := FHistory.CurrentPathIndex - 1; while PathIndex < 0 do begin Dec(FSIndex); if FSIndex < 0 then Break; PathIndex := FHistory.PathsCount[FSIndex] - 1; end; // Go to it if it is the same as last loaded file list. if (FSIndex >= 0) and FHistory.FileSource[FSIndex].Equals(FLastLoadedFileSource) and (FHistory.Path[FSIndex, PathIndex] = FLastLoadedPath) then begin // Don't reload file list because we already have it. Flags := Flags + [fvfDontLoadFiles]; GoToHistoryIndex(FSIndex, PathIndex); Flags := Flags - [fvfDontLoadFiles]; end else ClearFiles; end; procedure TFileView.ReleaseBusy; var Index: Integer; begin for Index := 0 to FFiles.Count - 1 do FFiles[Index].Busy:= []; end; procedure TFileView.DoOnFileListChanged; begin if Assigned(OnFileListChanged) then OnFileListChanged(Self); end; procedure TFileView.EndUpdate; begin Dec(FUpdateCount); if (FUpdateCount = 0) and // This condition prevents endless recursion. ((FRequests <> []) or (FNotifications <> [])) then begin BeginUpdate; try HandleRequests; HandleNotifications; finally EndUpdate; end; end; end; function TFileView.GetCurrentPath: String; begin Result := FHistory.CurrentPath; end; procedure TFileView.SetCurrentPath(NewPath: String); begin if (NewPath <> CurrentPath) and BeforeChangePath(FileSource, cprChange, NewPath) then begin FFlatView:= False; EnableWatcher(False); FHistory.AddPath(NewPath); // Sets CurrentPath. AfterChangePath; EnableWatcher(True); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.SetFlags(AValue: TFileViewFlags); var AddedFlags, RemovedFlags: TFileViewFlags; begin if FFlags = AValue then Exit; AddedFlags := AValue - FFlags; RemovedFlags := FFlags - AValue; FFlags := AValue; if fvfDontWatch in AddedFlags then EnableWatcher(False); if ([fvfDelayLoadingFiles, fvfDontLoadFiles] * RemovedFlags <> []) then begin if not (FileListLoaded or (GetCurrentWorkType = fvwtCreate)) then Reload; EnableWatcher(True); end; if fvfDontWatch in RemovedFlags then EnableWatcher(True); end; procedure TFileView.SetLoadingFileListLongTime(AValue: Boolean); begin FLoadingFileListLongTimer.Enabled := False; if FLoadingFileListLongTime <> AValue then begin FLoadingFileListLongTime := AValue; DoLoadingFileListLongTime; end; end; function TFileView.CloneActiveFile: TFile; var aFile: TDisplayFile; begin aFile := GetActiveDisplayFile; if Assigned(aFile) then Result := aFile.FSFile.Clone else Result := nil; end; function TFileView.CloneFiles: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedFiles: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedDirectories: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then if FFiles[i].FSFile.IsDirectory then Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedOrActiveFiles: TFiles; var aFile: TDisplayFile; begin Result := CloneSelectedFiles; Result.Flat := FFlatView; // If no files are selected, add currently active file if it is valid. if (Result.Count = 0) then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then Result.Add(aFile.FSFile.Clone); end; end; function TFileView.CloneSelectedOrActiveDirectories: TFiles; var aFile: TDisplayFile; begin Result := CloneSelectedDirectories; // If no directory(ies) is(are) selected, add currently active directory if it is valid. if (Result.Count = 0) then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then if aFile.FSFile.IsDirectory then Result.Add(aFile.FSFile.Clone); end; end; function TFileView.GetWorkersThread: TFunctionThread; begin if not Assigned(FWorkersThread) then FWorkersThread := TFunctionThread.Create(False); Result := FWorkersThread; end; procedure TFileView.SaveSelection; var I: Integer; begin FSavedSelection.Clear; for I := 0 to FFiles.Count - 1 do with FFiles[I] do begin if Selected then FSavedSelection.Add(FSFile.Name); end; end; procedure TFileView.SaveSelectionToFile(const AFileName: String); begin with dmComData do begin SaveDialog.DefaultExt := '.txt'; SaveDialog.Filter := '*.txt|*.txt'; SaveDialog.FileName := AFileName; if (AFileName <> EmptyStr) or SaveDialog.Execute then try SaveSelection; FSavedSelection.SaveToFile(SaveDialog.FileName); except on E: Exception do msgError(rsMsgErrSaveFile + '-' + E.Message); end; end; end; procedure TFileView.RestoreSelection; var I: Integer; begin BeginUpdate; try for I := 0 to FFiles.Count - 1 do with FFiles[I] do Selected:= (FSavedSelection.IndexOf(FSFile.Name) >= 0); Notify([fvnSelectionChanged]); finally EndUpdate; end; end; procedure TFileView.InvertFileSelection(AFile: TDisplayFile; bNotify: Boolean = True); begin MarkFile(AFile, not AFile.Selected, bNotify); end; procedure TFileView.InvertAll; var i: Integer; begin BeginUpdate; try for i := 0 to FFiles.Count-1 do InvertFileSelection(FFiles[i]); finally EndUpdate; end; end; procedure TFileView.MarkFile(AFile: TDisplayFile; bSelect: Boolean; bNotify: Boolean = True); begin // Don't check if valid when just unselecting. if not bSelect then begin if not Assigned(AFile) then Exit; end else if not IsItemValid(AFile) then Exit; AFile.Selected := bSelect; if bNotify then Notify([fvnSelectionChanged]); end; procedure TFileView.MarkFiles(bSelect: Boolean); begin MarkFiles(0, FFiles.Count - 1, bSelect); end; procedure TFileView.MarkFiles(FromIndex, ToIndex: PtrInt; bSelect: Boolean); var Index: PtrInt; begin BeginUpdate; try for Index := FromIndex to ToIndex do MarkFile(FFiles[Index], bSelect); finally EndUpdate; end; end; { TFileView.MarkApplyOnAllFiles } procedure TFileView.MarkApplyOnAllFiles(const MarkApplyOnAllDispatcher: TMarkApplyOnAllDispatcher; MarkFileChecks: TFindFileChecks); var Index: PtrInt; bInitialValue: boolean; bSelected: boolean = False; begin BeginUpdate; try for Index := 0 to pred(FFiles.Count) do begin if FFiles[Index].FSFile.Name = '..' then Continue; if CheckFileAttributes(MarkFileChecks, FFiles[Index].FSFile.Attributes) then begin bInitialValue := FFiles[Index].Selected; case MarkApplyOnAllDispatcher of tmaoa_Mark: FFiles[Index].Selected := True; tmaoa_UnMark: FFiles[Index].Selected := False; tmaoa_InvertMark: FFiles[Index].Selected := not FFiles[Index].Selected; end; bSelected := bSelected OR (bInitialValue xor FFiles[Index].Selected); end; end; if bSelected then Notify([fvnSelectionChanged]); finally EndUpdate; end; end; { TFileView.MarkGroup (Where we have all the parameters) } procedure TFileView.MarkGroup(const sMask: String; bSelect: Boolean; pbCaseSensitive:PBoolean = nil; pbIgnoreAccents: PBoolean = nil; pbWindowsInterpretation: PBoolean = nil; pMarkFileChecks: TPFindFileChecks = nil); var I: Integer; MaskList: TMaskList; SearchTemplate: TSearchTemplate = nil; bSelected: Boolean = False; bCaseSensitive, bIgnoreAccents, bWindowsInterpretation: boolean; LocalMarkFileChecks: TFindFileChecks; AOptions: TMaskOptions = []; begin BeginUpdate; try if IsMaskSearchTemplate(sMask) then begin SearchTemplate:= gSearchTemplateList.TemplateByName[sMask]; if Assigned(SearchTemplate) then for I := 0 to FFiles.Count - 1 do begin if FFiles[I].FSFile.Name = '..' then Continue; if SearchTemplate.CheckFile(FFiles[I].FSFile) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; end else begin if pbCaseSensitive <> nil then bCaseSensitive := pbCaseSensitive^ else bCaseSensitive := gbMarkMaskCaseSensitive; if pbIgnoreAccents <> nil then bIgnoreAccents := pbIgnoreAccents^ else bIgnoreAccents := gbMarkMaskIgnoreAccents; if pbWindowsInterpretation <> nil then bWindowsInterpretation := pbWindowsInterpretation^ else bWindowsInterpretation := gMarkMaskFilterWindows; if pMarkFileChecks<> nil then LocalMarkFileChecks:=pMarkFileChecks^ else LocalMarkFileChecks.Attributes:=nil; if bCaseSensitive then AOptions+= [moCaseSensitive]; if bIgnoreAccents then AOptions+= [moIgnoreAccents]; if bWindowsInterpretation then AOptions+= [moWindowsMask]; MaskList := TMaskList.Create(sMask, ';,', AOptions); for I := 0 to FFiles.Count - 1 do begin if FFiles[I].FSFile.Name = '..' then Continue; if CheckFileAttributes(LocalMarkFileChecks, FFiles[I].FSFile.Attributes) then begin if MaskList.Matches(FFiles[I].FSFile.Name) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; end; MaskList.Free; end; if bSelected then Notify([fvnSelectionChanged]); finally EndUpdate; end; end; { TFileView.MarkGroup (Where we prompt the user) } procedure TFileView.MarkGroup(bSelect: Boolean; pbCaseSensitive:PBoolean = nil; pbIgnoreAccents: PBoolean = nil; pbWindowsInterpretation: PBoolean = nil; psAttribute:PString = nil); var s, ADlgTitle, sAttribute: String; bCaseSensitive, bIgnoreAccents, bWindowsInterpretation: boolean; MarkSearchTemplateRec: TSearchTemplateRec; MarkFileChecks: TFindFileChecks; begin if not IsEmpty then begin if bSelect then ADlgTitle := rsMarkPlus else ADlgTitle := rsMarkMinus; s := FLastMark; if pbCaseSensitive <> nil then bCaseSensitive := pbCaseSensitive^ else bCaseSensitive := FLastMarkCaseSensitive; if pbIgnoreAccents <> nil then bIgnoreAccents := pbIgnoreAccents^ else bIgnoreAccents := FLastMarkIgnoreAccents; if pbWindowsInterpretation <> nil then bWindowsInterpretation := pbWindowsInterpretation^ else bWindowsInterpretation := gMarkMaskFilterWindows; if psAttribute <> nil then sAttribute := psAttribute^ else if not gMarkShowWantedAttribute then sAttribute:=gMarkDefaultWantedAttribute else sAttribute := gMarkLastWantedAttribute; if ShowExtendedMaskInputDlg(ADlgTitle, rsMaskInput, glsMaskHistory, s, midsFull, bCaseSensitive, bIgnoreAccents, sAttribute) then begin FLastMark := s; FLastMarkCaseSensitive := bCaseSensitive; FLastMarkIgnoreAccents := bIgnoreAccents; gbMarkMaskCaseSensitive := bCaseSensitive; gbMarkMaskIgnoreAccents := bIgnoreAccents; if (psAttribute = nil) AND gMarkShowWantedAttribute then gMarkLastWantedAttribute:=sAttribute; MarkSearchTemplateRec.AttributesPattern := sAttribute; AttrsPatternOptionsToChecks(MarkSearchTemplateRec, MarkFileChecks); MarkGroup(s, bSelect, @bCaseSensitive, @bIgnoreAccents, @bWindowsInterpretation, @MarkFileChecks); end; end; end; procedure TFileView.MarkCurrentExtension(bSelect: Boolean); var sGroup: String; bCaseSensitive: boolean = false; bIgnoreAccents: boolean = false; bWindowsInterpretation: boolean = false; begin if IsActiveItemValid then begin sGroup := GetActiveDisplayFile.FSFile.Extension; if sGroup <> '' then sGroup := '.' + sGroup; MarkGroup('*' + sGroup, bSelect, @bCaseSensitive, @bIgnoreAccents, @bWindowsInterpretation); end; end; procedure TFileView.MarkCurrentPath(bSelect: Boolean); var I: Integer; sPath: String; bSelected: Boolean = False; begin if IsActiveItemValid then begin sPath := GetActiveDisplayFile.FSFile.Path; BeginUpdate; try for I := 0 to FFiles.Count - 1 do begin if FFiles[I].FSFile.IsDirectory then Continue; if mbCompareFileNames(FFiles[I].FSFile.Path, sPath) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; if bSelected then Notify([fvnSelectionChanged]); finally EndUpdate; end; end; end; function TFileView.IsVisibleToUser: Boolean; begin if NotebookPage is TFileViewPage then Result := TFileViewPage(NotebookPage).IsActive else Result := True; end; procedure TFileView.PropertiesRetrieverOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); var propType: TFilePropertyType; aFile: TFile; OrigDisplayFile: TDisplayFile; begin OrigDisplayFile := TDisplayFile(UserData); if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). aFile := OrigDisplayFile.FSFile; {$IF (fpc_version>2) or ((fpc_version=2) and (fpc_release>4))} // This is a bit faster. for propType in UpdatedFile.FSFile.AssignedProperties - aFile.AssignedProperties do {$ELSE} for propType := Low(TFilePropertyType) to High(TFilePropertyType) do if (propType in UpdatedFile.FSFile.AssignedProperties) and (not (propType in aFile.AssignedProperties)) then {$ENDIF} begin aFile.Properties[propType] := UpdatedFile.FSFile.ReleaseProperty(propType); end; if UpdatedFile.IconID <> -1 then OrigDisplayFile.IconID := UpdatedFile.IconID; if UpdatedFile.IconOverlayID <> -1 then OrigDisplayFile.IconOverlayID := UpdatedFile.IconOverlayID; if UpdatedFile.TextColor <> clNone then OrigDisplayFile.TextColor := UpdatedFile.TextColor; DoFileUpdated(OrigDisplayFile); OrigDisplayFile.Busy:= OrigDisplayFile.Busy - [bsProp]; end; function TFileView.GetActiveFileName: String; var aFile: TDisplayFile; begin aFile := GetActiveDisplayFile; if Assigned(aFile) then Result := aFile.FSFile.Name else Result := ''; end; procedure TFileView.SetActiveFile(const aFile: TFile); begin end; procedure TFileView.SetActiveFile(aFilePath: String); begin end; procedure TFileView.ChangePathAndSetActiveFile(aFilePath: String); begin end; procedure TFileView.SetActive(bActive, bNotify: Boolean); begin if FActive <> bActive then begin FActive := bActive; DoActiveChanged; end; if bActive and bNotify then begin // Deactivate all other views. frmMain.ForEachView(@EachViewDeactivate, nil); if Assigned(OnActivate) then OnActivate(Self); end; end; procedure TFileView.SetActive(bActive: Boolean); begin SetActive(bActive, True); end; procedure TFileView.JustForColorPreviewSetActiveState(bActive: Boolean); begin SetActive(bActive, False); end; procedure TFileView.SetSorting(const NewSortings: TFileSortings); var SortingProperties: TFilePropertiesTypes; begin FSortings := CloneSortings(NewSortings); if not IsLoadingFileList then begin SortingProperties:= GetSortingProperties; // Force reload if new sorting properties needed FForceReload:= (SortingProperties <> []) and (SortingProperties <> FSortingProperties); FSortingProperties:= SortingProperties; if FForceReload then Reload() else begin SortAllDisplayFiles; ReDisplayFileList; end; end; end; procedure TFileView.SortAllDisplayFiles; begin TDisplayFileSorter.Sort(FAllDisplayFiles, SortingForSorter); end; procedure TFileView.MakeFileSourceFileList; var Worker: TFileViewWorker; AThread: TFunctionThread = nil; ClonedDisplayFiles: TDisplayFiles = nil; DisplayFilesHashed: TStringHashListUtf8 = nil; i: Integer; begin if (csDestroying in ComponentState) or (FileSourcesCount = 0) or ([fvfDelayLoadingFiles, fvfDontLoadFiles] * Flags <> []) then Exit; {$IFDEF timeFileView} filelistTime := GetTickCount64; filelistPrevTime := filelistTime; filelistLoaderTime := filelistTime; DCDebug('--------- Start ---------'); {$ENDIF} StopWorkers; if gListFilesInThread and not (fspListOnMainThread in FileSource.GetProperties) then AThread := GetWorkersThread; if FileSource.Equals(FLastLoadedFileSource) and (FLastLoadedPath = CurrentPath) and (FAllDisplayFiles.Count > 0) and (FForceReload = False) then begin // Clone all properties of display files, but don't clone the FS files // themselves because new ones will be retrieved from FileSource. ClonedDisplayFiles := FAllDisplayFiles.Clone(False); DisplayFilesHashed := TStringHashListUtf8.Create(True); // Map filename to display file. for i := 0 to FAllDisplayFiles.Count - 1 do DisplayFilesHashed.Add(FAllDisplayFiles[i].FSFile.FullPath, ClonedDisplayFiles[i]); end; // Drop FForceReload flag FForceReload := False; Worker := TFileListBuilder.Create( FileSource, CurrentFileSourceIndex, FileFilter, FilterOptions, CurrentPath, SortingForSorter, FlatView, AThread, FSortingProperties, GetVariantFileProperties, @SetFileList, ClonedDisplayFiles, DisplayFilesHashed); AddWorker(Worker); ClearPendingFilesChanges; if gListFilesInThread and not (fspListOnMainThread in FileSource.GetProperties) then begin ClearRecentlyUpdatedFiles; BeforeMakeFileList; AThread.QueueFunction(@Worker.StartParam); end else begin BeforeMakeFileList; Worker.Start; end; end; function TFileView.ApplyFilter(ADisplayFile: TDisplayFile; NewFilesPosition: TNewFilesPosition): TFileViewApplyFilterResult; var bFilterOut: Boolean; FilteredFilesIndex: Integer; begin bFilterOut := TFileListBuilder.MatchesFilter(ADisplayFile.FSFile, FileFilter, FFilterOptions); FilteredFilesIndex := FFiles.Find(ADisplayFile); if FilteredFilesIndex >= 0 then begin if bFilterOut then begin FFiles.Delete(FilteredFilesIndex); if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Remove(ADisplayFile); Result := fvaprRemoved; end else Result := fvaprExisting; end else if not bFilterOut then begin InsertFile(ADisplayFile, FFiles, NewFilesPosition); VisualizeFileUpdate(ADisplayFile); Result := fvaprInserted; end else Result := fvaprNotExisting; end; procedure TFileView.BeforeMakeFileList; begin FLoadingFileListLongTimer.Enabled := True; end; function TFileView.BeginDragExternal(DragFile: TDisplayFile; DragDropSource: uDragDropEx.TDragDropSource; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var fileNamesList: TStringList; i: Integer; begin Result := False; if Assigned(DragDropSource) then begin fileNamesList := TStringList.Create; try if IsItemValid(DragFile) = True then begin for i := 0 to FFiles.Count-1 do begin if FFiles[i].Selected then fileNamesList.Add(FFiles[i].FSFile.FullPath); end; // If there were no files selected add the dragged file. if fileNamesList.Count = 0 then fileNamesList.Add(DragFile.FSFile.FullPath); // Initiate external drag&drop operation. Result := DragDropSource.DoDragDrop(fileNamesList, MouseButton, ScreenStartPoint); // Refresh source file panel after drop to (possibly) another application // (files could have been moved for example). // 'draggedFileItem' is invalid after this. Reload; end; finally FreeAndNil(fileNamesList); end; end; end; procedure TFileView.ChooseFile(const AFile: TDisplayFile; FolderMode: Boolean = False); var FSFile: TFile; begin if Assigned(AFile) and not IsLoadingFileList then begin FSFile := AFile.FSFile.Clone; try if FSFile.Name = '..' then ChangePathToParent(True) else if FSFile.IsLinkToDirectory then ChooseSymbolicLink(Self, FSFile) else if FSFile.IsDirectory then ChangePathToChild(FSFile) else if not FolderMode then try uFileSourceUtil.ChooseFile(Self, FileSource, FSFile); except on e: EInvalidCommandLine do MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); on e: Exception do MessageDlg('Error', e.Message, mtError, [mbOK], 0); end; finally FSFile.Free; end; end; end; procedure TFileView.DoSelectionChanged; begin // Empty. end; procedure TFileView.DoUpdateView; begin // Empty. end; procedure TFileView.EachViewDeactivate(AFileView: TFileView; UserData: Pointer); var ThisFileViewPage, OtherFileViewPage: TFileViewPage; begin if AFileView <> Self then begin ThisFileViewPage := TFileViewPage(GetNotebookPage); OtherFileViewPage := TFileViewPage(AFileView.GetNotebookPage); // Pages on the same notebook set to active and others to not active. if Assigned(ThisFileViewPage) and Assigned(OtherFileViewPage) then AFileView.SetActive(ThisFileViewPage.Notebook = OtherFileViewPage.Notebook, False); end; end; function TFileView.GetCurrentWorkType: TFileViewWorkType; var i: Integer; begin if Assigned(FFileViewWorkers) then begin for i := 0 to FFileViewWorkers.Count - 1 do if FFileViewWorkers[i].Working then Exit(FFileViewWorkers[i].WorkType); end; Result := fvwtNone; end; procedure TFileView.HashFileList; var i: Integer; AFile: TFile; begin // Cannot use FHashedFiles.Clear because it also destroys the buckets. FHashedFiles.Free; // TBucketList seems to do fairly well without needing a proper hash table. FHashedFiles := TBucketList.Create(bl256); FHashedNames.Clear; if Assigned(FAllDisplayFiles) then begin for i := 0 to FAllDisplayFiles.Count - 1 do begin AFile := FAllDisplayFiles[i].FSFile; FHashedFiles.Add(FAllDisplayFiles[i], nil); FHashedNames.Add( calcFileHashKey(AFile.Name,AFile.Path) , FAllDisplayFiles[i] ); end; end; end; procedure TFileView.InsertFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles; NewFilesPosition: TNewFilesPosition); procedure InsertAfterUpDir; var i, InsertPos: Integer; begin InsertPos := AFileList.Count; for i := 0 to AFileList.Count - 1 do begin if (AFileList[i].FSFile.Name <> '..') and (AFileList[i].FSFile.Name <> '.') then begin InsertPos := i; Break; end; end; AFileList.List.Insert(InsertPos, ADisplayFile); end; procedure InsertIntoSortedPosition; begin TDisplayFileSorter.InsertSort(ADisplayFile, AFileList, SortingForSorter); end; var EmptySortings: TFileSortings = nil; begin if ADisplayFile.FSFile.IsDirectory or ADisplayFile.FSFile.IsLinkToDirectory then InsertIntoSortedPosition else case NewFilesPosition of nfpTop: InsertAfterUpDir; nfpTopAfterDirectories: if gSortFolderMode <> sfmSortLikeFile then // Will only sort by directory attribute. TDisplayFileSorter.InsertSort(ADisplayFile, AFileList, EmptySortings, True) else InsertIntoSortedPosition; nfpSortedPosition: InsertIntoSortedPosition; nfpBottom: AFileList.Add(ADisplayFile); else raise Exception.Create('Unsupported NewFilesPosition setting.'); end; end; function TFileView.HasSelectedFiles: Boolean; var i: Integer; begin for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then Exit(True); end; Result := False; end; function TFileView.IsActiveItemValid:Boolean; begin Result := IsItemValid(GetActiveDisplayFile); end; function TFileView.IsReferenceValid(aFile: TDisplayFile): Boolean; begin Result := FHashedFiles.Exists(aFile); end; function TFileView.IsEmpty: Boolean; begin Result := (FFiles.Count = 0); end; function TFileView.IsItemValid(AFile: TDisplayFile): Boolean; begin if Assigned(AFile) and (AFile.FSFile.Name <> '..') then Result := True else Result := False; end; function TFileView.IsLoadingFileList: Boolean; begin Result := GetCurrentWorkType = fvwtCreate; end; function TFileView.Reload(const PathsToReload: TPathsArray = nil): Boolean; var i: Integer; begin if csDestroying in ComponentState then Exit(False); if Assigned(PathsToReload) then begin Result := False; for i := Low(PathsToReload) to High(PathsToReload) do if IsInPath(PathsToReload[i], CurrentPath, True, True) then begin Result := True; Break; end; if not Result then Exit; end; if FReloadTimer.Enabled then begin // Reload is already scheduled. Result := True; end else if CheckIfDelayReload then begin // Delay reloading. Result := False; FReloadNeeded := True; end else begin if GetCurrentWorkType = fvwtCreate then begin Result := False; // Allow interrupting loading a few times. if FLoadFilesNoDelayCount < 2 then begin Inc(FLoadFilesNoDelayCount); DoReload; end else begin // Let current loading finish and another will be scheduled after delay via timer. FReloadNeeded := True; end; end else begin Result := True; if DateTimeToTimeStamp(SysUtils.Now - FLoadFilesFinishTime).Time > MinimumReloadInterval then begin FLoadFilesNoDelayCount := 0; DoReload; end // Allow a few reloads in quick succession. else if FLoadFilesNoDelayCount < 4 then begin Inc(FLoadFilesNoDelayCount); DoReload; end else begin FReloadTimer.Interval := MinimumReloadInterval; FReloadTimer.Enabled := True; end; end; end; end; function TFileView.Reload(const PathToReload: String): Boolean; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := PathToReload; Result := Reload(Paths); end; procedure TFileView.Reload(AForced: Boolean); begin FForceReload:= AForced; DoReload; end; procedure TFileView.ReloadIfNeeded; begin if FReloadNeeded then Reload; end; procedure TFileView.StopWorkers; var i: Integer = 0; begin // Abort any working workers and destroy those that have finished. while i < FFileViewWorkers.Count do begin if FFileViewWorkers[i].CanBeDestroyed then begin FFileViewWorkers[i].Free; FFileViewWorkers.Delete(i); end else begin if FFileViewWorkers[i].Working then FFileViewWorkers[i].Abort; Inc(i); end; end; SetLoadingFileListLongTime(False); end; procedure TFileView.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var HistoryNode, EntryNode, FSNode, PathsNode: TXmlNode; SortingsNode, SortingSubNode, SortFunctionNode: TXmlNode; FileSourceClass: TFileSourceClass; sFSType, sPath, sFilename: String; aFileSource: IFileSource = nil; ActiveFSIndex: Integer = -1; ActivePathIndex: Integer = -1; NewSorting: TFileSortings = nil; SortDirection: TSortDirection; SortFunctions: TFileFunctions; SortFunctionInt: Integer; APage: TFileViewPage; begin RemoveAllFileSources; // Sorting. SortingsNode := AConfig.FindNode(ANode, 'Sortings'); if Assigned(SortingsNode) then begin SortingSubNode := SortingsNode.FirstChild; while Assigned(SortingSubNode) do begin if SortingSubNode.CompareName('Sorting') = 0 then begin if AConfig.TryGetValue(SortingSubNode, 'Direction', Integer(SortDirection)) then begin SortFunctions := nil; SortFunctionNode := SortingSubNode.FirstChild; while Assigned(SortFunctionNode) do begin if SortFunctionNode.CompareName('Function') = 0 then begin if TryStrToInt(AConfig.GetContent(SortFunctionNode), SortFunctionInt) then AddSortFunction(SortFunctions, TFileFunction(SortFunctionInt)); end; SortFunctionNode := SortFunctionNode.NextSibling; end; AddSorting(NewSorting, SortFunctions, SortDirection); end; end; SortingSubNode := SortingSubNode.NextSibling; end; end; FSortings := NewSorting; // SetSorting not needed here, will be called in UpdateView // History. HistoryNode := AConfig.FindNode(ANode, 'History'); if Assigned(HistoryNode) then begin EntryNode := HistoryNode.FirstChild; while Assigned(EntryNode) do begin if EntryNode.CompareName('Entry') = 0 then begin FSNode := EntryNode.FindNode('FileSource'); if Assigned(FSNode) then begin if AConfig.TryGetAttr(FSNode, 'Type', sFSType) then begin // Create file source based on saved configuration or create empty and // allow it to read its configuration from FSNode. if sFSType = 'FileSystem' then aFileSource := TFileSystemFileSource.GetFileSource else begin FileSourceClass := gVfsModuleList.FindFileSource(sFSType); if Assigned(FileSourceClass) then aFileSource := FileSourceClass.Create; end; if Assigned(aFileSource) then begin FHistory.AddFileSource(aFileSource); // Load paths history. PathsNode := AConfig.FindNode(EntryNode, 'Paths'); if Assigned(PathsNode) then begin PathsNode := PathsNode.FirstChild; while Assigned(PathsNode) do begin if PathsNode.CompareName('Path') = 0 then begin sPath := AConfig.GetContent(PathsNode); if sPath <> EmptyStr then begin FHistory.AddPath(sPath); if AConfig.GetAttr(PathsNode, 'Active', False) then ActivePathIndex := FHistory.PathsCount[FHistory.Count - 1] - 1; //-- if selected filename is specified in xml file, load it too if AConfig.TryGetAttr(PathsNode, 'Filename', sFilename) then begin FHistory.SetFilenameForCurrentPath(sFilename); end end; end; PathsNode := PathsNode.NextSibling; end; end; // Delete the file source if no paths loaded. if FHistory.PathsCount[FHistory.Count - 1] = 0 then FHistory.DeleteFromCurrentFileSource else begin // Check if the current history entry is active. if AConfig.GetAttr(EntryNode, 'Active', False) then ActiveFSIndex := FHistory.Count - 1; end; end; end; end; end; EntryNode := EntryNode.NextSibling; end; end; // Set current history position. if (ActiveFSIndex < 0) or (ActiveFSIndex > FHistory.Count - 1) then ActiveFSIndex := FHistory.Count - 1; if ActiveFSIndex <> -1 then begin if (ActivePathIndex < 0) or (ActivePathIndex > FHistory.PathsCount[ActiveFSIndex] - 1) then ActivePathIndex := FHistory.PathsCount[ActiveFSIndex] - 1; end else ActivePathIndex := -1; FHistory.SetIndexes(ActiveFSIndex, ActivePathIndex); aFileSource:= GetCurrentFileSource; if Assigned(aFileSource) and TFileSystemFileSource.ClassNameIs(aFileSource.ClassName) then begin APage := TFileViewPage(NotebookPage); // Go to lock path if tab is locked if Assigned(APage) and (APage.LockState <> tlsNormal) then begin if not mbCompareFileNames(FHistory.CurrentPath, APage.LockPath) then begin FileSourceClass:= gVfsModuleList.GetFileSource(APage.LockPath); if Assigned(FileSourceClass) then aFileSource := FileSourceClass.Create; FHistory.Add(aFileSource, APage.LockPath); end; end; if TFileSystemFileSource.ClassNameIs(aFileSource.ClassName) then begin // Go to upper directory if current doesn't exist sPath := GetDeepestExistingPath(FHistory.CurrentPath); if Length(sPath) = 0 then sPath := mbGetCurrentDir; if not mbCompareFileNames(sPath, FHistory.CurrentPath) then FHistory.Add(aFileSource, sPath); end; end; if Assigned(aFileSource) then begin FSortingProperties := GetSortingProperties; FileSource.AddReloadEventListener(@ReloadEvent); end; //TODO: probably it's not the best place for calling SetActiveFile() : // initially-active file should be set in the same place where // initial path is set SetActiveFile(FHistory.CurrentFilename); // No automatic reload here. end; procedure TFileView.LoadingFileListTimer(Sender: TObject); begin SetLoadingFileListLongTime(True); end; procedure TFileView.LoadSelectionFromClipboard; begin FSavedSelection.Text:= Clipboard.AsText; RestoreSelection; end; procedure TFileView.LoadSelectionFromFile(const AFileName: String); begin with dmComData do begin OpenDialog.DefaultExt := '.txt'; OpenDialog.Filter := '*.txt|*.txt'; OpenDialog.FileName := AFileName; if ((AFileName <> EmptyStr) and mbFileExists(AFileName)) or OpenDialog.Execute then try FSavedSelection.LoadFromFile(OpenDialog.FileName); RestoreSelection; except on E: Exception do msgError(rsMsgErrEOpen + '-' + E.Message); end; end; end; procedure TFileView.MarkCurrentName(bSelect: Boolean); var sGroup: String; bCaseSensitive: boolean = false; bIgnoreAccents: boolean = false; bWindowsInterpretation: boolean = True; begin if IsActiveItemValid then begin sGroup := GetActiveDisplayFile.FSFile.NameNoExt; if Length(sGroup) > 0 then sGroup += ExtensionSeparator + '*'; MarkGroup(sGroup, bSelect, @bCaseSensitive, @bIgnoreAccents, @bWindowsInterpretation); end; end; procedure TFileView.MarkCurrentNameExt(bSelect: Boolean); var sGroup: String; bCaseSensitive: boolean = False; bIgnoreAccents: boolean = False; bWindowsInterpretation: boolean = False; begin if IsActiveItemValid then begin sGroup := GetActiveDisplayFile.FSFile.Name; MarkGroup(sGroup, bSelect, @bCaseSensitive, @bIgnoreAccents, @bWindowsInterpretation); end; end; procedure TFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); var HistoryNode, EntryNode, FSNode, PathsNode, PathNode: TXmlNode; SortingsNode, SortingSubNode: TXmlNode; i, j: Integer; PathIndex: Integer; ASorting: TFileSortings; begin //-- remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed if not (fvfDelayLoadingFiles in Flags) then FHistory.SetFilenameForCurrentPath(GetActiveFileName()); AConfig.ClearNode(ANode); // Sorting. ASorting := Sorting; if Length(ASorting) > 0 then begin SortingsNode := AConfig.FindNode(ANode, 'Sortings', True); for i := Low(ASorting) to High(ASorting) do begin SortingSubNode := AConfig.AddNode(SortingsNode, 'Sorting'); AConfig.AddValue(SortingSubNode, 'Direction', Integer(ASorting[i].SortDirection)); for j := Low(ASorting[i].SortFunctions) to High(ASorting[i].SortFunctions) do AConfig.AddValue(SortingSubNode, 'Function', Integer(ASorting[i].SortFunctions[j])); end; end; // History. HistoryNode := AConfig.FindNode(ANode, 'History', True); AConfig.ClearNode(HistoryNode); for i := 0 to FileSourcesCount - 1 do begin // Currently saves only FileSystem. if FHistory.FileSource[i].IsClass(TFileSystemFileSource) then begin EntryNode := AConfig.AddNode(HistoryNode, 'Entry'); if FHistory.CurrentFileSourceIndex = i then AConfig.SetAttr(EntryNode, 'Active', True); FSNode := AConfig.AddNode(EntryNode, 'FileSource'); if TFileSystemFileSource.ClassNameIs(FHistory.FileSource[i].ClassName) then AConfig.SetAttr(FSNode, 'Type', 'FileSystem') else begin AConfig.SetAttr(FSNode, 'Type', FHistory.FileSource[i].ClassName); end; // Save paths history. PathsNode := AConfig.AddNode(EntryNode, 'Paths'); if ASaveHistory then begin for j := 0 to FHistory.PathsCount[i] - 1 do begin PathNode := AConfig.AddNode(PathsNode, 'Path'); // Mark path as active (don't need to if it is the last one). if (FHistory.CurrentFileSourceIndex = i) and (FHistory.CurrentPathIndex = j) and (j < FHistory.PathsCount[i] - 1) then begin AConfig.SetAttr(PathNode, 'Active', True); end; //-- set path AConfig.SetContent(PathNode, FHistory.Path[i, j]); //-- set selected filename AConfig.SetAttr(PathNode, 'Filename', FHistory.Filename[i, j]); end; end else begin if FHistory.CurrentFileSourceIndex = i then PathIndex := FHistory.CurrentPathIndex else PathIndex := FHistory.PathsCount[i] - 1; AConfig.AddValue(PathsNode, 'Path', FHistory.Path[i, PathIndex]); end; end; end; end; procedure TFileView.UpdateView; var bLoadingFilelist: Boolean; begin bLoadingFilelist := GetCurrentWorkType = fvwtCreate; StopWorkers; DoUpdateView; if bLoadingFilelist then MakeFileSourceFileList else begin // Always recreate file list because things like ignore list might have changed. if Assigned(FAllDisplayFiles) then Request([fvrqMakeDisplayFileList]); end; EnableWatcher(IsFileSystemWatcher); UpdateTitle; end; procedure TFileView.ApplySettings; var Index: Integer; begin SortAllDisplayFiles; ReDisplayFileList; for Index := 0 to FFiles.Count - 1 do begin FFiles[Index].TextColor := clNone; end; Notify([fvnVisibleFilePropertiesChanged]); end; function TFileView.BeforeChangePath(NewFileSource: IFileSource; Reason: TChangePathReason; NewPath: String): Boolean; var AForm: TCustomForm; begin if NewPath <> '' then begin if Assigned(OnBeforeChangePath) then if not OnBeforeChangePath(Self, NewFileSource, Reason, NewPath) then Exit(False); //-- before changing path, remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed FHistory.SetFilenameForCurrentPath(GetActiveFileName()); if Assigned(NewFileSource) and not NewFileSource.SetCurrentWorkingDirectory(NewPath) then begin AForm:= GetParentForm(Self); if Assigned(AForm) and AForm.Visible then begin msgError(Format(rsMsgChDirFailed, [NewPath])); end; DCDebug(rsMsgChDirFailed, [NewPath]); Exit(False); end; Result := True; end else Result := False; end; procedure TFileView.AfterChangePath; begin LastActiveFile := ''; RequestedActiveFile := ''; FReloadNeeded := False; FReloadTimer.Enabled := False; FLoadFilesStartTime := 0; FLoadFilesFinishTime := 0; FLoadFilesNoDelayCount := 0; if Assigned(OnAfterChangePath) then OnAfterChangePath(Self); UpdateTitle; MakeFileSourceFileList; end; procedure TFileView.ChangePathToParent(AllowChangingFileSource: Boolean); var PreviousSubDirectory, sUpLevel: String; begin AllowChangingFileSource:= AllowChangingFileSource and not (fspNoneParent in FileSource.Properties); // Check if this is root level of the current file source. if FileSource.IsPathAtRoot(CurrentPath) then begin // If there is a higher level file source then change to it. if (FileSourcesCount > 1) and AllowChangingFileSource then begin RemoveCurrentFileSource; end; end else begin PreviousSubDirectory := ExtractFileName(ExcludeTrailingPathDelimiter(CurrentPath)); sUpLevel:= FileSource.GetParentDir(CurrentPath); if sUpLevel <> EmptyStr then begin CurrentPath := sUpLevel; SetActiveFile(PreviousSubDirectory); end; end; end; procedure TFileView.ChangePathToChild(const aFile: TFile); begin if Assigned(aFile) and aFile.IsNameValid and (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // Workaround for Search Result File Source if FileSource is TSearchResultFileSource then SetFileSystemPath(Self, aFile.FullPath) else CurrentPath := CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); end; end; procedure TFileView.ExecuteCommand(CommandName: String; const Params: array of String); begin FMethods.ExecuteCommand(CommandName, Params); end; function TFileView.AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; var IsNewFileSource: Boolean; begin IsNewFileSource := not aFileSource.Equals(FileSource); Result:= BeforeChangePath(aFileSource, cprAdd, aPath); if Result then begin FFlatView := False; if Assigned(FileSource) and IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Add(aFileSource, aPath); AfterChangePath; if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; EnableWatcher(True); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; function TFileView.RemoveCurrentFileSource: Boolean; var NewFileSource: IFileSource = nil; NewPath: String = ''; IsNewFileSource: Boolean; PrevIndex: Integer; FocusedFile: String; begin Result:= True; if FileSourcesCount > 0 then begin FFlatView := False; // TODO: Do this by remembering focused file name in a list? FocusedFile := ExtractFileName(FileSource.CurrentAddress); PrevIndex := FHistory.CurrentFileSourceIndex - 1; if PrevIndex < 0 then begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Clear; AfterChangePath; end else begin NewFileSource := FHistory.FileSource[PrevIndex]; NewPath := FHistory.Path[PrevIndex, FHistory.PathsCount[PrevIndex] - 1]; Result:= BeforeChangePath(NewFileSource, cprRemove, NewPath); if Result then begin IsNewFileSource := not NewFileSource.Equals(FileSource); if IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.DeleteFromCurrentFileSource; AfterChangePath; if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; EnableWatcher(True); SetActiveFile(FocusedFile); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; end; end; procedure TFileView.RemoveAllFileSources; begin if FileSourcesCount > 0 then begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Clear; if not (csDestroying in ComponentState) then AfterChangePath; {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.AssignFileSources(const otherFileView: TFileView); begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Assign(otherFileView.FHistory); UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); AfterChangePath; EnableWatcher(True); end; function TFileView.GetCurrentFileSource: IFileSource; begin Result := FHistory.CurrentFileSource; end; function TFileView.GetCurrentFileSourceIndex: Integer; begin Result := FHistory.CurrentFileSourceIndex; end; function TFileView.GetCurrentPathIndex: Integer; begin Result := FHistory.CurrentPathIndex; end; function TFileView.GetFileSource(Index: Integer): IFileSource; begin Result := FHistory.FileSource[Index]; end; function TFileView.GetFileSourcesCount: Integer; begin Result := FHistory.Count; end; function TFileView.GetFiltered: Boolean; begin Result := Self.FileFilter <> EmptyStr; end; function TFileView.GetPath(FileSourceIndex, PathIndex: Integer): String; begin with FHistory do begin if (Count > 0) and (PathIndex >= 0) and (PathIndex < PathsCount[FileSourceIndex]) then Result := Path[FileSourceIndex, PathIndex] else Result := EmptyStr; end; end; function TFileView.GetPathsCount(FileSourceIndex: Integer): Integer; begin with FHistory do begin if Count > 0 then Result := PathsCount[FileSourceIndex] else Result := 0; end; end; function TFileView.GetSortingProperties: TFilePropertiesTypes; var I, J: Integer; begin Result:= []; // Retrieve RetrievableFileProperties which used in sorting for I:= Low(FSortings) to High(FSortings) do begin for J:= Low(FSortings[I].SortFunctions) to High(FSortings[I].SortFunctions) do begin Result:= Result + GetFilePropertyType(FSortings[I].SortFunctions[J]); end; end; Result:= (Result - FileSource.SupportedFileProperties) * FileSource.RetrievableFileProperties; end; function TFileView.GetSortingForSorter: TFileSortings; begin Result := CloneAndAddSortByNameIfNeeded(Sorting); end; function TFileView.GetWatcherActive: Boolean; begin Result := FWatchPath <> EmptyStr; end; procedure TFileView.HandleNotifications; begin BeginUpdate; try while FNotifications <> [] do begin if fvnFileSourceFileListLoaded in FNotifications then begin FNotifications := FNotifications - [fvnFileSourceFileListLoaded]; FileSourceFileListLoaded; DoOnFileListChanged; end else if fvnFileSourceFileListUpdated in FNotifications then begin FNotifications := FNotifications - [fvnFileSourceFileListUpdated]; FileSourceFileListUpdated; DoOnFileListChanged; end else if fvnDisplayFileListChanged in FNotifications then begin FNotifications := FNotifications - [fvnDisplayFileListChanged]; DisplayFileListChanged; StartRecentlyUpdatedTimerIfNeeded; end else if fvnVisibleFilePropertiesChanged in FNotifications then begin FNotifications := FNotifications - [fvnVisibleFilePropertiesChanged]; EnsureDisplayProperties; end else if fvnSelectionChanged in FNotifications then begin FNotifications := FNotifications - [fvnSelectionChanged]; DoSelectionChanged; end; end; finally EndUpdate; end; end; procedure TFileView.HandleRequests; begin BeginUpdate; try while FRequests <> [] do begin // Order is important because of dependencies. // Remove request before acting on it, since a function called may request it again. if fvrqHashFileList in FRequests then begin FRequests := FRequests - [fvrqHashFileList]; HashFileList; end else if fvrqApplyPendingFilesChanges in FRequests then begin FRequests := FRequests - [fvrqApplyPendingFilesChanges]; ApplyPendingFilesChanges(nfpSortedPosition, ufpSortedPosition); end else if fvrqMakeDisplayFileList in FRequests then begin FRequests := FRequests - [fvrqMakeDisplayFileList]; ReDisplayFileList; end; end; finally EndUpdate; end; end; procedure TFileView.Notify(NewNotifications: TFileViewNotifications); begin FNotifications := FNotifications + NewNotifications; if FUpdateCount = 0 then HandleNotifications; end; procedure TFileView.OpenActiveFile; begin ChooseFile(GetActiveDisplayFile); end; procedure TFileView.SetFileFilter(NewFilter: String; NewFilterOptions: TQuickSearchOptions); begin // do not reload if filter has not changed if (FFileFilter = NewFilter) and (FFilterOptions = NewFilterOptions) then Exit; FFileFilter := NewFilter; FFilterOptions := NewFilterOptions; Request([fvrqMakeDisplayFileList]); end; procedure TFileView.SetFileList(var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles); var ARequests: TFileViewRequests; begin ClearRecentlyUpdatedFiles; FFiles.Free; FFiles := NewFilteredDisplayFiles; NewFilteredDisplayFiles := nil; FAllDisplayFiles.Free; FAllDisplayFiles := NewAllDisplayFiles; NewAllDisplayFiles := nil; FLastLoadedFileSource := FileSource; FLastLoadedPath := CurrentPath; BeginUpdate; try ARequests := [fvrqHashFileList]; if not FReloadNeeded then Include(ARequests, fvrqApplyPendingFilesChanges) else ClearPendingFilesChanges; Request(ARequests); Notify([fvnFileSourceFileListLoaded, fvnDisplayFileListChanged]); finally EndUpdate; end; // We have just reloaded file list, so the requested file should be there. // Regardless if it is there or not it should be cleared so that it doesn't // get selected on further reloads. RequestedActiveFile := ''; end; procedure TFileView.EnableWatcher(Enable: Boolean); var WatchFilter: TFSWatchFilter; begin if Enable then begin if ([fvfDelayLoadingFiles, fvfDontWatch] * Flags = []) and Assigned(FileSource) and FileSource.IsClass(TFileSystemFileSource) and (FWatchPath <> CurrentPath) then begin if WatcherActive then EnableWatcher(False); // If current path is in exclude list then exit. if (watch_exclude_dirs in gWatchDirs) and (gWatchDirsExclude <> '') then begin if IsInPathList(gWatchDirsExclude, CurrentPath) then Exit; end; WatchFilter := []; if watch_file_name_change in gWatchDirs then Include(WatchFilter, wfFileNameChange); if watch_attributes_change in gWatchDirs then Include(WatchFilter, wfAttributesChange); if WatchFilter <> [] then begin FWatchPath := CurrentPath; if TFileSystemWatcher.AddWatch(FWatchPath, WatchFilter, @WatcherEvent, self) = False then FWatchPath := EmptyStr; end; end; end else begin TFileSystemWatcher.RemoveWatch(FWatchPath, @WatcherEvent); FWatchPath := EmptyStr; end; end; procedure TFileView.SetFlatView(AFlatView: Boolean); begin FFlatView:= AFlatView; {$IFDEF DARWIN} TFileSystemWatcher.UpdateWatch; {$ENDIF} end; procedure TFileView.ActivateEvent(Sender: TObject); begin SetFlags(Flags - [fvfDelayLoadingFiles]); ReloadIfNeeded; end; function TFileView.CheckIfDelayReload: Boolean; begin Result := ((watch_only_foreground in gWatchDirs) and (not Application.Active)) or (not IsVisibleToUser); end; procedure TFileView.DoReload; begin FReloadNeeded := False; MakeFileSourceFileList; end; procedure TFileView.HandleFSWatcherEvent(const EventData: TFSWatcherEventData; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); begin case EventData.EventType of fswFileCreated: Self.AddFile(EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); fswFileChanged: Self.UpdateFile(EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); fswFileDeleted: Self.RemoveFile(EventData.FileName, EventData.Path); fswFileRenamed: Self.RenameFile(EventData.NewFileName, EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); fswSelfDeleted: CurrentPath:= GetDeepestExistingPath(CurrentPath); else Reload(); end; end; procedure TFileView.HandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); begin // Only allow some keys and always zero Key (handled). DoHandleKeyDownWhenLoading(Key, Shift); Key := 0; end; procedure TFileView.ReloadEvent(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray); var NoWatcher: Boolean; begin if aFileSource.Equals(FileSource) then begin // Reload file view but only if the file source is // currently viewed and FileSystemWatcher is not being used. NoWatcher:= not (WatcherActive and TFileSystemWatcher.CanWatch(ReloadedPaths) and TFileSystemFileSource.ClassNameIs(FileSource.ClassName) ); if (NoWatcher or FlatView) then Reload(ReloadedPaths); end; end; procedure TFileView.ReloadTimerEvent(Sender: TObject); begin FReloadTimer.Enabled := False; DoReload; end; procedure TFileView.WatcherEvent(const EventData: TFSWatcherEventData); var CurrentTime: TDateTime; AddToPending: Boolean; begin if (not FReloadNeeded) and CheckIfDelayReload then begin // Delay reloading FReloadNeeded:= True; Exit; end; if not (csDestroying in ComponentState) and not FReloadNeeded and String(IncludeTrailingPathDelimiter(EventData.Path)).StartsWith(CurrentPath) then begin if GetCurrentWorkType = fvwtCreate then begin // If some unknown change then we can only reload the whole file list. if EventData.EventType <> fswUnknownChange then AddEventToPendingFilesChanges(EventData) else Reload(); end else begin if FileListLoaded then begin AddToPending := Assigned(FPendingFilesTimer) and FPendingFilesTimer.Enabled; if not AddToPending then begin CurrentTime := SysUtils.Now; if DateTimeToTimeStamp(CurrentTime - FWatcherEventLastTime).Time > UpdateFilelistInterval then FWatcherEventsApplied := 0; FWatcherEventLastTime := CurrentTime; if FWatcherEventsApplied < 5 then begin Inc(FWatcherEventsApplied); HandleFSWatcherEvent(EventData, gNewFilesPosition, gUpdatedFilesPosition); end else AddToPending := True; end; if AddToPending then begin AddEventToPendingFilesChanges(EventData); StartUpdatePendingTimer; end; end // else filelist not loaded and not even started loading - discard the event end; end; end; procedure TFileView.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin Message.Result := 1; end; function TFileView.GetVariantFileProperties: TDynamicStringArray; begin SetLength(Result, 0); end; procedure TFileView.GoToHistoryIndex(aFileSourceIndex, aPathIndex: Integer); var IsNewFileSource: Boolean; FilenameFromHistory: String; begin //-- before changing path, remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed FHistory.SetFilenameForCurrentPath(GetActiveFileName()); IsNewFileSource := not FHistory.FileSource[aFileSourceIndex].Equals(FHistory.CurrentFileSource); if BeforeChangePath(FHistory.FileSource[aFileSourceIndex], cprChange, FHistory.Path[aFileSourceIndex, aPathIndex]) then begin FFlatView := False; FilenameFromHistory := FHistory.Filename[aFileSourceIndex, aPathIndex]; if Assigned(FileSource) and IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.SetIndexes(aFileSourceIndex, aPathIndex); if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; AfterChangePath; EnableWatcher(True); if FilenameFromHistory <> '' then SetActiveFile(FilenameFromHistory) {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.GoToPrevHistory; var aFileSourceIndex, aPathIndex: Integer; begin if FHistory.CurrentPathIndex > 0 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex; aPathIndex := FHistory.CurrentPathIndex - 1; end else if FHistory.CurrentFileSourceIndex > 0 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex - 1; aPathIndex := FHistory.PathsCount[aFileSourceIndex] - 1; end else Exit; GoToHistoryIndex(aFileSourceIndex, aPathIndex); end; procedure TFileView.GoToNextHistory; var aFileSourceIndex, aPathIndex: Integer; begin if FHistory.CurrentFileSourceIndex >= 0 then begin if FHistory.CurrentPathIndex < FHistory.PathsCount[FHistory.CurrentFileSourceIndex] - 1 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex; aPathIndex := FHistory.CurrentPathIndex + 1; end else if FHistory.CurrentFileSourceIndex < FHistory.Count - 1 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex + 1; aPathIndex := 0; end else Exit; GoToHistoryIndex(aFileSourceIndex, aPathIndex); end; end; procedure TFileView.ReDisplayFileList; begin case GetCurrentWorkType of fvwtNone: ; // Ok to continue. fvwtCreate: // File list is being loaded from file source - cannot display yet. Exit; fvwtUpdate: StopWorkers; else Exit; end; // Redisplaying file list is done in the main thread because it takes // relatively short time, so the user usually won't notice it and it is // a bit faster this way. TFileListBuilder.MakeDisplayFileList( FAllDisplayFiles, FFiles, FileFilter, FFilterOptions); Notify([fvnDisplayFileListChanged]); end; procedure TFileView.WorkerStarting(const Worker: TFileViewWorker); begin if (Worker.WorkType = fvwtCreate) and not Worker.Aborted then begin FLoadFilesStartTime := SysUtils.Now; end; end; procedure TFileView.WorkerFinished(const Worker: TFileViewWorker); var Interval: Integer; begin if (Worker.WorkType = fvwtCreate) and not Worker.Aborted then begin FLoadFilesFinishTime := SysUtils.Now; // Schedule another reload if needed. if FReloadNeeded and not CheckIfDelayReload then begin // Delay by half the time taken by previous loading. Interval := DateTimeToTimeStamp(SysUtils.Now - FLoadFilesStartTime).Time div 2; if Interval < MinimumReloadInterval then Interval := MinimumReloadInterval; FReloadTimer.Interval := Interval; FReloadTimer.Enabled := True; end; SetLoadingFileListLongTime(False); end; if (Worker is TCalculateSpaceWorker) and (Worker.Aborted = False) then begin if TCalculateSpaceWorker(Worker).CompletedCalculations > 1 then begin SortAllDisplayFiles; ReDisplayFileList; end; end; end; { TDropParams } constructor TDropParams.Create( var aFiles: TFiles; aDropEffect: TDropEffect; aScreenDropPoint: TPoint; aDropIntoDirectories: Boolean; aSourcePanel: TFileView; aTargetPanel: TFileView; aTargetFileSource: IFileSource; aTargetPath: String); begin Files := aFiles; aFiles := nil; DropEffect := aDropEffect; ScreenDropPoint := aScreenDropPoint; DropIntoDirectories := aDropIntoDirectories; SourcePanel := aSourcePanel; TargetPanel := aTargetPanel; TargetFileSource := aTargetFileSource; TargetPath := aTargetPath; end; destructor TDropParams.Destroy; begin inherited Destroy; FreeAndNil(Files); end; function TDropParams.GetDragDropType: TDragDropType; begin if Assigned(SourcePanel) then Result := ddtInternal else Result := ddtExternal; end; end. doublecmd-1.1.30/src/fileviews/ucolumnsfileview.pas0000644000175000001440000020722715104114162021470 0ustar alexxusersunit uColumnsFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, Forms, ExtCtrls, Grids, LMessages, LCLIntf, LCLType, Menus, LCLVersion, uFile, uFileProperty, uFileView, uFileViewWithMainCtrl, uFileSource, uDisplayFile, uColumns, uFileSorting, DCXmlConfig, DCBasicTypes, uTypes, uSmoothScrollingGrid, uFileViewWithGrid; type TFunctionDime = function (AColor: TColor): TColor of Object; TColumnsSortDirections = array of TSortDirection; TColumnsFileView = class; { TDrawGridEx } TDrawGridEx = class(TSmoothScrollingGrid) private FMouseDownY: Integer; FLastMouseMoveTime: QWord; FLastMouseScrollTime: QWord; ColumnsView: TColumnsFileView; function GetGridHorzLine: Boolean; function GetGridVertLine: Boolean; procedure SetGridHorzLine(const AValue: Boolean); procedure SetGridVertLine(const AValue: Boolean); protected procedure DragCanceled; override; procedure DoMouseMoveScroll(X, Y: Integer); procedure KeyDown(var Key: Word; Shift: TShiftState); override; function DoMouseWheelHorz(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); override; procedure InitializeWnd; override; procedure FinalizeWnd; override; procedure DrawColumnText(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; public ColumnsOwnDim: TFunctionDime; constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure UpdateView; function MouseOnGrid(X, Y: LongInt): Boolean; // Returns height of all the header rows. function GetHeaderHeight: Integer; // Adapted from TCustomGrid.GetVisibleGrid only for visible rows. function GetVisibleRows: TRange; {en Retrieves first and last fully visible row number. } function GetFullVisibleRows: TRange; function IsRowVisible(aRow: Integer): Boolean; procedure ScrollHorizontally(ForwardDirection: Boolean); property GridVertLine: Boolean read GetGridVertLine write SetGridVertLine; property GridHorzLine: Boolean read GetGridHorzLine write SetGridHorzLine; end; TColumnResized = procedure (Sender: TObject; ColumnIndex: Integer; ColumnNewsize: integer) of object; { TColumnsFileView } TColumnsFileView = class(TFileViewWithMainCtrl) private FColumnsFunctions: String; FColumnsSortDirections: TColumnsSortDirections; FFileNameColumn: Integer; FExtensionColumn: Integer; pmColumnsMenu: TPopupMenu; dgPanel: TDrawGridEx; FOnColumnResized: TColumnResized; function GetColumnsClass: TPanelColumnsClass; procedure SetRowCount(Count: Integer); procedure SetFilesDisplayItems; procedure SetColumns; procedure MakeVisible(iRow: Integer); procedure MakeActiveVisible; procedure UpdateFooterDetails(AInfo: Boolean); {en Format and cache all columns strings. } procedure MakeColumnsStrings(AFile: TDisplayFile); procedure MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); procedure EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); {en Translates file sorting by functions to sorting directions of columns. } procedure SetColumnsSortDirections; {en Checks which file properties are needed for displaying. } function GetFilePropertiesNeeded: TFilePropertiesTypes; // -- Events -------------------------------------------------------------- procedure dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); procedure dgPanelHeaderClick(Sender: TObject;IsColumn: Boolean; index: Integer); procedure dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelSelection(Sender: TObject; aCol, aRow: Integer); procedure dgPanelTopLeftChanged(Sender: TObject); procedure dgPanelResize(Sender: TObject); procedure dgPanelHeaderSized(Sender: TObject; IsColumn: Boolean; index: Integer); procedure ColumnsMenuClick(Sender: TObject); procedure CopyFileDetails(AList: TStringList); protected procedure CreateDefault(AOwner: TWinControl); override; procedure BeforeMakeFileList; override; procedure ClearAfterDragDrop; override; procedure DisplayFileListChanged; override; procedure DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure DoUpdateView; override; procedure FileSourceFileListLoaded; override; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(FileIndex: PtrInt): TRect; override; function GetIconRect(FileIndex: PtrInt): TRect; override; function GetVisibleFilesIndexes: TRange; override; procedure RedrawFile(FileIndex: PtrInt); override; procedure RedrawFile(DisplayFile: TDisplayFile); override; procedure RedrawFiles; override; procedure SetActiveFile(FileIndex: PtrInt; ScrollTo: Boolean; aLastTopRowIndex: PtrInt = -1); override; procedure SetSorting(const NewSortings: TFileSortings); override; procedure ShowRenameFileEdit(var aFile: TFile); override; procedure UpdateRenameFileEditPosition; override; procedure UpdateInfoPanel; override; procedure MouseScrollTimer(Sender: TObject); override; procedure AfterChangePath; override; function GetVariantFileProperties: TDynamicStringArray; override; public ActiveColm: String; ActiveColmSlave: TPanelColumnsClass; isSlave:boolean; Demo: Boolean; //--------------------- constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AColumnSet: String; AFlags: TFileViewFlags = []); virtual; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TColumnsFileView; override; procedure CloneTo(FileView: TFileView); override; function AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; procedure UpdateColor; override; procedure UpdateColumnsView; procedure SetColumnSet(const AName: String); procedure SetGridFunctionDim(ExternalDimFunction:TFunctionDime); property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized; published procedure cm_SaveFileDetailsToFile(const Params: array of string); procedure cm_CopyFileDetailsToClip(const Params: array of string); end; implementation uses LCLProc, Buttons, Clipbrd, DCStrUtils, uLng, uGlobs, uPixmapManager, uDebug, DCClassesUtf8, dmCommonData, uDCUtils, math, fMain, fOptions, uClipboard, uOrderedFileView, uShowMsg, uFileSourceProperty, uKeyboard, uFileFunctions, uFileViewNotebook, fOptionsCustomColumns; const CELL_PADDING = 2; type TEachViewCallbackReason = (evcrUpdateColumns); TEachViewCallbackMsg = record Reason: TEachViewCallbackReason; UpdatedColumnsSetName: String; NewColumnsSetName: String; // If columns name renamed end; PEachViewCallbackMsg = ^TEachViewCallbackMsg; procedure TColumnsFileView.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); SetColumnsSortDirections; end; procedure TColumnsFileView.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var ColumnsClass: TPanelColumnsClass; SortColumn: Integer; SortDirection: TSortDirection; ColumnsViewNode: TXmlNode; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin inherited LoadConfiguration(AConfig, ANode); // Try to read new view-specific node. ColumnsViewNode := AConfig.FindNode(ANode, 'ColumnsView'); if Assigned(ColumnsViewNode) then ANode := ColumnsViewNode; ActiveColm := AConfig.GetValue(ANode, 'ColumnsSet', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; ANode := ANode.FindNode('Sorting'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Sort') = 0 then begin if AConfig.TryGetValue(ANode, 'Column', SortColumn) and (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := ColumnsClass.GetColumnFunctions(SortColumn); SortDirection := TSortDirection(AConfig.GetValue(ANode, 'Direction', Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; inherited SetSorting(NewSorting); end; end; procedure TColumnsFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'columns'); ANode := AConfig.FindNode(ANode, 'ColumnsView', True); AConfig.ClearNode(ANode); with FileSource do begin if (FileSystem = EmptyStr) or (FileSystem = FS_GENERAL) then AConfig.SetValue(ANode, 'ColumnsSet', ActiveColm); end; end; procedure TColumnsFileView.UpdateColor; begin inherited UpdateColor; dgPanel.GridLineColor:= gColors.FilePanel^.GridLine; end; procedure TColumnsFileView.dgPanelHeaderClick(Sender: TObject; IsColumn: Boolean; index: Integer); var ShiftState : TShiftState; SortingDirection : TSortDirection; ColumnsClass: TPanelColumnsClass; Column: TPanelColumn; NewSorting: TFileSortings; SortFunctions: TFileFunctions; begin if (not IsColumn) or (not gTabHeader) then Exit; ColumnsClass := GetColumnsClass; Column := ColumnsClass.GetColumnItem(Index); if Assigned(Column) then begin NewSorting := Sorting; SortFunctions := ColumnsClass.GetColumnFunctions(Index); if Length(SortFunctions) = 0 then Exit; ShiftState := GetKeyShiftStateEx; if [ssShift, ssCtrl] * ShiftState = [] then begin SortingDirection := GetSortDirection(NewSorting, SortFunctions); if SortingDirection = sdNone then begin // If there is no direction currently, sort "sdDescending" for size and date. // Commonly, we search seek more often for most recent files then older any others. // When sorting by size, often it is to find larger file to make room. // Anyway, it makes DC like TC, and also, Windows Explorer do the same. case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:=sdDescending; else SortingDirection:=sdAscending; end; end else begin SortingDirection := ReverseSortDirection(SortingDirection); end; NewSorting := nil; end else begin // If there is no direction currently, sort "sdDescending" for size and date (see previous comment). case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:=sdDescending; else SortingDirection:=sdAscending; end; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); SetSorting(NewSorting); end; end; procedure TColumnsFileView.dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size < gFonts[dcfMain].MaxValue) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Handled:=True; Exit; end; case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEUP, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEUP, 0); else Handled:= False; end; end; end; procedure TColumnsFileView.dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size > gFonts[dcfMain].MinValue) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size-1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Handled:=True; Exit; end; case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEDOWN, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEDOWN, 0); else Handled:= False; end; end; end; procedure TColumnsFileView.dgPanelSelection(Sender: TObject; aCol, aRow: Integer); begin dgPanel.Options := dgPanel.Options - [goDontScrollPartCell]; DoFileIndexChanged(aRow - dgPanel.FixedRows, dgPanel.TopRow); if (FSelectedCount = 0) then UpdateFooterDetails(False); end; procedure TColumnsFileView.dgPanelTopLeftChanged(Sender: TObject); begin if not FUpdatingActiveFile then FLastTopRowIndex:= dgPanel.TopRow; Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileView.dgPanelResize(Sender: TObject); begin {$IF DEFINED(LCLGTK2)} // Workaround: https://doublecmd.sourceforge.io/mantisbt/view.php?id=1992 if dgPanel.Flat then dgPanel.Invalidate; {$ENDIF} Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileView.AfterChangePath; begin inherited AfterChangePath; if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; end; function TColumnsFileView.GetVariantFileProperties: TDynamicStringArray; begin Result:= GetColumnsClass.GetColumnsVariants; end; procedure TColumnsFileView.SetGridFunctionDim(ExternalDimFunction: TFunctionDime); begin dgPanel.ColumnsOwnDim:=ExternalDimFunction; end; procedure TColumnsFileView.ShowRenameFileEdit(var aFile: TFile); begin if FFileNameColumn <> -1 then begin if not edtRename.Visible then begin edtRename.Font.Name := GetColumnsClass.GetColumnFontName(FFileNameColumn); edtRename.Font.Size := GetColumnsClass.GetColumnFontSize(FFileNameColumn); edtRename.Font.Style := GetColumnsClass.GetColumnFontStyle(FFileNameColumn); UpdateRenameFileEditPosition; end; inherited ShowRenameFileEdit(AFile); end; end; procedure TColumnsFileView.UpdateRenameFileEditPosition; var ARect: TRect; begin inherited UpdateRenameFileEditPosition; ARect := dgPanel.CellRect(FFileNameColumn, dgPanel.Row); Dec(ARect.Top, 2); Inc(ARect.Bottom, 2); if (gShowIcons <> sim_none) and (FFileNameColumn = 0) then Inc(ARect.Left, gIconsSize + 2); if Succ(FFileNameColumn) = FExtensionColumn then Inc(ARect.Right, dgPanel.ColWidths[FExtensionColumn]); if gInplaceRenameButton and (ARect.Right + edtRename.ButtonWidth < dgPanel.ClientWidth) then Inc(ARect.Right, edtRename.ButtonWidth); edtRename.SetBounds(ARect.Left, ARect.Top, ARect.Width, ARect.Height); end; procedure TColumnsFileView.UpdateInfoPanel; begin inherited UpdateInfoPanel; UpdateFooterDetails(True); end; procedure TColumnsFileView.MouseScrollTimer(Sender: TObject); var APoint: TPoint; begin if DragManager.IsDragging or IsMouseSelecting then begin APoint := dgPanel.ScreenToClient(Mouse.CursorPos); dgPanel.DoMouseMoveScroll(APoint.X, APoint.Y); end; end; procedure TColumnsFileView.RedrawFile(FileIndex: PtrInt); begin dgPanel.InvalidateRow(FileIndex + dgPanel.FixedRows); end; procedure TColumnsFileView.SetColumnsSortDirections; var Columns: TPanelColumnsClass; function SetSortDirection(ASortFunction: TFileFunction; ASortDirection: TSortDirection; Overwrite: Boolean): Boolean; var k, l: Integer; ColumnFunctions: TFileFunctions; begin for k := 0 to Columns.Count - 1 do begin ColumnFunctions := Columns.GetColumnFunctions(k); for l := 0 to Length(ColumnFunctions) - 1 do if ColumnFunctions[l] = ASortFunction then begin if Overwrite or (FColumnsSortDirections[k] = sdNone) then begin FColumnsSortDirections[k] := ASortDirection; Exit(True); end; end; end; Result := False; end; var i, j: Integer; ASortings: TFileSortings; begin Columns := GetColumnsClass; ASortings := Sorting; SetLength(FColumnsSortDirections, Columns.Count); for i := 0 to Length(FColumnsSortDirections) - 1 do FColumnsSortDirections[i] := sdNone; for i := 0 to Length(ASortings) - 1 do begin for j := 0 to Length(ASortings[i].SortFunctions) - 1 do begin // Search for the column containing the sort function and add sorting // by that column. If function is Name and it is not found try searching // for NameNoExtension + Extension and vice-versa. if not SetSortDirection(ASortings[i].SortFunctions[j], ASortings[i].SortDirection, True) then begin if ASortings[i].SortFunctions[j] = fsfName then begin SetSortDirection(fsfNameNoExtension, ASortings[i].SortDirection, False); SetSortDirection(fsfExtension, ASortings[i].SortDirection, False); end else if ASortings[i].SortFunctions[j] in [fsfNameNoExtension, fsfExtension] then begin SetSortDirection(fsfName, ASortings[i].SortDirection, False); end; end; end; end; end; procedure TColumnsFileView.SetFilesDisplayItems; var i: Integer; begin for i := 0 to FFiles.Count - 1 do FFiles[i].DisplayItem := Pointer(i + dgPanel.FixedRows); end; function TColumnsFileView.GetFilePropertiesNeeded: TFilePropertiesTypes; var i, j: Integer; ColumnsClass: TPanelColumnsClass; FileFunctionsUsed: TFileFunctions; begin // By default always use some properties. Result := [fpName, fpSize, // For info panel (total size, selected size) fpAttributes, // For distinguishing directories fpLink, // For distinguishing directories (link to dir) and link icons fpModificationTime // For selecting/coloring files (by SearchTemplate) ]; ColumnsClass := GetColumnsClass; FFileNameColumn := -1; FExtensionColumn := -1; // Scan through all columns. for i := 0 to ColumnsClass.Count - 1 do begin FileFunctionsUsed := ColumnsClass.GetColumnFunctions(i); if Length(FileFunctionsUsed) > 0 then begin // Scan through all functions in the column. for j := Low(FileFunctionsUsed) to High(FileFunctionsUsed) do begin // Add file properties needed to display the function. Result := Result + GetFilePropertyType(FileFunctionsUsed[j]); if (FFileNameColumn = -1) and (FileFunctionsUsed[j] in [fsfName, fsfNameNoExtension]) then FFileNameColumn := i; if (FExtensionColumn = -1) and (FileFunctionsUsed[j] in [fsfExtension]) then FExtensionColumn := i; end; end; end; end; function TColumnsFileView.GetFileRect(FileIndex: PtrInt): TRect; begin Result := dgPanel.CellRect(0, FileIndex + dgPanel.FixedRows); end; function TColumnsFileView.GetIconRect(FileIndex: PtrInt): TRect; begin FileIndex:= FileIndex + dgPanel.FixedRows; Result := dgPanel.CellRect(0, FileIndex); Result.Top:= Result.Top + (Result.Height - gIconsSize) div 2; Result.Left:= Result.Left + CELL_PADDING; Result.Right:= Result.Left + gIconsSize; Result.Bottom:= Result.Bottom + gIconsSize; end; procedure TColumnsFileView.SetRowCount(Count: Integer); begin FUpdatingActiveFile := True; // Remove a fake bottom padding for last row if dgPanel.RowCount > dgPanel.FixedRows then begin dgPanel.RowHeights[dgPanel.RowCount - 1] := dgPanel.DefaultRowHeight; end; dgPanel.RowCount := dgPanel.FixedRows + Count; // Add a fake bottom padding for last row if Count > 0 then begin dgPanel.RowHeights[dgPanel.RowCount - 1] := dgPanel.DefaultRowHeight + CELL_PADDING; end; FUpdatingActiveFile := False; end; procedure TColumnsFileView.SetColumns; var X: Integer; AColumnsFunctions: String; ColumnsClass: TPanelColumnsClass; begin ColumnsClass := GetColumnsClass; dgPanel.Columns.BeginUpdate; try dgPanel.Columns.Clear; AColumnsFunctions:= EmptyStr; for X:= 0 to ColumnsClass.ColumnsCount - 1 do begin with dgPanel.Columns.Add do begin // SizePriority = 0 means don't modify Width with AutoFill. // Last column is always modified if all columns have SizePriority = 0. if (X = 0) and (gAutoSizeColumn = 0) then SizePriority := 1 else SizePriority := 0; Width:= ColumnsClass.GetColumnWidth(X); Title.Caption:= ColumnsClass.GetColumnTitle(X); AColumnsFunctions+= ColumnsClass.GetColumnFuncString(X); end; end; finally dgPanel.Columns.EndUpdate; end; if Assigned(FAllDisplayFiles) then begin // Clear display strings in case columns have changed for X := 0 to FAllDisplayFiles.Count - 1 do begin FAllDisplayFiles[X].DisplayStrings.Clear; end; // Clear variant file properties in case columns have changed if not SameText(FColumnsFunctions, AColumnsFunctions) then begin for X := 0 to FAllDisplayFiles.Count - 1 do begin FAllDisplayFiles[X].FSFile.ClearVariantProperties; end; // Forced to reload variant file properties FSortingProperties := FSortingProperties * fpAll; FilePropertiesNeeded := FilePropertiesNeeded * fpAll; end; end; FColumnsFunctions := AColumnsFunctions; end; procedure TColumnsFileView.MakeVisible(iRow:Integer); var AVisibleRows: TRange; begin with dgPanel do begin AVisibleRows := GetFullVisibleRows; if iRow < AVisibleRows.First then TopRow := iRow; if iRow > AVisibleRows.Last then TopRow := iRow - (AVisibleRows.Last - AVisibleRows.First); end; end; procedure TColumnsFileView.MakeActiveVisible; begin if dgPanel.Row>=0 then MakeVisible(dgPanel.Row); end; procedure TColumnsFileView.UpdateFooterDetails(AInfo: Boolean); var AFile: TFile; AText: String; begin if gColumnsLongInStatus and (FSelectedCount = 0) and (not FlatView) then begin AFile:= CloneActiveFile; if Assigned(AFile) then try if AFile.IsNameValid then begin if gDirBrackets and AFile.IsLinkToDirectory then begin AText := gFolderPrefix + AFile.Name + gFolderPostfix; if Assigned(AFile.LinkProperty) then begin AText += ' -> ' + gFolderPrefix + AFile.LinkProperty.LinkTo + gFolderPostfix; end; end else if AFile.IsLink then begin AText := AFile.Name; if Assigned(AFile.LinkProperty) then begin AText += ' -> ' + AFile.LinkProperty.LinkTo; end; end else if gDirBrackets and AFile.IsDirectory then AText := gFolderPrefix + AFile.Name + gFolderPostfix else begin AText := AFile.Name; end; lblInfo.Caption := AText; end else if not AInfo then begin inherited UpdateInfoPanel; end; finally AFile.Free; end; end; end; procedure TColumnsFileView.SetActiveFile(FileIndex: PtrInt; ScrollTo: Boolean; aLastTopRowIndex: PtrInt = -1); begin if not ScrollTo then dgPanel.SetColRow(dgPanel.Col, FileIndex + dgPanel.FixedRows) else begin dgPanel.Row := FileIndex + dgPanel.FixedRows; if (aLastTopRowIndex <> -1) then dgPanel.TopRow := aLastTopRowIndex; MakeVisible(dgPanel.Row); end; end; procedure TColumnsFileView.dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); begin if dgPanel.IsRowVisible(aRow) then dgPanel.Options := dgPanel.Options + [goDontScrollPartCell]; end; procedure TColumnsFileView.RedrawFile(DisplayFile: TDisplayFile); begin dgPanel.InvalidateRow(PtrInt(DisplayFile.DisplayItem)); end; procedure TColumnsFileView.RedrawFiles; begin dgPanel.Invalidate; end; procedure TColumnsFileView.UpdateColumnsView; var ColumnsClass: TPanelColumnsClass; OldFilePropertiesNeeded: TFilePropertiesTypes; begin // If the ActiveColm set doesn't exist this will retrieve either // the first set or the default set. ColumnsClass := GetColumnsClass; // Set name in case a different set was loaded. ActiveColm := ColumnsClass.Name; SetColumns; SetColumnsSortDirections; dgPanel.FocusRectVisible := ColumnsClass.UseCursorBorder and not ColumnsClass.UseFrameCursor; dgPanel.FocusColor := ColumnsClass.CursorBorderColor; dgPanel.UpdateView; OldFilePropertiesNeeded := FilePropertiesNeeded; FilePropertiesNeeded := GetFilePropertiesNeeded; if FilePropertiesNeeded >= OldFilePropertiesNeeded then begin ReleaseBusy; Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TColumnsFileView.SetColumnSet(const AName: String); begin if ColSet.Items.IndexOf(AName) >= 0 then begin ActiveColm:= AName; if Assigned(ActiveColmSlave) then begin isSlave:= False; FreeAndNil(ActiveColmSlave); end; UpdateColumnsView; RedrawFiles; end; end; procedure TColumnsFileView.ColumnsMenuClick(Sender: TObject); begin Case (Sender as TMenuItem).Tag of 1001: //All columns, but current one will be selected. begin ShowOptions(TfrmOptionsCustomColumns); end; else begin ActiveColm:=ColSet.Items[(Sender as TMenuItem).Tag]; if Assigned(ActiveColmSlave) then begin isSlave:= False; FreeAndNil(ActiveColmSlave); end; UpdateColumnsView; RedrawFiles; end; end; end; constructor TColumnsFileView.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); begin ActiveColm := 'Default'; FOnColumnResized := nil; inherited Create(AOwner, AFileSource, APath, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AFileView, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AFileView: TFileView; AColumnSet: String; AFlags: TFileViewFlags); begin if ColSet.Items.IndexOf(AColumnSet) >= 0 then ActiveColm := AColumnSet; inherited Create(AOwner, AFileView, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; procedure TColumnsFileView.CreateDefault(AOwner: TWinControl); begin DCDebug('TColumnsFileView.Create components'); inherited CreateDefault(AOwner); FFileNameColumn := -1; FExtensionColumn := -1; // -- other components dgPanel:=TDrawGridEx.Create(Self, Self); MainControl := dgPanel; // --- dgPanel.OnHeaderClick:=@dgPanelHeaderClick; dgPanel.OnMouseWheelUp := @dgPanelMouseWheelUp; dgPanel.OnMouseWheelDown := @dgPanelMouseWheelDown; dgPanel.OnSelection:= @dgPanelSelection; dgPanel.OnBeforeSelection:= @dgPanelBeforeSelection; dgPanel.OnTopLeftChanged:= @dgPanelTopLeftChanged; dgpanel.OnResize:= @dgPanelResize; dgPanel.OnHeaderSized:= @dgPanelHeaderSized; pmColumnsMenu := TPopupMenu.Create(Self); pmColumnsMenu.Parent := Self; if Assigned(NotebookPage) then begin FOnColumnResized:= @DoColumnResized; end; end; destructor TColumnsFileView.Destroy; begin inherited Destroy; end; function TColumnsFileView.Clone(NewParent: TWinControl): TColumnsFileView; begin Result := TColumnsFileView.Create(NewParent, Self); end; procedure TColumnsFileView.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TColumnsFileView then with TColumnsFileView(FileView) do begin FColumnsSortDirections := Self.FColumnsSortDirections; ActiveColm := Self.ActiveColm; ActiveColmSlave := nil; isSlave := False; end; end; end; function TColumnsFileView.AddFileSource(aFileSource: IFileSource; aPath: String): Boolean; begin Result:= inherited AddFileSource(aFileSource, aPath); if Result and (not IsLoadingFileList) then begin FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; end; procedure TColumnsFileView.BeforeMakeFileList; begin inherited; if gListFilesInThread then begin // Display info that file list is being loaded. UpdateInfoPanel; end; end; procedure TColumnsFileView.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // reset TCustomGrid state dgPanel.FGridState := gsNormal; end; procedure TColumnsFileView.FileSourceFileListLoaded; begin inherited; FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; procedure TColumnsFileView.DisplayFileListChanged; var ScrollTo: Boolean; begin ScrollTo := IsActiveFileVisible; // Row count updates and Content updates should be grouped in one transaction // otherwise, Grids may have subtle synchronization issues. dgPanel.BeginUpdate; SetRowCount(FFiles.Count); // Update grid row count. SetFilesDisplayItems; RedrawFiles; dgPanel.EndUpdate; if SetActiveFileNow(RequestedActiveFile, True, FLastTopRowIndex) then RequestedActiveFile := '' // Requested file was not found, restore position to last active file. else if not SetActiveFileNow(LastActiveFile, ScrollTo, FLastTopRowIndex) then // Make sure at least that the previously active file is still visible after displaying file list. MakeActiveVisible; Notify([fvnVisibleFilePropertiesChanged]); inherited; end; procedure TColumnsFileView.DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure UpdateWidth(Notebook: TFileViewNotebook); var I: Integer; ColumnsView: TColumnsFileView; begin for I:= 0 to Notebook.PageCount - 1 do begin if Notebook.View[I] is TColumnsFileView then begin ColumnsView:= TColumnsFileView(Notebook.View[I]); if ColumnsView.ActiveColm = ActiveColm then begin ColumnsView.dgPanel.ColWidths[ColumnIndex]:= ColumnNewSize; end; end; end; end; begin if gColumnsAutoSaveWidth then begin GetColumnsClass.SetColumnWidth(ColumnIndex, ColumnNewSize); UpdateWidth(frmMain.LeftTabs); UpdateWidth(frmMain.RightTabs); end; end; procedure TColumnsFileView.MakeColumnsStrings(AFile: TDisplayFile); begin MakeColumnsStrings(AFile, GetColumnsClass); end; procedure TColumnsFileView.MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); var ACol: Integer; begin AFile.DisplayStrings.Clear; for ACol := 0 to ColumnsClass.Count - 1 do begin AFile.DisplayStrings.Add(ColumnsClass.GetColumnItemResultString( ACol, AFile.FSFile, FileSource)); end; end; procedure TColumnsFileView.EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); var ColumnsView: TColumnsFileView; PMsg: PEachViewCallbackMsg; begin if AFileView is TColumnsFileView then begin ColumnsView := TColumnsFileView(AFileView); PMsg := UserData; if ColumnsView.ActiveColm = PMsg^.UpdatedColumnsSetName then begin ColumnsView.ActiveColm := PMsg^.NewColumnsSetName; ColumnsView.UpdateColumnsView; ColumnsView.RedrawFiles; end; end; end; procedure TColumnsFileView.DoUpdateView; begin inherited DoUpdateView; UpdateColumnsView; end; function TColumnsFileView.GetActiveFileIndex: PtrInt; begin Result := dgPanel.Row - dgPanel.FixedRows; end; function TColumnsFileView.GetVisibleFilesIndexes: TRange; begin Result := dgPanel.GetVisibleRows; Dec(Result.First, dgPanel.FixedRows); Dec(Result.Last, dgPanel.FixedRows); end; function TColumnsFileView.GetColumnsClass: TPanelColumnsClass; begin if isSlave then Result := ActiveColmSlave else Result := ColSet.GetColumnSet(ActiveColm); end; function TColumnsFileView.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var bTemp: Boolean; iRow, iCol: LongInt; begin with dgPanel do begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= IfThen(iRow < 0, InvalidFileIndex, iRow - FixedRows); AtFileList := Y >= GetHeaderHeight; end; end; procedure TColumnsFileView.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TColumnsFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var AFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin if IsActiveItemValid then begin InvertFileSelection(GetActiveDisplayFile, False); DoSelectionChanged(dgPanel.Row - dgPanel.FixedRows); end; if dgPanel.Row < dgPanel.RowCount-1 then dgPanel.Row := dgPanel.Row + 1; MakeActiveVisible; end; Key := 0; end; // cursors keys in Lynx like mode VK_LEFT: if (Shift = []) then begin if gLynxLike then ChangePathToParent(True) else dgPanel.ScrollHorizontally(False); Key := 0; end; VK_RIGHT: if (Shift = []) then begin if gLynxLike then ChooseFile(GetActiveDisplayFile, True) else dgPanel.ScrollHorizontally(True); Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then begin if (aFile.FSFile.IsDirectory or aFile.FSFile.IsLinkToDirectory) and not aFile.Selected then begin CalculateSpace(aFile); end; InvertFileSelection(aFile, False); end; if gSpaceMovesDown and (dgPanel.Row + 1 < dgPanel.RowCount) then dgPanel.Row := dgPanel.Row + 1; MakeActiveVisible; DoSelectionChanged(dgPanel.Row - dgPanel.FixedRows); Key := 0; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TColumnsFileView.dgPanelHeaderSized(Sender: TObject; IsColumn: Boolean; index: Integer); begin if IsColumn then if Assigned(FOnColumnResized) then begin FOnColumnResized(Self, index, dgPanel.ColWidths[index]); end; end; procedure TColumnsFileView.CopyFileDetails(AList: TStringList); var I: Integer; AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass; procedure AddFile; var J: Integer; S: String; begin if AFile.FSFile.IsNameValid then begin S:= EmptyStr; if AFile.DisplayStrings.Count = 0 then begin MakeColumnsStrings(AFile, ColumnsClass); end; for J:= 0 to AFile.DisplayStrings.Count - 1 do begin S:= S + AFile.DisplayStrings[J] + #09; end; J:= Length(S); if J > 0 then AList.Add(Copy(S, 1, J - 1)); end; end; begin ColumnsClass:= GetColumnsClass; for I:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[I]; if AFile.Selected then AddFile; end; if AList.Count = 0 then begin AFile:= GetActiveDisplayFile; AddFile; end; end; procedure TColumnsFileView.cm_CopyFileDetailsToClip(const Params: array of string); var sl: TStringList; begin if DisplayFiles.Count > 0 then begin sl:= TStringList.Create; try CopyFileDetails(sl); Clipboard.Clear; // prevent multiple formats in Clipboard ClipboardSetText(TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle)); finally FreeAndNil(sl); end; end; end; procedure TColumnsFileView.cm_SaveFileDetailsToFile(const Params: array of string); var AFileName: String; sl: TStringListEx; begin if DisplayFiles.Count > 0 then begin if Length(Params) > 0 then AFileName:= Params[0] else begin with dmComData do begin SaveDialog.DefaultExt := '.txt'; SaveDialog.Filter := '*.txt|*.txt'; SaveDialog.FileName := EmptyStr; if not SaveDialog.Execute then Exit; AFileName:= SaveDialog.FileName; end; end; if (AFileName <> EmptyStr) then try sl:= TStringListEx.Create; try CopyFileDetails(sl); sl.SaveToFile(AFileName); finally FreeAndNil(sl); end; except on E: Exception do msgError(rsMsgErrSaveFile + '-' + E.Message); end; end; end; { TDrawGridEx } constructor TDrawGridEx.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ColumnsView := AParent as TColumnsFileView; ColumnsOwnDim := @ColumnsView.DimColor; // Workaround for Lazarus issue 18832. // Set Fixed... before setting ...Count. FixedRows := 0; FixedCols := 0; // Override default values to start with no columns and no rows. RowCount := 0; ColCount := 0; DoubleBuffered := True; Align := alClient; Options := [goFixedVertLine, goFixedHorzLine, goTabs, goRowSelect, goColSizing, goThumbTracking, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook]; TitleStyle := gColumnsTitleStyle; TabStop := False; Self.Parent := AParent; UpdateView; end; procedure TDrawGridEx.UpdateView; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; i: Integer; MaxFontHeight: Integer = 0; CurrentHeight: Integer; ColumnsSet: TPanelColumnsClass; begin // Start with height of the icons. if gShowIcons <> sim_none then MaxFontHeight := gIconsSize; // Get columns settings. with (Parent as TColumnsFileView) do begin if not isSlave then ColumnsSet := ColSet.GetColumnSet(ActiveColm) else ColumnsSet := ActiveColmSlave; end; // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; Canvas.Font.PixelsPerInch := NewFont.PixelsPerInch; // Search columns settings for the biggest font (in height). for i := 0 to ColumnsSet.Count - 1 do begin Canvas.Font.Name := ColumnsSet.GetColumnFontName(i); Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(i); Canvas.Font.Size := ColumnsSet.GetColumnFontSize(i); CurrentHeight := Canvas.GetTextHeight('Wg'); MaxFontHeight := Max(MaxFontHeight, CurrentHeight); end; // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); Result := MaxFontHeight + gExtraLineSpan; end; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin OldFont := Canvas.Font; Canvas.Font := Font; SetCanvasFont(GetColumnFont(0, True)); Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; var TabHeaderHeight: Integer; TempRowHeight: Integer; begin Flat := gInterfaceFlat; AutoFillColumns:= gAutoFillColumns; GridVertLine:= gGridVertLine; GridHorzLine:= gGridHorzLine; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then DefaultRowHeight := TempRowHeight; // Set rows of header. if gTabHeader then begin if RowCount < 1 then RowCount := 1; FixedRows := 1; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; RowHeights[0] := TabHeaderHeight; end else begin if FixedRows > 0 then begin // First reduce number of rows so that the 0'th row, which will be changed // to not-fixed, won't be counted as a row having a file. if RowCount > 1 then begin RowCount := RowCount - 1; FixedRows := 0; end else begin FixedRows := 0; RowCount := 0; end; end; end; FixedCols := 0; // Set column number to zero, must be called after fixed columns change MoveExtend(False, 0, Row); end; procedure TDrawGridEx.InitializeWnd; begin inherited InitializeWnd; ColumnsView.InitializeDragDropEx(Self); end; procedure TDrawGridEx.FinalizeWnd; begin ColumnsView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; procedure TDrawGridEx.DrawColumnText(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var SortingDirection: TSortDirection; TextStyle: TTextStyle; begin SortingDirection := ColumnsView.FColumnsSortDirections[ACol]; if SortingDirection <> sdNone then begin PixMapManager.DrawBitmap( PixMapManager.GetIconBySortingDirection(SortingDirection), Canvas, aRect.Left, aRect.Top + (RowHeights[aRow] - gIconsSize) div 2); aRect.Left += gIconsSize; end; if gColumnsTitleLikeValues then begin TextStyle := Canvas.TextStyle; TextStyle.Alignment := ColumnsView.GetColumnsClass.GetColumnAlign(ACol); Canvas.TextStyle := TextStyle; end; DrawCellText(aCol, aRow, aRect, aState, GetColumnTitle(aCol)); end; function TDrawGridEx.GetFullVisibleRows: TRange; begin Result.First := GCache.FullVisibleGrid.Top; Result.Last := GCache.FullVisibleGrid.Bottom; end; procedure TDrawGridEx.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; ColumnsSet: TPanelColumnsClass; //------------------------------------------------------ // begin subprocedures //------------------------------------------------------ procedure DrawFixed; //------------------------------------------------------ var TextStyle: TTextStyle; begin SetCanvasFont(GetColumnFont(aCol, True)); Canvas.Brush.Color := GetColumnColor(ACol, True); TextStyle := Canvas.TextStyle; TextStyle.Layout := tlCenter; Canvas.TextStyle := TextStyle; DefaultDrawCell(aCol, aRow, aRect, aState); end; // of DrawHeader //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; begin if (gShowIcons <> sim_none) then begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // center icon vertically Y := aRect.Top + (aRect.Height - gIconsSize) div 2; if gShowHiddenDimmed and AFile.FSFile.IsHidden then PixMapManager.DrawBitmapAlpha(IconID, Canvas, aRect.Left + CELL_PADDING, Y ) else // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, aRect.Left + CELL_PADDING, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + CELL_PADDING, Y ); end; end; s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin Y:= (aRect.Width) - 2*CELL_PADDING; if (gShowIcons <> sim_none) then Y:= Y - gIconsSize - 2; s:= FitFileName(s, Canvas, AFile.FSFile, Y); end; if (gShowIcons <> sim_none) then Canvas.TextOut(aRect.Left + CELL_PADDING + gIconsSize + 2, iTextTop, s) else Canvas.TextOut(aRect.Left + CELL_PADDING, iTextTop, s); end; //of DrawIconCell //------------------------------------------------------ procedure DrawOtherCell; //------------------------------------------------------ var tw, vTextLeft: Integer; begin s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then s := FitOtherCellText(s, Canvas, ARect.Width - 2*CELL_PADDING); case ColumnsSet.GetColumnAlign(ACol) of taRightJustify: begin tw := Canvas.TextWidth(s); vTextLeft := aRect.Right - tw - CELL_PADDING; if aCol = ColCount - 1 then Dec(vTextLeft, CELL_PADDING); Canvas.TextOut(vTextLeft, iTextTop, s); end; taLeftJustify: begin Canvas.TextOut(aRect.Left + CELL_PADDING, iTextTop, s); end; taCenter: begin tw := Canvas.TextWidth(s); Canvas.TextOut((aRect.Left + aRect.Right - tw) div 2, iTextTop, s); end; end; //of case end; //of DrawOtherCell //------------------------------------------------------ procedure PrepareColors; //------------------------------------------------------ var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; //--------------------- begin Canvas.Font.Name := ColumnsSet.GetColumnFontName(ACol); Canvas.Font.Size := ColumnsSet.GetColumnFontSize(ACol); Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(ACol); Canvas.Font.Quality := ColumnsSet.GetColumnFontQuality(ACol); IsCursor := (gdSelected in aState) and ColumnsView.Active and (not ColumnsSet.UseFrameCursor); IsCursorInactive := (gdSelected in aState) and (not ColumnsView.Active) and (not ColumnsSet.UseFrameCursor); // Set up default background color first. if IsCursor then BackgroundColor := ColumnsSet.GetColumnCursorColor(ACol) else begin if IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol) then BackgroundColor := ColumnsSet.GetColumnInactiveCursorColor(ACol) else // Alternate rows background color. if odd(ARow) then BackgroundColor := ColumnsSet.GetColumnBackground(ACol) else BackgroundColor := ColumnsSet.GetColumnBackground2(ACol); end; // Set text color. if ColumnsSet.GetColumnOvercolor(ACol) then TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := ColumnsSet.GetColumnTextColor(ACol); if AFile.Selected then begin if ColumnsSet.GetColumnUseInvertedSelection(ACol) then begin //------------------------------------------------------ if IsCursor OR (IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then begin TextColor := InvertColor(ColorToRGB(ColumnsSet.GetColumnCursorText(ACol))); end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then BackgroundColor := ColumnsSet.GetColumnMarkColor(ACol) else BackgroundColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); TextColor := ColumnsSet.GetColumnBackground(ACol); end; //------------------------------------------------------ end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then TextColor := ColumnsSet.GetColumnMarkColor(ACol) else TextColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); end; end else if IsCursor then begin TextColor := ColumnsSet.GetColumnCursorText(ACol); end; BackgroundColor := ColumnsOwnDim(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin if ColorIsLight(BackgroundColor) then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct) end else begin TextColor := DarkColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := DarkColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; end; // Draw background. Canvas.Brush.Color := BackgroundColor; Canvas.FillRect(aRect); Canvas.Font.Color := TextColor; Canvas.Brush.Style := bsClear; end;// of PrepareColors; procedure DrawLines; var delta:integer; begin // Draw frame cursor. Canvas.Pen.Width := ColumnsSet.GetColumnBorderFrameWidth(ACol); if Canvas.Pen.Width<=1 then begin delta:=0; end else begin if odd(Canvas.Pen.Width) then delta:=Canvas.Pen.Width shr 1 else delta:=(Canvas.Pen.Width shr 1)+1; end; if ColumnsSet.UseFrameCursor and (gdSelected in aState) and (ColumnsView.Active OR ColumnsSet.GetColumnUseInactiveSelColor(Acol)) then begin if ColumnsView.Active then Canvas.Pen.Color := ColumnsSet.GetColumnCursorColor(ACol) else Canvas.Pen.Color := ColumnsSet.GetColumnInactiveCursorColor(ACol); if ACol=0 then begin Canvas.Line(aRect.Left + 1, aRect.Top + delta , aRect.Right , aRect.Top + delta ); Canvas.Line(aRect.Left + 1, aRect.Bottom - 1 - delta, aRect.Right, aRect.Bottom - 1 - delta); Canvas.Line(aRect.Left + delta, aRect.Top + delta , aRect.Left + delta, aRect.Bottom - delta - 1); end else if ACol sim_none) then CellWidth := CellWidth + gIconsSize + 2; ColAlign := ColumnsSet.GetColumnAlign(ACell.Col); if (ColAlign = taLeftJustify) or (ACell.Col = 0) then begin ACell.LeftBound := ACell.Rect.Left; ACell.RightBound := ACell.LeftBound + CellWidth; end else if ColAlign = taRightJustify then begin ACell.RightBound := ACell.Rect.Right; ACell.LeftBound := ACell.RightBound - CellWidth; end else begin ACell.LeftBound := (ACell.Rect.Left + ACell.Rect.Right - CellWidth) div 2; if (ACell.Rect.Left <= ACell.LeftBound) or (not gCutTextToColWidth) then ACell.RightBound := ACell.LeftBound + CellWidth else begin ACell.LeftBound := ACell.Rect.Left; ACell.RightBound := ACell.Rect.Right; end; end; end; procedure FindNextCell(ACurrentCol, ADirection: Integer; out ACell: TCell); var C: Integer; begin C := ACurrentCol + ADirection; while (C >= 0) and (C < ColCount) do begin if (AFile.DisplayStrings[C] <> '') and (ColWidths[C] <> 0) then begin ACell.Col := C; ACell.Rect := CellRect(C, aRow); GetCellBounds(ACell); Exit; end; C := C + ADirection; end; ACell.Col := -1; end; procedure ReconcileBounds(var LCell, RCell: TCell); var LeftEdge: Integer absolute LCell.RightBound; RightEdge: Integer absolute RCell.LeftBound; LeftColEdge: Integer absolute LCell.Rect.Right; begin if (LeftEdge <= RightEdge) or (not gCutTextToColWidth) then Exit; if (RightEdge < LeftColEdge) and (LeftColEdge < LeftEdge) then begin LeftEdge := LeftColEdge; RightEdge := LeftColEdge; end else if LeftEdge <= LeftColEdge then RightEdge := LeftEdge else LeftEdge := RightEdge; end; procedure DrawCell(const ACell: TCell); begin aCol := ACell.Col; aRect.Left := ACell.LeftBound; aRect.Right := ACell.RightBound; if aCol = 0 then DrawIconCell else DrawOtherCell; end; var CCell, LCell, RCell: TCell; begin CCell.Col := aCol; CCell.Rect := aRect; FindNextCell(CCell.Col, -1, LCell); FindNextCell(CCell.Col, +1, RCell); if AFile.DisplayStrings[CCell.Col] = '' then begin if (LCell.Col <> -1) and (RCell.Col <> -1) then ReconcileBounds(LCell, RCell); if (LCell.Col <> -1) and (CCell.Rect.Left < LCell.RightBound) then DrawCell(LCell); if (RCell.Col <> -1) and (RCell.LeftBound < CCell.Rect.Right) then DrawCell(RCell); end else begin GetCellBounds(CCell); if LCell.Col <> -1 then begin ReconcileBounds(LCell, CCell); if CCell.Rect.Left < LCell.RightBound then DrawCell(LCell); end; if RCell.Col <> -1 then begin ReconcileBounds(CCell, RCell); if RCell.LeftBound < CCell.Rect.Right then DrawCell(RCell); end; DrawCell(CCell); end; aCol := CCell.Col; aRect := CCell.Rect; end; //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin ColumnsSet := ColumnsView.GetColumnsClass; if gdFixed in aState then begin DrawFixed; // Draw column headers if TitleStyle <> tsNative then DrawCellGrid(aCol, aRow, aRect, aState); end else if ColumnsView.IsFileIndexInRange(ARow - FixedRows) then begin // remove fake padding from last row if aRow = RowCount - 1 then Dec(aRect.Bottom, CELL_PADDING); AFile := ColumnsView.FFiles[ARow - FixedRows]; // substract fixed rows (header) FileSourceDirectAccess := fspDirectAccess in ColumnsView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then ColumnsView.MakeColumnsStrings(AFile, ColumnsSet); PrepareColors; iTextTop := aRect.Top + (aRect.Height - Canvas.TextHeight('Wg')) div 2; if gExtendCellWidth then DrawExtendedCells else begin if ACol = 0 then DrawIconCell // Draw icon in the first column else DrawOtherCell; end; DrawCellGrid(aCol,aRow,aRect,aState); DrawLines; // brush fake padding for last row if aRow = RowCount - 1 then begin Canvas.Brush.Color := Self.Color; aRect.Top := aRect.Bottom; Inc(aRect.Bottom, CELL_PADDING); Canvas.FillRect(aRect); end; end else begin Canvas.Brush.Color := Self.Color; Canvas.FillRect(aRect); end; end; procedure TDrawGridEx.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust layout end; procedure TDrawGridEx.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I : Integer; Point: TPoint; MI: TMenuItem; FileSystem: String; Background: Boolean; begin if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseUp event is sent just after doubleclick, so if we drop // doubleclick events we have to also drop MouseUp events that follow them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} // Handle only if button-up was not lifted to finish drag&drop operation. if not ColumnsView.FMainControlMouseDown then Exit; inherited MouseUp(Button, Shift, X, Y); ColumnsView.FMainControlMouseDown := False; if ColumnsView.Demo then Exit; if Button = mbRight then begin { If right click on header } if (Y >= 0) and (Y < GetHeaderHeight) then begin //Load Columns into menu ColumnsView.pmColumnsMenu.Items.Clear; if ColSet.Items.Count>0 then begin if Pos('wfx://', ColumnsView.CurrentAddress) = 1 then FileSystem:= Copy(ColumnsView.CurrentAddress, 7, MaxInt) else begin FileSystem:= FS_GENERAL; end; // Current file system specific columns set for I:= 0 to ColSet.Items.Count - 1 do begin if SameText(FileSystem, ColSet.GetColumnSet(I).FileSystem) then begin MI:= TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Tag:= I; MI.Caption:= ColSet.Items[I]; MI.Checked:= (ColSet.Items[I] = ColumnsView.ActiveColm); MI.OnClick:= @ColumnsView.ColumnsMenuClick; ColumnsView.pmColumnsMenu.Items.Add(MI); end; end; if not SameText(FileSystem, FS_GENERAL) then begin //- if ColumnsView.pmColumnsMenu.Items.Count > 0 then begin MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Caption:='-'; ColumnsView.pmColumnsMenu.Items.Add(MI); end; // General columns set for I:= 0 to ColSet.Items.Count - 1 do begin if SameText(FS_GENERAL, ColSet.GetColumnSet(I).FileSystem) then begin MI:= TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Tag:= I; MI.Caption:= ColSet.Items[I]; MI.Checked:= (ColSet.Items[I] = ColumnsView.ActiveColm); MI.OnClick:= @ColumnsView.ColumnsMenuClick; ColumnsView.pmColumnsMenu.Items.Add(MI); end; end; end; end; //- I:= ColumnsView.pmColumnsMenu.Items.Count - 1; if (I >= 0) and (ColumnsView.pmColumnsMenu.Items[I].Caption <> '-') then begin MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Caption:='-'; ColumnsView.pmColumnsMenu.Items.Add(MI); end; //Configure custom columns MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Tag:=1001; MI.Caption:=rsMenuConfigureCustomColumns; MI.OnClick:=@ColumnsView.ColumnsMenuClick; ColumnsView.pmColumnsMenu.Items.Add(MI); Point:=ClientToScreen(Classes.Point(0,0)); Point.Y:=Point.Y+GetHeaderHeight; Point.X:=Point.X+X-50; ColumnsView.pmColumnsMenu.PopUp(Point.X,Point.Y); end { If right click on file/directory } else if ((gMouseSelectionButton<>1) or not gMouseSelectionEnabled) then begin Background:= not MouseOnGrid(X, Y); Point := ClientToScreen(Classes.Point(X, Y)); frmMain.Commands.DoContextMenu(ColumnsView, Point.x, Point.y, Background); end else if (gMouseSelectionEnabled and (gMouseSelectionButton = 1)) then begin ColumnsView.tmContextMenu.Enabled:= False; // stop context menu timer end; end { Open folder in new tab on middle click } else if (Button = mbMiddle) and (Y > GetHeaderHeight) and MouseOnGrid(X, Y) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TDrawGridEx.DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin inherited DragOver(Source, X, Y, State, Accept); DoMouseMoveScroll(X, Y); end; procedure TDrawGridEx.MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin FLastMouseMoveTime := 0; FLastMouseScrollTime := 0; if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseDown event is sent just before doubleclick, so if we drop // doubleclick events we have to also drop MouseDown events that precede them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} FMouseDownY := Y; ColumnsView.FMainControlMouseDown := True; AllowOutboundEvents := False; inherited MouseDown(Button, Shift, X, Y); AllowOutboundEvents := True; if not Focused then begin if CanSetFocus then SetFocus; end; end; procedure TDrawGridEx.MouseMove(Shift: TShiftState; X, Y: Integer); begin AllowOutboundEvents := False; inherited MouseMove(Shift, X, Y); AllowOutboundEvents := True; if ColumnsView.IsMouseSelecting then DoMouseMoveScroll(X, Y); end; function TDrawGridEx.MouseOnGrid(X, Y: LongInt): Boolean; var bTemp: Boolean; iRow, iCol: LongInt; begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= not ((iCol < 0) and (iRow < 0)); end; function TDrawGridEx.GetHeaderHeight: Integer; var i : Integer; begin Result := 0; for i := 0 to FixedRows-1 do Result := Result + RowHeights[i]; if Flat and (BorderStyle = bsSingle) then // TCustomGrid.GetBorderWidth Result := Result + 1; end; function TDrawGridEx.GetGridHorzLine: Boolean; begin Result := goHorzLine in Options; end; function TDrawGridEx.GetGridVertLine: Boolean; begin Result := goVertLine in Options; end; procedure TDrawGridEx.SetGridHorzLine(const AValue: Boolean); begin if AValue then Options := Options + [goHorzLine] else Options := Options - [goHorzLine]; end; procedure TDrawGridEx.SetGridVertLine(const AValue: Boolean); begin if AValue then Options := Options + [goVertLine] else Options := Options - [goVertLine]; end; function TDrawGridEx.GetVisibleRows: TRange; var w: Integer; rc: Integer; begin if (TopRow<0)or(csLoading in ComponentState) then begin Result.First := 0; Result.Last := -1; Exit; end; // visible TopLeft Cell Result.First:=TopRow; Result.Last:=Result.First; rc := RowCount; // Top Margin of next visible Row and Bottom most visible cell if rc>FixedRows then begin w:=RowHeights[Result.First] + GCache.FixedHeight - GCache.TLRowOff; while (Result.Last ClientHeight - DefaultRowHeight) and (Y - 1 > FMouseDownY) then AEvent := SB_LINEDOWN else begin ColumnsView.tmMouseScroll.Enabled := False; Exit; end; if (FLastMouseMoveTime = 0) then FLastMouseMoveTime := TickCount else if (FLastMouseScrollTime = 0) then FLastMouseScrollTime := TickCount else if (TickCount - FLastMouseMoveTime > 200) and (TickCount - FLastMouseScrollTime > 50) then begin Scroll(AEvent); FLastMouseScrollTime := GetTickCount64; ColumnsView.tmMouseScroll.Enabled := True; if (AEvent = SB_LINEDOWN) then FMouseDownY := -1; end; end; procedure TDrawGridEx.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; begin if ColumnsView.IsLoadingFileList then begin ColumnsView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. ColumnsView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_UP, VK_DOWN]) and (ssShift in Shift) then ColumnsView.InvertActiveFile; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then begin if ((Row = RowCount-1) and (Key = VK_DOWN)) or ((Row = FixedRows) and (Key = VK_UP)) then Key := 0; end; {$ENDIF} inherited KeyDown(Key, Shift); if (ColumnsView.FRangeSelecting) and (Row >= FixedRows) then ColumnsView.Selection(SavedKey, Row - FixedRows); end; function TDrawGridEx.DoMouseWheelHorz(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; begin Result:= AutoFillColumns; if not Result then begin MouseWheelOption:= mwGrid; Result:= inherited DoMouseWheelHorz(Shift, WheelDelta, MousePos); MouseWheelOption:= mwCursor; end; end; procedure TDrawGridEx.ScrollHorizontally(ForwardDirection: Boolean); function TryMove(ACol: Integer): Boolean; begin Result := not IscellVisible(ACol, Row); if Result then MoveExtend(False, ACol, Row); end; var i: Integer; begin if ForwardDirection then begin for i := Col + 1 to ColCount - 1 do if TryMove(i) then Break; end else begin for i := Col - 1 downto 0 do if TryMove(i) then Break; end; end; end. doublecmd-1.1.30/src/fileviews/ubrieffileview.pas0000644000175000001440000004402615104114162021073 0ustar alexxusersunit uBriefFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, LMessages, Grids, Graphics, uDisplayFile, DCXmlConfig, uTypes, uFileViewWithGrid, uFile, uFileSource, uFileProperty; type TBriefFileView = class; { TBriefDrawGrid } TBriefDrawGrid = class(TFileViewGrid) protected FBriefView: TBriefFileView; protected procedure UpdateView; override; procedure CalculateColRowCount; override; procedure CalculateColumnWidth; override; procedure DoMouseMoveScroll(X, Y: Integer); protected procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override; procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); override; public constructor Create(AOwner: TComponent; AParent: TWinControl); override; function CellToIndex(ACol, ARow: Integer): Integer; override; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; end; { TBriefFileView } TBriefFileView = class (TFileViewWithGrid) protected procedure CreateDefault(AOwner: TWinControl); override; function GetFileViewGridClass: TFileViewGridClass; override; procedure ShowRenameFileEdit(var aFile: TFile); override; procedure UpdateRenameFileEditPosition; override; function GetVisibleFilesIndexes: TRange; override; function GetIconRect(FileIndex: PtrInt): TRect; override; procedure MouseScrollTimer(Sender: TObject); override; procedure DoFileRenamed(ADisplayFile: TDisplayFile); override; procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; public function Clone(NewParent: TWinControl): TBriefFileView; override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; end; implementation uses LCLIntf, LCLType, LCLVersion, LCLProc, Math, StdCtrls, uGlobs, uPixmapManager, uKeyboard, fMain, uFileSourceProperty, uOrderedFileView; const CELL_PADDING = 1; { TBriefDrawGrid } procedure TBriefDrawGrid.UpdateView; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; MaxFontHeight: Integer = 0; CurrentHeight: Integer; begin // Start with height of the icons. if gShowIcons <> sim_none then MaxFontHeight := gIconsSize; // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; Canvas.Font.PixelsPerInch := NewFont.PixelsPerInch; // Search columns settings for the biggest font (in height). Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Style := gFonts[dcfMain].Style; Canvas.Font.Size := gFonts[dcfMain].Size; CurrentHeight := Canvas.GetTextHeight('Wg'); MaxFontHeight := Max(MaxFontHeight, CurrentHeight); // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); Result := MaxFontHeight + gExtraLineSpan; end; var TempRowHeight: Integer; begin // Fix border blinking while scroll window Flat := True; // gInterfaceFlat; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then DefaultRowHeight := TempRowHeight; // Calculate column width CalculateColumnWidth; end; procedure TBriefDrawGrid.CalculateColRowCount; var ARowCount: Integer; AIndex, ACol, ARow: Integer; begin if (csDesigning in ComponentState) then Exit; if not Assigned(FBriefView.FFiles) then Exit; if (ClientHeight > 0) and (DefaultRowHeight > 0) then begin // Save active file index AIndex:= CellToIndex(Col, Row); ARowCount := (ClientHeight - BorderWidth * 2) div DefaultRowHeight; if ARowCount > 0 then begin RowCount := ARowCount; ColCount := (FBriefView.FFiles.Count + ARowCount - 1) div ARowCount; // Restore active file index if AIndex >= 0 then begin IndexToCell(AIndex, ACol, ARow); MoveExtend(False, ACol, ARow); end; end; end; Invalidate; end; procedure TBriefDrawGrid.CalculateColumnWidth; var I, J, M: Integer; ARefresh: Boolean; AFile: TDisplayFile; begin if not Assigned(FBriefView.FFiles) or (FBriefView.FFiles.Count = 0) then Exit; if gBriefViewMode = bvmFixedWidth then DefaultColWidth:= Min(ClientWidth, gBriefViewFixedWidth) else if gBriefViewMode = bvmFixedCount then DefaultColWidth:= ClientWidth div Max(1, gBriefViewFixedCount) else if (FBriefView.FFiles.Count = 1) and (FBriefView.FFiles[0].FSFile.Name = '..') then DefaultColWidth:= ClientWidth div 3 else begin J:= 0; M:= 0; ARefresh:= (Canvas.Font.Name <> gFonts[dcfMain].Name) or (Canvas.Font.Size <> gFonts[dcfMain].Size) or (Canvas.Font.Style <> gFonts[dcfMain].Style); FontOptionsToFont(gFonts[dcfMain], Canvas.Font); for I:= 0 to FBriefView.FFiles.Count - 1 do begin AFile:= FBriefView.FFiles[I]; if ARefresh or (AFile.Tag <= 0) then begin AFile.Tag:= Canvas.TextWidth(AFile.FSFile.Name); end; if AFile.Tag > M then begin M:= AFile.Tag; J:= I; end; end; M:= Canvas.TextWidth(FBriefView.FFiles[J].FSFile.Name + 'WWW'); if (gShowIcons = sim_none) then M:= M + 2 else M:= M + gIconsSize + 4; if M > ClientWidth then M:= ClientWidth - 4; DefaultColWidth:= M; end; end; procedure TBriefDrawGrid.DoMouseMoveScroll(X, Y: Integer); var TickCount: QWord; AEvent: SmallInt; begin TickCount := GetTickCount64; if X < 25 then AEvent := SB_LINEUP else if X > ClientWidth - 25 then AEvent := SB_LINEDOWN else begin FBriefView.tmMouseScroll.Enabled := False; Exit; end; if (FLastMouseMoveTime = 0) then FLastMouseMoveTime := TickCount else if (FLastMouseScrollTime = 0) then FLastMouseScrollTime := TickCount else if (TickCount - FLastMouseMoveTime > 200) and (TickCount - FLastMouseScrollTime > 50) then begin Scroll(LM_HSCROLL, AEvent); FLastMouseScrollTime := GetTickCount64; FBriefView.tmMouseScroll.Enabled := True; end; end; function TBriefDrawGrid.CellToIndex(ACol, ARow: Integer): Integer; begin if (ARow < 0) or (ARow >= RowCount) or (ACol < 0) or (ACol >= ColCount) then Exit(-1); Result:= ACol * RowCount + ARow; if (Result < 0) or (Result >= FBriefView.FFiles.Count) then Result:= -1; end; procedure TBriefDrawGrid.IndexToCell(Index: Integer; out ACol, ARow: Integer); begin if (Index < 0) or (Index >= FBriefView.FFiles.Count) or (RowCount = 0) then begin ACol:= -1; ARow:= -1; end else begin ACol:= Index div RowCount; ARow:= Index mod RowCount; end; end; procedure TBriefDrawGrid.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; FileIndex: Integer; ACol, ARow: Integer; begin if FBriefView.IsLoadingFileList then begin FBriefView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. FBriefView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_LEFT, VK_RIGHT, VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_UP, VK_DOWN]) and (ssShift in Shift) then FBriefView.InvertActiveFile; case Key of VK_LEFT: begin if (Col - 1 < 0) then begin MoveExtend(False, 0, 0); Key:= 0; end; end; VK_RIGHT: begin if (CellToIndex(Col + 1, Row) < 0) then begin IndexToCell(FBriefView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; end; VK_PRIOR: begin FileIndex:= CellToIndex(Col, Row) - (VisibleRowCount - 1); if FileIndex < 0 then FileIndex:= 0; IndexToCell(FileIndex, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_NEXT: begin FileIndex:= CellToIndex(Col, Row) + (VisibleRowCount - 1); if FileIndex >= FBriefView.FFiles.Count then FileIndex:= FBriefView.FFiles.Count - 1; IndexToCell(FileIndex, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_HOME: begin MoveExtend(False, 0, 0); Key:= 0; end; VK_END: begin IndexToCell(FBriefView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_UP, VK_DOWN: begin if (CellToIndex(Col, Row) >= FBriefView.FFiles.Count - 1) and (Key = VK_DOWN) then begin Key:= 0; end else if ((Row = RowCount-1) and (Key = VK_DOWN)) then begin if (Col < ColCount - 1) then begin Row:= 0; Col:= Col + 1; end; Key:= 0; end else if (Row = FixedRows) and (Key = VK_UP) then begin if (Col > 0) then begin Row:= RowCount - 1; Col:= Col - 1; end; Key:= 0; end; end; end; inherited KeyDown(Key, Shift); if FBriefView.FRangeSelecting then begin FileIndex := CellToIndex(Col, Row); if FileIndex <> InvalidFileIndex then FBriefView.Selection(SavedKey, FileIndex); end; end; procedure TBriefDrawGrid.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited MouseMove(Shift, X, Y); if FBriefView.IsMouseSelecting then DoMouseMoveScroll(X, Y); end; function TBriefDrawGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; begin if not FBriefView.IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size > gFonts[dcfMain].MinValue) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size-1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Result:=True; Exit; end; Result:= inherited DoMouseWheelDown(Shift, MousePos); Result:= Perform(LM_HSCROLL, SB_LINERIGHT, 0) = 0; end else Result := True; // Handled end; function TBriefDrawGrid.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; begin if not FBriefView.IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size < gFonts[dcfMain].MaxValue) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Result:=True; Exit; end; Result:= inherited DoMouseWheelUp(Shift, MousePos); Result:= Perform(LM_HSCROLL, SB_LINELEFT, 0) = 0; end else Result := True; // Handled end; procedure TBriefDrawGrid.DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin inherited DragOver(Source, X, Y, State, Accept); DoMouseMoveScroll(X, Y); end; constructor TBriefDrawGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FBriefView:= AParent as TBriefFileView; inherited Create(AOwner, AParent); // Fix vertical bar flash ScrollBars := ssAutoHorizontal; end; procedure TBriefDrawGrid.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Idx: Integer; //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; begin if (gShowIcons <> sim_none) then begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // center icon vertically Y:= aRect.Top + (RowHeights[ARow] - gIconsSize) div 2; if gShowHiddenDimmed and AFile.FSFile.IsHidden then PixMapManager.DrawBitmapAlpha(IconID, Canvas, aRect.Left + CELL_PADDING, Y ) else // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, aRect.Left + CELL_PADDING, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + 1, Y ); end; end; // Print filename with align Y:= (DefaultColWidth - 2 - Canvas.TextWidth('I')); if (gShowIcons <> sim_none) then Y:= Y - gIconsSize - 2; if (not gBriefViewFileExtAligned) or (AFile.FSFile.Extension = '') then begin s:= AFile.DisplayStrings[0]; s:= FitFileName(s, Canvas, AFile.FSFile, Y); end else begin // Right align extention print s:= AFile.FSFile.Extension; Canvas.TextOut(aRect.Left + DefaultColWidth - Canvas.TextWidth(s + 'I'), iTextTop, s); s:= AFile.FSFile.NameNoExt; s:= FitFileName(s, Canvas, AFile.FSFile, Y - Canvas.TextWidth(AFile.FSFile.Extension + 'I')); end; if (gShowIcons <> sim_none) then Canvas.TextOut(aRect.Left + gIconsSize + 4, iTextTop, s) else Canvas.TextOut(aRect.Left + 2, iTextTop, s); end; //of DrawIconCell //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin Idx:= CellToIndex(aCol, aRow); if (Idx >= 0) and (FBriefView.FFiles.Count > 0) then begin AFile:= FBriefView.FFiles[Idx]; FileSourceDirectAccess:= fspDirectAccess in FBriefView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then FBriefView.MakeColumnsStrings(AFile); PrepareColors(aFile, aCol, aRow, aRect, aState); iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')) div 2; DrawIconCell; end else begin // Draw background. Canvas.Brush.Color := FBriefView.DimColor(gColors.FilePanel^.BackColor); Canvas.FillRect(aRect); end; DrawCellGrid(aCol, aRow, aRect, aState); DrawLines(Idx, aCol, aRow, aRect, aState); end; { TBriefFileView } procedure TBriefFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); tmMouseScroll.Interval := 350; // Changing height of a FileView with horizontal scrolling when hiding quick search causes file jumps under mouse quickSearch.LimitedAutoHide := True; end; function TBriefFileView.GetFileViewGridClass: TFileViewGridClass; begin Result:= TBriefDrawGrid; end; procedure TBriefFileView.ShowRenameFileEdit(var aFile: TFile); begin if not edtRename.Visible then begin edtRename.Font.Name := gFonts[dcfMain].Name; edtRename.Font.Size := gFonts[dcfMain].Size; edtRename.Font.Style := gFonts[dcfMain].Style; dgPanel.LeftCol:= dgPanel.Col; UpdateRenameFileEditPosition; end; inherited ShowRenameFileEdit(AFile); end; procedure TBriefFileView.UpdateRenameFileEditPosition; var ARect: TRect; begin inherited UpdateRenameFileEditPosition; ARect := dgPanel.CellRect(dgPanel.Col, dgPanel.Row); Dec(ARect.Top, 2); Inc(ARect.Bottom, 2); if gShowIcons <> sim_none then Inc(ARect.Left, gIconsSize + 2); if gInplaceRenameButton and (ARect.Right + edtRename.ButtonWidth < dgPanel.ClientWidth) then Inc(ARect.Right, edtRename.ButtonWidth); edtRename.SetBounds(ARect.Left, ARect.Top, ARect.Right - ARect.Left, ARect.Bottom - ARect.Top); end; function TBriefFileView.GetVisibleFilesIndexes: TRange; begin with dgPanel do begin if (TopRow < 0) or (csLoading in ComponentState) then begin Result.First:= 0; Result.Last:= -1; end else begin Result.First:= (LeftCol * VisibleRowCount - 1); Result.Last:= (LeftCol + VisibleColCount + 1) * VisibleRowCount - 1; if Result.First < 0 then Result.First:= 0; if Result.Last >= FFiles.Count then Result.Last:= FFiles.Count - 1; end; end; end; function TBriefFileView.GetIconRect(FileIndex: PtrInt): TRect; var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); Result := dgPanel.CellRect(ACol, ARow); Result.Top:= Result.Top + (dgPanel.RowHeights[ARow] - gIconsSize) div 2; Result.Left:= Result.Left + CELL_PADDING; Result.Right:= Result.Left + gIconsSize; Result.Bottom:= Result.Bottom + gIconsSize; end; procedure TBriefFileView.MouseScrollTimer(Sender: TObject); var APoint: TPoint; begin if DragManager.IsDragging or IsMouseSelecting then begin APoint := dgPanel.ScreenToClient(Mouse.CursorPos); TBriefDrawGrid(dgPanel).DoMouseMoveScroll(APoint.X, APoint.Y); end; end; procedure TBriefFileView.DoFileRenamed(ADisplayFile: TDisplayFile); begin ADisplayFile.Tag:= -1; end; procedure TBriefFileView.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin inherited DoFileUpdated(AFile, UpdatedProperties); AFile.Tag:= -1; end; function TBriefFileView.Clone(NewParent: TWinControl): TBriefFileView; begin Result := TBriefFileView.Create(NewParent, Self); end; procedure TBriefFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'brief'); end; end. doublecmd-1.1.30/src/filesources/0000755000175000001440000000000015104114162015677 5ustar alexxusersdoublecmd-1.1.30/src/filesources/winnet/0000755000175000001440000000000015104114162017203 5ustar alexxusersdoublecmd-1.1.30/src/filesources/winnet/wsl/0000755000175000001440000000000015104114162020010 5ustar alexxusersdoublecmd-1.1.30/src/filesources/winnet/wsl/uwsllistoperation.pas0000644000175000001440000000437515104114162024335 0ustar alexxusersunit uWslListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSystemListOperation, uWinNetFileSource, uFileSource; type { TWslListOperation } TWslListOperation = class(TFileSystemListOperation) private FWinNetFileSource: IWinNetFileSource; private procedure LinuxEnum; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LazUTF8, uFile, Windows, uShowMsg, DCOSUtils, uMyWindows, ShlObj, ComObj, ActiveX, DCConvertEncoding, uShellFolder, uShlObjAdditional; procedure TWslListOperation.LinuxEnum; var AFile: TFile; pchEaten: ULONG; APath: UnicodeString; NumIDs: LongWord = 0; AFolder: IShellFolder; dwAttributes: ULONG = 0; EnumIDList: IEnumIDList; DesktopFolder: IShellFolder; PIDL, NetworkPIDL: PItemIDList; begin try OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); APath:= CeUtf8ToUtf16(ExcludeTrailingPathDelimiter(Path)); OleCheckUTF8(DeskTopFolder.ParseDisplayName(0, nil, PWideChar(APath), pchEaten, NetworkPIDL, dwAttributes)); try OleCheckUTF8(DesktopFolder.BindToObject(NetworkPIDL, nil, IID_IShellFolder, Pointer(AFolder))); OleCheckUTF8(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); aFile.Attributes:= FILE_ATTRIBUTE_DIRECTORY; AFile.FullPath:= GetDisplayName(AFolder, PIDL, SHGDN_FORPARSING or SHGDN_FORADDRESSBAR); FFiles.Add(AFile); finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(NetworkPIDL); end; except on E: Exception do msgError(Thread, E.Message); end; end; constructor TWslListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWinNetFileSource := aFileSource as IWinNetFileSource; inherited Create(aFileSource, aPath); end; procedure TWslListOperation.MainExecute; begin FFiles.Clear; with FWinNetFileSource do begin if IsNetworkPath(Path) then LinuxEnum else begin inherited MainExecute; end; end; end; end. doublecmd-1.1.30/src/filesources/winnet/wsl/uwslfilesource.pas0000644000175000001440000000432215104114162023571 0ustar alexxusersunit uWslFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, uFileSource, uFileSourceOperation, uWinNetFileSource; type { TWslFileSource } TWslFileSource = class(TWinNetFileSource) public function GetParentDir(sPath : String): String; override; function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; class function Available: Boolean; class function IsSupportedPath(const Path: String): Boolean; override; class function GetMainIcon(out Path: String): Boolean; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; end; implementation uses LazUTF8, DCOSUtils, DCStrUtils, uMyWindows, uWslListOperation; { TWslFileSource } function TWslFileSource.GetParentDir(sPath: String): String; begin Result:= DCStrUtils.GetParentDir(sPath); end; function TWslFileSource.IsPathAtRoot(Path: String): Boolean; begin Path:= IncludeTrailingBackslash(LowerCase(Path)); Result:= SameStr(Path, '\\wsl$\') or SameStr(Path, '\\wsl.localhost\'); end; function TWslFileSource.GetRootDir(sPath: String): String; begin if (Win32BuildNumber >= 22000) then Result:= '\\wsl.localhost\' else begin Result:= '\\wsl$\'; end; end; function TWslFileSource.GetRootDir: String; begin Result:= GetRootDir(EmptyStr); end; class function TWslFileSource.Available: Boolean; begin Result:= GetServiceStatus('LxssManager') <> 0; end; class function TWslFileSource.IsSupportedPath(const Path: String): Boolean; var APath: String; begin APath:= IncludeTrailingBackslash(LowerCase(Path)); Result:= StrBegins(APath, '\\wsl$\') or StrBegins(APath, '\\wsl.localhost\'); end; class function TWslFileSource.GetMainIcon(out Path: String): Boolean; begin if IsWow64 then Path:= '%SystemRoot%\Sysnative\wsl.exe' else begin Path:= '%SystemRoot%\System32\wsl.exe'; end; Result:= True; end; function TWslFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWslListOperation.Create(TargetFileSource, TargetPath); end; end. doublecmd-1.1.30/src/filesources/winnet/uwinnetlistoperation.pas0000644000175000001440000001650515104114162024225 0ustar alexxusersunit uWinNetListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSystemListOperation, uWinNetFileSource, uFileSource; type { TWinNetListOperation } TWinNetListOperation = class(TFileSystemListOperation) private FWinNetFileSource: IWinNetFileSource; private procedure ShareEnum; procedure ShellEnum; procedure WorkgroupEnum; function Connect: Boolean; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LazUTF8, uFile, Windows, JwaWinNetWk, JwaLmCons, JwaLmShare, JwaLmApiBuf, StrUtils, DCStrUtils, uShowMsg, DCOSUtils, uOSUtils, uNetworkThread, uMyWindows, ActiveX, ShlObj, ComObj, DCConvertEncoding, uShellFolder, uShlObjAdditional; function TWinNetListOperation.Connect: Boolean; var dwResult: DWORD; ServerPath: UnicodeString; AbortMethod: TThreadMethod; begin if GetCurrentThreadId = MainThreadID then AbortMethod:= nil else begin AbortMethod:= @CheckOperationState; end; if FWinNetFileSource.IsNetworkPath(Path) then ServerPath:= CeUtf8ToUtf16(ExcludeTrailingPathDelimiter(Path)) else begin dwResult:= NPos(PathDelim, Path, 4); if dwResult = 0 then dwResult:= MaxInt; ServerPath:= CeUtf8ToUtf16(Copy(Path, 1, dwResult - 1)); end; dwResult:= TNetworkThread.Connect(nil, PWideChar(ServerPath), RESOURCETYPE_ANY, AbortMethod); if dwResult <> NO_ERROR then begin if dwResult = ERROR_CANCELLED then RaiseAbortOperation; msgError(Thread, mbWinNetErrorMessage(dwResult)); Exit(False); end; Result:= True; end; procedure TWinNetListOperation.WorkgroupEnum; var I: DWORD; aFile: TFile; nFile: TNetResourceW; nFileList: PNetResourceW; dwResult: DWORD; dwCount, dwBufferSize: DWORD; hEnum: THandle = INVALID_HANDLE_VALUE; lpBuffer: Pointer = nil; FilePath: String; FileName: UnicodeString; begin with FWinNetFileSource do try ZeroMemory(@nFile, SizeOf(TNetResourceW)); nFile.dwScope:= RESOURCE_GLOBALNET; nFile.dwType:= RESOURCETYPE_ANY; nFile.lpProvider:= PWideChar(ProviderName); if not IsPathAtRoot(Path) then begin FilePath:= ExcludeTrailingPathDelimiter(Path); FileName:= CeUtf8ToUtf16(ExcludeFrontPathDelimiter(FilePath)); nFile.lpRemoteName:= PWideChar(FileName); end; dwResult := WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @nFile, hEnum); if (dwResult <> NO_ERROR) then Exit; dwCount := DWORD(-1); // 1024 Kb must be enough dwBufferSize:= $100000; // Allocate output buffer GetMem(lpBuffer, dwBufferSize); // Enumerate all resources dwResult:= WNetEnumResourceW(hEnum, dwCount, lpBuffer, dwBufferSize); if dwResult = ERROR_NO_MORE_ITEMS then Exit; if (dwResult <> NO_ERROR) then Exit; nFileList:= PNetResourceW(lpBuffer); for I := 0 to dwCount - 1 do begin CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); aFile.FullPath:= UTF16ToUTF8(UnicodeString(nFileList^.lpRemoteName)); aFile.CommentProperty.Value:= UTF16ToUTF8(UnicodeString(nFileList^.lpComment)); if nFileList^.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE then aFile.Attributes:= faFolder; FFiles.Add(aFile); Inc(nFileList); end; finally if (hEnum <> INVALID_HANDLE_VALUE) then dwResult := WNetCloseEnum(hEnum); if (dwResult <> NO_ERROR) and (dwResult <> ERROR_NO_MORE_ITEMS) then msgError(Thread, mbWinNetErrorMessage(dwResult)); if Assigned(lpBuffer) then FreeMem(lpBuffer); end; end; procedure TWinNetListOperation.ShareEnum; var I: DWORD; aFile: TFile; dwResult: NET_API_STATUS; dwEntriesRead: DWORD = 0; dwTotalEntries: DWORD = 0; ServerPath: UnicodeString; BufPtr, nFileList: PShareInfo1; begin if not Connect then Exit; ServerPath:= CeUtf8ToUtf16(ExcludeTrailingPathDelimiter(Path)); BufPtr:= nil; repeat // Call the NetShareEnum function dwResult:= NetShareEnum (PWideChar(ServerPath), 1, PByte(BufPtr), MAX_PREFERRED_LENGTH, @dwEntriesRead, @dwTotalEntries, nil); // If the call succeeds if (dwResult = ERROR_SUCCESS) or (dwResult = ERROR_MORE_DATA) then begin nFileList:= BufPtr; // Loop through the entries for I:= 1 to dwEntriesRead do begin CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); aFile.Name:= UTF16ToUTF8(UnicodeString(nFileList^.shi1_netname)); aFile.CommentProperty.Value:= UTF16ToUTF8(UnicodeString(nFileList^.shi1_remark)); case (nFileList^.shi1_type and $FF) of STYPE_DISKTREE: aFile.Attributes:= FILE_ATTRIBUTE_DIRECTORY; STYPE_IPC: aFile.Attributes:= FILE_ATTRIBUTE_SYSTEM; end; // Mark special items as hidden if (nFileList^.shi1_type and STYPE_SPECIAL = STYPE_SPECIAL) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; // Mark special items as hidden if (lstrcmpiW(nFileList^.shi1_netname, 'FAX$') = 0) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; // Mark special items as hidden if (lstrcmpiW(nFileList^.shi1_netname, 'PRINT$') = 0) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; FFiles.Add(aFile); Inc(nFileList); end; // Free the allocated buffer NetApiBufferFree(BufPtr); end; // Continue to call NetShareEnum while there are more entries until (dwResult <> ERROR_MORE_DATA); // Show error if failed if (dwResult <> ERROR_SUCCESS) then msgError(Thread, mbSysErrorMessage(dwResult)); end; procedure TWinNetListOperation.ShellEnum; var AFile: TFile; NumIDs: LongWord = 0; AFolder: IShellFolder; EnumIDList: IEnumIDList; DesktopFolder: IShellFolder; PIDL, NetworkPIDL: PItemIDList; begin try OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(0, CSIDL_NETWORK, 0, 0, {%H-}NetworkPIDL)); try OleCheckUTF8(DesktopFolder.BindToObject(NetworkPIDL, nil, IID_IShellFolder, Pointer(AFolder))); OleCheckUTF8(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); AFile.FullPath:= GetDisplayName(AFolder, PIDL, SHGDN_FORPARSING or SHGDN_FORADDRESSBAR); FFiles.Add(AFile); finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(NetworkPIDL); end; except on E: Exception do msgError(Thread, E.Message); end; end; constructor TWinNetListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWinNetFileSource := aFileSource as IWinNetFileSource; inherited Create(aFileSource, aPath); end; procedure TWinNetListOperation.MainExecute; begin FFiles.Clear; with FWinNetFileSource do begin // Shared directory if not IsNetworkPath(Path) then begin if Connect then inherited MainExecute; end else begin // Workstation/Server if (IsPathAtRoot(Path) = False) and (Pos('\\', Path) = 1) then ShareEnum // Root/Domain/Workgroup else if not Samba1 then ShellEnum else WorkgroupEnum; end; end; end; end. doublecmd-1.1.30/src/filesources/winnet/uwinnetfilesource.pas0000644000175000001440000002635315104114162023473 0ustar alexxusersunit uWinNetFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, uFileSourceProperty, uVirtualFileSource, uFileSystemFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile; type { IWinNetFileSource } IWinNetFileSource = interface(IVirtualFileSource) ['{55329161-3CFC-4F15-B66D-6649B42E9357}'] function GetSamba1: Boolean; function GetProviderName: UnicodeString; function IsNetworkPath(const Path: String): Boolean; property Samba1: Boolean read GetSamba1; property ProviderName: UnicodeString read GetProviderName; end; { TWinNetFileSource } TWinNetFileSource = class(TFileSystemFileSource, IWinNetFileSource) private FSamba1: Boolean; FProviderName: array[0..MAX_PATH-1] of WideChar; function GetProviderName: UnicodeString; function GetSamba1: Boolean; protected function IsNetworkPath(const Path: String): Boolean; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public constructor Create; override; class function IsSupportedPath(const Path: String): Boolean; override; class function GetMainIcon(out Path: String): Boolean; override; function GetParentDir(sPath : String): String; override; function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; override; function CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; end; implementation uses LazUTF8, uWinNetListOperation, uWinNetExecuteOperation, uMyWindows, Windows, JwaWinNetWk, uVfsModule, uShowMsg, DCOSUtils, DCStrUtils, DCConvertEncoding; function TWinNetFileSource.GetParentDir(sPath: String): String; var nFile: TNetResourceW; lpBuffer: array [0..4095] of Byte; ParentPath: TNetResourceW absolute lpBuffer; dwBufferSize: DWORD; dwResult: DWORD; FilePath: UnicodeString; begin Result:= GetRootDir; if Pos('\\', sPath) = 1 then begin if not FSamba1 then begin if IsNetworkPath(sPath) then Result:= ExcludeFrontPathDelimiter(DCStrUtils.GetParentDir(sPath)) else begin Result:= DCStrUtils.GetParentDir(sPath); end; Exit; end; FilePath:= CeUtf8ToUtf16(ExcludeTrailingPathDelimiter(sPath)); FillByte(nFile, SizeOf(TNetResourceW), 0); with nFile do begin dwScope := RESOURCE_GLOBALNET; dwType := RESOURCETYPE_DISK; dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; dwUsage := RESOURCEUSAGE_CONTAINER; lpRemoteName := PWideChar(FilePath); lpProvider := @FProviderName; end; dwBufferSize:= SizeOf(lpBuffer); dwResult := WNetGetResourceParentW(nFile, @lpBuffer, dwBufferSize); if dwResult <> NO_ERROR then msgError(mbWinNetErrorMessage(GetLastError)) else begin FilePath:= UnicodeString(ParentPath.lpRemoteName); Result := IncludeFrontPathDelimiter(UTF16ToUTF8(FilePath)); Result := IncludeTrailingPathDelimiter(Result); end; end; end; function TWinNetFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (DCStrUtils.GetParentDir(Path) = ''); end; function TWinNetFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim; end; function TWinNetFileSource.GetRootDir: String; begin Result:= PathDelim; end; function TWinNetFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize: Int64): Boolean; begin if IsNetworkPath(Path) then Result:= False else Result:= inherited GetFreeSpace(Path, FreeSize, TotalSize); end; function TWinNetFileSource.GetProperties: TFileSourceProperties; begin Result := inherited GetProperties + [fspVirtual] - [fspNoneParent]; end; function TWinNetFileSource.GetProviderName: UnicodeString; begin Result:= UnicodeString(FProviderName); end; function TWinNetFileSource.GetSamba1: Boolean; begin Result:= FSamba1; end; function TWinNetFileSource.IsNetworkPath(const Path: String): Boolean; begin Result:= (NumCountChars(PathDelim, ExcludeTrailingPathDelimiter(Path)) < 3); end; function TWinNetFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin if IsNetworkPath(NewDir) then Result:= True else Result:= mbSetCurrentDir(NewDir); end; constructor TWinNetFileSource.Create; var dwBufferSize: DWORD = MAX_PATH; begin inherited Create; if WNetGetProviderNameW(WNNC_NET_LANMAN, @FProviderName, dwBufferSize) <> NO_ERROR then raise EOSError.Create(mbWinNetErrorMessage(GetLastError)); FSamba1:= (Win32MajorVersion < 6) or ((Win32MajorVersion < 10) and (GetServiceStatus('mrxsmb10') = SERVICE_RUNNING)); end; class function TWinNetFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= (Pos('\\', Path) = 1); end; class function TWinNetFileSource.GetMainIcon(out Path: String): Boolean; begin Result:= True; Path:= '%SystemRoot%\System32\shell32.dll,17'; end; function TWinNetFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWinNetListOperation.Create(TargetFileSource, TargetPath); end; function TWinNetFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(TargetPath) then Result:= nil else Result:= inherited CreateCopyOperation(SourceFiles, TargetPath); end; function TWinNetFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(TargetPath) then Result:= nil else Result:=inherited CreateCopyInOperation(SourceFileSource, SourceFiles, TargetPath); end; function TWinNetFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateCopyOutOperation(TargetFileSource, SourceFiles, TargetPath); end; function TWinNetFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateMoveOperation(SourceFiles, TargetPath); end; function TWinNetFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin if IsNetworkPath(FilesToDelete.Path) then Result:= nil else Result:= inherited CreateDeleteOperation(FilesToDelete); end; function TWinNetFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin if IsNetworkPath(FilesToWipe.Path) then Result:= nil else Result:= inherited CreateWipeOperation(FilesToWipe); end; function TWinNetFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; begin if IsNetworkPath(aSourceFile.Path) then Result:= nil else Result:= inherited CreateSplitOperation(aSourceFile, aTargetPath); end; function TWinNetFileSource.CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateCombineOperation(SourceFiles, aTargetFile); end; function TWinNetFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; begin if IsNetworkPath(BasePath) then Result:= nil else Result:= inherited CreateCreateDirectoryOperation(BasePath, DirectoryPath); end; function TWinNetFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; if IsNetworkPath(BasePath) then Result:= TWinNetExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb) else Result:= inherited CreateExecuteOperation(ExecutableFile, BasePath, Verb); end; function TWinNetFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin if IsNetworkPath(theFiles.Path) then Result:= nil else Result:= inherited CreateCalcChecksumOperation(theFiles, aTargetPath, aTargetMask); end; function TWinNetFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin if (NumCountChars(PathDelim, ExcludeTrailingPathDelimiter(theFiles.Path)) < 2) then Result:= nil else Result:= inherited CreateCalcStatisticsOperation(theFiles); end; function TWinNetFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties ): TFileSourceOperation; begin if IsNetworkPath(theTargetFiles.Path) then Result:= nil else Result:= inherited CreateSetFilePropertyOperation(theTargetFiles, theNewProperties); end; end. doublecmd-1.1.30/src/filesources/winnet/uwinnetexecuteoperation.pas0000644000175000001440000000526215104114162024712 0ustar alexxusersunit uWinNetExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uWinNetFileSource, uFileSourceExecuteOperation; type { TWinNetExecuteOperation } TWinNetExecuteOperation = class(TFileSourceExecuteOperation) private FWinNetFileSource: IWinNetFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure MainExecute; override; end; implementation uses Windows, JwaWinNetWk, DCStrUtils, DCOSUtils, DCConvertEncoding; constructor TWinNetExecuteOperation.Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWinNetFileSource := aTargetFileSource as IWinNetFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWinNetExecuteOperation.MainExecute; var nFile: TNetResourceW; lpBuffer: array [0..4095] of Byte; ResInfo: TNetResourceW absolute lpBuffer; pszSystem: PWideChar; dwBufferSize: DWORD; dwResult: DWORD; FileName: WideString; begin FExecuteOperationResult:= fseorError; FResultString:= IncludeFrontPathDelimiter(ExecutableFile.FullPath); // Workstation/Server if Pos('\\', FResultString) = 1 then begin FileName:= CeUtf8ToUtf16(FResultString); with FWinNetFileSource do try dwBufferSize:= SizeOf(lpBuffer); FillChar(nFile, SizeOf(TNetResource), #0); nFile.dwScope:= RESOURCE_GLOBALNET; nFile.dwType:= RESOURCETYPE_ANY; nFile.lpRemoteName:= PWideChar(FileName); nFile.lpProvider:= PWideChar(ProviderName); dwResult:= WNetAddConnection2W(nFile, nil, nil, CONNECT_INTERACTIVE); if (dwResult <> NO_ERROR) then Exit; dwResult:= WNetGetResourceInformationW(nFile, @lpBuffer, dwBufferSize, pszSystem); if (dwResult <> NO_ERROR) then Exit; if (ResInfo.dwType = RESOURCETYPE_PRINT) then begin if (ShellExecuteW(0, 'open', ResInfo.lpRemoteName, nil, nil, SW_SHOW) > 32) then FExecuteOperationResult:= fseorSuccess; Exit; end; finally if (dwResult <> NO_ERROR) then FResultString:= mbSysErrorMessage(dwResult); end; end; FExecuteOperationResult:= fseorSymLink; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/0000755000175000001440000000000015104114162017722 5ustar alexxusersdoublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginutil.pas0000644000175000001440000005167015104114162023546 0ustar alexxusersunit uWfxPluginUtil; {$mode objfpc}{$H+} {$if FPC_FULLVERSION >= 30300} {$modeswitch arraytodynarray} {$endif} interface uses Classes, SysUtils, LCLProc, DCOSUtils, uLog, uGlobs, WfxPlugin, uWfxModule, uFile, uFileSource, uFileSourceOperation, uFileSourceTreeBuilder, uFileSourceOperationOptions, uFileSourceOperationUI, uFileSourceCopyOperation, uWfxPluginFileSource; type TWfxPluginOperationHelperMode = (wpohmCopy, wpohmCopyIn, wpohmCopyOut, wpohmMove); TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; { TWfxTreeBuilder } TWfxTreeBuilder = class(TFileSourceTreeBuilder) private FWfxModule: TWfxModule; protected procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); override; procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); override; public property WfxModule: TWfxModule read FWfxModule write FWfxModule; end; { TWfxPluginOperationHelper } TWfxPluginOperationHelper = class private FRootDir: TFile; FWfxPluginFileSource: IWfxPluginFileSource; FOperationThread: TThread; FMode: TWfxPluginOperationHelperMode; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FLogCaption: String; FRenamingFiles, FRenamingRootDir, FInternal: Boolean; FStatistics: PFileSourceCopyOperationStatistics; FCopyAttributesOptions: TCopyAttributesOptions; FFileExistsOption: TFileSourceOperationOptionFileExists; FCurrentFile: TFile; FCurrentTargetFile: TFile; FCurrentTargetFilePath: String; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; ShowCompareFilesUI: TShowCompareFilesUIFunction; ShowCompareFilesUIByFileObject: TShowCompareFilesUIByFileObjectFunction; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Integer; function ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; function ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; function ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function FileExists(aFile: TFile; AbsoluteTargetFileName: String; AllowResume: Boolean): TFileSourceOperationOptionFileExists; procedure CopyProperties(SourceFile: TFile; const TargetFileName: String); procedure CountStatistics(aNode: TFileTreeNode); public constructor Create(FileSource: IFileSource; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; ShowCompareFilesUIByFileObjectFunction: TShowCompareFilesUIByFileObjectFunction; OperationThread: TThread; Mode: TWfxPluginOperationHelperMode; TargetPath: String ); destructor Destroy; override; procedure Initialize; procedure ProcessTree(aFileTree: TFileTree; var Statistics: TFileSourceCopyOperationStatistics); property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property RenameMask: String read FRenameMask write FRenameMask; end; function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: String): Boolean; function WfxFileTimeToDateTime(FileTime : TWfxFileTime) : TDateTime; inline; function DateTimeToWfxFileTime(DateTime : TDateTime) : TWfxFileTime; inline; function RepairPluginName(const AName: String): String; implementation uses uDCUtils, uFileProcs, StrUtils, DCStrUtils, uLng, uFileSystemUtil, uFileProperty, DCDateTimeUtils, DCBasicTypes, DCFileAttributes; function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: String): Boolean; var ASize: Int64; RemoteInfo: TRemoteInfo; begin with aFileSource do begin with RemoteInfo do begin ASize := aFile.Size; Attr := LongInt(aFile.Attributes); SizeLow := LongInt(Int64Rec(ASize).Lo); SizeHigh := LongInt(Int64Rec(ASize).Hi); LastWriteTime := DateTimeToWfxFileTime(aFile.ModificationTime); end; Result := (WfxCopyMove(aFile.Path + aFile.Name, aFile.Path + NewFileName, FS_COPYFLAGS_MOVE, @RemoteInfo, True, True) = FS_FILE_OK); end; end; function WfxFileTimeToDateTime(FileTime: TWfxFileTime): TDateTime; const NULL_DATE_TIME = TDateTime(2958466.0); begin if (FileTime.dwLowDateTime = $FFFFFFFE) and (FileTime.dwHighDateTime = $FFFFFFFF) then Result:= NULL_DATE_TIME else if (TWinFileTime(FileTime) = 0) then Result:= NULL_DATE_TIME else Result:= WinFileTimeToDateTime(TWinFileTime(FileTime)); end; function DateTimeToWfxFileTime(DateTime: TDateTime): TWfxFileTime; begin if (DateTime <= SysUtils.MaxDateTime) then Result:= TWfxFileTime(DateTimeToWinFileTime(DateTime)) else begin Result.dwLowDateTime:= $FFFFFFFE; Result.dwHighDateTime:= $FFFFFFFF; end; end; function RepairPluginName(const AName: String): String; var Index: Integer; DenySym: set of AnsiChar = ['\', '/', ':']; begin Result:= AName; for Index:= 1 to Length(Result) do begin if Result[Index] in DenySym then begin Result[Index]:= '_'; end; end; end; { TWfxTreeBuilder } procedure TWfxTreeBuilder.AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); begin // Add as normal file/directory if aFile.AttributesProperty is TNtfsFileAttributesProperty then aFile.Attributes:= aFile.Attributes and (not FILE_ATTRIBUTE_REPARSE_POINT) else aFile.Attributes:= aFile.Attributes and (not S_IFLNK); if not aFile.IsLinkToDirectory then AddFile(aFile, CurrentNode) else begin if aFile.AttributesProperty is TNtfsFileAttributesProperty then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_DIRECTORY else begin aFile.Attributes:= aFile.Attributes or S_IFDIR; end; AddDirectory(aFile, CurrentNode); end; end; procedure TWfxTreeBuilder.AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); var FindData: TWfxFindData; Handle: THandle; aFile: TFile; begin with FWfxModule do begin Handle := WfxFindFirst(srcPath, FindData); if Handle = wfxInvalidHandle then Exit; repeat if (FindData.FileName = '.') or (FindData.FileName = '..') then Continue; aFile:= TWfxPluginFileSource.CreateFile(srcPath, FindData); AddItem(aFile, CurrentNode); until not WfxFindNext(Handle, FindData); FsFindClose(Handle); end; end; { TWfxPluginOperationHelper } procedure TWfxPluginOperationHelper.ShowError(sMessage: String); begin if gSkipFileOpError then begin if log_errors in gLogOptions then logWrite(FOperationThread, sMessage, lmtError, True); end else begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin AbortOperation; end; end; end; procedure TWfxPluginOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperationThread, sMessage, logMsgType); end; end; function TWfxPluginOperationHelper.ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Integer; var aFile: TFile; TargetName: String; ProcessedOk: Integer; CurrentFileIndex: Integer; CurrentSubNode: TFileTreeNode; begin Result := FS_FILE_OK; for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do begin CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex]; aFile := CurrentSubNode.TheFile; if FRenamingRootDir and (aFile = FRootDir) then TargetName := FRenameMask else if FRenamingFiles then TargetName := ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask) else TargetName := aFile.Name; if FMode <> wpohmCopyOut then TargetName := CurrentTargetPath + TargetName else begin TargetName := CurrentTargetPath + ReplaceInvalidChars(TargetName); end; with FStatistics^ do begin CurrentFileFrom := aFile.FullPath; CurrentFileTo := TargetName; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics^); if aFile.IsLink then ProcessedOk := ProcessLink(CurrentSubNode, TargetName) else if aFile.IsDirectory then ProcessedOk := ProcessDirectory(CurrentSubNode, TargetName) else ProcessedOk := ProcessFile(CurrentSubNode, TargetName); if ProcessedOk <> FS_FILE_OK then Result := ProcessedOk; if ProcessedOk = FS_FILE_USERABORT then AbortOperation(); if ProcessedOk = FS_FILE_OK then CopyProperties(aFile, TargetName); if ProcessedOk = FS_FILE_OK then begin LogMessage(Format(rsMsgLogSuccess+FLogCaption, [aFile.FullPath + ' -> ' + TargetName]), [log_vfs_op], lmtSuccess); end else begin ShowError(Format(rsMsgLogError + FLogCaption, [aFile.FullPath + ' -> ' + TargetName + ' - ' + GetErrorMsg(ProcessedOk)])); LogMessage(Format(rsMsgLogError+FLogCaption, [aFile.FullPath + ' -> ' + TargetName]), [log_vfs_op], lmtError); end; CheckOperationState; end; end; function TWfxPluginOperationHelper.ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; begin // Create target directory if (FMode <> wpohmCopyOut) then Result:= FWfxPluginFileSource.WfxModule.WfxMkDir('', AbsoluteTargetFileName) else begin if mbForceDirectory(AbsoluteTargetFileName) then Result:= FS_FILE_OK else Result:= WFX_ERROR; end; if Result = FS_FILE_OK then begin // Copy/Move all files inside. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end else begin // Error - all files inside not copied/moved. ShowError(rsMsgLogError + Format(rsMsgErrForceDir, [AbsoluteTargetFileName])); CountStatistics(aNode); end; if (Result = FS_FILE_OK) and (FMode = wpohmMove) then FWfxPluginFileSource.WfxModule.WfxRemoveDir(aNode.TheFile.FullPath); end; function TWfxPluginOperationHelper.ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; var aSubNode: TFileTreeNode; begin if (FMode = wpohmMove) then Result := ProcessFile(aNode, AbsoluteTargetFileName) else if aNode.SubNodesCount > 0 then begin aSubNode := aNode.SubNodes[0]; if aSubNode.TheFile.AttributesProperty.IsDirectory then Result := ProcessDirectory(aSubNode, AbsoluteTargetFileName) else Result := ProcessFile(aSubNode, AbsoluteTargetFileName); end; end; function TWfxPluginOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Integer; var iFlags: Integer = 0; RemoteInfo: TRemoteInfo; iTemp: TInt64Rec; bCopyMoveIn: Boolean; aFile: TFile; OldDoneBytes: Int64; // for if there was an error begin // If there will be an error the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics^.DoneBytes; aFile:= aNode.TheFile; with FWfxPluginFileSource do begin with RemoteInfo do begin iTemp.Value := aFile.Size; SizeLow := LongInt(iTemp.Low); SizeHigh := LongInt(iTemp.High); LastWriteTime := DateTimeToWfxFileTime(aFile.ModificationTime); Attr := LongInt(aFile.Attributes); end; if (FMode = wpohmMove) then iFlags:= iFlags + FS_COPYFLAGS_MOVE; if FFileExistsOption = fsoofeOverwrite then iFlags:= iFlags + FS_COPYFLAGS_OVERWRITE; bCopyMoveIn:= (FMode = wpohmCopyIn); Result := WfxCopyMove(aFile.Path + aFile.Name, AbsoluteTargetFileName, iFlags, @RemoteInfo, FInternal, bCopyMoveIn); case Result of FS_FILE_EXISTS, // The file already exists, and resume isn't supported FS_FILE_EXISTSRESUMEALLOWED: // The file already exists, and resume is supported begin case FileExists(aFile, AbsoluteTargetFileName, Result = FS_FILE_EXISTSRESUMEALLOWED) of fsoofeSkip: Exit(FS_FILE_OK); fsoofeOverwrite: iFlags:= iFlags + FS_COPYFLAGS_OVERWRITE; fsoofeResume: iFlags:= iFlags + FS_COPYFLAGS_RESUME; else raise Exception.Create('Invalid file exists option'); end; Result := WfxCopyMove(aFile.Path + aFile.Name, AbsoluteTargetFileName, iFlags, @RemoteInfo, FInternal, bCopyMoveIn); end; end; end; with FStatistics^ do begin if Result = FS_FILE_OK then DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(FStatistics^); end; end; procedure TWfxPluginOperationHelper.QuestionActionHandler( Action: TFileSourceOperationUIAction); begin if Action = fsouaCompare then begin if Assigned(FCurrentTargetFile) then ShowCompareFilesUIByFileObject(FCurrentFile, FCurrentTargetFile) else ShowCompareFilesUI(FCurrentFile, FCurrentTargetFilePath); end; end; function FileExistsMessage(TargetFile: TFile; SourceFile: TFile): String; begin Result:= rsMsgFileExistsOverwrite + LineEnding + TargetFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [IntToStrTS(TargetFile.Size), DateTimeToStr(TargetFile.ModificationTime)]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + SourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [IntToStrTS(SourceFile.Size), DateTimeToStr(SourceFile.ModificationTime)]); end; function TWfxPluginOperationHelper.FileExists(aFile: TFile; AbsoluteTargetFileName: String; AllowResume: Boolean ): TFileSourceOperationOptionFileExists; const Responses: array[0..6] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourResume, fsourOverwriteAll, fsourSkipAll, fsouaCompare, fsourCancel); ResponsesNoResume: array[0..5] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteAll, fsourSkipAll, fsouaCompare, fsourCancel); var Message: String; PossibleResponses: TFileSourceOperationUIResponses; begin case FFileExistsOption of fsoofeNone: try FCurrentTargetFile := nil; case AllowResume of True : PossibleResponses := Responses; False: PossibleResponses := ResponsesNoResume; end; if FMode = wpohmCopyOut then Message := uFileSystemUtil.FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime) else if FWfxPluginFileSource.FillSingleFile(AbsoluteTargetFileName, FCurrentTargetFile) then Message := FileExistsMessage(FCurrentTargetFile, aFile) else Message := Format(rsMsgFileExistsRwrt, [AbsoluteTargetFileName]); FCurrentFile := aFile; FCurrentTargetFilePath := AbsoluteTargetFileName; case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourResume: begin // FFileExistsOption := fsoofeResume; - for ResumeAll Result := fsoofeResume; end; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourNone, fsourCancel: AbortOperation; end; finally FreeAndNil(FCurrentTargetFile); end; else Result := FFileExistsOption; end; end; procedure TWfxPluginOperationHelper.CopyProperties(SourceFile: TFile; const TargetFileName: String); var WfxFileTime: TWfxFileTime; begin if caoCopyTime in FCopyAttributesOptions then begin if (FMode = wpohmCopyOut) then begin if SourceFile.ModificationTimeProperty.IsValid then mbFileSetTime(TargetFileName, DateTimeToFileTime(SourceFile.ModificationTime)); end else begin WfxFileTime := DateTimeToWfxFileTime(SourceFile.ModificationTime); FWfxPluginFileSource.WfxModule.WfxSetTime(TargetFileName, nil, nil, @WfxFileTime); end; end; end; procedure TWfxPluginOperationHelper.CountStatistics(aNode: TFileTreeNode); procedure CountNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics^ do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do CountNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then DoneFiles := DoneFiles + 1 else // Count target of link. CountNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aNode.TheFile.Size; end; end; end; begin CountNodeStatistics(aNode); UpdateStatistics(FStatistics^); end; constructor TWfxPluginOperationHelper.Create(FileSource: IFileSource; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; ShowCompareFilesUIByFileObjectFunction: TShowCompareFilesUIByFileObjectFunction; OperationThread: TThread; Mode: TWfxPluginOperationHelperMode; TargetPath: String ); begin FWfxPluginFileSource:= FileSource as IWfxPluginFileSource; AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; ShowCompareFilesUI := ShowCompareFilesUIFunction; ShowCompareFilesUIByFileObject := ShowCompareFilesUIByFileObjectFunction; FOperationThread:= OperationThread; FMode := Mode; FInternal:= (FMode in [wpohmCopy, wpohmMove]); FFileExistsOption := fsoofeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FRenamingFiles := False; FRenamingRootDir := False; inherited Create; end; destructor TWfxPluginOperationHelper.Destroy; begin inherited Destroy; end; procedure TWfxPluginOperationHelper.Initialize; begin case FMode of wpohmCopy, wpohmCopyIn, wpohmCopyOut: FLogCaption := rsMsgLogCopy; wpohmMove: FLogCaption := rsMsgLogMove; end; SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); end; procedure TWfxPluginOperationHelper.ProcessTree(aFileTree: TFileTree; var Statistics: TFileSourceCopyOperationStatistics); var aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFileTree.SubNodesCount = 1) and FRenamingFiles then begin aFile := aFileTree.SubNodes[0].TheFile; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; FRootDir := aFile; end; end; FStatistics:= @Statistics; ProcessNode(aFileTree, FRootTargetPath); end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginsetfilepropertyoperation.pas0000644000175000001440000001552515104114162027751 0ustar alexxusersunit uWfxPluginSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFile, uFileProperty, uWfxPluginFileSource; type TWfxPluginSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCFileAttributes, Forms, DCBasicTypes, DCStrUtils, WfxPlugin, uWfxPluginUtil, DCDateTimeUtils; constructor TWfxPluginSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; end; destructor TWfxPluginSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; end; procedure TWfxPluginSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(TargetFiles.Path, FS_STATUS_START, FS_STATUS_OP_ATTRIB); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles:= FFullFilesTree.Count; end else begin FWfxPluginFileSource.FillAndCount(TargetFiles, True, False, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TWfxPluginSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(CurrentFileIndex, aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; procedure TWfxPluginSetFilePropertyOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(TargetFiles.Path, FS_STATUS_END, FS_STATUS_OP_ATTRIB); end; function TWfxPluginSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; var AFileName: String; ftTime: TWfxFileTime; NewAttributes: TFileAttrs; begin Result := sfprSuccess; case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin if not WfxRenameFile(FWfxPluginFileSource, aFile, (aTemplateProperty as TFileNameProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin NewAttributes := (aTemplateProperty as TFileAttributesProperty).Value; AFileName := aFile.FullPath; with FWfxPluginFileSource.WfxModule do if aTemplateProperty is TNtfsFileAttributesProperty then begin if not WfxSetAttr(AFileName, NewAttributes) then Result := sfprError; end else if aTemplateProperty is TUnixFileAttributesProperty then begin if WfxExecuteFile(Application.MainForm.Tag, AFileName, 'chmod' + #32 + DecToOct(NewAttributes AND (not S_IFMT))) <> FS_EXEC_OK then Result := sfprError; end else raise Exception.Create('Unsupported file attributes type'); end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, nil, nil, @ftTime) then Result := sfprError; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, @ftTime, nil, nil) then Result := sfprError; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileLastAccessDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, nil, @ftTime, nil) then Result := sfprError; end else Result := sfprSkipped; else raise Exception.Create('Trying to set unsupported property'); end; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginmoveoperation.pas0000644000175000001440000001201415104114162025445 0ustar alexxusersunit uWfxPluginMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceMoveOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginMoveOperation } TWfxPluginMoveOperation = class(TFileSourceMoveOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; protected function UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginMoveOperation --------------------------------------------- function TWfxPluginMoveOperation.UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin if Assigned(SourceName) then begin FStatistics.CurrentFileFrom:= SourceName; end; if Assigned(TargetName) then begin FStatistics.CurrentFileTo:= TargetName; end; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); if theSourceFiles.Count > 1 then FInfoOperation:= FS_STATUS_OP_RENMOV_MULTI else FInfoOperation:= FS_STATUS_OP_RENMOV_SINGLE; inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TWfxPluginMoveOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginMoveOperation.Initialize; var TreeBuilder: TWfxTreeBuilder; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TWfxTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.WfxModule:= WfxModule; TreeBuilder.SymLinkOption:= fsooslDontFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, @ShowCompareFilesUIByFileObject, Thread, wpohmMove, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.Initialize; end; procedure TWfxPluginMoveOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree, FStatistics); end; procedure TWfxPluginMoveOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginMoveOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginMoveOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginlistoperation.pas0000644000175000001440000000617615104114162025466 0ustar alexxusersunit uWfxPluginListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uWfxPluginFileSource, uFileSource; type { TWfxPluginListOperation } TWfxPluginListOperation = class(TFileSourceListOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FCallbackDataClass: TCallbackDataClass; FCurrentPath: String; protected function UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; public constructor Create(aFileSource: IFileSource; aPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCFileAttributes, DCStrUtils, uFile, uFileSourceOperation, WfxPlugin, uWfxModule, uLog, uLng; function TWfxPluginListOperation.UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; begin if State = fsosStopping then // Cancel operation Exit(1); logWrite(rsMsgLoadingFileList + IntToStr(PercentDone) + '%', lmtInfo, False, False); if CheckOperationStateSafe then Result := 0 else begin Result := 1; end; end; constructor TWfxPluginListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWfxPluginFileSource := aFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); FCurrentPath:= ExcludeBackPathDelimiter(aPath); inherited Create(aFileSource, aPath); end; destructor TWfxPluginListOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginListOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(FCurrentPath, FS_STATUS_START, FS_STATUS_OP_LIST); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; end; end; procedure TWfxPluginListOperation.MainExecute; var aFile: TFile; Handle: THandle; FindData : TWfxFindData; HaveUpDir: Boolean = False; begin with FWfxPluginFileSource.WFXModule do try FFiles.Clear; Handle := WfxFindFirst(FCurrentPath, FindData); if Handle <> wfxInvalidHandle then try repeat CheckOperationState; if (FindData.FileName = '.') then Continue; if (FindData.FileName = '..') then HaveUpDir:= True; aFile := TWfxPluginFileSource.CreateFile(Path, FindData); FFiles.Add(aFile); until (not WfxFindNext(Handle, FindData)); finally FsFindClose(Handle); end; finally if not HaveUpDir then begin aFile := TWfxPluginFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := GENERIC_ATTRIBUTE_FOLDER; FFiles.Insert(aFile, 0); end; end; // with end; procedure TWfxPluginListOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(FCurrentPath, FS_STATUS_END, FS_STATUS_OP_LIST); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginfilesource.pas0000644000175000001440000012065115104114162024725 0ustar alexxusersunit uWfxPluginFileSource; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, URIParser, uWFXModule, WfxPlugin, uFile, uFileSourceProperty, uFileSourceOperationTypes, uFileProperty, uFileSource, uFileSourceOperation; type TUpdateProgress = function(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer of object; { IWfxPluginFileSource } IWfxPluginFileSource = interface(IFileSource) ['{F1F728C6-F718-4B17-8DE2-BE0134134ED8}'] procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function FillSingleFile(const FullPath: String; out aFile: TFile): Boolean; function WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; function GetPluginNumber: LongInt; function GetWfxModule: TWfxModule; property PluginNumber: LongInt read GetPluginNumber; property WfxModule: TWfxModule read GetWfxModule; end; { TWfxPluginFileSource } TWfxPluginFileSource = class; { TCallbackDataClass } TCallbackDataClass = class public // Must use class here instead of interface because of circular reference // between TWfxPluginFileSource and TCallbackDataClass, which would cause // the file source never to be destroyed. // TWfxPluginFileSource controls the lifetime of TCallbackDataClass though, // so it should be fine. FileSource: TWfxPluginFileSource; UpdateProgressFunction: TUpdateProgress; constructor Create(aFileSource: TWfxPluginFileSource); end; { TWfxPluginFileSource } TWfxPluginFileSource = class(TFileSource, IWfxPluginFileSource) private FModuleFileName, FPluginRootName: String; FWFXModule: TWFXModule; FPluginNumber: LongInt; FCallbackDataClass: TCallbackDataClass; function GetPluginNumber: LongInt; function GetWfxModule: TWfxModule; function CreateConnection: TFileSourceConnection; procedure CreateConnections; procedure AddToConnectionQueue(Operation: TFileSourceOperation); procedure RemoveFromConnectionQueue(Operation: TFileSourceOperation); procedure AddConnection(Connection: TFileSourceConnection); procedure RemoveConnection(Connection: TFileSourceConnection); {en Searches connections list for a connection assigned to operation. } function FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); protected function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; function GetCurrentAddress: String; override; procedure OperationFinished(Operation: TFileSourceOperation); override; public procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function FillSingleFile(const FullPath: String; out aFile: TFile): Boolean; function WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; public constructor Create(const URI: TURI); override; constructor Create(aModuleFileName, aPluginRootName: String); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; FindData: TWfxFindData): TFile; overload; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); override; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; function GetFileSystem: String; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; function CreateDirectory(const Path: String): Boolean; override; function GetDefaultView(out DefaultView: TFileSourceFields): Boolean; override; class function IsSupportedPath(const Path: String): Boolean; override; class function CreateByRootName(aRootName: String): IWfxPluginFileSource; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; override; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); override; property PluginNumber: LongInt read FPluginNumber; property WfxModule: TWfxModule read FWfxModule; end; { TWfxPluginFileSourceConnection } TWfxPluginFileSourceConnection = class(TFileSourceConnection) private FWfxModule: TWfxModule; public constructor Create(aWfxModule: TWfxModule); reintroduce; property WfxModule: TWfxModule read FWfxModule; end; var // Used in callback functions WfxOperationList: TStringList = nil; threadvar // Main operation progress callback function // Declared as threadvar so each operation has it own callback function UpdateProgressFunction: TUpdateProgress; implementation uses LazUTF8, FileUtil, StrUtils, {} LCLType, uShowMsg, {} uGlobs, DCStrUtils, uDCUtils, uLog, uDebug, uLng, uCryptProc, DCFileAttributes, uConnectionManager, contnrs, syncobjs, fMain, uWfxPluginCopyInOperation, uWfxPluginCopyOutOperation, uWfxPluginMoveOperation, uVfsModule, uWfxPluginExecuteOperation, uWfxPluginListOperation, uWfxPluginCreateDirectoryOperation, uWfxPluginDeleteOperation, uWfxPluginSetFilePropertyOperation, uWfxPluginCopyOperation, DCConvertEncoding, uWfxPluginCalcStatisticsOperation, uFileFunctions; const connCopyIn = 0; connCopyOut = 1; connDelete = 2; connCopyMove = 3; var // Always use appropriate lock to access these lists. WfxConnections: TObjectList; // store connections created by Wcx file sources WfxOperationsQueue: TObjectList; // store queued operations, use only under FOperationsQueueLock WfxConnectionsLock: TCriticalSection; // used to synchronize access to connections WfxOperationsQueueLock: TCriticalSection; // used to synchronize access to operations queue { CallBack functions } function MainProgressProc(PluginNr: Integer; SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; var CallbackDataClass: TCallbackDataClass; begin Result:= 0; // DCDebug('MainProgressProc ('+IntToStr(PluginNr)+','+SourceName+','+TargetName+','+IntToStr(PercentDone)+')=' ,IntTostr(Result)); if Assigned(UpdateProgressFunction) then // Call operation progress function Result:= UpdateProgressFunction(SourceName, TargetName, PercentDone) else begin // Operation callback function not found, may be plugin call progress function // from non operation thread, call global progress function in this case DCDebug('Warning UpdateProgressFunction does not found for thread ' + hexStr(Pointer(GetCurrentThreadId))); CallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNr]); if Assigned(CallbackDataClass) and Assigned(CallbackDataClass.UpdateProgressFunction) then Result:= CallbackDataClass.UpdateProgressFunction(SourceName, TargetName, PercentDone) else // Global callback function not found, incorrect // FileSourceOperation implementation, notify about it DCDebug('Warning UpdateProgressFunction does not found for plugin number %d', [PluginNr]); end; end; function MainProgressProcA(PluginNr: Integer; SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; dcpcall; var sSourceName, sTargetName: String; begin if Assigned(SourceName) then begin sSourceName:= CeSysToUtf8(StrPas(SourceName)); SourceName:= PAnsiChar(sSourceName); end; if Assigned(TargetName) then begin sTargetName:= CeSysToUtf8(StrPas(TargetName)); TargetName:= PAnsiChar(sTargetName); end; Result:= MainProgressProc(PluginNr, SourceName, TargetName, PercentDone); end; function MainProgressProcW(PluginNr: Integer; SourceName, TargetName: PWideChar; PercentDone: Integer): Integer; dcpcall; var sSourceName, sTargetName: String; begin if Assigned(SourceName) then begin sSourceName:= UTF16ToUTF8(UnicodeString(SourceName)); SourceName:= Pointer(PAnsiChar(sSourceName)); end; if Assigned(TargetName) then begin sTargetName:= UTF16ToUTF8(UnicodeString(TargetName)); TargetName:= Pointer(PAnsiChar(sTargetName)); end; Result:= MainProgressProc(PluginNr, Pointer(SourceName), Pointer(TargetName), PercentDone); end; procedure MainLogProc(PluginNr, MsgType: Integer; LogString: String); var I: Integer; bLogFile: Boolean; bLogWindow: Boolean; sMsg, sName, sPath: String; LogMsgType: TLogMsgType = lmtInfo; CallbackDataClass: TCallbackDataClass; Begin sMsg:= rsMsgLogInfo; bLogWindow:= frmMain.seLogWindow.Visible; bLogFile:= ((log_vfs_op in gLogOptions) and (log_info in gLogOptions)); CallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNr]); case MsgType of msgtype_connect: begin bLogWindow:= True; if Assigned(CallbackDataClass) then begin if Length(LogString) > 0 then begin I:= Pos(#32, LogString); sName:= WfxOperationList[PluginNr]; sPath:= Copy(LogString, I + 1, MaxInt); AddNetworkConnection(sName, sPath, CallbackDataClass.FileSource); end; end; sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; end; msgtype_disconnect: begin if Assigned(CallbackDataClass) then begin bLogWindow:= False; I:= Pos(#32, LogString); sName:= WfxOperationList[PluginNr]; sPath:= Copy(LogString, I + 1, MaxInt); RemoveNetworkConnection(sName, sPath); end; sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; end; msgtype_details, msgtype_operationcomplete, msgtype_transfercomplete, msgtype_connectcomplete: sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; msgtype_importanterror: begin LogMsgType:= lmtError; sMsg:= rsMsgLogError + '[' + IntToStr(MsgType) + ']'; bLogFile:= (log_vfs_op in gLogOptions) and (log_errors in gLogOptions); end; end; // write log info logWrite(sMsg + ', ' + logString, LogMsgType, bLogWindow, bLogFile); // DCDebug('MainLogProc ('+ sMsg + ',' + logString + ')'); end; procedure MainLogProcA(PluginNr, MsgType: Integer; LogString: PAnsiChar); dcpcall; begin MainLogProc(PluginNr, MsgType, CeSysToUtf8(StrPas(LogString))); end; procedure MainLogProcW(PluginNr, MsgType: Integer; LogString: PWideChar); dcpcall; begin MainLogProc(PluginNr, MsgType, UTF16ToUTF8(UnicodeString(LogString))); end; function MainRequestProc(PluginNr, RequestType: Integer; CustomTitle, CustomText: String; var ReturnedText: String): Bool; begin if CustomTitle = '' then CustomTitle:= 'Double Commander'; case RequestType of RT_Other: Result:= ShowInputQuery(CustomTitle, CustomText, ReturnedText); RT_UserName: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserName, CustomText), ReturnedText); RT_Password: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPassword, CustomText), True, ReturnedText); RT_Account: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgAccount, CustomText), ReturnedText); RT_UserNameFirewall: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserNameFirewall, CustomText), ReturnedText); RT_PasswordFirewall: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPasswordFirewall, CustomText), True, ReturnedText); RT_TargetDir: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgTargetDir, CustomText), ReturnedText); RT_URL: Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgURL, CustomText), ReturnedText); RT_MsgOK: Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OK) = IDOK); RT_MsgYesNo: Result:= (ShowMessageBox(CustomText, CustomTitle, MB_YESNO) = IDYES); RT_MsgOKCancel: Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OKCANCEL) = IDOK); else begin Result:= False; end; end; // DCDebug('MainRequestProc ('+IntToStr(PluginNr)+','+IntToStr(RequestType)+','+CustomTitle+','+CustomText+','+ReturnedText+')', BoolToStr(Result, True)); end; function MainRequestProcA(PluginNr, RequestType: Integer; CustomTitle, CustomText, ReturnedText: PAnsiChar; MaxLen: Integer): Bool; dcpcall; var sCustomTitle, sCustomText, sReturnedText: String; begin sCustomTitle:= CeSysToUtf8(StrPas(CustomTitle)); sCustomText:= CeSysToUtf8(StrPas(CustomText)); sReturnedText:= CeSysToUtf8(StrPas(ReturnedText)); Result:= MainRequestProc(PluginNr, RequestType, sCustomTitle, sCustomText, sReturnedText); if Result then begin if ReturnedText <> nil then StrPLCopy(ReturnedText, CeUtf8ToSys(sReturnedText), MaxLen); end; end; function MainRequestProcW(PluginNr, RequestType: Integer; CustomTitle, CustomText, ReturnedText: PWideChar; MaxLen: Integer): Bool; dcpcall; var sCustomTitle, sCustomText, sReturnedText: String; begin sCustomTitle:= UTF16ToUTF8(UnicodeString(CustomTitle)); sCustomText:= UTF16ToUTF8(UnicodeString(CustomText)); sReturnedText:= UTF16ToUTF8(UnicodeString(ReturnedText)); Result:= MainRequestProc(PluginNr, RequestType, sCustomTitle, sCustomText, sReturnedText); if Result then begin if ReturnedText <> nil then StrPLCopyW(ReturnedText, CeUtf8ToUtf16(sReturnedText), MaxLen); end; end; function CryptProc({%H-}PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName: String; var Password: String): Integer; const cPrefix = 'wfx'; cResult: array[TCryptStoreResult] of Integer = (FS_FILE_OK, FS_FILE_NOTSUPPORTED, FS_FILE_WRITEERROR, FS_FILE_READERROR, FS_FILE_NOTFOUND); var sGroup, sPassword: AnsiString; MyResult: TCryptStoreResult; begin MyResult:= csrSuccess; sGroup:= WfxOperationList[CryptoNumber]; case Mode of FS_CRYPT_SAVE_PASSWORD: begin MyResult:= PasswordStore.WritePassword(cPrefix, sGroup, ConnectionName, Password); end; FS_CRYPT_LOAD_PASSWORD, FS_CRYPT_LOAD_PASSWORD_NO_UI: begin if (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) and (PasswordStore.HasMasterKey = False) then Exit(FS_FILE_NOTFOUND); MyResult:= PasswordStore.ReadPassword(cPrefix, sGroup, ConnectionName, Password); end; FS_CRYPT_COPY_PASSWORD, FS_CRYPT_MOVE_PASSWORD: begin MyResult:= PasswordStore.ReadPassword(cPrefix, sGroup, ConnectionName, sPassword); if MyResult = csrSuccess then begin MyResult:= PasswordStore.WritePassword(cPrefix, sGroup, Password, sPassword); if (MyResult = csrSuccess) and (Mode = FS_CRYPT_MOVE_PASSWORD) then begin if not PasswordStore.DeletePassword(cPrefix, sGroup, ConnectionName) then MyResult:= csrWriteError; end; end; end; FS_CRYPT_DELETE_PASSWORD: begin if not PasswordStore.DeletePassword(cPrefix, sGroup, ConnectionName) then MyResult:= csrWriteError; end; end; Result:= cResult[MyResult]; end; function CryptProcA(PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName, Password: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var sConnectionName, sPassword: String; begin sConnectionName:= CeSysToUtf8(StrPas(ConnectionName)); sPassword:= CeSysToUtf8(StrPas(Password)); Result:= CryptProc(PluginNr, CryptoNumber, Mode, sConnectionName, sPassword); if Result = FS_FILE_OK then begin if Password <> nil then StrPLCopy(Password, CeUtf8ToSys(sPassword), MaxLen); end; end; function CryptProcW(PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName, Password: PWideChar; MaxLen: Integer): Integer; dcpcall; var sConnectionName, sPassword: String; begin sConnectionName:= UTF16ToUTF8(UnicodeString(ConnectionName)); sPassword:= UTF16ToUTF8(UnicodeString(Password)); Result:= CryptProc(PluginNr, CryptoNumber, Mode, sConnectionName, sPassword); if Result = FS_FILE_OK then begin if Password <> nil then StrPLCopyW(Password, CeUtf8ToUtf16(sPassword), MaxLen); end; end; { TWfxPluginFileSource } constructor TWfxPluginFileSource.Create(aModuleFileName, aPluginRootName: String); var AFlags: Integer; begin inherited Create; FPluginNumber:= -1; FCallbackDataClass:= nil; FModuleFileName:= aModuleFileName; FPluginRootName:= aPluginRootName; FWfxModule:= gWFXPlugins.LoadModule(FModuleFileName); if not Assigned(FWfxModule) then raise EFileSourceException.Create('Cannot load WFX module ' + FModuleFileName); with FWfxModule do begin FPluginNumber:= WfxOperationList.IndexOf(FPluginRootName); if FPluginNumber >= 0 then WfxOperationList.Objects[FPluginNumber]:= TCallbackDataClass.Create(Self) else begin FCallbackDataClass:= TCallbackDataClass.Create(Self); FPluginNumber:= WfxOperationList.AddObject(FPluginRootName, FCallbackDataClass); if Assigned(FsInit) then FsInit(FPluginNumber, @MainProgressProcA, @MainLogProcA, @MainRequestProcA); if Assigned(FsInitW) then FsInitW(FPluginNumber, @MainProgressProcW, @MainLogProcW, @MainRequestProcW); VFSInit; if not PasswordStore.MasterKeySet then AFlags:= 0 else begin AFlags:= FS_CRYPTOPT_MASTERPASS_SET; end; if Assigned(FsSetCryptCallbackW) then FsSetCryptCallbackW(@CryptProcW, FPluginNumber, AFlags); if Assigned(FsSetCryptCallback) then FsSetCryptCallback(@CryptProcA, FPluginNumber, AFlags); end; end; FOperationsClasses[fsoList] := TWfxPluginListOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TWfxPluginCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TWfxPluginCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWfxPluginCopyOutOperation.GetOperationClass; FOperationsClasses[fsoMove] := TWfxPluginMoveOperation.GetOperationClass; FOperationsClasses[fsoDelete] := TWfxPluginDeleteOperation.GetOperationClass; FOperationsClasses[fsoCreateDirectory] := TWfxPluginCreateDirectoryOperation.GetOperationClass; FOperationsClasses[fsoSetFileProperty] := TWfxPluginSetFilePropertyOperation.GetOperationClass; FOperationsClasses[fsoExecute] := TWfxPluginExecuteOperation.GetOperationClass; CreateConnections; end; destructor TWfxPluginFileSource.Destroy; begin if (FPluginNumber >= 0) and (FPluginNumber < WfxOperationList.Count) then WfxOperationList.Objects[FPluginNumber]:= nil; FreeAndNil(FCallbackDataClass); inherited Destroy; end; class function TWfxPluginFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; end; end; class function TWfxPluginFileSource.CreateFile(const APath: String; FindData: TWfxFindData): TFile; begin Result := TFile.Create(APath); with Result do begin // Check that attributes is used if (FindData.FileAttributes and FILE_ATTRIBUTE_UNIX_MODE) = 0 then // Windows attributes begin LinkProperty := TFileLinkProperty.Create; LinkProperty.IsLinkToDirectory := ((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and ((FindData.FileAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0); AttributesProperty := TNtfsFileAttributesProperty.Create(FindData.FileAttributes); end else // Unix attributes begin LinkProperty := TFileLinkProperty.Create; LinkProperty.IsLinkToDirectory := (((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) or ((FindData.FileAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0)) and ((FindData.Reserved0 and S_IFMT) = S_IFLNK); if ((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and ((FindData.Reserved0 and S_IFMT) <> S_IFDIR) and (not LinkProperty.IsLinkToDirectory) then FindData.Reserved0:= FindData.Reserved0 or S_IFDIR; AttributesProperty := TUnixFileAttributesProperty.Create(FindData.Reserved0); end; SizeProperty := TFileSizeProperty.Create(FindData.FileSize); SizeProperty.IsValid := (FindData.FileSize >= 0); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(FindData.LastWriteTime); ModificationTimeProperty.IsValid := (FindData.LastWriteTime <= SysUtils.MaxDateTime); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(FindData.LastAccessTime); CreationTimeProperty := TFileCreationDateTimeProperty.Create(FindData.CreationTime); // Set name after assigning Attributes property, because it is used to get extension. Name := FindData.FileName; end; end; procedure TWfxPluginFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); var AIndex: Integer; AProp: TFilePropertyType; AVariant: TFileVariantProperty; begin if WfxModule.ContentPlugin then begin PropertiesToSet:= PropertiesToSet * fpVariantAll; for AProp in PropertiesToSet do begin AIndex:= Ord(AProp) - Ord(fpVariant); if (AIndex >= 0) and (AIndex <= High(AVariantProperties)) then begin AVariant:= TFileVariantProperty.Create(AVariantProperties[AIndex]); AVariant.Value:= GetVariantFileProperty(AVariantProperties[AIndex], AFile, Self); AFile.Properties[AProp]:= AVariant; end; end; end; end; function TWfxPluginFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin with WfxModule do begin Result := [fsoList, fsoCalcStatistics]; // supports by any plugin if Assigned(FsPutFile) or Assigned(FsPutFileW) then Result:= Result + [fsoCopyIn]; if Assigned(FsGetFile) or Assigned(FsGetFileW) then Result:= Result + [fsoCopyOut]; if Assigned(FsRenMovFile) or Assigned(FsRenMovFileW) then Result:= Result + [fsoCopy, fsoMove]; if Assigned(FsDeleteFile) or Assigned(FsDeleteFileW) then Result:= Result + [fsoDelete]; if Assigned(FsMkDir) or Assigned(FsMkDirW) then Result:= Result + [fsoCreateDirectory]; if Assigned(FsExecuteFile) or Assigned(FsExecuteFileW) then Result:= Result + [fsoExecute]; if Assigned(FsSetAttr) or Assigned(FsSetAttrW) or Assigned(FsExecuteFile) or Assigned(FsExecuteFileW) or Assigned(FsRenMovFile) or Assigned(FsRenMovFileW) then Result:= Result + [fsoSetFileProperty]; end; end; function TWfxPluginFileSource.GetProperties: TFileSourceProperties; begin Result := [fspUsesConnections, fspListOnMainThread]; with FWfxModule do begin if Assigned(FsLinksToLocalFiles) and FsLinksToLocalFiles() then Result:= Result + [fspLinksToLocalFiles]; if (BackgroundFlags = 0) or (BackgroundFlags and BG_ASK_USER <> 0) then Result:= Result + [fspCopyInOnMainThread, fspCopyOutOnMainThread] else begin if (BackgroundFlags and BG_UPLOAD = 0) then Result:= Result + [fspCopyInOnMainThread]; if (BackgroundFlags and BG_DOWNLOAD = 0) then Result:= Result + [fspCopyOutOnMainThread]; end; if Assigned(FsContentGetDefaultView) or Assigned(FsContentGetDefaultViewW) then Result := Result + [fspDefaultView]; end; end; function TWfxPluginFileSource.GetFileSystem: String; begin Result:= FPluginRootName; end; function TWfxPluginFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime, fpLink]; end; function TWfxPluginFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result:= inherited GetRetrievableFileProperties; if WfxModule.ContentPlugin then Result += fpVariantAll; end; function TWfxPluginFileSource.GetCurrentAddress: String; begin Result:= 'wfx://' + FPluginRootName; end; function TWfxPluginFileSource.GetPluginNumber: LongInt; begin Result := FPluginNumber; end; function TWfxPluginFileSource.GetWfxModule: TWfxModule; begin Result := FWFXModule; end; procedure TWfxPluginFileSource.FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure FillAndCountRec(const srcPath: String); var FindData: TWfxFindData; Handle: THandle; aFile: TFile; begin with FWfxModule do begin Handle := WfxFindFirst(srcPath, FindData); if Handle = wfxInvalidHandle then Exit; repeat if (FindData.FileName = '.') or (FindData.FileName = '..') then Continue; aFile:= TWfxPluginFileSource.CreateFile(srcPath, FindData); NewFiles.Add(aFile); if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + FindData.FileName + PathDelim); end else begin Inc(FilesSize, aFile.Size); Inc(FilesCount); end; until not WfxFindNext(Handle, FindData); FsFindClose(Handle); end; end; var I: Integer; aFile: TFile; begin FilesCount:= 0; FilesSize:= 0; if ExcludeRootDir then begin if Files.Count <> 1 then raise Exception.Create('Only a single directory can be set with ExcludeRootDir=True'); NewFiles := TFiles.Create(Files[0].FullPath); FillAndCountRec(Files[0].FullPath + DirectorySeparator); end else begin NewFiles := TFiles.Create(Files.Path); for I := 0 to Files.Count - 1 do begin aFile := Files[I]; NewFiles.Add(aFile.Clone); if aFile.AttributesProperty.IsDirectory and (not aFile.LinkProperty.IsLinkToDirectory) then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.Path + aFile.Name + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); // in first level we know file size -> use it end; end; end; end; function TWfxPluginFileSource.FillSingleFile(const FullPath: String; out aFile: TFile): Boolean; var FilePath, ExpectedFileName: String; FindData: TWfxFindData; Handle: THandle; begin Result := False; aFile := nil; FilePath := ExtractFilePath(FullPath); ExpectedFileName := ExtractFileName(FullPath); with FWfxModule do begin Handle := WfxFindFirst(FilePath, FindData); if Handle = wfxInvalidHandle then Exit; repeat if (FindData.FileName = ExpectedFileName) then begin aFile := TWfxPluginFileSource.CreateFile(FilePath, FindData); Result := True; Break; end; until not WfxFindNext(Handle, FindData); FsFindClose(Handle); end; end; function TWfxPluginFileSource.WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; var bMove, bOverWrite: Boolean; begin with FWfxModule do begin if Internal then begin bMove:= ((Flags and FS_COPYFLAGS_MOVE) <> 0); bOverWrite:= ((Flags and FS_COPYFLAGS_OVERWRITE) <> 0); Result:= WfxRenMovFile(sSourceFile, sTargetFile, bMove, bOverWrite, RemoteInfo); end else begin if CopyMoveIn then Result:= WfxPutFile(sSourceFile, sTargetFile, Flags) else Result:= WfxGetFile(sSourceFile, sTargetFile, Flags, RemoteInfo); end; end; end; constructor TWfxPluginFileSource.Create(const URI: TURI); var Index: Integer; begin // Check if there is a registered plugin for the name of the file system plugin. Index:= gWFXPlugins.FindFirstEnabledByName(URI.Host); if Index < 0 then begin raise EFileSourceException.Create('Cannot find Wfx module ' + URI.Host); end; Create(gWFXPlugins.FileName[Index], URI.Host); DCDebug('Found registered plugin ' + gWFXPlugins.FileName[Index] + ' for file system ' + URI.Host); end; function TWfxPluginFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginListOperation.Create(TargetFileSource, TargetPath); end; function TWfxPluginFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var FileSource: IFileSource; begin FileSource := Self; Result := TWfxPluginCopyOperation.Create(FileSource, FileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TWfxPluginCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginMoveOperation.Create(TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TWfxPluginFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginCreateDirectoryOperation.Create(TargetFileSource, BasePath, DirectoryPath); end; function TWfxPluginFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWfxPluginExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TWfxPluginFileSource.CreateSetFilePropertyOperation( var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginSetFilePropertyOperation.Create( TargetFileSource, theTargetFiles, theNewProperties); end; function TWfxPluginFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TWfxPluginFileSource.GetLocalName(var aFile: TFile): Boolean; var sFileName: String; begin Result:= False; sFileName:= aFile.FullPath; if FWfxModule.WfxGetLocalName(sFileName) then begin aFile.FullPath:= sFileName; Result:= True; end; end; function TWfxPluginFileSource.CreateDirectory(const Path: String): Boolean; begin Result:= WfxModule.WfxMkDir(ExtractFilePath(Path), Path) = WFX_SUCCESS; if Result then begin if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess + rsMsgLogMkDir, [Path]), lmtSuccess) end else begin if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError + rsMsgLogMkDir, [Path]), lmtError); end; end; function TWfxPluginFileSource.GetDefaultView(out DefaultView: TFileSourceFields): Boolean; begin Result:= FWFXModule.WfxContentGetDefaultView(DefaultView); end; class function TWfxPluginFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= Pos('wfx://', Path) = 1; end; class function TWfxPluginFileSource.CreateByRootName(aRootName: String): IWfxPluginFileSource; var Index: Integer; begin Result:= nil; if gWFXPlugins.Count = 0 then Exit; // Check if there is a registered plugin for the name of the file system plugin. Index:= gWFXPlugins.FindFirstEnabledByName(aRootName); if Index >= 0 then begin Result:= TWfxPluginFileSource.Create(gWFXPlugins.FileName[Index], aRootName); DCDebug('Found registered plugin ' + gWFXPlugins.FileName[Index] + ' for file system ' + aRootName); end; end; procedure TWfxPluginFileSource.AddToConnectionQueue(Operation: TFileSourceOperation); begin WfxOperationsQueueLock.Acquire; try if WfxOperationsQueue.IndexOf(Operation) < 0 then WfxOperationsQueue.Add(Operation); finally WfxOperationsQueueLock.Release; end; end; procedure TWfxPluginFileSource.RemoveFromConnectionQueue(Operation: TFileSourceOperation); begin WfxOperationsQueueLock.Acquire; try WfxOperationsQueue.Remove(Operation); finally WfxOperationsQueueLock.Release; end; end; procedure TWfxPluginFileSource.AddConnection(Connection: TFileSourceConnection); begin WfxConnectionsLock.Acquire; try if WfxConnections.IndexOf(Connection) < 0 then WfxConnections.Add(Connection); finally WfxConnectionsLock.Release; end; end; procedure TWfxPluginFileSource.RemoveConnection(Connection: TFileSourceConnection); begin WfxConnectionsLock.Acquire; try WfxConnections.Remove(Connection); finally WfxConnectionsLock.Release; end; end; function TWfxPluginFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin Result := nil; case Operation.ID of fsoCopy, fsoMove: Result := WfxConnections[connCopyMove] as TFileSourceConnection; fsoCopyIn: Result := WfxConnections[connCopyIn] as TFileSourceConnection; fsoCopyOut: Result := WfxConnections[connCopyOut] as TFileSourceConnection; fsoDelete: Result := WfxConnections[connDelete] as TFileSourceConnection; else begin Result := CreateConnection; if Assigned(Result) then AddConnection(Result); end; end; if Assigned(Result) then Result := TryAcquireConnection(Result, Operation); // No available connection - wait. if not Assigned(Result) then AddToConnectionQueue(Operation) else // Connection acquired. // The operation may have been waiting in the queue // for the connection, so remove it from the queue. RemoveFromConnectionQueue(Operation); end; procedure TWfxPluginFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin RemoveFromConnectionQueue(Operation); end; function TWfxPluginFileSource.CreateConnection: TFileSourceConnection; begin Result := TWfxPluginFileSourceConnection.Create(FWfxModule); end; procedure TWfxPluginFileSource.CreateConnections; begin WfxConnectionsLock.Acquire; try if WfxConnections.Count = 0 then begin // Reserve some connections (only once). WfxConnections.Add(CreateConnection); // connCopyIn WfxConnections.Add(CreateConnection); // connCopyOut WfxConnections.Add(CreateConnection); // connDelete WfxConnections.Add(CreateConnection); // connCopyMove end; finally WfxConnectionsLock.Release; end; end; function TWfxPluginFileSource.FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; var i: Integer; connection: TFileSourceConnection; begin Result := nil; WfxConnectionsLock.Acquire; try for i := 0 to WfxConnections.Count - 1 do begin connection := WfxConnections[i] as TFileSourceConnection; if connection.AssignedOperation = operation then Exit(connection); end; finally WfxConnectionsLock.Release; end; end; procedure TWfxPluginFileSource.OperationFinished(Operation: TFileSourceOperation); var allowedIDs: TFileSourceOperationTypes = []; connection: TFileSourceConnection; begin connection := FindConnectionByOperation(Operation); if Assigned(connection) then begin connection.Release; // unassign operation WfxConnectionsLock.Acquire; try // If there are operations waiting, take the first one and notify // that a connection is available. // Only check operation types for which there are reserved connections. if Operation.ID in [fsoCopyIn, fsoCopyOut, fsoDelete, fsoCopy, fsoMove] then begin Include(allowedIDs, Operation.ID); NotifyNextWaitingOperation(allowedIDs); end else begin WfxConnections.Remove(connection); end; finally WfxConnectionsLock.Release; end; end; end; procedure TWfxPluginFileSource.NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); var i: Integer; operation: TFileSourceOperation; begin WfxOperationsQueueLock.Acquire; try for i := 0 to WfxOperationsQueue.Count - 1 do begin operation := WfxOperationsQueue.Items[i] as TFileSourceOperation; if (operation.State = fsosWaitingForConnection) and (operation.ID in allowedOps) then begin operation.ConnectionAvailableNotify; Exit; end; end; finally WfxOperationsQueueLock.Release; end; end; { TWfxPluginFileSourceConnection } constructor TWfxPluginFileSourceConnection.Create(aWfxModule: TWfxModule); begin FWfxModule := aWfxModule; inherited Create; end; { TCallbackDataClass } constructor TCallbackDataClass.Create(aFileSource: TWfxPluginFileSource); begin inherited Create; FileSource:= aFileSource; UpdateProgressFunction:= nil; end; initialization WfxOperationList:= TStringList.Create; WfxConnections := TObjectList.Create(True); // True = destroy objects when destroying list WfxConnectionsLock := TCriticalSection.Create; WfxOperationsQueue := TObjectList.Create(False); // False = don't destroy operations (only store references) WfxOperationsQueueLock := TCriticalSection.Create; RegisterVirtualFileSource('WfxPlugin', TWfxPluginFileSource, False); finalization FreeAndNil(WfxOperationList); FreeAndNil(WfxConnections); FreeAndNil(WfxConnectionsLock); FreeAndNil(WfxOperationsQueue); FreeAndNil(WfxOperationsQueueLock); end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxpluginexecuteoperation.pas0000644000175000001440000000450015104114162026142 0ustar alexxusersunit uWfxPluginExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uWfxPluginFileSource; type { TWfxPluginExecuteOperation } TWfxPluginExecuteOperation = class(TFileSourceExecuteOperation) private FWfxPluginFileSource: IWfxPluginFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses Forms, WfxPlugin; constructor TWfxPluginExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWfxPluginFileSource := aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWfxPluginExecuteOperation.Initialize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(CurrentPath, FS_STATUS_START, FS_STATUS_OP_EXEC); end; procedure TWfxPluginExecuteOperation.MainExecute; var RemoteName: String; iResult: LongInt; begin if Pos('quote ', Verb) = 1 then RemoteName:= CurrentPath else begin RemoteName:= AbsolutePath; end; iResult:= FWfxPluginFileSource.WfxModule.WfxExecuteFile(Application.MainForm.Tag, RemoteName, Verb); case iResult of FS_EXEC_OK: FExecuteOperationResult:= fseorSuccess; FS_EXEC_ERROR: FExecuteOperationResult:= fseorError; FS_EXEC_YOURSELF: FExecuteOperationResult:= fseorYourSelf; FS_EXEC_SYMLINK: begin FResultString:= RemoteName; FExecuteOperationResult:= fseorSymLink; end; end; end; procedure TWfxPluginExecuteOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(CurrentPath, FS_STATUS_END, FS_STATUS_OP_EXEC); end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugindeleteoperation.pas0000644000175000001440000001443015104114162025745 0ustar alexxusersunit uWfxPluginDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uWfxPluginFileSource, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog; type TWfxPluginDeleteOperation = class(TFileSourceDeleteOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected function ProcessFile(aFile: TFile): Boolean; function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCOSUtils, uLng, WfxPlugin; constructor TWfxPluginDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := False; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TWfxPluginDeleteOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginDeleteOperation.Initialize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(FilesToDelete.Path, FS_STATUS_START, FS_STATUS_OP_DELETE); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FWfxPluginFileSource.FillAndCount(FilesToDelete, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TWfxPluginDeleteOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; AppProcessMessages; CheckOperationState; end; end; procedure TWfxPluginDeleteOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(FilesToDelete.Path, FS_STATUS_END, FS_STATUS_OP_DELETE); end; function TWfxPluginDeleteOperation.ProcessFile(aFile: TFile): Boolean; var aFileName: String; bRetry: Boolean; sMessage, sQuestion: String; logOptions: TLogOptions; begin Result := False; aFileName := aFile.Path + aFile.Name; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [aFileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll], fsourYes, fsourSkip) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; end; fsoogNo: Exit; end; end; repeat bRetry := False; //if FileIsReadOnly(aFile.Attributes) then // mbFileSetReadOnly(aFileName, False); with FWfxPluginFileSource.WfxModule do if aFile.IsDirectory then // directory begin Result := WfxRemoveDir(aFileName); end else begin // files and other stuff Result := WfxDeleteFile(aFileName); end; if Result then begin // success if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [aFileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [aFileName]), [log_vfs_op], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [aFileName]); sQuestion := Format(rsMsgNotDelete, [aFileName]); end else begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [aFileName]); sQuestion := Format(rsMsgNotDelete, [aFileName]); end; if gSkipFileOpError or (FSkipErrors = True) then LogMessage(sMessage, logOptions, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; function TWfxPluginDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if gSkipFileOpError then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TWfxPluginDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugincreatedirectoryoperation.pas0000644000175000001440000000357615104114162027704 0ustar alexxusersunit uWfxPluginCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource, uWfxPluginFileSource; type TWfxPluginCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) private FWfxPluginFileSource: IWfxPluginFileSource; public constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationUI, uLog, uLng, uGlobs, uWfxModule; constructor TWfxPluginCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin FWfxPluginFileSource := aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, aCurrentPath, aDirectoryPath); end; procedure TWfxPluginCreateDirectoryOperation.Initialize; begin end; procedure TWfxPluginCreateDirectoryOperation.MainExecute; begin with FWfxPluginFileSource do begin case WfxModule.WfxMkDir(BasePath, AbsolutePath) of WFX_NOTSUPPORTED: AskQuestion(rsMsgErrNotSupported, '', [fsourOk], fsourOk, fsourOk); WFX_SUCCESS: begin // write log success if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir, [AbsolutePath]), lmtSuccess) end; else begin // write log error if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); end; end; // case end; // with end; procedure TWfxPluginCreateDirectoryOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugincopyoutoperation.pas0000644000175000001440000001325215104114162026206 0ustar alexxusersunit uWfxPluginCopyOutOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyOutOperation } TWfxPluginCopyOutOperation = class(TFileSourceCopyOutOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; procedure SetNeedsConnection(AValue: Boolean); protected function UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property NeedsConnection: Boolean read FNeedsConnection write SetNeedsConnection; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginCopyOutOperation --------------------------------------------- procedure TWfxPluginCopyOutOperation.SetNeedsConnection(AValue: Boolean); begin FNeedsConnection:= AValue; if (FNeedsConnection = False) then FInfoOperation:= FS_STATUS_OP_GET_MULTI_THREAD else if (SourceFiles.Count > 1) then FInfoOperation:= FS_STATUS_OP_GET_MULTI else FInfoOperation:= FS_STATUS_OP_GET_SINGLE; end; function TWfxPluginCopyOutOperation.UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin if Assigned(SourceName) then begin FStatistics.CurrentFileFrom:= SourceName; end; if Assigned(TargetName) then begin FStatistics.CurrentFileTo:= TargetName; end; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aSourceFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); SetNeedsConnection(FNeedsConnection); end; destructor TWfxPluginCopyOutOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyOutOperation.Initialize; var TreeBuilder: TWfxTreeBuilder; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TWfxTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.WfxModule:= WfxModule; TreeBuilder.SymLinkOption:= fsooslFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, @ShowCompareFilesUIByFileObject, Thread, wpohmCopyOut, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.Initialize; end; procedure TWfxPluginCopyOutOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree, FStatistics); end; procedure TWfxPluginCopyOutOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyOutOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugincopyoperation.pas0000644000175000001440000001240415104114162025454 0ustar alexxusersunit uWfxPluginCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyOperation } TWfxPluginCopyOperation = class(TFileSourceCopyOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; protected function UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginCopyOperation --------------------------------------------- function TWfxPluginCopyOperation.UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin if Assigned(SourceName) then begin FStatistics.CurrentFileFrom:= SourceName; end; if Assigned(TargetName) then begin FStatistics.CurrentFileTo:= TargetName; end; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aSourceFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); if theSourceFiles.Count > 1 then FInfoOperation:= FS_STATUS_OP_RENMOV_MULTI else FInfoOperation:= FS_STATUS_OP_RENMOV_SINGLE; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TWfxPluginCopyOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyOperation.Initialize; var TreeBuilder: TWfxTreeBuilder; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TWfxTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.WfxModule:= WfxModule; TreeBuilder.SymLinkOption:= fsooslFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, @ShowCompareFilesUIByFileObject, Thread, wpohmCopy, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.Initialize; end; procedure TWfxPluginCopyOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree, FStatistics); end; procedure TWfxPluginCopyOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugincopyinoperation.pas0000644000175000001440000001322615104114162026006 0ustar alexxusersunit uWfxPluginCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyInOperation } TWfxPluginCopyInOperation = class(TFileSourceCopyInOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; procedure SetNeedsConnection(AValue: Boolean); protected function UpdateProgress(SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property NeedsConnection: Boolean read FNeedsConnection write SetNeedsConnection; end; implementation uses uFileSourceOperationOptions, fWfxPluginCopyMoveOperationOptions, WfxPlugin, uFileSystemUtil, uAdministrator; // -- TWfxPluginCopyInOperation --------------------------------------------- procedure TWfxPluginCopyInOperation.SetNeedsConnection(AValue: Boolean); begin FNeedsConnection:= AValue; if (FNeedsConnection = False) then FInfoOperation:= FS_STATUS_OP_PUT_MULTI_THREAD else if (SourceFiles.Count > 1) then FInfoOperation:= FS_STATUS_OP_PUT_MULTI else FInfoOperation:= FS_STATUS_OP_PUT_SINGLE; end; function TWfxPluginCopyInOperation.UpdateProgress(SourceName,TargetName: PAnsiChar; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin if Assigned(SourceName) then begin FStatistics.CurrentFileFrom:= SourceName; end; if Assigned(TargetName) then begin FStatistics.CurrentFileTo:= TargetName; end; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); SetNeedsConnection(FNeedsConnection); end; destructor TWfxPluginCopyInOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyInOperation.Initialize; var TreeBuilder: TFileSystemTreeBuilder; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(TargetPath, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; end; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TFileSystemTreeBuilder.Create(@AskQuestion, @CheckOperationState); try ElevateAction:= dupError; TreeBuilder.SymLinkOption:= fsooslFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, @ShowCompareFilesUIByFileObject, Thread, wpohmCopyIn, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.Initialize; end; procedure TWfxPluginCopyInOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree, FStatistics); end; procedure TWfxPluginCopyInOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(TargetPath, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyInOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyInOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/uwfxplugincalcstatisticsoperation.pas0000644000175000001440000000651215104114162027522 0ustar alexxusersunit uWfxPluginCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uWfxPluginFileSource, uFile; type { TWfxPluginCalcStatisticsOperation } TWfxPluginCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses WfxPlugin, uWfxModule; constructor TWfxPluginCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; end; destructor TWfxPluginCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(Files.Path, FS_STATUS_START, FS_STATUS_OP_CALCSIZE); end; end; procedure TWfxPluginCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); end; end; procedure TWfxPluginCalcStatisticsOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(Files.Path, FS_STATUS_END, FS_STATUS_OP_CALCSIZE); end; end; procedure TWfxPluginCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); AppProcessMessages; CheckOperationState; if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); end else begin Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TWfxPluginCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var AFile: TFile; Handle: THandle; FindData: TWfxFindData; begin with FWfxPluginFileSource.WfxModule do begin Handle := WfxFindFirst(srcPath, FindData); if Handle = wfxInvalidHandle then Exit; repeat if (FindData.FileName = '.') or (FindData.FileName = '..') then Continue; AFile := TWfxPluginFileSource.CreateFile(srcPath, FindData); try ProcessFile(aFile); finally FreeAndNil(aFile); end; until not WfxFindNext(Handle, FindData); FsFindClose(Handle); end; end; end. doublecmd-1.1.30/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.pas0000644000175000001440000001571615104114162027751 0ustar alexxusersunit fWfxPluginCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, uFileSourceCopyOperation, uWfxPluginCopyOperation, uWfxPluginMoveOperation, uWfxPluginCopyInOperation, uWfxPluginCopyOutOperation; type { TWfxPluginCopyMoveOperationOptionsUI } TWfxPluginCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) cbCopyTime: TCheckBox; cbWorkInBackground: TCheckBox; cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; pnlCheckboxes: TPanel; pnlComboBoxes: TPanel; procedure cbWorkInBackgroundChange(Sender: TObject); private procedure SetCopyOptions(CopyOperation: TFileSourceCopyOperation); procedure SetOperationOptions(CopyOperation: TWfxPluginCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TWfxPluginMoveOperation); overload; procedure SetOperationOptions(CopyInOperation: TWfxPluginCopyInOperation); overload; procedure SetOperationOptions(CopyOutOperation: TWfxPluginCopyOutOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TWfxPluginCopyOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) end; TWfxPluginMoveOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) end; { TWfxPluginCopyInOperationOptionsUI } TWfxPluginCopyInOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; { TWfxPluginCopyOutOperationOptionsUI } TWfxPluginCopyOutOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; implementation {$R *.lfm} uses DCStrUtils, uLng, DCOSUtils, WfxPlugin, fCopyMoveDlg, uGlobs, uWfxPluginFileSource, uFileSourceOperationOptions, uOperationsManager; { TWfxPluginCopyMoveOperationOptionsUI } constructor TWfxPluginCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); ParseLineToList(rsFileOpCopyMoveFileExistsOptions, cmbFileExists.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; with (AFileSource as IWfxPluginFileSource).WfxModule do begin cbCopyTime.Visible := Assigned(FsSetTime) or Assigned(FsSetTimeW); cbCopyTime.Checked := cbCopyTime.Visible and gOperationOptionCopyTime; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TWfxPluginCopyOperation then SetOperationOptions(Operation as TWfxPluginCopyOperation) else if Operation is TWfxPluginMoveOperation then SetOperationOptions(Operation as TWfxPluginMoveOperation) else if Operation is TWfxPluginCopyInOperation then SetOperationOptions(Operation as TWfxPluginCopyInOperation) else if Operation is TWfxPluginCopyOutOperation then SetOperationOptions(Operation as TWfxPluginCopyOutOperation); end; procedure TWfxPluginCopyMoveOperationOptionsUI.cbWorkInBackgroundChange( Sender: TObject); begin with (Owner as TfrmCopyDlg) do begin if not cbWorkInBackground.Checked then QueueIdentifier:= ModalQueueId else begin QueueIdentifier:= SingleQueueId; end; btnAddToQueue.Visible:= cbWorkInBackground.Checked; btnCreateSpecialQueue.Visible:= btnAddToQueue.Visible; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetCopyOptions(CopyOperation: TFileSourceCopyOperation); begin with CopyOperation do begin if cbCopyTime.Checked then CopyAttributesOptions := CopyAttributesOptions + [caoCopyTime] else begin CopyAttributesOptions := CopyAttributesOptions - [caoCopyTime]; end; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyOperation: TWfxPluginCopyOperation); begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; SetCopyOptions(CopyOperation); end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(MoveOperation: TWfxPluginMoveOperation); begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyInOperation: TWfxPluginCopyInOperation); begin with CopyInOperation do begin NeedsConnection:= not cbWorkInBackground.Checked; case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; SetCopyOptions(CopyInOperation); end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyOutOperation: TWfxPluginCopyOutOperation); begin with CopyOutOperation do begin NeedsConnection:= not cbWorkInBackground.Checked; case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; SetCopyOptions(CopyOutOperation); end; end; { TWfxPluginCopyInOperationOptionsUI } constructor TWfxPluginCopyInOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); const CAN_UPLOAD = BG_UPLOAD or BG_ASK_USER; begin inherited Create(AOwner, AFileSource); with (AFileSource as IWfxPluginFileSource) do begin cbWorkInBackground.Visible:= (WfxModule.BackgroundFlags and CAN_UPLOAD) = CAN_UPLOAD; if cbWorkInBackground.Visible then cbWorkInBackground.Checked:= False else cbWorkInBackground.Checked:= (WfxModule.BackgroundFlags and BG_UPLOAD <> 0); end; cbWorkInBackgroundChange(cbWorkInBackground); end; { TWfxPluginCopyOutOperationOptionsUI } constructor TWfxPluginCopyOutOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); const CAN_DOWNLOAD = BG_DOWNLOAD or BG_ASK_USER; begin inherited Create(AOwner, AFileSource); with (AFileSource as IWfxPluginFileSource) do begin cbWorkInBackground.Visible:= (WfxModule.BackgroundFlags and CAN_DOWNLOAD) = CAN_DOWNLOAD; if cbWorkInBackground.Visible then cbWorkInBackground.Checked:= False else cbWorkInBackground.Checked:= (WfxModule.BackgroundFlags and BG_DOWNLOAD <> 0); end; cbWorkInBackgroundChange(cbWorkInBackground); end; end. doublecmd-1.1.30/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lrj0000644000175000001440000000130715104114162027744 0ustar alexxusers{"version":1,"strings":[ {"hash":111687171,"name":"twfxplugincopymoveoperationoptionsui.lblfileexists.caption","sourcebytes":[87,104,101,110,32,102,105,108,101,32,101,120,105,115,116,115],"value":"When file exists"}, {"hash":31854361,"name":"twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption","sourcebytes":[87,111,114,107,32,105,110,32,98,97,99,107,103,114,111,117,110,100,32,40,115,101,112,97,114,97,116,101,32,99,111,110,110,101,99,116,105,111,110,41],"value":"Work in background (separate connection)"}, {"hash":231770837,"name":"twfxplugincopymoveoperationoptionsui.cbcopytime.caption","sourcebytes":[67,111,112,121,32,100,38,97,116,101,47,116,105,109,101],"value":"Copy d&ate/time"} ]} doublecmd-1.1.30/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lfm0000644000175000001440000000372715104114162027743 0ustar alexxusersobject WfxPluginCopyMoveOperationOptionsUI: TWfxPluginCopyMoveOperationOptionsUI Left = 305 Height = 158 Top = 222 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 LCLVersion = '1.8.4.0' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner Left = 0 Height = 23 Top = 0 Width = 186 AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 23 ClientWidth = 186 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 15 Top = 4 Width = 81 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox Left = 86 Height = 23 Top = 0 Width = 100 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes Left = 194 Height = 38 Top = 0 Width = 246 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone BevelWidth = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 38 ClientWidth = 246 TabOrder = 1 object cbWorkInBackground: TCheckBox AnchorSideTop.Control = cbCopyTime AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 19 Width = 246 Caption = 'Work in background (separate connection)' OnChange = cbWorkInBackgroundChange TabOrder = 1 Visible = False end object cbCopyTime: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 0 Width = 103 Caption = 'Copy d&ate/time' TabOrder = 0 end end end doublecmd-1.1.30/src/filesources/wcxarchive/0000755000175000001440000000000015104114162020042 5ustar alexxusersdoublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivetestarchiveoperation.pas0000644000175000001440000002324415104114162027267 0ustar alexxusersunit uWcxArchiveTestArchiveOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WcxPlugin, uLog, uGlobs, uFileSourceTestArchiveOperation, uFileSource, uFileSourceOperation, uFile, uWcxArchiveFileSource; type { TWcxArchiveTestArchiveOperation } TWcxArchiveTestArchiveOperation = class(TFileSourceTestArchiveOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceTestArchiveOperationStatistics; // local copy of statistics procedure ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions = []); procedure LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); protected procedure SetProcessDataProc(hArcData: TArcHandle); public constructor Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; end; implementation uses FileUtil, LazUTF8, DCOSUtils, DCStrUtils, uDCUtils, uShowMsg, uFileSourceOperationUI, uWCXmodule, uLng, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxTestArchiveOperationG: TWcxArchiveTestArchiveOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxTestArchiveOperationT: TWcxArchiveTestArchiveOperation; function ProcessDataProc(WcxTestArchiveOperation: TWcxArchiveTestArchiveOperation; FileName: String; Size: LongInt; UpdateName: Pointer): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxTestArchiveOperation) then begin if WcxTestArchiveOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxTestArchiveOperation.FStatistics do begin // Update file name if Assigned(UpdateName) then begin CurrentFile:= FileName; end; // Get the number of bytes processed since the previous call if Size > 0 then begin if CurrentFileDoneBytes < 0 then begin CurrentFileDoneBytes:= 0; end; CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then begin CurrentFileDoneBytes := CurrentFileTotalBytes; end; DoneBytes := DoneBytes + Size; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin if (TotalBytes = 0) then TotalBytes:= -100; DoneBytes := Abs(TotalBytes) * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin if (CurrentFileTotalBytes = 0) then CurrentFileTotalBytes:= -100; CurrentFileDoneBytes := Abs(CurrentFileTotalBytes) * (Int64(-Size) - 1000) div 100; end; end; WcxTestArchiveOperation.UpdateStatistics(WcxTestArchiveOperation.FStatistics); if not WcxTestArchiveOperation.CheckOperationStateSafe then Exit(0); end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationG, CeSysToUtf8(StrPas(FileName)), Size, FileName); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size, FileName); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationT, CeSysToUtf8(StrPas(FileName)), Size, FileName); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size, FileName); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveTestArchiveOperation.Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); begin FWcxArchiveFileSource := aSourceFileSource as IWcxArchiveFileSource; inherited Create(aSourceFileSource, theSourceFiles); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_UNPACK = 0); end; destructor TWcxArchiveTestArchiveOperation.Destroy; begin inherited Destroy; end; procedure TWcxArchiveTestArchiveOperation.Initialize; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxTestArchiveOperationG := Self else WcxTestArchiveOperationT := Self; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.ArchiveFile:= FWcxArchiveFileSource.ArchiveFileName; end; procedure TWcxArchiveTestArchiveOperation.MainExecute; var ArcHandle: TArcHandle; Header: TWCXHeader; OpenResult: Longint; iResult: Integer; Files: TFiles = nil; WcxModule: TWcxModule; begin WcxModule := FWcxArchiveFileSource.WcxModule; ArcHandle := WcxModule.OpenArchiveHandle(FWcxArchiveFileSource.ArchiveFileName, PK_OM_EXTRACT, OpenResult); if ArcHandle = 0 then begin AskQuestion(uWcxModule.GetErrorMsg(OpenResult), '', [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; // Convert file list so that filenames are relative to archive root. Files := SourceFiles.Clone; ChangeFileListRoot(PathDelim, Files); try SetProcessDataProc(ArcHandle); WcxModule.WcxSetChangeVolProc(ArcHandle); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do try CheckOperationState; // Now check if the file is to be extracted. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories (we handle them ourselves). and MatchesFileList(Files, Header.FileName) // Check if it's included in the filelist then begin with FStatistics do begin CurrentFile := Header.FileName; if (Header.UnpSize < 0) then CurrentFileTotalBytes := 0 else begin CurrentFileTotalBytes := Header.UnpSize; end; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; iResult := WcxModule.WcxProcessFile(ArcHandle, PK_TEST, EmptyStr, EmptyStr); if iResult <> E_SUCCESS then begin // User aborted operation. if iResult = E_EABORTED then Break; ShowError(Format(rsMsgLogError + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' : ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName]), [log_arc_op], lmtSuccess); end; // Success end // Extract else // Skip begin iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); //Check for errors if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' : ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end; end; // Skip finally FreeAndNil(Header); end; finally WcxModule.CloseArchive(ArcHandle); FreeAndNil(Files); end; end; procedure TWcxArchiveTestArchiveOperation.Finalize; begin ClearCurrentOperation; end; procedure TWcxArchiveTestArchiveOperation.ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions); begin LogMessage(sMessage, logOptions, lmtError); if (gSkipFileOpError = False) and (iError > E_SUCCESS) then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; end; procedure TWcxArchiveTestArchiveOperation.LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveTestArchiveOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; class procedure TWcxArchiveTestArchiveOperation.ClearCurrentOperation; begin WcxTestArchiveOperationG := nil; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivelistoperation.pas0000644000175000001440000000355715104114162025726 0ustar alexxusersunit uWcxArchiveListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uWcxArchiveFileSource, uFileSource; type TWcxArchiveListOperation = class(TFileSourceListOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses DCOSUtils, uOSUtils, DCStrUtils, uWCXmodule, uFile; constructor TWcxArchiveListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWcxArchiveFileSource := aFileSource as IWcxArchiveFileSource; inherited Create(aFileSource, aPath); end; procedure TWcxArchiveListOperation.MainExecute; var I : Integer; aFile: TFile; Header: TWcxHeader; ArcFileList: TList; CurrFileName : String; // Current file name begin FFiles.Clear; if FWcxArchiveFileSource.Changed then begin FWcxArchiveFileSource.Reload(Path); end; if not FileSource.IsPathAtRoot(Path) then begin aFile := TWcxArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FWcxArchiveFileSource.ArchiveFileList.Clone; try for I := 0 to ArcFileList.Count - 1 do begin CheckOperationState; Header := TWcxHeader(ArcFileList.Items[I]); CurrFileName := PathDelim + Header.FileName; if not IsInPath(Path, CurrFileName, FFlatView, False) then Continue; if FFlatView = False then aFile := TWcxArchiveFileSource.CreateFile(Path, Header) else begin if FPS_ISDIR(Header.FileAttr) then Continue; aFile := TWcxArchiveFileSource.CreateFile(ExtractFilePath(CurrFileName), Header) end; FFiles.Add(aFile); end; finally ArcFileList.Free; end; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivefilesource.pas0000644000175000001440000007663615104114162025202 0ustar alexxusersunit uWcxArchiveFileSource; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, contnrs, syncobjs, DCStringHashListUtf8, WcxPlugin, uWCXmodule, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation, uClassesEx; type TWcxArchiveFileSourceConnection = class; { IWcxArchiveFileSource } IWcxArchiveFileSource = interface(IArchiveFileSource) ['{DB32E8A8-486B-4053-9448-4C145C1A33FA}'] function GetArcFileList: TThreadObjectList; function GetPluginCapabilities: PtrInt; function GetWcxModule: TWcxModule; property ArchiveFileList: TThreadObjectList read GetArcFileList; property PluginCapabilities: PtrInt read GetPluginCapabilities; property WcxModule: TWCXModule read GetWcxModule; end; { TWcxArchiveFileSource } TWcxArchiveFileSource = class(TArchiveFileSource, IWcxArchiveFileSource) private FModuleFileName: String; FPluginCapabilities: PtrInt; FArcFileList : TThreadObjectList; FWcxModule: TWCXModule; FOpenResult: LongInt; procedure SetCryptCallback; function ReadArchive(anArchiveHandle: TArcHandle = 0): Boolean; function GetArcFileList: TThreadObjectList; function GetPluginCapabilities: PtrInt; function GetWcxModule: TWcxModule; function CreateConnection: TFileSourceConnection; procedure CreateConnections; procedure AddToConnectionQueue(Operation: TFileSourceOperation); procedure RemoveFromConnectionQueue(Operation: TFileSourceOperation); procedure AddConnection(Connection: TFileSourceConnection); procedure RemoveConnection(Connection: TFileSourceConnection); {en Searches connections list for a connection assigned to operation. } function FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); procedure ClearCurrentOperation(Operation: TFileSourceOperation); protected function GetPacker: String; override; procedure OperationFinished(Operation: TFileSourceOperation); override; function GetSupportedFileProperties: TFilePropertiesTypes; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; procedure DoReload(const {%H-}PathsToReload: TPathsArray); override; public constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginFileName: String; aWcxPluginCapabilities: PtrInt); reintroduce; constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginModule: TWcxModule; aWcxPluginCapabilities: PtrInt; anArchiveHandle: TArcHandle); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String; WcxHeader: TWCXHeader): TFile; overload; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; class function CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; class function CreateByArchiveType(anArchiveFileSource: IFileSource; anArchiveFileName: String; anArchiveType: String; bIncludeHidden: Boolean = False): IWcxArchiveFileSource; class function CreateByArchiveName(anArchiveFileSource: IFileSource; anArchiveFileName: String; bIncludeHidden: Boolean = False): IWcxArchiveFileSource; {en Returns @true if there is a plugin registered for the archive name. } class function CheckPluginByName(const anArchiveFileName: String): Boolean; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; override; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); override; property ArchiveFileList: TThreadObjectList read FArcFileList; property PluginCapabilities: PtrInt read FPluginCapabilities; property WcxModule: TWCXModule read FWcxModule; end; { TWcxArchiveFileSourceConnection } TWcxArchiveFileSourceConnection = class(TFileSourceConnection) private FWcxModule: TWCXModule; public constructor Create(aWcxModule: TWCXModule); reintroduce; property WcxModule: TWCXModule read FWcxModule; end; EModuleNotLoadedException = class(EFileSourceException); implementation uses LazUTF8, uDebug, DCStrUtils, uGlobs, DCOSUtils, DCDateTimeUtils, uMasks, DCConvertEncoding, DCFileAttributes, FileUtil, uCryptProc, uWcxArchiveListOperation, uWcxArchiveCopyInOperation, uWcxArchiveCopyOutOperation, uWcxArchiveDeleteOperation, uWcxArchiveExecuteOperation, uWcxArchiveTestArchiveOperation, uWcxArchiveCalcStatisticsOperation; const connCopyIn = 0; connCopyOut = 1; connDelete = 2; connTestArchive = 3; var // Always use appropriate lock to access these lists. WcxConnections: TObjectList; // store connections created by Wcx file sources WcxOperationsQueue: TObjectList; // store queued operations, use only under FOperationsQueueLock WcxConnectionsLock: TCriticalSection; // used to synchronize access to connections WcxOperationsQueueLock: TCriticalSection; // used to synchronize access to operations queue function CryptProc({%H-}CryptoNumber: Integer; Mode: Integer; ArchiveName: String; var Password: String): Integer; const cPrefix = 'wcx'; cResult: array[TCryptStoreResult] of Integer = (E_SUCCESS, E_ECREATE, E_EWRITE, E_EREAD, E_NO_FILES); var sGroup, sPassword: AnsiString; MyResult: TCryptStoreResult; begin MyResult:= csrSuccess; sGroup:= ExtractOnlyFileExt(ArchiveName); case Mode of PK_CRYPT_SAVE_PASSWORD: begin MyResult:= PasswordStore.WritePassword(cPrefix, sGroup, ArchiveName, Password); end; PK_CRYPT_LOAD_PASSWORD, PK_CRYPT_LOAD_PASSWORD_NO_UI: begin if (Mode = PK_CRYPT_LOAD_PASSWORD_NO_UI) and (PasswordStore.HasMasterKey = False) then Exit(E_NO_FILES); MyResult:= PasswordStore.ReadPassword(cPrefix, sGroup, ArchiveName, Password); end; PK_CRYPT_COPY_PASSWORD, PK_CRYPT_MOVE_PASSWORD: begin MyResult:= PasswordStore.ReadPassword(cPrefix, sGroup, ArchiveName, sPassword); if MyResult = csrSuccess then begin MyResult:= PasswordStore.WritePassword(cPrefix, sGroup, Password, sPassword); if (MyResult = csrSuccess) and (Mode = PK_CRYPT_MOVE_PASSWORD) then begin if not PasswordStore.DeletePassword(cPrefix, sGroup, ArchiveName) then MyResult:= csrWriteError; end; end; end; PK_CRYPT_DELETE_PASSWORD: begin if not PasswordStore.DeletePassword(cPrefix, sGroup, ArchiveName) then MyResult:= csrWriteError; end; end; Result:= cResult[MyResult]; end; function CryptProcA(CryptoNumber: Integer; Mode: Integer; ArchiveName, Password: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var sArchiveName, sPassword: String; begin sArchiveName:= CeSysToUtf8(StrPas(ArchiveName)); sPassword:= CeSysToUtf8(StrPas(Password)); Result:= CryptProc(CryptoNumber, Mode, sArchiveName, sPassword); if Result = E_SUCCESS then begin if Password <> nil then StrPLCopy(Password, CeUtf8ToSys(sPassword), MaxLen); end; end; function CryptProcW(CryptoNumber: Integer; Mode: Integer; ArchiveName, Password: PWideChar; MaxLen: Integer): Integer; dcpcall; var sArchiveName, sPassword: String; begin sArchiveName:= UTF16ToUTF8(UnicodeString(ArchiveName)); sPassword:= UTF16ToUTF8(UnicodeString(Password)); Result:= CryptProc(CryptoNumber, Mode, sArchiveName, sPassword); if Result = E_SUCCESS then begin if Password <> nil then StrPLCopyW(Password, CeUtf8ToUtf16(sPassword), MaxLen); end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= 1; end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= 1; end; //-------------------------------------------------------------------------------------------------- class function TWcxArchiveFileSource.CreateByArchiveSign( anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; var I: Integer; ModuleFileName: String; bFound: Boolean = False; lOpenResult: LongInt; anArchiveHandle: TArcHandle = 0; WcxPlugin, WcxPrevious: TWcxModule; begin Result := nil; WcxPrevious := nil; // Check if there is a registered plugin for the archive file by content. for I := 0 to gWCXPlugins.Count - 1 do begin if (gWCXPlugins.Enabled[I]) then begin ModuleFileName := gWCXPlugins.FileName[I]; WcxPlugin := gWCXPlugins.LoadModule(ModuleFileName); if Assigned(WcxPlugin) then begin if ((gWCXPlugins.Flags[I] and PK_CAPS_BY_CONTENT) = PK_CAPS_BY_CONTENT) then begin if (WcxPlugin <> WcxPrevious) then begin WcxPrevious:= WcxPlugin; if WcxPlugin.WcxCanYouHandleThisFile(anArchiveFileName) then begin anArchiveHandle:= WcxPlugin.OpenArchiveHandle(anArchiveFileName, PK_OM_LIST, lOpenResult); if (anArchiveHandle <> 0) and (lOpenResult = E_SUCCESS) then begin bFound:= True; Break; end; end; end; end else if ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) = PK_CAPS_HIDE) then begin bFound:= MatchesMask(anArchiveFileName, AllFilesMask + ExtensionSeparator + gWCXPlugins.Ext[I]); if bFound then Break; end; end; end; end; if bFound then begin Result := TWcxArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, WcxPlugin, gWCXPlugins.Flags[I], anArchiveHandle); DCDebug('Found registered plugin ' + ModuleFileName + ' for archive ' + anArchiveFileName); end; end; class function TWcxArchiveFileSource.CreateByArchiveType( anArchiveFileSource: IFileSource; anArchiveFileName: String; anArchiveType: String; bIncludeHidden: Boolean): IWcxArchiveFileSource; var i: Integer; ModuleFileName: String; begin Result := nil; // Check if there is a registered plugin for the extension of the archive file name. for i := 0 to gWCXPlugins.Count - 1 do begin if (gWCXPlugins.Enabled[i]) and SameText(anArchiveType, gWCXPlugins.Ext[i]) and ((bIncludeHidden) or ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) <> PK_CAPS_HIDE)) then begin ModuleFileName := gWCXPlugins.FileName[I]; Result := TWcxArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, ModuleFileName, gWCXPlugins.Flags[I]); DCDebug('Found registered plugin ' + ModuleFileName + ' for archive ' + anArchiveFileName); break; end; end; end; class function TWcxArchiveFileSource.CreateByArchiveName( anArchiveFileSource: IFileSource; anArchiveFileName: String; bIncludeHidden: Boolean): IWcxArchiveFileSource; var i: Integer; aMask: String; ModuleFileName: String; begin Result := nil; // Check if there is a registered plugin for the archive file name. for i := 0 to gWCXPlugins.Count - 1 do begin aMask:= AllFilesMask + ExtensionSeparator + gWCXPlugins.Ext[i]; if (gWCXPlugins.Enabled[i]) and MatchesMask(anArchiveFileName, aMask) and ((bIncludeHidden) or ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) <> PK_CAPS_HIDE)) then begin ModuleFileName := gWCXPlugins.FileName[I]; Result := TWcxArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, ModuleFileName, gWCXPlugins.Flags[I]); DCDebug('Found registered plugin ' + ModuleFileName + ' for archive ' + anArchiveFileName); break; end; end; end; class function TWcxArchiveFileSource.CheckPluginByName(const anArchiveFileName: String): Boolean; var i: Integer; aMask: String; begin for i := 0 to gWCXPlugins.Count - 1 do begin aMask:= AllFilesMask + ExtensionSeparator + gWCXPlugins.Ext[i]; if (gWCXPlugins.Enabled[i]) and MatchesMask(anArchiveFileName, aMask) then Exit(True); end; Result := False; end; // ---------------------------------------------------------------------------- constructor TWcxArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginFileName: String; aWcxPluginCapabilities: PtrInt); begin inherited Create(anArchiveFileSource, anArchiveFileName); FModuleFileName := aWcxPluginFileName; FPluginCapabilities := aWcxPluginCapabilities; FArcFileList := TThreadObjectList.Create; FWcxModule := gWCXPlugins.LoadModule(FModuleFileName); if not Assigned(FWcxModule) then raise EModuleNotLoadedException.Create('Cannot load WCX module ' + FModuleFileName); FOperationsClasses[fsoCopyIn] := TWcxArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWcxArchiveCopyOutOperation.GetOperationClass; SetCryptCallback; if mbFileExists(anArchiveFileName) then begin if not ReadArchive then raise EWcxModuleException.Create(FOpenResult); end; CreateConnections; end; constructor TWcxArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginModule: TWcxModule; aWcxPluginCapabilities: PtrInt; anArchiveHandle: TArcHandle); begin inherited Create(anArchiveFileSource, anArchiveFileName); FPluginCapabilities := aWcxPluginCapabilities; FArcFileList := TThreadObjectList.Create; FWcxModule := aWcxPluginModule; FOperationsClasses[fsoCopyIn] := TWcxArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWcxArchiveCopyOutOperation.GetOperationClass; SetCryptCallback; if mbFileExists(anArchiveFileName) then begin if not ReadArchive(anArchiveHandle) then raise EWcxModuleException.Create(FOpenResult); end; CreateConnections; end; destructor TWcxArchiveFileSource.Destroy; begin inherited Destroy; if Assigned(FArcFileList) then FreeAndNil(FArcFileList); end; class function TWcxArchiveFileSource.CreateFile(const APath: String; WcxHeader: TWCXHeader): TFile; begin Result := TFile.Create(APath); with Result do begin { FileCRC, CompressionMethod, Comment, } AttributesProperty := {TNtfsFileAttributesProperty or Unix?} TFileAttributesProperty.CreateOSAttributes(WcxHeader.FileAttr); if AttributesProperty.IsDirectory then begin SizeProperty := TFileSizeProperty.Create(0); CompressedSizeProperty := TFileCompressedSizeProperty.Create(0); end else begin SizeProperty := TFileSizeProperty.Create(WcxHeader.UnpSize); SizeProperty.IsValid := (WcxHeader.UnpSize >= 0); CompressedSizeProperty := TFileCompressedSizeProperty.Create(WcxHeader.PackSize); CompressedSizeProperty.IsValid := (WcxHeader.PackSize >= 0); end; ModificationTimeProperty := TFileModificationDateTimeProperty.Create(WcxHeader.DateTime); ModificationTimeProperty.IsValid := (WcxHeader.DateTime <= SysUtils.MaxDateTime); // Set name after assigning Attributes property, because it is used to get extension. Name := ExtractFileNameEx(WcxHeader.FileName); end; end; function TWcxArchiveFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoCopyOut, fsoTestArchive, fsoExecute, fsoCalcStatistics]; // by default with FWcxModule do begin if (((FPluginCapabilities and PK_CAPS_NEW) <> 0) or ((FPluginCapabilities and PK_CAPS_MODIFY) <> 0)) and (Assigned(PackFiles) or Assigned(PackFilesW)) then Result:= Result + [fsoCopyIn]; if ((FPluginCapabilities and PK_CAPS_DELETE) <> 0) and (Assigned(DeleteFiles) or Assigned(DeleteFilesW)) then Result:= Result + [fsoDelete]; end; end; function TWcxArchiveFileSource.GetProperties: TFileSourceProperties; begin Result := [fspUsesConnections, fspListFlatView]; end; function TWcxArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties; end; function TWcxArchiveFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; var I: Integer; AFileList: TList; Header: TWCXHeader; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); AFileList:= FArcFileList.LockList; try // Search file list for a directory with name NewDir. for I := 0 to AFileList.Count - 1 do begin Header := TWCXHeader(AFileList.Items[I]); if FPS_ISDIR(Header.FileAttr) and (Length(Header.FileName) > 0) then begin if mbCompareFileNames(NewDir, IncludeTrailingPathDelimiter(GetRootDir() + Header.FileName)) then Exit(True); end; end; finally FArcFileList.UnlockList; end; end; end; function TWcxArchiveFileSource.GetPacker: String; begin Result:= FWcxModule.ModuleName; end; procedure TWcxArchiveFileSource.SetCryptCallback; var AFlags: Integer; begin if not PasswordStore.MasterKeySet then AFlags:= 0 else begin AFlags:= PK_CRYPTOPT_MASTERPASS_SET; end; FWcxModule.WcxSetCryptCallback(0, AFlags, @CryptProcA, @CryptProcW); end; function TWcxArchiveFileSource.GetArcFileList: TThreadObjectList; begin Result := FArcFileList; end; function TWcxArchiveFileSource.GetPluginCapabilities: PtrInt; begin Result := FPluginCapabilities; end; function TWcxArchiveFileSource.GetWcxModule: TWcxModule; begin Result := FWcxModule; end; function TWcxArchiveFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveListOperation.Create(TargetFileSource, TargetPath); end; function TWcxArchiveFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWcxArchiveFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TWcxArchiveCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWcxArchiveFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TWcxArchiveFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWcxArchiveExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TWcxArchiveFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result:= TWcxArchiveTestArchiveOperation.Create(SourceFileSource, theSourceFiles); end; function TWcxArchiveFileSource.CreateCalcStatisticsOperation( var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TWcxArchiveFileSource.ReadArchive(anArchiveHandle: TArcHandle): Boolean; procedure CollectDirs(Path: PAnsiChar; var DirsList: TStringHashListUtf8); var I : Integer; Dir : AnsiString; begin // Scan from the second char from the end, to the second char from the beginning. for I := strlen(Path) - 2 downto 1 do begin if Path[I] = PathDelim then begin SetString(Dir, Path, I); if DirsList.Find(Dir) = -1 then // Add directory and continue scanning for parent directories. DirsList.Add(Dir) else // This directory is already in the list and we assume // that all parent directories are too. Exit; end end; end; var ArcHandle : TArcHandle; Header: TWCXHeader; AFileList: TList; AllDirsList, ExistsDirList : TStringHashListUtf8; I : Integer; NameLength: Integer; ArchiveTime: TDateTime; begin Result:= False; if anArchiveHandle <> 0 then ArcHandle:= anArchiveHandle else begin if not mbFileAccess(ArchiveFileName, fmOpenRead) then begin FOpenResult := E_EREAD; Exit; end; DCDebug('Open Archive'); ArcHandle := WcxModule.OpenArchiveHandle(ArchiveFileName, PK_OM_LIST, FOpenResult); if ArcHandle = 0 then Exit; end; WcxModule.WcxSetChangeVolProc(ArcHandle); WcxModule.WcxSetProcessDataProc(ArcHandle, @ProcessDataProcAG, @ProcessDataProcWG); DCDebug('Get File List'); (*Get File List*) AFileList:= FArcFileList.LockList; try AFileList.Clear; ExistsDirList := TStringHashListUtf8.Create(True); AllDirsList := TStringHashListUtf8.Create(True); try while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do begin // Some plugins end directories with path delimiter. // And not set directory attribute. So delete path // delimiter if present and add directory attribute. NameLength := Length(Header.FileName); if (NameLength > 0) and (Header.FileName[NameLength] = PathDelim) then begin Delete(Header.FileName, NameLength, 1); Header.FileAttr := Header.FileAttr or GENERIC_ATTRIBUTE_FOLDER; end; //********************************************************************** // Workaround for plugins that don't give a list of // folders or the list does not include all of the folders. if FPS_ISDIR(Header.FileAttr) then begin // Collect directories that the plugin supplies. if (ExistsDirList.Find(Header.FileName) < 0) then ExistsDirList.Add(Header.FileName); end; // Collect all directories. CollectDirs(PAnsiChar(Header.FileName), AllDirsList); //********************************************************************** AFileList.Add(Header); // get next file FOpenResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); // Check for errors if FOpenResult <> E_SUCCESS then Exit; end; // while ArchiveTime:= FileTimeToDateTimeEx(mbFileGetTime(ArchiveFileName)); (* if plugin does not give a list of folders *) for I := 0 to AllDirsList.Count - 1 do begin // Add only those directories that were not supplied by the plugin. if ExistsDirList.Find(AllDirsList.List[I]^.Key) < 0 then begin Header := TWCXHeader.Create; try Header.FileName := AllDirsList.List[I]^.Key; Header.ArcName := ArchiveFileName; Header.FileAttr := GENERIC_ATTRIBUTE_FOLDER; Header.DateTime := ArchiveTime; AFileList.Add(Header); except FreeAndNil(Header); end; end; end; Result:= True; finally AllDirsList.Free; ExistsDirList.Free; WcxModule.CloseArchive(ArcHandle); end; finally FArcFileList.UnlockList; end; end; procedure TWcxArchiveFileSource.AddToConnectionQueue(Operation: TFileSourceOperation); begin WcxOperationsQueueLock.Acquire; try if WcxOperationsQueue.IndexOf(Operation) < 0 then WcxOperationsQueue.Add(Operation); finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.RemoveFromConnectionQueue(Operation: TFileSourceOperation); begin WcxOperationsQueueLock.Acquire; try WcxOperationsQueue.Remove(Operation); finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.AddConnection(Connection: TFileSourceConnection); begin WcxConnectionsLock.Acquire; try if WcxConnections.IndexOf(Connection) < 0 then WcxConnections.Add(Connection); finally WcxConnectionsLock.Release; end; end; procedure TWcxArchiveFileSource.RemoveConnection(Connection: TFileSourceConnection); begin WcxConnectionsLock.Acquire; try WcxConnections.Remove(Connection); finally WcxConnectionsLock.Release; end; end; function TWcxArchiveFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin Result := nil; case Operation.ID of fsoCopyIn: Result := WcxConnections[connCopyIn] as TFileSourceConnection; fsoCopyOut: Result := WcxConnections[connCopyOut] as TFileSourceConnection; fsoDelete: Result := WcxConnections[connDelete] as TFileSourceConnection; fsoTestArchive: Result := WcxConnections[connTestArchive] as TFileSourceConnection; else begin Result := CreateConnection; if Assigned(Result) then AddConnection(Result); end; end; if Assigned(Result) then Result := TryAcquireConnection(Result, Operation); // No available connection - wait. if not Assigned(Result) then AddToConnectionQueue(Operation) else // Connection acquired. // The operation may have been waiting in the queue // for the connection, so remove it from the queue. RemoveFromConnectionQueue(Operation); end; procedure TWcxArchiveFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin RemoveFromConnectionQueue(Operation); end; function TWcxArchiveFileSource.CreateConnection: TFileSourceConnection; begin Result := TWcxArchiveFileSourceConnection.Create(FWcxModule); end; procedure TWcxArchiveFileSource.CreateConnections; begin WcxConnectionsLock.Acquire; try if WcxConnections.Count = 0 then begin // Reserve some connections (only once). WcxConnections.Add(CreateConnection); // connCopyIn WcxConnections.Add(CreateConnection); // connCopyOut WcxConnections.Add(CreateConnection); // connDelete WcxConnections.Add(CreateConnection); // connTestArchive end; finally WcxConnectionsLock.Release; end; end; function TWcxArchiveFileSource.FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; var i: Integer; connection: TFileSourceConnection; begin Result := nil; WcxConnectionsLock.Acquire; try for i := 0 to WcxConnections.Count - 1 do begin connection := WcxConnections[i] as TFileSourceConnection; if connection.AssignedOperation = operation then Exit(connection); end; finally WcxConnectionsLock.Release; end; end; procedure TWcxArchiveFileSource.OperationFinished(Operation: TFileSourceOperation); var allowedIDs: TFileSourceOperationTypes = []; connection: TFileSourceConnection; begin ClearCurrentOperation(Operation); connection := FindConnectionByOperation(Operation); if Assigned(connection) then begin connection.Release; // unassign operation WcxConnectionsLock.Acquire; try // If there are operations waiting, take the first one and notify // that a connection is available. // Only check operation types for which there are reserved connections. if Operation.ID in [fsoCopyIn, fsoCopyOut, fsoDelete, fsoTestArchive] then begin Include(allowedIDs, Operation.ID); NotifyNextWaitingOperation(allowedIDs); end else begin WcxConnections.Remove(connection); end; finally WcxConnectionsLock.Release; end; end; end; procedure TWcxArchiveFileSource.NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); var i: Integer; operation: TFileSourceOperation; begin WcxOperationsQueueLock.Acquire; try for i := 0 to WcxOperationsQueue.Count - 1 do begin operation := WcxOperationsQueue.Items[i] as TFileSourceOperation; if (operation.State = fsosWaitingForConnection) and (operation.ID in allowedOps) then begin operation.ConnectionAvailableNotify; Exit; end; end; finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.ClearCurrentOperation(Operation: TFileSourceOperation); begin case Operation.ID of fsoCopyIn: TWcxArchiveCopyInOperation.ClearCurrentOperation; fsoCopyOut: TWcxArchiveCopyOutOperation.ClearCurrentOperation; fsoDelete: TWcxArchiveDeleteOperation.ClearCurrentOperation; fsoTestArchive: TWcxArchiveTestArchiveOperation.ClearCurrentOperation; end; end; procedure TWcxArchiveFileSource.DoReload(const PathsToReload: TPathsArray); begin ReadArchive; end; { TWcxArchiveFileSourceConnection } constructor TWcxArchiveFileSourceConnection.Create(aWcxModule: TWCXModule); begin FWcxModule := aWcxModule; inherited Create; end; initialization WcxConnections := TObjectList.Create(True); // True = destroy objects when destroying list WcxConnectionsLock := TCriticalSection.Create; WcxOperationsQueue := TObjectList.Create(False); // False = don't destroy operations (only store references) WcxOperationsQueueLock := TCriticalSection.Create; finalization FreeAndNil(WcxConnections); FreeAndNil(WcxConnectionsLock); FreeAndNil(WcxOperationsQueue); FreeAndNil(WcxOperationsQueueLock); end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchiveexecuteoperation.pas0000644000175000001440000000362515104114162026411 0ustar alexxusersunit uWcxArchiveExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uWcxArchiveFileSource; type { TWcxArchiveExecuteOperation } TWcxArchiveExecuteOperation = class(TFileSourceExecuteOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; protected procedure DoReloadFileSources; override; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses fPackInfoDlg, uMasks, uGlobs; procedure TWcxArchiveExecuteOperation.DoReloadFileSources; begin // Empty end; constructor TWcxArchiveExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWcxArchiveExecuteOperation.Initialize; begin end; procedure TWcxArchiveExecuteOperation.MainExecute; begin if (Verb <> 'properties') and MatchesMaskList(ExecutableFile.Name, gAutoExtractOpenMask) then FExecuteOperationResult:= fseorYourSelf else begin FExecuteOperationResult:= ShowPackInfoDlg(FWcxArchiveFileSource, ExecutableFile); end; end; procedure TWcxArchiveExecuteOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivedeleteoperation.pas0000644000175000001440000001735615104114162026217 0ustar alexxusersunit uWcxArchiveDeleteOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uFileSource, uFileSourceOperation, uFileSourceOperationUI, uFile, uWcxArchiveFileSource, uGlobs, uLog; type { TWcxArchiveDeleteOperation } TWcxArchiveDeleteOperation = class(TFileSourceDeleteOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics procedure CountFiles(const theFiles: TFiles; FileMask: String); {en Convert TFiles into a string separated with #0 (format used by WCX). } function GetFileList(const theFiles: TFiles): String; protected procedure ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions); procedure LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; end; implementation uses DCOSUtils, DCStrUtils, uDCUtils, uLng, uShowMsg, uWCXmodule, WcxPlugin, uMasks, FileUtil, LazUTF8, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // WCX interface cannot discern different operations (for reporting progress), // so this global variable is used to store currently running operation. // (There may be other running concurrently, but only one may report progress.) WcxDeleteOperation: TWcxArchiveDeleteOperation = nil; function ProcessDataProc(FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxDeleteOperation) then begin if WcxDeleteOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxDeleteOperation.FStatistics do begin CurrentFile := FileName; // Get the number of bytes processed since the previous call if Size > 0 then begin if TotalBytes > 0 then begin TotalFiles := 100; DoneBytes := DoneBytes + Size; DoneFiles := DoneBytes * 100 div TotalBytes; end; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin TotalFiles := 100; DoneFiles := -Size; end; end; WcxDeleteOperation.UpdateStatistics(WcxDeleteOperation.FStatistics); if not WcxDeleteOperation.CheckOperationStateSafe then Exit(0); end; end; end; function ProcessDataProcA(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcW(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TWcxArchiveDeleteOperation.Destroy; begin inherited Destroy; end; procedure TWcxArchiveDeleteOperation.Initialize; begin if Assigned(WcxDeleteOperation) and (WcxDeleteOperation <> Self) then raise Exception.Create('Another WCX delete operation is already running'); WcxDeleteOperation := Self; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; CountFiles(FilesToDelete, '*.*'); end; procedure TWcxArchiveDeleteOperation.MainExecute; var iResult: Integer; WcxModule: TWcxModule; begin WcxModule := FWcxArchiveFileSource.WcxModule; WcxModule.WcxSetChangeVolProc(wcxInvalidHandle); WcxModule.WcxSetProcessDataProc(wcxInvalidHandle, @ProcessDataProcA, @ProcessDataProcW); iResult := WcxModule.WcxDeleteFiles(FWcxArchiveFileSource.ArchiveFileName, GetFileList(FilesToDelete)); // Check for errors. if iResult <> E_SUCCESS then begin // User aborted operation. if iResult = E_EABORTED then Exit; ShowError(Format(rsMsgLogError + rsMsgLogDelete, [FWcxArchiveFileSource.ArchiveFileName + ' - ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FWcxArchiveFileSource.ArchiveFileName]), [log_arc_op], lmtSuccess); end; end; procedure TWcxArchiveDeleteOperation.Finalize; begin ClearCurrentOperation; end; procedure TWcxArchiveDeleteOperation.ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions); begin LogMessage(sMessage, logOptions, lmtError); if (gSkipFileOpError = False) and (iError > E_SUCCESS) then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; end; procedure TWcxArchiveDeleteOperation.LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveDeleteOperation.CountFiles(const theFiles: TFiles; FileMask: String); var i: Integer; Header: TWCXHeader; ArcFileList: TList; begin ArcFileList := FWcxArchiveFileSource.ArchiveFileList.LockList; try for i := 0 to ArcFileList.Count - 1 do begin Header := TWCXHeader(ArcFileList.Items[I]); // Check if the file from the archive fits the selection given via theFiles. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories and MatchesFileList(theFiles, Header.FileName) // Check if it's included in the filelist and ((FileMask = '*.*') or (FileMask = '*') // And name matches file mask or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin Inc(FStatistics.TotalBytes, Header.UnpSize); Inc(FStatistics.TotalFiles, 1); end; end; finally FWcxArchiveFileSource.ArchiveFileList.UnlockList; end; UpdateStatistics(FStatistics); end; function TWcxArchiveDeleteOperation.GetFileList(const theFiles: TFiles): String; var I : Integer; FileName : String; begin Result := ''; for I := 0 to theFiles.Count - 1 do begin // Filenames must be relative to archive root and shouldn't start with path delimiter. FileName := ExcludeFrontPathDelimiter(theFiles[I].FullPath); //ExtractDirLevel(FWcxArchiveFileSource.GetRootString, theFiles[I].FullPath) // Special treatment of directories. if theFiles[i].IsDirectory then // TC ends paths to directories to be deleted with '\*.*' // (which means delete this directory and all files in it). FileName := IncludeTrailingPathDelimiter(FileName) + '*.*'; Result := Result + FileName + #0; end; Result := Result + #0; end; class procedure TWcxArchiveDeleteOperation.ClearCurrentOperation; begin WcxDeleteOperation := nil; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivecopyoutoperation.pas0000644000175000001440000006466115104114162026460 0ustar alexxusersunit uWcxArchiveCopyOutOperation; {$mode objfpc}{$H+} {$if FPC_FULLVERSION >= 30300} {$modeswitch arraytodynarray} {$endif} {$include calling.inc} interface uses Classes, LazFileUtils,SysUtils, DCStringHashListUtf8, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uArchiveCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationUI, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uMasks, uWcxModule, uWcxArchiveFileSource; type { TWcxArchiveCopyOutOperation } TWcxArchiveCopyOutOperation = class(TArchiveCopyOutOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FRenamingFiles: Boolean; FRenameNameMask, FRenameExtMask: String; // Options. FExtractWithoutPath: Boolean; {en Creates neccessary paths before extracting files from archive. Also counts size of all files that will be extracted. @param(Files List of files/directories to extract (relative to archive root).) @param(MaskList Only directories containing files matching this mask will be created.) @param(sDestPath Destination path where the files will be extracted.) @param(CurrentArchiveDir Path inside the archive from where the files will be extracted.) @param(CreatedPaths This list will be filled with absolute paths to directories that were created, together with their attributes.)} procedure CreateDirsAndCountFiles(const theFiles: TFiles; MaskList: TMaskList; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashListUtf8); {en Sets attributes for directories. @param(Paths The list of absolute paths, which attributes are to be set. Each list item's data field must be a pointer to THeaderData, from where the attributes are retrieved.} function SetDirsAttributes(const Paths: TStringHashListUtf8): Boolean; function DoFileExists(Header: TWcxHeader; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions = []); procedure LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); protected FCurrentFilePath: String; FCurrentTargetFilePath: String; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); procedure SetProcessDataProc(hArcData: TArcHandle); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property ExtractWithoutPath: Boolean read FExtractWithoutPath write FExtractWithoutPath; end; implementation uses Forms, LazUTF8, FileUtil, contnrs, DCOSUtils, DCStrUtils, uDCUtils, Math, DateUtils, fWcxArchiveCopyOperationOptions, uFileSystemUtil, uFileProcs, uLng, DCDateTimeUtils, DCBasicTypes, uShowMsg, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxCopyOutOperationG: TWcxArchiveCopyOutOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxCopyOutOperationT: TWcxArchiveCopyOutOperation; function ProcessDataProc(WcxCopyOutOperation: TWcxArchiveCopyOutOperation; FileName: String; Size: LongInt; UpdateName: Pointer): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxCopyOutOperation) then begin if WcxCopyOutOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxCopyOutOperation.FStatistics do begin // Update file name if Assigned(UpdateName) then begin CurrentFileFrom:= FileName; end; // Get the number of bytes processed since the previous call if Size > 0 then begin if CurrentFileDoneBytes < 0 then begin CurrentFileDoneBytes:= 0; end; CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then begin CurrentFileDoneBytes := CurrentFileTotalBytes; end; DoneBytes := DoneBytes + Size; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin if (TotalBytes = 0) then TotalBytes:= -100; DoneBytes := Abs(TotalBytes) * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin if (CurrentFileTotalBytes = 0) then CurrentFileTotalBytes:= -100; CurrentFileDoneBytes := Abs(CurrentFileTotalBytes) * (Int64(-Size) - 1000) div 100; end; end; //DCDebug('CurrentDone = ' + IntToStr(CurrentFileDoneBytes) + ' Done = ' + IntToStr(DoneBytes)); //DCDebug('CurrentTotal = ' + IntToStr(CurrentFileTotalBytes) + ' Total = ' + IntToStr(TotalBytes)); WcxCopyOutOperation.UpdateStatistics(WcxCopyOutOperation.FStatistics); if not WcxCopyOutOperation.AppProcessMessages(True) then Exit(0); end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationG, CeSysToUtf8(StrPas(FileName)), Size, FileName); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size, FileName); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationT, CeSysToUtf8(StrPas(FileName)), Size, FileName); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size, FileName); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWcxArchiveFileSource := aSourceFileSource as IWcxArchiveFileSource; FFileExistsOption := fsoofeNone; FExtractWithoutPath := False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_UNPACK = 0); end; destructor TWcxArchiveCopyOutOperation.Destroy; begin inherited Destroy; end; procedure TWcxArchiveCopyOutOperation.Initialize; var Index: Integer; ACount: Integer; AFileName: String; ArcFileList: TList; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxCopyOutOperationG := Self else WcxCopyOutOperationT := Self; // Extract without path from flat view if not FExtractWithoutPath then begin FExtractWithoutPath := SourceFiles.Flat; end; if efSmartExtract in ExtractFlags then begin ACount:= 0; ArcFileList := FWcxArchiveFileSource.ArchiveFileList.Clone; try for Index := 0 to ArcFileList.Count - 1 do begin AFileName := PathDelim + TWcxHeader(ArcFileList[Index]).FileName; if IsInPath(PathDelim, AFileName, False, False) then begin Inc(ACount); if (ACount > 1) then begin FTargetPath := FTargetPath + ExtractOnlyFileName(FWcxArchiveFileSource.ArchiveFileName) + PathDelim; Break; end; end; end; finally ArcFileList.Free; end; end; // Check rename mask FRenamingFiles := (RenameMask <> '*.*') and (RenameMask <> ''); if FRenamingFiles then SplitFileMask(RenameMask, FRenameNameMask, FRenameExtMask); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TWcxArchiveCopyOutOperation.MainExecute; var ArcHandle: TArcHandle; Header: TWCXHeader; TargetFileName: String; CreatedPaths: TStringHashListUtf8; OpenResult: Longint; iResult: Integer; Files: TFiles = nil; WcxModule: TWcxModule; MaskList: TMaskList; begin WcxModule := FWcxArchiveFileSource.WcxModule; ArcHandle := WcxModule.OpenArchiveHandle(FWcxArchiveFileSource.ArchiveFileName, PK_OM_EXTRACT, OpenResult); if ArcHandle = 0 then begin AskQuestion(uWcxModule.GetErrorMsg(OpenResult), '', [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; // Extract all selected files/folders if (FExtractMask = '') or (FExtractMask = '*.*') or (FExtractMask = '*') then MaskList:= nil else begin MaskList:= TMaskList.Create(FExtractMask); end; // Convert file list so that filenames are relative to archive root. Files := SourceFiles.Clone; ChangeFileListRoot(PathDelim, Files); CreatedPaths := TStringHashListUtf8.Create(True); try // Count total files size and create needed directories. CreateDirsAndCountFiles(Files, MaskList, TargetPath, Files.Path, CreatedPaths); SetProcessDataProc(ArcHandle); WcxModule.WcxSetChangeVolProc(ArcHandle); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do try CheckOperationState; // Now check if the file is to be extracted. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories (we handle them ourselves). and MatchesFileList(Files, Header.FileName) // Check if it's included in the filelist and ((MaskList = nil) or MaskList.Matches(ExtractFileNameEx(Header.FileName))) // And name matches file mask then begin if FExtractWithoutPath then TargetFileName := ExtractFileNameEx(Header.FileName) else TargetFileName := ExtractDirLevel(Files.Path, Header.FileName); if FRenamingFiles then begin TargetFileName := ExtractFilePathEx(TargetFileName) + ApplyRenameMask(ExtractFileNameEx(TargetFileName), FRenameNameMask, FRenameExtMask); end; TargetFileName := TargetPath + ReplaceInvalidChars(TargetFileName); with FStatistics do begin CurrentFileFrom := Header.FileName; CurrentFileTo := TargetFileName; if (Header.UnpSize < 0) then CurrentFileTotalBytes := 0 else begin CurrentFileTotalBytes := Header.UnpSize; end; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; if (DoFileExists(Header, TargetFileName) = fsoofeOverwrite) then iResult := WcxModule.WcxProcessFile(ArcHandle, PK_EXTRACT, EmptyStr, TargetFileName) else iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); if iResult <> E_SUCCESS then begin // User aborted operation. if iResult = E_EABORTED then RaiseAbortOperation; ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' -> ' + TargetFileName + ' : ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName +' -> ' + TargetFileName]), [log_arc_op], lmtSuccess); end; // Success with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; end // Extract else // Skip begin iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); //Check for errors if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' -> ' + TargetFileName + ' : ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end; end; // Skip finally FreeAndNil(Header); end; finally // Close archive, ignore function result, see: // https://www.ghisler.ch/board/viewtopic.php?p=299809#p299809 iResult := WcxModule.CloseArchive(ArcHandle); // Execute after CloseArchive if (ExceptObject = nil) and (FExtractWithoutPath = False) then begin SetDirsAttributes(CreatedPaths); end; // Free memory FreeAndNil(Files); FreeAndNil(MaskList); FreeAndNil(CreatedPaths); end; end; procedure TWcxArchiveCopyOutOperation.Finalize; begin ClearCurrentOperation; end; procedure TWcxArchiveCopyOutOperation.CreateDirsAndCountFiles( const theFiles: TFiles; MaskList: TMaskList; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashListUtf8); var // List of paths that we know must be created. PathsToCreate: TStringHashListUtf8; // List of possible directories to create with their attributes. // This hash list is created to speed up searches for attributes in archive file list. DirsAttributes: TStringHashListUtf8; i: Integer; CurrentFileName: String; Header: TWCXHeader; Directories: TStringList = nil; PathIndex: Integer; ListIndex: Integer; TargetDir: String; FileList: TObjectList; begin { First, collect all the paths that need to be created and their attributes. } PathsToCreate := TStringHashListUtf8.Create(True); DirsAttributes := TStringHashListUtf8.Create(True); FileList := FWcxArchiveFileSource.ArchiveFileList.LockList; try for i := 0 to FileList.Count - 1 do begin Header := TWCXHeader(FileList.Items[i]); // Check if the file from the archive fits the selection given via SourceFiles. if not MatchesFileList(theFiles, Header.FileName) then Continue; if FPS_ISDIR(Header.FileAttr) then begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, Header.FileName); CurrentFileName := ReplaceInvalidChars(CurrentFileName); // Save this directory and a pointer to its entry. DirsAttributes.Add(CurrentFileName, Header); // If extracting all files and directories, add this directory // to PathsToCreate so that empty directories are also created. if (MaskList = nil) then begin // Paths in PathsToCreate list must end with path delimiter. CurrentFileName := IncludeTrailingPathDelimiter(CurrentFileName); if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end else begin if ((MaskList = nil) or MaskList.Matches(ExtractFileNameEx(Header.FileName))) then begin if (Header.UnpSize > 0) then begin Inc(FStatistics.TotalBytes, Header.UnpSize); end; Inc(FStatistics.TotalFiles, 1); CurrentFileName := ExtractDirLevel(CurrentArchiveDir, ExtractFilePathEx(Header.FileName)); CurrentFileName := ReplaceInvalidChars(CurrentFileName); // If CurrentFileName is empty now then it was a file in current archive // directory, therefore we don't have to create any paths for it. if Length(CurrentFileName) > 0 then if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end; end; finally FWcxArchiveFileSource.ArchiveFileList.UnlockList; end; if FExtractWithoutPath then Exit; { Second, create paths and save which paths were created and their attributes. } Directories := TStringList.Create; try sDestPath := IncludeTrailingPathDelimiter(sDestPath); // Create path to destination directory (we don't have attributes for that). mbForceDirectory(sDestPath); CreatedPaths.Clear; for PathIndex := 0 to PathsToCreate.Count - 1 do begin Directories.Clear; // Create also all parent directories of the path to create. // This adds directories to list in order from the outer to inner ones, // for example: dir, dir/dir2, dir/dir2/dir3. if GetDirs(PathsToCreate.List[PathIndex]^.Key, Directories) <> -1 then try for i := 0 to Directories.Count - 1 do begin TargetDir := sDestPath + Directories.Strings[i]; if (CreatedPaths.Find(TargetDir) = -1) and (not DirPathExists(TargetDir)) then begin if mbForceDirectory(TargetDir) = False then begin // Error, cannot create directory. Break; // Don't try to create subdirectories. end else begin // Retrieve attributes for this directory, if they are stored. ListIndex := DirsAttributes.Find(Directories.Strings[i]); if ListIndex <> -1 then Header := TWcxHeader(DirsAttributes.List[ListIndex]^.Data) else Header := nil; CreatedPaths.Add(TargetDir, Header); end; end; end; except end; end; finally FreeAndNil(PathsToCreate); FreeAndNil(DirsAttributes); FreeAndNil(Directories); end; end; function TWcxArchiveCopyOutOperation.SetDirsAttributes(const Paths: TStringHashListUtf8): Boolean; var PathIndex: Integer; TargetDir: String; Header: TWCXHeader; Time: TFileTimeEx; begin Result := True; for PathIndex := 0 to Paths.Count - 1 do begin // Get attributes. Header := TWCXHeader(Paths.List[PathIndex]^.Data); if Assigned(Header) then begin TargetDir := Paths.List[PathIndex]^.Key; try // Restore attributes mbFileSetAttr(TargetDir, Header.FileAttr); Time := DateTimeToFileTimeEx(Header.DateTime); // Set creation, modification time mbFileSetTimeEx(TargetDir, Time, Time, Time); except Result := False; end; end; end; end; procedure TWcxArchiveCopyOutOperation.QuestionActionHandler( Action: TFileSourceOperationUIAction); var aFile: TFile; begin if Action = fsouaCompare then begin aFile := TFile.Create(''); try aFile.FullPath := IncludeFrontPathDelimiter(FCurrentFilePath); ShowCompareFilesUI(aFile, FCurrentTargetFilePath); finally aFile.Free; end; end; end; function TWcxArchiveCopyOutOperation.DoFileExists(Header: TWcxHeader; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const Responses: array[0..10] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel, fsouaCompare, fsourRenameSource, fsourAutoRenameSource); ResponsesNoCompare: array[0..9] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel, fsourRenameSource, fsourAutoRenameSource); ResponsesNoSize: array[0..8] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourAutoRenameSource, fsourOverwriteOlder, fsourCancel, fsouaCompare); ResponsesNoSizeNoCompare: array[0..7] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourAutoRenameSource, fsourOverwriteOlder, fsourCancel); var PossibleResponses: TFileSourceOperationUIResponses; Answer: Boolean; Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if CompareDateTime(Header.DateTime, FileTimeToDateTimeEx(mbFileGetTime(AbsoluteTargetFileName))) = GreaterThanValue then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if Header.UnpSize > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if Header.UnpSize < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin if not mbFileExists(AbsoluteTargetFileName) then Result:= fsoofeOverwrite else case FFileExistsOption of fsoofeNone: repeat Answer := True; // Can't asynchoronously extract file for comparison when multiple operations are not supported // TODO: implement synchronous CopyOut to temp directory or close the connection until the question is answered case FNeedsConnection of True : begin if (Header.UnpSize < 0) then PossibleResponses := ResponsesNoSizeNoCompare else begin PossibleResponses := ResponsesNoCompare; end; end; False: begin if (Header.UnpSize < 0) then PossibleResponses := ResponsesNoSize else begin PossibleResponses := Responses; end; end; end; Message:= FileExistsMessage(AbsoluteTargetFileName, Header.FileName, Header.UnpSize, Header.DateTime); FCurrentFilePath := Header.FileName; FCurrentTargetFilePath := AbsoluteTargetFileName; case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourAutoRenameSource: begin Result:= fsoofeOverwrite; FFileExistsOption:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName, FPS_ISDIR(Header.FileAttr)); end; fsourRenameSource: begin Message:= ExtractFileNameEx(AbsoluteTargetFileName); Answer:= ShowInputQuery(Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeOverwrite; AbsoluteTargetFileName:= ExtractFilePathEx(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: RaiseAbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; fsoofeAutoRenameSource: begin Result:= fsoofeOverwrite; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName, FPS_ISDIR(Header.FileAttr)); end; else begin Result := FFileExistsOption; end; end; end; procedure TWcxArchiveCopyOutOperation.ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions); begin LogMessage(sMessage, logOptions, lmtError); if (gSkipFileOpError = False) and (iError > E_SUCCESS) then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; end; procedure TWcxArchiveCopyOutOperation.LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveCopyOutOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; class procedure TWcxArchiveCopyOutOperation.ClearCurrentOperation; begin WcxCopyOutOperationG := nil; end; class function TWcxArchiveCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TWcxArchiveCopyOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivecopyinoperation.pas0000644000175000001440000004246315104114162026253 0ustar alexxusersunit uWcxArchiveCopyInOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, DCStringHashListUtf8, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFile, uWcxModule, uWcxArchiveFileSource, uArchiveCopyOperation, uFileSourceOperationUI, uFileSourceOperationOptions, uFileSourceOperationOptionsUI; type { TWcxArchiveCopyInOperation } TWcxArchiveCopyInOperation = class(TArchiveCopyInOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FFileList: TStringHashListUtf8; {en Convert TFiles into a string separated with #0 (format used by WCX). } function GetFileList(const theFiles: TFiles): String; procedure SetTarBefore(const AValue: Boolean); procedure ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions = []); procedure LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure DeleteFiles(const aFiles: TFiles); protected function Tar: Boolean; procedure SetProcessDataProc(hArcData: TArcHandle); protected FCurrentFile: TFile; FCurrentTargetFilePath: String; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function FileExistsMessage(aSourceFile: TFile; aTargetHeader: TWcxHeader): String; function FileExists(aSourceFile: TFile; aTargetHeader: TWcxHeader): TFileSourceOperationOptionFileExists; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property PackingFlags: Integer read FPackingFlags write FPackingFlags; property TarBefore: Boolean read FTarBefore write SetTarBefore; end; implementation uses LazUTF8, FileUtil, DCStrUtils, uDCUtils, uLng, fWcxArchiveCopyOperationOptions, uFileSystemFileSource, DCOSUtils, uTarWriter, uClassesEx, DCConvertEncoding, DCDateTimeUtils, uArchiveFileSourceUtil; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxCopyInOperationG: TWcxArchiveCopyInOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxCopyInOperationT: TWcxArchiveCopyInOperation; function ProcessDataProc(WcxCopyInOperation: TWcxArchiveCopyInOperation; FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxCopyInOperation) then begin if WcxCopyInOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxCopyInOperation.FStatistics do begin CurrentFileFrom:= FileName; // Get the number of bytes processed since the previous call if Size > 0 then begin DoneBytes := DoneBytes + Size; if TotalFiles = 1 then begin CurrentFileDoneBytes := DoneBytes; CurrentFileTotalBytes := TotalBytes; end; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin // Show only percent CurrentFileTotalBytes := -100; CurrentFileDoneBytes := Int64(-Size) - 1000; end; end; WcxCopyInOperation.UpdateStatistics(WcxCopyInOperation.FStatistics); if not WcxCopyInOperation.AppProcessMessages(True) then Exit(0); end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationG, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationT, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; FPackingFlags := PK_PACK_SAVE_PATHS; FTarBefore:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_PACK = 0); FFileList:= TStringHashListUtf8.Create(True); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin DoneFiles := -1; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; end; destructor TWcxArchiveCopyInOperation.Destroy; var Index: Integer; begin inherited Destroy; for Index:= 0 to FFileList.Count - 1 do begin TObject(FFileList.List[Index]^.Data).Free; end; FreeAndNil(FFileList); FreeAndNil(FFullFilesTree); end; procedure TWcxArchiveCopyInOperation.Initialize; var Index: Integer; Item: TObjectEx; AFileList: TList; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxCopyInOperationG := Self else WcxCopyInOperationT := Self; // Gets full list of files (recursive) FillAndCount(SourceFiles, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // Need to check file existence if FFileExistsOption <> fsoofeOverwrite then begin AFileList:= FWcxArchiveFileSource.ArchiveFileList.LockList; try // Populate archive file list for Index:= 0 to AFileList.Count - 1 do begin Item:= TObjectEx(AFileList[Index]).Clone; FFileList.Add(UTF8LowerCase(TWcxHeader(Item).FileName), Item); end; finally FWcxArchiveFileSource.ArchiveFileList.UnlockList; end; end; end; procedure TWcxArchiveCopyInOperation.MainExecute; var iResult: Integer; sFileList: String; sDestPath: String; WcxModule: TWcxModule; begin // Put to TAR archive if needed if FTarBefore and Tar then Exit; WcxModule := FWcxArchiveFileSource.WcxModule; sDestPath := ExcludeFrontPathDelimiter(TargetPath); sDestPath := ExcludeTrailingPathDelimiter(sDestPath); sDestPath := sDestPath; with FStatistics do begin if FTarBefore then CurrentFileDoneBytes := -1; CurrentFileTo:= FWcxArchiveFileSource.ArchiveFileName; UpdateStatistics(FStatistics); end; SetProcessDataProc(wcxInvalidHandle); WcxModule.WcxSetChangeVolProc(wcxInvalidHandle); // Convert TFiles into String; sFileList:= GetFileList(FFullFilesTree); // Nothing to pack (user skip all files) if sFileList = #0 then Exit; iResult := WcxModule.WcxPackFiles( FWcxArchiveFileSource.ArchiveFileName, sDestPath, // no trailing path delimiter here IncludeTrailingPathDelimiter(FFullFilesTree.Path), // end with path delimiter here sFileList, PackingFlags); // Check for errors. if iResult <> E_SUCCESS then begin // User aborted operation. if iResult = E_EABORTED then RaiseAbortOperation; ShowError(Format(rsMsgLogError + rsMsgLogPack, [FWcxArchiveFileSource.ArchiveFileName + ' : ' + GetErrorMsg(iResult)]), iResult, [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogPack, [FWcxArchiveFileSource.ArchiveFileName]), [log_arc_op], lmtSuccess); FStatistics.DoneFiles:= FStatistics.TotalFiles; UpdateStatistics(FStatistics); end; // Delete temporary TAR archive if needed if FTarBefore then mbDeleteFile(FTarFileName); end; procedure TWcxArchiveCopyInOperation.Finalize; begin ClearCurrentOperation; end; function TWcxArchiveCopyInOperation.GetFileList(const theFiles: TFiles): String; var I: Integer; SubPath: String; FileName: String; Header: TWCXHeader; ArchiveExists: Boolean; begin Result := ''; ArchiveExists := FFileList.Count > 0; SubPath := UTF8LowerCase(ExcludeFrontPathDelimiter(TargetPath)); for I := 0 to theFiles.Count - 1 do begin // Filenames must be relative to the current directory. FileName := ExtractDirLevel(theFiles.Path, theFiles[I].FullPath); // Special treatment of directories. if theFiles[i].IsDirectory then begin // TC ends paths to directories to be packed with '\'. FileName := IncludeTrailingPathDelimiter(FileName); end // Need to check file existence else if ArchiveExists then begin Header := TWcxHeader(FFileList[SubPath + UTF8LowerCase(FileName)]); if Assigned(Header) then begin if FileExists(theFiles[I], Header) = fsoofeSkip then Continue; end; end; Result := Result + FileName + #0; end; Result := Result + #0; end; procedure TWcxArchiveCopyInOperation.SetTarBefore(const AValue: Boolean); begin with FWcxArchiveFileSource, FWcxArchiveFileSource.WcxModule do begin FTarBefore:= AValue; if FTarBefore and Assigned(PackToMem) and (PluginCapabilities and PK_CAPS_MEMPACK <> 0) then FNeedsConnection:= (BackgroundFlags and BACKGROUND_MEMPACK = 0) else FNeedsConnection:= (BackgroundFlags and BACKGROUND_PACK = 0); end; end; procedure TWcxArchiveCopyInOperation.ShowError(const sMessage: String; iError: Integer; logOptions: TLogOptions); begin LogMessage(sMessage, logOptions, lmtError); if (gSkipFileOpError = False) and (iError > E_SUCCESS) then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; end; procedure TWcxArchiveCopyInOperation.LogMessage(const sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveCopyInOperation.DeleteFiles(const aFiles: TFiles); var I: Integer; aFile: TFile; begin for I:= aFiles.Count - 1 downto 0 do begin aFile:= aFiles[I]; if aFile.IsDirectory then mbRemoveDir(aFile.FullPath) else mbDeleteFile(aFile.FullPath); end; end; procedure TWcxArchiveCopyInOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; procedure TWcxArchiveCopyInOperation.QuestionActionHandler( Action: TFileSourceOperationUIAction); begin if Action = fsouaCompare then ShowCompareFilesUI(FCurrentFile, IncludeFrontPathDelimiter(FCurrentTargetFilePath)); end; function TWcxArchiveCopyInOperation.FileExistsMessage(aSourceFile: TFile; aTargetHeader: TWcxHeader): String; begin Result:= rsMsgFileExistsOverwrite + LineEnding + aTargetHeader.FileName + LineEnding; Result:= Result + Format(rsMsgFileExistsFileInfo, [IntToStrTS(aTargetHeader.UnpSize), DateTimeToStr(aTargetHeader.DateTime)]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + aSourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [IntToStrTS(aSourceFile.Size), DateTimeToStr(aSourceFile.ModificationTime)]); end; function TWcxArchiveCopyInOperation.FileExists(aSourceFile: TFile; aTargetHeader: TWcxHeader): TFileSourceOperationOptionFileExists; const PossibleResponses: array[0..8] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsouaCompare, fsourCancel); function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aSourceFile.ModificationTime > aTargetHeader.DateTime then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aSourceFile.Size > aTargetHeader.UnpSize then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aSourceFile.Size < aTargetHeader.UnpSize then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: begin FCurrentFile := aSourceFile; FCurrentTargetFilePath := aTargetHeader.FileName; case AskQuestion(FileExistsMessage(aSourceFile, aTargetHeader), '', PossibleResponses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourNone, fsourCancel: RaiseAbortOperation; end; end; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else Result := FFileExistsOption; end; end; class procedure TWcxArchiveCopyInOperation.ClearCurrentOperation; begin WcxCopyInOperationG := nil; end; class function TWcxArchiveCopyInOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TWcxArchiveCopyInOperationOptionsUI; end; function TWcxArchiveCopyInOperation.Tar: Boolean; var TarWriter: TTarWriter = nil; begin with FWcxArchiveFileSource, FWcxArchiveFileSource.WcxModule do begin if Assigned(PackToMem) and (PluginCapabilities and PK_CAPS_MEMPACK <> 0) then begin FTarFileName:= ArchiveFileName; TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, WcxModule ); Result:= True; end else begin FTarFileName:= RemoveFileExt(ArchiveFileName); TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics ); Result:= False; end; end; try if TarWriter.ProcessTree(FFullFilesTree, FStatistics) then begin if Result and (PackingFlags and PK_PACK_MOVE_FILES <> 0) then DeleteFiles(FFullFilesTree) else begin // Fill file list with tar archive file FFullFilesTree.Clear; FFullFilesTree.Path:= ExtractFilePath(FTarFileName); FFullFilesTree.Add(TFileSystemFileSource.CreateFileFromFile(FTarFileName)); end; end; finally FreeAndNil(TarWriter); end; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/uwcxarchivecalcstatisticsoperation.pas0000644000175000001440000000716615104114162027770 0ustar alexxusersunit uWcxArchiveCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uWcxArchiveFileSource, uFile; type TWcxArchiveCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCOSUtils, uWcxModule, DCStrUtils, DCDateTimeUtils; constructor TWcxArchiveCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); FWcxArchiveFileSource:= aTargetFileSource as IWcxArchiveFileSource; end; destructor TWcxArchiveCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TWcxArchiveCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TWcxArchiveCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TWcxArchiveCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TWcxArchiveCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var I: Integer; AFileList: TList; Header: TWCXHeader; CurrFileName: String; ModificationTime: TDateTime; begin AFileList:= FWcxArchiveFileSource.ArchiveFileList.LockList; try for I:= 0 to AFileList.Count - 1 do begin Header := TWCXHeader(AFileList.Items[I]); CurrFileName := PathDelim + Header.FileName; if not IsInPath(srcPath, CurrFileName, True, False) then Continue; if FPS_ISDIR(Header.FileAttr) then Inc(FStatistics.Directories) else if FPS_ISLNK(Header.FileAttr) then Inc(FStatistics.Links) else begin Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + Header.UnpSize; ModificationTime:= Header.DateTime; if ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := ModificationTime; if ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := ModificationTime; end; end; finally FWcxArchiveFileSource.ArchiveFileList.UnlockList; end; end; end. doublecmd-1.1.30/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.pas0000644000175000001440000000611215104114162027310 0ustar alexxusersunit fWcxArchiveCopyOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, uWcxArchiveFileSource, uWcxArchiveCopyInOperation; type { TWcxArchiveCopyOperationOptionsUI } TWcxArchiveCopyOperationOptionsUI = class(TFileSourceOperationOptionsUI) btnConfig: TButton; cbEncrypt: TCheckBox; cmbFileExists: TComboBox; lblFileExists: TLabel; pnlCheckboxes: TPanel; pnlComboBoxes: TPanel; procedure btnConfigClick(Sender: TObject); private FFileSource: IWcxArchiveFileSource; procedure SetOperationOptions(CopyInOperation: TWcxArchiveCopyInOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; { TWcxArchiveCopyInOperationOptionsUI } TWcxArchiveCopyInOperationOptionsUI = class(TWcxArchiveCopyOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; implementation {$R *.lfm} uses Dialogs, DCStrUtils, WcxPlugin, uLng, uGlobs, uFileSourceOperationOptions, uFileSourceCopyOperation; { TWcxArchiveCopyInOperationOptionsUI } constructor TWcxArchiveCopyInOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin FFileSource := AFileSource as IWcxArchiveFileSource; inherited Create(AOwner, AFileSource); pnlCheckboxes.Visible := True; btnConfig.Visible := True; end; { TWcxArchiveCopyOperationOptionsUI } procedure TWcxArchiveCopyOperationOptionsUI.btnConfigClick(Sender: TObject); begin try FFileSource.WcxModule.VFSConfigure(Handle); except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; end; procedure TWcxArchiveCopyOperationOptionsUI.SetOperationOptions( CopyInOperation: TWcxArchiveCopyInOperation); var AFlags: Integer; begin AFlags := CopyInOperation.PackingFlags; if cbEncrypt.Checked then AFlags := AFlags or PK_PACK_ENCRYPT; CopyInOperation.PackingFlags := AFlags; end; constructor TWcxArchiveCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; ParseLineToList(rsFileOpCopyMoveFileExistsOptions, cmbFileExists.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; end; procedure TWcxArchiveCopyOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TWcxArchiveCopyOperationOptionsUI.SetOperationOptions(Operation: TObject); begin with Operation as TFileSourceCopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; if Operation is TWcxArchiveCopyInOperation then SetOperationOptions(TWcxArchiveCopyInOperation(Operation)); end; end. doublecmd-1.1.30/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lrj0000644000175000001440000000101115104114162027305 0ustar alexxusers{"version":1,"strings":[ {"hash":111687171,"name":"twcxarchivecopyoperationoptionsui.lblfileexists.caption","sourcebytes":[87,104,101,110,32,102,105,108,101,32,101,120,105,115,116,115],"value":"When file exists"}, {"hash":77915316,"name":"twcxarchivecopyoperationoptionsui.cbencrypt.caption","sourcebytes":[69,110,99,114,38,121,112,116],"value":"Encr&ypt"}, {"hash":214649477,"name":"twcxarchivecopyoperationoptionsui.btnconfig.caption","sourcebytes":[67,111,110,38,102,105,103,117,114,101],"value":"Con&figure"} ]} doublecmd-1.1.30/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lfm0000644000175000001440000000404615104114162027307 0ustar alexxusersobject WcxArchiveCopyOperationOptionsUI: TWcxArchiveCopyOperationOptionsUI Left = 0 Height = 158 Top = 0 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 TabOrder = 0 DesignLeft = 114 DesignTop = 311 object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner Left = 0 Height = 23 Top = 0 Width = 187 AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 23 ClientWidth = 187 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 15 Top = 4 Width = 82 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox Left = 87 Height = 23 Top = 0 Width = 100 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes Left = 195 Height = 19 Top = 0 Width = 60 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone BevelWidth = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 19 ClientWidth = 60 TabOrder = 1 Visible = False object cbEncrypt: TCheckBox Left = 0 Height = 19 Top = 0 Width = 60 Caption = 'Encr&ypt' TabOrder = 0 end end object btnConfig: TButton AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlComboBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 231 Height = 33 Top = 23 Width = 87 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'Con&figure' OnClick = btnConfigClick TabOrder = 2 Visible = False end end doublecmd-1.1.30/src/filesources/vfs/0000755000175000001440000000000015104114162016475 5ustar alexxusersdoublecmd-1.1.30/src/filesources/vfs/uvfslistoperation.pas0000644000175000001440000000344715104114162023012 0ustar alexxusersunit uVfsListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uVfsFileSource, uFileSource; type TVfsListOperation = class(TFileSourceListOperation) private FVfsFileSource: IVfsFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, DCFileAttributes, uFile, uVfsModule, uDCUtils; constructor TVfsListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FVfsFileSource := aFileSource as IVfsFileSource; inherited Create(aFileSource, aPath); end; procedure TVfsListOperation.MainExecute; var I : Integer; aFile: TFile; APath: String; VfsModule: TVfsModule; begin FFiles.Clear; with FVfsFileSource do for I := 0 to VfsFileList.Count - 1 do begin CheckOperationState; if VfsFileList.Enabled[I] then begin aFile := TVfsFileSource.CreateFile(Path); aFile.Name:= VfsFileList.Name[I]; aFile.Attributes:= FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_VIRTUAL; aFile.LinkProperty.LinkTo:= mbExpandFileName(VfsFileList.FileName[I]); FFiles.Add(aFile); end; end; for I:= 0 to gVfsModuleList.Count - 1 do begin CheckOperationState; VfsModule:= TVfsModule(gVfsModuleList.Objects[I]); if VfsModule.Visible then begin aFile := TVfsFileSource.CreateFile(Path); aFile.Name:= gVfsModuleList.Strings[I]; if VfsModule.FileSourceClass.GetMainIcon(APath) then begin aFile.LinkProperty.LinkTo:= mbExpandFileName(APath); aFile.Attributes:= FILE_ATTRIBUTE_OFFLINE or FILE_ATTRIBUTE_VIRTUAL; end; FFiles.Add(aFile); end; end; end; end. doublecmd-1.1.30/src/filesources/vfs/uvfsfilesource.pas0000644000175000001440000000633415104114162022254 0ustar alexxusersunit uVfsFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uWFXModule, uFileSourceProperty, uFileSourceOperationTypes, uVirtualFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile; type IVfsFileSource = interface(IVirtualFileSource) ['{87D0A3EF-C168-44C1-8B10-3AEC0753846A}'] function GetWfxModuleList: TWFXModuleList; property VfsFileList: TWFXModuleList read GetWfxModuleList; end; { TVfsFileSource } TVfsFileSource = class(TVirtualFileSource, IVfsFileSource) private FWFXModuleList: TWFXModuleList; function GetWfxModuleList: TWFXModuleList; protected function GetSupportedFileProperties: TFilePropertiesTypes; override; public constructor Create(aWFXModuleList: TWFXModuleList); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; function GetRootDir(sPath : String): String; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; property VfsFileList: TWFXModuleList read FWFXModuleList; end; implementation uses LCLProc, uVfsListOperation, uVfsExecuteOperation; constructor TVfsFileSource.Create(aWFXModuleList: TWFXModuleList); begin inherited Create; FWFXModuleList:= TWFXModuleList.Create; FWFXModuleList.Assign(aWFXModuleList); end; destructor TVfsFileSource.Destroy; begin FreeAndNil(FWFXModuleList); inherited Destroy; end; class function TVfsFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin LinkProperty:= TFileLinkProperty.Create; AttributesProperty := TNtfsFileAttributesProperty.Create; end; end; function TVfsFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoExecute]; end; function TVfsFileSource.GetProperties: TFileSourceProperties; begin Result := [fspVirtual]; end; function TVfsFileSource.GetRootDir(sPath: String): String; begin Result:= 'vfs:' + PathDelim; end; function TVfsFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpAttributes, fpLink]; end; function TVfsFileSource.GetWfxModuleList: TWFXModuleList; begin Result := FWFXModuleList; end; function TVfsFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TVfsListOperation.Create(TargetFileSource, TargetPath); end; function TVfsFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TVfsExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; end. doublecmd-1.1.30/src/filesources/vfs/uvfsexecuteoperation.pas0000644000175000001440000000365415104114162023501 0ustar alexxusersunit uVfsExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uVfsFileSource; type { TVfsExecuteOperation } TVfsExecuteOperation = class(TFileSourceExecuteOperation) private FVfsFileSource: IVfsFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses Forms, uWfxModule, uDCUtils, uGlobs; constructor TVfsExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FVfsFileSource := aTargetFileSource as IVfsFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TVfsExecuteOperation.Initialize; begin end; procedure TVfsExecuteOperation.MainExecute; var Index: Integer; WfxModule: TWfxModule; begin FExecuteOperationResult:= fseorSuccess; if SameText(Verb, 'properties') then with FVfsFileSource do begin Index:= VfsFileList.FindFirstEnabledByName(RelativePath); if Index >= 0 then begin WfxModule:= gWFXPlugins.LoadModule(VfsFileList.FileName[Index]); if Assigned(WfxModule) then begin WfxModule.VFSInit; WfxModule.VFSConfigure(Application.MainForm.Tag); end; end; end; end; procedure TVfsExecuteOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/uvirtualfilesource.pas0000644000175000001440000000066615104114162022350 0ustar alexxusersunit uVirtualFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type IVirtualFileSource = interface(IFileSource) end; {en Base class for any virtual file source (this can be any list of files, internal lists, temporary, links to favourite files, results from search queries, etc.). } TVirtualFileSource = class(TFileSource, IVirtualFileSource) end; implementation end. doublecmd-1.1.30/src/filesources/usampleforconfiglistoperation.pas0000644000175000001440000000332015104114162024562 0ustar alexxusersunit uSampleForConfigListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uSampleForConfigFileSource; type TSampleForConfigListOperation = class(TFileSourceListOperation) private FFileSource: ISampleForConfigFileSource; public constructor Create(aFileSource: IFileSource; aPath: string); override; procedure MainExecute; override; end; implementation uses uFile; constructor TSampleForConfigListOperation.Create(aFileSource: IFileSource; aPath: string); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as ISampleForConfigFileSource; inherited Create(aFileSource, aPath); end; procedure TSampleForConfigListOperation.MainExecute; var FakeFile: TFile; IndexFile: integer; const BaseName: array[0..11] of string = ('config', 'Step', 'Prog', 'setup', 'Report', 'Skip', 'Closer', 'Face', 'Win', 'Unix', 'App', 'Klopp'); SuffixName: array[0..11] of string = ('red', 'new', 'fst', 'South', 'slow', 'Cheap', 'dc', 'config', 'stop', 'Batch', 'Bash', 'rgctvcvt'); ExtName: array[0..11] of string = ('bin', 'exe', 'txt', 's19', 'Rar', 'zip', 'xlsx', 'pdf', 'cpp', 'pas', 'DPR', 'tmp'); begin FFiles.Clear; randseed:=Trunc(now); // Random from a day to another, but not during the day. So during the day, user will do refresh and always the same thing is re-shown. for Indexfile := 1 to 30 do begin FakeFile := TSampleForConfigFileSource.CreateFile(SAMPLE_PATH); FakeFile.Name := BaseName[random(12)] + SuffixName[random(12)] + '.' + ExtName[random(12)]; FakeFile.Size := 5000 + random(1000000); FFiles.Add(FakeFile); end; end; end. doublecmd-1.1.30/src/filesources/usampleforconfigfilesource.pas0000644000175000001440000000566415104114162024043 0ustar alexxusersunit uSampleForConfigFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uLocalFileSource, uFileSourceOperation, uFileSourceProperty, uFileSourceOperationTypes, uFileProperty; const SAMPLE_PATH = PathDelim+PathDelim+'DoubleCommander'+PathDelim; type ISampleForConfigFileSource = interface(ILocalFileSource) ['{C7D75C6D-38B6-4038-B3C4-4BB200A6FF28}'] end; {en File source for configuration purpose, just fake files. } { TSampleForConfigFileSource } TSampleForConfigFileSource = class(TLocalFileSource, ISampleForConfigFileSource) protected function GetSupportedFileProperties: TFilePropertiesTypes; override; public function GetRootDir(sPath : String): String; override; function GetProperties: TFileSourceProperties; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; class function CreateFile(const APath: String): TFile; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; end; implementation uses uFileSystemFileSource, uSampleForConfigListOperation, uLng; function TSampleForConfigFileSource.GetRootDir(sPath: String): String; begin Result:=sPath; end; function TSampleForConfigFileSource.GetProperties: TFileSourceProperties; begin Result := [fspVirtual]; end; function TSampleForConfigFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result := true; end; function TSampleForConfigFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TSampleForConfigListOperation.Create(Self, TargetPath); end; function TSampleForConfigFileSource.GetLocalName(var aFile: TFile): Boolean; begin Result:= True; end; function TSampleForConfigFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList]; end; function TSampleForConfigFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := [fpName, fpSize]; end; class function TSampleForConfigFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; end. doublecmd-1.1.30/src/filesources/urealfilesource.pas0000644000175000001440000000056615104114162021604 0ustar alexxusersunit uRealFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type IRealFileSource = interface(IFileSource) end; {en Base class for any real file source (filesystem, archive, network, ... - all sources able to produce real files). } TRealFileSource = class(TFileSource, IRealFileSource) end; implementation end. doublecmd-1.1.30/src/filesources/uoperationthread.pas0000644000175000001440000000211715104114162021762 0ustar alexxusersunit uOperationThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation; type {en Thread executing a file source operation. } TOperationThread = class(TThread) private FOperation: TFileSourceOperation; protected procedure Execute; override; public {en Creates a new thread for executing an operation. @param(CreateSuspended if @true the thread is not immediately started on creation.) @param(Operation is the file source operation that will be executed.) } constructor Create(CreateSuspended: Boolean; Operation: TFileSourceOperation); reintroduce; end; implementation uses uDebug, uExceptions; constructor TOperationThread.Create(CreateSuspended: Boolean; Operation: TFileSourceOperation); begin FreeOnTerminate := True; FOperation := Operation; FOperation.AssignThread(Self); inherited Create(CreateSuspended, DefaultStackSize); end; procedure TOperationThread.Execute; begin try FOperation.Execute; except on e: Exception do HandleException(e, Self); end; end; end. doublecmd-1.1.30/src/filesources/ulocalfilesource.pas0000644000175000001440000000062415104114162021746 0ustar alexxusersunit uLocalFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uRealFileSource; type ILocalFileSource = interface(IRealFileSource) end; {en Base for classes of local file sources. Empty placeholder for now, allows to check whether a certain file source is local. } TLocalFileSource = class(TRealFileSource, ILocalFileSource) end; implementation end. doublecmd-1.1.30/src/filesources/uflatviewfilesource.pas0000644000175000001440000000152515104114162022476 0ustar alexxusersunit uFlatViewFileSource; {$mode objfpc}{$H+} interface uses uMultiListFileSource, uFileSourceOperation, uSearchResultFileSource; type { TFlatViewFileSource } TFlatViewFileSource = class(TSearchResultFileSource) public function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath : String): String; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; end; implementation { TFlatViewFileSource } function TFlatViewFileSource.IsPathAtRoot(Path: String): Boolean; begin Result:= True; end; function TFlatViewFileSource.GetRootDir(sPath: String): String; begin Result:= FileSource.GetRootDir(sPath); end; function TFlatViewFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result:= True; end; end. doublecmd-1.1.30/src/filesources/ufilesourcewipeoperation.pas0000644000175000001440000001074415104114162023545 0ustar alexxusersunit uFileSourceWipeOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type TFileSourceWipeOperationStatistics = record CurrentFile: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that wipes files from an arbitrary file source. File source should match the class type. } { TFileSourceWipeOperation } TFileSourceWipeOperation = class(TFileSourceOperation) private FStatistics: TFileSourceWipeOperationStatistics; FStatisticsAtStartTime: TFileSourceWipeOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceWipeOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceWipeOperation.RetrieveStatistics: TFileSourceWipeOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourceutil.pas0000644000175000001440000003372315104114162021637 0ustar alexxusersunit uFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileView, uFile, uFileSourceOperationTypes, uFileSourceSetFilePropertyOperation; {en Decides what should be done when user chooses a file in a file view. This function may add/remove a file source from the view, change path, execute a file or a command, etc. } procedure ChooseFile(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile); {en Checks if choosing the given file will change to another file source, and adds this new file source to the view if it does. @returns @true if the file matched any rules and a new file source was created, @false otherwise, which means no action was taken. } function ChooseFileSource(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile): Boolean; overload; function ParseFileSource(var aPath: String; const CurrentFileSource: IFileSource = nil): IFileSource; function ChooseFileSource(aFileView: TFileView; const aPath: String; bLocal: Boolean = False): Boolean; overload; function ChooseArchive(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile; bForce: Boolean = False): Boolean; procedure ChooseSymbolicLink(aFileView: TFileView; aFile: TFile); procedure SetFileSystemPath(aFileView: TFileView; aPath: String); function RenameFile(aFileSource: IFileSource; const aFile: TFile; const NewFileName: String; Interactive: Boolean): TSetFilePropertyResult; function GetCopyOperationType(SourceFileSource, TargetFileSource: IFileSource; out OperationType: TFileSourceOperationType): Boolean; implementation uses LCLProc, fFileExecuteYourSelf, uGlobs, uShellExecute, uFindEx, uDebug, uOSUtils, uShowMsg, uLng, uVfsModule, DCOSUtils, DCStrUtils, uFileSourceOperation, uFileSourceExecuteOperation, uVfsFileSource, uFileSourceProperty, uFileSystemFileSource, uWfxPluginFileSource, uArchiveFileSourceUtil, uFileSourceOperationMessageBoxesUI, uFileProperty, URIParser, WcxPlugin, uWcxModule, uHash, uSuperUser; procedure ChooseFile(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile); var Index, PathIndex: Integer; sCmd, sParams, sStartPath: String; Operation: TFileSourceExecuteOperation = nil; aFileCopy: TFile = nil; begin // First test for file sources. if ChooseFileSource(aFileView, aFileSource, aFile) then Exit; // For now work only for local files. if aFileView.FileSource.Properties * [fspDirectAccess, fspLinksToLocalFiles] <> [] then begin // Now test if exists Open command in "extassoc.xml" :) if gExts.GetExtActionCmd(aFile, 'open', sCmd, sParams, sStartPath) then begin try // Resolve filename here since ProcessExtCommandFork doesn't do it (as of 2017) // The limitation is that only one file will be opened on a FileSource of links if fspLinksToLocalFiles in aFileView.FileSource.Properties then begin aFileCopy := aFile.Clone; aFileView.FileSource.GetLocalName(aFileCopy); end; if ProcessExtCommandFork(sCmd,sParams,sStartPath,aFileCopy) then Exit; finally FreeAndNil(aFileCopy); end; end; if (fsoCalcChecksum in aFileView.FileSource.GetOperationsTypes) and FileExtIsHash(aFile.Extension) then begin ProcessExtCommandFork('cm_CheckSumVerify'); Exit; end; end; if (fsoExecute in aFileView.FileSource.GetOperationsTypes) then try aFileCopy := aFile.Clone; Operation := aFileView.FileSource.CreateExecuteOperation( aFileCopy, aFileView.CurrentPath, 'open') as TFileSourceExecuteOperation; if Assigned(Operation) then begin Operation.Execute; case Operation.ExecuteOperationResult of fseorError: begin // Show error message if Length(Operation.ResultString) = 0 then msgError(rsMsgErrEOpen) else msgError(Operation.ResultString); end; fseorYourSelf: begin // Copy out file to temp file system and execute if not ShowFileExecuteYourSelf(aFileView, aFile, False) then DCDebug('Execution error!'); end; fseorWithAll: begin // Copy out all files to temp file system and execute chosen if not ShowFileExecuteYourSelf(aFileView, aFile, True) then DCDebug('Execution error!'); end; fseorSymLink: begin // change directory to new path (returned in Operation.ResultString) DCDebug('Change directory to ', Operation.ResultString); with aFileView do begin // If path is URI Index:= Pos('://', Operation.ResultString); PathIndex:= Pos(PathDelim, Operation.ResultString); if (Index > 0) and ((PathIndex > Index) or (PathIndex = 0)) then ChooseFileSource(aFileView, Operation.ResultString) else if (FileSource.IsClass(TFileSystemFileSource)) or (mbSetCurrentDir(ExcludeTrailingPathDelimiter(Operation.ResultString)) = False) then begin // Simply change path CurrentPath:= Operation.ResultString; end else begin // Get a new filesystem file source AddFileSource(TFileSystemFileSource.GetFileSource, Operation.ResultString); end; end; end; end; // case end; // assigned finally FreeAndNil(aFileCopy); FreeAndNil(Operation); end; end; function ChooseFileSource(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile): Boolean; var FileSource: IFileSource; VfsModule: TVfsModule; begin Result := False; if ChooseArchive(aFileView, aFileSource, aFile) then Exit(True); // Work only for TVfsFileSource. if aFileView.FileSource.IsClass(TVfsFileSource) then begin // Check if there is a registered WFX plugin by file system root name. FileSource := FileSourceManager.Find(TWfxPluginFileSource, 'wfx://' + aFile.Name); if not Assigned(FileSource) then FileSource := TWfxPluginFileSource.CreateByRootName(aFile.Name); if not Assigned(FileSource) then begin // Check if there is a registered Vfs module by file system root name. VfsModule:= gVfsModuleList.VfsModule[aFile.Name]; if Assigned(VfsModule) then begin FileSource := FileSourceManager.Find(VfsModule.FileSourceClass, aFile.Name); if not Assigned(FileSource) then FileSource := VfsModule.FileSourceClass.Create; end; end; if Assigned(FileSource) then begin aFileView.AddFileSource(FileSource, FileSource.GetRootDir); Exit(True); end; end; end; function ParseFileSource(var aPath: String; const CurrentFileSource: IFileSource = nil): IFileSource; var URI: TURI; aFileSourceClass: TFileSourceClass; begin aFileSourceClass:= gVfsModuleList.GetFileSource(aPath); // If found special FileSource for path if Assigned(aFileSourceClass) then begin // If path is URI if Pos('://', aPath) > 0 then begin URI:= ParseURI(aPath); aPath:= NormalizePathDelimiters(URI.Path + URI.Document); aPath:= IncludeTrailingPathDelimiter(aPath); Result:= FileSourceManager.Find(aFileSourceClass, URI.Protocol + '://' + URI.Host, not SameText(URI.Protocol, 'smb') ); if not Assigned(Result) then try // Create new FileSource with given URI Result := aFileSourceClass.Create(URI); except Result := nil; end; end // If found FileSource is same as current then simply change path else if aFileSourceClass.ClassNameIs(CurrentFileSource.ClassName) then Result := CurrentFileSource // Else create new FileSource with given path else Result := aFileSourceClass.Create; end else Result:= nil; end; function ChooseFileSource(aFileView: TFileView; const aPath: String; bLocal: Boolean): Boolean; var RemotePath: String; FileSource: IFileSource; begin Result:= True; RemotePath:= aPath; FileSource:= ParseFileSource(RemotePath, aFileView.FileSource); // If found special FileSource for path if Assigned(FileSource) then begin // If path is URI if RemotePath <> aPath then aFileView.AddFileSource(FileSource, RemotePath) // If found FileSource is same as current then simply change path else if aFileView.FileSource.Equals(FileSource) then aFileView.CurrentPath := aPath // Else create new FileSource with given path else aFileView.AddFileSource(FileSource, aPath); end // If current FileSource has address else if bLocal and (Length(aFileView.CurrentAddress) > 0) then aFileView.CurrentPath := aPath // Else use FileSystemFileSource else begin SetFileSystemPath(aFileView, aPath); Result:= mbSetCurrentDir(aPath); end; end; function ChooseArchive(aFileView: TFileView; aFileSource: IFileSource; aFile: TFile; bForce: Boolean): Boolean; var FileSource: IFileSource; begin try // Check if there is a ArchiveFileSource for possible archive. FileSource := GetArchiveFileSource(aFileSource, aFile, EmptyStr, bForce, False); except on E: Exception do begin if (E is EWcxModuleException) and (EWcxModuleException(E).ErrorCode = E_HANDLED) then Exit(True); if not bForce then begin msgError(E.Message + LineEnding + aFile.FullPath); Exit(True); end; end; end; if Assigned(FileSource) then begin if not mbCompareFileNames(aFileView.CurrentPath, aFile.Path) then begin if aFileSource.Properties * [fspDirectAccess, fspLinksToLocalFiles] <> [] then SetFileSystemPath(aFileView, aFile.Path); end; aFileView.AddFileSource(FileSource, FileSource.GetRootDir); Exit(True); end; Result := False; end; procedure ChooseSymbolicLink(aFileView: TFileView; aFile: TFile); var sPath: String; LastError: Integer; SearchRec: TSearchRecEx; begin if not aFileView.FileSource.IsClass(TFileSystemFileSource) then begin aFileView.ChangePathToChild(aFile); Exit; end; sPath:= aFileView.CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); try LastError:= FindFirstEx(sPath + AllFilesMask, 0, SearchRec); if (LastError = 0) then begin with aFileView do CurrentPath := CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); end else if AccessDenied(LastError) then begin sPath:= ReadSymLink(aFile.FullPath); if sPath <> EmptyStr then aFileView.CurrentPath := IncludeTrailingPathDelimiter(GetAbsoluteFileName(aFileView.CurrentPath, sPath)) else msgError(Format(rsMsgChDirFailed, [aFile.FullPath])); end else begin aFileView.ChangePathToChild(aFile); end; finally FindCloseEx(SearchRec); end; end; procedure SetFileSystemPath(aFileView: TFileView; aPath: String); begin with aFileView do begin if TFileSystemFileSource.ClassNameIs(FileSource.ClassName) then CurrentPath := aPath else AddFileSource(TFileSystemFileSource.GetFileSource, aPath); end; end; function RenameFile(aFileSource: IFileSource; const aFile: TFile; const NewFileName: String; Interactive: Boolean): TSetFilePropertyResult; var aFiles: TFiles = nil; Operation: TFileSourceSetFilePropertyOperation = nil; NewProperties: TFileProperties; UserInterface: TFileSourceOperationMessageBoxesUI = nil; begin Result:= sfprError; if fsoSetFileProperty in aFileSource.GetOperationsTypes then begin FillByte(NewProperties, SizeOf(NewProperties), 0); NewProperties[fpName] := TFileNameProperty.Create(NewFileName); try aFiles := TFiles.Create(aFile.Path); aFiles.Add(aFile.Clone); Operation := aFileSource.CreateSetFilePropertyOperation( aFiles, NewProperties) as TFileSourceSetFilePropertyOperation; if Assigned(Operation) then begin // Only if the operation can change file name. if fpName in Operation.SupportedProperties then begin Operation.SkipErrors := not Interactive; if Interactive then begin UserInterface := TFileSourceOperationMessageBoxesUI.Create; Operation.AddUserInterface(UserInterface); end; Operation.Execute; case Operation.Result of fsorFinished: Result:= sfprSuccess; fsorAborted: Result:= sfprSkipped; end; end; end; finally FreeAndNil(NewProperties[fpName]); FreeAndNil(Operation); FreeAndNil(UserInterface); FreeAndNil(aFiles); end; end; end; function GetCopyOperationType(SourceFileSource, TargetFileSource: IFileSource; out OperationType: TFileSourceOperationType): Boolean; begin // If same file source and address if (fsoCopy in SourceFileSource.GetOperationsTypes) and (fsoCopy in TargetFileSource.GetOperationsTypes) and SourceFileSource.Equals(TargetFileSource) and SameText(SourceFileSource.GetCurrentAddress, TargetFileSource.GetCurrentAddress) then begin Result:= True; OperationType := fsoCopy; end else if TargetFileSource.IsClass(TFileSystemFileSource) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin Result:= True; OperationType := fsoCopyOut; end else if SourceFileSource.IsClass(TFileSystemFileSource) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) then begin Result:= True; OperationType := fsoCopyIn; end else begin Result:= False; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcetreebuilder.pas0000644000175000001440000002114615104114162023164 0ustar alexxusersunit uFileSourceTreeBuilder; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uSearchTemplate, uFindFiles; type // Additional data for the filesystem tree node. { TFileTreeNodeData } TFileTreeNodeData = class public Recursive: Boolean; // True if any of the subnodes (recursively) are links. SubnodesHaveLinks: Boolean; // Whether directory or subdirectories have any elements that will not be copied/moved. SubnodesHaveExclusions: Boolean; constructor Create(ARecursive: Boolean); overload; end; { TFileSourceTreeBuilder } TFileSourceTreeBuilder = class protected FFilesTree: TFileTree; FFilesCount: Int64; FCurrentDepth: Integer; FDirectoriesCount: Int64; FFilesSize: Int64; FExcludeRootDir: Boolean; FFileTemplate: TSearchTemplate; FExcludeEmptyTemplateDirectories: Boolean; FSymlinkOption: TFileSourceOperationOptionSymLink; FRecursive: Boolean; FFileChecks: TFindFileChecks; FRootDir: String; AskQuestion: TAskQuestionFunction; CheckOperationState: TCheckOperationStateFunction; procedure AddItem(aFile: TFile; CurrentNode: TFileTreeNode); procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); virtual; abstract; procedure AddFile(aFile: TFile; CurrentNode: TFileTreeNode); procedure AddLink(aFile: TFile; CurrentNode: TFileTreeNode); virtual; procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); virtual; abstract; procedure AddDirectory(aFile: TFile; CurrentNode: TFileTreeNode); procedure DecideOnLink(aFile: TFile; CurrentNode: TFileTreeNode); function GetItemsCount: Int64; public constructor Create(AskQuestionFunction: TAskQuestionFunction; CheckOperationStateFunction: TCheckOperationStateFunction); destructor Destroy; override; procedure BuildFromNode(aNode: TFileTreeNode); procedure BuildFromFiles(Files: TFiles); function ReleaseTree: TFileTree; property ExcludeRootDir: Boolean read FExcludeRootDir write FExcludeRootDir; property Recursive: Boolean read FRecursive write FRecursive; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymlinkOption write FSymlinkOption; property FilesTree: TFileTree read FFilesTree; property FilesSize: Int64 read FFilesSize; property FilesCount: Int64 read FFilesCount; property DirectoriesCount: Int64 read FDirectoriesCount; property ItemsCount: Int64 read GetItemsCount; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Does not take ownership of SearchTemplate and does not free it. } property SearchTemplate: TSearchTemplate read FFileTemplate write FFileTemplate; end; implementation uses uGlobs, uLng; { TFileTreeNodeData } constructor TFileTreeNodeData.Create(ARecursive: Boolean); begin Recursive:= ARecursive; end; constructor TFileSourceTreeBuilder.Create(AskQuestionFunction: TAskQuestionFunction; CheckOperationStateFunction: TCheckOperationStateFunction); begin AskQuestion := AskQuestionFunction; CheckOperationState := CheckOperationStateFunction; FRecursive := True; FSymlinkOption := fsooslNone; end; destructor TFileSourceTreeBuilder.Destroy; begin inherited Destroy; FFilesTree.Free; end; procedure TFileSourceTreeBuilder.BuildFromNode(aNode: TFileTreeNode); begin FFilesSize := 0; FFilesCount := 0; FCurrentDepth := 0; FDirectoriesCount := 0; FFilesTree := aNode; FRootDir := aNode.TheFile.Path; TFileTreeNodeData(FFilesTree.Data).Recursive:= FRecursive; AddFilesInDirectory(aNode.TheFile.FullPath + DirectorySeparator, FFilesTree); FFilesTree := nil; end; procedure TFileSourceTreeBuilder.BuildFromFiles(Files: TFiles); var i: Integer; begin FreeAndNil(FFilesTree); FFilesTree := TFileTreeNode.Create; FFilesTree.Data := TFileTreeNodeData.Create(FRecursive); FFilesSize := 0; FFilesCount := 0; FDirectoriesCount := 0; FCurrentDepth := 0; FRootDir := Files.Path; if Assigned(FFileTemplate) then SearchTemplateToFindFileChecks(FFileTemplate.SearchRecord, FFileChecks); if ExcludeRootDir then begin for i := 0 to Files.Count - 1 do if Files[i].IsDirectory then AddFilesInDirectory(Files[i].FullPath + DirectorySeparator, FFilesTree); end else begin for i := 0 to Files.Count - 1 do AddItem(Files[i].Clone, FFilesTree); end; end; procedure TFileSourceTreeBuilder.AddFile(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create(FRecursive); Inc(FFilesCount); FFilesSize:= FFilesSize + aFile.Size; CheckOperationState; end; procedure TFileSourceTreeBuilder.AddLink(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create(FRecursive); (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; Inc(FFilesCount); end; procedure TFileSourceTreeBuilder.AddDirectory(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; NodeData: TFileTreeNodeData; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; NodeData := TFileTreeNodeData.Create(FRecursive); AddedNode.Data := NodeData; Inc(FDirectoriesCount); if FRecursive then begin if not Assigned(FFileTemplate) or (FFileTemplate.SearchRecord.SearchDepth < 0) or (FCurrentDepth <= FFileTemplate.SearchRecord.SearchDepth) then begin Inc(FCurrentDepth); AddFilesInDirectory(aFile.FullPath + DirectorySeparator, AddedNode); Dec(FCurrentDepth); end; if Assigned(FFileTemplate) and FExcludeEmptyTemplateDirectories and (AddedNode.SubNodesCount = 0) then begin CurrentNode.RemoveSubNode(AddedIndex); (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; end else begin // Propagate flags to parent. if NodeData.SubnodesHaveLinks then (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; if NodeData.SubnodesHaveExclusions then (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; end; end; end; procedure TFileSourceTreeBuilder.DecideOnLink(aFile: TFile; CurrentNode: TFileTreeNode); begin case FSymLinkOption of fsooslFollow: AddLinkTarget(aFile, CurrentNode); fsooslDontFollow: AddLink(aFile, CurrentNode); fsooslNone: begin case AskQuestion('', Format(rsMsgFollowSymlink, [aFile.Name]), [fsourYes, fsourAll, fsourNo, fsourSkipAll], fsourYes, fsourNo) of fsourYes: AddLinkTarget(aFile, CurrentNode); fsourAll: begin FSymLinkOption := fsooslFollow; AddLinkTarget(aFile, CurrentNode); end; fsourNo: AddLink(aFile, CurrentNode); fsourSkipAll: begin FSymLinkOption := fsooslDontFollow; AddLink(aFile, CurrentNode); end; else raise Exception.Create('Invalid user response'); end; end; else raise Exception.Create('Invalid symlink option'); end; end; procedure TFileSourceTreeBuilder.AddItem(aFile: TFile; CurrentNode: TFileTreeNode); var Matches: Boolean; begin if Assigned(FFileTemplate) then begin if AFile.IsDirectory or AFile.IsLinkToDirectory then begin Matches := CheckDirectoryName(FFileChecks, aFile.Name) and CheckDirectoryNameEx(FFileChecks, aFile.FullPath, FRootDir); end else begin Matches := CheckFile(FFileTemplate.SearchRecord, FFileChecks, aFile); end; if not Matches then begin (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; Exit; end; end; if aFile.IsLink then DecideOnLink(aFile, CurrentNode) else if aFile.IsDirectory then AddDirectory(aFile, CurrentNode) else AddFile(aFile, CurrentNode); end; function TFileSourceTreeBuilder.ReleaseTree: TFileTree; begin Result := FFilesTree; FFilesTree := nil; end; function TFileSourceTreeBuilder.GetItemsCount: Int64; begin Result := FilesCount + DirectoriesCount; end; end. doublecmd-1.1.30/src/filesources/ufilesourcetestarchiveoperation.pas0000644000175000001440000001142115104114162025113 0ustar alexxusersunit uFileSourceTestArchiveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type // Statistics for TestArchive operation. TFileSourceTestArchiveOperationStatistics = record ArchiveFile: String; CurrentFile: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that test files in archive. } { TFileSourceTestArchiveOperation } TFileSourceTestArchiveOperation = class(TFileSourceOperation) private FStatistics: TFileSourceTestArchiveOperationStatistics; FStatisticsAtStartTime: TFileSourceTestArchiveOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, Abs(DoneBytes), Abs(TotalBytes), StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(Abs(DoneBytes / TotalBytes)); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceTestArchiveOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceTestArchiveOperation.RetrieveStatistics: TFileSourceTestArchiveOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcesplitoperation.pas0000644000175000001440000001273215104114162023733 0ustar alexxusersunit uFileSourceSplitOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceSplitOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that split file within the same file source. } { TFileSourceSplitOperation } TFileSourceSplitOperation = class(TFileSourceOperation) private FStatistics: TFileSourceSplitOperationStatistics; FStatisticsAtStartTime: TFileSourceSplitOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceSplitOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSplitOperation.RetrieveStatistics: TFileSourceSplitOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSplitOperation.GetID: TFileSourceOperationType; begin Result := fsoSplit; end; procedure TFileSourceSplitOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := FTargetPath; // Split target path FFileSource.Reload(Paths); end; function TFileSourceSplitOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperSplittingFromTo, [SourceFile.Path, TargetPath]); else Result := rsOperSplitting; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcesetfilepropertyoperation.pas0000644000175000001440000003020515104114162026033 0ustar alexxusersunit uFileSourceSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, DCBasicTypes, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileProperty; type TSetFilePropertyResult = (sfprSuccess, sfprError, sfprSkipped); TSetFilePropertyResultFunction = procedure(Index: Integer; aFile: TFile; aTemplate: TFileProperty; Result: TSetFilePropertyResult) of object; PFileSourceSetFilePropertyOperationStatistics = ^TFileSourceSetFilePropertyOperationStatistics; TFileSourceSetFilePropertyOperationStatistics = record CurrentFile: String; TotalFiles: Int64; DoneFiles: Int64; FilesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that can set any of the file properties supported by a file source. It doesn't have to support all the file properties supported by the file source, it can be a subset. There are two methods of setting properties available: - NewProperties Set via constructor, this is a list of properties that should be set for each file. If a property in this list is not assigned it is not set. If a property in this list is not supported by the file source or by this operation it is also not set. - TemplateFiles Set by calling SetTemplateFiles. Template files describe 1 to 1 correspondence between files and their new properties. Each i-th file in the TargetFiles list will be assigned properties based on propertes of i-th template file. Template files need not be of the same type as target files, it is enough for them to have properties supported by the target files. If template file is not used for i-th file, then the i-th member of the list should be set to @nil, but should be present to maintain the correct correspondence between target and template files. In other words number of target files must be the same as number of template files. The two above methods can be used together. Template files, if present, always take precedence over NewProperties. If a template file is not present (= @nil), then theNewProperties are used as a template. Template files usually will not be used when Recursive is @true, although this behaviour is dependent on the concrete descendant operations. If template files list is @nil, to indicate that the template files are not used, then only the NewProperties are used.) } { TFileSourceSetFilePropertyOperation } TFileSourceSetFilePropertyOperation = class(TFileSourceOperation) private FStatistics: TFileSourceSetFilePropertyOperationStatistics; FStatisticsAtStartTime: TFileSourceSetFilePropertyOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneFiles then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneFiles, DoneFiles, TotalFiles, StartTime, SysUtils.Now, FilesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneFiles/TotalFiles); end; end; FStatistics := NewStatistics; AppProcessMessages(); finally FStatisticsLock.Release; end; end; procedure TFileSourceSetFilePropertyOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSetFilePropertyOperation.RetrieveStatistics: TFileSourceSetFilePropertyOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceSetFilePropertyOperation.SetTemplateFiles(var theTemplateFiles: TFiles); begin if Assigned(FTemplateFiles) then FreeAndNil(FTemplateFiles); FTemplateFiles := theTemplateFiles; theTemplateFiles := nil; end; procedure TFileSourceSetFilePropertyOperation.SetProperties(Index: Integer; aFile: TFile; aTemplateFile: TFile); var FileAttrs: TFileAttrs; AProp: TFilePropertyType; templateProperty: TFileProperty; bRetry: Boolean; sMessage, sQuestion: String; SetResult: TSetFilePropertyResult; ErrorString: String; begin // Iterate over all properties supported by this operation. for AProp := Low(SupportedProperties) to High(SupportedProperties) do begin repeat bRetry := False; SetResult := sfprSuccess; // Double-check that the property really is supported by the file. if ((AProp in (aFile.SupportedProperties * fpAll)) or (AProp in (FFileSource.GetRetrievableFileProperties * fpAll))) then begin // Get template property from template file (if exists) or NewProperties. if Assigned(aTemplateFile) then templateProperty := aTemplateFile.Properties[AProp] else templateProperty := NewProperties[AProp]; // Check if there is a new property to be set. if Assigned(templateProperty) then begin // Special case for attributes property if templateProperty is TFileAttributesProperty then begin if (IncludeAttributes <> 0) or (ExcludeAttributes <> 0) then begin FileAttrs:= aFile.Attributes; FileAttrs:= FileAttrs or IncludeAttributes; FileAttrs:= FileAttrs and not ExcludeAttributes; TFileAttributesProperty(templateProperty).Value:= FileAttrs; end; end; SetResult := SetNewProperty(aFile, templateProperty); if Assigned(FSetFilePropertyResultFunction) then begin FSetFilePropertyResultFunction(Index, aFile, templateProperty, SetResult); end; end; end; if SetResult = sfprError then begin ErrorString := GetErrorString(aFile, templateProperty); sMessage := rsMsgLogError + ErrorString; sQuestion := ErrorString; if FSkipErrors then logWrite(Thread, sMessage, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourAbort) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; end; function TFileSourceSetFilePropertyOperation.GetErrorString(aFile: TFile; aProperty: TFileProperty): String; begin case aProperty.GetID of fpName: Result := Format(rsMsgErrRename, [aFile.FullPath, (aProperty as TFileNameProperty).Value]); fpAttributes: Result := Format(rsMsgErrSetAttribute, [aFile.FullPath]); fpModificationTime, fpCreationTime, fpLastAccessTime: Result := Format(rsMsgErrSetDateTime, [aFile.FullPath]); fpOwner: Result := Format(rsMsgErrSetOwnership, [aFile.FullPath]); else Result := rsMsgLogError; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourceproperty.pas0000644000175000001440000000327215104114162022542 0ustar alexxusersunit uFileSourceProperty; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceProperty = ( {en Set, if the files are available directly (for example: real file system). Not sure what it would do yet, but I'll leave it for now. } fspDirectAccess, {en Set, if filenames are case sensitive. } fspCaseSensitive, {en Set, if the file source has virtual files (like a VFS list, or results from searching, etc.). Non-virtual files are all files that are physical (regardless if they are directly accessible). } fspVirtual, {en Set, if the files are links to local files that available directly (for example: results from searching, etc.). } fspLinksToLocalFiles, {en Set, if the file source uses TFileSourceConnection objects for access by operations. } fspUsesConnections, {en Set, if the file source supports file listing on main thread only. } fspListOnMainThread, {en Set, if the file source supports copy in on the main thread only. } fspCopyInOnMainThread, {en Set, if the file source supports copy out on the main thread only. } fspCopyOutOnMainThread, {en Set, if the file source supports flat listing mode. } fspListFlatView, {en Set, if the file source cannot be a child } fspNoneParent, {en Set, if the file source has default columns view } fspDefaultView, {en Set, if the file source supports custom context menu. } fspContextMenu ); TFileSourceProperties = set of TFileSourceProperty; implementation end. doublecmd-1.1.30/src/filesources/ufilesourceoperationui.pas0000644000175000001440000000440115104114162023207 0ustar alexxusersunit uFileSourceOperationUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceOperationUIResponse = (fsourInvalid, fsourOk, fsourNo, fsourYes, fsourCancel, fsourNone, fsourAppend, // for files fsourResume, // for files fsourCopyInto, // for directories fsourCopyIntoAll, // for directories fsourOverwrite, fsourOverwriteAll, fsourOverwriteOlder, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourAutoRenameTarget, fsourRenameSource, fsourSkip, fsourSkipAll, fsourIgnore, fsourIgnoreAll, fsourAll, fsourRetry, fsourAbort, fsourRetryAdmin, fsourUnlock, // Actions will never be returned since they do not close the window, handle them in ActionHandler. fsouaCompare); // The first action, hardcoded. Add new actions after this and new answers before this line. TFileSourceOperationUIResponses = array of TFileSourceOperationUIResponse; TFileSourceOperationUIAnswer = Low(TFileSourceOperationUIResponse)..Pred(fsouaCompare); TFileSourceOperationUIAction = fsouaCompare..High(TFileSourceOperationUIResponse); TFileSourceOperationUIActionHandler = procedure(Action: TFileSourceOperationUIAction) of object; {en General interface for communication: operation <-> user. } TFileSourceOperationUI = class public constructor Create; virtual; destructor Destroy; override; function AskQuestion(Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIAnswer; ActionHandler: TFileSourceOperationUIActionHandler = nil ) : TFileSourceOperationUIAnswer; virtual abstract; // Add possibility to display files properties (for example: to compare older - newer) // Add general option "remember this choice for all files of this type" (checkbox) end; implementation constructor TFileSourceOperationUI.Create; begin inherited; end; destructor TFileSourceOperationUI.Destroy; begin inherited; end; end. doublecmd-1.1.30/src/filesources/ufilesourceoperationtypes.pas0000644000175000001440000000142115104114162023735 0ustar alexxusersunit uFileSourceOperationTypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type // Capabilities. // (or make a separate type TFileSourceCapability with fsc... ?) TFileSourceOperationType = ( fsoList, fsoCopy, // Copy files within the same file source. fsoCopyIn, fsoCopyOut, fsoMove, // Move/rename files within the same file source. fsoDelete, fsoWipe, fsoSplit, fsoCombine, fsoCreateDirectory, //fsoCreateFile, //fsoCreateLink, fsoCalcChecksum, fsoCalcStatistics, // Should probably always be supported if fsoList is supported. fsoSetFileProperty, fsoExecute, fsoTestArchive ); TFileSourceOperationTypes = set of TFileSourceOperationType; implementation end. doublecmd-1.1.30/src/filesources/ufilesourceoperationoptionsui.pas0000644000175000001440000000167315104114162024633 0ustar alexxusersunit uFileSourceOperationOptionsUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms; type TFileSourceOperationOptionsUIClass = class of TFileSourceOperationOptionsUI; { TFileSourceOperationOptionsUI } TFileSourceOperationOptionsUI = class(TFrame) public constructor Create(AOwner: TComponent; AFileSource: IInterface); virtual; reintroduce; class function GetOptionsClass: TFileSourceOperationOptionsUIClass; procedure SaveOptions; virtual; abstract; {en Set operation options from GUI controls. } procedure SetOperationOptions(Operation: TObject); virtual; abstract; end; implementation { TFileSourceOperationOptionsUI } constructor TFileSourceOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner); end; class function TFileSourceOperationOptionsUI.GetOptionsClass: TFileSourceOperationOptionsUIClass; begin Result := Self; end; end. doublecmd-1.1.30/src/filesources/ufilesourceoperationoptions.pas0000644000175000001440000000134615104114162024272 0ustar alexxusersunit uFileSourceOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceOperationOptionGeneral = (fsoogNone, fsoogYes, fsoogNo); TFileSourceOperationOptionSymLink = (fsooslNone, fsooslFollow, fsooslDontFollow); TFileSourceOperationOptionFileExists = (fsoofeNone, fsoofeSkip, fsoofeOverwrite, fsoofeOverwriteOlder, fsoofeOverwriteSmaller, fsoofeOverwriteLarger, fsoofeAutoRenameSource, fsoofeAutoRenameTarget, fsoofeAppend, fsoofeResume); TFileSourceOperationOptionDirectoryExists = (fsoodeNone, fsoodeSkip, fsoodeDelete, fsoodeCopyInto); TFileSourceOperationOptionSetPropertyError = (fsoospeNone, fsoospeDontSet, fsoospeIgnoreErrors); implementation end. doublecmd-1.1.30/src/filesources/ufilesourceoperationmisc.pas0000644000175000001440000000605115104114162023530 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Miscellaneous functions for file source operations and queues. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFileSourceOperationMisc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uOperationsManager; function GetOperationStateString(OperationState: TFileSourceOperationState): String; function GetProgressString(const Progress: Double): String; procedure PlaySound(OpManItem: TOperationsManagerItem); procedure ShowOperation(OpManItem: TOperationsManagerItem); procedure ShowOperationModal(OpManItem: TOperationsManagerItem); implementation uses DateUtils, fFileOpDlg, uFileSourceOperationTypes, uGlobs, uPlaySound; function GetOperationStateString(OperationState: TFileSourceOperationState): String; begin if OperationState <> fsosRunning then Result := ' [' + FileSourceOperationStateText[OperationState] + ']' else Result := ''; end; function GetProgressString(const Progress: Double): String; begin Result := FloatToStrF(Progress * 100, ffFixed, 0, 0) + '%'; end; procedure PlaySound(OpManItem: TOperationsManagerItem); var FileName: String; begin if (gFileOperationDuration >= 0) and (SecondsBetween(Now, OpManItem.Operation.StartTime) >= gFileOperationDuration) then begin if OpManItem.Operation.ID in [fsoCopy, fsoCopyIn, fsoCopyOut] then FileName:= gFileOperationsSounds[fsoCopy] else begin FileName:= gFileOperationsSounds[OpManItem.Operation.ID]; end; if (Length(FileName) > 0) then uPlaySound.PlaySound(FileName); end; end; procedure ShowOperation(OpManItem: TOperationsManagerItem); var Options: TOperationProgressWindowOptions = []; begin if OpManItem.Queue.IsFree or (OpManItem.Queue.Count = 1) then begin if gFileOperationsProgressKind in [fopkSeparateWindow, fopkSeparateWindowMinimized] then begin if gFileOperationsProgressKind = fopkSeparateWindowMinimized then Options := Options + [opwoStartMinimized]; TfrmFileOp.ShowFor(OpManItem.Handle, Options); end; end; end; procedure ShowOperationModal(OpManItem: TOperationsManagerItem); begin // with TfrmFileOp.Create(OpManItem.Queue.Identifier) do with TfrmFileOp.Create(OpManItem.Handle) do try ShowModal; finally Free; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourceoperationmessageboxesui.pas0000644000175000001440000000712315104114162025621 0ustar alexxusersunit uFileSourceOperationMessageBoxesUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperationUI, uShowMsg; type {en We assume here the UI is used only from the GUI thread. } { TFileSourceOperationMessageBoxesUI } TFileSourceOperationMessageBoxesUI = class(TFileSourceOperationUI) private FUIActionHandler: TFileSourceOperationUIActionHandler; protected procedure QuestionActionHandler(Button: TMyMsgActionButton); public constructor Create; override; destructor Destroy; override; function AskQuestion(Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIAnswer; ActionHandler: TFileSourceOperationUIActionHandler = nil ) : TFileSourceOperationUIAnswer; override; end; implementation const ResponseToButton: array[TFileSourceOperationUIResponse] of TMyMsgButton = (msmbOK, msmbOK, msmbNo, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbResume, msmbCopyInto, msmbCopyIntoAll, msmbOverwrite, msmbOverwriteAll, msmbOverwriteOlder, msmbOverwriteSmaller, msmbOverwriteLarger, msmbAutoRenameSource, msmbAutoRenameTarget, msmbRenameSource, msmbSkip, msmbSkipAll, msmbIgnore, msmbIgnoreAll, msmbAll, msmbRetry, msmbAbort, msmbRetryAdmin, msmbUnlock, // Actions: msmbCompare); ResultToResponse: array[TMyMsgResult] of TFileSourceOperationUIResponse = (fsourOk, fsourNo, fsourYes, fsourCancel, fsourNone, fsourAppend, fsourResume, fsourCopyInto, fsourCopyIntoAll, fsourOverwrite, fsourOverwriteAll, fsourOverwriteOlder, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourAutoRenameTarget, fsourRenameSource, fsourSkip, fsourSkipAll, fsourIgnore, fsourIgnoreAll, fsourAll, fsourRetry, fsourAbort, fsourRetryAdmin, fsourUnlock); ButtonToUIAction: array[TMyMsgActionButton] of TFileSourceOperationUIAction = (fsouaCompare); constructor TFileSourceOperationMessageBoxesUI.Create; begin inherited; end; destructor TFileSourceOperationMessageBoxesUI.Destroy; begin inherited; end; function TFileSourceOperationMessageBoxesUI.AskQuestion( Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIAnswer; ActionHandler: TFileSourceOperationUIActionHandler = nil ) : TFileSourceOperationUIAnswer; var Buttons: array of TMyMsgButton; i: Integer; MsgResult: TMyMsgResult; TextMessage: String; begin FUIActionHandler := ActionHandler; SetLength(Buttons, Length(PossibleResponses)); for i := 0 to Length(PossibleResponses) - 1 do Buttons[i] := ResponseToButton[PossibleResponses[i]]; TextMessage := Msg; if (Msg <> '') and (Question <> '') then TextMessage := TextMessage { + LineEnding} + ' '; TextMessage := TextMessage + Question; MsgResult := MsgBox(TextMessage, Buttons, ResponseToButton[DefaultOKResponse], ResponseToButton[DefaultCancelResponse], @QuestionActionHandler); Result := ResultToResponse[MsgResult]; end; procedure TFileSourceOperationMessageBoxesUI.QuestionActionHandler( Button: TMyMsgActionButton); begin if Assigned(FUIActionHandler) then FUIActionHandler(ButtonToUIAction[Button]); end; end. doublecmd-1.1.30/src/filesources/ufilesourceoperation.pas0000644000175000001440000011446115104114162022661 0ustar alexxusersunit uFileSourceOperation; {$mode objfpc}{$H+} // If defined causes to synchronize executing callback for events. // This ensures that the callbacks always have the operation in the current state, // which might be safer, but it is slower because the operation must wait // until all callbacks are executed. // If undefined then all events are sent asynchronously, which is faster. // However, it may result in those events to be reported much later after // they have happened in the operation and the operation state might // not be valid anymore. //{$DEFINE fsoSynchronizeEvents} // If defined it will only send one event and will not send more // until that event is processed (so some events may be lost). // This normally shouldn't be defined. //{$DEFINE fsoSendOnlyCurrentState} //{$DEFINE debugFileSourceOperation} interface uses Classes, SysUtils, syncobjs, uLng, uFileSourceOperationOptionsUI, uFileSourceOperationTypes, uFileSourceOperationUI, uFile; type TFileSourceOperationState = (fsosNotStarted, // 0 then // Get the UI that was most recently added. Result := PUserInterfacesEntry(FUserInterfaces.Last)^.UserInterface else Result := nil; end; end; procedure TFileSourceOperation.DoPauseIfNeeded(DesiredStates: TFileSourceOperationStates); begin FStateLock.Acquire; try if not (GetDesiredState in DesiredStates) then Exit; FPauseEvent.ResetEvent; finally FStateLock.Release; end; if GetCurrentThreadId <> MainThreadID then FPauseEvent.WaitFor(INFINITE) // wait indefinitely else begin while FPauseEvent.WaitFor(100) = wrTimeout do WidgetSet.AppProcessMessages; end; end; procedure TFileSourceOperation.DoUnPause; begin FPauseEvent.SetEvent; end; function TFileSourceOperation.DoWaitForConnection: TWaitResult; begin FConnectionAvailableEvent.ResetEvent; Result:= FConnectionAvailableEvent.WaitFor(FConnectionTimeout); end; function TFileSourceOperation.WaitForConnection: TWaitResult; begin UpdateState(fsosWaitingForConnection); Result:= DoWaitForConnection; UpdateStartTime(SysUtils.Now); UpdateState(fsosRunning); end; procedure TFileSourceOperation.ConnectionAvailableNotify; begin FConnectionAvailableEvent.SetEvent; end; function TFileSourceOperation.GetConnection: TObject; begin Result := (FileSource as IFileSource).GetConnection(Self); end; function TFileSourceOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin Result := rsOperWorking; end; procedure TFileSourceOperation.CheckOperationState; begin case GetDesiredState of fsosPaused: begin if UpdateState(fsosPaused, [fsosPausing]) then begin DoPauseIfNeeded([fsosPaused]); // Check if the operation was unpaused because it is being aborted. if GetDesiredState = fsosStopped then RaiseAbortOperation; UpdateStartTime(SysUtils.Now); if FOperationInitialized then UpdateState(fsosRunning) else UpdateState(fsosStarting); end; end; fsosStopped: // operation was asked to stop (via Stop function) begin RaiseAbortOperation; end; // else: we're left with fsosRunning end; end; function TFileSourceOperation.CheckOperationStateSafe: Boolean; begin try CheckOperationState; except on E: EFileSourceOperationAborting do Exit(False); end; Result:= True; end; function TFileSourceOperation.AppProcessMessages(CheckState: Boolean): Boolean; begin if GetCurrentThreadId = MainThreadID then begin WidgetSet.AppProcessMessages; end; if CheckState then try CheckOperationState; except on E: EFileSourceOperationAborting do Exit(False); end; Result:= True; end; procedure TFileSourceOperation.UpdateStartTime(NewStartTime: TDateTime); begin FStartTime := NewStartTime; UpdateStatisticsAtStartTime; end; procedure TFileSourceOperation.Start; var LocalState: TFileSourceOperationState; begin FStateLock.Acquire; try if FState in [fsosPausing] then // The operation didn't manage to pause yet, so simply go back to running state. FState := fsosRunning else if FState in [fsosNotStarted, fsosPaused] then FState := fsosStarting else Exit; LocalState := FState; finally FStateLock.Release; end; NotifyStateChanged(LocalState); FDesiredState := fsosRunning; DoUnPause; end; procedure TFileSourceOperation.Pause; begin FStateLock.Acquire; try if FState in [fsosStarting, fsosRunning, fsosWaitingForConnection] then FState := fsosPausing else Exit; finally FStateLock.Release; end; NotifyStateChanged(fsosPausing); FDesiredState := fsosPaused; // Also set "Connection available" event in case the operation is waiting // for a connection and the user wants to pause it // (this must be after setting desired state). ConnectionAvailableNotify; end; procedure TFileSourceOperation.Stop; begin FStateLock.Acquire; try if not (FState in [fsosStopping, fsosStopped]) then FState := fsosStopping else Exit; finally FStateLock.Release; end; NotifyStateChanged(fsosStopping); FDesiredState := fsosStopped; DoUnPause; // Also set "Connection available" event in case the operation is waiting // for a connection and the user wants to abort it // (this must be after setting desired state). ConnectionAvailableNotify; // The operation may be waiting for the user's response. // Wake it up then, because it is being aborted // (this must be after setting state to Stopping). RTLeventSetEvent(FUserInterfaceAssignedEvent); end; procedure TFileSourceOperation.TogglePause; begin if State in [fsosStarting, fsosRunning, fsosWaitingForConnection] then Pause else Start; end; procedure TFileSourceOperation.PreventStart; begin FDesiredState := fsosNotStarted; end; procedure TFileSourceOperation.AssignThread(AThread: TThread); begin FThread := AThread; end; procedure TFileSourceOperation.AddStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); var Entry: PStateChangedEventEntry; i: Integer; begin FEventsLock.Acquire; try // Check if this function isn't already added. for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); if Entry^.FunctionToCall = FunctionToCall then begin // Add states to listen for. Entry^.States := Entry^.States + States; Exit; end; end; // Add new listener. Entry := New(PStateChangedEventEntry); Entry^.FunctionToCall := FunctionToCall; Entry^.States := States; FStateChangedEventListeners.Add(Entry); finally FEventsLock.Release; end; end; procedure TFileSourceOperation.RemoveStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); var Entry: PStateChangedEventEntry; i: Integer; begin FEventsLock.Acquire; try for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); if Entry^.FunctionToCall = FunctionToCall then begin // Remove listening for states. Entry^.States := Entry^.States - States; // If all states removed - remove the callback function itself. if Entry^.States = [] then begin FStateChangedEventListeners.Delete(i); Dispose(Entry); end; break; end; end; finally FEventsLock.Release; end; end; procedure TFileSourceOperation.NotifyStateChanged(NewState: TFileSourceOperationState); var i: Integer; found: Boolean = False; begin FEventsLock.Acquire; try {$IFNDEF fsoSynchronizeEvents} {$IFDEF fsoSendOnlyCurrentState} // If we only want to notify about the current state, first check // if there already isn't scheduled (queued) a call to CallEventsListeners. if FScheduledEventsListenersCalls > 0 then Exit; {$ENDIF} {$ENDIF} // Check if there is at least one listener that wants the new state. for i := 0 to FStateChangedEventListeners.Count - 1 do begin if NewState in PStateChangedEventEntry(FStateChangedEventListeners.Items[i])^.States then begin found := True; break; end; end; if not found then Exit; {$IFNDEF fsoSynchronizeEvents} // This must be under the same lock as in CallEventsListeners. InterLockedIncrement(FScheduledEventsListenersCalls); RTLeventResetEvent(FNoEventsListenersCallsScheduledEvent); {$ENDIF} finally FEventsLock.Release; end; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Before notify events'); {$ENDIF} if GetCurrentThreadID <> MainThreadID then // NotifyStateChanged() is run from the operation thread so we cannot // call event listeners directly, because they may update the GUI. {$IFDEF fsoSynchronizeEvents} // Call listeners through Synchronize. TThread.Synchronize(Thread, @CallEventsListeners) {$ELSE} // Schedule listeners through asynchronous message queue. GuiMessageQueue.QueueMethod(@CallEventsListeners, Pointer(PtrUInt(NewState))) {$ENDIF} else begin // The function was called from main thread - call directly. if GetCurrentThreadID <> MainThreadID then begin // The operation runs in a thread. // Handle exceptions for the GUI thread because it controls the operation // and in case of error the operation may be left in infinite waiting state. try {$IFDEF fsoSynchronizeEvents} CallEventsListeners; {$ELSE} CallEventsListeners(Pointer(PtrUInt(NewState))); {$ENDIF} except on Exception do begin WriteExceptionToErrorFile; DCDebug(ExceptionToString); ShowExceptionDialog; end; end; end else begin {$IFDEF fsoSynchronizeEvents} CallEventsListeners; {$ELSE} CallEventsListeners(Pointer(PtrUInt(NewState))); {$ENDIF} end; end; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': After notify events'); {$ENDIF} end; {$IFDEF fsoSynchronizeEvents} procedure TFileSourceOperation.CallEventsListeners; {$ELSE} procedure TFileSourceOperation.CallEventsListeners(Data: Pointer); {$ENDIF} var Entry: PStateChangedEventEntry; i: Integer; aState: TFileSourceOperationState; FunctionsToCall: array of TFileSourceOperationStateChangedNotify; FunctionsCount: Integer = 0; begin {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Before call events'); {$ENDIF} {$IFDEF fsoSynchronizeEvents} aState := Self.State; {$ELSE} {$IFDEF fsoSendOnlyCurrentState} aState := Self.State; {$ELSE} aState := TFileSourceOperationState(PtrUInt(Data)); {$ENDIF} InterLockedDecrement(FScheduledEventsListenersCalls); {$ENDIF} // First the listeners functions must be copied under lock before calling them, // because any function called may attempt to add/remove listeners from the list. FEventsLock.Acquire; try SetLength(FunctionsToCall, FStateChangedEventListeners.Count); for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); // Check if the listener wants this state. if (aState in Entry^.States) then begin FunctionsToCall[FunctionsCount] := Entry^.FunctionToCall; Inc(FunctionsCount, 1); end; end; finally FEventsLock.Release; end; // Call each listener function (not under lock). for i := 0 to FunctionsCount - 1 do FunctionsToCall[i](Self, aState); {$IFNDEF fsoSynchronizeEvents} FEventsLock.Acquire; try // This must be under the same lock as in NotifyStateChanged. if FScheduledEventsListenersCalls = 0 then RTLeventSetEvent(FNoEventsListenersCallsScheduledEvent); finally FEventsLock.Release; end; {$ENDIF} {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(Self), ' ', FormatDateTime('nnss.zzzz', Now), ': After call events'); {$ENDIF} end; procedure TFileSourceOperation.AddUserInterface(UserInterface: TFileSourceOperationUI); var Entry: PUserInterfacesEntry; begin Entry := New(PUserInterfacesEntry); Entry^.UserInterface := UserInterface; FUserInterfaces.Add(Entry); // Notify a possibly waiting operation thread that an UI was assigned. RTLeventSetEvent(FUserInterfaceAssignedEvent); end; procedure TFileSourceOperation.RemoveUserInterface(UserInterface: TFileSourceOperationUI); var Entry: PUserInterfacesEntry; i: Integer; begin for i := 0 to FUserInterfaces.Count - 1 do begin Entry := PUserInterfacesEntry(FUserInterfaces.Items[i]); if Entry^.UserInterface = UserInterface then begin FUserInterfaces.Delete(i); Dispose(Entry); break; end; end; if FUserInterfaces.Count = 0 then // Last interface was removed - reset event so that operation // thread will wait for an UI if it wants to ask a question. RTLeventResetEvent(FUserInterfaceAssignedEvent); end; class function TFileSourceOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := nil; end; class function TFileSourceOperation.GetOperationClass: TFileSourceOperationClass; begin Result := Self; end; function TFileSourceOperation.AskQuestion( Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIAnswer; ActionHandler: TFileSourceOperationUIActionHandler = nil ) : TFileSourceOperationUIAnswer; var i: Integer; bStateChanged: Boolean = False; OldState: TFileSourceOperationState; begin FStateLock.Acquire; try if FState in [fsosStopping, fsosStopped] then RaiseAbortOperation else begin OldState := FState; FState := fsosWaitingForFeedback; end; finally FStateLock.Release; end; NotifyStateChanged(fsosWaitingForFeedback); // Set up parameters through variables because // we cannot pass them via Synchronize call to TryAskQuestion. FUIMessage := Msg; FUIQuestion := Question; SetLength(FUIPossibleResponses, Length(PossibleResponses)); for i := 0 to Length(PossibleResponses) - 1 do FUIPossibleResponses[i] := PossibleResponses[i]; FUIDefaultOKResponse := DefaultOKResponse; FUIDefaultCancelResponse := DefaultCancelResponse; FUIActionHandler := ActionHandler; if GetCurrentThreadID <> MainThreadID then begin while True do begin TThread.Synchronize(Thread, @TryAskQuestion); // Check result of TryAskQuestion. if FTryAskQuestionResult = False then begin // There is no UI assigned - wait until it is assigned. RTLeventWaitFor(FUserInterfaceAssignedEvent); // Check why the event was set. // It is either because an UI was assigned or because the operation is being aborted. if State in [fsosStopping, fsosStopped] then begin // The operation is being aborted. RaiseAbortOperation; break; end; // else we got an UI assigned - retry asking question end else begin // Received answer from the user. Result := FUIResponse; break; end; end; end else begin // The operation is probably run from main thread - call directly. TryAskQuestion; if FTryAskQuestionResult = False then // There is no UI assigned - assume default OK answer. Result := DefaultOKResponse else Result := FUIResponse; end; FStateLock.Acquire; try // Check, if the state is still the same as before asking question. if FState = fsosWaitingForFeedback then begin UpdateStartTime(SysUtils.Now); FState := OldState; bStateChanged := True; end; finally FStateLock.Release; end; if bStateChanged then NotifyStateChanged(OldState); end; procedure TFileSourceOperation.TryAskQuestion; var UI: TFileSourceOperationUI; begin // This is run from GUI thread. FTryAskQuestionResult := False; // We have no answer yet. UI := GetUserInterface; if Assigned(UI) then begin FUIResponse := UI.AskQuestion( FUIMessage, FUIQuestion, FUIPossibleResponses, FUIDefaultOKResponse, FUIDefaultCancelResponse, FUIActionHandler); FTryAskQuestionResult := True; // We do have an answer now. end; // else We have no UIs assigned - cannot ask question. end; procedure TFileSourceOperation.ReloadFileSources; begin TThread.Synchronize(Thread, @DoReloadFileSources); // Calls virtual function end; procedure TFileSourceOperation.DoReloadFileSources; begin // Nothing by default. end; class procedure TFileSourceOperation.RaiseAbortOperation; begin raise EFileSourceOperationAborting.Create; end; constructor EFileSourceOperationAborting.Create; begin inherited Create('aborting file source operation'); end; end. doublecmd-1.1.30/src/filesources/ufilesourcemoveoperation.pas0000644000175000001440000001476715104114162023560 0ustar alexxusersunit uFileSourceMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceMoveOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that moves or renames files within the same file source (for example: in the same archive, in the same ftp server). } { TFileSourceMoveOperation } TFileSourceMoveOperation = class(TFileSourceOperation) private FStatistics: TFileSourceMoveOperationStatistics; FStatisticsAtStartTime: TFileSourceMoveOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceMoveOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceMoveOperation.RetrieveStatistics: TFileSourceMoveOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceMoveOperation.ShowCompareFilesUIByFileObject(SourceFile: TFile; TargetFile: TFile); begin PrepareToolData(FFileSource, SourceFile, FFileSource, TargetFile, @ShowDifferByGlobList, True); end; procedure TFileSourceMoveOperation.ShowCompareFilesUI(SourceFile: TFile; const TargetFilePath: String); var TargetFile: TFile = nil; begin TargetFile := FFileSource.CreateFileObject(ExtractFilePath(TargetFilePath)); TargetFile.Name := ExtractFileName(TargetFilePath); try PrepareToolData(FFileSource, SourceFile, FFileSource, TargetFile, @ShowDifferByGlobList, True); finally TargetFile.Free; end; end; function TFileSourceMoveOperation.GetID: TFileSourceOperationType; begin Result := fsoMove; end; procedure TFileSourceMoveOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 2); Paths[0] := FSourceFiles.Path; // Move source path Paths[1] := FTargetPath; // Move target path FFileSource.Reload(Paths); end; function TFileSourceMoveOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperMovingSomethingTo, [SourceFiles[0].Name, TargetPath]) else Result := Format(rsOperMovingFromTo, [SourceFiles.Path, TargetPath]); end; else Result := rsOperMoving; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcelistoperation.pas0000644000175000001440000000407015104114162023547 0ustar alexxusersunit uFileSourceListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFile, uFileSource; type { TFileSourceListOperation } TFileSourceListOperation = class(TFileSourceOperation) private FFileSource: IFileSource; FPath: String; protected FFiles: TFiles; FFlatView: Boolean; function GetFiles: TFiles; function GetID: TFileSourceOperationType; override; procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; // Retrieves files and revokes ownership of TFiles list. // The result of this function should be freed by the caller. function ReleaseFiles: TFiles; property Files: TFiles read GetFiles; property Path: String read FPath; property FlatView: Boolean write FFlatView; end; implementation uses uLng; constructor TFileSourceListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFileSource := aFileSource; FPath := aPath; inherited Create(FFileSource); end; destructor TFileSourceListOperation.Destroy; begin inherited Destroy; if Assigned(FFiles) then FreeAndNil(FFiles); end; function TFileSourceListOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperListingIn, [Path]); else Result := rsOperListing; end; end; function TFileSourceListOperation.GetID: TFileSourceOperationType; begin Result := fsoList; end; function TFileSourceListOperation.GetFiles: TFiles; begin Result := FFiles; end; function TFileSourceListOperation.ReleaseFiles: TFiles; begin Result := FFiles; FFiles := nil; // revoke ownership end; procedure TFileSourceListOperation.UpdateStatisticsAtStartTime; begin // Empty. end; end. doublecmd-1.1.30/src/filesources/ufilesourceexecuteoperation.pas0000644000175000001440000000701515104114162024240 0ustar alexxusersunit uFileSourceExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type TFileSourceExecuteOperationResult = (fseorSuccess, // fseorCancelled then FFileSource.Reload(FCurrentPath); end; function TFileSourceExecuteOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperExecutingSomething, [ExecutableFile.Name]); else Result := rsOperExecuting; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcedeleteoperation.pas0000644000175000001440000001104615104114162024037 0ustar alexxusersunit uFileSourceDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type PFileSourceDeleteOperationStatistics = ^TFileSourceDeleteOperationStatistics; TFileSourceDeleteOperationStatistics = record CurrentFile: String; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; FilesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that deletes files from an arbitrary file source. File source should match the class type. } { TFileSourceDeleteOperation } TFileSourceDeleteOperation = class(TFileSourceOperation) private FStatistics: TFileSourceDeleteOperationStatistics; FStatisticsAtStartTime: TFileSourceDeleteOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneFiles then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneFiles, DoneFiles, TotalFiles, StartTime, SysUtils.Now, FilesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneFiles/TotalFiles); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceDeleteOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceDeleteOperation.RetrieveStatistics: TFileSourceDeleteOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcecreatedirectoryoperation.pas0000644000175000001440000000565515104114162025776 0ustar alexxusersunit uFileSourceCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFileSource; type { TFileSourceCreateDirectoryOperation } TFileSourceCreateDirectoryOperation = class(TFileSourceOperation) private FFileSource: IFileSource; FBasePath: String; FDirectoryPath: String; FAbsolutePath: String; FRelativePath: String; protected function GetID: TFileSourceOperationType; override; procedure UpdateStatisticsAtStartTime; override; procedure DoReloadFileSources; override; property BasePath: String read FBasePath; property DirectoryPath: String read FDirectoryPath; property AbsolutePath: String read FAbsolutePath; property RelativePath: String read FRelativePath; public {en @param(aTargetFileSource File source where the directory should be created.) @param(aCurrentPath Absolute path to current directory where the new directory should be created (if its path is not absolute).) @param(aDirectoryPath Absolute or relative (to TargetFileSource.CurrentPath) path to a directory that should be created.) } constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; end; implementation uses DCStrUtils, uLng; constructor TFileSourceCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FBasePath := aCurrentPath; FDirectoryPath := aDirectoryPath; if FFileSource.GetPathType(FDirectoryPath) = ptAbsolute then begin FAbsolutePath := FDirectoryPath; FRelativePath := ExtractDirLevel(aCurrentPath, FDirectoryPath); end else begin FAbsolutePath := aCurrentPath + FDirectoryPath; FRelativePath := FDirectoryPath; end; end; destructor TFileSourceCreateDirectoryOperation.Destroy; begin inherited Destroy; end; procedure TFileSourceCreateDirectoryOperation.UpdateStatisticsAtStartTime; begin // empty end; function TFileSourceCreateDirectoryOperation.GetID: TFileSourceOperationType; begin Result := fsoCreateDirectory; end; procedure TFileSourceCreateDirectoryOperation.DoReloadFileSources; begin FFileSource.Reload(FFileSource.GetParentDir(FAbsolutePath)); end; function TFileSourceCreateDirectoryOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperCreatingSomeDirectory, [AbsolutePath]); else Result := rsOperCreatingDirectory; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcecopyoperation.pas0000644000175000001440000002257615104114162023561 0ustar alexxusersunit uFileSourceCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, DCOSUtils, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFile; type // Statistics are the same for CopyIn and CopyOut operations. PFileSourceCopyOperationStatistics = ^TFileSourceCopyOperationStatistics; TFileSourceCopyOperationStatistics = record CurrentFileFrom: String; CurrentFileTo: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Base class for CopyIn and CopyOut operations. } { TFileSourceCopyOperation } TFileSourceCopyOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCopyOperationStatistics; FStatisticsAtStartTime: TFileSourceCopyOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, Abs(DoneBytes), Abs(TotalBytes), StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(Abs(DoneBytes / TotalBytes)); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCopyOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCopyOperation.RetrieveStatistics: TFileSourceCopyOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCopyOperation.ShowCompareFilesUIByFileObject(SourceFile: TFile; TargetFile: TFile); begin PrepareToolData(SourceFileSource, SourceFile, TargetFileSource, TargetFile, @ShowDifferByGlobList, True); end; procedure TFileSourceCopyOperation.ShowCompareFilesUI(SourceFile: TFile; const TargetFilePath: String); var TargetFile: TFile = nil; begin TargetFile := TargetFileSource.CreateFileObject(ExtractFilePath(TargetFilePath)); TargetFile.Name := ExtractFileName(TargetFilePath); try PrepareToolData(SourceFileSource, SourceFile, TargetFileSource, TargetFile, @ShowDifferByGlobList, True); finally TargetFile.Free; end; end; // -- TFileSourceCopyInOperation ---------------------------------------------- function TFileSourceCopyInOperation.GetID: TFileSourceOperationType; begin Result := fsoCopyIn; end; // -- TFileSourceCopyOutOperation --------------------------------------------- function TFileSourceCopyOutOperation.GetID: TFileSourceOperationType; begin Result := fsoCopyOut; end; end. doublecmd-1.1.30/src/filesources/ufilesourcecombineoperation.pas0000644000175000001440000001352715104114162024217 0ustar alexxusersunit uFileSourceCombineOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceCombineOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that combine files within the same file source. } { TFileSourceCombineOperation } TFileSourceCombineOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCombineOperationStatistics; FStatisticsAtStartTime: TFileSourceCombineOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCombineOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCombineOperation.RetrieveStatistics: TFileSourceCombineOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCombineOperation.GetID: TFileSourceOperationType; begin Result := fsoCombine; end; procedure TFileSourceCombineOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := ExtractFilePath(FTargetFile); // Combine target path FFileSource.Reload(Paths); end; function TFileSourceCombineOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperCombiningFromTo, [SourceFiles.Path, TargetFile]); else Result := rsOperCombining; end; end; end. doublecmd-1.1.30/src/filesources/ufilesourcecalcstatisticsoperation.pas0000644000175000001440000001136115104114162025612 0ustar alexxusersunit uFileSourceCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFileProperty, uFile; type TFileSourceCalcStatisticsOperationStatistics = record SupportedProperties: TFilePropertiesTypes; CurrentFile: String; Files: Int64; // only files, i.e., not directories Directories: Int64; Links: Int64; Size: Int64; // total size of all the files CompressedSize: Int64; // if fpCompressedSize supported OldestFile: TDateTime; // if fpModificationTime (or fpDateTime) supported NewestFile: TDateTime; FilesPerSecond: Int64; // Maybe some other: // SystemFiles // ReadOnlyFiles // ExecutableFiles end; {en Operation that calculates several statistics for a directory tree. } { TFileSourceCalcStatisticsOperation } TFileSourceCalcStatisticsOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCalcStatisticsOperationStatistics; FStatisticsAtStartTime: TFileSourceCalcStatisticsOperationStatistics; FStatisticsLock: TCriticalSection; // NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCalcChecksumOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCalcChecksumOperation.RetrieveStatistics: TFileSourceCalcChecksumOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCalcChecksumOperation.DoReloadFileSources; begin if OneFile AND OpenFileAfterOperationCompleted then ShowViewerByGlob(TargetMask); end; end. doublecmd-1.1.30/src/filesources/ufilesource.pas0000644000175000001440000007766515104114162020756 0ustar alexxusersunit uFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, syncobjs, LCLProc, URIParser, Menus, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceProperty, uFileProperty, uFile; type TFileSource = class; TFileSourceConnection = class; IFileSource = interface; TFileSourceField = record Content: String; Header: String; Width: Integer; Option: String; Align: TAlignment; end; TFileSourceFields = array of TFileSourceField; TPathsArray = array of string; TFileSourceOperationsClasses = array[TFileSourceOperationType] of TFileSourceOperationClass; TFileSourceReloadEventNotify = procedure(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray) of object; { IFileSource } IFileSource = interface(IInterface) ['{B7F0C4C8-59F6-4A35-A54C-E8242F4AD809}'] function Equals(aFileSource: IFileSource): Boolean; function IsInterface(InterfaceGuid: TGuid): Boolean; function IsClass(ClassType: TClass): Boolean; function GetClass: TFileSource; function GetURI: TURI; function GetClassName: String; function GetRefCount: Integer; function GetFileSystem: String; function GetCurrentAddress: String; function GetCurrentWorkingDirectory: String; function SetCurrentWorkingDirectory(NewDir: String): Boolean; function GetSupportedFileProperties: TFilePropertiesTypes; function GetRetrievableFileProperties: TFilePropertiesTypes; function GetOperationsTypes: TFileSourceOperationTypes; function GetProperties: TFileSourceProperties; function GetFiles(TargetPath: String): TFiles; function GetParentFileSource: IFileSource; procedure SetParentFileSource(NewValue: IFileSource); function CreateFileObject(const APath: String): TFile; function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); function CreateListOperation(TargetPath: String): TFileSourceOperation; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; function CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; function GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; function IsPathAtRoot(Path: String): Boolean; function GetParentDir(sPath : String): String; function GetRootDir(sPath : String): String; overload; function GetRootDir: String; overload; function GetPathType(sPath : String): TPathType; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; function GetLocalName(var aFile: TFile): Boolean; function CreateDirectory(const Path: String): Boolean; function FileSystemEntryExists(const Path: String): Boolean; function GetDefaultView(out DefaultView: TFileSourceFields): Boolean; function QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); procedure AddChild(AFileSource: IFileSource); procedure Reload(const PathsToReload: TPathsArray); procedure Reload(const PathToReload: String); procedure AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); procedure RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); property URI: TURI read GetURI; property ClassName: String read GetClassName; property FileSystem: String read GetFileSystem; property CurrentAddress: String read GetCurrentAddress; property ParentFileSource: IFileSource read GetParentFileSource write SetParentFileSource; property Properties: TFileSourceProperties read GetProperties; property SupportedFileProperties: TFilePropertiesTypes read GetSupportedFileProperties; property RetrievableFileProperties: TFilePropertiesTypes read GetRetrievableFileProperties; end; { TFileSource } TFileSource = class(TInterfacedObject, IFileSource) private FReloadEventListeners: TMethodList; {en File source on which this file source is dependent on (files that it accesses are on the parent file source). } FParentFileSource: IFileSource; {en Callback called when an operation assigned to a connection finishes. It just redirects to a virtual function. } procedure OperationFinishedCallback(Operation: TFileSourceOperation; State: TFileSourceOperationState); protected FURI: TURI; FCurrentAddress: String; FOperationsClasses: TFileSourceOperationsClasses; {en Children file source list } FChildrenFileSource: TInterfaceList; function GetURI: TURI; {en Retrieves the full address of the file source (the CurrentPath is relative to this). This may be used for specifying address: - archive : path to archive - network : address of server etc. } function GetCurrentAddress: String; virtual; {en Retrieves the current directory of the file source. } function GetCurrentWorkingDirectory: String; virtual; {en Sets the current directory for the file source. @returns(@true if path change was successful, @false otherwise) } function SetCurrentWorkingDirectory(NewDir: String): Boolean; virtual; {en Returns all the properties supported by the file type of the given file source. } function GetSupportedFileProperties: TFilePropertiesTypes; virtual; {en Returns all the file properties that can be retrieved by the file source. } function GetRetrievableFileProperties: TFilePropertiesTypes; virtual; function GetParentFileSource: IFileSource; procedure SetParentFileSource(NewValue: IFileSource); {en Checks if the connection is available and, if it is, assigns it to the operation. @returns(Connection object if the connection is available, @nil otherwise.) } function TryAcquireConnection(connection: TFileSourceConnection; operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure OperationFinished(Operation: TFileSourceOperation); virtual; {en Reloads any internal file lists/caches. @param(PathsToReload Describes paths in file source from which file lists should be reloaded. The function may also reload any subpaths, though that is dependent on the specific file source implementation.) } procedure DoReload(const PathsToReload: TPathsArray); virtual; function CreateFileObject(const APath: String): TFile; public constructor Create; virtual; overload; constructor Create(const URI: TURI); virtual; overload; destructor Destroy; override; function Equals(aFileSource: IFileSource): Boolean; overload; function IsInterface(InterfaceGuid: TGuid): Boolean; function IsClass(aClassType: TClass): Boolean; function GetClass: TFileSource; function GetClassName: String; // For debugging purposes. function GetRefCount: Integer; // For debugging purposes. // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; virtual; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; virtual; // Retrieves a list of files. // This is the same as GetOperation(fsoList), executing it // and returning the result of Operation.ReleaseFiles. // Caller is responsible for freeing the result list. function GetFiles(TargetPath: String): TFiles; virtual; // Create an empty TFile object with appropriate properties for the file. class function CreateFile(const APath: String): TFile; virtual; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); virtual; function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; virtual; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; virtual; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; virtual; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; virtual; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; virtual; function CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; virtual; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; virtual; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; virtual; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; virtual; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; virtual; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; virtual; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; virtual; function GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; class function GetMainIcon(out Path: String): Boolean; virtual; {en Returns @true if the given path is supported by the file source, @false otherwise. } class function IsSupportedPath(const Path: String): Boolean; virtual; {en Returns @true if the given path is the root path of the file source, @false otherwise. } function IsPathAtRoot(Path: String): Boolean; virtual; function GetParentDir(sPath : String): String; virtual; function GetRootDir(sPath : String): String; virtual; overload; function GetRootDir: String; virtual; overload; function GetPathType(sPath : String): TPathType; virtual; function GetFileSystem: String; virtual; function CreateDirectory(const Path: String): Boolean; virtual; function FileSystemEntryExists(const Path: String): Boolean; virtual; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; virtual; function QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; virtual; function GetDefaultView(out DefaultView: TFileSourceFields): Boolean; virtual; function GetLocalName(var aFile: TFile): Boolean; virtual; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; virtual; {en This function is to ensure the operation does not stay in the queue when it's being destroyed. } procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); virtual; procedure AddChild(AFileSource: IFileSource); {en Reloads the file list from the file source. This is used if a file source has any internal cache or file list. Overwrite DoReload in descendant classes. } procedure Reload(const PathsToReload: TPathsArray); virtual; overload; procedure Reload(const PathToReload: String); overload; procedure AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); procedure RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); property CurrentAddress: String read GetCurrentAddress; property ParentFileSource: IFileSource read GetParentFileSource write SetParentFileSource; property Properties: TFileSourceProperties read GetProperties; property SupportedFileProperties: TFilePropertiesTypes read GetSupportedFileProperties; property RetrievableFileProperties: TFilePropertiesTypes read GetRetrievableFileProperties; end; { TFileSourceConnection } TFileSourceConnection = class private FAssignedOperation: TFileSourceOperation; FOperationLock: TCriticalSection; function GetAssignedOperation: TFileSourceOperation; protected FCurrentPath: String; // Always includes trailing path delimiter. function GetCurrentPath: String; virtual; procedure SetCurrentPath(NewPath: String); virtual; public constructor Create; virtual; destructor Destroy; override; function IsAvailable: Boolean; function Acquire(Operation: TFileSourceOperation): Boolean; procedure Release; property CurrentPath: String read GetCurrentPath write SetCurrentPath; property AssignedOperation: TFileSourceOperation read GetAssignedOperation; end; { TFileSources } TFileSources = class(TInterfaceList) private function Get(I: Integer): IFileSource; public procedure Assign(otherFileSources: TFileSources); property Items[I: Integer]: IFileSource read Get; default; end; { TFileSourceManager } TFileSourceManager = class private FFileSources: TFileSources; // Only allow adding and removing to/from Manager by TFileSource constructor and destructor. procedure Add(aFileSource: IFileSource); procedure Remove(aFileSource: IFileSource); public constructor Create; destructor Destroy; override; function Find(FileSourceClass: TClass; Address: String; CaseSensitive: Boolean = True): IFileSource; end; EFileSourceException = class(Exception); EFileNotFound = class(EFileSourceException) private FFilePath: String; public constructor Create(const AFilePath: string); reintroduce; property FilePath: String read FFilePath; end; var FileSourceManager: TFileSourceManager; implementation uses uDebug, uFileSourceListOperation, uLng; { TFileSource } constructor TFileSource.Create; begin if ClassType = TFileSource then raise Exception.Create('Cannot construct abstract class'); inherited Create; FReloadEventListeners := TMethodList.Create; FileSourceManager.Add(Self); // Increases RefCount // We don't want to count the reference in Manager, because we want to detect // when there are no more references other than this single one in the Manager. // So, we remove this reference here. // When RefCount reaches 0 Destroy gets called and the last remaining reference // (in the Manager) is removed there. InterLockedDecrement(frefcount); DCDebug('Creating ', ClassName); end; constructor TFileSource.Create(const URI: TURI); var AddressURI: TURI; begin Create; FURI:= URI; FillChar(AddressURI, SizeOf(TURI), 0); AddressURI.Protocol:= FURI.Protocol; AddressURI.Username:= FURI.Username; AddressURI.Host:= FURI.Host; AddressURI.Port:= FURI.Port; AddressURI.HasAuthority:= FURI.HasAuthority; FCurrentAddress:= EncodeURI(AddressURI); end; destructor TFileSource.Destroy; begin DCDebug('Destroying ', ClassName, ' when refcount=', DbgS(refcount)); if RefCount <> 0 then begin // There could have been an exception raised in the constructor // in which case RefCount will be 1, so only issue warning if there was no exception. // This will check for any exception, but it's enough for a warning. if not Assigned(ExceptObject) then DCDebug('Error: RefCount <> 0 for ', Self.ClassName); end; if Assigned(FileSourceManager) then begin // Restore reference removed in Create and // remove the instance remaining in Manager. // Increase refcount by 2, because we don't want removing the last instance // from Manager to trigger another Destroy. // RefCount = 0 InterLockedIncrement(frefcount); InterLockedIncrement(frefcount); // RefCount = 2 FileSourceManager.Remove(Self); // RefCount = 1 InterLockedDecrement(frefcount); // RefCount = 0 (back at the final value) end else DCDebug('Error: Cannot remove file source - manager already destroyed!'); FreeAndNil(FChildrenFileSource); FreeAndNil(FReloadEventListeners); inherited Destroy; end; function TFileSource.Equals(aFileSource: IFileSource): Boolean; begin // Both interface variables must be brought to the same interface. Result := (Self as IFileSource) = (aFileSource as IFileSource); end; function TFileSource.IsInterface(InterfaceGuid: TGuid): Boolean; var t: TObject; begin Result := (Self.QueryInterface(InterfaceGuid, t) = S_OK); if Result then _Release; // QueryInterface increases refcount. end; function TFileSource.IsClass(aClassType: TClass): Boolean; begin Result := Self is aClassType; end; function TFileSource.GetClass: TFileSource; begin Result := Self end; function TFileSource.GetClassName: String; begin Result := ClassName; end; function TFileSource.GetRefCount: Integer; begin Result := RefCount; end; function TFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := []; end; function TFileSource.GetProperties: TFileSourceProperties; begin Result := []; end; function TFileSource.GetURI: TURI; begin Result := FURI; end; function TFileSource.GetCurrentAddress: String; begin Result := FCurrentAddress; end; function TFileSource.GetCurrentWorkingDirectory: String; begin Result := ''; end; function TFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin // By default every path setting succeeds. Result := True; end; function TFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := [fpName]; end; function TFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result := []; end; function TFileSource.GetParentFileSource: IFileSource; begin Result := FParentFileSource; end; procedure TFileSource.SetParentFileSource(NewValue: IFileSource); begin FParentFileSource := NewValue; end; function TFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (Path = GetRootDir(Path)); end; function TFileSource.GetParentDir(sPath : String): String; begin Result := DCStrUtils.GetParentDir(sPath); end; function TFileSource.GetRootDir(sPath : String): String; begin // Default root is '/'. Override in descendant classes for other. Result := PathDelim; end; function TFileSource.GetRootDir: String; begin Result := GetRootDir(''); end; function TFileSource.GetPathType(sPath : String): TPathType; begin Result := ptNone; if sPath <> '' then begin // Default root is '/'. Override in descendant classes for other. if (sPath[1] = PathDelim) then Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative; end; end; function TFileSource.GetFileSystem: String; begin Result:= EmptyStr; end; function TFileSource.CreateDirectory(const Path: String): Boolean; begin Result := False; end; function TFileSource.FileSystemEntryExists(const Path: String): Boolean; begin Result := True; end; function TFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := False; // not supported by default end; function TFileSource.QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; begin Result:= False; end; function TFileSource.GetDefaultView(out DefaultView: TFileSourceFields): Boolean; begin Result:= False; end; function TFileSource.GetLocalName(var aFile: TFile): Boolean; begin Result:= False; end; // Operations. function TFileSource.GetFiles(TargetPath: String): TFiles; var Operation: TFileSourceOperation; ListOperation: TFileSourceListOperation; begin Result := nil; if fsoList in GetOperationsTypes then begin Operation := CreateListOperation(TargetPath); if Assigned(Operation) then try ListOperation := Operation as TFileSourceListOperation; ListOperation.Execute; Result := ListOperation.ReleaseFiles; finally FreeAndNil(Operation); end; end; end; class function TFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); end; function TFileSource.CreateFileObject(const APath: String): TFile; begin Result := CreateFile(APath); end; procedure TFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); begin // Does not set any properties by default. end; function TFileSource.CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; begin Result := ((PropertiesToSet - AFile.AssignedProperties) * RetrievableFileProperties) <> []; end; function TFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; begin Result:= nil; end; function TFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; begin Result := nil; end; function TFileSource.GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; begin Result := FOperationsClasses[OperationType]; end; class function TFileSource.GetMainIcon(out Path: String): Boolean; begin Result := False; end; class function TFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= True; end; function TFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin // By default connections are not supported. Result := nil; end; function TFileSource.TryAcquireConnection(connection: TFileSourceConnection; operation: TFileSourceOperation): TFileSourceConnection; begin if connection.Acquire(operation) then begin // We must know when the operation is finished, // that is when the connection is free again. operation.AddStateChangedListener([fsosStopped], @OperationFinishedCallback); Result := connection; end else begin Result := nil; end; end; procedure TFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin // Nothing by default. end; procedure TFileSource.AddChild(AFileSource: IFileSource); begin if (FChildrenFileSource = nil) then begin FChildrenFileSource:= TInterfaceList.Create; end else if FChildrenFileSource.Count > 32 then begin FChildrenFileSource.Delete(0); end; FChildrenFileSource.Add(AFileSource); end; procedure TFileSource.OperationFinishedCallback(Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if State = fsosStopped then begin Operation.RemoveStateChangedListener([fsosStopped], @OperationFinishedCallback); OperationFinished(Operation); end; end; procedure TFileSource.OperationFinished(Operation: TFileSourceOperation); begin // Nothing by default. end; procedure TFileSource.DoReload(const PathsToReload: TPathsArray); begin // Nothing by default. end; procedure TFileSource.Reload(const PathsToReload: TPathsArray); var i: Integer; FunctionToCall: TFileSourceReloadEventNotify; begin DoReload(PathsToReload); if Assigned(FReloadEventListeners) then for i := 0 to FReloadEventListeners.Count - 1 do begin FunctionToCall := TFileSourceReloadEventNotify(FReloadEventListeners.Items[i]); FunctionToCall(Self, PathsToReload); end; end; procedure TFileSource.Reload(const PathToReload: String); var PathsToReload: TPathsArray; begin SetLength(PathsToReload, 1); PathsToReload[0] := PathToReload; Reload(PathsToReload); end; procedure TFileSource.AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); begin FReloadEventListeners.Add(TMethod(FunctionToCall)); end; procedure TFileSource.RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); begin FReloadEventListeners.Remove(TMethod(FunctionToCall)); end; { TFileSourceConnection } constructor TFileSourceConnection.Create; begin FOperationLock := TCriticalSection.Create; inherited Create; DCDebug('Creating connection ', ClassName); end; destructor TFileSourceConnection.Destroy; begin if Assigned(FAssignedOperation) and (FAssignedOperation.State <> fsosStopped) then DCDebug('Error: Destroying connection ', ClassName, ' with active operation ', FAssignedOperation.ClassName); inherited Destroy; DCDebug('Destroying connection ', ClassName); FreeAndNil(FOperationLock); end; function TFileSourceConnection.GetAssignedOperation: TFileSourceOperation; begin // For just reading lock is probably not needed here. Result := FAssignedOperation; end; function TFileSourceConnection.GetCurrentPath: String; begin Result := FCurrentPath; end; procedure TFileSourceConnection.SetCurrentPath(NewPath: String); begin if NewPath <> '' then NewPath := IncludeTrailingPathDelimiter(NewPath); FCurrentPath := NewPath; end; function TFileSourceConnection.IsAvailable: Boolean; begin Result := (GetAssignedOperation() = nil); end; function TFileSourceConnection.Acquire(Operation: TFileSourceOperation): Boolean; begin FOperationLock.Acquire; try Result := (FAssignedOperation = nil); if Result then FAssignedOperation := Operation; finally FOperationLock.Release; end; end; procedure TFileSourceConnection.Release; begin FOperationLock.Acquire; try FAssignedOperation := nil; finally FOperationLock.Release; end; end; { TFileSources } function TFileSources.Get(I: Integer): IFileSource; begin if (I >= 0) and (I < Count) then Result := inherited Items[I] as IFileSource else Result := nil; end; procedure TFileSources.Assign(otherFileSources: TFileSources); var i: Integer; begin Clear; for i := 0 to otherFileSources.Count - 1 do Add(otherFileSources.Items[i]); end; { TFileSourceManager } constructor TFileSourceManager.Create; begin FFileSources := TFileSources.Create; end; destructor TFileSourceManager.Destroy; var i: Integer; begin if FFileSources.Count > 0 then begin DCDebug('Warning: Destroying manager with existing file sources!'); for i := 0 to FFileSources.Count - 1 do begin // Restore the reference taken in TFileSource.Create before removing // all file sources from the list. FFileSources[i]._AddRef; // Free instance. FFileSources.put(i, nil); end; end; FreeAndNil(FFileSources); inherited Destroy; end; procedure TFileSourceManager.Add(aFileSource: IFileSource); begin if FFileSources.IndexOf(aFileSource) < 0 then begin FFileSources.Add(aFileSource); end else DCDebug('Error: File source already exists in manager!'); end; procedure TFileSourceManager.Remove(aFileSource: IFileSource); begin FFileSources.Remove(aFileSource); end; function TFileSourceManager.Find(FileSourceClass: TClass; Address: String; CaseSensitive: Boolean): IFileSource; var I: Integer; StrCmp: function(const S1, S2: String): Integer; begin if CaseSensitive then StrCmp:= @CompareStr else begin StrCmp:= @CompareText; end; for I := 0 to FFileSources.Count - 1 do begin if (FFileSources[I].IsClass(FileSourceClass)) and (StrCmp(FFileSources[I].CurrentAddress, Address) = 0) then begin Result := FFileSources[I]; Exit; end; end; Result := nil; end; constructor EFileNotFound.Create(const AFilePath: string); begin FFilePath := AFilePath; inherited Create(Format(rsMsgFileNotFound, [aFilePath])); end; initialization FileSourceManager := TFileSourceManager.Create; finalization FreeAndNil(FileSourceManager); end. doublecmd-1.1.30/src/filesources/uarchivefilesourceutil.pas0000644000175000001440000003761615104114162023206 0ustar alexxusersunit uArchiveFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileView, uFile, uArchiveFileSource, uFileSource, uOperationsManager; function GetArchiveFileSource(SourceFileSource: IFileSource; ArchiveFile: TFile; ArchiveType: String; ArchiveSign: Boolean; IncludeHidden: Boolean): IArchiveFileSource; procedure TestArchive(aFileView: TFileView; aFiles: TFiles; QueueIdentifier: TOperationsManagerQueueIdentifier); function FileIsArchive(const FileName: String): Boolean; procedure FillAndCount(Files: TFiles; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure InstallPlugin(const FileName: String); implementation uses DCOSUtils, DCClassesUtf8, DCStrUtils, uFindEx, uShowMsg, uLng, uGlobs, uDefaultPlugins, uFileSourceProperty, uWcxModule, uWfxModule, uFileProcs, uWcxArchiveFileSource, uMultiArchiveFileSource, uFileSystemFileSource, uTempFileSystemFileSource, uFileSourceOperation, uArchiveCopyOperation, uFileSourceOperationTypes, uGlobsPaths, uSysFolders, fOptionsPluginsBase, fOptions; // Only for direct access file sources. function GetArchiveFileSourceDirect(SourceFileSource: IFileSource; ArchiveFileName: String; ArchiveType: String; ArchiveSign: Boolean; IncludeHidden: Boolean): IArchiveFileSource; begin if not (fspDirectAccess in SourceFileSource.Properties) then Exit(nil); // Check if there is a registered WCX plugin for possible archive. Result := FileSourceManager.Find(TWcxArchiveFileSource, ArchiveFileName) as IArchiveFileSource; if not Assigned(Result) then begin if ArchiveSign then Result := TWcxArchiveFileSource.CreateByArchiveSign(SourceFileSource, ArchiveFileName) else if (ArchiveType = EmptyStr) then Result := TWcxArchiveFileSource.CreateByArchiveName(SourceFileSource, ArchiveFileName) else Result := TWcxArchiveFileSource.CreateByArchiveType(SourceFileSource, ArchiveFileName, ArchiveType, IncludeHidden); end; // Check if there is a registered MultiArc addon for possible archive. if not Assigned(Result) then begin Result := FileSourceManager.Find(TMultiArchiveFileSource, ArchiveFileName) as IArchiveFileSource; if not Assigned(Result) then begin if ArchiveSign then Result := TMultiArchiveFileSource.CreateByArchiveSign(SourceFileSource, ArchiveFileName) else if (ArchiveType = EmptyStr) then Result := TMultiArchiveFileSource.CreateByArchiveName(SourceFileSource, ArchiveFileName) else Result := TMultiArchiveFileSource.CreateByArchiveType(SourceFileSource, ArchiveFileName, ArchiveType); end; end; end; function GetArchiveFileSource(SourceFileSource: IFileSource; ArchiveFile: TFile; ArchiveType: String; ArchiveSign: Boolean; IncludeHidden: Boolean): IArchiveFileSource; var TempFS: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; Files: TFiles = nil; LocalArchiveFile: TFile; begin if fspDirectAccess in SourceFileSource.Properties then begin Result := GetArchiveFileSourceDirect(SourceFileSource, ArchiveFile.FullPath, ArchiveType, ArchiveSign, IncludeHidden); Exit; end; Result := nil; if fspLinksToLocalFiles in SourceFileSource.Properties then begin LocalArchiveFile := ArchiveFile.Clone; try if SourceFileSource.GetLocalName(LocalArchiveFile) then begin TempFS := TTempFileSystemFileSource.Create(LocalArchiveFile.Path); // Source FileSource manages the files, not the TempFileSource. TempFS.DeleteOnDestroy := False; // The files on temp file source are valid as long as source FileSource is valid. TempFS.ParentFileSource := SourceFileSource; Result := GetArchiveFileSourceDirect(TempFS, LocalArchiveFile.FullPath, ArchiveType, ArchiveSign, IncludeHidden); // If not successful will try to get files through CopyOut below. end; finally FreeAndNil(LocalArchiveFile); end; end; if (not Assigned(Result)) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin // If checking by extension we don't have to unpack files yet. // First check if there is a registered plugin for the archive extension. if (not ArchiveSign) and (not (TWcxArchiveFileSource.CheckPluginByName(ArchiveFile.Name) or TMultiArchiveFileSource.CheckAddonByName(ArchiveFile.Name))) then begin // No registered handlers for the archive extension. Exit; end; // else either there is a handler for the archive extension // or we have to unpack files first to check // (if creating file source by archive signature). try TempFS := TTempFileSystemFileSource.Create; Files := TFiles.Create(ArchiveFile.Path); Files.Add(ArchiveFile.Clone); Operation := SourceFileSource.CreateCopyOutOperation(TempFS, Files, TempFS.FilesystemRoot); if Assigned(Operation) then begin OperationsManager.AddOperationModal(Operation); if Operation.Result = fsorFinished then begin Result := GetArchiveFileSourceDirect( TempFS, IncludeTrailingPathDelimiter(TempFS.FilesystemRoot) + ArchiveFile.Name, ArchiveType, ArchiveSign, IncludeHidden); end; end; finally TempFS := nil; FreeAndNil(Files); end; end; end; procedure TestArchive(aFileView: TFileView; aFiles: TFiles; QueueIdentifier: TOperationsManagerQueueIdentifier); var I: Integer; FilesToTest: TFiles = nil; Operation: TFileSourceOperation = nil; ArchiveFileSource: IArchiveFileSource; QueueId: TOperationsManagerQueueIdentifier; begin try // if in archive if aFileView.FileSource.IsClass(TArchiveFileSource) then begin FilesToTest := aFiles.Clone; if fsoTestArchive in aFileView.FileSource.GetOperationsTypes then begin Operation := aFileView.FileSource.CreateTestArchiveOperation(FilesToTest); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); end else msgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgErrNotSupported); end else // if filesystem if aFileView.FileSource.IsClass(TFileSystemFileSource) then begin // If archives count > 1 then put to queue if (aFiles.Count > 1) and (QueueIdentifier = FreeOperationsQueueId) then QueueId := OperationsManager.GetNewQueueIdentifier else begin QueueId := QueueIdentifier; end; for I := 0 to aFiles.Count - 1 do // test all selected archives try // Check if there is a ArchiveFileSource for possible archive. ArchiveFileSource := GetArchiveFileSource(aFileView.FileSource, aFiles[i], EmptyStr, False, True); if Assigned(ArchiveFileSource) then begin // Check if List and fsoTestArchive are supported. if [fsoList, fsoTestArchive] * ArchiveFileSource.GetOperationsTypes = [fsoList, fsoTestArchive] then begin // Get files to test. FilesToTest := ArchiveFileSource.GetFiles(ArchiveFileSource.GetRootDir); if Assigned(FilesToTest) then try // test all files Operation := ArchiveFileSource.CreateTestArchiveOperation(FilesToTest); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation, QueueId, False, True); end else msgWarning(rsMsgNotImplemented); finally FreeAndNil(FilesToTest); end; end else msgWarning(rsMsgErrNotSupported); end; except on E: Exception do msgError(E.Message + LineEnding + aFiles[i].FullPath); end; // for end else msgWarning(rsMsgErrNotSupported); finally end; end; function FileIsArchive(const FileName: String): Boolean; begin Result:= TWcxArchiveFileSource.CheckPluginByName(FileName) or TMultiArchiveFileSource.CheckAddonByName(FileName); end; procedure FillAndCount(Files: TFiles; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure FillAndCountRec(const srcPath: String); var J: Integer; aFile: TFile; sr: TSearchRecEx; aFolders: TStringList; begin aFolders:= TStringList.Create; if FindFirstEx(srcPath + '*', 0, sr) = 0 then begin repeat if (sr.Name='.') or (sr.Name='..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); if aFile.IsLink then begin NewFiles.Add(aFile.Clone); end else if aFile.IsDirectory then begin aFolders.AddObject(srcPath + sr.Name + DirectorySeparator, aFile); end else begin Inc(FilesCount); NewFiles.Add(aFile); FilesSize:= FilesSize + aFile.Size; end; until FindNextEx(sr) <> 0; end; // Process directories for J := 0 to aFolders.Count - 1 do begin NewFiles.Add(TFile(aFolders.Objects[J])); FillAndCountRec(aFolders[J]); // go down to directory end; FindCloseEx(sr); aFolders.Free; end; var I: Integer; aFile: TFile; aFolderList: TStringList; begin FilesSize:= 0; FilesCount:= 0; aFolderList:= TStringList.Create; NewFiles := TFiles.Create(Files.Path); for I := 0 to Files.Count - 1 do begin aFile := Files[I]; if aFile.IsLink then begin NewFiles.Add(aFile.Clone); end else if aFile.IsDirectory then begin aFolderList.AddObject(aFile.Path + aFile.Name + DirectorySeparator, aFile.Clone); end else begin Inc(FilesCount); NewFiles.Add(aFile.Clone); FilesSize:= FilesSize + aFile.Size; // in first level we know file size -> use it end; end; // Process directories for I := 0 to aFolderList.Count - 1 do begin NewFiles.Add(TFile(aFolderList.Objects[I])); FillAndCountRec(aFolderList[I]); // recursive browse child dir end; aFolderList.Free; end; procedure InstallPlugin(const FileName: String); var AFile: TFile; sExt: String; Flags: PtrInt; sType: String; Sfile: String; AFiles: TFiles; Index: Integer; Ini: TIniFileEx; sPlugin: String; sRootName: String; InstallDir: String; sDefaultDir: String; PluginsPath: String; SourceFiles: TFiles; Result: Integer = -1; WcxModule: TWcxModule; WfxModule: TWfxModule; FileSource: IArchiveFileSource; Temp: ITempFileSystemFileSource; Operation: TArchiveCopyOutOperation; begin if FileIsArchive(FileName) then try AFile:= TFileSystemFileSource.CreateFileFromFile(FileName); // Check if there is a ArchiveFileSource for possible archive. FileSource := GetArchiveFileSource(TFileSystemFileSource.GetFileSource, aFile, EmptyStr, False, False); if (FileSource = nil) then raise Exception.Create(rsSimpleWordError); AFiles:= FileSource.GetFiles(PathDelim); try for Index:= 0 to AFiles.Count - 1 do begin sPlugin:= AFiles[Index].Name; if (Length(sPlugin) = 12) and (CompareText(sPlugin, 'pluginst.inf') = 0) then begin SourceFiles:= TFiles.Create(PathDelim); SourceFiles.Add(AFiles[Index].Clone); Temp:= TTempFileSystemFileSource.GetFileSource; Operation:= FileSource.CreateCopyOutOperation(Temp, SourceFiles, Temp.GetRootDir) as TArchiveCopyOutOperation; try Operation.Execute; finally Operation.Free; end; if mbFileExists(Temp.GetRootDir + sPlugin) then begin Ini:= TIniFileEx.Create(Temp.GetRootDir + sPlugin, fmOpenRead); try sFile:= Ini.ReadString('PluginInstall', 'File', EmptyStr); sExt:= Ini.ReadString('PluginInstall', 'DefaultExtension', EmptyStr); sType:= LowerCase(Ini.ReadString('PluginInstall', 'Type', EmptyStr)); sDefaultDir:= ExtractFileName(Ini.ReadString('PluginInstall', 'DefaultDir', ExtractOnlyFileName(sFile))); finally Ini.Free; end; if gUseConfigInProgramDir then PluginsPath:= gpExePath else begin PluginsPath:= IncludeTrailingBackslash(GetAppDataDir); end; PluginsPath += 'plugins' + PathDelim; InstallDir:= PluginsPath + sType + PathDelim + sDefaultDir; // Create plugin target directory if mbForceDirectory(InstallDir) then begin Operation:= FileSource.CreateCopyOutOperation(TFileSystemFileSource.GetFileSource, AFiles, InstallDir) as TArchiveCopyOutOperation; try Operation.Execute; if Operation.Result = fsorAborted then Exit; finally Operation.Free; end; sPlugin:= InstallDir + PathDelim + sFile; if not CheckPlugin(sPlugin) then begin Result:= MaxInt; DelTree(InstallDir); end else if (sType = 'wcx') then begin WcxModule:= gWcxPlugins.LoadModule(sPlugin); if Assigned(WcxModule) then begin Flags:= WcxModule.GetPluginCapabilities; for sExt in SplitString(sExt, ',') do begin Result:= gWcxPlugins.Add(sExt, Flags, sPlugin); gWcxPlugins.FileName[Result]:= GetPluginFilenameToSave(sPlugin); end; end; end else if (sType = 'wdx') then begin Result:= gWdxPlugins.Add(sPlugin); gWdxPlugins.GetWdxModule(Result).FileName:= GetPluginFilenameToSave(sPlugin); end else if (sType = 'wfx') then begin WfxModule:= gWfxPlugins.LoadModule(sPlugin); if Assigned(WfxModule) then begin sRootName:= WfxModule.VFSRootName; if Length(sRootName) = 0 then begin sRootName:= ExtractOnlyFileName(sFile); end; Result:= gWfxPlugins.Add(sRootName, sPlugin); gWfxPlugins.FileName[Result]:= GetPluginFilenameToSave(sPlugin); end; end else if (sType = 'wlx') then begin Result:= gWlxPlugins.Add(sPlugin); gWlxPlugins.GetWlxModule(Result).FileName:= GetPluginFilenameToSave(sPlugin); end; end; end; if (Result >= 0) and (Result < MaxInt) then begin ShowOptions('TfrmOptionsPlugins' + UpCase(sType)); end; Break; end; end; finally AFiles.Free; end; except on E: Exception do begin Result:= 0; msgError(E.Message); end; end; if Result < 0 then begin msgError(rsSimpleWordError); end; end; end. doublecmd-1.1.30/src/filesources/uarchivefilesource.pas0000644000175000001440000000522715104114162022301 0ustar alexxusersunit uArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCOSUtils, uLocalFileSource, uFileSource, uFile, uFileProperty; type IArchiveFileSource = interface(ILocalFileSource) ['{13A8637C-FFDF-46B0-B5B4-E7C6851C157A}'] function Changed: Boolean; function GetPacker: String; property Packer: String read GetPacker; {en Full path to the archive on the ParentFileSource. } property ArchiveFileName: String read GetCurrentAddress; end; { TArchiveFileSource } TArchiveFileSource = class(TLocalFileSource, IArchiveFileSource) private FAttributeData: TFileAttributeData; protected function GetPacker: String; virtual; abstract; function GetSupportedFileProperties: TFilePropertiesTypes; override; public {en Creates an archive file source. @param(anArchiveFileSource File source that stores the archive. Usually it will be direct-access file source, like filesystem.) @param(anArchiveFileName Full path to the archive on the ArchiveFileSource.) } constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String); virtual reintroduce overload; class function CreateFile(const APath: String): TFile; override; function Changed: Boolean; property ArchiveFileName: String read GetCurrentAddress; end; implementation constructor TArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String); begin FCurrentAddress := anArchiveFileName; inherited Create; ParentFileSource := anArchiveFileSource; mbFileGetAttr(anArchiveFileName, FAttributeData); end; class function TArchiveFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin SizeProperty := TFileSizeProperty.Create; CompressedSizeProperty := TFileCompressedSizeProperty.Create; AttributesProperty := TFileAttributesProperty.CreateOSAttributes; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; end; end; function TArchiveFileSource.Changed: Boolean; var Attr: TFileAttributeData; begin if not mbFileGetAttr(ArchiveFileName, Attr) then Result:= False else begin Result:= (Attr.Size <> FAttributeData.Size) or (Attr.LastWriteTime <> FAttributeData.LastWriteTime); if Result then FAttributeData:= Attr; end; end; function TArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpCompressedSize, fpAttributes, fpModificationTime]; end; end. doublecmd-1.1.30/src/filesources/uarchivecopyoperation.pas0000644000175000001440000000463315104114162023034 0ustar alexxusersunit uArchiveCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFile; type TExtractFlag = (efSmartExtract); TExtractFlags = set of TExtractFlag; { TArchiveCopyInOperation } TArchiveCopyInOperation = class(TFileSourceCopyInOperation) protected FStatistics: TFileSourceCopyOperationStatistics; // Local copy of statistics FPackingFlags: Integer; // Packing flags passed to plugin FFullFilesTree: TFiles; // Full list of files (recursive) FCreateNew: Boolean; // Create new archive FTarBefore: Boolean; // Create TAR archive first FTarFileName: String; // Temporary TAR archive name procedure DoReloadFileSources; override; public function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; property CreateNew: Boolean read FCreateNew write FCreateNew; end; { TArchiveCopyOutOperation } TArchiveCopyOutOperation = class(TFileSourceCopyOutOperation) protected FExtractMask: String; FExtractFlags: TExtractFlags; public function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; property ExtractMask: String read FExtractMask write FExtractMask; property ExtractFlags: TExtractFlags read FExtractFlags write FExtractFlags; end; implementation uses uLng; { TArchiveCopyInOperation } procedure TArchiveCopyInOperation.DoReloadFileSources; begin if not FCreateNew then inherited DoReloadFileSources; end; function TArchiveCopyInOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperPackingSomethingTo, [SourceFiles[0].Name, TargetFileSource.CurrentAddress]) else Result := Format(rsOperPackingFromTo, [SourceFiles.Path, TargetFileSource.CurrentAddress]); end; else Result := rsOperPacking; end; end; { TArchiveCopyOutOperation } function TArchiveCopyOutOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperExtractingFromTo, [SourceFileSource.CurrentAddress, TargetPath]); else Result := rsOperExtracting; end; end; end. doublecmd-1.1.30/src/filesources/tempfilesystem/0000755000175000001440000000000015104114162020751 5ustar alexxusersdoublecmd-1.1.30/src/filesources/tempfilesystem/utempfilesystemfilesource.pas0000644000175000001440000000755315104114162027010 0ustar alexxusersunit uTempFileSystemFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSystemFileSource; type ITempFileSystemFileSource = interface(IFileSystemFileSource) ['{1B6CFF05-15D5-45AF-A382-9C12C1A52024}'] function GetDeleteOnDestroy: Boolean; procedure SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); property DeleteOnDestroy: Boolean read GetDeleteOnDestroy write SetDeleteOnDestroy; property FileSystemRoot: String read GetRootDir; end; { TTempFileSystemFileSource } {en Filesystem file source that stores temporary files. Operations can be done like on a regular file system but all the contents can be deleted when the file source is destroyed, depending on DeleteOnDestroy property. } TTempFileSystemFileSource = class(TFileSystemFileSource, ITempFileSystemFileSource) private FDeleteOnDestroy: Boolean; FTempRootDir: String; function GetDeleteOnDestroy: Boolean; procedure SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); protected public constructor Create; override; constructor Create(const aPath: String); virtual; overload; destructor Destroy; override; class function GetFileSource: ITempFileSystemFileSource; function IsPathAtRoot(Path: String): Boolean; override; function GetParentDir(sPath: String): String; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; property DeleteOnDestroy: Boolean read FDeleteOnDestroy write FDeleteOnDestroy default True; property FilesystemRoot: String read FTempRootDir; end; ETempFileSourceException = class(Exception); ECannotCreateTempFileSourceException = class(ETempFileSourceException); implementation uses DCOSUtils, uOSUtils, DCStrUtils, uFileProcs; constructor TTempFileSystemFileSource.Create; begin Create(''); end; constructor TTempFileSystemFileSource.Create(const aPath: String); begin inherited Create; if (aPath <> EmptyStr) and mbDirectoryExists(aPath) then FTempRootDir := aPath else begin FTempRootDir := GetTempName(GetTempFolder); if (FTempRootDir = EmptyStr) or (mbForceDirectory(FTempRootDir) = False) then begin FDeleteOnDestroy := False; raise ECannotCreateTempFileSourceException.Create('Cannot create temp file source'); end; end; FCurrentAddress := FTempRootDir; FDeleteOnDestroy := True; FTempRootDir := IncludeTrailingPathDelimiter(FTempRootDir); end; destructor TTempFileSystemFileSource.Destroy; begin inherited Destroy; if FDeleteOnDestroy and mbDirectoryExists(FTempRootDir) then begin DelTree(FCurrentAddress); mbRemoveDir(FCurrentAddress); end; end; function TTempFileSystemFileSource.GetDeleteOnDestroy: Boolean; begin Result := FDeleteOnDestroy; end; procedure TTempFileSystemFileSource.SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); begin FDeleteOnDestroy := NewDeleteOnDestroy; end; class function TTempFileSystemFileSource.GetFileSource: ITempFileSystemFileSource; begin Result := TTempFileSystemFileSource.Create; end; function TTempFileSystemFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := GetDiskFreeSpace(FTempRootDir, FreeSize, TotalSize); end; function TTempFileSystemFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (IncludeTrailingPathDelimiter(Path) = FTempRootDir); end; function TTempFileSystemFileSource.GetParentDir(sPath: String): String; begin if IsPathAtRoot(sPath) then Result := '' else Result := DCStrUtils.GetParentDir(sPath); end; function TTempFileSystemFileSource.GetRootDir(sPath: String): String; begin Result := FTempRootDir; end; function TTempFileSystemFileSource.GetRootDir: String; begin Result := FTempRootDir; end; end. doublecmd-1.1.30/src/filesources/shellfolder/0000755000175000001440000000000015104114162020202 5ustar alexxusersdoublecmd-1.1.30/src/filesources/shellfolder/ushellsetfilepropertyoperation.pas0000644000175000001440000001135115104114162027306 0ustar alexxusersunit uShellSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFile, uFileProperty, uShellFileSource, uShellFileOperation, uShellFileSourceUtil; type { TShellSetFilePropertyOperation } TShellSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FFileOp: IFileOperation; FCurrentFileIndex: Integer; FSourceFilesTree: TItemList; FShellFileSource: IShellFileSource; FStatistics: TFileSourceSetFilePropertyOperationStatistics; procedure ShowError(const sMessage: String); protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses Windows, ActiveX, ShlObj, ComObj, DCConvertEncoding, uShlObjAdditional, uFileSourceOperationUI, uShellFolder, uGlobs, uLog, uLng; procedure TShellSetFilePropertyOperation.ShowError(const sMessage: String); begin if (log_errors in gLogOptions) then begin logWrite(Thread, sMessage, lmtError); end; if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; constructor TShellSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FShellFileSource:= aTargetFileSource as IShellFileSource; FFileOp:= CreateComObject(CLSID_FileOperation) as IFileOperation; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName]; end; destructor TShellSetFilePropertyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TShellSetFilePropertyOperation.Initialize; var Index: Integer; AObject: PItemIDList; begin FStatistics := RetrieveStatistics; FSourceFilesTree:= TItemList.Create; try for Index := 0 to TargetFiles.Count - 1 do begin AObject:= ILClone(TFileShellProperty(TargetFiles[Index].LinkProperty).Item); FSourceFilesTree.Add(AObject); end; except on E: Exception do ShowError(E.Message); end; end; procedure TShellSetFilePropertyOperation.MainExecute; var aFile: TFile; dwCookie: DWORD; aTemplateFile: TFile; CurrentFileIndex: Integer; ASink: TFileOperationProgressSink; begin ASink:= TFileOperationProgressSink.Create(@FStatistics, @UpdateStatistics, @CheckOperationStateSafe); FFileOp.SetOperationFlags(FOF_SILENT or FOF_NOCONFIRMMKDIR); FFileOp.Advise(ASink, @dwCookie); for CurrentFileIndex := 0 to FSourceFilesTree.Count - 1 do begin FCurrentFileIndex:= CurrentFileIndex; AFile:= TargetFiles[FCurrentFileIndex]; if Assigned(TemplateFiles) and (FCurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[FCurrentFileIndex] else aTemplateFile := nil; SetProperties(FCurrentFileIndex, aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; FFileOp.Unadvise(dwCookie); end; function TShellSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; var Res: HRESULT; PIDL: PItemIDList; AItem: IShellItem; begin Result := sfprSuccess; PIDL:= PItemIDList(FSourceFilesTree[FCurrentFileIndex]); if Failed(SHCreateItemFromIDList(PIDL, IShellItem, AItem)) then Exit(sfprError); case aTemplateProperty.GetID of fpName: begin if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin if not Succeeded(FFileOp.RenameItem(AItem, PWideChar(CeUtf8ToUtf16((aTemplateProperty as TFileNameProperty).Value)), nil)) then Result := sfprError else begin Res:= FFileOp.PerformOperations(); if Failed(Res) then begin if Res = COPYENGINE_E_USER_CANCELLED then RaiseAbortOperation else Result := sfprError end; end; end else Result := sfprSkipped; end else raise Exception.Create('Trying to set unsupported property'); end; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellmoveoperation.pas0000644000175000001440000000661615104114162025024 0ustar alexxusersunit uShellMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, ShlObj, ComObj, ActiveX, uFileSourceOperation, uFileSourceMoveOperation, uFileSource, uFile, uShellFileSource, uShellFileOperation, uShellFileSourceUtil; type { TShellMoveOperation } TShellMoveOperation = class(TFileSourceMoveOperation) protected FFileOp: IFileOperation; FTargetFolder: IShellItem; FSourceFilesTree: TItemList; FShellFileSource: IShellFileSource; FStatistics: TFileSourceMoveOperationStatistics; procedure ShowError(const sMessage: String); public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); virtual reintroduce; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationOptions, uFileSourceOperationUI, uShellFolder, uGlobs, uShlObjAdditional, uLog, uLng; procedure TShellMoveOperation.ShowError(const sMessage: String); begin if (log_errors in gLogOptions) then begin logWrite(Thread, sMessage, lmtError); end; if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; constructor TShellMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FShellFileSource:= aFileSource as IShellFileSource; FFileOp:= CreateComObject(CLSID_FileOperation) as IFileOperation; inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TShellMoveOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TShellMoveOperation.Initialize; var Index: Integer; AObject: PItemIDList; AFolder: IShellFolder2; begin FStatistics := RetrieveStatistics; FSourceFilesTree:= TItemList.Create; try for Index := 0 to SourceFiles.Count - 1 do begin AObject:= ILClone(TFileShellProperty(SourceFiles[Index].LinkProperty).Item); FSourceFilesTree.Add(AObject); end; OleCheck(FShellFileSource.FindFolder(TargetPath, AFolder)); OleCheck(SHGetIDListFromObject(AFolder, AObject)); try OleCheck(SHCreateItemFromIDList(AObject, IShellItem, FTargetFolder)); finally CoTaskMemFree(AObject); end; except on E: Exception do ShowError(E.Message); end; end; procedure TShellMoveOperation.MainExecute; var Res: HRESULT; dwCookie: DWORD; siItemArray: IShellItemArray; ASink: TFileOperationProgressSink; begin ASink:= TFileOperationProgressSink.Create(@FStatistics, @UpdateStatistics, @CheckOperationStateSafe); FFileOp.SetOperationFlags(FOF_SILENT or FOF_NOCONFIRMMKDIR); try FFileOp.Advise(ASink, @dwCookie); try OleCheck(SHCreateShellItemArrayFromIDLists(FSourceFilesTree.Count, PPItemIDList(FSourceFilesTree.List), siItemArray)); OleCheck(FFileOp.MoveItems(siItemArray, FTargetFolder)); Res:= FFileOp.PerformOperations; if Failed(Res) then begin if Res = COPYENGINE_E_USER_CANCELLED then RaiseAbortOperation else OleError(Res); end; finally FFileOp.Unadvise(dwCookie); end; except on E: EOleError do ShowError(E.Message); end; end; procedure TShellMoveOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushelllistoperation.pas0000644000175000001440000001367215104114162025031 0ustar alexxusersunit uShellListOperation; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Windows, ShlObj, ComObj, uFileSourceListOperation, uShellFileSource, uFileSource; type { TShellListOperation } TShellListOperation = class(TFileSourceListOperation) private FShellFileSource: IShellFileSource; procedure ListFolder(AFolder: IShellFolder2; grfFlags: DWORD); procedure ListDrives; procedure ListDirectory; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses ActiveX, Variants, DCOSUtils, DCDateTimeUtils, ShellAPI, DCStrUtils, uFile, uShellFolder, uShlObjAdditional, uShowMsg, uShellFileSourceUtil; { TShellListOperation } procedure TShellListOperation.ListFolder(AFolder: IShellFolder2; grfFlags: DWORD); const SFGAOF_DEFAULT = SFGAO_STORAGE or SFGAO_HIDDEN or SFGAO_FOLDER; var AFile: TFile; PIDL: PItemIDList; AValue: OleVariant; rgfInOut: LongWord; AParent: PItemIDList; NumIDs: LongWord = 0; EnumIDList: IEnumIDList; begin OleCheckUTF8(SHGetIDListFromObject(AFolder, AParent)); try OleCheckUTF8(AFolder.EnumObjects(0, grfFlags, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try CheckOperationState; aFile:= TShellFileSource.CreateFile(Path); AFile.Name:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER); TFileShellProperty(AFile.LinkProperty).Item:= ILCombine(AParent, PIDL); AFile.LinkProperty.LinkTo:= GetDisplayName(AFolder, PIDL, SHGDN_INFOLDER or SHGDN_FORPARSING); rgfInOut:= SFGAOF_DEFAULT; if Succeeded(AFolder.GetAttributesOf(1, PIDL, rgfInOut)) then begin if (rgfInOut and SFGAO_STORAGE <> 0) then begin AFile.Attributes:= FILE_ATTRIBUTE_DEVICE or FILE_ATTRIBUTE_VIRTUAL; end; if (rgfInOut and SFGAO_FOLDER <> 0) then begin AFile.Attributes:= AFile.Attributes or FILE_ATTRIBUTE_DIRECTORY; end; if (rgfInOut and SFGAO_HIDDEN <> 0) then begin AFile.Attributes:= AFile.Attributes or FILE_ATTRIBUTE_HIDDEN; end; end; AValue:= GetDetails(AFolder, PIDL, SCID_FileSize); if VarIsOrdinal(AValue) then AFile.Size:= AValue else if AFile.IsDirectory then AFile.Size:= 0 else begin AFile.SizeProperty.IsValid:= False; end; AValue:= GetDetails(AFolder, PIDL, SCID_DateModified); if AValue <> Unassigned then AFile.ModificationTime:= AValue else begin AFile.ModificationTimeProperty.IsValid:= False; end; AValue:= GetDetails(AFolder, PIDL, SCID_DateCreated); if AValue <> Unassigned then AFile.CreationTime:= AValue else begin AFile.CreationTimeProperty.IsValid:= False; end; FFiles.Add(AFile); finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(AParent); end; end; procedure TShellListOperation.ListDrives; const SFGAOF_DEFAULT = SFGAO_FILESYSTEM or SFGAO_FOLDER; var AFile: TFile; LinkTo: String; PIDL: PItemIDList; rgfInOut: LongWord; AValue: OleVariant; NumIDs: LongWord = 0; AFolder: IShellFolder2; EnumIDList: IEnumIDList; DrivesPIDL: PItemIDList; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}DrivesPIDL)); try OleCheckUTF8(DesktopFolder.BindToObject(DrivesPIDL, nil, IID_IShellFolder2, Pointer(AFolder))); OleCheckUTF8(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_STORAGE, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try CheckOperationState; LinkTo:= GetDisplayName(AFolder, PIDL, SHGDN_INFOLDER or SHGDN_FORPARSING); // Skip virtual folders if StrBegins(LinkTo, '::{') then Continue; aFile:= TShellFileSource.CreateFile(Path); AFile.LinkProperty.LinkTo:= LinkTo; AFile.Name:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER); TFileShellProperty(AFile.LinkProperty).Item:= ILCombine(DrivesPIDL, PIDL); rgfInOut:= SFGAOF_DEFAULT; AFile.Attributes:= FILE_ATTRIBUTE_DEVICE or FILE_ATTRIBUTE_VIRTUAL; if Succeeded(AFolder.GetAttributesOf(1, PIDL, rgfInOut)) then begin if (SFGAO_FILESYSTEM and rgfInOut) <> 0 then begin AFile.Attributes:= AFile.Attributes or FILE_ATTRIBUTE_NORMAL; end else if (rgfInOut and SFGAO_FOLDER <> 0) then begin AFile.Attributes:= AFile.Attributes or FILE_ATTRIBUTE_DIRECTORY; end; end; AFile.ModificationTimeProperty.IsValid:= False; AValue:= GetDetails(AFolder, PIDL, SCID_Capacity); if VarIsOrdinal(AValue) then AFile.Size:= AValue else if AFile.IsDirectory then AFile.Size:= 0 else begin AFile.SizeProperty.IsValid:= False; end; FFiles.Add(AFile); finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(DrivesPIDL); end; end; procedure TShellListOperation.ListDirectory; var AFolder: IShellFolder2; begin if Succeeded(FShellFileSource.FindFolder(ExcludeTrailingBackslash(Path), AFolder)) then begin ListFolder(AFolder, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN); end; end; constructor TShellListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FShellFileSource:= aFileSource as IShellFileSource; inherited Create(aFileSource, aPath); end; procedure TShellListOperation.MainExecute; begin FFiles.Clear; try if FShellFileSource.IsPathAtRoot(Path) then ListDrives else begin ListDirectory; end; except on E: Exception do msgError(Thread, E.Message); end; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellfilesourceutil.pas0000644000175000001440000003527015104114162025171 0ustar alexxusersunit uShellFileSourceUtil; {$mode delphi} interface uses Classes, SysUtils, Windows, ActiveX, ShlObj, ComObj, ShlWAPI, ShellAPI, uShellFolder, uShellFileOperation, uFileSourceCopyOperation, uFileProperty, uFileSourceDeleteOperation, uFileSourceSetFilePropertyOperation, uGlobs, uLog; type { TItemList } TItemList = class(TFPList) public destructor Destroy; override; end; { TFileShellProperty } TFileShellProperty = class(TFileLinkProperty) private FItem: PItemIDList; public destructor Destroy; override; function Clone: TFileLinkProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; property Item: PItemIDList read FItem write FItem; end; TCheckOperationState = function(): Boolean of object; TUpdateCopyStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; TUpdateDeleteStatisticsFunction = procedure(var NewStatistics: TFileSourceDeleteOperationStatistics) of object; TUpdateSetFilePropertyStatisticsFunction = procedure(var NewStatistics: TFileSourceSetFilePropertyOperationStatistics) of object; { TFileOperationProgressSink } TFileOperationProgressSink = class(TInterfacedObject, IFileOperationProgressSink) private FCheckOperationState: TCheckOperationState; FCopyStatistics: PFileSourceCopyOperationStatistics; FUpdateCopyStatistics: TUpdateCopyStatisticsFunction; FDeleteStatistics: PFileSourceDeleteOperationStatistics; FUpdateDeleteStatistics: TUpdateDeleteStatisticsFunction; FUpdateSetFilePropertyStatistics: TUpdateSetFilePropertyStatisticsFunction; FSetFilePropertyStatistics: PFileSourceSetFilePropertyOperationStatistics; protected procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(AStatistics: PFileSourceCopyOperationStatistics; AUpdateStatistics: TUpdateCopyStatisticsFunction; ACheckOperationState: TCheckOperationState); reintroduce; overload; constructor Create(AStatistics: PFileSourceDeleteOperationStatistics; AUpdateStatistics: TUpdateDeleteStatisticsFunction; ACheckOperationState: TCheckOperationState); reintroduce; overload; constructor Create(AStatistics: PFileSourceSetFilePropertyOperationStatistics; AUpdateStatistics: TUpdateSetFilePropertyStatisticsFunction; ACheckOperationState: TCheckOperationState); reintroduce; overload; public function StartOperations: HResult; stdcall; function FinishOperations(hrResult: HResult): HResult; stdcall; function PreRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; function PostRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR; hrRename: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; function PreMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; function PostMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrMove: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; function PreCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; function PostCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrCopy: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; function PreDeleteItem(dwFlags: DWORD; psiItem: IShellItem): HResult; stdcall; function PostDeleteItem(dwFlags: DWORD; psiItem: IShellItem; hrDelete: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; function PreNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; function PostNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; pszTemplateName: LPCWSTR; dwFileAttributes: DWORD; hrNew: HRESULT; psiNewItem: IShellItem): HResult; stdcall; function UpdateProgress(iWorkTotal: UINT; iWorkSoFar: UINT): HResult; stdcall; function ResetTimer: HResult; stdcall; function PauseTimer: HResult; stdcall; function ResumeTimer: HResult; stdcall; end; function SHBindToParent(pidl: LPCITEMIDLIST; constref riid: TREFIID; out ppv; var ppidlLast: LPCITEMIDLIST): HRESULT; stdcall; external Shell32; var SHCreateItemWithParent: function(pidlParent: PCIDLIST_ABSOLUTE; psfParent: IShellFolder; pidl: PCUITEMID_CHILD; const riid: REFIID; out ppvItem): HRESULT; stdcall; SHGetIDListFromObject: function(punk: IUnknown; out ppidl): HRESULT; stdcall; SHCreateItemFromIDList: function(pidl: PItemIDList; const riid: REFIID; out ppv): HRESULT; stdcall; SHCreateItemFromParsingName: function(pszPath: LPCWSTR; const pbc: IBindCtx; const riid: TIID; out ppv): HRESULT; stdcall; SHCreateShellItemArray: function(pidlParent: PCIDLIST_ABSOLUTE; psf: IShellFolder; cidl: UINT; ppidl: PPItemIDList; out ppsiItemArray): HRESULT; stdcall; SHCreateShellItemArrayFromIDLists: function(cidl: UINT; rgpidl: PPItemIDList; out ppsiItemArray): HRESULT; stdcall; implementation uses DCOSUtils, DCConvertEncoding, uShlObjAdditional, uLng; var AModule: HMODULE; { TItemList } destructor TItemList.Destroy; var AItem: PItemIDList; begin for AItem in Self do begin CoTaskMemFree(AItem); end; inherited Destroy; end; { TFileShellProperty } destructor TFileShellProperty.Destroy; begin inherited Destroy; if Assigned(FItem) then CoTaskMemFree(FItem); end; function TFileShellProperty.Clone: TFileLinkProperty; begin Result := TFileShellProperty.Create; CloneTo(Result); end; procedure TFileShellProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); if FileProperty is TFileShellProperty then begin TFileShellProperty(FileProperty).FItem := ILClone(Self.FItem); end; end; end; { TFileOperationProgressSink } procedure TFileOperationProgressSink.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(nil, sMessage, logMsgType); end; end; constructor TFileOperationProgressSink.Create( AStatistics: PFileSourceCopyOperationStatistics; AUpdateStatistics: TUpdateCopyStatisticsFunction; ACheckOperationState: TCheckOperationState); begin FCopyStatistics:= AStatistics; FUpdateCopyStatistics:= AUpdateStatistics; FCheckOperationState:= ACheckOperationState; end; constructor TFileOperationProgressSink.Create( AStatistics: PFileSourceDeleteOperationStatistics; AUpdateStatistics: TUpdateDeleteStatisticsFunction; ACheckOperationState: TCheckOperationState); begin FDeleteStatistics:= AStatistics; FUpdateDeleteStatistics:= AUpdateStatistics; FCheckOperationState:= ACheckOperationState; end; constructor TFileOperationProgressSink.Create( AStatistics: PFileSourceSetFilePropertyOperationStatistics; AUpdateStatistics: TUpdateSetFilePropertyStatisticsFunction; ACheckOperationState: TCheckOperationState); begin FSetFilePropertyStatistics:= AStatistics; FUpdateSetFilePropertyStatistics:= AUpdateStatistics; FCheckOperationState:= ACheckOperationState; end; function TFileOperationProgressSink.StartOperations: HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.FinishOperations(hrResult: HResult ): HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.PreRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; var AFileName: PWideChar; begin if Succeeded(psiItem.GetDisplayName(SIGDN(SIGDN_DESKTOPABSOLUTEEDITING), @AFileName)) then begin FSetFilePropertyStatistics^.CurrentFile:= CeUtf16ToUtf8(AFileName); CoTaskMemFree(AFileName); end; Result:= S_OK; end; function TFileOperationProgressSink.PostRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR; hrRename: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.PreMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR ): HResult; stdcall; begin Result:= PreCopyItem(dwFlags, psiItem, psiDestinationFolder, pszNewName); end; function TFileOperationProgressSink.PostMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrMove: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; begin if (log_cp_mv_ln in gLogOptions) and (hrMove <> COPYENGINE_E_USER_CANCELLED) then begin with FCopyStatistics^ do begin if Succeeded(hrMove) then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogMove, [CurrentFileFrom + ' -> ' + CurrentFileTo]), [log_cp_mv_ln], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + rsMsgLogMove, [CurrentFileFrom + ' -> ' + CurrentFileTo]), [log_cp_mv_ln], lmtError); end; end; end; Result:= S_OK; end; function TFileOperationProgressSink.PreCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR ): HResult; stdcall; var AFileName: PWideChar; begin if Succeeded(psiItem.GetDisplayName(SIGDN(SIGDN_DESKTOPABSOLUTEEDITING), @AFileName)) then begin FCopyStatistics^.CurrentFileFrom:= CeUtf16ToUtf8(AFileName); CoTaskMemFree(AFileName); end; if Succeeded(psiDestinationFolder.GetDisplayName(SIGDN(SIGDN_DESKTOPABSOLUTEEDITING), @AFileName)) then begin with FCopyStatistics^ do begin CurrentFileTo:= CeUtf16ToUtf8(AFileName); CoTaskMemFree(AFileName); if Assigned(pszNewName) and (pszNewName^ <> #0) then CurrentFileTo:= CurrentFileTo + CeUtf16ToUtf8(pszNewName) else begin CurrentFileTo:= CurrentFileTo + ExtractFileName(CurrentFileFrom); end; end; end; FUpdateCopyStatistics(FCopyStatistics^); Result:= S_OK; end; function TFileOperationProgressSink.PostCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrCopy: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall; begin if (log_cp_mv_ln in gLogOptions) and (hrCopy <> COPYENGINE_E_USER_CANCELLED) then begin with FCopyStatistics^ do begin if Succeeded(hrCopy) then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogCopy, [CurrentFileFrom + ' -> ' + CurrentFileTo]), [log_cp_mv_ln], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + rsMsgLogCopy, [CurrentFileFrom + ' -> ' + CurrentFileTo]), [log_cp_mv_ln], lmtError); end; end; end; Result:= S_OK; end; function TFileOperationProgressSink.PreDeleteItem(dwFlags: DWORD; psiItem: IShellItem): HResult; stdcall; var AFileName: PWideChar; begin if Succeeded(psiItem.GetDisplayName(SIGDN(SIGDN_DESKTOPABSOLUTEEDITING), @AFileName)) then begin FDeleteStatistics^.CurrentFile:= CeUtf16ToUtf8(AFileName); CoTaskMemFree(AFileName); end; Result:= S_OK; end; function TFileOperationProgressSink.PostDeleteItem(dwFlags: DWORD; psiItem: IShellItem; hrDelete: HRESULT; psiNewlyCreated: IShellItem ): HResult; stdcall; var AText: String; sfgaoAttribs: SFGAOF = 0; begin if (log_delete in gLogOptions) and (hrDelete <> COPYENGINE_E_USER_CANCELLED) then begin psiItem.GetAttributes(SFGAO_FOLDER, @sfgaoAttribs); if (sfgaoAttribs and SFGAO_FOLDER) = 0 then AText:= rsMsgLogDelete else begin AText:= rsMsgLogRmDir; end; with FDeleteStatistics^ do begin if Succeeded(hrDelete) then begin LogMessage(Format(rsMsgLogSuccess + AText, [CurrentFile]), [log_delete], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + AText, [CurrentFile]), [log_delete], lmtError); end; end; end; Result:= S_OK; end; function TFileOperationProgressSink.PreNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.PostNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; pszTemplateName: LPCWSTR; dwFileAttributes: DWORD; hrNew: HRESULT; psiNewItem: IShellItem): HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.UpdateProgress(iWorkTotal: UINT; iWorkSoFar: UINT): HResult; stdcall; begin if Assigned(FCopyStatistics) then begin FCopyStatistics^.TotalBytes:= -Int64(iWorkTotal); FCopyStatistics^.DoneBytes:= iWorkSoFar; FUpdateCopyStatistics(FCopyStatistics^); end else if Assigned(FDeleteStatistics) then begin FDeleteStatistics^.TotalFiles:= iWorkTotal; FDeleteStatistics^.DoneFiles:= iWorkSoFar; FUpdateDeleteStatistics(FDeleteStatistics^); end else if Assigned(FSetFilePropertyStatistics) then begin FSetFilePropertyStatistics^.TotalFiles:= iWorkTotal; FSetFilePropertyStatistics^.DoneFiles:= iWorkSoFar; FUpdateSetFilePropertyStatistics(FSetFilePropertyStatistics^); end; if FCheckOperationState() then Result:= S_OK else begin Result:= COPYENGINE_E_USER_CANCELLED; end; end; function TFileOperationProgressSink.ResetTimer: HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.PauseTimer: HResult; stdcall; begin Result:= S_OK; end; function TFileOperationProgressSink.ResumeTimer: HResult; stdcall; begin Result:= S_OK; end; initialization if (Win32MajorVersion > 5) then begin AModule:= GetModuleHandleW(Shell32); @SHGetIDListFromObject:= GetProcAddress(AModule, 'SHGetIDListFromObject'); @SHCreateItemFromIDList:= GetProcAddress(AModule, 'SHCreateItemFromIDList'); @SHCreateItemWithParent:= GetProcAddress(AModule, 'SHCreateItemWithParent'); @SHCreateShellItemArray:= GetProcAddress(AModule, 'SHCreateShellItemArray'); @SHCreateItemFromParsingName:= GetProcAddress(AModule, 'SHCreateItemFromParsingName'); @SHCreateShellItemArrayFromIDLists:= GetProcAddress(AModule, 'SHCreateShellItemArrayFromIDLists'); end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellfilesource.pas0000644000175000001440000004041115104114162024264 0ustar alexxusersunit uShellFileSource; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Dialogs, Windows, ShlObj, uFileSourceProperty, uDrive, uDrivesList, uVirtualFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile, uFileSourceOperationTypes; type { IShellFileSource } IShellFileSource = interface(IVirtualFileSource) ['{1E598290-5E66-423C-BB55-333E293106E8}'] function CreateFolder(AParent: IShellFolder2; const Name: String): HRESULT; function FindFolder(const Path: String; out AValue: IShellFolder2): HRESULT; function FindObject(const AObject: String; out AValue: PItemIDList): HRESULT; function FindObject(AParent: IShellFolder2; const AName: String; out AValue: PItemIDList): HRESULT; end; { TShellFileSource } TShellFileSource = class(TVirtualFileSource, IShellFileSource) private FRootPath: String; FDrives: PItemIDList; FRootFolder: IShellFolder2; FDesktopFolder: IShellFolder; protected function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public constructor Create; override; destructor Destroy; override; class function IsSupportedPath(const Path: String): Boolean; override; class function CreateFile(const APath: String): TFile; override; class function GetMainIcon(out Path: String): Boolean; override; class function RootName: String; class procedure ListDrives(DrivesList: TDrivesList; UpperCase: Boolean); function CreateFolder(AParent: IShellFolder2; const Name: String): HRESULT; function FindFolder(const Path: String; out AValue: IShellFolder2): HRESULT; function FindObject(const AObject: String; out AValue: PItemIDList): HRESULT; function FindObject(AParent: IShellFolder2; const AName: String; out AValue: PItemIDList): HRESULT; function CreateDirectory(const Path: String): Boolean; override; function FileSystemEntryExists(const Path: String): Boolean; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetRootDir(sPath: String): String; override; overload; function GetProperties: TFileSourceProperties; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; end; implementation uses ActiveX, ComObj,DCConvertEncoding, uShellFolder, uShellListOperation, uShellCopyOperation, uShellFileOperation, uShellCreateDirectoryOperation, uShellExecuteOperation, uShellSetFilePropertyOperation, uShellFileSourceUtil, uShellDeleteOperation, uShellMoveOperation, UShellCalcStatisticsOperation, DCStrUtils, uLng, uShlObjAdditional; { TShellFileSource } function TShellFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result := True; end; constructor TShellFileSource.Create; begin inherited Create; OleCheck(SHGetDesktopFolder(FDesktopFolder)); OleCheck(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}FDrives)); OleCheck(FDesktopFolder.BindToObject(FDrives, nil, IID_IShellFolder2, Pointer(FRootFolder))); FRootPath := GetDisplayName(FDesktopFolder, FDrives, SHGDN_INFOLDER); FOperationsClasses[fsoMove] := TShellMoveOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TShellCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TShellCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TShellCopyOutOperation.GetOperationClass; end; destructor TShellFileSource.Destroy; begin inherited Destroy; CoTaskMemFree(FDrives); end; class function TShellFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= StrBegins(Path, PathDelim + PathDelim + PathDelim + RootName); end; class function TShellFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LinkProperty := TFileShellProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TShellFileSource.GetMainIcon(out Path: String): Boolean; begin Result:= True; Path:= '%SystemRoot%\System32\shell32.dll,15'; end; class function TShellFileSource.RootName: String; var DrivesPIDL: PItemIDList; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}DrivesPIDL)); Result:= GetDisplayName(DesktopFolder, DrivesPIDL, SHGDN_INFOLDER); CoTaskMemFree(DrivesPIDL); end; class procedure TShellFileSource.ListDrives(DrivesList: TDrivesList; UpperCase: Boolean); const SFGAOF_DEFAULT = SFGAO_FILESYSTEM or SFGAO_FOLDER; const UPPER_LETTER: array[0..11] of String = ('Ù', 'Ú', 'Û', 'Ü', 'Ũ', 'Ū', 'Ŭ', 'Ů', 'Ű', 'Ų', 'Ȕ', 'Ȗ'); LOWER_LETTER: array[0..11] of String = ('ù', 'ú', 'û', 'ü', 'ũ', 'ū', 'ŭ', 'ů', 'ű', 'ų', 'ȕ', 'ȗ'); var ADrive: PDrive; RootPath: String; DeviceId: String; PIDL: PItemIDList; rgfInOut: LongWord; Index: Integer = 0; NumIDs: LongWord = 0; AFolder: IShellFolder2; EnumIDList: IEnumIDList; DrivesPIDL: PItemIDList; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, {%H-}DrivesPIDL)); try OleCheckUTF8(DesktopFolder.BindToObject(DrivesPIDL, nil, IID_IShellFolder2, Pointer(AFolder))); OleCheckUTF8(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_STORAGE, EnumIDList)); RootPath:= '\\\' + GetDisplayName(DesktopFolder, DrivesPIDL, SHGDN_INFOLDER); while (EnumIDList.Next(1, PIDL, NumIDs) = S_OK) do try rgfInOut:= SFGAOF_DEFAULT; if Succeeded(AFolder.GetAttributesOf(1, PIDL, rgfInOut)) then begin if (SFGAOF_DEFAULT and rgfInOut) = SFGAO_FOLDER then begin DeviceId:= GetDisplayName(AFolder, PIDL, SHGDN_FORPARSING); if Pos('\\?\usb', DeviceId) > 0 then begin New(ADrive); ZeroMemory(ADrive, SizeOf(TDrive)); if UpperCase then ADrive^.DisplayName:= UPPER_LETTER[Index] else begin ADrive^.DisplayName:= LOWER_LETTER[Index]; end; ADrive^.IsMounted:= True; ADrive^.DeviceId:= DeviceId; ADrive^.DriveType:= dtSpecial; ADrive^.IsMediaAvailable:= True; ADrive^.DriveLabel:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER); ADrive^.Path:= RootPath + PathDelim + ADrive^.DriveLabel; DrivesList.Add(ADrive); Inc(Index); if (Index > High(LOWER_LETTER)) then Break; end; end; end; finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(DrivesPIDL); end; end; function TShellFileSource.FindObject(const AObject: String; out AValue: PItemIDList): HRESULT; var APath: String; AFolder: IShellFolder2; AItemPIDL, AFolderPIDL: PItemIDList; begin APath:= ExtractFileDir(AObject); Result:= FindFolder(APath, AFolder); if Succeeded(Result) then begin Result:= FindObject(AFolder, ExtractFileName(AObject), AItemPIDL); if Succeeded(Result) then begin Result:= SHGetIDListFromObject(AFolder, AFolderPIDL); if Succeeded(Result) then begin AValue:= ILCombine(AFolderPIDL, AItemPIDL); CoTaskMemFree(AFolderPIDL); end; CoTaskMemFree(AItemPIDL); end; end; end; function TShellFileSource.FindObject(AParent: IShellFolder2; const AName: String; out AValue: PItemIDList): HRESULT; var AItemName: String; PIDL: PItemIDList; NumIDs: LongWord = 0; EnumIDList: IEnumIDList; begin Result:= AParent.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_STORAGE or SHCONTF_INCLUDEHIDDEN, EnumIDList); if Succeeded(Result) then begin while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do begin AItemName:= GetDisplayNameEx(AParent, PIDL, SHGDN_INFOLDER); if AName = AItemName then begin AValue:= PIDL; Exit(S_OK); end; CoTaskMemFree(PIDL); end; end; Result:= STG_E_FILENOTFOUND; end; function TShellFileSource.FindFolder(const Path: String; out AValue: IShellFolder2): HRESULT; function List(var AFolder: IShellFolder2; const AObject: String): HRESULT; var AName: String; PIDL: PItemIDList; NumIDs: LongWord = 0; AValue: IShellFolder2; EnumIDList: IEnumIDList; begin Result:= AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_STORAGE or SHCONTF_INCLUDEHIDDEN, EnumIDList); if Succeeded(Result) then begin while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try AName:= GetDisplayNameEx(AFolder, PIDL, SHGDN_INFOLDER); if AName = AObject then begin Result:= AFolder.BindToObject(PIDL, nil, IID_IShellFolder2, Pointer(AValue)); if Succeeded(Result) then AFolder:= AValue; Exit; end; finally CoTaskMemFree(PIDL); end; end; Result:= STG_E_PATHNOTFOUND; end; var Index: Integer; APath: TStringArray; begin APath:= Path.Split([PathDelim], TStringSplitOptions.ExcludeEmpty); if Length(APath) = 0 then Result:= STG_E_PATHNOTFOUND else begin if (APath[0] <> FRootPath) then Result:= STG_E_PATHNOTFOUND else begin AValue:= FRootFolder; // Find subdirectory for Index:= 1 to High(APath) do begin Result:= List(AValue, APath[Index]); if Failed(Result) then Exit; end; end; end; end; function TShellFileSource.CreateFolder(AParent: IShellFolder2; const Name: String): HRESULT; var AName: WideString; AParentItem: IShellItem; AFileOp: IFileOperation; AParentPIDL: PItemIDList; begin AName:= CeUtf8ToUtf16(Name); Result:= SHGetIDListFromObject(AParent, AParentPIDL); if Succeeded(Result) then try Result:= SHCreateItemFromIDList(AParentPIDL, IShellItem, AParentItem); if Succeeded(Result) then begin AFileOp:= CreateComObject(CLSID_FileOperation) as IFileOperation; Result:= AFileOp.NewItem(AParentItem, FILE_ATTRIBUTE_DIRECTORY, PWideChar(AName), nil, nil); if Succeeded(Result) then begin Result:= AFileOp.PerformOperations(); end; end; finally CoTaskMemFree(AParentPIDL); end; end; function TShellFileSource.CreateDirectory(const Path: String): Boolean; var AName: String; AParent: IShellFolder2; begin AName:= ExtractFileName(Path); Result:= Succeeded(FindFolder(ExtractFileDir(Path), AParent)); if Result then begin Result:= Succeeded(CreateFolder(AParent, AName)); end; end; function TShellFileSource.FileSystemEntryExists(const Path: String): Boolean; var AObject: PItemIDList; begin Result:= Succeeded(FindObject(Path, AObject)); if Result then CoTaskMemFree(AObject); end; function TShellFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoExecute, fsoDelete, fsoCreateDirectory, fsoCopyIn, fsoCopyOut, fsoSetFileProperty, fsoCalcStatistics]; end; function TShellFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, fpCreationTime, uFileProperty.fpLink, fpComment ]; end; function TShellFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim + PathDelim + PathDelim + FRootPath + PathDelim; end; function TShellFileSource.GetProperties: TFileSourceProperties; begin Result := [fspVirtual]; end; function TShellFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TShellListOperation.Create(TargetFileSource, TargetPath); end; function TShellFileSource.CreateDeleteOperation(var FilesToDelete: TFiles ): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TShellDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TShellFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TShellCreateDirectoryOperation.Create(TargetFileSource, BasePath, DirectoryPath); end; function TShellFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TShellExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TShellFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TShellMoveOperation.Create(TargetFileSource, SourceFiles, TargetPath); end; function TShellFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result:= TShellCopyOperation.Create(SourceFileSource, SourceFileSource, SourceFiles, TargetPath); end; function TShellFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TShellCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TShellFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TShellCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TShellFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles ): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TShellCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TShellFileSource.CreateSetFilePropertyOperation( var theTargetFiles: TFiles; var theNewProperties: TFileProperties ): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TShellSetFilePropertyOperation.Create(TargetFileSource, theTargetFiles, theNewProperties); end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellexecuteoperation.pas0000644000175000001440000000514015104114162025507 0ustar alexxusersunit uShellExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uShellFileSource, uFileSourceExecuteOperation; type { TShellExecuteOperation } TShellExecuteOperation = class(TFileSourceExecuteOperation) private FShellFileSource: IShellFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure MainExecute; override; end; implementation uses Windows, ComObj, ShlObj, ShellAPI, DCOSUtils, DCConvertEncoding, uShellFileSourceUtil, fMain; constructor TShellExecuteOperation.Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FShellFileSource := aTargetFileSource as IShellFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TShellExecuteOperation.MainExecute; var PIDL: PItemIDList; Menu: IContextMenu; AFolder: IShellFolder2; cmici: TCMInvokeCommandInfo; AExecInfo: TShellExecuteInfoW; begin if Verb = 'properties' then try PIDL:= TFileShellProperty(ExecutableFile.LinkProperty).Item; OleCheck(SHBindToParent(PIDL, IID_IShellFolder2, AFolder, PIDL)); OleCheck(AFolder.GetUIObjectOf(frmMain.Handle, 1, PIDL, IID_IContextMenu, nil, Menu)); if Assigned(Menu) then begin cmici:= Default(TCMInvokeCommandInfo); with cmici do begin cbSize := SizeOf(TCMInvokeCommandInfo); hwnd := frmMain.Handle; lpVerb := PAnsiChar(Verb); nShow := SW_SHOWNORMAL; end; OleCheck(Menu.InvokeCommand(cmici)); end; except FExecuteOperationResult:= fseorError; end else if FShellFileSource.IsPathAtRoot(CurrentPath) then begin FResultString:= ExecutableFile.LinkProperty.LinkTo; FExecuteOperationResult:= fseorSymLink; end else begin AExecInfo:= Default(TShellExecuteInfoW); AExecInfo.cbSize:= SizeOf(TShellExecuteInfoW); AExecInfo.lpIDList:= TFileShellProperty(ExecutableFile.LinkProperty).Item; AExecInfo.fMask:= SEE_MASK_IDLIST; if ShellExecuteExW(@AExecInfo) then FExecuteOperationResult:= fseorSuccess else begin FExecuteOperationResult:= fseorError; end; end; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushelldeleteoperation.pas0000644000175000001440000000577515104114162025325 0ustar alexxusersunit uShellDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, ShlObj, ComObj, uFileSourceDeleteOperation, uShellFileSource, uFileSource, uShellFileOperation, uShellFileSourceUtil, uFileSourceOperationUI, uFile, uGlobs, uLog; type { TShellDeleteOperation } TShellDeleteOperation = class(TFileSourceDeleteOperation) protected FFileOp: IFileOperation; FSourceFilesTree: TItemList; FShellFileSource: IShellFileSource; FStatistics: TFileSourceDeleteOperationStatistics; procedure ShowError(const sMessage: String); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCOSUtils, uLng, uShellFolder, uShlObjAdditional; procedure TShellDeleteOperation.ShowError(const sMessage: String); begin if (log_errors in gLogOptions) and (log_delete in gLogOptions) then begin logWrite(Thread, sMessage, lmtError); end; if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; constructor TShellDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FShellFileSource:= aTargetFileSource as IShellFileSource; FFileOp:= CreateComObject(CLSID_FileOperation) as IFileOperation; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TShellDeleteOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TShellDeleteOperation.Initialize; var Index: Integer; AObject: PItemIDList; begin FStatistics := RetrieveStatistics; FSourceFilesTree:= TItemList.Create; try for Index := 0 to FilesToDelete.Count - 1 do begin AObject:= ILClone(TFileShellProperty(FilesToDelete[Index].LinkProperty).Item); FSourceFilesTree.Add(AObject); end; except on E: Exception do ShowError(E.Message); end; end; procedure TShellDeleteOperation.MainExecute; var Res: HRESULT; dwCookie: DWORD; siItemArray: IShellItemArray; ASink: TFileOperationProgressSink; begin ASink:= TFileOperationProgressSink.Create(@FStatistics, @UpdateStatistics, @CheckOperationStateSafe); FFileOp.SetOperationFlags(FOF_SILENT or FOF_NOCONFIRMATION or FOF_NORECURSION); try FFileOp.Advise(ASink, @dwCookie); try OleCheck(SHCreateShellItemArrayFromIDLists(FSourceFilesTree.Count, PPItemIDList(FSourceFilesTree.List), siItemArray)); OleCheck(FFileOp.DeleteItems(siItemArray)); Res:= FFileOp.PerformOperations; if Failed(Res) then begin if Res = COPYENGINE_E_USER_CANCELLED then RaiseAbortOperation else OleError(Res); end; finally FFileOp.Unadvise(dwCookie); end; except on E: EOleError do ShowError(E.Message); end; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellcreatedirectoryoperation.pas0000644000175000001440000000304415104114162027236 0ustar alexxusersunit uShellCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uShellFileSource, uFileSource; type { TShellCreateDirectoryOperation } TShellCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) private FShellFileSource: IShellFileSource; public constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); override; procedure MainExecute; override; end; implementation uses uFileSourceOperationUI, uGlobs, uLog, uLng; { TShellCreateDirectoryOperation } constructor TShellCreateDirectoryOperation.Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin FShellFileSource := aTargetFileSource as IShellFileSource; inherited Create(aTargetFileSource, aCurrentPath, aDirectoryPath); end; procedure TShellCreateDirectoryOperation.MainExecute; begin if FShellFileSource.CreateDirectory(AbsolutePath) then begin if (log_dir_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess + rsMsgLogMkDir, [AbsolutePath]), lmtSuccess); end else begin if (log_dir_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError + rsMsgLogMkDir, [AbsolutePath]), lmtError); AskQuestion(Format(rsMsgErrForceDir, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellcopyoperation.pas0000644000175000001440000001244415104114162025024 0ustar alexxusersunit uShellCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, ShlObj, ComObj, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uShellFileSource, uShellFileOperation, uShellFileSourceUtil; type { TShellCopyOperation } TShellCopyOperation = class(TFileSourceCopyOperation) protected FFileOp: IFileOperation; FTargetFolder: IShellItem; FSourceFilesTree: TItemList; FShellFileSource: IShellFileSource; FStatistics: TFileSourceCopyOperationStatistics; procedure ShowError(const sMessage: String); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; { TShellCopyInOperation } TShellCopyInOperation = class(TShellCopyOperation) protected function GetID: TFileSourceOperationType; override; public procedure Initialize; override; end; { TShellCopyOutOperation } TShellCopyOutOperation = class(TShellCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses ActiveX, DCConvertEncoding, uFileSourceOperationUI, uShlObjAdditional, uShellFolder, uGlobs, uLog; procedure TShellCopyOperation.ShowError(const sMessage: String); begin if (log_cp_mv_ln in gLogOptions) and (log_errors in gLogOptions) then begin logWrite(Thread, sMessage, lmtError); end; if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end; constructor TShellCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin case GetID of fsoCopy, fsoCopyOut: FShellFileSource:= aSourceFileSource as IShellFileSource; fsoCopyIn: FShellFileSource:= aTargetFileSource as IShellFileSource; end; FFileOp:= CreateComObject(CLSID_FileOperation) as IFileOperation; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TShellCopyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TShellCopyOperation.Initialize; var Index: Integer; AObject: PItemIDList; AFolder: IShellFolder2; begin FStatistics := RetrieveStatistics; FSourceFilesTree:= TItemList.Create; try for Index := 0 to SourceFiles.Count - 1 do begin AObject:= ILClone(TFileShellProperty(SourceFiles[Index].LinkProperty).Item); FSourceFilesTree.Add(AObject); end; case GetID of fsoCopy: begin OleCheck(FShellFileSource.FindFolder(TargetPath, AFolder)); OleCheck(SHGetIDListFromObject(AFolder, AObject)); try OleCheck(SHCreateItemFromIDList(AObject, IShellItem, FTargetFolder)); finally CoTaskMemFree(AObject); end; end; fsoCopyOut: OleCheck(SHCreateItemFromParsingName(PWideChar(CeUtf8ToUtf16(TargetPath)), nil, IShellItem, FTargetFolder)); end; except on E: Exception do ShowError(E.Message); end; end; procedure TShellCopyOperation.MainExecute; var Res: HRESULT; dwCookie: DWORD; siItemArray: IShellItemArray; ASink: TFileOperationProgressSink; begin ASink:= TFileOperationProgressSink.Create(@FStatistics, @UpdateStatistics, @CheckOperationStateSafe); FFileOp.SetOperationFlags(FOF_SILENT or FOF_NOCONFIRMMKDIR); try FFileOp.Advise(ASink, @dwCookie); try OleCheck(SHCreateShellItemArrayFromIDLists(FSourceFilesTree.Count, PPItemIDList(FSourceFilesTree.List), siItemArray)); OleCheck(FFileOp.CopyItems(siItemArray, FTargetFolder)); Res:= FFileOp.PerformOperations; if Failed(Res) then begin if Res = COPYENGINE_E_USER_CANCELLED then RaiseAbortOperation else OleError(Res); end; finally FFileOp.Unadvise(dwCookie); end; except on E: EOleError do ShowError(E.Message); end; end; { TShellCopyInOperation } function TShellCopyInOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyIn; end; procedure TShellCopyInOperation.Initialize; var aFile: TFile; Index: Integer; AObject: PItemIDList; AFolder: IShellFolder2; begin FStatistics := RetrieveStatistics; FSourceFilesTree:= TItemList.Create; try for Index := 0 to SourceFiles.Count - 1 do begin aFile := SourceFiles[Index]; AObject:= ILCreateFromPathW(PWideChar(CeUtf8ToUtf16(aFile.FullPath))); FSourceFilesTree.Add(AObject); end; OleCheck(FShellFileSource.FindFolder(TargetPath, AFolder)); OleCheck(SHGetIDListFromObject(AFolder, AObject)); OleCheck(SHCreateItemFromIDList(AObject, IShellItem, FTargetFolder)); except on E: Exception do ShowError(E.Message); end; end; { TShellCopyOutOperation } function TShellCopyOutOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyOut; end; end. doublecmd-1.1.30/src/filesources/shellfolder/ushellcalcstatisticsoperation.pas0000644000175000001440000000775615104114162027101 0ustar alexxusersunit uShellCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, ShlObj, ComObj, ActiveX, uFileSourceCalcStatisticsOperation, uFileSource, uShellFileSource, uFile, uGlobs, uLog; type TShellCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FShellFileSource: IShellFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(AParent: IShellFolder2; AObject: PItemIDList); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uShellFileSourceUtil, uShellFolder; constructor TShellCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin FShellFileSource:= aTargetFileSource as IShellFileSource; inherited Create(aTargetFileSource, theFiles); end; destructor TShellCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TShellCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TShellCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TShellCalcStatisticsOperation.ProcessFile(aFile: TFile); var AObject: PItemIDList; AFolder: IShellFolder2; begin FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); if Succeeded(FShellFileSource.FindFolder(AFile.Path, AFolder)) then begin if Succeeded(FShellFileSource.FindObject(AFolder, aFile.Name, AObject)) then try ProcessSubDirs(AFolder, AObject); finally CoTaskMemFree(AObject); end; end; end else begin Inc(FStatistics.Files); Inc(FStatistics.Size, aFile.Size); if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TShellCalcStatisticsOperation.ProcessSubDirs(AParent: IShellFolder2; AObject: PItemIDList); var ASize: Int64; PIDL: PItemIDList; NumIDs: LongWord = 0; EnumIDList: IEnumIDList; AFolder: IShellFolder2; begin try OleCheck(AParent.BindToObject(AObject, nil, IID_IShellFolder2, Pointer(AFolder))); OleCheck(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_STORAGE or SHCONTF_INCLUDEHIDDEN, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try if GetIsFolder(AParent, PIDL) then begin Inc(FStatistics.Directories); ProcessSubDirs(AFolder, PIDL); end else begin ASize:= GetDetails(AFolder, PIDL, SCID_FileSize); Inc(FStatistics.Size, ASize); Inc(FStatistics.Files); end; CheckOperationState; UpdateStatistics(FStatistics); finally CoTaskMemFree(PIDL); end; except on E: Exception do LogMessage(E.Message, [log_errors], lmtError); end; end; procedure TShellCalcStatisticsOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/searchresult/0000755000175000001440000000000015104114162020403 5ustar alexxusersdoublecmd-1.1.30/src/filesources/searchresult/usearchresultlistoperation.pas0000644000175000001440000000234315104114162026620 0ustar alexxusersunit uSearchResultListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uSearchResultFileSource; type TSearchResultListOperation = class(TFileSourceListOperation) private FFileSource: ISearchResultFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses uFile; constructor TSearchResultListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as ISearchResultFileSource; inherited Create(aFileSource, aPath); FNeedsConnection := False; end; procedure TSearchResultListOperation.MainExecute; procedure AddNode(aNode: TFileTreeNode); var i: Integer; begin if Assigned(aNode) then begin for i := 0 to aNode.SubNodesCount - 1 do begin CheckOperationState; FFiles.Add(aNode.SubNodes[i].TheFile.Clone); AddNode(aNode.SubNodes[i]); end; end; end; begin FFiles.Clear; // For now "flat mode" always enabled (add all files from the tree). if FileSource.IsPathAtRoot(Path) then AddNode(FFileSource.FileList); end; end. doublecmd-1.1.30/src/filesources/searchresult/usearchresultfilesource.pas0000644000175000001440000000401615104114162026063 0ustar alexxusersunit uSearchResultFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uMultiListFileSource, uFileSourceOperation, uFileSourceProperty; type ISearchResultFileSource = interface(IMultiListFileSource) ['{5076D4C2-3AB8-4029-9318-0AF115F7FDDD}'] end; {en File source for search results. } { TSearchResultFileSource } TSearchResultFileSource = class(TMultiListFileSource, ISearchResultFileSource) public function GetRootDir(sPath : String): String; override; function GetProperties: TFileSourceProperties; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; class function CreateFile(const APath: String): TFile; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; end; implementation uses uFileSystemFileSource, uSearchResultListOperation, uLng; function TSearchResultFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim + PathDelim + PathDelim + rsSearchResult + PathDelim; end; function TSearchResultFileSource.GetProperties: TFileSourceProperties; begin Result := inherited GetProperties - [fspNoneParent, fspListFlatView]; if (fspDirectAccess in Result) then Result+= [fspLinksToLocalFiles]; end; function TSearchResultFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin // Only Root dir allowed (for flat mode). Result := IsPathAtRoot(NewDir); end; class function TSearchResultFileSource.CreateFile(const APath: String): TFile; begin Result:= TFileSystemFileSource.CreateFile(APath); end; function TSearchResultFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TSearchResultListOperation.Create(Self, TargetPath); end; function TSearchResultFileSource.GetLocalName(var aFile: TFile): Boolean; begin if (fspLinksToLocalFiles in FileSource.Properties) then Result:= FileSource.GetLocalName(aFile) else Result:= True; end; end. doublecmd-1.1.30/src/filesources/recyclebin/0000755000175000001440000000000015104114162020016 5ustar alexxusersdoublecmd-1.1.30/src/filesources/recyclebin/urecyclebinlistoperation.pas0000644000175000001440000000542315104114162025650 0ustar alexxusersunit uRecycleBinListOperation; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, uFileSystemListOperation, uRecycleBinFileSource, uFileSource; type { TRecycleBinListOperation } TRecycleBinListOperation = class(TFileSystemListOperation) public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses Windows, ShlObj, ComObj, JwaShlGuid, Variants, DCOSUtils, DCDateTimeUtils, ActiveX, uFile, uShellFolder, uShlObjAdditional, uShowMsg; const SID_DISPLACED = '{9B174B33-40FF-11d2-A27E-00C04FC30871}'; SCID_OriginalLocation: TSHColumnID = ( fmtid: SID_DISPLACED; pid: PID_DISPLACED_FROM ); SCID_DateDeleted: TSHColumnID = ( fmtid: SID_DISPLACED; pid: PID_DISPLACED_DATE ); { TRecycleBinListOperation } constructor TRecycleBinListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); inherited Create(aFileSource, aPath); end; procedure TRecycleBinListOperation.MainExecute; var AFile: TFile; NumIDs: LongWord = 0; AFolder: IShellFolder2; EnumIDList: IEnumIDList; Attr: TFileAttributeData; DesktopFolder: IShellFolder; PIDL, TrashPIDL: PItemIDList; begin FFiles.Clear; try OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetFolderLocation(0, CSIDL_BITBUCKET, 0, 0, {%H-}TrashPIDL)); try OleCheckUTF8(DesktopFolder.BindToObject(TrashPIDL, nil, IID_IShellFolder2, Pointer(AFolder))); OleCheckUTF8(AFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, EnumIDList)); while EnumIDList.Next(1, PIDL, NumIDs) = S_OK do try CheckOperationState; aFile:= TRecycleBinFileSource.CreateFile(Path); AFile.FullPath:= GetDisplayName(AFolder, PIDL, SHGDN_NORMAL); AFile.LinkProperty.LinkTo:= GetDisplayName(AFolder, PIDL, SHGDN_FORPARSING); if mbFileGetAttr(AFile.LinkProperty.LinkTo, Attr) then begin AFile.Size:= Attr.Size; AFile.Attributes:= Attr.Attr; AFile.CreationTime:= WinFileTimeToDateTime(Attr.PlatformTime); AFile.LastAccessTime:= WinFileTimeToDateTime(Attr.LastAccessTime); AFile.ModificationTime:= WinFileTimeToDateTime(Attr.LastWriteTime); AFile.CommentProperty.Value:= GetDetails(AFolder, PIDL, SCID_OriginalLocation); AFile.ChangeTime:= VariantTimeToDateTime(VarToDateTime(GetDetails(AFolder, PIDL, SCID_DateDeleted))); end; FFiles.Add(AFile); finally CoTaskMemFree(PIDL); end; finally CoTaskMemFree(TrashPIDL); end; except on E: Exception do msgError(Thread, E.Message); end; end; end. doublecmd-1.1.30/src/filesources/recyclebin/urecyclebinfilesource.pas0000644000175000001440000000724115104114162025114 0ustar alexxusersunit uRecycleBinFileSource; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Dialogs, uFileSourceProperty, uVirtualFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile, uFileSourceOperationTypes; type { IRecycleBinFileSource } IRecycleBinFileSource = interface(IVirtualFileSource) ['{1E598290-5E66-423C-BB55-333E293106E8}'] end; { TRecycleBinFileSource } TRecycleBinFileSource = class(TVirtualFileSource, IRecycleBinFileSource) protected function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public class function IsSupportedPath(const Path: String): Boolean; override; class function CreateFile(const APath: String): TFile; override; class function GetMainIcon(out Path: String): Boolean; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetLocalName(var aFile: TFile): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetProperties: TFileSourceProperties; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; end; implementation uses uRecycleBinListOperation, uLng; { TRecycleBinFileSource } function TRecycleBinFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result := IsPathAtRoot(NewDir); end; class function TRecycleBinFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= SameText(ExcludeTrailingBackslash(Path), PathDelim + PathDelim + PathDelim + rsVfsRecycleBin); end; class function TRecycleBinFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; ChangeTimeProperty:= TFileChangeDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TRecycleBinFileSource.GetMainIcon(out Path: String): Boolean; begin Result:= True; Path:= '%SystemRoot%\System32\shell32.dll,31'; end; function TRecycleBinFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList]; end; function TRecycleBinFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime, fpChangeTime, uFileProperty.fpLink, fpComment ]; end; function TRecycleBinFileSource.GetLocalName(var aFile: TFile): Boolean; begin Result:= True; aFile.FullPath:= aFile.LinkProperty.LinkTo; end; function TRecycleBinFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim + PathDelim + PathDelim + rsVfsRecycleBin + PathDelim; end; function TRecycleBinFileSource.GetProperties: TFileSourceProperties; begin Result := [fspDirectAccess, fspVirtual, fspLinksToLocalFiles]; end; function TRecycleBinFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TRecycleBinListOperation.Create(TargetFileSource, TargetPath); end; end. doublecmd-1.1.30/src/filesources/multilist/0000755000175000001440000000000015104114162017725 5ustar alexxusersdoublecmd-1.1.30/src/filesources/multilist/umultilistlistoperation.pas0000644000175000001440000000375315104114162025472 0ustar alexxusersunit uMultiListListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uMultiListFileSource; type TMultiListListOperation = class(TFileSourceListOperation) private FFileSource: IMultiListFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses uOSUtils, DCStrUtils, uFile, uFileProperty; constructor TMultiListListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as IMultiListFileSource; inherited Create(aFileSource, aPath); end; procedure TMultiListListOperation.MainExecute; var AFile: TFile; IsRootPath: Boolean; CurrentNode: TFileTreeNode; CurrentPath: String; Found: Boolean; i: Integer; begin FFiles.Clear; IsRootPath := FileSource.IsPathAtRoot(Path); CurrentNode := FFileSource.FileList; CurrentPath := FileSource.GetRootDir; // Search for files in the given path. while (Path <> CurrentPath) and IsInPath(CurrentPath, Path, True, False) do begin CheckOperationState; Found := False; for i := 0 to CurrentNode.SubNodesCount - 1 do begin if IsInPath(IncludeTrailingPathDelimiter(CurrentPath) + CurrentNode.SubNodes[i].TheFile.Name, Path, True, False) then begin CurrentNode := CurrentNode.SubNodes[i]; Found := True; Break; end; end; if not Found then Break; end; if not IsRootPath then begin AFile := FileSource.CreateFileObject(Path); AFile.Name := '..'; if fpAttributes in AFile.SupportedProperties then AFile.Attributes := faFolder; FFiles.Add(AFile); end; if Path = CurrentPath then begin for i := 0 to CurrentNode.SubNodesCount - 1 do begin CheckOperationState; AFile := CurrentNode.SubNodes[i].TheFile; FFiles.Add(AFile); end; end; end; end. doublecmd-1.1.30/src/filesources/multilist/umultilistfilesource.pas0000644000175000001440000002432715104114162024736 0ustar alexxusersunit uMultiListFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceProperty, uFileSourceOperation, uFileSourceOperationTypes, uFileProperty; type IMultiListFileSource = interface(IFileSource) ['{A64C591C-EBC6-4E06-89D2-9965E1A3009A}'] procedure AddList(var aFileList: TFileTree; aFileSource: IFileSource); function GetFileList: TFileTree; function GetFileSource: IFileSource; property FileList: TFileTree read GetFileList; property FileSource: IFileSource read GetFileSource; end; {en File source that generates files from file lists generated by other file sources. This virtual file source contains "links" to files from other file sources, e.g., paths to files on FileSystem file source, or paths to files within certain archive. Therefore properties of virtual file source and operations will depend on the underlying file source. It should be possible to store links to different file sources within the same virtual file source, in which case there has to be a file source associated with each file or a group of files, although presentation of such file lists should probably be different than that of a single file source. Files can be virtual (from virtual file sources). Currently can only use a single file source with a single file list. } { TMultiListFileSource } TMultiListFileSource = class(TFileSource, IMultiListFileSource) private {en File list for the file source. } FFileList: TFileTree; {en File source from which files in FileList come from. Currently only single file source is supported. } FFileSource: IFileSource; procedure FileSourceReloadEvent(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray); protected function GetFileList: TFileTree; function GetFileSource: IFileSource; procedure DoReload(const PathsToReload: TPathsArray); override; public constructor Create; override; destructor Destroy; override; {en Adds a list of files associated with a file source to the storage. Only single file source supported now (adding list will overwrite previous list). @param(aFileList List of files. Class takes ownership of the pointer.) @param(aFileSource The file source from which files in aFileList are from.) } procedure AddList(var aFileList: TFileTree; aFileSource: IFileSource); virtual; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetProperties: TFileSourceProperties; override; function CreateDirectory(const Path: String): Boolean; override; function FileSystemEntryExists(const Path: String): Boolean; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); override; function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; property FileList: TFileTree read FFileList; property FileSource: IFileSource read FFileSource; end; implementation uses uMultiListListOperation; constructor TMultiListFileSource.Create; begin FFileList := nil; FFileSource := nil; inherited Create; end; destructor TMultiListFileSource.Destroy; begin if Assigned(FFileSource) then begin FFileSource.RemoveReloadEventListener(@FileSourceReloadEvent); end; inherited Destroy; FreeAndNil(FFileList); FFileSource := nil; end; procedure TMultiListFileSource.AddList(var aFileList: TFileTree; aFileSource: IFileSource); begin if Assigned(FFileList) then FreeAndNil(FFileList); FFileList := aFileList; aFileList := nil; FFileSource := aFileSource; FFileSource.AddReloadEventListener(@FileSourceReloadEvent); end; function TMultiListFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := FFileSource.GetSupportedFileProperties; end; function TMultiListFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin // Only fsoList is supported by default. // All other operations only if file source supports them. // However, this will work only for single file source. Result := [fsoList] + FFileSource.GetOperationsTypes * [fsoCopyOut, //fsoMove, fsoDelete, fsoWipe, fsoCalcChecksum, fsoCalcStatistics, fsoSetFileProperty, fsoExecute, fsoTestArchive]; end; function TMultiListFileSource.GetProperties: TFileSourceProperties; begin // Flags depend on the underlying file source. Result := FFileSource.GetProperties; end; function TMultiListFileSource.CreateDirectory(const Path: String): Boolean; begin Result:= FFileSource.CreateDirectory(Path); end; function TMultiListFileSource.FileSystemEntryExists(const Path: String): Boolean; begin Result:= FFileSource.FileSystemEntryExists(Path); end; function TMultiListFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result:= FFileSource.GetRetrievableFileProperties; end; procedure TMultiListFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); begin FFileSource.RetrieveProperties(AFile, PropertiesToSet, AVariantProperties); end; function TMultiListFileSource.CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; begin Result:= FFileSource.CanRetrieveProperties(AFile, PropertiesToSet); end; procedure TMultiListFileSource.FileSourceReloadEvent( const aFileSource: IFileSource; const ReloadedPaths: TPathsArray); begin Reload(ReloadedPaths); end; function TMultiListFileSource.GetFileList: TFileTree; begin Result := FFileList; end; function TMultiListFileSource.GetFileSource: IFileSource; begin Result := FFileSource; end; procedure TMultiListFileSource.DoReload(const PathsToReload: TPathsArray); procedure ReloadNode(aNode: TFileTreeNode); var Index: Integer; ASubNode: TFileTreeNode; begin if Assigned(aNode) then begin for Index := aNode.SubNodesCount - 1 downto 0 do begin ASubNode:= aNode.SubNodes[Index]; if FFileSource.FileSystemEntryExists(ASubNode.TheFile.FullPath) then ReloadNode(ASubNode) else begin aNode.RemoveSubNode(Index); end; end; end; end; begin ReloadNode(FileList); end; function TMultiListFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TMultiListListOperation.Create(Self, TargetPath); end; function TMultiListFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := FFileSource.CreateCopyOutOperation(TargetFileSource, SourceFiles, TargetPath); end; function TMultiListFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := FFileSource.CreateMoveOperation(SourceFiles, TargetPath); end; function TMultiListFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateDeleteOperation(FilesToDelete); end; function TMultiListFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateWipeOperation(FilesToWipe); end; function TMultiListFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; begin Result := FFileSource.CreateExecuteOperation(ExecutableFile, ExecutableFile.Path, Verb); end; function TMultiListFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateTestArchiveOperation(theSourceFiles); end; function TMultiListFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin Result := FFileSource.CreateCalcChecksumOperation(theFiles, aTargetPath, aTargetMask); end; function TMultiListFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateCalcStatisticsOperation(theFiles); end; function TMultiListFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; begin Result := FFileSource.CreateSetFilePropertyOperation(theTargetFiles, theNewProperties); end; end. doublecmd-1.1.30/src/filesources/multiarchive/0000755000175000001440000000000015104114162020373 5ustar alexxusersdoublecmd-1.1.30/src/filesources/multiarchive/umultiarchiveutil.pas0000644000175000001440000003420015104114162024656 0ustar alexxusersunit uMultiArchiveUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCConvertEncoding, uMultiArc, un_process, uFile, uMultiArchiveParser; type { TOutputParser } TOutputParser = class FPassword: String; FExProcess: TExProcess; FMultiArcItem: TMultiArcItem; FParser: TMultiArchiveParser; FConvertEncoding: function (const Source: String): RawByteString; private FArchiveName: String; FStartParsing: boolean; function PrepareCommand: String; procedure SetOnGetArchiveItem(AValue: TOnGetArchiveItem); protected procedure OnProcessExit; procedure OnReadLn(str: string); procedure OnQueryString(str: string); function CheckOut(const SubStr, Str: string): boolean; public constructor Create(aMultiArcItem: TMultiArcItem; const anArchiveName: String); destructor Destroy; override; procedure Prepare; procedure Execute; property Password: String read FPassword write FPassword; property OnGetArchiveItem: TOnGetArchiveItem write SetOnGetArchiveItem; end; function ExtractErrorLevel(var Command: String): LongInt; function FormatArchiverCommand(const Archiver, sCmd, anArchiveName: String; aFiles: TFiles = nil; sFileName: String = ''; aDestPath: String = ''; sTempFile: String = ''; sPassword: String = ''; sVolumeSize: String = ''; sCustomParams: String = ''): string; implementation uses LazUTF8, DCClassesUtf8, uDCUtils, DCOSUtils, uOSUtils, uDebug, uShowMsg, uLng, uMultiArchiveDynamicParser; function Utf8ToUtf8(const Source: String): RawByteString; begin Result:= Source; end; { TOutputParser } function TOutputParser.PrepareCommand: String; var Index: Integer; begin Result:= FMultiArcItem.FList; Index:= Pos('%O', Result); FConvertEncoding:= @DCOSUtils.ConsoleToUTF8; if (Index > 0) and (Index + 2 <= Length(Result)) then begin case (Result[Index + 2]) of 'A': FConvertEncoding:= CeSysToUtf8; 'U': FConvertEncoding:= @Utf8ToUtf8; end; Delete(Result, Index, 3); end; end; procedure TOutputParser.SetOnGetArchiveItem(AValue: TOnGetArchiveItem); begin FParser.OnGetArchiveItem:= AValue; end; procedure TOutputParser.OnProcessExit; begin FParser.ParseLines; end; procedure TOutputParser.OnReadLn(str: string); begin str:= FConvertEncoding(str); if FMultiArcItem.FDebug then DCDebug(str); if (str = EmptyStr) or (Trim(str) = EmptyStr) then Exit; // skip empty lines if not FStartParsing then FStartParsing := (FMultiArcItem.FStart = EmptyStr); // if not defined start line if FStartParsing and (FMultiArcItem.FEnd <> EmptyStr) and CheckOut(FMultiArcItem.FEnd, Str) then begin FExProcess.Stop; Exit; end; if FStartParsing then begin FParser.AddLine(Str); end else begin FStartParsing := (FMultiArcItem.FStart = EmptyStr) or CheckOut(FMultiArcItem.FStart, Str); end; end; procedure TOutputParser.OnQueryString(str: string); var pcPassword: PAnsiChar; begin if not ShowInputQuery(FMultiArcItem.FDescription, rsMsgPasswordEnter, True, FPassword) then FExProcess.Stop else begin pcPassword:= PAnsiChar(UTF8ToConsole(FPassword + LineEnding)); FExProcess.Process.Input.Write(pcPassword^, Length(pcPassword)); end; end; function TOutputParser.CheckOut(const SubStr, Str: string): boolean; begin if SubStr[1] = '^' then Result := (Pos(PChar(SubStr) + 1, Str) = 1) else Result := (Pos(SubStr, Str) > 0); end; constructor TOutputParser.Create(aMultiArcItem: TMultiArcItem; const anArchiveName: String); begin FArchiveName := anArchiveName; FMultiArcItem := aMultiArcItem; if TMultiArchiveDynamicParser.NeedDynamic(FMultiArcItem.FFormat) then FParser:= TMultiArchiveDynamicParser.Create(FMultiArcItem) else begin FParser:= TMultiArchiveStaticParser.Create(FMultiArcItem); end; DCDebug(FParser.ClassName, '.Create'); end; destructor TOutputParser.Destroy; begin FreeAndNil(FParser); FreeAndNil(FExProcess); inherited Destroy; end; procedure TOutputParser.Execute; begin FParser.Prepare; // execute archiver FExProcess.Execute; end; procedure TOutputParser.Prepare; var sCommandLine: String; begin FStartParsing:= False; FreeAndNil(FExProcess); sCommandLine:= PrepareCommand; sCommandLine:= FormatArchiverCommand(FMultiArcItem.FArchiver, sCommandLine, FArchiveName, nil, '', '','', FPassword); if FMultiArcItem.FDebug then DCDebug(sCommandLine); FExProcess := TExProcess.Create(sCommandLine); FExProcess.OnReadLn := @OnReadLn; FExProcess.OnProcessExit:= @OnProcessExit; FExProcess.Process.CurrentDirectory:= ExtractFileDir(FArchiveName); if Length(FMultiArcItem.FPasswordQuery) <> 0 then begin FExProcess.QueryString:= UTF8ToConsole(FMultiArcItem.FPasswordQuery); FExProcess.OnQueryString:= @OnQueryString; end; end; function ExtractErrorLevel(var Command: String): LongInt; var I, J: Integer; sErrorLevel: String; begin Result:= 0; I:= Pos('%E', Command); if I > 0 then begin J:= I + 2; while (J <= Length(Command)) and (Command[J] in ['0'..'9']) do Inc(J); sErrorLevel:= Copy(Command, I + 2, J - I - 2); Delete(Command, I, J - I); Result:= StrToIntDef(sErrorLevel, 0); end; end; function FormatArchiverCommand(const Archiver, sCmd, anArchiveName: String; aFiles: TFiles; sFileName: String; aDestPath: String; sTempFile: String; sPassword: String; sVolumeSize: String; sCustomParams: String): string; type TFunctType = (ftNone, ftArchiverLongName, ftArchiverShortName, ftArchiveLongName, ftArchiveShortName, ftFileListLongName, ftFileListShortName, ftFileName, ftTargetArchiveDir, ftVolumeSize, ftPassword, ftCustomParams); TStatePos = (spNone, spPercent, spFunction, spComplete); TFuncModifiers = set of (fmOnlyFiles, fmQuoteWithSpaces, fmQuoteAny, fmNameOnly, fmPathOnly, fmUTF8, fmAnsi); TState = record pos: TStatePos; functStartIndex, bracketStartIndex: integer; funct: TFunctType; FuncModifiers: TFuncModifiers; closeBracket: Boolean; end; var index: integer; state: Tstate; sOutput: string = ''; parseStartIndex: integer; function BuildName(const sFileName: String): String; begin Result := sFileName; if fmNameOnly in state.FuncModifiers then Result := ExtractFileName(Result); if fmPathOnly in state.FuncModifiers then Result := ExtractFilePath(Result); if (fmQuoteWithSpaces in state.FuncModifiers) and (Pos(#32, Result) <> 0) then Result := '"' + Result + '"'; if (fmQuoteAny in state.FuncModifiers) then Result := '"' + Result + '"'; end; function BuildFileList(bShort: boolean): String; var I: integer; FileName: String; FileList: TStringListEx; begin if not Assigned(aFiles) then Exit(EmptyStr); Result := sTempFile; FileList := TStringListEx.Create; for I := 0 to aFiles.Count - 1 do begin if aFiles[I].IsDirectory and (fmOnlyFiles in state.FuncModifiers) then Continue; if bShort then FileName := BuildName(mbFileNameToSysEnc(aFiles[I].FullPath)) else begin FileName := BuildName(aFiles[I].FullPath); end; if (fmAnsi in state.FuncModifiers) then FileName := CeUtf8ToSys(FileName) else if not (fmUTF8 in state.FuncModifiers) then begin FileName := UTF8ToConsole(FileName); end; FileList.Add(FileName); end; try FileList.SaveToFile(Result); except Result := EmptyStr; end; FileList.Free; end; function BuildOutput: String; begin case state.funct of ftArchiverLongName: // TProcess arguments must be enclosed with double quotes and not escaped. Result := '"' + mbExpandFileName(Archiver) + '"'; ftArchiverShortName: // TProcess arguments must be enclosed with double quotes and not escaped. Result := '"' + mbFileNameToSysEnc(mbExpandFileName(Archiver)) + '"'; ftArchiveLongName: Result := BuildName(anArchiveName); ftArchiveShortName: Result := BuildName(mbFileNameToSysEnc(anArchiveName)); ftFileListLongName: Result := BuildFileList(False); ftFileListShortName: Result := BuildFileList(True); ftFileName: Result:= BuildName(sFileName); ftTargetArchiveDir: Result := BuildName(aDestPath); ftVolumeSize: Result:= sVolumeSize; ftPassword: Result:= sPassword; ftCustomParams: Result:= sCustomParams; else Exit(''); end; end; procedure ResetState(var aState: TState); begin with aState do begin pos := spNone; funct := ftNone; functStartIndex := 0; FuncModifiers := []; if closeBracket then begin closeBracket:= False; bracketStartIndex:= 0; end; end; end; procedure AddParsedText(limit: integer); begin // Copy [parseStartIndex .. limit - 1]. if limit > parseStartIndex then sOutput := sOutput + Copy(sCmd, parseStartIndex, limit - parseStartIndex); parseStartIndex := index; end; procedure AddBrackedText(limit: integer); begin // Copy [state.bracketStartIndex + 1 .. limit - 1]. if limit > state.bracketStartIndex then sOutput := sOutput + Copy(sCmd, state.bracketStartIndex + 1, limit - state.bracketStartIndex - 1); end; procedure DoFunction; var aOutput: String; begin aOutput:= BuildOutput; if (aOutput = EmptyStr) and (state.bracketStartIndex <> 0) then begin AddParsedText(state.bracketStartIndex); end else begin if (state.bracketStartIndex <> 0) then begin // add text before bracket AddParsedText(state.bracketStartIndex); //add text after bracket AddBrackedText(state.functStartIndex); end else AddParsedText(state.functStartIndex); sOutput := sOutput + aOutput; end; ResetState(state); end; begin try index := 1; parseStartIndex := index; FillByte(state, SizeOf(state), 0); ResetState(state); while index <= Length(sCmd) do begin case state.pos of spNone: case sCmd[index] of '%': begin state.pos := spPercent; state.functStartIndex := index; end; '{': begin state.bracketStartIndex := index; end; end; spPercent: case sCmd[index] of 'P': begin state.funct := ftArchiverLongName; state.pos := spFunction; end; 'p': begin state.funct := ftArchiverShortName; state.pos := spFunction; end; 'A': begin state.funct := ftArchiveLongName; state.pos := spFunction; end; 'a': begin state.funct := ftArchiveShortName; state.pos := spFunction; end; 'L': begin state.funct := ftFileListLongName; state.pos := spFunction; end; 'l': begin state.funct := ftFileListShortName; state.pos := spFunction; end; 'F': begin state.funct := ftFileName; state.pos := spFunction; end; 'R': begin state.funct := ftTargetArchiveDir; state.pos := spFunction; end; 'V': begin state.funct := ftVolumeSize; state.pos := spFunction; end; 'W': begin state.funct := ftPassword; state.pos := spFunction; end; 'S': begin state.funct := ftCustomParams; state.pos := spFunction; end; else state.pos := spFunction; end; spFunction: case sCmd[index] of 'F': begin state.FuncModifiers := state.FuncModifiers + [fmOnlyFiles]; state.pos := spFunction; end; 'Q': begin state.FuncModifiers := state.FuncModifiers + [fmQuoteWithSpaces]; state.pos := spFunction; end; 'q': begin state.FuncModifiers := state.FuncModifiers + [fmQuoteAny]; state.pos := spFunction; end; 'W': begin state.FuncModifiers := state.FuncModifiers + [fmNameOnly]; state.pos := spFunction; end; 'P': begin state.FuncModifiers := state.FuncModifiers + [fmPathOnly]; state.pos := spFunction; end; 'U': begin state.FuncModifiers := state.FuncModifiers + [fmUTF8]; state.pos := spFunction; end; 'A': begin state.FuncModifiers := state.FuncModifiers + [fmAnsi]; state.pos := spFunction; end; '}': begin state.closeBracket:= True; end else state.pos := spComplete; end; end; if state.pos <> spComplete then Inc(index) // check next character else // Process function and then check current character again after resetting state. DoFunction; end; // while // Finish current parse. if state.pos in [spFunction] then DoFunction else AddParsedText(index); Result := sOutput; finally end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivetestarchiveoperation.pas0000644000175000001440000001751115104114162030151 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Archive test operation for mutiarchive manager Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uMultiArchiveTestArchiveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceTestArchiveOperation, uFileSource, uFileSourceOperationUI, uFile, uMultiArchiveFileSource, uGlobs, uLog, un_process; type { TMultiArchiveTestArchiveOperation } TMultiArchiveTestArchiveOperation = class(TFileSourceTestArchiveOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceTestArchiveOperationStatistics; // local copy of statistics FFullFilesTreeToTest: TFiles; // source files including all files/dirs in subdirectories procedure ShowError(sMessage: String; logOptions: TLogOptions); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const FileName: String; ExitStatus: LongInt); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure UpdateProgress(SourceName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify({%H-}Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uOSUtils, DCOSUtils, uLng, uMultiArc, uMultiArchiveUtil, LCLProc; constructor TMultiArchiveTestArchiveOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FFullFilesTreeToTest:= nil; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TMultiArchiveTestArchiveOperation.Destroy; begin FreeAndNil(FFullFilesTreeToTest); inherited Destroy; end; procedure TMultiArchiveTestArchiveOperation.Initialize; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.ArchiveFile:= FMultiArchiveFileSource.ArchiveFileName; with FMultiArchiveFileSource do FillAndCount('*.*', SourceFiles, True, FFullFilesTreeToTest, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveTestArchiveOperation.MainExecute; var I: Integer; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand, sCommandLine: String; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sCommandLine:= MultiArcItem.FTest; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // test file by file for I:=0 to FFullFilesTreeToTest.Count - 1 do begin aFile:= FFullFilesTreeToTest[I]; UpdateProgress(aFile.FullPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath , FExProcess.ExitStatus); end else // test whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTreeToTest, EmptyStr, EmptyStr, FTempFile ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus); end; end; procedure TMultiArchiveTestArchiveOperation.Finalize; begin FreeAndNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveTestArchiveOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveTestArchiveOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveTestArchiveOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveTestArchiveOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt); begin if (ExitStatus > FErrorLevel) then begin ShowError(Format(rsMsgLogError + rsMsgLogTest, [FileName + ' - ' + rsMsgExitStatusCode + ' ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogTest, [FileName]), [log_arc_op], lmtSuccess); end; end; procedure TMultiArchiveTestArchiveOperation.UpdateProgress(SourceName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFile:= SourceName; DoneBytes := DoneBytes + IncSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveTestArchiveOperation.FileSourceOperationStateChangedNotify (Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchiveparser.pas0000644000175000001440000002027315104114162025202 0ustar alexxusersunit uMultiArchiveParser; {$mode objfpc}{$H+} {.$DEFINE DEBUG} interface uses Classes, SysUtils, DCBasicTypes, uMultiArc; type TGetFileAttr = function(sAttr: String): TFileAttrs; TGetFileName = function(const Str: String): String; TOnGetArchiveItem = procedure(ArchiveItem: TArchiveItem) of object; TKeyPos = record Index, Start, Count: longint; end; type { TMultiArchiveParser } TMultiArchiveParser = class protected FArchiveItem: TArchiveItem; FGetFileAttr: TGetFileAttr; FGetFileName: TGetFileName; FMultiArcItem: TMultiArcItem; FOnGetArchiveItem: TOnGetArchiveItem; private procedure SplitFileName; protected procedure UpdateFileName; public constructor Create(AMultiArcItem: TMultiArcItem); virtual; procedure Prepare; virtual; abstract; procedure ParseLines; virtual; abstract; procedure AddLine(const Str: String); virtual; abstract; property OnGetArchiveItem: TOnGetArchiveItem write FOnGetArchiveItem; end; { TMultiArchiveStaticParser } TMultiArchiveStaticParser = class(TMultiArchiveParser) private FExtPos, FNamePos, FUnpSizePos, FPackSizePos, FYearPos, FMonthPos, FMonthNamePos, FDayPos, FHourPos, FHourModifierPos, FMinPos, FSecPos, FAttrPos: TKeyPos; private FFormatIndex: Integer; private function FixPosition(const Str: String; Key: TKeyPos): LongInt; function KeyPos(Key: char; out Position: TKeyPos): boolean; function GetKeyValue(const str: String; Key: TKeyPos): String; public procedure Prepare; override; procedure ParseLines; override; procedure AddLine(const Str: String); override; end; implementation uses LazUTF8, StrUtils, DCFileAttributes, DCDateTimeUtils; function GetUnixFileName(const Str: String): String; var I: Integer; begin Result:= Str; for I:= 1 to Length(Str) do if Result[I] = '/' then Result[I]:= PathDelim; end; function GetWinFileName(const Str: String): String; var I: Integer; begin Result:= Str; for I:= 1 to Length(Str) do if Result[I] = '\' then Result[I]:= PathDelim; end; function GetDefFileName(const Str: String): String; begin Result:= Str; end; { TMultiArchiveParser } procedure TMultiArchiveParser.SplitFileName; var Index: Integer; begin Index:= Pos(' -> ', FArchiveItem.FileName); if Index > 0 then begin FArchiveItem.FileLink:= Copy(FArchiveItem.FileName, Index + 4, MaxInt); FArchiveItem.FileName:= Copy(FArchiveItem.FileName, 1, Index - 1); end end; constructor TMultiArchiveParser.Create(AMultiArcItem: TMultiArcItem); begin FMultiArcItem:= AMultiArcItem; with FMultiArcItem do begin // Setup function to process file attributes if (FFormMode and MAF_UNIX_ATTR) <> 0 then FGetFileAttr:= @UnixStrToFileAttr else if (FFormMode and MAF_WIN_ATTR) <> 0 then FGetFileAttr:= @WinStrToFileAttr else FGetFileAttr:= @StrToFileAttr; // Setup function to process file name if ((FFormMode and MAF_UNIX_PATH) <> 0) and (PathDelim <> '/') then FGetFileName:= @GetUnixFileName else if ((FFormMode and MAF_WIN_PATH) <> 0) and (PathDelim <> '\') then FGetFileName:= @GetWinFileName else FGetFileName:= @GetDefFileName; end; end; procedure TMultiArchiveParser.UpdateFileName; begin with FArchiveItem do begin if ((Attributes and S_IFLNK) <> 0) or ((Attributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0) then SplitFileName; if Length(FileExt) > 0 then begin FileName := FileName + ExtensionSeparator + FileExt; end; end; end; { TMultiArchiveStaticParser } function TMultiArchiveStaticParser.FixPosition(const Str: String; Key: TKeyPos): LongInt; var I, K, U, C: LongInt; Format: String; begin I:= 0; U:= 0; Result:= Key.Start; Format:= FMultiArcItem.FFormat[Key.Index]; repeat C:= 0; I:= PosEx('*', Format, I + 1); if (I = 0) or (I >= Result) then Exit; if (I > 0) then begin I:= I + U; K:= I; while (K <= Length(Str)) and (Str[K] <> #32) do begin Inc(C); Inc(K); end; if C > 0 then U:= C - 1 else U:= 0; Result:= Result + U; end; until I = 0; end; function TMultiArchiveStaticParser.KeyPos(Key: char; out Position: TKeyPos): boolean; var I, L: Integer; Format: String; begin Result := False; Position.Index := -1; for I := 0 to FMultiArcItem.FFormat.Count - 1 do with FMultiArcItem do begin Format := FFormat[I]; Position.Start := Pos(Key, Format); if Position.Start = 0 then Continue; L := Length(Format); if (Position.Start = L - 1) and (Format[L] = '+') then Position.Count := MaxInt else begin Position.Count := Position.Start; while ((Position.Count <= L) and (Format[Position.Count] = Key)) do Inc(Position.Count); Position.Count := Position.Count - Position.Start; end; Position.Index := I; {$IFDEF DEBUG} DCDebug('Key: ' + Key, ' Format: ' + IntToStr(I), ' Start: ' + IntToStr(Position.Start), ' Count: ' + IntToStr(Position.Count)); {$ENDIF} Result := True; Break; end; end; function TMultiArchiveStaticParser.GetKeyValue(const str: String; Key: TKeyPos): String; begin Result:= Copy(str, FixPosition(str, Key), Key.Count); end; procedure TMultiArchiveStaticParser.Prepare; begin // get positions of all properties KeyPos('e', FExtPos); // file ext KeyPos('n', FNamePos); // file name KeyPos('z', FUnpSizePos); // unpacked size KeyPos('p', FPackSizePos); // packed size KeyPos('y', FYearPos); KeyPos('t', FMonthPos); KeyPos('T', FMonthNamePos); KeyPos('d', FDayPos); KeyPos('h', FHourPos); KeyPos('H', FHourModifierPos); KeyPos('m', FMinPos); KeyPos('s', FSecPos); KeyPos('a', FAttrPos); end; procedure TMultiArchiveStaticParser.ParseLines; begin end; procedure TMultiArchiveStaticParser.AddLine(const Str: String); begin // if next item if FFormatIndex = 0 then begin FArchiveItem := TArchiveItem.Create; FArchiveItem.PackSize := -1; FArchiveItem.UnpSize := -1; end; // get all file properties if FExtPos.Index = FFormatIndex then FArchiveItem.FileExt := FGetFileName(Trim(GetKeyValue(str, FExtPos))); if FNamePos.Index = FFormatIndex then FArchiveItem.FileName := FGetFileName(Trim(GetKeyValue(str, FNamePos))); if FUnpSizePos.Index = FFormatIndex then FArchiveItem.UnpSize := StrToInt64Def(Trim(GetKeyValue(str, FUnpSizePos)), -1); if FPackSizePos.Index = FFormatIndex then FArchiveItem.PackSize := StrToInt64Def(Trim(GetKeyValue(str, FPackSizePos)), -1); if FYearPos.Index = FFormatIndex then FArchiveItem.Year := YearShortToLong(StrToIntDef(Trim(GetKeyValue(str, FYearPos)), 0)); if FMonthPos.Index = FFormatIndex then FArchiveItem.Month := StrToIntDef(Trim(GetKeyValue(str, FMonthPos)), 0); if FMonthNamePos.Index = FFormatIndex then FArchiveItem.Month := MonthToNumberDef(GetKeyValue(str, FMonthNamePos), 0); if FDayPos.Index = FFormatIndex then FArchiveItem.Day := StrToIntDef(Trim(GetKeyValue(str, FDayPos)), 0); if FHourPos.Index = FFormatIndex then FArchiveItem.Hour := StrToIntDef(Trim(GetKeyValue(str, FHourPos)), 0); if FHourModifierPos.Index = FFormatIndex then FArchiveItem.Hour := TwelveToTwentyFour(FArchiveItem.Hour, GetKeyValue(str, FHourModifierPos)); if FMinPos.Index = FFormatIndex then FArchiveItem.Minute := StrToIntDef(Trim(GetKeyValue(str, FMinPos)), 0); if FSecPos.Index = FFormatIndex then FArchiveItem.Second := StrToIntDef(Trim(GetKeyValue(str, FSecPos)), 0); if FAttrPos.Index = FFormatIndex then FArchiveItem.Attributes := FGetFileAttr(GetKeyValue(str, FAttrPos)); FFormatIndex := FFormatIndex + 1; if FFormatIndex >= FMultiArcItem.FFormat.Count then begin FFormatIndex := 0; UpdateFileName; {$IFDEF DEBUG} DCDebug('FileName: ', FArchiveItem.FileName); DCDebug('Size: ', IntToStr(FArchiveItem.UnpSize)); DCDebug('Pack size: ', IntToStr(FArchiveItem.PackSize)); DCDebug('Attributes: ', IntToStr(FArchiveItem.Attributes)); DCDebug('-------------------------------------'); {$ENDIF} if Assigned(FOnGetArchiveItem) then FOnGetArchiveItem(FArchiveItem); end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivelistoperation.pas0000644000175000001440000000334715104114162026605 0ustar alexxusersunit uMultiArchiveListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uMultiArchiveFileSource, uFileSource; type TMultiArchiveListOperation = class(TFileSourceListOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, uOSUtils, DCStrUtils, uMultiArc, uFile; constructor TMultiArchiveListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FMultiArchiveFileSource := aFileSource as IMultiArchiveFileSource; inherited Create(aFileSource, aPath); end; procedure TMultiArchiveListOperation.MainExecute; var I : Integer; CurrFileName : String; // Current file name ArcFileList: TList; aFile: TFile; begin FFiles.Clear; if FMultiArchiveFileSource.Changed then begin FMultiArchiveFileSource.Reload(Path); end; if not FileSource.IsPathAtRoot(Path) then begin aFile := TMultiArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FMultiArchiveFileSource.ArchiveFileList.Clone; try for I := 0 to ArcFileList.Count - 1 do begin CheckOperationState; CurrFileName := PathDelim + TArchiveItem(ArcFileList.Items[I]).FileName; if not IsInPath(Path, CurrFileName, False, False) then Continue; with FMultiArchiveFileSource.MultiArcItem do aFile := TMultiArchiveFileSource.CreateFile(Path, TArchiveItem(ArcFileList.Items[I]), FFormMode); FFiles.Add(AFile); end; finally ArcFileList.Free; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivefilesource.pas0000644000175000001440000005507715104114162026060 0ustar alexxusersunit uMultiArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, DCStringHashListUtf8, uOSUtils, uMultiArc, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation, uMultiArchiveUtil, DCBasicTypes, uClassesEx; type { IMultiArchiveFileSource } IMultiArchiveFileSource = interface(IArchiveFileSource) ['{71BF41D3-1E40-4E84-83BB-B6D3E0DEB6FC}'] function GetPassword: String; function GetArcFileList: TThreadObjectList; function GetMultiArcItem: TMultiArcItem; function FileIsLink(ArchiveItem: TArchiveItem): Boolean; function FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; procedure FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); property Password: String read GetPassword; property ArchiveFileList: TThreadObjectList read GetArcFileList; property MultiArcItem: TMultiArcItem read GetMultiArcItem; end; { TMultiArchiveFileSource } TMultiArchiveFileSource = class(TArchiveFileSource, IMultiArchiveFileSource) private FPassword: String; FOutputParser: TOutputParser; FArcFileList : TThreadObjectList; FMultiArcItem: TMultiArcItem; FAllDirsList, FExistsDirList: TStringHashListUtf8; FLinkAttribute, FDirectoryAttribute: TFileAttrs; function GetPassword: String; function GetMultiArcItem: TMultiArcItem; procedure OnGetArchiveItem(ArchiveItem: TArchiveItem); function ReadArchive(bCanYouHandleThisFile : Boolean = False): Boolean; function FileIsLink(ArchiveItem: TArchiveItem): Boolean; function FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; function GetArcFileList: TThreadObjectList; protected function GetPacker: String; override; function GetSupportedFileProperties: TFilePropertiesTypes; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; procedure DoReload(const PathsToReload: TPathsArray); override; public procedure FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); public constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aMultiArcItem: TMultiArcItem); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String; ArchiveItem: TArchiveItem; FormMode: Integer): TFile; overload; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; class function CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; class function CreateByArchiveType(anArchiveFileSource: IFileSource; anArchiveFileName, anArchiveType: String): IMultiArchiveFileSource; class function CreateByArchiveName(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; {en Returns @true if there is an addon registered for the archive name. } class function CheckAddonByName(const anArchiveFileName: String): Boolean; property Password: String read GetPassword; property ArchiveFileList: TThreadObjectList read GetArcFileList; property MultiArcItem: TMultiArcItem read GetMultiArcItem; end; implementation uses uDebug, uGlobs, DCFileAttributes, DCOSUtils, DCStrUtils, DCDateTimeUtils, FileUtil, uMasks, uMultiArchiveListOperation, uMultiArchiveCopyInOperation, uMultiArchiveCopyOutOperation, uMultiArchiveDeleteOperation, uMultiArchiveExecuteOperation, uMultiArchiveTestArchiveOperation, uMultiArchiveCalcStatisticsOperation ; class function TMultiArchiveFileSource.CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; var I: Integer; aMultiArcItem: TMultiArcItem; begin Result := nil; // Check if there is a registered addon for the archive file by content. for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if (aMultiArcItem.FEnabled) and (aMultiArcItem.FID <> EmptyStr) then begin if aMultiArcItem.CanYouHandleThisFile(anArchiveFileName) then begin Result := TMultiArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, aMultiArcItem); DCDebug('Found registered addon "' + aMultiArcItem.FDescription + '" for archive ' + anArchiveFileName); Break; end; end; end; end; class function TMultiArchiveFileSource.CreateByArchiveType( anArchiveFileSource: IFileSource; anArchiveFileName, anArchiveType: String): IMultiArchiveFileSource; var I: Integer; aMultiArcItem: TMultiArcItem; begin Result := nil; // Check if there is a registered addon for the extension of the archive file name. for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if (aMultiArcItem.FEnabled) and MatchesMaskList(anArchiveType, aMultiArcItem.FExtension, ',') then begin Result := TMultiArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, aMultiArcItem); DCDebug('Found registered addon "' + aMultiArcItem.FDescription + '" for archive ' + anArchiveFileName); Break; end; end; end; class function TMultiArchiveFileSource.CreateByArchiveName( anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; var I: Integer; aMultiArcItem: TMultiArcItem; begin Result := nil; // Check if there is a registered addon for the archive file name. for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if (aMultiArcItem.FEnabled) and aMultiArcItem.Matches(anArchiveFileName) then begin Result := TMultiArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, aMultiArcItem); DCDebug('Found registered addon "' + aMultiArcItem.FDescription + '" for archive ' + anArchiveFileName); Break; end; end; end; class function TMultiArchiveFileSource.CheckAddonByName(const anArchiveFileName: String): Boolean; var I: Integer; aMultiArcItem: TMultiArcItem; begin for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if (aMultiArcItem.FEnabled) and aMultiArcItem.Matches(anArchiveFileName) then Exit(True); end; Result := False; end; // ---------------------------------------------------------------------------- constructor TMultiArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aMultiArcItem: TMultiArcItem); begin inherited Create(anArchiveFileSource, anArchiveFileName); FMultiArcItem := aMultiArcItem; FArcFileList := TThreadObjectList.Create; FOutputParser := TOutputParser.Create(aMultiArcItem, anArchiveFileName); FOutputParser.OnGetArchiveItem:= @OnGetArchiveItem; FOperationsClasses[fsoCopyIn] := TMultiArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TMultiArchiveCopyOutOperation.GetOperationClass; with FMultiArcItem do begin if (FFormMode and MAF_UNIX_ATTR) <> 0 then begin FLinkAttribute:= S_IFLNK; FDirectoryAttribute:= S_IFDIR; end else if (FFormMode and MAF_WIN_ATTR) <> 0 then begin FLinkAttribute:= FILE_ATTRIBUTE_REPARSE_POINT; FDirectoryAttribute:= FILE_ATTRIBUTE_DIRECTORY; end else begin FLinkAttribute:= faSymLink; FDirectoryAttribute:= faFolder; end; end; ReadArchive; end; destructor TMultiArchiveFileSource.Destroy; begin inherited Destroy; if Assigned(FArcFileList) then FreeAndNil(FArcFileList); end; class function TMultiArchiveFileSource.CreateFile(const APath: String; ArchiveItem: TArchiveItem; FormMode: Integer): TFile; begin Result := TFile.Create(APath); with Result do begin SizeProperty := TFileSizeProperty.Create(ArchiveItem.UnpSize); SizeProperty.IsValid := (ArchiveItem.UnpSize >= 0); CompressedSizeProperty := TFileCompressedSizeProperty.Create(ArchiveItem.PackSize); CompressedSizeProperty.IsValid := (ArchiveItem.PackSize >= 0); if (FormMode and MAF_UNIX_ATTR) <> 0 then AttributesProperty := TUnixFileAttributesProperty.Create(ArchiveItem.Attributes) else if (FormMode and MAF_WIN_ATTR) <> 0 then AttributesProperty := TNtfsFileAttributesProperty.Create(ArchiveItem.Attributes) else begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes(ArchiveItem.Attributes); end; if AttributesProperty.IsDirectory then begin if not SizeProperty.IsValid then begin SizeProperty.IsValid := True; SizeProperty.Value := FOLDER_SIZE_UNKN; end; if not CompressedSizeProperty.IsValid then begin CompressedSizeProperty.IsValid := True; CompressedSizeProperty.Value := FOLDER_SIZE_UNKN; end; end; ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0); try with ArchiveItem do ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); except on EConvertError do ModificationTimeProperty.IsValid:= False; end; if AttributesProperty.IsLink and (Length(ArchiveItem.FileLink) > 0) then begin LinkProperty := TFileLinkProperty.Create; LinkProperty.LinkTo := ArchiveItem.FileLink; end; // Set name after assigning Attributes property, because it is used to get extension. Name := ExtractFileNameEx(ArchiveItem.FileName); if ArchiveItem.FileExt <> EmptyStr then Name:= Name + '.' + ArchiveItem.FileExt; end; end; function TMultiArchiveFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoExecute]; if (FMultiArcItem.FList <> EmptyStr) or (mafFileNameList in FMultiArcItem.FFlags) then Result := Result + [fsoList, fsoCalcStatistics]; if FMultiArcItem.FAdd <> EmptyStr then Result := Result + [fsoCopyIn]; if FMultiArcItem.FExtract <> EmptyStr then Result := Result + [fsoCopyOut]; if FMultiArcItem.FDelete <> EmptyStr then Result := Result + [fsoDelete]; if FMultiArcItem.FTest <> EmptyStr then Result := Result + [fsoTestArchive]; end; function TMultiArchiveFileSource.GetProperties: TFileSourceProperties; begin Result := []; end; function TMultiArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpLink]; end; function TMultiArchiveFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; var I: Integer; AFileList: TList; ArchiveItem: TArchiveItem; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); AFileList:= FArcFileList.LockList; try // Search file list for a directory with name NewDir. for I := 0 to AFileList.Count - 1 do begin ArchiveItem := TArchiveItem(AFileList.Items[I]); if FileIsDirectory(ArchiveItem) and (Length(ArchiveItem.FileName) > 0) then begin if NewDir = IncludeTrailingPathDelimiter(GetRootDir() + ArchiveItem.FileName) then Exit(True); end; end; finally FArcFileList.UnlockList; end; end; end; function TMultiArchiveFileSource.GetArcFileList: TThreadObjectList; begin Result := FArcFileList; end; function TMultiArchiveFileSource.GetMultiArcItem: TMultiArcItem; begin Result := FMultiArcItem; end; function TMultiArchiveFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveListOperation.Create(TargetFileSource, TargetPath); end; function TMultiArchiveFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TMultiArchiveFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TMultiArchiveCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TMultiArchiveFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TMultiArchiveFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TMultiArchiveExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TMultiArchiveFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result:= TMultiArchiveTestArchiveOperation.Create(SourceFileSource, theSourceFiles); end; function TMultiArchiveFileSource.CreateCalcStatisticsOperation( var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; procedure TMultiArchiveFileSource.OnGetArchiveItem(ArchiveItem: TArchiveItem); procedure CollectDirs(Path: PAnsiChar; var DirsList: TStringHashListUtf8); var I : Integer; Dir : AnsiString; begin // Scan from the second char from the end, to the second char from the beginning. for I := strlen(Path) - 2 downto 1 do begin if Path[I] = PathDelim then begin SetString(Dir, Path, I); if DirsList.Find(Dir) = -1 then // Add directory and continue scanning for parent directories. DirsList.Add(Dir) else // This directory is already in the list and we assume // that all parent directories are too. Exit; end end; end; var NameLength: Integer; begin // Some archivers end directories with path delimiter. // And not set directory attribute. So delete path // delimiter if present and add directory attribute. NameLength := Length(ArchiveItem.FileName); if (NameLength > 0) and (ArchiveItem.FileName[NameLength] = PathDelim) then begin Delete(ArchiveItem.FileName, NameLength, 1); ArchiveItem.Attributes := ArchiveItem.Attributes or FDirectoryAttribute; end; //**************************************************************************** // Workaround for archivers that don't give a list of folders // or the list does not include all of the folders. if FileIsDirectory(ArchiveItem) then begin // Collect directories that the plugin supplies. if (FExistsDirList.Find(ArchiveItem.FileName) < 0) then FExistsDirList.Add(ArchiveItem.FileName); end; // Collect all directories. CollectDirs(PAnsiChar(ArchiveItem.FileName), FAllDirsList); //**************************************************************************** FArcFileList.Add(ArchiveItem); end; function TMultiArchiveFileSource.GetPacker: String; begin Result:= FMultiArcItem.FPacker; end; function TMultiArchiveFileSource.GetPassword: String; begin Result:= FPassword; end; function TMultiArchiveFileSource.ReadArchive(bCanYouHandleThisFile : Boolean = False): Boolean; var I : Integer; AFileList: TList; ArchiveTime: TSystemTime; ArchiveItem: TArchiveItem; begin if not mbFileAccess(ArchiveFileName, fmOpenRead) then begin Result := False; Exit; end; { if bCanYouHandleThisFile and (Assigned(WcxModule.CanYouHandleThisFile) or Assigned(WcxModule.CanYouHandleThisFileW)) then begin Result := WcxModule.WcxCanYouHandleThisFile(ArchiveFileName); if not Result then Exit; end; } { Get File List } AFileList:= FArcFileList.LockList; try AFileList.Clear; // Get archive file time DateTimeToSystemTime(FileTimeToDateTime(mbFileAge(ArchiveFileName)), ArchiveTime); if mafFileNameList in FMultiArcItem.FFlags then begin ArchiveItem:= TArchiveItem.Create; ArchiveItem.FileName := ExtractOnlyFileName(ArchiveFileName); ArchiveItem.Year:= ArchiveTime.Year; ArchiveItem.Month:= ArchiveTime.Month; ArchiveItem.Day:= ArchiveTime.Day; ArchiveItem.Hour:= ArchiveTime.Hour; ArchiveItem.Minute:= ArchiveTime.Minute; ArchiveItem.Second:= ArchiveTime.Second; ArchiveItem.Attributes := mbFileGetAttr(ArchiveFileName); AFileList.Add(ArchiveItem); Exit(True); end; FExistsDirList := TStringHashListUtf8.Create(True); FAllDirsList := TStringHashListUtf8.Create(True); try DCDebug('Get File List'); FOutputParser.Password:= FPassword; FOutputParser.Prepare; FOutputParser.Execute; FPassword:= FOutputParser.Password; (* if archiver does not give a list of folders *) for I := 0 to FAllDirsList.Count - 1 do begin // Add only those directories that were not supplied by the plugin. if FExistsDirList.Find(FAllDirsList.List[I]^.Key) < 0 then begin ArchiveItem:= TArchiveItem.Create; try ArchiveItem.FileName := FAllDirsList.List[I]^.Key; ArchiveItem.Year:= ArchiveTime.Year; ArchiveItem.Month:= ArchiveTime.Month; ArchiveItem.Day:= ArchiveTime.Day; ArchiveItem.Hour:= ArchiveTime.Hour; ArchiveItem.Minute:= ArchiveTime.Minute; ArchiveItem.Second:= ArchiveTime.Second; ArchiveItem.Attributes := FDirectoryAttribute; AFileList.Add(ArchiveItem); except FreeAndNil(ArchiveItem); end; end; end; finally FreeAndNil(FAllDirsList); FreeAndNil(FExistsDirList); end; finally FArcFileList.UnlockList; end; Result := True; end; function TMultiArchiveFileSource.FileIsLink(ArchiveItem: TArchiveItem): Boolean; begin Result:= (ArchiveItem.Attributes and FLinkAttribute <> 0); end; function TMultiArchiveFileSource.FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; begin Result:= (ArchiveItem.Attributes and FDirectoryAttribute <> 0); end; procedure TMultiArchiveFileSource.DoReload(const PathsToReload: TPathsArray); begin ReadArchive; end; procedure TMultiArchiveFileSource.FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); var aFile: TFile; I, J: Integer; AFileList: TList; sFileName: String; MaskList: TMaskList; ArchiveItem: TArchiveItem; begin FilesSize:= 0; FilesCount:= 0; NewFiles:= TFiles.Create(Files.Path); if (FileMask = '*.*') or (FileMask = '*') then MaskList:= nil else begin MaskList:= TMaskList.Create(FileMask); end; AFileList:= ArchiveFileList.LockList; try for I := 0 to AFileList.Count - 1 do begin ArchiveItem := TArchiveItem(AFileList.Items[I]); sFileName:= PathDelim + ArchiveItem.FileName; // And name matches file mask if ((MaskList = nil) or MaskList.Matches(ExtractFileNameEx(ArchiveItem.FileName))) then begin for J := 0 to Files.Count - 1 do begin aFile := Files[J]; if (aFile.FullPath = sFileName) or // Item in the list is a file, only compare names. (aFile.AttributesProperty.IsDirectory and IsInPath(aFile.FullPath, sFileName, True, False)) then // Check if 'FileName' is in this directory or any of its subdirectories. begin if FileIsDirectory(ArchiveItem) then begin if CountDirs then Inc(FilesCount); end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); end; aFile:= TMultiArchiveFileSource.CreateFile(ExtractFilePathEx(ArchiveItem.FileName), ArchiveItem, FMultiArcItem.FFormMode); aFile.FullPath:= ExcludeFrontPathDelimiter(aFile.FullPath); NewFiles.Add(aFile); end; end; // for J end; end; // for I finally ArchiveFileList.UnlockList; end; MaskList.Free; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchiveexecuteoperation.pas0000644000175000001440000000344415104114162027272 0ustar alexxusersunit uMultiArchiveExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uMultiArchiveFileSource; type { TMultiArchiveExecuteOperation } TMultiArchiveExecuteOperation = class(TFileSourceExecuteOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses fPackInfoDlg, uMasks, uGlobs; constructor TMultiArchiveExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TMultiArchiveExecuteOperation.Initialize; begin end; procedure TMultiArchiveExecuteOperation.MainExecute; begin if (Verb <> 'properties') and MatchesMaskList(ExecutableFile.Name, gAutoExtractOpenMask) then FExecuteOperationResult:= fseorYourSelf else begin FExecuteOperationResult:= ShowPackInfoDlg(FMultiArchiveFileSource, ExecutableFile); end; end; procedure TMultiArchiveExecuteOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivedynamicparser.pas0000644000175000001440000003012015104114162026537 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Multi archive dynamic parser Copyright (C) 2016-2021 Alexander Koblov (alexx2000@mail.ru) Based on TFTPList (http://www.ararat.cz/synapse) Copyright (C) 1999-2011, Lukas Gebauer All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Lukas Gebauer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } unit uMultiArchiveDynamicParser; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uMultiArc, uMultiArchiveParser; type { TMultiArchiveDynamicParser } TMultiArchiveDynamicParser = class(TMultiArchiveParser) protected FLines: TStringList; FMasks: TStringList; FUnparsedLines: TStringList; BlockSize: string; PackBlockSize: string; FileName: string; FileExt: string; Day: string; Month: string; ThreeMonth: string; Year: string; Hours: string; HoursModif: Ansistring; Minutes: string; Seconds: string; Size: Ansistring; PackSize: AnsiString; Attributes: Ansistring; procedure ClearStore; virtual; function CheckValues: Boolean; virtual; procedure FillRecord(const Value: TArchiveItem); virtual; function ParseByMask(Value, NextValue, Mask: ansistring): Integer; virtual; public constructor Create(AMultiArcItem: TMultiArcItem); override; destructor Destroy; override; procedure Prepare; override; procedure ParseLines; override; procedure AddLine(const Str: String); override; class function NeedDynamic(Format: TStringList): Boolean; property Masks: TStringList read FMasks; property UnparsedLines: TStringList read FUnparsedLines; property OnGetArchiveItem: TOnGetArchiveItem write FOnGetArchiveItem; end; implementation uses DCDateTimeUtils, DCStrUtils; { TMultiArchiveDynamicParser } constructor TMultiArchiveDynamicParser.Create(AMultiArcItem: TMultiArcItem); begin inherited Create(AMultiArcItem); FLines := TStringList.Create; FMasks := AMultiArcItem.FFormat; FUnparsedLines := TStringList.Create; end; destructor TMultiArchiveDynamicParser.Destroy; begin Prepare; FLines.Free; FUnparsedLines.Free; inherited Destroy; end; procedure TMultiArchiveDynamicParser.Prepare; begin FLines.Clear; FUnparsedLines.Clear; end; procedure TMultiArchiveDynamicParser.ClearStore; begin BlockSize := ''; PackBlockSize := ''; FileName := ''; FileExt := ''; Day := ''; Month := ''; ThreeMonth := ''; Year := ''; Hours := ''; HoursModif := ''; Minutes := ''; Seconds := ''; Size := ''; PackSize := ''; Attributes := ''; end; function TMultiArchiveDynamicParser.ParseByMask(Value, NextValue, Mask: ansistring): Integer; var Ivalue, IMask: integer; MaskC, LastMaskC: AnsiChar; c: AnsiChar; s: string; begin ClearStore; Result := 0; if Value = '' then Exit; if Mask = '' then Exit; Ivalue := 1; IMask := 1; Result := 1; LastMaskC := ' '; while Imask <= Length(mask) do begin if (Mask[Imask] <> '+') and (Ivalue > Length(Value)) then begin Result := 0; Exit; end; MaskC := Mask[Imask]; if Ivalue > Length(Value) then Exit; c := Value[Ivalue]; case MaskC of 'n': FileName := FileName + c; 'e': FileExt := FileExt + c; 'd': Day := Day + c; 't': Month := Month + c; 'T': ThreeMonth := ThreeMonth + c; 'y': Year := Year + c; 'h': Hours := Hours + c; 'H': HoursModif := HoursModif + c; 'm': Minutes := Minutes + c; 's': Seconds := Seconds + c; 'z': Size := Size + c; 'p': PackSize := PackSize + c; 'a': Attributes := Attributes + c; 'x': if c <> ' ' then begin Result := 0; Exit; end; '+': begin s := ''; if LastMaskC in ['n', 'e'] then begin if Imask = Length(Mask) then s := Copy(Value, IValue, Maxint) else while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; s := s + Value[Ivalue]; Inc(Ivalue); end; case LastMaskC of 'n': FileName := FileName + s; 'e': FileExt := FileExt + s; end; end else begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in ['0'..'9']) then break; s := s + Value[Ivalue]; Inc(Ivalue); end; case LastMaskC of 'z': Size := Size + s; 'p': PackSize := PackSize + s; end; end; Dec(IValue); end; '*': begin while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; Inc(Ivalue); end; while IValue <= Length(Value) do begin if Value[Ivalue] <> ' ' then break; Inc(Ivalue); end; Dec(IValue); end; '$': begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in [' ', #9]) then break; Inc(Ivalue); end; Dec(IValue); end; '=': begin s := ''; case LastmaskC of 'z', 'p': begin while Imask <= Length(Mask) do begin if not(Mask[Imask] in ['0'..'9']) then break; s := s + Mask[Imask]; Inc(Imask); end; Dec(Imask); case LastMaskC of 'z': BlockSize := s; 'p': PackBlockSize := s; end; end; end; end; '\': begin Value := NextValue; IValue := 0; Result := 2; end; '?': ; end; Inc(Ivalue); Inc(Imask); LastMaskC := MaskC; end; end; function TMultiArchiveDynamicParser.CheckValues: Boolean; var x, n: integer; begin Result := false; if (FileName = '') then Exit; if Day <> '' then begin Day := Trim(Day); x := StrToIntDef(day, -1); if (x < 1) or (x > 31) then Exit; end; if Month <> '' then begin Month := Trim(Month); x := StrToIntDef(Month, -1); if (x < 1) or (x > 12) then Exit; end; if Hours <> '' then begin Hours := Trim(Hours); x := StrToIntDef(Hours, -1); if (x < 0) or (x > 24) then Exit; end; if HoursModif <> '' then begin if not (HoursModif[1] in ['a', 'A', 'p', 'P']) then Exit; end; if Minutes <> '' then begin Minutes := Trim(Minutes); x := StrToIntDef(Minutes, -1); if (x < 0) or (x > 59) then Exit; end; if Seconds <> '' then begin Seconds := Trim(Seconds); x := StrToIntDef(Seconds, -1); if (x < 0) or (x > 59) then Exit; end; if Size <> '' then begin Size := Trim(Size); for n := 1 to Length(Size) do if not (Size[n] in ['0'..'9']) then Exit; end; if ThreeMonth <> '' then begin x := MonthToNumberDef(ThreeMonth, 0); if (x = 0) then Exit; end; if Year <> '' then begin Year := Trim(Year); x := StrToIntDef(Year, -1); if (x = -1) then Exit; if Length(Year) = 4 then begin if not((x > 1900) and (x < 2100)) then Exit; end else if Length(Year) = 2 then begin if not((x >= 0) and (x <= 99)) then Exit; end else if Length(Year) = 3 then begin if not((x >= 100) and (x <= 110)) then Exit; end else Exit; end; Result := True; end; procedure TMultiArchiveDynamicParser.FillRecord(const Value: TArchiveItem); var X: Int64; begin Value.FileName:= FGetFileName(FileName); Value.FileExt:= FGetFileName(FileExt); Value.PackSize:= StrToInt64Def(PackSize, -1); Value.UnpSize:= StrToInt64Def(Size, -1); Value.Year:= YearShortToLong(StrToIntDef(Year, 0)); Value.Month:= StrToIntDef(Month, 1); Value.Day:= StrToIntDef(Day, 1); Value.Hour:= StrToIntDef(Hours, 0); Value.Minute:= StrToIntDef(Minutes, 0); Value.Second:= StrToIntDef(Seconds, 0); Value.Attributes:= FGetFileAttr(Attributes); if ThreeMonth <> '' then begin Value.Month:= MonthToNumberDef(ThreeMonth, 1); end; if HoursModif <> '' then begin Value.Hour:= TwelveToTwentyFour(Value.Hour, HoursModif); end; if BlockSize <> '' then begin X := StrToIntDef(BlockSize, 1); Value.UnpSize := X * Value.UnpSize; end; if PackBlockSize <> '' then begin X := StrToIntDef(PackBlockSize, 1); Value.PackSize := X * Value.PackSize; end; end; procedure TMultiArchiveDynamicParser.ParseLines; var n, m: Integer; S: string; x: integer; b: Boolean; begin n := 0; while n < FLines.Count do begin if n = FLines.Count - 1 then s := '' else s := FLines[n + 1]; b := False; x := 0; for m := 0 to Masks.Count - 1 do begin x := ParseByMask(FLines[n], s, Masks[m]); if x > 0 then if CheckValues then begin if Assigned(FOnGetArchiveItem) then begin FArchiveItem := TArchiveItem.create; FillRecord(FArchiveItem); UpdateFileName; FOnGetArchiveItem(FArchiveItem); end; b := True; Break; end; end; if not b then FUnparsedLines.Add(FLines[n]); Inc(n); if x > 1 then Inc(n, x - 1); end; end; procedure TMultiArchiveDynamicParser.AddLine(const Str: String); begin FLines.Add(Str); end; class function TMultiArchiveDynamicParser.NeedDynamic(Format: TStringList): Boolean; var P: Integer; Index: Integer; begin Result := False; for Index:= 0 to Format.Count - 1 do begin P:= Pos('+', Format[Index]); if (P > 0) and (P < Length(Format[Index])) then Exit(True); if ContainsOneOf(Format[Index], '$x=\') then Exit(True); end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivedeleteoperation.pas0000644000175000001440000001562315104114162027074 0ustar alexxusersunit uMultiArchiveDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceDeleteOperation, uFileSource, uFileSourceOperationUI, uFile, uMultiArchiveFileSource, uGlobs, uLog, un_process; type { TMultiArchiveDeleteOperation } TMultiArchiveDeleteOperation = class(TFileSourceDeleteOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories procedure ShowError(sMessage: String; logOptions: TLogOptions); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const FileName: String; ExitStatus: LongInt); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure UpdateProgress(SourceName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uOSUtils, DCOSUtils, uLng, uMultiArc, uMultiArchiveUtil, LCLProc; constructor TMultiArchiveDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FFullFilesTreeToDelete:= nil; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TMultiArchiveDeleteOperation.Destroy; begin FreeAndNil(FFullFilesTreeToDelete); inherited Destroy; end; procedure TMultiArchiveDeleteOperation.Initialize; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FMultiArchiveFileSource do FillAndCount('*.*', FilesToDelete, True, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveDeleteOperation.MainExecute; var I: Integer; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand, sCommandLine: String; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sCommandLine:= MultiArcItem.FDelete; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // delete file by file for I:=0 to FFullFilesTreeToDelete.Count - 1 do begin aFile:= FFullFilesTreeToDelete[I]; UpdateProgress(aFile.FullPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath , FExProcess.ExitStatus); end else // delete whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTreeToDelete, EmptyStr, EmptyStr, FTempFile ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus); end; end; procedure TMultiArchiveDeleteOperation.Finalize; begin FreeAndNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveDeleteOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveDeleteOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveDeleteOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt); begin if ExitStatus > FErrorLevel then begin ShowError(Format(rsMsgLogError + rsMsgLogDelete, [FileName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_arc_op], lmtSuccess); end; end; procedure TMultiArchiveDeleteOperation.UpdateProgress(SourceName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFile:= SourceName; DoneBytes := DoneBytes + IncSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveDeleteOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivecopyoutoperation.pas0000644000175000001440000005621615104114162027337 0ustar alexxusersunit uMultiArchiveCopyOutOperation; {$mode objfpc}{$H+} interface uses LazFileUtils,LazUtf8,Classes, SysUtils, DCStringHashListUtf8, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSourceOperationUI, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFileSource, uFile, uArchiveCopyOperation, uMultiArchiveFileSource; type { TMultiArchiveCopyOutOperation } TMultiArchiveCopyOutOperation = class(TArchiveCopyOutOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FFullFilesTreeToExtract: TFiles; // source files including all files/dirs in subdirectories // Options FPassword: String; FExtractWithoutPath: Boolean; {en Creates neccessary paths before extracting files from archive. @param(Files List of files/directories to extract (relative to archive root).) @param(sDestPath Destination path where the files will be extracted.) @param(CurrentArchiveDir Path inside the archive from where the files will be extracted.) @param(CreatedPaths This list will be filled with absolute paths to directories that were created, together with their attributes.)} procedure CreateDirs(const theFiles: TFiles; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashListUtf8); {en Sets attributes for directories. @param(Paths The list of absolute paths, which attributes are to be set. Each list item's data field must be a pointer to TMultiArchiveFile, from where the attributes are retrieved.} function SetDirsAttributes(const Paths: TStringHashListUtf8): Boolean; function DoFileExists(aFile: TFile; const AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const SourceName, TargetName: String; ExitStatus: LongInt); protected FCurrentFile: TFile; FCurrentTargetFilePath: String; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure OnQueryString(str: string); procedure UpdateProgress(SourceName, TargetName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property Password: String read FPassword write FPassword; property ExtractWithoutPath: Boolean read FExtractWithoutPath write FExtractWithoutPath; end; implementation uses LCLProc, FileUtil, uOSUtils, DCOSUtils, DCStrUtils, uMultiArc, fMultiArchiveCopyOperationOptions, uMultiArchiveUtil, uFileProcs, uLng, DCDateTimeUtils, DCBasicTypes, uShowMsg, uFileSystemUtil; constructor TMultiArchiveCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FMultiArchiveFileSource := aSourceFileSource as IMultiArchiveFileSource; FPassword:= FMultiArchiveFileSource.Password; FFullFilesTreeToExtract:= nil; FFileExistsOption := fsoofeNone; FExtractWithoutPath:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin DoneBytes := -1; DoneFiles := -1; RemainingTime := -1; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; end; destructor TMultiArchiveCopyOutOperation.Destroy; begin FreeAndNil(FFullFilesTreeToExtract); inherited Destroy; end; procedure TMultiArchiveCopyOutOperation.Initialize; var Index: Integer; ACount: Integer; AFileName: String; ArcFileList: TList; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); with FMultiArchiveFileSource.MultiArcItem do if Length(FPasswordQuery) <> 0 then begin FExProcess.QueryString:= UTF8ToConsole(FPasswordQuery); FExProcess.OnQueryString:= @OnQueryString; end; if efSmartExtract in ExtractFlags then begin ACount:= 0; ArcFileList := FMultiArchiveFileSource.ArchiveFileList.Clone; try for Index := 0 to ArcFileList.Count - 1 do begin AFileName := PathDelim + TArchiveItem(ArcFileList[Index]).FileName; if IsInPath(PathDelim, AFileName, False, False) then begin Inc(ACount); if (ACount > 1) then begin FTargetPath := FTargetPath + ExtractOnlyFileName(FMultiArchiveFileSource.ArchiveFileName) + PathDelim; Break; end; end; end; finally ArcFileList.Free; end; end; AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); if FExtractMask = '' then FExtractMask := '*'; // extract all selected files/folders with FMultiArchiveFileSource do FillAndCount(FExtractMask, SourceFiles, True, FFullFilesTreeToExtract, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveCopyOutOperation.MainExecute; var TargetFileName, SourcePath, sTempDir: String; CreatedPaths: TStringHashListUtf8 = nil; I: Integer; aFile: TFile; MultiArcItem: TMultiArcItem; sReadyCommand, sCommandLine: String; FilesToExtract: TFiles = nil; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; try // Archive current path SourcePath:= ExcludeFrontPathDelimiter(SourceFiles.Path); // Check ExtractWithoutPath option if FExtractWithoutPath then sCommandLine:= MultiArcItem.FExtractWithoutPath else begin // Create needed directories. CreatedPaths := TStringHashListUtf8.Create(True); CreateDirs(FFullFilesTreeToExtract, TargetPath, SourcePath, CreatedPaths); sCommandLine:= MultiArcItem.FExtract; end; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // extract file by file begin FStatistics.DoneBytes:= 0; for I:= 0 to FFullFilesTreeToExtract.Count - 1 do begin CheckOperationState; aFile:= FFullFilesTreeToExtract[I]; // Now check if the file is to be extracted. if (not aFile.AttributesProperty.IsDirectory) then // Omit directories (we handle them ourselves). begin // Check ExtractWithoutPath option if FExtractWithoutPath then TargetFileName := TargetPath + aFile.Name else TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); // Check existence of target file if (DoFileExists(aFile, TargetFileName) <> fsoofeOverwrite) then Continue; // Get target directory sTempDir:= ExtractFileDirEx(TargetFileName); UpdateProgress(aFile.FullPath, TargetFileName, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath, TargetPath, FTempFile, FPassword ); OnReadLn(sReadyCommand); // Set target directory as archiver current directory FExProcess.Process.CurrentDirectory:= sTempDir; FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, TargetFileName, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath, TargetFileName, FExProcess.ExitStatus); end; end // for end else // extract whole file list begin sTempDir:= TargetPath; // directory where files will be unpacked // if extract from not root directory and with path if (SourceFiles.Path <> PathDelim) and (FExtractWithoutPath = False) then begin sTempDir:= GetTempName(TargetPath); mbCreateDir(sTempDir); end; // Check existence of target files FilesToExtract:= TFiles.Create(FFullFilesTreeToExtract.Path); for I:= 0 to FFullFilesTreeToExtract.Count - 1 do begin aFile:= FFullFilesTreeToExtract[I]; if FExtractWithoutPath then TargetFileName := TargetPath + aFile.Name else TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); if (DoFileExists(aFile, TargetFileName) = fsoofeOverwrite) then FilesToExtract.Add(aFile.Clone); end; if FilesToExtract.Count = 0 then Exit; with FStatistics do begin if FilesToExtract.Count = 1 then begin FStatistics.CurrentFileFrom:= FilesToExtract[0].FullPath; FStatistics.CurrentFileTo:= TargetFileName; end else begin FStatistics.CurrentFileFrom:= SourceFiles.Path; FStatistics.CurrentFileTo:= TargetPath; end; UpdateStatistics(FStatistics); end; sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FilesToExtract, EmptyStr, TargetPath, FTempFile, FPassword ); OnReadLn(sReadyCommand); // Set target directory as archiver current directory FExProcess.Process.CurrentDirectory:= sTempDir; FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, EmptyStr, FExProcess.ExitStatus); // if extract from not root directory and with path if (SourceFiles.Path <> PathDelim) and (FExtractWithoutPath = False) then begin FStatistics.DoneBytes:= 0; // move files to real target directory for I:= 0 to FilesToExtract.Count - 1 do begin aFile:= FilesToExtract[I]; if not aFile.AttributesProperty.IsDirectory then begin TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); UpdateProgress(aFile.FullPath, TargetFileName, 0); mbRenameFile(sTempDir + PathDelim + aFile.FullPath, TargetFileName); UpdateProgress(aFile.FullPath, TargetFileName, aFile.Size); end end; DelTree(sTempDir); end; end; if (FExtractWithoutPath = False) then SetDirsAttributes(CreatedPaths); finally FreeAndNil(CreatedPaths); FreeAndNil(FilesToExtract); end; end; procedure TMultiArchiveCopyOutOperation.Finalize; begin FreeAndNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveCopyOutOperation.CreateDirs( const theFiles: TFiles; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashListUtf8); var // List of paths that we know must be created. PathsToCreate: TStringHashListUtf8; // List of possible directories to create with their attributes. // This hash list is created to speed up searches for attributes in archive file list. DirsAttributes: TStringHashListUtf8; i: Integer; CurrentFileName: String; aFile: TFile; Directories: TStringList; PathIndex: Integer; ListIndex: Integer; TargetDir: String; begin { First, collect all the paths that need to be created and their attributes. } PathsToCreate := TStringHashListUtf8.Create(True); DirsAttributes := TStringHashListUtf8.Create(True); for I := 0 to theFiles.Count - 1 do begin aFile := theFiles[I]; if aFile.AttributesProperty.IsDirectory then begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, aFile.FullPath); // Save this directory and a pointer to its entry. DirsAttributes.Add(CurrentFileName, aFile); // Paths in PathsToCreate list must end with path delimiter. CurrentFileName := IncludeTrailingPathDelimiter(CurrentFileName); if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end else begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, aFile.Path); // If CurrentFileName is empty now then it was a file in current archive // directory, therefore we don't have to create any paths for it. if Length(CurrentFileName) > 0 then if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end; { Second, create paths and save which paths were created and their attributes. } Directories := TStringList.Create; try sDestPath := IncludeTrailingPathDelimiter(sDestPath); // Create path to destination directory (we don't have attributes for that). mbForceDirectory(sDestPath); CreatedPaths.Clear; for PathIndex := 0 to PathsToCreate.Count - 1 do begin Directories.Clear; // Create also all parent directories of the path to create. // This adds directories to list in order from the outer to inner ones, // for example: dir, dir/dir2, dir/dir2/dir3. if GetDirs(PathsToCreate.List[PathIndex]^.Key, Directories) <> -1 then try for i := 0 to Directories.Count - 1 do begin TargetDir := sDestPath + Directories.Strings[i]; if (CreatedPaths.Find(TargetDir) = -1) and (not DirPathExists(TargetDir)) then begin if mbForceDirectory(TargetDir) = False then begin // Error, cannot create directory. Break; // Don't try to create subdirectories. end else begin // Retrieve attributes for this directory, if they are stored. ListIndex := DirsAttributes.Find(Directories.Strings[i]); if ListIndex <> -1 then aFile := TFile(DirsAttributes.List[ListIndex]^.Data) else aFile := nil; CreatedPaths.Add(TargetDir, aFile); end; end; end; except end; end; finally FreeAndNil(PathsToCreate); FreeAndNil(DirsAttributes); FreeAndNil(Directories); end; end; function TMultiArchiveCopyOutOperation.SetDirsAttributes(const Paths: TStringHashListUtf8): Boolean; var PathIndex: Integer; TargetDir: String; aFile: TFile; Time: TFileTime; begin Result := True; for PathIndex := 0 to Paths.Count - 1 do begin // Get attributes. aFile := TFile(Paths.List[PathIndex]^.Data); if Assigned(aFile) then begin TargetDir := Paths.List[PathIndex]^.Key; try {$IF DEFINED(MSWINDOWS)} // Restore attributes, e.g., hidden, read-only. // On Unix attributes value would have to be translated somehow. mbFileSetAttr(TargetDir, aFile.Attributes); {$ENDIF} Time:= DateTimeToFileTime(aFile.ModificationTime); // Set creation, modification time mbFileSetTime(TargetDir, Time, Time, Time); except Result := False; end; end; end; end; procedure TMultiArchiveCopyOutOperation.QuestionActionHandler( Action: TFileSourceOperationUIAction); var aFile: TFile; begin if Action = fsouaCompare then begin aFile := FCurrentFile.Clone; try aFile.FullPath := IncludeFrontPathDelimiter(aFile.FullPath); ShowCompareFilesUI(aFile, FCurrentTargetFilePath); finally aFile.Free; end; end; end; function TMultiArchiveCopyOutOperation.DoFileExists(aFile: TFile; const AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const PossibleResponses: array[0..8] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsouaCompare, fsourCancel); var Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aFile.ModificationTime > FileTimeToDateTime(mbFileAge(AbsoluteTargetFileName)) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin if not mbFileExists(AbsoluteTargetFileName) then Result:= fsoofeOverwrite else case FFileExistsOption of fsoofeNone: begin Message:= FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime); FCurrentFile := aFile; FCurrentTargetFilePath := AbsoluteTargetFileName; case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourNone, fsourCancel: RaiseAbortOperation; end; end; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else begin Result := FFileExistsOption; end; end; end; procedure TMultiArchiveCopyOutOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveCopyOutOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveCopyOutOperation.CheckForErrors(const SourceName, TargetName: String; ExitStatus: LongInt); begin if ExitStatus > FErrorLevel then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FMultiArchiveFileSource.ArchiveFileName + PathDelim + SourceName + ' -> ' + TargetName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogExtract, [FMultiArchiveFileSource.ArchiveFileName + PathDelim + SourceName +' -> ' + TargetName]), [log_arc_op], lmtSuccess); end; // Success end; procedure TMultiArchiveCopyOutOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveCopyOutOperation.OnQueryString(str: string); var pcPassword: PAnsiChar; begin ShowInputQuery(FMultiArchiveFileSource.MultiArcItem.FDescription, rsMsgPasswordEnter, True, FPassword); pcPassword:= PAnsiChar(UTF8ToConsole(FPassword + LineEnding)); FExProcess.Process.Input.Write(pcPassword^, Length(pcPassword)); end; procedure TMultiArchiveCopyOutOperation.UpdateProgress(SourceName, TargetName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; CurrentFileDoneBytes:= IncSize; DoneBytes := DoneBytes + CurrentFileDoneBytes; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyOutOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; class function TMultiArchiveCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TMultiArchiveCopyOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivecopyinoperation.pas0000644000175000001440000003130115104114162027122 0ustar alexxusersunit uMultiArchiveCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFile, uArchiveCopyOperation, uMultiArchiveFileSource; type { TMultiArchiveCopyInOperation } TMultiArchiveCopyInOperation = class(TArchiveCopyInOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FRemoveFilesTree: TFiles; FPassword: String; FVolumeSize: String; FCustomParams: String; FCallResult: Boolean; procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function CheckForErrors(const FileName: String; ExitStatus: LongInt): Boolean; procedure DeleteFile(const BasePath: String; aFile: TFile); procedure DeleteFiles(const BasePath: String; aFiles: TFiles); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; FCommandLine: String; function Tar: Boolean; procedure OnReadLn(str: string); procedure OperationProgressHandler; procedure OnQueryString(str: string); procedure UpdateProgress(SourceName, TargetName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; property PackingFlags: Integer read FPackingFlags write FPackingFlags; property Password: String read FPassword write FPassword; property VolumeSize: String read FVolumeSize write FVolumeSize; property CustomParams: String read FCustomParams write FCustomParams; property TarBefore: Boolean read FTarBefore write FTarBefore; end; implementation uses LazUTF8, DCStrUtils, uDCUtils, uMultiArc, uLng, WcxPlugin, uFileSourceOperationUI, uFileSystemFileSource, uFileSystemUtil, uMultiArchiveUtil, DCOSUtils, uOSUtils, uTarWriter, uShowMsg, uAdministrator; constructor TMultiArchiveCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FPassword:= FMultiArchiveFileSource.Password; FFullFilesTree := nil; FRemoveFilesTree := nil; FPackingFlags := 0; FVolumeSize := EmptyStr; FTarBefore:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin DoneFiles := -1; CurrentFileDoneBytes := -1; UpdateStatistics(FStatistics); end; end; destructor TMultiArchiveCopyInOperation.Destroy; begin inherited Destroy; FreeAndNil(FFullFilesTree); FreeAndNil(FRemoveFilesTree); end; procedure TMultiArchiveCopyInOperation.Initialize; begin with FMultiArchiveFileSource do begin if (ExtractFileExt(ArchiveFileName) = GetSfxExt) and (Length(MultiArcItem.FAddSelfExtract) <> 0) then FCommandLine:= MultiArcItem.FAddSelfExtract else FCommandLine:= MultiArcItem.FAdd; end; if (TargetPath <> PathDelim) and (Pos('%R', FCommandLine) = 0) then begin AskQuestion('', rsMsgErrNotSupported, [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @OperationProgressHandler; FTempFile:= GetTempName(GetTempFolder); with FMultiArchiveFileSource.MultiArcItem do if Length(FPasswordQuery) <> 0 then begin FExProcess.QueryString:= UTF8ToConsole(FPasswordQuery); FExProcess.OnQueryString:= @OnQueryString; end; AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); with FStatistics do begin if SourceFiles.Count = 1 then CurrentFileFrom:= SourceFiles[0].FullPath else begin CurrentFileFrom:= SourceFiles.Path + AllFilesMask; end; CurrentFileTo:= FMultiArchiveFileSource.ArchiveFileName; end; ElevateAction:= dupError; FillAndCount(SourceFiles, False, False, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveCopyInOperation.MainExecute; var I: Integer; sRootPath, sDestPath: String; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand: String; begin // Put to TAR archive if needed if FTarBefore then Tar; MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sDestPath := ExcludeFrontPathDelimiter(TargetPath); sDestPath := ExcludeTrailingPathDelimiter(sDestPath); sRootPath:= FFullFilesTree.Path; ChangeFileListRoot(EmptyStr, FFullFilesTree); // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(FCommandLine); if Pos('%F', FCommandLine) <> 0 then // pack file by file for I:= FFullFilesTree.Count - 1 downto 0 do begin aFile:= FFullFilesTree[I]; UpdateProgress(sRootPath + aFile.FullPath, sDestPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, FCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath, sDestPath, FTempFile, Password, VolumeSize, CustomParams ); OnReadLn(sReadyCommand); // Set archiver current path to file list root FExProcess.Process.CurrentDirectory:= sRootPath; FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(sRootPath + aFile.FullPath, sDestPath, aFile.Size); // Check for errors. if CheckForErrors(sRootPath + aFile.FullPath, FExProcess.ExitStatus) then begin if (PackingFlags and PK_PACK_MOVE_FILES) <> 0 then DeleteFile(sRootPath, aFile); end; end else // pack whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, FCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTree, EmptyStr, sDestPath, FTempFile, Password, VolumeSize, CustomParams ); OnReadLn(sReadyCommand); // Set archiver current path to file list root FExProcess.Process.CurrentDirectory:= sRootPath; FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. if CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus) then begin if (PackingFlags and PK_PACK_MOVE_FILES) <> 0 then DeleteFiles(sRootPath, FFullFilesTree); end; end; // Delete temporary TAR archive if needed if FTarBefore then begin mbDeleteFile(FTarFileName); if FCallResult and (PackingFlags and PK_PACK_MOVE_FILES <> 0) then DeleteFiles(EmptyStr, FRemoveFilesTree); end; end; procedure TMultiArchiveCopyInOperation.Finalize; begin FreeAndNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveCopyInOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveCopyInOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; function TMultiArchiveCopyInOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt): Boolean; begin if ExitStatus > FErrorLevel then begin Result:= False; ShowError(Format(rsMsgLogError + rsMsgLogPack, [FileName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin Result:= True; LogMessage(Format(rsMsgLogSuccess + rsMsgLogPack, [FileName]), [log_arc_op], lmtSuccess); end; FCallResult:= Result; end; procedure TMultiArchiveCopyInOperation.DeleteFile(const BasePath: String; aFile: TFile); begin if aFile.IsDirectory then mbRemoveDir(BasePath + aFile.FullPath) else mbDeleteFile(BasePath + aFile.FullPath); end; procedure TMultiArchiveCopyInOperation.DeleteFiles(const BasePath: String; aFiles: TFiles); var I: Integer; aFile: TFile; begin for I:= aFiles.Count - 1 downto 0 do begin aFile:= aFiles[I]; if aFile.IsDirectory then mbRemoveDir(BasePath + aFile.FullPath) else mbDeleteFile(BasePath + aFile.FullPath); end; end; function TMultiArchiveCopyInOperation.Tar: Boolean; var TarWriter: TTarWriter = nil; begin Result:= False; FTarFileName:= RemoveFileExt(FMultiArchiveFileSource.ArchiveFileName); TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics ); try if TarWriter.ProcessTree(FFullFilesTree, FStatistics) then begin // Fill file list with tar archive file FRemoveFilesTree:= FFullFilesTree; FFullFilesTree:= TFiles.Create(ExtractFilePath(FTarFileName)); FFullFilesTree.Add(TFileSystemFileSource.CreateFileFromFile(FTarFileName)); Result:= True; end; finally FreeAndNil(TarWriter); end; end; procedure TMultiArchiveCopyInOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveCopyInOperation.OperationProgressHandler; var ArchiveSize: Int64; begin Self.CheckOperationState; with FStatistics do begin ArchiveSize := mbFileSize(FMultiArchiveFileSource.ArchiveFileName); if ArchiveSize > DoneBytes then DoneBytes := ArchiveSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyInOperation.OnQueryString(str: string); var pcPassword: PAnsiChar; begin ShowInputQuery(FMultiArchiveFileSource.MultiArcItem.FDescription, rsMsgPasswordEnter, True, FPassword); pcPassword:= PAnsiChar(UTF8ToConsole(FPassword + LineEnding)); FExProcess.Process.Input.Write(pcPassword^, Length(pcPassword)); end; procedure TMultiArchiveCopyInOperation.UpdateProgress(SourceName, TargetName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; CurrentFileDoneBytes:= IncSize; DoneBytes := DoneBytes + CurrentFileDoneBytes; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyInOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/umultiarchivecalcstatisticsoperation.pas0000644000175000001440000000755315104114162030652 0ustar alexxusersunit uMultiArchiveCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uMultiArchiveFileSource, uFile; type TMultiArchiveCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uMultiArc, DCStrUtils; constructor TMultiArchiveCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); FMultiArchiveFileSource:= aTargetFileSource as IMultiArchiveFileSource; end; destructor TMultiArchiveCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TMultiArchiveCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TMultiArchiveCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TMultiArchiveCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TMultiArchiveCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var I: Integer; AFileList: TList; CurrFileName: String; ArchiveItem: TArchiveItem; ModificationTime: TDateTime; begin AFileList:= FMultiArchiveFileSource.ArchiveFileList.LockList; try for I:= 0 to AFileList.Count - 1 do begin ArchiveItem := TArchiveItem(AFileList.Items[I]); CurrFileName := PathDelim + ArchiveItem.FileName; if not IsInPath(srcPath, CurrFileName, True, False) then Continue; if FMultiArchiveFileSource.FileIsDirectory(ArchiveItem) then Inc(FStatistics.Directories) else if FMultiArchiveFileSource.FileIsLink(ArchiveItem) then Inc(FStatistics.Links) else begin Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + ArchiveItem.UnpSize; try with ArchiveItem do ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); if ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := ModificationTime; if ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := ModificationTime; except on EConvertError do; end; end; end; finally FMultiArchiveFileSource.ArchiveFileList.UnlockList; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.pas0000644000175000001440000000503515104114162030175 0ustar alexxusersunit fMultiArchiveCopyOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, uMultiArchiveCopyInOperation, uMultiArchiveCopyOutOperation; type { TMultiArchiveCopyOperationOptionsUI } TMultiArchiveCopyOperationOptionsUI = class(TFileSourceOperationOptionsUI) cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; private procedure SetOperationOptions(CopyInOperation: TMultiArchiveCopyInOperation); overload; procedure SetOperationOptions(CopyOutOperation: TMultiArchiveCopyOutOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; implementation {$R *.lfm} uses DCStrUtils, uLng, uGlobs, uFileSourceOperationOptions; { TMultiArchiveCopyOperationOptionsUI } constructor TMultiArchiveCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; ParseLineToList(rsFileOpCopyMoveFileExistsOptions, cmbFileExists.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; end; procedure TMultiArchiveCopyOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TMultiArchiveCopyInOperation then SetOperationOptions(Operation as TMultiArchiveCopyInOperation) else if Operation is TMultiArchiveCopyOutOperation then SetOperationOptions(Operation as TMultiArchiveCopyOutOperation); end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(CopyInOperation: TMultiArchiveCopyInOperation); begin { with CopyInOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; } end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(CopyOutOperation: TMultiArchiveCopyOutOperation); begin with CopyOutOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; end. doublecmd-1.1.30/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lrj0000644000175000001440000000033515104114162030177 0ustar alexxusers{"version":1,"strings":[ {"hash":111687171,"name":"tmultiarchivecopyoperationoptionsui.lblfileexists.caption","sourcebytes":[87,104,101,110,32,102,105,108,101,32,101,120,105,115,116,115],"value":"When file exists"} ]} doublecmd-1.1.30/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lfm0000644000175000001440000000151715104114162030171 0ustar alexxusersobject MultiArchiveCopyOperationOptionsUI: TMultiArchiveCopyOperationOptionsUI Left = 535 Height = 158 Top = 391 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 LCLVersion = '1.8.4.0' object lblFileExists: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbFileExists AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 4 Width = 81 BorderSpacing.Around = 6 Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox AnchorSideLeft.Control = lblFileExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner Left = 95 Height = 23 Top = 0 Width = 109 BorderSpacing.Left = 8 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end end doublecmd-1.1.30/src/filesources/gio/0000755000175000001440000000000015104114162016455 5ustar alexxusersdoublecmd-1.1.30/src/filesources/gio/ugiosetfilepropertyoperation.pas0000644000175000001440000001437415104114162025240 0ustar alexxusersunit uGioSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFile, uGio2, uGLib2, uFileProperty, uWfxPluginFileSource; type { TGioSetFilePropertyOperation } TGioSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; private function SetFileTime(AFile: PGFile; ATime: Pgchar; AValue: TDateTime): Boolean; protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCBasicTypes, DCDateTimeUtils, uGioFileSourceUtil, uGObject2, uGio; constructor TGioSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; end; destructor TGioSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; end; procedure TGioSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles:= FFullFilesTree.Count; end else begin FillAndCount(TargetFiles, True, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TGioSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(CurrentFileIndex, aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; function TGioSetFilePropertyOperation.SetFileTime(AFile: PGFile; ATime: Pgchar; AValue: TDateTime): Boolean; begin Result:= g_file_set_attribute_uint64 (AFile, ATime, DateTimeToUnixFileTime(AValue), G_FILE_QUERY_INFO_NONE, nil, nil); end; function TGioSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; var AGFile: PGFile; AGNewFile: PGFile; NewAttributes: TFileAttrs; begin Result := sfprSuccess; AGFile:= GioNewFile(aFile.FullPath); case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin AGNewFile:= g_file_set_display_name(AGFile, Pgchar((aTemplateProperty as TFileNameProperty).Value), nil, nil); if (AGNewFile = nil) then Result := sfprError else begin g_object_unref(PGObject(AGNewFile)); end; end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin NewAttributes := (aTemplateProperty as TFileAttributesProperty).Value; if aTemplateProperty is TUnixFileAttributesProperty then begin if not g_file_set_attribute_uint32 (AGFile, FILE_ATTRIBUTE_UNIX_MODE, NewAttributes, G_FILE_QUERY_INFO_NONE, nil, nil) then Result := sfprError; end else raise Exception.Create('Unsupported file attributes type'); end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_MODIFIED, (aTemplateProperty as TFileModificationDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_CREATED, (aTemplateProperty as TFileCreationDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_ACCESS, (aTemplateProperty as TFileLastAccessDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; else raise Exception.Create('Trying to set unsupported property'); end; g_object_unref(PGObject(AGFile)); end; end. doublecmd-1.1.30/src/filesources/gio/ugiomoveoperation.pas0000644000175000001440000000512515104114162022740 0ustar alexxusersunit uGioMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceMoveOperation, uFileSource, uFile, uGioFileSourceUtil; type { TGioMoveOperation } TGioMoveOperation = class(TFileSourceMoveOperation) private FOperationHelper: TGioOperationHelper; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); virtual reintroduce; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationOptions, uGio2; constructor TGioMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TGioMoveOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TGioMoveOperation.Initialize; var TreeBuilder: TGioTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TGioTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := fsooslDontFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; FOperationHelper := TGioOperationHelper.Create( FileSource as IFileSource, Self, FStatistics, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, g_file_move, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.Initialize; end; procedure TGioMoveOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TGioMoveOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; end. doublecmd-1.1.30/src/filesources/gio/ugiolistoperation.pas0000644000175000001440000000511115104114162022740 0ustar alexxusersunit uGioListOperation; {$macro on} {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uGioFileSource, uFileSource, uGLib2, uGio2; type { TGioListOperation } TGioListOperation = class(TFileSourceListOperation) private FGioFileSource: IGioFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, Dialogs, uFile, DCDateTimeUtils, uGioFileSourceUtil, uGObject2, uGio; {$DEFINE G_IO_ERROR:= g_io_error_quark()} constructor TGioListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FGioFileSource := aFileSource as IGioFileSource; inherited Create(aFileSource, aPath); end; procedure TGioListOperation.MainExecute; var AFile: TFile; AFolder: PGFile; AInfo: PGFileInfo; AError: PGError = nil; AFileEnum: PGFileEnumerator; AFileSource: TGioFileSource; begin FFiles.Clear; with FGioFileSource do begin AFolder:= GioNewFile(Path); try while True do begin AFileEnum := g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); if Assigned(AError) then begin // Mount the target if g_error_matches(AError, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED) then begin FreeAndNil(AError); if FGioFileSource.MountPath(AFolder, AError) then Continue else begin ShowError(AError); Exit; end; end else if g_error_matches(AError, G_IO_ERROR, G_IO_ERROR_NOT_FOUND) then begin FreeAndNil(AError); Exit; end else begin ShowError(AError); Exit; end; end; Break; end; // List files try AFileSource:= TGioFileSource(GetClass); AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); while Assigned(AInfo) do begin CheckOperationState; AFile:= AFileSource.CreateFile(Path, AFolder, AInfo); g_object_unref(AInfo); FFiles.Add(AFile); AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); end; if Assigned(AError) then ShowError(AError); finally g_object_unref(AFileEnum); end; finally g_object_unref(PGObject(AFolder)); end; end; // FGioFileSource end; end. doublecmd-1.1.30/src/filesources/gio/ugiofilesourceutil.pas0000644000175000001440000007302415104114162023112 0ustar alexxusersunit uGioFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, uFile, uFileSource, uFileSourceOperation, uFileSourceCopyOperation, uFileSystemUtil, uFileSourceOperationOptions, uFileSourceTreeBuilder, uGioFileSource, uGLib2, uGio2, uLog, uGlobs, uFileSourceOperationUI; const CONST_DEFAULT_QUERY_INFO_ATTRIBUTES = FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_NAME + ',' + FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME + ',' + FILE_ATTRIBUTE_STANDARD_SIZE + ',' + FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET + ',' + FILE_ATTRIBUTE_TIME_MODIFIED + ',' + FILE_ATTRIBUTE_TIME_MODIFIED_USEC + ',' + FILE_ATTRIBUTE_TIME_ACCESS + ',' + FILE_ATTRIBUTE_TIME_CREATED + ',' + FILE_ATTRIBUTE_UNIX_MODE + ',' + FILE_ATTRIBUTE_UNIX_UID + ',' + FILE_ATTRIBUTE_UNIX_GID + ',' + FILE_ATTRIBUTE_STANDARD_TARGET_URI; type TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; TCopyMoveFileFunction = function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; { TGioTreeBuilder } TGioTreeBuilder = class(TFileSourceTreeBuilder) protected procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); override; procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); override; end; { TGioOperationHelper } TGioOperationHelper = class private FGioFileSource: IGioFileSource; FOperation: TFileSourceOperation; FCopyMoveFile: TCopyMoveFileFunction; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FLogCaption: String; FRenamingFiles, FRenamingRootDir: Boolean; FCancel: PGCancellable; FRootDir: TFile; FOldDoneBytes: Int64; FSkipAnyError: Boolean; FStatistics: TFileSourceCopyOperationStatistics; FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; FCurrentFile: TFile; FCurrentTargetFilePath: String; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; ShowCompareFilesUI: TShowCompareFilesUIFunction; procedure ShowError(const Message: String; AError: PGError); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CopyProperties(SourceFile: TFile; TargetFile: PGFile); function ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; function ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String; Flags: TGFileCopyFlags): Boolean; function TargetExists(aNode: TFileTreeNode; var aTargetFile: PGFile; var AbsoluteTargetFileName: String) : TFileSystemOperationTargetExistsResult; function DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean): TFileSourceOperationOptionDirectoryExists; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function FileExists(aFile: TFile; aTargetInfo: PGFileInfo; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure CountStatistics(aNode: TFileTreeNode); public constructor Create(FileSource: IFileSource; Operation: TFileSourceOperation; Statistics: TFileSourceCopyOperationStatistics; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; CopyMoveFileFunction: TCopyMoveFileFunction; TargetPath: String ); destructor Destroy; override; procedure Initialize; procedure ProcessTree(aFileTree: TFileTree); property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; property RenameMask: String read FRenameMask write FRenameMask; end; procedure ShowError(AError: PGError); procedure FreeAndNil(var AError: PGError); overload; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); implementation uses Forms, Math, DateUtils, DCBasicTypes, DCDateTimeUtils, uDCUtils, uFileProperty, uShowMsg, uLng, uGObject2, uGio, DCFileAttributes; procedure ShowError(AError: PGError); begin msgError(nil, AError^.message); g_error_free(AError); end; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); var I: Integer; aFile: TFile; procedure FillAndCountRec(const srcPath: String); var AFolder: PGFile; AInfo: PGFileInfo; AFileName: Pgchar; AError: PGError = nil; AFileEnum: PGFileEnumerator; begin AFolder:= GioNewFile(srcPath); try AFileEnum:= g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); if Assigned(AFileEnum) then begin AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); while Assigned(AInfo) do begin AFileName:= g_file_info_get_name(AInfo); if (aFileName <> '.') and (aFileName <> '..') then begin aFile:= TGioFileSource.CreateFile(srcPath, AFolder, AInfo); NewFiles.Add(aFile); if aFile.IsLink then begin end else if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + aFileName + PathDelim); end else begin Inc(FilesSize, aFile.Size); Inc(FilesCount); end; end; g_object_unref(AInfo); AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); end; g_object_unref(AFileEnum); end; if Assigned(AError) then ShowError(AError); finally g_object_unref(PGObject(AFolder)); end; end; begin FilesCount:= 0; FilesSize:= 0; NewFiles := TFiles.Create(Files.Path); for I := 0 to Files.Count - 1 do begin aFile := Files[I]; NewFiles.Add(aFile.Clone); if aFile.IsDirectory and (not aFile.IsLinkToDirectory) then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.FullPath + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); // in first level we know file size -> use it end; end; end; function FileExistsMessage(SourceFile: TFile; TargetInfo: PGFileInfo; const TargetName: String): String; begin Result:= rsMsgFileExistsOverwrite + LineEnding + TargetName + LineEnding + Format(rsMsgFileExistsFileInfo, [IntToStrTS(g_file_info_get_size(TargetInfo)), DateTimeToStr(UnixFileTimeToDateTime(g_file_info_get_attribute_uint64(TargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)))]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + SourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [IntToStrTS(SourceFile.Size), DateTimeToStr(SourceFile.ModificationTime)]); end; procedure FreeAndNil(var AError: PGError); begin g_error_free(AError); AError:= nil; end; procedure ProgressCallback(current_num_bytes: gint64; total_num_bytes: gint64; user_data: gpointer); cdecl; var Helper: TGioOperationHelper absolute user_data; begin with Helper do begin if FOperation.State = fsosStopping then // Cancel operation begin g_cancellable_cancel(FCancel); Exit; end; with FStatistics do begin CurrentFileDoneBytes:= current_num_bytes; CurrentFileTotalBytes:= total_num_bytes; DoneBytes:= FOldDoneBytes + current_num_bytes; end; UpdateStatistics(FStatistics); CheckOperationState; end; end; { TGioTreeBuilder } procedure TGioTreeBuilder.AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); begin // Add as normal file/directory aFile.Attributes:= aFile.Attributes and (not S_IFLNK); if aFile.IsLinkToDirectory then begin aFile.Attributes:= aFile.Attributes or S_IFDIR; AddDirectory(aFile, CurrentNode); end else begin AddFile(aFile, CurrentNode); end; end; procedure TGioTreeBuilder.AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); var AFile: TFile; AFolder: PGFile; AInfo: PGFileInfo; AError: PGError = nil; AFileEnum: PGFileEnumerator; begin AFolder:= GioNewFile(srcPath); try AFileEnum := g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); // List files try AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); while Assigned(AInfo) do begin CheckOperationState; AFile:= TGioFileSource.CreateFile(srcPath, AFolder, AInfo); g_object_unref(AInfo); AddItem(aFile, CurrentNode); AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); end; if Assigned(AError) then ShowError(AError); finally g_object_unref(AFileEnum); end; finally g_object_unref(PGObject(AFolder)); end; end; { TGioOperationHelper } procedure TGioOperationHelper.ShowError(const Message: String; AError: PGError); begin try if not gSkipFileOpError then begin if AskQuestion(Message + LineEnding + AError^.message, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin AbortOperation; end; end; if log_errors in gLogOptions then logWrite(FOperation.Thread, Message, lmtError, gSkipFileOpError); finally g_error_free(AError); end; end; procedure TGioOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperation.Thread, sMessage, logMsgType); end; end; procedure TGioOperationHelper.CopyProperties(SourceFile: TFile; TargetFile: PGFile); var AFileTime: TFileTimeEx; begin AFileTime:= DateTimeToUnixFileTimeEx(SourceFile.ModificationTime); g_file_set_attribute_uint64(TargetFile, FILE_ATTRIBUTE_TIME_MODIFIED, guint64(AFileTime.sec), G_FILE_QUERY_INFO_NONE, nil, nil); g_file_set_attribute_uint32(TargetFile, FILE_ATTRIBUTE_TIME_MODIFIED_USEC, guint32(Round(Extended(AFileTime.nanosec) / 1000.0)), G_FILE_QUERY_INFO_NONE, nil, nil); end; function TGioOperationHelper.ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; var aFile: TFile; ProcessedOk: Boolean; TargetName: String; CurrentFileIndex: Integer; CurrentSubNode: TFileTreeNode; begin Result := True; for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do begin CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex]; aFile := CurrentSubNode.TheFile; if FRenamingRootDir and (aFile = FRootDir) then TargetName := CurrentTargetPath + FRenameMask else if FRenamingFiles then TargetName := CurrentTargetPath + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask) else TargetName := CurrentTargetPath + aFile.Name; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTo := TargetName; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); if aFile.IsDirectory then ProcessedOk := ProcessDirectory(CurrentSubNode, TargetName) else if aFile.IsLink then ProcessedOk := ProcessLink(CurrentSubNode, TargetName) else ProcessedOk := ProcessFile(CurrentSubNode, TargetName, G_FILE_COPY_NONE); if not ProcessedOk then Result := False; CheckOperationState; end; end; function TGioOperationHelper.ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var AError: PGError = nil; bRemoveDirectory: Boolean; NodeData: TFileTreeNodeData; SourceFile, TargetFile: PGFile; begin NodeData := aNode.Data as TFileTreeNodeData; SourceFile:= GioNewFile(aNode.TheFile.FullPath); TargetFile:= GioNewFile(AbsoluteTargetFileName); try // If some files will not be moved then source directory cannot be deleted. bRemoveDirectory := (FCopyMoveFile = g_file_move) and (NodeData.SubnodesHaveExclusions = False); case TargetExists(aNode, TargetFile, AbsoluteTargetFileName) of fsoterSkip: begin Result := False; CountStatistics(aNode); end; fsoterNotExists: begin // Try moving whole directory tree. It can be done only if we don't have // to process each subnode: if the files are not being renamed or excluded. if (FCopyMoveFile = g_file_move) and (not FRenamingFiles) and (NodeData.SubnodesHaveExclusions = False) and g_file_move(SourceFile, TargetFile, G_FILE_COPY_NOFOLLOW_SYMLINKS or G_FILE_COPY_NO_FALLBACK_FOR_MOVE, nil, nil, nil, nil) then begin // Success. CountStatistics(aNode); Result := True; bRemoveDirectory := False; end else begin // Create target directory. if g_file_make_directory_with_parents(TargetFile, nil, @AError) then begin // Copy/Move all files inside. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); // Copy attributes after copy/move directory contents, because this operation can change date/time CopyProperties(aNode.TheFile, TargetFile); end else begin // Error - all files inside not copied/moved. ShowError(rsMsgLogError + Format(rsMsgErrForceDir, [AbsoluteTargetFileName]), AError); Result := False; CountStatistics(aNode); end; end; end; fsoterAddToTarget: begin // Don't create existing directory, but copy files into it. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end; else raise Exception.Create('Invalid TargetExists result'); end; if bRemoveDirectory and Result then begin g_file_delete(SourceFile, nil, nil); end; finally g_object_unref(PGObject(SourceFile)); g_object_unref(PGObject(TargetFile)); end; end; function TGioOperationHelper.ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; begin Result:= ProcessFile(aNode, AbsoluteTargetFileName, G_FILE_COPY_NOFOLLOW_SYMLINKS); end; function TGioOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String; Flags: TGFileCopyFlags): Boolean; var AError: PGError = nil; SourceFile, TargetFile: PGFile; begin FOldDoneBytes:= FStatistics.DoneBytes; FCancel:= g_cancellable_new(); SourceFile:= GioNewFile(aNode.TheFile.FullPath); TargetFile:= GioNewFile(AbsoluteTargetFileName); try repeat Result:= FCopyMoveFile(SourceFile, TargetFile, Flags, FCancel, @ProgressCallback, Self, @AError); if Assigned(AError) then try if AError^.code = G_IO_ERROR_CANCELLED then AbortOperation else if AError^.code = G_IO_ERROR_EXISTS then begin case TargetExists(aNode, TargetFile, AbsoluteTargetFileName) of fsoterDeleted: begin FreeAndNil(AError); Flags += G_FILE_COPY_OVERWRITE; end; fsoterSkip: begin Result:= True; Break; end; fsoterNotExists: FreeAndNil(AError); end; end else begin if FSkipAnyError then Break; case AskQuestion(AError^.message, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourCancel], fsourRetry, fsourCancel) of fsourSkip: Break; fsourSkipAll: begin FSkipAnyError:= True; Break; end; fsourRetry: FreeAndNil(AError); fsourCancel: AbortOperation; end; end; except on EFileSourceOperationAborting do begin FreeAndNil(AError); raise; end; end; until Result; if Result then begin LogMessage(Format(rsMsgLogSuccess + FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]) + LineEnding + AError^.message, [log_vfs_op], lmtError); FreeAndNil(AError); end; finally g_object_unref(FCancel); g_object_unref(PGObject(SourceFile)); g_object_unref(PGObject(TargetFile)); end; with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := FOldDoneBytes + aNode.TheFile.Size; UpdateStatistics(FStatistics); end; end; function TGioOperationHelper.TargetExists(aNode: TFileTreeNode; var aTargetFile: PGFile; var AbsoluteTargetFileName: String ): TFileSystemOperationTargetExistsResult; var AInfo, ASymlinkInfo: PGFileInfo; AFileType: TGFileType; SourceFile: TFile; function DoDirectoryExists(AllowCopyInto: Boolean): TFileSystemOperationTargetExistsResult; begin case DirExists(SourceFile, AbsoluteTargetFileName, AllowCopyInto) of fsoodeSkip: Exit(fsoterSkip); fsoodeCopyInto: begin Exit(fsoterAddToTarget); end; else raise Exception.Create('Invalid dir exists option'); end; end; function DoFileExists(): TFileSystemOperationTargetExistsResult; begin case FileExists(SourceFile, AInfo, AbsoluteTargetFileName) of fsoofeSkip: Exit(fsoterSkip); fsoofeAutoRenameSource: begin g_object_unref(PGObject(aTargetFile)); aTargetFile:= GioNewFile(AbsoluteTargetFileName); Exit(fsoterRenamed); end; fsoofeOverwrite: Exit(fsoterDeleted); else raise Exception.Create('Invalid file exists option'); end; end; begin repeat AInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_SIZE +','+ FILE_ATTRIBUTE_TIME_MODIFIED + ',' + FILE_ATTRIBUTE_TIME_MODIFIED_USEC, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil); if Assigned(AInfo) then begin SourceFile:= aNode.TheFile; AFileType:= g_file_info_get_file_type(AInfo); // Target exists - ask user what to do. if AFileType = G_FILE_TYPE_DIRECTORY then begin Result := DoDirectoryExists(SourceFile.IsDirectory) end else if AFileType = G_FILE_TYPE_SYMBOLIC_LINK then begin // Check if target of the link exists. ASymlinkInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, nil, nil); if Assigned(ASymlinkInfo) then begin AFileType:= g_file_info_get_file_type(ASymlinkInfo); if AFileType = G_FILE_TYPE_DIRECTORY then Result := DoDirectoryExists(SourceFile.IsDirectory) else begin Result := DoFileExists(); end; g_object_unref(ASymlinkInfo); end else // Target of link doesn't exist. Treat link as file. Result := DoFileExists(); end else begin // Existing target is a file. Result := DoFileExists(); end; g_object_unref(AInfo); end else Result := fsoterNotExists; until Result <> fsoterRenamed; end; function TGioOperationHelper.DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean ): TFileSourceOperationOptionDirectoryExists; var PossibleResponses: array of TFileSourceOperationUIResponse = nil; DefaultOkResponse: TFileSourceOperationUIResponse; procedure AddResponse(Response: TFileSourceOperationUIResponse); begin SetLength(PossibleResponses, Length(PossibleResponses) + 1); PossibleResponses[Length(PossibleResponses) - 1] := Response; end; begin case FDirExistsOption of fsoodeNone: begin if AllowCopyInto then begin AddResponse(fsourCopyInto); AddResponse(fsourCopyIntoAll); end; AddResponse(fsourSkip); AddResponse(fsourSkipAll); AddResponse(fsourCancel); if AllowCopyInto then DefaultOkResponse := fsourCopyInto else DefaultOkResponse := fsourSkip; case AskQuestion(Format(rsMsgFolderExistsRwrt, [AbsoluteTargetFileName]), '', PossibleResponses, DefaultOkResponse, fsourSkip) of fsourCopyInto: Result := fsoodeCopyInto; fsourCopyIntoAll: begin FDirExistsOption := fsoodeCopyInto; Result := fsoodeCopyInto; end; fsourSkip: Result := fsoodeSkip; fsourSkipAll: begin FDirExistsOption := fsoodeSkip; Result := fsoodeSkip; end; fsourNone, fsourCancel: AbortOperation; end; end; else Result := FDirExistsOption; end; end; procedure TGioOperationHelper.QuestionActionHandler( Action: TFileSourceOperationUIAction); begin if Action = fsouaCompare then ShowCompareFilesUI(FCurrentFile, FCurrentTargetFilePath); end; function TGioOperationHelper.FileExists(aFile: TFile; aTargetInfo: PGFileInfo; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const Responses: array[0..9] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourOverwriteOlder,fsourOverwriteSmaller, fsourCancel, fsouaCompare, fsourOverwriteLarger); var Answer: Boolean; Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; var ATime: TDateTime; AFileTime: TFileTimeEx; begin ATime:= aFile.ModificationTime; AFileTime.sec:= Int64(g_file_info_get_attribute_uint64(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)); AFileTime.nanosec:= Int64(g_file_info_get_attribute_uint32(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED_USEC)) * 1000; // Some file systems does not support milliseconds, compare only seconds in this case if AFileTime.nanosec = 0 then begin ATime:= RecodeMilliSecond(ATime, 0); end else if (MilliSecondOfTheSecond(ATime) = 0) then begin AFileTime.nanosec:= 0; end; if CompareDateTime(ATime, UnixFileTimeToDateTimeEx(AFileTime)) = GreaterThanValue then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > g_file_info_get_size(aTargetInfo) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < g_file_info_get_size(aTargetInfo) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: repeat Answer := True; Message:= FileExistsMessage(aFile, aTargetInfo, AbsoluteTargetFileName); FCurrentFile := aFile; FCurrentTargetFilePath := AbsoluteTargetFileName; case AskQuestion(Message, '', Responses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(FOperation.Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: AbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else Result := FFileExistsOption; end; end; procedure TGioOperationHelper.CountStatistics(aNode: TFileTreeNode); procedure CountNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do CountNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then DoneFiles := DoneFiles + 1 else // Count target of link. CountNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aNode.TheFile.Size; end; end; end; begin CountNodeStatistics(aNode); UpdateStatistics(FStatistics); end; constructor TGioOperationHelper.Create(FileSource: IFileSource; Operation: TFileSourceOperation; Statistics: TFileSourceCopyOperationStatistics; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; CopyMoveFileFunction: TCopyMoveFileFunction; TargetPath: String); begin FGioFileSource:= FileSource as IGioFileSource; FOperation:= Operation; FStatistics:= Statistics; AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; ShowCompareFilesUI := ShowCompareFilesUIFunction; FCopyMoveFile := CopyMoveFileFunction; FFileExistsOption := fsoofeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FRenamingFiles := False; FRenamingRootDir := False; inherited Create; end; destructor TGioOperationHelper.Destroy; begin inherited Destroy; end; procedure TGioOperationHelper.Initialize; begin if FCopyMoveFile = g_file_copy then FLogCaption := rsMsgLogCopy else begin FLogCaption := rsMsgLogMove; end; SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); end; procedure TGioOperationHelper.ProcessTree(aFileTree: TFileTree); var aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFileTree.SubNodesCount = 1) and FRenamingFiles then begin aFile := aFileTree.SubNodes[0].TheFile; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; FRootDir := aFile; end; end; ProcessNode(aFileTree, FRootTargetPath); end; end. doublecmd-1.1.30/src/filesources/gio/ugiofilesource.pas0000644000175000001440000004645015104114162022217 0ustar alexxusersunit uGioFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, URIParser, SyncObjs, uFileSourceProperty, uFileSourceOperationTypes, uRealFileSource, uFileProperty, uFileSource, DCStrUtils, uFileSourceOperation, uFile, uGLib2, uGObject2, uGio2; type IGioFileSource = interface(IRealFileSource) ['{6DC5BCCA-BDD5-43DA-A0D6-7BAA26D93B92}'] function MountPath(AFile: PGFile; out AError: PGError): Boolean; end; { TGioFileSource } TGioFileSource = class(TRealFileSource, IGioFileSource) private MountTry: Integer; MountLoop: TSimpleEvent; MountError: PGError; protected function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public function MountPath(AFile: PGFile; out AError: PGError): Boolean; public constructor Create(const URI: TURI); override; class function IsSupportedPath(const Path: String): Boolean; override; function GetPathType(sPath : String): TPathType; override; function CreateDirectory(const Path: String): Boolean; override; function FileSystemEntryExists(const Path: String): Boolean; override; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; virtual; procedure Reload(const PathsToReload: TPathsArray); override; function GetParentDir(sPath : String): String; override; function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; function GetOperationsTypes: TFileSourceOperationTypes; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; end; implementation uses DCFileAttributes, DCDateTimeUtils, uGioListOperation, uGioCopyOperation, uGioDeleteOperation, uGioExecuteOperation, uGioCreateDirectoryOperation, uGioMoveOperation, uGioSetFilePropertyOperation, uDebug, fGioAuthDlg, DCBasicTypes, uShowMsg, uGioCalcStatisticsOperation, uGio; { TGioFileSource } function TGioFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result:= [fsoList, fsoCopy, fsoCopyIn, fsoCopyOut, fsoDelete, fsoExecute, fsoCreateDirectory, fsoMove, fsoCalcStatistics, fsoSetFileProperty]; end; class function TGioFileSource.CreateFile(const APath: String): TFile; begin Result:=inherited CreateFile(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TGioFileSource.CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; var Addr: TURI; AFile: PGFile; ATarget: Pgchar; AFileType: TGFileType; AFileTime: TFileTimeEx; ASymlinkInfo: PGFileInfo; begin Result:= CreateFile(APath); Result.Name:= g_file_info_get_name(AFileInfo); Result.Attributes:= g_file_info_get_attribute_uint32(AFileInfo, FILE_ATTRIBUTE_UNIX_MODE); AFileTime.sec:= Int64(g_file_info_get_attribute_uint64(AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED)); AFileTime.nanosec:= Int64(g_file_info_get_attribute_uint32(AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED_USEC)) * 1000; Result.ModificationTime:= UnixFileTimeToDateTimeEx(AFileTime); if g_file_info_has_attribute(AFileInfo, FILE_ATTRIBUTE_STANDARD_SIZE) then Result.Size:= g_file_info_get_size(AFileInfo) else begin Result.SizeProperty.IsValid:= False; end; // Get a file's type (whether it is a regular file, symlink, etc). AFileType:= g_file_info_get_file_type (AFileInfo); if AFileType = G_FILE_TYPE_DIRECTORY then begin Result.Size:= 0; Result.Attributes:= Result.Attributes or S_IFDIR; end else if AFileType = G_FILE_TYPE_SYMBOLIC_LINK then begin ATarget:= g_file_info_get_symlink_target(AFileInfo); Result.LinkProperty.IsValid := Assigned(ATarget); if Assigned(ATarget) then begin Result.LinkProperty.LinkTo := ATarget; AFile:= g_file_get_child(AFolder, ATarget); Result.LinkProperty.IsValid:= Assigned(AFile); if Result.LinkProperty.IsValid then begin ASymlinkInfo := g_file_query_info (AFile, FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, nil, nil); Result.LinkProperty.IsValid := Assigned(ASymlinkInfo); if (Result.LinkProperty.IsValid) then begin AFileType:= g_file_info_get_file_type(ASymlinkInfo); Result.LinkProperty.IsLinkToDirectory := (AFileType = G_FILE_TYPE_DIRECTORY); if Result.LinkProperty.IsLinkToDirectory then Result.Size := 0; g_object_unref(ASymlinkInfo); end; g_object_unref(PGObject(AFile)); end; end; end else if AFileType in [G_FILE_TYPE_SHORTCUT, G_FILE_TYPE_MOUNTABLE] then begin Result.Attributes:= Result.Attributes or S_IFLNK or S_IFDIR; Result.ModificationTimeProperty.IsValid:= g_file_info_has_attribute(AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED); ATarget:= g_file_info_get_attribute_string(AFileInfo, FILE_ATTRIBUTE_STANDARD_TARGET_URI); Result.LinkProperty.IsValid := Length(ATarget) > 0; Result.LinkProperty.LinkTo := ATarget; // Remove a standard port from address Addr:= ParseURI(Result.LinkProperty.LinkTo); if Addr.Port > 0 then begin case Addr.Port of 22: if (Addr.Protocol = 'sftp') then Addr.Port:= 0; 445: if (Addr.Protocol = 'smb') then Addr.Port:= 0; 2049: if (Addr.Protocol = 'nfs') then Addr.Port:= 0; end; if Addr.Port = 0 then Result.LinkProperty.LinkTo:= EncodeURI(Addr); end; end; end; procedure TGioFileSource.Reload(const PathsToReload: TPathsArray); var Index: Integer; PathList: TPathsArray; begin SetLength(PathList, Length(PathsToReload)); for Index:= Low(PathsToReload) to High(PathsToReload) do begin PathList[Index]:= StringReplace(PathsToReload[Index], FCurrentAddress, '', []); end; inherited Reload(PathList); end; function TGioFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result:= True; end; procedure ask_password_cb (op: PGMountOperation; const message: Pgchar; const default_user: Pgchar; const default_domain: Pgchar; flags: TGAskPasswordFlags; user_data: gpointer); cdecl; var UserName, Password, Domain: String; password_save: TGPasswordSave; mount_handled: gboolean = FALSE; FileSource: TGioFileSource absolute user_data; begin Inc(FileSource.MountTry); //* First pass, look if we have a password to supply */ if (FileSource.MountTry = 1) then begin if ((flags and G_ASK_PASSWORD_NEED_USERNAME <> 0) and (Length(FileSource.FURI.Username) > 0)) then begin g_printf ('(WW) ask_password_cb: mount_try = %d, trying login with saved username...\n', [FileSource.MountTry]); g_mount_operation_set_username (op, Pgchar(FileSource.FURI.Username)); mount_handled := TRUE; end; if ((flags and G_ASK_PASSWORD_NEED_PASSWORD <> 0) and (Length(FileSource.FURI.Password) > 0)) then begin g_printf ('(WW) ask_password_cb: mount_try = %d, trying login with saved password...\n', [FileSource.MountTry]); g_mount_operation_set_password (op, Pgchar(FileSource.FURI.Password)); mount_handled := TRUE; end; if (mount_handled) then begin g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); Exit; end; end; //* Handle abort message from certain backends properly */ //* - e.g. SMB backends use this to mask multiple auth callbacks from smbclient */ if ((default_user <> nil) and (strcomp(default_user, 'ABORT') = 0)) then begin g_print ('(WW) default_user == "ABORT", aborting\n', []); g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); Exit; end; password_save := G_PASSWORD_SAVE_NEVER; Username:= default_user; Domain:= default_domain; if not ShowAuthDlg(message, flags, UserName, Domain, Password) then g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED) else begin if (flags and G_ASK_PASSWORD_NEED_USERNAME <> 0) then g_mount_operation_set_username (op, Pgchar(Username)); if (flags and G_ASK_PASSWORD_NEED_DOMAIN <> 0) then g_mount_operation_set_domain (op, Pgchar(Domain)); if (flags and G_ASK_PASSWORD_NEED_PASSWORD <> 0) then g_mount_operation_set_password (op, Pgchar(password)); if (flags and G_ASK_PASSWORD_ANONYMOUS_SUPPORTED <> 0) then g_mount_operation_set_anonymous (op, True); end; if (flags and G_ASK_PASSWORD_SAVING_SUPPORTED <> 0) then g_mount_operation_set_password_save (op, password_save); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); end; procedure ask_question_cb(op: PGMountOperation; const message: Pgchar; const choices: PPgchar; user_data: gpointer); cdecl; var len: Integer = 0; choice: Integer = -1; buttons: TDynamicStringArray; begin g_print('(WW) ask_question_cb: message = "%s"\n', [message]); while (choices[len] <> nil) do begin AddString(buttons, StrPas(choices[len])); g_print('(WW) ask_question_cb: choice[%d] = "%s"\n', [len, choices[len]]); Inc(len); end; DCDebug(' (II) Spawning callback_ask_question...'); // At this moment, only SFTP uses ask_question and the second button is cancellation choice:= MsgChoiceBox(nil, message, buttons, -1, -1); g_print(' (II) Received choice = %d\n', [choice]); if (choice < 0) then g_mount_operation_reply(op, G_MOUNT_OPERATION_ABORTED) else begin g_mount_operation_set_choice(op, choice); g_mount_operation_reply(op, G_MOUNT_OPERATION_HANDLED); end; end; procedure mount_done_cb (object_: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; var Result: gboolean; FileSource: TGioFileSource absolute user_data; begin Result := g_file_mount_enclosing_volume_finish (PGFile(object_), res, @FileSource.MountError); if Result then begin DCDebug('(II) Mount successful.'); FileSource.MountError:= nil; end else begin g_print ('(EE) Error mounting location: %s\n', [FileSource.MountError^.message]); end; FileSource.MountLoop.SetEvent; end; function TGioFileSource.MountPath(AFile: PGFile; out AError: PGError): Boolean; var Operation: PGMountOperation; begin Operation:= g_mount_operation_new(); g_signal_connect_data(Operation, 'ask-password', TGCallback(@ask_password_cb), Self, nil, 0); g_signal_connect_data(Operation, 'ask-question', TGCallback(@ask_question_cb), Self, nil, 0); MountTry:= 0; MountError:= nil; MountLoop:= TSimpleEvent.Create; g_file_mount_enclosing_volume (AFile, G_MOUNT_MOUNT_NONE, Operation, nil, @mount_done_cb, Self); repeat if g_main_context_pending(g_main_context_default) then g_main_context_iteration(g_main_context_default, False); until MountLoop.WaitFor(1) <> wrTimeout; MountLoop.Free; g_object_unref (Operation); Result:= MountError = nil; AError:= MountError; end; constructor TGioFileSource.Create(const URI: TURI); begin inherited Create(URI); FOperationsClasses[fsoMove] := TGioMoveOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TGioCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TGioCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TGioCopyOutOperation.GetOperationClass; end; class function TGioFileSource.IsSupportedPath(const Path: String): Boolean; var GVfs: PGVfs; Schemes: PPgchar; begin GVfs := g_vfs_get_default (); Schemes := g_vfs_get_supported_uri_schemes (GVfs); while Schemes^ <> nil do begin Result := (Pos(Schemes^ + '://', Path) = 1); if Result then Exit; Inc(Schemes); end; end; function TGioFileSource.GetPathType(sPath: String): TPathType; begin if (Pos('://', sPath) > 0) then Result:= ptAbsolute else Result:= inherited GetPathType(sPath); end; function TGioFileSource.CreateDirectory(const Path: String): Boolean; var AGFile: PGFile; TargetPath: String; begin if StrBegins(Path, FCurrentAddress) then TargetPath := Path else begin TargetPath := FCurrentAddress + Path; end; AGFile:= GioNewFile(TargetPath); Result:= g_file_make_directory_with_parents(AGFile, nil, nil); g_object_unref(PGObject(AGFile)); end; function TGioFileSource.FileSystemEntryExists(const Path: String): Boolean; var AGFile: PGFile; TargetPath: String; begin if StrBegins(Path, FCurrentAddress) then TargetPath := Path else begin TargetPath := FCurrentAddress + Path; end; AGFile := GioNewFile(TargetPath); Result := g_file_query_exists (AGFile, nil); g_object_unref(PGObject(AGFile)); end; function TGioFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize: Int64): Boolean; var AFile: PGFile; AInfo: PGFileInfo; begin AFile := GioNewFile(Path); AInfo := g_file_query_filesystem_info (AFile, FILE_ATTRIBUTE_FILESYSTEM_FREE + ',' + FILE_ATTRIBUTE_FILESYSTEM_SIZE, nil, nil); Result := Assigned(AInfo); if Result then begin FreeSize := g_file_info_get_attribute_uint64(AInfo, FILE_ATTRIBUTE_FILESYSTEM_FREE); TotalSize := g_file_info_get_attribute_uint64(AInfo, FILE_ATTRIBUTE_FILESYSTEM_SIZE); g_object_unref(AInfo); end; g_object_unref(PGObject(AFile)); end; function TGioFileSource.GetParentDir(sPath: String): String; begin Result:=inherited GetParentDir(sPath); end; function TGioFileSource.IsPathAtRoot(Path: String): Boolean; begin Result:=inherited IsPathAtRoot(Path); end; function TGioFileSource.GetRootDir(sPath: String): String; begin Result:=inherited GetRootDir(sPath); end; function TGioFileSource.GetRootDir: String; begin Result:=inherited GetRootDir; end; function TGioFileSource.GetProperties: TFileSourceProperties; begin Result:=inherited GetProperties; end; function TGioFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TGioListOperation.Create(TargetFileSource, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result:= TGioCopyOperation.Create(SourceFileSource, SourceFileSource, SourceFiles, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; if not StrBegins(TargetPath, FCurrentAddress) then TargetPath:= FCurrentAddress + TargetPath; Result:= TGioCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TGioFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; if not StrBegins(SourceFiles.Path, FCurrentAddress) then SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result := TGioCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TGioFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result := TGioMoveOperation.Create(TargetFileSource, SourceFiles, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; FilesToDelete.Path:= FCurrentAddress + FilesToDelete.Path; Result := TGioDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TGioFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TGioCreateDirectoryOperation.Create(TargetFileSource, FCurrentAddress + BasePath, DirectoryPath); end; function TGioFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TGioExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TGioFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TGioCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TGioFileSource.CreateSetFilePropertyOperation( var theTargetFiles: TFiles; var theNewProperties: TFileProperties ): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; if not StrBegins(theTargetFiles.Path, FCurrentAddress) then theTargetFiles.Path:= FCurrentAddress + theTargetFiles.Path; Result := TGioSetFilePropertyOperation.Create(TargetFileSource, theTargetFiles, theNewProperties); end; end. doublecmd-1.1.30/src/filesources/gio/ugioexecuteoperation.pas0000644000175000001440000000222015104114162023425 0ustar alexxusersunit uGioExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileSourceExecuteOperation; type { TGioExecuteOperation } TGioExecuteOperation = class(TFileSourceExecuteOperation) public procedure MainExecute; override; end; implementation uses DCFileAttributes, uGio, uGio2, uGObject2, uGLib2, fFileProperties, uFile; procedure TGioExecuteOperation.MainExecute; var AFile: PGFile; AFiles: TFiles; AInfo: PGFileInfo; AFileType: TGFileType; begin if Verb = 'properties' then begin AFiles:= TFiles.Create(CurrentPath); try AFiles.Add(ExecutableFile.Clone); ShowFileProperties(FileSource as IFileSource, AFiles); finally AFiles.Free; end; Exit; end; if (ExecutableFile.Attributes and S_IFMT) = (S_IFDIR or S_IFLNK) then begin ResultString:= ExecutableFile.LinkProperty.LinkTo; if Length(ResultString) > 0 then begin FExecuteOperationResult:= fseorSymLink; Exit(); end; end; if GioOpen(AbsolutePath) then FExecuteOperationResult:= fseorSuccess else begin FExecuteOperationResult:= fseorError; end; end; end. doublecmd-1.1.30/src/filesources/gio/ugiodeleteoperation.pas0000644000175000001440000001333615104114162023237 0ustar alexxusersunit uGioDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uGioFileSource, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog; type TGioDeleteOperation = class(TFileSourceDeleteOperation) protected FWfxPluginFileSource: IGioFileSource; FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected function ProcessFile(aFile: TFile): Boolean; function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCOSUtils, uLng, uGio2, uGObject2, uGio, uGioFileSourceUtil; constructor TGioDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := False; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; FWfxPluginFileSource:= aTargetFileSource as IGioFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TGioDeleteOperation.Destroy; begin inherited Destroy; FFullFilesTreeToDelete.Free; end; procedure TGioDeleteOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(FilesToDelete, True, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TGioDeleteOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; function TGioDeleteOperation.ProcessFile(aFile: TFile): Boolean; var AGFile: PGFile; FileName: String; bRetry: Boolean; sMessage, sQuestion: String; logOptions: TLogOptions; begin Result := False; FileName := aFile.Path + aFile.Name; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [FileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll], fsourYes, fsourSkip) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; end; fsoogNo: Exit; end; end; repeat bRetry := False; //if FileIsReadOnly(aFile.Attributes) then // mbFileSetReadOnly(FileName, False); AGFile:= GioNewFile(FileName); Result:= g_file_delete(AGFile, nil, nil); g_object_unref(PGObject(AGFile)); if Result then begin // success if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [FileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_vfs_op], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end else begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end; if gSkipFileOpError or (FSkipErrors = True) then LogMessage(sMessage, logOptions, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; function TGioDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if gSkipFileOpError then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TGioDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/gio/ugiocreatedirectoryoperation.pas0000644000175000001440000000266115104114162025164 0ustar alexxusersunit uGioCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource; type TGioCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) public procedure MainExecute; override; end; implementation uses uFileSourceOperationUI, uLog, uLng, uGlobs, uGio2, uGio, uGLib2, uGObject2; procedure TGioCreateDirectoryOperation.MainExecute; var AGFile: PGFile; AResult: Boolean; AError: PGError = nil; begin AGFile:= GioNewFile(AbsolutePath); AResult:= g_file_make_directory_with_parents(AGFile, nil, @AError); g_object_unref(PGObject(AGFile)); if Assigned(AError) then begin AResult:= g_error_matches (AError, g_io_error_quark(), G_IO_ERROR_EXISTS); if not AResult then begin if g_error_matches (AError, g_io_error_quark(), G_IO_ERROR_NOT_SUPPORTED) then AskQuestion(rsMsgErrNotSupported, '', [fsourOk], fsourOk, fsourOk) else begin // write log error if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); end; end; g_error_free(AError); end; if AResult then begin // write log success if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir, [AbsolutePath]), lmtSuccess) end end; end. doublecmd-1.1.30/src/filesources/gio/ugiocopyoperation.pas0000644000175000001440000000752115104114162022746 0ustar alexxusersunit uGioCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uGioFileSourceUtil; type { TGioCopyOperation } TGioCopyOperation = class(TFileSourceCopyOperation) private FOperationHelper: TGioOperationHelper; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; end; { Both operations are the same, just source and target reversed. Implement them in terms of the same functions, or have one use the other. } { TGioCopyInOperation } TGioCopyInOperation = class(TGioCopyOperation) protected function GetID: TFileSourceOperationType; override; end; { TGioCopyOutOperation } TGioCopyOutOperation = class(TGioCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses fGioCopyMoveOperationOptions, uGio2; constructor TGioCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TGioCopyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TGioCopyOperation.Initialize; var TreeBuilder: TGioTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TGioTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := Self.SymLinkOption; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; FOperationHelper := TGioOperationHelper.Create( FileSource as IFileSource, Self, FStatistics, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, g_file_copy, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.Initialize; end; procedure TGioCopyOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TGioCopyOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TGioCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TGioCopyOperationOptionsUI; end; { TGioCopyInOperation } function TGioCopyInOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyIn; end; { TGioCopyOutOperation } function TGioCopyOutOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyOut; end; end. doublecmd-1.1.30/src/filesources/gio/ugiocalcstatisticsoperation.pas0000644000175000001440000001012615104114162025004 0ustar alexxusersunit uGioCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uGioFileSource, uFile, uGlobs, uLog; type TGioCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FStatistics: TFileSourceCalcStatisticsOperationStatistics; procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uGLib2, uGObject2, uGio2, uGioFileSourceUtil, uGio; constructor TGioCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); end; destructor TGioCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TGioCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TGioCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TGioCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsLink then begin Inc(FStatistics.Links); end else if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TGioCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var AFile: TFile; AFolder: PGFile; AInfo: PGFileInfo; AFileName: Pgchar; AError: PGError = nil; AFileEnum: PGFileEnumerator; begin AFolder:= GioNewFile(srcPath); try AFileEnum:= g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); if Assigned(AFileEnum) then try AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); while Assigned(AInfo) do begin AFileName:= g_file_info_get_name(AInfo); if (aFileName <> '.') and (aFileName <> '..') then begin aFile:= TGioFileSource.CreateFile(srcPath, AFolder, AInfo); try ProcessFile(aFile); finally FreeAndNil(aFile); end; end; g_object_unref(AInfo); CheckOperationState; AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); end; finally if Assigned(AError) then begin LogMessage(AError^.message, [log_errors], lmtError); g_error_free(AError); end; g_object_unref(AFileEnum); end; finally g_object_unref(PGObject(AFolder)); end; end; procedure TGioCalcStatisticsOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/gio/trash/0000755000175000001440000000000015104114162017576 5ustar alexxusersdoublecmd-1.1.30/src/filesources/gio/trash/utrashfilesource.pas0000644000175000001440000001474415104114162023704 0ustar alexxusersunit uTrashFileSource; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Menus, uGLib2, uGio2, uFile, uFileSource, uGioFileSource, uFileSourceProperty, uFileProperty, uFileSourceOperationTypes, uFileSourceOperation; type ITrashFileSource = interface(IGioFileSource) ['{5EABE432-2310-460B-8A59-32C2D2C28207}'] end; { TTrashFileSource } TTrashFileSource = class(TGioFileSource, ITrashFileSource) private FFiles: TFiles; FMenu: TPopupMenu; procedure RestoreItem(Sender: TObject); public constructor Create; override; destructor Destroy; override; function GetFileSystem: String; override; function GetProperties: TFileSourceProperties; override; class function GetMainIcon(out Path: String): Boolean; override; function GetOperationsTypes: TFileSourceOperationTypes; override; class function IsSupportedPath(const Path: String): Boolean; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; function GetDefaultView(out DefaultView: TFileSourceFields): Boolean; override; function QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; override; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; end; implementation uses System.UITypes, Dialogs, DCStrUtils, uGObject2, uLng, uGio, uFileProcs, uGioFileSourceUtil, uTrashDeleteOperation; const G_FILE_ATTRIBUTE_TRASH_ORIG_PATH = 'trash::orig-path'; { TTrashFileSource } procedure TTrashFileSource.RestoreItem(Sender: TObject); var AFile: TFile; APath: String; AIndex: Integer; AInfo: PGFileInfo; AError: PGError = nil; SourceFile, TargetFile: PGFile; begin for AIndex:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[AIndex]; SourceFile:= GioNewFile(AFile.FullPath); try AInfo:= g_file_query_info(SourceFile, G_FILE_ATTRIBUTE_TRASH_ORIG_PATH, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil); if Assigned(AInfo) then try APath:= g_file_info_get_attribute_byte_string(AInfo, G_FILE_ATTRIBUTE_TRASH_ORIG_PATH); mbForceDirectory(ExtractFileDir(APath)); TargetFile:= GioNewFile(APAth); try if not g_file_move(SourceFile, TargetFile, G_FILE_COPY_NOFOLLOW_SYMLINKS or G_FILE_COPY_ALL_METADATA or G_FILE_COPY_NO_FALLBACK_FOR_MOVE, nil, nil, nil, @AError) then begin if Assigned(AError) then try if MessageDlg(AError^.message, mtError, [mbAbort, mbIgnore], 0, mbAbort) = mrAbort then Break; finally FreeAndNil(AError); end; end; finally g_object_unref(PGObject(TargetFile)); end; finally g_object_unref(AInfo); end; finally g_object_unref(PGObject(SourceFile)); end; end; Reload(PathDelim); end; constructor TTrashFileSource.Create; begin inherited Create; FCurrentAddress:= 'trash://'; FMenu:= TPopupMenu.Create(nil); FFiles:= TFiles.Create(EmptyStr); end; destructor TTrashFileSource.Destroy; begin inherited Destroy; FFiles.Free; FMenu.Free; end; function TTrashFileSource.GetFileSystem: String; begin Result:= 'Trash'; end; function TTrashFileSource.GetProperties: TFileSourceProperties; begin Result:= (inherited GetProperties) + [fspContextMenu, fspDefaultView]; end; class function TTrashFileSource.GetMainIcon(out Path: String): Boolean; begin Result:= True; Path:= 'user-trash'; end; function TTrashFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result:= [fsoList, fsoCopyOut, fsoDelete, fsoCalcStatistics]; end; class function TTrashFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= StrBegins(Path, 'trash://'); end; function TTrashFileSource.GetDefaultView(out DefaultView: TFileSourceFields): Boolean; begin Result:= True; SetLength(DefaultView, 3); DefaultView[0].Header:= rsColName; DefaultView[0].Content:= '[DC().GETFILENAMENOEXT{}]'; DefaultView[0].Width:= 30; DefaultView[1].Header:= rsColExt; DefaultView[1].Content:= '[DC().GETFILEEXT{}]'; DefaultView[1].Width:= 15; DefaultView[2].Header:= rsFuncTrashOrigPath; DefaultView[2].Content:= '[Plugin(FS).' + G_FILE_ATTRIBUTE_TRASH_ORIG_PATH + '{}]'; DefaultView[2].Width:= 55; end; function TTrashFileSource.QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; var Index: Integer; MenuItem: TMenuItem; begin if AFiles.Count = 0 then Exit(False); if AFiles[0].Path = 'trash:///' then begin FMenu.Assign(AMenu); MenuItem:= TMenuItem.Create(FMenu); MenuItem.Caption:= '-'; Index:= FMenu.Items.Count - 2; FMenu.Items.Insert(Index, MenuItem); MenuItem:= TMenuItem.Create(FMenu); MenuItem.Caption:= rsMnuRestore; MenuItem.OnClick:= @RestoreItem; Index:= FMenu.Items.Count - 2; FMenu.Items.Insert(Index, MenuItem); FFiles.Clear; AFiles.CloneTo(FFiles); AMenu:= FMenu; end; Result:= True; end; function TTrashFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result:= inherited GetRetrievableFileProperties + fpVariantAll; end; procedure TTrashFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); var AGFile: PGFile; AIndex: Integer; AInfo: PGFileInfo; AProp: TFilePropertyType; AVariant: TFileVariantProperty; begin PropertiesToSet:= PropertiesToSet * fpVariantAll; for AProp in PropertiesToSet do begin AIndex:= Ord(AProp) - Ord(fpVariant); if (AIndex >= 0) and (AIndex <= High(AVariantProperties)) then begin AVariant:= TFileVariantProperty.Create(AVariantProperties[AIndex]); AGFile:= GioNewFile(AFile.FullPath); AInfo:= g_file_query_info(AGFile, 'trash::*', G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil); if Assigned(AInfo) then begin AVariant.Value:= g_file_info_get_attribute_byte_string(AInfo, G_FILE_ATTRIBUTE_TRASH_ORIG_PATH); AFile.Properties[AProp]:= AVariant; g_object_unref(AInfo); end; g_object_unref(PGObject(AGFile)); end; end; end; function TTrashFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; FilesToDelete.Path:= FCurrentAddress + FilesToDelete.Path; Result := TTrashDeleteOperation.Create(TargetFileSource, FilesToDelete); end; end. doublecmd-1.1.30/src/filesources/gio/trash/utrashdeleteoperation.pas0000644000175000001440000000176315104114162024724 0ustar alexxusersunit uTrashDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uGioDeleteOperation, uFileSource, uFile; type { TTrashDeleteOperation } TTrashDeleteOperation = class(TGioDeleteOperation) public procedure Initialize; override; procedure Finalize; override; end; implementation procedure TTrashDeleteOperation.Initialize; var I: Integer; aFile: TFile; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FFullFilesTreeToDelete:= FilesToDelete; for I := 0 to FFullFilesTreeToDelete.Count - 1 do begin aFile := FFullFilesTreeToDelete[I]; with FStatistics do begin if aFile.IsDirectory and (not aFile.IsLinkToDirectory) then Inc(TotalFiles) else begin Inc(TotalFiles); Inc(TotalBytes, aFile.Size); end; end; end; end; procedure TTrashDeleteOperation.Finalize; begin FFullFilesTreeToDelete:= nil; inherited Finalize; end; end. doublecmd-1.1.30/src/filesources/gio/network/0000755000175000001440000000000015104114162020146 5ustar alexxusersdoublecmd-1.1.30/src/filesources/gio/network/unetworkfilesource.pas0000644000175000001440000000311615104114162024613 0ustar alexxusersunit uNetworkFileSource; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, uFile, uFileSourceOperationTypes, uGioFileSource, uGio2; type INetworkFileSource = interface(IGioFileSource) ['{C7128E35-76FC-4635-842D-4091AB4AC520}'] end; { TNetworkFileSource } TNetworkFileSource = class(TGioFileSource, INetworkFileSource) public constructor Create; override; function GetOperationsTypes: TFileSourceOperationTypes; override; class function GetMainIcon(out Path: String): Boolean; override; class function IsSupportedPath(const Path: String): Boolean; override; class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; override; end; implementation uses DCStrUtils; { TNetworkFileSource } constructor TNetworkFileSource.Create; begin inherited Create; FCurrentAddress:= 'network://'; end; function TNetworkFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result:= [fsoList, fsoExecute]; end; class function TNetworkFileSource.GetMainIcon(out Path: String): Boolean; begin Result:= True; Path:= 'network-workgroup'; end; class function TNetworkFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= StrBegins(Path, 'network://'); end; class function TNetworkFileSource.CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; var ADisplayName: String; begin Result:= inherited CreateFile(APath, AFolder, AFileInfo); ADisplayName:= g_file_info_get_display_name(AFileInfo); if Length(ADisplayName) > 0 then Result.Name:= ADisplayName; end; end. doublecmd-1.1.30/src/filesources/gio/fgiocopymoveoperationoptions.pas0000644000175000001440000001026715104114162025233 0ustar alexxusersunit fGioCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, KASComboBox, uGioCopyOperation, uGioMoveOperation; type { TGioCopyMoveOperationOptionsUI } TGioCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) cbFollowLinks: TCheckBox; cmbDirectoryExists: TComboBoxAutoWidth; cmbFileExists: TComboBoxAutoWidth; grpOptions: TGroupBox; lblDirectoryExists: TLabel; lblFileExists: TLabel; pnlCheckboxes: TPanel; pnlComboBoxes: TPanel; private procedure SetOperationOptions(CopyOperation: TGioCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TGioMoveOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TGioCopyOperationOptionsUI = class(TGioCopyMoveOperationOptionsUI) end; { TGioMoveOperationOptionsUI } TGioMoveOperationOptionsUI = class(TGioCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; implementation {$R *.lfm} uses DCStrUtils, uLng, uGlobs, uFileSourceOperationOptions; { TGioCopyMoveOperationOptionsUI } constructor TGioCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); ParseLineToList(rsFileOpFileExistsOptions, cmbFileExists.Items); ParseLineToList(rsFileOpDirectoryExistsOptions, cmbDirectoryExists.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite : cmbFileExists.ItemIndex := 1; fsoofeOverwriteOlder: cmbFileExists.ItemIndex := 2; fsoofeSkip : cmbFileExists.ItemIndex := 3; end; case gOperationOptionDirectoryExists of fsoodeNone : cmbDirectoryExists.ItemIndex := 0; fsoodeCopyInto : cmbDirectoryExists.ItemIndex := 1; fsoodeSkip : cmbDirectoryExists.ItemIndex := 2; end; case gOperationOptionSymLinks of fsooslFollow : cbFollowLinks.State := cbChecked; fsooslDontFollow : cbFollowLinks.State := cbUnchecked; fsooslNone : cbFollowLinks.State := cbGrayed; end; end; procedure TGioCopyMoveOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TGioCopyOperation then SetOperationOptions(Operation as TGioCopyOperation) else if Operation is TGioMoveOperation then SetOperationOptions(Operation as TGioMoveOperation); end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions( CopyOperation: TGioCopyOperation); begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeOverwriteOlder; 3: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cbFollowLinks.State of cbChecked : SymLinkOption := fsooslFollow; cbUnchecked: SymLinkOption := fsooslDontFollow; cbGrayed : SymLinkOption := fsooslNone; end; end; end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions( MoveOperation: TGioMoveOperation); begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; end; end; { TGioMoveOperationOptionsUI } constructor TGioMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); cbFollowLinks.Visible:= False; end; end. doublecmd-1.1.30/src/filesources/gio/fgiocopymoveoperationoptions.lrj0000644000175000001440000000113715104114162025233 0ustar alexxusers{"version":1,"strings":[ {"hash":111687171,"name":"tgiocopymoveoperationoptionsui.lblfileexists.caption","sourcebytes":[87,104,101,110,32,102,105,108,101,32,101,120,105,115,116,115],"value":"When file exists"}, {"hash":219592963,"name":"tgiocopymoveoperationoptionsui.lbldirectoryexists.caption","sourcebytes":[87,104,101,110,32,100,105,114,38,101,99,116,111,114,121,32,101,120,105,115,116,115],"value":"When dir&ectory exists"}, {"hash":76535811,"name":"tgiocopymoveoperationoptionsui.cbfollowlinks.caption","sourcebytes":[70,111,38,108,108,111,119,32,108,105,110,107,115],"value":"Fo&llow links"} ]} doublecmd-1.1.30/src/filesources/gio/fgiocopymoveoperationoptions.lfm0000644000175000001440000000507015104114162025222 0ustar alexxusersobject GioCopyMoveOperationOptionsUI: TGioCopyMoveOperationOptionsUI Left = 453 Height = 158 Top = 166 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 LCLVersion = '1.4.0.4' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner Left = 0 Height = 57 Top = 0 Width = 240 AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 5 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 57 ClientWidth = 240 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 14 Top = 8 Width = 135 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBoxAutoWidth Left = 140 Height = 20 Top = 5 Width = 100 ItemHeight = 14 Items.Strings = ( 'Ask' 'Overwrite' 'Skip' ) Style = csDropDownList TabOrder = 0 end object lblDirectoryExists: TLabel Left = 0 Height = 14 Top = 35 Width = 135 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When dir&ectory exists' FocusControl = cmbDirectoryExists ParentColor = False end object cmbDirectoryExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblDirectoryExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDirectoryExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 140 Height = 20 Top = 32 Width = 100 ItemHeight = 14 Style = csDropDownList TabOrder = 1 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes Left = 248 Height = 29 Top = 0 Width = 95 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone BevelWidth = 8 ChildSizing.TopBottomSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 29 ClientWidth = 95 TabOrder = 1 object cbFollowLinks: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = pnlCheckboxes Left = 0 Height = 19 Top = 5 Width = 95 AllowGrayed = True Caption = 'Fo&llow links' TabOrder = 0 end end end doublecmd-1.1.30/src/filesources/gio/fgioauthdlg.pas0000644000175000001440000000413415104114162021461 0ustar alexxusersunit fGioAuthDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ButtonPanel, uGio2; type { TfrmGioAuthDialog } TfrmGioAuthDialog = class(TForm) ButtonPanel: TButtonPanel; edtDomain: TEdit; edtPassword: TEdit; edtUserName: TEdit; imgAuth: TImage; lblDomain: TLabel; lblMessage: TLabel; lblPassword: TLabel; lblUserName: TLabel; pnlUser: TPanel; pnlConnect: TPanel; rbAnonymous: TRadioButton; rbConnetAs: TRadioButton; procedure rbAnonymousChange(Sender: TObject); private procedure ShowThread; public { public declarations } end; function ShowAuthDlg(const Message: String; var Flags: TGAskPasswordFlags; var DefaultUser, DefaultDomain: String; out Password: String): Boolean; implementation function ShowAuthDlg(const Message: String; var Flags: TGAskPasswordFlags; var DefaultUser, DefaultDomain: String; out Password: String): Boolean; begin with TfrmGioAuthDialog.Create(Application) do try Caption:= Application.Title; lblMessage.Caption:= Message; rbAnonymous.Checked:= (Flags and G_ASK_PASSWORD_ANONYMOUS_SUPPORTED <> 0); pnlConnect.Visible:= rbAnonymous.Checked; pnlUser.Enabled:= not pnlConnect.Visible; edtUserName.Text:= DefaultUser; edtDomain.Text:= DefaultDomain; lblDomain.Visible:= (Flags and G_ASK_PASSWORD_NEED_DOMAIN <> 0); edtDomain.Visible:= lblDomain.Visible; TThread.Synchronize(nil, @ShowThread); Result:= ModalResult = mrOK; if Result then begin if not rbAnonymous.Checked then begin Password:= edtPassword.Text; DefaultUser:= edtUserName.Text; DefaultDomain:= edtDomain.Text; if pnlConnect.Visible then Flags -= G_ASK_PASSWORD_ANONYMOUS_SUPPORTED; end; end; finally Free; end; end; {$R *.lfm} { TfrmGioAuthDialog } procedure TfrmGioAuthDialog.rbAnonymousChange(Sender: TObject); begin pnlUser.Enabled:= not rbAnonymous.Checked; end; procedure TfrmGioAuthDialog.ShowThread; begin ShowModal; end; end. doublecmd-1.1.30/src/filesources/gio/fgioauthdlg.lrj0000644000175000001440000000141715104114162021466 0ustar alexxusers{"version":1,"strings":[ {"hash":74566218,"name":"tfrmgioauthdialog.lblusername.caption","sourcebytes":[85,115,101,114,32,110,97,109,101,58],"value":"User name:"}, {"hash":191070298,"name":"tfrmgioauthdialog.lbldomain.caption","sourcebytes":[68,111,109,97,105,110,58],"value":"Domain:"}, {"hash":179191546,"name":"tfrmgioauthdialog.lblpassword.caption","sourcebytes":[80,97,115,115,119,111,114,100,58],"value":"Password:"}, {"hash":71686025,"name":"tfrmgioauthdialog.rbanonymous.caption","sourcebytes":[67,111,110,110,101,99,116,32,97,110,111,110,121,109,111,117,115,108,121],"value":"Connect anonymously"}, {"hash":29514890,"name":"tfrmgioauthdialog.rbconnetas.caption","sourcebytes":[67,111,110,110,101,99,116,32,97,115,32,117,115,101,114,58],"value":"Connect as user:"} ]} doublecmd-1.1.30/src/filesources/gio/fgioauthdlg.lfm0000644000175000001440000002763615104114162021470 0ustar alexxusersobject frmGioAuthDialog: TfrmGioAuthDialog Left = 487 Height = 215 Top = 67 Width = 375 AutoSize = True BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 215 ClientWidth = 375 Constraints.MinWidth = 375 Position = poScreenCenter LCLVersion = '1.6.0.4' object imgAuth: TImage AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 8 Height = 48 Top = 8 Width = 48 AutoSize = True Picture.Data = { 1754506F727461626C654E6574776F726B477261706869639E0C000089504E47 0D0A1A0A0000000D49484452000000300000003008060000005702F987000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000DD700000DD70142289B780000000774494D4507DB080F071810 46DD836300000C1E4944415468DEED99696C5CD775C7FFF7BE75567286FB4E4A 946451FB92C892BA08B12CD5B69C1510827C285023C856A4881D470E69B4982F 7165C9551314719AB641F3A51FE43A4E1D25B2C5489614CB5A182D96646DDCB7 216786E4BCD9E76DF7DE7E9811CB2869E02816ED02BDC0C50CDE9CF3707FE79C 7BCEB97780FFE383FC6F3F9C3C79D2AF7AA4373CBAE7615DD36555D50A9515A1 F16231F72BCBB2DF4CA5B2C7366FDE5CF8C8029C38D57BA3BEB6BEABA9B119B2 A2429115A8AA0AC77190CEA45028E4529665FFB8E09A3F58BF727DFF470EA0F7 ADA37CD3BA8F93A9E94930E62210A8444B730B2CCB86AA2A2084229FCFC148CD 8942A1D06B99C57D9B363D7C6DB101E8EF2163966DC1B48A30D2C6778D64AA66 70F0CEA3F178F4603C3E356EA4E62049148D0DCDA4AEB661B7C7E7BBDC77F9C2 BF9EEC3B59FF9100101CE763F1289A1A9B0190AF1AC6CCEAAEAEB5C73B3B1FDA D7D27271492697FED4ECDCEC9BF1C4342714686FED901A6AEBBFE8A7DAC0E9B7 4FFEF5871E42478F1E0DCA3A195CD1B9A2C6A37B71EBF60DC7B2EDAFEFDAF9D8 0F17CADD18B8B18A30719052F258385405894A181D1F412693FE0FDBE45FDEBD 7B77FE43010080DEDE23CBA8A2FCAA6BC5AA7A55D5717BE0268AF9DCCB3E6FFE D96DDBF61617CABE7BFDE22EEEF2433E5F60556D4D2DA663D3181E1932870747 662DCBC901483026AE13224E158B9EDE48E46F320F1C00008E1D3BD64264F67A 5B6BFB86CA8A10C627C661A4674708A4AF3FFA89BFF8C55DB9175E7AA14B97E4 7FEA5CD6F9677575F5726B4B3B72B90C46C68621530D54926099261289193B11 9F7518633F1682753FF7DC73D9070A0000478E1CF16A5EF9DF7D5EEFDEF6B60E 388E83F1C93198A6F95330F6DCBBEFBEB79DCAF4E5952BBBB4D87482FA033ED4 D5D56049C712148B266289692C695F0ADBB2E03206C7B171FBCE803D32343AE3 38D8D5D3F3ECCD070A00004208F2CB136F7E89CAE4859AAADAF0D28E6548A753 38DF775644A7A6F8C73FB645BA72F92AEAEBEBB17EFD5A080023A3837868D94A 4CC7A730376BA0ABAB0B9665C2765CC812453C9E1017CE5F4A3A8EB5B9BBBB7B F403CD42BF454A88D8B5F3B11FC29597C713B17FBE72EDD73C9E886162224AB6 6DDD2E0DF40FA1A6BA06EBD7AF43201044DA48636C64323B363186C6FA26B8CC 16972F5D81AAE9A004B01D1BB575B564C3C6B52145D17E1E8944E80305B83B76 EEDC39B7EB91C7BF5AB48A5BCEF59D8B3FF4D00AE40B7918C934D66F5C8B5C3E 034A292E5EBC84C6E6FA002040A90C5991AD3B7706012E402905A5121CC7466B 6B330D87431D5EAFFF8B8B02309F757E7D63B2982F56B4B4B462B07F18EBD6AD 06E70C9C7364B319D8B68BBAEA3A04FD15181A1940A150B846482962A9248152 0A42081CD7C5EAB52BBD94D26F2D2A0083B3A7B5A58D73C66024D3686E6982EB B890CA96ED58D28E4B97DF15935313666236716AF0CEE8FAA6A606C88A0C4208 2452F282E00C55E12AA8AADA78E0C081A57FE83AE4FB059065795B5575D89B4E 67E1F379A1280A6CDB02A5148EEB60E5CAE5B06D8B5CBF7A471742EC686F6FC3 B6ED5B21B88044244002280400094270545787D9D858612380A14501A0200DAA AA2197CB4255D5D2334A21840000D8B68575EBD660C38675E09CC3EBF54140C0 751C104A4041200909800040E0F3F9144250BD681E0050E442409452ECFCC604 0444F9B96599701C079C73A4520602C10AE89A064A693935030214945230CE04 40DC45DB035CB09BB94C96852A2A90C96421D1D24238E7C8E5F2309249CCCECE 219BCBC1B26D702150C8E5C05C0610024A4AF2129520491272D9BC0DB0F14503 70B97B2A3A1D2D042B2B000264B279082E70EBD66DC46271E4727970CE41CAD5 92828250A050CC838094C2A8EC3521041289844708D1B768004BDB569C4C1B29 DB344D842A2B30D03F009FDF875028044A040821A5C513024228082D7D7221E0 D81608290148928CA9A99820845CE8EEEE36160D60EFDEBDCCE5ACE7CAE5CB85 CE651DB8736700F97C014B3ADA21ABDA6F742B64BE6B21902885CBDCB2F54B21 77E9E295A265B9DD8B5A0700C02A38FF964A1B971389B8D3D45C8F13C7DF02A5 0A562C5F01BFCF575AB3004048C9E28494810884E02020E8EBBB683A8EFD9F3D 3DFBDE5974804824C2298A4F0E8F8E4E575404A0A80A7E71F40D70C6D0D1B114 ADAD6D08852AA1EB1EE89A024DD7A1697A290B09829B376FB1B1D1F16B994CFA 2B1FF891F2FD8EA79F8EA408A0D4D7376069673B344DC14F7EF23AAE5DBB0E89 4AA8AAAA4175751582C14A783C1EC89204C761E04240D3344A08FA23918879DF 05F58F053874E890C7E5569522CBA80A57419224787D31F40F0CE0EAD5EBF0FB FDF8DCE73E09084040802A145CE4C05C070D0D0D8473EC7E2087FAF73B9E79E6 992221F8FB2BD7AF145455452010404B4B33EA1BAAB17CC51214CD8298994942 966548B4D4C4C9928CA269A2A232084D537DF7D3037D6000A5AAC65F8B4E44F5 4C26035996C1184355388C254B97A0582C3867CF9E2B663219288A024996A069 2A0AF90220085A5A9AC19878F44301884422F41FBF77E0652AAB7D1B366C2415 C10A101098A6054551C0980BCBCE8B4462F61BAFBEFA5FC69933E74C4A283C1E 0F2CCB826D5B686B6BF1EABAFE990F05C0EB55D6CBB2FA977B9E7852EBECEC24 5C7030C6619945783C5E1849033E9FFF4277F7BE7F9124F967B222498CB1524D 20402A9D467D431D1CC7FD93575E79455A74004678D0716C52340BF3876BD32C 82730E8FD783583C6672CE7FBA7FFFFE559462EFDA35AB15D775C13883A66A30 92B3D0351DC1A09F0D0D8D6F5C7480EE6FFDED29DB743E7BE2C4F1ECCCCCAC90 6505D96C0E9AAA419664C462319711F4027447737353B95B2D75AF5EAF8E39C3 80E338686D6D5125E9FEB2D11FBD89BFFDEDE78FB9AEFD77232343454A095269 03814000C54211B66DBB3DCFF6DCE49C9E181E1EC1E1C3AFE64F9D7E3B373D15 13FE4010AEE3209D4EA1A1A1419365F9338B5A07BE73F03BAB3DB2FA82107CB3 00426D6DEDBA6DDB706C1BA1501813D14948941C07809E9E676F0B217CFBF7EF 5F3A3A52FC6C3693ED79FCF1DD153E9F17B3C939B4B6B4C175DDD59148C41B89 440A8BE201954A7FD5D6DEF6C49E3D9F6CF8C2E7BFA037373523954E43D33CF0 FA7C88C5A6338ECD7EB6F05A261C0E8FC9B2FC312A490AE70CC1400552460A12 95100E878BBAAEFFE9A28510A5D4234BB253110CE2EEC92C9BC92014AA84E01C B1585C755571FCAEFC8B2FBE18C8E70B6FD737D4EDD9B163BBD7652EFC8100F2 851C6CDB465373634051D43D8B06609BECF9FE8101DB4819A52B1200D96C06D5 55D5481A491082D8F34F3F3FBDC0033ED7659BB66CD9A40380EB32E8BA064228 32D934EAEA6A28409F583400429C660891E8EFEF679450148A45702E50595981 582CCE39134717CAEFDBB72F46A974A6B7F7547E2E999A3F3BFBFD3E18461295 9595E09C351E3C78B0F68103BC74E8408FAAEBE7B73EBCB5EDE12D5B25102093 CE201008824A0AA2D1C92C13EED17BF5BEF9CD6F7C229FCB7CEDD45B6F174647 26C08580DFE7472A950221404D4D95EDBAE291070E40089EFED4939FF6AE5CB9 4AA612052514D95C06E1AA305CC7C15C72CE63E69DD3BFEB7E9531761610B4AA 3A0CC65CF87DFEF9B6A2A1A12EA069CAA71F14000120B7B7B7EB103C1E9D8ABA 840094500801E47239842B4388CF24204BF2ED728F7FEFED379165E507CB972F 95155502671CB22243D554188681503804D7658F00D0CA299E7C1075800290CA B2D2E8E8A8D477E1CAE705C8D9DA9ADA406D6D1DF2F92C0821F0FB03B8FEDE7B 762E9FFB39001D0003E0960F9614800C821ADDA3CB9CF3BB775A08F883300C03 9AEA018028004F59F7AEBE0B80DF8F074879F14A79AA00B4C3870F272727A3DD BDC77F59304D1373C924828120F2F93C868787D87474EA4C59765EA7FC5D9E9D 99FBFEB5AB37F217CE5D2CCC2593E09C83CA14F1C40C060606AD6432F94A595E 2D1B4DFE7DDE90DE07C05D0FD085F3FCB90B835BB76E69BC71EB46576226614A 9244CEF79DB70C23F5BD7F78E9BBAF952DC6CBD69F37D83BEF9CE99F9818FF51 5D5D5D3A39975E3D31314526C6A2C865F3C9542AF3C6E9D3277F343E3E9E5FA0 BF70DED73F34BF1142F74CB266CD1AFF23BB766C095586FE3C9F2D5C3870E0A5 D717B8FFB7436881BECFE7939F7AEAA9EDA3A3D1D123475E8B2E58287BBF2144 FEC04D7CAF27EED517F7588CDDE301B20080CE5F16FDCF058C58F00EF63BF4FF 7F7CE4C67F0326A2B675DDA7D6BA0000000049454E44AE426082 } end object pnlUser: TPanel AnchorSideLeft.Control = pnlConnect AnchorSideTop.Control = pnlConnect AnchorSideTop.Side = asrBottom Left = 72 Height = 72 Top = 79 Width = 287 AutoSize = True BorderSpacing.Top = 10 BevelOuter = bvNone ClientHeight = 72 ClientWidth = 287 Color = clForm ParentColor = False TabOrder = 0 object lblUserName: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 3 Width = 69 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = lblUserName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUser AnchorSideRight.Side = asrBottom Left = 87 Height = 20 Top = 0 Width = 200 BorderSpacing.Left = 18 TabOrder = 0 end object lblDomain: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 29 Width = 50 Caption = 'Domain:' ParentColor = False end object edtDomain: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 87 Height = 20 Top = 26 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblPassword: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 55 Width = 59 Caption = 'Password:' ParentColor = False end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 87 Height = 20 Top = 52 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 2 end end object lblMessage: TLabel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = imgAuth AnchorSideRight.Control = pnlUser AnchorSideRight.Side = asrBottom Left = 72 Height = 1 Top = 8 Width = 287 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 16 ParentColor = False WordWrap = True end object pnlConnect: TPanel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblMessage AnchorSideTop.Side = asrBottom Left = 72 Height = 40 Top = 29 Width = 159 AutoSize = True BorderSpacing.Left = 16 BorderSpacing.Top = 20 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 40 ClientWidth = 159 Color = clForm ParentColor = False TabOrder = 1 object rbAnonymous: TRadioButton Left = 0 Height = 20 Top = 0 Width = 159 Caption = 'Connect anonymously' Checked = True OnChange = rbAnonymousChange TabOrder = 1 TabStop = True end object rbConnetAs: TRadioButton Left = 0 Height = 20 Top = 20 Width = 159 Caption = 'Connect as user:' TabOrder = 0 end end object ButtonPanel: TButtonPanel AnchorSideTop.Control = pnlUser AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlUser AnchorSideRight.Side = asrBottom Left = 188 Height = 28 Top = 167 Width = 171 Align = alNone Anchors = [akTop, akRight] BorderSpacing.Top = 16 BorderSpacing.Around = 0 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 2 Spacing = 10 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-1.1.30/src/filesources/filesystem/0000755000175000001440000000000015104114162020063 5ustar alexxusersdoublecmd-1.1.30/src/filesources/filesystem/ufilesystemwipeoperation.pas0000644000175000001440000003322415104114162025753 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This module implements a secure erase of disk media as per the Department of Defense clearing and sanitizing standard: DOD 5220.22-M The standard states that hard disk media is erased by overwriting with a character, then the character's complement, and then a random character. Note that the standard specicically states that this method is not suitable for TOP SECRET information. TOP SECRET data sanatizing is only achievable by a Type 1 or 2 degauss of the disk, or by disintegrating, incinerating, pulverizing, shreding, or melting the disk. Copyright (C) 2008-2018 Alexander Koblov (alexx2000@mail.ru) Based on: WP - wipes files in a secure way. version 3.2 - By Uri Fridman. urifrid@yahoo.com www.geocities.com/urifrid This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit uFileSystemWipeOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ISAAC, uFileSourceWipeOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uDescr, uGlobs, uLog; type { TFileSystemWipeOperation } TFileSystemWipeOperation = class(TFileSourceWipeOperation) private FRandom: isaac_ctx; FBuffer: array [0..2, 0..4095] of Byte; private procedure Fill(Step: Integer); function WipeDir(const FileName: String): Boolean; function WipeLink(const FileName: String): Boolean; function WipeFile(const FileName: String): Boolean; function Rename(const FileName: String; out NewName: String): Boolean; private FDescription: TDescription; FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceWipeOperationStatistics; // local copy of statistics // Options FSkipErrors: Boolean; FWipePassNumber: Integer; FSymLinkOption: TFileSourceOperationOptionSymLink; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected procedure Wipe(aFile: TFile); function HandleError(const Message: String): Boolean; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uDebug, uLng, DCClassesUtf8, uFileSystemUtil, uRandom, uAdministrator, DCOSUtils; constructor TFileSystemWipeOperation.Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); begin FSkipErrors := False; FSymLinkOption := fsooslNone; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; FWipePassNumber:= gWipePassNumber; if gProcessComments then FDescription := TDescription.Create(True) else FDescription := nil; inherited Create(aTargetFileSource, theFilesToWipe); end; destructor TFileSystemWipeOperation.Destroy; begin inherited Destroy; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; FreeAndNil(FFullFilesTreeToDelete); end; procedure TFileSystemWipeOperation.Initialize; begin Fill(0); Fill(1); isaac_init(FRandom, Int32(GetTickCount64)); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(FilesToWipe, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) if gProcessComments then FDescription.Clear; end; procedure TFileSystemWipeOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; OldDoneBytes: Int64; // for if there was an error begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); // If there will be an error in Wipe the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; Wipe(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; // Correct statistics if file not correctly processed. if DoneBytes < (OldDoneBytes + aFile.Size) then DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; //fill buffer with characters //0 = with 0, 1 = with 1 and 2 = random procedure TFileSystemWipeOperation.Fill(Step: Integer); var Index: Integer; Count: Integer; begin Count:= SizeOf(FBuffer[Step]); case Step of 0: begin Count:= Count div SizeOf(DWord); FillDWord(FBuffer[Step, 0], Count, $00000000); end; 1: begin Count:= Count div SizeOf(DWord); FillDWord(FBuffer[Step, 0], Count, $FFFFFFFF); end; 2: begin Index:= 0; while Index < Count do begin Move(FRandom.randrsl[0], FBuffer[Step, Index], SizeOf(FRandom.randrsl)); Inc(Index, SizeOf(FRandom.randrsl)); isaac_generate(FRandom); end; end; end; end; function TFileSystemWipeOperation.Rename(const FileName: String; out NewName: String): Boolean; var bRetry: Boolean; begin repeat bRetry := False; NewName:= GetTempName(ExtractFilePath(FileName)); Result := RenameFileUAC(FileName, NewName); if not Result then bRetry := HandleError(Format(rsMsgErrRename, [FileName, NewName])); until not bRetry; end; function TFileSystemWipeOperation.WipeDir(const FileName: String): Boolean; var bRetry: Boolean; sTempFileName: String; begin Result:= Rename(FileName, sTempFileName); if Result then begin repeat bRetry := False; Result:= RemoveDirectoryUAC(sTempFileName); if not Result then bRetry := HandleError(Format(rsMsgCannotDeleteDirectory, [sTempFileName])); until not bRetry; end; end; function TFileSystemWipeOperation.WipeLink(const FileName: String): Boolean; var bRetry: Boolean; sTempFileName: String; begin Result:= Rename(FileName, sTempFileName); if Result then repeat bRetry := False; Result := DeleteFileUAC(sTempFileName); if not Result then begin bRetry := HandleError(Format(rsMsgNotDelete, [sTempFileName]) + LineEnding + mbSysErrorMessage); end; until not bRetry; end; function TFileSystemWipeOperation.WipeFile(const FileName: String): Boolean; var i, j: Integer; bRetry: Boolean; sTempFileName: String; TotalBytesToWrite: Int64; TargetFileStream: TFileStreamUAC; BytesToWrite, BytesWrittenTry, BytesWritten: Int64; begin // Check file access repeat bRetry := False; Result:= mbFileAccess(FileName, fmOpenWrite); if not Result then begin bRetry := HandleError(rsMsgErrEOpen + ' ' + FileName); if not bRetry then Exit(False); end; until not bRetry; if not Rename(FileName, sTempFileName) then Exit(False); // Try to open file repeat bRetry := False; try TargetFileStream := TFilestreamUAC.Create(sTempFileName, fmOpenReadWrite or fmShareExclusive); except on E: Exception do begin bRetry := HandleError(rsMsgErrEOpen + ' ' + sTempFileName + LineEnding + E.Message); if not bRetry then Exit(False); end; end; until not bRetry; try for i := 1 to FWipePassNumber do begin CheckOperationState; // check pause and stop FStatistics.CurrentFileTotalBytes:= TargetFileStream.Size * 3; FStatistics.CurrentFileDoneBytes:= 0; UpdateStatistics(FStatistics); for j:= 0 to 2 do begin TargetFileStream.Position := 0; TotalBytesToWrite := TargetFileStream.Size; while TotalBytesToWrite > 0 do begin BytesWritten := 0; if (j = 2) then Fill(j); if TotalBytesToWrite > SizeOf(FBuffer[j]) then BytesToWrite := SizeOf(FBuffer[j]) else begin BytesToWrite := TotalBytesToWrite; end; repeat bRetry := False; try BytesWrittenTry := TargetFileStream.Write(FBuffer[j, BytesWritten], BytesToWrite); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesToWrite then begin bRetry := True; // repeat and try to write the rest Dec(BytesToWrite, BytesWrittenTry); end; except on E: Exception do begin bRetry:= HandleError(rsMsgErrEWrite + ' ' + sTempFileName + LineEnding + E.Message); if not bRetry then Exit(False); end; end; until not bRetry; Dec(TotalBytesToWrite, BytesWritten); with FStatistics do begin Inc(CurrentFileDoneBytes, BytesWritten); Inc(DoneBytes, BytesWritten div (3 * Int64(FWipePassNumber))); UpdateStatistics(FStatistics); CheckOperationState; // check pause and stop end; end; // Flush data to disk repeat bRetry := False; Result := FileFlush(TargetFileStream.Handle); if not Result then begin bRetry := HandleError(rsMsgErrEWrite + ' ' + sTempFileName + LineEnding + mbSysErrorMessage); if not bRetry then Exit; end; until not bRetry; CheckOperationState; // check pause and stop end; end; // Truncate file size to zero repeat bRetry := False; Result := FileTruncate(TargetFileStream.Handle, 0); if not Result then begin bRetry := HandleError(rsMsgErrEWrite + ' ' + sTempFileName + LineEnding + mbSysErrorMessage); if not bRetry then Exit; end; until not bRetry; finally FreeAndNil(TargetFileStream); end; if Result then repeat bRetry := False; Result := DeleteFileUAC(sTempFileName); if not Result then begin bRetry := HandleError(Format(rsMsgNotDelete, [sTempFileName]) + LineEnding + mbSysErrorMessage); end; until not bRetry; end; procedure TFileSystemWipeOperation.Wipe(aFile: TFile); var FileName: String; WipeResult: Boolean; begin FileName := aFile.FullPath; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [FileName]), '', [fsourYes, fsourSkip, fsourAbort, fsourAll, fsourSkipAll], fsourYes, fsourAbort) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; fsourAbort: RaiseAbortOperation; end; fsoogNo: Exit; end; end; if FileIsReadOnly(aFile.Attributes) then FileSetReadOnlyUAC(FileName, False); if aFile.IsDirectory then // directory WipeResult := WipeDir(FileName) else if aFile.IsLink then // symbolic link WipeResult := WipeLink(FileName) else begin // normal file WipeResult := WipeFile(FileName); end; if aFile.IsDirectory then begin if not WipeResult then LogMessage(Format(rsMsgLogError + rsMsgLogWipeDir, [FileName]), [log_dir_op, log_delete], lmtError) else LogMessage(Format(rsMsgLogSuccess + rsMsgLogWipeDir, [FileName]), [log_dir_op, log_delete], lmtSuccess); end else begin if not WipeResult then LogMessage(Format(rsMsgLogError + rsMsgLogWipe, [FileName]), [log_delete], lmtError) else LogMessage(Format(rsMsgLogSuccess + rsMsgLogWipe, [FileName]), [log_delete], lmtSuccess); end; // Process comments if need if WipeResult and gProcessComments then FDescription.DeleteDescription(FileName); end; function TFileSystemWipeOperation.HandleError(const Message: String): Boolean; begin Result := False; if gSkipFileOpError then begin logWrite(Thread, Message, lmtError, True); end else if not FSkipErrors then begin case AskQuestion(Message, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: Result := True; fsourAbort: RaiseAbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipErrors := True; end; end; end; procedure TFileSystemWipeOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemutil.pas0000644000175000001440000021432315104114162024044 0ustar alexxusersunit uFileSystemUtil; {$mode objfpc}{$H+} {$if FPC_FULLVERSION >= 30300} {$modeswitch arraytodynarray} {$endif} interface uses Classes, SysUtils, uDescr, uLog, uGlobs, DCOSUtils, uFile, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uFileSourceCopyOperation, uFileSourceTreeBuilder; function ApplyRenameMask(aFile: TFile; NameMask: String; ExtMask: String): String; overload; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function FileExistsMessage(const TargetName, SourceName: String; SourceSize: Int64; SourceTime: TDateTime): String; type TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; TFileSystemOperationTargetExistsResult = (fsoterNotExists, fsoterDeleted, fsoterAddToTarget, fsoterResume, fsoterSkip, fsoterRenamed); TFileSystemOperationHelperMode = (fsohmCopy, fsohmMove); TFileSystemOperationHelperCopyMode = (fsohcmDefault, fsohcmAppend, fsohcmResume); TFileSystemOperationHelperMoveOrCopy = function(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean of object; { TFileSystemTreeBuilder } TFileSystemTreeBuilder = class(TFileSourceTreeBuilder) protected procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); override; procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); override; end; { TFileSystemOperationHelper } TFileSystemOperationHelper = class private FOperationThread: TThread; FMode: TFileSystemOperationHelperMode; FBuffer: Pointer; FBufferSize: LongWord; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FDescription: TDescription; FLogCaption: String; FRenamingFiles: Boolean; FRenamingRootDir: Boolean; FRootDir: TFile; FVerify, FReserveSpace, FCheckFreeSpace: Boolean; FSkipAllBigFiles: Boolean; FSkipAllCopyItSelf: Boolean; {$IF DEFINED(UNIX)} FSkipAllSpecialFiles: Boolean; {$ENDIF} FSkipRenameError: Boolean; FSkipOpenForReadingError: Boolean; FSkipOpenForWritingError: Boolean; FSkipCreateSymLinkError: Boolean; FSkipReadError: Boolean; FSkipWriteError: Boolean; FSkipCopyError: Boolean; FAutoRenameItSelf: Boolean; FCorrectSymLinks: Boolean; FCopyAttributesOptions: TCopyAttributesOptions; FMaxPathOption: TFileSourceOperationUIResponse; FCopyOnWrite: TFileSourceOperationOptionGeneral; FDeleteFileOption: TFileSourceOperationUIResponse; FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; {$IF DEFINED(LINUX)} FCache: record Device: QWord; DirtyLimit: Int64 end; {$ENDIF} FCurrentFile: TFile; FCurrentTargetFilePath: String; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; AppProcessMessages: TAppProcessMessagesFunction; ShowCompareFilesUI: TShowCompareFilesUIFunction; MoveOrCopy: TFileSystemOperationHelperMoveOrCopy; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function DeleteFile(SourceFile: TFile): Boolean; function CheckFileHash(const FileName, Hash: String; Size: Int64): Boolean; function CompareFiles(const FileName1, FileName2: String; Size: Int64): Boolean; function CopyFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; function MoveFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; procedure CopyProperties(SourceFile: TFile; TargetFileName: String); function ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; function ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function TargetExists(aNode: TFileTreeNode; var AbsoluteTargetFileName: String) : TFileSystemOperationTargetExistsResult; function DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean; AllowDelete: Boolean): TFileSourceOperationOptionDirectoryExists; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function FileExists(aFile: TFile; var AbsoluteTargetFileName: String; AllowAppend: Boolean): TFileSourceOperationOptionFileExists; procedure SkipStatistics(aNode: TFileTreeNode); procedure CountStatistics(aNode: TFileTreeNode); public constructor Create(AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; AppProcessMessagesFunction: TAppProcessMessagesFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; OperationThread: TThread; Mode: TFileSystemOperationHelperMode; TargetPath: String; StartingStatistics: TFileSourceCopyOperationStatistics); destructor Destroy; override; procedure Initialize; procedure ProcessTree(aFileTree: TFileTree); property Verify: Boolean read FVerify write FVerify; property CopyOnWrite: TFileSourceOperationOptionGeneral read FCopyOnWrite write FCopyOnWrite; property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property AutoRenameItSelf: Boolean read FAutoRenameItSelf write FAutoRenameItSelf; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property RenameMask: String read FRenameMask write FRenameMask; end; implementation uses uDebug, uDCUtils, uOSUtils, DCStrUtils, FileUtil, uFindEx, DCClassesUtf8, uFileProcs, uLng, DCBasicTypes, uFileSource, uFileSystemFileSource, uFileProperty, uAdministrator, StrUtils, DCDateTimeUtils, uShowMsg, Forms, LazUTF8, uHash, uFileCopyEx, SysConst, Math, DateUtils {$IFDEF UNIX} , BaseUnix, Unix, DCUnix {$ENDIF} ; const HASH_TYPE = HASH_BEST; function ApplyRenameMask(aFile: TFile; NameMask: String; ExtMask: String): String; overload; begin // Only change name for files. if aFile.IsDirectory or aFile.IsLink then Result := aFile.Name else Result := ApplyRenameMask(aFile.Name, NameMask, ExtMask); end; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure FillAndCountRec(const srcPath: String); var sr: TSearchRecEx; aFile: TFile; begin if FindFirstUAC(srcPath + '*', 0, sr) = 0 then begin repeat if (sr.Name='.') or (sr.Name='..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); NewFiles.Add(aFile); if aFile.IsLink then begin end else if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + sr.Name + DirectorySeparator); // go down to directory end else begin FilesSize:= FilesSize + aFile.Size; Inc(FilesCount); end; until FindNextUAC(sr) <> 0; end; FindCloseUAC(sr); end; var i: Integer; aFile: TFile; aFindData: TFileAttributeData; begin FilesCount:= 0; FilesSize:= 0; if ExcludeRootDir then begin if Files.Count <> 1 then raise Exception.Create('Only a single directory can be set with ExcludeRootDir=True'); NewFiles := TFiles.Create(Files[0].FullPath); FillAndCountRec(Files[0].FullPath + DirectorySeparator); end else begin NewFiles := TFiles.Create(Files.Path); for i := 0 to Files.Count - 1 do begin aFile := Files[i]; // Update file attributes if FileGetAttrUAC(aFile.FullPath, aFindData) then begin aFile.Size:= aFindData.Size; aFile.Attributes:= aFindData.Attr; aFile.ModificationTime:= FileTimeToDateTime(aFindData.LastWriteTime); end; NewFiles.Add(aFile.Clone); if aFile.IsLink then begin end else if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.FullPath + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); FilesSize:= FilesSize + aFile.Size; // in first level we know file size -> use it end; end; end; end; function FileExistsMessage(const TargetName, SourceName: String; SourceSize: Int64; SourceTime: TDateTime): String; var ASize: String; TargetInfo: TFileAttributeData; begin Result:= rsMsgFileExistsOverwrite + LineEnding + WrapTextSimple(TargetName, 100) + LineEnding; if FileGetAttrUAC(TargetName, TargetInfo) then begin Result:= Result + Format(rsMsgFileExistsFileInfo, [IntToStrTS(TargetInfo.Size), DateTimeToStr(FileTimeToDateTime(TargetInfo.LastWriteTime))]) + LineEnding; end; if (SourceSize < 0) then ASize:= '?' else begin ASize:= IntToStrTS(SourceSize); end; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + WrapTextSimple(SourceName, 100) + LineEnding + Format(rsMsgFileExistsFileInfo, [ASize, DateTimeToStr(SourceTime)]); end; function FileCopyProgress(TotalBytes, DoneBytes: Int64; UserData: Pointer): LongBool; var Helper: TFileSystemOperationHelper absolute UserData; begin with Helper do begin FStatistics.DoneBytes+= (DoneBytes - FStatistics.CurrentFileDoneBytes); // File has alternate data streams if TotalBytes > FStatistics.CurrentFileTotalBytes then begin FStatistics.TotalBytes+= (TotalBytes - FStatistics.CurrentFileTotalBytes); FStatistics.CurrentFileTotalBytes:= TotalBytes; end; FStatistics.CurrentFileDoneBytes:= DoneBytes; UpdateStatistics(FStatistics); try CheckOperationState; except on E: EFileSourceOperationAborting do Exit(False); end; end; Result:= True; end; // ---------------------------------------------------------------------------- procedure TFileSystemTreeBuilder.AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); var LinkedFilePath: String; LinkedFile: TFile = nil; AddedNode: TFileTreeNode; AddedIndex: Integer; begin LinkedFilePath := mbReadAllLinks(aFile.FullPath); if (LinkedFilePath <> '') and not (aFile.IsLinkToDirectory and IsInPath(LinkedFilePath, aFile.FullPath, True, True)) then begin try LinkedFile := TFileSystemFileSource.CreateFileFromFile(LinkedFilePath); // Add link to current node. AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create(FRecursive); (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; // Then add linked file/directory as a subnode of the link. AddItem(LinkedFile, AddedNode); except on EFileNotFound do begin // Link target doesn't exist - add symlink instead of target (or ask user). AddLink(aFile, CurrentNode); end; end; end else begin // error - cannot follow symlink - adding symlink instead of target (or ask user) AddLink(aFile, CurrentNode); end; end; procedure TFileSystemTreeBuilder.AddFilesInDirectory( srcPath: String; CurrentNode: TFileTreeNode); var sr: TSearchRecEx; aFile: TFile; begin if FindFirstUAC(srcPath + '*', 0, sr) = 0 then begin repeat if (sr.Name = '.') or (sr.Name = '..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); AddItem(aFile, CurrentNode); until FindNextUAC(sr) <> 0; end; FindCloseUAC(sr); end; // ---------------------------------------------------------------------------- constructor TFileSystemOperationHelper.Create( AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; AppProcessMessagesFunction: TAppProcessMessagesFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; ShowCompareFilesUIFunction: TShowCompareFilesUIFunction; OperationThread: TThread; Mode: TFileSystemOperationHelperMode; TargetPath: String; StartingStatistics: TFileSourceCopyOperationStatistics); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; AppProcessMessages := AppProcessMessagesFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; ShowCompareFilesUI := ShowCompareFilesUIFunction; FOperationThread := OperationThread; FMode := Mode; FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); FCheckFreeSpace := True; FSkipAllBigFiles := False; FSkipReadError := False; FSkipWriteError := False; FCopyAttributesOptions := CopyAttributesOptionCopyAll; FFileExistsOption := fsoofeNone; FDirExistsOption := fsoodeNone; FSetPropertyError := fsoospeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FStatistics := StartingStatistics; FRenamingFiles := False; FRenamingRootDir := False; FRootDir := nil; if gProcessComments then FDescription := TDescription.Create(True) else FDescription := nil; case FMode of fsohmCopy: begin MoveOrCopy := @CopyFile; FLogCaption := rsMsgLogCopy; end; fsohmMove: begin MoveOrCopy := @MoveFile; FLogCaption := rsMsgLogMove; end; else raise Exception.Create('Invalid operation mode'); end; inherited Create; end; destructor TFileSystemOperationHelper.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; end; procedure TFileSystemOperationHelper.Initialize; begin SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); // Create destination path if it doesn't exist. if not DirectoryExistsUAC(FRootTargetPath) then if not ForceDirectoriesUAC(FRootTargetPath) then Exit; // do error end; procedure TFileSystemOperationHelper.ProcessTree(aFileTree: TFileTree); var aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFileTree.SubNodesCount = 1) and FRenamingFiles then begin aFile := aFileTree.SubNodes[0].TheFile; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; FRootDir := aFile; end; end; ProcessNode(aFileTree, FRootTargetPath); end; // ---------------------------------------------------------------------------- function TFileSystemOperationHelper.CopyFile( SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; var SourceFileStream, TargetFileStream: TFileStreamUAC; iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesToWrite, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; NewPos: Int64; Hash: String; Options: UInt32; Context: THashContext; bDeleteFile: Boolean = False; {$IFDEF LINUX} Sbfs: TStatFS; Info: BaseUnix.Stat; {$ENDIF} procedure OpenSourceFile; var bRetry: Boolean = True; begin while bRetry do begin bRetry := False; SourceFileStream.Free; // In case stream was created but 'while' loop run again try SourceFileStream := TFileStreamUAC.Create(SourceFile.FullPath, fmOpenRead or fmShareDenyNone); except on EFOpenError do begin if not FSkipOpenForReadingError then begin case AskQuestion(rsMsgErrEOpen + ': ' + SourceFile.FullPath, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourAbort: AbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipOpenForReadingError := True; end; end; end; end; end; if not Assigned(SourceFileStream) and (log_errors in gLogOptions) then logWrite(FOperationThread, rsMsgLogError + rsMsgErrEOpen + ': ' + SourceFile.FullPath, lmtError, True); end; procedure OpenTargetFile; function GetMsgByMode: String; begin if Mode in [fsohcmAppend, fsohcmResume] then Result := rsMsgErrEOpen else Result := rsMsgErrECreate; end; function HandleError: Boolean; begin Result := False; if not FSkipOpenForWritingError then begin case AskQuestion(GetMsgByMode + ': ' + TargetFileName, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: Result := True; fsourAbort: AbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipOpenForWritingError := True; end; end; end; var Flags: LongWord = 0; bRetry: Boolean = True; begin while bRetry do begin bRetry := False; {$IF NOT DEFINED(LINUX)} if FVerify then Flags := fmOpenSync; {$ENDIF} try TargetFileStream.Free; // In case stream was created but 'while' loop run again case Mode of fsohcmAppend: begin TargetFileStream := TFileStreamUAC.Create(TargetFileName, fmOpenReadWrite or Flags); TargetFileStream.Seek(0, soFromEnd); // seek to end TotalBytesToRead := SourceFileStream.Size; end; fsohcmResume: begin TargetFileStream := TFileStreamUAC.Create(TargetFileName, fmOpenReadWrite or Flags); NewPos := TargetFileStream.Seek(0, soFromEnd); SourceFileStream.Seek(NewPos, soFromBeginning); TotalBytesToRead := SourceFileStream.Size - NewPos; end else begin TargetFileStream := TFileStreamUAC.Create(TargetFileName, fmCreate or Flags); TotalBytesToRead := SourceFileStream.Size; if FReserveSpace then begin TargetFileStream.Capacity:= SourceFileStream.Size; TargetFileStream.Seek(0, fsFromBeginning); end; end; end; except on EFOpenError do bRetry := HandleError; on EFCreateError do bRetry := HandleError; end; end; if not Assigned(TargetFileStream) and (log_errors in gLogOptions) then logWrite(FOperationThread, rsMsgLogError + GetMsgByMode + ': ' + TargetFileName, lmtError, True); end; begin Result := False; { Check disk free space } if FCheckFreeSpace and GetDiskFreeSpace(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize) then begin if SourceFile.Size > iFreeDiskSize then begin if FSkipAllBigFiles = True then begin Exit; end else begin case AskQuestion('', rsMsgNoFreeSpaceCont, [fsourYes, fsourAll, fsourNo, fsourSkip, fsourSkipAll], fsourYes, fsourNo) of fsourNo: AbortOperation; fsourSkip: Exit; fsourAll: FCheckFreeSpace := False; fsourSkipAll: begin FSkipAllBigFiles := True; Exit; end; end; end; end; end; if Assigned(FileCopyEx) and (Mode = fsohcmDefault) then begin if FVerify then Options:= FILE_COPY_NO_BUFFERING else begin Options:= 0; end; repeat bRetryWrite:= False; Result:= FileCopyUAC(SourceFile.FullPath, TargetFileName, Options, @FileCopyProgress, Self); if not Result then begin if FSkipCopyError then Exit; case AskQuestion('', Format(rsMsgErrCannotCopyFile, [WrapTextSimple(SourceFile.FullPath, 64), WrapTextSimple(TargetFileName, 64)]) + LineEnding + LineEnding + mbSysErrorMessage, [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: AbortOperation; fsourSkip: Exit; fsourSkipAll: begin FSkipCopyError := True; Exit; end; end; // case end; until not bRetryWrite; if Result and FVerify then begin Result:= CompareFiles(SourceFile.FullPath, TargetFileName, SourceFile.Size); end; if Result then begin CopyProperties(SourceFile, TargetFileName); end; Exit; end; SourceFileStream := nil; TargetFileStream := nil; // for safety exception handling BytesToRead := FBufferSize; if FVerify then HashInit(Context, HASH_TYPE); try try OpenSourceFile; if not Assigned(SourceFileStream) then Exit; {$IF DEFINED(LINUX)} if (Mode = fsohcmDefault) and ((FCopyOnWrite <> fsoogNo) or (FMode = fsohmMove)) then begin bRetryWrite:= FReserveSpace; FReserveSpace:= False; try OpenTargetFile; finally FReserveSpace:= bRetryWrite; end; if not Assigned(TargetFileStream) then Exit; Result:= fpCloneFile(SourceFileStream.Handle, TargetFileStream.Handle); if Result then begin FreeAndNil(TargetFileStream); CopyProperties(SourceFile, TargetFileName); Exit; end else if (FCopyOnWrite = fsoogYes) then begin bDeleteFile := True; if FSkipCopyError then Exit; case AskQuestion('', Format(rsMsgErrCannotCopyFile, [WrapTextSimple(SourceFile.FullPath, 64), WrapTextSimple(TargetFileName, 64)]) + LineEnding + LineEnding + mbSysErrorMessage, [fsourSkip, fsourSkipAll, fsourAbort], fsourSkip, fsourAbort) of fsourAbort: AbortOperation; fsourSkipAll: FSkipCopyError := True; end; // case Exit; end; if FReserveSpace then begin TargetFileStream.Capacity:= SourceFileStream.Size; TargetFileStream.Seek(0, fsFromBeginning); end; end else {$ENDIF} OpenTargetFile; if not Assigned(TargetFileStream) then Exit; {$IF DEFINED(LINUX)} if FVerify then TargetFileStream.AutoSync:= True else if (fpFStatFS(TargetFileStream.Handle, @Sbfs) = 0) then begin case UInt32(Sbfs.fstype) of NFS_SUPER_MAGIC: begin TargetFileStream.AutoSync:= True; end; end; end; if TargetFileStream.AutoSync then begin if (fpFStat(TargetFileStream.Handle, Info) = 0) then begin if FCache.Device = QWord(Info.st_dev) then TargetFileStream.DirtyLimit:= FCache.DirtyLimit else FCache.Device:= QWord(Info.st_dev); end; end; {$ENDIF} while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := SourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); if FVerify then HashUpdate(Context, FBuffer^, BytesRead); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesToWrite := BytesRead; BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := TargetFileStream.Write((FBuffer + BytesWritten)^, BytesToWrite); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWrittenTry < BytesToWrite then begin bRetryWrite := True; // Repeat and try to write the rest Dec(BytesToWrite, BytesWrittenTry); end; except on E: EWriteError do begin { Check disk free space } if GetDiskFreeSpace(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize) and (BytesToWrite > iFreeDiskSize) then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo, fsourSkip], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: AbortOperation; fsourSkip: Exit; end; // case end else begin bDeleteFile := FSkipWriteError and not (Mode in [fsohcmAppend, fsohcmResume]); if FSkipWriteError then Exit; case AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + ':', E.Message, [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: AbortOperation; fsourSkip: Exit; fsourSkipAll: begin bDeleteFile := not (Mode in [fsohcmAppend, fsohcmResume]); FSkipWriteError := True; Exit; end; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin bDeleteFile := FSkipReadError and not (Mode in [fsohcmAppend, fsohcmResume]); if FSkipReadError then Exit; case AskQuestion(rsMsgErrERead + ' ' + SourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: AbortOperation; fsourSkip: Exit; fsourSkipAll: begin bDeleteFile := not (Mode in [fsohcmAppend, fsohcmResume]); FSkipReadError := True; Exit; end; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; AppProcessMessages; CheckOperationState; // check pause and stop end;//while if FVerify then begin HashFinal(Context, Hash); TargetFileStream.Flush; end; Result:= True; except on EFileSourceOperationAborting do begin // Always delete file when user aborted operation. bDeleteFile := True; raise; end; end; finally FreeAndNil(SourceFileStream); if FVerify then Context.Free; if Assigned(TargetFileStream) then begin {$IF DEFINED(LINUX)} if TargetFileStream.AutoSync then FCache.DirtyLimit:= TargetFileStream.DirtyLimit; {$ENDIF} FreeAndNil(TargetFileStream); if TotalBytesToRead > 0 then begin // There was some error, because not all of the file has been copied. // Ask if delete the not completed target file. if bDeleteFile or (AskQuestion('', rsMsgDeletePartiallyCopied, [fsourYes, fsourNo], fsourYes, fsourNo) = fsourYes) then begin DeleteFileUAC(TargetFileName); end; end; if Result and FVerify then begin Result:= CheckFileHash(TargetFileName, Hash, SourceFile.Size); end; end; end; if Result then CopyProperties(SourceFile, TargetFileName); end; procedure TFileSystemOperationHelper.CopyProperties(SourceFile: TFile; TargetFileName: String); var Msg: String = ''; ACopyTime: Boolean; CreationTime, LastAccessTime: TFileTimeEx; CopyAttrResult: TCopyAttributesOptions = []; ACopyAttributesOptions: TCopyAttributesOptions; begin if FCopyAttributesOptions <> [] then begin ACopyAttributesOptions := FCopyAttributesOptions; if SourceFile.IsDirectory or SourceFile.IsLink then ACopyAttributesOptions += CopyAttributesOptionEx; ACopyTime := (FMode = fsohmMove) and ([caoCopyTime, caoCopyTimeEx] * ACopyAttributesOptions <> []); if ACopyTime then ACopyAttributesOptions -= [caoCopyTime, caoCopyTimeEx]; if ACopyAttributesOptions <> [] then begin CopyAttrResult := FileCopyAttrUAC(SourceFile.FullPath, TargetFileName, ACopyAttributesOptions); end; if ACopyTime then try if fpCreationTime in SourceFile.AssignedProperties then CreationTime:= DateTimeToFileTimeEx(SourceFile.CreationTime) else begin CreationTime:= TFileTimeExNull; end; LastAccessTime:= DateTimeToFileTimeEx(SourceFile.LastAccessTime); // Copy time from properties because move operation change time of original folder if not FileSetTimeUAC(TargetFileName, DateTimeToFileTimeEx(SourceFile.ModificationTime), CreationTime, LastAccessTime) then CopyAttrResult += [caoCopyTime]; except on E: EDateOutOfRange do CopyAttrResult += [caoCopyTime]; end; if CopyAttrResult <> [] then begin case FSetPropertyError of fsoospeIgnoreErrors: ; // Do nothing fsoospeDontSet: FCopyAttributesOptions := FCopyAttributesOptions - CopyAttrResult; fsoospeNone: begin if caoCopyAttributes in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetAttribute, [TargetFileName]), LineEnding); if caoCopyTime in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetDateTime, [TargetFileName]), LineEnding); if caoCopyOwnership in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetOwnership, [TargetFileName]), LineEnding); if caoCopyPermissions in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetPermissions, [TargetFileName]), LineEnding); if caoCopyXattributes in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetXattribute, [TargetFileName]), LineEnding); case AskQuestion(Msg, '', [fsourSkip, fsourSkipAll, fsourIgnoreAll, fsourAbort], fsourSkip, fsourIgnoreAll) of //fsourSkip: do nothing fsourSkipAll: // Don't set properties that failed to be set anymore. FCopyAttributesOptions := FCopyAttributesOptions - CopyAttrResult; fsourIgnoreAll: FSetPropertyError := fsoospeIgnoreErrors; fsourAbort: AbortOperation; end; end else Assert(False, 'Invalid TFileSourceOperationOptionSetPropertyError value.'); end; end; end; end; function TFileSystemOperationHelper.MoveFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; var Message: String; RetryRename: Boolean; begin if not (Mode in [fsohcmAppend, fsohcmResume]) then begin repeat RetryRename := True; if RenameFileUAC(SourceFile.FullPath, TargetFileName) then Exit(True); if (GetLastOSError <> ERROR_NOT_SAME_DEVICE) then begin if FSkipRenameError then Exit(False); Message := Format(rsMsgErrCannotMoveFile, [WrapTextSimple(SourceFile.FullPath, 100)]) + LineEnding + LineEnding + mbSysErrorMessage; case AskQuestion('', Message, [fsourSkip, fsourRetry, fsourAbort, fsourSkipAll], fsourSkip, fsourAbort) of fsourSkip: Exit(False); fsourAbort: AbortOperation; fsourRetry: RetryRename := False; fsourSkipAll: FSkipRenameError := True; end; end; until RetryRename; end; if FVerify then FStatistics.TotalBytes += SourceFile.Size; if CopyFile(SourceFile, TargetFileName, Mode) then begin Result:= DeleteFile(SourceFile); end else Result := False; end; function TFileSystemOperationHelper.ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; var aFile: TFile; TargetName: String; ProcessedOk: Boolean; CurrentFileIndex: Integer; CurrentSubNode: TFileTreeNode; AskResult: TFileSourceOperationUIResponse; begin Result := True; for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do begin CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex]; aFile := CurrentSubNode.TheFile; if FRenamingRootDir and (aFile = FRootDir) then TargetName := CurrentTargetPath + FRenameMask else if FRenamingFiles then TargetName := CurrentTargetPath + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask) else TargetName := CurrentTargetPath + aFile.Name; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTo := TargetName; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Check if moving to the same file. if mbFileSame(TargetName, aFile.FullPath) then begin if (FMode = fsohmCopy) and FAutoRenameItSelf then TargetName := GetNextCopyName(TargetName, aFile.IsDirectory or aFile.IsLinkToDirectory) else begin if FSkipAllCopyItSelf then AskResult:= fsourSkip else begin AskResult:= AskQuestion(Format(rsMsgCanNotCopyMoveItSelf, [TargetName]), '', [fsourAbort, fsourSkip, fsourSkipAll], fsourAbort, fsourSkip); FSkipAllCopyItSelf:= (AskResult = fsourSkipAll); end; case AskResult of fsourAbort: AbortOperation(); else begin Result := False; SkipStatistics(CurrentSubNode); AppProcessMessages; CheckOperationState; Continue; end; end; end; end; // Check MAX_PATH if gLongNameAlert and (UTF8Length(TargetName) > MAX_PATH - 1) then begin if FMaxPathOption <> fsourInvalid then AskResult := FMaxPathOption else begin AskResult := AskQuestion(Format(rsMsgFilePathOverMaxPath, [UTF8Length(TargetName), MAX_PATH - 1, LineEnding + WrapTextSimple(TargetName, 100) + LineEnding]), '', [fsourIgnore, fsourSkip, fsourAbort, fsourIgnoreAll, fsourSkipAll], fsourIgnore, fsourSkip); if AskResult = fsourSkipAll then FMaxPathOption := fsourSkip; end; case AskResult of fsourAbort: AbortOperation(); fsourSkip, fsourSkipAll: begin Result := False; SkipStatistics(CurrentSubNode); AppProcessMessages; CheckOperationState; Continue; end; fsourIgnore: ; fsourIgnoreAll: FMaxPathOption := fsourIgnore; end; end; if aFile.IsLink then ProcessedOk := ProcessLink(CurrentSubNode, TargetName) else if aFile.IsDirectory then ProcessedOk := ProcessDirectory(CurrentSubNode, TargetName) else ProcessedOk := ProcessFile(CurrentSubNode, TargetName); if not ProcessedOk then Result := False // Process comments if need else if gProcessComments then begin case FMode of fsohmCopy: FDescription.CopyDescription(CurrentSubNode.TheFile.FullPath, TargetName); fsohmMove: FDescription.MoveDescription(CurrentSubNode.TheFile.FullPath, TargetName); end; end; AppProcessMessages; CheckOperationState; end; end; function TFileSystemOperationHelper.ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var bRenameDirectory: Boolean; bRemoveDirectory: Boolean; NodeData: TFileTreeNodeData; begin NodeData := aNode.Data as TFileTreeNodeData; // If some files will not be moved then source directory cannot be deleted. bRemoveDirectory := (FMode = fsohmMove) and (NodeData.SubnodesHaveExclusions = False); case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: begin Result := False; SkipStatistics(aNode); end; fsoterDeleted, fsoterNotExists: begin // Try moving whole directory tree. It can be done only if we don't have // to process each subnode: if there are no links, or they're not being // processed, if the files are not being renamed or excluded. bRenameDirectory:= (FMode = fsohmMove) and (not FRenamingFiles) and ((FCorrectSymlinks = False) or (NodeData.SubnodesHaveLinks = False)) and (NodeData.SubnodesHaveExclusions = False); if bRenameDirectory then begin bRenameDirectory:= RenameFileUAC(aNode.TheFile.FullPath, AbsoluteTargetFileName); if not bRenameDirectory and (GetLastOSError = ERROR_NOT_SAME_DEVICE) then begin if (not NodeData.Recursive) then begin with TFileSystemTreeBuilder.Create(AskQuestion, CheckOperationState) do try // In move operation don't follow symlinks. SymLinkOption := fsooslDontFollow; BuildFromNode(aNode); FStatistics.TotalFiles += FilesCount; FStatistics.TotalBytes += FilesSize; finally Free; end; NodeData.Recursive:= True; end; end; end; if bRenameDirectory then begin // Success. CountStatistics(aNode); Result := True; bRemoveDirectory := False; end else if NodeData.Recursive then begin // Create target directory. if CreateDirectoryUAC(AbsoluteTargetFileName) then begin // Copy/Move all files inside. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); // Copy attributes after copy/move directory contents, because this operation can change date/time CopyProperties(aNode.TheFile, AbsoluteTargetFileName); end else begin // Error - all files inside not copied/moved. ShowError(rsMsgLogError + Format(rsMsgErrForceDir, [AbsoluteTargetFileName]) + LineEnding + LineEnding + mbSysErrorMessage); Result := False; CountStatistics(aNode); end; end else begin ShowError(rsMsgLogError + Format(rsMsgErrCannotMoveDirectory, [aNode.TheFile.FullPath]) + LineEnding + LineEnding + mbSysErrorMessage); Result := False; CountStatistics(aNode); end; end; fsoterAddToTarget: begin if (FMode = fsohmMove) and (not NodeData.Recursive) then begin with TFileSystemTreeBuilder.Create(AskQuestion, CheckOperationState) do try // In move operation don't follow symlinks. SymLinkOption := fsooslDontFollow; BuildFromNode(aNode); FStatistics.TotalFiles += FilesCount; FStatistics.TotalBytes += FilesSize; finally Free; end; end; // Don't create existing directory, but copy files into it. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end; else raise Exception.Create('Invalid TargetExists result'); end; if bRemoveDirectory and Result then begin if FileIsReadOnly(aNode.TheFile.Attributes) then FileSetReadOnlyUAC(aNode.TheFile.FullPath, False); RemoveDirectoryUAC(aNode.TheFile.FullPath); end; end; function TFileSystemOperationHelper.ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var LinkTarget, CorrectedLink: String; aFile: TFile; aSubNode: TFileTreeNode; begin Result := True; // If link was followed then it's target is stored in a subnode. if aNode.SubNodesCount > 0 then begin aSubNode := aNode.SubNodes[0]; //DCDebug('Link ' + aFile.FullPath + ' followed to ' // + (aSubNode.TheFile as TFileSystemFile).FullPath // + ' will be copied as: ' + AbsoluteTargetFileName); if aSubNode.TheFile.AttributesProperty.IsDirectory then Result := ProcessDirectory(aSubNode, AbsoluteTargetFileName) else Result := ProcessFile(aSubNode, AbsoluteTargetFileName); Exit; // exit without counting statistics, because they are not counted for followed links end; aFile := aNode.TheFile; case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: Result := False; fsoterDeleted, fsoterNotExists: begin if (FMode <> fsohmMove) or (not RenameFileUAC(aFile.FullPath, AbsoluteTargetFileName)) then begin LinkTarget := ReadSymLink(aFile.FullPath); // use sLinkTo ? if LinkTarget <> '' then begin if FCorrectSymlinks then begin CorrectedLink := GetAbsoluteFileName(aFile.Path, LinkTarget); // If the link was relative - make also the corrected link relative. if GetPathType(LinkTarget) = ptRelative then LinkTarget := ExtractRelativepath(AbsoluteTargetFileName, CorrectedLink) else LinkTarget := CorrectedLink; end; if CreateSymbolicLinkUAC(LinkTarget, AbsoluteTargetFileName, aFile.Attributes) then begin CopyProperties(aFile, AbsoluteTargetFileName); if (FMode = fsohmMove) then Result:= DeleteFile(aFile); end else begin if not FSkipCreateSymLinkError then begin case AskQuestion(rsSymErrCreate.TrimRight(['.']) + ' ' + WrapTextSimple(AbsoluteTargetFileName, 64) + LineEnding + LineEnding + mbSysErrorMessage, '', [fsourSkip, fsourSkipAll, fsourAbort], fsourSkip, fsourAbort) of fsourAbort: AbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipCreateSymLinkError := True; end; end; Result := False; end; end else begin DCDebug('Error reading link'); Result := False; end; end; end; fsoterAddToTarget: raise Exception.Create('Cannot add to link'); else raise Exception.Create('Invalid TargetExists result'); end; if Result = True then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogSymLink, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + rsMsgLogSymLink, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtError); end; Inc(FStatistics.DoneFiles); UpdateStatistics(FStatistics); end; function TFileSystemOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var OldDoneBytes, OldTotalBytes: Int64; // for if there was an error begin // If there will be an error the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; OldTotalBytes := FStatistics.TotalBytes; // Skip descript.ion, it will be processed below if gProcessComments and (FStatistics.TotalFiles > 1) and mbCompareFileNames(aNode.TheFile.Name, DESCRIPT_ION) then Result:= True else begin Result:= False; {$IF DEFINED(UNIX)} if not fpS_ISREG(aNode.TheFile.Attributes) then begin if FSkipAllSpecialFiles then Exit(False); case AskQuestion('', Format(rsMsgCannotCopySpecialFile, [LineEnding + aNode.TheFile.FullPath]), [fsourSkip, fsourSkipAll, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Exit(False); fsourSkipAll: begin FSkipAllSpecialFiles:= True; Exit(False); end else AbortOperation; end; end; {$ENDIF} if (aNode.TheFile.Size > GetDiskMaxFileSize(ExtractFileDir(AbsoluteTargetFileName))) then case AskQuestion('', Format(rsMsgFileSizeTooBig, [aNode.TheFile.Name]), [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := False; else AbortOperation; end else case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: begin with FStatistics do begin Inc(DoneFiles); Dec(TotalBytes, aNode.TheFile.Size); if FVerify and (FMode = fsohmCopy) then Dec(TotalBytes, aNode.TheFile.Size); UpdateStatistics(FStatistics); end; Exit(False); end; fsoterDeleted, fsoterNotExists: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmDefault); fsoterAddToTarget: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmAppend); fsoterResume: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmResume); else raise Exception.Create('Invalid TargetExists result'); end; end; if Result = True then begin LogMessage(Format(rsMsgLogSuccess+FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError+FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtError); end; with FStatistics do begin DoneFiles := DoneFiles + 1; if not Result then begin DoneBytes := OldDoneBytes + aNode.TheFile.Size; // Increase DoneBytes twice when copy file or move file between different partitions if FVerify and ((FMode = fsohmCopy) or (OldTotalBytes <> TotalBytes)) then DoneBytes += aNode.TheFile.Size; end; UpdateStatistics(FStatistics); end; end; // ---------------------------------------------------------------------------- function TFileSystemOperationHelper.TargetExists(aNode: TFileTreeNode; var AbsoluteTargetFileName: String): TFileSystemOperationTargetExistsResult; var Attrs, LinkTargetAttrs: TFileAttrs; SourceFile: TFile; function DoDirectoryExists(AllowCopyInto: Boolean; AllowDeleteDirectory: Boolean): TFileSystemOperationTargetExistsResult; begin case DirExists(SourceFile, AbsoluteTargetFileName, AllowCopyInto, AllowDeleteDirectory) of fsoodeSkip: Exit(fsoterSkip); fsoodeDelete: begin DeleteFileUAC(AbsoluteTargetFileName); Exit(fsoterDeleted); end; fsoodeCopyInto: begin Exit(fsoterAddToTarget); end; else raise Exception.Create('Invalid dir exists option'); end; end; function DoFileExists(AllowAppend: Boolean): TFileSystemOperationTargetExistsResult; begin case FileExists(SourceFile, AbsoluteTargetFileName, AllowAppend) of fsoofeSkip: Exit(fsoterSkip); fsoofeOverwrite: begin if FileIsReadOnly(Attrs) then FileSetReadOnlyUAC(AbsoluteTargetFileName, False); if FPS_ISLNK(Attrs) or (FMode = fsohmMove) then begin DeleteFileUAC(AbsoluteTargetFileName); Exit(fsoterDeleted); end; Exit(fsoterNotExists); end; fsoofeAppend: begin Exit(fsoterAddToTarget); end; fsoofeResume: begin Exit(fsoterResume); end; fsoofeAutoRenameTarget, fsoofeAutoRenameSource: begin Exit(fsoterRenamed); end else raise Exception.Create('Invalid file exists option'); end; end; function IsLinkFollowed: Boolean; begin // If link was followed then it's target is stored in a subnode. Result := SourceFile.AttributesProperty.IsLink and (aNode.SubNodesCount > 0); end; function AllowAppendFile: Boolean; begin Result := (not SourceFile.AttributesProperty.IsDirectory) and (not FReserveSpace) and ((not SourceFile.AttributesProperty.IsLink) or (IsLinkFollowed and (not aNode.SubNodes[0].TheFile.AttributesProperty.IsDirectory))); end; function AllowCopyInto: Boolean; begin Result := SourceFile.AttributesProperty.IsDirectory or (IsLinkFollowed and aNode.SubNodes[0].TheFile.IsDirectory); end; begin repeat Attrs := FileGetAttrUAC(AbsoluteTargetFileName); if Attrs <> faInvalidAttributes then begin SourceFile := aNode.TheFile; // Target exists - ask user what to do. if FPS_ISLNK(Attrs) then begin // Check if target of the link exists. LinkTargetAttrs := FileGetAttrUAC(AbsoluteTargetFileName, True); if (LinkTargetAttrs <> faInvalidAttributes) then begin if FPS_ISDIR(LinkTargetAttrs) then Result := DoDirectoryExists(AllowCopyInto, False) else Result := DoFileExists(AllowAppendFile); end else // Target of link doesn't exist. Treat link as file and don't allow append. Result := DoFileExists(False); end else if FPS_ISDIR(Attrs) then begin Result := DoDirectoryExists(AllowCopyInto, False) end else // Existing target is a file. Result := DoFileExists(AllowAppendFile); end else Result := fsoterNotExists; until Result <> fsoterRenamed; end; function TFileSystemOperationHelper.DirExists( aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean; AllowDelete: Boolean): TFileSourceOperationOptionDirectoryExists; var Message: String; PossibleResponses: array of TFileSourceOperationUIResponse = nil; DefaultOkResponse: TFileSourceOperationUIResponse; procedure AddResponse(Response: TFileSourceOperationUIResponse); begin SetLength(PossibleResponses, Length(PossibleResponses) + 1); PossibleResponses[Length(PossibleResponses) - 1] := Response; end; begin if (FDirExistsOption = fsoodeNone) or ((FDirExistsOption = fsoodeDelete) and (AllowDelete = False)) or ((FDirExistsOption = fsoodeCopyInto) and (AllowCopyInto = False)) then begin if AllowDelete then AddResponse(fsourOverwrite); if AllowCopyInto then begin AddResponse(fsourCopyInto); AddResponse(fsourCopyIntoAll); end; AddResponse(fsourSkip); if AllowDelete then AddResponse(fsourOverwriteAll); if AllowCopyInto or AllowDelete then AddResponse(fsourSkipAll); AddResponse(fsourCancel); if AllowCopyInto then DefaultOkResponse := fsourCopyInto else if AllowDelete then DefaultOkResponse := fsourOverwrite else DefaultOkResponse := fsourSkip; if AllowCopyInto or AllowDelete then Message:= Format(rsMsgFolderExistsRwrt, [AbsoluteTargetFileName]) else begin Message:= Format(rsMsgCannotOverwriteDirectory, [AbsoluteTargetFileName, aFile.FullPath]); end; case AskQuestion(Message, '', PossibleResponses, DefaultOkResponse, fsourSkip) of fsourOverwrite: Result := fsoodeDelete; fsourCopyInto: Result := fsoodeCopyInto; fsourCopyIntoAll: begin FDirExistsOption := fsoodeCopyInto; Result := fsoodeCopyInto; end; fsourSkip: Result := fsoodeSkip; fsourOverwriteAll: begin FDirExistsOption := fsoodeDelete; Result := fsoodeDelete; end; fsourSkipAll: begin FDirExistsOption := fsoodeSkip; Result := fsoodeSkip; end; fsourNone, fsourCancel: AbortOperation; end; end else Result := FDirExistsOption; end; procedure TFileSystemOperationHelper.QuestionActionHandler( Action: TFileSourceOperationUIAction); begin if Action = fsouaCompare then ShowCompareFilesUI(FCurrentFile, FCurrentTargetFilePath); end; function TFileSystemOperationHelper.FileExists(aFile: TFile; var AbsoluteTargetFileName: String; AllowAppend: Boolean ): TFileSourceOperationOptionFileExists; const Responses: array[0..13] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourResume, fsourOverwriteOlder, fsourCancel, fsouaCompare, fsourAppend, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourAutoRenameTarget); ResponsesNoAppend: array[0..11] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsouaCompare, fsourOverwriteOlder, fsourCancel, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourAutoRenameTarget); var Answer: Boolean; Message: String; PossibleResponses: TFileSourceOperationUIResponses; function RenameTarget: TFileSourceOperationOptionFileExists; var bRetry: Boolean; begin repeat Message:= GetNextCopyName(AbsoluteTargetFileName, aFile.IsDirectory or aFile.IsLinkToDirectory); if RenameFileUAC(AbsoluteTargetFileName, Message) then Exit(fsoofeAutoRenameTarget); bRetry:= False; Message:= Format(rsMsgErrRename, [AbsoluteTargetFileName, Message]); case AskQuestion(Message, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry:= True; fsourSkip: Result := fsoofeSkip; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourNone, fsourAbort: AbortOperation; end; until not bRetry; end; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if CompareDateTime(aFile.ModificationTime, FileTimeToDateTimeEx(mbFileGetTime(AbsoluteTargetFileName))) = GreaterThanValue then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: repeat Answer := True; case AllowAppend of True : PossibleResponses := Responses; False: PossibleResponses := ResponsesNoAppend; end; Message:= FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime); FCurrentFile := aFile; FCurrentTargetFilePath := AbsoluteTargetFileName; case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip, @QuestionActionHandler) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourAppend: begin //FFileExistsOption := fsoofeAppend; - for AppendAll Result := fsoofeAppend; end; fsourResume: begin Result := fsoofeResume; end; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourAutoRenameSource: begin Result:= fsoofeAutoRenameSource; FFileExistsOption:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName, aFile.IsDirectory or aFile.IsLinkToDirectory); end; fsourAutoRenameTarget: begin FFileExistsOption := fsoofeAutoRenameTarget; Result:= RenameTarget; end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(FOperationThread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: AbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; fsoofeAutoRenameTarget: begin Result:= RenameTarget; end; fsoofeAutoRenameSource: begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName, aFile.IsDirectory or aFile.IsLinkToDirectory); end; else Result := FFileExistsOption; end; end; procedure TFileSystemOperationHelper.SkipStatistics(aNode: TFileTreeNode); procedure SkipNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do SkipNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then TotalFiles := TotalFiles - 1 else // Count target of link. SkipNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. TotalFiles := TotalFiles - 1; TotalBytes := TotalBytes - aNode.TheFile.Size; end; end; end; begin SkipNodeStatistics(aNode); UpdateStatistics(FStatistics); end; procedure TFileSystemOperationHelper.ShowError(sMessage: String); begin if gSkipFileOpError then begin if log_errors in gLogOptions then logWrite(FOperationThread, sMessage, lmtError, True); end else begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) <> fsourSkip then begin AbortOperation; end; end; end; procedure TFileSystemOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperationThread, sMessage, logMsgType); end; end; function TFileSystemOperationHelper.DeleteFile(SourceFile: TFile): Boolean; var Message: String; RetryDelete: Boolean; begin repeat RetryDelete := True; if FileIsReadOnly(SourceFile.Attributes) then FileSetReadOnlyUAC(SourceFile.FullPath, False); Result := DeleteFileUAC(SourceFile.FullPath); if (not Result) and (FDeleteFileOption = fsourInvalid) then begin Message := Format(rsMsgNotDelete, [WrapTextSimple(SourceFile.FullPath, 100)]) + LineEnding + LineEnding + mbSysErrorMessage; case AskQuestion('', Message, [fsourSkip, fsourRetry, fsourAbort, fsourSkipAll], fsourSkip, fsourAbort) of fsourAbort: AbortOperation; fsourRetry: RetryDelete := False; fsourSkipAll: FDeleteFileOption := fsourSkipAll; end; end; until RetryDelete; end; function TFileSystemOperationHelper.CheckFileHash(const FileName, Hash: String; Size: Int64): Boolean; const BLOCK_SIZE = $20000; var Handle: THandle; FileHash: String; bRetryRead: Boolean; Context: THashContext; Buffer, Aligned: Pointer; TotalBytesToRead: Int64 = 0; BytesRead, BytesToRead: Int64; begin Result := False; FStatistics.CurrentFileDoneBytes:= 0; // Flag fmOpenDirect requires: file access sizes must be for a number of bytes // that is an integer multiple of the volume block size, file access buffer // addresses for read and write operations should be physical block size aligned BytesToRead:= BLOCK_SIZE; Buffer:= GetMem(BytesToRead * 2 - 1); {$PUSH}{$HINTS OFF}{$WARNINGS OFF} Aligned:= Pointer(PtrUInt(Buffer + BytesToRead - 1) and not (BytesToRead - 1)); {$POP} HashInit(Context, HASH_TYPE); try Handle:= FileOpenUAC(FileName, fmOpenRead or fmShareDenyWrite or fmOpenSync or fmOpenDirect); if Handle = feInvalidHandle then begin case AskQuestion(rsMsgVerify, rsMsgErrEOpen + ' ' + FileName, [fsourSkip, fsourAbort], fsourAbort, fsourSkip) of fsourAbort: AbortOperation(); fsourSkip: Exit(False); end; // case end else begin TotalBytesToRead := Size; while TotalBytesToRead > 0 do begin repeat try bRetryRead := False; BytesRead := FileRead(Handle, Aligned^, BytesToRead); if (BytesRead <= 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; HashUpdate(Context, Aligned^, BytesRead); except on E: EReadError do begin case AskQuestion(rsMsgVerify + ' ' + rsMsgErrERead + ' ' + FileName + LineEnding, E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: AbortOperation(); fsourSkip: Exit(False); end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end; // while Result := True; end; finally FreeMem(Buffer); HashFinal(Context, FileHash); if Handle <> feInvalidHandle then begin FileClose(Handle); end; if Result then begin Result:= SameText(Hash, FileHash); if not Result then begin case AskQuestion(rsMsgVerify, rsMsgVerifyWrong + LineEnding + FileName, [fsourSkip, fsourAbort], fsourAbort, fsourSkip) of fsourAbort: AbortOperation(); end; // case end; end; end; end; function TFileSystemOperationHelper.CompareFiles(const FileName1, FileName2: String; Size: Int64): Boolean; const BLOCK_SIZE = $20000; BUF_LEN = 1024 * 1024 * 8; var Count: Int64; Buffer1, Buffer2: PByte; Aligned1, Aligned2: PByte; File1, File2: TFileStreamUAC; begin Buffer1:= GetMem(BUF_LEN * 2); Buffer2:= GetMem(BUF_LEN * 2); try if (Buffer1 = nil) or (Buffer2 = nil) then raise EOutOfMemory.Create(SOutOfMemory); Aligned1:= Align(Buffer1, BLOCK_SIZE); Aligned2:= Align(Buffer2, BLOCK_SIZE); try File1 := TFileStreamUAC.Create(FileName1, fmOpenRead or fmShareDenyWrite or fmOpenSync or fmOpenDirect); try File2 := TFileStreamUAC.Create(FileName2, fmOpenRead or fmShareDenyWrite or fmOpenSync or fmOpenDirect); try FStatistics.CurrentFileDoneBytes:= 0; repeat if Size - FStatistics.CurrentFileDoneBytes <= BUF_LEN then Count := Size - FStatistics.CurrentFileDoneBytes else begin Count := BUF_LEN; end; File1.ReadBuffer(Aligned1^, Count); File2.ReadBuffer(Aligned2^, Count); if (Count <> BUF_LEN) then Result := CompareMem(Aligned1, Aligned2, Count) else begin Result := CompareDWord(Aligned1^, Aligned2^, Count div SizeOf(Dword)) = 0; end; with FStatistics do begin DoneBytes += Count; CurrentFileDoneBytes += Count; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop until not Result or (FStatistics.CurrentFileDoneBytes >= Size); finally File2.Free; end; finally File1.Free; end; except on E: Exception do begin if E is EFileSourceOperationAborting then raise; case AskQuestion(rsMsgVerify, E.Message, [fsourSkip, fsourAbort], fsourAbort, fsourSkip) of fsourAbort: AbortOperation(); fsourSkip: Exit(False); end; // case end; end; finally if Assigned(Buffer1) then FreeMem(Buffer1); if Assigned(Buffer2) then FreeMem(Buffer2); end; end; procedure TFileSystemOperationHelper.CountStatistics(aNode: TFileTreeNode); procedure CountNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do CountNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then DoneFiles := DoneFiles + 1 else // Count target of link. CountNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aNode.TheFile.Size; end; end; end; begin CountNodeStatistics(aNode); UpdateStatistics(FStatistics); end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemsplitoperation.pas0000644000175000001440000003155515104114162026147 0ustar alexxusersunit uFileSystemSplitOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSplitOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog, DCClassesUtf8; type { TFileSystemSplitOperation } TFileSystemSplitOperation = class(TFileSourceSplitOperation) private FStatistics: TFileSourceSplitOperationStatistics; // local copy of statistics FTargetpath: String; FBuffer: Pointer; FBufferSize: LongWord; FCheckFreeSpace: Boolean; protected function Split(aSourceFileStream: TFileStreamEx; TargetFile: String): Boolean; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, LazUTF8, DCcrc32, //DC DCConvertEncoding, uOSUtils, DCOSUtils, uLng, uFileProcs; constructor TFileSystemSplitOperation.Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); begin FCheckFreeSpace := True; FTargetpath := IncludeTrailingPathDelimiter(aTargetPath); FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); inherited Create(aFileSource, aSourceFile, aTargetPath); end; destructor TFileSystemSplitOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; end; //TC, when creating the CRC32 verification file after a split will include the target filename with both ANSI and UTF8 string filename //In the ANSI filename, he puts "_" to replace any UTF8 needed character, not present in regular ANSI set. //Let's do the same! // function ConvertStringToTCStringUTF8CharReplacedByUnderscore(const sString: string): string; begin Result:= StringReplace(CeUtf8ToSys(sString), '?', '_', [rfReplaceAll]); end; procedure TFileSystemSplitOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin CurrentFileFrom:= SourceFile.FullPath; TotalFiles:= VolumeNumber; TotalBytes:= SourceFile.Size; end; end; procedure TFileSystemSplitOperation.MainExecute; var iExt, CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; SourceFileStream: TFileStreamEx = nil; TargetFilename: String; hSummaryFile: THandle; SummaryFilename:String; respAutomaticSwapDisk: TFileSourceOperationUIResponse; begin try if not AutomaticSplitMode then begin { Check disk free space } if FCheckFreeSpace = True then begin GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); if FStatistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; end; // Open source file SourceFileStream := TFileStreamEx.Create(SourceFile.FullPath, fmOpenRead or fmShareDenyNone); try // Calculate extension length iExt:= 3; // Minimum length 3 symbols if not AutomaticSplitMode then begin CurrentFileIndex:= (FStatistics.TotalFiles div 1000); while CurrentFileIndex >= 1 do begin CurrentFileIndex:= CurrentFileIndex div 10; Inc(iExt); end; end; //For-loop has been replaced by a while if for any reason the number of files has been miscomputed, it won't create hundreds of file of 0 byte long! CurrentFileIndex:=1; while ((CurrentFileIndex<=FStatistics.TotalFiles) OR AutomaticSplitMode) AND (FStatistics.TotalBytes>FStatistics.DoneBytes) do begin //Determine what will be the next filename to the output file if RequireACRC32VerificationFile then TargetFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex]) //like TC else TargetFilename:= FTargetpath + SourceFile.Name + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex]); //like DC originally if AutomaticSplitMode then begin repeat GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); VolumeSize:=iFreeDiskSize-(64*1024); //Let's keep a possible 64KB free of space on target even after copy if VolumeSize<(64*1024) then begin respAutomaticSwapDisk:=AskQuestion('',Format(rsMsgInsertNextDisk,[TargetFilename,(FStatistics.TotalBytes-FStatistics.DoneBytes)]),[fsourOk,fsourAbort],fsourOk,fsourAbort); if respAutomaticSwapDisk = fsourAbort then RaiseAbortOperation; if respAutomaticSwapDisk = fsourOk then VolumeSize:=1*1024*1024; //~~~Debug end; until (VolumeSize >= (64*1024)); FStatistics.TotalFiles:=FStatistics.TotalFiles+1; end; with FStatistics do begin // Last file can be smaller then volume size if (TotalBytes - DoneBytes) < VolumeSize then VolumeSize:= TotalBytes - DoneBytes; CurrentFileTo := TargetFilename; CurrentFileTotalBytes := VolumeSize; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Split with current file if not Split(SourceFileStream, TargetFilename) then Break; with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; inc(CurrentFileIndex); end; finally if Assigned(SourceFileStream) then begin FreeAndNil(SourceFileStream); if (FStatistics.DoneBytes <> FStatistics.TotalBytes) then begin for CurrentFileIndex := 1 to FStatistics.TotalFiles do // There was some error, because not all files has been created. // Delete the not completed target files. mbDeleteFile(FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex])); end else begin //If requested, let's create the CRC32 verification file if RequireACRC32VerificationFile then begin //We just mimic TC who set in uppercase the "CRC" extension if the filename (without extension!) is made all with capital letters. if SourceFile.NameNoExt = UTF8UpperCase(SourceFile.NameNoExt) then SummaryFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + 'CRC' else SummaryFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + 'crc'; hSummaryFile := mbFileCreate(SummaryFilename); try FileWriteLn(hSummaryFile,'filename='+ConvertStringToTCStringUTF8CharReplacedByUnderscore(SourceFile.Name)); FileWriteLn(hSummaryFile,'filenameutf8='+SourceFile.Name); FileWriteLn(hSummaryFile,'size='+IntToStr(SourceFile.Size)); FileWriteLn(hSummaryFile,'crc32='+hexStr(CurrentCRC32,8)); finally FileClose(hSummaryFile); end; end; end; end; end; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + SourceFile.FullPath); end; end; end; procedure TFileSystemSplitOperation.Finalize; begin end; function TFileSystemSplitOperation.Split(aSourceFileStream: TFileStreamEx; TargetFile: String): Boolean; var TargetFileStream: TFileStreamEx = nil; // for safety exception handling iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; try try TargetFileStream := TFileStreamEx.Create(TargetFile, fmCreate); TotalBytesToRead := VolumeSize; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := aSourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); if RequireACRC32VerificationFile then begin CurrentCRC32:= crc32_16bytes(FBuffer, BytesRead, CurrentCRC32); end; TotalBytesToRead := TotalBytesToRead - BytesRead; BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := TargetFileStream.Write((FBuffer + BytesWritten)^, BytesRead); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesRead then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: RaiseAbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + TargetFile + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + SourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end; //while finally if Assigned(TargetFileStream) then FreeAndNil(TargetFileStream); end; Result:= True; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + TargetFile); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + TargetFile); end; end; end; procedure TFileSystemSplitOperation.ShowError(sMessage: String); begin if gSkipFileOpError then logWrite(Thread, sMessage, lmtError, True) else begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; procedure TFileSystemSplitOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemsetfilepropertyoperation.pas0000644000175000001440000003412415104114162030247 0ustar alexxusersunit uFileSystemSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LazUTF8, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uFileProperty, uDescr; type { TFileSystemSetFilePropertyOperation } TFileSystemSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics FDescription: TDescription; // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FFileExistsOption: TFileSourceOperationUIResponse; FDirExistsOption: TFileSourceOperationUIResponse; FCurrentFile: TFile; FCurrentTargetFilePath: String; procedure QuestionActionHandler(Action: TFileSourceOperationUIAction); function RenameFile(aFile: TFile; NewName: String): TSetFilePropertyResult; protected procedure ShowCompareFilesUI(SourceFile: TFile; const TargetFilePath: String); function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uGlobs, uLng, DCDateTimeUtils, uFileSystemUtil, uShowForm, DCOSUtils, DCStrUtils, DCBasicTypes, uAdministrator {$IF DEFINED(UNIX)} , BaseUnix, DCUnix {$ENDIF} ; constructor TFileSystemSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, {$IF DEFINED(UNIX)} // Set owner/group before MODE because it clears SUID bit. fpOwner, {$ENDIF} fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; if gProcessComments then begin FDescription := TDescription.Create(False); end; end; destructor TFileSystemSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; end; procedure TFileSystemSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles := FFullFilesTree.Count; end else begin FillAndCount(TargetFiles, True, False, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TFileSystemSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(CurrentFileIndex, aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; procedure TFileSystemSetFilePropertyOperation.Finalize; begin end; function TFileSystemSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; begin Result := sfprSuccess; try case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin Result := RenameFile( aFile, (aTemplateProperty as TFileNameProperty).Value); if (Result = sfprSuccess) and gProcessComments then begin FDescription.Rename(aFile.FullPath, (aTemplateProperty as TFileNameProperty).Value); end; end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin if not FileSetAttrUAC( aFile.FullPath, (aTemplateProperty as TFileAttributesProperty).Value) then begin Result := sfprError; end; end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin if not FileSetTimeUAC( aFile.FullPath, DateTimeToFileTimeEx((aTemplateProperty as TFileModificationDateTimeProperty).Value), TFileTimeExNull, TFileTimeExNull) then begin Result := sfprError; end; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin if not FileSetTimeUAC( aFile.FullPath, TFileTimeExNull, DateTimeToFileTimeEx((aTemplateProperty as TFileCreationDateTimeProperty).Value), TFileTimeExNull) then begin Result := sfprError; end; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin if not FileSetTimeUAC( aFile.FullPath, TFileTimeExNull, TFileTimeExNull, DateTimeToFileTimeEx((aTemplateProperty as TFileLastAccessDateTimeProperty).Value)) then begin Result := sfprError; end; end else Result := sfprSkipped; {$IF DEFINED(UNIX)} fpOwner: begin if fplchown(aFile.FullPath, (aTemplateProperty as TFileOwnerProperty).Owner, (aTemplateProperty as TFileOwnerProperty).Group) <> 0 then begin Result := sfprError;; end; end {$ENDIF} else raise Exception.Create('Trying to set unsupported property'); end; except on e: EDateOutOfRange do begin if not gSkipFileOpError then case AskQuestion(rsMsgLogError + Format(rsMsgErrDateNotSupported, [DateTimeToStr(e.DateTime)]), '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := sfprSkipped; fsourAbort: RaiseAbortOperation; end; end; on e: EConvertError do begin if not gSkipFileOpError then case AskQuestion(rsMsgLogError + e.Message, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := sfprSkipped; fsourAbort: RaiseAbortOperation; end; end; end; end; procedure TFileSystemSetFilePropertyOperation.QuestionActionHandler( Action: TFileSourceOperationUIAction); begin if Action = fsouaCompare then ShowCompareFilesUI(FCurrentFile, FCurrentTargetFilePath); end; function TFileSystemSetFilePropertyOperation.RenameFile(aFile: TFile; NewName: String): TSetFilePropertyResult; var OldName: String; NewAttr: TFileAttributeData; function OverwriteOlder: TFileSourceOperationUIResponse; begin if aFile.ModificationTime > FileTimeToDateTime(NewAttr.LastWriteTime) then Result := fsourOverwrite else Result := fsourSkip; end; function OverwriteSmaller: TFileSourceOperationUIResponse; begin if aFile.Size > NewAttr.Size then Result := fsourOverwrite else Result := fsourSkip; end; function OverwriteLarger: TFileSourceOperationUIResponse; begin if aFile.Size < NewAttr.Size then Result := fsourOverwrite else Result := fsourSkip; end; function AskIfOverwrite: TFileSourceOperationUIResponse; var sQuestion: String; begin if DCOSUtils.FPS_ISDIR(NewAttr.Attr) then begin if FDirExistsOption <> fsourInvalid then Exit(FDirExistsOption); Result := AskQuestion(Format(rsMsgErrDirExists, [NewName]), '', [fsourSkip, fsourSkipAll, fsourAbort], fsourSkip, fsourAbort); if Result = fsourSkipAll then begin FDirExistsOption:= fsourSkip; Result:= FDirExistsOption; end; end else begin case FFileExistsOption of fsourNone, fsourInvalid: begin FCurrentFile := aFile; FCurrentTargetFilePath := NewName; sQuestion:= FileExistsMessage(NewName, aFile.FullPath, aFile.Size, aFile.ModificationTime); Result := AskQuestion(sQuestion, '', [fsourOverwrite, fsourSkip, fsourOverwriteSmaller, fsourOverwriteAll, fsourSkipAll, fsourOverwriteLarger, fsourOverwriteOlder, fsourAbort, fsouaCompare ], fsourOverwrite, fsourAbort, @QuestionActionHandler); case Result of fsourOverwriteAll: begin Result:= fsourOverwrite; FFileExistsOption:= Result; end; fsourSkipAll: begin Result:= fsourSkip; FFileExistsOption:= Result; end; fsourOverwriteOlder: begin FFileExistsOption := OverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsourOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsourOverwriteLarger; Result:= OverwriteLarger; end; end; // case end; fsourOverwriteOlder: begin Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin Result:= OverwriteLarger; end; else Result := FFileExistsOption; end; // case end; end; {$IFDEF UNIX} var OldAttr: TFileAttributeData; {$ENDIF} begin OldName:= aFile.FullPath; if FileSource.GetPathType(NewName) <> ptAbsolute then begin NewName := ExtractFilePath(OldName) + TrimPath(NewName); end; if OldName = NewName then Exit(sfprSkipped); {$IFDEF UNIX} // Check if target file exists. if FileGetAttrUAC(NewName, NewAttr) then begin // Cannot overwrite file by directory and vice versa if fpS_ISDIR(NewAttr.FindData.st_mode) <> aFile.IsDirectory then Exit(sfprError); // Special case when filenames differ only by case, // see comments in mbRenameFile function for details if (UTF8LowerCase(OldName) <> UTF8LowerCase(NewName)) then OldAttr.FindData.st_ino:= not NewAttr.FindData.st_ino else begin if not FileGetAttrUAC(OldName, OldAttr) then Exit(sfprError); end; // Check if source and target are the same files (same inode and same device). if (OldAttr.FindData.st_ino = NewAttr.FindData.st_ino) and (OldAttr.FindData.st_dev = NewAttr.FindData.st_dev) and // Check number of links, if it is 1 then source and target names most // probably differ only by case on a case-insensitive filesystem. ((NewAttr.FindData.st_nlink = 1) or fpS_ISDIR(NewAttr.FindData.st_mode)) then begin // File names differ only by case on a case-insensitive filesystem. end else begin case AskIfOverwrite of fsourOverwrite: ; // continue fsourSkip: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; {$ELSE} // Windows doesn't allow two filenames that differ only by case (even on NTFS). if UTF8LowerCase(OldName) <> UTF8LowerCase(NewName) then begin if FileGetAttrUAC(NewName, NewAttr) then // If target file exists. begin // Cannot overwrite file by directory and vice versa if fpS_ISDIR(NewAttr.Attr) <> aFile.IsDirectory then Exit(sfprError); case AskIfOverwrite of fsourOverwrite: ; // continue fsourSkip: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; {$ENDIF} if RenameFileUAC(OldName, NewName) then Result := sfprSuccess else Result := sfprError; end; procedure TFileSystemSetFilePropertyOperation.ShowCompareFilesUI( SourceFile: TFile; const TargetFilePath: String); var TargetFile: TFile; begin TargetFile := FileSource.CreateFileObject(ExtractFilePath(TargetFilePath)); try TargetFile.Name := ExtractFileName(TargetFilePath); PrepareToolData(FileSource, SourceFile, FileSource, TargetFile, @ShowDifferByGlobList, True); finally TargetFile.Free; end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemmoveoperation.pas0000644000175000001440000001622615104114162025760 0ustar alexxusersunit uFileSystemMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceMoveOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uFileSystemUtil, DCOSUtils, uSearchTemplate; type { TFileSystemMoveOperation } TFileSystemMoveOperation = class(TFileSourceMoveOperation) private FCopyAttributesOptions: TCopyAttributesOptions; FOperationHelper: TFileSystemOperationHelper; FExcludeEmptyTemplateDirectories: Boolean; FSearchTemplate: TSearchTemplate; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics // Options. FVerify, FReserveSpace, FCheckFreeSpace: Boolean; FSkipAllBigFiles: Boolean; FCorrectSymlinks: Boolean; FCopyOnWrite: TFileSourceOperationOptionGeneral; procedure SetSearchTemplate(AValue: TSearchTemplate); protected function Recursive: Boolean; public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property Verify: Boolean read FVerify write FVerify; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property CopyOnWrite: TFileSourceOperationOptionGeneral read FCopyOnWrite write FCopyOnWrite; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Operation takes ownership of assigned template and will free it. } property SearchTemplate: TSearchTemplate read FSearchTemplate write SetSearchTemplate; end; implementation uses fFileSystemCopyMoveOperationOptions, uGlobs; constructor TFileSystemMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin // Here we can read global settings if there are any FSetPropertyError := gOperationOptionSetPropertyError; FReserveSpace := gOperationOptionReserveSpace; FCheckFreeSpace := gOperationOptionCheckFreeSpace; FSkipAllBigFiles := False; FCorrectSymLinks := gOperationOptionCorrectLinks; FExcludeEmptyTemplateDirectories := True; inherited Create(aFileSource, theSourceFiles, aTargetPath); // Here we can read global settings if there are any FCopyOnWrite := gOperationOptionCopyOnWrite; FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyXattributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyXattributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; if gOperationOptionCopyPermissions then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyPermissions]; if gDropReadOnlyFlag then FCopyAttributesOptions := FCopyAttributesOptions + [caoRemoveReadOnlyAttr]; end; destructor TFileSystemMoveOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); FreeAndNil(FOperationHelper); FreeAndNil(FSearchTemplate); end; procedure TFileSystemMoveOperation.Initialize; var TreeBuilder: TFileSystemTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TFileSystemTreeBuilder.Create( @AskQuestion, @CheckOperationState); try TreeBuilder.Recursive := Recursive; // In move operation don't follow symlinks. TreeBuilder.SymLinkOption := fsooslDontFollow; TreeBuilder.SearchTemplate := Self.SearchTemplate; TreeBuilder.ExcludeEmptyTemplateDirectories := Self.ExcludeEmptyTemplateDirectories; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TFileSystemOperationHelper.Create( @AskQuestion, @RaiseAbortOperation, @AppProcessMessages, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, Thread, fsohmMove, TargetPath, FStatistics); FOperationHelper.Verify := FVerify; FOperationHelper.RenameMask := RenameMask; FOperationHelper.CopyOnWrite := FCopyOnWrite; FOperationHelper.ReserveSpace := FReserveSpace; FOperationHelper.CheckFreeSpace := CheckFreeSpace; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.SkipAllBigFiles := SkipAllBigFiles; FOperationHelper.CorrectSymLinks := CorrectSymLinks; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.SetPropertyError := SetPropertyError; FOperationHelper.Initialize; end; procedure TFileSystemMoveOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TFileSystemMoveOperation.SetSearchTemplate(AValue: TSearchTemplate); begin FSearchTemplate.Free; FSearchTemplate := AValue; end; function TFileSystemMoveOperation.Recursive: Boolean; begin // First check that both paths on the same volume if not mbFileSameVolume(ExcludeTrailingBackslash(SourceFiles.Path), ExcludeTrailingBackslash(TargetPath)) then begin Exit(True); end; if ((RenameMask <> '*.*') and (RenameMask <> '')) or (FCorrectSymlinks) or Assigned(FSearchTemplate) then begin Exit(True); end; Result:= False; end; procedure TFileSystemMoveOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FreeAndNil(FOperationHelper); end; class function TFileSystemMoveOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TFileSystemMoveOperationOptionsUI; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemlistoperation.pas0000644000175000001440000000425115104114162025760 0ustar alexxusersunit uFileSystemListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource ; type { TFileSystemListOperation } TFileSystemListOperation = class(TFileSourceListOperation) private procedure FlatView(const APath: String); public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses DCOSUtils, uFile, uFindEx, uOSUtils, uFileSystemFileSource; procedure TFileSystemListOperation.FlatView(const APath: String); var AFile: TFile; sr: TSearchRecEx; begin try if FindFirstEx(APath + '*', 0, sr) = 0 then repeat CheckOperationState; if (sr.Name = '.') or (sr.Name = '..') then Continue; if FPS_ISDIR(sr.Attr) then FlatView(APath + sr.Name + DirectorySeparator) else begin AFile := TFileSystemFileSource.CreateFile(APath, @sr); FFiles.Add(AFile); end; until FindNextEx(sr) <> 0; finally FindCloseEx(sr); end; end; constructor TFileSystemListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); inherited Create(aFileSource, aPath); end; procedure TFileSystemListOperation.MainExecute; var AFile: TFile; sr: TSearchRecEx; IsRootPath, Found: Boolean; begin FFiles.Clear; if FFlatView then begin FlatView(Path); Exit; end; IsRootPath := FileSource.IsPathAtRoot(Path); Found := FindFirstEx(FFiles.Path + '*', 0, sr) = 0; try if not Found then begin { No files have been found. } if not IsRootPath then begin AFile := TFileSystemFileSource.CreateFile(Path); AFile.Name := '..'; AFile.Attributes := faFolder; FFiles.Add(AFile); end; end else begin repeat CheckOperationState; if sr.Name='.' then Continue; // Don't include '..' in the root directory. if (sr.Name='..') and IsRootPath then Continue; AFile := TFileSystemFileSource.CreateFile(Path, @sr); FFiles.Add(AFile); until FindNextEx(sr)<>0; end; finally FindCloseEx(sr); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemfilesource.pas0000644000175000001440000010423515104114162025227 0ustar alexxusersunit uFileSystemFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uLocalFileSource, uFileSource, uFileSourceProperty, uFileProperty, uFile, uDescr, DCBasicTypes, DCStrUtils, uFindEx ; type {en Real file system. } IFileSystemFileSource = interface(ILocalFileSource) ['{59EDCF45-F151-4AE2-9DCE-3586E6191496}'] end; { TFileSystemFileSource } TFileSystemFileSource = class(TLocalFileSource, IFileSystemFileSource) private FDescr: TDescription; protected function GetCurrentWorkingDirectory: String; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; procedure DoReload(const PathsToReload: TPathsArray); override; public constructor Create; override; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; pSearchRecord: PSearchRecEx): TFile; overload; {en Creates a file object using an existing file/directory as a template. All the properties will reflect the existing file. @param(FilePath denotes absolute path to a file to use as a template.) } class function CreateFileFromFile(const aFilePath: String): TFile; {en Creates file list from a list of template files. @param(APath Path to which the files names are relative.) @param(FileNamesList A list of absolute paths to files.) @param(OmitNotExisting If @true then silently omits not existing files. If @false an exception is raised when file not exists.) } class function CreateFilesFromFileList(const APath: String; const FileNamesList: TStringList; OmitNotExisting: Boolean = False): TFiles; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); override; class function GetFileSource: IFileSystemFileSource; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetProperties: TFileSourceProperties; override; function IsPathAtRoot(Path: String): Boolean; override; function GetParentDir(sPath : String): String; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetPathType(sPath : String): TPathType; override; function CreateDirectory(const Path: String): Boolean; override; function FileSystemEntryExists(const Path: String): Boolean; override; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; override; function CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; // ------------------------------------------------------ property Description: TDescription read FDescr; end; { TFileSystemFileSourceConnection } TFileSystemFileSourceConnection = class(TFileSourceConnection) protected procedure SetCurrentPath(NewPath: String); override; end; implementation uses uOSUtils, DCOSUtils, DCDateTimeUtils, uGlobs, uGlobsPaths, uLog, uLng, {$IFDEF MSWINDOWS} DCWindows, uMyWindows, Windows, {$ENDIF} {$IFDEF UNIX} BaseUnix, uUsersGroups, LazUTF8, DCUnix, uMyUnix, {$IFDEF DARWIN} uMyDarwin, {$ENDIF} {$IFDEF LINUX} statx, {$ENDIF} {$ENDIF} uFileFunctions, uFileSystemListOperation, uFileSystemCopyOperation, uFileSystemMoveOperation, uFileSystemDeleteOperation, uFileSystemWipeOperation, uFileSystemSplitOperation, uFileSystemCombineOperation, uFileSystemCreateDirectoryOperation, uFileSystemExecuteOperation, uFileSystemCalcChecksumOperation, uFileSystemCalcStatisticsOperation, uFileSystemSetFilePropertyOperation; {$IF DEFINED(MSWINDOWS)} procedure SetOwner(AFile: TFile); var sUser, sGroup: String; begin with AFile do begin OwnerProperty := TFileOwnerProperty.Create; if GetFileOwner(FullPath, sUser, sGroup) then begin OwnerProperty.OwnerStr := sUser; OwnerProperty.GroupStr := sGroup; end; end; end; procedure FillLinkProperty(const AFilePath: String; AFile: TFile; FindData: PWin32FindDataW); var LinkAttrs: TFileAttrs; begin with AFile do begin LinkProperty.LinkTo := ReadSymLink(AFilePath); if (FindData^.dwReserved0 = IO_REPARSE_TAG_SYMLINK) or (FindData^.dwReserved0 = IO_REPARSE_TAG_MOUNT_POINT) then begin if (FindData^.dwReserved0 = IO_REPARSE_TAG_MOUNT_POINT) and (StrBegins(LinkProperty.LinkTo, 'Volume{')) then begin LinkProperty.IsLinkToDirectory := True; LinkProperty.IsValid:= mbDriveReady(AFilePath + PathDelim); end else begin LinkAttrs := mbFileGetAttrNoLinks(AFilePath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs) else begin // On Windows links to directories are marked with Directory flag on the link. LinkProperty.IsLinkToDirectory := fpS_ISDIR(FindData^.dwFileAttributes); end; end; end // Unknown reparse point type else begin AttributesProperty.Value:= AttributesProperty.Value - FILE_ATTRIBUTE_REPARSE_POINT; end; end; end; procedure FillFromFindData( AFile: TFile; AFilePath: String; pFindData: PWIN32FINDDATAW); begin with AFile do begin AttributesProperty := TNtfsFileAttributesProperty.Create( ExtractFileAttributes(pFindData^)); SizeProperty := TFileSizeProperty.Create( QWord(pFindData^.nFileSizeHigh) shl 32 + pFindData^.nFileSizeLow); ModificationTimeProperty := TFileModificationDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftLastWriteTime)); CreationTimeProperty := TFileCreationDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftCreationTime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftLastAccessTime)); LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(AttributesProperty.Value) then begin FillLinkProperty(AFilePath, AFile, pFindData); end; end; end; {$ELSEIF DEFINED(UNIX)} procedure FillFromStat( AFile: TFile; AFilePath: String; pStatInfo: PDCStat); var LinkStatInfo: BaseUnix.Stat; begin with AFile do begin AttributesProperty := TUnixFileAttributesProperty.Create(pStatInfo^.st_mode); if fpS_ISDIR(pStatInfo^.st_mode) then // On Unix a size for directory entry on filesystem is returned in StatInfo. // We don't want to use it. SizeProperty := TFileSizeProperty.Create(0) else SizeProperty := TFileSizeProperty.Create(Int64(pStatInfo^.st_size)); ModificationTimeProperty := TFileModificationDateTimeProperty.Create( FileTimeToDateTimeEx(pStatInfo^.mtime)); Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTimeEx(pStatInfo^.ctime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTimeEx(pStatInfo^.atime)); LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(pStatInfo^.st_mode) then begin LinkProperty.LinkTo := ReadSymLink(AFilePath); // Stat (as opposed to Lstat) will take info of the file that the link points to (recursively). LinkProperty.IsValid := fpStat(UTF8ToSys(AFilePath), LinkStatInfo) = 0; if LinkProperty.IsValid then begin LinkProperty.IsLinkToDirectory := FPS_ISDIR(LinkStatInfo.st_mode); if LinkProperty.IsLinkToDirectory then SizeProperty.Value := 0; end; end; end; end; {$ELSE} procedure FillFromSearchRecord( AFile: TFile; AFilePath: String; pSearchRecord: PSearchRecEx; PropertiesToSet: TFilePropertiesTypes = []); begin with AFile do begin AttributesProperty := TFileAttributesProperty.Create(pSearchRecord^.Attr); SizeProperty := TFileSizeProperty.Create(pSearchRecord^.Size); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(pSearchRecord^.Time); CreationTimeProperty := TFileCreationDateTimeProperty.Create(pSearchRecord^.Time); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(pSearchRecord^.Time); LinkProperty := TFileLinkProperty.Create; end; end; {$ENDIF} // ---------------------------------------------------------------------------- constructor TFileSystemFileSource.Create; begin inherited Create; FDescr := TDescription.Create(False); FOperationsClasses[fsoList] := TFileSystemListOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TFileSystemCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TFileSystemCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TFileSystemCopyOutOperation.GetOperationClass; FOperationsClasses[fsoMove] := TFileSystemMoveOperation.GetOperationClass; FOperationsClasses[fsoDelete] := TFileSystemDeleteOperation.GetOperationClass; FOperationsClasses[fsoWipe] := TFileSystemWipeOperation.GetOperationClass; FOperationsClasses[fsoCombine] := TFileSystemCombineOperation.GetOperationClass; FOperationsClasses[fsoCreateDirectory] := TFileSystemCreateDirectoryOperation.GetOperationClass; FOperationsClasses[fsoCalcChecksum] := TFileSystemCalcChecksumOperation.GetOperationClass; FOperationsClasses[fsoCalcStatistics] := TFileSystemCalcStatisticsOperation.GetOperationClass; FOperationsClasses[fsoSetFileProperty] := TFileSystemSetFilePropertyOperation.GetOperationClass; FOperationsClasses[fsoExecute] := TFileSystemExecuteOperation.GetOperationClass; end; destructor TFileSystemFileSource.Destroy; begin inherited Destroy; FDescr.Free; end; class function TFileSystemFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TFileSystemFileSource.CreateFile(const APath: String; pSearchRecord: PSearchRecEx): TFile; var AFilePath: String; LinkAttrs: TFileAttrs; begin Result := TFile.Create(APath); with Result do begin {$IF DEFINED(UNIX)} ChangeTimeProperty := TFileChangeDateTimeProperty.Create(UnixFileTimeToDateTimeEx(pSearchRecord^.FindData.ctime)); {$IF DEFINED(DARWIN)} CreationTimeProperty := TFileCreationDateTimeProperty.Create(UnixFileTimeToDateTimeEx(pSearchRecord^.FindData.birthtime)); {$ENDIF} ModificationTimeProperty := TFileModificationDateTimeProperty.Create(UnixFileTimeToDateTimeEx(pSearchRecord^.FindData.mtime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(UnixFileTimeToDateTimeEx(pSearchRecord^.FindData.atime)); {$ELSE} CreationTimeProperty := TFileCreationDateTimeProperty.Create(DCBasicTypes.TFileTime(pSearchRecord^.PlatformTime)); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(pSearchRecord^.Time); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(DCBasicTypes.TFileTime(pSearchRecord^.LastAccessTime)); {$ENDIF} SizeProperty := TFileSizeProperty.Create(pSearchRecord^.Size); AttributesProperty := TFileAttributesProperty.CreateOSAttributes(pSearchRecord^.Attr); LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(pSearchRecord^.Attr) then begin AFilePath:= Path + pSearchRecord^.Name; {$IF DEFINED(MSWINDOWS)} FillLinkProperty(AFilePath, Result, @pSearchRecord^.FindData); {$ELSE} LinkAttrs := mbFileGetAttrNoLinks(AFilePath); LinkProperty.LinkTo := ReadSymLink(AFilePath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then begin LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs); if LinkProperty.IsLinkToDirectory then SizeProperty.Value := 0; end; {$ENDIF} end; end; // Set name after assigning Attributes property, because it is used to get extension. Result.Name := pSearchRecord^.Name; end; class function TFileSystemFileSource.CreateFileFromFile(const aFilePath: String): TFile; var {$IF DEFINED(MSWINDOWS)} FindData: TWIN32FINDDATAW; FindHandle: THandle; {$ELSEIF DEFINED(UNIX)} StatInfo: TDCStat; {$ELSE} SearchRecord: TSearchRecEx; FindResult: Longint; {$ENDIF} begin Result := nil; {$IF DEFINED(MSWINDOWS)} FindHandle := FindFirstFileW(PWideChar(UTF16LongName(aFilePath)), @FindData); if FindHandle = INVALID_HANDLE_VALUE then raise EFileNotFound.Create(aFilePath); Windows.FindClose(FindHandle); FindData.dwFileAttributes:= ExtractFileAttributes(FindData); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromFindData(Result, aFilePath, @FindData); {$ELSEIF DEFINED(UNIX)} if DC_fpLstat(UTF8ToSys(AFilePath), StatInfo) = -1 then raise EFileNotFound.Create(aFilePath); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromStat(Result, aFilePath, @StatInfo); {$ELSE} FindResult := FindFirstEx(aFilePath, 0, SearchRecord); try if FindResult <> 0 then raise EFileNotFound.Create(aFilePath); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromSearchRecord(Result, aFilePath, @SearchRecord); finally FindCloseEx(SearchRecord); end; {$ENDIF} // Set name after assigning Attributes property, because it is used to get extension. Result.FullPath := aFilePath; end; class function TFileSystemFileSource.CreateFilesFromFileList( const APath: String; const FileNamesList: TStringList; OmitNotExisting: Boolean): TFiles; var i: Integer; begin Result := TFiles.Create(APath); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then begin for i := 0 to FileNamesList.Count - 1 do begin try Result.Add(CreateFileFromFile(FileNamesList[i])); except on EFileNotFound do if not OmitNotExisting then begin FreeAndNil(Result); raise; end; on Exception do begin FreeAndNil(Result); raise; end; end; end; end; end; procedure TFileSystemFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes; const AVariantProperties: array of String); var AIndex: Integer; sFullPath: String; Attrs: TFileAttrs; AProp: TFilePropertyType; AProps: TFilePropertiesTypes; AVariant: TFileVariantProperty; {$IF DEFINED(LINUX)} StatXInfo: TStatX; {$ENDIF} {$IF DEFINED(UNIX)} StatInfo: TDCStat; LinkInfo: BaseUnix.Stat; //buffer for stat info {$ELSEIF DEFINED(MSWINDOWS)} FindData: TWIN32FINDDATAW; FindHandle: THandle; {$ELSE} SearchRec: TSearchRecEx; {$ENDIF} begin AProps := AFile.AssignedProperties; // Omit properties that are already assigned. PropertiesToSet := PropertiesToSet - AProps; if PropertiesToSet = [] then Exit; // Already have requested properties. // Assume that Name property is always present. sFullPath := AFile.FullPath; with AFile do begin {$IF DEFINED(MSWINDOWS)} // Check if need to get file info record. if ([fpAttributes, fpSize, fpModificationTime, fpCreationTime, fpLastAccessTime] * PropertiesToSet <> []) or ((fpLink in PropertiesToSet) and (not (fpAttributes in AProps))) then begin FindHandle := FindFirstFileW(PWideChar(UTF16LongName(sFullPath)), @FindData); if FindHandle = INVALID_HANDLE_VALUE then raise EFileNotFound.Create(sFullPath); Windows.FindClose(FindHandle); FindData.dwFileAttributes:= ExtractFileAttributes(FindData); if not (fpAttributes in AProps) then AttributesProperty := TNtfsFileAttributesProperty.Create( FindData.dwFileAttributes); if not (fpSize in AProps) then SizeProperty := TFileSizeProperty.Create( QWord(FindData.nFileSizeHigh) shl 32 + FindData.nFileSizeLow); if not (fpModificationTime in AProps) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftLastWriteTime)); if not (fpCreationTime in AProps) then CreationTimeProperty := TFileCreationDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftCreationTime)); if not (fpLastAccessTime in AProps) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftLastAccessTime)); end; if fpLink in PropertiesToSet then begin Attrs := Attributes; LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(Attrs) then begin FillLinkProperty(sFullPath, AFile, @FindData); end; end; if fpOwner in PropertiesToSet then begin SetOwner(AFile); end; if fpType in PropertiesToSet then begin TypeProperty := TFileTypeProperty.Create; TypeProperty.Value := GetFileDescription(sFullPath); end; if fpCompressedSize in PropertiesToSet then begin CompressedSizeProperty := TFileCompressedSizeProperty.Create; CompressedSizeProperty.Value := mbGetCompressedFileSize(sFullPath); end; if fpChangeTime in PropertiesToSet then begin ChangeTimeProperty := TFileChangeDateTimeProperty.Create(MinDateTime); ChangeTimeProperty.IsValid := mbGetFileChangeTime(sFullPath, FindData.ftCreationTime); if ChangeTimeProperty.IsValid then begin ChangeTimeProperty.Value := WinFileTimeToDateTime(FindData.ftCreationTime); end; end; {$ELSEIF DEFINED(UNIX)} if ([fpAttributes, fpSize, fpModificationTime, fpChangeTime, fpLastAccessTime, fpOwner] * PropertiesToSet <> []) or ((uFileProperty.fpLink in PropertiesToSet) and (not (fpAttributes in AssignedProperties))) then begin if DC_fpLStat(UTF8ToSys(sFullPath), StatInfo) = -1 then raise EFileNotFound.Create(sFullPath); if not (fpAttributes in AssignedProperties) then AttributesProperty := TUnixFileAttributesProperty.Create(StatInfo.st_mode); if not (fpSize in AssignedProperties) then begin if fpS_ISDIR(StatInfo.st_mode) then // On Unix a size for directory entry on filesystem is returned in StatInfo. // We don't want to use it. SizeProperty := TFileSizeProperty.Create(0) else SizeProperty := TFileSizeProperty.Create(Int64(StatInfo.st_size)); end; if not (fpModificationTime in AssignedProperties) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create( FileTimeToDateTimeEx(StatInfo.mtime)); if not (fpChangeTime in AssignedProperties) then Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTimeEx(StatInfo.ctime)); if not (fpLastAccessTime in AssignedProperties) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTimeEx(StatInfo.atime)); {$IF DEFINED(DARWIN)} if not (fpCreationTime in AssignedProperties) then CreationTimeProperty := TFileCreationDateTimeProperty.Create( FileTimeToDateTimeEx(StatInfo.birthtime)); {$ENDIF} end; if uFileProperty.fpLink in PropertiesToSet then begin Attrs := Attributes; LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(Attrs) then begin LinkProperty.LinkTo := ReadSymLink(sFullPath); // Stat (as opposed to Lstat) will take info of the file that the link points to (recursively). LinkProperty.IsValid := fpStat(UTF8ToSys(sFullPath), LinkInfo) = 0; if LinkProperty.IsValid then begin LinkProperty.IsLinkToDirectory := FPS_ISDIR(LinkInfo.st_mode); end; end; end; if fpOwner in PropertiesToSet then begin OwnerProperty := TFileOwnerProperty.Create; OwnerProperty.Owner := StatInfo.st_uid; OwnerProperty.Group := StatInfo.st_gid; OwnerProperty.OwnerStr := UIDToStr(StatInfo.st_uid); OwnerProperty.GroupStr := GIDToStr(StatInfo.st_gid); end; if fpType in PropertiesToSet then begin TypeProperty := TFileTypeProperty.Create; {$IF DEFINED(DARWIN)} TypeProperty.Value:= GetFileDescription(sFullPath); {$ELSE} TypeProperty.Value:= GetFileMimeType(sFullPath); {$ENDIF} end; {$IF DEFINED(LINUX)} if fpCreationTime in PropertiesToSet then begin CreationTimeProperty := TFileCreationDateTimeProperty.Create(MinDateTime); CreationTimeProperty.IsValid := HasStatX and (fpstatx(0, sFullPath, 0, STATX_BTIME, @StatXInfo) >= 0) and (StatXInfo.stx_mask and STATX_BTIME <> 0) and (StatXInfo.stx_btime.tv_sec > 0); if CreationTimeProperty.IsValid then begin CreationTimeProperty.Value:= FileTimeToDateTimeEx(TFileTimeEx.Create(Int64(StatXInfo.stx_btime.tv_sec), Int64(StatXInfo.stx_btime.tv_nsec))); end; end; {$ENDIF} {$ELSE} if FindFirstEx(sFullPath, 0, SearchRec) = -1 then raise EFileNotFound.Create(sFullPath); if not (fpAttributes in AssignedProperties) then AttributesProperty := TFileAttributesProperty.Create(SearchRec.Attr); if not (fpSize in AssignedProperties) then SizeProperty := TFileSizeProperty.Create(SearchRec.Size); if not (fpModificationTime in AssignedProperties) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create(SearchRec.Time); if not (fpCreationTime in AssignedProperties) then CreationTimeProperty := TFileCreationDateTimeProperty.Create(SearchRec.Time); if not (fpLastAccessTime in AssignedProperties) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(SearchRec.Time); FindCloseEx(SearchRec); if fpLink in PropertiesToSet then LinkProperty := TFileLinkProperty.Create; if fpOwner in PropertiesToSet then OwnerProperty := TFileOwnerProperty.Create; if fpType in PropertiesToSet then TypeProperty := TFileTypeProperty.Create; {$ENDIF} if fpComment in PropertiesToSet then begin CommentProperty := TFileCommentProperty.Create; CommentProperty.Value := FDescr.ReadDescription(sFullPath); end; PropertiesToSet:= PropertiesToSet * fpVariantAll; for AProp in PropertiesToSet do begin AIndex:= Ord(AProp) - Ord(fpVariant); if (AIndex >= 0) and (AIndex <= High(AVariantProperties)) then begin AVariant:= TFileVariantProperty.Create(AVariantProperties[AIndex]); AVariant.Value:= GetVariantFileProperty(AVariantProperties[AIndex], AFile, Self); Properties[AProp]:= AVariant; end; end; end; end; class function TFileSystemFileSource.GetFileSource: IFileSystemFileSource; var aFileSource: IFileSource; begin aFileSource := FileSourceManager.Find(TFileSystemFileSource, ''); if not Assigned(aFileSource) then Result := TFileSystemFileSource.Create else Result := aFileSource as IFileSystemFileSource; end; function TFileSystemFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoCopy, fsoCopyIn, fsoCopyOut, fsoMove, fsoDelete, fsoWipe, fsoSplit, fsoCombine, fsoCreateDirectory, fsoCalcChecksum, fsoCalcStatistics, fsoSetFileProperty, fsoExecute]; end; function TFileSystemFileSource.GetProperties: TFileSourceProperties; begin Result := [ fspDirectAccess, fspListFlatView, fspNoneParent {$IFDEF UNIX} , fspCaseSensitive {$ENDIF} ]; end; function TFileSystemFileSource.GetCurrentWorkingDirectory: String; begin Result := mbGetCurrentDir(); if Result <> '' then Result := IncludeTrailingPathDelimiter(Result); end; function TFileSystemFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin if not mbDirectoryExists(NewDir) then Result := False else Result := mbSetCurrentDir(NewDir); end; procedure TFileSystemFileSource.DoReload(const PathsToReload: TPathsArray); begin FDescr.Reset; end; function TFileSystemFileSource.IsPathAtRoot(Path: String): Boolean; var sPath: String; begin sPath := ExcludeTrailingPathDelimiter(Path); if (Pos('\\', sPath) = 1) and (NumCountChars(PathDelim, sPath) = 3) then Exit(True); Result := (DCStrUtils.GetParentDir(Path) = ''); end; function TFileSystemFileSource.GetParentDir(sPath: String): String; begin Result:= inherited GetParentDir(sPath); Result:= GetDeepestExistingPath(Result); if Length(Result) = 0 then Result:= gpExePath; end; function TFileSystemFileSource.GetRootDir(sPath : String): String; begin Result := DCStrUtils.GetRootDir(sPath); end; function TFileSystemFileSource.GetRootDir: String; begin Result := Self.GetRootDir(mbGetCurrentDir); end; function TFileSystemFileSource.GetPathType(sPath : String): TPathType; begin Result := DCStrUtils.GetPathType(sPath); end; function TFileSystemFileSource.CreateDirectory(const Path: String): Boolean; begin Result := mbCreateDir(Path); if Result then begin if (log_dir_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess + rsMsgLogMkDir, [Path]), lmtSuccess); end else begin if (log_dir_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError + rsMsgLogMkDir, [Path]), lmtError); end; end; function TFileSystemFileSource.FileSystemEntryExists(const Path: String): Boolean; begin Result:= mbFileSystemEntryExists(Path); end; function TFileSystemFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := uOSUtils.GetDiskFreeSpace(Path, FreeSize, TotalSize); end; function TFileSystemFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, {$IF DEFINED(MSWINDOWS)} fpCreationTime, {$ELSE} fpChangeTime, {$ENDIF} fpLastAccessTime, uFileProperty.fpLink ]; end; function TFileSystemFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result := inherited GetRetrievableFileProperties + [fpSize, fpAttributes, fpModificationTime, {$IF DEFINED(MSWINDOWS)} fpCreationTime, {$ENDIF} fpChangeTime, fpLastAccessTime, uFileProperty.fpLink, fpOwner, fpType, fpComment {$IF DEFINED(MSWINDOWS)} , fpCompressedSize {$ENDIF} ] + fpVariantAll; {$IF DEFINED(LINUX)} if HasStatX then Result += [fpCreationTime]; {$ENDIF} end; function TFileSystemFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemListOperation.Create(TargetFileSource, TargetPath); end; function TFileSystemFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var FileSource: IFileSource; begin FileSource := Self; Result := TFileSystemCopyOperation.Create(FileSource, FileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCopyInOperation.Create( SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemCopyOutOperation.Create( SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemMoveOperation.Create(TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TFileSystemFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemWipeOperation.Create(TargetFileSource, FilesToWipe); end; function TFileSystemFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemSplitOperation.Create(SourceFileSource, aSourceFile, aTargetPath); end; function TFileSystemFileSource.CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemCombineOperation.Create(SourceFileSource, SourceFiles, aTargetFile); end; function TFileSystemFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCreateDirectoryOperation.Create(TargetFileSource, BasePath, DirectoryPath); end; function TFileSystemFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TFileSystemExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TFileSystemFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCalcChecksumOperation.Create( TargetFileSource, theFiles, aTargetPath, aTargetMask); end; function TFileSystemFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TFileSystemFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemSetFilePropertyOperation.Create( TargetFileSource, theTargetFiles, theNewProperties); end; { TFileSystemFileSourceConnection } procedure TFileSystemFileSourceConnection.SetCurrentPath(NewPath: String); begin if not mbDirectoryExists(NewPath) then NewPath := mbGetCurrentDir else mbSetCurrentDir(NewPath); inherited SetCurrentPath(NewPath); end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemexecuteoperation.pas0000644000175000001440000000472715104114162026457 0ustar alexxusersunit uFileSystemExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileSourceExecuteOperation, uFileSystemFileSource, uFile; type { TFileSystemExecuteOperation } TFileSystemExecuteOperation = class(TFileSourceExecuteOperation) private FFileSystemFileSource: IFileSystemFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses Forms, Controls, DCOSUtils, uOSUtils, uOSForms, uShellContextMenu, uExceptions; constructor TFileSystemExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FFileSystemFileSource := aTargetFileSource as IFileSystemFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TFileSystemExecuteOperation.Initialize; begin Screen.Cursor:= crHourGlass; end; procedure TFileSystemExecuteOperation.MainExecute; var aFiles: TFiles; begin if Verb = 'properties' then begin FExecuteOperationResult:= fseorSuccess; aFiles:= TFiles.Create(ExecutableFile.Path); try aFiles.Add(ExecutableFile.Clone); try Screen.Cursor:= crDefault; ShowFilePropertiesDialog(FFileSystemFileSource, aFiles); except on E: EContextMenuException do ShowException(E); end; finally FreeAndNil(aFiles); end; Exit; end; // if file is link to folder then return fseorSymLink if FileIsLinkToFolder(AbsolutePath, FResultString) then begin FExecuteOperationResult:= fseorSymLink; Exit; end; // try to open by system mbSetCurrentDir(CurrentPath); case ShellExecute(AbsolutePath) of True: FExecuteOperationResult:= fseorSuccess; False: FExecuteOperationResult:= fseorError; end; end; procedure TFileSystemExecuteOperation.Finalize; begin Screen.Cursor:= crDefault; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemdeleteoperation.pas0000644000175000001440000003156515104114162026257 0ustar alexxusersunit uFileSystemDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uDescr, uGlobs, uLog; type { TFileSystemDeleteOperation } TFileSystemDeleteOperation = class(TFileSourceDeleteOperation) private FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics FDescription: TDescription; // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FRecycle: Boolean; FDeleteReadOnly, FDeleteDirectly: TFileSourceOperationOptionGeneral; procedure DeleteSubDirectory(const aFile: TFile); protected procedure ProcessFile(aFile: TFile); procedure ProcessList(aFiles: TFiles); function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; // For delete to trash property Recycle : boolean read FRecycle write FRecycle default false; property DeleteReadOnly: TFileSourceOperationOptionGeneral read FDeleteReadOnly write FDeleteReadOnly; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; property SkipErrors: Boolean read FSkipErrors write FSkipErrors; end; implementation uses DCOSUtils, DCStrUtils, uLng, uFileSystemUtil, uTrash, uAdministrator {$IF DEFINED(MSWINDOWS)} , Windows, uFileUnlock, fFileUnlock, uSuperUser {$ENDIF} ; constructor TFileSystemDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := gSkipFileOpError; FRecycle := False; FDeleteReadOnly := fsoogNone; FDeleteDirectly:= fsoogNone; if gProcessComments then FDescription := TDescription.Create(True); inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TFileSystemDeleteOperation.Destroy; begin inherited Destroy; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; if not FRecycle then begin FreeAndNil(FFullFilesTreeToDelete); end; end; procedure TFileSystemDeleteOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if FRecycle then begin FFullFilesTreeToDelete:= FilesToDelete; FStatistics.TotalFiles:= FFullFilesTreeToDelete.Count; end else begin FillAndCount(FilesToDelete, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; if gProcessComments then FDescription.Clear; {$IF DEFINED(MSWINDOWS)} if (ElevateAction = dupIgnore) then ElevateAction:= dupError; {$ENDIF} end; procedure TFileSystemDeleteOperation.MainExecute; begin ProcessList(FFullFilesTreeToDelete); end; procedure TFileSystemDeleteOperation.Finalize; begin end; procedure TFileSystemDeleteOperation.DeleteSubDirectory(const aFile: TFile); var RootFiles: TFiles = nil; SubFiles: TFiles = nil; FilesCount, BytesCount: Int64; begin RootFiles := TFiles.Create(aFile.Path); try RootFiles.Add(aFile.Clone); // Only count statistics for subfiles because statistics for the root dir // have already been counted. FillAndCount(RootFiles, True, True, SubFiles, FilesCount, BytesCount); FStatistics.TotalFiles := FStatistics.TotalFiles + FilesCount; FStatistics.TotalBytes := FStatistics.TotalBytes + BytesCount; // Only now insert root directory. SubFiles.Insert(aFile.Clone, 0); // This function will only be called if deleting to trash failed // so we can assume Recycle is True. Turn off temporarily as we delete this subdirectory. FRecycle := False; ProcessList(SubFiles); finally RootFiles.Free; SubFiles.Free; FRecycle := True; end; end; procedure TFileSystemDeleteOperation.ProcessFile(aFile: TFile); const ResponsesError: array[0..3] of TFileSourceOperationUIResponse = (fsourRetry, fsourSkip, fsourSkipAll, fsourAbort); var FileName: String; bRetry: Boolean; LastError: Integer; RemoveDirectly: TFileSourceOperationOptionGeneral = fsoogNone; sMessage, sQuestion: String; logOptions: TLogOptions; DeleteResult: Boolean; PossibleResponses: array of TFileSourceOperationUIResponse; {$IF DEFINED(MSWINDOWS)} ProcessInfo: TProcessInfoArray; {$ENDIF} begin FileName := aFile.FullPath; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [WrapTextSimple(FileName)]), '', [fsourYes, fsourSkip, fsourAbort, fsourAll, fsourSkipAll], fsourYes, fsourAbort) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; fsourAbort: RaiseAbortOperation; end; fsoogNo: Exit; end; end; repeat bRetry := False; if (FRecycle = False) then begin if FileIsReadOnly(aFile.Attributes) then FileSetReadOnlyUAC(FileName, False); if aFile.IsDirectory then // directory begin DeleteResult := RemoveDirectoryUAC(FileName); end else begin // files and other stuff DeleteResult := DeleteFileUAC(FileName); end; end else begin // Delete to trash (one function for file and folder) DeleteResult:= FileTrashUtf8(FileName); if not DeleteResult then begin DeleteResult:= not mbFileSystemEntryExists(FileName); end; if not DeleteResult then begin case FDeleteDirectly of fsoogNone: begin case AskQuestion(Format(rsMsgDelToTrashForce, [WrapTextSimple(FileName)]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll, fsourAbort], fsourYes, fsourAbort) of fsourYes: RemoveDirectly:= fsoogYes; fsourAll: begin FDeleteDirectly := fsoogYes; RemoveDirectly:= fsoogYes; end; fsourSkip: RemoveDirectly:= fsoogNo; fsourSkipAll: begin FDeleteDirectly := fsoogNo; RemoveDirectly:= fsoogNo; end; fsourAbort: RaiseAbortOperation; end; end; fsoogYes: RemoveDirectly:= fsoogYes; fsoogNo: RemoveDirectly:= fsoogNo; end; if RemoveDirectly = fsoogYes then begin if aFile.IsLink and aFile.IsDirectory then begin DeleteResult := RemoveDirectoryUAC(FileName); end else if aFile.IsDirectory then // directory begin DeleteSubDirectory(aFile); // This directory has already been processed. Exit; end else // files and other stuff begin DeleteResult := DeleteFileUAC(FileName); end; end; end; end; if DeleteResult then begin // success // process comments if need if gProcessComments then begin FDescription.DeleteDescription(FileName); if mbCompareFileNames(aFile.Name, DESCRIPT_ION) then FDescription.Reset; end; if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [FileName]), [log_dir_op, log_delete], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_delete], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_dir_op, log_delete]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [FileName]); sQuestion := Format(rsMsgCannotDeleteDirectory, [FileName]); end else begin logOptions := [log_delete]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end; if FSkipErrors or (RemoveDirectly = fsoogNo) then LogMessage(sMessage, logOptions, lmtError) else begin if (FRecycle = False) or (RemoveDirectly = fsoogYes) then begin LastError:= GetLastOSError; {$IF DEFINED(MSWINDOWS)} if GetFileInUseProcessFast(FileName, ProcessInfo) then begin sQuestion+= LineEnding + LineEnding + rsMsgOpenInAnotherProgram + LineEnding; sQuestion+= LineEnding + Format(rsMsgProcessId, [ProcessInfo[0].ProcessId]) + LineEnding; if (Length(ProcessInfo[0].ApplicationName) > 0) then begin sQuestion+= Format(rsMsgApplicationName, [ProcessInfo[0].ApplicationName]) + LineEnding; end; if (Length(ProcessInfo[0].ExecutablePath) > 0) then begin sQuestion+= Format(rsMsgExecutablePath, [ProcessInfo[0].ExecutablePath]) + LineEnding; end; end else {$ENDIF} sQuestion+= LineEnding + mbSysErrorMessage(LastError); end; {$IF DEFINED(MSWINDOWS)} if (ElevateAction <> dupAccept) and ElevationRequired(LastError) then begin SetLength(PossibleResponses, Length(ResponsesError) + 1); Move(ResponsesError[0], PossibleResponses[0], SizeOf(ResponsesError)); PossibleResponses[High(PossibleResponses)]:= fsourRetryAdmin; end else {$ENDIF} begin SetLength(PossibleResponses, Length(ResponsesError)); Move(ResponsesError[0], PossibleResponses[0], SizeOf(ResponsesError)); end; {$IF DEFINED(MSWINDOWS)} if (Length(ProcessInfo) > 0) or (LastError = ERROR_ACCESS_DENIED) or (LastError = ERROR_SHARING_VIOLATION) then begin SetLength(PossibleResponses, Length(PossibleResponses) + 1); PossibleResponses[High(PossibleResponses)]:= fsourUnlock; end; {$ENDIF} case AskQuestion(sQuestion, '', PossibleResponses, fsourRetry, fsourAbort) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; {$IF DEFINED(MSWINDOWS)} fsourRetryAdmin: begin bRetry:= True; ElevateAction:= dupAccept; end; fsourUnlock: begin bRetry:= True; GetFileInUseProcessSlow(FileName, LastError, ProcessInfo); ShowUnlockForm(ProcessInfo); end; {$ENDIF} end; end; end; until bRetry = False; end; procedure TFileSystemDeleteOperation.ProcessList(aFiles: TFiles); var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := aFiles.Count - 1 downto 0 do begin aFile := aFiles[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; end; UpdateStatistics(FStatistics); AppProcessMessages(); CheckOperationState; end; end; function TFileSystemDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if FSkipErrors then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TFileSystemDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemcreatedirectoryoperation.pas0000644000175000001440000000361515104114162030200 0ustar alexxusersunit uFileSystemCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource, uFileSystemFileSource; type TFileSystemCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) private FFileSystemFileSource: IFileSystemFileSource; public constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationUI, uLog, uLng, uGlobs, DCOSUtils, uAdministrator; constructor TFileSystemCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin FFileSystemFileSource := aTargetFileSource as IFileSystemFileSource; inherited Create(aTargetFileSource, aCurrentPath, aDirectoryPath); end; procedure TFileSystemCreateDirectoryOperation.Initialize; begin end; procedure TFileSystemCreateDirectoryOperation.MainExecute; begin if FileGetAttrUAC(AbsolutePath) <> faInvalidAttributes then begin AskQuestion(Format(rsMsgErrDirExists, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end else if ForceDirectoriesUAC(AbsolutePath) = False then begin if (log_dir_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); AskQuestion(Format(rsMsgErrForceDir, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end else begin if (log_dir_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir,[AbsolutePath]), lmtSuccess); end; end; procedure TFileSystemCreateDirectoryOperation.Finalize; begin end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemcopyoperation.pas0000644000175000001440000001741715104114162025767 0ustar alexxusersunit uFileSystemCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uFileSystemUtil, DCOSUtils, uSearchTemplate; type { TFileSystemCopyOperation } TFileSystemCopyOperation = class(TFileSourceCopyOperation) private FOperationHelper: TFileSystemOperationHelper; FExcludeEmptyTemplateDirectories: Boolean; FSearchTemplate: TSearchTemplate; FCopyOnWrite: TFileSourceOperationOptionGeneral; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options. FVerify, FReserveSpace, FCheckFreeSpace: Boolean; FSkipAllBigFiles: Boolean; FAutoRenameItSelf: Boolean; FCorrectSymLinks: Boolean; procedure SetSearchTemplate(AValue: TSearchTemplate); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property Verify: Boolean read FVerify write FVerify; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property AutoRenameItSelf: Boolean read FAutoRenameItSelf write FAutoRenameItSelf; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property CopyOnWrite: TFileSourceOperationOptionGeneral read FCopyOnWrite write FCopyOnWrite; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Operation takes ownership of assigned template and will free it. } property SearchTemplate: TSearchTemplate read FSearchTemplate write SetSearchTemplate; end; { Both operations are the same, just source and target reversed. Implement them in terms of the same functions, or have one use the other. } { TFileSystemCopyInOperation } TFileSystemCopyInOperation = class(TFileSystemCopyOperation) protected function GetID: TFileSourceOperationType; override; end; { TFileSystemCopyOutOperation } TFileSystemCopyOutOperation = class(TFileSystemCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses fFileSystemCopyMoveOperationOptions, uGlobs; // -- TFileSystemCopyOperation --------------------------------------------- constructor TFileSystemCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin // Here we can read global settings if there are any FSymLinkOption := gOperationOptionSymLinks; FSetPropertyError := gOperationOptionSetPropertyError; FReserveSpace := gOperationOptionReserveSpace; FCheckFreeSpace := gOperationOptionCheckFreeSpace; FSkipAllBigFiles := False; FAutoRenameItSelf := False; FCorrectSymLinks := gOperationOptionCorrectLinks; FExcludeEmptyTemplateDirectories := True; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); // Here we can read global settings if there are any FCopyOnWrite := gOperationOptionCopyOnWrite; FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyXattributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyXattributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; if gOperationOptionCopyPermissions then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyPermissions]; if gDropReadOnlyFlag then FCopyAttributesOptions := FCopyAttributesOptions + [caoRemoveReadOnlyAttr]; end; destructor TFileSystemCopyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); FreeAndNil(FOperationHelper); FreeAndNil(FSearchTemplate); end; procedure TFileSystemCopyOperation.Initialize; var TreeBuilder: TFileSystemTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TFileSystemTreeBuilder.Create( @AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := Self.SymLinkOption; TreeBuilder.SearchTemplate := Self.SearchTemplate; TreeBuilder.ExcludeEmptyTemplateDirectories := Self.ExcludeEmptyTemplateDirectories; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; if FVerify then FStatistics.TotalBytes := FStatistics.TotalBytes * 2; finally FreeAndNil(TreeBuilder); end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TFileSystemOperationHelper.Create( @AskQuestion, @RaiseAbortOperation, @AppProcessMessages, @CheckOperationState, @UpdateStatistics, @ShowCompareFilesUI, Thread, fsohmCopy, TargetPath, FStatistics); FOperationHelper.Verify := FVerify; FOperationHelper.RenameMask := RenameMask; FOperationHelper.CopyOnWrite := FCopyOnWrite; FOperationHelper.ReserveSpace := FReserveSpace; FOperationHelper.CheckFreeSpace := CheckFreeSpace; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.SkipAllBigFiles := SkipAllBigFiles; FOperationHelper.AutoRenameItSelf := AutoRenameItSelf; FOperationHelper.CorrectSymLinks := CorrectSymLinks; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.SetPropertyError := SetPropertyError; FOperationHelper.Initialize; end; procedure TFileSystemCopyOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TFileSystemCopyOperation.SetSearchTemplate(AValue: TSearchTemplate); begin FSearchTemplate.Free; FSearchTemplate := AValue; end; procedure TFileSystemCopyOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FreeAndNil(FOperationHelper); end; class function TFileSystemCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TFileSystemCopyOperationOptionsUI; end; { TFileSystemCopyInOperation } function TFileSystemCopyInOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyIn; end; { TFileSystemCopyOutOperation } function TFileSystemCopyOutOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyOut; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemcombineoperation.pas0000644000175000001440000004334715104114162026432 0ustar alexxusersunit uFileSystemCombineOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCombineOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog, DCClassesUtf8; type { TFileSystemCombineOperation } TFileSystemCombineOperation = class(TFileSourceCombineOperation) private FFullFilesTreeToCombine: TFiles; // source files including all files FStatistics: TFileSourceCombineOperationStatistics; // local copy of statistics FTargetPath: String; FBuffer: Pointer; FBufferSize: LongWord; FCheckFreeSpace: Boolean; FExtensionLengthRequired : longint; protected function Combine(aSourceFile: TFile; aTargetFileStream: TFileStreamEx): Boolean; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function TryToGetInfoFromTheCRC32VerificationFile: Boolean; procedure BegForPresenceOfThisFile(aFilename: String); public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, LazUTF8, DCcrc32, //DC uOSUtils, DCOSUtils, uLng, uFileSystemUtil, uFileSystemFileSource, DCBasicTypes, uAdministrator, DCConvertEncoding; { TFileSystemCombineOperation.Create } constructor TFileSystemCombineOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); begin FFullFilesTreeToCombine := nil; FCheckFreeSpace := True; FTargetPath := ExtractFilePath(aTargetFile); FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); inherited Create(aFileSource, theSourceFiles, aTargetFile); end; { TFileSystemCombineOperation.Destroy } destructor TFileSystemCombineOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; if Assigned(FFullFilesTreeToCombine) then FreeAndNil(FFullFilesTreeToCombine); end; { TFileSystemCombineOperation.Initialize } procedure TFileSystemCombineOperation.Initialize; var MaybeFileIndex: integer; MaybeAdditionalSourceFilename: String; MaybeFile: TFile; begin // If we're under "RequireDynamicMode", we have just ONE file in "SourceFiles" list, // so let's see immediately if we would have the other ready... if RequireDynamicMode then begin // If we're under "RequireDynamicMode", we'll make sure the ".001" file is // the first one in the list and available. We need to do that since in main // panel we did not force user to select the ".001" file to make this // user friendly // // Also, since we're here, let''s try to see if we have other files // in the series ready in the current same folder. // It is pertinent to do that so the bar graph will be set as close // as possible right from the start as oppose as TC which don't have a global graph. FExtensionLengthRequired:=length(SourceFiles[0].Extension); MaybeFileIndex:=1; repeat MaybeAdditionalSourceFilename:=SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + Format('%.*d',[FExtensionLengthRequired, MaybeFileIndex]); if (FileExistsUAC(MaybeAdditionalSourceFilename)) OR (MaybeFileIndex=1) then begin //Let's make sure the first file is available and if not, beg for it! if (FileExistsUAC(MaybeAdditionalSourceFilename)=FALSE) AND (MaybeFileIndex=1) then BegForPresenceOfThisFile(MaybeAdditionalSourceFilename); MaybeFile := TFileSystemFileSource.CreateFileFromFile(MaybeAdditionalSourceFilename); SourceFiles.Add(MaybeFile); end; inc(MaybeFileIndex); until (not FileExistsUAC(MaybeAdditionalSourceFilename)) AND (MaybeFileIndex<>1); SourceFiles.Delete(0); //We may now delete the first one, which could have been any of the series end; //if RequireDynamicMode then... // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.CurrentFileTo:= TargetFile; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCombine, FStatistics.TotalFiles, FStatistics.TotalBytes); // count files //If we're under "RequireDynamicMode", check if we have a summary file like TC //We do that *after* the standard statistic in case we need to correct them from info in the summary file if RequireDynamicMode AND (not WeGotTheCRC32VerificationFile) then TryToGetInfoFromTheCRC32VerificationFile; end; { TFileSystemCombineOperation.MainExecute } procedure TFileSystemCombineOperation.MainExecute; var Attrs: TFileAttrs; aFile, DynamicNextFile: TFile; CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; TargetFileStream: TFileStreamUAC = nil; DynamicNextFilename : String; UserAnswer: TFileSourceOperationUIResponse; begin try { Check disk free space } if FCheckFreeSpace = True then begin GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if FStatistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; Attrs:= FileGetAttrUAC(TargetFile); if Attrs <> faInvalidAttributes then begin if FPS_ISDIR(Attrs) then begin AskQuestion(Format(rsMsgErrDirExists, [TargetFile]), '', [fsourAbort], fsourAbort, fsourAbort, nil); RaiseAbortOperation; end; if AskQuestion(Format(rsMsgFileExistsRwrt, [TargetFile]), '', [fsourOverwrite, fsourAbort], fsourOverwrite, fsourAbort, nil) <> fsourOverwrite then begin RaiseAbortOperation; end; end; // Create destination file TargetFileStream := TFileStreamUAC.Create(TargetFile, fmCreate); try CurrentFileIndex:=0; while (CurrentFileIndex=FFullFilesTreeToCombine.Count) then begin DynamicNextFilename:=SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + Format('%.*d',[FExtensionLengthRequired, (CurrentFileIndex+1)]); BegForPresenceOfThisFile(DynamicNextFilename); DynamicNextFile := TFileSystemFileSource.CreateFileFromFile(DynamicNextFilename); SourceFiles.Add(DynamicNextFile); FFullFilesTreeToCombine.Add(DynamicNextFile.Clone); end; aFile := FFullFilesTreeToCombine[CurrentFileIndex]; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Combine with current file if not Combine(aFile, TargetFileStream) then Break; with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; inc(CurrentFileIndex); end; finally if Assigned(TargetFileStream) then begin FreeAndNil(TargetFileStream); if (FStatistics.DoneBytes <> FStatistics.TotalBytes) then begin // There was some error, because not all files has been combined. // Delete the not completed target file. DeleteFileUAC(TargetFile); // In "RequireDynamicMode", to give little feedback to user, let's him know he won't have his file if RequireDynamicMode then begin ShowError(rsMsgLogError + Format(rsMsgIncorrectFilelength,[TargetFile])); end; end else begin // If all the data have been copied, in the case of the "RequireDynamicMode", we may validate the CRC32, // if it was available, so we could valide the integrity of resulting file if RequireDynamicMode AND (ExpectedCRC32<>$00000000) then begin if CurrentCRC32<>ExpectedCRC32 then begin UserAnswer:=AskQuestion('',rsMsgLogError + Format(rsMsgBadCRC32,[TargetFile]),[fsourNo,fsourYes], fsourNo, fsourNo); if UserAnswer=fsourNo then mbDeleteFile(TargetFile); RaiseAbortOperation; end; end; end; end; end; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + TargetFile); end; end; end; { TFileSystemCombineOperation.Finalize } procedure TFileSystemCombineOperation.Finalize; begin end; { TFileSystemCombineOperation.Combine } function TFileSystemCombineOperation.Combine(aSourceFile: TFile; aTargetFileStream: TFileStreamEx): Boolean; var SourceFileStream: TFileStreamUAC; iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; SourceFileStream := nil; // for safety exception handling try try SourceFileStream := TFileStreamUAC.Create(aSourceFile.FullPath, fmOpenRead or fmShareDenyNone); TotalBytesToRead := SourceFileStream.Size; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := SourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesWritten := 0; if BytesRead > 0 then begin CurrentCRC32:= crc32_16bytes(FBuffer, BytesRead, CurrentCRC32); end; repeat try bRetryWrite := False; BytesWrittenTry := aTargetFileStream.Write((FBuffer + BytesWritten)^, BytesRead); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesRead then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: RaiseAbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + TargetFile + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + aSourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end;//while finally if Assigned(SourceFileStream) then FreeAndNil(SourceFileStream); end; Result:= True; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + aSourceFile.FullPath); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + TargetFile); end; end; end; { TFileSystemCombineOperation.ShowError } procedure TFileSystemCombineOperation.ShowError(sMessage: String); begin if gSkipFileOpError then logWrite(Thread, sMessage, lmtError, True) else begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; { TFileSystemCombineOperation.LogMessage } procedure TFileSystemCombineOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; { TFileSystemCombineOperation.TryToGetInfroFromTheCRC32VerificationFile } function TFileSystemCombineOperation.TryToGetInfoFromTheCRC32VerificationFile: Boolean; var PosOfEqualSign: integer; MaybeSummaryFilename: String; SummaryLines: TStringListUAC; LineToParse: string; UserAnswer: TFileSourceOperationUIResponse; i: integer; begin Result:= False; //We just mimic TC who set in uppercase the "CRC" extension if the filename (without extension!) is made all with capital letters. if SourceFiles[0].NameNoExt = UTF8UpperCase(SourceFiles[0].NameNoExt) then MaybeSummaryFilename:= SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + 'CRC' else begin MaybeSummaryFilename:= SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + 'crc'; end; //If CRC32 verification file is not found, try to ask user to make it available for us or maybe continue without it if it is what user want UserAnswer:=fsourOk; while (not FileExistsUAC(MaybeSummaryFilename)) AND (UserAnswer=fsourOk) do begin UserAnswer:=AskQuestion(Format(msgTryToLocateCRCFile,[MaybeSummaryFilename]), '' , [fsourOk,fsourCancel], fsourOk, fsourCancel); end; if FileExistsUAC(MaybeSummaryFilename) then begin SummaryLines := TStringListUAC.Create; try SummaryLines.LoadFromFile(MaybeSummaryFilename); for i := 0 to SummaryLines.Count - 1 do begin LineToParse := SummaryLines[i]; PosOfEqualSign := UTF8Pos('=', LineToParse); if PosOfEqualSign > 0 then //Investiguate *only* if the equal sign is present begin // Let's see if we could extract final filename. // We first look for a UTF8 filename style. If so, take it, if not, search for the ANSI flavor if UTF8Pos('filenameutf8=', UTF8LowerCase(LineToParse)) > 0 then begin TargetFile:= ExtractFilePath(TargetFile) + UTF8Copy(LineToParse, (PosOfEqualSign + 1), MaxInt); end else begin if Pos('filename=', LowerCase(LineToParse)) > 0 then TargetFile:= ExtractFilePath(TargetFile) + CeSysToUtf8(Copy(LineToParse,(PosOfEqualSign + 1) ,MaxInt)); end; //Let's see if we could extract final filesize... if UTF8Pos('size=',UTF8LowerCase(LineToParse))>0 then FStatistics.TotalBytes:=StrToInt64(UTF8Copy(LineToParse,(PosOfEqualSign+1),(UTF8length(LineToParse)-PosOfEqualSign))); //Let's see if we could extract final CRC32... if UTF8Pos('crc32=',UTF8LowerCase(LineToParse))>0 then ExpectedCRC32:=StrToQWord('x'+UTF8Copy(LineToParse,(PosOfEqualSign+1),(UTF8length(LineToParse)-PosOfEqualSign))); end; end; finally SummaryLines.Free; end; WeGotTheCRC32VerificationFile:=TRUE; result:=TRUE; end; end; { TFileSystemCombineOperation.BegForPresenceOfThisFile } procedure TFileSystemCombineOperation.BegForPresenceOfThisFile(aFilename: String); begin while not FileExistsUAC(aFilename) do begin case AskQuestion(Format(rsMsgFileNotFound+#$0A+rsMsgProvideThisFile,[aFilename]), '', [fsourRetry, fsourAbort], fsourRetry, fsourAbort) of fsourAbort: RaiseAbortOperation; end; end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemcalcstatisticsoperation.pas0000644000175000001440000001225315104114162030023 0ustar alexxusersunit uFileSystemCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog; type TFileSystemCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FErrorCount: Integer; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessLink(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uFileSourceOperationOptions, DCOSUtils, uLng, uFindEx, uFileSystemFileSource, uFileProperty, uOSUtils; constructor TFileSystemCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); end; destructor TFileSystemCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TFileSystemCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TFileSystemCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; if (FStatistics.Size = 0) and (FErrorCount > 0) then begin FStatistics.Size := FOLDER_SIZE_ERRO; UpdateStatistics(FStatistics); end; end; procedure TFileSystemCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsLink then begin Inc(FStatistics.Links); case FSymLinkOption of fsooslFollow: ProcessLink(aFile); fsooslDontFollow: ; // do nothing fsooslNone: begin case AskQuestion('', Format(rsMsgFollowSymlink, [aFile.Name]), [fsourYes, fsourAll, fsourNo, fsourSkipAll], fsourYes, fsourNo) of fsourYes: ProcessLink(aFile); fsourAll: begin FSymLinkOption := fsooslFollow; ProcessLink(aFile); end; fsourNo: ; // do nothing fsourSkipAll: FSymLinkOption := fsooslDontFollow; end; end; end; end else if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TFileSystemCalcStatisticsOperation.ProcessLink(aFile: TFile); var PathToFile: String; aLinkFile: TFile = nil; begin PathToFile := mbReadAllLinks(aFile.FullPath); if PathToFile <> '' then begin try aLinkFile := TFileSystemFileSource.CreateFileFromFile(PathToFile); try ProcessFile(aLinkFile); finally FreeAndNil(aLinkFile); end; except on EFileNotFound do begin LogMessage(rsMsgErrInvalidLink + ': ' + aFile.FullPath + ' -> ' + PathToFile, [log_errors], lmtError); end; end; end else begin LogMessage(rsMsgErrInvalidLink + ': ' + aFile.FullPath + ' -> ' + PathToFile, [log_errors], lmtError); end; end; procedure TFileSystemCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var sr: TSearchRecEx; aFile: TFile; FindResult: Longint; begin FindResult := FindFirstEx(srcPath + '*', 0, sr); try if FindResult <> 0 then begin if AccessDenied(FindResult) then Inc(FErrorCount); end else repeat if (sr.Name='.') or (sr.Name='..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); try ProcessFile(aFile); finally FreeAndNil(aFile); end; CheckOperationState; until FindNextEx(sr) <> 0; finally FindCloseEx(sr); end; end; procedure TFileSystemCalcStatisticsOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ufilesystemcalcchecksumoperation.pas0000644000175000001440000004350415104114162027436 0ustar alexxusersunit uFileSystemCalcChecksumOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, uFileSourceCalcChecksumOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog, uHash, DCClassesUtf8; type { TFileSystemCalcChecksumOperation } TFileSystemCalcChecksumOperation = class(TFileSourceCalcChecksumOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCalcChecksumOperationStatistics; // local copy of statistics FCheckSumFile: TStringListEx; FBuffer: Pointer; FBufferSize: LongWord; FChecksumsList: TObjectList; // Options. FFileExistsOption: TFileSourceOperationOptionFileExists; FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; procedure InitializeVerifyMode; function SimpleFileChecksum: Boolean; procedure InitializeRightToLeft(const Path: String); procedure InitializeLeftToRight(const Path: String); procedure AddFile(const Path, FileName, Hash: String); function CheckSumCalc(aFile: TFile; out aValue: String): Boolean; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function CalcChecksumProcessFile(aFile: TFile): Boolean; function VerifyChecksumProcessFile(aFile: TFile; ExpectedChecksum: String): Boolean; function FileExists(var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses Math, Forms, LazUTF8, DCConvertEncoding, LConvEncoding, uLng, uFileSystemUtil, uFileSystemFileSource, DCOSUtils, DCStrUtils, uFileProcs, uDCUtils, uShowMsg; type TChecksumEntry = class public Checksum: String; Algorithm: THashAlgorithm; end; const SFV_HEADER = '; Generated by WIN-SFV32 v1.0'; DC_HEADER = '; (Compatible: Double Commander)'; constructor TFileSystemCalcChecksumOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); begin FBuffer := nil; FSymLinkOption := fsooslNone; FFileExistsOption := fsoofeNone; FSkipErrors := False; FFullFilesTree := nil; FCheckSumFile := TStringListEx.Create; FChecksumsList := TObjectList.Create(True); inherited Create(aTargetFileSource, theFiles, aTargetPath, aTargetMask); end; destructor TFileSystemCalcChecksumOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; FreeAndNil(FFullFilesTree); FreeAndNil(FCheckSumFile); FreeAndNil(FChecksumsList); end; procedure TFileSystemCalcChecksumOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; case Mode of checksum_calc: begin FillAndCount(Files, False, False, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) FCheckSumFile.TextLineBreakStyle:= TextLineBreakStyle; if (Algorithm = HASH_SFV) and OneFile then begin FCheckSumFile.Add(SFV_HEADER); FCheckSumFile.Add(DC_HEADER); end; end; checksum_verify: InitializeVerifyMode; end; FBufferSize := gHashBlockSize; GetMem(FBuffer, FBufferSize); end; procedure TFileSystemCalcChecksumOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; OldDoneBytes: Int64; // for if there was an error Entry: TChecksumEntry; TargetFileName: String; begin if OneFile and (Mode = checksum_calc) then begin TargetFileName:= TargetMask; case FileExists(TargetFileName) of fsoofeSkip: Exit; fsoofeOverwrite: ; end; end; for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; with FStatistics do begin CurrentFile := aFile.Path + aFile.Name; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // If there will be an error in ProcessFile the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; case Mode of checksum_calc: CalcChecksumProcessFile(aFile); checksum_verify: begin Entry := FChecksumsList.Items[CurrentFileIndex] as TChecksumEntry; Algorithm := Entry.Algorithm; VerifyChecksumProcessFile(aFile, Entry.Checksum); end; end; with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; end; CheckOperationState; end; case Mode of checksum_calc: // make result if OneFile then try CurrentFileIndex:= IfThen(Algorithm = HASH_SFV, 2, 0); if (FCheckSumFile.Count > CurrentFileIndex) then FCheckSumFile.SaveToFile(TargetFileName); except on E: EFCreateError do AskQuestion(rsMsgErrECreate + ' ' + TargetFileName + ':', E.Message, [fsourOk], fsourOk, fsourOk); on E: EWriteError do AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + ':', E.Message, [fsourOk], fsourOk, fsourOk); end; checksum_verify: begin end; end; end; procedure TFileSystemCalcChecksumOperation.Finalize; begin end; procedure TFileSystemCalcChecksumOperation.AddFile(const Path, FileName, Hash: String); var aFileToVerify: TFile; Entry: TChecksumEntry; begin try aFileToVerify := TFileSystemFileSource.CreateFileFromFile(Path + FileName); if not (aFileToVerify.IsDirectory or aFileToVerify.IsLinkToDirectory) then begin with FStatistics do begin TotalFiles := TotalFiles + 1; TotalBytes := TotalBytes + aFileToVerify.Size; end; FFullFilesTree.Add(aFileToVerify); Entry := TChecksumEntry.Create; FChecksumsList.Add(Entry); Entry.Checksum := Hash; Entry.Algorithm := Algorithm; end else FreeAndNil(aFileToVerify); except on EFileNotFound do begin AddString(FResult.Missing, FileName); end else begin FreeAndNil(aFileToVerify); raise; end; end; end; procedure TFileSystemCalcChecksumOperation.InitializeRightToLeft(const Path: String); var I: Integer; Hash, FileName: String; begin for I := 0 to FCheckSumFile.Count - 1 do begin // Skip empty lines if (Length(FCheckSumFile[I]) = 0) then Continue; // Skip comments if (FCheckSumFile[I][1] = ';') then Continue; FileName := FCheckSumFile[I]; Hash := Copy(FileName, Length(FileName) - 7, 8); FileName := Copy(FileName, 1, Length(FileName) - 9); AddFile(Path, FileName, Hash); CheckOperationState; end; end; procedure TFileSystemCalcChecksumOperation.InitializeLeftToRight(const Path: String); var I: Integer; FileName: String; HashType: Boolean = False; begin for I := 0 to FCheckSumFile.Count - 1 do begin // Skip empty lines if (Length(FCheckSumFile[I]) = 0) then Continue; // Skip comments if (FCheckSumFile[I][1] in [';', '#']) then Continue; // Determine hash type by length if (HashType = False) and (Algorithm = HASH_SHA3_224) then begin HashType := True; case Length(FCheckSumFile.Names[I]) of 56: ; // HASH_SHA3_224 64: Algorithm := HASH_SHA3_256; 96: Algorithm := HASH_SHA3_384; 128: Algorithm := HASH_SHA3_512; end; end; FileName := FCheckSumFile.ValueFromIndex[I]; if (Length(FileName) > 0) and (FileName[1] in [' ', '*']) then begin Delete(FileName, 1, 1); end; AddFile(Path, FileName, FCheckSumFile.Names[I]); CheckOperationState; end; end; function TFileSystemCalcChecksumOperation.SimpleFileChecksum: Boolean; var ATemp: Integer; ALeft, ARight: String; begin Result:= True; // Skip empty lines and comments while (FCheckSumFile.Count > 0) do begin ALeft:= FCheckSumFile[0]; if (Length(ALeft) = 0) or (ALeft[1] = ';') then FCheckSumFile.Delete(0) else Break; end; if (FCheckSumFile.Count > 0) then begin ALeft:= FCheckSumFile.Names[0]; ARight:= FCheckSumFile.ValueFromIndex[0]; // Old doublecmd version had generated .sfv file in the wrong format: // (hash *filename), try to determine file format for backward compatibility Result:= (Length(ALeft) <> 8) or (not TryStrToInt('$' + ALeft, ATemp)) or ((Length(ARight) > 0) and (ARight[1] <> '*')) or (TryStrToInt('$' + RightStr(ARight, 8), ATemp)); end; end; procedure TFileSystemCalcChecksumOperation.InitializeVerifyMode; var aFile: TFile; AText: String; Entry: TChecksumEntry; CurrentFileIndex: Integer; {$IF DEFINED(UNIX)} PText: PAnsiChar; {$ENDIF} begin FFullFilesTree := TFiles.Create(Files.Path); if Length(TargetPath) > 0 then begin aFile := Files[0].Clone; with FStatistics do begin TotalFiles := TotalFiles + 1; TotalBytes := TotalBytes + aFile.Size; end; FFullFilesTree.Add(aFile); Entry := TChecksumEntry.Create; FChecksumsList.Add(Entry); Entry.Checksum := TargetPath; Entry.Algorithm := Algorithm; CheckOperationState; Exit; end; FChecksumsList.Clear; for CurrentFileIndex := 0 to Files.Count - 1 do begin aFile := Files[CurrentFileIndex]; FCheckSumFile.Clear; FCheckSumFile.NameValueSeparator:= #32; AText:= mbReadFileToString(aFile.FullPath); {$IF DEFINED(UNIX)} if (GuessLineBreakStyle(AText) = tlbsCRLF) then begin PText:= PAnsiChar(AText); while (PText^ <> #0) do begin if (PText^ = '\') then PText^:= PathDelim; Inc(PText); end; end; {$ENDIF} if StrBegins(AText, UTF8BOM) then FCheckSumFile.Text:= Copy(AText, 4, MaxInt) else if FindInvalidUTF8Codepoint(PChar(AText), Length(AText), True) = -1 then FCheckSumFile.Text:= AText else begin FCheckSumFile.Text:= CeAnsiToUtf8(AText); end; if (FCheckSumFile.Count = 0) then Continue; Algorithm := FileExtToHashAlg(aFile.Extension); if (Algorithm = HASH_SFV) and (SimpleFileChecksum) then InitializeRightToLeft(aFile.Path) else begin InitializeLeftToRight(aFile.Path); end; end; end; function TFileSystemCalcChecksumOperation.CalcChecksumProcessFile(aFile: TFile): Boolean; const TextLineBreak: array[TTextLineBreakStyle] of String = ('/', '\', PathDelim); var FileName: String; sCheckSum: String; TargetFileName: String; begin Result := False; FileName := aFile.FullPath; if not OneFile then begin FCheckSumFile.Clear; if Algorithm = HASH_SFV then begin FCheckSumFile.Add(SFV_HEADER); FCheckSumFile.Add(DC_HEADER); end; TargetFileName:= FileName + '.' + HashFileExt[Algorithm]; case FileExists(TargetFileName) of fsoofeOverwrite: ; fsoofeSkip: Exit(True); end; end; if not CheckSumCalc(aFile, sCheckSum) then Exit; FileName:= ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name; if (TextLineBreak[TextLineBreakStyle] <> PathDelim) then begin FileName:= StringReplace(FileName, PathDelim, TextLineBreak[TextLineBreakStyle], [rfReplaceAll]); end; if Algorithm = HASH_SFV then begin FCheckSumFile.Add(FileName + ' ' + sCheckSum); end else begin FCheckSumFile.Add(sCheckSum + ' *' + FileName); end; if not OneFile then try FCheckSumFile.SaveToFile(TargetFileName); except on E: EFCreateError do AskQuestion(rsMsgErrECreate + ' ' + TargetFileName + LineEnding, E.Message, [fsourOk], fsourOk, fsourOk); on E: EWriteError do AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + LineEnding, E.Message, [fsourOk], fsourOk, fsourOk); end; end; function TFileSystemCalcChecksumOperation.VerifyChecksumProcessFile( aFile: TFile; ExpectedChecksum: String): Boolean; var sCheckSum: String; sFileName: String; begin Result:= False; sFileName:= ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name; if (CheckSumCalc(aFile, sCheckSum) = False) then AddString(FResult.ReadError, sFileName) else begin if (CompareText(sCheckSum, ExpectedChecksum) = 0) then AddString(FResult.Success, sFileName) else AddString(FResult.Broken, sFileName); end; end; function TFileSystemCalcChecksumOperation.FileExists(var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const Responses: array[0..5] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourCancel); var Answer: Boolean; Message: String; begin if not mbFileExists(AbsoluteTargetFileName) then Result:= fsoofeOverwrite else case FFileExistsOption of fsoofeNone: repeat Answer := True; Message:= rsMsgFileExistsOverwrite + LineEnding + WrapTextSimple(AbsoluteTargetFileName, 100) + LineEnding; case AskQuestion(Message, '', Responses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; Answer:= not mbFileExists(AbsoluteTargetFileName); end; end; fsourNone, fsourCancel: RaiseAbortOperation; end; until Answer; else Result := FFileExistsOption; end; end; function TFileSystemCalcChecksumOperation.CheckSumCalc(aFile: TFile; out aValue: String): Boolean; var hFile: THandle; bRetryRead: Boolean; Context: THashContext; TotalBytesToRead: Int64 = 0; BytesRead, BytesToRead: Int64; begin BytesToRead := FBufferSize; repeat hFile:= mbFileOpen(aFile.FullPath, fmOpenRead or fmShareDenyWrite); Result:= hFile <> feInvalidHandle; if not Result then begin case AskQuestion(rsMsgErrEOpen + ' ' + aFile.FullPath + LineEnding + mbSysErrorMessage, '', [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: ; fsourAbort: RaiseAbortOperation; fsourSkip: Exit(False); end; // case end; until Result; HashInit(Context, Algorithm); try TotalBytesToRead := FileGetSize(hFile); while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := FileRead(hFile, FBuffer^, BytesToRead); if (BytesRead <= 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; HashUpdate(Context, FBuffer^, BytesRead); except on E: EReadError do begin if gSkipFileOpError then begin LogMessage(rsMsgErrERead + ' ' + aFile.FullPath + ': ' + E.Message, [], lmtError); Exit(False); end; case AskQuestion(rsMsgErrERead + ' ' + aFile.FullPath + LineEnding + E.Message, '', [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit(False); end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end;//while finally FileClose(hFile); HashFinal(Context, aValue); end; end; procedure TFileSystemCalcChecksumOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. doublecmd-1.1.30/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.pas0000644000175000001440000002734715104114162030256 0ustar alexxusersunit fFileSystemCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, Buttons, uFileSourceOperationOptionsUI, uFileSystemCopyOperation, uFileSystemMoveOperation, uSearchTemplate, KASComboBox; type { TFileSystemCopyMoveOperationOptionsUI } TFileSystemCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) btnSearchTemplate: TBitBtn; cbCheckFreeSpace: TCheckBox; cbCorrectLinks: TCheckBox; cbDropReadOnlyFlag: TCheckBox; cbFollowLinks: TCheckBox; cbCopyAttributes: TCheckBox; cbCopyTime: TCheckBox; cbCopyOwnership: TCheckBox; cbExcludeEmptyDirectories: TCheckBox; cbReserveSpace: TCheckBox; cbCopyPermissions: TCheckBox; chkCopyOnWrite: TCheckBox; chkVerify: TCheckBox; cmbDirectoryExists: TComboBoxAutoWidth; cmbFileExists: TComboBoxAutoWidth; cmbSetPropertyError: TComboBoxAutoWidth; gbFileTemplate: TGroupBox; grpOptions: TGroupBox; lblSetPropertyError: TLabel; lblTemplateName: TLabel; lblDirectoryExists: TLabel; lblFileExists: TLabel; pnlComboBoxes: TPanel; pnlCheckboxes: TPanel; procedure btnSearchTemplateClick(Sender: TObject); procedure cbCopyAttributesChange(Sender: TObject); procedure cbReserveSpaceChange(Sender: TObject); private FTemplate: TSearchTemplate; procedure SetOperationOptions(CopyOperation: TFileSystemCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TFileSystemMoveOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; destructor Destroy; override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TFileSystemCopyOperationOptionsUI = class(TFileSystemCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; TFileSystemMoveOperationOptionsUI = class(TFileSystemCopyMoveOperationOptionsUI) end; implementation {$R *.lfm} uses uGlobs, uLng, uFileSourceOperationOptions, DCOSUtils, DCStrUtils, fFindDlg, uFileCopyEx; procedure SetCopyOption(var Options: TCopyAttributesOptions; Option: TCopyAttributesOption; IsSet: Boolean); begin if IsSet then Options := Options + [Option] else Options := Options - [Option]; end; { TFileSystemCopyMoveOperationOptionsUI } procedure TFileSystemCopyMoveOperationOptionsUI.btnSearchTemplateClick(Sender: TObject); begin if ShowUseTemplateDlg(FTemplate) and Assigned(FTemplate) then begin if FTemplate.TemplateName = '' then lblTemplateName.Caption := rsSearchTemplateUnnamed else lblTemplateName.Caption := FTemplate.TemplateName; end; end; procedure TFileSystemCopyMoveOperationOptionsUI.cbCopyAttributesChange(Sender: TObject); begin cbDropReadOnlyFlag.Enabled := cbCopyAttributes.Checked; end; procedure TFileSystemCopyMoveOperationOptionsUI.cbReserveSpaceChange(Sender: TObject); begin if (cbReserveSpace.Checked = False) then cbCheckFreeSpace.Checked := Boolean(cbCheckFreeSpace.Tag) else begin cbCheckFreeSpace.Tag := PtrInt(cbCheckFreeSpace.Checked); cbCheckFreeSpace.Checked := cbReserveSpace.Checked; end; cbCheckFreeSpace.Enabled := not cbReserveSpace.Checked; end; constructor TFileSystemCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; {$IFDEF DARWIN} chkVerify.Visible := False; {$ENDIF} {$IFDEF MSWINDOWS} cbCopyOwnership.Visible := False; cbCopyPermissions.Visible := True; {$ENDIF} {$IFNDEF LINUX} chkCopyOnWrite.Visible := False; {$ENDIF} if Assigned(FileCopyEx) then begin cbCopyTime.Visible:= False; cbReserveSpace.Visible:= False; cbCopyAttributes.Visible:= False; end; ParseLineToList(rsFileOpFileExistsOptions, cmbFileExists.Items); ParseLineToList(rsFileOpDirectoryExistsOptions, cmbDirectoryExists.Items); ParseLineToList(rsFileOpSetPropertyErrorOptions, cmbSetPropertyError.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite : cmbFileExists.ItemIndex := 1; fsoofeOverwriteOlder: cmbFileExists.ItemIndex := 2; fsoofeSkip : cmbFileExists.ItemIndex := 3; end; case gOperationOptionDirectoryExists of fsoodeNone : cmbDirectoryExists.ItemIndex := 0; fsoodeCopyInto : cmbDirectoryExists.ItemIndex := 1; fsoodeSkip : cmbDirectoryExists.ItemIndex := 2; end; case gOperationOptionSetPropertyError of fsoospeNone : cmbSetPropertyError.ItemIndex := 0; fsoospeDontSet : cmbSetPropertyError.ItemIndex := 1; fsoospeIgnoreErrors : cmbSetPropertyError.ItemIndex := 2; end; case gOperationOptionCopyOnWrite of fsoogNone : chkCopyOnWrite.State:= cbGrayed; fsoogYes : chkCopyOnWrite.State:= cbChecked; fsoogNo : chkCopyOnWrite.State:= cbUnchecked; end; cbCopyAttributes.Checked := gOperationOptionCopyAttributes; cbCopyTime.Checked := gOperationOptionCopyTime; cbCopyOwnership.Checked := gOperationOptionCopyOwnership; cbCopyPermissions.Checked := gOperationOptionCopyPermissions; cbDropReadOnlyFlag.Checked := gDropReadOnlyFlag; case gOperationOptionSymLinks of fsooslFollow : cbFollowLinks.State := cbChecked; fsooslDontFollow : cbFollowLinks.State := cbUnchecked; fsooslNone : cbFollowLinks.State := cbGrayed; end; chkVerify.Checked := gOperationOptionVerify; cbCorrectLinks.Checked := gOperationOptionCorrectLinks; cbReserveSpace.Checked := gOperationOptionReserveSpace; cbCheckFreeSpace.Checked := gOperationOptionCheckFreeSpace; cbExcludeEmptyDirectories.Checked := gOperationOptionExcludeEmptyDirectories; end; destructor TFileSystemCopyMoveOperationOptionsUI.Destroy; begin inherited Destroy; FTemplate.Free; end; procedure TFileSystemCopyMoveOperationOptionsUI.SaveOptions; begin case cmbFileExists.ItemIndex of 0: gOperationOptionFileExists := fsoofeNone; 1: gOperationOptionFileExists := fsoofeOverwrite; 2: gOperationOptionFileExists := fsoofeOverwriteOlder; 3: gOperationOptionFileExists := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: gOperationOptionDirectoryExists := fsoodeNone; 1: gOperationOptionDirectoryExists := fsoodeCopyInto; 2: gOperationOptionDirectoryExists := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: gOperationOptionSetPropertyError := fsoospeNone; 1: gOperationOptionSetPropertyError := fsoospeDontSet; 2: gOperationOptionSetPropertyError := fsoospeIgnoreErrors; end; case chkCopyOnWrite.State of cbGrayed : gOperationOptionCopyOnWrite := fsoogNone; cbChecked : gOperationOptionCopyOnWrite := fsoogYes; cbUnchecked : gOperationOptionCopyOnWrite := fsoogNo; end; gOperationOptionVerify := chkVerify.Checked; gOperationOptionCopyAttributes := cbCopyAttributes.Checked; gOperationOptionCopyTime := cbCopyTime.Checked; gOperationOptionCopyOwnership := cbCopyOwnership.Checked; gOperationOptionCopyPermissions := cbCopyPermissions.Checked; gDropReadOnlyFlag := cbDropReadOnlyFlag.Checked; case cbFollowLinks.State of cbChecked : gOperationOptionSymLinks := fsooslFollow; cbUnchecked : gOperationOptionSymLinks := fsooslDontFollow; cbGrayed : gOperationOptionSymLinks := fsooslNone; end; gOperationOptionCorrectLinks := cbCorrectLinks.Checked; gOperationOptionReserveSpace := cbReserveSpace.Checked; gOperationOptionCheckFreeSpace := cbCheckFreeSpace.Checked; gOperationOptionExcludeEmptyDirectories := cbExcludeEmptyDirectories.Checked; end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TFileSystemCopyOperation then SetOperationOptions(Operation as TFileSystemCopyOperation) else if Operation is TFileSystemMoveOperation then SetOperationOptions(Operation as TFileSystemMoveOperation); end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(CopyOperation: TFileSystemCopyOperation); var Options: TCopyAttributesOptions; begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeOverwriteOlder; 3: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: SetPropertyError := fsoospeNone; 1: SetPropertyError := fsoospeDontSet; 2: SetPropertyError := fsoospeIgnoreErrors; end; case cbFollowLinks.State of cbChecked : SymLinkOption := fsooslFollow; cbUnchecked: SymLinkOption := fsooslDontFollow; cbGrayed : SymLinkOption := fsooslNone; end; case chkCopyOnWrite.State of cbGrayed : CopyOnWrite := fsoogNone; cbChecked : CopyOnWrite := fsoogYes; cbUnchecked : CopyOnWrite := fsoogNo; end; Options := CopyAttributesOptions; SetCopyOption(Options, caoCopyAttributes, cbCopyAttributes.Checked); SetCopyOption(Options, caoCopyTime, cbCopyTime.Checked); SetCopyOption(Options, caoCopyOwnership, cbCopyOwnership.Checked); SetCopyOption(Options, caoCopyPermissions, cbCopyPermissions.Checked); SetCopyOption(Options, caoRemoveReadOnlyAttr, cbDropReadOnlyFlag.Checked); CopyAttributesOptions := Options; CorrectSymLinks := cbCorrectLinks.Checked; CheckFreeSpace := cbCheckFreeSpace.Checked; ReserveSpace := cbReserveSpace.Checked; Verify := chkVerify.Checked; if Assigned(FTemplate) then begin SearchTemplate := FTemplate; FTemplate := nil; end; ExcludeEmptyTemplateDirectories := cbExcludeEmptyDirectories.Checked; end; end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(MoveOperation: TFileSystemMoveOperation); var Options: TCopyAttributesOptions; begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeOverwriteOlder; 3: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: SetPropertyError := fsoospeNone; 1: SetPropertyError := fsoospeDontSet; 2: SetPropertyError := fsoospeIgnoreErrors; end; case chkCopyOnWrite.State of cbGrayed : CopyOnWrite := fsoogNone; cbChecked : CopyOnWrite := fsoogYes; cbUnchecked : CopyOnWrite := fsoogNo; end; CorrectSymLinks := cbCorrectLinks.Checked; CheckFreeSpace := cbCheckFreeSpace.Checked; ReserveSpace := cbReserveSpace.Checked; Verify := chkVerify.Checked; Options := CopyAttributesOptions; SetCopyOption(Options, caoCopyAttributes, cbCopyAttributes.Checked); SetCopyOption(Options, caoCopyTime, cbCopyTime.Checked); SetCopyOption(Options, caoCopyOwnership, cbCopyOwnership.Checked); SetCopyOption(Options, caoCopyPermissions, cbCopyPermissions.Checked); CopyAttributesOptions := Options; if Assigned(FTemplate) then begin SearchTemplate := FTemplate; FTemplate := nil; end; ExcludeEmptyTemplateDirectories := cbExcludeEmptyDirectories.Checked; end; end; { TFileSystemCopyOperationOptionsUI } constructor TFileSystemCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; cbFollowLinks.Visible := True; cbDropReadOnlyFlag.Visible := (FileCopyEx = nil); end; end. doublecmd-1.1.30/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lrj0000644000175000001440000000752515104114162030256 0ustar alexxusers{"version":1,"strings":[ {"hash":73409731,"name":"tfilesystemcopymoveoperationoptionsui.lblfileexists.caption","sourcebytes":[87,104,101,110,32,38,102,105,108,101,32,101,120,105,115,116,115],"value":"When &file exists"}, {"hash":219592963,"name":"tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption","sourcebytes":[87,104,101,110,32,100,105,114,38,101,99,116,111,114,121,32,101,120,105,115,116,115],"value":"When dir&ectory exists"}, {"hash":46399081,"name":"tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption","sourcebytes":[87,104,101,110,32,99,97,38,110,110,111,116,32,115,101,116,32,112,114,111,112,101,114,116,121],"value":"When ca&nnot set property"}, {"hash":171515630,"name":"tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint","sourcebytes":[87,104,97,116,32,116,111,32,100,111,32,119,104,101,110,32,99,97,110,110,111,116,32,115,101,116,32,102,105,108,101,32,116,105,109,101,44,32,97,116,116,114,105,98,117,116,101,115,44,32,101,116,99,46],"value":"What to do when cannot set file time, attributes, etc."}, {"hash":250179989,"name":"tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption","sourcebytes":[67,38,104,101,99,107,32,102,114,101,101,32,115,112,97,99,101],"value":"C&heck free space"}, {"hash":76535811,"name":"tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption","sourcebytes":[70,111,38,108,108,111,119,32,108,105,110,107,115],"value":"Fo&llow links"}, {"hash":28881891,"name":"tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption","sourcebytes":[67,111,114,114,101,99,116,32,108,105,110,38,107,115],"value":"Correct lin&ks"}, {"hash":88860499,"name":"tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption","sourcebytes":[67,111,112,38,121,32,97,116,116,114,105,98,117,116,101,115],"value":"Cop&y attributes"}, {"hash":193111863,"name":"tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption","sourcebytes":[68,114,111,112,32,114,101,97,100,111,110,108,121,32,102,108,97,38,103],"value":"Drop readonly fla&g"}, {"hash":231770837,"name":"tfilesystemcopymoveoperationoptionsui.cbcopytime.caption","sourcebytes":[67,111,112,121,32,100,38,97,116,101,47,116,105,109,101],"value":"Copy d&ate/time"}, {"hash":58641088,"name":"tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption","sourcebytes":[67,111,112,121,32,111,38,119,110,101,114,115,104,105,112],"value":"Copy o&wnership"}, {"hash":263433445,"name":"tfilesystemcopymoveoperationoptionsui.cbreservespace.caption","sourcebytes":[38,82,101,115,101,114,118,101,32,115,112,97,99,101],"value":"&Reserve space"}, {"hash":37050051,"name":"tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption","sourcebytes":[67,111,112,121,32,38,112,101,114,109,105,115,115,105,111,110,115],"value":"Copy &permissions"}, {"hash":197955577,"name":"tfilesystemcopymoveoperationoptionsui.chkverify.caption","sourcebytes":[38,86,101,114,105,102,121],"value":"&Verify"}, {"hash":169428869,"name":"tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption","sourcebytes":[67,111,112,121,32,111,110,32,119,114,105,116,101],"value":"Copy on write"}, {"hash":150587493,"name":"tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption","sourcebytes":[85,115,101,32,102,105,108,101,32,116,101,109,112,108,97,116,101],"value":"Use file template"}, {"hash":24093710,"name":"tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint","sourcebytes":[67,104,111,111,115,101,32,116,101,109,112,108,97,116,101,46,46,46],"value":"Choose template..."}, {"hash":121893262,"name":"tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption","sourcebytes":[60,110,111,32,116,101,109,112,108,97,116,101,62],"value":""}, {"hash":190840595,"name":"tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption","sourcebytes":[69,38,120,99,108,117,100,101,32,101,109,112,116,121,32,100,105,114,101,99,116,111,114,105,101,115],"value":"E&xclude empty directories"} ]} doublecmd-1.1.30/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lfm0000644000175000001440000002556315104114162030247 0ustar alexxusersobject FileSystemCopyMoveOperationOptionsUI: TFileSystemCopyMoveOperationOptionsUI Left = 438 Height = 248 Top = 173 Width = 637 AutoSize = True ClientHeight = 248 ClientWidth = 637 LCLVersion = '1.6.0.4' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 0 Height = 75 Top = 0 Width = 265 AutoSize = True BorderSpacing.Right = 10 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 5 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 75 ClientWidth = 265 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 14 Top = 5 Width = 160 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When &file exists' FocusControl = cmbFileExists ParentColor = False end object lblDirectoryExists: TLabel Left = 0 Height = 14 Top = 29 Width = 160 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When dir&ectory exists' FocusControl = cmbDirectoryExists ParentColor = False end object lblSetPropertyError: TLabel Left = 0 Height = 14 Top = 53 Width = 160 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When ca&nnot set property' FocusControl = cmbSetPropertyError ParentColor = False end object cmbFileExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblFileExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 165 Height = 20 Top = 2 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 14 Style = csDropDownList TabOrder = 0 end object cmbDirectoryExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblDirectoryExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDirectoryExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 165 Height = 20 Top = 26 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 14 Style = csDropDownList TabOrder = 1 end object cmbSetPropertyError: TComboBoxAutoWidth AnchorSideLeft.Control = lblSetPropertyError AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSetPropertyError AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 165 Height = 20 Hint = 'What to do when cannot set file time, attributes, etc.' Top = 50 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 14 ParentShowHint = False ShowHint = True Style = csDropDownList TabOrder = 2 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 275 Height = 190 Top = 0 Width = 146 AutoSize = True BevelOuter = bvNone BevelWidth = 8 ClientHeight = 190 ClientWidth = 146 TabOrder = 1 object cbCheckFreeSpace: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = chkVerify AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 19 Width = 128 Caption = 'C&heck free space' TabOrder = 1 end object cbFollowLinks: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = cbReserveSpace AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 57 Width = 93 AllowGrayed = True Caption = 'Fo&llow links' TabOrder = 3 Visible = False end object cbCorrectLinks: TCheckBox AnchorSideLeft.Control = cbFollowLinks AnchorSideTop.Control = cbFollowLinks AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 76 Width = 100 Caption = 'Correct lin&ks' TabOrder = 4 end object cbCopyAttributes: TCheckBox AnchorSideLeft.Control = cbCorrectLinks AnchorSideTop.Control = cbCorrectLinks AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 95 Width = 118 Caption = 'Cop&y attributes' OnChange = cbCopyAttributesChange TabOrder = 5 end object cbDropReadOnlyFlag: TCheckBox AnchorSideLeft.Control = cbCopyAttributes AnchorSideTop.Control = cbCopyAttributes AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 114 Width = 136 BorderSpacing.Left = 10 Caption = 'Drop readonly fla&g' TabOrder = 6 Visible = False end object cbCopyTime: TCheckBox AnchorSideLeft.Control = cbCopyAttributes AnchorSideTop.Control = cbDropReadOnlyFlag AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 133 Width = 117 Caption = 'Copy d&ate/time' TabOrder = 7 end object cbCopyOwnership: TCheckBox AnchorSideLeft.Control = cbCopyTime AnchorSideTop.Control = cbCopyTime AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 152 Width = 120 Caption = 'Copy o&wnership' TabOrder = 8 end object cbReserveSpace: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = cbCheckFreeSpace AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 38 Width = 110 Caption = '&Reserve space' OnChange = cbReserveSpaceChange TabOrder = 2 end object cbCopyPermissions: TCheckBox AnchorSideLeft.Control = cbCopyOwnership AnchorSideTop.Control = cbCopyOwnership AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 171 Width = 130 Caption = 'Copy &permissions' TabOrder = 9 Visible = False end object chkVerify: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = pnlCheckboxes Left = 0 Height = 19 Top = 0 Width = 58 Caption = '&Verify' TabOrder = 0 end object chkCopyOnWrite: TCheckBox AnchorSideLeft.Control = cbCopyPermissions AnchorSideTop.Control = cbCopyPermissions AnchorSideTop.Side = asrBottom Left = 0 Height = 23 Top = 230 Width = 111 AllowGrayed = True Caption = 'Copy on write' TabOrder = 10 end end object gbFileTemplate: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlComboBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlComboBoxes AnchorSideRight.Side = asrBottom Left = 0 Height = 74 Top = 75 Width = 265 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Use file template' ClientHeight = 56 ClientWidth = 261 TabOrder = 2 object btnSearchTemplate: TBitBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFileTemplate AnchorSideRight.Control = gbFileTemplate AnchorSideRight.Side = asrBottom Left = 224 Height = 32 Hint = 'Choose template...' Top = 0 Width = 32 Anchors = [akTop, akRight] BorderSpacing.Right = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 0 end object lblTemplateName: TLabel AnchorSideLeft.Control = gbFileTemplate AnchorSideTop.Control = btnSearchTemplate AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSearchTemplate Left = 5 Height = 14 Top = 9 Width = 209 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Right = 10 Caption = '' ParentColor = False end object cbExcludeEmptyDirectories: TCheckBox AnchorSideLeft.Control = gbFileTemplate AnchorSideTop.Control = btnSearchTemplate AnchorSideTop.Side = asrBottom Left = 5 Height = 19 Top = 37 Width = 183 BorderSpacing.Left = 5 BorderSpacing.Top = 5 BorderSpacing.Right = 5 Caption = 'E&xclude empty directories' Checked = True State = cbChecked TabOrder = 1 end end enddoublecmd-1.1.30/src/fhotdirexportimport.pas0000644000175000001440000000155015104114162020216 0ustar alexxusersunit fhotdirexportimport; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ComCtrls; type { Tfrmhotdirexportimport } Tfrmhotdirexportimport = class(TForm) btnSelectAll: TBitBtn; btnSelectionDone: TBitBtn; btnCancelImportation: TBitBtn; lblHintHoldControl: TLabel; lbHint: TLabel; tvDirectoryHotlistToExportImport: TTreeView; procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var frmhotdirexportimport: Tfrmhotdirexportimport; implementation {$R *.lfm} uses uGlobs; { Tfrmhotdirexportimport } procedure Tfrmhotdirexportimport.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); end; end. doublecmd-1.1.30/src/fhotdirexportimport.lrj0000644000175000001440000000245415104114162020226 0ustar alexxusers{"version":1,"strings":[ {"hash":60646548,"name":"tfrmhotdirexportimport.caption","sourcebytes":[83,101,108,101,99,116,32,116,104,101,32,101,110,116,114,105,101,115,32,121,111,117,114,32,119,97,110,116,32,116,111,32,105,109,112,111,114,116],"value":"Select the entries your want to import"}, {"hash":131520499,"name":"tfrmhotdirexportimport.lblhintholdcontrol.caption","sourcebytes":[72,111,108,100,32,67,84,82,76,32,97,110,100,32,99,108,105,99,107,32,101,110,116,114,105,101,115,32,116,111,32,115,101,108,101,99,116,32,109,117,108,116,105,112,108,101,32,111,110,101,115],"value":"Hold CTRL and click entries to select multiple ones"}, {"hash":232028565,"name":"tfrmhotdirexportimport.lbhint.caption","sourcebytes":[87,104,101,110,32,99,108,105,99,107,105,110,103,32,97,32,115,117,98,45,109,101,110,117,44,32,105,116,32,119,105,108,108,32,115,101,108,101,99,116,32,116,104,101,32,119,104,111,108,101,32,109,101,110,117],"value":"When clicking a sub-menu, it will select the whole menu"}, {"hash":154551681,"name":"tfrmhotdirexportimport.btnselectall.caption","sourcebytes":[73,109,112,111,114,116,32,97,108,108,33],"value":"Import all!"}, {"hash":222469476,"name":"tfrmhotdirexportimport.btnselectiondone.caption","sourcebytes":[73,109,112,111,114,116,32,115,101,108,101,99,116,101,100],"value":"Import selected"} ]} doublecmd-1.1.30/src/fhotdirexportimport.lfm0000644000175000001440000000415415104114162020214 0ustar alexxusersobject frmhotdirexportimport: Tfrmhotdirexportimport Left = 686 Height = 283 Top = 295 Width = 427 Caption = 'Select the entries your want to import' ClientHeight = 283 ClientWidth = 427 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width;WindowState' LCLVersion = '1.2.4.0' object lblHintHoldControl: TLabel Left = 8 Height = 15 Top = 24 Width = 267 Caption = 'Hold CTRL and click entries to select multiple ones' ParentColor = False end object lbHint: TLabel Left = 8 Height = 15 Top = 8 Width = 298 Caption = 'When clicking a sub-menu, it will select the whole menu' ParentColor = False end object btnSelectAll: TBitBtn Left = 115 Height = 30 Top = 243 Width = 150 Anchors = [akRight, akBottom] Caption = 'Import all!' Kind = bkAll ModalResult = 8 TabOrder = 0 end object btnSelectionDone: TBitBtn Left = 269 Height = 30 Top = 243 Width = 150 Anchors = [akRight, akBottom] Caption = 'Import selected' Default = True Kind = bkOK ModalResult = 1 TabOrder = 1 end object btnCancelImportation: TBitBtn Left = 8 Height = 30 Top = 243 Width = 104 Anchors = [akRight, akBottom] Cancel = True DefaultCaption = True Kind = bkCancel ModalResult = 2 TabOrder = 2 end object tvDirectoryHotlistToExportImport: TTreeView AnchorSideRight.Side = asrBottom Left = 8 Height = 193 Top = 40 Width = 408 Anchors = [akTop, akLeft, akBottom] DefaultItemHeight = 18 DragMode = dmAutomatic HideSelection = False HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentFont = False ReadOnly = True RowSelect = True TabOrder = 3 Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end doublecmd-1.1.30/src/fhardlink.pas0000644000175000001440000000477115104114162016034 0ustar alexxusersunit fHardLink; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons; type { TfrmHardLink } TfrmHardLink = class(TForm) lblExistingFile: TLabel; lblLinkToCreate: TLabel; edtExistingFile: TEdit; edtLinkToCreate: TEdit; btnOK: TBitBtn; btnCancel: TBitBtn; procedure btnOKClick(Sender: TObject); procedure FormShow(Sender: TObject); private FCurrentPath: String; public constructor Create(TheOwner: TComponent; CurrentPath: String); reintroduce; end; function ShowHardLinkForm(TheOwner: TComponent; const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, DCStrUtils, DCOSUtils, uAdministrator; function ShowHardLinkForm(TheOwner: TComponent; const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmHardLink.Create(TheOwner, CurrentPath) do begin try edtLinkToCreate.Text := sLinkToCreate; edtExistingFile.Text := sExistingFile; Result:= (ShowModal = mrOK); finally Free; end; end; end; constructor TfrmHardLink.Create(TheOwner: TComponent; CurrentPath: String); begin inherited Create(TheOwner); FCurrentPath := CurrentPath; end; procedure TfrmHardLink.btnOKClick(Sender: TObject); var sSrc, sDst, Message: String; AElevate: TDuplicates = dupIgnore; begin sSrc:=edtExistingFile.Text; sDst:=edtLinkToCreate.Text; if CompareFilenames(sSrc, sDst) = 0 then Exit; sSrc := GetAbsoluteFileName(FCurrentPath, sSrc); sDst := GetAbsoluteFileName(FCurrentPath, sDst); PushPop(AElevate); try if CreateHardLinkUAC(sSrc, sDst) then begin // write log if (log_cp_mv_ln in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess+rsMsgLogLink,[sSrc+' -> '+sDst]), lmtSuccess); end else begin Message:= mbSysErrorMessage; // write log if (log_cp_mv_ln in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError+rsMsgLogLink,[sSrc+' -> '+sDst]), lmtError); // Standart error modal dialog MsgError(rsHardErrCreate + LineEnding + LineEnding + Message); end; finally PushPop(AElevate); end; end; procedure TfrmHardLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. doublecmd-1.1.30/src/fhardlink.lrj0000644000175000001440000000145615104114162016035 0ustar alexxusers{"version":1,"strings":[ {"hash":13036155,"name":"tfrmhardlink.caption","sourcebytes":[67,114,101,97,116,101,32,104,97,114,100,32,108,105,110,107],"value":"Create hard link"}, {"hash":37813087,"name":"tfrmhardlink.lblexistingfile.caption","sourcebytes":[38,68,101,115,116,105,110,97,116,105,111,110,32,116,104,97,116,32,116,104,101,32,108,105,110,107,32,119,105,108,108,32,112,111,105,110,116,32,116,111],"value":"&Destination that the link will point to"}, {"hash":81130805,"name":"tfrmhardlink.lbllinktocreate.caption","sourcebytes":[38,76,105,110,107,32,110,97,109,101],"value":"&Link name"}, {"hash":11067,"name":"tfrmhardlink.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmhardlink.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/fhardlink.lfm0000644000175000001440000000521315104114162016017 0ustar alexxusersobject frmHardLink: TfrmHardLink Left = 320 Height = 177 Top = 320 Width = 512 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create hard link' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 177 ClientWidth = 512 KeyPreview = True OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '1.8.4.0' object lblExistingFile: TLabel AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtLinkToCreate AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 59 Width = 240 BorderSpacing.Top = 6 Caption = '&Destination that the link will point to' FocusControl = edtExistingFile ParentColor = False end object lblLinkToCreate: TLabel AnchorSideLeft.Control = edtLinkToCreate AnchorSideTop.Control = Owner Left = 6 Height = 16 Top = 6 Width = 69 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 81 Width = 500 BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 28 Width = 500 BorderSpacing.Top = 6 Constraints.MinWidth = 400 TabOrder = 0 end object btnOK: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel Left = 300 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExistingFile AnchorSideRight.Side = asrBottom Left = 406 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 3 end end doublecmd-1.1.30/src/fhackform.pas0000644000175000001440000000044415104114162016023 0ustar alexxusersunit fHackForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms; type { TfrmHackForm } TfrmHackForm = class(TForm) private { private declarations } public { public declarations } end; var frmHackForm: TfrmHackForm; implementation {$R *.lfm} end. doublecmd-1.1.30/src/fhackform.lfm0000644000175000001440000000025215104114162016013 0ustar alexxusersobject frmHackForm: TfrmHackForm Left = 455 Height = 300 Top = 236 Width = 400 Position = poScreenCenter ShowInTaskBar = stNever LCLVersion = '1.0.1.3' end doublecmd-1.1.30/src/ffindview.pas0000644000175000001440000000540415104114162016045 0ustar alexxusers{ Seksi Commander ---------------------------- Find dialog for Viewer Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: } unit fFindView; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, KASButtonPanel, uOSForms; type { TfrmFindView } TfrmFindView = class(TModalForm) cbDataToFind: TComboBox; btnFind: TBitBtn; btnClose: TBitBtn; cbCaseSens: TCheckBox; cbBackwards: TCheckBox; chkHex: TCheckBox; cbRegExp: TCheckBox; KASButtonPanel: TKASButtonPanel; procedure cbBackwardsChange(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure chkHexChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormShow(Sender: TObject); procedure btnFindClick(Sender: TObject); procedure cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private function GetTextSearchOptions: UIntPtr; public { Public declarations } end; implementation {$R *.lfm} uses LCLProc, LCLType, uFindFiles, uDCUtils; procedure TfrmFindView.FormShow(Sender: TObject); begin if cbDataToFind.Text = EmptyStr then begin if cbDataToFind.Items.Count > 0 then cbDataToFind.Text:= cbDataToFind.Items[0]; end; cbDataToFind.SelectAll; end; procedure TfrmFindView.chkHexChange(Sender: TObject); begin if not chkHex.Checked then cbCaseSens.Checked:= Boolean(cbCaseSens.Tag) else begin cbCaseSens.Tag:= Integer(cbCaseSens.Checked); cbCaseSens.Checked:= True; end; cbCaseSens.Enabled:= not chkHex.Checked; end; procedure TfrmFindView.FormActivate(Sender: TObject); begin cbDataToFind.SetFocus; end; procedure TfrmFindView.cbBackwardsChange(Sender: TObject); begin if cbBackwards.Checked then cbRegExp.Checked:= False end; procedure TfrmFindView.cbRegExpChange(Sender: TObject); begin if cbRegExp.Checked then cbBackwards.Checked:= False; end; procedure TfrmFindView.btnFindClick(Sender: TObject); begin InsertFirstItem(cbDataToFind.Text, cbDataToFind, GetTextSearchOptions); ModalResult:= mrOk; end; procedure TfrmFindView.cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_Down) and (cbDataToFind.Items.Count > 0) then cbDataToFind.DroppedDown:= True; if Key = 13 then begin Key:= 0; btnFind.Click; end; if Key = 27 then begin Key:= 0; ModalResult:= mrCancel; end; end; function TfrmFindView.GetTextSearchOptions: UIntPtr; var Options: TTextSearchOptions absolute Result; begin Result:= 0; if cbCaseSens.Checked then Include(Options, tsoMatchCase); if cbRegExp.Checked then Include(Options, tsoRegExpr); if chkHex.Checked then Include(Options, tsoHex); end; end. doublecmd-1.1.30/src/ffindview.lrj0000644000175000001440000000170015104114162016044 0ustar alexxusers{"version":1,"strings":[ {"hash":315460,"name":"tfrmfindview.caption","sourcebytes":[70,105,110,100],"value":"Find"}, {"hash":2805828,"name":"tfrmfindview.btnfind.caption","sourcebytes":[38,70,105,110,100],"value":"&Find"}, {"hash":177752476,"name":"tfrmfindview.btnclose.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":219655237,"name":"tfrmfindview.cbcasesens.caption","sourcebytes":[67,38,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"C&ase sensitive"}, {"hash":183979276,"name":"tfrmfindview.chkhex.caption","sourcebytes":[72,101,120,97,100,101,99,105,109,97,108],"value":"Hexadecimal"}, {"hash":8115171,"name":"tfrmfindview.cbregexp.caption","sourcebytes":[38,82,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115],"value":"&Regular expressions"}, {"hash":170860739,"name":"tfrmfindview.cbbackwards.caption","sourcebytes":[38,66,97,99,107,119,97,114,100,115],"value":"&Backwards"} ]} doublecmd-1.1.30/src/ffindview.lfm0000644000175000001440000000722515104114162016043 0ustar alexxusersobject frmFindView: TfrmFindView Left = 385 Height = 134 Top = 305 Width = 348 HorzScrollBar.Page = 343 HorzScrollBar.Range = 103 VertScrollBar.Page = 96 VertScrollBar.Range = 90 ActiveControl = cbDataToFind AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Find' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 134 ClientWidth = 348 OnActivate = FormActivate OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '3.8.0.0' object cbDataToFind: TComboBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 12 Width = 328 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 Constraints.MinWidth = 328 ItemHeight = 15 ParentFont = False TabOrder = 0 OnKeyUp = cbDataToFindKeyUp end object cbCaseSens: TCheckBox AnchorSideLeft.Control = cbDataToFind AnchorSideTop.Control = cbDataToFind AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 41 Width = 91 BorderSpacing.Top = 6 Caption = 'C&ase sensitive' ParentFont = False TabOrder = 1 end object chkHex: TCheckBox AnchorSideLeft.Control = cbCaseSens AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrCenter Left = 113 Height = 19 Top = 41 Width = 86 BorderSpacing.Left = 12 Caption = 'Hexadecimal' ParentFont = False TabOrder = 2 OnChange = chkHexChange end object cbRegExp: TCheckBox AnchorSideLeft.Control = chkHex AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkHex AnchorSideTop.Side = asrCenter Left = 207 Height = 19 Top = 41 Width = 121 BorderSpacing.Left = 8 Caption = '&Regular expressions' ParentFont = False TabOrder = 3 OnChange = cbRegExpChange end object cbBackwards: TCheckBox AnchorSideLeft.Control = cbCaseSens AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 60 Width = 74 Caption = '&Backwards' TabOrder = 4 OnChange = cbBackwardsChange end object KASButtonPanel: TKASButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbBackwards AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 26 Top = 91 Width = 328 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BevelOuter = bvNone ClientHeight = 26 ClientWidth = 328 TabOrder = 5 object btnFind: TBitBtn AnchorSideTop.Control = btnClose AnchorSideRight.Control = btnClose AnchorSideBottom.Side = asrBottom Left = 142 Height = 26 Top = 0 Width = 90 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 Caption = '&Find' Constraints.MinWidth = 90 Default = True Kind = bkOK OnClick = btnFindClick ParentFont = False TabOrder = 0 end object btnClose: TBitBtn AnchorSideTop.Control = KASButtonPanel AnchorSideRight.Control = KASButtonPanel AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 238 Height = 26 Top = 0 Width = 90 Anchors = [akTop, akRight] AutoSize = True Cancel = True Caption = '&Cancel' Constraints.MinWidth = 90 Kind = bkCancel ModalResult = 2 ParentFont = False TabOrder = 1 end end end doublecmd-1.1.30/src/ffileunlock.pas0000644000175000001440000001075015104114162016365 0ustar alexxusersunit fFileUnlock; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, uFileUnlock; type { TfrmFileUnlock } TfrmFileUnlock = class(TForm) btnUnlockAll: TButton; btnUnlock: TButton; btnClose: TButton; btnTerminate: TButton; stgFileHandles: TStringGrid; procedure btnTerminateClick(Sender: TObject); procedure btnUnlockAllClick(Sender: TObject); procedure btnUnlockClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure stgFileHandlesDblClick(Sender: TObject); procedure stgFileHandlesSelection(Sender: TObject; aCol, aRow: Integer); private procedure ShowThread; procedure UnlockRow(Index: Integer); public end; function ShowUnlockForm(ProcessInfo: TProcessInfoArray): Boolean; implementation {$R *.lfm} uses Windows, Math, LCLStrConsts, DCConvertEncoding, fMain, uMyWindows, uLng; function ShowUnlockForm(ProcessInfo: TProcessInfoArray): Boolean; var Index: Integer; UnlockEnabled: Boolean = False; begin with TfrmFileUnlock.Create(frmMain) do try stgFileHandles.RowCount:= Length(ProcessInfo) + 1; for Index:= 1 to stgFileHandles.RowCount - 1 do begin if (ProcessInfo[Index - 1].FileHandle <> 0) then begin UnlockEnabled:= True; stgFileHandles.Cells[0, Index]:= IntToStr(ProcessInfo[Index - 1].FileHandle); end; stgFileHandles.Cells[1, Index]:= IntToStr(ProcessInfo[Index - 1].ProcessId); stgFileHandles.Cells[2, Index]:= ProcessInfo[Index - 1].ExecutablePath; end; btnUnlockAll.Enabled:= UnlockEnabled; btnTerminate.Enabled:= Length(ProcessInfo) > 0; stgFileHandles.Row:= IfThen(UnlockEnabled, 1, 0); btnUnlock.Enabled:= UnlockEnabled and (Length(stgFileHandles.Cells[0, 1]) > 0); TThread.Synchronize(nil, @ShowThread); Result:= (ModalResult = mrOK); finally Free; end; end; { TfrmFileUnlock } procedure TfrmFileUnlock.stgFileHandlesSelection(Sender: TObject; aCol, aRow: Integer); begin btnUnlock.Enabled:= (aRow > 0) and (Length(stgFileHandles.Cells[0, aRow]) > 0); end; procedure TfrmFileUnlock.btnUnlockClick(Sender: TObject); begin UnlockRow(stgFileHandles.Row); if (stgFileHandles.RowCount = 1) then begin Close; ModalResult:= mrOK; end; end; procedure TfrmFileUnlock.FormShow(Sender: TObject); var Index: Integer; begin for Index:= 0 to stgFileHandles.Columns.Count - 1 do begin stgFileHandles.Columns[Index].Width:= stgFileHandles.Canvas.TextWidth(stgFileHandles.Columns[Index].Title.Caption + 'W'); end; end; procedure TfrmFileUnlock.stgFileHandlesDblClick(Sender: TObject); var AHandle: HWND; ProcessId: DWORD; begin if (stgFileHandles.Row > 0) then begin ProcessId:= StrToDWord(stgFileHandles.Cells[1, stgFileHandles.Row]); AHandle:= FindMainWindow(ProcessId); if AHandle <> 0 then ShowWindowEx(AHandle); end; end; procedure TfrmFileUnlock.btnUnlockAllClick(Sender: TObject); var Index: Integer; begin for Index:= stgFileHandles.RowCount - 1 downto 1 do begin UnlockRow(Index); end; if (stgFileHandles.RowCount = 1) then begin Close; ModalResult:= mrOK; end; end; procedure TfrmFileUnlock.btnTerminateClick(Sender: TObject); var Index: Integer; ProcessId: DWORD; begin if (stgFileHandles.Row > 0) then begin if MessageBoxW(Handle, PWideChar(CeUtf8ToUtf16(rsMsgTerminateProcess)), PWideChar(CeUtf8ToUtf16(rsMtWarning)), MB_YESNO or MB_ICONWARNING) = IDYES then begin ProcessId:= StrToDWord(stgFileHandles.Cells[1, stgFileHandles.Row]); if uFileUnlock.TerminateProcess(ProcessId) then begin for Index:= stgFileHandles.RowCount - 1 downto 1 do begin if (ProcessId = StrToDWord(stgFileHandles.Cells[1, Index])) then stgFileHandles.DeleteRow(Index); end; if (stgFileHandles.RowCount = 1) then begin Close; ModalResult:= mrOK; end; end; end; end; end; procedure TfrmFileUnlock.ShowThread; begin ShowModal; end; procedure TfrmFileUnlock.UnlockRow(Index: Integer); var ProcessId: DWORD; FileHandle: HANDLE; begin ProcessId:= StrToDWord(stgFileHandles.Cells[1, Index]); FileHandle:= StrToQWord(stgFileHandles.Cells[0, Index]); if FileUnlock(ProcessId, FileHandle) then stgFileHandles.DeleteRow(Index); end; end. doublecmd-1.1.30/src/ffileunlock.lrj0000644000175000001440000000216115104114162016366 0ustar alexxusers{"version":1,"strings":[ {"hash":96810395,"name":"tfrmfileunlock.caption","sourcebytes":[85,110,108,111,99,107],"value":"Unlock"}, {"hash":78334293,"name":"tfrmfileunlock.stgfilehandles.columns[0].title.caption","sourcebytes":[70,105,108,101,32,72,97,110,100,108,101],"value":"File Handle"}, {"hash":164572548,"name":"tfrmfileunlock.stgfilehandles.columns[1].title.caption","sourcebytes":[80,114,111,99,101,115,115,32,73,68],"value":"Process ID"}, {"hash":165250008,"name":"tfrmfileunlock.stgfilehandles.columns[2].title.caption","sourcebytes":[69,120,101,99,117,116,97,98,108,101,32,80,97,116,104],"value":"Executable Path"}, {"hash":93881116,"name":"tfrmfileunlock.btnunlockall.caption","sourcebytes":[85,110,108,111,99,107,32,65,108,108],"value":"Unlock All"}, {"hash":96810395,"name":"tfrmfileunlock.btnunlock.caption","sourcebytes":[85,110,108,111,99,107],"value":"Unlock"}, {"hash":4863637,"name":"tfrmfileunlock.btnclose.caption","sourcebytes":[67,108,111,115,101],"value":"Close"}, {"hash":155193957,"name":"tfrmfileunlock.btnterminate.caption","sourcebytes":[84,101,114,109,105,110,97,116,101],"value":"Terminate"} ]} doublecmd-1.1.30/src/ffileunlock.lfm0000644000175000001440000000566515104114162016371 0ustar alexxusersobject frmFileUnlock: TfrmFileUnlock Left = 326 Height = 342 Top = 203 Width = 638 BorderIcons = [biSystemMenu, biMaximize] Caption = 'Unlock' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ClientHeight = 342 ClientWidth = 638 Constraints.MinWidth = 600 DesignTimePPI = 120 OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '1.8.4.0' object stgFileHandles: TStringGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 12 Height = 276 Top = 12 Width = 614 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 12 ColCount = 3 Columns = < item SizePriority = 0 Title.Caption = 'File Handle' Width = 100 end item SizePriority = 0 Title.Caption = 'Process ID' Width = 100 end item Title.Caption = 'Executable Path' Width = 413 end> FixedCols = 0 Flat = True Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goSmoothScroll] TabOrder = 0 OnDblClick = stgFileHandlesDblClick OnSelection = stgFileHandlesSelection ColWidths = ( 100 100 413 ) end object btnUnlockAll: TButton AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnClose AnchorSideBottom.Control = btnClose AnchorSideBottom.Side = asrBottom Left = 459 Height = 30 Top = 300 Width = 93 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 12 Caption = 'Unlock All' OnClick = btnUnlockAllClick TabOrder = 2 end object btnUnlock: TButton AnchorSideTop.Control = btnUnlockAll AnchorSideRight.Control = btnUnlockAll Left = 376 Height = 30 Top = 300 Width = 71 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 12 Caption = 'Unlock' OnClick = btnUnlockClick TabOrder = 1 end object btnClose: TButton AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 564 Height = 30 Top = 300 Width = 62 Anchors = [akRight, akBottom] AutoSize = True Caption = 'Close' ModalResult = 11 TabOrder = 3 end object btnTerminate: TButton AnchorSideLeft.Control = Owner AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 12 Height = 30 Top = 300 Width = 93 Anchors = [akLeft, akBottom] AutoSize = True Caption = 'Terminate' OnClick = btnTerminateClick TabOrder = 4 end end doublecmd-1.1.30/src/ffileproperties.pas0000644000175000001440000007011615104114162017270 0ustar alexxusers{ Double Commander ------------------------------------------------------------------- File Properties Dialog Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2003 Martin Matusu Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fFileProperties; {$mode objfpc}{$H+} interface uses LResources, SysUtils, Classes, Graphics, Forms, StdCtrls, Buttons, ComCtrls, Dialogs, Controls, ExtCtrls, Grids, ButtonPanel, DividerBevel, KASCDEdit, DCBasicTypes, uFile, uFileProperty, uFileSource, uFileSourceOperation, uFileSourceCalcStatisticsOperation, uFileSourceSetFilePropertyOperation, DCOSUtils; type { TfrmFileProperties } TfrmFileProperties = class(TForm) ButtonPanel: TButtonPanel; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; cbxGroups: TComboBox; cbxUsers: TComboBox; chkExecutable: TCheckBox; chkRecursive: TCheckBox; DividerBevel1: TDividerBevel; DividerBevel2: TDividerBevel; DividerBevel3: TDividerBevel; DividerBevel4: TDividerBevel; edtOctal: TEdit; lblExecutable: TLabel; lblFileName: TLabel; imgFileIcon: TImage; lblFolder: TKASCDEdit; lblFolderStr: TLabel; lblGroupStr: TLabel; lblLastAccess: TKASCDEdit; lblLastAccessStr: TLabel; lblLastModif: TKASCDEdit; lblLastModifStr: TLabel; lblLastStChange: TKASCDEdit; lblLastStChangeStr: TLabel; lblCreated: TKASCDEdit; lblCreatedStr: TLabel; lblOctal: TLabel; lblAttrBitsStr: TLabel; lblAttrText: TLabel; lblExec: TLabel; lblFileStr: TLabel; lblFile: TLabel; lblAttrGroupStr: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblOwnerStr: TLabel; lblRead: TLabel; lblSize: TKASCDEdit; lblSizeOnDisk: TKASCDEdit; lblContains: TKASCDEdit; lblSizeStr: TLabel; lblSizeOnDiskStr: TLabel; lblContainsStr: TLabel; lblSymlink: TKASCDEdit; lblAttrTextStr: TLabel; lblSymlinkStr: TLabel; lblMediaType: TKASCDEdit; lblMediaTypeStr: TLabel; lblType: TKASCDEdit; lblTypeStr: TLabel; lblLinks: TKASCDEdit; lblLinksStr: TLabel; lblWrite: TLabel; pnlOwner: TPanel; pnlCaption: TPanel; pnlData: TPanel; pnlIcon: TPanel; pcPageControl: TPageControl; sgPlugins: TStringGrid; tsPlugins: TTabSheet; tmUpdateFolderSize: TTimer; tsProperties: TTabSheet; tsAttributes: TTabSheet; procedure cbChangeModeClick(Sender: TObject); procedure chkExecutableChange(Sender: TObject); procedure edtOctalKeyPress(Sender: TObject; var Key: char); procedure edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure OKButtonClick(Sender: TObject); procedure tmUpdateFolderSizeTimer(Sender: TObject); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; State: TFileSourceOperationState); private bPerm: Boolean; FFileSource: IFileSource; FFiles: TFiles; FPropertyFormatter: IFilePropertyFormatter; FFileSourceCalcStatisticsOperation: TFileSourceCalcStatisticsOperation; FChangeTriggersEnabled: Boolean; FFileAttr: TFileAttributeData; FFileType, OriginalAttr: TFileAttrs; OriginalUser, OriginalGroup: String; FOperation: TFileSourceSetFilePropertyOperation; procedure ShowType(Attrs: TFileAttrs); procedure ShowExecutable; procedure ShowPermissions(Mode: TFileAttrs); function GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; function FormatSize(ASize: Int64): String; procedure ShowMany; procedure ShowFile(iIndex:Integer); procedure StartCalcFolderSize; procedure StopCalcFolderSize; procedure ShowPlugin(iIndex:Integer); procedure UpdateAllowGrayed(AllowGrayed: Boolean); function FormatUnixAttributesEx(iAttr: TFileAttrs): String; public constructor Create(AOwner: TComponent; aFileSource: IFileSource; theFiles: TFiles); reintroduce; destructor Destroy; override; end; procedure ShowFileProperties(aFileSource: IFileSource; const aFiles: TFiles); implementation {$R *.lfm} uses LCLType, LazUTF8, uLng, BaseUnix, uUsersGroups, uDCUtils, uDefaultFilePropertyFormatter, uMyUnix, DCFileAttributes, uGlobs, uWdxModule, uFileSourceOperationTypes, uFileSystemFileSource, uOperationsManager, WdxPlugin, uFileSourceOperationOptions, uKeyboard, DCStrUtils, uPixMapManager, uFileSourceProperty, DCDateTimeUtils, uTypes; procedure ShowFileProperties(aFileSource: IFileSource; const aFiles: TFiles); begin if aFiles.Count > 0 then begin with TfrmFileProperties.Create(Application, aFileSource, aFiles) do try ShowModal; finally Free; end; end; end; constructor TfrmFileProperties.Create(AOwner: TComponent; aFileSource: IFileSource; theFiles: TFiles); var ASize: Integer; AFiles: TFiles; HasAttr: Boolean; ActiveFile: TFile; aFileProperties: TFileProperties; begin FFiles := theFiles.Clone; FFileSource:= aFileSource; FChangeTriggersEnabled := True; FPropertyFormatter := MaxDetailsFilePropertyFormatter; ActiveFile:= FFiles[0]; HasAttr:= (fspDirectAccess in aFileSource.Properties) and (mbFileGetAttr(ActiveFile.FullPath, FFileAttr)); if HasAttr then begin {$IFDEF UNIX} if not (fpOwner in ActiveFile.SupportedProperties) then begin ActiveFile.Properties[fpOwner]:= TFileOwnerProperty.Create; end; ActiveFile.OwnerProperty.Group:= FFileAttr.FindData.st_gid; ActiveFile.OwnerProperty.Owner:= FFileAttr.FindData.st_uid; {$ENDIF} if fpModificationTime in ActiveFile.SupportedProperties then ActiveFile.ModificationTime:= FileTimeToDateTime(DCBasicTypes.TFileTime(FFileAttr.LastWriteTime)); if fpChangeTime in ActiveFile.SupportedProperties then ActiveFile.ChangeTime:= FileTimeToDateTime(DCBasicTypes.TFileTime(FFileAttr.PlatformTime)); if fpLastAccessTime in ActiveFile.SupportedProperties then ActiveFile.LastAccessTime:= FileTimeToDateTime(DCBasicTypes.TFileTime(FFileAttr.LastAccessTime)); end; if (fsoSetFileProperty in aFileSource.GetOperationsTypes) then begin AFiles:= FFiles.Clone; FillByte(aFileProperties, SizeOf(aFileProperties), 0); if fpAttributes in ActiveFile.SupportedProperties then aFileProperties[fpAttributes]:= ActiveFile.Properties[fpAttributes].Clone; if fpOwner in ActiveFile.SupportedProperties then aFileProperties[fpOwner]:= ActiveFile.Properties[fpOwner].Clone; FOperation:= aFileSource.CreateSetFilePropertyOperation(AFiles, aFileProperties) as TFileSourceSetFilePropertyOperation; end; inherited Create(AOwner); tsProperties.AutoSize:= True; tsAttributes.AutoSize:= True; // Enable only supported file properties if Assigned(FOperation) then begin if fpAttributes in FOperation.SupportedProperties then begin UpdateAllowGrayed((FFiles.Count > 1) or FFiles[0].IsDirectory); end; end; ASize:= gIconsSize * Round( Application.MainForm.GetCanvasScaleFactor ); if ASize > 48 then ASize:= 48; imgFileIcon.Width:= ASize; imgFileIcon.Height:= ASize; pnlOwner.Enabled:= Assigned(FOperation) and (fpOwner in FOperation.SupportedProperties); tsAttributes.Enabled:= Assigned(FOperation) and (fpAttributes in FOperation.SupportedProperties); end; destructor TfrmFileProperties.Destroy; begin FFiles.Free; StopCalcFolderSize; FreeAndNil( FOperation ); inherited Destroy; FPropertyFormatter := nil; // free interface end; function TfrmFileProperties.GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; begin Result:= 0; ExcludeAttrs:= 0; case cbReadOwner.State of cbChecked: Result:= (Result or S_IRUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRUSR; end; case cbWriteOwner.State of cbChecked: Result:= (Result or S_IWUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWUSR; end; case cbExecOwner.State of cbChecked: Result:= (Result or S_IXUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXUSR; end; case cbReadGroup.State of cbChecked: Result:= (Result or S_IRGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRGRP; end; case cbWriteGroup.State of cbChecked: Result:= (Result or S_IWGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWGRP; end; case cbExecGroup.State of cbChecked: Result:= (Result or S_IXGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXGRP; end; case cbReadOther.State of cbChecked: Result:= (Result or S_IROTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IROTH; end; case cbWriteOther.State of cbChecked: Result:= (Result or S_IWOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWOTH; end; case cbExecOther.State of cbChecked: Result:= (Result or S_IXOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXOTH; end; case cbSuid.State of cbChecked: Result:= (Result or S_ISUID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISUID; end; case cbSgid.State of cbChecked: Result:= (Result or S_ISGID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISGID; end; case cbSticky.State of cbChecked: Result:= (Result or S_ISVTX); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISVTX; end; end; function TfrmFileProperties.FormatSize(ASize: Int64): String; begin if (ASize < 0) then Result:= '???' else if gFileSizeFormat in [fsfByte, fsfPersonalizedByte] then Result:= cnvFormatFileSize(ASize) else begin Result:= Format('%s (%s)', [cnvFormatFileSize(ASize), IntToStrTS(ASize)]); end; end; procedure TfrmFileProperties.ShowMany; var ASize: Int64; AFile: TFile; Index: Integer; ABitmap: TBitmap; UserID: Cardinal; Files, Directories: Integer; begin ASize := 0; Files := 0; Directories := 0; ABitmap := PixMapManager.GetThemeIcon('edit-copy', gIconsSize); if Assigned(ABitmap) then begin imgFileIcon.Picture.Bitmap := ABitmap; ABitmap.Free; end; for Index:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[Index]; if AFile.IsDirectory then Inc(Directories) else begin Inc(Files); Inc(ASize, AFile.Size); end; end; chkRecursive.Visible:= (Directories > 0); DividerBevel4.Visible:= chkRecursive.Visible; if (Directories = 0) then begin lblSize.Caption := FormatSize(ASize); end else if (fsoCalcStatistics in FFileSource.GetOperationsTypes) then begin StartCalcFolderSize // Start calculate folder size operation end; // Chown if Assigned(FOperation.NewProperties[fpOwner]) then begin OriginalUser := '*'; OriginalGroup := '*'; // Get current user ID UserID := fpGetUID; // Only owner or root can change owner bPerm := (UserID = FFileAttr.FindData.st_uid) or (UserID = 0); // Owner combo box cbxUsers.Text := OriginalUser; // Only root can change owner cbxUsers.Enabled := (UserID = 0); if cbxUsers.Enabled then begin GetUsers(cbxUsers.Items); cbxUsers.Sorted:= False; cbxUsers.Items.Insert(0, '*'); end; // Group combo box cbxGroups.Text := OriginalGroup; cbxGroups.Enabled := bPerm; if bPerm then begin GetUsrGroups(UserID, cbxGroups.Items); cbxGroups.Sorted:= False; cbxGroups.Items.Insert(0, '*'); end; end; lblFile.Caption := Format(rsPropsContains, [Files, Directories]); lblFileName.Caption := lblFile.Caption; lblContains.Visible:= (Directories > 0); lblContainsStr.Visible:= (Directories > 0); lblMediaType.Visible:= False; lblMediaTypeStr.Visible:= False; lblSizeOnDisk.Visible:= False; lblSizeOnDiskStr.Visible:= False; lblSymlink.Visible:= False; lblSymlinkStr.Visible:= False; lblLinks.Visible:= False; lblLinksStr.Visible:= False; lblLastAccess.Visible:= False; lblLastAccessStr.Visible:= False; lblLastModif.Visible:= False; lblLastModifStr.Visible:= False; lblLastStChange.Visible:= False; lblLastStChangeStr.Visible:= False; lblCreated.Visible := False; lblCreatedStr.Visible := False; lblFolder.Caption:= FFiles.Path; lblExecutable.Visible:= False; chkExecutable.Visible:= False; FFileType:= FFiles[0].Attributes and S_IFMT; for Index:= 1 to FFiles.Count - 1 do begin if (FFileType <> (FFiles[Index].Attributes and S_IFMT)) then begin lblType.Caption:= rsPropsMultipleTypes; Exit; end; end; ShowType(FFileType); end; procedure TfrmFileProperties.cbChangeModeClick(Sender: TObject); var AMode, ExcludeAttrs: TFileAttrs; CheckBox: TCheckBox absolute Sender; begin if fsCreating in FormState then exit; if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; if CheckBox.State = cbGrayed then begin edtOctal.Text:= EmptyStr; lblAttrText.Caption:= EmptyStr; end else begin AMode:= GetModeFromForm(ExcludeAttrs); edtOctal.Text:= DecToOct(AMode); lblAttrText.Caption:= FormatUnixAttributesEx(AMode); end; FChangeTriggersEnabled := True; end; end; procedure TfrmFileProperties.chkExecutableChange(Sender: TObject); begin if chkExecutable.Tag = 0 then begin chkExecutable.Tag:= 1; case chkExecutable.State of cbChecked, cbUnchecked: begin cbExecOwner.Checked:= chkExecutable.Checked; cbExecGroup.Checked:= chkExecutable.Checked; cbExecOther.Checked:= chkExecutable.Checked; end; cbGrayed: begin cbExecOwner.Checked:= ((OriginalAttr and S_IXUSR) = S_IXUSR); cbExecGroup.Checked:= ((OriginalAttr and S_IXGRP) = S_IXGRP); cbExecOther.Checked:= ((OriginalAttr and S_IXOTH) = S_IXOTH); end; end; chkExecutable.Tag:= 0; end; end; procedure TfrmFileProperties.edtOctalKeyPress(Sender: TObject; var Key: char); begin if not ((Key in ['0'..'7']) or (Key = Chr(VK_BACK)) or (Key = Chr(VK_DELETE))) then Key:= #0; end; procedure TfrmFileProperties.edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var AMode: TFileAttrs; begin if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; AMode:= OctToDec(edtOctal.Text); lblAttrText.Caption := FormatUnixAttributesEx(AMode); ShowPermissions(AMode); FChangeTriggersEnabled := True; end; end; procedure TfrmFileProperties.ShowPermissions(Mode: TFileAttrs); begin cbReadOwner.Checked:= ((Mode AND S_IRUSR) = S_IRUSR); cbWriteOwner.Checked:= ((Mode AND S_IWUSR) = S_IWUSR); cbExecOwner.Checked:= ((Mode AND S_IXUSR) = S_IXUSR); cbReadGroup.Checked:= ((Mode AND S_IRGRP) = S_IRGRP); cbWriteGroup.Checked:= ((Mode AND S_IWGRP) = S_IWGRP); cbExecGroup.Checked:= ((Mode AND S_IXGRP) = S_IXGRP); cbReadOther.Checked:= ((Mode AND S_IROTH) = S_IROTH); cbWriteOther.Checked:= ((Mode AND S_IWOTH) = S_IWOTH); cbExecOther.Checked:= ((Mode AND S_IXOTH) = S_IXOTH); cbSuid.Checked:= ((Mode AND S_ISUID) = S_ISUID); cbSgid.Checked:= ((Mode AND S_ISGID) = S_ISGID); cbSticky.Checked:= ((Mode AND S_ISVTX) = S_ISVTX); ShowExecutable; end; procedure TfrmFileProperties.ShowFile(iIndex:Integer); var Idx: PtrInt; ASize: Int64; UserID: Cardinal; hasSize: Boolean; ABitmap: TBitmap; Attrs: TFileAttrs; AMimeType: String; isFileSystem: Boolean; begin isFileSystem := FFileSource.IsClass(TFileSystemFileSource); Idx := PixMapManager.GetIconByFile(FFiles[iIndex], isFileSystem, True, sim_all_and_exe, True); if Idx < 0 then Idx:= PixMapManager.GetDefaultIcon(FFiles[iIndex]); ABitmap:= PixMapManager.GetBitmap(Idx); imgFileIcon.Picture.Bitmap := ABitmap; ABitmap.Free; with FFiles[iIndex] do begin lblFileName.Caption:= Name; lblFile.Caption:= Name; lblFolder.Caption:= Path; if not (fpCreationTime in SupportedProperties) then begin if fpCreationTime in FFileSource.RetrievableFileProperties then begin FFileSource.RetrieveProperties(FFiles[iIndex], [fpCreationTime], []); end; end; // Size hasSize := (fpSize in SupportedProperties) and (not IsLinkToDirectory); if hasSize then begin if IsDirectory and (fsoCalcStatistics in FFileSource.GetOperationsTypes) then StartCalcFolderSize // Start calculate folder size operation else lblSize.Caption := FormatSize(Size); end; lblSize.Visible := hasSize; lblSizeStr.Visible := hasSize; lblContains.Visible:= IsDirectory; lblContainsStr.Visible:= IsDirectory; // Size on disk hasSize:= (fpAttributes in SupportedProperties) and (FPS_ISREG(Attributes)) and (FFileAttr.FindData.st_ino <> 0); if hasSize then begin ASize:= FFileAttr.FindData.st_blocks * 512; lblSizeOnDisk.Caption:= FormatSize(ASize); end; lblSizeOnDisk.Visible:= hasSize; lblSizeOnDiskStr.Visible:= hasSize; // Links lblLinks.Visible:= isFileSystem and (FPS_ISREG(Attributes)) and (FFileAttr.FindData.st_nlink > 1); if lblLinks.Visible then lblLinks.Caption:= IntToStrTS(FFileAttr.FindData.st_nlink); lblLinksStr.Visible:= lblLinks.Visible; // Times lblLastAccess.Visible := fpLastAccessTime in SupportedProperties; lblLastAccessStr.Visible := fpLastAccessTime in SupportedProperties; if fpLastAccessTime in SupportedProperties then lblLastAccess.Caption := Properties[fpLastAccessTime].Format(FPropertyFormatter) else lblLastAccess.Caption := ''; lblLastStChange.Visible := fpChangeTime in SupportedProperties; lblLastStChangeStr.Visible := fpChangeTime in SupportedProperties; if fpChangeTime in SupportedProperties then lblLastStChange.Caption := Properties[fpChangeTime].Format(FPropertyFormatter) else lblLastStChange.Caption := ''; lblLastModif.Visible := fpModificationTime in SupportedProperties; lblLastModifStr.Visible := fpModificationTime in SupportedProperties; if fpModificationTime in SupportedProperties then lblLastModif.Caption := Properties[fpModificationTime].Format(FPropertyFormatter) else lblLastModif.Caption := ''; lblCreated.Visible := fpCreationTime in SupportedProperties; lblCreatedStr.Visible := fpCreationTime in SupportedProperties; if fpCreationTime in SupportedProperties then lblCreated.Caption := Properties[fpCreationTime].Format(FPropertyFormatter) else lblCreated.Caption := ''; // Chown if fpOwner in SupportedProperties then begin OriginalUser := UIDToStr(OwnerProperty.Owner); OriginalGroup := GIDToStr(OwnerProperty.Group); // Get current user ID UserID := fpGetUID; // Only owner or root can change owner bPerm := (UserID = OwnerProperty.Owner) or (UserID = 0); // Owner combo box cbxUsers.Text := OriginalUser; // Only root can change owner cbxUsers.Enabled := (UserID = 0); if cbxUsers.Enabled then GetUsers(cbxUsers.Items); // Group combo box cbxGroups.Text := OriginalGroup; cbxGroups.Enabled := bPerm; if bPerm then GetUsrGroups(UserID, cbxGroups.Items); end; // MIME type hasSize:= isFileSystem; if hasSize then begin AMimeType:= GetFileMimeType(FullPath); hasSize:= Length(AMimeType) > 0; lblMediaType.Caption:= AMimeType; end; lblMediaType.Visible:= hasSize; lblMediaTypeStr.Visible:= hasSize; // Attributes if fpAttributes in SupportedProperties then begin Attrs := AttributesProperty.Value; FFileType:= Attrs and S_IFMT; OriginalAttr := Attrs and $0FFF; ShowPermissions(Attrs); lblExecutable.Visible:= FPS_ISREG(Attrs); chkExecutable.Visible:= lblExecutable.Visible; lblAttrText.Caption := Properties[fpAttributes].Format(DefaultFilePropertyFormatter); ShowType(Attrs); chkRecursive.Visible := IsDirectory; DividerBevel4.Visible:= chkRecursive.Visible; lblSymlink.Visible := FPS_ISLNK(Attrs); lblSymlinkStr.Visible := lblSymlink.Visible; if lblSymlink.Visible then begin if isFileSystem then lblSymlink.Caption := ReadSymLink(FullPath) else if (Assigned(LinkProperty) and LinkProperty.IsValid) then lblSymlink.Caption := LinkProperty.LinkTo else begin lblSymlink.Visible := False; lblSymlinkStr.Visible := False; end; end; end else begin chkRecursive.Visible:= False; DividerBevel4.Visible:= False; edtOctal.Text:= rsMsgErrNotSupported; lblAttrText.Caption:= rsMsgErrNotSupported; lblType.Caption:= rsPropsUnknownType; lblSymlink.Caption:= ''; end; end; tsPlugins.Visible:= isFileSystem; if isFileSystem then ShowPlugin(iIndex); end; procedure TfrmFileProperties.FormCreate(Sender: TObject); begin InitPropStorage(Self); if (FFiles.Count = 1) then ShowFile(0) else begin ShowMany; end; end; procedure TfrmFileProperties.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_TAB: begin if Shift * KeyModifiersShortcut = [ssCtrl] then begin pcPageControl.SelectNextPage(True); Key := 0; end else if Shift * KeyModifiersShortcut = [ssCtrl, ssShift] then begin pcPageControl.SelectNextPage(False); Key := 0; end; end; end; end; procedure TfrmFileProperties.OKButtonClick(Sender: TObject); var theNewProperties: TFileProperties; begin if Assigned(FOperation) then begin with FOperation do begin theNewProperties:= NewProperties; if fpAttributes in SupportedProperties then begin if theNewProperties[fpAttributes] is TUnixFileAttributesProperty then IncludeAttributes:= GetModeFromForm(ExcludeAttributes); // Nothing changed, clear new property if (IncludeAttributes = 0) and (ExcludeAttributes = 0) then begin theNewProperties[fpAttributes].Free; theNewProperties[fpAttributes]:= nil; end; end; if fpOwner in SupportedProperties then begin if (OriginalUser <> cbxUsers.Text) or (OriginalGroup <> cbxGroups.Text) then begin TFileOwnerProperty(theNewProperties[fpOwner]).Owner:= StrToUID(cbxUsers.Text); TFileOwnerProperty(theNewProperties[fpOwner]).Group:= StrToGID(cbxGroups.Text); end // Nothing changed, clear new property else begin theNewProperties[fpOwner].Free; theNewProperties[fpOwner]:= nil; end; end; NewProperties:= theNewProperties; Recursive:= chkRecursive.Checked; end; OperationsManager.AddOperation(FOperation); FOperation:= nil; end; end; procedure TfrmFileProperties.tmUpdateFolderSizeTimer(Sender: TObject); begin if Assigned(FFileSourceCalcStatisticsOperation) then with FFileSourceCalcStatisticsOperation.RetrieveStatistics do begin lblSize.Caption := FormatSize(Size); lblContains.Caption := Format(rsPropsContains, [Files, Directories]); end; end; procedure TfrmFileProperties.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if Assigned(FFileSourceCalcStatisticsOperation) and (State = fsosStopped) then begin tmUpdateFolderSize.Enabled:= False; tmUpdateFolderSizeTimer(tmUpdateFolderSize); FFileSourceCalcStatisticsOperation := nil; end; end; procedure TfrmFileProperties.ShowType(Attrs: TFileAttrs); begin if FPS_ISDIR(Attrs) then lblType.Caption:= rsPropsFolder {$IFDEF UNIX} else if FPS_ISREG(Attrs) then lblType.Caption:= rsPropsFile else if FPS_ISCHR(Attrs) then lblType.Caption:= rsPropsSpChrDev else if FPS_ISBLK(Attrs) then lblType.Caption:= rsPropsSpBlkDev else if FPS_ISFIFO(Attrs) then lblType.Caption:= rsPropsNmdPipe else if FPS_ISLNK(Attrs) then lblType.Caption:= rsPropsSymLink else if FPS_ISSOCK(Attrs) then lblType.Caption:= rsPropsSocket {$ENDIF} else lblType.Caption:= rsPropsUnknownType; end; procedure TfrmFileProperties.ShowExecutable; begin if chkExecutable.Tag = 0 then begin if cbExecOwner.Checked and cbExecGroup.Checked and cbExecOther.Checked then chkExecutable.State:= cbChecked else if not (cbExecOwner.Checked or cbExecGroup.Checked or cbExecOther.Checked) then chkExecutable.State:= cbUnchecked else begin chkExecutable.AllowGrayed:= True; chkExecutable.State:= cbGrayed; end; end; end; procedure TfrmFileProperties.StartCalcFolderSize; var aFiles: TFiles; begin aFiles:= FFiles.Clone; try FFileSourceCalcStatisticsOperation:= FFileSource.CreateCalcStatisticsOperation(aFiles) as TFileSourceCalcStatisticsOperation; if Assigned(FFileSourceCalcStatisticsOperation) then begin FFileSourceCalcStatisticsOperation.SkipErrors:= True; FFileSourceCalcStatisticsOperation.SymLinkOption:= fsooslDontFollow; FFileSourceCalcStatisticsOperation.AddStateChangedListener([fsosStopped], @FileSourceOperationStateChangedNotify); OperationsManager.AddOperation(FFileSourceCalcStatisticsOperation, False); tmUpdateFolderSize.Enabled:= True; end; finally aFiles.Free; end; end; procedure TfrmFileProperties.StopCalcFolderSize; begin if Assigned(FFileSourceCalcStatisticsOperation) then begin tmUpdateFolderSize.Enabled:= False; FFileSourceCalcStatisticsOperation.RemoveStateChangedListener([fsosStopped], @FileSourceOperationStateChangedNotify); FFileSourceCalcStatisticsOperation.Stop; end; FFileSourceCalcStatisticsOperation:= nil; end; procedure TfrmFileProperties.ShowPlugin(iIndex: Integer); var I, J: Integer; Value: String; Index: Integer; FileName: String; WdxModule: TWdxModule; begin FileName:= FFiles[iIndex].FullPath; Value:= LowerCase(FFiles[iIndex].Extension); for Index:= 0 to gWdxPlugins.Count - 1 do begin WdxModule:= gWdxPlugins.GetWdxModule(Index); if (Length(WdxModule.DetectStr) > 0) and WdxModule.FileParamVSDetectStr(FFiles[iIndex]) then begin if not gWdxPlugins.IsLoaded(Index) then begin if not gWdxPlugins.LoadModule(Index) then Continue; end; J:= 0; sgPlugins.RowCount:= WdxModule.FieldList.Count + 1; for I:= 0 to WdxModule.FieldList.Count - 1 do begin if not (TWdxField(WdxModule.FieldList.Objects[I]).FType in [ft_fulltext, ft_fulltextw]) then begin Value:= WdxModule.CallContentGetValue(FileName, I, 0, CONTENT_DELAYIFSLOW); if (Length(Value) > 0) then begin Inc(J); sgPlugins.Cells[1, J]:= Value; sgPlugins.Cells[0, J]:= TWdxField(WdxModule.FieldList.Objects[I]).LName; end; end; end; sgPlugins.RowCount:= J + 1; tsPlugins.TabVisible:= J > 0; if tsPlugins.TabVisible then Break; end; end; end; procedure TfrmFileProperties.UpdateAllowGrayed(AllowGrayed: Boolean); var Index: Integer; begin for Index:= 0 to tsAttributes.ControlCount - 1 do begin if tsAttributes.Controls[Index] is TCheckBox then TCheckBox(tsAttributes.Controls[Index]).AllowGrayed:= AllowGrayed; end; end; function TfrmFileProperties.FormatUnixAttributesEx(iAttr: TFileAttrs): String; begin if (FFiles.Count = 1) then Result:= FormatUnixAttributes(FFileType or iAttr) else begin Result:= Copy(FormatUnixAttributes(iAttr), 2, MaxInt); end; end; end. doublecmd-1.1.30/src/ffileproperties.lrj0000644000175000001440000001227415104114162017275 0ustar alexxusers{"version":1,"strings":[ {"hash":114087587,"name":"tfrmfileproperties.caption","sourcebytes":[80,114,111,112,101,114,116,105,101,115],"value":"Properties"}, {"hash":114087587,"name":"tfrmfileproperties.tsproperties.caption","sourcebytes":[80,114,111,112,101,114,116,105,101,115],"value":"Properties"}, {"hash":17199,"name":"tfrmfileproperties.lblfilename.caption","sourcebytes":[63,63,63],"value":"???"}, {"hash":5671610,"name":"tfrmfileproperties.lblfolderstr.caption","sourcebytes":[80,97,116,104,58],"value":"Path:"}, {"hash":6030986,"name":"tfrmfileproperties.lbltypestr.caption","sourcebytes":[84,121,112,101,58],"value":"Type:"}, {"hash":53066874,"name":"tfrmfileproperties.lblmediatypestr.caption","sourcebytes":[77,101,100,105,97,32,116,121,112,101,58],"value":"Media type:"}, {"hash":1474330,"name":"tfrmfileproperties.lblsymlinkstr.caption","sourcebytes":[83,121,109,108,105,110,107,32,116,111,58],"value":"Symlink to:"}, {"hash":5902474,"name":"tfrmfileproperties.lblsizestr.caption","sourcebytes":[83,105,122,101,58],"value":"Size:"}, {"hash":175865594,"name":"tfrmfileproperties.lblsizeondiskstr.caption","sourcebytes":[83,105,122,101,32,111,110,32,100,105,115,107,58],"value":"Size on disk:"}, {"hash":94883594,"name":"tfrmfileproperties.lblcontainsstr.caption","sourcebytes":[67,111,110,116,97,105,110,115,58],"value":"Contains:"}, {"hash":87052906,"name":"tfrmfileproperties.lbllinksstr.caption","sourcebytes":[76,105,110,107,115,58],"value":"Links:"}, {"hash":146321370,"name":"tfrmfileproperties.lblcreatedstr.caption","sourcebytes":[67,114,101,97,116,101,100,58],"value":"Created:"}, {"hash":184332074,"name":"tfrmfileproperties.lbllastmodifstr.caption","sourcebytes":[77,111,100,105,102,105,101,100,58],"value":"Modified:"}, {"hash":164289770,"name":"tfrmfileproperties.lbllastaccessstr.caption","sourcebytes":[65,99,99,101,115,115,101,100,58],"value":"Accessed:"}, {"hash":114874186,"name":"tfrmfileproperties.lbllaststchangestr.caption","sourcebytes":[83,116,97,116,117,115,32,99,104,97,110,103,101,100,58],"value":"Status changed:"}, {"hash":150815091,"name":"tfrmfileproperties.tsattributes.caption","sourcebytes":[65,116,116,114,105,98,117,116,101,115],"value":"Attributes"}, {"hash":41356085,"name":"tfrmfileproperties.lblfilestr.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":41356085,"name":"tfrmfileproperties.lblfile.caption","sourcebytes":[70,105,108,101,32,110,97,109,101],"value":"File name"}, {"hash":5694658,"name":"tfrmfileproperties.lblattrownerstr.caption","sourcebytes":[79,119,110,101,114],"value":"Owner"}, {"hash":6197413,"name":"tfrmfileproperties.lblwrite.caption","sourcebytes":[87,114,105,116,101],"value":"Write"}, {"hash":363380,"name":"tfrmfileproperties.lblread.caption","sourcebytes":[82,101,97,100],"value":"Read"}, {"hash":216771813,"name":"tfrmfileproperties.lblexec.caption","sourcebytes":[69,120,101,99,117,116,101],"value":"Execute"}, {"hash":5150400,"name":"tfrmfileproperties.lblattrgroupstr.caption","sourcebytes":[71,114,111,117,112],"value":"Group"}, {"hash":5680834,"name":"tfrmfileproperties.lblattrotherstr.caption","sourcebytes":[79,116,104,101,114],"value":"Other"}, {"hash":5951354,"name":"tfrmfileproperties.lblattrtextstr.caption","sourcebytes":[84,101,120,116,58],"value":"Text:"}, {"hash":265289741,"name":"tfrmfileproperties.lblattrtext.caption","sourcebytes":[45,45,45,45,45,45,45,45,45,45,45],"value":"-----------"}, {"hash":4787050,"name":"tfrmfileproperties.lblattrbitsstr.caption","sourcebytes":[66,105,116,115,58],"value":"Bits:"}, {"hash":89827322,"name":"tfrmfileproperties.lbloctal.caption","sourcebytes":[79,99,116,97,108,58],"value":"Octal:"}, {"hash":362964,"name":"tfrmfileproperties.cbsuid.caption","sourcebytes":[83,85,73,68],"value":"SUID"}, {"hash":359380,"name":"tfrmfileproperties.cbsgid.caption","sourcebytes":[83,71,73,68],"value":"SGID"}, {"hash":95091241,"name":"tfrmfileproperties.cbsticky.caption","sourcebytes":[83,116,105,99,107,121],"value":"Sticky"}, {"hash":74922797,"name":"tfrmfileproperties.chkexecutable.caption","sourcebytes":[65,108,108,111,119,32,38,101,120,101,99,117,116,105,110,103,32,102,105,108,101,32,97,115,32,112,114,111,103,114,97,109],"value":"Allow &executing file as program"}, {"hash":247123530,"name":"tfrmfileproperties.lblexecutable.caption","sourcebytes":[69,120,101,99,117,116,101,58],"value":"Execute:"}, {"hash":5694658,"name":"tfrmfileproperties.dividerbevel3.caption","sourcebytes":[79,119,110,101,114],"value":"Owner"}, {"hash":85845186,"name":"tfrmfileproperties.lblownerstr.caption","sourcebytes":[79,38,119,110,101,114],"value":"O&wner"}, {"hash":44996288,"name":"tfrmfileproperties.lblgroupstr.caption","sourcebytes":[38,71,114,111,117,112],"value":"&Group"}, {"hash":181090421,"name":"tfrmfileproperties.chkrecursive.caption","sourcebytes":[38,82,101,99,117,114,115,105,118,101],"value":"&Recursive"}, {"hash":121364483,"name":"tfrmfileproperties.tsplugins.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":346165,"name":"tfrmfileproperties.sgplugins.columns[0].title.caption","sourcebytes":[78,97,109,101],"value":"Name"}, {"hash":6063029,"name":"tfrmfileproperties.sgplugins.columns[1].title.caption","sourcebytes":[86,97,108,117,101],"value":"Value"} ]} doublecmd-1.1.30/src/ffileproperties.lfm0000644000175000001440000006506615104114162017273 0ustar alexxusersobject frmFileProperties: TfrmFileProperties Left = 764 Height = 483 Top = 123 Width = 458 ActiveControl = pcPageControl AutoSize = True Caption = 'Properties' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 483 ClientWidth = 458 Constraints.MinHeight = 432 Constraints.MinWidth = 458 KeyPreview = True OnCreate = FormCreate OnKeyDown = FormKeyDown Position = poScreenCenter SessionProperties = 'Height;Width' LCLVersion = '2.2.4.0' object pcPageControl: TPageControl AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ButtonPanel Left = 8 Height = 432 Top = 8 Width = 442 ActivePage = tsProperties Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 TabIndex = 0 TabOrder = 0 object tsProperties: TTabSheet AutoSize = True Caption = 'Properties' ClientHeight = 397 ClientWidth = 436 object pnlData: TPanel Left = 0 Height = 397 Top = 0 Width = 436 Align = alClient BevelOuter = bvNone ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 397 ClientWidth = 436 Color = clForm ParentColor = False TabOrder = 0 object pnlIcon: TPanel Left = 10 Height = 32 Top = 12 Width = 107 BevelOuter = bvNone ClientHeight = 32 ClientWidth = 107 TabOrder = 0 object imgFileIcon: TImage Left = 0 Height = 32 Top = 0 Width = 32 Stretch = True end end object lblFileName: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 127 Height = 32 Top = 12 Width = 24 BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = '???' Layout = tlCenter ParentColor = False ShowAccelChar = False end object lblFolderStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 63 Width = 107 BorderSpacing.Top = 16 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Path:' ParentColor = False end object lblFolder: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 60 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblTypeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 88 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Type:' ParentColor = False end object lblType: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 85 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblMediaTypeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 113 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Media type:' ParentColor = False end object lblMediaType: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 110 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblSymlinkStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 138 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Symlink to:' ParentColor = False end object lblSymlink: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 135 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblSizeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 163 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Size:' ParentColor = False end object lblSize: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 160 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblSizeOnDiskStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 188 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Size on disk:' ParentColor = False end object lblSizeOnDisk: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 185 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblContainsStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 213 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Contains:' ParentColor = False end object lblContains: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 210 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLinksStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 238 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Links:' ParentColor = False end object lblLinks: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 235 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblCreatedStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 269 Width = 107 BorderSpacing.Top = 10 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Created:' ParentColor = False end object lblCreated: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 268 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastModifStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 294 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Modified:' ParentColor = False end object lblLastModif: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 291 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastAccessStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 319 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Accessed:' ParentColor = False end object lblLastAccess: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 316 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end object lblLastStChangeStr: TLabel AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 343 Width = 107 BorderSpacing.Top = 2 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'Status changed:' ParentColor = False end object lblLastStChange: TKASCDEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Cursor = crIBeam Left = 127 Height = 23 Top = 340 Width = 24 AutoSize = True DrawStyle = dsExtra1 Lines.Strings = ( '???' ) ReadOnly = True end end end object tsAttributes: TTabSheet AutoSize = True Caption = 'Attributes' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 397 ClientWidth = 436 object lblFileStr: TLabel AnchorSideTop.Control = tsAttributes Left = 10 Height = 17 Top = 12 Width = 54 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False end object lblFile: TLabel AnchorSideTop.Control = tsAttributes Left = 106 Height = 17 Top = 12 Width = 54 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False ParentFont = False end object lblAttrOwnerStr: TLabel AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 74 Width = 37 Caption = 'Owner' ParentColor = False end object lblWrite: TLabel AnchorSideLeft.Control = cbWriteOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 187 Height = 17 Top = 48 Width = 30 Caption = 'Write' ParentColor = False end object lblRead: TLabel AnchorSideLeft.Control = cbReadOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 116 Height = 17 Top = 48 Width = 28 Caption = 'Read' ParentColor = False end object lblExec: TLabel AnchorSideLeft.Control = cbExecOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = DividerBevel1 AnchorSideTop.Side = asrBottom Left = 252 Height = 17 Top = 48 Width = 44 Caption = 'Execute' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 102 Width = 35 Caption = 'Group' ParentColor = False end object lblAttrOtherStr: TLabel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 130 Width = 32 Caption = 'Other' ParentColor = False end object lblAttrTextStr: TLabel AnchorSideLeft.Control = edtOctal AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 211 Height = 17 Top = 229 Width = 26 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = 'Text:' ParentColor = False end object lblAttrText: TLabel AnchorSideLeft.Control = lblAttrTextStr AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblAttrTextStr AnchorSideTop.Side = asrCenter Left = 245 Height = 17 Top = 229 Width = 44 BorderSpacing.Left = 8 Caption = '-----------' ParentColor = False ParentFont = False end object lblAttrBitsStr: TLabel AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 171 Width = 24 Caption = 'Bits:' ParentColor = False end object lblOctal: TLabel AnchorSideLeft.Control = lblAttrBitsStr AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 229 Width = 32 Caption = 'Octal:' FocusControl = edtOctal ParentColor = False end object cbReadOwner: TCheckBox AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 119 Height = 22 Top = 71 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 0 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = lblWrite AnchorSideTop.Side = asrBottom Left = 191 Height = 22 Top = 71 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 1 end object cbExecOwner: TCheckBox AnchorSideTop.Control = lblExec AnchorSideTop.Side = asrBottom Left = 263 Height = 22 Top = 71 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 2 end object cbReadGroup: TCheckBox AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 119 Height = 22 Top = 99 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbWriteOwner AnchorSideTop.Side = asrBottom Left = 191 Height = 22 Top = 99 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbExecOwner AnchorSideTop.Side = asrBottom Left = 263 Height = 22 Top = 99 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 5 end object cbReadOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 119 Height = 22 Top = 127 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbWriteGroup AnchorSideTop.Side = asrBottom Left = 191 Height = 22 Top = 127 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 263 Height = 22 Top = 127 Width = 22 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 8 end object cbSuid: TCheckBox AnchorSideLeft.Control = cbReadOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 119 Height = 22 Top = 168 Width = 53 AllowGrayed = True Caption = 'SUID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 9 end object cbSgid: TCheckBox AnchorSideLeft.Control = cbWriteOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 191 Height = 22 Top = 168 Width = 53 AllowGrayed = True Caption = 'SGID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 10 end object cbSticky: TCheckBox AnchorSideLeft.Control = cbExecOther AnchorSideTop.Control = DividerBevel2 AnchorSideTop.Side = asrBottom Left = 263 Height = 22 Top = 168 Width = 56 AllowGrayed = True Caption = 'Sticky' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 11 end object edtOctal: TEdit AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = chkExecutable AnchorSideTop.Side = asrBottom Left = 119 Height = 27 Top = 224 Width = 80 BorderSpacing.Top = 6 MaxLength = 4 OnKeyPress = edtOctalKeyPress OnKeyUp = edtOctalKeyUp TabOrder = 13 end object chkExecutable: TCheckBox AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrBottom Left = 119 Height = 22 Top = 196 Width = 199 BorderSpacing.Top = 6 Caption = 'Allow &executing file as program' OnClick = chkExecutableChange TabOrder = 12 end object lblExecutable: TLabel AnchorSideLeft.Control = lblAttrBitsStr AnchorSideTop.Control = chkExecutable AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 199 Width = 47 Caption = 'Execute:' ParentColor = False end object DividerBevel1: TDividerBevel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = lblFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAttributes AnchorSideRight.Side = asrBottom Left = 10 Height = 17 Top = 31 Width = 416 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 2 BorderSpacing.Right = 8 Font.Style = [fsBold] ParentFont = False Style = gsHorLines end object DividerBevel2: TDividerBevel AnchorSideLeft.Control = DividerBevel1 AnchorSideTop.Control = cbWriteOther AnchorSideTop.Side = asrBottom AnchorSideRight.Control = DividerBevel1 AnchorSideRight.Side = asrBottom Left = 10 Height = 17 Top = 151 Width = 416 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Font.Style = [fsBold] ParentFont = False Style = gsHorLines end object DividerBevel3: TDividerBevel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAttributes AnchorSideRight.Side = asrBottom Left = 10 Height = 17 Top = 257 Width = 416 Caption = 'Owner' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ParentFont = False Style = gsHorLines end object pnlOwner: TPanel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = DividerBevel3 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAttributes AnchorSideRight.Side = asrBottom Left = 10 Height = 74 Top = 274 Width = 416 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 74 ClientWidth = 416 ParentColor = False TabOrder = 14 object lblOwnerStr: TLabel AnchorSideLeft.Control = pnlOwner AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrCenter Left = 0 Height = 17 Top = 12 Width = 37 Caption = 'O&wner' FocusControl = cbxUsers ParentColor = False end object lblGroupStr: TLabel AnchorSideLeft.Control = pnlOwner AnchorSideTop.Control = cbxGroups AnchorSideTop.Side = asrCenter Left = 0 Height = 17 Top = 45 Width = 35 Caption = '&Group' FocusControl = cbxGroups ParentColor = False end object cbxUsers: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlOwner AnchorSideRight.Control = pnlOwner AnchorSideRight.Side = asrBottom Left = 110 Height = 29 Top = 6 Width = 306 Anchors = [akTop, akLeft, akRight] AutoComplete = True AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending] BorderSpacing.Top = 6 ItemHeight = 0 Sorted = True TabOrder = 0 end object cbxGroups: TComboBox AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlOwner AnchorSideRight.Side = asrBottom Left = 110 Height = 29 Top = 39 Width = 306 Anchors = [akTop, akLeft, akRight] AutoComplete = True AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchCaseSensitive, cbactSearchAscending] BorderSpacing.Top = 4 BorderSpacing.Bottom = 6 ItemHeight = 0 Sorted = True TabOrder = 1 end end object DividerBevel4: TDividerBevel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = pnlOwner AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAttributes AnchorSideRight.Side = asrBottom Left = 10 Height = 17 Top = 350 Width = 416 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 2 BorderSpacing.Right = 8 Font.Style = [fsBold] ParentFont = False Style = gsHorLines end object chkRecursive: TCheckBox AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = DividerBevel4 AnchorSideTop.Side = asrBottom Left = 10 Height = 22 Top = 367 Width = 78 Caption = '&Recursive' TabOrder = 15 end end object tsPlugins: TTabSheet Caption = 'Plugins' ClientHeight = 397 ClientWidth = 436 TabVisible = False object sgPlugins: TStringGrid Left = 0 Height = 397 Top = 0 Width = 436 Align = alClient AutoEdit = False AutoFillColumns = True BorderStyle = bsNone ColCount = 2 Columns = < item ReadOnly = True SizePriority = 0 Title.Caption = 'Name' Width = 218 end item Title.Caption = 'Value' Width = 218 end> FixedCols = 0 MouseWheelOption = mwGrid Options = [goSmoothScroll, goCellHints, goTruncCellHints, goCellEllipsis] ParentShowHint = False ShowHint = True TabOrder = 0 TitleStyle = tsNative ColWidths = ( 218 218 ) end end end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 8 Height = 29 Top = 446 Width = 442 Align = alNone Anchors = [akLeft, akRight, akBottom] OKButton.Name = 'OKButton' OKButton.DefaultCaption = True OKButton.OnClick = OKButtonClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True Color = clForm ButtonOrder = boCloseOKCancel TabOrder = 1 ShowButtons = [pbOK, pbCancel] ShowBevel = False end object tmUpdateFolderSize: TTimer Enabled = False Interval = 500 OnTimer = tmUpdateFolderSizeTimer Left = 360 Top = 88 end end doublecmd-1.1.30/src/ffileexecuteyourself.pas0000644000175000001440000001226015104114162020323 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Copy out, execute and delete files from non FileSystemFileSource Copyright (C) 2010-2016 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fFileExecuteYourSelf; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, uFile, uFileSource, uFileView, uOSForms, uShowForm; type { TfrmFileExecuteYourSelf } TfrmFileExecuteYourSelf = class(TAloneForm) btnClose: TBitBtn; lblFromPath: TLabel; lblFileName: TLabel; lblFromPathValue: TLabel; lblFileNameValue: TLabel; lblPrompt: TLabel; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); private FFileSource: IFileSource; FWaitData: TWaitData; public constructor Create(TheOwner: TComponent; aFileSource: IFileSource; const FileName, FromPath: String); reintroduce; destructor Destroy; override; end; procedure ShowFileEditExternal(const FileName, FromPath: string; aWaitData: TWaitData; Modal: Boolean = False); function ShowFileExecuteYourSelf(aFileView: TFileView; aFile: TFile; bWithAll: Boolean): Boolean; implementation {$R *.lfm} uses DCOSUtils, DCStrUtils, uTempFileSystemFileSource, uFileSourceOperation, uFileSourceCopyOperation, uShellExecute; procedure ShowFileEditExternal(const FileName, FromPath: string; aWaitData: TWaitData; Modal: Boolean = False); begin // Create wait window with TfrmFileExecuteYourSelf.Create(Application, nil, FileName, FromPath) do begin FWaitData:= aWaitData; // Show wait window if Modal then ShowModal else Visible := True; end; end; function ShowFileExecuteYourSelf(aFileView: TFileView; aFile: TFile; bWithAll: Boolean): Boolean; var TempFiles: TFiles = nil; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; CurrentDir, FileName: String; begin Result:= False; try TempFileSource:= TTempFileSystemFileSource.GetFileSource; if bWithAll then begin FileName:= TempFileSource.FileSystemRoot + ExcludeFrontPathDelimiter(aFile.FullPath); TempFiles:= aFileView.FileSource.GetFiles(aFileView.FileSource.GetRootDir); end else begin FileName:= TempFileSource.FileSystemRoot + aFile.Name; TempFiles:= TFiles.Create(aFileView.CurrentPath); TempFiles.Add(aFile.Clone); end; Operation := aFileView.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if not Assigned(Operation) then Exit; // Execute operation Operation.Execute; // Create wait window with TfrmFileExecuteYourSelf.Create(Application, TempFileSource, aFile.Name, aFileView.CurrentAddress + aFileView.CurrentPath) do begin FWaitData:= TEditorWaitData.Create(Operation as TFileSourceCopyOperation); // Show wait window Show; // Save current directory CurrentDir:= mbGetCurrentDir; Result:= ShellExecuteEx('open', FileName, TempFileSource.FileSystemRoot + ExcludeFrontPathDelimiter(aFile.Path)); // Restore current directory mbSetCurrentDir(CurrentDir); // If file can not be opened then close wait window if not Result then Close; end; finally FreeAndNil(Operation); FreeAndNil(TempFiles); end; end; { TfrmFileExecuteYourSelf } procedure TfrmFileExecuteYourSelf.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmFileExecuteYourSelf.FormCreate(Sender: TObject); begin // Workaround: TWinControl.WMSize loop detected // http://doublecmd.sourceforge.net/mantisbt/view.php?id=1378 Constraints.MaxWidth:= Screen.Width; Constraints.MaxHeight:= Screen.Height; end; constructor TfrmFileExecuteYourSelf.Create(TheOwner: TComponent; aFileSource: IFileSource; const FileName, FromPath: String); begin inherited Create(TheOwner); FFileSource:= aFileSource; lblFileNameValue.Caption:= FileName; lblFromPathValue.Caption:= FromPath; end; destructor TfrmFileExecuteYourSelf.Destroy; begin // Delete the temporary file source and all files inside. FFileSource:= nil; inherited Destroy; if Assigned(FWaitData) then FWaitData.Done; end; end. doublecmd-1.1.30/src/ffileexecuteyourself.lrj0000644000175000001440000000157515104114162020336 0ustar alexxusers{"version":1,"strings":[ {"hash":226521438,"name":"tfrmfileexecuteyourself.caption","sourcebytes":[87,97,105,116,46,46,46],"value":"Wait..."}, {"hash":30419601,"name":"tfrmfileexecuteyourself.lblprompt.caption","sourcebytes":[67,108,105,99,107,32,111,110,32,67,108,111,115,101,32,119,104,101,110,32,116,104,101,32,116,101,109,112,111,114,97,114,121,32,102,105,108,101,32,99,97,110,32,98,101,32,100,101,108,101,116,101,100,33],"value":"Click on Close when the temporary file can be deleted!"}, {"hash":44709525,"name":"tfrmfileexecuteyourself.btnclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"}, {"hash":124826538,"name":"tfrmfileexecuteyourself.lblfilename.caption","sourcebytes":[70,105,108,101,32,110,97,109,101,58],"value":"File name:"}, {"hash":5084682,"name":"tfrmfileexecuteyourself.lblfrompath.caption","sourcebytes":[70,114,111,109,58],"value":"From:"} ]} doublecmd-1.1.30/src/ffileexecuteyourself.lfm0000644000175000001440000000502015104114162020312 0ustar alexxusersobject frmFileExecuteYourSelf: TfrmFileExecuteYourSelf Left = 366 Height = 102 Top = 182 Width = 320 AutoSize = True BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'Wait...' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 102 ClientWidth = 320 OnClose = FormClose OnCreate = FormCreate ShowInTaskBar = stAlways LCLVersion = '1.6.0.4' object lblPrompt: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 15 Top = 8 Width = 304 Anchors = [akTop, akLeft, akRight] Caption = 'Click on Close when the temporary file can be deleted!' ParentColor = False end object btnClose: TBitBtn AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblFromPathValue AnchorSideTop.Side = asrBottom Left = 123 Height = 30 Top = 45 Width = 75 AutoSize = True BorderSpacing.Top = 8 Caption = '&Close' Kind = bkClose TabOrder = 0 end object lblFileNameValue: TLabel AnchorSideLeft.Control = lblFileName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 68 Height = 1 Top = 29 Width = 244 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 ParentColor = False end object lblFromPathValue: TLabel AnchorSideLeft.Control = lblFromPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileNameValue AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 45 Height = 1 Top = 36 Width = 267 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 ParentColor = False end object lblFileName: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 29 Width = 54 BorderSpacing.Top = 6 Caption = 'File name:' ParentColor = False end object lblFromPath: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 50 Width = 31 BorderSpacing.Top = 6 Caption = 'From:' ParentColor = False end end doublecmd-1.1.30/src/fextractdlg.pas0000644000175000001440000002601715104114162016376 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- File unpacking window Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fExtractDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, EditBtn, ExtCtrls, Buttons, Menus, DividerBevel, uFile, uFileSource, uArchiveFileSource, fButtonForm, uOperationsManager; type { TfrmExtractDlg } TfrmExtractDlg = class(TfrmButtonForm) cbExtractPath: TCheckBox; cbInSeparateFolder: TCheckBox; cbOverwrite: TCheckBox; DividerBevel: TDividerBevel; edtPassword: TEdit; edtExtractTo: TDirectoryEdit; lblExtractTo: TLabel; lblPassword: TLabel; cbFileMask: TComboBox; lblFileMask: TLabel; pnlCheckBoxes: TPanel; procedure cbExtractPathChange(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } FArcType: String; procedure SwitchOptions; procedure ExtractArchive(ArchiveFileSource: IArchiveFileSource; TargetFileSource: IFileSource; const TargetPath, TargetMask: String; QueueId: TOperationsManagerQueueIdentifier); protected procedure DoAutoSize; override; public { public declarations } end; // Frees 'SourceFiles'. procedure ShowExtractDlg(TheOwner: TComponent; SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetFileSource: IFileSource; sDestPath: String); implementation {$R *.lfm} uses Dialogs, uGlobs, uDCUtils, uShowMsg, uLng, DCStrUtils, uFileSourceOperation, uFileSystemFileSource, uArchiveFileSourceUtil, uFileSourceOperationTypes, uMultiArchiveFileSource, uMultiArchiveCopyOutOperation, uWcxArchiveFileSource, uWcxArchiveCopyOutOperation, uFileSourceOperationOptions, uArchiveCopyOperation, uMasks; function GetTargetPath(FileSource: IArchiveFileSource; const TargetPath: String): String; begin // if destination path is not absolute then extract to path there archive is located if GetPathType(TargetPath) <> ptAbsolute then Result := GetAbsoluteFileName(ExtractFilePath(FileSource.ArchiveFileName), TargetPath) else Result := IncludeTrailingPathDelimiter(TargetPath); end; procedure ShowExtractDlg(TheOwner: TComponent; SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetFileSource: IFileSource; sDestPath: String); var Result: Boolean; I, Count: Integer; extractDialog: TfrmExtractDlg; Operation: TFileSourceOperation; ArchiveFileSource: IArchiveFileSource; QueueId: TOperationsManagerQueueIdentifier; begin if not TargetFileSource.IsClass(TFileSystemFileSource) then begin msgWarning(rsMsgErrNotSupported); Exit; end; extractDialog := TfrmExtractDlg.Create(TheOwner); if Assigned(extractDialog) then try with extractDialog do begin Count := SourceFiles.Count; edtExtractTo.Text := sDestPath; if SourceFileSource.IsClass(TArchiveFileSource) then cbInSeparateFolder.Visible := False; cbFileMask.Items.Assign(glsMaskHistory); EnableControl(edtPassword, False); // If one archive is selected if (Count = 1) then begin FArcType:= SourceFiles[0].Extension; SwitchOptions; end; // Show form Result := (ShowModal = mrOk); if Result then begin if glsMaskHistory.IndexOf(cbFileMask.Text) < 0 then glsMaskHistory.Add(cbFileMask.Text); sDestPath := edtExtractTo.Text; // if in archive if SourceFileSource.IsClass(TArchiveFileSource) then begin if fsoCopyOut in SourceFileSource.GetOperationsTypes then begin sDestPath := GetTargetPath(SourceFileSource as IArchiveFileSource, sDestPath); Operation := SourceFileSource.CreateCopyOutOperation(TargetFileSource, SourceFiles, sDestPath); if Assigned(Operation) then begin TArchiveCopyOutOperation(Operation).ExtractMask := cbFileMask.Text; // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False); end else msgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgErrNotSupported); end else // if filesystem if SourceFileSource.IsClass(TFileSystemFileSource) then begin // if archives count > 1 then put to queue if (Count > 1) and (QueueIdentifier = FreeOperationsQueueId) then QueueId := OperationsManager.GetNewQueueIdentifier else begin QueueId := QueueIdentifier; end; // extract all selected archives for I := 0 to Count - 1 do begin try // Check if there is a ArchiveFileSource for possible archive. ArchiveFileSource := GetArchiveFileSource(SourceFileSource, SourceFiles[i], EmptyStr, False, True); // Try to determine archive type by content if (ArchiveFileSource = nil) then begin ArchiveFileSource := GetArchiveFileSource(SourceFileSource, SourceFiles[i], EmptyStr, True, True); end; // Extract current item ExtractArchive(ArchiveFileSource, TargetFileSource, sDestPath, cbFileMask.Text, QueueId); except on E: Exception do begin MessageDlg(E.Message, mtError, [mbOK], 0); end; end; end; // for end else msgWarning(rsMsgErrNotSupported); gExtractOverwrite := cbOverwrite.Checked; end; // if Result end; finally if Assigned(extractDialog) then FreeAndNil(extractDialog); if Assigned(SourceFiles) then FreeAndNil(SourceFiles); end; end; { TfrmExtractDlg } procedure TfrmExtractDlg.FormCreate(Sender: TObject); begin InitPropStorage(Self); cbOverwrite.Checked := gExtractOverwrite; end; procedure TfrmExtractDlg.cbExtractPathChange(Sender: TObject); begin SwitchOptions; end; procedure TfrmExtractDlg.SwitchOptions; var I: LongInt; begin // Check for this archive will be processed by MultiArc for I := 0 to gMultiArcList.Count - 1 do with gMultiArcList.Items[I] do begin if FEnabled and MatchesMaskList(FArcType, FExtension, ',') then begin // If addon supports unpacking without path if (Length(FExtractWithoutPath) <> 0) then cbExtractPath.Enabled:= True else begin cbExtractPath.Enabled:= False; cbExtractPath.Checked:= True; end; // If addon supports unpacking with password if cbExtractPath.Checked then EnableControl(edtPassword, (Pos('%W', FExtract) <> 0)) else EnableControl(edtPassword, (Pos('%W', FExtractWithoutPath) <> 0)); Break; end; end; end; procedure TfrmExtractDlg.ExtractArchive(ArchiveFileSource: IArchiveFileSource; TargetFileSource: IFileSource; const TargetPath, TargetMask: String; QueueId: TOperationsManagerQueueIdentifier); var FilesToExtract: TFiles; Operation: TFileSourceOperation; sTmpPath: string; begin if Assigned(ArchiveFileSource) then begin // Check if List and CopyOut are supported. if [fsoList, fsoCopyOut] * ArchiveFileSource.GetOperationsTypes = [fsoList, fsoCopyOut] then begin // Get files to extract. FilesToExtract := ArchiveFileSource.GetFiles(ArchiveFileSource.GetRootDir); if Assigned(FilesToExtract) then try sTmpPath := GetTargetPath(ArchiveFileSource, TargetPath); // if each archive in separate folder if cbInSeparateFolder.Checked then begin sTmpPath := sTmpPath + ExtractOnlyFileName(ArchiveFileSource.ArchiveFileName) + PathDelim; end; // extract all files Operation := ArchiveFileSource.CreateCopyOutOperation(TargetFileSource, FilesToExtract, sTmpPath); // Set operation specific options if Assigned(Operation) then begin if cbInSeparateFolder.State = cbGrayed then begin with Operation as TArchiveCopyOutOperation do ExtractFlags:= ExtractFlags + [efSmartExtract]; end; if ArchiveFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyOutOperation do begin ExtractMask := TargetMask; Password := edtPassword.Text; ExtractWithoutPath:= not cbExtractPath.Checked; end; end else if ArchiveFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyOutOperation do begin ExtractMask := TargetMask; if cbOverwrite.Checked then FileExistsOption := fsoofeOverwrite; ExtractWithoutPath:= not cbExtractPath.Checked; end; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else msgWarning(rsMsgNotImplemented); finally if Assigned(FilesToExtract) then FreeAndNil(FilesToExtract); end; end else msgWarning(rsMsgErrNotSupported); end; end; procedure TfrmExtractDlg.DoAutoSize; var Index: Integer; AControl: TControl; AMaxControl: TControl; AMaxWidth: Integer = 0; begin inherited DoAutoSize; for Index:= 0 to pnlContent.ControlCount - 1 do begin AControl:= pnlContent.Controls[Index]; if AControl is TCustomLabel then begin if AControl.Width > AMaxWidth then begin AMaxControl:= AControl; AMaxWidth:= AControl.Width; end; end; end; cbFileMask.AnchorSide[akLeft].Control:= AMaxControl; end; end. doublecmd-1.1.30/src/fextractdlg.lrj0000644000175000001440000000340615104114162016377 0ustar alexxusers{"version":1,"strings":[ {"hash":145335635,"name":"tfrmextractdlg.caption","sourcebytes":[85,110,112,97,99,107,32,102,105,108,101,115],"value":"Unpack files"}, {"hash":134744266,"name":"tfrmextractdlg.lblfilemask.caption","sourcebytes":[38,69,120,116,114,97,99,116,32,102,105,108,101,115,32,109,97,116,99,104,105,110,103,32,102,105,108,101,32,109,97,115,107,58],"value":"&Extract files matching file mask:"}, {"hash":106032954,"name":"tfrmextractdlg.lblpassword.caption","sourcebytes":[38,80,97,115,115,119,111,114,100,32,102,111,114,32,101,110,99,114,121,112,116,101,100,32,102,105,108,101,115,58],"value":"&Password for encrypted files:"}, {"hash":154698666,"name":"tfrmextractdlg.lblextractto.caption","sourcebytes":[84,111,32,116,104,101,32,38,100,105,114,101,99,116,111,114,121,58],"value":"To the &directory:"}, {"hash":11530,"name":"tfrmextractdlg.cbfilemask.text","sourcebytes":[42,46,42],"value":"*.*"}, {"hash":45675769,"name":"tfrmextractdlg.cbinseparatefolder.caption","sourcebytes":[85,110,112,97,99,107,32,101,97,99,104,32,97,114,99,104,105,118,101,32,116,111,32,97,32,38,115,101,112,97,114,97,116,101,32,115,117,98,100,105,114,32,40,110,97,109,101,32,111,102,32,116,104,101,32,97,114,99,104,105,118,101,41],"value":"Unpack each archive to a &separate subdir (name of the archive)"}, {"hash":211866595,"name":"tfrmextractdlg.cbextractpath.caption","sourcebytes":[38,85,110,112,97,99,107,32,112,97,116,104,32,110,97,109,101,115,32,105,102,32,115,116,111,114,101,100,32,119,105,116,104,32,102,105,108,101,115],"value":"&Unpack path names if stored with files"}, {"hash":212923379,"name":"tfrmextractdlg.cboverwrite.caption","sourcebytes":[79,38,118,101,114,119,114,105,116,101,32,101,120,105,115,116,105,110,103,32,102,105,108,101,115],"value":"O&verwrite existing files"} ]} doublecmd-1.1.30/src/fextractdlg.lfm0000644000175000001440000001306015104114162016363 0ustar alexxusersinherited frmExtractDlg: TfrmExtractDlg Left = 462 Height = 293 Top = 174 Width = 496 HelpContext = 160 HorzScrollBar.Page = 446 HorzScrollBar.Range = 437 HorzScrollBar.Visible = False VertScrollBar.Page = 182 VertScrollBar.Range = 177 ActiveControl = edtExtractTo AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Unpack files' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 293 ClientWidth = 496 OnCreate = FormCreate Position = poOwnerFormCenter inherited pnlContent: TPanel Height = 218 Top = 0 Width = 481 Align = alNone ChildSizing.TopBottomSpacing = 4 ClientHeight = 218 ClientWidth = 481 object lblFileMask: TLabel[0] AnchorSideLeft.Control = pnlCheckBoxes AnchorSideTop.Control = cbFileMask AnchorSideTop.Side = asrCenter Left = 0 Height = 22 Top = 15 Width = 211 BorderSpacing.Top = 3 Caption = '&Extract files matching file mask:' FocusControl = cbFileMask ParentColor = False end object lblExtractTo: TLabel[1] AnchorSideLeft.Control = pnlCheckBoxes AnchorSideTop.Control = edtExtractTo AnchorSideTop.Side = asrCenter Left = 0 Height = 22 Top = 59 Width = 108 BorderSpacing.Top = 8 Caption = 'To the &directory:' FocusControl = edtExtractTo ParentColor = False end object lblPassword: TLabel[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 0 Height = 22 Top = 185 Width = 193 BorderSpacing.Bottom = 3 Caption = '&Password for encrypted files:' FocusControl = edtPassword ParentColor = False end object cbFileMask: TComboBox[3] AnchorSideLeft.Control = lblFileMask AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 221 Height = 36 Top = 8 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 8 Constraints.MinWidth = 260 ItemHeight = 28 ParentFont = False TabOrder = 0 Text = '*.*' end object edtExtractTo: TDirectoryEdit[4] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = cbFileMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbFileMask AnchorSideRight.Side = asrBottom Left = 221 Height = 36 Top = 52 Width = 260 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 MaxLength = 0 TabOrder = 1 end object edtPassword: TEdit[5] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = pnlCheckBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExtractTo AnchorSideRight.Side = asrBottom Left = 221 Height = 36 Top = 178 Width = 260 Anchors = [akTop, akLeft, akRight] EchoMode = emPassword Enabled = False PasswordChar = '*' TabOrder = 3 end object pnlCheckBoxes: TPanel[6] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = edtExtractTo AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 90 Top = 88 Width = 446 AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 90 ClientWidth = 446 TabOrder = 2 object cbInSeparateFolder: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 26 Top = 6 Width = 446 AllowGrayed = True BorderSpacing.Top = 2 Caption = 'Unpack each archive to a &separate subdir (name of the archive)' TabOrder = 0 end object cbExtractPath: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 26 Top = 32 Width = 446 Caption = '&Unpack path names if stored with files' Checked = True OnChange = cbExtractPathChange State = cbChecked TabOrder = 1 end object cbOverwrite: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 26 Top = 58 Width = 446 Caption = 'O&verwrite existing files' Checked = True State = cbChecked TabOrder = 2 end end end inherited pnlButtons: TPanel AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = DividerBevel AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Height = 38 Top = 248 Width = 481 Align = alNone Anchors = [akTop, akLeft, akRight] ClientHeight = 38 ClientWidth = 481 inherited btnCancel: TBitBtn Left = 282 Height = 38 Width = 91 end inherited btnOK: TBitBtn Left = 382 Top = 0 end end object DividerBevel: TDividerBevel[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 8 Height = 22 Top = 222 Width = 481 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Font.Style = [fsBold] ParentFont = False end inherited pmQueuePopup: TPopupMenu[3] Left = 232 Top = 224 end enddoublecmd-1.1.30/src/feditsearch.pas0000644000175000001440000003247315104114162016353 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Search & Replace dialog Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fEditSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Buttons, ButtonPanel, SynEdit, SynEditTypes, uOSForms, DCClassesUtf8; type { TEditSearchOptions } TEditSearchOptions = record SearchText: String; ReplaceText: String; Flags: TSynSearchOptions; end; { TEditSearchDialogOption } //Not only it helps to show what we want to offer to user, it will help to determine the default //When used as parameters of function, place on required. //When used as a returned value, we'll include the status of all. TEditSearchDialogOption = set of (eswoCaseSensitiveChecked, eswoCaseSensitiveUnchecked, eswoWholeWordChecked, eswoWholeWordUnchecked, eswoSelectedTextChecked, eswoSelectedTextUnchecked, eswoSearchFromCursorChecked, eswoSearchFromCursorUnchecked, eswoRegularExpressChecked, eswoRegularExpressUnchecked, eswoDirectionDisabled, eswoDirectionEnabledForward, eswoDirectionEnabledBackward); { TfrmEditSearchReplace } TfrmEditSearchReplace = class(TModalForm) ButtonPanel: TButtonPanel; cbSearchText: TComboBox; cbSearchCaseSensitive: TCheckBox; cbSearchWholeWords: TCheckBox; cbSearchSelectedOnly: TCheckBox; cbSearchFromCursor: TCheckBox; cbSearchRegExp: TCheckBox; cbReplaceText: TComboBox; cbMultiLine: TCheckBox; gbSearchOptions: TGroupBox; lblReplaceWith: TCheckBox; lblSearchFor: TLabel; rgSearchDirection: TRadioGroup; procedure btnOKClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure lblReplaceWithChange(Sender: TObject); procedure RequestAlign(Data: PtrInt); private function GetSearchOptions: TEditSearchOptions; procedure SetSearchOptions(AValue: TEditSearchOptions); function GetTextSearchOptions: UIntPtr; public constructor Create(AOwner: TComponent; AReplace: TCheckBoxState); reintroduce; property SearchOptions: TEditSearchOptions read GetSearchOptions write SetSearchOptions; end; function GetSimpleSearchAndReplaceString(AOwner: TComponent; OptionAllowed: TEditSearchDialogOption; var sSearchText: string; var sReplaceText: string; var OptionsToReturn:TEditSearchDialogOption; PastSearchList:TStringListEx; PastReplaceList:TStringListEx):boolean; procedure DoSearchReplaceText(AEditor: TCustomSynEdit; AReplace, ABackwards: Boolean; AOptions: TEditSearchOptions); procedure ShowSearchReplaceDialog(AOwner: TComponent; AEditor: TCustomSynEdit; AReplace: TCheckBoxState; var AOptions: TEditSearchOptions); implementation {$R *.lfm} uses Math, Graphics, uGlobs, uLng, uDCUtils, uFindFiles, uShowMsg; function GetSimpleSearchAndReplaceString(AOwner:TComponent; OptionAllowed:TEditSearchDialogOption; var sSearchText:string; var sReplaceText:string; var OptionsToReturn:TEditSearchDialogOption; PastSearchList:TStringListEx; PastReplaceList:TStringListEx):boolean; var dlg: TfrmEditSearchReplace; begin result:=FALSE; OptionsToReturn:=[]; dlg := TfrmEditSearchReplace.Create(AOwner, cbChecked); try with dlg do begin //1. Let's enable to options host wanted to offer to user cbSearchCaseSensitive.Enabled := ((eswoCaseSensitiveChecked in OptionAllowed) OR (eswoCaseSensitiveUnchecked in OptionAllowed)); cbSearchWholeWords.Enabled := ((eswoWholeWordChecked in OptionAllowed) OR (eswoWholeWordUnchecked in OptionAllowed)); cbSearchSelectedOnly.Enabled := ((eswoSelectedTextChecked in OptionAllowed) OR (eswoSelectedTextUnchecked in OptionAllowed)); cbSearchFromCursor.Enabled := ((eswoSearchFromCursorChecked in OptionAllowed) OR (eswoSearchFromCursorUnchecked in OptionAllowed)); cbSearchRegExp.Enabled := ((eswoRegularExpressChecked in OptionAllowed) OR (eswoRegularExpressUnchecked in OptionAllowed)); rgSearchDirection.Enabled := ((eswoDirectionEnabledForward in OptionAllowed) OR (eswoDirectionEnabledBackward in OptionAllowed)); cbMultiLine.Enabled := cbSearchRegExp.Enabled; //2. Let's set the option to their default according to what host wants to offer cbSearchCaseSensitive.Checked := (eswoCaseSensitiveChecked in OptionAllowed); cbSearchWholeWords.Checked := (eswoWholeWordChecked in OptionAllowed); cbSearchSelectedOnly.Checked := (eswoSelectedTextChecked in OptionAllowed); cbSearchFromCursor.Checked := (eswoSearchFromCursorChecked in OptionAllowed); cbSearchRegExp.Checked := (eswoRegularExpressChecked in OptionAllowed); rgSearchDirection.ItemIndex:=ifthen((eswoDirectionEnabledBackward in OptionAllowed),1,0); //3. Setup the SEARCH info if sSearchText='' then sSearchText:=rsEditSearchCaption; cbSearchText.Items.Assign(PastSearchList); cbSearchText.Text:= sSearchText; //4. Setup the REPLACE info if sReplaceText='' then sReplaceText:=rsEditSearchReplace; cbReplaceText.Items.Assign(PastReplaceList); cbReplaceText.Text:=sReplaceText; //5. Get feedback from user if ShowModal=mrOk then begin //6. Let's set the options wanted by the user if cbSearchCaseSensitive.Enabled then if cbSearchCaseSensitive.Checked then OptionsToReturn:=OptionsToReturn+[eswoCaseSensitiveChecked] else OptionsToReturn:=OptionsToReturn+[eswoCaseSensitiveUnchecked]; if cbSearchWholeWords.Enabled then if cbSearchWholeWords.Checked then OptionsToReturn:=OptionsToReturn+[eswoWholeWordChecked] else OptionsToReturn:=OptionsToReturn+[eswoWholeWordUnchecked]; if cbSearchSelectedOnly.Enabled then if cbSearchSelectedOnly.Checked then OptionsToReturn:=OptionsToReturn+[eswoSelectedTextChecked] else OptionsToReturn:=OptionsToReturn+[eswoSelectedTextUnchecked]; if cbSearchFromCursor.Enabled then if cbSearchFromCursor.Checked then OptionsToReturn:=OptionsToReturn+[eswoSearchFromCursorChecked] else OptionsToReturn:=OptionsToReturn+[eswoSearchFromCursorUnchecked]; if cbSearchRegExp.Enabled then if cbSearchRegExp.Checked then OptionsToReturn:=OptionsToReturn+[eswoRegularExpressChecked] else OptionsToReturn:=OptionsToReturn+[eswoRegularExpressUnchecked]; if rgSearchDirection.Enabled then if rgSearchDirection.ItemIndex=1 then OptionsToReturn:=OptionsToReturn+[eswoDirectionEnabledBackward] else OptionsToReturn:=OptionsToReturn+[eswoDirectionEnabledForward]; //7. Let's set our history PastSearchList.Assign(cbSearchText.Items); PastReplaceList.Assign(cbReplaceText.Items); //8. And FINALLY, our valuable text to search we wanted to replace! sSearchText:=cbSearchText.Text; sReplaceText:=cbReplaceText.Text; result:=((sSearchText<>sReplaceText) AND (sSearchText<>'')); end; end; finally FreeAndNil(Dlg); end; end; procedure DoSearchReplaceText(AEditor: TCustomSynEdit; AReplace, ABackwards: Boolean; AOptions: TEditSearchOptions); var Flags: TSynSearchOptions; begin Flags := AOptions.Flags; if ABackwards then Include(Flags, ssoBackwards) else begin Exclude(Flags, ssoBackwards); end; if AReplace then begin Flags += [ssoPrompt, ssoReplace, ssoReplaceAll]; end; try if AEditor.SearchReplace(AOptions.SearchText, AOptions.ReplaceText, Flags) = 0 then begin if ssoBackwards in Flags then AEditor.BlockEnd := AEditor.BlockBegin else begin AEditor.BlockBegin := AEditor.BlockEnd; end; AEditor.CaretXY := AEditor.BlockBegin; msgOK(Format(rsViewNotFound, ['"' + AOptions.SearchText + '"'])); end; except on E: Exception do msgError(E.Message); end; end; procedure ShowSearchReplaceDialog(AOwner: TComponent; AEditor: TCustomSynEdit; AReplace: TCheckBoxState; var AOptions: TEditSearchOptions); var Options: TEditSearchOptions; begin with TfrmEditSearchReplace.Create(AOwner, AReplace) do try Options := AOptions; if AEditor.SelAvail and (AEditor.BlockBegin.Y <> AEditor.BlockEnd.Y) then Options.Flags += [ssoSelectedOnly]; // If something is selected then search for that text if AEditor.SelAvail and (AEditor.BlockBegin.Y = AEditor.BlockEnd.Y) then Options.SearchText := AEditor.SelText else begin if gEditorFindWordAtCursor then Options.SearchText := AEditor.GetWordAtRowCol(AEditor.CaretXY); end; cbSearchText.Items.Text := glsSearchHistory.Text; cbReplaceText.Items.Text := glsReplaceHistory.Text; // Assign search options SearchOptions := Options; if ShowModal = mrOK then begin AOptions := SearchOptions; AReplace := lblReplaceWith.State; glsSearchHistory.Assign(cbSearchText.Items); glsReplaceHistory.Assign(cbReplaceText.Items); if AOptions.SearchText <> '' then begin DoSearchReplaceText(AEditor, AReplace = cbChecked, ssoBackwards in AOptions.Flags, AOptions); AOptions.Flags -= [ssoEntireScope]; gFirstTextSearch := False; end; end; finally Free; end; end; { TfrmEditSearchReplace } procedure TfrmEditSearchReplace.btnOKClick(Sender: TObject); begin InsertFirstItem(cbSearchText.Text, cbSearchText, GetTextSearchOptions); ModalResult := mrOK end; procedure TfrmEditSearchReplace.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if ModalResult = mrOK then InsertFirstItem(cbReplaceText.Text, cbReplaceText, GetTextSearchOptions); end; procedure TfrmEditSearchReplace.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; procedure TfrmEditSearchReplace.FormShow(Sender: TObject); begin if cbSearchText.Text = EmptyStr then begin if cbSearchText.Items.Count > 0 then cbSearchText.Text:= cbSearchText.Items[0]; end; cbSearchText.SelectAll; // Fixes AutoSize under Qt Application.QueueAsyncCall(@RequestAlign, 0); end; procedure TfrmEditSearchReplace.lblReplaceWithChange(Sender: TObject); begin if lblReplaceWith.Checked then Caption:= rsEditSearchReplace else begin Caption:= rsEditSearchCaption; end; cbReplaceText.Enabled := lblReplaceWith.Checked; end; procedure TfrmEditSearchReplace.RequestAlign(Data: PtrInt); begin Width := Width + 1; Width := Width - 1; end; function TfrmEditSearchReplace.GetSearchOptions: TEditSearchOptions; begin Result.SearchText:= cbSearchText.Text; Result.ReplaceText := cbReplaceText.Text; Result.Flags := []; if cbSearchCaseSensitive.Checked then Result.Flags += [ssoMatchCase]; if cbSearchWholeWords.Checked then Result.Flags += [ssoWholeWord]; if cbSearchSelectedOnly.Checked then Result.Flags += [ssoSelectedOnly]; if not cbSearchFromCursor.Checked then Result.Flags += [ssoEntireScope]; if cbSearchRegExp.Checked then Result.Flags += [ssoRegExpr]; if cbMultiLine.Checked then Result.Flags += [ssoRegExprMultiLine]; if rgSearchDirection.ItemIndex = 1 then Result.Flags += [ssoBackwards]; end; procedure TfrmEditSearchReplace.SetSearchOptions(AValue: TEditSearchOptions); begin cbSearchText.Text := AValue.SearchText; cbReplaceText.Text := AValue.ReplaceText; with AValue do begin cbSearchCaseSensitive.Checked := ssoMatchCase in Flags; cbSearchWholeWords.Checked := ssoWholeWord in Flags; cbSearchSelectedOnly.Checked := ssoSelectedOnly in Flags; cbSearchFromCursor.Checked := not (ssoEntireScope in Flags); cbSearchRegExp.Checked := ssoRegExpr in Flags; cbMultiLine.Checked := ssoRegExprMultiLine in Flags; rgSearchDirection.ItemIndex := Ord(ssoBackwards in Flags); end; end; function TfrmEditSearchReplace.GetTextSearchOptions: UIntPtr; var Options: TTextSearchOptions absolute Result; begin Result:= 0; if cbSearchCaseSensitive.Checked then Include(Options, tsoMatchCase); if cbSearchRegExp.Checked then Include(Options, tsoRegExpr); end; constructor TfrmEditSearchReplace.Create(AOwner: TComponent; AReplace: TCheckBoxState); begin inherited Create(AOwner); lblReplaceWith.Visible:= (AReplace <> cbGrayed); cbReplaceText.Visible:= (AReplace <> cbGrayed); cbReplaceText.Enabled := (AReplace = cbChecked); lblReplaceWith.Checked := (AReplace = cbChecked); if (AReplace = cbChecked) then Caption:= rsEditSearchReplace else begin Caption:= rsEditSearchCaption; end; rgSearchDirection.Items.Strings[0]:= rsEditSearchFrw; rgSearchDirection.Items.Strings[1]:= rsEditSearchBack; end; end. doublecmd-1.1.30/src/feditsearch.lrj0000644000175000001440000000375615104114162016361 0ustar alexxusers{"version":1,"strings":[ {"hash":186617562,"name":"tfrmeditsearchreplace.lblsearchfor.caption","sourcebytes":[38,83,101,97,114,99,104,32,102,111,114,58],"value":"&Search for:"}, {"hash":263925658,"name":"tfrmeditsearchreplace.lblreplacewith.caption","sourcebytes":[38,82,101,112,108,97,99,101,32,119,105,116,104,58],"value":"&Replace with:"}, {"hash":90681438,"name":"tfrmeditsearchreplace.gbsearchoptions.caption","sourcebytes":[79,112,116,105,111,110],"value":"Option"}, {"hash":128736681,"name":"tfrmeditsearchreplace.cbsearchcasesensitive.caption","sourcebytes":[67,38,97,115,101,32,115,101,110,115,105,116,105,118,105,116,121],"value":"C&ase sensitivity"}, {"hash":151740121,"name":"tfrmeditsearchreplace.cbsearchwholewords.caption","sourcebytes":[38,87,104,111,108,101,32,119,111,114,100,115,32,111,110,108,121],"value":"&Whole words only"}, {"hash":231163145,"name":"tfrmeditsearchreplace.cbsearchselectedonly.caption","sourcebytes":[83,101,108,101,99,116,101,100,32,38,116,101,120,116,32,111,110,108,121],"value":"Selected &text only"}, {"hash":60025108,"name":"tfrmeditsearchreplace.cbsearchfromcursor.caption","sourcebytes":[83,38,101,97,114,99,104,32,102,114,111,109,32,99,97,114,101,116],"value":"S&earch from caret"}, {"hash":8115171,"name":"tfrmeditsearchreplace.cbsearchregexp.caption","sourcebytes":[38,82,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,115],"value":"&Regular expressions"}, {"hash":135735390,"name":"tfrmeditsearchreplace.cbmultiline.caption","sourcebytes":[38,77,117,108,116,105,108,105,110,101,32,112,97,116,116,101,114,110],"value":"&Multiline pattern"}, {"hash":146466142,"name":"tfrmeditsearchreplace.rgsearchdirection.caption","sourcebytes":[68,105,114,101,99,116,105,111,110],"value":"Direction"}, {"hash":11067,"name":"tfrmeditsearchreplace.buttonpanel.okbutton.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmeditsearchreplace.buttonpanel.cancelbutton.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/feditsearch.lfm0000644000175000001440000001447515104114162016350 0ustar alexxusersobject frmEditSearchReplace: TfrmEditSearchReplace Left = 606 Height = 274 Top = 251 Width = 385 ActiveControl = cbSearchText AutoSize = True BorderIcons = [] ChildSizing.TopBottomSpacing = 6 ClientHeight = 274 ClientWidth = 385 Constraints.MinWidth = 385 OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnShow = FormShow Position = poOwnerFormCenter SessionProperties = 'Left;Top;Width;Height' LCLVersion = '2.2.0.4' object lblSearchFor: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 16 Width = 56 BorderSpacing.Left = 12 Caption = '&Search for:' FocusControl = cbSearchText ParentColor = False end object lblReplaceWith: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrCenter Left = 12 Height = 19 Top = 43 Width = 90 BorderSpacing.Left = 12 Caption = '&Replace with:' Color = clDefault OnChange = lblReplaceWithChange ParentColor = False TabOrder = 1 end object cbSearchText: TComboBox AnchorSideLeft.Control = lblSearchFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 74 Height = 23 Top = 12 Width = 303 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 8 ItemHeight = 15 TabOrder = 0 end object gbSearchOptions: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom Left = 12 Height = 156 Top = 76 Width = 142 AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Caption = 'Option' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 136 ClientWidth = 138 TabOrder = 3 object cbSearchCaseSensitive: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = gbSearchOptions Left = 8 Height = 19 Top = 6 Width = 100 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'C&ase sensitivity' TabOrder = 0 end object cbSearchWholeWords: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchCaseSensitive AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 27 Width = 115 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Whole words only' TabOrder = 1 end object cbSearchSelectedOnly: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchWholeWords AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 48 Width = 113 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'Selected &text only' TabOrder = 2 end object cbSearchFromCursor: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchSelectedOnly AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 69 Width = 113 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'S&earch from caret' TabOrder = 3 end object cbSearchRegExp: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchFromCursor AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 90 Width = 124 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Regular expressions' TabOrder = 4 end object cbMultiLine: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchRegExp AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 111 Width = 108 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Multiline pattern' TabOrder = 5 end end object rgSearchDirection: TRadioGroup AnchorSideLeft.Control = gbSearchOptions AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbSearchText AnchorSideRight.Side = asrBottom Left = 160 Height = 70 Top = 76 Width = 217 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 12 Caption = 'Direction' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 213 Items.Strings = ( '&Forward' '&Backward' ) TabOrder = 4 end object cbReplaceText: TComboBox AnchorSideLeft.Control = lblReplaceWith AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 108 Height = 23 Top = 41 Width = 269 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 8 ItemHeight = 15 TabOrder = 2 end object ButtonPanel: TButtonPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSearchOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 26 Top = 242 Width = 373 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.OnClick = btnOKClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.Caption = '&Cancel' TabOrder = 5 Spacing = 12 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end doublecmd-1.1.30/src/feditor.pas0000644000175000001440000007103515104114162015523 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Build-in Editor using SynEdit and his Highlighters Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Legacy comment from its origin: Build-in Editor for Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz This form used SynEdit and his Highlighters contributors: Copyright (C) 2006-2015 Alexander Koblov (Alexx2000@mail.ru) } unit fEditor; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, ActnList, Menus, SynEdit, StdCtrls, LMessages, ComCtrls, SynEditSearch, SynEditHighlighter, uDebug, uOSForms, uShowForm, types, Graphics, KASComCtrls, uFormCommands, uHotkeyManager, LCLVersion, SynPluginMultiCaret, fEditSearch; const HotkeysCategory = 'Editor'; type { TfrmEditor } TfrmEditor = class(TAloneForm,IFormCommands) actEditCut: TAction; actEditCopy: TAction; actEditSelectAll: TAction; actEditUndo: TAction; actEditRedo: TAction; actEditPaste: TAction; actEditDelete: TAction; actEditFindNext: TAction; actEditLineEndCrLf: TAction; actEditLineEndCr: TAction; actEditLineEndLf: TAction; actEditGotoLine: TAction; actEditFindPrevious: TAction; actFileReload: TAction; ilBookmarks: TImageList; MainMenu1: TMainMenu; ActListEdit: TActionList; actAbout: TAction; actFileOpen: TAction; actFileClose: TAction; actFileSave: TAction; actFileSaveAs: TAction; actFileNew: TAction; actFileExit: TAction; MenuItem1: TMenuItem; miFileReload: TMenuItem; miFindPrevious: TMenuItem; miGotoLine: TMenuItem; miEditLineEndCr: TMenuItem; miEditLineEndLf: TMenuItem; miEditLineEndCrLf: TMenuItem; miLineEndType: TMenuItem; N5: TMenuItem; miEncodingOut: TMenuItem; miEncodingIn: TMenuItem; miEncoding: TMenuItem; miFindNext: TMenuItem; miDelete: TMenuItem; miSelectAll: TMenuItem; miRedo: TMenuItem; miDeleteContext: TMenuItem; miSelectAllContext: TMenuItem; miSeparator2: TMenuItem; miPasteContext: TMenuItem; miCopyContext: TMenuItem; miCutContext: TMenuItem; miSeparator1: TMenuItem; miUndoContext: TMenuItem; miFile: TMenuItem; New1: TMenuItem; Open1: TMenuItem; pmContextMenu: TPopupMenu; Save1: TMenuItem; SaveAs1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; miEdit: TMenuItem; miUndo: TMenuItem; N3: TMenuItem; miCut: TMenuItem; miCopy: TMenuItem; miPaste: TMenuItem; N4: TMenuItem; miFind: TMenuItem; miReplace: TMenuItem; Help1: TMenuItem; miAbout: TMenuItem; StatusBar: TStatusBar; Editor: TSynEdit; miHighlight: TMenuItem; actEditFind: TAction; actEditRplc: TAction; actConfHigh: TAction; miDiv: TMenuItem; miConfHigh: TMenuItem; tbToolBar: TToolBarAdv; tbNew: TToolButton; tbOpen: TToolButton; tbSave: TToolButton; tbSeparator1: TToolButton; tbCut: TToolButton; tbCopy: TToolButton; tbPaste: TToolButton; tbSeparator2: TToolButton; tbUndo: TToolButton; tbRedo: TToolButton; tbSeparator3: TToolButton; tbConfig: TToolButton; tbHelp: TToolButton; procedure actExecute(Sender: TObject); procedure EditorMouseWheelDown(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var Handled: Boolean); procedure EditorMouseWheelUp(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var Handled: Boolean); procedure FormCreate(Sender: TObject); procedure EditorReplaceText(Sender: TObject; const ASearch, AReplace: string; {%H-}Line, {%H-}Column: integer; var ReplaceAction: TSynReplaceAction); procedure EditorChange(Sender: TObject); procedure EditorStatusChange(Sender: TObject; {%H-}Changes: TSynStatusChanges); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure frmEditorClose(Sender: TObject; var CloseAction: TCloseAction); private { Private declarations } bNoName: Boolean; FSearchOptions: TEditSearchOptions; FFileName: String; sEncodingIn, sEncodingOut, sEncodingStat, sOriginalText: String; FWaitData: TWaitData; FElevate: TDuplicates; FCommands: TFormCommands; FMultiCaret: TSynPluginMultiCaret; property Commands: TFormCommands read FCommands implements IFormCommands; procedure ChooseEncoding(mnuMenuItem: TMenuItem; sEncoding: String); {en Saves editor content to a file. @returns(@true if successful) } function SaveFile(const aFileName: String): Boolean; procedure SetFileName(const AValue: String); protected procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public { Public declarations } SynEditSearch: TSynEditSearch; { Function CreateNewTab:Integer; // return tab number Function OpenFileNewTab(const sFileName:String):Integer; } destructor Destroy; override; procedure AfterConstruction; override; {en Opens a file. @returns(@true if successful) } function OpenFile(const aFileName: String): Boolean; procedure UpdateStatus; procedure SetEncodingIn(Sender:TObject); procedure SetEncodingOut(Sender:TObject); procedure SetHighLighter(Sender:TObject); procedure UpdateHighlighter(Highlighter: TSynCustomHighlighter); procedure LoadGlobalOptions; property FileName: String read FFileName write SetFileName; published procedure cm_FileReload(const Params: array of string); procedure cm_EditFind(const {%H-}Params:array of string); procedure cm_EditFindNext(const {%H-}Params:array of string); procedure cm_EditFindPrevious(const {%H-}Params:array of string); procedure cm_EditGotoLine(const {%H-}Params:array of string); procedure cm_EditLineEndCr(const {%H-}Params:array of string); procedure cm_EditLineEndCrLf(const {%H-}Params:array of string); procedure cm_EditLineEndLf(const {%H-}Params:array of string); procedure cm_EditDelete(const {%H-}Params:array of string); procedure cm_EditRedo(const {%H-}Params:array of string); procedure cm_About(const {%H-}Params:array of string); procedure cm_EditCopy(const {%H-}Params:array of string); procedure cm_EditCut(const {%H-}Params:array of string); procedure cm_EditPaste(const {%H-}Params:array of string); procedure cm_EditSelectAll(const {%H-}Params:array of string); procedure cm_FileNew(const {%H-}Params:array of string); procedure cm_FileOpen(const {%H-}Params:array of string); procedure cm_EditUndo(const {%H-}Params:array of string); procedure cm_FileSave(const {%H-}Params:array of string); procedure cm_FileSaveAs(const {%H-}Params:array of string); procedure cm_FileExit(const {%H-}Params:array of string); procedure cm_ConfHigh(const {%H-}Params:array of string); procedure cm_EditRplc(const {%H-}Params:array of string); end; procedure ShowEditor(const sFileName: String; WaitData: TWaitData = nil); var LastEditorUsedForConfiguration: TfrmEditor = nil; implementation {$R *.lfm} uses Clipbrd, dmCommonData, dmHigh, SynEditTypes, LCLType, LConvEncoding, uLng, uShowMsg, uGlobs, fOptions, DCClassesUtf8, uAdministrator, uHighlighters, uOSUtils, uConvEncoding, fOptionsToolsEditor, uDCUtils, uClipboard, uFindFiles, DCOSUtils; procedure ShowEditor(const sFileName: String; WaitData: TWaitData = nil); var Editor: TfrmEditor; begin Editor := TfrmEditor.Create(Application); Editor.FWaitData := WaitData; if sFileName = '' then Editor.cm_FileNew(['']) else begin if not Editor.OpenFile(sFileName) then Exit; end; if (WaitData = nil) then Editor.ShowOnTop else begin WaitData.ShowOnTop(Editor); end; LastEditorUsedForConfiguration := Editor; end; procedure TfrmEditor.FormCreate(Sender: TObject); var i:Integer; mi:TMenuItem; HMEditor: THMForm; miOther: TMenuItem = nil; EncodingsList: TStringList; Options: TTextSearchOptions; begin InitPropStorage(Self); Menu.Images:= dmComData.ilEditorImages; LoadGlobalOptions; // update menu highlighting miHighlight.Clear; for i:= 0 to dmHighl.SynHighlighterList.Count - 1 do begin mi:= TMenuItem.Create(miHighlight); mi.Caption:= TSynCustomHighlighter(dmHighl.SynHighlighterList.Objects[i]).LanguageName; mi.Tag:= i; mi.Enabled:= True; mi.OnClick:=@SetHighLighter; if not TSynCustomHighlighter(dmHighl.SynHighlighterList.Objects[i]).Other then miHighlight.Add(mi) else begin if (miOther = nil) then begin miOther:= TMenuItem.Create(miHighlight); miOther.Caption:= rsDlgButtonOther; end; miOther.Add(mi); end; end; if Assigned(miOther) then miHighlight.Add(miOther); // update menu encoding miEncodingIn.Clear; miEncodingOut.Clear; EncodingsList:= TStringList.Create; GetSupportedEncodings(EncodingsList); for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncodingIn); mi.Caption:= EncodingsList[I]; mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 1; mi.OnClick:= @SetEncodingIn; miEncodingIn.Add(mi); end; for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncodingOut); mi.Caption:= EncodingsList[I]; mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 2; mi.OnClick:= @SetEncodingOut; miEncodingOut.Add(mi); end; EncodingsList.Free; FSearchOptions.Flags := [ssoEntireScope]; // if we already search text then use last searched text if not gFirstTextSearch then begin for I:= 0 to glsSearchHistory.Count - 1 do begin Options:= TTextSearchOptions(UInt32(UIntPtr(glsSearchHistory.Objects[I]))); if (tsoHex in Options) then Continue; if (tsoMatchCase in Options) then FSearchOptions.Flags += [ssoMatchCase]; if (tsoRegExpr in Options) then FSearchOptions.Flags += [ssoRegExpr]; FSearchOptions.SearchText:= glsSearchHistory[I]; Break; end; end; FixFormIcon(Handle); HMEditor := HotMan.Register(Self, HotkeysCategory); HMEditor.RegisterActionList(ActListEdit); FCommands := TFormCommands.Create(Self, ActListEdit); FMultiCaret := TSynPluginMultiCaret.Create(Editor); end; procedure TfrmEditor.LoadGlobalOptions; begin Editor.Options:= gEditorSynEditOptions; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); Editor.TabWidth := gEditorSynEditTabWidth; Editor.RightEdge := gEditorSynEditRightEdge; Editor.BlockIndent := gEditorSynEditBlockIndent; end; procedure TfrmEditor.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmEditor.EditorMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var t:integer; begin if (Shift=[ssCtrl])and(gFonts[dcfEditor].Size > gFonts[dcfEditor].MinValue) then begin t:=Editor.TopLine; gFonts[dcfEditor].Size:=gFonts[dcfEditor].Size-1; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); Editor.TopLine:=t; Editor.Refresh; Handled:=True; end; end; procedure TfrmEditor.EditorMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var t:integer; begin if (Shift=[ssCtrl])and(gFonts[dcfEditor].Size < gFonts[dcfEditor].MaxValue) then begin t:=Editor.TopLine; gFonts[dcfEditor].Size:=gFonts[dcfEditor].Size+1; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); Editor.TopLine:=t; Editor.Refresh; Handled:=True; end; end; function TfrmEditor.OpenFile(const aFileName: String): Boolean; var Buffer: AnsiString; Reader: TFileStreamUAC; Highlighter: TSynCustomHighlighter; begin PushPop(FElevate); try Result := False; try Reader := TFileStreamUAC.Create(aFileName, fmOpenRead or fmShareDenyNone); try SetLength(sOriginalText, Reader.Size); actFileSave.Enabled:= not FileIsReadOnlyEx(Reader.Handle); Reader.Read(Pointer(sOriginalText)^, Length(sOriginalText)); finally Reader.Free; end; // Try to detect encoding by first 4 kb of text Buffer := Copy(sOriginalText, 1, 4096); sEncodingIn := DetectEncoding(Buffer); ChooseEncoding(miEncodingIn, sEncodingIn); sEncodingOut := sEncodingIn; // by default ChooseEncoding(miEncodingOut, sEncodingOut); // Try to guess line break style with Editor.Lines do begin if (sEncodingIn <> EncodingUTF16LE) and (sEncodingIn <> EncodingUTF16BE) then TextLineBreakStyle := GuessLineBreakStyle(Buffer) else begin sOriginalText := Copy(sOriginalText, 3, MaxInt); // Skip BOM TextLineBreakStyle := GuessLineBreakStyle(ConvertEncoding(Buffer, sEncodingIn, EncodingUTF8)); end; case TextLineBreakStyle of tlbsCRLF: actEditLineEndCrLf.Checked := True; tlbsCR: actEditLineEndCr.Checked := True; tlbsLF: actEditLineEndLf.Checked := True; end; end; // Convert encoding if needed if sEncodingIn = EncodingUTF8 then Buffer := sOriginalText else begin Buffer := ConvertEncoding(sOriginalText, sEncodingIn, EncodingUTF8); end; // Load text into editor Editor.Lines.Text := Buffer; // Add empty line if needed if (Length(Buffer) > 0) and (Buffer[Length(Buffer)] in [#10, #13]) then Editor.Lines.Add(EmptyStr); Result := True; except on E: EFCreateError do begin DCDebug(E.Message); msgError(rsMsgErrECreate + ' ' + aFileName); Exit; end; on E: EFOpenError do begin DCDebug(E.Message); msgError(rsMsgErrEOpen + ' ' + aFileName); Exit; end; on E: EReadError do begin DCDebug(E.Message); msgError(rsMsgErrERead + ' ' + aFileName); Exit; end; end; // set up highlighter Highlighter := dmHighl.GetHighlighter(Editor, ExtractFileExt(aFileName)); UpdateHighlighter(Highlighter); FileName := aFileName; Editor.Modified := False; bNoname := False; UpdateStatus; finally PushPop(FElevate); end; end; function TfrmEditor.SaveFile(const aFileName: String): Boolean; var TextOut: String; Encoding: String; Writer: TFileStreamUAC; begin PushPop(FElevate); try Result := False; try Writer := TFileStreamUAC.Create(aFileName, fmCreate); try Encoding := NormalizeEncoding(sEncodingOut); // If file is empty and encoding with BOM then write only BOM if (Editor.Lines.Count = 0) then begin if (Encoding = EncodingUTF8BOM) then Writer.WriteBuffer(UTF8BOM, SizeOf(UTF8BOM)) else if (Encoding = EncodingUTF16LE) then Writer.WriteBuffer(UTF16LEBOM, SizeOf(UTF16LEBOM)) else if (Encoding = EncodingUTF16BE) then Writer.WriteBuffer(UTF16BEBOM, SizeOf(UTF16BEBOM)); end else begin TextOut := EmptyStr; if (Encoding = EncodingUTF16LE) then TextOut := UTF16LEBOM else if (Encoding = EncodingUTF16BE) then begin TextOut := UTF16BEBOM end; TextOut += ConvertEncoding(Editor.Lines[0], EncodingUTF8, sEncodingOut); Writer.WriteBuffer(Pointer(TextOut)^, Length(TextOut)); // If file has only one line then write it without line break if Editor.Lines.Count > 1 then begin TextOut := TextLineBreakValue[Editor.Lines.TextLineBreakStyle]; TextOut += GetTextRange(Editor.Lines, 1, Editor.Lines.Count - 2); // Special case for UTF-8 and UTF-8 with BOM if (Encoding <> EncodingUTF8) and (Encoding <> EncodingUTF8BOM) then begin TextOut:= ConvertEncoding(TextOut, EncodingUTF8, sEncodingOut); end; Writer.WriteBuffer(Pointer(TextOut)^, Length(TextOut)); // Write last line without line break TextOut:= Editor.Lines[Editor.Lines.Count - 1]; // Special case for UTF-8 and UTF-8 with BOM if (Encoding <> EncodingUTF8) and (Encoding <> EncodingUTF8BOM) then begin TextOut:= ConvertEncoding(TextOut, EncodingUTF8, sEncodingOut); end; Writer.WriteBuffer(Pointer(TextOut)^, Length(TextOut)); end; end; // Refresh original text and encoding if (sEncodingIn <> sEncodingOut) or (Length(sOriginalText) = 0) then begin sEncodingIn:= sEncodingOut; ChooseEncoding(miEncodingIn, sEncodingIn); if (sEncodingOut <> EncodingUTF16LE) and (sEncodingOut <> EncodingUTF16BE) then begin Writer.Seek(0, soBeginning); SetLength(sOriginalText, Writer.Size); end else begin Writer.Seek(2, soBeginning); SetLength(sOriginalText, Writer.Size - 2); end; Writer.Read(Pointer(sOriginalText)^, Length(sOriginalText)); end; finally Writer.Free; end; Editor.Modified := False; // needed for the undo stack Editor.MarkTextAsSaved; Result := True; except on E: Exception do msgError(rsMsgErrSaveFile + ' ' + aFileName + LineEnding + E.Message); end; finally PushPop(FElevate); end; end; procedure TfrmEditor.SetFileName(const AValue: String); begin if FFileName = AValue then Exit; FFileName := AValue; Caption := ReplaceHome(FFileName); end; procedure TfrmEditor.CMThemeChanged(var Message: TLMessage); var Highlighter: TSynCustomHighlighter; begin Highlighter:= TSynCustomHighlighter(dmHighl.SynHighlighterHashList.Data[StatusBar.Panels[4].Text]); if Assigned(Highlighter) then dmHighl.SetHighlighter(Editor, Highlighter); end; destructor TfrmEditor.Destroy; begin LastEditorUsedForConfiguration := nil; HotMan.UnRegister(Self); inherited Destroy; if Assigned(FWaitData) then FWaitData.Done; end; procedure TfrmEditor.AfterConstruction; begin inherited AfterConstruction; tbToolBar.ImagesWidth:= gToolIconsSize; tbToolBar.SetButtonSize(gToolIconsSize + ScaleX(6, 96), gToolIconsSize + ScaleY(6, 96)); end; procedure TfrmEditor.EditorReplaceText(Sender: TObject; const ASearch, AReplace: string; Line, Column: integer; var ReplaceAction: TSynReplaceAction ); begin if ASearch = AReplace then ReplaceAction := raSkip else begin case MsgBox(rsMsgReplaceThisText, [msmbYes, msmbNo, msmbCancel, msmbAll], msmbYes, msmbNo) of mmrYes: ReplaceAction := raReplace; mmrAll: ReplaceAction := raReplaceAll; mmrNo: ReplaceAction := raSkip; else ReplaceAction := raCancel; end; end; end; procedure TfrmEditor.SetHighLighter(Sender:TObject); var Highlighter: TSynCustomHighlighter; begin Highlighter:= TSynCustomHighlighter(dmHighl.SynHighlighterList.Objects[TMenuItem(Sender).Tag]); UpdateHighlighter(Highlighter); end; (* This is code for multi tabs editor, it's buggy because Synedit bad handle scrollbars in page control, maybe in future, workaround: new tab must be visible and maybe must have focus procedure TfrmEditor.cm_FileNewExecute(Sender: TObject); var iPageIndex:Integer; begin inherited; iPageIndex:=CreateNewTab; with pgEditor.Pages[iPageIndex] do begin Caption:='New'+IntToStr(iPageIndex); Hint:=''; // filename end; end; Function TfrmEditor.CreateNewTab:Integer; // return tab number var iPageIndex:Integer; begin with TTabSheet.Create(pgEditor) do // create Tab begin PageControl:=pgEditor; iPageIndex:=PageIndex; // now create Editor with TSynEdit.Create(pgEditor.Pages[PageIndex]) do begin Parent:=pgEditor.Pages[PageIndex]; Align:=alClient; Lines.Clear; end; end; end; procedure TfrmEditor.cm_FileOpenExecute(const Params:array of string); var iPageIndex:Integer; begin inherited; dmDlg.OpenDialog.Filter:='*.*'; if dmDlg.OpenDialog.Execute then OpenFileNewTab(dmDlg.OpenDialog.FileName); end; Function TfrmEditor.OpenFileNewTab(const sFileName:String):Integer; var iPageIndex:Integer; begin inherited; iPageIndex:=CreateNewTab; pgEditor.ActivePageIndex:=iPageIndex; with pgEditor.Pages[iPageIndex] do begin Caption:=sFileName; Hint:=sFileName; TSynEdit(pgEditor.Pages[iPageIndex].Components[0]).Lines.LoadFromFile(sFileName); end; end; procedure ShowEditor(lsFiles:TStringList); var i:Integer; begin with TfrmEditor.Create(Application) do begin try for i:=0 to lsFiles.Count-1 do OpenFileNewTab(lsFiles.Strings[i]); ShowModal; finally Free; end; end; end; *) procedure TfrmEditor.EditorChange(Sender: TObject); begin UpdateStatus; end; procedure TfrmEditor.UpdateStatus; const BreakStyle: array[TTextLineBreakStyle] of String = ('LF', 'CRLF', 'CR'); begin if Editor.Modified then StatusBar.Panels[0].Text:= '*' else begin StatusBar.Panels[0].Text:= ''; end; StatusBar.Panels[1].Text:= Format('%d:%d',[Editor.CaretX, Editor.CaretY]); StatusBar.Panels[2].Text:= sEncodingStat; StatusBar.Panels[3].Text:= BreakStyle[Editor.Lines.TextLineBreakStyle]; end; procedure TfrmEditor.SetEncodingIn(Sender: TObject); begin sEncodingStat:= (Sender as TMenuItem).Caption; sEncodingIn:= sEncodingStat; sEncodingOut:= sEncodingStat; ChooseEncoding(miEncodingOut, sEncodingOut); Editor.Lines.Text:= ConvertEncoding(sOriginalText, sEncodingIn, EncodingUTF8); UpdateStatus; end; procedure TfrmEditor.SetEncodingOut(Sender: TObject); begin sEncodingOut:= (Sender as TMenuItem).Caption; end; procedure TfrmEditor.EditorStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin UpdateStatus; miEncodingIn.Enabled := not Editor.Modified; end; procedure TfrmEditor.UpdateHighlighter(Highlighter: TSynCustomHighlighter); begin dmHighl.SetHighlighter(Editor, Highlighter); StatusBar.Panels[4].Text:= Highlighter.LanguageName; end; procedure TfrmEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if not Editor.Modified then CanClose:= True else begin case msgYesNoCancel(Format(rsMsgFileChangedSave,[FileName])) of mmrYes: begin cm_FileSave(['']); CanClose:= not Editor.Modified; end; mmrNo: CanClose:= True; else CanClose:= False; end; end; end; procedure TfrmEditor.cm_FileReload(const Params: array of string); begin if Editor.Modified then begin if not msgYesNo(rsMsgFileReloadWarning) then Exit; end; OpenFile(FFileName); end; procedure TfrmEditor.cm_EditFind(const Params: array of string); begin ShowSearchReplaceDialog(Self, Editor, cbUnchecked, FSearchOptions); end; procedure TfrmEditor.cm_EditFindNext(const Params:array of string); begin if gFirstTextSearch then begin FSearchOptions.Flags -= [ssoBackwards]; ShowSearchReplaceDialog(Self, Editor, cbUnchecked, FSearchOptions) end else if FSearchOptions.SearchText <> '' then begin DoSearchReplaceText(Editor, False, False, FSearchOptions); FSearchOptions.Flags -= [ssoEntireScope]; end; end; procedure TfrmEditor.cm_EditFindPrevious(const Params: array of string); begin if gFirstTextSearch then begin FSearchOptions.Flags += [ssoBackwards]; ShowSearchReplaceDialog(Self, Editor, cbUnchecked, FSearchOptions); end else if FSearchOptions.SearchText <> '' then begin Editor.SelEnd := Editor.SelStart; DoSearchReplaceText(Editor, False, True, FSearchOptions); FSearchOptions.Flags -= [ssoEntireScope]; end; end; procedure TfrmEditor.cm_EditGotoLine(const Params:array of string); var P: TPoint; Value: String; NewTopLine: Integer; begin if ShowInputQuery(rsEditGotoLineTitle, rsEditGotoLineQuery, Value) then begin P.X := 1; P.Y := StrToIntDef(Value, 1); NewTopLine := P.Y - (Editor.LinesInWindow div 2); if NewTopLine < 1 then NewTopLine:= 1; Editor.CaretXY := P; Editor.TopLine := NewTopLine; Editor.SetFocus; end; end; procedure TfrmEditor.cm_EditLineEndCr(const Params:array of string); begin Editor.Lines.TextLineBreakStyle:= tlbsCR; UpdateStatus; end; procedure TfrmEditor.cm_EditLineEndCrLf(const Params:array of string); begin Editor.Lines.TextLineBreakStyle:= tlbsCRLF; UpdateStatus; end; procedure TfrmEditor.cm_EditLineEndLf(const Params:array of string); begin Editor.Lines.TextLineBreakStyle:= tlbsLF; UpdateStatus; end; procedure TfrmEditor.cm_About(const Params:array of string); begin msgOK(rsEditAboutText); end; procedure TfrmEditor.cm_EditCopy(const Params:array of string); begin editor.CopyToClipboard; {$IF DEFINED(LCLGTK2) and (LCL_FULLVERSION < 1100000)} // Workaround for Lazarus bug #0021453 ClipboardSetText(Clipboard.AsText); {$ENDIF} end; procedure TfrmEditor.cm_EditCut(const Params:array of string); begin Editor.CutToClipboard; {$IF DEFINED(LCLGTK2) and (LCL_FULLVERSION < 1100000)} // Workaround for Lazarus bug #0021453 ClipboardSetText(Clipboard.AsText); {$ENDIF} end; procedure TfrmEditor.cm_EditPaste(const Params:array of string); begin editor.PasteFromClipboard; end; procedure TfrmEditor.cm_EditDelete(const Params:array of string); begin Editor.ClearSelection; end; procedure TfrmEditor.cm_EditRedo(const Params:array of string); begin editor.Redo; end; procedure TfrmEditor.cm_EditSelectAll(const Params:array of string); begin editor.SelectAll; end; procedure TfrmEditor.cm_FileNew(const Params:array of string); var CanClose: Boolean = False; begin FormCloseQuery(Self, CanClose); if not CanClose then Exit; FileName := rsMsgNewFile; Editor.Lines.Clear; Editor.Modified:= False; actFileSave.Enabled:= True; bNoname:= True; UpdateStatus; end; procedure TfrmEditor.cm_FileOpen(const Params:array of string); var CanClose: Boolean = False; begin FormCloseQuery(Self, CanClose); if not CanClose then Exit; dmComData.OpenDialog.Filter:= AllFilesMask; if not dmComData.OpenDialog.Execute then Exit; if OpenFile(dmComData.OpenDialog.FileName) then UpdateStatus; end; procedure TfrmEditor.cm_EditUndo(const Params:array of string); begin Editor.Undo; UpdateStatus; end; procedure TfrmEditor.cm_FileSave(const Params:array of string); begin if bNoname then actFileSaveAs.Execute else begin SaveFile(FileName); UpdateStatus; end; end; procedure TfrmEditor.cm_FileSaveAs(const Params:array of string); var Highlighter: TSynCustomHighlighter; begin dmComData.SaveDialog.FileName := FileName; dmComData.SaveDialog.Filter:= AllFilesMask; // rewrite for highlighter if not dmComData.SaveDialog.Execute then Exit; FileName := dmComData.SaveDialog.FileName; if SaveFile(FileName) then begin actFileSave.Enabled:= True; end; bNoname:=False; UpdateStatus; Highlighter:= dmHighl.GetHighlighter(Editor, ExtractFileExt(FileName)); UpdateHighlighter(Highlighter); end; procedure TfrmEditor.cm_FileExit(const Params:array of string); begin Close; end; procedure TfrmEditor.cm_ConfHigh(const Params:array of string); begin LastEditorUsedForConfiguration := Self; ShowOptions(TfrmOptionsEditor); end; procedure TfrmEditor.cm_EditRplc(const Params: array of string); begin ShowSearchReplaceDialog(Self, Editor, cbChecked, FSearchOptions) end; procedure TfrmEditor.frmEditorClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:=caFree; end; procedure TfrmEditor.ChooseEncoding(mnuMenuItem: TMenuItem; sEncoding: String); var I: Integer; begin sEncoding:= NormalizeEncoding(sEncoding); for I:= 0 to mnuMenuItem.Count - 1 do begin if SameText(NormalizeEncoding(mnuMenuItem.Items[I].Caption), sEncoding) then begin mnuMenuItem.Items[I].Checked:= True; if (mnuMenuItem = miEncodingIn) then sEncodingStat:= mnuMenuItem.Items[I].Caption; end; end; end; initialization TFormCommands.RegisterCommandsForm(TfrmEditor, HotkeysCategory, @rsHotkeyCategoryEditor); end. doublecmd-1.1.30/src/feditor.lrj0000644000175000001440000001442015104114162015522 0ustar alexxusers{"version":1,"strings":[ {"hash":79367010,"name":"tfrmeditor.caption","sourcebytes":[69,100,105,116,111,114],"value":"Editor"}, {"hash":2805797,"name":"tfrmeditor.mifile.caption","sourcebytes":[38,70,105,108,101],"value":"&File"}, {"hash":2800388,"name":"tfrmeditor.miedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":97085973,"name":"tfrmeditor.milineendtype.caption","sourcebytes":[69,110,100,32,79,102,32,76,105,110,101],"value":"End Of Line"}, {"hash":212198471,"name":"tfrmeditor.miencoding.caption","sourcebytes":[69,110,38,99,111,100,105,110,103],"value":"En&coding"}, {"hash":107742931,"name":"tfrmeditor.miencodingin.caption","sourcebytes":[79,112,101,110,32,97,115],"value":"Open as"}, {"hash":160200403,"name":"tfrmeditor.miencodingout.caption","sourcebytes":[83,97,118,101,32,97,115],"value":"Save as"}, {"hash":125641556,"name":"tfrmeditor.mihighlight.caption","sourcebytes":[83,121,110,116,97,120,32,104,105,103,104,108,105,103,104,116],"value":"Syntax highlight"}, {"hash":2812976,"name":"tfrmeditor.help1.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, {"hash":4691652,"name":"tfrmeditor.actabout.caption","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":4691652,"name":"tfrmeditor.actabout.hint","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":2844350,"name":"tfrmeditor.actfileopen.caption","sourcebytes":[38,79,112,101,110],"value":"&Open"}, {"hash":353982,"name":"tfrmeditor.actfileopen.hint","sourcebytes":[79,112,101,110],"value":"Open"}, {"hash":44709525,"name":"tfrmeditor.actfileclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"}, {"hash":4863637,"name":"tfrmeditor.actfileclose.hint","sourcebytes":[67,108,111,115,101],"value":"Close"}, {"hash":2857157,"name":"tfrmeditor.actfilesave.caption","sourcebytes":[38,83,97,118,101],"value":"&Save"}, {"hash":366789,"name":"tfrmeditor.actfilesave.hint","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":49409406,"name":"tfrmeditor.actfilesaveas.caption","sourcebytes":[83,97,118,101,32,38,65,115,46,46,46],"value":"Save &As..."}, {"hash":160199891,"name":"tfrmeditor.actfilesaveas.hint","sourcebytes":[83,97,118,101,32,65,115],"value":"Save As"}, {"hash":177351,"name":"tfrmeditor.actfilenew.caption","sourcebytes":[38,78,101,119],"value":"&New"}, {"hash":21703,"name":"tfrmeditor.actfilenew.hint","sourcebytes":[78,101,119],"value":"New"}, {"hash":4710148,"name":"tfrmeditor.actfileexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, {"hash":315140,"name":"tfrmeditor.actfileexit.hint","sourcebytes":[69,120,105,116],"value":"Exit"}, {"hash":2805828,"name":"tfrmeditor.acteditfind.caption","sourcebytes":[38,70,105,110,100],"value":"&Find"}, {"hash":315460,"name":"tfrmeditor.acteditfind.hint","sourcebytes":[70,105,110,100],"value":"Find"}, {"hash":147268901,"name":"tfrmeditor.acteditrplc.caption","sourcebytes":[38,82,101,112,108,97,99,101],"value":"&Replace"}, {"hash":147269573,"name":"tfrmeditor.acteditrplc.hint","sourcebytes":[82,101,112,108,97,99,101],"value":"Replace"}, {"hash":116155166,"name":"tfrmeditor.actconfhigh.caption","sourcebytes":[38,67,111,110,102,105,103,117,114,97,116,105,111,110],"value":"&Configuration"}, {"hash":116154878,"name":"tfrmeditor.actconfhigh.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110],"value":"Configuration"}, {"hash":19140,"name":"tfrmeditor.acteditcut.caption","sourcebytes":[67,117,116],"value":"Cut"}, {"hash":19140,"name":"tfrmeditor.acteditcut.hint","sourcebytes":[67,117,116],"value":"Cut"}, {"hash":304761,"name":"tfrmeditor.acteditcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":304761,"name":"tfrmeditor.acteditcopy.hint","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":5671589,"name":"tfrmeditor.acteditpaste.caption","sourcebytes":[80,97,115,116,101],"value":"Paste"}, {"hash":5671589,"name":"tfrmeditor.acteditpaste.hint","sourcebytes":[80,97,115,116,101],"value":"Paste"}, {"hash":378031,"name":"tfrmeditor.acteditundo.caption","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":378031,"name":"tfrmeditor.acteditundo.hint","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":363439,"name":"tfrmeditor.acteditredo.caption","sourcebytes":[82,101,100,111],"value":"Redo"}, {"hash":363439,"name":"tfrmeditor.acteditredo.hint","sourcebytes":[82,101,100,111],"value":"Redo"}, {"hash":195247116,"name":"tfrmeditor.acteditselectall.caption","sourcebytes":[83,101,108,101,99,116,38,65,108,108],"value":"Select&All"}, {"hash":195288076,"name":"tfrmeditor.acteditselectall.hint","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"}, {"hash":78392485,"name":"tfrmeditor.acteditdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":78392485,"name":"tfrmeditor.acteditdelete.hint","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":73859572,"name":"tfrmeditor.acteditfindnext.caption","sourcebytes":[70,105,110,100,32,110,101,120,116],"value":"Find next"}, {"hash":73859572,"name":"tfrmeditor.acteditfindnext.hint","sourcebytes":[70,105,110,100,32,110,101,120,116],"value":"Find next"}, {"hash":122867065,"name":"tfrmeditor.acteditlineendcr.caption","sourcebytes":[77,97,99,32,40,67,82,41],"value":"Mac (CR)"}, {"hash":122867065,"name":"tfrmeditor.acteditlineendcr.hint","sourcebytes":[77,97,99,32,40,67,82,41],"value":"Mac (CR)"}, {"hash":10661081,"name":"tfrmeditor.acteditlineendlf.caption","sourcebytes":[85,110,105,120,32,40,76,70,41],"value":"Unix (LF)"}, {"hash":10661081,"name":"tfrmeditor.acteditlineendlf.hint","sourcebytes":[85,110,105,120,32,40,76,70,41],"value":"Unix (LF)"}, {"hash":42146617,"name":"tfrmeditor.acteditlineendcrlf.caption","sourcebytes":[87,105,110,100,111,119,115,32,40,67,82,76,70,41],"value":"Windows (CRLF)"}, {"hash":42146617,"name":"tfrmeditor.acteditlineendcrlf.hint","sourcebytes":[87,105,110,100,111,119,115,32,40,67,82,76,70,41],"value":"Windows (CRLF)"}, {"hash":102945374,"name":"tfrmeditor.acteditgotoline.caption","sourcebytes":[71,111,116,111,32,76,105,110,101,46,46,46],"value":"Goto Line..."}, {"hash":97034739,"name":"tfrmeditor.acteditfindprevious.caption","sourcebytes":[70,105,110,100,32,112,114,101,118,105,111,117,115],"value":"Find previous"}, {"hash":93074804,"name":"tfrmeditor.actfilereload.caption","sourcebytes":[82,101,108,111,97,100],"value":"Reload"} ]} doublecmd-1.1.30/src/feditor.lfm0000644000175000001440000013076015104114162015517 0ustar alexxusersobject frmEditor: TfrmEditor Left = 566 Height = 480 Top = 271 Width = 640 ActiveControl = Editor Caption = 'Editor' ClientHeight = 460 ClientWidth = 640 Icon.Data = { 7E04000000000100010010100000010020006804000016000000280000001000 0000200000000100200000000000000000000000000000000000000000000000 000000000000858A88A3858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88A3000000000000 000000000000858A88FFEEEEEEFFB2B2B2FFB2B2B2FFB2B2B2FFB2B2B2FFB2B2 B2FFB2B2B2FFB2B2B2FFB1B1B1FFB2B2B2FFB2B2B2FF858A88FF000000000000 000000000000858A88FFFFFFFFFFECECECFFEBEBEBFFEAEAEAFFEAEAEAFFE9E9 E9FFEBEBEBFFEAEAEAFFEBEBEBFFECECECFFB2B2B2FF858A88FF000000000000 000000000000858A88FFFFFFFFFFDBDBDBFFCBCBCBFFC4C4C4FF000000FF0259 8FFF636363FF8C8C8CFFCACACAFFDADADAFFB2B2B2FF858A88FF000000020000 000000000000858A88FFFFFFFFFFECECECFFECECECFFE9E9E9FF02598FFF2642 4CFF36576BFF02598FFF9D9D9DFFD6D6D6FFAEAEAEFF858A88FF000000000000 000000000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCBCBCBFF757575FF395B 70FF8AABC2FF5585A3FF02598FFF8F8F8FFF868686FF858A88FF000000010000 000000000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFEBEBEBFF0259 8FFFC4E5EDFF649FC8FF5787A4FF02598FFF717171FF858A88FF000000000000 000100000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCCCCCCFFCCCCCCFFB7B7 B7FF02598FFFC5E6EDFF68A6CEFF5784A0FF02598FFF858A88FF000000000000 000100000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFECECECFFECEC ECFFD3D3D3FF02598FFFC6EAEEFF69AACFFF5683A0FF02598FFF02598F330000 000000000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCCCCCCFFCCCCCCFFCCCC CCFFCCCCCCFFB7B7B7FF02598FFFC7EBEFFF6AACD2FF5787A4FF02598FFF0259 8F3300000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFECECECFFECEC ECFFECECECFFECECECFFD3D3D3FF02598FFFC7EBEFFF6AACD2FF5583A1FC0259 8FFF00000000858A88FFEBEBEBFF00A0C4FFBCBCBCFF00A0C4FFB8B8B8FF00A0 C4FFB8B8B8FF00A0C4FFB8B8B8FF00A0C4FF02598FFFC6EAEEFF71ADCFFF0259 8FFF00000000858A88FF00A0C4FF3DB1EBFF00A0C4FF3DB1EBFF00A0C4FF3DB1 EBFF00A0C4FF3DB1EBFF00A0C4FF3DB1EBFF00A0C4FF02598FFF02598FFF0259 8F5C00000000858A886600A0C4FFC6E8F9FF00A0C4FFC6E8F9FF00A0C4FFC6E8 F9FF00A0C4FFC6E8F9FF00A0C4FFC6E8F9FF00A0C4FF00000000000000000000 0000000000000000000000A0C44400A0C4FF00A0C44400A0C4FF00A0C44400A0 C4FF00A0C44400A0C4FF00A0C44400A0C4FF00A0C44400000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000800300008003000080030000800300008003000080030000800300008003 00008003000080010000800000008000000080010000C0070000EAAF0000FFFF 0000 } KeyPreview = True Menu = MainMenu1 OnClose = frmEditorClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate SessionProperties = 'Height;Width;WindowState;Left;Top' ShowInTaskBar = stAlways LCLVersion = '2.2.3.0' object StatusBar: TStatusBar Left = 0 Height = 23 Top = 437 Width = 640 Panels = < item Width = 50 end item Width = 150 end item Width = 96 end item Width = 50 end item Width = 128 end> SimplePanel = False end inline Editor: TSynEdit Left = 0 Height = 411 Top = 26 Width = 640 Align = alClient Anchors = [akTop] Font.Color = clBlack Font.Height = 13 Font.Name = 'adobe-courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False PopupMenu = pmContextMenu TabOrder = 0 OnMouseWheelDown = EditorMouseWheelDown OnMouseWheelUp = EditorMouseWheelUp BookMarkOptions.BookmarkImages = ilBookmarks BookMarkOptions.Xoffset = 48 Gutter.Width = 53 Gutter.MouseActions = < item ClickCount = ccAny ClickDir = cdDown Command = emcOnMainGutterClick end item Button = mbRight Command = emcContextMenu end> RightGutter.Width = 0 RightGutter.MouseActions = < item ClickCount = ccAny ClickDir = cdDown Command = emcOnMainGutterClick end item Button = mbRight Command = emcContextMenu end> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end item Command = ecColSelUp ShortCut = 40998 end item Command = ecColSelDown ShortCut = 41000 end item Command = ecColSelLeft ShortCut = 40997 end item Command = ecColSelRight ShortCut = 40999 end item Command = ecColSelPageDown ShortCut = 40994 end item Command = ecColSelPageBottom ShortCut = 57378 end item Command = ecColSelPageUp ShortCut = 40993 end item Command = ecColSelPageTop ShortCut = 57377 end item Command = ecColSelLineStart ShortCut = 40996 end item Command = ecColSelLineEnd ShortCut = 40995 end item Command = ecColSelEditorTop ShortCut = 57380 end item Command = ecColSelEditorBottom ShortCut = 57379 end> MouseActions = < item ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartSelections MoveCaret = True end item Shift = [ssShift] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartSelections MoveCaret = True Option = 1 end item Shift = [ssAlt] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartColumnSelections MoveCaret = True end item Shift = [ssShift, ssAlt] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartColumnSelections MoveCaret = True Option = 1 end item Button = mbRight Command = emcContextMenu end item ClickCount = ccDouble ClickDir = cdDown Command = emcSelectWord MoveCaret = True end item ClickCount = ccTriple ClickDir = cdDown Command = emcSelectLine MoveCaret = True end item ClickCount = ccQuad ClickDir = cdDown Command = emcSelectPara MoveCaret = True end item Button = mbMiddle ClickDir = cdDown Command = emcPasteSelection MoveCaret = True end item Shift = [ssCtrl] ShiftMask = [ssShift, ssAlt, ssCtrl] Command = emcMouseLink end> MouseTextActions = <> MouseSelActions = < item ClickDir = cdDown Command = emcStartDragMove end> MouseOptions = [emAltSetsColumnMode] VisibleSpecialChars = [vscSpace, vscTabAtLast] SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnChange = EditorChange OnReplaceText = EditorReplaceText OnStatusChange = EditorStatusChange inline SynLeftGutterPartList1: TSynGutterPartList object SynGutterMarks1: TSynGutterMarks Width = 24 MouseActions = <> end object SynGutterLineNumber1: TSynGutterLineNumber Width = 13 MouseActions = <> MarkupInfo.Background = clBtnFace MarkupInfo.Foreground = clBtnText DigitCount = 2 ShowOnlyLineNumbersMultiplesOf = 1 ZeroStart = False LeadingZeros = False end object SynGutterChanges1: TSynGutterChanges Width = 4 MouseActions = <> ModifiedColor = 59900 SavedColor = clGreen end object SynGutterSeparator1: TSynGutterSeparator Width = 2 MouseActions = <> MarkupInfo.Background = clWindow MarkupInfo.Foreground = clGrayText end object SynGutterCodeFolding1: TSynGutterCodeFolding MouseActions = < item Button = mbRight Command = emcCodeFoldContextMenu end item ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps end item Shift = [ssShift] ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps Option = 1 end item ClickCount = ccAny ClickDir = cdDown Command = emcNone end> MarkupInfo.Background = clNone MarkupInfo.Foreground = clGray MouseActionsExpanded = < item ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps end> MouseActionsCollapsed = < item Shift = [ssCtrl] ShiftMask = [ssCtrl] ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldExpand end item ShiftMask = [ssCtrl] ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldExpand Option = 1 end> end end end object tbToolBar: TToolBarAdv Left = 0 Height = 26 Top = 0 Width = 640 AutoSize = True Images = dmComData.ilEditorImages ParentShowHint = False ShowHint = True TabOrder = 1 object tbNew: TToolButton Left = 1 Top = 2 Action = actFileNew end object tbOpen: TToolButton Left = 24 Top = 2 Action = actFileOpen end object tbSave: TToolButton Left = 47 Top = 2 Action = actFileSave end object tbSeparator1: TToolButton Left = 70 Height = 22 Top = 2 Style = tbsSeparator end object tbCut: TToolButton Left = 78 Top = 2 Action = actEditCut end object tbCopy: TToolButton Left = 101 Top = 2 Action = actEditCopy end object tbPaste: TToolButton Left = 124 Top = 2 Action = actEditPaste end object tbSeparator2: TToolButton Left = 147 Height = 22 Top = 2 Style = tbsSeparator end object tbUndo: TToolButton Left = 155 Top = 2 Action = actEditUndo end object tbRedo: TToolButton Left = 178 Top = 2 Action = actEditRedo end object tbSeparator3: TToolButton Left = 201 Height = 22 Top = 2 Style = tbsSeparator end object tbConfig: TToolButton Left = 209 Top = 2 Action = actConfHigh end object tbHelp: TToolButton Left = 232 Top = 2 Action = actAbout end end object MainMenu1: TMainMenu Images = dmComData.ilEditorImages Left = 48 Top = 32 object miFile: TMenuItem Caption = '&File' object New1: TMenuItem Action = actFileNew end object MenuItem1: TMenuItem Caption = '-' end object Open1: TMenuItem Action = actFileOpen end object miFileReload: TMenuItem Action = actFileReload end object Save1: TMenuItem Action = actFileSave end object SaveAs1: TMenuItem Action = actFileSaveAs end object miDiv: TMenuItem Caption = '-' end object miConfHigh: TMenuItem Action = actConfHigh end object N1: TMenuItem Caption = '-' end object Exit1: TMenuItem Action = actFileExit end end object miEdit: TMenuItem Caption = '&Edit' object miUndo: TMenuItem Action = actEditUndo end object miRedo: TMenuItem Action = actEditRedo end object N3: TMenuItem Caption = '-' end object miCut: TMenuItem Action = actEditCut end object miCopy: TMenuItem Action = actEditCopy end object miPaste: TMenuItem Action = actEditPaste end object miDelete: TMenuItem Action = actEditDelete end object miSelectAll: TMenuItem Action = actEditSelectAll end object N4: TMenuItem Caption = '-' end object miFind: TMenuItem Action = actEditFind end object miFindNext: TMenuItem Action = actEditFindNext end object miFindPrevious: TMenuItem Action = actEditFindPrevious end object miReplace: TMenuItem Action = actEditRplc end object miGotoLine: TMenuItem Action = actEditGotoLine end object N5: TMenuItem Caption = '-' end object miLineEndType: TMenuItem Caption = 'End Of Line' object miEditLineEndCrLf: TMenuItem Action = actEditLineEndCrLf AutoCheck = True end object miEditLineEndLf: TMenuItem Action = actEditLineEndLf AutoCheck = True end object miEditLineEndCr: TMenuItem Action = actEditLineEndCr AutoCheck = True end end end object miEncoding: TMenuItem Caption = 'En&coding' object miEncodingIn: TMenuItem Caption = 'Open as' end object miEncodingOut: TMenuItem Caption = 'Save as' end end object miHighlight: TMenuItem Caption = 'Syntax highlight' end object Help1: TMenuItem Caption = '&Help' object miAbout: TMenuItem Action = actAbout end end end object ActListEdit: TActionList Images = dmComData.ilEditorImages Left = 112 Top = 32 object actAbout: TAction Category = 'Help' Caption = 'About' HelpType = htKeyword Hint = 'About' ImageIndex = 13 OnExecute = actExecute end object actFileOpen: TAction Category = 'File' Caption = '&Open' HelpType = htKeyword Hint = 'Open' ImageIndex = 1 OnExecute = actExecute end object actFileClose: TAction Category = 'File' Caption = '&Close' HelpType = htKeyword Hint = 'Close' OnExecute = actExecute end object actFileSave: TAction Category = 'File' Caption = '&Save' HelpType = htKeyword Hint = 'Save' ImageIndex = 2 OnExecute = actExecute end object actFileSaveAs: TAction Category = 'File' Caption = 'Save &As...' HelpType = htKeyword Hint = 'Save As' ImageIndex = 3 OnExecute = actExecute end object actFileNew: TAction Category = 'File' Caption = '&New' HelpType = htKeyword Hint = 'New' ImageIndex = 0 OnExecute = actExecute end object actFileExit: TAction Category = 'File' Caption = 'E&xit' HelpType = htKeyword Hint = 'Exit' ImageIndex = 12 OnExecute = actExecute end object actEditFind: TAction Category = 'Edit' Caption = '&Find' HelpType = htKeyword Hint = 'Find' ImageIndex = 10 OnExecute = actExecute end object actEditRplc: TAction Category = 'Edit' Caption = '&Replace' HelpType = htKeyword Hint = 'Replace' ImageIndex = 11 OnExecute = actExecute end object actConfHigh: TAction Category = 'File' Caption = '&Configuration' HelpType = htKeyword Hint = 'Configuration' ImageIndex = 4 OnExecute = actExecute end object actEditCut: TAction Category = 'Edit' Caption = 'Cut' HelpType = htKeyword Hint = 'Cut' ImageIndex = 5 OnExecute = actExecute end object actEditCopy: TAction Category = 'Edit' Caption = 'Copy' HelpType = htKeyword Hint = 'Copy' ImageIndex = 6 OnExecute = actExecute end object actEditPaste: TAction Category = 'Edit' Caption = 'Paste' HelpType = htKeyword Hint = 'Paste' ImageIndex = 7 OnExecute = actExecute end object actEditUndo: TAction Category = 'Edit' Caption = 'Undo' HelpType = htKeyword Hint = 'Undo' ImageIndex = 8 OnExecute = actExecute end object actEditRedo: TAction Category = 'Edit' Caption = 'Redo' HelpType = htKeyword Hint = 'Redo' ImageIndex = 9 OnExecute = actExecute end object actEditSelectAll: TAction Category = 'Edit' Caption = 'Select&All' HelpType = htKeyword Hint = 'Select All' ImageIndex = 15 OnExecute = actExecute end object actEditDelete: TAction Category = 'Edit' Caption = 'Delete' Hint = 'Delete' ImageIndex = 14 OnExecute = actExecute end object actEditFindNext: TAction Category = 'Edit' Caption = 'Find next' Hint = 'Find next' OnExecute = actExecute end object actEditLineEndCr: TAction Category = 'Edit' AutoCheck = True Caption = 'Mac (CR)' GroupIndex = 1 Hint = 'Mac (CR)' OnExecute = actExecute end object actEditLineEndLf: TAction Category = 'Edit' AutoCheck = True Caption = 'Unix (LF)' GroupIndex = 1 Hint = 'Unix (LF)' OnExecute = actExecute end object actEditLineEndCrLf: TAction Category = 'Edit' AutoCheck = True Caption = 'Windows (CRLF)' GroupIndex = 1 Hint = 'Windows (CRLF)' OnExecute = actExecute end object actEditGotoLine: TAction Category = 'Edit' Caption = 'Goto Line...' ImageIndex = 16 OnExecute = actExecute end object actEditFindPrevious: TAction Category = 'Edit' Caption = 'Find previous' OnExecute = actExecute end object actFileReload: TAction Category = 'File' Caption = 'Reload' ImageIndex = 17 OnExecute = actExecute end end object pmContextMenu: TPopupMenu Images = dmComData.ilEditorImages Left = 208 Top = 32 object miUndoContext: TMenuItem Action = actEditUndo end object miSeparator1: TMenuItem Caption = '-' end object miCutContext: TMenuItem Action = actEditCut end object miCopyContext: TMenuItem Action = actEditCopy end object miPasteContext: TMenuItem Action = actEditPaste end object miDeleteContext: TMenuItem Action = actEditDelete end object miSeparator2: TMenuItem Caption = '-' end object miSelectAllContext: TMenuItem Action = actEditSelectAll end end object ilBookmarks: TImageList Height = 11 Width = 11 Left = 312 Top = 32 Bitmap = { 4C7A0A0000000B0000000B0000003D0300000000000078DAED586D4B536118F6 87682F0C03ED831264948A88E24CD1658926268D32136B29352B75E0CB3E5414 F4EAD25C38DB104DD1A14E7C295F5233D30F65A5150541D8878559B9F23889BB 733D79C60CCF4B9011B2EBD30EE7E2BE9FFBBE9EEB7E9E1D3FBF5F7868D4A886 2B92AD03A549CE5E432275162538ED85F1D6E693712A3F2F8C1A35EA51633237 529E4483A58974AF6437759E8923BB3E96EE16C470F5BA68B5100FBCD18A247A 6E3590DBF5998045D71C8D54E9A9511749B6BC48AE2E379CE545BCE1B204C69B B8A9A32E7D140D5D394ADCFC1CD5E7EEA03B3961549B1DC6D687BC03867816AF 9BE775E4EFA296BCEDECD97A38946AB521745B1BCAEAC0FA7ACFC6B277E0B5F2 BCC62321ECB9362B88CC0782E8566630AB177574E8A3D93BC46BCC0E21DBC160 F66CDEAFA2EA741555A5073AEDA7E3ADA8B7A5208AADAFF7BC966CDAADE4284B A3852FB3549DBA914CFB3690297513EB1FFA827AFBAF9DA085AF9F583CF01CC6 2C32ED0DA0CA147FAE322580F519FD435F58BD7C1D581FF2221E7837F6F8ABBD F540FFD017335F2FEAC0FA905788E78DB5D418DA3DB594D08F2537ABAF95EF8D 98C6CF2CC58CF7A2E532E3361FDB29AA3178533C0FDA010D39DB4435EE5ADE0B ADCB7B019A8869DC5610E1D118B0646E11D518EB435EC4637B216DB3A8C6A883 AD8FCF0B30DE3AD178AD7CDC5714E3F1F1C0C543C4F11E91D2B8F354144D3B6A F8BDB148F72FE5886A8CBCAE8FEFC9F9729CEC856A498DDD0B2E7A5C57CE3466 3C098D57834FE3BFABB1E07760D26E52E4E32E63063F5F677DB35AC1AC8626D3 F6ABB2B3FA81414DAF781EF682DCAC167883E732656735009E9259BD1A7CB35A 5AE3D520A631007FC277F09394C6BFDFB9E4341600BF4BCDEA3FF1B1B7C6723E C65C17B0DE7CCCFFA699B1765AE2BEB1FADE3D72886AFC81E7CDBE1EA7BE528D ACC688D7CFF3946ABC383FA7486300B3DF37ABD7C6C798D5DE3E06949CC74F1A 2E283A8F055E7B8946D2C71E5E71B2ECBD1A403CB93B17EAF0FC67433CDFBD5A F6CE05EED8F53C4577AE373D96157B4CEACE05BFFB7CFC7F6A2CF50D64A246BF 62564B7D03F13E8F9B8E8793FBFBBCEC79DCA48BA099C9219AEAB68A6AFC76A4 8DE545BCA91E1B993302FF89C63F015CBC5D28 } BitmapAdv = { 4C69030000004C7A0A0000001000000010000000A50700000000000078DAED5A F957D45514B79FFD17AC4C5B5D4A330DCB85549055425291484D7234080A9B10 0141404BE4B41C0B05C5619451901D84C101864586815129B1345617D4D85416 4548B34FEF5E9CE9B870E63B734ECBA979E77CCFC01C3E73EFBBF77EDEE7DEC7 8C19F3E7D2C77A3C5113E361571DBD445119E5DEA6DDE2064DB82BD49B5DDA0A 36392B723F73B2CBFAD4F189318F59B5B11E636B6397A4D4C42C812EDA1D5551 6ED046BAA224CC05EA502714842C46CEA78EC808764849FF64D1D847B11EA575 B14BA08F71876EAB1B74DB9642B763252AB77B4313E18E02F92264072FC0918F 17E070E05BA5AA80F9638D3E935DC2D60AAC3EDA0DAD45BB71E7561F8CEBD75B BD68C8FA06591FCFC791C07938143017A9FE73530E6C7893F74B3EEBEF63CFAA 22F1FBBD7BE83C5D869FD2BF40C3E1EDB872AA84DFAB4ED888B40F6743B56136 0EAC9F0DA5CC8E6345FB259FABA35CD059AFC1506F27CAC31DA1F96C3E8A82E7 E068F03C0C5EEFC0F99A021C92CDC4C10F5E83523C0ABF991C678A5555A40BAA 229CD0F943296E76B4A1443E1F6A812D08B2438EFF2CF45D69C685DA42A4FA4D 83F2FD57A058330DC96BA6738E28CEE511CED08639A2E3FB520CFCD2C6D8A381 76C8F59F890CD974F45E6E62FBCAD593A1583519C9BE53B0EFBDA99CDF927017 946C5E0CCDA645B85A5F8281ABAD6C97B099029BB6762A7ADB9BD0AACB87E2DD 1790ECF33CF6FABC80249F97B83628BFEA100714CA17E0F2490DFA059E7C3662 55AB5EC28DF646B456E762DF8A89485A310189E23571C5735C57541B94DFBC60 7B5C147BA45865F9BF8E34BF97A15A3D09A9E2B9D973054DE519485A361E7BDE 795A3CE3B17BD904AE49AA2BAA0DCA2FE5887275A1AE08BABD9B51BD2744D8CD 13EFFD06F5F6D5D8E3F514762F7D12094B9F4282D7D35CCF54935457541B94DF 9387E3303470C3543F43FDD7A14BDE721F3B0E099EE3F09DE7B89404CF27990B E99F2C1C4B35497545B541F9556DB043DA47A2D6C4E7ED17F1269FD92E61DF1E 572A9E073840F5CC35497545B541F9F59DCC71A658D17EC967B2FB30D6B8A89E A926A9AEA83628BF94238A33C52AC16BBC9DD1E7C7AD7F13FF990F319ECC7F6D CC721C1578A9FC271ED6ED7C17833D974D392C8F5F2B89FF3A8135C4FB9AB0DD 3F1BF8551BB71A99016F98E53F63BBDB19D3AC4E822131987F2EFDDC17E91B66 99E57FC7F79A116C511273B8767710FFAE89F1C6E175D3CDF2BFEE2B3F18BE0B 30F1BFE6DB8F185F1CF50E52D74C31CBFF62B93D9F5946FE1FFFE643C61746BC 0DA5EF8B66F94F675D5ED01B26FE577C29637CC1667728563E6B96FFB9417390 1560878CF53398FFDAF80F189F1BE28AE4E5CF98E53FE588E2CCB112FB2D89F3 637CB6DC19498493C0FF43B2D790BA761AC74AB3632DE333E54E16F19F73B46A 24D60765B3C49E27DAF8FF3FD0FF8BDA54DC68A9B75AFF2BC21DA00D5DF080FE AB439D7167E816CEAA1566F95FB66921DB35F2BFFE60B4D87F3F6EF776236F93 8B64FE97452FC52FA72B387E7D575A901FE22C89FF851BED7126EB2BDCB93D80 7B777FC54F0589485FF72A0EF83E2F89FF94273E779BEB5114E1C1FACF58EF89 92F87FD1508C61A1DDB58A2D26FDAF4A90A3E2DB8DC80FF732CBFF0B023FDA6A AACA36CBFF23C10EC8D8E8C8756AD47FE2BFD26F8688F9241BFF6DFCFFDBF8DF 527A105DE7EAACE23FD96DD628D179B656E0FB04BE0B39F2C516EB3FF5FFD981 73C57970130DF97BCCF2FF67F57E74899ECBD6FFDBFA7FAAE9B20857ABFA7FE6 92B0DFD374C2E2FEFFF81627E1BF2BAE351A4C3520B5FF27ECF148C2D631AEF3 C76A8BFAFF11BB23D87379BB2CEEFFDB75D926AC35FD3FCDFF83D7AEB25DC29E C9D9C57843CA56E485BA4B9AFF475B52E6FF63515E1C2BDA2FF94C76397F5F07 20DDFF4D5BFFFF1FE7BF216E05CFD0B53B7D4CFA4FFCD76C5DC633A439FE7737 948F5A7F97446D9AE37F778316C37DDD38971967D2FF1F0E6DC3A9D458947FB9 DE2CFFBB4E6B71ABE33C6BB851FFF3851ED24C2B85FFA3DDFFD13C2C85FF74FF 777778103D8D27F8EE82F4BFAD2A0B85616E92F8DF5898F800F6EFD6FF87E77F 4BF55FB3CD17752951D0EF8FB04AFFE96F1F5E96E87F5AA0FD23FDBF4DFFADD3 7FE18389FFA40B52F55F277C683B968C2151B3C645F92F169A2245FFBBEE9F21 DD42BB8DFC3FA18C4476D03CB3FC6F48960B63BFE37CA9129A107B8BF97F599F 2366975E94853A58CDFFE181EB68D7E75BC57FD27F5A7706FBADE23FE9FF5D31 ABD0CC620DFF6DF7FF36FDFF27F5FFCC7E391AB3763EA2FFB76F74F2DD9294FE BF32CCE111FDA73BB40B756AABE6FF7AD536AEE9E68A0C2BEEFF62C471740FDD 4DA790B67E9645F33F61F91C14D874D90C8BEEFFD9E7FB762DB9FF23FD3F16BD 9CF76BB46BC9FD1FF5FFC7627DD8EFB278D988CF6497B012FBFFA2686FC697C4 AFE3FDB2CF645722FF5365AF739D2AC50C41B1A2FDDAF86FFBFFBF94FBBF4B55 69DCBF57467B5A75FFA78F5F85E1FE6BACDF46FDB7E4FEAF6A87AFD0BB1EABF5 BFA54C65D37F9BFEDBF8FF17F05FCAF77F46E33F2D29DFFF21FDAFFCDC1B176B 724DFC6FADCCC4EDBE1E49DFFF79DCFC9F267C1E1233C9D962A5E5F3FF9AC938 9DBD8B7B89C2C8E566F94F339A7E5F9869FEBF7472649E6911678014FD2F88F0 E2B3C2B86EF65C8541B503FB563E2799FFE2F34CF33FC5FADFACFF7F00EAD5FF C14C7A0A00000016000000160000007B0800000000000078DAED9CFB4F54D716 C7FD43466DAD56AB562B16C582A02822C3AB3E4B05452854B9803C2E22A0C863 62D2D88634F716451EE525CA1B41CA63780C4FE16A2F15699AA6B7B7ADD2D642 1FDAA4B6FEF6ED5E7BE69C9E811960CE1C1B9BEE95EC407232DFECB3F75AEB73 D63A7B66D122DB366408D20DE40625F56705D6F66605A23B3310C6D3FE68CFD0 A3355D5FDB724A9FD47472B76E910376C3109C379C1B8CC1DC20F4E704C29415 809E4C7FA6AB4747BA1F5AD3FCD092BA1B4D277D519FBC2B6F3EBD1143B06EC4 10347983E90DB331C43407B203D077D69FE9EA99AE1F3AD27CD17ACA17CD2777 A129C587E9EE444DE2CEC9AB09DE3AFB9AC193A386208C180271233790E90660 204BCF74F5E839B31BC60C5FB49FDA85D6933E684ED989C6E41DA84BF446F509 6F5C89DF3E5915B74D6743976B725DA639CC346FE61DC1F71F0F62A67D3BDE07 63CE4134266E435D8217AAE3BD7025CE1397633D2767AE27DD3BCD53D2BC9517 8EC73F7F0F7BF6EB8369B49DDD8BDA380F5C8D7547558C072A63DC517EDC9DAF F7506E908EF66838C77CEFA4399CAD97E7393DD18FA1B742D095EA8DF6946DE8 CED9876F6EF7F26B93633DA88ED9822BC7DD5079CC0D156C94BDE986D2E8CDDC 97062D7B44EB39C43407CFFAC9F31AE69ADBD199E285B6A4AD684970474766B0 7CFDEA31575445BBA222CA1565512FA3F40D57363671FFECCF36EF3BEDD140A6 1FFA337DE5CF75334D2369267BE07AC22BB816E78686D84DF2F5AA681754BEB1 01E5911B501AB101EF47B8A0246223F779F24FF225DA7713DB77D3691FF973A4 D99EE48156A6D912B7194DFF7045DDB18DF2F5CAC8F5288F5887D2F0175112BE 0EC57CACE771443E4FFE49BED493B10BDD693BE5CFD13C959AF5C75C501DFD92 7CBD3C7C0D4A8FAC41C991D5280E5B8DA2B0B52864836293E2887C9EFCD398E6 834EB647925D4FB4D6AC895A8FAB912FCAD74BC356A12474258A0FAD4411FB5B 7868152E1D5ACDE39D6293E2887CBE2D7507DA52B6CB9FA3F5B4D28C588BCBE1 ABE5EB25AFAF4051C872145AC6A59015280859C9625D5F4BF1FE018B4D8AA3EB 29DE6849F6923F477B44EB5913F5129F27695684AD94AF17872C43E1C16751C0 C732369EC3C5D796F3BC443984E29D62B339793B9A123DE5CFB1DCC5D67303AE 44AEC3E5A36B507178158B85ADF2F5C203CFE0D281A5B8B89FC633B87080C6B2 A4A6543F1DE525CA2114EF0D2C361B4E6CE53E4F76EFC32E5C63D72B8FAE45F9 E117501BEF892F46DBF8B5FF8F7C8082FD4B7071DF125CD8BB988D25C8DFB714 17F62FE57982721DE525CA2114EF149B2DE9C178F4D394DD38FEE587FB2CC636 33CDC55C337FAF0EF97B16D3B0CA9B94EB282F510EA178A7D86C4AF5C757B7BA 6669D23C2FB3EBD23CF3F7E8F878EF55DDE4CC7C46F9D39CEB3C590E7137C73B 8B4D1E47E4F3E49FCC9768CF698F683DFF98A759930D9B3998F227E53ACA4B3C 8750BCB3D8E471443E1F2AE92EE37B944FEBC9EE7D2E4DA551AEE37989E59092 48171E9B45616BCC3E4FFEC97C89F69DF668E67ACE6765D16E3ACA4B944328DE 2936298E0A429EE7FE49BE7461FFB30E7153F0F8CFE1313189F871E37C181E3F B46628E511353C1ECEF6E79C1B7D3BD426972937511E7194C75CF3BCB5E64715 59F2FF8D27DC5117BBC5611EF3792AEEFD36D3241E4B561FEB869A98CD0EF358 39CF71D2B4F058B2BAE32FA3FACD8DAA794C9A4A1E4BC6733D6388A33CA6E79B 4ECB738392C792113F78AE7790C7F4CC44EB3993C7921193881F8EF2B835D993 3F33CDE4B164C4B9B2D0E71DE67173A2079AE2B7CCE2B16465875630CDE50EF3 B831DE9DFB12DF77058F257B3FE43914332D47794C3E5F13B389FB12DF770B8F E5E7068BA6A33CA63832FBBC8BD99768DFD91E299F1BCC9A8EF398E288FB3CF9 27F952E81FCF39FCDE058F058F457D2CEA630DEBE33EC6CEDEF41D36EBE3B6D3 01AAEBE31EA6D965D154F2B823C31F93FF35D71C773F346AC2E39B4569F23C1F FDF41D1A927638C563E399407C3DD66DA5D998E4ED148F271ADEB5F2AF4F3B2B CCB5AC4A1E1BB3F7E0C72F2664BD1F3E1F47D7B930B93E56CB63A5E658CD3B56 F53169AAE5B1642DA7FCAC786CBEF7E5AA79BC507394C70B35C163C163C163C1 63C163B3E64CD382C7CA3A5EA95B97B04DB3FAB899C5C2DD9B1D5CFBCBFFB46B 561F138FEB4F78897EB5E8570B1E0B1E3FD17EB5C99297C7AB0C9AF5AB8949C4 8F3B55B99AF5ABFBCF9839375195332B96D5F6AB393B337CF0B142F3FE6D93D3 FD6A9AA7B566AF26FDEA89199A5AF5AB6D696AD1AFB6F7FED8D97EF5424DEDFB E3F94CF4AB45BF5AF058F0582B1E2FD41CE5F142CD511E4BD627D788E6DA8BEA 24AA69D4F258B25E4BDDA9AC8FA94E52CBE3F9CE7339FBFED8DE792E67796CCB EEB17AFBDA3F7D9CE2B13DFBBBD4C7F678EC6C7D6C8FC7CED6C78F1E4CCDB96F 6AEBE3B96A6E511F0B1E8BFAD80FFF6BBB8487773F99151F7DEFC6AAAA8F6FBE 7378CE9EB529EFB8AAFA58D27CFC701A772A7334E1F1E76D05B2E6C0B9839AF1 F8E77BE6F5BC5399FD97E2F17D4BEFFF69E7B164DF8CF5F05EBD563C96CF999F 0E10FD6AD1AF163C163C16F5F13CFD6A5BF5B1DCAF55D9AFB6571F3F89F7C7A3 C5E99ABF3F569EBD7A12E7B9EEDE326A72BE5AA979EF56A726E7AB67693A719E 4BAA8F957B246B3A719E4BAA8F95EBA9C5792EA93E96BFE7A6D1792EA95F6DF5 3D37DA23B69EFCDE9DEC57CBDF73B3F4ABF91EB1B98A7EB5E0B138CF25CE733D A9EF1F0FB29A5BCBF35C53ECFEC9BE1B37C194B347B3F35C03E75EC36F0FA7E7 AC63D59CE732190EE0B707D39AD7C7DF5ADEF18BFA58D4C782C782C782C782C7 4F2B8FD5FC1EC87C3C56FB7B20B447BD397B193F6DF4C159DDA9F6F740ECBD3F 76F6F740E67A7FDCFFAF04AE39F5D99866EF8FEBD9B3C8A31FEF73DDD1728326 EF8FFBFE9D286BFEC2FEAAA98FBBCE47DB6731D3AC6231A6A63E369E8F9AA537 F5D94718A93827EAE3A780C7BF030321037B4C7A0A0000002100000021000000 5D0E00000000000078DAED5DF957544716CE1F32EE1A77C515911D641575124D DC4010454076651157D4999C999C392789A3020D3434FB266B038240B3883A2A B8641283313A333FCC44A333F90FEEDC5BAF5FFB5EF39A74CB7BAFCD4CDD73EE E95FDEE9AFAA5ED5BD5F7D7DABFA830F9CB7E10BDB03860BB61758CE6DB30C9E DB060367B7C18DD351D07B6A2BF4A077E7475ACCF99105ED7991011FA86C6317 7614DCBCB81D46CF6F8791826D30846E3917856D8882FED35B85369C8CC43644 00B6013AF222A02D37025A73C20B668A7DEBE28E00741843BF7901DB803E725E DA86ADAC0D7DA722A1F76484D0861311D0911B0EED3961D0921D06CDC743A1E9 58E83B8DCBED8B3B2CB7B1EFB72E083E867E13F1470BA2702CA2C082F8036723 B10D91AC0DD7F3C3A1FB441898F3C2B00D61D096130AADD9A1D07C2C049AB2B6 40436688C555FC3BBFDB0E776C6DD80663882FB661F8DC561842FCC133D806EC 7FDFC970B88EF8DD88DF951B0A1D3921D096BD055A8E6DC13604436366303464 04435D7A90C5F9FEEF60F8E4B72F6E83DB621B0AB6C2E8B9486C43240C9D8980 C1D3E1D07F2A1CDB108A6D0881EEDC1030237E07E2B721764B56103467064163 4620D4A707425D5A20D4A405589CEDBF14FFD685286C4314B62112FE6EA9819F 5F3C06257BF3C34398ECAB848EE341D09A1508D73203A02923001AD3FDA13ECD 1FEA52FDA126C51FAA52FC2C8EE6DFED8B0AF8887DEBFC5686EF08DBDE5E3F7B 00AD887F2DC31F9AD2FDA021D50FF17DA1F6A82F54A357A19B927D0214DA609B 7FF6F863F80E9CC517EDA7EF1F40739A0F34A6FA407D8A37D4A2D71CF586EAE4 CD5099E40D2674FBF53F666BC3DBF117F1FF315423FBFE1783553070620BF4E7 05416F4E20F464074257B63F4CF696CB9EFBA6BB0C1A8E6E86BA642FA841AF4E F282AAC44D5099E80526F48A235EB6F841F1E7A675FDD1DC135C78FF3407A563 F062A00A06F383E1C68920E8CB0D845EC4EE3EE607E62C5FE8C8F486EF7A8CB6 675F3D1D87FA244FA84BF4841AF4AA239E507964239812364245822794A38BF1 97E2DFA875FDDFB4CE7F013F0246CE86CBFA3678221806B0FF3710FF3AE2F71C F783AE2C1FE8CCF481F6F4CDD092EA257BBE2E7103D41C590FD509EBA1F2F07A 30A157A0971F428FDF08C6C31B58FCA7F84B4E6B7FF49CB0FE4671FD8F9C8D80 E13361B2EF14F1FB7210FF982F7433FCCDD091EE05AD299E702DD553F67CED91 75507D782D541D5A0BA6F8B550815E8E6E442F8B5F87BE9EE59F216B0E18B1C6 1F5AFFC3B8FE8770FD0F9D0A957D27C3C7FE5FB7E29B33087F13C36F39BA019A 93D7CB9EAF39BC06F13D10DF032AE2564339BA31CE03CAD04BC963D7B0FC47B1 9FF95921FE51FCB120BE05F1074F86C8BE93FACFF0F1DD137E27E2B7A76C8456 C4BF96B40E1A8FAC953D5F1DBF0A2A0FAE0253DC2AC45F09C6D8955016BB8A79 E981D5D886D52CFF52FE1BB0C67F8ABF14FF06117F00F1FB71FE4BAD47D27F7B FCA6C435507FD843F67C65DC0A30C5AE80F203CBC1885E16B31C4AD14B625630 37C4AC64F99F729FE0912CF632C7F87B233F04FAF28265DFC9F03325F838F622 7E43C26AA83FB44AF6BCE9C052C45F06C6E8A550865E8A5EB21F7DDF3230EC5F 0E86E8E52CF79353EE637E5288FFBD88DF8BF8D7738364DF29CCBFA9FD6F388C F8F12BA1F6E00AD9F3E5D14BC0B87F3194A197EEFB107D3118AC5EBC6F09FA32 C67F887F50FEA7FC4BF98FF24F4FDE16E8C90D866E8C3F5213E7BF227EDC72A8 8E5D267BDE88B8657B1741E9DE8550826ED843BE088AF77C08457BC99730FED5 932FF08F6E6BFEA5FCD795138CB12F08CCC70364DF29CE7F11BF51825F83F855 314B64CF1376E99E0560D88D8E9FC5BBC9174211F91EF2458CFF994F4432FE63 B6E67FCABF9DD9C1D089F81D59FEB2EFA4F54FEB8FE63FCD3F7AFF34FED5567C D3FE0FE56DD8331F4A76CF07C327F3A088FC53D1174021FAD5DD0B19FF24FE47 FC8BF84F8735FF53FE6DCF0A80B64C3FD97736256F80C6C4750CBFEED06AA88D 477C1C03861FBD182AF62D923D5F8278C59FCE85E24FE642D1AEB950889F85EC 731EFA7CB8BA6B01CB9FC43F89FF11FF6AB3F20FCAFF947F5BD27D31074EBCCD 43E612A8C731A8C336D41C5C89FD47FCD8A5608A417C1C8307D72ED99EFDE737 B7B1FF73A078D71CC49F8DD8E83B67C3D59D73109B7CAE2D7712FF25FE49FC8F F817F11FE21FCD98FF29FF52FE93DAD79DC55083635085EFA012D79D09C7A022 5A8E4F36DEF825E28BB8E81FCF822BE8573F9E0D577692CF95F16EE2BFC43F89 FF11FF22FE43FC83F23FE5DF9793E32EF1071A0311BF90E1CEB2B5E1CA4782DB 7318E2DFC47F897F12FF23FED590E6CBF807E57FCABF2F27EFBB803F4782FF1B C446FF48F45970F9E3598A7CBF21738B85F82FF14F81FFF90AFC873808B681F2 EFA38E62F8F1BB7B0EB0EFC078D357D6F9271DFFB7F8977FCB7C5A5E4BFC9BF8 6F2DF24FE27F8C7F11FF21FE41F99FF22FCB7F2B85F84FF117E35009C6215AFF 6CFDD1BCDF355B32FECEE38B46FC9BF82FF14FE27F8C7F11FF21FE41F99FF22F E53FCA3FAC0D8B59FCA3F8436B9FAD3F9A73B6F7EF1ABE68C4BF89FF12FF64FC 8FF817F11FE21F94FF29F752FEC3FCC3E23FC55F8A7DD4061C075A7F5768FE5B E79FABF8A211FF26FECBF827F13FE45F46E44365B636AC10F21FE51F8AFFAC0D 0B58FCA1F5CFD6DF34F3CF1523FE4BFC93F81F722F81FF20FF60F91FF32FE53F 967FF07D14B23650FC9B3765FDAB61C43F89FF11FF22FE43FC83F23FE5DFA2BD 8B59FEA1F82FC65F2D8C6B205C03E11A88B206427BC061EB1EE83FCF1F29E62E 2D3510610F2CEC011DE1931107D44203A177407B70DA034F874F461C9438A09A 1AC84DDA879F09879133CAFDFF4B61969CFFA7FBC0B5346F684AD9AC9A06328A E33F723A0C7E56C0BF5798C13410A9B5A46D86E6542F683CBA49350D84FAAF84 7F17F1450D44B60749D9044D473D117FA36A1A88D2F8DF2BCA90692053F62049 1B700FB05E130D441C7F7B0D446A6C0F447B9084359A6820D47F250D446AF509 1EC21E08F7206A6920A401F6891A98030D44A6832136EDC1D81E48250D843448 518373A481C87430DA83E21E90EDC154D2404803A5F5D765D3E0A66A20320D2A 4EDC832E514D03210D9634D0CE0C6F871A88D4D81E9CF6C0B807554B03E9CCF2 631A2C69A08E34109906152DECC18DFB16AAA681B467FA405BBA37D3601D6920 52230DC288D86588A9960642F19FE22F8B7F0E3410990645F8885BBA7B9E6A1A 08CB3F3806147F85F8375503911AC347EC12C4534B03A1FCC7F24FF246167F59 FCB3D340641AD46E2BFEAE39AA6A2042FEDB00B50914FFD708F18FE20FADFFE8 25533428A1FFEA6B202CFFB1FCE321C45F16FF96B1F52F357AF75A6A2042FEF3 10E23FC55F8A7F0A6DE01A08D740B806C23510AE81700D84D781F03A105E07F2 7ED481900661C13DB8145FEF3A10869F2FC19FA60EE4DB2E830D9F7E07544B03 A1F947EF5FECBFA33A906FCD06D9183CEE28D24D0319FD2269CADA7CF9DD3DDD 3490275D0605FCBBBA6820635F26C14F4FC795F175D04094B0C9FAFF10F7B60E 42230D64EC528A2236BD7B691D88561A88B406428A3DF879FC943A102D349027 92F82BDA5F71DD39AA03D1420391DAABC97118FC5382C33A101BBECA1A884C83 75A08108F3CF3AFE1A68203331B5349019B541250D6426C63510AE81700D846B 205C03E11A08D740B806C23510AE81700D647A0D643AD34B0399CEF4AA0399CE 7E7C7257F73A10AAC3F8BAEDAAAC1D0F5BFEAC6B1D88A8813C6ABD6C6BC3BFBE BDA36B1D083F0BC3CFC2F0B330FC2C0CD740B806C23510AE81700DE4D7751686 F620B407B85792ED96B33016EB1EE8BE1DBE5E676186AC7BC071C371B79C8561 7BE0532130E1005FEBB330C3D63DF844C9B1697994566761087F88F00D53F1EF 5C49D3FC2C8CA84138C2D7E32C8CA3F1277CBDCEC228CDBF3B9753753D0BE3A8 FF7A9E859982EF86B330CEDC07A2F55998999816F781B86A5ADC07E2721BF859 187E16869F85E16761B806C23510AE81700D846B206ED54066626A6920336A83 4A1AC84C4C2D0D446AA206A2540742BF83D2EF905A68205213EB101CD581B0DF 4135D0405CAD03D1420371F54E54ADEF0371E64E54ADEF0371E64E543D341047 F66AF2BEED2C80961A8833A6C5599877315E07F2BF5B07E28C06A2751D88331A 88D67520CE68205AD781BC7A3AE1F2DA54BB0EE4DDF0D5D5405E3A390EBC0E84 6B205C03E11A08D740B806F23ED6813C28CB65E7301C9E0179F650B33A9047C6 BC5FBC8FD4F6FBBF0675208F8CB96E3B0B4375208F15F09FF79BE05E51962E1A 08D581D8DF477ADF90A5AB0662FF0E268AB374D740FE2699FF34FEEED640EEE3 FBE71A08C0F7BDE5F0E6D904D740DCA481D8DB93EE52DD35107B7C776820FC7F 61F859187E16869F85E11A08D740B806C23510AE81F03A105E07A2CD5998E9EA 40A4A6D559985FAA03919D83D0E02CCCAFE13E9091AF92DD7A1FC888C29DA07A DE07A2742769FFE787DC7A276AFF1FE375BB1375F48B4405FC83BADD07A2DCFF 83BAFD2F8C22BE0E77A28A7520230EF0B5BE1355AC03B15FFF6FDFBFB677A24A EB401CBE7F8DEF4495D681D8AF3FBDEE4495D681C8FE9348C73B51A56761A6FC 37B7F52C0CCD7F61FECDD7FC2C8CEC7F91246761D8FAC331A0F9A7F55918D97F 734BCEC2D018B0F587738D6B205C03E11A08D740B806C235107E272ABF1395DF 89FAFEDC89EAEA59182D3410693DD40F374C6EB913F5797FA5AC6FCF70EEB9E3 4ED47F63FC71AD0E439B3B515D312D34903718FBDC5907F2B4AFC2ED7520AF25 63C0EB40781D08AF03E175205C03E11A08D740B806C23510AE81700D846B205C 03F9FFD640D4AC0379570D8469006ED44064BFC3AAA881B8AA41B0DF6135A803 99BC5E06AFBF1F77A8FF7CDD2ED720F4BE0F843408D200B4B813D595FB40FA3E 3BA0C99DA8AEDC0742FA8FED5C5FF325DDEF03E9FD7D8C6C0CBACEEFD5F53E90 DECF62A6EC7FF5BA13B5F7B3587828D1C1443317EC51BD0EC4150DC45CB05793 3A1067EFE230E31CD0AA0E64BA719868B90C5D17F7F33A10AE81700D44450DE4 BFC65861F0 } end end doublecmd-1.1.30/src/fdiffer.pas0000644000175000001440000014672215104114162015502 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Internal diff and merge tool Copyright (C) 2010-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fDiffer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Dialogs, Menus, ComCtrls, ActnList, ExtCtrls, EditBtn, Buttons, SynEdit, uSynDiffControls, LMessages, KASComCtrls, uPariterControls, uDiffOND, uFormCommands, uHotkeyManager, uOSForms, uBinaryDiffViewer, uShowForm, KASStatusBar, Graphics, StdCtrls, fEditSearch; type { TStatusBar } TStatusBar = class(TKASStatusBar); { TfrmDiffer } TfrmDiffer = class(TAloneForm, IFormCommands) actBinaryCompare: TAction; actCopyLeftToRight: TAction; actCopyRightToLeft: TAction; actExit: TAction; actEditCut: TAction; actEditCopy: TAction; actEditDelete: TAction; actEditUndo: TAction; actEditRedo: TAction; actFind: TAction; actFindNext: TAction; actFindPrev: TAction; actFindReplace: TAction; actGotoLine: TAction; actEditSelectAll: TAction; actEditPaste: TAction; actAbout: TAction; actAutoCompare: TAction; actLineDifferences: TAction; actSaveRightAs: TAction; actSaveLeftAs: TAction; actOpenRight: TAction; actOpenLeft: TAction; actReload: TAction; actSaveRight: TAction; actSaveLeft: TAction; actPaintBackground: TAction; actStartCompare: TAction; actFirstDifference: TAction; actIgnoreCase: TAction; actIgnoreWhiteSpace: TAction; actCancelCompare: TAction; actKeepScrolling: TAction; actPrevDifference: TAction; actLastDifference: TAction; actNextDifference: TAction; actSaveAs: TAction; actSave: TAction; ActionList: TActionList; edtFileNameLeft: TFileNameEdit; edtFileNameRight: TFileNameEdit; MainMenu: TMainMenu; miAutoCompare: TMenuItem; miDivider10: TMenuItem; miDivider11: TMenuItem; miLineDifferences: TMenuItem; miEncodingRight: TMenuItem; miEncodingLeft: TMenuItem; miAbout: TMenuItem; mnuEncoding: TMenuItem; miSaveRightAs: TMenuItem; miSaveLeftAs: TMenuItem; miCopyContext: TMenuItem; miCutContext: TMenuItem; miDeleteContext: TMenuItem; miFind: TMenuItem; miFindNext: TMenuItem; miFindPrevious: TMenuItem; miFindReplace: TMenuItem; miGotoLine: TMenuItem; miEditSelectAll: TMenuItem; miEditDelete: TMenuItem; miEditPaste: TMenuItem; miEditCopy: TMenuItem; miEditCut: TMenuItem; miDivider8: TMenuItem; miEditRedo: TMenuItem; miEditUndo: TMenuItem; miDivider7: TMenuItem; miPasteContext: TMenuItem; miReload: TMenuItem; miDivider6: TMenuItem; miExit: TMenuItem; miSaveRight: TMenuItem; miOpenRight: TMenuItem; miOpenLeft: TMenuItem; miCopyRightToLeft: TMenuItem; miCopyLeftToRight: TMenuItem; miDivider5: TMenuItem; miPaintBackground: TMenuItem; miDivider4: TMenuItem; miBinaryCompare: TMenuItem; miKeepScrolling: TMenuItem; miDivider3: TMenuItem; miLastDiff: TMenuItem; miFirstDiff: TMenuItem; miDivider2: TMenuItem; miPrevDiff: TMenuItem; miNextDiff: TMenuItem; miDivider1: TMenuItem; miCancelCompare: TMenuItem; miSelectAllContext: TMenuItem; miSeparator1: TMenuItem; miSeparator2: TMenuItem; miStartCompare: TMenuItem; miUndoContext: TMenuItem; mnuActions: TMenuItem; miIgnoreCase: TMenuItem; miIgnoreWhiteSpace: TMenuItem; mnuOptions: TMenuItem; mnuEdit: TMenuItem; miSaveLeft: TMenuItem; mnuFile: TMenuItem; ContextMenu: TPopupMenu; pnlLeftBox: TPanel; pnlRight: TPanel; pnlLeft: TPanel; pnlRightBox: TPanel; btnLeftEncoding: TSpeedButton; btnRightEncoding: TSpeedButton; btnLeftSave: TSpeedButton; btnLeftSaveAs: TSpeedButton; btnRightSave: TSpeedButton; btnRightSaveAs: TSpeedButton; pmEncodingLeft: TPopupMenu; pmEncodingRight: TPopupMenu; Splitter: TSplitter; StatusBar: TStatusBar; tmProgress: TTimer; ToolBar: TToolBarAdv; btnSave: TToolButton; btnSaveAs: TToolButton; Divider1: TToolButton; btnCompare: TToolButton; btnLast: TToolButton; btnNext: TToolButton; btnPrev: TToolButton; btnFirst: TToolButton; Divider2: TToolButton; Divider3: TToolButton; btnCancelCompare: TToolButton; Divider4: TToolButton; btnReload: TToolButton; btnCopyRightToLeft: TToolButton; btnCopyLeftToRight: TToolButton; Divider5: TToolButton; btnEditUndo: TToolButton; btnEditRedo: TToolButton; procedure actAboutExecute(Sender: TObject); procedure actBinaryCompareExecute(Sender: TObject); procedure actCancelCompareExecute(Sender: TObject); procedure actExecute(Sender: TObject); procedure actEditCopyExecute(Sender: TObject); procedure actEditCutExecute(Sender: TObject); procedure actEditDeleteExecute(Sender: TObject); procedure actEditPasteExecute(Sender: TObject); procedure actEditRedoExecute(Sender: TObject); procedure actEditSelectAllExecute(Sender: TObject); procedure actEditUndoExecute(Sender: TObject); procedure actIgnoreCaseExecute(Sender: TObject); procedure actLineDifferencesExecute(Sender: TObject); procedure actOpenLeftExecute(Sender: TObject); procedure actOpenRightExecute(Sender: TObject); procedure actPaintBackgroundExecute(Sender: TObject); procedure actSaveAsExecute(Sender: TObject); procedure actSaveExecute(Sender: TObject); procedure actSaveLeftAsExecute(Sender: TObject); procedure actSaveRightAsExecute(Sender: TObject); procedure actStartCompareExecute(Sender: TObject); procedure actKeepScrollingExecute(Sender: TObject); procedure btnLeftEncodingClick(Sender: TObject); procedure btnRightEncodingClick(Sender: TObject); procedure edtFileNameLeftAcceptFileName(Sender: TObject; var Value: String); procedure edtFileNameRightAcceptFileName(Sender: TObject; var Value: String); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure tmProgressTimer(Sender: TObject); private BinaryDiffList: TFPList; BinaryDiffIndex: Integer; BinaryCompare: TBinaryCompare; BinaryViewerLeft, BinaryViewerRight: TBinaryDiffViewer; procedure BinaryCompareFinish; private Diff: TDiff; SynDiffEditActive: TSynDiffEdit; SynDiffEditLeft: TSynDiffEdit; SynDiffEditRight: TSynDiffEdit; SynDiffHighlighterLeft, SynDiffHighlighterRight: TSynDiffHighlighter; HashListLeft, HashListRight: array of Integer; EncodingList: TStringList; ScrollLock: LongInt; FShowIdentical: Boolean; FModal: Boolean; FCancel: Boolean; frmProgress: TForm; FWaitData: TWaitData; FElevate: TDuplicates; FCommands: TFormCommands; FLeftLen, FRightLen: Integer; FSearchOptions: TEditSearchOptions; private procedure ShowDialog; procedure ShowIdentical; procedure ShowTextIdentical; procedure ShowProgressDialog; procedure CloseProgressDialog; procedure Clear(bLeft, bRight: Boolean); procedure BuildHashList(bLeft, bRight: Boolean); procedure ChooseEncoding(SynDiffEdit: TSynDiffEdit); function GetDisplayNumber(LineNumber: Integer): Integer; procedure SetColors(cAdded, cDeleted, cModified: TColor); procedure ChooseEncoding(MenuItem: TMenuItem; Encoding: String); procedure FillEncodingMenu(TheOwner: TMenuItem; MenuHandler: TNotifyEvent; GroupIndex: LongInt); procedure LoadFromFile(SynDiffEdit: TSynDiffEdit; const FileName: String); procedure SaveToFile(SynDiffEdit: TSynDiffEdit; const FileName: String); procedure OpenFileLeft(const FileName: String); procedure OpenFileRight(const FileName: String); procedure SetEncodingLeft(Sender: TObject); procedure SetEncodingRight(Sender: TObject); procedure SynDiffEditEnter(Sender: TObject); procedure ShowFirstDifference(Data: PtrInt); procedure SynDiffEditLeftStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure SynDiffEditRightStatusChange(Sender: TObject; Changes: TSynStatusChanges); property Commands: TFormCommands read FCommands implements IFormCommands; protected procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure AfterConstruction; override; published procedure cm_CopyLeftToRight(const Params: array of string); procedure cm_CopyRightToLeft(const Params: array of string); procedure cm_Find(const Params: array of string); procedure cm_FindNext(const Params: array of string); procedure cm_FindPrev(const Params: array of string); procedure cm_FindReplace(const Params: array of string); procedure cm_GotoLine(const Params: array of string); procedure cm_Exit(const Params: array of string); procedure cm_FirstDifference(const Params: array of string); procedure cm_LastDifference(const Params: array of string); procedure cm_NextDifference(const Params: array of string); procedure cm_PrevDifference(const Params: array of string); procedure cm_Reload(const Params: array of string); procedure cm_SaveLeft(const Params: array of string); procedure cm_SaveRight(const Params: array of string); end; procedure ShowDiffer(const FileNameLeft, FileNameRight: String; WaitData: TWaitData = nil; Modal: Boolean = False); implementation {$R *.lfm} uses Math, LCLType, LazFileUtils, LConvEncoding, SynEditTypes, uHash, uLng, uGlobs, uShowMsg, DCClassesUtf8, dmCommonData, uDCUtils, uConvEncoding, uAdministrator, uFileProcs; const HotkeysCategory = 'Differ'; procedure ShowDiffer(const FileNameLeft, FileNameRight: String; WaitData: TWaitData = nil; Modal: Boolean = False); var Binary: Boolean; Differ: TfrmDiffer; begin Differ := TfrmDiffer.Create(Application); with Differ do begin FModal := Modal; FWaitData := WaitData; FShowIdentical := True; edtFileNameLeft.Text:= FileNameLeft; edtFileNameRight.Text:= FileNameRight; try PushPop(FElevate); try Binary:= not (mbFileIsText(FileNameLeft) and mbFileIsText(FileNameRight)); finally PushPop(FElevate); end; if Binary then actBinaryCompare.Execute else begin OpenFileLeft(FileNameLeft); OpenFileRight(FileNameRight); if actStartCompare.Enabled then actStartCompare.Execute else begin tmProgress.Enabled:= False; CloseProgressDialog; ShowDialog; end; end; except on E: Exception do begin tmProgress.Enabled:= False; CloseProgressDialog; msgError(E.Message); Free; end; end; end; end; { TfrmDiffer } procedure TfrmDiffer.actStartCompareExecute(Sender: TObject); var I: Integer; LineNumberLeft, LineNumberRight: PtrInt; begin FCancel:= False; try if actBinaryCompare.Checked then begin if (BinaryViewerLeft.IsFileOpen and BinaryViewerRight.IsFileOpen) then begin actStartCompare.Enabled := False; actCancelCompare.Enabled := True; actBinaryCompare.Enabled := False; BinaryCompare:= TBinaryCompare.Create(BinaryViewerLeft.GetDataAdr, BinaryViewerRight.GetDataAdr, BinaryViewerLeft.FileSize, BinaryViewerRight.FileSize, BinaryDiffList); BinaryCompare.OnFinish:= @BinaryCompareFinish; BinaryCompare.Start; end; end else begin Inc(ScrollLock); Screen.BeginWaitCursor; try if SynDiffEditLeft.Modified then SynDiffEditLeft.Lines.RemoveFake; if SynDiffEditRight.Modified then SynDiffEditRight.Lines.RemoveFake; BuildHashList(SynDiffEditLeft.Modified, SynDiffEditRight.Modified); if (Length(HashListLeft) = 0) or (Length(HashListRight) = 0) then begin FCancel := True; Exit; end; actStartCompare.Enabled := False; actCancelCompare.Enabled := True; Diff.Execute( PInteger(@HashListLeft[0]), PInteger(@HashListRight[0]), Length(HashListLeft), Length(HashListRight) ); tmProgress.Enabled:= False; if Diff.Cancelled then Exit; SynDiffEditLeft.StartCompare; SynDiffEditRight.StartCompare; for I := 0 to Diff.Count - 1 do with Diff.Compares[I] do begin LineNumberLeft:= oldIndex1 + 1; LineNumberRight:= oldIndex2 + 1; case Kind of ckAdd: begin SynDiffEditLeft.Lines.InsertFake(I, Kind); SynDiffEditRight.Lines.SetKindAndNumber(I, Kind, LineNumberRight); end; ckDelete: begin SynDiffEditLeft.Lines.SetKindAndNumber(I, Kind, LineNumberLeft); SynDiffEditRight.Lines.InsertFake(I, Kind); end; else begin SynDiffEditLeft.Lines.SetKindAndNumber(I, Kind, LineNumberLeft); SynDiffEditRight.Lines.SetKindAndNumber(I, Kind, LineNumberRight); end; end; end; finally SynDiffEditLeft.FinishCompare; SynDiffEditRight.FinishCompare; actStartCompare.Enabled := True; actCancelCompare.Enabled := False; Screen.EndWaitCursor; Dec(ScrollLock); end; if actLineDifferences.Checked then begin SynDiffEditLeft.Highlighter:= SynDiffHighlighterLeft; SynDiffEditRight.Highlighter:= SynDiffHighlighterRight; end; with Diff.DiffStats do begin StatusBar.Panels[0].Text := rsDiffMatches + IntToStr(matches); StatusBar.Panels[1].Text := rsDiffModifies + IntToStr(modifies); StatusBar.Panels[2].Text := rsDiffAdds + IntToStr(adds); StatusBar.Panels[3].Text := rsDiffDeletes + IntToStr(deletes); if FShowIdentical then begin CloseProgressDialog; FShowIdentical:= (modifies = 0) and (adds = 0) and (deletes = 0); if FShowIdentical then ShowIdentical else begin FShowIdentical:= False; Application.QueueAsyncCall(@ShowFirstDifference, 0); ShowDialog; end; end else if (modifies = 0) and (adds = 0) and (deletes = 0) then begin if (SynDiffEditLeft.Encoding <> SynDiffEditRight.Encoding) or (SynDiffEditLeft.Lines.TextLineBreakStyle <> SynDiffEditRight.Lines.TextLineBreakStyle) then begin ShowTextIdentical; end; end; end; end; finally if FShowIdentical and FCancel then Free; end; end; procedure TfrmDiffer.actOpenLeftExecute(Sender: TObject); begin dmComData.OpenDialog.FileName:= edtFileNameLeft.Text; dmComData.OpenDialog.Filter:= AllFilesMask; if dmComData.OpenDialog.Execute then begin edtFileNameLeft.Text:= dmComData.OpenDialog.FileName; actReload.Execute; end; end; procedure TfrmDiffer.actOpenRightExecute(Sender: TObject); begin dmComData.OpenDialog.FileName:= edtFileNameRight.Text; dmComData.OpenDialog.Filter:= AllFilesMask; if dmComData.OpenDialog.Execute then begin edtFileNameRight.Text:= dmComData.OpenDialog.FileName; actReload.Execute; end; end; procedure TfrmDiffer.actPaintBackgroundExecute(Sender: TObject); begin if actPaintBackground.Checked then begin SynDiffEditLeft.PaintStyle:= psBackground; SynDiffEditRight.PaintStyle:= psBackground; end else begin SynDiffEditLeft.PaintStyle:= psForeground; SynDiffEditRight.PaintStyle:= psForeground; end; SynDiffHighlighterLeft.UpdateColors; SynDiffHighlighterRight.UpdateColors; end; procedure TfrmDiffer.actSaveAsExecute(Sender: TObject); begin if SynDiffEditActive = SynDiffEditLeft then actSaveLeftAs.Execute else if SynDiffEditActive = SynDiffEditRight then actSaveRightAs.Execute; end; procedure TfrmDiffer.actSaveExecute(Sender: TObject); begin if SynDiffEditActive = SynDiffEditLeft then actSaveLeft.Execute else if SynDiffEditActive = SynDiffEditRight then actSaveRight.Execute; end; procedure TfrmDiffer.actSaveLeftAsExecute(Sender: TObject); begin dmComData.SaveDialog.FileName:= edtFileNameLeft.FileName; if dmComData.SaveDialog.Execute then begin PushPop(FElevate); try SaveToFile(SynDiffEditLeft, dmComData.SaveDialog.FileName); finally PushPop(FElevate); end; edtFileNameLeft.FileName:= dmComData.SaveDialog.FileName; end; end; procedure TfrmDiffer.actSaveRightAsExecute(Sender: TObject); begin dmComData.SaveDialog.FileName:= edtFileNameRight.FileName; if dmComData.SaveDialog.Execute then begin PushPop(FElevate); try SaveToFile(SynDiffEditRight, dmComData.SaveDialog.FileName); finally PushPop(FElevate); end; edtFileNameRight.FileName:= dmComData.SaveDialog.FileName; end; end; procedure TfrmDiffer.actBinaryCompareExecute(Sender: TObject); begin mnuEdit.Enabled:= not actBinaryCompare.Checked; mnuEncoding.Enabled:= not actBinaryCompare.Checked; btnLeftEncoding.Enabled:= not actBinaryCompare.Checked; btnRightEncoding.Enabled:= not actBinaryCompare.Checked; actCopyLeftToRight.Enabled:= not actBinaryCompare.Checked; actCopyRightToLeft.Enabled:= not actBinaryCompare.Checked; actEditUndo.Enabled:= not actBinaryCompare.Checked; actEditRedo.Enabled:= not actBinaryCompare.Checked; actFind.Enabled:= not actBinaryCompare.Checked; actFindNext.Enabled:= not actBinaryCompare.Checked; actFindPrev.Enabled:= not actBinaryCompare.Checked; actFindReplace.Enabled:= not actBinaryCompare.Checked; actGotoLine.Enabled:= not actBinaryCompare.Checked; actSave.Enabled:= not actBinaryCompare.Checked; actSaveAs.Enabled:= not actBinaryCompare.Checked; actSaveLeft.Enabled:= not actBinaryCompare.Checked; actSaveLeftAs.Enabled:= not actBinaryCompare.Checked; actSaveRight.Enabled:= not actBinaryCompare.Checked; actSaveRightAs.Enabled:= not actBinaryCompare.Checked; actIgnoreCase.Enabled:= not actBinaryCompare.Checked; actIgnoreWhiteSpace.Enabled:= not actBinaryCompare.Checked; actPaintBackground.Enabled:= not actBinaryCompare.Checked; actLineDifferences.Enabled:= not actBinaryCompare.Checked; SynDiffEditLeft.Visible:= not actBinaryCompare.Checked; SynDiffEditRight.Visible:= not actBinaryCompare.Checked; BinaryViewerLeft.Visible:= actBinaryCompare.Checked; BinaryViewerRight.Visible:= actBinaryCompare.Checked; if actBinaryCompare.Checked then begin PushPop(FElevate); try BinaryDiffList.Clear; BinaryViewerLeft.FileName:= edtFileNameLeft.Text; BinaryViewerRight.FileName:= edtFileNameRight.Text; finally PushPop(FElevate); end; if FShowIdentical then begin if not BinaryViewerLeft.IsFileOpen then raise EFOpenError.Create(BinaryViewerLeft.LastError + LineEnding + edtFileNameLeft.Text); if not BinaryViewerRight.IsFileOpen then raise EFOpenError.Create(BinaryViewerRight.LastError + LineEnding + edtFileNameRight.Text); end; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := EmptyStr; StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; end else begin BinaryViewerLeft.FileName:= EmptyStr; BinaryViewerRight.FileName:= EmptyStr; OpenFileLeft(edtFileNameLeft.Text); OpenFileRight(edtFileNameRight.Text); end; actStartCompare.Execute; end; procedure TfrmDiffer.actCancelCompareExecute(Sender: TObject); begin if not actBinaryCompare.Checked then Diff.Cancel else begin if Assigned(BinaryCompare) then begin BinaryCompare.Terminate; BinaryCompare:= nil; end; end; end; procedure TfrmDiffer.actAboutExecute(Sender: TObject); begin ShowMessage('Internal Differ tool of Double Commander.' + LineEnding + LineEnding + 'It is inspired by Flavio Etrusco''s Pariter tool.' + LineEnding + 'You can find it on: http://sourceforge.net/projects/pariter' + LineEnding + 'It is based on Angus Johnson''s excellent TDiff component.' + LineEnding + 'You can find it on: http://www.users.on.net/johnson/delphi'); end; procedure TfrmDiffer.actEditCopyExecute(Sender: TObject); begin SynDiffEditActive.CopyToClipboard; end; procedure TfrmDiffer.actEditCutExecute(Sender: TObject); begin SynDiffEditActive.CutToClipboard; end; procedure TfrmDiffer.actEditDeleteExecute(Sender: TObject); begin SynDiffEditActive.ClearSelection; end; procedure TfrmDiffer.actEditPasteExecute(Sender: TObject); begin SynDiffEditActive.PasteFromClipboard; end; procedure TfrmDiffer.actEditRedoExecute(Sender: TObject); begin SynDiffEditActive.Redo; end; procedure TfrmDiffer.actEditSelectAllExecute(Sender: TObject); begin SynDiffEditActive.SelectAll; end; procedure TfrmDiffer.actEditUndoExecute(Sender: TObject); begin SynDiffEditActive.Undo; end; procedure TfrmDiffer.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmDiffer.actIgnoreCaseExecute(Sender: TObject); begin if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.actLineDifferencesExecute(Sender: TObject); begin if actLineDifferences.Checked and (Diff.Count <> 0) then begin SynDiffEditLeft.Highlighter:= SynDiffHighlighterLeft; SynDiffEditRight.Highlighter:= SynDiffHighlighterRight; end else begin SynDiffEditLeft.Highlighter:= nil; SynDiffEditRight.Highlighter:= nil; end; SynDiffEditLeft.Repaint; SynDiffEditRight.Repaint; end; procedure TfrmDiffer.actKeepScrollingExecute(Sender: TObject); begin BinaryViewerLeft.KeepScrolling:= actKeepScrolling.Checked; BinaryViewerRight.KeepScrolling:= actKeepScrolling.Checked; end; procedure TfrmDiffer.btnLeftEncodingClick(Sender: TObject); begin pmEncodingLeft.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmDiffer.btnRightEncodingClick(Sender: TObject); begin pmEncodingRight.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmDiffer.edtFileNameLeftAcceptFileName(Sender: TObject; var Value: String); begin OpenFileLeft(Value); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.edtFileNameRightAcceptFileName(Sender: TObject; var Value: String); begin OpenFileRight(Value); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.FormCreate(Sender: TObject); begin ScrollLock:= 0; Diff:= TDiff.Create(Self); SynDiffEditLeft:= TSynDiffEdit.Create(Self); SynDiffEditRight:= TSynDiffEdit.Create(Self); SynDiffHighlighterLeft:= TSynDiffHighlighter.Create(SynDiffEditLeft); SynDiffHighlighterRight:= TSynDiffHighlighter.Create(SynDiffEditRight); SynDiffEditLeft.Parent:= pnlLeft; SynDiffEditRight.Parent:= pnlRight; SynDiffEditLeft.Align:= alClient; SynDiffEditRight.Align:= alClient; SynDiffEditLeft.PopupMenu:= ContextMenu; SynDiffEditRight.PopupMenu:= ContextMenu; SynDiffEditLeft.ModifiedFile:= SynDiffEditRight; SynDiffEditRight.OriginalFile:= SynDiffEditLeft; SynDiffEditLeft.OnEnter:= @SynDiffEditEnter; SynDiffEditRight.OnEnter:= @SynDiffEditEnter; SynDiffEditLeft.OnStatusChange:= @SynDiffEditLeftStatusChange; SynDiffEditRight.OnStatusChange:= @SynDiffEditRightStatusChange; // Set active editor SynDiffEditActive:= SynDiffEditLeft; BinaryDiffList:= TFPList.Create; BinaryViewerLeft:= TBinaryDiffViewer.Create(Self); BinaryViewerRight:= TBinaryDiffViewer.Create(Self); BinaryViewerLeft.OnFileOpen:= @FileOpenUAC; BinaryViewerRight.OnFileOpen:= @FileOpenUAC; BinaryViewerLeft.Visible:= False; BinaryViewerRight.Visible:= False; BinaryViewerLeft.Parent:= pnlLeft; BinaryViewerRight.Parent:= pnlRight; BinaryViewerLeft.Align:= alClient; BinaryViewerRight.Align:= alClient; BinaryViewerLeft.SecondViewer:= BinaryViewerRight; BinaryViewerRight.SecondViewer:= BinaryViewerLeft; with gColors.Differ^ do begin BinaryViewerLeft.Modified:= ModifiedBinaryColor; BinaryViewerRight.Modified:= ModifiedBinaryColor; SetColors(AddedColor, DeletedColor, ModifiedColor); end; FontOptionsToFont(gFonts[dcfEditor], SynDiffEditLeft.Font); FontOptionsToFont(gFonts[dcfEditor], SynDiffEditRight.Font); FontOptionsToFont(gFonts[dcfViewer], BinaryViewerLeft.Font); FontOptionsToFont(gFonts[dcfViewer], BinaryViewerRight.Font); // Load settings actIgnoreCase.Checked := gDifferIgnoreCase; actAutoCompare.Checked := gDifferAutoCompare; actKeepScrolling.Checked := gDifferKeepScrolling; actLineDifferences.Checked := gDifferLineDifferences; actPaintBackground.Checked := gDifferPaintBackground; actIgnoreWhiteSpace.Checked := gDifferIgnoreWhiteSpace; // Initialize mode actKeepScrollingExecute(actKeepScrolling); actPaintBackgroundExecute(actPaintBackground); // Initialize property storage InitPropStorage(Self); // Fill encoding menu EncodingList:= TStringList.Create; GetSupportedEncodings(EncodingList); FillEncodingMenu(miEncodingLeft, @SetEncodingLeft, 1); FillEncodingMenu(miEncodingRight, @SetEncodingRight, 2); FillEncodingMenu(pmEncodingLeft.Items, @SetEncodingLeft, 1); FillEncodingMenu(pmEncodingRight.Items, @SetEncodingRight, 2); EncodingList.Free; end; procedure TfrmDiffer.FormDestroy(Sender: TObject); begin FreeAndNil(Diff); FreeAndNil(BinaryDiffList); end; procedure TfrmDiffer.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key:= 0; Close; end; end; procedure TfrmDiffer.FormResize(Sender: TObject); begin pnlLeft.Width:= (ClientWidth div 2) - (Splitter.Width div 2); end; procedure TfrmDiffer.btnCancelClick(Sender: TObject); begin FCancel:= True; if actBinaryCompare.Checked and Assigned(BinaryCompare) then BinaryCompare.Terminate else begin Diff.Cancel; end; CloseProgressDialog; end; procedure TfrmDiffer.tmProgressTimer(Sender: TObject); begin tmProgress.Enabled:= False; ShowProgressDialog; end; procedure TfrmDiffer.BinaryCompareFinish; begin BinaryCompare:= nil; if FCancel then begin if FShowIdentical then Free; Exit; end; BinaryDiffIndex:= -1; tmProgress.Enabled:= False; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := rsDiffModifies + IntToStr(BinaryDiffList.Count); StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; actStartCompare.Enabled := True; actCancelCompare.Enabled := False; actBinaryCompare.Enabled := True; if FShowIdentical then begin CloseProgressDialog; FShowIdentical:= (BinaryDiffList.Count = 0); if FShowIdentical then ShowIdentical else begin FShowIdentical:= False; Application.QueueAsyncCall(@ShowFirstDifference, 0); ShowDialog; end; end; end; procedure TfrmDiffer.ShowDialog; begin if FModal then ShowModal else if (FWaitData = nil) then ShowOnTop else FWaitData.ShowOnTop(Self); end; procedure TfrmDiffer.ShowIdentical; var Message: String; Encoding, LineBreak: Boolean; DlgType: TMsgDlgType = mtInformation; begin Message:= rsDiffFilesIdentical + LineEnding + LineEnding; Message+= ReplaceHome(edtFileNameLeft.Text) + LineEnding + ReplaceHome(edtFileNameRight.Text); if not actBinaryCompare.Checked then begin Encoding:= (SynDiffEditLeft.Encoding <> SynDiffEditRight.Encoding); LineBreak:= (SynDiffEditLeft.Lines.TextLineBreakStyle <> SynDiffEditRight.Lines.TextLineBreakStyle); if Encoding or LineBreak then begin DlgType:= mtWarning; Message:= rsDiffTextIdenticalNotMatch; if Encoding then begin Message+= LineEnding + rsDiffTextDifferenceEncoding + Format(' (%s, %s)', [SynDiffEditLeft.Encoding, SynDiffEditRight.Encoding]); end; if LineBreak then begin Message+= LineEnding + rsDiffTextDifferenceLineEnding; end; end else if actIgnoreCase.Checked or actIgnoreWhiteSpace.Checked then begin DlgType:= mtWarning; Message:= rsDiffTextIdentical; if actIgnoreCase.Checked then begin Message+= LineEnding + actIgnoreCase.Caption; end; if actIgnoreWhiteSpace.Checked then begin Message+= LineEnding + actIgnoreWhiteSpace.Caption; end; end; end; if MessageDlg(rsToolDiffer, Message, DlgType, [mbIgnore, mbCancel], 0, mbIgnore) = mrCancel then Close else begin FShowIdentical:= False; ShowDialog; end; end; procedure TfrmDiffer.ShowTextIdentical; var Message: String; begin Message:= rsDiffTextIdenticalNotMatch; if (SynDiffEditLeft.Encoding <> SynDiffEditRight.Encoding) then Message+= LineEnding + rsDiffTextDifferenceEncoding; if (SynDiffEditLeft.Lines.TextLineBreakStyle <> SynDiffEditRight.Lines.TextLineBreakStyle) then Message+= LineEnding + rsDiffTextDifferenceLineEnding; MessageDlg(rsToolDiffer, Message, mtWarning, [mbOK], 0, mbOK); end; procedure TfrmDiffer.ShowProgressDialog; var lblPrompt : TLabel; btnCancel : TBitBtn; pbProgress: TProgressBar; begin frmProgress := TModalDialog.CreateNew(nil, 0); with frmProgress do begin BorderStyle := bsDialog; Position := poOwnerFormCenter; AutoSize := True; Height := 120; ChildSizing.TopBottomSpacing := 8; ChildSizing.LeftRightSpacing := 8; Caption := Self.Caption; lblPrompt := TLabel.Create(frmProgress); with lblPrompt do begin Parent := frmProgress; Caption := rsDiffComparing; Top := 6; Left := 6; end; pbProgress:= TProgressBar.Create(frmProgress); with pbProgress do begin Parent := frmProgress; Style:= pbstMarquee; Left := 6; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth := Math.Max(280, Screen.Width div 4); end; btnCancel := TBitBtn.Create(frmProgress); with btnCancel do begin AutoSize := True; Parent := frmProgress; Kind := bkCancel; Cancel := True; OnClick:= @btnCancelClick; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, pbProgress); AnchorSide[akRight].Control := pbProgress; AnchorSide[akRight].Side := asrCenter; end; if FModal then ShowModal else if (FWaitData = nil) then ShowOnTop else FWaitData.ShowOnTop(frmProgress); end; end; procedure TfrmDiffer.CloseProgressDialog; begin if Assigned(frmProgress) then begin frmProgress.Close; FreeAndNil(frmProgress); end; end; procedure TfrmDiffer.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; // Save settings gDifferIgnoreCase := actIgnoreCase.Checked; gDifferAutoCompare := actAutoCompare.Checked; gDifferKeepScrolling := actKeepScrolling.Checked; gDifferPaintBackground := actPaintBackground.Checked; gDifferIgnoreWhiteSpace := actIgnoreWhiteSpace.Checked; if actLineDifferences.Enabled then begin gDifferLineDifferences := actLineDifferences.Checked; end; end; procedure TfrmDiffer.FormCloseQuery(Sender: TObject; var CanClose: boolean); var Result: TMyMsgResult; begin if SynDiffEditLeft.Modified then begin Result:= msgYesNoCancel(Format(rsMsgFileChangedSave, [edtFileNameLeft.FileName])); CanClose:= Result <> mmrCancel; if Result = mmrYes then actSaveLeft.Execute else if Result = mmrCancel then Exit; end; if SynDiffEditRight.Modified then begin Result:= msgYesNoCancel(Format(rsMsgFileChangedSave, [edtFileNameRight.FileName])); CanClose:= Result <> mmrCancel; if Result = mmrYes then actSaveRight.Execute else if Result = mmrCancel then Exit; end; end; procedure TfrmDiffer.Clear(bLeft, bRight: Boolean); begin if bLeft then begin SynDiffEditLeft.Lines.Clear; SetLength(HashListLeft, 0); end; if bRight then begin SynDiffEditRight.Lines.Clear; SetLength(HashListRight, 0); end; Diff.Clear; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := EmptyStr; StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; actStartCompare.Enabled := True; end; procedure TfrmDiffer.cm_CopyLeftToRight(const Params: array of string); var I, iStart, iFinish: Integer; begin I := SynDiffEditLeft.CaretY - 1; iStart:= SynDiffEditLeft.DiffBegin(I); iFinish:= SynDiffEditLeft.DiffEnd(I); if SynDiffEditLeft.Lines.Kind[iStart] <> ckAdd then begin for I:= iStart to iFinish do begin SynDiffEditRight.Lines[I]:= SynDiffEditLeft.Lines[I]; if SynDiffEditLeft.Lines.Kind[I] = ckDelete then begin SynDiffEditLeft.Lines.Kind[I]:= ckNone; SynDiffEditRight.Lines.SetKindAndNumber(I, ckNone, 0); end; end; end else begin for I:= iStart to iFinish do begin if SynDiffEditLeft.Lines[iStart] <> EmptyStr then begin SynDiffEditRight.Lines[iStart]:= SynDiffEditLeft.Lines[iStart]; Inc(iStart); end else begin SynDiffEditLeft.Lines.Delete(iStart); SynDiffEditRight.Lines.Delete(iStart); end; end; end; SynDiffEditLeft.Renumber; SynDiffEditRight.Renumber; end; procedure TfrmDiffer.cm_CopyRightToLeft(const Params: array of string); var I, iStart, iFinish: Integer; begin I := SynDiffEditRight.CaretY - 1; iStart:= SynDiffEditRight.DiffBegin(I); iFinish:= SynDiffEditRight.DiffEnd(I); if SynDiffEditLeft.Lines.Kind[iStart] <> ckDelete then begin for I:= iStart to iFinish do begin SynDiffEditLeft.Lines[I]:= SynDiffEditRight.Lines[I]; if SynDiffEditRight.Lines.Kind[I] = ckAdd then begin SynDiffEditRight.Lines.Kind[I]:= ckNone; SynDiffEditLeft.Lines.SetKindAndNumber(I, ckNone, 0); end; end; end else begin for I:= iStart to iFinish do begin if SynDiffEditRight.Lines[iStart] <> EmptyStr then begin SynDiffEditLeft.Lines[iStart]:= SynDiffEditRight.Lines[iStart]; Inc(iStart); end else begin SynDiffEditLeft.Lines.Delete(iStart); SynDiffEditRight.Lines.Delete(iStart); end; end; end; SynDiffEditLeft.Renumber; SynDiffEditRight.Renumber; end; procedure TfrmDiffer.cm_Find(const Params: array of string); begin if not actBinaryCompare.Checked then begin ShowSearchReplaceDialog(Self, SynDiffEditActive, cbUnchecked, FSearchOptions); end; end; procedure TfrmDiffer.cm_FindNext(const Params: array of string); begin if not actBinaryCompare.Checked then begin if gFirstTextSearch then begin FSearchOptions.Flags -= [ssoBackwards]; ShowSearchReplaceDialog(Self, SynDiffEditActive, cbUnchecked, FSearchOptions); end else if FSearchOptions.SearchText <> '' then begin DoSearchReplaceText(SynDiffEditActive, False, False, FSearchOptions); FSearchOptions.Flags -= [ssoEntireScope]; end; end; end; procedure TfrmDiffer.cm_FindPrev(const Params: array of string); begin if not actBinaryCompare.Checked then begin if gFirstTextSearch then begin FSearchOptions.Flags += [ssoBackwards]; ShowSearchReplaceDialog(Self, SynDiffEditActive, cbUnchecked, FSearchOptions); end else if FSearchOptions.SearchText <> '' then begin SynDiffEditActive.SelEnd := SynDiffEditActive.SelStart; DoSearchReplaceText(SynDiffEditActive, False, True, FSearchOptions); FSearchOptions.Flags -= [ssoEntireScope]; end; end; end; procedure TfrmDiffer.cm_FindReplace(const Params: array of string); begin if not actBinaryCompare.Checked then begin ShowSearchReplaceDialog(Self, SynDiffEditActive, cbChecked, FSearchOptions); end; end; procedure TfrmDiffer.cm_GotoLine(const Params: array of string); var P: TPoint; Value: String; NewTopLine: Integer; begin if not actBinaryCompare.Checked then begin if ShowInputQuery(rsEditGotoLineTitle, rsEditGotoLineQuery, Value) then begin P.X := 1; P.Y := GetDisplayNumber(StrToIntDef(Value, 1)); NewTopLine := P.Y - (SynDiffEditActive.LinesInWindow div 2); if NewTopLine < 1 then begin NewTopLine := 1; end; SynDiffEditActive.CaretXY := P; SynDiffEditActive.TopLine := NewTopLine; SynDiffEditActive.SetFocus; end; end; end; procedure TfrmDiffer.cm_Exit(const Params: array of string); begin Close; end; procedure TfrmDiffer.cm_FirstDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffList.Count > 0 then begin BinaryDiffIndex:= 0; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); end; end else begin // Start at first line Line := 0; if Line = SynDiffEditLeft.Lines.Count then Exit; // Skip unmodified lines Kind := ckNone; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); Inc(Line); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_LastDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffList.Count > 0 then begin BinaryDiffIndex:= BinaryDiffList.Count - 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); end; end else begin Line := SynDiffEditLeft.Lines.Count - 1; if Line = 0 then Exit; // Skip unmodified lines Kind := ckNone; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); // Find top line of previous difference Kind:= SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if (Line <> 0) then Inc(Line, 2); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_NextDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffIndex < BinaryDiffList.Count - 1 then begin BinaryDiffIndex:= BinaryDiffIndex + 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); end; end else begin Line := SynDiffEditLeft.CaretY - 1; if Line = SynDiffEditLeft.Lines.Count - 1 then Exit; // Skip lines with current difference type Kind := SynDiffEditLeft.Lines.Kind[Line]; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); if SynDiffEditLeft.Lines.Kind[Line] = ckNone then begin // Skip unmodified lines Kind := ckNone; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); end; Inc(Line); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_PrevDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffIndex > 0 then begin BinaryDiffIndex:= BinaryDiffIndex - 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); end; end else begin Line := SynDiffEditLeft.CaretY - 1; if Line = 0 then Exit; // Skip lines with current difference type Kind := SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if SynDiffEditLeft.Lines.Kind[Line] = ckNone then begin // Skip unmodified lines Kind := ckNone; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); end; // Find top line of previous difference Kind:= SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if (Line <> 0) then Inc(Line, 2); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_Reload(const Params: array of string); begin OpenFileLeft(edtFileNameLeft.FileName); OpenFileRight(edtFileNameRight.FileName); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.cm_SaveLeft(const Params: array of string); begin PushPop(FElevate); try SaveToFile(SynDiffEditLeft, edtFileNameLeft.FileName); finally PushPop(FElevate); end; end; procedure TfrmDiffer.cm_SaveRight(const Params: array of string); begin PushPop(FElevate); try SaveToFile(SynDiffEditRight, edtFileNameRight.FileName); finally PushPop(FElevate); end; end; constructor TfrmDiffer.Create(TheOwner: TComponent); var HMForm: THMForm; begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, actionList); HMForm := HotMan.Register(Self, HotkeysCategory); HMForm.RegisterActionList(actionList); end; destructor TfrmDiffer.Destroy; begin BinaryViewerLeft.SecondViewer:= nil; BinaryViewerRight.SecondViewer:= nil; HotMan.UnRegister(Self); inherited Destroy; if Assigned(FWaitData) then FWaitData.Done; end; procedure TfrmDiffer.AfterConstruction; begin inherited AfterConstruction; ToolBar.ImagesWidth:= gToolIconsSize; ToolBar.SetButtonSize(gToolIconsSize + ScaleX(6, 96), gToolIconsSize + ScaleY(6, 96)); end; procedure TfrmDiffer.BuildHashList(bLeft, bRight: Boolean); var S: String; I: Integer; begin if bLeft then begin FLeftLen:= 0; SetLength(HashListLeft, SynDiffEditLeft.Lines.Count); for I := 0 to SynDiffEditLeft.Lines.Count - 1 do begin S:= SynDiffEditLeft.Lines[I]; FLeftLen:= Max(FLeftLen, Length(S)); HashListLeft[I]:= Integer(HashString(S, actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; end; if bRight then begin FRightLen:= 0; SetLength(HashListRight, SynDiffEditRight.Lines.Count); for I := 0 to SynDiffEditRight.Lines.Count - 1 do begin S:= SynDiffEditRight.Lines[I]; FRightLen:= Max(FRightLen, Length(S)); HashListRight[I]:= Integer(HashString(S, actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; end; actLineDifferences.Enabled:= (FLeftLen < High(UInt16)) and (FRightLen < High(UInt16)); if not actLineDifferences.Enabled then actLineDifferences.Checked:= False; actStartCompare.Enabled := (Length(HashListLeft) > 0) and (Length(HashListRight) > 0); actCopyLeftToRight.Enabled := actStartCompare.Enabled; actCopyRightToLeft.Enabled := actStartCompare.Enabled; end; procedure TfrmDiffer.SetColors(cAdded, cDeleted, cModified: TColor); begin with SynDiffEditLeft do begin Colors.Added:= cAdded; Colors.Deleted:= cDeleted; Colors.Modified:= cModified; end; with SynDiffEditRight do begin Colors.Added:= cAdded; Colors.Deleted:= cDeleted; Colors.Modified:= cModified; end; SynDiffHighlighterLeft.UpdateColors; SynDiffHighlighterRight.UpdateColors; end; procedure TfrmDiffer.ChooseEncoding(SynDiffEdit: TSynDiffEdit); begin if SynDiffEdit = SynDiffEditLeft then begin ChooseEncoding(miEncodingLeft, SynDiffEdit.Encoding); ChooseEncoding(pmEncodingLeft.Items, SynDiffEdit.Encoding); end else begin ChooseEncoding(miEncodingRight, SynDiffEdit.Encoding); ChooseEncoding(pmEncodingRight.Items, SynDiffEdit.Encoding); end; end; function TfrmDiffer.GetDisplayNumber(LineNumber: Integer): Integer; var I: Integer; begin Result := 1; for I := 0 to SynDiffEditActive.Lines.Count - 1 do begin if SynDiffEditActive.Lines.Number[I] = LineNumber then begin Result := I + 1; Break; end; end; end; procedure TfrmDiffer.ChooseEncoding(MenuItem: TMenuItem; Encoding: String); var I: Integer; begin Encoding:= NormalizeEncoding(Encoding); for I:= 0 to MenuItem.Count - 1 do if SameText(NormalizeEncoding(MenuItem.Items[I].Caption), Encoding) then MenuItem.Items[I].Checked:= True; end; procedure TfrmDiffer.FillEncodingMenu(TheOwner: TMenuItem; MenuHandler: TNotifyEvent; GroupIndex: LongInt); var I: Integer; mi: TMenuItem; begin for I:= 0 to EncodingList.Count - 1 do begin mi:= TMenuItem.Create(TheOwner); mi.Caption:= EncodingList[I]; mi.RadioItem:= True; mi.GroupIndex:= GroupIndex; mi.OnClick:= MenuHandler; TheOwner.Add(mi); end; end; procedure TfrmDiffer.LoadFromFile(SynDiffEdit: TSynDiffEdit; const FileName: String); var AText: String; fsFileStream: TFileStreamUAC; begin try fsFileStream:= TFileStreamUAC.Create(FileName, fmOpenRead or fmShareDenyNone); try SetLength(AText, fsFileStream.Size); fsFileStream.Read(Pointer(AText)^, Length(AText)); if Length(SynDiffEdit.Encoding) = 0 then begin SynDiffEdit.Encoding:= DetectEncoding(AText); ChooseEncoding(SynDiffEdit); end; with SynDiffEdit do begin if (Encoding = EncodingUTF16LE) or (Encoding = EncodingUTF16BE) then begin AText:= Copy(AText, 3, MaxInt); // Skip BOM end; AText:= ConvertEncoding(AText, Encoding, EncodingUTF8); end; SynDiffEdit.Lines.Text:= AText; // Add empty line if needed if (Length(AText) > 0) and (AText[Length(AText)] in [#10, #13]) then SynDiffEdit.Lines.Add(EmptyStr); // Determine line break style SynDiffEdit.Lines.TextLineBreakStyle := GuessLineBreakStyle(AText); finally FreeAndNil(fsFileStream); end; except on E: Exception do begin E.Message:= E.Message + LineEnding + FileName; if FShowIdentical then raise; msgError(E.Message); end; end; end; procedure TfrmDiffer.SaveToFile(SynDiffEdit: TSynDiffEdit; const FileName: String); var AText: String; begin AText := EmptyStr; if (SynDiffEdit.Encoding = EncodingUTF16LE) then AText := UTF16LEBOM else if (SynDiffEdit.Encoding = EncodingUTF16BE) then begin AText := UTF16BEBOM end; with TStringListEx.Create do try Assign(SynDiffEdit.Lines); SkipLastLineBreak:= True; // remove fake lines RemoveFake; // restore encoding AText+= ConvertEncoding(Text, EncodingUTF8, SynDiffEdit.Encoding); finally Free; end; // save to file try with TFileStreamUAC.Create(FileName, fmCreate) do try WriteBuffer(Pointer(AText)^, Length(AText)); finally Free; end; SynDiffEdit.Modified:= False; // needed for the undo stack except on E: Exception do msgError(rsMsgErrSaveFile + ' ' + FileName + LineEnding + E.Message); end; end; procedure TfrmDiffer.OpenFileLeft(const FileName: String); begin PushPop(FElevate); try if not FileExistsUAC(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerLeft.FileName:= FileName end else begin Clear(True, False); LoadFromFile(SynDiffEditLeft, FileName); BuildHashList(True, False); SynDiffEditLeft.Repaint; end; finally PushPop(FElevate); end; end; procedure TfrmDiffer.OpenFileRight(const FileName: String); begin PushPop(FElevate); try if not FileExistsUAC(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerRight.FileName:= FileName end else begin Clear(False, True); LoadFromFile(SynDiffEditRight, FileName); BuildHashList(False, True); SynDiffEditRight.Repaint; end; finally PushPop(FElevate); end; end; procedure TfrmDiffer.SetEncodingLeft(Sender: TObject); begin SynDiffEditLeft.Encoding:= (Sender as TMenuItem).Caption; ChooseEncoding(miEncodingLeft, SynDiffEditLeft.Encoding); ChooseEncoding(pmEncodingLeft.Items, SynDiffEditLeft.Encoding); actReload.Execute; end; procedure TfrmDiffer.SetEncodingRight(Sender: TObject); begin SynDiffEditRight.Encoding:= (Sender as TMenuItem).Caption; ChooseEncoding(miEncodingRight, SynDiffEditRight.Encoding); ChooseEncoding(pmEncodingRight.Items, SynDiffEditRight.Encoding); actReload.Execute; end; procedure TfrmDiffer.SynDiffEditEnter(Sender: TObject); begin SynDiffEditActive:= (Sender as TSynDiffEdit); end; procedure TfrmDiffer.ShowFirstDifference(Data: PtrInt); begin cm_FirstDifference([]); end; procedure TfrmDiffer.SynDiffEditLeftStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin if (actKeepScrolling.Checked) and (ScrollLock = 0) and ((scTopLine in Changes) or (scLeftChar in Changes)) then try Inc(ScrollLock); while (SynDiffEditRight.PaintLock <> 0) do Sleep(1); SynDiffEditRight.TopLine:= SynDiffEditLeft.TopLine; SynDiffEditRight.LeftChar:= SynDiffEditLeft.LeftChar; finally Dec(ScrollLock); end; end; procedure TfrmDiffer.SynDiffEditRightStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin if (actKeepScrolling.Checked) and (ScrollLock = 0) and ((scTopLine in Changes) or (scLeftChar in Changes)) then try Inc(ScrollLock); while (SynDiffEditLeft.PaintLock <> 0) do Sleep(1); SynDiffEditLeft.TopLine:= SynDiffEditRight.TopLine; SynDiffEditLeft.LeftChar:= SynDiffEditRight.LeftChar; finally Dec(ScrollLock); end; end; procedure TfrmDiffer.CMThemeChanged(var Message: TLMessage); begin with gColors.Differ^ do begin BinaryViewerLeft.Modified:= ModifiedBinaryColor; BinaryViewerRight.Modified:= ModifiedBinaryColor; SetColors(AddedColor, DeletedColor, ModifiedColor); end; if not actBinaryCompare.Checked then begin SynDiffEditLeft.Repaint; SynDiffEditRight.Repaint; end else begin BinaryViewerLeft.Repaint; BinaryViewerRight.Repaint; end; end; initialization TFormCommands.RegisterCommandsForm(TfrmDiffer, HotkeysCategory, @rsHotkeyCategoryDiffer); end. doublecmd-1.1.30/src/fdiffer.lrj0000644000175000001440000002227715104114162015504 0ustar alexxusers{"version":1,"strings":[ {"hash":218671619,"name":"tfrmdiffer.caption","sourcebytes":[67,111,109,112,97,114,101,32,102,105,108,101,115],"value":"Compare files"}, {"hash":77966471,"name":"tfrmdiffer.btnleftencoding.hint","sourcebytes":[69,110,99,111,100,105,110,103],"value":"Encoding"}, {"hash":77966471,"name":"tfrmdiffer.btnrightencoding.hint","sourcebytes":[69,110,99,111,100,105,110,103],"value":"Encoding"}, {"hash":2805797,"name":"tfrmdiffer.mnufile.caption","sourcebytes":[38,70,105,108,101],"value":"&File"}, {"hash":2800388,"name":"tfrmdiffer.mnuedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":108726499,"name":"tfrmdiffer.mnuoptions.caption","sourcebytes":[38,79,112,116,105,111,110,115],"value":"&Options"}, {"hash":128649459,"name":"tfrmdiffer.mnuactions.caption","sourcebytes":[38,65,99,116,105,111,110,115],"value":"&Actions"}, {"hash":212198471,"name":"tfrmdiffer.mnuencoding.caption","sourcebytes":[69,110,38,99,111,100,105,110,103],"value":"En&coding"}, {"hash":2829268,"name":"tfrmdiffer.miencodingleft.caption","sourcebytes":[38,76,101,102,116],"value":"&Left"}, {"hash":45678068,"name":"tfrmdiffer.miencodingright.caption","sourcebytes":[38,82,105,103,104,116],"value":"&Right"}, {"hash":366789,"name":"tfrmdiffer.actsave.caption","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":366789,"name":"tfrmdiffer.actsave.hint","sourcebytes":[83,97,118,101],"value":"Save"}, {"hash":124639694,"name":"tfrmdiffer.actsaveas.caption","sourcebytes":[83,97,118,101,32,97,115,46,46,46],"value":"Save as..."}, {"hash":124639694,"name":"tfrmdiffer.actsaveas.hint","sourcebytes":[83,97,118,101,32,97,115,46,46,46],"value":"Save as..."}, {"hash":174352581,"name":"tfrmdiffer.actstartcompare.caption","sourcebytes":[67,111,109,112,97,114,101],"value":"Compare"}, {"hash":174352581,"name":"tfrmdiffer.actstartcompare.hint","sourcebytes":[67,111,109,112,97,114,101],"value":"Compare"}, {"hash":111958485,"name":"tfrmdiffer.actlastdifference.caption","sourcebytes":[76,97,115,116,32,68,105,102,102,101,114,101,110,99,101],"value":"Last Difference"}, {"hash":111958485,"name":"tfrmdiffer.actlastdifference.hint","sourcebytes":[76,97,115,116,32,68,105,102,102,101,114,101,110,99,101],"value":"Last Difference"}, {"hash":61628309,"name":"tfrmdiffer.actnextdifference.caption","sourcebytes":[78,101,120,116,32,68,105,102,102,101,114,101,110,99,101],"value":"Next Difference"}, {"hash":61628309,"name":"tfrmdiffer.actnextdifference.hint","sourcebytes":[78,101,120,116,32,68,105,102,102,101,114,101,110,99,101],"value":"Next Difference"}, {"hash":118545253,"name":"tfrmdiffer.actprevdifference.caption","sourcebytes":[80,114,101,118,105,111,117,115,32,68,105,102,102,101,114,101,110,99,101],"value":"Previous Difference"}, {"hash":118545253,"name":"tfrmdiffer.actprevdifference.hint","sourcebytes":[80,114,101,118,105,111,117,115,32,68,105,102,102,101,114,101,110,99,101],"value":"Previous Difference"}, {"hash":111729605,"name":"tfrmdiffer.actfirstdifference.caption","sourcebytes":[70,105,114,115,116,32,68,105,102,102,101,114,101,110,99,101],"value":"First Difference"}, {"hash":111729605,"name":"tfrmdiffer.actfirstdifference.hint","sourcebytes":[70,105,114,115,116,32,68,105,102,102,101,114,101,110,99,101],"value":"First Difference"}, {"hash":138116597,"name":"tfrmdiffer.actignorecase.caption","sourcebytes":[73,103,110,111,114,101,32,67,97,115,101],"value":"Ignore Case"}, {"hash":192359699,"name":"tfrmdiffer.actignorewhitespace.caption","sourcebytes":[73,103,110,111,114,101,32,66,108,97,110,107,115],"value":"Ignore Blanks"}, {"hash":77690103,"name":"tfrmdiffer.actkeepscrolling.caption","sourcebytes":[75,101,101,112,32,83,99,114,111,108,108,105,110,103],"value":"Keep Scrolling"}, {"hash":77089212,"name":"tfrmdiffer.actcancelcompare.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"}, {"hash":77089212,"name":"tfrmdiffer.actcancelcompare.hint","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"}, {"hash":167657765,"name":"tfrmdiffer.actbinarycompare.caption","sourcebytes":[66,105,110,97,114,121,32,77,111,100,101],"value":"Binary Mode"}, {"hash":76187108,"name":"tfrmdiffer.actpaintbackground.caption","sourcebytes":[80,97,105,110,116,32,66,97,99,107,103,114,111,117,110,100],"value":"Paint Background"}, {"hash":102067732,"name":"tfrmdiffer.actcopylefttoright.caption","sourcebytes":[67,111,112,121,32,66,108,111,99,107,32,82,105,103,104,116],"value":"Copy Block Right"}, {"hash":102067732,"name":"tfrmdiffer.actcopylefttoright.hint","sourcebytes":[67,111,112,121,32,66,108,111,99,107,32,82,105,103,104,116],"value":"Copy Block Right"}, {"hash":241300196,"name":"tfrmdiffer.actcopyrighttoleft.caption","sourcebytes":[67,111,112,121,32,66,108,111,99,107,32,76,101,102,116],"value":"Copy Block Left"}, {"hash":241300196,"name":"tfrmdiffer.actcopyrighttoleft.hint","sourcebytes":[67,111,112,121,32,66,108,111,99,107,32,76,101,102,116],"value":"Copy Block Left"}, {"hash":209023572,"name":"tfrmdiffer.actsaveleft.caption","sourcebytes":[83,97,118,101,32,76,101,102,116],"value":"Save Left"}, {"hash":209023572,"name":"tfrmdiffer.actsaveleft.hint","sourcebytes":[83,97,118,101,32,76,101,102,116],"value":"Save Left"}, {"hash":123561268,"name":"tfrmdiffer.actsaveright.caption","sourcebytes":[83,97,118,101,32,82,105,103,104,116],"value":"Save Right"}, {"hash":123561268,"name":"tfrmdiffer.actsaveright.hint","sourcebytes":[83,97,118,101,32,82,105,103,104,116],"value":"Save Right"}, {"hash":193738068,"name":"tfrmdiffer.actreload.caption","sourcebytes":[38,82,101,108,111,97,100],"value":"&Reload"}, {"hash":93074804,"name":"tfrmdiffer.actreload.hint","sourcebytes":[82,101,108,111,97,100],"value":"Reload"}, {"hash":131838302,"name":"tfrmdiffer.actopenleft.caption","sourcebytes":[79,112,101,110,32,76,101,102,116,46,46,46],"value":"Open Left..."}, {"hash":162756318,"name":"tfrmdiffer.actopenright.caption","sourcebytes":[79,112,101,110,32,82,105,103,104,116,46,46,46],"value":"Open Right..."}, {"hash":4710148,"name":"tfrmdiffer.actexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"}, {"hash":19140,"name":"tfrmdiffer.acteditcut.caption","sourcebytes":[67,117,116],"value":"Cut"}, {"hash":304761,"name":"tfrmdiffer.acteditcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"}, {"hash":5671589,"name":"tfrmdiffer.acteditpaste.caption","sourcebytes":[80,97,115,116,101],"value":"Paste"}, {"hash":78392485,"name":"tfrmdiffer.acteditdelete.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"}, {"hash":171665052,"name":"tfrmdiffer.acteditselectall.caption","sourcebytes":[83,101,108,101,99,116,32,38,65,108,108],"value":"Select &All"}, {"hash":2805828,"name":"tfrmdiffer.actfind.caption","sourcebytes":[38,70,105,110,100],"value":"&Find"}, {"hash":315460,"name":"tfrmdiffer.actfind.hint","sourcebytes":[70,105,110,100],"value":"Find"}, {"hash":73859572,"name":"tfrmdiffer.actfindnext.caption","sourcebytes":[70,105,110,100,32,110,101,120,116],"value":"Find next"}, {"hash":73859572,"name":"tfrmdiffer.actfindnext.hint","sourcebytes":[70,105,110,100,32,110,101,120,116],"value":"Find next"}, {"hash":97034739,"name":"tfrmdiffer.actfindprev.caption","sourcebytes":[70,105,110,100,32,112,114,101,118,105,111,117,115],"value":"Find previous"}, {"hash":97034739,"name":"tfrmdiffer.actfindprev.hint","sourcebytes":[70,105,110,100,32,112,114,101,118,105,111,117,115],"value":"Find previous"}, {"hash":147268901,"name":"tfrmdiffer.actfindreplace.caption","sourcebytes":[38,82,101,112,108,97,99,101],"value":"&Replace"}, {"hash":147269573,"name":"tfrmdiffer.actfindreplace.hint","sourcebytes":[82,101,112,108,97,99,101],"value":"Replace"}, {"hash":102945374,"name":"tfrmdiffer.actgotoline.caption","sourcebytes":[71,111,116,111,32,76,105,110,101,46,46,46],"value":"Goto Line..."}, {"hash":185950757,"name":"tfrmdiffer.actgotoline.hint","sourcebytes":[71,111,116,111,32,76,105,110,101],"value":"Goto Line"}, {"hash":363439,"name":"tfrmdiffer.acteditredo.caption","sourcebytes":[82,101,100,111],"value":"Redo"}, {"hash":363439,"name":"tfrmdiffer.acteditredo.hint","sourcebytes":[82,101,100,111],"value":"Redo"}, {"hash":378031,"name":"tfrmdiffer.acteditundo.caption","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":378031,"name":"tfrmdiffer.acteditundo.hint","sourcebytes":[85,110,100,111],"value":"Undo"}, {"hash":171783006,"name":"tfrmdiffer.actsaveleftas.caption","sourcebytes":[83,97,118,101,32,76,101,102,116,32,65,115,46,46,46],"value":"Save Left As..."}, {"hash":171783006,"name":"tfrmdiffer.actsaveleftas.hint","sourcebytes":[83,97,118,101,32,76,101,102,116,32,65,115,46,46,46],"value":"Save Left As..."}, {"hash":18171454,"name":"tfrmdiffer.actsaverightas.caption","sourcebytes":[83,97,118,101,32,82,105,103,104,116,32,65,115,46,46,46],"value":"Save Right As..."}, {"hash":18171454,"name":"tfrmdiffer.actsaverightas.hint","sourcebytes":[83,97,118,101,32,82,105,103,104,116,32,65,115,46,46,46],"value":"Save Right As..."}, {"hash":4691652,"name":"tfrmdiffer.actabout.caption","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":197494083,"name":"tfrmdiffer.actlinedifferences.caption","sourcebytes":[76,105,110,101,32,68,105,102,102,101,114,101,110,99,101,115],"value":"Line Differences"}, {"hash":250141125,"name":"tfrmdiffer.actautocompare.caption","sourcebytes":[65,117,116,111,32,67,111,109,112,97,114,101],"value":"Auto Compare"} ]} doublecmd-1.1.30/src/fdiffer.lfm0000644000175000001440000004724615104114162015476 0ustar alexxusersobject frmDiffer: TfrmDiffer Left = 237 Height = 369 Top = 142 Width = 760 Caption = 'Compare files' ClientHeight = 349 ClientWidth = 760 Menu = MainMenu OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnResize = FormResize SessionProperties = 'Height;Left;Top;Width;WindowState' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '2.2.0.4' object ToolBar: TToolBarAdv Left = 0 Height = 22 Top = 0 Width = 760 AutoSize = True ButtonHeight = 20 ButtonWidth = 20 Images = dmComData.ilEditorImages ParentShowHint = False ShowHint = True TabOrder = 0 object btnReload: TToolButton Left = 1 Top = 2 Action = actReload end object btnSave: TToolButton Left = 21 Top = 2 Action = actSave end object btnSaveAs: TToolButton Left = 41 Top = 2 Action = actSaveAs end object Divider1: TToolButton Left = 61 Height = 20 Top = 2 Style = tbsDivider end object btnCompare: TToolButton Left = 66 Top = 2 Action = actStartCompare end object btnCancelCompare: TToolButton Left = 86 Top = 2 Action = actCancelCompare end object Divider2: TToolButton Left = 106 Height = 20 Top = 2 Style = tbsDivider end object btnNext: TToolButton Left = 111 Top = 2 Action = actNextDifference end object btnPrev: TToolButton Left = 131 Top = 2 Action = actPrevDifference end object Divider3: TToolButton Left = 151 Height = 20 Top = 2 Style = tbsDivider end object btnLast: TToolButton Left = 156 Top = 2 Action = actLastDifference end object btnFirst: TToolButton Left = 176 Top = 2 Action = actFirstDifference end object Divider4: TToolButton Left = 196 Height = 20 Top = 2 Style = tbsDivider end object btnCopyRightToLeft: TToolButton Left = 201 Top = 2 Action = actCopyRightToLeft end object btnCopyLeftToRight: TToolButton Left = 221 Top = 2 Action = actCopyLeftToRight end object Divider5: TToolButton Left = 241 Height = 20 Top = 2 Style = tbsSeparator end object btnEditUndo: TToolButton Left = 249 Top = 2 Action = actEditUndo end object btnEditRedo: TToolButton Left = 269 Top = 2 Action = actEditRedo end end object pnlLeft: TPanel Left = 0 Height = 304 Top = 22 Width = 379 Align = alLeft BevelOuter = bvNone ClientHeight = 304 ClientWidth = 379 TabOrder = 1 object pnlLeftBox: TPanel Left = 0 Height = 23 Top = 0 Width = 379 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 23 ClientWidth = 379 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameLeft: TFileNameEdit AnchorSideLeft.Control = btnLeftEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 23 Top = 0 Width = 285 OnAcceptFileName = edtFileNameLeftAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object btnLeftEncoding: TSpeedButton AnchorSideLeft.Control = btnLeftSaveAs AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftBox AnchorSideBottom.Control = edtFileNameLeft AnchorSideBottom.Side = asrBottom Left = 46 Height = 23 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 44 OnClick = btnLeftEncodingClick end object btnLeftSave: TSpeedButton AnchorSideLeft.Control = pnlLeftBox AnchorSideTop.Control = pnlLeftBox AnchorSideBottom.Control = edtFileNameLeft AnchorSideBottom.Side = asrBottom Left = 0 Height = 23 Top = 0 Width = 23 Action = actSaveLeft Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 34 ShowCaption = False end object btnLeftSaveAs: TSpeedButton AnchorSideLeft.Control = btnLeftSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftBox AnchorSideBottom.Control = edtFileNameLeft AnchorSideBottom.Side = asrBottom Left = 23 Height = 23 Top = 0 Width = 23 Action = actSaveLeftAs Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 35 ShowCaption = False end end end object Splitter: TSplitter Left = 379 Height = 304 Top = 22 Width = 5 end object pnlRight: TPanel Left = 384 Height = 304 Top = 22 Width = 376 Align = alClient BevelOuter = bvNone ClientHeight = 304 ClientWidth = 376 TabOrder = 3 object pnlRightBox: TPanel Left = 0 Height = 23 Top = 0 Width = 376 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 23 ClientWidth = 376 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameRight: TFileNameEdit AnchorSideLeft.Control = btnRightEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 23 Top = 0 Width = 282 OnAcceptFileName = edtFileNameRightAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object btnRightEncoding: TSpeedButton AnchorSideLeft.Control = btnRightSaveAs AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightBox AnchorSideBottom.Control = edtFileNameRight AnchorSideBottom.Side = asrBottom Left = 46 Height = 23 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 44 OnClick = btnRightEncodingClick end object btnRightSave: TSpeedButton AnchorSideLeft.Control = pnlRightBox AnchorSideTop.Control = pnlRightBox AnchorSideBottom.Control = edtFileNameRight AnchorSideBottom.Side = asrBottom Left = 0 Height = 23 Top = 0 Width = 23 Action = actSaveRight Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 34 ShowCaption = False end object btnRightSaveAs: TSpeedButton AnchorSideLeft.Control = btnRightSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightBox AnchorSideBottom.Control = edtFileNameRight AnchorSideBottom.Side = asrBottom Left = 23 Height = 23 Top = 0 Width = 23 Action = actSaveRightAs Anchors = [akTop, akLeft, akBottom] Images = dmComData.ilEditorImages ImageIndex = 35 ShowCaption = False end end end object StatusBar: TStatusBar Left = 0 Height = 23 Top = 326 Width = 760 Panels = < item Width = 100 end item Width = 100 end item Width = 100 end item Width = 100 end> SimplePanel = False end object MainMenu: TMainMenu Images = dmComData.ilEditorImages Left = 88 Top = 136 object mnuFile: TMenuItem Caption = '&File' object miOpenLeft: TMenuItem Action = actOpenLeft OnClick = actOpenLeftExecute end object miOpenRight: TMenuItem Action = actOpenRight OnClick = actOpenRightExecute end object miReload: TMenuItem Action = actReload end object miDivider7: TMenuItem Caption = '-' end object miSaveLeft: TMenuItem Action = actSaveLeft end object miSaveRight: TMenuItem Action = actSaveRight end object miSaveLeftAs: TMenuItem Action = actSaveLeftAs OnClick = actSaveLeftAsExecute end object miSaveRightAs: TMenuItem Action = actSaveRightAs OnClick = actSaveRightAsExecute end object miDivider6: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExit end end object mnuEdit: TMenuItem Caption = '&Edit' object miEditUndo: TMenuItem Action = actEditUndo OnClick = actEditUndoExecute end object miEditRedo: TMenuItem Action = actEditRedo OnClick = actEditRedoExecute end object miDivider8: TMenuItem Caption = '-' end object miEditCut: TMenuItem Action = actEditCut OnClick = actEditCutExecute end object miEditCopy: TMenuItem Action = actEditCopy OnClick = actEditCopyExecute end object miEditPaste: TMenuItem Action = actEditPaste OnClick = actEditPasteExecute end object miEditDelete: TMenuItem Action = actEditDelete OnClick = actEditDeleteExecute end object miEditSelectAll: TMenuItem Action = actEditSelectAll OnClick = actEditSelectAllExecute end object miDivider11: TMenuItem Caption = '-' end object miFind: TMenuItem Action = actFind end object miFindNext: TMenuItem Action = actFindNext end object miFindPrev: TMenuItem Action = actFindPrev end object miFindReplace: TMenuItem Action = actFindReplace end object miGotoLine: TMenuItem Action = actGotoLine end end object mnuOptions: TMenuItem Caption = '&Options' object miAutoCompare: TMenuItem Action = actAutoCompare AutoCheck = True end object miDivider10: TMenuItem Caption = '-' end object miIgnoreWhiteSpace: TMenuItem Action = actIgnoreWhiteSpace AutoCheck = True end object miIgnoreCase: TMenuItem Action = actIgnoreCase AutoCheck = True end object miDivider4: TMenuItem Caption = '-' end object miPaintBackground: TMenuItem Action = actPaintBackground AutoCheck = True OnClick = actPaintBackgroundExecute end object miLineDifferences: TMenuItem Action = actLineDifferences AutoCheck = True end object miDivider3: TMenuItem Caption = '-' end object miBinaryCompare: TMenuItem Action = actBinaryCompare AutoCheck = True OnClick = actBinaryCompareExecute end object miKeepScrolling: TMenuItem Action = actKeepScrolling AutoCheck = True OnClick = actKeepScrollingExecute end end object mnuActions: TMenuItem Caption = '&Actions' object miStartCompare: TMenuItem Action = actStartCompare end object miCancelCompare: TMenuItem Action = actCancelCompare end object miDivider1: TMenuItem Caption = '-' end object miNextDiff: TMenuItem Action = actNextDifference end object miPrevDiff: TMenuItem Action = actPrevDifference end object miDivider2: TMenuItem Caption = '-' end object miFirstDiff: TMenuItem Action = actFirstDifference end object miLastDiff: TMenuItem Action = actLastDifference end object miDivider5: TMenuItem Caption = '-' end object miCopyLeftToRight: TMenuItem Action = actCopyLeftToRight end object miCopyRightToLeft: TMenuItem Action = actCopyRightToLeft end end object mnuEncoding: TMenuItem Caption = 'En&coding' object miEncodingLeft: TMenuItem Caption = '&Left' end object miEncodingRight: TMenuItem Caption = '&Right' end end object miAbout: TMenuItem Action = actAbout end end object ActionList: TActionList Images = dmComData.ilEditorImages Left = 24 Top = 136 object actSave: TAction Caption = 'Save' Hint = 'Save' ImageIndex = 2 OnExecute = actSaveExecute end object actSaveAs: TAction Caption = 'Save as...' Hint = 'Save as...' ImageIndex = 3 OnExecute = actSaveAsExecute end object actStartCompare: TAction Caption = 'Compare' Hint = 'Compare' ImageIndex = 36 OnExecute = actStartCompareExecute end object actLastDifference: TAction Caption = 'Last Difference' Hint = 'Last Difference' ImageIndex = 37 OnExecute = actExecute end object actNextDifference: TAction Caption = 'Next Difference' Hint = 'Next Difference' ImageIndex = 38 OnExecute = actExecute end object actPrevDifference: TAction Caption = 'Previous Difference' Hint = 'Previous Difference' ImageIndex = 39 OnExecute = actExecute end object actFirstDifference: TAction Caption = 'First Difference' Hint = 'First Difference' ImageIndex = 40 OnExecute = actExecute end object actIgnoreCase: TAction Category = 'Options' AutoCheck = True Caption = 'Ignore Case' DisableIfNoHandler = False OnExecute = actIgnoreCaseExecute end object actIgnoreWhiteSpace: TAction Category = 'Options' AutoCheck = True Caption = 'Ignore Blanks' DisableIfNoHandler = False OnExecute = actIgnoreCaseExecute end object actKeepScrolling: TAction AutoCheck = True Caption = 'Keep Scrolling' Checked = True OnExecute = actKeepScrollingExecute end object actCancelCompare: TAction Caption = 'Cancel' Enabled = False Hint = 'Cancel' ImageIndex = 41 OnExecute = actCancelCompareExecute end object actBinaryCompare: TAction Category = 'Options' AutoCheck = True Caption = 'Binary Mode' OnExecute = actBinaryCompareExecute end object actPaintBackground: TAction Category = 'Options' AutoCheck = True Caption = 'Paint Background' Checked = True OnExecute = actPaintBackgroundExecute end object actCopyLeftToRight: TAction Caption = 'Copy Block Right' Hint = 'Copy Block Right' ImageIndex = 43 OnExecute = actExecute end object actCopyRightToLeft: TAction Caption = 'Copy Block Left' Hint = 'Copy Block Left' ImageIndex = 42 OnExecute = actExecute end object actSaveLeft: TAction Caption = 'Save Left' Hint = 'Save Left' ImageIndex = 34 OnExecute = actExecute end object actSaveRight: TAction Caption = 'Save Right' Hint = 'Save Right' ImageIndex = 34 OnExecute = actExecute end object actReload: TAction Caption = '&Reload' Hint = 'Reload' ImageIndex = 17 OnExecute = actExecute end object actOpenLeft: TAction Caption = 'Open Left...' ImageIndex = 1 OnExecute = actOpenLeftExecute end object actOpenRight: TAction Caption = 'Open Right...' ImageIndex = 1 OnExecute = actOpenRightExecute end object actExit: TAction Caption = 'E&xit' ImageIndex = 12 OnExecute = actExecute end object actEditCut: TAction Category = 'Edit' Caption = 'Cut' ImageIndex = 5 OnExecute = actEditCutExecute end object actEditCopy: TAction Category = 'Edit' Caption = 'Copy' ImageIndex = 6 OnExecute = actEditCopyExecute end object actEditPaste: TAction Category = 'Edit' Caption = 'Paste' ImageIndex = 7 OnExecute = actEditPasteExecute end object actEditDelete: TAction Category = 'Edit' Caption = 'Delete' ImageIndex = 14 OnExecute = actEditDeleteExecute end object actEditSelectAll: TAction Category = 'Edit' Caption = 'Select &All' ImageIndex = 15 OnExecute = actEditSelectAllExecute end object actFind: TAction Category = 'Edit' Caption = '&Find' HelpType = htKeyword Hint = 'Find' ImageIndex = 10 OnExecute = actExecute end object actFindNext: TAction Category = 'Edit' Caption = 'Find next' Hint = 'Find next' OnExecute = actExecute end object actFindPrev: TAction Category = 'Edit' Caption = 'Find previous' Hint = 'Find previous' OnExecute = actExecute end object actFindReplace: TAction Category = 'Edit' Caption = '&Replace' HelpType = htKeyword Hint = 'Replace' ImageIndex = 11 OnExecute = actExecute end object actGotoLine: TAction Category = 'Edit' Caption = 'Goto Line...' Hint = 'Goto Line' ImageIndex = 16 OnExecute = actExecute end object actEditRedo: TAction Category = 'Edit' Caption = 'Redo' Hint = 'Redo' ImageIndex = 9 OnExecute = actEditRedoExecute end object actEditUndo: TAction Category = 'Edit' Caption = 'Undo' Hint = 'Undo' ImageIndex = 8 OnExecute = actEditUndoExecute end object actSaveLeftAs: TAction Caption = 'Save Left As...' Hint = 'Save Left As...' ImageIndex = 35 OnExecute = actSaveLeftAsExecute end object actSaveRightAs: TAction Caption = 'Save Right As...' Hint = 'Save Right As...' ImageIndex = 35 OnExecute = actSaveRightAsExecute end object actAbout: TAction Caption = 'About' OnExecute = actAboutExecute end object actLineDifferences: TAction Category = 'Options' AutoCheck = True Caption = 'Line Differences' OnExecute = actLineDifferencesExecute end object actAutoCompare: TAction Category = 'Options' AutoCheck = True Caption = 'Auto Compare' DisableIfNoHandler = False end end object ContextMenu: TPopupMenu Images = dmComData.ilEditorImages Left = 160 Top = 136 object miUndoContext: TMenuItem Action = actEditUndo OnClick = actEditUndoExecute end object miSeparator1: TMenuItem Caption = '-' end object miCutContext: TMenuItem Action = actEditCut OnClick = actEditCutExecute end object miCopyContext: TMenuItem Action = actEditCopy OnClick = actEditCopyExecute end object miPasteContext: TMenuItem Action = actEditPaste OnClick = actEditPasteExecute end object miDeleteContext: TMenuItem Action = actEditDelete OnClick = actEditDeleteExecute end object miSeparator2: TMenuItem Caption = '-' end object miSelectAllContext: TMenuItem Action = actEditSelectAll OnClick = actEditSelectAllExecute end end object pmEncodingLeft: TPopupMenu Left = 248 Top = 136 end object pmEncodingRight: TPopupMenu Left = 352 Top = 136 end object tmProgress: TTimer OnTimer = tmProgressTimer Left = 568 Top = 170 end end doublecmd-1.1.30/src/fdialogbox.pas0000644000175000001440000007214415104114162016207 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains realization of Dialog API functions. Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fDialogBox; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Types, Buttons, ExtCtrls, EditBtn, Extension, ComCtrls, DividerBevel, SynEdit; type { TDialogBox } TDialogBox = class(TForm) DialogTimer: TTimer; DialogButton: TButton; DialogBitBtn: TBitBtn; DialogFileNameEdit: TFileNameEdit; DialogDirectoryEdit: TDirectoryEdit; DialogComboBox: TComboBox; DialogListBox: TListBox; DialogCheckBox: TCheckBox; DialogGroupBox: TGroupBox; DialogLabel: TLabel; DialogPanel: TPanel; DialogEdit: TEdit; DialogMemo: TMemo; DialogImage: TImage; DialogSynEdit: TSynEdit; DialogTabSheet: TTabSheet; DialogScrollBox: TScrollBox; DialogRadioGroup: TRadioGroup; DialogPageControl: TPageControl; DialogProgressBar: TProgressBar; DialogDividerBevel: TDividerBevel; // Dialog events procedure DialogBoxShow(Sender: TObject); procedure DialogBoxClose(Sender: TObject; var CloseAction: TCloseAction); // Button events procedure ButtonClick(Sender: TObject); procedure ButtonEnter(Sender: TObject); procedure ButtonExit(Sender: TObject); procedure ButtonKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ButtonKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // ComboBox events procedure ComboBoxClick(Sender: TObject); procedure ComboBoxDblClick(Sender: TObject); procedure ComboBoxChange(Sender: TObject); procedure ComboBoxEnter(Sender: TObject); procedure ComboBoxExit(Sender: TObject); procedure ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // Edit events procedure EditClick(Sender: TObject); procedure EditDblClick(Sender: TObject); procedure EditChange(Sender: TObject); procedure EditEnter(Sender: TObject); procedure EditExit(Sender: TObject); procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // ListBox events procedure ListBoxClick(Sender: TObject); procedure ListBoxDblClick(Sender: TObject); procedure ListBoxSelectionChange(Sender: TObject; User: boolean); procedure ListBoxEnter(Sender: TObject); procedure ListBoxExit(Sender: TObject); procedure ListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ListBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // CheckBox events procedure CheckBoxChange(Sender: TObject); // Timer events procedure TimerTimer(Sender: TObject); private FRect: TRect; FText: String; FSelf: UIntPtr; FLRSData: String; FResult: LongBool; FDlgProc: TDlgProc; FTranslator: TAbstractTranslator; protected procedure ShowDialogBox; procedure ProcessResource; override; function InitResourceComponent(Instance: TComponent; RootAncestor: TClass): Boolean; public constructor Create(const LRSData: String; DlgProc: TDlgProc); reintroduce; destructor Destroy; override; end; function InputBox(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; dcpcall; function MessageBox(Text, Caption: PAnsiChar; Flags: Longint): Integer; dcpcall; function MsgChoiceBox(Text, Caption: PAnsiChar; Buttons: PPAnsiChar; BtnDef, BtnEsc: Integer): Integer; dcpcall; function DialogBoxLFM(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; function DialogBoxLRS(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; function DialogBoxLFMFile(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; dcpcall; function DialogBoxParam(Data: Pointer; DataSize: LongWord; DlgProc: TDlgProc; Flags: UInt32; UserData, Reserved: Pointer): UIntPtr; dcpcall; function SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; implementation uses LCLStrConsts, LazFileUtils, DCClassesUtf8, DCOSUtils, DCStrUtils, uShowMsg, uDebug, uTranslator, uGlobs, uFileProcs; type TControlProtected = class(TControl); function InputBox(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; dcpcall; var sValue: String; begin sValue:= StrPas(Value); Result:= ShowInputQuery(Caption, Prompt, MaskInput, sValue); if Result then StrLCopy(Value, PAnsiChar(sValue), ValueMaxLen); end; function MessageBox(Text, Caption: PAnsiChar; Flags: Longint): Integer; dcpcall; begin Result:= ShowMessageBox(Text, Caption, Flags); end; function MsgChoiceBox(Text, Caption: PAnsiChar; Buttons: PPAnsiChar; BtnDef, BtnEsc: Integer): Integer; dcpcall; var AButtons: TStringArray; begin AButtons:= Default(TStringArray); while (Buttons^ <> nil) do begin AddString(AButtons, Buttons^); Inc(Buttons); end; Result:= uShowMsg.MsgChoiceBox(nil, Text, Caption, AButtons, BtnDef, BtnEsc); end; function LFMToLRS(const LFMData: String): String; var LFMStream: TStringStream = nil; LRSStream: TStringStream = nil; begin try LRSStream:= TStringStream.Create(''); LFMStream:= TStringStream.Create(LFMData); LRSObjectTextToBinary(LFMStream, LRSStream); Result:= LRSStream.DataString; finally FreeAndNil(LFMStream); FreeAndNil(LRSStream); end; end; function DialogBox(const LRSData: String; DlgProc: TDlgProc; UserData: Pointer): LongBool; var Dialog: TDialogBox; Data: PtrInt absolute UserData; begin Dialog:= TDialogBox.Create(LRSData, DlgProc); try with Dialog do begin Tag:= Data; TThread.Synchronize(nil, @ShowDialogBox); Result:= FResult; end; finally FreeAndNil(Dialog); end; end; function DialogBoxLFM(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; var DataString: String; begin if Assigned(LFMData) and (DataSize > 0) then begin SetString(DataString, LFMData, DataSize); Result := DialogBox(LFMToLRS(DataString), DlgProc, nil); end else Result := False; end; function DialogBoxLRS(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; var DataString: String; begin if Assigned(LRSData) and (DataSize > 0) then begin SetString(DataString, LRSData, DataSize); Result := DialogBox(DataString, DlgProc, nil); end else Result := False; end; function DialogBoxLFMFile(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; dcpcall; var DataString: String; begin if (lfmFileName = nil) then Result := False else begin DataString := mbReadFileToString(lfmFileName); Result := DialogBox(LFMToLRS(DataString), DlgProc, nil); end; end; function DialogBoxParam(Data: Pointer; DataSize: LongWord; DlgProc: TDlgProc; Flags: UInt32; UserData, Reserved: Pointer): UIntPtr; dcpcall; var DataString: String; begin if (Data = nil) then Exit(0); if (DataSize = 0) then Exit(0); SetString(DataString, Data, DataSize); if (Flags and DB_FILENAME <> 0) then begin DataString:= LFMToLRS(mbReadFileToString(DataString)); end else if (Flags and DB_LRS = 0) then begin DataString:= LFMToLRS(DataString); end; Result:= UIntPtr(DialogBox(DataString, DlgProc, UserData)); end; function SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Key: Word; AText: String; Component: TComponent; lText: PAnsiChar absolute lParam; wText: PAnsiChar absolute wParam; pResult: Pointer absolute Result; DialogBox: TDialogBox absolute pDlg; Control: TControl absolute Component; begin // find component by name if (DlgItemName = nil) then Component:= DialogBox else begin Component:= DialogBox.FindComponent(DlgItemName); if (Component = nil) then Exit(-1); end; // process message case Msg of DM_CLOSE: begin DialogBox.Close; if wParam <> -1 then DialogBox.ModalResult:= wParam; end; DM_ENABLE: begin if (Component is TTimer) then begin Result:= PtrInt(TTimer(Component).Enabled); if wParam <> -1 then TTimer(Component).Enabled:= Boolean(wParam); end else begin Result:= PtrInt(Control.Enabled); if wParam <> -1 then Control.Enabled:= Boolean(wParam); end; end; DM_GETCHECK: begin if Control is TCheckBox then Result:= PtrInt((Control as TCheckBox).State); if Control is TRadioButton then Result := PtrInt((Control as TRadioButton).Checked); end; DM_GETDLGBOUNDS: begin with DialogBox do begin FRect.Left:= DialogBox.Left; FRect.Top:= DialogBox.Top; FRect.Right:= DialogBox.Left + DialogBox.Width; FRect.Bottom:= DialogBox.Top + DialogBox.Height; pResult:= @FRect; end; end; DM_GETDLGDATA: begin Result:= DialogBox.Tag; end; DM_GETDROPPEDDOWN: begin if Control is TComboBox then Result:= PtrInt((Control as TComboBox).DroppedDown); end; DM_GETITEMBOUNDS: begin with DialogBox do begin FRect.Left:= Control.Left; FRect.Top:= Control.Top; FRect.Right:= Control.Left + Control.Width; FRect.Bottom:= Control.Top + Control.Height; pResult:= @FRect; end; end; DM_GETITEMDATA: begin Result:= Control.Tag; end; DM_LISTADD: begin AText:= StrPas(wText); if Control is TComboBox then Result:= TComboBox(Control).Items.AddObject(AText, TObject(lText)) else if Control is TListBox then Result:= TListBox(Control).Items.AddObject(AText, TObject(lText)) else if Control is TMemo then Result:= TMemo(Control).Lines.AddObject(AText, TObject(lText)) else if Control is TSynEdit then Result:= TSynEdit(Control).Lines.AddObject(AText, TObject(lText)); end; DM_LISTADDSTR: begin AText:= StrPas(wText); if Control is TComboBox then Result:= TComboBox(Control).Items.Add(AText) else if Control is TListBox then Result:= TListBox(Control).Items.Add(AText) else if Control is TMemo then Result:= TMemo(Control).Lines.Add(AText) else if Control is TSynEdit then Result:= TSynEdit(Control).Lines.Add(AText); end; DM_LISTDELETE: begin if Control is TComboBox then TComboBox(Control).Items.Delete(wParam) else if Control is TListBox then TListBox(Control).Items.Delete(wParam) else if Control is TMemo then TMemo(Control).Lines.Delete(wParam) else if Control is TSynEdit then TSynEdit(Control).Lines.Delete(wParam); end; DM_LISTINDEXOF: begin AText:= StrPas(lText); if Control is TComboBox then Result:= TComboBox(Control).Items.IndexOf(AText) else if Control is TListBox then Result:= TListBox(Control).Items.IndexOf(AText) else if Control is TMemo then Result:= TMemo(Control).Lines.IndexOf(AText) else if Control is TSynEdit then Result:= TSynEdit(Control).Lines.IndexOf(AText); end; DM_LISTINSERT: begin AText:= StrPas(lText); if Control is TComboBox then TComboBox(Control).Items.Insert(wParam, AText) else if Control is TListBox then TListBox(Control).Items.Insert(wParam, AText) else if Control is TMemo then TMemo(Control).Lines.Insert(wParam, AText) else if Control is TSynEdit then TSynEdit(Control).Lines.Insert(wParam, AText); end; DM_LISTGETCOUNT: begin if Control is TComboBox then Result:= TComboBox(Control).Items.Count else if Control is TListBox then Result:= TListBox(Control).Items.Count else if Control is TMemo then Result:= TMemo(Control).Lines.Count else if Control is TSynEdit then Result:= TSynEdit(Control).Lines.Count; end; DM_LISTGETDATA: begin if Control is TComboBox then Result:= PtrInt(TComboBox(Control).Items.Objects[wParam]) else if Control is TListBox then Result:= PtrInt(TListBox(Control).Items.Objects[wParam]) else if Control is TMemo then Result:= PtrInt(TMemo(Control).Lines.Objects[wParam]) else if Control is TSynEdit then Result:= PtrInt(TSynEdit(Control).Lines.Objects[wParam]); end; DM_LISTGETITEM: begin with DialogBox do begin if Control is TComboBox then FText:= TComboBox(Control).Items[wParam] else if Control is TListBox then FText:= TListBox(Control).Items[wParam] else if Control is TMemo then FText:= TMemo(Control).Lines[wParam] else if Control is TSynEdit then FText:= TSynEdit(Control).Lines[wParam]; pResult:= PAnsiChar(FText); end; end; DM_LISTGETITEMINDEX: begin Result:= -1; if Control is TComboBox then Result:= TComboBox(Control).ItemIndex else if Control is TListBox then Result:= TListBox(Control).ItemIndex else if Control is TRadioGroup then Result:= TRadioGroup(Control).ItemIndex; end; DM_LISTSETITEMINDEX: begin if Control is TComboBox then TComboBox(Control).ItemIndex:= wParam else if Control is TListBox then TListBox(Control).ItemIndex:= wParam else if Control is TRadioGroup then TRadioGroup(Control).ItemIndex:= wParam; end; DM_LISTUPDATE: begin AText:= StrPas(lText); if Control is TComboBox then TComboBox(Control).Items[wParam]:= AText else if Control is TListBox then TListBox(Control).Items[wParam]:= AText else if Control is TMemo then TMemo(Control).Lines[wParam]:= AText else if Control is TSynEdit then TSynEdit(Control).Lines[wParam]:= AText; end; DM_LISTCLEAR: begin if Control is TComboBox then TComboBox(Control).Clear else if Control is TListBox then TListBox(Control).Clear else if Control is TMemo then TMemo(Control).Clear else if Control is TSynEdit then TSynEdit(Control).Clear; end; DM_GETTEXT: begin with DialogBox do begin if Control is TButton then FText:= TButton(Control).Caption else if Control is TComboBox then FText:= TComboBox(Control).Text else if Control is TCheckBox then FText:= TCheckBox(Control).Caption else if Control is TMemo then FText:= TMemo(Control).Text else if Control is TEdit then FText:= TEdit(Control).Text else if Control is TGroupBox then FText:= TGroupBox(Control).Caption else if Control is TLabel then FText:= TLabel(Control).Caption else if Control is TFileNameEdit then FText:= TFileNameEdit(Control).Text else begin FText:= TControlProtected(Control).Text end; pResult:= PAnsiChar(FText); end; end; DM_KEYDOWN: begin Key:= wParam; DialogBox.KeyDown(Key, GetKeyShiftState); Result:= Key; end; DM_KEYUP: begin Key:= wParam; DialogBox.KeyUp(Key, GetKeyShiftState); Result:= Key; end; DM_REDRAW: begin DialogBox.Repaint; end; DM_SETCHECK: begin if Control is TCheckBox then begin Result:= PtrInt((Control as TCheckBox).State); (Control as TCheckBox).State:= TCheckBoxState(wParam) end; if Control is TRadioButton then begin Result := PtrInt((Control as TRadioButton).Checked); (Control as TRadioButton).Checked:= Boolean(wParam); end; end; DM_LISTSETDATA: begin if Control is TComboBox then TComboBox(Control).Items.Objects[wParam]:= TObject(lText) else if Control is TListBox then TListBox(Control).Items.Objects[wParam]:= TObject(lText) else if Control is TMemo then TMemo(Control).Lines.Objects[wParam]:= TObject(lText) else if Control is TSynEdit then TSynEdit(Control).Lines.Objects[wParam]:= TObject(lText); end; DM_SETDLGBOUNDS: begin with DialogBox do begin FRect:= PRect(wText)^; DialogBox.Left:= FRect.Left; DialogBox.Top:= FRect.Top; DialogBox.Width:= FRect.Right - FRect.Left; DialogBox.Height:= FRect.Bottom - FRect.Top; end; end; DM_SETDLGDATA: begin Result:= DialogBox.Tag; DialogBox.Tag:= wParam; end; DM_SETDROPPEDDOWN: begin if Control is TComboBox then (Control as TComboBox).DroppedDown:= Boolean(wParam); end; DM_SETFOCUS: begin if Control.Visible then (Control as TWinControl).SetFocus; end; DM_SETITEMBOUNDS: begin with DialogBox do begin FRect:= PRect(wText)^; Control.Left:= FRect.Left; Control.Top:= FRect.Top; Control.Width:= FRect.Right - FRect.Left; Control.Height:= FRect.Bottom - FRect.Top; end; end; DM_SETITEMDATA: begin Control.Tag:= wParam; end; DM_SETMAXTEXTLENGTH: begin Result:= -1; if Control is TComboBox then begin Result:= (Control as TComboBox).MaxLength; (Control as TComboBox).MaxLength:= wParam; end; if Control is TEdit then begin Result:= (Control as TEdit).MaxLength; (Control as TEdit).MaxLength:= wParam; end; end; DM_SETTEXT: begin AText:= StrPas(wText); if Control is TButton then TButton(Control).Caption:= AText else if Control is TComboBox then TComboBox(Control).Text:= AText else if Control is TCheckBox then TCheckBox(Control).Caption:= AText else if Control is TMemo then TMemo(Control).Text:= AText else if Control is TEdit then TEdit(Control).Text:= AText else if Control is TGroupBox then TGroupBox(Control).Caption:= AText else if Control is TLabel then TLabel(Control).Caption:= AText else if Control is TFileNameEdit then TFileNameEdit(Control).Text:= AText else begin TControlProtected(Control).Text:= AText; end; end; DM_SHOWDIALOG: begin if wParam = 0 then DialogBox.Hide; if wParam = 1 then DialogBox.Show; end; DM_SHOWITEM: begin Result:= PtrInt(Control.Visible); if wParam <> -1 then Control.Visible:= Boolean(wParam); end; DM_SETPROGRESSVALUE: begin if (Control is TProgressBar) then begin TProgressBar(Control).Position:= wParam; end; end; DM_SETPROGRESSSTYLE: begin if (Control is TProgressBar) then begin TProgressBar(Control).Style:= TProgressBarStyle(wParam); end; end; DM_SETPASSWORDCHAR: begin if (Control is TCustomEdit) then begin TCustomEdit(Control).PasswordChar:= Char(wParam); end; end; DM_TIMERSETINTERVAL: begin if (Component is TTimer) then begin TTimer(Component).Interval:= wParam; end; end; end; end; { TDialogBox } procedure TDialogBox.ShowDialogBox; begin FResult:= (ShowModal = mrOK); end; procedure TDialogBox.ProcessResource; begin if not InitResourceComponent(Self, TForm) then if RequireDerivedFormResource then raise EResNotFound.CreateFmt(rsFormResourceSNotFoundForResourcelessFormsCreateNew, [ClassName]) else DCDebug(Format(rsFormResourceSNotFoundForResourcelessFormsCreateNew, [ClassName])); end; function TDialogBox.InitResourceComponent(Instance: TComponent; RootAncestor: TClass): Boolean; function InitComponent(ClassType: TClass): Boolean; var Stream: TStream; Reader: TReader; DestroyDriver: Boolean; Driver: TAbstractObjectReader; begin Result := False; if (ClassType = TComponent) or (ClassType = RootAncestor) then Exit; if Assigned(ClassType.ClassParent) then Result := InitComponent(ClassType.ClassParent); Stream := TStringStream.Create(FLRSData); try //DCDebug('Form Stream "', ClassType.ClassName, '"'); DestroyDriver := False; Reader := CreateLRSReader(Stream, DestroyDriver); if Assigned(FTranslator) then begin Reader.OnReadStringProperty:= @FTranslator.TranslateStringProperty; end; try Reader.ReadRootComponent(Instance); finally Driver := Reader.Driver; Reader.Free; if DestroyDriver then Driver.Free; end; finally Stream.Free; end; Result := True; end; begin if Instance.ComponentState * [csLoading, csInline] <> [] then begin // global loading not needed Result := InitComponent(Instance.ClassType); end else try BeginGlobalLoading; Result := InitComponent(Instance.ClassType); NotifyGlobalLoading; finally EndGlobalLoading; end; end; constructor TDialogBox.Create(const LRSData: String; DlgProc: TDlgProc); var Path: String; Language: String; FileName: String; begin FLRSData:= LRSData; FDlgProc:= DlgProc; FSelf:= UIntPtr(Self); FileName:= mbGetModuleName(DlgProc); Path:= ExtractFilePath(FileName) + 'language' + PathDelim; Language:= ExtractFileExt(ExtractFileNameOnly(gPOFileName)); FileName:= Path + ExtractFileNameOnly(FileName) + Language + '.po'; if mbFileExists(FileName) then FTranslator:= TTranslator.Create(FileName); inherited Create(Screen.ActiveForm); end; destructor TDialogBox.Destroy; begin inherited Destroy; FTranslator.Free; end; procedure TDialogBox.DialogBoxShow(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_INITDIALOG,0,0); end; procedure TDialogBox.DialogBoxClose(Sender: TObject; var CloseAction: TCloseAction); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CLOSE, 0, 0); end; procedure TDialogBox.ButtonClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.ButtonEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ButtonExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ButtonKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYDOWN, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ButtonKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ComboBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CLICK,PtrInt((Sender as TComboBox).ItemIndex),0); end; procedure TDialogBox.ComboBoxDblClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_DBLCLICK,PtrInt((Sender as TComboBox).ItemIndex),0); end; procedure TDialogBox.ComboBoxChange(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TComboBox).ItemIndex),0); end; end; procedure TDialogBox.ComboBoxEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ComboBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYDOWN, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.EditClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.EditDblClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_DBLCLICK,0,0); end; procedure TDialogBox.EditChange(Sender: TObject); var sText: String; begin if Assigned(fDlgProc) then begin sText:= (Sender as TEdit).Text; fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt(PAnsiChar(sText)), 0); end; end; procedure TDialogBox.EditEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.EditExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYDOWN, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ListBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CLICK, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxDblClick(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_DBLCLICK, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxSelectionChange(Sender: TObject; User: boolean); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ListBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYDOWN, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.ListBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_KEYUP, PtrInt(@Key), Integer(Shift)); end; procedure TDialogBox.CheckBoxChange(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TCheckBox).Checked),0); end; end; procedure TDialogBox.TimerTimer(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(FSelf, PAnsiChar((Sender as TTimer).Name), DN_TIMER, 0, 0); end; end; end. doublecmd-1.1.30/src/fdescredit.pas0000644000175000001440000001117615104114162016203 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Dialog for editing file comments. Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fDescrEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, ActnList, uDescr, uFormCommands, KASButtonPanel, uFileView; type { TfrmDescrEdit } TfrmDescrEdit = class(TForm, IFormCommands) actSaveDescription: TAction; ActionList: TActionList; btnOK: TBitBtn; btnCancel: TBitBtn; cbEncoding: TStaticText; KASButtonPanel: TKASButtonPanel; lblFileName: TLabel; lblEncoding: TLabel; lblEditCommentFor: TLabel; memDescr: TMemo; procedure actExecute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure memDescrKeyDown(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); private FDescr: TDescription; FCommands: TFormCommands; procedure DisplayEncoding; property Commands: TFormCommands read FCommands implements IFormCommands; public constructor Create(TheOwner: TComponent); override; published procedure cm_SaveDescription(const {%H-}Params: array of string); end; function ShowDescrEditDlg(const sFileName: String; FileView: TFileView): Boolean; implementation {$R *.lfm} uses TypInfo, LCLType, LConvEncoding, DCStrUtils, uHotkeyManager, uLng, uGlobs, uFileSystemFileSource, uConvEncoding; const HotkeysCategory = 'Edit Comment Dialog'; function ShowDescrEditDlg(const sFileName: String; FileView: TFileView): Boolean; const nbsp = #194#160; var FileSystem: Boolean; begin Result:= False; FileSystem:= FileView.FileSource.IsClass(TFileSystemFileSource); with TfrmDescrEdit.Create(Application) do try if not FileSystem then FDescr:= TDescription.Create(False) else begin FDescr:= (FileView.FileSource as TFileSystemFileSource).Description; FDescr.Reset; end; lblFileName.Caption:= sFileName; // Read description memDescr.Lines.Text:= StringReplace(FDescr.ReadDescription(sFileName), nbsp, LineEnding, [rfReplaceAll]); DisplayEncoding; if ShowModal = mrOK then begin if Length(memDescr.Lines.Text) = 0 then FDescr.DeleteDescription(sFileName) else begin FDescr.WriteDescription(sFileName, StringReplace(memDescr.Lines.Text, LineEnding, nbsp, [rfReplaceAll])); end; FDescr.SaveDescription; FileView.Reload(True); Result:= True; end; if not FileSystem then FDescr.Free; finally Free; end; end; { TfrmDescrEdit } procedure TfrmDescrEdit.FormCreate(Sender: TObject); var HMForm: THMForm; Hotkey: THotkey; begin // Initialize property storage InitPropStorage(Self); HMForm := HotMan.Register(Self, HotkeysCategory); Hotkey := HMForm.Hotkeys.FindByCommand('cm_SaveDescription'); if Assigned(Hotkey) then btnOK.Caption := btnOK.Caption + ' (' + ShortcutsToText(Hotkey.Shortcuts) + ')'; end; procedure TfrmDescrEdit.FormDestroy(Sender: TObject); begin HotMan.UnRegister(Self); end; procedure TfrmDescrEdit.memDescrKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then ModalResult:= btnCancel.ModalResult; end; procedure TfrmDescrEdit.DisplayEncoding; begin cbEncoding.Caption:= Copy(GetEnumName(System.TypeInfo(TMacroEncoding), Ord(FDescr.Encoding)), 3 , MaxInt); end; constructor TfrmDescrEdit.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, actionList); end; procedure TfrmDescrEdit.cm_SaveDescription(const Params: array of string); begin ModalResult:= btnOK.ModalResult; end; procedure TfrmDescrEdit.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; initialization TFormCommands.RegisterCommandsForm(TfrmDescrEdit, HotkeysCategory, @rsHotkeyCategoryEditCommentDialog); end. doublecmd-1.1.30/src/fdescredit.lrj0000644000175000001440000000174715104114162016212 0ustar alexxusers{"version":1,"strings":[ {"hash":25983908,"name":"tfrmdescredit.caption","sourcebytes":[70,105,108,101,47,102,111,108,100,101,114,32,99,111,109,109,101,110,116],"value":"File/folder comment"}, {"hash":127690170,"name":"tfrmdescredit.lbleditcommentfor.caption","sourcebytes":[69,38,100,105,116,32,99,111,109,109,101,110,116,32,102,111,114,58],"value":"E&dit comment for:"}, {"hash":173566186,"name":"tfrmdescredit.lblencoding.caption","sourcebytes":[38,69,110,99,111,100,105,110,103,58],"value":"&Encoding:"}, {"hash":17199,"name":"tfrmdescredit.lblfilename.caption","sourcebytes":[63,63,63],"value":"???"}, {"hash":11067,"name":"tfrmdescredit.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmdescredit.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":4783918,"name":"tfrmdescredit.actsavedescription.caption","sourcebytes":[83,97,118,101,32,68,101,115,99,114,105,112,116,105,111,110],"value":"Save Description"} ]} doublecmd-1.1.30/src/fdescredit.lfm0000644000175000001440000000740515104114162016176 0ustar alexxusersobject frmDescrEdit: TfrmDescrEdit Left = 290 Height = 300 Top = 175 Width = 400 ActiveControl = memDescr BorderIcons = [biSystemMenu, biMaximize] Caption = 'File/folder comment' ClientHeight = 300 ClientWidth = 400 Constraints.MinHeight = 300 Constraints.MinWidth = 400 OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;WindowState;Width' LCLVersion = '2.0.4.0' object lblEditCommentFor: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 12 Height = 15 Top = 12 Width = 96 BorderSpacing.Left = 12 BorderSpacing.Top = 12 Caption = 'E&dit comment for:' FocusControl = memDescr ParentColor = False end object lblEncoding: TLabel AnchorSideLeft.Control = memDescr AnchorSideTop.Side = asrCenter AnchorSideBottom.Control = cbEncoding AnchorSideBottom.Side = asrCenter Left = 12 Height = 15 Top = 252 Width = 53 Anchors = [akLeft, akBottom] Caption = '&Encoding:' ParentColor = False end object lblFileName: TLabel AnchorSideLeft.Control = lblEditCommentFor AnchorSideTop.Control = lblEditCommentFor AnchorSideTop.Side = asrBottom Left = 12 Height = 15 Top = 33 Width = 15 BorderSpacing.Top = 6 Caption = '???' Font.Style = [fsBold] ParentColor = False ParentFont = False end object memDescr: TMemo AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = KASButtonPanel Left = 12 Height = 184 Top = 56 Width = 376 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 12 BorderSpacing.Top = 8 BorderSpacing.Right = 12 BorderSpacing.Bottom = 12 OnKeyDown = memDescrKeyDown TabOrder = 0 end object KASButtonPanel: TKASButtonPanel AnchorSideRight.Control = memDescr AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 226 Height = 41 Top = 273 Width = 207 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 18 BevelOuter = bvNone ClientHeight = 41 ClientWidth = 207 TabOrder = 1 object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 0 Height = 30 Top = 0 Width = 90 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 0 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = KASButtonPanel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = KASButtonPanel AnchorSideBottom.Side = asrBottom Left = 107 Height = 30 Top = 0 Width = 90 Anchors = [akRight, akBottom] AutoSize = True Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 1 end end object cbEncoding: TStaticText AnchorSideLeft.Control = lblEncoding AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = KASButtonPanel AnchorSideBottom.Side = asrCenter Left = 69 Height = 1 Top = 266 Width = 100 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 TabOrder = 2 end object ActionList: TActionList Left = 348 Top = 9 object actSaveDescription: TAction Caption = 'Save Description' OnExecute = actExecute end end end doublecmd-1.1.30/src/fdeletedlg.pas0000644000175000001440000000237615104114162016170 0ustar alexxusersunit fDeleteDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Menus, StdCtrls, fButtonForm, uOperationsManager, uFileSource; type { TfrmDeleteDlg } TfrmDeleteDlg = class(TfrmButtonForm) lblMessage: TLabel; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } public { public declarations } end; function ShowDeleteDialog(const Message: String; FileSource: IFileSource; out QueueId: TOperationsManagerQueueIdentifier): Boolean; implementation uses LCLType; function ShowDeleteDialog(const Message: String; FileSource: IFileSource; out QueueId: TOperationsManagerQueueIdentifier): Boolean; begin with TfrmDeleteDlg.Create(Application, FileSource) do begin Caption:= Application.Title; lblMessage.Caption:= Message; Result:= ShowModal = mrOK; QueueId:= QueueIdentifier; Free; end; end; {$R *.lfm} { TfrmDeleteDlg } procedure TfrmDeleteDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_RETURN) and (ssShift in Shift) then begin btnOK.Click; Key:= 0; end; end; end. doublecmd-1.1.30/src/fdeletedlg.lfm0000644000175000001440000000255115104114162016156 0ustar alexxusersinherited frmDeleteDlg: TfrmDeleteDlg Left = 347 Height = 86 Top = 169 Width = 415 ActiveControl = btnOK AutoSize = True BorderStyle = bsDialog ClientHeight = 86 ClientWidth = 415 Constraints.MaxWidth = 800 Constraints.MinWidth = 400 KeyPreview = True OnKeyDown = FormKeyDown Position = poScreenCenter inherited pnlContent: TPanel Height = 1 Width = 399 Align = alTop ClientHeight = 1 ClientWidth = 399 ParentColor = True object lblMessage: TLabel[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 1 Top = 0 Width = 399 Anchors = [akTop, akLeft, akRight] ParentColor = False ShowAccelChar = False WordWrap = True end end inherited pnlButtons: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlContent AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Top = 41 Width = 399 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 32 ClientWidth = 399 ParentColor = True inherited btnCancel: TBitBtn Left = 221 end inherited btnOK: TBitBtn Left = 311 end end end doublecmd-1.1.30/src/fcopymovedlg.pas0000644000175000001440000003325515104114162016567 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Dialog window when copying/moving files confirming filenames and other options Copyright (C) 2009-2019 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fCopyMoveDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, ActnList, KASPathEdit, uFileSource, uFileViewNotebook, uFileSourceOperation, uFileSourceOperationOptionsUI, uOperationsManager, uFormCommands; type TCopyMoveDlgType = (cmdtCopy, cmdtMove); TCurrentCopyDlgNameSelectionStep = (ccdnssWholeCompleteFilename, ccdnssJustFilenameNoExt, ccdnssJustFilenameWithExt, ccdnssJustExtension, ccdnssJustPath, ccdnssInvalid); //Note: ccdnssInvalid *must* be the last one. { TfrmCopyDlg } TfrmCopyDlg = class(TForm, IFormCommands) btnCancel: TBitBtn; btnOK: TBitBtn; btnAddToQueue: TBitBtn; btnOptions: TButton; btnSaveOptions: TButton; edtDst: TKASPathEdit; grpOptions: TGroupBox; lblCopySrc: TLabel; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue4: TMenuItem; mnuQueue5: TMenuItem; mnuQueue1: TMenuItem; mnuNewQueue: TMenuItem; pmQueuePopup: TPopupMenu; pnlButtons: TPanel; pnlOptions: TPanel; pnlSelector: TPanel; btnCreateSpecialQueue: TBitBtn; procedure btnCreateSpecialQueueClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnOptionsClick(Sender: TObject); procedure btnSaveOptionsClick(Sender: TObject); procedure btnStartModeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormPaint(Sender: TObject); procedure frmCopyDlgShow(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); procedure pnlOptionsResize(Sender: TObject); private FCommands: TFormCommands; FDialogType: TCopyMoveDlgType; noteb: TFileViewNotebook; FFileSource: IFileSource; FOperationOptionsUIClass: TFileSourceOperationOptionsUIClass; FOperationOptionsUI: TFileSourceOperationOptionsUI; FCurrentCopyDlgNameSelectionStep: TCurrentCopyDlgNameSelectionStep; function GetQueueIdentifier: TOperationsManagerQueueIdentifier; procedure SetQueueIdentifier(AValue: TOperationsManagerQueueIdentifier); function ShowTabsSelector: integer; procedure TabsSelector(Sender: TObject); procedure TabsSelectorMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); procedure ShowOptions(bShow: Boolean); procedure UpdateSize; property {%H-}Commands: TFormCommands read FCommands implements IFormCommands; public constructor Create(TheOwner: TComponent; DialogType: TCopyMoveDlgType; AFileSource: IFileSource; AOperationOptionsUIClass: TFileSourceOperationOptionsUIClass); reintroduce; constructor Create(TheOwner: TComponent); override; procedure SetOperationOptions(Operation: TFileSourceOperation); property QueueIdentifier: TOperationsManagerQueueIdentifier read GetQueueIdentifier write SetQueueIdentifier; published procedure cm_AddToQueue(const Params: array of String); procedure cm_ToggleSelectionInName(const {%H-}Params: array of string); end; implementation {$R *.lfm} uses LazUTF8, fMain, LCLType, LCLVersion, uGlobs, uLng, uHotkeyManager, DCStrUtils; const HotkeysCategory = 'Copy/Move Dialog'; var FQueueIdentifier: TOperationsManagerQueueIdentifier = SingleQueueId; constructor TfrmCopyDlg.Create(TheOwner: TComponent; DialogType: TCopyMoveDlgType; AFileSource: IFileSource; AOperationOptionsUIClass: TFileSourceOperationOptionsUIClass); begin FDialogType := DialogType; FFileSource := AFileSource; FOperationOptionsUIClass := AOperationOptionsUIClass; FCommands := TFormCommands.Create(Self); inherited Create(TheOwner); end; constructor TfrmCopyDlg.Create(TheOwner: TComponent); begin Create(TheOwner, cmdtCopy, nil, nil); end; procedure TfrmCopyDlg.SetOperationOptions(Operation: TFileSourceOperation); begin if Assigned(FOperationOptionsUI) then FOperationOptionsUI.SetOperationOptions(Operation); end; procedure TfrmCopyDlg.cm_AddToQueue(const Params: array of String); var Value: Integer; sQueueId: String; begin if FQueueIdentifier = ModalQueueId then Exit; if GetParamValue(Params, 'queueid', sQueueId) and TryStrToInt(sQueueId, Value) then begin if Value < 0 then mnuNewQueue.Click else FQueueIdentifier := Value end else FQueueIdentifier := SingleQueueId; ModalResult := btnAddToQueue.ModalResult; end; { TfrmCopyDlg.cm_ToggleSelectionInName } procedure TfrmCopyDlg.cm_ToggleSelectionInName(const Params: array of string); var iInitialStart, iInitialLength, iFullLength, iPath, iExtension, iSelStart, iSelLenght: integer; begin iFullLength := UTF8Length(edtDst.Text); iPath := UTF8Length(ExtractFilePath(edtDst.Text)); iExtension := UTF8Length(ExtractFileExt(edtDst.Text)); iInitialStart := edtDst.SelStart; iInitialLength := edtDst.SelLength; if iFullLength = 0 then exit; repeat FCurrentCopyDlgNameSelectionStep := TCurrentCopyDlgNameSelectionStep((ord(FCurrentCopyDlgNameSelectionStep)+1) mod ord(ccdnssInvalid)); case FCurrentCopyDlgNameSelectionStep of ccdnssJustFilenameNoExt: begin iSelStart := iPath; iSelLenght := iFullLength - (iPath+iExtension); end; ccdnssJustFilenameWithExt: begin iSelStart := iPath; iSelLenght := iFullLength - iPath; end; ccdnssJustExtension: begin iSelStart := succ(iPath + (iFullLength - (iPath+iExtension))); iSelLenght := pred(iExtension); end; ccdnssJustPath: begin iSelStart := 0; iSelLenght := pred(iPath); end; else //Which includes also "ccdnssWholeCompleteFilename". begin iSelStart := 0; iSelLenght := iFullLength; end; end; until ((iSelStart <> iInitialStart) OR (iInitialLength <> iSelLenght)) AND (iSelLenght > 0); edtDst.SelStart := iSelStart; edtDst.SelLength := iSelLenght; end; procedure TfrmCopyDlg.TabsSelector(Sender: TObject); begin edtDst.Text := noteb[(Sender as TButton).tag].CurrentPath; end; procedure TfrmCopyDlg.TabsSelectorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin edtDst.Text := noteb[(Sender as TButton).tag].CurrentPath; end; function TfrmCopyDlg.ShowTabsSelector: integer; var btnS, btnL: TButton; i, tc: PtrInt; st: TStringList; s: String; begin noteb := frmMain.NotActiveNotebook; if noteb.PageCount = 1 then begin Result:=0; exit; end; tc := noteb.PageCount; st := TStringList.Create; try for i:=0 to tc-1 do if noteb.View[i].Visible then begin s:=noteb[i].CurrentPath; if st.IndexOf(s)=-1 then begin st.Add(s); st.Objects[st.Count-1]:=TObject(i); end; end; tc := st.Count; btnL := nil; if tc>10 then tc:=10; for i:=0 to tc-1 do begin btnS:= TButton.Create(Self); btnS.TabOrder:= i; btns.Parent:=pnlSelector; btns.Tag:=PtrInt(st.Objects[i]); if i < 9 then btns.Caption := IntToStr(i+1) + ' - ' + noteb.Page[PtrInt(st.Objects[i])].Caption else btns.Caption := '0 - ' + noteb.Page[PtrInt(st.Objects[i])].Caption; btnS.OnClick := @TabsSelector; btnS.OnMouseDown := @TabsSelectorMouseDown; btns.AutoSize:=True; btns.Left := 0; btns.Top := 0; btns.Anchors :=[akLeft,akTop,akBottom]; btns.Visible := True; if btnL <> nil then begin btns.AnchorSideLeft.Control := btnL; btns.AnchorSideLeft.Side := asrRight; end; btnL := btnS; if (Self.Width < (btnL.Left+btnL.Width+200)) then // 200 = Ok + Cancel Self.Width := (btnL.Left+btnL.Width+200); end; finally st.Free; end; end; function TfrmCopyDlg.GetQueueIdentifier: TOperationsManagerQueueIdentifier; begin Result:= FQueueIdentifier; end; procedure TfrmCopyDlg.SetQueueIdentifier(AValue: TOperationsManagerQueueIdentifier); begin FQueueIdentifier:= AValue; end; procedure TfrmCopyDlg.frmCopyDlgShow(Sender: TObject); begin case FDialogType of cmdtCopy: begin Caption := rsDlgCp; end; cmdtMove: begin Caption := rsDlgMv; end; end; if gShowCopyTabSelectPanel then ShowTabsSelector; edtDst.SelectAll; FCurrentCopyDlgNameSelectionStep := ccdnssWholeCompleteFilename; edtDst.SetFocus; btnCreateSpecialQueue.Left:= btnAddToQueue.BoundsRect.Right; end; procedure TfrmCopyDlg.mnuNewQueueClick(Sender: TObject); begin FQueueIdentifier := OperationsManager.GetNewQueueIdentifier; ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmCopyDlg.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: TOperationsManagerQueueIdentifier; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin FQueueIdentifier := NewQueueNumber; ModalResult := btnAddToQueue.ModalResult; end; end; procedure TfrmCopyDlg.pnlOptionsResize(Sender: TObject); begin UpdateSize; end; procedure TfrmCopyDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if gShowCopyTabSelectPanel and (Integer(Key) - VK_1 < pnlSelector.ControlCount) then begin if (ssAlt in Shift) or (edtDst.Focused = False) then begin if (Key >= VK_1) and (Key <= VK_9) then begin TButton(pnlSelector.Controls[Key - VK_1]).Click; Key := 0; end; if (Key = VK_0) and (pnlSelector.ControlCount = 10) then begin TButton(pnlSelector.Controls[9]).Click; Key := 0; end; end; end; {$IF lcl_fullversion < 093100} case Key of VK_ESCAPE: // Must handle before drag manager. Lazarus bug 0020676. begin ModalResult := mrCancel; Key := 0; end; end; {$ENDIF} end; procedure TfrmCopyDlg.FormPaint(Sender: TObject); begin OnPaint := nil; AutoSize := False; Constraints.MinWidth := 0; end; procedure TfrmCopyDlg.btnCreateSpecialQueueClick(Sender: TObject); begin btnCreateSpecialQueue.PopupMenu.PopUp; end; procedure TfrmCopyDlg.btnOKClick(Sender: TObject); begin if FQueueIdentifier <> ModalQueueId then FQueueIdentifier := FreeOperationsQueueId; end; procedure TfrmCopyDlg.btnOptionsClick(Sender: TObject); begin Constraints.MinWidth := Width; ShowOptions(not pnlOptions.Visible); btnOptions.Enabled := not btnOptions.Enabled; ClientWidth := pnlOptions.Width + ChildSizing.LeftRightSpacing * 2; pnlOptions.Anchors := pnlOptions.Anchors + [akRight]; MoveToDefaultPosition; Constraints.MinWidth := 0; end; procedure TfrmCopyDlg.btnSaveOptionsClick(Sender: TObject); begin if Assigned(FOperationOptionsUI) then FOperationOptionsUI.SaveOptions; end; procedure TfrmCopyDlg.btnStartModeClick(Sender: TObject); begin btnOK.PopupMenu.PopUp; end; procedure TfrmCopyDlg.FormCreate(Sender: TObject); var HMForm: THMForm; Hotkey: THotkey; begin Constraints.MinWidth := Width; pnlSelector.Visible := gShowCopyTabSelectPanel; btnOK.Caption := rsDlgOpStart; if FQueueIdentifier <= FreeOperationsQueueId then FQueueIdentifier:= SingleQueueId; btnAddToQueue.Caption:= btnAddToQueue.Caption + ' #' + IntToStr(FQueueIdentifier); // Fix align of options panel and dialog size at start. if not pnlSelector.Visible then pnlOptions.Top := pnlOptions.Top - (pnlSelector.Height + pnlSelector.BorderSpacing.Top + pnlSelector.BorderSpacing.Bottom); // Operation options. if Assigned(FOperationOptionsUIClass) then begin FOperationOptionsUI := FOperationOptionsUIClass.Create(Self, FFileSource); FOperationOptionsUI.Parent := grpOptions; FOperationOptionsUI.Align := alClient; end else btnOptions.Visible := False; pnlOptions.Visible:= false; HMForm := HotMan.Register(Self, HotkeysCategory); Hotkey := HMForm.Hotkeys.FindByCommand('cm_AddToQueue'); if Assigned(Hotkey) then btnAddToQueue.Caption := btnAddToQueue.Caption + ' (' + ShortcutsToText(Hotkey.Shortcuts) + ')'; end; procedure TfrmCopyDlg.FormDestroy(Sender: TObject); begin HotMan.UnRegister(Self); end; procedure TfrmCopyDlg.ShowOptions(bShow: Boolean); begin pnlOptions.Visible := bShow; UpdateSize; end; procedure TfrmCopyDlg.UpdateSize; begin if pnlOptions.Visible then Self.Height := pnlOptions.Top + pnlOptions.Height + pnlOptions.BorderSpacing.Top + pnlOptions.BorderSpacing.Bottom else Self.Height := pnlOptions.Top; end; initialization TFormCommands.RegisterCommandsForm(TfrmCopyDlg, HotkeysCategory, @rsHotkeyCategoryCopyMoveDialog); end. doublecmd-1.1.30/src/fcopymovedlg.lrj0000644000175000001440000000275315104114162016572 0ustar alexxusers{"version":1,"strings":[ {"hash":140772409,"name":"tfrmcopydlg.caption","sourcebytes":[67,111,112,121,32,102,105,108,101,40,115,41],"value":"Copy file(s)"}, {"hash":226165059,"name":"tfrmcopydlg.btnoptions.caption","sourcebytes":[79,38,112,116,105,111,110,115],"value":"O&ptions"}, {"hash":43178309,"name":"tfrmcopydlg.btnaddtoqueue.caption","sourcebytes":[65,38,100,100,32,84,111,32,81,117,101,117,101],"value":"A&dd To Queue"}, {"hash":177752476,"name":"tfrmcopydlg.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":179353140,"name":"tfrmcopydlg.btnsaveoptions.caption","sourcebytes":[83,97,38,118,101,32,116,104,101,115,101,32,111,112,116,105,111,110,115,32,97,115,32,100,101,102,97,117,108,116],"value":"Sa&ve these options as default"}, {"hash":158918773,"name":"tfrmcopydlg.mnunewqueue.caption","sourcebytes":[78,101,119,32,113,117,101,117,101],"value":"New queue"}, {"hash":146585441,"name":"tfrmcopydlg.mnuqueue1.caption","sourcebytes":[81,117,101,117,101,32,49],"value":"Queue 1"}, {"hash":146585442,"name":"tfrmcopydlg.mnuqueue2.caption","sourcebytes":[81,117,101,117,101,32,50],"value":"Queue 2"}, {"hash":146585443,"name":"tfrmcopydlg.mnuqueue3.caption","sourcebytes":[81,117,101,117,101,32,51],"value":"Queue 3"}, {"hash":146585444,"name":"tfrmcopydlg.mnuqueue4.caption","sourcebytes":[81,117,101,117,101,32,52],"value":"Queue 4"}, {"hash":146585445,"name":"tfrmcopydlg.mnuqueue5.caption","sourcebytes":[81,117,101,117,101,32,53],"value":"Queue 5"} ]} doublecmd-1.1.30/src/fcopymovedlg.lfm0000644000175000001440000002603615104114162016561 0ustar alexxusersobject frmCopyDlg: TfrmCopyDlg Left = 462 Height = 263 Top = 260 Width = 612 HorzScrollBar.Page = 349 HorzScrollBar.Range = 337 VertScrollBar.Page = 205 VertScrollBar.Range = 186 ActiveControl = edtDst AutoSize = True BorderIcons = [biSystemMenu, biMaximize] Caption = 'Copy file(s)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 263 ClientWidth = 612 KeyPreview = True OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnPaint = FormPaint OnShow = frmCopyDlgShow Position = poOwnerFormCenter LCLVersion = '1.2.4.0' object lblCopySrc: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 20 Top = 8 Width = 596 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 ParentColor = False ShowAccelChar = False end object edtDst: TKASPathEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblCopySrc AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 27 Top = 34 Width = 596 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 TabOrder = 0 ObjectTypes = [otFolders, otNonFolders] FileSortType = fstFoldersFirst end object pnlSelector: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = edtDst AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 69 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 8 BevelOuter = bvNone TabOrder = 1 end object pnlButtons: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = pnlSelector AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 36 Top = 74 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 596 TabOrder = 2 object btnOptions: TButton Left = 0 Height = 36 Top = 0 Width = 100 Align = alLeft AutoSize = True Caption = 'O&ptions' Constraints.MinWidth = 100 OnClick = btnOptionsClick TabOrder = 0 end object btnAddToQueue: TBitBtn Left = 268 Height = 36 Top = 0 Width = 118 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'A&dd To Queue' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000004753BC504733A65000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF18844DF504763BAB04733A0C00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF7ACFA4FF36A16AF804763CE104733A2D000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF82D8ACFF6CD5A0FF58C18BFE0A7940F504743A650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004743AFE83DBAEFF11BA64FF52D392FF73D7A5FF1E8B53F50476 3CAC04733A0C0000000000000000000000000000000000000000000000000000 00000000000004733AFF83DCAFFF0EB761FF10BF66FF34CB7FFF78DAA8FF3EA6 71F904763BE104733A2D00000000000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF0DB35EFF0EB962FF0FBC64FF1CBF6CFF67D2 9CFF5DBB8BFE0E7A42F504733A65000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF0BAE5BFF0EB25FFF17B866FF1FBA6CFF26BA 6FFF55C68DFF76C99EFF268956F504753B9D0000000000000000000000000000 00000000000004733AFFA9DCC1FF49BE82FF50C389FF4DC488FF49C284FF44BE 80FF6DCA9BFF89CEAAFF308F5EF604753B9D0000000000000000000000000000 00000000000004733AFFA9DCC1FF5CC18DFF5AC28DFF55C28AFF58C38CFF8CD4 AFFF7AC39CFE147C46F504733A65000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF64C191FF61C18FFF73C89DFF9FD9BBFF5AAB 81FA05743AE104733A2D00000000000000000000000000000000000000000000 00000000000004743AFEA9DCC1FF6FC499FF91D2B1FF9CD4B7FF318F5FF60474 3BAC04733A0C0000000000000000000000000000000000000000000000000000 00000000000004733AFFA9DCC1FFABDCC3FF84C6A4FE107A43F504733A650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFFA5DABFFF5AAB82F904743AE104733A2D000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF2A8C59F604743AAB04733A0C00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004753BC504733A65000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 TabOrder = 1 end object btnCreateSpecialQueue: TBitBtn Left = 386 Height = 36 Top = 0 Width = 23 Align = alRight BorderSpacing.Right = 12 Glyph.Data = { 72000000424D7200000000000000360000002800000005000000030000000100 2000000000003C00000064000000640000000000000000000000000000000000 0000000000FF000000000000000000000000000000FF000000FF000000FF0000 0000000000FF000000FF000000FF000000FF000000FF } GlyphShowMode = gsmAlways Layout = blGlyphBottom OnClick = btnCreateSpecialQueueClick PopupMenu = pmQueuePopup TabOrder = 2 end object btnCancel: TBitBtn Left = 421 Height = 36 Top = 0 Width = 79 Align = alRight AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 3 end object btnOK: TBitBtn Left = 508 Height = 36 Top = 0 Width = 88 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Constraints.MinHeight = 34 Constraints.MinWidth = 88 Default = True Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000004753BC504733A65000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF18844DF504763BAB04733A0C00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF7ACFA4FF36A16AF804763CE104733A2D000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF82D8ACFF6CD5A0FF58C18BFE0A7940F504743A650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004743AFE83DBAEFF11BA64FF52D392FF73D7A5FF1E8B53F50476 3CAC04733A0C0000000000000000000000000000000000000000000000000000 00000000000004733AFF83DCAFFF0EB761FF10BF66FF34CB7FFF78DAA8FF3EA6 71F904763BE104733A2D00000000000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF0DB35EFF0EB962FF0FBC64FF1CBF6CFF67D2 9CFF5DBB8BFE0E7A42F504733A65000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF0BAE5BFF0EB25FFF17B866FF1FBA6CFF26BA 6FFF55C68DFF76C99EFF268956F504753B9D0000000000000000000000000000 00000000000004733AFFA9DCC1FF49BE82FF50C389FF4DC488FF49C284FF44BE 80FF6DCA9BFF89CEAAFF308F5EF604753B9D0000000000000000000000000000 00000000000004733AFFA9DCC1FF5CC18DFF5AC28DFF55C28AFF58C38CFF8CD4 AFFF7AC39CFE147C46F504733A65000000000000000000000000000000000000 00000000000004733AFFA9DCC1FF64C191FF61C18FFF73C89DFF9FD9BBFF5AAB 81FA05743AE104733A2D00000000000000000000000000000000000000000000 00000000000004743AFEA9DCC1FF6FC499FF91D2B1FF9CD4B7FF318F5FF60474 3BAC04733A0C0000000000000000000000000000000000000000000000000000 00000000000004733AFFA9DCC1FFABDCC3FF84C6A4FE107A43F504733A650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFFA5DABFFF5AAB82F904743AE104733A2D000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004733AFF2A8C59F604743AAB04733A0C00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000004753BC504733A65000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 OnClick = btnOKClick TabOrder = 4 end end object pnlOptions: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = pnlButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 39 Top = 114 Width = 596 AutoSize = True BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 BevelOuter = bvNone ClientHeight = 39 ClientWidth = 596 TabOrder = 3 OnResize = pnlOptionsResize object grpOptions: TGroupBox AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 4 Top = 0 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 TabOrder = 0 end object btnSaveOptions: TButton AnchorSideLeft.Control = grpOptions AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = grpOptions AnchorSideTop.Side = asrBottom Left = 207 Height = 27 Top = 12 Width = 183 AutoSize = True BorderSpacing.Top = 8 Caption = 'Sa&ve these options as default' Constraints.MinWidth = 201 OnClick = btnSaveOptionsClick TabOrder = 1 end end object pmQueuePopup: TPopupMenu left = 296 top = 184 object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end end end doublecmd-1.1.30/src/fconnectionmanager.pas0000644000175000001440000001415115104114162017723 0ustar alexxusersunit fConnectionManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ComCtrls, uFileView; type { TfrmConnectionManager } TfrmConnectionManager = class(TForm) btnCancel: TBitBtn; btnDelete: TBitBtn; btnEdit: TBitBtn; btnAdd: TBitBtn; btnConnect: TBitBtn; gbConnectTo: TGroupBox; ImageList: TImageList; tvConnections: TTreeView; procedure btnAddClick(Sender: TObject); procedure btnConnectClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tvConnectionsSelectionChanged(Sender: TObject); private FFileView: TFileView; public constructor Create(TheOwner: TComponent; FileView: TFileView); reintroduce; end; function ShowConnectionManager(FileView: TFileView): Boolean; implementation {$R *.lfm} uses uGlobs, uDCUtils, uShowMsg, uWfxModule, WfxPlugin, uWfxPluginFileSource, uLng, uConnectionManager; function ShowConnectionManager(FileView: TFileView): Boolean; begin with TfrmConnectionManager.Create(Application, FileView) do begin try Result:= (ShowModal = mrOK); finally Free; end; end; end; { TfrmConnectionManager } procedure TfrmConnectionManager.tvConnectionsSelectionChanged(Sender: TObject); var bEnabled: Boolean; begin if not Assigned(tvConnections.Selected) then begin btnConnect.Enabled:= False; btnAdd.Enabled:= False; btnEdit.Enabled:= False; btnDelete.Enabled:= False; end else begin bEnabled:= Assigned(tvConnections.Selected.Data); btnConnect.Enabled:= not bEnabled; btnAdd.Enabled:= bEnabled; btnEdit.Enabled:= not bEnabled; btnDelete.Enabled:= not bEnabled; end; end; procedure TfrmConnectionManager.btnAddClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_ADD) then begin with tvConnections.Items.AddChild(tvConnections.Selected, Connection) do StateIndex:= 1; end; end; } end; procedure TfrmConnectionManager.btnConnectClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection, RemotePath, RootPath: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkOpenConnection(Connection, RootPath, RemotePath) then begin DoDirSeparators(RootPath); DoDirSeparators(RemotePath); WfxPluginFileSource.SetCurrentAddress(Connection); WfxPluginFileSource.SetRootDir(IncludeTrailingPathDelimiter(RootPath)); FFileView.AddFileSource(WfxPluginFileSource, ExcludeTrailingPathDelimiter(RootPath) + RemotePath); tvConnections.Selected.Parent.Data:= nil; Close; end else begin msgError(Format(rsMsgErrCanNotConnect, [Connection])); end; end; } end; procedure TfrmConnectionManager.btnDeleteClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_DELETE) then begin tvConnections.Items.BeginUpdate; tvConnections.Items.Delete(tvConnections.Selected); tvConnections.Items.EndUpdate; end; end; } end; procedure TfrmConnectionManager.btnEditClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_EDIT) then tvConnections.Selected.Text:= Connection; end; } end; procedure TfrmConnectionManager.FormDestroy(Sender: TObject); var I: Integer; begin { for I:= 0 to tvConnections.Items.Count - 1 do begin if Assigned(tvConnections.Items.Item[I].Data) then DisposeFileSourceRecord(tvConnections.Items.Item[I].Data); end; } end; constructor TfrmConnectionManager.Create(TheOwner: TComponent; FileView: TFileView); var I, J: Integer; WfxPluginFileSource: IWfxPluginFileSource = nil; sModuleFileName, Connection: String; Node, SubNode: TTreeNode; begin { FFileView:= FileView; inherited Create(TheOwner); for I:= 0 to gWfxPlugins.Count - 1 do begin if gWfxPlugins.Enabled[I] then begin sModuleFileName:= GetCmdDirFromEnvVar(gWfxPlugins.FileName[I]); WfxPluginFileSource:= TWfxPluginFileSource.Create(sModuleFileName, gWfxPlugins.Name[I]); try if Assigned(WfxPluginFileSource) then with WfxPluginFileSource do begin if WFXmodule.VFSNetworkSupport then begin Node:= tvConnections.Items.Add(nil, gWfxPlugins.Name[I]); Node.Data:= NewFileSourceRecord(WfxPluginFileSource); Node.StateIndex:= 0; J:= 0; while WfxModule.WfxNetworkGetConnection(J, Connection) do begin SubNode:= tvConnections.Items.AddChild(Node, Connection); SubNode.StateIndex:= 1; Inc(J); end; end else begin WfxPluginFileSource:= nil; end; end; except WfxPluginFileSource:= nil; end; end; end; } end; end. doublecmd-1.1.30/src/fconnectionmanager.lrj0000644000175000001440000000171115104114162017725 0ustar alexxusers{"version":1,"strings":[ {"hash":227436834,"name":"tfrmconnectionmanager.caption","sourcebytes":[67,111,110,110,101,99,116,105,111,110,32,109,97,110,97,103,101,114],"value":"Connection manager"}, {"hash":200024170,"name":"tfrmconnectionmanager.gbconnectto.caption","sourcebytes":[67,111,110,110,101,99,116,32,116,111,58],"value":"Connect to:"}, {"hash":224743412,"name":"tfrmconnectionmanager.btnconnect.caption","sourcebytes":[67,38,111,110,110,101,99,116],"value":"C&onnect"}, {"hash":277668,"name":"tfrmconnectionmanager.btnadd.caption","sourcebytes":[65,38,100,100],"value":"A&dd"}, {"hash":2800388,"name":"tfrmconnectionmanager.btnedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":179055749,"name":"tfrmconnectionmanager.btndelete.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"}, {"hash":177752476,"name":"tfrmconnectionmanager.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/fconnectionmanager.lfm0000644000175000001440000002745315104114162017727 0ustar alexxusersobject frmConnectionManager: TfrmConnectionManager Left = 321 Height = 366 Top = 149 Width = 431 Caption = 'Connection manager' ClientHeight = 366 ClientWidth = 431 OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '1.1' object gbConnectTo: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnConnect AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 360 Top = 0 Width = 281 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 12 BorderSpacing.Bottom = 6 Caption = 'Connect to:' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 337 ClientWidth = 277 TabOrder = 0 object tvConnections: TTreeView Left = 4 Height = 329 Top = 4 Width = 269 Align = alClient DefaultItemHeight = 24 ReadOnly = True StateImages = ImageList TabOrder = 0 OnSelectionChanged = tvConnectionsSelectionChanged Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end end object btnConnect: TBitBtn AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 16 Width = 120 Anchors = [akTop, akRight] BorderSpacing.Right = 12 Caption = 'C&onnect' Enabled = False OnClick = btnConnectClick TabOrder = 1 end object btnAdd: TBitBtn AnchorSideLeft.Control = btnConnect AnchorSideTop.Control = btnConnect AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnConnect AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 64 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 18 Caption = 'A&dd' Enabled = False OnClick = btnAddClick TabOrder = 2 end object btnEdit: TBitBtn AnchorSideLeft.Control = btnAdd AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAdd AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 100 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '&Edit' Enabled = False OnClick = btnEditClick TabOrder = 3 end object btnDelete: TBitBtn AnchorSideLeft.Control = btnEdit AnchorSideTop.Control = btnEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnEdit AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 136 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '&Delete' Enabled = False OnClick = btnDeleteClick TabOrder = 4 end object btnCancel: TBitBtn AnchorSideLeft.Control = btnDelete AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnDelete AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 172 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 5 end object ImageList: TImageList Height = 22 Width = 22 left = 345 top = 253 Bitmap = { 4C69020000001600000016000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000373AD01000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000273 AD00000000000373AD00007AB9FF007AB9FF007AB9FF007AB9FF007AB9FF007A B9FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000529A00007A B9FFA4FEFDFE9BF6FBFF96F1FDFF92EDFDFF8EE8FEFF8CE5FFFE0275B1FF0046 8A0F0373AD000000000000000000000000000000000000000000000000000000 0000000000000000000000000000006AA700007AB9FF93E6F2FF8FE4F3FF8CE1 F5FF89DFF6FF86DDF7FF83DBF8FF80D9F9FF80DAFDFF0275B1FF00000000006B A506006CA506006CA506006CA506006CA506006CA506006CA506006CA506006D A60400000000007AB9FFB8F5FEFEACEDFAFFA9EAF8FFA5E7F8FFA1E4F8FF9EE1 F7FF9ADEF6FF96DBF6FF92D9F5FE96DDFCFF0372ADFF0371ABFF0370A9FF046E A7FF056EA5FF056CA3FF056BA1FF066A9EFF06699DFF358DB900004B79140079 B8FFB7FBFFFFA4F5FEFFA2F3FDFF9FF1FCFF9DEEFCFF9AEDFBFF99EBFAFF95E9 F8FF94E6F8FF91E4F8FF8FE2F6FF8DE0F6FF8ADDF4FF88DBF4FF85D9F3FF82D7 F2FF80D4F1FF7ED3F1FF7BD1F0FF096395FF00507F000178B6FFB5FAFFFFA1F4 FDFF9FF1FDFF9DEFFCFF9AEDFBFF98EBF9FF96E9FAFF93E7F9FF91E5F7FF8EE2 F7FF8CE1F6FF8ADEF6FF88DCF4FF85DAF4FF83D7F3FF80D5F2FF7ED4F2FF7CD1 F0FF79D1F0FF096394FF00507F000177B4FFB2F8FFFF9FF3FCFF9EF0FDFF9BEF FCFF99ECFBFF97EAF9FF94E8F9FF92E5F9FF8FE3F7FF8DE1F6FF8ADFF6FF88DD F5FF85DAF4FF83D9F3FF81D6F2FF7FD5F2FF7DD3F1FF7AD0F0FF77CFF0FF0962 93FF00507F000176B2FFB0F7FFFF9FF1FCFF9CEFFBFF99EDFAFF97EBFAFF95E8 F9FF92E6F8FF90E3F8FF8EE2F7FF8CE0F6FF89DDF5FF87DCF4FF84D9F3FF82D7 F2FF7FD5F2FF7ED3F0FF7AD0F1FF78CEF0FF76CDEFFF0A6292FF00517F000275 B1FFAEF5FEFF9DEFFCFF9BEDFAFF98EBFBFF96E9F9FF93E7F9FF91E4F7FF8FE3 F7FF8CE0F6FF89DEF6FF87DCF4FF85DAF4FF83D8F2FF80D6F2FF7FD3F2FF7BD1 F0FF79CFF0FF77CCEFFF74CCEEFF0A6191FF00517F000274AFFFACF4FEFF9BEE FBFF98ECFBFF96E9F9FF93E7F8FF91E5F7FF8FE3F7FF8DE0F6FF8BDFF6FF88DC F5FF85DBF4FF83D9F3FF81D6F2FF7FD4F1FF7CD2F0FF7AD0F0FF77CDEFFF76CC EEFF73CAEEFF0A6090FF00517F000372AEFFAAF2FDFF9AECFAFF97EAFAFF94E8 F9FF92E6F8FF8FE3F7FF8EE1F7FF8BDFF6FF89DDF5FF86DBF5FF84D9F3FF82D7 F3FF7FD5F2FF7CD2F1FF7AD1F0FF78CEEFFF76CCEFFF73CAEDFF71C9EEFF0A5F 8FFF00517F000472ABFFA8F0FCFF98EBFAFF95E9FAFF92E6F8FF90E4F7FF8EE2 F7FF8CE0F6FF8ADFF6FF87DCF4FF85DAF3FF83D7F2FF80D6F2FF7ED3F1FF7BD1 F0FF79CFEFFF76CDEFFF73CAEDFF72C8EDFF70C7ECFF0A5F8EFF00527F000470 AAFFA5EEFBFF96EAFAFF93E7F9FF91E6F8FF8FE3F7FF8CE1F7FF8ADFF5FF88DC F5FF85DAF4FF83D8F3FF81D7F2FF7ED3F1FF7CD2F1FF7ACFF0FF77CEEFFF74CB EEFF72C9EEFF70C7ECFF6DC6EDFF0A5F8DFF00528000046FA8FFA4ECFBFF94E7 F8FF92E5F8FF8FE3F7FF8DE2F6FF8BDFF6FF89DDF5FF87DBF4FF84D8F3FF82D7 F2FF7FD5F2FF7CD3F1FF7AD0F0FF78CEEFFF75CBEEFF74CAEEFF71C8EDFF6EC5 ECFF6CC4EBFF0B5E8CFF00528000056EA7FFA1EBF9FF93E7F8FF90E4F7FF8EE2 F7FF8CE0F6FF89DEF4FF87DCF4FF84D9F4FF82D8F2FF80D5F2FF7ED3F1FF7BD0 F0FF78CFEFFF76CCEEFF74CAEDFF72C9EDFF6FC6ECFF6CC4EBFF6AC2ECFF0B5D 8BFF01528000056DA4FF9FE9F9FF91E5F7FF8FE2F7FF8CE0F7FF8ADEF6FF88DD F5FF85DAF4FF83D8F3FF80D5F1FF7ED4F1FF7BD1F1FF79D0F0FF77CCEFFF75CB EEFF72C9EEFF6FC6EDFF6EC5ECFF6BC3EBFF69C2EBFF0C5C89FF01528000066C A3FF9CE8F8FF8EE3F8FF8CE1F7FF8ADFF6FF88DDF5FF86DBF5FF83D9F4FF81D7 F3FF7ED5F3FF7CD3F1FF7AD1F1FF77CEF0FF75CCEFFF73CAEEFF71C8EEFF6EC6 EDFF6CC4EBFF69C1EBFF68C0ECFF0B5C89FF01538000066BA2FFB1E7F7FEA6E0 F3FFA2DDF1FF9EDBF0FF9AD9EEFF96D6EDFF92D3ECFF8FD0EAFF8ACDE9FF87CA E7FF82C8E6FF7FC5E4FF7BC2E4FF77BFE2FF73BCE0FF6FBADFFF6BB7DDFF67B4 DCFF63B2DBFF0B5B87FF025380000043761107679BFF07679AFF086699FF0865 98FF086597FF086496FF096395FF096393FF096293FF096191FF0A6191FF0A60 8FFF0A5F8EFF0B5E8DFF0B5E8CFF0B5D8CFF0B5D8AFF0B5C89FF0C5B88FF0352 7F00000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000C5B88000000 000000000000000000000000000000000000606060FF606060FF606060FF6060 60FF606060FF606060FF606060FF606060FF606060FF606060FF606060FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000606060FFE4E4E4FFFDFDFDFFFDFDFDFFFCFCFCFFFAFAFAFFFAFA FAFFF9F9F9FFF8F8F8FFF7F7F7FFF7F7F7FFC6C6C6FF606060FF000000000000 0000000000000000000000000000000000000000000000000000606060FFF9F9 F9FFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFF9F9F9FFF9F9 F9FFF7F7F7FFF7F7F7FFF6F6F6FFEEEEEEFF606060FF00000000000000000000 000000000000000000000000000000000000606060FFFAFAFAFFBDBDBDFFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBD BDFFBDBDBDFFFDFDFDFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFAFAFAFFB3B3B3FFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFB3B3B3FFF4F4 F4FF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFAFAFAFFBCBCBCFFDADADAFFD9D9D9FFD8D8D8FFD6D6D6FFD5D5 D5FFD4D4D4FFD3D3D3FFD2D2D2FFD2D2D2FFB7B7B7FFF2F2F2FF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFAFA FAFFB1B1B1FFB6B6B6FFB6B6B6FFB5B5B5FFB5B5B5FFB5B5B5FFB5B5B5FFB5B5 B5FFB4B4B4FFB4B4B4FFB1B1B1FFF2F2F2FF606060FF00000000000000000000 000000000000000000000000000000000000606060FFF8F8F8FFBCBCBCFFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE3E3E3FFE2E2 E2FFBBBBBBFFF4F4F4FF606060FF000000000000000000000000000000000000 00006060603E606060B3606060FFF8F8F8FFBBBBBBFFD1D1D1FFCFCFCFFFCECE CEFFCDCDCDFFCCCCCCFFCBCBCBFFCACACAFFC9C9C9FFC8C8C8FFB6B6B6FFF1F1 F1FF606060FF606060FF606060B30000000000000000CDCDCD10CDCDCD2FCDCD CD5E606060FFF8F8F8FFB2B2B2FFB7B7B7FFB7B7B7FFB6B6B6FFB6B6B6FFB6B6 B6FFB6B6B6FFB6B6B6FFB6B6B6FFB5B5B5FFB2B2B2FFF2F2F2FF606060FFCDCD CDBFCDCDCD76CDCDCD37CDCDCD170000000000000000606060B3606060FFFAFA FAFFE8E8E8FFE5E5E5FFE5E5E5FFE4E4E4FFE2E2E2FFE3E3E3FFDCDCDCFFDCDC DCFFE2E2E2FFD9D9D9FFDFDFDFFFF3F3F3FF606060FF606060FF606060B30000 000000000000000000000000000000000000606060FFFEFEFEFFA5A5A5FF8A8A 8AFFABABABFFD5D5D5FFBDBDBDFFBABABAFFB9B9B9FFB9B9B9FFB9B9B9FFB9B9 B9FFB8B8B8FFFCFCFCFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFEFEFEFF888888FFB2B2B2FF7E7E7EFFD6D6 D6FFC3C3C3FFDCDCDCFFDCDCDCFFDCDCDCFFDBDBDBFFDBDBDBFFB5B5B5FFFCFC FCFF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFDFDFDFFAAAAAAFF7C7C7CFFD3D3D3FFDEDEDEFFBDBDBDFFBDBD BDFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBDBDBDFFFCFCFCFF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFDFD FDFFDEDEDEFFDCDCDCFFDBDBDBFFDBDBDBFFDBDBDBFFDADADAFFDADADAFFDADA DAFFDADADAFFDADADAFFD9D9D9FFFCFCFCFF606060FF00000000000000000000 000000000000000000000000000000000000606060FFFDFDFDFFDADADAFFDADA DAFFAFAFAFFFC3C3C3FFA5A5A5FFC1C1C1FFADADADFFC3C3C3FFA3A3A3FFDCDC DCFFD7D7D7FFFCFCFCFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFDFDFDFFD7D7D7FFD6D6D6FFAEAEAEFFDBDB DBFFB6B6B6FFDADADAFFBBBBBBFFDCDCDCFFB4B4B4FFD7D7D7FFD3D3D3FFFCFC FCFF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFDFDFDFFD6D6D6FFD5D5D5FFB3B3B3FFD5D5D5FFAEAEAEFFD7D7 D7FFAFAFAFFFD6D6D6FFAAAAAAFFD4D4D4FFD3D3D3FFFCFCFCFF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFEFE FEFFFCFCFCFFFCFCFCFFFBFBFBFFFCFCFCFFFBFBFBFFFCFCFCFFFBFBFBFFFCFC FCFFFBFBFBFFFCFCFCFFFCFCFCFFFEFEFEFF606060FF00000000000000000000 00000000000000000000000000000000000053575591606060FF606060FF6060 60FF606060FF606060FF606060FF606060FF606060FF606060FF606060FF6060 60FF606060FF606060FF53575591000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end end doublecmd-1.1.30/src/fconfirmcommandline.pas0000644000175000001440000000461415104114162020100 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Window to confirm the execution of command line and its parameters Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fConfirmCommandLine; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons; type { TTfrmConfirmCommandLine } TTfrmConfirmCommandLine = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; lbleCommandLine: TLabeledEdit; lbleStartPath: TLabeledEdit; lbleParameters: TLabeledEdit; procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var TfrmConfirmCommandLine: TTfrmConfirmCommandLine; function ConfirmCommandLine(var sCommandLine: string; var sParameter:string; var sStartPath:string):boolean; implementation {$R *.lfm} uses uLng,uGlobs; function ConfirmCommandLine(var sCommandLine: string; var sParameter:string; var sStartPath:string):boolean; begin with TTfrmConfirmCommandLine.Create(Application) do try Caption:= rsConfirmExecution; lbleCommandLine.Text:=sCommandLine; lbleParameters.Text:=sParameter; lbleStartPath.Text:=sStartPath; Result:= (ShowModal = mrOK); if Result then begin sCommandLine:=lbleCommandLine.Text; sParameter:=lbleParameters.Text; sStartPath:=lbleStartPath.Text; end; finally Free; end; end; { TTfrmConfirmCommandLine } procedure TTfrmConfirmCommandLine.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; end. doublecmd-1.1.30/src/fconfirmcommandline.lrj0000644000175000001440000000137515104114162020105 0ustar alexxusers{"version":1,"strings":[ {"hash":177752476,"name":"ttfrmconfirmcommandline.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"}, {"hash":11067,"name":"ttfrmconfirmcommandline.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":202824842,"name":"ttfrmconfirmcommandline.lblecommandline.editlabel.caption","sourcebytes":[67,111,109,109,97,110,100,32,108,105,110,101,58],"value":"Command line:"}, {"hash":60572138,"name":"ttfrmconfirmcommandline.lbleparameters.editlabel.caption","sourcebytes":[80,97,114,97,109,101,116,101,114,115,58],"value":"Parameters:"}, {"hash":103555626,"name":"ttfrmconfirmcommandline.lblestartpath.editlabel.caption","sourcebytes":[83,116,97,114,116,32,112,97,116,104,58],"value":"Start path:"} ]} doublecmd-1.1.30/src/fconfirmcommandline.lfm0000644000175000001440000000621315104114162020070 0ustar alexxusersobject TfrmConfirmCommandLine: TTfrmConfirmCommandLine Left = 403 Height = 205 Top = 360 Width = 500 ActiveControl = btnOK ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 205 ClientWidth = 500 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Width' LCLVersion = '1.2.6.0' object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 392 Height = 32 Top = 165 Width = 100 Anchors = [akRight, akBottom] BorderSpacing.Top = 12 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 2 end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideBottom.Side = asrBottom Left = 286 Height = 32 Top = 165 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 1 end object lbleCommandLine: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 30 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleCommandLine EditLabel.AnchorSideRight.Control = lbleCommandLine EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleCommandLine EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 12 EditLabel.Width = 484 EditLabel.Caption = 'Command line:' EditLabel.ParentColor = False TabOrder = 0 end object lbleParameters: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 80 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleParameters EditLabel.AnchorSideRight.Control = lbleParameters EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleParameters EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 62 EditLabel.Width = 484 EditLabel.Caption = 'Parameters:' EditLabel.ParentColor = False TabOrder = 3 end object lbleStartPath: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 130 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleStartPath EditLabel.AnchorSideRight.Control = lbleStartPath EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleStartPath EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 112 EditLabel.Width = 484 EditLabel.Caption = 'Start path:' EditLabel.ParentColor = False TabOrder = 4 end end doublecmd-1.1.30/src/fchooseencoding.pas0000644000175000001440000000345115104114162017221 0ustar alexxusersunit fChooseEncoding; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls; type { TfrmChooseEncoding } TfrmChooseEncoding = class(TForm) ButtonPanel: TButtonPanel; ScrollBox: TScrollBox; procedure FormCreate(Sender: TObject); procedure CheckBoxChange(Sender: TObject); private FList: TStrings; public constructor Create(TheOwner: TComponent; AList: TStrings); reintroduce; destructor Destroy; override; end; function ChooseEncoding(TheOwner: TComponent; AList: TStrings): Boolean; implementation uses uConvEncoding; function ChooseEncoding(TheOwner: TComponent; AList: TStrings): Boolean; begin with TfrmChooseEncoding.Create(TheOwner, AList) do try Result:= (ShowModal = mrOK); if Result then AList.Assign(FList); finally Free; end; end; {$R *.lfm} { TfrmChooseEncoding } procedure TfrmChooseEncoding.CheckBoxChange(Sender: TObject); begin with TCheckBox(Sender) do begin FList.Objects[Tag]:= TObject(PtrInt(Checked)); end; end; constructor TfrmChooseEncoding.Create(TheOwner: TComponent; AList: TStrings); begin inherited Create(TheOwner); FList:= TStringList.Create; FList.Assign(AList); end; destructor TfrmChooseEncoding.Destroy; begin inherited Destroy; FList.Free; end; procedure TfrmChooseEncoding.FormCreate(Sender: TObject); var Index: Integer; CheckBox: TCheckBox; begin for Index:= 0 to FList.Count - 1 do begin CheckBox:= TCheckBox.Create(Self); CheckBox.Parent:= ScrollBox; CheckBox.Caption:= FList[Index]; CheckBox.Tag:= Index; CheckBox.OnChange:= @CheckBoxChange; CheckBox.Checked:= Boolean(PtrInt(FList.Objects[Index])); end; end; end. doublecmd-1.1.30/src/fchooseencoding.lrj0000644000175000001440000000022615104114162017222 0ustar alexxusers{"version":1,"strings":[ {"hash":77966471,"name":"tfrmchooseencoding.caption","sourcebytes":[69,110,99,111,100,105,110,103],"value":"Encoding"} ]} doublecmd-1.1.30/src/fchooseencoding.lfm0000644000175000001440000000216415104114162017214 0ustar alexxusersobject frmChooseEncoding: TfrmChooseEncoding Left = 522 Height = 240 Top = 145 Width = 320 BorderStyle = bsToolWindow Caption = 'Encoding' ClientHeight = 240 ClientWidth = 320 OnCreate = FormCreate Position = poOwnerFormCenter LCLVersion = '2.2.5.0' object ButtonPanel: TButtonPanel Left = 6 Height = 34 Top = 200 Width = 308 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 0 ShowButtons = [pbOK, pbCancel] end object ScrollBox: TScrollBox Left = 0 Height = 194 Top = 0 Width = 320 HorzScrollBar.Page = 1 VertScrollBar.Page = 1 Align = alClient BorderStyle = bsNone ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 TabOrder = 1 end end doublecmd-1.1.30/src/fchecksumverify.pas0000644000175000001440000001210715104114162017257 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Verify checksum dialog Copyright (C) 2009-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fCheckSumVerify; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Buttons, SynEdit, LMessages, uOSForms, Graphics, uFileSourceCalcChecksumOperation, DCBasicTypes, Controls; type { TfrmCheckSumVerify } TfrmCheckSumVerify = class(TAloneForm) btnClose: TBitBtn; seCheckSumVerify: TSynEdit; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure seCheckSumVerifySpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); private procedure AddHeader(const aText: String; aCount: Integer; aColor: TColor); procedure ProcessResult(const aResult: TDynamicStringArray; const aText: String; aColor: TColor); protected procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public { public declarations } end; procedure ShowVerifyCheckSum(const VerifyResult: TVerifyChecksumResult); implementation {$R *.lfm} uses uLng, uGlobs, uClassesEx, uLog; procedure ShowVerifyCheckSum(const VerifyResult: TVerifyChecksumResult); var aTotalCount: Integer; begin with TfrmCheckSumVerify.Create(Application) do begin seCheckSumVerify.Lines.BeginUpdate; try seCheckSumVerify.Lines.AddObject(rsCheckSumVerifyGeneral, TObject(PtrInt(clWindowText))); aTotalCount:= Length(VerifyResult.Success) + Length(VerifyResult.ReadError) + Length(VerifyResult.Broken) + Length(VerifyResult.Missing); // Add header information AddHeader(rsCheckSumVerifyTotal, aTotalCount, clWindowText); AddHeader(rsCheckSumVerifySuccess, Length(VerifyResult.Success), Ord(lmtSuccess)); AddHeader(rsCheckSumVerifyMissing, Length(VerifyResult.Missing), Ord(lmtError)); AddHeader(rsCheckSumVerifyBroken, Length(VerifyResult.Broken), Ord(lmtError)); AddHeader(rsCheckSumVerifyReadError, Length(VerifyResult.ReadError), Ord(lmtError)); // Add broken files ProcessResult(VerifyResult.Broken, rsCheckSumVerifyBroken, Ord(lmtError)); // Add read error files ProcessResult(VerifyResult.ReadError, rsCheckSumVerifyReadError, Ord(lmtError)); // Add missing files ProcessResult(VerifyResult.Missing, rsCheckSumVerifyMissing, Ord(lmtError)); // Add good files ProcessResult(VerifyResult.Success, rsCheckSumVerifySuccess, Ord(lmtSuccess)); finally seCheckSumVerify.Lines.EndUpdate; end; Show; end; end; { TfrmCheckSumVerify } procedure TfrmCheckSumVerify.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmCheckSumVerify.FormCreate(Sender: TObject); begin seCheckSumVerify.FixDefaultKeystrokes; end; procedure TfrmCheckSumVerify.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 27 then Close; end; procedure TfrmCheckSumVerify.seCheckSumVerifySpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); var AColor: IntPtr; begin Special:= True; AColor:= IntPtr(seCheckSumVerify.Lines.Objects[Line - 1]); with gColors.Log^ do begin case AColor of Ord(lmtError): FG:= ErrorColor; Ord(lmtSuccess): FG:= SuccessColor; else FG:= TColor(AColor); end; end; end; procedure TfrmCheckSumVerify.AddHeader(const aText: String; aCount: Integer; aColor: TColor); begin if aCount = 0 then aColor:= clWindowText; seCheckSumVerify.Lines.AddObject(#32 + aText + #32 + IntToStr(aCount), TObject(PtrInt(aColor))); end; procedure TfrmCheckSumVerify.ProcessResult(const aResult: TDynamicStringArray; const aText: String; aColor: TColor); var I: Integer; begin if Length(aResult) > 0 then begin seCheckSumVerify.Lines.Add(EmptyStr); seCheckSumVerify.Lines.AddObject(aText, TObject(PtrInt(aColor))); for I:= Low(aResult) to High(aResult) do begin seCheckSumVerify.Lines.AddObject(#32 + aResult[I], TObject(PtrInt(aColor))); end; end; end; procedure TfrmCheckSumVerify.CMThemeChanged(var Message: TLMessage); begin seCheckSumVerify.Repaint; end; end. doublecmd-1.1.30/src/fchecksumverify.lrj0000644000175000001440000000047415104114162017267 0ustar alexxusers{"version":1,"strings":[ {"hash":202286430,"name":"tfrmchecksumverify.caption","sourcebytes":[86,101,114,105,102,121,32,99,104,101,99,107,115,117,109,46,46,46],"value":"Verify checksum..."}, {"hash":44709525,"name":"tfrmchecksumverify.btnclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"} ]} doublecmd-1.1.30/src/fchecksumverify.lfm0000644000175000001440000002040715104114162017254 0ustar alexxusersobject frmCheckSumVerify: TfrmCheckSumVerify Left = 290 Height = 300 Top = 175 Width = 400 Caption = 'Verify checksum...' ClientHeight = 300 ClientWidth = 400 Constraints.MinHeight = 200 Constraints.MinWidth = 300 KeyPreview = True OnClose = FormClose OnKeyDown = FormKeyDown Position = poScreenCenter ShowInTaskBar = stAlways LCLVersion = '1.6.0.4' inline seCheckSumVerify: TSynEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 10 Height = 240 Top = 10 Width = 380 BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 BorderSpacing.Bottom = 10 Anchors = [akTop, akLeft, akRight, akBottom] Color = clWindow Font.Color = clWindowText ParentColor = False ParentFont = False TabOrder = 0 Gutter.Visible = False Gutter.Width = 0 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = EcFoldCurrent ShortCut = 41005 end item Command = EcUnFoldCurrent ShortCut = 41003 end item Command = EcToggleMarkupWord ShortCut = 32845 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end item Command = ecColSelUp ShortCut = 40998 end item Command = ecColSelDown ShortCut = 41000 end item Command = ecColSelLeft ShortCut = 40997 end item Command = ecColSelRight ShortCut = 40999 end item Command = ecColSelPageDown ShortCut = 40994 end item Command = ecColSelPageBottom ShortCut = 57378 end item Command = ecColSelPageUp ShortCut = 40993 end item Command = ecColSelPageTop ShortCut = 57377 end item Command = ecColSelLineStart ShortCut = 40996 end item Command = ecColSelLineEnd ShortCut = 40995 end item Command = ecColSelEditorTop ShortCut = 57380 end item Command = ecColSelEditorBottom ShortCut = 57379 end> MouseActions = <> MouseTextActions = <> MouseSelActions = <> VisibleSpecialChars = [vscSpace, vscTabAtLast] ReadOnly = True ScrollBars = ssAutoBoth SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnSpecialLineColors = seCheckSumVerifySpecialLineColors inline SynLeftGutterPartList1: TSynGutterPartList end end object btnClose: TBitBtn AnchorSideLeft.Control = seCheckSumVerify AnchorSideLeft.Side = asrCenter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 150 Height = 30 Top = 260 Width = 100 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 10 Caption = '&Close' Kind = bkClose TabOrder = 1 end end doublecmd-1.1.30/src/fchecksumcalc.pas0000644000175000001440000001330415104114162016655 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Calculate checksum dialog Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fCheckSumCalc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, fButtonForm, uHash, uOperationsManager; type { TfrmCheckSumCalc } TfrmCheckSumCalc = class(TfrmButtonForm) cbSeparateFile: TCheckBox; cbOpenAfterJobIsComplete: TCheckBox; edtSaveTo: TEdit; lblFileFormat: TLabel; lblSaveTo: TLabel; lbHashAlgorithm: TListBox; rbWindows: TRadioButton; rbUnix: TRadioButton; procedure cbSeparateFileChange(Sender: TObject); procedure edtSaveToChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); private FFileName: String; FAlgorithm: THashAlgorithm; public constructor Create(TheOwner: TComponent; const FileName: String); overload; end; function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; out TextLineBreakStyle: TTextLineBreakStyle; out QueueId: TOperationsManagerQueueIdentifier): Boolean; function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm; out QueueId: TOperationsManagerQueueIdentifier): Boolean; implementation {$R *.lfm} uses uGlobs, uLng; function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; out TextLineBreakStyle: TTextLineBreakStyle; out QueueId: TOperationsManagerQueueIdentifier): Boolean; const TextLineBreak: array[Boolean] of TTextLineBreakStyle = (tlbsLF, tlbsCRLF); begin with TfrmCheckSumCalc.Create(Application, sFileName) do try if (DefaultTextLineBreakStyle = tlbsCRLF) then rbWindows.Checked:= True else begin rbUnix.Checked:= True; end; Result:= (ShowModal = mrOK); if Result then begin sFileName:= edtSaveTo.Text; SeparateFile:= cbSeparateFile.Checked; TextLineBreakStyle:= TextLineBreak[rbWindows.Checked]; OpenFileAfterJobCompleted:=(cbOpenAfterJobIsComplete.Checked AND cbOpenAfterJobIsComplete.Enabled); HashAlgorithm:= FAlgorithm; QueueId:= QueueIdentifier end; finally Free; end; end; function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm; out QueueId: TOperationsManagerQueueIdentifier): Boolean; begin with TfrmCheckSumCalc.Create(Application) do try OnShow:= nil; edtSaveTo.Text:= EmptyStr; SessionProperties:= EmptyStr; Caption:= rsCheckSumVerifyTitle; cbSeparateFile.Visible:= False; cbOpenAfterJobIsComplete.Visible:= False; lbHashAlgorithm.OnSelectionChange:= nil; edtSaveTo.OnChange:= @edtSaveToChange; lblSaveTo.Caption:= rsCheckSumVerifyText; Result:= (ShowModal = mrOK); if Result then begin Hash:= TrimHash(edtSaveTo.Text); Result:= Length(Hash) > 0; QueueId:= QueueIdentifier; HashAlgorithm:= THashAlgorithm(lbHashAlgorithm.ItemIndex); end; finally Free; end; end; { TfrmCheckSumCalc } procedure TfrmCheckSumCalc.cbSeparateFileChange(Sender: TObject); begin if cbSeparateFile.Checked then edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + '*.' + HashFileExt[FAlgorithm] else edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + ExtractFileName(FFileName) + '.' + HashFileExt[FAlgorithm]; cbOpenAfterJobIsComplete.Enabled:=not cbSeparateFile.Checked; end; procedure TfrmCheckSumCalc.edtSaveToChange(Sender: TObject); begin case Length(TrimHash(edtSaveTo.Text)) of 8: lbHashAlgorithm.ItemIndex:= Integer(HASH_SFV); 32: lbHashAlgorithm.ItemIndex:= Integer(HASH_MD5); 40: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA1); 64: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA256); 96: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA384); 128: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA512); end; end; procedure TfrmCheckSumCalc.FormCreate(Sender: TObject); var I: THashAlgorithm; begin edtSaveTo.Text:= FFileName + ExtensionSeparator; for I:= Low(HashName) to High(HashName) do begin lbHashAlgorithm.Items.Add(UpperCase(HashName[I])); end; InitPropStorage(Self); // Must be *after* lbHashAlgorithm.Items has been loaded so index is restored correctly. if (lbHashAlgorithm.ItemIndex=-1) AND (lbHashAlgorithm.Count>0) then lbHashAlgorithm.ItemIndex:= 0; end; procedure TfrmCheckSumCalc.lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); begin if lbHashAlgorithm.ItemIndex < 0 then Exit; FAlgorithm:= THashAlgorithm(lbHashAlgorithm.ItemIndex); edtSaveTo.Text:= ChangeFileExt(edtSaveTo.Text, '.' + HashFileExt[FAlgorithm]); end; constructor TfrmCheckSumCalc.Create(TheOwner: TComponent; const FileName: String); begin FFileName:= FileName; inherited Create(TheOwner); end; end. doublecmd-1.1.30/src/fchecksumcalc.lrj0000644000175000001440000000257115104114162016665 0ustar alexxusers{"version":1,"strings":[ {"hash":124685262,"name":"tfrmchecksumcalc.caption","sourcebytes":[67,97,108,99,117,108,97,116,101,32,99,104,101,99,107,115,117,109,46,46,46],"value":"Calculate checksum..."}, {"hash":117557194,"name":"tfrmchecksumcalc.lblsaveto.caption","sourcebytes":[38,83,97,118,101,32,99,104,101,99,107,115,117,109,32,102,105,108,101,40,115,41,32,116,111,58],"value":"&Save checksum file(s) to:"}, {"hash":222079109,"name":"tfrmchecksumcalc.cbseparatefile.caption","sourcebytes":[67,38,114,101,97,116,101,32,115,101,112,97,114,97,116,101,32,99,104,101,99,107,115,117,109,32,102,105,108,101,32,102,111,114,32,101,97,99,104,32,102,105,108,101],"value":"C&reate separate checksum file for each file"}, {"hash":20936404,"name":"tfrmchecksumcalc.cbopenafterjobiscomplete.caption","sourcebytes":[79,112,101,110,32,99,104,101,99,107,115,117,109,32,102,105,108,101,32,97,102,116,101,114,32,106,111,98,32,105,115,32,99,111,109,112,108,101,116,101,100],"value":"Open checksum file after job is completed"}, {"hash":136754340,"name":"tfrmchecksumcalc.lblfileformat.caption","sourcebytes":[70,105,108,101,32,38,102,111,114,109,97,116],"value":"File &format"}, {"hash":235189939,"name":"tfrmchecksumcalc.rbwindows.caption","sourcebytes":[87,105,110,100,111,119,115],"value":"Windows"}, {"hash":378120,"name":"tfrmchecksumcalc.rbunix.caption","sourcebytes":[85,110,105,120],"value":"Unix"} ]} doublecmd-1.1.30/src/fchecksumcalc.lfm0000644000175000001440000000732715104114162016660 0ustar alexxusersinherited frmCheckSumCalc: TfrmCheckSumCalc Left = 321 Height = 400 Top = 59 Width = 400 AutoSize = True BorderIcons = [biSystemMenu] Caption = 'Calculate checksum...' ClientHeight = 400 ClientWidth = 400 Constraints.MinHeight = 400 Constraints.MinWidth = 400 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'cbOpenAfterJobIsComplete.Checked;cbSeparateFile.Checked;lbHashAlgorithm.ItemIndex' inherited pnlContent: TPanel Height = 346 Width = 384 ClientHeight = 346 ClientWidth = 384 ParentColor = True object lblSaveTo: TLabel[0] Left = 0 Height = 15 Top = 0 Width = 130 Caption = '&Save checksum file(s) to:' FocusControl = edtSaveTo ParentColor = False end object edtSaveTo: TEdit[1] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = lblSaveTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 21 Width = 384 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 0 end object cbSeparateFile: TCheckBox[2] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = edtSaveTo AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 50 Width = 242 BorderSpacing.Top = 6 Caption = 'C&reate separate checksum file for each file' OnChange = cbSeparateFileChange TabOrder = 1 end object lbHashAlgorithm: TListBox[3] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = rbWindows AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtSaveTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 0 Height = 219 Top = 125 Width = 384 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 ItemHeight = 0 OnSelectionChange = lbHashAlgorithmSelectionChange ScrollWidth = 150 TabOrder = 5 end object cbOpenAfterJobIsComplete: TCheckBox[4] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = cbSeparateFile AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 75 Width = 243 BorderSpacing.Top = 6 Caption = 'Open checksum file after job is completed' OnChange = cbSeparateFileChange TabOrder = 2 end object lblFileFormat: TLabel[5] AnchorSideLeft.Control = cbOpenAfterJobIsComplete AnchorSideTop.Control = rbWindows AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 102 Width = 57 BorderSpacing.Top = 6 Caption = 'File &format' FocusControl = rbWindows ParentColor = False end object rbWindows: TRadioButton[6] AnchorSideLeft.Control = lblFileFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbOpenAfterJobIsComplete AnchorSideTop.Side = asrBottom Left = 69 Height = 19 Top = 100 Width = 69 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = 'Windows' TabOrder = 3 end object rbUnix: TRadioButton[7] AnchorSideLeft.Control = rbWindows AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbWindows AnchorSideTop.Side = asrCenter Left = 144 Height = 19 Top = 100 Width = 44 BorderSpacing.Left = 6 Caption = 'Unix' TabOrder = 4 end end inherited pnlButtons: TPanel Top = 358 Width = 384 ClientWidth = 384 inherited btnCancel: TBitBtn Left = 202 end inherited btnOK: TBitBtn Left = 296 end end end doublecmd-1.1.30/src/fbuttonform.pas0000644000175000001440000001107615104114162016433 0ustar alexxusersunit fButtonForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Menus, uOperationsManager, uFileSource, uFormCommands; type { TfrmButtonForm } TfrmButtonForm = class(TForm, IFormCommands) btnAddToQueue: TBitBtn; btnCancel: TBitBtn; btnCreateSpecialQueue: TBitBtn; btnOK: TBitBtn; mnuNewQueue: TMenuItem; mnuQueue1: TMenuItem; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue4: TMenuItem; mnuQueue5: TMenuItem; pmQueuePopup: TPopupMenu; pnlContent: TPanel; pnlButtons: TPanel; procedure btnAddToQueueClick(Sender: TObject); procedure btnCreateSpecialQueueClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); private FCommands: TFormCommands; function GetQueueIdentifier: TOperationsManagerQueueIdentifier; property {%H-}Commands: TFormCommands read FCommands implements IFormCommands; protected procedure DoAutoSize; override; public constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent; FileSource: IFileSource); reintroduce; property QueueIdentifier: TOperationsManagerQueueIdentifier read GetQueueIdentifier; published procedure cm_AddToQueue(const Params: array of String); end; var frmButtonForm: TfrmButtonForm; implementation uses LCLStrConsts, DCStrUtils, uFileSourceProperty, uHotkeyManager, uGlobs; {$R *.lfm} const HotkeysCategory = 'Confirmation'; var FQueueIdentifier: TOperationsManagerQueueIdentifier = SingleQueueId; { TfrmButtonForm } procedure TfrmButtonForm.btnCreateSpecialQueueClick(Sender: TObject); begin btnCreateSpecialQueue.PopupMenu.PopUp; end; procedure TfrmButtonForm.btnAddToQueueClick(Sender: TObject); begin ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmButtonForm.btnOKClick(Sender: TObject); begin if FQueueIdentifier <> ModalQueueId then FQueueIdentifier := FreeOperationsQueueId; end; procedure TfrmButtonForm.mnuNewQueueClick(Sender: TObject); begin FQueueIdentifier := OperationsManager.GetNewQueueIdentifier; ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmButtonForm.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: TOperationsManagerQueueIdentifier; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin FQueueIdentifier := NewQueueNumber; ModalResult := btnAddToQueue.ModalResult; end; end; function TfrmButtonForm.GetQueueIdentifier: TOperationsManagerQueueIdentifier; begin Result:= FQueueIdentifier; end; procedure TfrmButtonForm.DoAutoSize; begin inherited DoAutoSize; if (btnCancel.Left - btnCreateSpecialQueue.BoundsRect.Right) < 16 then begin Constraints.MinWidth:= Width + (16 - (btnCancel.Left - btnCreateSpecialQueue.BoundsRect.Right)); end; end; constructor TfrmButtonForm.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; constructor TfrmButtonForm.Create(TheOwner: TComponent; FileSource: IFileSource); var HMForm: THMForm; Hotkey: THotkey; begin FCommands := TFormCommands.Create(Self); inherited Create(TheOwner); if FQueueIdentifier <= FreeOperationsQueueId then FQueueIdentifier:= SingleQueueId; btnAddToQueue.Caption:= btnAddToQueue.Caption + ' #' + IntToStr(FQueueIdentifier); if Assigned(FileSource) and (fspListOnMainThread in FileSource.Properties) then begin btnAddToQueue.Visible:= False; FQueueIdentifier:= ModalQueueId; btnCreateSpecialQueue.Visible:= btnAddToQueue.Visible; end; HMForm := HotMan.Register(Self, HotkeysCategory); Hotkey := HMForm.Hotkeys.FindByCommand('cm_AddToQueue'); if Assigned(Hotkey) then btnAddToQueue.Caption := btnAddToQueue.Caption + ' (' + ShortcutsToText(Hotkey.Shortcuts) + ')'; end; procedure TfrmButtonForm.cm_AddToQueue(const Params: array of String); var Value: Integer; sQueueId: String; begin if FQueueIdentifier = ModalQueueId then Exit; if GetParamValue(Params, 'queueid', sQueueId) and TryStrToInt(sQueueId, Value) then begin if Value < 0 then mnuNewQueue.Click else FQueueIdentifier := Value end else FQueueIdentifier := SingleQueueId; ModalResult := btnAddToQueue.ModalResult; end; initialization TFormCommands.RegisterCommandsForm(TfrmButtonForm, HotkeysCategory, @rsMtConfirmation); end. doublecmd-1.1.30/src/fbuttonform.lfm0000644000175000001440000001321615104114162016424 0ustar alexxusersobject frmButtonForm: TfrmButtonForm Left = 634 Height = 402 Top = 161 Width = 609 ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 402 ClientWidth = 609 LCLVersion = '1.6.0.4' object pnlContent: TPanel Left = 8 Height = 348 Top = 8 Width = 593 Align = alClient AutoSize = True BevelOuter = bvNone TabOrder = 0 end object pnlButtons: TPanel AnchorSideTop.Side = asrBottom Left = 8 Height = 34 Top = 360 Width = 593 Align = alBottom Anchors = [akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 BevelOuter = bvNone ClientHeight = 34 ClientWidth = 593 TabOrder = 1 object btnAddToQueue: TBitBtn Left = 0 Height = 34 Top = 0 Width = 127 Align = alLeft AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'A&dd To Queue' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000004733AFF21824FFF638272FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF7ACFA4FF2C8C5AFF3D7659FFAEAEAEFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF82D8ACFF76D6A6FF3C9D6AFF27744CFFACAEADFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000009773FFF83DBAEFF1FC671FF72DEA7FF4BB27FFF177445FFA8ADAAFF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF83DCAFFF11C369FF1ACC73FF69DFA3FF5AC28DFF137643FF9EA7 A3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF10BD65FF11C167FF13C269FF59D395FF67C998FF167C 47FF889C92FF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0DB35EFF0EB660FF0EB660FF0DB45FFF47C484FF70CA 9CFF1D824DFF678C79FF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0CAA58FF12AE5EFF15AF60FF16AD61FF13AA5DFF3AB6 77FF75C79DFF288957FF4E8367FF000000000000000000000000000000000000 000004733AFFA9DCC1FF2EAD6BFF2BAD6AFF27AB68FF22A964FF1CA55FFF41B2 78FF78C69FFF298858FF678C79FF000000000000000000000000000000000000 000004733AFFA9DCC1FF36AD70FF32AC6DFF2DAA6AFF28A866FF58BC89FF78C5 9DFF1F804EFF839A8EFF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF3EB176FF3AAF73FF36AE70FF6FC598FF71BF97FF187B 49FFA6B0ABFF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF45B47BFF47B47CFF82CCA6FF67B68CFF177745FFC1C5 C3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA5DABFFF57BB87FF90D2B0FF5BAB82FF23774CFFD4D5D4FF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF9BD5B7FF4C9F73FF3D7D5CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA4D9BEFF3D9366FF5F8873FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF2D8859FF859C90FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 OnClick = btnAddToQueueClick TabOrder = 0 end object btnCreateSpecialQueue: TBitBtn Left = 127 Height = 34 Top = 0 Width = 23 Align = alLeft BorderSpacing.Right = 12 Glyph.Data = { 72000000424D7200000000000000360000002800000005000000030000000100 2000000000003C00000064000000640000000000000000000000000000000000 0000000000FF000000000000000000000000000000FF000000FF000000FF0000 0000000000FF000000FF000000FF000000FF000000FF } GlyphShowMode = gsmAlways Layout = blGlyphBottom OnClick = btnCreateSpecialQueueClick PopupMenu = pmQueuePopup TabOrder = 1 end object btnCancel: TBitBtn Left = 411 Height = 34 Top = 0 Width = 86 Align = alRight AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 2 end object btnOK: TBitBtn Left = 505 Height = 34 Top = 0 Width = 88 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 3 end end object pmQueuePopup: TPopupMenu Left = 280 Top = 280 object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end end end doublecmd-1.1.30/src/fbenchmark.pas0000644000175000001440000001127615104114162016170 0ustar alexxusersunit fBenchmark; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids, Contnrs, ButtonPanel, StdCtrls, uFile, uFileSourceOperation, uOSForms, uFileSourceCalcChecksumOperation; type { TfrmBenchmark } TfrmBenchmark = class(TAloneForm) ButtonPanel: TButtonPanel; lblBenchmarkSize: TLabel; stgResult: TStringGrid; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); end; { TBenchmarkResult } TBenchmarkResult = class Hash: String; Time: QWord; Speed: Double; end; { TBenchmarkOperation } TBenchmarkOperation = class(TFileSourceCalcChecksumOperation) private FFiles: TFiles; FBuffer: TBytes; FOwner: TCustomForm; FSpeedResult: TObjectList; FStatistics: TFileSourceCalcChecksumOperationStatistics; protected procedure MainExecute; override; procedure OnBenchmarkStateChanged(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(TheOwner: TCustomForm); reintroduce; destructor Destroy; override; end; implementation uses ISAAC, DCOSUtils, uFileSystemFileSource, uHash, uGlobs, uDCUtils; const cSize = 1024 * 1024 * 256; function CompareFunc(Item1, Item2: Pointer): Integer; begin if TBenchmarkResult(Item1).Time = TBenchmarkResult(Item2).Time then Result:= 0 else if TBenchmarkResult(Item1).Time < TBenchmarkResult(Item2).Time then Result:= -1 else begin Result:= +1; end; end; { TfrmBenchmark } procedure TfrmBenchmark.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; { TBenchmarkOperation } procedure TBenchmarkOperation.MainExecute; var ASize: Int64; AHash: String; ARandom: isaac_ctx; ABufferSize: Integer; Context: THashContext; Index: THashAlgorithm; AStart, AFinish: QWord; AResult: TBenchmarkResult; begin ABufferSize := gHashBlockSize; SetLength(FBuffer, ABufferSize); isaac_init(ARandom, Int32(GetTickCount64)); isaac_read(ARandom, @FBuffer[0], ABufferSize); ASize:= (cSize div ABufferSize) * ABufferSize; FStatistics.TotalFiles := (Length(HashName) - 1); FStatistics.TotalBytes:= ASize * FStatistics.TotalFiles; for Index := Low(THashAlgorithm) to Pred(High(THashAlgorithm)) do begin if Index = HASH_SFV then Continue; with FStatistics do begin CurrentFile := HashName[Index]; CurrentFileTotalBytes := ASize; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); AStart:= GetTickCountEx; HashInit(Context, Index); while FStatistics.CurrentFileDoneBytes < ASize do begin HashUpdate(Context, FBuffer[0], ABufferSize); with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + ABufferSize; DoneBytes := DoneBytes + ABufferSize; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end; HashFinal(Context, AHash); AFinish:= GetTickCountEx - AStart; Inc(FStatistics.DoneFiles); UpdateStatistics(FStatistics); AResult:= TBenchmarkResult.Create; AResult.Hash:= HashName[Index]; AResult.Time:= AFinish; AResult.Speed:= (cSize / (1024 * 1024)) / (AFinish / 1000); FSpeedResult.Add(AResult); end; FSpeedResult.Sort(@CompareFunc); end; procedure TBenchmarkOperation.OnBenchmarkStateChanged( Operation: TFileSourceOperation; AState: TFileSourceOperationState); var Index: Integer; AValue: TBenchmarkResult; begin if (AState = fsosStopped) and (Operation.Result = fsorFinished) then begin with TfrmBenchmark.Create(FOwner) do begin stgResult.BeginUpdate; stgResult.RowCount:= FSpeedResult.Count + 1; try for Index:= 0 to FSpeedResult.Count - 1 do begin AValue:= TBenchmarkResult(FSpeedResult[Index]); stgResult.Cells[0, Index + 1]:= AValue.Hash; stgResult.Cells[1, Index + 1]:= IntToStr(AValue.Time); stgResult.Cells[2, Index + 1]:= FloatToStrF(AValue.Speed, ffFixed, 15, 3); end; FreeAndNil(FSpeedResult); lblBenchmarkSize.Caption:= Format(lblBenchmarkSize.Caption, [cSize div (1024 * 1024)]); finally stgResult.EndUpdate(); end; Show; end; end; end; constructor TBenchmarkOperation.Create(TheOwner: TCustomForm); begin FOwner:= TheOwner; inherited Create(TFileSystemFileSource.GetFileSource, FFiles, EmptyStr, EmptyStr); AddStateChangedListener([fsosStopped], @OnBenchmarkStateChanged); FSpeedResult:= TObjectList.Create; Mode:= checksum_calc; end; destructor TBenchmarkOperation.Destroy; begin FSpeedResult.Free; inherited Destroy; end; {$R *.lfm} end. doublecmd-1.1.30/src/fbenchmark.lrj0000644000175000001440000000142415104114162016166 0ustar alexxusers{"version":1,"strings":[ {"hash":77557835,"name":"tfrmbenchmark.caption","sourcebytes":[66,101,110,99,104,109,97,114,107],"value":"Benchmark"}, {"hash":321688,"name":"tfrmbenchmark.stgresult.columns[0].title.caption","sourcebytes":[72,97,115,104],"value":"Hash"}, {"hash":57855833,"name":"tfrmbenchmark.stgresult.columns[1].title.caption","sourcebytes":[84,105,109,101,32,40,109,115,41],"value":"Time (ms)"}, {"hash":125308217,"name":"tfrmbenchmark.stgresult.columns[2].title.caption","sourcebytes":[83,112,101,101,100,32,40,77,66,47,115,41],"value":"Speed (MB/s)"}, {"hash":197921842,"name":"tfrmbenchmark.lblbenchmarksize.caption","sourcebytes":[66,101,110,99,104,109,97,114,107,32,100,97,116,97,32,115,105,122,101,58,32,37,100,32,77,66],"value":"Benchmark data size: %d MB"} ]} doublecmd-1.1.30/src/fbenchmark.lfm0000644000175000001440000000314615104114162016160 0ustar alexxusersobject frmBenchmark: TfrmBenchmark Left = 705 Height = 560 Top = 188 Width = 480 Caption = 'Benchmark' ClientHeight = 560 ClientWidth = 480 OnClose = FormClose Position = poOwnerFormCenter ShowInTaskBar = stAlways LCLVersion = '1.8.1.0' object stgResult: TStringGrid Left = 0 Height = 479 Top = 35 Width = 480 Align = alClient AutoEdit = False AutoFillColumns = True ColCount = 3 Columns = < item Title.Caption = 'Hash' Width = 159 end item Alignment = taRightJustify Title.Caption = 'Time (ms)' Width = 159 end item Alignment = taRightJustify Title.Caption = 'Speed (MB/s)' Width = 161 end> FixedCols = 0 Flat = True TabOrder = 0 ColWidths = ( 159 159 161 ) end object ButtonPanel: TButtonPanel Left = 6 Height = 34 Top = 520 Width = 468 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 1 ShowButtons = [pbClose] end object lblBenchmarkSize: TLabel Left = 10 Height = 15 Top = 10 Width = 460 Align = alTop Alignment = taCenter BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 BorderSpacing.Bottom = 10 Caption = 'Benchmark data size: %d MB' ParentColor = False end end doublecmd-1.1.30/src/fattributesedit.pas0000644000175000001440000001506315104114162017270 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Graphic control that allows choosing file attributes. Copyright (C) 2010 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit fAttributesEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, ExtCtrls, StdCtrls, Buttons; type { TfrmAttributesEdit } TfrmAttributesEdit = class(TForm) btnOk: TBitBtn; btnCancel: TBitBtn; btnReset: TButton; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; cbDirectory: TCheckBox; cbSymlink: TCheckBox; cbCompressed: TCheckBox; cbEncrypted: TCheckBox; cbTemporary: TCheckBox; cbSparse: TCheckBox; cbArchive: TCheckBox; cbHidden: TCheckBox; cbReadOnly: TCheckBox; cbSystem: TCheckBox; edtTextAttrs: TEdit; gbWinGeneral: TGroupBox; gbNtfsAttributes: TGroupBox; lblAttrBitsStr: TLabel; lblAttrGroupStr: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblTextAttrs: TLabel; lblExec: TLabel; lblRead: TLabel; lblWrite: TLabel; pnlTextAttrs: TPanel; pnlTopAttrs: TPanel; pnlUnixAttrs: TPanel; pnlWinAttrs: TPanel; pnlButtons: TPanel; procedure btnCancelClick(Sender: TObject); procedure btnOkClick(Sender: TObject); procedure btnResetClick(Sender: TObject); procedure cbAttrCheckBoxChanged(Sender: TObject); procedure cbAttrCheckBoxClicked(Sender: TObject); private FOnOk: TNotifyEvent; FUpdatingControls: Boolean; function GetAttrsAsText: String; procedure UpdateText; function GetCheckStr(CheckBox: TCheckBox; AttrStr: String): String; public constructor Create(TheOwner: TComponent); override; procedure Reset; property OnOk: TNotifyEvent read FOnOk write FOnOk; property AttrsAsText: String read GetAttrsAsText; end; implementation {$R *.lfm} uses LCLVersion; procedure TfrmAttributesEdit.btnOkClick(Sender: TObject); begin if Assigned(FOnOk) then FOnOk(Self); Close; end; procedure TfrmAttributesEdit.btnCancelClick(Sender: TObject); begin Close; end; procedure TfrmAttributesEdit.btnResetClick(Sender: TObject); begin Reset; end; procedure TfrmAttributesEdit.cbAttrCheckBoxChanged(Sender: TObject); begin {$if lcl_fullversion = 2000004} // Workaround: https://bugs.freepascal.org/view.php?id=35018 if csLoading in TCheckBox(Sender).ComponentState then Exit; {$endif} // Note: OnChange may work incorrectly with tri-state checkboxes, // so OnClick is also used. UpdateText; end; procedure TfrmAttributesEdit.cbAttrCheckBoxClicked(Sender: TObject); begin {$if lcl_fullversion >= 2000004} // Workaround: https://bugs.freepascal.org/view.php?id=35018 if csLoading in TCheckBox(Sender).ComponentState then Exit; {$endif} UpdateText; end; constructor TfrmAttributesEdit.Create(TheOwner: TComponent); begin FOnOk := nil; FUpdatingControls := False; inherited Create(TheOwner); {$IF DEFINED(MSWINDOWS)} pnlWinAttrs.Visible := True; {$ELSEIF DEFINED(UNIX)} pnlUnixAttrs.Visible := True; {$ENDIF} end; procedure TfrmAttributesEdit.Reset; begin FUpdatingControls := True; cbDirectory.State := cbGrayed; cbSymlink.State := cbGrayed; cbReadOwner.State := cbGrayed; cbWriteOwner.State := cbGrayed; cbExecOwner.State := cbGrayed; cbReadGroup.State := cbGrayed; cbWriteGroup.State := cbGrayed; cbExecGroup.State := cbGrayed; cbReadOther.State := cbGrayed; cbWriteOther.State := cbGrayed; cbExecOther.State := cbGrayed; cbSuid.State := cbGrayed; cbSgid.State := cbGrayed; cbSticky.State := cbGrayed; cbArchive.State := cbGrayed; cbReadOnly.State := cbGrayed; cbHidden.State := cbGrayed; cbSystem.State := cbGrayed; cbCompressed.State := cbGrayed; cbEncrypted.State := cbGrayed; cbTemporary.State := cbGrayed; cbSparse.State := cbGrayed; edtTextAttrs.Text := ''; edtTextAttrs.Text := ''; FUpdatingControls := False; end; function TfrmAttributesEdit.GetAttrsAsText: String; begin Result := edtTextAttrs.Text; end; procedure TfrmAttributesEdit.UpdateText; var s: string = ''; begin if not FUpdatingControls then begin FUpdatingControls := True; s := s + GetCheckStr(cbDirectory, 'd'); s := s + GetCheckStr(cbSymlink, 'l'); if pnlUnixAttrs.Visible then begin s := s + GetCheckStr(cbReadOwner, 'ur'); s := s + GetCheckStr(cbWriteOwner, 'uw'); s := s + GetCheckStr(cbExecOwner, 'ux'); s := s + GetCheckStr(cbReadGroup, 'gr'); s := s + GetCheckStr(cbWriteGroup, 'gw'); s := s + GetCheckStr(cbExecGroup, 'gx'); s := s + GetCheckStr(cbReadOther, 'or'); s := s + GetCheckStr(cbWriteOther, 'ow'); s := s + GetCheckStr(cbExecOther, 'ox'); s := s + GetCheckStr(cbSuid, 'us'); s := s + GetCheckStr(cbSgid, 'gs'); s := s + GetCheckStr(cbSticky, 'sb'); end; if pnlWinAttrs.Visible then begin s := s + GetCheckStr(cbArchive, 'a'); s := s + GetCheckStr(cbReadOnly, 'r'); s := s + GetCheckStr(cbHidden, 'h'); s := s + GetCheckStr(cbSystem, 's'); s := s + GetCheckStr(cbCompressed, 'c'); s := s + GetCheckStr(cbEncrypted, 'e'); s := s + GetCheckStr(cbTemporary, 't'); s := s + GetCheckStr(cbSparse, 'p'); end; edtTextAttrs.Text := s; FUpdatingControls := False; end; end; function TfrmAttributesEdit.GetCheckStr(CheckBox: TCheckBox; AttrStr: String): String; begin case CheckBox.State of cbChecked: Result := AttrStr + '+'; cbUnchecked: Result := AttrStr + '-'; else Result := ''; end; end; end. doublecmd-1.1.30/src/fattributesedit.lrj0000644000175000001440000000672615104114162017302 0ustar alexxusers{"version":1,"strings":[ {"hash":29800211,"name":"tfrmattributesedit.caption","sourcebytes":[67,104,111,111,115,101,32,97,116,116,114,105,98,117,116,101,115],"value":"Choose attributes"}, {"hash":184823547,"name":"tfrmattributesedit.cbsymlink.caption","sourcebytes":[38,83,121,109,108,105,110,107],"value":"&Symlink"}, {"hash":146283929,"name":"tfrmattributesedit.cbdirectory.caption","sourcebytes":[38,68,105,114,101,99,116,111,114,121],"value":"&Directory"}, {"hash":5694658,"name":"tfrmattributesedit.lblattrownerstr.caption","sourcebytes":[79,119,110,101,114],"value":"Owner"}, {"hash":6197413,"name":"tfrmattributesedit.lblwrite.caption","sourcebytes":[87,114,105,116,101],"value":"Write"}, {"hash":363380,"name":"tfrmattributesedit.lblread.caption","sourcebytes":[82,101,97,100],"value":"Read"}, {"hash":216771813,"name":"tfrmattributesedit.lblexec.caption","sourcebytes":[69,120,101,99,117,116,101],"value":"Execute"}, {"hash":5150400,"name":"tfrmattributesedit.lblattrgroupstr.caption","sourcebytes":[71,114,111,117,112],"value":"Group"}, {"hash":5680834,"name":"tfrmattributesedit.lblattrotherstr.caption","sourcebytes":[79,116,104,101,114],"value":"Other"}, {"hash":4787050,"name":"tfrmattributesedit.lblattrbitsstr.caption","sourcebytes":[66,105,116,115,58],"value":"Bits:"}, {"hash":362964,"name":"tfrmattributesedit.cbsuid.caption","sourcebytes":[83,85,73,68],"value":"SUID"}, {"hash":359380,"name":"tfrmattributesedit.cbsgid.caption","sourcebytes":[83,71,73,68],"value":"SGID"}, {"hash":95091241,"name":"tfrmattributesedit.cbsticky.caption","sourcebytes":[83,116,105,99,107,121],"value":"Sticky"}, {"hash":197332467,"name":"tfrmattributesedit.gbwingeneral.caption","sourcebytes":[71,101,110,101,114,97,108,32,97,116,116,114,105,98,117,116,101,115],"value":"General attributes"}, {"hash":143258213,"name":"tfrmattributesedit.cbarchive.caption","sourcebytes":[38,65,114,99,104,105,118,101],"value":"&Archive"}, {"hash":108290121,"name":"tfrmattributesedit.cbreadonly.caption","sourcebytes":[82,101,97,100,32,111,38,110,108,121],"value":"Read o&nly"}, {"hash":183478942,"name":"tfrmattributesedit.cbhidden.caption","sourcebytes":[38,72,105,100,100,101,110],"value":"&Hidden"}, {"hash":98609901,"name":"tfrmattributesedit.cbsystem.caption","sourcebytes":[83,38,121,115,116,101,109],"value":"S&ystem"}, {"hash":61805299,"name":"tfrmattributesedit.gbntfsattributes.caption","sourcebytes":[78,84,70,83,32,97,116,116,114,105,98,117,116,101,115],"value":"NTFS attributes"}, {"hash":130462964,"name":"tfrmattributesedit.cbcompressed.caption","sourcebytes":[67,111,38,109,112,114,101,115,115,101,100],"value":"Co&mpressed"}, {"hash":178444020,"name":"tfrmattributesedit.cbencrypted.caption","sourcebytes":[38,69,110,99,114,121,112,116,101,100],"value":"&Encrypted"}, {"hash":74723929,"name":"tfrmattributesedit.cbtemporary.caption","sourcebytes":[38,84,101,109,112,111,114,97,114,121],"value":"&Temporary"}, {"hash":97946053,"name":"tfrmattributesedit.cbsparse.caption","sourcebytes":[83,38,112,97,114,115,101],"value":"S&parse"}, {"hash":128423722,"name":"tfrmattributesedit.lbltextattrs.caption","sourcebytes":[65,115,32,116,101,38,120,116,58],"value":"As te&xt:"}, {"hash":45664708,"name":"tfrmattributesedit.btnreset.caption","sourcebytes":[38,82,101,115,101,116],"value":"&Reset"}, {"hash":11067,"name":"tfrmattributesedit.btnok.caption","sourcebytes":[38,79,75],"value":"&OK"}, {"hash":177752476,"name":"tfrmattributesedit.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/fattributesedit.lfm0000644000175000001440000003403515104114162017263 0ustar alexxusersobject frmAttributesEdit: TfrmAttributesEdit Left = 388 Height = 284 Top = 144 Width = 329 AutoSize = True BorderIcons = [biSystemMenu] Caption = 'Choose attributes' ClientHeight = 284 ClientWidth = 329 FormStyle = fsStayOnTop Position = poOwnerFormCenter ShowInTaskBar = stNever LCLVersion = '1.1' object pnlTopAttrs: TPanel Left = 0 Height = 23 Top = 5 Width = 329 Align = alTop AutoSize = True BorderSpacing.Top = 5 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 23 ClientWidth = 329 TabOrder = 0 object cbSymlink: TCheckBox Left = 58 Height = 23 Top = 0 Width = 72 AllowGrayed = True Caption = '&Symlink' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbDirectory: TCheckBox Left = 188 Height = 23 Top = 0 Width = 84 AllowGrayed = True Caption = '&Directory' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end end object pnlUnixAttrs: TPanel Left = 10 Height = 181 Top = 28 Width = 309 Align = alClient BorderSpacing.Left = 10 BorderSpacing.Right = 10 BevelOuter = bvNone ClientHeight = 181 ClientWidth = 309 TabOrder = 1 Visible = False object lblAttrOwnerStr: TLabel AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 33 Width = 46 Caption = 'Owner' ParentColor = False end object lblWrite: TLabel AnchorSideTop.Side = asrBottom Left = 176 Height = 18 Top = 8 Width = 38 BorderSpacing.Top = 8 Caption = 'Write' ParentColor = False end object lblRead: TLabel AnchorSideTop.Side = asrBottom Left = 104 Height = 18 Top = 8 Width = 32 BorderSpacing.Top = 8 Caption = 'Read' ParentColor = False end object lblExec: TLabel AnchorSideTop.Side = asrBottom Left = 240 Height = 18 Top = 8 Width = 53 BorderSpacing.Top = 8 Caption = 'Execute' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 59 Width = 41 Caption = 'Group' ParentColor = False end object lblAttrOtherStr: TLabel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 85 Width = 40 Caption = 'Other' ParentColor = False end object lblAttrBitsStr: TLabel AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 112 Width = 29 Caption = 'Bits:' ParentColor = False end object cbReadOwner: TCheckBox AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = lblWrite AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbExecOwner: TCheckBox AnchorSideTop.Control = lblExec AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbReadGroup: TCheckBox AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideTop.Control = cbWriteOwner AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideTop.Control = cbExecOwner AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 5 end object cbReadOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideTop.Control = cbWriteGroup AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 8 end object cbSuid: TCheckBox AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 110 Width = 57 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SUID' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 9 end object cbSgid: TCheckBox AnchorSideTop.Control = cbWriteOther AnchorSideTop.Side = asrBottom Left = 184 Height = 23 Top = 110 Width = 58 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SGID' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 10 end object cbSticky: TCheckBox AnchorSideTop.Control = cbExecOther AnchorSideTop.Side = asrBottom Left = 256 Height = 23 Top = 110 Width = 61 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'Sticky' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 11 end end object pnlWinAttrs: TPanel Left = 10 Height = 181 Top = 28 Width = 309 Align = alClient AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Right = 10 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 10 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 181 ClientWidth = 309 TabOrder = 2 Visible = False object gbWinGeneral: TGroupBox Left = 0 Height = 181 Top = 0 Width = 150 AutoSize = True Caption = 'General attributes' ChildSizing.LeftRightSpacing = 5 ChildSizing.TopBottomSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 158 ClientWidth = 146 Constraints.MinWidth = 150 TabOrder = 0 object cbArchive: TCheckBox Left = 30 Height = 23 Top = 12 Width = 86 AllowGrayed = True Caption = '&Archive' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbReadOnly: TCheckBox Left = 30 Height = 23 Top = 47 Width = 86 AllowGrayed = True Caption = 'Read o&nly' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbHidden: TCheckBox Left = 30 Height = 23 Top = 82 Width = 86 AllowGrayed = True Caption = '&Hidden' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbSystem: TCheckBox Left = 30 Height = 23 Top = 117 Width = 86 AllowGrayed = True Caption = 'S&ystem' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end end object gbNtfsAttributes: TGroupBox Left = 160 Height = 181 Top = 0 Width = 150 AutoSize = True Caption = 'NTFS attributes' ChildSizing.LeftRightSpacing = 5 ChildSizing.TopBottomSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 158 ClientWidth = 146 Constraints.MinWidth = 150 TabOrder = 1 object cbCompressed: TCheckBox Left = 22 Height = 23 Top = 12 Width = 103 AllowGrayed = True Caption = 'Co&mpressed' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbEncrypted: TCheckBox Left = 22 Height = 23 Top = 47 Width = 103 AllowGrayed = True Caption = '&Encrypted' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbTemporary: TCheckBox Left = 22 Height = 23 Top = 82 Width = 103 AllowGrayed = True Caption = '&Temporary' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbSparse: TCheckBox Left = 22 Height = 23 Top = 117 Width = 103 AllowGrayed = True Caption = 'S&parse' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end end end object pnlTextAttrs: TPanel Left = 10 Height = 28 Top = 214 Width = 309 Align = alBottom AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Top = 5 BorderSpacing.Right = 10 BevelOuter = bvNone ClientHeight = 28 ClientWidth = 309 TabOrder = 3 object lblTextAttrs: TLabel AnchorSideLeft.Control = pnlTextAttrs AnchorSideTop.Control = pnlTextAttrs AnchorSideTop.Side = asrCenter Left = 0 Height = 18 Top = 5 Width = 53 Caption = 'As te&xt:' FocusControl = edtTextAttrs ParentColor = False end object edtTextAttrs: TEdit AnchorSideLeft.Control = lblTextAttrs AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTextAttrs AnchorSideRight.Side = asrBottom Left = 63 Height = 28 Top = 0 Width = 246 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ReadOnly = True TabOrder = 0 end end object pnlButtons: TPanel Left = 5 Height = 32 Top = 247 Width = 319 Align = alBottom AutoSize = True BorderSpacing.Around = 5 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 10 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 32 ClientWidth = 319 TabOrder = 4 object btnReset: TButton Left = 0 Height = 32 Top = 0 Width = 87 Caption = '&Reset' OnClick = btnResetClick TabOrder = 0 end object btnOk: TBitBtn Left = 97 Height = 32 Top = 0 Width = 94 Caption = '&OK' Constraints.MinHeight = 30 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOkClick TabOrder = 1 end object btnCancel: TBitBtn Left = 201 Height = 32 Top = 0 Width = 118 Cancel = True Caption = '&Cancel' Constraints.MinHeight = 30 Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 2 end end end doublecmd-1.1.30/src/fMsg.pas0000644000175000001440000000610515104114162014757 0ustar alexxusersunit fMsg; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls, Menus, uOSForms; type { TfrmMsg } TfrmMsg = class(TModalForm) lblMsg: TLabel; pnlButtons: TPanel; mnuOther: TPopupMenu; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyPress(Sender: TObject; var Key: Char); public ActionHandler: procedure(Tag: PtrInt) of object; Escape: Integer; iSelected: Integer; procedure ButtonClick(Sender:TObject); procedure ButtonOtherClick(Sender:TObject); procedure MouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; implementation {$R *.lfm} uses LCLType, LazUTF8, Clipbrd; procedure TfrmMsg.FormCreate(Sender: TObject); begin Escape:= -1; iSelected:= -1; pnlButtons.ParentColor:= true; end; procedure TfrmMsg.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin if (iSelected = -1) and (Escape >= 0) then iSelected:= Escape; end; procedure TfrmMsg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Index: Integer; NextOrder: Integer; begin if (Key in [VK_UP, VK_DOWN]) and (ActiveControl is TButton) then begin NextOrder:= pnlButtons.ChildSizing.ControlsPerLine; if Key = VK_UP then NextOrder:= -NextOrder; NextOrder:= ActiveControl.TabOrder + NextOrder; for Index:= 0 to pnlButtons.ControlCount - 1 do begin if pnlButtons.Controls[Index] is TButton then begin if NextOrder = TButton(pnlButtons.Controls[Index]).TabOrder then begin ActiveControl:= TButton(pnlButtons.Controls[Index]); Key:= 0; Break; end; end; end; end else if (Key = VK_C) and (ssModifier in Shift) then begin Clipboard.AsText:= Caption + LineEnding + StringOfChar('-', UTF8Length(Caption)) + LineEnding + LineEnding + lblMsg.Caption; end; end; procedure TfrmMsg.ButtonClick(Sender: TObject); var aTag: PtrInt; begin aTag:= (Sender as TComponent).Tag; if (aTag < -1) then begin if Assigned(ActionHandler) then ActionHandler(aTag); end else begin iSelected:= aTag; Close; end; end; procedure TfrmMsg.MouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} if (Button = mbLeft) and (Sender = FindLCLControl(Mouse.CursorPos)) then begin ButtonClick(Sender); end; {$ENDIF} end; procedure TfrmMsg.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key = #27) and (Escape >= 0) then begin Key:= #0; iSelected:= Escape; Close; end; end; procedure TfrmMsg.ButtonOtherClick(Sender: TObject); var Point: TPoint; Button: TButton absolute Sender; begin Point.X:= Button.Left; Point.Y:= Button.Top + Button.Height; Point:= pnlButtons.ClientToScreen(Point); mnuOther.PopUp(Point.X, Point.Y); end; end. doublecmd-1.1.30/src/fMsg.lrj0000644000175000001440000000025015104114162014756 0ustar alexxusers{"version":1,"strings":[ {"hash":16852869,"name":"tfrmmsg.lblmsg.caption","sourcebytes":[52,53,54,52,53,54,52,54,53,52,54,53,52,54,53],"value":"456456465465465"} ]} doublecmd-1.1.30/src/fMsg.lfm0000644000175000001440000000263315104114162014754 0ustar alexxusersobject frmMsg: TfrmMsg Left = 572 Height = 254 Top = 233 Width = 426 HorzScrollBar.Page = 425 VertScrollBar.Page = 253 AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 254 ClientWidth = 426 Constraints.MinWidth = 250 DefaultMonitor = dmMainForm KeyPreview = True OnClose = FormClose OnCreate = FormCreate OnKeyDown = FormKeyDown OnKeyPress = FormKeyPress LCLVersion = '1.6.0.4' object lblMsg: TLabel AnchorSideRight.Side = asrBottom Left = 12 Height = 18 Top = 12 Width = 402 Align = alTop BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 12 Caption = '456456465465465' ParentColor = False ShowAccelChar = False end object pnlButtons: TPanel AnchorSideBottom.Side = asrBottom Left = 12 Height = 200 Top = 42 Width = 402 Align = alClient AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 12 BorderSpacing.Bottom = 12 BevelOuter = bvNone ChildSizing.LeftRightSpacing = 12 ChildSizing.HorizontalSpacing = 12 ChildSizing.VerticalSpacing = 4 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 3 TabOrder = 0 end object mnuOther: TPopupMenu left = 120 top = 48 end end doublecmd-1.1.30/src/fFindDlg.pas0000644000175000001440000026275315104114162015555 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Find dialog, with searching in thread Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fFindDlg; {$mode objfpc}{$H+} {$include calling.inc} interface uses Graphics, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Menus, EditBtn, Spin, Buttons, DateTimePicker, KASComboBox, KASButton, fAttributesEdit, uDsxModule, DsxPlugin, uFindThread, uFindFiles, uRegExprU, uSearchTemplate, fSearchPlugin, uFileView, types, DCStrUtils, ActnList, uOSForms, uShellContextMenu, uExceptions, uFileSystemFileSource, uFormCommands, uHotkeyManager, LCLVersion, uWcxModule, uFileSource; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} {$DEFINE FIX_DEFAULT} {$ENDIF} const HotkeysCategory = 'Find files'; type { TfrmFindDlg } TfrmFindDlg = class(TModalForm, IFormCommands) actIntelliFocus: TAction; actCancel: TAction; actClose: TAction; actEdit: TAction; actGoToFile: TAction; actFeedToListbox: TAction; actCancelClose: TAction; actPagePrev: TAction; actPageNext: TAction; actPageResults: TAction; actPageLoadSave: TAction; actPagePlugins: TAction; actPageAdvanced: TAction; actPageStandard: TAction; actView: TAction; actLastSearch: TAction; actNewSearch: TAction; actStart: TAction; actList: TActionList; Bevel2: TBevel; Bevel3: TBevel; btnAddAttribute: TButton; btnAttrsHelp: TButton; btnClose: TButton; btnGoToPath: TButton; btnNewSearch: TButton; btnLastSearch: TButton; btnSaveTemplate: TButton; btnSearchDelete: TButton; btnSearchLoad: TButton; btnSearchSave: TButton; btnSearchSaveWithStartingPath: TButton; btnStart: TButton; btnUseTemplate: TButton; btnStop: TButton; btnView: TButton; btnEdit: TButton; btnWorkWithFound: TButton; cbFindText: TCheckBox; cbNotContainingText: TCheckBox; cbDateFrom: TCheckBox; cbNotOlderThan: TCheckBox; cbFileSizeFrom: TCheckBox; cbDateTo: TCheckBox; cbFileSizeTo: TCheckBox; cbReplaceText: TCheckBox; cbTimeFrom: TCheckBox; cbTimeTo: TCheckBox; cbPartialNameSearch: TCheckBox; cbFollowSymLinks: TCheckBox; cbUsePlugin: TCheckBox; cbSelectedFiles: TCheckBox; cbTextRegExp: TCheckBox; cbFindInArchive: TCheckBox; cbOpenedTabs: TCheckBox; cbOfficeXML: TCheckBox; chkDuplicateContent: TCheckBox; chkDuplicateSize: TCheckBox; chkDuplicateHash: TCheckBox; chkDuplicateName: TCheckBox; chkDuplicates: TCheckBox; chkHex: TCheckBox; cmbExcludeDirectories: TComboBoxWithDelItems; cmbNotOlderThanUnit: TComboBox; cmbFileSizeUnit: TComboBox; cmbEncoding: TComboBox; cmbSearchDepth: TComboBox; cbRegExp: TCheckBox; cmbPlugin: TComboBox; cmbReplaceText: TComboBoxWithDelItems; cmbFindText: TComboBoxWithDelItems; cmbExcludeFiles: TComboBoxWithDelItems; edtAttrib: TEdit; cmbFindPathStart: TComboBoxWithDelItems; frmContentPlugins: TfrmSearchPlugin; gbDirectories: TGroupBox; gbFiles: TGroupBox; btnEncoding: TKASButton; lblAttributes: TLabel; lblExcludeDirectories: TLabel; lblCurrent: TLabel; lblExcludeFiles: TLabel; lblFound: TLabel; lblStatus: TLabel; lblTemplateHeader: TLabel; lbSearchTemplates: TListBox; lblSearchContents: TPanel; lblSearchDepth: TLabel; lblEncoding: TLabel; lsFoundedFiles: TListBox; CheksPanel: TPanel; miOpenInNewTab: TMenuItem; miShowInEditor: TMenuItem; miShowAllFound: TMenuItem; miRemoveFromLlist: TMenuItem; pnlDuplicates: TPanel; pnlDirectoriesDepth: TPanel; pnlLoadSaveBottomButtons: TPanel; pnlLoadSaveBottom: TPanel; pnlButtons: TPanel; pnlResultsBottomButtons: TPanel; pnlResults: TPanel; pnlStatus: TPanel; pnlResultsBottom: TPanel; seNotOlderThan: TSpinEdit; seFileSizeFrom: TSpinEdit; seFileSizeTo: TSpinEdit; pnlFindFile: TPanel; pgcSearch: TPageControl; btnChooseFolder: TSpeedButton; tsPlugins: TTabSheet; tsResults: TTabSheet; tsLoadSave: TTabSheet; tsStandard: TTabSheet; lblFindPathStart: TLabel; lblFindFileMask: TLabel; cmbFindFileMask: TComboBoxWithDelItems; gbFindData: TGroupBox; cbCaseSens: TCheckBox; tsAdvanced: TTabSheet; PopupMenuFind: TPopupMenu; miShowInViewer: TMenuItem; ZVDateFrom: TDateTimePicker; ZVDateTo: TDateTimePicker; ZVTimeFrom: TDateTimePicker; ZVTimeTo: TDateTimePicker; actFreeFromMem: TAction; actFreeFromMemAllOthers: TAction; actConfigFileSearchHotKeys: TAction; actNewSearchClearFilters: TAction; mmMainMenu: TMainMenu; miNewSearchClearFilters: TMenuItem; miConfigFileSearchHotKeys: TMenuItem; miOptions: TMenuItem; miAction: TMenuItem; miNewSearch: TMenuItem; miLastSearch: TMenuItem; miStart: TMenuItem; miCancel: TMenuItem; miFreeFromMem: TMenuItem; miFreeFromMemAllOthers: TMenuItem; miSeparator1: TMenuItem; miCancelClose: TMenuItem; miClose: TMenuItem; miViewTab: TMenuItem; miPageStandard: TMenuItem; miPageAdvanced: TMenuItem; miPagePlugins: TMenuItem; miPageLoadSave: TMenuItem; miPageResults: TMenuItem; miSeparator2: TMenuItem; miResult: TMenuItem; miView: TMenuItem; miEdit: TMenuItem; miFeedToListbox: TMenuItem; miGoToFile: TMenuItem; procedure actExecute(Sender: TObject); procedure btnAddAttributeClick(Sender: TObject); procedure btnAttrsHelpClick(Sender: TObject); procedure btnEncodingClick(Sender: TObject); procedure btnNewSearchKeyDown(Sender: TObject; var Key: word; {%H-}Shift: TShiftState); procedure btnSearchDeleteClick(Sender: TObject); procedure btnSearchLoadClick(Sender: TObject); procedure btnSearchSaveWithStartingPathClick(Sender: TObject); procedure btnSearchSaveClick(Sender: TObject); procedure cbCaseSensChange(Sender: TObject); procedure cbDateFromChange(Sender: TObject); procedure cbDateToChange(Sender: TObject); procedure cbFindInArchiveChange(Sender: TObject); procedure cbOfficeXMLChange(Sender: TObject); procedure cbOpenedTabsChange(Sender: TObject); procedure cbPartialNameSearchChange(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure cbTextRegExpChange(Sender: TObject); procedure cbSelectedFilesChange(Sender: TObject); procedure chkDuplicateContentChange(Sender: TObject); procedure chkDuplicateHashChange(Sender: TObject); procedure chkDuplicatesChange(Sender: TObject); procedure chkDuplicateSizeChange(Sender: TObject); procedure chkHexChange(Sender: TObject); procedure cmbEncodingSelect(Sender: TObject); procedure cbFindTextChange(Sender: TObject); procedure cbUsePluginChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnSelDirClick(Sender: TObject); procedure cbFileSizeFromChange(Sender: TObject); procedure cbFileSizeToChange(Sender: TObject); procedure cbNotOlderThanChange(Sender: TObject); procedure cbReplaceTextChange(Sender: TObject); procedure cbTimeFromChange(Sender: TObject); procedure cbTimeToChange(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormDestroy(Sender: TObject); {$IF DEFINED(FIX_DEFAULT)} procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); {$ENDIF} procedure frmFindDlgClose(Sender: TObject; var {%H-}CloseAction: TCloseAction); procedure frmFindDlgShow(Sender: TObject); procedure gbDirectoriesResize(Sender: TObject); procedure lbSearchTemplatesDblClick(Sender: TObject); procedure lbSearchTemplatesSelectionChange(Sender: TObject; {%H-}User: boolean); procedure lsFoundedFilesDblClick(Sender: TObject); procedure lsFoundedFilesKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure lsFoundedFilesMouseDown(Sender: TObject; Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: integer); procedure lsFoundedFilesMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); procedure lsFoundedFilesMouseWheelDown(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var Handled: boolean); procedure lsFoundedFilesMouseWheelUp(Sender: TObject; Shift: TShiftState; {%H-}MousePos: TPoint; var Handled: boolean); procedure miOpenInNewTabClick(Sender: TObject); procedure miRemoveFromLlistClick(Sender: TObject); procedure miShowAllFoundClick(Sender: TObject); procedure miShowInEditorClick(Sender: TObject); procedure miShowInViewerClick(Sender: TObject); procedure pgcSearchChange(Sender: TObject); procedure seFileSizeFromChange(Sender: TObject); procedure seFileSizeToChange(Sender: TObject); procedure seNotOlderThanChange(Sender: TObject); procedure tsLoadSaveShow(Sender: TObject); procedure tsStandardEnter(Sender: TObject); procedure ZVDateFromChange(Sender: TObject); procedure ZVDateToChange(Sender: TObject); procedure ZVTimeFromChange(Sender: TObject); procedure ZVTimeToChange(Sender: TObject); procedure PopupMenuFindPopup(Sender: TObject); function GetTextSearchOptions: UIntPtr; procedure CancelCloseAndFreeMem; procedure LoadHistory; procedure SaveHistory; procedure LoadPlugins; private FSelectedFiles: TStringList; FFindThread: TFindThread; FTimeSearch: string; DsxPlugins: TDSXModuleList; FSearchingActive: boolean; FFrmAttributesEdit: TfrmAttributesEdit; FLastTemplateName: string; FLastSearchTemplate: TSearchTemplate; FUpdateTimer: TTimer; FUpdating: boolean; FRButtonPanelSender: TObject; // last focused button on Right Panel (pnlButtons) FCommands: TFormCommands; FSearchWithDSXPluginInProgress: boolean; FSearchWithWDXPluginInProgress: boolean; FFreeOnClose: boolean; FAtLeastOneSearchWasDone: boolean; FFileSource: IFileSource; FWcxModule: TWcxModule; property Commands: TFormCommands read FCommands implements IFormCommands; procedure DisableControlsForTemplate; procedure StopSearch; procedure AfterSearchStopped; //update button states after stop search(ThreadTerminate call this method) procedure AfterSearchFocus; //set correct focus after search stopped procedure UpdateEncodings; function GetEncodings(AList: TCustomComboBox): String; procedure SetEncodings(const AEncodings: String; AList: TCustomComboBox); procedure FindInArchive(AFileView: TFileView); procedure FillFindOptions(out FindOptions: TSearchTemplateRec; SetStartPath: boolean); procedure FindOptionsToDSXSearchRec(const AFindOptions: TSearchTemplateRec; out SRec: TDsxSearchRecord); procedure FoundedStringCopyAdded(Sender: TObject); procedure FoundedStringCopyChanged(Sender: TObject); procedure LoadTemplate(const Template: TSearchTemplateRec); procedure LoadSelectedTemplate; procedure SaveTemplate(SaveStartingPath: boolean); procedure SelectTemplate(const ATemplateName: string); procedure UpdateTemplatesList; procedure OnUpdateTimer(Sender: TObject); procedure OnAddAttribute(Sender: TObject); function InvalidRegExpr: Boolean; procedure SetWindowCaption(AWindowCaptionStyle: byte); function ObjectType(Index: Integer): TCheckBoxState; function GetFileMask: String; public FoundedStringCopy: TStringList; class function Instance: TfrmFindDlg; public LastClickResultsPath: string; constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure ClearFilter(bClearSearchLocation: boolean = True); procedure ClearResults; procedure ThreadTerminate(Sender: TObject); procedure EnableControls(AEnabled: Boolean); procedure FocusOnResults(Sender: TObject); // if press VK_LEFT or VK_RIGHT when on any button on left panel - focus on results and remember button in FRButtonPanelSender published procedure cm_IntelliFocus(const {%H-}Params: array of string); procedure cm_Start(const {%H-}Params: array of string); procedure cm_CancelClose(const {%H-}Params: array of string); procedure cm_Cancel(const {%H-}Params: array of string); procedure cm_Close(const {%H-}Params: array of string); procedure cm_NewSearch(const {%H-}Params: array of string); procedure cm_LastSearch(const {%H-}Params: array of string); procedure cm_View(const {%H-}Params: array of string); procedure cm_Edit(const {%H-}Params: array of string); procedure cm_GoToFile(const {%H-}Params: array of string); procedure cm_FeedToListbox(const {%H-}Params: array of string); procedure cm_PageNext(const Params: array of string); procedure cm_PagePrev(const Params: array of string); procedure cm_PageStandard(const {%H-}Params: array of string); procedure cm_PageAdvanced(const {%H-}Params: array of string); procedure cm_PagePlugins(const {%H-}Params: array of string); procedure cm_PageLoadSave(const {%H-}Params: array of string); procedure cm_PageResults(const {%H-}Params: array of string); procedure cm_NewSearchClearFilters(const {%H-}Params: array of string); procedure cm_FreeFromMem(const {%H-}Params: array of string); procedure cm_FreeFromMemAllOthers(const {%H-}Params: array of string); procedure cm_ConfigFileSearchHotKeys(const {%H-}Params: array of string); end; {en Shows the find files dialog. Cannot store FileView reference as it might get destroyed while Find Dialog is running. We can store FileSource though, if needed in future (as it is reference counted). @param(FileView For which file view the find dialog is executed, to get file source, current path and a list of selected files.) } { TListOffrmFindDlgInstance } TListOffrmFindDlgInstance = class(TList) private function GetfrmFindDlgInstance(Index: integer): TfrmFindDlg; public constructor Create; procedure Clear; override; function Add(AfrmFindDlg: TfrmFindDlg): integer; property frmFindDlgInstance[Index: integer]: TfrmFindDlg read GetfrmFindDlgInstance; end; var // [ ListOffrmFindDlgInstance ] // This list will hold in memory pointers to our find dialog forms. ListOffrmFindDlgInstance: TListOffrmFindDlgInstance; frmFindDlgUsingPluginDSX: TfrmFindDlg = nil; frmFindDlgUsingPluginWDX: TfrmFindDlg = nil; procedure ShowFindDlg(FileView: TFileView; const TemplateName: string; bCreateNewFindDlg: boolean = False); function ShowDefineTemplateDlg(var TemplateName: string): boolean; function ShowUseTemplateDlg(var Template: TSearchTemplate): boolean; implementation {$R *.lfm} uses LCLProc, LCLType, LConvEncoding, StrUtils, HelpIntfs, fViewer, fMain, uLng, uGlobs, uShowForm, uDCUtils, uFileSourceUtil, uOfficeXML, uSearchResultFileSource, uFile, uFileProperty, uColumnsFileView, uFileViewNotebook, uKeyboard, uOSUtils, uArchiveFileSourceUtil, DCOSUtils, uRegExprA, uRegExprW, uDebug, uShowMsg, uConvEncoding, uColumns, uFileFunctions, uFileSorting, uWcxArchiveFileSource, DCConvertEncoding, WcxPlugin, fChooseEncoding, dmCommonData {$IFDEF DARKWIN} , uDarkStyle {$ENDIF} ; const TimeUnitToComboIndex: array[TTimeUnit] of integer = (0, 1, 2, 3, 4, 5, 6); ComboIndexToTimeUnit: array[0..6] of TTimeUnit = (tuSecond, tuMinute, tuHour, tuDay, tuWeek, tuMonth, tuYear); FileSizeUnitToComboIndex: array[TFileSizeUnit] of integer = (0, 1, 2, 3, 4); ComboIndexToFileSizeUnit: array[0..4] of TFileSizeUnit = (suBytes, suKilo, suMega, suGiga, suTera); wcs_NewSearch = $01; wcs_StartSearch = $0A; wcs_EndSearch = $1B; type { TStringListTemp } TStringListTemp = class(TStringList) public function AddObject(const S: string; AObject: TObject): integer; override; end; var gSearchWithDSXPluginInProgress: boolean = False; gSearchWithWDXPluginInProgress: boolean = False; { TListOffrmFindDlgInstance.Create } constructor TListOffrmFindDlgInstance.Create; begin inherited Create; end; { TListOffrmFindDlgInstance.Clear } procedure TListOffrmFindDlgInstance.Clear; var i: integer; begin for i := pred(Count) downto 0 do if frmFindDlgInstance[i] <> nil then frmFindDlgInstance[i].Free; inherited Clear; end; { TListOffrmFindDlgInstance.Add } function TListOffrmFindDlgInstance.Add(AfrmFindDlg: TfrmFindDlg): integer; begin Result := inherited Add(AfrmFindDlg); end; { TListOffrmFindDlgInstance.GetfrmFindDlgInstance } function TListOffrmFindDlgInstance.GetfrmFindDlgInstance(Index: integer): TfrmFindDlg; begin Result := TfrmFindDlg(Items[Index]); end; procedure SAddFileProc({%H-}PlugNr: integer; FoundFile: PChar); dcpcall; var s: string; begin s := string(FoundFile); if s = '' then begin TfrmFindDlg.Instance.AfterSearchStopped; TfrmFindDlg.Instance.btnStart.Default := True; end else begin TfrmFindDlg.Instance.FoundedStringCopy.Add(s); Application.ProcessMessages; end; end; procedure SUpdateStatusProc({%H-}PlugNr: integer; CurrentFile: PChar; FilesScanned: integer); dcpcall; var sCurrentFile: string; begin sCurrentFile := string(CurrentFile); TfrmFindDlg.Instance.lblStatus.Caption := Format(rsFindScanned, [FilesScanned]) + TfrmFindDlg.Instance.FTimeSearch; if sCurrentFile = '' then TfrmFindDlg.Instance.lblCurrent.Caption := '' else TfrmFindDlg.Instance.lblCurrent.Caption := rsFindScanning + ': ' + sCurrentFile; Application.ProcessMessages; end; { ShowFindDlg } procedure ShowFindDlg(FileView: TFileView; const TemplateName: string; bCreateNewFindDlg: boolean = False); var ASelectedFiles: TFiles = nil; I: integer; AfrmFindDlgInstance: TfrmFindDlg; bFirstFindDlg: boolean; begin if not Assigned(FileView) then raise Exception.Create('ShowFindDlg: FileView=nil'); bFirstFindDlg := (ListOffrmFindDlgInstance.Count = 0); // 1. We create a new form: if it's the first search we do OR if we've been instructed to do so (cm_AddNewSearch) if bFirstFindDlg or bCreateNewFindDlg then begin AfrmFindDlgInstance := TfrmFindDlg.Create(nil); ListOffrmFindDlgInstance.add(AfrmFindDlgInstance); end else begin AfrmFindDlgInstance := ListOffrmFindDlgInstance.frmFindDlgInstance[pred(ListOffrmFindDlgInstance.Count)]; end; // 2. If we don't have a search in progress, then clear and set a few things. if not AfrmFindDlgInstance.FSearchingActive then begin with AfrmFindDlgInstance do begin // Prepare window for search files LoadHistory; LoadPlugins; ClearFilter; // SetWindowCaption(wcs_NewSearch); cmbFindPathStart.Text := FileView.CurrentPath; // Get paths of selected files, if any. FSelectedFiles.Clear; ASelectedFiles := FileView.CloneSelectedFiles; if Assigned(ASelectedFiles) then try if ASelectedFiles.Count > 0 then begin for I := 0 to ASelectedFiles.Count - 1 do FSelectedFiles.Add(ASelectedFiles[I].FullPath); end; finally FreeAndNil(ASelectedFiles); end; FindInArchive(FileView); if Length(TemplateName) > 0 then begin FUpdating := True; UpdateTemplatesList; SelectTemplate(TemplateName); LoadSelectedTemplate; FUpdating := False; end; end; end; AfrmFindDlgInstance.ShowOnTop; end; { ShowDefineTemplateDlg } function ShowDefineTemplateDlg(var TemplateName: string): boolean; var AIndex: integer; AForm: TfrmFindDlg; begin AForm := TfrmFindDlg.Create(nil); try with AForm do begin // Prepare window for define search template LoadHistory; LoadPlugins; Caption := rsFindDefineTemplate; DisableControlsForTemplate; btnSaveTemplate.Visible := True; btnSaveTemplate.Default := True; BorderIcons := [biSystemMenu, biMaximize]; if Length(TemplateName) > 0 then begin UpdateTemplatesList; AIndex := lbSearchTemplates.Items.IndexOf(TemplateName); if AIndex >= 0 then begin lbSearchTemplates.ItemIndex := AIndex; AForm.LoadSelectedTemplate; end; end; Result := (ShowModal = mrOk); if Result and (lbSearchTemplates.Count > 0) then begin TemplateName := FLastTemplateName; end; end; finally AForm.Free; end; end; { ShowUseTemplateDlg } function ShowUseTemplateDlg(var Template: TSearchTemplate): boolean; var AForm: TfrmFindDlg; SearchRec: TSearchTemplateRec; begin AForm := TfrmFindDlg.Create(nil); try with AForm do begin // Prepare window for define search template LoadHistory; LoadPlugins; Caption := rsFindDefineTemplate; DisableControlsForTemplate; btnUseTemplate.Visible := True; btnUseTemplate.Default := True; BorderIcons := [biSystemMenu, biMaximize]; if Assigned(Template) then AForm.LoadTemplate(Template.SearchRecord); Result := (ShowModal = mrOk); if Result then begin if not Assigned(Template) then Template := TSearchTemplate.Create; try Template.TemplateName := AForm.FLastTemplateName; AForm.FillFindOptions(SearchRec, False); Template.SearchRecord := SearchRec; except FreeAndNil(Template); raise; end; end; end; finally AForm.Free; end; end; { TStringListTemp } { TStringListTemp.AddObject } function TStringListTemp.AddObject(const S: string; AObject: TObject): integer; begin Result := Count; InsertItem(Result, S, AObject); end; { TfrmFindDlg } { TfrmFindDlg.FormCreate } procedure TfrmFindDlg.FormCreate(Sender: TObject); var I: integer; HMFindFiles: THMForm; begin if not gShowMenuBarInFindFiles then FreeAndNil(mmMainMenu); DsxPlugins := TDSXModuleList.Create; FoundedStringCopy := TStringListTemp.Create; FoundedStringCopy.OwnsObjects := True; FFreeOnClose := False; FAtLeastOneSearchWasDone := False; FSearchWithDSXPluginInProgress := False; FSearchWithWDXPluginInProgress := False; // load language cmbNotOlderThanUnit.Items.Add(rsTimeUnitSecond); cmbNotOlderThanUnit.Items.Add(rsTimeUnitMinute); cmbNotOlderThanUnit.Items.Add(rsTimeUnitHour); cmbNotOlderThanUnit.Items.Add(rsTimeUnitDay); cmbNotOlderThanUnit.Items.Add(rsTimeUnitWeek); cmbNotOlderThanUnit.Items.Add(rsTimeUnitMonth); cmbNotOlderThanUnit.Items.Add(rsTimeUnitYear); cmbFileSizeUnit.Items.Add(rsSizeUnitBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitKBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitMBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitGBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitTBytes); cbOfficeXML.Hint := StripHotkey(cbOfficeXML.Caption) + ' ' + OFFICE_FILTER; // fill search depth combobox cmbSearchDepth.Items.Add(rsFindDepthAll); cmbSearchDepth.Items.Add(rsFindDepthCurDir); for I := 1 to 100 do cmbSearchDepth.Items.Add(Format(rsFindDepth, [IntToStr(I)])); cmbSearchDepth.ItemIndex := 0; // fill encoding combobox cmbEncoding.Clear; GetSupportedEncodings(cmbEncoding.Items); I := cmbEncoding.Items.IndexOf('UTF-8BOM'); if I >= 0 then cmbEncoding.Items.Delete(I); cmbEncoding.Items.Insert(0, 'Default'); cmbEncoding.ItemIndex := 0; cmbEncoding.Items.Objects[0]:= TObject(PtrInt(True)); // gray disabled fields cbUsePluginChange(Sender); cbFindTextChange(Sender); cbReplaceTextChange(Sender); cbNotOlderThanChange(Sender); cbFileSizeFromChange(Sender); cbFileSizeToChange(Sender); ZVDateFrom.DateTime := Now(); ZVDateTo.DateTime := Now(); ZVTimeFrom.DateTime := Now(); ZVTimeTo.DateTime := Now(); cbDateFrom.Checked := False; cbDateTo.Checked := False; cbTimeFrom.Checked := False; cbTimeTo.Checked := False; btnStart.Default := True; cmbNotOlderThanUnit.ItemIndex := 3; // Days cmbFileSizeUnit.ItemIndex := 1; // Kilobytes cbPartialNameSearch.Checked := gPartialNameSearch; FontOptionsToFont(gFonts[dcfSearchResults], lsFoundedFiles.Font); InitPropStorage(Self); HMFindFiles := HotMan.Register(Self, HotkeysCategory); HMFindFiles.RegisterActionList(actList); CloneMainAction(frmMain.actAddNewSearch, actList, miViewTab, -1); CloneMainAction(frmMain.actViewSearches, actList, miViewTab, -1); CloneMainAction(frmMain.actDeleteSearches, actList, miAction, -1); CloneMainAction(frmMain.actConfigSearches, actList, miOptions, 0); {$IF DEFINED(FIX_DEFAULT)} if (ListOffrmFindDlgInstance.Count = 0) then Application.AddOnKeyDownBeforeHandler(@FormKeyDown); {$ENDIF} end; { TfrmFindDlg.cbUsePluginChange } procedure TfrmFindDlg.cbUsePluginChange(Sender: TObject); begin EnableControl(cmbPlugin, cbUsePlugin.Checked); if not FUpdating and cmbPlugin.Enabled and cmbPlugin.CanSetFocus and (Sender = cbUsePlugin) then begin cmbPlugin.SetFocus; cmbPlugin.SelectAll; end; end; { TfrmFindDlg.cmbEncodingSelect } procedure TfrmFindDlg.cmbEncodingSelect(Sender: TObject); var Index, ItemIndex: Integer; begin if (cmbEncoding.Tag = 1) then begin ItemIndex:= cmbEncoding.ItemIndex; for Index:= 0 to cmbEncoding.Items.Count - 1 do begin cmbEncoding.Items.Objects[Index]:= TObject(PtrInt((ItemIndex = Index))); end; end; UpdateEncodings; end; { TfrmFindDlg.Create } constructor TfrmFindDlg.Create(TheOwner: TComponent); var C: TPortableNetworkGraphic; begin FSelectedFiles := TStringList.Create; inherited Create(TheOwner); FUpdateTimer := TTimer.Create(Self); FUpdateTimer.Interval := 100; FUpdateTimer.Enabled := False; FUpdateTimer.OnTimer := @OnUpdateTimer; try C := TPortableNetworkGraphic.Create; C.LoadFromResourceName(hInstance, ResBtnSelDir); btnChooseFolder.Glyph.Assign(C); finally C.Free; end; dmComData.ilEditorImages.GetBitmap(44, btnEncoding.Glyph); FCommands := TFormCommands.Create(Self, actList); end; { TfrmFindDlg.Destroy } destructor TfrmFindDlg.Destroy; begin inherited Destroy; FSelectedFiles.Free; FLastSearchTemplate.Free; end; { TfrmFindDlg.DisableControlsForTemplate } procedure TfrmFindDlg.DisableControlsForTemplate; begin lblFindPathStart.Visible := False; cmbFindPathStart.Visible := False; cbFollowSymLinks.Visible := False; cbSelectedFiles.Visible := False; cbOpenedTabs.Visible := False; btnStart.Visible := False; btnStop.Visible := False; btnNewSearch.Visible := False; btnLastSearch.Visible := False; btnSearchSaveWithStartingPath.Visible := False; gbFindData.Visible := False; tsResults.TabVisible := False; actPageResults.Enabled := False; chkDuplicates.Visible:= False; pnlDuplicates.Visible:= False; if mmMainMenu <> nil then FreeAndNil(mmMainMenu); end; { TfrmFindDlg.cbFindTextChange } procedure TfrmFindDlg.cbFindTextChange(Sender: TObject); begin EnableControl(chkHex, cbFindText.Checked); EnableControl(cmbFindText, cbFindText.Checked); EnableControl(cmbEncoding, cbFindText.Checked); EnableControl(cbCaseSens, cbFindText.Checked); EnableControl(cbReplaceText, cbFindText.Checked and not (cbFindInArchive.Checked or chkHex.Checked or cbOfficeXML.Checked)); EnableControl(cbNotContainingText, cbFindText.Checked); EnableControl(cbTextRegExp, cbFindText.Checked); EnableControl(cbOfficeXML, cbFindText.Checked); lblEncoding.Enabled := cbFindText.Checked; cbReplaceText.Checked := False; UpdateEncodings; if not FUpdating and cmbFindText.Enabled and cmbFindText.CanSetFocus and (Sender = cbFindText) then begin cmbFindText.SetFocus; cmbFindText.SelectAll; end; end; { TfrmFindDlg.ClearFilter } procedure TfrmFindDlg.ClearFilter(bClearSearchLocation: boolean = True); var FreezeTime: TDateTime; begin FUpdating := True; FLastTemplateName := ''; if bClearSearchLocation then begin cmbFindPathStart.Text := ''; cmbExcludeDirectories.Text := ''; end; if gInitiallyClearFileMask then cmbFindFileMask.Text := '' else if glsMaskHistory.Count > 0 then begin cmbFindFileMask.Text:= glsMaskHistory[0]; end; // If we already search text then use last searched text if not gFirstTextSearch then begin if glsSearchHistory.Count > 0 then cmbFindText.Text := glsSearchHistory[0]; end; cmbSearchDepth.ItemIndex := 0; cmbExcludeFiles.Text := ''; cbPartialNameSearch.Checked := gPartialNameSearch; cbRegExp.Checked := False; // attributes edtAttrib.Text := ''; // file date/time FreezeTime := Now; ZVDateFrom.DateTime := FreezeTime; ZVDateTo.DateTime := FreezeTime; ZVTimeFrom.DateTime := FreezeTime; ZVTimeTo.DateTime := FreezeTime; cbDateFrom.Checked := False; cbDateTo.Checked := False; cbTimeFrom.Checked := False; cbTimeTo.Checked := False; // not older then cbNotOlderThan.Checked := False; seNotOlderThan.Value := 1; cmbNotOlderThanUnit.ItemIndex := 3; // Days // file size cbFileSizeFrom.Checked := False; cbFileSizeTo.Checked := False; seFileSizeFrom.Value := 0; seFileSizeTo.Value := 10; cmbFileSizeUnit.ItemIndex := 1; // Kilobytes // find/replace text // do not clear search/replace text just clear checkbox chkHex.Checked := False; cbFindText.Checked := False; cbReplaceText.Checked := False; cbCaseSens.Checked := False; cbOfficeXML.Checked := False; cbNotContainingText.Checked := False; cmbEncoding.ItemIndex := 0; cmbEncoding.Tag := 1; cmbEncodingSelect(nil); // duplicates chkDuplicates.Checked:= False; // plugins cbUsePlugin.Checked:= False; frmContentPlugins.chkUsePlugins.Checked:= False; FUpdating := False; end; { TfrmFindDlg.ClearResults } procedure TfrmFindDlg.ClearResults; begin lsFoundedFiles.Clear; lsFoundedFiles.Tag := 0; lsFoundedFiles.ScrollWidth := 0; FoundedStringCopy.Clear; EnableControls(False); end; { TfrmFindDlg.btnSearchLoadClick } procedure TfrmFindDlg.btnSearchLoadClick(Sender: TObject); begin LoadSelectedTemplate; end; { TfrmFindDlg.btnSearchSaveWithStartingPathClick } procedure TfrmFindDlg.btnSearchSaveWithStartingPathClick(Sender: TObject); begin SaveTemplate(True); end; { TfrmFindDlg.btnSearchDeleteClick } procedure TfrmFindDlg.btnSearchDeleteClick(Sender: TObject); var OldIndex: integer; begin OldIndex := lbSearchTemplates.ItemIndex; if OldIndex < 0 then Exit; gSearchTemplateList.DeleteTemplate(OldIndex); lbSearchTemplates.Items.Delete(OldIndex); if OldIndex < lbSearchTemplates.Count then lbSearchTemplates.ItemIndex := OldIndex else if lbSearchTemplates.Count > 0 then lbSearchTemplates.ItemIndex := lbSearchTemplates.Count - 1 else begin lblSearchContents.Caption := EmptyStr; end; end; { TfrmFindDlg.btnAttrsHelpClick } procedure TfrmFindDlg.btnAttrsHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', edtAttrib.HelpKeyword); end; procedure TfrmFindDlg.btnEncodingClick(Sender: TObject); var I, Index, ACount: Integer; begin if ChooseEncoding(Self, cmbEncoding.Items) then begin I:= 0; ACount:= 0; for Index:= 0 to cmbEncoding.Items.Count - 1 do begin if (PtrInt(cmbEncoding.Items.Objects[Index]) <> 0) then begin I:= Index; Inc(ACount); end; end; if ACount > 1 then begin I:= 0; end else if (ACount = 0) then begin I:= 0; ACount:= 1; cmbEncoding.Items.Objects[I]:= TObject(PtrInt(True)); end; cmbEncoding.Tag:= ACount; cmbEncoding.ItemIndex:= I; cmbEncoding.Enabled:= (ACount <= 1); UpdateEncodings; end; end; { TfrmFindDlg.actExecute } procedure TfrmFindDlg.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; { TfrmFindDlg.btnAddAttributeClick } procedure TfrmFindDlg.btnAddAttributeClick(Sender: TObject); begin if not Assigned(FFrmAttributesEdit) then begin FFrmAttributesEdit := TfrmAttributesEdit.Create(Self); FFrmAttributesEdit.OnOk := @OnAddAttribute; end; FFrmAttributesEdit.Reset; {$IFDEF DARKWIN} if g_darkModeEnabled then FFrmAttributesEdit.ShowModal else {$ENDIF} if not (fsModal in FormState) then FFrmAttributesEdit.Show else begin FFrmAttributesEdit.ShowModal; end; end; { TfrmFindDlg.btnSearchSaveClick } procedure TfrmFindDlg.btnSearchSaveClick(Sender: TObject); begin SaveTemplate(False); end; { TfrmFindDlg.cbCaseSensChange } procedure TfrmFindDlg.cbCaseSensChange(Sender: TObject); begin if cbCaseSens.Checked then cbTextRegExp.Checked := False; end; { TfrmFindDlg.cbDateFromChange } procedure TfrmFindDlg.cbDateFromChange(Sender: TObject); begin UpdateColor(ZVDateFrom, cbDateFrom.Checked); end; { TfrmFindDlg.cbDateToChange } procedure TfrmFindDlg.cbDateToChange(Sender: TObject); begin UpdateColor(ZVDateTo, cbDateTo.Checked); end; { TfrmFindDlg.cbFindInArchiveChange } procedure TfrmFindDlg.cbFindInArchiveChange(Sender: TObject); begin EnableControl(cbReplaceText, cbFindText.Checked and not cbFindInArchive.Checked); if cbReplaceText.Checked then cbReplaceText.Checked := cbReplaceText.Enabled; actView.Enabled := pnlResultsBottom.Enabled and (not cbFindInArchive.Checked); actEdit.Enabled := pnlResultsBottom.Enabled and (not cbFindInArchive.Checked); actFeedToListbox.Enabled := pnlResultsBottom.Enabled and (not cbFindInArchive.Checked); cbReplaceTextChange(cbReplaceText); end; procedure TfrmFindDlg.cbOfficeXMLChange(Sender: TObject); begin if cbOfficeXML.Checked then begin chkHex.Checked:= False; cbReplaceText.Checked:= False; end; cbReplaceText.Enabled:= not (chkHex.Checked or cbOfficeXML.Checked); end; { TfrmFindDlg.cbOpenedTabsChange } procedure TfrmFindDlg.cbOpenedTabsChange(Sender: TObject); begin cbSelectedFiles.Enabled := not cbOpenedTabs.Checked AND (FSelectedFiles.Count > 0); cbFollowSymLinks.Enabled := not cbOpenedTabs.Checked; cmbFindPathStart.Enabled := not cbOpenedTabs.Checked; end; { TfrmFindDlg.cbPartialNameSearchChange } procedure TfrmFindDlg.cbPartialNameSearchChange(Sender: TObject); begin if cbPartialNameSearch.Checked then cbRegExp.Checked := False; end; { TfrmFindDlg.cbRegExpChange } procedure TfrmFindDlg.cbRegExpChange(Sender: TObject); begin if cbRegExp.Checked then cbPartialNameSearch.Checked := False; end; { TfrmFindDlg.cbTextRegExpChange } procedure TfrmFindDlg.cbTextRegExpChange(Sender: TObject); begin if cbTextRegExp.Checked then begin if cbCaseSens.Enabled then begin cbCaseSens.Tag := Integer(cbCaseSens.Checked); end; end else if not cbCaseSens.Enabled then begin cbCaseSens.Checked := Boolean(cbCaseSens.Tag); end; UpdateEncodings; end; { TfrmFindDlg.cbSelectedFilesChange } procedure TfrmFindDlg.cbSelectedFilesChange(Sender: TObject); begin cmbFindPathStart.Enabled := not cbSelectedFiles.Checked; end; procedure TfrmFindDlg.chkDuplicateContentChange(Sender: TObject); begin if chkDuplicateContent.Checked then begin chkDuplicateSize.Checked:= True; chkDuplicateHash.Checked:= False; end; end; procedure TfrmFindDlg.chkDuplicateHashChange(Sender: TObject); begin if chkDuplicateHash.Checked then begin chkDuplicateSize.Checked:= True; chkDuplicateContent.Checked:= False; end; end; procedure TfrmFindDlg.chkDuplicatesChange(Sender: TObject); begin pnlDuplicates.Enabled:= chkDuplicates.Checked; if chkDuplicates.Checked then begin if not (chkDuplicateName.Checked or chkDuplicateSize.Checked) then chkDuplicateName.Checked:= True; end; end; procedure TfrmFindDlg.chkDuplicateSizeChange(Sender: TObject); begin if not chkDuplicateSize.Checked then begin chkDuplicateHash.Checked:= False; chkDuplicateContent.Checked:= False; end; end; procedure TfrmFindDlg.chkHexChange(Sender: TObject); begin if chkHex.Checked then begin cmbEncoding.ItemIndex:= 0; if cbCaseSens.Enabled then begin cbCaseSens.Tag := Integer(cbCaseSens.Checked); end; cbOfficeXML.Checked:= False; cbReplaceText.Checked:= False; end else if not cbCaseSens.Enabled then begin cbCaseSens.Checked := Boolean(cbCaseSens.Tag); end; cbReplaceText.Enabled:= not (chkHex.Checked or cbOfficeXML.Checked); UpdateEncodings; end; { TfrmFindDlg.btnSelDirClick } procedure TfrmFindDlg.btnSelDirClick(Sender: TObject); var S, AFolder: String; begin S := cmbFindPathStart.Text; AFolder:= ExtractFilePath(ExcludeTrailingBackslash(S)); if not mbDirectoryExists(AFolder) then AFolder := EmptyStr; if SelectDirectory(rsFindWhereBeg, AFolder, S, gShowSystemFiles) then cmbFindPathStart.Text := S; end; { TfrmFindDlg.btnNewSearchKeyDown } procedure TfrmFindDlg.btnNewSearchKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if ((Key = VK_LEFT) or (Key = VK_RIGHT)) and (lsFoundedFiles.Count > 0) then FocusOnResults(Sender); end; { TfrmFindDlg.FillFindOptions } procedure TfrmFindDlg.FillFindOptions(out FindOptions: TSearchTemplateRec; SetStartPath: boolean); begin with FindOptions do begin if SetStartPath then StartPath := cmbFindPathStart.Text else StartPath := ''; ExcludeDirectories := cmbExcludeDirectories.Text; FilesMasks := GetFileMask; ExcludeFiles := cmbExcludeFiles.Text; SearchDepth := cmbSearchDepth.ItemIndex - 1; RegExp := cbRegExp.Checked; IsPartialNameSearch := cbPartialNameSearch.Checked; FollowSymLinks := cbFollowSymLinks.Checked; FindInArchives := cbFindInArchive.Checked; { File attributes } AttributesPattern := edtAttrib.Text; { Date/time } DateTimeFrom := 0; DateTimeTo := 0; IsDateFrom := False; IsDateTo := False; IsTimeFrom := False; IsTimeTo := False; if cbDateFrom.Checked then begin IsDateFrom := True; DateTimeFrom := ZVDateFrom.Date; end; if cbDateTo.Checked then begin IsDateTo := True; DateTimeTo := ZVDateTo.Date; end; if cbTimeFrom.Checked then begin IsTimeFrom := True; DateTimeFrom := DateTimeFrom + ZVTimeFrom.Time; end; if cbTimeTo.Checked then begin IsTimeTo := True; DateTimeTo := DateTimeTo + ZVTimeTo.Time; end; { Not Older Than } IsNotOlderThan := cbNotOlderThan.Checked; NotOlderThan := seNotOlderThan.Value; NotOlderThanUnit := ComboIndexToTimeUnit[cmbNotOlderThanUnit.ItemIndex]; { File size } IsFileSizeFrom := cbFileSizeFrom.Checked; IsFileSizeTo := cbFileSizeTo.Checked; FileSizeFrom := seFileSizeFrom.Value; FileSizeTo := seFileSizeTo.Value; FileSizeUnit := ComboIndexToFileSizeUnit[cmbFileSizeUnit.ItemIndex]; { Find/replace text } IsFindText := cbFindText.Checked; FindText := cmbFindText.Text; IsReplaceText := cbReplaceText.Checked; ReplaceText := cmbReplaceText.Text; HexValue := chkHex.Checked; CaseSensitive := cbCaseSens.Checked; NotContainingText := cbNotContainingText.Checked; TextRegExp := cbTextRegExp.Checked; TextEncoding := GetEncodings(cmbEncoding); OfficeXML := cbOfficeXML.Checked; { Duplicates } Duplicates:= chkDuplicates.Checked; DuplicateName:= chkDuplicateName.Checked; DuplicateSize:= chkDuplicateSize.Checked; DuplicateHash:= chkDuplicateHash.Checked; DuplicateContent:= chkDuplicateContent.Checked; { Plugins } if not cbUsePlugin.Checked then SearchPlugin := EmptyStr else begin SearchPlugin := cmbPlugin.Text; end; frmContentPlugins.Save(FindOptions); end; end; { TfrmFindDlg.FindOptionsToDSXSearchRec } procedure TfrmFindDlg.FindOptionsToDSXSearchRec( const AFindOptions: TSearchTemplateRec; out SRec: TDsxSearchRecord); begin with AFindOptions do begin FillByte(SRec{%H-}, SizeOf(SRec), 0); SRec.StartPath := Copy(StartPath, 1, SizeOf(SRec.StartPath)); if IsPartialNameSearch then SRec.FileMask := '*' + Copy(FilesMasks, 1, SizeOf(SRec.FileMask) - 2) + '*' else SRec.FileMask := Copy(FilesMasks, 1, SizeOf(SRec.FileMask)); SRec.Attributes := faAnyFile; // AttrStrToFileAttr? SRec.AttribStr := Copy(AttributesPattern, 1, SizeOf(SRec.AttribStr)); SRec.CaseSensitive := CaseSensitive; {Date search} SRec.IsDateFrom := IsDateFrom; SRec.IsDateTo := IsDateTo; SRec.DateTimeFrom := DateTimeFrom; SRec.DateTimeTo := DateTimeTo; {Time search} SRec.IsTimeFrom := IsTimeFrom; SRec.IsTimeTo := IsTimeTo; (* File size search *) SRec.IsFileSizeFrom := IsFileSizeFrom; SRec.IsFileSizeTo := IsFileSizeTo; SRec.FileSizeFrom := FileSizeFrom; SRec.FileSizeTo := FileSizeTo; (* Find text *) SRec.NotContainingText := NotContainingText; SRec.IsFindText := IsFindText; SRec.FindText := Copy(FindText, 1, SizeOf(SRec.FindText)); (* Replace text *) SRec.IsReplaceText := IsReplaceText; SRec.ReplaceText := Copy(ReplaceText, 1, SizeOf(SRec.ReplaceText)); end; end; { TfrmFindDlg.StopSearch } procedure TfrmFindDlg.StopSearch; begin if FSearchingActive then begin if (cbUsePlugin.Checked) and (cmbPlugin.ItemIndex <> -1) then begin if FSearchWithDSXPluginInProgress then begin DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallStopSearch; DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallFinalize; end; AfterSearchStopped; AfterSearchFocus; end; if Assigned(FFindThread) then begin FFindThread.Terminate; FFindThread := nil; end; end; end; { TfrmFindDlg.Instance } class function TfrmFindDlg.Instance: TfrmFindDlg; begin Result:=frmFindDlgUsingPluginDSX; end; { TfrmFindDlg.lbSearchTemplatesDblClick } procedure TfrmFindDlg.lbSearchTemplatesDblClick(Sender: TObject); begin LoadSelectedTemplate; end; { TfrmFindDlg.AfterSearchStopped } procedure TfrmFindDlg.AfterSearchStopped; begin actCancel.Enabled := False; actStart.Enabled := True;; actClose.Enabled := True; actNewSearch.Enabled := True; actNewSearchClearFilters.Enabled := True; actLastSearch.Enabled := True; FSearchingActive := False; if FSearchWithDSXPluginInProgress then begin FSearchWithDSXPluginInProgress := False; gSearchWithDSXPluginInProgress := False; end; if FSearchWithWDXPluginInProgress then begin FSearchWithWDXPluginInProgress := False; gSearchWithWDXPluginInProgress := False; end; end; { TfrmFindDlg.AfterSearchFocus } procedure TfrmFindDlg.AfterSearchFocus; var LastButton: TButton; begin if Assigned(Self) and Visible then begin if FRButtonPanelSender <> nil then // if user press a keys while search - keep focus on it begin LastButton := (FRButtonPanelSender as TButton); if LastButton.Enabled then LastButton.SetFocus else btnNewSearch.SetFocus; end else begin // if user don't press anything - focus on results if (pgcSearch.ActivePage = tsResults) and (lsFoundedFiles.Count > 0) then begin btnGoToPath.SetFocus; lsFoundedFiles.SetFocus; if lsFoundedFiles.ItemIndex<0 then lsFoundedFiles.ItemIndex:=0; lsFoundedFiles.Selected[lsFoundedFiles.ItemIndex] := True; end else begin if actNewSearch.Enabled then btnNewSearch.SetFocus else btnStart.SetFocus; end; end; end; end; procedure TfrmFindDlg.UpdateEncodings; var Index: Integer; Encoding: String; SupportedEncoding: Boolean; begin SupportedEncoding:= True; for Index:= 0 to cmbEncoding.Items.Count - 1 do begin if (PtrInt(cmbEncoding.Items.Objects[Index]) <> 0) then begin Encoding:= cmbEncoding.Items[Index]; SupportedEncoding:= SingleByteEncoding(Encoding); if (not SupportedEncoding) and TRegExprU.AvailableNew then begin Encoding := NormalizeEncoding(Encoding); if Encoding = EncodingDefault then Encoding := GetDefaultTextEncoding; SupportedEncoding := Encoding = EncodingUTF8; end; if not SupportedEncoding then Break; end; end; btnEncoding.Visible:= not cbReplaceText.Checked; btnEncoding.Enabled:= cbFindText.Checked and (not chkHex.Checked); cmbEncoding.Enabled:= btnEncoding.Enabled and (cmbEncoding.Tag < 2); cbTextRegExp.Enabled := cbFindText.Checked and SupportedEncoding and (not chkHex.Checked); if not cbTextRegExp.Enabled then cbTextRegExp.Checked := False; cbCaseSens.Enabled:= cbFindText.Checked and (not cbReplaceText.Checked) and (not chkHex.Checked) and (not cbTextRegExp.Checked); if cbFindText.Checked and (not cbCaseSens.Enabled) then cbCaseSens.Checked := not cbTextRegExp.Checked; end; function TfrmFindDlg.GetEncodings(AList: TCustomComboBox): String; var Index: Integer; begin Result:= EmptyStr; for Index:= 0 to AList.Items.Count - 1 do begin if (PtrInt(AList.Items.Objects[Index]) <> 0) then begin Result+= AList.Items[Index] + '|'; end; end; if Length(Result) > 0 then begin Delete(Result, High(Result), 1); end; if Length(Result) = 0 then Result:= AList.Text; end; procedure TfrmFindDlg.SetEncodings(const AEncodings: String; AList: TCustomComboBox); var S: TStringArray; I, Index, ACount: Integer; begin ACount:= 0; S:= AEncodings.Split(['|'], TStringSplitOptions.ExcludeEmpty); for I:= 0 to AList.Items.Count - 1 do begin AList.Items.Objects[I]:= TObject(PtrInt(False)); end; for Index:= 0 to High(S) do begin I:= AList.Items.IndexOf(S[Index]); if (I >= 0) then begin Inc(ACount); AList.Items.Objects[I]:= TObject(PtrInt(True)); end; end; if ACount = 0 then begin I:= 0; ACount:= 1; AList.Items.Objects[I]:= TObject(PtrInt(True)); end; AList.Tag:= ACount; if ACount = 1 then AList.ItemIndex:= I; end; procedure TfrmFindDlg.FindInArchive(AFileView: TFileView); var AEnabled: Boolean; AFileSource: IWcxArchiveFileSource; begin FFileSource:= aFileView.FileSource; AEnabled:= FFileSource.IsClass(TWcxArchiveFileSource); cbOpenedTabs.Visible:= not AEnabled; cbSelectedFiles.Visible:= not AEnabled; cbFindInArchive.Enabled:= not AEnabled; cbReplaceText.Enabled:= (not AEnabled) and (cbFindText.Checked); cmbFindPathStart.Enabled:= not AEnabled; btnChooseFolder.Enabled:= not AEnabled; chkDuplicates.Enabled:= not AEnabled; cmbSearchDepth.Enabled:= not AEnabled; tsPlugins.TabVisible:= not AEnabled; actPagePlugins.Enabled:= not AEnabled; cbFollowSymLinks.Enabled:= not AEnabled; if not AEnabled then FWcxModule:= nil else begin AFileSource:= (FFileSource as IWcxArchiveFileSource); FWcxModule:= AFileSource.WcxModule; end; cbFindText.Enabled:= (AEnabled = False) or (AFileSource.PluginCapabilities and PK_CAPS_SEARCHTEXT <> 0); if AEnabled then begin cmbSearchDepth.ItemIndex:= 0; cbFindInArchive.Checked:= True; cbReplaceText.Checked:= False; chkDuplicates.Checked:= False; cbOpenedTabs.Checked:= False; cbSelectedFiles.Checked:= False; cbFollowSymLinks.Checked:= False; cmbFindPathStart.Text:= aFileView.CurrentAddress; end; end; procedure TfrmFindDlg.FoundedStringCopyAdded(Sender: TObject); begin if FoundedStringCopy.Count > 0 then begin EnableControls(True); FoundedStringCopyChanged(Sender); FoundedStringCopy.OnChange:= @FoundedStringCopyChanged; end; end; { TfrmFindDlg.FoundedStringCopyChanged } procedure TfrmFindDlg.FoundedStringCopyChanged(Sender: TObject); var sText: string; iTemp: integer; begin if FoundedStringCopy.Count > 0 then begin iTemp := FoundedStringCopy.Count - 1; Sender := FoundedStringCopy.Objects[iTemp]; sText := FoundedStringCopy[iTemp]; iTemp := Length(sText); if iTemp > lsFoundedFiles.Tag then begin lsFoundedFiles.Tag := iTemp; iTemp := lsFoundedFiles.Canvas.TextWidth(sText); if iTemp > lsFoundedFiles.ScrollWidth then lsFoundedFiles.ScrollWidth := iTemp + 32; end; lsFoundedFiles.Items.AddObject(sText, Sender); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} Application.ProcessMessages; {$ENDIF} end; end; { TfrmFindDlg.cbFileSizeFromChange } procedure TfrmFindDlg.cbFileSizeFromChange(Sender: TObject); begin UpdateColor(seFileSizeFrom, cbFileSizeFrom.Checked); EnableControl(cmbFileSizeUnit, cbFileSizeFrom.Checked or cbFileSizeTo.Checked); end; { TfrmFindDlg.cbFileSizeToChange } procedure TfrmFindDlg.cbFileSizeToChange(Sender: TObject); begin UpdateColor(seFileSizeTo, cbFileSizeTo.Checked); EnableControl(cmbFileSizeUnit, cbFileSizeFrom.Checked or cbFileSizeTo.Checked); end; { TfrmFindDlg.cbNotOlderThanChange } procedure TfrmFindDlg.cbNotOlderThanChange(Sender: TObject); begin UpdateColor(seNotOlderThan, cbNotOlderThan.Checked); EnableControl(cmbNotOlderThanUnit, cbNotOlderThan.Checked); end; { TfrmFindDlg.cbReplaceTextChange } procedure TfrmFindDlg.cbReplaceTextChange(Sender: TObject); var Index: Integer; begin EnableControl(cmbReplaceText, cbReplaceText.Checked and cbFindText.Checked); cbNotContainingText.Checked := False; cbNotContainingText.Enabled := (not cbReplaceText.Checked and cbFindText.Checked); if cmbReplaceText.Enabled and (cmbEncoding.Tag > 1) then begin for Index:= cmbEncoding.Items.Count - 1 downto 0 do begin if (PtrInt(cmbEncoding.Items.Objects[Index]) <> 0) then begin if cmbEncoding.Tag = 1 then begin cmbEncoding.ItemIndex:= Index; Break; end; cmbEncoding.Tag:= cmbEncoding.Tag - 1; cmbEncoding.Items.Objects[Index]:= nil; end; end; end; UpdateEncodings; if not FUpdating and cmbReplaceText.Enabled and cmbReplaceText.CanSetFocus then begin cmbReplaceText.SetFocus; cmbReplaceText.SelectAll; end; end; { TfrmFindDlg.cbTimeFromChange } procedure TfrmFindDlg.cbTimeFromChange(Sender: TObject); begin UpdateColor(ZVTimeFrom, cbTimeFrom.Checked); end; { TfrmFindDlg.cbTimeToChange } procedure TfrmFindDlg.cbTimeToChange(Sender: TObject); begin UpdateColor(ZVTimeTo, cbTimeTo.Checked); end; { TfrmFindDlg.ThreadTerminate } procedure TfrmFindDlg.ThreadTerminate(Sender: TObject); begin FFindThread := TFindThread(Sender); if FFindThread.TimeOfScan <> 0 then FTimeSearch := ' , ' + rsFindTimeOfScan + formatdatetime('hh:nn:ss.zzz', FFindThread.TimeOfScan); FUpdateTimer.OnTimer(FUpdateTimer); FUpdateTimer.Enabled := False; FFindThread := nil; SetWindowCaption(wcs_EndSearch); AfterSearchStopped; AfterSearchFocus; end; procedure TfrmFindDlg.EnableControls(AEnabled: Boolean); begin actView.Enabled:= AEnabled; actEdit.Enabled:= AEnabled; actGoToFile.Enabled:= AEnabled; actFeedToListbox.Enabled:= AEnabled; pnlResultsBottom.Enabled:= AEnabled; end; { TfrmFindDlg.FocusOnResults } procedure TfrmFindDlg.FocusOnResults(Sender: TObject); begin FRButtonPanelSender := Sender; if pgcSearch.ActivePage = tsResults then begin btnStart.Default := False; if lsFoundedFiles.SelCount = 0 then lsFoundedFiles.ItemIndex := 0; lsFoundedFiles.SetFocus; lsFoundedFiles.Selected[lsFoundedFiles.ItemIndex] := True; end; end; { TfrmFindDlg.cm_IntelliFocus } procedure TfrmFindDlg.cm_IntelliFocus(const Params: array of string); begin if FFindThread <> nil then begin FFindThread.OnTerminate := nil; FFindThread.Terminate; FUpdateTimer.OnTimer(FUpdateTimer); FUpdateTimer.Enabled := False; FFindThread := nil; end; AfterSearchStopped; btnStart.Default := True; if cmbFindText.Focused then // if F7 on already focused textSearch field- disable text search and set focun on file mask begin cbFindText.Checked := False; cmbFindFileMask.SetFocus; cmbFindFileMask.SelectAll; exit; end else begin pgcSearch.PageIndex := 0; cbFindText.Checked := True; cmbFindText.SetFocus; cmbFindText.SelectAll; end; end; { TfrmFindDlg.cm_Start } procedure TfrmFindDlg.cm_Start(const Params: array of string); var sPath: String; sr: TDsxSearchRecord; SearchTemplate, TmpTemplate: TSearchTemplateRec; PassedSelectedFiles: TStringList = nil; begin cm_Cancel([]); Self.Repaint; Application.ProcessMessages; if InvalidRegExpr then Exit; if cbFindInArchive.Enabled then begin if (cmbFindPathStart.Text = '') then begin cmbFindPathStart.Text:= mbGetCurrentDir; end; for sPath in SplitPath(cmbFindPathStart.Text) do begin if not mbDirectoryExists(sPath) then begin ShowMessage(Format(rsFindDirNoEx, [sPath])); Exit; end; end; end; if (cbFindText.Checked and chkHex.Checked) then try HexToBin(cmbFindText.Text); except on E: EConvertError do begin MessageDlg(E.Message, mtError, [mbOK], 0, mbOK); Exit; end; end; SaveHistory; FAtLeastOneSearchWasDone := True; if cbSelectedFiles.Checked and (FSelectedFiles.Count = 0) then begin ShowMessage(rsMsgNoFilesSelected); cbSelectedFiles.Checked := False; Exit; end; if not (chkDuplicateName.Checked or chkDuplicateSize.Checked) then chkDuplicates.Checked:= False; // Show search results page pgcSearch.ActivePage := tsResults; if lsFoundedFiles.CanSetFocus then lsFoundedFiles.SetFocus; ClearResults; miShowAllFound.Enabled := False; FSearchingActive := True; actCancel.Enabled := True; btnStop.Default := True; actStart.Enabled := False; actClose.Enabled := False; actNewSearch.Enabled := False; actNewSearchClearFilters.Enabled := False; actLastSearch.Enabled := False; try if (frmContentPlugins.chkUsePlugins.Checked) and (gSearchWithWDXPluginInProgress) then raise EConvertError.Create(rsSearchWithWDXPluginInProgress); FillFindOptions(SearchTemplate, True); if frmContentPlugins.chkUsePlugins.Checked then begin gSearchWithWDXPluginInProgress := True; FSearchWithWDXPluginInProgress := True; frmFindDlgUsingPluginWDX := Self; end; if not Assigned(FLastSearchTemplate) then FLastSearchTemplate := TSearchTemplate.Create; TmpTemplate := SearchTemplate; TmpTemplate.StartPath := ''; // Don't remember starting path. FLastSearchTemplate.SearchRecord := TmpTemplate; FoundedStringCopy.OnChange:= @FoundedStringCopyAdded; if (cbUsePlugin.Checked) and (cmbPlugin.ItemIndex <> -1) then begin if not gSearchWithDSXPluginInProgress then begin gSearchWithDSXPluginInProgress := True; FSearchWithDSXPluginInProgress := True; frmFindDlgUsingPluginDSX := Self; if DSXPlugins.LoadModule(cmbPlugin.ItemIndex) then begin FindOptionsToDSXSearchRec(SearchTemplate, sr); DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallInit(@SAddFileProc, @SUpdateStatusProc); DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallStartSearch(sr); end else StopSearch; end else begin MsgError(rsSearchWithDSXPluginInProgress); StopSearch; end; end else begin if cbSelectedFiles.Checked then PassedSelectedFiles := FSelectedFiles; if cbOpenedTabs.Checked then begin frmMain.GetListOpenedPaths(FSelectedFiles); PassedSelectedFiles := FSelectedFiles; end; FFindThread := TFindThread.Create(SearchTemplate, PassedSelectedFiles); with FFindThread do begin Archive := FWcxModule; Items := FoundedStringCopy; OnTerminate := @ThreadTerminate; // will update the buttons after search is finished end; SetWindowCaption(wcs_StartSearch); FTimeSearch := ''; FFindThread.Start; FUpdateTimer.Enabled := True; FUpdateTimer.OnTimer(FUpdateTimer); FRButtonPanelSender := nil; end; except on E: Exception do begin if (E is EConvertError) then msgError(E.Message) else raise; StopSearch; AfterSearchStopped; AfterSearchFocus; end; end; end; //cm_Start { TfrmFindDlg.cm_CancelClose } procedure TfrmFindDlg.cm_CancelClose(const Params: array of string); begin if FSearchingActive then StopSearch else Close; end; { TfrmFindDlg.cm_Cancel } procedure TfrmFindDlg.cm_Cancel(const Params: array of string); begin StopSearch; AfterSearchStopped; AfterSearchFocus; end; { TfrmFindDlg.cm_NewSearch } procedure TfrmFindDlg.cm_NewSearch(const Params: array of string); var Param: string; sActionWithFilters: string = ''; begin StopSearch; if length(Params) = 0 then begin case gNewSearchClearFiltersAction of fonsClear: sActionWithFilters := 'clear'; fonsPrompt: if msgYesNo(rsClearFiltersOrNot) then sActionWithFilters := 'clear'; end; end; for Param in Params do GetParamValue(Param, 'filters', sActionWithFilters); if sActionWithFilters = 'clear' then ClearFilter(False); pgcSearch.PageIndex := 0; ClearResults; miShowAllFound.Enabled := False; lblStatus.Caption := EmptyStr; lblCurrent.Caption := EmptyStr; lblFound.Caption := EmptyStr; SetWindowCaption(wcs_NewSearch); if pgcSearch.ActivePage = tsStandard then cmbFindFileMask.SetFocus; end; { TfrmFindDlg.cm_LastSearch } procedure TfrmFindDlg.cm_LastSearch(const Params: array of string); begin if Assigned(FLastSearchTemplate) then begin LoadTemplate(FLastSearchTemplate.SearchRecord); pgcSearch.ActivePage := tsStandard; cmbFindFileMask.SetFocus; end; end; { TfrmFindDlg.cm_View } procedure TfrmFindDlg.cm_View(const Params: array of string); begin if pgcSearch.ActivePage = tsResults then if lsFoundedFiles.ItemIndex <> -1 then begin if (ObjectType(lsFoundedFiles.ItemIndex) = cbChecked) then msgError(rsMsgErrNotSupported) else ShowViewerByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); end; end; { TfrmFindDlg.cm_Edit } procedure TfrmFindDlg.cm_Edit(const Params: array of string); var FileName: String; begin if pgcSearch.ActivePage = tsResults then if lsFoundedFiles.ItemIndex <> -1 then begin if (ObjectType(lsFoundedFiles.ItemIndex) = cbChecked) then msgError(rsMsgErrNotSupported) else begin FileName:= lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]; if mbFileExists(FileName) then ShowEditorByGlob(FileName) else msgError(Format(rsMsgFileNotFound, [FileName])); end; end; end; { TfrmFindDlg.cm_GoToFile } procedure TfrmFindDlg.cm_GoToFile(const Params: array of string); var AFile: TFile = nil; TargetFile: string; ArchiveFile: string; FileSource: IFileSource; begin if lsFoundedFiles.ItemIndex <> -1 then try StopSearch; TargetFile := lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]; if (ObjectType(lsFoundedFiles.ItemIndex) = cbChecked) then begin ArchiveFile := ExtractWord(1, TargetFile, [ReversePathDelim]); TargetFile := PathDelim + ExtractWord(2, TargetFile, [ReversePathDelim]); AFile := TFileSystemFileSource.CreateFileFromFile(ArchiveFile); try FileSource:= GetArchiveFileSource(TFileSystemFileSource.GetFileSource, AFile, EmptyStr, False, False); finally AFile.Free; end; if Assigned(FileSource) then begin frmMain.ActiveFrame.AddFileSource(FileSource, ExtractFilePath(TargetFile)); frmMain.ActiveFrame.SetActiveFile(ExtractFileName(TargetFile)); end; end else begin if not mbFileSystemEntryExists(TargetFile) then begin msgError(rsMsgObjectNotExists + LineEnding + TargetFile); Exit; end; SetFileSystemPath(frmMain.ActiveFrame, ExtractFilePath(TargetFile)); frmMain.ActiveFrame.SetActiveFile(ExtractFileName(TargetFile)); end; frmMain.RestoreWindow; Close; except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; end; { TfrmFindDlg.cm_FeedToListbox } procedure TfrmFindDlg.cm_FeedToListbox(const Params: array of string); const PluginDuplicate = 'Plugin().Duplicate{}'; var I: integer; sFileName: string; SearchResultFS: ISearchResultFileSource; FileList: TFileTree; aFile: TFile; Notebook: TFileViewNotebook; NewPage: TFileViewPage; DCFunc: String; AProperty: TFileVariantProperty; ANewSet: TPanelColumnsClass; NewSorting: TFileSortings; AHeader: TWCXHeader; begin StopSearch; FileList := TFileTree.Create; for i := 0 to lsFoundedFiles.Items.Count - 1 do begin if Assigned(FWcxModule) then begin AHeader:= TWCXHeader(lsFoundedFiles.Items.Objects[I]); aFile := TWcxArchiveFileSource.CreateFile(ExtractFilePath(AHeader.FileName), AHeader); FileList.AddSubNode(aFile); end else try sFileName := lsFoundedFiles.Items[I]; aFile := TFileSystemFileSource.CreateFileFromFile(sFileName); if FLastSearchTemplate.SearchRecord.Duplicates then begin AProperty:= TFileVariantProperty.Create(PluginDuplicate); AProperty.Value:= TDuplicate(lsFoundedFiles.Items.Objects[I]).Index; aFile.Properties[fpVariant]:= AProperty; end; FileList.AddSubNode(aFile); except on EFileNotFound do ; end; end; // Create search result file source. // Currently only searching FileSystem is supported. SearchResultFS := TSearchResultFileSource.Create; SearchResultFS.AddList(FileList, FFileSource); // Add new tab for search results. Notebook := frmMain.ActiveNotebook; NewPage := Notebook.NewPage(Notebook.ActiveView); if FLastSearchTemplate.SearchRecord.Duplicates then begin if not (NewPage.FileView is TColumnsFileView) then begin NewPage.FileView:= TColumnsFileView.Create(NewPage, NewPage.FileView, EmptyStr); NewPage.FileView.SetFocus; end; ANewSet:= TPanelColumnsClass.Create; DCFunc := '[' + sFuncTypeDC + '().%s{}]'; I:= Notebook.ActiveView.ClientWidth; ANewSet.Add(rsFuncName, Format(DCFunc, [TFileFunctionStrings[fsfName]]), I * 40 div 100, taLeftJustify); ANewSet.Add(rsFuncGroup, '[' + PluginDuplicate + ']', I * 20 div 100, taCenter); ANewSet.Add(rsFuncPath, Format(DCFunc, [TFileFunctionStrings[fsfPath]]), I * 40 div 100, taLeftJustify); TColumnsFileView(NewPage.FileView).isSlave:= True; TColumnsFileView(NewPage.FileView).ActiveColmSlave:= ANewSet; TColumnsFileView(NewPage.FileView).UpdateColumnsView; SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 2); NewSorting[0].SortFunctions[0] := fsfVariant; NewSorting[0].SortFunctions[1] := fsfName; NewSorting[0].SortDirection := sdAscending; NewPage.FileView.Sorting:= NewSorting; end; NewPage.FileView.AddFileSource(SearchResultFS, SearchResultFS.GetRootDir); NewPage.FileView.FlatView := True; NewPage.MakeActive; Close; end; procedure TfrmFindDlg.cm_PageNext(const Params: array of string); begin with pgcSearch do begin if PageIndex = PageCount - 1 then ActivePage := Pages[0] else ActivePage := Pages[PageIndex + 1]; end; end; procedure TfrmFindDlg.cm_PagePrev(const Params: array of string); begin with pgcSearch do begin if PageIndex = 0 then ActivePage := Pages[PageCount - 1] else ActivePage := Pages[PageIndex - 1]; end; end; { TfrmFindDlg.cm_PageStandard } procedure TfrmFindDlg.cm_PageStandard(const Params: array of string); begin pgcSearch.ActivePage := tsStandard; end; { TfrmFindDlg.cm_PageAdvanced } procedure TfrmFindDlg.cm_PageAdvanced(const Params: array of string); begin pgcSearch.ActivePage := tsAdvanced; end; { TfrmFindDlg.cm_PagePlugins } procedure TfrmFindDlg.cm_PagePlugins(const Params: array of string); begin pgcSearch.ActivePage := tsPlugins; end; { TfrmFindDlg.cm_PageLoadSave } procedure TfrmFindDlg.cm_PageLoadSave(const Params: array of string); begin pgcSearch.ActivePage := tsLoadSave; end; { TfrmFindDlg.cm_PageResults } procedure TfrmFindDlg.cm_PageResults(const Params: array of string); begin pgcSearch.ActivePage := tsResults; end; { TfrmFindDlg.FormCloseQuery } procedure TfrmFindDlg.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if FFindThread <> nil then // We can't call StopSearch because it method will set focus on unavailable field begin FFindThread.OnTerminate := nil; FFindThread.Terminate; FUpdateTimer.OnTimer(FUpdateTimer); FUpdateTimer.Enabled := False; FFindThread := nil; end; AfterSearchStopped; btnStart.Default := True; CanClose := not Assigned(FFindThread); end; { TfrmFindDlg.FormDestroy } procedure TfrmFindDlg.FormDestroy(Sender: TObject); begin {$IF DEFINED(FIX_DEFAULT)} if ListOffrmFindDlgInstance.Count = 0 then Application.RemoveOnKeyDownBeforeHandler(@FormKeyDown); {$ENDIF} FreeAndNil(FoundedStringCopy); FreeAndNil(DsxPlugins); end; {$IF DEFINED(FIX_DEFAULT)} procedure TfrmFindDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var AParentForm: TCustomForm; begin if Key = VK_RETURN then begin if Sender is TControl then begin AParentForm := GetParentForm(TControl(Sender)); if (AParentForm is TfrmFindDlg) then begin if (Sender = TfrmFindDlg(AParentForm).lsFoundedFiles) then TCustomListBox(Sender).OnKeyDown(Sender, Key, Shift) else if (Sender is TCustomButton) then begin TCustomButton(Sender).Click; Key:= 0; end {$if (lcl_fullversion < 1090000) and defined(lclgtk2)} else begin Key := 0; if btnStart.Enabled then btnStart.Click else btnStop.Click; end; {$endif} end; end; end; end; {$ENDIF} { TfrmFindDlg.FormClose } procedure TfrmFindDlg.frmFindDlgClose(Sender: TObject; var CloseAction: TCloseAction); const CLOSETAG: longint = $233528DE; var iSearchingForm: integer; begin if Assigned(FFrmAttributesEdit) then begin FFrmAttributesEdit.Close; FreeAndNil(FFrmAttributesEdit); end; // Remove the whole thing from memory if no search was made at all. // We remove it also if we've been asked to remove it. // We ned to remove it from our list of instances "ListOffrmFindDlgInstance". // We'll use the trick to give current form a magic tag number and then pass the list to delete the matching one. if (not FAtLeastOneSearchWasDone) or FFreeOnClose then begin tag := CLOSETAG; for iSearchingForm := pred(ListOffrmFindDlgInstance.Count) downto 0 do if ListOffrmFindDlgInstance.frmFindDlgInstance[iSearchingForm].Tag = CLOSETAG then ListOffrmFindDlgInstance.Delete(iSearchingForm); CloseAction := caFree; // This will destroy the from on next step in the flow. end; {$IFDEF DARKWIN} if g_darkModeEnabled and (CloseAction <> caFree) then DestroyHandle; {$ENDIF} end; { TfrmFindDlg.SetWindowCaption } procedure TfrmFindDlg.SetWindowCaption(AWindowCaptionStyle: byte); var sBuildingCaptionName: string; begin sBuildingCaptionName := rsFindSearchFiles; case (AWindowCaptionStyle and $07) of 2: sBuildingCaptionName := sBuildingCaptionName + ' - ' + rsFindScanning; 3: sBuildingCaptionName := sBuildingCaptionName + ' - ' + rsOperFinished; end; if (AWindowCaptionStyle and $10) <> 0 then sBuildingCaptionName := sBuildingCaptionName + ' - ' + lblFound.Caption; if (AWindowCaptionStyle and $08) <> 0 then begin sBuildingCaptionName := sBuildingCaptionName + ' - Files: ' + GetFileMask; if cbFindText.Checked then sBuildingCaptionName := sBuildingCaptionName + ' - Text: ' + cmbFindText.Text; end; Caption := sBuildingCaptionName; end; function TfrmFindDlg.ObjectType(Index: Integer): TCheckBoxState; var ATemp: TObject; begin ATemp:= lsFoundedFiles.Items.Objects[Index]; if (ATemp = nil) then Result:= cbUnchecked else if (ATemp is TWcxHeader) then Result:= cbChecked else Result:= cbGrayed; end; function TfrmFindDlg.GetFileMask: String; begin if Length(cmbFindFileMask.Text) = 0 then Result := AllFilesMask else begin Result := cmbFindFileMask.Text; end; end; { TfrmFindDlg.LoadHistory } procedure TfrmFindDlg.LoadHistory; begin cmbFindFileMask.Items.Assign(glsMaskHistory); cmbFindPathStart.Items.Assign(glsSearchDirectories); cmbExcludeDirectories.Items.Assign(glsSearchExcludeDirectories); cmbExcludeFiles.Items.Assign(glsSearchExcludeFiles); cmbFindText.Items.Assign(glsSearchHistory); cmbReplaceText.Items.Assign(glsReplaceHistory); end; { TfrmFindDlg.SaveHistory } procedure TfrmFindDlg.SaveHistory; begin // 1. Add to find mask history InsertFirstItem(cmbFindFileMask.Text, cmbFindFileMask); glsMaskHistory.Assign(cmbFindFileMask.Items); // 1. Add to find directory history InsertFirstItem(cmbFindPathStart.Text, cmbFindPathStart); glsSearchDirectories.Assign(cmbFindPathStart.Items); // 2. Add to exclude directories history InsertFirstItem(cmbExcludeDirectories.Text, cmbExcludeDirectories); glsSearchExcludeFiles.Assign(cmbExcludeFiles.Items); // 3. Add to exclude files history InsertFirstItem(cmbExcludeFiles.Text, cmbExcludeFiles); glsSearchExcludeDirectories.Assign(cmbExcludeDirectories.Items); // 4. Add to search text history if cbFindText.Checked then begin InsertFirstItem(cmbFindText.Text, cmbFindText, GetTextSearchOptions); // Update search history, so it can be used in // Viewer/Editor opened from find files dialog gFirstTextSearch := False; glsSearchHistory.Assign(cmbFindText.Items); end; // 5. Add to replace text history if cbReplaceText.Checked then begin InsertFirstItem(cmbReplaceText.Text, cmbReplaceText); // Update replace history, so it can be used in // Editor opened from find files dialog (issue 0000539) glsReplaceHistory.Assign(cmbReplaceText.Items); end; end; procedure TfrmFindDlg.LoadPlugins; var I: Integer; AModule: TDsxModule; begin cmbPlugin.Clear; DSXPlugins.Assign(gDSXPlugins); for I := 0 to DSXPlugins.Count - 1 do begin AModule:= DSXPlugins.GetDSXModule(I); if Length(AModule.Descr) = 0 then cmbPlugin.Items.Add(AModule.Name) else cmbPlugin.Items.Add(AModule.Name + ' (' + AModule.Descr + ')'); end; cbUsePlugin.Enabled := (cmbPlugin.Items.Count > 0); if (cbUsePlugin.Enabled) then cmbPlugin.ItemIndex := 0; end; { TfrmFindDlg.FormShow } procedure TfrmFindDlg.frmFindDlgShow(Sender: TObject); begin {$IFDEF LCLCOCOA} pgcSearch.DoAdjustClientRectChange(); {$ENDIF} pgcSearch.PageIndex := 0; if cmbFindFileMask.Visible then cmbFindFileMask.SelectAll; lsFoundedFiles.Canvas.Font := lsFoundedFiles.Font; if pgcSearch.ActivePage = tsStandard then if cmbFindFileMask.CanSetFocus then cmbFindFileMask.SetFocus; cbSelectedFiles.Checked := FSelectedFiles.Count > 0; cbSelectedFiles.Enabled := cbSelectedFiles.Checked; end; { TfrmFindDlg.gbDirectoriesResize } procedure TfrmFindDlg.gbDirectoriesResize(Sender: TObject); begin pnlDirectoriesDepth.Width := gbDirectories.Width div 3; end; { TfrmFindDlg.lbSearchTemplatesSelectionChange } procedure TfrmFindDlg.lbSearchTemplatesSelectionChange(Sender: TObject; User: boolean); begin if lbSearchTemplates.ItemIndex < 0 then lblSearchContents.Caption := '' else begin with gSearchTemplateList.Templates[lbSearchTemplates.ItemIndex].SearchRecord do begin if StartPath <> '' then lblSearchContents.Caption := '"' + FilesMasks + '" -> "' + StartPath + '"' else begin lblSearchContents.Caption := '"' + FilesMasks + '"'; end; pnlLoadSaveBottom.Enabled:= cbFindInArchive.Enabled or ((Duplicates = False) and (ContentPlugin = False) and (SearchPlugin = EmptyStr) and (IsReplaceText = False)); end; end; end; { TfrmFindDlg.LoadSelectedTemplate } procedure TfrmFindDlg.LoadSelectedTemplate; var SearchTemplate: TSearchTemplate; begin if lbSearchTemplates.ItemIndex < 0 then Exit; SearchTemplate := gSearchTemplateList.Templates[lbSearchTemplates.ItemIndex]; if Assigned(SearchTemplate) then begin FLastTemplateName := SearchTemplate.TemplateName; LoadTemplate(SearchTemplate.SearchRecord); end; end; { TfrmFindDlg.LoadTemplate } procedure TfrmFindDlg.LoadTemplate(const Template: TSearchTemplateRec); begin with Template do begin if cbFindInArchive.Enabled then begin if StartPath <> '' then cmbFindPathStart.Text := StartPath; cbFollowSymLinks.Checked := FollowSymLinks; cbFindInArchive.Checked := FindInArchives; if (SearchDepth + 1 >= 0) and (SearchDepth + 1 < cmbSearchDepth.Items.Count) then cmbSearchDepth.ItemIndex := SearchDepth + 1 else cmbSearchDepth.ItemIndex := 0; end; cmbExcludeDirectories.Text := ExcludeDirectories; cmbFindFileMask.Text := FilesMasks; cmbExcludeFiles.Text := ExcludeFiles; cbRegExp.Checked := RegExp; cbPartialNameSearch.Checked := IsPartialNameSearch; // attributes edtAttrib.Text := AttributesPattern; // file date/time cbDateFrom.Checked := IsDateFrom; if IsDateFrom then ZVDateFrom.Date := DateTimeFrom; cbDateTo.Checked := IsDateTo; if IsDateTo then ZVDateTo.Date := DateTimeTo; cbTimeFrom.Checked := IsTimeFrom; if IsTimeFrom then ZVTimeFrom.Time := DateTimeFrom; cbTimeTo.Checked := IsTimeTo; if IsTimeTo then ZVTimeTo.Time := DateTimeTo; // not older then cbNotOlderThan.Checked := IsNotOlderThan; seNotOlderThan.Value := NotOlderThan; cmbNotOlderThanUnit.ItemIndex := TimeUnitToComboIndex[NotOlderThanUnit]; // file size cbFileSizeFrom.Checked := IsFileSizeFrom; cbFileSizeTo.Checked := IsFileSizeTo; seFileSizeFrom.Value := FileSizeFrom; seFileSizeTo.Value := FileSizeTo; cmbFileSizeUnit.ItemIndex := FileSizeUnitToComboIndex[FileSizeUnit]; // find/replace text cbFindText.Checked := IsFindText; cmbFindText.Text := FindText; if cbFindInArchive.Enabled then begin cbReplaceText.Checked := IsReplaceText; cmbReplaceText.Text := ReplaceText; end; chkHex.Checked := HexValue; cbCaseSens.Checked := CaseSensitive; cbNotContainingText.Checked := NotContainingText; cbTextRegExp.Checked := TextRegExp; SetEncodings(TextEncoding, cmbEncoding); cbOfficeXML.Checked := OfficeXML; UpdateEncodings; if cbFindInArchive.Enabled then begin // duplicates chkDuplicates.Checked := Duplicates; chkDuplicateName.Checked := DuplicateName; chkDuplicateSize.Checked := DuplicateSize; chkDuplicateHash.Checked := DuplicateHash; chkDuplicateContent.Checked := DuplicateContent; // plugins if cbUsePlugin.Enabled then begin cmbPlugin.Tag := cmbPlugin.Items.IndexOf(SearchPlugin); cbUsePlugin.Checked:= (cmbPlugin.Tag >= 0); if cbUsePlugin.Checked then cmbPlugin.ItemIndex := cmbPlugin.Tag; end; frmContentPlugins.Load(Template); end; //Let's switch to the most pertinent tab after having load the template. //If we would just load and no switching, user has not a real feedback visually he loaded something. //1. If we're using at least plug in, switch to it. //2. If not but we're using at least something from the "Advanced" tab, switch to it. //3. If nothing above, at least switch to "Standard" tab. pgcSearch.Options:= pgcSearch.Options + [nboDoChangeOnSetIndex]; if (cbUsePlugin.Checked OR frmContentPlugins.chkUsePlugins.Checked) then pgcSearch.ActivePage := tsPlugins else if (cbNotOlderThan.Checked OR cbFileSizeFrom.Checked OR cbFileSizeTo.Checked OR cbDateFrom.Checked OR cbDateTo.Checked OR cbTimeFrom.Checked OR cbTimeTo.Checked OR (edtAttrib.Text<>'')) then pgcSearch.ActivePage := tsAdvanced else begin pgcSearch.ActivePage := tsStandard; end; pgcSearch.Options:= pgcSearch.Options - [nboDoChangeOnSetIndex]; end; end; { TfrmFindDlg.lsFoundedFilesDblClick } procedure TfrmFindDlg.lsFoundedFilesDblClick(Sender: TObject); begin cm_GoToFile([]); end; { TfrmFindDlg.lsFoundedFilesKeyDown } procedure TfrmFindDlg.lsFoundedFilesKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if (Shift = []) and (lsFoundedFiles.ItemIndex <> -1) then begin case Key of VK_DELETE: begin miRemoveFromLlistClick(Sender); Key := 0; end; VK_RETURN: begin if not FSearchingActive then begin cm_GotoFile([]); Key := 0; end; end; VK_RIGHT, VK_LEFT: begin if not FSearchingActive then begin if FRButtonPanelSender <> nil then (FRButtonPanelSender as TButton).SetFocus else btnNewSearch.SetFocus; Key := 0; end else begin Key := 0; btnStop.SetFocus; end; end; end; end; end; { TfrmFindDlg.lsFoundedFilesMouseDown } procedure TfrmFindDlg.lsFoundedFilesMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); var i: integer; begin i := lsFoundedFiles.ItemAtPos(Point(X, Y), False); if (i >= 0) then begin LastClickResultsPath := GetDeepestExistingPath(lsFoundedFiles.Items[i]); if (Button = mbRight) and (lsFoundedFiles.Selected[i] <> True) then begin lsFoundedFiles.ClearSelection; lsFoundedFiles.Selected[i] := True; end; end; end; { TfrmFindDlg.lsFoundedFilesMouseUp } procedure TfrmFindDlg.lsFoundedFilesMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); var i: integer; sPath: string; AFile: TFile; AFiles: TFiles; pt: TPoint; begin if Button = mbRight then begin if Shift = [ssCtrl] then // Show System context menu begin {$IF DEFINED(MSWINDOWS)} try AFiles := TFiles.Create(LastClickResultsPath); AFiles.Path := LastClickResultsPath; i := 0; while i < lsFoundedFiles.Count do begin if lsFoundedFiles.Selected[i] then begin sPath := lsFoundedFiles.Items[i]; AFile := TFileSystemFileSource.CreateFile(sPath); AFiles.Add(aFile); end; Inc(i); end; try pt.X := X; pt.Y := Y; pt := ClientToScreen(pt); ShowContextMenu(lsFoundedFiles, AFiles, pt.X, pt.Y, False, nil); finally FreeAndNil(AFiles); end; except on E: EContextMenuException do ShowException(E) else; end; {$ENDIF} end else begin PopupMenuFind.PopUp; // Show DC menu end; end; end; { TfrmFindDlg.lsFoundedFilesMouseWheelDown } procedure TfrmFindDlg.lsFoundedFilesMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: boolean); begin if (Shift = [ssCtrl]) and (gFonts[dcfSearchResults].Size > gFonts[dcfSearchResults].MinValue) then begin dec(gFonts[dcfSearchResults].Size); lsFoundedFiles.Font.Size := gFonts[dcfSearchResults].Size; Handled := True; end; end; { TfrmFindDlg.lsFoundedFilesMouseWheelUp } procedure TfrmFindDlg.lsFoundedFilesMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: boolean); begin if (Shift = [ssCtrl]) and (gFonts[dcfSearchResults].Size < gFonts[dcfSearchResults].MaxValue) then begin inc(gFonts[dcfSearchResults].Size); lsFoundedFiles.Font.Size := gFonts[dcfSearchResults].Size; Handled := True; end; end; { TfrmFindDlg.miOpenInNewTabClick } procedure TfrmFindDlg.miOpenInNewTabClick(Sender: TObject); var i: integer; sPath: string; Notebook: TFileViewNotebook; NewPage: TFileViewPage; begin Notebook := frmMain.ActiveNotebook; i := 0; while i < lsFoundedFiles.Count do begin if lsFoundedFiles.Selected[i] then begin sPath := lsFoundedFiles.Items[i]; sPath := GetDeepestExistingPath(sPath); NewPage := Notebook.NewPage(Notebook.ActiveView); NewPage.FileView.CurrentPath := sPath; NewPage.FileView.SetActiveFile(ExtractFileName(lsFoundedFiles.Items[i])); end; Inc(i); end; end; { TfrmFindDlg.miRemoveFromLlistClick } procedure TfrmFindDlg.miRemoveFromLlistClick(Sender: TObject); var i: integer; begin if lsFoundedFiles.ItemIndex = -1 then Exit; if lsFoundedFiles.SelCount = 0 then Exit; for i := lsFoundedFiles.Items.Count - 1 downto 0 do if lsFoundedFiles.Selected[i] then lsFoundedFiles.Items.Delete(i); miShowAllFound.Enabled := True; end; { TfrmFindDlg.miShowAllFoundClick } procedure TfrmFindDlg.miShowAllFoundClick(Sender: TObject); begin lsFoundedFiles.Clear; lsFoundedFiles.Items.AddStrings(FoundedStringCopy); miShowAllFound.Enabled := False; end; { TfrmFindDlg.miShowInEditorClick } procedure TfrmFindDlg.miShowInEditorClick(Sender: TObject); begin if lsFoundedFiles.ItemIndex >= 0 then ShowEditorByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); end; { TfrmFindDlg.miShowInViewerClick } procedure TfrmFindDlg.miShowInViewerClick(Sender: TObject); var sl: TStringList; i: integer; begin if lsFoundedFiles.ItemIndex = -1 then Exit; sl := TStringList.Create; try for i := 0 to lsFoundedFiles.Items.Count - 1 do if lsFoundedFiles.Selected[i] then sl.Add(lsFoundedFiles.Items[i]); ShowViewer(sl); finally sl.Free; end; end; { TfrmFindDlg.seFileSizeFromChange } procedure TfrmFindDlg.seFileSizeFromChange(Sender: TObject); begin if not FUpdating then cbFileSizeFrom.Checked := (seFileSizeFrom.Value > 0); end; { TfrmFindDlg.seFileSizeToChange } procedure TfrmFindDlg.seFileSizeToChange(Sender: TObject); begin if not FUpdating then cbFileSizeTo.Checked := (seFileSizeTo.Value > 0); end; { TfrmFindDlg.SelectTemplate } procedure TfrmFindDlg.SelectTemplate(const ATemplateName: string); var i: integer; begin for i := 0 to lbSearchTemplates.Count - 1 do if lbSearchTemplates.Items[i] = ATemplateName then begin lbSearchTemplates.ItemIndex := i; Break; end; end; { TfrmFindDlg.seNotOlderThanChange } procedure TfrmFindDlg.seNotOlderThanChange(Sender: TObject); begin if not FUpdating then cbNotOlderThan.Checked := (seNotOlderThan.Value > 0); end; { TfrmFindDlg.tsLoadSaveShow } procedure TfrmFindDlg.tsLoadSaveShow(Sender: TObject); begin UpdateTemplatesList; if (lbSearchTemplates.Count > 0) and (lbSearchTemplates.ItemIndex = -1) then lbSearchTemplates.ItemIndex := 0; end; { TfrmFindDlg.tsStandardEnter } procedure TfrmFindDlg.tsStandardEnter(Sender: TObject); begin btnStart.Default := True; end; { TfrmFindDlg.UpdateTemplatesList } procedure TfrmFindDlg.UpdateTemplatesList; var OldIndex: integer; begin OldIndex := lbSearchTemplates.ItemIndex; gSearchTemplateList.LoadToStringList(lbSearchTemplates.Items); if OldIndex <> -1 then lbSearchTemplates.ItemIndex := OldIndex; end; { TfrmFindDlg.OnUpdateTimer } procedure TfrmFindDlg.OnUpdateTimer(Sender: TObject); begin if Assigned(FFindThread) then begin lblStatus.Caption := Format(rsFindScanned, [FFindThread.FilesScanned]) + FTimeSearch; lblFound.Caption := Format(rsFindFound, [FFindThread.FilesFound]); lblCurrent.Caption := rsFindScanning + ': ' + FFindThread.CurrentDir; end; end; { TfrmFindDlg.ZVDateFromChange } procedure TfrmFindDlg.ZVDateFromChange(Sender: TObject); begin if not FUpdating then cbDateFrom.Checked := True; end; { TfrmFindDlg.ZVDateToChange } procedure TfrmFindDlg.ZVDateToChange(Sender: TObject); begin if not FUpdating then cbDateTo.Checked := True; end; { TfrmFindDlg.ZVTimeFromChange } procedure TfrmFindDlg.ZVTimeFromChange(Sender: TObject); begin if not FUpdating then cbTimeFrom.Checked := True; end; { TfrmFindDlg.ZVTimeToChange } procedure TfrmFindDlg.ZVTimeToChange(Sender: TObject); begin if not FUpdating then cbTimeTo.Checked := True; end; procedure TfrmFindDlg.PopupMenuFindPopup(Sender: TObject); begin if (lsFoundedFiles.ItemIndex <> -1) then begin miShowInViewer.Enabled:= (ObjectType(lsFoundedFiles.ItemIndex) <> cbChecked); miShowInEditor.Enabled:= (ObjectType(lsFoundedFiles.ItemIndex) <> cbChecked); end; end; { TfrmFindDlg.OnAddAttribute } procedure TfrmFindDlg.OnAddAttribute(Sender: TObject); var sAttr: string; begin sAttr := edtAttrib.Text; if edtAttrib.SelStart > 0 then // Insert at caret position. Insert((Sender as TfrmAttributesEdit).AttrsAsText, sAttr, edtAttrib.SelStart + 1) else sAttr := sAttr + (Sender as TfrmAttributesEdit).AttrsAsText; edtAttrib.Text := sAttr; end; { TfrmFindDlg.InvalidRegExpr } function TfrmFindDlg.InvalidRegExpr: Boolean; var sMsg, sEncoding: String; begin Result:= False; try if cbRegExp.Checked then begin uRegExprW.ExecRegExpr(CeUtf8ToUtf16(cmbFindFileMask.Text), ''); end; if cbTextRegExp.Checked then begin sMsg:= cmbFindText.Text; sEncoding:= NormalizeEncoding(cmbEncoding.Text); if sEncoding = EncodingDefault then sEncoding:= GetDefaultTextEncoding; // Use correct RegExp engine if TRegExprU.Available and (sEncoding = EncodingUTF8) then uRegExprU.ExecRegExpr(sMsg, '') else if SingleByteEncoding(sEncoding) then uRegExprA.ExecRegExpr(sMsg, '') else if (sEncoding = EncodingUTF16LE) then uRegExprW.ExecRegExpr(CeUtf8ToUtf16(sMsg), ''); end; except on E: Exception do begin Result:= True; sMsg:= StringReplace(cbRegExp.Caption, '&', '', [rfReplaceAll]); MessageDlg(sMsg + ': ' + E.Message, mtError, [mbOK], 0); end; end; end; { TfrmFindDlg.pgcSearchChange } procedure TfrmFindDlg.pgcSearchChange(Sender: TObject); begin if pgcSearch.ActivePage = tsStandard then begin if (not cmbFindFileMask.Focused) and (cmbFindFileMask.CanSetFocus) then cmbFindFileMask.SetFocus; end else if pgcSearch.ActivePage = tsResults then begin if (not lsFoundedFiles.Focused) and (lsFoundedFiles.CanSetFocus) then lsFoundedFiles.SetFocus; end; end; { TfrmFindDlg.SaveTemplate } procedure TfrmFindDlg.SaveTemplate(SaveStartingPath: boolean); var sName: string; SearchTemplate: TSearchTemplate; SearchRec: TSearchTemplateRec; begin if InvalidRegExpr then Exit; sName := FLastTemplateName; if not InputQuery(rsFindSaveTemplateCaption, rsFindSaveTemplateTitle, sName) then begin ModalResult := mrCancel; Exit; end; FLastTemplateName := sName; SearchTemplate := gSearchTemplateList.TemplateByName[sName]; if Assigned(SearchTemplate) then begin // TODO: Ask for overwriting existing template. FillFindOptions(SearchRec, SaveStartingPath); SearchTemplate.SearchRecord := SearchRec; Exit; end; SearchTemplate := TSearchTemplate.Create; try SearchTemplate.TemplateName := sName; FillFindOptions(SearchRec, SaveStartingPath); SearchTemplate.SearchRecord := SearchRec; gSearchTemplateList.Add(SearchTemplate); except FreeAndNil(SearchTemplate); raise; end; UpdateTemplatesList; SelectTemplate(FLastTemplateName); end; function TfrmFindDlg.GetTextSearchOptions: UIntPtr; var Options: TTextSearchOptions absolute Result; begin Result:= 0; if cbCaseSens.Checked then Include(Options, tsoMatchCase); if cbTextRegExp.Checked then Include(Options, tsoRegExpr); if chkHex.Checked then Include(Options, tsoHex); end; procedure TfrmFindDlg.CancelCloseAndFreeMem; begin cm_FreeFromMem([]); end; { TfrmFindDlg.cm_Close } procedure TfrmFindDlg.cm_Close(const Params: array of string); begin Hide; Close; end; { TfrmFindDlg.cm_NewSearchClearFilters } procedure TfrmFindDlg.cm_NewSearchClearFilters(const Params: array of string); begin cm_NewSearch(['filters=clear']); end; { TfrmFindDlg.cm_FreeFromMem } // We will set the flag "FFreeOnClose" to "true" (it was to "false" since "FormCreate". // This flag will be checked in "FormClose" to set "CloseAction" to "caFree" so form will be destroy. // But we need to remove the pointer to that form from our "ListOffrmFindDlgInstance". // To determine which one to remove, we set the tag to a magic number, then scan our list and delete the one pointing the form with that magic number. // We just delete the pointer. The actual form will be destroyed properly because of the "CloseAction" set to "caFree". procedure TfrmFindDlg.cm_FreeFromMem(const {%H-}Params: array of string); var iSearchingForm: integer; const CLOSETAG: longint = $233528DE; begin if FSearchingActive then StopSearch; // Remove our pointer from our list of forms tag := CLOSETAG; for iSearchingForm := pred(ListOffrmFindDlgInstance.Count) downto 1 do begin if ListOffrmFindDlgInstance.frmFindDlgInstance[iSearchingForm].Tag = CLOSETAG then ListOffrmFindDlgInstance.Delete(iSearchingForm); end; FFreeOnClose := True; // Prepare the "free mem" // Do the "close" Close; end; { TfrmFindDlg.cm_FreeFromMemAllOthers } // We set the tag of our actual current form to a magic number and then scan // all forms in our list to close all the ones that does not have that magic // tag number. procedure TfrmFindDlg.cm_FreeFromMemAllOthers(const {%H-}Params: array of string); const KEEPOPENTAG: longint = $270299; var iIndex: integer; begin if ListOffrmFindDlgInstance.Count > 1 then begin tag := KEEPOPENTAG; try for iIndex := pred(ListOffrmFindDlgInstance.Count) downto 0 do if ListOffrmFindDlgInstance.frmFindDlgInstance[iIndex].Tag <> KEEPOPENTAG then ListOffrmFindDlgInstance.frmFindDlgInstance[iIndex].CancelCloseAndFreeMem; finally tag := 0; // Don't forget to set back tag to 0!!! end; end else begin msgOK(rsNoOtherFindFilesWindowToClose); end; end; { TfrmFindDlg.cm_ConfigFileSearchHotKeys } procedure TfrmFindDlg.cm_ConfigFileSearchHotKeys(const {%H-}Params: array of string); begin frmMain.Commands.cm_ConfigHotKeys([Format('category=%s', [rsHotkeyCategoryFindFiles])]); end; initialization TFormCommands.RegisterCommandsForm(TfrmFindDlg, HotkeysCategory, @rsHotkeyCategoryFindFiles); ListOffrmFindDlgInstance := TListOffrmFindDlgInstance.Create; finalization ListOffrmFindDlgInstance.Destroy; // "Destroy" does call the "Clear" who will free the forms. end. doublecmd-1.1.30/src/fFindDlg.lrj0000644000175000001440000003675515104114162015562 0ustar alexxusers{"version":1,"strings":[ {"hash":107491971,"name":"tfrmfinddlg.caption","sourcebytes":[70,105,110,100,32,102,105,108,101,115],"value":"Find files"}, {"hash":176467236,"name":"tfrmfinddlg.tsstandard.caption","sourcebytes":[83,116,97,110,100,97,114,100],"value":"Standard"}, {"hash":184387443,"name":"tfrmfinddlg.gbdirectories.caption","sourcebytes":[68,105,114,101,99,116,111,114,105,101,115],"value":"Directories"}, {"hash":235998121,"name":"tfrmfinddlg.lblfindpathstart.caption","sourcebytes":[83,116,97,114,116,32,105,110,32,38,100,105,114,101,99,116,111,114,121],"value":"Start in &directory"}, {"hash":225405123,"name":"tfrmfinddlg.cbfollowsymlinks.caption","sourcebytes":[70,111,108,108,111,119,32,115,38,121,109,108,105,110,107,115],"value":"Follow s&ymlinks"}, {"hash":49163891,"name":"tfrmfinddlg.lblexcludedirectories.caption","sourcebytes":[69,38,120,99,108,117,100,101,32,115,117,98,100,105,114,101,99,116,111,114,105,101,115],"value":"E&xclude subdirectories"}, {"hash":40753218,"name":"tfrmfinddlg.cmbexcludedirectories.hint","sourcebytes":[69,110,116,101,114,32,100,105,114,101,99,116,111,114,105,101,115,32,110,97,109,101,115,32,116,104,97,116,32,115,104,111,117,108,100,32,98,101,32,101,120,99,108,117,100,101,100,32,102,114,111,109,32,115,101,97,114,99,104,32,115,101,112,97,114,97,116,101,100,32,119,105,116,104,32,34,59,34],"value":"Enter directories names that should be excluded from search separated with \";\""}, {"hash":201746570,"name":"tfrmfinddlg.lblsearchdepth.caption","sourcebytes":[83,101,97,114,99,104,32,115,117,38,98,100,105,114,101,99,116,111,114,105,101,115,58],"value":"Search su&bdirectories:"}, {"hash":238646947,"name":"tfrmfinddlg.cbselectedfiles.caption","sourcebytes":[83,101,108,101,99,116,101,100,32,100,105,114,101,99,116,111,114,105,101,115,32,97,110,100,32,102,105,108,101,115],"value":"Selected directories and files"}, {"hash":187812819,"name":"tfrmfinddlg.cbopenedtabs.caption","sourcebytes":[79,112,101,110,101,100,32,116,97,98,115],"value":"Opened tabs"}, {"hash":5046979,"name":"tfrmfinddlg.gbfiles.caption","sourcebytes":[70,105,108,101,115],"value":"Files"}, {"hash":41260443,"name":"tfrmfinddlg.lblfindfilemask.caption","sourcebytes":[38,70,105,108,101,32,109,97,115,107],"value":"&File mask"}, {"hash":181442290,"name":"tfrmfinddlg.cmbfindfilemask.hint","sourcebytes":[69,110,116,101,114,32,102,105,108,101,115,32,110,97,109,101,115,32,115,101,112,97,114,97,116,101,100,32,119,105,116,104,32,34,59,34],"value":"Enter files names separated with \";\""}, {"hash":193387459,"name":"tfrmfinddlg.lblexcludefiles.caption","sourcebytes":[38,69,120,99,108,117,100,101,32,102,105,108,101,115],"value":"&Exclude files"}, {"hash":89629618,"name":"tfrmfinddlg.cmbexcludefiles.hint","sourcebytes":[69,110,116,101,114,32,102,105,108,101,115,32,110,97,109,101,115,32,116,104,97,116,32,115,104,111,117,108,100,32,98,101,32,101,120,99,108,117,100,101,100,32,102,114,111,109,32,115,101,97,114,99,104,32,115,101,112,97,114,97,116,101,100,32,119,105,116,104,32,34,59,34],"value":"Enter files names that should be excluded from search separated with \";\""}, {"hash":181172405,"name":"tfrmfinddlg.cbpartialnamesearch.caption","sourcebytes":[83,101,97,114,99,38,104,32,102,111,114,32,112,97,114,116,32,111,102,32,102,105,108,101,32,110,97,109,101],"value":"Searc&h for part of file name"}, {"hash":185056558,"name":"tfrmfinddlg.cbregexp.caption","sourcebytes":[38,82,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110],"value":"&Regular expression"}, {"hash":130525619,"name":"tfrmfinddlg.cbfindinarchive.caption","sourcebytes":[83,101,97,114,99,104,32,105,110,32,38,97,114,99,104,105,118,101,115],"value":"Search in &archives"}, {"hash":73721249,"name":"tfrmfinddlg.gbfinddata.caption","sourcebytes":[70,105,110,100,32,68,97,116,97],"value":"Find Data"}, {"hash":95209482,"name":"tfrmfinddlg.lblencoding.caption","sourcebytes":[69,110,99,111,100,105,110,38,103,58],"value":"Encodin&g:"}, {"hash":214401813,"name":"tfrmfinddlg.cbcasesens.caption","sourcebytes":[67,97,115,101,32,115,101,110,115,38,105,116,105,118,101],"value":"Case sens&itive"}, {"hash":22868708,"name":"tfrmfinddlg.cbnotcontainingtext.caption","sourcebytes":[70,105,110,100,32,102,105,108,101,115,32,78,38,79,84,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,116,101,120,116],"value":"Find files N&OT containing the text"}, {"hash":125468773,"name":"tfrmfinddlg.cbfindtext.caption","sourcebytes":[70,105,110,100,32,38,116,101,120,116,32,105,110,32,102,105,108,101],"value":"Find &text in file"}, {"hash":35720169,"name":"tfrmfinddlg.cbreplacetext.caption","sourcebytes":[82,101,38,112,108,97,99,101,32,98,121],"value":"Re&place by"}, {"hash":137727326,"name":"tfrmfinddlg.cbtextregexp.caption","sourcebytes":[82,101,103,38,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110],"value":"Reg&ular expression"}, {"hash":259470556,"name":"tfrmfinddlg.chkhex.caption","sourcebytes":[72,101,120,97,100,101,99,105,38,109,97,108],"value":"Hexadeci&mal"}, {"hash":214077868,"name":"tfrmfinddlg.cbofficexml.caption","sourcebytes":[79,102,102,105,38,99,101,32,88,77,76],"value":"Offi&ce XML"}, {"hash":197676484,"name":"tfrmfinddlg.tsadvanced.caption","sourcebytes":[65,100,118,97,110,99,101,100],"value":"Advanced"}, {"hash":122109610,"name":"tfrmfinddlg.cbdatefrom.caption","sourcebytes":[38,68,97,116,101,32,102,114,111,109,58],"value":"&Date from:"}, {"hash":34324922,"name":"tfrmfinddlg.cbnotolderthan.caption","sourcebytes":[78,38,111,116,32,111,108,100,101,114,32,116,104,97,110,58],"value":"N&ot older than:"}, {"hash":121136394,"name":"tfrmfinddlg.cbfilesizefrom.caption","sourcebytes":[83,38,105,122,101,32,102,114,111,109,58],"value":"S&ize from:"}, {"hash":113717674,"name":"tfrmfinddlg.cbdateto.caption","sourcebytes":[68,97,116,38,101,32,116,111,58],"value":"Dat&e to:"}, {"hash":235349146,"name":"tfrmfinddlg.cbfilesizeto.caption","sourcebytes":[83,105,38,122,101,32,116,111,58],"value":"Si&ze to:"}, {"hash":122046010,"name":"tfrmfinddlg.cbtimefrom.caption","sourcebytes":[38,84,105,109,101,32,102,114,111,109,58],"value":"&Time from:"}, {"hash":221716890,"name":"tfrmfinddlg.cbtimeto.caption","sourcebytes":[84,105,38,109,101,32,116,111,58],"value":"Ti&me to:"}, {"hash":193032515,"name":"tfrmfinddlg.lblattributes.caption","sourcebytes":[65,116,116,114,105,38,98,117,116,101,115],"value":"Attri&butes"}, {"hash":173988,"name":"tfrmfinddlg.btnaddattribute.caption","sourcebytes":[38,65,100,100],"value":"&Add"}, {"hash":2812976,"name":"tfrmfinddlg.btnattrshelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"}, {"hash":39455530,"name":"tfrmfinddlg.chkduplicates.caption","sourcebytes":[70,105,110,100,32,100,117,38,112,108,105,99,97,116,101,32,102,105,108,101,115,58],"value":"Find du&plicate files:"}, {"hash":58146741,"name":"tfrmfinddlg.chkduplicatename.caption","sourcebytes":[115,97,109,101,32,110,97,109,101],"value":"same name"}, {"hash":58194565,"name":"tfrmfinddlg.chkduplicatesize.caption","sourcebytes":[115,97,109,101,32,115,105,122,101],"value":"same size"}, {"hash":58102040,"name":"tfrmfinddlg.chkduplicatehash.caption","sourcebytes":[115,97,109,101,32,104,97,115,104],"value":"same hash"}, {"hash":266181940,"name":"tfrmfinddlg.chkduplicatecontent.caption","sourcebytes":[115,97,109,101,32,99,111,110,116,101,110,116],"value":"same content"}, {"hash":121364483,"name":"tfrmfinddlg.tsplugins.caption","sourcebytes":[80,108,117,103,105,110,115],"value":"Plugins"}, {"hash":125449178,"name":"tfrmfinddlg.cbuseplugin.caption","sourcebytes":[38,85,115,101,32,115,101,97,114,99,104,32,112,108,117,103,105,110,58],"value":"&Use search plugin:"}, {"hash":91471358,"name":"tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text","sourcebytes":[80,108,117,103,105,110],"value":"Plugin"}, {"hash":5045284,"name":"tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text","sourcebytes":[70,105,101,108,100],"value":"Field"}, {"hash":113807362,"name":"tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text","sourcebytes":[79,112,101,114,97,116,111,114],"value":"Operator"}, {"hash":6063029,"name":"tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text","sourcebytes":[86,97,108,117,101],"value":"Value"}, {"hash":125094805,"name":"tfrmfinddlg.tsloadsave.caption","sourcebytes":[76,111,97,100,47,83,97,118,101],"value":"Load/Save"}, {"hash":87316794,"name":"tfrmfinddlg.lbltemplateheader.caption","sourcebytes":[38,80,114,101,118,105,111,117,115,32,115,101,97,114,99,104,101,115,58],"value":"&Previous searches:"}, {"hash":5166452,"name":"tfrmfinddlg.btnsearchload.caption","sourcebytes":[76,38,111,97,100],"value":"L&oad"}, {"hash":5621957,"name":"tfrmfinddlg.btnsearchsave.caption","sourcebytes":[83,38,97,118,101],"value":"S&ave"}, {"hash":53200297,"name":"tfrmfinddlg.btnsearchsavewithstartingpath.hint","sourcebytes":[73,102,32,115,97,118,101,100,32,116,104,101,110,32,34,83,116,97,114,116,32,105,110,32,100,105,114,101,99,116,111,114,121,34,32,119,105,108,108,32,98,101,32,114,101,115,116,111,114,101,100,32,119,104,101,110,32,108,111,97,100,105,110,103,32,116,101,109,112,108,97,116,101,46,32,85,115,101,32,105,116,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,102,105,120,32,115,101,97,114,99,104,105,110,103,32,116,111,32,97,32,99,101,114,116,97,105,110,32,100,105,114,101,99,116,111,114,121],"value":"If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory"}, {"hash":171182594,"name":"tfrmfinddlg.btnsearchsavewithstartingpath.caption","sourcebytes":[83,97,38,118,101,32,119,105,116,104,32,34,83,116,97,114,116,32,105,110,32,100,105,114,101,99,116,111,114,121,34],"value":"Sa&ve with \"Start in directory\""}, {"hash":179055749,"name":"tfrmfinddlg.btnsearchdelete.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"}, {"hash":147506147,"name":"tfrmfinddlg.tsresults.caption","sourcebytes":[82,101,115,117,108,116,115],"value":"Results"}, {"hash":261119749,"name":"tfrmfinddlg.btnusetemplate.caption","sourcebytes":[85,115,101,32,116,101,109,112,108,97,116,101],"value":"Use template"}, {"hash":2857157,"name":"tfrmfinddlg.btnsavetemplate.caption","sourcebytes":[38,83,97,118,101],"value":"&Save"}, {"hash":247776137,"name":"tfrmfinddlg.miopeninnewtab.caption","sourcebytes":[79,112,101,110,32,73,110,32,78,101,119,32,84,97,98,40,115,41],"value":"Open In New Tab(s)"}, {"hash":178685522,"name":"tfrmfinddlg.mishowinviewer.caption","sourcebytes":[83,104,111,119,32,73,110,32,86,105,101,119,101,114],"value":"Show In Viewer"}, {"hash":198460146,"name":"tfrmfinddlg.mishowineditor.caption","sourcebytes":[83,104,111,119,32,73,110,32,69,100,105,116,111,114],"value":"Show In Editor"}, {"hash":53858676,"name":"tfrmfinddlg.miremovefromllist.caption","sourcebytes":[82,101,109,111,118,101,32,102,114,111,109,32,108,105,115,116],"value":"Remove from list"}, {"hash":125215667,"name":"tfrmfinddlg.mishowallfound.caption","sourcebytes":[83,104,111,119,32,97,108,108,32,102,111,117,110,100,32,105,116,101,109,115],"value":"Show all found items"}, {"hash":73721249,"name":"tfrmfinddlg.actintellifocus.caption","sourcebytes":[70,105,110,100,32,68,97,116,97],"value":"Find Data"}, {"hash":45787284,"name":"tfrmfinddlg.actstart.caption","sourcebytes":[38,83,116,97,114,116],"value":"&Start"}, {"hash":97012220,"name":"tfrmfinddlg.actcancel.caption","sourcebytes":[67,38,97,110,99,101,108],"value":"C&ancel"}, {"hash":44709525,"name":"tfrmfinddlg.actclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"}, {"hash":129025032,"name":"tfrmfinddlg.actnewsearch.caption","sourcebytes":[38,78,101,119,32,115,101,97,114,99,104],"value":"&New search"}, {"hash":177160185,"name":"tfrmfinddlg.actnewsearchclearfilters.caption","sourcebytes":[78,101,119,32,115,101,97,114,99,104,32,40,99,108,101,97,114,32,102,105,108,116,101,114,115,41],"value":"New search (clear filters)"}, {"hash":86573816,"name":"tfrmfinddlg.actlastsearch.caption","sourcebytes":[38,76,97,115,116,32,115,101,97,114,99,104],"value":"&Last search"}, {"hash":2871239,"name":"tfrmfinddlg.actview.caption","sourcebytes":[38,86,105,101,119],"value":"&View"}, {"hash":2800388,"name":"tfrmfinddlg.actedit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"}, {"hash":188493653,"name":"tfrmfinddlg.actgotofile.caption","sourcebytes":[38,71,111,32,116,111,32,102,105,108,101],"value":"&Go to file"}, {"hash":91583208,"name":"tfrmfinddlg.actfeedtolistbox.caption","sourcebytes":[70,101,101,100,32,116,111,32,38,108,105,115,116,98,111,120],"value":"Feed to &listbox"}, {"hash":243911330,"name":"tfrmfinddlg.actpagestandard.caption","sourcebytes":[71,111,32,116,111,32,112,97,103,101,32,34,83,116,97,110,100,97,114,100,34],"value":"Go to page \"Standard\""}, {"hash":113755314,"name":"tfrmfinddlg.actpageadvanced.caption","sourcebytes":[71,111,32,116,111,32,112,97,103,101,32,34,65,100,118,97,110,99,101,100,34],"value":"Go to page \"Advanced\""}, {"hash":85053858,"name":"tfrmfinddlg.actpageplugins.caption","sourcebytes":[71,111,32,116,111,32,112,97,103,101,32,34,80,108,117,103,105,110,115,34],"value":"Go to page \"Plugins\""}, {"hash":192888738,"name":"tfrmfinddlg.actpageloadsave.caption","sourcebytes":[71,111,32,116,111,32,112,97,103,101,32,34,76,111,97,100,47,83,97,118,101,34],"value":"Go to page \"Load/Save\""}, {"hash":168300370,"name":"tfrmfinddlg.actpageresults.caption","sourcebytes":[71,111,32,116,111,32,112,97,103,101,32,34,82,101,115,117,108,116,115,34],"value":"Go to page \"Results\""}, {"hash":37402439,"name":"tfrmfinddlg.actcancelclose.caption","sourcebytes":[67,97,110,99,101,108,32,115,101,97,114,99,104,32,97,110,100,32,99,108,111,115,101,32,119,105,110,100,111,119],"value":"Cancel search and close window"}, {"hash":141485097,"name":"tfrmfinddlg.actfreefrommem.caption","sourcebytes":[67,97,110,99,101,108,32,115,101,97,114,99,104,44,32,99,108,111,115,101,32,97,110,100,32,102,114,101,101,32,102,114,111,109,32,109,101,109,111,114,121],"value":"Cancel search, close and free from memory"}, {"hash":261287225,"name":"tfrmfinddlg.actfreefrommemallothers.caption","sourcebytes":[70,111,114,32,97,108,108,32,111,116,104,101,114,32,34,70,105,110,100,32,102,105,108,101,115,34,44,32,99,97,110,99,101,108,44,32,99,108,111,115,101,32,97,110,100,32,102,114,101,101,32,102,114,111,109,32,109,101,109,111,114,121],"value":"For all other \"Find files\", cancel, close and free from memory"}, {"hash":16841203,"name":"tfrmfinddlg.actconfigfilesearchhotkeys.caption","sourcebytes":[67,111,110,102,105,103,117,114,97,116,105,111,110,32,111,102,32,104,111,116,32,107,101,121,115],"value":"Configuration of hot keys"}, {"hash":142259365,"name":"tfrmfinddlg.actpagenext.caption","sourcebytes":[83,119,105,116,99,104,32,116,111,32,78,101,120,38,116,32,80,97,103,101],"value":"Switch to Nex&t Page"}, {"hash":67944341,"name":"tfrmfinddlg.actpageprev.caption","sourcebytes":[83,119,105,116,99,104,32,116,111,32,38,80,114,101,118,105,111,117,115,32,80,97,103,101],"value":"Switch to &Previous Page"}, {"hash":175812734,"name":"tfrmfinddlg.miaction.caption","sourcebytes":[38,65,99,116,105,111,110],"value":"&Action"}, {"hash":103712041,"name":"tfrmfinddlg.mifreefrommemallothers.caption","sourcebytes":[70,111,114,32,97,108,108,32,111,116,104,101,114,115,44,32,99,97,110,99,101,108,44,32,99,108,111,115,101,32,97,110,100,32,102,114,101,101,32,102,114,111,109,32,109,101,109,111,114,121],"value":"For all others, cancel, close and free from memory"}, {"hash":2871239,"name":"tfrmfinddlg.miviewtab.caption","sourcebytes":[38,86,105,101,119],"value":"&View"}, {"hash":193768468,"name":"tfrmfinddlg.miresult.caption","sourcebytes":[38,82,101,115,117,108,116],"value":"&Result"}, {"hash":108725763,"name":"tfrmfinddlg.mioptions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"} ]} doublecmd-1.1.30/src/fFindDlg.lfm0000644000175000001440000015051115104114162015534 0ustar alexxusersobject frmFindDlg: TfrmFindDlg Left = 275 Height = 469 Top = 176 Width = 875 Caption = 'Find files' ClientHeight = 449 ClientWidth = 875 Constraints.MinHeight = 360 Constraints.MinWidth = 585 KeyPreview = True Menu = mmMainMenu OnClose = frmFindDlgClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnShow = frmFindDlgShow Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '2.0.7.0' object pnlFindFile: TPanel Left = 3 Height = 443 Top = 3 Width = 869 Align = alClient BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 443 ClientWidth = 869 TabOrder = 0 object pgcSearch: TPageControl Left = 0 Height = 443 Top = 0 Width = 760 ActivePage = tsStandard Align = alClient TabIndex = 0 TabOrder = 0 OnChange = pgcSearchChange object tsStandard: TTabSheet Caption = 'Standard' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 415 ClientWidth = 752 OnEnter = tsStandardEnter object gbDirectories: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = tsStandard AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 116 Top = 3 Width = 746 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Directories' ChildSizing.LeftRightSpacing = 5 ClientHeight = 96 ClientWidth = 742 TabOrder = 0 OnResize = gbDirectoriesResize object lblFindPathStart: TLabel AnchorSideLeft.Control = gbDirectories AnchorSideBottom.Control = cbFollowSymLinks AnchorSideBottom.Side = asrBottom Left = 5 Height = 15 Top = 4 Width = 87 Anchors = [akLeft, akBottom] Caption = 'Start in &directory' FocusControl = cmbFindPathStart ParentColor = False end object cbFollowSymLinks: TCheckBox AnchorSideTop.Control = gbDirectories AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 633 Height = 19 Top = 0 Width = 104 Anchors = [akTop, akRight] Caption = 'Follow s&ymlinks' TabOrder = 0 end object cmbFindPathStart: TComboBoxWithDelItems AnchorSideLeft.Control = lblFindPathStart AnchorSideTop.Control = cbFollowSymLinks AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnChooseFolder Left = 5 Height = 23 Top = 19 Width = 707 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 2 ItemHeight = 15 TabOrder = 1 end object btnChooseFolder: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbFindPathStart AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbFindPathStart AnchorSideBottom.Side = asrBottom Left = 714 Height = 23 Top = 19 Width = 23 Anchors = [akTop, akRight, akBottom] OnClick = btnSelDirClick end object lblExcludeDirectories: TLabel AnchorSideLeft.Control = cmbFindPathStart AnchorSideTop.Control = cmbFindPathStart AnchorSideTop.Side = asrBottom Left = 5 Height = 15 Top = 45 Width = 117 BorderSpacing.Top = 3 Caption = 'E&xclude subdirectories' FocusControl = cmbExcludeDirectories ParentColor = False end object cmbExcludeDirectories: TComboBoxWithDelItems AnchorSideLeft.Control = lblExcludeDirectories AnchorSideTop.Control = lblExcludeDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlDirectoriesDepth Left = 5 Height = 23 Hint = 'Enter directories names that should be excluded from search separated with ";"' Top = 60 Width = 527 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 5 BorderSpacing.Bottom = 5 ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 2 end object pnlDirectoriesDepth: TPanel AnchorSideTop.Control = lblExcludeDirectories AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 537 Height = 51 Top = 45 Width = 200 Anchors = [akTop, akRight] BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 51 ClientWidth = 200 TabOrder = 3 object lblSearchDepth: TLabel Left = 0 Height = 15 Top = 0 Width = 200 Caption = 'Search su&bdirectories:' FocusControl = cmbSearchDepth ParentColor = False end object cmbSearchDepth: TComboBox Left = 0 Height = 23 Top = 15 Width = 200 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end end object cbSelectedFiles: TCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbFollowSymLinks AnchorSideBottom.Control = cbFollowSymLinks AnchorSideBottom.Side = asrBottom Left = 458 Height = 19 Top = 0 Width = 169 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Selected directories and files' OnChange = cbSelectedFilesChange TabOrder = 4 end object cbOpenedTabs: TCheckBox AnchorSideRight.Control = cbSelectedFiles AnchorSideBottom.Control = cbSelectedFiles AnchorSideBottom.Side = asrBottom Left = 365 Height = 19 Top = 0 Width = 87 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Opened tabs' OnChange = cbOpenedTabsChange TabOrder = 5 end end object gbFiles: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = gbDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 108 Top = 119 Width = 746 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Files' ChildSizing.LeftRightSpacing = 5 ClientHeight = 88 ClientWidth = 742 TabOrder = 1 object lblFindFileMask: TLabel AnchorSideLeft.Control = gbFiles AnchorSideBottom.Control = cbPartialNameSearch AnchorSideBottom.Side = asrBottom Left = 5 Height = 15 Top = 4 Width = 51 Anchors = [akLeft, akBottom] Caption = '&File mask' FocusControl = cmbFindFileMask Font.Style = [fsBold] ParentColor = False ParentFont = False end object cmbFindFileMask: TComboBoxWithDelItems AnchorSideLeft.Control = gbFiles AnchorSideTop.Control = lblFindFileMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 5 Height = 23 Hint = 'Enter files names separated with ";"' Top = 19 Width = 732 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 0 end object lblExcludeFiles: TLabel AnchorSideLeft.Control = cmbFindFileMask AnchorSideTop.Control = cmbFindFileMask AnchorSideTop.Side = asrBottom Left = 5 Height = 15 Top = 45 Width = 64 BorderSpacing.Top = 3 Caption = '&Exclude files' FocusControl = cmbExcludeFiles ParentColor = False end object cmbExcludeFiles: TComboBoxWithDelItems AnchorSideLeft.Control = gbFiles AnchorSideTop.Control = lblExcludeFiles AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 5 Height = 23 Hint = 'Enter files names that should be excluded from search separated with ";"' Top = 60 Width = 732 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 5 ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 1 end object cbPartialNameSearch: TCheckBox AnchorSideRight.Control = cbRegExp AnchorSideBottom.Control = cbRegExp AnchorSideBottom.Side = asrBottom Left = 450 Height = 19 Top = 0 Width = 163 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Searc&h for part of file name' Checked = True OnChange = cbPartialNameSearchChange State = cbChecked TabOrder = 3 end object cbRegExp: TCheckBox AnchorSideTop.Control = gbFiles AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 619 Height = 19 Top = 0 Width = 118 Anchors = [akTop, akRight] Caption = '&Regular expression' OnChange = cbRegExpChange TabOrder = 4 end object cbFindInArchive: TCheckBox AnchorSideRight.Control = cbPartialNameSearch AnchorSideBottom.Control = cbPartialNameSearch AnchorSideBottom.Side = asrBottom Left = 330 Height = 19 Top = 0 Width = 114 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Search in &archives' OnChange = cbFindInArchiveChange TabOrder = 2 end end object gbFindData: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = gbFiles AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 123 Top = 227 Width = 746 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Find Data' ChildSizing.TopBottomSpacing = 2 ClientHeight = 103 ClientWidth = 742 TabOrder = 2 object lblEncoding: TLabel AnchorSideLeft.Control = gbFindData AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrCenter AnchorSideRight.Control = CheksPanel AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 81 Width = 53 BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Encodin&g:' FocusControl = cmbEncoding ParentColor = False end object cbCaseSens: TCheckBox AnchorSideLeft.Control = cbNotContainingText AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbNotContainingText AnchorSideTop.Side = asrCenter Left = 239 Height = 19 Top = 55 Width = 93 BorderSpacing.Left = 36 BorderSpacing.Top = 4 BorderSpacing.Bottom = 8 Caption = 'Case sens&itive' OnChange = cbCaseSensChange TabOrder = 4 end object cbNotContainingText: TCheckBox AnchorSideLeft.Control = lblEncoding AnchorSideTop.Control = cmbReplaceText AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 55 Width = 197 BorderSpacing.Top = 4 Caption = 'Find files N&OT containing the text' TabOrder = 3 end object cmbEncoding: TComboBox AnchorSideLeft.Control = cmbReplaceText AnchorSideTop.Control = cbNotContainingText AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 77 Width = 100 BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 ItemHeight = 15 OnSelect = cmbEncodingSelect Style = csDropDownList TabOrder = 7 end object btnEncoding: TKASButton AnchorSideLeft.Control = cmbEncoding AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbEncoding AnchorSideBottom.Control = cmbEncoding AnchorSideBottom.Side = asrBottom Left = 215 Height = 23 Top = 77 Width = 24 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 TabOrder = 8 TabStop = True OnClick = btnEncodingClick end object cmbFindText: TComboBoxWithDelItems AnchorSideLeft.Control = CheksPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindData AnchorSideRight.Control = gbFindData AnchorSideRight.Side = asrBottom Left = 112 Height = 23 Top = 2 Width = 627 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Right = 3 ItemHeight = 15 TabOrder = 1 end object cmbReplaceText: TComboBoxWithDelItems AnchorSideLeft.Control = cmbFindText AnchorSideTop.Control = cmbFindText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindData AnchorSideRight.Side = asrBottom Left = 112 Height = 23 Top = 28 Width = 627 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 BorderSpacing.Right = 3 ItemHeight = 15 TabOrder = 2 end object CheksPanel: TPanel AnchorSideLeft.Control = gbFindData AnchorSideTop.Control = cmbFindText AnchorSideBottom.Control = cmbReplaceText AnchorSideBottom.Side = asrBottom Left = 0 Height = 49 Top = 2 Width = 109 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 49 ClientWidth = 109 TabOrder = 0 object cbFindText: TCheckBox AnchorSideLeft.Control = CheksPanel AnchorSideTop.Control = CheksPanel AnchorSideRight.Side = asrBottom Left = 6 Height = 19 Top = 2 Width = 97 BorderSpacing.Left = 6 BorderSpacing.Top = 2 BorderSpacing.Right = 6 Caption = 'Find &text in file' OnChange = cbFindTextChange TabOrder = 0 end object cbReplaceText: TCheckBox AnchorSideLeft.Control = CheksPanel AnchorSideTop.Control = CheksPanel AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = CheksPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 19 Top = 28 Width = 77 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 2 Caption = 'Re&place by' OnChange = cbReplaceTextChange TabOrder = 1 end end object cbTextRegExp: TCheckBox AnchorSideLeft.Control = cbCaseSens AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrCenter Left = 344 Height = 19 Top = 55 Width = 118 BorderSpacing.Left = 12 Caption = 'Reg&ular expression' OnChange = cbTextRegExpChange TabOrder = 5 end object chkHex: TCheckBox AnchorSideLeft.Control = cbTextRegExp AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrCenter Left = 344 Height = 19 Top = 79 Width = 88 Caption = 'Hexadeci&mal' OnChange = chkHexChange TabOrder = 9 end object cbOfficeXML: TCheckBox AnchorSideLeft.Control = cbTextRegExp AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextRegExp Left = 592 Height = 24 Top = 67 Width = 93 BorderSpacing.Left = 15 Caption = 'Offi&ce XML' OnChange = cbOfficeXMLChange ParentShowHint = False ShowHint = True TabOrder = 6 end end end object tsAdvanced: TTabSheet Caption = 'Advanced' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 356 ClientWidth = 752 ImageIndex = 1 object cbDateFrom: TCheckBox AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = seFileSizeFrom AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 127 Width = 76 BorderSpacing.Left = 6 BorderSpacing.Top = 13 Caption = '&Date from:' OnChange = cbDateFromChange TabOrder = 8 end object cbNotOlderThan: TCheckBox AnchorSideLeft.Control = seNotOlderThan AnchorSideTop.Control = tsAdvanced Left = 3 Height = 19 Top = 18 Width = 100 BorderSpacing.Top = 18 Caption = 'N&ot older than:' Color = clBtnFace OnChange = cbNotOlderThanChange ParentColor = False TabOrder = 0 end object seNotOlderThan: TSpinEdit AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = cbNotOlderThan AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateFrom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbNotOlderThanUnit AnchorSideBottom.Side = asrBottom Left = 3 Height = 23 Top = 37 Width = 83 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 999999999 OnChange = seNotOlderThanChange TabOrder = 1 end object cmbNotOlderThanUnit: TComboBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbNotOlderThan AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateTo AnchorSideRight.Side = asrBottom Left = 116 Height = 23 Top = 37 Width = 83 Anchors = [akTop, akLeft, akRight] Enabled = False ItemHeight = 15 Style = csDropDownList TabOrder = 2 end object cbFileSizeFrom: TCheckBox AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = seNotOlderThan AnchorSideTop.Side = asrBottom Left = 3 Height = 19 Top = 72 Width = 72 BorderSpacing.Top = 12 Caption = 'S&ize from:' OnChange = cbFileSizeFromChange TabOrder = 3 end object cbDateTo: TCheckBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 116 Height = 19 Top = 127 Width = 61 BorderSpacing.Top = 18 Caption = 'Dat&e to:' OnChange = cbDateToChange TabOrder = 10 end object cbFileSizeTo: TCheckBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbFileSizeFrom Left = 116 Height = 19 Top = 72 Width = 57 Caption = 'Si&ze to:' OnChange = cbFileSizeToChange TabOrder = 5 end object seFileSizeFrom: TSpinEdit AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = cbFileSizeFrom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateFrom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbFileSizeUnit AnchorSideBottom.Side = asrBottom Left = 3 Height = 23 Top = 91 Width = 83 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 2147483647 OnChange = seFileSizeFromChange TabOrder = 4 end object seFileSizeTo: TSpinEdit AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbFileSizeTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbFileSizeUnit AnchorSideBottom.Side = asrBottom Left = 116 Height = 23 Top = 91 Width = 83 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 2147483647 OnChange = seFileSizeToChange TabOrder = 6 end object cmbFileSizeUnit: TComboBox AnchorSideLeft.Control = ZVTimeFrom AnchorSideTop.Control = cbFileSizeTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVTimeTo AnchorSideRight.Side = asrBottom Left = 229 Height = 23 Top = 91 Width = 160 Anchors = [akTop, akLeft, akRight] Enabled = False ItemHeight = 15 Style = csDropDownList TabOrder = 7 end object cbTimeFrom: TCheckBox AnchorSideLeft.Control = ZVTimeFrom AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 229 Height = 19 Top = 127 Width = 79 BorderSpacing.Top = 12 Caption = '&Time from:' OnChange = cbTimeFromChange TabOrder = 12 end object cbTimeTo: TCheckBox AnchorSideLeft.Control = ZVTimeTo AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 324 Height = 19 Top = 127 Width = 64 Caption = 'Ti&me to:' OnChange = cbTimeToChange TabOrder = 14 end object Bevel2: TBevel AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = ZVDateFrom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom Left = 6 Height = 4 Top = 181 Width = 740 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object ZVDateFrom: TDateTimePicker AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrBottom Left = 3 Height = 23 Top = 146 Width = 83 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 9 BorderSpacing.Left = 3 TrailingSeparator = False LeadingZeros = True NullInputAllowed = False Kind = dtkDate TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.925837488422985 UseDefaultSeparators = True HideDateTimeParts = [] MonthNames = 'Long' OnChange = ZVDateFromChange end object ZVDateTo: TDateTimePicker AnchorSideLeft.Control = ZVDateFrom AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideTop.Side = asrCenter Left = 116 Height = 23 Top = 146 Width = 83 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 11 BorderSpacing.Left = 30 TrailingSeparator = False LeadingZeros = True NullInputAllowed = False Kind = dtkDate TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.927234872688132 UseDefaultSeparators = True HideDateTimeParts = [] MonthNames = 'Long' OnChange = ZVDateToChange end object ZVTimeFrom: TDateTimePicker AnchorSideLeft.Control = ZVDateTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideBottom.Control = ZVDateFrom AnchorSideBottom.Side = asrBottom Left = 229 Height = 23 Top = 146 Width = 65 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 13 BorderSpacing.Left = 30 TrailingSeparator = False LeadingZeros = True Anchors = [akTop, akLeft, akBottom] NullInputAllowed = False Kind = dtkTime TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.930765335644537 UseDefaultSeparators = True HideDateTimeParts = [] MonthNames = 'Long' OnChange = ZVTimeFromChange end object ZVTimeTo: TDateTimePicker AnchorSideLeft.Control = ZVTimeFrom AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideBottom.Control = ZVDateFrom AnchorSideBottom.Side = asrBottom Left = 324 Height = 23 Top = 146 Width = 65 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 15 BorderSpacing.Left = 30 TrailingSeparator = False LeadingZeros = True Anchors = [akTop, akLeft, akBottom] NullInputAllowed = False Kind = dtkTime TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.930765335644537 UseDefaultSeparators = True HideDateTimeParts = [] MonthNames = 'Long' OnChange = ZVTimeToChange end object lblAttributes: TLabel AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = Bevel2 AnchorSideTop.Side = asrBottom Left = 3 Height = 15 Top = 193 Width = 52 BorderSpacing.Left = 3 BorderSpacing.Top = 8 Caption = 'Attri&butes' FocusControl = edtAttrib ParentColor = False end object edtAttrib: TEdit AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = lblAttributes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAddAttribute Left = 3 Height = 23 Top = 212 Width = 636 HelpType = htKeyword HelpKeyword = '/findfiles.html#attributes' Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Top = 4 BorderSpacing.Right = 3 ParentShowHint = False ShowHint = True TabOrder = 16 end object btnAddAttribute: TButton AnchorSideLeft.Control = edtAttrib AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAttrsHelp Left = 642 Height = 26 Top = 210 Width = 48 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 3 Caption = '&Add' Constraints.MinHeight = 26 OnClick = btnAddAttributeClick TabOrder = 17 end object btnAttrsHelp: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 693 Height = 27 Top = 210 Width = 53 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 1 Caption = '&Help' Constraints.MinHeight = 26 OnClick = btnAttrsHelpClick TabOrder = 18 end object chkDuplicates: TCheckBox AnchorSideLeft.Control = edtAttrib AnchorSideTop.Control = Bevel3 AnchorSideTop.Side = asrBottom Left = 3 Height = 19 Top = 263 Width = 122 BorderSpacing.Top = 12 Caption = 'Find du&plicate files:' OnChange = chkDuplicatesChange TabOrder = 19 end object pnlDuplicates: TPanel AnchorSideLeft.Control = chkDuplicates AnchorSideTop.Control = chkDuplicates AnchorSideTop.Side = asrBottom Left = 11 Height = 19 Top = 282 Width = 259 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 19 ClientWidth = 259 Enabled = False TabOrder = 20 object chkDuplicateName: TCheckBox Left = 0 Height = 19 Top = 0 Width = 81 Caption = 'same name' TabOrder = 0 end object chkDuplicateSize: TCheckBox Left = 89 Height = 19 Top = 0 Width = 70 Caption = 'same size' OnChange = chkDuplicateSizeChange TabOrder = 1 end object chkDuplicateHash: TCheckBox Left = 89 Height = 19 Top = 0 Width = 70 Caption = 'same hash' OnChange = chkDuplicateHashChange TabOrder = 2 end object chkDuplicateContent: TCheckBox Left = 167 Height = 19 Top = 0 Width = 92 Caption = 'same content' OnChange = chkDuplicateContentChange TabOrder = 3 end end object Bevel3: TBevel AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom Left = 6 Height = 4 Top = 247 Width = 740 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end end object tsPlugins: TTabSheet Caption = 'Plugins' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 356 ClientWidth = 752 object cbUsePlugin: TCheckBox AnchorSideLeft.Control = tsPlugins AnchorSideTop.Control = cmbPlugin AnchorSideTop.Side = asrCenter Left = 3 Height = 19 Top = 12 Width = 116 Caption = '&Use search plugin:' OnChange = cbUsePluginChange TabOrder = 0 end object cmbPlugin: TComboBox AnchorSideLeft.Control = cbUsePlugin AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = tsPlugins AnchorSideRight.Control = tsPlugins AnchorSideRight.Side = asrBottom Left = 122 Height = 23 Top = 10 Width = 627 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Top = 10 Enabled = False ItemHeight = 15 Style = csDropDownList TabOrder = 1 end inline frmContentPlugins: TfrmSearchPlugin AnchorSideLeft.Control = tsPlugins AnchorSideTop.Control = cmbPlugin AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsPlugins AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tsPlugins AnchorSideBottom.Side = asrBottom Left = 6 Height = 311 Top = 39 Width = 740 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ClientHeight = 311 ClientWidth = 740 TabOrder = 2 inherited pnlTable: TScrollBox Height = 196 Width = 740 end inherited pnlButtons: TPanel Top = 261 Width = 740 ClientWidth = 740 end inherited HeaderControl: THeaderControl Width = 740 end inherited pnlHeader: TPanel Width = 740 ClientWidth = 740 inherited chkUsePlugins: TCheckBox Width = 312 end inherited rbAnd: TRadioButton Left = 318 Width = 210 end inherited rbOr: TRadioButton Left = 534 Width = 206 end end end end object tsLoadSave: TTabSheet Caption = 'Load/Save' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 356 ClientWidth = 752 OnShow = tsLoadSaveShow object lblTemplateHeader: TLabel Left = 3 Height = 15 Top = 3 Width = 746 Align = alTop BorderSpacing.Left = 3 BorderSpacing.Top = 3 BorderSpacing.Right = 3 Caption = '&Previous searches:' FocusControl = lbSearchTemplates ParentColor = False end object lbSearchTemplates: TListBox Left = 3 Height = 272 Top = 18 Width = 746 Align = alClient BorderSpacing.Left = 3 BorderSpacing.Right = 3 BorderSpacing.Bottom = 3 ItemHeight = 0 OnDblClick = lbSearchTemplatesDblClick OnSelectionChange = lbSearchTemplatesSelectionChange ScrollWidth = 708 TabOrder = 2 end object lblSearchContents: TPanel Left = 3 Height = 21 Top = 296 Width = 746 Align = alBottom Alignment = taLeftJustify AutoSize = True BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 BorderSpacing.Around = 3 BevelOuter = bvLowered Constraints.MinHeight = 21 TabOrder = 0 end object pnlLoadSaveBottom: TPanel Left = 3 Height = 30 Top = 323 Width = 746 Align = alBottom AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 30 ClientWidth = 746 TabOrder = 1 object pnlLoadSaveBottomButtons: TPanel Left = 336 Height = 30 Top = 0 Width = 410 Align = alRight AutoSize = True BevelOuter = bvNone ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 30 ClientWidth = 410 TabOrder = 0 object btnSearchLoad: TButton Left = 0 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Right = 3 Caption = 'L&oad' Constraints.MinWidth = 75 OnClick = btnSearchLoadClick TabOrder = 0 end object btnSearchSave: TButton Left = 78 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'S&ave' Constraints.MinWidth = 75 OnClick = btnSearchSaveClick TabOrder = 1 end object btnSearchSaveWithStartingPath: TButton Left = 156 Height = 30 Hint = 'If saved then "Start in directory" will be restored when loading template. Use it if you want to fix searching to a certain directory' Top = 0 Width = 176 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'Sa&ve with "Start in directory"' Constraints.MinWidth = 75 OnClick = btnSearchSaveWithStartingPathClick ParentShowHint = False ShowHint = True TabOrder = 2 end object btnSearchDelete: TButton Left = 335 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Left = 3 Caption = '&Delete' Constraints.MinHeight = 30 Constraints.MinWidth = 75 OnClick = btnSearchDeleteClick TabOrder = 3 end end end end object tsResults: TTabSheet Caption = 'Results' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 356 ClientWidth = 752 object pnlResults: TPanel AnchorSideTop.Control = pnlFindFile Left = 3 Height = 350 Top = 3 Width = 746 Align = alClient BevelOuter = bvNone ClientHeight = 350 ClientWidth = 746 FullRepaint = False TabOrder = 0 object pnlStatus: TPanel Left = 0 Height = 8 Top = 0 Width = 746 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 8 ClientWidth = 746 FullRepaint = False TabOrder = 0 object lblStatus: TLabel AnchorSideLeft.Control = pnlStatus AnchorSideTop.Control = lblCurrent AnchorSideTop.Side = asrBottom Left = 3 Height = 1 Top = 7 Width = 1 BorderSpacing.Left = 3 BorderSpacing.Top = 3 ParentColor = False ParentFont = False end object lblCurrent: TLabel AnchorSideLeft.Control = pnlStatus AnchorSideTop.Control = pnlStatus Left = 3 Height = 1 Top = 3 Width = 1 BorderSpacing.Left = 3 BorderSpacing.Top = 3 ParentColor = False ParentFont = False end object lblFound: TLabel AnchorSideTop.Control = lblStatus AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlStatus AnchorSideRight.Side = asrBottom Left = 742 Height = 1 Top = 7 Width = 1 Anchors = [akTop, akRight] BorderSpacing.Right = 3 ParentColor = False ParentFont = False end end object lsFoundedFiles: TListBox Left = 3 Height = 300 Top = 11 Width = 740 Align = alClient BorderSpacing.Around = 3 ItemHeight = 0 MultiSelect = True OnDblClick = lsFoundedFilesDblClick OnKeyDown = lsFoundedFilesKeyDown OnMouseDown = lsFoundedFilesMouseDown OnMouseUp = lsFoundedFilesMouseUp OnMouseWheelDown = lsFoundedFilesMouseWheelDown OnMouseWheelUp = lsFoundedFilesMouseWheelUp ScrollWidth = 735 TabOrder = 1 end object pnlResultsBottom: TPanel Left = 3 Height = 33 Top = 314 Width = 740 Align = alBottom AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 33 ClientWidth = 740 Enabled = False TabOrder = 2 object pnlResultsBottomButtons: TPanel Left = 426 Height = 33 Top = 0 Width = 314 Align = alRight AutoSize = True BevelOuter = bvNone ClientHeight = 33 ClientWidth = 314 TabOrder = 0 object btnWorkWithFound: TButton AnchorSideLeft.Side = asrBottom Left = 204 Height = 33 Top = 0 Width = 110 Action = actFeedToListbox Align = alRight AutoSize = True BorderSpacing.InnerBorder = 4 Constraints.MinWidth = 50 TabOrder = 0 end object btnGoToPath: TButton Left = 119 Height = 33 Top = 0 Width = 82 Action = actGoToFile Align = alRight AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Constraints.MinWidth = 50 TabOrder = 3 end object btnView: TButton Left = 0 Height = 33 Top = 0 Width = 59 Action = actView Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Constraints.MinWidth = 50 TabOrder = 1 end object btnEdit: TButton Left = 62 Height = 33 Top = 0 Width = 54 Action = actEdit Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Constraints.MinWidth = 50 TabOrder = 2 end end end end end end object pnlButtons: TPanel Left = 766 Height = 403 Top = 40 Width = 103 Align = alRight Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 40 BevelOuter = bvNone ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 403 ClientWidth = 103 Constraints.MinWidth = 100 TabOrder = 1 object btnUseTemplate: TButton Left = 0 Height = 33 Top = 0 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'Use template' ModalResult = 1 OnKeyDown = btnNewSearchKeyDown TabOrder = 0 Visible = False end object btnSaveTemplate: TButton AnchorSideBottom.Side = asrBottom Left = 0 Height = 33 Top = 39 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Save' ModalResult = 1 OnClick = btnSearchSaveClick OnKeyDown = btnNewSearchKeyDown TabOrder = 1 Visible = False end object btnStart: TButton Left = 0 Height = 33 Top = 78 Width = 103 Action = actStart AutoSize = True BorderSpacing.InnerBorder = 4 OnKeyDown = btnNewSearchKeyDown TabOrder = 2 end object btnStop: TButton Left = 0 Height = 33 Top = 117 Width = 103 Action = actCancel AutoSize = True BorderSpacing.InnerBorder = 4 OnKeyDown = btnNewSearchKeyDown TabOrder = 3 end object btnClose: TButton Left = 0 Height = 33 Top = 156 Width = 103 Action = actClose AutoSize = True BorderSpacing.InnerBorder = 4 OnKeyDown = btnNewSearchKeyDown TabOrder = 4 end object btnNewSearch: TButton Left = 0 Height = 33 Top = 219 Width = 103 Action = actNewSearch AutoSize = True BorderSpacing.Top = 30 BorderSpacing.InnerBorder = 4 OnKeyDown = btnNewSearchKeyDown TabOrder = 5 end object btnLastSearch: TButton Left = 0 Height = 33 Top = 258 Width = 103 Action = actLastSearch AutoSize = True BorderSpacing.InnerBorder = 4 OnKeyDown = btnNewSearchKeyDown TabOrder = 6 end end end object PopupMenuFind: TPopupMenu OnPopup = PopupMenuFindPopup left = 312 top = 48 object miOpenInNewTab: TMenuItem Caption = 'Open In New Tab(s)' OnClick = miOpenInNewTabClick end object miShowInViewer: TMenuItem Caption = 'Show In Viewer' OnClick = miShowInViewerClick end object miShowInEditor: TMenuItem Caption = 'Show In Editor' OnClick = miShowInEditorClick end object miRemoveFromLlist: TMenuItem Caption = 'Remove from list' OnClick = miRemoveFromLlistClick end object miShowAllFound: TMenuItem Caption = 'Show all found items' Enabled = False OnClick = miShowAllFoundClick end end object actList: TActionList left = 168 top = 48 object actIntelliFocus: TAction Caption = 'Find Data' OnExecute = actExecute end object actStart: TAction Caption = '&Start' OnExecute = actExecute end object actCancel: TAction Caption = 'C&ancel' Enabled = False OnExecute = actExecute end object actClose: TAction Caption = '&Close' OnExecute = actExecute end object actNewSearch: TAction Caption = '&New search' OnExecute = actExecute end object actNewSearchClearFilters: TAction Caption = 'New search (clear filters)' OnExecute = actExecute end object actLastSearch: TAction Caption = '&Last search' Enabled = False OnExecute = actExecute end object actView: TAction Caption = '&View' Enabled = False OnExecute = actExecute end object actEdit: TAction Caption = '&Edit' Enabled = False OnExecute = actExecute end object actGoToFile: TAction Caption = '&Go to file' Enabled = False OnExecute = actExecute end object actFeedToListbox: TAction Caption = 'Feed to &listbox' Enabled = False OnExecute = actExecute end object actPageStandard: TAction Caption = 'Go to page "Standard"' OnExecute = actExecute end object actPageAdvanced: TAction Caption = 'Go to page "Advanced"' OnExecute = actExecute end object actPagePlugins: TAction Caption = 'Go to page "Plugins"' OnExecute = actExecute end object actPageLoadSave: TAction Caption = 'Go to page "Load/Save"' OnExecute = actExecute end object actPageResults: TAction Caption = 'Go to page "Results"' OnExecute = actExecute end object actCancelClose: TAction Caption = 'Cancel search and close window' OnExecute = actExecute end object actFreeFromMem: TAction Caption = 'Cancel search, close and free from memory' OnExecute = actExecute end object actFreeFromMemAllOthers: TAction Caption = 'For all other "Find files", cancel, close and free from memory' OnExecute = actExecute end object actConfigFileSearchHotKeys: TAction Caption = 'Configuration of hot keys' OnExecute = actExecute end object actPageNext: TAction Caption = 'Switch to Nex&t Page' OnExecute = actExecute end object actPagePrev: TAction Caption = 'Switch to &Previous Page' OnExecute = actExecute end end object mmMainMenu: TMainMenu left = 232 top = 48 object miAction: TMenuItem Caption = '&Action' object miNewSearch: TMenuItem Action = actNewSearch end object miNewSearchClearFilters: TMenuItem Action = actNewSearchClearFilters end object miLastSearch: TMenuItem Action = actLastSearch end object miStart: TMenuItem Action = actStart end object miCancel: TMenuItem Action = actCancel end object miSeparator1: TMenuItem Caption = '-' end object miClose: TMenuItem Action = actClose end object miCancelClose: TMenuItem Action = actCancelClose end object miFreeFromMem: TMenuItem Action = actFreeFromMem end object miFreeFromMemAllOthers: TMenuItem Action = actFreeFromMemAllOthers Caption = 'For all others, cancel, close and free from memory' end end object miViewTab: TMenuItem Caption = '&View' object miPageStandard: TMenuItem Action = actPageStandard end object miPageAdvanced: TMenuItem Action = actPageAdvanced end object miPagePlugins: TMenuItem Action = actPagePlugins end object miPageLoadSave: TMenuItem Action = actPageLoadSave end object miPageResults: TMenuItem Action = actPageResults end object miSeparator2: TMenuItem Caption = '-' end end object miResult: TMenuItem Caption = '&Result' object miView: TMenuItem Action = actView end object miEdit: TMenuItem Action = actEdit end object miFeedToListbox: TMenuItem Action = actFeedToListbox end object miGoToFile: TMenuItem Action = actGoToFile end end object miOptions: TMenuItem Caption = 'Options' object miConfigFileSearchHotKeys: TMenuItem Action = actConfigFileSearchHotKeys end end end end doublecmd-1.1.30/src/fFileOpDlg.pas0000644000175000001440000011775615104114162016055 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Window displaying progress for file source operations and queues. Copyright (C) 2008-2021 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2012 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fFileOpDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls, Buttons, ExtCtrls, KASProgressBar, uOperationsManager, uFileSourceOperation, uFileSourceOperationUI, uOSForms; type TFileOpDlgLook = set of (fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb); TOperationProgressWindowEvent = (opwevOpened, opwevClosed); TOperationProgressWindowEvents = set of TOperationProgressWindowEvent; TOperationProgressWindowEventProc = procedure(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent) of object; TOperationProgressWindowOption = (opwoIfExistsBringToFront, opwoStartMinimized); TOperationProgressWindowOptions = set of TOperationProgressWindowOption; { TfrmFileOp } TfrmFileOp = class(TModalDialog) btnCancel: TBitBtn; btnPauseStart: TBitBtn; btnViewOperations: TBitBtn; btnMinimizeToPanel: TBitBtn; lblFileCount: TLabel; lblCurrentOperationText: TLabel; lblEstimated: TLabel; lblFileNameFrom: TLabel; lblFileNameTo: TLabel; lblFrom: TLabel; lblCurrentOperation: TLabel; lblTo: TLabel; pnlQueue: TPanel; pbCurrent: TKASProgressBar; pbTotal: TKASProgressBar; pnlButtons: TPanel; pnlClient: TPanel; pnlFrom: TPanel; pnlTo: TPanel; procedure btnCancelClick(Sender: TObject); procedure btnMinimizeToPanelClick(Sender: TObject); procedure btnPauseStartClick(Sender: TObject); procedure btnViewOperationsClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); private FOperationHandle: TOperationHandle; FQueueIdentifier: TOperationsManagerQueueIdentifier; FUpdateTimer: TTimer; // 0) then Result := Queue.Items[0].Handle else Result := InvalidOperationHandle; end; class function TfrmFileOp.GetOpenedForm(AOperationHandle: TOperationHandle): TfrmFileOp; var Index: Integer; Item: POpenedForm; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; if Item^.OperationHandle = AOperationHandle then Exit(Item^.Form); end; Result := nil; end; class function TfrmFileOp.GetOpenedForm(AQueueIdentifier: TOperationsManagerQueueIdentifier): TfrmFileOp; var Index: Integer; Item: POpenedForm; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; if Item^.QueueIdentifier = AQueueIdentifier then Exit(Item^.Form); end; Result := nil; end; constructor TfrmFileOp.Create(OperationHandle: TOperationHandle); var OpManItem: TOperationsManagerItem; begin FOperationHandle := InvalidOperationHandle; inherited Create(Application); AutoSize := True; OpManItem := OperationsManager.GetItemByHandle(OperationHandle); if Assigned(OpManItem) then begin FStopOperationOnClose := True; FOperationHandle := OperationHandle; end else begin CloseDialog; end; end; constructor TfrmFileOp.Create(QueueIdentifier: TOperationsManagerQueueIdentifier); begin Create(GetFirstOperationHandle(QueueIdentifier)); end; destructor TfrmFileOp.Destroy; begin inherited Destroy; FreeAndNil(FUserInterface); end; procedure TfrmFileOp.ExecuteModal; var OpManItem: TOperationsManagerItem; begin if FOperationHandle <> InvalidOperationHandle then begin if Assigned(FUserInterface) then begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.Execute; end; end; end; function TfrmFileOp.ShowModal: Integer; begin BorderStyle:= bsDialog; ShowInTaskBar:= stNever; btnViewOperations.Visible:= False; btnMinimizeToPanel.Visible:= False; Result:= inherited ShowModal; // Workaround http://doublecmd.sourceforge.net/mantisbt/view.php?id=1323 {$IF DEFINED(DARWIN) and DEFINED(LCLQT)} Visible:= True; Visible:= False; {$ENDIF} end; procedure TfrmFileOp.FinalizeOperation; var OpManItem: TOperationsManagerItem; begin FUpdateTimer.Enabled := False; if FOperationHandle <> InvalidOperationHandle then begin if Assigned(FUserInterface) then begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.RemoveUserInterface(FUserInterface); end; RemoveFromOpenedForms; FOperationHandle := InvalidOperationHandle; end; end; function TfrmFileOp.CloseQuery: Boolean; begin Result := True; if FStopOperationOnClose then Result := StopOperationOrQueue; end; class procedure TfrmFileOp.AddEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; begin for Event in Events do begin New(Item); Item^.EventFunction := FunctionToCall; EventsListeners[Event].Add(Item); end; end; function TfrmFileOp.AddToOpenedForms(OpManItem: TOperationsManagerItem): Boolean; var Index: Integer; Item: POpenedForm; Found: Boolean = False; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; // Check if another form is not already opened for the operation or queue. if (Item^.OperationHandle = FOperationHandle) or (not OpManItem.Queue.IsFree and (Item^.QueueIdentifier = FQueueIdentifier)) then begin Exit(False); end else if Item^.Form = Self then begin Found := True; Break; end; end; if not Found then begin New(Item); OpenedForms.Add(Item); end; Item^.Form := Self; Item^.OperationHandle := FOperationHandle; Item^.QueueIdentifier := FQueueIdentifier; NotifyEvents([opwevOpened]); Result := True; end; class procedure TfrmFileOp.RemoveEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; i: Integer; begin for Event in Events do begin for i := 0 to EventsListeners[Event].Count - 1 do begin Item := PEventsListItem(EventsListeners[Event].Items[i]); if Item^.EventFunction = FunctionToCall then begin EventsListeners[Event].Delete(i); Dispose(Item); Break; // break from one for only end; end; end; end; procedure TfrmFileOp.RemoveFromOpenedForms; var i: Integer; Item: POpenedForm; begin for i := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[i]; if Item^.Form = Self then begin Dispose(Item); OpenedForms.Delete(i); NotifyEvents([opwevClosed]); Break; end; end; end; class function TfrmFileOp.IsOpenedFor(AOperationHandle: TOperationHandle): Boolean; begin Result := Assigned(GetOpenedForm(AOperationHandle)); end; class function TfrmFileOp.IsOpenedFor(AQueueIdentifier: TOperationsManagerQueueIdentifier): Boolean; begin Result := Assigned(GetOpenedForm(AQueueIdentifier)); end; class procedure TfrmFileOp.ShowFor(AOperationHandle: TOperationHandle; Options: TOperationProgressWindowOptions); var OperationDialog: TfrmFileOp; OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(AOperationHandle); if Assigned(OpManItem) then begin if not OpManItem.Queue.IsFree then begin ShowFor(OpManItem.Queue.Identifier, Options); end else begin OperationDialog := GetOpenedForm(AOperationHandle); if Assigned(OperationDialog) then ShowExistingWindow(OperationDialog, Options) else begin OperationDialog := TfrmFileOp.Create(AOperationHandle); ShowNewWindow(OperationDialog, Options); end; end; end; end; class procedure TfrmFileOp.ShowFor(AQueueIdentifier: TOperationsManagerQueueIdentifier; Options: TOperationProgressWindowOptions); var OperationDialog: TfrmFileOp; begin OperationDialog := GetOpenedForm(AQueueIdentifier); if Assigned(OperationDialog) then begin ShowExistingWindow(OperationDialog, Options); end else begin OperationDialog := TfrmFileOp.Create(AQueueIdentifier); ShowNewWindow(OperationDialog, Options); end; end; class procedure TfrmFileOp.ShowExistingWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); begin if opwoIfExistsBringToFront in Options then AWindow.ShowOnTop; end; class procedure TfrmFileOp.ShowNewWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); begin if opwoStartMinimized in Options then begin {$IF lcl_fullversion >= 093100} // Workaround for bug in Lazarus 0.9.31 #0021603. AWindow.Visible := True; AWindow.WindowState := wsMinimized; {$ELSE} AWindow.WindowState := wsMinimized; AWindow.Visible := True; {$ENDIF} end else AWindow.Show; end; procedure TfrmFileOp.DoAutoSize; begin inherited DoAutoSize; {$IF DEFINED(LCLQT5)} InvalidateBoundsRealized; {$ENDIF} end; function TfrmFileOp.StopOperationOrQueue: Boolean; var Paused: Boolean; OpManItem: TOperationsManagerItem; begin Result := True; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.IsFree then begin Paused := OpManItem.Operation.State in [fsosStarting, fsosRunning, fsosWaitingForConnection]; if Paused then OpManItem.Operation.Pause; end else begin Paused := not OpManItem.Queue.Paused; if Paused then OpManItem.Queue.Pause; end; Result:= msgYesNo(rsMsgCancelOperation, msmbYes); if Result then begin if OpManItem.Queue.IsFree then OpManItem.Operation.Stop else OpManItem.Queue.Stop; end else if Paused then begin if OpManItem.Queue.IsFree then OpManItem.Operation.TogglePause else begin OpManItem.Queue.TogglePause; end; end; end; end; procedure TfrmFileOp.OnUpdateTimer(Sender: TObject); var OpManItem: TOperationsManagerItem; Queue: TOperationsManagerQueue; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); // Check if operation did not change queues. if Assigned(OpManItem) and (OpManItem.Queue.Identifier <> FQueueIdentifier) then begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; FinalizeOperation; if Assigned(Queue) and not Queue.IsFree then begin // Queue was begin followed - switch to next operation from that queue. FQueueIdentifier := Queue.Identifier; FOperationHandle := GetFirstOperationHandle(Queue.Identifier); end else begin // Follow the operation to new queue either because previously followed // queue was free-operations queue or old queue was destroyed. FQueueIdentifier := OpManItem.Queue.Identifier; FOperationHandle := OpManItem.Handle; end; if not InitializeOperation then begin CloseDialog; Exit; end; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; // Check if first operation in the queue hasn't changed. if Assigned(OpManItem) and not OpManItem.Queue.IsFree and (GetFirstOperationHandle(FQueueIdentifier) <> FOperationHandle) then begin FinalizeOperation; FOperationHandle := GetFirstOperationHandle(FQueueIdentifier); if not InitializeOperation then begin CloseDialog; Exit; end; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; if Assigned(OpManItem) then begin UpdateOperation(OpManItem); end else // Operation was destroyed begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if not Assigned(Queue) or Queue.IsFree then begin // Single operation was being followed and it has finished // or all operations in queue have finished - close window. CloseDialog; end else begin // Queue was begin followed - switch to next operation from that queue. FOperationHandle := GetFirstOperationHandle(FQueueIdentifier); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); OpManItem.Operation.AddUserInterface(FUserInterface); end; end; end; procedure TfrmFileOp.InitializeControls(OpManItem: TOperationsManagerItem; FileOpDlgLook: TFileOpDlgLook); begin pnlQueue.Visible := not OpManItem.Queue.IsFree; lblFrom.Visible := fodl_from_lbl in FileOpDlgLook; lblFileNameFrom.Visible := lblFrom.Visible; lblTo.Visible := fodl_to_lbl in FileOpDlgLook; lblFileNameTo.Visible := lblTo.Visible; pbCurrent.Visible := fodl_current_pb in FileOpDlgLook; pbTotal.Visible := fodl_total_pb in FileOpDlgLook; pbCurrent.ShowInTaskbar := [fodl_current_pb, fodl_total_pb] * FileOpDlgLook = [fodl_current_pb]; pbTotal.ShowInTaskbar := fodl_total_pb in FileOpDlgLook; lblFileNameFrom.Caption := ''; lblFileNameTo.Caption := ''; lblEstimated.Caption := #32; lblFileCount.Caption := EmptyStr; end; procedure TfrmFileOp.NotifyEvents(Events: TOperationProgressWindowEvents); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; i: Integer; begin for Event in Events do begin for i := 0 to EventsListeners[Event].Count - 1 do begin Item := EventsListeners[Event].Items[i]; Item^.EventFunction(FOperationHandle, Event); end; end; end; procedure TfrmFileOp.SetPauseGlyph; begin dmComData.ImageList.GetBitmap(1, btnPauseStart.Glyph); end; procedure TfrmFileOp.SetPlayGlyph; begin dmComData.ImageList.GetBitmap(0, btnPauseStart.Glyph); end; procedure TfrmFileOp.SetLabelCaption(ALabel: TLabel; const AText: String); begin ALabel.Hint := AText; ALabel.Caption := MinimizeFilePath(AText, ALabel.Canvas, ALabel.Width); end; procedure TfrmFileOp.SetProgressBytes(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentBytes: Int64; TotalBytes: Int64); begin if (CurrentBytes = -1) then ProgressBar.Style := pbstMarquee else begin if Operation.State = fsosRunning then ProgressBar.Style := pbstNormal; // Show only percent if TotalBytes < 0 then begin ProgressBar.SetProgress(CurrentBytes, -TotalBytes, EmptyStr); end else begin ProgressBar.SetProgress(CurrentBytes, TotalBytes, cnvFormatFileSize(CurrentBytes, uoscOperation) + '/' + cnvFormatFileSize(TotalBytes, uoscOperation) ); end; end; end; procedure TfrmFileOp.SetProgressFiles(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentFiles: Int64; TotalFiles: Int64); begin if (CurrentFiles = -1) then ProgressBar.Style := pbstMarquee else begin if Operation.State = fsosRunning then ProgressBar.Style := pbstNormal; // Show only percent if TotalFiles < 0 then begin ProgressBar.SetProgress(CurrentFiles, -TotalFiles, EmptyStr); end else begin ProgressBar.SetProgress(CurrentFiles, TotalFiles, IntToStrTS(CurrentFiles) + '/' + IntToStrTS(TotalFiles) ); end; end; end; procedure TfrmFileOp.SetSpeedAndTime(Operation: TFileSourceOperation; RemainingTime: TDateTime; Speed: String); var sEstimated: String; begin if Operation.State <> fsosRunning then sEstimated := #32 else begin if RemainingTime < 0 then sEstimated := #32 else if RemainingTime > 0 then begin // Normal view, less than 24 hours of estimated time if RemainingTime < 1.0 then sEstimated := FormatDateTime('HH:MM:SS', RemainingTime) else begin sEstimated := IntToStr(Trunc(RemainingTime)) + '``' + FormatDateTime('HH:MM:SS', RemainingTime); end; sEstimated := Format(rsDlgSpeedTime, [Speed, sEstimated]); end else sEstimated := Format(rsDlgSpeed, [Speed]); end; lblEstimated.Caption := sEstimated; end; procedure TfrmFileOp.InitializeCopyOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeMoveOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; function TfrmFileOp.InitializeOperation: Boolean; var OpManItem: TOperationsManagerItem; begin Result := False; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) and not OpManItem.Queue.IsFree then begin FOperationHandle := GetFirstOperationHandle(OpManItem.Queue.Identifier); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; if Assigned(OpManItem) then begin FQueueIdentifier := OpManItem.Queue.Identifier; if AddToOpenedForms(OpManItem) then begin if not Assigned(FUserInterface) then FUserInterface := TFileSourceOperationMessageBoxesUI.Create; OpManItem.Operation.AddUserInterface(FUserInterface); ProgressBarStyle:= pbstMarquee; case OpManItem.Operation.ID of fsoCopy, fsoCopyIn, fsoCopyOut: InitializeCopyOperation(OpManItem); fsoMove: InitializeMoveOperation(OpManItem); fsoDelete: InitializeDeleteOperation(OpManItem); fsoWipe: InitializeWipeOperation(OpManItem); fsoSplit: InitializeSplitOperation(OpManItem); fsoCombine: InitializeCombineOperation(OpManItem); fsoCalcChecksum: InitializeCalcChecksumOperation(OpManItem); fsoTestArchive: InitializeTestArchiveOperation(OpManItem); fsoCalcStatistics: InitializeCalcStatisticsOperation(OpManItem); fsoSetFileProperty: InitializeSetFilePropertyOperation(OpManItem); else begin InitializeControls(OpManItem, [fodl_total_pb]); end; end; UpdatePauseStartButton(OpManItem); Caption := EmptyStr; FUpdateTimer.Enabled := True; Result := True; end; end; if not Result then FOperationHandle := InvalidOperationHandle; end; procedure TfrmFileOp.InitializeDeleteOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_total_pb]); end; procedure TfrmFileOp.InitializeCalcStatisticsOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl]); end; procedure TfrmFileOp.InitializeSetFilePropertyOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_total_pb]); end; procedure TfrmFileOp.InitializeWipeOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeSplitOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeCombineOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeCalcChecksumOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeTestArchiveOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.UpdateCopyOperation(Operation: TFileSourceOperation); var Speed: String; CopyOperation: TFileSourceCopyOperation; CopyStatistics: TFileSourceCopyOperationStatistics; begin CopyOperation := Operation as TFileSourceCopyOperation; CopyStatistics := CopyOperation.RetrieveStatistics; with CopyStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFileFrom); SetLabelCaption(lblFileNameTo, CurrentFileTo); if (TotalBytes < 0) then Speed:= '?' else begin Speed:= cnvFormatFileSize(BytesPerSecond, uoscOperation); end; SetProgressCount(Operation, DoneFiles, TotalFiles); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, Speed); end; end; procedure TfrmFileOp.UpdateMoveOperation(Operation: TFileSourceOperation); var Speed: String; MoveOperation: TFileSourceMoveOperation; MoveStatistics: TFileSourceMoveOperationStatistics; begin MoveOperation := Operation as TFileSourceMoveOperation; MoveStatistics := MoveOperation.RetrieveStatistics; with MoveStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFileFrom); SetLabelCaption(lblFileNameTo, CurrentFileTo); if (TotalBytes < 0) then Speed:= '?' else begin Speed:= cnvFormatFileSize(BytesPerSecond, uoscOperation); end; SetProgressCount(Operation, DoneFiles, TotalFiles); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, Speed); end; end; procedure TfrmFileOp.UpdateOperation(OpManItem: TOperationsManagerItem); var NewCaption: String; begin case OpManItem.Operation.ID of fsoCopy, fsoCopyIn, fsoCopyOut: UpdateCopyOperation(OpManItem.Operation); fsoMove: UpdateMoveOperation(OpManItem.Operation); fsoDelete: UpdateDeleteOperation(OpManItem.Operation); fsoWipe: UpdateWipeOperation(OpManItem.Operation); fsoSplit: UpdateSplitOperation(OpManItem.Operation); fsoCombine: UpdateCombineOperation(OpManItem.Operation); fsoCalcChecksum: UpdateCalcChecksumOperation(OpManItem.Operation); fsoCalcStatistics: UpdateCalcStatisticsOperation(OpManItem.Operation); fsoTestArchive: UpdateTestArchiveOperation(OpManItem.Operation); fsoSetFileProperty: UpdateSetFilePropertyOperation(OpManItem.Operation); else begin // Operation not currently supported for display. // Only show general progress. pbTotal.Position := Round(OpManItem.Operation.Progress * pbTotal.Max); end; end; UpdatePauseStartButton(OpManItem); if OpManItem.Queue.IsFree then begin NewCaption := GetProgressString(OpManItem.Operation.Progress) + ' ' + OpManItem.Operation.GetDescription(fsoddJob) + GetOperationStateString(OpManItem.Operation.State); end else begin if OpManItem.Queue.Paused then NewCaption := '[' + IntToStr(OpManItem.Queue.Count) + '] ' + OpManItem.Queue.GetDescription(False) + GetOperationStateString(fsosPaused) else NewCaption := '[' + IntToStr(OpManItem.Queue.Count) + '] ' + GetProgressString(OpManItem.Operation.Progress) + ' ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + OpManItem.Queue.GetDescription(False); lblCurrentOperationText.Caption := OpManItem.Operation.GetDescription(fsoddJob) + ' ' + GetProgressString(OpManItem.Operation.Progress); end; Caption := NewCaption; end; procedure TfrmFileOp.UpdatePauseStartButton(OpManItem: TOperationsManagerItem); begin if OpManItem.Queue.IsFree then begin case OpManItem.Operation.State of fsosNotStarted, fsosStopped, fsosPaused: begin btnPauseStart.Enabled := True; SetPlayGlyph; end; fsosStarting, fsosStopping, fsosPausing, fsosWaitingForFeedback: begin btnPauseStart.Enabled := False; end; fsosRunning, fsosWaitingForConnection: begin btnPauseStart.Enabled := True; SetPauseGlyph; end; else btnPauseStart.Enabled := False; end; end else begin btnPauseStart.Enabled := True; if OpManItem.Queue.Paused then SetPlayGlyph else SetPauseGlyph; end; end; procedure TfrmFileOp.UpdateDeleteOperation(Operation: TFileSourceOperation); var DeleteOperation: TFileSourceDeleteOperation; DeleteStatistics: TFileSourceDeleteOperationStatistics; begin DeleteOperation := Operation as TFileSourceDeleteOperation; DeleteStatistics := DeleteOperation.RetrieveStatistics; with DeleteStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFile); SetProgressFiles(Operation, pbTotal, DoneFiles, TotalFiles); SetSpeedAndTime(Operation, RemainingTime, IntToStrTS(FilesPerSecond)); end; end; procedure TfrmFileOp.UpdateWipeOperation(Operation: TFileSourceOperation); var WipeOperation: TFileSourceWipeOperation; WipeStatistics: TFileSourceWipeOperationStatistics; begin WipeOperation := Operation as TFileSourceWipeOperation; WipeStatistics := WipeOperation.RetrieveStatistics; with WipeStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFile); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateSplitOperation(Operation: TFileSourceOperation); var SplitOperation: TFileSourceSplitOperation; SplitStatistics: TFileSourceSplitOperationStatistics; begin SplitOperation := Operation as TFileSourceSplitOperation; SplitStatistics := SplitOperation.RetrieveStatistics; with SplitStatistics do begin SetLabelCaption(lblFileNameFrom ,CurrentFileFrom); SetLabelCaption(lblFileNameTo, CurrentFileTo); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateCombineOperation(Operation: TFileSourceOperation); var CombineOperation: TFileSourceCombineOperation; CombineStatistics: TFileSourceCombineOperationStatistics; begin CombineOperation := Operation as TFileSourceCombineOperation; CombineStatistics := CombineOperation.RetrieveStatistics; with CombineStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFileFrom); SetLabelCaption(lblFileNameTo, CurrentFileTo); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateCalcStatisticsOperation(Operation: TFileSourceOperation); var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; begin CalcStatisticsOperation := Operation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; with CalcStatisticsOperationStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFile); SetSpeedAndTime(Operation, 0, IntToStrTS(FilesPerSecond)); end; end; procedure TfrmFileOp.UpdateCalcChecksumOperation(Operation: TFileSourceOperation); var CalcChecksumOperation: TFileSourceCalcChecksumOperation; CalcChecksumStatistics: TFileSourceCalcChecksumOperationStatistics; begin CalcChecksumOperation := Operation as TFileSourceCalcChecksumOperation; CalcChecksumStatistics := CalcChecksumOperation.RetrieveStatistics; with CalcChecksumStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFile); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateTestArchiveOperation(Operation: TFileSourceOperation); var TestArchiveOperation: TFileSourceTestArchiveOperation; TestArchiveStatistics: TFileSourceTestArchiveOperationStatistics; begin TestArchiveOperation := Operation as TFileSourceTestArchiveOperation; TestArchiveStatistics := TestArchiveOperation.RetrieveStatistics; with TestArchiveStatistics do begin SetLabelCaption(lblFileNameFrom, ArchiveFile); SetLabelCaption(lblFileNameTo, CurrentFile); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, uoscOperation)); end; end; procedure TfrmFileOp.UpdateSetFilePropertyOperation(Operation: TFileSourceOperation); var SetOperation: TFileSourceSetFilePropertyOperation; SetStatistics: TFileSourceSetFilePropertyOperationStatistics; begin SetOperation := Operation as TFileSourceSetFilePropertyOperation; SetStatistics := SetOperation.RetrieveStatistics; with SetStatistics do begin SetLabelCaption(lblFileNameFrom, CurrentFile); SetProgressFiles(Operation, pbTotal, DoneFiles, TotalFiles); SetSpeedAndTime(Operation, RemainingTime, IntToStrTS(FilesPerSecond)); end; end; function TfrmFileOp.GetProgressBarStyle: TProgressBarStyle; begin if (pbCurrent.Style = pbstMarquee) and (pbTotal.Style = pbstMarquee) then Result:= pbstMarquee else Result:= pbstNormal; end; procedure TfrmFileOp.SetProgressBarStyle(const AValue: TProgressBarStyle); begin pbCurrent.Style:= AValue; pbTotal.Style:= AValue; end; procedure TfrmFileOp.SetProgressCount(Operation: TFileSourceOperation; DoneFiles: Int64; TotalFiles: Int64); begin if (DoneFiles < 0) or (TotalFiles = 0) then lblFileCount.Caption := EmptyStr else begin lblFileCount.Caption := IntToStrTS(DoneFiles) + ' / ' + IntToStrTS(TotalFiles); end; end; initialization Initialize; finalization Terminate; end. doublecmd-1.1.30/src/fFileOpDlg.lrj0000644000175000001440000000143215104114162016040 0ustar alexxusers{"version":1,"strings":[ {"hash":155261978,"name":"tfrmfileop.lblcurrentoperation.caption","sourcebytes":[67,117,114,114,101,110,116,32,111,112,101,114,97,116,105,111,110,58],"value":"Current operation:"}, {"hash":5084682,"name":"tfrmfileop.lblfrom.caption","sourcebytes":[70,114,111,109,58],"value":"From:"}, {"hash":23338,"name":"tfrmfileop.lblto.caption","sourcebytes":[84,111,58],"value":"To:"}, {"hash":24538892,"name":"tfrmfileop.btnminimizetopanel.caption","sourcebytes":[38,84,111,32,112,97,110,101,108],"value":"&To panel"}, {"hash":264850924,"name":"tfrmfileop.btnviewoperations.caption","sourcebytes":[38,86,105,101,119,32,97,108,108],"value":"&View all"}, {"hash":177752476,"name":"tfrmfileop.btncancel.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"} ]} doublecmd-1.1.30/src/fFileOpDlg.lfm0000644000175000001440000001245015104114162016031 0ustar alexxusersobject frmFileOp: TfrmFileOp Left = 576 Height = 212 Top = 272 Width = 522 ClientHeight = 212 ClientWidth = 522 Constraints.MinWidth = 500 OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter ShowInTaskBar = stAlways LCLVersion = '2.0.0.2' object pnlClient: TPanel Left = 3 Height = 141 Top = 3 Width = 516 Align = alTop AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 141 ClientWidth = 516 TabOrder = 0 object pnlQueue: TPanel Left = 0 Height = 21 Top = 0 Width = 516 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 21 ClientWidth = 516 TabOrder = 0 object lblCurrentOperation: TLabel Left = 0 Height = 15 Top = 0 Width = 516 Align = alTop BorderSpacing.Bottom = 5 Caption = 'Current operation:' ParentColor = False end object lblCurrentOperationText: TLabel Left = 0 Height = 1 Top = 20 Width = 516 Align = alTop ParentColor = False end end object pnlFrom: TPanel Left = 0 Height = 15 Top = 21 Width = 516 Align = alTop AutoSize = True BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 15 ClientWidth = 516 TabOrder = 1 object lblFrom: TLabel Left = 0 Height = 15 Top = 0 Width = 40 Align = alLeft Caption = 'From:' Constraints.MinWidth = 40 ParentColor = False end object lblFileNameFrom: TLabel Left = 40 Height = 15 Top = 0 Width = 476 Align = alClient ParentColor = False ParentShowHint = False ShowAccelChar = False ShowHint = True end end object pnlTo: TPanel Left = 0 Height = 15 Top = 39 Width = 516 Align = alTop AutoSize = True BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 15 ClientWidth = 516 TabOrder = 2 object lblFileNameTo: TLabel Left = 40 Height = 15 Top = 0 Width = 476 Align = alClient ParentColor = False ParentShowHint = False ShowAccelChar = False ShowHint = True end object lblTo: TLabel Left = 0 Height = 15 Top = 0 Width = 40 Align = alLeft Caption = 'To:' Constraints.MinWidth = 40 ParentColor = False end end object lblEstimated: TLabel Left = 0 Height = 1 Top = 57 Width = 516 Align = alTop BorderSpacing.Top = 3 ParentColor = False end object pbCurrent: TKASProgressBar Left = 0 Height = 22 Top = 61 Width = 516 Align = alTop BorderSpacing.Top = 3 Max = 516 Smooth = True TabOrder = 3 BarShowText = True end object pbTotal: TKASProgressBar Left = 0 Height = 22 Top = 86 Width = 516 Align = alTop BorderSpacing.Top = 3 Max = 516 Smooth = True TabOrder = 4 BarShowText = True end object pnlButtons: TPanel Left = 0 Height = 30 Top = 111 Width = 516 Align = alTop AutoSize = True BorderSpacing.Top = 3 BevelOuter = bvNone ClientHeight = 30 ClientWidth = 516 TabOrder = 5 object btnMinimizeToPanel: TBitBtn Left = 0 Height = 30 Top = 0 Width = 72 Align = alLeft AutoSize = True BorderSpacing.Right = 3 Caption = '&To panel' OnClick = btnMinimizeToPanelClick TabOrder = 0 end object btnViewOperations: TBitBtn Left = 75 Height = 30 Top = 0 Width = 66 Align = alLeft AutoSize = True BorderSpacing.Right = 3 Caption = '&View all' OnClick = btnViewOperationsClick TabOrder = 1 end object btnCancel: TBitBtn Left = 377 Height = 30 Top = 0 Width = 86 Align = alRight AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 50 Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 2 end object btnPauseStart: TBitBtn Left = 466 Height = 30 Top = 0 Width = 50 Align = alRight AutoSize = True BorderSpacing.Left = 3 Constraints.MinWidth = 50 GlyphShowMode = gsmAlways OnClick = btnPauseStartClick Spacing = 0 TabOrder = 3 end object lblFileCount: TLabel AnchorSideLeft.Control = btnViewOperations AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 144 Height = 1 Top = 15 Width = 230 Alignment = taCenter Anchors = [akTop, akLeft, akRight] ParentColor = False end end end end doublecmd-1.1.30/src/fAbout.pas0000644000175000001440000001522315104114162015304 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- About dialog Copyright (C) 2006-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit fAbout; {$mode objfpc}{$H+} interface uses Graphics, Forms, Controls, StdCtrls, ExtCtrls, Buttons, SysUtils, Classes, LCLType, LMessages; type { TfrmAbout } TfrmAbout = class(TForm) btnClose: TBitBtn; btnCopyToClipboard: TButton; imgLogo: TImage; lblCommit: TLabel; lblWidgetsetVer: TLabel; lblPlatform: TLabel; lblOperatingSystem: TLabel; lblRevision: TLabel; lblHomePageAddress: TLabel; lblHomePage: TLabel; lblFreePascalVer: TLabel; lblTitle: TLabel; lblLazarusVer: TLabel; lblBuild: TLabel; lblVersion: TLabel; pnlText: TPanel; memInfo: TMemo; pnlInfo: TPanel; procedure btnCopyToClipboardClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lblHomePageAddressClick(Sender: TObject); procedure lblHomePageAddressMouseEnter(Sender: TObject); procedure lblHomePageAddressMouseLeave(Sender: TObject); procedure frmAboutShow(Sender: TObject); private FMouseLeave, FMouseEnter: TColor; protected procedure UpdateStyle; procedure CMThemeChanged(var Message: TLMessage); message CM_THEMECHANGED; public { Public declarations } end; procedure ShowAboutBox(TheOwner: TComponent); implementation {$R *.lfm} uses Clipbrd, dmHelpManager, uDCVersion, uClipboard, uOSForms; const cIndention = LineEnding + #32#32; cAboutMsg = 'This program is free software under GNU GPL 2 license, see COPYING.txt file.' + LineEnding + LineEnding + 'Active developers: '+ cIndention + 'Alexander Koblov (alexx2000@mail.ru) - author, core developer' + cIndention + 'Rich Chang (rich2014.git@outlook.com) - developer' + LineEnding + LineEnding + 'Former developers: ' + cIndention + 'Denis Bisson (denis.bisson@denisbisson.org) - developer' + cIndention + 'Przemysław Nagay (cobines@gmail.com) - core developer' + cIndention + 'Dmitry Kolomiets (B4rr4cuda@rambler.ru) - developer' + cIndention + 'Radek Cervinka (radek.cervinka@centrum.cz) - author of Seksi Commander' + LineEnding + LineEnding + 'Contributors:' + cIndention + 'Tolstov Igor (attid@yandex.ru)' + cIndention + 'Anton Panferov (ast.a_s@mail.ru)' + cIndention + 'Rustem Rakhimov (dok_rust@bk.ru)' + cIndention + 'Moroz Serhiy (frost.asm@gmail.com)' + cIndention + 'Vitaly Zotov (vitalyzotov@mail.ru)' + cIndention + 'Zolotov Alex (zolotov-alex@shamangrad.net)' + cIndention + 'Peter Cernoch (pcernoch@volny.cz) - author PFM' + cIndention + 'Pavel Letko (letcuv@centrum.cz) - multirename, split, linker' + cIndention + 'Jiri Karasek (jkarasek@centrum.cz)' + cIndention + 'Vladimir Pilny (vladimir@pilny.com)' + cIndention + 'Vaclav Juza (vaclavjuza@seznam.cz)' + cIndention + 'Martin Matusu (xmat@volny.cz) - chown, chgrp' + cIndention + 'Radek Polak - some viewer fixes' + cIndention + 'Dmytro Zheludko (doublecmd@zheludko.mail.ua)' + cIndention + 'Andryei Gudyak - main icon' + cIndention + 'translators (see details in language files) ' + LineEnding + LineEnding + 'Double Commander uses icons from:' + LineEnding + '- Tango Icon Library (http://tango.freedesktop.org/Tango_Icon_Library)' + LineEnding + '- Silk icon set 1.3 by Mark James (http://www.famfamfam.com/lab/icons/silk/)' + LineEnding + '- Elementary icon theme 2.7.1 (https://github.com/elementary/icons)' + LineEnding + '- Adwaita Icon Theme (https://gitlab.gnome.org/GNOME/adwaita-icon-theme)' + LineEnding + '- Farm-Fresh Web Icons (https://www.fatcow.com/free-icons)' + LineEnding + '- Oxygen icon theme (https://invent.kde.org/frameworks/oxygen-icons)' + LineEnding + LineEnding + 'Big thanks to Lazarus and Free Pascal Team!'; procedure ShowAboutBox(TheOwner: TComponent); begin with TfrmAbout.Create(TheOwner) do try ShowModal; finally Free; end; end; procedure TfrmAbout.lblHomePageAddressMouseLeave(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= []; Font.Color:= FMouseLeave; Cursor:= crDefault; end; end; procedure TfrmAbout.lblHomePageAddressMouseEnter(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= [fsUnderLine]; Font.Color:= FMouseEnter; Cursor:= crHandPoint; end; end; procedure TfrmAbout.lblHomePageAddressClick(Sender: TObject); var ErrMsg: String; begin dmHelpMgr.HTMLHelpDatabase.ShowURL('https://doublecmd.sourceforge.io','Double Commander Web Site', ErrMsg); end; procedure TfrmAbout.btnCopyToClipboardClick(Sender: TObject); begin ClipboardSetText(GetVersionInformation + LineEnding); end; procedure TfrmAbout.FormCreate(Sender: TObject); begin UpdateStyle; lblTitle.Font.Color:= FMouseEnter; lblHomePageAddress.Font.Color:= FMouseLeave; end; procedure TfrmAbout.frmAboutShow(Sender: TObject); begin memInfo.Lines.Text := cAboutMsg; memInfo.CaretPos := Classes.Point(0, 0); lblVersion.Caption := lblVersion.Caption + #32 + dcVersion; lblRevision.Caption := lblRevision.Caption + #32 + dcRevision; lblCommit.Caption := lblCommit.Caption + #32 + dcCommit; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + lazVersion; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; Constraints.MinHeight := Height; btnClose.Anchors := [akLeft, akBottom]; end; procedure TfrmAbout.UpdateStyle; begin if DarkStyle then begin FMouseLeave:= RGBToColor(97, 155, 192); FMouseEnter:= RGBToColor(192, 102, 97); end else begin FMouseLeave:= clBlue; FMouseEnter:= clRed; end; end; procedure TfrmAbout.CMThemeChanged(var Message: TLMessage); begin UpdateStyle; end; end. doublecmd-1.1.30/src/fAbout.lrj0000644000175000001440000000320615104114162015306 0ustar alexxusers{"version":1,"strings":[ {"hash":4691652,"name":"tfrmabout.caption","sourcebytes":[65,98,111,117,116],"value":"About"}, {"hash":122850234,"name":"tfrmabout.lblhomepage.caption","sourcebytes":[72,111,109,101,32,80,97,103,101,58],"value":"Home Page:"}, {"hash":92749407,"name":"tfrmabout.lblhomepageaddress.caption","sourcebytes":[104,116,116,112,115,58,47,47,100,111,117,98,108,101,99,109,100,46,115,111,117,114,99,101,102,111,114,103,101,46,105,111],"value":"https://doublecmd.sourceforge.io"}, {"hash":185879090,"name":"tfrmabout.lbltitle.caption","sourcebytes":[68,111,117,98,108,101,32,67,111,109,109,97,110,100,101,114],"value":"Double Commander"}, {"hash":214540302,"name":"tfrmabout.lblversion.caption","sourcebytes":[86,101,114,115,105,111,110],"value":"Version"}, {"hash":214997982,"name":"tfrmabout.lblrevision.caption","sourcebytes":[82,101,118,105,115,105,111,110],"value":"Revision"}, {"hash":78005252,"name":"tfrmabout.lblcommit.caption","sourcebytes":[67,111,109,109,105,116],"value":"Commit"}, {"hash":4833316,"name":"tfrmabout.lblbuild.caption","sourcebytes":[66,117,105,108,100],"value":"Build"}, {"hash":43026835,"name":"tfrmabout.lbllazarusver.caption","sourcebytes":[76,97,122,97,114,117,115],"value":"Lazarus"}, {"hash":86315532,"name":"tfrmabout.lblfreepascalver.caption","sourcebytes":[70,114,101,101,32,80,97,115,99,97,108],"value":"Free Pascal"}, {"hash":127162148,"name":"tfrmabout.btncopytoclipboard.caption","sourcebytes":[67,111,112,121,32,116,111,32,99,108,105,112,98,111,97,114,100],"value":"Copy to clipboard"}, {"hash":44709525,"name":"tfrmabout.btnclose.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"} ]} doublecmd-1.1.30/src/fAbout.lfm0000644000175000001440000004006115104114162015275 0ustar alexxusersobject frmAbout: TfrmAbout Left = 563 Height = 400 Top = 209 Width = 667 AutoSize = True BorderIcons = [biSystemMenu, biMaximize] Caption = 'About' ClientHeight = 400 ClientWidth = 667 Constraints.MinWidth = 667 KeyPreview = True OnCreate = FormCreate OnShow = frmAboutShow Position = poOwnerFormCenter LCLVersion = '3.5.0.0' object pnlText: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 138 Height = 384 Top = 8 Width = 521 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 8 BevelInner = bvRaised BevelOuter = bvLowered ClientHeight = 384 ClientWidth = 521 FullRepaint = False ParentFont = False TabOrder = 0 object lblHomePage: TLabel AnchorSideLeft.Control = memInfo AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 10 Height = 15 Top = 352 Width = 65 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 15 Caption = 'Home Page:' ParentColor = False ParentFont = False end object lblHomePageAddress: TLabel AnchorSideLeft.Control = lblHomePage AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 81 Height = 15 Top = 352 Width = 180 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 8 BorderSpacing.Bottom = 15 Caption = 'https://doublecmd.sourceforge.io' Font.Color = clBlue ParentColor = False ParentFont = False OnClick = lblHomePageAddressClick OnMouseEnter = lblHomePageAddressMouseEnter OnMouseLeave = lblHomePageAddressMouseLeave end object memInfo: TMemo AnchorSideLeft.Control = pnlText AnchorSideTop.Control = pnlText AnchorSideRight.Control = pnlText AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblHomePage Left = 10 Height = 334 Top = 10 Width = 501 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 ParentFont = False ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 end end object pnlInfo: TPanel Left = 9 Height = 253 Top = 9 Width = 121 AutoSize = True BorderSpacing.Around = 8 BevelOuter = bvNone ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 253 ClientWidth = 121 Constraints.MinHeight = 334 ParentFont = False TabOrder = 1 object imgLogo: TImage Left = 28 Height = 64 Top = 8 Width = 64 BorderSpacing.Top = 8 BorderSpacing.Bottom = 8 BorderSpacing.CellAlignHorizontal = ccaCenter Center = True Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963D610000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 0970485973000013AF000013AF0163E68EC30000001974455874536F66747761 7265007777772E696E6B73636170652E6F72679BEE3C1A000010634944415478 9CED9B79901F4775C73F6FAEDFB99776B52BAD2DAD8D2C5F088BD896B108B688 8B0470C58194A99429822109458070958D2988932A02A6A89439420C011C0713 A8C4260125E13038408C1593C3088365CB8714C992AD952CEDFDDBDF3DD3FDF2 C7CCFCF4DB43BBABDD35B8125ED5ECFC76A6FB75BF6FBF7EFD5ECF6BF825FDFF 2639D58B7B7F6353BF35FCB68B7D998A9CA18A6754C18255050503A805551BFF 56C5C6AF500BD66AEBBD45514D9EA34449216B897929287179AB8A85989749EA ABB6BD074BF2DCC4FC503036EEBB5145AD4691B1C30DB50FB8C6DF795BB93CB2 2400765F72893FBD76E2532ADE1B7BBABA0BF942D195A4582AB85A4D3A10FF51 55688191084A0C46DC5B8D416903416DFC3F8930315F1BD7C1C6E514B0F1BDD5 9E8DDB8BEB26F56D1B78D07ADE88229E9D98320726262B4D6BBEDC9CACDD703B 84A704E09E579F93C93BEE7F7477F76C5DDBD7EFBA9EAB204967B4EDAE2D015A A39A76CA265AD02ADF5627014FD1B69157D15490F672ED3C12A16D0232AA49D9 A44C0A70AB6CAC15621557958C55F61C3D66F68D8E3E2C53B597DE068D5466A7 1D80A2E7FEDDDADEB55B07D6AD7383C057115960923CFF498987BB24C2858383 EE85FD035BB5A7F895F6322D0076FDD6791705BEFFAA356B7B5DCFF3F4E7DDD9 E79A2AC0F9EBFADD9CE75FFDD69EC28BD2E72900629CCC0DDD3D7D791547436B 89AC1259C524EA16AB788CEAF395D2FEA553C86ADCFFF49AB6CA796BFB0A819F B99144B7BDE4875F6D345F5E735C31F550554112C32622382A88802B820BC433 439E1760A4425B558C85C8248387C51AC5A8C5D89306BB98CFD268863B001F08 3D40EEBFFFFEDB326347078362012F08926156A2CA34CDC951EA4F3D49F3F0FF E0DB888C2304AE832F0E9E1303F18B3014E9481B552263695A4BC3581A91C178 011D176CA1EFFC17925FDB4FA6B32B19AC78ADEC2895CEF8DDB3CEBE6DC78E1D 6FF7003CCFBBB6B0798BBFA6AF8F5C2E37AF34AA4A657C8CD281C774F4DEAFE3 8C0C93F75DB2AE8B2F0E223F3F109458F0A6B5D42343358CF0360CB1F977DEC0 C00B2FA2A3AFEF94FDA9D56A644747FD52A9742D1003B01412118ABD7D147BAF 94F5DBAEA03236C2F03DFFA0D30FDE47D1F3C9780EBE2B33979555A654D59BC6 528D22CA61C4DAAB5EC9B6EBDE4867FFC0B20661C900B4938850ECEBE7BCEBDF 29956B5ECFC1BFFD4BADECDF4B47C623E73C37DAA080B14ADD18CACD90EC8B2E E6AAF7DC44714DEF8AF82E0B80762AF4F4B2E53D1F92137B7EA2CFDCFE31BA5C 879CE7E139AB07820291B554224329522EFAE047D870E965AB02F4AA68AC8830 B0F552B9F0A37748A9D84BA919D234B1FFBE52B2AA84D6321D46347A07F8B53B FE9E8DDB5EB222E113CFD4C22A019052BEBB878B3EF469696E3887E9664898B8 A8CBA578E4957218618736B1E3139FA3D0DDB3B4BA895B6DAD9D711963D2BB81 550600C00F326CB9E12352EBDF40B919121ABB2C1052B52F4711E6CCB3B9E2A3 9F22C8665BEFDB3560B6B0C698D6FFB39FB78131038086908497D660AD694578 CB21CFF7B9E8FD1F934AA19B6A14614E53135283578D0C8DAE35BCF4C3B7E2B8 EE0C61A228C218D3BAB78D2CAA3AE37F6B0C61B349D46C629A4D6C1401948196 1793FDA7579E7B7470C3C66E713DB556314671FB06710737D275C99574BEE07C C9168AA705C4F4C871F6DEFC365D1378E45C27F61E97100D1AAB5443C35833E2 B24FDE4EE7C0FA189834EC56454466FC9FDE637F659C138FFC8C23BBEEA7FACC D3948F0EE320A04A9708DFDB7F60F2CEA9F22050F712C09B9D8167FBF3595CDF 8BE36BAB44B531A2FDA3541FDBCD6818A95C70311B5FF71629ACE95B12001D6B 0738E3FA7732FAE5CFE0657CFC25AC0CAD791F459CF5E67750E8EB2799AE33C8 5A3B437880C9679EE6913B3E4769CFC3048EE02364816C2668F9CC5D0219110B 34014D9741E3BB42D677F17C2F0E268CC5AA83058CA7140297DA813D3CF5676F D7DC8E6B38FB356F10C775E70A306B54062FDF21C7BEF375AD8F1FC7F5177794 ACC66BBDF60FB2F1CAAB5AA33A9B77BB06448D060F7FF10B8CDDF73D72E2D013 F8B82238C97B9B6EAEA812D05AFB671A41997539223822B82278AE43CE73E9CA F8F4E533D807BECD639FFA536DD4AA8B1A1F0586AEFF232987D1A2065181D05A 2AA1E19CDF7B0788CC305CEDBCD3E7E5B1517E74F3FB98DEF503BA7D9F82EF91 755C5C27EEFF6CB966EBE09256811410D771C8FB2EDD599FFCD1833C76CB7BB5 5E29CF5E5EE680D13DB4095D3F446311DF2075736570033D9BCE9D97673B20F5 A929FEFBE6F7E10C3F4D87EF91755D5C114E671FE7B496C11488C075E8C8F874 D4A6D87FC7AD1A369BF3AEB52D0B6D2D03575F2BB5C8109D6245482D7F2D320C FEE6B5F3ADDB335680B05E67F7ADB790999EA4E87B04E29C96E0CB02A0554904 DF118A818777F07186EFFFAEB67778F648596BE9DEFC42EA2A44890ACF0120F1 F81A38ACB9E045F33A30E9A5AAECDBF955F4D0010A9E9744A3CB9164058ED049 4DF098BAE7ABD44B5373E66AFBC83941407EEB36423BBF1D88E7BF52DC7A294E 90990362FBFC2F1F3FC6F17BBF49C177F11D59B6F02B0200621032AE4B4194A3 DFFF173D9573925EB9CD174A1A23B48390C6F7A1B514365F30EFC8B7F37EEA1B 3B298810AC42E4B9220004701D21E7B9941FDC8509C3793520BDF2679E45D3C6 8ECE6CB2C906477168D3BCF33EE5699A4D2677FF2719D7890DDE4A0460156201 4704DF75C88475A60EED5FD0170FBAD6101A1B7FB969B303E917A5D05AFCEE9E 05A7D2E8DE3D045184BF4AFB0E2BDE0F00F01C21E33A940F3EA9858D9B049823 A088204180143B50DB98C3C3AAE2143B7132D996E7379FB19CDAF704BE138FFE AAF47DA50C0470105C47A84F8CB4466EB6AFDE122657C096EB73F85855245B68 B9B8A7A2E6D4049E7372AD5FE98EC3AA6800124F857062AC0500CC1D415545FC 8039036B0CA65EC7E6E7FAFCB3A97AE800C1D123B89E87E37A88E781E723AE8F 93C99C76D7570780843431760B910D9B98D2048D6613AD5509EB754C18528D94 2673638BD964AA551A1363B802927C8CB536FD200BE20538D91C4E368B9B2FE0 E5F2E09C9AEFEA009084B26E67D7A2451B870FD01819C611109DA925B65A5DB4 7ED0DB474822EC9C7E28A65127AAD7E3A536F13A9D4C0EAFD841D0D505B342FA 1503107FC18E973629742E5ADE94A7E65DBA1CC096A716AD1FF4AEA5AE27BF08 2DDE4125AA56092B15AACF1EC3F53C8C755B6ABA2A5B629155EA8D3AD9C1A105 4D73549986E9A9791B15013B394E54292FD856F796AD849AC4B2CB208D22D446 2DEC5606802A616982CAD307983E364C71F396058B579F39842F12ABFFAC772E E0895079E6D0823CFA2FB98C289325D2956DB8A6B43C005431D393D40FEDA336 7C984AB98CB7F5729C2058B05AF9F13DF88EE0CEA327AE08BE03938FFE6CE10E 0719BAB75F4943D3B49A95D1E901602D66EC388D838F111E7B1AD368D0B04A59 85B5AF79E3A29E4975EF4FD497D86F682F9C6E54F822941EDEBD6837365DFF16 EA8E43C8CAB5606900A862A6C6691E7A8268EC386A4CE2BA2AE5C8125C7135D9 75672EC8A239394EF3893D04327FF4E608F802F5471FA23939B120AFE28621FA 5EF55AAA16C2156AC1A200D8CA34E1D3FB884E1C41E3EDE4587855CAC6521B18 A2FF757FB0E8E88F3DF07DB258BC05362D3C81AC5A9EBDEFDE453B7EFE1FBE0B 1D7A01358D33CE960BC229015013119D384274F410DA8C7DF724498BA655A643 CB445064DD3B3F2C6E36B760236A224AF7EED49C23A78CE0047011B28E70E25B FF889A68419E5EBEC0C51FFD24D58E2E2AAA2D4D385D20E605C04E8D111EDE87 2DC5AA980A6E54A919CB546899EA59C7C04D9F90A06F60D146467EF85DFC8913 044EBC029CB233028180377A9C63F7FDEBA27CF3EB07D9F6E9BF261ADC485995 BA26E9742C1D8816000AD828223A769868E4283699E7469375DE584AA165B469 A85EB08DF51FF8B464D76F58B481A85A66FC6B776AC115FC45E277215E0AF38E 30FCE5CF13562A8BF2EF183A9BCB3FFF2532DBAF60CA2A15255E21980946FBD5 4EA993ECBE61D39A9BB2532772A6D9A06995A6551A261EF17268990C2D9581B3 295EFF3E5973F5EB65B1252FA5E1AF7C56FDFD7B28BAB1FAA73D483D60E564B2 51DA3901C25A9572B942EFB6972EDA869BC970C62B5E4561CB56460E1EA03C36 4AA48A49073001C400017000A7FA50643F49F2614480A054ABDB11C7E2781E56 21B2600B5D68773FFE792FA678D176C96E3C674942A734FEE02E1AF77F9B1ED7 C19399429E8ADAB560FC3B3B39F12BDBE8DF7EE592DA1BD87639FD97BE84C97D 4F7074D70F19F9AF1F517BF6188DD1712449AC74804622335017C0B9FBEEBBBF D953CCBFBAA7B35332994C2B809079BEFC2C95AACF3CC5F02DEFD5EEB04A4E04 8759599F49046754A595DD990430E9125B892CA56C812D1FBF9DE2C6B396DD17 1B454449A0D56C34182F9574BA5EFFCE75D75D778D03608C29E2674472059C7C 11375F5C91F0CDB1130C7FFC83DA1956C9269EDFE9ECDF08E00AE41CA150ABF0 E8CDEFA536727CD9FD713C8FA0B393A0B313AFA3032F9713634C119E83FC80C6 F1A31CF9F39BB4737A8CA21B7F3F58CEE6553C1520EF08D9F1133C7CE3DB281F 39BCDADD5D5D00A6F73EC4F02DEFD2E2F8313A3C27DEBA5A01BFD83D86822364 479FE56737BC95D19FFE78B5BA0BAC1200360C39BEF34E1DFF8B3FD69E46990E CFC177562765AE1D8462798AC73FF86EF6DDF9056C182E5A7729B4E20D91E947 7ECCF85D7FA5C1E8517A3D212312873A2BCC0F6AA7743A14447051C6EEFA2223 BBBECFE677DC48FFB6CB57C47B79005843E9E107297DF76E750F3F49B713E716 F8719E4D6B7F6E3529FE300BD944B36AC38779FC03EFE6C0055B18BAEE4DACDF FEB26519EE250360EA55AAFB1EA5BE77B7361EDA45A652A2DB814CE0B632AE9F 2BE1538AB7E06377D949F60F1A8F3FC2937F72234F74ADA1EFAA5FA7FFB2EDF4 BDF8E278337409E401D4EBF5BBAA0F7CEB52CF957C2DF05AC72F4CB58C4E8D63 4F0CA363CF12584BDE113A05FCC0C5174D322F92BDFFE748F0D9946A4346E28F 32BE42581AA7B4F36E46BE7617A1B8F8EB07C96D1822E8EDC32F76A089390E8C E5B048B577FBAFDE95F212C0FFC62BCEDEBBCE89CE0982405BD14F5A40C14171 547013A1D31DDDF4F84CEBB84B7A642675784EF57B014768CEEF567D6D9D4BB2 6DEDDAA44DAB4A686217384C9E1BD5245D3EE6D109FC086FFF97EAE116927479 05C2BCE3FC20E7BB9BBAFC58D1D2465049CE012927CF2969BB2FFF0BA5564A4F F2BF2FB15AFB809524204AEE1E30AD0E3EFC1BF1691A4DEBA9EFE9674BD62DAB 31E2398227F1E54AAC6EE946E6EA6500AF7E42F59C3C27E2682FBD77014FB9CE B4F5E4332463D75AAA77DC73F011A3FAED89081385E1CFFF04C4734C9DC04171 A3BA956FFC4DB9F968FA7C86AF5216E7CD13D6F9E96853C3B0D114350B7FA87C BE930364811EE0A038E1219187C66ACDDF6F2F3367A4775F72893FB566E25641 DFD4E950CCAAF544ED496304ADD3A369EE9DD1C438B41F60D4F4A0651C94A7B6 A375A6D040726E1293FC5063139E497B4A62F45223462BD33435B8A95D6A378A 24A731EBAA8C5A273A02E5267267FF74E3FD1F8268410052FAE6CBCFEDF39DF0 B5225C61D59E292A9E898F681225C2C6C765693BD498E4F0A5C6B2758832CE0B B26DC244C9014843DC5F63419313A3D628B605561B9FD6FBF424699C72DB3A3A 9B5864632D6A3532702454FE3DB4FE3FDF3E3D3DBA1C2DFA25FD5FA7FF05C879 747F48E5EE350000000049454E44AE426082 } Proportional = True end object lblTitle: TLabel Left = 0 Height = 15 Top = 80 Width = 111 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Double Commander' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblVersion: TLabel Left = 0 Height = 15 Top = 99 Width = 38 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Version' ParentColor = False ParentFont = False end object lblRevision: TLabel Left = 0 Height = 15 Top = 118 Width = 44 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Revision' ParentColor = False ParentFont = False end object lblCommit: TLabel Left = 0 Height = 15 Top = 137 Width = 44 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Commit' ParentColor = False end object lblBuild: TLabel Left = 0 Height = 15 Top = 156 Width = 27 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False ParentFont = False end object lblLazarusVer: TLabel Left = 0 Height = 15 Top = 175 Width = 39 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False ParentFont = False end object lblFreePascalVer: TLabel Left = 0 Height = 15 Top = 194 Width = 58 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False ParentFont = False end object lblPlatform: TLabel Left = 0 Height = 1 Top = 213 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False ParentFont = False end object lblOperatingSystem: TLabel Left = 0 Height = 1 Top = 218 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False ParentFont = False end object lblWidgetsetVer: TLabel Left = 0 Height = 1 Top = 223 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False ParentFont = False end object btnCopyToClipboard: TButton Left = 0 Height = 25 Top = 228 Width = 121 AutoSize = True BorderSpacing.CellAlignHorizontal = ccaCenter Caption = 'Copy to clipboard' Constraints.MinWidth = 100 ParentFont = False TabOrder = 0 OnClick = btnCopyToClipboardClick end end object btnClose: TBitBtn AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlInfo AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 19 Height = 30 Top = 362 Width = 100 AutoSize = True BorderSpacing.Top = 20 BorderSpacing.Bottom = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Close' Constraints.MinWidth = 100 Default = True Kind = bkClose ModalResult = 11 ParentFont = False TabOrder = 2 end end doublecmd-1.1.30/src/doublecmd.manifest.rc0000644000175000001440000000014515104114162017445 0ustar alexxusers#define RT_MANIFEST 24 #define APP_MANIFEST 1 APP_MANIFEST RT_MANIFEST "doublecmd.exe.manifest" doublecmd-1.1.30/src/doublecmd.lpr0000644000175000001440000001424215104114162016034 0ustar alexxusersprogram doublecmd; {$IF DEFINED(LCLGTK3)} {$FATAL LCLGTK3 is not production ready} {$ENDIF} uses {$IFDEF MSWINDOWS} uElevation, {$IFDEF LCLQT5} uDarkStyle, {$ENDIF} {$ENDIF} {$IFDEF UNIX} {$IFNDEF HEAPTRC} cmem, {$ENDIF} cthreads, {$IFDEF DARWIN} iosxwstr, iosxlocale, {$ELSE} cwstring, clocale, {$ENDIF} {$IFDEF darwin} uAppleMagnifiedModeFix, uMyDarwin, {$ENDIF} uElevation, {$IFDEF LINUX} uAppImage, {$ENDIF} {$IFDEF LCLGTK2} uOverlayScrollBarFix, gtk2, Gtk2Int, {$ENDIF} {$IF DEFINED(LCLQT5) or DEFINED(LCLQT6)} uQtWorkaround, {$ENDIF} {$ENDIF} uSystem, uMoveConfig, uEarlyConfig, DCConvertEncoding, {$IF DEFINED(MSWINDOWS)} uLibraryPath, {$ENDIF} {$IF DEFINED(LCLWIN32) and DEFINED(DARKWIN)} uWin32WidgetSetDark, {$ENDIF} Interfaces, {$IFDEF LCLGTK2} uGtk2FixCursorPos, {$ENDIF} {$IFDEF LCLWIN32} uDClass, {$ENDIF} LCLProc, Classes, SysUtils, Forms, LCLVersion, Math, {$IF DEFINED(NIGHTLY_BUILD)} un_lineinfo, {$ENDIF} uGlobsPaths, uGlobs, fHackForm, fMain, uAccentsUtils, dmHigh, dmHelpManager, dmCommonData, uShowMsg, uCryptProc, uPixMapManager, uKeyboard, uUniqueInstance, uDCVersion, uCmdLineParams, uDebug, uOSUtils, uspecialdir, fstartingsplash, ulog, uVariableMenuSupport, uLng {$IFDEF MSWINDOWS} , uMyWindows {$ENDIF} {$IFDEF UNIX} , uMyUnix {$ENDIF} ; {$R *.res} {$IF DEFINED(MSWINDOWS)} {$SETPEOPTFLAGS $140} {$R doublecmd.manifest.rc} {$ENDIF} {$IFDEF HEAPTRC} var LogPath: String; {$ENDIF} begin // Initialize again uSystem.Initialize; DCDebug('Starting Double Commander'); // Initialize random number generator Randomize; {$IF DEFINED(NIGHTLY_BUILD)} InitLineInfo; AddLineInfoPath(ExtractFileDir(ParamStr(0))); {$ENDIF} {$IFDEF HEAPTRC} LogPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'logs'; CreateDir(LogPath); SetHeapTraceOutput(LogPath + '/heaptrc-' + FormatDateTime('yyyy-mm-dd hh.mm.ss', Now) + '.log'); {$ENDIF} {$IFDEF MSWINDOWS} uMyWindows.FixCommandLineToUTF8; {$ENDIF} Application.Scaled:= True; // Fix default BidiMode // see http://bugs.freepascal.org/view.php?id=22044 Application.BidiMode:= bdLeftToRight; Application.Title:='Double Commander'; Application.Initialize; {$IF DEFINED(DARWIN)} GetMacFormatSettings(DefaultFormatSettings); Application.Icon:= nil; {$ENDIF} uDCVersion.InitializeVersionInfo; // Initializing keyboard module on GTK needs GTKProc.InitKeyboardTables // which is called by Application.Initialize. uKeyboard.InitializeKeyboard; {$IF DEFINED(MSWINDOWS) and (DEFINED(LCLQT5) or DEFINED(DARKWIN))} ApplyDarkStyle; {$ENDIF} {$IF DEFINED(darwin)} FixMacFormatSettings; setMacOSAppearance( gAppMode ); {$ENDIF} // Use only current directory separator AllowDirectorySeparators:= [DirectorySeparator]; // Disable because we set a few of our own format settings and we don't want // them to be changed. There's no way currently to react to Application.IntfSettingsChange. // If in future we move to a Unicode RTL this could be removed. {$PUSH}{$WARN SYMBOL_PLATFORM OFF} Application.UpdateFormatSettings := False; {$POP} if Ord(DefaultFormatSettings.ThousandSeparator) > $7F then begin DefaultFormatSettings.ThousandSeparator:= ' '; end; {$IFDEF UNIX} uMyUnix.FixDateTimeSeparators; {$ENDIF} FixDateNamesToUTF8; DCDebug(GetVersionInformation); DCDebug('This program is free software released under terms of GNU GPL 2'); DCDebug(Copyright + LineEnding + ' and contributors (see about dialog)'); Application.ShowMainForm:= False; Application.CreateForm(TfrmHackForm, frmHackForm); ProcessCommandLineParams; // before load paths if (gSplashForm) and (not CommandLineParams.NoSplash) then begin // Let's show the starting slash screen to confirm user application has been started Application.CreateForm(TfrmStartingSplash, frmStartingSplash); end; LoadInMemoryOurAccentLookupTableList; // Used for conversion of string to remove accents. LoadPaths; // before loading config LoadWindowsSpecialDir; // Load the list with special path. *Must* be located AFTER "LoadPaths" and BEFORE "InitGlobs" if InitGlobs then begin //-- NOTE: before, only IsInstanceAllowed was called, and all the magic on creation // new instance or sending params to the existing server happened inside // IsInstanceAllowed() function as a side effect. // Functions with side effects are generally bad, so, // new function was added to explicitly initialize instance. InitInstance; if IsInstanceAllowed then begin if (log_start_shutdown in gLogOptions) then logWrite(rsMsgLogProgramStart + ' (' + GetCurrentUserName + '/' + GetComputerNetName + ')'); InitPasswordStore; LoadPixMapManager; Application.CreateForm(TfrmMain, frmMain); // main form Application.CreateForm(TdmComData, dmComData); // common data Application.CreateForm(TdmHelpManager, dmHelpMgr); // help manager {$IF DEFINED(LCLGTK2)} // LCLGTK2 uses Application.MainForm as the clipboard widget, however our // MainForm is TfrmHackForm and it never gets realized. GTK2 doesn't // seem to allow a not realized widget to have clipboard ownership. // We switch to frmMain instead which will be realized at some point. GTK2WidgetSet.SetClipboardWidget(PGtkWidget(frmMain.Handle)); {$ENDIF} // Hooking on QT needs the handle of the main form which is created // in Application.CreateForm above. uKeyboard.HookKeyboardLayoutChanged; frmMain.ShowOnTop; Application.ProcessMessages; Application.Run; if not UniqueInstance.isAnotherDCRunningWhileIamRunning then DeleteTempFolderDeletableAtTheEnd; FreeMemoryFromOurAccentLookupTableList; if (log_start_shutdown in gLogOptions) then logWrite(rsMsgLogProgramShutdown + ' (' + GetCurrentUserName + '/' + GetComputerNetName + ')'); end else begin DCDebug('Another instance of DC is already running. Exiting.'); end; end; uKeyboard.CleanupKeyboard; DCDebug('Finished Double Commander'); end. doublecmd-1.1.30/src/doublecmd.lpi0000644000175000001440000023134615104114162016031 0ustar alexxusers <Scaled Value="True"/> <ResourceType Value="res"/> <XPManifest> <DpiAware Value="True"/> </XPManifest> <Icon Value="0"/> <Resources Count="1"> <Resource_0 FileName="dmhigh.json" Type="RCDATA" ResourceName="HIGHLIGHTERS"/> </Resources> </General> <i18n> <EnableI18N Value="True"/> <OutDir Value="..\language"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MajorVersionNr Value="1"/> <MinorVersionNr Value="1"/> <RevisionNr Value="30"/> <Attributes pvaPreRelease="True"/> <StringTable FileDescription="Double Commander" InternalName="DOUBLECMD" LegalCopyright="Copyright (C) 2006-2025 Alexander Koblov" ProductName="Double Commander"/> </VersionInfo> <BuildModes Count="5"> <Item1 Name="Debug" Default="True"/> <Item2 Name="Debug + HeapTrc"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (Laz_FullVersion >= 4990000) then begin CustomOptions += '-dLCL_VER_499'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> </Debugging> </Linking> <Other> <CustomOptions Value="-dHEAPTRC -dHEAPTRC_EXTRA"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\git2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item2> <Item3 Name="NoDebug Full Optimizations"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (Laz_FullVersion >= 4990000) then begin CustomOptions += '-dLCL_VER_499'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Optimizations> <OptimizationLevel Value="3"/> <VariablesInRegisters Value="True"/> <UncertainOptimizations Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> <UseLineInfoUnit Value="False"/> </Debugging> </Linking> <Other> <ExecuteBefore> <Command Value="$(ProjPath)\platform\git2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item3> <Item4 Name="Release"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (Laz_FullVersion >= 4990000) then begin CustomOptions += '-dLCL_VER_499'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end; if LCLWidgetType <> GetIDEValue('LCLWidgetType') then begin UnitPath += '$(FallbackOutputRoot)/LazControls/lib/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType);'; UnitPath += '$(FallbackOutputRoot)/SynEdit/units/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType);'; end; if ((LCLWidgetType = 'qt') or (LCLWidgetType = 'qt5')) and (TargetOS <> 'darwin') then begin UnitPath += 'platform/$(SrcOS)/qt5;'; end; if (LCLWidgetType = 'gtk2') and (SrcOS = 'unix') and (TargetOS <> 'darwin') then begin UnitPath += 'platform/$(SrcOS)/$(LCLWidgetType);'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="2"/> <VariablesInRegisters Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseLineInfoUnit Value="False"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <Win32> <GraphicApplication Value="True"/> </Win32> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> <CustomOptions Value="-dNIGHTLY_BUILD"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\git2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item4> <Item5 Name="DarkWin"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;..\components\DDetours\Source;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (Laz_FullVersion >= 4990000) then begin CustomOptions += '-dLCL_VER_499'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="2"/> <VariablesInRegisters Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseLineInfoUnit Value="False"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <Win32> <GraphicApplication Value="True"/> </Win32> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> <CustomOptions Value="-dNIGHTLY_BUILD -dDARKWIN"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\git2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item5> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="13"> <Item1> <PackageName Value="SynUni"/> <MinVersion Major="1" Minor="8" Release="2" Valid="True"/> </Item1> <Item2> <PackageName Value="DateTimeCtrls"/> </Item2> <Item3> <PackageName Value="kascrypt"/> <MinVersion Major="3" Valid="True"/> </Item3> <Item4> <PackageName Value="chsdet"/> </Item4> <Item5> <PackageName Value="LazControls"/> <MinVersion Valid="True"/> </Item5> <Item6> <PackageName Value="pkg_gifanim"/> <MinVersion Major="1" Minor="5" Valid="True"/> </Item6> <Item7> <PackageName Value="VirtualTerminal"/> </Item7> <Item8> <PackageName Value="KASComp"/> <MinVersion Major="1" Minor="9" Release="5" Valid="True"/> </Item8> <Item9> <PackageName Value="LCL"/> <MinVersion Major="2" Minor="2" Valid="True"/> </Item9> <Item10> <PackageName Value="SynEdit"/> <MinVersion Major="1" Valid="True"/> </Item10> <Item11> <PackageName Value="viewerpackage"/> </Item11> <Item12> <PackageName Value="doublecmd_common"/> <MinVersion Minor="4" Release="1" Valid="True"/> </Item12> <Item13> <PackageName Value="Image32"/> </Item13> </RequiredPackages> <Units Count="273"> <Unit0> <Filename Value="doublecmd.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="fmain.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMain"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMain"/> </Unit1> <Unit2> <Filename Value="uwcxprototypes.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWCXprototypes"/> </Unit2> <Unit3> <Filename Value="fviewer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmViewer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fViewer"/> </Unit3> <Unit4> <Filename Value="feditor.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fEditor"/> </Unit4> <Unit5> <Filename Value="fMsg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMsg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit5> <Unit6> <Filename Value="dmcommondata.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="dmComData"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <UnitName Value="dmCommonData"/> </Unit6> <Unit7> <Filename Value="dmhigh.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="dmHigh"/> </Unit7> <Unit8> <Filename Value="ffindview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFindView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFindView"/> </Unit8> <Unit9> <Filename Value="fAbout.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmAbout"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit9> <Unit10> <Filename Value="foptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptions"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOptions"/> </Unit10> <Unit11> <Filename Value="fFileOpDlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileOp"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit11> <Unit12> <Filename Value="fmkdir.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMkDir"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMkDir"/> </Unit12> <Unit13> <Filename Value="fcopymovedlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCopyDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCopyMoveDlg"/> </Unit13> <Unit14> <Filename Value="fFindDlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFindDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit14> <Unit15> <Filename Value="fsymlink.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSymLink"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSymLink"/> </Unit15> <Unit16> <Filename Value="fhardlink.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmHardLink"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fHardLink"/> </Unit16> <Unit17> <Filename Value="fmultirename.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMultiRename"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMultiRename"/> </Unit17> <Unit18> <Filename Value="fpackdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmPackDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fPackDlg"/> </Unit18> <Unit19> <Filename Value="flinker.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmLinker"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fLinker"/> </Unit19> <Unit20> <Filename Value="fsplitter.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSplitter"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSplitter"/> </Unit20> <Unit21> <Filename Value="ffileproperties.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileProperties"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileProperties"/> </Unit21> <Unit22> <Filename Value="fextractdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmExtractDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fExtractDlg"/> </Unit22> <Unit23> <Filename Value="ulng.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uLng"/> </Unit23> <Unit24> <Filename Value="frames\foptionsfileassocextra.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileAssocExtra"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileAssocExtra"/> </Unit24> <Unit25> <Filename Value="fhackform.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmHackForm"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fHackForm"/> </Unit25> <Unit26> <Filename Value="fpackinfodlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmPackInfoDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fPackInfoDlg"/> </Unit26> <Unit27> <Filename Value="ftweakplugin.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmTweakPlugin"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fTweakPlugin"/> </Unit27> <Unit28> <Filename Value="udescr.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDescr"/> </Unit28> <Unit29> <Filename Value="fdescredit.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDescrEdit"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDescrEdit"/> </Unit29> <Unit30> <Filename Value="platform\win\ugdiplus.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGdiPlus"/> </Unit30> <Unit31> <Filename Value="platform\win\umywindows.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMyWindows"/> </Unit31> <Unit32> <Filename Value="platform\unix\umyunix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMyUnix"/> </Unit32> <Unit33> <Filename Value="dmhelpmanager.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="dmHelpManager"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <UnitName Value="dmHelpManager"/> </Unit33> <Unit34> <Filename Value="feditsearch.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditSearchReplace"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fEditSearch"/> </Unit34> <Unit35> <Filename Value="platform\udragdropex.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropEx"/> </Unit35> <Unit36> <Filename Value="ushellexecute.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uShellExecute"/> </Unit36> <Unit37> <Filename Value="platform\uClipboard.pas"/> <IsPartOfProject Value="True"/> </Unit37> <Unit38> <Filename Value="platform\udragdropgtk.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropGtk"/> </Unit38> <Unit39> <Filename Value="usearchtemplate.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchTemplate"/> </Unit39> <Unit40> <Filename Value="platform\ukeyboard.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKeyboard"/> </Unit40> <Unit41> <Filename Value="platform\udragdropqt.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropQt"/> </Unit41> <Unit42> <Filename Value="fchecksumverify.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCheckSumVerify"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCheckSumVerify"/> </Unit42> <Unit43> <Filename Value="fchecksumcalc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCheckSumCalc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCheckSumCalc"/> </Unit43> <Unit44> <Filename Value="uformcommands.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFormCommands"/> </Unit44> <Unit45> <Filename Value="ufileviewnotebook.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewNotebook"/> </Unit45> <Unit46> <Filename Value="platform\unix\mime\umimeactions.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeActions"/> </Unit46> <Unit47> <Filename Value="fsetfileproperties.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSetFileProperties"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSetFileProperties"/> </Unit47> <Unit48> <Filename Value="platform\upixmapgtk.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPixMapGtk"/> </Unit48> <Unit49> <Filename Value="uquickviewpanel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uQuickViewPanel"/> </Unit49> <Unit50> <Filename Value="fmaskinputdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMaskInputDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMaskInputDlg"/> </Unit50> <Unit51> <Filename Value="platform\uinfotooltip.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uInfoToolTip"/> </Unit51> <Unit52> <Filename Value="fattributesedit.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmAttributesEdit"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fAttributesEdit"/> </Unit52> <Unit53> <Filename Value="fmodview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmModView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fModView"/> </Unit53> <Unit54> <Filename Value="fdiffer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDiffer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDiffer"/> </Unit54> <Unit55> <Filename Value="fconnectionmanager.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmConnectionManager"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fConnectionManager"/> </Unit55> <Unit56> <Filename Value="ffileexecuteyourself.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileExecuteYourSelf"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileExecuteYourSelf"/> </Unit56> <Unit57> <Filename Value="uthumbnails.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uThumbnails"/> </Unit57> <Unit58> <Filename Value="platform\utrash.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uTrash"/> </Unit58> <Unit59> <Filename Value="uparitercontrols.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPariterControls"/> </Unit59> <Unit60> <Filename Value="ucmdlineparams.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uCmdLineParams"/> </Unit60> <Unit61> <Filename Value="upathlabel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPathLabel"/> </Unit61> <Unit62> <Filename Value="frames\foptionstooltips.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolTips"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolTips"/> </Unit62> <Unit63> <Filename Value="frames\foptionsframe.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="OptionsEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFrame"/> </Unit63> <Unit64> <Filename Value="frames\foptionspluginsgroup.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsGroup"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsGroup"/> </Unit64> <Unit65> <Filename Value="frames\foptionsfiletypescolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileTypesColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileTypesColors"/> </Unit65> <Unit66> <Filename Value="platform\utarwriter.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uTarWriter"/> </Unit66> <Unit67> <Filename Value="uconvencoding.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uConvEncoding"/> </Unit67> <Unit68> <Filename Value="uvfsmodule.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVfsModule"/> </Unit68> <Unit69> <Filename Value="frames\foptionslanguage.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLanguage"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLanguage"/> </Unit69> <Unit70> <Filename Value="frames\foptionsbehavior.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsBehavior"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsBehavior"/> </Unit70> <Unit71> <Filename Value="frames\foptionstools.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsViewer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTools"/> </Unit71> <Unit72> <Filename Value="frames\foptionshotkeys.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsHotkeys"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsHotkeys"/> </Unit72> <Unit73> <Filename Value="frames\foptionslayout.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLayout"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLayout"/> </Unit73> <Unit74> <Filename Value="frames\foptionsfonts.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFonts"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFonts"/> </Unit74> <Unit75> <Filename Value="frames\foptionsfileoperations.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileOperations"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileOperations"/> </Unit75> <Unit76> <Filename Value="frames\foptionsquicksearchfilter.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsQuickSearchFilter"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsQuickSearchFilter"/> </Unit76> <Unit77> <Filename Value="frames\foptionstabs.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTabs"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTabs"/> </Unit77> <Unit78> <Filename Value="frames\foptionslog.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLog"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLog"/> </Unit78> <Unit79> <Filename Value="frames\foptionsconfiguration.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsConfiguration"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsConfiguration"/> </Unit79> <Unit80> <Filename Value="frames\foptionscustomcolumns.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsCustomColumns"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsCustomColumns"/> </Unit80> <Unit81> <Filename Value="frames\foptionsmisc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsMisc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsMisc"/> </Unit81> <Unit82> <Filename Value="frames\foptionsautorefresh.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsAutoRefresh"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsAutoRefresh"/> </Unit82> <Unit83> <Filename Value="frames\foptionsicons.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsIcons"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsIcons"/> </Unit83> <Unit84> <Filename Value="frames\foptionsignorelist.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsIgnoreList"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsIgnoreList"/> </Unit84> <Unit85> <Filename Value="frames\foptionsarchivers.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsArchivers"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsArchivers"/> </Unit85> <Unit86> <Filename Value="fselecttextrange.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSelectTextRange"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSelectTextRange"/> </Unit86> <Unit87> <Filename Value="frames\fquicksearch.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmQuickSearch"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fQuickSearch"/> </Unit87> <Unit88> <Filename Value="frames\foptionsgroups.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="fOptionsGroups"/> </Unit88> <Unit89> <Filename Value="frames\foptionsfilepanelscolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFilePanelsColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFilePanelsColors"/> </Unit89> <Unit90> <Filename Value="frames\foptionstoolbase.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolBase"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolBase"/> </Unit90> <Unit91> <Filename Value="frames\foptionsterminal.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTerminal"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTerminal"/> </Unit91> <Unit92> <Filename Value="frames\foptionsmouse.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsMouse"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsMouse"/> </Unit92> <Unit93> <Filename Value="frames\foptionskeyboard.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsKeyboard"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsKeyboard"/> </Unit93> <Unit94> <Filename Value="frames\foptionsdragdrop.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDragDrop"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsDragDrop"/> </Unit94> <Unit95> <Filename Value="frames\foptionsfilesviews.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFilesViews"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFilesViews"/> </Unit95> <Unit96> <Filename Value="frames\foptionscolumnsview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsColumnsView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsColumnsView"/> </Unit96> <Unit97> <Filename Value="frames\foptionsdriveslistbutton.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDrivesListButton"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsDrivesListButton"/> </Unit97> <Unit98> <Filename Value="platform\unix\uoverlayscrollbarfix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOverlayScrollBarFix"/> </Unit98> <Unit99> <Filename Value="umaincommands.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMainCommands"/> </Unit99> <Unit100> <Filename Value="platform\win\uexceptionhandlerfix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uExceptionHandlerFix"/> </Unit100> <Unit101> <Filename Value="frames\foptionseditorcolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsEditorColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsEditorColors"/> </Unit101> <Unit102> <Filename Value="uoperationspanel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOperationsPanel"/> </Unit102> <Unit103> <Filename Value="foptionshotkeysedithotkey.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditHotkey"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOptionsHotkeysEditHotkey"/> </Unit103> <Unit104> <Filename Value="ukastoolitemsextended.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKASToolItemsExtended"/> </Unit104> <Unit105> <Filename Value="frames\foptionstoolbar.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolbar"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolbar"/> </Unit105> <Unit106> <Filename Value="fileviews\ufileviewwithmainctrl.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWithMainCtrl"/> </Unit106> <Unit107> <Filename Value="filesources\uarchivefilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uArchiveFileSource"/> </Unit107> <Unit108> <Filename Value="filesources\uarchivefilesourceutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uArchiveFileSourceUtil"/> </Unit108> <Unit109> <Filename Value="filesources\ufilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSource"/> </Unit109> <Unit110> <Filename Value="filesources\ufilesourcecalcchecksumoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceCalcChecksumOperation"/> </Unit110> <Unit111> <Filename Value="filesources\ufilesourcecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit111> <Unit112> <Filename Value="filesources\ufilesourcecombineoperation.pas"/> <IsPartOfProject Value="True"/> </Unit112> <Unit113> <Filename Value="filesources\ufilesourcecopyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceCopyOperation"/> </Unit113> <Unit114> <Filename Value="filesources\ufilesourcecreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit114> <Unit115> <Filename Value="filesources\ufilesourcedeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceDeleteOperation"/> </Unit115> <Unit116> <Filename Value="filesources\ufilesourceexecuteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceExecuteOperation"/> </Unit116> <Unit117> <Filename Value="filesources\ufilesourcelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceListOperation"/> </Unit117> <Unit118> <Filename Value="filesources\ufilesourcemoveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit118> <Unit119> <Filename Value="filesources\ufilesourceoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperation"/> </Unit119> <Unit120> <Filename Value="filesources\ufilesourceoperationmessageboxesui.pas"/> <IsPartOfProject Value="True"/> </Unit120> <Unit121> <Filename Value="filesources\ufilesourceoperationmisc.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperationMisc"/> </Unit121> <Unit122> <Filename Value="filesources\ufilesourceoperationoptions.pas"/> <IsPartOfProject Value="True"/> </Unit122> <Unit123> <Filename Value="filesources\ufilesourceoperationoptionsui.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="FileSourceOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="uFileSourceOperationOptionsUI"/> </Unit123> <Unit124> <Filename Value="filesources\ufilesourceoperationtypes.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperationTypes"/> </Unit124> <Unit125> <Filename Value="filesources\ufilesourceoperationui.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperationUI"/> </Unit125> <Unit126> <Filename Value="filesources\ufilesourceproperty.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceProperty"/> </Unit126> <Unit127> <Filename Value="filesources\ufilesourcesetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceSetFilePropertyOperation"/> </Unit127> <Unit128> <Filename Value="filesources\ufilesourcesplitoperation.pas"/> <IsPartOfProject Value="True"/> </Unit128> <Unit129> <Filename Value="filesources\ufilesourcetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit129> <Unit130> <Filename Value="filesources\ufilesourceutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceUtil"/> </Unit130> <Unit131> <Filename Value="filesources\ufilesourcewipeoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceWipeOperation"/> </Unit131> <Unit132> <Filename Value="filesources\ulocalfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit132> <Unit133> <Filename Value="filesources\uoperationthread.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOperationThread"/> </Unit133> <Unit134> <Filename Value="filesources\urealfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uRealFileSource"/> </Unit134> <Unit135> <Filename Value="filesources\uvirtualfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVirtualFileSource"/> </Unit135> <Unit136> <Filename Value="filesources\filesystem\ffilesystemcopymoveoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="FileSystemCopyMoveOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileSystemCopyMoveOperationOptions"/> </Unit136> <Unit137> <Filename Value="filesources\filesystem\ufilesystemcalcchecksumoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemCalcChecksumOperation"/> </Unit137> <Unit138> <Filename Value="filesources\filesystem\ufilesystemcalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit138> <Unit139> <Filename Value="filesources\filesystem\ufilesystemcombineoperation.pas"/> <IsPartOfProject Value="True"/> </Unit139> <Unit140> <Filename Value="filesources\filesystem\ufilesystemcopyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemCopyOperation"/> </Unit140> <Unit141> <Filename Value="filesources\filesystem\ufilesystemcreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit141> <Unit142> <Filename Value="filesources\filesystem\ufilesystemdeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemDeleteOperation"/> </Unit142> <Unit143> <Filename Value="filesources\filesystem\ufilesystemexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit143> <Unit144> <Filename Value="filesources\filesystem\ufilesystemfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemFileSource"/> </Unit144> <Unit145> <Filename Value="filesources\filesystem\ufilesystemlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemListOperation"/> </Unit145> <Unit146> <Filename Value="filesources\filesystem\ufilesystemmoveoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemMoveOperation"/> </Unit146> <Unit147> <Filename Value="filesources\filesystem\ufilesystemsetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemSetFilePropertyOperation"/> </Unit147> <Unit148> <Filename Value="filesources\filesystem\ufilesystemsplitoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemSplitOperation"/> </Unit148> <Unit149> <Filename Value="filesources\filesystem\ufilesystemutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemUtil"/> </Unit149> <Unit150> <Filename Value="filesources\filesystem\ufilesystemwipeoperation.pas"/> <IsPartOfProject Value="True"/> </Unit150> <Unit151> <Filename Value="filesources\multiarchive\fmultiarchivecopyoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="MultiArchiveCopyOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMultiArchiveCopyOperationOptions"/> </Unit151> <Unit152> <Filename Value="filesources\multiarchive\umultiarchivecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit152> <Unit153> <Filename Value="filesources\multiarchive\umultiarchivecopyinoperation.pas"/> <IsPartOfProject Value="True"/> </Unit153> <Unit154> <Filename Value="filesources\multiarchive\umultiarchivecopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveCopyOutOperation"/> </Unit154> <Unit155> <Filename Value="filesources\multiarchive\umultiarchivedeleteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit155> <Unit156> <Filename Value="filesources\multiarchive\umultiarchiveexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit156> <Unit157> <Filename Value="filesources\multiarchive\umultiarchivefilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveFileSource"/> </Unit157> <Unit158> <Filename Value="filesources\multiarchive\umultiarchivelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveListOperation"/> </Unit158> <Unit159> <Filename Value="filesources\multiarchive\umultiarchivetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveTestArchiveOperation"/> </Unit159> <Unit160> <Filename Value="filesources\multiarchive\umultiarchiveutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveUtil"/> </Unit160> <Unit161> <Filename Value="filesources\multilist\umultilistfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiListFileSource"/> </Unit161> <Unit162> <Filename Value="filesources\multilist\umultilistlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiListListOperation"/> </Unit162> <Unit163> <Filename Value="filesources\searchresult\usearchresultfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchResultFileSource"/> </Unit163> <Unit164> <Filename Value="filesources\searchresult\usearchresultlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchResultListOperation"/> </Unit164> <Unit165> <Filename Value="filesources\tempfilesystem\utempfilesystemfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit165> <Unit166> <Filename Value="filesources\vfs\uvfsexecuteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVfsExecuteOperation"/> </Unit166> <Unit167> <Filename Value="filesources\vfs\uvfsfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit167> <Unit168> <Filename Value="filesources\vfs\uvfslistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVfsListOperation"/> </Unit168> <Unit169> <Filename Value="filesources\wcxarchive\fwcxarchivecopyoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="WcxArchiveCopyOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fWcxArchiveCopyOperationOptions"/> </Unit169> <Unit170> <Filename Value="filesources\wcxarchive\uwcxarchivecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveCalcStatisticsOperation"/> </Unit170> <Unit171> <Filename Value="filesources\wcxarchive\uwcxarchivecopyinoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveCopyInOperation"/> </Unit171> <Unit172> <Filename Value="filesources\wcxarchive\uwcxarchivecopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveCopyOutOperation"/> </Unit172> <Unit173> <Filename Value="filesources\wcxarchive\uwcxarchivedeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveDeleteOperation"/> </Unit173> <Unit174> <Filename Value="filesources\wcxarchive\uwcxarchiveexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit174> <Unit175> <Filename Value="filesources\wcxarchive\uwcxarchivefilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveFileSource"/> </Unit175> <Unit176> <Filename Value="filesources\wcxarchive\uwcxarchivelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveListOperation"/> </Unit176> <Unit177> <Filename Value="filesources\wcxarchive\uwcxarchivetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveTestArchiveOperation"/> </Unit177> <Unit178> <Filename Value="filesources\wfxplugin\fwfxplugincopymoveoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="WfxPluginCopyMoveOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fWfxPluginCopyMoveOperationOptions"/> </Unit178> <Unit179> <Filename Value="filesources\wfxplugin\uwfxplugincopyinoperation.pas"/> <IsPartOfProject Value="True"/> </Unit179> <Unit180> <Filename Value="filesources\wfxplugin\uwfxplugincopyoperation.pas"/> <IsPartOfProject Value="True"/> </Unit180> <Unit181> <Filename Value="filesources\wfxplugin\uwfxplugincopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginCopyOutOperation"/> </Unit181> <Unit182> <Filename Value="filesources\wfxplugin\uwfxplugincreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit182> <Unit183> <Filename Value="filesources\wfxplugin\uwfxplugindeleteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit183> <Unit184> <Filename Value="filesources\wfxplugin\uwfxpluginexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit184> <Unit185> <Filename Value="filesources\wfxplugin\uwfxpluginfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginFileSource"/> </Unit185> <Unit186> <Filename Value="filesources\wfxplugin\uwfxpluginlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginListOperation"/> </Unit186> <Unit187> <Filename Value="filesources\wfxplugin\uwfxpluginmoveoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginMoveOperation"/> </Unit187> <Unit188> <Filename Value="filesources\wfxplugin\uwfxpluginsetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginSetFilePropertyOperation"/> </Unit188> <Unit189> <Filename Value="filesources\wfxplugin\uwfxpluginutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginUtil"/> </Unit189> <Unit190> <Filename Value="filesources\winnet\uwinnetexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit190> <Unit191> <Filename Value="filesources\winnet\uwinnetfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWinNetFileSource"/> </Unit191> <Unit192> <Filename Value="filesources\winnet\uwinnetlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWinNetListOperation"/> </Unit192> <Unit193> <Filename Value="fileviews\ubrieffileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uBriefFileView"/> </Unit193> <Unit194> <Filename Value="fileviews\ucolumnsfileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uColumnsFileView"/> </Unit194> <Unit195> <Filename Value="fileviews\ucolumnsfileviewvtv.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uColumnsFileViewVtv"/> </Unit195> <Unit196> <Filename Value="fileviews\ufileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileView"/> </Unit196> <Unit197> <Filename Value="fileviews\ufileviewheader.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewHeader"/> </Unit197> <Unit198> <Filename Value="fileviews\ufileviewhistory.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewHistory"/> </Unit198> <Unit199> <Filename Value="fileviews\ufileviewwithpanels.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWithPanels"/> </Unit199> <Unit200> <Filename Value="fileviews\ufileviewworker.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWorker"/> </Unit200> <Unit201> <Filename Value="fileviews\uorderedfileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOrderedFileView"/> </Unit201> <Unit202> <Filename Value="fopenwith.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOpenWith"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOpenWith"/> </Unit202> <Unit203> <Filename Value="platform\unix\ukeyfile.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKeyFile"/> </Unit203> <Unit204> <Filename Value="fsyncdirsdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSyncDirsDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSyncDirsDlg"/> </Unit204> <Unit205> <Filename Value="fsyncdirsperformdlg.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fSyncDirsPerformDlg"/> </Unit205> <Unit206> <Filename Value="platform\unix\glib\ugio2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGio2"/> </Unit206> <Unit207> <Filename Value="platform\unix\glib\ugobject2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGObject2"/> </Unit207> <Unit208> <Filename Value="platform\unix\glib\uglib2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGLib2"/> </Unit208> <Unit209> <Filename Value="uspecialdir.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSpecialDir"/> </Unit209> <Unit210> <Filename Value="fstartingsplash.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmStartingSplash"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit210> <Unit211> <Filename Value="frames\foptionsdirectoryhotlist.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDirectoryHotlist"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="foptionsDirectoryHotlist"/> </Unit211> <Unit212> <Filename Value="fhotdirexportimport.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmhotdirexportimport"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit212> <Unit213> <Filename Value="platform\unix\mime\umimecache.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeCache"/> </Unit213> <Unit214> <Filename Value="platform\unix\uxdg.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uXdg"/> </Unit214> <Unit215> <Filename Value="platform\unix\mime\umimetype.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeType"/> </Unit215> <Unit216> <Filename Value="frames\foptionstoolsdiffer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDiffer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolsDiffer"/> </Unit216> <Unit217> <Filename Value="frames\foptionsfileassoc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileAssoc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileAssoc"/> </Unit217> <Unit218> <Filename Value="frames\foptionsbriefview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsBriefView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsBriefView"/> </Unit218> <Unit219> <Filename Value="fmaincommandsdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMainCommandsDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMainCommandsDlg"/> </Unit219> <Unit220> <Filename Value="frames\fsearchplugin.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSearchPlugin"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fSearchPlugin"/> </Unit220> <Unit221> <Filename Value="udiffonp.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDiffONP"/> </Unit221> <Unit222> <Filename Value="udiffond.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDiffOND"/> </Unit222> <Unit223> <Filename Value="fdeletedlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDeleteDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDeleteDlg"/> </Unit223> <Unit224> <Filename Value="ufavoritetabs.pas"/> <IsPartOfProject Value="True"/> </Unit224> <Unit225> <Filename Value="frames\foptionsfavoritetabs.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFavoriteTabs"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFavoriteTabs"/> </Unit225> <Unit226> <Filename Value="frames\foptionstoolseditor.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolsEditor"/> </Unit226> <Unit227> <Filename Value="frames\foptionstabsextra.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTabsExtra"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTabsExtra"/> </Unit227> <Unit228> <Filename Value="uaccentsutils.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uAccentsUtils"/> </Unit228> <Unit229> <Filename Value="frames\foptionstreeviewmenu.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTreeViewMenu"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTreeViewMenu"/> </Unit229> <Unit230> <Filename Value="frames\foptionstreeviewmenucolor.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTreeViewMenuColor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTreeViewMenuColor"/> </Unit230> <Unit231> <Filename Value="uglobs.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGlobs"/> </Unit231> <Unit232> <Filename Value="ftreeviewmenu.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmTreeViewMenu"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fTreeViewMenu"/> </Unit232> <Unit233> <Filename Value="fmultirenamewait.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMultiRenameWait"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMultiRenameWait"/> </Unit233> <Unit234> <Filename Value="filesources\multiarchive\umultiarchiveparser.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveParser"/> </Unit234> <Unit235> <Filename Value="frames\foptionsfilesearch.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileSearch"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileSearch"/> </Unit235> <Unit236> <Filename Value="uexifreader.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uExifReader"/> </Unit236> <Unit237> <Filename Value="fviewoperations.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmViewOperations"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fViewOperations"/> </Unit237> <Unit238> <Filename Value="ffileunlock.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileUnlock"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileUnlock"/> </Unit238> <Unit239> <Filename Value="frames\foptionspluginsbase.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsBase"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsBase"/> </Unit239> <Unit240> <Filename Value="frames\foptionspluginsdsx.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsDSX"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsDSX"/> </Unit240> <Unit241> <Filename Value="frames\foptionspluginswcx.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsWCX"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsWCX"/> </Unit241> <Unit242> <Filename Value="frames\foptionspluginswdx.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsWDX"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsWDX"/> </Unit242> <Unit243> <Filename Value="frames\foptionspluginswfx.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsWFX"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsWFX"/> </Unit243> <Unit244> <Filename Value="frames\foptionspluginswlx.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPluginsWLX"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPluginsWLX"/> </Unit244> <Unit245> <Filename Value="uhotdir.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uHotDir"/> </Unit245> <Unit246> <Filename Value="ufilefunctions.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileFunctions"/> </Unit246> <Unit247> <Filename Value="frames\foptionsfilesviewscomplement.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFilesViewsComplement"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFilesViewsComplement"/> </Unit247> <Unit248> <Filename Value="frames\foptionstoolbarextra.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolbarExtra"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolbarExtra"/> </Unit248> <Unit249> <Filename Value="frames\foptionsdirectoryhotlistextra.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDirectoryHotlistExtra"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsDirectoryHotlistExtra"/> </Unit249> <Unit250> <Filename Value="uvariablemenusupport.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVariableMenuSupport"/> </Unit250> <Unit251> <Filename Value="fbenchmark.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmBenchmark"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fBenchmark"/> </Unit251> <Unit252> <Filename Value="filesources\gio\fgioauthdlg.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fGioAuthDlg"/> </Unit252> <Unit253> <Filename Value="filesources\gio\fgiocopymoveoperationoptions.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fGioCopyMoveOperationOptions"/> </Unit253> <Unit254> <Filename Value="fconfirmcommandline.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="TfrmConfirmCommandLine"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fConfirmCommandLine"/> </Unit254> <Unit255> <Filename Value="uwdxmodule.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWDXModule"/> </Unit255> <Unit256> <Filename Value="uluapas.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uLuaPas"/> </Unit256> <Unit257> <Filename Value="fprintsetup.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmPrintSetup"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fPrintSetup"/> </Unit257> <Unit258> <Filename Value="frames\foptionstoolbarbase.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolbarBase"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolbarBase"/> </Unit258> <Unit259> <Filename Value="frames\foptionstoolbarmiddle.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolbarMiddle"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolbarMiddle"/> </Unit259> <Unit260> <Filename Value="frames\foptionsmultirename.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsMultiRename"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsMultiRename"/> </Unit260> <Unit261> <Filename Value="fsortanything.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSortAnything"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSortAnything"/> </Unit261> <Unit262> <Filename Value="fselectpathrange.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSelectPathRange"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSelectPathRange"/> </Unit262> <Unit263> <Filename Value="rpc\uadministrator.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uAdministrator"/> </Unit263> <Unit264> <Filename Value="fselectduplicates.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSelectDuplicates"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSelectDuplicates"/> </Unit264> <Unit265> <Filename Value="rpc\sys\felevation.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fElevation"/> </Unit265> <Unit266> <Filename Value="frames\foptionscolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsColors"/> </Unit266> <Unit267> <Filename Value="filesources\gio\trash\utrashfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uTrashFileSource"/> </Unit267> <Unit268> <Filename Value="platform\unix\darwin\udarwinfswatch.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDarwinFSWatch"/> </Unit268> <Unit269> <Filename Value="fchooseencoding.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmChooseEncoding"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fChooseEncoding"/> </Unit269> <Unit270> <Filename Value="uhighlighters.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uHighlighters"/> </Unit270> <Unit271> <Filename Value="filesources\shellfolder\ushellfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uShellFileSource"/> </Unit271> <Unit272> <Filename Value="filesources\gio\network\unetworkfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uNetworkFileSource"/> </Unit272> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (Laz_FullVersion >= 4990000) then begin CustomOptions += '-dLCL_VER_499'; end; if TargetOS = 'darwin' then begin UsageCustomOptions += ' -k-macosx_version_min -k10.5'; UsageCustomOptions += ' -XR/Developer/SDKs/MacOSX10.5.sdk/'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> <VariablesInRegisters Value="True"/> <UncertainOptimizations Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <ExecuteBefore> <Command Value="$(ProjPath)\platform\git2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> <Debugging> <Exceptions Count="1"> <Item1> <Name Value="EXmlConfigNotFound"/> </Item1> </Exceptions> </Debugging> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/doublecmd.ico������������������������������������������������������������������0000644�0001750�0000144�00001322626�15104114162�016022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �h��f��� ��� �����00��� �%��v��@@��� �(B��;����� �(�F}������� �( �n�(������ ���� �����������������������������Q~XnrOmpOlmOkkOjhOifOgdOsmW|gzr`{m> Ok&S#K F?94.(#   YO{Җ/R>94-'"DNЫIc84-'"Zj?X4- "]bhh֚4Kr,X7\ --2E�+-ã6mWz>bm'A,ao34ģ6mido\m!:)",+2XXģ6mhf~vYlT^U]SYklģ6mheYo\o_iRZQWkkĘ/fh]r]ocqzHN`_ܜg{_t]oZivg`v_t]o[kXfoynv_zb{av_t\o[kXfVbOYw} qfjhfzdxcsap_l\fV`U\jlR����$|*{*{*z*y*y*x*x*w*w*v*����������������������������������������������������(��� ���@���� �������������������������������������    ��������������������SbElXBsYCtXAuV?sV>rU>qT=pT<pT;nS;nS:mS:mS8kR9kR8jR7jQ6iS8jQ2bQ2bQ2aP1aS5cʉr+��������Rc>f1],X+T*Q(N&K$H#E"B!@=9631.+'%"E5:����"Tk,Z'T"O"K!IEC@=:641.+(% "     E0uN9]BEC@=:641.+(% "   � CKXXs@@=:641.+(% " pwX@=:641.+(% " -;X@:641.+(% VbK:641.+( $.?uBm4a.ZXt641.+( !% "sKu;f1\'S'P"@41.+'s~Ya�   �s_Iq<e2[+T I01.+&`g  smcPtBh6].U2V92/*'; smjh]~NqAd7Z6N3/)juDN     "&smiigfa~SrK`!;7.&  #69smiigffegx8P2J)?*8)5,6095==DDHY\smiigffdy\pXkQcQ\PZR[S[SZRWPT^asmiigffeq]q]oYkeoT^S\S[RXRWOT^asmiigffgau]q]oZls~NYS\S[RXRWOT^asmiigfc[q]q]o[mZis{S\S[RXRWOT^asmiigah{^t]q]o[m[j^fQYRXRWOT^anjee_t_t]q]o[m\kbp]bKQJOY[ӹ<ϵbw_t_t]q]o[m\kYhvԳYp`v_t_t]q]o[m\kZiXgXmay`w_t_t]q]o[m\kZiXgS`Xd~b|bz`w_t_t]q]o[m\kZiXgXeVc^hWlb}d~b|bz`w_t_t]q]o[m\kZiXgXeVcV`Q[kr����8gycdeffdd}b|bz`w_t_t]q]o[m\kZiXgXeVcWaU_S\RZOUKQIOUF ����}sggfedc}b|ay`w_t^t]q\n[m[jYiXgWdVbWaU_S\S[QWNSebt����B|hthtjtlultlskqjoinimhkgjfifgefdddbba\Z[XZW[Ve^v������������*7@@@@@@@@@@@@@@@@@@@@@;,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���0���`���� ���������������������������������������������   �������������������������������� 2;GSH;9999999999999999ɿ9ɿ9ɿ9ɿ9:@Saddc]K9)��������������������?gVRCQFPEPEODNBNBMAL@L?K?K>K=K<J<J;~J:}I9|I9|I8zH8zH7zH6yH5xH5wG4vG4vG2tD,lD,lD,kC+jC*jD-lK3pgRv7������������ EwoQWOnCl9c6a4^4[3Y1X0V/T.Q-O,N,K*I*H)G(D'B&@%?%<#;"9"7!5 31/.,*(&'#+)(6%wq\> ��������#{{Md;j&U%R"O L IGEBA?=;86431/-*(&% # !   � � 'vd$���� GM_Cp)W$RLKJ!J!IFDCA><:86531.,*('%# !     ���� ,zM ԥڽuXv5ZFDEDCA><:86531.,*('%# !    �� (FMdix|Ѥ%LjCACA><:86531.,*('%# !   ?I#8X>@><:86531.,*('%# !  ,8#h}=><:86531.,*('%# !  ck#><:86531.,*('%# #8:86531.,*('%# #686531.,*('% iier[n46531.,*(' !XdX\?CAD[����Dp3a,[$S&QVs*F4531.,*( %!5?F���� l  Ox>i7c1\,W!N#Ns2531.,*( !jq�   � p ZGp?h8a1\-W'QGf~6O231.,* %/A^e�    � p iU{JqAi9b3[.V)QF}u -31.,*ztz   � p pe[~OtDk=c6\0W)P.R721/,*'!   p pjgaWyLoBg;`5Z(Nl:R01/-'5Gbi�   p pjihf`WxLnDe;]>^Xj031. &Vd+         p pjiihgeaZxQpAckz5963)q}'+p pjihhgfeec~[w$?)B&?$<1!)(() *#+&-*1/4?Dp pjihhgfefe`{9R=T9P6L*@%3.;0;2<5>9A=ECIHMKOVYp pjihhgfefe`zVkYlVhReI\DOLWNXPXQYRYRXRWQVOSW[p pjihhgfefea{Yo]q]p\nViP[V`T^T\S[SYRXRWQVOSW[p pjihhgfefcv~Zp]q]o\nWi_iT^T^S\S[SYRXRWQVOSW[p pjihhgfef`|j{\q]q]o\nYkmxOZT^S\S[SYRXRWQVOSW[p pjihhgffbsZp^r]q]o\n[lYi[eR\T\S[SYRXRWQVOSW[p pjihhgfcgYp^s]q]o\n\mUfR[R[S[SYRXRWQVOSW[p pjihhgbgfy^s^s]q]o\n[mZjerQZPXSZRXRWQVOSW[o pjihf`uZp_t^s]q]o\n[m\kVf]dKRPVQWQVOSW[u����Ύkdbbvbw_t_t^s]q]o\n[m\kZj_n^cJPHNHLRVsדɣv^t`t_t^s]q]o\n[m\k[kXgs~ýȽԇ"_v`v_t_t^s]q]o\n[m\k[kZiXg#`y`w`v_t_t^s]q]o\n[m\k[kZiYhYf#`yay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWd#xa{bzay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdUbqy#e~b|c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcT_Zd#k`|d}d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaU_PZ]fלqa`dee~d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaV`U_R\MVOWbhx|غԕ��������Tcgmacdefffee~d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaV`U_T^T\S[PWMTKQGMNTPAE��������;{n{lfhgfeedd}c}b|azay`w`v_t_t]r\p\o[m[l[jZjYhXgXeWdVcVaV`U_T^S\S[RYPVMSX^d`{h)����j~w{|mfeeijjjihhgf~f}e|ezcxcwbvbubsar`q_o_m^l\kZgUaT`S_R]R\V_biryojwdĸP������������ ]ysolihjhigkhkhkgkfkfjejejcichbhbhah`g_g_g^g]f]f\e[eZdZdYcWaUaT`S`S`RbSeSo[V����������������'EžWbfffffffffffffffffffffffffffffffe_Q1���������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���@������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%+$'3888883& ���������������������������������������� ">Zpt|ws~ozozpzozpzpzpypzpypzpzpypzozozozpzozpzpzozpypzpzpyqzqzpzv{wxxwxxtxuX=(��������������������������������4ƼijNrA+h;.tHDHGGFFEECEBDAD@D?C>C>B=B<B;A;A:A9@9@7?7?6?5>4=4=3=3<2~<1}<1|;0{;/{;.z:-y:,y:+x9*w9*w9)v8(u8(t8's7'q7&r/Y+ RJ+c׫M! ���������������������������� 4I;{lyLn>g5^2\0Y.W.U-S,R+Q*P)M(L(J'H&G&E%D%C$B#@#?"=!< :8754310.-+*('&%#" #!43L:}U5cU!��������������������iIFj1]+W(T%P#N"L!I GFDCA@>=;:9765320.,*)'&% # "       �81O2eM���������������� <JE[1^-Y*V'S$Q#O!L I HGDCBA?=<:9765320.,*)'&% # "         0*)������������]KiRx1^.Z)V&R#P"M!K J IFDCB@?=;:965432/.+*)&&$ # "        "<#i@����`rͩkmiJn?e8`1X(P!JHFDCB@?=<:9755320.,*('&% # "    ! '%,<BOSLOPRVMħ{-���� q:^'N!HDCB@?<;98765320.+)('&% # "       8@~t���� Jg,ODBA?=<:9755220.,*)'&% " "      %0KTs���� <\%IA?=;9965522/-+*('&% " "    &FPt���� cy)L@=<:9765320.,*)'&% # "   +8t���� 2R?<99765220.,*)'&% # " $;Ht���� 8U=:9765320.,*)'%% # " !&IUs���� 5R;9655310.,*)'&% #"&IVs���� )G:765320.,*)'&% $$<Kq����ǩ衰q ?765320.,))'&%%+<ʹO�������� ;|l>k3a/]3\Qo}Ka965320-,*)'&&,wTX!õd��������?~pEp:f5b1]-Y)U2YTq/J6532/-,*('''EUw{,4   õh�������� =~oJs?i8d4^0[-W*U&Q.Usas75320-,*)'(4NU    ��ôf������������ >pRzFn?h8b4^/Z+V(S(Q,SZu.I5310.+*)(&N\2;    ��õg�������� >r\NuFo?i9b4^/Y+U)R'P,Rb{bs732/.,*)),}:C     �ôf�������� >sfZ~PvHoAh;c5^1Y-U*R'O2U|!>410.,*)(<MOX    �µg�������� =sle]TyKqEk>e8_3Z/V,R*ODd6O410.,**)frx}'    ´f�������� =slif`Y|QtImAg<a6\1W.S4WlVi230/-++0}6B      !´g�������� >tmihgd_~VxNqGj@d;_7Z1UKhr~430/-,,%:$1  &´g�������� =smjhghgb]}VvOoHjBd<^Gf%@631/-,3GX`"          ',³f�������� >tliighgfeb]|XvRpKkLjy3L;7532/DU=H15g�������� >tmjihhgeeddc_|\xZu|DZ'A$>";973Ud4A"#"####$$&!($)(,AEg�������� =tljigigffedddd~e}Wj3L/H-E*B*@$<er8D- .!-".$.$/'0)2,4/6398<=@SWg�������� >tliihigffeddd~d~f~cuD[@W=S:P9N3HtEP0<1>3=4>7@9B<D>FAHDJGLJNLO^bg�������� >tmjihihffeeedd~gj{WkShQeNbN`I\yWaEPGRHQIRJSLTMTNTNTOTOTOSNR_cg�������� >smjihihfffeeed~ii{^q\o[nZmZlXi{gpR\S]R\R[R[RZQXQWPVOUOTNSNR_bg�������� >tmjihiheefeeed~mex^q\o[n[m[m[kvv~U`T^R\R[RZRYQXQWPVOUPUOTOS`cg�������� >tljigihfffeeec~u^s^r\p[n[m[l[ljw\fU_S\S\S[SZRYRXQWPVPUNTOR`bg�������� >tmjhhhgffeeeeh]q^r\p\n\n[m\lcqiqU_S]S\S[SYRYRXQWPVPUOSOS`cf�������� >tliihigffeeeevu^s^r]p\o\n[m\l^n}XaS]R\S[SZRYRXQWPVPUOTNR_bg�������� >smjhhhhffeeeigz^s^r\o\o\n[m[l\kiqT^S]S[SZRXRXQWPVPUOTOS`cg�������� =smihghheeefhau^s^q]o[n[m[m[l\kgt]fS]S[RZRYRXPVOUOUOTOS`cg�������� >tmjihhgfffgxu_t^r^r]p\o\n[m[l[k[j[eT\SZRYRXQWPVPUOTOS`cg�������� =tlihghhffgbv_t^r]q]o\o\n[l[l[j[jmz]eS[SZRXQWOUOTNSNR_ch������������ >vmjihihhox`t_t^r]q]p\o\n[l[l[j[j[kkrV]SYRXQWPUOTOSaeo�������� =xmihefvcx`t_t^r^q\p[o[n[l[l[jZjYihuz}Z^NTNSNSOS`dq����W|ьj`u_t_t]q]q]o[n[m[l[l[jZjZjZjzy{b'���� vaw`u_t_s^r^r]p\o\n[m[l[jZjYiXh]lb���� by`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhYh`ms���� f|`x`w_u_t_t^r^r]p\o\m[m[l[jZiYiXhXgYfcos���� d|ay`w`v_t_t_t^r^r]p\o\n[m[k[jYjXiXhXgXeXecot���� yd}azay`w`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhXgXeXdWd^jt���� qd|b{azax`w_w_t_t_t^r^r]p\o\n[l[l[jZjYiXhXfXeWdWdVb\gpxt���� ygc}c|a{`yay`w_v_u_t_t^r^r]p\o\n[m[l[jYiYiXhXgXeXdWdVbVaWa^h}s���� tle~d~c}c|a{azay_w`v^t^s^s]r]r]p[n[mZlZkZiZjXiWgWfWeXdWcVbVaV`T_Xb_hovs���� |qhddd~d~c|c|a{ayay`w`v_u_s_s^q^q]p[o[n[m[k[jYjYiXgXfXeWcWdVbUaV`U_U_S]T]Zadkrw㿿f����5pponligfeedd~c}b|b|`{az`x`w`w_t_s_s^r^r]p\o\n[l[l[jZjYiXhXgXeXdWdWbVaV`T^U_S]S\S[SZT[V\W[X]Y]X[^cP<|_# ��������ûkio}hghhfffedd~d~c}b|b|a{ayax`v`v_t_t^s]r]q\p\o[n[mZlZiZjXiXhXgWeWdVcVbVaU`U_U_R\S\S[SZRYRXQVOUOTMQ]_Y>u; ������������M\Fxghhhfeeddee~d~c}c|a{azay`w`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhXgXeXdWdWbVaU`T^T^R\R[RZRYRYRXQWQWOTejd[%���������������� .d[iggfffeed~d}c}b|b{azayax`v`v_t_s^s]q]q\o\n[m[lZkZiZiYhXgXgWeWdVcVbVaU`U_U_S]S\S[SZRYRXQVQVbfzt]@lF��������������������@dStfdccemoooonnmmlllkj~j}i|h{hzhygxgvgvfuetesdqdpcocn^jU`S^R]Q[PZQZPXZahnpdoSy\������������������������7`rZeWwnvwwvwuwuvtvtvsvsururuqtquqtptptotnsnsmsmrmrlrkrkqjqjqiqhqgpgpfpfpepeoeododocncmbmbmamal_gSY;id}S$ ��������������������������������2J\evvvwwwvwwwvwwwwwvwwvwwwwwwwwvwvvwwvwwvvwvvoaR7 ���������������������������������������� ������������������������������������������������������������������������������������������������������������������������?������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������(���������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������U=>1@D@D@D@D@D@D<D<D<D<D<D<D8D8D8D8D8D8D8D5D5D5D5D5D5D5D5D1D1D1D1D1D1D1D1D-D-D-D-D-D)D)D)D)D)D)D)D)D&D&D&D&D&D&D&D"D"D"D"D"D"D"D"DDDDDDDD|D|D |D |D |D xD xD xD tD tD tD tD tD qD qD qD qD qDqDmDmDmD m1 f��U�������������������������������������������������������������������������������������������������������������U CH C B B A@@??>>==<<;;::9988766554433221100//..-,,++**))((''&&%%$##""!!  ~~}| { z z y x w v v u t s r r q p o o n m lkkk jhG��������������������������������������������������������������������������������������������!CT!D!C B!D!E EEECCBB@@@@@?====;;:::888766544422210////---,++**))'''&%%$$$""!!                 wih h gR�������������������������������������������������������������������������������G!D!D!E HHGGFFEDDCCBAA@@?>>==<;;::98877655443321100/..--,++**)((''&% % $ $ # " " ! !            j g f�i��������������������������������������������������������������������"D-!E!E"HIII!K#M$M$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                  f f c,������������������������������������������������������������#F"F"E IJJ#N&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                   e d d����������������������������������������������������F !F"E!IJ!M&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                    d d��f ������������������������������������������������!F"F"JK"N'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                     d c��������������������������������������������$I"F"HK M'R'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                     o d b����������������������������������������"F"G LK%S'S'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      c a�������������������������������������U#G#IL"O'T'S'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      m b���������������������������������!G=#F!JK%Q&S&R&Q%Q%P&O%O%N%M$M$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      a \:����������������������������� C~!DHI&O%O%N%M$M$M$L#L#L$K#L#K#K"J#J"I"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      ^[{���������������������������� @ @DE#I"I"I"H!H!G"G!G!G"G!G!G"G!G"H!H!H"H!G!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                    XU��� �������������������������><?? CCBBBA@AAAABBB DD D F F F!F E E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                   ~~}|{SR����������������������o򬮲dwIa,H=>??ABC DDD DDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!            7=V[sw򦦦j���������������uwKb!?<=>?AACCBCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!             <Csxp���������������vWl=:<=?@ABAAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!           IQp���������������v8Q8:<=?@@@@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!          )3p���������������v:Q79;=>???>>=<<;::98876654432110//.--,++*))(''&%$$#""!        +5p���������������v;R79;=>>>>=<<;::98876654432110//.--,++*))(''&%$$#""!       /9p���������������vv:69;<=>=<<;::98876654432110//.--,++*))(''&%$$#""!      ntp���������������vUg579;<<<<;::98876654432110//.--,++*))(''&%$$#""!     MVp���������������v|657:;;<;::98876654432110//.--,++*))(''&%$$#""!    {p���������������v.E369:;;::98876654432110//.--,++*))(''&%$$#""    ".p���������������vPb357::::98876654432110//.--,++*))(''&%$$#"!   ISp���������������vZk24799:98876654432110//.--,++*))(''&%$$#! !   T]p���������������vhw1468998876654432110//.--,++*))(''&%$$" !   bjp���������������v~136888876654432110//.--,++*))(''&%$$"   zp���������������vds03678876654432110//.--,++*))(''&%$#!  _hp���������������uWf0357876654432110//.--,++*))(''&%#"  Q[p���������������e媭GY035776654432110//.--,++*))(''&$" CN䭭`���������������������?<?A D D C CBA!B7TQht'>13666654432110//.--,++*))(''&#! !/gk>D!'   ~XU��� ������������������������� B BEG$K#K#J#I"I"G!F ECA?'E^r/1456654432110//.--,++*))(''%"  NS         ^ Z�����������������������������)L"FJ!M&P%P%O%N$N$M$L#K"I"G EC@=2Nu.245654432110//.--,++*))('&$! s{|%          c ^������������������������������.Q&I,V#O(S'S'R'Q&Q&P%O$N$M$K"J"H!EB@=.J6J/24554432110//.--,++*))('%# 2?#        f `�������������������������������.Q'JNs>e*U'T'S'R&R&Q&P%P%N%M#M#K#I!G EB>;G^.02554432110//.--,++*))(&$!6>        g b��������������������������������.Q'JNsRuOs0['S'R&R&Q&P%P%O%N$N$M$K"J"I FC@<&BVf.1444432110//.--,++*))(%# U_        g b��������������������������������.Q'JNsRuVxTx?f(S&R&Q&P%P%O%N$N$M$L#K#J!I!F DA<9fw6/244432110//.--,++*))'$"(X_        g b��������������������������������.Q'JNsRuVxUxUwKn/Y&Q&P%P%O%N$N$M$L#K#K"J"H!GDA>9arjw-033432110//.--,++*))&# hqT[        g b��������������������������������.Q'JNsRuVxUxUwUwSv?e(Q%P%O%N$N$M$L#K#K"J"I"H G DA=9Vi1/13432110//.--,++*)(%"'GN        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvOq3[%O%N$N$M$L#K#K"J"I"I!H F DA<8k{cq-02332110//.--,++*)'$ cmah        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuFj+S$N$M$L#K#K"J"I"I!H!G!FD@<7-.1332110//.--,++*(&#"v{        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStRs>c'P$L#K#K"J"I"I!H!G!G EB?::HX-0232110//.--,++*(%"EQ           g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsNo7[$L#K"J"I"I!H!G!G FDB>8/G+.222110//.--,++)'$!*           g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrKk1V"J"I"I!H!G!G F ED@;7t1-122110//.--,++)&#*ho            g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqFg,R"I!H!G!G F E DB>:8Zi,012110//.--,++)%"\g              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpEf.S!G!G F E EC@<7br+.12110//.--,+*(%!T\              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoFe/S F E ECA>97+-02110//.--,+*($"              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnGg1T!FDB@;6o}3F,/2110//.--,+*'#2Adk               g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlLi7X$FA=8-Edq,/2110//.--,+*&"eo*               g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMi:Z'H94+.2110//.--,+)&"                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMjKf@Z+Fq*.2110//.--,*)%!gn                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLgHaBY]n*.2110//.--,*)%!2=                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLhIbD[>S#8-2110//.--,*($#3                 g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMhJdE]>T>P-2110//.--,*($=J                  gh��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKdE]?UIY-2110//.--,*($HU               #)387< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeF^?VTc-2110//.--,*'#S_v}          $)/7=8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@Vp{,A(B820//.--,*'#\gmt          !#,/77?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@V}?RG]G]EZ;Q1H(@!92-,*'#gqck           (&0.87@:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@V}?RG]G]G]G\G[G[FZFYDX=P3H+>!3mvck      $'-%1*50<8B<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@Vv?RG]G]G]G\G[G[FZFYFYDXCU?P9Is|{+70=6D:F;H>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeF_?Vp|?RG]G]G]G\G[G[FZFYFYDXCU?Q9Imu4?9E=I?J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKdF^?Uiv?SG]G]G]G\G[G[FZFYFYEYCV@Q:Jfp3?8D<I>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMhJdE]>Tbp@SG]G]G]G\G[G[FZFYFYEYCV@Q:J]h3>8C<H>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLhIbD[?TK[@SG]G]G]G\G[G[FZFYFYEYDV@R;KHU4?7B;G>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLgHaBYbr;M@TG]G]G]G\G[G[FZFYFYEYDWAS;L7FPY6A:F=I>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMjKfF_AW:MAUG]G]G]G\G[G[FZFYFYEYDWBT<M7E|4?9E=H>I>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMiJdE]?U;NBVG]G]G]G\G[G[FZFYFYEYDWBU=N8F3=8C<G=I>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMjLhHbCZWi<PBVG]G]G]G\G[G[FZFYFYEYDWCU>O9HDN6A:E<H>I>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMjKfF_AW_m>QCWG]G]G]G\G[G[FZFYFYEYEXCV?Q:J]g4?9C;G=I>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlLhHcD\AV=N?SDYG]G]G]G\G[G[FZFYFYEYEXDV@R;K8F4?7A:E=H>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlMkKfFaAX;N@UEZG]G]G]G\G[G[FZFYFYEYEXDWAS=M7Ftz4>8C;G=I=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlNkLiHcC\EZ<PBWF[G]G]G]G\G[G[FZFYFYEYEXDWBT>N9H6@5@:E<H=H=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlMjJfE_@XIY>RCYF\G]G]G]G\G[G[FZFYFYEYEXEXBU?P;JHU3=7B;F<H=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmNjLgGbBZ^p<N@UE[G]G]G]G]G\G[G[FZFYFYEYEXEXCVAR<L7FIR4>8C:F<G<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnNlLhHcC]@W>QBWF\G]G]G]G]G\G[G[FZFYFYEYEXEXCVBS>O8I|5>5@8C;E;G<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnOmMjIdE^?X>R@TCYG]H^G]G]G]G\G[G[FZFYFYEYEXEXDWCT@Q:K;I2<5@9C:F;F<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoOmMkIeE_AY=QBWE[G^H^G]G]G]G\G[G[FZFYFYEYEXEXDWCUAR<N8Gv{2<6?8C:E;F<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpOmMjJfE`AYEV?TDYF\H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVBT>P:IANou2;5?8B:D;F<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpPoOnMjIeF`@Y<PBWF[G^H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVCU@R<L7Fot1;4>7A9D;E<D;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqQpPnNlLiHeE^AYL\?TDZG]G^H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVCUAT>O:IER094=6@8B:C:D;C;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsQqQoOmMjKgGcC]Ka>QBWF]H_H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVBU@Q<L8F8@2<5>7@8A9B:B:B:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStRrQrPqOnNkLiHdE`B[=Q@TD[G_H_H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVBUAS?O:I8Emr193;5>7?8@8A9B9A9A9A9@8?8?8?8>8>8=7<7<7< hj�������������������������������.Q'IMrQtUwTwTvTvSvSuSsQsQqPoNnMlKhIdFaC\`sq}>SCXF]H`I`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVBT@R=L8FjsKQ192:4;5=6?7?7@7?8?7>7>7>7=8>8=7<7<7< gj�����������������������������-O&HKnNpRsQsQrQrPrPpOoMmLkLiIfGdE`C\ex=PBWF\H_IaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUBS?O;J6CQW07182:4;4<5<5<5<5<6<6;6;6:59595: eg����������������������������+K$DFhIiMkLkLjLjJiJhIfHeGcE`C^Qi>S@UE[H^H`IaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUBTAQ>M9G9F<C/6071717171828272727161626 _b����������������������������(G!?A`C`FbEbEaEaD`D_HblZj?TCYG^I`IaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUBS@O<K8EU_|WZ16-3-3-2.3.2-1-1.2 Y]��� �������������������Ñ>SBYF]I`JaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTBQ>M;I7D~���������������ë=RAXE]H_IaJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTBR@P>M:H5Bš���������������ë=RBWE]H`IaJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSAQ@O=L9G5BÜ���������������ë=RAXE\G`IbJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRAQ@O<K8F5AŞ���������������ëATAWE]H`IbJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRAQ>N<J8E8BĠ���������������ë=RBXE]HaJbJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBR@P>N<I7D4@ģ���������������ë>TBXF]HaJcKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQ@P>M;H7D4@ƥ���������������ët?UBZF^IaJcKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQ@O=L;I8D4@nvɦ���������������ëL_@WD[G`IbKcKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP?N>L;H8E5AGQǨ���������������ë?UBYE]HaJdKeLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O?N>L;I9F6B3=Ǩ���������������ëWjAWD\G_IcKeKfLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O?M>L<J:F7B4?NUǨ���������������ëv?WC[F^IbJdKfLfLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?M>L=J;G8D6@2<ouǨ���������������ë?WBZE^HaJdLfLgMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N>L=J<H:E7A4>2;Ǩ���������������ëq@WB[D^GaIeLgMgMhMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?K>K=H:F8C6A3=1:fmǨ���������������ëH`AZC\E_HbIeKgLiMiNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?J=I<G:E7B6?3=1:;CǨ���������������ë`tB[C]E_GbHdJfLhLjMjNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J=I=I;F9D7B5?4=2;19SXǨ���������������ëZoB[D^D^FaHcIeJfLiMjMjNkNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=H<G:F9C8B6@5>4<2:1806JQ|Ǩ���������������������'D<?]@]D_C_D_D_C_D_D^C_D_E_EaFbGcHdJfJgLiMjMkNkOlNlOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<G;F;E:D9B8@6?5=4;2:1917/7.5.4-3-3-2-1-1,0,0,1,0 SX���������������������������� +J@BbFdKhJhJhJhIhJhJgJhJhKhKiLjMkNkOmNlOnPnOnPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<F;E;D9C9A8@6?6>5<3<3:391817171616150405,1 X^��� ��������������������������)J!DAdJlQqPqPpPpOpPpPoOoOoPoOoPpPpQoQpPoQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;D;C:B9B8A8@7@7>6=5<5<5<5;5:594849*. ]`������������������������������#FB"F:]LpRuSvSuTuSuStStRtRsRrQrRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:A9A9@8?7>7>7>7=7=7<6;6<" `]?��������������������������������U&I+PNrQtUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7=7=r c��������������������������������������%I"GCgNqTwUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7>)/ c c����������������������������������������&D"#G-QNqOsUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>7>7>u c f��������������������������������������������!F"F:]NqQsUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8?7>$ d c������������������������������������������������F "G#FAcNpPsTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8?'- e f��f ����������������������������������������������������#F#F"F<`NpNqRtTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8?$* e e d������������������������������������������������������������"E%#E!E5WKnNpNpPrRsRsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A8A8@8?4<  f fc$�������������������������������������������������������������������� @!E!D$F:]HkMnMnLmLmLlLlKlKkKkKjJiJiJhJhJhJgJgIfIfIeIeHeHdHdHcGbGbGaGaGaG`G`F_F_F^F^E]E]E]E\D\D[DZCZCYCYCYCXCXCWCWBVBVBVBUAUATAS@S@R@R@R?Q?Q?P?P?O?O?N?N>N>M>M=L=K=K=J<J<J<I<I<H<H<G;G;G;F;F:E:D:D:C9C9C9B9B8A8A3:!) k g e�m������������������������������������������������������������������������������"C[!D!C C)K4U8Y<]=^=]=]=]=]=\=[=[=Z=Z;Y:X:X:X:X:W:V:U:U:U:U:T:S9R8R7R7R7R7Q7P7O7O7O7N7M6M5L5L5L4K4J4J4I4I4I4H4H3G3F3F3F2E2D2D1D1C1B1B1A0A0@0@/?/?/?/>/>/=.<.<.<-<-;,9,9,9,9,8,8,7,6,6+6*6*5*3*3*3)3)3&/!)#{ih h hX�������������������������������������������������������������������������������������������$I"AJ C B B A@@??>>==<<;;::9988766554433221100//..-,,++**))((''&&%%$##""!!  ~~}| { z z y x w v v u t s r r q p o o n m lkkk jiI��m�������������������������������������������������������������������������������������������������������������U=>1AK?U?U?U?U?U<U<U<U<U<U<U9U9U9U9U9U9U6U6U6U6U6U3U3U3U3U3U3U0U0U0U0U0U0U-U-U-U-U-U*U*U*U*U*U*U'U'U'U'U'U'U$U$U$U$U$U!U!U!U!U!U!UUUUU~U~U~U~U{U {U {U {U xU xU xU uU uU uU uU rU rU rU rU oU oU oU oU lU mK m1 f��U��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������������������������������������������������������������������������������?��������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������?����������������������������������������������������������������������������?(���������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$IC*BQ @o Ay B? ? ? ? ? ? ??>>>>>>><<<<::::::::9999999777755555555444444422220000000////////----+++++++********((((&&&&&&&%%%%%%%%####!!!!!!!            } } } { { { { { z z z z z x x v v v v v u u u u u s s s q q q q q p p p ppnnnll l mkylo lP g*��m������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!B6 Bx B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjji iw j5��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$I!B{!C C B B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjjiiiiz f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$@"C!D!C!C C B B B B A B!C D B B B B A A AA@@@@@@?>>>>=======<;;;::::9999888877776665444444433221110000000/....-------,,,,+***)))((((('''&&&&%%$$$$$$####""!                                            ~~}}xrljjjiihh i g h��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@@!Du!D!D!D!C!C C C EEFGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                   lihh h g g fs����������������������������������������������������������������������������������������������������������������������������������������������������������������������"D-!F!D!D!D!D!C!FGHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                    {i h g g f f e+������������������������������������������������������������������������������������������������������������������������������������������������������������#F_"E!E!D!D!D!GIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                         h g f f f e[�������������������������������������������������������������������������������������������������������������������������������������������������!F"E"E!E!D!FHIIHHHGI!J"L$L#M$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                t f f f e e��������������������������������������������������������������������������������������������������������������������������������������33#E"E"E"E!E HJIIIHI"L$P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                    g f e e e��f������������������������������������������������������������������������������������������������������������������������������"F"F"E"E#FIJJII K#N&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                     j e e e e���������������������������������������������������������������������������������������������������������������������������"G"F"F"E"FJJJJJ#M&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                      l e e d e��������������������������������������������������������������������������������������������������������������������!E\"F"F"F"G JJJJ L%Q&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                       l e d d dW������������������������������������������������������������������������������������������������������������$I*"F"F"F"GKKJJ!M'Q&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        i d d ce&�����������������������������������������������������������������������������������������������������"H"F"F"F JKKJ!N'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         e d c c��������������������������������������������������������������������������������������������������"Gh"G"F"F"KKKK!M'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          d c c cd��������������������������������������������������������������������������������������������K$G"G"F"HLKK!M'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          o c c c�f����������������������������������������������������������������������������������������$H#G"G"F KLK K%R'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           d c c c|������������������������������������������������������������������������������������$I#G#G"G"ILLK#P'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           w c c b�b ��������������������������������������������������������������������������������#Ge#G#G"GKLL M'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           c c b cb������������������������������������������������������������������������������#H#G#G"ILLL$P'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            r c b b������������������������������������������������������������������������"E%#F#F#F!KKK L(R'S'R'R'R'Q'Q&Q&P&P&P&O&O%O%N%N%N%M$M$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            b a a]!�����������������������������������������������������������������#Fm"F"F"FKKK#O'R&R&Q&Q&Q&P&P%P%O%O%O%N%N$N$N$N$N$M$M$M$L$L$L$K#K#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            b ` ` `h����������������������������������������������������������������"F"E"E"GJII%P&Q%Q%P%P%P&O&O%O%N%N%N%M%M$M$M$M$M$L#L#L#K#K#L#K#K#K#J#J#J#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            n _ _ _���������������������������������������������������������������"E"D!D HIHH&P&O%O%N%N%N%M%M$M$M$M$M$L$L#L#K#K#L#K#K#K#J#K#K#J"J"K"J"J"J#I"I"I"H"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          ] ^ ^�����������������������������������������������������������1v!D!C!BFGFH%N%M$M$L$L$L$K$K#K#J#J#J#J#J"J"I"I#J#I"I"I"I"I"I"I"I"I"I"I"I"I!I!I"H"H"H"G!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         [ \ \��7�������������������������������������������������������� :B!C A AEED H#K#J"J"I#J#J#I#I"I"H"H"H"H"H!H!G!G"H"G!G!H!G!G!H"G!G!H!G!G!H"G!H!H!G!H!H!G!G!G!F!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         Y Z[N>��� �������������������������������������������������� ���;c B@?CCA F"I"H!G!G!G!G!F!F F E E!F!E!E E D E E!E E E E E E!E E F E!F!F!F F!G!F!F!G!F G G F!F!F E F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            V XYQ_��� ��� ���������������������������������������������� ���;q@>>A@?D!F!E E D D D C CDCCCB CCBBCBBCBCC CCDC D D DD E E E F!E E F E F F E E D E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        X VWNo������ ������������������������������������������� ������:?==?>=B C CBABBAAA@@@@@@@@@@@@@@A@AAAABBBCCC D CDE D D EDED D D CDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        ~ } } }|||{{|{Y TUO~������ ����������������������������������������ƨ򫫫󭮰l~WmB\,J>=>>>>?>?@?@A@ABBBCCC DCDCDD CCCCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                              -4FK_cuy򨨨򥥥������������������������������������Ѫi|Ia%C=<===>>>?@@@AAABBBBCCCCCBBCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                         7>\a������������������������������������Ѫ\p/K;;<<=>=>???@@AAABBBBBBBABBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                       #MS|������������������������������������ Ѫp@X;:;;<==>>>??@A@ABABBAABAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                     .6ej������������������������������������ ѪOe;:::;<<==>???@@AAAAA@AA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                    BI������������������������������������ ѪAX89::;;<==>???@@@A@@@@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   3;������������������������������������ ѪWk =899:;;<==>???@?@@??@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   RY������������������������������������ Ѫ6O7899:;;<==>?>?@??????>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   )2������������������������������������ ѪH]77899:;<===>?>?????>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                  <E������������������������������������ ѪAW6778::;<<=>=>>>>?>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                3=������������������������������������ ѪAX56889::;<<=>=>>>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !              5?������������������������������������ Ѫ,F66788:;;<===>=>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             (������������������������������������ Ѫo~ :567899:;<<=======<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             fm������������������������������������ ѪUi556779::;<<<=<==<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             LU������������������������������������ Ѫ)A466789:;;<<<<=<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !            &������������������������������������ Ѫ`q4457789:;;;<<<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             Ya������������������������������������ Ѫ":4557889::;<;<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!!           !������������������������������������ ѪEZ34567899:;;;<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!          >H������������������������������������ Ѫbr23556889::;;:;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""          Yb������������������������������������ Ѫ734567899::::;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###""!        !������������������������������������ Ѫ4J23557889:9:::::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"!!        *6������������������������������������ Ѫ@S2335678999:9::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###!! !        6A������������������������������������ ѪUf223557889999:99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$##"! !       NW������������������������������������ Ѫu12345778989:99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$#"" !      qx������������������������������������ Ѫn{1224567889999988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$"""      pw������������������������������������ Ѫ212456778989988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$#"" !      z������������������������������������ Ѫ21335667888988777666555444333222111000///...---,,,++***)))((('''&&&%%%$##"! !      ������������������������������������ Ѫ|0123556778888777666555444333222111000///...---,,,++***)))((('''&&&%%%$##!!     w~������������������������������������ Ѫu002345677878777666555444333222111000///...---,,,++***)))((('''&&&%%%##"!     rz������������������������������������ Ѫp~/1234567777777666555444333222111000///...---,,,++***)))((('''&&&%%$#""     nu������������������������������������ ѪTe/113456767777666555444333222111000///...---,,,++***)))((('''&&&%$$#"!    NY������������������������������������Ѫ>Q/02345667677666555444333222111000///...---,,,++***)))((('''&&&$$$"!!    :G������������������������������������Ѫ4I/0234556667666555444333222111000///...---,,,++***)))((('''&&&$$#"!   -:������������������������������������܋7/113446566666555444333222111000///...---,,,++***)))((('''&&%$##!   'ۮ��������������������������������������� ������;@=>@?>D D DDCCCBBBA@@?'GA\]rz/002345556666555444333222111000///...---,,,++***)))((('''&%%$#"   mqLP,2  ~ ~  ~ ~ ~~~~}}}}\ UVP������ ����������������������������������������������� ���< A?@BA@ F!G!F!F!E!E!E D D D CCCBAA@@??@[qjx./1234456566555444333222111000///...---,,,++***)))((('''&%%#""   jrdh,4            _ WWS������ ����������������������������������������������� ��� ? B @ADDB!I#J#I"I"H"H"H"G"G!G!F!F E D DCBBA@@?>=:UzDW./123345556555444333222111000///...---,,,++***)))((('''%%$#"!   ALlp$+                   a YYT��� ����������������������������������������������������� @!D!B CFFE"L$M$K#K#K#K#K#J#J"I"H"H"H"G"G!F E D D CBA@??=>Si6.012245556555444333222111000///...---,,,++***)))(((''&%$$"!  'CI                     d [[X��� ������������������������������������������������������,M!E!C!EHHG#N%O%N$N$M$M$M$L$L#L#K#K#J#I#I"H"H!G!F!E EDBBA?>=< ?fx-//1234455555444333222111000///...---,,,++***)))(((''&%$#!   W\                      g ] ][~���������������������������������������������������������3S"F"E"FJJI$P&Q&P%P%O%O%O%N%N$N$M$M$M$K$K#K"I"I"I"G!G F E DCBA@>=<=at[j./0123445555444333222111000///...---,,,++***)))((('&&$##!  ZdRX                     i _ ^\}����������������������������������������������������������5S"G"F'J!MKJ%R'S'Q&Q&P&P&P&O&O%O%N%N%N%M%M#M#L#K#K#I"I!H!G!F E DCB@?><;;^q'>-/013345455444333222111000///...---,,,++***)))(((&&%$#"  !/MT                    j ` _]|�����������������������������������������������������������5V#G#F*NFk(TK%S'T'S&S&R&R&R&Q&P%P%O%O%O%N%N$N$M$M$L$K"K"J"I"H!H!F EDBB@?><:*F-./02234445444333222111000///...---,,,++***)))(((&&%#"!  z~                  l a `_{�������������������������������������������������������������6Vą#H#G+NMrMq4\&S(T(S'S'R'R'R'Q'Q&Q&P&P&P&O&O$O$N$M$M$L#L#L#J"J"I"H!G F E DCA@><;:BYJ[-./1234445444333222111000///...---,,,++***)))(('&%%#"!  FR09                 l b a_{���������������������������������������������������������������6Vą#H#G+ONsNsNrJp/Z(T'T'S'S'S'R'R&R&Q&Q&Q&P&O%O%N%N%N%M#M#L#K#K#K#I!I!H!G!F E CBA>=<:9at4-.0123344444333222111000///...---,,,++***)))(('&%$"! 'SY                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxRv7`'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%M$M$M$L#L#K#K"J"J"H!G!G!EDCA?><;9BYt,./013344444333222111000///...---,,,++***)))(''%%$"  v~-6                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxFm+V'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$L$L$K"K"K"I"I"H!F FDCB@>=;9&B*>-./02234344333222111000///...---,,,++***)))(''%$#! '5                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxQu6_'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$K#K#K"J"J"I"H!G F DCB@?=;:8ct,-.01134344333222111000///...---,,,++***)))''&$#"  U\                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwEk*U'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#J#J"J"I!H!G!F E DB@?=;:8NcCT,-/0123334333222111000///...---,,,++***)))''&$#" AN>F                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwPs5]&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#J#I!I!I!G!F E CBA?=<98E[,,.0013334333222111000///...---,,,++***))('&%#"!  7@                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwEj*T&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"I"I!H!G!F!EDC@?>;:7;SFW,-/012233333222111000///...---,,,++***))('&%#"! ER,6                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwQs7_&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"I"H!H!H!F EDBA?=;97-G,,./02233333222111000///...---,,,++***)((&%$"! '                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvHl-U&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"H"H!G F ECBA?=:97=TFV,-.01123233222111000///...---,,,++***)((&%$"! DQ.7                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvSt?d(R%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"H"G G F DCB@?<:96K`+,-/0123233222111000///...---,,,++***(('%%#! =G                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuMp3Z%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"G!G G E DDA@><:86]o4G,-.0012233222111000///...---,,,++***(('%$#! />KS                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStEi+T%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!G!G F E DCA?><976p+,./012223222111000///...---,,,++***(''%$" ci                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStQs:_%O$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!F F EDC@?=;976"8+-//12223222111000///...---,,,++**)('&$#" -                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsMo3Z$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!F FDDA@?<:96+Eiu+,..01122222111000///...---,,,++**)('&$#!gp&                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsEh,S$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!FEDCA@><:76K_*,-.01122222111000///...---,,,++*))'&%#"! =F                     m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRr?c)P#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G EECBA?=;975sBT+--/0112222111000///...---,,,++*))'&%#" ANgn                      m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsPp9^%M#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F EDCB@>=:868*,-.0012222111000///...---,,,++*))'&%#!                        m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrNo8\$L#K#J"J"J"I"I"I"H!H!H!G!G!G F E DDCA?>;:85L`-+,./012222111000///...---,,,++))(&%$"!#=G                         m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqKk3X#J"J"J"I"I"I"H!H!H!G!G!G F F D DCBA?<;964JY+,-//12222111000///...---,,,++))(&%$" HU                          m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqIi0U"J"I"I"I"H!H!H!G!G!G F F E DDBA@=<:75+D*+-./01222111000///...---,,,+*))(&%#! (                           m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpGi.S"I"I"H!H!H!G!G!G F F E E DCBA?=;865n},+,./01222111000///...---,,,+*)('%$#!$bj                             m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpHh1U"H!H!H!G!G!G F F E E D CBB?><976#=@Q*,-.01222111000///...---,,,+*)('%$# =J                             m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpGg-R!H!G!G!G F F E E E CCB@?=:874wv*+-./1222111000///...---,,,+*)('%$" vmt                               m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoFg/S!G!G F F E E E CCCA@>;975'@)+-./0222111000///...---,,,**)('$#" %                               m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnIh2U!G F E E E DCCA@?<:864|$9*,-/0222111000///...---,,,**('&$#!"3ry                                m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnGg3V#G E E DDCBA?=;975,ERa*,-/0222111000///...---,,,**('&$#!R]*                                m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmLi8Y$I DDCBA@><:753}*+,.0222111000///...---,,,**('&$"!}                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNl>])LCBBA>=;864aq)+,.0222111000///...---,,+*)('%#"!U]                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlFd1Q CA?=<975#;1+,./222111000///...---,,+*)(&%#")                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjIf6U#C><:863<N*,./222111000///...---,,+*)'&%#!;I                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjLiKe;X'F:863Se`m*+-/222111000///...---,,+*)'&%"!_jFP                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMiLgJeHcB\0K<4&?*+-/222111000///...---,,+*)'&$"!#                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMjLhKfIcG`E]BY4K$=*+-/222111000///...---,,+*)'&$"!                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhKfJdHaE]CZAV>S)+-/222111000///...---,++))'%$" tz                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhLgJeHbF^D[AW>Thw0+-.222111000///...---,++)(&%$"*BM                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgKeIbG_D\BX?TCX4G*,.222111000///...---,++)(&%$!4C                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMiLhKfIcG`E]BY?U=RM]*,.222111000///...---,++)(&%#!LX                                    m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfJcH`E]CY?V=Rer*,.222111000///...---,++)(&%#!fp                                    m b aj����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhLgJdHaF^CZ@V>Sw*,.222111000///...---,++)(&$#!xy                                    & p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHaF^DZ@W>Tz*,.222111000///...---,++)(&$#!Yb                                 %+5;7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHbF_D[AW>Tcs*,.222111000///...---,++)(&$#!;E                              !)06<7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgKdIbG_D[AX?TNa*,.222111000///...---,++)(&$#!".                           '.5;8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMiLhKdIbG`E[AX?TCX*,.222111000///...---,++)(%$#!#                      #*/68?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIbG`E\AX?U<R!61.222111000///...---,+*)'%$#!                    "%-2;8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>Q=Q9Q.G#=411000///...---,+*)'%$#                      "+-67?9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]?U5L,D$=5///...---,+*)'%$#                      )(21::B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\FZ=S5L-D%=6/--++*)'%$#                    #)&10:9B;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFY?T8M/E)@#92+%$#                     $*$1-85?;E<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q<M4D->(7             $&+"0&2-93?8D<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q=M:J8H6D$')+#0'5*7-;/>4B7D;H>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIbG`E\AX?U<R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q=M:K8H6D3>3?5A8C9E;G=H>I=J>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMiLhKdIbG`E[AX?UDY;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS@Q=M:K8H6D<F3?5A7C9E;G<H>I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgKdIbG_D[AX?TQd;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAT@Q=N;K9H6DEO3?5A7B9E;G<H=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHbF_D[AW>Tgw;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAT@Q=N;K9H6EW`3>5A7B9E;G<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHaF^DZ@W>T;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCVAT@Q=N;K9H7Epw3>5@7B9D;G<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhLgJdHaF^CZ@V>S;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R=N;K9I7E2>4@6B8D:F<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfJcH`E]CY?V=R<N>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R=N;L9I7E2=4?6A8D:F<G=H=J=I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfIcG`E]BY?U=Rp|<N>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R>O;L9I7Flu2=4?6A8C:E;G=H=I=I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgKeIbG_D\BX?TEZZh<N?RAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBTAR>O<L:J7FWb7B3?5@7C9E;F<H<I=I>I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgJeHbF^D[AW>TrDU<O?RBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXCWBUAS>O<M:J8FBO\d3>5@7B9D;F<G<I=I>I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhKfJdHaF^C[AV>S9L<O?SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAS>P<M:J8G6D2>4?6B8D:E<G<H=I=I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMjLhKfIdG`E]BY@U=R:L=O@SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAS?P=N:K8G6D2=4>6A8C:E;G<H=H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMiLgJeIcG_D\BY?TG\:L=P@SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAT?Q=N;K9G7E:D3>5@7B9D;F;H<H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjLiLgJeHbF^D[AW?T|:M=P@SBWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBT?Q=N;L9H7Efn3=5?7B8C:E;G<H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjMjLhKfIdGaE]CZ@V>Rgu;M>P@TCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBT?Q>O<L9I7Fal2<4?6A8B:E:G<G=H=I>I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjMiLhJeHcG`D\BY?UJ]CT;N>Q@TCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBU@R>O<M:I8F@N9C3>5@7B9D:F;G<H=I>I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjLiKgJdHbF_C[AW?T9L<O>QAUCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDVCU@R>P=M:J8G6Dqw3=4?6A8C9E;F<G=I=I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlMkMiLhKfIcG`E^BY@V>S:L<O?RAUCXG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDVCUAS?Q=N;K9G7E2<4>6@8B8D:E;G<H=I>I=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlMkLiKgJfHbF_D\AX?UWi~:M=P?SBVDXG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDWCVAS?Q=N;K9H7EyFO3=5?7A8C9D;F<G=I=I=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlMkMjLhKfIdGaE^C[@V>TO_;M=Q@SBVDYG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDWCVAS@R>O<L:I7FKX2=4>6@7B9D:E;G<H=I=I=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlNkMkLjKgJfHcF_D\BY?UK]9L<O>R@TBWDYG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDVBT@R>P<L:J8G5D<F3=5?6A8C9D;F<G=I<I=H=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlNkMjLiKfIdGbE^C[AX>T:L<O>RATCWEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDVBTAS?Q=M;K9G6E2<4>5@7B9D:E;G<H<I=H=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNkNkLiKhJeHcF`D\AY?VG[q}:M=P?SAUCXEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDWBUAS?Q>N;K9I6Flv8A3=4?6@8B9D;F<G<H<H=H=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNkMjLiJgIdGaE^C[@W>T>O;N=Q@TBVDXEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDWBUAT@R>O<L:I7F;H2<3>5?7A8C:E;G;H<H=H=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlNkNjMiKhIfHbF`D]AY?VPc:M<O>R@UBWDYF[G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCUBT@R?O=M;J8G6E=G2=4>6@7B9D:F;G;G<H=H=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmNkNkMiLhJfHdFaE^B[@W>T;N<P?SAVCWEZF[G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCUBTAS?P=N;K8H6Ey1;3=5?6A8C:E:F;F<H<H=G=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmNlNkMjMiKgIeGbE_C\AY?UpBS<O=Q@TBVCXEZF\G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCVBUAS@Q>N<L9I7F=L[b2;4>5@7B9D9E:F;G<H<G=G<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmNlMjMiLgJfHcFaD]AZ?WAX:M=P>R@UBWDYE[G\G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCUBT@Q>O=M:J8G6E3<2<4>6@7B8D9E:F;G<G=G<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnNlNkMiLhKfIdFaD^B[@X>Ut;N>Q?SAVCXEZF[G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCUBTAR?P=N:K8I6Fpz1;3=5?6A7C8D:E;F<F<G<G<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnOmNkMjLhKfIdHbE_C\AY?Vj{=N<O>R@TBWCYEZF\G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCVBUAR@Q>O;L9I7G8EW^2;4>5?6A7B9D:E;E<F;G<F<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnOmOlMjLiKfJeHbF`C]AZ?VI^;M=P?S@UBXDZE[G\G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCUBS@Q?O<M:J8H6D;C2<4>5@6A7B9D:E;E;F;F<F<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoOmOlNkLiKhJeHcF`D^A[@X>UTd<N>Q@TAVCYE[F[G]G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCVBSAR?P=N;K9I7EOZ1;3<3>5?6A8C9C:E:F;E;F<F<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoOnOlNkMkKhJfHcGaD^C[@Y>V:N<O?RAUBWDYE[F\G]G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCVBTAS@Q=O<M:J7F6D1;2=3>5@7A8B9C9E:E;E;F<F<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpPnOnOmNkMjLiJfHdGaE^C[AY>Vmz;O>Q@TBWCXDZF\G\G]H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWCVCTBSAR>P<N:K8H6Ekuhn1;2<4>5@7@8B8C9D:D;E;F<F<F<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpPoPnOmNlMjLiKgHdGaE^C[AY?Vo:M<P>RAUCXCYE[F\G]G]H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWCVCUBTAR?Q=O;L9I7F5DZa1:2<4>5?7@7B8C9D:D;E;F;F<E<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpPoPoOmNlMkLhKgIeGaE_C[AY@Wdu;N=Q?SBVDYDZE\G]G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCTBS?Q>P<M:J8G6EPX1;2<4=5?6@7A8B9C:D:E;F;E<E<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpPoPoPnOnNlMkLiJfIeHbE_C\AY@W\n=O<P>S@UBWDZE[F\G^G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCUBT@R?P=N;K9H7F7EKR1;2;4=4?6?7A8B9C:D:E;E;E<E<D;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpPoPoPnOmNlNjLiJgIdGbE_C\AZ?Vcs<N=Q?TAVCXE[E\G]G^G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCUBTAS?Q>O<L:J8G6DOW1:2;3=4>5?7A8B9C9D:D;D;E;D;D;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqQpQoPnOnOmNlMkLhJfHeGaE_C]AY?Wq=O=P>S@VBWDZF\F\G^G^H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVCUCUAT@R?P=M;K9H7E7E[a1:1;3<4=5?6@7A8C9C:D:D;D:D:C;C;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrQpQpQoPnOmNlNkMjKhJfHdFbE^C\AZ?W~<N>Q?TAWCXE[F]F]G^G^H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVCUCUATAS?Q>N<L:J8F6Dzsx091:2<4=5>6@7A8A9B9C:C:C:C:C;C;B;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrQqQqQoPoPnOlNlMjLiKhJfHcFaD_C[AY?W;M=P?S@VBXDZF\G]G^G^H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVCUBTAS@R?O=M;K9G7E5C081:2;3=4>5?7@8A8B9A9B9B:B:C:B;B:B:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsQrQrQqQpPpPnOmOmNkLiKhJfIeGcF`C^B\AYJ`ly<O>Q@TBWCYE[F]G^G^G^H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVCUBUATAS?P>N<L:I8F6Dfo7?092;3<4=5>6?7@8@8A8A9A9B:A:B9B9B:B:B:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsQrQrQrQrQqPpPoOnOmNlMjLhJgIeHdGbE`D]A[@Yk};N=P?SBVBXD[F\G]H^G^H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVBUBUAT@Q?O=M;J9H7F6BPW091:2;3<4=5>6?6?7?8@8A9@9A9A9B9B9B9A:A9A9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuStRtRsRsRsRrQqQqPqPpPpOnNmNlMjLiKhJeHdGbF`D^C]AZ?XM^<O>R@TCWDZE\F]H^H_G^H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVBUBUATAR?P>O<K:I8G7DKV08092:3;4<5=5>5>6>7?8?8@7@8A8A9A9A9A8A8@9@9@9?9?8?8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am���������������������������������������������������������������6Vą#H#G+NMrMrMqSwUxUwTwTvTvTvTvTvSvSuSuSuStStRtRrRrQrQpPpOoOoOnNnMlMkLjKhJfIeHbFaE_C]B[AZi{;O>Q@SBVDYD[F]G]H^H_H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVBUBUAS@Q?P=M<K:H8E6CT[08192:3:3<4<5=5>6=7>6?7?7@8@8@8@7@8?8@8@8?8?7?7>7>8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< o b am������������������������������������������������������������5V#G#F*NMrMqMpSvUwUvTvTuTuTuTuTuRuRtRtRtRsRrQrQqPpPpPnNnNnMmMlLkLiKhJgIeHcGaE_C]B[AZKa;N=P?SAUCXEZE\G^H^H_H_H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVBUBUBSAR@Q>N=L;J9F7D7D6>0819192:3;4<5<5<5=5>6>7?7>7?7?7?7?7?7>8>7>7>7>7>7>7>7>7=7=7=7<6<6<6;6;6<6;6; o a `l����������������������������������������������������������5T"G"F*MLpLpLoRuTvTuSuStStRsRsRsQsQrQrQrQqQpOpOoOoOnNlMlLkLjKiJhIfHeGcFaE`D^C\AZC\Zk<P>R@TBWDYF[F]G_H^H_I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVBUBTAS@R?O=M<K:H8F6CV`3:/708192:3:3:3;4<5=5=5=6=5>6=6>6>7=7=6=6=6=6=6=6=6=6<6<6<6;5;5;5:5:5;5:6; n ` _k���������������������������������������������������������3S"F"E)LKnKnKmPsRsRrQrQqQqQqQqQqPqPpPpOpOoOnNnMlMlLkLjKiJhIgIfHeGbFaE`D^C\B[H^;P>Q@TBVCXE[G\G^H_H_I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVBTBSAR@P?N=L;I9G8E5B3:/7071828292:3;3;4;4<4<4<5<5<5<5<5<5<5<5<5<5<5<5;5;5;5:4:4:49595:595: l _ ^j���������������������������������������������������������2R!E!D)KIlIlIjNpPpPpOpOoOoOoOoOnNnNmMmMlMkMkLjKiKhJhJfHeGdGcFbEaD_D^C]BZJa;O=Q?SAVCWDZF\G^G_H`H_I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVBTBTASAQ?O>N<K;I9F6C4A6=/6060708182929292:3:3:3:4:4:3:3:3:4:4:4:4:4:4:4:4939393838394848 j ] ]f�������������������������������������������������������� 2O!D!B(IGiGiGgLlNmNlMlMkMkLkLkLkKjKjKjKiJhJgIgIeHeHdGbEaEaD`D_C]B\AZrXh<P>S@UBXDYF[G]H^H_H`I`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUBTBTAR@P?O=L<J:H7E6CQ\^c.5/6/6070717081818182828182828282828292828383727272626272727 g [[f����������������������������������������������������� ��� /L B A'GEfEeDdIhKiKhJhJgJgJgJgJgIgHfHeHeHdGdFcFbEaE`D_C^B]B\A[r;P>R@UBWCYE[G\H^I_H`H`I`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUBTBTBRAQ@P?M=L;J9F7D5B[a.5.5/5.6/6/6060606060606060617171616161505050404051515 e YYb��� �������������������������������������������������� ���.I A?%ECcBbB`GeHfHeGdGcGcGcGcGcFcFbFbFbE`E`D_C^C]B]B[[q;P=R?TAWCYE[F\G^H_I`H`IaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUBTBSARAQ?N>M<K:H8F6D5BEL-3.4.4.4.4.4.4.4.4/4/4/4/4/4/4/3.3.3.2.3.3/3/4 b WX_������ ������������������������������������������� ������,I@>$CA`@^@]DaEbE`D`D`D`D`D`D`C_C^C^C^C]Ri{=Q<R>S@VBYDZF\G]H^I_I`IaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUBSBSAR@P?N>L;J9G8E6C8Cfj:@,2-2-2-2-2-3-2-2-2-1,1,1,0,0-2-1.2 _ UV\������ ����������������������������������������︼L_<Q>T@VBXDZE\G^H^I_I`I`IaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUBSBSBRAP@O?N<K;I9G7E6CGTͿ������������������������������������m{<Q>S@VBXCZE\F]H_I_I`I`JaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTBSBSBQAP@O=L<K:H9F7D5Bhq������������������������������������<Q=S?UAXCZD\F^G_H`I_I`JaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTBSBRAQ@P>M=L<J:H8F6D4A������������������������������������ <Q>S?UAWBZD[F^G_H_I`I`JaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTBRBRAQ?O>M=L;J:H7E6C4A������������������������������������ <P=S@V@WBYD\F]G_H`I`IaI`JaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTBRBRBQ@O?N>M=K;I9G7D5B4@������������������������������������ <P=R?UAXBYD\E^G^H`IaIaIaJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSBRBRAP@O?N>M<K:I8F7D5B4@������������������������������������ ?R=R?UAXCZD[E]G_H`HaIaIaJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSBRAQ@P@O?N>M;K:H8F7D5A7B������������������������������������ ?R=R?UAWBZD\E]F_G`HaIaIbJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSAQAQ@P@O?N<L;J:H8F7C5A7B������������������������������������ AV=R?UAWBZD\F^F_G`HbIaIbJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRAQAQ@P@O>N<K;J:H8E7C4A8D������������������������������������ @S>S?UAWBZD[F^G_G`HaIbIbIbJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRAQAQAQ@P>O=M<K;I:G8E6C4@7B������������������������������������ <Q>S@VAWBZD[F^G_HaHaIbIcIbJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRAQAQAP?P>N=M<K;H:G7E6B4@3?������������������������������������ =R>S@VBXBZD[F^G_HaIbIbIcIcJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRAQAQ@P?O>N=M<J;H9G7D6B4@3>������������������������������������ =R>T@VBXCZD\F^G_HaIbJcIcIcJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRAQ@Q@O?O>N=L<J:I9F7D6C4@3>������������������������������������ m|>S?U@WBXD[E]F^G_HaIbJcJdIcJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBR@Q@P@O?O>M=L;J:H9F7D6B5@3?fn������������������������������������ Tf>T@UAXBZD[E]G_G`HaIbJcJdJdJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRAR@P@P@O?N>M=L;I:H9G8D6B4A3?OY������������������������������������ AT?T@VBXBZD\E]G_HaHaIbJcJdJdKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQ@P@P@N?N=M=K<J:H9F8D6C4A3?5@������������������������������������ >S?UAWBYDZD\F_G`HaIbIcJcJdJdKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQ@P@O@O>N>L=K<J;H9F7E6C5A3?2>������������������������������������ ]n>T?VAXCZD\F]F_HaHaIbJdJcJdJdKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQ@O@O?O>M>L=K<I;H9G8E6C5A4?3>T\������������������������������������ >S?T@VBYC[E]F_G_HaIcJcJdKdJdJdKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAP@O?O?N>M>M=K<I:H9G8E7C6B4@3>2<������������������������������������ kz?T@VAWBYD[E]F_HaIaIcJdKdKeKeKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P?N?N?M>L=K<J;H:G9E7D6B5@4>3=dj������������������������������������ >T?UAWBYDZD\F^G`HaIcJcJdKeKeKeLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O?N?N?L>L=K<J;I:G9E8D7B5@4?3=2;������������������������������������ Wj?U@WAXCZD\F]F_HaHbJdKeKeKeKfKeLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O?N?M?M>L=L<K;H:G9F8D7B6A5?4=2<OV������������������������������������ s>V@VAXBZD[E]F_H_HaIcJdKeKfLeKfKfLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O?M?M>M>L=L=J<I;H:F9E8C7A5@4>3<2;lr������������������������������������ >U?WAYBYC[E]F^G`HaIbIcJdKeKfLgLfLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?M>M>L=K=J<I;H:F9E8C7B5@4>3=2<1;������������������������������������ @X?W@XAZC[D\E^G`H`IbJcKdKeKfLfLgLgMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?M>M>L>K=K<I<H;G:E9D7C6@5?4>3=2<2=������������������������������������ ?V@W@YAZB[D]E^F_GaHcIcJdKeLeKfLgLgLgMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?M?L>L>K=J=I<H;G;F9E8B7A6@5?4>2=1;0:������������������������������������ n?V@WAYBZB\D^E^F`GaHbIcJeKeLfLgMfLgLgMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?L>L>K>J=J=H<G:F9D8C7B7A6@4?3=2<1;19gl������������������������������������ bu?W@XAYB[C\D^E_FaGaHcIdJdKeKfLfLgMhMgLgMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?L?K>K>K=I=H;H;F:E9D8C7B6A5?4>3=2;2:0:V]������������������������������������ AY@XAZAZC\D\D^F_GaGbHdIdJeKfKfLgLhMgMhMhNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?K>K>J>J<I<G;G;F:E9D7C7A6@5?4>3<2<1:092:������������������������������������ K`@YAZBZC[D]D^E_F_GaHbIdIeJfJfKgLhLhMhMiMhNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?J>J=J=H<H<G;G;F9E8C7B7B6@5?4>3<2;1:1:09:C������������������������������������ QhAZAZB[C\C]D^E_F`FaGbHcIdJeKfJgKhLhLhLiMiMiMiNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?J>J=I=I=H<H<G:G:E9D8D8B7A5@4>4=3<2<2;1:0908DJ������������������������������������ atAYAZB[B\C]D^E^E_FaGaHbHdHdIeJeKfLgLhLiLiLiMjMjMiNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>I>I=I=I=H;H;F:F:E9C8C7B6@6?5?4>4=3<2;2:1918/7/6TY������������������������������������PfA[B[B[C\D\C]D^E_F`GbGbGcHdIdJeJfJgKgLgLhMiMiLjMkMjMjNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>I>I=I<I<G;G;F:E:D8D8B7A7A6@5?5?4=4<3<3:19180707/6/5@F|������������������������������������}[qA[A\B\B]C]C]D^D^E_E`F`FaGbGcHdIeJeIfJgKgLhLiLiMjMiMjNjNkMkMkNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>I=I<H<H<H;F;F:E9D9C8C8B7A7A6?5>5>4<3<2:2:29181707/6/6.6.5.4MRpt��������������������������������������� ������(B?<"A@^?\>[C_D_D_C_C^C^C^C^C^C^C]C]C^C]C^B^C]C^C^D^C^D_D_D`EaE`FaFbGbGbHcIcHdIeJfJgKhLhLiLiMiMjMkMjMkNjNkNkNkNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=H=H<H<G<G;F:E:D9D9C9C8C8A7@7@6?5>4<4<3;3:3:191818080706.6.5.5.5.3.3-3-2-2,2,2,2,2,1,1,1,0+0+0+/,0,1,0-1 [ TUV������ ������������������������������������������� ��� ���#Av@>!@BaA`A^EbFcFbEbFbFbFbFbFbEbEaEaFbFaFaEaEaFaFbFaFbFbFcGdGdHdHeIeIeJfKgKgKhKhLiMjMkNjMkMlNkNlOlNlNlNkNkOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=H=G<G;G;F;F:E:E:D9D9C9B8B8@7@6>6>5=5<5<3;3;2:2:29281807070705/5/5.4.4.4.4.4.4.3.3.3.2-2-2-1-1.2.2.3 Y VW Vt������ ����������������������������������������������� ���;c B? @CdCcCaGfIgIfHfHeHeHeHeIfHfHeHeHeHdHeHeHeHeIeIeHeIfIfIgJhJgKhKiLiLiMjMiMjMkNkNlNlOlNlNmOlOmOmNlOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<G<F;F;F;F;E:E:D:D9C9B8A8@7@7?7>6=5=5=4<4<4;3:2:29292917170706060606060605050504/4/4/3/3/4/4/3 W XXP`��� ��� �������������������������������������������������� 8D!C A @AcFgEeIhLkLjKjKiKiKiKiKiJiJiKiKiKiKiJiKhKiKiLiKiKjLjLjLkMjMkMlNkNlNlOlNlOmOmOnOnPmOnOnOmOmPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<F<F<F;F;F;E;E;D:C9C9B8A8A8@8?6?6?6>6>5=5=4<4;4;3;39392928282828282817171716161615151616+0 Y ZZNA��� �����������������������������������������������������/q!D!C!B>_HjHiJjOoOnNnNmNmNmNmNmMmMlMlMlMlMlMlMlMlMlNlMlMlMmNmNnNmOnOnOmPnPnPmOnPnPnPoPoPnOnPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<F<F<E;E;E;D:D:B9B9B9A9A8@7@7@7@7>7>6>5=5=5<5;5;4;4:3:3:3:3:3:39393938282827282837%* [ \ \��7������������������������������������������������������������$G!D!D7YJmIkJlQrQqPqPpPpPpPpPpOpOpOpOpOoPoOoOoOoOoOnOnOoOoOoOoPoPoPpPoQoQoQoPoPoPoQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<E<D;D:C:C:C:B:B9A8A8A8A8@8@7?7>7>6>6=6=5=5<5<5<5<5;5;5:5:5:59494948494949  ] ^ _����������������������������������������������������������������#G"E"E.PKoKnKnRrSsRsRrRrRrRrRsQsQrQrQrQqQqPqPpQqQqQpPpPpPqPqQqQpQqQqQpQpQpRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;C;C;B:B9B9B9B9B9A9@8@8?7?7?7>7>6>6=6=6=6=6=6=6<6<6<6;5;5;5;5;5;5:s _ _ ^�����������������������������������������������������������������#Fm"F"F#GJnLoLoPsTuSuStStStStStRuRtRtRtRsRsQsRrRrRrRqQrQrQrQrQrQqQqRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:B:B:B:B9A9A8A8@8@8@8?8?7?7>7>7>7>7>7>7=7=7=7<6<6<6<6<6<38 c ` ` `h������������������������������������������������������������������"E%#F#F#F=bMqMqNrUvTwTvTvTvTvTvSvSuSuSuStStRtRsRsRsRrQrRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9A9@9@9@9?9?8?8?7>7>7>7>7>7=7=7=7<6<6<6<6<6<#( b a a]!�����������������������������������������������������������������������#G#G#G-RNrNrNrQtTwUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7>7=7=7=x c b b������������������������������������������������������������������������������$Hj#G#G"GDiNrNrPsTxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7=7=,1 c c b cg��������������������������������������������������������������������������������$I#G#G"G1UNrNrNqRuUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7>7>7=7=| c c b�b ������������������������������������������������������������������������������������$H#G"G"FDhNrNqOqTwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8>7>7>7=+1 d c c c|����������������������������������������������������������������������������������������K#G"G"F*NMqNqNqPrUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>7>7>7>6<r c c c�f��������������������������������������������������������������������������������������������#Hn"G"F"F8\NqNqNqPsUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>7>7>7>" d c c cj�������������������������������������������������������������������������������������������������U"G"F"F#FBgNqNqNpQsUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8?8?7>7>*0 d d c c������������������������������������������������������������������������������������������������������$I*"F"F"F&JGkNqNpNpQsUvTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?8?7>/6 k d d ce&������������������������������������������������������������������������������������������������������������!E\"F"F"F(KJlNpNpNpOrSvTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?8?17 o e d d dW��������������������������������������������������������������������������������������������������������������������#E"F"F"E'JGiNpNpNpNpRsTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?/6 m e e d c��������������������������������������������������������������������������������������������������������������������������#E"F"E"E&HBeNpNpNpNpOqRsTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8@8?8?8?8?8?+1 k e e e d�������������������������������������������������������������������������������������������������������������������������������33#G"E"E"E"E8[MpNpNpNpMoNpQrRuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8@8@8?8?8?7>& g f e e e��f�������������������������������������������������������������������������������������������������������������������������������������#E"E"E!E!D+MDgNpNpMoMoMoMnNpOqQrRsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A8A8A8@8@8@8?8?-4x f f f e f��������������������������������������������������������������������������������������������������������������������������������������������������!Dl"E!E!D!D"D1TGiMoMoMoMnMnMnMnMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B8A8A8A8A8@8@8@/6 h g f f f fi������������������������������������������������������������������������������������������������������������������������������������������������������������ E0!F!D!D!D!D!C.Q?bLnMnMnMnMnMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B8A8A8A8A6>(0i h g g f f f-��������������������������������������������������������������������������������������������������������������������������������������������������������������������@@!Du!D!D!D!C!C C#F/P:\EeLmMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B6@/8#+ nihh h g g fs����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$@"C!D!C!C C B B B B!A&G*K,N.N/P/P/P/O/O/O.O.N.N.M.M.M.M.M-L-L-L-L-K,K,K,K,J,J,J,J,I,I,I,H+H+H+H+G+G+G+G+F*F*F*F*E*E*E*E*E*D*D*C)C)C)C)B)B(B(A(A(A(A(A(@(@'@'?'?'?'>'>'>'>'>'='='='='<'<'<%<%<%;%;%:%:%:%:$9$9$9$9$8$8$8$8#7#7#7#7#6#6#6#6"6"6"5"4"4"4"4"3!3!3!3!3!3!3 2 1 1 1 0 0 0 0 0 000....-------,+++********)))''''''''&&&&$$$$$$$#"""!!! |uljjjiihh i g h������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$I!B{!C C B B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjjiiiiz f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"D< A B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjkj j:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������9 C*BQAr Ay B@ A A A ? ? ??>>>>>>><<<<;;;;;;;;9998888888866665555555333322222222000////////----,,,,,,,****))))))))''''&&&&&&&$$$$########!!!        ~~~}}}}}{{{zzzzz x x w w w w w u u u t t t t t r r r q q q q q o o n n n n n l mky kr lP g*�q ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/doublecmd.exe.manifest���������������������������������������������������������0000644�0001750�0000144�00000003232�15104114162�017622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPathAware>true</ws2:longPathAware> </windowsSettings> </asmv3:application> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> </application> </compatibility> </assembly>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/dmhigh.pas���������������������������������������������������������������������0000644�0001750�0000144�00000064430�15104114162�015330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit dmHigh; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, SynEdit, DCStringHashListUtf8, LCLVersion, SynEditHighlighter, SynHighlighterJava, SynHighlighterXML, SynHighlighterLFM, SynHighlighterPHP, SynHighlighterSQL, SynHighlighterCss, SynHighlighterPython, SynHighlighterVB, SynHighlighterLua, SynUniHighlighter, uHighlighters, uColors, fpJson; const HighlighterConfig = 'highlighters.xml'; type { TdmHighl } TdmHighl = class(TComponent) private FTemp: Boolean; procedure LoadColors(AConfig: TJSONObject); procedure SaveColors(AConfig: TJSONObject); procedure LoadUniColors(AConfig: TJSONObject); procedure SaveUniColors(AConfig: TJSONObject); private procedure CreateHighlighters; procedure LoadUniHighlighters; function GetSyn(Index: Integer): TSynCustomHighlighter; function GetSyn(AClass: TSynCustomHighlighterClass): TSynCustomHighlighter; procedure CopyHighlighter(SourceHighlighter, TargetHighlighter: TSynCustomHighlighter); public SynHighlighterList: TStringList; SynHighlighterHashList: TStringHashListUtf8; public constructor Create(AOwner: TComponent; ATemp: Boolean); overload; destructor Destroy; override; procedure Assign(Source: TPersistent); override; function Clone: TdmHighl; function GetHighlighter(SynEdit: TCustomSynEdit; const sExtension: string): TSynCustomHighlighter; procedure SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); property Highlighters[Index: Integer]: TSynCustomHighlighter read GetSyn; property SynPlainTextHighlighter: TSynCustomHighlighter index 0 read GetSyn; end; { THighlighters } THighlighters = class private FStyle: Integer; FStyles: array[0..Pred(THEME_COUNT)] of TJSONObject; private procedure LoadColors; overload; procedure SaveColors; overload; procedure LoadDefaults(const AKey: String; AConfig: TJSONObject); overload; public constructor Create; destructor Destroy; override; procedure UpdateStyle; procedure LoadDefaults; overload; procedure Load(const FileName: String); overload; procedure Save(const FileName: String); overload; procedure LoadColors(AConfig: TJSONObject); overload; procedure SaveColors(AConfig: TJSONObject); overload; end; var dmHighl: TdmHighl; gHighlighters: THighlighters; implementation uses Graphics, SynEditTypes, SynUniClasses, FileUtil, uHighlighterProcs, DCXmlConfig, LCLType, DCJsonConfig, uGlobsPaths, DCClassesUtf8, DCOSUtils, DCStrUtils, uLng, uGlobs, uSysFolders, SynUniRules {$if lcl_fullversion >= 4990000} , LazEditTextAttributes {$endif} ; const ConfigVersion = 2; const DEFAULT_HIGHLIGHTERS: array[0..19] of TSynCustomHighlighterClass = ( TSynPlainTextHighlighter, TSynXMLSyn, TSynPerlSynEx, TSynPythonSyn, TSynUNIXShellScriptSynEx, TSynBatSynEx, TSynCppSynEx, TSynCssSyn, TSynDiffSynEx, TSynHTMLSynEx, TSynIniSynEx, TSynJavaSyn, TSynLFMSyn, TSynPasSynEx, TSynPHPSyn, TSynPoSynEx, TSynSQLSyn, TSynTeXSynEx, TSynVBSyn, TSynLuaSyn ); function SynHighlighterSortCompare(List: TStringList; Index1, Index2: Integer): Integer; begin if CompareStr(List[Index1], rsSynLangPlainText) = 0 then Result:= -1 else if CompareStr(List[Index2], rsSynLangPlainText) = 0 then Result:= 1 else Result:= CompareStr(List[Index1], List[Index2]); end; { TdmHighl } procedure TdmHighl.LoadColors(AConfig: TJSONObject); var I, J, K: Integer; AName, AValue: String; AValues: TStringArray; AList, Attributes: TJSONArray; Attribute: TLazEditTextAttribute; AItem, AttributeNode: TJSONObject; Highlighter: TSynCustomHighlighter; begin if AConfig.Find('Highlighters', AList) then begin for I:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[I]; AName:= AItem.Get('Name', EmptyStr); Highlighter:= TSynCustomHighlighter(SynHighlighterHashList.Data[AName]); if Assigned(Highlighter) and (not (Highlighter is TSynUniSyn)) then begin Attributes:= AItem.Get('Attributes', TJSONArray(nil)); if Assigned(Attributes) and (Attributes.Count > 0) then begin for J:= 0 to Attributes.Count - 1 do begin AttributeNode:= Attributes.Objects[J]; AName:= AttributeNode.Get('Name', EmptyStr); AValue:= AttributeNode.Get('Value', EmptyStr); AValues:= AValue.Split(['|'], TStringSplitOptions.ExcludeEmpty); if (Length(AName) = 0) or (Length(AValues) <> 7) then Continue; for K:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[K]; if SameText(Attribute.StoredName, AName) then begin Attribute.Background := TColor(StrToIntDef(AValues[0], Integer(Attribute.Background))); Attribute.Foreground := TColor(StrToIntDef(AValues[1], Integer(Attribute.Foreground))); Attribute.FrameColor := TColor(StrToIntDef(AValues[2], Integer(Attribute.FrameColor))); Attribute.FrameStyle := TSynLineStyle(StrToIntDef(AValues[3], Integer(Attribute.FrameStyle))); Attribute.FrameEdges := TSynFrameEdges(StrToIntDef(AValues[4], Integer(Attribute.FrameEdges))); Attribute.IntegerStyle := StrToIntDef(AValues[5], Attribute.IntegerStyle); Attribute.IntegerStyleMask := StrToIntDef(AValues[6], Attribute.IntegerStyleMask); Break; end; end; end; end; end; end; end; end; procedure TdmHighl.SaveColors(AConfig: TJSONObject); var I, J: Integer; AValue: String; AttributeNode: TJSONObject; HighlighterNode: TJSONObject; AList, Attributes: TJSONArray; Attribute: TLazEditTextAttribute; Highlighter: TSynCustomHighlighter; begin if AConfig.Find('Highlighters', AList) then AList.Clear else begin AList:= TJSONArray.Create; AConfig.Add('Highlighters', AList); end; for I := 0 to SynHighlighterList.Count - 1 do begin if SynHighlighterList.Objects[I] is TSynUniSyn then Continue; Highlighter:= TSynCustomHighlighter(SynHighlighterList.Objects[I]); HighlighterNode:= TJSONObject.Create; HighlighterNode.Add('Name', Highlighter.LanguageName); Attributes:= TJSONArray.Create; for J:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[J]; AttributeNode:= TJSONObject.Create; AttributeNode.Add('Name', Attribute.StoredName); AValue:= '$' + HexStr(Attribute.Background, 8) + '|' + '$' + HexStr(Attribute.Foreground, 8) + '|' + '$' + HexStr(Attribute.FrameColor, 8) + '|' + IntToStr(Integer(Attribute.FrameStyle)) + '|' + IntToStr(Integer(Attribute.FrameEdges)) + '|' + IntToStr(Attribute.IntegerStyle) + '|' + IntToStr(Attribute.IntegerStyleMask); AttributeNode.Add('Value', AValue); Attributes.Add(AttributeNode); end; HighlighterNode.Add('Attributes', Attributes); AList.Add(HighlighterNode); end; end; procedure TdmHighl.LoadUniColors(AConfig: TJSONObject); var I: Integer; AName: String; AList: TJSONArray; AItem: TJSONObject; ARanges: TJSONArray; Highlighter: TSynCustomHighlighter; function LoadRule(AList: TJSONArray; SymbRule: TSynRule): TJSONObject; var J: Integer; AValue: String; begin for J:= 0 to AList.Count - 1 do begin Result:= AList.Objects[J]; AName:= Result.Get('Name', EmptyStr); if SameStr(AName, SymbRule.Name) then begin AValue:= Result.Get('Attributes', EmptyStr); if Length(AValue) > 0 then begin SymbRule.Attribs.LoadFromString(AValue); end; Exit; end; end; Result:= nil; end; procedure LoadRange(ARanges: TJSONArray; ARange: TSynRange); var Index: Integer; AList: TJSONArray; ARule: TJSONObject; begin ARule:= LoadRule(ARanges, ARange); if (ARule = nil) then Exit; if (ARange.SetCount > 0) then begin AList:= ARule.Get('Sets', TJSONArray(nil)); if Assigned(AList) and (AList.Count > 0) then begin for Index:= 0 to ARange.SetCount - 1 do begin LoadRule(AList, ARange.Sets[Index]); end; end; end; if (ARange.KeyListCount > 0) then begin AList:= ARule.Get('KeyLists', TJSONArray(nil)); if Assigned(AList) and (AList.Count > 0) then begin for Index:= 0 to ARange.KeyListCount - 1 do begin LoadRule(AList, ARange.KeyLists[Index]); end; end; end; if (ARange.RangeCount > 0) then begin AList:= ARule.Get('Ranges', TJSONArray(nil)); if Assigned(AList) and (AList.Count > 0) then begin for Index:= 0 to ARange.RangeCount - 1 do begin LoadRange(AList, ARange.Ranges[Index]); end; end; end; end; begin if AConfig.Find('UniHighlighters', AList) then begin for I:= 0 to AList.Count - 1 do begin AItem:= AList.Objects[I]; AName:= AItem.Get('Name', EmptyStr); Highlighter:= TSynCustomHighlighter(SynHighlighterHashList.Data[AName]); if Assigned(Highlighter) and (Highlighter is TSynUniSyn) then begin with TSynUniSyn(Highlighter) do begin ARanges:= AItem.Get('Ranges', TJSONArray(nil)); if Assigned(ARanges) and (ARanges.Count > 0) then begin LoadRange(ARanges, MainRules); end; end; end; end; end; end; procedure TdmHighl.SaveUniColors(AConfig: TJSONObject); var I: Integer; SynUniSyn: TSynUniSyn; procedure SaveRule(ARules: TJSONArray; SymbRule: TSynRule); var ARule: TJSONObject; begin ARule:= TJSONObject.Create; ARule.Add('Name', SymbRule.Name); ARule.Add('Attributes', SymbRule.Attribs.ToString); ARules.Add(ARule); end; procedure SaveRange(ARules: TJSONArray; ARange: TSynRange); var Index: Integer; ARule: TJSONObject; Sets, KeyLists, Ranges: TJSONArray; begin ARule:= TJSONObject.Create; ARule.Add('Name', ARange.Name); ARule.Add('Attributes', ARange.Attribs.ToString); if (ARange.SetCount > 0) then begin Sets:= TJSONArray.Create; for Index:= 0 to ARange.SetCount - 1 do begin SaveRule(Sets, ARange.Sets[Index]); end; ARule.Add('Sets', Sets); end; if (ARange.KeyListCount > 0) then begin KeyLists:= TJSONArray.Create; for Index:= 0 to ARange.KeyListCount - 1 do begin SaveRule(KeyLists, ARange.KeyLists[Index]); end; ARule.Add('KeyLists', KeyLists); end; if (ARange.RangeCount > 0) then begin Ranges:= TJSONArray.Create; for Index:= 0 to ARange.RangeCount - 1 do begin SaveRange(Ranges, ARange.Ranges[Index]); end; ARule.Add('Ranges', Ranges); end; ARules.Add(ARule); end; procedure SaveHighlighter(AList: TJSONArray); var AItem: TJSONObject; ARules: TJSONArray; begin AItem:= TJSONObject.Create; AItem.Add('Name', SynUniSyn.Info.General.Name); ARules:= TJSONArray.Create; SaveRange(ARules, SynUniSyn.MainRules); AItem.Add('Ranges', ARules); AList.Add(AItem); end; var AList: TJSONArray; begin if AConfig.Find('UniHighlighters', AList) then AList.Clear else begin AList:= TJSONArray.Create; AConfig.Add('UniHighlighters', AList); end; for I := 0 to SynHighlighterList.Count - 1 do begin if SynHighlighterList.Objects[I] is TSynUniSyn then begin SynUniSyn:= TSynUniSyn(SynHighlighterList.Objects[I]); //if SynUniSyn.Tag < 0 then begin SaveHighlighter(AList); SynUniSyn.Tag:= 0; end; end; end; end; procedure TdmHighl.LoadUniHighlighters; var AName: String; I, Index: Integer; AList: TStringList; AFileName: String = ''; ACache: TStringListEx; HighLighter: TSynCustomHighlighter; begin ACache:= TStringListEx.Create; ACache.CaseSensitive:= FileNameCaseSensitive; if not gUseConfigInProgramDir then begin AFileName:= IncludeTrailingBackslash(GetAppDataDir) + 'highlighters' + ';'; end; AList:= FindAllFiles(AFileName + gpHighPath, '*.hgl'); for I:= 0 to AList.Count - 1 do begin AFileName:= ExtractFileName(AList[I]); if ACache.IndexOf(AFileName) < 0 then begin HighLighter:= TSynUniSyn.Create(Self); try TSynUniSyn(HighLighter).LoadFromFile(AList[I]); AName:= TSynUniSyn(HighLighter).Info.General.Name; Index:= SynHighlighterList.IndexOf(AName); if (Index < 0) then SynHighlighterList.AddObject(AName, Highlighter) else begin // Add duplicate external highlighter if SynHighlighterList.Objects[Index] is TSynUniSyn then begin AName:= AName + ' #' + IntToStr(I); SynHighlighterList.AddObject(AName, Highlighter); end // Replace built-in highlighter else begin SynHighlighterList.Objects[Index].Free; SynHighlighterList.Objects[Index]:= Highlighter; end; end; ACache.Add(AFileName); except FreeAndNil(HighLighter); end; end; end; AList.Free; ACache.Free; end; function TdmHighl.GetSyn(Index: Integer): TSynCustomHighlighter; begin Result:= TSynCustomHighlighter(SynHighlighterList.Objects[Index]); end; function TdmHighl.GetSyn(AClass: TSynCustomHighlighterClass): TSynCustomHighlighter; var Index: Integer; begin for Index:= 0 to SynHighlighterList.Count - 1 do begin if SynHighlighterList.Objects[Index] is AClass then Exit(TSynCustomHighlighter(SynHighlighterList.Objects[Index])); end; Result:= nil; end; procedure TdmHighl.CreateHighlighters; var I: Integer; Highlighter: TSynCustomHighlighter; begin for I:= 0 to High(DEFAULT_HIGHLIGHTERS) do begin {$PUSH}{$HINTS OFF}{$WARNINGS OFF} Highlighter:= DEFAULT_HIGHLIGHTERS[I].Create(Self); {$POP} Highlighter.Tag:= PtrInt(I <> 0); SynHighlighterList.AddObject(HighLighter.LanguageName, HighLighter); end; LoadUniHighlighters; for I:= 0 to SynHighlighterList.Count - 1 do begin HighLighter:= TSynCustomHighlighter(SynHighlighterList.Objects[I]); SynHighlighterHashList.Add(HighLighter.LanguageName, HighLighter); if not (Highlighter is TSynUniSyn) then begin with HighLighter.AddSpecialAttribute(rsSynDefaultText, SYNS_XML_DefaultText) do begin Background:= clWindow; Foreground:= clWindowText; end; end; end; SynHighlighterList.CustomSort(@SynHighlighterSortCompare); end; constructor TdmHighl.Create(AOwner: TComponent; ATemp: Boolean); begin FTemp:= ATemp; SynHighlighterList:= TStringList.Create; SynHighlighterHashList:= TStringHashListUtf8.Create(True); if not FTemp then CreateHighlighters; inherited Create(AOwner); end; destructor TdmHighl.Destroy; begin inherited Destroy; SynHighlighterList.Free; SynHighlighterHashList.Free; end; procedure TdmHighl.CopyHighlighter(SourceHighlighter, TargetHighlighter: TSynCustomHighlighter); var J: Integer; begin if SourceHighlighter is TSynUniSyn then TSynUniSyn(TargetHighlighter).Assign(TSynUniSyn(SourceHighlighter)) else begin TargetHighlighter.Tag:= SourceHighlighter.Tag; TargetHighlighter.DefaultFilter:= SourceHighlighter.DefaultFilter; for J:= 0 to SourceHighlighter.AttrCount - 1 do begin TargetHighlighter.Attribute[J].Assign(SourceHighlighter.Attribute[J]); end; end; end; procedure TdmHighl.Assign(Source: TPersistent); var I: Integer; Highl: TdmHighl absolute Source; begin for I:= 0 to SynHighlighterList.Count - 1 do begin CopyHighlighter(TSynCustomHighlighter(Highl.SynHighlighterList.Objects[I]), TSynCustomHighlighter(SynHighlighterList.Objects[I]) ); end; end; function TdmHighl.Clone: TdmHighl; var I: Integer; AClass: TSynCustomHighlighterClass; Highlighter: TSynCustomHighlighter; SourceHighlighter: TSynCustomHighlighter; begin Result:= TdmHighl.Create(Application, True); for I:= 0 to SynHighlighterList.Count - 1 do begin SourceHighlighter:= TSynCustomHighlighter(SynHighlighterList.Objects[I]); AClass:= TSynCustomHighlighterClass(SourceHighlighter.ClassType); {$PUSH}{$HINTS OFF}{$WARNINGS OFF} Highlighter:= AClass.Create(Result); {$POP} if not (Highlighter is TSynUniSyn) then begin with HighLighter.AddSpecialAttribute(rsSynDefaultText, SYNS_XML_DefaultText) do begin Background:= clWindow; Foreground:= clWindowText; end; end; CopyHighlighter(SourceHighlighter, Highlighter); Result.SynHighlighterHashList.Add(Highlighter.LanguageName, HighLighter); Result.SynHighlighterList.AddObject(Highlighter.LanguageName, Highlighter); end; end; function TdmHighl.GetHighlighter(SynEdit: TCustomSynEdit; const sExtension: string): TSynCustomHighlighter; var Extension: String; begin Result:= GetHighlighterFromFileExt(SynHighlighterList, sExtension); // Determine file type by content if (Result = nil) and (SynEdit.Lines.Count > 0) then begin Extension:= SynEdit.Lines[0]; if StrBegins(Extension, '<?xml') then Result:= GetSyn(TSynXMLSyn) else if StrBegins(Extension, '#!') then begin // Unix shell script if (Pos('sh', Extension) > 0) then Result:= GetSyn(TSynUNIXShellScriptSynEx) // Python script else if (Pos('python', Extension) > 0) then Result:= GetSyn(TSynPythonSyn) // Perl script else if (Pos('perl', Extension) > 0) then Result:= GetSyn(TSynPerlSynEx); end; end; // Default syntax highlighter if (Result = nil) then Result:= SynPlainTextHighlighter; end; procedure TdmHighl.SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); var I: LongInt; Attribute: TLazEditTextAttribute; begin if (Highlighter is TSynPlainTextHighlighter) then SynEdit.Highlighter:= nil else begin SynEdit.Highlighter:= Highlighter; end; if Highlighter is TSynUniSyn then Attribute:= TSynUniSyn(Highlighter).MainRules.Attribs else begin I:= Highlighter.AttrCount - 1; repeat Attribute:= Highlighter.Attribute[I]; Dec(I); until (I < 0) or SameText(Attribute.StoredName, SYNS_XML_DefaultText); end; SynEdit.Color:= Attribute.Background; SynEdit.Font.Color:= Attribute.Foreground; end; { THighlighters } procedure THighlighters.LoadColors; var AStyle: TJSONObject; begin AStyle:= FStyles[FStyle]; dmHighl.LoadColors(AStyle); dmHighl.LoadUniColors(AStyle); end; procedure THighlighters.SaveColors; var AStyle: TJSONObject; begin AStyle:= FStyles[FStyle]; dmHighl.SaveColors(AStyle); dmHighl.SaveUniColors(AStyle); end; procedure THighlighters.LoadDefaults(const AKey: String; AConfig: TJSONObject); var AName: String; I, J: Integer; Theme: TJSONObject; Themes: TJSONArray; procedure LoadItem(Index: Integer); var Idx: Integer; begin Idx:= Theme.IndexOfName(AKey); if (Idx >= 0) then begin FStyles[Index].Arrays[AKey]:= Theme.Extract(Idx) as TJSONArray; end; end; begin if AConfig.Find('Styles', Themes) then begin for I:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[I]; AName:= Theme.Get('Name', EmptyStr); for J:= 0 to High(THEME_NAME) do begin if (AName = THEME_NAME[J]) then begin LoadItem(J); Break; end; end; end; end; end; constructor THighlighters.Create; begin FStyle:= TColorThemes.StyleIndex; dmHighl:= TdmHighl.Create(Application, False); LoadDefaults; end; destructor THighlighters.Destroy; var Index: Integer; begin inherited Destroy; for Index:= 0 to High(FStyles) do begin FStyles[Index].Free; end; end; procedure THighlighters.UpdateStyle; var ANewStyle: Integer; begin ANewStyle := TColorThemes.StyleIndex; if FStyle <> ANewStyle then begin SaveColors; FStyle:= ANewStyle; LoadColors; end; end; procedure THighlighters.LoadDefaults; var Index: Integer; ARoot: TJSONObject; AStream: TResourceStream; begin for Index:= 0 to High(FStyles) do begin FStyles[Index]:= TJSONObject.Create; FStyles[Index].Add('UniHighlighters', TJSONArray.Create); end; AStream:= TResourceStream.Create(HInstance, 'HIGHLIGHTERS', RT_RCDATA); try ARoot:= GetJSON(AStream, True) as TJSONObject; try LoadDefaults('Highlighters', ARoot); finally ARoot.Free; end; finally AStream.Free; end; if mbFileExists(gpHighPath + 'highlighters.json') then try with TJsonConfig.Create do try LoadFromFile(gpHighPath + 'highlighters.json'); LoadDefaults('UniHighlighters', Root); finally Free; end; except // Ignore end; LoadColors; end; procedure THighlighters.LoadColors(AConfig: TJSONObject); var AName: String; I, J: Integer; Theme: TJSONObject; Themes: TJSONArray; procedure LoadItem(const AKey: String; Index: Integer); var AItem: TJSONArray; begin if Theme.Find(AKey, AItem) then begin FStyles[Index].Arrays[AKey]:= AItem.Clone as TJSONArray; end; end; begin if AConfig.Find('Styles', Themes) then begin for I:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[I]; AName:= Theme.Get('Name', EmptyStr); for J:= 0 to High(THEME_NAME) do begin if (AName = THEME_NAME[J]) then begin LoadItem('Highlighters', J); LoadItem('UniHighlighters', J); Break; end; end; end; LoadColors; end; end; procedure THighlighters.SaveColors(AConfig: TJSONObject); var AName: String; I, J: Integer; Theme: TJSONObject; Themes: TJSONArray; procedure SaveItem(const AKey: String; Index: Integer); var AItem: TJSONArray; begin if FStyles[Index].Find(AKey, AItem) then begin Theme.Arrays[AKey]:= AItem.Clone as TJSONArray; end; end; begin SaveColors; if AConfig.Find('Styles', Themes) then begin for I:= 0 to Themes.Count - 1 do begin Theme:= Themes.Objects[I]; AName:= Theme.Get('Name', EmptyStr); for J:= 0 to High(THEME_NAME) do begin if (AName = THEME_NAME[J]) then begin SaveItem('Highlighters', J); SaveItem('UniHighlighters', J); Break; end; end; end; end; end; procedure THighlighters.Load(const FileName: String); var J: LongInt; Config: TXmlConfig; Attribute: TLazEditTextAttribute; AVersion: Integer = ConfigVersion; Highlighter: TSynCustomHighlighter; LanguageName, AttributeName: String; Root, FormNode, AttributeNode: TXmlNode; begin Config := TXmlConfig.Create(FileName, True); try Root := Config.FindNode(Config.RootNode, 'Highlighters'); if Assigned(Root) then begin AVersion := Config.GetAttr(Root, 'Version', ConfigVersion); FormNode := Config.FindNode(Root, 'Highlighter'); if Assigned(FormNode) then begin while Assigned(FormNode) do begin LanguageName:= Config.GetAttr(FormNode, 'Name', EmptyStr); Highlighter:= TSynCustomHighlighter(dmHighl.SynHighlighterHashList.Data[LanguageName]); if Assigned(Highlighter) then begin Highlighter.Tag := Config.GetAttr(FormNode, 'Tag', 1); Highlighter.DefaultFilter:= Config.GetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); // Import colors from old format if AVersion < 2 then begin AttributeNode := Config.FindNode(FormNode, 'Attribute'); if Assigned(AttributeNode) then begin while Assigned(AttributeNode) do begin AttributeName:= Config.GetAttr(AttributeNode, 'Name', EmptyStr); for J:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[J]; if SameText(Attribute.StoredName, AttributeName) or SameText(Attribute.Name, AttributeName) then begin Attribute.Style := TFontStyles(Config.GetValue(AttributeNode, 'Style', Integer(Attribute.Style))); Attribute.StyleMask := TFontStyles(Config.GetValue(AttributeNode, 'StyleMask', Integer(Attribute.StyleMask))); Attribute.Foreground := TColor(Config.GetValue(AttributeNode, 'Foreground', Integer(Attribute.Foreground))); Attribute.Background := TColor(Config.GetValue(AttributeNode, 'Background', Integer(Attribute.Background))); Attribute.FrameColor := TColor(Config.GetValue(AttributeNode, 'FrameColor', Integer(Attribute.FrameColor))); Attribute.FrameStyle := TSynLineStyle(Config.GetValue(AttributeNode, 'FrameStyle', Integer(Attribute.FrameStyle))); Attribute.FrameEdges := TSynFrameEdges(Config.GetValue(AttributeNode, 'FrameEdges', Integer(Attribute.FrameEdges))); Break; end; end; AttributeNode := AttributeNode.NextSibling; end; end; end; end; FormNode := FormNode.NextSibling; end; end; // Import colors from old format if AVersion < 2 then SaveColors; // Create config backup if (AVersion < ConfigVersion) then try Config.WriteToFile(FileName + '.bak'); except // Ignore end; end; finally Config.Free; end; end; procedure THighlighters.Save(const FileName: String); var I: LongInt; Config: TXmlConfig; Root, FormNode: TXmlNode; Highlighter: TSynCustomHighlighter; begin Config := TXmlConfig.Create; try Config.FileName := FileName; Root := Config.FindNode(Config.RootNode, 'Highlighters', True); Config.ClearNode(Root); Config.SetAttr(Root, 'Version', ConfigVersion); with dmHighl do begin for I := 0 to SynHighlighterList.Count - 1 do begin Highlighter := Highlighters[I]; FormNode := Config.AddNode(Root, 'Highlighter'); Config.SetAttr(FormNode, 'Tag', Highlighter.Tag); Config.SetAttr(FormNode, 'Name', Highlighter.LanguageName); Config.SetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); end; end; Config.Save; finally Config.Free; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/dmhigh.json��������������������������������������������������������������������0000644�0001750�0000144�00000067307�15104114162�015524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{Styles:[{Name:"Light",Highlighters:[{Name:"C++",Attributes:[{Name:"Assembler",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Illegal char",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Preprocessor",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"}]},{Name:"Cascading style sheets",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Measurement unit",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Selector",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"}]},{Name:"Diff File",Attributes:[{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Diff Added line",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Diff Changed Line",Value:"$1FFFFFFF|$00800080|$1FFFFFFF|0|1|0|0"},{Name:"Diff Chunk Line Counts",Value:"$1FFFFFFF|$00800080|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk Marker",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk New Line Count",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk Original Line Count",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|1|0"},{Name:"Diff Context Line",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Diff New File",Value:"$00008000|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Diff Original File",Value:"$000000FF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Diff Removed Line",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Unknown word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|2|0"}]},{Name:"HTML document",Attributes:[{Name:"Asp",Value:"$0000FFFF|$00000000|$1FFFFFFF|0|1|0|0"},{Name:"CDATA",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"DOCTYPE",Value:"$0000FFFF|$00000000|$1FFFFFFF|0|1|1|0"},{Name:"Escape ampersand",Value:"$1FFFFFFF|$0000FF00|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00FF0080|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Unknown word",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|1|0"},{Name:"Value",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|0|0"}]},{Name:"INI file",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Section",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Java",Attributes:[{Name:"Annotation",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Documentation",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Invalid symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"}]},{Name:"Lazarus Form definition",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Lua Script",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Function",Value:"$1FFFFFFF|$00C05000|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800080|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00000080|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"}]},{Name:"MS-DOS batch language",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"}]},{Name:"ObjectPascal",Attributes:[{Name:"Assembler",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Case label",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Directive",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|1|0"},{Name:"IDE Directive",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Procedure header name",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"}]},{Name:"PHP",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Invalid symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Perl",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Illegal char",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Operator",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Pragma",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"}]},{Name:"Python",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00808080|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Documentation",Value:"$1FFFFFFF|$00808000|$1FFFFFFF|0|1|0|0"},{Name:"Float",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Hexadecimal",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Non-reserved keyword",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Octal",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"SyntaxError",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"System functions and variables",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"}]},{Name:"SQL",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Data type",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Default packages",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Exception",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|2|0"},{Name:"Function",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word (PL/SQL)",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"SQL*Plus command",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Table Name",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"TeX",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00808000|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Math Mode",Value:"$1FFFFFFF|$00008080|$1FFFFFFF|0|1|1|0"},{Name:"Round Bracket",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$00FFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Square Bracket",Value:"$1FFFFFFF|$00800080|$1FFFFFFF|0|1|0|0"},{Name:"TeX Command",Value:"$00FFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Text",Value:"$1FFFFFFF|$00000000|$1FFFFFFF|0|1|0|0"}]},{Name:"UNIX Shell Script",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|1|0"},{Name:"Second reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00000080|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$00800080|$1FFFFFFF|0|1|0|0"}]},{Name:"Visual Basic",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"}]},{Name:"XML document",Attributes:[{Name:"Attribute Name",Value:"$1FFFFFFF|$00000080|$1FFFFFFF|0|1|0|0"},{Name:"Attribute Value",Value:"$1FFFFFFF|$00800000|$1FFFFFFF|0|1|1|0"},{Name:"CDATA Section",Value:"$1FFFFFFF|$00008080|$1FFFFFFF|0|1|2|0"},{Name:"Comment",Value:"$00C0C0C0|$00808080|$1FFFFFFF|0|1|3|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"DOCTYPE Section",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|2|0"},{Name:"Element Name",Value:"$1FFFFFFF|$00000080|$1FFFFFFF|0|1|1|0"},{Name:"Entity Reference",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Namespace Attribute Name",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|0|0"},{Name:"Namespace Attribute Value",Value:"$1FFFFFFF|$000000FF|$1FFFFFFF|0|1|1|0"},{Name:"Processing Instruction",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$00000000|$1FFFFFFF|0|1|1|0"},{Name:"Whitespace",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"po language files",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Flags",Value:"$1FFFFFFF|$00808000|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$00008000|$1FFFFFFF|0|1|1|0"},{Name:"Key",Value:"$1FFFFFFF|$00FF0000|$1FFFFFFF|0|1|1|0"},{Name:"Previous value",Value:"$1FFFFFFF|$00008080|$1FFFFFFF|0|1|2|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF00FF|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]}]},{Name:"Dark",Highlighters:[{Name:"C++",Attributes:[{Name:"Assembler",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Illegal char",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Preprocessor",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$80000005|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$00898BB9|$1FFFFFFF|0|1|0|0"}]},{Name:"Cascading style sheets",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Measurement unit",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00DA9396|$1FFFFFFF|0|1|0|0"},{Name:"Selector",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"}]},{Name:"Diff File",Attributes:[{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Diff Added line",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Diff Changed Line",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Diff Chunk Line Counts",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk Marker",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk New Line Count",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|1|0"},{Name:"Diff Chunk Original Line Count",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|1|0"},{Name:"Diff Context Line",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Diff New File",Value:"$0076E56C|$80000011|$1FFFFFFF|0|1|1|0"},{Name:"Diff Original File",Value:"$006C6CE5|$80000017|$1FFFFFFF|0|1|1|0"},{Name:"Diff Removed Line",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Unknown word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|2|0"}]},{Name:"HTML document",Attributes:[{Name:"Asp",Value:"$0000FFFF|$00000000|$1FFFFFFF|0|1|0|0"},{Name:"CDATA",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"DOCTYPE",Value:"$0000FFFF|$00000000|$1FFFFFFF|0|1|1|0"},{Name:"Escape ampersand",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00D15894|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Unknown word",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|1|0"},{Name:"Value",Value:"$1FFFFFFF|$00FBA249|$1FFFFFFF|0|1|0|0"}]},{Name:"INI file",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$00D4914E|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Section",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Java",Attributes:[{Name:"Annotation",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Documentation",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Invalid symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00C28789|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$80000005|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"}]},{Name:"Lazarus Form definition",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00FF8000|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Lua Script",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Function",Value:"$1FFFFFFF|$00D5A6A6|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00AC95B3|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00ECA761|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00837189|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"}]},{Name:"MS-DOS batch language",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Key",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"}]},{Name:"ObjectPascal",Attributes:[{Name:"Assembler",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Case label",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Directive",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|1|0"},{Name:"IDE Directive",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Procedure header name",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"}]},{Name:"PHP",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Invalid symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"Perl",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Illegal char",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Operator",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Pragma",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$80000005|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"}]},{Name:"Python",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00808080|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Documentation",Value:"$1FFFFFFF|$00808000|$1FFFFFFF|0|1|0|0"},{Name:"Float",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Hexadecimal",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Non-reserved keyword",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|1|0"},{Name:"Number",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Octal",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"SyntaxError",Value:"$1FFFFFFF|$006166C0|$1FFFFFFF|0|1|0|0"},{Name:"System functions and variables",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"}]},{Name:"SQL",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Data type",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Default packages",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Exception",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|2|0"},{Name:"Function",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Reserved word (PL/SQL)",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"SQL*Plus command",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$004D4DAA|$1FFFFFFF|0|1|0|0"},{Name:"Table Name",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"TeX",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00F0CAA6|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Math Mode",Value:"$1FFFFFFF|$0081D2D2|$1FFFFFFF|0|1|1|0"},{Name:"Round Bracket",Value:"$1FFFFFFF|$006F6F98|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$8000001D|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Square Bracket",Value:"$1FFFFFFF|$00AC95B3|$1FFFFFFF|0|1|0|0"},{Name:"TeX Command",Value:"$00F0CAA6|$00F0CAA6|$1FFFFFFF|0|1|1|0"},{Name:"Text",Value:"$1FFFFFFF|$00C0C0C0|$1FFFFFFF|0|1|0|0"}]},{Name:"UNIX Shell Script",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|0|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|1|0"},{Name:"Second reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00837189|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$004D4DAA|$1FFFFFFF|0|1|0|0"},{Name:"Variable",Value:"$1FFFFFFF|$00AC95B3|$1FFFFFFF|0|1|0|0"}]},{Name:"Visual Basic",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"Number",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|0|0"},{Name:"Reserved word",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$004D4DAA|$1FFFFFFF|0|1|0|0"}]},{Name:"XML document",Attributes:[{Name:"Attribute Name",Value:"$1FFFFFFF|$00817285|$1FFFFFFF|0|1|0|0"},{Name:"Attribute Value",Value:"$1FFFFFFF|$00E8BCBC|$1FFFFFFF|0|1|1|0"},{Name:"CDATA Section",Value:"$1FFFFFFF|$00008080|$1FFFFFFF|0|1|2|0"},{Name:"Comment",Value:"$1FFFFFFF|$00C0C0C0|$1FFFFFFF|0|1|3|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"DOCTYPE Section",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|2|0"},{Name:"Element Name",Value:"$1FFFFFFF|$00837189|$1FFFFFFF|0|1|1|0"},{Name:"Entity Reference",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|1|0"},{Name:"Namespace Attribute Name",Value:"$1FFFFFFF|$004D4DAA|$1FFFFFFF|0|1|0|0"},{Name:"Namespace Attribute Value",Value:"$1FFFFFFF|$004D4DAA|$1FFFFFFF|0|1|1|0"},{Name:"Processing Instruction",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Symbol",Value:"$1FFFFFFF|$00C09B61|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$00FFFFFF|$1FFFFFFF|0|1|1|0"},{Name:"Whitespace",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]},{Name:"po language files",Attributes:[{Name:"Comment",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|2|0"},{Name:"Default text",Value:"$80000005|$80000008|$1FFFFFFF|0|1|0|0"},{Name:"Flags",Value:"$1FFFFFFF|$00808000|$1FFFFFFF|0|1|0|0"},{Name:"Identifier",Value:"$1FFFFFFF|$008AD277|$1FFFFFFF|0|1|1|0"},{Name:"Key",Value:"$1FFFFFFF|$00E86363|$1FFFFFFF|0|1|1|0"},{Name:"Previous value",Value:"$1FFFFFFF|$00008080|$1FFFFFFF|0|1|2|0"},{Name:"Space",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"},{Name:"String",Value:"$1FFFFFFF|$00AF77D2|$1FFFFFFF|0|1|0|0"},{Name:"Text",Value:"$1FFFFFFF|$1FFFFFFF|$1FFFFFFF|0|1|0|0"}]}]}]} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/dmhelpmanager.pas��������������������������������������������������������������0000644�0001750�0000144�00000007624�15104114162�016676� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Help manager Copyright (C) 2008-2021 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit dmHelpManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Dialogs, LazHelpHTML; type { TdmHelpManager } TdmHelpManager = class(TDataModule) HTMLBrowserHelpViewer: THTMLBrowserHelpViewer; HTMLHelpDatabase: THTMLHelpDatabase; procedure DataModuleCreate(Sender: TObject); private { private declarations } public { public declarations } end; procedure ShowHelpForKeywordWithAnchor(const Keyword: String); var dmHelpMgr: TdmHelpManager; implementation {$R *.lfm} uses {$IFDEF MSWINDOWS} LCLIntf, uOSUtils, uFileProcs, {$ELSE} HelpIntfs, {$ENDIF} uGlobsPaths, uGlobs, DCStrUtils, DCOSUtils, StrUtils, DCClassesUtf8; {$IF DEFINED(MSWINDOWS)} procedure OpenURLWithAnchor(URL: String); var hFile:THandle; TempoFilenameWithTheLink: String; begin TempoFilenameWithTheLink:= GetTempFolderDeletableAtTheEnd + 'FileWithALink.html'; hFile:= mbFileCreate(TempoFilenameWithTheLink); if hFile <> feInvalidHandle then try FileWriteLn(hFile,'<html>'); FileWriteLn(hFile,'<head><meta http-equiv="refresh" content="0;url=' + URL + '" /></head>'); // In case browser doesn't support auto-redirection, give a link to user. FileWriteLn(hFile,'<body><center><a href="' + URL + '">Click here</a> for help</center></body>'); FileWriteLn(hFile,'</html>'); finally FileClose(hFile); end; if mbFileExists(TempoFilenameWithTheLink) then OpenURL(TempoFilenameWithTheLink); end; {$ENDIF} procedure ShowHelpForKeywordWithAnchor(const Keyword: String); {$IF DEFINED(MSWINDOWS)} begin OpenURLWithAnchor(dmHelpMgr.HTMLHelpDatabase.BaseURL + Keyword); end; {$ELSE} begin ShowHelpOrErrorForKeyword('', Keyword); end; {$ENDIF} { TdmHelpManager } procedure TdmHelpManager.DataModuleCreate(Sender: TObject); {$IFDEF MSWindows} var ABrowser, AParams: String; {$ENDIF} var ATranslations: TStringList; begin if NumCountChars('.', gPOFileName) < 2 then gHelpLang:= 'en' else begin gHelpLang:= ExtractDelimited(2, gPOFileName, ['.']); if not mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then begin ATranslations:= TStringListEx.Create; try ATranslations.LoadFromFile(gpExePath + 'doublecmd.help'); if ATranslations.IndexOf(gHelpLang) < 0 then gHelpLang:= 'en'; except gHelpLang:= 'en'; end; ATranslations.Free; end; end; if mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then HTMLHelpDatabase.BaseURL:= 'file://' + gpExePath + 'doc' + PathDelim + gHelpLang else begin HTMLHelpDatabase.BaseURL:= 'https://doublecmd.github.io/doc/' + gHelpLang; end; HTMLHelpDatabase.KeywordPrefix:= '/'; {$IFDEF MSWindows} // Lazarus issue #0021637. if FindDefaultBrowser(ABrowser, AParams) then begin HTMLBrowserHelpViewer.BrowserPath := ABrowser; HTMLBrowserHelpViewer.BrowserParams := StringReplace(AParams, '%s', '"%s"', [rfReplaceAll]); end; {$ENDIF} end; end. ������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/dmhelpmanager.lfm��������������������������������������������������������������0000644�0001750�0000144�00000000726�15104114162�016665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object dmHelpManager: TdmHelpManager OnCreate = DataModuleCreate OldCreateOrder = False Height = 300 HorizontalOffset = 369 VerticalOffset = 200 Width = 400 object HTMLHelpDatabase: THTMLHelpDatabase BaseURL = 'file://doc/en/' AutoRegister = True KeywordPrefix = 'en/' left = 64 top = 48 end object HTMLBrowserHelpViewer: THTMLBrowserHelpViewer BrowserParams = '%s' AutoRegister = True left = 104 top = 48 end end ������������������������������������������doublecmd-1.1.30/src/dmcommondata.pas���������������������������������������������������������������0000644�0001750�0000144�00000010145�15104114162�016525� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- General icons loaded at launch based on screen resolution Copyright (C) 2009-2020 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit dmCommonData; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Dialogs; type { TdmComData } TdmComData = class(TDataModule) ilEditorImages: TImageList; ilViewerImages: TImageList; ImageList: TImageList; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; procedure DataModuleCreate(Sender: TObject); private procedure LoadImages(Images: TImageList; const ANames: array of String); public { public declarations } end; var dmComData: TdmComData; implementation uses LCLVersion, Graphics, uPixMapManager; {$R *.lfm} const ViewerNames: array[0..26] of String = ( 'view-refresh', 'go-previous', 'go-next', 'edit-copy', 'edit-cut', 'edit-delete', 'zoom-in', 'zoom-out', 'object-rotate-left', 'object-rotate-right', 'object-flip-horizontal', 'media-playback-pause', 'media-playback-start', 'media-skip-backward', 'media-skip-forward', 'image-crop', 'image-red-eye', 'draw-freehand', 'draw-rectangle', 'draw-ellipse', 'edit-undo', 'document-edit', 'view-fullscreen', 'draw-path', 'document-page-setup', 'view-restore', 'camera-photo' ); EditorNames: array[0..44] of String = ( 'document-new', 'document-open', 'document-save', 'document-save-as', 'document-properties', 'edit-cut', 'edit-copy', 'edit-paste', 'edit-undo', 'edit-redo', 'edit-find', 'edit-find-replace', 'application-exit', 'help-about', 'edit-delete', 'edit-select-all', 'go-jump', 'view-refresh', 'mr-config', 'mr-editor', 'mr-filename', 'mr-extension', 'mr-counter', 'mr-date', 'mr-time', 'mr-plugin', 'view-file', 'mr-pathtools', 'mr-rename', 'mr-clearfield', 'mr-presets', 'mr-savepreset', 'mr-deletepreset', 'mr-droppresets', 'document-save-alt', 'document-save-as-alt', 'go-next', 'go-bottom', 'go-down', 'go-up', 'go-top', 'process-stop', 'copy-right-to-left', 'copy-left-to-right', 'choose-encoding' ); { TdmComData } procedure TdmComData.DataModuleCreate(Sender: TObject); begin if Assigned(PixMapManager) then begin LoadImages(ilViewerImages, ViewerNames); LoadImages(ilEditorImages, EditorNames); end; end; procedure TdmComData.LoadImages(Images: TImageList; const ANames: array of String); var AName: String; ASize16, ASize24, ASize32: Integer; ABitmap16, ABitmap24, ABitmap32: TCustomBitmap; begin Images.Clear; ASize16:= 16; // AdjustIconSize(16, 96); ASize24:= 24; // AdjustIconSize(24, 96); ASize32:= 32; // AdjustIconSize(32, 96); Images.RegisterResolutions([ASize16, ASize24, ASize32]); for AName in ANames do begin ABitmap16:= PixMapManager.GetThemeIcon(AName, ASize16); if (ABitmap16 = nil) then ABitmap16:= TBitmap.Create; ABitmap24:= PixMapManager.GetThemeIcon(AName, ASize24); if (ABitmap24 = nil) then ABitmap24:= TBitmap.Create; ABitmap32:= PixMapManager.GetThemeIcon(AName, ASize32); if (ABitmap32 = nil) then ABitmap32:= TBitmap.Create; Images.AddMultipleResolutions([ABitmap16, ABitmap24, ABitmap32]); ABitmap16.Free; ABitmap24.Free; ABitmap32.Free; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/src/dmcommondata.lfm���������������������������������������������������������������0000644�0001750�0000144�00000331652�15104114162�016531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object dmComData: TdmComData OnCreate = DataModuleCreate OldCreateOrder = False Height = 376 HorizontalOffset = 935 VerticalOffset = 230 Width = 500 PPI = 120 object OpenDialog: TOpenDialog FilterIndex = 0 Left = 40 Top = 30 end object SaveDialog: TSaveDialog FilterIndex = 0 Left = 150 Top = 30 end object ImageList: TImageList Height = 22 Width = 22 Left = 280 Top = 30 Bitmap = { 4C69020000001600000016000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001A0000001F0000000CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0000000026454947783232324C0000001C00000007FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0000000026555957F85B5F5DF8535654AE202020370000001800000004FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000026555A 57F8F7F8F7FFB0B4B2FC585B59F4494C4A87060606270000001300000001FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000026555A57F8FFFFFFFFFAFB FAFFF2F3F2FF909491F7585B5AE73B403D63000000220000000EFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0000000026555A57F8FFFFFFFFE6EAE8FFF0F2F1FFFCFC FCFFE3E6E5FF727673F6575A59CA2B2F2F460000001F0000000AFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0000000026555A57F8FFFFFFFFE6EAE8FFE6EAE8FFE7EBE9FFF3F5F4FFFCFC FCFFCFD1CFFE5E6261F6515452A5191919330000001A00000006FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0008080825555A 57F8FFFFFFFFE6EAE8FFE6EAE8FFE7EAE9FFE7EBE9FFEAEDEBFFF6F8F7FFFAFA FAFFB2B6B3FA585C59F2484C4A7E131313260D0D0D150F0F0F03FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A2A2A23565A58F8FFFFFFFFEAED EBFFEAEDECFFEAEEECFFEAEEECFFEAEEECFFEAEEECFFEFF1F0FFFAFBFAFFF3F4 F4FF919492F6595E5BE14A4A4A59303030213232320F33333301FFFFFF00FFFF FF00FFFFFF00FFFFFF004D4D4D21565A58F8FFFFFFFFEDF0EEFFEEF0EFFFEEF1 EFFFEEF1EFFFEEF1EFFFEDF0EEFFEAEEECFFE7EBE9FFEEF0EFFFFBFCFBFFE3E5 E4FF737775F55B5E5DC05353533354545418FFFFFF00FFFFFF00FFFFFF00FFFF FF006F6F6F1F565B58F8FFFFFFFFE7ECE9FFE8ECEAFFE8ECEAFFE8ECEAFFE6EA E8FFE6EAE8FFE6EAE8FFE5E9E7FFE4E9E7FFF3F5F4FFFCFDFDFFBFC2C0FD555A 58FA5D61614B76767617FFFFFF00FFFFFF00FFFFFF00FFFFFF009292921D565B 59F8FFFFFFFFE9ECEBFFEBEEECFFECEFEEFFEDF0EFFFEEF1EFFFEEF1EFFFEDF0 EFFFF3F5F4FFFDFDFDFFE3E4E3FF6E706FF65D625FB9707575369999990D9999 9901FFFFFF00FFFFFF00FFFFFF00FFFFFF00B3B3B31B575B59F7FFFFFFFFEDF0 EEFFEFF2F1FFF2F4F3FFF4F6F5FFF5F7F6FFF7F8F7FFFCFDFCFFF5F5F5FF9093 92F65C615FDC6D707050BABABA12BCBCBC03FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00D8D8D819575B59F7FFFFFFFFEEF1F0FFF1F4F3FFF5F6 F5FFF8F9F8FFFDFDFDFFFDFDFDFFBABBBAF95B5E5CF067696771D1D1D115DBDB DB06FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00F8F8F817575B59F7FFFFFFFFECEFEEFFEFF2F1FFF8F9F8FFFEFEFEFFD8D9 D8FD626564F665686799B8B8B821FFFFFF0AFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF17575B 59F7FFFFFFFFEEF1F0FFFBFCFCFFECEDECFF7B7D7CF6606463C18F949437FFFF FF0EFFFFFF02FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF17575B59F7FFFFFFFFF7F7 F7FF9FA1A0F65D605EE174777755FFFFFF12FFFFFF05FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF17565B59F7BDC0BFFB5D605EF3686C6A7AE9E9 E918FFFFFF09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF175E6260CC626664A2B6B6B626FFFFFF0EFFFFFF02FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF15FFFF FF17FFFFFF12FFFFFF04FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF06FFFFFF07FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000001600000026000000260000002600000026000000260000 002600000017000000000000001B000000260000002600000026000000260000 0026000000260000001500000000000000000000000000000000000000000202 0223505452D6535755FF535755FF535755FF535755FF565A58F9080808250000 000002020225525654F2535755FF535755FF535755FF535755FF5C615EEC0101 012100000000000000000000000000000000000000000C0C0C22525654F1FCFC FCFFFFFFFFFFFFFFFFFFFFFFFFFF6B6F6DFE16161626000000000C0C0C24565A 58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626665FD0B0B0B20000000000000 000000000000000000000000000017171720525654F1FCFCFCFFDFE3E1FFDFE4 E2FFF8F9F8FF6B6F6DFE1F2020250000000017171722565A58FFFEFEFEFFDFE4 E2FFDFE4E2FFFBFBFBFF626665FD1616161F0000000000000000000000000000 0000000000002222221F525654F1FCFCFCFFDFE3E1FFDFE4E2FFF8F9F8FF6B6F 6DFE292A29240000000022222221565A58FFFEFEFEFFDFE4E2FFDFE4E2FFFBFB FBFF636665FD2222221D00000000000000000000000000000000000000002F2F 2F1D525654F1FCFCFCFFE0E4E2FFE0E4E2FFF8F9F8FF6B6F6DFE343535230000 00003030301F565A58FFFEFEFEFFE0E4E2FFE0E4E2FFFBFBFBFF636665FD2E2E 2E1C00000000000000000000000000000000000000003E3E3E1C535755F1FCFD FDFFE3E7E5FFE3E6E5FFF8F9F9FF6B6F6DFE41424221000000003E3E3E1E565A 58FFFEFEFEFFE3E7E5FFE2E6E4FFFBFCFBFF636665FD3C3C3C1B000000000000 00000000000000000000000000004D4D4D1B535755F1FDFDFDFFE7EAE8FFE6E9 E7FFF9FAFAFF6B6F6DFE4E4F4E20000000004E4E4E1C565A58FFFEFEFEFFD9DE DBFFD4DBD8FFFCFCFCFF636665FD4C4C4C190000000000000000000000000000 0000000000005F5F5F19535755F1FDFDFDFFE2E5E4FFDCE1DFFFFAFBFAFF6B6F 6DFE5D5E5D1F000000005F5F5F1B565A58FFFEFEFEFFDCE1DFFFDBE0DEFFFCFC FCFF636665FD5D5D5D1800000000000000000000000000000000000000007171 7118535755F1FDFDFDFFE3E7E6FFE1E5E3FFFBFBFBFF6B6F6DFE6C6C6C1D0000 000071717119565A58FFFEFFFFFFE2E6E5FFE0E5E3FFFCFDFCFF636665FD7171 7117000000000000000000000000000000000000000087878717535755F1FDFE FDFFE9ECEBFFE6E9E8FFFBFCFCFF6B6F6DFE7D7E7E1C0000000088888818565A 58FFFFFFFFFFE8EBEAFFE6E9E7FFFDFDFDFF636665FD86868615000000000000 00000000000000000000000000009F9F9F15535755F0FEFEFEFFEEF0EFFFE9EC EBFFFCFCFCFF6B6F6DFE9091911B00000000A0A0A017565A58FFFFFFFFFFEDEE EEFFE9ECEBFFFDFDFDFF646765FD9F9F9F140000000000000000000000000000 000000000000BABABA14535755F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF6B6F 6DFEA4A5A51900000000BDBDBD15565A58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF646765FDBABABA130000000000000000000000000000000000000000DBDB DB12555957D4545856FF545856FF545856FF545856FF595D5BFCCACBCA150000 0000DCDCDC14545856F2545856FF545856FF545856FF545856FF656866F4D9D9 D9110000000000000000000000000000000000000000FFFFFF0BF8F8F813F0F0 F014F0F0F014F0F0F014F0F0F014F7F7F713FFFFFF0B00000000FFFFFF0BF7F7 F713F0F0F014F0F0F014F0F0F014F0F0F014F8F8F813FFFFFF0A000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end object ilEditorImages: TImageList Left = 400 Top = 30 Bitmap = { 4C692D00000010000000100000009E9E9EFF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF7C8C8CFF729F9FFF6AAEAFFF36E4 EDFF000000000000000000000000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BEEF2FF69F0F7FF4DF2FAFF46EF F7FF28EBF4FF0000000000000000818181FFFFFFFFFFECECECFFEAEAEAFFEAEA EAFFEBEBEBFFEBEBEBFFEBEBEBFFB4EDF0FF6AF0F7FF3AF4FCFF68F6FDFF6AF6 FDFF3CF2FBFF1EEFF9FF00000000818181FFFFFFFFFFEAEAEAFFEAEAEAFFEBEB EBFFEBEBEBFFECECECFFECECECFF9CEEF2FF4EF2FAFF67F6FDFFB5FAFEFFB8FA FEFF6BF5FDFF22EFFAFF00000000818181FFFFFFFFFFEAEAEAFFEBEBEBFFEBEB EBFFECECECFFECECECFFECECECFF9BEFF3FF4EF2FAFF6AF6FDFFBBFAFEFFBFFB FEFF6EF6FDFF22F0FAFF00000000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFECECECFFEDEDEDFFB1EEF1FF67F1F8FF40F4FDFF71F7FDFF72F7 FDFF43F3FCFF24ECF6FF00000000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFEDEDEDFFEDEDEDFFE0EEEFFF96EFF4FF63F1F8FF46F3FBFF45F3 FBFF5DEFF7FF0000000000000000818181FFFFFFFFFFEBEBEBFFECECECFFECEC ECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFE2EEEEFFB1F0F3FF92F0F5FF9AF0 F5FF779696FF0000000000000000818181FFFFFFFFFFECECECFFECECECFFEDED EDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFF0F0F0FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFECECECFFEDED EDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEDEDEDFFEEEE EEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEE EEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF2F2F2FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEE EEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF2F2F2FFF2F2F2FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF818181FF00000000000000009E9E9EFF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF9E9E9EFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000006B6F6DFF6B6F6DFF6B6F6DFF6B6F 6DFF6B6F6DFF656967FF656967FF000000000000000000000000000000000000 00000000000000000000000000006B6F6DFFCECECEFFCECECEFFCECECEFFCECE CEFFCECECEFFCECECEFFC5C6C6FF616563FF0000000000000000000000000000 0000000000000000000000000000686C6AFFBFC0C0FF959796FF959796FF989C 9AFFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9 A7FFA4A9A7FF929996FF00000000656967FFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4A9A7FF000000005F6361FFBFC0C0FF959796FF959796FFA4A9 A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACCCCFFCACCCCFFCACCCCFFF4F5 F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFBFC0C0FF959796FF959796FFA4A9 A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF00000000575B59FFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACCCCFFD7D8D8FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF00000000535755FFBFC0C0FF9A7A61FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FF9D6B43FF535755FFC9C9C9FFA46534FFEBD8C6FFE8D2 BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2 BEFFE8D2BEFFEBD8C6FFA46534FF535755FFBFC0C0FFA46534FFE3C7AEFFD8B1 8CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B1 8CFFD6AE89FFE0C2A6FFA46534FF535755FFC9C9C9FFA46534FFE3C7ADFFD7B0 8BFFD8B18CFFD7B08BFFD7AF8AFFD6AE88FFD5AC85FFD4A981FFD2A67CFFD0A2 76FFCF9F72FFDDBB9CFFA46534FF535755FFBFC0C0FF9B7658FFDDBB9BFFCE9E 70FFCF9D70FFCE9D6EFFCE9C6EFFCE9C6DFFCE9B6CFFCD9B6BFFCE9A6AFFCD99 69FFCD9968FFDBB694FFA46534FF535755FFA9ABA9FFD7AF89FFCD9B6BFFCD9A 6BFFCD9A6AFFCD9969FFCD9868FFCC9866FFCD9865FFCC9765FFCC9664FFCC95 63FFDEBA9AFF967153FF795D45FF89603EFFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FF86603FFF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000008B6738FF8B67 38FF8B6738FF8A693DFF80714AFF7A7858FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000E6CEB1FFEFDF D0FFECDBC5FFDFC29BFFA08B68FF886E43FF0000000000000000000000000000 0000000000000000000000000000887F6BFF737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706EFF6B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706EFF6B706EFFFCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706EFF6B706EFFFAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706EFF6B706EFFF9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706EFF6B706EFFF9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706EFF6B706EFFF7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFFEFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FFF4F4F4FFEBEBEBFFEBEB EBFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFCECECEFFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC5C5C5FFC9C9C9FFC9C9C9FFC5C5C5FFC5C5C5FFC5C5C5FFC5C5 C5FFC5C5C5FFD6D6D6FF6B706EFF6B706EFFCECECEFFC5C5C5FF9F9F9FFFAFAF AFFFBCBCBCFFC4C4C4FFC8C8C8FFD0D0D0FFA9A9A9FFD2D2D2FFA9A9A9FFD2D2 D2FFB9B9B9FFCACACAFF6B706EFF6B706EFFCDCDCDFFC3C3C3FFA9AAAAFFB4B4 B4FFC2C2C2FFC4C4C4FFC8C8C8FFCBCBCBFFA8A7A8FFD1D1D1FFA7A7A8FFD1D1 D1FFB6B6B7FFCACACAFF6B706EFF6B706EFFDDDDDDFFDCDCDCFFDCDCDCFFDCDC DCFFD5D5D5FFD5D5D5FFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF CFFFCFCFCFFFCACACAFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF0000000000000000000000008B6738FF8B67 38FF8B6738FF8A693DFF80714AFF7A7858FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000E6CEB1FFEFDF D0FFECDBC5FFDFC29BFFA08B68FF886E43FF0000000000000000000000000000 0000000000000000000000000000887F6BFF737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706EFF6B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706EFF6B706EFFFCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706EFF6B706EFFFAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706EFF6B706EFFF9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706EFF6B706EFFF9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706EFF6B706EFFF7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFA1A4A3FFA1A4A2FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FF6B706EFF6B706EFFDCDCDCFFDBDBDCFFDBDCDCFFDCDC DCFFDCDBDCFFDBDCDCFFDCDBDCFFDCDCDCFFDBDCDBFFDCDCDBFF000000FFDBDC DCFFDCDCDBFFDCDCDCFF6B706EFF6B706EFFEFEFEFFFADB0AFFFAEB0AEFFAEB0 AFFFADB0AEFFADB0AFFFADB0AFFFADB0AFFFADB0AFFFEFEEEFFF000000FFEEEF EEFFEFEEEEFFEFEEEFFF6B706EFF6B706EFFFFFFFFFFB6B8B7FFB6B8B7FFB6B8 B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706EFF6B706EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF00000000999999FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF000000000000000000000000818181FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEAEA EAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEAEAEAFFC4C4 C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEAEAEAFFEBEB EBFFEBEBEBFF696969FF696969FF696969FFD2D2D2FFEDEDEDFFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFFC5C5 C5FFC6C6C6FFB0B0B0FF585858FF585858FF585858FFC6C6C6FFC7C7C7FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFF6969 69FFD2D2D2FFECECECFFD2D2D2FF696969FF666969FFECECECFFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFF5858 58FF585858FFB0B0B0FF585858FF6A6A6AFF6A6A6AFFCCD2D2FFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFF6969 69FF696969FF696969FF6A6A6AFF6A6A6AFF6A6A6AFF6A6A6AFFD6D6D6FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFB0B0 B0FF585858FF585858FF585858FF585858FF595959FF626262FF6C6C6CFFDCDC DCFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEDED EDFFEEEEEEFFEEEEEEFFEFEFEFFFD4D4D4FF777777FF858585FF909090FF9D9D 9DFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFC6C6 C6FFC7C7C7FFC7C7C7FFC8C8C8FFC8C8C8FFB5B5B5FF929292FF9E9E9EFFABAB ABFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDED EDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFE0E0E0FFADADADFFBABA BAFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF818181FF0000000000000000959595FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF959595FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000888D 8BFF909593FF00000000000000000000000000000000888D8BFF8C918FFF0000 00000000000000000000000000000000000000000000000000008B908EFFF7F7 F7FF888D8BFF000000000000000000000000000000008D9190FFD0D3D2FF8C91 8FFF000000000000000000000000000000000000000000000000888D8BFFD0D4 D2FFEFF0EFFF8F9492FF000000000000000000000000A7ACAAFFC3C8C6FF8A8F 8DFF0000000000000000000000000000000000000000000000008A8F8DFFB0B5 B3FFF6F7F7FF888D8BFF00000000000000008B908EFFC9CECCFFABAFAEFF888D 8BFF00000000000000000000000000000000000000000000000000000000888D 8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8B6FFCBCECDFF888D8BFF0000 0000000000000000000000000000000000000000000000000000000000008A8F 8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6B5FFB5BAB8FF888D8BFF0000 0000000000000000000000000000000000000000000000000000000000000000 0000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9A8FF888D8BFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B908EFF878C8AFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000848989FFC3C6C5FFAFB2B3FF2C2F9CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000001818 AEFF1616ABFF0606A6FF454AA3FF0202A6FF191AC7FF1717ADFF1818AEFF0000 00000000000000000000000000000000000000000000000000000707A9FF2020 D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1AC9FF2020D1FF1F1FCBFF0A0A A9FF00000000000000000000000000000000000000000606A8FF1F1FD0FF0303 A8FF1415C0FF0101A6FF00000000000000001C1DCDFF1315C0FF0303A8FF1D1D CDFF0606A7FF0000000000000000000000001414ABFF2323D5FF000000000000 00001D1DCEFF0A0AA9FF00000000000000000303A8FF1A1BCAFF000000000000 00002020D1FF1414ABFF00000000000000000D0DABFF1D1DCFFF000000000B0B B5FF2121D3FF0C0CAAFF00000000000000000909AAFF2323D6FF0D0DB8FF0000 00001F1FD1FF1111ABFF00000000000000001313ABFF2727DBFF1F1FD0FF1D1D CEFF0707A8FF000000000000000000000000000000000808AAFF2222D4FF1D1D CFFF1D1DCEFF1313ABFF0000000000000000000000000E0EAAFF1010ABFF1616 ABFF0000000000000000000000000000000000000000000000000D0DAAFF0B0B AAFF0B0BA9FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000979B 9AFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF8A8F8DFF00000000000000000000000000000000878C 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFFF3F3F3FF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEEEE EEFFF6F7F7FFC3C4C3FF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FF898E8CFF898E 8CFF898E8CFF898E8CFF858A88FF00000000000000000000000000000000868B 89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFF959A98FFFAFA FAFFF7F8F8FFE2E4E3FF858A88FF00000000000000000000000000000000868B 89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFFAFAFAFF959A98FFFAFA FAFFE2E3E3FF858A88FF858A88FF00000000000000000000000000000000868B 89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFBFBFFD4D4D4FF969A98FFE2E4 E3FF858A88FF000000000000000000000000000000000000000000000000898E 8CFF868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF000000000000000000000000000000000000000000000000000000000000 00005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C5CFF5E5F5FFF000000000000 0000000000000000000000000000000000000000000001446DFF01446CFF0344 6BFF5B5C5CFF899595FF8A9797FF8A9797FF899595FF5B5C5CFF03446BFF0144 6CFF01446CFF00000000000000000000000001446DFF2484C0FF3E7EA4FF646D 70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E7EFF5E5E5EFF646C6EFF407C A1FF237FB9FF01436CFF000000000000000002466FFF2788C6FF646F71FFF1F1 F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFE0E0E0FFF2F2F2FF646D 6EFF2787C5FF00426AFF000000000000000002466FFF2788C6FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466FFF2687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5B3FFEEEFEFFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466FFF2687C5FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEFEFFFEBEDEDFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2B1FFE8EAEAFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EAEAFFD9DBDBFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DADAFFCACDCCFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BAB9FFB5B9B8FFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002456EFF2687C5FF646866FFFFFF FFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFFFFFFFFFFFFFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002456EFF2687C5FF646866FFFFFF FFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFFFFFFFFFFFFFF646967FF2787 C5FF2886C2FF00426AFF000000000000000002456EFF2687C5FF636D70FFEDEE EDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFEFEFF646967FF2787C5FF2787 C5FF2787C5FF00426AFF000000000000000001436CFF237FBAFF3B7DA7FF646F 73FF686C6AFF686C6AFF686C6AFF686C6AFF686C6AFF3D7CA3FF3D7CA3FF3D7C A3FF227BB3FF01436BFF00000000000000000000000001436CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01436BFF0000000000000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000A0 C4FFADF3FBFF00A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C4FFADF3 FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159FBBFF1BA1BBFF000000000000 0000000000000000000000000000000000000000000000A0C4FFADF3FBFF31E1 F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8F7FF14A1BCFF14A3C1FF0000 00000000000000000000000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2 F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9ECFF69E7F6FF41CEE3FF13A3 C1FF00000000000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2F8FF32E2 F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2E8FF1DD2E8FF36D9ECFF40CD E1FF16A1BDFF00000000000000000000000000A0C4FF79EDFBFF32E2F8FF2CDF F4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2E8FF1DD2E8FF0BC8DFFF6AE5 F3FF1BABC5FF15A0BCFF00000000000000000000000000A0C4FF76EDFBFF04C3 DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EAF9FF05DDF7FF0AC8DFFF07C2 D8FF6FDCEBFF1BA3BFFF0000000000000000000000000000000000A0C4FF76ED FBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0C4FF01A9C4FF6EE1EEFF0FC9 DFFF69E4F2FF1AA4C0FF000000000000000000000000000000000000000000A0 C4FF76EDFBFF00A0C4FF0000000000000000000000000000000000A0C4FF6DE6 F5FF76E2EFFF19A3C1FF00000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF000000000000000000000000000000000000000002AC C8FF88E7F2FF11A2C2FF00000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000EAA CBFF5DDAE9FF23A6C0FF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000043C4 DBFF43C5D8FF0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000066DB EAFF11A6C2FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF6CF3AEFF069A4EFF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000069A4EFF069A4EFF069A4EFF069A4EFF6CF3AEFF6CF3AEFF069A 4EFF00000000000000000000000000000000000000000000000000000000069A 4EFF0C9B8FFF49DEA9FF6AF1AEFF6BF2AEFF73F5B3FF61EFA6FF16D273FF6CF3 AEFF069A4EFF0000000000000000000000000000000000000000069A4EFF45D9 ACFF67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DBA0FF24DBA0FF16D273FF16D2 73FF6CF3AEFF069A4EFF000000000000000000000000069A4EFF46D8A9FF65EF B1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7AFFF16D273FF16D273FF16D2 73FF18D375FF6CF3AEFF069A4EFF00000000069A4EFF30C29DFF60EDB1FF26DF A5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D273FF16D273FF16D273FF16D2 73FF34E28AFF069A4EFF00000000000000000C9F55FF63E9B1FF31E0BAFF17D4 CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DAA1FF23DED9FF16D273FF34E2 8AFF069A4EFF0000000000000000000000000A9D52FF64ECB2FF24D6CDFF0BA1 93FF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF1ED4CCFF34E28AFF069A 4EFF00000000000000000000000000000000069A4EFF46E2BEFF05A699FF069A 4EFF00000000000000000000000000000000069A4EFF34E28AFF069A4EFF0000 000000000000000000000000000000000000069A4EFF37D9B3FF069A4EFF0000 000000000000000000000000000000000000069A4EFF069A4EFF000000000000 000000000000000000000000000000000000069A4EFF3ADDB8FF069A4EFF0000 000000000000000000000000000000000000069A4EFF00000000000000000000 000000000000000000000000000000000000069A4EFF23C7AFFF059D91FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000FA85AFF2CD6C0FF0299 9AFF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000979B9AFF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000 0000000000000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFD5D6D6FF808381FF808381FF808381FF808381FF808482FF0000 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFA6A9A8FF808381FFC8BAAEFFD2BCA6FFD4BAA2FFCDB9A8FF808381FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFD5D7 D6FF808381FFC8B7A8FFD2AC8AFFE7D3BFFFEAD7C5FFD9BA9CFFCBAD90FF8083 81FF000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FF8083 81FFBBAEA3FFCFA985FFF2E6DCFFF7EEE8FFF5ECE4FFECDACAFFD8B28EFFCBAF 97FF808381FF0000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FF8083 81FFD0B8A2FFDFC0A5FFF1E4D9FFF3EAE0FFF2E7DDFFE9D4C1FFDFBEA0FFD0A6 81FF808381FF0000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FF8083 81FFD6BFA9FFE0C1A5FFEEDED0FFF2E5DAFFEDDCCDFFECD9C8FFE8D0BCFFD1A7 80FF808381FF0000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FF8083 81FFC3B5A7FFD0AB89FFE5CAB3FFEBD7C3FFEAD4C1FFEEDDCFFFDABDA3FFCEAF 93FF808381FF0000000000000000868B89FFFFFFFFFFFFFFFFFFFFFFFFFFCDCF CFFF808381FFD1B89FFFD6B391FFDFC5AFFFE3CAB2FFD6BAA0FFD3B497FF8083 81FF737675FF0000000000000000898E8CFF868B89FF858A88FF858A88FF858A 88FF7B807EFF808381FFDCC8B3FFCFAC8BFFD1A880FFD0B399FF808381FFA3A4 A3FFA3A4A3FF6A6E6CFF00000000000000000000000000000000000000000000 0000000000006A6E6CFF808381FF808381FF808381FF808381FF8C8E8DFFB7B8 B8FFA3A4A3FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008C8E 8DFFB7B8B8FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00008C8E8DFF8C8E8DFF828484FF000000000000000000000000000000008083 81FF808381FF808381FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000808381FFC8BA AEFFD4BAA2FFCCB9A7FF808381FF000000000000000000000000000000000000 00000000000000000000000000000000000000000000808381FFC8B7A7FFD1AC 8AFFEAD7C5FFD9B99BFFCBAC90FF808381FF838785FF858A88FF858A88FF858A 88FF8A8F8DFF000000000000000000000000808381FFBBAEA2FFCFA884FFF2E6 DCFFF5ECE4FFECDACAFFD8B18DFFCBB097FF808381FFFFFFFFFFFFFFFFFFFFFF FFFF858A88FF000000000000000000000000808381FFD0B8A2FFDEC0A4FFF1E4 D9FFF2E7DDFFEAD5C3FFDFBFA2FFD0A580FF808381FFEFF0F0FFEFF0F0FFFFFF FFFF02598FFF02598FFF0000000000000000808381FFC2B5A7FFD0AA88FFE8D0 BBFFEEDCCDFFF3E8DEFFDCC1A8FFCEB094FF808381FFC6C7C7FFEFF0F0FF0259 8FFFC6EAEEFF71ADCFFF02598FFF0000000000000000808381FFD1B89FFFD6B3 91FFE6D0BBFFD8BEA6FFD3B597FF808381FFD0D2D1FFEFF0F0FF02598FFFC7EB EFFF6AACD2FF5583A1FF02598FFF00000000828484FFA3A4A3FF808381FFDDC8 B3FFD1A77FFFD1B499FF808381FF939695FFC6C7C7FF02598FFFC7EBEFFF6AAC D2FF5787A4FF02598FFF00000000828484FFA3A4A3FFB7B8B8FF8C8E8DFF8083 81FF808381FF808381FFAFB1B0FFEFF0F0FF02598FFFC5E6EDFF69AACFFF5683 A0FF02598FFF0000000000000000828484FFB7B8B8FF8C8E8DFFFFFFFFFFEFF0 F0FFC6C7C7FFC6C7C7FFC6C7C7FF02598FFFC4E5EDFF649FC8FF5784A0FF0259 8FFF6A8089FF0000000000000000000000008C8E8DFF868B89FFFFFFFFFFEFF0 F0FFEFF0F0FFEFF0F0FFEEEFEFFF395B70FF8AABC2FF5585A3FF02598FFFCADC E7FF848987FF00000000000000000000000000000000868B89FFFDFEFEFFEFF0 F0FFEFF0F0FFEEEFEFFF02598FFF26424CFF36576BFF02598FFFAFC1CCFFEFEF EFFF7F8482FF00000000000000000000000000000000868B89FFF9FAFAFFEFF0 F0FFEFF0F0FFEDEEEEFF000000FF02598FFF96A9B3FFC2C2C2FFCACBCBFFE2E2 E2FF7B7F7DFF00000000000000000000000000000000868B89FFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFFF7F7F7FFE9E9E9FFE2E2E2FFE5E5E5FFEAEAEAFFEFEF EFFF7F8482FF00000000000000000000000000000000898E8CFF868B89FF858A 88FF858A88FF858A88FF848987FF838886FF828785FF838886FF838886FF8388 86FF888D8BFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000595D5BFF535755FF535755FF535755FF5357 55FF535755FF535755FF535755FF545856FF5A5E5CFF626564FF666968FF676A 68FF636765FF6B6E6DFF00000000535755FFA6A6A6FF858585FF797979FF6E6E 6EFF656565FF5D5D5DFF595959FFEDEFEFFFEFF1F1FFF3F4F4FFF5F6F6FFF5F6 F6FFECEEEDFF7D817FFF00000000535755FFADADADFF8C8C8CFF7F7F7FFF7575 75FF6C6C6CFF646464FF606060FFEDEFEFFFF2F3F3FFF7F8F8FFFAFBFBFFFBFB FBFFF9F9F9FF989B9AFF00000000535755FFBABABAFF959595FF898989FF7E7E 7EFF757575FF6E6E6EFF686868FFEEEFEFFFF2F4F4FFF9F9F9FF9292D7FF3E3E BCFFFAFAFAFFA1A3A2FF00000000535755FFBBBBBBFF9D9D9DFF949494FF8989 89FF7F7F7FFF767676FF707070FFEEF0F0FFEFF1F3FF6565C7FF5151C4FF1515 ACFFD3D4EDFF8889A2FF00000000535755FFBDBDBDFFA0A0A0FF979797FF8F8F 8FFF868686FF7E7E7EFF767676FFE1E3ECFF3C3CB9FF6161CDFFA7A7ECFF3030 BCFF2828B7FF2122B1FF0101A5FF535755FFBEBEBEFFA2A2A2FF9A9A9AFF9191 91FF888888FF808080FF6A6A7EFF2121B0FF6565D2FF8888E7FF8E8EE8FF9595 EAFF9696EAFF9A9AEBFF0101A5FF535755FFBEBEBEFFA4A4A4FF9C9C9CFF9393 93FF8B8B8BFF64648AFF1111A6FF5E5ED5FF6969E1FF4848DBFF4A4ADBFF4C4C DBFF4D4DDBFF8D8DE8FF0303A6FF535755FFBEBEBEFFA7A7A7FF9E9E9EFF9696 96FF8D8D8DFF1616A1FF3636C5FF5656DDFF2D2DD5FF2525D3FF1A1AD1FF1010 CFFF1B1BD2FF6E6EE2FF0404A6FF535755FFBEBEBEFFA9A9A9FFA1A1A1FF9898 98FF8F8F8FFF73738BFF0E0EA2FF2D2DC4FF3636D7FF0808CEFF0C0CCEFF0C0C CEFF0E0ECFFF5151DCFF0101A5FF535755FFBEBEBEFFAAAAAAFFA3A3A3FF9A9A 9AFF929292FF898989FF797986FF2425ACFF2424BCFF3838D6FF4141D9FF3A3A D4FF3C3CD2FF3D3DD2FF0000A5FF535755FFBEBEBEFFAAAAAAFFA5A5A5FF9D9D 9DFF959595FF8F8F8FFF828282FF5E5F64FF4849BBFF1B1BB5FF3535D3FF0404 A6FF1E1EB0FF1314A5FF0B0BAAFF535755FFBEBEBEFFAAAAAAFFA9A9A9FFA1A1 A1FF999999FF6F6F6FFF888A89FFD0D2D0FFE3E5E4FF6B6CC4FF1111ACFF0C0C A9FFE4E6E5FF868887FF00000000535755FFBEBEBEFFABABABFFAFAFAFFF8586 85FF8B8F8DFFC5C9C7FFD2D6D4FFD5D9D7FFD6DAD8FFD7DBD9FF8688C5FF4345 B6FFD4D8D6FF717573FF00000000535755FFC3C3C3FF979898FF909392FFBBC1 BEFFC1C6C3FFC3C8C6FFC3C9C6FFC4C9C6FFC4C9C6FFC4C9C6FFC4C9C6FFC4C9 C6FFC1C7C5FF5F6361FF00000000595D5BFF686B69FF545856FF555957FF565A 58FF565A58FF565A58FF565A58FF575B59FF575B59FF575B59FF575B59FF575B 59FF565A58FF5D615FFF00000000000000000000000000000000000000000000 0000874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF000000000000 0000000000000000000000000000000000000000000000000000000000008D54 2CFFC1A18CFFDBC9BDFFF4EFEBFFF4EFEBFFDBC9BDFFC1A28CFF8D542CFF0000 00000000000000000000000000000000000000000000874A20FFA77A5BFFF0E8 E3FFD0B9A9FFAC8265FF96603BFF96603BFFAC8265FFD1BAAAFFF0E9E4FFA77B 5CFF874A20FF00000000000000000000000000000000AA7E61FFF2EBE7FFA678 59FF9C6947FFDECEC2FFF7F3F0FFF1EAE6FFD0B8A7FFA06F4DFFAD8264FFF3ED E8FFA87C5DFF0000000000000000000000008E552DFFF1EAE5FFA57858FF874A 20FFB0886CFFFEFDFDFFE9DED6FFF6F2EFFFFFFFFFFFDCCABDFF986038FFB389 6BFFF2EBE6FF8D552DFF00000000874A20FFC3A590FFD0B9A9FF874A20FF874A 20FF9F6E4BFFA06F4DFF945B32FFA87A59FFFFFFFFFFFDFCFBFFA16D46FF9F6A 43FFDAC6B7FFC6A994FF874A20FF874A20FFDDCCC0FFAC8265FF874A20FF8B50 27FF90562DFF955C34FF99623AFFC2A189FFFFFFFFFFF3ECE8FFA5724BFFA673 4DFFC3A186FFE1D2C6FF894C23FF874A20FFF5F0EDFF935C36FF8A4F25FF9056 2DFF955D34FF9A633BFFB58B6DFFFCFBF9FFFEFEFEFFC19D82FFAC7A54FFAD7C 56FFB78D6CFFF7F3EFFF884B21FF874A20FFF5F0EDFF945E38FF8E532AFF945B 33FF99623AFF9F6942FFF3EDE8FFFFFFFFFFD0B5A0FFB07F5AFFB2835EFFB485 60FFBD9475FFF8F3F0FF884B22FF874A20FFDDCCC0FFAF866AFF91582FFF9760 38FF9D6740FFA77651FFE4D4C8FFE5D6CAFFB48662FFB68763FFB98B67FFBA8E 6AFFD1B29BFFE6D7CCFF8A4E24FF874A20FFC3A590FFD3BCADFF945C33FF9A64 3CFFA16C45FFA97852FFC8A88FFFCCAD94FFB78965FFBB8F6BFFBF9370FFC196 73FFE7D7C9FFCFB4A0FF884B21FF000000008E552DFFF2EBE6FFB18769FF9D67 40FFA36F49FFB28462FFFFFFFFFFFFFFFFFFBD926FFFC19672FFC59B78FFD6B7 9DFFF7F1EDFF8F572FFF000000000000000000000000AB8163FFF3EEE9FFB78F 72FFA5724CFFB38765FFFFFFFFFFFFFFFFFFC19774FFC59B78FFD7B9A0FFF9F5 F1FFB2886BFF00000000000000000000000000000000874A20FFAC8264FFF3ED E9FFDDC9BAFFC7A58BFFBB9171FFC19979FFD5B79FFFE9DACDFFF8F3EFFFB58D 71FF8B4F26FF0000000000000000000000000000000000000000000000008F55 2EFFCBAF9BFFE5D6CBFFF8F4F1FFF9F5F2FFE8DBD1FFD3B9A6FF915831FF0000 0000000000000000000000000000000000000000000000000000000000000000 0000874A20FF894D23FF884C22FF884C22FF8B4F25FF884B21FF000000000000 000000000000000000000000000000000000000000008F9391FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF8F9391FF00000000000000000000000000000000858A88FFF1F1F1FFEBEB EBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9 E9FF858A88FF000000000000000000000000874A20FF858A88FFE7E7E7FFD7D7 D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5D5FFD5D5D5FFDADADAFFDCDC DCFF858A88FF874A20FF00000000874A20FFDDBB9CFF777C7AFFD9D9D9FFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBCBCFFBCBCBCFFBFBFBFFFC0C0 C0FF777C7AFFDDBB9CFF874A20FF874A20FFDDBB9CFF6A5B4EFFC9C9C9FF9C9C 9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB9CFF86522CFF86512BFF8651 2BFF86512BFF86512BFF86512BFF86522CFF86522CFF86522CFF86522CFF8652 2CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFDDBB9CFF874A20FF874920FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874920FF00000000000000006A6E6DFFCCCDCDFF6569 68FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2B1FF6E7271FFB2B3B3FF6C70 6FFF0000000000000000000000000000000000000000727675FFC7C9C8FF797E 7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAFAEFF7C807FFFB7B8B7FF7679 78FF0000000000000000000000000000000000000000858988FFC9CBCAFF8388 85FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0C0FF7C807FFFE2E3E3FF8B8E 8DFF000000000000000000000000000000008C908FFF858988FFF6F6F6FF999C 9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCECDFF989B9AFFEBEBEBFF9699 98FF000000000000000000000000000000008C908FFFFAFAFAFF949897FF999C 9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E9DFF989B9AFF8B8E8DFFFFFF FFFF8F9392FF0000000000000000000000008C908FFF919493FFADB0AFFF0000 000000000000909492FF9DA09FFF989C9AFF0000000000000000000000007B7E 7DFF989B9AFF000000000000000000000000898D8BFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF898E8CFF0000000000000000858A88FFFDFDFDFFFEFEFEFFFEFE FEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFAFAFAFFFAFA FAFFF9F9F9FF888D8BFF0000000000000000858A88FFFDFDFDFFD6BEA8FFD7BF A9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1 ABFFF8F8F8FF888D8BFF0000000000000000858A88FFFEFEFEFFD7BFA9FFAF97 81FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF9781FFAF9781FFAF9781FFDAC2 ACFFF8F8F8FF888D8BFF0000000000000000858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3ADFFDBC3ADFFDBC3ADFFDBC3 ADFFF8F8F8FF888D8BFF0000000000000000858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4AEFFDCC4AEFFDCC4AEFFEBEB EBFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFD9C1ABFFAF97 81FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF9781FFAF9781FFDDC5AFFFECEC ECFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFDAC2ACFFDAC2 ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDEC6B0FFEEEE EEFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFDAC2ACFFDBC3 ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDFC7B1FFDFC7B1FFF0F0 F0FFF8F8F8FF888D8BFF0000000000000000858A88FFFBFBFBFFDAC2ACFFAF97 81FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFE0C8B2FFF2F2 F2FFF7F7F7FF888D8BFF0000000000000000858A88FFFBFBFBFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8B2FF000000FFE1C9B3FFF4F4 F4FFF7F7F7FF888D8BFF0000000000000000858A88FFFAFAFAFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF5F5F5FFF6F6F6FFF6F6 F6FFF7F7F7FF888D8BFF0000000000000000858A88FFF9F9F9FFDBC3ADFFB098 82FFB09882FFB09882FFB09882FFE0C8B2FF000000FFF7F7F7FFF8F8F8FFF7F7 F7FFF7F7F7FF888D8BFF0000000000000000858A88FFF9F9F9FFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF7F7F7FFF9F9F9FFF8F8 F8FFF7F7F7FF888D8BFF0000000000000000858A88FFF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8F8FF000000FFF8F8F8FFF8F8 F8FFF8F8F8FF888D8BFF0000000000000000898E8CFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8DFF00000000FFFFFF00BBBBBBFF9B958AFFA09990FF948A 7CFF886F4FFF8B6738FF896A40FF7F7253FF858A88FF858A88FF858A88FF858A 88FF858A88FFBBBBBBFFFFFFFF00FFFFFF00858A88FFA59C8FFFB2ADA8FFBAA3 8FFFBAA38FFFBAA38FFFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF858A88FFFFFFFF00FFFFFF00858A88FFBBBBBBFFBBBBBBFF948A 7CFF9A7441FF9F7844FFBAA38FFFBAA38FFFCCBBADFF874A20FFB7B7B7FFB7B7 B7FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFBFBFBFFF874A20FFBAA38FFFCCBBADFF874A20FFBFBFBFFFBFBF BFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FF874A20FF874A 20FF874A20FF874A20FF874A20FFBAA38FFFCCBBADFF874A20FF874A20FF874A 20FF874A20FF874A20FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FF874A 20FFBAA38FFFBAA38FFFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBB ADFF874A20FF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFF874A20FFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBBADFF874A 20FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFF874A20FFBAA38FFFB5957AFFB5957AFFCCBBADFF874A20FFC8C8 C8FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFD4D4D4FFD4D4D4FF874A20FF874A20FFD4D4D4FFD4D4D4FFD4D4 D4FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFFFFFFFF858A88FFFFFFFF00FFFFFF00BBBBBBFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FFBBBBBBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00A465341DA769 3A9FA76A3ADEA56736F6A76939E5A76A3ABCA4653453A4653405FFFFFF00FFFF FF00FFFFFF00A4653479A4653410FFFFFF00FFFFFF00A4653550A66838F6C090 68FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB9875FF4A56737F0A4653458FFFF FF00A4663566A46534FFA465340FFFFFFF00A4653429A66939F5D3AD8CFFDCBD 9DFFDDBEA1FFE5CBB4FFE9D3BFFFEEDDCCFFF0E2D5FFE7D2BFFFAF774BF5A567 36C0AB7143F7A46635FCA465340EFFFFFF00A769399BC09069FDC59872FFA86B 3CFFA46635FFA76A3AFCB7855DF3D9BBA1FEF1E4D8FFF2E6DBFFF3E8DDFFCEA7 88FDEAD8C8FFA76A3AF9A465340DFFFFFF00A66838F3AB7041FFA96C3CFEA76A 3AF5A4653475A4653419A4653445A66938CDB98861F5EBDBCDFFF5EBE2FFF6EE E6FFF6EEE6FFA76A3AFAA465340BFFFFFF00A46535FEA76A3AFBC791689DA567 37E6A4653423FFFFFF00FFFFFF00FFFFFF00A4653460A46635FFE9D7C7FFEBD8 C6FFF5ECE3FFA66A3AFAA465340AFFFFFF00A46534FCB3794C7ECF9D762BBB83 5713A4653402FFFFFF00FFFFFF00A4653404A66838C4D0AC8FFAF6EEE7FFF2E6 DBFFF6EEE6FFA66A3AFBA4653409FFFFFF00A465340DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00A46534A0A46534FFAD7447F8AF774CF7AF77 4CF7AF784CF7A46534FFA4653408FFFFFF00A46534F9A46534FEA46534FEA465 34FDA46534FCA46534FBA46534B9A465341DA4653418A4653418A4653418A465 3418A4653418A465341CFFFFFF00FFFFFF00A46534FCF5EDE5FFF6EDE5FFF5EC E4FFD7B79CFDA66837E0A4653410FFFFFF00FFFFFF00FFFFFF00FFFFFF00D5A4 7E1ACD997239A46534FCA465340CFFFFFF00A46635FCF6EEE6FFEBD7C4FFEAD9 C9FFA46534FEA465346AFFFFFF00FFFFFF00FFFFFF00A465340BA56635E9C995 6C8DB77F53C2A46534FFA4653405FFFFFF00A56737FDF6EEE6FFF5ECE3FFF5ED E4FFE6D2C1FFB0794DF5A66938CAA4653436FFFFFF00A465346AA96B3CEDB67C 4FFFA76A3AFEA56837FAFFFFFF00FFFFFF00A66838FDF1E4D8FFD4B295FEF4E9 E0FFF3E8DDFFEDDCCCFFD2AD8FFEB0784CF5A56635FBA66939FFA66939FEA96D 3DFFB0784CFFA76A3AA8FFFFFF00FFFFFF00A56737FEB7845BF7A56736D4B17A 4EF4E3CAB4FFECDAC9FFE7D1BCFFE3C9B0FFDEBEA0FFD2AB88FFCEA582FFD3AE 8EFFA66838F5A465342AFFFFFF00FFFFFF00A46534FFA5673693FFFFFF00A465 3454A66737EEB58055F3CEA684FFD8B697FFDBB999FFD3AC8AFFC2946DFCA668 38F6A466355BFFFFFF00FFFFFF00FFFFFF00A46534A2A4653401FFFFFF00FFFF FF00A4653405A4653453A76A3ABEA66938E9A46635FAA76A3AE4A76B3BAAA465 3424FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000BA8545FFB9843FFFB9843FFFBA8545FF0000000000000000000000000000 00000000000000000000000000000000000000000000B98544AFB98443E90000 0000B78140FFE9D4B4FFE9D4B4FFB78140FF00000000B98443E9B98544AF0000 000000000000000000000000000000000000B98544AFCCA26CFFD4B080FFB983 43FFCCA470FFC9984EFFC9984EFFCCA470FFB98343FFD4B080FFCCA26CFFB985 44AF00000000000000000000000000000000B78242ECD3AE7CFFE7CBA4FFEAD4 B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4B2FFE7CBA4FFD3AE7CFFB782 42EC000000000000000000000000000000000000002FBA8547FFCE9949FFDAB2 76FFC9944BFFBE8943FFBE8943FFC9944BFFDAB276FFCE9949FFBA8546FF0000 002F000000000000000000000000B98442FFB6803EFFCEA673FFDBAE6EFFCB95 4BFFB88344FF6E4F2A616E4F2A61B88344FFCD974AFFDCAE6DFFD0A772FFB981 3CFFBE843FFF0000000000000000C5995FFFF1DCBBFFECD2ACFFD6A152FFC18C 49FF70502A620000000C0000000C704F2861C88D44FFDFA24CFFEACEA6FFF1D7 B2FFD79A51FF0000000000000000C38F4EFFE2B572FFDEB06AFFDBA658FFC595 55FF926935300000000000000000AA7333436A8399FFCD9F5FFF298DE2FF2B8F E1FFB48B5AFF3081D29100000000B98545FFB78242FFC8934EFFDFAB5EFFE4C4 94FFB68245DAB8813F3CBE823B2561809CFF37A8EFFF399DE3FF4CCFFDFF4AC7 F8FF3D9EE1FF45AAE4FF3982CB9F0000003300000033B78242FFE4B163FFEBC6 8EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399CE1FF4CCEFBFF3FB0EEFF40B1 EFFF4FCFFCFF429EDCFF16324E3100000000B98443E9DDBB8CFFEEC486FFE8B4 66FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCEFBFF3FAFEDFFFAB66DFFC775 1FCE41B1EFFF52D0F9FF3F92D5FF00000000AA7A3FBED2A76FFFD7A561FFB882 41FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCFFCFF40B0EDFFC39F7BFF9876 53CB42B1EEFF52D0F9FF3F92D5FF0000000000000023AA7A3EBFB68243ED0000 0033B58142FFF5C378FFFCC371FFAD7E49FF3B9EE3FF4ECFFBFF41B0EDFF42B1 EDFF50CFFAFF439EDCFF1B3D5F520000000000000000000000230000002F0000 0000B88445FFC89451FFCE934AFF6D8192FF40A9EAFF429EDDFF52D0F8FF52D0 F8FF439EDCFF48AAE2FF3980C8B6000000000000000000000000000000000000 0000000000330000003300000033000000332D73BAAF1B3D60523F93D4FF3F93 D4FF102438413578BAC300000024000000000000000000000000000000000000 0000000000000000000000000000000000000000001F00000008000000330000 0033000000040000002400000000FFFFFF00C17D4460C88B4DBBC88C4FEEC88C 4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B368 3C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F4 EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB94 65F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE1 C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFB6CBC2FF58A5 D8FF85B1DBFF469DD0FF2B95D15EFFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3 CEFFFBE3CDFFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFAFE3F1FF77BEE7FFB4D2 F0FFE5F3FFFFACD2EFFF488CC7E8FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFBE4 D0FFFCE4CFFFFCE3CDFFFAE1CAFFF9DDC4FFAFCDC9FF81D5EEFFB2E3F9FF8BC0 E7FFAED3F6FFC4E0FCFF669FD3F7FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFCE6 D4FFFDE7D3FFFCE4D1FFFBE3CDFFBED4D0FF7DD4EEFFC4F6FDFF6CDDF6FF6DCA EDFF63A3D7FF6499C8FE5192CA26FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7 D6FFFDE7D5FFFDE6D4FFBDD6D5FF79D3EEFFC7F7FDFF5FDCF5FF5BE2F7FF7AD6 F2FF51A1E0FFAD8560F9FFFFFF00FFFFFF00C68849F7F9F4EDFFFEE8D8FFFEE8 D8FFFEE8D7FFB0C6CCFF77CBE7FFC7F7FDFF5EDCF5FF5AE1F7FF7BD4F1FF4B99 DBFFD2DFE9FFC68245F7FFFFFF00FFFFFF00C68447F7F9F3ECFFFEE8D6FFFEE8 D7FFB3C6CCFF76B9D6FFC2F6FDFF63DFF7FF5DE2F8FF79D3F0FF4998DAFFE2D5 C8FFFAF2EAFFC68042F7FFFFFF00FFFFFF00C58245F7F8F2EBFFFEE7D6FFA6B6 BFFF7AB6D5FF90B7D1FF55C9E4FF5BDFF5FF78D0EDFF519BD9FFE1D6CDFFFBE1 C9FFFBF7F2FFC57C3FF7FFFFFF00FFFFFF00C58042F7F8F1E8FFFEE5D5FF4389 AAFFE0F2FFFF549AD8FF1A7ABEFF4998C5FF488CC2FFDAD2CDFFFBE0C9FFFBE1 C8FFFDFAF7FFC1763BF7FFFFFF00FFFFFF00C47C40F7F7F0E6FFF8B455FF2E66 82FF94C7F9FF91C9F9FF4185C9FF2668A6FFD2A865FFF7B251FFF7B24FFFF7B2 4FFFFCF9F5FFBF6F36F7FFFFFF00FFFFFF00C1783CF7F7EDE3FFFDC26EFF1842 57FF2B6187FF4C89BCFF709FB3FFE3C99AFFFFD695FFFFD594FFFFD493FFFBBE 65FFFBF7F4FFBB6731F7FFFFFF00FFFFFF00BF7138F5F5EBDFFEFDBF68FFFCBD 67FFFBBE65FFFCBE64FFFCBE64FFFCBD62FFFBBD63FFFBBC61FFFCBE60FFFCBC 62FFFDFBF8FDB9642DF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7ECDFFDF6EB DEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFFFAF2EAFFFCF7F3FFFCF8 F4FDFEFEFDF0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB6631EDBA66 30F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF7B9652EF7B9642EF7B964 2EEFB7622CBDB7622E63FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFC39D9DFF584545FF261D1DFF634F 4FFFE9BCBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFF7D6464FF000000FFCCA4A4FFE5B9 B9FFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF685353FF000000FF000000FF000000FF9C7D 7DFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBDFF000000FF787878FFFEFE FEFFEDEDEDFF2A2A2AFF353535FF685353FF000000FF000000FF000000FF9C7D 7DFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFF767676FF000000FFC9C9 C9FF8A8A8AFF000000FFC2C2C2FFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7FF1C1C1CFF2A2A 2AFF000000FF7D7D7DFFFEFEFEFFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B2FF0000 00FF000000FFE9E9E9FFFFFFFFFFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF959595FF0000 00FF000000FFC9C9C9FFFFFFFFFFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5FF000000FF6565 65FF161616FF424242FFF3F3F3FFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFF000000FF4D4D4DFFFFFFFFFFF8F8F8FF565656FF0D0D0DFFE3E3 E3FFABABABFF000000FF969696FFEABDBDFF796060FF000000FFD9AFAFFFEABD BDFFEABDBDFF000000FF4D4D4DFFFFFFFFFFA8A8A8FF000000FFA3A3A3FFFFFF FFFFF6F6F6FF4B4B4BFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5FF606060FF2A2A2AFF6D6D 6DFFFEFEFEFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFEABDBDFFEABDBDFFEABD BDFFEABDBDFFEABDBDFFEABDBDFFFFFFFFFF898989FF000000FFDEDEDEFFFAFA FAFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFEABDBDFFEABDBDFFEABD BDFFEABDBDFFEABDBDFFEABDBDFF727272FF000000FF000000FF000000FFAAAA AAFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFAD8B8BFF000000FF6E5757FFE9BC BCFFD9AFAFFF261D1DFF302424FF727272FF000000FF000000FF000000FFAAAA AAFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFE8BBBBFF6B5555FF000000FFB894 94FF7E6565FF000000FFB18F8FFFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFD4ABABFF191212FF261D 1DFF000000FF725B5BFFE9BCBCFFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFEABDBDFFA38383FF0000 00FF000000FFD5ACACFFEABDBDFFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFEABDBDFF896D6DFF0000 00FF000000FFB89494FFEABDBDFFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEABDBDFFEABDBDFFC39D9DFF000000FF5C49 49FF130D0DFF3C2F2FFFDFB4B4FFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFF000000FF4D4D4DFFEABDBDFFE3B8B8FF4F3E3EFF0B0707FFD0A8 A8FF9D7E7EFF000000FF896E6EFFFFFFFFFF848484FF000000FFEDEDEDFFFFFF FFFFFFFFFFFF000000FF4D4D4DFFEABDBDFF9A7B7BFF000000FF967878FFEABD BDFFE2B7B7FF443535FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF002E2E2EB02C2C2CFF2B2B2BFF2B2B2BFF2B2B 2BFF2B2B2BFF2B2B2BFF2B2B2BFF2B2B2BFF2B2B2BFF2B2B2BFF2A2A2AFF2A2A 2AFF2A2A2AFF2B2B2BFF2D2D2DB02C2C2CFF656565FF626363FF626262FF6464 64FF656565FF636364FF616162FF616161FF636363FF646464FF616161FF6161 61FF616161FF626262FF2A2A2AFF2C2C2CFF444341FF3E3D3BFF3C3B38FF4342 3FFF000000FF403F3DFF393836FF393835FF3F3E3BFF000000FF9A9A9BFF3B3A 37FF3B3A37FF9A9A9AFF262626FF2A2B2BFF656361FF585655FFFFFFFFFF615F 5EFF000000FF9E9D9CFFFFFFFFFFFFFFFFFFA7A6A5FF000000FFFCFCFBFF5653 52FF555352FFFBFBFAFF232324FF2B2B2BFF4D4C4BFFFCFDFDFFF7F7F7FF4847 45FF000000FFF7F5F5FF3F3E3DFF3F3E3DFFF5F4F4FF000000FF8C8C8BFFFEFE FFFFFDFEFEFF8B8C8AFF262626FF2E2E2EFF383737FF2A2828FFF8F8F8FF2F2E 2EFF000000FFFEFEFEFF2C2B2BFF2C2B2BFFFEFEFEFF000000FF383737FF3332 32FF323131FF373636FF2C2C2CFF313131FF000000FF000000FFF2F2F2FF0000 00FF000000FFF4F4F4FF000000FF000000FFF4F4F4FF000000FF000000FF0000 00FF000000FF000000FF303030FF313131FF110F0FFF060404FFF9F9F9FF0403 03FF000000FFEAEAEAFF000000FF000000FFEAEAEAFF010101FF0E0D0DFF0402 02FFFDFDFDFF070606FF2F2F2FFF303030FF2C2B2BFF232222FFFFFFFFFF2423 23FF030303FF757474FFFDFDFDFFFDFDFDFF757474FF030404FF262525FFFFFF FFFFF9F9F9FF201F1FFF2E2E2EFF2F2F2FFF272525FF242222FF211E1EFF2623 23FF000000FF222020FF1C1A1AFF1C1A1AFF222020FF000000FF252222FF1A18 18FF969696FF201D1DFF2E2E2EFF2E2E2EF22F2F2FFF2F2F2FFF2F2F2FFF3030 30FF313131FF2F2F2FFF2D2E2EFF2D2E2EFF2F2F2FFF313131FF2F2F2FFF2C2C 2CFF2A2A2AFF2D2D2DFF2E2E2EF2000000300000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 0033000000330000003300000030FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000BBB5 A4FFA8A195FFB4A88D2D000000000000000000000000BDB6A2FFB2A68FFF0000 00000000000000000000FFFFFF00FFFFFF005173D2FF0648FEFF0042FFFFBCB7 A5FF938873FF2154E4FF0447FFFF0748FCFF0043FFFFBDB7A4FF978B6EFF0045 FFFF0748FEFF5173D2FFFFFFFF00FFFFFF000138F1FF9DB3FBFF96AFFFFFC0BA A4FF80714EFF93A2D6FF9BB2FDFF9CB2FAFF97B0FFFFC1BBA4FF81714CFF98B1 FFFF9DB4FCFF0138F1FFFFFFFF00FFFFFF000020E7FF526FEFFF0016E5FF000A B1FF000CB3FF0019E9FF0018E3FF0018E2FF0018E6FF000BB1FF000BB2FF0016 E7FF526FEFFF0020E7FFFFFFFF00FFFFFF00A39C89FFFFFFFDFFF2EDDEFFF4F0 E1FFF6F2E3FFF7F2E1FFF6F0DFFFF6F0DEFFF6F1E0FFF5F1E2FFF4F0E1FFF2EE DEFFFFFFFDFFA39C89FFFFFFFF00FFFFFF00948F8BFFFFFFFEFFE6E6E2FFE9E9 E6FFF0F0ECFFCCCAC6FFEFEEEBFFF0EFEBFFF0F0ECFFEEEEEAFFEAE9E6FFE7E6 E3FFFFFFFEFF948F8BFFFFFFFF00FFFFFF008E8B88FFFEFEFDFFE8E7E6FFEEEC EBFF595959FF2A2A2BFFFBF9F8FF5E5E5DFF5E5E5EFF585859FFC7C6C5FFE9E8 E7FFFEFEFDFF8E8B88FFFFFFFF00FFFFFF008B8886FFFEFEFEFFEBEBEAFFEFEF EEFFDFDFDEFF616060FFFFFFFFFF3A3B3BFFFFFFFFFFFDFDFBFFF2F2F1FFEDED ECFFFFFFFFFF8C8886FFFFFFFF00FFFFFF00888682FFFFFFFFFFEFEEEEFFF1F0 F0FFFBFAFAFF5D5D5EFFFFFFFFFF626262FF575555FF606060FFEDEDECFFF5F4 F5FFF6F5F6FF878582FFFFFFFF00FFFFFF0085827FFFFFFFFFFFF2F2F1FFF3F3 F2FFFCFCFBFF5C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFF585858FFCECDCEFFE7E6 E5FFB2B0AEFFA8A6A4FFFFFFFF00FFFFFF00827F7DFFFFFFFFFFF5F6F6FFF5F5 F6FFFCFCFCFF585858FFDAD9D9FF6A6A6AFF717171FF464545FF9F9C9AFFA09D 9BFFC1C0BEFFB9B7B5FFFFFFFF00FFFFFF007E7C79FFFFFFFFFFFAFAFAFFF9F9 F9FFFBFBFBFFFFFFFFFFFFFFFFFFDADADAFFD2D2D2FFC0BEBDFFEFEFEFFFEDEC ECFFD6D6D3FFB2B0AEFFFFFFFF00FFFFFF007D7976FFFFFFFFFFFFFFFFFFFDFD FDFFFEFEFEFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF9F9D9AFFE7E7E6FFCFCE CDFFE9E8E7FFABA9A7FFFFFFFF00FFFFFF007C7977FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C4C3FFC1BFBEFFD4D3D1FFDFDE DEFFFFFFFFFFA7A5A3FFFFFFFF00FFFFFF0075726FC07A7773FF767370FF7673 6FFF76736FFF76736FFF767370FF76736FFF94918FFFA6A4A2FFA4A2A0FFA3A1 9EFFA3A19FFFA3A19FF2FFFFFF00FFFFFF000000002300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000030FFFFFF0000000000000000000000000000000000B26E 1795B06C13F7B06B11FFB06A11FFB06B11FFB06C13F7B26E1795000000000000 00000000000000000000FFFFFF000000000000000000B3701946B06A11FFD99C 55FFFAC18AFFFFCE9AFFFFCF9AFFFFCE9AFFFAC18AFFD99C55FFB06A11FFB370 19460000000000000000FFFFFF0000000000B3701946B57019FFF1B67BFFE6D3 B2FFBCE5E9FFADECFFFF63808BFFADECFEFFBCE4E8FFE5D2B1FFF1B67AFFB570 19FFB370194600000000FFFFFF0000000000B06B12FFEEB375FFD9DAC7FFB6F3 FFFFB8EFFCFFB8ECF7FFB8EBF6FFB7EAF4FFB4E9F5FFB2ECFCFFD7D7C3FFEEB2 74FFB06B12FF00000000FFFFFF00B26F1895D4934BFFE4CDA9FFBBF5FFFF5D52 4FFF95A8ADFFC2F2FAFFBEECF4FFBCEAF2FFBCE9F2FFBAEAF4FFB7EFFEFFE4CB A8FFD4934BFFB26F1895FFFFFF00B06D15F8EBAD6DFFC8E9EBFFC4F4FFFFA9C8 CCFF615652FFABC9CDFFC8F4FCFFC4EFF6FFC2ECF3FFC2ECF4FFC0EFF9FFC7E8 EAFFEBAD6DFFB06D15F8FFFFFF00B16D14FFF1B173FFC7FAFFFFC9F3FBFFCDF6 FDFFAECACEFF5E5351FFAEC9CEFFCCF6FCFFC8F0F6FFC7EEF4FFC8F1F9FFC7F9 FFFFF1B173FFB16D14FFFFFFFF00B16D14FFEEAD6AFF7F959EFFCEF6FCFFCEF4 F9FFD4FCFFFFB5D0D4FF5A504EFFADC5C8FFCEF4F9FFCDF2F7FFCEF6FCFF7F95 9EFFEEAD6AFFB16D14FFFFFFFF00B16D15FFE9A663FFD3FFFFFFD2F6FDFFD2F5 FAFFD7FBFFFF544947FFB3CCCEFFD6FAFFFFD2F5FAFFD1F3F9FFD2F6FDFFD3FF FFFFE9A663FFB16D15FFFFFFFF00B16D16F9DD9A52FFD9F0ECFFD6FBFFFFD6F8 FBFFD8F9FCFFDBFDFFFFDAFCFFFFD8F8FBFFD6F6F9FFD6F7FAFFD6FBFFFFD9F0 ECFFDD9A52FFB16D16F9FFFFFF009E6316A9C98435FFDDB98BFFDCFFFFFFDBFB FFFFDBF9FDFFDCFAFDFFDCF9FDFFDBF8FCFFDBF9FCFFDBFBFFFFDCFFFFFFDDB9 8BFFC98435FF9E6316A9FFFFFF000000001EB16D15FFD48D42FFDECCACFFE2FF FFFFE1FFFFFFE2FFFFFFE3FFFFFFE2FFFFFFE1FFFFFFE2FFFFFFDECCACFFD48D 42FFB16D15FF0000001EFFFFFF0000000000754A126BB46F18FFD0893BFFDCB3 80FFE4F4EDFFEBFFFFFF9AABB2FFEBFFFFFFE4F4EDFFDCB380FFD0893BFFB46F 18FF754A126B00000000FFFFFF00000000000000000E764A126BB26E16FFC27C 2BFFD08638FFD4893AFFD4893AFFD4893AFFD08638FFC27C2BFFB26E16FF764A 126B0000000E00000000FFFFFF0000000000000000000000000E000000339D63 18AAB16E18F9B26F18FFB26F18FFB26F18FFB16E18F99D6318AA000000330000 000E0000000000000000FFFFFF00000000000000000000000000000000000000 001E00000031000000330000003300000033000000310000001E000000000000 00000000000000000000FFFFFF00FFFFFF000000000000000000000000000000 00003C86CFB05698D8FF5698D8FF3D86CFEE0000000000000000000000000000 00000000000000000000FFFFFF00FFFFFF000000000000000000000000000000 00003882CDFFDAF8FFFFDAF8FFFF3882CDFF0000000000000000000000000000 00000000000000000000FFFFFF00FFFFFF000000000000000000000000000000 00002E70B2AB90C6EFFFAFDDFAFF327AC4DB0000000000000000000000000000 00000000000000000000FFFFFF00FFFFFF003D86CFB05297D8FF589BDAFF589B DAFF5698D8FFB3E3FCFFBCE9FFFF5698D8FF5A9CDAFF5498D8FF3D86CFB00000 00000000000000000000FFFFFF00FFFFFF003A83CDFFBFF6FFFFB9F0FFFFBCF0 FFFFC1F1FFFF56CBFFFF56CBFFFFC2F1FFFFC0F2FFFFC2F6FFFF3A82CDFF0000 00000000000000000000FFFFFF00FFFFFF003A83CDFFB6F6FFFFB1EEFFFF50CB FFFF20BAFFFF27BCFFFF27BCFFFF24BBFFFF1DBAFFFFB9F3FFFF3980CCFF0000 00000000000000000000FFFFFF00FFFFFF00397ABDBD4F96D8FF68ADE2FFB0EF FFFF2DC0FFFF34C2FFFF36C3FFFF34C2FFFF2DC0FFFFB2F1FFFF3E83CDFF3A81 CCD2448CD2FF4087CFEEFFFFFF00FFFFFF000000002300000033529BDAFFA7F0 FFFF36C6FFFF3CC8FFFF3EC8FFFF3DC8FFFF38C6FFFF5ED5FFFF9EEAFFFF79C7 F0FFAAFAFFFF3C84CEFFFFFFFF00FFFFFF000000000000000000519BDAFF9EEF FFFF3ECAFFFF43CBFFFF45CCFFFF44CCFFFF40CBFFFF5ED7FFFF96EAFFFF76C7 F0FFA1FAFFFF3D84CEFFFFFFFF00FFFFFF003F86CFC04C96D8FF5EADE2FF93EE FFFF45CEFFFF49CFFFFF49D0FFFF49CFFFFF46CFFFFF95F0FFFF3E83CDFF397C C4DB3D84CEFF3F85CDF1FFFFFF00FFFFFF003D82CDFF8DF6FFFF76E6FFFF58D9 FFFF7BE8FFFF7CE9FFFF7CE9FFFF7BE7FFFF61DDFFFF8BF1FFFF3B7FCCFF0000 002A0000003301030430FFFFFF00FFFFFF003D81CCFF83F2FFFF55DAFFFF6BE5 FFFF4E98D8FF4F9CDAFF4F9BDAFF59ADE2FF80EEFFFF7FF0FFFF3C81CCFF0000 00000000000000000000FFFFFF00FFFFFF003E82CDFF7CF6FFFF79F1FFFF7CF5 FFFF3D80CCFF00000033000000334896D7FF7BF4FFFF7BF6FFFF3E82CDFF0000 00000000000000000000FFFFFF00FFFFFF003F84CDF24897D8FF4A9CDAFF4897 D8FF3E81C8DD00000000000000003A7ABCBD4897D8FF4898D8FF3B7BBEC00000 00000000000000000000FFFFFF00FFFFFF000000003000000033000000330000 00330000002B0000000000000000000000230000003300000033000000230000 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00979B9AD0858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DAB0000 0000000000000000000000000000878C8AFDFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFD5D6D6FF808381FF808381FF808381FF808381FF808482FF0000 0000000000000000000000000000878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFA6A9A8FF808381FFC8BAAEFFD2BCA6FFD4BAA2FFCDB9A8FF808381FF7074 735C000000000000000000000000868B89FDFFFFFFFFEFF0F0FFEFF0F0FFD5D7 D6FF808381FFC8B7A8FFD2AC8AFFE7D3BFFFEAD7C5FFD9BA9CFFCBAD90FF8083 81FF6B6F6D310000000000000000878C8AFDFFFFFFFFEFF0F0FFC6C7C7FF8083 81FFBBAEA3FFCFA985FFF2E6DCFFF7EEE8FFF5ECE4FFECDACAFFD8B28EFFCBAF 97FD808381FF0000000000000000878C8AFDFFFFFFFFEFF0F0FFEFF0F0FF8083 81FFD0B8A2FFDFC0A5FFF1E4D9FFF3EAE0FFF2E7DDFFE9D4C1FFDFBEA0FFD0A6 81FE808381FF0000000000000000868B89FDFDFEFEFFEFF0F0FFEFF0F0FF8083 81FFD6BFA9FFE0C1A5FFEEDED0FFF2E5DAFFEDDCCDFFECD9C8FFE8D0BCFFD1A7 80FD808381FF0000000000000000868B89FBF9FAFAFFEFF0F0FFEFF0F0FF8083 81FFC3B5A7FFD0AB89FFE5CAB3FFEBD7C3FFEAD4C1FFEEDDCFFFDABDA3FFCEAF 93FB808381FF0000000000000000868B89FBFFFFFFFFFFFFFFFFFFFFFFFFCDCF CFFF808381FFD1B89FFFD6B391FFDFC5AFFFE3CAB2FFD6BAA0FFD3B497FF8083 81FF737675E20000000000000000898E8CA3868B89FF858A88FF858A88FF858A 88FF7B807EFF808381FFDCC8B3FFCFAC8BFFD1A880FFD0B399FF808381FFA3A4 A3FFA3A4A3FF6A6E6CD800000000000000000000000000000000000000000000 0000000000006A6E6C89808381FF808381FF808381FF808381FF8C8E8DFFB7B8 B8FFA3A4A3FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008C8E 8DFFB7B8B8FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00028C8E8DFF8C8E8DFF828484FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E9E629D9D9DE89B9B 9BF999999992FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E9E1B9C9C9CE4E1E1E1FFD2D2 D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B9B54B5B5B5FFE6E6E6FF9494 94EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989855B2B2B2FFD6D6D6FF9191 91DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0096969602949494C5CBCBCBFFD2D2D2FFC9C9 C9FFD2D2D2FFC6C6C6FF858585E834B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3 E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AFA3FFD5D5D5FFBBBBBBFFA6A6 A6FFA0A0A0FF848484E48282826236B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE FFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA17CFFBCA595FF839DA5FC7BAE BEEC6395A58E81818117FFFFFF0035AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0 F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BEA3FFD58E64FFEEFBFEFFFAFD FFF936AFDAD4FFFFFF00FFFFFF0036AADAF2F1FAFDFF94DEF5FF93DCF4FFACBF BFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6FBFF7EC5EAFF4AA3DFFF5E97 C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEBE8FFF1F9FDFFF0F9FDFFFFFF FFFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF4F4 F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0F7FF72DDF6FF68DBF5FFE9F9 FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FCFEFFC8F2FCFFB9EFFBFF94DF EFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDDF6FF61DAF5FF57D7F4FFE7F8 FDFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FAFDFFB3EDFAFFA4E9F9FF95E6 F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DAF5FF54D6F3FF47D3F2FFE8F9 FDFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFFA1E9F9FF91E5F8FF81E1 F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0F2FF2ECDF1FF26CBF0FFCAF2 FBFF3594DAF7FFFFFF00FFFFFF00338ED9E6DCF0FAF0A7DDF4FD9EDBF4FF96DA F3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2F1FF6CD0F1FF69CFF1FFC2EA F8FE338ED9F0FFFFFF00FFFFFF002C86D8702D88D8A62D87D8EA2D88D8F72D88 D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88 D8F12C86D893FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000007B 001D000000010000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000005870A311399 28DB0E901AA60000000100000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000A870F33179E30DB37C7 71FF2DBC5DF80A8D159B00000000000000000000000000000000000000000000 00000000000000000000000000000000000005870A31169D2EDA37C770FF37C7 71FF18A031DB0A870F330000000000000000000000000A870F330A8D149B0000 00010000000000000000000000000A870F33179E30DB37C771FF37C771FF179E 30DB0A870F3300000000000000000000000005870A31169D2EDA2EBD5EFA0E90 1AA6008000020000000005870A31169D2EDA37C770FF37C771FF18A031DB0A87 0F33000000000000000000000000000000000A8D159B2DBC5DF837C871FF2DBC 5DF80D9019A30A890F34179E30DB37C771FF37C771FF179E30DB0A870F330000 000000000000000000000000000000000000000000010D9019A32DBC5DF837C8 71FF2DBC5DF819A133E337C771FF37C771FF179E30DB0A870F33000000000000 00000000000000000000000000000000000000000000000000010D9019A12CBA 5AF937C871FF37C871FF37C771FF18A031DB0A870F3300000000000000000000 0000000000000000000000000000000000000000000000000000000000010D90 19A12CBA5AF937C771FF18A031DB0A870F330000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00010D9019A3149927DC0A870F33000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000001007B001D00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000500B66C0500 B66C0000000000000000000000000000000000000000000000000500B6690500 B66900000000000000000000000000000000000000000200B5680C00CFE90D00 D0EB0500B66D000000000000000000000000000000000200B56B0C00CFE90D00 D0EB0500B86B000000000000000000000000000000000200B5680C00CFE91400 E6FF0D00D0EB0500B66D00000000000000000200B56B0C00CFE91400E6FF0D00 D0EB0500B86B00000000000000000000000000000000000000000300B6650C00 CFE91400E6FF0D00D1EB0500B66D0300B7660C00CFE91400E6FF0D00D1EB0500 B66D000000000000000000000000000000000000000000000000000000000500 B66C0C00CFEA1400E6FF0C00D0EA0C00D0EA1400E6FF0C00CFEA0500B66C0000 0000000000000000000000000000000000000000000000000000000000000000 00000200B56B0C00D0E81400E6FF1400E6FF0D00D0EB0500B66D000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000200B56B0C00D0E81400E6FF1400E6FF0D00D0EB0500B66D000000000000 0000000000000000000000000000000000000000000000000000000000000500 B66C0C00CFEA1400E6FF0C00D0EA0C00D0EA1400E6FF0C00CFEA0500B66C0000 00000000000000000000000000000000000000000000000000000300B7660C00 CFE91400E6FF0D00D1EB0500B66D0300B6650C00CFE91400E6FF0D00D1EB0500 B66D00000000000000000000000000000000000000000200B5680C00CFE91400 E6FF0D00D0EB0500B66D00000000000000000200B56B0C00CFE91400E6FF0D00 D0EB0500B86B000000000000000000000000000000000200B5680C00CFE90D00 D0EB0500B66D000000000000000000000000000000000200B56B0C00CFE90D00 D0EB0500B86B00000000000000000000000000000000000000000500B6690500 B6690000000000000000000000000000000000000000000000000500B6690500 B669000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000BB874700BB874700BB874700BB874800BB87 4B00BB871A00BB871E00BB871F00BB871E00B98419EFB67E0EFFB47B09FFB47B 08FFB47B09FFB57B09FFB47B09FFBB874700BB874700BB874700BB874700BB87 4A00BB871900BB871D00BB871F00BA851C00B67E0EFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFBB874700BB874700BB874700BB874700BB87 4900BB874D00BB871C00BB871F00BA851B00B47B09FFFFFFFFFFFFEFCDFFFFEF CEFFFFF3D2FF9E937EFFFFF3D2FFBB874700BB874700BB874700BB874600BB87 4700BB874C00BB871B00BB871E00BA851B00B47B09FFFFFFFFFFFFF0CFFFFFF0 D0FFFFF5D4FFA19682FFFFF4D4FFBB874700BB874700BA8545B1B98442FFBA85 4500BB874A00BB871A00BB871D00B9851A00B57D0CFFFFFFFFFFFFFAE2FFFFFA E0FFFFFDE0FFA59D89FFFFFBDDFFBB874700BA854500B88240FFECD7B7FFB680 3EFFB9844700BB861800B98519ADB78012FFB47C0AFFB17600FFB07500FFAC85 37FFA6A095FFA8A091FFA59C8CFFBA8545EEB88240FFB47D3AFFEED8B7FFECD3 AFFFB68141FFB9844900B78110FFFAEBD7FFF7E6CFFFF6E6CDFFF8E8D1FFB276 00FFFFFFF6FFA5A093FFFFFEE7FFB98442FFF4DEBBFFF1DAB5FFE7C592FFD8A2 52FFEDCB9AFFB88346FFB67F0CFFF8E8D1FFE2B777FFE2B777FFF7E6CEFFB276 00FFFFFFFAFFA59F93FFFFFEE9FFAB7A3FBFB88241FFB47E3DFFE5B265FFE7B4 67FFB68243FF00000033B78110FFFBEBD7FFF2D7B0FFF2D6AFFFFBE9D1FFB877 00FFFFFFFEFFB1A495FFFFFFEEFF0000002300000033B88343FFF5C57AFFB682 43FF00000033BB861800AA7915BDBB800DFFBD7C01FFBD7700FFBF7600FF887E 4EFF2285D8FF2080CEFF167BC8FFBB874700BB874700AB7B40C1B98545FF0000 0033BB874A00BD87170000000023000000333C99F2FF92FBFFFF93F7FFFF97F7 FFFF9BF6FFFF9EF6FFFF9EF6FFFFBB874700BB8747000000002300000033BC87 4600BF864500C4850A00CB840200449FF1004796E0FF9AF6FFFF46CDF4FF49CD F3FF4BCDF2FF4BCDF1FF4BCDF1FFBB874700BB874700BB874700BB874600BF86 4200C884360042A0F300499FEA004D9DE0004C95D8FF9CF6FFFF68DAF6FF6ADA F6FF6BDBF6FF6BDBF6FF6BDBF6FFBB874700BB874700BB874700BD874500C385 3B0042A0F1004D9EE200509DDD00519CDA004D97D8FF9FFAFFFF8AEEFFFF8BEE FFFF8CEFFFFF8DEFFFFF8DEFFFFFBB874700BB874700BB874700BD874500C685 3800459FEB004F9DDD00519DDA00519DDA00488EC7C04895D5FF4290D2FF3D8D D0FF378BCEFF3287CCFF2B85C9FF000000000000000000000000000000000000 0000000000000000000000000000000000000000002300000033000000330000 0033000000330000003300000033B98419EFB67E0EFFB67C09FFB67B07FFB67B 08FFB57B08FFB67B08FFB67B08FFB57B08FFB67B08FFB67B08FFB57B08FFB67C 09FFB67E0EFFB98419EFBB871E00B67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB67E0EFFBA851C00B57C09FFFFFFFFFF44C3FFFF49C5FFFF47C6 FFFFE3B57EFF46C7FFFF46C7FFFFE3B57EFF46C7FFFF46C7FFFFE1B47EFF40C4 FFFFFFFFFFFFB57C09FFBA851B00B57B09FFFFFFFFFFDDB17CFFE0B47EFFE0B6 82FFDEB786FFE0B784FFE0B785FFDFB988FFE0B786FFE0B786FFDEB887FFDCB4 82FFFFFFFFFFB57C09FFBA851B00B47B08FFFFFFFFFFFFF5D7FFFFF6D9FFFFF9 DFFFD8B88FFFFFFFE9FFFFFFECFFDBBC98FFFFFFEDFFFFFFECFFDBBB97FFFFFF EAFFFFFFFFFFB57D0DFFBA851C00B47B08FFFFFFFFFFFFF7DFFFFFF8E1FFFFFB E7FFD9BC99FFD2AB5BFFB07600FFB07600FFB07400FFB07300FFB07400FFAF73 00FFB07600FFB57D0EFFB9841AE7B47B08FFFFFFFFFFD4B38CFFD5B58FFFD7B9 94FFDCC1A3FFB27802FFFDE9C8FFFBE5C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFBE5C2FFFFEBCDFFB78114FFB47B08FFFFFFFFFFFFFBEBFFFFFCECFFFFFF F3FFDCC3A7FFB27903FFFBE9CFFFDA8802FFF0EEECFFB2ADA7FFB2ADA7FFF0EE ECFFDA8802FFFBEAD1FFB67F12FFB47B08FFFFFFFFFFFFFDF2FFFFFEF3FFFFFF FAFFDCC4ACFFB27904FFF8E1BAFFDD9419FFEEE9E9FFEFE6DEFFEFE6DEFFEEE9 E9FFDD9419FFF8E2BCFFB68012FFB47B08FFFFFFFFFFD4B999FFD5BA9AFFD7BE A0FFDCC7B1FFB27904FFF5D8AAFFE19E2FFFE7CAA1FFEBE2E0FFEBE2E0FFE7CA A1FFE19E2FFFF6D9ADFFB68014FFB47A08FFFFFFFFFFFFFFFDFFFFFFFDFFFFFF FFFFDDC8B3FFB27904FFF4D39CFFE4A641FFE3A43AFFE3A133FFE2A132FFE3A4 3AFFE3A641FFF4D49EFFB68114FFB47B09FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFDBC7B6FFB17804FFF2CD90FFE6AD4FFFEACFA9FFFFFFFFFFFDFFFFFFE8CE A7FFE6AD4EFFF3CE93FFB68115FFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB27907FFF3CA89FFEBB65CFFF2EDEDFF7F7978FFF1E9E2FFEEE9 E9FFEAB55BFFF3CC8BFFB68116FFB78219F2B67E0EFFB47B09FFB47A07FFB47B 09FFB67E0EFFB57F12FFF6CC8AFFF3C275FFF9FCFFFF8B8D91FFF9F9F9FFF4F8 FCFFF2C174FFF6CD8BFFB78218FF000000300000003300000033000000330000 003300000033A87919B9B78218FFB68114FFB88010FFB9810FFFB87F0EFFB67E 0FFFB68013FFB78218FFB7831CF2000000000000000000000000000000000000 0000000000000000002200000033000000330000003300000033000000330000 0033000000330000003300000030B98419EFB67E0EFFB67C09FFB67B07FFB67B 08FFB57B08FFB67B08FFB67B08FFB57B08FFB67B08FFB67B08FFB57B08FFB67C 09FFB67E0EFFB98419EF00000000B67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB67E0EFF00000000B57C09FFFFFFFFFF44C3FFFF49C5FFFF47C6 FFFFE3B57EFF46C7FFFF46C7FFFFE3B57EFF46C7FFFF46C7FFFFE1B47EFF40C4 FFFFFFFFFFFFB57C09FF00000000B57B09FFFFFFFFFFDDB17CFFE0B47EFFE0B6 82FFDEB786FFDFB683FFDFB683FFDEB786FFDFB683FFDFB683FFDDB684FFDBB3 7FFFFFFFFFFFB57B09FF00000000B47B08FFFFFFFFFFFFF5D7FFFFF6D9FFFFF9 DEFFD7B58BFFFFF9DFFFFFF9DFFFD7B58BFFFFF9DFFFFFF9DFFFD7B58AFFFFF8 DBFFFFFFFFFFB47B08FF00000000B47B08FFFFFFFFFFFFF7DFFFFFF8E1FFFFFB E5FFD6B78FFFFFFBE6FFFFFBE6FFD6B78FFFFFFBE6FFFFFBE6FFD5B78EFFFFFA E3FFFFFFFFFFB47B08FF00000000B47B08FFFFFFFFFFD4B38CFFD5B58FFFD7B8 92FFD8BA95FFD7B893FFD7B893FFD8BA95FFD7B893FFD9BA93FFDABB95FFD9B9 90FFFFFFFFFFB67C07FF00000000B47B08FFFFFFFFFFFFFBEBFFFFFCECFFFFFF F0FFD7BA96FFFFFFF1FFFFFFF1FFD8BB97FFFFFFF2FFFFFFF2FFE8C896FFFFFF F2FFFFFFFFFFC38501FF00000000B47B08FFFFFFFFFFFFFDF2FFFFFEF3FFFFFF F7FFD7BB9AFFFFFFF8FFFFFFF8FFDBBE9BFFFFFFF8FF7B85CBFF0319AAFF061B A9FF071DAFFF655464FF00000000B47B08FFFFFFFFFFD4B999FFD5BA9AFFD6BC 9EFFD8BFA1FFD7BD9EFFD8BE9EFFE4C9A2FF6968A6FF263DC6FF6B85FFFF728B FFFF6D87FFFF324ACCFF1D30B394B47A08FFFFFFFFFFFFFFFDFFFFFFFDFFFFFF FFFFD7BEA0FFFFFFFFFFFFFFFFFFEACFA5FF041AACFF5877FFFF5876FFFF5473 FEFF5877FFFF5E7BFFFF1D2EADFFB47B09FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFD6BDA2FFFFFFFFFFFFFFFFFFEACFA8FF061BABFFA8BAFFFFFFFFFFFFFFFF FFFFFFFFFFFFACBDFFFF1B2DACFFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF071EB1FF3E63FEFF3D61FBFF3A5E F9FF3D61FBFF4366FDFF1E30ADFFB78219F2B67E0EFFB47B09FFB47A07FFB47A 08FFB47B08FFB47A08FFB67C07FFC18403FF635467FF2139C7FF385FFBFF3961 FEFF3960FAFF283EC1FF1E2E9BAC000000300000003300000033000000330000 00330000003300000033000000330000003300000033182AA1A92132AEFF2232 ADFF2233ADFF1F2E9BAC0000001E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000001E000000330000 0033000000330000001E00000000B9A697EFB7A495FFB6A393FFB6A393FFB6A3 93FFB6A393FFB6A393FFB6A393FFB6A393FFB6A393FFB7A494FFB7A595FFB5A2 92FFB4A191FFBBA99AFFB8A696B0B7A494FFE3DDD7FFE1D9D4FFE0D9D3FFE0D9 D3FFE0D9D3FFE0D9D3FFE0D9D3FFE0D9D3FFE1D9D4FFE3DCD7FFB39F8EFFFFFF FFFFFFFFFFFFFFFFFFFFB6A393FFB5A394FFF2EDE8FFF2E9E2FFF1E9E1FFF1E9 E1FFF1E9E1FFF1E9E1FFF1E9E1FFF1E9E1FFF2E9E2FFF2ECE7FFB19D8DFFF6F2 ECFF73706DFFF9F4EEFFB6A393FFB5A69BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2A194FFE8DF D4FFE8DED2FFE9DFD3FFB7A495FFB87F38FFB2772EFFAF7329FFAE7229FFAE72 29FFAE7229FFAE7229FFAE7229FFAE7229FFAF7329FFB2762DFFB67B31FFB7A6 9BFFB7A596FFB7A596FFAA988BC0B67F3CFFFFF4D8FFFFEED1FFFFEDD0FFFFED D0FFFFEDD0FFFFEDD0FFFFEDD0FFFFEDD0FFFFEED1FFFFF4D7FFB67C36FF0000 0033000000330000003300000023B57E3BFFFFF1D4FFF6D3A8FFF5D3A7FFF5D3 A7FFF5D3A7FFF5D3A7FFF5D3A7FFF5D3A7FFF6D3A8FFFFF1D4FFB57D38FF0000 0000000000000000000000000000B67F3CFFFFF4D8FFFDE5C3FFFDE5C2FFFDE5 C3FFFDE5C3FFFDE5C3FFFDE5C3FFFDE5C2FFFDE5C3FFFFF4D8FFB67F3BFF0000 0000000000000000000000000000B87F38FFB2772EFFAF732AFFAE732AFFAE73 2AFFAE732AFFAE732AFFAE732AFFAE732AFFAF732AFFB2772EFFB87F38FF0000 0000000000000000000000000000B5A59BFFFFFFFFFFFBFBFCFFFBFBFCFFFBFB FCFFFBFBFCFFFBFBFCFFFBFBFCFFFBFBFCFFFBFBFCFFFFFFFFFFB5A59BFF0000 0000000000000000000000000000B5A393FFFFFFFFFFF9F5F0FFF9F5F0FFF9F5 F0FFF9F5F0FFF9F5F0FFF9F5F0FFF9F5F0FFF9F5F0FFFFFFFFFFB5A393FF0000 0000000000000000000000000000B6A394FFB19D8CFFAF9A89FFAE9A89FFAE9A 89FFAE9A89FFAE9A89FFAE9A89FFAE9A89FFAF9A89FFB19D8CFFB6A394FF0000 0000000000000000000000000000B5A292FFFFFFFFFFF5ECE5FFF5ECE5FFF5ED E6FFF5EDE6FFF5EDE6FFF5EDE6FFF5ECE5FFF5ECE5FFFFFFFFFFB5A292FF0000 0000000000000000000000000000B5A393FFFFFFFFFFF3E8DFFFF3E8E0FFF3E9 E0FFF3E9E0FFF3E9E0FFF3E9E0FFF3E8E0FFF3E8DFFFFFFFFFFFB5A393FF0000 0000000000000000000000000000B6A494F2B5A393FFB5A292FFB5A292FFB5A2 92FFB5A292FFB5A292FFB5A292FFB5A292FFB5A292FFB5A393FFB6A494F20000 0000000000000000000000000000000000300000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000300000 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004B4B4CEF444344FFB9B4B3FFB9B4 B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8B6FFBCB9B7FFBCB9B8FFBCB9 B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00414042FF59595AFFFAF4F1FFFAF4 F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6F3FFFCF8F5FFFCF9F7FFFDFB F9FF646365FF414042FFFFFFFF00FFFFFF003F3E40FF616062FFFDFAF9FFCFB6 9CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB79DFFD0B79EFFD0B89FFFFEFD FDFF616062FF3F3E40FFFFFFFF00FFFFFF003D3C3DFF5D5C5EFFFDFCFBFFFBF9 F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7F5FFF9F6F4FFF8F4F2FFF9F6 F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003B3A3BFF5A595BFFF7F3EEFFF7F3 EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1EDFFF5F0EBFFF4EFE9FFF3ED E7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF00383739FF565557FFF1EAE2FFB8A2 8BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A18AFFB7A08AFFB6A089FFEDE5 DCFF565557FF383739FFFFFFFF00FFFFFF00363537FF535254FFE8DED4FFE8DD D0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DBCFFFE6DBCEFFE6DACDFFE6DA CFFF535254FF363537FFFFFFFF00FFFFFF00333335FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF333335FFFFFFFF00FFFFFF00313032FF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF313032FFFFFFFF00FFFFFF002E2D30FF464549FF464549FFCDCD CDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6D6FFD3D3D3FF272629FF2423 26FF464549FF2E2D30FFFFFFFF00FFFFFF002A292BFF403F42FF403F42FFA7A7 A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAEAEFFAEAEAEFF414042FF2727 28FF444346FF2A292BFFFFFFFF00FFFFFF00252426FF39383BFF39383BFF9999 99FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF3F3E41FF2524 26FF58575AFF252426FFFFFFFF00FFFFFF00222224ED2A2A2DFF323135FF8B8A 8BFF29282BFF201F21FF909090FF909090FF909090FF909090FF343336FF201F 21FF4E4D51FF212023FFFFFFFF00FFFFFF001F1F252F1D1D1FEC1C1B1EFF7575 75FF787878FF787878FF787878FF787878FF787878FF787878FF1A191BFF1919 1BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00186FAB174345D3D63A3A CFB25353D418FFFFFF00FFFFFF00FFFFFF004B4B4CEF444344FFB9B4B3FFB9B4 B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6B5FF34B6DEFF446AC0FF1B1B CEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00414042FF59595AFFFAF4F1FFFAF4 F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6E9FF36AFD4FF1E2020FF1D2B 85FF05079AFF3A394FFFFFFFFF00FFFFFF003F3E40FF616062FFFDFAF9FFCFB6 9CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3DBFF242B2DFF0B1C21FF11A0 CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF003D3C3DFF5D5C5EFFFDFCFBFFFBF9 F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF27363BFF0E171AFF1598C1FF57A6 BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003B3A3BFF5A595BFFF7F3EEFFF7F3 EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF151819FF178BB0FF3DA2C1FF8F8B 88FF464546FF3B3A3BFFFFFFFF00FFFFFF00383739FF565557FFF1EAE2FFB8A2 8BFF979D92FF71D8F7FF34565FFF1D1D1DFF117390FF2199BCFF5E5449FF9F9A 94FF555456FF383739FFFFFFFF00FFFFFF00363537FF535254FFE8DED4FFCCD0 C9FF84DCF7FF54808CFF252525FF12617AFF1CA6D1FF666867FF827B74FFDDD1 C7FF535254FF363537FFFFFFFF00FFFFFF00333335FF4F4E51FF4A5156FF67C6 E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F36FF252426FF484749FF4F4E 51FF4F4E51FF333335FFFFFFFF00FFFFFF00313032FF494B4FFF46ADCEFF1582 A5FF262626FF0E3845FF0CABDDFF173641FF1D1C1DFF3D3D3FFF4B4A4DFF4B4A 4DFF4B4A4DFF313032FFFFFFFF00FFFFFF002E2D30FF298FB2FF1695BDFF2528 29FF18343DFF0EADDFFF2E5E6CFF424242FF959595FFD3D3D3FF272629FF2423 26FF464549FF2E2D30FFFFFFFF00FFFFFF004E606CFF2C9ABDFF242C2FFF2131 36FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAEAEFFAEAEAEFF414042FF2727 28FF444346FF2A292BFFFFFFFF00FFFFFF0088A1AFFFB0CAD6FF2C3A3EFF0B96 C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F9FFF9F9F9FFF3F3E41FF2524 26FF58575AFF252426FFFFFFFF00567181049DBCCAFF7AB8CCFF3C92AEFF1F6E 89FF161517FF181719FF8A8A8AFF909090FF909090FF909090FF343336FF201F 21FF4E4D51FF212023FFFFFFFF006279867E364246FF44778DFB252D34FF7575 75FF787878FF787878FF787878FF787878FF787878FF787878FF1A191BFF1919 1BFF1D1C1FFF1F1F21EFFFFFFF004864725A36546523FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004753BC504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF2A8C59F604743AAB04733A0CFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFFB7E1CBFF5AAB82F904743AE104733A2DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFFBBE3CEFFABDCC3FF84C6A4FE107A43F504733A65FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF0473 3AFF04763BF7B6E0CBFF6FC499FF91D2B1FF9CD4B7FF318F5FF604743BAC0473 3A0CFFFFFF00FFFFFF00FFFFFF0004733AFFA7DBC0FFAADCC2FFADDDC5FFAFDE C6FFB0DEC7FFB0DEC7FF64C191FF61C18FFF73C89DFF9FD9BBFF5AAB81FA0574 3AE104733A2DFFFFFF00FFFFFF0004733AFFA3D9BDFF54B985FF58BB88FF5BBC 8BFF5CBD8BFF5CBE8CFF5CC18DFF5AC28DFF55C28AFF58C38CFF8CD4AFFF7AC3 9CFE147C46F504733A65FFFFFF0004733AFF9CD7B9FF3BAF74FF33AC6EFF2BA9 68FF2FAC6BFF3DB678FF49BE82FF50C389FF4DC488FF49C284FF44BE80FF6DCA 9BFF89CEAAFF308F5EF604753B9D04733AFF7ECAA3FF069A4EFF069A4EFF069A 4EFF07A052FF09A757FF0BAE5BFF0EB25FFF17B866FF1FBA6CFF26BA6FFF55C6 8DFF76C99EFF268956F504753B9D04733AFF7ECAA3FF069A4EFF069A4EFF069C 4FFF08A454FF0BAC5AFF0DB35EFF0EB962FF0FBC64FF1CBF6CFF67D29CFF5DBB 8BFE0E7A42F504733A65FFFFFF0004733AFF7ECAA3FF7ECAA3FF7ECAA3FF7ECC A4FF7FD1A7FF81D5AAFF0EB761FF10BF66FF34CB7FFF78DAA8FF3EA671F90476 3BE104733A2DFFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF0473 3AFF04783CF781D6ABFF11BA64FF52D392FF73D7A5FF1E8B53F504763CAC0473 3A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF81D7ABFF6CD5A0FF58C18BFE0A7940F504743A65FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF7BD3A6FF36A16AF804763CE104733A2DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF18844DF504763BAB04733A0CFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004753BC504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743AE8FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFAEDEC6FFAADCC2FFA4DABEFF9FD8BBFF9AD6B7FF93D3B2FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DFC7FF5DBD8CFF54B985FF49B57DFF3EB076FF8FD1AFFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC7FF5EBE8DFF55BA86FF4AB57EFF3FB176FF8ACFACFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DFC7FF5EBE8DFF54B985FF49B57DFF3EB076FF85CDA9FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733AFF04733AFF04733AFF0476 3BF7AFDEC6FF5BBC8BFF52B884FF47B47CFF35AD70FF7FCBA4FF04763BF70473 3AFF04733AFF04733AFF04753BC504733A65278956F6ACDCC4FFB2DFC8FFB0DE C7FFACDDC4FF58BD89FF4EBB84FF43B87CFF0FA458FF7FCEA5FF7ECDA4FF7ECC A4FF78C79FFF18824BF504733A65FFFFFF0004743BAC4DA478F89ED7BAFF61C0 90FF5BC18DFF55C18AFF3AB978FF11AD5EFF0BAB59FF0AAA59FF0CA958FF68C7 97FF349A65F804743BABFFFFFF00FFFFFF0004733A0C04743AE173BF98FE87D2 ACFF56C38CFF30BA74FF0CB15DFF0DB45FFF0DB45FFF0DB35EFF4EC589FF55B7 84FE04753BE104733A0CFFFFFF00FFFFFF00FFFFFF0004733A2D0B773EF68FD3 B0FF5BC891FF0DB45FFF0FB962FF0FBC65FF10BD65FF32C57BFF71CE9FFF0A78 3FF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65238A 56F578D2A5FF1CBD6BFF11C067FF12C56AFF1FC973FF78DBA8FF1E8952F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000475 3BAC3DA36FF969D59EFF12C469FF14CB6EFF6CE0A5FF3FA872F904763CABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04763BE15DBF8DFE4CD18DFF4ED590FF5FC592FE04763CE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0E7A42F674D1A2FF75D3A3FF0E7B42F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743AE8FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DEC7FFABDCC3FFA6DABFFF91D2B1FF7ECAA3FF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC8FF5FBE8DFF55BA86FF37AE71FF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC7FF5FBE8DFF55BA86FF41B278FF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DEC7FF5DBD8CFF54B985FF47B47CFF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733AFF04733AFF04733AFF0476 3BF7ADDDC5FF59BC89FF50B882FF34AD6FFF069A4EFF7ECAA3FF04763BF70473 3AFF04733AFF04733AFF04753BC504733A65278956F6AADBC2FFAFDEC6FFADDD C5FFAADCC2FF56BD88FF4DBA82FF1FAA63FF08A253FF7FCEA5FF7ECDA4FF7ECC A4FF78C79FFF18824BF504733A65FFFFFF0004743BAC4FA57AF89BD6B8FF5DBE 8DFF58C08AFF51C087FF42BC7EFF0CAB5AFF0BAB59FF0AAA59FF0CA958FF68C7 97FF349A65F804743BABFFFFFF00FFFFFF0004733A0C04743AE175BF99FE83D1 A9FF52C289FF4DC387FF1EB669FF0DB45FFF0DB45FFF0DB35EFF4EC589FF55B7 84FE04753BE104733A0CFFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F690D3 B1FF65CC98FF3BC27DFF0FB962FF0FBC65FF10BD65FF32C57BFF71CE9FFF0A78 3FF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65268C 57F594DBB7FF31C379FF11C067FF12C56AFF1FC973FF78DBA8FF1E8952F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000475 3BAC4CAA7AFA6DD6A0FF12C469FF14CB6EFF6CE0A5FF3FA872F904763CABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04763BE15DBF8DFE4CD18DFF4ED590FF5FC592FE04763CE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0E7A42F674D1A2FF75D3A3FF0E7B42F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65248B56F5248B56F504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004763C9D04763C9DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753B9D04753B9DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65288957F5268956F504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0F7941F687CAA7FF7EC7A2FF0E7941F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE172BD96FE72C59AFF6AC295FF5BB386FE04743AE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3BAC4EA578FA91D2B0FF48B47DFF3FB176FF6AC295FF3B9C6AF904743AABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65288A 57F6A0D7BBFF5FBD8CFF4DB680FF44B37AFF1AA25CFF71C49AFF1D844FF50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F69CD4 B7FF7AC9A0FF5ABE8BFF51BC86FF38B474FF08A353FF2CAF6CFF6EC397FF0A77 3EF604733A2DFFFFFF00FFFFFF00FFFFFF0004733A0C04743AE180C4A1FE97D5 B5FF69C596FF60C591FF56C38BFF1DB066FF0BAC59FF0BAB59FF4DC185FF55B4 84FE04753BE104733A0CFFFFFF00FFFFFF0004743BAC56A97FF9B0DFC7FF77CB A0FF6CCA9AFF63CA96FF43C181FF0DB35EFF0DB55FFF0DB45FFF0FB25FFF6ACE 9BFF359C67F804753BABFFFFFF0004733A65288B58F6B5E0CAFFBCE5D0FFB8E5 CEFFB3E5CBFF63CD97FF19BA68FF0FBC64FF10BE65FF83DCAFFF82DBAEFF82D9 ACFF7BD3A6FF18844CF504733A6504753BC504733AFF04733AFF04733AFF0478 3CF7B2E6CBFF4BC989FF10BD65FF11C369FF12C76BFF84E1B2FF057A3EF70473 3AFF04733AFF04733AFF04753BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0E5CAFF31C378FF11C067FF13C86CFF15CF71FF85E5B4FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFADE4C8FF1FBD6DFF10BF66FF12C56AFF13C96DFF84E3B3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA9E2C5FF16B665FF0FBA63FF10BE66FF11C167FF83DEB0FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA5DFC1FF81D5AAFF81D7ABFF82D9ACFF82DAADFF82D9ADFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743BE8FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0F7941F689CCA9FF7FC8A2FF0E7941F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE173BD97FE74C69CFF6CC396FF5CB386FE04743AE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3BAC4FA679FA93D3B2FF4BB67FFF42B279FF6BC296FF3B9C6AF904743AABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65298B 58F6A2D8BCFF62BE8FFF4FB782FF45B37BFF1AA25CFF71C49AFF1D844FF50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F69ED4 B8FF7CCAA2FF5CBD8BFF53BB85FF37B173FF08A153FF2CAF6CFF6EC397FF0A77 3EF604733A2DFFFFFF00FFFFFF00FFFFFF0004733A0C04743AE183C5A3FE99D5 B6FF69C395FF5FC18FFF56C18AFF1CAE63FF0AAA58FF0BAB59FF4DC286FF55B5 84FE04753BE104733A0CFFFFFF00FFFFFF0004743BAC57A97FF9B0DFC7FF75C7 9DFF6AC697FF60C692FF41BE7EFF0CB05CFF0DB35EFF0DB45FFF0FB460FF6ACF 9BFF359D68F804753BABFFFFFF0004733A65288B58F6B3DFC9FFB9E2CDFFB5E2 CBFFB1E2C9FF5FC992FF18B665FF0EB861FF0FBB64FF83DCAFFF83DCAFFF82DB AEFF7CD5A8FF19844DF504733A6504753BC504733AFF04733AFF04733AFF0477 3CF7AFE3C8FF47C384FF0EB861FF10BE66FF11C369FF84E1B2FF057A3EF70473 3AFF04733AFF04733AFF04763BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFADE2C7FF2EBD74FF0FBA63FF11C168FF13C86CFF85E6B5FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA9E1C5FF1BB668FF0EB962FF10C067FF12C66BFF84E3B3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA5DEC1FF14B161FF0DB560FF0FBB63FF10BF66FF83DEB0FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA1DCBEFF81D3A9FF81D5AAFF81D7ACFF82D9ADFF82DAADFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04753BE8FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000002839 DD2D2A3EDD982C3FDDE3283BDDF9283BDDF92C3FDDE32A3EDD97293ADC2C0000 000000000000000000000000000000000000000000002449DB072B3BD59F3445 D8F57688E9FD9EB2F2FFB0C4F7FFB0C4F7FF9EB2F2FF7587E8FD3445D8F52A3C D69D2B2BD5060000000000000000000000002424DB072B37D0C95460DDF69AA7 F1FF8599EDFF718BEDFF6785ECFF6785ECFF718BEDFF8599EDFF9AA7F0FF535F DCF62A37D0C82B2BD50600000000000000002B33CA9F4F57D6F68992ECFF5765 D2FF4756BDFF576BE1FF5A71E8FF5A71E8FF576BE2FF4757BEFF5764D2FF8891 ECFF4E55D5F62C35C99B000000002D2DC12D3337C6F57C83E6FF555FE1FF777F D8FFC4C7E8FF4853BDFF4E5CDEFF4E5DDFFF4652BEFFC1C4E7FF7B83D9FF5560 E1FF7D83E6FF3337C6F52A2FC42B2D2FBC985356D2FC6167E0FF474FDCFFC7CA F5FFFFFFFFFFCACDEAFF444DBAFF444DBAFFCACDEAFFFFFFFFFFC7CAF5FF474F DCFF6167E0FF5254D0FC2E2EBD962E2CB6E45C5FD7FF494DD9FF4348D8FF4A51 DAFFCBCDF5FFFFFFFFFFCBCDEAFFCBCDEAFFFFFFFFFFCDCFF5FF4B51DAFF4348 D8FF4A4ED9FF5D5ED7FF2D2CB6E22E28AFF85757D6FF3F41D3FF3E41D4FF4044 D6FF4549D2FFC9CAEAFFFFFFFFFFFFFFFFFFCBCCEBFF464AD2FF4044D6FF3E41 D4FF3F41D3FF5757D6FF2E28AFF82E25A9F84C4AD2FF3B3ACFFF3A3AD1FF393A CCFF3739B1FFC7C8E8FFFFFFFFFFFFFFFFFFCACAE9FF383AB1FF393ACCFF3A3A D1FF3B3ACFFF4D4AD2FF2D25A9F72F23A3E3443EC7FF3A36CDFF3633CDFF3634 B2FFC5C4E6FFFFFFFFFFCCCBF3FFCCCBF3FFFFFFFFFFC6C6E7FF3634B2FF3633 CDFF3A36CDFF443EC7FF2F23A4E22F209D973B30B5FC3B36CBFF312CC9FFC0BE EDFFFFFFFFFFC8C7F1FF3B37CDFF3B37CDFFC8C7F1FFFFFFFFFFC0BEEDFF312C C9FF3B36CBFF3B30B4FC30219C952E1D972C331F97F54135C2FF3228C4FF6761 D5FFBFBDEEFF3630C9FF2F28C7FF2F28C7FF3630C9FFBFBDEEFF6761D5FF3329 C4FF4135C1FF341F98F5311E922A00000000321B909E39229BF54331B9FF3725 B8FF3322B9FF3323BAFF3223BBFF3223BBFF3323BAFF3322B9FF3725B8FF4331 B9FF3A239BF5321B919900000000000000002B2B8006351889C73F2395F55238 B1FF4930B1FF3F25AEFF3B20ADFF3B20ADFF3F25AEFF4930B1FF5138B0FF3E24 95F5341889C6330099050000000000000000000000002B0080063515829B3719 84F64D2D99FC5A3BA6FF6143AEFF6143AEFF5A3BA6FF4D2D99FC371984F53516 8299330099050000000000000000000000000000000000000000000000003512 7D2B36137C9636137CE235137BF835137BF836137DE137137B953712792A0000 0000000000000000000000000000454B49FF454B49FF454B49FF454B49FF454B 49FF454B49FF6C7170F6FFFFFF00FFFFFF001616A7A20B0BB9F2FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF484D4BFF1D1D9C170F0FB4E31717F9FF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF009A9B9BFF9A9B9BFF9A9B9BFF9A9B9BFF9A9B 9BFFFFFFFFFF393C66FF0707BFFB4D4DFCFFB7B7FFFF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF6B6BC7FF0404E3FF7F7FFFFFABABFFFFBCBCFFFF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF009A9B9BFF9A9B9BFF9A9B9BFF8F909BFF1E1E B1FF1E1EF9FF9B9BFFFF9191FFFF6F6FFFFFB6B6FFFF0303CAFF0101C6FF0101 C6FF0101C6FF0101C6FF0606C2FDFFFFFFFFFFFFFFFFB6B6E1FF0B0BC0FF4D4D FDFFA1A1FFFF7474FFFF6363FFFF6565FFFFB0B0FFFFB0B0FFFFAFAFFFFFADAD FFFFABABFFFFA8A8FFFF0101C6FF9A9B9BFF4647A3FF0404ECFF7676FFFF8F8F FFFF5E5EFFFF5B5BFFFF5F5FFFFF5F5FFFFF5E5EFFFF5C5CFFFF5B5BFFFF5858 FFFF5454FFFFA3A3FFFF0101C6FF5252AAFF1D1DF9FF8888FFFF7272FFFF4C4C FFFF5252FFFF5656FFFF5858FFFF4F4FFFFF4141FFFF3030FFFF2C2CFFFF3333 FFFF3B3BFFFF9C9CFFFF0101C6FF3B3B93FF1313F8FF7777FFFF5E5EFFFF3434 FFFF2F2FFFFF2727FFFF1D1DFFFF1818FFFF1212FFFF0B0BFFFF0707FFFF0707 FFFF0707FFFF7E7EFFFF0101C6FFFFFFFFFF6B6BC7FF0404DFFF5C5CFFFF7373 FFFF3030FFFF2525FFFF2222FFFF1D1DFFFF1616FFFF0F0FFFFF0808FFFF0707 FFFF0707FFFF7E7EFFFF0101C6FF9A9B9BFF9A9B9BFF71729DFF0909C2FF3737 FCFF8585FFFF4A4AFFFF2727FFFF2020FFFF8888FFFF8484FFFF8080FFFF7E7E FFFF7E7EFFFF7E7EFFFF0101C6FFFFFFFFFFFFFFFFFFFFFFFFFFEBEBF6FF2929 BEFF0E0EF8FF8080FFFF6565FFFF2525FFFF8888FFFF0303CDFF0101C6FF0101 C6FF0101C6FF0101C6FF0606C2FD454B49FF454B49FF454B49FF454B49FF454B 49FF282A86FF0404D6FF5C5CFFFF7979FFFF8A8AFFFF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF001B1BA1520707C3FB2E2EFBFF8383FFFF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF001D1D9C171010B6E30707F8FF0101C6FFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001616A7A20B0BB9F2FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000B0BB9F21616A7A2FFFFFF00FFFFFF006C7170F6454B49FF454B49FF454B 49FF454B49FF454B49FF454B49FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FF1717F9FF0F0FB4E31D1D9C17484D4BFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FFB7B7FFFF4D4DFCFF0707BFFB393C66FFFFFFFFFF9A9B9BFF9A9B 9BFF9A9B9BFF9A9B9BFF9A9B9BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FFBCBCFFFFABABFFFF7F7FFFFF0404E3FF6B6BC7FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0606C2FD0101C6FF0101C6FF0101C6FF0101 C6FF0303CAFFB6B6FFFF6F6FFFFF9191FFFF9B9BFFFF1E1EF9FF1E1EB1FF8F90 9BFF9A9B9BFF9A9B9BFF9A9B9BFF0101C6FFA8A8FFFFABABFFFFADADFFFFAFAF FFFFB0B0FFFFB0B0FFFF6565FFFF6363FFFF7474FFFFA1A1FFFF4D4DFDFF0B0B C0FFB6B6E1FFFFFFFFFFFFFFFFFF0101C6FFA3A3FFFF5454FFFF5858FFFF5B5B FFFF5C5CFFFF5E5EFFFF5F5FFFFF5F5FFFFF5B5BFFFF5E5EFFFF8F8FFFFF7676 FFFF0404ECFF4647A3FF9A9B9BFF0101C6FF9C9CFFFF3B3BFFFF3333FFFF2C2C FFFF3030FFFF4141FFFF4F4FFFFF5858FFFF5656FFFF5252FFFF4C4CFFFF7272 FFFF8888FFFF1D1DF9FF5252AAFF0101C6FF7E7EFFFF0707FFFF0707FFFF0707 FFFF0B0BFFFF1212FFFF1818FFFF1D1DFFFF2727FFFF2F2FFFFF3434FFFF5E5E FFFF7777FFFF1313F8FF3B3B93FF0101C6FF7E7EFFFF0707FFFF0707FFFF0808 FFFF0F0FFFFF1616FFFF1D1DFFFF2222FFFF2525FFFF3030FFFF7373FFFF5C5C FFFF0404DFFF6B6BC7FFFFFFFFFF0101C6FF7E7EFFFF7E7EFFFF7E7EFFFF8080 FFFF8484FFFF8888FFFF2020FFFF2727FFFF4A4AFFFF8585FFFF3737FCFF0909 C2FF71729DFF9A9B9BFF9A9B9BFF0606C2FD0101C6FF0101C6FF0101C6FF0101 C6FF0303CDFF8888FFFF2525FFFF6565FFFF8080FFFF0E0EF8FF2929BEFFEBEB F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FF8A8AFFFF7979FFFF5C5CFFFF0404D6FF282A86FF454B49FF454B 49FF454B49FF454B49FF454B49FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FF8383FFFF2E2EFBFF0707C3FB1B1BA152FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000101C6FF0707F8FF1010B6E31D1D9C17FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000B0BB9F21616A7A2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000008888884B878787E4878787FF8787 87FF878787FF878787FF878787FF878787FF878787FF878787FF878787FF8787 87FF878787E38686864A0000000000000000878787E3E9E9E9D1F2F2F2FFF2F2 F2FFF0F0F0FFEEEEEEFFECECECFFEAEAEAFFE7E7E7FFE5E5E5FFE3E3E3FFE1E1 E1FFD8D8D8D0878787E20000000000000000878787FFF2F2F2FFD2D2D2FFD2D2 D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2 D2FFDDDDDDFF878787FF0000000000000000878787FFF2F2F2FFD9D9D9FFD9D9 D9FFD9D9D9FFD9D9D9FFD9D9D9FFD6D6D6FF4D4D4DFFD0D0D0FFD9D9D9FFD9D9 D9FFDBDBDBFF878787FF0000000000000000878787FFF0F0F0FFE0E0E0FFE0E0 E0FFE0E0E0FFE0E0E0FFE0E0E0FFB2B2B2FF8D8D8DFFD5D5D5FFE0E0E0FFE0E0 E0FFD9D9D9FF878787FF0000000000000000878787FFEEEEEEFFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FF8C8C8CFF656565FF929292FF3F3F3FFFE7E7E7FFE7E7 E7FFD7D7D7FF878787FF0000000000000000878787FFECECECFFEEEEEEFFEEEE EEFFEEEEEEFFEEEEEEFFDFDFDFFF9A9A9AFF707070FF2C2C2CFFEEEEEEFFEEEE EEFFD4D4D4FF878787FF0000000000000000878787FFEAEAEAFFF5F5F5FFF5F5 F5FFF5F5F5FFF5F5F5FF595959FFA4A4A4FFE8E8E8FF333333FFF5F5F5FFF5F5 F5FFD2D2D2FF878787FF0000000000000000878787FFE7E7E7FFF9F9F9FFF9F9 F9FFF9F9F9FFF9F9F9FF787878FF636363FF6A6A6AFF2E2E2EFFF5F5F5FFF9F9 F9FFD0D0D0FF878787FF0000000000000000878787FFE5E5E5FFF9F9F9FFF9F9 F9FFF9F9F9FFF9F9F9FFF9F9F9FFEBEBEBFFF8F8F8FFF9F9F9FFF9F9F9FFF9F9 F9FFCECECEFF878787FF0000000000000000878787FFE3E3E3FFB3B3B3FFB3B3 B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3 B3FFCCCCCCFF878787FF0000000000000000878787FFE1E1E1FFB3B3B3FFB3B3 B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3B3FFB3B3 B3FFCCCCCCFF878787FF0000000000000000878787E3DADADAD0DDDDDDFFDBDB DBFFD9D9D9FFD7D7D7FFD4D4D4FFD2D2D2FFD0D0D0FFCECECEFFCCCCCCFFCCCC CCFFCACACAD0878787E200000000000000008686864A878787E3878787FF8787 87FF878787FF878787FF878787FF878787FF878787FF878787FF878787FF8787 87FF878787E28888884900000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end object ilViewerImages: TImageList Left = 280 Top = 120 end end ��������������������������������������������������������������������������������������doublecmd-1.1.30/src/DragCursors.lrs����������������������������������������������������������������0000644�0001750�0000144�00000035351�15104114162�016343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('ArrowCopy','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#0#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#0#0#0#255#255#255#0#0 +#183#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2 +#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2 +#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#2 +#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2 +#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0 +#0#0#0#0#0#0#0#0#1#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0 +#0#0#1#1#0#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#1#0#0#0#0#0#1#1#1#0#0 +#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0 +#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#1#0#0#1#1#1#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2 +#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0 +#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#1 +#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1 +#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 +#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255 +#255#255#255#255#192#255#255#255#192#255#255#255#192#255#255#255#192#255#255 +#255#192#255#255#248#0#7#255#136#0#7#255#8#0#7#255#8#0#7'~'#8#0#7'>'#24#0#7 +#28#31#192#255#12'?'#192#255#0'?'#192#255#0#127#192#255#0#1#192#255#0#3#255 +#255#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255#255#0#255 +#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255#255 +#255'?'#255#255#255#127#255#255#255 ]); LazarusResources.Add('ArrowMove','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#128#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#255#255#255#0 +#0#22'r'#0#15#31#244#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#3#3#3#3#3#3#3#3#3#3#3#3#3#3#2 +#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#2#3#3#3#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0 +#0#0#0#0#0#1#1#0#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#1#0#0#0#0#0#1#1 +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#1#1#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#1#1#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1 +#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1 +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#248#0#7#255#136#0#7#255#8#0#7#255#8#0#7'~'#8#0#7'>' +#24#0#7#28#31#255#255#12'?'#255#255#0'?'#255#255#0#127#255#255#0#1#255#255#0 +#3#255#255#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255#255#0 +#255#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255 +#255#255'?'#255#255#255#127#255#255#255 ]); LazarusResources.Add('ArrowLink','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#128#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#255#255#255#0 +']'#18#4#0#156#30#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#2#0#0#0#0#0#0#0#0#2#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#2#2#0#0#0#0#0#0#2#2#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#2#3#3#3#2#2#0#0#0#2#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#2#3#3#3#3#2#2#2#2#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#3 +#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#2#3#3#3#3#3#3#3#3 +#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#2#3#3#3#3#3#3#3#3#2#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#2#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#1#1#0#0#0#0#0#0#0#2#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#1#0#0#0#0#0#1#1#1 +#0#0#0#0#0#0#2#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#1#1#0#0#0#0#1#1#0#0#0#0#0#0#2 +#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#1#1#1#0#0#1#1#1#0#0#0#0#0#2#2#2#2#2#2#2#2 +#2#2#2#2#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 +#1#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1 +#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255 +#254#15#255#255#252'?'#255#255#252#127#255#255#248#127#191#255#248'??'#255 +#252#14'?'#255#252#0'?'#255#140#0'?'#255#14#0'?'#255#15#0'?~'#15#128'?>'#31 +#128'?'#28#31#0'?'#12'>'#0'?'#0'<'#0'?'#0#127#255#255#0#1#255#255#0#3#255#255 +#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255#255#0#255#255 +#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255#255#255 +'?'#255#255#255#127#255#255#255 ]); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�013346� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wlxplugin.pas������������������������������������������������������������������0000644�0001750�0000144�00000007060�15104114162�016107� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Lister API definitions. // This unit is written by Christian Ghisler, it's from Total Commander // Lister API Guide, which can be found at http://ghisler.com. // Version: 2.0. unit WlxPlugin; interface const lc_copy=1; lc_newparams=2; lc_selectall=3; lc_setpercent=4; lcp_wraptext=1; lcp_fittowindow=2; lcp_ansi=4; lcp_ascii=8; lcp_variable=12; lcp_forceshow=16; lcp_fitlargeronly=32; lcp_center=64; lcp_darkmode=128; lcp_darkmodenative=256; lcs_findfirst=1; lcs_matchcase=2; lcs_wholewords=4; lcs_backwards=8; itm_percent=$FFFE; itm_fontstyle=$FFFD; itm_wrap=$FFFC; itm_fit=$FFFB; itm_next=$FFFA; itm_center=$FFF9; LISTPLUGIN_OK=0; LISTPLUGIN_ERROR=1; const MAX_PATH=32000; type { Unsigned integer with pointer size } THandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; const wlxInvalidHandle: THandle = THandle(0); type tListDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pListDefaultParamStruct=^tListDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; type HBITMAP = type THandle; { Function prototypes: Functions need to be defined exactly like this!} (* function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadW(ParentWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadNext(ParentWin,PluginWin:thandle;FileToLoad:pchar;ShowFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadNextW(ParentWin,PluginWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListCloseWindow(ListWin:thandle); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchText(ListWin:thandle;SearchString:pchar; SearchParameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchTextW(ListWin:thandle;SearchString:pwidechar; SearchParameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchDialog(ListWin:thandle;FindNext:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSendCommand(ListWin:thandle;Command,Parameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListPrint(ListWin:thandle;FileToPrint,DefPrinter:pchar; PrintFlags:integer;var Margins:trect):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListPrintW(ListWin:thandle;FileToPrint,DefPrinter:pwidechar; PrintFlags:integer;var Margins:trect):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListNotificationReceived(ListWin:thandle;Message,wParam,lParam:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListSetDefaultParams(dps:pListDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListGetPreviewBitmap(FileToLoad:pchar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListGetPreviewBitmapW(FileToLoad:pwidechar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wlxplugin.h��������������������������������������������������������������������0000644�0001750�0000144�00000004356�15104114162�015560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _WLX_H #define _WLX_H #include "common.h" /* Contents of file listplug.h */ #define lc_copy 1 #define lc_newparams 2 #define lc_selectall 3 #define lc_setpercent 4 #define lcp_wraptext 1 #define lcp_fittowindow 2 #define lcp_ansi 4 #define lcp_ascii 8 #define lcp_variable 12 #define lcp_forceshow 16 #define lcp_fitlargeronly 32 #define lcp_center 64 #define lcs_findfirst 1 #define lcs_matchcase 2 #define lcs_wholewords 4 #define lcs_backwards 8 #define itm_percent 0xFFFE #define itm_fontstyle 0xFFFD #define itm_wrap 0xFFFC #define itm_fit 0xFFFB #define itm_next 0xFFFA #define itm_center 0xFFF9 #define LISTPLUGIN_OK 0 #define LISTPLUGIN_ERROR 1 typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ListDefaultParamStruct; #ifdef __cplusplus extern "C" { #endif HWND DCPCALL ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags); HWND DCPCALL ListLoadW(HWND ParentWin,WCHAR* FileToLoad,int ShowFlags); int DCPCALL ListLoadNext(HWND ParentWin,HWND PluginWin,char* FileToLoad,int ShowFlags); int DCPCALL ListLoadNextW(HWND ParentWin,HWND PluginWin,WCHAR* FileToLoad,int ShowFlags); void DCPCALL ListCloseWindow(HWND ListWin); void DCPCALL ListGetDetectString(char* DetectString,int maxlen); int DCPCALL ListSearchText(HWND ListWin,char* SearchString,int SearchParameter); int DCPCALL ListSearchTextW(HWND ListWin,WCHAR* SearchString,int SearchParameter); int DCPCALL ListSearchDialog(HWND ListWin,int FindNext); int DCPCALL ListSendCommand(HWND ListWin,int Command,int Parameter); int DCPCALL ListPrint(HWND ListWin,char* FileToPrint,char* DefPrinter, int PrintFlags,RECT* Margins); int DCPCALL ListPrintW(HWND ListWin,WCHAR* FileToPrint,WCHAR* DefPrinter, int PrintFlags,RECT* Margins); int DCPCALL ListNotificationReceived(HWND ListWin,int Message,WPARAM wParam,LPARAM lParam); void DCPCALL ListSetDefaultParams(ListDefaultParamStruct* dps); HBITMAP DCPCALL ListGetPreviewBitmap(char* FileToLoad,int width,int height, char* contentbuf,int contentbuflen); HBITMAP DCPCALL ListGetPreviewBitmapW(WCHAR* FileToLoad,int width,int height, char* contentbuf,int contentbuflen); #ifdef __cplusplus } #endif #endif // _WLX_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wfxplugin.pas������������������������������������������������������������������0000644�0001750�0000144�00000034702�15104114162�016104� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit WfxPlugin; { Plugin definitions version 2.0 } interface uses SysUtils {$IFDEF MSWINDOWS}, Windows{$ENDIF}; { ids for FsGetFile } const FS_FILE_OK=0; FS_FILE_EXISTS=1; FS_FILE_NOTFOUND=2; FS_FILE_READERROR=3; FS_FILE_WRITEERROR=4; FS_FILE_USERABORT=5; FS_FILE_NOTSUPPORTED=6; FS_FILE_EXISTSRESUMEALLOWED=7; FS_EXEC_OK=0; FS_EXEC_ERROR=1; FS_EXEC_YOURSELF=-1; FS_EXEC_SYMLINK=-2; FS_COPYFLAGS_OVERWRITE=1; FS_COPYFLAGS_RESUME=2; FS_COPYFLAGS_MOVE=4; FS_COPYFLAGS_EXISTS_SAMECASE=8; FS_COPYFLAGS_EXISTS_DIFFERENTCASE=16; { flags for tRequestProc } const RT_Other=0; RT_UserName=1; RT_Password=2; RT_Account=3; RT_UserNameFirewall=4; RT_PasswordFirewall=5; RT_TargetDir=6; RT_URL=7; RT_MsgOK=8; RT_MsgYesNo=9; RT_MsgOKCancel=10; { flags for tLogProc } const msgtype_connect=1; msgtype_disconnect=2; msgtype_details=3; msgtype_transfercomplete=4; msgtype_connectcomplete=5; msgtype_importanterror=6; msgtype_operationcomplete=7; { flags for FsStatusInfo } const FS_STATUS_START=0; FS_STATUS_END=1; FS_STATUS_OP_LIST=1; FS_STATUS_OP_GET_SINGLE=2; FS_STATUS_OP_GET_MULTI=3; FS_STATUS_OP_PUT_SINGLE=4; FS_STATUS_OP_PUT_MULTI=5; FS_STATUS_OP_RENMOV_SINGLE=6; FS_STATUS_OP_RENMOV_MULTI=7; FS_STATUS_OP_DELETE=8; FS_STATUS_OP_ATTRIB=9; FS_STATUS_OP_MKDIR=10; FS_STATUS_OP_EXEC=11; FS_STATUS_OP_CALCSIZE=12; FS_STATUS_OP_SEARCH=13; FS_STATUS_OP_SEARCH_TEXT=14; FS_STATUS_OP_SYNC_SEARCH=15; FS_STATUS_OP_SYNC_GET=16; FS_STATUS_OP_SYNC_PUT=17; FS_STATUS_OP_SYNC_DELETE=18; FS_STATUS_OP_GET_MULTI_THREAD=19; FS_STATUS_OP_PUT_MULTI_THREAD=20; {Flags for FsExtractCustomIcon} const FS_ICONFLAG_SMALL=1; FS_ICONFLAG_BACKGROUND=2; FS_ICON_USEDEFAULT=0; FS_ICON_EXTRACTED=1; FS_ICON_EXTRACTED_DESTROY=2; FS_ICON_DELAYED=3; const FS_BITMAP_NONE=0; FS_BITMAP_EXTRACTED=1; FS_BITMAP_EXTRACT_YOURSELF=2; FS_BITMAP_EXTRACT_YOURSELF_ANDDELETE=3; FS_BITMAP_CACHE=256; {Flags for crypto callback function} FS_CRYPT_SAVE_PASSWORD=1; FS_CRYPT_LOAD_PASSWORD=2; FS_CRYPT_LOAD_PASSWORD_NO_UI=3; {Load password only if master password has already been entered!} FS_CRYPT_COPY_PASSWORD=4; FS_CRYPT_MOVE_PASSWORD=5; FS_CRYPT_DELETE_PASSWORD=6; FS_CRYPTOPT_MASTERPASS_SET=1; {The user already has a master password defined} {Flags for FsGetBackgroundFlags} BG_DOWNLOAD=1; { Plugin supports downloads in background } BG_UPLOAD=2; { Plugin supports uploads in background } BG_ASK_USER=4; { Plugin requires separate connection for background transfers -> ask user first } type { Unsigned integer with pointer size } THandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; const wfxInvalidHandle: THandle = THandle(-1); { Some Windows specific stuff } const MAXDWORD = DWORD($FFFFFFFF); FILE_ATTRIBUTE_NORMAL = 128; FILE_ATTRIBUTE_DIRECTORY = 16; FILE_ATTRIBUTE_REPARSE_POINT = $0400; FILE_ATTRIBUTE_UNIX_MODE = $80000000; type TInt64Rec = packed record case Boolean of True : (Value : Int64); False : (Low, High : DWORD); end; BOOL = LongBool; HBITMAP = THandle; HICON = THandle; HWND = THandle; type {$IFDEF MSWINDOWS} FILETIME = Windows.FILETIME; {$ELSE} FILETIME = packed record dwLowDateTime : DWORD; dwHighDateTime : DWORD; end; {$ENDIF} TFileTime = FILETIME; // for compatibility with all plugins PFileTime = ^FILETIME; TWfxFileTime = FILETIME; PWfxFileTime = ^FILETIME; {$IFDEF MSWINDOWS} WIN32_FIND_DATAA = Windows.WIN32_FIND_DATA; {$ELSE} WIN32_FIND_DATAA = packed record dwFileAttributes : DWORD; ftCreationTime : TFILETIME; ftLastAccessTime : TFILETIME; ftLastWriteTime : TFILETIME; nFileSizeHigh : DWORD; nFileSizeLow : DWORD; dwReserved0 : DWORD; dwReserved1 : DWORD; cFileName : array[0..(MAX_PATH)-1] of CHAR; cAlternateFileName : array[0..13] of CHAR; end; {$ENDIF} TWin32FindData = WIN32_FIND_DATAA; {$IFDEF MSWINDOWS} WIN32_FIND_DATAW = Windows.WIN32_FIND_DATAW; {$ELSE} WIN32_FIND_DATAW = packed record dwFileAttributes : DWORD; ftCreationTime : TFILETIME; ftLastAccessTime : TFILETIME; ftLastWriteTime : TFILETIME; nFileSizeHigh : DWORD; nFileSizeLow : DWORD; dwReserved0 : DWORD; dwReserved1 : DWORD; cFileName : array[0..(MAX_PATH)-1] of WCHAR; cAlternateFileName : array[0..13] of WCHAR; end; {$ENDIF} TWin32FindDataW = WIN32_FIND_DATAW; type tRemoteInfo=record SizeLow,SizeHigh:longint; LastWriteTime:TFileTime; Attr:longint; end; pRemoteInfo=^tRemoteInfo; type tFsDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pFsDefaultParamStruct=^tFsDefaultParamStruct; { For compatibility with Delphi use $IFDEF's to set calling convention } { callback functions } type TProgressProc=function(PluginNr:integer;SourceName, TargetName:pchar;PercentDone:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TProgressProcW=function(PluginNr:integer;SourceName, TargetName:pwidechar;PercentDone:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TLogProc=procedure(PluginNr,MsgType:integer;LogString:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TLogProcW=procedure(PluginNr,MsgType:integer;LogString:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TRequestProc=function(PluginNr,RequestType:integer;CustomTitle,CustomText, ReturnedText:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TRequestProcW=function(PluginNr,RequestType:integer;CustomTitle,CustomText, ReturnedText:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TCryptProc=function(PluginNr,CryptoNumber:integer;mode:integer;ConnectionName, Password:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TCryptProcW=function(PluginNr,CryptoNumber:integer;mode:integer;ConnectionName, Password:pwidechar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; { Function prototypes - the callback functions MUST be implemented exactly like this! } (* function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc; pRequestProc:tRequestProc):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsInitW(PluginNr:integer;pProgressProcW:tProgressProcW;pLogProcW:tLogProcW; pRequestProcW:tRequestProcW):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetCryptCallback(CryptProc:TCryptProc;CryptoNr,Flags:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetCryptCallbackW(CryptProcW:TCryptProcW;CryptoNr,Flags:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindFirst(path :pchar;var FindData:tWIN32FINDDATA):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindFirstW(path :pwidechar;var FindData:tWIN32FINDDATAW):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindNext(Hdl:thandle;var FindData:tWIN32FINDDATA):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindNextW(Hdl:thandle;var FindDataW:tWIN32FINDDATAW):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindClose(Hdl:thandle):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsMkDir(RemoteDir:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsMkDirW(RemoteDir:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExecuteFile(MainWin:HWND;RemoteName,Verb:pchar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExecuteFileW(MainWin:HWND;RemoteName,Verb:pwidechar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRenMovFile(OldName,NewName:pchar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRenMovFileW(OldName,NewName:pwidechar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetFile(RemoteName,LocalName:pchar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetFileW(RemoteName,LocalName:pwidechar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsPutFile(LocalName,RemoteName:pchar;CopyFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsPutFileW(LocalName,RemoteName:pwidechar;CopyFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDeleteFile(RemoteName:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDeleteFileW(RemoteName:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRemoveDir(RemoteName:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRemoveDirW(RemoteName:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDisconnect(DisconnectRoot:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDisconnectW(DisconnectRoot:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetAttr(RemoteName:pchar;NewAttr:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetAttrW(RemoteName:pwidechar;NewAttr:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetTime(RemoteName:pchar;CreationTime,LastAccessTime, LastWriteTime:PFileTime):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetTimeW(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PFileTime):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsStatusInfo(RemoteDir:pchar;InfoStartEnd,InfoOperation:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsStatusInfoW(RemoteDir:pwidechar;InfoStartEnd,InfoOperation:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsGetDefRootName(DefRootName:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExtractCustomIcon(RemoteName:pchar;ExtractFlags:integer; var TheIcon:hicon):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExtractCustomIconW(RemoteName:pwidechar;ExtractFlags:integer; var TheIcon:hicon):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetDefaultParams(dps:pFsDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetPreviewBitmap(RemoteName:pchar;width,height:integer, var ReturnedBitmap:hbitmap):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetPreviewBitmapW(RemoteName:pwidechar;width,height:integer, var ReturnedBitmap:hbitmap):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsLinksToLocalFiles:bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetLocalName(RemoteName:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetLocalNameW(RemoteName:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) {****************************** content plugin part *****************************} const ft_nomorefields=0; ft_numeric_32=1; ft_numeric_64=2; ft_numeric_floating=3; ft_date=4; ft_time=5; ft_boolean=6; ft_multiplechoice=7; ft_string=8; ft_fulltext=9; ft_datetime=10; ft_stringw=11; // for ContentGetValue ft_nosuchfield=-1; ft_fileerror=-2; ft_fieldempty=-3; ft_ondemand=-4; ft_delayed=0; // for ContentSetValue ft_setsuccess=0; setflags_first_attribute=1; {First attribute of this file} setflags_last_attribute=2; setflags_only_date=4; CONTENT_DELAYIFSLOW=1; // ContentGetValue called in foreground type tContentDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pContentDefaultParamStruct=^tContentDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; { Function prototypes: } (* procedure FsContentGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetValueW(FileName:pwidechar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentSetDefaultParams(dps:pContentDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentStopGetValue(FileName:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentStopGetValueW(FileName:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultSortOrder(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetSupportedFieldFlags(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentSetValue(FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentSetValueW(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultView(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultViewW(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetBackgroundFlags:integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. ��������������������������������������������������������������doublecmd-1.1.30/sdk/wfxplugin.h��������������������������������������������������������������������0000644�0001750�0000144�00000024254�15104114162�015551� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "common.h" // contents of fsplugin.h version 2.1 (27.April.2010) // ids for FsGetFile #define FS_FILE_OK 0 #define FS_FILE_EXISTS 1 #define FS_FILE_NOTFOUND 2 #define FS_FILE_READERROR 3 #define FS_FILE_WRITEERROR 4 #define FS_FILE_USERABORT 5 #define FS_FILE_NOTSUPPORTED 6 #define FS_FILE_EXISTSRESUMEALLOWED 7 #define FS_EXEC_OK 0 #define FS_EXEC_ERROR 1 #define FS_EXEC_YOURSELF -1 #define FS_EXEC_SYMLINK -2 #define FS_COPYFLAGS_OVERWRITE 1 #define FS_COPYFLAGS_RESUME 2 #define FS_COPYFLAGS_MOVE 4 #define FS_COPYFLAGS_EXISTS_SAMECASE 8 #define FS_COPYFLAGS_EXISTS_DIFFERENTCASE 16 // flags for tRequestProc #define RT_Other 0 #define RT_UserName 1 #define RT_Password 2 #define RT_Account 3 #define RT_UserNameFirewall 4 #define RT_PasswordFirewall 5 #define RT_TargetDir 6 #define RT_URL 7 #define RT_MsgOK 8 #define RT_MsgYesNo 9 #define RT_MsgOKCancel 10 // flags for tLogProc #define MSGTYPE_CONNECT 1 #define MSGTYPE_DISCONNECT 2 #define MSGTYPE_DETAILS 3 #define MSGTYPE_TRANSFERCOMPLETE 4 #define MSGTYPE_CONNECTCOMPLETE 5 #define MSGTYPE_IMPORTANTERROR 6 #define MSGTYPE_OPERATIONCOMPLETE 7 // flags for FsStatusInfo #define FS_STATUS_START 0 #define FS_STATUS_END 1 #define FS_STATUS_OP_LIST 1 #define FS_STATUS_OP_GET_SINGLE 2 #define FS_STATUS_OP_GET_MULTI 3 #define FS_STATUS_OP_PUT_SINGLE 4 #define FS_STATUS_OP_PUT_MULTI 5 #define FS_STATUS_OP_RENMOV_SINGLE 6 #define FS_STATUS_OP_RENMOV_MULTI 7 #define FS_STATUS_OP_DELETE 8 #define FS_STATUS_OP_ATTRIB 9 #define FS_STATUS_OP_MKDIR 10 #define FS_STATUS_OP_EXEC 11 #define FS_STATUS_OP_CALCSIZE 12 #define FS_STATUS_OP_SEARCH 13 #define FS_STATUS_OP_SEARCH_TEXT 14 #define FS_STATUS_OP_SYNC_SEARCH 15 #define FS_STATUS_OP_SYNC_GET 16 #define FS_STATUS_OP_SYNC_PUT 17 #define FS_STATUS_OP_SYNC_DELETE 18 #define FS_STATUS_OP_GET_MULTI_THREAD 19 #define FS_STATUS_OP_PUT_MULTI_THREAD 20 #define FS_ICONFLAG_SMALL 1 #define FS_ICONFLAG_BACKGROUND 2 #define FS_ICON_USEDEFAULT 0 #define FS_ICON_EXTRACTED 1 #define FS_ICON_EXTRACTED_DESTROY 2 #define FS_ICON_DELAYED 3 #define FS_BITMAP_NONE 0 #define FS_BITMAP_EXTRACTED 1 #define FS_BITMAP_EXTRACT_YOURSELF 2 #define FS_BITMAP_EXTRACT_YOURSELF_ANDDELETE 3 #define FS_BITMAP_CACHE 256 #define FS_CRYPT_SAVE_PASSWORD 1 #define FS_CRYPT_LOAD_PASSWORD 2 #define FS_CRYPT_LOAD_PASSWORD_NO_UI 3 // Load password only if master password has already been entered! #define FS_CRYPT_COPY_PASSWORD 4 // Copy encrypted password to new connection name #define FS_CRYPT_MOVE_PASSWORD 5 // Move password when renaming a connection #define FS_CRYPT_DELETE_PASSWORD 6 // Delete password #define FS_CRYPTOPT_MASTERPASS_SET 1 // The user already has a master password defined #define BG_DOWNLOAD 1 // Plugin supports downloads in background #define BG_UPLOAD 2 // Plugin supports uploads in background #define BG_ASK_USER 4 // Plugin requires separate connection for background transfers -> ask user first // flags for FsFindFirst/FsFindNext #define FILE_ATTRIBUTE_DIRECTORY 16 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_UNIX_MODE 0x80000000 typedef struct { DWORD SizeLow,SizeHigh; FILETIME LastWriteTime; int Attr; } RemoteInfoStruct; typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } FsDefaultParamStruct; // callback functions typedef int (DCPCALL *tProgressProc)(int PluginNr,char* SourceName, char* TargetName,int PercentDone); typedef int (DCPCALL *tProgressProcW)(int PluginNr,WCHAR* SourceName, WCHAR* TargetName,int PercentDone); typedef void (DCPCALL *tLogProc)(int PluginNr,int MsgType,char* LogString); typedef void (DCPCALL *tLogProcW)(int PluginNr,int MsgType,WCHAR* LogString); typedef BOOL (DCPCALL *tRequestProc)(int PluginNr,int RequestType,char* CustomTitle, char* CustomText,char* ReturnedText,int maxlen); typedef BOOL (DCPCALL *tRequestProcW)(int PluginNr,int RequestType,WCHAR* CustomTitle, WCHAR* CustomText,WCHAR* ReturnedText,int maxlen); typedef int (DCPCALL *tCryptProc)(int PluginNr,int CryptoNr,int Mode, char* ConnectionName,char* Password,int maxlen); typedef int (DCPCALL *tCryptProcW)(int PluginNr,int CryptoNr,int Mode, WCHAR* ConnectionName,WCHAR* Password,int maxlen); // Function prototypes int DCPCALL FsInit(int PluginNr,tProgressProc pProgressProc, tLogProc pLogProc,tRequestProc pRequestProc); int DCPCALL FsInitW(int PluginNr,tProgressProcW pProgressProcW, tLogProcW pLogProcW,tRequestProcW pRequestProcW); void DCPCALL FsSetCryptCallback(tCryptProc pCryptProc,int CryptoNr,int Flags); void DCPCALL FsSetCryptCallbackW(tCryptProcW pCryptProcW,int CryptoNr,int Flags); HANDLE DCPCALL FsFindFirst(char* Path,WIN32_FIND_DATAA *FindData); HANDLE DCPCALL FsFindFirstW(WCHAR* Path,WIN32_FIND_DATAW *FindData); BOOL DCPCALL FsFindNext(HANDLE Hdl,WIN32_FIND_DATAA *FindData); BOOL DCPCALL FsFindNextW(HANDLE Hdl,WIN32_FIND_DATAW *FindData); int DCPCALL FsFindClose(HANDLE Hdl); BOOL DCPCALL FsMkDir(char* Path); BOOL DCPCALL FsMkDirW(WCHAR* Path); int DCPCALL FsExecuteFile(HWND MainWin,char* RemoteName,char* Verb); int DCPCALL FsExecuteFileW(HWND MainWin,WCHAR* RemoteName,WCHAR* Verb); int DCPCALL FsRenMovFile(char* OldName,char* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri); int DCPCALL FsRenMovFileW(WCHAR* OldName,WCHAR* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri); int DCPCALL FsGetFile(char* RemoteName,char* LocalName,int CopyFlags, RemoteInfoStruct* ri); int DCPCALL FsGetFileW(WCHAR* RemoteName,WCHAR* LocalName,int CopyFlags, RemoteInfoStruct* ri); int DCPCALL FsPutFile(char* LocalName,char* RemoteName,int CopyFlags); int DCPCALL FsPutFileW(WCHAR* LocalName,WCHAR* RemoteName,int CopyFlags); BOOL DCPCALL FsDeleteFile(char* RemoteName); BOOL DCPCALL FsDeleteFileW(WCHAR* RemoteName); BOOL DCPCALL FsRemoveDir(char* RemoteName); BOOL DCPCALL FsRemoveDirW(WCHAR* RemoteName); BOOL DCPCALL FsDisconnect(char* DisconnectRoot); BOOL DCPCALL FsDisconnectW(WCHAR* DisconnectRoot); BOOL DCPCALL FsSetAttr(char* RemoteName,int NewAttr); BOOL DCPCALL FsSetAttrW(WCHAR* RemoteName,int NewAttr); BOOL DCPCALL FsSetTime(char* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime); BOOL DCPCALL FsSetTimeW(WCHAR* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime); void DCPCALL FsStatusInfo(char* RemoteDir,int InfoStartEnd,int InfoOperation); void DCPCALL FsStatusInfoW(WCHAR* RemoteDir,int InfoStartEnd,int InfoOperation); void DCPCALL FsGetDefRootName(char* DefRootName,int maxlen); int DCPCALL FsExtractCustomIcon(char* RemoteName,int ExtractFlags,HICON* TheIcon); int DCPCALL FsExtractCustomIconW(WCHAR* RemoteName,int ExtractFlags,HICON* TheIcon); void DCPCALL FsSetDefaultParams(FsDefaultParamStruct* dps); int DCPCALL FsGetPreviewBitmap(char* RemoteName,int width,int height,HBITMAP* ReturnedBitmap); int DCPCALL FsGetPreviewBitmapW(WCHAR* RemoteName,int width,int height,HBITMAP* ReturnedBitmap); BOOL DCPCALL FsLinksToLocalFiles(void); BOOL DCPCALL FsGetLocalName(char* RemoteName,int maxlen); BOOL DCPCALL FsGetLocalNameW(WCHAR* RemoteName,int maxlen); // ************************** content plugin extension **************************** // #define ft_nomorefields 0 #define ft_numeric_32 1 #define ft_numeric_64 2 #define ft_numeric_floating 3 #define ft_date 4 #define ft_time 5 #define ft_boolean 6 #define ft_multiplechoice 7 #define ft_string 8 #define ft_fulltext 9 #define ft_datetime 10 #define ft_stringw 11 // Should only be returned by Unicode function // for FsContentGetValue #define ft_nosuchfield -1 // error, invalid field number given #define ft_fileerror -2 // file i/o error #define ft_fieldempty -3 // field valid, but empty #define ft_ondemand -4 // field will be retrieved only when user presses <SPACEBAR> #define ft_delayed 0 // field takes a long time to extract -> try again in background // for FsContentSetValue #define ft_setsuccess 0 // setting of the attribute succeeded // for FsContentGetSupportedFieldFlags #define contflags_edit 1 #define contflags_substsize 2 #define contflags_substdatetime 4 #define contflags_substdate 6 #define contflags_substtime 8 #define contflags_substattributes 10 #define contflags_substattributestr 12 #define contflags_substmask 14 // for FsContentSetValue #define setflags_first_attribute 1 // First attribute of this file #define setflags_last_attribute 2 // Last attribute of this file #define setflags_only_date 4 // Only set the date of the datetime value! #define CONTENT_DELAYIFSLOW 1 // ContentGetValue called in foreground typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ContentDefaultParamStruct; typedef struct { WORD wYear; WORD wMonth; WORD wDay; } tdateformat,*pdateformat; typedef struct { WORD wHour; WORD wMinute; WORD wSecond; } ttimeformat,*ptimeformat; int DCPCALL FsContentGetSupportedField(int FieldIndex,char* FieldName,char* Units,int maxlen); int DCPCALL FsContentGetValue(char* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); int DCPCALL FsContentGetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); void DCPCALL FsContentStopGetValue(char* FileName); void DCPCALL FsContentStopGetValueW(WCHAR* FileName); int DCPCALL FsContentGetDefaultSortOrder(int FieldIndex); void DCPCALL FsContentPluginUnloading(void); int DCPCALL FsContentGetSupportedFieldFlags(int FieldIndex); int DCPCALL FsContentSetValue(char* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL FsContentSetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); BOOL DCPCALL FsContentGetDefaultView(char* ViewContents,char* ViewHeaders,char* ViewWidths,char* ViewOptions,int maxlen); BOOL DCPCALL FsContentGetDefaultViewW(WCHAR* ViewContents,WCHAR* ViewHeaders,WCHAR* ViewWidths,WCHAR* ViewOptions,int maxlen);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wdxplugin.pas������������������������������������������������������������������0000644�0001750�0000144�00000010174�15104114162�016077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit WdxPlugin; { Content plugins } interface uses SysUtils; const ft_nomorefields=0; ft_numeric_32=1; ft_numeric_64=2; ft_numeric_floating=3; ft_date=4; ft_time=5; ft_boolean=6; ft_multiplechoice=7; ft_string=8; ft_fulltext=9; ft_datetime=10; ft_stringw=11; ft_fulltextw=12; // for ContentGetValue ft_nosuchfield=-1; ft_fileerror=-2; ft_fieldempty=-3; ft_ondemand=-4; ft_notsupported=-5; ft_setcancel=-6; ft_delayed=0; // for ContentSetValue ft_setsuccess=0; // setting of the attribute succeeded // for ContentGetSupportedFieldFlags contflags_edit=1; contflags_substsize=2; contflags_substdatetime=4; contflags_substdate=6; contflags_substtime=8; contflags_substattributes=10; contflags_substattributestr=12; contflags_passthrough_size_float=14; contflags_substmask=14; contflags_fieldedit=16; // for ContentSendStateInformation contst_readnewdir=1; contst_refreshpressed=2; contst_showhint=4; setflags_first_attribute=1; // First attribute of this file setflags_last_attribute=2; // Last attribute of this file setflags_only_date=4; // Only set the date of the datetime value! CONTENT_DELAYIFSLOW=1; // ContentGetValue called in foreground CONTENT_PASSTHROUGH=2; // If requested via contflags_passthrough_size_float: The size // is passed in as floating value, TC expects correct value // from the given units value, and optionally a text string type tContentDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pContentDefaultParamStruct=^tContentDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; { Function prototypes: } (* procedure ContentGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetValueW(FileName:pwidechar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSetDefaultParams(dps:pContentDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentPluginUnloading; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentStopGetValue(FileName:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentStopGetValueW(FileName:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetDefaultSortOrder(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetSupportedFieldFlags(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentSetValue(FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentSetValueW(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSendStateInformation(state:integer;path:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSendStateInformationW(state:integer;path:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentEditValue(handle:thandle;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pchar;maxlen:integer;flags:integer;langidentifier:pchar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wdxplugin.h��������������������������������������������������������������������0000644�0001750�0000144�00000007404�15104114162�015545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _WDX_H #define _WDX_H #include "common.h" // Contents of file contplug.h version 2.0 #define ft_nomorefields 0 #define ft_numeric_32 1 #define ft_numeric_64 2 #define ft_numeric_floating 3 #define ft_date 4 #define ft_time 5 #define ft_boolean 6 #define ft_multiplechoice 7 #define ft_string 8 #define ft_fulltext 9 #define ft_datetime 10 #define ft_stringw 11 #define ft_fulltextw 12 // for ContentGetValue #define ft_nosuchfield -1 // error, invalid field number given #define ft_fileerror -2 // file i/o error #define ft_fieldempty -3 // field valid, but empty #define ft_ondemand -4 // field will be retrieved only when user presses <SPACEBAR> #define ft_notsupported -5 // function not supported #define ft_setcancel -6 // user clicked cancel in field editor #define ft_delayed 0 // field takes a long time to extract -> try again in background // for ContentSetValue #define ft_setsuccess 0 // setting of the attribute succeeded // for ContentGetSupportedFieldFlags #define contflags_edit 1 #define contflags_substsize 2 #define contflags_substdatetime 4 #define contflags_substdate 6 #define contflags_substtime 8 #define contflags_substattributes 10 #define contflags_substattributestr 12 #define contflags_passthrough_size_float 14 #define contflags_substmask 14 #define contflags_fieldedit 16 #define contst_readnewdir 1 #define contst_refreshpressed 2 #define contst_showhint 4 #define setflags_first_attribute 1 // First attribute of this file #define setflags_last_attribute 2 // Last attribute of this file #define setflags_only_date 4 // Only set the date of the datetime value! #define editflags_initialize 1 // The data passed to the plugin may be used to // initialize the edit dialog #define CONTENT_DELAYIFSLOW 1 // ContentGetValue called in foreground #define CONTENT_PASSTHROUGH 2 // If requested via contflags_passthrough_size_float: The size // is passed in as floating value, TC expects correct value // from the given units value, and optionally a text string typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ContentDefaultParamStruct; typedef struct { WORD wYear; WORD wMonth; WORD wDay; } tdateformat,*pdateformat; typedef struct { WORD wHour; WORD wMinute; WORD wSecond; } ttimeformat,*ptimeformat; #ifdef __cplusplus extern "C" { #endif int DCPCALL ContentGetDetectString(char* DetectString,int maxlen); int DCPCALL ContentGetSupportedField(int FieldIndex,char* FieldName,char* Units,int maxlen); int DCPCALL ContentGetValue(char* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); int DCPCALL ContentGetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); void DCPCALL ContentSetDefaultParams(ContentDefaultParamStruct* dps); void DCPCALL ContentPluginUnloading(void); void DCPCALL ContentStopGetValue(char* FileName); void DCPCALL ContentStopGetValueW(WCHAR* FileName); int DCPCALL ContentGetDefaultSortOrder(int FieldIndex); int DCPCALL ContentGetSupportedFieldFlags(int FieldIndex); int DCPCALL ContentSetValue(char* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL ContentSetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL ContentEditValue(HWND ParentWin,int FieldIndex,int UnitIndex,int FieldType, void* FieldValue,int maxlen,int flags,char* langidentifier); void DCPCALL ContentSendStateInformation(int state,char* path); void DCPCALL ContentSendStateInformationW(int state,WCHAR* path); #ifdef __cplusplus } #endif #endif // _WDX_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wcxplugin.pas������������������������������������������������������������������0000644�0001750�0000144�00000015545�15104114162�016105� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Contents of file wcxhead.pas } { It contains definitions of error codes, flags and callbacks } { Ver. 2.20 with Unicode support } unit WcxPlugin; interface const {Error codes returned to calling application} E_SUCCESS= 0; {Success} E_END_ARCHIVE= 10; {No more files in archive} E_NO_MEMORY= 11; {Not enough memory} E_BAD_DATA= 12; {Data is bad} E_BAD_ARCHIVE= 13; {CRC error in archive data} E_UNKNOWN_FORMAT= 14; {Archive format unknown} E_EOPEN= 15; {Cannot open existing file} E_ECREATE= 16; {Cannot create file} E_ECLOSE= 17; {Error closing file} E_EREAD= 18; {Error reading from file} E_EWRITE= 19; {Error writing to file} E_SMALL_BUF= 20; {Buffer too small} E_EABORTED= 21; {Function aborted by user} E_NO_FILES= 22; {No files found} E_TOO_MANY_FILES= 23; {Too many files to pack} E_NOT_SUPPORTED= 24; {Function not supported} E_HANDLED= -32769; {Handled error} E_UNKNOWN= +32768; {Unknown error} {Unpacking flags} PK_OM_LIST= 0; PK_OM_EXTRACT= 1; {Flags for ProcessFile} PK_SKIP= 0; {Skip file (no unpacking)} PK_TEST= 1; {Test file integrity} PK_EXTRACT= 2; {Extract file to disk} {Flags passed through ChangeVolProc} PK_VOL_ASK= 0; {Ask user for location of next volume} PK_VOL_NOTIFY= 1; {Notify app that next volume will be unpacked} {Packing flags} {For PackFiles} PK_PACK_MOVE_FILES= 1; {Delete original after packing} PK_PACK_SAVE_PATHS= 2; {Save path names of files} PK_PACK_ENCRYPT= 4; {Ask user for password, then encrypt} {Returned by GetPackCaps} PK_CAPS_NEW= 1; {Can create new archives} PK_CAPS_MODIFY= 2; {Can modify exisiting archives} PK_CAPS_MULTIPLE= 4; {Archive can contain multiple files} PK_CAPS_DELETE= 8; {Can delete files} PK_CAPS_OPTIONS= 16; {Supports the options dialogbox} PK_CAPS_MEMPACK= 32; {Supports packing in memory} PK_CAPS_BY_CONTENT= 64; {Detect archive type by content} PK_CAPS_SEARCHTEXT= 128; {Allow searching for text in archives} { created with this plugin} PK_CAPS_HIDE= 256; { Show as normal files (hide packer icon) } { open with Ctrl+PgDn, not Enter } PK_CAPS_ENCRYPT= 512; { Plugin supports PK_PACK_ENCRYPT option } BACKGROUND_UNPACK=1; { Which operations are thread-safe? } BACKGROUND_PACK=2; BACKGROUND_MEMPACK=4; { For tar.pluginext in background } {Flags for packing in memory} MEM_OPTIONS_WANTHEADERS=1; {Return archive headers with packed data} {Errors returned by PackToMem} MEMPACK_OK= 0; {Function call finished OK, but there is more data} MEMPACK_DONE= 1; {Function call finished OK, there is no more data} {Flags for PkCryptProc callback} PK_CRYPT_SAVE_PASSWORD=1; PK_CRYPT_LOAD_PASSWORD=2; PK_CRYPT_LOAD_PASSWORD_NO_UI=3; { Load password only if master password has already been entered!} PK_CRYPT_COPY_PASSWORD=4; { Copy encrypted password to new archive name} PK_CRYPT_MOVE_PASSWORD=5; { Move password when renaming an archive} PK_CRYPT_DELETE_PASSWORD=6; { Delete password} PK_CRYPTOPT_MASTERPASS_SET = 1; // The user already has a master password defined { THeaderData Flags } RHDF_ENCRYPTED = $04; { File encrypted with password } type { Unsigned integer with pointer size } TArcHandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; {$IFNDEF LCL} HWND = type PtrUInt; // Defined as in LCL {$ENDIF} const wcxInvalidHandle = TArcHandle(-1); { For compatibility with Delphi use $IFDEF's to set calling convention } type {Definition of callback functions called by the DLL} {Ask to swap disk for multi-volume archive} PChangeVolProc=^TChangeVolProc; TChangeVolProc=function(ArcName:pchar;Mode:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PChangeVolProcW=^TChangeVolProcW; TChangeVolProcW=function(ArcName:pwidechar;Mode:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; {Notify that data is processed - used for progress dialog} PProcessDataProc=^TProcessDataProc; TProcessDataProc=function(FileName:pchar;Size:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PProcessDataProcW=^TProcessDataProcW; TProcessDataProcW=function(FileName:pwidechar;Size:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PPkCryptProc = ^TPkCryptProc; TPkCryptProc = function(CryptoNr: Integer; Mode: Integer; ArchiveName, Password: PAnsiChar; MaxLen: Integer): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PPkCryptProcW = ^TPkCryptProcW; TPkCryptProcW = function(CryptoNr: Integer; Mode: Integer; ArchiveName, Password: PWideChar; MaxLen: Integer): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; type PHeaderData = ^THeaderData; THeaderData=packed record ArcName:array [0..259] of char; FileName:array [0..259] of char; Flags, PackSize, UnpSize, HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; end; PHeaderDataEx = ^THeaderDataEx; THeaderDataEx=packed record ArcName:array [0..1023] of char; FileName:array [0..1023] of char; Flags:longint; PackSize, PackSizeHigh, UnpSize, UnpSizeHigh:longword; HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; Reserved:array[0..1023] of char; end; PHeaderDataExW=^THeaderDataExW; THeaderDataExW=packed record ArcName:array [0..1023] of widechar; FileName:array [0..1023] of widechar; Flags:longint; PackSize, PackSizeHigh, UnpSize, UnpSizeHigh:longword; HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; Reserved:array[0..1023] of char; MfileTime: UInt64; end; tOpenArchiveData=packed record ArcName:pchar; OpenMode, OpenResult:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; end; tOpenArchiveDataW=packed record ArcName:pwidechar; OpenMode, OpenResult:longint; CmtBuf:pwidechar; CmtBufSize, CmtSize, CmtState:longint; end; tPackDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..259] of char; end; pPackDefaultParamStruct=^tPackDefaultParamStruct; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/wcxplugin.h��������������������������������������������������������������������0000644�0001750�0000144�00000014106�15104114162�015541� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "common.h" /* Contents of file wcxhead.h */ /* It contains definitions of error codes, flags and callbacks */ /* Error codes returned to calling application */ #define E_SUCCESS 0 /* Success */ #define E_END_ARCHIVE 10 /* No more files in archive */ #define E_NO_MEMORY 11 /* Not enough memory */ #define E_BAD_DATA 12 /* Data is bad */ #define E_BAD_ARCHIVE 13 /* CRC error in archive data */ #define E_UNKNOWN_FORMAT 14 /* Archive format unknown */ #define E_EOPEN 15 /* Cannot open existing file */ #define E_ECREATE 16 /* Cannot create file */ #define E_ECLOSE 17 /* Error closing file */ #define E_EREAD 18 /* Error reading from file */ #define E_EWRITE 19 /* Error writing to file */ #define E_SMALL_BUF 20 /* Buffer too small */ #define E_EABORTED 21 /* Function aborted by user */ #define E_NO_FILES 22 /* No files found */ #define E_TOO_MANY_FILES 23 /* Too many files to pack */ #define E_NOT_SUPPORTED 24 /* Function not supported */ /* flags for unpacking */ #define PK_OM_LIST 0 #define PK_OM_EXTRACT 1 /* flags for ProcessFile */ #define PK_SKIP 0 /* Skip this file */ #define PK_TEST 1 /* Test file integrity */ #define PK_EXTRACT 2 /* Extract to disk */ /* Flags passed through ChangeVolProc */ #define PK_VOL_ASK 0 /* Ask user for location of next volume */ #define PK_VOL_NOTIFY 1 /* Notify app that next volume will be unpacked */ /* Flags for packing */ /* For PackFiles */ #define PK_PACK_MOVE_FILES 1 /* Delete original after packing */ #define PK_PACK_SAVE_PATHS 2 /* Save path names of files */ #define PK_PACK_ENCRYPT 4 /* Ask user for password, then encrypt */ /* Returned by GetPackCaps */ #define PK_CAPS_NEW 1 /* Can create new archives */ #define PK_CAPS_MODIFY 2 /* Can modify exisiting archives */ #define PK_CAPS_MULTIPLE 4 /* Archive can contain multiple files */ #define PK_CAPS_DELETE 8 /* Can delete files */ #define PK_CAPS_OPTIONS 16 /* Has options dialog */ #define PK_CAPS_MEMPACK 32 /* Supports packing in memory */ #define PK_CAPS_BY_CONTENT 64 /* Detect archive type by content */ #define PK_CAPS_SEARCHTEXT 128 /* Allow searching for text in archives */ /* created with this plugin} */ #define PK_CAPS_HIDE 256 /* Show as normal files (hide packer */ /* icon), open with Ctrl+PgDn, not Enter*/ #define PK_CAPS_ENCRYPT 512 /* Plugin supports PK_PACK_ENCRYPT option*/ /* Flags for packing in memory */ #define MEM_OPTIONS_WANTHEADERS 1 /* Return archive headers with packed data */ /* Errors returned by PackToMem */ #define MEMPACK_OK 0 /* Function call finished OK, but there is more data */ #define MEMPACK_DONE 1 /* Function call finished OK, there is no more data */ #define PK_CRYPT_SAVE_PASSWORD 1 #define PK_CRYPT_LOAD_PASSWORD 2 #define PK_CRYPT_LOAD_PASSWORD_NO_UI 3 // Load password only if master password has already been entered! #define PK_CRYPT_COPY_PASSWORD 4 // Copy encrypted password to new archive name #define PK_CRYPT_MOVE_PASSWORD 5 // Move password when renaming an archive #define PK_CRYPT_DELETE_PASSWORD 6 // Delete password #define PK_CRYPTOPT_MASTERPASS_SET 1 // The user already has a master password defined /* tHeaderData Flags */ #define RHDF_ENCRYPTED 0x04 // File encrypted with password typedef struct { char ArcName[260]; char FileName[260]; int Flags; int PackSize; int UnpSize; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tHeaderData; typedef struct { char ArcName[1024]; char FileName[1024]; int Flags; unsigned int PackSize; unsigned int PackSizeHigh; unsigned int UnpSize; unsigned int UnpSizeHigh; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; char Reserved[1024]; } tHeaderDataEx; typedef struct { WCHAR ArcName[1024]; WCHAR FileName[1024]; int Flags; unsigned int PackSize; unsigned int PackSizeHigh; unsigned int UnpSize; unsigned int UnpSizeHigh; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; char Reserved[1024]; uint64_t MfileTime; } tHeaderDataExW; typedef struct { char* ArcName; int OpenMode; int OpenResult; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tOpenArchiveData; typedef struct { WCHAR* ArcName; int OpenMode; int OpenResult; WCHAR* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tOpenArchiveDataW; typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } PackDefaultParamStruct; /* Definition of callback functions called by the DLL Ask to swap disk for multi-volume archive */ typedef int (DCPCALL *tChangeVolProc)(char *ArcName,int Mode); typedef int (DCPCALL *tChangeVolProcW)(WCHAR *ArcName,int Mode); /* Notify that data is processed - used for progress dialog */ typedef int (DCPCALL *tProcessDataProc)(char *FileName,int Size); typedef int (DCPCALL *tProcessDataProcW)(WCHAR *FileName,int Size); typedef int (DCPCALL *tPkCryptProc)(int CryptoNr,int Mode, char* ArchiveName,char* Password,int maxlen); typedef int (DCPCALL *tPkCryptProcW)(int CryptoNr,int Mode, WCHAR* ArchiveName,WCHAR* Password,int maxlen); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/help/��������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014276� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/help/pasdoc.css����������������������������������������������������������������0000644�0001750�0000144�00000012103�15104114162�016256� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������body { font-family: Verdana,Arial; color: black; background-color: white; font-size: 12px; } body.navigationframe { font-family: Verdana,Arial; color: white; background-color: #787878; font-size: 12px; } img { border:0px; } a:link {color:#C91E0C; text-decoration: none; } a:visited {color:#7E5C31; text-decoration: none; } a:hover {text-decoration: underline; } a:active {text-decoration: underline; } a.navigation:link { color: white; text-decoration: none; font-size: 12px;} a.navigation:visited { color: white; text-decoration: none; font-size: 12px;} a.navigation:hover { color: white; font-weight: bold; text-decoration: none; font-size: 12px; } a.navigation:active { color: white; text-decoration: none; font-size: 12px;} a.bold:link {color:#C91E0C; text-decoration: none; font-weight:bold; } a.bold:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } a.bold:hover {text-decoration: underline; font-weight:bold; } a.bold:active {text-decoration: underline; font-weight:bold; } a.section {color: green; text-decoration: none; font-weight: bold; } a.section:hover {color: green; text-decoration: underline; font-weight: bold; } ul.useslist a:link {color:#C91E0C; text-decoration: none; font-weight:bold; } ul.useslist a:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } ul.useslist a:hover {text-decoration: underline; font-weight:bold; } ul.useslist a:active {text-decoration: underline; font-weight:bold; } ul.hierarchy { list-style-type:none; } ul.hierarchylevel { list-style-type:none; } p.unitlink a:link {color:#C91E0C; text-decoration: none; font-weight:bold; } p.unitlink a:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } p.unitlink a:hover {text-decoration: underline; font-weight:bold; } p.unitlink a:active {text-decoration: underline; font-weight:bold; } tr.list { background: #FFBF44; } tr.list2 { background: #FFC982; } tr.listheader { background: #C91E0C; color: white; } table.wide_list { border-spacing:2px; width:100%; } table.wide_list td { vertical-align:top; padding:4px; } table.markerlegend { width:auto; } table.markerlegend td.legendmarker { text-align:center; } table.sections { background:white; } table.sections td {background:lightgray; } table.summary td.itemcode { width:100%; } table.detail td.itemcode { width:100%; } td.itemname {white-space:nowrap; } td.itemunit {white-space:nowrap; } td.itemdesc { width:100%; } div.nodescription { color:red; } dl.parameters dt { color:blue; } /* Various browsers have various default styles for <h6>, sometimes ugly for our purposes, so it's best to set things like font-size and font-weight in out pasdoc.css explicitly. */ h6.description_section { /* font-size 100% means that it has the same font size as the parent element, i.e. normal description text */ font-size: 100%; font-weight: bold; /* By default browsers usually have some large margin-bottom and margin-top for <h1-6> tags. In our case, margin-bottom is unnecessary, we want to visually show that description_section is closely related to content below. In this situation (where the font size is just as a normal text), smaller bottom margin seems to look good. */ margin-bottom: 0em; } /* Style applied to Pascal code in documentation (e.g. produced by @longcode tag) } */ span.pascal_string { color: #000080; } span.pascal_keyword { font-weight: bolder; } span.pascal_comment { color: #000080; font-style: italic; } span.pascal_compiler_comment { color: #008000; } span.pascal_numeric { } span.pascal_hex { } p.hint_directive { color: red; } input#search_text { } input#search_submit_button { } acronym.mispelling { background-color: #ffa; } /* Actually this reduces vertical space between *every* paragraph inside list with @itemSpacing(compact). While we would like to reduce this space only for the top of 1st and bottom of last paragraph within each list item. But, well, user probably will not do any paragraph breaks within a list with @itemSpacing(compact) anyway, so it's acceptable solution. */ ul.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } ol.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } dl.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } /* Style for table created by @table tags: just some thin border. This way we have some borders around the cells (so cells are visibly separated), but the border "blends with the background" so it doesn't look too ugly. Hopefully it looks satisfactory in most cases and for most people. We add padding for cells, otherwise they look too close. This is normal thing to do when border-collapse is set to collapse (because this eliminates spacing between cells). */ table.table_tag { border-collapse: collapse; } table.table_tag td { border: 1pt solid gray; padding: 0.3em; } table.table_tag th { border: 1pt solid gray; padding: 0.3em; } table.detail { border: 1pt solid gray; margin-top: 0.3em; margin-bottom: 0.3em; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/sdk/help/dfxplugin.html������������������������������������������������������������0000644�0001750�0000144�00000075033�15104114162�017174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html lang="en-us"> <head> <meta name="GENERATOR" content="PasDoc 0.11.0"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Writing file system plugins for Double Commander

Writing file system plugins for Double Commander

Description Structures Functions and Procedures Types Constants

Description

This help file is about writing file system plugins for Double Commander.

Functions and Procedures

HANDLE __stdcall VfsOpen(char* Path);
void __stdcall VfsClose(HANDLE hInstance);
BOOL __stdcall VfsFindFirst(HANDLE hInstance, char* Path, VFS_FIND_DATA* FindData);
BOOL __stdcall VfsFindNext(HANDLE hInstance, VFS_FIND_DATA* FindData);
void __stdcall VfsFindClose(HANDLE hInstance, VFS_FIND_DATA* FindData);
int __stdcall VfsMoveFile(HANDLE hInstance, char* OldName, char* NewName, int CopyFlags);
int __stdcall VfsDeleteFile(HANDLE hInstance, char* RemotePath);
int __stdcall VfsGetFile(HANDLE hInstance, char* RemoteName, char* LocalName, int CopyFlags);
int __stdcall VfsPutFile(HANDLE hInstance, char* LocalName, char* RemoteName, int CopyFlags);
int __stdcall VfsExecuteFile(HANDLE hInstance, HWND MainWin, char* RemoteName, char* Verb);
int __stdcall VfsCreateFolder(HANDLE hInstance, char* RemotePath);
int __stdcall VfsRemoveFolder(HANDLE hInstance, char* RemotePath);
void __stdcall VfsNetworkGetSupportedProtocols(char* Protocols, int MaxLen);
int __stdcall VfsNetworkGetConnection(HANDLE hInstance, int Index, char* Connection, int MaxLen);
int __stdcall VfsNetworkManageConnection(HANDLE hInstance, HWND MainWin, char* Connection, int Action, int MaxLen);
int __stdcall VfsNetworkOpenConnection(HANDLE hInstance, char* Connection, char* RootDir, char* RemotePath, int MaxLen);
int __stdcall VfsNetworkCloseConnection(HANDLE hInstance, char* Connection);

Constants

VFS_NM_ACTION_ADD     = 0;
VFS_NM_ACTION_EDIT    = 1;
VFS_NM_ACTION_DELETE  = 2;
VFS_RET_OK    = 0;
VFS_RET_FAILED  = 1;
VFS_RET_ABORTED  = 2;
VFS_RET_NOT_SUPPORTED    = 3;
VFS_RET_FILE_NOT_FOUND  = 4;
VFS_RET_FILE_EXISTS  = 5;
VFS_RET_READ_ERROR    = 6;
VFS_RET_WRITE_ERROR  = 7;
VFS_EXEC_OK    = 0;
VFS_EXEC_ERROR  = 1;
VFS_EXEC_YOURSELF    = 2;
VFS_EXEC_SYMLINK  = 3;

Description

Functions and Procedures

HANDLE __stdcall VfsOpen(char* Path);

Initialize and open plugin file system.

Parameters
Path
Path that must be opened by plugin
Returns

The function returns plugin instance handle if successful, NULL otherwise

void __stdcall VfsClose(HANDLE hInstance);

Finalize and close plugin file system.

Parameters
Handle
Plugin file system instance handle that have been returned by FsOpen
BOOL __stdcall VfsMoveFile(HANDLE hInstance, char* OldName, char* NewName, int CopyFlags);

VfsMoveFile is called to transfer (copy or move) a file within the plugin's file system.

Parameters
hInstance
Plugin file system instance handle
OldName
Name of the remote source file, with full path
NewName
Name of the remote destination file, with full path
CopyFlags
Can be a combination of the VFS_COPYFLAGS_XXX flags
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsGetFile(HANDLE hInstance, char* RemoteName,char* LocalName,int CopyFlags);

VfsGetFile is called to transfer a file from the plugin's file system to the normal file system.

Parameters
hInstance
Plugin file system instance handle
RemoteName
Name of the file to be retrieved, with full path
LocalName
Local file name with full path
CopyFlags
Can be a combination of the VFS_COPYFLAGS_XXX flags
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsPutFile(HANDLE hInstance, char* LocalName, char* RemoteName, int CopyFlags);

VfsPutFile is called to transfer a file from the normal file system to the plugin's file system.

Parameters
hInstance
Plugin file system instance handle
LocalName
Local file name with full path
RemoteName
Name of the remote file, with full path
CopyFlags
Can be a combination of the VFS_COPYFLAGS_XXX flags
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsDeleteFile(HANDLE hInstance, char* RemotePath);

VfsDeleteFile is called to delete a file from the plugin's file system.

Parameters
hInstance
Plugin file system instance handle
RemotePath
Name of the file to be deleted, with full path
Returns

The function returns True if successful, False otherwise

int __stdcall VfsExecuteFile(HANDLE hInstance, HWND MainWin, char* RemoteName, char* Verb);

VfsExecuteFile is called to execute a file on the plugin's file system, or show its property sheet.

Parameters
hInstance
Plugin file system instance handle
MainWin
Parent window which can be used for showing a property sheet
RemoteName
Name of the file to be executed, with full path
Verb
Plugin file system instance handle that have been returned by VfsOpen
Returns

The function returns True if successful, False otherwise

int __stdcall VfsCreateFolder(HANDLE hInstance, char* RemoteName);

VfsCreateFolder is called to create a directory on the plugin's file system.

Parameters
hInstance
Plugin file system instance handle
RemoteName
Name of the directory to be created, with full path
Returns

The function returns True if successful, False otherwise

int __stdcall VfsRemoveFolder(HANDLE hInstance, char* RemoteName);

VfsRemoveFolder is called to remove a directory from the plugin's file system.

Parameters
hInstance
Plugin file system instance handle
RemoteName
Name of the directory to be removed, with full path
Returns

The function returns True if successful, False otherwise

void __stdcall VfsNetworkGetSupportedProtocols(char* Protocols, int MaxLen);

VfsNetworkGetSupportedProtocols is called to retrieve protocols that supported by plugin.

Parameters
Protocols
Pointer to a buffer (allocated by the calling program) which can receive the semicolon separated protocol list, e.g. "http://;ftp://"
MaxLen
Maximum number of characters (including the final 0) which fit in the buffer.
BOOL __stdcall VfsNetworkGetConnection(int Index, char* Connection, int MaxLen);

VfsNetworkGetConnection is called to enumerate all connections that plugin has. Index is increased by 1 starting from 0 until the plugin returns False.

Parameters
Index
The index of the connection for which DC requests information. Starting with 0, the Index is increased until the plugin returns False.
Connection
Here the plugin has to return the name of the connection with index Index. You may return a maximum of maxlen characters, including the trailing 0.
MaxLen
The maximum number of characters, including the trailing 0, which may be returned in each of the connections.
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsNetworkManageConnection(HWND MainWin, char* Connection, int Action, int MaxLen);

VfsNetworkManageConnection is called from "Connection manager" dialog when user wants to add/edit/delete connection.

Parameters
MainWin
Parent window which can be used for showing a connection configuration dialog.
Connection
In: Connection name for edit/delete action
Out: Connection name of new connection for add action
Action
Action type: FS_NM_ACTION_ADD or FS_NM_ACTION_EDIT or FS_NM_ACTION_DELETE
MaxLen
Maximum number of characters that you can return in Connection, including the final 0.
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsNetworkOpenConnection(char* Connection, char* RootDir, char* RemotePath, int MaxLen);

VfsNetworkOpenConnection is called when the user wants to open a connection to the network.

Parameters
Connection
In: Connection name
Out: Server address, e.g. "ftp://ftp.chg.ru"
RootDir
Here the plugin has to return the root directory of the opening connection, e.g. "/"
RemotePath
Here the plugin has to return the remote path of the opening connection, e.g. "/pub/Linux"
MaxLen
Maximum number of characters that you can return in Connection, RootDir and RemotePath, including the final 0.
Returns

The function returns True if successful, False otherwise

BOOL __stdcall VfsNetworkCloseConnection(char* Connection);

VfsNetworkOpenConnection is called when the user wants to close a connection to the network.

Parameters
Connection
Connection name
Returns

The function returns True if successful, False otherwise

Constants

VFS_NM_ACTION_ADD     = 0;

Add connection action.

VFS_NM_ACTION_EDIT    = 1;

Edit connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_RET_OK  = 0;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.

VFS_NM_ACTION_DELETE  = 2;

Delete connection action.


Double Commander DFX plugin API doublecmd-1.1.30/sdk/extension.pas0000644000175000001440000001673115104114162016077 0ustar alexxusersunit Extension; interface const // dialog messages DM_FIRST = 0; DM_CLOSE = DM_FIRST+1; // A signal that the dialog is about to close DM_ENABLE = DM_FIRST+2; DM_GETDLGDATA = DM_FIRST+3; DM_GETDLGBOUNDS = DM_FIRST+4; DM_GETITEMBOUNDS = DM_FIRST+5; DM_GETTEXT = DM_FIRST+6; // Retrieve the text of an edit string or the caption of an item DM_KEYDOWN = DM_FIRST+7; DM_KEYUP = DM_FIRST+8; DM_SETDLGDATA = DM_FIRST+9; DM_SETFOCUS = DM_FIRST+10; // Set the keyboard focus to the given dialog item DM_REDRAW = DM_FIRST+11; // Redraw the whole dialog DM_SETTEXT = DM_FIRST+12; // Set a new string value for an edit line or a new caption for an item DM_SETMAXTEXTLENGTH = DM_FIRST+13; // Set the maximum length of an edit string DM_SHOWDIALOG = DM_FIRST+14; // Show/hide the dialog window DM_SHOWITEM = DM_FIRST+15; // Show/hide a dialog item DM_GETCHECK = DM_FIRST+16; // Retrieve the state of TCheckBox or TRadioButton items DM_SETCHECK = DM_FIRST+17; // Change the state of TCheckBox and TRadioButton items DM_LISTGETITEM = DM_FIRST+18; // Retrieve a list item DM_LISTGETITEMINDEX = DM_FIRST+19; // Get current item index in a list DM_LISTSETITEMINDEX = DM_FIRST+20; // Set current item index in a list DM_LISTDELETE = DM_FIRST+21; DM_LISTADD = DM_FIRST+22; DM_LISTADDSTR = DM_FIRST+23; DM_LISTUPDATE = DM_FIRST+24; DM_LISTINSERT = DM_FIRST+25; DM_LISTINDEXOF = DM_FIRST+26; DM_LISTGETCOUNT = DM_FIRST+27; DM_LISTGETDATA = DM_FIRST+28; DM_LISTSETDATA = DM_FIRST+29; DM_SETDLGBOUNDS = DM_FIRST+30; DM_SETITEMBOUNDS = DM_FIRST+31; DM_GETDROPPEDDOWN = DM_FIRST+32; DM_SETDROPPEDDOWN = DM_FIRST+33; DM_GETITEMDATA = DM_FIRST+34; DM_SETITEMDATA = DM_FIRST+35; DM_LISTSET = DM_FIRST+36; DM_SETPROGRESSVALUE = DM_FIRST+37; DM_SETPROGRESSSTYLE = DM_FIRST+38; DM_SETPASSWORDCHAR = DM_FIRST+39; DM_LISTCLEAR = DM_FIRST+40; DM_TIMERSETINTERVAL = DM_FIRST+41; // events messages DN_FIRST = $1000; DN_CLICK = DN_FIRST+1; // Sent after mouse click DN_DBLCLICK = DN_FIRST+2; // Sent after mouse double click DN_CHANGE = DN_FIRST+3; // Sent after the dialog item is changed DN_GOTFOCUS = DN_FIRST+4; // Sent when the dialog item gets input focus DN_INITDIALOG = DN_FIRST+5; // Sent before showing the dialog DN_KILLFOCUS = DN_FIRST+6; // Sent before a dialog item loses the input focus DN_TIMER = DN_FIRST+7; // Sent when a timer expires DN_KEYDOWN = DM_KEYDOWN; DN_KEYUP = DM_KEYUP; DN_CLOSE = DM_CLOSE; // Sent before the dialog is closed DM_USER = $4000; // Starting value for user defined messages const // MessageBox: To indicate the buttons displayed in the message box, // specify one of the following values. MB_OK = $00000000; MB_OKCANCEL = $00000001; MB_ABORTRETRYIGNORE = $00000002; MB_YESNOCANCEL = $00000003; MB_YESNO = $00000004; MB_RETRYCANCEL = $00000005; MB_ICONHAND = $00000010; MB_ICONQUESTION = $00000020; MB_ICONEXCLAMATION = $00000030; MB_ICONASTERICK = $00000040; MB_ICONWARNING = MB_ICONEXCLAMATION; MB_ICONERROR = MB_ICONHAND; MB_ICONSTOP = MB_ICONHAND; MB_ICONINFORMATION = MB_ICONASTERICK; // MessageBox: To indicate the default button, specify one of the following values. MB_DEFBUTTON1 = $00000000; MB_DEFBUTTON2 = $00000100; MB_DEFBUTTON3 = $00000200; MB_DEFBUTTON4 = $00000300; // MessageBox: Return values ID_OK = 1; ID_CANCEL = 2; ID_ABORT = 3; ID_RETRY = 4; ID_IGNORE = 5; ID_YES = 6; ID_NO = 7; ID_CLOSE = 8; ID_HELP = 9; // DialogBoxParam: Flags DB_LFM = 0; // Data contains a form in the LFM format DB_LRS = 1; // Data contains a form in the LRS format DB_FILENAME = 2; // Data contains a form file name (*.lfm) const EXT_MAX_PATH = 16384; // 16 Kb { For compatibility with Delphi use $IFDEF's to set calling convention } type { Dialog window callback function } TDlgProc = function(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; { Definition of callback functions called by the DLL } TInputBoxProc = function(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TMessageBoxProc = function(Text, Caption: PAnsiChar; Flags: Longint): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TMsgChoiceBoxProc = function(Text, Caption: PAnsiChar; Buttons: PPAnsiChar; BtnDef, BtnEsc: Integer): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLFMProc = function(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLRSProc = function(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLFMFileProc = function(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxParamProc = function(Data: Pointer; DataSize: LongWord; DlgProc: TDlgProc; Flags: LongWord; UserData, Reserved: Pointer): UIntPtr; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TTranslateStringProc = function(Translation: Pointer; Identifier, Original: PAnsiChar; Output: PAnsiChar; OutLen: Integer): Integer {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; type PExtensionStartupInfo = ^TExtensionStartupInfo; TExtensionStartupInfo = packed record // The size of the structure, in bytes StructSize: LongWord; // Directory where plugin is located (UTF-8 encoded) PluginDir: packed array [0..Pred(EXT_MAX_PATH)] of AnsiChar; // Directory where plugin configuration file must be located (UTF-8 encoded) PluginConfDir: packed array [0..Pred(EXT_MAX_PATH)] of AnsiChar; // Dialog API InputBox: TInputBoxProc; MessageBox: TMessageBoxProc; DialogBoxLFM: TDialogBoxLFMProc; DialogBoxLRS: TDialogBoxLRSProc; DialogBoxLFMFile: TDialogBoxLFMFileProc; SendDlgMsg: TDlgProc; Translation: Pointer; TranslateString: TTranslateStringProc; VersionAPI: UIntPtr; MsgChoiceBox: TMsgChoiceBoxProc; DialogBoxParam: TDialogBoxParamProc; // Reserved for future API extension Reserved: packed array [0..Pred(4091 * SizeOf(Pointer))] of Byte; end; type TExtensionInitializeProc = procedure(StartupInfo: PExtensionStartupInfo); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TExtensionFinalizeProc = procedure(Reserved: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; implementation (* Plugin must implement this function for working with Extension API procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ExtensionFinalize(Reserved: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) end. doublecmd-1.1.30/sdk/extension.h0000644000175000001440000001413115104114162015533 0ustar alexxusers#include "common.h" /* dialog messages */ #define DM_FIRST 0 #define DM_CLOSE DM_FIRST+1 /* A signal that the dialog is about to close */ #define DM_ENABLE DM_FIRST+2 #define DM_GETDLGDATA DM_FIRST+3 #define DM_GETDLGBOUNDS DM_FIRST+4 #define DM_GETITEMBOUNDS DM_FIRST+5 #define DM_GETTEXT DM_FIRST+6 /* Retrieve the text of an edit string or the caption of an item */ #define DM_KEYDOWN DM_FIRST+7 #define DM_KEYUP DM_FIRST+8 #define DM_SETDLGDATA DM_FIRST+9 #define DM_SETFOCUS DM_FIRST+10 /* Set the keyboard focus to the given dialog item */ #define DM_REDRAW DM_FIRST+11 /* Redraw the whole dialog */ #define DM_SETTEXT DM_FIRST+12 /* Set a new string value for an edit line or a new caption for an item */ #define DM_SETMAXTEXTLENGTH DM_FIRST+13 /* Set the maximum length of an edit string */ #define DM_SHOWDIALOG DM_FIRST+14 /* Show/hide the dialog window */ #define DM_SHOWITEM DM_FIRST+15 /* Show/hide a dialog item */ #define DM_GETCHECK DM_FIRST+16 /* Retrieve the state of TCheckBox or TRadioButton items */ #define DM_SETCHECK DM_FIRST+17 /* Change the state of TCheckBox and TRadioButton items */ #define DM_LISTGETITEM DM_FIRST+18 /* Retrieve a list item */ #define DM_LISTGETITEMINDEX DM_FIRST+19 /* Get current item index in a list */ #define DM_LISTSETITEMINDEX DM_FIRST+20 /* Set current item index in a list */ #define DM_LISTDELETE DM_FIRST+21 #define DM_LISTADD DM_FIRST+22 #define DM_LISTADDSTR DM_FIRST+23 #define DM_LISTUPDATE DM_FIRST+24 #define DM_LISTINSERT DM_FIRST+25 #define DM_LISTINDEXOF DM_FIRST+26 #define DM_LISTGETCOUNT DM_FIRST+27 #define DM_LISTGETDATA DM_FIRST+28 #define DM_LISTSETDATA DM_FIRST+29 #define DM_SETDLGBOUNDS DM_FIRST+30 #define DM_SETITEMBOUNDS DM_FIRST+31 #define DM_GETDROPPEDDOWN DM_FIRST+32 #define DM_SETDROPPEDDOWN DM_FIRST+33 #define DM_GETITEMDATA DM_FIRST+34 #define DM_SETITEMDATA DM_FIRST+35 #define DM_LISTSET DM_FIRST+36 #define DM_SETPROGRESSVALUE DM_FIRST+37 #define DM_SETPROGRESSSTYLE DM_FIRST+38 #define DM_SETPASSWORDCHAR DM_FIRST+39 #define DM_LISTCLEAR DM_FIRST+40 #define DM_TIMERSETINTERVAL DM_FIRST+41 /* events messages */ #define DN_FIRST 0x1000 #define DN_CLICK DN_FIRST+1 /* Sent after mouse click */ #define DN_DBLCLICK DN_FIRST+2 /* Sent after mouse double click */ #define DN_CHANGE DN_FIRST+3 /* Sent after the dialog item is changed */ #define DN_GOTFOCUS DN_FIRST+4 /* Sent when the dialog item gets input focus */ #define DN_INITDIALOG DN_FIRST+5 /* Sent before showing the dialog */ #define DN_KILLFOCUS DN_FIRST+6 /* Sent before a dialog item loses the input focus */ #define DN_TIMER DN_FIRST+7 /* Sent when a timer expires */ #define DN_KEYDOWN DM_KEYDOWN #define DN_KEYUP DM_KEYUP #define DN_CLOSE DM_CLOSE /* Sent before the dialog is closed */ #define DM_USER 0x4000 /* Starting value for user defined messages */ // MessageBox: To indicate the buttons displayed in the message box, // specify one of the following values. #define MB_OK 0x00000000 #define MB_OKCANCEL 0x00000001 #define MB_ABORTRETRYIGNORE 0x00000002 #define MB_YESNOCANCEL 0x00000003 #define MB_YESNO 0x00000004 #define MB_RETRYCANCEL 0x00000005 #define MB_ICONHAND 0x00000010 #define MB_ICONQUESTION 0x00000020 #define MB_ICONEXCLAMATION 0x00000030 #define MB_ICONASTERICK 0x00000040 #define MB_ICONWARNING MB_ICONEXCLAMATION #define MB_ICONERROR MB_ICONHAND #define MB_ICONSTOP MB_ICONHAND #define MB_ICONINFORMATION MB_ICONASTERICK // MessageBox: To indicate the default button, specify one of the following values. #define MB_DEFBUTTON1 0x00000000 #define MB_DEFBUTTON2 0x00000100 #define MB_DEFBUTTON3 0x00000200 #define MB_DEFBUTTON4 0x00000300 // MessageBox: Return values #define ID_OK 1 #define ID_CANCEL 2 #define ID_ABORT 3 #define ID_RETRY 4 #define ID_IGNORE 5 #define ID_YES 6 #define ID_NO 7 #define ID_CLOSE 8 #define ID_HELP 9 // DialogBoxParam: Flags #define DB_LFM 0 // Data contains a form in the LFM format #define DB_LRS 1 // Data contains a form in the LRS format #define DB_FILENAME 2 // Data contains a form file name (*.lfm) /* other */ #define EXT_MAX_PATH 16384 /* 16 Kb */ /* Dialog window callback function */ typedef intptr_t (DCPCALL *tDlgProc)(uintptr_t pDlg, char* DlgItemName, intptr_t Msg, intptr_t wParam, intptr_t lParam); /* Definition of callback functions called by the DLL */ typedef BOOL (DCPCALL *tInputBoxProc)(char* Caption, char* Prompt, BOOL MaskInput, char* Value, int ValueMaxLen); typedef int (DCPCALL *tMessageBoxProc)(char* Text, char* Caption, long Flags); typedef int (DCPCALL *tMsgChoiceBoxProc)(char* Text, char* Caption, char** Buttons, int BtnDef, int BtnEsc); typedef BOOL (DCPCALL *tDialogBoxLFMProc)(intptr_t LFMData, unsigned long DataSize, tDlgProc DlgProc); typedef BOOL (DCPCALL *tDialogBoxLRSProc)(intptr_t LRSData, unsigned long DataSize, tDlgProc DlgProc); typedef BOOL (DCPCALL *tDialogBoxLFMFileProc)(char* LFMFileName, tDlgProc DlgProc); typedef uintptr_t (DCPCALL *tDialogBoxParamProc)(void* Data, uint32_t DataSize, tDlgProc DlgProc, uint32_t Flags, void *UserData, void* Reserved); typedef int (DCPCALL *tTranslateStringProc)(void *Translation, const char *Identifier, const char *Original, char *Output, int OutLen); #pragma pack(push) #pragma pack(1) typedef struct { uint32_t StructSize; char PluginDir[EXT_MAX_PATH]; char PluginConfDir[EXT_MAX_PATH]; tInputBoxProc InputBox; tMessageBoxProc MessageBox; tDialogBoxLFMProc DialogBoxLFM; tDialogBoxLRSProc DialogBoxLRS; tDialogBoxLFMFileProc DialogBoxLFMFile; tDlgProc SendDlgMsg; void *Translation; tTranslateStringProc TranslateString; uintptr_t VersionAPI; tMsgChoiceBoxProc MsgChoiceBox; tDialogBoxParamProc DialogBoxParam; unsigned char Reserved[4091 * sizeof(void *)]; } tExtensionStartupInfo; #pragma pack(pop) typedef void (DCPCALL tExtensionInitializeProc)(tExtensionStartupInfo* StartupInfo); typedef void (DCPCALL tExtensionFinalizeProc)(void* Reserved); /* Plugin must implement this function for working with Extension API void DCPCALL ExtensionInitialize(tExtensionStartupInfo* StartupInfo); void DCPCALL ExtensionFinalize(void* Reserved); */ doublecmd-1.1.30/sdk/dsxplugin.pas0000644000175000001440000000332115104114162016067 0ustar alexxusersunit DsxPlugin; {$include calling.inc} interface uses SysUtils; type PDsxSearchRecord = ^TDsxSearchRecord; TDsxSearchRecord = record StartPath: array[0..1023] of AnsiChar; FileMask: array[0..1023] of AnsiChar; Attributes: Cardinal; AttribStr: array[0..127] of AnsiChar; CaseSensitive: Boolean; { Date/time search } IsDateFrom, IsDateTo, IsTimeFrom, IsTimeTo: Boolean; DateTimeFrom, DateTimeTo: TDateTime; { File size search } IsFileSizeFrom, IsFileSizeTo: Boolean; FileSizeFrom, FileSizeTo: Int64; { Find/replace text } IsFindText: Boolean; FindText: array[0..1023] of AnsiChar; IsReplaceText: Boolean; ReplaceText: array[0..1023] of AnsiChar; NotContainingText: Boolean; end; TDsxDefaultParamStruct = record Size, PluginInterfaceVersionLow, PluginInterfaceVersionHi: Longint; DefaultIniName: array[0..MAX_PATH - 1] of Char; end; PDsxDefaultParamStruct = ^TDsxDefaultParamStruct; { For compatibility with Delphi use $IFDEF's to set calling convention } {Prototypes} {Callbacks procs} TSAddFileProc = procedure(PluginNr: Integer; FoundFile: PChar); dcpcall; //if FoundFile='' then searching is finished TSUpdateStatusProc = procedure(PluginNr: Integer; CurrentFile: PChar; FilesScaned: Integer); dcpcall; {Mandatory (must be implemented)} TSInit = function(dps: PDsxDefaultParamStruct; pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): Integer; dcpcall; TSStartSearch = procedure(PluginNr: Integer; pSearchRec: PDsxSearchRecord); dcpcall; TSStopSearch = procedure(PluginNr: Integer); dcpcall; TSFinalize = procedure(PluginNr: Integer); dcpcall; implementation end. doublecmd-1.1.30/sdk/common.h0000644000175000001440000000300015104114162015000 0ustar alexxusers#ifndef _COMMON_H #define _COMMON_H #ifdef __GNUC__ #include #if defined(__WIN32__) || defined(_WIN32) || defined(_WIN64) #define DCPCALL __attribute__((stdcall)) #else #define DCPCALL #endif #define MAX_PATH 260 typedef int32_t LONG; typedef uint32_t DWORD; typedef uint16_t WORD; typedef void *HANDLE; typedef HANDLE HICON; typedef HANDLE HBITMAP; typedef HANDLE HWND; typedef int BOOL; typedef char CHAR; typedef uint16_t WCHAR; typedef intptr_t LPARAM; typedef uintptr_t WPARAM; #pragma pack(push, 1) typedef struct _RECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT; typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME,*PFILETIME,*LPFILETIME; typedef struct _WIN32_FIND_DATAA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; CHAR cFileName[MAX_PATH]; CHAR cAlternateFileName[14]; } WIN32_FIND_DATAA,*LPWIN32_FIND_DATAA; typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; WCHAR cFileName[MAX_PATH]; WCHAR cAlternateFileName[14]; } WIN32_FIND_DATAW,*LPWIN32_FIND_DATAW; #pragma pack(pop) #else #if defined(_WIN32) || defined(_WIN64) #define DCPCALL __stdcall #else #define DCPCALL __cdecl #endif #endif #endif // _COMMON_H doublecmd-1.1.30/sdk/calling.inc0000644000175000001440000000014415104114162015451 0ustar alexxusers{$MACRO ON} {$IFDEF MSWINDOWS} {$DEFINE dcpcall:=stdcall} {$ELSE} {$DEFINE dcpcall:=cdecl} {$ENDIF} doublecmd-1.1.30/scripts/0000755000175000001440000000000015104114162014254 5ustar alexxusersdoublecmd-1.1.30/scripts/terminal.sh0000755000175000001440000000113215104114162016423 0ustar alexxusers#!/usr/bin/env bash # Execute command in terminal emulator Mac OS X # Path to temporary script file SCRIPT_FILE=$(mktemp /var/tmp/doublecmd-XXXX) # Add shebang echo "#!/usr/bin/env bash" > $SCRIPT_FILE # Remove temporary script file at exit echo "trap 'rm -f $SCRIPT_FILE' INT TERM EXIT" >> $SCRIPT_FILE # Clear screen echo "clear" >> $SCRIPT_FILE # Change to directory printf -v DIR "%q" "$(pwd)" echo "cd $DIR" >> $SCRIPT_FILE # Copy over target command line echo "$@" >> $SCRIPT_FILE # Make executable chmod +x "$SCRIPT_FILE" # Execute in terminal open -b com.apple.terminal "$SCRIPT_FILE" doublecmd-1.1.30/scripts/rabbit-vcs.py0000644000175000001440000000550315104114162016665 0ustar alexxusers# # This is an extension to the Double Commander to allow # integration with the version control systems. # # Copyright (C) 2009 Jason Heeris # Copyright (C) 2009 Bruce van der Kooij # Copyright (C) 2009 Adam Plumb # Copyright (C) 2014-2021 Alexander Koblov # # RabbitVCS is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # RabbitVCS 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with RabbitVCS; If not, see . # import os, os.path import sys try: from rabbitvcs.util.contextmenuitems import MenuItem, MenuSeparator from rabbitvcs.util.contextmenu import MenuBuilder, MainContextMenu, MainContextMenuCallbacks import rabbitvcs.services.checkerservice except Exception as e: print("RabbitVCS: {}".format(e)) exit(1) class DCSender: """Double Commander sender class""" def rescan_after_process_exit(self, proc, paths): print("rescan_after_process_exit") return class DCMenuItem: """Double Commander menu item class""" identifier = None label = None icon = None menu = [] def connect(self, signal, *callback): return class DCContextMenu(MenuBuilder): """Double Commander context menu class""" signal = "activate" def make_menu_item(self, item, id_magic): menuitem = DCMenuItem() if type(item) is MenuSeparator: menuitem.label = "-" else: menuitem.icon = item.icon menuitem.label = item.make_label() menuitem.identifier = item.callback_name return menuitem def attach_submenu(self, menu_node, submenu_list): menu_node.menu = [] menu_node.identifier = "" for item in submenu_list: menu_node.menu.append(item) def top_level_menu(self, items): return items class DCMainContextMenu(MainContextMenu): """Double Commander main context menu class""" def Execute(self, identifier): # Try to find and execute callback function if hasattr(self.callbacks, identifier): function = getattr(self.callbacks, identifier) if callable(function): function(self, None) def GetMenu(self): return DCContextMenu(self.structure, self.conditions, self.callbacks).menu def GetContextMenu(paths): sender = DCSender() base_dir = os.path.dirname(paths[0]) return DCMainContextMenu(sender, base_dir, paths, None) def StartService(): rabbitvcs.services.checkerservice.start() doublecmd-1.1.30/plugins/0000755000175000001440000000000015104114162014246 5ustar alexxusersdoublecmd-1.1.30/plugins/wlx/0000755000175000001440000000000015104114162015060 5ustar alexxusersdoublecmd-1.1.30/plugins/wlx/wmp/0000755000175000001440000000000015104114162015663 5ustar alexxusersdoublecmd-1.1.30/plugins/wlx/wmp/src/0000755000175000001440000000000015104114162016452 5ustar alexxusersdoublecmd-1.1.30/plugins/wlx/wmp/src/wmplib_1_0_tlb.pas0000644000175000001440000224050315104114162021757 0ustar alexxusersUnit WMPLib_1_0_TLB; // Imported WMPLib on 29.08.2021 15:27:47 from C:\WINDOWS\system32\wmp.dll {$mode delphi}{$H+} interface Uses Windows,ActiveX,Classes,Variants,stdole2,EventSink; Const WMPLibMajorVersion = 1; WMPLibMinorVersion = 0; WMPLibLCID = 0; LIBID_WMPLib : TGUID = '{6BF52A50-394A-11D3-B153-00C04F79FAA6}'; IID_IWMPEvents : TGUID = '{19A6627B-DA9E-47C1-BB23-00B5E668236A}'; IID_IWMPEvents2 : TGUID = '{1E7601FA-47EA-4107-9EA9-9004ED9684FF}'; IID_IWMPSyncDevice : TGUID = '{82A2986C-0293-4FD0-B279-B21B86C058BE}'; IID_IWMPEvents3 : TGUID = '{1F504270-A66B-4223-8E96-26A06C63D69F}'; IID_IWMPCdromRip : TGUID = '{56E2294F-69ED-4629-A869-AEA72C0DCC2C}'; IID_IWMPCdromBurn : TGUID = '{BD94DBEB-417F-4928-AA06-087D56ED9B59}'; IID_IWMPPlaylist : TGUID = '{D5F0F4F1-130C-11D3-B14E-00C04F79FAA6}'; IID_IWMPMedia : TGUID = '{94D55E95-3FAC-11D3-B155-00C04F79FAA6}'; IID_IWMPLibrary : TGUID = '{3DF47861-7DF1-4C1F-A81B-4C26F0F7A7C6}'; IID_IWMPMediaCollection : TGUID = '{8363BC22-B4B4-4B19-989D-1CD765749DD1}'; IID_IWMPStringCollection : TGUID = '{4A976298-8C0D-11D3-B389-00C04F68574B}'; IID_IWMPEvents4 : TGUID = '{26DABCFA-306B-404D-9A6F-630A8405048D}'; IID__WMPOCXEvents : TGUID = '{6BF52A51-394A-11D3-B153-00C04F79FAA6}'; CLASS_WindowsMediaPlayer : TGUID = '{6BF52A52-394A-11D3-B153-00C04F79FAA6}'; IID_IWMPPlayer4 : TGUID = '{6C497D62-8919-413C-82DB-E935FB3EC584}'; IID_IWMPCore3 : TGUID = '{7587C667-628F-499F-88E7-6A6F4E888464}'; IID_IWMPCore2 : TGUID = '{BC17E5B7-7561-4C18-BB90-17D485775659}'; IID_IWMPCore : TGUID = '{D84CCA99-CCE2-11D2-9ECC-0000F8085981}'; IID_IWMPControls : TGUID = '{74C09E02-F828-11D2-A74B-00A0C905F36E}'; IID_IWMPSettings : TGUID = '{9104D1AB-80C9-4FED-ABF0-2E6417A6DF14}'; IID_IWMPPlaylistCollection : TGUID = '{10A13217-23A7-439B-B1C0-D847C79B7774}'; IID_IWMPPlaylistArray : TGUID = '{679409C0-99F7-11D3-9FB7-00105AA620BB}'; IID_IWMPNetwork : TGUID = '{EC21B779-EDEF-462D-BBA4-AD9DDE2B29A7}'; IID_IWMPCdromCollection : TGUID = '{EE4C8FE2-34B2-11D3-A3BF-006097C9B344}'; IID_IWMPCdrom : TGUID = '{CFAB6E98-8730-11D3-B388-00C04F68574B}'; IID_IWMPClosedCaption : TGUID = '{4F2DF574-C588-11D3-9ED0-00C04FB6E937}'; IID_IWMPError : TGUID = '{A12DCF7D-14AB-4C1B-A8CD-63909F06025B}'; IID_IWMPErrorItem : TGUID = '{3614C646-3B3B-4DE7-A81E-930E3F2127B3}'; IID_IWMPDVD : TGUID = '{8DA61686-4668-4A5C-AE5D-803193293DBE}'; IID_IWMPPlayerApplication : TGUID = '{40897764-CEAB-47BE-AD4A-8E28537F9BBF}'; IID_IWMPPlayer3 : TGUID = '{54062B68-052A-4C25-A39F-8B63346511D4}'; IID_IWMPPlayer2 : TGUID = '{0E6B01D1-D407-4C85-BF5F-1C01F6150280}'; IID_IWMPPlayer : TGUID = '{6BF52A4F-394A-11D3-B153-00C04F79FAA6}'; IID_IWMPErrorItem2 : TGUID = '{F75CCEC0-C67C-475C-931E-8719870BEE7D}'; IID_IWMPControls2 : TGUID = '{6F030D25-0890-480F-9775-1F7E40AB5B8E}'; IID_IWMPMedia2 : TGUID = '{AB7C88BB-143E-4EA4-ACC3-E4350B2106C3}'; IID_IWMPMedia3 : TGUID = '{F118EFC7-F03A-4FB4-99C9-1C02A5C1065B}'; IID_IWMPMetadataPicture : TGUID = '{5C29BBE0-F87D-4C45-AA28-A70F0230FFA9}'; IID_IWMPMetadataText : TGUID = '{769A72DB-13D2-45E2-9C48-53CA9D5B7450}'; IID_IWMPSettings2 : TGUID = '{FDA937A4-EECE-4DA5-A0B6-39BF89ADE2C2}'; IID_IWMPControls3 : TGUID = '{A1D1110E-D545-476A-9A78-AC3E4CB1E6BD}'; IID_IWMPClosedCaption2 : TGUID = '{350BA78B-6BC8-4113-A5F5-312056934EB6}'; IID_IWMPMediaCollection2 : TGUID = '{8BA957F5-FD8C-4791-B82D-F840401EE474}'; IID_IWMPQuery : TGUID = '{A00918F3-A6B0-4BFB-9189-FD834C7BC5A5}'; IID_IWMPStringCollection2 : TGUID = '{46AD648D-53F1-4A74-92E2-2A1B68D63FD4}'; IID_IWMPPlayerServices : TGUID = '{1D01FBDB-ADE2-4C8D-9842-C190B95C3306}'; IID_IWMPPlayerServices2 : TGUID = '{1BB1592F-F040-418A-9F71-17C7512B4D70}'; IID_IWMPRemoteMediaServices : TGUID = '{CBB92747-741F-44FE-AB5B-F1A48F3B2A59}'; IID_IWMPSyncServices : TGUID = '{8B5050FF-E0A4-4808-B3A8-893A9E1ED894}'; IID_IWMPLibraryServices : TGUID = '{39C2F8D5-1CF2-4D5E-AE09-D73492CF9EAA}'; IID_IWMPLibrarySharingServices : TGUID = '{82CBA86B-9F04-474B-A365-D6DD1466E541}'; IID_IWMPLibrary2 : TGUID = '{DD578A4E-79B1-426C-BF8F-3ADD9072500B}'; IID_IWMPFolderMonitorServices : TGUID = '{788C8743-E57F-439D-A468-5BC77F2E59C6}'; IID_IWMPSyncDevice2 : TGUID = '{88AFB4B2-140A-44D2-91E6-4543DA467CD1}'; IID_IWMPSyncDevice3 : TGUID = '{B22C85F9-263C-4372-A0DA-B518DB9B4098}'; IID_IWMPPlaylistCtrl : TGUID = '{5F9CFD92-8CAD-11D3-9A7E-00C04F8EFB70}'; IID_IAppDispatch : TGUID = '{E41C88DD-2364-4FF7-A0F5-CA9859AF783F}'; IID_IWMPSafeBrowser : TGUID = '{EF870383-83AB-4EA9-BE48-56FA4251AF10}'; IID_IWMPObjectExtendedProps : TGUID = '{21D077C1-4BAA-11D3-BD45-00C04F6EA5AE}'; IID_IWMPLayoutSubView : TGUID = '{72F486B1-0D43-11D3-BD3F-00C04F6EA5AE}'; IID_IWMPLayoutView : TGUID = '{172E905D-80D9-4C2F-B7CE-2CCB771787A2}'; IID_IWMPEventObject : TGUID = '{5AF0BEC1-46AA-11D3-BD45-00C04F6EA5AE}'; IID_IWMPTheme : TGUID = '{6FCAE13D-E492-4584-9C21-D2C052A2A33A}'; IID_IWMPLayoutSettingsDispatch : TGUID = '{B2C2D18E-97AF-4B6A-A56B-2FFFF470FB81}'; IID_IWMPWindow : TGUID = '{43D5AE92-4332-477C-8883-E0B3B063C5D2}'; IID_IWMPBrandDispatch : TGUID = '{98BB02D4-ED74-43CC-AD6A-45888F2E0DCC}'; IID_IWMPNowPlayingHelperDispatch : TGUID = '{504F112E-77CC-4E3C-A073-5371B31D9B36}'; IID_IWMPNowDoingDispatch : TGUID = '{2A2E0DA3-19FA-4F82-BE18-CD7D7A3B977F}'; IID_IWMPHoverPreviewDispatch : TGUID = '{946B023E-044C-4473-8018-74954F09DC7E}'; IID_IWMPButtonCtrlEvents : TGUID = '{BB17FFF7-1692-4555-918A-6AF7BFACEDD2}'; CLASS_WMPButtonCtrl : TGUID = '{87291B51-0C8E-11D3-BB2A-00A0C93CA73A}'; IID_IWMPButtonCtrl : TGUID = '{87291B50-0C8E-11D3-BB2A-00A0C93CA73A}'; CLASS_WMPListBoxCtrl : TGUID = '{FC1880CF-83B9-43A7-A066-C44CE8C82583}'; IID_IWMPListBoxCtrl : TGUID = '{FC1880CE-83B9-43A7-A066-C44CE8C82583}'; IID_IWMPListBoxItem : TGUID = '{D255DFB8-C22A-42CF-B8B7-F15D7BCF65D6}'; IID_IWMPPlaylistCtrlColumn : TGUID = '{63D9D30F-AE4C-4678-8CA8-5720F4FE4419}'; IID_IWMPSliderCtrlEvents : TGUID = '{CDAC14D2-8BE4-11D3-BB48-00A0C93CA73A}'; CLASS_WMPSliderCtrl : TGUID = '{F2BF2C90-405F-11D3-BB39-00A0C93CA73A}'; IID_IWMPSliderCtrl : TGUID = '{F2BF2C8F-405F-11D3-BB39-00A0C93CA73A}'; IID_IWMPVideoCtrlEvents : TGUID = '{A85C0477-714C-4A06-B9F6-7C8CA38B45DC}'; CLASS_WMPVideoCtrl : TGUID = '{61CECF11-FC3A-11D2-A1CD-005004602752}'; IID_IWMPVideoCtrl : TGUID = '{61CECF10-FC3A-11D2-A1CD-005004602752}'; CLASS_WMPEffects : TGUID = '{47DEA830-D619-4154-B8D8-6B74845D6A2D}'; IID_IWMPEffectsCtrl : TGUID = '{A9EFAB80-0A60-4C3F-BBD1-4558DD2A9769}'; CLASS_WMPEqualizerSettingsCtrl : TGUID = '{93EB32F5-87B1-45AD-ACC6-0F2483DB83BB}'; IID_IWMPEqualizerSettingsCtrl : TGUID = '{2BD3716F-A914-49FB-8655-996D5F495498}'; CLASS_WMPVideoSettingsCtrl : TGUID = '{AE7BFAFE-DCC8-4A73-92C8-CC300CA88859}'; IID_IWMPVideoSettingsCtrl : TGUID = '{07EC23DA-EF73-4BDE-A40F-F269E0B7AFD6}'; CLASS_WMPLibraryTreeCtrl : TGUID = '{D9DE732A-AEE9-4503-9D11-5605589977A8}'; IID_IWMPLibraryTreeCtrl : TGUID = '{B738FCAE-F089-45DF-AED6-034B9E7DB632}'; CLASS_WMPEditCtrl : TGUID = '{6342FCED-25EA-4033-BDDB-D049A14382D3}'; IID_IWMPEditCtrl : TGUID = '{70E1217C-C617-4CFD-BD8A-69CA2043E70B}'; CLASS_WMPSkinList : TGUID = '{A8A55FAC-82EA-4BD7-BD7B-11586A4D99E4}'; IID_IWMPSkinList : TGUID = '{8CEA03A2-D0C5-4E97-9C38-A676A639A51D}'; IID_IWMPPluginUIHost : TGUID = '{5D0AD945-289E-45C5-A9C6-F301F0152108}'; CLASS_WMPMenuCtrl : TGUID = '{BAB3768B-8883-4AEC-9F9B-E14C947913EF}'; IID_IWMPMenuCtrl : TGUID = '{158A7ADC-33DA-4039-A553-BDDBBE389F5C}'; CLASS_WMPAutoMenuCtrl : TGUID = '{6B28F900-8D64-4B80-9963-CC52DDD1FBB4}'; IID_IWMPAutoMenuCtrl : TGUID = '{1AD13E0B-4F3A-41DF-9BE2-F9E6FE0A7875}'; CLASS_WMPRegionalButtonCtrl : TGUID = '{AE3B6831-25A9-11D3-BD41-00C04F6EA5AE}'; IID_IWMPRegionalButtonCtrl : TGUID = '{58D507B1-2354-11D3-BD41-00C04F6EA5AE}'; IID_IWMPRegionalButtonEvents : TGUID = '{50FC8D31-67AC-11D3-BD4C-00C04F6EA5AE}'; CLASS_WMPRegionalButton : TGUID = '{09AEFF11-69EF-11D3-BD4D-00C04F6EA5AE}'; IID_IWMPRegionalButton : TGUID = '{58D507B2-2354-11D3-BD41-00C04F6EA5AE}'; IID_IWMPCustomSliderCtrlEvents : TGUID = '{95F45AA4-ED0A-11D2-BA67-0000F80855E6}'; CLASS_WMPCustomSliderCtrl : TGUID = '{95F45AA3-ED0A-11D2-BA67-0000F80855E6}'; IID_IWMPCustomSlider : TGUID = '{95F45AA2-ED0A-11D2-BA67-0000F80855E6}'; CLASS_WMPTextCtrl : TGUID = '{DDDA102E-0E17-11D3-A2E2-00C04F79F88E}'; IID_IWMPTextCtrl : TGUID = '{237DAC8E-0E32-11D3-A2E2-00C04F79F88E}'; CLASS_WMPPlaylistCtrl : TGUID = '{5F9CFD93-8CAD-11D3-9A7E-00C04F8EFB70}'; IID_ITaskCntrCtrl : TGUID = '{891EADB1-1C45-48B0-B704-49A888DA98C4}'; IID__WMPCoreEvents : TGUID = '{D84CCA96-CCE2-11D2-9ECC-0000F8085981}'; CLASS_WMPCore : TGUID = '{09428D37-E0B9-11D2-B147-00C04F79FAA6}'; IID_IWMPGraphEventHandler : TGUID = '{6B550945-018F-11D3-B14A-00C04F79FAA6}'; IID_IBattery : TGUID = '{F8578BFA-CD8F-4CE1-A684-5B7E85FCA7DC}'; IID_IBatteryPreset : TGUID = '{40C6BDE7-9C90-49D4-AD20-BEF81A6C5F22}'; IID_IBatteryRandomPreset : TGUID = '{F85E2D65-207D-48DB-84B1-915E1735DB17}'; IID_IBatterySavedPreset : TGUID = '{876E7208-0172-4EBB-B08B-2E1D30DFE44C}'; IID_IBarsEffect : TGUID = '{33E9291A-F6A9-11D2-9435-00A0C92A2F2D}'; IID_IWMPExternal : TGUID = '{E2CC638C-FD2C-409B-A1EA-5DDB72DC8E84}'; IID_IWMPExternalColors : TGUID = '{D10CCDFF-472D-498C-B5FE-3630E5405E0A}'; IID_IWMPSubscriptionServiceLimited : TGUID = '{54DF358E-CF38-4010-99F1-F44B0E9000E5}'; IID_IWMPSubscriptionServiceExternal : TGUID = '{2E922378-EE70-4CEB-BBAB-CE7CE4A04816}'; IID_IWMPDownloadManager : TGUID = '{E15E9AD1-8F20-4CC4-9EC7-1A328CA86A0D}'; IID_IWMPDownloadCollection : TGUID = '{0A319C7F-85F9-436C-B88E-82FD88000E1C}'; IID_IWMPDownloadItem2 : TGUID = '{9FBB3336-6DA3-479D-B8FF-67D46E20A987}'; IID_IWMPDownloadItem : TGUID = '{C9470E8E-3F6B-46A9-A0A9-452815C34297}'; IID_IWMPSubscriptionServicePlayMedia : TGUID = '{5F0248C1-62B3-42D7-B927-029119E6AD14}'; IID_IWMPDiscoExternal : TGUID = '{A915CEA2-72DF-41E1-A576-EF0BAE5E5169}'; IID_IWMPCDDVDWizardExternal : TGUID = '{2D7EF888-1D3C-484A-A906-9F49D99BB344}'; IID_IWMPBaseExternal : TGUID = '{F81B2A59-02BC-4003-8B2F-C124AF66FC66}'; IID_IWMPOfflineExternal : TGUID = '{3148E685-B243-423D-8341-8480D6EFF674}'; IID_IWMPDMRAVTransportService : TGUID = '{4E195DB1-9E29-47FC-9CE1-DE9937D32925}'; IID_IWMPDMRConnectionManagerService : TGUID = '{FB61CD38-8DE7-4479-8B76-A8D097C20C70}'; IID_IWMPDMRRenderingControlService : TGUID = '{FF4B1BDA-19F0-42CF-8DDA-19162950C543}'; //Enums Type WMPPlaylistChangeEventType =LongWord; Const wmplcUnknown = $0000000000000000; wmplcClear = $0000000000000001; wmplcInfoChange = $0000000000000002; wmplcMove = $0000000000000003; wmplcDelete = $0000000000000004; wmplcInsert = $0000000000000005; wmplcAppend = $0000000000000006; wmplcPrivate = $0000000000000007; wmplcNameChange = $0000000000000008; wmplcMorph = $0000000000000009; wmplcSort = $000000000000000A; wmplcLast = $000000000000000B; Type WMPDeviceStatus =LongWord; Const wmpdsUnknown = $0000000000000000; wmpdsPartnershipExists = $0000000000000001; wmpdsPartnershipDeclined = $0000000000000002; wmpdsPartnershipAnother = $0000000000000003; wmpdsManualDevice = $0000000000000004; wmpdsNewDevice = $0000000000000005; wmpdsLast = $0000000000000006; Type WMPSyncState =LongWord; Const wmpssUnknown = $0000000000000000; wmpssSynchronizing = $0000000000000001; wmpssStopped = $0000000000000002; wmpssEstimating = $0000000000000003; wmpssLast = $0000000000000004; Type WMPRipState =LongWord; Const wmprsUnknown = $0000000000000000; wmprsRipping = $0000000000000001; wmprsStopped = $0000000000000002; Type WMPBurnFormat =LongWord; Const wmpbfAudioCD = $0000000000000000; wmpbfDataCD = $0000000000000001; Type WMPBurnState =LongWord; Const wmpbsUnknown = $0000000000000000; wmpbsBusy = $0000000000000001; wmpbsReady = $0000000000000002; wmpbsWaitingForDisc = $0000000000000003; wmpbsRefreshStatusPending = $0000000000000004; wmpbsPreparingToBurn = $0000000000000005; wmpbsBurning = $0000000000000006; wmpbsStopped = $0000000000000007; wmpbsErasing = $0000000000000008; wmpbsDownloading = $0000000000000009; Type WMPLibraryType =LongWord; Const wmpltUnknown = $0000000000000000; wmpltAll = $0000000000000001; wmpltLocal = $0000000000000002; wmpltRemote = $0000000000000003; wmpltDisc = $0000000000000004; wmpltPortableDevice = $0000000000000005; Type WMPFolderScanState =LongWord; Const wmpfssUnknown = $0000000000000000; wmpfssScanning = $0000000000000001; wmpfssUpdating = $0000000000000002; wmpfssStopped = $0000000000000003; Type WMPStringCollectionChangeEventType =LongWord; Const wmpsccetUnknown = $0000000000000000; wmpsccetInsert = $0000000000000001; wmpsccetChange = $0000000000000002; wmpsccetDelete = $0000000000000003; wmpsccetClear = $0000000000000004; wmpsccetBeginUpdates = $0000000000000005; wmpsccetEndUpdates = $0000000000000006; Type WMPOpenState =LongWord; Const wmposUndefined = $0000000000000000; wmposPlaylistChanging = $0000000000000001; wmposPlaylistLocating = $0000000000000002; wmposPlaylistConnecting = $0000000000000003; wmposPlaylistLoading = $0000000000000004; wmposPlaylistOpening = $0000000000000005; wmposPlaylistOpenNoMedia = $0000000000000006; wmposPlaylistChanged = $0000000000000007; wmposMediaChanging = $0000000000000008; wmposMediaLocating = $0000000000000009; wmposMediaConnecting = $000000000000000A; wmposMediaLoading = $000000000000000B; wmposMediaOpening = $000000000000000C; wmposMediaOpen = $000000000000000D; wmposBeginCodecAcquisition = $000000000000000E; wmposEndCodecAcquisition = $000000000000000F; wmposBeginLicenseAcquisition = $0000000000000010; wmposEndLicenseAcquisition = $0000000000000011; wmposBeginIndividualization = $0000000000000012; wmposEndIndividualization = $0000000000000013; wmposMediaWaiting = $0000000000000014; wmposOpeningUnknownURL = $0000000000000015; Type WMPPlayState =LongWord; Const wmppsUndefined = $0000000000000000; wmppsStopped = $0000000000000001; wmppsPaused = $0000000000000002; wmppsPlaying = $0000000000000003; wmppsScanForward = $0000000000000004; wmppsScanReverse = $0000000000000005; wmppsBuffering = $0000000000000006; wmppsWaiting = $0000000000000007; wmppsMediaEnded = $0000000000000008; wmppsTransitioning = $0000000000000009; wmppsReady = $000000000000000A; wmppsReconnecting = $000000000000000B; wmppsLast = $000000000000000C; Type WMPSubscriptionDownloadState =LongWord; Const wmpsdlsDownloading = $0000000000000000; wmpsdlsPaused = $0000000000000001; wmpsdlsProcessing = $0000000000000002; wmpsdlsCompleted = $0000000000000003; wmpsdlsCancelled = $0000000000000004; Type WMP_WRITENAMESEX_TYPE =LongWord; Const WMP_WRITENAMES_TYPE_CD_BY_TOC = $0000000000000000; WMP_WRITENAMES_TYPE_CD_BY_CONTENT_ID = $0000000000000001; WMP_WRITENAMES_TYPE_CD_BY_MDQCD = $0000000000000002; WMP_WRITENAMES_TYPE_DVD_BY_DVDID = $0000000000000003; //Forward declarations Type IWMPEvents = interface; IWMPEvents2 = interface; IWMPSyncDevice = interface; IWMPEvents3 = interface; IWMPCdromRip = interface; IWMPCdromBurn = interface; IWMPPlaylist = interface; IWMPPlaylistDisp = dispinterface; IWMPMedia = interface; IWMPMediaDisp = dispinterface; IWMPLibrary = interface; IWMPMediaCollection = interface; IWMPMediaCollectionDisp = dispinterface; IWMPStringCollection = interface; IWMPStringCollectionDisp = dispinterface; IWMPEvents4 = interface; _WMPOCXEvents = dispinterface; IWMPPlayer4 = interface; IWMPPlayer4Disp = dispinterface; IWMPCore3 = interface; IWMPCore3Disp = dispinterface; IWMPCore2 = interface; IWMPCore2Disp = dispinterface; IWMPCore = interface; IWMPCoreDisp = dispinterface; IWMPControls = interface; IWMPControlsDisp = dispinterface; IWMPSettings = interface; IWMPSettingsDisp = dispinterface; IWMPPlaylistCollection = interface; IWMPPlaylistCollectionDisp = dispinterface; IWMPPlaylistArray = interface; IWMPPlaylistArrayDisp = dispinterface; IWMPNetwork = interface; IWMPNetworkDisp = dispinterface; IWMPCdromCollection = interface; IWMPCdromCollectionDisp = dispinterface; IWMPCdrom = interface; IWMPCdromDisp = dispinterface; IWMPClosedCaption = interface; IWMPClosedCaptionDisp = dispinterface; IWMPError = interface; IWMPErrorDisp = dispinterface; IWMPErrorItem = interface; IWMPErrorItemDisp = dispinterface; IWMPDVD = interface; IWMPDVDDisp = dispinterface; IWMPPlayerApplication = interface; IWMPPlayerApplicationDisp = dispinterface; IWMPPlayer3 = interface; IWMPPlayer3Disp = dispinterface; IWMPPlayer2 = interface; IWMPPlayer2Disp = dispinterface; IWMPPlayer = interface; IWMPPlayerDisp = dispinterface; IWMPErrorItem2 = interface; IWMPErrorItem2Disp = dispinterface; IWMPControls2 = interface; IWMPControls2Disp = dispinterface; IWMPMedia2 = interface; IWMPMedia2Disp = dispinterface; IWMPMedia3 = interface; IWMPMedia3Disp = dispinterface; IWMPMetadataPicture = interface; IWMPMetadataPictureDisp = dispinterface; IWMPMetadataText = interface; IWMPMetadataTextDisp = dispinterface; IWMPSettings2 = interface; IWMPSettings2Disp = dispinterface; IWMPControls3 = interface; IWMPControls3Disp = dispinterface; IWMPClosedCaption2 = interface; IWMPClosedCaption2Disp = dispinterface; IWMPMediaCollection2 = interface; IWMPMediaCollection2Disp = dispinterface; IWMPQuery = interface; IWMPQueryDisp = dispinterface; IWMPStringCollection2 = interface; IWMPStringCollection2Disp = dispinterface; IWMPPlayerServices = interface; IWMPPlayerServices2 = interface; IWMPRemoteMediaServices = interface; IWMPSyncServices = interface; IWMPLibraryServices = interface; IWMPLibrarySharingServices = interface; IWMPLibrary2 = interface; IWMPFolderMonitorServices = interface; IWMPSyncDevice2 = interface; IWMPSyncDevice3 = interface; IWMPPlaylistCtrl = interface; IWMPPlaylistCtrlDisp = dispinterface; IAppDispatch = interface; IAppDispatchDisp = dispinterface; IWMPSafeBrowser = interface; IWMPSafeBrowserDisp = dispinterface; IWMPObjectExtendedProps = interface; IWMPObjectExtendedPropsDisp = dispinterface; IWMPLayoutSubView = interface; IWMPLayoutSubViewDisp = dispinterface; IWMPLayoutView = interface; IWMPLayoutViewDisp = dispinterface; IWMPEventObject = interface; IWMPEventObjectDisp = dispinterface; IWMPTheme = interface; IWMPThemeDisp = dispinterface; IWMPLayoutSettingsDispatch = interface; IWMPLayoutSettingsDispatchDisp = dispinterface; IWMPWindow = interface; IWMPWindowDisp = dispinterface; IWMPBrandDispatch = interface; IWMPBrandDispatchDisp = dispinterface; IWMPNowPlayingHelperDispatch = interface; IWMPNowPlayingHelperDispatchDisp = dispinterface; IWMPNowDoingDispatch = interface; IWMPNowDoingDispatchDisp = dispinterface; IWMPHoverPreviewDispatch = interface; IWMPHoverPreviewDispatchDisp = dispinterface; IWMPButtonCtrlEvents = dispinterface; IWMPButtonCtrl = interface; IWMPButtonCtrlDisp = dispinterface; IWMPListBoxCtrl = interface; IWMPListBoxCtrlDisp = dispinterface; IWMPListBoxItem = interface; IWMPListBoxItemDisp = dispinterface; IWMPPlaylistCtrlColumn = interface; IWMPPlaylistCtrlColumnDisp = dispinterface; IWMPSliderCtrlEvents = dispinterface; IWMPSliderCtrl = interface; IWMPSliderCtrlDisp = dispinterface; IWMPVideoCtrlEvents = dispinterface; IWMPVideoCtrl = interface; IWMPVideoCtrlDisp = dispinterface; IWMPEffectsCtrl = interface; IWMPEffectsCtrlDisp = dispinterface; IWMPEqualizerSettingsCtrl = interface; IWMPEqualizerSettingsCtrlDisp = dispinterface; IWMPVideoSettingsCtrl = interface; IWMPVideoSettingsCtrlDisp = dispinterface; IWMPLibraryTreeCtrl = interface; IWMPLibraryTreeCtrlDisp = dispinterface; IWMPEditCtrl = interface; IWMPEditCtrlDisp = dispinterface; IWMPSkinList = interface; IWMPSkinListDisp = dispinterface; IWMPPluginUIHost = interface; IWMPPluginUIHostDisp = dispinterface; IWMPMenuCtrl = interface; IWMPMenuCtrlDisp = dispinterface; IWMPAutoMenuCtrl = interface; IWMPAutoMenuCtrlDisp = dispinterface; IWMPRegionalButtonCtrl = interface; IWMPRegionalButtonCtrlDisp = dispinterface; IWMPRegionalButtonEvents = dispinterface; IWMPRegionalButton = interface; IWMPRegionalButtonDisp = dispinterface; IWMPCustomSliderCtrlEvents = dispinterface; IWMPCustomSlider = interface; IWMPCustomSliderDisp = dispinterface; IWMPTextCtrl = interface; IWMPTextCtrlDisp = dispinterface; ITaskCntrCtrl = interface; ITaskCntrCtrlDisp = dispinterface; _WMPCoreEvents = dispinterface; IWMPGraphEventHandler = interface; IWMPGraphEventHandlerDisp = dispinterface; IBattery = interface; IBatteryDisp = dispinterface; IBatteryPreset = interface; IBatteryPresetDisp = dispinterface; IBatteryRandomPreset = interface; IBatteryRandomPresetDisp = dispinterface; IBatterySavedPreset = interface; IBatterySavedPresetDisp = dispinterface; IBarsEffect = interface; IBarsEffectDisp = dispinterface; IWMPExternal = interface; IWMPExternalDisp = dispinterface; IWMPExternalColors = interface; IWMPExternalColorsDisp = dispinterface; IWMPSubscriptionServiceLimited = interface; IWMPSubscriptionServiceLimitedDisp = dispinterface; IWMPSubscriptionServiceExternal = interface; IWMPSubscriptionServiceExternalDisp = dispinterface; IWMPDownloadManager = interface; IWMPDownloadManagerDisp = dispinterface; IWMPDownloadCollection = interface; IWMPDownloadCollectionDisp = dispinterface; IWMPDownloadItem2 = interface; IWMPDownloadItem2Disp = dispinterface; IWMPDownloadItem = interface; IWMPDownloadItemDisp = dispinterface; IWMPSubscriptionServicePlayMedia = interface; IWMPSubscriptionServicePlayMediaDisp = dispinterface; IWMPDiscoExternal = interface; IWMPDiscoExternalDisp = dispinterface; IWMPCDDVDWizardExternal = interface; IWMPCDDVDWizardExternalDisp = dispinterface; IWMPBaseExternal = interface; IWMPBaseExternalDisp = dispinterface; IWMPOfflineExternal = interface; IWMPOfflineExternalDisp = dispinterface; IWMPDMRAVTransportService = interface; IWMPDMRAVTransportServiceDisp = dispinterface; IWMPDMRConnectionManagerService = interface; IWMPDMRConnectionManagerServiceDisp = dispinterface; IWMPDMRRenderingControlService = interface; IWMPDMRRenderingControlServiceDisp = dispinterface; //Map CoClass to its default interface WindowsMediaPlayer = IWMPPlayer4; WMPButtonCtrl = IWMPButtonCtrl; WMPListBoxCtrl = IWMPListBoxCtrl; WMPSliderCtrl = IWMPSliderCtrl; WMPVideoCtrl = IWMPVideoCtrl; WMPEffects = IWMPEffectsCtrl; WMPEqualizerSettingsCtrl = IWMPEqualizerSettingsCtrl; WMPVideoSettingsCtrl = IWMPVideoSettingsCtrl; WMPLibraryTreeCtrl = IWMPLibraryTreeCtrl; WMPEditCtrl = IWMPEditCtrl; WMPSkinList = IWMPSkinList; WMPMenuCtrl = IWMPMenuCtrl; WMPAutoMenuCtrl = IWMPAutoMenuCtrl; WMPRegionalButtonCtrl = IWMPRegionalButtonCtrl; WMPRegionalButton = IWMPRegionalButton; WMPCustomSliderCtrl = IWMPCustomSlider; WMPTextCtrl = IWMPTextCtrl; WMPPlaylistCtrl = IWMPPlaylistCtrl; WMPCore = IWMPCore3; //records, unions, aliases ULONG_PTR = LongWord; //interface declarations // IWMPEvents : IWMPEvents: Public interface. IWMPEvents = interface(IUnknown) ['{19A6627B-DA9E-47C1-BB23-00B5E668236A}'] // OpenStateChange : Sent when the control changes OpenState function OpenStateChange(NewState:Integer):HRESULT;stdcall; // PlayStateChange : Sent when the control changes PlayState function PlayStateChange(NewState:Integer):HRESULT;stdcall; // AudioLanguageChange : Sent when the current audio language has changed function AudioLanguageChange(LangID:Integer):HRESULT;stdcall; // StatusChange : Sent when the status string changes function StatusChange:HRESULT;stdcall; // ScriptCommand : Sent when a synchronized command or URL is received function ScriptCommand(scType:WideString;Param:WideString):HRESULT;stdcall; // NewStream : Sent when a new stream is started in a channel function NewStream:HRESULT;stdcall; // Disconnect : Sent when the control is disconnected from the server function Disconnect(Result:Integer):HRESULT;stdcall; // Buffering : Sent when the control begins or ends buffering function Buffering(Start:WordBool):HRESULT;stdcall; // Error : Sent when the control has an error condition function Error:HRESULT;stdcall; // Warning : Sent when the control encounters a problem function Warning(WarningType:Integer;Param:Integer;Description:WideString):HRESULT;stdcall; // EndOfStream : Sent when the end of file is reached function EndOfStream(Result:Integer):HRESULT;stdcall; // PositionChange : Indicates that the current position of the movie has changed function PositionChange(oldPosition:Double;newPosition:Double):HRESULT;stdcall; // MarkerHit : Sent when a marker is reached function MarkerHit(MarkerNum:Integer):HRESULT;stdcall; // DurationUnitChange : Indicates that the unit used to express duration and position has changed function DurationUnitChange(NewDurationUnit:Integer):HRESULT;stdcall; // CdromMediaChange : Indicates that the CD ROM media has changed function CdromMediaChange(CdromNum:Integer):HRESULT;stdcall; // PlaylistChange : Sent when a playlist changes function PlaylistChange(Playlist:IDispatch;change:WMPPlaylistChangeEventType):HRESULT;stdcall; // CurrentPlaylistChange : Sent when the current playlist changes function CurrentPlaylistChange(change:WMPPlaylistChangeEventType):HRESULT;stdcall; // CurrentPlaylistItemAvailable : Sent when a current playlist item becomes available function CurrentPlaylistItemAvailable(bstrItemName:WideString):HRESULT;stdcall; // MediaChange : Sent when a media object changes function MediaChange(Item:IDispatch):HRESULT;stdcall; // CurrentMediaItemAvailable : Sent when a current media item becomes available function CurrentMediaItemAvailable(bstrItemName:WideString):HRESULT;stdcall; // CurrentItemChange : Sent when the item selection on the current playlist changes function CurrentItemChange(pdispMedia:IDispatch):HRESULT;stdcall; // MediaCollectionChange : Sent when the media collection needs to be requeried function MediaCollectionChange:HRESULT;stdcall; // MediaCollectionAttributeStringAdded : Sent when an attribute string is added in the media collection function MediaCollectionAttributeStringAdded(bstrAttribName:WideString;bstrAttribVal:WideString):HRESULT;stdcall; // MediaCollectionAttributeStringRemoved : Sent when an attribute string is removed from the media collection function MediaCollectionAttributeStringRemoved(bstrAttribName:WideString;bstrAttribVal:WideString):HRESULT;stdcall; // MediaCollectionAttributeStringChanged : Sent when an attribute string is changed in the media collection function MediaCollectionAttributeStringChanged(bstrAttribName:WideString;bstrOldAttribVal:WideString;bstrNewAttribVal:WideString):HRESULT;stdcall; // PlaylistCollectionChange : Sent when playlist collection needs to be requeried function PlaylistCollectionChange:HRESULT;stdcall; // PlaylistCollectionPlaylistAdded : Sent when a playlist is added to the playlist collection function PlaylistCollectionPlaylistAdded(bstrPlaylistName:WideString):HRESULT;stdcall; // PlaylistCollectionPlaylistRemoved : Sent when a playlist is removed from the playlist collection function PlaylistCollectionPlaylistRemoved(bstrPlaylistName:WideString):HRESULT;stdcall; // PlaylistCollectionPlaylistSetAsDeleted : Sent when a playlist has been set or reset as deleted function PlaylistCollectionPlaylistSetAsDeleted(bstrPlaylistName:WideString;varfIsDeleted:WordBool):HRESULT;stdcall; // ModeChange : Playlist playback mode has changed function ModeChange(ModeName:WideString;NewValue:WordBool):HRESULT;stdcall; // MediaError : Sent when the media object has an error condition function MediaError(pMediaObject:IDispatch):HRESULT;stdcall; // OpenPlaylistSwitch : Current playlist switch with no open state change function OpenPlaylistSwitch(pItem:IDispatch):HRESULT;stdcall; // DomainChange : Send a current domain function DomainChange(strDomain:WideString):HRESULT;stdcall; // SwitchedToPlayerApplication : Sent when display switches to player application function SwitchedToPlayerApplication:HRESULT;stdcall; // SwitchedToControl : Sent when display switches to control function SwitchedToControl:HRESULT;stdcall; // PlayerDockedStateChange : Sent when the player docks or undocks function PlayerDockedStateChange:HRESULT;stdcall; // PlayerReconnect : Sent when the OCX reconnects to the player function PlayerReconnect:HRESULT;stdcall; // Click : Occurs when a user clicks the mouse function Click(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer):HRESULT;stdcall; // DoubleClick : Occurs when a user double-clicks the mouse function DoubleClick(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer):HRESULT;stdcall; // KeyDown : Occurs when a key is pressed function KeyDown(nKeyCode:Smallint;nShiftState:Smallint):HRESULT;stdcall; // KeyPress : Occurs when a key is pressed and released function KeyPress(nKeyAscii:Smallint):HRESULT;stdcall; // KeyUp : Occurs when a key is released function KeyUp(nKeyCode:Smallint;nShiftState:Smallint):HRESULT;stdcall; // MouseDown : Occurs when a mouse button is pressed function MouseDown(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer):HRESULT;stdcall; // MouseMove : Occurs when a mouse pointer is moved function MouseMove(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer):HRESULT;stdcall; // MouseUp : Occurs when a mouse button is released function MouseUp(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer):HRESULT;stdcall; end; // IWMPEvents2 : IWMPEvents2: Public interface. IWMPEvents2 = interface(IWMPEvents) ['{1E7601FA-47EA-4107-9EA9-9004ED9684FF}'] // DeviceConnect : Occurs when a device is connected function DeviceConnect(pDevice:IWMPSyncDevice):HRESULT;stdcall; // DeviceDisconnect : Occurs when a device is disconnected function DeviceDisconnect(pDevice:IWMPSyncDevice):HRESULT;stdcall; // DeviceStatusChange : Occurs when a device status changes function DeviceStatusChange(pDevice:IWMPSyncDevice;NewStatus:WMPDeviceStatus):HRESULT;stdcall; // DeviceSyncStateChange : Occurs when a device sync state changes function DeviceSyncStateChange(pDevice:IWMPSyncDevice;NewState:WMPSyncState):HRESULT;stdcall; // DeviceSyncError : Occurs when a device's media has an error function DeviceSyncError(pDevice:IWMPSyncDevice;pMedia:IDispatch):HRESULT;stdcall; // CreatePartnershipComplete : Occurs when createPartnership call completes function CreatePartnershipComplete(pDevice:IWMPSyncDevice;hrResult:HResult):HRESULT;stdcall; end; // IWMPSyncDevice : IWMPSyncDevice: Public interface for Windows Media Player SDK. IWMPSyncDevice = interface(IUnknown) ['{82A2986C-0293-4FD0-B279-B21B86C058BE}'] function Get_friendlyName : WideString; stdcall; procedure Set_friendlyName(const pbstrName:WideString); stdcall; function Get_deviceName : WideString; stdcall; function Get_deviceId : WideString; stdcall; function Get_partnershipIndex : Integer; stdcall; function Get_connected : WordBool; stdcall; function Get_status : WMPDeviceStatus; stdcall; function Get_syncState : WMPSyncState; stdcall; function Get_progress : Integer; stdcall; // getItemInfo : function getItemInfo(bstrItemName:WideString):HRESULT;stdcall; // createPartnership : function createPartnership(vbShowUI:WordBool):HRESULT;stdcall; // deletePartnership : function deletePartnership:HRESULT;stdcall; // Start : function Start:HRESULT;stdcall; // stop : function stop:HRESULT;stdcall; // showSettings : function showSettings:HRESULT;stdcall; // isIdentical : function isIdentical(pDevice:IWMPSyncDevice):HRESULT;stdcall; // friendlyName : property friendlyName:WideString read Get_friendlyName write Set_friendlyName; // deviceName : property deviceName:WideString read Get_deviceName; // deviceId : property deviceId:WideString read Get_deviceId; // partnershipIndex : property partnershipIndex:Integer read Get_partnershipIndex; // connected : property connected:WordBool read Get_connected; // status : property status:WMPDeviceStatus read Get_status; // syncState : property syncState:WMPSyncState read Get_syncState; // progress : property progress:Integer read Get_progress; end; // IWMPEvents3 : IWMPEvents3: Public interface. IWMPEvents3 = interface(IWMPEvents2) ['{1F504270-A66B-4223-8E96-26A06C63D69F}'] // CdromRipStateChange : Occurs when ripping state changes function CdromRipStateChange(pCdromRip:IWMPCdromRip;wmprs:WMPRipState):HRESULT;stdcall; // CdromRipMediaError : Occurs when an error happens while ripping a media function CdromRipMediaError(pCdromRip:IWMPCdromRip;pMedia:IDispatch):HRESULT;stdcall; // CdromBurnStateChange : Occurs when burning state changes function CdromBurnStateChange(pCdromBurn:IWMPCdromBurn;wmpbs:WMPBurnState):HRESULT;stdcall; // CdromBurnMediaError : Occurs when an error happens while burning a media function CdromBurnMediaError(pCdromBurn:IWMPCdromBurn;pMedia:IDispatch):HRESULT;stdcall; // CdromBurnError : Occurs when a generic error happens while burning function CdromBurnError(pCdromBurn:IWMPCdromBurn;hrError:HResult):HRESULT;stdcall; // LibraryConnect : Occurs when a library is connected function LibraryConnect(pLibrary:IWMPLibrary):HRESULT;stdcall; // LibraryDisconnect : Occurs when a library is disconnected function LibraryDisconnect(pLibrary:IWMPLibrary):HRESULT;stdcall; // FolderScanStateChange : Occurs when a folder scan state changes function FolderScanStateChange(wmpfss:WMPFolderScanState):HRESULT;stdcall; // StringCollectionChange : Sent when a string collection changes function StringCollectionChange(pdispStringCollection:IDispatch;change:WMPStringCollectionChangeEventType;lCollectionIndex:Integer):HRESULT;stdcall; // MediaCollectionMediaAdded : Sent when a media is added to the local library function MediaCollectionMediaAdded(pdispMedia:IDispatch):HRESULT;stdcall; // MediaCollectionMediaRemoved : Sent when a media is removed from the local library function MediaCollectionMediaRemoved(pdispMedia:IDispatch):HRESULT;stdcall; end; // IWMPCdromRip : IWMPCdromRip: Public interface for Windows Media Player SDK. IWMPCdromRip = interface(IUnknown) ['{56E2294F-69ED-4629-A869-AEA72C0DCC2C}'] function Get_ripState : WMPRipState; stdcall; function Get_ripProgress : Integer; stdcall; // startRip : function startRip:HRESULT;stdcall; // stopRip : function stopRip:HRESULT;stdcall; // ripState : property ripState:WMPRipState read Get_ripState; // ripProgress : property ripProgress:Integer read Get_ripProgress; end; // IWMPCdromBurn : IWMPCdromBurn: Public interface for Windows Media Player SDK. IWMPCdromBurn = interface(IUnknown) ['{BD94DBEB-417F-4928-AA06-087D56ED9B59}'] // isAvailable : function isAvailable(bstrItem:WideString):HRESULT;stdcall; // getItemInfo : function getItemInfo(bstrItem:WideString):HRESULT;stdcall; function Get_label_ : WideString; stdcall; procedure Set_label_(const pbstrLabel:WideString); stdcall; function Get_burnFormat : WMPBurnFormat; stdcall; procedure Set_burnFormat(const pwmpbf:WMPBurnFormat); stdcall; function Get_burnPlaylist : IWMPPlaylist; stdcall; procedure Set_burnPlaylist(const ppPlaylist:IWMPPlaylist); stdcall; // refreshStatus : function refreshStatus:HRESULT;stdcall; function Get_burnState : WMPBurnState; stdcall; function Get_burnProgress : Integer; stdcall; // startBurn : function startBurn:HRESULT;stdcall; // stopBurn : function stopBurn:HRESULT;stdcall; // erase : function erase:HRESULT;stdcall; // label : property label_:WideString read Get_label_ write Set_label_; // burnFormat : property burnFormat:WMPBurnFormat read Get_burnFormat write Set_burnFormat; // burnPlaylist : property burnPlaylist:IWMPPlaylist read Get_burnPlaylist write Set_burnPlaylist; // burnState : property burnState:WMPBurnState read Get_burnState; // burnProgress : property burnProgress:Integer read Get_burnProgress; end; // IWMPPlaylist : IWMPPlaylist: Public interface. IWMPPlaylist = interface(IDispatch) ['{D5F0F4F1-130C-11D3-B14E-00C04F79FAA6}'] function Get_count : Integer; safecall; function Get_name : WideString; safecall; procedure Set_name(const pbstrName:WideString); safecall; function Get_attributeCount : Integer; safecall; function Get_attributeName(lIndex:Integer) : WideString; safecall; function Get_Item : IWMPMedia; safecall; // getItemInfo : Returns the value of a playlist attribute function getItemInfo(bstrName:WideString):WideString;safecall; // setItemInfo : Sets the value of a playlist attribute procedure setItemInfo(bstrName:WideString;bstrValue:WideString);safecall; function Get_isIdentical(pIWMPPlaylist:IWMPPlaylist) : WordBool; safecall; // clear : Removes all items from the playlist procedure clear;safecall; // insertItem : Inserts an item into the playlist at the specified location procedure insertItem(lIndex:Integer;pIWMPMedia:IWMPMedia);safecall; // appendItem : Adds an item to the end of the playlist procedure appendItem(pIWMPMedia:IWMPMedia);safecall; // removeItem : Removes the specified item from the playlist procedure removeItem(pIWMPMedia:IWMPMedia);safecall; // moveItem : Changes the location of an item in the playlist procedure moveItem(lIndexOld:Integer;lIndexNew:Integer);safecall; // count : Returns the number of items in the playlist property count:Integer read Get_count; // name : Returns the name of the playlist property name:WideString read Get_name write Set_name; // attributeCount : Returns the number of attributes associated with the playlist property attributeCount:Integer read Get_attributeCount; // attributeName : Returns the name of an attribute specified by an index property attributeName[lIndex:Integer]:WideString read Get_attributeName; // Item : Returns the item at the specified index property Item:IWMPMedia read Get_Item; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPPlaylist:IWMPPlaylist]:WordBool read Get_isIdentical; end; // IWMPPlaylist : IWMPPlaylist: Public interface. IWMPPlaylistDisp = dispinterface ['{D5F0F4F1-130C-11D3-B14E-00C04F79FAA6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getItemInfo : Returns the value of a playlist attribute function getItemInfo(bstrName:WideString):WideString;dispid 203; // setItemInfo : Sets the value of a playlist attribute procedure setItemInfo(bstrName:WideString;bstrValue:WideString);dispid 204; // clear : Removes all items from the playlist procedure clear;dispid 205; // insertItem : Inserts an item into the playlist at the specified location procedure insertItem(lIndex:Integer;pIWMPMedia:IWMPMedia);dispid 206; // appendItem : Adds an item to the end of the playlist procedure appendItem(pIWMPMedia:IWMPMedia);dispid 207; // removeItem : Removes the specified item from the playlist procedure removeItem(pIWMPMedia:IWMPMedia);dispid 208; // moveItem : Changes the location of an item in the playlist procedure moveItem(lIndexOld:Integer;lIndexNew:Integer);dispid 209; // count : Returns the number of items in the playlist property count:Integer readonly dispid 201; // name : Returns the name of the playlist property name:WideString dispid 202; // attributeCount : Returns the number of attributes associated with the playlist property attributeCount:Integer readonly dispid 210; // attributeName : Returns the name of an attribute specified by an index property attributeName[lIndex:Integer]:WideString readonly dispid 211; // Item : Returns the item at the specified index property Item:IWMPMedia readonly dispid 212; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPPlaylist:IWMPPlaylist]:WordBool readonly dispid 213; end; // IWMPMedia : IWMPMedia: Public interface. IWMPMedia = interface(IDispatch) ['{94D55E95-3FAC-11D3-B155-00C04F79FAA6}'] function Get_isIdentical(pIWMPMedia:IWMPMedia) : WordBool; safecall; function Get_sourceURL : WideString; safecall; function Get_name : WideString; safecall; procedure Set_name(const pbstrName:WideString); safecall; function Get_imageSourceWidth : Integer; safecall; function Get_imageSourceHeight : Integer; safecall; function Get_markerCount : Integer; safecall; // getMarkerTime : Returns the time of a marker function getMarkerTime(MarkerNum:Integer):Double;safecall; // getMarkerName : Returns the name of a marker function getMarkerName(MarkerNum:Integer):WideString;safecall; function Get_duration : Double; safecall; function Get_durationString : WideString; safecall; function Get_attributeCount : Integer; safecall; // getAttributeName : Returns the name of the attribute whose index has been specified function getAttributeName(lIndex:Integer):WideString;safecall; // getItemInfo : Returns the value of specified attribute for this media function getItemInfo(bstrItemName:WideString):WideString;safecall; // setItemInfo : Sets the value of specified attribute for this media procedure setItemInfo(bstrItemName:WideString;bstrVal:WideString);safecall; // getItemInfoByAtom : Gets an item info by atom function getItemInfoByAtom(lAtom:Integer):WideString;safecall; // isMemberOf : Is the media a member of the given playlist function isMemberOf(pPlaylist:IWMPPlaylist):WordBool;safecall; // isReadOnlyItem : Is the attribute read only function isReadOnlyItem(bstrItemName:WideString):WordBool;safecall; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPMedia:IWMPMedia]:WordBool read Get_isIdentical; // sourceURL : Returns the media URL property sourceURL:WideString read Get_sourceURL; // name : Returns the name of the media property name:WideString read Get_name write Set_name; // imageSourceWidth : Returns the original width of the source images property imageSourceWidth:Integer read Get_imageSourceWidth; // imageSourceHeight : Returns the original height of the source images property imageSourceHeight:Integer read Get_imageSourceHeight; // markerCount : Returns the number of markers in the file property markerCount:Integer read Get_markerCount; // duration : Returns duration of current media property duration:Double read Get_duration; // durationString : Returns duration of current media as a string property durationString:WideString read Get_durationString; // attributeCount : Returns the count of the attributes associated with this media property attributeCount:Integer read Get_attributeCount; end; // IWMPMedia : IWMPMedia: Public interface. IWMPMediaDisp = dispinterface ['{94D55E95-3FAC-11D3-B155-00C04F79FAA6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getMarkerTime : Returns the time of a marker function getMarkerTime(MarkerNum:Integer):Double;dispid 755; // getMarkerName : Returns the name of a marker function getMarkerName(MarkerNum:Integer):WideString;dispid 756; // getAttributeName : Returns the name of the attribute whose index has been specified function getAttributeName(lIndex:Integer):WideString;dispid 760; // getItemInfo : Returns the value of specified attribute for this media function getItemInfo(bstrItemName:WideString):WideString;dispid 761; // setItemInfo : Sets the value of specified attribute for this media procedure setItemInfo(bstrItemName:WideString;bstrVal:WideString);dispid 762; // getItemInfoByAtom : Gets an item info by atom function getItemInfoByAtom(lAtom:Integer):WideString;dispid 765; // isMemberOf : Is the media a member of the given playlist function isMemberOf(pPlaylist:IWMPPlaylist):WordBool;dispid 766; // isReadOnlyItem : Is the attribute read only function isReadOnlyItem(bstrItemName:WideString):WordBool;dispid 767; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPMedia:IWMPMedia]:WordBool readonly dispid 763; // sourceURL : Returns the media URL property sourceURL:WideString readonly dispid 751; // name : Returns the name of the media property name:WideString dispid 764; // imageSourceWidth : Returns the original width of the source images property imageSourceWidth:Integer readonly dispid 752; // imageSourceHeight : Returns the original height of the source images property imageSourceHeight:Integer readonly dispid 753; // markerCount : Returns the number of markers in the file property markerCount:Integer readonly dispid 754; // duration : Returns duration of current media property duration:Double readonly dispid 757; // durationString : Returns duration of current media as a string property durationString:WideString readonly dispid 758; // attributeCount : Returns the count of the attributes associated with this media property attributeCount:Integer readonly dispid 759; end; // IWMPLibrary : IWMPLibrary: Public interface for Windows Media Player SDK. IWMPLibrary = interface(IUnknown) ['{3DF47861-7DF1-4C1F-A81B-4C26F0F7A7C6}'] function Get_name : WideString; stdcall; function Get_type_ : WMPLibraryType; stdcall; function Get_mediaCollection : IWMPMediaCollection; stdcall; // isIdentical : function isIdentical(pIWMPLibrary:IWMPLibrary):HRESULT;stdcall; // name : property name:WideString read Get_name; // type : property type_:WMPLibraryType read Get_type_; // mediaCollection : property mediaCollection:IWMPMediaCollection read Get_mediaCollection; end; // IWMPMediaCollection : IWMPMediaCollection: Public interface. IWMPMediaCollection = interface(IDispatch) ['{8363BC22-B4B4-4B19-989D-1CD765749DD1}'] // add : Creates a new media object function add(bstrURL:WideString):IWMPMedia;safecall; // getAll : Returns a collection of all the items function getAll:IWMPPlaylist;safecall; // getByName : Returns a collection of items with the given name function getByName(bstrName:WideString):IWMPPlaylist;safecall; // getByGenre : Returns a collection of items with the given genre function getByGenre(bstrGenre:WideString):IWMPPlaylist;safecall; // getByAuthor : Returns a collection of items by a given author function getByAuthor(bstrAuthor:WideString):IWMPPlaylist;safecall; // getByAlbum : Returns a collection of items from the given album function getByAlbum(bstrAlbum:WideString):IWMPPlaylist;safecall; // getByAttribute : Returns a collection of items with the given attribute function getByAttribute(bstrAttribute:WideString;bstrValue:WideString):IWMPPlaylist;safecall; // remove : Removes an item from the media collection procedure remove(pItem:IWMPMedia;varfDeleteFile:WordBool);safecall; // getAttributeStringCollection : Returns the string collection associated with an attribute function getAttributeStringCollection(bstrAttribute:WideString;bstrMediaType:WideString):IWMPStringCollection;safecall; // getMediaAtom : Gets an atom associated with an item name which can be requested from an IWMPMedia out of this collection via getItemInfoByAtom function getMediaAtom(bstrItemName:WideString):Integer;safecall; // setDeleted : Sets the deleted flag on a media object procedure setDeleted(pItem:IWMPMedia;varfIsDeleted:WordBool);safecall; // isDeleted : Gets the deleted flag on a media object function isDeleted(pItem:IWMPMedia):WordBool;safecall; end; // IWMPMediaCollection : IWMPMediaCollection: Public interface. IWMPMediaCollectionDisp = dispinterface ['{8363BC22-B4B4-4B19-989D-1CD765749DD1}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // add : Creates a new media object function add(bstrURL:WideString):IWMPMedia;dispid 452; // getAll : Returns a collection of all the items function getAll:IWMPPlaylist;dispid 453; // getByName : Returns a collection of items with the given name function getByName(bstrName:WideString):IWMPPlaylist;dispid 454; // getByGenre : Returns a collection of items with the given genre function getByGenre(bstrGenre:WideString):IWMPPlaylist;dispid 455; // getByAuthor : Returns a collection of items by a given author function getByAuthor(bstrAuthor:WideString):IWMPPlaylist;dispid 456; // getByAlbum : Returns a collection of items from the given album function getByAlbum(bstrAlbum:WideString):IWMPPlaylist;dispid 457; // getByAttribute : Returns a collection of items with the given attribute function getByAttribute(bstrAttribute:WideString;bstrValue:WideString):IWMPPlaylist;dispid 458; // remove : Removes an item from the media collection procedure remove(pItem:IWMPMedia;varfDeleteFile:WordBool);dispid 459; // getAttributeStringCollection : Returns the string collection associated with an attribute function getAttributeStringCollection(bstrAttribute:WideString;bstrMediaType:WideString):IWMPStringCollection;dispid 461; // getMediaAtom : Gets an atom associated with an item name which can be requested from an IWMPMedia out of this collection via getItemInfoByAtom function getMediaAtom(bstrItemName:WideString):Integer;dispid 470; // setDeleted : Sets the deleted flag on a media object procedure setDeleted(pItem:IWMPMedia;varfIsDeleted:WordBool);dispid 471; // isDeleted : Gets the deleted flag on a media object function isDeleted(pItem:IWMPMedia):WordBool;dispid 472; end; // IWMPStringCollection : IWMPStringCollection: Public interface. IWMPStringCollection = interface(IDispatch) ['{4A976298-8C0D-11D3-B389-00C04F68574B}'] function Get_count : Integer; safecall; // Item : Returns the string at the given index function Item(lIndex:Integer):WideString;safecall; // count : Returns the number of items in the string collection property count:Integer read Get_count; end; // IWMPStringCollection : IWMPStringCollection: Public interface. IWMPStringCollectionDisp = dispinterface ['{4A976298-8C0D-11D3-B389-00C04F68574B}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Item : Returns the string at the given index function Item(lIndex:Integer):WideString;dispid 402; // count : Returns the number of items in the string collection property count:Integer readonly dispid 401; end; // IWMPEvents4 : IWMPEvents4: Public interface. IWMPEvents4 = interface(IWMPEvents3) ['{26DABCFA-306B-404D-9A6F-630A8405048D}'] // DeviceEstimation : Occurs when the sync estimation completed function DeviceEstimation(pDevice:IWMPSyncDevice;hrResult:HResult;qwEstimatedUsedSpace:Int64;qwEstimatedSpace:Int64):HRESULT;stdcall; end; // _WMPOCXEvents : _WMPOCXEvents: Public interface. _WMPOCXEvents = dispinterface ['{6BF52A51-394A-11D3-B153-00C04F79FAA6}'] // OpenStateChange : Sent when the control changes OpenState procedure OpenStateChange(NewState:Integer);dispid 5001; // PlayStateChange : Sent when the control changes PlayState procedure PlayStateChange(NewState:Integer);dispid 5101; // AudioLanguageChange : Sent when the current audio language has changed procedure AudioLanguageChange(LangID:Integer);dispid 5102; // StatusChange : Sent when the status string changes procedure StatusChange;dispid 5002; // ScriptCommand : Sent when a synchronized command or URL is received procedure ScriptCommand(scType:WideString;Param:WideString);dispid 5301; // NewStream : Sent when a new stream is started in a channel procedure NewStream;dispid 5403; // Disconnect : Sent when the control is disconnected from the server procedure Disconnect(Result:Integer);dispid 5401; // Buffering : Sent when the control begins or ends buffering procedure Buffering(Start:WordBool);dispid 5402; // Error : Sent when the control has an error condition procedure Error;dispid 5501; // Warning : Sent when the control encounters a problem procedure Warning(WarningType:Integer;Param:Integer;Description:WideString);dispid 5601; // EndOfStream : Sent when the end of file is reached procedure EndOfStream(Result:Integer);dispid 5201; // PositionChange : Indicates that the current position of the movie has changed procedure PositionChange(oldPosition:Double;newPosition:Double);dispid 5202; // MarkerHit : Sent when a marker is reached procedure MarkerHit(MarkerNum:Integer);dispid 5203; // DurationUnitChange : Indicates that the unit used to express duration and position has changed procedure DurationUnitChange(NewDurationUnit:Integer);dispid 5204; // CdromMediaChange : Indicates that the CD ROM media has changed procedure CdromMediaChange(CdromNum:Integer);dispid 5701; // PlaylistChange : Sent when a playlist changes procedure PlaylistChange(Playlist:IDispatch;change:WMPPlaylistChangeEventType);dispid 5801; // CurrentPlaylistChange : Sent when the current playlist changes procedure CurrentPlaylistChange(change:WMPPlaylistChangeEventType);dispid 5804; // CurrentPlaylistItemAvailable : Sent when a current playlist item becomes available procedure CurrentPlaylistItemAvailable(bstrItemName:WideString);dispid 5805; // MediaChange : Sent when a media object changes procedure MediaChange(Item:IDispatch);dispid 5802; // CurrentMediaItemAvailable : Sent when a current media item becomes available procedure CurrentMediaItemAvailable(bstrItemName:WideString);dispid 5803; // CurrentItemChange : Sent when the item selection on the current playlist changes procedure CurrentItemChange(pdispMedia:IDispatch);dispid 5806; // MediaCollectionChange : Sent when the media collection needs to be requeried procedure MediaCollectionChange;dispid 5807; // MediaCollectionAttributeStringAdded : Sent when an attribute string is added in the media collection procedure MediaCollectionAttributeStringAdded(bstrAttribName:WideString;bstrAttribVal:WideString);dispid 5808; // MediaCollectionAttributeStringRemoved : Sent when an attribute string is removed from the media collection procedure MediaCollectionAttributeStringRemoved(bstrAttribName:WideString;bstrAttribVal:WideString);dispid 5809; // MediaCollectionAttributeStringChanged : Sent when an attribute string is changed in the media collection procedure MediaCollectionAttributeStringChanged(bstrAttribName:WideString;bstrOldAttribVal:WideString;bstrNewAttribVal:WideString);dispid 5820; // PlaylistCollectionChange : Sent when playlist collection needs to be requeried procedure PlaylistCollectionChange;dispid 5810; // PlaylistCollectionPlaylistAdded : Sent when a playlist is added to the playlist collection procedure PlaylistCollectionPlaylistAdded(bstrPlaylistName:WideString);dispid 5811; // PlaylistCollectionPlaylistRemoved : Sent when a playlist is removed from the playlist collection procedure PlaylistCollectionPlaylistRemoved(bstrPlaylistName:WideString);dispid 5812; // PlaylistCollectionPlaylistSetAsDeleted : Sent when a playlist has been set or reset as deleted procedure PlaylistCollectionPlaylistSetAsDeleted(bstrPlaylistName:WideString;varfIsDeleted:WordBool);dispid 5818; // ModeChange : Playlist playback mode has changed procedure ModeChange(ModeName:WideString;NewValue:WordBool);dispid 5819; // MediaError : Sent when the media object has an error condition procedure MediaError(pMediaObject:IDispatch);dispid 5821; // OpenPlaylistSwitch : Current playlist switch with no open state change procedure OpenPlaylistSwitch(pItem:IDispatch);dispid 5823; // DomainChange : Send a current domain procedure DomainChange(strDomain:WideString);dispid 5822; // SwitchedToPlayerApplication : Sent when display switches to player application procedure SwitchedToPlayerApplication;dispid 6501; // SwitchedToControl : Sent when display switches to control procedure SwitchedToControl;dispid 6502; // PlayerDockedStateChange : Sent when the player docks or undocks procedure PlayerDockedStateChange;dispid 6503; // PlayerReconnect : Sent when the OCX reconnects to the player procedure PlayerReconnect;dispid 6504; // Click : Occurs when a user clicks the mouse procedure Click(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer);dispid 6505; // DoubleClick : Occurs when a user double-clicks the mouse procedure DoubleClick(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer);dispid 6506; // KeyDown : Occurs when a key is pressed procedure KeyDown(nKeyCode:Smallint;nShiftState:Smallint);dispid 6507; // KeyPress : Occurs when a key is pressed and released procedure KeyPress(nKeyAscii:Smallint);dispid 6508; // KeyUp : Occurs when a key is released procedure KeyUp(nKeyCode:Smallint;nShiftState:Smallint);dispid 6509; // MouseDown : Occurs when a mouse button is pressed procedure MouseDown(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer);dispid 6510; // MouseMove : Occurs when a mouse pointer is moved procedure MouseMove(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer);dispid 6511; // MouseUp : Occurs when a mouse button is released procedure MouseUp(nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer);dispid 6512; // DeviceConnect : Occurs when a device is connected procedure DeviceConnect(pDevice:IWMPSyncDevice);dispid 6513; // DeviceDisconnect : Occurs when a device is disconnected procedure DeviceDisconnect(pDevice:IWMPSyncDevice);dispid 6514; // DeviceStatusChange : Occurs when a device status changes procedure DeviceStatusChange(pDevice:IWMPSyncDevice;NewStatus:WMPDeviceStatus);dispid 6515; // DeviceSyncStateChange : Occurs when a device sync state changes procedure DeviceSyncStateChange(pDevice:IWMPSyncDevice;NewState:WMPSyncState);dispid 6516; // DeviceSyncError : Occurs when a device's media has an error procedure DeviceSyncError(pDevice:IWMPSyncDevice;pMedia:IDispatch);dispid 6517; // CreatePartnershipComplete : Occurs when createPartnership call completes procedure CreatePartnershipComplete(pDevice:IWMPSyncDevice;hrResult:HResult);dispid 6518; // DeviceEstimation : Occurs when the sync estimation completed procedure DeviceEstimation(pDevice:IWMPSyncDevice;hrResult:HResult;qwEstimatedUsedSpace:Int64;qwEstimatedSpace:Int64);dispid 6527; // CdromRipStateChange : Occurs when ripping state changes procedure CdromRipStateChange(pCdromRip:IWMPCdromRip;wmprs:WMPRipState);dispid 6519; // CdromRipMediaError : Occurs when an error happens while ripping a media procedure CdromRipMediaError(pCdromRip:IWMPCdromRip;pMedia:IDispatch);dispid 6520; // CdromBurnStateChange : Occurs when burning state changes procedure CdromBurnStateChange(pCdromBurn:IWMPCdromBurn;wmpbs:WMPBurnState);dispid 6521; // CdromBurnMediaError : Occurs when an error happens while burning a media procedure CdromBurnMediaError(pCdromBurn:IWMPCdromBurn;pMedia:IDispatch);dispid 6522; // CdromBurnError : Occurs when a generic error happens while burning procedure CdromBurnError(pCdromBurn:IWMPCdromBurn;hrError:HResult);dispid 6523; // LibraryConnect : Occurs when a library is connected procedure LibraryConnect(pLibrary:IWMPLibrary);dispid 6524; // LibraryDisconnect : Occurs when a library is disconnected procedure LibraryDisconnect(pLibrary:IWMPLibrary);dispid 6525; // FolderScanStateChange : Occurs when a folder scan state changes procedure FolderScanStateChange(wmpfss:WMPFolderScanState);dispid 6526; // StringCollectionChange : Sent when a string collection changes procedure StringCollectionChange(pdispStringCollection:IDispatch;change:WMPStringCollectionChangeEventType;lCollectionIndex:Integer);dispid 5824; // MediaCollectionMediaAdded : Sent when a media is added to the local library procedure MediaCollectionMediaAdded(pdispMedia:IDispatch);dispid 5825; // MediaCollectionMediaRemoved : Sent when a media is removed from the local library procedure MediaCollectionMediaRemoved(pdispMedia:IDispatch);dispid 5826; end; // IWMPCore : IWMPCore: Public interface. IWMPCore = interface(IDispatch) ['{D84CCA99-CCE2-11D2-9ECC-0000F8085981}'] // close : Closes the media procedure close;safecall; function Get_URL : WideString; safecall; procedure Set_URL(const pbstrURL:WideString); safecall; function Get_openState : WMPOpenState; safecall; function Get_playState : WMPPlayState; safecall; function Get_controls : IWMPControls; safecall; function Get_settings : IWMPSettings; safecall; function Get_currentMedia : IWMPMedia; safecall; procedure Set_currentMedia(const ppMedia:IWMPMedia); safecall; function Get_mediaCollection : IWMPMediaCollection; safecall; function Get_playlistCollection : IWMPPlaylistCollection; safecall; function Get_versionInfo : WideString; safecall; // launchURL : procedure launchURL(bstrURL:WideString);safecall; function Get_network : IWMPNetwork; safecall; function Get_currentPlaylist : IWMPPlaylist; safecall; procedure Set_currentPlaylist(const ppPL:IWMPPlaylist); safecall; function Get_cdromCollection : IWMPCdromCollection; safecall; function Get_closedCaption : IWMPClosedCaption; safecall; function Get_isOnline : WordBool; safecall; function Get_Error : IWMPError; safecall; function Get_status : WideString; safecall; // URL : Returns or sets the URL property URL:WideString read Get_URL write Set_URL; // openState : Returns the open state of the player property openState:WMPOpenState read Get_openState; // playState : Returns the play state of the player property playState:WMPPlayState read Get_playState; // controls : Returns the control handler property controls:IWMPControls read Get_controls; // settings : Returns the settings handler property settings:IWMPSettings read Get_settings; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia read Get_currentMedia write Set_currentMedia; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection read Get_mediaCollection; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection read Get_playlistCollection; // versionInfo : Returns the version information for the player property versionInfo:WideString read Get_versionInfo; // network : Returns the network information handler property network:IWMPNetwork read Get_network; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist read Get_currentPlaylist write Set_currentPlaylist; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection read Get_cdromCollection; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption read Get_closedCaption; // isOnline : Returns whether the machine is online. property isOnline:WordBool read Get_isOnline; // Error : Returns the error object property Error:IWMPError read Get_Error; // status : Returns status string property status:WideString read Get_status; end; // IWMPCore : IWMPCore: Public interface. IWMPCoreDisp = dispinterface ['{D84CCA99-CCE2-11D2-9ECC-0000F8085981}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; end; // IWMPCore2 : IWMPCore2: Public interface. IWMPCore2 = interface(IWMPCore) ['{BC17E5B7-7561-4C18-BB90-17D485775659}'] function Get_dvd : IWMPDVD; safecall; // dvd : Returns the DVD handler property dvd:IWMPDVD read Get_dvd; end; // IWMPCore2 : IWMPCore2: Public interface. IWMPCore2Disp = dispinterface ['{BC17E5B7-7561-4C18-BB90-17D485775659}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // dvd : Returns the DVD handler property dvd:IWMPDVD readonly dispid 40; end; // IWMPCore3 : IWMPCore3: Public interface. IWMPCore3 = interface(IWMPCore2) ['{7587C667-628F-499F-88E7-6A6F4E888464}'] // newPlaylist : Creates a new playlist object function newPlaylist(bstrName:WideString;bstrURL:WideString):IWMPPlaylist;safecall; // newMedia : Creates a new media object function newMedia(bstrURL:WideString):IWMPMedia;safecall; end; // IWMPCore3 : IWMPCore3: Public interface. IWMPCore3Disp = dispinterface ['{7587C667-628F-499F-88E7-6A6F4E888464}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // newPlaylist : Creates a new playlist object function newPlaylist(bstrName:WideString;bstrURL:WideString):IWMPPlaylist;dispid 41; // newMedia : Creates a new media object function newMedia(bstrURL:WideString):IWMPMedia;dispid 42; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // dvd : Returns the DVD handler property dvd:IWMPDVD readonly dispid 40; end; // IWMPPlayer4 : IWMPPlayer4: Public interface. IWMPPlayer4 = interface(IWMPCore3) ['{6C497D62-8919-413C-82DB-E935FB3EC584}'] function Get_enabled : WordBool; safecall; procedure Set_enabled(const pbEnabled:WordBool); safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; function Get_enableContextMenu : WordBool; safecall; procedure Set_enableContextMenu(const pbEnableContextMenu:WordBool); safecall; procedure Set_uiMode(const pbstrMode:WideString); safecall; function Get_uiMode : WideString; safecall; function Get_stretchToFit : WordBool; safecall; procedure Set_stretchToFit(const pbEnabled:WordBool); safecall; function Get_windowlessVideo : WordBool; safecall; procedure Set_windowlessVideo(const pbEnabled:WordBool); safecall; function Get_isRemote : WordBool; safecall; function Get_playerApplication : IWMPPlayerApplication; safecall; // openPlayer : Opens the player with the specified URL procedure openPlayer(bstrURL:WideString);safecall; // enabled : Returns a boolean value specifying whether or not the control is enabled property enabled:WordBool read Get_enabled write Set_enabled; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool read Get_enableContextMenu write Set_enableContextMenu; // uiMode : Specifies the ui mode to select property uiMode:WideString read Get_uiMode write Set_uiMode; // stretchToFit : Returns a boolean value specifying whether or not video is stretched property stretchToFit:WordBool read Get_stretchToFit write Set_stretchToFit; // windowlessVideo : Returns a boolean value specifying whether or not video is windowless property windowlessVideo:WordBool read Get_windowlessVideo write Set_windowlessVideo; // isRemote : Indicates whether the player is running remotely property isRemote:WordBool read Get_isRemote; // playerApplication : Returns the player application handler property playerApplication:IWMPPlayerApplication read Get_playerApplication; end; // IWMPPlayer4 : IWMPPlayer4: Public interface. IWMPPlayer4Disp = dispinterface ['{6C497D62-8919-413C-82DB-E935FB3EC584}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // newPlaylist : Creates a new playlist object function newPlaylist(bstrName:WideString;bstrURL:WideString):IWMPPlaylist;dispid 41; // newMedia : Creates a new media object function newMedia(bstrURL:WideString):IWMPMedia;dispid 42; // openPlayer : Opens the player with the specified URL procedure openPlayer(bstrURL:WideString);dispid 28; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // dvd : Returns the DVD handler property dvd:IWMPDVD readonly dispid 40; // enabled : Returns a boolean value specifying whether or not the control is enabled property enabled:WordBool dispid 19; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool dispid 21; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool dispid 22; // uiMode : Specifies the ui mode to select property uiMode:WideString dispid 23; // stretchToFit : Returns a boolean value specifying whether or not video is stretched property stretchToFit:WordBool dispid 24; // windowlessVideo : Returns a boolean value specifying whether or not video is windowless property windowlessVideo:WordBool dispid 25; // isRemote : Indicates whether the player is running remotely property isRemote:WordBool readonly dispid 26; // playerApplication : Returns the player application handler property playerApplication:IWMPPlayerApplication readonly dispid 27; end; // IWMPControls : IWMPControls: Public interface. IWMPControls = interface(IDispatch) ['{74C09E02-F828-11D2-A74B-00A0C905F36E}'] function Get_isAvailable(bstrItem:WideString) : WordBool; safecall; // play : Begins playing media procedure play;safecall; // stop : Stops play of media procedure stop;safecall; // pause : Pauses play of media procedure pause;safecall; // fastForward : Fast play of media in forward direction procedure fastForward;safecall; // fastReverse : Fast play of media in reverse direction procedure fastReverse;safecall; function Get_currentPosition : Double; safecall; procedure Set_currentPosition(const pdCurrentPosition:Double); safecall; function Get_currentPositionString : WideString; safecall; // next : Sets the current item to the next item in the playlist procedure next;safecall; // previous : Sets the current item to the previous item in the playlist procedure previous;safecall; function Get_currentItem : IWMPMedia; safecall; procedure Set_currentItem(const ppIWMPMedia:IWMPMedia); safecall; function Get_currentMarker : Integer; safecall; procedure Set_currentMarker(const plMarker:Integer); safecall; // playItem : Sets the current item and plays it procedure playItem(pIWMPMedia:IWMPMedia);safecall; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool read Get_isAvailable; // currentPosition : Returns the current position in media property currentPosition:Double read Get_currentPosition write Set_currentPosition; // currentPositionString : Returns the current position in media as a string property currentPositionString:WideString read Get_currentPositionString; // currentItem : Returns/Sets the play item property currentItem:IWMPMedia read Get_currentItem write Set_currentItem; // currentMarker : Returns the current marker property currentMarker:Integer read Get_currentMarker write Set_currentMarker; end; // IWMPControls : IWMPControls: Public interface. IWMPControlsDisp = dispinterface ['{74C09E02-F828-11D2-A74B-00A0C905F36E}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // play : Begins playing media procedure play;dispid 51; // stop : Stops play of media procedure stop;dispid 52; // pause : Pauses play of media procedure pause;dispid 53; // fastForward : Fast play of media in forward direction procedure fastForward;dispid 54; // fastReverse : Fast play of media in reverse direction procedure fastReverse;dispid 55; // next : Sets the current item to the next item in the playlist procedure next;dispid 58; // previous : Sets the current item to the previous item in the playlist procedure previous;dispid 59; // playItem : Sets the current item and plays it procedure playItem(pIWMPMedia:IWMPMedia);dispid 63; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 62; // currentPosition : Returns the current position in media property currentPosition:Double dispid 56; // currentPositionString : Returns the current position in media as a string property currentPositionString:WideString readonly dispid 57; // currentItem : Returns/Sets the play item property currentItem:IWMPMedia dispid 60; // currentMarker : Returns the current marker property currentMarker:Integer dispid 61; end; // IWMPSettings : IWMPSettings: Public interface. IWMPSettings = interface(IDispatch) ['{9104D1AB-80C9-4FED-ABF0-2E6417A6DF14}'] function Get_isAvailable(bstrItem:WideString) : WordBool; safecall; function Get_autoStart : WordBool; safecall; procedure Set_autoStart(const pfAutoStart:WordBool); safecall; function Get_baseURL : WideString; safecall; procedure Set_baseURL(const pbstrBaseURL:WideString); safecall; function Get_defaultFrame : WideString; safecall; procedure Set_defaultFrame(const pbstrDefaultFrame:WideString); safecall; function Get_invokeURLs : WordBool; safecall; procedure Set_invokeURLs(const pfInvokeURLs:WordBool); safecall; function Get_mute : WordBool; safecall; procedure Set_mute(const pfMute:WordBool); safecall; function Get_playCount : Integer; safecall; procedure Set_playCount(const plCount:Integer); safecall; function Get_rate : Double; safecall; procedure Set_rate(const pdRate:Double); safecall; function Get_balance : Integer; safecall; procedure Set_balance(const plBalance:Integer); safecall; function Get_volume : Integer; safecall; procedure Set_volume(const plVolume:Integer); safecall; // getMode : Returns the mode of the playlist function getMode(bstrMode:WideString):WordBool;safecall; // setMode : Sets the mode of the playlist procedure setMode(bstrMode:WideString;varfMode:WordBool);safecall; function Get_enableErrorDialogs : WordBool; safecall; procedure Set_enableErrorDialogs(const pfEnableErrorDialogs:WordBool); safecall; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool read Get_isAvailable; // autoStart : Returns whether media should automatically begin playing property autoStart:WordBool read Get_autoStart write Set_autoStart; // baseURL : Returns the base URL used for relative path resolution property baseURL:WideString read Get_baseURL write Set_baseURL; // defaultFrame : Returns the frame location that changes when a URL flip occurs property defaultFrame:WideString read Get_defaultFrame write Set_defaultFrame; // invokeURLs : Returns whether URL events should spawn a browser. property invokeURLs:WordBool read Get_invokeURLs write Set_invokeURLs; // mute : Returns whether audio should be muted. property mute:WordBool read Get_mute write Set_mute; // playCount : Returns how many times media should play property playCount:Integer read Get_playCount write Set_playCount; // rate : Returns current playback rate property rate:Double read Get_rate write Set_rate; // balance : Returns current audio Balance property balance:Integer read Get_balance write Set_balance; // volume : Returns current audio volume property volume:Integer read Get_volume write Set_volume; // enableErrorDialogs : Returns whether error dialogs are shown by default when embedded property enableErrorDialogs:WordBool read Get_enableErrorDialogs write Set_enableErrorDialogs; end; // IWMPSettings : IWMPSettings: Public interface. IWMPSettingsDisp = dispinterface ['{9104D1AB-80C9-4FED-ABF0-2E6417A6DF14}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getMode : Returns the mode of the playlist function getMode(bstrMode:WideString):WordBool;dispid 110; // setMode : Sets the mode of the playlist procedure setMode(bstrMode:WideString;varfMode:WordBool);dispid 111; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 113; // autoStart : Returns whether media should automatically begin playing property autoStart:WordBool dispid 101; // baseURL : Returns the base URL used for relative path resolution property baseURL:WideString dispid 108; // defaultFrame : Returns the frame location that changes when a URL flip occurs property defaultFrame:WideString dispid 109; // invokeURLs : Returns whether URL events should spawn a browser. property invokeURLs:WordBool dispid 103; // mute : Returns whether audio should be muted. property mute:WordBool dispid 104; // playCount : Returns how many times media should play property playCount:Integer dispid 105; // rate : Returns current playback rate property rate:Double dispid 106; // balance : Returns current audio Balance property balance:Integer dispid 102; // volume : Returns current audio volume property volume:Integer dispid 107; // enableErrorDialogs : Returns whether error dialogs are shown by default when embedded property enableErrorDialogs:WordBool dispid 112; end; // IWMPPlaylistCollection : IWMPPlaylistCollection: Public interface. IWMPPlaylistCollection = interface(IDispatch) ['{10A13217-23A7-439B-B1C0-D847C79B7774}'] // newPlaylist : Creates a new playlist object function newPlaylist(bstrName:WideString):IWMPPlaylist;safecall; // getAll : Returns a playlist array with all the playlists function getAll:IWMPPlaylistArray;safecall; // getByName : Returns a playlist array with playlists matching the given name function getByName(bstrName:WideString):IWMPPlaylistArray;safecall; // remove : Removes an item from the playlist collection procedure remove(pItem:IWMPPlaylist);safecall; // setDeleted : Sets the deleted flag on a playlist object procedure setDeleted(pItem:IWMPPlaylist;varfIsDeleted:WordBool);safecall; // isDeleted : Gets the deleted flag on a playlist object function isDeleted(pItem:IWMPPlaylist):WordBool;safecall; // importPlaylist : Imports a playlist object into the library function importPlaylist(pItem:IWMPPlaylist):IWMPPlaylist;safecall; end; // IWMPPlaylistCollection : IWMPPlaylistCollection: Public interface. IWMPPlaylistCollectionDisp = dispinterface ['{10A13217-23A7-439B-B1C0-D847C79B7774}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // newPlaylist : Creates a new playlist object function newPlaylist(bstrName:WideString):IWMPPlaylist;dispid 552; // getAll : Returns a playlist array with all the playlists function getAll:IWMPPlaylistArray;dispid 553; // getByName : Returns a playlist array with playlists matching the given name function getByName(bstrName:WideString):IWMPPlaylistArray;dispid 554; // remove : Removes an item from the playlist collection procedure remove(pItem:IWMPPlaylist);dispid 556; // setDeleted : Sets the deleted flag on a playlist object procedure setDeleted(pItem:IWMPPlaylist;varfIsDeleted:WordBool);dispid 560; // isDeleted : Gets the deleted flag on a playlist object function isDeleted(pItem:IWMPPlaylist):WordBool;dispid 561; // importPlaylist : Imports a playlist object into the library function importPlaylist(pItem:IWMPPlaylist):IWMPPlaylist;dispid 562; end; // IWMPPlaylistArray : IWMPPlaylistArray: Public interface. IWMPPlaylistArray = interface(IDispatch) ['{679409C0-99F7-11D3-9FB7-00105AA620BB}'] function Get_count : Integer; safecall; // Item : Returns the playlist object at the given index function Item(lIndex:Integer):IWMPPlaylist;safecall; // count : Returns the number of items in the playlist array property count:Integer read Get_count; end; // IWMPPlaylistArray : IWMPPlaylistArray: Public interface. IWMPPlaylistArrayDisp = dispinterface ['{679409C0-99F7-11D3-9FB7-00105AA620BB}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Item : Returns the playlist object at the given index function Item(lIndex:Integer):IWMPPlaylist;dispid 502; // count : Returns the number of items in the playlist array property count:Integer readonly dispid 501; end; // IWMPNetwork : IWMPNetwork: Public interface. IWMPNetwork = interface(IDispatch) ['{EC21B779-EDEF-462D-BBA4-AD9DDE2B29A7}'] function Get_bandWidth : Integer; safecall; function Get_recoveredPackets : Integer; safecall; function Get_sourceProtocol : WideString; safecall; function Get_receivedPackets : Integer; safecall; function Get_lostPackets : Integer; safecall; function Get_receptionQuality : Integer; safecall; function Get_bufferingCount : Integer; safecall; function Get_bufferingProgress : Integer; safecall; function Get_bufferingTime : Integer; safecall; procedure Set_bufferingTime(const plBufferingTime:Integer); safecall; function Get_frameRate : Integer; safecall; function Get_maxBitRate : Integer; safecall; function Get_bitRate : Integer; safecall; // getProxySettings : Returns the proxy settings for the specified protocol function getProxySettings(bstrProtocol:WideString):Integer;safecall; // setProxySettings : Sets the proxy settings for the specified protocol procedure setProxySettings(bstrProtocol:WideString;lProxySetting:Integer);safecall; // getProxyName : Returns the proxy name for the specified protocol function getProxyName(bstrProtocol:WideString):WideString;safecall; // setProxyName : Sets the proxy name for the specified protocol procedure setProxyName(bstrProtocol:WideString;bstrProxyName:WideString);safecall; // getProxyPort : Returns the proxy port for the specified protocol function getProxyPort(bstrProtocol:WideString):Integer;safecall; // setProxyPort : Sets the proxy port for the specified protocol procedure setProxyPort(bstrProtocol:WideString;lProxyPort:Integer);safecall; // getProxyExceptionList : Returns the proxy exception list for the specified protocol function getProxyExceptionList(bstrProtocol:WideString):WideString;safecall; // setProxyExceptionList : Sets the proxy exception list for the specified protocol procedure setProxyExceptionList(bstrProtocol:WideString;pbstrExceptionList:WideString);safecall; // getProxyBypassForLocal : Returns whether or not to bypass the proxy for local addresses function getProxyBypassForLocal(bstrProtocol:WideString):WordBool;safecall; // setProxyBypassForLocal : Sets whether or not to by pass the proxy for local addresses procedure setProxyBypassForLocal(bstrProtocol:WideString;fBypassForLocal:WordBool);safecall; function Get_maxBandwidth : Integer; safecall; procedure Set_maxBandwidth(const lMaxBandwidth:Integer); safecall; function Get_downloadProgress : Integer; safecall; function Get_encodedFrameRate : Integer; safecall; function Get_framesSkipped : Integer; safecall; // bandWidth : Returns the current bandwidth of the clip. property bandWidth:Integer read Get_bandWidth; // recoveredPackets : Returns the number of recovered packets property recoveredPackets:Integer read Get_recoveredPackets; // sourceProtocol : Returns the source protocol used to receive data. property sourceProtocol:WideString read Get_sourceProtocol; // receivedPackets : Returns the number of packets received. property receivedPackets:Integer read Get_receivedPackets; // lostPackets : Returns the number of packets lost. property lostPackets:Integer read Get_lostPackets; // receptionQuality : Returns the percentage of packets received in the last 15 seconds. property receptionQuality:Integer read Get_receptionQuality; // bufferingCount : Returns the number of times buffering occurred during clip playback. property bufferingCount:Integer read Get_bufferingCount; // bufferingProgress : Returns the percentage of buffering completed. property bufferingProgress:Integer read Get_bufferingProgress; // bufferingTime : Returns the number of seconds allocated for buffering for this media type. property bufferingTime:Integer read Get_bufferingTime write Set_bufferingTime; // frameRate : Current video frame rate in frames/second property frameRate:Integer read Get_frameRate; // maxBitRate : Maximum possible video bit rate property maxBitRate:Integer read Get_maxBitRate; // bitRate : Current video bit rate property bitRate:Integer read Get_bitRate; // maxBandwidth : Returns or sets maximum allowed bandwidth property maxBandwidth:Integer read Get_maxBandwidth write Set_maxBandwidth; // downloadProgress : Returns the percentage of download completed. property downloadProgress:Integer read Get_downloadProgress; // encodedFrameRate : Returns the video frame rate, in frames/second, that the file was encoded in property encodedFrameRate:Integer read Get_encodedFrameRate; // framesSkipped : Returns the number of skipped frames property framesSkipped:Integer read Get_framesSkipped; end; // IWMPNetwork : IWMPNetwork: Public interface. IWMPNetworkDisp = dispinterface ['{EC21B779-EDEF-462D-BBA4-AD9DDE2B29A7}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getProxySettings : Returns the proxy settings for the specified protocol function getProxySettings(bstrProtocol:WideString):Integer;dispid 813; // setProxySettings : Sets the proxy settings for the specified protocol procedure setProxySettings(bstrProtocol:WideString;lProxySetting:Integer);dispid 814; // getProxyName : Returns the proxy name for the specified protocol function getProxyName(bstrProtocol:WideString):WideString;dispid 815; // setProxyName : Sets the proxy name for the specified protocol procedure setProxyName(bstrProtocol:WideString;bstrProxyName:WideString);dispid 816; // getProxyPort : Returns the proxy port for the specified protocol function getProxyPort(bstrProtocol:WideString):Integer;dispid 817; // setProxyPort : Sets the proxy port for the specified protocol procedure setProxyPort(bstrProtocol:WideString;lProxyPort:Integer);dispid 818; // getProxyExceptionList : Returns the proxy exception list for the specified protocol function getProxyExceptionList(bstrProtocol:WideString):WideString;dispid 819; // setProxyExceptionList : Sets the proxy exception list for the specified protocol procedure setProxyExceptionList(bstrProtocol:WideString;pbstrExceptionList:WideString);dispid 820; // getProxyBypassForLocal : Returns whether or not to bypass the proxy for local addresses function getProxyBypassForLocal(bstrProtocol:WideString):WordBool;dispid 821; // setProxyBypassForLocal : Sets whether or not to by pass the proxy for local addresses procedure setProxyBypassForLocal(bstrProtocol:WideString;fBypassForLocal:WordBool);dispid 822; // bandWidth : Returns the current bandwidth of the clip. property bandWidth:Integer readonly dispid 801; // recoveredPackets : Returns the number of recovered packets property recoveredPackets:Integer readonly dispid 802; // sourceProtocol : Returns the source protocol used to receive data. property sourceProtocol:WideString readonly dispid 803; // receivedPackets : Returns the number of packets received. property receivedPackets:Integer readonly dispid 804; // lostPackets : Returns the number of packets lost. property lostPackets:Integer readonly dispid 805; // receptionQuality : Returns the percentage of packets received in the last 15 seconds. property receptionQuality:Integer readonly dispid 806; // bufferingCount : Returns the number of times buffering occurred during clip playback. property bufferingCount:Integer readonly dispid 807; // bufferingProgress : Returns the percentage of buffering completed. property bufferingProgress:Integer readonly dispid 808; // bufferingTime : Returns the number of seconds allocated for buffering for this media type. property bufferingTime:Integer dispid 809; // frameRate : Current video frame rate in frames/second property frameRate:Integer readonly dispid 810; // maxBitRate : Maximum possible video bit rate property maxBitRate:Integer readonly dispid 811; // bitRate : Current video bit rate property bitRate:Integer readonly dispid 812; // maxBandwidth : Returns or sets maximum allowed bandwidth property maxBandwidth:Integer dispid 823; // downloadProgress : Returns the percentage of download completed. property downloadProgress:Integer readonly dispid 824; // encodedFrameRate : Returns the video frame rate, in frames/second, that the file was encoded in property encodedFrameRate:Integer readonly dispid 825; // framesSkipped : Returns the number of skipped frames property framesSkipped:Integer readonly dispid 826; end; // IWMPCdromCollection : IWMPCdromCollection: Public interface. IWMPCdromCollection = interface(IDispatch) ['{EE4C8FE2-34B2-11D3-A3BF-006097C9B344}'] function Get_count : Integer; safecall; // Item : Returns the CDROM object at the given index function Item(lIndex:Integer):IWMPCdrom;safecall; // getByDriveSpecifier : Returns the CDROM object associated with a particular drive specifier, e.g. F: function getByDriveSpecifier(bstrDriveSpecifier:WideString):IWMPCdrom;safecall; // count : Returns the number of items in the cdrom collection property count:Integer read Get_count; end; // IWMPCdromCollection : IWMPCdromCollection: Public interface. IWMPCdromCollectionDisp = dispinterface ['{EE4C8FE2-34B2-11D3-A3BF-006097C9B344}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Item : Returns the CDROM object at the given index function Item(lIndex:Integer):IWMPCdrom;dispid 302; // getByDriveSpecifier : Returns the CDROM object associated with a particular drive specifier, e.g. F: function getByDriveSpecifier(bstrDriveSpecifier:WideString):IWMPCdrom;dispid 303; // count : Returns the number of items in the cdrom collection property count:Integer readonly dispid 301; end; // IWMPCdrom : IWMPCdrom: Public interface. IWMPCdrom = interface(IDispatch) ['{CFAB6E98-8730-11D3-B388-00C04F68574B}'] function Get_driveSpecifier : WideString; safecall; function Get_Playlist : IWMPPlaylist; safecall; // eject : Eject the CD in the CDROM drive procedure eject;safecall; // driveSpecifier : Returns the CDROM drive specifier property driveSpecifier:WideString read Get_driveSpecifier; // Playlist : Returns the playlist of tracks currently in the CDROM drive property Playlist:IWMPPlaylist read Get_Playlist; end; // IWMPCdrom : IWMPCdrom: Public interface. IWMPCdromDisp = dispinterface ['{CFAB6E98-8730-11D3-B388-00C04F68574B}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // eject : Eject the CD in the CDROM drive procedure eject;dispid 253; // driveSpecifier : Returns the CDROM drive specifier property driveSpecifier:WideString readonly dispid 251; // Playlist : Returns the playlist of tracks currently in the CDROM drive property Playlist:IWMPPlaylist readonly dispid 252; end; // IWMPClosedCaption : IWMPClosedCaption: Public interface. IWMPClosedCaption = interface(IDispatch) ['{4F2DF574-C588-11D3-9ED0-00C04FB6E937}'] function Get_SAMIStyle : WideString; safecall; procedure Set_SAMIStyle(const pbstrSAMIStyle:WideString); safecall; function Get_SAMILang : WideString; safecall; procedure Set_SAMILang(const pbstrSAMILang:WideString); safecall; function Get_SAMIFileName : WideString; safecall; procedure Set_SAMIFileName(const pbstrSAMIFileName:WideString); safecall; function Get_captioningId : WideString; safecall; procedure Set_captioningId(const pbstrCaptioningID:WideString); safecall; // SAMIStyle : Returns the previously set SAMI style property SAMIStyle:WideString read Get_SAMIStyle write Set_SAMIStyle; // SAMILang : Returns the previously set SAMI language property SAMILang:WideString read Get_SAMILang write Set_SAMILang; // SAMIFileName : Returns the previously set SAMI file name property SAMIFileName:WideString read Get_SAMIFileName write Set_SAMIFileName; // captioningId : Returns the previously set Captioning ID property captioningId:WideString read Get_captioningId write Set_captioningId; end; // IWMPClosedCaption : IWMPClosedCaption: Public interface. IWMPClosedCaptionDisp = dispinterface ['{4F2DF574-C588-11D3-9ED0-00C04FB6E937}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // SAMIStyle : Returns the previously set SAMI style property SAMIStyle:WideString dispid 951; // SAMILang : Returns the previously set SAMI language property SAMILang:WideString dispid 952; // SAMIFileName : Returns the previously set SAMI file name property SAMIFileName:WideString dispid 953; // captioningId : Returns the previously set Captioning ID property captioningId:WideString dispid 954; end; // IWMPError : IWMPError: Public interface. IWMPError = interface(IDispatch) ['{A12DCF7D-14AB-4C1B-A8CD-63909F06025B}'] // clearErrorQueue : Clears the error queue procedure clearErrorQueue;safecall; function Get_errorCount : Integer; safecall; function Get_Item(dwIndex:Integer) : IWMPErrorItem; safecall; // webHelp : Launches WebHelp procedure webHelp;safecall; // errorCount : Returns the number of error items property errorCount:Integer read Get_errorCount; // Item : Returns an error item object property Item[dwIndex:Integer]:IWMPErrorItem read Get_Item; end; // IWMPError : IWMPError: Public interface. IWMPErrorDisp = dispinterface ['{A12DCF7D-14AB-4C1B-A8CD-63909F06025B}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // clearErrorQueue : Clears the error queue procedure clearErrorQueue;dispid 851; // webHelp : Launches WebHelp procedure webHelp;dispid 854; // errorCount : Returns the number of error items property errorCount:Integer readonly dispid 852; // Item : Returns an error item object property Item[dwIndex:Integer]:IWMPErrorItem readonly dispid 853; end; // IWMPErrorItem : IWMPErrorItem: Public interface. IWMPErrorItem = interface(IDispatch) ['{3614C646-3B3B-4DE7-A81E-930E3F2127B3}'] function Get_errorCode : Integer; safecall; function Get_errorDescription : WideString; safecall; function Get_errorContext : OleVariant; safecall; function Get_remedy : Integer; safecall; function Get_customUrl : WideString; safecall; // errorCode : Returns the error code property errorCode:Integer read Get_errorCode; // errorDescription : Returns a description of the error property errorDescription:WideString read Get_errorDescription; // errorContext : Returns context information for the error property errorContext:OleVariant read Get_errorContext; // remedy : Returns remedy code for the error property remedy:Integer read Get_remedy; // customUrl : Returns a custom url for this error (if avail) property customUrl:WideString read Get_customUrl; end; // IWMPErrorItem : IWMPErrorItem: Public interface. IWMPErrorItemDisp = dispinterface ['{3614C646-3B3B-4DE7-A81E-930E3F2127B3}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // errorCode : Returns the error code property errorCode:Integer readonly dispid 901; // errorDescription : Returns a description of the error property errorDescription:WideString readonly dispid 902; // errorContext : Returns context information for the error property errorContext:OleVariant readonly dispid 903; // remedy : Returns remedy code for the error property remedy:Integer readonly dispid 904; // customUrl : Returns a custom url for this error (if avail) property customUrl:WideString readonly dispid 905; end; // IWMPDVD : IWMPDVD: Public interface. IWMPDVD = interface(IDispatch) ['{8DA61686-4668-4A5C-AE5D-803193293DBE}'] function Get_isAvailable(bstrItem:WideString) : WordBool; safecall; function Get_domain : WideString; safecall; // topMenu : Displays the top menu of the DVD procedure topMenu;safecall; // titleMenu : Displays the title menu of the current DVD title procedure titleMenu;safecall; // back : Navigates back one menu procedure back;safecall; // resume : Removes the menu from the screen and returns to playing the DVD procedure resume;safecall; // isAvailable : Returns whether or not the specified DVD functionality is available property isAvailable[bstrItem:WideString]:WordBool read Get_isAvailable; // domain : Returns the current DVD domain property domain:WideString read Get_domain; end; // IWMPDVD : IWMPDVD: Public interface. IWMPDVDDisp = dispinterface ['{8DA61686-4668-4A5C-AE5D-803193293DBE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // topMenu : Displays the top menu of the DVD procedure topMenu;dispid 1003; // titleMenu : Displays the title menu of the current DVD title procedure titleMenu;dispid 1004; // back : Navigates back one menu procedure back;dispid 1005; // resume : Removes the menu from the screen and returns to playing the DVD procedure resume;dispid 1006; // isAvailable : Returns whether or not the specified DVD functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 1001; // domain : Returns the current DVD domain property domain:WideString readonly dispid 1002; end; // IWMPPlayerApplication : IWMPPlayerApplication: Public interface. IWMPPlayerApplication = interface(IDispatch) ['{40897764-CEAB-47BE-AD4A-8E28537F9BBF}'] // switchToPlayerApplication : Switches the display to player application procedure switchToPlayerApplication;safecall; // switchToControl : Switches the display to control procedure switchToControl;safecall; function Get_playerDocked : WordBool; safecall; function Get_hasDisplay : WordBool; safecall; // playerDocked : Returns a boolean value specifying whether or not the player is docked property playerDocked:WordBool read Get_playerDocked; // hasDisplay : Returns a boolean value specifying whether or not the control has display property hasDisplay:WordBool read Get_hasDisplay; end; // IWMPPlayerApplication : IWMPPlayerApplication: Public interface. IWMPPlayerApplicationDisp = dispinterface ['{40897764-CEAB-47BE-AD4A-8E28537F9BBF}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // switchToPlayerApplication : Switches the display to player application procedure switchToPlayerApplication;dispid 1101; // switchToControl : Switches the display to control procedure switchToControl;dispid 1102; // playerDocked : Returns a boolean value specifying whether or not the player is docked property playerDocked:WordBool readonly dispid 1103; // hasDisplay : Returns a boolean value specifying whether or not the control has display property hasDisplay:WordBool readonly dispid 1104; end; // IWMPPlayer3 : IWMPPlayer3: Public interface. IWMPPlayer3 = interface(IWMPCore2) ['{54062B68-052A-4C25-A39F-8B63346511D4}'] function Get_enabled : WordBool; safecall; procedure Set_enabled(const pbEnabled:WordBool); safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; function Get_enableContextMenu : WordBool; safecall; procedure Set_enableContextMenu(const pbEnableContextMenu:WordBool); safecall; procedure Set_uiMode(const pbstrMode:WideString); safecall; function Get_uiMode : WideString; safecall; function Get_stretchToFit : WordBool; safecall; procedure Set_stretchToFit(const pbEnabled:WordBool); safecall; function Get_windowlessVideo : WordBool; safecall; procedure Set_windowlessVideo(const pbEnabled:WordBool); safecall; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool read Get_enabled write Set_enabled; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool read Get_enableContextMenu write Set_enableContextMenu; // uiMode : Specifies the ui mode to select property uiMode:WideString read Get_uiMode write Set_uiMode; // stretchToFit : Returns a boolen value specifying whether or not video is stretched property stretchToFit:WordBool read Get_stretchToFit write Set_stretchToFit; // windowlessVideo : Returns a boolen value specifying whether or not video is windowless property windowlessVideo:WordBool read Get_windowlessVideo write Set_windowlessVideo; end; // IWMPPlayer3 : IWMPPlayer3: Public interface. IWMPPlayer3Disp = dispinterface ['{54062B68-052A-4C25-A39F-8B63346511D4}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // dvd : Returns the DVD handler property dvd:IWMPDVD readonly dispid 40; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool dispid 19; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool dispid 21; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool dispid 22; // uiMode : Specifies the ui mode to select property uiMode:WideString dispid 23; // stretchToFit : Returns a boolen value specifying whether or not video is stretched property stretchToFit:WordBool dispid 24; // windowlessVideo : Returns a boolen value specifying whether or not video is windowless property windowlessVideo:WordBool dispid 25; end; // IWMPPlayer2 : IWMPPlayer2: Public interface. IWMPPlayer2 = interface(IWMPCore) ['{0E6B01D1-D407-4C85-BF5F-1C01F6150280}'] function Get_enabled : WordBool; safecall; procedure Set_enabled(const pbEnabled:WordBool); safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; function Get_enableContextMenu : WordBool; safecall; procedure Set_enableContextMenu(const pbEnableContextMenu:WordBool); safecall; procedure Set_uiMode(const pbstrMode:WideString); safecall; function Get_uiMode : WideString; safecall; function Get_stretchToFit : WordBool; safecall; procedure Set_stretchToFit(const pbEnabled:WordBool); safecall; function Get_windowlessVideo : WordBool; safecall; procedure Set_windowlessVideo(const pbEnabled:WordBool); safecall; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool read Get_enabled write Set_enabled; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool read Get_enableContextMenu write Set_enableContextMenu; // uiMode : Specifies the ui mode to select property uiMode:WideString read Get_uiMode write Set_uiMode; // stretchToFit : Returns a boolen value specifying whether or not video is stretched property stretchToFit:WordBool read Get_stretchToFit write Set_stretchToFit; // windowlessVideo : Returns a boolen value specifying whether or not video is windowless property windowlessVideo:WordBool read Get_windowlessVideo write Set_windowlessVideo; end; // IWMPPlayer2 : IWMPPlayer2: Public interface. IWMPPlayer2Disp = dispinterface ['{0E6B01D1-D407-4C85-BF5F-1C01F6150280}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool dispid 19; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool dispid 21; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool dispid 22; // uiMode : Specifies the ui mode to select property uiMode:WideString dispid 23; // stretchToFit : Returns a boolen value specifying whether or not video is stretched property stretchToFit:WordBool dispid 24; // windowlessVideo : Returns a boolen value specifying whether or not video is windowless property windowlessVideo:WordBool dispid 25; end; // IWMPPlayer : IWMPPlayer: Public interface. IWMPPlayer = interface(IWMPCore) ['{6BF52A4F-394A-11D3-B153-00C04F79FAA6}'] function Get_enabled : WordBool; safecall; procedure Set_enabled(const pbEnabled:WordBool); safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; function Get_enableContextMenu : WordBool; safecall; procedure Set_enableContextMenu(const pbEnableContextMenu:WordBool); safecall; procedure Set_uiMode(const pbstrMode:WideString); safecall; function Get_uiMode : WideString; safecall; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool read Get_enabled write Set_enabled; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool read Get_enableContextMenu write Set_enableContextMenu; // uiMode : Specifies the ui mode to select property uiMode:WideString read Get_uiMode write Set_uiMode; end; // IWMPPlayer : IWMPPlayer: Public interface. IWMPPlayerDisp = dispinterface ['{6BF52A4F-394A-11D3-B153-00C04F79FAA6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // close : Closes the media procedure close;dispid 3; // launchURL : procedure launchURL(bstrURL:WideString);dispid 12; // URL : Returns or sets the URL property URL:WideString dispid 1; // openState : Returns the open state of the player property openState:WMPOpenState readonly dispid 2; // playState : Returns the play state of the player property playState:WMPPlayState readonly dispid 10; // controls : Returns the control handler property controls:IWMPControls readonly dispid 4; // settings : Returns the settings handler property settings:IWMPSettings readonly dispid 5; // currentMedia : Returns or sets the current media object property currentMedia:IWMPMedia dispid 6; // mediaCollection : Returns the media collection handler property mediaCollection:IWMPMediaCollection readonly dispid 8; // playlistCollection : Returns the playlist collection handler property playlistCollection:IWMPPlaylistCollection readonly dispid 9; // versionInfo : Returns the version information for the player property versionInfo:WideString readonly dispid 11; // network : Returns the network information handler property network:IWMPNetwork readonly dispid 7; // currentPlaylist : Returns/sets the current playlist property currentPlaylist:IWMPPlaylist dispid 13; // cdromCollection : Get the CDROM drive collection property cdromCollection:IWMPCdromCollection readonly dispid 14; // closedCaption : Returns the closed caption handler property closedCaption:IWMPClosedCaption readonly dispid 15; // isOnline : Returns whether the machine is online. property isOnline:WordBool readonly dispid 16; // Error : Returns the error object property Error:IWMPError readonly dispid 17; // status : Returns status string property status:WideString readonly dispid 18; // enabled : Returns a boolen value specifying whether or not the control is enabled property enabled:WordBool dispid 19; // fullScreen : Returns a boolean value specifying whether or not the control is in full screen mode property fullScreen:WordBool dispid 21; // enableContextMenu : Returns a boolean value specifying whether or not the context menu is enabled on the control property enableContextMenu:WordBool dispid 22; // uiMode : Specifies the ui mode to select property uiMode:WideString dispid 23; end; // IWMPErrorItem2 : IWMPErrorItem2: Public interface. IWMPErrorItem2 = interface(IWMPErrorItem) ['{F75CCEC0-C67C-475C-931E-8719870BEE7D}'] function Get_condition : Integer; safecall; // condition : Returns condition for the error property condition:Integer read Get_condition; end; // IWMPErrorItem2 : IWMPErrorItem2: Public interface. IWMPErrorItem2Disp = dispinterface ['{F75CCEC0-C67C-475C-931E-8719870BEE7D}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // errorCode : Returns the error code property errorCode:Integer readonly dispid 901; // errorDescription : Returns a description of the error property errorDescription:WideString readonly dispid 902; // errorContext : Returns context information for the error property errorContext:OleVariant readonly dispid 903; // remedy : Returns remedy code for the error property remedy:Integer readonly dispid 904; // customUrl : Returns a custom url for this error (if avail) property customUrl:WideString readonly dispid 905; // condition : Returns condition for the error property condition:Integer readonly dispid 906; end; // IWMPControls2 : IWMPControls2: Public interface. IWMPControls2 = interface(IWMPControls) ['{6F030D25-0890-480F-9775-1F7E40AB5B8E}'] // step : Advances the video one frame procedure step(lStep:Integer);safecall; end; // IWMPControls2 : IWMPControls2: Public interface. IWMPControls2Disp = dispinterface ['{6F030D25-0890-480F-9775-1F7E40AB5B8E}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // play : Begins playing media procedure play;dispid 51; // stop : Stops play of media procedure stop;dispid 52; // pause : Pauses play of media procedure pause;dispid 53; // fastForward : Fast play of media in forward direction procedure fastForward;dispid 54; // fastReverse : Fast play of media in reverse direction procedure fastReverse;dispid 55; // next : Sets the current item to the next item in the playlist procedure next;dispid 58; // previous : Sets the current item to the previous item in the playlist procedure previous;dispid 59; // playItem : Sets the current item and plays it procedure playItem(pIWMPMedia:IWMPMedia);dispid 63; // step : Advances the video one frame procedure step(lStep:Integer);dispid 64; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 62; // currentPosition : Returns the current position in media property currentPosition:Double dispid 56; // currentPositionString : Returns the current position in media as a string property currentPositionString:WideString readonly dispid 57; // currentItem : Returns/Sets the play item property currentItem:IWMPMedia dispid 60; // currentMarker : Returns the current marker property currentMarker:Integer dispid 61; end; // IWMPMedia2 : IWMPMedia2: Public interface. IWMPMedia2 = interface(IWMPMedia) ['{AB7C88BB-143E-4EA4-ACC3-E4350B2106C3}'] function Get_Error : IWMPErrorItem; safecall; // Error : Returns an error item pointer for a media specific error property Error:IWMPErrorItem read Get_Error; end; // IWMPMedia2 : IWMPMedia2: Public interface. IWMPMedia2Disp = dispinterface ['{AB7C88BB-143E-4EA4-ACC3-E4350B2106C3}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getMarkerTime : Returns the time of a marker function getMarkerTime(MarkerNum:Integer):Double;dispid 755; // getMarkerName : Returns the name of a marker function getMarkerName(MarkerNum:Integer):WideString;dispid 756; // getAttributeName : Returns the name of the attribute whose index has been specified function getAttributeName(lIndex:Integer):WideString;dispid 760; // getItemInfo : Returns the value of specified attribute for this media function getItemInfo(bstrItemName:WideString):WideString;dispid 761; // setItemInfo : Sets the value of specified attribute for this media procedure setItemInfo(bstrItemName:WideString;bstrVal:WideString);dispid 762; // getItemInfoByAtom : Gets an item info by atom function getItemInfoByAtom(lAtom:Integer):WideString;dispid 765; // isMemberOf : Is the media a member of the given playlist function isMemberOf(pPlaylist:IWMPPlaylist):WordBool;dispid 766; // isReadOnlyItem : Is the attribute read only function isReadOnlyItem(bstrItemName:WideString):WordBool;dispid 767; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPMedia:IWMPMedia]:WordBool readonly dispid 763; // sourceURL : Returns the media URL property sourceURL:WideString readonly dispid 751; // name : Returns the name of the media property name:WideString dispid 764; // imageSourceWidth : Returns the original width of the source images property imageSourceWidth:Integer readonly dispid 752; // imageSourceHeight : Returns the original height of the source images property imageSourceHeight:Integer readonly dispid 753; // markerCount : Returns the number of markers in the file property markerCount:Integer readonly dispid 754; // duration : Returns duration of current media property duration:Double readonly dispid 757; // durationString : Returns duration of current media as a string property durationString:WideString readonly dispid 758; // attributeCount : Returns the count of the attributes associated with this media property attributeCount:Integer readonly dispid 759; // Error : Returns an error item pointer for a media specific error property Error:IWMPErrorItem readonly dispid 768; end; // IWMPMedia3 : IWMPMedia3: Public interface. IWMPMedia3 = interface(IWMPMedia2) ['{F118EFC7-F03A-4FB4-99C9-1C02A5C1065B}'] // getAttributeCountByType : function getAttributeCountByType(bstrType:WideString;bstrLanguage:WideString):Integer;safecall; // getItemInfoByType : function getItemInfoByType(bstrType:WideString;bstrLanguage:WideString;lIndex:Integer):OleVariant;safecall; end; // IWMPMedia3 : IWMPMedia3: Public interface. IWMPMedia3Disp = dispinterface ['{F118EFC7-F03A-4FB4-99C9-1C02A5C1065B}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getMarkerTime : Returns the time of a marker function getMarkerTime(MarkerNum:Integer):Double;dispid 755; // getMarkerName : Returns the name of a marker function getMarkerName(MarkerNum:Integer):WideString;dispid 756; // getAttributeName : Returns the name of the attribute whose index has been specified function getAttributeName(lIndex:Integer):WideString;dispid 760; // getItemInfo : Returns the value of specified attribute for this media function getItemInfo(bstrItemName:WideString):WideString;dispid 761; // setItemInfo : Sets the value of specified attribute for this media procedure setItemInfo(bstrItemName:WideString;bstrVal:WideString);dispid 762; // getItemInfoByAtom : Gets an item info by atom function getItemInfoByAtom(lAtom:Integer):WideString;dispid 765; // isMemberOf : Is the media a member of the given playlist function isMemberOf(pPlaylist:IWMPPlaylist):WordBool;dispid 766; // isReadOnlyItem : Is the attribute read only function isReadOnlyItem(bstrItemName:WideString):WordBool;dispid 767; // getAttributeCountByType : function getAttributeCountByType(bstrType:WideString;bstrLanguage:WideString):Integer;dispid 769; // getItemInfoByType : function getItemInfoByType(bstrType:WideString;bstrLanguage:WideString;lIndex:Integer):OleVariant;dispid 770; // isIdentical : Determines if the supplied object is the same as the this one property isIdentical[pIWMPMedia:IWMPMedia]:WordBool readonly dispid 763; // sourceURL : Returns the media URL property sourceURL:WideString readonly dispid 751; // name : Returns the name of the media property name:WideString dispid 764; // imageSourceWidth : Returns the original width of the source images property imageSourceWidth:Integer readonly dispid 752; // imageSourceHeight : Returns the original height of the source images property imageSourceHeight:Integer readonly dispid 753; // markerCount : Returns the number of markers in the file property markerCount:Integer readonly dispid 754; // duration : Returns duration of current media property duration:Double readonly dispid 757; // durationString : Returns duration of current media as a string property durationString:WideString readonly dispid 758; // attributeCount : Returns the count of the attributes associated with this media property attributeCount:Integer readonly dispid 759; // Error : Returns an error item pointer for a media specific error property Error:IWMPErrorItem readonly dispid 768; end; // IWMPMetadataPicture : IWMPMetadataPicture: Not Public. Internal interface used by Windows Media Player. IWMPMetadataPicture = interface(IDispatch) ['{5C29BBE0-F87D-4C45-AA28-A70F0230FFA9}'] function Get_mimeType : WideString; safecall; function Get_pictureType : WideString; safecall; function Get_Description : WideString; safecall; function Get_URL : WideString; safecall; // mimeType : property mimeType:WideString read Get_mimeType; // pictureType : property pictureType:WideString read Get_pictureType; // Description : property Description:WideString read Get_Description; // URL : property URL:WideString read Get_URL; end; // IWMPMetadataPicture : IWMPMetadataPicture: Not Public. Internal interface used by Windows Media Player. IWMPMetadataPictureDisp = dispinterface ['{5C29BBE0-F87D-4C45-AA28-A70F0230FFA9}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // mimeType : property mimeType:WideString readonly dispid 1051; // pictureType : property pictureType:WideString readonly dispid 1052; // Description : property Description:WideString readonly dispid 1053; // URL : property URL:WideString readonly dispid 1054; end; // IWMPMetadataText : IWMPMetadataText: Not Public. Internal interface used by Windows Media Player. IWMPMetadataText = interface(IDispatch) ['{769A72DB-13D2-45E2-9C48-53CA9D5B7450}'] function Get_Description : WideString; safecall; function Get_text_ : WideString; safecall; // Description : property Description:WideString read Get_Description; // text : property text_:WideString read Get_text_; end; // IWMPMetadataText : IWMPMetadataText: Not Public. Internal interface used by Windows Media Player. IWMPMetadataTextDisp = dispinterface ['{769A72DB-13D2-45E2-9C48-53CA9D5B7450}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Description : property Description:WideString readonly dispid 1056; // text : property text_:WideString readonly dispid 1055; end; // IWMPSettings2 : IWMPSettings2: Public interface. IWMPSettings2 = interface(IWMPSettings) ['{FDA937A4-EECE-4DA5-A0B6-39BF89ADE2C2}'] function Get_defaultAudioLanguage : Integer; safecall; function Get_mediaAccessRights : WideString; safecall; // requestMediaAccessRights : function requestMediaAccessRights(bstrDesiredAccess:WideString):WordBool;safecall; // defaultAudioLanguage : Returns the LCID of default audio language property defaultAudioLanguage:Integer read Get_defaultAudioLanguage; // mediaAccessRights : property mediaAccessRights:WideString read Get_mediaAccessRights; end; // IWMPSettings2 : IWMPSettings2: Public interface. IWMPSettings2Disp = dispinterface ['{FDA937A4-EECE-4DA5-A0B6-39BF89ADE2C2}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getMode : Returns the mode of the playlist function getMode(bstrMode:WideString):WordBool;dispid 110; // setMode : Sets the mode of the playlist procedure setMode(bstrMode:WideString;varfMode:WordBool);dispid 111; // requestMediaAccessRights : function requestMediaAccessRights(bstrDesiredAccess:WideString):WordBool;dispid 116; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 113; // autoStart : Returns whether media should automatically begin playing property autoStart:WordBool dispid 101; // baseURL : Returns the base URL used for relative path resolution property baseURL:WideString dispid 108; // defaultFrame : Returns the frame location that changes when a URL flip occurs property defaultFrame:WideString dispid 109; // invokeURLs : Returns whether URL events should spawn a browser. property invokeURLs:WordBool dispid 103; // mute : Returns whether audio should be muted. property mute:WordBool dispid 104; // playCount : Returns how many times media should play property playCount:Integer dispid 105; // rate : Returns current playback rate property rate:Double dispid 106; // balance : Returns current audio Balance property balance:Integer dispid 102; // volume : Returns current audio volume property volume:Integer dispid 107; // enableErrorDialogs : Returns whether error dialogs are shown by default when embedded property enableErrorDialogs:WordBool dispid 112; // defaultAudioLanguage : Returns the LCID of default audio language property defaultAudioLanguage:Integer readonly dispid 114; // mediaAccessRights : property mediaAccessRights:WideString readonly dispid 115; end; // IWMPControls3 : IWMPControls3: Public interface. IWMPControls3 = interface(IWMPControls2) ['{A1D1110E-D545-476A-9A78-AC3E4CB1E6BD}'] function Get_audioLanguageCount : Integer; safecall; // getAudioLanguageID : Returns the LCID corresponding to the index function getAudioLanguageID(lIndex:Integer):Integer;safecall; // getAudioLanguageDescription : Returns the desription corresponding to the index function getAudioLanguageDescription(lIndex:Integer):WideString;safecall; function Get_currentAudioLanguage : Integer; safecall; procedure Set_currentAudioLanguage(const plLangID:Integer); safecall; function Get_currentAudioLanguageIndex : Integer; safecall; procedure Set_currentAudioLanguageIndex(const plIndex:Integer); safecall; // getLanguageName : Returns the human-readable name of language specified by LCID function getLanguageName(lLangID:Integer):WideString;safecall; function Get_currentPositionTimecode : WideString; safecall; procedure Set_currentPositionTimecode(const bstrTimecode:WideString); safecall; // audioLanguageCount : Returns the count of supported audio languages property audioLanguageCount:Integer read Get_audioLanguageCount; // currentAudioLanguage : Gets the current audio language setting for playback property currentAudioLanguage:Integer read Get_currentAudioLanguage write Set_currentAudioLanguage; // currentAudioLanguageIndex : Gets the current audio language index setting for playback property currentAudioLanguageIndex:Integer read Get_currentAudioLanguageIndex write Set_currentAudioLanguageIndex; // currentPositionTimecode : Returns the current timecode position in media property currentPositionTimecode:WideString read Get_currentPositionTimecode write Set_currentPositionTimecode; end; // IWMPControls3 : IWMPControls3: Public interface. IWMPControls3Disp = dispinterface ['{A1D1110E-D545-476A-9A78-AC3E4CB1E6BD}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // play : Begins playing media procedure play;dispid 51; // stop : Stops play of media procedure stop;dispid 52; // pause : Pauses play of media procedure pause;dispid 53; // fastForward : Fast play of media in forward direction procedure fastForward;dispid 54; // fastReverse : Fast play of media in reverse direction procedure fastReverse;dispid 55; // next : Sets the current item to the next item in the playlist procedure next;dispid 58; // previous : Sets the current item to the previous item in the playlist procedure previous;dispid 59; // playItem : Sets the current item and plays it procedure playItem(pIWMPMedia:IWMPMedia);dispid 63; // step : Advances the video one frame procedure step(lStep:Integer);dispid 64; // getAudioLanguageID : Returns the LCID corresponding to the index function getAudioLanguageID(lIndex:Integer):Integer;dispid 66; // getAudioLanguageDescription : Returns the desription corresponding to the index function getAudioLanguageDescription(lIndex:Integer):WideString;dispid 67; // getLanguageName : Returns the human-readable name of language specified by LCID function getLanguageName(lLangID:Integer):WideString;dispid 70; // isAvailable : Returns whether or not the specified media functionality is available property isAvailable[bstrItem:WideString]:WordBool readonly dispid 62; // currentPosition : Returns the current position in media property currentPosition:Double dispid 56; // currentPositionString : Returns the current position in media as a string property currentPositionString:WideString readonly dispid 57; // currentItem : Returns/Sets the play item property currentItem:IWMPMedia dispid 60; // currentMarker : Returns the current marker property currentMarker:Integer dispid 61; // audioLanguageCount : Returns the count of supported audio languages property audioLanguageCount:Integer readonly dispid 65; // currentAudioLanguage : Gets the current audio language setting for playback property currentAudioLanguage:Integer dispid 68; // currentAudioLanguageIndex : Gets the current audio language index setting for playback property currentAudioLanguageIndex:Integer dispid 69; // currentPositionTimecode : Returns the current timecode position in media property currentPositionTimecode:WideString dispid 71; end; // IWMPClosedCaption2 : IWMPClosedCaption2: Public interface. IWMPClosedCaption2 = interface(IWMPClosedCaption) ['{350BA78B-6BC8-4113-A5F5-312056934EB6}'] function Get_SAMILangCount : Integer; safecall; // getSAMILangName : Returns the name of a SAMI language by index function getSAMILangName(nIndex:Integer):WideString;safecall; // getSAMILangID : Returns the ID of a SAMI language by index function getSAMILangID(nIndex:Integer):Integer;safecall; function Get_SAMIStyleCount : Integer; safecall; // getSAMIStyleName : Returns the name of a SAMI style by index function getSAMIStyleName(nIndex:Integer):WideString;safecall; // SAMILangCount : Returns the count of SAMI languages property SAMILangCount:Integer read Get_SAMILangCount; // SAMIStyleCount : Returns the count of SAMI styles property SAMIStyleCount:Integer read Get_SAMIStyleCount; end; // IWMPClosedCaption2 : IWMPClosedCaption2: Public interface. IWMPClosedCaption2Disp = dispinterface ['{350BA78B-6BC8-4113-A5F5-312056934EB6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getSAMILangName : Returns the name of a SAMI language by index function getSAMILangName(nIndex:Integer):WideString;dispid 956; // getSAMILangID : Returns the ID of a SAMI language by index function getSAMILangID(nIndex:Integer):Integer;dispid 957; // getSAMIStyleName : Returns the name of a SAMI style by index function getSAMIStyleName(nIndex:Integer):WideString;dispid 959; // SAMIStyle : Returns the previously set SAMI style property SAMIStyle:WideString dispid 951; // SAMILang : Returns the previously set SAMI language property SAMILang:WideString dispid 952; // SAMIFileName : Returns the previously set SAMI file name property SAMIFileName:WideString dispid 953; // captioningId : Returns the previously set Captioning ID property captioningId:WideString dispid 954; // SAMILangCount : Returns the count of SAMI languages property SAMILangCount:Integer readonly dispid 955; // SAMIStyleCount : Returns the count of SAMI styles property SAMIStyleCount:Integer readonly dispid 958; end; // IWMPMediaCollection2 : IWMPMediaCollection2: Public interface for Windows Media Player SDK. IWMPMediaCollection2 = interface(IWMPMediaCollection) ['{8BA957F5-FD8C-4791-B82D-F840401EE474}'] // createQuery : Creates an empty query object function createQuery:IWMPQuery;safecall; // getPlaylistByQuery : Creates a playlist from a query function getPlaylistByQuery(pQuery:IWMPQuery;bstrMediaType:WideString;bstrSortAttribute:WideString;fSortAscending:WordBool):IWMPPlaylist;safecall; // getStringCollectionByQuery : Creates a string collection from a query function getStringCollectionByQuery(bstrAttribute:WideString;pQuery:IWMPQuery;bstrMediaType:WideString;bstrSortAttribute:WideString;fSortAscending:WordBool):IWMPStringCollection;safecall; // getByAttributeAndMediaType : Returns a collection of items with the given attribute and media type function getByAttributeAndMediaType(bstrAttribute:WideString;bstrValue:WideString;bstrMediaType:WideString):IWMPPlaylist;safecall; end; // IWMPMediaCollection2 : IWMPMediaCollection2: Public interface for Windows Media Player SDK. IWMPMediaCollection2Disp = dispinterface ['{8BA957F5-FD8C-4791-B82D-F840401EE474}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // add : Creates a new media object function add(bstrURL:WideString):IWMPMedia;dispid 452; // getAll : Returns a collection of all the items function getAll:IWMPPlaylist;dispid 453; // getByName : Returns a collection of items with the given name function getByName(bstrName:WideString):IWMPPlaylist;dispid 454; // getByGenre : Returns a collection of items with the given genre function getByGenre(bstrGenre:WideString):IWMPPlaylist;dispid 455; // getByAuthor : Returns a collection of items by a given author function getByAuthor(bstrAuthor:WideString):IWMPPlaylist;dispid 456; // getByAlbum : Returns a collection of items from the given album function getByAlbum(bstrAlbum:WideString):IWMPPlaylist;dispid 457; // getByAttribute : Returns a collection of items with the given attribute function getByAttribute(bstrAttribute:WideString;bstrValue:WideString):IWMPPlaylist;dispid 458; // remove : Removes an item from the media collection procedure remove(pItem:IWMPMedia;varfDeleteFile:WordBool);dispid 459; // getAttributeStringCollection : Returns the string collection associated with an attribute function getAttributeStringCollection(bstrAttribute:WideString;bstrMediaType:WideString):IWMPStringCollection;dispid 461; // getMediaAtom : Gets an atom associated with an item name which can be requested from an IWMPMedia out of this collection via getItemInfoByAtom function getMediaAtom(bstrItemName:WideString):Integer;dispid 470; // setDeleted : Sets the deleted flag on a media object procedure setDeleted(pItem:IWMPMedia;varfIsDeleted:WordBool);dispid 471; // isDeleted : Gets the deleted flag on a media object function isDeleted(pItem:IWMPMedia):WordBool;dispid 472; // createQuery : Creates an empty query object function createQuery:IWMPQuery;dispid 1401; // getPlaylistByQuery : Creates a playlist from a query function getPlaylistByQuery(pQuery:IWMPQuery;bstrMediaType:WideString;bstrSortAttribute:WideString;fSortAscending:WordBool):IWMPPlaylist;dispid 1402; // getStringCollectionByQuery : Creates a string collection from a query function getStringCollectionByQuery(bstrAttribute:WideString;pQuery:IWMPQuery;bstrMediaType:WideString;bstrSortAttribute:WideString;fSortAscending:WordBool):IWMPStringCollection;dispid 1403; // getByAttributeAndMediaType : Returns a collection of items with the given attribute and media type function getByAttributeAndMediaType(bstrAttribute:WideString;bstrValue:WideString;bstrMediaType:WideString):IWMPPlaylist;dispid 1404; end; // IWMPQuery : IWMPQuery: Public interface for Windows Media Player SDK. IWMPQuery = interface(IDispatch) ['{A00918F3-A6B0-4BFB-9189-FD834C7BC5A5}'] // addCondition : Adds a single AND query parameter to existing group procedure addCondition(bstrAttribute:WideString;bstrOperator:WideString;bstrValue:WideString);safecall; // beginNextGroup : Starts a new OR query group procedure beginNextGroup;safecall; end; // IWMPQuery : IWMPQuery: Public interface for Windows Media Player SDK. IWMPQueryDisp = dispinterface ['{A00918F3-A6B0-4BFB-9189-FD834C7BC5A5}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // addCondition : Adds a single AND query parameter to existing group procedure addCondition(bstrAttribute:WideString;bstrOperator:WideString;bstrValue:WideString);dispid 1351; // beginNextGroup : Starts a new OR query group procedure beginNextGroup;dispid 1352; end; // IWMPStringCollection2 : IWMPStringCollection2: Public interface for Windows Media Player SDK. IWMPStringCollection2 = interface(IWMPStringCollection) ['{46AD648D-53F1-4A74-92E2-2A1B68D63FD4}'] // isIdentical : Determines if the supplied object is the same as this one function isIdentical(pIWMPStringCollection2:IWMPStringCollection2):WordBool;safecall; // getItemInfo : Gets an attribute from a string collection backing object function getItemInfo(lCollectionIndex:Integer;bstrItemName:WideString):WideString;safecall; // getAttributeCountByType : Gets count of values for a particular attribute function getAttributeCountByType(lCollectionIndex:Integer;bstrType:WideString;bstrLanguage:WideString):Integer;safecall; // getItemInfoByType : Gets one value of an attribute from a string collection backing object function getItemInfoByType(lCollectionIndex:Integer;bstrType:WideString;bstrLanguage:WideString;lAttributeIndex:Integer):OleVariant;safecall; end; // IWMPStringCollection2 : IWMPStringCollection2: Public interface for Windows Media Player SDK. IWMPStringCollection2Disp = dispinterface ['{46AD648D-53F1-4A74-92E2-2A1B68D63FD4}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Item : Returns the string at the given index function Item(lIndex:Integer):WideString;dispid 402; // isIdentical : Determines if the supplied object is the same as this one function isIdentical(pIWMPStringCollection2:IWMPStringCollection2):WordBool;dispid 1451; // getItemInfo : Gets an attribute from a string collection backing object function getItemInfo(lCollectionIndex:Integer;bstrItemName:WideString):WideString;dispid 1452; // getAttributeCountByType : Gets count of values for a particular attribute function getAttributeCountByType(lCollectionIndex:Integer;bstrType:WideString;bstrLanguage:WideString):Integer;dispid 1453; // getItemInfoByType : Gets one value of an attribute from a string collection backing object function getItemInfoByType(lCollectionIndex:Integer;bstrType:WideString;bstrLanguage:WideString;lAttributeIndex:Integer):OleVariant;dispid 1454; // count : Returns the number of items in the string collection property count:Integer readonly dispid 401; end; // IWMPPlayerServices : IWMPPlayerServices: Public interface for Windows Media Player SDK. IWMPPlayerServices = interface(IUnknown) ['{1D01FBDB-ADE2-4C8D-9842-C190B95C3306}'] // activateUIPlugin : function activateUIPlugin(bstrPlugin:WideString):HRESULT;stdcall; // setTaskPane : function setTaskPane(bstrTaskPane:WideString):HRESULT;stdcall; // setTaskPaneURL : function setTaskPaneURL(bstrTaskPane:WideString;bstrURL:WideString;bstrFriendlyName:WideString):HRESULT;stdcall; end; // IWMPPlayerServices2 : IWMPPlayerServices2: Public interface for Windows Media Player SDK. IWMPPlayerServices2 = interface(IWMPPlayerServices) ['{1BB1592F-F040-418A-9F71-17C7512B4D70}'] // setBackgroundProcessingPriority : function setBackgroundProcessingPriority(bstrPriority:WideString):HRESULT;stdcall; end; // IWMPRemoteMediaServices : IWMPRemoteMediaServices: Public interface for Windows Media Player SDK. IWMPRemoteMediaServices = interface(IUnknown) ['{CBB92747-741F-44FE-AB5B-F1A48F3B2A59}'] // GetServiceType : function GetServiceType(out pbstrType:WideString):HRESULT;stdcall; // GetApplicationName : function GetApplicationName(out pbstrName:WideString):HRESULT;stdcall; // GetScriptableObject : function GetScriptableObject(out pbstrName:WideString;out ppDispatch:IDispatch):HRESULT;stdcall; // GetCustomUIMode : function GetCustomUIMode(out pbstrFile:WideString):HRESULT;stdcall; end; // IWMPSyncServices : IWMPSyncServices: Public interface for Windows Media Player SDK. IWMPSyncServices = interface(IUnknown) ['{8B5050FF-E0A4-4808-B3A8-893A9E1ED894}'] function Get_deviceCount : Integer; stdcall; // getDevice : function getDevice(lIndex:Integer):HRESULT;stdcall; // deviceCount : property deviceCount:Integer read Get_deviceCount; end; // IWMPLibraryServices : IWMPLibraryServices: Public interface for Windows Media Player SDK. IWMPLibraryServices = interface(IUnknown) ['{39C2F8D5-1CF2-4D5E-AE09-D73492CF9EAA}'] // getCountByType : function getCountByType(wmplt:WMPLibraryType):HRESULT;stdcall; // getLibraryByType : function getLibraryByType(wmplt:WMPLibraryType;lIndex:Integer):HRESULT;stdcall; end; // IWMPLibrarySharingServices : IWMPLibrarySharingServices: Public interface for Windows Media Player SDK. IWMPLibrarySharingServices = interface(IUnknown) ['{82CBA86B-9F04-474B-A365-D6DD1466E541}'] // isLibraryShared : function isLibraryShared:HRESULT;stdcall; // isLibrarySharingEnabled : function isLibrarySharingEnabled:HRESULT;stdcall; // showLibrarySharing : function showLibrarySharing:HRESULT;stdcall; end; // IWMPLibrary2 : IWMPLibrary2: Public interface for Windows Media Player SDK. IWMPLibrary2 = interface(IWMPLibrary) ['{DD578A4E-79B1-426C-BF8F-3ADD9072500B}'] // getItemInfo : function getItemInfo(bstrItemName:WideString):HRESULT;stdcall; end; // IWMPFolderMonitorServices : IWMPFolderMonitorServices: Public interface for Windows Media Player SDK. IWMPFolderMonitorServices = interface(IUnknown) ['{788C8743-E57F-439D-A468-5BC77F2E59C6}'] function Get_count : Integer; stdcall; // Item : function Item(lIndex:Integer):HRESULT;stdcall; // add : function add(bstrFolder:WideString):HRESULT;stdcall; // remove : function remove(lIndex:Integer):HRESULT;stdcall; function Get_scanState : WMPFolderScanState; stdcall; function Get_currentFolder : WideString; stdcall; function Get_scannedFilesCount : Integer; stdcall; function Get_addedFilesCount : Integer; stdcall; function Get_updateProgress : Integer; stdcall; // startScan : function startScan:HRESULT;stdcall; // stopScan : function stopScan:HRESULT;stdcall; // count : property count:Integer read Get_count; // scanState : property scanState:WMPFolderScanState read Get_scanState; // currentFolder : property currentFolder:WideString read Get_currentFolder; // scannedFilesCount : property scannedFilesCount:Integer read Get_scannedFilesCount; // addedFilesCount : property addedFilesCount:Integer read Get_addedFilesCount; // updateProgress : property updateProgress:Integer read Get_updateProgress; end; // IWMPSyncDevice2 : IWMPSyncDevice2: Public interface for Windows Media Player SDK. IWMPSyncDevice2 = interface(IWMPSyncDevice) ['{88AFB4B2-140A-44D2-91E6-4543DA467CD1}'] // setItemInfo : function setItemInfo(bstrItemName:WideString;bstrVal:WideString):HRESULT;stdcall; end; // IWMPSyncDevice3 : IWMPSyncDevice3: Public interface for Windows Media Player SDK. IWMPSyncDevice3 = interface(IWMPSyncDevice2) ['{B22C85F9-263C-4372-A0DA-B518DB9B4098}'] // estimateSyncSize : function estimateSyncSize(pNonRulePlaylist:IWMPPlaylist;pRulesPlaylist:IWMPPlaylist):HRESULT;stdcall; // cancelEstimation : function cancelEstimation:HRESULT;stdcall; end; // IWMPPlaylistCtrl : IWMPPlaylistCtrl: Public interface for skin object model. IWMPPlaylistCtrl = interface(IDispatch) ['{5F9CFD92-8CAD-11D3-9A7E-00C04F8EFB70}'] function Get_Playlist : IWMPPlaylist; safecall; procedure Set_Playlist(const ppdispPlaylist:IWMPPlaylist); safecall; function Get_columns : WideString; safecall; procedure Set_columns(const pbstrColumns:WideString); safecall; function Get_columnCount : Integer; safecall; function Get_columnOrder : WideString; safecall; procedure Set_columnOrder(const pbstrColumnOrder:WideString); safecall; function Get_columnsVisible : WordBool; safecall; procedure Set_columnsVisible(const pVal:WordBool); safecall; function Get_dropDownVisible : WordBool; safecall; procedure Set_dropDownVisible(const pVal:WordBool); safecall; function Get_playlistItemsVisible : WordBool; safecall; procedure Set_playlistItemsVisible(const pVal:WordBool); safecall; function Get_checkboxesVisible : WordBool; safecall; procedure Set_checkboxesVisible(const pVal:WordBool); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pbstrColor:WideString); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pbstrColor:WideString); safecall; function Get_disabledItemColor : WideString; safecall; procedure Set_disabledItemColor(const pbstrColor:WideString); safecall; function Get_itemPlayingColor : WideString; safecall; procedure Set_itemPlayingColor(const pbstrColor:WideString); safecall; function Get_itemPlayingBackgroundColor : WideString; safecall; procedure Set_itemPlayingBackgroundColor(const pbstrBackgroundColor:WideString); safecall; function Get_backgroundImage : WideString; safecall; procedure Set_backgroundImage(const pbstrImage:WideString); safecall; function Get_allowItemEditing : WordBool; safecall; procedure Set_allowItemEditing(const pVal:WordBool); safecall; function Get_allowColumnSorting : WordBool; safecall; procedure Set_allowColumnSorting(const pVal:WordBool); safecall; function Get_dropDownList : WideString; safecall; procedure Set_dropDownList(const pbstrList:WideString); safecall; function Get_dropDownToolTip : WideString; safecall; procedure Set_dropDownToolTip(const pbstrToolTip:WideString); safecall; function Get_copying : WordBool; safecall; procedure Set_copying(const pVal:WordBool); safecall; // copy : method copy procedure copy;safecall; // abortCopy : method abortCopy procedure abortCopy;safecall; // deleteSelected : method deleteSelected procedure deleteSelected;safecall; // deleteSelectedFromLibrary : method deleteSelectedFromLibrary procedure deleteSelectedFromLibrary;safecall; // moveSelectedUp : method moveSelectedUp procedure moveSelectedUp;safecall; // moveSelectedDown : method moveSelectedDown procedure moveSelectedDown;safecall; // addSelectedToPlaylist : method addSelectedToPlaylist procedure addSelectedToPlaylist(pdispPlaylist:IWMPPlaylist);safecall; // getNextSelectedItem : method getNextSelectedItem function getNextSelectedItem(nStartIndex:Integer):Integer;safecall; // getNextCheckedItem : method getNextCheckedItem function getNextCheckedItem(nStartIndex:Integer):Integer;safecall; // setSelectedState : method setSelectedState procedure setSelectedState(nIndex:Integer;vbSelected:WordBool);safecall; // setCheckedState : method setCheckedState procedure setCheckedState(nIndex:Integer;vbChecked:WordBool);safecall; // sortColumn : method sortColumn procedure sortColumn(nIndex:Integer);safecall; // setColumnResizeMode : method setColumnResizeMode procedure setColumnResizeMode(nIndex:Integer;newMode:WideString);safecall; // setColumnWidth : method setColumnWidth procedure setColumnWidth(nIndex:Integer;nWidth:Integer);safecall; function Get_itemErrorColor : WideString; safecall; procedure Set_itemErrorColor(const pbstrColor:WideString); safecall; function Get_itemCount : Integer; safecall; function Get_itemMedia(nIndex:Integer) : IWMPMedia; safecall; function Get_itemPlaylist(nIndex:Integer) : IWMPPlaylist; safecall; // getNextSelectedItem2 : method getNextSelectedItem2 function getNextSelectedItem2(nStartIndex:Integer):Integer;safecall; // getNextCheckedItem2 : method getNextCheckedItem2 function getNextCheckedItem2(nStartIndex:Integer):Integer;safecall; // setSelectedState2 : method setSelectedState2 procedure setSelectedState2(nIndex:Integer;vbSelected:WordBool);safecall; // setCheckedState2 : method setCheckedState2 procedure setCheckedState2(nIndex:Integer;vbChecked:WordBool);safecall; function Get_leftStatus : WideString; safecall; procedure Set_leftStatus(const pbstrStatus:WideString); safecall; function Get_rightStatus : WideString; safecall; procedure Set_rightStatus(const pbstrStatus:WideString); safecall; function Get_editButtonVisible : WordBool; safecall; procedure Set_editButtonVisible(const pVal:WordBool); safecall; function Get_dropDownImage : WideString; safecall; procedure Set_dropDownImage(const pbstrImage:WideString); safecall; function Get_dropDownBackgroundImage : WideString; safecall; procedure Set_dropDownBackgroundImage(const pbstrImage:WideString); safecall; function Get_hueShift : Single; safecall; procedure Set_hueShift(const pVal:Single); safecall; function Get_saturation : Single; safecall; procedure Set_saturation(const pVal:Single); safecall; function Get_statusColor : WideString; safecall; procedure Set_statusColor(const pbstrColor:WideString); safecall; function Get_toolbarVisible : WordBool; safecall; procedure Set_toolbarVisible(const pVal:WordBool); safecall; function Get_itemSelectedColor : WideString; safecall; procedure Set_itemSelectedColor(const pbstrColor:WideString); safecall; function Get_itemSelectedFocusLostColor : WideString; safecall; procedure Set_itemSelectedFocusLostColor(const pbstrFocusLostColor:WideString); safecall; function Get_itemSelectedBackgroundColor : WideString; safecall; procedure Set_itemSelectedBackgroundColor(const pbstrColor:WideString); safecall; function Get_itemSelectedBackgroundFocusLostColor : WideString; safecall; procedure Set_itemSelectedBackgroundFocusLostColor(const pbstrFocusLostColor:WideString); safecall; function Get_backgroundSplitColor : WideString; safecall; procedure Set_backgroundSplitColor(const pbstrColor:WideString); safecall; function Get_statusTextColor : WideString; safecall; procedure Set_statusTextColor(const pbstrColor:WideString); safecall; // Playlist : property playlist property Playlist:IWMPPlaylist read Get_Playlist write Set_Playlist; // columns : property columns property columns:WideString read Get_columns write Set_columns; // columnCount : property columnCount property columnCount:Integer read Get_columnCount; // columnOrder : property columnOrder property columnOrder:WideString read Get_columnOrder write Set_columnOrder; // columnsVisible : property columnsVisible property columnsVisible:WordBool read Get_columnsVisible write Set_columnsVisible; // dropDownVisible : property dropDownVisible property dropDownVisible:WordBool read Get_dropDownVisible write Set_dropDownVisible; // playlistItemsVisible : property playlistItemsVisible property playlistItemsVisible:WordBool read Get_playlistItemsVisible write Set_playlistItemsVisible; // checkboxesVisible : property checkboxesVisible property checkboxesVisible:WordBool read Get_checkboxesVisible write Set_checkboxesVisible; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // foregroundColor : property foregroundColor property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // disabledItemColor : property disabledItemColor property disabledItemColor:WideString read Get_disabledItemColor write Set_disabledItemColor; // itemPlayingColor : property itemPlayingColor property itemPlayingColor:WideString read Get_itemPlayingColor write Set_itemPlayingColor; // itemPlayingBackgroundColor : property itemPlayingBackgroundColor property itemPlayingBackgroundColor:WideString read Get_itemPlayingBackgroundColor write Set_itemPlayingBackgroundColor; // backgroundImage : property backgroundImage property backgroundImage:WideString read Get_backgroundImage write Set_backgroundImage; // allowItemEditing : property allowItemEditing property allowItemEditing:WordBool read Get_allowItemEditing write Set_allowItemEditing; // allowColumnSorting : property allowColumnSorting property allowColumnSorting:WordBool read Get_allowColumnSorting write Set_allowColumnSorting; // dropDownList : property dropDownList property dropDownList:WideString read Get_dropDownList write Set_dropDownList; // dropDownToolTip : property dropDownToolTip property dropDownToolTip:WideString read Get_dropDownToolTip write Set_dropDownToolTip; // copying : property copying property copying:WordBool read Get_copying write Set_copying; // itemErrorColor : property itemErrorColor property itemErrorColor:WideString read Get_itemErrorColor write Set_itemErrorColor; // itemCount : property itemCount property itemCount:Integer read Get_itemCount; // itemMedia : property itemMedia property itemMedia[nIndex:Integer]:IWMPMedia read Get_itemMedia; // itemPlaylist : property itemPlaylist property itemPlaylist[nIndex:Integer]:IWMPPlaylist read Get_itemPlaylist; // leftStatus : property leftStatus property leftStatus:WideString read Get_leftStatus write Set_leftStatus; // rightStatus : property rightStatus property rightStatus:WideString read Get_rightStatus write Set_rightStatus; // editButtonVisible : property editButtonVisible property editButtonVisible:WordBool read Get_editButtonVisible write Set_editButtonVisible; // dropDownImage : property dropDownImage property dropDownImage:WideString read Get_dropDownImage write Set_dropDownImage; // dropDownBackgroundImage : property dropDownBackgroundImage property dropDownBackgroundImage:WideString read Get_dropDownBackgroundImage write Set_dropDownBackgroundImage; // hueShift : property hueShift property hueShift:Single read Get_hueShift write Set_hueShift; // saturation : property saturation property saturation:Single read Get_saturation write Set_saturation; // statusColor : property statusColor property statusColor:WideString read Get_statusColor write Set_statusColor; // toolbarVisible : property toolbarVisible property toolbarVisible:WordBool read Get_toolbarVisible write Set_toolbarVisible; // itemSelectedColor : property itemSelectedColor property itemSelectedColor:WideString read Get_itemSelectedColor write Set_itemSelectedColor; // itemSelectedFocusLostColor : property itemSelectedFocusLostColor property itemSelectedFocusLostColor:WideString read Get_itemSelectedFocusLostColor write Set_itemSelectedFocusLostColor; // itemSelectedBackgroundColor : property itemSelectedBackgroundColor property itemSelectedBackgroundColor:WideString read Get_itemSelectedBackgroundColor write Set_itemSelectedBackgroundColor; // itemSelectedBackgroundFocusLostColor : property itemSelectedBackgroundFocusLostColor property itemSelectedBackgroundFocusLostColor:WideString read Get_itemSelectedBackgroundFocusLostColor write Set_itemSelectedBackgroundFocusLostColor; // backgroundSplitColor : property backgroundSplitColor property backgroundSplitColor:WideString read Get_backgroundSplitColor write Set_backgroundSplitColor; // statusTextColor : property statusTextColor property statusTextColor:WideString read Get_statusTextColor write Set_statusTextColor; end; // IWMPPlaylistCtrl : IWMPPlaylistCtrl: Public interface for skin object model. IWMPPlaylistCtrlDisp = dispinterface ['{5F9CFD92-8CAD-11D3-9A7E-00C04F8EFB70}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // copy : method copy procedure copy;dispid 5623; // abortCopy : method abortCopy procedure abortCopy;dispid 5624; // deleteSelected : method deleteSelected procedure deleteSelected;dispid 5625; // deleteSelectedFromLibrary : method deleteSelectedFromLibrary procedure deleteSelectedFromLibrary;dispid 5626; // moveSelectedUp : method moveSelectedUp procedure moveSelectedUp;dispid 5628; // moveSelectedDown : method moveSelectedDown procedure moveSelectedDown;dispid 5629; // addSelectedToPlaylist : method addSelectedToPlaylist procedure addSelectedToPlaylist(pdispPlaylist:IWMPPlaylist);dispid 5630; // getNextSelectedItem : method getNextSelectedItem function getNextSelectedItem(nStartIndex:Integer):Integer;dispid 5631; // getNextCheckedItem : method getNextCheckedItem function getNextCheckedItem(nStartIndex:Integer):Integer;dispid 5632; // setSelectedState : method setSelectedState procedure setSelectedState(nIndex:Integer;vbSelected:WordBool);dispid 5633; // setCheckedState : method setCheckedState procedure setCheckedState(nIndex:Integer;vbChecked:WordBool);dispid 5634; // sortColumn : method sortColumn procedure sortColumn(nIndex:Integer);dispid 5635; // setColumnResizeMode : method setColumnResizeMode procedure setColumnResizeMode(nIndex:Integer;newMode:WideString);dispid 5636; // setColumnWidth : method setColumnWidth procedure setColumnWidth(nIndex:Integer;nWidth:Integer);dispid 5637; // getNextSelectedItem2 : method getNextSelectedItem2 function getNextSelectedItem2(nStartIndex:Integer):Integer;dispid 5646; // getNextCheckedItem2 : method getNextCheckedItem2 function getNextCheckedItem2(nStartIndex:Integer):Integer;dispid 5647; // setSelectedState2 : method setSelectedState2 procedure setSelectedState2(nIndex:Integer;vbSelected:WordBool);dispid 5648; // setCheckedState2 : method setCheckedState2 procedure setCheckedState2(nIndex:Integer;vbChecked:WordBool);dispid 5649; // Playlist : property playlist property Playlist:IWMPPlaylist dispid 5601; // columns : property columns property columns:WideString dispid 5602; // columnCount : property columnCount property columnCount:Integer readonly dispid 5603; // columnOrder : property columnOrder property columnOrder:WideString dispid 5604; // columnsVisible : property columnsVisible property columnsVisible:WordBool dispid 5605; // dropDownVisible : property dropDownVisible property dropDownVisible:WordBool dispid 5607; // playlistItemsVisible : property playlistItemsVisible property playlistItemsVisible:WordBool dispid 5608; // checkboxesVisible : property checkboxesVisible property checkboxesVisible:WordBool dispid 5609; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 5612; // foregroundColor : property foregroundColor property foregroundColor:WideString dispid 5613; // disabledItemColor : property disabledItemColor property disabledItemColor:WideString dispid 5614; // itemPlayingColor : property itemPlayingColor property itemPlayingColor:WideString dispid 5615; // itemPlayingBackgroundColor : property itemPlayingBackgroundColor property itemPlayingBackgroundColor:WideString dispid 5616; // backgroundImage : property backgroundImage property backgroundImage:WideString dispid 5617; // allowItemEditing : property allowItemEditing property allowItemEditing:WordBool dispid 5618; // allowColumnSorting : property allowColumnSorting property allowColumnSorting:WordBool dispid 5619; // dropDownList : property dropDownList property dropDownList:WideString dispid 5620; // dropDownToolTip : property dropDownToolTip property dropDownToolTip:WideString dispid 5621; // copying : property copying property copying:WordBool dispid 5622; // itemErrorColor : property itemErrorColor property itemErrorColor:WideString dispid 5642; // itemCount : property itemCount property itemCount:Integer readonly dispid 5643; // itemMedia : property itemMedia property itemMedia[nIndex:Integer]:IWMPMedia readonly dispid 5644; // itemPlaylist : property itemPlaylist property itemPlaylist[nIndex:Integer]:IWMPPlaylist readonly dispid 5645; // leftStatus : property leftStatus property leftStatus:WideString dispid 5650; // rightStatus : property rightStatus property rightStatus:WideString dispid 5651; // editButtonVisible : property editButtonVisible property editButtonVisible:WordBool dispid 5652; // dropDownImage : property dropDownImage property dropDownImage:WideString dispid 5653; // dropDownBackgroundImage : property dropDownBackgroundImage property dropDownBackgroundImage:WideString dispid 5654; // hueShift : property hueShift property hueShift:Single dispid 5655; // saturation : property saturation property saturation:Single dispid 5656; // statusColor : property statusColor property statusColor:WideString dispid 5658; // toolbarVisible : property toolbarVisible property toolbarVisible:WordBool dispid 5660; // itemSelectedColor : property itemSelectedColor property itemSelectedColor:WideString dispid 5662; // itemSelectedFocusLostColor : property itemSelectedFocusLostColor property itemSelectedFocusLostColor:WideString dispid 5663; // itemSelectedBackgroundColor : property itemSelectedBackgroundColor property itemSelectedBackgroundColor:WideString dispid 5664; // itemSelectedBackgroundFocusLostColor : property itemSelectedBackgroundFocusLostColor property itemSelectedBackgroundFocusLostColor:WideString dispid 5665; // backgroundSplitColor : property backgroundSplitColor property backgroundSplitColor:WideString dispid 5666; // statusTextColor : property statusTextColor property statusTextColor:WideString dispid 5667; end; // IAppDispatch : IAppDispatch: Not Public. Internal interface used by Windows Media Player. IAppDispatch = interface(IDispatch) ['{E41C88DD-2364-4FF7-A0F5-CA9859AF783F}'] function Get_titlebarVisible : WordBool; safecall; procedure Set_titlebarVisible(const pVal:WordBool); safecall; function Get_titlebarAutoHide : WordBool; safecall; procedure Set_titlebarAutoHide(const pVal:WordBool); safecall; function Get_currentTask : WideString; safecall; procedure Set_currentTask(const pVal:WideString); safecall; function Get_libraryBasketMode : Integer; safecall; procedure Set_libraryBasketMode(const pVal:Integer); safecall; function Get_libraryBasketWidth : Integer; safecall; function Get_breadcrumbItemCount : Integer; safecall; function Get_breadcrumbItemName(lIndex:Integer) : WideString; safecall; function Get_breadcrumbItemHasMenu(lIndex:Integer) : WordBool; safecall; // breadcrumbItemClick : procedure breadcrumbItemClick(lIndex:Integer);safecall; function Get_settingsVisible : WordBool; safecall; procedure Set_settingsVisible(const pVal:WordBool); safecall; function Get_playlistVisible : WordBool; safecall; procedure Set_playlistVisible(const pVal:WordBool); safecall; // gotoSkinMode : procedure gotoSkinMode;safecall; // gotoPlayerMode : procedure gotoPlayerMode;safecall; // gotoLibraryMode : procedure gotoLibraryMode(lButton:Integer);safecall; // navigatePrevious : procedure navigatePrevious;safecall; // navigateNext : procedure navigateNext;safecall; // goFullScreen : procedure goFullScreen;safecall; function Get_fullScreenEnabled : WordBool; safecall; function Get_serviceLoginVisible : WordBool; safecall; function Get_serviceLoginSignedIn : WordBool; safecall; // serviceLogin : procedure serviceLogin;safecall; // serviceLogout : procedure serviceLogout;safecall; function Get_serviceGetInfo(bstrItem:WideString) : OleVariant; safecall; function Get_navigatePreviousEnabled : WordBool; safecall; function Get_navigateNextEnabled : WordBool; safecall; // navigateToAddress : procedure navigateToAddress(address:WideString);safecall; function Get_glassEnabled : WordBool; safecall; function Get_inVistaPlus : WordBool; safecall; // adjustLeft : procedure adjustLeft(nDistance:Integer);safecall; function Get_taskbarVisible : WordBool; safecall; procedure Set_taskbarVisible(const pVal:WordBool); safecall; function Get_DPI : Integer; safecall; function Get_previousEnabled : WordBool; safecall; function Get_playLibraryItemEnabled : WordBool; safecall; // previous : procedure previous;safecall; function Get_titlebarCurrentlyVisible : WordBool; safecall; function Get_menubarCurrentlyVisible : WordBool; safecall; function Get_bgPluginRunning : WordBool; safecall; // configurePlugins : procedure configurePlugins(nType:Integer);safecall; // getTimeString : method getTimeString function getTimeString(dTime:Double):WideString;safecall; function Get_maximized : WordBool; safecall; function Get_top : Integer; safecall; procedure Set_top(const pVal:Integer); safecall; function Get_left : Integer; safecall; procedure Set_left(const pVal:Integer); safecall; function Get_width : Integer; safecall; procedure Set_width(const pVal:Integer); safecall; function Get_height : Integer; safecall; procedure Set_height(const pVal:Integer); safecall; // setWindowPos : procedure setWindowPos(lTop:Integer;lLeft:Integer;lWidth:Integer;lHeight:Integer);safecall; // logData : procedure logData(ID:WideString;data:WideString);safecall; function Get_powerPersonality : WideString; safecall; // navigateNamespace : procedure navigateNamespace(address:WideString);safecall; function Get_exclusiveService : WideString; safecall; procedure Set_windowText(const Param1:WideString); safecall; function Get_resourceIdForDpi(iResourceId:SYSINT) : SYSINT; safecall; // titlebarVisible : property titlebarVisible:WordBool read Get_titlebarVisible write Set_titlebarVisible; // titlebarAutoHide : property titlebarAutoHide:WordBool read Get_titlebarAutoHide write Set_titlebarAutoHide; // currentTask : property currentTask:WideString read Get_currentTask write Set_currentTask; // libraryBasketMode : property libraryBasketMode:Integer read Get_libraryBasketMode write Set_libraryBasketMode; // libraryBasketWidth : property libraryBasketWidth:Integer read Get_libraryBasketWidth; // breadcrumbItemCount : property breadcrumbItemCount:Integer read Get_breadcrumbItemCount; // breadcrumbItemName : property breadcrumbItemName[lIndex:Integer]:WideString read Get_breadcrumbItemName; // breadcrumbItemHasMenu : property breadcrumbItemHasMenu[lIndex:Integer]:WordBool read Get_breadcrumbItemHasMenu; // settingsVisible : property settingsVisible:WordBool read Get_settingsVisible write Set_settingsVisible; // playlistVisible : property playlistVisible:WordBool read Get_playlistVisible write Set_playlistVisible; // fullScreenEnabled : property fullScreenEnabled:WordBool read Get_fullScreenEnabled; // serviceLoginVisible : property serviceLoginVisible:WordBool read Get_serviceLoginVisible; // serviceLoginSignedIn : property serviceLoginSignedIn:WordBool read Get_serviceLoginSignedIn; // serviceGetInfo : property serviceGetInfo[bstrItem:WideString]:OleVariant read Get_serviceGetInfo; // navigatePreviousEnabled : property navigatePreviousEnabled:WordBool read Get_navigatePreviousEnabled; // navigateNextEnabled : property navigateNextEnabled:WordBool read Get_navigateNextEnabled; // glassEnabled : property glassEnabled:WordBool read Get_glassEnabled; // inVistaPlus : property inVistaPlus:WordBool read Get_inVistaPlus; // taskbarVisible : property taskbarVisible:WordBool read Get_taskbarVisible write Set_taskbarVisible; // DPI : property DPI:Integer read Get_DPI; // previousEnabled : property previousEnabled:WordBool read Get_previousEnabled; // playLibraryItemEnabled : property playLibraryItemEnabled:WordBool read Get_playLibraryItemEnabled; // titlebarCurrentlyVisible : property titlebarCurrentlyVisible:WordBool read Get_titlebarCurrentlyVisible; // menubarCurrentlyVisible : property menubarCurrentlyVisible:WordBool read Get_menubarCurrentlyVisible; // bgPluginRunning : property bgPluginRunning:WordBool read Get_bgPluginRunning; // maximized : property maximized:WordBool read Get_maximized; // top : property top:Integer read Get_top write Set_top; // left : property left:Integer read Get_left write Set_left; // width : property width:Integer read Get_width write Set_width; // height : property height:Integer read Get_height write Set_height; // powerPersonality : property powerPersonality:WideString read Get_powerPersonality; // exclusiveService : property exclusiveService:WideString read Get_exclusiveService; // windowText : property windowText:WideString write Set_windowText; // resourceIdForDpi : property resourceIdForDpi[iResourceId:SYSINT]:SYSINT read Get_resourceIdForDpi; end; // IAppDispatch : IAppDispatch: Not Public. Internal interface used by Windows Media Player. IAppDispatchDisp = dispinterface ['{E41C88DD-2364-4FF7-A0F5-CA9859AF783F}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // breadcrumbItemClick : procedure breadcrumbItemClick(lIndex:Integer);dispid 150; // gotoSkinMode : procedure gotoSkinMode;dispid 105; // gotoPlayerMode : procedure gotoPlayerMode;dispid 143; // gotoLibraryMode : procedure gotoLibraryMode(lButton:Integer);dispid 144; // navigatePrevious : procedure navigatePrevious;dispid 125; // navigateNext : procedure navigateNext;dispid 126; // goFullScreen : procedure goFullScreen;dispid 142; // serviceLogin : procedure serviceLogin;dispid 134; // serviceLogout : procedure serviceLogout;dispid 135; // navigateToAddress : procedure navigateToAddress(address:WideString);dispid 130; // adjustLeft : procedure adjustLeft(nDistance:Integer);dispid 106; // previous : procedure previous;dispid 115; // configurePlugins : procedure configurePlugins(nType:Integer);dispid 110; // getTimeString : method getTimeString function getTimeString(dTime:Double):WideString;dispid 111; // setWindowPos : procedure setWindowPos(lTop:Integer;lLeft:Integer;lWidth:Integer;lHeight:Integer);dispid 121; // logData : procedure logData(ID:WideString;data:WideString);dispid 122; // navigateNamespace : procedure navigateNamespace(address:WideString);dispid 128; // titlebarVisible : property titlebarVisible:WordBool dispid 100; // titlebarAutoHide : property titlebarAutoHide:WordBool dispid 101; // currentTask : property currentTask:WideString dispid 102; // libraryBasketMode : property libraryBasketMode:Integer dispid 145; // libraryBasketWidth : property libraryBasketWidth:Integer readonly dispid 146; // breadcrumbItemCount : property breadcrumbItemCount:Integer readonly dispid 147; // breadcrumbItemName : property breadcrumbItemName[lIndex:Integer]:WideString readonly dispid 148; // breadcrumbItemHasMenu : property breadcrumbItemHasMenu[lIndex:Integer]:WordBool readonly dispid 149; // settingsVisible : property settingsVisible:WordBool dispid 103; // playlistVisible : property playlistVisible:WordBool dispid 104; // fullScreenEnabled : property fullScreenEnabled:WordBool readonly dispid 141; // serviceLoginVisible : property serviceLoginVisible:WordBool readonly dispid 132; // serviceLoginSignedIn : property serviceLoginSignedIn:WordBool readonly dispid 133; // serviceGetInfo : property serviceGetInfo[bstrItem:WideString]:OleVariant readonly dispid 140; // navigatePreviousEnabled : property navigatePreviousEnabled:WordBool readonly dispid 123; // navigateNextEnabled : property navigateNextEnabled:WordBool readonly dispid 124; // glassEnabled : property glassEnabled:WordBool readonly dispid 131; // inVistaPlus : property inVistaPlus:WordBool readonly dispid 136; // taskbarVisible : property taskbarVisible:WordBool dispid 107; // DPI : property DPI:Integer readonly dispid 116; // previousEnabled : property previousEnabled:WordBool readonly dispid 114; // playLibraryItemEnabled : property playLibraryItemEnabled:WordBool readonly dispid 139; // titlebarCurrentlyVisible : property titlebarCurrentlyVisible:WordBool readonly dispid 108; // menubarCurrentlyVisible : property menubarCurrentlyVisible:WordBool readonly dispid 137; // bgPluginRunning : property bgPluginRunning:WordBool readonly dispid 109; // maximized : property maximized:WordBool readonly dispid 113; // top : property top:Integer dispid 117; // left : property left:Integer dispid 118; // width : property width:Integer dispid 119; // height : property height:Integer dispid 120; // powerPersonality : property powerPersonality:WideString readonly dispid 127; // exclusiveService : property exclusiveService:WideString readonly dispid 129; // windowText : property windowText:WideString writeonly dispid 138; // resourceIdForDpi : property resourceIdForDpi[iResourceId:SYSINT]:SYSINT readonly dispid 151; end; // IWMPSafeBrowser : IWMPSafeBrowser: Not Public. Internal interface used by Windows Media Player. IWMPSafeBrowser = interface(IDispatch) ['{EF870383-83AB-4EA9-BE48-56FA4251AF10}'] function Get_URL : WideString; safecall; procedure Set_URL(const pVal:WideString); safecall; function Get_status : Integer; safecall; function Get_pendingDownloads : Integer; safecall; // showSAMIText : method showSAMIText procedure showSAMIText(samiText:WideString);safecall; // showLyrics : method showLyrics procedure showLyrics(lyrics:WideString);safecall; // loadSpecialPage : loads one of our special pages by name procedure loadSpecialPage(pageName:WideString);safecall; // goBack : go back to the previous page procedure goBack;safecall; // goForward : go forward through the current MRU procedure goForward;safecall; // stop : stop loading page procedure stop;safecall; // refresh : refresh the page procedure refresh;safecall; function Get_baseURL : WideString; safecall; function Get_fullURL : WideString; safecall; function Get_secureLock : Integer; safecall; function Get_busy : WordBool; safecall; // showCert : show security certificate dialog procedure showCert;safecall; // URL : property URL:WideString read Get_URL write Set_URL; // status : property status:Integer read Get_status; // pendingDownloads : property pendingDownloads:Integer read Get_pendingDownloads; // baseURL : property baseURL:WideString read Get_baseURL; // fullURL : property fullURL:WideString read Get_fullURL; // secureLock : property secureLock:Integer read Get_secureLock; // busy : property busy:WordBool read Get_busy; end; // IWMPSafeBrowser : IWMPSafeBrowser: Not Public. Internal interface used by Windows Media Player. IWMPSafeBrowserDisp = dispinterface ['{EF870383-83AB-4EA9-BE48-56FA4251AF10}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // showSAMIText : method showSAMIText procedure showSAMIText(samiText:WideString);dispid 8403; // showLyrics : method showLyrics procedure showLyrics(lyrics:WideString);dispid 8404; // loadSpecialPage : loads one of our special pages by name procedure loadSpecialPage(pageName:WideString);dispid 8405; // goBack : go back to the previous page procedure goBack;dispid 8406; // goForward : go forward through the current MRU procedure goForward;dispid 8407; // stop : stop loading page procedure stop;dispid 8408; // refresh : refresh the page procedure refresh;dispid 8409; // showCert : show security certificate dialog procedure showCert;dispid 8413; // URL : property URL:WideString dispid 8400; // status : property status:Integer readonly dispid 8401; // pendingDownloads : property pendingDownloads:Integer readonly dispid 8402; // baseURL : property baseURL:WideString readonly dispid 8410; // fullURL : property fullURL:WideString readonly dispid 8414; // secureLock : property secureLock:Integer readonly dispid 8411; // busy : property busy:WordBool readonly dispid 8412; end; // IWMPObjectExtendedProps : IWMPObjectExtendedProps: Public interface for skin object model. IWMPObjectExtendedProps = interface(IDispatch) ['{21D077C1-4BAA-11D3-BD45-00C04F6EA5AE}'] function Get_ID : WideString; safecall; function Get_elementType : WideString; safecall; function Get_left : Integer; safecall; procedure Set_left(const pVal:Integer); safecall; function Get_top : Integer; safecall; procedure Set_top(const pVal:Integer); safecall; function Get_right : Integer; safecall; procedure Set_right(const pVal:Integer); safecall; function Get_bottom : Integer; safecall; procedure Set_bottom(const pVal:Integer); safecall; function Get_width : Integer; safecall; procedure Set_width(const pVal:Integer); safecall; function Get_height : Integer; safecall; procedure Set_height(const pVal:Integer); safecall; function Get_zIndex : Integer; safecall; procedure Set_zIndex(const pVal:Integer); safecall; function Get_clippingImage : WideString; safecall; procedure Set_clippingImage(const pVal:WideString); safecall; function Get_clippingColor : WideString; safecall; procedure Set_clippingColor(const pVal:WideString); safecall; function Get_visible : WordBool; safecall; procedure Set_visible(const pVal:WordBool); safecall; function Get_enabled : WordBool; safecall; procedure Set_enabled(const pVal:WordBool); safecall; function Get_tabStop : WordBool; safecall; procedure Set_tabStop(const pVal:WordBool); safecall; function Get_passThrough : WordBool; safecall; procedure Set_passThrough(const pVal:WordBool); safecall; function Get_horizontalAlignment : WideString; safecall; procedure Set_horizontalAlignment(const pVal:WideString); safecall; function Get_verticalAlignment : WideString; safecall; procedure Set_verticalAlignment(const pVal:WideString); safecall; // moveTo : method moveTo procedure moveTo(newX:Integer;newY:Integer;moveTime:Integer);safecall; // slideTo : method slideTo procedure slideTo(newX:Integer;newY:Integer;moveTime:Integer);safecall; // moveSizeTo : method moveSizeTo procedure moveSizeTo(newX:Integer;newY:Integer;newWidth:Integer;newHeight:Integer;moveTime:Integer;fSlide:WordBool);safecall; function Get_alphaBlend : Integer; safecall; procedure Set_alphaBlend(const pVal:Integer); safecall; // alphaBlendTo : method alphaBlendTo procedure alphaBlendTo(newVal:Integer;alphaTime:Integer);safecall; function Get_accName : WideString; safecall; procedure Set_accName(const pszName:WideString); safecall; function Get_accDescription : WideString; safecall; procedure Set_accDescription(const pszDesc:WideString); safecall; function Get_accKeyboardShortcut : WideString; safecall; procedure Set_accKeyboardShortcut(const pszShortcut:WideString); safecall; function Get_resizeImages : WordBool; safecall; procedure Set_resizeImages(const pVal:WordBool); safecall; function Get_nineGridMargins : WideString; safecall; procedure Set_nineGridMargins(const pszMargins:WideString); safecall; function Get_resizeOptimize : WideString; safecall; procedure Set_resizeOptimize(const ppszResizeOptimize:WideString); safecall; function Get_rotation : Single; safecall; procedure Set_rotation(const pfVal:Single); safecall; // ID : property id property ID:WideString read Get_ID; // elementType : property elementType property elementType:WideString read Get_elementType; // left : property left property left:Integer read Get_left write Set_left; // top : property top property top:Integer read Get_top write Set_top; // right : property right property right:Integer read Get_right write Set_right; // bottom : property bottom property bottom:Integer read Get_bottom write Set_bottom; // width : property width property width:Integer read Get_width write Set_width; // height : property height property height:Integer read Get_height write Set_height; // zIndex : property zIndex property zIndex:Integer read Get_zIndex write Set_zIndex; // clippingImage : property clippingImage property clippingImage:WideString read Get_clippingImage write Set_clippingImage; // clippingColor : property clippingColor property clippingColor:WideString read Get_clippingColor write Set_clippingColor; // visible : property visible property visible:WordBool read Get_visible write Set_visible; // enabled : property enabled property enabled:WordBool read Get_enabled write Set_enabled; // tabStop : property tabStop property tabStop:WordBool read Get_tabStop write Set_tabStop; // passThrough : property passThrough property passThrough:WordBool read Get_passThrough write Set_passThrough; // horizontalAlignment : property horizontalAlignment property horizontalAlignment:WideString read Get_horizontalAlignment write Set_horizontalAlignment; // verticalAlignment : property verticalAlignment property verticalAlignment:WideString read Get_verticalAlignment write Set_verticalAlignment; // alphaBlend : property alphaBlend property alphaBlend:Integer read Get_alphaBlend write Set_alphaBlend; // accName : property accName property accName:WideString read Get_accName write Set_accName; // accDescription : property accDescription property accDescription:WideString read Get_accDescription write Set_accDescription; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString read Get_accKeyboardShortcut write Set_accKeyboardShortcut; // resizeImages : property resizeImages property resizeImages:WordBool read Get_resizeImages write Set_resizeImages; // nineGridMargins : property nineGridMargins property nineGridMargins:WideString read Get_nineGridMargins write Set_nineGridMargins; // resizeOptimize : property resizeOptimize property resizeOptimize:WideString read Get_resizeOptimize write Set_resizeOptimize; // rotation : property rotation property rotation:Single read Get_rotation write Set_rotation; end; // IWMPObjectExtendedProps : IWMPObjectExtendedProps: Public interface for skin object model. IWMPObjectExtendedPropsDisp = dispinterface ['{21D077C1-4BAA-11D3-BD45-00C04F6EA5AE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // moveTo : method moveTo procedure moveTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2015; // slideTo : method slideTo procedure slideTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2021; // moveSizeTo : method moveSizeTo procedure moveSizeTo(newX:Integer;newY:Integer;newWidth:Integer;newHeight:Integer;moveTime:Integer;fSlide:WordBool);dispid 2026; // alphaBlendTo : method alphaBlendTo procedure alphaBlendTo(newVal:Integer;alphaTime:Integer);dispid 2017; // ID : property id property ID:WideString readonly dispid 2000; // elementType : property elementType property elementType:WideString readonly dispid 2001; // left : property left property left:Integer dispid 2002; // top : property top property top:Integer dispid 2003; // right : property right property right:Integer dispid 2022; // bottom : property bottom property bottom:Integer dispid 2023; // width : property width property width:Integer dispid 2004; // height : property height property height:Integer dispid 2005; // zIndex : property zIndex property zIndex:Integer dispid 2006; // clippingImage : property clippingImage property clippingImage:WideString dispid 2007; // clippingColor : property clippingColor property clippingColor:WideString dispid 2008; // visible : property visible property visible:WordBool dispid 2009; // enabled : property enabled property enabled:WordBool dispid 2010; // tabStop : property tabStop property tabStop:WordBool dispid 2011; // passThrough : property passThrough property passThrough:WordBool dispid 2012; // horizontalAlignment : property horizontalAlignment property horizontalAlignment:WideString dispid 2013; // verticalAlignment : property verticalAlignment property verticalAlignment:WideString dispid 2014; // alphaBlend : property alphaBlend property alphaBlend:Integer dispid 2016; // accName : property accName property accName:WideString dispid 2018; // accDescription : property accDescription property accDescription:WideString dispid 2019; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString dispid 2020; // resizeImages : property resizeImages property resizeImages:WordBool dispid 2024; // nineGridMargins : property nineGridMargins property nineGridMargins:WideString dispid 2025; // resizeOptimize : property resizeOptimize property resizeOptimize:WideString dispid 2027; // rotation : property rotation property rotation:Single dispid 2028; end; // IWMPLayoutSubView : IWMPLayoutSubView: Public interface for skin object model. IWMPLayoutSubView = interface(IWMPObjectExtendedProps) ['{72F486B1-0D43-11D3-BD3F-00C04F6EA5AE}'] function Get_transparencyColor : WideString; safecall; procedure Set_transparencyColor(const pVal:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_backgroundImage : WideString; safecall; procedure Set_backgroundImage(const pVal:WideString); safecall; function Get_backgroundTiled : WordBool; safecall; procedure Set_backgroundTiled(const pVal:WordBool); safecall; function Get_backgroundImageHueShift : Single; safecall; procedure Set_backgroundImageHueShift(const pVal:Single); safecall; function Get_backgroundImageSaturation : Single; safecall; procedure Set_backgroundImageSaturation(const pVal:Single); safecall; function Get_resizeBackgroundImage : WordBool; safecall; procedure Set_resizeBackgroundImage(const pVal:WordBool); safecall; // transparencyColor : property transparencyColor property transparencyColor:WideString read Get_transparencyColor write Set_transparencyColor; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // backgroundImage : property backgroundImage property backgroundImage:WideString read Get_backgroundImage write Set_backgroundImage; // backgroundTiled : property backgroundTiled property backgroundTiled:WordBool read Get_backgroundTiled write Set_backgroundTiled; // backgroundImageHueShift : property hueShift property backgroundImageHueShift:Single read Get_backgroundImageHueShift write Set_backgroundImageHueShift; // backgroundImageSaturation : property saturation property backgroundImageSaturation:Single read Get_backgroundImageSaturation write Set_backgroundImageSaturation; // resizeBackgroundImage : property resizeBackgroundImage property resizeBackgroundImage:WordBool read Get_resizeBackgroundImage write Set_resizeBackgroundImage; end; // IWMPLayoutSubView : IWMPLayoutSubView: Public interface for skin object model. IWMPLayoutSubViewDisp = dispinterface ['{72F486B1-0D43-11D3-BD3F-00C04F6EA5AE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // moveTo : method moveTo procedure moveTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2015; // slideTo : method slideTo procedure slideTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2021; // moveSizeTo : method moveSizeTo procedure moveSizeTo(newX:Integer;newY:Integer;newWidth:Integer;newHeight:Integer;moveTime:Integer;fSlide:WordBool);dispid 2026; // alphaBlendTo : method alphaBlendTo procedure alphaBlendTo(newVal:Integer;alphaTime:Integer);dispid 2017; // ID : property id property ID:WideString readonly dispid 2000; // elementType : property elementType property elementType:WideString readonly dispid 2001; // left : property left property left:Integer dispid 2002; // top : property top property top:Integer dispid 2003; // right : property right property right:Integer dispid 2022; // bottom : property bottom property bottom:Integer dispid 2023; // width : property width property width:Integer dispid 2004; // height : property height property height:Integer dispid 2005; // zIndex : property zIndex property zIndex:Integer dispid 2006; // clippingImage : property clippingImage property clippingImage:WideString dispid 2007; // clippingColor : property clippingColor property clippingColor:WideString dispid 2008; // visible : property visible property visible:WordBool dispid 2009; // enabled : property enabled property enabled:WordBool dispid 2010; // tabStop : property tabStop property tabStop:WordBool dispid 2011; // passThrough : property passThrough property passThrough:WordBool dispid 2012; // horizontalAlignment : property horizontalAlignment property horizontalAlignment:WideString dispid 2013; // verticalAlignment : property verticalAlignment property verticalAlignment:WideString dispid 2014; // alphaBlend : property alphaBlend property alphaBlend:Integer dispid 2016; // accName : property accName property accName:WideString dispid 2018; // accDescription : property accDescription property accDescription:WideString dispid 2019; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString dispid 2020; // resizeImages : property resizeImages property resizeImages:WordBool dispid 2024; // nineGridMargins : property nineGridMargins property nineGridMargins:WideString dispid 2025; // resizeOptimize : property resizeOptimize property resizeOptimize:WideString dispid 2027; // rotation : property rotation property rotation:Single dispid 2028; // transparencyColor : property transparencyColor property transparencyColor:WideString dispid 2300; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 2301; // backgroundImage : property backgroundImage property backgroundImage:WideString dispid 2302; // backgroundTiled : property backgroundTiled property backgroundTiled:WordBool dispid 2303; // backgroundImageHueShift : property hueShift property backgroundImageHueShift:Single dispid 2304; // backgroundImageSaturation : property saturation property backgroundImageSaturation:Single dispid 2305; // resizeBackgroundImage : property resizeBackgroundImage property resizeBackgroundImage:WordBool dispid 2306; end; // IWMPLayoutView : IWMPLayoutView: Public interface for skin object model. IWMPLayoutView = interface(IWMPLayoutSubView) ['{172E905D-80D9-4C2F-B7CE-2CCB771787A2}'] function Get_title : WideString; safecall; procedure Set_title(const pVal:WideString); safecall; function Get_category : WideString; safecall; procedure Set_category(const pVal:WideString); safecall; function Get_focusObjectID : WideString; safecall; procedure Set_focusObjectID(const pVal:WideString); safecall; function Get_titleBar : WordBool; safecall; function Get_resizable : WordBool; safecall; function Get_timerInterval : Integer; safecall; procedure Set_timerInterval(const pVal:Integer); safecall; function Get_minWidth : Integer; safecall; procedure Set_minWidth(const pVal:Integer); safecall; function Get_maxWidth : Integer; safecall; procedure Set_maxWidth(const pVal:Integer); safecall; function Get_minHeight : Integer; safecall; procedure Set_minHeight(const pVal:Integer); safecall; function Get_maxHeight : Integer; safecall; procedure Set_maxHeight(const pVal:Integer); safecall; // close : method close procedure close;safecall; // minimize : method minimize procedure minimize;safecall; // maximize : method maximize procedure maximize;safecall; // restore : method restore procedure restore;safecall; // size : method size procedure size(bstrDirection:WideString);safecall; // returnToMediaCenter : method returnToMediaCenter procedure returnToMediaCenter;safecall; // updateWindow : method updateWindow procedure updateWindow;safecall; function Get_maximized : WordBool; safecall; function Get_minimized : WordBool; safecall; // title : property title property title:WideString read Get_title write Set_title; // category : property category property category:WideString read Get_category write Set_category; // focusObjectID : property focusObjectID property focusObjectID:WideString read Get_focusObjectID write Set_focusObjectID; // titleBar : property titleBar property titleBar:WordBool read Get_titleBar; // resizable : property resizable property resizable:WordBool read Get_resizable; // timerInterval : property timerInterval property timerInterval:Integer read Get_timerInterval write Set_timerInterval; // minWidth : property minWidth property minWidth:Integer read Get_minWidth write Set_minWidth; // maxWidth : property maxWidth property maxWidth:Integer read Get_maxWidth write Set_maxWidth; // minHeight : property minHeight property minHeight:Integer read Get_minHeight write Set_minHeight; // maxHeight : property maxHeight property maxHeight:Integer read Get_maxHeight write Set_maxHeight; // maximized : property maximized:WordBool read Get_maximized; // minimized : property minimized:WordBool read Get_minimized; end; // IWMPLayoutView : IWMPLayoutView: Public interface for skin object model. IWMPLayoutViewDisp = dispinterface ['{172E905D-80D9-4C2F-B7CE-2CCB771787A2}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // moveTo : method moveTo procedure moveTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2015; // slideTo : method slideTo procedure slideTo(newX:Integer;newY:Integer;moveTime:Integer);dispid 2021; // moveSizeTo : method moveSizeTo procedure moveSizeTo(newX:Integer;newY:Integer;newWidth:Integer;newHeight:Integer;moveTime:Integer;fSlide:WordBool);dispid 2026; // alphaBlendTo : method alphaBlendTo procedure alphaBlendTo(newVal:Integer;alphaTime:Integer);dispid 2017; // close : method close procedure close;dispid 2318; // minimize : method minimize procedure minimize;dispid 2319; // maximize : method maximize procedure maximize;dispid 2320; // restore : method restore procedure restore;dispid 2321; // size : method size procedure size(bstrDirection:WideString);dispid 2322; // returnToMediaCenter : method returnToMediaCenter procedure returnToMediaCenter;dispid 2323; // updateWindow : method updateWindow procedure updateWindow;dispid 2324; // ID : property id property ID:WideString readonly dispid 2000; // elementType : property elementType property elementType:WideString readonly dispid 2001; // left : property left property left:Integer dispid 2002; // top : property top property top:Integer dispid 2003; // right : property right property right:Integer dispid 2022; // bottom : property bottom property bottom:Integer dispid 2023; // width : property width property width:Integer dispid 2004; // height : property height property height:Integer dispid 2005; // zIndex : property zIndex property zIndex:Integer dispid 2006; // clippingImage : property clippingImage property clippingImage:WideString dispid 2007; // clippingColor : property clippingColor property clippingColor:WideString dispid 2008; // visible : property visible property visible:WordBool dispid 2009; // enabled : property enabled property enabled:WordBool dispid 2010; // tabStop : property tabStop property tabStop:WordBool dispid 2011; // passThrough : property passThrough property passThrough:WordBool dispid 2012; // horizontalAlignment : property horizontalAlignment property horizontalAlignment:WideString dispid 2013; // verticalAlignment : property verticalAlignment property verticalAlignment:WideString dispid 2014; // alphaBlend : property alphaBlend property alphaBlend:Integer dispid 2016; // accName : property accName property accName:WideString dispid 2018; // accDescription : property accDescription property accDescription:WideString dispid 2019; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString dispid 2020; // resizeImages : property resizeImages property resizeImages:WordBool dispid 2024; // nineGridMargins : property nineGridMargins property nineGridMargins:WideString dispid 2025; // resizeOptimize : property resizeOptimize property resizeOptimize:WideString dispid 2027; // rotation : property rotation property rotation:Single dispid 2028; // transparencyColor : property transparencyColor property transparencyColor:WideString dispid 2300; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 2301; // backgroundImage : property backgroundImage property backgroundImage:WideString dispid 2302; // backgroundTiled : property backgroundTiled property backgroundTiled:WordBool dispid 2303; // backgroundImageHueShift : property hueShift property backgroundImageHueShift:Single dispid 2304; // backgroundImageSaturation : property saturation property backgroundImageSaturation:Single dispid 2305; // resizeBackgroundImage : property resizeBackgroundImage property resizeBackgroundImage:WordBool dispid 2306; // title : property title property title:WideString dispid 2307; // category : property category property category:WideString dispid 2308; // focusObjectID : property focusObjectID property focusObjectID:WideString dispid 2309; // titleBar : property titleBar property titleBar:WordBool readonly dispid 2311; // resizable : property resizable property resizable:WordBool readonly dispid 2312; // timerInterval : property timerInterval property timerInterval:Integer dispid 2313; // minWidth : property minWidth property minWidth:Integer dispid 2314; // maxWidth : property maxWidth property maxWidth:Integer dispid 2315; // minHeight : property minHeight property minHeight:Integer dispid 2316; // maxHeight : property maxHeight property maxHeight:Integer dispid 2317; // maximized : property maximized:WordBool readonly dispid 2326; // minimized : property minimized:WordBool readonly dispid 2327; end; // IWMPEventObject : IWMPEventObject: Not Public. Internal interface used by Windows Media Player. IWMPEventObject = interface(IDispatch) ['{5AF0BEC1-46AA-11D3-BD45-00C04F6EA5AE}'] function Get_srcElement : IDispatch; safecall; function Get_altKey : WordBool; safecall; function Get_ctrlKey : WordBool; safecall; function Get_shiftKey : WordBool; safecall; function Get_fromElement : IDispatch; safecall; function Get_toElement : IDispatch; safecall; procedure Set_keyCode(const p:Integer); safecall; function Get_keyCode : Integer; safecall; function Get_button : Integer; safecall; function Get_x : Integer; safecall; function Get_y : Integer; safecall; function Get_clientX : Integer; safecall; function Get_clientY : Integer; safecall; function Get_offsetX : Integer; safecall; function Get_offsetY : Integer; safecall; function Get_screenX : Integer; safecall; function Get_screenY : Integer; safecall; function Get_screenWidth : Integer; safecall; function Get_screenHeight : Integer; safecall; function Get_penOrTouch : WordBool; safecall; // srcElement : property srcElement:IDispatch read Get_srcElement; // altKey : property altKey:WordBool read Get_altKey; // ctrlKey : property ctrlKey:WordBool read Get_ctrlKey; // shiftKey : property shiftKey:WordBool read Get_shiftKey; // fromElement : property fromElement:IDispatch read Get_fromElement; // toElement : property toElement:IDispatch read Get_toElement; // keyCode : property keyCode:Integer read Get_keyCode write Set_keyCode; // button : property button:Integer read Get_button; // x : property x:Integer read Get_x; // y : property y:Integer read Get_y; // clientX : property clientX:Integer read Get_clientX; // clientY : property clientY:Integer read Get_clientY; // offsetX : property offsetX:Integer read Get_offsetX; // offsetY : property offsetY:Integer read Get_offsetY; // screenX : property screenX:Integer read Get_screenX; // screenY : property screenY:Integer read Get_screenY; // screenWidth : property screenWidth:Integer read Get_screenWidth; // screenHeight : property screenHeight:Integer read Get_screenHeight; // penOrTouch : property penOrTouch:WordBool read Get_penOrTouch; end; // IWMPEventObject : IWMPEventObject: Not Public. Internal interface used by Windows Media Player. IWMPEventObjectDisp = dispinterface ['{5AF0BEC1-46AA-11D3-BD45-00C04F6EA5AE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // srcElement : property srcElement:IDispatch readonly dispid 2200; // altKey : property altKey:WordBool readonly dispid 2201; // ctrlKey : property ctrlKey:WordBool readonly dispid 2202; // shiftKey : property shiftKey:WordBool readonly dispid 2203; // fromElement : property fromElement:IDispatch readonly dispid 2204; // toElement : property toElement:IDispatch readonly dispid 2205; // keyCode : property keyCode:Integer dispid 2206; // button : property button:Integer readonly dispid 2207; // x : property x:Integer readonly dispid 2208; // y : property y:Integer readonly dispid 2209; // clientX : property clientX:Integer readonly dispid 2210; // clientY : property clientY:Integer readonly dispid 2211; // offsetX : property offsetX:Integer readonly dispid 2212; // offsetY : property offsetY:Integer readonly dispid 2213; // screenX : property screenX:Integer readonly dispid 2214; // screenY : property screenY:Integer readonly dispid 2215; // screenWidth : property screenWidth:Integer readonly dispid 2216; // screenHeight : property screenHeight:Integer readonly dispid 2217; // penOrTouch : property penOrTouch:WordBool readonly dispid 2218; end; // IWMPTheme : IWMPTheme: Public interface for skin object model. IWMPTheme = interface(IDispatch) ['{6FCAE13D-E492-4584-9C21-D2C052A2A33A}'] function Get_title : WideString; safecall; function Get_version : Single; safecall; function Get_authorVersion : WideString; safecall; function Get_author : WideString; safecall; function Get_copyright : WideString; safecall; function Get_currentViewID : WideString; safecall; procedure Set_currentViewID(const pVal:WideString); safecall; // showErrorDialog : method showErrorDialog procedure showErrorDialog;safecall; // logString : method logString procedure logString(stringVal:WideString);safecall; // openView : method openView procedure openView(viewID:WideString);safecall; // openViewRelative : method openView function openViewRelative(viewID:WideString;x:Integer;y:Integer):IDispatch;safecall; // closeView : method closeView procedure closeView(viewID:WideString);safecall; // openDialog : method openDialog function openDialog(dialogType:WideString;parameters:WideString):WideString;safecall; // loadString : method loadString function loadString(bstrString:WideString):WideString;safecall; // loadPreference : method loadPreference function loadPreference(bstrName:WideString):WideString;safecall; // savePreference : method savePreference procedure savePreference(bstrName:WideString;bstrValue:WideString);safecall; // playSound : method playSound procedure playSound(bstrFilename:WideString);safecall; // openViewRelativeInternal : Microsoft internal use only function openViewRelativeInternal(viewID:WideString;nIndex:Integer;x:Integer;y:Integer;nWidth:Integer;nHeight:Integer;bstrHorizontalAlignment:WideString;bstrVerticalAlignment:WideString):IDispatch;safecall; // setViewPosition : Microsoft internal use only procedure setViewPosition(viewID:WideString;nIndex:Integer;x:Integer;y:Integer;nWidth:Integer;nHeight:Integer;bstrHorizontalAlignment:WideString;bstrVerticalAlignment:WideString);safecall; // title : property title property title:WideString read Get_title; // version : property version property version:Single read Get_version; // authorVersion : property authorVersion property authorVersion:WideString read Get_authorVersion; // author : property author property author:WideString read Get_author; // copyright : property copyright property copyright:WideString read Get_copyright; // currentViewID : property title property currentViewID:WideString read Get_currentViewID write Set_currentViewID; end; // IWMPTheme : IWMPTheme: Public interface for skin object model. IWMPThemeDisp = dispinterface ['{6FCAE13D-E492-4584-9C21-D2C052A2A33A}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // showErrorDialog : method showErrorDialog procedure showErrorDialog;dispid 2506; // logString : method logString procedure logString(stringVal:WideString);dispid 2507; // openView : method openView procedure openView(viewID:WideString);dispid 2508; // openViewRelative : method openView function openViewRelative(viewID:WideString;x:Integer;y:Integer):IDispatch;dispid 2515; // closeView : method closeView procedure closeView(viewID:WideString);dispid 2509; // openDialog : method openDialog function openDialog(dialogType:WideString;parameters:WideString):WideString;dispid 2510; // loadString : method loadString function loadString(bstrString:WideString):WideString;dispid 2511; // loadPreference : method loadPreference function loadPreference(bstrName:WideString):WideString;dispid 2512; // savePreference : method savePreference procedure savePreference(bstrName:WideString;bstrValue:WideString);dispid 2513; // playSound : method playSound procedure playSound(bstrFilename:WideString);dispid 2514; // openViewRelativeInternal : Microsoft internal use only function openViewRelativeInternal(viewID:WideString;nIndex:Integer;x:Integer;y:Integer;nWidth:Integer;nHeight:Integer;bstrHorizontalAlignment:WideString;bstrVerticalAlignment:WideString):IDispatch;dispid 2516; // setViewPosition : Microsoft internal use only procedure setViewPosition(viewID:WideString;nIndex:Integer;x:Integer;y:Integer;nWidth:Integer;nHeight:Integer;bstrHorizontalAlignment:WideString;bstrVerticalAlignment:WideString);dispid 2518; // title : property title property title:WideString readonly dispid 2500; // version : property version property version:Single readonly dispid 2501; // authorVersion : property authorVersion property authorVersion:WideString readonly dispid 2502; // author : property author property author:WideString readonly dispid 2503; // copyright : property copyright property copyright:WideString readonly dispid 2504; // currentViewID : property title property currentViewID:WideString dispid 2505; end; // IWMPLayoutSettingsDispatch : IWMPLayoutSettingsDispatch: Not Public. Internal interface used by Windows Media Player. IWMPLayoutSettingsDispatch = interface(IDispatch) ['{B2C2D18E-97AF-4B6A-A56B-2FFFF470FB81}'] function Get_effectType : WideString; safecall; procedure Set_effectType(const pVal:WideString); safecall; function Get_effectPreset : Integer; safecall; procedure Set_effectPreset(const pVal:Integer); safecall; function Get_settingsView : WideString; safecall; procedure Set_settingsView(const pVal:WideString); safecall; function Get_videoZoom : Integer; safecall; procedure Set_videoZoom(const pVal:Integer); safecall; function Get_videoShrinkToFit : WordBool; safecall; procedure Set_videoShrinkToFit(const pVal:WordBool); safecall; function Get_videoStretchToFit : WordBool; safecall; procedure Set_videoStretchToFit(const pVal:WordBool); safecall; function Get_userVideoStretchToFit : WordBool; safecall; procedure Set_userVideoStretchToFit(const pVal:WordBool); safecall; function Get_showCaptions : WordBool; safecall; procedure Set_showCaptions(const pVal:WordBool); safecall; function Get_showTitles : WordBool; safecall; procedure Set_showTitles(const pVal:WordBool); safecall; function Get_showEffects : WordBool; safecall; procedure Set_showEffects(const pVal:WordBool); safecall; function Get_showFullScreenPlaylist : WordBool; safecall; procedure Set_showFullScreenPlaylist(const pVal:WordBool); safecall; function Get_contrastMode : WideString; safecall; // getNamedString : method getNamedString function getNamedString(bstrName:WideString):WideString;safecall; // getDurationStringFromSeconds : method getDurationStringFromSeconds function getDurationStringFromSeconds(lDurationVal:Integer):WideString;safecall; function Get_displayView : WideString; safecall; procedure Set_displayView(const pVal:WideString); safecall; function Get_metadataView : WideString; safecall; procedure Set_metadataView(const pVal:WideString); safecall; function Get_showSettings : WordBool; safecall; procedure Set_showSettings(const pVal:WordBool); safecall; function Get_showResizeBars : WordBool; safecall; procedure Set_showResizeBars(const pVal:WordBool); safecall; function Get_showPlaylist : WordBool; safecall; procedure Set_showPlaylist(const pVal:WordBool); safecall; function Get_showMetadata : WordBool; safecall; procedure Set_showMetadata(const pVal:WordBool); safecall; function Get_settingsWidth : Integer; safecall; procedure Set_settingsWidth(const pVal:Integer); safecall; function Get_settingsHeight : Integer; safecall; procedure Set_settingsHeight(const pVal:Integer); safecall; function Get_playlistWidth : Integer; safecall; procedure Set_playlistWidth(const pVal:Integer); safecall; function Get_playlistHeight : Integer; safecall; procedure Set_playlistHeight(const pVal:Integer); safecall; function Get_metadataWidth : Integer; safecall; procedure Set_metadataWidth(const pVal:Integer); safecall; function Get_metadataHeight : Integer; safecall; procedure Set_metadataHeight(const pVal:Integer); safecall; function Get_fullScreenAvailable : WordBool; safecall; procedure Set_fullScreenAvailable(const pVal:WordBool); safecall; function Get_fullScreenRequest : WordBool; safecall; procedure Set_fullScreenRequest(const pVal:WordBool); safecall; function Get_quickHide : WordBool; safecall; procedure Set_quickHide(const pVal:WordBool); safecall; function Get_displayPreset : Integer; safecall; procedure Set_displayPreset(const pVal:Integer); safecall; function Get_settingsPreset : Integer; safecall; procedure Set_settingsPreset(const pVal:Integer); safecall; function Get_metadataPreset : Integer; safecall; procedure Set_metadataPreset(const pVal:Integer); safecall; function Get_userDisplayView : WideString; safecall; function Get_userWMPDisplayView : WideString; safecall; function Get_userDisplayPreset : Integer; safecall; function Get_userWMPDisplayPreset : Integer; safecall; function Get_dynamicRangeControl : Integer; safecall; procedure Set_dynamicRangeControl(const pVal:Integer); safecall; function Get_slowRate : Single; safecall; procedure Set_slowRate(const pVal:Single); safecall; function Get_fastRate : Single; safecall; procedure Set_fastRate(const pVal:Single); safecall; function Get_buttonHueShift : Single; safecall; procedure Set_buttonHueShift(const pVal:Single); safecall; function Get_buttonSaturation : Single; safecall; procedure Set_buttonSaturation(const pVal:Single); safecall; function Get_backHueShift : Single; safecall; procedure Set_backHueShift(const pVal:Single); safecall; function Get_backSaturation : Single; safecall; procedure Set_backSaturation(const pVal:Single); safecall; function Get_vizRequest : Integer; safecall; procedure Set_vizRequest(const pVal:Integer); safecall; function Get_appColorLight : WideString; safecall; function Get_appColorMedium : WideString; safecall; function Get_appColorDark : WideString; safecall; function Get_toolbarButtonHighlight : WideString; safecall; function Get_toolbarButtonShadow : WideString; safecall; function Get_toolbarButtonFace : WideString; safecall; function Get_itemPlayingColor : WideString; safecall; function Get_itemPlayingBackgroundColor : WideString; safecall; function Get_itemErrorColor : WideString; safecall; function Get_appColorLimited : WordBool; safecall; function Get_appColorBlackBackground : WordBool; safecall; procedure Set_appColorBlackBackground(const pVal:WordBool); safecall; function Get_appColorVideoBorder : WideString; safecall; procedure Set_appColorVideoBorder(const pVal:WideString); safecall; function Get_appColorAux1 : WideString; safecall; function Get_appColorAux2 : WideString; safecall; function Get_appColorAux3 : WideString; safecall; function Get_appColorAux4 : WideString; safecall; function Get_appColorAux5 : WideString; safecall; function Get_appColorAux6 : WideString; safecall; function Get_appColorAux7 : WideString; safecall; function Get_appColorAux8 : WideString; safecall; function Get_appColorAux9 : WideString; safecall; function Get_appColorAux10 : WideString; safecall; function Get_appColorAux11 : WideString; safecall; function Get_appColorAux12 : WideString; safecall; function Get_appColorAux13 : WideString; safecall; function Get_appColorAux14 : WideString; safecall; function Get_appColorAux15 : WideString; safecall; function Get_status : WideString; safecall; procedure Set_status(const pVal:WideString); safecall; function Get_userWMPSettingsView : WideString; safecall; function Get_userWMPSettingsPreset : Integer; safecall; function Get_userWMPShowSettings : WordBool; safecall; function Get_userWMPMetadataView : WideString; safecall; function Get_userWMPMetadataPreset : Integer; safecall; function Get_userWMPShowMetadata : WordBool; safecall; function Get_captionsHeight : Integer; safecall; procedure Set_captionsHeight(const pVal:Integer); safecall; function Get_snapToVideo : WordBool; safecall; procedure Set_snapToVideo(const pVal:WordBool); safecall; function Get_pinFullScreenControls : WordBool; safecall; procedure Set_pinFullScreenControls(const pVal:WordBool); safecall; function Get_isMultiMon : WordBool; safecall; function Get_exclusiveHueShift : Single; safecall; procedure Set_exclusiveHueShift(const pVal:Single); safecall; function Get_exclusiveSaturation : Single; safecall; procedure Set_exclusiveSaturation(const pVal:Single); safecall; function Get_themeBkgColorIsActive : WordBool; safecall; procedure Set_themeBkgColorIsActive(const pVal:WordBool); safecall; function Get_themeBkgColorActive : WideString; safecall; function Get_themeBkgColorInactive : WideString; safecall; // effectType : property effectType property effectType:WideString read Get_effectType write Set_effectType; // effectPreset : property effectPreset property effectPreset:Integer read Get_effectPreset write Set_effectPreset; // settingsView : property settingsView property settingsView:WideString read Get_settingsView write Set_settingsView; // videoZoom : property videoZoom property videoZoom:Integer read Get_videoZoom write Set_videoZoom; // videoShrinkToFit : property videoShrinkToFit property videoShrinkToFit:WordBool read Get_videoShrinkToFit write Set_videoShrinkToFit; // videoStretchToFit : property videoStretchToFit property videoStretchToFit:WordBool read Get_videoStretchToFit write Set_videoStretchToFit; // userVideoStretchToFit : property userVideoStretchToFit property userVideoStretchToFit:WordBool read Get_userVideoStretchToFit write Set_userVideoStretchToFit; // showCaptions : property showCaptions property showCaptions:WordBool read Get_showCaptions write Set_showCaptions; // showTitles : property showTitles property showTitles:WordBool read Get_showTitles write Set_showTitles; // showEffects : property showEffects property showEffects:WordBool read Get_showEffects write Set_showEffects; // showFullScreenPlaylist : property showFullScreenPlaylist property showFullScreenPlaylist:WordBool read Get_showFullScreenPlaylist write Set_showFullScreenPlaylist; // contrastMode : property contrastMode property contrastMode:WideString read Get_contrastMode; // displayView : property displayView property displayView:WideString read Get_displayView write Set_displayView; // metadataView : property metadataView property metadataView:WideString read Get_metadataView write Set_metadataView; // showSettings : property showSettings property showSettings:WordBool read Get_showSettings write Set_showSettings; // showResizeBars : property showResizeBars property showResizeBars:WordBool read Get_showResizeBars write Set_showResizeBars; // showPlaylist : property showPlaylist property showPlaylist:WordBool read Get_showPlaylist write Set_showPlaylist; // showMetadata : property showMetadata property showMetadata:WordBool read Get_showMetadata write Set_showMetadata; // settingsWidth : property settingsWidth property settingsWidth:Integer read Get_settingsWidth write Set_settingsWidth; // settingsHeight : property settingsHeight property settingsHeight:Integer read Get_settingsHeight write Set_settingsHeight; // playlistWidth : property playlistWidth property playlistWidth:Integer read Get_playlistWidth write Set_playlistWidth; // playlistHeight : property playlistHeight property playlistHeight:Integer read Get_playlistHeight write Set_playlistHeight; // metadataWidth : property metadataWidth property metadataWidth:Integer read Get_metadataWidth write Set_metadataWidth; // metadataHeight : property metadataHeight property metadataHeight:Integer read Get_metadataHeight write Set_metadataHeight; // fullScreenAvailable : property fullScreenAvailable property fullScreenAvailable:WordBool read Get_fullScreenAvailable write Set_fullScreenAvailable; // fullScreenRequest : property fullScreenRequest property fullScreenRequest:WordBool read Get_fullScreenRequest write Set_fullScreenRequest; // quickHide : property quickHide property quickHide:WordBool read Get_quickHide write Set_quickHide; // displayPreset : property displayPreset property displayPreset:Integer read Get_displayPreset write Set_displayPreset; // settingsPreset : property settingsPreset property settingsPreset:Integer read Get_settingsPreset write Set_settingsPreset; // metadataPreset : property metadataPreset property metadataPreset:Integer read Get_metadataPreset write Set_metadataPreset; // userDisplayView : property userDisplayView property userDisplayView:WideString read Get_userDisplayView; // userWMPDisplayView : property userWMPDisplayView property userWMPDisplayView:WideString read Get_userWMPDisplayView; // userDisplayPreset : property userDisplayPreset property userDisplayPreset:Integer read Get_userDisplayPreset; // userWMPDisplayPreset : property userWMPDisplayPreset property userWMPDisplayPreset:Integer read Get_userWMPDisplayPreset; // dynamicRangeControl : property dynamicRangeControl property dynamicRangeControl:Integer read Get_dynamicRangeControl write Set_dynamicRangeControl; // slowRate : property slowRate property slowRate:Single read Get_slowRate write Set_slowRate; // fastRate : property fastRate property fastRate:Single read Get_fastRate write Set_fastRate; // buttonHueShift : property buttonHueShift property buttonHueShift:Single read Get_buttonHueShift write Set_buttonHueShift; // buttonSaturation : property buttonSaturation property buttonSaturation:Single read Get_buttonSaturation write Set_buttonSaturation; // backHueShift : property backHueShift property backHueShift:Single read Get_backHueShift write Set_backHueShift; // backSaturation : property backSaturation property backSaturation:Single read Get_backSaturation write Set_backSaturation; // vizRequest : property vizRequest property vizRequest:Integer read Get_vizRequest write Set_vizRequest; // appColorLight : property appColorLight property appColorLight:WideString read Get_appColorLight; // appColorMedium : property appColorMedium property appColorMedium:WideString read Get_appColorMedium; // appColorDark : property appColorDark property appColorDark:WideString read Get_appColorDark; // toolbarButtonHighlight : property toolbarButtonHighlight property toolbarButtonHighlight:WideString read Get_toolbarButtonHighlight; // toolbarButtonShadow : property toolbarButtonShadow property toolbarButtonShadow:WideString read Get_toolbarButtonShadow; // toolbarButtonFace : property toolbarButtonFace property toolbarButtonFace:WideString read Get_toolbarButtonFace; // itemPlayingColor : property itemPlayingColor property itemPlayingColor:WideString read Get_itemPlayingColor; // itemPlayingBackgroundColor : property itemPlayingBackgroundColor property itemPlayingBackgroundColor:WideString read Get_itemPlayingBackgroundColor; // itemErrorColor : property itemErrorColor property itemErrorColor:WideString read Get_itemErrorColor; // appColorLimited : property AppColorLimited property appColorLimited:WordBool read Get_appColorLimited; // appColorBlackBackground : property AppColorBlackBackground property appColorBlackBackground:WordBool read Get_appColorBlackBackground write Set_appColorBlackBackground; // appColorVideoBorder : property appColorVideoBorder property appColorVideoBorder:WideString read Get_appColorVideoBorder write Set_appColorVideoBorder; // appColorAux1 : auxiliary color property appColorAux1:WideString read Get_appColorAux1; // appColorAux2 : auxiliary color property appColorAux2:WideString read Get_appColorAux2; // appColorAux3 : auxiliary color property appColorAux3:WideString read Get_appColorAux3; // appColorAux4 : auxiliary color property appColorAux4:WideString read Get_appColorAux4; // appColorAux5 : auxiliary color property appColorAux5:WideString read Get_appColorAux5; // appColorAux6 : auxiliary color property appColorAux6:WideString read Get_appColorAux6; // appColorAux7 : auxiliary color property appColorAux7:WideString read Get_appColorAux7; // appColorAux8 : auxiliary color property appColorAux8:WideString read Get_appColorAux8; // appColorAux9 : auxiliary color property appColorAux9:WideString read Get_appColorAux9; // appColorAux10 : auxiliary color property appColorAux10:WideString read Get_appColorAux10; // appColorAux11 : auxiliary color property appColorAux11:WideString read Get_appColorAux11; // appColorAux12 : auxiliary color property appColorAux12:WideString read Get_appColorAux12; // appColorAux13 : auxiliary color property appColorAux13:WideString read Get_appColorAux13; // appColorAux14 : auxiliary color property appColorAux14:WideString read Get_appColorAux14; // appColorAux15 : auxiliary color property appColorAux15:WideString read Get_appColorAux15; // status : status string for remote player (taskbar player) property status:WideString read Get_status write Set_status; // userWMPSettingsView : property userWMPSettingsView property userWMPSettingsView:WideString read Get_userWMPSettingsView; // userWMPSettingsPreset : property userWMPSettingsPreset property userWMPSettingsPreset:Integer read Get_userWMPSettingsPreset; // userWMPShowSettings : property userWMPShowSettings property userWMPShowSettings:WordBool read Get_userWMPShowSettings; // userWMPMetadataView : property userWMPMetadataView property userWMPMetadataView:WideString read Get_userWMPMetadataView; // userWMPMetadataPreset : property userWMPMetadataPreset property userWMPMetadataPreset:Integer read Get_userWMPMetadataPreset; // userWMPShowMetadata : property userWMPShowMetadata property userWMPShowMetadata:WordBool read Get_userWMPShowMetadata; // captionsHeight : property captionsHeight property captionsHeight:Integer read Get_captionsHeight write Set_captionsHeight; // snapToVideo : property snapToVideo property snapToVideo:WordBool read Get_snapToVideo write Set_snapToVideo; // pinFullScreenControls : property pinFullScreenControls property pinFullScreenControls:WordBool read Get_pinFullScreenControls write Set_pinFullScreenControls; // isMultiMon : property isMultiMon property isMultiMon:WordBool read Get_isMultiMon; // exclusiveHueShift : property exclusiveHueShift property exclusiveHueShift:Single read Get_exclusiveHueShift write Set_exclusiveHueShift; // exclusiveSaturation : property exclusiveSaturation property exclusiveSaturation:Single read Get_exclusiveSaturation write Set_exclusiveSaturation; // themeBkgColorIsActive : themeBkgColorIsActive property themeBkgColorIsActive:WordBool read Get_themeBkgColorIsActive write Set_themeBkgColorIsActive; // themeBkgColorActive : themeBkgColorActive property themeBkgColorActive:WideString read Get_themeBkgColorActive; // themeBkgColorInactive : themeBkgColorInactive property themeBkgColorInactive:WideString read Get_themeBkgColorInactive; end; // IWMPLayoutSettingsDispatch : IWMPLayoutSettingsDispatch: Not Public. Internal interface used by Windows Media Player. IWMPLayoutSettingsDispatchDisp = dispinterface ['{B2C2D18E-97AF-4B6A-A56B-2FFFF470FB81}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getNamedString : method getNamedString function getNamedString(bstrName:WideString):WideString;dispid 2810; // getDurationStringFromSeconds : method getDurationStringFromSeconds function getDurationStringFromSeconds(lDurationVal:Integer):WideString;dispid 2815; // effectType : property effectType property effectType:WideString dispid 2800; // effectPreset : property effectPreset property effectPreset:Integer dispid 2801; // settingsView : property settingsView property settingsView:WideString dispid 2802; // videoZoom : property videoZoom property videoZoom:Integer dispid 2803; // videoShrinkToFit : property videoShrinkToFit property videoShrinkToFit:WordBool dispid 2804; // videoStretchToFit : property videoStretchToFit property videoStretchToFit:WordBool dispid 2805; // userVideoStretchToFit : property userVideoStretchToFit property userVideoStretchToFit:WordBool dispid 2868; // showCaptions : property showCaptions property showCaptions:WordBool dispid 2807; // showTitles : property showTitles property showTitles:WordBool dispid 2808; // showEffects : property showEffects property showEffects:WordBool dispid 2809; // showFullScreenPlaylist : property showFullScreenPlaylist property showFullScreenPlaylist:WordBool dispid 2811; // contrastMode : property contrastMode property contrastMode:WideString readonly dispid 2813; // displayView : property displayView property displayView:WideString dispid 2816; // metadataView : property metadataView property metadataView:WideString dispid 2817; // showSettings : property showSettings property showSettings:WordBool dispid 2818; // showResizeBars : property showResizeBars property showResizeBars:WordBool dispid 2819; // showPlaylist : property showPlaylist property showPlaylist:WordBool dispid 2820; // showMetadata : property showMetadata property showMetadata:WordBool dispid 2821; // settingsWidth : property settingsWidth property settingsWidth:Integer dispid 2822; // settingsHeight : property settingsHeight property settingsHeight:Integer dispid 2823; // playlistWidth : property playlistWidth property playlistWidth:Integer dispid 2824; // playlistHeight : property playlistHeight property playlistHeight:Integer dispid 2825; // metadataWidth : property metadataWidth property metadataWidth:Integer dispid 2826; // metadataHeight : property metadataHeight property metadataHeight:Integer dispid 2827; // fullScreenAvailable : property fullScreenAvailable property fullScreenAvailable:WordBool dispid 2828; // fullScreenRequest : property fullScreenRequest property fullScreenRequest:WordBool dispid 2829; // quickHide : property quickHide property quickHide:WordBool dispid 2830; // displayPreset : property displayPreset property displayPreset:Integer dispid 2831; // settingsPreset : property settingsPreset property settingsPreset:Integer dispid 2832; // metadataPreset : property metadataPreset property metadataPreset:Integer dispid 2833; // userDisplayView : property userDisplayView property userDisplayView:WideString readonly dispid 2834; // userWMPDisplayView : property userWMPDisplayView property userWMPDisplayView:WideString readonly dispid 2835; // userDisplayPreset : property userDisplayPreset property userDisplayPreset:Integer readonly dispid 2836; // userWMPDisplayPreset : property userWMPDisplayPreset property userWMPDisplayPreset:Integer readonly dispid 2837; // dynamicRangeControl : property dynamicRangeControl property dynamicRangeControl:Integer dispid 2838; // slowRate : property slowRate property slowRate:Single dispid 2839; // fastRate : property fastRate property fastRate:Single dispid 2840; // buttonHueShift : property buttonHueShift property buttonHueShift:Single dispid 2841; // buttonSaturation : property buttonSaturation property buttonSaturation:Single dispid 2842; // backHueShift : property backHueShift property backHueShift:Single dispid 2843; // backSaturation : property backSaturation property backSaturation:Single dispid 2844; // vizRequest : property vizRequest property vizRequest:Integer dispid 2845; // appColorLight : property appColorLight property appColorLight:WideString readonly dispid 2847; // appColorMedium : property appColorMedium property appColorMedium:WideString readonly dispid 2848; // appColorDark : property appColorDark property appColorDark:WideString readonly dispid 2849; // toolbarButtonHighlight : property toolbarButtonHighlight property toolbarButtonHighlight:WideString readonly dispid 2856; // toolbarButtonShadow : property toolbarButtonShadow property toolbarButtonShadow:WideString readonly dispid 2857; // toolbarButtonFace : property toolbarButtonFace property toolbarButtonFace:WideString readonly dispid 2858; // itemPlayingColor : property itemPlayingColor property itemPlayingColor:WideString readonly dispid 2850; // itemPlayingBackgroundColor : property itemPlayingBackgroundColor property itemPlayingBackgroundColor:WideString readonly dispid 2851; // itemErrorColor : property itemErrorColor property itemErrorColor:WideString readonly dispid 2852; // appColorLimited : property AppColorLimited property appColorLimited:WordBool readonly dispid 2853; // appColorBlackBackground : property AppColorBlackBackground property appColorBlackBackground:WordBool dispid 2854; // appColorVideoBorder : property appColorVideoBorder property appColorVideoBorder:WideString dispid 2855; // appColorAux1 : auxiliary color property appColorAux1:WideString readonly dispid 2869; // appColorAux2 : auxiliary color property appColorAux2:WideString readonly dispid 2870; // appColorAux3 : auxiliary color property appColorAux3:WideString readonly dispid 2871; // appColorAux4 : auxiliary color property appColorAux4:WideString readonly dispid 2872; // appColorAux5 : auxiliary color property appColorAux5:WideString readonly dispid 2873; // appColorAux6 : auxiliary color property appColorAux6:WideString readonly dispid 2874; // appColorAux7 : auxiliary color property appColorAux7:WideString readonly dispid 2875; // appColorAux8 : auxiliary color property appColorAux8:WideString readonly dispid 2876; // appColorAux9 : auxiliary color property appColorAux9:WideString readonly dispid 2877; // appColorAux10 : auxiliary color property appColorAux10:WideString readonly dispid 2878; // appColorAux11 : auxiliary color property appColorAux11:WideString readonly dispid 2879; // appColorAux12 : auxiliary color property appColorAux12:WideString readonly dispid 2880; // appColorAux13 : auxiliary color property appColorAux13:WideString readonly dispid 2881; // appColorAux14 : auxiliary color property appColorAux14:WideString readonly dispid 2882; // appColorAux15 : auxiliary color property appColorAux15:WideString readonly dispid 2883; // status : status string for remote player (taskbar player) property status:WideString dispid 2884; // userWMPSettingsView : property userWMPSettingsView property userWMPSettingsView:WideString readonly dispid 2859; // userWMPSettingsPreset : property userWMPSettingsPreset property userWMPSettingsPreset:Integer readonly dispid 2860; // userWMPShowSettings : property userWMPShowSettings property userWMPShowSettings:WordBool readonly dispid 2861; // userWMPMetadataView : property userWMPMetadataView property userWMPMetadataView:WideString readonly dispid 2862; // userWMPMetadataPreset : property userWMPMetadataPreset property userWMPMetadataPreset:Integer readonly dispid 2863; // userWMPShowMetadata : property userWMPShowMetadata property userWMPShowMetadata:WordBool readonly dispid 2864; // captionsHeight : property captionsHeight property captionsHeight:Integer dispid 2865; // snapToVideo : property snapToVideo property snapToVideo:WordBool dispid 2866; // pinFullScreenControls : property pinFullScreenControls property pinFullScreenControls:WordBool dispid 2867; // isMultiMon : property isMultiMon property isMultiMon:WordBool readonly dispid 2887; // exclusiveHueShift : property exclusiveHueShift property exclusiveHueShift:Single dispid 2888; // exclusiveSaturation : property exclusiveSaturation property exclusiveSaturation:Single dispid 2889; // themeBkgColorIsActive : themeBkgColorIsActive property themeBkgColorIsActive:WordBool dispid 2892; // themeBkgColorActive : themeBkgColorActive property themeBkgColorActive:WideString readonly dispid 2890; // themeBkgColorInactive : themeBkgColorInactive property themeBkgColorInactive:WideString readonly dispid 2891; end; // IWMPWindow : IWMPWindow: Not Public. Internal interface used by Windows Media Player. IWMPWindow = interface(IDispatch) ['{43D5AE92-4332-477C-8883-E0B3B063C5D2}'] // setWindowPos : method setWindowPos procedure setWindowPos(x:Integer;y:Integer;height:Integer;width:Integer);safecall; function Get_frameRate : Integer; safecall; procedure Set_frameRate(const pVal:Integer); safecall; function Get_mouseX : Integer; safecall; function Get_mouseY : Integer; safecall; procedure Set_onsizing(const Param1:IDispatch); safecall; // openViewAlwaysOnTop : procedure openViewAlwaysOnTop(bstrViewID:WideString);safecall; // frameRate : property frameRate:Integer read Get_frameRate write Set_frameRate; // mouseX : property mouseX:Integer read Get_mouseX; // mouseY : property mouseY:Integer read Get_mouseY; // onsizing : property onsizing:IDispatch write Set_onsizing; end; // IWMPWindow : IWMPWindow: Not Public. Internal interface used by Windows Media Player. IWMPWindowDisp = dispinterface ['{43D5AE92-4332-477C-8883-E0B3B063C5D2}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // setWindowPos : method setWindowPos procedure setWindowPos(x:Integer;y:Integer;height:Integer;width:Integer);dispid 3300; // openViewAlwaysOnTop : procedure openViewAlwaysOnTop(bstrViewID:WideString);dispid 3305; // frameRate : property frameRate:Integer dispid 3301; // mouseX : property mouseX:Integer readonly dispid 3302; // mouseY : property mouseY:Integer readonly dispid 3303; // onsizing : property onsizing:IDispatch writeonly dispid 3304; end; // IWMPBrandDispatch : IWMPBrandDispatch: Not Public. Internal interface used by Windows Media Player. IWMPBrandDispatch = interface(IDispatch) ['{98BB02D4-ED74-43CC-AD6A-45888F2E0DCC}'] function Get_fullServiceName : WideString; safecall; function Get_friendlyName : WideString; safecall; function Get_guideButtonText : WideString; safecall; function Get_guideButtonTip : WideString; safecall; function Get_guideMenuText : WideString; safecall; function Get_guideAccText : WideString; safecall; function Get_task1ButtonText : WideString; safecall; function Get_task1ButtonTip : WideString; safecall; function Get_task1MenuText : WideString; safecall; function Get_task1AccText : WideString; safecall; function Get_guideUrl : WideString; safecall; function Get_task1Url : WideString; safecall; function Get_imageLargeUrl : WideString; safecall; function Get_imageSmallUrl : WideString; safecall; function Get_imageMenuUrl : WideString; safecall; function Get_infoCenterUrl : WideString; safecall; function Get_albumInfoUrl : WideString; safecall; function Get_buyCDUrl : WideString; safecall; function Get_htmlViewUrl : WideString; safecall; function Get_navigateUrl : WideString; safecall; function Get_cookieUrl : WideString; safecall; function Get_downloadStatusUrl : WideString; safecall; function Get_colorPlayer : WideString; safecall; function Get_colorPlayerText : WideString; safecall; function Get_navigateDispid : Integer; safecall; function Get_navigateParams : WideString; safecall; function Get_navigatePane : WideString; safecall; function Get_selectedPane : WideString; safecall; procedure Set_selectedPane(const pVal:WideString); safecall; // setNavigateProps : method setNavigateProps procedure setNavigateProps(bstrPane:WideString;lDispid:Integer;bstrParams:WideString);safecall; // getMediaParams : method getMediaParams function getMediaParams(pObject:IUnknown;bstrURL:WideString):WideString;safecall; procedure Set_selectedTask(const Param1:Integer); safecall; function Get_contentPartnerSelected : WordBool; safecall; // fullServiceName : property fullServiceName property fullServiceName:WideString read Get_fullServiceName; // friendlyName : property friendlyName property friendlyName:WideString read Get_friendlyName; // guideButtonText : property guideButtonText property guideButtonText:WideString read Get_guideButtonText; // guideButtonTip : property guideButtonTip property guideButtonTip:WideString read Get_guideButtonTip; // guideMenuText : property guideMenuText property guideMenuText:WideString read Get_guideMenuText; // guideAccText : property guideAccText property guideAccText:WideString read Get_guideAccText; // task1ButtonText : property task1ButtonText property task1ButtonText:WideString read Get_task1ButtonText; // task1ButtonTip : property task1ButtonTip property task1ButtonTip:WideString read Get_task1ButtonTip; // task1MenuText : property task1MenuText property task1MenuText:WideString read Get_task1MenuText; // task1AccText : property task1AccText property task1AccText:WideString read Get_task1AccText; // guideUrl : property guideUrl property guideUrl:WideString read Get_guideUrl; // task1Url : property task1Url property task1Url:WideString read Get_task1Url; // imageLargeUrl : property imageLargeUrl property imageLargeUrl:WideString read Get_imageLargeUrl; // imageSmallUrl : property imageSmallUrl property imageSmallUrl:WideString read Get_imageSmallUrl; // imageMenuUrl : property imageMenuUrl property imageMenuUrl:WideString read Get_imageMenuUrl; // infoCenterUrl : property infoCenterUrl property infoCenterUrl:WideString read Get_infoCenterUrl; // albumInfoUrl : property albumInfoUrl property albumInfoUrl:WideString read Get_albumInfoUrl; // buyCDUrl : property buyCDUrl property buyCDUrl:WideString read Get_buyCDUrl; // htmlViewUrl : property htmlViewUrl property htmlViewUrl:WideString read Get_htmlViewUrl; // navigateUrl : property navigateUrl property navigateUrl:WideString read Get_navigateUrl; // cookieUrl : property cookieUrl property cookieUrl:WideString read Get_cookieUrl; // downloadStatusUrl : property downloadStatusUrl property downloadStatusUrl:WideString read Get_downloadStatusUrl; // colorPlayer : property colorPlayer property colorPlayer:WideString read Get_colorPlayer; // colorPlayerText : property colorPlayerText property colorPlayerText:WideString read Get_colorPlayerText; // navigateDispid : property navigateDispid property navigateDispid:Integer read Get_navigateDispid; // navigateParams : property navigateParams property navigateParams:WideString read Get_navigateParams; // navigatePane : property navigatePane property navigatePane:WideString read Get_navigatePane; // selectedPane : property selectedPane property selectedPane:WideString read Get_selectedPane write Set_selectedPane; // selectedTask : property selectedTask property selectedTask:Integer write Set_selectedTask; // contentPartnerSelected : property contentPartnerSelected property contentPartnerSelected:WordBool read Get_contentPartnerSelected; end; // IWMPBrandDispatch : IWMPBrandDispatch: Not Public. Internal interface used by Windows Media Player. IWMPBrandDispatchDisp = dispinterface ['{98BB02D4-ED74-43CC-AD6A-45888F2E0DCC}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // setNavigateProps : method setNavigateProps procedure setNavigateProps(bstrPane:WideString;lDispid:Integer;bstrParams:WideString);dispid 3041; // getMediaParams : method getMediaParams function getMediaParams(pObject:IUnknown;bstrURL:WideString):WideString;dispid 3042; // fullServiceName : property fullServiceName property fullServiceName:WideString readonly dispid 3040; // friendlyName : property friendlyName property friendlyName:WideString readonly dispid 3000; // guideButtonText : property guideButtonText property guideButtonText:WideString readonly dispid 3001; // guideButtonTip : property guideButtonTip property guideButtonTip:WideString readonly dispid 3002; // guideMenuText : property guideMenuText property guideMenuText:WideString readonly dispid 3003; // guideAccText : property guideAccText property guideAccText:WideString readonly dispid 3004; // task1ButtonText : property task1ButtonText property task1ButtonText:WideString readonly dispid 3005; // task1ButtonTip : property task1ButtonTip property task1ButtonTip:WideString readonly dispid 3006; // task1MenuText : property task1MenuText property task1MenuText:WideString readonly dispid 3007; // task1AccText : property task1AccText property task1AccText:WideString readonly dispid 3008; // guideUrl : property guideUrl property guideUrl:WideString readonly dispid 3017; // task1Url : property task1Url property task1Url:WideString readonly dispid 3018; // imageLargeUrl : property imageLargeUrl property imageLargeUrl:WideString readonly dispid 3021; // imageSmallUrl : property imageSmallUrl property imageSmallUrl:WideString readonly dispid 3022; // imageMenuUrl : property imageMenuUrl property imageMenuUrl:WideString readonly dispid 3023; // infoCenterUrl : property infoCenterUrl property infoCenterUrl:WideString readonly dispid 3024; // albumInfoUrl : property albumInfoUrl property albumInfoUrl:WideString readonly dispid 3025; // buyCDUrl : property buyCDUrl property buyCDUrl:WideString readonly dispid 3026; // htmlViewUrl : property htmlViewUrl property htmlViewUrl:WideString readonly dispid 3027; // navigateUrl : property navigateUrl property navigateUrl:WideString readonly dispid 3028; // cookieUrl : property cookieUrl property cookieUrl:WideString readonly dispid 3029; // downloadStatusUrl : property downloadStatusUrl property downloadStatusUrl:WideString readonly dispid 3030; // colorPlayer : property colorPlayer property colorPlayer:WideString readonly dispid 3031; // colorPlayerText : property colorPlayerText property colorPlayerText:WideString readonly dispid 3032; // navigateDispid : property navigateDispid property navigateDispid:Integer readonly dispid 3035; // navigateParams : property navigateParams property navigateParams:WideString readonly dispid 3036; // navigatePane : property navigatePane property navigatePane:WideString readonly dispid 3037; // selectedPane : property selectedPane property selectedPane:WideString dispid 3038; // selectedTask : property selectedTask property selectedTask:Integer writeonly dispid 3039; // contentPartnerSelected : property contentPartnerSelected property contentPartnerSelected:WordBool readonly dispid 3043; end; // IWMPNowPlayingHelperDispatch : IWMPNowPlayingHelperDispatch: Not Public. Internal interface used by Windows Media Player. IWMPNowPlayingHelperDispatch = interface(IDispatch) ['{504F112E-77CC-4E3C-A073-5371B31D9B36}'] function Get_viewFriendlyName(bstrView:WideString) : WideString; safecall; function Get_viewPresetCount(bstrView:WideString) : Integer; safecall; function Get_viewPresetName(bstrView:WideString) : WideString; safecall; function Get_effectFriendlyName(bstrEffect:WideString) : WideString; safecall; function Get_effectPresetName(bstrEffect:WideString) : WideString; safecall; // resolveDisplayView : method resolveDisplayView function resolveDisplayView(fSafe:WordBool):WideString;safecall; // isValidDisplayView : method isValidDisplayView function isValidDisplayView(bstrView:WideString):WordBool;safecall; // getSkinFile : method getSkinFile function getSkinFile:WideString;safecall; function Get_captionsAvailable : WordBool; safecall; function Get_linkAvailable : Integer; safecall; function Get_linkRequest : Integer; safecall; procedure Set_linkRequest(const pVal:Integer); safecall; function Get_linkRequestParams : WideString; safecall; procedure Set_linkRequestParams(const pVal:WideString); safecall; // getCurrentArtID : method getCurrentArtID function getCurrentArtID(fLargeArt:WordBool):Integer;safecall; // getTimeString : method getTimeString function getTimeString(dTime:Double):WideString;safecall; // getCurrentScriptCommand : method getCurrentScriptCommand function getCurrentScriptCommand(bstrType:WideString):WideString;safecall; // calcLayout : method calcLayout procedure calcLayout(lWidth:Integer;lHeight:Integer;vbCaptions:WordBool;vbBanner:WordBool);safecall; // getLayoutSize : method getLayoutSize function getLayoutSize(nProp:Integer):Integer;safecall; // getRootPlaylist : method getRootPlaylist function getRootPlaylist(pPlaylist:IDispatch):IDispatch;safecall; // getHTMLViewURL : method getHTMLViewURL function getHTMLViewURL:WideString;safecall; function Get_editObj : IUnknown; safecall; procedure Set_editObj(const ppVal:IUnknown); safecall; // getStatusString : method getStatusString function getStatusString(bstrStatusId:WideString):WideString;safecall; // getStatusPct : method getStatusPct function getStatusPct(bstrStatusId:WideString):Integer;safecall; // getStatusResult : method getStatusResult function getStatusResult(bstrStatusId:WideString):Integer;safecall; // getStatusIcon : method getStatusIcon function getStatusIcon(bstrStatusId:WideString):Integer;safecall; // getStatusIdList : method getStatusIdList function getStatusIdList:WideString;safecall; function Get_notificationString : WideString; safecall; function Get_htmlViewBaseURL : WideString; safecall; procedure Set_htmlViewBaseURL(const pVal:WideString); safecall; function Get_htmlViewFullURL : WideString; safecall; procedure Set_htmlViewFullURL(const pVal:WideString); safecall; function Get_htmlViewSecureLock : Integer; safecall; procedure Set_htmlViewSecureLock(const pVal:Integer); safecall; function Get_htmlViewBusy : WordBool; safecall; procedure Set_htmlViewBusy(const pVal:WordBool); safecall; function Get_htmlViewShowCert : WordBool; safecall; procedure Set_htmlViewShowCert(const pVal:WordBool); safecall; function Get_previousEnabled : WordBool; safecall; procedure Set_previousEnabled(const pVal:WordBool); safecall; function Get_doPreviousNow : WordBool; safecall; procedure Set_doPreviousNow(const pVal:WordBool); safecall; function Get_DPI : Integer; safecall; // clearColors : clear all user color info procedure clearColors;safecall; function Get_lastMessage : WideString; safecall; procedure Set_lastMessage(const pVal:WideString); safecall; function Get_inVistaPlus : WordBool; safecall; function Get_isBidi : WordBool; safecall; function Get_isOCX : WordBool; safecall; function Get_hoverTransportsEnabled : WordBool; safecall; // initRipHelper : procedure initRipHelper;safecall; function Get_isAudioCD : WordBool; safecall; procedure Set_isAudioCD(const pVal:WordBool); safecall; function Get_canRip : WordBool; safecall; procedure Set_canRip(const pVal:WordBool); safecall; function Get_isRipping : WordBool; safecall; procedure Set_isRipping(const pVal:WordBool); safecall; function Get_currentDrive : WideString; safecall; procedure Set_currentDrive(const pVal:WideString); safecall; // startRip : procedure startRip;safecall; // stopRip : procedure stopRip;safecall; function Get_showMMO : WordBool; safecall; procedure Set_showMMO(const pVal:WordBool); safecall; function Get_MMOVisible : WordBool; safecall; function Get_suggestionsVisible : WordBool; safecall; function Get_suggestionsTextColor : WideString; safecall; function Get_fontFace : WideString; safecall; function Get_fontSize : Integer; safecall; function Get_backgroundColor : WideString; safecall; function Get_doubleClickTime : Integer; safecall; function Get_playAgain : WordBool; safecall; function Get_previousPlaylistAvailable : WordBool; safecall; function Get_nextPlaylistAvailable : WordBool; safecall; // nextPlaylist : procedure nextPlaylist;safecall; // previousPlaylist : procedure previousPlaylist;safecall; // playOffsetMedia : procedure playOffsetMedia(iOffset:Integer);safecall; function Get_basketVisible : WordBool; safecall; procedure Set_basketVisible(const pVal:WordBool); safecall; function Get_mmoTextColor : WideString; safecall; function Get_backgroundVisible : WordBool; safecall; procedure Set_backgroundEnabled(const pVal:WordBool); safecall; function Get_backgroundEnabled : WordBool; safecall; procedure Set_backgroundIndex(const pVal:Integer); safecall; function Get_backgroundIndex : Integer; safecall; function Get_upNext : WideString; safecall; function Get_playbackOverlayVisible : WordBool; safecall; function Get_remoted : WordBool; safecall; function Get_glassEnabled : WordBool; safecall; function Get_highContrast : WordBool; safecall; procedure Set_testHighContrast(const Param1:WideString); safecall; function Get_sessionPlaylistCount : Integer; safecall; // setGestureStatus : procedure setGestureStatus(pObject:IDispatch;newVal:Integer);safecall; function Get_metadataString : WideString; safecall; procedure Set_metadataString(const pVal:WideString); safecall; function Get_albumArtAlpha : Integer; safecall; function Get_playerModeAlbumArtSelected : WordBool; safecall; function Get_inFullScreen : WordBool; safecall; // syncToAlbumArt : procedure syncToAlbumArt(pObject:IDispatch;iOffsetFromCurrentMedia:Integer;bstrFallbackImage:WideString);safecall; function Get_resourceIdForDpi(iResourceId:SYSINT) : SYSINT; safecall; // viewFriendlyName : property viewFriendlyName property viewFriendlyName[bstrView:WideString]:WideString read Get_viewFriendlyName; // viewPresetCount : property viewPresetCount property viewPresetCount[bstrView:WideString]:Integer read Get_viewPresetCount; // viewPresetName : method viewPresetName property viewPresetName[bstrView:WideString]:WideString read Get_viewPresetName; // effectFriendlyName : property effectFriendlyName property effectFriendlyName[bstrEffect:WideString]:WideString read Get_effectFriendlyName; // effectPresetName : method effectPresetName property effectPresetName[bstrEffect:WideString]:WideString read Get_effectPresetName; // captionsAvailable : method captionsAvailable property captionsAvailable:WordBool read Get_captionsAvailable; // linkAvailable : property linkAvailable property linkAvailable:Integer read Get_linkAvailable; // linkRequest : property linkRequest property linkRequest:Integer read Get_linkRequest write Set_linkRequest; // linkRequestParams : property linkRequestParams property linkRequestParams:WideString read Get_linkRequestParams write Set_linkRequestParams; // editObj : property editObj:IUnknown read Get_editObj write Set_editObj; // notificationString : property notificationString:WideString read Get_notificationString; // htmlViewBaseURL : property htmlViewBaseURL:WideString read Get_htmlViewBaseURL write Set_htmlViewBaseURL; // htmlViewFullURL : property htmlViewFullURL:WideString read Get_htmlViewFullURL write Set_htmlViewFullURL; // htmlViewSecureLock : property htmlViewSecureLock:Integer read Get_htmlViewSecureLock write Set_htmlViewSecureLock; // htmlViewBusy : property htmlViewBusy:WordBool read Get_htmlViewBusy write Set_htmlViewBusy; // htmlViewShowCert : property htmlViewShowCert:WordBool read Get_htmlViewShowCert write Set_htmlViewShowCert; // previousEnabled : property previousEnabled:WordBool read Get_previousEnabled write Set_previousEnabled; // doPreviousNow : property doPreviousNow:WordBool read Get_doPreviousNow write Set_doPreviousNow; // DPI : property DPI:Integer read Get_DPI; // lastMessage : property lastMessage:WideString read Get_lastMessage write Set_lastMessage; // inVistaPlus : property inVistaPlus:WordBool read Get_inVistaPlus; // isBidi : property isBidi:WordBool read Get_isBidi; // isOCX : property isOCX:WordBool read Get_isOCX; // hoverTransportsEnabled : property hoverTransportsEnabled:WordBool read Get_hoverTransportsEnabled; // isAudioCD : property isAudioCD:WordBool read Get_isAudioCD write Set_isAudioCD; // canRip : property canRip:WordBool read Get_canRip write Set_canRip; // isRipping : property isRipping:WordBool read Get_isRipping write Set_isRipping; // currentDrive : property currentDrive:WideString read Get_currentDrive write Set_currentDrive; // showMMO : property showMMO:WordBool read Get_showMMO write Set_showMMO; // MMOVisible : property MMOVisible:WordBool read Get_MMOVisible; // suggestionsVisible : property suggestionsVisible:WordBool read Get_suggestionsVisible; // suggestionsTextColor : property suggestionsTextColor:WideString read Get_suggestionsTextColor; // fontFace : property fontFace:WideString read Get_fontFace; // fontSize : property fontSize:Integer read Get_fontSize; // backgroundColor : property backgroundColor:WideString read Get_backgroundColor; // doubleClickTime : property doubleClickTime:Integer read Get_doubleClickTime; // playAgain : property playAgain:WordBool read Get_playAgain; // previousPlaylistAvailable : property previousPlaylistAvailable:WordBool read Get_previousPlaylistAvailable; // nextPlaylistAvailable : property nextPlaylistAvailable:WordBool read Get_nextPlaylistAvailable; // basketVisible : property basketVisible:WordBool read Get_basketVisible write Set_basketVisible; // mmoTextColor : property mmoTextColor:WideString read Get_mmoTextColor; // backgroundVisible : property backgroundVisible:WordBool read Get_backgroundVisible; // backgroundEnabled : property backgroundEnabled:WordBool read Get_backgroundEnabled write Set_backgroundEnabled; // backgroundIndex : property backgroundIndex:Integer read Get_backgroundIndex write Set_backgroundIndex; // upNext : property upNext:WideString read Get_upNext; // playbackOverlayVisible : property playbackOverlayVisible:WordBool read Get_playbackOverlayVisible; // remoted : property remoted:WordBool read Get_remoted; // glassEnabled : property glassEnabled:WordBool read Get_glassEnabled; // highContrast : property highContrast:WordBool read Get_highContrast; // testHighContrast : property testHighContrast:WideString write Set_testHighContrast; // sessionPlaylistCount : property sessionPlaylistCount:Integer read Get_sessionPlaylistCount; // metadataString : property metadataString:WideString read Get_metadataString write Set_metadataString; // albumArtAlpha : property albumArtAlpha:Integer read Get_albumArtAlpha; // playerModeAlbumArtSelected : property playerModeAlbumArtSelected:WordBool read Get_playerModeAlbumArtSelected; // inFullScreen : property inFullScreen:WordBool read Get_inFullScreen; // resourceIdForDpi : property resourceIdForDpi[iResourceId:SYSINT]:SYSINT read Get_resourceIdForDpi; end; // IWMPNowPlayingHelperDispatch : IWMPNowPlayingHelperDispatch: Not Public. Internal interface used by Windows Media Player. IWMPNowPlayingHelperDispatchDisp = dispinterface ['{504F112E-77CC-4E3C-A073-5371B31D9B36}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // resolveDisplayView : method resolveDisplayView function resolveDisplayView(fSafe:WordBool):WideString;dispid 2909; // isValidDisplayView : method isValidDisplayView function isValidDisplayView(bstrView:WideString):WordBool;dispid 2910; // getSkinFile : method getSkinFile function getSkinFile:WideString;dispid 2911; // getCurrentArtID : method getCurrentArtID function getCurrentArtID(fLargeArt:WordBool):Integer;dispid 2917; // getTimeString : method getTimeString function getTimeString(dTime:Double):WideString;dispid 2918; // getCurrentScriptCommand : method getCurrentScriptCommand function getCurrentScriptCommand(bstrType:WideString):WideString;dispid 2919; // calcLayout : method calcLayout procedure calcLayout(lWidth:Integer;lHeight:Integer;vbCaptions:WordBool;vbBanner:WordBool);dispid 2920; // getLayoutSize : method getLayoutSize function getLayoutSize(nProp:Integer):Integer;dispid 2921; // getRootPlaylist : method getRootPlaylist function getRootPlaylist(pPlaylist:IDispatch):IDispatch;dispid 2922; // getHTMLViewURL : method getHTMLViewURL function getHTMLViewURL:WideString;dispid 2923; // getStatusString : method getStatusString function getStatusString(bstrStatusId:WideString):WideString;dispid 2927; // getStatusPct : method getStatusPct function getStatusPct(bstrStatusId:WideString):Integer;dispid 2939; // getStatusResult : method getStatusResult function getStatusResult(bstrStatusId:WideString):Integer;dispid 2940; // getStatusIcon : method getStatusIcon function getStatusIcon(bstrStatusId:WideString):Integer;dispid 2941; // getStatusIdList : method getStatusIdList function getStatusIdList:WideString;dispid 2942; // clearColors : clear all user color info procedure clearColors;dispid 2937; // initRipHelper : procedure initRipHelper;dispid 2947; // startRip : procedure startRip;dispid 2952; // stopRip : procedure stopRip;dispid 2953; // nextPlaylist : procedure nextPlaylist;dispid 2961; // previousPlaylist : procedure previousPlaylist;dispid 2962; // playOffsetMedia : procedure playOffsetMedia(iOffset:Integer);dispid 2972; // setGestureStatus : procedure setGestureStatus(pObject:IDispatch;newVal:Integer);dispid 2980; // syncToAlbumArt : procedure syncToAlbumArt(pObject:IDispatch;iOffsetFromCurrentMedia:Integer;bstrFallbackImage:WideString);dispid 2985; // viewFriendlyName : property viewFriendlyName property viewFriendlyName[bstrView:WideString]:WideString readonly dispid 2901; // viewPresetCount : property viewPresetCount property viewPresetCount[bstrView:WideString]:Integer readonly dispid 2902; // viewPresetName : method viewPresetName property viewPresetName[bstrView:WideString]:WideString readonly dispid 2903; // effectFriendlyName : property effectFriendlyName property effectFriendlyName[bstrEffect:WideString]:WideString readonly dispid 2904; // effectPresetName : method effectPresetName property effectPresetName[bstrEffect:WideString]:WideString readonly dispid 2905; // captionsAvailable : method captionsAvailable property captionsAvailable:WordBool readonly dispid 2912; // linkAvailable : property linkAvailable property linkAvailable:Integer readonly dispid 2913; // linkRequest : property linkRequest property linkRequest:Integer dispid 2914; // linkRequestParams : property linkRequestParams property linkRequestParams:WideString dispid 2915; // editObj : property editObj:IUnknown dispid 2926; // notificationString : property notificationString:WideString readonly dispid 2928; // htmlViewBaseURL : property htmlViewBaseURL:WideString dispid 2930; // htmlViewFullURL : property htmlViewFullURL:WideString dispid 2933; // htmlViewSecureLock : property htmlViewSecureLock:Integer dispid 2929; // htmlViewBusy : property htmlViewBusy:WordBool dispid 2931; // htmlViewShowCert : property htmlViewShowCert:WordBool dispid 2932; // previousEnabled : property previousEnabled:WordBool dispid 2934; // doPreviousNow : property doPreviousNow:WordBool dispid 2935; // DPI : property DPI:Integer readonly dispid 2936; // lastMessage : property lastMessage:WideString dispid 2938; // inVistaPlus : property inVistaPlus:WordBool readonly dispid 2943; // isBidi : property isBidi:WordBool readonly dispid 2944; // isOCX : property isOCX:WordBool readonly dispid 2945; // hoverTransportsEnabled : property hoverTransportsEnabled:WordBool readonly dispid 2946; // isAudioCD : property isAudioCD:WordBool dispid 2948; // canRip : property canRip:WordBool dispid 2949; // isRipping : property isRipping:WordBool dispid 2950; // currentDrive : property currentDrive:WideString dispid 2951; // showMMO : property showMMO:WordBool dispid 2954; // MMOVisible : property MMOVisible:WordBool readonly dispid 2971; // suggestionsVisible : property suggestionsVisible:WordBool readonly dispid 2955; // suggestionsTextColor : property suggestionsTextColor:WideString readonly dispid 2956; // fontFace : property fontFace:WideString readonly dispid 2964; // fontSize : property fontSize:Integer readonly dispid 2965; // backgroundColor : property backgroundColor:WideString readonly dispid 2966; // doubleClickTime : property doubleClickTime:Integer readonly dispid 2957; // playAgain : property playAgain:WordBool readonly dispid 2958; // previousPlaylistAvailable : property previousPlaylistAvailable:WordBool readonly dispid 2959; // nextPlaylistAvailable : property nextPlaylistAvailable:WordBool readonly dispid 2960; // basketVisible : property basketVisible:WordBool dispid 2963; // mmoTextColor : property mmoTextColor:WideString readonly dispid 2967; // backgroundVisible : property backgroundVisible:WordBool readonly dispid 2968; // backgroundEnabled : property backgroundEnabled:WordBool dispid 2969; // backgroundIndex : property backgroundIndex:Integer dispid 2970; // upNext : property upNext:WideString readonly dispid 2973; // playbackOverlayVisible : property playbackOverlayVisible:WordBool readonly dispid 2974; // remoted : property remoted:WordBool readonly dispid 2975; // glassEnabled : property glassEnabled:WordBool readonly dispid 2976; // highContrast : property highContrast:WordBool readonly dispid 2977; // testHighContrast : property testHighContrast:WideString writeonly dispid 2978; // sessionPlaylistCount : property sessionPlaylistCount:{!! pointer !!} OleVariant readonly dispid 2979; // metadataString : property metadataString:WideString dispid 2981; // albumArtAlpha : property albumArtAlpha:Integer readonly dispid 2982; // playerModeAlbumArtSelected : property playerModeAlbumArtSelected:WordBool readonly dispid 2983; // inFullScreen : property inFullScreen:WordBool readonly dispid 2984; // resourceIdForDpi : property resourceIdForDpi[iResourceId:SYSINT]:SYSINT readonly dispid 2986; end; // IWMPNowDoingDispatch : IWMPNowDoingDispatch: Not Public. Internal interface used by Windows Media Player. IWMPNowDoingDispatch = interface(IDispatch) ['{2A2E0DA3-19FA-4F82-BE18-CD7D7A3B977F}'] // hideBasket : method hideBasket procedure hideBasket;safecall; // burnNavigateToStatus : method burnNavigateToStatus procedure burnNavigateToStatus;safecall; // syncNavigateToStatus : method syncNavigateToStatus procedure syncNavigateToStatus;safecall; function Get_DPI : Integer; safecall; function Get_mode : WideString; safecall; procedure Set_burn_selectedDrive(const pVal:Integer); safecall; function Get_burn_selectedDrive : Integer; safecall; function Get_sync_selectedDevice : Integer; safecall; procedure Set_sync_selectedDevice(const pVal:Integer); safecall; function Get_burn_numDiscsSpanned : Integer; safecall; function Get_editPlaylist : IDispatch; safecall; function Get_basketPlaylistName : WideString; safecall; function Get_isHighContrastMode : WordBool; safecall; function Get_allowRating : WordBool; safecall; function Get_burn_mediaType : WideString; safecall; function Get_burn_contentType : WideString; safecall; function Get_burn_freeSpace : Integer; safecall; function Get_burn_totalSpace : Integer; safecall; function Get_burn_driveName : WideString; safecall; function Get_burn_numDevices : Integer; safecall; function Get_burn_spaceToUse : Integer; safecall; function Get_burn_percentComplete : Integer; safecall; function Get_sync_spaceToUse : Integer; safecall; function Get_sync_spaceUsed : Integer; safecall; function Get_sync_totalSpace : Integer; safecall; function Get_sync_deviceName : WideString; safecall; function Get_sync_numDevices : Integer; safecall; function Get_sync_oemName : WideString; safecall; function Get_sync_percentComplete : Integer; safecall; // logData : method logData procedure logData(ID:WideString;data:WideString);safecall; // formatTime : method formatTime function formatTime(value:Integer):WideString;safecall; // DPI : property DPI:Integer read Get_DPI; // mode : property mode property mode:WideString read Get_mode; // burn_selectedDrive : property burn_selectedDrive property burn_selectedDrive:Integer read Get_burn_selectedDrive write Set_burn_selectedDrive; // sync_selectedDevice : property sync_selectedDevice property sync_selectedDevice:Integer read Get_sync_selectedDevice write Set_sync_selectedDevice; // burn_numDiscsSpanned : property burn_numDiscsSpanned property burn_numDiscsSpanned:Integer read Get_burn_numDiscsSpanned; // editPlaylist : method editPlaylist property editPlaylist:IDispatch read Get_editPlaylist; // basketPlaylistName : property basketPlaylistName property basketPlaylistName:WideString read Get_basketPlaylistName; // isHighContrastMode : property isHighContrastMode property isHighContrastMode:WordBool read Get_isHighContrastMode; // allowRating : property allowRating property allowRating:WordBool read Get_allowRating; // burn_mediaType : property burn_mediaType property burn_mediaType:WideString read Get_burn_mediaType; // burn_contentType : property burn_contentType property burn_contentType:WideString read Get_burn_contentType; // burn_freeSpace : property burn_freeSpace property burn_freeSpace:Integer read Get_burn_freeSpace; // burn_totalSpace : property burn_totalSpace property burn_totalSpace:Integer read Get_burn_totalSpace; // burn_driveName : property burn_driveName property burn_driveName:WideString read Get_burn_driveName; // burn_numDevices : property burn_numDevices property burn_numDevices:Integer read Get_burn_numDevices; // burn_spaceToUse : property burn_spaceToUse property burn_spaceToUse:Integer read Get_burn_spaceToUse; // burn_percentComplete : property burn_percentComplete property burn_percentComplete:Integer read Get_burn_percentComplete; // sync_spaceToUse : property sync_spaceToUse property sync_spaceToUse:Integer read Get_sync_spaceToUse; // sync_spaceUsed : property sync_spaceUsed property sync_spaceUsed:Integer read Get_sync_spaceUsed; // sync_totalSpace : property sync_totalSpace property sync_totalSpace:Integer read Get_sync_totalSpace; // sync_deviceName : property sync_deviceName property sync_deviceName:WideString read Get_sync_deviceName; // sync_numDevices : property sync_numDevices property sync_numDevices:Integer read Get_sync_numDevices; // sync_oemName : property sync_oemName property sync_oemName:WideString read Get_sync_oemName; // sync_percentComplete : property sync_percentComplete property sync_percentComplete:Integer read Get_sync_percentComplete; end; // IWMPNowDoingDispatch : IWMPNowDoingDispatch: Not Public. Internal interface used by Windows Media Player. IWMPNowDoingDispatchDisp = dispinterface ['{2A2E0DA3-19FA-4F82-BE18-CD7D7A3B977F}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // hideBasket : method hideBasket procedure hideBasket;dispid 3222; // burnNavigateToStatus : method burnNavigateToStatus procedure burnNavigateToStatus;dispid 3211; // syncNavigateToStatus : method syncNavigateToStatus procedure syncNavigateToStatus;dispid 3220; // logData : method logData procedure logData(ID:WideString;data:WideString);dispid 3224; // formatTime : method formatTime function formatTime(value:Integer):WideString;dispid 3226; // DPI : property DPI:Integer readonly dispid 3223; // mode : property mode property mode:WideString readonly dispid 3200; // burn_selectedDrive : property burn_selectedDrive property burn_selectedDrive:Integer dispid 3206; // sync_selectedDevice : property sync_selectedDevice property sync_selectedDevice:Integer dispid 3216; // burn_numDiscsSpanned : property burn_numDiscsSpanned property burn_numDiscsSpanned:Integer readonly dispid 3208; // editPlaylist : method editPlaylist property editPlaylist:IDispatch readonly dispid 3225; // basketPlaylistName : property basketPlaylistName property basketPlaylistName:WideString readonly dispid 3227; // isHighContrastMode : property isHighContrastMode property isHighContrastMode:WordBool readonly dispid 3228; // allowRating : property allowRating property allowRating:WordBool readonly dispid 3229; // burn_mediaType : property burn_mediaType property burn_mediaType:WideString readonly dispid 3201; // burn_contentType : property burn_contentType property burn_contentType:WideString readonly dispid 3202; // burn_freeSpace : property burn_freeSpace property burn_freeSpace:Integer readonly dispid 3203; // burn_totalSpace : property burn_totalSpace property burn_totalSpace:Integer readonly dispid 3204; // burn_driveName : property burn_driveName property burn_driveName:WideString readonly dispid 3205; // burn_numDevices : property burn_numDevices property burn_numDevices:Integer readonly dispid 3207; // burn_spaceToUse : property burn_spaceToUse property burn_spaceToUse:Integer readonly dispid 3209; // burn_percentComplete : property burn_percentComplete property burn_percentComplete:Integer readonly dispid 3210; // sync_spaceToUse : property sync_spaceToUse property sync_spaceToUse:Integer readonly dispid 3212; // sync_spaceUsed : property sync_spaceUsed property sync_spaceUsed:Integer readonly dispid 3213; // sync_totalSpace : property sync_totalSpace property sync_totalSpace:Integer readonly dispid 3214; // sync_deviceName : property sync_deviceName property sync_deviceName:WideString readonly dispid 3215; // sync_numDevices : property sync_numDevices property sync_numDevices:Integer readonly dispid 3217; // sync_oemName : property sync_oemName property sync_oemName:WideString readonly dispid 3218; // sync_percentComplete : property sync_percentComplete property sync_percentComplete:Integer readonly dispid 3219; end; // IWMPHoverPreviewDispatch : IWMPHoverPreviewDispatch: Not Public. Internal interface used by Windows Media Player. IWMPHoverPreviewDispatch = interface(IDispatch) ['{946B023E-044C-4473-8018-74954F09DC7E}'] function Get_title : WideString; safecall; function Get_album : WideString; safecall; function Get_URL : WideString; safecall; procedure Set_image(const Param1:IDispatch); safecall; procedure Set_autoClick(const Param1:WordBool); safecall; procedure Set_previewClick(const Param1:WordBool); safecall; // dismiss : procedure dismiss;safecall; // title : property title:WideString read Get_title; // album : property album:WideString read Get_album; // URL : property URL:WideString read Get_URL; // image : property image:IDispatch write Set_image; // autoClick : property autoClick:WordBool write Set_autoClick; // previewClick : property previewClick:WordBool write Set_previewClick; end; // IWMPHoverPreviewDispatch : IWMPHoverPreviewDispatch: Not Public. Internal interface used by Windows Media Player. IWMPHoverPreviewDispatchDisp = dispinterface ['{946B023E-044C-4473-8018-74954F09DC7E}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // dismiss : procedure dismiss;dispid 3156; // title : property title:WideString readonly dispid 3150; // album : property album:WideString readonly dispid 3151; // URL : property URL:WideString readonly dispid 3153; // image : property image:IDispatch writeonly dispid 3152; // autoClick : property autoClick:WordBool writeonly dispid 3155; // previewClick : property previewClick:WordBool writeonly dispid 3154; end; // IWMPButtonCtrlEvents : IWMPButtonCtrlEvents: Public interface for skin object model. IWMPButtonCtrlEvents = dispinterface ['{BB17FFF7-1692-4555-918A-6AF7BFACEDD2}'] // onclick : event ondragbegin function onclick:HResult;dispid 5120; end; // IWMPButtonCtrl : IWMPButtonCtrl: Public interface for skin object model. IWMPButtonCtrl = interface(IDispatch) ['{87291B50-0C8E-11D3-BB2A-00A0C93CA73A}'] function Get_image : WideString; safecall; procedure Set_image(const pVal:WideString); safecall; function Get_hoverImage : WideString; safecall; procedure Set_hoverImage(const pVal:WideString); safecall; function Get_downImage : WideString; safecall; procedure Set_downImage(const pVal:WideString); safecall; function Get_disabledImage : WideString; safecall; procedure Set_disabledImage(const pVal:WideString); safecall; function Get_hoverDownImage : WideString; safecall; procedure Set_hoverDownImage(const pVal:WideString); safecall; function Get_tiled : WordBool; safecall; procedure Set_tiled(const pVal:WordBool); safecall; function Get_transparencyColor : WideString; safecall; procedure Set_transparencyColor(const pVal:WideString); safecall; function Get_down : WordBool; safecall; procedure Set_down(const pVal:WordBool); safecall; function Get_sticky : WordBool; safecall; procedure Set_sticky(const pVal:WordBool); safecall; function Get_upToolTip : WideString; safecall; procedure Set_upToolTip(const pVal:WideString); safecall; function Get_downToolTip : WideString; safecall; procedure Set_downToolTip(const pVal:WideString); safecall; function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; // image : property image:WideString read Get_image write Set_image; // hoverImage : property hoverImage:WideString read Get_hoverImage write Set_hoverImage; // downImage : property downImage:WideString read Get_downImage write Set_downImage; // disabledImage : property disabledImage:WideString read Get_disabledImage write Set_disabledImage; // hoverDownImage : property hoverDownImage:WideString read Get_hoverDownImage write Set_hoverDownImage; // tiled : property tiled:WordBool read Get_tiled write Set_tiled; // transparencyColor : property transparencyColor:WideString read Get_transparencyColor write Set_transparencyColor; // down : property down:WordBool read Get_down write Set_down; // sticky : property sticky:WordBool read Get_sticky write Set_sticky; // upToolTip : property upToolTip:WideString read Get_upToolTip write Set_upToolTip; // downToolTip : property downToolTip:WideString read Get_downToolTip write Set_downToolTip; // cursor : property cursor:WideString read Get_cursor write Set_cursor; end; // IWMPButtonCtrl : IWMPButtonCtrl: Public interface for skin object model. IWMPButtonCtrlDisp = dispinterface ['{87291B50-0C8E-11D3-BB2A-00A0C93CA73A}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // image : property image:WideString dispid 5102; // hoverImage : property hoverImage:WideString dispid 5103; // downImage : property downImage:WideString dispid 5104; // disabledImage : property disabledImage:WideString dispid 5105; // hoverDownImage : property hoverDownImage:WideString dispid 5106; // tiled : property tiled:WordBool dispid 5107; // transparencyColor : property transparencyColor:WideString dispid 5108; // down : property down:WordBool dispid 5109; // sticky : property sticky:WordBool dispid 5110; // upToolTip : property upToolTip:WideString dispid 5112; // downToolTip : property downToolTip:WideString dispid 5113; // cursor : property cursor:WideString dispid 5114; end; // IWMPListBoxCtrl : IWMPListBoxCtrl: Public interface for skin object model. IWMPListBoxCtrl = interface(IDispatch) ['{FC1880CE-83B9-43A7-A066-C44CE8C82583}'] function Get_selectedItem : Integer; safecall; procedure Set_selectedItem(const pnPos:Integer); safecall; function Get_sorted : WordBool; safecall; procedure Set_sorted(const pVal:WordBool); safecall; function Get_multiselect : WordBool; safecall; procedure Set_multiselect(const pVal:WordBool); safecall; function Get_readOnly : WordBool; safecall; procedure Set_readOnly(const pVal:WordBool); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pVal:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_fontSize : Integer; safecall; procedure Set_fontSize(const pVal:Integer); safecall; function Get_fontStyle : WideString; safecall; procedure Set_fontStyle(const pVal:WideString); safecall; function Get_fontFace : WideString; safecall; procedure Set_fontFace(const pVal:WideString); safecall; function Get_itemCount : Integer; safecall; function Get_firstVisibleItem : Integer; safecall; procedure Set_firstVisibleItem(const pVal:Integer); safecall; procedure Set_popUp(const Param1:WordBool); safecall; function Get_focusItem : Integer; safecall; procedure Set_focusItem(const pVal:Integer); safecall; function Get_border : WordBool; safecall; procedure Set_border(const pVal:WordBool); safecall; // getItem : method getItem function getItem(nPos:Integer):WideString;safecall; // insertItem : method insertItem procedure insertItem(nPos:Integer;newVal:WideString);safecall; // appendItem : method appendItem procedure appendItem(newVal:WideString);safecall; // replaceItem : method replaceItem procedure replaceItem(nPos:Integer;newVal:WideString);safecall; // deleteItem : method deleteItem procedure deleteItem(nPos:Integer);safecall; // deleteAll : method deleteAll procedure deleteAll;safecall; // findItem : method findItem function findItem(nStartIndex:Integer;newVal:WideString):Integer;safecall; // getNextSelectedItem : method getNextSelectedItem function getNextSelectedItem(nStartIndex:Integer):Integer;safecall; // setSelectedState : method setSelectedState procedure setSelectedState(nPos:Integer;vbSelected:WordBool);safecall; // show : method show procedure show;safecall; // dismiss : method dismiss procedure dismiss;safecall; // selectedItem : property selectedItem:Integer read Get_selectedItem write Set_selectedItem; // sorted : property sorted:WordBool read Get_sorted write Set_sorted; // multiselect : property multiselect:WordBool read Get_multiselect write Set_multiselect; // readOnly : property readOnly:WordBool read Get_readOnly write Set_readOnly; // foregroundColor : property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // backgroundColor : property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // fontSize : property fontSize:Integer read Get_fontSize write Set_fontSize; // fontStyle : property fontStyle:WideString read Get_fontStyle write Set_fontStyle; // fontFace : property fontFace:WideString read Get_fontFace write Set_fontFace; // itemCount : property itemCount:Integer read Get_itemCount; // firstVisibleItem : property firstVisibleItem:Integer read Get_firstVisibleItem write Set_firstVisibleItem; // popUp : property popUp:WordBool write Set_popUp; // focusItem : property focusItem:Integer read Get_focusItem write Set_focusItem; // border : property border:WordBool read Get_border write Set_border; end; // IWMPListBoxCtrl : IWMPListBoxCtrl: Public interface for skin object model. IWMPListBoxCtrlDisp = dispinterface ['{FC1880CE-83B9-43A7-A066-C44CE8C82583}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getItem : method getItem function getItem(nPos:Integer):WideString;dispid 6111; // insertItem : method insertItem procedure insertItem(nPos:Integer;newVal:WideString);dispid 6112; // appendItem : method appendItem procedure appendItem(newVal:WideString);dispid 6113; // replaceItem : method replaceItem procedure replaceItem(nPos:Integer;newVal:WideString);dispid 6114; // deleteItem : method deleteItem procedure deleteItem(nPos:Integer);dispid 6115; // deleteAll : method deleteAll procedure deleteAll;dispid 6116; // findItem : method findItem function findItem(nStartIndex:Integer;newVal:WideString):Integer;dispid 6117; // getNextSelectedItem : method getNextSelectedItem function getNextSelectedItem(nStartIndex:Integer):Integer;dispid 6118; // setSelectedState : method setSelectedState procedure setSelectedState(nPos:Integer;vbSelected:WordBool);dispid 6122; // show : method show procedure show;dispid 6123; // dismiss : method dismiss procedure dismiss;dispid 6124; // selectedItem : property selectedItem:Integer dispid 6108; // sorted : property sorted:WordBool dispid 6100; // multiselect : property multiselect:WordBool dispid 6101; // readOnly : property readOnly:WordBool dispid 6102; // foregroundColor : property foregroundColor:WideString dispid 6103; // backgroundColor : property backgroundColor:WideString dispid 6104; // fontSize : property fontSize:Integer dispid 6105; // fontStyle : property fontStyle:WideString dispid 6106; // fontFace : property fontFace:WideString dispid 6107; // itemCount : property itemCount:Integer readonly dispid 6109; // firstVisibleItem : property firstVisibleItem:Integer dispid 6110; // popUp : property popUp:WordBool writeonly dispid 6120; // focusItem : property focusItem:Integer dispid 6121; // border : property border:WordBool dispid 6125; end; // IWMPListBoxItem : IWMPListBoxItem: Public interface for skin object model. IWMPListBoxItem = interface(IDispatch) ['{D255DFB8-C22A-42CF-B8B7-F15D7BCF65D6}'] procedure Set_value(const Param1:WideString); safecall; // value : property value property value:WideString write Set_value; end; // IWMPListBoxItem : IWMPListBoxItem: Public interface for skin object model. IWMPListBoxItemDisp = dispinterface ['{D255DFB8-C22A-42CF-B8B7-F15D7BCF65D6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // value : property value property value:WideString writeonly dispid 6119; end; // IWMPPlaylistCtrlColumn : IWMPPlaylistCtrlColumn: Public interface for skin object model. IWMPPlaylistCtrlColumn = interface(IDispatch) ['{63D9D30F-AE4C-4678-8CA8-5720F4FE4419}'] function Get_columnName : WideString; safecall; procedure Set_columnName(const pVal:WideString); safecall; function Get_columnID : WideString; safecall; procedure Set_columnID(const pVal:WideString); safecall; function Get_columnResizeMode : WideString; safecall; procedure Set_columnResizeMode(const pVal:WideString); safecall; function Get_columnWidth : Integer; safecall; procedure Set_columnWidth(const pVal:Integer); safecall; // columnName : property columnName property columnName:WideString read Get_columnName write Set_columnName; // columnID : property columnID property columnID:WideString read Get_columnID write Set_columnID; // columnResizeMode : property columnResizeMode property columnResizeMode:WideString read Get_columnResizeMode write Set_columnResizeMode; // columnWidth : property columnWidth property columnWidth:Integer read Get_columnWidth write Set_columnWidth; end; // IWMPPlaylistCtrlColumn : IWMPPlaylistCtrlColumn: Public interface for skin object model. IWMPPlaylistCtrlColumnDisp = dispinterface ['{63D9D30F-AE4C-4678-8CA8-5720F4FE4419}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // columnName : property columnName property columnName:WideString dispid 5670; // columnID : property columnID property columnID:WideString dispid 5671; // columnResizeMode : property columnResizeMode property columnResizeMode:WideString dispid 5672; // columnWidth : property columnWidth property columnWidth:Integer dispid 5673; end; // IWMPSliderCtrlEvents : IWMPSliderCtrlEvents: Public interface for skin object model. IWMPSliderCtrlEvents = dispinterface ['{CDAC14D2-8BE4-11D3-BB48-00A0C93CA73A}'] // ondragbegin : event ondragbegin function ondragbegin:HResult;dispid 5430; // ondragend : event ondragend function ondragend:HResult;dispid 5431; // onpositionchange : event onpositionchange function onpositionchange:HResult;dispid 5432; end; // IWMPSliderCtrl : IWMPSliderCtrl: Public interface for skin object model. IWMPSliderCtrl = interface(IDispatch) ['{F2BF2C8F-405F-11D3-BB39-00A0C93CA73A}'] function Get_direction : WideString; safecall; procedure Set_direction(const pVal:WideString); safecall; function Get_slide : WordBool; safecall; procedure Set_slide(const pVal:WordBool); safecall; function Get_tiled : WordBool; safecall; procedure Set_tiled(const pVal:WordBool); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pVal:WideString); safecall; function Get_foregroundEndColor : WideString; safecall; procedure Set_foregroundEndColor(const pVal:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_backgroundEndColor : WideString; safecall; procedure Set_backgroundEndColor(const pVal:WideString); safecall; function Get_disabledColor : WideString; safecall; procedure Set_disabledColor(const pVal:WideString); safecall; function Get_transparencyColor : WideString; safecall; procedure Set_transparencyColor(const pVal:WideString); safecall; function Get_foregroundImage : WideString; safecall; procedure Set_foregroundImage(const pVal:WideString); safecall; function Get_backgroundImage : WideString; safecall; procedure Set_backgroundImage(const pVal:WideString); safecall; function Get_backgroundHoverImage : WideString; safecall; procedure Set_backgroundHoverImage(const pVal:WideString); safecall; function Get_disabledImage : WideString; safecall; procedure Set_disabledImage(const pVal:WideString); safecall; function Get_thumbImage : WideString; safecall; procedure Set_thumbImage(const pVal:WideString); safecall; function Get_thumbHoverImage : WideString; safecall; procedure Set_thumbHoverImage(const pVal:WideString); safecall; function Get_thumbDownImage : WideString; safecall; procedure Set_thumbDownImage(const pVal:WideString); safecall; function Get_thumbDisabledImage : WideString; safecall; procedure Set_thumbDisabledImage(const pVal:WideString); safecall; function Get_min : Single; safecall; procedure Set_min(const pVal:Single); safecall; function Get_max : Single; safecall; procedure Set_max(const pVal:Single); safecall; function Get_value : Single; safecall; procedure Set_value(const pVal:Single); safecall; function Get_toolTip : WideString; safecall; procedure Set_toolTip(const pVal:WideString); safecall; function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; function Get_borderSize : SYSINT; safecall; procedure Set_borderSize(const pVal:SYSINT); safecall; function Get_foregroundHoverImage : WideString; safecall; procedure Set_foregroundHoverImage(const pVal:WideString); safecall; function Get_foregroundProgress : Single; safecall; procedure Set_foregroundProgress(const pVal:Single); safecall; function Get_useForegroundProgress : WordBool; safecall; procedure Set_useForegroundProgress(const pVal:WordBool); safecall; // direction : property direction property direction:WideString read Get_direction write Set_direction; // slide : property slide property slide:WordBool read Get_slide write Set_slide; // tiled : property tiled property tiled:WordBool read Get_tiled write Set_tiled; // foregroundColor : property foregroundColor property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // foregroundEndColor : property foregroundEndColor property foregroundEndColor:WideString read Get_foregroundEndColor write Set_foregroundEndColor; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // backgroundEndColor : property backgroundEndColor property backgroundEndColor:WideString read Get_backgroundEndColor write Set_backgroundEndColor; // disabledColor : property disabledColor property disabledColor:WideString read Get_disabledColor write Set_disabledColor; // transparencyColor : property transparencyColor property transparencyColor:WideString read Get_transparencyColor write Set_transparencyColor; // foregroundImage : property foregroundImage property foregroundImage:WideString read Get_foregroundImage write Set_foregroundImage; // backgroundImage : property backgroundImage property backgroundImage:WideString read Get_backgroundImage write Set_backgroundImage; // backgroundHoverImage : property backgroundHoverImage property backgroundHoverImage:WideString read Get_backgroundHoverImage write Set_backgroundHoverImage; // disabledImage : property disabledImage property disabledImage:WideString read Get_disabledImage write Set_disabledImage; // thumbImage : property thumbImage property thumbImage:WideString read Get_thumbImage write Set_thumbImage; // thumbHoverImage : property thumbHoverImage property thumbHoverImage:WideString read Get_thumbHoverImage write Set_thumbHoverImage; // thumbDownImage : property thumbDownImage property thumbDownImage:WideString read Get_thumbDownImage write Set_thumbDownImage; // thumbDisabledImage : property thumbDisabledImage property thumbDisabledImage:WideString read Get_thumbDisabledImage write Set_thumbDisabledImage; // min : property min property min:Single read Get_min write Set_min; // max : property max property max:Single read Get_max write Set_max; // value : property value property value:Single read Get_value write Set_value; // toolTip : property toolTip property toolTip:WideString read Get_toolTip write Set_toolTip; // cursor : property cursor property cursor:WideString read Get_cursor write Set_cursor; // borderSize : property borderSize property borderSize:SYSINT read Get_borderSize write Set_borderSize; // foregroundHoverImage : property foregroundHoverImage property foregroundHoverImage:WideString read Get_foregroundHoverImage write Set_foregroundHoverImage; // foregroundProgress : property foregroundValue property foregroundProgress:Single read Get_foregroundProgress write Set_foregroundProgress; // useForegroundProgress : property useForegroundValue property useForegroundProgress:WordBool read Get_useForegroundProgress write Set_useForegroundProgress; end; // IWMPSliderCtrl : IWMPSliderCtrl: Public interface for skin object model. IWMPSliderCtrlDisp = dispinterface ['{F2BF2C8F-405F-11D3-BB39-00A0C93CA73A}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // direction : property direction property direction:WideString dispid 5400; // slide : property slide property slide:WordBool dispid 5402; // tiled : property tiled property tiled:WordBool dispid 5403; // foregroundColor : property foregroundColor property foregroundColor:WideString dispid 5404; // foregroundEndColor : property foregroundEndColor property foregroundEndColor:WideString dispid 5405; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 5406; // backgroundEndColor : property backgroundEndColor property backgroundEndColor:WideString dispid 5407; // disabledColor : property disabledColor property disabledColor:WideString dispid 5408; // transparencyColor : property transparencyColor property transparencyColor:WideString dispid 5409; // foregroundImage : property foregroundImage property foregroundImage:WideString dispid 5410; // backgroundImage : property backgroundImage property backgroundImage:WideString dispid 5411; // backgroundHoverImage : property backgroundHoverImage property backgroundHoverImage:WideString dispid 5412; // disabledImage : property disabledImage property disabledImage:WideString dispid 5413; // thumbImage : property thumbImage property thumbImage:WideString dispid 5414; // thumbHoverImage : property thumbHoverImage property thumbHoverImage:WideString dispid 5415; // thumbDownImage : property thumbDownImage property thumbDownImage:WideString dispid 5416; // thumbDisabledImage : property thumbDisabledImage property thumbDisabledImage:WideString dispid 5417; // min : property min property min:Single dispid 5418; // max : property max property max:Single dispid 5419; // value : property value property value:Single dispid 5420; // toolTip : property toolTip property toolTip:WideString dispid 5421; // cursor : property cursor property cursor:WideString dispid 5422; // borderSize : property borderSize property borderSize:SYSINT dispid 5423; // foregroundHoverImage : property foregroundHoverImage property foregroundHoverImage:WideString dispid 5424; // foregroundProgress : property foregroundValue property foregroundProgress:Single dispid 5425; // useForegroundProgress : property useForegroundValue property useForegroundProgress:WordBool dispid 5426; end; // IWMPVideoCtrlEvents : IWMPVideoCtrlEvents: Public interface for skin object model. IWMPVideoCtrlEvents = dispinterface ['{A85C0477-714C-4A06-B9F6-7C8CA38B45DC}'] // onvideostart : event onvideostart function onvideostart:HResult;dispid 5720; // onvideoend : event onvideostart function onvideoend:HResult;dispid 5721; end; // IWMPVideoCtrl : IWMPVideoCtrl: Public interface for skin object model. IWMPVideoCtrl = interface(IDispatch) ['{61CECF10-FC3A-11D2-A1CD-005004602752}'] procedure Set_windowless(const pbClipped:WordBool); safecall; function Get_windowless : WordBool; safecall; procedure Set_cursor(const pbstrCursor:WideString); safecall; function Get_cursor : WideString; safecall; procedure Set_backgroundColor(const pbstrColor:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_maintainAspectRatio(const pbMaintainAspectRatio:WordBool); safecall; function Get_maintainAspectRatio : WordBool; safecall; procedure Set_toolTip(const bstrToolTip:WideString); safecall; function Get_toolTip : WideString; safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; procedure Set_shrinkToFit(const pbShrinkToFit:WordBool); safecall; function Get_shrinkToFit : WordBool; safecall; procedure Set_stretchToFit(const pbStretchToFit:WordBool); safecall; function Get_stretchToFit : WordBool; safecall; procedure Set_zoom(const pzoom:Integer); safecall; function Get_zoom : Integer; safecall; // windowless : property windowless:WordBool read Get_windowless write Set_windowless; // cursor : property cursor:WideString read Get_cursor write Set_cursor; // backgroundColor : property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // maintainAspectRatio : property maintainAspectRatio:WordBool read Get_maintainAspectRatio write Set_maintainAspectRatio; // toolTip : property toolTip:WideString read Get_toolTip write Set_toolTip; // fullScreen : property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // shrinkToFit : property shrinkToFit:WordBool read Get_shrinkToFit write Set_shrinkToFit; // stretchToFit : property stretchToFit:WordBool read Get_stretchToFit write Set_stretchToFit; // zoom : property zoom:Integer read Get_zoom write Set_zoom; end; // IWMPVideoCtrl : IWMPVideoCtrl: Public interface for skin object model. IWMPVideoCtrlDisp = dispinterface ['{61CECF10-FC3A-11D2-A1CD-005004602752}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // windowless : property windowless:WordBool dispid 5700; // cursor : property cursor:WideString dispid 5701; // backgroundColor : property backgroundColor:WideString dispid 5702; // maintainAspectRatio : property maintainAspectRatio:WordBool dispid 5704; // toolTip : property toolTip:WideString dispid 5706; // fullScreen : property fullScreen:WordBool dispid 5707; // shrinkToFit : property shrinkToFit:WordBool dispid 5703; // stretchToFit : property stretchToFit:WordBool dispid 5708; // zoom : property zoom:Integer dispid 5709; end; // IWMPEffectsCtrl : IWMPEffectsCtrl: Public interface for skin object model. IWMPEffectsCtrl = interface(IDispatch) ['{A9EFAB80-0A60-4C3F-BBD1-4558DD2A9769}'] function Get_windowed : WordBool; safecall; procedure Set_windowed(const pVal:WordBool); safecall; function Get_allowAll : WordBool; safecall; procedure Set_allowAll(const pVal:WordBool); safecall; procedure Set_currentEffectType(const pVal:WideString); safecall; function Get_currentEffectType : WideString; safecall; function Get_currentEffectTitle : WideString; safecall; // next : method next procedure next;safecall; // previous : method previous procedure previous;safecall; // settings : method settings procedure settings;safecall; function Get_currentEffect : IDispatch; safecall; procedure Set_currentEffect(const p:IDispatch); safecall; // nextEffect : method nextEffect procedure nextEffect;safecall; // previousEffect : method previousEffect procedure previousEffect;safecall; // nextPreset : method nextPreset procedure nextPreset;safecall; // previousPreset : method previousPreset procedure previousPreset;safecall; function Get_currentPreset : Integer; safecall; procedure Set_currentPreset(const pVal:Integer); safecall; function Get_currentPresetTitle : WideString; safecall; function Get_currentEffectPresetCount : Integer; safecall; function Get_fullScreen : WordBool; safecall; procedure Set_fullScreen(const pbFullScreen:WordBool); safecall; function Get_effectCanGoFullScreen : WordBool; safecall; function Get_effectHasPropertyPage : WordBool; safecall; function Get_effectCount : Integer; safecall; function Get_effectTitle(index:Integer) : WideString; safecall; function Get_effectType(index:Integer) : WideString; safecall; // windowed : property windowed property windowed:WordBool read Get_windowed write Set_windowed; // allowAll : property allowAll property allowAll:WordBool read Get_allowAll write Set_allowAll; // currentEffectType : property currentEffectType property currentEffectType:WideString read Get_currentEffectType write Set_currentEffectType; // currentEffectTitle : property currentEffectTitle property currentEffectTitle:WideString read Get_currentEffectTitle; // currentEffect : property currentEffect property currentEffect:IDispatch read Get_currentEffect write Set_currentEffect; // currentPreset : property currentPreset property currentPreset:Integer read Get_currentPreset write Set_currentPreset; // currentPresetTitle : property currentPresetTitle property currentPresetTitle:WideString read Get_currentPresetTitle; // currentEffectPresetCount : property currentEffectPresetCount property currentEffectPresetCount:Integer read Get_currentEffectPresetCount; // fullScreen : property fullScreen property fullScreen:WordBool read Get_fullScreen write Set_fullScreen; // effectCanGoFullScreen : property canGoFullScreen property effectCanGoFullScreen:WordBool read Get_effectCanGoFullScreen; // effectHasPropertyPage : property canGoFullScreen property effectHasPropertyPage:WordBool read Get_effectHasPropertyPage; // effectCount : property effectCount property effectCount:Integer read Get_effectCount; // effectTitle : property effectTitle(index) property effectTitle[index:Integer]:WideString read Get_effectTitle; // effectType : property effectType(index) property effectType[index:Integer]:WideString read Get_effectType; end; // IWMPEffectsCtrl : IWMPEffectsCtrl: Public interface for skin object model. IWMPEffectsCtrlDisp = dispinterface ['{A9EFAB80-0A60-4C3F-BBD1-4558DD2A9769}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // next : method next procedure next;dispid 5502; // previous : method previous procedure previous;dispid 5503; // settings : method settings procedure settings;dispid 5504; // nextEffect : method nextEffect procedure nextEffect;dispid 5509; // previousEffect : method previousEffect procedure previousEffect;dispid 5510; // nextPreset : method nextPreset procedure nextPreset;dispid 5511; // previousPreset : method previousPreset procedure previousPreset;dispid 5512; // windowed : property windowed property windowed:WordBool dispid 5500; // allowAll : property allowAll property allowAll:WordBool dispid 5501; // currentEffectType : property currentEffectType property currentEffectType:WideString dispid 5507; // currentEffectTitle : property currentEffectTitle property currentEffectTitle:WideString readonly dispid 5506; // currentEffect : property currentEffect property currentEffect:IDispatch dispid 5505; // currentPreset : property currentPreset property currentPreset:Integer dispid 5513; // currentPresetTitle : property currentPresetTitle property currentPresetTitle:WideString readonly dispid 5514; // currentEffectPresetCount : property currentEffectPresetCount property currentEffectPresetCount:Integer readonly dispid 5515; // fullScreen : property fullScreen property fullScreen:WordBool dispid 5516; // effectCanGoFullScreen : property canGoFullScreen property effectCanGoFullScreen:WordBool readonly dispid 5517; // effectHasPropertyPage : property canGoFullScreen property effectHasPropertyPage:WordBool readonly dispid 5518; // effectCount : property effectCount property effectCount:Integer readonly dispid 5520; // effectTitle : property effectTitle(index) property effectTitle[index:Integer]:WideString readonly dispid 5521; // effectType : property effectType(index) property effectType[index:Integer]:WideString readonly dispid 5522; end; // IWMPEqualizerSettingsCtrl : IWMPEqualizerSettingsCtrl: Public interface for skin object model. IWMPEqualizerSettingsCtrl = interface(IDispatch) ['{2BD3716F-A914-49FB-8655-996D5F495498}'] function Get_bypass : WordBool; safecall; procedure Set_bypass(const pVal:WordBool); safecall; function Get_gainLevel1 : Single; safecall; procedure Set_gainLevel1(const pflLevel:Single); safecall; function Get_gainLevel2 : Single; safecall; procedure Set_gainLevel2(const pflLevel:Single); safecall; function Get_gainLevel3 : Single; safecall; procedure Set_gainLevel3(const pflLevel:Single); safecall; function Get_gainLevel4 : Single; safecall; procedure Set_gainLevel4(const pflLevel:Single); safecall; function Get_gainLevel5 : Single; safecall; procedure Set_gainLevel5(const pflLevel:Single); safecall; function Get_gainLevel6 : Single; safecall; procedure Set_gainLevel6(const pflLevel:Single); safecall; function Get_gainLevel7 : Single; safecall; procedure Set_gainLevel7(const pflLevel:Single); safecall; function Get_gainLevel8 : Single; safecall; procedure Set_gainLevel8(const pflLevel:Single); safecall; function Get_gainLevel9 : Single; safecall; procedure Set_gainLevel9(const pflLevel:Single); safecall; function Get_gainLevel10 : Single; safecall; procedure Set_gainLevel10(const pflLevel:Single); safecall; function Get_gainLevels(iIndex:Integer) : Single; safecall; procedure Set_gainLevels(const iIndex:Integer; const pargainLevels:Single); safecall; // reset_ : method reset procedure reset_;safecall; function Get_bands : Integer; safecall; // nextPreset : method nextPreset procedure nextPreset;safecall; // previousPreset : method previousPreset procedure previousPreset;safecall; function Get_currentPreset : Integer; safecall; procedure Set_currentPreset(const pVal:Integer); safecall; function Get_currentPresetTitle : WideString; safecall; function Get_presetCount : Integer; safecall; function Get_enhancedAudio : WordBool; safecall; procedure Set_enhancedAudio(const pfVal:WordBool); safecall; function Get_speakerSize : Integer; safecall; procedure Set_speakerSize(const plVal:Integer); safecall; function Get_currentSpeakerName : WideString; safecall; function Get_truBassLevel : Integer; safecall; procedure Set_truBassLevel(const plTruBassLevel:Integer); safecall; function Get_wowLevel : Integer; safecall; procedure Set_wowLevel(const plWowLevel:Integer); safecall; function Get_splineTension : Single; safecall; procedure Set_splineTension(const pflSplineTension:Single); safecall; function Get_enableSplineTension : WordBool; safecall; procedure Set_enableSplineTension(const pfEnableSplineTension:WordBool); safecall; function Get_presetTitle(iIndex:Integer) : WideString; safecall; function Get_normalization : WordBool; safecall; procedure Set_normalization(const pfVal:WordBool); safecall; function Get_normalizationAverage : Single; safecall; function Get_normalizationPeak : Single; safecall; function Get_crossFade : WordBool; safecall; procedure Set_crossFade(const pfVal:WordBool); safecall; function Get_crossFadeWindow : Integer; safecall; procedure Set_crossFadeWindow(const plWindow:Integer); safecall; // bypass : property bypass property bypass:WordBool read Get_bypass write Set_bypass; // gainLevel1 : property gainLevel1 property gainLevel1:Single read Get_gainLevel1 write Set_gainLevel1; // gainLevel2 : property gainLevel2 property gainLevel2:Single read Get_gainLevel2 write Set_gainLevel2; // gainLevel3 : property gainLevel3 property gainLevel3:Single read Get_gainLevel3 write Set_gainLevel3; // gainLevel4 : property gainLevel4 property gainLevel4:Single read Get_gainLevel4 write Set_gainLevel4; // gainLevel5 : property gainLevel5 property gainLevel5:Single read Get_gainLevel5 write Set_gainLevel5; // gainLevel6 : property gainLevel6 property gainLevel6:Single read Get_gainLevel6 write Set_gainLevel6; // gainLevel7 : property gainLevel7 property gainLevel7:Single read Get_gainLevel7 write Set_gainLevel7; // gainLevel8 : property gainLevel8 property gainLevel8:Single read Get_gainLevel8 write Set_gainLevel8; // gainLevel9 : property gainLevel9 property gainLevel9:Single read Get_gainLevel9 write Set_gainLevel9; // gainLevel10 : property gainLevel10 property gainLevel10:Single read Get_gainLevel10 write Set_gainLevel10; // gainLevels : property gainLevels property gainLevels[iIndex:Integer]:Single read Get_gainLevels write Set_gainLevels; // bands : property bands:Integer read Get_bands; // currentPreset : property currentPreset property currentPreset:Integer read Get_currentPreset write Set_currentPreset; // currentPresetTitle : property currentPresetTitle property currentPresetTitle:WideString read Get_currentPresetTitle; // presetCount : property presetCount property presetCount:Integer read Get_presetCount; // enhancedAudio : property enhancedAudio property enhancedAudio:WordBool read Get_enhancedAudio write Set_enhancedAudio; // speakerSize : property speakerSize property speakerSize:Integer read Get_speakerSize write Set_speakerSize; // currentSpeakerName : property currentSpeakerName property currentSpeakerName:WideString read Get_currentSpeakerName; // truBassLevel : property truBassLevel property truBassLevel:Integer read Get_truBassLevel write Set_truBassLevel; // wowLevel : property wowLevel property wowLevel:Integer read Get_wowLevel write Set_wowLevel; // splineTension : property splineTension property splineTension:Single read Get_splineTension write Set_splineTension; // enableSplineTension : property enableSplineTension property enableSplineTension:WordBool read Get_enableSplineTension write Set_enableSplineTension; // presetTitle : property presetTitle property presetTitle[iIndex:Integer]:WideString read Get_presetTitle; // normalization : property normalization property normalization:WordBool read Get_normalization write Set_normalization; // normalizationAverage : property normalizationAverage property normalizationAverage:Single read Get_normalizationAverage; // normalizationPeak : property normalizationPeak property normalizationPeak:Single read Get_normalizationPeak; // crossFade : property crossFade property crossFade:WordBool read Get_crossFade write Set_crossFade; // crossFadeWindow : property crossFadeWindow property crossFadeWindow:Integer read Get_crossFadeWindow write Set_crossFadeWindow; end; // IWMPEqualizerSettingsCtrl : IWMPEqualizerSettingsCtrl: Public interface for skin object model. IWMPEqualizerSettingsCtrlDisp = dispinterface ['{2BD3716F-A914-49FB-8655-996D5F495498}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // reset_ : method reset procedure reset_;dispid 5814; // nextPreset : method nextPreset procedure nextPreset;dispid 5816; // previousPreset : method previousPreset procedure previousPreset;dispid 5817; // bypass : property bypass property bypass:WordBool dispid 5800; // gainLevel1 : property gainLevel1 property gainLevel1:Single dispid 5804; // gainLevel2 : property gainLevel2 property gainLevel2:Single dispid 5805; // gainLevel3 : property gainLevel3 property gainLevel3:Single dispid 5806; // gainLevel4 : property gainLevel4 property gainLevel4:Single dispid 5807; // gainLevel5 : property gainLevel5 property gainLevel5:Single dispid 5808; // gainLevel6 : property gainLevel6 property gainLevel6:Single dispid 5809; // gainLevel7 : property gainLevel7 property gainLevel7:Single dispid 5810; // gainLevel8 : property gainLevel8 property gainLevel8:Single dispid 5811; // gainLevel9 : property gainLevel9 property gainLevel9:Single dispid 5812; // gainLevel10 : property gainLevel10 property gainLevel10:Single dispid 5813; // gainLevels : property gainLevels property gainLevels[iIndex:Integer]:Single dispid 5815; // bands : property bands:Integer readonly dispid 5801; // currentPreset : property currentPreset property currentPreset:Integer dispid 5818; // currentPresetTitle : property currentPresetTitle property currentPresetTitle:WideString readonly dispid 5819; // presetCount : property presetCount property presetCount:Integer readonly dispid 5820; // enhancedAudio : property enhancedAudio property enhancedAudio:WordBool dispid 5821; // speakerSize : property speakerSize property speakerSize:Integer dispid 5822; // currentSpeakerName : property currentSpeakerName property currentSpeakerName:WideString readonly dispid 5823; // truBassLevel : property truBassLevel property truBassLevel:Integer dispid 5824; // wowLevel : property wowLevel property wowLevel:Integer dispid 5825; // splineTension : property splineTension property splineTension:Single dispid 5827; // enableSplineTension : property enableSplineTension property enableSplineTension:WordBool dispid 5826; // presetTitle : property presetTitle property presetTitle[iIndex:Integer]:WideString readonly dispid 5828; // normalization : property normalization property normalization:WordBool dispid 5829; // normalizationAverage : property normalizationAverage property normalizationAverage:Single readonly dispid 5830; // normalizationPeak : property normalizationPeak property normalizationPeak:Single readonly dispid 5831; // crossFade : property crossFade property crossFade:WordBool dispid 5832; // crossFadeWindow : property crossFadeWindow property crossFadeWindow:Integer dispid 5833; end; // IWMPVideoSettingsCtrl : IWMPVideoSettingsCtrl: Public interface for skin object model. IWMPVideoSettingsCtrl = interface(IDispatch) ['{07EC23DA-EF73-4BDE-A40F-F269E0B7AFD6}'] function Get_brightness : Integer; safecall; procedure Set_brightness(const pVal:Integer); safecall; function Get_contrast : Integer; safecall; procedure Set_contrast(const pVal:Integer); safecall; function Get_hue : Integer; safecall; procedure Set_hue(const pVal:Integer); safecall; function Get_saturation : Integer; safecall; procedure Set_saturation(const pVal:Integer); safecall; // reset_ : method reset procedure reset_;safecall; // brightness : property brightness property brightness:Integer read Get_brightness write Set_brightness; // contrast : property contrast property contrast:Integer read Get_contrast write Set_contrast; // hue : property hue property hue:Integer read Get_hue write Set_hue; // saturation : property saturation property saturation:Integer read Get_saturation write Set_saturation; end; // IWMPVideoSettingsCtrl : IWMPVideoSettingsCtrl: Public interface for skin object model. IWMPVideoSettingsCtrlDisp = dispinterface ['{07EC23DA-EF73-4BDE-A40F-F269E0B7AFD6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // reset_ : method reset procedure reset_;dispid 5904; // brightness : property brightness property brightness:Integer dispid 5900; // contrast : property contrast property contrast:Integer dispid 5901; // hue : property hue property hue:Integer dispid 5902; // saturation : property saturation property saturation:Integer dispid 5903; end; // IWMPLibraryTreeCtrl : IWMPLibraryTreeCtrl: Not Public. Internal interface used by Windows Media Player. IWMPLibraryTreeCtrl = interface(IDispatch) ['{B738FCAE-F089-45DF-AED6-034B9E7DB632}'] function Get_dropDownVisible : WordBool; safecall; procedure Set_dropDownVisible(const pVal:WordBool); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pVal:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_fontSize : Integer; safecall; procedure Set_fontSize(const pVal:Integer); safecall; function Get_fontStyle : WideString; safecall; procedure Set_fontStyle(const pVal:WideString); safecall; function Get_fontFace : WideString; safecall; procedure Set_fontFace(const pVal:WideString); safecall; function Get_filter : WideString; safecall; procedure Set_filter(const pVal:WideString); safecall; function Get_expandState : WideString; safecall; procedure Set_expandState(const pVal:WideString); safecall; function Get_Playlist : IWMPPlaylist; safecall; procedure Set_Playlist(const ppPlaylist:IWMPPlaylist); safecall; function Get_selectedPlaylist : IWMPPlaylist; safecall; function Get_selectedMedia : IWMPMedia; safecall; // dropDownVisible : property dropDownVisible property dropDownVisible:WordBool read Get_dropDownVisible write Set_dropDownVisible; // foregroundColor : property foregroundColor property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // fontSize : property fontSize property fontSize:Integer read Get_fontSize write Set_fontSize; // fontStyle : property fontStyle property fontStyle:WideString read Get_fontStyle write Set_fontStyle; // fontFace : property fontFace property fontFace:WideString read Get_fontFace write Set_fontFace; // filter : property filter property filter:WideString read Get_filter write Set_filter; // expandState : property expandState property expandState:WideString read Get_expandState write Set_expandState; // Playlist : property playlist property Playlist:IWMPPlaylist read Get_Playlist write Set_Playlist; // selectedPlaylist : property selectedPlaylist property selectedPlaylist:IWMPPlaylist read Get_selectedPlaylist; // selectedMedia : property selectedMedia property selectedMedia:IWMPMedia read Get_selectedMedia; end; // IWMPLibraryTreeCtrl : IWMPLibraryTreeCtrl: Not Public. Internal interface used by Windows Media Player. IWMPLibraryTreeCtrlDisp = dispinterface ['{B738FCAE-F089-45DF-AED6-034B9E7DB632}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // dropDownVisible : property dropDownVisible property dropDownVisible:WordBool dispid 6401; // foregroundColor : property foregroundColor property foregroundColor:WideString dispid 6402; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 6403; // fontSize : property fontSize property fontSize:Integer dispid 6404; // fontStyle : property fontStyle property fontStyle:WideString dispid 6405; // fontFace : property fontFace property fontFace:WideString dispid 6406; // filter : property filter property filter:WideString dispid 6407; // expandState : property expandState property expandState:WideString dispid 6408; // Playlist : property playlist property Playlist:IWMPPlaylist dispid 6409; // selectedPlaylist : property selectedPlaylist property selectedPlaylist:IWMPPlaylist readonly dispid 6410; // selectedMedia : property selectedMedia property selectedMedia:IWMPMedia readonly dispid 6411; end; // IWMPEditCtrl : IWMPEditCtrl: Public interface for skin object model. IWMPEditCtrl = interface(IDispatch) ['{70E1217C-C617-4CFD-BD8A-69CA2043E70B}'] function Get_value : WideString; safecall; procedure Set_value(const pVal:WideString); safecall; function Get_border : WordBool; safecall; procedure Set_border(const pVal:WordBool); safecall; function Get_justification : WideString; safecall; procedure Set_justification(const pVal:WideString); safecall; function Get_editStyle : WideString; safecall; procedure Set_editStyle(const pVal:WideString); safecall; function Get_wordWrap : WordBool; safecall; procedure Set_wordWrap(const pVal:WordBool); safecall; function Get_readOnly : WordBool; safecall; procedure Set_readOnly(const pVal:WordBool); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pVal:WideString); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_fontSize : Integer; safecall; procedure Set_fontSize(const pVal:Integer); safecall; function Get_fontStyle : WideString; safecall; procedure Set_fontStyle(const pVal:WideString); safecall; function Get_fontFace : WideString; safecall; procedure Set_fontFace(const pVal:WideString); safecall; function Get_textLimit : Integer; safecall; procedure Set_textLimit(const pVal:Integer); safecall; function Get_lineCount : Integer; safecall; // getLine : method getLine function getLine(nIndex:Integer):WideString;safecall; // getSelectionStart : method getSelectionStart function getSelectionStart:Integer;safecall; // getSelectionEnd : method getSelectionEnd function getSelectionEnd:Integer;safecall; // setSelection : method setSelection procedure setSelection(nStart:Integer;nEnd:Integer);safecall; // replaceSelection : method replaceSelection procedure replaceSelection(newVal:WideString);safecall; // getLineIndex : method getLineIndex function getLineIndex(nIndex:Integer):Integer;safecall; // getLineFromChar : method getLineFromChar function getLineFromChar(nPosition:Integer):Integer;safecall; // value : property value property value:WideString read Get_value write Set_value; // border : property border property border:WordBool read Get_border write Set_border; // justification : property justification property justification:WideString read Get_justification write Set_justification; // editStyle : property editStyle property editStyle:WideString read Get_editStyle write Set_editStyle; // wordWrap : property wordWrap property wordWrap:WordBool read Get_wordWrap write Set_wordWrap; // readOnly : property readOnly property readOnly:WordBool read Get_readOnly write Set_readOnly; // foregroundColor : property foregroundColor property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // fontSize : property fontSize property fontSize:Integer read Get_fontSize write Set_fontSize; // fontStyle : property fontStyle property fontStyle:WideString read Get_fontStyle write Set_fontStyle; // fontFace : property fontFace property fontFace:WideString read Get_fontFace write Set_fontFace; // textLimit : property textLimit property textLimit:Integer read Get_textLimit write Set_textLimit; // lineCount : property lineCount property lineCount:Integer read Get_lineCount; end; // IWMPEditCtrl : IWMPEditCtrl: Public interface for skin object model. IWMPEditCtrlDisp = dispinterface ['{70E1217C-C617-4CFD-BD8A-69CA2043E70B}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getLine : method getLine function getLine(nIndex:Integer):WideString;dispid 6012; // getSelectionStart : method getSelectionStart function getSelectionStart:Integer;dispid 6013; // getSelectionEnd : method getSelectionEnd function getSelectionEnd:Integer;dispid 6014; // setSelection : method setSelection procedure setSelection(nStart:Integer;nEnd:Integer);dispid 6015; // replaceSelection : method replaceSelection procedure replaceSelection(newVal:WideString);dispid 6016; // getLineIndex : method getLineIndex function getLineIndex(nIndex:Integer):Integer;dispid 6017; // getLineFromChar : method getLineFromChar function getLineFromChar(nPosition:Integer):Integer;dispid 6018; // value : property value property value:WideString dispid 0; // border : property border property border:WordBool dispid 6000; // justification : property justification property justification:WideString dispid 6001; // editStyle : property editStyle property editStyle:WideString dispid 6002; // wordWrap : property wordWrap property wordWrap:WordBool dispid 6003; // readOnly : property readOnly property readOnly:WordBool dispid 6004; // foregroundColor : property foregroundColor property foregroundColor:WideString dispid 6005; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 6006; // fontSize : property fontSize property fontSize:Integer dispid 6007; // fontStyle : property fontStyle property fontStyle:WideString dispid 6008; // fontFace : property fontFace property fontFace:WideString dispid 6009; // textLimit : property textLimit property textLimit:Integer dispid 6010; // lineCount : property lineCount property lineCount:Integer readonly dispid 6011; end; // IWMPSkinList : IWMPSkinlist: interface for skin object model. IWMPSkinList = interface(IDispatch) ['{8CEA03A2-D0C5-4E97-9C38-A676A639A51D}'] // updateBasketColumns : property basketVisible procedure updateBasketColumns;safecall; // highContrastChange : property highContrastChange procedure highContrastChange;safecall; end; // IWMPSkinList : IWMPSkinlist: interface for skin object model. IWMPSkinListDisp = dispinterface ['{8CEA03A2-D0C5-4E97-9C38-A676A639A51D}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // updateBasketColumns : property basketVisible procedure updateBasketColumns;dispid 6050; // highContrastChange : property highContrastChange procedure highContrastChange;dispid 6051; end; // IWMPPluginUIHost : IWMPPluginUIHost: Not Public. Internal interface used by Windows Media Player. IWMPPluginUIHost = interface(IDispatch) ['{5D0AD945-289E-45C5-A9C6-F301F0152108}'] function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_objectID : WideString; safecall; procedure Set_objectID(const pVal:WideString); safecall; // getProperty : method getProperty function getProperty(bstrName:WideString):OleVariant;safecall; // setProperty : method setProperty procedure setProperty(bstrName:WideString;newVal:OleVariant);safecall; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // objectID : property objectID property objectID:WideString read Get_objectID write Set_objectID; end; // IWMPPluginUIHost : IWMPPluginUIHost: Not Public. Internal interface used by Windows Media Player. IWMPPluginUIHostDisp = dispinterface ['{5D0AD945-289E-45C5-A9C6-F301F0152108}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getProperty : method getProperty function getProperty(bstrName:WideString):OleVariant;dispid 6203; // setProperty : method setProperty procedure setProperty(bstrName:WideString;newVal:OleVariant);dispid 6204; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 6201; // objectID : property objectID property objectID:WideString dispid 6202; end; // IWMPMenuCtrl : IWMPMenuCtrl: Not Public. Internal interface used by Windows Media Player. IWMPMenuCtrl = interface(IDispatch) ['{158A7ADC-33DA-4039-A553-BDDBBE389F5C}'] // deleteAllItems : method deleteAllItems procedure deleteAllItems;safecall; // appendItem : method appendItem procedure appendItem(nID:Integer;bstrItem:WideString);safecall; // appendSeparator : method appendSeparator procedure appendSeparator;safecall; // enableItem : property enableItem procedure enableItem(nID:Integer;newVal:WordBool);safecall; // checkItem : property checkItem procedure checkItem(nID:Integer;newVal:WordBool);safecall; // checkRadioItem : property checkRadioItem procedure checkRadioItem(nID:Integer;newVal:WordBool);safecall; function Get_showFlags : Integer; safecall; procedure Set_showFlags(const pVal:Integer); safecall; // show : method show function show:Integer;safecall; // showEx : method showEx procedure showEx(nID:Integer);safecall; // showFlags : property showFlags property showFlags:Integer read Get_showFlags write Set_showFlags; end; // IWMPMenuCtrl : IWMPMenuCtrl: Not Public. Internal interface used by Windows Media Player. IWMPMenuCtrlDisp = dispinterface ['{158A7ADC-33DA-4039-A553-BDDBBE389F5C}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // deleteAllItems : method deleteAllItems procedure deleteAllItems;dispid 6301; // appendItem : method appendItem procedure appendItem(nID:Integer;bstrItem:WideString);dispid 6302; // appendSeparator : method appendSeparator procedure appendSeparator;dispid 6303; // enableItem : property enableItem procedure enableItem(nID:Integer;newVal:WordBool);dispid 6304; // checkItem : property checkItem procedure checkItem(nID:Integer;newVal:WordBool);dispid 6305; // checkRadioItem : property checkRadioItem procedure checkRadioItem(nID:Integer;newVal:WordBool);dispid 6306; // show : method show function show:Integer;dispid 6308; // showEx : method showEx procedure showEx(nID:Integer);dispid 6309; // showFlags : property showFlags property showFlags:Integer dispid 6307; end; // IWMPAutoMenuCtrl : IWMPAutoMenuCtrl: Not Public. Internal interface used by Windows Media Player. IWMPAutoMenuCtrl = interface(IDispatch) ['{1AD13E0B-4F3A-41DF-9BE2-F9E6FE0A7875}'] // show : method show procedure show(newVal:WideString);safecall; end; // IWMPAutoMenuCtrl : IWMPAutoMenuCtrl: Not Public. Internal interface used by Windows Media Player. IWMPAutoMenuCtrlDisp = dispinterface ['{1AD13E0B-4F3A-41DF-9BE2-F9E6FE0A7875}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // show : method show procedure show(newVal:WideString);dispid 6501; end; // IWMPRegionalButtonCtrl : IWMPRegionalButtonCtrl: Public interface for skin object model. IWMPRegionalButtonCtrl = interface(IDispatch) ['{58D507B1-2354-11D3-BD41-00C04F6EA5AE}'] function Get_image : WideString; safecall; procedure Set_image(const pVal:WideString); safecall; function Get_hoverImage : WideString; safecall; procedure Set_hoverImage(const pVal:WideString); safecall; function Get_downImage : WideString; safecall; procedure Set_downImage(const pVal:WideString); safecall; function Get_hoverDownImage : WideString; safecall; procedure Set_hoverDownImage(const pVal:WideString); safecall; function Get_hoverHoverImage : WideString; safecall; procedure Set_hoverHoverImage(const pVal:WideString); safecall; function Get_disabledImage : WideString; safecall; procedure Set_disabledImage(const pVal:WideString); safecall; function Get_mappingImage : WideString; safecall; procedure Set_mappingImage(const pVal:WideString); safecall; function Get_transparencyColor : WideString; safecall; procedure Set_transparencyColor(const pVal:WideString); safecall; function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; function Get_showBackground : WordBool; safecall; procedure Set_showBackground(const pVal:WordBool); safecall; function Get_radio : WordBool; safecall; procedure Set_radio(const pVal:WordBool); safecall; function Get_buttonCount : Integer; safecall; // createButton : method CreateButton function createButton:IDispatch;safecall; // getButton : method GetButton function getButton(nButton:Integer):IDispatch;safecall; // Click : method Click procedure Click(nButton:Integer);safecall; function Get_hueShift : Single; safecall; procedure Set_hueShift(const pVal:Single); safecall; function Get_saturation : Single; safecall; procedure Set_saturation(const pVal:Single); safecall; // image : property Image property image:WideString read Get_image write Set_image; // hoverImage : property HoverImage property hoverImage:WideString read Get_hoverImage write Set_hoverImage; // downImage : property DownImage property downImage:WideString read Get_downImage write Set_downImage; // hoverDownImage : property HoverDownImage property hoverDownImage:WideString read Get_hoverDownImage write Set_hoverDownImage; // hoverHoverImage : property hoverHoverImage property hoverHoverImage:WideString read Get_hoverHoverImage write Set_hoverHoverImage; // disabledImage : property DisabledImage property disabledImage:WideString read Get_disabledImage write Set_disabledImage; // mappingImage : property MappingImage property mappingImage:WideString read Get_mappingImage write Set_mappingImage; // transparencyColor : property TransparencyColor property transparencyColor:WideString read Get_transparencyColor write Set_transparencyColor; // cursor : property Cursor property cursor:WideString read Get_cursor write Set_cursor; // showBackground : property ShowBackground property showBackground:WordBool read Get_showBackground write Set_showBackground; // radio : property Radio property radio:WordBool read Get_radio write Set_radio; // buttonCount : property ButtonCount property buttonCount:Integer read Get_buttonCount; // hueShift : property hueShift property hueShift:Single read Get_hueShift write Set_hueShift; // saturation : property saturation property saturation:Single read Get_saturation write Set_saturation; end; // IWMPRegionalButtonCtrl : IWMPRegionalButtonCtrl: Public interface for skin object model. IWMPRegionalButtonCtrlDisp = dispinterface ['{58D507B1-2354-11D3-BD41-00C04F6EA5AE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // createButton : method CreateButton function createButton:IDispatch;dispid 5312; // getButton : method GetButton function getButton(nButton:Integer):IDispatch;dispid 5313; // Click : method Click procedure Click(nButton:Integer);dispid 5314; // image : property Image property image:WideString dispid 5300; // hoverImage : property HoverImage property hoverImage:WideString dispid 5301; // downImage : property DownImage property downImage:WideString dispid 5302; // hoverDownImage : property HoverDownImage property hoverDownImage:WideString dispid 5303; // hoverHoverImage : property hoverHoverImage property hoverHoverImage:WideString dispid 5317; // disabledImage : property DisabledImage property disabledImage:WideString dispid 5304; // mappingImage : property MappingImage property mappingImage:WideString dispid 5305; // transparencyColor : property TransparencyColor property transparencyColor:WideString dispid 5306; // cursor : property Cursor property cursor:WideString dispid 5308; // showBackground : property ShowBackground property showBackground:WordBool dispid 5309; // radio : property Radio property radio:WordBool dispid 5310; // buttonCount : property ButtonCount property buttonCount:Integer readonly dispid 5311; // hueShift : property hueShift property hueShift:Single dispid 5315; // saturation : property saturation property saturation:Single dispid 5316; end; // IWMPRegionalButtonEvents : IWMPRegionalButtonEvents: Public interface for skin object model. IWMPRegionalButtonEvents = dispinterface ['{50FC8D31-67AC-11D3-BD4C-00C04F6EA5AE}'] // onblur : event onblur function onblur:HResult;dispid 5360; // onfocus : event onfocus function onfocus:HResult;dispid 5361; // onclick : event onclick function onclick:HResult;dispid 5362; // ondblclick : event ondblclick function ondblclick:HResult;dispid 5363; // onmousedown : event onmousedown function onmousedown:HResult;dispid 5364; // onmouseup : event onmouseup function onmouseup:HResult;dispid 5365; // onmousemove : event onmousemove function onmousemove:HResult;dispid 5366; // onmouseover : event onmouseover function onmouseover:HResult;dispid 5367; // onmouseout : event onmouseout function onmouseout:HResult;dispid 5368; // onkeypress : event onkeypress function onkeypress:HResult;dispid 5369; // onkeydown : event onkeydown function onkeydown:HResult;dispid 5370; // onkeyup : event onkeyup function onkeyup:HResult;dispid 5371; end; // IWMPRegionalButton : IWMPRegionalButton: Public interface for skin object model. IWMPRegionalButton = interface(IDispatch) ['{58D507B2-2354-11D3-BD41-00C04F6EA5AE}'] function Get_upToolTip : WideString; safecall; procedure Set_upToolTip(const pVal:WideString); safecall; function Get_downToolTip : WideString; safecall; procedure Set_downToolTip(const pVal:WideString); safecall; function Get_mappingColor : WideString; safecall; procedure Set_mappingColor(const pVal:WideString); safecall; function Get_enabled : WordBool; safecall; procedure Set_enabled(const pVal:WordBool); safecall; function Get_sticky : WordBool; safecall; procedure Set_sticky(const pVal:WordBool); safecall; function Get_down : WordBool; safecall; procedure Set_down(const pVal:WordBool); safecall; function Get_index : Integer; safecall; function Get_tabStop : WordBool; safecall; procedure Set_tabStop(const pVal:WordBool); safecall; function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; // Click : method Click procedure Click;safecall; function Get_accName : WideString; safecall; procedure Set_accName(const pszName:WideString); safecall; function Get_accDescription : WideString; safecall; procedure Set_accDescription(const pszDescription:WideString); safecall; function Get_accKeyboardShortcut : WideString; safecall; procedure Set_accKeyboardShortcut(const pszShortcut:WideString); safecall; // upToolTip : property UpToolTip property upToolTip:WideString read Get_upToolTip write Set_upToolTip; // downToolTip : property DownToolTip property downToolTip:WideString read Get_downToolTip write Set_downToolTip; // mappingColor : property MappingColor property mappingColor:WideString read Get_mappingColor write Set_mappingColor; // enabled : property Enabled property enabled:WordBool read Get_enabled write Set_enabled; // sticky : property Sticky property sticky:WordBool read Get_sticky write Set_sticky; // down : property Down property down:WordBool read Get_down write Set_down; // index : property Index property index:Integer read Get_index; // tabStop : property TabStop property tabStop:WordBool read Get_tabStop write Set_tabStop; // cursor : property Cursor property cursor:WideString read Get_cursor write Set_cursor; // accName : property AccName property accName:WideString read Get_accName write Set_accName; // accDescription : property AccDescription property accDescription:WideString read Get_accDescription write Set_accDescription; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString read Get_accKeyboardShortcut write Set_accKeyboardShortcut; end; // IWMPRegionalButton : IWMPRegionalButton: Public interface for skin object model. IWMPRegionalButtonDisp = dispinterface ['{58D507B2-2354-11D3-BD41-00C04F6EA5AE}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Click : method Click procedure Click;dispid 5344; // upToolTip : property UpToolTip property upToolTip:WideString dispid 5330; // downToolTip : property DownToolTip property downToolTip:WideString dispid 5331; // mappingColor : property MappingColor property mappingColor:WideString dispid 5332; // enabled : property Enabled property enabled:WordBool dispid 5333; // sticky : property Sticky property sticky:WordBool dispid 5339; // down : property Down property down:WordBool dispid 5340; // index : property Index property index:Integer readonly dispid 5341; // tabStop : property TabStop property tabStop:WordBool dispid 5342; // cursor : property Cursor property cursor:WideString dispid 5343; // accName : property AccName property accName:WideString dispid 5345; // accDescription : property AccDescription property accDescription:WideString dispid 5346; // accKeyboardShortcut : property accKeyboardShortcut property accKeyboardShortcut:WideString dispid 5347; end; // IWMPCustomSliderCtrlEvents : IWMPCustomSliderCtrlEvents: Public interface for skin object model. IWMPCustomSliderCtrlEvents = dispinterface ['{95F45AA4-ED0A-11D2-BA67-0000F80855E6}'] // ondragbegin : event ondragbegin function ondragbegin:HResult;dispid 5020; // ondragend : event ondragend function ondragend:HResult;dispid 5021; // onpositionchange : event onpositionchange function onpositionchange:HResult;dispid 5022; end; // IWMPCustomSlider : IWMPCustomSlider: Public interface for skin object model. IWMPCustomSlider = interface(IDispatch) ['{95F45AA2-ED0A-11D2-BA67-0000F80855E6}'] function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; function Get_min : Single; safecall; procedure Set_min(const pVal:Single); safecall; function Get_max : Single; safecall; procedure Set_max(const pVal:Single); safecall; function Get_value : Single; safecall; procedure Set_value(const pVal:Single); safecall; function Get_toolTip : WideString; safecall; procedure Set_toolTip(const pVal:WideString); safecall; function Get_positionImage : WideString; safecall; procedure Set_positionImage(const pVal:WideString); safecall; function Get_image : WideString; safecall; procedure Set_image(const pVal:WideString); safecall; function Get_hoverImage : WideString; safecall; procedure Set_hoverImage(const pVal:WideString); safecall; function Get_disabledImage : WideString; safecall; procedure Set_disabledImage(const pVal:WideString); safecall; function Get_downImage : WideString; safecall; procedure Set_downImage(const pVal:WideString); safecall; function Get_transparencyColor : WideString; safecall; procedure Set_transparencyColor(const pVal:WideString); safecall; // cursor : property cursor property cursor:WideString read Get_cursor write Set_cursor; // min : property min property min:Single read Get_min write Set_min; // max : property max property max:Single read Get_max write Set_max; // value : property value property value:Single read Get_value write Set_value; // toolTip : property toolTip property toolTip:WideString read Get_toolTip write Set_toolTip; // positionImage : property positionImage property positionImage:WideString read Get_positionImage write Set_positionImage; // image : property image property image:WideString read Get_image write Set_image; // hoverImage : property hoverImage property hoverImage:WideString read Get_hoverImage write Set_hoverImage; // disabledImage : property disabledImage property disabledImage:WideString read Get_disabledImage write Set_disabledImage; // downImage : property downImage property downImage:WideString read Get_downImage write Set_downImage; // transparencyColor : property transparancyColor property transparencyColor:WideString read Get_transparencyColor write Set_transparencyColor; end; // IWMPCustomSlider : IWMPCustomSlider: Public interface for skin object model. IWMPCustomSliderDisp = dispinterface ['{95F45AA2-ED0A-11D2-BA67-0000F80855E6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // cursor : property cursor property cursor:WideString dispid 5009; // min : property min property min:Single dispid 5005; // max : property max property max:Single dispid 5006; // value : property value property value:Single dispid 5010; // toolTip : property toolTip property toolTip:WideString dispid 5011; // positionImage : property positionImage property positionImage:WideString dispid 5002; // image : property image property image:WideString dispid 5001; // hoverImage : property hoverImage property hoverImage:WideString dispid 5003; // disabledImage : property disabledImage property disabledImage:WideString dispid 5004; // downImage : property downImage property downImage:WideString dispid 5012; // transparencyColor : property transparancyColor property transparencyColor:WideString dispid 5008; end; // IWMPTextCtrl : IWMPTextCtrl: Public interface for skin object model. IWMPTextCtrl = interface(IDispatch) ['{237DAC8E-0E32-11D3-A2E2-00C04F79F88E}'] function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_fontFace : WideString; safecall; procedure Set_fontFace(const pVal:WideString); safecall; function Get_fontStyle : WideString; safecall; procedure Set_fontStyle(const pVal:WideString); safecall; function Get_fontSize : Integer; safecall; procedure Set_fontSize(const pVal:Integer); safecall; function Get_foregroundColor : WideString; safecall; procedure Set_foregroundColor(const pVal:WideString); safecall; function Get_hoverBackgroundColor : WideString; safecall; procedure Set_hoverBackgroundColor(const pVal:WideString); safecall; function Get_hoverForegroundColor : WideString; safecall; procedure Set_hoverForegroundColor(const pVal:WideString); safecall; function Get_hoverFontStyle : WideString; safecall; procedure Set_hoverFontStyle(const pVal:WideString); safecall; function Get_value : WideString; safecall; procedure Set_value(const pVal:WideString); safecall; function Get_toolTip : WideString; safecall; procedure Set_toolTip(const pVal:WideString); safecall; function Get_disabledFontStyle : WideString; safecall; procedure Set_disabledFontStyle(const pVal:WideString); safecall; function Get_disabledForegroundColor : WideString; safecall; procedure Set_disabledForegroundColor(const pVal:WideString); safecall; function Get_disabledBackgroundColor : WideString; safecall; procedure Set_disabledBackgroundColor(const pVal:WideString); safecall; function Get_fontSmoothing : WordBool; safecall; procedure Set_fontSmoothing(const pVal:WordBool); safecall; function Get_justification : WideString; safecall; procedure Set_justification(const pVal:WideString); safecall; function Get_wordWrap : WordBool; safecall; procedure Set_wordWrap(const pVal:WordBool); safecall; function Get_cursor : WideString; safecall; procedure Set_cursor(const pVal:WideString); safecall; function Get_scrolling : WordBool; safecall; procedure Set_scrolling(const pVal:WordBool); safecall; function Get_scrollingDirection : WideString; safecall; procedure Set_scrollingDirection(const pVal:WideString); safecall; function Get_scrollingDelay : SYSINT; safecall; procedure Set_scrollingDelay(const pVal:SYSINT); safecall; function Get_scrollingAmount : SYSINT; safecall; procedure Set_scrollingAmount(const pVal:SYSINT); safecall; function Get_textWidth : SYSINT; safecall; function Get_onGlass : WordBool; safecall; procedure Set_onGlass(const pVal:WordBool); safecall; function Get_disableGlassBlurBackground : WordBool; safecall; procedure Set_disableGlassBlurBackground(const pVal:WordBool); safecall; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // fontFace : property fontFace property fontFace:WideString read Get_fontFace write Set_fontFace; // fontStyle : property fontStyle property fontStyle:WideString read Get_fontStyle write Set_fontStyle; // fontSize : property fontSize property fontSize:Integer read Get_fontSize write Set_fontSize; // foregroundColor : property foregroundColor property foregroundColor:WideString read Get_foregroundColor write Set_foregroundColor; // hoverBackgroundColor : property hoverBackgroundColor property hoverBackgroundColor:WideString read Get_hoverBackgroundColor write Set_hoverBackgroundColor; // hoverForegroundColor : property hoverForegroundColor property hoverForegroundColor:WideString read Get_hoverForegroundColor write Set_hoverForegroundColor; // hoverFontStyle : property hoverFontStyle property hoverFontStyle:WideString read Get_hoverFontStyle write Set_hoverFontStyle; // value : property value property value:WideString read Get_value write Set_value; // toolTip : property toolTip property toolTip:WideString read Get_toolTip write Set_toolTip; // disabledFontStyle : property disabledFontStyle property disabledFontStyle:WideString read Get_disabledFontStyle write Set_disabledFontStyle; // disabledForegroundColor : property disabledForegroundColor property disabledForegroundColor:WideString read Get_disabledForegroundColor write Set_disabledForegroundColor; // disabledBackgroundColor : property disabledBackgroundColor property disabledBackgroundColor:WideString read Get_disabledBackgroundColor write Set_disabledBackgroundColor; // fontSmoothing : property fontSmoothing property fontSmoothing:WordBool read Get_fontSmoothing write Set_fontSmoothing; // justification : property justification property justification:WideString read Get_justification write Set_justification; // wordWrap : property wordWrap property wordWrap:WordBool read Get_wordWrap write Set_wordWrap; // cursor : property cursor property cursor:WideString read Get_cursor write Set_cursor; // scrolling : property scrolling property scrolling:WordBool read Get_scrolling write Set_scrolling; // scrollingDirection : property scrollingDirection property scrollingDirection:WideString read Get_scrollingDirection write Set_scrollingDirection; // scrollingDelay : property scrollingDelay property scrollingDelay:SYSINT read Get_scrollingDelay write Set_scrollingDelay; // scrollingAmount : property scrollingAmount property scrollingAmount:SYSINT read Get_scrollingAmount write Set_scrollingAmount; // textWidth : property textWidth property textWidth:SYSINT read Get_textWidth; // onGlass : property onGlass property onGlass:WordBool read Get_onGlass write Set_onGlass; // disableGlassBlurBackground : property disableGlassBlurBackground property disableGlassBlurBackground:WordBool read Get_disableGlassBlurBackground write Set_disableGlassBlurBackground; end; // IWMPTextCtrl : IWMPTextCtrl: Public interface for skin object model. IWMPTextCtrlDisp = dispinterface ['{237DAC8E-0E32-11D3-A2E2-00C04F79F88E}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 5201; // fontFace : property fontFace property fontFace:WideString dispid 5206; // fontStyle : property fontStyle property fontStyle:WideString dispid 5207; // fontSize : property fontSize property fontSize:Integer dispid 5208; // foregroundColor : property foregroundColor property foregroundColor:WideString dispid 5209; // hoverBackgroundColor : property hoverBackgroundColor property hoverBackgroundColor:WideString dispid 5210; // hoverForegroundColor : property hoverForegroundColor property hoverForegroundColor:WideString dispid 5211; // hoverFontStyle : property hoverFontStyle property hoverFontStyle:WideString dispid 5212; // value : property value property value:WideString dispid 5213; // toolTip : property toolTip property toolTip:WideString dispid 5214; // disabledFontStyle : property disabledFontStyle property disabledFontStyle:WideString dispid 5215; // disabledForegroundColor : property disabledForegroundColor property disabledForegroundColor:WideString dispid 5216; // disabledBackgroundColor : property disabledBackgroundColor property disabledBackgroundColor:WideString dispid 5217; // fontSmoothing : property fontSmoothing property fontSmoothing:WordBool dispid 5221; // justification : property justification property justification:WideString dispid 5222; // wordWrap : property wordWrap property wordWrap:WordBool dispid 5223; // cursor : property cursor property cursor:WideString dispid 5224; // scrolling : property scrolling property scrolling:WordBool dispid 5225; // scrollingDirection : property scrollingDirection property scrollingDirection:WideString dispid 5226; // scrollingDelay : property scrollingDelay property scrollingDelay:SYSINT dispid 5227; // scrollingAmount : property scrollingAmount property scrollingAmount:SYSINT dispid 5228; // textWidth : property textWidth property textWidth:SYSINT readonly dispid 5229; // onGlass : property onGlass property onGlass:WordBool dispid 5230; // disableGlassBlurBackground : property disableGlassBlurBackground property disableGlassBlurBackground:WordBool dispid 5231; end; // ITaskCntrCtrl : ITaskCntrCtrl: Not Public. Internal interface used by Windows Media Player. ITaskCntrCtrl = interface(IDispatch) ['{891EADB1-1C45-48B0-B704-49A888DA98C4}'] function Get_CurrentContainer : IUnknown; safecall; procedure Set_CurrentContainer(const ppUnk:IUnknown); safecall; // Activate : procedure Activate;safecall; // CurrentContainer : property CurrentContainer:IUnknown read Get_CurrentContainer write Set_CurrentContainer; end; // ITaskCntrCtrl : ITaskCntrCtrl: Not Public. Internal interface used by Windows Media Player. ITaskCntrCtrlDisp = dispinterface ['{891EADB1-1C45-48B0-B704-49A888DA98C4}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Activate : procedure Activate;dispid 1610743810; // CurrentContainer : property CurrentContainer:IUnknown dispid 1610743808; end; // _WMPCoreEvents : _WMPCoreEvents: Public interface. _WMPCoreEvents = dispinterface ['{D84CCA96-CCE2-11D2-9ECC-0000F8085981}'] // OpenStateChange : Sent when the control changes OpenState procedure OpenStateChange(NewState:Integer);dispid 5001; // PlayStateChange : Sent when the control changes PlayState procedure PlayStateChange(NewState:Integer);dispid 5101; // AudioLanguageChange : Sent when the current audio language has changed procedure AudioLanguageChange(LangID:Integer);dispid 5102; // StatusChange : Sent when the status string changes procedure StatusChange;dispid 5002; // ScriptCommand : Sent when a synchronized command or URL is received procedure ScriptCommand(scType:WideString;Param:WideString);dispid 5301; // NewStream : Sent when a new stream is started in a channel procedure NewStream;dispid 5403; // Disconnect : Sent when the control is disconnected from the server procedure Disconnect(Result:Integer);dispid 5401; // Buffering : Sent when the control begins or ends buffering procedure Buffering(Start:WordBool);dispid 5402; // Error : Sent when the control has an error condition procedure Error;dispid 5501; // Warning : Sent when the control encounters a problem procedure Warning(WarningType:Integer;Param:Integer;Description:WideString);dispid 5601; // EndOfStream : Sent when the end of file is reached procedure EndOfStream(Result:Integer);dispid 5201; // PositionChange : Indicates that the current position of the movie has changed procedure PositionChange(oldPosition:Double;newPosition:Double);dispid 5202; // MarkerHit : Sent when a marker is reached procedure MarkerHit(MarkerNum:Integer);dispid 5203; // DurationUnitChange : Indicates that the unit used to express duration and position has changed procedure DurationUnitChange(NewDurationUnit:Integer);dispid 5204; // CdromMediaChange : Indicates that the CD ROM media has changed procedure CdromMediaChange(CdromNum:Integer);dispid 5701; // PlaylistChange : Sent when a playlist changes procedure PlaylistChange(Playlist:IDispatch;change:WMPPlaylistChangeEventType);dispid 5801; // CurrentPlaylistChange : Sent when the current playlist changes procedure CurrentPlaylistChange(change:WMPPlaylistChangeEventType);dispid 5804; // CurrentPlaylistItemAvailable : Sent when a current playlist item becomes available procedure CurrentPlaylistItemAvailable(bstrItemName:WideString);dispid 5805; // MediaChange : Sent when a media object changes procedure MediaChange(Item:IDispatch);dispid 5802; // CurrentMediaItemAvailable : Sent when a current media item becomes available procedure CurrentMediaItemAvailable(bstrItemName:WideString);dispid 5803; // CurrentItemChange : Sent when the item selection on the current playlist changes procedure CurrentItemChange(pdispMedia:IDispatch);dispid 5806; // MediaCollectionChange : Sent when the media collection needs to be requeried procedure MediaCollectionChange;dispid 5807; // MediaCollectionAttributeStringAdded : Sent when an attribute string is added in the media collection procedure MediaCollectionAttributeStringAdded(bstrAttribName:WideString;bstrAttribVal:WideString);dispid 5808; // MediaCollectionAttributeStringRemoved : Sent when an attribute string is removed from the media collection procedure MediaCollectionAttributeStringRemoved(bstrAttribName:WideString;bstrAttribVal:WideString);dispid 5809; // MediaCollectionAttributeStringChanged : Sent when an attribute string is changed in the media collection procedure MediaCollectionAttributeStringChanged(bstrAttribName:WideString;bstrOldAttribVal:WideString;bstrNewAttribVal:WideString);dispid 5820; // PlaylistCollectionChange : Sent when playlist collection needs to be requeried procedure PlaylistCollectionChange;dispid 5810; // PlaylistCollectionPlaylistAdded : Sent when a playlist is added to the playlist collection procedure PlaylistCollectionPlaylistAdded(bstrPlaylistName:WideString);dispid 5811; // PlaylistCollectionPlaylistRemoved : Sent when a playlist is removed from the playlist collection procedure PlaylistCollectionPlaylistRemoved(bstrPlaylistName:WideString);dispid 5812; // PlaylistCollectionPlaylistSetAsDeleted : Sent when a playlist has been set or reset as deleted procedure PlaylistCollectionPlaylistSetAsDeleted(bstrPlaylistName:WideString;varfIsDeleted:WordBool);dispid 5818; // ModeChange : Playlist playback mode has changed procedure ModeChange(ModeName:WideString;NewValue:WordBool);dispid 5819; // MediaError : Sent when the media object has an error condition procedure MediaError(pMediaObject:IDispatch);dispid 5821; // OpenPlaylistSwitch : Current playlist switch with no open state change procedure OpenPlaylistSwitch(pItem:IDispatch);dispid 5823; // DomainChange : Send a current domain procedure DomainChange(strDomain:WideString);dispid 5822; // StringCollectionChange : Sent when a string collection changes procedure StringCollectionChange(pdispStringCollection:IDispatch;change:WMPStringCollectionChangeEventType;lCollectionIndex:Integer);dispid 5824; // MediaCollectionMediaAdded : Sent when a media is added to the local library procedure MediaCollectionMediaAdded(pdispMedia:IDispatch);dispid 5825; // MediaCollectionMediaRemoved : Sent when a media is removed from the local library procedure MediaCollectionMediaRemoved(pdispMedia:IDispatch);dispid 5826; end; // IWMPGraphEventHandler : IWMPGraphEventHandler: Not Public. Internal interface used by Windows Media Player. IWMPGraphEventHandler = interface(IDispatch) ['{6B550945-018F-11D3-B14A-00C04F79FAA6}'] // NotifyGraphStateChange : Notifies graph state changes procedure NotifyGraphStateChange(punkGraph:ULONG_PTR;lGraphState:Integer);safecall; // AsyncNotifyGraphStateChange : Notifies graph state changes asynchronously procedure AsyncNotifyGraphStateChange(punkGraph:ULONG_PTR;lGraphState:Integer);safecall; // NotifyRateChange : Notifies changes in playback rate procedure NotifyRateChange(punkGraph:ULONG_PTR;dRate:Double);safecall; // NotifyPlaybackEnd : Notifies the end of playback procedure NotifyPlaybackEnd(punkGraph:ULONG_PTR;bstrQueuedUrl:WideString;dwCurrentContext:ULONG_PTR);safecall; // NotifyStreamEnd : Notifies the end of a stream procedure NotifyStreamEnd(punkGraph:ULONG_PTR);safecall; // NotifyScriptCommand : Notifies that a script command was encountered procedure NotifyScriptCommand(punkGraph:ULONG_PTR;bstrCommand:WideString;bstrParam:WideString);safecall; // NotifyEarlyScriptCommand : Notifies that a script command was encountered procedure NotifyEarlyScriptCommand(punkGraph:ULONG_PTR;bstrCommand:WideString;bstrParam:WideString;dTime:Double);safecall; // NotifyMarkerHit : Notifies that a marker was encountered procedure NotifyMarkerHit(punkGraph:ULONG_PTR;lMarker:Integer);safecall; // NotifyGraphError : Notifies that an error has occurred procedure NotifyGraphError(punkGraph:ULONG_PTR;lErrMajor:Integer;lErrMinor:Integer;lCondition:Integer;bstrInfo:WideString;punkGraphData:IUnknown);safecall; // NotifyAcquireCredentials : Spawns the Acquire Credentials dialog procedure NotifyAcquireCredentials(punkGraph:ULONG_PTR;bstrRealm:WideString;bstrSite:WideString;bstrUser:WideString;bstrPassword:WideString;var pdwFlags:LongWord;out pfCancel:WordBool);safecall; // NotifyUntrustedLicense : Spawns the untrusted license dialog procedure NotifyUntrustedLicense(punkGraph:ULONG_PTR;bstrURL:WideString;out pfCancel:WordBool);safecall; // NotifyLicenseDialog : Notifies a communication with the license dialog procedure NotifyLicenseDialog(punkGraph:ULONG_PTR;bstrURL:WideString;bstrContent:WideString;var pPostData:Byte;dwPostDataSize:LongWord;lResult:Integer);safecall; // NotifyNeedsIndividualization : Notifies a communication with the Individualization dialog procedure NotifyNeedsIndividualization(punkGraph:ULONG_PTR;out pfResult:WordBool);safecall; // NotifyNewMetadata : Notifies that new metadata is avail procedure NotifyNewMetadata(punkGraph:ULONG_PTR);safecall; // NotifyNewMediaCaps : Notifies that new capabilities are avail procedure NotifyNewMediaCaps(punkGraph:ULONG_PTR);safecall; // NotifyDisconnect : Notifies that the graph's connection to the media has been lost. procedure NotifyDisconnect(punkGraph:ULONG_PTR;lResult:Integer);safecall; // NotifySave : Notifies that the graph save operation started/stopped. procedure NotifySave(punkGraph:ULONG_PTR;fStarted:Integer;lResult:Integer);safecall; // NotifyDelayClose : Notifies if the close call needs to be delayed. procedure NotifyDelayClose(punkGraph:ULONG_PTR;fDelay:WordBool);safecall; // NotifyDVD : Notifies when domain changes, parental control and region needs to be handled. procedure NotifyDVD(punkGraph:ULONG_PTR;lEventCode:Integer;lParam1:Integer;lParam2:Integer);safecall; // NotifyRequestAppThreadAction : Requests a callback into the graph on the apps thread procedure NotifyRequestAppThreadAction(punkGraph:ULONG_PTR;dwAction:LongWord);safecall; // NotifyPrerollReady : Notifies that a prerolled graph is ready to play with no more buffering procedure NotifyPrerollReady(punkGraph:ULONG_PTR);safecall; // NotifyNewIcons : Notifies core that our DirectShow filters have new icons to display procedure NotifyNewIcons(punkGraph:ULONG_PTR);safecall; // NotifyStepComplete : Notifies core that our step operation has completed procedure NotifyStepComplete(punkGraph:ULONG_PTR);safecall; // NotifyNewBitrate : Notifies core that our bitrate has changed procedure NotifyNewBitrate(punkGraph:ULONG_PTR;dwBitrate:LongWord);safecall; // NotifyGraphCreationPreRender : procedure NotifyGraphCreationPreRender(punkGraph:ULONG_PTR;punkFilterGraph:ULONG_PTR;punkCardeaEncConfig:ULONG_PTR;phrContinue:ULONG_PTR;hEventToSet:ULONG_PTR);safecall; // NotifyGraphCreationPostRender : procedure NotifyGraphCreationPostRender(punkGraph:ULONG_PTR;punkFilterGraph:ULONG_PTR;phrContinue:ULONG_PTR;hEventToSet:ULONG_PTR);safecall; // NotifyGraphUserEvent : Signals a user event from the renderer procedure NotifyGraphUserEvent(punkGraph:ULONG_PTR;EventCode:Integer);safecall; // NotifyRevocation : Notifies a communication with the Revocation dialog procedure NotifyRevocation(punkGraph:ULONG_PTR;out pfResult:WordBool);safecall; // NotifyNeedsWMGraphIndividualization : Notifies a communication with the Individualization dialog procedure NotifyNeedsWMGraphIndividualization(punkGraph:ULONG_PTR;phWnd:ULONG_PTR;hIndivEvent:ULONG_PTR;out pfCancel:WordBool;out pfResult:WordBool);safecall; // NotifyNeedsFullscreen : Notifies core that the content requires fullscreen mode procedure NotifyNeedsFullscreen(punkGraph:ULONG_PTR);safecall; end; // IWMPGraphEventHandler : IWMPGraphEventHandler: Not Public. Internal interface used by Windows Media Player. IWMPGraphEventHandlerDisp = dispinterface ['{6B550945-018F-11D3-B14A-00C04F79FAA6}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // NotifyGraphStateChange : Notifies graph state changes procedure NotifyGraphStateChange(punkGraph:ULONG_PTR;lGraphState:Integer);dispid 8151; // AsyncNotifyGraphStateChange : Notifies graph state changes asynchronously procedure AsyncNotifyGraphStateChange(punkGraph:ULONG_PTR;lGraphState:Integer);dispid 8173; // NotifyRateChange : Notifies changes in playback rate procedure NotifyRateChange(punkGraph:ULONG_PTR;dRate:Double);dispid 8153; // NotifyPlaybackEnd : Notifies the end of playback procedure NotifyPlaybackEnd(punkGraph:ULONG_PTR;bstrQueuedUrl:WideString;dwCurrentContext:ULONG_PTR);dispid 8157; // NotifyStreamEnd : Notifies the end of a stream procedure NotifyStreamEnd(punkGraph:ULONG_PTR);dispid 8156; // NotifyScriptCommand : Notifies that a script command was encountered procedure NotifyScriptCommand(punkGraph:ULONG_PTR;bstrCommand:WideString;bstrParam:WideString);dispid 8158; // NotifyEarlyScriptCommand : Notifies that a script command was encountered procedure NotifyEarlyScriptCommand(punkGraph:ULONG_PTR;bstrCommand:WideString;bstrParam:WideString;dTime:Double);dispid 8172; // NotifyMarkerHit : Notifies that a marker was encountered procedure NotifyMarkerHit(punkGraph:ULONG_PTR;lMarker:Integer);dispid 8159; // NotifyGraphError : Notifies that an error has occurred procedure NotifyGraphError(punkGraph:ULONG_PTR;lErrMajor:Integer;lErrMinor:Integer;lCondition:Integer;bstrInfo:WideString;punkGraphData:IUnknown);dispid 8160; // NotifyAcquireCredentials : Spawns the Acquire Credentials dialog procedure NotifyAcquireCredentials(punkGraph:ULONG_PTR;bstrRealm:WideString;bstrSite:WideString;bstrUser:WideString;bstrPassword:WideString;var pdwFlags:LongWord;out pfCancel:WordBool);dispid 8161; // NotifyUntrustedLicense : Spawns the untrusted license dialog procedure NotifyUntrustedLicense(punkGraph:ULONG_PTR;bstrURL:WideString;out pfCancel:WordBool);dispid 8178; // NotifyLicenseDialog : Notifies a communication with the license dialog procedure NotifyLicenseDialog(punkGraph:ULONG_PTR;bstrURL:WideString;bstrContent:WideString;var pPostData:Byte;dwPostDataSize:LongWord;lResult:Integer);dispid 8162; // NotifyNeedsIndividualization : Notifies a communication with the Individualization dialog procedure NotifyNeedsIndividualization(punkGraph:ULONG_PTR;out pfResult:WordBool);dispid 8163; // NotifyNewMetadata : Notifies that new metadata is avail procedure NotifyNewMetadata(punkGraph:ULONG_PTR);dispid 8165; // NotifyNewMediaCaps : Notifies that new capabilities are avail procedure NotifyNewMediaCaps(punkGraph:ULONG_PTR);dispid 8166; // NotifyDisconnect : Notifies that the graph's connection to the media has been lost. procedure NotifyDisconnect(punkGraph:ULONG_PTR;lResult:Integer);dispid 8167; // NotifySave : Notifies that the graph save operation started/stopped. procedure NotifySave(punkGraph:ULONG_PTR;fStarted:Integer;lResult:Integer);dispid 8168; // NotifyDelayClose : Notifies if the close call needs to be delayed. procedure NotifyDelayClose(punkGraph:ULONG_PTR;fDelay:WordBool);dispid 8169; // NotifyDVD : Notifies when domain changes, parental control and region needs to be handled. procedure NotifyDVD(punkGraph:ULONG_PTR;lEventCode:Integer;lParam1:Integer;lParam2:Integer);dispid 8170; // NotifyRequestAppThreadAction : Requests a callback into the graph on the apps thread procedure NotifyRequestAppThreadAction(punkGraph:ULONG_PTR;dwAction:LongWord);dispid 8171; // NotifyPrerollReady : Notifies that a prerolled graph is ready to play with no more buffering procedure NotifyPrerollReady(punkGraph:ULONG_PTR);dispid 8174; // NotifyNewIcons : Notifies core that our DirectShow filters have new icons to display procedure NotifyNewIcons(punkGraph:ULONG_PTR);dispid 8177; // NotifyStepComplete : Notifies core that our step operation has completed procedure NotifyStepComplete(punkGraph:ULONG_PTR);dispid 8179; // NotifyNewBitrate : Notifies core that our bitrate has changed procedure NotifyNewBitrate(punkGraph:ULONG_PTR;dwBitrate:LongWord);dispid 8180; // NotifyGraphCreationPreRender : procedure NotifyGraphCreationPreRender(punkGraph:ULONG_PTR;punkFilterGraph:ULONG_PTR;punkCardeaEncConfig:ULONG_PTR;phrContinue:ULONG_PTR;hEventToSet:ULONG_PTR);dispid 8181; // NotifyGraphCreationPostRender : procedure NotifyGraphCreationPostRender(punkGraph:ULONG_PTR;punkFilterGraph:ULONG_PTR;phrContinue:ULONG_PTR;hEventToSet:ULONG_PTR);dispid 8182; // NotifyGraphUserEvent : Signals a user event from the renderer procedure NotifyGraphUserEvent(punkGraph:ULONG_PTR;EventCode:Integer);dispid 8186; // NotifyRevocation : Notifies a communication with the Revocation dialog procedure NotifyRevocation(punkGraph:ULONG_PTR;out pfResult:WordBool);dispid 8183; // NotifyNeedsWMGraphIndividualization : Notifies a communication with the Individualization dialog procedure NotifyNeedsWMGraphIndividualization(punkGraph:ULONG_PTR;phWnd:ULONG_PTR;hIndivEvent:ULONG_PTR;out pfCancel:WordBool;out pfResult:WordBool);dispid 8184; // NotifyNeedsFullscreen : Notifies core that the content requires fullscreen mode procedure NotifyNeedsFullscreen(punkGraph:ULONG_PTR);dispid 8185; end; // IBattery : IBattery: Not Public. Internal interface used by Windows Media Player. IBattery = interface(IDispatch) ['{F8578BFA-CD8F-4CE1-A684-5B7E85FCA7DC}'] function Get_presetCount : Integer; safecall; function Get_preset(nIndex:Integer) : IDispatch; safecall; // presetCount : property presetCount:Integer read Get_presetCount; // preset : property preset[nIndex:Integer]:IDispatch read Get_preset; end; // IBattery : IBattery: Not Public. Internal interface used by Windows Media Player. IBatteryDisp = dispinterface ['{F8578BFA-CD8F-4CE1-A684-5B7E85FCA7DC}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // presetCount : property presetCount:Integer readonly dispid 1; // preset : property preset[nIndex:Integer]:IDispatch readonly dispid 2; end; // IBatteryPreset : IBatteryPreset: Not Public. Internal interface used by Windows Media Player. IBatteryPreset = interface(IDispatch) ['{40C6BDE7-9C90-49D4-AD20-BEF81A6C5F22}'] function Get_title : WideString; safecall; procedure Set_title(const pVal:WideString); safecall; // title : property title:WideString read Get_title write Set_title; end; // IBatteryPreset : IBatteryPreset: Not Public. Internal interface used by Windows Media Player. IBatteryPresetDisp = dispinterface ['{40C6BDE7-9C90-49D4-AD20-BEF81A6C5F22}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // title : property title:WideString dispid 1; end; // IBatteryRandomPreset : IBatteryRandomPreset: Not Public. Internal interface used by Windows Media Player. IBatteryRandomPreset = interface(IBatteryPreset) ['{F85E2D65-207D-48DB-84B1-915E1735DB17}'] end; // IBatteryRandomPreset : IBatteryRandomPreset: Not Public. Internal interface used by Windows Media Player. IBatteryRandomPresetDisp = dispinterface ['{F85E2D65-207D-48DB-84B1-915E1735DB17}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // title : property title:WideString dispid 1; end; // IBatterySavedPreset : IBatterySavedPreset: Not Public. Internal interface used by Windows Media Player. IBatterySavedPreset = interface(IBatteryPreset) ['{876E7208-0172-4EBB-B08B-2E1D30DFE44C}'] end; // IBatterySavedPreset : IBatterySavedPreset: Not Public. Internal interface used by Windows Media Player. IBatterySavedPresetDisp = dispinterface ['{876E7208-0172-4EBB-B08B-2E1D30DFE44C}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // title : property title:WideString dispid 1; end; // IBarsEffect : IBarsEffect: Not Public. Internal interface used by Windows Media Player. IBarsEffect = interface(IDispatch) ['{33E9291A-F6A9-11D2-9435-00A0C92A2F2D}'] function Get_displayMode : Integer; safecall; procedure Set_displayMode(const pVal:Integer); safecall; function Get_showPeaks : WordBool; safecall; procedure Set_showPeaks(const pVal:WordBool); safecall; function Get_peakHangTime : Integer; safecall; procedure Set_peakHangTime(const pVal:Integer); safecall; function Get_peakFallbackAcceleration : Single; safecall; procedure Set_peakFallbackAcceleration(const pVal:Single); safecall; function Get_peakFallbackSpeed : Single; safecall; procedure Set_peakFallbackSpeed(const pVal:Single); safecall; function Get_levelFallbackAcceleration : Single; safecall; procedure Set_levelFallbackAcceleration(const pVal:Single); safecall; function Get_levelFallbackSpeed : Single; safecall; procedure Set_levelFallbackSpeed(const pVal:Single); safecall; function Get_backgroundColor : WideString; safecall; procedure Set_backgroundColor(const pVal:WideString); safecall; function Get_levelColor : WideString; safecall; procedure Set_levelColor(const pVal:WideString); safecall; function Get_peakColor : WideString; safecall; procedure Set_peakColor(const pVal:WideString); safecall; function Get_horizontalSpacing : Integer; safecall; procedure Set_horizontalSpacing(const pVal:Integer); safecall; function Get_levelWidth : Integer; safecall; procedure Set_levelWidth(const pVal:Integer); safecall; function Get_levelScale : Single; safecall; procedure Set_levelScale(const pVal:Single); safecall; function Get_fadeRate : Integer; safecall; procedure Set_fadeRate(const pVal:Integer); safecall; function Get_fadeMode : Integer; safecall; procedure Set_fadeMode(const pVal:Integer); safecall; function Get_transparent : WordBool; safecall; procedure Set_transparent(const pVal:WordBool); safecall; // displayMode : property displayMode property displayMode:Integer read Get_displayMode write Set_displayMode; // showPeaks : property showPeaks property showPeaks:WordBool read Get_showPeaks write Set_showPeaks; // peakHangTime : property peakHangTime property peakHangTime:Integer read Get_peakHangTime write Set_peakHangTime; // peakFallbackAcceleration : property peakFallbackAcceleration property peakFallbackAcceleration:Single read Get_peakFallbackAcceleration write Set_peakFallbackAcceleration; // peakFallbackSpeed : property peakFallbackSpeed property peakFallbackSpeed:Single read Get_peakFallbackSpeed write Set_peakFallbackSpeed; // levelFallbackAcceleration : property levelFallbackAcceleration property levelFallbackAcceleration:Single read Get_levelFallbackAcceleration write Set_levelFallbackAcceleration; // levelFallbackSpeed : property levelFallbackSpeed property levelFallbackSpeed:Single read Get_levelFallbackSpeed write Set_levelFallbackSpeed; // backgroundColor : property backgroundColor property backgroundColor:WideString read Get_backgroundColor write Set_backgroundColor; // levelColor : property levelColor property levelColor:WideString read Get_levelColor write Set_levelColor; // peakColor : property peakColor property peakColor:WideString read Get_peakColor write Set_peakColor; // horizontalSpacing : property horizontalSpacing property horizontalSpacing:Integer read Get_horizontalSpacing write Set_horizontalSpacing; // levelWidth : property levelWidth property levelWidth:Integer read Get_levelWidth write Set_levelWidth; // levelScale : property levelScale property levelScale:Single read Get_levelScale write Set_levelScale; // fadeRate : property fadeRate property fadeRate:Integer read Get_fadeRate write Set_fadeRate; // fadeMode : property fadeMode property fadeMode:Integer read Get_fadeMode write Set_fadeMode; // transparent : property transparent property transparent:WordBool read Get_transparent write Set_transparent; end; // IBarsEffect : IBarsEffect: Not Public. Internal interface used by Windows Media Player. IBarsEffectDisp = dispinterface ['{33E9291A-F6A9-11D2-9435-00A0C92A2F2D}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // displayMode : property displayMode property displayMode:Integer dispid 8000; // showPeaks : property showPeaks property showPeaks:WordBool dispid 8001; // peakHangTime : property peakHangTime property peakHangTime:Integer dispid 8002; // peakFallbackAcceleration : property peakFallbackAcceleration property peakFallbackAcceleration:Single dispid 8003; // peakFallbackSpeed : property peakFallbackSpeed property peakFallbackSpeed:Single dispid 8004; // levelFallbackAcceleration : property levelFallbackAcceleration property levelFallbackAcceleration:Single dispid 8005; // levelFallbackSpeed : property levelFallbackSpeed property levelFallbackSpeed:Single dispid 8006; // backgroundColor : property backgroundColor property backgroundColor:WideString dispid 8007; // levelColor : property levelColor property levelColor:WideString dispid 8008; // peakColor : property peakColor property peakColor:WideString dispid 8009; // horizontalSpacing : property horizontalSpacing property horizontalSpacing:Integer dispid 8010; // levelWidth : property levelWidth property levelWidth:Integer dispid 8012; // levelScale : property levelScale property levelScale:Single dispid 8013; // fadeRate : property fadeRate property fadeRate:Integer dispid 8014; // fadeMode : property fadeMode property fadeMode:Integer dispid 8015; // transparent : property transparent property transparent:WordBool dispid 8016; end; // IWMPExternal : IWMPExternal: Public interface for scripting object model. IWMPExternal = interface(IDispatch) ['{E2CC638C-FD2C-409B-A1EA-5DDB72DC8E84}'] function Get_version : WideString; safecall; function Get_appColorLight : WideString; safecall; procedure Set_OnColorChange(const Param1:IDispatch); safecall; // version : property version:WideString read Get_version; // appColorLight : property appColorLight:WideString read Get_appColorLight; // OnColorChange : property OnColorChange:IDispatch write Set_OnColorChange; end; // IWMPExternal : IWMPExternal: Public interface for scripting object model. IWMPExternalDisp = dispinterface ['{E2CC638C-FD2C-409B-A1EA-5DDB72DC8E84}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; end; // IWMPExternalColors : IWMPExternalColors: Public interface for scripting object model. IWMPExternalColors = interface(IWMPExternal) ['{D10CCDFF-472D-498C-B5FE-3630E5405E0A}'] function Get_appColorMedium : WideString; safecall; function Get_appColorDark : WideString; safecall; function Get_appColorButtonHighlight : WideString; safecall; function Get_appColorButtonShadow : WideString; safecall; function Get_appColorButtonHoverFace : WideString; safecall; // appColorMedium : property appColorMedium:WideString read Get_appColorMedium; // appColorDark : property appColorDark:WideString read Get_appColorDark; // appColorButtonHighlight : property appColorButtonHighlight:WideString read Get_appColorButtonHighlight; // appColorButtonShadow : property appColorButtonShadow:WideString read Get_appColorButtonShadow; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString read Get_appColorButtonHoverFace; end; // IWMPExternalColors : IWMPExternalColors: Public interface for scripting object model. IWMPExternalColorsDisp = dispinterface ['{D10CCDFF-472D-498C-B5FE-3630E5405E0A}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; end; // IWMPSubscriptionServiceLimited : IWMPSubscriptionServiceLimited: Public interface for scripting object model. IWMPSubscriptionServiceLimited = interface(IWMPExternalColors) ['{54DF358E-CF38-4010-99F1-F44B0E9000E5}'] // NavigateTaskPaneURL : procedure NavigateTaskPaneURL(bstrKeyName:WideString;bstrTaskPane:WideString;bstrParams:WideString);safecall; procedure Set_SelectedTaskPane(const bstrTaskPane:WideString); safecall; function Get_SelectedTaskPane : WideString; safecall; // SelectedTaskPane : property SelectedTaskPane:WideString read Get_SelectedTaskPane write Set_SelectedTaskPane; end; // IWMPSubscriptionServiceLimited : IWMPSubscriptionServiceLimited: Public interface for scripting object model. IWMPSubscriptionServiceLimitedDisp = dispinterface ['{54DF358E-CF38-4010-99F1-F44B0E9000E5}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // NavigateTaskPaneURL : procedure NavigateTaskPaneURL(bstrKeyName:WideString;bstrTaskPane:WideString;bstrParams:WideString);dispid 10026; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; // SelectedTaskPane : property SelectedTaskPane:WideString dispid 10027; end; // IWMPSubscriptionServiceExternal : IWMPSubscriptionServiceExternal: Public interface for scripting object model. IWMPSubscriptionServiceExternal = interface(IWMPSubscriptionServiceLimited) ['{2E922378-EE70-4CEB-BBAB-CE7CE4A04816}'] function Get_DownloadManager : IWMPDownloadManager; safecall; // DownloadManager : property DownloadManager:IWMPDownloadManager read Get_DownloadManager; end; // IWMPSubscriptionServiceExternal : IWMPSubscriptionServiceExternal: Public interface for scripting object model. IWMPSubscriptionServiceExternalDisp = dispinterface ['{2E922378-EE70-4CEB-BBAB-CE7CE4A04816}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // NavigateTaskPaneURL : procedure NavigateTaskPaneURL(bstrKeyName:WideString;bstrTaskPane:WideString;bstrParams:WideString);dispid 10026; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; // SelectedTaskPane : property SelectedTaskPane:WideString dispid 10027; // DownloadManager : property DownloadManager:IWMPDownloadManager readonly dispid 10009; end; // IWMPDownloadManager : IWMPDownloadManager: Public interface. IWMPDownloadManager = interface(IDispatch) ['{E15E9AD1-8F20-4CC4-9EC7-1A328CA86A0D}'] // getDownloadCollection : Returns a specific download collection function getDownloadCollection(lCollectionId:Integer):IWMPDownloadCollection;safecall; // createDownloadCollection : Creates a download collection function createDownloadCollection:IWMPDownloadCollection;safecall; end; // IWMPDownloadManager : IWMPDownloadManager: Public interface. IWMPDownloadManagerDisp = dispinterface ['{E15E9AD1-8F20-4CC4-9EC7-1A328CA86A0D}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // getDownloadCollection : Returns a specific download collection function getDownloadCollection(lCollectionId:Integer):IWMPDownloadCollection;dispid 1151; // createDownloadCollection : Creates a download collection function createDownloadCollection:IWMPDownloadCollection;dispid 1152; end; // IWMPDownloadCollection : IWMPDownloadCollection: Public interface. IWMPDownloadCollection = interface(IDispatch) ['{0A319C7F-85F9-436C-B88E-82FD88000E1C}'] function Get_ID : Integer; safecall; function Get_count : Integer; safecall; // Item : Returns a pending download object function Item(lItem:Integer):IWMPDownloadItem2;safecall; // startDownload : Queues a download function startDownload(bstrSourceURL:WideString;bstrType:WideString):IWMPDownloadItem2;safecall; // removeItem : Remove a download from the collection. Cancel if in progress. procedure removeItem(lItem:Integer);safecall; // clear : Clear the download collection procedure clear;safecall; // ID : Returns the unique identifier of the collection property ID:Integer read Get_ID; // count : Returns the number of pending downloads property count:Integer read Get_count; end; // IWMPDownloadCollection : IWMPDownloadCollection: Public interface. IWMPDownloadCollectionDisp = dispinterface ['{0A319C7F-85F9-436C-B88E-82FD88000E1C}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // Item : Returns a pending download object function Item(lItem:Integer):IWMPDownloadItem2;dispid 1203; // startDownload : Queues a download function startDownload(bstrSourceURL:WideString;bstrType:WideString):IWMPDownloadItem2;dispid 1204; // removeItem : Remove a download from the collection. Cancel if in progress. procedure removeItem(lItem:Integer);dispid 1205; // clear : Clear the download collection procedure clear;dispid 1206; // ID : Returns the unique identifier of the collection property ID:Integer readonly dispid 1201; // count : Returns the number of pending downloads property count:Integer readonly dispid 1202; end; // IWMPDownloadItem : IWMPDownloadItem: Public interface. IWMPDownloadItem = interface(IDispatch) ['{C9470E8E-3F6B-46A9-A0A9-452815C34297}'] function Get_sourceURL : WideString; safecall; function Get_size : Integer; safecall; function Get_type_ : WideString; safecall; function Get_progress : Integer; safecall; function Get_downloadState : WMPSubscriptionDownloadState; safecall; // pause : Pauses the download procedure pause;safecall; // resume : Resumes the download procedure resume;safecall; // cancel : Cancels the download procedure cancel;safecall; // sourceURL : Returns the source URL of the download property sourceURL:WideString read Get_sourceURL; // size : Returns the size of the download property size:Integer read Get_size; // type : Returns the type of the download property type_:WideString read Get_type_; // progress : Returns the progress (in bytes) of the download property progress:Integer read Get_progress; // downloadState : Returns the state of the download property downloadState:WMPSubscriptionDownloadState read Get_downloadState; end; // IWMPDownloadItem : IWMPDownloadItem: Public interface. IWMPDownloadItemDisp = dispinterface ['{C9470E8E-3F6B-46A9-A0A9-452815C34297}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // pause : Pauses the download procedure pause;dispid 1256; // resume : Resumes the download procedure resume;dispid 1257; // cancel : Cancels the download procedure cancel;dispid 1258; // sourceURL : Returns the source URL of the download property sourceURL:WideString readonly dispid 1251; // size : Returns the size of the download property size:Integer readonly dispid 1252; // type : Returns the type of the download property type_:WideString readonly dispid 1253; // progress : Returns the progress (in bytes) of the download property progress:Integer readonly dispid 1254; // downloadState : Returns the state of the download property downloadState:WMPSubscriptionDownloadState readonly dispid 1255; end; // IWMPDownloadItem2 : IWMPDownloadItem2: Public interface. IWMPDownloadItem2 = interface(IWMPDownloadItem) ['{9FBB3336-6DA3-479D-B8FF-67D46E20A987}'] // getItemInfo : Returns the value of specified attribute for this download item function getItemInfo(bstrItemName:WideString):WideString;safecall; end; // IWMPDownloadItem2 : IWMPDownloadItem2: Public interface. IWMPDownloadItem2Disp = dispinterface ['{9FBB3336-6DA3-479D-B8FF-67D46E20A987}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // pause : Pauses the download procedure pause;dispid 1256; // resume : Resumes the download procedure resume;dispid 1257; // cancel : Cancels the download procedure cancel;dispid 1258; // getItemInfo : Returns the value of specified attribute for this download item function getItemInfo(bstrItemName:WideString):WideString;dispid 1301; // sourceURL : Returns the source URL of the download property sourceURL:WideString readonly dispid 1251; // size : Returns the size of the download property size:Integer readonly dispid 1252; // type : Returns the type of the download property type_:WideString readonly dispid 1253; // progress : Returns the progress (in bytes) of the download property progress:Integer readonly dispid 1254; // downloadState : Returns the state of the download property downloadState:WMPSubscriptionDownloadState readonly dispid 1255; end; // IWMPSubscriptionServicePlayMedia : IWMPSubscriptionServicePlayMedia: Public interface for scripting object model. IWMPSubscriptionServicePlayMedia = interface(IWMPSubscriptionServiceLimited) ['{5F0248C1-62B3-42D7-B927-029119E6AD14}'] // playMedia : method playMedia procedure playMedia(bstrURL:WideString);safecall; end; // IWMPSubscriptionServicePlayMedia : IWMPSubscriptionServicePlayMedia: Public interface for scripting object model. IWMPSubscriptionServicePlayMediaDisp = dispinterface ['{5F0248C1-62B3-42D7-B927-029119E6AD14}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // NavigateTaskPaneURL : procedure NavigateTaskPaneURL(bstrKeyName:WideString;bstrTaskPane:WideString;bstrParams:WideString);dispid 10026; // playMedia : method playMedia procedure playMedia(bstrURL:WideString);dispid 10004; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; // SelectedTaskPane : property SelectedTaskPane:WideString dispid 10027; end; // IWMPDiscoExternal : IWMPDiscoExternal: Public interface for scripting object model. IWMPDiscoExternal = interface(IWMPSubscriptionServiceExternal) ['{A915CEA2-72DF-41E1-A576-EF0BAE5E5169}'] procedure Set_OnLoginChange(const Param1:IDispatch); safecall; function Get_userLoggedIn : WordBool; safecall; // attemptLogin : procedure attemptLogin;safecall; function Get_accountType : WideString; safecall; procedure Set_OnViewChange(const Param1:IDispatch); safecall; // changeView : procedure changeView(bstrLibraryLocationType:WideString;bstrLibraryLocationID:WideString;bstrFilter:WideString;bstrViewParams:WideString);safecall; // changeViewOnlineList : procedure changeViewOnlineList(bstrLibraryLocationType:WideString;bstrLibraryLocationID:WideString;bstrParams:WideString;bstrFriendlyName:WideString;bstrListType:WideString;bstrViewMode:WideString);safecall; function Get_libraryLocationType : WideString; safecall; function Get_libraryLocationID : WideString; safecall; function Get_selectedItemType : WideString; safecall; function Get_selectedItemID : WideString; safecall; function Get_filter : WideString; safecall; function Get_task : WideString; safecall; function Get_viewParameters : WideString; safecall; // cancelNavigate : procedure cancelNavigate;safecall; // showPopup : procedure showPopup(lPopupIndex:Integer;bstrParameters:WideString);safecall; // addToBasket : procedure addToBasket(bstrViewType:WideString;bstrViewIDs:WideString);safecall; function Get_basketTitle : WideString; safecall; // play : procedure play(bstrLibraryLocationType:WideString;bstrLibraryLocationIDs:WideString);safecall; // download : procedure download(bstrViewType:WideString;bstrViewIDs:WideString);safecall; // buy : procedure buy(bstrViewType:WideString;bstrViewIDs:WideString);safecall; // saveCurrentViewToLibrary : procedure saveCurrentViewToLibrary(bstrFriendlyListType:WideString;fDynamic:WordBool);safecall; // authenticate : procedure authenticate(lAuthenticationIndex:Integer);safecall; // sendMessage : procedure sendMessage(bstrMsg:WideString;bstrParam:WideString);safecall; procedure Set_OnSendMessageComplete(const Param1:IDispatch); safecall; procedure Set_ignoreIEHistory(const Param1:WordBool); safecall; function Get_pluginRunning : WordBool; safecall; function Get_templateBeingDisplayedInLocalLibrary : WordBool; safecall; procedure Set_OnChangeViewError(const Param1:IDispatch); safecall; procedure Set_OnChangeViewOnlineListError(const Param1:IDispatch); safecall; // OnLoginChange : property OnLoginChange:IDispatch write Set_OnLoginChange; // userLoggedIn : property userLoggedIn:WordBool read Get_userLoggedIn; // accountType : property accountType:WideString read Get_accountType; // OnViewChange : property OnViewChange:IDispatch write Set_OnViewChange; // libraryLocationType : property libraryLocationType:WideString read Get_libraryLocationType; // libraryLocationID : property libraryLocationID:WideString read Get_libraryLocationID; // selectedItemType : property selectedItemType:WideString read Get_selectedItemType; // selectedItemID : property selectedItemID:WideString read Get_selectedItemID; // filter : property filter:WideString read Get_filter; // task : property task:WideString read Get_task; // viewParameters : property viewParameters:WideString read Get_viewParameters; // basketTitle : property basketTitle:WideString read Get_basketTitle; // OnSendMessageComplete : property OnSendMessageComplete:IDispatch write Set_OnSendMessageComplete; // ignoreIEHistory : property ignoreIEHistory:WordBool write Set_ignoreIEHistory; // pluginRunning : property pluginRunning:WordBool read Get_pluginRunning; // templateBeingDisplayedInLocalLibrary : property templateBeingDisplayedInLocalLibrary:WordBool read Get_templateBeingDisplayedInLocalLibrary; // OnChangeViewError : property OnChangeViewError:IDispatch write Set_OnChangeViewError; // OnChangeViewOnlineListError : property OnChangeViewOnlineListError:IDispatch write Set_OnChangeViewOnlineListError; end; // IWMPDiscoExternal : IWMPDiscoExternal: Public interface for scripting object model. IWMPDiscoExternalDisp = dispinterface ['{A915CEA2-72DF-41E1-A576-EF0BAE5E5169}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // NavigateTaskPaneURL : procedure NavigateTaskPaneURL(bstrKeyName:WideString;bstrTaskPane:WideString;bstrParams:WideString);dispid 10026; // attemptLogin : procedure attemptLogin;dispid 10030; // changeView : procedure changeView(bstrLibraryLocationType:WideString;bstrLibraryLocationID:WideString;bstrFilter:WideString;bstrViewParams:WideString);dispid 10033; // changeViewOnlineList : procedure changeViewOnlineList(bstrLibraryLocationType:WideString;bstrLibraryLocationID:WideString;bstrParams:WideString;bstrFriendlyName:WideString;bstrListType:WideString;bstrViewMode:WideString);dispid 10034; // cancelNavigate : procedure cancelNavigate;dispid 10042; // showPopup : procedure showPopup(lPopupIndex:Integer;bstrParameters:WideString);dispid 10043; // addToBasket : procedure addToBasket(bstrViewType:WideString;bstrViewIDs:WideString);dispid 10044; // play : procedure play(bstrLibraryLocationType:WideString;bstrLibraryLocationIDs:WideString);dispid 10046; // download : procedure download(bstrViewType:WideString;bstrViewIDs:WideString);dispid 10047; // buy : procedure buy(bstrViewType:WideString;bstrViewIDs:WideString);dispid 10048; // saveCurrentViewToLibrary : procedure saveCurrentViewToLibrary(bstrFriendlyListType:WideString;fDynamic:WordBool);dispid 10049; // authenticate : procedure authenticate(lAuthenticationIndex:Integer);dispid 10050; // sendMessage : procedure sendMessage(bstrMsg:WideString;bstrParam:WideString);dispid 10051; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; // SelectedTaskPane : property SelectedTaskPane:WideString dispid 10027; // DownloadManager : property DownloadManager:IWMPDownloadManager readonly dispid 10009; // OnLoginChange : property OnLoginChange:IDispatch writeonly dispid 10028; // userLoggedIn : property userLoggedIn:WordBool readonly dispid 10029; // accountType : property accountType:WideString readonly dispid 10031; // OnViewChange : property OnViewChange:IDispatch writeonly dispid 10032; // libraryLocationType : property libraryLocationType:WideString readonly dispid 10035; // libraryLocationID : property libraryLocationID:WideString readonly dispid 10036; // selectedItemType : property selectedItemType:WideString readonly dispid 10037; // selectedItemID : property selectedItemID:WideString readonly dispid 10038; // filter : property filter:WideString readonly dispid 10039; // task : property task:WideString readonly dispid 10040; // viewParameters : property viewParameters:WideString readonly dispid 10041; // basketTitle : property basketTitle:WideString readonly dispid 10045; // OnSendMessageComplete : property OnSendMessageComplete:IDispatch writeonly dispid 10052; // ignoreIEHistory : property ignoreIEHistory:WordBool writeonly dispid 10053; // pluginRunning : property pluginRunning:WordBool readonly dispid 10054; // templateBeingDisplayedInLocalLibrary : property templateBeingDisplayedInLocalLibrary:WordBool readonly dispid 10055; // OnChangeViewError : property OnChangeViewError:IDispatch writeonly dispid 10056; // OnChangeViewOnlineListError : property OnChangeViewOnlineListError:IDispatch writeonly dispid 10057; end; // IWMPCDDVDWizardExternal : IWMPCDDVDWizardExternal: Not Public. Internal interface used by Windows Media Player. IWMPCDDVDWizardExternal = interface(IWMPExternalColors) ['{2D7EF888-1D3C-484A-A906-9F49D99BB344}'] // WriteNames : procedure WriteNames(bstrTOC:WideString;bstrMetadata:WideString);safecall; // ReturnToMainTask : procedure ReturnToMainTask;safecall; // WriteNamesEx : procedure WriteNamesEx(type_:WMP_WRITENAMESEX_TYPE;bstrTypeId:WideString;bstrMetadata:WideString;fRenameRegroupFiles:WordBool);safecall; // GetMDQByRequestID : function GetMDQByRequestID(bstrRequestID:WideString):WideString;safecall; // EditMetadata : procedure EditMetadata;safecall; // IsMetadataAvailableForEdit : function IsMetadataAvailableForEdit:WordBool;safecall; // BuyCD : procedure BuyCD(bstrTitle:WideString;bstrArtist:WideString;bstrAlbum:WideString;bstrUFID:WideString;bstrWMID:WideString);safecall; end; // IWMPCDDVDWizardExternal : IWMPCDDVDWizardExternal: Not Public. Internal interface used by Windows Media Player. IWMPCDDVDWizardExternalDisp = dispinterface ['{2D7EF888-1D3C-484A-A906-9F49D99BB344}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // WriteNames : procedure WriteNames(bstrTOC:WideString;bstrMetadata:WideString);dispid 10001; // ReturnToMainTask : procedure ReturnToMainTask;dispid 10002; // WriteNamesEx : procedure WriteNamesEx(type_:WMP_WRITENAMESEX_TYPE;bstrTypeId:WideString;bstrMetadata:WideString;fRenameRegroupFiles:WordBool);dispid 10007; // GetMDQByRequestID : function GetMDQByRequestID(bstrRequestID:WideString):WideString;dispid 10008; // EditMetadata : procedure EditMetadata;dispid 10011; // IsMetadataAvailableForEdit : function IsMetadataAvailableForEdit:WordBool;dispid 10010; // BuyCD : procedure BuyCD(bstrTitle:WideString;bstrArtist:WideString;bstrAlbum:WideString;bstrUFID:WideString;bstrWMID:WideString);dispid 10023; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; // appColorMedium : property appColorMedium:WideString readonly dispid 10013; // appColorDark : property appColorDark:WideString readonly dispid 10014; // appColorButtonHighlight : property appColorButtonHighlight:WideString readonly dispid 10015; // appColorButtonShadow : property appColorButtonShadow:WideString readonly dispid 10016; // appColorButtonHoverFace : property appColorButtonHoverFace:WideString readonly dispid 10017; end; // IWMPBaseExternal : IWMPBaseExternal: Public interface for scripting object model. IWMPBaseExternal = interface(IWMPExternal) ['{F81B2A59-02BC-4003-8B2F-C124AF66FC66}'] end; // IWMPBaseExternal : IWMPBaseExternal: Public interface for scripting object model. IWMPBaseExternalDisp = dispinterface ['{F81B2A59-02BC-4003-8B2F-C124AF66FC66}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; end; // IWMPOfflineExternal : IWMPOfflineExternal: Not Public. Internal interface used by Windows Media Player.. IWMPOfflineExternal = interface(IWMPExternal) ['{3148E685-B243-423D-8341-8480D6EFF674}'] // forceOnline : procedure forceOnline;safecall; end; // IWMPOfflineExternal : IWMPOfflineExternal: Not Public. Internal interface used by Windows Media Player.. IWMPOfflineExternalDisp = dispinterface ['{3148E685-B243-423D-8341-8480D6EFF674}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // forceOnline : procedure forceOnline;dispid 10025; // version : property version:WideString readonly dispid 10005; // appColorLight : property appColorLight:WideString readonly dispid 10012; // OnColorChange : property OnColorChange:IDispatch writeonly dispid 10018; end; // IWMPDMRAVTransportService : IWMPDMRAVTransportService Interface IWMPDMRAVTransportService = interface(IDispatch) ['{4E195DB1-9E29-47FC-9CE1-DE9937D32925}'] function Get_TransportState : WideString; safecall; function Get_TransportStatus : WideString; safecall; function Get_PlaybackStorageMedium : WideString; safecall; function Get_RecordStorageMedium : WideString; safecall; function Get_PossiblePlaybackStorageMedia : WideString; safecall; function Get_PossibleRecordStorageMedia : WideString; safecall; function Get_CurrentPlayMode : WideString; safecall; function Get_TransportPlaySpeed : WideString; safecall; function Get_RecordMediumWriteStatus : WideString; safecall; function Get_CurrentRecordQualityMode : WideString; safecall; function Get_PossibleRecordQualityModes : WideString; safecall; function Get_NumberOfTracks : LongWord; safecall; function Get_CurrentTrack : LongWord; safecall; function Get_CurrentTrackDuration : WideString; safecall; function Get_CurrentMediaDuration : WideString; safecall; function Get_CurrentTrackMetaData : WideString; safecall; function Get_CurrentTrackURI : WideString; safecall; function Get_AVTransportURI : WideString; safecall; function Get_AVTransportURIMetaData : WideString; safecall; function Get_NextAVTransportURI : WideString; safecall; function Get_NextAVTransportURIMetaData : WideString; safecall; function Get_RelativeTimePosition : WideString; safecall; function Get_AbsoluteTimePosition : WideString; safecall; function Get_RelativeCounterPosition : Integer; safecall; function Get_AbsoluteCounterPosition : Integer; safecall; function Get_CurrentTransportActions : WideString; safecall; function Get_LastChange : WideString; safecall; function Get_A_ARG_TYPE_SeekMode : WideString; safecall; function Get_A_ARG_TYPE_SeekTarget : WideString; safecall; function Get_A_ARG_TYPE_InstanceID : LongWord; safecall; function Get_CurrentProtocolInfo : WideString; safecall; // SetAVTransportURI : Method SetAVTransportURI procedure SetAVTransportURI(punkRemoteEndpointInfo:IUnknown;ulInstanceID:LongWord;bstrCurrentURI:WideString;bstrCurrentURIMetaData:WideString);safecall; // GetMediaInfo : Method GetMediaInfo procedure GetMediaInfo(ulInstanceID:LongWord;out pulNumTracks:LongWord;out pbstrMediaDuration:WideString;out pbstrCurrentURI:WideString;out pbstrCurrentURIMetaData:WideString;out pbstrNextURI:WideString;out pNextURIMetaData:WideString;out pbstrPlayMedium:WideString;out pbstrRecordMedium:WideString;out pbstrWriteStatus:WideString);safecall; // GetTransportInfo : Method GetTransportInfo procedure GetTransportInfo(ulInstanceID:LongWord;out pbstrCurrentTransportState:WideString;out pbstrCurrentTransportStatus:WideString;out pbstrCurrentSpeed:WideString);safecall; // GetPositionInfo : Method GetPositionInfo procedure GetPositionInfo(ulInstanceID:LongWord;out pTrack:LongWord;out pbstrTrackDuration:WideString;out pbstrTrackMetaData:WideString;out pbstrTrackURI:WideString;out pbstrRelTime:WideString;out pbstrAbsTime:WideString;out plRelCount:Integer;out plAbsCount:Integer);safecall; // GetDeviceCapabilities : Method GetDeviceCapabilities procedure GetDeviceCapabilities(ulInstanceID:LongWord;out pbstrPlayMedia:WideString;out pbstrRecMedia:WideString;out pbstrRecQualityModes:WideString);safecall; // GetTransportSettings : Method GetTransportSettings procedure GetTransportSettings(ulInstanceID:LongWord;out pbstrPlayMode:WideString;out pbstrRecQualityMode:WideString);safecall; // stop : Method Stop procedure stop(ulInstanceID:LongWord);safecall; // play : Method Play procedure play(ulInstanceID:LongWord;bstrSpeed:WideString);safecall; // pause : Method Pause procedure pause(ulInstanceID:LongWord);safecall; // Seek : Method Seek procedure Seek(ulInstanceID:LongWord;bstrUnit:WideString;bstrTarget:WideString);safecall; // next : Method Next procedure next(ulInstanceID:LongWord);safecall; // previous : Method Previous procedure previous(ulInstanceID:LongWord);safecall; // GetCurrentTransportActions : Method GetCurrentTransportActions procedure GetCurrentTransportActions(ulInstanceID:LongWord;var pbstrActions:WideString);safecall; // SetNextAVTransportURI : Method SetNextAVTransportURI procedure SetNextAVTransportURI(punkRemoteEndpointInfo:IUnknown;ulInstanceID:LongWord;bstrNextURI:WideString;bstrNextURIMetaData:WideString);safecall; // TransportState : Property TransportState property TransportState:WideString read Get_TransportState; // TransportStatus : Property TransportStatus property TransportStatus:WideString read Get_TransportStatus; // PlaybackStorageMedium : Property PlaybackStorageMedium property PlaybackStorageMedium:WideString read Get_PlaybackStorageMedium; // RecordStorageMedium : Property RecordStorageMedium property RecordStorageMedium:WideString read Get_RecordStorageMedium; // PossiblePlaybackStorageMedia : Property PossiblePlaybackStorageMedia property PossiblePlaybackStorageMedia:WideString read Get_PossiblePlaybackStorageMedia; // PossibleRecordStorageMedia : Property PossibleRecordStorageMedia property PossibleRecordStorageMedia:WideString read Get_PossibleRecordStorageMedia; // CurrentPlayMode : Property CurrentPlayMode property CurrentPlayMode:WideString read Get_CurrentPlayMode; // TransportPlaySpeed : Property TransportPlaySpeed property TransportPlaySpeed:WideString read Get_TransportPlaySpeed; // RecordMediumWriteStatus : Property RecordMediumWriteStatus property RecordMediumWriteStatus:WideString read Get_RecordMediumWriteStatus; // CurrentRecordQualityMode : Property CurrentRecordQualityMode property CurrentRecordQualityMode:WideString read Get_CurrentRecordQualityMode; // PossibleRecordQualityModes : Property PossibleRecordQualityModes property PossibleRecordQualityModes:WideString read Get_PossibleRecordQualityModes; // NumberOfTracks : Property NumberOfTracks property NumberOfTracks:LongWord read Get_NumberOfTracks; // CurrentTrack : Property CurrentTrack property CurrentTrack:LongWord read Get_CurrentTrack; // CurrentTrackDuration : Property CurrentTrackDuration property CurrentTrackDuration:WideString read Get_CurrentTrackDuration; // CurrentMediaDuration : Property CurrentMediaDuration property CurrentMediaDuration:WideString read Get_CurrentMediaDuration; // CurrentTrackMetaData : Property CurrentTrackMetaData property CurrentTrackMetaData:WideString read Get_CurrentTrackMetaData; // CurrentTrackURI : Property CurrentTrackURI property CurrentTrackURI:WideString read Get_CurrentTrackURI; // AVTransportURI : Property AVTransportURI property AVTransportURI:WideString read Get_AVTransportURI; // AVTransportURIMetaData : Property AVTransportURIMetaData property AVTransportURIMetaData:WideString read Get_AVTransportURIMetaData; // NextAVTransportURI : Property NextAVTransportURI property NextAVTransportURI:WideString read Get_NextAVTransportURI; // NextAVTransportURIMetaData : Property NextAVTransportURIMetaData property NextAVTransportURIMetaData:WideString read Get_NextAVTransportURIMetaData; // RelativeTimePosition : Property RelativeTimePosition property RelativeTimePosition:WideString read Get_RelativeTimePosition; // AbsoluteTimePosition : Property AbsoluteTimePosition property AbsoluteTimePosition:WideString read Get_AbsoluteTimePosition; // RelativeCounterPosition : Property RelativeCounterPosition property RelativeCounterPosition:Integer read Get_RelativeCounterPosition; // AbsoluteCounterPosition : Property AbsoluteCounterPosition property AbsoluteCounterPosition:Integer read Get_AbsoluteCounterPosition; // CurrentTransportActions : Property CurrentTransportActions property CurrentTransportActions:WideString read Get_CurrentTransportActions; // LastChange : Property LastChange property LastChange:WideString read Get_LastChange; // A_ARG_TYPE_SeekMode : Property A_ARG_TYPE_SeekMode property A_ARG_TYPE_SeekMode:WideString read Get_A_ARG_TYPE_SeekMode; // A_ARG_TYPE_SeekTarget : Property A_ARG_TYPE_SeekTarget property A_ARG_TYPE_SeekTarget:WideString read Get_A_ARG_TYPE_SeekTarget; // A_ARG_TYPE_InstanceID : Property A_ARG_TYPE_InstanceID property A_ARG_TYPE_InstanceID:LongWord read Get_A_ARG_TYPE_InstanceID; // CurrentProtocolInfo : Property CurrentProtocolInfo property CurrentProtocolInfo:WideString read Get_CurrentProtocolInfo; end; // IWMPDMRAVTransportService : IWMPDMRAVTransportService Interface IWMPDMRAVTransportServiceDisp = dispinterface ['{4E195DB1-9E29-47FC-9CE1-DE9937D32925}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // SetAVTransportURI : Method SetAVTransportURI procedure SetAVTransportURI(punkRemoteEndpointInfo:IUnknown;ulInstanceID:LongWord;bstrCurrentURI:WideString;bstrCurrentURIMetaData:WideString);dispid 31; // GetMediaInfo : Method GetMediaInfo procedure GetMediaInfo(ulInstanceID:LongWord;out pulNumTracks:LongWord;out pbstrMediaDuration:WideString;out pbstrCurrentURI:WideString;out pbstrCurrentURIMetaData:WideString;out pbstrNextURI:WideString;out pNextURIMetaData:WideString;out pbstrPlayMedium:WideString;out pbstrRecordMedium:WideString;out pbstrWriteStatus:WideString);dispid 33; // GetTransportInfo : Method GetTransportInfo procedure GetTransportInfo(ulInstanceID:LongWord;out pbstrCurrentTransportState:WideString;out pbstrCurrentTransportStatus:WideString;out pbstrCurrentSpeed:WideString);dispid 34; // GetPositionInfo : Method GetPositionInfo procedure GetPositionInfo(ulInstanceID:LongWord;out pTrack:LongWord;out pbstrTrackDuration:WideString;out pbstrTrackMetaData:WideString;out pbstrTrackURI:WideString;out pbstrRelTime:WideString;out pbstrAbsTime:WideString;out plRelCount:Integer;out plAbsCount:Integer);dispid 35; // GetDeviceCapabilities : Method GetDeviceCapabilities procedure GetDeviceCapabilities(ulInstanceID:LongWord;out pbstrPlayMedia:WideString;out pbstrRecMedia:WideString;out pbstrRecQualityModes:WideString);dispid 36; // GetTransportSettings : Method GetTransportSettings procedure GetTransportSettings(ulInstanceID:LongWord;out pbstrPlayMode:WideString;out pbstrRecQualityMode:WideString);dispid 37; // stop : Method Stop procedure stop(ulInstanceID:LongWord);dispid 38; // play : Method Play procedure play(ulInstanceID:LongWord;bstrSpeed:WideString);dispid 39; // pause : Method Pause procedure pause(ulInstanceID:LongWord);dispid 40; // Seek : Method Seek procedure Seek(ulInstanceID:LongWord;bstrUnit:WideString;bstrTarget:WideString);dispid 41; // next : Method Next procedure next(ulInstanceID:LongWord);dispid 42; // previous : Method Previous procedure previous(ulInstanceID:LongWord);dispid 43; // GetCurrentTransportActions : Method GetCurrentTransportActions procedure GetCurrentTransportActions(ulInstanceID:LongWord;var pbstrActions:WideString);dispid 44; // SetNextAVTransportURI : Method SetNextAVTransportURI procedure SetNextAVTransportURI(punkRemoteEndpointInfo:IUnknown;ulInstanceID:LongWord;bstrNextURI:WideString;bstrNextURIMetaData:WideString);dispid 32; // TransportState : Property TransportState property TransportState:WideString readonly dispid 1; // TransportStatus : Property TransportStatus property TransportStatus:WideString readonly dispid 2; // PlaybackStorageMedium : Property PlaybackStorageMedium property PlaybackStorageMedium:WideString readonly dispid 3; // RecordStorageMedium : Property RecordStorageMedium property RecordStorageMedium:WideString readonly dispid 4; // PossiblePlaybackStorageMedia : Property PossiblePlaybackStorageMedia property PossiblePlaybackStorageMedia:WideString readonly dispid 5; // PossibleRecordStorageMedia : Property PossibleRecordStorageMedia property PossibleRecordStorageMedia:WideString readonly dispid 6; // CurrentPlayMode : Property CurrentPlayMode property CurrentPlayMode:WideString readonly dispid 7; // TransportPlaySpeed : Property TransportPlaySpeed property TransportPlaySpeed:WideString readonly dispid 8; // RecordMediumWriteStatus : Property RecordMediumWriteStatus property RecordMediumWriteStatus:WideString readonly dispid 9; // CurrentRecordQualityMode : Property CurrentRecordQualityMode property CurrentRecordQualityMode:WideString readonly dispid 10; // PossibleRecordQualityModes : Property PossibleRecordQualityModes property PossibleRecordQualityModes:WideString readonly dispid 11; // NumberOfTracks : Property NumberOfTracks property NumberOfTracks:LongWord readonly dispid 12; // CurrentTrack : Property CurrentTrack property CurrentTrack:LongWord readonly dispid 13; // CurrentTrackDuration : Property CurrentTrackDuration property CurrentTrackDuration:WideString readonly dispid 14; // CurrentMediaDuration : Property CurrentMediaDuration property CurrentMediaDuration:WideString readonly dispid 15; // CurrentTrackMetaData : Property CurrentTrackMetaData property CurrentTrackMetaData:WideString readonly dispid 16; // CurrentTrackURI : Property CurrentTrackURI property CurrentTrackURI:WideString readonly dispid 17; // AVTransportURI : Property AVTransportURI property AVTransportURI:WideString readonly dispid 18; // AVTransportURIMetaData : Property AVTransportURIMetaData property AVTransportURIMetaData:WideString readonly dispid 19; // NextAVTransportURI : Property NextAVTransportURI property NextAVTransportURI:WideString readonly dispid 20; // NextAVTransportURIMetaData : Property NextAVTransportURIMetaData property NextAVTransportURIMetaData:WideString readonly dispid 21; // RelativeTimePosition : Property RelativeTimePosition property RelativeTimePosition:WideString readonly dispid 22; // AbsoluteTimePosition : Property AbsoluteTimePosition property AbsoluteTimePosition:WideString readonly dispid 23; // RelativeCounterPosition : Property RelativeCounterPosition property RelativeCounterPosition:Integer readonly dispid 24; // AbsoluteCounterPosition : Property AbsoluteCounterPosition property AbsoluteCounterPosition:Integer readonly dispid 25; // CurrentTransportActions : Property CurrentTransportActions property CurrentTransportActions:WideString readonly dispid 26; // LastChange : Property LastChange property LastChange:WideString readonly dispid 27; // A_ARG_TYPE_SeekMode : Property A_ARG_TYPE_SeekMode property A_ARG_TYPE_SeekMode:WideString readonly dispid 28; // A_ARG_TYPE_SeekTarget : Property A_ARG_TYPE_SeekTarget property A_ARG_TYPE_SeekTarget:WideString readonly dispid 29; // A_ARG_TYPE_InstanceID : Property A_ARG_TYPE_InstanceID property A_ARG_TYPE_InstanceID:LongWord readonly dispid 30; // CurrentProtocolInfo : Property CurrentProtocolInfo property CurrentProtocolInfo:WideString readonly dispid 45; end; // IWMPDMRConnectionManagerService : IWMPDMRConnectionManagerService = interface(IDispatch) ['{FB61CD38-8DE7-4479-8B76-A8D097C20C70}'] function Get_SourceProtocolInfo : WideString; safecall; function Get_SinkProtocolInfo : WideString; safecall; function Get_CurrentConnectionIDs : WideString; safecall; function Get_A_ARG_TYPE_ConnectionStatus : WideString; safecall; function Get_A_ARG_TYPE_ConnectionManager : WideString; safecall; function Get_A_ARG_TYPE_Direction : WideString; safecall; function Get_A_ARG_TYPE_ProtocolInfo : WideString; safecall; function Get_A_ARG_TYPE_ConnectionID : Integer; safecall; function Get_A_ARG_TYPE_AVTransportID : Integer; safecall; function Get_A_ARG_TYPE_RcsID : Integer; safecall; // GetProtocolInfo : Method GetProtocolInfo procedure GetProtocolInfo(var pbstrSource:WideString;var pbstrSink:WideString);safecall; // GetCurrentConnectionIDs : Method GetCurrentConnectionIDs procedure GetCurrentConnectionIDs(var pbstrConnectionIDs:WideString);safecall; // GetCurrentConnectionInfo : Method GetCurrentConnectionInfo procedure GetCurrentConnectionInfo(lConnectionID:Integer;var plResID:Integer;var plAVTransportID:Integer;var pbstrProtocolInfo:WideString;var pbstrPeerConnectionManager:WideString;var plPeerConnectionID:Integer;var pbstrDirection:WideString;var pbstrStatus:WideString);safecall; // SourceProtocolInfo : Property SourceProtocolInfo property SourceProtocolInfo:WideString read Get_SourceProtocolInfo; // SinkProtocolInfo : Property SinkProtocolInfo property SinkProtocolInfo:WideString read Get_SinkProtocolInfo; // CurrentConnectionIDs : Property CurrentConnectionIDs property CurrentConnectionIDs:WideString read Get_CurrentConnectionIDs; // A_ARG_TYPE_ConnectionStatus : Property A_ARG_TYPE_ConnectionStatus property A_ARG_TYPE_ConnectionStatus:WideString read Get_A_ARG_TYPE_ConnectionStatus; // A_ARG_TYPE_ConnectionManager : Property A_ARG_TYPE_ConnectionManager property A_ARG_TYPE_ConnectionManager:WideString read Get_A_ARG_TYPE_ConnectionManager; // A_ARG_TYPE_Direction : Property A_ARG_TYPE_Direction property A_ARG_TYPE_Direction:WideString read Get_A_ARG_TYPE_Direction; // A_ARG_TYPE_ProtocolInfo : Property A_ARG_TYPE_ProtocolInfo property A_ARG_TYPE_ProtocolInfo:WideString read Get_A_ARG_TYPE_ProtocolInfo; // A_ARG_TYPE_ConnectionID : Property A_ARG_TYPE_ConnectionID property A_ARG_TYPE_ConnectionID:Integer read Get_A_ARG_TYPE_ConnectionID; // A_ARG_TYPE_AVTransportID : Property A_ARG_TYPE_AVTransportID property A_ARG_TYPE_AVTransportID:Integer read Get_A_ARG_TYPE_AVTransportID; // A_ARG_TYPE_RcsID : Property A_ARG_TYPE_RcsID property A_ARG_TYPE_RcsID:Integer read Get_A_ARG_TYPE_RcsID; end; // IWMPDMRConnectionManagerService : IWMPDMRConnectionManagerServiceDisp = dispinterface ['{FB61CD38-8DE7-4479-8B76-A8D097C20C70}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // GetProtocolInfo : Method GetProtocolInfo procedure GetProtocolInfo(var pbstrSource:WideString;var pbstrSink:WideString);dispid 11; // GetCurrentConnectionIDs : Method GetCurrentConnectionIDs procedure GetCurrentConnectionIDs(var pbstrConnectionIDs:WideString);dispid 12; // GetCurrentConnectionInfo : Method GetCurrentConnectionInfo procedure GetCurrentConnectionInfo(lConnectionID:Integer;var plResID:Integer;var plAVTransportID:Integer;var pbstrProtocolInfo:WideString;var pbstrPeerConnectionManager:WideString;var plPeerConnectionID:Integer;var pbstrDirection:WideString;var pbstrStatus:WideString);dispid 13; // SourceProtocolInfo : Property SourceProtocolInfo property SourceProtocolInfo:WideString readonly dispid 1; // SinkProtocolInfo : Property SinkProtocolInfo property SinkProtocolInfo:WideString readonly dispid 2; // CurrentConnectionIDs : Property CurrentConnectionIDs property CurrentConnectionIDs:WideString readonly dispid 3; // A_ARG_TYPE_ConnectionStatus : Property A_ARG_TYPE_ConnectionStatus property A_ARG_TYPE_ConnectionStatus:WideString readonly dispid 4; // A_ARG_TYPE_ConnectionManager : Property A_ARG_TYPE_ConnectionManager property A_ARG_TYPE_ConnectionManager:WideString readonly dispid 5; // A_ARG_TYPE_Direction : Property A_ARG_TYPE_Direction property A_ARG_TYPE_Direction:WideString readonly dispid 6; // A_ARG_TYPE_ProtocolInfo : Property A_ARG_TYPE_ProtocolInfo property A_ARG_TYPE_ProtocolInfo:WideString readonly dispid 7; // A_ARG_TYPE_ConnectionID : Property A_ARG_TYPE_ConnectionID property A_ARG_TYPE_ConnectionID:Integer readonly dispid 8; // A_ARG_TYPE_AVTransportID : Property A_ARG_TYPE_AVTransportID property A_ARG_TYPE_AVTransportID:Integer readonly dispid 9; // A_ARG_TYPE_RcsID : Property A_ARG_TYPE_RcsID property A_ARG_TYPE_RcsID:Integer readonly dispid 10; end; // IWMPDMRRenderingControlService : IWMPDMRRenderingControlService Interface IWMPDMRRenderingControlService = interface(IDispatch) ['{FF4B1BDA-19F0-42CF-8DDA-19162950C543}'] function Get_LastChange : WideString; safecall; function Get_PresetNameList : WideString; safecall; function Get_mute : WordBool; safecall; function Get_volume : Word; safecall; function Get_A_ARG_TYPE_Channel : WideString; safecall; function Get_A_ARG_TYPE_InstanceID : LongWord; safecall; function Get_A_ARG_TYPE_PresetName : WideString; safecall; // ListPresets : Method ListPresets procedure ListPresets(ulInstanceID:LongWord;var pbstrCurrentPresetList:WideString);safecall; // SelectPreset : Method SelectPreset procedure SelectPreset(ulInstanceID:LongWord;bstrPresetName:WideString);safecall; // GetMute : Method GetMute procedure GetMute(ulInstanceID:LongWord;bstrChannel:WideString;var pbCurrentMute:WordBool);safecall; // SetMute : Method SetMute procedure SetMute(ulInstanceID:LongWord;bstrChannel:WideString;bDesiredMute:WordBool);safecall; // GetVolume : Method GetVolume procedure GetVolume(ulInstanceID:LongWord;bstrChannel:WideString;var puiCurrentVolume:Word);safecall; // SetVolume : Method SetVolume procedure SetVolume(ulInstanceID:LongWord;bstrChannel:WideString;uiDesiredVolume:Word);safecall; // LastChange : Property LastChange property LastChange:WideString read Get_LastChange; // PresetNameList : Property PresetNameList property PresetNameList:WideString read Get_PresetNameList; // mute : Property Mute property mute:WordBool read Get_mute; // volume : Property Volume property volume:Word read Get_volume; // A_ARG_TYPE_Channel : Property A_ARG_TYPE_Channel property A_ARG_TYPE_Channel:WideString read Get_A_ARG_TYPE_Channel; // A_ARG_TYPE_InstanceID : Property A_ARG_TYPE_InstanceID property A_ARG_TYPE_InstanceID:LongWord read Get_A_ARG_TYPE_InstanceID; // A_ARG_TYPE_PresetName : Property A_ARG_TYPE_PresetName property A_ARG_TYPE_PresetName:WideString read Get_A_ARG_TYPE_PresetName; end; // IWMPDMRRenderingControlService : IWMPDMRRenderingControlService Interface IWMPDMRRenderingControlServiceDisp = dispinterface ['{FF4B1BDA-19F0-42CF-8DDA-19162950C543}'] // QueryInterface : procedure QueryInterface(var riid:{!! GUID !!} OleVariant;out ppvObj:{!! Ppointer !!} OleVariant);dispid 1610612736; // AddRef : function AddRef:LongWord;dispid 1610612737; // Release : function Release:LongWord;dispid 1610612738; // GetTypeInfoCount : procedure GetTypeInfoCount(out pctinfo:UInt);dispid 1610678272; // GetTypeInfo : procedure GetTypeInfo(itinfo:UInt;lcid:LongWord;out pptinfo:{!! Ppointer !!} OleVariant);dispid 1610678273; // GetIDsOfNames : procedure GetIDsOfNames(var riid:{!! GUID !!} OleVariant;var rgszNames:{!! PShortInt !!} OleVariant;cNames:UInt;lcid:LongWord;out rgdispid:Integer);dispid 1610678274; // Invoke : procedure Invoke(dispidMember:Integer;var riid:{!! GUID !!} OleVariant;lcid:LongWord;wFlags:Word;var pdispparams:{!! DISPPARAMS !!} OleVariant;out pvarResult:OleVariant;out pexcepinfo:{!! EXCEPINFO !!} OleVariant;out puArgErr:UInt);dispid 1610678275; // ListPresets : Method ListPresets procedure ListPresets(ulInstanceID:LongWord;var pbstrCurrentPresetList:WideString);dispid 8; // SelectPreset : Method SelectPreset procedure SelectPreset(ulInstanceID:LongWord;bstrPresetName:WideString);dispid 9; // GetMute : Method GetMute procedure GetMute(ulInstanceID:LongWord;bstrChannel:WideString;var pbCurrentMute:WordBool);dispid 10; // SetMute : Method SetMute procedure SetMute(ulInstanceID:LongWord;bstrChannel:WideString;bDesiredMute:WordBool);dispid 11; // GetVolume : Method GetVolume procedure GetVolume(ulInstanceID:LongWord;bstrChannel:WideString;var puiCurrentVolume:Word);dispid 12; // SetVolume : Method SetVolume procedure SetVolume(ulInstanceID:LongWord;bstrChannel:WideString;uiDesiredVolume:Word);dispid 13; // LastChange : Property LastChange property LastChange:WideString readonly dispid 1; // PresetNameList : Property PresetNameList property PresetNameList:WideString readonly dispid 2; // mute : Property Mute property mute:WordBool readonly dispid 3; // volume : Property Volume property volume:Word readonly dispid 4; // A_ARG_TYPE_Channel : Property A_ARG_TYPE_Channel property A_ARG_TYPE_Channel:WideString readonly dispid 5; // A_ARG_TYPE_InstanceID : Property A_ARG_TYPE_InstanceID property A_ARG_TYPE_InstanceID:LongWord readonly dispid 6; // A_ARG_TYPE_PresetName : Property A_ARG_TYPE_PresetName property A_ARG_TYPE_PresetName:WideString readonly dispid 7; end; //CoClasses T_WMPOCXEventsOpenStateChange = procedure(Sender: TObject;NewState:Integer) of object; T_WMPOCXEventsPlayStateChange = procedure(Sender: TObject;NewState:Integer) of object; T_WMPOCXEventsAudioLanguageChange = procedure(Sender: TObject;LangID:Integer) of object; T_WMPOCXEventsStatusChange = procedure(Sender: TObject) of object; T_WMPOCXEventsScriptCommand = procedure(Sender: TObject;scType:WideString;Param:WideString) of object; T_WMPOCXEventsNewStream = procedure(Sender: TObject) of object; T_WMPOCXEventsDisconnect = procedure(Sender: TObject;Result:Integer) of object; T_WMPOCXEventsBuffering = procedure(Sender: TObject;Start:WordBool) of object; T_WMPOCXEventsError = procedure(Sender: TObject) of object; T_WMPOCXEventsWarning = procedure(Sender: TObject;WarningType:Integer;Param:Integer;Description:WideString) of object; T_WMPOCXEventsEndOfStream = procedure(Sender: TObject;Result:Integer) of object; T_WMPOCXEventsPositionChange = procedure(Sender: TObject;oldPosition:Double;newPosition:Double) of object; T_WMPOCXEventsMarkerHit = procedure(Sender: TObject;MarkerNum:Integer) of object; T_WMPOCXEventsDurationUnitChange = procedure(Sender: TObject;NewDurationUnit:Integer) of object; T_WMPOCXEventsCdromMediaChange = procedure(Sender: TObject;CdromNum:Integer) of object; T_WMPOCXEventsPlaylistChange = procedure(Sender: TObject;Playlist:IDispatch;change:WMPPlaylistChangeEventType) of object; T_WMPOCXEventsCurrentPlaylistChange = procedure(Sender: TObject;change:WMPPlaylistChangeEventType) of object; T_WMPOCXEventsCurrentPlaylistItemAvailable = procedure(Sender: TObject;bstrItemName:WideString) of object; T_WMPOCXEventsMediaChange = procedure(Sender: TObject;Item:IDispatch) of object; T_WMPOCXEventsCurrentMediaItemAvailable = procedure(Sender: TObject;bstrItemName:WideString) of object; T_WMPOCXEventsCurrentItemChange = procedure(Sender: TObject;pdispMedia:IDispatch) of object; T_WMPOCXEventsMediaCollectionChange = procedure(Sender: TObject) of object; T_WMPOCXEventsMediaCollectionAttributeStringAdded = procedure(Sender: TObject;bstrAttribName:WideString;bstrAttribVal:WideString) of object; T_WMPOCXEventsMediaCollectionAttributeStringRemoved = procedure(Sender: TObject;bstrAttribName:WideString;bstrAttribVal:WideString) of object; T_WMPOCXEventsMediaCollectionAttributeStringChanged = procedure(Sender: TObject;bstrAttribName:WideString;bstrOldAttribVal:WideString;bstrNewAttribVal:WideString) of object; T_WMPOCXEventsPlaylistCollectionChange = procedure(Sender: TObject) of object; T_WMPOCXEventsPlaylistCollectionPlaylistAdded = procedure(Sender: TObject;bstrPlaylistName:WideString) of object; T_WMPOCXEventsPlaylistCollectionPlaylistRemoved = procedure(Sender: TObject;bstrPlaylistName:WideString) of object; T_WMPOCXEventsPlaylistCollectionPlaylistSetAsDeleted = procedure(Sender: TObject;bstrPlaylistName:WideString;varfIsDeleted:WordBool) of object; T_WMPOCXEventsModeChange = procedure(Sender: TObject;ModeName:WideString;NewValue:WordBool) of object; T_WMPOCXEventsMediaError = procedure(Sender: TObject;pMediaObject:IDispatch) of object; T_WMPOCXEventsOpenPlaylistSwitch = procedure(Sender: TObject;pItem:IDispatch) of object; T_WMPOCXEventsDomainChange = procedure(Sender: TObject;strDomain:WideString) of object; T_WMPOCXEventsSwitchedToPlayerApplication = procedure(Sender: TObject) of object; T_WMPOCXEventsSwitchedToControl = procedure(Sender: TObject) of object; T_WMPOCXEventsPlayerDockedStateChange = procedure(Sender: TObject) of object; T_WMPOCXEventsPlayerReconnect = procedure(Sender: TObject) of object; T_WMPOCXEventsClick = procedure(Sender: TObject;nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer) of object; T_WMPOCXEventsDoubleClick = procedure(Sender: TObject;nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer) of object; T_WMPOCXEventsKeyDown = procedure(Sender: TObject;nKeyCode:Smallint;nShiftState:Smallint) of object; T_WMPOCXEventsKeyPress = procedure(Sender: TObject;nKeyAscii:Smallint) of object; T_WMPOCXEventsKeyUp = procedure(Sender: TObject;nKeyCode:Smallint;nShiftState:Smallint) of object; T_WMPOCXEventsMouseDown = procedure(Sender: TObject;nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer) of object; T_WMPOCXEventsMouseMove = procedure(Sender: TObject;nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer) of object; T_WMPOCXEventsMouseUp = procedure(Sender: TObject;nButton:Smallint;nShiftState:Smallint;fX:Integer;fY:Integer) of object; T_WMPOCXEventsDeviceConnect = procedure(Sender: TObject;pDevice:IWMPSyncDevice) of object; T_WMPOCXEventsDeviceDisconnect = procedure(Sender: TObject;pDevice:IWMPSyncDevice) of object; T_WMPOCXEventsDeviceStatusChange = procedure(Sender: TObject;pDevice:IWMPSyncDevice;NewStatus:WMPDeviceStatus) of object; T_WMPOCXEventsDeviceSyncStateChange = procedure(Sender: TObject;pDevice:IWMPSyncDevice;NewState:WMPSyncState) of object; T_WMPOCXEventsDeviceSyncError = procedure(Sender: TObject;pDevice:IWMPSyncDevice;pMedia:IDispatch) of object; T_WMPOCXEventsCreatePartnershipComplete = procedure(Sender: TObject;pDevice:IWMPSyncDevice;hrResult:HResult) of object; T_WMPOCXEventsDeviceEstimation = procedure(Sender: TObject;pDevice:IWMPSyncDevice;hrResult:HResult;qwEstimatedUsedSpace:Int64;qwEstimatedSpace:Int64) of object; T_WMPOCXEventsCdromRipStateChange = procedure(Sender: TObject;pCdromRip:IWMPCdromRip;wmprs:WMPRipState) of object; T_WMPOCXEventsCdromRipMediaError = procedure(Sender: TObject;pCdromRip:IWMPCdromRip;pMedia:IDispatch) of object; T_WMPOCXEventsCdromBurnStateChange = procedure(Sender: TObject;pCdromBurn:IWMPCdromBurn;wmpbs:WMPBurnState) of object; T_WMPOCXEventsCdromBurnMediaError = procedure(Sender: TObject;pCdromBurn:IWMPCdromBurn;pMedia:IDispatch) of object; T_WMPOCXEventsCdromBurnError = procedure(Sender: TObject;pCdromBurn:IWMPCdromBurn;hrError:HResult) of object; T_WMPOCXEventsLibraryConnect = procedure(Sender: TObject;pLibrary:IWMPLibrary) of object; T_WMPOCXEventsLibraryDisconnect = procedure(Sender: TObject;pLibrary:IWMPLibrary) of object; T_WMPOCXEventsFolderScanStateChange = procedure(Sender: TObject;wmpfss:WMPFolderScanState) of object; T_WMPOCXEventsStringCollectionChange = procedure(Sender: TObject;pdispStringCollection:IDispatch;change:WMPStringCollectionChangeEventType;lCollectionIndex:Integer) of object; T_WMPOCXEventsMediaCollectionMediaAdded = procedure(Sender: TObject;pdispMedia:IDispatch) of object; T_WMPOCXEventsMediaCollectionMediaRemoved = procedure(Sender: TObject;pdispMedia:IDispatch) of object; CoWindowsMediaPlayer = Class Public Class Function Create: IWMPPlayer4; Class Function CreateRemote(const MachineName: string): IWMPPlayer4; end; TEvsWindowsMediaPlayer = Class(TEventSink) Private FOnOpenStateChange:T_WMPOCXEventsOpenStateChange; FOnPlayStateChange:T_WMPOCXEventsPlayStateChange; FOnAudioLanguageChange:T_WMPOCXEventsAudioLanguageChange; FOnStatusChange:T_WMPOCXEventsStatusChange; FOnScriptCommand:T_WMPOCXEventsScriptCommand; FOnNewStream:T_WMPOCXEventsNewStream; FOnDisconnect:T_WMPOCXEventsDisconnect; FOnBuffering:T_WMPOCXEventsBuffering; FOnError:T_WMPOCXEventsError; FOnWarning:T_WMPOCXEventsWarning; FOnEndOfStream:T_WMPOCXEventsEndOfStream; FOnPositionChange:T_WMPOCXEventsPositionChange; FOnMarkerHit:T_WMPOCXEventsMarkerHit; FOnDurationUnitChange:T_WMPOCXEventsDurationUnitChange; FOnCdromMediaChange:T_WMPOCXEventsCdromMediaChange; FOnPlaylistChange:T_WMPOCXEventsPlaylistChange; FOnCurrentPlaylistChange:T_WMPOCXEventsCurrentPlaylistChange; FOnCurrentPlaylistItemAvailable:T_WMPOCXEventsCurrentPlaylistItemAvailable; FOnMediaChange:T_WMPOCXEventsMediaChange; FOnCurrentMediaItemAvailable:T_WMPOCXEventsCurrentMediaItemAvailable; FOnCurrentItemChange:T_WMPOCXEventsCurrentItemChange; FOnMediaCollectionChange:T_WMPOCXEventsMediaCollectionChange; FOnMediaCollectionAttributeStringAdded:T_WMPOCXEventsMediaCollectionAttributeStringAdded; FOnMediaCollectionAttributeStringRemoved:T_WMPOCXEventsMediaCollectionAttributeStringRemoved; FOnMediaCollectionAttributeStringChanged:T_WMPOCXEventsMediaCollectionAttributeStringChanged; FOnPlaylistCollectionChange:T_WMPOCXEventsPlaylistCollectionChange; FOnPlaylistCollectionPlaylistAdded:T_WMPOCXEventsPlaylistCollectionPlaylistAdded; FOnPlaylistCollectionPlaylistRemoved:T_WMPOCXEventsPlaylistCollectionPlaylistRemoved; FOnPlaylistCollectionPlaylistSetAsDeleted:T_WMPOCXEventsPlaylistCollectionPlaylistSetAsDeleted; FOnModeChange:T_WMPOCXEventsModeChange; FOnMediaError:T_WMPOCXEventsMediaError; FOnOpenPlaylistSwitch:T_WMPOCXEventsOpenPlaylistSwitch; FOnDomainChange:T_WMPOCXEventsDomainChange; FOnSwitchedToPlayerApplication:T_WMPOCXEventsSwitchedToPlayerApplication; FOnSwitchedToControl:T_WMPOCXEventsSwitchedToControl; FOnPlayerDockedStateChange:T_WMPOCXEventsPlayerDockedStateChange; FOnPlayerReconnect:T_WMPOCXEventsPlayerReconnect; FOnClick:T_WMPOCXEventsClick; FOnDoubleClick:T_WMPOCXEventsDoubleClick; FOnKeyDown:T_WMPOCXEventsKeyDown; FOnKeyPress:T_WMPOCXEventsKeyPress; FOnKeyUp:T_WMPOCXEventsKeyUp; FOnMouseDown:T_WMPOCXEventsMouseDown; FOnMouseMove:T_WMPOCXEventsMouseMove; FOnMouseUp:T_WMPOCXEventsMouseUp; FOnDeviceConnect:T_WMPOCXEventsDeviceConnect; FOnDeviceDisconnect:T_WMPOCXEventsDeviceDisconnect; FOnDeviceStatusChange:T_WMPOCXEventsDeviceStatusChange; FOnDeviceSyncStateChange:T_WMPOCXEventsDeviceSyncStateChange; FOnDeviceSyncError:T_WMPOCXEventsDeviceSyncError; FOnCreatePartnershipComplete:T_WMPOCXEventsCreatePartnershipComplete; FOnDeviceEstimation:T_WMPOCXEventsDeviceEstimation; FOnCdromRipStateChange:T_WMPOCXEventsCdromRipStateChange; FOnCdromRipMediaError:T_WMPOCXEventsCdromRipMediaError; FOnCdromBurnStateChange:T_WMPOCXEventsCdromBurnStateChange; FOnCdromBurnMediaError:T_WMPOCXEventsCdromBurnMediaError; FOnCdromBurnError:T_WMPOCXEventsCdromBurnError; FOnLibraryConnect:T_WMPOCXEventsLibraryConnect; FOnLibraryDisconnect:T_WMPOCXEventsLibraryDisconnect; FOnFolderScanStateChange:T_WMPOCXEventsFolderScanStateChange; FOnStringCollectionChange:T_WMPOCXEventsStringCollectionChange; FOnMediaCollectionMediaAdded:T_WMPOCXEventsMediaCollectionMediaAdded; FOnMediaCollectionMediaRemoved:T_WMPOCXEventsMediaCollectionMediaRemoved; fServer:IWMPPlayer4; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPPlayer4 read fServer; property OnOpenStateChange : T_WMPOCXEventsOpenStateChange read FOnOpenStateChange write FOnOpenStateChange; property OnPlayStateChange : T_WMPOCXEventsPlayStateChange read FOnPlayStateChange write FOnPlayStateChange; property OnAudioLanguageChange : T_WMPOCXEventsAudioLanguageChange read FOnAudioLanguageChange write FOnAudioLanguageChange; property OnStatusChange : T_WMPOCXEventsStatusChange read FOnStatusChange write FOnStatusChange; property OnScriptCommand : T_WMPOCXEventsScriptCommand read FOnScriptCommand write FOnScriptCommand; property OnNewStream : T_WMPOCXEventsNewStream read FOnNewStream write FOnNewStream; property OnDisconnect : T_WMPOCXEventsDisconnect read FOnDisconnect write FOnDisconnect; property OnBuffering : T_WMPOCXEventsBuffering read FOnBuffering write FOnBuffering; property OnError : T_WMPOCXEventsError read FOnError write FOnError; property OnWarning : T_WMPOCXEventsWarning read FOnWarning write FOnWarning; property OnEndOfStream : T_WMPOCXEventsEndOfStream read FOnEndOfStream write FOnEndOfStream; property OnPositionChange : T_WMPOCXEventsPositionChange read FOnPositionChange write FOnPositionChange; property OnMarkerHit : T_WMPOCXEventsMarkerHit read FOnMarkerHit write FOnMarkerHit; property OnDurationUnitChange : T_WMPOCXEventsDurationUnitChange read FOnDurationUnitChange write FOnDurationUnitChange; property OnCdromMediaChange : T_WMPOCXEventsCdromMediaChange read FOnCdromMediaChange write FOnCdromMediaChange; property OnPlaylistChange : T_WMPOCXEventsPlaylistChange read FOnPlaylistChange write FOnPlaylistChange; property OnCurrentPlaylistChange : T_WMPOCXEventsCurrentPlaylistChange read FOnCurrentPlaylistChange write FOnCurrentPlaylistChange; property OnCurrentPlaylistItemAvailable : T_WMPOCXEventsCurrentPlaylistItemAvailable read FOnCurrentPlaylistItemAvailable write FOnCurrentPlaylistItemAvailable; property OnMediaChange : T_WMPOCXEventsMediaChange read FOnMediaChange write FOnMediaChange; property OnCurrentMediaItemAvailable : T_WMPOCXEventsCurrentMediaItemAvailable read FOnCurrentMediaItemAvailable write FOnCurrentMediaItemAvailable; property OnCurrentItemChange : T_WMPOCXEventsCurrentItemChange read FOnCurrentItemChange write FOnCurrentItemChange; property OnMediaCollectionChange : T_WMPOCXEventsMediaCollectionChange read FOnMediaCollectionChange write FOnMediaCollectionChange; property OnMediaCollectionAttributeStringAdded : T_WMPOCXEventsMediaCollectionAttributeStringAdded read FOnMediaCollectionAttributeStringAdded write FOnMediaCollectionAttributeStringAdded; property OnMediaCollectionAttributeStringRemoved : T_WMPOCXEventsMediaCollectionAttributeStringRemoved read FOnMediaCollectionAttributeStringRemoved write FOnMediaCollectionAttributeStringRemoved; property OnMediaCollectionAttributeStringChanged : T_WMPOCXEventsMediaCollectionAttributeStringChanged read FOnMediaCollectionAttributeStringChanged write FOnMediaCollectionAttributeStringChanged; property OnPlaylistCollectionChange : T_WMPOCXEventsPlaylistCollectionChange read FOnPlaylistCollectionChange write FOnPlaylistCollectionChange; property OnPlaylistCollectionPlaylistAdded : T_WMPOCXEventsPlaylistCollectionPlaylistAdded read FOnPlaylistCollectionPlaylistAdded write FOnPlaylistCollectionPlaylistAdded; property OnPlaylistCollectionPlaylistRemoved : T_WMPOCXEventsPlaylistCollectionPlaylistRemoved read FOnPlaylistCollectionPlaylistRemoved write FOnPlaylistCollectionPlaylistRemoved; property OnPlaylistCollectionPlaylistSetAsDeleted : T_WMPOCXEventsPlaylistCollectionPlaylistSetAsDeleted read FOnPlaylistCollectionPlaylistSetAsDeleted write FOnPlaylistCollectionPlaylistSetAsDeleted; property OnModeChange : T_WMPOCXEventsModeChange read FOnModeChange write FOnModeChange; property OnMediaError : T_WMPOCXEventsMediaError read FOnMediaError write FOnMediaError; property OnOpenPlaylistSwitch : T_WMPOCXEventsOpenPlaylistSwitch read FOnOpenPlaylistSwitch write FOnOpenPlaylistSwitch; property OnDomainChange : T_WMPOCXEventsDomainChange read FOnDomainChange write FOnDomainChange; property OnSwitchedToPlayerApplication : T_WMPOCXEventsSwitchedToPlayerApplication read FOnSwitchedToPlayerApplication write FOnSwitchedToPlayerApplication; property OnSwitchedToControl : T_WMPOCXEventsSwitchedToControl read FOnSwitchedToControl write FOnSwitchedToControl; property OnPlayerDockedStateChange : T_WMPOCXEventsPlayerDockedStateChange read FOnPlayerDockedStateChange write FOnPlayerDockedStateChange; property OnPlayerReconnect : T_WMPOCXEventsPlayerReconnect read FOnPlayerReconnect write FOnPlayerReconnect; property OnClick : T_WMPOCXEventsClick read FOnClick write FOnClick; property OnDoubleClick : T_WMPOCXEventsDoubleClick read FOnDoubleClick write FOnDoubleClick; property OnKeyDown : T_WMPOCXEventsKeyDown read FOnKeyDown write FOnKeyDown; property OnKeyPress : T_WMPOCXEventsKeyPress read FOnKeyPress write FOnKeyPress; property OnKeyUp : T_WMPOCXEventsKeyUp read FOnKeyUp write FOnKeyUp; property OnMouseDown : T_WMPOCXEventsMouseDown read FOnMouseDown write FOnMouseDown; property OnMouseMove : T_WMPOCXEventsMouseMove read FOnMouseMove write FOnMouseMove; property OnMouseUp : T_WMPOCXEventsMouseUp read FOnMouseUp write FOnMouseUp; property OnDeviceConnect : T_WMPOCXEventsDeviceConnect read FOnDeviceConnect write FOnDeviceConnect; property OnDeviceDisconnect : T_WMPOCXEventsDeviceDisconnect read FOnDeviceDisconnect write FOnDeviceDisconnect; property OnDeviceStatusChange : T_WMPOCXEventsDeviceStatusChange read FOnDeviceStatusChange write FOnDeviceStatusChange; property OnDeviceSyncStateChange : T_WMPOCXEventsDeviceSyncStateChange read FOnDeviceSyncStateChange write FOnDeviceSyncStateChange; property OnDeviceSyncError : T_WMPOCXEventsDeviceSyncError read FOnDeviceSyncError write FOnDeviceSyncError; property OnCreatePartnershipComplete : T_WMPOCXEventsCreatePartnershipComplete read FOnCreatePartnershipComplete write FOnCreatePartnershipComplete; property OnDeviceEstimation : T_WMPOCXEventsDeviceEstimation read FOnDeviceEstimation write FOnDeviceEstimation; property OnCdromRipStateChange : T_WMPOCXEventsCdromRipStateChange read FOnCdromRipStateChange write FOnCdromRipStateChange; property OnCdromRipMediaError : T_WMPOCXEventsCdromRipMediaError read FOnCdromRipMediaError write FOnCdromRipMediaError; property OnCdromBurnStateChange : T_WMPOCXEventsCdromBurnStateChange read FOnCdromBurnStateChange write FOnCdromBurnStateChange; property OnCdromBurnMediaError : T_WMPOCXEventsCdromBurnMediaError read FOnCdromBurnMediaError write FOnCdromBurnMediaError; property OnCdromBurnError : T_WMPOCXEventsCdromBurnError read FOnCdromBurnError write FOnCdromBurnError; property OnLibraryConnect : T_WMPOCXEventsLibraryConnect read FOnLibraryConnect write FOnLibraryConnect; property OnLibraryDisconnect : T_WMPOCXEventsLibraryDisconnect read FOnLibraryDisconnect write FOnLibraryDisconnect; property OnFolderScanStateChange : T_WMPOCXEventsFolderScanStateChange read FOnFolderScanStateChange write FOnFolderScanStateChange; property OnStringCollectionChange : T_WMPOCXEventsStringCollectionChange read FOnStringCollectionChange write FOnStringCollectionChange; property OnMediaCollectionMediaAdded : T_WMPOCXEventsMediaCollectionMediaAdded read FOnMediaCollectionMediaAdded write FOnMediaCollectionMediaAdded; property OnMediaCollectionMediaRemoved : T_WMPOCXEventsMediaCollectionMediaRemoved read FOnMediaCollectionMediaRemoved write FOnMediaCollectionMediaRemoved; end; TIWMPButtonCtrlEventsonclick = procedure(Sender: TObject) of object; CoWMPButtonCtrl = Class Public Class Function Create: IWMPButtonCtrl; Class Function CreateRemote(const MachineName: string): IWMPButtonCtrl; end; TEvsWMPButtonCtrl = Class(TEventSink) Private FOnonclick:TIWMPButtonCtrlEventsonclick; fServer:IWMPButtonCtrl; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPButtonCtrl read fServer; property Ononclick : TIWMPButtonCtrlEventsonclick read FOnonclick write FOnonclick; end; CoWMPListBoxCtrl = Class Public Class Function Create: IWMPListBoxCtrl; Class Function CreateRemote(const MachineName: string): IWMPListBoxCtrl; end; TIWMPSliderCtrlEventsondragbegin = procedure(Sender: TObject) of object; TIWMPSliderCtrlEventsondragend = procedure(Sender: TObject) of object; TIWMPSliderCtrlEventsonpositionchange = procedure(Sender: TObject) of object; CoWMPSliderCtrl = Class Public Class Function Create: IWMPSliderCtrl; Class Function CreateRemote(const MachineName: string): IWMPSliderCtrl; end; TEvsWMPSliderCtrl = Class(TEventSink) Private FOnondragbegin:TIWMPSliderCtrlEventsondragbegin; FOnondragend:TIWMPSliderCtrlEventsondragend; FOnonpositionchange:TIWMPSliderCtrlEventsonpositionchange; fServer:IWMPSliderCtrl; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPSliderCtrl read fServer; property Onondragbegin : TIWMPSliderCtrlEventsondragbegin read FOnondragbegin write FOnondragbegin; property Onondragend : TIWMPSliderCtrlEventsondragend read FOnondragend write FOnondragend; property Ononpositionchange : TIWMPSliderCtrlEventsonpositionchange read FOnonpositionchange write FOnonpositionchange; end; TIWMPVideoCtrlEventsonvideostart = procedure(Sender: TObject) of object; TIWMPVideoCtrlEventsonvideoend = procedure(Sender: TObject) of object; CoWMPVideoCtrl = Class Public Class Function Create: IWMPVideoCtrl; Class Function CreateRemote(const MachineName: string): IWMPVideoCtrl; end; TEvsWMPVideoCtrl = Class(TEventSink) Private FOnonvideostart:TIWMPVideoCtrlEventsonvideostart; FOnonvideoend:TIWMPVideoCtrlEventsonvideoend; fServer:IWMPVideoCtrl; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPVideoCtrl read fServer; property Ononvideostart : TIWMPVideoCtrlEventsonvideostart read FOnonvideostart write FOnonvideostart; property Ononvideoend : TIWMPVideoCtrlEventsonvideoend read FOnonvideoend write FOnonvideoend; end; CoWMPEffects = Class Public Class Function Create: IWMPEffectsCtrl; Class Function CreateRemote(const MachineName: string): IWMPEffectsCtrl; end; CoWMPEqualizerSettingsCtrl = Class Public Class Function Create: IWMPEqualizerSettingsCtrl; Class Function CreateRemote(const MachineName: string): IWMPEqualizerSettingsCtrl; end; CoWMPVideoSettingsCtrl = Class Public Class Function Create: IWMPVideoSettingsCtrl; Class Function CreateRemote(const MachineName: string): IWMPVideoSettingsCtrl; end; CoWMPLibraryTreeCtrl = Class Public Class Function Create: IWMPLibraryTreeCtrl; Class Function CreateRemote(const MachineName: string): IWMPLibraryTreeCtrl; end; CoWMPEditCtrl = Class Public Class Function Create: IWMPEditCtrl; Class Function CreateRemote(const MachineName: string): IWMPEditCtrl; end; CoWMPSkinList = Class Public Class Function Create: IWMPSkinList; Class Function CreateRemote(const MachineName: string): IWMPSkinList; end; CoWMPMenuCtrl = Class Public Class Function Create: IWMPMenuCtrl; Class Function CreateRemote(const MachineName: string): IWMPMenuCtrl; end; CoWMPAutoMenuCtrl = Class Public Class Function Create: IWMPAutoMenuCtrl; Class Function CreateRemote(const MachineName: string): IWMPAutoMenuCtrl; end; CoWMPRegionalButtonCtrl = Class Public Class Function Create: IWMPRegionalButtonCtrl; Class Function CreateRemote(const MachineName: string): IWMPRegionalButtonCtrl; end; TIWMPRegionalButtonEventsonblur = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonfocus = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonclick = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsondblclick = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonmousedown = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonmouseup = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonmousemove = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonmouseover = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonmouseout = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonkeypress = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonkeydown = procedure(Sender: TObject) of object; TIWMPRegionalButtonEventsonkeyup = procedure(Sender: TObject) of object; CoWMPRegionalButton = Class Public Class Function Create: IWMPRegionalButton; Class Function CreateRemote(const MachineName: string): IWMPRegionalButton; end; TEvsWMPRegionalButton = Class(TEventSink) Private FOnonblur:TIWMPRegionalButtonEventsonblur; FOnonfocus:TIWMPRegionalButtonEventsonfocus; FOnonclick:TIWMPRegionalButtonEventsonclick; FOnondblclick:TIWMPRegionalButtonEventsondblclick; FOnonmousedown:TIWMPRegionalButtonEventsonmousedown; FOnonmouseup:TIWMPRegionalButtonEventsonmouseup; FOnonmousemove:TIWMPRegionalButtonEventsonmousemove; FOnonmouseover:TIWMPRegionalButtonEventsonmouseover; FOnonmouseout:TIWMPRegionalButtonEventsonmouseout; FOnonkeypress:TIWMPRegionalButtonEventsonkeypress; FOnonkeydown:TIWMPRegionalButtonEventsonkeydown; FOnonkeyup:TIWMPRegionalButtonEventsonkeyup; fServer:IWMPRegionalButton; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPRegionalButton read fServer; property Ononblur : TIWMPRegionalButtonEventsonblur read FOnonblur write FOnonblur; property Ononfocus : TIWMPRegionalButtonEventsonfocus read FOnonfocus write FOnonfocus; property Ononclick : TIWMPRegionalButtonEventsonclick read FOnonclick write FOnonclick; property Onondblclick : TIWMPRegionalButtonEventsondblclick read FOnondblclick write FOnondblclick; property Ononmousedown : TIWMPRegionalButtonEventsonmousedown read FOnonmousedown write FOnonmousedown; property Ononmouseup : TIWMPRegionalButtonEventsonmouseup read FOnonmouseup write FOnonmouseup; property Ononmousemove : TIWMPRegionalButtonEventsonmousemove read FOnonmousemove write FOnonmousemove; property Ononmouseover : TIWMPRegionalButtonEventsonmouseover read FOnonmouseover write FOnonmouseover; property Ononmouseout : TIWMPRegionalButtonEventsonmouseout read FOnonmouseout write FOnonmouseout; property Ononkeypress : TIWMPRegionalButtonEventsonkeypress read FOnonkeypress write FOnonkeypress; property Ononkeydown : TIWMPRegionalButtonEventsonkeydown read FOnonkeydown write FOnonkeydown; property Ononkeyup : TIWMPRegionalButtonEventsonkeyup read FOnonkeyup write FOnonkeyup; end; TIWMPCustomSliderCtrlEventsondragbegin = procedure(Sender: TObject) of object; TIWMPCustomSliderCtrlEventsondragend = procedure(Sender: TObject) of object; TIWMPCustomSliderCtrlEventsonpositionchange = procedure(Sender: TObject) of object; CoWMPCustomSliderCtrl = Class Public Class Function Create: IWMPCustomSlider; Class Function CreateRemote(const MachineName: string): IWMPCustomSlider; end; TEvsWMPCustomSliderCtrl = Class(TEventSink) Private FOnondragbegin:TIWMPCustomSliderCtrlEventsondragbegin; FOnondragend:TIWMPCustomSliderCtrlEventsondragend; FOnonpositionchange:TIWMPCustomSliderCtrlEventsonpositionchange; fServer:IWMPCustomSlider; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPCustomSlider read fServer; property Onondragbegin : TIWMPCustomSliderCtrlEventsondragbegin read FOnondragbegin write FOnondragbegin; property Onondragend : TIWMPCustomSliderCtrlEventsondragend read FOnondragend write FOnondragend; property Ononpositionchange : TIWMPCustomSliderCtrlEventsonpositionchange read FOnonpositionchange write FOnonpositionchange; end; CoWMPTextCtrl = Class Public Class Function Create: IWMPTextCtrl; Class Function CreateRemote(const MachineName: string): IWMPTextCtrl; end; CoWMPPlaylistCtrl = Class Public Class Function Create: IWMPPlaylistCtrl; Class Function CreateRemote(const MachineName: string): IWMPPlaylistCtrl; end; T_WMPCoreEventsOpenStateChange = procedure(Sender: TObject;NewState:Integer) of object; T_WMPCoreEventsPlayStateChange = procedure(Sender: TObject;NewState:Integer) of object; T_WMPCoreEventsAudioLanguageChange = procedure(Sender: TObject;LangID:Integer) of object; T_WMPCoreEventsStatusChange = procedure(Sender: TObject) of object; T_WMPCoreEventsScriptCommand = procedure(Sender: TObject;scType:WideString;Param:WideString) of object; T_WMPCoreEventsNewStream = procedure(Sender: TObject) of object; T_WMPCoreEventsDisconnect = procedure(Sender: TObject;Result:Integer) of object; T_WMPCoreEventsBuffering = procedure(Sender: TObject;Start:WordBool) of object; T_WMPCoreEventsError = procedure(Sender: TObject) of object; T_WMPCoreEventsWarning = procedure(Sender: TObject;WarningType:Integer;Param:Integer;Description:WideString) of object; T_WMPCoreEventsEndOfStream = procedure(Sender: TObject;Result:Integer) of object; T_WMPCoreEventsPositionChange = procedure(Sender: TObject;oldPosition:Double;newPosition:Double) of object; T_WMPCoreEventsMarkerHit = procedure(Sender: TObject;MarkerNum:Integer) of object; T_WMPCoreEventsDurationUnitChange = procedure(Sender: TObject;NewDurationUnit:Integer) of object; T_WMPCoreEventsCdromMediaChange = procedure(Sender: TObject;CdromNum:Integer) of object; T_WMPCoreEventsPlaylistChange = procedure(Sender: TObject;Playlist:IDispatch;change:WMPPlaylistChangeEventType) of object; T_WMPCoreEventsCurrentPlaylistChange = procedure(Sender: TObject;change:WMPPlaylistChangeEventType) of object; T_WMPCoreEventsCurrentPlaylistItemAvailable = procedure(Sender: TObject;bstrItemName:WideString) of object; T_WMPCoreEventsMediaChange = procedure(Sender: TObject;Item:IDispatch) of object; T_WMPCoreEventsCurrentMediaItemAvailable = procedure(Sender: TObject;bstrItemName:WideString) of object; T_WMPCoreEventsCurrentItemChange = procedure(Sender: TObject;pdispMedia:IDispatch) of object; T_WMPCoreEventsMediaCollectionChange = procedure(Sender: TObject) of object; T_WMPCoreEventsMediaCollectionAttributeStringAdded = procedure(Sender: TObject;bstrAttribName:WideString;bstrAttribVal:WideString) of object; T_WMPCoreEventsMediaCollectionAttributeStringRemoved = procedure(Sender: TObject;bstrAttribName:WideString;bstrAttribVal:WideString) of object; T_WMPCoreEventsMediaCollectionAttributeStringChanged = procedure(Sender: TObject;bstrAttribName:WideString;bstrOldAttribVal:WideString;bstrNewAttribVal:WideString) of object; T_WMPCoreEventsPlaylistCollectionChange = procedure(Sender: TObject) of object; T_WMPCoreEventsPlaylistCollectionPlaylistAdded = procedure(Sender: TObject;bstrPlaylistName:WideString) of object; T_WMPCoreEventsPlaylistCollectionPlaylistRemoved = procedure(Sender: TObject;bstrPlaylistName:WideString) of object; T_WMPCoreEventsPlaylistCollectionPlaylistSetAsDeleted = procedure(Sender: TObject;bstrPlaylistName:WideString;varfIsDeleted:WordBool) of object; T_WMPCoreEventsModeChange = procedure(Sender: TObject;ModeName:WideString;NewValue:WordBool) of object; T_WMPCoreEventsMediaError = procedure(Sender: TObject;pMediaObject:IDispatch) of object; T_WMPCoreEventsOpenPlaylistSwitch = procedure(Sender: TObject;pItem:IDispatch) of object; T_WMPCoreEventsDomainChange = procedure(Sender: TObject;strDomain:WideString) of object; T_WMPCoreEventsStringCollectionChange = procedure(Sender: TObject;pdispStringCollection:IDispatch;change:WMPStringCollectionChangeEventType;lCollectionIndex:Integer) of object; T_WMPCoreEventsMediaCollectionMediaAdded = procedure(Sender: TObject;pdispMedia:IDispatch) of object; T_WMPCoreEventsMediaCollectionMediaRemoved = procedure(Sender: TObject;pdispMedia:IDispatch) of object; CoWMPCore = Class Public Class Function Create: IWMPCore3; Class Function CreateRemote(const MachineName: string): IWMPCore3; end; TEvsWMPCore = Class(TEventSink) Private FOnOpenStateChange:T_WMPCoreEventsOpenStateChange; FOnPlayStateChange:T_WMPCoreEventsPlayStateChange; FOnAudioLanguageChange:T_WMPCoreEventsAudioLanguageChange; FOnStatusChange:T_WMPCoreEventsStatusChange; FOnScriptCommand:T_WMPCoreEventsScriptCommand; FOnNewStream:T_WMPCoreEventsNewStream; FOnDisconnect:T_WMPCoreEventsDisconnect; FOnBuffering:T_WMPCoreEventsBuffering; FOnError:T_WMPCoreEventsError; FOnWarning:T_WMPCoreEventsWarning; FOnEndOfStream:T_WMPCoreEventsEndOfStream; FOnPositionChange:T_WMPCoreEventsPositionChange; FOnMarkerHit:T_WMPCoreEventsMarkerHit; FOnDurationUnitChange:T_WMPCoreEventsDurationUnitChange; FOnCdromMediaChange:T_WMPCoreEventsCdromMediaChange; FOnPlaylistChange:T_WMPCoreEventsPlaylistChange; FOnCurrentPlaylistChange:T_WMPCoreEventsCurrentPlaylistChange; FOnCurrentPlaylistItemAvailable:T_WMPCoreEventsCurrentPlaylistItemAvailable; FOnMediaChange:T_WMPCoreEventsMediaChange; FOnCurrentMediaItemAvailable:T_WMPCoreEventsCurrentMediaItemAvailable; FOnCurrentItemChange:T_WMPCoreEventsCurrentItemChange; FOnMediaCollectionChange:T_WMPCoreEventsMediaCollectionChange; FOnMediaCollectionAttributeStringAdded:T_WMPCoreEventsMediaCollectionAttributeStringAdded; FOnMediaCollectionAttributeStringRemoved:T_WMPCoreEventsMediaCollectionAttributeStringRemoved; FOnMediaCollectionAttributeStringChanged:T_WMPCoreEventsMediaCollectionAttributeStringChanged; FOnPlaylistCollectionChange:T_WMPCoreEventsPlaylistCollectionChange; FOnPlaylistCollectionPlaylistAdded:T_WMPCoreEventsPlaylistCollectionPlaylistAdded; FOnPlaylistCollectionPlaylistRemoved:T_WMPCoreEventsPlaylistCollectionPlaylistRemoved; FOnPlaylistCollectionPlaylistSetAsDeleted:T_WMPCoreEventsPlaylistCollectionPlaylistSetAsDeleted; FOnModeChange:T_WMPCoreEventsModeChange; FOnMediaError:T_WMPCoreEventsMediaError; FOnOpenPlaylistSwitch:T_WMPCoreEventsOpenPlaylistSwitch; FOnDomainChange:T_WMPCoreEventsDomainChange; FOnStringCollectionChange:T_WMPCoreEventsStringCollectionChange; FOnMediaCollectionMediaAdded:T_WMPCoreEventsMediaCollectionMediaAdded; FOnMediaCollectionMediaRemoved:T_WMPCoreEventsMediaCollectionMediaRemoved; fServer:IWMPCore3; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); Public constructor Create(TheOwner: TComponent); override; property ComServer:IWMPCore3 read fServer; property OnOpenStateChange : T_WMPCoreEventsOpenStateChange read FOnOpenStateChange write FOnOpenStateChange; property OnPlayStateChange : T_WMPCoreEventsPlayStateChange read FOnPlayStateChange write FOnPlayStateChange; property OnAudioLanguageChange : T_WMPCoreEventsAudioLanguageChange read FOnAudioLanguageChange write FOnAudioLanguageChange; property OnStatusChange : T_WMPCoreEventsStatusChange read FOnStatusChange write FOnStatusChange; property OnScriptCommand : T_WMPCoreEventsScriptCommand read FOnScriptCommand write FOnScriptCommand; property OnNewStream : T_WMPCoreEventsNewStream read FOnNewStream write FOnNewStream; property OnDisconnect : T_WMPCoreEventsDisconnect read FOnDisconnect write FOnDisconnect; property OnBuffering : T_WMPCoreEventsBuffering read FOnBuffering write FOnBuffering; property OnError : T_WMPCoreEventsError read FOnError write FOnError; property OnWarning : T_WMPCoreEventsWarning read FOnWarning write FOnWarning; property OnEndOfStream : T_WMPCoreEventsEndOfStream read FOnEndOfStream write FOnEndOfStream; property OnPositionChange : T_WMPCoreEventsPositionChange read FOnPositionChange write FOnPositionChange; property OnMarkerHit : T_WMPCoreEventsMarkerHit read FOnMarkerHit write FOnMarkerHit; property OnDurationUnitChange : T_WMPCoreEventsDurationUnitChange read FOnDurationUnitChange write FOnDurationUnitChange; property OnCdromMediaChange : T_WMPCoreEventsCdromMediaChange read FOnCdromMediaChange write FOnCdromMediaChange; property OnPlaylistChange : T_WMPCoreEventsPlaylistChange read FOnPlaylistChange write FOnPlaylistChange; property OnCurrentPlaylistChange : T_WMPCoreEventsCurrentPlaylistChange read FOnCurrentPlaylistChange write FOnCurrentPlaylistChange; property OnCurrentPlaylistItemAvailable : T_WMPCoreEventsCurrentPlaylistItemAvailable read FOnCurrentPlaylistItemAvailable write FOnCurrentPlaylistItemAvailable; property OnMediaChange : T_WMPCoreEventsMediaChange read FOnMediaChange write FOnMediaChange; property OnCurrentMediaItemAvailable : T_WMPCoreEventsCurrentMediaItemAvailable read FOnCurrentMediaItemAvailable write FOnCurrentMediaItemAvailable; property OnCurrentItemChange : T_WMPCoreEventsCurrentItemChange read FOnCurrentItemChange write FOnCurrentItemChange; property OnMediaCollectionChange : T_WMPCoreEventsMediaCollectionChange read FOnMediaCollectionChange write FOnMediaCollectionChange; property OnMediaCollectionAttributeStringAdded : T_WMPCoreEventsMediaCollectionAttributeStringAdded read FOnMediaCollectionAttributeStringAdded write FOnMediaCollectionAttributeStringAdded; property OnMediaCollectionAttributeStringRemoved : T_WMPCoreEventsMediaCollectionAttributeStringRemoved read FOnMediaCollectionAttributeStringRemoved write FOnMediaCollectionAttributeStringRemoved; property OnMediaCollectionAttributeStringChanged : T_WMPCoreEventsMediaCollectionAttributeStringChanged read FOnMediaCollectionAttributeStringChanged write FOnMediaCollectionAttributeStringChanged; property OnPlaylistCollectionChange : T_WMPCoreEventsPlaylistCollectionChange read FOnPlaylistCollectionChange write FOnPlaylistCollectionChange; property OnPlaylistCollectionPlaylistAdded : T_WMPCoreEventsPlaylistCollectionPlaylistAdded read FOnPlaylistCollectionPlaylistAdded write FOnPlaylistCollectionPlaylistAdded; property OnPlaylistCollectionPlaylistRemoved : T_WMPCoreEventsPlaylistCollectionPlaylistRemoved read FOnPlaylistCollectionPlaylistRemoved write FOnPlaylistCollectionPlaylistRemoved; property OnPlaylistCollectionPlaylistSetAsDeleted : T_WMPCoreEventsPlaylistCollectionPlaylistSetAsDeleted read FOnPlaylistCollectionPlaylistSetAsDeleted write FOnPlaylistCollectionPlaylistSetAsDeleted; property OnModeChange : T_WMPCoreEventsModeChange read FOnModeChange write FOnModeChange; property OnMediaError : T_WMPCoreEventsMediaError read FOnMediaError write FOnMediaError; property OnOpenPlaylistSwitch : T_WMPCoreEventsOpenPlaylistSwitch read FOnOpenPlaylistSwitch write FOnOpenPlaylistSwitch; property OnDomainChange : T_WMPCoreEventsDomainChange read FOnDomainChange write FOnDomainChange; property OnStringCollectionChange : T_WMPCoreEventsStringCollectionChange read FOnStringCollectionChange write FOnStringCollectionChange; property OnMediaCollectionMediaAdded : T_WMPCoreEventsMediaCollectionMediaAdded read FOnMediaCollectionMediaAdded write FOnMediaCollectionMediaAdded; property OnMediaCollectionMediaRemoved : T_WMPCoreEventsMediaCollectionMediaRemoved read FOnMediaCollectionMediaRemoved write FOnMediaCollectionMediaRemoved; end; implementation uses comobj; Class Function CoWindowsMediaPlayer.Create: IWMPPlayer4; begin Result := CreateComObject(CLASS_WindowsMediaPlayer) as IWMPPlayer4; end; Class Function CoWindowsMediaPlayer.CreateRemote(const MachineName: string): IWMPPlayer4; begin Result := CreateRemoteComObject(MachineName,CLASS_WindowsMediaPlayer) as IWMPPlayer4; end; constructor TEvsWindowsMediaPlayer.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWindowsMediaPlayer.Create; Connect(fServer,_WMPOCXEvents); end; procedure TEvsWindowsMediaPlayer.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5001: if assigned(OnOpenStateChange) then OnOpenStateChange(Self, OleVariant(Params.rgvarg[0])); 5101: if assigned(OnPlayStateChange) then OnPlayStateChange(Self, OleVariant(Params.rgvarg[0])); 5102: if assigned(OnAudioLanguageChange) then OnAudioLanguageChange(Self, OleVariant(Params.rgvarg[0])); 5002: if assigned(OnStatusChange) then OnStatusChange(Self); 5301: if assigned(OnScriptCommand) then OnScriptCommand(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5403: if assigned(OnNewStream) then OnNewStream(Self); 5401: if assigned(OnDisconnect) then OnDisconnect(Self, OleVariant(Params.rgvarg[0])); 5402: if assigned(OnBuffering) then OnBuffering(Self, OleVariant(Params.rgvarg[0])); 5501: if assigned(OnError) then OnError(Self); 5601: if assigned(OnWarning) then OnWarning(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5201: if assigned(OnEndOfStream) then OnEndOfStream(Self, OleVariant(Params.rgvarg[0])); 5202: if assigned(OnPositionChange) then OnPositionChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5203: if assigned(OnMarkerHit) then OnMarkerHit(Self, OleVariant(Params.rgvarg[0])); 5204: if assigned(OnDurationUnitChange) then OnDurationUnitChange(Self, OleVariant(Params.rgvarg[0])); 5701: if assigned(OnCdromMediaChange) then OnCdromMediaChange(Self, OleVariant(Params.rgvarg[0])); 5801: if assigned(OnPlaylistChange) then OnPlaylistChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5804: if assigned(OnCurrentPlaylistChange) then OnCurrentPlaylistChange(Self, OleVariant(Params.rgvarg[0])); 5805: if assigned(OnCurrentPlaylistItemAvailable) then OnCurrentPlaylistItemAvailable(Self, OleVariant(Params.rgvarg[0])); 5802: if assigned(OnMediaChange) then OnMediaChange(Self, OleVariant(Params.rgvarg[0])); 5803: if assigned(OnCurrentMediaItemAvailable) then OnCurrentMediaItemAvailable(Self, OleVariant(Params.rgvarg[0])); 5806: if assigned(OnCurrentItemChange) then OnCurrentItemChange(Self, OleVariant(Params.rgvarg[0])); 5807: if assigned(OnMediaCollectionChange) then OnMediaCollectionChange(Self); 5808: if assigned(OnMediaCollectionAttributeStringAdded) then OnMediaCollectionAttributeStringAdded(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5809: if assigned(OnMediaCollectionAttributeStringRemoved) then OnMediaCollectionAttributeStringRemoved(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5820: if assigned(OnMediaCollectionAttributeStringChanged) then OnMediaCollectionAttributeStringChanged(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5810: if assigned(OnPlaylistCollectionChange) then OnPlaylistCollectionChange(Self); 5811: if assigned(OnPlaylistCollectionPlaylistAdded) then OnPlaylistCollectionPlaylistAdded(Self, OleVariant(Params.rgvarg[0])); 5812: if assigned(OnPlaylistCollectionPlaylistRemoved) then OnPlaylistCollectionPlaylistRemoved(Self, OleVariant(Params.rgvarg[0])); 5818: if assigned(OnPlaylistCollectionPlaylistSetAsDeleted) then OnPlaylistCollectionPlaylistSetAsDeleted(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5819: if assigned(OnModeChange) then OnModeChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5821: if assigned(OnMediaError) then OnMediaError(Self, OleVariant(Params.rgvarg[0])); 5823: if assigned(OnOpenPlaylistSwitch) then OnOpenPlaylistSwitch(Self, OleVariant(Params.rgvarg[0])); 5822: if assigned(OnDomainChange) then OnDomainChange(Self, OleVariant(Params.rgvarg[0])); 6501: if assigned(OnSwitchedToPlayerApplication) then OnSwitchedToPlayerApplication(Self); 6502: if assigned(OnSwitchedToControl) then OnSwitchedToControl(Self); 6503: if assigned(OnPlayerDockedStateChange) then OnPlayerDockedStateChange(Self); 6504: if assigned(OnPlayerReconnect) then OnPlayerReconnect(Self); 6505: if assigned(OnClick) then OnClick(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6506: if assigned(OnDoubleClick) then OnDoubleClick(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6507: if assigned(OnKeyDown) then OnKeyDown(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6508: if assigned(OnKeyPress) then OnKeyPress(Self, OleVariant(Params.rgvarg[0])); 6509: if assigned(OnKeyUp) then OnKeyUp(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6510: if assigned(OnMouseDown) then OnMouseDown(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6511: if assigned(OnMouseMove) then OnMouseMove(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6512: if assigned(OnMouseUp) then OnMouseUp(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6513: if assigned(OnDeviceConnect) then OnDeviceConnect(Self, OleVariant(Params.rgvarg[0])); 6514: if assigned(OnDeviceDisconnect) then OnDeviceDisconnect(Self, OleVariant(Params.rgvarg[0])); 6515: if assigned(OnDeviceStatusChange) then OnDeviceStatusChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6516: if assigned(OnDeviceSyncStateChange) then OnDeviceSyncStateChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6517: if assigned(OnDeviceSyncError) then OnDeviceSyncError(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); // 6518: if assigned(OnCreatePartnershipComplete) then // OnCreatePartnershipComplete(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); // 6527: if assigned(OnDeviceEstimation) then // OnDeviceEstimation(Self, OleVariant(Params.rgvarg[3]), OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6519: if assigned(OnCdromRipStateChange) then OnCdromRipStateChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6520: if assigned(OnCdromRipMediaError) then OnCdromRipMediaError(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6521: if assigned(OnCdromBurnStateChange) then OnCdromBurnStateChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6522: if assigned(OnCdromBurnMediaError) then OnCdromBurnMediaError(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); // 6523: if assigned(OnCdromBurnError) then // OnCdromBurnError(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 6524: if assigned(OnLibraryConnect) then OnLibraryConnect(Self, OleVariant(Params.rgvarg[0])); 6525: if assigned(OnLibraryDisconnect) then OnLibraryDisconnect(Self, OleVariant(Params.rgvarg[0])); 6526: if assigned(OnFolderScanStateChange) then OnFolderScanStateChange(Self, OleVariant(Params.rgvarg[0])); 5824: if assigned(OnStringCollectionChange) then OnStringCollectionChange(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5825: if assigned(OnMediaCollectionMediaAdded) then OnMediaCollectionMediaAdded(Self, OleVariant(Params.rgvarg[0])); 5826: if assigned(OnMediaCollectionMediaRemoved) then OnMediaCollectionMediaRemoved(Self, OleVariant(Params.rgvarg[0])); end; end; Class Function CoWMPButtonCtrl.Create: IWMPButtonCtrl; begin Result := CreateComObject(CLASS_WMPButtonCtrl) as IWMPButtonCtrl; end; Class Function CoWMPButtonCtrl.CreateRemote(const MachineName: string): IWMPButtonCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPButtonCtrl) as IWMPButtonCtrl; end; constructor TEvsWMPButtonCtrl.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPButtonCtrl.Create; Connect(fServer,IWMPButtonCtrlEvents); end; procedure TEvsWMPButtonCtrl.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5120: if assigned(Ononclick) then Ononclick(Self); end; end; Class Function CoWMPListBoxCtrl.Create: IWMPListBoxCtrl; begin Result := CreateComObject(CLASS_WMPListBoxCtrl) as IWMPListBoxCtrl; end; Class Function CoWMPListBoxCtrl.CreateRemote(const MachineName: string): IWMPListBoxCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPListBoxCtrl) as IWMPListBoxCtrl; end; Class Function CoWMPSliderCtrl.Create: IWMPSliderCtrl; begin Result := CreateComObject(CLASS_WMPSliderCtrl) as IWMPSliderCtrl; end; Class Function CoWMPSliderCtrl.CreateRemote(const MachineName: string): IWMPSliderCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPSliderCtrl) as IWMPSliderCtrl; end; constructor TEvsWMPSliderCtrl.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPSliderCtrl.Create; Connect(fServer,IWMPSliderCtrlEvents); end; procedure TEvsWMPSliderCtrl.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5430: if assigned(Onondragbegin) then Onondragbegin(Self); 5431: if assigned(Onondragend) then Onondragend(Self); 5432: if assigned(Ononpositionchange) then Ononpositionchange(Self); end; end; Class Function CoWMPVideoCtrl.Create: IWMPVideoCtrl; begin Result := CreateComObject(CLASS_WMPVideoCtrl) as IWMPVideoCtrl; end; Class Function CoWMPVideoCtrl.CreateRemote(const MachineName: string): IWMPVideoCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPVideoCtrl) as IWMPVideoCtrl; end; constructor TEvsWMPVideoCtrl.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPVideoCtrl.Create; Connect(fServer,IWMPVideoCtrlEvents); end; procedure TEvsWMPVideoCtrl.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5720: if assigned(Ononvideostart) then Ononvideostart(Self); 5721: if assigned(Ononvideoend) then Ononvideoend(Self); end; end; Class Function CoWMPEffects.Create: IWMPEffectsCtrl; begin Result := CreateComObject(CLASS_WMPEffects) as IWMPEffectsCtrl; end; Class Function CoWMPEffects.CreateRemote(const MachineName: string): IWMPEffectsCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPEffects) as IWMPEffectsCtrl; end; Class Function CoWMPEqualizerSettingsCtrl.Create: IWMPEqualizerSettingsCtrl; begin Result := CreateComObject(CLASS_WMPEqualizerSettingsCtrl) as IWMPEqualizerSettingsCtrl; end; Class Function CoWMPEqualizerSettingsCtrl.CreateRemote(const MachineName: string): IWMPEqualizerSettingsCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPEqualizerSettingsCtrl) as IWMPEqualizerSettingsCtrl; end; Class Function CoWMPVideoSettingsCtrl.Create: IWMPVideoSettingsCtrl; begin Result := CreateComObject(CLASS_WMPVideoSettingsCtrl) as IWMPVideoSettingsCtrl; end; Class Function CoWMPVideoSettingsCtrl.CreateRemote(const MachineName: string): IWMPVideoSettingsCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPVideoSettingsCtrl) as IWMPVideoSettingsCtrl; end; Class Function CoWMPLibraryTreeCtrl.Create: IWMPLibraryTreeCtrl; begin Result := CreateComObject(CLASS_WMPLibraryTreeCtrl) as IWMPLibraryTreeCtrl; end; Class Function CoWMPLibraryTreeCtrl.CreateRemote(const MachineName: string): IWMPLibraryTreeCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPLibraryTreeCtrl) as IWMPLibraryTreeCtrl; end; Class Function CoWMPEditCtrl.Create: IWMPEditCtrl; begin Result := CreateComObject(CLASS_WMPEditCtrl) as IWMPEditCtrl; end; Class Function CoWMPEditCtrl.CreateRemote(const MachineName: string): IWMPEditCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPEditCtrl) as IWMPEditCtrl; end; Class Function CoWMPSkinList.Create: IWMPSkinList; begin Result := CreateComObject(CLASS_WMPSkinList) as IWMPSkinList; end; Class Function CoWMPSkinList.CreateRemote(const MachineName: string): IWMPSkinList; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPSkinList) as IWMPSkinList; end; Class Function CoWMPMenuCtrl.Create: IWMPMenuCtrl; begin Result := CreateComObject(CLASS_WMPMenuCtrl) as IWMPMenuCtrl; end; Class Function CoWMPMenuCtrl.CreateRemote(const MachineName: string): IWMPMenuCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPMenuCtrl) as IWMPMenuCtrl; end; Class Function CoWMPAutoMenuCtrl.Create: IWMPAutoMenuCtrl; begin Result := CreateComObject(CLASS_WMPAutoMenuCtrl) as IWMPAutoMenuCtrl; end; Class Function CoWMPAutoMenuCtrl.CreateRemote(const MachineName: string): IWMPAutoMenuCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPAutoMenuCtrl) as IWMPAutoMenuCtrl; end; Class Function CoWMPRegionalButtonCtrl.Create: IWMPRegionalButtonCtrl; begin Result := CreateComObject(CLASS_WMPRegionalButtonCtrl) as IWMPRegionalButtonCtrl; end; Class Function CoWMPRegionalButtonCtrl.CreateRemote(const MachineName: string): IWMPRegionalButtonCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPRegionalButtonCtrl) as IWMPRegionalButtonCtrl; end; Class Function CoWMPRegionalButton.Create: IWMPRegionalButton; begin Result := CreateComObject(CLASS_WMPRegionalButton) as IWMPRegionalButton; end; Class Function CoWMPRegionalButton.CreateRemote(const MachineName: string): IWMPRegionalButton; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPRegionalButton) as IWMPRegionalButton; end; constructor TEvsWMPRegionalButton.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPRegionalButton.Create; Connect(fServer,IWMPRegionalButtonEvents); end; procedure TEvsWMPRegionalButton.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5360: if assigned(Ononblur) then Ononblur(Self); 5361: if assigned(Ononfocus) then Ononfocus(Self); 5362: if assigned(Ononclick) then Ononclick(Self); 5363: if assigned(Onondblclick) then Onondblclick(Self); 5364: if assigned(Ononmousedown) then Ononmousedown(Self); 5365: if assigned(Ononmouseup) then Ononmouseup(Self); 5366: if assigned(Ononmousemove) then Ononmousemove(Self); 5367: if assigned(Ononmouseover) then Ononmouseover(Self); 5368: if assigned(Ononmouseout) then Ononmouseout(Self); 5369: if assigned(Ononkeypress) then Ononkeypress(Self); 5370: if assigned(Ononkeydown) then Ononkeydown(Self); 5371: if assigned(Ononkeyup) then Ononkeyup(Self); end; end; Class Function CoWMPCustomSliderCtrl.Create: IWMPCustomSlider; begin Result := CreateComObject(CLASS_WMPCustomSliderCtrl) as IWMPCustomSlider; end; Class Function CoWMPCustomSliderCtrl.CreateRemote(const MachineName: string): IWMPCustomSlider; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPCustomSliderCtrl) as IWMPCustomSlider; end; constructor TEvsWMPCustomSliderCtrl.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPCustomSliderCtrl.Create; Connect(fServer,IWMPCustomSliderCtrlEvents); end; procedure TEvsWMPCustomSliderCtrl.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5020: if assigned(Onondragbegin) then Onondragbegin(Self); 5021: if assigned(Onondragend) then Onondragend(Self); 5022: if assigned(Ononpositionchange) then Ononpositionchange(Self); end; end; Class Function CoWMPTextCtrl.Create: IWMPTextCtrl; begin Result := CreateComObject(CLASS_WMPTextCtrl) as IWMPTextCtrl; end; Class Function CoWMPTextCtrl.CreateRemote(const MachineName: string): IWMPTextCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPTextCtrl) as IWMPTextCtrl; end; Class Function CoWMPPlaylistCtrl.Create: IWMPPlaylistCtrl; begin Result := CreateComObject(CLASS_WMPPlaylistCtrl) as IWMPPlaylistCtrl; end; Class Function CoWMPPlaylistCtrl.CreateRemote(const MachineName: string): IWMPPlaylistCtrl; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPPlaylistCtrl) as IWMPPlaylistCtrl; end; Class Function CoWMPCore.Create: IWMPCore3; begin Result := CreateComObject(CLASS_WMPCore) as IWMPCore3; end; Class Function CoWMPCore.CreateRemote(const MachineName: string): IWMPCore3; begin Result := CreateRemoteComObject(MachineName,CLASS_WMPCore) as IWMPCore3; end; constructor TEvsWMPCore.Create(TheOwner: TComponent); begin inherited Create(TheOwner); OnInvoke:=EventSinkInvoke; fServer:=CoWMPCore.Create; Connect(fServer,_WMPCoreEvents); end; procedure TEvsWMPCore.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin case DispID of 5001: if assigned(OnOpenStateChange) then OnOpenStateChange(Self, OleVariant(Params.rgvarg[0])); 5101: if assigned(OnPlayStateChange) then OnPlayStateChange(Self, OleVariant(Params.rgvarg[0])); 5102: if assigned(OnAudioLanguageChange) then OnAudioLanguageChange(Self, OleVariant(Params.rgvarg[0])); 5002: if assigned(OnStatusChange) then OnStatusChange(Self); 5301: if assigned(OnScriptCommand) then OnScriptCommand(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5403: if assigned(OnNewStream) then OnNewStream(Self); 5401: if assigned(OnDisconnect) then OnDisconnect(Self, OleVariant(Params.rgvarg[0])); 5402: if assigned(OnBuffering) then OnBuffering(Self, OleVariant(Params.rgvarg[0])); 5501: if assigned(OnError) then OnError(Self); 5601: if assigned(OnWarning) then OnWarning(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5201: if assigned(OnEndOfStream) then OnEndOfStream(Self, OleVariant(Params.rgvarg[0])); 5202: if assigned(OnPositionChange) then OnPositionChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5203: if assigned(OnMarkerHit) then OnMarkerHit(Self, OleVariant(Params.rgvarg[0])); 5204: if assigned(OnDurationUnitChange) then OnDurationUnitChange(Self, OleVariant(Params.rgvarg[0])); 5701: if assigned(OnCdromMediaChange) then OnCdromMediaChange(Self, OleVariant(Params.rgvarg[0])); 5801: if assigned(OnPlaylistChange) then OnPlaylistChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5804: if assigned(OnCurrentPlaylistChange) then OnCurrentPlaylistChange(Self, OleVariant(Params.rgvarg[0])); 5805: if assigned(OnCurrentPlaylistItemAvailable) then OnCurrentPlaylistItemAvailable(Self, OleVariant(Params.rgvarg[0])); 5802: if assigned(OnMediaChange) then OnMediaChange(Self, OleVariant(Params.rgvarg[0])); 5803: if assigned(OnCurrentMediaItemAvailable) then OnCurrentMediaItemAvailable(Self, OleVariant(Params.rgvarg[0])); 5806: if assigned(OnCurrentItemChange) then OnCurrentItemChange(Self, OleVariant(Params.rgvarg[0])); 5807: if assigned(OnMediaCollectionChange) then OnMediaCollectionChange(Self); 5808: if assigned(OnMediaCollectionAttributeStringAdded) then OnMediaCollectionAttributeStringAdded(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5809: if assigned(OnMediaCollectionAttributeStringRemoved) then OnMediaCollectionAttributeStringRemoved(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5820: if assigned(OnMediaCollectionAttributeStringChanged) then OnMediaCollectionAttributeStringChanged(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5810: if assigned(OnPlaylistCollectionChange) then OnPlaylistCollectionChange(Self); 5811: if assigned(OnPlaylistCollectionPlaylistAdded) then OnPlaylistCollectionPlaylistAdded(Self, OleVariant(Params.rgvarg[0])); 5812: if assigned(OnPlaylistCollectionPlaylistRemoved) then OnPlaylistCollectionPlaylistRemoved(Self, OleVariant(Params.rgvarg[0])); 5818: if assigned(OnPlaylistCollectionPlaylistSetAsDeleted) then OnPlaylistCollectionPlaylistSetAsDeleted(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5819: if assigned(OnModeChange) then OnModeChange(Self, OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5821: if assigned(OnMediaError) then OnMediaError(Self, OleVariant(Params.rgvarg[0])); 5823: if assigned(OnOpenPlaylistSwitch) then OnOpenPlaylistSwitch(Self, OleVariant(Params.rgvarg[0])); 5822: if assigned(OnDomainChange) then OnDomainChange(Self, OleVariant(Params.rgvarg[0])); 5824: if assigned(OnStringCollectionChange) then OnStringCollectionChange(Self, OleVariant(Params.rgvarg[2]), OleVariant(Params.rgvarg[1]), OleVariant(Params.rgvarg[0])); 5825: if assigned(OnMediaCollectionMediaAdded) then OnMediaCollectionMediaAdded(Self, OleVariant(Params.rgvarg[0])); 5826: if assigned(OnMediaCollectionMediaRemoved) then OnMediaCollectionMediaRemoved(Self, OleVariant(Params.rgvarg[0])); end; end; end. doublecmd-1.1.30/plugins/wlx/wmp/src/wmp.lpr0000644000175000001440000001061215104114162017774 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Windows Media Player plugin Copyright (C) 2021-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see . } library wmp; {$mode objfpc}{$H+} uses Classes, WMPLib_1_0_TLB, ActiveXContainer, SysUtils, Windows, WlxPlugin, IniFiles; const CLASS_NAME = UnicodeString('IWMPPlayer4'); var Volume: Integer = 50; ConfigFile: AnsiString; procedure LoadConfiguration; begin try with TIniFile.Create(ConfigFile) do try Volume:= ReadInteger('WMP', 'Volume', Volume); finally Free; end; except // Ignore end; end; procedure SaveConfiguration; begin try with TIniFile.Create(ConfigFile) do try WriteInteger('WMP', 'Volume', Volume); finally Free; end; except // Ignore end; end; function ListLoadW(ParentWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): HWND; stdcall; var ARect: TRect; APlayer: IWMPPlayer4; AData: TActiveXContainer; WindowClassW: TWndClassW; begin try APlayer:= CoWindowsMediaPlayer.Create; except Exit(wlxInvalidHandle); end; ZeroMemory(@WindowClassW, SizeOf(WndClassW)); with WindowClassW do begin Style := CS_DBLCLKS; lpfnWndProc := @DefWindowProc; cbWndExtra := SizeOf(Pointer); hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := CLASS_NAME; hInstance := GetModuleHandleW(nil); end; Windows.RegisterClassW(WindowClassW); if not GetClientRect(ParentWin, ARect) then ARect:= TRect.Create(0, 0, 640, 480); Result:= CreateWindowW(CLASS_NAME, 'PreviewHandler', WS_CHILD or WS_VISIBLE, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, ParentWin, 0, WindowClassW.hInstance, nil); if (Result <> wlxInvalidHandle) then begin AData:= TActiveXContainer.Create(nil); AData.Handle:= Result; AData.ComServer:= APlayer; try AData.Active:= True; APlayer.settings.volume:= Volume; APlayer.URL:= WideString(FileToLoad); APlayer.Controls.Play; except AData.Free; DestroyWindow(Result); Result:= wlxInvalidHandle; end; end; end; procedure ListCloseWindow(ListWin: HWND); stdcall; var AVolume: Integer; AData: TActiveXContainer; AHandle: THandle absolute AData; begin AHandle:= GetWindowLongPtr(ListWin, GWLP_USERDATA); if Assigned(AData) then begin AVolume:= (AData.ComServer as IWMPPlayer4).settings.volume; if AVolume <> Volume then begin Volume:= AVolume; SaveConfiguration; end; AData.Free; end; DestroyWindow(ListWin); end; function ListLoadNextW(ParentWin, PluginWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): Integer; stdcall; var APlayer: IWMPPlayer4; AData: TActiveXContainer; AHandle: THandle absolute AData; begin AHandle:= GetWindowLongPtr(PluginWin, GWLP_USERDATA); if Assigned(AData) then begin APlayer:= AData.ComServer as IWMPPlayer4; try APlayer.Controls.Stop; APlayer.URL:= WideString(FileToLoad); APlayer.Controls.Play; except Exit(LISTPLUGIN_ERROR); end; end; Result:= LISTPLUGIN_OK; end; procedure ListSetDefaultParams(dps: PListDefaultParamStruct); stdcall; begin // Save configuration file name ConfigFile:= dps^.DefaultIniName; LoadConfiguration; end; procedure ListGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); stdcall; begin StrLCopy(DetectString, '(EXT="WAV")|(EXT="MP3")|(EXT="WMA")|(EXT="MP4")|(EXT="AVI")|(EXT="WMV")', MaxLen); end; exports ListLoadW, ListLoadNextW, ListCloseWindow, ListGetDetectString, ListSetDefaultParams; end. doublecmd-1.1.30/plugins/wlx/wmp/src/wmp.lpi0000644000175000001440000000657315104114162017776 0ustar alexxusers <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes> <Item Name="Release" Default="True"/> <Item Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\wmp.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <TrashVariables Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <Units> <Unit> <Filename Value="wmp.lpr"/> <IsPartOfProject Value="True"/> </Unit> <Unit> <Filename Value="wmplib_1_0_tlb.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="WMPLib_1_0_TLB"/> </Unit> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\wmp.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> <Debugging> <Exceptions> <Item> <Name Value="EAbort"/> </Item> <Item> <Name Value="ECodetoolError"/> </Item> <Item> <Name Value="EFOpenError"/> </Item> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/wmp/src/activexcontainer.pas�������������������������������������������0000644�0001750�0000144�00000047554�15104114162�022544� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit activexcontainer; {$mode delphi}{$H+} { Visual ActiveX container. Copyright (C) 2011 Ludo Brands This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. } interface uses Classes, SysUtils, Windows, ActiveX, ComObj; type //from OCIDL.h PPointF = ^TPointF; tagPOINTF = record x: Single; y: Single; end; TPointF = tagPOINTF; POINTF = TPointF; IOleControlSite = interface ['{B196B289-BAB4-101A-B69C-00AA00341D07}'] function OnControlInfoChanged: HResult; stdcall; function LockInPlaceActive(fLock: BOOL): HResult; stdcall; function GetExtendedControl(out disp: IDispatch): HResult; stdcall; function TransformCoords(var ptlHimetric: TPoint; var ptfContainer: TPointF; flags: Longint): HResult; stdcall; function TranslateAccelerator(msg: PMsg; grfModifiers: Longint): HResult; stdcall; function OnFocus(fGotFocus: BOOL): HResult; stdcall; function ShowPropertyFrame: HResult; stdcall; end; IPropertyNotifySink = interface ['{9BFBBC02-EFF1-101A-84ED-00AA00341D07}'] function OnChanged(dispid: TDispID): HResult; stdcall; function OnRequestEdit(dispid: TDispID): HResult; stdcall; end; ISimpleFrameSite = interface ['{742B0E01-14E6-101B-914E-00AA00300CAB}'] function PreMessageFilter(wnd: HWnd; msg, wp, lp: Integer; out res: Integer; out Cookie: Longint): HResult; stdcall; function PostMessageFilter(wnd: HWnd; msg, wp, lp: Integer; out res: Integer; Cookie: Longint): HResult; stdcall; end; TStatusTextEvent = procedure(Sender: TObject; Status:string) of object; { TActiveXContainer } TActiveXContainer = class(TComponent, IUnknown, IOleClientSite, IOleControlSite, IOleInPlaceSite, IOleInPlaceFrame, IDispatch) private FHandle: HWND; FPixelsPerInchX, FPixelsPerInchY: Integer; FActive: boolean; FAttached: boolean; FClassName: string; FOleObject: IDispatch; FOnStatusText: TStatusTextEvent; FPrevWndProc:windows.WNDPROC; Function GetvObject:variant; //IOleClientSite Function SaveObject: HResult;StdCall; Function GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint;OUT mk: IMoniker):HResult;StdCall; Function GetContainer(OUT container: IOleContainer):HResult;StdCall; procedure SetActive(AValue: boolean); procedure SetClassName(AValue: string); procedure SetHandle(AValue: HWND); procedure SetOleObject(AValue: IDispatch); Function ShowObject:HResult;StdCall; Function OnShowWindow(fShow: BOOL):HResult;StdCall; Function RequestNewObjectLayout:HResult;StdCall; //IOleControlSite function OnControlInfoChanged: HResult; stdcall; function LockInPlaceActive(fLock: BOOL): HResult; stdcall; function GetExtendedControl(out disp: IDispatch): HResult; stdcall; function TransformCoords(var ptlHimetric: TPoint; var ptfContainer: TPointF; flags: Longint): HResult; stdcall; function TranslateAccelerator(msg: PMsg; grfModifiers: Longint): HResult;overload; stdcall; function OnFocus(fGotFocus: BOOL): HResult; stdcall; function ShowPropertyFrame: HResult; stdcall; //IOleInPlaceSite function CanInPlaceActivate : HResult;stdcall; function OnInPlaceActivate : HResult;stdcall; function OnUIActivate : HResult;stdcall; function GetWindowContext(out ppframe:IOleInPlaceFrame;out ppdoc:IOleInPlaceUIWindow;lprcposrect:LPRECT;lprccliprect:LPRECT;lpframeinfo:LPOLEINPLACEFRAMEINFO):hresult; stdcall; function Scroll(scrollExtant:TSIZE):hresult; stdcall; function OnUIDeactivate(fUndoable:BOOL):hresult; stdcall; function OnInPlaceDeactivate :hresult; stdcall; function DiscardUndoState :hresult; stdcall; function DeactivateAndUndo :hresult; stdcall; function OnPosRectChange(lprcPosRect:LPRect):hresult; stdcall; //IOleWindow function GetWindow(out wnd: HWnd): HResult; stdcall; function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall; //IOleInPlaceFrame function InsertMenus(hmenuShared: HMenu; var menuWidths: TOleMenuGroupWidths): HResult;StdCall; function SetMenu(hmenuShared: HMenu; holemenu: HMenu; hwndActiveObject: HWnd): HResult;StdCall; function RemoveMenus(hmenuShared: HMenu): HResult;StdCall; function SetStatusText(pszStatusText: POleStr): HResult;StdCall; function EnableModeless(fEnable: BOOL): HResult;StdCall; function TranslateAccelerator(var msg: TMsg; wID: Word): HResult;StdCall;overload; //IOleInPlaceUIWindow function GetBorder(out rectBorder: TRect):HResult;StdCall; function RequestBorderSpace(const borderwidths: TRect):HResult;StdCall; function SetBorderSpace(const borderwidths: TRect):HResult;StdCall; function SetActiveObject(const activeObject: IOleInPlaceActiveObject;pszObjName: POleStr):HResult;StdCall; //IDispatch function GetTypeInfoCount(out count : longint) : HResult;stdcall; function GetTypeInfo(Index,LocaleID : longint; out TypeInfo): HResult;stdcall; function GetIDsOfNames(const iid: TGUID; names: Pointer; NameCount, LocaleID: LongInt; DispIDs: Pointer) : HResult;stdcall; function Invoke(DispID: LongInt;const iid : TGUID; LocaleID : longint; Flags: Word;var params; VarResult,ExcepInfo,ArgErr : pointer) : HResult;stdcall; //internal procedure Attach; procedure Detach; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; //VT_DISPATCH variant used for late binding property vObject:Variant read GetvObject; published //ActiveX object is automatically created from classname and destroyed when set property OleClassName:string read FClassName write SetClassName; {IDispatch interface for ActiveX object. Overrides classname. Set ComServer when you create and destroy the object yourself, fe. using CoClass. When Active, returns the IDispatch for the object. } property ComServer:IDispatch read FOleObject write SetOleObject; {When set, binds ActiveX component to control. When cleared, detaches the component from the control If Classname is provided the ActiveX component will also be created and destroyed automatically.} property Active:boolean read FActive write SetActive; property Handle: HWND read FHandle write SetHandle; end; implementation {$ifdef wince} const GWLP_USERDATA=GWL_USERDATA; function GetWindowLongPtrW(hWnd:HWND; nIndex:longint):LONG; begin result:=GetWindowLongW(hWnd, nIndex); end; function SetWindowLongPtrW(hWnd:HWND; nIndex:longint; dwNewLong:LONG):LONG; begin result:=SetWindowLongW(hWnd, nIndex, dwNewLong); end; function SetWindowLongPtr(hWnd:HWND; nIndex:longint; dwNewLong:LONG):LONG; begin result:=SetWindowLongW(hWnd, nIndex, dwNewLong); end; {$endif wince} function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam): LRESULT; stdcall; var bounds:TRect; DC: HDC; size:TPOINT; AXC:TActiveXContainer; begin AXC:=TActiveXContainer(GetWindowLongPtrW( Ahwnd, GWLP_USERDATA)); case uMsg of WM_DESTROY:AXC.Detach; WM_SIZE: begin size.x:=(LOWORD(lparam)*2540) div AXC.FPixelsPerInchX; size.y:=(HIWORD(lparam)*2540) div AXC.FPixelsPerInchY; MoveWindow(AXC.FHandle, 0, 0, LOWORD(lparam), HIWORD(lparam), True); olecheck((AXC.ComServer as IOleObject).SetExtent(DVASPECT_CONTENT,size)); GetClientRect(AXC.FHandle, @bounds); olecheck((AXC.ComServer as IOleInPlaceObject).SetObjectRects(@bounds,@bounds)); end; WM_PAINT: begin DC:=GetDC(AXC.handle); GetClientRect(AXC.FHandle, @bounds); olecheck((AXC.ComServer as IViewObject).Draw(DVASPECT_CONTENT,0,nil,nil,0,DC,@bounds,@bounds,nil,0)); ReleaseDC(AXC.handle,DC); end; end; result:=CallWindowProc(AXC.FPrevWndProc,Ahwnd, uMsg, WParam, LParam); end; { TActiveXContainer } function TActiveXContainer.GetvObject: variant; begin result:=FOleObject; end; function TActiveXContainer.SaveObject: HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint; out mk: IMoniker): HResult; StdCall; begin mk := nil; Result := E_NOTIMPL; end; function TActiveXContainer.GetContainer(out container: IOleContainer): HResult; StdCall; begin container := nil; Result := E_NOINTERFACE; end; procedure TActiveXContainer.SetActive(AValue: boolean); begin if FActive=AValue then Exit; if AValue then begin if (FClassName='') and not assigned(ComServer) then raise exception.Create('OleClassName and ComServer not assigned.'); if not assigned(FOleObject) then FOleObject:=CreateOleObject(FClassName); Attach; end else begin Detach; if FClassName<>'' then //destroy com object FOleObject:=nil; end; FActive:=AValue; end; procedure TActiveXContainer.SetClassName(AValue: string); begin if (FClassName=AValue) or FActive then Exit; FClassName:=AValue; end; procedure TActiveXContainer.SetHandle(AValue: HWND); var DC: HDC; begin if FHandle=AValue then Exit; FHandle:=AValue; DC:= GetDC(FHandle); FPixelsPerInchX := GetDeviceCaps(DC, LOGPIXELSX); FPixelsPerInchY := GetDeviceCaps(DC, LOGPIXELSY); ReleaseDC(FHandle, DC); end; procedure TActiveXContainer.SetOleObject(AValue: IDispatch); begin if (FOleObject=AValue) or FActive then Exit; FOleObject:=AValue; end; function TActiveXContainer.ShowObject: HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.OnShowWindow(fShow: BOOL): HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.RequestNewObjectLayout: HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.OnControlInfoChanged: HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.LockInPlaceActive(fLock: BOOL): HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.GetExtendedControl(out disp: IDispatch): HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.TransformCoords(var ptlHimetric: TPoint; var ptfContainer: TPointF; flags: Longint): HResult; stdcall; begin if flags and 4 <> 0 then //XFORMCOORDS_HIMETRICTOCONTAINER=4 begin ptfContainer.X := (ptlHimetric.X * FPixelsPerInchX) div 2540; ptfContainer.Y := (ptlHimetric.Y * FPixelsPerInchY) div 2540; end else if assigned(@ptlHimetric) and (flags and 8 <> 0) then //XFORMCOORDS_CONTAINERTOHIMETRIC = 8 begin ptlHimetric.X := Integer(Round(ptfContainer.X * 2540 / FPixelsPerInchX)); ptlHimetric.Y := Integer(Round(ptfContainer.Y * 2540 / FPixelsPerInchY)); end; Result := S_OK; end; function TActiveXContainer.TranslateAccelerator(msg: PMsg; grfModifiers: Longint ): HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.OnFocus(fGotFocus: BOOL): HResult; stdcall; begin Result := S_OK; end; function TActiveXContainer.ShowPropertyFrame: HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.CanInPlaceActivate: HResult;stdcall; begin Result := S_OK; end; function TActiveXContainer.OnInPlaceActivate: HResult;stdcall; begin Result := S_OK; end; function TActiveXContainer.OnUIActivate: HResult; stdcall; begin Result := S_OK; end; function TActiveXContainer.GetWindowContext(out ppframe: IOleInPlaceFrame; out ppdoc: IOleInPlaceUIWindow; lprcposrect: LPRECT; lprccliprect: LPRECT; lpframeinfo: LPOLEINPLACEFRAMEINFO): hresult; stdcall; begin if assigned (ppframe) then ppframe := Self as IOleInPlaceFrame; if assigned(ppdoc) then ppdoc:= nil; if assigned(lpframeinfo) then begin lpframeinfo.fMDIApp := False; lpframeinfo.cAccelEntries := 0; lpframeinfo.haccel := 0; lpframeinfo.hwndFrame := Handle; end; if assigned (lprcPosRect) then GetClientRect(FHandle, lprcPosRect); if assigned (lprcClipRect) then GetClientRect(FHandle, lprcClipRect); Result := S_OK; end; function TActiveXContainer.Scroll(scrollExtant: TSIZE): hresult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.OnUIDeactivate(fUndoable: BOOL): hresult; stdcall; begin Result := S_OK; end; function TActiveXContainer.OnInPlaceDeactivate: hresult; stdcall; begin Result := S_OK; end; function TActiveXContainer.DiscardUndoState: hresult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.DeactivateAndUndo: hresult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.OnPosRectChange(lprcPosRect: LPRect): hresult; stdcall; begin Result := S_OK; end; function TActiveXContainer.GetWindow(out wnd: HWnd): HResult; stdcall; begin wnd:=Handle; Result := S_OK; end; function TActiveXContainer.ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.InsertMenus(hmenuShared: HMenu; var menuWidths: TOleMenuGroupWidths): HResult; StdCall; begin Result := E_NOTIMPL; end; function TActiveXContainer.SetMenu(hmenuShared: HMenu; holemenu: HMenu; hwndActiveObject: HWnd): HResult; StdCall; begin Result := E_NOTIMPL; end; function TActiveXContainer.RemoveMenus(hmenuShared: HMenu): HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.SetStatusText(pszStatusText: POleStr): HResult; StdCall; begin if assigned(FOnStatusText) then FOnStatusText(Self,utf8encode(WideString(pszStatusText))); Result := S_OK; end; function TActiveXContainer.EnableModeless(fEnable: BOOL): HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.TranslateAccelerator(var msg: TMsg; wID: Word): HResult; StdCall; begin Result := E_NOTIMPL; end; function TActiveXContainer.GetBorder(out rectBorder: TRect): HResult; StdCall; begin Result := INPLACE_E_NOTOOLSPACE; end; function TActiveXContainer.RequestBorderSpace(const borderwidths: TRect): HResult; StdCall; begin Result := INPLACE_E_NOTOOLSPACE; end; function TActiveXContainer.SetBorderSpace(const borderwidths: TRect): HResult; StdCall; begin Result := E_NOTIMPL; end; function TActiveXContainer.SetActiveObject( const activeObject: IOleInPlaceActiveObject; pszObjName: POleStr): HResult; StdCall; begin Result := S_OK; end; function TActiveXContainer.GetTypeInfoCount(out count: longint): HResult; stdcall; begin Count := 0; Result := S_OK; end; function TActiveXContainer.GetTypeInfo(Index, LocaleID: longint; out TypeInfo ): HResult; stdcall; begin Pointer(TypeInfo) := nil; Result := E_NOTIMPL; end; function TActiveXContainer.GetIDsOfNames(const iid: TGUID; names: Pointer; NameCount, LocaleID: LongInt; DispIDs: Pointer): HResult; stdcall; begin Result := E_NOTIMPL; end; function TActiveXContainer.Invoke(DispID: LongInt; const iid: TGUID; LocaleID: longint; Flags: Word; var params; VarResult, ExcepInfo, ArgErr: pointer): HResult; stdcall; const DISPID_AMBIENT_BACKCOLOR = -701; DISPID_AMBIENT_DISPLAYNAME = -702; DISPID_AMBIENT_FONT = -703; DISPID_AMBIENT_FORECOLOR = -704; DISPID_AMBIENT_LOCALEID = -705; DISPID_AMBIENT_MESSAGEREFLECT = -706; DISPID_AMBIENT_USERMODE = -709; DISPID_AMBIENT_UIDEAD = -710; DISPID_AMBIENT_SHOWGRABHANDLES = -711; DISPID_AMBIENT_SHOWHATCHING = -712; DISPID_AMBIENT_SUPPORTSMNEMONICS = -714; DISPID_AMBIENT_AUTOCLIP = -715; begin if (Flags and DISPATCH_PROPERTYGET <> 0) and (VarResult <> nil) then begin Result := S_OK; case DispID of // DISPID_AMBIENT_BACKCOLOR: // PVariant(VarResult)^ := Color; DISPID_AMBIENT_DISPLAYNAME: PVariant(VarResult)^ := OleVariant(Name); DISPID_AMBIENT_FONT: PVariant(VarResult)^ :=nil; // DISPID_AMBIENT_FORECOLOR: // PVariant(VarResult)^ := Font.Color; DISPID_AMBIENT_LOCALEID: PVariant(VarResult)^ := Integer(GetUserDefaultLCID); DISPID_AMBIENT_MESSAGEREFLECT: PVariant(VarResult)^ := False; DISPID_AMBIENT_USERMODE: PVariant(VarResult)^ := not (csDesigning in ComponentState); DISPID_AMBIENT_UIDEAD: PVariant(VarResult)^ := csDesigning in ComponentState; DISPID_AMBIENT_SHOWGRABHANDLES: PVariant(VarResult)^ := False; DISPID_AMBIENT_SHOWHATCHING: PVariant(VarResult)^ := False; DISPID_AMBIENT_SUPPORTSMNEMONICS: PVariant(VarResult)^ := True; DISPID_AMBIENT_AUTOCLIP: PVariant(VarResult)^ := True; else Result := DISP_E_MEMBERNOTFOUND; end; end else Result := DISP_E_MEMBERNOTFOUND; end; procedure TActiveXContainer.Attach; var size:TPOINT; ARect: TRect; begin SetWindowLongPtr(Handle,GWLP_USERDATA, PtrInt(Self)); FPrevWndProc:=Windows.WNDPROC(SetWindowLongPtr(Handle,GWL_WNDPROC,PtrInt(@WndCallback))); FAttached:=true; olecheck((FOleObject as IOleObject).SetClientSite(Self as IOleClientSite)); olecheck((FOleObject as IOleObject).SetHostNames(PWideChar(name),PWideChar(name))); GetClientRect(FHandle, ARect); size.x:=(ARect.Width*2540) div FPixelsPerInchX; size.y:=(ARect.Height*2540) div FPixelsPerInchY; olecheck((FOleObject as IOleObject).SetExtent(DVASPECT_CONTENT,size)); olecheck((FOleObject as IOleObject).DoVerb(OLEIVERB_INPLACEACTIVATE,nil,Self as IOleClientSite,0,Handle,ARect)); end; procedure TActiveXContainer.Detach; const OLECLOSE_NOSAVE = 1; begin if FAttached then begin SetWindowLongPtr(Handle,GWL_WNDPROC,PtrInt(@FPrevWndProc)); SetWindowLongPtr(Handle,GWLP_USERDATA, 0); end; if assigned(FOleObject) then begin olecheck((FOleObject as IOleObject).SetClientSite(nil)); olecheck((FOleObject as IOleObject).Close(OLECLOSE_NOSAVE)); end; end; constructor TActiveXContainer.Create(TheOwner: TComponent); begin inherited Create(TheOwner); end; destructor TActiveXContainer.Destroy; begin Active:=false; //destroys com object if created by Self inherited Destroy; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/simplewlx/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017104� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/simplewlx/src/���������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017673� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/simplewlx/src/wlxplugin.pas��������������������������������������������0000644�0001750�0000144�00000004443�15104114162�022436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Lister API definitions. // This unit is written by Christian Ghisler, it's from Total Commander // Lister API Guide, which can be found at http://ghisler.com. // Version: 1.8. unit WLXPlugin; interface {$IFDEF MSWINDOWS} uses Windows;{$ENDIF} const lc_copy=1; lc_newparams=2; lc_selectall=3; lc_setpercent=4; lcp_wraptext=1; lcp_fittowindow=2; lcp_ansi=4; lcp_ascii=8; lcp_variable=12; lcp_forceshow=16; lcp_fitlargeronly=32; lcp_center=64; lcs_findfirst=1; lcs_matchcase=2; lcs_wholewords=4; lcs_backwards=8; itm_percent=$FFFE; itm_fontstyle=$FFFD; itm_wrap=$FFFC; itm_fit=$FFFB; itm_next=$FFFA; itm_center=$FFF9; LISTPLUGIN_OK=0; LISTPLUGIN_ERROR=1; const MAX_PATH=32000; type tListDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pListDefaultParamStruct=^tListDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; type HBITMAP = type LongWord; { Function prototypes: Functions need to be defined exactly like this!} { function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; stdcall; function ListLoadNext(ParentWin,PluginWin:thandle;FileToLoad:pchar;ShowFlags:integer):integer; stdcall; procedure ListCloseWindow(ListWin:thandle); stdcall; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); stdcall; function ListSearchText(ListWin:thandle;SearchString:pchar; SearchParameter:integer):integer; stdcall; function ListSearchDialog(ListWin:thandle;FindNext:integer):integer; stdcall; function ListSendCommand(ListWin:thandle;Command,Parameter:integer):integer; stdcall; function ListPrint(ListWin:thandle;FileToPrint,DefPrinter:pchar; PrintFlags:integer;var Margins:trect):integer; stdcall; function ListNotificationReceived(ListWin:thandle;Message,wParam,lParam:integer):integer; stdcall; procedure ListSetDefaultParams(dps:pListDefaultParamStruct); stdcall; function ListGetPreviewBitmap(FileToLoad:pchar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; stdcall; } implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/simplewlx/src/simplewlx.lpr��������������������������������������������0000644�0001750�0000144�00000005325�15104114162�022443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library SimpleWlx; {$mode objfpc}{$H+} {$include calling.inc} {$DEFINE GTK2} uses Classes, sysutils, {$IFDEF GTK} gtk,gdk,glib, {$ENDIF} {$IFDEF GTK2} gtk2,gdk2,glib2, {$ENDIF} WLXPlugin; var List:TStringList; //Custom class contains info for plugin windows type { TPlugInfo } TPlugInfo = class private fControls:TStringList; public fFileToLoad:string; fShowFlags:integer; //etc constructor Create; destructor Destroy; override; function AddControl(AItem:PGtkWidget):integer; end; { TPlugInfo } constructor TPlugInfo.Create; begin fControls:=TStringlist.Create; end; destructor TPlugInfo.Destroy; begin while fControls.Count>0 do begin gtk_widget_destroy(PGtkWidget(fControls.Objects[0])); fControls.Delete(0); end; inherited Destroy; end; function TPlugInfo.AddControl(AItem: PGtkWidget): integer; begin fControls.AddObject(inttostr(Integer(AItem)),TObject(AItem)); end; function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; dcpcall; var GFix, GButton1, Gbutton2: PGtkWidget; begin // gFix:=gtk_fixed_new; gFix:=gtk_vbox_new(true,5); gtk_container_add(GTK_CONTAINER(PGtkWidget(ParentWin)),gFix); gtk_widget_show(gFix); GButton1:=gtk_button_new_with_label('Yehoo1'); gtk_container_add(GTK_CONTAINER(GFix),GButton1); gtk_widget_set_usize(GButton1,10,10); // gtk_widget_set_uposition(GButton1,30,10); gtk_widget_show(GButton1); Gbutton2:=gtk_button_new_with_label('Yehoo2'); gtk_container_add(GTK_CONTAINER(GFix),Gbutton2 ); gtk_widget_set_usize(GButton2,20,20); // gtk_widget_set_uposition(GButton2,50,50); gtk_widget_show(Gbutton2); //Create list if none if not assigned(List) then List:=TStringList.Create; //add to list new plugin window and it's info List.AddObject(IntToStr(integer(GFix)),TPlugInfo.Create); with TPlugInfo(List.Objects[List.Count-1]) do begin fFileToLoad:=FileToLoad; fShowFlags:=ShowFlags; AddControl(GFix); end; Result:= thandle(GFix); end; procedure ListCloseWindow(ListWin:thandle); dcpcall; var Index:integer; s:string; begin if assigned(List) then begin writeln('ListCloseWindow quit, List Item count: '+inttostr(List.Count)); s:=IntToStr(ListWin); Index:=List.IndexOf(s); if Index>-1 then begin TPlugInfo(List.Objects[index]).Free; List.Delete(Index); writeln('List item n: '+inttostr(Index)+' Deleted'); end; //Free list if it has zero items If List.Count=0 then FreeAndNil(List); end; end; exports ListLoad, ListCloseWindow; begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/simplewlx/src/simplewlx.lpi��������������������������������������������0000644�0001750�0000144�00000004105�15104114162�022425� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <Language Value=""/> <CharSet Value=""/> <StringTable ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="simplewlx.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="SimpleWlx"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../simplewlx.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/richview/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016700� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/richview/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017467� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/richview/src/richview.lpr����������������������������������������������0000644�0001750�0000144�00000014164�15104114162�022034� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Rich Text Format plugin Copyright (C) 2022 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } library richview; {$mode objfpc}{$H+} uses RichEdit, Windows, Messages, WlxPlugin; type {$push}{$packrecords 4} TEditStream = record dwCookie : DWORD_PTR; dwError : DWORD; pfnCallback : EDITSTREAMCALLBACK; end; {$pop} var RichEditClass: PWideChar; function LoadLibraryX(const AName: PWideChar): HMODULE; begin Result:= LoadLibraryExW(AName, 0, LOAD_LIBRARY_SEARCH_SYSTEM32); end; function RichEditWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var AWndProc: Windows.WNDPROC; AHandle: LONG_PTR absolute AWndProc; begin if (uiMsg = WM_KEYDOWN) then begin if (wParam = VK_ESCAPE) then begin PostMessage(GetParent(hWnd), WM_SYSCOMMAND, SC_CLOSE, 0); end; end; AHandle := GetWindowLongPtr(hWnd, GWLP_USERDATA); if Assigned(AWndProc) then Result := CallWindowProc(AWndProc, hWnd, uiMsg, wParam, lParam) else begin Result := DefWindowProc(hWnd, uiMsg, wParam, lParam); end; end; function EditStreamCallback(dwCookie: DWORD_PTR; lpBuff: LPBYTE; cb: LONG; pcb: PLONG): DWORD; stdcall; var AFile: THandle absolute dwCookie; begin if (ReadFile(AFile, lpBuff^, cb, PDWORD(pcb)^, nil)) then Exit(0); Result:= DWORD(-1); end; function ListLoadW(ParentWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): HWND; stdcall; var ARect: TRect; AFile: THandle; AResult: Boolean; hInstance: HMODULE; AWndProc: LONG_PTR; AStream: TEditStream; begin if (RichEditClass = nil) then Exit(wlxInvalidHandle); AFile:= CreateFileW(FileToLoad, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0); if (AFile = INVALID_HANDLE_VALUE) then Exit(wlxInvalidHandle); hInstance := GetModuleHandleW(nil); if not GetClientRect(ParentWin, @ARect) then ARect:= TRect.Create(0, 0, 640, 480); Result:= CreateWindowW(RichEditClass, nil, WS_CHILD or WS_HSCROLL or WS_VSCROLL or ES_READONLY or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL or WS_TABSTOP, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, ParentWin, hInstance, 0, nil); if (Result <> wlxInvalidHandle) then begin AStream.dwError := 0; AStream.dwCookie := DWORD_PTR(AFile); AStream.pfnCallback := @EditStreamCallback; AResult := (SendMessage(Result, EM_STREAMIN, SF_RTF, LPARAM(@AStream)) <> 0) and (AStream.dwError = 0); if AResult then begin AWndProc:= SetWindowLongPtr(Result, GWLP_WNDPROC, LONG_PTR(@RichEditWndProc)); SetWindowLongPtr(Result, GWLP_USERDATA, AWndProc); ShowWindow(Result, SW_SHOW); end else begin DestroyWindow(Result); Result:= wlxInvalidHandle; end; end; CloseHandle(AFile); end; function ListSearchTextW(ListWin: HWND; SearchString: PWideChar; SearchParameter: Integer): Integer; stdcall; var AMode: TFindTextExW; wParam: Windows.WPARAM; ARange: RichEdit.TCharRange; begin AMode:= Default(TFindTextExW); AMode.lpstrText:= SearchString; SendMessageW(ListWin, EM_EXGETSEL, 0, LPARAM(@ARange)); if (SearchParameter and lcs_findfirst <> 0) then begin if SearchParameter and lcs_backwards <> 0 then ARange.cpMin:= High(LONG) else ARange.cpMax:= 0; end; if SearchParameter and lcs_backwards <> 0 then begin wParam:= 0; AMode.chrg.cpMax:= 0; AMode.chrg.cpMin:= ARange.cpMin; end else begin wParam:= FR_DOWN; AMode.chrg.cpMax:= -1; AMode.chrg.cpMin:= ARange.cpMax; end; if (SearchParameter and lcs_matchcase <> 0) then wParam:= wParam or FR_MATCHCASE; if (SearchParameter and lcs_wholewords <> 0) then wParam:= wParam or FR_WHOLEWORD; if SendMessageW(ListWin, EM_FINDTEXTEXW, wParam, LPARAM(@AMode)) >= 0 then begin Result:= LISTPLUGIN_OK; SendMessageW(ListWin, EM_EXSETSEL, 0, LPARAM(@AMode.chrgText)); end else begin Result:= LISTPLUGIN_ERROR; end; end; function ListSendCommand(ListWin: HWND; Command, Parameter: Integer): Integer; stdcall; var ARange: TCharRange; begin case Command of lc_selectall: begin ARange.cpMin:= 0; ARange.cpMax:= -1; if SendMessageW(ListWin, EM_EXSETSEL, 0, LPARAM(@ARange)) >= 0 then Result:= LISTPLUGIN_OK else begin Result:= LISTPLUGIN_ERROR; end; end; lc_copy: begin if SendMessageW(ListWin, WM_COPY, 0, 0) <> 0 then Result:= LISTPLUGIN_OK else begin Result:= LISTPLUGIN_ERROR; end; end; else begin Result:= LISTPLUGIN_ERROR; end; end; end; procedure ListGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); stdcall; begin lstrcpynA(DetectString, 'EXT="RTF"', MaxLen); end; procedure ListSetDefaultParams(dps: PListDefaultParamStruct); stdcall; begin // Rich Edit Version 4.1 if (LoadLibraryX('Msftedit.dll') <> NilHandle) then RichEditClass := 'RichEdit50W' // Rich Edit Version 2.0/3.0 else if (LoadLibraryX('riched20.dll') <> NilHandle) then RichEditClass := 'RichEdit20W' else begin RichEditClass := nil; end; end; exports ListLoadW, ListSearchTextW, ListSendCommand, ListGetDetectString, ListSetDefaultParams; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/richview/src/richview.lpi����������������������������������������������0000644�0001750�0000144�00000006257�15104114162�022027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="RichView"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\richview.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> <Win32> <GraphicApplication Value="True"/> </Win32> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <Units Count="1"> <Unit0> <Filename Value="richview.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\richview.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <Win32> <GraphicApplication Value="True"/> </Win32> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/preview/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016541� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/preview/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017330� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/preview/src/upreviewhandler.pas����������������������������������������0000644�0001750�0000144�00000012360�15104114162�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Explorer preview handler Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit uPreviewHandler; {$mode delphi} interface uses Classes, SysUtils, Windows, ShlObj, ActiveX; type IPreviewHandler = interface(IUnknown) ['{8895B1C6-B41F-4C1C-A562-0D564250836F}'] function SetWindow(hwnd: HWND; const prc: RECT): HRESULT; stdcall; function SetRect(const prc: PRECT): HRESULT; stdcall; function DoPreview(): HRESULT; stdcall; function Unload(): HRESULT; stdcall; function SetFocus(): HRESULT; stdcall; function QueryFocus(out phwnd: HWND): HRESULT; stdcall; function TranslateAccelerator(pmsg: PMSG): HRESULT; stdcall; end; function GetPreviewHandler(const FileName: UnicodeString): IPreviewHandler; implementation uses ComObj, DCConvertEncoding, DCClassesUtf8; type IInitializeWithFile = interface(IUnknown) ['{B7D14566-0509-4CCE-A71F-0A554233BD9B}'] function Initialize(pszFilePath: LPCWSTR; grfMode: DWORD): HRESULT; stdcall; end; IInitializeWithStream = interface(IUnknown) ['{B824B49D-22AC-4161-AC8A-9916E8FA3F7F}'] function Initialize(const pstream: IStream; grfMode: DWORD): HRESULT; stdcall; end; IInitializeWithItem = interface(IUnknown) ['{7F73BE3F-FB79-493C-A6C7-7EE14E245841}'] function Initialize(const psi: IShellItem; grfMode: DWORD): HRESULT; stdcall; end; var SHCreateItemFromParsingName: function(pszPath: LPCWSTR; const pbc: IBindCtx; const riid: TIID; out ppv): HRESULT; stdcall; function AssocQueryStringW(flags: DWORD; str: DWORD; pszAssoc: LPCWSTR; pszExtra: LPCWSTR; pszOut: LPWSTR; pcchOut: PDWORD): HRESULT; stdcall; external 'shlwapi.dll'; function GetShellClass(const FileExt: UnicodeString; interfaceID: TGUID): TGUID; const ASSOCSTR_SHELLEXTENSION = 16; ASSOCF_INIT_DEFAULTTOSTAR = $00000004; var Res: HRESULT; cchOut: DWORD = MAX_PATH; ABuffer: array[0..MAX_PATH] of WideChar; begin Res := AssocQueryStringW(ASSOCF_INIT_DEFAULTTOSTAR, ASSOCSTR_SHELLEXTENSION, PWideChar(FileExt), PWideChar(CeUtf8ToUtf16(GuidToString(interfaceID))), ABuffer, @cchOut); if (Res <> S_OK) then Exit(Default(TGUID)); Res := CLSIDFromString(ABuffer, @Result); if (Res <> NOERROR) then Exit(Default(TGUID)); end; function GetPreviewHandler(const FileName: UnicodeString): IPreviewHandler; var Res: HRESULT; ClassID: TGUID; AStream: IStream; AFile: TFileStreamEx; AShellItem: IShellItem; AInitializeWithFile: IInitializeWithFile; AInitializeWithItem: IInitializeWithItem; AInitializeWithStream: IInitializeWithStream; begin ClassID:= GetShellClass(ExtractFileExt(FileName), IPreviewHandler); if IsEqualGUID(ClassID, Default(TGUID)) then Exit(nil); Result:= CreateComObject(ClassID) as IPreviewHandler; if Assigned(Result) then begin if Supports(Result, IInitializeWithFile, AInitializeWithFile) then Res:= AInitializeWithFile.Initialize(PWideChar(FileName), STGM_READ) else if Supports(Result, IInitializeWithStream, AInitializeWithStream) then try AFile:= TFileStreamEx.Create(CeUtf16ToUtf8(FileName), fmOpenRead or fmShareDenyNone); AStream:= TStreamAdapter.Create(AFile, soOwned) as IStream; Res:= AInitializeWithStream.Initialize(AStream, STGM_READ); except Res:= E_FAIL; end else if (Win32MajorVersion > 5) and Supports(Result, IInitializeWithItem, AInitializeWithItem) then begin Res:= SHCreateItemFromParsingName(PWideChar(FileName), nil, IShellItem, AShellItem); if Succeeded(Res) then Res:= AInitializeWithItem.Initialize(AShellItem, STGM_READ); end else begin Res:= E_FAIL; end; if not Succeeded(Res) then begin Result:= nil; AStream:= nil; end; end; end; initialization if (Win32MajorVersion > 5) then SHCreateItemFromParsingName:= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHCreateItemFromParsingName'); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/preview/src/preview.lpr������������������������������������������������0000644�0001750�0000144�00000012314�15104114162�021531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Explorer preview plugin Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } library Preview; {$mode objfpc}{$H+} uses SysUtils, JwaWinUser, Windows, Messages, WlxPlugin, uPreviewHandler; const WH_KEYBOARD_LL = 13; PREVIEW_HANDLER = UnicodeString('IPreviewHandler'); type TPreviewData = class Handler: IPreviewHandler; end; var hhk: HHOOK; Count: Integer = 0; ProcessIdWide: PWideChar; ProcessIdAtom: ATOM absolute ProcessIdWide; procedure DLL_Entry_Hook(lpReserved : PtrInt); begin GlobalDeleteAtom(ProcessIdAtom); end; function LowLevelKeyboardProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var ParentWin: HWND; ProcessId: HANDLE; Msg: PKbDllHookStruct absolute lParam; function IsKeyUp(Key: Integer): Boolean; inline; begin Result := (GetKeyState(Key) and $8000) = 0; end; begin if (nCode = HC_ACTION) then begin if (wParam = WM_KEYDOWN) and (Msg^.vkCode = VK_ESCAPE) then begin ParentWin:= Windows.GetAncestor(GetForegroundWindow, GA_ROOT); ProcessId:= Windows.GetPropW(ParentWin, ProcessIdWide); if (ProcessId <> 0) and (ProcessId = GetProcessID) then begin if IsKeyUp(VK_MENU) and IsKeyUp(VK_CONTROL) and IsKeyUp(VK_MENU) then begin PostMessage(ParentWin, WM_SYSCOMMAND, SC_CLOSE, 0); end; end; end; end; Result:= CallNextHookEx(hhk, nCode, wParam, lParam); end; function WindowProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var ARect: TRect; AData: TPreviewData; AHandle: THandle absolute AData; begin if (uiMsg = WM_SETFOCUS) then begin AHandle:= GetWindowLongPtr(hWnd, GWLP_USERDATA); if (AHandle <> 0) then AData.Handler.SetFocus(); end else if (uiMsg = WM_SIZE) then begin AHandle:= GetWindowLongPtr(hWnd, GWLP_USERDATA); if (AHandle <> 0) then begin ARect.Top:= 0; ARect.Left:= 0; ARect.Width:= LOWORD(lParam); ARect.Height:= HIWORD(lParam); AData.Handler.SetRect(@ARect); end; end; Result := DefWindowProc(hWnd, uiMsg, wParam, lParam); end; function ListLoadW(ParentWin: HWND; FileToLoad: PWideChar; ShowFlags: Integer): HWND; stdcall; var ARect: TRect; AData: TPreviewData; WindowClassW: TWndClassW; AHandler: IPreviewHandler; AHandle: THandle absolute AData; begin AHandler:= GetPreviewHandler(FileToLoad); if (AHandler = nil) then Exit(wlxInvalidHandle); ZeroMemory(@WindowClassW, SizeOf(WndClassW)); with WindowClassW do begin Style := CS_DBLCLKS; lpfnWndProc := @WindowProc; cbWndExtra := SizeOf(Pointer); hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := PREVIEW_HANDLER; hInstance := GetModuleHandleW(nil); end; Windows.RegisterClassW(WindowClassW); if not GetClientRect(ParentWin, ARect) then ARect:= TRect.Create(0, 0, 640, 480); Result:= CreateWindowW(PREVIEW_HANDLER, 'PreviewHandler', WS_CHILD or WS_VISIBLE, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom, ParentWin, 0, WindowClassW.hInstance, nil); if (Result <> wlxInvalidHandle) then begin AData:= TPreviewData.Create; AData.Handler:= AHandler; SetPropW(ParentWin, ProcessIdWide, GetProcessID); SetWindowLongPtr(Result, GWLP_USERDATA, AHandle); AHandler.SetWindow(Result, ARect); AData.Handler.DoPreview(); Inc(Count); if (Count = 1) then begin hhk:= SetWindowsHookExW(WH_KEYBOARD_LL, @LowLevelKeyboardProc, WindowClassW.hInstance, 0); end; end; end; procedure ListCloseWindow(ListWin: HWND); stdcall; var AData: TPreviewData; AHandle: THandle absolute AData; begin AHandle:= GetWindowLongPtr(ListWin, GWLP_USERDATA); DestroyWindow(ListWin); if Assigned(AData) then begin AData.Handler.Unload(); AData.Free; Dec(Count); if Count = 0 then begin UnhookWindowsHookEx(hhk); end; end; end; procedure ListGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); stdcall; begin StrLCopy(DetectString, '(EXT="HTM")|(EXT="HTML")|(EXT="MHT")|(EXT="MHTML")', MaxLen); end; procedure ListSetDefaultParams(dps: PListDefaultParamStruct); stdcall; begin Dll_Process_Detach_Hook:= @DLL_Entry_Hook; ProcessIdAtom := GlobalAddAtomW(PREVIEW_HANDLER); end; exports ListLoadW, ListCloseWindow, ListGetDetectString, ListSetDefaultParams; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/preview/src/preview.lpi������������������������������������������������0000644�0001750�0000144�00000007314�15104114162�021524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="11"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="PreviewHandler"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\preview.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <TrashVariables Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <Win32> <GraphicApplication Value="True"/> </Win32> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> <Modes Count="0"/> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="preview.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="Preview"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\preview.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <Win32> <GraphicApplication Value="True"/> </Win32> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017164� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/src/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017753� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/src/wlxMplayer.lpr������������������������������������������0000644�0001750�0000144�00000017371�15104114162�022647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ WlxMplayer ------------------------------------------------------------------------- This is WLX (Lister) plugin for Double Commander. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Class TExProcess used in plugin was written by Anton Rjeshevsky. Gtk2 and Qt support were added by Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } library wlxMplayer; {$mode objfpc}{$H+} {$include calling.inc} {$IF NOT (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6))} {$DEFINE LCLGTK2} {$ENDIF} uses {$IFDEF UNIX} cthreads, {$IFNDEF HEAPTRC} cmem, {$ENDIF} {$ENDIF} Classes, sysutils, x, {$IFDEF LCLGTK} gtk, gdk, glib, {$ENDIF} {$IFDEF LCLGTK2} gtk2, gdk2, glib2, gdk2x, {$ENDIF} {$IFDEF LCLQT} qt4, {$ENDIF} {$IFDEF LCLQT5} qt5, {$ENDIF} {$IFDEF LCLQT6} qt6, {$ENDIF} process, math, WLXPlugin; type { TExProcess } TExProcess = class protected p: TProcess; s: string; function _GetExitStatus(): integer; public RezList:TStringList; constructor Create(commandline: string); procedure Execute; destructor Destroy; procedure OnReadLn(str: string); property ExitStatus: integer read _GetExitStatus; end; const buf_len = 3000; { TExProcess } function TExProcess._GetExitStatus(): integer; begin Result:=p.ExitStatus; end; constructor TExProcess.Create(commandline: string); begin RezList:=TStringList.Create; s:=''; p:=TProcess.Create(nil); p.CommandLine:=commandline; p.Options:=[poUsePipes,poNoConsole]; end; procedure TExProcess.Execute; var buf: string; i, j, c, n: integer; begin p.Execute; repeat SetLength(buf, buf_len); SetLength(buf, p.output.Read(buf[1], length(buf))); //waits for the process output // cut the incoming stream to lines: s:=s + buf; //add to the accumulator repeat //detect the line breaks and cut. i:=Pos(#13, s); j:=Pos(#10, s); if i=0 then i:=j; if j=0 then j:=i; if j = 0 then Break; //there are no complete lines yet. OnReadLn(Copy(s, 1, min(i, j) - 1)); //return the line without the CR/LF characters s:=Copy(s, max(i, j) + 1, length(s) - max(i, j)); //remove the line from accumulator until false; until buf = ''; if s <> '' then OnReadLn(s); end; destructor TExProcess.Destroy; begin RezList.Free; p.Free; end; procedure TExProcess.OnReadLn(str: string); begin RezList.Add(str); end; type //Class implementing mplayer control { TMPlayer } TMPlayer=class(TThread) public //--------------------- hWidget:THandle; //the integrable widget fileName:string; //filename xid:TWindow; //X window handle pr:TProcess; //mplayer's process pmplayer:string; //path to mplayer //--------------------- constructor Create(APlayerPath, AFilename: String); destructor destroy; override; procedure SetParentWidget(AWidget:thandle); protected procedure Execute; override; private end; { TMPlayer } constructor TMPlayer.Create(APlayerPath, AFilename: String); begin inherited Create(True); filename:= '"' + AFilename + '"'; pmplayer:= APlayerPath + ' '; WriteLn('wlxMPlayer: found mplayer in - ' + pmplayer); end; destructor TMPlayer.destroy; begin if pr.Running then pr.Terminate(0); pr.Free; {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} QWidget_Destroy(QWidgetH(hWidget)); {$ELSE} gtk_widget_destroy(PGtkWidget(hWidget)); {$ENDIF} inherited destroy; end; procedure TMPlayer.SetParentWidget(AWidget: THandle); {$IF DEFINED(LCLQT) or DEFINED(LCLQT5) or DEFINED(LCLQT6)} begin hWidget:= THandle(QWidget_create(QWidgetH(AWidget))); QWidget_show(QWidgetH(hWidget)); xid:= QWidget_winId(QWidgetH(hWidget)); end; {$ELSE} var widget, mySocket: PGtkWidget; //the socket begin widget := PGtkWidget(AWidget); mySocket := gtk_socket_new; gtk_container_add(GTK_CONTAINER(widget), mySocket); gtk_widget_show(mySocket); gtk_widget_show(widget); gtk_widget_realize(mySocket); {$IFDEF LCLGTK} xid:= (PGdkWindowPrivate(mySocket^.window))^.xwindow; {$ENDIF} {$IFDEF LCLGTK2} xid:= GDK_WINDOW_XID(mySocket^.window); {$ENDIF} hWidget:= THandle(mySocket); end; {$ENDIF} procedure TMPlayer.Execute; begin pr:=TProcess.Create(nil); pr.Options := Pr.Options + [poWaitOnExit,poNoConsole{,poUsePipes}]; //mplayer stops if poUsePipes used. pr.CommandLine:=pmplayer+fileName+' -wid '+IntToStr(xid); WriteLn(pr.CommandLine); pr.Execute; end; //Custom class contains info for plugin windows type { TPlugInfo } TPlugInfo = class private fControls:TStringList; public fFileToLoad:string; fShowFlags:integer; //etc constructor Create; destructor Destroy; override; function AddControl(AItem: TMPlayer):integer; end; { TPlugInfo } constructor TPlugInfo.Create; begin fControls:=TStringlist.Create; end; destructor TPlugInfo.Destroy; begin while fControls.Count>0 do begin TMPlayer(fControls.Objects[0]).Free; fControls.Delete(0); end; inherited Destroy; end; function TPlugInfo.AddControl(AItem: TMPlayer): integer; begin fControls.AddObject(inttostr(PtrUInt(AItem)),TObject(AItem)); end; {Plugin main part} var List:TStringList; function ListLoad(ParentWin: THandle; FileToLoad: PChar; ShowFlags: Integer): THandle; dcpcall; var pf: TExProcess; sPlayerPath: String; p: TMPlayer; begin pf:= TExProcess.Create('which mplayer'); try pf.Execute; if (pf.RezList.Count <> 0) then sPlayerPath:= pf.RezList[0] else WriteLn('wlxMPlayer: mplayer not found!'); finally pf.Free; end; if sPlayerPath = EmptyStr then Exit(wlxInvalidHandle); p:= TMPlayer.Create(sPlayerPath, string(FileToLoad)); p.SetParentWidget(ParentWin); // Create list if none if not Assigned(List) then List:= TStringList.Create; // Add to list new plugin window and it's info List.AddObject(IntToStr(PtrInt(p.hWidget)), TPlugInfo.Create); with TPlugInfo(List.Objects[List.Count-1]) do begin fFileToLoad:= FileToLoad; fShowFlags:= ShowFlags; AddControl(p); end; Result:= p.hWidget; p.Resume; end; procedure ListCloseWindow(ListWin:thandle); dcpcall; var Index:integer; s:string; begin if assigned(List) then begin writeln('ListCloseWindow quit, List Item count: '+inttostr(List.Count)); s:=IntToStr(ListWin); Index:=List.IndexOf(s); if Index>-1 then begin TPlugInfo(List.Objects[index]).Free; List.Delete(Index); writeln('List item n: '+inttostr(Index)+' Deleted'); end; //Free list if it has zero items If List.Count=0 then FreeAndNil(List); end; end; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); dcpcall; begin StrLCopy(DetectString, '(EXT="AVI")|(EXT="MKV")|(EXT="FLV")|(EXT="MPG")|(EXT="MPEG")|(EXT="MP4")|(EXT="VOB")', maxlen); end; exports ListLoad, ListCloseWindow, ListGetDetectString; {$R *.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/src/wlxMplayer.lpi������������������������������������������0000644�0001750�0000144�00000011536�15104114162�022633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="10"/> <PathDelim Value="\"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="MPlayer WLX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\wlxmplayer.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS)\$(LCLWidgetType);..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <Optimizations> <VariablesInRegisters Value="True"/> <UncertainOptimizations Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CustomOptions Value="-dLCL$(LCLWidgetType)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="wlxMplayer.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\wlxmplayer.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS)\$(LCLWidgetType);..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> <VariablesInRegisters Value="True"/> <UncertainOptimizations Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CustomOptions Value="-dLCL$(LCLWidgetType)"/> </Other> </CompilerOptions> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/src/fpc-extra.cfg�������������������������������������������0000644�0001750�0000144�00000000157�15104114162�022330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/README.txt��������������������������������������������������0000644�0001750�0000144�00000002542�15104114162�020665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ WlxMplayer ------------------------------------------------------------------------- This is WLX (Lister) plugin for Double Commander. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Class TExProcess used in plugin was written by Anton Rjeshevsky. Gtk2 and Qt support were added by Koblov Alexander (Alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA While the gui interface for wlx isn't developed to use this plugin add to doublecmd.ini these lines and edit them. [Lister Plugins] PluginCount=1 Plugin1Name=WlxMplayer Plugin1Detect=(EXT="MPG")|(EXT="AVI")|(EXT="MPEG")|(EXT="FLV") Plugin1Path=*Here you must write path to compiled plugin* ��������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/WlxMplayer/COPYING.txt�������������������������������������������������0000644�0001750�0000144�00000020735�15104114162�021044� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ This is the file COPYING.TXT, it applies to the Free Pascal Qt4 Binding. The source code of the Free Pascal Qt4 binding is distributed under the GNU Lesser General Public License (see http://www.gnu.org/licenses/lgpl.txt and below) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. http://www.gnu.org/licenses/lgpl.txt: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. �����������������������������������doublecmd-1.1.30/plugins/wlx/MacPreview/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017122� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/MacPreview/src/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017711� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/MacPreview/src/UniformTypeIdentifiers.pas������������������������������0000644�0001750�0000144�00000001722�15104114162�025067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UniformTypeIdentifiers; {$mode delphi} {$modeswitch objectivec1} interface uses SysUtils, CocoaAll; type UTType = objcclass external(NSObject, NSCopyingProtocol, NSSecureCodingProtocol) public class function typeWithIdentifier(identifier: NSString): id; message 'typeWithIdentifier:'; class function typeWithFilenameExtension(filenameExtension: NSString): id; message 'typeWithFilenameExtension:'; function identifier: NSString; message 'identifier'; function conformsToType(type_: UTType): ObjCBOOL; message 'conformsToType:'; // NSCopyingProtocol function copyWithZone(zone: NSZonePtr): id; message 'copyWithZone:'; // NSCodingProtocol procedure encodeWithCoder(aCoder: NSCoder); message 'encodeWithCoder:'; function initWithCoder(aDecoder: NSCoder): id; message 'initWithCoder:'; // NSSecureCodingProtocol class function supportsSecureCoding: ObjCBOOL; message 'supportsSecureCoding'; end; implementation end. ����������������������������������������������doublecmd-1.1.30/plugins/wlx/MacPreview/src/MacPreview.lpr������������������������������������������0000644�0001750�0000144�00000021504�15104114162�022474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- MacOS preview plugin Copyright (C) 2022-2024 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2022-2024 Rich Chang (rich2014.git@outlook.com) This library 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 library 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } library MacPreview; {$mode objfpc}{$H+} {$modeswitch objectivec1} uses SysUtils, WlxPlugin, QuickLookUI, CFPropertyList, MacOSAll, CocoaAll, UniformTypeIdentifiers; const NSAppKitVersionNumber11_0 = 2022; type TQLPItem = objcclass(NSObject, QLPreviewItemProtocol) function previewItemURL: NSURL; private url: NSURL; public ext: ShortString; procedure initPath( path: pchar); message 'initPath:'; end; DCQLPreview = objcclass(QLPreviewView) function acceptsFirstResponder: ObjCBOOL; override; end; var QLContentTypes: NSMutableArray; QLContentUTTypes: NSMutableArray; const ExcludeList: array[0..2] of PAnsiChar = ( 'public.plain-text', 'public.json', 'public.xml' ); // copy from uMyDarwin function StringToNSString(const S: String): NSString; begin Result:= NSString(NSString.stringWithUTF8String(PAnsiChar(S))); end; // copy from DCStrUtils function ExtractOnlyFileExt(const FileName: string): string; var I : LongInt; SOF : Boolean; EndSep : Set of Char; begin Result := EmptyStr; I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then begin SOF:= (I = 1) or (FileName[I - 1] in AllowDirectorySeparators); if (not SOF) or FirstDotAtFileNameStartIsExtension then Result := Copy(FileName, I + 1, MaxInt) end; end; procedure AddContentType(AType: NSString); var anObject: id; begin QLContentTypes.addObject(AType); if NSAppKitVersionNumber >= NSAppKitVersionNumber11_0 then begin anObject:= UTType.typeWithIdentifier(AType); if Assigned(anObject) then QLContentUTTypes.addObject(anObject); end; end; function CheckContentType(const Name: String; FileType: NSString): Boolean; var Index: Integer; begin // Special case if (Name = 'Text.qlgenerator') then begin for Index:= 0 to High(ExcludeList) do begin if StrComp(FileType.UTF8String, ExcludeList[Index]) = 0 then Exit(False) end; end; Result:= True; end; procedure ParseFile(const Path, Name: String); var Data: NSData; I, J: Integer; Dict: NSDictionary; FileType: NSString; DocumentTypes, ContentTypes: NSArray; begin Data:= NSData.dataWithContentsOfFile(StringToNSString(Path + Name + '/Contents/Info.plist')); if Assigned(Data) then begin Dict:= NSDictionary(NSPropertyListSerialization.propertyListWithData_options_format_error(Data, NSPropertyListImmutable, nil, nil)); if Assigned(Dict) then begin DocumentTypes:= NSArray(Dict.valueForKey(StringToNSString('CFBundleDocumentTypes'))); if Assigned(DocumentTypes) then begin for I:= 0 to Integer(DocumentTypes.count) - 1 do begin Dict:= NSDictionary(DocumentTypes.objectAtIndex(I)); ContentTypes:= NSArray(Dict.valueForKey(StringToNSString('LSItemContentTypes'))); if Assigned(ContentTypes) then begin for J:= 0 to Integer(ContentTypes.count - 1) do begin FileType:= NSString(ContentTypes.objectAtIndex(J)); if CheckContentType(Name, FileType) then AddContentType(FileType); end; end; end; end; end; end; end; procedure ParseFolder(const Path: String); var FindData: TSearchRec; begin if FindFirst(Path + '*.qlgenerator', faDirectory, FindData) = 0 then begin repeat ParseFile(Path, FindData.Name); until FindNext(FindData) <> 0; FindClose(FindData); end; end; function CheckFile_oldMacOS(const FileName: String): Boolean; var Index: Integer; QLType: NSString; FileType: NSString; begin FileType:= NSWorkspace.sharedWorkspace.typeOfFile_error(StringToNSString(FileName), nil); if (FileType = nil) then begin Result:= False; end else begin for Index:= 0 to QLContentTypes.Count - 1 do begin QLType:= NSString(QLContentTypes.objectAtIndex(Index)); // Direct comparison if (FileType.compare(QLType) = NSOrderedSame) then Exit(True); // Conforms checking if UTTypeConformsTo(CFStringRef(FileType), CFStringRef(QLType)) then Exit(True); end; Result:= False; end; end; function CheckFile_newMacOS(const FileName: String): Boolean; var Index: Integer; FileExt: String; QLUTType: UTType; QLType: NSString; FileType: NSString; FileUTType: UTType; begin FileExt:= ExtractOnlyFileExt(FileName); FileUTType:= UTType.typeWithFilenameExtension(StringToNSString(FileExt)); if (FileUTType = nil) then begin Result:= False; end else begin FileType:= FileUTType.identifier; // Direct comparison for Index:= 0 to QLContentTypes.Count - 1 do begin QLType:= NSString(QLContentTypes.objectAtIndex(Index)); if (FileType.compare(QLType) = NSOrderedSame) then Exit(True); end; // Conforms checking for Index:= 0 to QLContentUTTypes.Count - 1 do begin QLUTType:= UTType(QLContentUTTypes.objectAtIndex(Index)); if FileUTType.conformsToType(QLUTType) then Exit(True); end; Result:= False; end; end; function CheckFile(const FileName: String): Boolean; begin if NSAppKitVersionNumber >= NSAppKitVersionNumber11_0 then Result:= CheckFile_newMacOS( FileName ) else Result:= CheckFile_oldMacOS( FileName ); end; function TQLPItem.previewItemURL: NSURL; begin Result:= url; end; procedure TQLPItem.initPath( path: pchar ); begin url:= NSURL.fileURLWithPath( StringToNSString(path) ); ext:= UpperCase( ExtractOnlyFileExt(path) ); end; function DCQLPreview.acceptsFirstResponder: ObjCBOOL; begin Result:= false; end; procedure setFilepath( view:QLPreviewView; filepath:String ); var item: TQLPItem; begin if filepath=EmptyStr then begin item:= nil; end else begin item:= TQLPItem.alloc.init; item.initPath( pchar(filepath) ); end; view.setPreviewItem( item ); item.release; end; function ListLoad( ParentWin:THandle; FileToLoad:pchar; {%H-}ShowFlags:integer):THandle; cdecl; var view: QLPreviewView; begin if not CheckFile(FileToLoad) then Exit(wlxInvalidHandle); view:= DCQLPreview.alloc.init; view.setAutostarts( true ); view.setShouldCloseWithWindow( false ); NSView(ParentWin).addSubview( view ); setFilepath( view, FileToLoad ); Result:= THandle( view ); end; function isExtChanged( view: QLPreviewView; FileToLoad:pchar ): boolean; var item: TQLPItem; newExt: ShortString; begin item:= {%H-}TQLPItem( view.previewItem ); newExt:= upperCase( ExtractOnlyFileExt( FileToLoad ) ); Result:= item.ext<>newExt; end; function ListLoadNext( {%H-}ParentWin,PluginWin:THandle; FileToLoad:pchar; {%H-}ShowFlags:integer):integer; cdecl; var view: QLPreviewView; begin if not CheckFile(FileToLoad) then Exit(LISTPLUGIN_ERROR); view:= QLPreviewView(PluginWin); // workaround for the bug of MacOS Quick Look: // when previewing different types of files continuously, occasionally exceptions occur. // such as previewing a large .pas file immediately after previewing a pdf file. // empty the original preview file first can solve such problems. if isExtChanged(view,FileToLoad) then setFilepath(view,EmptyStr); setFilepath( view, FileToLoad ); Result:= LISTPLUGIN_OK; end; procedure ListCloseWindow(ListWin:THandle); cdecl; begin QLPreviewView(ListWin).close; QLPreviewView(ListWin).removeFromSuperview; end; procedure ListSetDefaultParams(dps: PListDefaultParamStruct); cdecl; begin QLContentTypes:= NSMutableArray.alloc.init; QLContentUTTypes:= NSMutableArray.alloc.init; ParseFolder('/Library/QuickLook/'); ParseFolder('/System/Library/QuickLook/'); ParseFolder(IncludeTrailingBackslash(GetUserDir) + 'Library/QuickLook/'); end; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); cdecl; begin StrLCopy(DetectString, '(EXT!="")', MaxLen); end; exports ListLoad, ListLoadNext, ListCloseWindow, ListGetDetectString, ListSetDefaultParams; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wlx/MacPreview/src/MacPreview.lpi������������������������������������������0000644�0001750�0000144�00000003741�15104114162�022466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="MacPreview"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes> <Item Name="Default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <Units> <Unit> <Filename Value="MacPreview.lpr"/> <IsPartOfProject Value="True"/> </Unit> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../MacPreview.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <LinkerOptions Value="-weak_framework UniformTypeIdentifiers"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> <Debugging> <Exceptions> <Item> <Name Value="EAbort"/> </Item> <Item> <Name Value="ECodetoolError"/> </Item> <Item> <Name Value="EFOpenError"/> </Item> </Exceptions> </Debugging> </CONFIG> �������������������������������doublecmd-1.1.30/plugins/wfx/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015052� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/sample/����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016333� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/sample/src/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017122� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/sample/src/sample.lpr��������������������������������������������������0000644�0001750�0000144�00000003354�15104114162�021127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library Sample; {$mode objfpc}{$H+} {$include calling.inc} uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF unix} baseunix, {$ENDIF} Classes, WfxPlugin, SysUtils; {$E wfx} {$R *.res} var gPluginNr: integer; gProgressProc: tProgressProc; gLogProc: tLogProc; gRequestProc: tRequestProc; function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc; pRequestProc:tRequestProc):integer; dcpcall; begin gPluginNr:= PluginNr; gProgressProc:= pProgressProc; gLogProc:= pLogProc; gRequestProc:= pRequestProc; Result:= 0; end; function FsFindFirst(path :pchar;var FindData:tWIN32FINDDATA):thandle; dcpcall; begin FillChar(FindData, SizeOf(FindData), 0); FindData.dwFileAttributes :=0; //0 - обычный файл без каких-либо атрибутов StrPCopy(FindData.cFileName,'Hello, world.txt'); //имя файла Result:= 1985; //функция нормально отработала} end; function FsFindNext(Hdl:thandle;var FindData:tWIN32FINDDATA): BOOL; dcpcall; begin // gRequestProc(gPluginNr, RT_URL, nil, nil, nil, 0); Result:= False; end; function FsFindClose(Hdl:thandle):integer; dcpcall; begin Result:= 0; end; function FsRenMovFile(OldName,NewName:pchar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; dcpcall; begin gRequestProc(gPluginNr, RT_MsgOK, OldName, NewName, nil, 0); Result:= FS_FILE_OK; end; function FsExecuteFile(MainWin:thandle;RemoteName,Verb:pchar):integer; dcpcall; begin gRequestProc(gPluginNr, RT_MsgOK, RemoteName, Verb, nil, 0); Result:= FS_EXEC_OK; end; exports // mandatory FsInit, FsFindFirst, FsFindNext, FsFindClose, // optional FsRenMovFile, FsExecuteFile; begin end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/sample/src/sample.lpi��������������������������������������������������0000644�0001750�0000144�00000004155�15104114162�021116� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="Example of WFX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="sample.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="Sample"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../sample.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016135� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/src/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016724� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/src/smbfunc.pas��������������������������������������������������0000644�0001750�0000144�00000042172�15104114162�021074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with Common Internet File System (CIFS) Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SmbFunc; {$mode objfpc}{$H+} interface uses InitC, Classes, SysUtils, WfxPlugin, Extension; function FsInit(PluginNr: Integer; pProgressProc: TProgressProc; pLogProc: TLogProc; pRequestProc: TRequestProc): Integer; cdecl; function FsFindFirst(Path: PAnsiChar; var FindData: TWin32FindData): THandle; cdecl; function FsFindNext(Hdl: THandle; var FindData: TWin32FindData): BOOL; cdecl; function FsFindClose(Hdl: THandle): Integer; cdecl; function FsRenMovFile(OldName, NewName: PAnsiChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; cdecl; function FsGetFile(RemoteName, LocalName: PAnsiChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; cdecl; function FsPutFile(LocalName, RemoteName: PAnsiChar; CopyFlags: Integer): Integer; cdecl; function FsDeleteFile(RemoteName: PAnsiChar): BOOL; cdecl; function FsMkDir(RemoteDir: PAnsiChar): BOOL; cdecl; function FsRemoveDir(RemoteName: PAnsiChar): BOOL; cdecl; function FsSetAttr(RemoteName: PAnsiChar; NewAttr: Integer): BOOL; cdecl; function FsSetTime(RemoteName: PAnsiChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; cdecl; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); cdecl; { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); cdecl; var Message: AnsiString; WorkGroup: array[0..MAX_PATH-1] of AnsiChar; UserName: array[0..MAX_PATH-1] of AnsiChar; Password: array[0..MAX_PATH-1] of AnsiChar; ExtensionStartupInfo: TExtensionStartupInfo; implementation uses Math, Unix, BaseUnix, UnixType, StrUtils, URIParser, SmbAuthDlg, libsmbclient; const SMB_BUFFER_SIZE = 524288; type PSambaHandle = ^TSambaHandle; TSambaHandle = record Path: String; Handle: LongInt; end; var ProgressProc: TProgressProc; LogProc: TLogProc; RequestProc: TRequestProc; PluginNumber: Integer; Auth: Boolean = False; Abort: Boolean = False; NeedAuth: Boolean = False; function FileTimeToUnixTime(ft: TFileTime): time_t; var UnixTime: Int64; begin UnixTime:= ft.dwHighDateTime; UnixTime:= (UnixTime shl 32) or ft.dwLowDateTime; UnixTime:= (UnixTime - 116444736000000000) div 10000000; Result:= time_t(UnixTime); end; function UnixTimeToFileTime(mtime: time_t): TFileTime; var FileTime: Int64; begin FileTime:= Int64(mtime) * 10000000 + 116444736000000000; Result.dwLowDateTime:= (FileTime and $FFFF); Result.dwHighDateTime:= (FileTime shr $20); end; function URIEncode(Path: String): String; begin Result:= FileNameToURI(Path); Result:= 'smb:/' + Copy(Result, 8, MaxInt); end; procedure WriteError(const FuncName: String); begin WriteLn(FuncName + ': ', SysErrorMessage(fpgetCerrno)); end; procedure smbc_get_auth_data(server, share: PAnsiChar; wg: PAnsiChar; wglen: LongInt; un: PAnsiChar; unlen: LongInt; pw: PAnsiChar; pwlen: LongInt); cdecl; begin Auth:= True; if NeedAuth then begin Abort:= True; // Set query resource if (server = nil) then Message:= StrPas(share) else Message:= StrPas(server) + PathDelim + StrPas(share); // Set authentication data StrLCopy(WorkGroup, wg, wglen); StrLCopy(UserName, un, unlen); StrLCopy(Password, pw, pwlen); // Query authentication data if ShowSmbAuthDlg then begin Abort:= False; // Get authentication data StrLCopy(wg, WorkGroup, wglen); StrLCopy(un, UserName, unlen); StrLCopy(pw, Password, pwlen); end; end else begin // If has saved workgroup then use it if StrLen(WorkGroup) <> 0 then StrLCopy(wg, WorkGroup, wglen); // If has saved user name then use it if StrLen(UserName) <> 0 then StrLCopy(un, UserName, unlen); // If has saved password then use it if StrLen(Password) <> 0 then StrLCopy(pw, Password, pwlen); end; end; function BuildNetworkPath(const Path: String): String; var I, C: Integer; begin C:= 0; if Path = PathDelim then Exit('smb://'); Result := Path; // Don't check last symbol for I := 1 to Length(Result) - 1 do begin if (Result[I] = PathDelim) then Inc(C); end; if (C < 2) then Result:= URIEncode(Result) else begin I:= PosEx(PathDelim, Result, 2); Result:= URIEncode(Copy(Result, I, MaxInt)); end; end; function ForceAuth(Path: PAnsiChar): String; var un: array[0..MAX_PATH-1] of AnsiChar; pw: array[0..MAX_PATH-1] of AnsiChar; begin Result:= BuildNetworkPath(Path); // Use by default saved user name and password StrLCopy(un, UserName, MAX_PATH); StrLCopy(pw, Password, MAX_PATH); // Query auth data smbc_get_auth_data(nil, PAnsiChar(Result), WorkGroup, MAX_PATH, un, MAX_PATH, pw, MAX_PATH); if (Abort = False) and (un <> '') then begin if StrLen(WorkGroup) = 0 then Result:= 'smb://' + un + ':' + pw + '@' + Copy(Result, 7, MAX_PATH) else Result:= 'smb://' + WorkGroup + ';' + un + ':' + pw + '@' + Copy(Result, 7, MAX_PATH); end; end; function FsInit(PluginNr: Integer; pProgressProc: tProgressProc; pLogProc: tLogProc; pRequestProc: tRequestProc): Integer; cdecl; begin if not LoadSambaLibrary then begin pRequestProc(PluginNr, RT_MsgOK, nil, 'Can not load "libsmbclient" library!', nil, 0); Exit(-1); end; ProgressProc := pProgressProc; LogProc := pLogProc; RequestProc := pRequestProc; PluginNumber := PluginNr; FillChar(WorkGroup, SizeOf(WorkGroup), #0); FillChar(UserName, SizeOf(UserName), #0); FillChar(Password, SizeOf(Password), #0); Result := smbc_init(@smbc_get_auth_data, 0); if Result < 0 then WriteError('smbc_init'); end; function FsFindFirst(Path: PAnsiChar; var FindData: TWin32FindData): THandle; cdecl; var NetworkPath: String; SambaHandle: PSambaHandle; Handle: LongInt; begin Abort:= False; NetworkPath:= BuildNetworkPath(Path); repeat Auth:= False; Handle:= smbc_opendir(PChar(NetworkPath)); NeedAuth:= (Handle = -1); // Sometimes smbc_get_auth_data don't called automatically // so we call it manually if NeedAuth and (Auth = False) then begin NetworkPath:= ForceAuth(Path); end; until not NeedAuth or Abort; if Handle < 0 then begin WriteError('smbc_opendir'); Result:= wfxInvalidHandle; end else begin New(SambaHandle); SambaHandle^.Path:= IncludeTrailingPathDelimiter(NetworkPath); SambaHandle^.Handle:= Handle; Result:= THandle(SambaHandle); FsFindNext(Result, FindData); end; end; function FsFindNext(Hdl: THandle; var FindData: TWin32FindData): BOOL; cdecl; var dirent: psmbc_dirent; FileInfo: BaseUnix.Stat; Mode: array[0..10] of AnsiChar; SambaHandle: PSambaHandle absolute Hdl; begin Result:= True; dirent := smbc_readdir(SambaHandle^.Handle); if (dirent = nil) then Exit(False); FillByte(FindData, SizeOf(TWin32FindData), 0); StrLCopy(FindData.cFileName, dirent^.name, dirent^.namelen); if dirent^.smbc_type in [SMBC_WORKGROUP, SMBC_SERVER, SMBC_FILE_SHARE] then FindData.dwFileAttributes:= FILE_ATTRIBUTE_DIRECTORY; if dirent^.smbc_type in [SMBC_DIR, SMBC_FILE, SMBC_LINK] then begin if smbc_stat(PChar(SambaHandle^.Path + FindData.cFileName), @FileInfo) = 0 then begin FindData.nFileSizeLow := (FileInfo.st_size and MAXDWORD); FindData.nFileSizeHigh := (FileInfo.st_size shr $20); FindData.ftLastAccessTime:= UnixTimeToFileTime(FileInfo.st_atime); FindData.ftCreationTime:= UnixTimeToFileTime(FileInfo.st_ctime); FindData.ftLastWriteTime:= UnixTimeToFileTime(FileInfo.st_mtime); FindData.dwFileAttributes:= IfThen(fpS_ISDIR(FileInfo.st_mode), FILE_ATTRIBUTE_DIRECTORY, 0); end; if smbc_getxattr(PChar(SambaHandle^.Path + FindData.cFileName), 'system.dos_attr.mode', @Mode, SizeOf(Mode)) >= 0 then begin // smbc_getxattr returns attributes as hex string (like 0x00000000) FindData.dwFileAttributes:= StrToIntDef(Mode, FindData.dwFileAttributes); end; end; end; function FsFindClose(Hdl: THandle): Integer; cdecl; var SambaHandle: PSambaHandle absolute Hdl; begin Result:= smbc_closedir(SambaHandle^.Handle); if Result < 0 then WriteError('smbc_closedir'); Dispose(SambaHandle); end; function FsRenMovFile(OldName, NewName: PAnsiChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; cdecl; var OldFileName, NewFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: ssize_t; Written: Int64; FileSize: Int64; Percent: LongInt; Flags: cint = O_CREAT or O_RDWR or O_TRUNC; begin OldFileName:= BuildNetworkPath(OldName); NewFileName:= BuildNetworkPath(NewName); if Move then begin if smbc_rename(PChar(OldFileName), PChar(NewFileName)) < 0 then Exit(-1); end else begin if OverWrite = False then begin Flags:= Flags or O_EXCL; end; BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= smbc_open(PChar(OldFileName), O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= smbc_open(PChar(NewFileName), Flags, RemoteInfo^.Attr); if (fdNewFile < 0) then begin if cerrno = ESysEEXIST then Exit(FS_FILE_EXISTS) else Exit(FS_FILE_WRITEERROR); end; // Get source file size FileSize:= smbc_lseek(fdOldFile, 0, SEEK_END); smbc_lseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= smbc_read(fdOldFile, Buffer, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if smbc_write(fdNewFile, Buffer, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, PChar(OldFileName), PChar(NewFileName), Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then smbc_close(fdOldFile); if not (fdNewFile < 0) then smbc_close(fdNewFile); end; end; Result:= FS_FILE_OK; end; function FsGetFile(RemoteName, LocalName: PAnsiChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; cdecl; var OldFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: ssize_t; Written: Int64; FileSize: Int64; Percent: LongInt; Flags: cint = O_CREAT or O_RDWR or O_TRUNC; begin OldFileName:= BuildNetworkPath(RemoteName); if (CopyFlags and FS_COPYFLAGS_OVERWRITE) = 0 then begin Flags:= Flags or O_EXCL; end; BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= smbc_open(PChar(OldFileName), O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= fpOpen(PChar(LocalName), Flags, $1A4); // $1A4 = &644 if (fdNewFile < 0) then begin if errno = ESysEEXIST then Exit(FS_FILE_EXISTS) else Exit(FS_FILE_WRITEERROR); end; // Get source file size FileSize:= smbc_lseek(fdOldFile, 0, SEEK_END); smbc_lseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= smbc_read(fdOldFile, Buffer, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if fpWrite(fdNewFile, Buffer^, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, PChar(OldFileName), LocalName, Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then smbc_close(fdOldFile); if not (fdNewFile < 0) then fpClose(fdNewFile); end; Result:= FS_FILE_OK; end; function FsPutFile(LocalName, RemoteName: PAnsiChar; CopyFlags: Integer): Integer; cdecl; var NewFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: TSsize; Written: Int64; FileSize: Int64; Percent: LongInt; Flags: cint = O_CREAT or O_RDWR or O_TRUNC; begin NewFileName:= BuildNetworkPath(RemoteName); if (CopyFlags and FS_COPYFLAGS_OVERWRITE) = 0 then begin Flags:= Flags or O_EXCL; end; BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= fpOpen(LocalName, O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= smbc_open(PChar(NewFileName), Flags, 0); if (fdNewFile < 0) then begin if cerrno = ESysEEXIST then Exit(FS_FILE_EXISTS) else Exit(FS_FILE_WRITEERROR); end; // Get source file size FileSize:= fpLseek(fdOldFile, 0, SEEK_END); fpLseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= fpRead(fdOldFile, Buffer^, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if smbc_write(fdNewFile, Buffer, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, LocalName, PChar(NewFileName), Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then fpClose(fdOldFile); if not (fdNewFile < 0) then smbc_close(fdNewFile); end; Result:= FS_FILE_OK; end; function FsDeleteFile(RemoteName: PAnsiChar): BOOL; cdecl; var FileName: String; begin FileName:= BuildNetworkPath(RemoteName); Result:= smbc_unlink(PChar(FileName)) = 0; end; function FsMkDir(RemoteDir: PAnsiChar): BOOL; cdecl; var NewDir: String; begin NewDir:= BuildNetworkPath(RemoteDir); Result:= smbc_mkdir(PChar(NewDir), $1FF) = 0; // $1FF = &0777 end; function FsRemoveDir(RemoteName: PAnsiChar): BOOL; cdecl; var RemDir: String; begin RemDir:= BuildNetworkPath(RemoteName); Result:= smbc_rmdir(PChar(RemDir)) = 0; end; function FsSetAttr(RemoteName: PAnsiChar; NewAttr: Integer): BOOL; cdecl; var FileName: String; Mode: array[0..10] of AnsiChar; begin Mode:= '0x' + HexStr(NewAttr, 8) + #0; FileName:= BuildNetworkPath(RemoteName); // smbc_setxattr takes attributes as hex string (like 0x00000000) Result:= (smbc_setxattr(PChar(FileName), 'system.dos_attr.mode', @Mode, SizeOf(Mode), 0) >= 0); end; function FsSetTime(RemoteName: PAnsiChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; cdecl; var FileName: String; tbuf: array[0..1] of timeval; FileInfo: BaseUnix.Stat; begin FileName:= BuildNetworkPath(RemoteName); if (LastAccessTime = nil) or (LastWriteTime = nil) then begin if smbc_stat(PChar(FileName), @FileInfo) < 0 then Exit(False); if (LastAccessTime = nil) then tbuf[0].tv_sec:= FileInfo.st_atime else tbuf[0].tv_sec:= FileTimeToUnixTime(LastAccessTime^); if (LastWriteTime = nil) then tbuf[1].tv_sec:= FileInfo.st_mtime else tbuf[1].tv_sec:= FileTimeToUnixTime(LastWriteTime^); end else begin tbuf[0].tv_sec:= FileTimeToUnixTime(LastAccessTime^); tbuf[1].tv_sec:= FileTimeToUnixTime(LastWriteTime^); end; Result:= (smbc_utimes(PChar(FileName), @tbuf) = 0); end; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); cdecl; begin StrPLCopy(DefRootName, 'Windows Network', MaxLen); end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); cdecl; begin ExtensionStartupInfo:= StartupInfo^; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/src/smbauthdlg.pas�����������������������������������������������0000755�0001750�0000144�00000004746�15104114162�021601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SmbAuthDlg; {$mode objfpc}{$H+} {$R smbauthdlg.lfm} interface uses SysUtils, Extension; function ShowSmbAuthDlg: Boolean; implementation uses SmbFunc; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; cdecl; var Data: PtrInt; Text: String; begin Result:= 0; with ExtensionStartupInfo do begin case Msg of DN_INITDIALOG: begin Text:= PAnsiChar(SendDlgMsg(pDlg, 'lblMessage', DM_GETTEXT, 0, 0)); Data:= PtrInt(PAnsiChar(Format(Text, [Message]))); SendDlgMsg(pDlg, 'lblMessage', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(UserName)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(WorkGroup)); SendDlgMsg(pDlg, 'edtDomain', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(Password)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end; DN_CLICK: if DlgItemName = 'btnOK' then begin Data:= SendDlgMsg(pDlg, 'edtUserName', DM_GETTEXT, 0, 0); StrLCopy(UserName, PAnsiChar(Data), MAX_PATH); Data:= SendDlgMsg(pDlg, 'edtDomain', DM_GETTEXT, 0, 0); StrLCopy(WorkGroup, PAnsiChar(Data), MAX_PATH); Data:= SendDlgMsg(pDlg, 'edtPassword', DM_GETTEXT, 0, 0); StrLCopy(Password, PAnsiChar(Data), MAX_PATH); // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, ID_OK, 0); end else if DlgItemName = 'btnCancel' then begin // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, ID_CANCEL, 0); end; end;// case end; // with end; function ShowSmbAuthDlg: Boolean; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin Result := False; try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with ExtensionStartupInfo do begin Result := DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. ��������������������������doublecmd-1.1.30/plugins/wfx/samba/src/smbauthdlg.lfm�����������������������������������������������0000755�0001750�0000144�00000024744�15104114162�021574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object DialogBox: TDialogBox Left = 369 Height = 185 Top = 214 Width = 354 AutoSize = True BorderStyle = bsDialog Caption = 'Authentication' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 185 ClientWidth = 354 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '0.9.30' object lblUserName: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 54 Width = 69 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = lblUserName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblMessage AnchorSideTop.Side = asrBottom Left = 153 Height = 27 Top = 50 Width = 200 BorderSpacing.Left = 18 BorderSpacing.Top = 24 TabOrder = 0 end object lblPassword: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 120 Width = 63 Caption = 'Password:' ParentColor = False end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 153 Height = 27 Top = 116 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 263 Height = 30 Top = 155 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Cancel = True Caption = 'Cancel' Kind = bkCancel ModalResult = 2 OnClick = ButtonClick TabOrder = 4 end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel Left = 167 Height = 30 Top = 155 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 OnClick = ButtonClick TabOrder = 3 end object lblMessage: TLabel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = imgAuth Left = 66 Height = 18 Top = 8 Width = 153 BorderSpacing.Left = 10 Caption = 'Password required for %s' ParentColor = False end object edtDomain: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 153 Height = 27 Top = 83 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblDomain: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 87 Width = 52 Caption = 'Domain:' ParentColor = False end object imgAuth: TImage AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 8 Height = 48 Top = 8 Width = 48 AutoSize = True Picture.Data = { 1754506F727461626C654E6574776F726B477261706869639E0C000089504E47 0D0A1A0A0000000D49484452000000300000003008060000005702F987000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000DD700000DD70142289B780000000774494D4507DB080F071810 46DD836300000C1E4944415468DEED99696C5CD775C7FFF7BE75567286FB4E4A 946451FB92C892BA08B12CD5B69C1510827C285023C856A4881D470E69B4982F 7165C9551314719AB641F3A51FE43A4E1D25B2C5489614CB5A182D96646DDCB7 216786E4BCD9E76DF7DE7E9811CB2869E02816ED02BDC0C50CDE9CF3707FE79C 7BCEB97780FFE383FC6F3F9C3C79D2AF7AA4373CBAE7615DD36555D50A9515A1 F16231F72BCBB2DF4CA5B2C7366FDE5CF8C8029C38D57BA3BEB6BEABA9B119B2 A2429115A8AA0AC77190CEA45028E4529665FFB8E09A3F58BF727DFF470EA0F7 ADA37CD3BA8F93A9E94930E62210A8444B730B2CCB86AA2A2084229FCFC148CD 8942A1D06B99C57D9B363D7C6DB101E8EF2163966DC1B48A30D2C6778D64AA66 70F0CEA3F178F4603C3E356EA4E62049148D0DCDA4AEB661B7C7E7BBDC77F9C2 BF9EEC3B59FF9100101CE763F1289A1A9B0190AF1AC6CCEAAEAEB5C73B3B1FDA D7D27271492697FED4ECDCEC9BF1C4342714686FED901A6AEBBFE8A7DAC0E9B7 4FFEF5871E42478F1E0DCA3A195CD1B9A2C6A37B71EBF60DC7B2EDAFEFDAF9D8 0F17CADD18B8B18A30719052F258385405894A181D1F412693FE0FDBE45FDEBD 7B77FE43010080DEDE23CBA8A2FCAA6BC5AA7A55D5717BE0268AF9DCCB3E6FFE D96DDBF61617CABE7BFDE22EEEF2433E5F60556D4D2DA663D3181E1932870747 662DCBC901483026AE13224E158B9EDE48E46F320F1C00008E1D3BD64264F67A 5B6BFB86CA8A10C627C661A4674708A4AF3FFA89BFF8C55DB9175E7AA14B97E4 7FEA5CD6F9677575F5726B4B3B72B90C46C68621530D54926099261289193B11 9F7518633F1682753FF7DC73D9070A0000478E1CF16A5EF9DF7D5EEFDEF6B60E 388E83F1C93198A6F95330F6DCBBEFBEB79DCAF4E5952BBBB4D87482FA033ED4 D5D56049C712148B266289692C695F0ADBB2E03206C7B171FBCE803D32343AE3 38D8D5D3F3ECCD070A00004208F2CB136F7E89CAE4859AAADAF0D28E6548A753 38DF775644A7A6F8C73FB645BA72F92AEAEBEBB17EFD5A080023A3837868D94A 4CC7A730376BA0ABAB0B9665C2765CC812453C9E1017CE5F4A3A8EB5B9BBBB7B F403CD42BF454A88D8B5F3B11FC29597C713B17FBE72EDD73C9E886162224AB6 6DDD2E0DF40FA1A6BA06EBD7AF43201044DA48636C64323B363186C6FA26B8CC 16972F5D81AAE9A004B01D1BB575B564C3C6B52145D17E1E8944E80305B83B76 EEDC39B7EB91C7BF5AB48A5BCEF59D8B3FF4D00AE40B7918C934D66F5C8B5C3E 034A292E5EBC84C6E6FA002040A90C5991AD3B7706012E402905A5121CC7466B 6B330D87431D5EAFFF8B8B02309F757E7D63B2982F56B4B4B462B07F18EBD6AD 06E70C9C7364B319D8B68BBAEA3A04FD15181A1940A150B846482962A9248152 0A42081CD7C5EAB52BBD94D26F2D2A0083B3A7B5A58D73C66024D3686E6982EB B890CA96ED58D28E4B97DF15935313666236716AF0CEE8FAA6A606C88A0C4208 2452F282E00C55E12AA8AADA78E0C081A57FE83AE4FB059065795B5575D89B4E 67E1F379A1280A6CDB02A5148EEB60E5CAE5B06D8B5CBF7A471742EC686F6FC3 B6ED5B21B88044244002280400094270545787D9D858612380A14501A0200DAA AA2197CB4255D5D2334A21840000D8B68575EBD660C38675E09CC3EBF54140C0 751C104A4041200909800040E0F3F9144250BD681E0050E442409452ECFCC604 0444F9B96599701C079C73A4520602C10AE89A064A693935030214945230CE04 40DC45DB035CB09BB94C96852A2A90C96421D1D24238E7C8E5F2309249CCCECE 219BCBC1B26D702150C8E5C05C0610024A4AF2129520491272D9BC0DB0F14503 70B97B2A3A1D2D042B2B000264B279082E70EBD66DC46271E4727970CE41CAD5 92828250A050CC838094C2A8EC3521041289844708D1B768004BDB569C4C1B29 DB344D842A2B30D03F009FDF875028044A040821A5C513024228082D7D7221E0 D81608290148928CA9A99820845CE8EEEE36160D60EFDEBDCCE5ACE7CAE5CB85 CE651DB8736700F97C014B3ADA21ABDA6F742B64BE6B21902885CBDCB2F54B21 77E9E295A265B9DD8B5A0700C02A38FF964A1B971389B8D3D45C8F13C7DF02A5 0A562C5F01BFCF575AB3004048C9E28494810884E02020E8EBBB683A8EFD9F3D 3DFBDE5974804824C2298A4F0E8F8E4E575404A0A80A7E71F40D70C6D0D1B114 ADAD6D08852AA1EB1EE89A024DD7A1697A290B09829B376FB1B1D1F16B994CFA 2B1FF891F2FD8EA79F8EA408A0D4D7376069673B344DC14F7EF23AAE5DBB0E89 4AA8AAAA4175751582C14A783C1EC89204C761E04240D3344A08FA23918879DF 05F58F053874E890C7E5569522CBA80A57419224787D31F40F0CE0EAD5EBF0FB FDF8DCE73E09084040802A145CE4C05C070D0D0D8473EC7E2087FAF73B9E79E6 992221F8FB2BD7AF145455452010404B4B33EA1BAAB17CC51214CD8298994942 966548B4D4C4C9928CA269A2A232084D537DF7D3037D6000A5AAC65F8B4E44F5 4C26035996C1184355388C254B97A0582C3867CF9E2B663219288A024996A069 2A0AF90220085A5A9AC19878F44301884422F41FBF77E0652AAB7D1B366C2415 C10A101098A6054551C0980BCBCE8B4462F61BAFBEFA5FC69933E74C4A283C1E 0F2CCB826D5B686B6BF1EABAFE990F05C0EB55D6CBB2FA977B9E7852EBECEC24 5C7030C6619945783C5E1849033E9FFF4277F7BE7F9124F967B222498CB1524D 20402A9D467D431D1CC7FD93575E79455A74004678D0716C52340BF3876BD32C 82730E8FD783583C6672CE7FBA7FFFFE559462EFDA35AB15D775C13883A66A30 92B3D0351DC1A09F0D0D8D6F5C7480EE6FFDED29DB743E7BE2C4F1ECCCCCAC90 6505D96C0E9AAA419664C462319711F4027447737353B95B2D75AF5EAF8E39C3 80E338686D6D5125E9FEB2D11FBD89BFFDEDE78FB9AEFD77232343454A095269 03814000C54211B66DBB3DCFF6DCE49C9E181E1EC1E1C3AFE64F9D7E3B373D15 13FE4010AEE3209D4EA1A1A1419365F9338B5A07BE73F03BAB3DB2FA82107CB3 00426D6DEDBA6DDB706C1BA1501813D14948941C07809E9E676F0B217CFBF7EF 5F3A3A52FC6C3693ED79FCF1DD153E9F17B3C939B4B6B4C175DDD59148C41B89 440A8BE201954A7FD5D6DEF6C49E3D9F6CF8C2E7BFA037373523954E43D33CF0 FA7C88C5A6338ECD7EB6F05A261C0E8FC9B2FC312A490AE70CC1400552460A12 95100E878BBAAEFFE9A28510A5D4234BB253110CE2EEC92C9BC92014AA84E01C B1585C755571FCAEFC8B2FBE18C8E70B6FD737D4EDD9B163BBD7652EFC8100F2 851C6CDB465373634051D43D8B06609BECF9FE8101DB4819A52B1200D96C06D5 55D5481A491082D8F34F3F3FBDC0033ED7659BB66CD9A40380EB32E8BA064228 32D934EAEA6A28409F583400429C660891E8EFEF679450148A45702E50595981 582CCE39134717CAEFDBB72F46A974A6B7F7547E2E999A3F3BFBFD3E18461295 9595E09C351E3C78B0F68103BC74E8408FAAEBE7B73EBCB5EDE12D5B25102093 CE201008824A0AA2D1C92C13EED17BF5BEF9CD6F7C229FCB7CEDD45B6F174647 26C08580DFE7472A950221404D4D95EDBAE291070E40089EFED4939FF6AE5CB9 4AA612052514D95C06E1AA305CC7C15C72CE63E69DD3BFEB7E9531761610B4AA 3A0CC65CF87DFEF9B6A2A1A12EA069CAA71F14000120B7B7B7EB103C1E9D8ABA 840094500801E47239842B4388CF24204BF2ED728F7FEFED379165E507CB972F 95155502671CB22243D554188681503804D7658F00D0CA299E7C1075800290CA B2D2E8E8A8D477E1CAE705C8D9DA9ADA406D6D1DF2F92C0821F0FB03B8FEDE7B 762E9FFB39001D0003E0960F9614800C821ADDA3CB9CF3BB775A08F883300C03 9AEA018028004F59F7AEBE0B80DF8F074879F14A79AA00B4C3870F272727A3DD BDC77F59304D1373C924828120F2F93C868787D87474EA4C59765EA7FC5D9E9D 99FBFEB5AB37F217CE5D2CCC2593E09C83CA14F1C40C060606AD6432F94A595E 2D1B4DFE7DDE90DE07C05D0FD085F3FCB90B835BB76E69BC71EB46576226614A 9244CEF79DB70C23F5BD7F78E9BBAF952DC6CBD69F37D83BEF9CE99F9818FF51 5D5D5D3A39975E3D31314526C6A2C865F3C9542AF3C6E9D3277F343E3E9E5FA0 BF70DED73F34BF1142F74CB266CD1AFF23BB766C095586FE3C9F2D5C3870E0A5 D717B8FFB7436881BECFE7939F7AEAA9EDA3A3D1D123475E8B2E58287BBF2144 FEC04D7CAF27EED517F7588CDDE301B20080CE5F16FDCF058C58F00EF63BF4FF 7F7CE4C67F0326A2B675DDA7D6BA0000000049454E44AE426082 } end end ����������������������������doublecmd-1.1.30/plugins/wfx/samba/src/samba.lpr����������������������������������������������������0000644�0001750�0000144�00000000536�15104114162�020532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library samba; {$mode objfpc}{$H+} uses Classes, SmbFunc, SmbAuthDlg { you can add units after this }; exports FsInit, FsFindFirst, FsFindNext, FsFindClose, FsRenMovFile, FsGetFile, FsPutFile, FsDeleteFile, FsMkDir, FsRemoveDir, FsSetAttr, FsSetTime, FsGetDefRootName, ExtensionInitialize; {$R *.res} begin end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/src/samba.lpi����������������������������������������������������0000644�0001750�0000144�00000010067�15104114162�020521� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="samba"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="2"/> <StringTable FileDescription="Samba WFX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2015 Alexander Koblov" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../samba.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="/usr/bin/doublecmd"/> </local> </RunParams> <Units Count="2"> <Unit0> <Filename Value="samba.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="smbauthdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="DialogBox"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="SmbAuthDlg"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../samba.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/src/libsmbclient.pas���������������������������������������������0000644�0001750�0000144�00000011511�15104114162�022077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit libsmbclient; {$mode delphi} interface uses Classes, SysUtils, Unix, BaseUnix, UnixType; const SMBC_WORKGROUP = 1; SMBC_SERVER = 2; SMBC_FILE_SHARE = 3; SMBC_PRINTER_SHARE = 4; SMBC_COMMS_SHARE = 5; SMBC_IPC_SHARE = 6; SMBC_DIR = 7; SMBC_FILE = 8; SMBC_LINK = 9; const SMBC_DOS_MODE_READONLY = $01; SMBC_DOS_MODE_HIDDEN = $02; SMBC_DOS_MODE_SYSTEM = $04; SMBC_DOS_MODE_VOLUME_ID = $08; SMBC_DOS_MODE_DIRECTORY = $10; SMBC_DOS_MODE_ARCHIVE = $20; type (**@ingroup structure * Structure that represents a directory entry. * *) psmbc_dirent = ^smbc_dirent; smbc_dirent = record (** Type of entity. SMBC_WORKGROUP=1, SMBC_SERVER=2, SMBC_FILE_SHARE=3, SMBC_PRINTER_SHARE=4, SMBC_COMMS_SHARE=5, SMBC_IPC_SHARE=6, SMBC_DIR=7, SMBC_FILE=8, SMBC_LINK=9,*) smbc_type: LongWord; (** Length of this smbc_dirent in bytes *) dirlen: LongWord; (** The length of the comment string in bytes (does not include * null terminator) *) commentlen: LongWord; (** Points to the null terminated comment string *) comment: PAnsiChar; (** The length of the name string in bytes (does not include * null terminator) *) namelen: LongWord; (** Points to the null terminated name string *) name: array[0..0] of AnsiChar; end; smbc_get_auth_data_fn = procedure(server, share: PAnsiChar; wg: PAnsiChar; wglen: LongInt; un: PAnsiChar; unlen: LongInt; pw: PAnsiChar; pwlen: LongInt); cdecl; smbc_init_fn = function (fn: smbc_get_auth_data_fn; debug: LongInt): LongInt; cdecl; smbc_open_fn = function(furl: PAnsiChar; flags: LongInt; mode: mode_t): LongInt; cdecl; smbc_read_fn = function(fd: LongInt; buf: Pointer; bufsize: size_t): ssize_t; cdecl; smbc_write_fn = function(fd: LongInt; buf: Pointer; bufsize: size_t): ssize_t; cdecl; smbc_lseek_fn = function(fd: LongInt; offset: off_t; whence: LongInt): off_t; cdecl; smbc_close_fn = function(fd: LongInt): LongInt; cdecl; smbc_unlink_fn = function(furl: PAnsiChar): LongInt; cdecl; smbc_rename_fn = function(ourl: PAnsiChar; nurl: PAnsiChar): LongInt; cdecl; smbc_opendir_fn = function(durl: PAnsiChar): LongInt; cdecl; smbc_closedir_fn = function(dh: LongInt): LongInt; cdecl; smbc_readdir_fn = function(dh: LongInt): psmbc_dirent; cdecl; smbc_mkdir_fn = function(durl: PAnsiChar; mode: mode_t): LongInt; cdecl; smbc_rmdir_fn = function(durl: PAnsiChar): LongInt; cdecl; smbc_stat_fn = function(url: PAnsiChar; st: PStat): LongInt; cdecl; smbc_getxattr_fn = function(url, name: PAnsiChar; value: Pointer; size: size_t): LongInt; cdecl; smbc_setxattr_fn = function(url, name: PAnsiChar; value: Pointer; size: size_t; flags: LongInt): LongInt; cdecl; smbc_utimes_fn = function(url: PAnsiChar; tbuf: ptimeval): LongInt; cdecl; var smbc_init: smbc_init_fn; smbc_open: smbc_open_fn; smbc_read: smbc_read_fn; smbc_write: smbc_write_fn; smbc_lseek: smbc_lseek_fn; smbc_close: smbc_close_fn; smbc_unlink: smbc_unlink_fn; smbc_rename: smbc_rename_fn; smbc_opendir: smbc_opendir_fn; smbc_closedir: smbc_closedir_fn; smbc_readdir: smbc_readdir_fn; smbc_mkdir: smbc_mkdir_fn; smbc_rmdir: smbc_rmdir_fn; smbc_stat: smbc_stat_fn; smbc_getxattr: smbc_getxattr_fn; smbc_setxattr: smbc_setxattr_fn; smbc_utimes: smbc_utimes_fn; function LoadSambaLibrary: Boolean; implementation uses dynlibs; var hSamba: TLibHandle = 0; function LoadSambaLibrary: Boolean; begin if (hSamba = 0) then begin hSamba:= LoadLibrary('libsmbclient.so.0'); if (hSamba <> 0) then begin @smbc_init:= GetProcAddress(hSamba, 'smbc_init'); @smbc_opendir:= GetProcAddress(hSamba, 'smbc_opendir'); @smbc_readdir:= GetProcAddress(hSamba, 'smbc_readdir'); @smbc_closedir:= GetProcAddress(hSamba, 'smbc_closedir'); @smbc_mkdir:= GetProcAddress(hSamba, 'smbc_mkdir'); @smbc_rmdir:= GetProcAddress(hSamba, 'smbc_rmdir'); @smbc_open:= GetProcAddress(hSamba, 'smbc_open'); @smbc_read:= GetProcAddress(hSamba, 'smbc_read'); @smbc_write:= GetProcAddress(hSamba, 'smbc_write'); @smbc_lseek:= GetProcAddress(hSamba, 'smbc_lseek'); @smbc_close:= GetProcAddress(hSamba, 'smbc_close'); @smbc_unlink:= GetProcAddress(hSamba, 'smbc_unlink'); @smbc_rename:= GetProcAddress(hSamba, 'smbc_rename'); @smbc_stat:= GetProcAddress(hSamba, 'smbc_stat'); @smbc_getxattr:= GetProcAddress(hSamba, 'smbc_getxattr'); @smbc_setxattr:= GetProcAddress(hSamba, 'smbc_setxattr'); @smbc_utimes:= GetProcAddress(hSamba, 'smbc_utimes'); end; end; Result:= (hSamba <> 0); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/COPYING.LESSER.txt�����������������������������������������������0000644�0001750�0000144�00000063642�15104114162�021015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ����������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/samba/COPYING.GPL.txt��������������������������������������������������0000644�0001750�0000144�00000043254�15104114162�020437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015643� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017325� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/synsock.pas������������������������������������������������0000644�0001750�0000144�00000010156�15104114162�021526� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 005.002.003 | |==============================================================================| | Content: Socket Independent Platform Layer | |==============================================================================| | Copyright (c)1999-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2001-2013. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Tomas Hajny (OS2 support) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} unit synsock; {$MINENUMSIZE 4} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF CIL} {$I ssdotnet.inc} {$ELSE} {$IFDEF MSWINDOWS} {$I sswin32.inc} {$ELSE} {$IFDEF WINCE} {$I sswin32.inc} //not complete yet! {$ELSE} {$IFDEF FPC} {$IFDEF OS2} {$I ssos2ws1.inc} {$ELSE OS2} {$I ssfpc.inc} {$ENDIF OS2} {$ELSE} {$I sslinux.inc} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$IFDEF POSIX} //Posix.SysSocket {$I ssposix.inc} //experimental! {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/synautil.pas�����������������������������������������������0000644�0001750�0000144�00000154000�15104114162�021702� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 004.015.000 | |==============================================================================| | Content: support procedures and functions | |==============================================================================| | Copyright (c)1999-2012, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 1999-2012. | | Portions created by Hernan Sanchez are Copyright (c) 2000. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Hernan Sanchez (hernan.sanchez@iname.com) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(Support procedures and functions)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synautil; interface uses {$IFDEF MSWINDOWS} Windows, {$ELSE} {$IFDEF FPC} UnixUtil, Unix, BaseUnix, {$ELSE} Libc, {$ENDIF} {$ENDIF} {$IFDEF CIL} System.IO, {$ENDIF} SysUtils, Classes, SynaFpc; {$IFDEF VER100} type int64 = integer; {$ENDIF} {:Return your timezone bias from UTC time in minutes.} function TimeZoneBias: integer; {:Return your timezone bias from UTC time in string representation like "+0200".} function TimeZone: string; {:Returns current time in format defined in RFC-822. Useful for SMTP messages, but other protocols use this time format as well. Results contains the timezone specification. Four digit year is used to break any Y2K concerns. (Example 'Fri, 15 Oct 1999 21:14:56 +0200')} function Rfc822DateTime(t: TDateTime): string; {:Returns date and time in format defined in C compilers in format "mmm dd hh:nn:ss"} function CDateTime(t: TDateTime): string; {:Returns date and time in format defined in format 'yymmdd hhnnss'} function SimpleDateTime(t: TDateTime): string; {:Returns date and time in format defined in ANSI C compilers in format "ddd mmm d hh:nn:ss yyyy" } function AnsiCDateTime(t: TDateTime): string; {:Decode three-letter string with name of month to their month number. If string not match any month name, then is returned 0. For parsing are used predefined names for English, French and German and names from system locale too.} function GetMonthNumber(Value: String): integer; {:Return decoded time from given string. Time must be witch separator ':'. You can use "hh:mm" or "hh:mm:ss".} function GetTimeFromStr(Value: string): TDateTime; {:Decode string in format "m-d-y" to TDateTime type.} function GetDateMDYFromStr(Value: string): TDateTime; {:Decode various string representations of date and time to Tdatetime type. This function do all timezone corrections too! This function can decode lot of formats like: @longcode(# ddd, d mmm yyyy hh:mm:ss ddd, d mmm yy hh:mm:ss ddd, mmm d yyyy hh:mm:ss ddd mmm dd hh:mm:ss yyyy #) and more with lot of modifications, include: @longcode(# Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format #) Timezone corrections known lot of symbolic timezone names (like CEST, EDT, etc.) or numeric representation (like +0200). By convention defined in RFC timezone +0000 is GMT and -0000 is current your system timezone.} function DecodeRfcDateTime(Value: string): TDateTime; {:Return current system date and time in UTC timezone.} function GetUTTime: TDateTime; {:Set Newdt as current system date and time in UTC timezone. This function work only if you have administrator rights!} function SetUTTime(Newdt: TDateTime): Boolean; {:Return current value of system timer with precizion 1 millisecond. Good for measure time difference.} function GetTick: LongWord; {:Return difference between two timestamps. It working fine only for differences smaller then maxint. (difference must be smaller then 24 days.)} function TickDelta(TickOld, TickNew: LongWord): LongWord; {:Return two characters, which ordinal values represents the value in byte format. (High-endian)} function CodeInt(Value: Word): Ansistring; {:Decodes two characters located at "Index" offset position of the "Value" string to Word values.} function DecodeInt(const Value: Ansistring; Index: Integer): Word; {:Return four characters, which ordinal values represents the value in byte format. (High-endian)} function CodeLongInt(Value: LongInt): Ansistring; {:Decodes four characters located at "Index" offset position of the "Value" string to LongInt values.} function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; {:Dump binary buffer stored in a string to a result string.} function DumpStr(const Buffer: Ansistring): string; {:Dump binary buffer stored in a string to a result string. All bytes with code of character is written as character, not as hexadecimal value.} function DumpExStr(const Buffer: Ansistring): string; {:Dump binary buffer stored in a string to a file with DumpFile filename.} procedure Dump(const Buffer: AnsiString; DumpFile: string); {:Dump binary buffer stored in a string to a file with DumpFile filename. All bytes with code of character is written as character, not as hexadecimal value.} procedure DumpEx(const Buffer: AnsiString; DumpFile: string); {:Like TrimLeft, but remove only spaces, not control characters!} function TrimSPLeft(const S: string): string; {:Like TrimRight, but remove only spaces, not control characters!} function TrimSPRight(const S: string): string; {:Like Trim, but remove only spaces, not control characters!} function TrimSP(const S: string): string; {:Returns a portion of the "Value" string located to the left of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateLeft(const Value, Delimiter: string): string; {:Returns the portion of the "Value" string located to the right of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateRight(const Value, Delimiter: string): string; {:Returns parameter value from string in format: parameter1="value1"; parameter2=value2} function GetParameter(const Value, Parameter: string): string; {:parse value string with elements differed by Delimiter into stringlist.} procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); {:parse value string with elements differed by ';' into stringlist.} procedure ParseParameters(Value: string; const Parameters: TStrings); {:Index of string in stringlist with same beginning as Value is returned.} function IndexByBegin(Value: string; const List: TStrings): integer; {:Returns only the e-mail portion of an address from the full address format. i.e. returns 'nobody@@somewhere.com' from '"someone" <nobody@@somewhere.com>'} function GetEmailAddr(const Value: string): string; {:Returns only the description part from a full address format. i.e. returns 'someone' from '"someone" <nobody@@somewhere.com>'} function GetEmailDesc(Value: string): string; {:Returns a string with hexadecimal digits representing the corresponding values of the bytes found in "Value" string.} function StrToHex(const Value: Ansistring): string; {:Returns a string of binary "Digits" representing "Value".} function IntToBin(Value: Integer; Digits: Byte): string; {:Returns an integer equivalent of the binary string in "Value". (i.e. ('10001010') returns 138)} function BinToInt(const Value: string): Integer; {:Parses a URL to its various components.} function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, Para: string): string; {:Replaces all "Search" string values found within "Value" string, with the "Replace" string value.} function ReplaceString(Value, Search, Replace: AnsiString): AnsiString; {:It is like RPos, but search is from specified possition.} function RPosEx(const Sub, Value: string; From: integer): Integer; {:It is like POS function, but from right side of Value string.} function RPos(const Sub, Value: String): Integer; {:Like @link(fetch), but working with binary strings, not with text.} function FetchBin(var Value: string; const Delimiter: string): string; {:Fetch string from left of Value string.} function Fetch(var Value: string; const Delimiter: string): string; {:Fetch string from left of Value string. This function ignore delimitesr inside quotations.} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; {:If string is binary string (contains non-printable characters), then is returned true.} function IsBinaryString(const Value: AnsiString): Boolean; {:return position of string terminator in string. If terminator found, then is returned in terminator parameter. Possible line terminators are: CRLF, LFCR, CR, LF} function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; {:Delete empty strings from end of stringlist.} Procedure StringsTrim(const value: TStrings); {:Like Pos function, buf from given string possition.} function PosFrom(const SubStr, Value: String; From: integer): integer; {$IFNDEF CIL} {:Increase pointer by value.} function IncPoint(const p: pointer; Value: integer): pointer; {$ENDIF} {:Get string between PairBegin and PairEnd. This function respect nesting. For example: @longcode(# Value is: 'Hi! (hello(yes!))' pairbegin is: '(' pairend is: ')' In this case result is: 'hello(yes!)'#)} function GetBetween(const PairBegin, PairEnd, Value: string): string; {:Return count of Chr in Value string.} function CountOfChar(const Value: string; Chr: char): integer; {:Remove quotation from Value string. If Value is not quoted, then return same string without any modification. } function UnquoteStr(const Value: string; Quote: Char): string; {:Quote Value string. If Value contains some Quote chars, then it is doubled.} function QuoteStr(const Value: string; Quote: Char): string; {:Convert lines in stringlist from 'name: value' form to 'name=value' form.} procedure HeadersToList(const Value: TStrings); {:Convert lines in stringlist from 'name=value' form to 'name: value' form.} procedure ListToHeaders(const Value: TStrings); {:swap bytes in integer.} function SwapBytes(Value: integer): integer; {:read string with requested length form stream.} function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; {:write string to stream.} procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); {:Return filename of new temporary file in Dir (if empty, then default temporary directory is used) and with optional filename prefix.} function GetTempFile(const Dir, prefix: AnsiString): AnsiString; {:Return padded string. If length is greater, string is truncated. If length is smaller, string is padded by Pad character.} function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; {:XOR each byte in the strings} function XorString(Indata1, Indata2: AnsiString): AnsiString; {:Read header from "Value" stringlist beginning at "Index" position. If header is Splitted into multiple lines, then this procedure de-split it into one line.} function NormalizeHeader(Value: TStrings; var Index: Integer): string; {pf} {:Search for one of line terminators CR, LF or NUL. Return position of the line beginning and length of text.} procedure SearchForLineBreak(var APtr:PANSIChar; AEtx:PANSIChar; out ABol:PANSIChar; out ALength:integer); {:Skip both line terminators CR LF (if any). Move APtr position forward.} procedure SkipLineBreak(var APtr:PANSIChar; AEtx:PANSIChar); {:Skip all blank lines in a buffer starting at APtr and move APtr position forward.} procedure SkipNullLines (var APtr:PANSIChar; AEtx:PANSIChar); {:Copy all lines from a buffer starting at APtr to ALines until empty line or end of the buffer is reached. Move APtr position forward).} procedure CopyLinesFromStreamUntilNullLine(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings); {:Copy all lines from a buffer starting at APtr to ALines until ABoundary or end of the buffer is reached. Move APtr position forward).} procedure CopyLinesFromStreamUntilBoundary(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings; const ABoundary:ANSIString); {:Search ABoundary in a buffer starting at APtr. Return beginning of the ABoundary. Move APtr forward behind a trailing CRLF if any).} function SearchForBoundary (var APtr:PANSIChar; AEtx:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Compare a text at position ABOL with ABoundary and return position behind the match (including a trailing CRLF if any).} function MatchBoundary (ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Compare a text at position ABOL with ABoundary + the last boundary suffix and return position behind the match (including a trailing CRLF if any).} function MatchLastBoundary (ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Copy data from a buffer starting at position APtr and delimited by AEtx position into ANSIString.} function BuildStringFromBuffer (AStx,AEtx:PANSIChar): ANSIString; {/pf} var {:can be used for your own months strings for @link(getmonthnumber)} CustomMonthNames: array[1..12] of string; implementation {==============================================================================} const MyDayNames: array[1..7] of AnsiString = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); var MyMonthNames: array[0..6, 1..12] of String = ( ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //rewrited by system locales 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //English 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), ('jan', 'fv', 'mar', 'avr', 'mai', 'jun', //French 'jul', 'ao', 'sep', 'oct', 'nov', 'dc'), ('jan', 'fev', 'mar', 'avr', 'mai', 'jun', //French#2 'jul', 'aou', 'sep', 'oct', 'nov', 'dec'), ('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', //German 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), ('Jan', 'Feb', 'Mr', 'Apr', 'Mai', 'Jun', //German#2 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), ('Led', 'no', 'Be', 'Dub', 'Kv', 'en', //Czech 'ec', 'Srp', 'Z', 'j', 'Lis', 'Pro') ); {==============================================================================} function TimeZoneBias: integer; {$IFNDEF MSWINDOWS} {$IFNDEF FPC} var t: TTime_T; UT: TUnixTime; begin __time(@T); localtime_r(@T, UT); Result := ut.__tm_gmtoff div 60; {$ELSE} begin Result := TZSeconds div 60; {$ENDIF} {$ELSE} var zoneinfo: TTimeZoneInformation; bias: Integer; begin case GetTimeZoneInformation(Zoneinfo) of 2: bias := zoneinfo.Bias + zoneinfo.DaylightBias; 1: bias := zoneinfo.Bias + zoneinfo.StandardBias; else bias := zoneinfo.Bias; end; Result := bias * (-1); {$ENDIF} end; {==============================================================================} function TimeZone: string; var bias: Integer; h, m: Integer; begin bias := TimeZoneBias; if bias >= 0 then Result := '+' else Result := '-'; bias := Abs(bias); h := bias div 60; m := bias mod 60; Result := Result + Format('%.2d%.2d', [h, m]); end; {==============================================================================} function Rfc822DateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result := Format('%s, %d %s %s %s', [MyDayNames[DayOfWeek(t)], wDay, MyMonthNames[1, wMonth], FormatDateTime('yyyy hh":"nn":"ss', t), TimeZone]); end; {==============================================================================} function CDateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result:= Format('%s %2d %s', [MyMonthNames[1, wMonth], wDay, FormatDateTime('hh":"nn":"ss', t)]); end; {==============================================================================} function SimpleDateTime(t: TDateTime): string; begin Result := FormatDateTime('yymmdd hhnnss', t); end; {==============================================================================} function AnsiCDateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result := Format('%s %s %d %s', [MyDayNames[DayOfWeek(t)], MyMonthNames[1, wMonth], wDay, FormatDateTime('hh":"nn":"ss yyyy ', t)]); end; {==============================================================================} function DecodeTimeZone(Value: string; var Zone: integer): Boolean; var x: integer; zh, zm: integer; s: string; begin Result := false; s := Value; if (Pos('+', s) = 1) or (Pos('-',s) = 1) then begin if s = '-0000' then Zone := TimeZoneBias else if Length(s) > 4 then begin zh := StrToIntdef(s[2] + s[3], 0); zm := StrToIntdef(s[4] + s[5], 0); zone := zh * 60 + zm; if s[1] = '-' then zone := zone * (-1); end; Result := True; end else begin x := 32767; if s = 'NZDT' then x := 13; if s = 'IDLE' then x := 12; if s = 'NZST' then x := 12; if s = 'NZT' then x := 12; if s = 'EADT' then x := 11; if s = 'GST' then x := 10; if s = 'JST' then x := 9; if s = 'CCT' then x := 8; if s = 'WADT' then x := 8; if s = 'WAST' then x := 7; if s = 'ZP6' then x := 6; if s = 'ZP5' then x := 5; if s = 'ZP4' then x := 4; if s = 'BT' then x := 3; if s = 'EET' then x := 2; if s = 'MEST' then x := 2; if s = 'MESZ' then x := 2; if s = 'SST' then x := 2; if s = 'FST' then x := 2; if s = 'CEST' then x := 2; if s = 'CET' then x := 1; if s = 'FWT' then x := 1; if s = 'MET' then x := 1; if s = 'MEWT' then x := 1; if s = 'SWT' then x := 1; if s = 'UT' then x := 0; if s = 'UTC' then x := 0; if s = 'GMT' then x := 0; if s = 'WET' then x := 0; if s = 'WAT' then x := -1; if s = 'BST' then x := -1; if s = 'AT' then x := -2; if s = 'ADT' then x := -3; if s = 'AST' then x := -4; if s = 'EDT' then x := -4; if s = 'EST' then x := -5; if s = 'CDT' then x := -5; if s = 'CST' then x := -6; if s = 'MDT' then x := -6; if s = 'MST' then x := -7; if s = 'PDT' then x := -7; if s = 'PST' then x := -8; if s = 'YDT' then x := -8; if s = 'YST' then x := -9; if s = 'HDT' then x := -9; if s = 'AHST' then x := -10; if s = 'CAT' then x := -10; if s = 'HST' then x := -10; if s = 'EAST' then x := -10; if s = 'NT' then x := -11; if s = 'IDLW' then x := -12; if x <> 32767 then begin zone := x * 60; Result := True; end; end; end; {==============================================================================} function GetMonthNumber(Value: String): integer; var n: integer; function TestMonth(Value: String; Index: Integer): Boolean; var n: integer; begin Result := False; for n := 0 to 6 do if Value = AnsiUppercase(MyMonthNames[n, Index]) then begin Result := True; Break; end; end; begin Result := 0; Value := AnsiUppercase(Value); for n := 1 to 12 do if TestMonth(Value, n) or (Value = AnsiUppercase(CustomMonthNames[n])) then begin Result := n; Break; end; end; {==============================================================================} function GetTimeFromStr(Value: string): TDateTime; var x: integer; begin x := rpos(':', Value); if (x > 0) and ((Length(Value) - x) > 2) then Value := Copy(Value, 1, x + 2); Value := ReplaceString(Value, ':', TimeSeparator); Result := -1; try Result := StrToTime(Value); except on Exception do ; end; end; {==============================================================================} function GetDateMDYFromStr(Value: string): TDateTime; var wYear, wMonth, wDay: word; s: string; begin Result := 0; s := Fetch(Value, '-'); wMonth := StrToIntDef(s, 12); s := Fetch(Value, '-'); wDay := StrToIntDef(s, 30); wYear := StrToIntDef(Value, 1899); if wYear < 1000 then if (wYear > 99) then wYear := wYear + 1900 else if wYear > 50 then wYear := wYear + 1900 else wYear := wYear + 2000; try Result := EncodeDate(wYear, wMonth, wDay); except on Exception do ; end; end; {==============================================================================} function DecodeRfcDateTime(Value: string): TDateTime; var day, month, year: Word; zone: integer; x, y: integer; s: string; t: TDateTime; begin // ddd, d mmm yyyy hh:mm:ss // ddd, d mmm yy hh:mm:ss // ddd, mmm d yyyy hh:mm:ss // ddd mmm dd hh:mm:ss yyyy // Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 // Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format Result := 0; if Value = '' then Exit; day := 0; month := 0; year := 0; zone := 0; Value := ReplaceString(Value, ' -', ' #'); Value := ReplaceString(Value, '-', ' '); Value := ReplaceString(Value, ' #', ' -'); while Value <> '' do begin s := Fetch(Value, ' '); s := uppercase(s); // timezone if DecodetimeZone(s, x) then begin zone := x; continue; end; x := StrToIntDef(s, 0); // day or year if x > 0 then if (x < 32) and (day = 0) then begin day := x; continue; end else begin if (year = 0) and ((month > 0) or (x > 12)) then begin year := x; if year < 32 then year := year + 2000; if year < 1000 then year := year + 1900; continue; end; end; // time if rpos(':', s) > Pos(':', s) then begin t := GetTimeFromStr(s); if t <> -1 then Result := t; continue; end; //timezone daylight saving time if s = 'DST' then begin zone := zone + 60; continue; end; // month y := GetMonthNumber(s); if (y > 0) and (month = 0) then month := y; end; if year = 0 then year := 1980; if month < 1 then month := 1; if month > 12 then month := 12; if day < 1 then day := 1; x := MonthDays[IsLeapYear(year), month]; if day > x then day := x; Result := Result + Encodedate(year, month, day); zone := zone - TimeZoneBias; x := zone div 1440; Result := Result - x; zone := zone mod 1440; t := EncodeTime(Abs(zone) div 60, Abs(zone) mod 60, 0, 0); if zone < 0 then t := 0 - t; Result := Result - t; end; {==============================================================================} function GetUTTime: TDateTime; {$IFDEF MSWINDOWS} {$IFNDEF FPC} var st: TSystemTime; begin GetSystemTime(st); result := SystemTimeToDateTime(st); {$ELSE} var st: SysUtils.TSystemTime; stw: Windows.TSystemTime; begin GetSystemTime(stw); st.Year := stw.wYear; st.Month := stw.wMonth; st.Day := stw.wDay; st.Hour := stw.wHour; st.Minute := stw.wMinute; st.Second := stw.wSecond; st.Millisecond := stw.wMilliseconds; result := SystemTimeToDateTime(st); {$ENDIF} {$ELSE} {$IFNDEF FPC} var TV: TTimeVal; begin gettimeofday(TV, nil); Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; {$ELSE} var TV: TimeVal; begin fpgettimeofday(@TV, nil); Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; {$ENDIF} {$ENDIF} end; {==============================================================================} function SetUTTime(Newdt: TDateTime): Boolean; {$IFDEF MSWINDOWS} {$IFNDEF FPC} var st: TSystemTime; begin DateTimeToSystemTime(newdt,st); Result := SetSystemTime(st); {$ELSE} var st: SysUtils.TSystemTime; stw: Windows.TSystemTime; begin DateTimeToSystemTime(newdt,st); stw.wYear := st.Year; stw.wMonth := st.Month; stw.wDay := st.Day; stw.wHour := st.Hour; stw.wMinute := st.Minute; stw.wSecond := st.Second; stw.wMilliseconds := st.Millisecond; Result := SetSystemTime(stw); {$ENDIF} {$ELSE} {$IFNDEF FPC} var TV: TTimeVal; d: double; TZ: Ttimezone; PZ: PTimeZone; begin TZ.tz_minuteswest := 0; TZ.tz_dsttime := 0; PZ := @TZ; gettimeofday(TV, PZ); d := (newdt - UnixDateDelta) * 86400; TV.tv_sec := trunc(d); TV.tv_usec := trunc(frac(d) * 1000000); Result := settimeofday(TV, TZ) <> -1; {$ELSE} var TV: TimeVal; d: double; begin d := (newdt - UnixDateDelta) * 86400; TV.tv_sec := trunc(d); TV.tv_usec := trunc(frac(d) * 1000000); Result := fpsettimeofday(@TV, nil) <> -1; {$ENDIF} {$ENDIF} end; {==============================================================================} {$IFNDEF MSWINDOWS} function GetTick: LongWord; var Stamp: TTimeStamp; begin Stamp := DateTimeToTimeStamp(Now); Result := Stamp.Time; end; {$ELSE} function GetTick: LongWord; var tick, freq: TLargeInteger; {$IFDEF VER100} x: TLargeInteger; {$ENDIF} begin if Windows.QueryPerformanceFrequency(freq) then begin Windows.QueryPerformanceCounter(tick); {$IFDEF VER100} x.QuadPart := (tick.QuadPart / freq.QuadPart) * 1000; Result := x.LowPart; {$ELSE} Result := Trunc((tick / freq) * 1000) and High(LongWord) {$ENDIF} end else Result := Windows.GetTickCount; end; {$ENDIF} {==============================================================================} function TickDelta(TickOld, TickNew: LongWord): LongWord; begin //if DWord is signed type (older Deplhi), // then it not work properly on differencies larger then maxint! Result := 0; if TickOld <> TickNew then begin if TickNew < TickOld then begin TickNew := TickNew + LongWord(MaxInt) + 1; TickOld := TickOld + LongWord(MaxInt) + 1; end; Result := TickNew - TickOld; if TickNew < TickOld then if Result > 0 then Result := 0 - Result; end; end; {==============================================================================} function CodeInt(Value: Word): Ansistring; begin setlength(result, 2); result[1] := AnsiChar(Value div 256); result[2] := AnsiChar(Value mod 256); // Result := AnsiChar(Value div 256) + AnsiChar(Value mod 256) end; {==============================================================================} function DecodeInt(const Value: Ansistring; Index: Integer): Word; var x, y: Byte; begin if Length(Value) > Index then x := Ord(Value[Index]) else x := 0; if Length(Value) >= (Index + 1) then y := Ord(Value[Index + 1]) else y := 0; Result := x * 256 + y; end; {==============================================================================} function CodeLongInt(Value: Longint): Ansistring; var x, y: word; begin // this is fix for negative numbers on systems where longint = integer x := (Value shr 16) and integer($ffff); y := Value and integer($ffff); setlength(result, 4); result[1] := AnsiChar(x div 256); result[2] := AnsiChar(x mod 256); result[3] := AnsiChar(y div 256); result[4] := AnsiChar(y mod 256); end; {==============================================================================} function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; var x, y: Byte; xl, yl: Byte; begin if Length(Value) > Index then x := Ord(Value[Index]) else x := 0; if Length(Value) >= (Index + 1) then y := Ord(Value[Index + 1]) else y := 0; if Length(Value) >= (Index + 2) then xl := Ord(Value[Index + 2]) else xl := 0; if Length(Value) >= (Index + 3) then yl := Ord(Value[Index + 3]) else yl := 0; Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); end; {==============================================================================} function DumpStr(const Buffer: Ansistring): string; var n: Integer; begin Result := ''; for n := 1 to Length(Buffer) do Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); end; {==============================================================================} function DumpExStr(const Buffer: Ansistring): string; var n: Integer; x: Byte; begin Result := ''; for n := 1 to Length(Buffer) do begin x := Ord(Buffer[n]); if x in [65..90, 97..122] then Result := Result + ' +''' + char(x) + '''' else Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); end; end; {==============================================================================} procedure Dump(const Buffer: AnsiString; DumpFile: string); var f: Text; begin AssignFile(f, DumpFile); if FileExists(DumpFile) then DeleteFile(DumpFile); Rewrite(f); try Writeln(f, DumpStr(Buffer)); finally CloseFile(f); end; end; {==============================================================================} procedure DumpEx(const Buffer: AnsiString; DumpFile: string); var f: Text; begin AssignFile(f, DumpFile); if FileExists(DumpFile) then DeleteFile(DumpFile); Rewrite(f); try Writeln(f, DumpExStr(Buffer)); finally CloseFile(f); end; end; {==============================================================================} function TrimSPLeft(const S: string): string; var I, L: Integer; begin Result := ''; if S = '' then Exit; L := Length(S); I := 1; while (I <= L) and (S[I] = ' ') do Inc(I); Result := Copy(S, I, Maxint); end; {==============================================================================} function TrimSPRight(const S: string): string; var I: Integer; begin Result := ''; if S = '' then Exit; I := Length(S); while (I > 0) and (S[I] = ' ') do Dec(I); Result := Copy(S, 1, I); end; {==============================================================================} function TrimSP(const S: string): string; begin Result := TrimSPLeft(s); Result := TrimSPRight(Result); end; {==============================================================================} function SeparateLeft(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x < 1 then Result := Value else Result := Copy(Value, 1, x - 1); end; {==============================================================================} function SeparateRight(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x > 0 then x := x + Length(Delimiter) - 1; Result := Copy(Value, x + 1, Length(Value) - x); end; {==============================================================================} function GetParameter(const Value, Parameter: string): string; var s: string; v: string; begin Result := ''; v := Value; while v <> '' do begin s := Trim(FetchEx(v, ';', '"')); if Pos(Uppercase(parameter), Uppercase(s)) = 1 then begin Delete(s, 1, Length(Parameter)); s := Trim(s); if s = '' then Break; if s[1] = '=' then begin Result := Trim(SeparateRight(s, '=')); Result := UnquoteStr(Result, '"'); break; end; end; end; end; {==============================================================================} procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); var s: string; begin Parameters.Clear; while Value <> '' do begin s := Trim(FetchEx(Value, Delimiter, '"')); Parameters.Add(s); end; end; {==============================================================================} procedure ParseParameters(Value: string; const Parameters: TStrings); begin ParseParametersEx(Value, ';', Parameters); end; {==============================================================================} function IndexByBegin(Value: string; const List: TStrings): integer; var n: integer; s: string; begin Result := -1; Value := uppercase(Value); for n := 0 to List.Count -1 do begin s := UpperCase(List[n]); if Pos(Value, s) = 1 then begin Result := n; Break; end; end; end; {==============================================================================} function GetEmailAddr(const Value: string): string; var s: string; begin s := SeparateRight(Value, '<'); s := SeparateLeft(s, '>'); Result := Trim(s); end; {==============================================================================} function GetEmailDesc(Value: string): string; var s: string; begin Value := Trim(Value); s := SeparateRight(Value, '"'); if s <> Value then s := SeparateLeft(s, '"') else begin s := SeparateLeft(Value, '<'); if s = Value then begin s := SeparateRight(Value, '('); if s <> Value then s := SeparateLeft(s, ')') else s := ''; end; end; Result := Trim(s); end; {==============================================================================} function StrToHex(const Value: Ansistring): string; var n: Integer; begin Result := ''; for n := 1 to Length(Value) do Result := Result + IntToHex(Byte(Value[n]), 2); Result := LowerCase(Result); end; {==============================================================================} function IntToBin(Value: Integer; Digits: Byte): string; var x, y, n: Integer; begin Result := ''; x := Value; repeat y := x mod 2; x := x div 2; if y > 0 then Result := '1' + Result else Result := '0' + Result; until x = 0; x := Length(Result); for n := x to Digits - 1 do Result := '0' + Result; end; {==============================================================================} function BinToInt(const Value: string): Integer; var n: Integer; begin Result := 0; for n := 1 to Length(Value) do begin if Value[n] = '0' then Result := Result * 2 else if Value[n] = '1' then Result := Result * 2 + 1 else Break; end; end; {==============================================================================} function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, Para: string): string; var x, y: Integer; sURL: string; s: string; s1, s2: string; begin Prot := 'http'; User := ''; Pass := ''; Port := '80'; Para := ''; x := Pos('://', URL); if x > 0 then begin Prot := SeparateLeft(URL, '://'); sURL := SeparateRight(URL, '://'); end else sURL := URL; if UpperCase(Prot) = 'HTTPS' then Port := '443'; if UpperCase(Prot) = 'FTP' then Port := '21'; x := Pos('@', sURL); y := Pos('/', sURL); if (x > 0) and ((x < y) or (y < 1))then begin s := SeparateLeft(sURL, '@'); sURL := SeparateRight(sURL, '@'); x := Pos(':', s); if x > 0 then begin User := SeparateLeft(s, ':'); Pass := SeparateRight(s, ':'); end else User := s; end; x := Pos('/', sURL); if x > 0 then begin s1 := SeparateLeft(sURL, '/'); s2 := SeparateRight(sURL, '/'); end else begin s1 := sURL; s2 := ''; end; if Pos('[', s1) = 1 then begin Host := Separateleft(s1, ']'); Delete(Host, 1, 1); s1 := SeparateRight(s1, ']'); if Pos(':', s1) = 1 then Port := SeparateRight(s1, ':'); end else begin x := Pos(':', s1); if x > 0 then begin Host := SeparateLeft(s1, ':'); Port := SeparateRight(s1, ':'); end else Host := s1; end; Result := '/' + s2; x := Pos('?', s2); if x > 0 then begin Path := '/' + SeparateLeft(s2, '?'); Para := SeparateRight(s2, '?'); end else Path := '/' + s2; if Host = '' then Host := 'localhost'; end; {==============================================================================} function ReplaceString(Value, Search, Replace: AnsiString): AnsiString; var x, l, ls, lr: Integer; begin if (Value = '') or (Search = '') then begin Result := Value; Exit; end; ls := Length(Search); lr := Length(Replace); Result := ''; x := Pos(Search, Value); while x > 0 do begin {$IFNDEF CIL} l := Length(Result); SetLength(Result, l + x - 1); Move(Pointer(Value)^, Pointer(@Result[l + 1])^, x - 1); {$ELSE} Result:=Result+Copy(Value,1,x-1); {$ENDIF} {$IFNDEF CIL} l := Length(Result); SetLength(Result, l + lr); Move(Pointer(Replace)^, Pointer(@Result[l + 1])^, lr); {$ELSE} Result:=Result+Replace; {$ENDIF} Delete(Value, 1, x - 1 + ls); x := Pos(Search, Value); end; Result := Result + Value; end; {==============================================================================} function RPosEx(const Sub, Value: string; From: integer): Integer; var n: Integer; l: Integer; begin result := 0; l := Length(Sub); for n := From - l + 1 downto 1 do begin if Copy(Value, n, l) = Sub then begin result := n; break; end; end; end; {==============================================================================} function RPos(const Sub, Value: String): Integer; begin Result := RPosEx(Sub, Value, Length(Value)); end; {==============================================================================} function FetchBin(var Value: string; const Delimiter: string): string; var s: string; begin Result := SeparateLeft(Value, Delimiter); s := SeparateRight(Value, Delimiter); if s = Value then Value := '' else Value := s; end; {==============================================================================} function Fetch(var Value: string; const Delimiter: string): string; begin Result := FetchBin(Value, Delimiter); Result := TrimSP(Result); Value := TrimSP(Value); end; {==============================================================================} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; var b: Boolean; begin Result := ''; b := False; while Length(Value) > 0 do begin if b then begin if Pos(Quotation, Value) = 1 then b := False; Result := Result + Value[1]; Delete(Value, 1, 1); end else begin if Pos(Delimiter, Value) = 1 then begin Delete(Value, 1, Length(delimiter)); break; end; b := Pos(Quotation, Value) = 1; Result := Result + Value[1]; Delete(Value, 1, 1); end; end; end; {==============================================================================} function IsBinaryString(const Value: AnsiString): Boolean; var n: integer; begin Result := False; for n := 1 to Length(Value) do if Value[n] in [#0..#8, #10..#31] then //ignore null-terminated strings if not ((n = Length(value)) and (Value[n] = AnsiChar(#0))) then begin Result := True; Break; end; end; {==============================================================================} function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; var n, l: integer; begin Result := -1; Terminator := ''; l := length(value); for n := 1 to l do if value[n] in [#$0d, #$0a] then begin Result := n; Terminator := Value[n]; if n <> l then case value[n] of #$0d: if value[n + 1] = #$0a then Terminator := #$0d + #$0a; #$0a: if value[n + 1] = #$0d then Terminator := #$0a + #$0d; end; Break; end; end; {==============================================================================} Procedure StringsTrim(const Value: TStrings); var n: integer; begin for n := Value.Count - 1 downto 0 do if Value[n] = '' then Value.Delete(n) else Break; end; {==============================================================================} function PosFrom(const SubStr, Value: String; From: integer): integer; var ls,lv: integer; begin Result := 0; ls := Length(SubStr); lv := Length(Value); if (ls = 0) or (lv = 0) then Exit; if From < 1 then From := 1; while (ls + from - 1) <= (lv) do begin {$IFNDEF CIL} if CompareMem(@SubStr[1],@Value[from],ls) then {$ELSE} if SubStr = copy(Value, from, ls) then {$ENDIF} begin result := from; break; end else inc(from); end; end; {==============================================================================} {$IFNDEF CIL} function IncPoint(const p: pointer; Value: integer): pointer; begin Result := PAnsiChar(p) + Value; end; {$ENDIF} {==============================================================================} //improved by 'DoggyDawg' function GetBetween(const PairBegin, PairEnd, Value: string): string; var n: integer; x: integer; s: string; lenBegin: integer; lenEnd: integer; str: string; max: integer; begin lenBegin := Length(PairBegin); lenEnd := Length(PairEnd); n := Length(Value); if (Value = PairBegin + PairEnd) then begin Result := '';//nothing between exit; end; if (n < lenBegin + lenEnd) then begin Result := Value; exit; end; s := SeparateRight(Value, PairBegin); if (s = Value) then begin Result := Value; exit; end; n := Pos(PairEnd, s); if (n = 0) then begin Result := Value; exit; end; Result := ''; x := 1; max := Length(s) - lenEnd + 1; for n := 1 to max do begin str := copy(s, n, lenEnd); if (str = PairEnd) then begin Dec(x); if (x <= 0) then Break; end; str := copy(s, n, lenBegin); if (str = PairBegin) then Inc(x); Result := Result + s[n]; end; end; {==============================================================================} function CountOfChar(const Value: string; Chr: char): integer; var n: integer; begin Result := 0; for n := 1 to Length(Value) do if Value[n] = chr then Inc(Result); end; {==============================================================================} // ! do not use AnsiExtractQuotedStr, it's very buggy and can crash application! function UnquoteStr(const Value: string; Quote: Char): string; var n: integer; inq, dq: Boolean; c, cn: char; begin Result := ''; if Value = '' then Exit; if Value = Quote + Quote then Exit; inq := False; dq := False; for n := 1 to Length(Value) do begin c := Value[n]; if n <> Length(Value) then cn := Value[n + 1] else cn := #0; if c = quote then if dq then dq := False else if not inq then inq := True else if cn = quote then begin Result := Result + Quote; dq := True; end else inq := False else Result := Result + c; end; end; {==============================================================================} function QuoteStr(const Value: string; Quote: Char): string; var n: integer; begin Result := ''; for n := 1 to length(value) do begin Result := result + Value[n]; if value[n] = Quote then Result := Result + Quote; end; Result := Quote + Result + Quote; end; {==============================================================================} procedure HeadersToList(const Value: TStrings); var n, x, y: integer; s: string; begin for n := 0 to Value.Count -1 do begin s := Value[n]; x := Pos(':', s); if x > 0 then begin y:= Pos('=',s); if not ((y > 0) and (y < x)) then begin s[x] := '='; Value[n] := s; end; end; end; end; {==============================================================================} procedure ListToHeaders(const Value: TStrings); var n, x: integer; s: string; begin for n := 0 to Value.Count -1 do begin s := Value[n]; x := Pos('=', s); if x > 0 then begin s[x] := ':'; Value[n] := s; end; end; end; {==============================================================================} function SwapBytes(Value: integer): integer; var s: AnsiString; x, y, xl, yl: Byte; begin s := CodeLongInt(Value); x := Ord(s[4]); y := Ord(s[3]); xl := Ord(s[2]); yl := Ord(s[1]); Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); end; {==============================================================================} function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; var x: integer; {$IFDEF CIL} buf: Array of Byte; {$ENDIF} begin {$IFDEF CIL} Setlength(buf, Len); x := Stream.read(buf, Len); SetLength(buf, x); Result := StringOf(Buf); {$ELSE} Setlength(Result, Len); x := Stream.read(PAnsiChar(Result)^, Len); SetLength(Result, x); {$ENDIF} end; {==============================================================================} procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); {$IFDEF CIL} var buf: Array of Byte; {$ENDIF} begin {$IFDEF CIL} buf := BytesOf(Value); Stream.Write(buf,length(Value)); {$ELSE} Stream.Write(PAnsiChar(Value)^, Length(Value)); {$ENDIF} end; {==============================================================================} function GetTempFile(const Dir, prefix: AnsiString): AnsiString; {$IFNDEF FPC} {$IFDEF MSWINDOWS} var Path: AnsiString; x: integer; {$ENDIF} {$ENDIF} begin {$IFDEF FPC} Result := GetTempFileName(Dir, Prefix); {$ELSE} {$IFNDEF MSWINDOWS} Result := tempnam(Pointer(Dir), Pointer(prefix)); {$ELSE} {$IFDEF CIL} Result := System.IO.Path.GetTempFileName; {$ELSE} if Dir = '' then begin SetLength(Path, MAX_PATH); x := GetTempPath(Length(Path), PChar(Path)); SetLength(Path, x); end else Path := Dir; x := Length(Path); if Path[x] <> '\' then Path := Path + '\'; SetLength(Result, MAX_PATH + 1); GetTempFileName(PChar(Path), PChar(Prefix), 0, PChar(Result)); Result := PChar(Result); SetFileattributes(PChar(Result), GetFileAttributes(PChar(Result)) or FILE_ATTRIBUTE_TEMPORARY); {$ENDIF} {$ENDIF} {$ENDIF} end; {==============================================================================} function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; begin if length(value) >= len then Result := Copy(value, 1, len) else Result := Value + StringOfChar(Pad, len - length(value)); end; {==============================================================================} function XorString(Indata1, Indata2: AnsiString): AnsiString; var i: integer; begin Indata2 := PadString(Indata2, length(Indata1), #0); Result := ''; for i := 1 to length(Indata1) do Result := Result + AnsiChar(ord(Indata1[i]) xor ord(Indata2[i])); end; {==============================================================================} function NormalizeHeader(Value: TStrings; var Index: Integer): string; var s, t: string; n: Integer; begin s := Value[Index]; Inc(Index); if s <> '' then while (Value.Count - 1) > Index do begin t := Value[Index]; if t = '' then Break; for n := 1 to Length(t) do if t[n] = #9 then t[n] := ' '; if not(AnsiChar(t[1]) in [' ', '"', ':', '=']) then Break else begin s := s + ' ' + Trim(t); Inc(Index); end; end; Result := TrimRight(s); end; {==============================================================================} {pf} procedure SearchForLineBreak(var APtr:PANSIChar; AEtx:PANSIChar; out ABol:PANSIChar; out ALength:integer); begin ABol := APtr; while (APtr<AEtx) and not (APtr^ in [#0,#10,#13]) do inc(APtr); ALength := APtr-ABol; end; {/pf} {pf} procedure SkipLineBreak(var APtr:PANSIChar; AEtx:PANSIChar); begin if (APtr<AEtx) and (APtr^=#13) then inc(APtr); if (APtr<AEtx) and (APtr^=#10) then inc(APtr); end; {/pf} {pf} procedure SkipNullLines(var APtr:PANSIChar; AEtx:PANSIChar); var bol: PANSIChar; lng: integer; begin while (APtr<AEtx) do begin SearchForLineBreak(APtr,AEtx,bol,lng); SkipLineBreak(APtr,AEtx); if lng>0 then begin APtr := bol; Break; end; end; end; {/pf} {pf} procedure CopyLinesFromStreamUntilNullLine(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings); var bol: PANSIChar; lng: integer; s: ANSIString; begin // Copying until body separator will be reached while (APtr<AEtx) and (APtr^<>#0) do begin SearchForLineBreak(APtr,AEtx,bol,lng); SkipLineBreak(APtr,AEtx); if lng=0 then Break; SetString(s,bol,lng); ALines.Add(s); end; end; {/pf} {pf} procedure CopyLinesFromStreamUntilBoundary(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings; const ABoundary:ANSIString); var bol: PANSIChar; lng: integer; s: ANSIString; BackStop: ANSIString; eob1: PANSIChar; eob2: PANSIChar; begin BackStop := '--'+ABoundary; eob2 := nil; // Copying until Boundary will be reached while (APtr<AEtx) do begin SearchForLineBreak(APtr,AEtx,bol,lng); SkipLineBreak(APtr,AEtx); eob1 := MatchBoundary(bol,APtr,ABoundary); if Assigned(eob1) then eob2 := MatchLastBoundary(bol,AEtx,ABoundary); if Assigned(eob2) then begin APtr := eob2; Break; end else if Assigned(eob1) then begin APtr := eob1; Break; end else begin SetString(s,bol,lng); ALines.Add(s); end; end; end; {/pf} {pf} function SearchForBoundary(var APtr:PANSIChar; AEtx:PANSIChar; const ABoundary:ANSIString): PANSIChar; var eob: PANSIChar; Step: integer; begin Result := nil; // Moving Aptr position forward until boundary will be reached while (APtr<AEtx) do begin if strlcomp(APtr,#13#10'--',4)=0 then begin eob := MatchBoundary(APtr,AEtx,ABoundary); Step := 4; end else if strlcomp(APtr,'--',2)=0 then begin eob := MatchBoundary(APtr,AEtx,ABoundary); Step := 2; end else begin eob := nil; Step := 1; end; if Assigned(eob) then begin Result := APtr; // boundary beginning APtr := eob; // boundary end exit; end else inc(APtr,Step); end; end; {/pf} {pf} function MatchBoundary(ABol,AEtx:PANSIChar; const ABoundary:ANSIString): PANSIChar; var MatchPos: PANSIChar; Lng: integer; begin Result := nil; MatchPos := ABol; Lng := length(ABoundary); if (MatchPos+2+Lng)>AETX then exit; if strlcomp(MatchPos,#13#10,2)=0 then inc(MatchPos,2); if (MatchPos+2+Lng)>AETX then exit; if strlcomp(MatchPos,'--',2)<>0 then exit; inc(MatchPos,2); if strlcomp(MatchPos,PANSIChar(ABoundary),Lng)<>0 then exit; inc(MatchPos,Lng); if ((MatchPos+2)<=AEtx) and (strlcomp(MatchPos,#13#10,2)=0) then inc(MatchPos,2); Result := MatchPos; end; {/pf} {pf} function MatchLastBoundary(ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; var MatchPos: PANSIChar; begin Result := nil; MatchPos := MatchBoundary(ABOL,AETX,ABoundary); if not Assigned(MatchPos) then exit; if strlcomp(MatchPos,'--',2)<>0 then exit; inc(MatchPos,2); if (MatchPos+2<=AEtx) and (strlcomp(MatchPos,#13#10,2)=0) then inc(MatchPos,2); Result := MatchPos; end; {/pf} {pf} function BuildStringFromBuffer(AStx,AEtx:PANSIChar): ANSIString; var lng: integer; begin Lng := 0; if Assigned(AStx) and Assigned(AEtx) then begin Lng := AEtx-AStx; if Lng<0 then Lng := 0; end; SetString(Result,AStx,lng); end; {/pf} {==============================================================================} var n: integer; begin for n := 1 to 12 do begin CustomMonthNames[n] := ShortMonthNames[n]; MyMonthNames[0, n] := ShortMonthNames[n]; end; end. doublecmd-1.1.30/plugins/wfx/ftp/synapse/synaip.pas�������������������������������������������������0000644�0001750�0000144�00000027177�15104114162�021353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.002.001 | |==============================================================================| | Content: IP address support procedures and functions | |==============================================================================| | Copyright (c)2006-2010, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 2006-2010. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(IP adress support procedures and functions)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synaip; interface uses SysUtils, SynaUtil; type {:binary form of IPv6 adress (for string conversion routines)} TIp6Bytes = array [0..15] of Byte; {:binary form of IPv6 adress (for string conversion routines)} TIp6Words = array [0..7] of Word; {:Returns @TRUE, if "Value" is a valid IPv4 address. Cannot be a symbolic Name!} function IsIP(const Value: string): Boolean; {:Returns @TRUE, if "Value" is a valid IPv6 address. Cannot be a symbolic Name!} function IsIP6(const Value: string): Boolean; {:Returns a string with the "Host" ip address converted to binary form.} function IPToID(Host: string): Ansistring; {:Convert IPv6 address from their string form to binary byte array.} function StrToIp6(value: string): TIp6Bytes; {:Convert IPv6 address from binary byte array to string form.} function Ip6ToStr(value: TIp6Bytes): string; {:Convert IPv4 address from their string form to binary.} function StrToIp(value: string): integer; {:Convert IPv4 address from binary to string form.} function IpToStr(value: integer): string; {:Convert IPv4 address to reverse form.} function ReverseIP(Value: AnsiString): AnsiString; {:Convert IPv6 address to reverse form.} function ReverseIP6(Value: AnsiString): AnsiString; {:Expand short form of IPv6 address to long form.} function ExpandIP6(Value: AnsiString): AnsiString; implementation {==============================================================================} function IsIP(const Value: string): Boolean; var TempIP: string; function ByteIsOk(const Value: string): Boolean; var x, n: integer; begin x := StrToIntDef(Value, -1); Result := (x >= 0) and (x < 256); // X may be in correct range, but value still may not be correct value! // i.e. "$80" if Result then for n := 1 to length(Value) do if not (AnsiChar(Value[n]) in ['0'..'9']) then begin Result := False; Break; end; end; begin TempIP := Value; Result := False; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if ByteIsOk(TempIP) then Result := True; end; {==============================================================================} function IsIP6(const Value: string): Boolean; var TempIP: string; s,t: string; x: integer; partcount: integer; zerocount: integer; First: Boolean; begin TempIP := Value; Result := False; if Value = '::' then begin Result := True; Exit; end; partcount := 0; zerocount := 0; First := True; while tempIP <> '' do begin s := fetch(TempIP, ':'); if not(First) and (s = '') then Inc(zerocount); First := False; if zerocount > 1 then break; Inc(partCount); if s = '' then Continue; if partCount > 8 then break; if tempIP = '' then begin t := SeparateRight(s, '%'); s := SeparateLeft(s, '%'); x := StrToIntDef('$' + t, -1); if (x < 0) or (x > $ffff) then break; end; x := StrToIntDef('$' + s, -1); if (x < 0) or (x > $ffff) then break; if tempIP = '' then if not((PartCount = 1) and (ZeroCount = 0)) then Result := True; end; end; {==============================================================================} function IPToID(Host: string): Ansistring; var s: string; i, x: Integer; begin Result := ''; for x := 0 to 3 do begin s := Fetch(Host, '.'); i := StrToIntDef(s, 0); Result := Result + AnsiChar(i); end; end; {==============================================================================} function StrToIp(value: string): integer; var s: string; i, x: Integer; begin Result := 0; for x := 0 to 3 do begin s := Fetch(value, '.'); i := StrToIntDef(s, 0); Result := (256 * Result) + i; end; end; {==============================================================================} function IpToStr(value: integer): string; var x1, x2: word; y1, y2: byte; begin Result := ''; x1 := value shr 16; x2 := value and $FFFF; y1 := x1 div $100; y2 := x1 mod $100; Result := inttostr(y1) + '.' + inttostr(y2) + '.'; y1 := x2 div $100; y2 := x2 mod $100; Result := Result + inttostr(y1) + '.' + inttostr(y2); end; {==============================================================================} function ExpandIP6(Value: AnsiString): AnsiString; var n: integer; s: ansistring; x: integer; begin Result := ''; if value = '' then exit; x := countofchar(value, ':'); if x > 7 then exit; if value[1] = ':' then value := '0' + value; if value[length(value)] = ':' then value := value + '0'; x := 8 - x; s := ''; for n := 1 to x do s := s + ':0'; s := s + ':'; Result := replacestring(value, '::', s); end; {==============================================================================} function StrToIp6(Value: string): TIp6Bytes; var IPv6: TIp6Words; Index: Integer; n: integer; b1, b2: byte; s: string; x: integer; begin for n := 0 to 15 do Result[n] := 0; for n := 0 to 7 do Ipv6[n] := 0; Index := 0; Value := ExpandIP6(value); if value = '' then exit; while Value <> '' do begin if Index > 7 then Exit; s := fetch(value, ':'); if s = '@' then break; if s = '' then begin IPv6[Index] := 0; end else begin x := StrToIntDef('$' + s, -1); if (x > 65535) or (x < 0) then Exit; IPv6[Index] := x; end; Inc(Index); end; for n := 0 to 7 do begin b1 := ipv6[n] div 256; b2 := ipv6[n] mod 256; Result[n * 2] := b1; Result[(n * 2) + 1] := b2; end; end; {==============================================================================} //based on routine by the Free Pascal development team function Ip6ToStr(value: TIp6Bytes): string; var i, x: byte; zr1,zr2: set of byte; zc1,zc2: byte; have_skipped: boolean; ip6w: TIp6words; begin zr1 := []; zr2 := []; zc1 := 0; zc2 := 0; for i := 0 to 7 do begin x := i * 2; ip6w[i] := value[x] * 256 + value[x + 1]; if ip6w[i] = 0 then begin include(zr2, i); inc(zc2); end else begin if zc1 < zc2 then begin zc1 := zc2; zr1 := zr2; zc2 := 0; zr2 := []; end; end; end; if zc1 < zc2 then begin zr1 := zr2; end; SetLength(Result, 8*5-1); SetLength(Result, 0); have_skipped := false; for i := 0 to 7 do begin if not(i in zr1) then begin if have_skipped then begin if Result = '' then Result := '::' else Result := Result + ':'; have_skipped := false; end; Result := Result + IntToHex(Ip6w[i], 1) + ':'; end else begin have_skipped := true; end; end; if have_skipped then if Result = '' then Result := '::0' else Result := Result + ':'; if Result = '' then Result := '::0'; if not (7 in zr1) then SetLength(Result, Length(Result)-1); Result := LowerCase(result); end; {==============================================================================} function ReverseIP(Value: AnsiString): AnsiString; var x: Integer; begin Result := ''; repeat x := LastDelimiter('.', Value); Result := Result + '.' + Copy(Value, x + 1, Length(Value) - x); Delete(Value, x, Length(Value) - x + 1); until x < 1; if Length(Result) > 0 then if Result[1] = '.' then Delete(Result, 1, 1); end; {==============================================================================} function ReverseIP6(Value: AnsiString): AnsiString; var ip6: TIp6bytes; n: integer; x, y: integer; begin ip6 := StrToIP6(Value); x := ip6[15] div 16; y := ip6[15] mod 16; Result := IntToHex(y, 1) + '.' + IntToHex(x, 1); for n := 14 downto 0 do begin x := ip6[n] div 16; y := ip6[n] mod 16; Result := Result + '.' + IntToHex(y, 1) + '.' + IntToHex(x, 1); end; end; {==============================================================================} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/synafpc.pas������������������������������������������������0000644�0001750�0000144�00000012523�15104114162�021500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.003.001 | |==============================================================================| | Content: Utils for FreePascal compatibility | |==============================================================================| | Copyright (c)1999-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2003-2013. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Tomas Hajny (OS2 support) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} unit synafpc; interface uses {$IFDEF FPC} dynlibs, sysutils; {$ELSE} {$IFDEF MSWINDOWS} Windows; {$ELSE} SysUtils; {$ENDIF} {$ENDIF} {$IFDEF FPC} type TLibHandle = dynlibs.TLibHandle; function LoadLibrary(ModuleName: PChar): TLibHandle; function FreeLibrary(Module: TLibHandle): LongBool; function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; {$ELSE} //not FPC type {$IFDEF CIL} TLibHandle = Integer; PtrInt = Integer; {$ELSE} TLibHandle = HModule; {$IFDEF WIN64} PtrInt = NativeInt; {$ELSE} PtrInt = Integer; {$ENDIF} {$ENDIF} {$IFDEF VER100} LongWord = DWord; {$ENDIF} {$ENDIF} procedure Sleep(milliseconds: Cardinal); implementation {==============================================================================} {$IFDEF FPC} function LoadLibrary(ModuleName: PChar): TLibHandle; begin Result := dynlibs.LoadLibrary(Modulename); end; function FreeLibrary(Module: TLibHandle): LongBool; begin Result := dynlibs.UnloadLibrary(Module); end; function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; begin {$IFDEF OS2GCC} Result := dynlibs.GetProcedureAddress(Module, '_' + Proc); {$ELSE OS2GCC} Result := dynlibs.GetProcedureAddress(Module, Proc); {$ENDIF OS2GCC} end; function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; begin Result := 0; end; {$ELSE} {$ENDIF} procedure Sleep(milliseconds: Cardinal); begin {$IFDEF MSWINDOWS} {$IFDEF FPC} sysutils.sleep(milliseconds); {$ELSE} windows.sleep(milliseconds); {$ENDIF} {$ELSE} sysutils.sleep(milliseconds); {$ENDIF} end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/synacode.pas�����������������������������������������������0000644�0001750�0000144�00000143160�15104114162�021644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 002.002.003 | |==============================================================================| | Content: Coding and decoding support | |==============================================================================| | Copyright (c)1999-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2000-2013. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(Various encoding and decoding support)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} {$TYPEDADDRESS OFF} {$IFDEF CIL} {$DEFINE SYNACODE_NATIVE} {$ENDIF} {$IFDEF FPC_BIG_ENDIAN} {$DEFINE SYNACODE_NATIVE} {$ENDIF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synacode; interface uses SysUtils; type TSpecials = set of AnsiChar; const SpecialChar: TSpecials = ['=', '(', ')', '[', ']', '<', '>', ':', ';', ',', '@', '/', '?', '\', '"', '_']; NonAsciiChar: TSpecials = [#0..#31, #127..#255]; URLFullSpecialChar: TSpecials = [';', '/', '?', ':', '@', '=', '&', '#', '+']; URLSpecialChar: TSpecials = [#$00..#$20, '<', '>', '"', '%', '{', '}', '|', '\', '^', '[', ']', '`', #$7F..#$FF]; TableBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; TableBase64mod = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,='; TableUU = '`!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'; TableXX = '+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; ReTablebase64 = #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$3E +#$40 +#$40 +#$40 +#$3F +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$01 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; ReTableUU = #$01 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$3E +#$3F +#$00 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; ReTableXX = #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$40 +#$01 +#$40 +#$40 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$3E +#$3F +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; {:Decodes triplet encoding with a given character delimiter. It is used for decoding quoted-printable or URL encoding.} function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; {:Decodes a string from quoted printable form. (also decodes triplet sequences like '=7F')} function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; {:Decodes a string of URL encoding. (also decodes triplet sequences like '%7F')} function DecodeURL(const Value: AnsiString): AnsiString; {:Performs triplet encoding with a given character delimiter. Used for encoding quoted-printable or URL encoding.} function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; Specials: TSpecials): AnsiString; {:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) are encoded.} function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; {:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) and @link(SpecialChar) are encoded.} function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; {:Encodes a string to URL format. Used for encoding data from a form field in HTTP, etc. (Encodes all critical characters including characters used as URL delimiters ('/',':', etc.)} function EncodeURLElement(const Value: AnsiString): AnsiString; {:Encodes a string to URL format. Used to encode critical characters in all URLs.} function EncodeURL(const Value: AnsiString): AnsiString; {:Decode 4to3 encoding with given table. If some element is not found in table, first item from table is used. This is good for buggy coded items by Microsoft Outlook. This software sometimes using wrong table for UUcode, where is used ' ' instead '`'.} function Decode4to3(const Value, Table: AnsiString): AnsiString; {:Decode 4to3 encoding with given REVERSE table. Using this function with reverse table is much faster then @link(Decode4to3). This function is used internally for Base64, UU or XX decoding.} function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; {:Encode by system 3to4 (used by Base64, UU coding, etc) by given table.} function Encode3to4(const Value, Table: AnsiString): AnsiString; {:Decode string from base64 format.} function DecodeBase64(const Value: AnsiString): AnsiString; {:Encodes a string to base64 format.} function EncodeBase64(const Value: AnsiString): AnsiString; {:Decode string from modified base64 format. (used in IMAP, for example.)} function DecodeBase64mod(const Value: AnsiString): AnsiString; {:Encodes a string to modified base64 format. (used in IMAP, for example.)} function EncodeBase64mod(const Value: AnsiString): AnsiString; {:Decodes a string from UUcode format.} function DecodeUU(const Value: AnsiString): AnsiString; {:encode UUcode. it encode only datas, you must also add header and footer for proper encode.} function EncodeUU(const Value: AnsiString): AnsiString; {:Decodes a string from XXcode format.} function DecodeXX(const Value: AnsiString): AnsiString; {:decode line with Yenc code. This code is sometimes used in newsgroups.} function DecodeYEnc(const Value: AnsiString): AnsiString; {:Returns a new CRC32 value after adding a new byte of data.} function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; {:return CRC32 from a value string.} function Crc32(const Value: AnsiString): Integer; {:Returns a new CRC16 value after adding a new byte of data.} function UpdateCrc16(Value: Byte; Crc16: Word): Word; {:return CRC16 from a value string.} function Crc16(const Value: AnsiString): Word; {:Returns a binary string with a RSA-MD5 hashing of "Value" string.} function MD5(const Value: AnsiString): AnsiString; {:Returns a binary string with HMAC-MD5 hash.} function HMAC_MD5(Text, Key: AnsiString): AnsiString; {:Returns a binary string with a RSA-MD5 hashing of string what is constructed by repeating "value" until length is "Len".} function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; {:Returns a binary string with a SHA-1 hashing of "Value" string.} function SHA1(const Value: AnsiString): AnsiString; {:Returns a binary string with HMAC-SHA1 hash.} function HMAC_SHA1(Text, Key: AnsiString): AnsiString; {:Returns a binary string with a SHA-1 hashing of string what is constructed by repeating "value" until length is "Len".} function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; {:Returns a binary string with a RSA-MD4 hashing of "Value" string.} function MD4(const Value: AnsiString): AnsiString; implementation const Crc32Tab: array[0..255] of Integer = ( Integer($00000000), Integer($77073096), Integer($EE0E612C), Integer($990951BA), Integer($076DC419), Integer($706AF48F), Integer($E963A535), Integer($9E6495A3), Integer($0EDB8832), Integer($79DCB8A4), Integer($E0D5E91E), Integer($97D2D988), Integer($09B64C2B), Integer($7EB17CBD), Integer($E7B82D07), Integer($90BF1D91), Integer($1DB71064), Integer($6AB020F2), Integer($F3B97148), Integer($84BE41DE), Integer($1ADAD47D), Integer($6DDDE4EB), Integer($F4D4B551), Integer($83D385C7), Integer($136C9856), Integer($646BA8C0), Integer($FD62F97A), Integer($8A65C9EC), Integer($14015C4F), Integer($63066CD9), Integer($FA0F3D63), Integer($8D080DF5), Integer($3B6E20C8), Integer($4C69105E), Integer($D56041E4), Integer($A2677172), Integer($3C03E4D1), Integer($4B04D447), Integer($D20D85FD), Integer($A50AB56B), Integer($35B5A8FA), Integer($42B2986C), Integer($DBBBC9D6), Integer($ACBCF940), Integer($32D86CE3), Integer($45DF5C75), Integer($DCD60DCF), Integer($ABD13D59), Integer($26D930AC), Integer($51DE003A), Integer($C8D75180), Integer($BFD06116), Integer($21B4F4B5), Integer($56B3C423), Integer($CFBA9599), Integer($B8BDA50F), Integer($2802B89E), Integer($5F058808), Integer($C60CD9B2), Integer($B10BE924), Integer($2F6F7C87), Integer($58684C11), Integer($C1611DAB), Integer($B6662D3D), Integer($76DC4190), Integer($01DB7106), Integer($98D220BC), Integer($EFD5102A), Integer($71B18589), Integer($06B6B51F), Integer($9FBFE4A5), Integer($E8B8D433), Integer($7807C9A2), Integer($0F00F934), Integer($9609A88E), Integer($E10E9818), Integer($7F6A0DBB), Integer($086D3D2D), Integer($91646C97), Integer($E6635C01), Integer($6B6B51F4), Integer($1C6C6162), Integer($856530D8), Integer($F262004E), Integer($6C0695ED), Integer($1B01A57B), Integer($8208F4C1), Integer($F50FC457), Integer($65B0D9C6), Integer($12B7E950), Integer($8BBEB8EA), Integer($FCB9887C), Integer($62DD1DDF), Integer($15DA2D49), Integer($8CD37CF3), Integer($FBD44C65), Integer($4DB26158), Integer($3AB551CE), Integer($A3BC0074), Integer($D4BB30E2), Integer($4ADFA541), Integer($3DD895D7), Integer($A4D1C46D), Integer($D3D6F4FB), Integer($4369E96A), Integer($346ED9FC), Integer($AD678846), Integer($DA60B8D0), Integer($44042D73), Integer($33031DE5), Integer($AA0A4C5F), Integer($DD0D7CC9), Integer($5005713C), Integer($270241AA), Integer($BE0B1010), Integer($C90C2086), Integer($5768B525), Integer($206F85B3), Integer($B966D409), Integer($CE61E49F), Integer($5EDEF90E), Integer($29D9C998), Integer($B0D09822), Integer($C7D7A8B4), Integer($59B33D17), Integer($2EB40D81), Integer($B7BD5C3B), Integer($C0BA6CAD), Integer($EDB88320), Integer($9ABFB3B6), Integer($03B6E20C), Integer($74B1D29A), Integer($EAD54739), Integer($9DD277AF), Integer($04DB2615), Integer($73DC1683), Integer($E3630B12), Integer($94643B84), Integer($0D6D6A3E), Integer($7A6A5AA8), Integer($E40ECF0B), Integer($9309FF9D), Integer($0A00AE27), Integer($7D079EB1), Integer($F00F9344), Integer($8708A3D2), Integer($1E01F268), Integer($6906C2FE), Integer($F762575D), Integer($806567CB), Integer($196C3671), Integer($6E6B06E7), Integer($FED41B76), Integer($89D32BE0), Integer($10DA7A5A), Integer($67DD4ACC), Integer($F9B9DF6F), Integer($8EBEEFF9), Integer($17B7BE43), Integer($60B08ED5), Integer($D6D6A3E8), Integer($A1D1937E), Integer($38D8C2C4), Integer($4FDFF252), Integer($D1BB67F1), Integer($A6BC5767), Integer($3FB506DD), Integer($48B2364B), Integer($D80D2BDA), Integer($AF0A1B4C), Integer($36034AF6), Integer($41047A60), Integer($DF60EFC3), Integer($A867DF55), Integer($316E8EEF), Integer($4669BE79), Integer($CB61B38C), Integer($BC66831A), Integer($256FD2A0), Integer($5268E236), Integer($CC0C7795), Integer($BB0B4703), Integer($220216B9), Integer($5505262F), Integer($C5BA3BBE), Integer($B2BD0B28), Integer($2BB45A92), Integer($5CB36A04), Integer($C2D7FFA7), Integer($B5D0CF31), Integer($2CD99E8B), Integer($5BDEAE1D), Integer($9B64C2B0), Integer($EC63F226), Integer($756AA39C), Integer($026D930A), Integer($9C0906A9), Integer($EB0E363F), Integer($72076785), Integer($05005713), Integer($95BF4A82), Integer($E2B87A14), Integer($7BB12BAE), Integer($0CB61B38), Integer($92D28E9B), Integer($E5D5BE0D), Integer($7CDCEFB7), Integer($0BDBDF21), Integer($86D3D2D4), Integer($F1D4E242), Integer($68DDB3F8), Integer($1FDA836E), Integer($81BE16CD), Integer($F6B9265B), Integer($6FB077E1), Integer($18B74777), Integer($88085AE6), Integer($FF0F6A70), Integer($66063BCA), Integer($11010B5C), Integer($8F659EFF), Integer($F862AE69), Integer($616BFFD3), Integer($166CCF45), Integer($A00AE278), Integer($D70DD2EE), Integer($4E048354), Integer($3903B3C2), Integer($A7672661), Integer($D06016F7), Integer($4969474D), Integer($3E6E77DB), Integer($AED16A4A), Integer($D9D65ADC), Integer($40DF0B66), Integer($37D83BF0), Integer($A9BCAE53), Integer($DEBB9EC5), Integer($47B2CF7F), Integer($30B5FFE9), Integer($BDBDF21C), Integer($CABAC28A), Integer($53B39330), Integer($24B4A3A6), Integer($BAD03605), Integer($CDD70693), Integer($54DE5729), Integer($23D967BF), Integer($B3667A2E), Integer($C4614AB8), Integer($5D681B02), Integer($2A6F2B94), Integer($B40BBE37), Integer($C30C8EA1), Integer($5A05DF1B), Integer($2D02EF8D) ); Crc16Tab: array[0..255] of Word = ( $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 ); procedure ArrByteToLong(var ArByte: Array of byte; var ArLong: Array of Integer); {$IFDEF SYNACODE_NATIVE} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) > ((High(ArLong) + 1) * 4) then Exit; {$IFDEF SYNACODE_NATIVE} for n := 0 to ((high(ArByte) + 1) div 4) - 1 do ArLong[n] := ArByte[n * 4 + 0] + (ArByte[n * 4 + 1] shl 8) + (ArByte[n * 4 + 2] shl 16) + (ArByte[n * 4 + 3] shl 24); {$ELSE} Move(ArByte[0], ArLong[0], High(ArByte) + 1); {$ENDIF} end; procedure ArrLongToByte(var ArLong: Array of Integer; var ArByte: Array of byte); {$IFDEF SYNACODE_NATIVE} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) < ((High(ArLong) + 1) * 4) then Exit; {$IFDEF SYNACODE_NATIVE} for n := 0 to high(ArLong) do begin ArByte[n * 4 + 0] := ArLong[n] and $000000FF; ArByte[n * 4 + 1] := (ArLong[n] shr 8) and $000000FF; ArByte[n * 4 + 2] := (ArLong[n] shr 16) and $000000FF; ArByte[n * 4 + 3] := (ArLong[n] shr 24) and $000000FF; end; {$ELSE} Move(ArLong[0], ArByte[0], High(ArByte) + 1); {$ENDIF} end; type TMDCtx = record State: array[0..3] of Integer; Count: array[0..1] of Integer; BufAnsiChar: array[0..63] of Byte; BufLong: array[0..15] of Integer; end; TSHA1Ctx= record Hi, Lo: integer; Buffer: array[0..63] of byte; Index: integer; Hash: array[0..4] of Integer; HashByte: array[0..19] of byte; end; TMDTransform = procedure(var Buf: array of LongInt; const Data: array of LongInt); {==============================================================================} function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; var x, l, lv: Integer; c: AnsiChar; b: Byte; bad: Boolean; begin lv := Length(Value); SetLength(Result, lv); x := 1; l := 1; while x <= lv do begin c := Value[x]; Inc(x); if c <> Delimiter then begin Result[l] := c; Inc(l); end else if x < lv then begin Case Value[x] Of #13: if (Value[x + 1] = #10) then Inc(x, 2) else Inc(x); #10: if (Value[x + 1] = #13) then Inc(x, 2) else Inc(x); else begin bad := False; Case Value[x] Of '0'..'9': b := (Byte(Value[x]) - 48) Shl 4; 'a'..'f', 'A'..'F': b := ((Byte(Value[x]) And 7) + 9) shl 4; else begin b := 0; bad := True; end; end; Case Value[x + 1] Of '0'..'9': b := b Or (Byte(Value[x + 1]) - 48); 'a'..'f', 'A'..'F': b := b Or ((Byte(Value[x + 1]) And 7) + 9); else bad := True; end; if bad then begin Result[l] := c; Inc(l); end else begin Inc(x, 2); Result[l] := AnsiChar(b); Inc(l); end; end; end; end else break; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := DecodeTriplet(Value, '='); end; {==============================================================================} function DecodeURL(const Value: AnsiString): AnsiString; begin Result := DecodeTriplet(Value, '%'); end; {==============================================================================} function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; Specials: TSpecials): AnsiString; var n, l: Integer; s: AnsiString; c: AnsiChar; begin SetLength(Result, Length(Value) * 3); l := 1; for n := 1 to Length(Value) do begin c := Value[n]; if c in Specials then begin Result[l] := Delimiter; Inc(l); s := IntToHex(Ord(c), 2); Result[l] := s[1]; Inc(l); Result[l] := s[2]; Inc(l); end else begin Result[l] := c; Inc(l); end; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', ['='] + NonAsciiChar); end; {==============================================================================} function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', SpecialChar + NonAsciiChar); end; {==============================================================================} function EncodeURLElement(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '%', URLSpecialChar + URLFullSpecialChar); end; {==============================================================================} function EncodeURL(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '%', URLSpecialChar); end; {==============================================================================} function Decode4to3(const Value, Table: AnsiString): AnsiString; var x, y, n, l: Integer; d: array[0..3] of Byte; begin SetLength(Result, Length(Value)); x := 1; l := 1; while x <= Length(Value) do begin for n := 0 to 3 do begin if x > Length(Value) then d[n] := 64 else begin y := Pos(Value[x], Table); if y < 1 then y := 1; d[n] := y - 1; end; Inc(x); end; Result[l] := AnsiChar((D[0] and $3F) shl 2 + (D[1] and $30) shr 4); Inc(l); if d[2] <> 64 then begin Result[l] := AnsiChar((D[1] and $0F) shl 4 + (D[2] and $3C) shr 2); Inc(l); if d[3] <> 64 then begin Result[l] := AnsiChar((D[2] and $03) shl 6 + (D[3] and $3F)); Inc(l); end; end; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; var x, y, lv: Integer; d: integer; dl: integer; c: byte; p: integer; begin lv := Length(Value); SetLength(Result, lv); x := 1; dl := 4; d := 0; p := 1; while x <= lv do begin y := Ord(Value[x]); if y in [33..127] then c := Ord(Table[y - 32]) else c := 64; Inc(x); if c > 63 then continue; d := (d shl 6) or c; dec(dl); if dl <> 0 then continue; Result[p] := AnsiChar((d shr 16) and $ff); inc(p); Result[p] := AnsiChar((d shr 8) and $ff); inc(p); Result[p] := AnsiChar(d and $ff); inc(p); d := 0; dl := 4; end; case dl of 1: begin d := d shr 2; Result[p] := AnsiChar((d shr 8) and $ff); inc(p); Result[p] := AnsiChar(d and $ff); inc(p); end; 2: begin d := d shr 4; Result[p] := AnsiChar(d and $ff); inc(p); end; end; SetLength(Result, p - 1); end; {==============================================================================} function Encode3to4(const Value, Table: AnsiString): AnsiString; var c: Byte; n, l: Integer; Count: Integer; DOut: array[0..3] of Byte; begin setlength(Result, ((Length(Value) + 2) div 3) * 4); l := 1; Count := 1; while Count <= Length(Value) do begin c := Ord(Value[Count]); Inc(Count); DOut[0] := (c and $FC) shr 2; DOut[1] := (c and $03) shl 4; if Count <= Length(Value) then begin c := Ord(Value[Count]); Inc(Count); DOut[1] := DOut[1] + (c and $F0) shr 4; DOut[2] := (c and $0F) shl 2; if Count <= Length(Value) then begin c := Ord(Value[Count]); Inc(Count); DOut[2] := DOut[2] + (c and $C0) shr 6; DOut[3] := (c and $3F); end else begin DOut[3] := $40; end; end else begin DOut[2] := $40; DOut[3] := $40; end; for n := 0 to 3 do begin if (DOut[n] + 1) <= Length(Table) then begin Result[l] := Table[DOut[n] + 1]; Inc(l); end; end; end; SetLength(Result, l - 1); end; {==============================================================================} function DecodeBase64(const Value: AnsiString): AnsiString; begin Result := Decode4to3Ex(Value, ReTableBase64); end; {==============================================================================} function EncodeBase64(const Value: AnsiString): AnsiString; begin Result := Encode3to4(Value, TableBase64); end; {==============================================================================} function DecodeBase64mod(const Value: AnsiString): AnsiString; begin Result := Decode4to3(Value, TableBase64mod); end; {==============================================================================} function EncodeBase64mod(const Value: AnsiString): AnsiString; begin Result := Encode3to4(Value, TableBase64mod); end; {==============================================================================} function DecodeUU(const Value: AnsiString): AnsiString; var s: AnsiString; uut: AnsiString; x: Integer; begin Result := ''; uut := TableUU; s := trim(UpperCase(Value)); if s = '' then Exit; if Pos('BEGIN', s) = 1 then Exit; if Pos('END', s) = 1 then Exit; if Pos('TABLE', s) = 1 then Exit; //ignore Table yet (set custom UUT) //begin decoding x := Pos(Value[1], uut) - 1; case (x mod 3) of 0: x :=(x div 3)* 4; 1: x :=((x div 3) * 4) + 2; 2: x :=((x div 3) * 4) + 3; end; //x - lenght UU line s := Copy(Value, 2, x); if s = '' then Exit; s := s + StringOfChar(' ', x - length(s)); Result := Decode4to3(s, uut); end; {==============================================================================} function EncodeUU(const Value: AnsiString): AnsiString; begin Result := ''; if Length(Value) < Length(TableUU) then Result := TableUU[Length(Value) + 1] + Encode3to4(Value, TableUU); end; {==============================================================================} function DecodeXX(const Value: AnsiString): AnsiString; var s: AnsiString; x: Integer; begin Result := ''; s := trim(UpperCase(Value)); if s = '' then Exit; if Pos('BEGIN', s) = 1 then Exit; if Pos('END', s) = 1 then Exit; //begin decoding x := Pos(Value[1], TableXX) - 1; case (x mod 3) of 0: x :=(x div 3)* 4; 1: x :=((x div 3) * 4) + 2; 2: x :=((x div 3) * 4) + 3; end; //x - lenght XX line s := Copy(Value, 2, x); if s = '' then Exit; s := s + StringOfChar(' ', x - length(s)); Result := Decode4to3(s, TableXX); end; {==============================================================================} function DecodeYEnc(const Value: AnsiString): AnsiString; var C : Byte; i: integer; begin Result := ''; i := 1; while i <= Length(Value) do begin c := Ord(Value[i]); Inc(i); if c = Ord('=') then begin c := Ord(Value[i]); Inc(i); Dec(c, 64); end; Dec(C, 42); Result := Result + AnsiChar(C); end; end; {==============================================================================} function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; begin Result := (Crc32 shr 8) xor crc32tab[Byte(Value xor (Crc32 and Integer($000000FF)))]; end; {==============================================================================} function Crc32(const Value: AnsiString): Integer; var n: Integer; begin Result := Integer($FFFFFFFF); for n := 1 to Length(Value) do Result := UpdateCrc32(Ord(Value[n]), Result); Result := not Result; end; {==============================================================================} function UpdateCrc16(Value: Byte; Crc16: Word): Word; begin Result := ((Crc16 shr 8) and $00FF) xor crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)]; end; {==============================================================================} function Crc16(const Value: AnsiString): Word; var n: Integer; begin Result := $FFFF; for n := 1 to Length(Value) do Result := UpdateCrc16(Ord(Value[n]), Result); end; {==============================================================================} procedure MDInit(var MDContext: TMDCtx); var n: integer; begin MDContext.Count[0] := 0; MDContext.Count[1] := 0; for n := 0 to high(MDContext.BufAnsiChar) do MDContext.BufAnsiChar[n] := 0; for n := 0 to high(MDContext.BufLong) do MDContext.BufLong[n] := 0; MDContext.State[0] := Integer($67452301); MDContext.State[1] := Integer($EFCDAB89); MDContext.State[2] := Integer($98BADCFE); MDContext.State[3] := Integer($10325476); end; procedure MD5Transform(var Buf: array of LongInt; const Data: array of LongInt); var A, B, C, D: LongInt; procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Z xor (X and (Y xor Z))) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Y xor (Z and (X xor Y))) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (X xor Y xor Z) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Y xor (X or not Z)) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; begin A := Buf[0]; B := Buf[1]; C := Buf[2]; D := Buf[3]; Round1(A, B, C, D, Data[0] + Longint($D76AA478), 7); Round1(D, A, B, C, Data[1] + Longint($E8C7B756), 12); Round1(C, D, A, B, Data[2] + Longint($242070DB), 17); Round1(B, C, D, A, Data[3] + Longint($C1BDCEEE), 22); Round1(A, B, C, D, Data[4] + Longint($F57C0FAF), 7); Round1(D, A, B, C, Data[5] + Longint($4787C62A), 12); Round1(C, D, A, B, Data[6] + Longint($A8304613), 17); Round1(B, C, D, A, Data[7] + Longint($FD469501), 22); Round1(A, B, C, D, Data[8] + Longint($698098D8), 7); Round1(D, A, B, C, Data[9] + Longint($8B44F7AF), 12); Round1(C, D, A, B, Data[10] + Longint($FFFF5BB1), 17); Round1(B, C, D, A, Data[11] + Longint($895CD7BE), 22); Round1(A, B, C, D, Data[12] + Longint($6B901122), 7); Round1(D, A, B, C, Data[13] + Longint($FD987193), 12); Round1(C, D, A, B, Data[14] + Longint($A679438E), 17); Round1(B, C, D, A, Data[15] + Longint($49B40821), 22); Round2(A, B, C, D, Data[1] + Longint($F61E2562), 5); Round2(D, A, B, C, Data[6] + Longint($C040B340), 9); Round2(C, D, A, B, Data[11] + Longint($265E5A51), 14); Round2(B, C, D, A, Data[0] + Longint($E9B6C7AA), 20); Round2(A, B, C, D, Data[5] + Longint($D62F105D), 5); Round2(D, A, B, C, Data[10] + Longint($02441453), 9); Round2(C, D, A, B, Data[15] + Longint($D8A1E681), 14); Round2(B, C, D, A, Data[4] + Longint($E7D3FBC8), 20); Round2(A, B, C, D, Data[9] + Longint($21E1CDE6), 5); Round2(D, A, B, C, Data[14] + Longint($C33707D6), 9); Round2(C, D, A, B, Data[3] + Longint($F4D50D87), 14); Round2(B, C, D, A, Data[8] + Longint($455A14ED), 20); Round2(A, B, C, D, Data[13] + Longint($A9E3E905), 5); Round2(D, A, B, C, Data[2] + Longint($FCEFA3F8), 9); Round2(C, D, A, B, Data[7] + Longint($676F02D9), 14); Round2(B, C, D, A, Data[12] + Longint($8D2A4C8A), 20); Round3(A, B, C, D, Data[5] + Longint($FFFA3942), 4); Round3(D, A, B, C, Data[8] + Longint($8771F681), 11); Round3(C, D, A, B, Data[11] + Longint($6D9D6122), 16); Round3(B, C, D, A, Data[14] + Longint($FDE5380C), 23); Round3(A, B, C, D, Data[1] + Longint($A4BEEA44), 4); Round3(D, A, B, C, Data[4] + Longint($4BDECFA9), 11); Round3(C, D, A, B, Data[7] + Longint($F6BB4B60), 16); Round3(B, C, D, A, Data[10] + Longint($BEBFBC70), 23); Round3(A, B, C, D, Data[13] + Longint($289B7EC6), 4); Round3(D, A, B, C, Data[0] + Longint($EAA127FA), 11); Round3(C, D, A, B, Data[3] + Longint($D4EF3085), 16); Round3(B, C, D, A, Data[6] + Longint($04881D05), 23); Round3(A, B, C, D, Data[9] + Longint($D9D4D039), 4); Round3(D, A, B, C, Data[12] + Longint($E6DB99E5), 11); Round3(C, D, A, B, Data[15] + Longint($1FA27CF8), 16); Round3(B, C, D, A, Data[2] + Longint($C4AC5665), 23); Round4(A, B, C, D, Data[0] + Longint($F4292244), 6); Round4(D, A, B, C, Data[7] + Longint($432AFF97), 10); Round4(C, D, A, B, Data[14] + Longint($AB9423A7), 15); Round4(B, C, D, A, Data[5] + Longint($FC93A039), 21); Round4(A, B, C, D, Data[12] + Longint($655B59C3), 6); Round4(D, A, B, C, Data[3] + Longint($8F0CCC92), 10); Round4(C, D, A, B, Data[10] + Longint($FFEFF47D), 15); Round4(B, C, D, A, Data[1] + Longint($85845DD1), 21); Round4(A, B, C, D, Data[8] + Longint($6FA87E4F), 6); Round4(D, A, B, C, Data[15] + Longint($FE2CE6E0), 10); Round4(C, D, A, B, Data[6] + Longint($A3014314), 15); Round4(B, C, D, A, Data[13] + Longint($4E0811A1), 21); Round4(A, B, C, D, Data[4] + Longint($F7537E82), 6); Round4(D, A, B, C, Data[11] + Longint($BD3AF235), 10); Round4(C, D, A, B, Data[2] + Longint($2AD7D2BB), 15); Round4(B, C, D, A, Data[9] + Longint($EB86D391), 21); Inc(Buf[0], A); Inc(Buf[1], B); Inc(Buf[2], C); Inc(Buf[3], D); end; //fixed by James McAdams procedure MDUpdate(var MDContext: TMDCtx; const Data: AnsiString; transform: TMDTransform); var Index, partLen, InputLen, I: integer; {$IFDEF SYNACODE_NATIVE} n: integer; {$ENDIF} begin InputLen := Length(Data); with MDContext do begin Index := (Count[0] shr 3) and $3F; Inc(Count[0], InputLen shl 3); if Count[0] < (InputLen shl 3) then Inc(Count[1]); Inc(Count[1], InputLen shr 29); partLen := 64 - Index; if InputLen >= partLen then begin ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF SYNACODE_NATIVE} for n := 1 to partLen do BufAnsiChar[index - 1 + n] := Ord(Data[n]); {$ELSE} Move(Data[1], BufAnsiChar[Index], partLen); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); Transform(State, Buflong); I := partLen; while I + 63 < InputLen do begin ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF SYNACODE_NATIVE} for n := 1 to 64 do BufAnsiChar[n - 1] := Ord(Data[i + n]); {$ELSE} Move(Data[I+1], BufAnsiChar, 64); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); Transform(State, Buflong); inc(I, 64); end; Index := 0; end else I := 0; ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF SYNACODE_NATIVE} for n := 1 to InputLen-I do BufAnsiChar[Index + n - 1] := Ord(Data[i + n]); {$ELSE} Move(Data[I+1], BufAnsiChar[Index], InputLen-I); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); end end; function MDFinal(var MDContext: TMDCtx; transform: TMDTransform): AnsiString; var Cnt: Word; P: Byte; digest: array[0..15] of Byte; i: Integer; n: integer; begin for I := 0 to 15 do Digest[I] := I + 1; with MDContext do begin Cnt := (Count[0] shr 3) and $3F; P := Cnt; BufAnsiChar[P] := $80; Inc(P); Cnt := 64 - 1 - Cnt; if Cnt < 8 then begin for n := 0 to cnt - 1 do BufAnsiChar[P + n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar[P], Cnt, #0); Transform(State, BufLong); ArrLongToByte(BufLong, BufAnsiChar); for n := 0 to 55 do BufAnsiChar[n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar, 56, #0); end else begin for n := 0 to Cnt - 8 - 1 do BufAnsiChar[p + n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar[P], Cnt - 8, #0); end; BufLong[14] := Count[0]; BufLong[15] := Count[1]; Transform(State, BufLong); ArrLongToByte(State, Digest); // Move(State, Digest, 16); Result := ''; for i := 0 to 15 do Result := Result + AnsiChar(digest[i]); end; // FillChar(MD5Context, SizeOf(TMD5Ctx), #0) end; {==============================================================================} function MD5(const Value: AnsiString): AnsiString; var MDContext: TMDCtx; begin MDInit(MDContext); MDUpdate(MDContext, Value, @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} function HMAC_MD5(Text, Key: AnsiString): AnsiString; var ipad, opad, s: AnsiString; n: Integer; MDContext: TMDCtx; begin if Length(Key) > 64 then Key := md5(Key); ipad := StringOfChar(#$36, 64); opad := StringOfChar(#$5C, 64); for n := 1 to Length(Key) do begin ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); end; MDInit(MDContext); MDUpdate(MDContext, ipad, @MD5Transform); MDUpdate(MDContext, Text, @MD5Transform); s := MDFinal(MDContext, @MD5Transform); MDInit(MDContext); MDUpdate(MDContext, opad, @MD5Transform); MDUpdate(MDContext, s, @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; var cnt, rest: integer; l: integer; n: integer; MDContext: TMDCtx; begin l := length(Value); cnt := Len div l; rest := Len mod l; MDInit(MDContext); for n := 1 to cnt do MDUpdate(MDContext, Value, @MD5Transform); if rest > 0 then MDUpdate(MDContext, Copy(Value, 1, rest), @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} // SHA1 is based on sources by Dave Barton (davebarton@bigfoot.com) procedure SHA1init( var SHA1Context: TSHA1Ctx ); var n: integer; begin SHA1Context.Hi := 0; SHA1Context.Lo := 0; SHA1Context.Index := 0; for n := 0 to High(SHA1Context.Buffer) do SHA1Context.Buffer[n] := 0; for n := 0 to High(SHA1Context.HashByte) do SHA1Context.HashByte[n] := 0; // FillChar(SHA1Context, SizeOf(TSHA1Ctx), #0); SHA1Context.Hash[0] := integer($67452301); SHA1Context.Hash[1] := integer($EFCDAB89); SHA1Context.Hash[2] := integer($98BADCFE); SHA1Context.Hash[3] := integer($10325476); SHA1Context.Hash[4] := integer($C3D2E1F0); end; //****************************************************************************** function RB(A: integer): integer; begin Result := (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24); end; procedure SHA1Compress(var Data: TSHA1Ctx); var A, B, C, D, E, T: integer; W: array[0..79] of integer; i: integer; n: integer; function F1(x, y, z: integer): integer; begin Result := z xor (x and (y xor z)); end; function F2(x, y, z: integer): integer; begin Result := x xor y xor z; end; function F3(x, y, z: integer): integer; begin Result := (x and y) or (z and (x or y)); end; function LRot32(X: integer; c: integer): integer; begin result := (x shl c) or (x shr (32 - c)); end; begin ArrByteToLong(Data.Buffer, W); // Move(Data.Buffer, W, Sizeof(Data.Buffer)); for i := 0 to 15 do W[i] := RB(W[i]); for i := 16 to 79 do W[i] := LRot32(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16], 1); A := Data.Hash[0]; B := Data.Hash[1]; C := Data.Hash[2]; D := Data.Hash[3]; E := Data.Hash[4]; for i := 0 to 19 do begin T := LRot32(A, 5) + F1(B, C, D) + E + W[i] + integer($5A827999); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 20 to 39 do begin T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($6ED9EBA1); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 40 to 59 do begin T := LRot32(A, 5) + F3(B, C, D) + E + W[i] + integer($8F1BBCDC); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 60 to 79 do begin T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($CA62C1D6); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; Data.Hash[0] := Data.Hash[0] + A; Data.Hash[1] := Data.Hash[1] + B; Data.Hash[2] := Data.Hash[2] + C; Data.Hash[3] := Data.Hash[3] + D; Data.Hash[4] := Data.Hash[4] + E; for n := 0 to high(w) do w[n] := 0; // FillChar(W, Sizeof(W), 0); for n := 0 to high(Data.Buffer) do Data.Buffer[n] := 0; // FillChar(Data.Buffer, Sizeof(Data.Buffer), 0); end; //****************************************************************************** procedure SHA1Update(var Context: TSHA1Ctx; const Data: AnsiString); var Len: integer; n: integer; i, k: integer; begin Len := Length(data); for k := 0 to 7 do begin i := Context.Lo; Inc(Context.Lo, Len); if Context.Lo < i then Inc(Context.Hi); end; for n := 1 to len do begin Context.Buffer[Context.Index] := byte(Data[n]); Inc(Context.Index); if Context.Index = 64 then begin Context.Index := 0; SHA1Compress(Context); end; end; end; //****************************************************************************** function SHA1Final(var Context: TSHA1Ctx): AnsiString; type Pinteger = ^integer; var i: integer; procedure ItoArr(var Ar: Array of byte; I, value: Integer); begin Ar[i + 0] := Value and $000000FF; Ar[i + 1] := (Value shr 8) and $000000FF; Ar[i + 2] := (Value shr 16) and $000000FF; Ar[i + 3] := (Value shr 24) and $000000FF; end; begin Context.Buffer[Context.Index] := $80; if Context.Index >= 56 then SHA1Compress(Context); ItoArr(Context.Buffer, 56, RB(Context.Hi)); ItoArr(Context.Buffer, 60, RB(Context.Lo)); // Pinteger(@Context.Buffer[56])^ := RB(Context.Hi); // Pinteger(@Context.Buffer[60])^ := RB(Context.Lo); SHA1Compress(Context); Context.Hash[0] := RB(Context.Hash[0]); Context.Hash[1] := RB(Context.Hash[1]); Context.Hash[2] := RB(Context.Hash[2]); Context.Hash[3] := RB(Context.Hash[3]); Context.Hash[4] := RB(Context.Hash[4]); ArrLongToByte(Context.Hash, Context.HashByte); Result := ''; for i := 0 to 19 do Result := Result + AnsiChar(Context.HashByte[i]); end; function SHA1(const Value: AnsiString): AnsiString; var SHA1Context: TSHA1Ctx; begin SHA1Init(SHA1Context); SHA1Update(SHA1Context, Value); Result := SHA1Final(SHA1Context); end; {==============================================================================} function HMAC_SHA1(Text, Key: AnsiString): AnsiString; var ipad, opad, s: AnsiString; n: Integer; SHA1Context: TSHA1Ctx; begin if Length(Key) > 64 then Key := SHA1(Key); ipad := StringOfChar(#$36, 64); opad := StringOfChar(#$5C, 64); for n := 1 to Length(Key) do begin ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); end; SHA1Init(SHA1Context); SHA1Update(SHA1Context, ipad); SHA1Update(SHA1Context, Text); s := SHA1Final(SHA1Context); SHA1Init(SHA1Context); SHA1Update(SHA1Context, opad); SHA1Update(SHA1Context, s); Result := SHA1Final(SHA1Context); end; {==============================================================================} function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; var cnt, rest: integer; l: integer; n: integer; SHA1Context: TSHA1Ctx; begin l := length(Value); cnt := Len div l; rest := Len mod l; SHA1Init(SHA1Context); for n := 1 to cnt do SHA1Update(SHA1Context, Value); if rest > 0 then SHA1Update(SHA1Context, Copy(Value, 1, rest)); Result := SHA1Final(SHA1Context); end; {==============================================================================} procedure MD4Transform(var Buf: array of LongInt; const Data: array of LongInt); var A, B, C, D: LongInt; function LRot32(a, b: longint): longint; begin Result:= (a shl b) or (a shr (32 - b)); end; begin A := Buf[0]; B := Buf[1]; C := Buf[2]; D := Buf[3]; A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 0], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 1], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 2], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 3], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 4], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 5], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 6], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 7], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 8], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 9], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[10], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[11], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[12], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[13], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[14], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[15], 19); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 0] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 4] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 8] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[12] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 1] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 5] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 9] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[13] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 2] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 6] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[10] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[14] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 3] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 7] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[11] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[15] + longint($5a827999), 13); A:= LRot32(A + (B xor C xor D) + Data[ 0] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[ 8] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 4] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[12] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 2] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[10] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 6] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[14] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 1] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[ 9] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 5] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[13] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 3] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[11] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 7] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[15] + longint($6ed9eba1), 15); Inc(Buf[0], A); Inc(Buf[1], B); Inc(Buf[2], C); Inc(Buf[3], D); end; {==============================================================================} function MD4(const Value: AnsiString): AnsiString; var MDContext: TMDCtx; begin MDInit(MDContext); MDUpdate(MDContext, Value, @MD4Transform); Result := MDFinal(MDContext, @MD4Transform); end; {==============================================================================} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/sswin32.inc������������������������������������������������0000644�0001750�0000144�00000154707�15104114162�021346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 002.003.001 | |==============================================================================| | Content: Socket Independent Platform Layer - Win32/64 definition include | |==============================================================================| | Copyright (c)1999-2012, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2003-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} //{$DEFINE WINSOCK1} {Note about define WINSOCK1: If you activate this compiler directive, then socket interface level 1.1 is used instead default level 2.2. Level 2.2 is not available on old W95, however you can install update. } //{$DEFINE FORCEOLDAPI} {Note about define FORCEOLDAPI: If you activate this compiler directive, then is allways used old socket API for name resolution. If you leave this directive inactive, then the new API is used, when running system allows it. For IPv6 support you must have new API! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} (*$HPPEMIT '/* EDE 2003-02-19 */' *) (*$HPPEMIT 'namespace Synsock { using System::Shortint; }' *) (*$HPPEMIT '#undef h_addr' *) (*$HPPEMIT '#undef IOCPARM_MASK' *) (*$HPPEMIT '#undef FD_SETSIZE' *) (*$HPPEMIT '#undef IOC_VOID' *) (*$HPPEMIT '#undef IOC_OUT' *) (*$HPPEMIT '#undef IOC_IN' *) (*$HPPEMIT '#undef IOC_INOUT' *) (*$HPPEMIT '#undef FIONREAD' *) (*$HPPEMIT '#undef FIONBIO' *) (*$HPPEMIT '#undef FIOASYNC' *) (*$HPPEMIT '#undef IPPROTO_IP' *) (*$HPPEMIT '#undef IPPROTO_ICMP' *) (*$HPPEMIT '#undef IPPROTO_IGMP' *) (*$HPPEMIT '#undef IPPROTO_TCP' *) (*$HPPEMIT '#undef IPPROTO_UDP' *) (*$HPPEMIT '#undef IPPROTO_RAW' *) (*$HPPEMIT '#undef IPPROTO_MAX' *) (*$HPPEMIT '#undef INADDR_ANY' *) (*$HPPEMIT '#undef INADDR_LOOPBACK' *) (*$HPPEMIT '#undef INADDR_BROADCAST' *) (*$HPPEMIT '#undef INADDR_NONE' *) (*$HPPEMIT '#undef INVALID_SOCKET' *) (*$HPPEMIT '#undef SOCKET_ERROR' *) (*$HPPEMIT '#undef WSADESCRIPTION_LEN' *) (*$HPPEMIT '#undef WSASYS_STATUS_LEN' *) (*$HPPEMIT '#undef IP_OPTIONS' *) (*$HPPEMIT '#undef IP_TOS' *) (*$HPPEMIT '#undef IP_TTL' *) (*$HPPEMIT '#undef IP_MULTICAST_IF' *) (*$HPPEMIT '#undef IP_MULTICAST_TTL' *) (*$HPPEMIT '#undef IP_MULTICAST_LOOP' *) (*$HPPEMIT '#undef IP_ADD_MEMBERSHIP' *) (*$HPPEMIT '#undef IP_DROP_MEMBERSHIP' *) (*$HPPEMIT '#undef IP_DONTFRAGMENT' *) (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_TTL' *) (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_LOOP' *) (*$HPPEMIT '#undef IP_MAX_MEMBERSHIPS' *) (*$HPPEMIT '#undef SOL_SOCKET' *) (*$HPPEMIT '#undef SO_DEBUG' *) (*$HPPEMIT '#undef SO_ACCEPTCONN' *) (*$HPPEMIT '#undef SO_REUSEADDR' *) (*$HPPEMIT '#undef SO_KEEPALIVE' *) (*$HPPEMIT '#undef SO_DONTROUTE' *) (*$HPPEMIT '#undef SO_BROADCAST' *) (*$HPPEMIT '#undef SO_USELOOPBACK' *) (*$HPPEMIT '#undef SO_LINGER' *) (*$HPPEMIT '#undef SO_OOBINLINE' *) (*$HPPEMIT '#undef SO_DONTLINGER' *) (*$HPPEMIT '#undef SO_SNDBUF' *) (*$HPPEMIT '#undef SO_RCVBUF' *) (*$HPPEMIT '#undef SO_SNDLOWAT' *) (*$HPPEMIT '#undef SO_RCVLOWAT' *) (*$HPPEMIT '#undef SO_SNDTIMEO' *) (*$HPPEMIT '#undef SO_RCVTIMEO' *) (*$HPPEMIT '#undef SO_ERROR' *) (*$HPPEMIT '#undef SO_OPENTYPE' *) (*$HPPEMIT '#undef SO_SYNCHRONOUS_ALERT' *) (*$HPPEMIT '#undef SO_SYNCHRONOUS_NONALERT' *) (*$HPPEMIT '#undef SO_MAXDG' *) (*$HPPEMIT '#undef SO_MAXPATHDG' *) (*$HPPEMIT '#undef SO_UPDATE_ACCEPT_CONTEXT' *) (*$HPPEMIT '#undef SO_CONNECT_TIME' *) (*$HPPEMIT '#undef SO_TYPE' *) (*$HPPEMIT '#undef SOCK_STREAM' *) (*$HPPEMIT '#undef SOCK_DGRAM' *) (*$HPPEMIT '#undef SOCK_RAW' *) (*$HPPEMIT '#undef SOCK_RDM' *) (*$HPPEMIT '#undef SOCK_SEQPACKET' *) (*$HPPEMIT '#undef TCP_NODELAY' *) (*$HPPEMIT '#undef AF_UNSPEC' *) (*$HPPEMIT '#undef SOMAXCONN' *) (*$HPPEMIT '#undef AF_INET' *) (*$HPPEMIT '#undef AF_MAX' *) (*$HPPEMIT '#undef PF_UNSPEC' *) (*$HPPEMIT '#undef PF_INET' *) (*$HPPEMIT '#undef PF_MAX' *) (*$HPPEMIT '#undef MSG_OOB' *) (*$HPPEMIT '#undef MSG_PEEK' *) (*$HPPEMIT '#undef WSABASEERR' *) (*$HPPEMIT '#undef WSAEINTR' *) (*$HPPEMIT '#undef WSAEBADF' *) (*$HPPEMIT '#undef WSAEACCES' *) (*$HPPEMIT '#undef WSAEFAULT' *) (*$HPPEMIT '#undef WSAEINVAL' *) (*$HPPEMIT '#undef WSAEMFILE' *) (*$HPPEMIT '#undef WSAEWOULDBLOCK' *) (*$HPPEMIT '#undef WSAEINPROGRESS' *) (*$HPPEMIT '#undef WSAEALREADY' *) (*$HPPEMIT '#undef WSAENOTSOCK' *) (*$HPPEMIT '#undef WSAEDESTADDRREQ' *) (*$HPPEMIT '#undef WSAEMSGSIZE' *) (*$HPPEMIT '#undef WSAEPROTOTYPE' *) (*$HPPEMIT '#undef WSAENOPROTOOPT' *) (*$HPPEMIT '#undef WSAEPROTONOSUPPORT' *) (*$HPPEMIT '#undef WSAESOCKTNOSUPPORT' *) (*$HPPEMIT '#undef WSAEOPNOTSUPP' *) (*$HPPEMIT '#undef WSAEPFNOSUPPORT' *) (*$HPPEMIT '#undef WSAEAFNOSUPPORT' *) (*$HPPEMIT '#undef WSAEADDRINUSE' *) (*$HPPEMIT '#undef WSAEADDRNOTAVAIL' *) (*$HPPEMIT '#undef WSAENETDOWN' *) (*$HPPEMIT '#undef WSAENETUNREACH' *) (*$HPPEMIT '#undef WSAENETRESET' *) (*$HPPEMIT '#undef WSAECONNABORTED' *) (*$HPPEMIT '#undef WSAECONNRESET' *) (*$HPPEMIT '#undef WSAENOBUFS' *) (*$HPPEMIT '#undef WSAEISCONN' *) (*$HPPEMIT '#undef WSAENOTCONN' *) (*$HPPEMIT '#undef WSAESHUTDOWN' *) (*$HPPEMIT '#undef WSAETOOMANYREFS' *) (*$HPPEMIT '#undef WSAETIMEDOUT' *) (*$HPPEMIT '#undef WSAECONNREFUSED' *) (*$HPPEMIT '#undef WSAELOOP' *) (*$HPPEMIT '#undef WSAENAMETOOLONG' *) (*$HPPEMIT '#undef WSAEHOSTDOWN' *) (*$HPPEMIT '#undef WSAEHOSTUNREACH' *) (*$HPPEMIT '#undef WSAENOTEMPTY' *) (*$HPPEMIT '#undef WSAEPROCLIM' *) (*$HPPEMIT '#undef WSAEUSERS' *) (*$HPPEMIT '#undef WSAEDQUOT' *) (*$HPPEMIT '#undef WSAESTALE' *) (*$HPPEMIT '#undef WSAEREMOTE' *) (*$HPPEMIT '#undef WSASYSNOTREADY' *) (*$HPPEMIT '#undef WSAVERNOTSUPPORTED' *) (*$HPPEMIT '#undef WSANOTINITIALISED' *) (*$HPPEMIT '#undef WSAEDISCON' *) (*$HPPEMIT '#undef WSAENOMORE' *) (*$HPPEMIT '#undef WSAECANCELLED' *) (*$HPPEMIT '#undef WSAEEINVALIDPROCTABLE' *) (*$HPPEMIT '#undef WSAEINVALIDPROVIDER' *) (*$HPPEMIT '#undef WSAEPROVIDERFAILEDINIT' *) (*$HPPEMIT '#undef WSASYSCALLFAILURE' *) (*$HPPEMIT '#undef WSASERVICE_NOT_FOUND' *) (*$HPPEMIT '#undef WSATYPE_NOT_FOUND' *) (*$HPPEMIT '#undef WSA_E_NO_MORE' *) (*$HPPEMIT '#undef WSA_E_CANCELLED' *) (*$HPPEMIT '#undef WSAEREFUSED' *) (*$HPPEMIT '#undef WSAHOST_NOT_FOUND' *) (*$HPPEMIT '#undef HOST_NOT_FOUND' *) (*$HPPEMIT '#undef WSATRY_AGAIN' *) (*$HPPEMIT '#undef TRY_AGAIN' *) (*$HPPEMIT '#undef WSANO_RECOVERY' *) (*$HPPEMIT '#undef NO_RECOVERY' *) (*$HPPEMIT '#undef WSANO_DATA' *) (*$HPPEMIT '#undef NO_DATA' *) (*$HPPEMIT '#undef WSANO_ADDRESS' *) (*$HPPEMIT '#undef ENAMETOOLONG' *) (*$HPPEMIT '#undef ENOTEMPTY' *) (*$HPPEMIT '#undef FD_CLR' *) (*$HPPEMIT '#undef FD_ISSET' *) (*$HPPEMIT '#undef FD_SET' *) (*$HPPEMIT '#undef FD_ZERO' *) (*$HPPEMIT '#undef NO_ADDRESS' *) (*$HPPEMIT '#undef ADDR_ANY' *) (*$HPPEMIT '#undef SO_GROUP_ID' *) (*$HPPEMIT '#undef SO_GROUP_PRIORITY' *) (*$HPPEMIT '#undef SO_MAX_MSG_SIZE' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFOA' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFOW' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFO' *) (*$HPPEMIT '#undef PVD_CONFIG' *) (*$HPPEMIT '#undef AF_INET6' *) (*$HPPEMIT '#undef PF_INET6' *) (*$HPPEMIT '#undef NI_MAXHOST' *) (*$HPPEMIT '#undef NI_MAXSERV' *) (*$HPPEMIT '#undef NI_NOFQDN' *) (*$HPPEMIT '#undef NI_NUMERICHOST' *) (*$HPPEMIT '#undef NI_NAMEREQD' *) (*$HPPEMIT '#undef NI_NUMERICSERV' *) (*$HPPEMIT '#undef NI_DGRAM' *) (*$HPPEMIT '#undef AI_PASSIVE' *) (*$HPPEMIT '#undef AI_CANONNAME' *) (*$HPPEMIT '#undef AI_NUMERICHOST' *) (*$HPPEMIT '#undef EWOULDBLOCK' *) (*$HPPEMIT '#undef EINPROGRESS' *) (*$HPPEMIT '#undef EALREADY' *) (*$HPPEMIT '#undef ENOTSOCK' *) (*$HPPEMIT '#undef EDESTADDRREQ' *) (*$HPPEMIT '#undef EMSGSIZE' *) (*$HPPEMIT '#undef EPROTOTYPE' *) (*$HPPEMIT '#undef ENOPROTOOPT' *) (*$HPPEMIT '#undef EPROTONOSUPPORT' *) (*$HPPEMIT '#undef EOPNOTSUPP' *) (*$HPPEMIT '#undef EAFNOSUPPORT' *) (*$HPPEMIT '#undef EADDRINUSE' *) (*$HPPEMIT '#undef EADDRNOTAVAIL' *) (*$HPPEMIT '#undef ENETDOWN' *) (*$HPPEMIT '#undef ENETUNREACH' *) (*$HPPEMIT '#undef ENETRESET' *) (*$HPPEMIT '#undef ECONNABORTED' *) (*$HPPEMIT '#undef ECONNRESET' *) (*$HPPEMIT '#undef ENOBUFS' *) (*$HPPEMIT '#undef EISCONN' *) (*$HPPEMIT '#undef ENOTCONN' *) (*$HPPEMIT '#undef ETIMEDOUT' *) (*$HPPEMIT '#undef ECONNREFUSED' *) (*$HPPEMIT '#undef ELOOP' *) (*$HPPEMIT '#undef EHOSTUNREACH' *) {$ENDIF} {$IFDEF FPC} {$IFDEF WIN32} {$ALIGN OFF} {$ELSE} {$PACKRECORDS C} {$ENDIF} {$ELSE} {$IFDEF WIN64} {$ALIGN ON} {$MINENUMSIZE 4} {$ELSE} {$MINENUMSIZE 4} {$ALIGN OFF} {$ENDIF} {$ENDIF} interface uses SyncObjs, SysUtils, Classes, Windows; function InitSocketInterface(stack: String): Boolean; function DestroySocketInterface: Boolean; const {$IFDEF WINSOCK1} WinsockLevel = $0101; {$ELSE} WinsockLevel = $0202; {$ENDIF} type u_short = Word; u_int = Integer; u_long = Longint; pu_long = ^u_long; pu_short = ^u_short; {$IFDEF FPC} TSocket = ptruint; {$ELSE} {$IFDEF WIN64} TSocket = UINT_PTR; {$ELSE} TSocket = u_int; {$ENDIF} {$ENDIF} TAddrFamily = integer; TMemory = pointer; const {$IFDEF WINCE} DLLStackName = 'ws2.dll'; {$ELSE} {$IFDEF WINSOCK1} DLLStackName = 'wsock32.dll'; {$ELSE} DLLStackName = 'ws2_32.dll'; {$ENDIF} {$ENDIF} DLLwship6 = 'wship6.dll'; cLocalhost = '127.0.0.1'; cAnyHost = '0.0.0.0'; cBroadcast = '255.255.255.255'; c6Localhost = '::1'; c6AnyHost = '::0'; c6Broadcast = 'ffff::1'; cAnyPort = '0'; const FD_SETSIZE = 64; type PFDSet = ^TFDSet; TFDSet = record fd_count: u_int; fd_array: array[0..FD_SETSIZE-1] of TSocket; end; const FIONREAD = $4004667f; FIONBIO = $8004667e; FIOASYNC = $8004667d; type PTimeVal = ^TTimeVal; TTimeVal = record tv_sec: Longint; tv_usec: Longint; end; const IPPROTO_IP = 0; { Dummy } IPPROTO_ICMP = 1; { Internet Control Message Protocol } IPPROTO_IGMP = 2; { Internet Group Management Protocol} IPPROTO_TCP = 6; { TCP } IPPROTO_UDP = 17; { User Datagram Protocol } IPPROTO_IPV6 = 41; IPPROTO_ICMPV6 = 58; IPPROTO_RM = 113; IPPROTO_RAW = 255; IPPROTO_MAX = 256; type PInAddr = ^TInAddr; TInAddr = record case integer of 0: (S_bytes: packed array [0..3] of byte); 1: (S_addr: u_long); end; PSockAddrIn = ^TSockAddrIn; TSockAddrIn = record case Integer of 0: (sin_family: u_short; sin_port: u_short; sin_addr: TInAddr; sin_zero: array[0..7] of byte); 1: (sa_family: u_short; sa_data: array[0..13] of byte) end; TIP_mreq = record imr_multiaddr: TInAddr; { IP multicast address of group } imr_interface: TInAddr; { local IP address of interface } end; PInAddr6 = ^TInAddr6; TInAddr6 = record case integer of 0: (S6_addr: packed array [0..15] of byte); 1: (u6_addr8: packed array [0..15] of byte); 2: (u6_addr16: packed array [0..7] of word); 3: (u6_addr32: packed array [0..3] of integer); end; PSockAddrIn6 = ^TSockAddrIn6; TSockAddrIn6 = record sin6_family: u_short; // AF_INET6 sin6_port: u_short; // Transport level port number sin6_flowinfo: u_long; // IPv6 flow information sin6_addr: TInAddr6; // IPv6 address sin6_scope_id: u_long; // Scope Id: IF number for link-local // SITE id for site-local end; TIPv6_mreq = record ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. ipv6mr_interface: integer; // Interface index. padding: integer; end; PHostEnt = ^THostEnt; THostEnt = record h_name: PAnsiChar; h_aliases: ^PAnsiChar; h_addrtype: Smallint; h_length: Smallint; case integer of 0: (h_addr_list: ^PAnsiChar); 1: (h_addr: ^PInAddr); end; PNetEnt = ^TNetEnt; TNetEnt = record n_name: PAnsiChar; n_aliases: ^PAnsiChar; n_addrtype: Smallint; n_net: u_long; end; PServEnt = ^TServEnt; TServEnt = record s_name: PAnsiChar; s_aliases: ^PAnsiChar; {$ifdef WIN64} s_proto: PAnsiChar; s_port: Smallint; {$else} s_port: Smallint; s_proto: PAnsiChar; {$endif} end; PProtoEnt = ^TProtoEnt; TProtoEnt = record p_name: PAnsiChar; p_aliases: ^PAnsichar; p_proto: Smallint; end; const INADDR_ANY = $00000000; INADDR_LOOPBACK = $7F000001; INADDR_BROADCAST = $FFFFFFFF; INADDR_NONE = $FFFFFFFF; ADDR_ANY = INADDR_ANY; INVALID_SOCKET = TSocket(NOT(0)); SOCKET_ERROR = -1; Const {$IFDEF WINSOCK1} IP_OPTIONS = 1; IP_MULTICAST_IF = 2; { set/get IP multicast interface } IP_MULTICAST_TTL = 3; { set/get IP multicast timetolive } IP_MULTICAST_LOOP = 4; { set/get IP multicast loopback } IP_ADD_MEMBERSHIP = 5; { add an IP group membership } IP_DROP_MEMBERSHIP = 6; { drop an IP group membership } IP_TTL = 7; { set/get IP Time To Live } IP_TOS = 8; { set/get IP Type Of Service } IP_DONTFRAGMENT = 9; { set/get IP Don't Fragment flag } {$ELSE} IP_OPTIONS = 1; IP_HDRINCL = 2; IP_TOS = 3; { set/get IP Type Of Service } IP_TTL = 4; { set/get IP Time To Live } IP_MULTICAST_IF = 9; { set/get IP multicast interface } IP_MULTICAST_TTL = 10; { set/get IP multicast timetolive } IP_MULTICAST_LOOP = 11; { set/get IP multicast loopback } IP_ADD_MEMBERSHIP = 12; { add an IP group membership } IP_DROP_MEMBERSHIP = 13; { drop an IP group membership } IP_DONTFRAGMENT = 14; { set/get IP Don't Fragment flag } {$ENDIF} IP_DEFAULT_MULTICAST_TTL = 1; { normally limit m'casts to 1 hop } IP_DEFAULT_MULTICAST_LOOP = 1; { normally hear sends if a member } IP_MAX_MEMBERSHIPS = 20; { per socket; must fit in one mbuf } SOL_SOCKET = $ffff; {options for socket level } { Option flags per-socket. } SO_DEBUG = $0001; { turn on debugging info recording } SO_ACCEPTCONN = $0002; { socket has had listen() } SO_REUSEADDR = $0004; { allow local address reuse } SO_KEEPALIVE = $0008; { keep connections alive } SO_DONTROUTE = $0010; { just use interface addresses } SO_BROADCAST = $0020; { permit sending of broadcast msgs } SO_USELOOPBACK = $0040; { bypass hardware when possible } SO_LINGER = $0080; { linger on close if data present } SO_OOBINLINE = $0100; { leave received OOB data in line } SO_DONTLINGER = $ff7f; { Additional options. } SO_SNDBUF = $1001; { send buffer size } SO_RCVBUF = $1002; { receive buffer size } SO_SNDLOWAT = $1003; { send low-water mark } SO_RCVLOWAT = $1004; { receive low-water mark } SO_SNDTIMEO = $1005; { send timeout } SO_RCVTIMEO = $1006; { receive timeout } SO_ERROR = $1007; { get error status and clear } SO_TYPE = $1008; { get socket type } { WinSock 2 extension -- new options } SO_GROUP_ID = $2001; { ID of a socket group} SO_GROUP_PRIORITY = $2002; { the relative priority within a group} SO_MAX_MSG_SIZE = $2003; { maximum message size } SO_PROTOCOL_INFOA = $2004; { WSAPROTOCOL_INFOA structure } SO_PROTOCOL_INFOW = $2005; { WSAPROTOCOL_INFOW structure } SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA; PVD_CONFIG = $3001; {configuration info for service provider } { Option for opening sockets for synchronous access. } SO_OPENTYPE = $7008; SO_SYNCHRONOUS_ALERT = $10; SO_SYNCHRONOUS_NONALERT = $20; { Other NT-specific options. } SO_MAXDG = $7009; SO_MAXPATHDG = $700A; SO_UPDATE_ACCEPT_CONTEXT = $700B; SO_CONNECT_TIME = $700C; SOMAXCONN = $7fffffff; IPV6_UNICAST_HOPS = 8; // ??? IPV6_MULTICAST_IF = 9; // set/get IP multicast i/f IPV6_MULTICAST_HOPS = 10; // set/get IP multicast ttl IPV6_MULTICAST_LOOP = 11; // set/get IP multicast loopback IPV6_JOIN_GROUP = 12; // add an IP group membership IPV6_LEAVE_GROUP = 13; // drop an IP group membership MSG_NOSIGNAL = 0; // getnameinfo constants NI_MAXHOST = 1025; NI_MAXSERV = 32; NI_NOFQDN = $1; NI_NUMERICHOST = $2; NI_NAMEREQD = $4; NI_NUMERICSERV = $8; NI_DGRAM = $10; const SOCK_STREAM = 1; { stream socket } SOCK_DGRAM = 2; { datagram socket } SOCK_RAW = 3; { raw-protocol interface } SOCK_RDM = 4; { reliably-delivered message } SOCK_SEQPACKET = 5; { sequenced packet stream } { TCP options. } TCP_NODELAY = $0001; { Address families. } AF_UNSPEC = 0; { unspecified } AF_INET = 2; { internetwork: UDP, TCP, etc. } AF_INET6 = 23; { Internetwork Version 6 } AF_MAX = 24; { Protocol families, same as address families for now. } PF_UNSPEC = AF_UNSPEC; PF_INET = AF_INET; PF_INET6 = AF_INET6; PF_MAX = AF_MAX; type { Structure used by kernel to store most addresses. } PSockAddr = ^TSockAddr; TSockAddr = TSockAddrIn; { Structure used by kernel to pass protocol information in raw sockets. } PSockProto = ^TSockProto; TSockProto = record sp_family: u_short; sp_protocol: u_short; end; type PAddrInfo = ^TAddrInfo; TAddrInfo = record ai_flags: integer; // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST. ai_family: integer; // PF_xxx. ai_socktype: integer; // SOCK_xxx. ai_protocol: integer; // 0 or IPPROTO_xxx for IPv4 and IPv6. ai_addrlen: u_int; // Length of ai_addr. ai_canonname: PAnsiChar; // Canonical name for nodename. ai_addr: PSockAddr; // Binary address. ai_next: PAddrInfo; // Next structure in linked list. end; const // Flags used in "hints" argument to getaddrinfo(). AI_PASSIVE = $1; // Socket address will be used in bind() call. AI_CANONNAME = $2; // Return canonical name in first ai_canonname. AI_NUMERICHOST = $4; // Nodename must be a numeric address string. type { Structure used for manipulating linger option. } PLinger = ^TLinger; TLinger = record l_onoff: u_short; l_linger: u_short; end; const MSG_OOB = $01; // Process out-of-band data. MSG_PEEK = $02; // Peek at incoming messages. const { All Windows Sockets error constants are biased by WSABASEERR from the "normal" } WSABASEERR = 10000; { Windows Sockets definitions of regular Microsoft C error constants } WSAEINTR = (WSABASEERR+4); WSAEBADF = (WSABASEERR+9); WSAEACCES = (WSABASEERR+13); WSAEFAULT = (WSABASEERR+14); WSAEINVAL = (WSABASEERR+22); WSAEMFILE = (WSABASEERR+24); { Windows Sockets definitions of regular Berkeley error constants } WSAEWOULDBLOCK = (WSABASEERR+35); WSAEINPROGRESS = (WSABASEERR+36); WSAEALREADY = (WSABASEERR+37); WSAENOTSOCK = (WSABASEERR+38); WSAEDESTADDRREQ = (WSABASEERR+39); WSAEMSGSIZE = (WSABASEERR+40); WSAEPROTOTYPE = (WSABASEERR+41); WSAENOPROTOOPT = (WSABASEERR+42); WSAEPROTONOSUPPORT = (WSABASEERR+43); WSAESOCKTNOSUPPORT = (WSABASEERR+44); WSAEOPNOTSUPP = (WSABASEERR+45); WSAEPFNOSUPPORT = (WSABASEERR+46); WSAEAFNOSUPPORT = (WSABASEERR+47); WSAEADDRINUSE = (WSABASEERR+48); WSAEADDRNOTAVAIL = (WSABASEERR+49); WSAENETDOWN = (WSABASEERR+50); WSAENETUNREACH = (WSABASEERR+51); WSAENETRESET = (WSABASEERR+52); WSAECONNABORTED = (WSABASEERR+53); WSAECONNRESET = (WSABASEERR+54); WSAENOBUFS = (WSABASEERR+55); WSAEISCONN = (WSABASEERR+56); WSAENOTCONN = (WSABASEERR+57); WSAESHUTDOWN = (WSABASEERR+58); WSAETOOMANYREFS = (WSABASEERR+59); WSAETIMEDOUT = (WSABASEERR+60); WSAECONNREFUSED = (WSABASEERR+61); WSAELOOP = (WSABASEERR+62); WSAENAMETOOLONG = (WSABASEERR+63); WSAEHOSTDOWN = (WSABASEERR+64); WSAEHOSTUNREACH = (WSABASEERR+65); WSAENOTEMPTY = (WSABASEERR+66); WSAEPROCLIM = (WSABASEERR+67); WSAEUSERS = (WSABASEERR+68); WSAEDQUOT = (WSABASEERR+69); WSAESTALE = (WSABASEERR+70); WSAEREMOTE = (WSABASEERR+71); { Extended Windows Sockets error constant definitions } WSASYSNOTREADY = (WSABASEERR+91); WSAVERNOTSUPPORTED = (WSABASEERR+92); WSANOTINITIALISED = (WSABASEERR+93); WSAEDISCON = (WSABASEERR+101); WSAENOMORE = (WSABASEERR+102); WSAECANCELLED = (WSABASEERR+103); WSAEEINVALIDPROCTABLE = (WSABASEERR+104); WSAEINVALIDPROVIDER = (WSABASEERR+105); WSAEPROVIDERFAILEDINIT = (WSABASEERR+106); WSASYSCALLFAILURE = (WSABASEERR+107); WSASERVICE_NOT_FOUND = (WSABASEERR+108); WSATYPE_NOT_FOUND = (WSABASEERR+109); WSA_E_NO_MORE = (WSABASEERR+110); WSA_E_CANCELLED = (WSABASEERR+111); WSAEREFUSED = (WSABASEERR+112); { Error return codes from gethostbyname() and gethostbyaddr() (when using the resolver). Note that these errors are retrieved via WSAGetLastError() and must therefore follow the rules for avoiding clashes with error numbers from specific implementations or language run-time systems. For this reason the codes are based at WSABASEERR+1001. Note also that [WSA]NO_ADDRESS is defined only for compatibility purposes. } { Authoritative Answer: Host not found } WSAHOST_NOT_FOUND = (WSABASEERR+1001); HOST_NOT_FOUND = WSAHOST_NOT_FOUND; { Non-Authoritative: Host not found, or SERVERFAIL } WSATRY_AGAIN = (WSABASEERR+1002); TRY_AGAIN = WSATRY_AGAIN; { Non recoverable errors, FORMERR, REFUSED, NOTIMP } WSANO_RECOVERY = (WSABASEERR+1003); NO_RECOVERY = WSANO_RECOVERY; { Valid name, no data record of requested type } WSANO_DATA = (WSABASEERR+1004); NO_DATA = WSANO_DATA; { no address, look for MX record } WSANO_ADDRESS = WSANO_DATA; NO_ADDRESS = WSANO_ADDRESS; EWOULDBLOCK = WSAEWOULDBLOCK; EINPROGRESS = WSAEINPROGRESS; EALREADY = WSAEALREADY; ENOTSOCK = WSAENOTSOCK; EDESTADDRREQ = WSAEDESTADDRREQ; EMSGSIZE = WSAEMSGSIZE; EPROTOTYPE = WSAEPROTOTYPE; ENOPROTOOPT = WSAENOPROTOOPT; EPROTONOSUPPORT = WSAEPROTONOSUPPORT; ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT; EOPNOTSUPP = WSAEOPNOTSUPP; EPFNOSUPPORT = WSAEPFNOSUPPORT; EAFNOSUPPORT = WSAEAFNOSUPPORT; EADDRINUSE = WSAEADDRINUSE; EADDRNOTAVAIL = WSAEADDRNOTAVAIL; ENETDOWN = WSAENETDOWN; ENETUNREACH = WSAENETUNREACH; ENETRESET = WSAENETRESET; ECONNABORTED = WSAECONNABORTED; ECONNRESET = WSAECONNRESET; ENOBUFS = WSAENOBUFS; EISCONN = WSAEISCONN; ENOTCONN = WSAENOTCONN; ESHUTDOWN = WSAESHUTDOWN; ETOOMANYREFS = WSAETOOMANYREFS; ETIMEDOUT = WSAETIMEDOUT; ECONNREFUSED = WSAECONNREFUSED; ELOOP = WSAELOOP; ENAMETOOLONG = WSAENAMETOOLONG; EHOSTDOWN = WSAEHOSTDOWN; EHOSTUNREACH = WSAEHOSTUNREACH; ENOTEMPTY = WSAENOTEMPTY; EPROCLIM = WSAEPROCLIM; EUSERS = WSAEUSERS; EDQUOT = WSAEDQUOT; ESTALE = WSAESTALE; EREMOTE = WSAEREMOTE; EAI_ADDRFAMILY = 1; // Address family for nodename not supported. EAI_AGAIN = 2; // Temporary failure in name resolution. EAI_BADFLAGS = 3; // Invalid value for ai_flags. EAI_FAIL = 4; // Non-recoverable failure in name resolution. EAI_FAMILY = 5; // Address family ai_family not supported. EAI_MEMORY = 6; // Memory allocation failure. EAI_NODATA = 7; // No address associated with nodename. EAI_NONAME = 8; // Nodename nor servname provided, or not known. EAI_SERVICE = 9; // Servname not supported for ai_socktype. EAI_SOCKTYPE = 10; // Socket type ai_socktype not supported. EAI_SYSTEM = 11; // System error returned in errno. const WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128; type PWSAData = ^TWSAData; TWSAData = record wVersion: Word; wHighVersion: Word; {$ifdef win64} iMaxSockets : Word; iMaxUdpDg : Word; lpVendorInfo : PAnsiChar; szDescription : array[0..WSADESCRIPTION_LEN] of AnsiChar; szSystemStatus : array[0..WSASYS_STATUS_LEN] of AnsiChar; {$else} szDescription: array[0..WSADESCRIPTION_LEN] of AnsiChar; szSystemStatus: array[0..WSASYS_STATUS_LEN] of AnsiChar; iMaxSockets: Word; iMaxUdpDg: Word; lpVendorInfo: PAnsiChar; {$endif} end; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); var in6addr_any, in6addr_loopback : TInAddr6; procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); procedure FD_ZERO(var FDSet: TFDSet); {=============================================================================} type TWSAStartup = function(wVersionRequired: Word; var WSData: TWSAData): Integer; stdcall; TWSACleanup = function: Integer; stdcall; TWSAGetLastError = function: Integer; stdcall; TGetServByName = function(name, proto: PAnsiChar): PServEnt; stdcall; TGetServByPort = function(port: Integer; proto: PAnsiChar): PServEnt; stdcall; TGetProtoByName = function(name: PAnsiChar): PProtoEnt; stdcall; TGetProtoByNumber = function(proto: Integer): PProtoEnt; stdcall; TGetHostByName = function(name: PAnsiChar): PHostEnt; stdcall; TGetHostByAddr = function(addr: Pointer; len, Struc: Integer): PHostEnt; stdcall; TGetHostName = function(name: PAnsiChar; len: Integer): Integer; stdcall; TShutdown = function(s: TSocket; how: Integer): Integer; stdcall; TSetSockOpt = function(s: TSocket; level, optname: Integer; optval: PAnsiChar; optlen: Integer): Integer; stdcall; TGetSockOpt = function(s: TSocket; level, optname: Integer; optval: PAnsiChar; var optlen: Integer): Integer; stdcall; TSendTo = function(s: TSocket; const Buf; len, flags: Integer; addrto: PSockAddr; tolen: Integer): Integer; stdcall; TSend = function(s: TSocket; const Buf; len, flags: Integer): Integer; stdcall; TRecv = function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; TRecvFrom = function(s: TSocket; var Buf; len, flags: Integer; from: PSockAddr; var fromlen: Integer): Integer; stdcall; Tntohs = function(netshort: u_short): u_short; stdcall; Tntohl = function(netlong: u_long): u_long; stdcall; TListen = function(s: TSocket; backlog: Integer): Integer; stdcall; TIoctlSocket = function(s: TSocket; cmd: DWORD; var arg: Integer): Integer; stdcall; TInet_ntoa = function(inaddr: TInAddr): PAnsiChar; stdcall; TInet_addr = function(cp: PAnsiChar): u_long; stdcall; Thtons = function(hostshort: u_short): u_short; stdcall; Thtonl = function(hostlong: u_long): u_long; stdcall; TGetSockName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall; TGetPeerName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall; TConnect = function(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall; TCloseSocket = function(s: TSocket): Integer; stdcall; TBind = function(s: TSocket; addr: PSockAddr; namelen: Integer): Integer; stdcall; TAccept = function(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket; stdcall; TTSocket = function(af, Struc, Protocol: Integer): TSocket; stdcall; TSelect = function(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; stdcall; TGetAddrInfo = function(NodeName: PAnsiChar; ServName: PAnsiChar; Hints: PAddrInfo; var Addrinfo: PAddrInfo): integer; stdcall; TFreeAddrInfo = procedure(ai: PAddrInfo); stdcall; TGetNameInfo = function( addr: PSockAddr; namelen: Integer; host: PAnsiChar; hostlen: DWORD; serv: PAnsiChar; servlen: DWORD; flags: integer): integer; stdcall; T__WSAFDIsSet = function (s: TSocket; var FDSet: TFDSet): Bool; stdcall; TWSAIoctl = function (s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: Pointer; cbInBuffer: DWORD; lpvOutBuffer: Pointer; cbOutBuffer: DWORD; lpcbBytesReturned: PDWORD; lpOverlapped: Pointer; lpCompletionRoutine: pointer): u_int; stdcall; var WSAStartup: TWSAStartup = nil; WSACleanup: TWSACleanup = nil; WSAGetLastError: TWSAGetLastError = nil; GetServByName: TGetServByName = nil; GetServByPort: TGetServByPort = nil; GetProtoByName: TGetProtoByName = nil; GetProtoByNumber: TGetProtoByNumber = nil; GetHostByName: TGetHostByName = nil; GetHostByAddr: TGetHostByAddr = nil; ssGetHostName: TGetHostName = nil; Shutdown: TShutdown = nil; SetSockOpt: TSetSockOpt = nil; GetSockOpt: TGetSockOpt = nil; ssSendTo: TSendTo = nil; ssSend: TSend = nil; ssRecv: TRecv = nil; ssRecvFrom: TRecvFrom = nil; ntohs: Tntohs = nil; ntohl: Tntohl = nil; Listen: TListen = nil; IoctlSocket: TIoctlSocket = nil; Inet_ntoa: TInet_ntoa = nil; Inet_addr: TInet_addr = nil; htons: Thtons = nil; htonl: Thtonl = nil; ssGetSockName: TGetSockName = nil; ssGetPeerName: TGetPeerName = nil; ssConnect: TConnect = nil; CloseSocket: TCloseSocket = nil; ssBind: TBind = nil; ssAccept: TAccept = nil; Socket: TTSocket = nil; Select: TSelect = nil; GetAddrInfo: TGetAddrInfo = nil; FreeAddrInfo: TFreeAddrInfo = nil; GetNameInfo: TGetNameInfo = nil; __WSAFDIsSet: T__WSAFDIsSet = nil; WSAIoctl: TWSAIoctl = nil; var SynSockCS: SyncObjs.TCriticalSection; SockEnhancedApi: Boolean; SockWship6Api: Boolean; type TVarSin = packed record case integer of 0: (AddressFamily: u_short); 1: ( case sin_family: u_short of AF_INET: (sin_port: u_short; sin_addr: TInAddr; sin_zero: array[0..7] of byte); AF_INET6: (sin6_port: u_short; sin6_flowinfo: u_long; sin6_addr: TInAddr6; sin6_scope_id: u_long); ); end; function SizeOfVarSin(sin: TVarSin): integer; function Bind(s: TSocket; const addr: TVarSin): Integer; function Connect(s: TSocket; const name: TVarSin): Integer; function GetSockName(s: TSocket; var name: TVarSin): Integer; function GetPeerName(s: TSocket; var name: TVarSin): Integer; function GetHostName: AnsiString; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; function Accept(s: TSocket; var addr: TVarSin): TSocket; function IsNewApi(Family: integer): Boolean; function SetVarSin(var Sin: TVarSin; IP, Port: AnsiString; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; function GetSinIP(Sin: TVarSin): AnsiString; function GetSinPort(Sin: TVarSin): Integer; procedure ResolveNameToIP(Name: AnsiString; Family, SockProtocol, SockType: integer; const IPList: TStrings); function ResolveIPToName(IP: AnsiString; Family, SockProtocol, SockType: integer): AnsiString; function ResolvePort(Port: AnsiString; Family, SockProtocol, SockType: integer): Word; {==============================================================================} implementation var SynSockCount: Integer = 0; LibHandle: THandle = 0; Libwship6Handle: THandle = 0; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); end; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); end; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); end; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); end; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; begin Result := (a^.u6_addr8[0] = $FF); end; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; begin Result := (CompareMem( a, b, sizeof(TInAddr6))); end; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); end; procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); a^.u6_addr8[15] := 1; end; {=============================================================================} procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); var I: Integer; begin I := 0; while I < FDSet.fd_count do begin if FDSet.fd_array[I] = Socket then begin while I < FDSet.fd_count - 1 do begin FDSet.fd_array[I] := FDSet.fd_array[I + 1]; Inc(I); end; Dec(FDSet.fd_count); Break; end; Inc(I); end; end; function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; begin Result := __WSAFDIsSet(Socket, FDSet); end; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); begin if FDSet.fd_count < FD_SETSIZE then begin FDSet.fd_array[FDSet.fd_count] := Socket; Inc(FDSet.fd_count); end; end; procedure FD_ZERO(var FDSet: TFDSet); begin FDSet.fd_count := 0; end; {=============================================================================} function SizeOfVarSin(sin: TVarSin): integer; begin case sin.sin_family of AF_INET: Result := SizeOf(TSockAddrIn); AF_INET6: Result := SizeOf(TSockAddrIn6); else Result := 0; end; end; {=============================================================================} function Bind(s: TSocket; const addr: TVarSin): Integer; begin Result := ssBind(s, @addr, SizeOfVarSin(addr)); end; function Connect(s: TSocket; const name: TVarSin): Integer; begin Result := ssConnect(s, @name, SizeOfVarSin(name)); end; function GetSockName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := ssGetSockName(s, @name, Len); end; function GetPeerName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := ssGetPeerName(s, @name, Len); end; function GetHostName: AnsiString; var s: AnsiString; begin Result := ''; setlength(s, 255); ssGetHostName(pAnsichar(s), Length(s) - 1); Result := PAnsichar(s); end; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := ssSend(s, Buf^, len, flags); end; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := ssRecv(s, Buf^, len, flags); end; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; begin Result := ssSendTo(s, Buf^, len, flags, @addrto, SizeOfVarSin(addrto)); end; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; var x: integer; begin x := SizeOf(from); Result := ssRecvFrom(s, Buf^, len, flags, @from, x); end; function Accept(s: TSocket; var addr: TVarSin): TSocket; var x: integer; begin x := SizeOf(addr); Result := ssAccept(s, @addr, x); end; {=============================================================================} function IsNewApi(Family: integer): Boolean; begin Result := SockEnhancedApi; if not Result then Result := (Family = AF_INET6) and SockWship6Api; end; function SetVarSin(var Sin: TVarSin; IP, Port: AnsiString; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; type pu_long = ^u_long; var ProtoEnt: PProtoEnt; ServEnt: PServEnt; HostEnt: PHostEnt; r: integer; Hints1, Hints2: TAddrInfo; Sin1, Sin2: TVarSin; TwoPass: boolean; function GetAddr(const IP, port: AnsiString; Hints: TAddrInfo; var Sin: TVarSin): integer; var Addr: PAddrInfo; begin Addr := nil; try FillChar(Sin, Sizeof(Sin), 0); if Hints.ai_socktype = SOCK_RAW then begin Hints.ai_socktype := 0; Hints.ai_protocol := 0; Result := synsock.GetAddrInfo(PAnsiChar(IP), nil, @Hints, Addr); end else begin if (IP = cAnyHost) or (IP = c6AnyHost) then begin Hints.ai_flags := AI_PASSIVE; Result := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); end else if (IP = cLocalhost) or (IP = c6Localhost) then begin Result := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); end else begin Result := synsock.GetAddrInfo(PAnsiChar(IP), PAnsiChar(Port), @Hints, Addr); end; end; if Result = 0 then if (Addr <> nil) then Move(Addr^.ai_addr^, Sin, Addr^.ai_addrlen); finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; begin Result := 0; FillChar(Sin, Sizeof(Sin), 0); if not IsNewApi(family) then begin SynSockCS.Enter; try Sin.sin_family := AF_INET; ProtoEnt := synsock.GetProtoByNumber(SockProtocol); ServEnt := nil; if (ProtoEnt <> nil) and (StrToIntDef(string(Port),-1) =-1) then ServEnt := synsock.GetServByName(PAnsiChar(Port), ProtoEnt^.p_name); if ServEnt = nil then Sin.sin_port := synsock.htons(StrToIntDef(string(Port), 0)) else Sin.sin_port := ServEnt^.s_port; if IP = cBroadcast then Sin.sin_addr.s_addr := u_long(INADDR_BROADCAST) else begin Sin.sin_addr.s_addr := synsock.inet_addr(PAnsiChar(IP)); if Sin.sin_addr.s_addr = u_long(INADDR_NONE) then begin HostEnt := synsock.GetHostByName(PAnsiChar(IP)); Result := synsock.WSAGetLastError; if HostEnt <> nil then Sin.sin_addr.S_addr := u_long(Pu_long(HostEnt^.h_addr_list^)^); end; end; finally SynSockCS.Leave; end; end else begin FillChar(Hints1, Sizeof(Hints1), 0); FillChar(Hints2, Sizeof(Hints2), 0); TwoPass := False; if Family = AF_UNSPEC then begin if PreferIP4 then begin Hints1.ai_family := AF_INET; Hints2.ai_family := AF_INET6; TwoPass := True; end else begin Hints2.ai_family := AF_INET; Hints1.ai_family := AF_INET6; TwoPass := True; end; end else Hints1.ai_family := Family; Hints1.ai_socktype := SockType; Hints1.ai_protocol := SockProtocol; Hints2.ai_socktype := Hints1.ai_socktype; Hints2.ai_protocol := Hints1.ai_protocol; r := GetAddr(IP, Port, Hints1, Sin1); Result := r; sin := sin1; if r <> 0 then if TwoPass then begin r := GetAddr(IP, Port, Hints2, Sin2); Result := r; if r = 0 then sin := sin2; end; end; end; function GetSinIP(Sin: TVarSin): AnsiString; var p: PAnsiChar; host, serv: AnsiString; hostlen, servlen: integer; r: integer; begin Result := ''; if not IsNewApi(Sin.AddressFamily) then begin p := synsock.inet_ntoa(Sin.sin_addr); if p <> nil then Result := p; end else begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(@sin, SizeOfVarSin(sin), PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); if r = 0 then Result := PAnsiChar(host); end; end; function GetSinPort(Sin: TVarSin): Integer; begin if (Sin.sin_family = AF_INET6) then Result := synsock.ntohs(Sin.sin6_port) else Result := synsock.ntohs(Sin.sin_port); end; procedure ResolveNameToIP(Name: AnsiString; Family, SockProtocol, SockType: integer; const IPList: TStrings); type TaPInAddr = array[0..250] of PInAddr; PaPInAddr = ^TaPInAddr; var Hints: TAddrInfo; Addr: PAddrInfo; AddrNext: PAddrInfo; r: integer; host, serv: AnsiString; hostlen, servlen: integer; RemoteHost: PHostEnt; IP: u_long; PAdrPtr: PaPInAddr; i: Integer; s: String; InAddr: TInAddr; begin IPList.Clear; if not IsNewApi(Family) then begin IP := synsock.inet_addr(PAnsiChar(Name)); if IP = u_long(INADDR_NONE) then begin SynSockCS.Enter; try RemoteHost := synsock.GetHostByName(PAnsiChar(Name)); if RemoteHost <> nil then begin PAdrPtr := PAPInAddr(RemoteHost^.h_addr_list); i := 0; while PAdrPtr^[i] <> nil do begin InAddr := PAdrPtr^[i]^; s := Format('%d.%d.%d.%d', [InAddr.S_bytes[0], InAddr.S_bytes[1], InAddr.S_bytes[2], InAddr.S_bytes[3]]); IPList.Add(s); Inc(i); end; end; finally SynSockCS.Leave; end; end else IPList.Add(string(Name)); end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := SockProtocol; Hints.ai_flags := 0; r := synsock.GetAddrInfo(PAnsiChar(Name), nil, @Hints, Addr); if r = 0 then begin AddrNext := Addr; while not(AddrNext = nil) do begin if not(((Family = AF_INET6) and (AddrNext^.ai_family = AF_INET)) or ((Family = AF_INET) and (AddrNext^.ai_family = AF_INET6))) then begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(AddrNext^.ai_addr, AddrNext^.ai_addrlen, PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); if r = 0 then begin host := PAnsiChar(host); IPList.Add(string(host)); end; end; AddrNext := AddrNext^.ai_next; end; end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; if IPList.Count = 0 then IPList.Add(cAnyHost); end; function ResolvePort(Port: AnsiString; Family, SockProtocol, SockType: integer): Word; var ProtoEnt: PProtoEnt; ServEnt: PServEnt; Hints: TAddrInfo; Addr: PAddrInfo; r: integer; begin Result := 0; if not IsNewApi(Family) then begin SynSockCS.Enter; try ProtoEnt := synsock.GetProtoByNumber(SockProtocol); ServEnt := nil; if ProtoEnt <> nil then ServEnt := synsock.GetServByName(PAnsiChar(Port), ProtoEnt^.p_name); if ServEnt = nil then Result := StrToIntDef(string(Port), 0) else Result := synsock.htons(ServEnt^.s_port); finally SynSockCS.Leave; end; end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := Sockprotocol; Hints.ai_flags := AI_PASSIVE; r := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); if (r = 0) and Assigned(Addr) then begin if Addr^.ai_family = AF_INET then Result := synsock.htons(Addr^.ai_addr^.sin_port); if Addr^.ai_family = AF_INET6 then Result := synsock.htons(PSockAddrIn6(Addr^.ai_addr)^.sin6_port); end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; end; function ResolveIPToName(IP: AnsiString; Family, SockProtocol, SockType: integer): AnsiString; var Hints: TAddrInfo; Addr: PAddrInfo; r: integer; host, serv: AnsiString; hostlen, servlen: integer; RemoteHost: PHostEnt; IPn: u_long; begin Result := IP; if not IsNewApi(Family) then begin IPn := synsock.inet_addr(PAnsiChar(IP)); if IPn <> u_long(INADDR_NONE) then begin SynSockCS.Enter; try RemoteHost := GetHostByAddr(@IPn, SizeOf(IPn), AF_INET); if RemoteHost <> nil then Result := RemoteHost^.h_name; finally SynSockCS.Leave; end; end; end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := SockProtocol; Hints.ai_flags := 0; r := synsock.GetAddrInfo(PAnsiChar(IP), nil, @Hints, Addr); if (r = 0) and Assigned(Addr)then begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(Addr^.ai_addr, Addr^.ai_addrlen, PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICSERV); if r = 0 then Result := PAnsiChar(host); end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; end; {=============================================================================} function InitSocketInterface(stack: String): Boolean; begin Result := False; if stack = '' then stack := DLLStackName; SynSockCS.Enter; try if SynSockCount = 0 then begin SockEnhancedApi := False; SockWship6Api := False; LibHandle := LoadLibrary(PChar(Stack)); if LibHandle <> 0 then begin WSAIoctl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAIoctl'))); __WSAFDIsSet := GetProcAddress(LibHandle, PAnsiChar(AnsiString('__WSAFDIsSet'))); CloseSocket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('closesocket'))); IoctlSocket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ioctlsocket'))); WSAGetLastError := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAGetLastError'))); WSAStartup := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAStartup'))); WSACleanup := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSACleanup'))); ssAccept := GetProcAddress(LibHandle, PAnsiChar(AnsiString('accept'))); ssBind := GetProcAddress(LibHandle, PAnsiChar(AnsiString('bind'))); ssConnect := GetProcAddress(LibHandle, PAnsiChar(AnsiString('connect'))); ssGetPeerName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getpeername'))); ssGetSockName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getsockname'))); GetSockOpt := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getsockopt'))); Htonl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('htonl'))); Htons := GetProcAddress(LibHandle, PAnsiChar(AnsiString('htons'))); Inet_Addr := GetProcAddress(LibHandle, PAnsiChar(AnsiString('inet_addr'))); Inet_Ntoa := GetProcAddress(LibHandle, PAnsiChar(AnsiString('inet_ntoa'))); Listen := GetProcAddress(LibHandle, PAnsiChar(AnsiString('listen'))); Ntohl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ntohl'))); Ntohs := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ntohs'))); ssRecv := GetProcAddress(LibHandle, PAnsiChar(AnsiString('recv'))); ssRecvFrom := GetProcAddress(LibHandle, PAnsiChar(AnsiString('recvfrom'))); Select := GetProcAddress(LibHandle, PAnsiChar(AnsiString('select'))); ssSend := GetProcAddress(LibHandle, PAnsiChar(AnsiString('send'))); ssSendTo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('sendto'))); SetSockOpt := GetProcAddress(LibHandle, PAnsiChar(AnsiString('setsockopt'))); ShutDown := GetProcAddress(LibHandle, PAnsiChar(AnsiString('shutdown'))); Socket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('socket'))); GetHostByAddr := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostbyaddr'))); GetHostByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostbyname'))); GetProtoByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getprotobyname'))); GetProtoByNumber := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getprotobynumber'))); GetServByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getservbyname'))); GetServByPort := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getservbyport'))); ssGetHostName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostname'))); {$IFNDEF FORCEOLDAPI} GetAddrInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getaddrinfo'))); FreeAddrInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('freeaddrinfo'))); GetNameInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getnameinfo'))); SockEnhancedApi := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) and Assigned(GetNameInfo); if not SockEnhancedApi then begin LibWship6Handle := LoadLibrary(PChar(DLLWship6)); if LibWship6Handle <> 0 then begin GetAddrInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('getaddrinfo'))); FreeAddrInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('freeaddrinfo'))); GetNameInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('getnameinfo'))); SockWship6Api := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) and Assigned(GetNameInfo); end; end; {$ENDIF} Result := True; end; end else Result := True; if Result then Inc(SynSockCount); finally SynSockCS.Leave; end; end; function DestroySocketInterface: Boolean; begin SynSockCS.Enter; try Dec(SynSockCount); if SynSockCount < 0 then SynSockCount := 0; if SynSockCount = 0 then begin if LibHandle <> 0 then begin FreeLibrary(libHandle); LibHandle := 0; end; if LibWship6Handle <> 0 then begin FreeLibrary(LibWship6Handle); LibWship6Handle := 0; end; end; finally SynSockCS.Leave; end; Result := True; end; initialization begin SynSockCS := SyncObjs.TCriticalSection.Create; SET_IN6_IF_ADDR_ANY (@in6addr_any); SET_LOOPBACK_ADDR6 (@in6addr_loopback); end; finalization begin SynSockCS.Free; end;���������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_winssl_lib.pas�����������������������������������������0000644�0001750�0000144�00000064156�15104114162�023074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ SChannel to OpenSSL wrapper Copyright (c) 2008 Boris Krasnovskiy Copyright (c) 2013-2015 Alexander Koblov (pascal port) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License. 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit ssl_winssl_lib; {$mode delphi} interface uses Windows, SynSock, JwaSspi, CTypes; type PSSL_CTX = ^SSL_CTX; SSL_CTX = record dwProtocol: DWORD; bVerify: BOOL; end; PSSL_METHOD = ^SSL_METHOD; SSL_METHOD = record dummy: DWORD; end; PSSL = ^SSL; SSL = record s: TSocket; ctx: PSSL_CTX; hContext: CtxtHandle; hCreds: CredHandle; pbRecDataBuf: PByte; cbRecDataBuf: LONG; sbRecDataBuf: LONG; pbIoBuffer: PByte; cbIoBuffer: LONG; sbIoBuffer: LONG; exIoBuffer: BOOL; rmshtdn: BOOL; end; function SSL_library_init(): cint; cdecl; function SSL_set_fd(ssl: PSSL; fd: cint): cint; cdecl; function SSL_CTX_new(method: PSSL_METHOD): PSSL_CTX; cdecl; procedure SSL_CTX_free(ctx: PSSL_CTX); cdecl; function SSL_new(ctx: PSSL_CTX): PSSL; cdecl; procedure SSL_free(ssl: PSSL); cdecl; function SSL_connect(ssl: PSSL): cint; cdecl; function SSL_shutdown(ssl: PSSL): cint; cdecl; function SSL_read(ssl: PSSL; buf: PByte; num: cint): cint; cdecl; function SSL_write(ssl: PSSL; const buf: PByte; num: cint): cint; cdecl; function SSL_pending(ssl: PSSL): cint; cdecl; function SSLv23_method(): PSSL_METHOD; cdecl; function SSLv2_method(): PSSL_METHOD; cdecl; function SSLv3_method(): PSSL_METHOD; cdecl; function TLSv1_method(): PSSL_METHOD; cdecl; function TLSv1_1_method(): PSSL_METHOD; cdecl; function TLSv1_2_method(): PSSL_METHOD; cdecl; procedure SSL_CTX_set_verify(ctx: PSSL_CTX; mode: cint; func: Pointer); cdecl; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; implementation uses JwaWinError, ssl_openssl_lib, blcksock, ssl_openssl; const SCHANNEL_CRED_VERSION = $00000004; const SCH_CRED_MANUAL_CRED_VALIDATION = $00000008; SCH_CRED_NO_DEFAULT_CREDS = $00000010; const SCHANNEL_SHUTDOWN = 1; // gracefully close down a connection const SP_PROT_SSL2_SERVER = $00000004; SP_PROT_SSL2_CLIENT = $00000008; SP_PROT_SSL2 = (SP_PROT_SSL2_SERVER or SP_PROT_SSL2_CLIENT); SP_PROT_SSL3_SERVER = $00000010; SP_PROT_SSL3_CLIENT = $00000020; SP_PROT_SSL3 = (SP_PROT_SSL3_SERVER or SP_PROT_SSL3_CLIENT); SP_PROT_TLS1_SERVER = $00000040; SP_PROT_TLS1_CLIENT = $00000080; SP_PROT_TLS1 = (SP_PROT_TLS1_SERVER or SP_PROT_TLS1_CLIENT); SP_PROT_TLS1_1_SERVER = $00000100; SP_PROT_TLS1_1_CLIENT = $00000200; SP_PROT_TLS1_1 = (SP_PROT_TLS1_1_SERVER or SP_PROT_TLS1_1_CLIENT); SP_PROT_TLS1_2_SERVER = $00000400; SP_PROT_TLS1_2_CLIENT = $00000800; SP_PROT_TLS1_2 = (SP_PROT_TLS1_2_SERVER or SP_PROT_TLS1_2_CLIENT); const UNISP_NAME_A = AnsiString('Microsoft Unified Security Protocol Provider'); UNISP_NAME_W = WideString('Microsoft Unified Security Protocol Provider'); type ALG_ID = type cuint; HCERTSTORE = type HANDLE; PCCERT_CONTEXT = type Pointer; type SCHANNEL_CRED = record dwVersion: DWORD; cCreds: DWORD; paCred: PCCERT_CONTEXT; hRootStore: HCERTSTORE; cMappers: DWORD; aphMappers: Pointer; cSupportedAlgs: DWORD; palgSupportedAlgs: ^ALG_ID; grbitEnabledProtocols: DWORD; dwMinimumCipherStrength: DWORD; dwMaximumCipherStrength: DWORD; dwSessionLifespan: DWORD; dwFlags: DWORD; dwCredFormat: DWORD; end; var g_hSecurity: HMODULE; g_pSSPI: PSecurityFunctionTableA; function SSL_library_init(): cint; cdecl; var pInitSecurityInterface: INIT_SECURITY_INTERFACE_A; begin if (g_hSecurity <> 0) then Exit(1); g_hSecurity:= LoadLibraryA('schannel.dll'); if (g_hSecurity = 0) then Exit(0); pInitSecurityInterface := INIT_SECURITY_INTERFACE_A(GetProcAddress(g_hSecurity, SECURITY_ENTRYPOINT_ANSIA)); if (pInitSecurityInterface <> nil) then g_pSSPI := pInitSecurityInterface(); if (g_pSSPI = nil) then begin FreeLibrary(g_hSecurity); g_hSecurity := 0; Exit(0); end; Result := 1; end; function SSL_set_fd(ssl: PSSL; fd: cint): cint; cdecl; begin if (ssl = nil) then Exit(0); ssl^.s := TSocket(fd); Result := 1; end; function SSL_CTX_new(method: PSSL_METHOD): PSSL_CTX; cdecl; begin if (g_hSecurity = 0) then Exit(nil); Result := GetMem(SizeOf(SSL_CTX)); Result^.dwProtocol := DWORD(method); end; procedure SSL_CTX_free(ctx: PSSL_CTX); cdecl; begin FreeMem(ctx); end; function SSL_new(ctx: PSSL_CTX): PSSL; cdecl; var SchannelCred: SCHANNEL_CRED; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; begin if (ctx = nil) then Exit(nil); Result := GetMem(SizeOf(SSL)); ZeroMemory(Result, SizeOf(SSL)); Result^.ctx := ctx; ZeroMemory(@SchannelCred, SizeOf(SchannelCred)); SchannelCred.dwVersion := SCHANNEL_CRED_VERSION; SchannelCred.grbitEnabledProtocols := ctx^.dwProtocol; SchannelCred.dwFlags := SchannelCred.dwFlags or SCH_CRED_NO_DEFAULT_CREDS; if (not ctx^.bVerify) then SchannelCred.dwFlags := SchannelCred.dwFlags or SCH_CRED_MANUAL_CRED_VALIDATION; // Create an SSPI credential. scRet := g_pSSPI^.AcquireCredentialsHandleA( nil, // Name of principal UNISP_NAME_A, // Name of package SECPKG_CRED_OUTBOUND, // Flags indicating use nil, // Pointer to logon ID @SchannelCred, // Package specific data nil, // Pointer to GetKey() func nil, // Value to pass to GetKey() @Result^.hCreds, // (out) Cred Handle @tsExpiry); // (out) Lifetime (optional) if (scRet <> SEC_E_OK) then begin FreeMem(Result); Result := nil; end; end; procedure SSL_free(ssl: PSSL); cdecl; begin if (ssl = nil) then Exit; g_pSSPI^.FreeCredentialHandle(@ssl^.hCreds); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); FreeMem(ssl^.pbRecDataBuf); FreeMem(ssl^.pbIoBuffer); FreeMem(ssl); end; function ClientHandshakeLoop(ssl: PSSL; fDoInitialRead: BOOL): SECURITY_STATUS; var InBuffer: SecBufferDesc; InBuffers: array [0..1] of SecBuffer; OutBuffer: SecBufferDesc; OutBuffers: array [0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; cbData: LONG; fDoRead: BOOL; tv: TTimeVal = (tv_sec: 10; tv_usec: 0); fd: TFDSet; begin dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; ssl^.cbIoBuffer := 0; fDoRead := fDoInitialRead; scRet := SEC_I_CONTINUE_NEEDED; // Loop until the handshake is finished or an error occurs. while (scRet = SEC_I_CONTINUE_NEEDED) or (scRet = SEC_E_INCOMPLETE_MESSAGE) or (scRet = SEC_I_INCOMPLETE_CREDENTIALS) do begin // Read server data if (0 = ssl^.cbIoBuffer) or (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin if (fDoRead) then begin // If buffer not large enough reallocate buffer if (ssl^.sbIoBuffer <= ssl^.cbIoBuffer) then begin ssl^.sbIoBuffer += 2048; ssl^.pbIoBuffer := PUCHAR(ReAllocMem(ssl^.pbIoBuffer, ssl^.sbIoBuffer)); end; FD_ZERO(fd); FD_SET(ssl^.s, fd); if (select(1, @fd, nil, nil, @tv) <> 1) then begin scRet := SEC_E_INTERNAL_ERROR; break; end; cbData := recv(ssl^.s, ssl^.pbIoBuffer + ssl^.cbIoBuffer, ssl^.sbIoBuffer - ssl^.cbIoBuffer, 0); if (cbData = SOCKET_ERROR) then begin scRet := SEC_E_INTERNAL_ERROR; break; end else if (cbData = 0) then begin scRet := SEC_E_INTERNAL_ERROR; break; end; ssl^.cbIoBuffer += cbData; end else begin fDoRead := TRUE; end; end; // Set up the input buffers. Buffer 0 is used to pass in data // received from the server. Schannel will consume some or all // of this. Leftover data (if any) will be placed in buffer 1 and // given a buffer type of SECBUFFER_EXTRA. InBuffers[0].pvBuffer := ssl^.pbIoBuffer; InBuffers[0].cbBuffer := ssl^.cbIoBuffer; InBuffers[0].BufferType := SECBUFFER_TOKEN; InBuffers[1].pvBuffer := nil; InBuffers[1].cbBuffer := 0; InBuffers[1].BufferType := SECBUFFER_EMPTY; InBuffer.cBuffers := 2; InBuffer.pBuffers := InBuffers; InBuffer.ulVersion := SECBUFFER_VERSION; // Set up the output buffers. These are initialized to NULL // so as to make it less likely we'll attempt to free random // garbage later. OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType:= SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; scRet := g_pSSPI^.InitializeSecurityContextA(@ssl^.hCreds, @ssl^.hContext, nil, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, @InBuffer, 0, nil, @OutBuffer, dwSSPIOutFlags, @tsExpiry); // If success (or if the error was one of the special extended ones), // send the contents of the output buffer to the server. if (scRet = SEC_E_OK) or (scRet = SEC_I_CONTINUE_NEEDED) or (FAILED(scRet) and (dwSSPIOutFlags and ISC_RET_EXTENDED_ERROR <> 0)) then begin if (OutBuffers[0].cbBuffer <> 0) and (OutBuffers[0].pvBuffer <> nil) then begin cbData := send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Exit(SEC_E_INTERNAL_ERROR); end; // Free output buffer. g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); OutBuffers[0].pvBuffer := nil; end; end; // we need to read more data from the server and try again. if (scRet = SEC_E_INCOMPLETE_MESSAGE) then continue; // handshake completed successfully. if (scRet = SEC_E_OK) then begin // Store remaining data for further use if (InBuffers[1].BufferType = SECBUFFER_EXTRA) then begin ssl^.exIoBuffer := True; MoveMemory(ssl^.pbIoBuffer, ssl^.pbIoBuffer + (ssl^.cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); ssl^.cbIoBuffer := InBuffers[1].cbBuffer; end else ssl^.cbIoBuffer := 0; break; end; // Check for fatal error. if (FAILED(scRet)) then break; // server just requested client authentication. if (scRet = SEC_I_INCOMPLETE_CREDENTIALS) then begin // Server has requested client authentication and // GetNewClientCredentials(ssl); // Go around again. fDoRead := FALSE; scRet := SEC_I_CONTINUE_NEEDED; continue; end; // Copy any leftover data from the buffer, and go around again. if ( InBuffers[1].BufferType = SECBUFFER_EXTRA ) then begin ssl^.exIoBuffer := True; MoveMemory(ssl^.pbIoBuffer, ssl^.pbIoBuffer + (ssl^.cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); ssl^.cbIoBuffer := InBuffers[1].cbBuffer; end else ssl^.cbIoBuffer := 0; end; // Delete the security context in the case of a fatal error. if (FAILED(scRet)) then begin g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); end; if (ssl^.cbIoBuffer = 0) then begin FreeMem(ssl^.pbIoBuffer); ssl^.pbIoBuffer := nil; ssl^.sbIoBuffer := 0; end; Result := scRet; end; function SSL_connect(ssl: PSSL): cint; cdecl; var OutBuffer: SecBufferDesc; OutBuffers: array[0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; cbData: LONG; sock: TVarSin; begin if (ssl = nil) then Exit(0); dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; // Initiate a ClientHello message and generate a token. OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; GetPeerName(ssl^.s, sock); scRet := g_pSSPI^.InitializeSecurityContextA( @ssl^.hCreds, nil, inet_ntoa(sock.sin_addr), dwSSPIFlags, 0, SECURITY_NATIVE_DREP, nil, 0, @ssl^.hContext, @OutBuffer, dwSSPIOutFlags, @tsExpiry); if (scRet <> SEC_I_CONTINUE_NEEDED) then begin Exit(0); end; // Send response to server if there is one. if (OutBuffers[0].cbBuffer <> 0) and (OutBuffers[0].pvBuffer <> nil) then begin cbData := send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Exit(0); end; // Free output buffer. g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); OutBuffers[0].pvBuffer := nil; end; Result := cint(ClientHandshakeLoop(ssl, TRUE) = SEC_E_OK); end; function SSL_shutdown(ssl: PSSL): cint; cdecl; var dwType: DWORD; OutBuffer: SecBufferDesc; OutBuffers: array[0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; Status: DWORD; begin if (ssl = nil) then Exit(SOCKET_ERROR); dwType := SCHANNEL_SHUTDOWN; OutBuffers[0].pvBuffer := @dwType; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := SizeOf(dwType); OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; Status := g_pSSPI^.ApplyControlToken(@ssl^.hContext, @OutBuffer); if (FAILED(Status)) then Exit(cint(ssl^.rmshtdn)); // // Build an SSL close notify message. // dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; Status := g_pSSPI^.InitializeSecurityContextA( @ssl^.hCreds, @ssl^.hContext, nil, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, nil, 0, @ssl^.hContext, @OutBuffer, dwSSPIOutFlags, @tsExpiry); if (FAILED(Status)) then Exit(cint(ssl^.rmshtdn)); // Send the close notify message to the server. if (OutBuffers[0].pvBuffer <> nil) and (OutBuffers[0].cbBuffer <> 0) then begin send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); end; // Free the security context. g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Result := cint(ssl^.rmshtdn); end; function SSL_read(ssl: PSSL; buf: PByte; num: cint): cint; cdecl; var scRet: SECURITY_STATUS; cbData: LONG; i: cint; Message: SecBufferDesc; Buffers: array [0..3] of SecBuffer; pDataBuffer: PSecBuffer; pExtraBuffer: PSecBuffer; bytes, rbytes: LONG; fQOP: ULONG = 0; begin if (ssl = nil) then Exit(SOCKET_ERROR); if (num = 0) then Exit(0); if (ssl^.cbRecDataBuf <> 0) then begin bytes := Min(num, ssl^.cbRecDataBuf); CopyMemory(buf, ssl^.pbRecDataBuf, bytes); rbytes := ssl^.cbRecDataBuf - bytes; MoveMemory(ssl^.pbRecDataBuf, ssl^.pbRecDataBuf + bytes, rbytes); ssl^.cbRecDataBuf := rbytes; Exit(bytes); end; scRet := SEC_E_OK; while (True) do begin if (0 = ssl^.cbIoBuffer) or (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin if (ssl^.sbIoBuffer <= ssl^.cbIoBuffer) then begin ssl^.sbIoBuffer += 2048; ssl^.pbIoBuffer := PUCHAR(ReAllocMem(ssl^.pbIoBuffer, ssl^.sbIoBuffer)); end; cbData := recv(ssl^.s, ssl^.pbIoBuffer + ssl^.cbIoBuffer, ssl^.sbIoBuffer - ssl^.cbIoBuffer, 0); if (cbData = SOCKET_ERROR) then begin Exit(SOCKET_ERROR); end else if (cbData = 0) then begin // Server disconnected. if (ssl^.cbIoBuffer <> 0) then begin scRet := SEC_E_INTERNAL_ERROR; Exit(SOCKET_ERROR); end else Exit(0); end else ssl^.cbIoBuffer += cbData; end; // Attempt to decrypt the received data. Buffers[0].pvBuffer := ssl^.pbIoBuffer; Buffers[0].cbBuffer := ssl^.cbIoBuffer; Buffers[0].BufferType := SECBUFFER_DATA; Buffers[1].BufferType := SECBUFFER_EMPTY; Buffers[2].BufferType := SECBUFFER_EMPTY; Buffers[3].BufferType := SECBUFFER_EMPTY; Message.ulVersion := SECBUFFER_VERSION; Message.cBuffers := 4; Message.pBuffers := Buffers; if (@g_pSSPI^.DecryptMessage <> nil) then scRet := g_pSSPI^.DecryptMessage(@ssl^.hContext, @Message, 0, fQOP) else scRet := DECRYPT_MESSAGE_FN(g_pSSPI^.Reserved4)(@ssl^.hContext, @Message, 0, fQOP); if (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin // The input buffer contains only a fragment of an // encrypted record. Loop around and read some more // data. continue; end; // Server signaled end of session if (scRet = SEC_I_CONTEXT_EXPIRED) then begin ssl^.rmshtdn := TRUE; SSL_shutdown(ssl); Exit(0); end; if (scRet <> SEC_E_OK) and (scRet <> SEC_I_RENEGOTIATE) and (scRet <> SEC_I_CONTEXT_EXPIRED) then begin Exit(SOCKET_ERROR); end; // Locate data and (optional) extra buffers. pDataBuffer := nil; pExtraBuffer := nil; for i := 1 to 3 do begin if (pDataBuffer = nil) and (Buffers[i].BufferType = SECBUFFER_DATA) then begin pDataBuffer := @Buffers[i]; end; if (pExtraBuffer = nil) and (Buffers[i].BufferType = SECBUFFER_EXTRA) then begin pExtraBuffer := @Buffers[i]; end; end; // Return decrypted data. if Assigned(pDataBuffer) then begin bytes := Min(num, pDataBuffer^.cbBuffer); CopyMemory(buf, pDataBuffer^.pvBuffer, bytes); rbytes := pDataBuffer^.cbBuffer - bytes; if (rbytes > 0) then begin if (ssl^.sbRecDataBuf < rbytes) then begin ssl^.sbRecDataBuf := rbytes; ssl^.pbRecDataBuf := PUCHAR(ReAllocMem(ssl^.pbRecDataBuf, rbytes)); end; CopyMemory(ssl^.pbRecDataBuf, pDataBuffer^.pvBuffer + bytes, rbytes); ssl^.cbRecDataBuf := rbytes; end; end; // Move any "extra" data to the input buffer. if Assigned(pExtraBuffer) then begin MoveMemory(ssl^.pbIoBuffer, pExtraBuffer^.pvBuffer, pExtraBuffer^.cbBuffer); ssl^.cbIoBuffer := pExtraBuffer^.cbBuffer; end else ssl^.cbIoBuffer := 0; if (pDataBuffer <> nil) and (bytes <> 0) then Exit(bytes); if (scRet = SEC_I_RENEGOTIATE) then begin // The server wants to perform another handshake // sequence. scRet := ClientHandshakeLoop(ssl, FALSE); if (scRet <> SEC_E_OK) then Exit(SOCKET_ERROR); end; end; end; function SSL_write(ssl: PSSL; const buf: PByte; num: cint): cint; cdecl; var Sizes: SecPkgContext_StreamSizes; scRet: SECURITY_STATUS; cbData: LONG; Message: SecBufferDesc; Buffers: array[0..3] of SecBuffer; pbDataBuffer: PUCHAR; pbMessage: PUCHAR; cbMessage: DWORD; sendOff: DWORD = 0; begin if (ssl = nil) then Exit(SOCKET_ERROR); FillChar(Buffers, SizeOf(Buffers), 0); scRet := g_pSSPI^.QueryContextAttributesA(@ssl^.hContext, SECPKG_ATTR_STREAM_SIZES, @Sizes); if (scRet <> SEC_E_OK) then Exit(scRet); pbDataBuffer := PUCHAR(GetMem(Sizes.cbMaximumMessage + Sizes.cbHeader + Sizes.cbTrailer)); pbMessage := pbDataBuffer + Sizes.cbHeader; while (sendOff < DWORD(num)) do begin cbMessage := Min(Sizes.cbMaximumMessage, DWORD(num) - sendOff); CopyMemory(pbMessage, buf + sendOff, cbMessage); Buffers[0].pvBuffer := pbDataBuffer; Buffers[0].cbBuffer := Sizes.cbHeader; Buffers[0].BufferType := SECBUFFER_STREAM_HEADER; Buffers[1].pvBuffer := pbMessage; Buffers[1].cbBuffer := cbMessage; Buffers[1].BufferType := SECBUFFER_DATA; Buffers[2].pvBuffer := pbMessage + cbMessage; Buffers[2].cbBuffer := Sizes.cbTrailer; Buffers[2].BufferType := SECBUFFER_STREAM_TRAILER; Buffers[3].BufferType := SECBUFFER_EMPTY; Message.ulVersion := SECBUFFER_VERSION; Message.cBuffers := 4; Message.pBuffers := Buffers; if (@g_pSSPI^.EncryptMessage <> nil) then scRet := g_pSSPI^.EncryptMessage(@ssl^.hContext, 0, @Message, 0) else scRet := ENCRYPT_MESSAGE_FN(g_pSSPI^.Reserved3)(@ssl^.hContext, 0, @Message, 0); if (FAILED(scRet)) then break; // Calculate encrypted packet size cbData := Buffers[0].cbBuffer + Buffers[1].cbBuffer + Buffers[2].cbBuffer; // Send the encrypted data to the server. cbData := send(ssl^.s, pbDataBuffer, cbData, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); scRet := SEC_E_INTERNAL_ERROR; break; end; sendOff += cbMessage; end; FreeMem(pbDataBuffer); if scRet = SEC_E_OK then Result := num else Result := SOCKET_ERROR; end; function SSL_pending(ssl: PSSL): cint; cdecl; begin if (ssl = nil) then Exit(0); if ssl^.cbRecDataBuf > 0 then Result := ssl^.cbRecDataBuf else if ssl^.exIoBuffer then begin ssl^.exIoBuffer := False; Result := ssl^.cbIoBuffer end else Result := 0; end; function SSLv23_method(): PSSL_METHOD; cdecl; begin Result:= PSSL_METHOD(SP_PROT_SSL3 or SP_PROT_TLS1 or SP_PROT_TLS1_1); end; function SSLv2_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_SSL2); end; function SSLv3_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_SSL3); end; function TLSv1_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1); end; function TLSv1_1_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1_1); end; function TLSv1_2_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1_2); end; procedure SSL_CTX_set_verify(ctx: PSSL_CTX; mode: cint; func: Pointer); cdecl; begin if (ctx <> nil) then ctx^.bVerify := mode <> 0; end; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; begin if (ret > 0) then Result := SSL_ERROR_NONE else Result := SSL_ERROR_ZERO_RETURN; end; var lpBuffer: TMemoryBasicInformation; begin if (IsSSLloaded = False) then begin if VirtualQuery(@lpBuffer, @lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer) then begin SetLength(DLLSSLName, MAX_PATH); SetLength(DLLSSLName, GetModuleFileName(THandle(lpBuffer.AllocationBase), PAnsiChar(DLLSSLName), MAX_PATH)); DLLUtilName := DLLSSLName; if InitSSLInterface then SSLImplementation := TSSLOpenSSL; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_winssl_lib.inc�����������������������������������������0000644�0001750�0000144�00000000505�15104114162�023046� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������exports SSL_library_init, SSL_set_fd, SSL_CTX_new, SSL_CTX_free, SSL_new, SSL_free, SSL_connect, SSL_shutdown, SSL_read, SSL_write, SSL_pending, SSLv23_method, SSLv2_method, SSLv3_method, TLSv1_method, TLSv1_1_method, TLSv1_2_method, SSL_CTX_set_verify, SSL_get_error;�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_openssl_ver.pas����������������������������������������0000755�0001750�0000144�00000012142�15104114162�023255� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 003.004.001 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2005, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2002-2005. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Alexander Koblov | | Ales Katona (Try to load all library versions until you find or run out) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} unit ssl_openssl_ver; {$mode delphi} interface implementation uses blcksock, ssl_openssl_lib; const LibSSLName = 'libssl'; LibUtilName = 'libcrypto'; { ADD NEW ONES WHEN THEY APPEAR! Always make .so/dylib last (Darwin won't load unversioned), then versions, in descending order! Add "." .before the version} {$IFDEF DARWIN} LibVersions: array[1..10] of String = ('.48', '.47', '.46', '.45', '.44', '.43', '.42', '.41', '.39', '.35' ); {Always make .so/dylib first, then versions, in descending order! Add "." .before the version, first is always just "" } {$ELSE} LibVersions: array[1..10] of String = ('', '.3', '.111', '.1.1.1', '.11', '.1.1', '.1.1.0', '.10', '.1.0.2', '.1.0.1' ); {$ENDIF} function GetLibraryName(const Value: String; Index: Integer): String; begin {$IFDEF DARWIN} Result := Value + LibVersions[Index] + '.dylib'; {$ELSE} Result := Value + '.so' + LibVersions[Index]; {$ENDIF} end; var Index: Integer; begin if not IsSSLloaded then begin for Index := Low(LibVersions) to High(LibVersions) do begin DLLSSLName := GetLibraryName(LibSSLName, Index); DLLUtilName := GetLibraryName(LibUtilName, Index); if InitSSLInterface then Break; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_openssl_lib.pas����������������������������������������0000644�0001750�0000144�00000243573�15104114162�023242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 003.009.001 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2017, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2002-2017. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | Portions created by Pepak are Copyright (c)2018. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Tomas Hajny (OS2 support) | | Pepak (multiversion support) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} { Special thanks to Gregor Ibic <gregor.ibic@intelicom.si> (Intelicom d.o.o., http://www.intelicom.si) for good inspiration about begin with SSL programming. } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} (*$HPPEMIT 'namespace ssl_openssl_lib { using System::Shortint; }' *) {$ENDIF} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {:@abstract(OpenSSL support) This unit is Pascal interface to OpenSSL library (used by @link(ssl_openssl) unit). OpenSSL is loaded dynamicly on-demand. If this library is not found in system, requested OpenSSL function just return errorcode. } unit ssl_openssl_lib; interface uses {$IFDEF CIL} System.Runtime.InteropServices, System.Text, {$ENDIF} Classes, synafpc, {$IFNDEF MSWINDOWS} {$IFDEF FPC} {$IFDEF UNIX} BaseUnix, {$ENDIF UNIX} {$ELSE} Libc, {$ENDIF} SysUtils; {$ELSE} SysUtils, Windows; {$ENDIF} {$IFDEF CIL} const {$IFDEF LINUX} DLLSSLName = 'libssl.so'; DLLUtilName = 'libcrypto.so'; {$ELSE} DLLSSLName = 'ssleay32.dll'; DLLUtilName = 'libeay32.dll'; {$ENDIF} {$ELSE} var {$IFNDEF MSWINDOWS} {$IFDEF DARWIN} DLLSSLName: string = 'libssl.dylib'; DLLUtilName: string = 'libcrypto.dylib'; {$ELSE} {$IFDEF OS2} {$IFDEF OS2GCC} DLLSSLName: string = 'kssl.dll'; DLLUtilName: string = 'kcrypto.dll'; {$ELSE OS2GCC} DLLSSLName: string = 'ssl.dll'; DLLUtilName: string = 'crypto.dll'; {$ENDIF OS2GCC} {$ELSE OS2} DLLSSLName: string = 'libssl.so'; DLLUtilName: string = 'libcrypto.so'; {$ENDIF OS2} {$ENDIF} {$ELSE} DLLSSLName: string = 'ssleay32.dll'; DLLSSLName2: string = 'libssl32.dll'; DLLUtilName: string = 'libeay32.dll'; {$ENDIF} {$IFDEF MSWINDOWS} const LibCount = 5; SSLLibNames: array[0..LibCount-1] of string = ( // OpenSSL v3.0 {$IFDEF WIN64} 'libssl-3-x64.dll', {$ELSE} 'libssl-3.dll', {$ENDIF} // OpenSSL v1.1.x {$IFDEF WIN64} 'libssl-1_1-x64.dll', {$ELSE} 'libssl-1_1.dll', {$ENDIF} // OpenSSL v1.0.2 distinct names for x64 and x86 {$IFDEF WIN64} 'ssleay32-x64.dll', {$ELSE} 'ssleay32-x86.dll', {$ENDIF} // OpenSSL v1.0.2 'ssleay32.dll', // OpenSSL (ancient) 'libssl32.dll' ); CryptoLibNames: array[0..LibCount-1] of string = ( // OpenSSL v3.0 {$IFDEF WIN64} 'libcrypto-3-x64.dll', {$ELSE} 'libcrypto-3.dll', {$ENDIF} // OpenSSL v1.1.x {$IFDEF WIN64} 'libcrypto-1_1-x64.dll', {$ELSE} 'libcrypto-1_1.dll', {$ENDIF} // OpenSSL v1.0.2 distinct names for x64 and x86 {$IFDEF WIN64} 'libeay32-x64.dll', {$ELSE} 'libeay32-x86.dll', {$ENDIF} // OpenSSL v1.0.2 'libeay32.dll', // OpenSSL (ancient) 'libeay32.dll' ); {$ENDIF} {$ENDIF} type {$IFDEF CIL} SslPtr = IntPtr; {$ELSE} SslPtr = Pointer; {$ENDIF} PSslPtr = ^SslPtr; PSSL_CTX = SslPtr; PSSL = SslPtr; PSSL_METHOD = SslPtr; PX509 = SslPtr; PX509_NAME = SslPtr; PEVP_MD = SslPtr; PInteger = ^Integer; PBIO_METHOD = SslPtr; PBIO = SslPtr; EVP_PKEY = SslPtr; PRSA = SslPtr; PASN1_UTCTIME = SslPtr; PASN1_INTEGER = SslPtr; PPasswdCb = SslPtr; PFunction = procedure; PSTACK = SslPtr; {pf} TSkPopFreeFunc = procedure(p:SslPtr); cdecl; {pf} TX509Free = procedure(x: PX509); cdecl; {pf} DES_cblock = array[0..7] of Byte; PDES_cblock = ^DES_cblock; des_ks_struct = packed record ks: DES_cblock; weak_key: Integer; end; des_key_schedule = array[1..16] of des_ks_struct; const EVP_MAX_MD_SIZE = 16 + 20; SSL_ERROR_NONE = 0; SSL_ERROR_SSL = 1; SSL_ERROR_WANT_READ = 2; SSL_ERROR_WANT_WRITE = 3; SSL_ERROR_WANT_X509_LOOKUP = 4; SSL_ERROR_SYSCALL = 5; //look at error stack/return value/errno SSL_ERROR_ZERO_RETURN = 6; SSL_ERROR_WANT_CONNECT = 7; SSL_ERROR_WANT_ACCEPT = 8; SSL_OP_NO_SSLv2 = $01000000; SSL_OP_NO_SSLv3 = $02000000; SSL_OP_NO_TLSv1 = $04000000; SSL_OP_ALL = $000FFFFF; SSL_VERIFY_NONE = $00; SSL_VERIFY_PEER = $01; OPENSSL_DES_DECRYPT = 0; OPENSSL_DES_ENCRYPT = 1; X509_V_OK = 0; X509_V_ILLEGAL = 1; X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 2; X509_V_ERR_UNABLE_TO_GET_CRL = 3; X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = 4; X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = 5; X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = 6; X509_V_ERR_CERT_SIGNATURE_FAILURE = 7; X509_V_ERR_CRL_SIGNATURE_FAILURE = 8; X509_V_ERR_CERT_NOT_YET_VALID = 9; X509_V_ERR_CERT_HAS_EXPIRED = 10; X509_V_ERR_CRL_NOT_YET_VALID = 11; X509_V_ERR_CRL_HAS_EXPIRED = 12; X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 13; X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 14; X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = 15; X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 16; X509_V_ERR_OUT_OF_MEM = 17; X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 18; X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 19; X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 20; X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 21; X509_V_ERR_CERT_CHAIN_TOO_LONG = 22; X509_V_ERR_CERT_REVOKED = 23; X509_V_ERR_INVALID_CA = 24; X509_V_ERR_PATH_LENGTH_EXCEEDED = 25; X509_V_ERR_INVALID_PURPOSE = 26; X509_V_ERR_CERT_UNTRUSTED = 27; X509_V_ERR_CERT_REJECTED = 28; //These are 'informational' when looking for issuer cert X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29; X509_V_ERR_AKID_SKID_MISMATCH = 30; X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH = 31; X509_V_ERR_KEYUSAGE_NO_CERTSIGN = 32; X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER = 33; X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION = 34; //The application is not happy X509_V_ERR_APPLICATION_VERIFICATION = 50; SSL_FILETYPE_ASN1 = 2; SSL_FILETYPE_PEM = 1; EVP_PKEY_RSA = 6; SSL_CTRL_SET_TLSEXT_HOSTNAME = 55; TLSEXT_NAMETYPE_host_name = 0; var SSLLibHandle: TLibHandle = 0; SSLUtilHandle: TLibHandle = 0; SSLLibFile: string = ''; SSLUtilFile: string = ''; {$IFDEF CIL} [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_error')] function SslGetError(s: PSSL; ret_code: Integer): Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_library_init')] function SslLibraryInit: Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_load_error_strings')] procedure SslLoadErrorStrings; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_cipher_list')] function SslCtxSetCipherList(arg0: PSSL_CTX; var str: String): Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_new')] function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_free')] procedure SslCtxFree (arg0: PSSL_CTX); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_set_fd')] function SslSetFd(s: PSSL; fd: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv2_method')] function SslMethodV2 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv3_method')] function SslMethodV3 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_method')] function SslMethodTLSV1:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_1_method')] function SslMethodTLSV11:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_2_method')] function SslMethodTLSV12:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv23_method')] function SslMethodV23 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLS_method')] function SslMethodTLS : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_PrivateKey')] function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_PrivateKey_ASN1')] function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: String; len: integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_RSAPrivateKey_file')] function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: String; _type: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate')] function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_ASN1')] function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: String):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_file')] function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: String; _type: Integer):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_chain_file')] function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: String):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_check_private_key')] function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_default_passwd_cb')] procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_default_passwd_cb_userdata')] procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: IntPtr); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_load_verify_locations')] function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; CAfile: string; CApath: String):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_ctrl')] function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: IntPtr): integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_new')] function SslNew(ctx: PSSL_CTX):PSSL; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_free')] procedure SslFree(ssl: PSSL); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_accept')] function SslAccept(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_connect')] function SslConnect(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_shutdown')] function SslShutdown(s: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_read')] function SslRead(ssl: PSSL; buf: StringBuilder; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_peek')] function SslPeek(ssl: PSSL; buf: StringBuilder; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_write')] function SslWrite(ssl: PSSL; buf: String; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_pending')] function SslPending(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_version')] function SslGetVersion(ssl: PSSL):String; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_peer_certificate')] function SslGetPeerCertificate(s: PSSL):PX509; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_verify')] procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_current_cipher')] function SSLGetCurrentCipher(s: PSSL): SslPtr; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CIPHER_get_name')] function SSLCipherGetName(c: SslPtr):String; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CIPHER_get_bits')] function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_verify_result')] function SSLGetVerifyResult(ssl: PSSL):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_ctrl')] function SslCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: IntPtr): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_new')] function X509New: PX509; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_free')] procedure X509Free(x: PX509); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_oneline')] function X509NameOneline(a: PX509_NAME; buf: StringBuilder; size: Integer): String; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_subject_name')] function X509GetSubjectName(a: PX509):PX509_NAME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_issuer_name')] function X509GetIssuerName(a: PX509):PX509_NAME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_hash')] function X509NameHash(x: PX509_NAME):Cardinal; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_digest')] function X509Digest (data: PX509; _type: PEVP_MD; md: StringBuilder; var len: Integer):Integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_version')] function X509SetVersion(x: PX509; version: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_pubkey')] function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_issuer_name')] function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_add_entry_by_txt')] function X509NameAddEntryByTxt(name: PX509_NAME; field: string; _type: integer; bytes: string; len, loc, _set: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_sign')] function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_print')] function X509print(b: PBIO; a: PX509): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_gmtime_adj')] function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_notBefore')] function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_notAfter')] function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_serialNumber')] function X509GetSerialNumber(x: PX509): PASN1_INTEGER; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_new')] function EvpPkeyNew: EVP_PKEY; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_free')] procedure EvpPkeyFree(pk: EVP_PKEY); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_assign')] function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_get_digestbyname')] function EvpGetDigestByName(Name: String): PEVP_MD; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_cleanup')] procedure EVPcleanup; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLeay_version')] function SSLeayversion(t: integer): String; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_error_string_n')] procedure ErrErrorString(e: integer; buf: StringBuilder; len: integer); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_get_error')] function ErrGetError: integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_clear_error')] procedure ErrClearError; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_free_strings')] procedure ErrFreeStrings; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_remove_state')] procedure ErrRemoveState(pid: integer); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'OPENSSL_add_all_algorithms_noconf')] procedure OPENSSLaddallalgorithms; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'CRYPTO_cleanup_all_ex_data')] procedure CRYPTOcleanupAllExData; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'RAND_screen')] procedure RandScreen; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_new')] function BioNew(b: PBIO_METHOD): PBIO; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_free_all')] procedure BioFreeAll(b: PBIO); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_s_mem')] function BioSMem: PBIO_METHOD; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_ctrl_pending')] function BioCtrlPending(b: PBIO): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_read')] function BioRead(b: PBIO; Buf: StringBuilder; Len: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_write')] function BioWrite(b: PBIO; var Buf: String; Len: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'd2i_PKCS12_bio')] function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'PKCS12_parse')] function PKCS12parse(p12: SslPtr; pass: string; var pkey, cert, ca: SslPtr): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'PKCS12_free')] procedure PKCS12free(p12: SslPtr); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'RSA_generate_key')] function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_UTCTIME_new')] function Asn1UtctimeNew: PASN1_UTCTIME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_UTCTIME_free')] procedure Asn1UtctimeFree(a: PASN1_UTCTIME); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_INTEGER_set')] function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'i2d_X509_bio')] function i2dX509bio(b: PBIO; x: PX509): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'i2d_PrivateKey_bio')] function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; external; // 3DES functions [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_set_odd_parity')] procedure DESsetoddparity(Key: des_cblock); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_set_key_checked')] function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_ecb_encrypt')] procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); external; {$ELSE} // libssl.dll function SslGetError(s: PSSL; ret_code: Integer):Integer; function SslLibraryInit:Integer; procedure SslLoadErrorStrings; // function SslCtxSetCipherList(arg0: PSSL_CTX; str: PChar):Integer; function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer; function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; procedure SslCtxFree(arg0: PSSL_CTX); function SslSetFd(s: PSSL; fd: Integer):Integer; function SslMethodV2:PSSL_METHOD; function SslMethodV3:PSSL_METHOD; function SslMethodTLSV1:PSSL_METHOD; function SslMethodTLSV11:PSSL_METHOD; function SslMethodTLSV12:PSSL_METHOD; function SslMethodV23:PSSL_METHOD; function SslMethodTLS:PSSL_METHOD; function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer; // function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: PChar; _type: Integer):Integer; function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer; function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; // function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: PChar):Integer; function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer; function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr); // function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: PChar; const CApath: PChar):Integer; function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer; function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; function SslNew(ctx: PSSL_CTX):PSSL; procedure SslFree(ssl: PSSL); function SslAccept(ssl: PSSL):Integer; function SslConnect(ssl: PSSL):Integer; function SslShutdown(ssl: PSSL):Integer; function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslPending(ssl: PSSL):Integer; function SslGetVersion(ssl: PSSL):AnsiString; function SslGetPeerCertificate(ssl: PSSL):PX509; procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); function SSLGetCurrentCipher(s: PSSL):SslPtr; function SSLCipherGetName(c: SslPtr): AnsiString; function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; function SSLGetVerifyResult(ssl: PSSL):Integer; function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; function SslSet1Host(ssl: PSSL; hostname: PAnsiChar):Integer; procedure SslSessionFree(session: PSslPtr); function SslGet1Session(ssl: PSSL):PSslPtr; function SslSetSession(ssl: PSSL; session: PSslPtr): Integer; // libeay.dll function X509New: PX509; procedure X509Free(x: PX509); function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString; function X509GetSubjectName(a: PX509):PX509_NAME; function X509GetIssuerName(a: PX509):PX509_NAME; function X509NameHash(x: PX509_NAME):Cardinal; // function SslX509Digest(data: PX509; _type: PEVP_MD; md: PChar; len: PInteger):Integer; function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer; function X509print(b: PBIO; a: PX509): integer; function X509SetVersion(x: PX509; version: integer): integer; function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer; function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; function X509GetSerialNumber(x: PX509): PASN1_INTEGER; function EvpPkeyNew: EVP_PKEY; procedure EvpPkeyFree(pk: EVP_PKEY); function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; function EvpGetDigestByName(Name: AnsiString): PEVP_MD; procedure EVPcleanup; // function ErrErrorString(e: integer; buf: PChar): PChar; function SSLeayversion(t: integer): Ansistring; procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer); function ErrGetError: integer; procedure ErrClearError; procedure ErrFreeStrings; procedure ErrRemoveState(pid: integer); procedure OPENSSLaddallalgorithms; procedure CRYPTOcleanupAllExData; procedure RandScreen; function BioNew(b: PBIO_METHOD): PBIO; procedure BioFreeAll(b: PBIO); function BioSMem: PBIO_METHOD; function BioCtrlPending(b: PBIO): integer; function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer; function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer; function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer; procedure PKCS12free(p12: SslPtr); function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; function Asn1UtctimeNew: PASN1_UTCTIME; procedure Asn1UtctimeFree(a: PASN1_UTCTIME); function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; function Asn1IntegerGet(a: PASN1_INTEGER): integer; {pf} function i2dX509bio(b: PBIO; x: PX509): integer; function d2iX509bio(b:PBIO; x:PX509): PX509; {pf} function PEMReadBioX509(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509; {pf} procedure SkX509PopFree(st: PSTACK; func: TSkPopFreeFunc); {pf} function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; // 3DES functions procedure DESsetoddparity(Key: des_cblock); function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); {$ENDIF} function IsSSLloaded: Boolean; function InitSSLInterface: Boolean; function DestroySSLInterface: Boolean; var _X509Free: TX509Free = nil; {pf} implementation uses {$IFDEF OS2} Sockets, {$ENDIF OS2} SyncObjs; {$IFNDEF CIL} type // libssl.dll TSslGetError = function(s: PSSL; ret_code: Integer):Integer; cdecl; TSslLibraryInit = function:Integer; cdecl; TSslLoadErrorStrings = procedure; cdecl; TSslCtxSetCipherList = function(arg0: PSSL_CTX; str: PAnsiChar):Integer; cdecl; TSslCtxNew = function(meth: PSSL_METHOD):PSSL_CTX; cdecl; TSslCtxFree = procedure(arg0: PSSL_CTX); cdecl; TSslSetFd = function(s: PSSL; fd: Integer):Integer; cdecl; TSslMethodV2 = function:PSSL_METHOD; cdecl; TSslMethodV3 = function:PSSL_METHOD; cdecl; TSslMethodTLSV1 = function:PSSL_METHOD; cdecl; TSslMethodTLSV11 = function:PSSL_METHOD; cdecl; TSslMethodTLSV12 = function:PSSL_METHOD; cdecl; TSslMethodV23 = function:PSSL_METHOD; cdecl; TSslMethodTLS = function:PSSL_METHOD; cdecl; TSslCtxUsePrivateKey = function(ctx: PSSL_CTX; pkey: sslptr):Integer; cdecl; TSslCtxUsePrivateKeyASN1 = function(pk: integer; ctx: PSSL_CTX; d: sslptr; len: integer):Integer; cdecl; TSslCtxUsePrivateKeyFile = function(ctx: PSSL_CTX; const _file: PAnsiChar; _type: Integer):Integer; cdecl; TSslCtxUseCertificate = function(ctx: PSSL_CTX; x: SslPtr):Integer; cdecl; TSslCtxUseCertificateASN1 = function(ctx: PSSL_CTX; len: Integer; d: SslPtr):Integer; cdecl; TSslCtxUseCertificateFile = function(ctx: PSSL_CTX; const _file: PAnsiChar; _type: Integer):Integer; cdecl; TSslCtxUseCertificateChainFile = function(ctx: PSSL_CTX; const _file: PAnsiChar):Integer; cdecl; TSslCtxCheckPrivateKeyFile = function(ctx: PSSL_CTX):Integer; cdecl; TSslCtxSetDefaultPasswdCb = procedure(ctx: PSSL_CTX; cb: SslPtr); cdecl; TSslCtxSetDefaultPasswdCbUserdata = procedure(ctx: PSSL_CTX; u: SslPtr); cdecl; TSslCtxLoadVerifyLocations = function(ctx: PSSL_CTX; const CAfile: PAnsiChar; const CApath: PAnsiChar):Integer; cdecl; TSslCtxCtrl = function(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; cdecl; TSslNew = function(ctx: PSSL_CTX):PSSL; cdecl; TSslFree = procedure(ssl: PSSL); cdecl; TSslAccept = function(ssl: PSSL):Integer; cdecl; TSslConnect = function(ssl: PSSL):Integer; cdecl; TSslShutdown = function(ssl: PSSL):Integer; cdecl; TSslRead = function(ssl: PSSL; buf: PAnsiChar; num: Integer):Integer; cdecl; TSslPeek = function(ssl: PSSL; buf: PAnsiChar; num: Integer):Integer; cdecl; TSslWrite = function(ssl: PSSL; const buf: PAnsiChar; num: Integer):Integer; cdecl; TSslPending = function(ssl: PSSL):Integer; cdecl; TSslGetVersion = function(ssl: PSSL):PAnsiChar; cdecl; TSslGetPeerCertificate = function(ssl: PSSL):PX509; cdecl; TSslCtxSetVerify = procedure(ctx: PSSL_CTX; mode: Integer; arg2: SslPtr); cdecl; TSSLGetCurrentCipher = function(s: PSSL):SslPtr; cdecl; TSSLCipherGetName = function(c: Sslptr):PAnsiChar; cdecl; TSSLCipherGetBits = function(c: SslPtr; alg_bits: PInteger):Integer; cdecl; TSSLGetVerifyResult = function(ssl: PSSL):Integer; cdecl; TSSLCtrl = function(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; cdecl; TSslSet1Host = function(ssl: PSSL; hostname: PAnsiChar):Integer; cdecl; TSslSessionFree = procedure(session: PSslPtr); cdecl; TSslGet1Session = function(ssl: PSSL):PSslPtr; cdecl; TSslSetSession = function(ssl: PSSL; session: PSslPtr): Integer; cdecl; TSSLSetTlsextHostName = function(ssl: PSSL; buf: PAnsiChar):Integer; cdecl; // libeay.dll TX509New = function: PX509; cdecl; TX509NameOneline = function(a: PX509_NAME; buf: PAnsiChar; size: Integer):PAnsiChar; cdecl; TX509GetSubjectName = function(a: PX509):PX509_NAME; cdecl; TX509GetIssuerName = function(a: PX509):PX509_NAME; cdecl; TX509NameHash = function(x: PX509_NAME):Cardinal; cdecl; TX509Digest = function(data: PX509; _type: PEVP_MD; md: PAnsiChar; len: PInteger):Integer; cdecl; TX509print = function(b: PBIO; a: PX509): integer; cdecl; TX509SetVersion = function(x: PX509; version: integer): integer; cdecl; TX509SetPubkey = function(x: PX509; pkey: EVP_PKEY): integer; cdecl; TX509SetIssuerName = function(x: PX509; name: PX509_NAME): integer; cdecl; TX509NameAddEntryByTxt = function(name: PX509_NAME; field: PAnsiChar; _type: integer; bytes: PAnsiChar; len, loc, _set: integer): integer; cdecl; TX509Sign = function(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; cdecl; TX509GmtimeAdj = function(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; cdecl; TX509SetNotBefore = function(x: PX509; tm: PASN1_UTCTIME): integer; cdecl; TX509SetNotAfter = function(x: PX509; tm: PASN1_UTCTIME): integer; cdecl; TX509GetSerialNumber = function(x: PX509): PASN1_INTEGER; cdecl; TEvpPkeyNew = function: EVP_PKEY; cdecl; TEvpPkeyFree = procedure(pk: EVP_PKEY); cdecl; TEvpPkeyAssign = function(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; cdecl; TEvpGetDigestByName = function(Name: PAnsiChar): PEVP_MD; cdecl; TEVPcleanup = procedure; cdecl; TSSLeayversion = function(t: integer): PAnsiChar; cdecl; TErrErrorString = procedure(e: integer; buf: PAnsiChar; len: integer); cdecl; TErrGetError = function: integer; cdecl; TErrClearError = procedure; cdecl; TErrFreeStrings = procedure; cdecl; TErrRemoveState = procedure(pid: integer); cdecl; TOPENSSLaddallalgorithms = procedure; cdecl; TCRYPTOcleanupAllExData = procedure; cdecl; TRandScreen = procedure; cdecl; TBioNew = function(b: PBIO_METHOD): PBIO; cdecl; TBioFreeAll = procedure(b: PBIO); cdecl; TBioSMem = function: PBIO_METHOD; cdecl; TBioCtrlPending = function(b: PBIO): integer; cdecl; TBioRead = function(b: PBIO; Buf: PAnsiChar; Len: integer): integer; cdecl; TBioWrite = function(b: PBIO; Buf: PAnsiChar; Len: integer): integer; cdecl; Td2iPKCS12bio = function(b:PBIO; Pkcs12: SslPtr): SslPtr; cdecl; TPKCS12parse = function(p12: SslPtr; pass: PAnsiChar; var pkey, cert, ca: SslPtr): integer; cdecl; TPKCS12free = procedure(p12: SslPtr); cdecl; TRsaGenerateKey = function(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; cdecl; TAsn1UtctimeNew = function: PASN1_UTCTIME; cdecl; TAsn1UtctimeFree = procedure(a: PASN1_UTCTIME); cdecl; TAsn1IntegerSet = function(a: PASN1_INTEGER; v: integer): integer; cdecl; TAsn1IntegerGet = function(a: PASN1_INTEGER): integer; cdecl; {pf} Ti2dX509bio = function(b: PBIO; x: PX509): integer; cdecl; Td2iX509bio = function(b:PBIO; x:PX509): PX509; cdecl; {pf} TPEMReadBioX509 = function(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg:SslPtr): PX509; cdecl; {pf} TSkX509PopFree = procedure(st: PSTACK; func: TSkPopFreeFunc); cdecl; {pf} Ti2dPrivateKeyBio= function(b: PBIO; pkey: EVP_PKEY): integer; cdecl; // 3DES functions TDESsetoddparity = procedure(Key: des_cblock); cdecl; TDESsetkeychecked = function(key: des_cblock; schedule: des_key_schedule): Integer; cdecl; TDESecbencrypt = procedure(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); cdecl; //thread lock functions TCRYPTOnumlocks = function: integer; cdecl; TCRYPTOSetLockingCallback = procedure(cb: Sslptr); cdecl; var // libssl.dll _SslGetError: TSslGetError = nil; _SslLibraryInit: TSslLibraryInit = nil; _SslLoadErrorStrings: TSslLoadErrorStrings = nil; _SslCtxSetCipherList: TSslCtxSetCipherList = nil; _SslCtxNew: TSslCtxNew = nil; _SslCtxFree: TSslCtxFree = nil; _SslSetFd: TSslSetFd = nil; _SslMethodV2: TSslMethodV2 = nil; _SslMethodV3: TSslMethodV3 = nil; _SslMethodTLSV1: TSslMethodTLSV1 = nil; _SslMethodTLSV11: TSslMethodTLSV11 = nil; _SslMethodTLSV12: TSslMethodTLSV12 = nil; _SslMethodV23: TSslMethodV23 = nil; _SslMethodTLS: TSslMethodTLS = nil; _SslCtxUsePrivateKey: TSslCtxUsePrivateKey = nil; _SslCtxUsePrivateKeyASN1: TSslCtxUsePrivateKeyASN1 = nil; _SslCtxUsePrivateKeyFile: TSslCtxUsePrivateKeyFile = nil; _SslCtxUseCertificate: TSslCtxUseCertificate = nil; _SslCtxUseCertificateASN1: TSslCtxUseCertificateASN1 = nil; _SslCtxUseCertificateFile: TSslCtxUseCertificateFile = nil; _SslCtxUseCertificateChainFile: TSslCtxUseCertificateChainFile = nil; _SslCtxCheckPrivateKeyFile: TSslCtxCheckPrivateKeyFile = nil; _SslCtxSetDefaultPasswdCb: TSslCtxSetDefaultPasswdCb = nil; _SslCtxSetDefaultPasswdCbUserdata: TSslCtxSetDefaultPasswdCbUserdata = nil; _SslCtxLoadVerifyLocations: TSslCtxLoadVerifyLocations = nil; _SslCtxCtrl: TSslCtxCtrl = nil; _SslNew: TSslNew = nil; _SslFree: TSslFree = nil; _SslAccept: TSslAccept = nil; _SslConnect: TSslConnect = nil; _SslShutdown: TSslShutdown = nil; _SslRead: TSslRead = nil; _SslPeek: TSslPeek = nil; _SslWrite: TSslWrite = nil; _SslPending: TSslPending = nil; _SslGetVersion: TSslGetVersion = nil; _SslGetPeerCertificate: TSslGetPeerCertificate = nil; _SslCtxSetVerify: TSslCtxSetVerify = nil; _SSLGetCurrentCipher: TSSLGetCurrentCipher = nil; _SSLCipherGetName: TSSLCipherGetName = nil; _SSLCipherGetBits: TSSLCipherGetBits = nil; _SSLGetVerifyResult: TSSLGetVerifyResult = nil; _SSLCtrl: TSSLCtrl = nil; _SslSet1Host: TSslSet1Host = nil; _SslSessionFree: TSslSessionFree = nil; _SslGet1Session: TSslGet1Session = nil; _SslSetSession: TSslSetSession = nil; // libeay.dll _X509New: TX509New = nil; _X509NameOneline: TX509NameOneline = nil; _X509GetSubjectName: TX509GetSubjectName = nil; _X509GetIssuerName: TX509GetIssuerName = nil; _X509NameHash: TX509NameHash = nil; _X509Digest: TX509Digest = nil; _X509print: TX509print = nil; _X509SetVersion: TX509SetVersion = nil; _X509SetPubkey: TX509SetPubkey = nil; _X509SetIssuerName: TX509SetIssuerName = nil; _X509NameAddEntryByTxt: TX509NameAddEntryByTxt = nil; _X509Sign: TX509Sign = nil; _X509GmtimeAdj: TX509GmtimeAdj = nil; _X509SetNotBefore: TX509SetNotBefore = nil; _X509SetNotAfter: TX509SetNotAfter = nil; _X509GetSerialNumber: TX509GetSerialNumber = nil; _EvpPkeyNew: TEvpPkeyNew = nil; _EvpPkeyFree: TEvpPkeyFree = nil; _EvpPkeyAssign: TEvpPkeyAssign = nil; _EvpGetDigestByName: TEvpGetDigestByName = nil; _EVPcleanup: TEVPcleanup = nil; _SSLeayversion: TSSLeayversion = nil; _ErrErrorString: TErrErrorString = nil; _ErrGetError: TErrGetError = nil; _ErrClearError: TErrClearError = nil; _ErrFreeStrings: TErrFreeStrings = nil; _ErrRemoveState: TErrRemoveState = nil; _OPENSSLaddallalgorithms: TOPENSSLaddallalgorithms = nil; _CRYPTOcleanupAllExData: TCRYPTOcleanupAllExData = nil; _RandScreen: TRandScreen = nil; _BioNew: TBioNew = nil; _BioFreeAll: TBioFreeAll = nil; _BioSMem: TBioSMem = nil; _BioCtrlPending: TBioCtrlPending = nil; _BioRead: TBioRead = nil; _BioWrite: TBioWrite = nil; _d2iPKCS12bio: Td2iPKCS12bio = nil; _PKCS12parse: TPKCS12parse = nil; _PKCS12free: TPKCS12free = nil; _RsaGenerateKey: TRsaGenerateKey = nil; _Asn1UtctimeNew: TAsn1UtctimeNew = nil; _Asn1UtctimeFree: TAsn1UtctimeFree = nil; _Asn1IntegerSet: TAsn1IntegerSet = nil; _Asn1IntegerGet: TAsn1IntegerGet = nil; {pf} _i2dX509bio: Ti2dX509bio = nil; _d2iX509bio: Td2iX509bio = nil; {pf} _PEMReadBioX509: TPEMReadBioX509 = nil; {pf} _SkX509PopFree: TSkX509PopFree = nil; {pf} _i2dPrivateKeyBio: Ti2dPrivateKeyBio = nil; // 3DES functions _DESsetoddparity: TDESsetoddparity = nil; _DESsetkeychecked: TDESsetkeychecked = nil; _DESecbencrypt: TDESecbencrypt = nil; //thread lock functions _CRYPTOnumlocks: TCRYPTOnumlocks = nil; _CRYPTOSetLockingCallback: TCRYPTOSetLockingCallback = nil; {$ENDIF} var SSLCS: TCriticalSection; SSLloaded: boolean = false; {$IFNDEF CIL} Locks: TList; {$ENDIF} {$IFNDEF CIL} // libssl.dll function SslGetError(s: PSSL; ret_code: Integer):Integer; begin if InitSSLInterface and Assigned(_SslGetError) then Result := _SslGetError(s, ret_code) else Result := SSL_ERROR_SSL; end; function SslLibraryInit:Integer; begin if InitSSLInterface and Assigned(_SslLibraryInit) then Result := _SslLibraryInit else Result := 1; end; procedure SslLoadErrorStrings; begin if InitSSLInterface and Assigned(_SslLoadErrorStrings) then _SslLoadErrorStrings; end; //function SslCtxSetCipherList(arg0: PSSL_CTX; str: PChar):Integer; function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxSetCipherList) then Result := _SslCtxSetCipherList(arg0, PAnsiChar(str)) else Result := 0; end; function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; begin if InitSSLInterface and Assigned(_SslCtxNew) then Result := _SslCtxNew(meth) else Result := nil; end; procedure SslCtxFree(arg0: PSSL_CTX); begin if InitSSLInterface and Assigned(_SslCtxFree) then _SslCtxFree(arg0); end; function SslSetFd(s: PSSL; fd: Integer):Integer; begin if InitSSLInterface and Assigned(_SslSetFd) then Result := _SslSetFd(s, fd) else Result := 0; end; function SslMethodV2:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV2) then Result := _SslMethodV2 else Result := nil; end; function SslMethodV3:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV3) then Result := _SslMethodV3 else Result := nil; end; function SslMethodTLSV1:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV1) then Result := _SslMethodTLSV1 else Result := nil; end; function SslMethodTLSV11:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV11) then Result := _SslMethodTLSV11 else Result := nil; end; function SslMethodTLSV12:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV12) then Result := _SslMethodTLSV12 else Result := nil; end; function SslMethodV23:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV23) then Result := _SslMethodV23 else Result := nil; end; function SslMethodTLS:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLS) then Result := _SslMethodTLS else Result := nil; end; function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKey) then Result := _SslCtxUsePrivateKey(ctx, pkey) else Result := 0; end; function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKeyASN1) then Result := _SslCtxUsePrivateKeyASN1(pk, ctx, Sslptr(d), len) else Result := 0; end; //function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: PChar; _type: Integer):Integer; function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKeyFile) then Result := _SslCtxUsePrivateKeyFile(ctx, PAnsiChar(_file), _type) else Result := 0; end; function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificate) then Result := _SslCtxUseCertificate(ctx, x) else Result := 0; end; function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateASN1) then Result := _SslCtxUseCertificateASN1(ctx, len, SslPtr(d)) else Result := 0; end; function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateFile) then Result := _SslCtxUseCertificateFile(ctx, PAnsiChar(_file), _type) else Result := 0; end; //function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: PChar):Integer; function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateChainFile) then Result := _SslCtxUseCertificateChainFile(ctx, PAnsiChar(_file)) else Result := 0; end; function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; begin if InitSSLInterface and Assigned(_SslCtxCheckPrivateKeyFile) then Result := _SslCtxCheckPrivateKeyFile(ctx) else Result := 0; end; procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); begin if InitSSLInterface and Assigned(_SslCtxSetDefaultPasswdCb) then _SslCtxSetDefaultPasswdCb(ctx, cb); end; procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr); begin if InitSSLInterface and Assigned(_SslCtxSetDefaultPasswdCbUserdata) then _SslCtxSetDefaultPasswdCbUserdata(ctx, u); end; //function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: PChar; const CApath: PChar):Integer; function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxLoadVerifyLocations) then Result := _SslCtxLoadVerifyLocations(ctx, SslPtr(CAfile), SslPtr(CApath)) else Result := 0; end; function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; begin if InitSSLInterface and Assigned(_SslCtxCtrl) then Result := _SslCtxCtrl(ctx, cmd, larg, parg) else Result := 0; end; function SslNew(ctx: PSSL_CTX):PSSL; begin if InitSSLInterface and Assigned(_SslNew) then Result := _SslNew(ctx) else Result := nil; end; procedure SslFree(ssl: PSSL); begin if InitSSLInterface and Assigned(_SslFree) then _SslFree(ssl); end; function SslAccept(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslAccept) then Result := _SslAccept(ssl) else Result := -1; end; function SslConnect(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslConnect) then Result := _SslConnect(ssl) else Result := -1; end; function SslShutdown(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslShutdown) then Result := _SslShutdown(ssl) else Result := -1; end; //function SslRead(ssl: PSSL; buf: PChar; num: Integer):Integer; function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslRead) then Result := _SslRead(ssl, PAnsiChar(buf), num) else Result := -1; end; //function SslPeek(ssl: PSSL; buf: PChar; num: Integer):Integer; function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslPeek) then Result := _SslPeek(ssl, PAnsiChar(buf), num) else Result := -1; end; //function SslWrite(ssl: PSSL; const buf: PChar; num: Integer):Integer; function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslWrite) then Result := _SslWrite(ssl, PAnsiChar(buf), num) else Result := -1; end; function SslPending(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslPending) then Result := _SslPending(ssl) else Result := 0; end; //function SslGetVersion(ssl: PSSL):PChar; function SslGetVersion(ssl: PSSL):AnsiString; begin if InitSSLInterface and Assigned(_SslGetVersion) then Result := _SslGetVersion(ssl) else Result := ''; end; function SslGetPeerCertificate(ssl: PSSL):PX509; begin if InitSSLInterface and Assigned(_SslGetPeerCertificate) then Result := _SslGetPeerCertificate(ssl) else Result := nil; end; //procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: SslPtr); procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); begin if InitSSLInterface and Assigned(_SslCtxSetVerify) then _SslCtxSetVerify(ctx, mode, @arg2); end; function SSLGetCurrentCipher(s: PSSL):SslPtr; begin if InitSSLInterface and Assigned(_SSLGetCurrentCipher) then {$IFDEF CIL} {$ELSE} Result := _SSLGetCurrentCipher(s) {$ENDIF} else Result := nil; end; //function SSLCipherGetName(c: SslPtr):PChar; function SSLCipherGetName(c: SslPtr):AnsiString; begin if InitSSLInterface and Assigned(_SSLCipherGetName) then Result := _SSLCipherGetName(c) else Result := ''; end; //function SSLCipherGetBits(c: SslPtr; alg_bits: PInteger):Integer; function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; begin if InitSSLInterface and Assigned(_SSLCipherGetBits) then Result := _SSLCipherGetBits(c, @alg_bits) else Result := 0; end; function SSLGetVerifyResult(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SSLGetVerifyResult) then Result := _SSLGetVerifyResult(ssl) else Result := X509_V_ERR_APPLICATION_VERIFICATION; end; function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SSLCtrl) then Result := _SSLCtrl(ssl, cmd, larg, parg) else Result := X509_V_ERR_APPLICATION_VERIFICATION; end; function SslSet1Host(ssl: PSSL; hostname: PAnsiChar):Integer; begin if InitSSLInterface and Assigned(_SslSet1Host) then Result := _SslSet1Host(ssl, hostname) else Result := 0; end; procedure SslSessionFree(session: PSslPtr); begin if InitSSLInterface and Assigned(_SslSessionFree) then _SslSessionFree(session); end; function SslGet1Session(ssl: PSSL): PSslPtr; begin if InitSSLInterface and Assigned(_SslGet1Session) then Result := _SslGet1Session(ssl) else Result := nil; end; function SslSetSession(ssl: PSSL; session: PSslPtr): Integer; begin if InitSSLInterface and Assigned(_SslSetSession) then Result := _SslSetSession(ssl, session) else Result := 0; end; // libeay.dll function X509New: PX509; begin if InitSSLInterface and Assigned(_X509New) then Result := _X509New else Result := nil; end; procedure X509Free(x: PX509); begin if InitSSLInterface and Assigned(_X509Free) then _X509Free(x); end; //function SslX509NameOneline(a: PX509_NAME; buf: PChar; size: Integer):PChar; function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString; begin if InitSSLInterface and Assigned(_X509NameOneline) then Result := _X509NameOneline(a, PAnsiChar(buf),size) else Result := ''; end; function X509GetSubjectName(a: PX509):PX509_NAME; begin if InitSSLInterface and Assigned(_X509GetSubjectName) then Result := _X509GetSubjectName(a) else Result := nil; end; function X509GetIssuerName(a: PX509):PX509_NAME; begin if InitSSLInterface and Assigned(_X509GetIssuerName) then Result := _X509GetIssuerName(a) else Result := nil; end; function X509NameHash(x: PX509_NAME):Cardinal; begin if InitSSLInterface and Assigned(_X509NameHash) then Result := _X509NameHash(x) else Result := 0; end; //function SslX509Digest(data: PX509; _type: PEVP_MD; md: PChar; len: PInteger):Integer; function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer; begin if InitSSLInterface and Assigned(_X509Digest) then Result := _X509Digest(data, _type, PAnsiChar(md), @len) else Result := 0; end; function EvpPkeyNew: EVP_PKEY; begin if InitSSLInterface and Assigned(_EvpPkeyNew) then Result := _EvpPkeyNew else Result := nil; end; procedure EvpPkeyFree(pk: EVP_PKEY); begin if InitSSLInterface and Assigned(_EvpPkeyFree) then _EvpPkeyFree(pk); end; function SSLeayversion(t: integer): Ansistring; begin if InitSSLInterface and Assigned(_SSLeayversion) then Result := PAnsiChar(_SSLeayversion(t)) else Result := ''; end; procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer); begin if InitSSLInterface and Assigned(_ErrErrorString) then _ErrErrorString(e, Pointer(buf), len); buf := PAnsiChar(Buf); end; function ErrGetError: integer; begin if InitSSLInterface and Assigned(_ErrGetError) then Result := _ErrGetError else Result := SSL_ERROR_SSL; end; procedure ErrClearError; begin if InitSSLInterface and Assigned(_ErrClearError) then _ErrClearError; end; procedure ErrFreeStrings; begin if InitSSLInterface and Assigned(_ErrFreeStrings) then _ErrFreeStrings; end; procedure ErrRemoveState(pid: integer); begin if InitSSLInterface and Assigned(_ErrRemoveState) then _ErrRemoveState(pid); end; procedure OPENSSLaddallalgorithms; begin if InitSSLInterface and Assigned(_OPENSSLaddallalgorithms) then _OPENSSLaddallalgorithms; end; procedure EVPcleanup; begin if InitSSLInterface and Assigned(_EVPcleanup) then _EVPcleanup; end; procedure CRYPTOcleanupAllExData; begin if InitSSLInterface and Assigned(_CRYPTOcleanupAllExData) then _CRYPTOcleanupAllExData; end; procedure RandScreen; begin if InitSSLInterface and Assigned(_RandScreen) then _RandScreen; end; function BioNew(b: PBIO_METHOD): PBIO; begin if InitSSLInterface and Assigned(_BioNew) then Result := _BioNew(b) else Result := nil; end; procedure BioFreeAll(b: PBIO); begin if InitSSLInterface and Assigned(_BioFreeAll) then _BioFreeAll(b); end; function BioSMem: PBIO_METHOD; begin if InitSSLInterface and Assigned(_BioSMem) then Result := _BioSMem else Result := nil; end; function BioCtrlPending(b: PBIO): integer; begin if InitSSLInterface and Assigned(_BioCtrlPending) then Result := _BioCtrlPending(b) else Result := 0; end; //function BioRead(b: PBIO; Buf: PChar; Len: integer): integer; function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer; begin if InitSSLInterface and Assigned(_BioRead) then Result := _BioRead(b, PAnsiChar(Buf), Len) else Result := -2; end; //function BioWrite(b: PBIO; Buf: PChar; Len: integer): integer; function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer; begin if InitSSLInterface and Assigned(_BioWrite) then Result := _BioWrite(b, PAnsiChar(Buf), Len) else Result := -2; end; function X509print(b: PBIO; a: PX509): integer; begin if InitSSLInterface and Assigned(_X509print) then Result := _X509print(b, a) else Result := 0; end; function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; begin if InitSSLInterface and Assigned(_d2iPKCS12bio) then Result := _d2iPKCS12bio(b, Pkcs12) else Result := nil; end; function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer; begin if InitSSLInterface and Assigned(_PKCS12parse) then Result := _PKCS12parse(p12, SslPtr(pass), pkey, cert, ca) else Result := 0; end; procedure PKCS12free(p12: SslPtr); begin if InitSSLInterface and Assigned(_PKCS12free) then _PKCS12free(p12); end; function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; begin if InitSSLInterface and Assigned(_RsaGenerateKey) then Result := _RsaGenerateKey(bits, e, callback, cb_arg) else Result := nil; end; function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; begin if InitSSLInterface and Assigned(_EvpPkeyAssign) then Result := _EvpPkeyAssign(pkey, _type, key) else Result := 0; end; function X509SetVersion(x: PX509; version: integer): integer; begin if InitSSLInterface and Assigned(_X509SetVersion) then Result := _X509SetVersion(x, version) else Result := 0; end; function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; begin if InitSSLInterface and Assigned(_X509SetPubkey) then Result := _X509SetPubkey(x, pkey) else Result := 0; end; function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; begin if InitSSLInterface and Assigned(_X509SetIssuerName) then Result := _X509SetIssuerName(x, name) else Result := 0; end; function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer; begin if InitSSLInterface and Assigned(_X509NameAddEntryByTxt) then Result := _X509NameAddEntryByTxt(name, PAnsiChar(field), _type, PAnsiChar(Bytes), len, loc, _set) else Result := 0; end; function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; begin if InitSSLInterface and Assigned(_X509Sign) then Result := _X509Sign(x, pkey, md) else Result := 0; end; function Asn1UtctimeNew: PASN1_UTCTIME; begin if InitSSLInterface and Assigned(_Asn1UtctimeNew) then Result := _Asn1UtctimeNew else Result := nil; end; procedure Asn1UtctimeFree(a: PASN1_UTCTIME); begin if InitSSLInterface and Assigned(_Asn1UtctimeFree) then _Asn1UtctimeFree(a); end; function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; begin if InitSSLInterface and Assigned(_X509GmtimeAdj) then Result := _X509GmtimeAdj(s, adj) else Result := nil; end; function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; begin if InitSSLInterface and Assigned(_X509SetNotBefore) then Result := _X509SetNotBefore(x, tm) else Result := 0; end; function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; begin if InitSSLInterface and Assigned(_X509SetNotAfter) then Result := _X509SetNotAfter(x, tm) else Result := 0; end; function i2dX509bio(b: PBIO; x: PX509): integer; begin if InitSSLInterface and Assigned(_i2dX509bio) then Result := _i2dX509bio(b, x) else Result := 0; end; function d2iX509bio(b: PBIO; x: PX509): PX509; {pf} begin if InitSSLInterface and Assigned(_d2iX509bio) then Result := _d2iX509bio(b, x) else Result := nil; end; function PEMReadBioX509(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509; {pf} begin if InitSSLInterface and Assigned(_PEMReadBioX509) then Result := _PEMReadBioX509(b,x,callback,cb_arg) else Result := nil; end; procedure SkX509PopFree(st: PSTACK; func:TSkPopFreeFunc); {pf} begin if InitSSLInterface and Assigned(_SkX509PopFree) then _SkX509PopFree(st,func); end; function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; begin if InitSSLInterface and Assigned(_i2dPrivateKeyBio) then Result := _i2dPrivateKeyBio(b, pkey) else Result := 0; end; function EvpGetDigestByName(Name: AnsiString): PEVP_MD; begin if InitSSLInterface and Assigned(_EvpGetDigestByName) then Result := _EvpGetDigestByName(PAnsiChar(Name)) else Result := nil; end; function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; begin if InitSSLInterface and Assigned(_Asn1IntegerSet) then Result := _Asn1IntegerSet(a, v) else Result := 0; end; function Asn1IntegerGet(a: PASN1_INTEGER): integer; {pf} begin if InitSSLInterface and Assigned(_Asn1IntegerGet) then Result := _Asn1IntegerGet(a) else Result := 0; end; function X509GetSerialNumber(x: PX509): PASN1_INTEGER; begin if InitSSLInterface and Assigned(_X509GetSerialNumber) then Result := _X509GetSerialNumber(x) else Result := nil; end; // 3DES functions procedure DESsetoddparity(Key: des_cblock); begin if InitSSLInterface and Assigned(_DESsetoddparity) then _DESsetoddparity(Key); end; function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; begin if InitSSLInterface and Assigned(_DESsetkeychecked) then Result := _DESsetkeychecked(key, schedule) else Result := -1; end; procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); begin if InitSSLInterface and Assigned(_DESecbencrypt) then _DESecbencrypt(Input, output, ks, enc); end; procedure locking_callback(mode, ltype: integer; lfile: PChar; line: integer); cdecl; begin if (mode and 1) > 0 then TCriticalSection(Locks[ltype]).Enter else TCriticalSection(Locks[ltype]).Leave; end; procedure InitLocks; var n: integer; max: integer; begin Locks := TList.Create; max := _CRYPTOnumlocks; for n := 1 to max do Locks.Add(TCriticalSection.Create); _CRYPTOsetlockingcallback(@locking_callback); end; procedure FreeLocks; var n: integer; begin _CRYPTOsetlockingcallback(nil); for n := 0 to Locks.Count - 1 do TCriticalSection(Locks[n]).Free; Locks.Free; end; {$ENDIF} function LoadLib(const Value: String): HModule; begin {$IFDEF CIL} Result := LoadLibrary(Value); {$ELSE} Result := LoadLibrary(PChar(Value)); {$ENDIF} end; function GetProcAddr(module: HModule; const ProcName: string): SslPtr; begin {$IFDEF CIL} Result := GetProcAddress(module, ProcName); {$ELSE} Result := GetProcAddress(module, PChar(ProcName)); {$ENDIF} end; function GetLibFileName(Handle: TLibHandle): string; var n: integer; begin n := MAX_PATH + 1024; SetLength(Result, n); n := GetModuleFilename(Handle, PChar(Result), n); SetLength(Result, n); end; function InitSSLInterface: Boolean; var s: string; i: integer; begin {pf} if SSLLoaded then begin Result := TRUE; exit; end; {/pf} SSLCS.Enter; try if not IsSSLloaded then begin {$IFDEF CIL} SSLLibHandle := 1; SSLUtilHandle := 1; {$ELSE} // Note: It's important to ensure that the libraries both come from the // same directory, preferably the one of the executable. Otherwise a // version mismatch could easily occur. {$IFDEF MSWINDOWS} for i := 0 to Pred(LibCount) do begin SSLUtilHandle := LoadLib(CryptoLibNames[i]); if SSLUtilHandle <> 0 then begin s := ExtractFilePath(GetLibFileName(SSLUtilHandle)); SSLLibHandle := LoadLib(s + SSLLibNames[i]); Break; end; end; {$ELSE} SSLUtilHandle := LoadLib(DLLUtilName); SSLLibHandle := LoadLib(DLLSSLName); {$ENDIF} {$ENDIF} if (SSLLibHandle <> 0) and (SSLUtilHandle <> 0) then begin {$IFNDEF CIL} _SslGetError := GetProcAddr(SSLLibHandle, 'SSL_get_error'); _SslLibraryInit := GetProcAddr(SSLLibHandle, 'SSL_library_init'); _SslLoadErrorStrings := GetProcAddr(SSLLibHandle, 'SSL_load_error_strings'); _SslCtxSetCipherList := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_cipher_list'); _SslCtxNew := GetProcAddr(SSLLibHandle, 'SSL_CTX_new'); _SslCtxFree := GetProcAddr(SSLLibHandle, 'SSL_CTX_free'); _SslSetFd := GetProcAddr(SSLLibHandle, 'SSL_set_fd'); _SslMethodV2 := GetProcAddr(SSLLibHandle, 'SSLv2_method'); _SslMethodV3 := GetProcAddr(SSLLibHandle, 'SSLv3_method'); _SslMethodTLSV1 := GetProcAddr(SSLLibHandle, 'TLSv1_method'); _SslMethodTLSV11 := GetProcAddr(SSLLibHandle, 'TLSv1_1_method'); _SslMethodTLSV12 := GetProcAddr(SSLLibHandle, 'TLSv1_2_method'); _SslMethodV23 := GetProcAddr(SSLLibHandle, 'SSLv23_method'); _SslMethodTLS := GetProcAddr(SSLLibHandle, 'TLS_method'); _SslCtxUsePrivateKey := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_PrivateKey'); _SslCtxUsePrivateKeyASN1 := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_PrivateKey_ASN1'); //use SSL_CTX_use_RSAPrivateKey_file instead SSL_CTX_use_PrivateKey_file, //because SSL_CTX_use_PrivateKey_file not support DER format. :-O _SslCtxUsePrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_RSAPrivateKey_file'); _SslCtxUseCertificate := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate'); _SslCtxUseCertificateASN1 := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_ASN1'); _SslCtxUseCertificateFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_file'); _SslCtxUseCertificateChainFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_chain_file'); _SslCtxCheckPrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_check_private_key'); _SslCtxSetDefaultPasswdCb := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb'); _SslCtxSetDefaultPasswdCbUserdata := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb_userdata'); _SslCtxLoadVerifyLocations := GetProcAddr(SSLLibHandle, 'SSL_CTX_load_verify_locations'); _SslCtxCtrl := GetProcAddr(SSLLibHandle, 'SSL_CTX_ctrl'); _SslNew := GetProcAddr(SSLLibHandle, 'SSL_new'); _SslFree := GetProcAddr(SSLLibHandle, 'SSL_free'); _SslAccept := GetProcAddr(SSLLibHandle, 'SSL_accept'); _SslConnect := GetProcAddr(SSLLibHandle, 'SSL_connect'); _SslShutdown := GetProcAddr(SSLLibHandle, 'SSL_shutdown'); _SslRead := GetProcAddr(SSLLibHandle, 'SSL_read'); _SslPeek := GetProcAddr(SSLLibHandle, 'SSL_peek'); _SslWrite := GetProcAddr(SSLLibHandle, 'SSL_write'); _SslPending := GetProcAddr(SSLLibHandle, 'SSL_pending'); _SslGetPeerCertificate := GetProcAddr(SSLLibHandle, 'SSL_get_peer_certificate'); _SslGetVersion := GetProcAddr(SSLLibHandle, 'SSL_get_version'); _SslCtxSetVerify := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_verify'); _SslGetCurrentCipher := GetProcAddr(SSLLibHandle, 'SSL_get_current_cipher'); _SslCipherGetName := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_name'); _SslCipherGetBits := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_bits'); _SslGetVerifyResult := GetProcAddr(SSLLibHandle, 'SSL_get_verify_result'); _SslCtrl := GetProcAddr(SSLLibHandle, 'SSL_ctrl'); _SslSet1Host := GetProcAddr(SSLLibHandle, 'SSL_set1_host'); _SslSessionFree := GetProcAddr(SSLLibHandle, 'SSL_SESSION_free'); _SslGet1Session := GetProcAddr(SSLLibHandle, 'SSL_get1_session'); _SslSetSession := GetProcAddr(SSLLibHandle, 'SSL_set_session'); _X509New := GetProcAddr(SSLUtilHandle, 'X509_new'); _X509Free := GetProcAddr(SSLUtilHandle, 'X509_free'); _X509NameOneline := GetProcAddr(SSLUtilHandle, 'X509_NAME_oneline'); _X509GetSubjectName := GetProcAddr(SSLUtilHandle, 'X509_get_subject_name'); _X509GetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_get_issuer_name'); _X509NameHash := GetProcAddr(SSLUtilHandle, 'X509_NAME_hash'); _X509Digest := GetProcAddr(SSLUtilHandle, 'X509_digest'); _X509print := GetProcAddr(SSLUtilHandle, 'X509_print'); _X509SetVersion := GetProcAddr(SSLUtilHandle, 'X509_set_version'); _X509SetPubkey := GetProcAddr(SSLUtilHandle, 'X509_set_pubkey'); _X509SetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_set_issuer_name'); _X509NameAddEntryByTxt := GetProcAddr(SSLUtilHandle, 'X509_NAME_add_entry_by_txt'); _X509Sign := GetProcAddr(SSLUtilHandle, 'X509_sign'); _X509GmtimeAdj := GetProcAddr(SSLUtilHandle, 'X509_gmtime_adj'); _X509SetNotBefore := GetProcAddr(SSLUtilHandle, 'X509_set_notBefore'); _X509SetNotAfter := GetProcAddr(SSLUtilHandle, 'X509_set_notAfter'); _X509GetSerialNumber := GetProcAddr(SSLUtilHandle, 'X509_get_serialNumber'); _EvpPkeyNew := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_new'); _EvpPkeyFree := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_free'); _EvpPkeyAssign := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_assign'); _EVPCleanup := GetProcAddr(SSLUtilHandle, 'EVP_cleanup'); _EvpGetDigestByName := GetProcAddr(SSLUtilHandle, 'EVP_get_digestbyname'); _SSLeayversion := GetProcAddr(SSLUtilHandle, 'SSLeay_version'); _ErrErrorString := GetProcAddr(SSLUtilHandle, 'ERR_error_string_n'); _ErrGetError := GetProcAddr(SSLUtilHandle, 'ERR_get_error'); _ErrClearError := GetProcAddr(SSLUtilHandle, 'ERR_clear_error'); _ErrFreeStrings := GetProcAddr(SSLUtilHandle, 'ERR_free_strings'); _ErrRemoveState := GetProcAddr(SSLUtilHandle, 'ERR_remove_state'); _OPENSSLaddallalgorithms := GetProcAddr(SSLUtilHandle, 'OPENSSL_add_all_algorithms_noconf'); _CRYPTOcleanupAllExData := GetProcAddr(SSLUtilHandle, 'CRYPTO_cleanup_all_ex_data'); _RandScreen := GetProcAddr(SSLUtilHandle, 'RAND_screen'); _BioNew := GetProcAddr(SSLUtilHandle, 'BIO_new'); _BioFreeAll := GetProcAddr(SSLUtilHandle, 'BIO_free_all'); _BioSMem := GetProcAddr(SSLUtilHandle, 'BIO_s_mem'); _BioCtrlPending := GetProcAddr(SSLUtilHandle, 'BIO_ctrl_pending'); _BioRead := GetProcAddr(SSLUtilHandle, 'BIO_read'); _BioWrite := GetProcAddr(SSLUtilHandle, 'BIO_write'); _d2iPKCS12bio := GetProcAddr(SSLUtilHandle, 'd2i_PKCS12_bio'); _PKCS12parse := GetProcAddr(SSLUtilHandle, 'PKCS12_parse'); _PKCS12free := GetProcAddr(SSLUtilHandle, 'PKCS12_free'); _RsaGenerateKey := GetProcAddr(SSLUtilHandle, 'RSA_generate_key'); _Asn1UtctimeNew := GetProcAddr(SSLUtilHandle, 'ASN1_UTCTIME_new'); _Asn1UtctimeFree := GetProcAddr(SSLUtilHandle, 'ASN1_UTCTIME_free'); _Asn1IntegerSet := GetProcAddr(SSLUtilHandle, 'ASN1_INTEGER_set'); _Asn1IntegerGet := GetProcAddr(SSLUtilHandle, 'ASN1_INTEGER_get'); {pf} _i2dX509bio := GetProcAddr(SSLUtilHandle, 'i2d_X509_bio'); _d2iX509bio := GetProcAddr(SSLUtilHandle, 'd2i_X509_bio'); {pf} _PEMReadBioX509 := GetProcAddr(SSLUtilHandle, 'PEM_read_bio_X509'); {pf} _SkX509PopFree := GetProcAddr(SSLUtilHandle, 'SK_X509_POP_FREE'); {pf} _i2dPrivateKeyBio := GetProcAddr(SSLUtilHandle, 'i2d_PrivateKey_bio'); // 3DES functions _DESsetoddparity := GetProcAddr(SSLUtilHandle, 'DES_set_odd_parity'); _DESsetkeychecked := GetProcAddr(SSLUtilHandle, 'DES_set_key_checked'); _DESecbencrypt := GetProcAddr(SSLUtilHandle, 'DES_ecb_encrypt'); // _CRYPTOnumlocks := GetProcAddr(SSLUtilHandle, 'CRYPTO_num_locks'); _CRYPTOsetlockingcallback := GetProcAddr(SSLUtilHandle, 'CRYPTO_set_locking_callback'); {$ENDIF} {$IFDEF CIL} SslLibraryInit; SslLoadErrorStrings; OPENSSLaddallalgorithms; RandScreen; {$ELSE} SSLLibFile := GetLibFileName(SSLLibHandle); SSLUtilFile := GetLibFileName(SSLUtilHandle); //init library if assigned(_SslLibraryInit) then _SslLibraryInit; if assigned(_SslLoadErrorStrings) then _SslLoadErrorStrings; if assigned(_OPENSSLaddallalgorithms) then _OPENSSLaddallalgorithms; if assigned(_RandScreen) then _RandScreen; if assigned(_CRYPTOnumlocks) and assigned(_CRYPTOsetlockingcallback) then InitLocks; {$ENDIF} SSLloaded := True; {$IFDEF OS2} Result := InitEMXHandles; {$ELSE OS2} Result := True; {$ENDIF OS2} end else begin //load failed! if SSLLibHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLLibHandle); {$ENDIF} SSLLibHandle := 0; end; if SSLUtilHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLUtilHandle); {$ENDIF} SSLLibHandle := 0; end; Result := False; end; end else //loaded before... Result := true; finally SSLCS.Leave; end; end; function DestroySSLInterface: Boolean; begin SSLCS.Enter; try if IsSSLLoaded then begin //deinit library {$IFNDEF CIL} if assigned(_CRYPTOnumlocks) and assigned(_CRYPTOsetlockingcallback) then FreeLocks; {$ENDIF} EVPCleanup; CRYPTOcleanupAllExData; ErrRemoveState(0); end; SSLloaded := false; if SSLLibHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLLibHandle); {$ENDIF} SSLLibHandle := 0; end; if SSLUtilHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLUtilHandle); {$ENDIF} SSLLibHandle := 0; end; {$IFNDEF CIL} _SslGetError := nil; _SslLibraryInit := nil; _SslLoadErrorStrings := nil; _SslCtxSetCipherList := nil; _SslCtxNew := nil; _SslCtxFree := nil; _SslSetFd := nil; _SslMethodV2 := nil; _SslMethodV3 := nil; _SslMethodTLSV1 := nil; _SslMethodTLSV11 := nil; _SslMethodTLSV12 := nil; _SslMethodV23 := nil; _SslMethodTLS := nil; _SslCtxUsePrivateKey := nil; _SslCtxUsePrivateKeyASN1 := nil; _SslCtxUsePrivateKeyFile := nil; _SslCtxUseCertificate := nil; _SslCtxUseCertificateASN1 := nil; _SslCtxUseCertificateFile := nil; _SslCtxUseCertificateChainFile := nil; _SslCtxCheckPrivateKeyFile := nil; _SslCtxSetDefaultPasswdCb := nil; _SslCtxSetDefaultPasswdCbUserdata := nil; _SslCtxLoadVerifyLocations := nil; _SslCtxCtrl := nil; _SslNew := nil; _SslFree := nil; _SslAccept := nil; _SslConnect := nil; _SslShutdown := nil; _SslRead := nil; _SslPeek := nil; _SslWrite := nil; _SslPending := nil; _SslGetPeerCertificate := nil; _SslGetVersion := nil; _SslCtxSetVerify := nil; _SslGetCurrentCipher := nil; _SslCipherGetName := nil; _SslCipherGetBits := nil; _SslGetVerifyResult := nil; _SslCtrl := nil; _SslSet1Host := nil; _SslSessionFree := nil; _SslGet1Session := nil; _SslSetSession := nil; _X509New := nil; _X509Free := nil; _X509NameOneline := nil; _X509GetSubjectName := nil; _X509GetIssuerName := nil; _X509NameHash := nil; _X509Digest := nil; _X509print := nil; _X509SetVersion := nil; _X509SetPubkey := nil; _X509SetIssuerName := nil; _X509NameAddEntryByTxt := nil; _X509Sign := nil; _X509GmtimeAdj := nil; _X509SetNotBefore := nil; _X509SetNotAfter := nil; _X509GetSerialNumber := nil; _EvpPkeyNew := nil; _EvpPkeyFree := nil; _EvpPkeyAssign := nil; _EVPCleanup := nil; _EvpGetDigestByName := nil; _SSLeayversion := nil; _ErrErrorString := nil; _ErrGetError := nil; _ErrClearError := nil; _ErrFreeStrings := nil; _ErrRemoveState := nil; _OPENSSLaddallalgorithms := nil; _CRYPTOcleanupAllExData := nil; _RandScreen := nil; _BioNew := nil; _BioFreeAll := nil; _BioSMem := nil; _BioCtrlPending := nil; _BioRead := nil; _BioWrite := nil; _d2iPKCS12bio := nil; _PKCS12parse := nil; _PKCS12free := nil; _RsaGenerateKey := nil; _Asn1UtctimeNew := nil; _Asn1UtctimeFree := nil; _Asn1IntegerSet := nil; _Asn1IntegerGet := nil; {pf} _SkX509PopFree := nil; {pf} _i2dX509bio := nil; _i2dPrivateKeyBio := nil; // 3DES functions _DESsetoddparity := nil; _DESsetkeychecked := nil; _DESecbencrypt := nil; // _CRYPTOnumlocks := nil; _CRYPTOsetlockingcallback := nil; {$ENDIF} finally SSLCS.Leave; end; Result := True; end; function IsSSLloaded: Boolean; begin Result := SSLLoaded; end; initialization begin SSLCS:= TCriticalSection.Create; end; finalization begin {$IFNDEF CIL} DestroySSLInterface; {$ENDIF} SSLCS.Free; end; end. �������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_openssl.pas��������������������������������������������0000644�0001750�0000144�00000060122�15104114162�022377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.004.001 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2017, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2005-2017. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | Portions created by Pepak are Copyright (c)2018. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} //requires OpenSSL libraries! {:@abstract(SSL plugin for OpenSSL) Compatibility with OpenSSL versions: 0.9.6 should work, known mysterious crashing on FreePascal and Linux platform. 0.9.7 - 1.0.0 working fine. 1.1.0 should work, under testing. OpenSSL libraries are loaded dynamicly - you not need OpenSSL librares even you compile your application with this unit. SSL just not working when you not have OpenSSL libraries. This plugin have limited support for .NET too! Because is not possible to use callbacks with CDECL calling convention under .NET, is not supported key/certificate passwords and multithread locking. :-( For handling keys and certificates you can use this properties: @link(TCustomSSL.CertificateFile) for PEM or ASN1 DER (cer) format. @br @link(TCustomSSL.Certificate) for ASN1 DER format only. @br @link(TCustomSSL.PrivateKeyFile) for PEM or ASN1 DER (key) format. @br @link(TCustomSSL.PrivateKey) for ASN1 DER format only. @br @link(TCustomSSL.CertCAFile) for PEM CA certificate bundle. @br @link(TCustomSSL.PFXFile) for PFX format. @br @link(TCustomSSL.PFX) for PFX format from binary string. @br This plugin is capable to create Ad-Hoc certificates. When you start SSL/TLS server without explicitly assigned key and certificate, then this plugin create Ad-Hoc key and certificate for each incomming connection by self. It slowdown accepting of new connections! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit ssl_openssl; interface uses SysUtils, Classes, blcksock, synsock, synautil, {$IFDEF CIL} System.Text, {$ENDIF} {$IFDEF DELPHI23_UP} AnsiStrings, {$ENDIF} ssl_openssl_lib; type {:@abstract(class implementing OpenSSL SSL plugin.) Instance of this class will be created for each @link(TTCPBlockSocket). You not need to create instance of this class, all is done by Synapse itself!} TSSLOpenSSL = class(TCustomSSL) private FServer: boolean; protected FSsl: PSSL; Fctx: PSSL_CTX; function NeedSigningCertificate: boolean; virtual; function SSLCheck: Boolean; function SetSslKeys: boolean; virtual; function Init: Boolean; function DeInit: Boolean; function Prepare: Boolean; function LoadPFX(pfxdata: ansistring): Boolean; function CreateSelfSignedCert(Host: string): Boolean; override; property Server: boolean read FServer; public {:See @inherited} constructor Create(const Value: TTCPBlockSocket); override; destructor Destroy; override; {:See @inherited} function LibVersion: String; override; {:See @inherited} function LibName: String; override; {:See @inherited and @link(ssl_cryptlib) for more details.} function Connect: boolean; override; {:See @inherited and @link(ssl_cryptlib) for more details.} function Accept: boolean; override; {:See @inherited} function Shutdown: boolean; override; {:See @inherited} function BiShutdown: boolean; override; {:See @inherited} function SendBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function WaitingData: Integer; override; {:See @inherited} function GetSSLVersion: string; override; {:See @inherited} function GetPeerSubject: string; override; {:See @inherited} function GetPeerSerialNo: integer; override; {pf} {:See @inherited} function GetPeerIssuer: string; override; {:See @inherited} function GetPeerName: string; override; {:See @inherited} function GetPeerNameHash: cardinal; override; {pf} {:See @inherited} function GetPeerFingerprint: ansistring; override; {:See @inherited} function GetCertInfo: string; override; {:See @inherited} function GetCipherName: string; override; {:See @inherited} function GetCipherBits: integer; override; {:See @inherited} function GetCipherAlgBits: integer; override; {:See @inherited} function GetVerifyCert: integer; override; end; implementation {==============================================================================} {$IFNDEF CIL} function PasswordCallback(buf:PAnsiChar; size:Integer; rwflag:Integer; userdata: Pointer):Integer; cdecl; var Password: AnsiString; begin Password := ''; if TCustomSSL(userdata) is TCustomSSL then Password := TCustomSSL(userdata).KeyPassword; if Length(Password) > (Size - 1) then SetLength(Password, Size - 1); Result := Length(Password); {$IFDEF DELPHI23_UP}AnsiStrings.{$ENDIF}StrLCopy(buf, PAnsiChar(Password + #0), Result + 1); end; {$ENDIF} {==============================================================================} constructor TSSLOpenSSL.Create(const Value: TTCPBlockSocket); begin inherited Create(Value); FCiphers := 'DEFAULT'; FSsl := nil; Fctx := nil; end; destructor TSSLOpenSSL.Destroy; begin DeInit; inherited Destroy; end; function TSSLOpenSSL.LibVersion: String; begin Result := SSLeayversion(0); end; function TSSLOpenSSL.LibName: String; begin Result := 'ssl_openssl'; end; function TSSLOpenSSL.SSLCheck: Boolean; var {$IFDEF CIL} sb: StringBuilder; {$ENDIF} s : AnsiString; begin Result := true; FLastErrorDesc := ''; FLastError := ErrGetError; ErrClearError; if FLastError <> 0 then begin Result := False; {$IFDEF CIL} sb := StringBuilder.Create(256); ErrErrorString(FLastError, sb, 256); FLastErrorDesc := Trim(sb.ToString); {$ELSE} s := StringOfChar(#0, 256); ErrErrorString(FLastError, s, Length(s)); FLastErrorDesc := s; {$ENDIF} end; end; function TSSLOpenSSL.CreateSelfSignedCert(Host: string): Boolean; var pk: EVP_PKEY; x: PX509; rsa: PRSA; t: PASN1_UTCTIME; name: PX509_NAME; b: PBIO; xn, y: integer; s: AnsiString; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin Result := True; pk := EvpPkeynew; x := X509New; try rsa := RsaGenerateKey(2048, $10001, nil, nil); EvpPkeyAssign(pk, EVP_PKEY_RSA, rsa); X509SetVersion(x, 2); Asn1IntegerSet(X509getSerialNumber(x), 0); t := Asn1UtctimeNew; try X509GmtimeAdj(t, -60 * 60 *24); X509SetNotBefore(x, t); X509GmtimeAdj(t, 60 * 60 * 60 *24); X509SetNotAfter(x, t); finally Asn1UtctimeFree(t); end; X509SetPubkey(x, pk); Name := X509GetSubjectName(x); X509NameAddEntryByTxt(Name, 'C', $1001, 'CZ', -1, -1, 0); X509NameAddEntryByTxt(Name, 'CN', $1001, host, -1, -1, 0); x509SetIssuerName(x, Name); x509Sign(x, pk, EvpGetDigestByName('SHA1')); b := BioNew(BioSMem); try i2dX509Bio(b, x); xn := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(xn); y := bioread(b, sb, xn); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s, xn); y := bioread(b, s, xn); if y > 0 then setlength(s, y); {$ENDIF} finally BioFreeAll(b); end; FCertificate := s; b := BioNew(BioSMem); try i2dPrivatekeyBio(b, pk); xn := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(xn); y := bioread(b, sb, xn); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s, xn); y := bioread(b, s, xn); if y > 0 then setlength(s, y); {$ENDIF} finally BioFreeAll(b); end; FPrivatekey := s; finally X509free(x); EvpPkeyFree(pk); end; end; function TSSLOpenSSL.LoadPFX(pfxdata: Ansistring): Boolean; var cert, pkey, ca: SslPtr; b: PBIO; p12: SslPtr; begin Result := False; b := BioNew(BioSMem); try BioWrite(b, pfxdata, Length(PfxData)); p12 := d2iPKCS12bio(b, nil); if not Assigned(p12) then Exit; try cert := nil; pkey := nil; ca := nil; try {pf} if PKCS12parse(p12, FKeyPassword, pkey, cert, ca) > 0 then if SSLCTXusecertificate(Fctx, cert) > 0 then if SSLCTXusePrivateKey(Fctx, pkey) > 0 then Result := True; {pf} finally EvpPkeyFree(pkey); X509free(cert); SkX509PopFree(ca,_X509Free); // for ca=nil a new STACK was allocated... end; {/pf} finally PKCS12free(p12); end; finally BioFreeAll(b); end; end; function TSSLOpenSSL.SetSslKeys: boolean; var st: TFileStream; s: string; begin Result := False; if not assigned(FCtx) then Exit; try if FCertificateFile <> '' then if SslCtxUseCertificateChainFile(FCtx, FCertificateFile) <> 1 then if SslCtxUseCertificateFile(FCtx, FCertificateFile, SSL_FILETYPE_PEM) <> 1 then if SslCtxUseCertificateFile(FCtx, FCertificateFile, SSL_FILETYPE_ASN1) <> 1 then Exit; if FCertificate <> '' then if SslCtxUseCertificateASN1(FCtx, length(FCertificate), FCertificate) <> 1 then Exit; SSLCheck; if FPrivateKeyFile <> '' then if SslCtxUsePrivateKeyFile(FCtx, FPrivateKeyFile, SSL_FILETYPE_PEM) <> 1 then if SslCtxUsePrivateKeyFile(FCtx, FPrivateKeyFile, SSL_FILETYPE_ASN1) <> 1 then Exit; if FPrivateKey <> '' then if SslCtxUsePrivateKeyASN1(EVP_PKEY_RSA, FCtx, FPrivateKey, length(FPrivateKey)) <> 1 then Exit; SSLCheck; if FCertCAFile <> '' then if SslCtxLoadVerifyLocations(FCtx, FCertCAFile, '') <> 1 then Exit; if FPFXfile <> '' then begin try st := TFileStream.Create(FPFXfile, fmOpenRead or fmShareDenyNone); try s := ReadStrFromStream(st, st.Size); finally st.Free; end; if not LoadPFX(s) then Exit; except on Exception do Exit; end; end; if FPFX <> '' then if not LoadPFX(FPfx) then Exit; SSLCheck; Result := True; finally SSLCheck; end; end; function TSSLOpenSSL.NeedSigningCertificate: boolean; begin Result := (FCertificateFile = '') and (FCertificate = '') and (FPFXfile = '') and (FPFX = ''); end; function TSSLOpenSSL.Init: Boolean; var s: AnsiString; begin Result := False; FLastErrorDesc := ''; FLastError := 0; Fctx := nil; case FSSLType of LT_SSLv2: Fctx := SslCtxNew(SslMethodV2); LT_SSLv3: Fctx := SslCtxNew(SslMethodV3); LT_TLSv1: Fctx := SslCtxNew(SslMethodTLSV1); LT_TLSv1_1: Fctx := SslCtxNew(SslMethodTLSV11); LT_TLSv1_2: Fctx := SslCtxNew(SslMethodTLSV12); LT_all: begin //try new call for OpenSSL 1.1.0 first Fctx := SslCtxNew(SslMethodTLS); if Fctx=nil then //callback to previous versions Fctx := SslCtxNew(SslMethodV23); end; else Exit; end; if Fctx = nil then begin SSLCheck; Exit; end else begin s := FCiphers; SslCtxSetCipherList(Fctx, s); if FVerifyCert then SslCtxSetVerify(FCtx, SSL_VERIFY_PEER, nil) else SslCtxSetVerify(FCtx, SSL_VERIFY_NONE, nil); {$IFNDEF CIL} SslCtxSetDefaultPasswdCb(FCtx, @PasswordCallback); SslCtxSetDefaultPasswdCbUserdata(FCtx, self); {$ENDIF} if server and NeedSigningCertificate then begin CreateSelfSignedcert(FSocket.ResolveIPToName(FSocket.GetRemoteSinIP)); end; if not SetSSLKeys then Exit else begin Fssl := nil; Fssl := SslNew(Fctx); if Fssl = nil then begin SSLCheck; exit; end; end; end; Result := true; end; function TSSLOpenSSL.DeInit: Boolean; begin Result := True; if Assigned(FSessionNew) then begin SslSessionFree(FSessionNew); FSessionNew := nil; end; if assigned (Fssl) then sslfree(Fssl); Fssl := nil; if assigned (Fctx) then begin SslCtxFree(Fctx); Fctx := nil; ErrRemoveState(0); end; FSSLEnabled := False; end; function TSSLOpenSSL.Prepare: Boolean; begin Result := false; DeInit; if Init then Result := true else DeInit; end; function TSSLOpenSSL.Connect: boolean; var x: integer; b: boolean; err: integer; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; FServer := False; if Prepare then begin {$IFDEF CIL} if sslsetfd(FSsl, FSocket.Socket.Handle.ToInt32) < 1 then {$ELSE} if sslsetfd(FSsl, FSocket.Socket) < 1 then {$ENDIF} begin SSLCheck; Exit; end; // Reuse session if Assigned(FSessionOld) then begin SslSetSession(Fssl, FSessionOld); end; if SNIHost<>'' then begin SSLCtrl(Fssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, PAnsiChar(AnsiString(SNIHost))); SslSet1Host(Fssl, PAnsiChar(AnsiString(SNIHost))); end; if FSocket.ConnectionTimeout <= 0 then //do blocking call of SSL_Connect begin x := sslconnect(FSsl); if x < 1 then begin SSLcheck; Exit; end; end else //do non-blocking call of SSL_Connect begin b := Fsocket.NonBlockMode; Fsocket.NonBlockMode := true; repeat x := sslconnect(FSsl); err := SslGetError(FSsl, x); if err = SSL_ERROR_WANT_READ then if not FSocket.CanRead(FSocket.ConnectionTimeout) then break; if err = SSL_ERROR_WANT_WRITE then if not FSocket.CanWrite(FSocket.ConnectionTimeout) then break; until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); Fsocket.NonBlockMode := b; if err <> SSL_ERROR_NONE then begin SSLcheck; Exit; end; end; if FverifyCert then if (GetVerifyCert <> 0) or (not DoVerifyCert) then Exit; FSSLEnabled := True; Result := True; end; if Result and (FSessionOld = nil) then begin FSessionNew := SslGet1Session(Fssl); end; end; function TSSLOpenSSL.Accept: boolean; var x: integer; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; FServer := True; if Prepare then begin {$IFDEF CIL} if sslsetfd(FSsl, FSocket.Socket.Handle.ToInt32) < 1 then {$ELSE} if sslsetfd(FSsl, FSocket.Socket) < 1 then {$ENDIF} begin SSLCheck; Exit; end; x := sslAccept(FSsl); if x < 1 then begin SSLcheck; Exit; end; FSSLEnabled := True; Result := True; end; end; function TSSLOpenSSL.Shutdown: boolean; begin if assigned(FSsl) then sslshutdown(FSsl); DeInit; Result := True; end; function TSSLOpenSSL.BiShutdown: boolean; var x: integer; begin if assigned(FSsl) then begin x := sslshutdown(FSsl); if x = 0 then begin Synsock.Shutdown(FSocket.Socket, 1); sslshutdown(FSsl); end; end; DeInit; Result := True; end; function TSSLOpenSSL.SendBuffer(Buffer: TMemory; Len: Integer): Integer; var err: integer; {$IFDEF CIL} s: ansistring; {$ENDIF} begin FLastError := 0; FLastErrorDesc := ''; repeat {$IFDEF CIL} s := StringOf(Buffer); Result := SslWrite(FSsl, s, Len); {$ELSE} Result := SslWrite(FSsl, Buffer , Len); {$ENDIF} err := SslGetError(FSsl, Result); until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); if err = SSL_ERROR_ZERO_RETURN then Result := 0 else if (err <> 0) then FLastError := err; end; function TSSLOpenSSL.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; var err: integer; {$IFDEF CIL} sb: stringbuilder; s: ansistring; {$ENDIF} begin FLastError := 0; FLastErrorDesc := ''; repeat {$IFDEF CIL} sb := StringBuilder.Create(Len); Result := SslRead(FSsl, sb, Len); if Result > 0 then begin sb.Length := Result; s := sb.ToString; System.Array.Copy(BytesOf(s), Buffer, length(s)); end; {$ELSE} Result := SslRead(FSsl, Buffer , Len); {$ENDIF} err := SslGetError(FSsl, Result); until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); if err = SSL_ERROR_ZERO_RETURN then Result := 0 {pf}// Verze 1.1.0 byla s else tak jak to ted mam, // ve verzi 1.1.1 bylo ELSE zruseno, ale pak je SSL_ERROR_ZERO_RETURN // propagovano jako Chyba. {pf} else {/pf} if (err <> 0) then FLastError := err; end; function TSSLOpenSSL.WaitingData: Integer; begin Result := sslpending(Fssl); end; function TSSLOpenSSL.GetSSLVersion: string; begin if not assigned(FSsl) then Result := '' else Result := SSlGetVersion(FSsl); end; function TSSLOpenSSL.GetPeerSubject: string; var cert: PX509; s: ansistring; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(4096); Result := X509NameOneline(X509GetSubjectName(cert), sb, 4096); {$ELSE} setlength(s, 4096); Result := X509NameOneline(X509GetSubjectName(cert), s, Length(s)); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetPeerSerialNo: integer; {pf} var cert: PX509; SN: PASN1_INTEGER; begin if not assigned(FSsl) then begin Result := -1; Exit; end; cert := SSLGetPeerCertificate(Fssl); try if not assigned(cert) then begin Result := -1; Exit; end; SN := X509GetSerialNumber(cert); Result := Asn1IntegerGet(SN); finally X509Free(cert); end; end; function TSSLOpenSSL.GetPeerName: string; var s: ansistring; begin s := GetPeerSubject; s := SeparateRight(s, '/CN='); Result := Trim(SeparateLeft(s, '/')); end; function TSSLOpenSSL.GetPeerNameHash: cardinal; {pf} var cert: PX509; begin if not assigned(FSsl) then begin Result := 0; Exit; end; cert := SSLGetPeerCertificate(Fssl); try if not assigned(cert) then begin Result := 0; Exit; end; Result := X509NameHash(X509GetSubjectName(cert)); finally X509Free(cert); end; end; function TSSLOpenSSL.GetPeerIssuer: string; var cert: PX509; s: ansistring; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(4096); Result := X509NameOneline(X509GetIssuerName(cert), sb, 4096); {$ELSE} setlength(s, 4096); Result := X509NameOneline(X509GetIssuerName(cert), s, Length(s)); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetPeerFingerprint: ansistring; var cert: PX509; x: integer; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(EVP_MAX_MD_SIZE); X509Digest(cert, EvpGetDigestByName('MD5'), sb, x); sb.Length := x; Result := sb.ToString; {$ELSE} setlength(Result, EVP_MAX_MD_SIZE); X509Digest(cert, EvpGetDigestByName('MD5'), Result, x); SetLength(Result, x); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetCertInfo: string; var cert: PX509; x, y: integer; b: PBIO; s: AnsiString; {$IFDEF CIL} sb: stringbuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; try {pf} b := BioNew(BioSMem); try X509Print(b, cert); x := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(x); y := bioread(b, sb, x); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s,x); y := bioread(b,s,x); if y > 0 then setlength(s, y); {$ENDIF} Result := ReplaceString(s, LF, CRLF); finally BioFreeAll(b); end; {pf} finally X509Free(cert); end; {/pf} end; function TSSLOpenSSL.GetCipherName: string; begin if not assigned(FSsl) then Result := '' else Result := SslCipherGetName(SslGetCurrentCipher(FSsl)); end; function TSSLOpenSSL.GetCipherBits: integer; var x: integer; begin if not assigned(FSsl) then Result := 0 else Result := SSLCipherGetBits(SslGetCurrentCipher(FSsl), x); end; function TSSLOpenSSL.GetCipherAlgBits: integer; begin if not assigned(FSsl) then Result := 0 else SSLCipherGetBits(SslGetCurrentCipher(FSsl), Result); end; function TSSLOpenSSL.GetVerifyCert: integer; begin if not assigned(FSsl) then Result := 1 else Result := SslGetVerifyResult(FSsl); end; {==============================================================================} initialization if InitSSLInterface then SSLImplementation := TSSLOpenSSL; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_gnutls_lib.pas�����������������������������������������0000644�0001750�0000144�00000024311�15104114162�023056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.000.000 | |==============================================================================| | Content: SSL support by GnuTLS | |==============================================================================| | Copyright (C) 2013-2023 Alexander Koblov <alexx2000@mail.ru> | | | | The GnuTLS 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 library 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, see <https://www.gnu.org/licenses/> | |==============================================================================} unit ssl_gnutls_lib; {$mode delphi} {$packrecords c} interface uses CTypes; const GNUTLS_E_SUCCESS = 0; GNUTLS_E_AGAIN = -28; GNUTLS_E_INTERRUPTED = -52; type gnutls_protocol_t = ( GNUTLS_SSL3 = 1, GNUTLS_TLS1_0, GNUTLS_TLS1_1, GNUTLS_TLS1_2, GNUTLS_TLS1_3, GNUTLS_VERSION_UNKNOWN = $ff ) ; gnutls_cipher_algorithm_t = ( GNUTLS_CIPHER_NULL = 1, GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_AES_256_CBC, GNUTLS_CIPHER_ARCFOUR_40, GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_CIPHER_RC2_40_CBC = 90, GNUTLS_CIPHER_DES_CBC ); gnutls_kx_algorithm_t = ( GNUTLS_KX_RSA = 1, GNUTLS_KX_DHE_DSS, GNUTLS_KX_DHE_RSA, GNUTLS_KX_ANON_DH, GNUTLS_KX_SRP, GNUTLS_KX_RSA_EXPORT, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS, GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK ); gnutls_mac_algorithm_t = ( GNUTLS_MAC_UNKNOWN = 0, GNUTLS_MAC_NULL = 1, GNUTLS_MAC_MD5, GNUTLS_MAC_SHA1, GNUTLS_MAC_RMD160, GNUTLS_MAC_MD2, GNUTLS_MAC_SHA256, GNUTLS_MAC_SHA384, GNUTLS_MAC_SHA512 ); gnutls_compression_method_t = ( GNUTLS_COMP_NULL = 1, GNUTLS_COMP_DEFLATE, GNUTLS_COMP_LZO ); gnutls_certificate_type_t = ( GNUTLS_CRT_X509 = 1, GNUTLS_CRT_OPENPGP ); gnutls_init_flags_t = ( GNUTLS_SERVER = 1, GNUTLS_CLIENT ); gnutls_credentials_type_t = ( GNUTLS_CRD_CERTIFICATE = 1, GNUTLS_CRD_ANON, GNUTLS_CRD_SRP, GNUTLS_CRD_PSK, GNUTLS_CRD_IA ); gnutls_x509_crt_fmt_t = ( GNUTLS_X509_FMT_DER = 0, GNUTLS_X509_FMT_PEM = 1 ); gnutls_close_request_t = ( GNUTLS_SHUT_RDWR = 0, GNUTLS_SHUT_WR = 1 ); type gnutls_datum_t = record data: pcuchar; size: cuint; end; gnutls_datum_ptr_t = ^gnutls_datum_t; type gnutls_session_st = record end; gnutls_session_t = ^gnutls_session_st; gnutls_transport_ptr_t = type UIntPtr; gnutls_session_ptr_t = ^gnutls_session_t; gnutls_certificate_credentials_st = record end; gnutls_certificate_credentials_t = ^gnutls_certificate_credentials_st; var gnutls_global_init: function(): cint; cdecl; gnutls_init: function(session: gnutls_session_ptr_t; flags: gnutls_init_flags_t): cint; cdecl; gnutls_deinit: procedure(session: gnutls_session_t); cdecl; gnutls_priority_set_direct: function(session: gnutls_session_t; const priorities: PAnsiChar; const err_pos: PPAnsiChar): cint; cdecl; gnutls_credentials_set: function(session: gnutls_session_t; cred_type: gnutls_credentials_type_t; cred: Pointer): cint; cdecl; gnutls_certificate_set_x509_trust_file: function(res: gnutls_certificate_credentials_t; const CAFILE: PAnsiChar; crt_type: gnutls_x509_crt_fmt_t): cint; cdecl; gnutls_certificate_set_x509_key_file: function(res: gnutls_certificate_credentials_t; const CERTFILE: PAnsiChar; const KEYFILE: PAnsiChar; crt_type: gnutls_x509_crt_fmt_t): cint; cdecl; gnutls_certificate_allocate_credentials: function(out res: gnutls_certificate_credentials_t): cint; cdecl; gnutls_certificate_free_credentials: procedure(sc: gnutls_certificate_credentials_t); cdecl; gnutls_free: procedure(ptr: Pointer); cdecl; gnutls_session_get_data2: function(session: gnutls_session_t; data: gnutls_datum_ptr_t): cint; cdecl; gnutls_session_set_data: function(session: gnutls_session_t; session_data: Pointer; session_data_size: csize_t): cint; cdecl; gnutls_transport_set_ptr: procedure(session: gnutls_session_t; ptr: gnutls_transport_ptr_t); cdecl; gnutls_record_check_pending: function(session: gnutls_session_t): csize_t; cdecl; gnutls_handshake: function(session: gnutls_session_t): cint; cdecl; gnutls_bye: function(session: gnutls_session_t; how: gnutls_close_request_t): cint; cdecl; gnutls_record_send: function(session: gnutls_session_t; const data: Pointer; sizeofdata: csize_t): PtrInt; cdecl; gnutls_record_recv: function(session: gnutls_session_t; data: Pointer; sizeofdata: csize_t): PtrInt; cdecl; gnutls_protocol_get_name: function(version: gnutls_protocol_t): PAnsiChar; cdecl; gnutls_protocol_get_version: function(session: gnutls_session_t): gnutls_protocol_t; cdecl; gnutls_cipher_get: function(session: gnutls_session_t): gnutls_cipher_algorithm_t; cdecl; gnutls_kx_get: function(session: gnutls_session_t): gnutls_kx_algorithm_t; cdecl; gnutls_mac_get: function(session: gnutls_session_t): gnutls_mac_algorithm_t; cdecl; gnutls_compression_get: function(session: gnutls_session_t): gnutls_compression_method_t; cdecl; gnutls_certificate_type_get: function(session: gnutls_session_t): gnutls_certificate_type_t; cdecl; gnutls_cipher_suite_get_name: function(kx_algorithm: gnutls_kx_algorithm_t; cipher_algorithm: gnutls_cipher_algorithm_t; mac_algorithm: gnutls_mac_algorithm_t): PAnsiChar; cdecl; gnutls_cipher_get_key_size: function(algorithm: gnutls_cipher_algorithm_t): csize_t; cdecl; gnutls_strerror: function(error: cint): PAnsiChar; cdecl; gnutls_check_version: function(const req_version: PAnsiChar): PAnsiChar; cdecl; function InitSSLInterface: Boolean; implementation uses SysUtils, DynLibs; function SafeGetProcAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer; begin Result:= GetProcedureAddress(Lib, ProcName); if (Result = nil) then raise Exception.Create(EmptyStr); end; function InitSSLInterface: Boolean; const libgnutls: array[0..2] of String = ('30', '28', '26'); var index: Integer; gnutls: TLibHandle; begin for index:= Low(libgnutls) to High(libgnutls) do begin gnutls:= LoadLibrary('libgnutls.so.' + libgnutls[index]); if gnutls <> NilHandle then Break; end; Result:= (gnutls <> NilHandle); if Result then try @gnutls_check_version:= SafeGetProcAddress(gnutls, 'gnutls_check_version'); if (gnutls_check_version('3.0.0') = nil) then raise Exception.Create(EmptyStr); @gnutls_global_init:= SafeGetProcAddress(gnutls, 'gnutls_global_init'); @gnutls_init:= SafeGetProcAddress(gnutls, 'gnutls_init'); @gnutls_deinit:= SafeGetProcAddress(gnutls, 'gnutls_deinit'); @gnutls_priority_set_direct:= SafeGetProcAddress(gnutls, 'gnutls_priority_set_direct'); @gnutls_credentials_set:= SafeGetProcAddress(gnutls, 'gnutls_credentials_set'); @gnutls_certificate_set_x509_trust_file:= SafeGetProcAddress(gnutls, 'gnutls_certificate_set_x509_trust_file'); @gnutls_certificate_set_x509_key_file:= SafeGetProcAddress(gnutls, 'gnutls_certificate_set_x509_key_file'); @gnutls_certificate_allocate_credentials:= SafeGetProcAddress(gnutls, 'gnutls_certificate_allocate_credentials'); @gnutls_certificate_free_credentials:= SafeGetProcAddress(gnutls, 'gnutls_certificate_free_credentials'); @gnutls_free:= SafeGetProcAddress(gnutls, 'gnutls_free'); @gnutls_session_get_data2:= SafeGetProcAddress(gnutls, 'gnutls_session_get_data2'); @gnutls_session_set_data:= SafeGetProcAddress(gnutls, 'gnutls_session_set_data'); @gnutls_transport_set_ptr:= SafeGetProcAddress(gnutls, 'gnutls_transport_set_ptr'); @gnutls_record_check_pending:= SafeGetProcAddress(gnutls, 'gnutls_record_check_pending'); @gnutls_handshake:= SafeGetProcAddress(gnutls, 'gnutls_handshake'); @gnutls_bye:= SafeGetProcAddress(gnutls, 'gnutls_bye'); @gnutls_record_send:= SafeGetProcAddress(gnutls, 'gnutls_record_send'); @gnutls_record_recv:= SafeGetProcAddress(gnutls, 'gnutls_record_recv'); @gnutls_protocol_get_name:= SafeGetProcAddress(gnutls, 'gnutls_protocol_get_name'); @gnutls_protocol_get_version:= SafeGetProcAddress(gnutls, 'gnutls_protocol_get_version'); @gnutls_cipher_get:= SafeGetProcAddress(gnutls, 'gnutls_cipher_get'); @gnutls_kx_get:= SafeGetProcAddress(gnutls, 'gnutls_kx_get'); @gnutls_mac_get:= SafeGetProcAddress(gnutls, 'gnutls_mac_get'); @gnutls_compression_get:= SafeGetProcAddress(gnutls, 'gnutls_compression_get'); @gnutls_certificate_type_get:= SafeGetProcAddress(gnutls, 'gnutls_certificate_type_get'); @gnutls_cipher_suite_get_name:= SafeGetProcAddress(gnutls, 'gnutls_cipher_suite_get_name'); @gnutls_cipher_get_key_size:= SafeGetProcAddress(gnutls, 'gnutls_cipher_get_key_size'); @gnutls_strerror:= SafeGetProcAddress(gnutls, 'gnutls_strerror'); if (gnutls_global_init() <> GNUTLS_E_SUCCESS) then raise Exception.Create(EmptyStr); except Result:= False; FreeLibrary(gnutls); end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssl_gnutls.pas���������������������������������������������0000644�0001750�0000144�00000027164�15104114162�022241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.000.000 | |==============================================================================| | Content: SSL support by GnuTLS | |==============================================================================| | Copyright (C) 2013-2023 Alexander Koblov <alexx2000@mail.ru> | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (C) 2005-2023. | | Portions created by Petr Fejfar are Copyright (C) 2011-2012. | | All Rights Reserved. | |==============================================================================} {:@abstract(SSL plugin for GnuTLS) Compatibility with GnuTLS versions: 3.0.0+ GnuTLS libraries are loaded dynamicly - you not need GnuTLS librares even you compile your application with this unit. SSL just not working when you not have GnuTLS libraries. } {$MODE DELPHI} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit ssl_gnutls; interface uses SysUtils, Classes, blcksock, synsock, synautil, ssl_gnutls_lib; type {:@abstract(class implementing GnuTLS SSL plugin.) Instance of this class will be created for each @link(TTCPBlockSocket). You not need to create instance of this class, all is done by Synapse itself!} { TSSLGnuTLS } TSSLGnuTLS = class(TCustomSSL) private FShutdown: Integer; FDatum: gnutls_datum_t; FSession: gnutls_session_t; FPriorities: array[Byte] of AnsiChar; FCredentials: gnutls_certificate_credentials_t; protected function Init: Boolean; function DeInit: Boolean; function Prepare: Boolean; function SSLCheck: Boolean; public {:See @inherited} constructor Create(const Value: TTCPBlockSocket); override; destructor Destroy; override; {:See @inherited} function LibVersion: String; override; {:See @inherited} function LibName: String; override; {:See @inherited} function Connect: boolean; override; {:See @inherited} function Shutdown: boolean; override; {:See @inherited} function BiShutdown: boolean; override; {:See @inherited} function SendBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function WaitingData: Integer; override; {:See @inherited} function GetSSLVersion: string; override; {:See @inherited} function GetCipherName: string; override; {:See @inherited} function GetCipherBits: integer; override; {:See @inherited} function GetCipherAlgBits: integer; override; end; implementation {==============================================================================} constructor TSSLGnuTLS.Create(const Value: TTCPBlockSocket); begin inherited Create(Value); end; destructor TSSLGnuTLS.Destroy; begin DeInit; inherited Destroy; end; function TSSLGnuTLS.LibVersion: String; begin Result := 'GnuTLS ' + gnutls_check_version('3.0.0'); end; function TSSLGnuTLS.LibName: String; begin Result := 'ssl_gnutls'; end; function TSSLGnuTLS.Init: Boolean; begin Result := False; FLastError := 0; FLastErrorDesc := EmptyStr; case FSSLType of LT_SSLv3: FPriorities := 'NONE:+VERS-SSL3.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; LT_TLSv1: FPriorities := 'NONE:+VERS-TLS1.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; LT_TLSv1_1: FPriorities := 'NONE:+VERS-TLS1.1:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; LT_TLSv1_2: FPriorities := 'NONE:+VERS-TLS1.2:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; LT_TLSv1_3: FPriorities := 'NONE:+VERS-TLS1.3:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; LT_all: FPriorities := 'NONE:+VERS-TLS-ALL:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; else Exit; end; FLastError := gnutls_certificate_allocate_credentials(FCredentials); if not SSLCheck then Exit; FLastError := gnutls_init(@FSession, GNUTLS_CLIENT); if not SSLCheck then Exit; FLastError := gnutls_priority_set_direct(FSession, FPriorities, nil); if not SSLCheck then Exit; FLastError := gnutls_credentials_set(FSession, GNUTLS_CRD_CERTIFICATE, FCredentials); if not SSLCheck then Exit; if Length(FCertificateFile) > 0 then begin gnutls_certificate_set_x509_trust_file(FCredentials, PAnsiChar(FCertificateFile), GNUTLS_X509_FMT_PEM); end; if Length(FPrivateKeyFile) > 0 then begin gnutls_certificate_set_x509_key_file(FCredentials, PAnsiChar(FCertificateFile), PAnsiChar(FPrivateKeyFile), GNUTLS_X509_FMT_PEM); end; Result := True; end; function TSSLGnuTLS.DeInit: Boolean; begin Result := True; if Assigned(FSessionNew) then begin gnutls_free(FDatum.data); FSessionNew := nil; FDatum.data := nil; FDatum.size := 0 end; if Assigned(FCredentials) then begin gnutls_certificate_free_credentials(FCredentials); FCredentials := nil; end; if Assigned(FSession) then begin gnutls_deinit(FSession); FSession := nil end; FSSLEnabled := False; end; function TSSLGnuTLS.Prepare: Boolean; begin DeInit; if Init then Result := True else begin DeInit; Result := False; end; end; function TSSLGnuTLS.SSLCheck: Boolean; var P : PAnsiChar; begin if FLastError = GNUTLS_E_SUCCESS then begin Result := True; FLastErrorDesc := EmptyStr; end else begin Result := False; P := gnutls_strerror(FLastError); FLastErrorDesc := StrPas(P); end; end; function TSSLGnuTLS.Connect: boolean; var B: Boolean; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; if Prepare then begin gnutls_transport_set_ptr(FSession, gnutls_transport_ptr_t(FSocket.Socket)); // Reuse session if Assigned(FSessionOld) then begin gnutls_session_set_data(FSession, gnutls_datum_ptr_t(FSessionOld)^.data, gnutls_datum_ptr_t(FSessionOld)^.size); end; // do blocking call of SSL_Connect if FSocket.ConnectionTimeout <= 0 then begin repeat FLastError := gnutls_handshake(FSession); until (FLastError <> GNUTLS_E_AGAIN) and (FLastError <> GNUTLS_E_INTERRUPTED); end // do non-blocking call of SSL_Connect else begin B := FSocket.NonBlockMode; FSocket.NonBlockMode := True; repeat FLastError := gnutls_handshake(FSession); until (FLastError <> GNUTLS_E_AGAIN) and (FLastError <> GNUTLS_E_INTERRUPTED); FSocket.NonBlockMode := B; end; if SSLCheck then begin if (FSessionOld = nil) then begin if (gnutls_session_get_data2(FSession, @FDatum) = GNUTLS_E_SUCCESS) then begin FSessionNew := @FDatum; end; end; FSSLEnabled := True; FShutdown := 0; Result := True; end; end; end; function TSSLGnuTLS.Shutdown: boolean; begin Result := BiShutdown; end; function TSSLGnuTLS.BiShutdown: boolean; begin if (FShutdown > 0) then gnutls_bye(FSession, GNUTLS_SHUT_WR) else begin gnutls_bye(FSession, GNUTLS_SHUT_RDWR); end; Inc(FShutdown); DeInit; Result := True; end; function TSSLGnuTLS.SendBuffer(Buffer: TMemory; Len: Integer): Integer; begin FLastError := 0; FLastErrorDesc := EmptyStr; repeat Result := gnutls_record_send(FSession, Buffer , Len); until (Result <> GNUTLS_E_AGAIN) and (Result <> GNUTLS_E_INTERRUPTED); if (Result < 0) then begin FLastError := Result; Result := 0; end; end; function TSSLGnuTLS.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; begin FLastError := 0; FLastErrorDesc := EmptyStr; repeat Result := gnutls_record_recv(FSession, Buffer , Len); until (Result <> GNUTLS_E_AGAIN) and (Result <> GNUTLS_E_INTERRUPTED); if (Result < 0) then begin FLastError := Result; Result := 0; end; end; function TSSLGnuTLS.WaitingData: Integer; begin Result := gnutls_record_check_pending(FSession); end; function TSSLGnuTLS.GetSSLVersion: string; begin if (FSession = nil) then Result := EmptyStr else Result := gnutls_protocol_get_name(gnutls_protocol_get_version(FSession)); end; function TSSLGnuTLS.GetCipherName: string; var kx: gnutls_kx_algorithm_t; mac: gnutls_mac_algorithm_t; cipher: gnutls_cipher_algorithm_t; begin if (FSession = nil) then Result := EmptyStr else begin kx := gnutls_kx_get(FSession); mac := gnutls_mac_get(FSession); cipher := gnutls_cipher_get(FSession); Result := gnutls_cipher_suite_get_name(kx, cipher, mac); end; end; function TSSLGnuTLS.GetCipherBits: integer; begin Result := GetCipherAlgBits; end; function TSSLGnuTLS.GetCipherAlgBits: integer; begin if (FSession = nil) then Result := 0 else Result := (gnutls_cipher_get_key_size(gnutls_cipher_get(FSession)) * 8); end; {==============================================================================} initialization if (SSLImplementation = TSSLNone) and InitSSLInterface then SSLImplementation := TSSLGnuTLS; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ssfpc.inc��������������������������������������������������0000644�0001750�0000144�00000075655�15104114162�021160� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.001.005 | |==============================================================================| | Content: Socket Independent Platform Layer - FreePascal definition include | |==============================================================================| | Copyright (c)2006-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2006-2013. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} {$IFDEF FPC} {For FreePascal 2.x.x} //{$DEFINE FORCEOLDAPI} {Note about define FORCEOLDAPI: If you activate this compiler directive, then is allways used old socket API for name resolution. If you leave this directive inactive, then the new API is used, when running system allows it. For IPv6 support you must have new API! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$ifdef FreeBSD} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} {$ifdef darwin} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} {$ifdef haiku} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} interface uses SyncObjs, SysUtils, Classes, synafpc, BaseUnix, Unix, termio, sockets, netdb; function InitSocketInterface(stack: string): Boolean; function DestroySocketInterface: Boolean; const DLLStackName = ''; WinsockLevel = $0202; cLocalHost = '127.0.0.1'; cAnyHost = '0.0.0.0'; c6AnyHost = '::0'; c6Localhost = '::1'; cLocalHostStr = 'localhost'; type TSocket = longint; TAddrFamily = integer; TMemory = pointer; type TFDSet = Baseunix.TFDSet; PFDSet = ^TFDSet; Ptimeval = Baseunix.ptimeval; Ttimeval = Baseunix.ttimeval; const FIONREAD = termio.FIONREAD; FIONBIO = termio.FIONBIO; {$IFNDEF HAIKU} FIOASYNC = termio.FIOASYNC; {$ENDIF} const IPPROTO_IP = 0; { Dummy } IPPROTO_ICMP = 1; { Internet Control Message Protocol } IPPROTO_IGMP = 2; { Internet Group Management Protocol} IPPROTO_TCP = 6; { TCP } IPPROTO_UDP = 17; { User Datagram Protocol } IPPROTO_IPV6 = 41; IPPROTO_ICMPV6 = 58; IPPROTO_RM = 113; IPPROTO_RAW = 255; IPPROTO_MAX = 256; type PInAddr = ^TInAddr; TInAddr = sockets.in_addr; PSockAddrIn = ^TSockAddrIn; TSockAddrIn = sockets.TInetSockAddr; TIP_mreq = record imr_multiaddr: TInAddr; // IP multicast address of group imr_interface: TInAddr; // local IP address of interface end; PInAddr6 = ^TInAddr6; TInAddr6 = sockets.Tin6_addr; PSockAddrIn6 = ^TSockAddrIn6; TSockAddrIn6 = sockets.TInetSockAddr6; TIPv6_mreq = record ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. ipv6mr_interface: integer; // Interface index. end; const INADDR_ANY = $00000000; INADDR_LOOPBACK = $7F000001; INADDR_BROADCAST = $FFFFFFFF; INADDR_NONE = $FFFFFFFF; ADDR_ANY = INADDR_ANY; INVALID_SOCKET = TSocket(NOT(0)); SOCKET_ERROR = -1; Const IP_TOS = sockets.IP_TOS; { int; IP type of service and precedence. } IP_TTL = sockets.IP_TTL; { int; IP time to live. } IP_HDRINCL = sockets.IP_HDRINCL; { int; Header is included with data. } IP_OPTIONS = sockets.IP_OPTIONS; { ip_opts; IP per-packet options. } // IP_ROUTER_ALERT = sockets.IP_ROUTER_ALERT; { bool } IP_RECVOPTS = sockets.IP_RECVOPTS; { bool } IP_RETOPTS = sockets.IP_RETOPTS; { bool } // IP_PKTINFO = sockets.IP_PKTINFO; { bool } // IP_PKTOPTIONS = sockets.IP_PKTOPTIONS; // IP_PMTUDISC = sockets.IP_PMTUDISC; { obsolete name? } // IP_MTU_DISCOVER = sockets.IP_MTU_DISCOVER; { int; see below } // IP_RECVERR = sockets.IP_RECVERR; { bool } // IP_RECVTTL = sockets.IP_RECVTTL; { bool } // IP_RECVTOS = sockets.IP_RECVTOS; { bool } IP_MULTICAST_IF = sockets.IP_MULTICAST_IF; { in_addr; set/get IP multicast i/f } IP_MULTICAST_TTL = sockets.IP_MULTICAST_TTL; { u_char; set/get IP multicast ttl } IP_MULTICAST_LOOP = sockets.IP_MULTICAST_LOOP; { i_char; set/get IP multicast loopback } IP_ADD_MEMBERSHIP = sockets.IP_ADD_MEMBERSHIP; { ip_mreq; add an IP group membership } IP_DROP_MEMBERSHIP = sockets.IP_DROP_MEMBERSHIP; { ip_mreq; drop an IP group membership } SOL_SOCKET = sockets.SOL_SOCKET; SO_DEBUG = sockets.SO_DEBUG; SO_REUSEADDR = sockets.SO_REUSEADDR; SO_TYPE = sockets.SO_TYPE; SO_ERROR = sockets.SO_ERROR; SO_DONTROUTE = sockets.SO_DONTROUTE; SO_BROADCAST = sockets.SO_BROADCAST; SO_SNDBUF = sockets.SO_SNDBUF; SO_RCVBUF = sockets.SO_RCVBUF; SO_KEEPALIVE = sockets.SO_KEEPALIVE; SO_OOBINLINE = sockets.SO_OOBINLINE; // SO_NO_CHECK = sockets.SO_NO_CHECK; // SO_PRIORITY = sockets.SO_PRIORITY; SO_LINGER = sockets.SO_LINGER; // SO_BSDCOMPAT = sockets.SO_BSDCOMPAT; // SO_REUSEPORT = sockets.SO_REUSEPORT; // SO_PASSCRED = sockets.SO_PASSCRED; // SO_PEERCRED = sockets.SO_PEERCRED; SO_RCVLOWAT = sockets.SO_RCVLOWAT; SO_SNDLOWAT = sockets.SO_SNDLOWAT; SO_RCVTIMEO = sockets.SO_RCVTIMEO; SO_SNDTIMEO = sockets.SO_SNDTIMEO; { Security levels - as per NRL IPv6 - don't actually do anything } // SO_SECURITY_AUTHENTICATION = sockets.SO_SECURITY_AUTHENTICATION; // SO_SECURITY_ENCRYPTION_TRANSPORT = sockets.SO_SECURITY_ENCRYPTION_TRANSPORT; // SO_SECURITY_ENCRYPTION_NETWORK = sockets.SO_SECURITY_ENCRYPTION_NETWORK; // SO_BINDTODEVICE = sockets.SO_BINDTODEVICE; { Socket filtering } // SO_ATTACH_FILTER = sockets.SO_ATTACH_FILTER; // SO_DETACH_FILTER = sockets.SO_DETACH_FILTER; {$IFDEF DARWIN} SO_NOSIGPIPE = $1022; {$ENDIF} SOMAXCONN = 1024; {$IFDEF HAIKU} IPV6_UNICAST_HOPS = 27; {$ELSE} IPV6_UNICAST_HOPS = sockets.IPV6_UNICAST_HOPS; {$ENDIF} IPV6_MULTICAST_IF = sockets.IPV6_MULTICAST_IF; IPV6_MULTICAST_HOPS = sockets.IPV6_MULTICAST_HOPS; IPV6_MULTICAST_LOOP = sockets.IPV6_MULTICAST_LOOP; {$IFDEF HAIKU} IPV6_JOIN_GROUP = 28; IPV6_LEAVE_GROUP = 29; {$ELSE} IPV6_JOIN_GROUP = sockets.IPV6_JOIN_GROUP; IPV6_LEAVE_GROUP = sockets.IPV6_LEAVE_GROUP; {$ENDIF} const SOCK_STREAM = 1; { stream socket } SOCK_DGRAM = 2; { datagram socket } SOCK_RAW = 3; { raw-protocol interface } SOCK_RDM = 4; { reliably-delivered message } SOCK_SEQPACKET = 5; { sequenced packet stream } { TCP options. } TCP_NODELAY = $0001; { Address families. } AF_UNSPEC = 0; { unspecified } AF_INET = sockets.AF_INET; { internetwork: UDP, TCP, etc. } AF_INET6 = sockets.AF_INET6; { Internetwork Version 6 } AF_MAX = 24; { Protocol families, same as address families for now. } PF_UNSPEC = AF_UNSPEC; PF_INET = AF_INET; PF_INET6 = AF_INET6; PF_MAX = AF_MAX; type { Structure used for manipulating linger option. } PLinger = ^TLinger; TLinger = packed record l_onoff: integer; l_linger: integer; end; const MSG_OOB = sockets.MSG_OOB; // Process out-of-band data. MSG_PEEK = sockets.MSG_PEEK; // Peek at incoming messages. {$if defined(DARWIN)} MSG_NOSIGNAL = $20000; // Do not generate SIGPIPE. // Works under MAC OS X, but is undocumented, // So FPC doesn't include it {$elseif defined(HAIKU)} MSG_NOSIGNAL = $0800; {$else} MSG_NOSIGNAL = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE. {$endif} {$IF DEFINED(HAIKU)} const ESysESTALE = (B_POSIX_ERROR_BASE + 40); ESysENOTSOCK = (B_POSIX_ERROR_BASE + 44); ESysEHOSTDOWN = (B_POSIX_ERROR_BASE + 45); ESysEDESTADDRREQ = (B_POSIX_ERROR_BASE + 48); ESysEDQUOT = (B_POSIX_ERROR_BASE + 49); // Fake error codes ESysEUSERS = (B_POSIX_ERROR_BASE + 128); ESysEREMOTE = (B_POSIX_ERROR_BASE + 129); ESysETOOMANYREFS = (B_POSIX_ERROR_BASE + 130); ESysESOCKTNOSUPPORT = (B_POSIX_ERROR_BASE + 131); {$ENDIF} const WSAEINTR = ESysEINTR; WSAEBADF = ESysEBADF; WSAEACCES = ESysEACCES; WSAEFAULT = ESysEFAULT; WSAEINVAL = ESysEINVAL; WSAEMFILE = ESysEMFILE; WSAEWOULDBLOCK = ESysEWOULDBLOCK; WSAEINPROGRESS = ESysEINPROGRESS; WSAEALREADY = ESysEALREADY; WSAENOTSOCK = ESysENOTSOCK; WSAEDESTADDRREQ = ESysEDESTADDRREQ; WSAEMSGSIZE = ESysEMSGSIZE; WSAEPROTOTYPE = ESysEPROTOTYPE; WSAENOPROTOOPT = ESysENOPROTOOPT; WSAEPROTONOSUPPORT = ESysEPROTONOSUPPORT; WSAESOCKTNOSUPPORT = ESysESOCKTNOSUPPORT; WSAEOPNOTSUPP = ESysEOPNOTSUPP; WSAEPFNOSUPPORT = ESysEPFNOSUPPORT; WSAEAFNOSUPPORT = ESysEAFNOSUPPORT; WSAEADDRINUSE = ESysEADDRINUSE; WSAEADDRNOTAVAIL = ESysEADDRNOTAVAIL; WSAENETDOWN = ESysENETDOWN; WSAENETUNREACH = ESysENETUNREACH; WSAENETRESET = ESysENETRESET; WSAECONNABORTED = ESysECONNABORTED; WSAECONNRESET = ESysECONNRESET; WSAENOBUFS = ESysENOBUFS; WSAEISCONN = ESysEISCONN; WSAENOTCONN = ESysENOTCONN; WSAESHUTDOWN = ESysESHUTDOWN; WSAETOOMANYREFS = ESysETOOMANYREFS; WSAETIMEDOUT = ESysETIMEDOUT; WSAECONNREFUSED = ESysECONNREFUSED; WSAELOOP = ESysELOOP; WSAENAMETOOLONG = ESysENAMETOOLONG; WSAEHOSTDOWN = ESysEHOSTDOWN; WSAEHOSTUNREACH = ESysEHOSTUNREACH; WSAENOTEMPTY = ESysENOTEMPTY; WSAEPROCLIM = -1; WSAEUSERS = ESysEUSERS; WSAEDQUOT = ESysEDQUOT; WSAESTALE = ESysESTALE; WSAEREMOTE = ESysEREMOTE; WSASYSNOTREADY = -2; WSAVERNOTSUPPORTED = -3; WSANOTINITIALISED = -4; WSAEDISCON = -5; WSAHOST_NOT_FOUND = 1; WSATRY_AGAIN = 2; WSANO_RECOVERY = 3; WSANO_DATA = -6; const WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128; type PWSAData = ^TWSAData; TWSAData = packed record wVersion: Word; wHighVersion: Word; szDescription: array[0..WSADESCRIPTION_LEN] of Char; szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; iMaxSockets: Word; iMaxUdpDg: Word; lpVendorInfo: PChar; end; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); var in6addr_any, in6addr_loopback : TInAddr6; procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); procedure FD_ZERO(var FDSet: TFDSet); {=============================================================================} var SynSockCS: SyncObjs.TCriticalSection; SockEnhancedApi: Boolean; SockWship6Api: Boolean; type TVarSin = packed record {$ifdef SOCK_HAS_SINLEN} sin_len : cuchar; {$endif} case integer of 0: (AddressFamily: sa_family_t); 1: ( case sin_family: sa_family_t of AF_INET: (sin_port: word; sin_addr: TInAddr; sin_zero: array[0..7] of Char); AF_INET6: (sin6_port: word; sin6_flowinfo: longword; sin6_addr: TInAddr6; sin6_scope_id: longword); ); end; function SizeOfVarSin(sin: TVarSin): integer; function WSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; function WSACleanup: Integer; function WSAGetLastError: Integer; function GetHostName: string; function Shutdown(s: TSocket; how: Integer): Integer; function SetSockOpt(s: TSocket; level, optname: Integer; optval: TMemory; optlen: Integer): Integer; function GetSockOpt(s: TSocket; level, optname: Integer; optval: TMemory; var optlen: Integer): Integer; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; function ntohs(netshort: word): word; function ntohl(netlong: longword): longword; function Listen(s: TSocket; backlog: Integer): Integer; function IoctlSocket(s: TSocket; cmd: DWORD; var arg: integer): Integer; function htons(hostshort: word): word; function htonl(hostlong: longword): longword; function GetSockName(s: TSocket; var name: TVarSin): Integer; function GetPeerName(s: TSocket; var name: TVarSin): Integer; function Connect(s: TSocket; const name: TVarSin): Integer; function CloseSocket(s: TSocket): Integer; function Bind(s: TSocket; const addr: TVarSin): Integer; function Accept(s: TSocket; var addr: TVarSin): TSocket; function Socket(af, Struc, Protocol: Integer): TSocket; function Select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; function IsNewApi(Family: integer): Boolean; function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; function GetSinIP(Sin: TVarSin): string; function GetSinPort(Sin: TVarSin): Integer; procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; {==============================================================================} implementation uses InitC; {$if defined(LINUX) or defined(OPENBSD)} {$define FIRST_ADDR_THEN_CANONNAME} {$elseif defined(FREEBSD) or defined(NETBSD) or defined(DRAGONFLY) or defined(SOLARIS) or defined(ANDROID) or defined(DARWIN) or defined(HAIKU)} {$define FIRST_CANONNAME_THEN_ADDR} {$else} {$error fatal 'Please consult the netdb.h file for your system to determine the order of ai_addr and ai_canonname'} {$endif} {$push}{$packrecords c} type PAddrInfo = ^addrinfo; addrinfo = record ai_flags: cint; {* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST *} ai_family: cint; {* PF_xxx *} ai_socktype: cint; {* SOCK_xxx *} ai_protocol: cint; {* 0 or IPPROTO_xxx for IPv4 and IPv6 *} ai_addrlen: TSockLen; {* length of ai_addr *} {$ifdef FIRST_CANONNAME_THEN_ADDR} ai_canonname: PAnsiChar; {* canonical name for hostname *} ai_addr: psockaddr; {* binary address *} {$endif} {$ifdef FIRST_ADDR_THEN_CANONNAME} ai_addr: psockaddr; {* binary address *} ai_canonname: PAnsiChar; {* canonical name for hostname *} {$endif} ai_next: PAddrInfo; {* next structure in linked list *} end; TAddrInfo = addrinfo; PPAddrInfo = ^PAddrInfo; {$pop} function getaddrinfo(name, service: PAnsiChar; hints: PAddrInfo; res: PPAddrInfo): cint; cdecl; external clib; procedure freeaddrinfo(ai: PAddrInfo); cdecl; external clib; function ResolveName(const HostName: String; Addresses: Pointer; MaxAddresses, Family: Integer): Integer; overload; var hints: TAddrInfo; res, ai: PAddrInfo; begin Result:= -1; if MaxAddresses = 0 then Exit; res:= nil; hints:= Default(TAddrInfo); hints.ai_family:= Family; hints.ai_socktype:= SOCK_STREAM; if (getaddrinfo(PAnsiChar(HostName), nil, @hints, @res) <> 0) or (res = nil) then Exit; ai:= res; Result:= 0; repeat if ai^.ai_family = Family then begin if Family = AF_INET then begin Move(PInetSockAddr(ai^.ai_addr)^.sin_addr, Addresses^, SizeOf(TInAddr)); Inc(PInAddr(Addresses)); end else begin Move(PInetSockAddr6(ai^.ai_addr)^.sin6_addr, Addresses^, SizeOf(TIn6Addr)); Inc(PIn6Addr(Addresses)); end; Inc(Result); end; ai:= ai^.ai_next; until (ai = nil) or (Result >= MaxAddresses); freeaddrinfo(res); end; function ResolveName(HostName: String; var Addresses: array of THostAddr): Integer; overload; begin Result:= ResolveName(HostName, @Addresses, Length(Addresses), AF_INET); end; function ResolveName6(HostName: String; var Addresses: array of THostAddr6): Integer; begin Result:= ResolveName(HostName, @Addresses, Length(Addresses), AF_INET6); end; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); end; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); end; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); end; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); end; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; begin Result := (a^.u6_addr8[0] = $FF); end; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; begin Result := (CompareMem( a, b, sizeof(TInAddr6))); end; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); end; procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); a^.u6_addr8[15] := 1; end; {=============================================================================} function WSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; begin with WSData do begin wVersion := wVersionRequired; wHighVersion := $202; szDescription := 'Synsock - Synapse Platform Independent Socket Layer'; szSystemStatus := 'Running on Unix/Linux by FreePascal'; iMaxSockets := 32768; iMaxUdpDg := 8192; end; Result := 0; end; function WSACleanup: Integer; begin Result := 0; end; function WSAGetLastError: Integer; begin Result := fpGetErrno; end; function FD_ISSET(Socket: TSocket; var fdset: TFDSet): Boolean; begin Result := fpFD_ISSET(socket, fdset) <> 0; end; procedure FD_SET(Socket: TSocket; var fdset: TFDSet); begin fpFD_SET(Socket, fdset); end; procedure FD_CLR(Socket: TSocket; var fdset: TFDSet); begin fpFD_CLR(Socket, fdset); end; procedure FD_ZERO(var fdset: TFDSet); begin fpFD_ZERO(fdset); end; {=============================================================================} function SizeOfVarSin(sin: TVarSin): integer; begin case sin.sin_family of AF_INET: Result := SizeOf(TSockAddrIn); AF_INET6: Result := SizeOf(TSockAddrIn6); else Result := 0; end; end; {=============================================================================} function Bind(s: TSocket; const addr: TVarSin): Integer; begin if fpBind(s, @addr, SizeOfVarSin(addr)) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function Connect(s: TSocket; const name: TVarSin): Integer; begin if fpConnect(s, @name, SizeOfVarSin(name)) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function GetSockName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := fpGetSockName(s, @name, @Len); end; function GetPeerName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := fpGetPeerName(s, @name, @Len); end; function GetHostName: string; begin Result := unix.GetHostName; end; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := fpSend(s, pointer(Buf), len, flags); end; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := fpRecv(s, pointer(Buf), len, flags); end; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; begin Result := fpSendTo(s, pointer(Buf), len, flags, @addrto, SizeOfVarSin(addrto)); end; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; var x: integer; begin x := SizeOf(from); Result := fpRecvFrom(s, pointer(Buf), len, flags, @from, @x); end; function Accept(s: TSocket; var addr: TVarSin): TSocket; var x: integer; begin x := SizeOf(addr); Result := fpAccept(s, @addr, @x); end; function Shutdown(s: TSocket; how: Integer): Integer; begin Result := fpShutdown(s, how); end; function SetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory; optlen: Integer): Integer; begin Result := fpsetsockopt(s, level, optname, pointer(optval), optlen); end; function GetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory; var optlen: Integer): Integer; begin Result := fpgetsockopt(s, level, optname, pointer(optval), @optlen); end; function ntohs(netshort: word): word; begin Result := sockets.ntohs(NetShort); end; function ntohl(netlong: longword): longword; begin Result := sockets.ntohl(NetLong); end; function Listen(s: TSocket; backlog: Integer): Integer; begin if fpListen(s, backlog) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function IoctlSocket(s: TSocket; cmd: DWORD; var arg: integer): Integer; begin Result := fpIoctl(s, cmd, @arg); end; function htons(hostshort: word): word; begin Result := sockets.htons(Hostshort); end; function htonl(hostlong: longword): longword; begin Result := sockets.htonl(HostLong); end; function CloseSocket(s: TSocket): Integer; begin Result := sockets.CloseSocket(s); end; function Socket(af, Struc, Protocol: Integer): TSocket; {$IFDEF DARWIN} var on_off: integer; {$ENDIF} begin Result := fpSocket(af, struc, protocol); // ##### Patch for Mac OS to avoid "Project XXX raised exception class 'External: SIGPIPE'" error. {$IFDEF DARWIN} if Result <> INVALID_SOCKET then begin on_off := 1; synsock.SetSockOpt(Result, integer(SOL_SOCKET), integer(SO_NOSIGPIPE), @on_off, SizeOf(integer)); end; {$ENDIF} end; function Select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; begin Result := fpSelect(nfds, readfds, writefds, exceptfds, timeout); end; {=============================================================================} function IsNewApi(Family: integer): Boolean; begin Result := SockEnhancedApi; if not Result then Result := (Family = AF_INET6) and SockWship6Api; end; function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; var TwoPass: boolean; f1, f2: integer; function GetAddr(f:integer): integer; var a4: array [1..1] of in_addr; a6: array [1..1] of Tin6_addr; he: THostEntry; begin Result := WSAEPROTONOSUPPORT; case f of AF_INET: begin if IP = cAnyHost then begin Sin.sin_family := AF_INET; Result := 0; end else begin if lowercase(IP) = cLocalHostStr then a4[1].s_addr := htonl(INADDR_LOOPBACK) else begin a4[1].s_addr := 0; Result := WSAHOST_NOT_FOUND; a4[1] := StrTonetAddr(IP); if a4[1].s_addr = INADDR_ANY then if GetHostByName(ip, he) then a4[1]:=HostToNet(he.Addr) else Resolvename(ip, a4); end; if a4[1].s_addr <> INADDR_ANY then begin Sin.sin_family := AF_INET; sin.sin_addr := a4[1]; Result := 0; end; end; end; AF_INET6: begin if IP = c6AnyHost then begin Sin.sin_family := AF_INET6; Result := 0; end else begin if lowercase(IP) = cLocalHostStr then SET_LOOPBACK_ADDR6(@a6[1]) else begin Result := WSAHOST_NOT_FOUND; SET_IN6_IF_ADDR_ANY(@a6[1]); a6[1] := StrTonetAddr6(IP); if IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then Resolvename6(ip, a6); end; if not IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then begin Sin.sin_family := AF_INET6; sin.sin6_addr := a6[1]; Result := 0; end; end; end; end; end; begin Result := 0; FillChar(Sin, Sizeof(Sin), 0); Sin.sin_port := htons(Resolveport(port, family, SockProtocol, SockType)); TwoPass := False; if Family = AF_UNSPEC then begin if PreferIP4 then begin f1 := AF_INET; f2 := AF_INET6; TwoPass := True; end else begin f2 := AF_INET; f1 := AF_INET6; TwoPass := True; end; end else f1 := Family; Result := GetAddr(f1); if Result <> 0 then if TwoPass then Result := GetAddr(f2); end; function GetSinIP(Sin: TVarSin): string; begin Result := ''; case sin.AddressFamily of AF_INET: begin result := NetAddrToStr(sin.sin_addr); end; AF_INET6: begin result := NetAddrToStr6(sin.sin6_addr); end; end; end; function GetSinPort(Sin: TVarSin): Integer; begin if (Sin.sin_family = AF_INET6) then Result := synsock.ntohs(Sin.sin6_port) else Result := synsock.ntohs(Sin.sin_port); end; procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); var x, n: integer; a4: array [1..255] of in_addr; a6: array [1..255] of Tin6_addr; he: THostEntry; begin IPList.Clear; if (family = AF_INET) or (family = AF_UNSPEC) then begin if lowercase(name) = cLocalHostStr then IpList.Add(cLocalHost) else begin a4[1] := StrTonetAddr(name); if a4[1].s_addr = INADDR_ANY then if GetHostByName(name, he) then begin a4[1]:=HostToNet(he.Addr); x := 1; end else x := Resolvename(name, a4) else x := 1; for n := 1 to x do IpList.Add(netaddrToStr(a4[n])); end; end; if (family = AF_INET6) or (family = AF_UNSPEC) then begin if lowercase(name) = cLocalHostStr then IpList.Add(c6LocalHost) else begin a6[1] := StrTonetAddr6(name); if IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then x := Resolvename6(name, a6) else x := 1; for n := 1 to x do IpList.Add(netaddrToStr6(a6[n])); end; end; if IPList.Count = 0 then IPList.Add(cLocalHost); end; function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; var ProtoEnt: TProtocolEntry; ServEnt: TServiceEntry; begin Result := StrToIntDef(Port, 0); if Result = 0 then begin ProtoEnt.Name := ''; GetProtocolByNumber(SockProtocol, ProtoEnt); ServEnt.port := 0; GetServiceByName(Port, ProtoEnt.Name, ServEnt); Result := ntohs(ServEnt.port); end; end; function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; var n: integer; a4: array [1..1] of in_addr; a6: array [1..1] of Tin6_addr; a: array [1..1] of string; begin Result := IP; a4[1] := StrToNetAddr(IP); if a4[1].s_addr <> INADDR_ANY then begin //why ResolveAddress need address in HOST order? :-O n := ResolveAddress(nettohost(a4[1]), a); if n > 0 then Result := a[1]; end else begin a6[1] := StrToNetAddr6(IP); n := ResolveAddress6(a6[1], a); if n > 0 then Result := a[1]; end; end; {=============================================================================} function InitSocketInterface(stack: string): Boolean; begin SockEnhancedApi := False; SockWship6Api := False; // Libc.Signal(Libc.SIGPIPE, TSignalHandler(Libc.SIG_IGN)); Result := True; end; function DestroySocketInterface: Boolean; begin Result := True; end; initialization begin SynSockCS := SyncObjs.TCriticalSection.Create; SET_IN6_IF_ADDR_ANY (@in6addr_any); SET_LOOPBACK_ADDR6 (@in6addr_loopback); end; finalization begin SynSockCS.Free; end; {$ENDIF} �����������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/license.txt������������������������������������������������0000644�0001750�0000144�00000004154�15104114162�021514� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright (c)1999-2002, Lukas Gebauer All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Lukas Gebauer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/ftpsend.pas������������������������������������������������0000644�0001750�0000144�00000154142�15104114162�021504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 004.000.000 | |==============================================================================| | Content: FTP client | |==============================================================================| | Copyright (c)1999-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 1999-2010. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Petr Esner <petr.esner@atlas.cz> | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {: @abstract(FTP client protocol) Used RFC: RFC-959, RFC-2228, RFC-2428 } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$TYPEINFO ON}// Borland changed defualt Visibility from Public to Published // and it requires RTTI to be generated $M+ {$M+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit ftpsend; interface uses SysUtils, Classes, blcksock, synautil, synaip, synsock; const cFtpProtocol = '21'; cFtpDataProtocol = '20'; {:Terminating value for TLogonActions} FTP_OK = 255; {:Terminating value for TLogonActions} FTP_ERR = 254; type {:Array for holding definition of logon sequence.} TLogonActions = array [0..17] of byte; {:Procedural type for OnStatus event. Sender is calling @link(TFTPSend) object. Value is FTP command or reply to this comand. (if it is reply, Response is @True).} TFTPStatus = procedure(Sender: TObject; Response: Boolean; const Value: string) of object; {: @abstract(Object for holding file information) parsed from directory listing of FTP server.} TFTPListRec = class(TObject) private FFileName: String; FDirectory: Boolean; FReadable: Boolean; FFileSize: int64; FFileTime: TDateTime; FOriginalLine: string; FMask: string; FPermission: String; public {: You can assign another TFTPListRec to this object.} procedure Assign(Value: TFTPListRec); virtual; {:name of file} property FileName: string read FFileName write FFileName; {:if name is subdirectory not file.} property Directory: Boolean read FDirectory write FDirectory; {:if you have rights to read} property Readable: Boolean read FReadable write FReadable; {:size of file in bytes} property FileSize: int64 read FFileSize write FFileSize; {:date and time of file. Local server timezone is used. Any timezone conversions was not done!} property FileTime: TDateTime read FFileTime write FFileTime; {:original unparsed line} property OriginalLine: string read FOriginalLine write FOriginalLine; {:mask what was used for parsing} property Mask: string read FMask write FMask; {:permission string (depending on used mask!)} property Permission: string read FPermission write FPermission; end; {:@abstract(This is TList of TFTPListRec objects.) This object is used for holding lististing of all files information in listed directory on FTP server.} TFTPList = class(TObject) protected FList: TList; FLines: TStringList; FMasks: TStringList; FUnparsedLines: TStringList; Monthnames: string; BlockSize: string; DirFlagValue: string; FileName: string; VMSFileName: string; Day: string; Month: string; ThreeMonth: string; YearTime: string; Year: string; Hours: string; HoursModif: Ansistring; Minutes: string; Seconds: string; Size: Ansistring; Permissions: Ansistring; DirFlag: string; function GetListItem(Index: integer): TFTPListRec; virtual; function ParseEPLF(Value: string): Boolean; virtual; procedure ClearStore; virtual; function ParseByMask(Value, NextValue, Mask: ansistring): Integer; virtual; function CheckValues: Boolean; virtual; procedure FillRecord(const Value: TFTPListRec); virtual; public {:Constructor. You not need create this object, it is created by TFTPSend class as their property.} constructor Create; destructor Destroy; override; {:Clear list.} procedure Clear; virtual; {:count of holded @link(TFTPListRec) objects} function Count: integer; virtual; {:Assigns one list to another} procedure Assign(Value: TFTPList); virtual; {:try to parse raw directory listing in @link(lines) to list of @link(TFTPListRec).} procedure ParseLines; virtual; {:By this property you have access to list of @link(TFTPListRec). This is for compatibility only. Please, use @link(Items) instead.} property List: TList read FList; {:By this property you have access to list of @link(TFTPListRec).} property Items[Index: Integer]: TFTPListRec read GetListItem; default; {:Set of lines with RAW directory listing for @link(parseLines)} property Lines: TStringList read FLines; {:Set of masks for directory listing parser. It is predefined by default, however you can modify it as you need. (for example, you can add your own definition mask.) Mask is same as mask used in TotalCommander.} property Masks: TStringList read FMasks; {:After @link(ParseLines) it holding lines what was not sucessfully parsed.} property UnparsedLines: TStringList read FUnparsedLines; end; {:@abstract(Implementation of FTP protocol.) Note: Are you missing properties for setting Username and Password? Look to parent @link(TSynaClient) object! (Username and Password have default values for "anonymous" FTP login) Are you missing properties for specify server address and port? Look to parent @link(TSynaClient) too!} TFTPSend = class(TSynaClient) protected FOnStatus: TFTPStatus; FSock: TTCPBlockSocket; FDSock: TTCPBlockSocket; FResultCode: Integer; FResultString: string; FFullResult: TStringList; FAccount: string; FFWHost: string; FFWPort: string; FFWUsername: string; FFWPassword: string; FFWMode: integer; FDataStream: TMemoryStream; FDataIP: string; FDataPort: string; FDirectFile: Boolean; FDirectFileName: string; FCanResume: Boolean; FPassiveMode: Boolean; FForceDefaultPort: Boolean; FForceOldPort: Boolean; FFtpList: TFTPList; FBinaryMode: Boolean; FAutoTLS: Boolean; FIsTLS: Boolean; FIsDataTLS: Boolean; FTLSonData: Boolean; FFullSSL: Boolean; function Auth(Mode: integer): Boolean; virtual; function Connect: Boolean; virtual; function InternalStor(const Command: string; RestoreAt: int64): Boolean; virtual; function DataSocket: Boolean; virtual; function AcceptDataSocket: Boolean; virtual; procedure DoStatus(Response: Boolean; const Value: string); virtual; public {:Custom definition of login sequence. You can use this when you set @link(FWMode) to value -1.} CustomLogon: TLogonActions; constructor Create; destructor Destroy; override; {:Waits and read FTP server response. You need this only in special cases!} function ReadResult: Integer; virtual; {:Parse remote side information of data channel from value string (returned by PASV command). This function you need only in special cases!} procedure ParseRemote(Value: string); virtual; {:Parse remote side information of data channel from value string (returned by EPSV command). This function you need only in special cases!} procedure ParseRemoteEPSV(Value: string); virtual; {:Send Value as FTP command to FTP server. Returned result code is result of this function. This command is good for sending site specific command, or non-standard commands.} function FTPCommand(const Value: string): integer; virtual; {:Connect and logon to FTP server. If you specify any FireWall, connect to firewall and throw them connect to FTP server. Login sequence depending on @link(FWMode).} function Login: Boolean; virtual; {:Logoff and disconnect from FTP server.} function Logout: Boolean; virtual; {:Break current transmission of data. (You can call this method from Sock.OnStatus event, or from another thread.)} procedure Abort; virtual; {:Break current transmission of data. It is same as Abort, but it send abort telnet commands prior ABOR FTP command. Some servers need it. (You can call this method from Sock.OnStatus event, or from another thread.)} procedure TelnetAbort; virtual; {:Download directory listing of Directory on FTP server. If Directory is empty string, download listing of current working directory. If NameList is @true, download only names of files in directory. (internally use NLST command instead LIST command) If NameList is @false, returned list is also parsed to @link(FTPList) property.} function List(Directory: string; NameList: Boolean): Boolean; virtual; {:Read data from FileName on FTP server. If Restore is @true and server supports resume dowloads, download is resumed. (received is only rest of file)} function RetrieveFile(const FileName: string; Restore: Boolean): Boolean; virtual; {:Send data to FileName on FTP server. If Restore is @true and server supports resume upload, upload is resumed. (send only rest of file) In this case if remote file is same length as local file, nothing will be done. If remote file is larger then local, resume is disabled and file is transfered from begin!} function StoreFile(const FileName: string; Restore: Boolean): Boolean; virtual; {:Send data to FTP server and assing unique name for this file.} function StoreUniqueFile: Boolean; virtual; {:Append data to FileName on FTP server.} function AppendFile(const FileName: string): Boolean; virtual; {:Rename on FTP server file with OldName to NewName.} function RenameFile(const OldName, NewName: string): Boolean; virtual; {:Delete file FileName on FTP server.} function DeleteFile(const FileName: string): Boolean; virtual; {:Return size of Filename file on FTP server. If command failed (i.e. not implemented), return -1.} function FileSize(const FileName: string): int64; virtual; {:Send NOOP command to FTP server for preserve of disconnect by inactivity timeout.} function NoOp: Boolean; virtual; {:Change currect working directory to Directory on FTP server.} function ChangeWorkingDir(const Directory: string): Boolean; virtual; {:walk to upper directory on FTP server.} function ChangeToParentDir: Boolean; virtual; {:walk to root directory on FTP server. (May not work with all servers properly!)} function ChangeToRootDir: Boolean; virtual; {:Delete Directory on FTP server.} function DeleteDir(const Directory: string): Boolean; virtual; {:Create Directory on FTP server.} function CreateDir(const Directory: string): Boolean; virtual; {:Return current working directory on FTP server.} function GetCurrentDir: String; virtual; {:Establish data channel to FTP server and retrieve data. This function you need only in special cases, i.e. when you need to implement some special unsupported FTP command!} function DataRead(const DestStream: TStream): Boolean; virtual; {:Establish data channel to FTP server and send data. This function you need only in special cases, i.e. when you need to implement some special unsupported FTP command.} function DataWrite(const SourceStream: TStream): Boolean; virtual; published {:After FTP command contains result number of this operation.} property ResultCode: Integer read FResultCode; {:After FTP command contains main line of result.} property ResultString: string read FResultString; {:After any FTP command it contains all lines of FTP server reply.} property FullResult: TStringList read FFullResult; {:Account information used in some cases inside login sequence.} property Account: string read FAccount Write FAccount; {:Address of firewall. If empty string (default), firewall not used.} property FWHost: string read FFWHost Write FFWHost; {:port of firewall. standard value is same port as ftp server used. (21)} property FWPort: string read FFWPort Write FFWPort; {:Username for login to firewall. (if needed)} property FWUsername: string read FFWUsername Write FFWUsername; {:password for login to firewall. (if needed)} property FWPassword: string read FFWPassword Write FFWPassword; {:Type of Firewall. Used only if you set some firewall address. Supported predefined firewall login sequences are described by comments in source file where you can see pseudocode decribing each sequence.} property FWMode: integer read FFWMode Write FFWMode; {:Socket object used for TCP/IP operation on control channel. Good for seting OnStatus hook, etc.} property Sock: TTCPBlockSocket read FSock; {:Socket object used for TCP/IP operation on data channel. Good for seting OnStatus hook, etc.} property DSock: TTCPBlockSocket read FDSock; {:If you not use @link(DirectFile) mode, all data transfers is made to or from this stream.} property DataStream: TMemoryStream read FDataStream; {:After data connection is established, contains remote side IP of this connection.} property DataIP: string read FDataIP; {:After data connection is established, contains remote side port of this connection.} property DataPort: string read FDataPort; {:Mode of data handling by data connection. If @False, all data operations are made to or from @link(DataStream) TMemoryStream. If @true, data operations is made directly to file in your disk. (filename is specified by @link(DirectFileName) property.) Dafault is @False!} property DirectFile: Boolean read FDirectFile Write FDirectFile; {:Filename for direct disk data operations.} property DirectFileName: string read FDirectFileName Write FDirectFileName; {:Indicate after @link(Login) if remote server support resume downloads and uploads.} property CanResume: Boolean read FCanResume; {:If true (default value), all transfers is made by passive method. It is safer method for various firewalls.} property PassiveMode: Boolean read FPassiveMode Write FPassiveMode; {:Force to listen for dataconnection on standard port (20). Default is @false, dataconnections will be made to any non-standard port reported by PORT FTP command. This setting is not used, if you use passive mode.} property ForceDefaultPort: Boolean read FForceDefaultPort Write FForceDefaultPort; {:When is @true, then is disabled EPSV and EPRT support. However without this commands you cannot use IPv6! (Disabling of this commands is needed only when you are behind some crap firewall/NAT.} property ForceOldPort: Boolean read FForceOldPort Write FForceOldPort; {:You may set this hook for monitoring FTP commands and replies.} property OnStatus: TFTPStatus read FOnStatus write FOnStatus; {:After LIST command is here parsed list of files in given directory.} property FtpList: TFTPList read FFtpList; {:if @true (default), then data transfers is in binary mode. If this is set to @false, then ASCII mode is used.} property BinaryMode: Boolean read FBinaryMode Write FBinaryMode; {:if is true, then if server support upgrade to SSL/TLS mode, then use them.} property AutoTLS: Boolean read FAutoTLS Write FAutoTLS; {:if server listen on SSL/TLS port, then you set this to true.} property FullSSL: Boolean read FFullSSL Write FFullSSL; {:Signalise, if control channel is in SSL/TLS mode.} property IsTLS: Boolean read FIsTLS; {:Signalise, if data transfers is in SSL/TLS mode.} property IsDataTLS: Boolean read FIsDataTLS; {:If @true (default), then try to use SSL/TLS on data transfers too. If @false, then SSL/TLS is used only for control connection.} property TLSonData: Boolean read FTLSonData write FTLSonData; end; {:A very useful function, and example of use can be found in the TFtpSend object. Dowload specified file from FTP server to LocalFile.} function FtpGetFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; {:A very useful function, and example of use can be found in the TFtpSend object. Upload specified LocalFile to FTP server.} function FtpPutFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; {:A very useful function, and example of use can be found in the TFtpSend object. Initiate transfer of file between two FTP servers.} function FtpInterServerTransfer( const FromIP, FromPort, FromFile, FromUser, FromPass: string; const ToIP, ToPort, ToFile, ToUser, ToPass: string): Boolean; implementation constructor TFTPSend.Create; begin inherited Create; FFullResult := TStringList.Create; FDataStream := TMemoryStream.Create; FSock := TTCPBlockSocket.Create; FSock.Owner := self; FSock.ConvertLineEnd := True; FDSock := TTCPBlockSocket.Create; FDSock.Owner := self; FFtpList := TFTPList.Create; FTimeout := 300000; FTargetPort := cFtpProtocol; FUsername := 'anonymous'; FPassword := 'anonymous@' + FSock.LocalName; FDirectFile := False; FPassiveMode := True; FForceDefaultPort := False; FForceOldPort := false; FAccount := ''; FFWHost := ''; FFWPort := cFtpProtocol; FFWUsername := ''; FFWPassword := ''; FFWMode := 0; FBinaryMode := True; FAutoTLS := False; FFullSSL := False; FIsTLS := False; FIsDataTLS := False; FTLSonData := True; end; destructor TFTPSend.Destroy; begin FDSock.Free; FSock.Free; FFTPList.Free; FDataStream.Free; FFullResult.Free; inherited Destroy; end; procedure TFTPSend.DoStatus(Response: Boolean; const Value: string); begin if assigned(OnStatus) then OnStatus(Self, Response, Value); end; function TFTPSend.ReadResult: Integer; var s, c: AnsiString; begin FFullResult.Clear; c := ''; repeat s := FSock.RecvString(FTimeout); if c = '' then if length(s) > 3 then if s[4] in [' ', '-'] then c :=Copy(s, 1, 3); FResultString := s; FFullResult.Add(s); DoStatus(True, s); if FSock.LastError <> 0 then Break; until (c <> '') and (Pos(c + ' ', s) = 1); Result := StrToIntDef(c, 0); FResultCode := Result; end; function TFTPSend.FTPCommand(const Value: string): integer; begin FSock.Purge; FSock.SendString(Value + CRLF); DoStatus(False, Value); Result := ReadResult; end; // based on idea by Petr Esner <petr.esner@atlas.cz> function TFTPSend.Auth(Mode: integer): Boolean; const //if not USER <username> then // if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action0: TLogonActions = (0, FTP_OK, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER <FWusername> then // if not PASS <FWPassword> then ERROR! //if SITE <FTPServer> then ERROR! //if not USER <username> then // if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action1: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 5, FTP_ERR, 9, 0, FTP_OK, 12, 1, FTP_OK, 15, 2, FTP_OK, FTP_ERR); //if not USER <FWusername> then // if not PASS <FWPassword> then ERROR! //if USER <UserName>'@'<FTPServer> then OK! //if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action2: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 6, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //if not USER <FWusername> then // if not PASS <FWPassword> then ERROR! //if not USER <username> then // if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action3: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 0, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //OPEN <FTPserver> //if not USER <username> then // if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action4: TLogonActions = (7, 3, 3, 0, FTP_OK, 6, 1, FTP_OK, 9, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0); //if USER <UserName>'@'<FTPServer> then OK! //if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action5: TLogonActions = (6, FTP_OK, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER <FWUserName>@<FTPServer> then // if not PASS <FWPassword> then ERROR! //if not USER <username> then // if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action6: TLogonActions = (8, 6, 3, 4, 6, FTP_ERR, 0, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //if USER <UserName>@<FTPServer> <FWUserName> then ERROR! //if not PASS <password> then // if not ACCT <account> then ERROR! //OK! Action7: TLogonActions = (9, FTP_ERR, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER <UserName>@<FWUserName>@<FTPServer> then // if not PASS <Password>@<FWPassword> then // if not ACCT <account> then ERROR! //OK! Action8: TLogonActions = (10, FTP_OK, 3, 11, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); var FTPServer: string; LogonActions: TLogonActions; i: integer; s: string; x: integer; begin Result := False; if FFWHost = '' then Mode := 0; if (FTargetPort = cFtpProtocol) or (FTargetPort = '21') then FTPServer := FTargetHost else FTPServer := FTargetHost + ':' + FTargetPort; case Mode of -1: LogonActions := CustomLogon; 1: LogonActions := Action1; 2: LogonActions := Action2; 3: LogonActions := Action3; 4: LogonActions := Action4; 5: LogonActions := Action5; 6: LogonActions := Action6; 7: LogonActions := Action7; 8: LogonActions := Action8; else LogonActions := Action0; end; i := 0; repeat case LogonActions[i] of 0: s := 'USER ' + FUserName; 1: s := 'PASS ' + FPassword; 2: s := 'ACCT ' + FAccount; 3: s := 'USER ' + FFWUserName; 4: s := 'PASS ' + FFWPassword; 5: s := 'SITE ' + FTPServer; 6: s := 'USER ' + FUserName + '@' + FTPServer; 7: s := 'OPEN ' + FTPServer; 8: s := 'USER ' + FFWUserName + '@' + FTPServer; 9: s := 'USER ' + FUserName + '@' + FTPServer + ' ' + FFWUserName; 10: s := 'USER ' + FUserName + '@' + FFWUserName + '@' + FTPServer; 11: s := 'PASS ' + FPassword + '@' + FFWPassword; end; x := FTPCommand(s); x := x div 100; if (x <> 2) and (x <> 3) then Exit; i := LogonActions[i + x - 1]; case i of FTP_ERR: Exit; FTP_OK: begin Result := True; Exit; end; end; until False; end; function TFTPSend.Connect: Boolean; begin FSock.CloseSocket; FSock.Bind(FIPInterface, cAnyPort); if FSock.LastError = 0 then if FFWHost = '' then FSock.Connect(FTargetHost, FTargetPort) else FSock.Connect(FFWHost, FFWPort); if FSock.LastError = 0 then if FFullSSL then FSock.SSLDoConnect; Result := FSock.LastError = 0; end; function TFTPSend.Login: Boolean; var x: integer; begin Result := False; FCanResume := False; if not Connect then Exit; FIsTLS := FFullSSL; FIsDataTLS := False; repeat x := ReadResult div 100; until x <> 1; if x <> 2 then Exit; if FAutoTLS and not(FIsTLS) then if (FTPCommand('AUTH TLS') div 100) = 2 then begin FSock.SSLDoConnect; FIsTLS := FSock.LastError = 0; if not FIsTLS then begin Result := False; Exit; end; end; if not Auth(FFWMode) then Exit; if FIsTLS then begin FTPCommand('PBSZ 0'); if FTLSonData then FIsDataTLS := (FTPCommand('PROT P') div 100) = 2; if not FIsDataTLS then FTPCommand('PROT C'); end; FTPCommand('TYPE I'); FTPCommand('STRU F'); FTPCommand('MODE S'); if FTPCommand('REST 0') = 350 then if FTPCommand('REST 1') = 350 then begin FTPCommand('REST 0'); FCanResume := True; end; Result := True; end; function TFTPSend.Logout: Boolean; begin Result := (FTPCommand('QUIT') div 100) = 2; FSock.CloseSocket; end; procedure TFTPSend.ParseRemote(Value: string); var n: integer; nb, ne: integer; s: string; x: integer; begin Value := trim(Value); nb := Pos('(',Value); ne := Pos(')',Value); if (nb = 0) or (ne = 0) then begin nb:=RPos(' ',Value); s:=Copy(Value, nb + 1, Length(Value) - nb); end else begin s:=Copy(Value,nb+1,ne-nb-1); end; for n := 1 to 4 do if n = 1 then FDataIP := Fetch(s, ',') else FDataIP := FDataIP + '.' + Fetch(s, ','); x := StrToIntDef(Fetch(s, ','), 0) * 256; x := x + StrToIntDef(Fetch(s, ','), 0); FDataPort := IntToStr(x); end; procedure TFTPSend.ParseRemoteEPSV(Value: string); var n: integer; s, v: AnsiString; begin s := SeparateRight(Value, '('); s := Trim(SeparateLeft(s, ')')); Delete(s, Length(s), 1); v := ''; for n := Length(s) downto 1 do if s[n] in ['0'..'9'] then v := s[n] + v else Break; FDataPort := v; FDataIP := FTargetHost; end; function TFTPSend.DataSocket: boolean; var s: string; begin Result := False; if FIsDataTLS then FPassiveMode := True; if FPassiveMode then begin if FSock.IP6used then s := '2' else s := '1'; if FSock.IP6used and not(FForceOldPort) and ((FTPCommand('EPSV ' + s) div 100) = 2) then begin ParseRemoteEPSV(FResultString); end else if FSock.IP6used then Exit else begin if (FTPCommand('PASV') div 100) <> 2 then Exit; ParseRemote(FResultString); end; FDSock.CloseSocket; FDSock.Bind(FIPInterface, cAnyPort); if FIsDataTLS then begin FDSock.SSL.Session := FSock.SSL.Session; end; FDSock.Connect(FDataIP, FDataPort); Result := FDSock.LastError = 0; end else begin FDSock.CloseSocket; if FForceDefaultPort then s := cFtpDataProtocol else s := '0'; //data conection from same interface as command connection FDSock.Bind(FSock.GetLocalSinIP, s); if FDSock.LastError <> 0 then Exit; FDSock.SetLinger(True, 10000); FDSock.Listen; FDSock.GetSins; FDataIP := FDSock.GetLocalSinIP; FDataIP := FDSock.ResolveName(FDataIP); FDataPort := IntToStr(FDSock.GetLocalSinPort); if FSock.IP6used and (not FForceOldPort) then begin if IsIp6(FDataIP) then s := '2' else s := '1'; s := 'EPRT |' + s +'|' + FDataIP + '|' + FDataPort + '|'; Result := (FTPCommand(s) div 100) = 2; end; if not Result and IsIP(FDataIP) then begin s := ReplaceString(FDataIP, '.', ','); s := 'PORT ' + s + ',' + IntToStr(FDSock.GetLocalSinPort div 256) + ',' + IntToStr(FDSock.GetLocalSinPort mod 256); Result := (FTPCommand(s) div 100) = 2; end; end; end; function TFTPSend.AcceptDataSocket: Boolean; var x: TSocket; begin if FPassiveMode then Result := True else begin Result := False; if FDSock.CanRead(FTimeout) then begin x := FDSock.Accept; if not FDSock.UsingSocks then FDSock.CloseSocket; FDSock.Socket := x; Result := True; end; end; if Result and FIsDataTLS then begin FDSock.SSL.Assign(FSock.SSL); FDSock.SSLDoConnect; Result := FDSock.LastError = 0; end; end; function TFTPSend.DataRead(const DestStream: TStream): Boolean; var x: integer; begin Result := False; try if not AcceptDataSocket then Exit; FDSock.RecvStreamRaw(DestStream, FTimeout); FDSock.CloseSocket; x := ReadResult; Result := (x div 100) = 2; finally FDSock.CloseSocket; end; end; function TFTPSend.DataWrite(const SourceStream: TStream): Boolean; var x: integer; b: Boolean; begin Result := False; try if not AcceptDataSocket then Exit; FDSock.SendStreamRaw(SourceStream); b := FDSock.LastError = 0; FDSock.CloseSocket; x := ReadResult; Result := b and ((x div 100) = 2); finally FDSock.CloseSocket; end; end; function TFTPSend.List(Directory: string; NameList: Boolean): Boolean; var x: integer; begin Result := False; FDataStream.Clear; FFTPList.Clear; if Directory <> '' then Directory := ' ' + Directory; FTPCommand('TYPE A'); if not DataSocket then Exit; if NameList then x := FTPCommand('NLST' + Directory) else x := FTPCommand('LIST' + Directory); if (x div 100) <> 1 then Exit; Result := DataRead(FDataStream); if (not NameList) and Result then begin FDataStream.Position := 0; FFTPList.Lines.LoadFromStream(FDataStream); FFTPList.ParseLines; end; FDataStream.Position := 0; end; function TFTPSend.RetrieveFile(const FileName: string; Restore: Boolean): Boolean; var RetrStream: TStream; begin Result := False; if FileName = '' then Exit; if not DataSocket then Exit; Restore := Restore and FCanResume; if FDirectFile then if Restore and FileExists(FDirectFileName) then RetrStream := TFileStream.Create(FDirectFileName, fmOpenReadWrite or fmShareExclusive) else RetrStream := TFileStream.Create(FDirectFileName, fmCreate or fmShareDenyWrite) else RetrStream := FDataStream; try if FBinaryMode then FTPCommand('TYPE I') else FTPCommand('TYPE A'); if Restore then begin RetrStream.Position := RetrStream.Size; if (FTPCommand('REST ' + IntToStr(RetrStream.Size)) div 100) <> 3 then Exit; end else if RetrStream is TMemoryStream then TMemoryStream(RetrStream).Clear; if (FTPCommand('RETR ' + FileName) div 100) <> 1 then Exit; Result := DataRead(RetrStream); if not FDirectFile then RetrStream.Position := 0; finally if FDirectFile then RetrStream.Free; end; end; function TFTPSend.InternalStor(const Command: string; RestoreAt: int64): Boolean; var SendStream: TStream; StorSize: int64; begin Result := False; if FDirectFile then if not FileExists(FDirectFileName) then Exit else SendStream := TFileStream.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite) else SendStream := FDataStream; try if not DataSocket then Exit; if FBinaryMode then FTPCommand('TYPE I') else FTPCommand('TYPE A'); StorSize := SendStream.Size; if not FCanResume then RestoreAt := 0; if (StorSize > 0) and (RestoreAt = StorSize) then begin Result := True; Exit; end; if RestoreAt > StorSize then RestoreAt := 0; FTPCommand('ALLO ' + IntToStr(StorSize - RestoreAt)); if FCanResume then if (FTPCommand('REST ' + IntToStr(RestoreAt)) div 100) <> 3 then Exit; SendStream.Position := RestoreAt; if (FTPCommand(Command) div 100) <> 1 then Exit; Result := DataWrite(SendStream); finally if FDirectFile then SendStream.Free; end; end; function TFTPSend.StoreFile(const FileName: string; Restore: Boolean): Boolean; var RestoreAt: int64; begin Result := False; if FileName = '' then Exit; RestoreAt := 0; Restore := Restore and FCanResume; if Restore then begin RestoreAt := Self.FileSize(FileName); if RestoreAt < 0 then RestoreAt := 0; end; Result := InternalStor('STOR ' + FileName, RestoreAt); end; function TFTPSend.StoreUniqueFile: Boolean; begin Result := InternalStor('STOU', 0); end; function TFTPSend.AppendFile(const FileName: string): Boolean; begin Result := False; if FileName = '' then Exit; Result := InternalStor('APPE ' + FileName, 0); end; function TFTPSend.NoOp: Boolean; begin Result := (FTPCommand('NOOP') div 100) = 2; end; function TFTPSend.RenameFile(const OldName, NewName: string): Boolean; begin Result := False; if (FTPCommand('RNFR ' + OldName) div 100) <> 3 then Exit; Result := (FTPCommand('RNTO ' + NewName) div 100) = 2; end; function TFTPSend.DeleteFile(const FileName: string): Boolean; begin Result := (FTPCommand('DELE ' + FileName) div 100) = 2; end; function TFTPSend.FileSize(const FileName: string): int64; var s: string; begin Result := -1; if (FTPCommand('SIZE ' + FileName) div 100) = 2 then begin s := Trim(SeparateRight(ResultString, ' ')); s := Trim(SeparateLeft(s, ' ')); {$IFDEF VER100} Result := StrToIntDef(s, -1); {$ELSE} Result := StrToInt64Def(s, -1); {$ENDIF} end; end; function TFTPSend.ChangeWorkingDir(const Directory: string): Boolean; begin Result := (FTPCommand('CWD ' + Directory) div 100) = 2; end; function TFTPSend.ChangeToParentDir: Boolean; begin Result := (FTPCommand('CDUP') div 100) = 2; end; function TFTPSend.ChangeToRootDir: Boolean; begin Result := ChangeWorkingDir('/'); end; function TFTPSend.DeleteDir(const Directory: string): Boolean; begin Result := (FTPCommand('RMD ' + Directory) div 100) = 2; end; function TFTPSend.CreateDir(const Directory: string): Boolean; begin Result := (FTPCommand('MKD ' + Directory) div 100) = 2; end; function TFTPSend.GetCurrentDir: String; begin Result := ''; if (FTPCommand('PWD') div 100) = 2 then begin Result := SeparateRight(FResultString, '"'); Result := Trim(Separateleft(Result, '"')); end; end; procedure TFTPSend.Abort; begin FSock.SendString('ABOR' + CRLF); FDSock.StopFlag := True; end; procedure TFTPSend.TelnetAbort; begin FSock.SendString(#$FF + #$F4 + #$FF + #$F2); Abort; end; {==============================================================================} procedure TFTPListRec.Assign(Value: TFTPListRec); begin FFileName := Value.FileName; FDirectory := Value.Directory; FReadable := Value.Readable; FFileSize := Value.FileSize; FFileTime := Value.FileTime; FOriginalLine := Value.OriginalLine; FMask := Value.Mask; end; constructor TFTPList.Create; begin inherited Create; FList := TList.Create; FLines := TStringList.Create; FMasks := TStringList.Create; FUnparsedLines := TStringList.Create; //various UNIX FMasks.add('pppppppppp $!!!S*$TTT$DD$hh mm ss$YYYY$n*'); FMasks.add('pppppppppp $!!!S*$DD$TTT$hh mm ss$YYYY$n*'); FMasks.add('pppppppppp $!!!S*$TTT$DD$UUUUU$n*'); //mostly used UNIX format FMasks.add('pppppppppp $!!!S*$DD$TTT$UUUUU$n*'); //MacOS FMasks.add('pppppppppp $!!S*$TTT$DD$UUUUU$n*'); FMasks.add('pppppppppp $!S*$TTT$DD$UUUUU$n*'); //Novell FMasks.add('d $!S*$TTT$DD$UUUUU$n*'); //Windows FMasks.add('MM DD YY hh mmH !S* n*'); FMasks.add('MM DD YY hh mmH $ d!n*'); FMasks.add('MM DD YYYY hh mmH !S* n*'); FMasks.add('MM DD YYYY hh mmH $ d!n*'); FMasks.add('DD MM YYYY hh mmH !S* n*'); FMasks.add('DD MM YYYY hh mmH $ d!n*'); //VMS FMasks.add('v*$ DD TTT YYYY hh mm'); FMasks.add('v*$!DD TTT YYYY hh mm'); FMasks.add('n*$ YYYY MM DD hh mm$S*'); //AS400 FMasks.add('!S*$MM DD YY hh mm ss !n*'); FMasks.add('!S*$DD MM YY hh mm ss !n*'); FMasks.add('n*!S*$MM DD YY hh mm ss d'); FMasks.add('n*!S*$DD MM YY hh mm ss d'); //VxWorks FMasks.add('$S* TTT DD YYYY hh mm ss $n* $ d'); FMasks.add('$S* TTT DD YYYY hh mm ss $n*'); //Distinct FMasks.add('d $S*$TTT DD YYYY hh mm$n*'); FMasks.add('d $S*$TTT DD$hh mm$n*'); //PC-NFSD FMasks.add('nnnnnnnn.nnn dSSSSSSSSSSS MM DD YY hh mmH'); //VOS FMasks.add('- SSSSS YY MM DD hh mm ss n*'); FMasks.add('- d= SSSSS YY MM DD hh mm ss n*'); //Unissys ClearPath FMasks.add('nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn SSSSSSSSS MM DD YYYY hh mm'); FMasks.add('n*\x SSSSSSSSS MM DD YYYY hh mm'); //IBM FMasks.add('- SSSSSSSSSSSS d MM DD YYYY hh mm n*'); //OS9 FMasks.add('- YY MM DD hhmm d SSSSSSSSS n*'); //tandem FMasks.add('nnnnnnnn SSSSSSS DD TTT YY hh mm ss'); //MVS FMasks.add('- YYYY MM DD SSSSS d=O n*'); //BullGCOS8 FMasks.add(' $S* MM DD YY hh mm ss !n*'); FMasks.add('d $S* MM DD YY !n*'); //BullGCOS7 FMasks.add(' TTT DD YYYY n*'); FMasks.add(' d n*'); end; destructor TFTPList.Destroy; begin Clear; FList.Free; FLines.Free; FMasks.Free; FUnparsedLines.Free; inherited Destroy; end; procedure TFTPList.Clear; var n:integer; begin for n := 0 to FList.Count - 1 do if Assigned(FList[n]) then TFTPListRec(FList[n]).Free; FList.Clear; FLines.Clear; FUnparsedLines.Clear; end; function TFTPList.Count: integer; begin Result := FList.Count; end; function TFTPList.GetListItem(Index: integer): TFTPListRec; begin Result := nil; if Index < Count then Result := TFTPListRec(FList[Index]); end; procedure TFTPList.Assign(Value: TFTPList); var flr: TFTPListRec; n: integer; begin Clear; for n := 0 to Value.Count - 1 do begin flr := TFTPListRec.Create; flr.Assign(Value[n]); Flist.Add(flr); end; Lines.Assign(Value.Lines); Masks.Assign(Value.Masks); UnparsedLines.Assign(Value.UnparsedLines); end; procedure TFTPList.ClearStore; begin Monthnames := ''; BlockSize := ''; DirFlagValue := ''; FileName := ''; VMSFileName := ''; Day := ''; Month := ''; ThreeMonth := ''; YearTime := ''; Year := ''; Hours := ''; HoursModif := ''; Minutes := ''; Seconds := ''; Size := ''; Permissions := ''; DirFlag := ''; end; function TFTPList.ParseByMask(Value, NextValue, Mask: AnsiString): Integer; var Ivalue, IMask: integer; MaskC, LastMaskC: AnsiChar; c: AnsiChar; s: string; begin ClearStore; Result := 0; if Value = '' then Exit; if Mask = '' then Exit; Ivalue := 1; IMask := 1; Result := 1; LastMaskC := ' '; while Imask <= Length(mask) do begin if (Mask[Imask] <> '*') and (Ivalue > Length(Value)) then begin Result := 0; Exit; end; MaskC := Mask[Imask]; if Ivalue > Length(Value) then Exit; c := Value[Ivalue]; case MaskC of 'n': FileName := FileName + c; 'v': VMSFileName := VMSFileName + c; '.': begin if c in ['.', ' '] then FileName := TrimSP(FileName) + '.' else begin Result := 0; Exit; end; end; 'D': Day := Day + c; 'M': Month := Month + c; 'T': ThreeMonth := ThreeMonth + c; 'U': YearTime := YearTime + c; 'Y': Year := Year + c; 'h': Hours := Hours + c; 'H': HoursModif := HoursModif + c; 'm': Minutes := Minutes + c; 's': Seconds := Seconds + c; 'S': Size := Size + c; 'p': Permissions := Permissions + c; 'd': DirFlag := DirFlag + c; 'x': if c <> ' ' then begin Result := 0; Exit; end; '*': begin s := ''; if LastMaskC in ['n', 'v'] then begin if Imask = Length(Mask) then s := Copy(Value, IValue, Maxint) else while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; s := s + Value[Ivalue]; Inc(Ivalue); end; if LastMaskC = 'n' then FileName := FileName + s else VMSFileName := VMSFileName + s; end else begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in ['0'..'9']) then break; s := s + Value[Ivalue]; Inc(Ivalue); end; case LastMaskC of 'S': Size := Size + s; end; end; Dec(IValue); end; '!': begin while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; Inc(Ivalue); end; while IValue <= Length(Value) do begin if Value[Ivalue] <> ' ' then break; Inc(Ivalue); end; Dec(IValue); end; '$': begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in [' ', #9]) then break; Inc(Ivalue); end; Dec(IValue); end; '=': begin s := ''; case LastmaskC of 'S': begin while Imask <= Length(Mask) do begin if not(Mask[Imask] in ['0'..'9']) then break; s := s + Mask[Imask]; Inc(Imask); end; Dec(Imask); BlockSize := s; end; 'T': begin Monthnames := Copy(Mask, IMask, 12 * 3); Inc(IMask, 12 * 3); end; 'd': begin Inc(Imask); DirFlagValue := Mask[Imask]; end; end; end; '\': begin Value := NextValue; IValue := 0; Result := 2; end; end; Inc(Ivalue); Inc(Imask); LastMaskC := MaskC; end; end; function TFTPList.CheckValues: Boolean; var x, n: integer; begin Result := false; if FileName <> '' then begin if pos('?', VMSFilename) > 0 then Exit; if pos('*', VMSFilename) > 0 then Exit; end; if VMSFileName <> '' then if pos(';', VMSFilename) <= 0 then Exit; if (FileName = '') and (VMSFileName = '') then Exit; if Permissions <> '' then begin if length(Permissions) <> 10 then Exit; for n := 1 to 10 do if not(Permissions[n] in ['a', 'b', 'c', 'd', 'h', 'l', 'p', 'r', 's', 't', 'w', 'x', 'y', '-']) then Exit; end; if Day <> '' then begin Day := TrimSP(Day); x := StrToIntDef(day, -1); if (x < 1) or (x > 31) then Exit; end; if Month <> '' then begin Month := TrimSP(Month); x := StrToIntDef(Month, -1); if (x < 1) or (x > 12) then Exit; end; if Hours <> '' then begin Hours := TrimSP(Hours); x := StrToIntDef(Hours, -1); if (x < 0) or (x > 24) then Exit; end; if HoursModif <> '' then begin if not (HoursModif[1] in ['a', 'A', 'p', 'P']) then Exit; end; if Minutes <> '' then begin Minutes := TrimSP(Minutes); x := StrToIntDef(Minutes, -1); if (x < 0) or (x > 59) then Exit; end; if Seconds <> '' then begin Seconds := TrimSP(Seconds); x := StrToIntDef(Seconds, -1); if (x < 0) or (x > 59) then Exit; end; if Size <> '' then begin Size := TrimSP(Size); for n := 1 to Length(Size) do if not (Size[n] in ['0'..'9']) then Exit; end; if length(Monthnames) = (12 * 3) then for n := 1 to 12 do CustomMonthNames[n] := Copy(Monthnames, ((n - 1) * 3) + 1, 3); if ThreeMonth <> '' then begin x := GetMonthNumber(ThreeMonth); if (x = 0) then Exit; end; if YearTime <> '' then begin YearTime := ReplaceString(YearTime, '-', ':'); if pos(':', YearTime) > 0 then begin if (GetTimeFromstr(YearTime) = -1) then Exit; end else begin YearTime := TrimSP(YearTime); x := StrToIntDef(YearTime, -1); if (x = -1) then Exit; if (x < 1900) or (x > 2100) then Exit; end; end; if Year <> '' then begin Year := TrimSP(Year); x := StrToIntDef(Year, -1); if (x = -1) then Exit; if Length(Year) = 4 then begin if not((x > 1900) and (x < 2100)) then Exit; end else if Length(Year) = 2 then begin if not((x >= 0) and (x <= 99)) then Exit; end else if Length(Year) = 3 then begin if not((x >= 100) and (x <= 110)) then Exit; end else Exit; end; Result := True; end; procedure TFTPList.FillRecord(const Value: TFTPListRec); var s: string; x: integer; myear: Word; mmonth: Word; mday: Word; mhours, mminutes, mseconds: word; n: integer; begin s := DirFlagValue; if s = '' then s := 'D'; s := Uppercase(s); Value.Directory := s = Uppercase(DirFlag); if FileName <> '' then Value.FileName := SeparateLeft(Filename, ' -> '); if VMSFileName <> '' then begin Value.FileName := VMSFilename; Value.Directory := Pos('.DIR;',VMSFilename) > 0; end; Value.FileName := TrimSPRight(Value.FileName); Value.Readable := not Value.Directory; if BlockSize <> '' then x := StrToIntDef(BlockSize, 1) else x := 1; {$IFDEF VER100} Value.FileSize := x * StrToIntDef(Size, 0); {$ELSE} Value.FileSize := x * StrToInt64Def(Size, 0); {$ENDIF} DecodeDate(Date,myear,mmonth,mday); mhours := 0; mminutes := 0; mseconds := 0; if Day <> '' then mday := StrToIntDef(day, 1); if Month <> '' then mmonth := StrToIntDef(Month, 1); if length(Monthnames) = (12 * 3) then for n := 1 to 12 do CustomMonthNames[n] := Copy(Monthnames, ((n - 1) * 3) + 1, 3); if ThreeMonth <> '' then mmonth := GetMonthNumber(ThreeMonth); if Year <> '' then begin myear := StrToIntDef(Year, 0); if (myear <= 99) and (myear > 50) then myear := myear + 1900; if myear <= 50 then myear := myear + 2000; end; if YearTime <> '' then begin if pos(':', YearTime) > 0 then begin YearTime := TrimSP(YearTime); mhours := StrToIntDef(Separateleft(YearTime, ':'), 0); mminutes := StrToIntDef(SeparateRight(YearTime, ':'), 0); if (Encodedate(myear, mmonth, mday) + EncodeTime(mHours, mminutes, 0, 0)) > now then Dec(mYear); end else myear := StrToIntDef(YearTime, 0); end; if Minutes <> '' then mminutes := StrToIntDef(Minutes, 0); if Seconds <> '' then mseconds := StrToIntDef(Seconds, 0); if Hours <> '' then begin mHours := StrToIntDef(Hours, 0); if HoursModif <> '' then if Uppercase(HoursModif[1]) = 'P' then if mHours <> 12 then mHours := MHours + 12; end; Value.FileTime := Encodedate(myear, mmonth, mday) + EncodeTime(mHours, mminutes, mseconds, 0); if Permissions <> '' then begin Value.Permission := Permissions; Value.Readable := Uppercase(permissions)[2] = 'R'; if Uppercase(permissions)[1] = 'D' then begin Value.Directory := True; Value.Readable := false; end else if Uppercase(permissions)[1] = 'L' then Value.Directory := True; end; end; function TFTPList.ParseEPLF(Value: string): Boolean; var s, os: string; flr: TFTPListRec; begin Result := False; if Value <> '' then if Value[1] = '+' then begin os := Value; Delete(Value, 1, 1); flr := TFTPListRec.create; flr.FileName := SeparateRight(Value, #9); s := Fetch(Value, ','); while s <> '' do begin if s[1] = #9 then Break; case s[1] of '/': flr.Directory := true; 'r': flr.Readable := true; 's': {$IFDEF VER100} flr.FileSize := StrToIntDef(Copy(s, 2, Length(s) - 1), 0); {$ELSE} flr.FileSize := StrToInt64Def(Copy(s, 2, Length(s) - 1), 0); {$ENDIF} 'm': flr.FileTime := (StrToIntDef(Copy(s, 2, Length(s) - 1), 0) / 86400) + 25569; end; s := Fetch(Value, ','); end; if flr.FileName <> '' then if (flr.Directory and ((flr.FileName = '.') or (flr.FileName = '..'))) or (flr.FileName = '') then flr.free else begin flr.OriginalLine := os; flr.Mask := 'EPLF'; Flist.Add(flr); Result := True; end; end; end; procedure TFTPList.ParseLines; var flr: TFTPListRec; n, m: Integer; S: string; x: integer; b: Boolean; begin n := 0; while n < Lines.Count do begin if n = Lines.Count - 1 then s := '' else s := Lines[n + 1]; b := False; x := 0; if ParseEPLF(Lines[n]) then begin b := True; x := 1; end else for m := 0 to Masks.Count - 1 do begin x := ParseByMask(Lines[n], s, Masks[m]); if x > 0 then if CheckValues then begin flr := TFTPListRec.create; FillRecord(flr); flr.OriginalLine := Lines[n]; flr.Mask := Masks[m]; if flr.Directory and ((flr.FileName = '.') or (flr.FileName = '..')) then flr.free else Flist.Add(flr); b := True; Break; end; end; if not b then FUnparsedLines.Add(Lines[n]); Inc(n); if x > 1 then Inc(n, x - 1); end; end; {==============================================================================} function FtpGetFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; begin Result := False; with TFTPSend.Create do try if User <> '' then begin Username := User; Password := Pass; end; TargetHost := IP; TargetPort := Port; if not Login then Exit; DirectFileName := LocalFile; DirectFile:=True; Result := RetrieveFile(FileName, False); Logout; finally Free; end; end; function FtpPutFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; begin Result := False; with TFTPSend.Create do try if User <> '' then begin Username := User; Password := Pass; end; TargetHost := IP; TargetPort := Port; if not Login then Exit; DirectFileName := LocalFile; DirectFile:=True; Result := StoreFile(FileName, False); Logout; finally Free; end; end; function FtpInterServerTransfer( const FromIP, FromPort, FromFile, FromUser, FromPass: string; const ToIP, ToPort, ToFile, ToUser, ToPass: string): Boolean; var FromFTP, ToFTP: TFTPSend; s: string; x: integer; begin Result := False; FromFTP := TFTPSend.Create; toFTP := TFTPSend.Create; try if FromUser <> '' then begin FromFTP.Username := FromUser; FromFTP.Password := FromPass; end; if ToUser <> '' then begin ToFTP.Username := ToUser; ToFTP.Password := ToPass; end; FromFTP.TargetHost := FromIP; FromFTP.TargetPort := FromPort; ToFTP.TargetHost := ToIP; ToFTP.TargetPort := ToPort; if not FromFTP.Login then Exit; if not ToFTP.Login then Exit; if (FromFTP.FTPCommand('PASV') div 100) <> 2 then Exit; FromFTP.ParseRemote(FromFTP.ResultString); s := ReplaceString(FromFTP.DataIP, '.', ','); s := 'PORT ' + s + ',' + IntToStr(StrToIntDef(FromFTP.DataPort, 0) div 256) + ',' + IntToStr(StrToIntDef(FromFTP.DataPort, 0) mod 256); if (ToFTP.FTPCommand(s) div 100) <> 2 then Exit; x := ToFTP.FTPCommand('RETR ' + FromFile); if (x div 100) <> 1 then Exit; x := FromFTP.FTPCommand('STOR ' + ToFile); if (x div 100) <> 1 then Exit; FromFTP.Timeout := 21600000; x := FromFTP.ReadResult; if (x div 100) <> 2 then Exit; ToFTP.Timeout := 21600000; x := ToFTP.ReadResult; if (x div 100) <> 2 then Exit; Result := True; finally ToFTP.Free; FromFTP.Free; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/doublecmd.diff���������������������������������������������0000644�0001750�0000144�00000023050�15104114162�022115� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: ssfpc.inc =================================================================== --- ssfpc.inc (revision 209) +++ ssfpc.inc (working copy) @@ -67,6 +67,9 @@ {$ifdef darwin} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} +{$ifdef haiku} +{$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr +{$endif} interface @@ -103,7 +106,9 @@ const FIONREAD = termio.FIONREAD; FIONBIO = termio.FIONBIO; +{$IFNDEF HAIKU} FIOASYNC = termio.FIOASYNC; +{$ENDIF} const IPPROTO_IP = 0; { Dummy } @@ -212,12 +217,21 @@ SOMAXCONN = 1024; +{$IFDEF HAIKU} + IPV6_UNICAST_HOPS = 27; +{$ELSE} IPV6_UNICAST_HOPS = sockets.IPV6_UNICAST_HOPS; +{$ENDIF} IPV6_MULTICAST_IF = sockets.IPV6_MULTICAST_IF; IPV6_MULTICAST_HOPS = sockets.IPV6_MULTICAST_HOPS; IPV6_MULTICAST_LOOP = sockets.IPV6_MULTICAST_LOOP; +{$IFDEF HAIKU} + IPV6_JOIN_GROUP = 28; + IPV6_LEAVE_GROUP = 29; +{$ELSE} IPV6_JOIN_GROUP = sockets.IPV6_JOIN_GROUP; IPV6_LEAVE_GROUP = sockets.IPV6_LEAVE_GROUP; +{$ENDIF} const SOCK_STREAM = 1; { stream socket } @@ -231,9 +245,9 @@ { Address families. } - AF_UNSPEC = 0; { unspecified } - AF_INET = 2; { internetwork: UDP, TCP, etc. } - AF_INET6 = 10; { Internetwork Version 6 } + AF_UNSPEC = 0; { unspecified } + AF_INET = sockets.AF_INET; { internetwork: UDP, TCP, etc. } + AF_INET6 = sockets.AF_INET6; { Internetwork Version 6 } AF_MAX = 24; { Protocol families, same as address families for now. } @@ -254,15 +268,31 @@ MSG_OOB = sockets.MSG_OOB; // Process out-of-band data. MSG_PEEK = sockets.MSG_PEEK; // Peek at incoming messages. - {$ifdef DARWIN} + {$if defined(DARWIN)} MSG_NOSIGNAL = $20000; // Do not generate SIGPIPE. // Works under MAC OS X, but is undocumented, // So FPC doesn't include it + {$elseif defined(HAIKU)} + MSG_NOSIGNAL = $0800; {$else} - MSG_NOSIGNAL = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE. + MSG_NOSIGNAL = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE. {$endif} +{$IF DEFINED(HAIKU)} const + ESysESTALE = (B_POSIX_ERROR_BASE + 40); + ESysENOTSOCK = (B_POSIX_ERROR_BASE + 44); + ESysEHOSTDOWN = (B_POSIX_ERROR_BASE + 45); + ESysEDESTADDRREQ = (B_POSIX_ERROR_BASE + 48); + ESysEDQUOT = (B_POSIX_ERROR_BASE + 49); + // Fake error codes + ESysEUSERS = (B_POSIX_ERROR_BASE + 128); + ESysEREMOTE = (B_POSIX_ERROR_BASE + 129); + ESysETOOMANYREFS = (B_POSIX_ERROR_BASE + 130); + ESysESOCKTNOSUPPORT = (B_POSIX_ERROR_BASE + 131); +{$ENDIF} + +const WSAEINTR = ESysEINTR; WSAEBADF = ESysEBADF; WSAEACCES = ESysEACCES; @@ -755,7 +785,7 @@ begin Result := 0; FillChar(Sin, Sizeof(Sin), 0); - Sin.sin_port := Resolveport(port, family, SockProtocol, SockType); + Sin.sin_port := htons(Resolveport(port, family, SockProtocol, SockType)); TwoPass := False; if Family = AF_UNSPEC then begin @@ -858,7 +888,7 @@ ProtoEnt: TProtocolEntry; ServEnt: TServiceEntry; begin - Result := synsock.htons(StrToIntDef(Port, 0)); + Result := StrToIntDef(Port, 0); if Result = 0 then begin ProtoEnt.Name := ''; @@ -865,7 +895,7 @@ GetProtocolByNumber(SockProtocol, ProtoEnt); ServEnt.port := 0; GetServiceByName(Port, ProtoEnt.Name, ServEnt); - Result := ServEnt.port; + Result := ntohs(ServEnt.port); end; end; Index: blcksock.pas =================================================================== --- blcksock.pas (revision 278) +++ blcksock.pas (working copy) @@ -1234,6 +1234,8 @@ TCustomSSL = class(TObject) private protected + FSessionOld: Pointer; + FSessionNew: Pointer; FOnVerifyCert: THookVerifyCert; FSocket: TTCPBlockSocket; FSSLEnabled: Boolean; @@ -1368,6 +1370,9 @@ {:Return error description of last SSL operation.} property LastErrorDesc: string read FLastErrorDesc; + + {:Used for session resumption } + property Session: Pointer read FSessionNew write FSessionOld; published {:Here you can specify requested SSL/TLS mode. Default is autodetection, but on some servers autodetection not working properly. In this case you must @@ -2518,6 +2523,8 @@ begin repeat s := RecvPacket(Timeout); + if (Length(s) = 0) then + Break; if FLastError = 0 then WriteStrToStream(Stream, s); until FLastError <> 0; Index: ftpsend.pas =================================================================== --- ftpsend.pas (revision 209) +++ ftpsend.pas (working copy) @@ -870,6 +870,11 @@ end; FDSock.CloseSocket; FDSock.Bind(FIPInterface, cAnyPort); + + if FIsDataTLS then begin + FDSock.SSL.Session := FSock.SSL.Session; + end; + FDSock.Connect(FDataIP, FDataPort); Result := FDSock.LastError = 0; end Index: ssl_openssl.pas =================================================================== --- ssl_openssl.pas (revision 278) +++ ssl_openssl.pas (working copy) @@ -77,8 +77,9 @@ accepting of new connections! } -{$INCLUDE 'jedi.inc'} - +{$IFDEF FPC} + {$MODE DELPHI} +{$ENDIF} {$H+} {$IFDEF UNICODE} @@ -86,7 +87,7 @@ {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} -unit ssl_openssl{$IFDEF SUPPORTS_DEPRECATED} deprecated{$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use ssl_openssl3 with OpenSSL 3.0 instead'{$ENDIF}{$ENDIF}; +unit ssl_openssl; interface @@ -495,6 +496,11 @@ function TSSLOpenSSL.DeInit: Boolean; begin Result := True; + if Assigned(FSessionNew) then + begin + SslSessionFree(FSessionNew); + FSessionNew := nil; + end; if assigned (Fssl) then sslfree(Fssl); Fssl := nil; @@ -538,6 +544,10 @@ SSLCheck; Exit; end; + // Reuse session + if Assigned(FSessionOld) then begin + SslSetSession(Fssl, FSessionOld); + end; if SNIHost<>'' then begin SSLCtrl(Fssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, PAnsiChar(AnsiString(SNIHost))); @@ -579,6 +589,9 @@ FSSLEnabled := True; Result := True; end; + if Result and (FSessionOld = nil) then begin + FSessionNew := SslGet1Session(Fssl); + end; end; function TSSLOpenSSL.Accept: boolean; Index: ssl_openssl_lib.pas =================================================================== --- ssl_openssl_lib.pas (revision 278) +++ ssl_openssl_lib.pas (working copy) @@ -813,6 +813,9 @@ function SSLGetVerifyResult(ssl: PSSL):Integer; function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; function SslSet1Host(ssl: PSSL; hostname: PAnsiChar):Integer; + procedure SslSessionFree(session: PSslPtr); + function SslGet1Session(ssl: PSSL):PSslPtr; + function SslSetSession(ssl: PSSL; session: PSslPtr): Integer; // libeay.dll function X509New: PX509; @@ -940,6 +943,9 @@ TSSLGetVerifyResult = function(ssl: PSSL):Integer; cdecl; TSSLCtrl = function(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; cdecl; TSslSet1Host = function(ssl: PSSL; hostname: PAnsiChar):Integer; cdecl; + TSslSessionFree = procedure(session: PSslPtr); cdecl; + TSslGet1Session = function(ssl: PSSL):PSslPtr; cdecl; + TSslSetSession = function(ssl: PSSL; session: PSslPtr): Integer; cdecl; TSSLSetTlsextHostName = function(ssl: PSSL; buf: PAnsiChar):Integer; cdecl; @@ -1049,6 +1055,9 @@ _SSLGetVerifyResult: TSSLGetVerifyResult = nil; _SSLCtrl: TSSLCtrl = nil; _SslSet1Host: TSslSet1Host = nil; + _SslSessionFree: TSslSessionFree = nil; + _SslGet1Session: TSslGet1Session = nil; + _SslSetSession: TSslSetSession = nil; // libeay.dll _X509New: TX509New = nil; @@ -1474,6 +1483,28 @@ Result := 0; end; +procedure SslSessionFree(session: PSslPtr); +begin + if InitSSLInterface and Assigned(_SslSessionFree) then + _SslSessionFree(session); +end; + +function SslGet1Session(ssl: PSSL): PSslPtr; +begin + if InitSSLInterface and Assigned(_SslGet1Session) then + Result := _SslGet1Session(ssl) + else + Result := nil; +end; + +function SslSetSession(ssl: PSSL; session: PSslPtr): Integer; +begin + if InitSSLInterface and Assigned(_SslSetSession) then + Result := _SslSetSession(ssl, session) + else + Result := 0; +end; + // libeay.dll function X509New: PX509; begin @@ -1924,7 +1955,7 @@ {$ENDIF} end; -function GetLibFileName(Handle: THandle): string; +function GetLibFileName(Handle: TLibHandle): string; var n: integer; begin @@ -2022,6 +2053,9 @@ _SslGetVerifyResult := GetProcAddr(SSLLibHandle, 'SSL_get_verify_result'); _SslCtrl := GetProcAddr(SSLLibHandle, 'SSL_ctrl'); _SslSet1Host := GetProcAddr(SSLLibHandle, 'SSL_set1_host'); + _SslSessionFree := GetProcAddr(SSLLibHandle, 'SSL_SESSION_free'); + _SslGet1Session := GetProcAddr(SSLLibHandle, 'SSL_get1_session'); + _SslSetSession := GetProcAddr(SSLLibHandle, 'SSL_set_session'); _X509New := GetProcAddr(SSLUtilHandle, 'X509_new'); _X509Free := GetProcAddr(SSLUtilHandle, 'X509_free'); @@ -2213,6 +2247,9 @@ _SslGetVerifyResult := nil; _SslCtrl := nil; _SslSet1Host := nil; + _SslSessionFree := nil; + _SslGet1Session := nil; + _SslSetSession := nil; _X509New := nil; _X509Free := nil; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/synapse/blcksock.pas�����������������������������������������������0000644�0001750�0000144�00000400461�15104114162�021632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 009.010.002 | |==============================================================================| | Content: Library base | |==============================================================================| | Copyright (c)1999-2021, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)1999-2021. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} { Special thanks to Gregor Ibic <gregor.ibic@intelicom.si> (Intelicom d.o.o., http://www.intelicom.si) for good inspiration about SSL programming. } {$DEFINE ONCEWINSOCK} {Note about define ONCEWINSOCK: If you remove this compiler directive, then socket interface is loaded and initialized on constructor of TBlockSocket class for each socket separately. Socket interface is used only if your need it. If you leave this directive here, then socket interface is loaded and initialized only once at start of your program! It boost performace on high count of created and destroyed sockets. It eliminate possible small resource leak on Windows systems too. } //{$DEFINE RAISEEXCEPT} {When you enable this define, then is Raiseexcept property is on by default } {:@abstract(Synapse's library core) Core with implementation basic socket classes. } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} {$ENDIF} {$Q-} {$H+} {$M+} {$TYPEDADDRESS OFF} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} {$IFDEF NEXTGEN} {$ZEROBASEDSTRINGS OFF} {$ENDIF} unit blcksock; interface uses SysUtils, Classes, synafpc, synsock, synautil, synacode, synaip {$IFDEF POSIX} ,System.Generics.Collections, System.Generics.Defaults {$ENDIF} {$IfDef CIL} ,System.Net ,System.Net.Sockets ,System.Text {$EndIf} ; const SynapseRelease = '40'; cLocalhost = '127.0.0.1'; cAnyHost = '0.0.0.0'; cBroadcast = '255.255.255.255'; c6Localhost = '::1'; c6AnyHost = '::0'; c6Broadcast = 'ffff::1'; cAnyPort = '0'; CR = #$0d; LF = #$0a; CRLF = CR + LF; c64k = 65536; type {:@abstract(Exception clas used by Synapse) When you enable generating of exceptions, this exception is raised by Synapse's units.} ESynapseError = class(Exception) private FErrorCode: Integer; FErrorMessage: string; published {:Code of error. Value depending on used operating system} property ErrorCode: Integer read FErrorCode Write FErrorCode; {:Human readable description of error.} property ErrorMessage: string read FErrorMessage Write FErrorMessage; end; {:Types of OnStatus events} THookSocketReason = ( {:Resolving is begin. Resolved IP and port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_ResolvingBegin, {:Resolving is done. Resolved IP and port is in parameter in format like: 'localhost.somewhere.com:25'. It is always same as in HR_ResolvingBegin!} HR_ResolvingEnd, {:Socket created by CreateSocket method. It reporting Family of created socket too!} HR_SocketCreate, {:Socket closed by CloseSocket method.} HR_SocketClose, {:Socket binded to IP and Port. Binded IP and Port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_Bind, {:Socket connected to IP and Port. Connected IP and Port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_Connect, {:Called when CanRead method is used with @True result.} HR_CanRead, {:Called when CanWrite method is used with @True result.} HR_CanWrite, {:Socket is swithed to Listen mode. (TCP socket only)} HR_Listen, {:Socket Accepting client connection. (TCP socket only)} HR_Accept, {:report count of bytes readed from socket. Number is in parameter string. If you need is in integer, you must use StrToInt function!} HR_ReadCount, {:report count of bytes writed to socket. Number is in parameter string. If you need is in integer, you must use StrToInt function!} HR_WriteCount, {:If is limiting of bandwidth on, then this reason is called when sending or receiving is stopped for satisfy bandwidth limit. Parameter is count of waiting milliseconds.} HR_Wait, {:report situation where communication error occured. When raiseexcept is @true, then exception is called after this Hook reason.} HR_Error ); {:Procedural type for OnStatus event. Sender is calling TBlockSocket object, Reason is one of set Status events and value is optional data.} THookSocketStatus = procedure(Sender: TObject; Reason: THookSocketReason; const Value: String) of object; {:This procedural type is used for DataFilter hooks.} THookDataFilter = procedure(Sender: TObject; var Value: AnsiString) of object; {:This procedural type is used for hook OnCreateSocket. By this hook you can insert your code after initialisation of socket. (you can set special socket options, etc.)} THookCreateSocket = procedure(Sender: TObject) of object; {:This procedural type is used for monitoring of communication.} THookMonitor = procedure(Sender: TObject; Writing: Boolean; const Buffer: TMemory; Len: Integer) of object; {:This procedural type is used for hook OnAfterConnect. By this hook you can insert your code after TCP socket has been sucessfully connected.} THookAfterConnect = procedure(Sender: TObject) of object; {:This procedural type is used for hook OnVerifyCert. By this hook you can insert your additional certificate verification code. Usefull to verify server CN against URL. } THookVerifyCert = function(Sender: TObject):boolean of object; {:This procedural type is used for hook OnHeartbeat. By this hook you can call your code repeately during long socket operations. You must enable heartbeats by @Link(HeartbeatRate) property!} THookHeartbeat = procedure(Sender: TObject) of object; {:Specify family of socket.} TSocketFamily = ( {:Default mode. Socket family is defined by target address for connection. It allows instant access to IPv4 and IPv6 nodes. When you need IPv6 address as destination, then is used IPv6 mode. othervise is used IPv4 mode. However this mode not working properly with preliminary IPv6 supports!} SF_Any, {:Turn this class to pure IPv4 mode. This mode is totally compatible with previous Synapse releases.} SF_IP4, {:Turn to only IPv6 mode.} SF_IP6 ); {:specify possible values of SOCKS modes.} TSocksType = ( ST_Socks5, ST_Socks4 ); {:Specify requested SSL/TLS version for secure connection.} TSSLType = ( LT_all, LT_SSLv2, LT_SSLv3, LT_TLSv1, LT_TLSv1_1, LT_TLSv1_2, LT_TLSv1_3, LT_SSHv2 ); {:Specify type of socket delayed option.} TSynaOptionType = ( SOT_Linger, SOT_RecvBuff, SOT_SendBuff, SOT_NonBlock, SOT_RecvTimeout, SOT_SendTimeout, SOT_Reuse, SOT_TTL, SOT_Broadcast, SOT_MulticastTTL, SOT_MulticastLoop ); {:@abstract(this object is used for remember delayed socket option set.)} TSynaOption = class(TObject) public Option: TSynaOptionType; Enabled: Boolean; Value: Integer; end; TCustomSSL = class; TSSLClass = class of TCustomSSL; TBlockSocket = class; {$IFDEF POSIX} TOptionList = TList<TSynaOption>; TSocketList = TList<TBlockSocket>; {$ELSE} TOptionList = TList; TSocketList = TList; {$ENDIF} {:@abstract(Basic IP object.) This is parent class for other class with protocol implementations. Do not use this class directly! Use @link(TICMPBlockSocket), @link(TRAWBlockSocket), @link(TTCPBlockSocket) or @link(TUDPBlockSocket) instead.} TBlockSocket = class(TObject) private FOnStatus: THookSocketStatus; FOnReadFilter: THookDataFilter; FOnCreateSocket: THookCreateSocket; FOnMonitor: THookMonitor; FOnHeartbeat: THookHeartbeat; FLocalSin: TVarSin; FRemoteSin: TVarSin; FTag: integer; FBuffer: AnsiString; FRaiseExcept: Boolean; FNonBlockMode: Boolean; FMaxLineLength: Integer; FMaxSendBandwidth: Integer; FNextSend: LongWord; FMaxRecvBandwidth: Integer; FNextRecv: LongWord; FConvertLineEnd: Boolean; FLastCR: Boolean; FLastLF: Boolean; FBinded: Boolean; FFamily: TSocketFamily; FFamilySave: TSocketFamily; FIP6used: Boolean; FPreferIP4: Boolean; FDelayedOptions: TOptionList; FInterPacketTimeout: Boolean; {$IFNDEF CIL} FFDSet: TFDSet; {$ENDIF} FRecvCounter: int64; FSendCounter: int64; FSendMaxChunk: Integer; FStopFlag: Boolean; FNonblockSendTimeout: Integer; FHeartbeatRate: integer; FConnectionTimeout: integer; {$IFNDEF ONCEWINSOCK} FWsaDataOnce: TWSADATA; {$ENDIF} function GetSizeRecvBuffer: Integer; procedure SetSizeRecvBuffer(Size: Integer); function GetSizeSendBuffer: Integer; procedure SetSizeSendBuffer(Size: Integer); procedure SetNonBlockMode(Value: Boolean); procedure SetTTL(TTL: integer); function GetTTL:integer; procedure SetFamily(Value: TSocketFamily); virtual; procedure SetSocket(Value: TSocket); virtual; function GetWsaData: TWSAData; function FamilyToAF(f: TSocketFamily): TAddrFamily; protected FSocket: TSocket; FLastError: Integer; FLastErrorDesc: string; FOwner: TObject; procedure SetDelayedOption(const Value: TSynaOption); procedure DelayedOption(const Value: TSynaOption); procedure ProcessDelayedOptions; procedure InternalCreateSocket(Sin: TVarSin); procedure SetSin(var Sin: TVarSin; IP, Port: string); function GetSinIP(Sin: TVarSin): string; function GetSinPort(Sin: TVarSin): Integer; procedure DoStatus(Reason: THookSocketReason; const Value: string); procedure DoReadFilter(Buffer: TMemory; var Len: Integer); procedure DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); procedure DoCreateSocket; procedure DoHeartbeat; procedure LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); procedure SetBandwidth(Value: Integer); function TestStopFlag: Boolean; procedure InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); virtual; function InternalCanRead(Timeout: Integer): Boolean; virtual; function InternalCanWrite(Timeout: Integer): Boolean; virtual; public constructor Create; {:Create object and load all necessary socket library. What library is loaded is described by STUB parameter. If STUB is empty string, then is loaded default libraries.} constructor CreateAlternate(Stub: string); destructor Destroy; override; {:If @link(family) is not SF_Any, then create socket with type defined in @link(Family) property. If family is SF_Any, then do nothing! (socket is created automaticly when you know what type of socket you need to create. (i.e. inside @link(Connect) or @link(Bind) call.) When socket is created, then is aplyed all stored delayed socket options.} procedure CreateSocket; {:It create socket. Address resolving of Value tells what type of socket is created. If Value is resolved as IPv4 IP, then is created IPv4 socket. If value is resolved as IPv6 address, then is created IPv6 socket.} procedure CreateSocketByName(const Value: String); {:Destroy socket in use. This method is also automatically called from object destructor.} procedure CloseSocket; virtual; {:Abort any work on Socket and destroy them.} procedure AbortSocket; virtual; {:Connects socket to local IP address and PORT. IP address may be numeric or symbolic ('192.168.74.50', 'cosi.nekde.cz', 'ff08::1'). The same for PORT - it may be number or mnemonic port ('23', 'telnet'). If port value is '0', system chooses itself and conects unused port in the range 1024 to 4096 (this depending by operating system!). Structure LocalSin is filled after calling this method. Note: If you call this on non-created socket, then socket is created automaticly. Warning: when you call : Bind('0.0.0.0','0'); then is nothing done! In this case is used implicit system bind instead.} procedure Bind(const IP, Port: string); {:Connects socket to remote IP address and PORT. The same rules as with @link(BIND) method are valid. The only exception is that PORT with 0 value will not be connected! Structures LocalSin and RemoteSin will be filled with valid values. When you call this on non-created socket, then socket is created automaticly. Type of created socket is by @link(Family) property. If is used SF_IP4, then is created socket for IPv4. If is used SF_IP6, then is created socket for IPv6. When you have family on SF_Any (default!), then type of created socket is determined by address resolving of destination address. (Not work properly on prilimitary winsock IPv6 support!)} procedure Connect(IP, Port: string); virtual; {:Sets socket to receive mode for new incoming connections. It is necessary to use @link(TBlockSocket.BIND) function call before this method to select receiving port!} procedure Listen; virtual; {:Waits until new incoming connection comes. After it comes a new socket is automatically created (socket handler is returned by this function as result).} function Accept: TSocket; virtual; {:Sends data of LENGTH from BUFFER address via connected socket. System automatically splits data to packets.} function SendBuffer(const Buffer: Tmemory; Length: Integer): Integer; virtual; {:One data BYTE is sent via connected socket.} procedure SendByte(Data: Byte); virtual; {:Send data string via connected socket. Any terminator is not added! If you need send true string with CR-LF termination, you must add CR-LF characters to sended string! Because any termination is not added automaticly, you can use this function for sending any binary data in binary string.} procedure SendString(Data: AnsiString); virtual; {:Send integer as four bytes to socket.} procedure SendInteger(Data: integer); virtual; {:Send data as one block to socket. Each block begin with 4 bytes with length of data in block. This 4 bytes is added automaticly by this function.} procedure SendBlock(const Data: AnsiString); virtual; {:Send data from stream to socket.} procedure SendStreamRaw(const Stream: TStream); virtual; {:Send content of stream to socket. It using @link(SendBlock) method} procedure SendStream(const Stream: TStream); virtual; {:Send content of stream to socket. It using @link(SendBlock) method and this is compatible with streams in Indy library.} procedure SendStreamIndy(const Stream: TStream); virtual; {:Note: This is low-level receive function. You must be sure if data is waiting for read before call this function for avoid deadlock! Waits until allocated buffer is filled by received data. Returns number of data received, which equals to LENGTH value under normal operation. If it is not equal the communication channel is possibly broken. On stream oriented sockets if is received 0 bytes, it mean 'socket is closed!" On datagram socket is readed first waiting datagram.} function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions! Method waits until data is received. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. Methods serves for reading any size of data (i.e. one megabyte...). This method is preffered for reading from stream sockets (like TCP).} function RecvBufferEx(Buffer: Tmemory; Len: Integer; Timeout: Integer): Integer; virtual; {:Similar to @link(RecvBufferEx), but readed data is stored in binary string, not in memory buffer.} function RecvBufferStr(Len: Integer; Timeout: Integer): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Waits until one data byte is received which is also returned as function result. If no data is received within TIMEOUT (in milliseconds)period, @link(LastError) is set to WSAETIMEDOUT and result have value 0.} function RecvByte(Timeout: Integer): Byte; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Waits until one four bytes are received and return it as one Ineger Value. If no data is received within TIMEOUT (in milliseconds)period, @link(LastError) is set to WSAETIMEDOUT and result have value 0.} function RecvInteger(Timeout: Integer): Integer; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method waits until data string is received. This string is terminated by CR-LF characters. The resulting string is returned without this termination (CR-LF)! If @link(ConvertLineEnd) is used, then CR-LF sequence may not be exactly CR-LF. See @link(ConvertLineEnd) description. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. You may also specify maximum length of reading data by @link(MaxLineLength) property.} function RecvString(Timeout: Integer): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method waits until data string is received. This string is terminated by Terminator string. The resulting string is returned without this termination. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. You may also specify maximum length of reading data by @link(MaxLineLength) property.} function RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method reads all data waiting for read. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. Methods serves for reading unknown size of data. Because before call this function you don't know size of received data, returned data is stored in dynamic size binary string. This method is preffered for reading from stream sockets (like TCP). It is very goot for receiving datagrams too! (UDP protocol)} function RecvPacket(Timeout: Integer): AnsiString; virtual; {:Read one block of data from socket. Each block begin with 4 bytes with length of data in block. This function read first 4 bytes for get lenght, then it wait for reported count of bytes.} function RecvBlock(Timeout: Integer): AnsiString; virtual; {:Read all data from socket to stream until socket is closed (or any error occured.)} procedure RecvStreamRaw(const Stream: TStream; Timeout: Integer); virtual; {:Read requested count of bytes from socket to stream.} procedure RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: int64); {:Receive data to stream. It using @link(RecvBlock) method.} procedure RecvStream(const Stream: TStream; Timeout: Integer); virtual; {:Receive data to stream. This function is compatible with similar function in Indy library. It using @link(RecvBlock) method.} procedure RecvStreamIndy(const Stream: TStream; Timeout: Integer); virtual; {:Same as @link(RecvBuffer), but readed data stays in system input buffer. Warning: this function not respect data in @link(LineBuffer)! Is not recommended to use this function!} function PeekBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; {:Same as @link(RecvByte), but readed data stays in input system buffer. Warning: this function not respect data in @link(LineBuffer)! Is not recommended to use this function!} function PeekByte(Timeout: Integer): Byte; virtual; {:On stream sockets it returns number of received bytes waiting for picking. 0 is returned when there is no such data. On datagram socket it returns length of the first waiting datagram. Returns 0 if no datagram is waiting.} function WaitingData: Integer; virtual; {:Same as @link(WaitingData), but if exists some of data in @link(Linebuffer), return their length instead.} function WaitingDataEx: Integer; {:Clear all waiting data for read from buffers.} procedure Purge; {:Sets linger. Enabled linger means that the system waits another LINGER (in milliseconds) time for delivery of sent data. This function is only for stream type of socket! (TCP)} procedure SetLinger(Enable: Boolean; Linger: Integer); {:Actualize values in @link(LocalSin).} procedure GetSinLocal; {:Actualize values in @link(RemoteSin).} procedure GetSinRemote; {:Actualize values in @link(LocalSin) and @link(RemoteSin).} procedure GetSins; {:Reset @link(LastError) and @link(LastErrorDesc) to non-error state.} procedure ResetLastError; {:If you "manually" call Socket API functions, forward their return code as parameter to this function, which evaluates it, eventually calls GetLastError and found error code returns and stores to @link(LastError).} function SockCheck(SockResult: Integer): Integer; virtual; {:If @link(LastError) contains some error code and @link(RaiseExcept) property is @true, raise adequate exception.} procedure ExceptCheck; {:Returns local computer name as numerical or symbolic value. It try get fully qualified domain name. Name is returned in the format acceptable by functions demanding IP as input parameter.} function LocalName: string; {:Try resolve name to all possible IP address. i.e. If you pass as name result of @link(LocalName) method, you get all IP addresses used by local system.} procedure ResolveNameToIP(Name: string; const IPList: TStrings); {:Try resolve name to primary IP address. i.e. If you pass as name result of @link(LocalName) method, you get primary IP addresses used by local system.} function ResolveName(Name: string): string; {:Try resolve IP to their primary domain name. If IP not have domain name, then is returned original IP.} function ResolveIPToName(IP: string): string; {:Try resolve symbolic port name to port number. (i.e. 'Echo' to 8)} function ResolvePort(Port: string): Word; {:Set information about remote side socket. It is good for seting remote side for sending UDP packet, etc.} procedure SetRemoteSin(IP, Port: string); {:Picks IP socket address from @link(LocalSin).} function GetLocalSinIP: string; virtual; {:Picks IP socket address from @link(RemoteSin).} function GetRemoteSinIP: string; virtual; {:Picks socket PORT number from @link(LocalSin).} function GetLocalSinPort: Integer; virtual; {:Picks socket PORT number from @link(RemoteSin).} function GetRemoteSinPort: Integer; virtual; {:Return @TRUE, if you can read any data from socket or is incoming connection on TCP based socket. Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for read data maybe forever. This function is need only on special cases, when you need use @link(RecvBuffer) function directly! read functioms what have timeout as calling parameter, calling this function internally.} function CanRead(Timeout: Integer): Boolean; virtual; {:Same as @link(CanRead), but additionally return @TRUE if is some data in @link(LineBuffer).} function CanReadEx(Timeout: Integer): Boolean; virtual; {:Return @TRUE, if you can to socket write any data (not full sending buffer). Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for write data maybe forever. This function is need only on special cases!} function CanWrite(Timeout: Integer): Boolean; virtual; {:Same as @link(SendBuffer), but send datagram to address from @link(RemoteSin). Usefull for sending reply to datagram received by function @link(RecvBufferFrom).} function SendBufferTo(const Buffer: TMemory; Length: Integer): Integer; virtual; {:Note: This is low-lever receive function. You must be sure if data is waiting for read before call this function for avoid deadlock! Receives first waiting datagram to allocated buffer. If there is no waiting one, then waits until one comes. Returns length of datagram stored in BUFFER. If length exceeds buffer datagram is truncated. After this @link(RemoteSin) structure contains information about sender of UDP packet.} function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; virtual; {$IFNDEF CIL} {:This function is for check for incoming data on set of sockets. Whitch sockets is checked is decribed by SocketList Tlist with TBlockSocket objects. TList may have maximal number of objects defined by FD_SETSIZE constant. Return @TRUE, if you can from some socket read any data or is incoming connection on TCP based socket. Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for read data maybe forever. If is returned @TRUE, CanReadList TList is filled by all TBlockSocket objects what waiting for read.} function GroupCanRead(const SocketList: TSocketList; Timeout: Integer; const CanReadList: TSocketList): Boolean; {$ENDIF} {:By this method you may turn address reuse mode for local @link(bind). It is good specially for UDP protocol. Using this with TCP protocol is hazardous!} procedure EnableReuse(Value: Boolean); {:Try set timeout for all sending and receiving operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetTimeout(Timeout: Integer); {:Try set timeout for all sending operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetSendTimeout(Timeout: Integer); {:Try set timeout for all receiving operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetRecvTimeout(Timeout: Integer); {:Return value of socket type.} function GetSocketType: integer; Virtual; {:Return value of protocol type for socket creation.} function GetSocketProtocol: integer; Virtual; {:WSA structure with information about socket provider. On non-windows platforms this structure is simulated!} property WSAData: TWSADATA read GetWsaData; {:FDset structure prepared for usage with this socket.} property FDset: TFDSet read FFDset; {:Structure describing local socket side.} property LocalSin: TVarSin read FLocalSin write FLocalSin; {:Structure describing remote socket side.} property RemoteSin: TVarSin read FRemoteSin write FRemoteSin; {:Socket handler. Suitable for "manual" calls to socket API or manual connection of socket to a previously created socket (i.e by Accept method on TCP socket)} property Socket: TSocket read FSocket write SetSocket; {:Last socket operation error code. Error codes are described in socket documentation. Human readable error description is stored in @link(LastErrorDesc) property.} property LastError: Integer read FLastError; {:Human readable error description of @link(LastError) code.} property LastErrorDesc: string read FLastErrorDesc; {:Buffer used by all high-level receiving functions. This buffer is used for optimized reading of data from socket. In normal cases you not need access to this buffer directly!} property LineBuffer: AnsiString read FBuffer write FBuffer; {:Size of Winsock receive buffer. If it is not supported by socket provider, it return as size one kilobyte.} property SizeRecvBuffer: Integer read GetSizeRecvBuffer write SetSizeRecvBuffer; {:Size of Winsock send buffer. If it is not supported by socket provider, it return as size one kilobyte.} property SizeSendBuffer: Integer read GetSizeSendBuffer write SetSizeSendBuffer; {:If @True, turn class to non-blocking mode. Not all functions are working properly in this mode, you must know exactly what you are doing! However when you have big experience with non-blocking programming, then you can optimise your program by non-block mode!} property NonBlockMode: Boolean read FNonBlockMode Write SetNonBlockMode; {:Set Time-to-live value. (if system supporting it!)} property TTL: Integer read GetTTL Write SetTTL; {:If is @true, then class in in IPv6 mode.} property IP6used: Boolean read FIP6used; {:Return count of received bytes on this socket from begin of current connection.} property RecvCounter: int64 read FRecvCounter; {:Return count of sended bytes on this socket from begin of current connection.} property SendCounter: int64 read FSendCounter; published {:Return descriptive string for given error code. This is class function. You may call it without created object!} class function GetErrorDesc(ErrorCode: Integer): string; {:Return descriptive string for @link(LastError).} function GetErrorDescEx: string; virtual; {:this value is for free use.} property Tag: Integer read FTag write FTag; {:If @true, winsock errors raises exception. Otherwise is setted @link(LastError) value only and you must check it from your program! Default value is @false.} property RaiseExcept: Boolean read FRaiseExcept write FRaiseExcept; {:Define maximum length in bytes of @link(LineBuffer) for high-level receiving functions. If this functions try to read more data then this limit, error is returned! If value is 0 (default), no limitation is used. This is very good protection for stupid attacks to your server by sending lot of data without proper terminator... until all your memory is allocated by LineBuffer! Note: This maximum length is checked only in functions, what read unknown number of bytes! (like @link(RecvString) or @link(RecvTerminated))} property MaxLineLength: Integer read FMaxLineLength Write FMaxLineLength; {:Define maximal bandwidth for all sending operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxSendBandwidth: Integer read FMaxSendBandwidth Write FMaxSendBandwidth; {:Define maximal bandwidth for all receiving operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxRecvBandwidth: Integer read FMaxRecvBandwidth Write FMaxRecvBandwidth; {:Define maximal bandwidth for all sending and receiving operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxBandwidth: Integer Write SetBandwidth; {:Do a conversion of non-standard line terminators to CRLF. (Off by default) If @True, then terminators like sigle CR, single LF or LFCR are converted to CRLF internally. This have effect only in @link(RecvString) method!} property ConvertLineEnd: Boolean read FConvertLineEnd Write FConvertLineEnd; {:Specified Family of this socket. When you are using Windows preliminary support for IPv6, then I recommend to set this property!} property Family: TSocketFamily read FFamily Write SetFamily; {:When resolving of domain name return both IPv4 and IPv6 addresses, then specify if is used IPv4 (dafault - @true) or IPv6.} property PreferIP4: Boolean read FPreferIP4 Write FPreferIP4; {:By default (@true) is all timeouts used as timeout between two packets in reading operations. If you set this to @false, then Timeouts is for overall reading operation!} property InterPacketTimeout: Boolean read FInterPacketTimeout Write FInterPacketTimeout; {:All sended datas was splitted by this value.} property SendMaxChunk: Integer read FSendMaxChunk Write FSendMaxChunk; {:By setting this property to @true you can stop any communication. You can use this property for soft abort of communication.} property StopFlag: Boolean read FStopFlag Write FStopFlag; {:Timeout for data sending by non-blocking socket mode.} property NonblockSendTimeout: Integer read FNonblockSendTimeout Write FNonblockSendTimeout; {:Timeout for @link(Connect) call. Default value 0 means default system timeout. Non-zero value means timeout in millisecond.} property ConnectionTimeout: Integer read FConnectionTimeout write FConnectionTimeout; {:This event is called by various reasons. It is good for monitoring socket, create gauges for data transfers, etc.} property OnStatus: THookSocketStatus read FOnStatus write FOnStatus; {:this event is good for some internal thinks about filtering readed datas. It is used by telnet client by example.} property OnReadFilter: THookDataFilter read FOnReadFilter write FOnReadFilter; {:This event is called after real socket creation for setting special socket options, because you not know when socket is created. (it is depended on Ipv4, IPv6 or automatic mode)} property OnCreateSocket: THookCreateSocket read FOnCreateSocket write FOnCreateSocket; {:This event is good for monitoring content of readed or writed datas.} property OnMonitor: THookMonitor read FOnMonitor write FOnMonitor; {:This event is good for calling your code during long socket operations. (Example, for refresing UI if class in not called within the thread.) Rate of heartbeats can be modified by @link(HeartbeatRate) property.} property OnHeartbeat: THookHeartbeat read FOnHeartbeat write FOnHeartbeat; {:Specify typical rate of @link(OnHeartbeat) event and @link(StopFlag) testing. Default value 0 disabling heartbeats! Value is in milliseconds. Real rate can be higher or smaller then this value, because it depending on real socket operations too! Note: Each heartbeat slowing socket processing.} property HeartbeatRate: integer read FHeartbeatRate Write FHeartbeatRate; {:What class own this socket? Used by protocol implementation classes.} property Owner: TObject read FOwner Write FOwner; end; {:@abstract(Support for SOCKS4 and SOCKS5 proxy) Layer with definition all necessary properties and functions for implementation SOCKS proxy client. Do not use this class directly.} TSocksBlockSocket = class(TBlockSocket) protected FSocksIP: string; FSocksPort: string; FSocksTimeout: integer; FSocksUsername: string; FSocksPassword: string; FUsingSocks: Boolean; FSocksResolver: Boolean; FSocksLastError: integer; FSocksResponseIP: string; FSocksResponsePort: string; FSocksLocalIP: string; FSocksLocalPort: string; FSocksRemoteIP: string; FSocksRemotePort: string; FBypassFlag: Boolean; FSocksType: TSocksType; function SocksCode(IP, Port: string): Ansistring; function SocksDecode(Value: Ansistring): integer; public constructor Create; {:Open connection to SOCKS proxy and if @link(SocksUsername) is set, do authorisation to proxy. This is needed only in special cases! (it is called internally!)} function SocksOpen: Boolean; {:Send specified request to SOCKS proxy. This is needed only in special cases! (it is called internally!)} function SocksRequest(Cmd: Byte; const IP, Port: string): Boolean; {:Receive response to previosly sended request. This is needed only in special cases! (it is called internally!)} function SocksResponse: Boolean; {:Is @True when class is using SOCKS proxy.} property UsingSocks: Boolean read FUsingSocks; {:If SOCKS proxy failed, here is error code returned from SOCKS proxy.} property SocksLastError: integer read FSocksLastError; published {:Address of SOCKS server. If value is empty string, SOCKS support is disabled. Assingning any value to this property enable SOCKS mode. Warning: You cannot combine this mode with HTTP-tunneling mode!} property SocksIP: string read FSocksIP write FSocksIP; {:Port of SOCKS server. Default value is '1080'.} property SocksPort: string read FSocksPort write FSocksPort; {:If you need authorisation on SOCKS server, set username here.} property SocksUsername: string read FSocksUsername write FSocksUsername; {:If you need authorisation on SOCKS server, set password here.} property SocksPassword: string read FSocksPassword write FSocksPassword; {:Specify timeout for communicatin with SOCKS server. Default is one minute.} property SocksTimeout: integer read FSocksTimeout write FSocksTimeout; {:If @True, all symbolic names of target hosts is not translated to IP's locally, but resolving is by SOCKS proxy. Default is @True.} property SocksResolver: Boolean read FSocksResolver write FSocksResolver; {:Specify SOCKS type. By default is used SOCKS5, but you can use SOCKS4 too. When you select SOCKS4, then if @link(SOCKSResolver) is enabled, then is used SOCKS4a. Othervise is used pure SOCKS4.} property SocksType: TSocksType read FSocksType write FSocksType; end; {:@abstract(Implementation of TCP socket.) Supported features: IPv4, IPv6, SSL/TLS or SSH (depending on used plugin), SOCKS5 proxy (outgoing connections and limited incomming), SOCKS4/4a proxy (outgoing connections and limited incomming), TCP through HTTP proxy tunnel.} TTCPBlockSocket = class(TSocksBlockSocket) protected FOnAfterConnect: THookAfterConnect; FSSL: TCustomSSL; FHTTPTunnelIP: string; FHTTPTunnelPort: string; FHTTPTunnel: Boolean; FHTTPTunnelRemoteIP: string; FHTTPTunnelRemotePort: string; FHTTPTunnelUser: string; FHTTPTunnelPass: string; FHTTPTunnelTimeout: integer; procedure SocksDoConnect(IP, Port: string); procedure HTTPTunnelDoConnect(IP, Port: string); procedure DoAfterConnect; public {:Create TCP socket class with default plugin for SSL/TSL/SSH implementation (see @link(SSLImplementation))} constructor Create; {:Create TCP socket class with desired plugin for SSL/TSL/SSH implementation} constructor CreateWithSSL(SSLPlugin: TSSLClass); destructor Destroy; override; {:See @link(TBlockSocket.CloseSocket)} procedure CloseSocket; override; {:See @link(TBlockSocket.WaitingData)} function WaitingData: Integer; override; {:Sets socket to receive mode for new incoming connections. It is necessary to use @link(TBlockSocket.BIND) function call before this method to select receiving port! If you use SOCKS, activate incoming TCP connection by this proxy. (By BIND method of SOCKS.)} procedure Listen; override; {:Waits until new incoming connection comes. After it comes a new socket is automatically created (socket handler is returned by this function as result). If you use SOCKS, new socket is not created! In this case is used same socket as socket for listening! So, you can accept only one connection in SOCKS mode.} function Accept: TSocket; override; {:Connects socket to remote IP address and PORT. The same rules as with @link(TBlockSocket.BIND) method are valid. The only exception is that PORT with 0 value will not be connected. After call to this method a communication channel between local and remote socket is created. Local socket is assigned automatically if not controlled by previous call to @link(TBlockSocket.BIND) method. Structures @link(TBlockSocket.LocalSin) and @link(TBlockSocket.RemoteSin) will be filled with valid values. If you use SOCKS, activate outgoing TCP connection by SOCKS proxy specified in @link(TSocksBlockSocket.SocksIP). (By CONNECT method of SOCKS.) If you use HTTP-tunnel mode, activate outgoing TCP connection by HTTP tunnel specified in @link(HTTPTunnelIP). (By CONNECT method of HTTP protocol.) Note: If you call this on non-created socket, then socket is created automaticly.} procedure Connect(IP, Port: string); override; {:If you need upgrade existing TCP connection to SSL/TLS (or SSH2, if plugin allows it) mode, then call this method. This method switch this class to SSL mode and do SSL/TSL handshake.} procedure SSLDoConnect; {:By this method you can downgrade existing SSL/TLS connection to normal TCP connection.} procedure SSLDoShutdown; {:If you need use this component as SSL/TLS TCP server, then after accepting of inbound connection you need start SSL/TLS session by this method. Before call this function, you must have assigned all neeeded certificates and keys!} function SSLAcceptConnection: Boolean; {:See @link(TBlockSocket.GetLocalSinIP)} function GetLocalSinIP: string; override; {:See @link(TBlockSocket.GetRemoteSinIP)} function GetRemoteSinIP: string; override; {:See @link(TBlockSocket.GetLocalSinPort)} function GetLocalSinPort: Integer; override; {:See @link(TBlockSocket.GetRemoteSinPort)} function GetRemoteSinPort: Integer; override; {:See @link(TBlockSocket.SendBuffer)} function SendBuffer(const Buffer: TMemory; Length: Integer): Integer; override; {:See @link(TBlockSocket.RecvBuffer)} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:Return value of socket type. For TCP return SOCK_STREAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For TCP return IPPROTO_TCP.} function GetSocketProtocol: integer; override; {:Class implementing SSL/TLS support. It is allways some descendant of @link(TCustomSSL) class. When programmer not select some SSL plugin class, then is used @link(TSSLNone)} property SSL: TCustomSSL read FSSL; {:@True if is used HTTP tunnel mode.} property HTTPTunnel: Boolean read FHTTPTunnel; published {:Return descriptive string for @link(LastError). On case of error in SSL/TLS subsystem, it returns right error description.} function GetErrorDescEx: string; override; {:Specify IP address of HTTP proxy. Assingning non-empty value to this property enable HTTP-tunnel mode. This mode is for tunnelling any outgoing TCP connection through HTTP proxy server. (If policy on HTTP proxy server allow this!) Warning: You cannot combine this mode with SOCK5 mode!} property HTTPTunnelIP: string read FHTTPTunnelIP Write FHTTPTunnelIP; {:Specify port of HTTP proxy for HTTP-tunneling.} property HTTPTunnelPort: string read FHTTPTunnelPort Write FHTTPTunnelPort; {:Specify authorisation username for access to HTTP proxy in HTTP-tunnel mode. If you not need authorisation, then let this property empty.} property HTTPTunnelUser: string read FHTTPTunnelUser Write FHTTPTunnelUser; {:Specify authorisation password for access to HTTP proxy in HTTP-tunnel mode.} property HTTPTunnelPass: string read FHTTPTunnelPass Write FHTTPTunnelPass; {:Specify timeout for communication with HTTP proxy in HTTPtunnel mode.} property HTTPTunnelTimeout: integer read FHTTPTunnelTimeout Write FHTTPTunnelTimeout; {:This event is called after sucessful TCP socket connection.} property OnAfterConnect: THookAfterConnect read FOnAfterConnect write FOnAfterConnect; end; {:@abstract(Datagram based communication) This class implementing datagram based communication instead default stream based communication style.} TDgramBlockSocket = class(TSocksBlockSocket) public {:Fill @link(TBlockSocket.RemoteSin) structure. This address is used for sending data.} procedure Connect(IP, Port: string); override; {:Silently redirected to @link(TBlockSocket.SendBufferTo).} function SendBuffer(const Buffer: TMemory; Length: Integer): Integer; override; {:Silently redirected to @link(TBlockSocket.RecvBufferFrom).} function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; override; end; {:@abstract(Implementation of UDP socket.) NOTE: in this class is all receiving redirected to RecvBufferFrom. You can use for reading any receive function. Preffered is RecvPacket! Similary all sending is redirected to SendbufferTo. You can use for sending UDP packet any sending function, like SendString. Supported features: IPv4, IPv6, unicasts, broadcasts, multicasts, SOCKS5 proxy (only unicasts! Outgoing and incomming.)} TUDPBlockSocket = class(TDgramBlockSocket) protected FSocksControlSock: TTCPBlockSocket; function UdpAssociation: Boolean; procedure SetMulticastTTL(TTL: integer); function GetMulticastTTL:integer; public destructor Destroy; override; {:Enable or disable sending of broadcasts. If seting OK, result is @true. This method is not supported in SOCKS5 mode! IPv6 does not support broadcasts! In this case you must use Multicasts instead.} procedure EnableBroadcast(Value: Boolean); {:See @link(TBlockSocket.SendBufferTo)} function SendBufferTo(const Buffer: TMemory; Length: Integer): Integer; override; {:See @link(TBlockSocket.RecvBufferFrom)} function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; override; {$IFNDEF CIL} {:Add this socket to given multicast group. You cannot use Multicasts in SOCKS mode!} procedure AddMulticast(MCastIP:string); {:Remove this socket from given multicast group.} procedure DropMulticast(MCastIP:string); {$ENDIF} {:All sended multicast datagrams is loopbacked to your interface too. (you can read your sended datas.) You can disable this feature by this function. This function not working on some Windows systems!} procedure EnableMulticastLoop(Value: Boolean); {:Return value of socket type. For UDP return SOCK_DGRAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For UDP return IPPROTO_UDP.} function GetSocketProtocol: integer; override; {:Set Time-to-live value for multicasts packets. It define number of routers for transfer of datas. If you set this to 1 (dafault system value), then multicasts packet goes only to you local network. If you need transport multicast packet to worldwide, then increase this value, but be carefull, lot of routers on internet does not transport multicasts packets!} property MulticastTTL: Integer read GetMulticastTTL Write SetMulticastTTL; end; {:@abstract(Implementation of RAW ICMP socket.) For this object you must have rights for creating RAW sockets!} TICMPBlockSocket = class(TDgramBlockSocket) public {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For ICMP returns IPPROTO_ICMP or IPPROTO_ICMPV6} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of RAW socket.) For this object you must have rights for creating RAW sockets!} TRAWBlockSocket = class(TBlockSocket) public {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For RAW returns IPPROTO_RAW.} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of PGM-message socket.) Not all systems supports this protocol!} TPGMMessageBlockSocket = class(TBlockSocket) public {:Return value of socket type. For PGM-message return SOCK_RDM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For PGM-message returns IPPROTO_RM.} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of PGM-stream socket.) Not all systems supports this protocol!} TPGMStreamBlockSocket = class(TBlockSocket) public {:Return value of socket type. For PGM-stream return SOCK_STREAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For PGM-stream returns IPPROTO_RM.} function GetSocketProtocol: integer; override; end; {:@abstract(Parent class for all SSL plugins.) This is abstract class defining interface for other SSL plugins. Instance of this class will be created for each @link(TTCPBlockSocket). Warning: not all methods and propertis can work in all existing SSL plugins! Please, read documentation of used SSL plugin.} TCustomSSL = class(TObject) private protected FSessionOld: Pointer; FSessionNew: Pointer; FOnVerifyCert: THookVerifyCert; FSocket: TTCPBlockSocket; FSSLEnabled: Boolean; FLastError: integer; FLastErrorDesc: string; FSSLType: TSSLType; FKeyPassword: string; FCiphers: string; FCertificateFile: string; FPrivateKeyFile: string; FCertificate: Ansistring; FPrivateKey: Ansistring; FPFX: Ansistring; FPFXfile: string; FCertCA: Ansistring; FCertCAFile: string; FTrustCertificate: Ansistring; FTrustCertificateFile: string; FVerifyCert: Boolean; FUsername: string; FPassword: string; FSSHChannelType: string; FSSHChannelArg1: string; FSSHChannelArg2: string; FCertComplianceLevel: integer; FSNIHost: string; procedure ReturnError; procedure SetCertCAFile(const Value: string); virtual; function DoVerifyCert:boolean; function CreateSelfSignedCert(Host: string): Boolean; virtual; public {: Create plugin class. it is called internally from @link(TTCPBlockSocket)} constructor Create(const Value: TTCPBlockSocket); virtual; {: Assign settings (certificates and configuration) from another SSL plugin class.} procedure Assign(const Value: TCustomSSL); virtual; {: return description of used plugin. It usually return name and version of used SSL library.} function LibVersion: String; virtual; {: return name of used plugin.} function LibName: String; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for start SSL connection.} function Connect: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for acept new SSL connection.} function Accept: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for hard shutdown of SSL connection. (for example, before socket is closed)} function Shutdown: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for soft shutdown of SSL connection. (for example, when you need to continue with unprotected connection.)} function BiShutdown: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for sending some datas by SSL connection.} function SendBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for receiving some datas by SSL connection.} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for getting count of datas what waiting for read. If SSL plugin not allows this, then it should return 0.} function WaitingData: Integer; virtual; {:Return string with identificator of SSL/TLS version of existing connection.} function GetSSLVersion: string; virtual; {:Return subject of remote SSL peer.} function GetPeerSubject: string; virtual; {:Return Serial number if remote X509 certificate.} function GetPeerSerialNo: integer; virtual; {:Return issuer certificate of remote SSL peer.} function GetPeerIssuer: string; virtual; {:Return peer name from remote side certificate. This is good for verify, if certificate is generated for remote side IP name.} function GetPeerName: string; virtual; {:Returns has of peer name from remote side certificate. This is good for fast remote side authentication.} function GetPeerNameHash: cardinal; virtual; {:Return fingerprint of remote SSL peer. (As binary nonprintable string!)} function GetPeerFingerprint: AnsiString; virtual; {:Return all detailed information about certificate from remote side of SSL/TLS connection. Result string can be multilined! Each plugin can return this informations in different format!} function GetCertInfo: string; virtual; {:Return currently used Cipher.} function GetCipherName: string; virtual; {:Return currently used number of bits in current Cipher algorythm.} function GetCipherBits: integer; virtual; {:Return number of bits in current Cipher algorythm.} function GetCipherAlgBits: integer; virtual; {:Return result value of verify remote side certificate. Look to OpenSSL documentation for possible values. For example 0 is successfuly verified certificate, or 18 is self-signed certificate.} function GetVerifyCert: integer; virtual; {: Resurn @true if SSL mode is enabled on existing cvonnection.} property SSLEnabled: Boolean read FSSLEnabled; {:Return error code of last SSL operation. 0 is OK.} property LastError: integer read FLastError; {:Return error description of last SSL operation.} property LastErrorDesc: string read FLastErrorDesc; {:Used for session resumption } property Session: Pointer read FSessionNew write FSessionOld; published {:Here you can specify requested SSL/TLS mode. Default is autodetection, but on some servers autodetection not working properly. In this case you must specify requested SSL/TLS mode by your hand!} property SSLType: TSSLType read FSSLType write FSSLType; {:Password for decrypting of encoded certificate or key.} property KeyPassword: string read FKeyPassword write FKeyPassword; {:Username for possible credentials.} property Username: string read FUsername write FUsername; {:password for possible credentials.} property Password: string read FPassword write FPassword; {:By this property you can modify default set of SSL/TLS ciphers.} property Ciphers: string read FCiphers write FCiphers; {:Used for loading certificate from disk file. See to plugin documentation if this method is supported and how!} property CertificateFile: string read FCertificateFile write FCertificateFile; {:Used for loading private key from disk file. See to plugin documentation if this method is supported and how!} property PrivateKeyFile: string read FPrivateKeyFile write FPrivateKeyFile; {:Used for loading certificate from binary string. See to plugin documentation if this method is supported and how!} property Certificate: Ansistring read FCertificate write FCertificate; {:Used for loading private key from binary string. See to plugin documentation if this method is supported and how!} property PrivateKey: Ansistring read FPrivateKey write FPrivateKey; {:Used for loading PFX from binary string. See to plugin documentation if this method is supported and how!} property PFX: Ansistring read FPFX write FPFX; {:Used for loading PFX from disk file. See to plugin documentation if this method is supported and how!} property PFXfile: string read FPFXfile write FPFXfile; {:Used for loading trusted certificates from disk file. See to plugin documentation if this method is supported and how!} property TrustCertificateFile: string read FTrustCertificateFile write FTrustCertificateFile; {:Used for loading trusted certificates from binary string. See to plugin documentation if this method is supported and how!} property TrustCertificate: Ansistring read FTrustCertificate write FTrustCertificate; {:Used for loading CA certificates from binary string. See to plugin documentation if this method is supported and how!} property CertCA: Ansistring read FCertCA write FCertCA; {:Used for loading CA certificates from disk file. See to plugin documentation if this method is supported and how!} property CertCAFile: string read FCertCAFile write SetCertCAFile; {:If @true, then is verified client certificate. (it is good for writing SSL/TLS servers.) When you are not server, but you are client, then if this property is @true, verify servers certificate.} property VerifyCert: Boolean read FVerifyCert write FVerifyCert; {:channel type for possible SSH connections} property SSHChannelType: string read FSSHChannelType write FSSHChannelType; {:First argument of channel type for possible SSH connections} property SSHChannelArg1: string read FSSHChannelArg1 write FSSHChannelArg1; {:Second argument of channel type for possible SSH connections} property SSHChannelArg2: string read FSSHChannelArg2 write FSSHChannelArg2; {: Level of standards compliance level (CryptLib: values in cryptlib.pas, -1: use default value ) } property CertComplianceLevel:integer read FCertComplianceLevel write FCertComplianceLevel; {:This event is called when verifying the server certificate immediatally after a successfull verification in the ssl library.} property OnVerifyCert: THookVerifyCert read FOnVerifyCert write FOnVerifyCert; {: Server Name Identification. Host name to send to server. If empty the host name found in URL will be used, which should be the normal use (http Header Host = SNI Host). The value is cleared after the connection is established. (SNI support requires OpenSSL 0.9.8k or later. Cryptlib not supported, yet ) } property SNIHost:string read FSNIHost write FSNIHost; end; {:@abstract(Default SSL plugin with no SSL support.) Dummy SSL plugin implementation for applications without SSL/TLS support.} TSSLNone = class (TCustomSSL) public {:See @inherited} function LibVersion: String; override; {:See @inherited} function LibName: String; override; end; {:@abstract(Record with definition of IP packet header.) For reading data from ICMP or RAW sockets.} TIPHeader = record VerLen: Byte; TOS: Byte; TotalLen: Word; Identifer: Word; FragOffsets: Word; TTL: Byte; Protocol: Byte; CheckSum: Word; SourceIp: LongWord; DestIp: LongWord; Options: LongWord; end; {:@abstract(Parent class of application protocol implementations.) By this class is defined common properties.} TSynaClient = Class(TObject) protected FTargetHost: string; FTargetPort: string; FIPInterface: string; FTimeout: integer; FUserName: string; FPassword: string; public constructor Create; published {:Specify terget server IP (or symbolic name). Default is 'localhost'.} property TargetHost: string read FTargetHost Write FTargetHost; {:Specify terget server port (or symbolic name).} property TargetPort: string read FTargetPort Write FTargetPort; {:Defined local socket address. (outgoing IP address). By default is used '0.0.0.0' as wildcard for default IP.} property IPInterface: string read FIPInterface Write FIPInterface; {:Specify default timeout for socket operations.} property Timeout: integer read FTimeout Write FTimeout; {:If protocol need user authorization, then fill here username.} property UserName: string read FUserName Write FUserName; {:If protocol need user authorization, then fill here password.} property Password: string read FPassword Write FPassword; end; var {:Selected SSL plugin. Default is @link(TSSLNone). Do not change this value directly!!! Just add your plugin unit to your project uses instead. Each plugin unit have initialization code what modify this variable.} SSLImplementation: TSSLClass = TSSLNone; implementation {$IFDEF ONCEWINSOCK} var WsaDataOnce: TWSADATA; e: ESynapseError; {$ENDIF} constructor TBlockSocket.Create; begin CreateAlternate(''); end; constructor TBlockSocket.CreateAlternate(Stub: string); {$IFNDEF ONCEWINSOCK} var e: ESynapseError; {$ENDIF} begin inherited Create; FDelayedOptions := TOptionList.Create; FRaiseExcept := False; {$IFDEF RAISEEXCEPT} FRaiseExcept := True; {$ENDIF} FSocket := INVALID_SOCKET; FBuffer := ''; FLastCR := False; FLastLF := False; FBinded := False; FNonBlockMode := False; FMaxLineLength := 0; FMaxSendBandwidth := 0; FNextSend := 0; FMaxRecvBandwidth := 0; FNextRecv := 0; FConvertLineEnd := False; FFamily := SF_Any; FFamilySave := SF_Any; FIP6used := False; FPreferIP4 := True; FInterPacketTimeout := True; FRecvCounter := 0; FSendCounter := 0; FSendMaxChunk := c64k; FStopFlag := False; FNonblockSendTimeout := 15000; FHeartbeatRate := 0; FConnectionTimeout := 0; FOwner := nil; {$IFNDEF ONCEWINSOCK} if Stub = '' then Stub := DLLStackName; if not InitSocketInterface(Stub) then begin e := ESynapseError.Create('Error loading Socket interface (' + Stub + ')!'); e.ErrorCode := 0; e.ErrorMessage := 'Error loading Socket interface (' + Stub + ')!'; raise e; end; SockCheck(synsock.WSAStartup(WinsockLevel, FWsaDataOnce)); ExceptCheck; {$ENDIF} end; destructor TBlockSocket.Destroy; var n: integer; p: TSynaOption; begin CloseSocket; {$IFNDEF ONCEWINSOCK} synsock.WSACleanup; DestroySocketInterface; {$ENDIF} for n := FDelayedOptions.Count - 1 downto 0 do begin p := TSynaOption(FDelayedOptions[n]); p.Free; end; FDelayedOptions.Free; inherited Destroy; end; function TBlockSocket.FamilyToAF(f: TSocketFamily): TAddrFamily; begin case f of SF_ip4: Result := AF_INET; SF_ip6: Result := AF_INET6; else Result := AF_UNSPEC; end; end; procedure TBlockSocket.SetDelayedOption(const Value: TSynaOption); var li: TLinger; x: integer; buf: TMemory; {$IFNDEF MSWINDOWS} timeval: TTimeval; {$ENDIF} begin case value.Option of SOT_Linger: begin {$IFDEF CIL} li := TLinger.Create(Value.Enabled, Value.Value div 1000); synsock.SetSockOptObj(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), li); {$ELSE} li.l_onoff := Ord(Value.Enabled); li.l_linger := Value.Value div 1000; buf := @li; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), buf, SizeOf(li)); {$ENDIF} end; SOT_RecvBuff: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), buf, SizeOf(Value.Value)); end; SOT_SendBuff: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), buf, SizeOf(Value.Value)); end; SOT_NonBlock: begin FNonBlockMode := Value.Enabled; x := Ord(FNonBlockMode); synsock.IoctlSocket(FSocket, FIONBIO, x); end; SOT_RecvTimeout: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), buf, SizeOf(Value.Value)); {$ELSE} {$IFDEF MSWINDOWS} buf := @Value.Value; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), buf, SizeOf(Value.Value)); {$ELSE} timeval.tv_sec:=Value.Value div 1000; timeval.tv_usec:=(Value.Value mod 1000) * 1000; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), @timeval, SizeOf(timeval)); {$ENDIF} {$ENDIF} end; SOT_SendTimeout: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} {$IFDEF MSWINDOWS} buf := @Value.Value; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDTIMEO), buf, SizeOf(Value.Value)); {$ELSE} timeval.tv_sec:=Value.Value div 1000; timeval.tv_usec:=(Value.Value mod 1000) * 1000; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDTIMEO), @timeval, SizeOf(timeval)); {$ENDIF} {$ENDIF} end; SOT_Reuse: begin x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_REUSEADDR), buf, SizeOf(x)); end; SOT_TTL: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_UNICAST_HOPS), buf, SizeOf(Value.Value)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_TTL), buf, SizeOf(Value.Value)); end; SOT_Broadcast: begin //#todo1 broadcasty na IP6 x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_BROADCAST), buf, SizeOf(x)); end; SOT_MulticastTTL: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_HOPS), buf, SizeOf(Value.Value)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_TTL), buf, SizeOf(Value.Value)); end; SOT_MulticastLoop: begin x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_LOOP), buf, SizeOf(x)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_LOOP), buf, SizeOf(x)); end; end; Value.Free; end; procedure TBlockSocket.DelayedOption(const Value: TSynaOption); begin if FSocket = INVALID_SOCKET then begin FDelayedOptions.Insert(0, Value); end else SetDelayedOption(Value); end; procedure TBlockSocket.ProcessDelayedOptions; var n: integer; d: TSynaOption; begin for n := FDelayedOptions.Count - 1 downto 0 do begin d := TSynaOption(FDelayedOptions[n]); SetDelayedOption(d); end; FDelayedOptions.Clear; end; procedure TBlockSocket.SetSin(var Sin: TVarSin; IP, Port: string); var f: TSocketFamily; begin DoStatus(HR_ResolvingBegin, IP + ':' + Port); ResetLastError; //if socket exists, then use their type, else use users selection f := SF_Any; if (FSocket = INVALID_SOCKET) and (FFamily = SF_any) then begin if IsIP(IP) then f := SF_IP4 else if IsIP6(IP) then f := SF_IP6; end else f := FFamily; FLastError := synsock.SetVarSin(sin, ip, port, FamilyToAF(f), GetSocketprotocol, GetSocketType, FPreferIP4); DoStatus(HR_ResolvingEnd, GetSinIP(sin) + ':' + IntTostr(GetSinPort(sin))); end; function TBlockSocket.GetSinIP(Sin: TVarSin): string; begin Result := synsock.GetSinIP(sin); end; function TBlockSocket.GetSinPort(Sin: TVarSin): Integer; begin Result := synsock.GetSinPort(sin); end; procedure TBlockSocket.CreateSocket; var sin: TVarSin; begin //dummy for SF_Any Family mode ResetLastError; if (FFamily <> SF_Any) and (FSocket = INVALID_SOCKET) then begin {$IFDEF CIL} if FFamily = SF_IP6 then sin := TVarSin.Create(IPAddress.Parse('::0'), 0) else sin := TVarSin.Create(IPAddress.Parse('0.0.0.0'), 0); {$ELSE} FillChar(Sin, Sizeof(Sin), 0); if FFamily = SF_IP6 then sin.sin_family := AF_INET6 else sin.sin_family := AF_INET; {$ENDIF} InternalCreateSocket(Sin); end; end; procedure TBlockSocket.CreateSocketByName(const Value: String); var sin: TVarSin; begin ResetLastError; if FSocket = INVALID_SOCKET then begin SetSin(sin, value, '0'); if FLastError = 0 then InternalCreateSocket(Sin); end; end; procedure TBlockSocket.InternalCreateSocket(Sin: TVarSin); begin FStopFlag := False; FRecvCounter := 0; FSendCounter := 0; ResetLastError; if FSocket = INVALID_SOCKET then begin FBuffer := ''; FBinded := False; FIP6Used := Sin.AddressFamily = AF_INET6; FSocket := synsock.Socket(integer(Sin.AddressFamily), GetSocketType, GetSocketProtocol); if FSocket = INVALID_SOCKET then FLastError := synsock.WSAGetLastError; {$IFNDEF CIL} FD_ZERO(FFDSet); FD_SET(FSocket, FFDSet); {$ENDIF} ExceptCheck; if FIP6used then DoStatus(HR_SocketCreate, 'IPv6') else DoStatus(HR_SocketCreate, 'IPv4'); ProcessDelayedOptions; DoCreateSocket; end; end; procedure TBlockSocket.CloseSocket; begin AbortSocket; end; procedure TBlockSocket.AbortSocket; var n: integer; p: TSynaOption; begin if FSocket <> INVALID_SOCKET then synsock.CloseSocket(FSocket); FSocket := INVALID_SOCKET; for n := FDelayedOptions.Count - 1 downto 0 do begin p := TSynaOption(FDelayedOptions[n]); p.Free; end; FDelayedOptions.Clear; FFamily := FFamilySave; DoStatus(HR_SocketClose, ''); end; procedure TBlockSocket.Bind(const IP, Port: string); var Sin: TVarSin; begin ResetLastError; if (FSocket <> INVALID_SOCKET) or not((FFamily = SF_ANY) and (IP = cAnyHost) and (Port = cAnyPort)) then begin SetSin(Sin, IP, Port); if FLastError = 0 then begin if FSocket = INVALID_SOCKET then InternalCreateSocket(Sin); SockCheck(synsock.Bind(FSocket, Sin)); GetSinLocal; FBuffer := ''; FBinded := True; end; ExceptCheck; DoStatus(HR_Bind, IP + ':' + Port); end; end; procedure TBlockSocket.Connect(IP, Port: string); var Sin: TVarSin; b: boolean; begin SetSin(Sin, IP, Port); if FLastError = 0 then begin if FSocket = INVALID_SOCKET then InternalCreateSocket(Sin); if FConnectionTimeout > 0 then begin // connect in non-blocking mode b := NonBlockMode; NonBlockMode := true; SockCheck(synsock.Connect(FSocket, Sin)); if (FLastError = WSAEINPROGRESS) OR (FLastError = WSAEWOULDBLOCK) then if not CanWrite(FConnectionTimeout) then FLastError := WSAETIMEDOUT; NonBlockMode := b; end else SockCheck(synsock.Connect(FSocket, Sin)); if FLastError = 0 then GetSins; FBuffer := ''; FLastCR := False; FLastLF := False; end; ExceptCheck; DoStatus(HR_Connect, IP + ':' + Port); end; procedure TBlockSocket.Listen; begin SockCheck(synsock.Listen(FSocket, SOMAXCONN)); GetSins; ExceptCheck; DoStatus(HR_Listen, ''); end; function TBlockSocket.Accept: TSocket; begin Result := synsock.Accept(FSocket, FRemoteSin); /// SockCheck(Result); ExceptCheck; DoStatus(HR_Accept, ''); end; procedure TBlockSocket.GetSinLocal; begin synsock.GetSockName(FSocket, FLocalSin); end; procedure TBlockSocket.GetSinRemote; begin synsock.GetPeerName(FSocket, FRemoteSin); end; procedure TBlockSocket.GetSins; begin GetSinLocal; GetSinRemote; end; procedure TBlockSocket.SetBandwidth(Value: Integer); begin MaxSendBandwidth := Value; MaxRecvBandwidth := Value; end; procedure TBlockSocket.LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); var x: LongWord; y: LongWord; n: integer; begin if FStopFlag then exit; if MaxB > 0 then begin y := GetTick; if Next > y then begin x := Next - y; if x > 0 then begin DoStatus(HR_Wait, IntToStr(x)); sleep(x mod 250); for n := 1 to x div 250 do if FStopFlag then Break else sleep(250); end; end; Next := GetTick + LongWord(Trunc((Length / MaxB) * 1000)); end; end; function TBlockSocket.TestStopFlag: Boolean; begin DoHeartbeat; Result := FStopFlag; if Result then begin FStopFlag := False; FLastError := WSAECONNABORTED; ExceptCheck; end; end; function TBlockSocket.SendBuffer(const Buffer: TMemory; Length: Integer): Integer; {$IFNDEF CIL} var x, y: integer; l, r: integer; p: Pointer; {$ENDIF} begin Result := 0; if TestStopFlag then Exit; DoMonitor(True, Buffer, Length); {$IFDEF CIL} Result := synsock.Send(FSocket, Buffer, Length, 0); {$ELSE} l := Length; x := 0; while x < l do begin y := l - x; if y > FSendMaxChunk then y := FSendMaxChunk; if y > 0 then begin LimitBandwidth(y, FMaxSendBandwidth, FNextsend); p := IncPoint(Buffer, x); r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); SockCheck(r); if FLastError = WSAEWOULDBLOCK then begin if CanWrite(FNonblockSendTimeout) then begin r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); SockCheck(r); end else FLastError := WSAETIMEDOUT; end; if FLastError <> 0 then Break; Inc(x, r); Inc(Result, r); Inc(FSendCounter, r); DoStatus(HR_WriteCount, IntToStr(r)); end else break; end; {$ENDIF} ExceptCheck; end; procedure TBlockSocket.SendByte(Data: Byte); {$IFDEF CIL} var buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 1); buf[0] := Data; SendBuffer(buf, 1); {$ELSE} SendBuffer(@Data, 1); {$ENDIF} end; procedure TBlockSocket.SendString(Data: AnsiString); var buf: TMemory; begin {$IFDEF CIL} buf := BytesOf(Data); {$ELSE} buf := Pointer(data); {$ENDIF} SendBuffer(buf, Length(Data)); end; procedure TBlockSocket.SendInteger(Data: integer); var buf: TMemory; begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(Data); {$ELSE} buf := @Data; {$ENDIF} SendBuffer(buf, SizeOf(Data)); end; procedure TBlockSocket.SendBlock(const Data: AnsiString); var i: integer; begin i := SwapBytes(Length(data)); SendString(Codelongint(i) + Data); end; procedure TBlockSocket.InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); var l: integer; yr: integer; s: AnsiString; b: boolean; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin b := true; l := 0; if WithSize then begin l := Stream.Size - Stream.Position;; if not Indy then l := synsock.HToNL(l); end; repeat {$IFDEF CIL} Setlength(buf, FSendMaxChunk); yr := Stream.read(buf, FSendMaxChunk); if yr > 0 then begin if WithSize and b then begin b := false; SendString(CodeLongInt(l)); end; SendBuffer(buf, yr); if FLastError <> 0 then break; end {$ELSE} Setlength(s, FSendMaxChunk); yr := Stream.read(Pointer(s)^, FSendMaxChunk); if yr > 0 then begin SetLength(s, yr); if WithSize and b then begin b := false; SendString(CodeLongInt(l) + s); end else SendString(s); if FLastError <> 0 then break; end {$ENDIF} until yr <= 0; end; procedure TBlockSocket.SendStreamRaw(const Stream: TStream); begin InternalSendStream(Stream, false, false); end; procedure TBlockSocket.SendStreamIndy(const Stream: TStream); begin InternalSendStream(Stream, true, true); end; procedure TBlockSocket.SendStream(const Stream: TStream); begin InternalSendStream(Stream, true, false); end; function TBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); // Result := synsock.Recv(FSocket, Buffer^, Length, MSG_NOSIGNAL); Result := synsock.Recv(FSocket, Buffer, Length, MSG_NOSIGNAL); if Result = 0 then FLastError := WSAECONNRESET else SockCheck(Result); ExceptCheck; if Result > 0 then begin Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); DoReadFilter(Buffer, Result); end; end; function TBlockSocket.RecvBufferEx(Buffer: TMemory; Len: Integer; Timeout: Integer): Integer; var s: AnsiString; rl, l: integer; ti: LongWord; {$IFDEF CIL} n: integer; b: TMemory; {$ENDIF} begin ResetLastError; Result := 0; if Len > 0 then begin rl := 0; repeat ti := GetTick; s := RecvPacket(Timeout); l := Length(s); if (rl + l) > Len then l := Len - rl; {$IFDEF CIL} b := BytesOf(s); for n := 0 to l do Buffer[rl + n] := b[n]; {$ELSE} Move(Pointer(s)^, IncPoint(Buffer, rl)^, l); {$ENDIF} rl := rl + l; if FLastError <> 0 then Break; if rl >= Len then Break; if not FInterPacketTimeout then begin Timeout := Timeout - integer(TickDelta(ti, GetTick)); if Timeout <= 0 then begin FLastError := WSAETIMEDOUT; Break; end; end; until False; delete(s, 1, l); FBuffer := s; Result := rl; end; end; function TBlockSocket.RecvBufferStr(Len: Integer; Timeout: Integer): AnsiString; var x: integer; {$IFDEF CIL} buf: Tmemory; {$ENDIF} begin Result := ''; if Len > 0 then begin {$IFDEF CIL} Setlength(Buf, Len); x := RecvBufferEx(buf, Len , Timeout); if FLastError = 0 then begin SetLength(Buf, x); Result := StringOf(buf); end else Result := ''; {$ELSE} Setlength(Result, Len); x := RecvBufferEx(Pointer(Result), Len , Timeout); if FLastError = 0 then SetLength(Result, x) else Result := ''; {$ENDIF} end; end; function TBlockSocket.RecvPacket(Timeout: Integer): AnsiString; var x: integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin Result := ''; ResetLastError; if FBuffer <> '' then begin Result := FBuffer; FBuffer := ''; end else begin {$IFDEF MSWINDOWS} //not drain CPU on large downloads... Sleep(0); {$ENDIF} x := WaitingData; if x > 0 then begin {$IFDEF CIL} SetLength(Buf, x); x := RecvBuffer(Buf, x); if x >= 0 then begin SetLength(Buf, x); Result := StringOf(Buf); end; {$ELSE} SetLength(Result, x); x := RecvBuffer(Pointer(Result), x); if x >= 0 then SetLength(Result, x); {$ENDIF} end else begin if CanRead(Timeout) then begin x := WaitingData; if x = 0 then FLastError := WSAECONNRESET; if x > 0 then begin {$IFDEF CIL} SetLength(Buf, x); x := RecvBuffer(Buf, x); if x >= 0 then begin SetLength(Buf, x); result := StringOf(Buf); end; {$ELSE} SetLength(Result, x); x := RecvBuffer(Pointer(Result), x); if x >= 0 then SetLength(Result, x); {$ENDIF} end; end else FLastError := WSAETIMEDOUT; end; end; if FConvertLineEnd and (Result <> '') then begin if FLastCR and (Result[1] = LF) then Delete(Result, 1, 1); if FLastLF and (Result[1] = CR) then Delete(Result, 1, 1); FLastCR := False; FLastLF := False; end; ExceptCheck; end; function TBlockSocket.RecvByte(Timeout: Integer): Byte; begin Result := 0; ResetLastError; if FBuffer = '' then FBuffer := RecvPacket(Timeout); if (FLastError = 0) and (FBuffer <> '') then begin Result := Ord(FBuffer[1]); Delete(FBuffer, 1, 1); end; ExceptCheck; end; function TBlockSocket.RecvInteger(Timeout: Integer): Integer; var s: AnsiString; begin Result := 0; s := RecvBufferStr(4, Timeout); if FLastError = 0 then Result := (ord(s[1]) + ord(s[2]) * 256) + (ord(s[3]) + ord(s[4]) * 256) * 65536; end; function TBlockSocket.RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; var x: Integer; s: AnsiString; l: Integer; CorCRLF: Boolean; t: AnsiString; tl: integer; ti: LongWord; begin ResetLastError; Result := ''; l := Length(Terminator); if l = 0 then Exit; tl := l; CorCRLF := FConvertLineEnd and (Terminator = CRLF); s := ''; x := 0; repeat //get rest of FBuffer or incomming new data... ti := GetTick; s := s + RecvPacket(Timeout); if FLastError <> 0 then Break; x := 0; if Length(s) > 0 then if CorCRLF then begin t := ''; x := PosCRLF(s, t); tl := Length(t); if t = CR then FLastCR := True; if t = LF then FLastLF := True; end else begin x := pos(Terminator, s); tl := l; end; if (FMaxLineLength <> 0) and (Length(s) > FMaxLineLength) then begin FLastError := WSAENOBUFS; Break; end; if x > 0 then Break; if not FInterPacketTimeout then begin Timeout := Timeout - integer(TickDelta(ti, GetTick)); if Timeout <= 0 then begin FLastError := WSAETIMEDOUT; Break; end; end; until False; if x > 0 then begin Result := Copy(s, 1, x - 1); Delete(s, 1, x + tl - 1); end; FBuffer := s; ExceptCheck; end; function TBlockSocket.RecvString(Timeout: Integer): AnsiString; var s: AnsiString; begin Result := ''; s := RecvTerminated(Timeout, CRLF); if FLastError = 0 then Result := s; end; function TBlockSocket.RecvBlock(Timeout: Integer): AnsiString; var x: integer; begin Result := ''; x := RecvInteger(Timeout); if FLastError = 0 then Result := RecvBufferStr(x, Timeout); end; procedure TBlockSocket.RecvStreamRaw(const Stream: TStream; Timeout: Integer); var s: AnsiString; begin repeat s := RecvPacket(Timeout); if (Length(s) = 0) then Break; if FLastError = 0 then WriteStrToStream(Stream, s); until FLastError <> 0; end; procedure TBlockSocket.RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: int64); var s: AnsiString; n: int64; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin n := Size div int64(FSendMaxChunk); while n > 0 do begin {$IFDEF CIL} SetLength(buf, FSendMaxChunk); RecvBufferEx(buf, FSendMaxChunk, Timeout); if FLastError <> 0 then Exit; Stream.Write(buf, FSendMaxChunk); {$ELSE} s := RecvBufferStr(FSendMaxChunk, Timeout); if FLastError <> 0 then Exit; WriteStrToStream(Stream, s); {$ENDIF} dec(n); end; n := Size mod int64(FSendMaxChunk); if n > 0 then begin {$IFDEF CIL} SetLength(buf, n); RecvBufferEx(buf, n, Timeout); if FLastError <> 0 then Exit; Stream.Write(buf, n); {$ELSE} s := RecvBufferStr(n, Timeout); if FLastError <> 0 then Exit; WriteStrToStream(Stream, s); {$ENDIF} end; end; procedure TBlockSocket.RecvStreamIndy(const Stream: TStream; Timeout: Integer); var x: integer; begin x := RecvInteger(Timeout); x := synsock.NToHL(x); if FLastError = 0 then RecvStreamSize(Stream, Timeout, x); end; procedure TBlockSocket.RecvStream(const Stream: TStream; Timeout: Integer); var x: integer; begin x := RecvInteger(Timeout); if FLastError = 0 then RecvStreamSize(Stream, Timeout, x); end; function TBlockSocket.PeekBuffer(Buffer: TMemory; Length: Integer): Integer; begin {$IFNDEF CIL} // Result := synsock.Recv(FSocket, Buffer^, Length, MSG_PEEK + MSG_NOSIGNAL); Result := synsock.Recv(FSocket, Buffer, Length, MSG_PEEK + MSG_NOSIGNAL); SockCheck(Result); ExceptCheck; {$ENDIF} end; function TBlockSocket.PeekByte(Timeout: Integer): Byte; var s: string; begin {$IFNDEF CIL} Result := 0; if CanRead(Timeout) then begin SetLength(s, 1); PeekBuffer(Pointer(s), 1); if s <> '' then Result := Ord(s[1]); end else FLastError := WSAETIMEDOUT; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.ResetLastError; begin FLastError := 0; FLastErrorDesc := ''; end; function TBlockSocket.SockCheck(SockResult: Integer): Integer; begin ResetLastError; if SockResult = integer(SOCKET_ERROR) then begin FLastError := synsock.WSAGetLastError; FLastErrorDesc := GetErrorDescEx; end; Result := FLastError; end; procedure TBlockSocket.ExceptCheck; var e: ESynapseError; begin FLastErrorDesc := GetErrorDescEx; if (LastError <> 0) and (LastError <> WSAEINPROGRESS) and (LastError <> WSAEWOULDBLOCK) then begin DoStatus(HR_Error, IntToStr(FLastError) + ',' + FLastErrorDesc); if FRaiseExcept then begin e := ESynapseError.Create(Format('Synapse TCP/IP Socket error %d: %s', [FLastError, FLastErrorDesc])); e.ErrorCode := FLastError; e.ErrorMessage := FLastErrorDesc; raise e; end; end; end; function TBlockSocket.WaitingData: Integer; var x: Integer; begin Result := 0; if synsock.IoctlSocket(FSocket, FIONREAD, x) = 0 then Result := x; if Result > c64k then Result := c64k; end; function TBlockSocket.WaitingDataEx: Integer; begin if FBuffer <> '' then Result := Length(FBuffer) else Result := WaitingData; end; procedure TBlockSocket.Purge; begin Sleep(1); try while (Length(FBuffer) > 0) or (WaitingData > 0) do begin RecvPacket(0); if FLastError <> 0 then break; end; except on exception do; end; ResetLastError; end; procedure TBlockSocket.SetLinger(Enable: Boolean; Linger: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_Linger; d.Enabled := Enable; d.Value := Linger; DelayedOption(d); end; function TBlockSocket.LocalName: string; begin Result := synsock.GetHostName; if Result = '' then Result := '127.0.0.1'; end; procedure TBlockSocket.ResolveNameToIP(Name: string; const IPList: TStrings); begin IPList.Clear; synsock.ResolveNameToIP(Name, FamilyToAF(FFamily), GetSocketprotocol, GetSocketType, IPList); if IPList.Count = 0 then IPList.Add(cAnyHost); end; function TBlockSocket.ResolveName(Name: string): string; var l: TStringList; begin l := TStringList.Create; try ResolveNameToIP(Name, l); Result := l[0]; finally l.Free; end; end; function TBlockSocket.ResolvePort(Port: string): Word; begin Result := synsock.ResolvePort(Port, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); end; function TBlockSocket.ResolveIPToName(IP: string): string; begin if not IsIP(IP) and not IsIp6(IP) then IP := ResolveName(IP); Result := synsock.ResolveIPToName(IP, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); end; procedure TBlockSocket.SetRemoteSin(IP, Port: string); begin SetSin(FRemoteSin, IP, Port); end; function TBlockSocket.GetLocalSinIP: string; begin Result := GetSinIP(FLocalSin); end; function TBlockSocket.GetRemoteSinIP: string; begin Result := GetSinIP(FRemoteSin); end; function TBlockSocket.GetLocalSinPort: Integer; begin Result := GetSinPort(FLocalSin); end; function TBlockSocket.GetRemoteSinPort: Integer; begin Result := GetSinPort(FRemoteSin); end; function TBlockSocket.InternalCanRead(Timeout: Integer): Boolean; {$IFDEF CIL} begin Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectRead); {$ELSE} var TimeVal: PTimeVal; TimeV: TTimeVal; x: Integer; FDSet: TFDSet; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FDSet := FFdSet; x := synsock.Select(FSocket + 1, @FDSet, nil, nil, TimeVal); SockCheck(x); if FLastError <> 0 then x := 0; Result := x > 0; {$ENDIF} end; function TBlockSocket.CanRead(Timeout: Integer): Boolean; var ti, tr: Integer; n: integer; begin if (FHeartbeatRate <> 0) and (Timeout <> -1) then begin ti := Timeout div FHeartbeatRate; tr := Timeout mod FHeartbeatRate; end else begin ti := 0; tr := Timeout; end; Result := InternalCanRead(tr); if not Result then for n := 0 to ti do begin DoHeartbeat; if FStopFlag then begin Result := False; FStopFlag := False; Break; end; Result := InternalCanRead(FHeartbeatRate); if Result then break; end; ExceptCheck; if Result then DoStatus(HR_CanRead, ''); end; function TBlockSocket.InternalCanWrite(Timeout: Integer): Boolean; {$IFDEF CIL} begin Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectWrite); {$ELSE} var TimeVal: PTimeVal; TimeV: TTimeVal; x: Integer; FDSet: TFDSet; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FDSet := FFdSet; x := synsock.Select(FSocket + 1, nil, @FDSet, nil, TimeVal); SockCheck(x); if FLastError <> 0 then x := 0; Result := x > 0; {$ENDIF} end; function TBlockSocket.CanWrite(Timeout: Integer): Boolean; var ti, tr: Integer; n: integer; begin if (FHeartbeatRate <> 0) and (Timeout <> -1) then begin ti := Timeout div FHeartbeatRate; tr := Timeout mod FHeartbeatRate; end else begin ti := 0; tr := Timeout; end; Result := InternalCanWrite(tr); if not Result then for n := 0 to ti do begin DoHeartbeat; if FStopFlag then begin Result := False; FStopFlag := False; Break; end; Result := InternalCanWrite(FHeartbeatRate); if Result then break; end; ExceptCheck; if Result then DoStatus(HR_CanWrite, ''); end; function TBlockSocket.CanReadEx(Timeout: Integer): Boolean; begin if FBuffer <> '' then Result := True else Result := CanRead(Timeout); end; function TBlockSocket.SendBufferTo(const Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; DoMonitor(True, Buffer, Length); LimitBandwidth(Length, FMaxSendBandwidth, FNextsend); Result := synsock.SendTo(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); SockCheck(Result); ExceptCheck; Inc(FSendCounter, Result); DoStatus(HR_WriteCount, IntToStr(Result)); end; function TBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); Result := synsock.RecvFrom(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); SockCheck(Result); ExceptCheck; Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); end; function TBlockSocket.GetSizeRecvBuffer: Integer; var l: Integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 4); SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), buf, l)); Result := System.BitConverter.ToInt32(buf,0); {$ELSE} l := SizeOf(Result); SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_RCVBUF, @Result, l)); if FLastError <> 0 then Result := 1024; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.SetSizeRecvBuffer(Size: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_RecvBuff; d.Value := Size; DelayedOption(d); end; function TBlockSocket.GetSizeSendBuffer: Integer; var l: Integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 4); SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), buf, l)); Result := System.BitConverter.ToInt32(buf,0); {$ELSE} l := SizeOf(Result); SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_SNDBUF, @Result, l)); if FLastError <> 0 then Result := 1024; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.SetSizeSendBuffer(Size: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_SendBuff; d.Value := Size; DelayedOption(d); end; procedure TBlockSocket.SetNonBlockMode(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_nonblock; d.Enabled := Value; DelayedOption(d); end; procedure TBlockSocket.SetTimeout(Timeout: Integer); begin SetSendTimeout(Timeout); SetRecvTimeout(Timeout); end; procedure TBlockSocket.SetSendTimeout(Timeout: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_sendtimeout; d.Value := Timeout; DelayedOption(d); end; procedure TBlockSocket.SetRecvTimeout(Timeout: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_recvtimeout; d.Value := Timeout; DelayedOption(d); end; {$IFNDEF CIL} function TBlockSocket.GroupCanRead(const SocketList: TSocketList; Timeout: Integer; const CanReadList: TSocketList): boolean; var FDSet: TFDSet; TimeVal: PTimeVal; TimeV: TTimeVal; x, n: Integer; Max: Integer; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FD_ZERO(FDSet); Max := 0; for n := 0 to SocketList.Count - 1 do if TObject(SocketList.Items[n]) is TBlockSocket then begin if TBlockSocket(SocketList.Items[n]).Socket > Max then Max := TBlockSocket(SocketList.Items[n]).Socket; FD_SET(TBlockSocket(SocketList.Items[n]).Socket, FDSet); end; x := synsock.Select(Max + 1, @FDSet, nil, nil, TimeVal); SockCheck(x); ExceptCheck; if FLastError <> 0 then x := 0; Result := x > 0; CanReadList.Clear; if Result then for n := 0 to SocketList.Count - 1 do if TObject(SocketList.Items[n]) is TBlockSocket then if FD_ISSET(TBlockSocket(SocketList.Items[n]).Socket, FDSet) then CanReadList.Add(TBlockSocket(SocketList.Items[n])); end; {$ENDIF} procedure TBlockSocket.EnableReuse(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_reuse; d.Enabled := Value; DelayedOption(d); end; procedure TBlockSocket.SetTTL(TTL: integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_TTL; d.Value := TTL; DelayedOption(d); end; function TBlockSocket.GetTTL:integer; var l: Integer; begin {$IFNDEF CIL} l := SizeOf(Result); if FIP6Used then synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_UNICAST_HOPS, @Result, l) else synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_TTL, @Result, l); {$ENDIF} end; procedure TBlockSocket.SetFamily(Value: TSocketFamily); begin FFamily := Value; FFamilySave := Value; end; procedure TBlockSocket.SetSocket(Value: TSocket); begin FRecvCounter := 0; FSendCounter := 0; FSocket := Value; {$IFNDEF CIL} FD_ZERO(FFDSet); FD_SET(FSocket, FFDSet); {$ENDIF} GetSins; FIP6Used := FRemoteSin.AddressFamily = AF_INET6; end; function TBlockSocket.GetWsaData: TWSAData; begin {$IFDEF ONCEWINSOCK} Result := WsaDataOnce; {$ELSE} Result := FWsaDataOnce; {$ENDIF} end; function TBlockSocket.GetSocketType: integer; begin Result := 0; end; function TBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_IP); end; procedure TBlockSocket.DoStatus(Reason: THookSocketReason; const Value: string); begin if assigned(OnStatus) then OnStatus(Self, Reason, Value); end; procedure TBlockSocket.DoReadFilter(Buffer: TMemory; var Len: Integer); var s: AnsiString; begin if assigned(OnReadFilter) then if Len > 0 then begin {$IFDEF CIL} s := StringOf(Buffer); {$ELSE} SetLength(s, Len); Move(Buffer^, Pointer(s)^, Len); {$ENDIF} OnReadFilter(Self, s); if Length(s) > Len then SetLength(s, Len); Len := Length(s); {$IFDEF CIL} Buffer := BytesOf(s); {$ELSE} Move(Pointer(s)^, Buffer^, Len); {$ENDIF} end; end; procedure TBlockSocket.DoCreateSocket; begin if assigned(OnCreateSocket) then OnCreateSocket(Self); end; procedure TBlockSocket.DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); begin if assigned(OnMonitor) then begin OnMonitor(Self, Writing, Buffer, Len); end; end; procedure TBlockSocket.DoHeartbeat; begin if assigned(OnHeartbeat) and (FHeartbeatRate <> 0) then begin OnHeartbeat(Self); end; end; function TBlockSocket.GetErrorDescEx: string; begin Result := GetErrorDesc(FLastError); end; class function TBlockSocket.GetErrorDesc(ErrorCode: Integer): string; begin {$IFDEF CIL} if ErrorCode = 0 then Result := '' else begin Result := WSAGetLastErrorDesc; if Result = '' then Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; end; {$ELSE} case ErrorCode of 0: Result := ''; WSAEINTR: {10004} Result := 'Interrupted system call'; WSAEBADF: {10009} Result := 'Bad file number'; WSAEACCES: {10013} Result := 'Permission denied'; WSAEFAULT: {10014} Result := 'Bad address'; WSAEINVAL: {10022} Result := 'Invalid argument'; WSAEMFILE: {10024} Result := 'Too many open files'; WSAEWOULDBLOCK: {10035} Result := 'Operation would block'; WSAEINPROGRESS: {10036} Result := 'Operation now in progress'; WSAEALREADY: {10037} Result := 'Operation already in progress'; WSAENOTSOCK: {10038} Result := 'Socket operation on nonsocket'; WSAEDESTADDRREQ: {10039} Result := 'Destination address required'; WSAEMSGSIZE: {10040} Result := 'Message too long'; WSAEPROTOTYPE: {10041} Result := 'Protocol wrong type for Socket'; WSAENOPROTOOPT: {10042} Result := 'Protocol not available'; WSAEPROTONOSUPPORT: {10043} Result := 'Protocol not supported'; WSAESOCKTNOSUPPORT: {10044} Result := 'Socket not supported'; WSAEOPNOTSUPP: {10045} Result := 'Operation not supported on Socket'; WSAEPFNOSUPPORT: {10046} Result := 'Protocol family not supported'; WSAEAFNOSUPPORT: {10047} Result := 'Address family not supported'; WSAEADDRINUSE: {10048} Result := 'Address already in use'; WSAEADDRNOTAVAIL: {10049} Result := 'Can''t assign requested address'; WSAENETDOWN: {10050} Result := 'Network is down'; WSAENETUNREACH: {10051} Result := 'Network is unreachable'; WSAENETRESET: {10052} Result := 'Network dropped connection on reset'; WSAECONNABORTED: {10053} Result := 'Software caused connection abort'; WSAECONNRESET: {10054} Result := 'Connection reset by peer'; WSAENOBUFS: {10055} Result := 'No Buffer space available'; WSAEISCONN: {10056} Result := 'Socket is already connected'; WSAENOTCONN: {10057} Result := 'Socket is not connected'; WSAESHUTDOWN: {10058} Result := 'Can''t send after Socket shutdown'; WSAETOOMANYREFS: {10059} Result := 'Too many references:can''t splice'; WSAETIMEDOUT: {10060} Result := 'Connection timed out'; WSAECONNREFUSED: {10061} Result := 'Connection refused'; WSAELOOP: {10062} Result := 'Too many levels of symbolic links'; WSAENAMETOOLONG: {10063} Result := 'File name is too long'; WSAEHOSTDOWN: {10064} Result := 'Host is down'; WSAEHOSTUNREACH: {10065} Result := 'No route to host'; WSAENOTEMPTY: {10066} Result := 'Directory is not empty'; WSAEPROCLIM: {10067} Result := 'Too many processes'; WSAEUSERS: {10068} Result := 'Too many users'; WSAEDQUOT: {10069} Result := 'Disk quota exceeded'; WSAESTALE: {10070} Result := 'Stale NFS file handle'; WSAEREMOTE: {10071} Result := 'Too many levels of remote in path'; WSASYSNOTREADY: {10091} Result := 'Network subsystem is unusable'; WSAVERNOTSUPPORTED: {10092} Result := 'Winsock DLL cannot support this application'; WSANOTINITIALISED: {10093} Result := 'Winsock not initialized'; WSAEDISCON: {10101} Result := 'Disconnect'; WSAHOST_NOT_FOUND: {11001} Result := 'Host not found'; WSATRY_AGAIN: {11002} Result := 'Non authoritative - host not found'; WSANO_RECOVERY: {11003} Result := 'Non recoverable error'; WSANO_DATA: {11004} Result := 'Valid name, no data record of requested type' else Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; end; {$ENDIF} end; {======================================================================} constructor TSocksBlockSocket.Create; begin inherited Create; FSocksIP:= ''; FSocksPort:= '1080'; FSocksTimeout:= 60000; FSocksUsername:= ''; FSocksPassword:= ''; FUsingSocks := False; FSocksResolver := True; FSocksLastError := 0; FSocksResponseIP := ''; FSocksResponsePort := ''; FSocksLocalIP := ''; FSocksLocalPort := ''; FSocksRemoteIP := ''; FSocksRemotePort := ''; FBypassFlag := False; FSocksType := ST_Socks5; end; function TSocksBlockSocket.SocksOpen: boolean; var Buf: AnsiString; n: integer; begin Result := False; FUsingSocks := False; if FSocksType <> ST_Socks5 then begin FUsingSocks := True; Result := True; end else begin FBypassFlag := True; try if FSocksUsername = '' then Buf := #5 + #1 + #0 else Buf := #5 + #2 + #2 +#0; SendString(Buf); Buf := RecvBufferStr(2, FSocksTimeout); if Length(Buf) < 2 then Exit; if Buf[1] <> #5 then Exit; n := Ord(Buf[2]); case n of 0: //not need authorisation ; 2: begin Buf := #1 + AnsiChar(Length(FSocksUsername)) + FSocksUsername + AnsiChar(Length(FSocksPassword)) + FSocksPassword; SendString(Buf); Buf := RecvBufferStr(2, FSocksTimeout); if Length(Buf) < 2 then Exit; if Buf[2] <> #0 then Exit; end; else //other authorisation is not supported! Exit; end; FUsingSocks := True; Result := True; finally FBypassFlag := False; end; end; end; function TSocksBlockSocket.SocksRequest(Cmd: Byte; const IP, Port: string): Boolean; var Buf: AnsiString; begin FBypassFlag := True; try if FSocksType <> ST_Socks5 then Buf := #4 + AnsiChar(Cmd) + SocksCode(IP, Port) else Buf := #5 + AnsiChar(Cmd) + #0 + SocksCode(IP, Port); SendString(Buf); Result := FLastError = 0; finally FBypassFlag := False; end; end; function TSocksBlockSocket.SocksResponse: Boolean; var Buf, s: AnsiString; x: integer; begin Result := False; FBypassFlag := True; try FSocksResponseIP := ''; FSocksResponsePort := ''; FSocksLastError := -1; if FSocksType <> ST_Socks5 then begin Buf := RecvBufferStr(8, FSocksTimeout); if FLastError <> 0 then Exit; if Buf[1] <> #0 then Exit; FSocksLastError := Ord(Buf[2]); end else begin Buf := RecvBufferStr(4, FSocksTimeout); if FLastError <> 0 then Exit; if Buf[1] <> #5 then Exit; case Ord(Buf[4]) of 1: s := RecvBufferStr(4, FSocksTimeout); 3: begin x := RecvByte(FSocksTimeout); if FLastError <> 0 then Exit; s := AnsiChar(x) + RecvBufferStr(x, FSocksTimeout); end; 4: s := RecvBufferStr(16, FSocksTimeout); else Exit; end; Buf := Buf + s + RecvBufferStr(2, FSocksTimeout); if FLastError <> 0 then Exit; FSocksLastError := Ord(Buf[2]); end; if ((FSocksLastError <> 0) and (FSocksLastError <> 90)) then Exit; SocksDecode(Buf); Result := True; finally FBypassFlag := False; end; end; function TSocksBlockSocket.SocksCode(IP, Port: string): Ansistring; var ip6: TIp6Bytes; n: integer; begin if FSocksType <> ST_Socks5 then begin Result := CodeInt(ResolvePort(Port)); if not FSocksResolver then IP := ResolveName(IP); if IsIP(IP) then begin Result := Result + IPToID(IP); Result := Result + FSocksUsername + #0; end else begin Result := Result + IPToID('0.0.0.1'); Result := Result + FSocksUsername + #0; Result := Result + IP + #0; end; end else begin if not FSocksResolver then IP := ResolveName(IP); if IsIP(IP) then Result := #1 + IPToID(IP) else if IsIP6(IP) then begin ip6 := StrToIP6(IP); Result := #4; for n := 0 to 15 do Result := Result + AnsiChar(ip6[n]); end else Result := #3 + AnsiChar(Length(IP)) + IP; Result := Result + CodeInt(ResolvePort(Port)); end; end; function TSocksBlockSocket.SocksDecode(Value: Ansistring): integer; var Atyp: Byte; y, n: integer; w: Word; ip6: TIp6Bytes; begin FSocksResponsePort := '0'; Result := 0; if FSocksType <> ST_Socks5 then begin if Length(Value) < 8 then Exit; Result := 3; w := DecodeInt(Value, Result); FSocksResponsePort := IntToStr(w); FSocksResponseIP := Format('%d.%d.%d.%d', [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); Result := 9; end else begin if Length(Value) < 4 then Exit; Atyp := Ord(Value[4]); Result := 5; case Atyp of 1: begin if Length(Value) < 10 then Exit; FSocksResponseIP := Format('%d.%d.%d.%d', [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); Result := 9; end; 3: begin y := Ord(Value[5]); if Length(Value) < (5 + y + 2) then Exit; for n := 6 to 6 + y - 1 do FSocksResponseIP := FSocksResponseIP + Value[n]; Result := 5 + y + 1; end; 4: begin if Length(Value) < 22 then Exit; for n := 0 to 15 do ip6[n] := ord(Value[n + 5]); FSocksResponseIP := IP6ToStr(ip6); Result := 21; end; else Exit; end; w := DecodeInt(Value, Result); FSocksResponsePort := IntToStr(w); Result := Result + 2; end; end; {======================================================================} procedure TDgramBlockSocket.Connect(IP, Port: string); begin SetRemoteSin(IP, Port); InternalCreateSocket(FRemoteSin); FBuffer := ''; DoStatus(HR_Connect, IP + ':' + Port); end; function TDgramBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; begin Result := RecvBufferFrom(Buffer, Length); end; function TDgramBlockSocket.SendBuffer(const Buffer: TMemory; Length: Integer): Integer; begin Result := SendBufferTo(Buffer, Length); end; {======================================================================} destructor TUDPBlockSocket.Destroy; begin if Assigned(FSocksControlSock) then FSocksControlSock.Free; inherited; end; procedure TUDPBlockSocket.EnableBroadcast(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_Broadcast; d.Enabled := Value; DelayedOption(d); end; function TUDPBlockSocket.UdpAssociation: Boolean; var b: Boolean; begin Result := True; FUsingSocks := False; if FSocksIP <> '' then begin Result := False; if not Assigned(FSocksControlSock) then FSocksControlSock := TTCPBlockSocket.Create; FSocksControlSock.CloseSocket; FSocksControlSock.CreateSocketByName(FSocksIP); FSocksControlSock.Connect(FSocksIP, FSocksPort); if FSocksControlSock.LastError <> 0 then Exit; // if not assigned local port, assign it! if not FBinded then Bind(cAnyHost, cAnyPort); //open control TCP connection to SOCKS FSocksControlSock.FSocksUsername := FSocksUsername; FSocksControlSock.FSocksPassword := FSocksPassword; b := FSocksControlSock.SocksOpen; if b then b := FSocksControlSock.SocksRequest(3, GetLocalSinIP, IntToStr(GetLocalSinPort)); if b then b := FSocksControlSock.SocksResponse; if not b and (FLastError = 0) then FLastError := WSANO_RECOVERY; FUsingSocks :=FSocksControlSock.UsingSocks; FSocksRemoteIP := FSocksControlSock.FSocksResponseIP; FSocksRemotePort := FSocksControlSock.FSocksResponsePort; Result := b and (FLastError = 0); end; end; function TUDPBlockSocket.SendBufferTo(const Buffer: TMemory; Length: Integer): Integer; var SIp: string; SPort: integer; Buf: Ansistring; begin Result := 0; FUsingSocks := False; if (FSocksIP <> '') and (not UdpAssociation) then FLastError := WSANO_RECOVERY else begin if FUsingSocks then begin {$IFNDEF CIL} Sip := GetRemoteSinIp; SPort := GetRemoteSinPort; SetRemoteSin(FSocksRemoteIP, FSocksRemotePort); SetLength(Buf,Length); Move(Buffer^, Pointer(Buf)^, Length); Buf := #0 + #0 + #0 + SocksCode(Sip, IntToStr(SPort)) + Buf; Result := inherited SendBufferTo(Pointer(Buf), System.Length(buf)); SetRemoteSin(Sip, IntToStr(SPort)); {$ENDIF} end else Result := inherited SendBufferTo(Buffer, Length); end; end; function TUDPBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; var Buf: Ansistring; x: integer; begin Result := inherited RecvBufferFrom(Buffer, Length); if FUsingSocks then begin {$IFNDEF CIL} SetLength(Buf, Result); Move(Buffer^, Pointer(Buf)^, Result); x := SocksDecode(Buf); Result := Result - x + 1; Buf := Copy(Buf, x, Result); Move(Pointer(Buf)^, Buffer^, Result); SetRemoteSin(FSocksResponseIP, FSocksResponsePort); {$ENDIF} end; end; {$IFNDEF CIL} procedure TUDPBlockSocket.AddMulticast(MCastIP: string); var Multicast: TIP_mreq; Multicast6: TIPv6_mreq; n: integer; ip6: Tip6bytes; begin if FIP6Used then begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do Multicast6.ipv6mr_multiaddr.{$IFDEF POSIX}s6_addr{$ELSE}u6_addr8{$ENDIF}[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_JOIN_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); end else begin Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); // Multicast.imr_interface.S_addr := INADDR_ANY; Multicast.imr_interface.S_addr := FLocalSin.sin_addr.S_addr; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, PAnsiChar(@Multicast), SizeOf(Multicast))); end; ExceptCheck; end; procedure TUDPBlockSocket.DropMulticast(MCastIP: string); var Multicast: TIP_mreq; Multicast6: TIPv6_mreq; n: integer; ip6: Tip6bytes; begin if FIP6Used then begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do Multicast6.ipv6mr_multiaddr.{$IFDEF POSIX}s6_addr{$ELSE}u6_addr8{$ENDIF}[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_LEAVE_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); end else begin Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); // Multicast.imr_interface.S_addr := INADDR_ANY; Multicast.imr_interface.S_addr := FLocalSin.sin_addr.S_addr; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_DROP_MEMBERSHIP, PAnsiChar(@Multicast), SizeOf(Multicast))); end; ExceptCheck; end; {$ENDIF} procedure TUDPBlockSocket.SetMulticastTTL(TTL: integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_MulticastTTL; d.Value := TTL; DelayedOption(d); end; function TUDPBlockSocket.GetMulticastTTL:integer; var l: Integer; begin {$IFNDEF CIL} l := SizeOf(Result); if FIP6Used then synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, @Result, l) else synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_MULTICAST_TTL, @Result, l); {$ENDIF} end; procedure TUDPBlockSocket.EnableMulticastLoop(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_MulticastLoop; d.Enabled := Value; DelayedOption(d); end; function TUDPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_DGRAM); end; function TUDPBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_UDP); end; {======================================================================} constructor TTCPBlockSocket.CreateWithSSL(SSLPlugin: TSSLClass); begin inherited Create; FSSL := SSLPlugin.Create(self); FHTTPTunnelIP := ''; FHTTPTunnelPort := ''; FHTTPTunnel := False; FHTTPTunnelRemoteIP := ''; FHTTPTunnelRemotePort := ''; FHTTPTunnelUser := ''; FHTTPTunnelPass := ''; FHTTPTunnelTimeout := 30000; end; constructor TTCPBlockSocket.Create; begin CreateWithSSL(SSLImplementation); end; destructor TTCPBlockSocket.Destroy; begin inherited Destroy; FSSL.Free; end; function TTCPBlockSocket.GetErrorDescEx: string; begin Result := inherited GetErrorDescEx; if (FLastError = WSASYSNOTREADY) and (self.SSL.LastError <> 0) then begin Result := self.SSL.LastErrorDesc; end; end; procedure TTCPBlockSocket.CloseSocket; begin if FSSL.SSLEnabled then FSSL.Shutdown; if (FSocket <> INVALID_SOCKET) and (FLastError = 0) then begin Synsock.Shutdown(FSocket, 1); Purge; end; inherited CloseSocket; end; procedure TTCPBlockSocket.DoAfterConnect; begin if assigned(OnAfterConnect) then begin OnAfterConnect(Self); end; end; function TTCPBlockSocket.WaitingData: Integer; begin Result := 0; if FSSL.SSLEnabled and (FSocket <> INVALID_SOCKET) then Result := FSSL.WaitingData; if Result = 0 then Result := inherited WaitingData; end; procedure TTCPBlockSocket.Listen; var b: Boolean; Sip,SPort: string; begin if FSocksIP = '' then begin inherited Listen; end else begin Sip := GetLocalSinIP; if Sip = cAnyHost then Sip := LocalName; SPort := IntToStr(GetLocalSinPort); inherited Connect(FSocksIP, FSocksPort); b := SocksOpen; if b then b := SocksRequest(2, Sip, SPort); if b then b := SocksResponse; if not b and (FLastError = 0) then FLastError := WSANO_RECOVERY; FSocksLocalIP := FSocksResponseIP; if FSocksLocalIP = cAnyHost then FSocksLocalIP := FSocksIP; FSocksLocalPort := FSocksResponsePort; FSocksRemoteIP := ''; FSocksRemotePort := ''; ExceptCheck; DoStatus(HR_Listen, ''); end; end; function TTCPBlockSocket.Accept: TSocket; begin if FUsingSocks then begin if not SocksResponse and (FLastError = 0) then FLastError := WSANO_RECOVERY; FSocksRemoteIP := FSocksResponseIP; FSocksRemotePort := FSocksResponsePort; Result := FSocket; ExceptCheck; DoStatus(HR_Accept, ''); end else begin result := inherited Accept; end; end; procedure TTCPBlockSocket.Connect(IP, Port: string); begin if FSocksIP <> '' then SocksDoConnect(IP, Port) else if FHTTPTunnelIP <> '' then HTTPTunnelDoConnect(IP, Port) else inherited Connect(IP, Port); if FLasterror = 0 then DoAfterConnect; end; procedure TTCPBlockSocket.SocksDoConnect(IP, Port: string); var b: Boolean; begin inherited Connect(FSocksIP, FSocksPort); if FLastError = 0 then begin b := SocksOpen; if b then b := SocksRequest(1, IP, Port); if b then b := SocksResponse; if not b and (FLastError = 0) then FLastError := WSASYSNOTREADY; FSocksLocalIP := FSocksResponseIP; FSocksLocalPort := FSocksResponsePort; FSocksRemoteIP := IP; FSocksRemotePort := Port; end; ExceptCheck; DoStatus(HR_Connect, IP + ':' + Port); end; procedure TTCPBlockSocket.HTTPTunnelDoConnect(IP, Port: string); //bugfixed by Mike Green (mgreen@emixode.com) var s: string; begin Port := IntToStr(ResolvePort(Port)); inherited Connect(FHTTPTunnelIP, FHTTPTunnelPort); if FLastError <> 0 then Exit; FHTTPTunnel := False; if IsIP6(IP) then IP := '[' + IP + ']'; SendString('CONNECT ' + IP + ':' + Port + ' HTTP/1.0' + CRLF); if FHTTPTunnelUser <> '' then Sendstring('Proxy-Authorization: Basic ' + EncodeBase64(FHTTPTunnelUser + ':' + FHTTPTunnelPass) + CRLF); SendString(CRLF); repeat s := RecvTerminated(FHTTPTunnelTimeout, #$0a); if FLastError <> 0 then Break; if (Pos('HTTP/', s) = 1) and (Length(s) > 11) then FHTTPTunnel := s[10] = '2'; until (s = '') or (s = #$0d); if (FLasterror = 0) and not FHTTPTunnel then FLastError := WSAECONNREFUSED; FHTTPTunnelRemoteIP := IP; FHTTPTunnelRemotePort := Port; ExceptCheck; end; procedure TTCPBlockSocket.SSLDoConnect; begin ResetLastError; if not FSSL.Connect then FLastError := WSASYSNOTREADY; ExceptCheck; end; procedure TTCPBlockSocket.SSLDoShutdown; begin ResetLastError; FSSL.BiShutdown; end; function TTCPBlockSocket.GetLocalSinIP: string; begin if FUsingSocks then Result := FSocksLocalIP else Result := inherited GetLocalSinIP; end; function TTCPBlockSocket.GetRemoteSinIP: string; begin if FUsingSocks then Result := FSocksRemoteIP else if FHTTPTunnel then Result := FHTTPTunnelRemoteIP else Result := inherited GetRemoteSinIP; end; function TTCPBlockSocket.GetLocalSinPort: Integer; begin if FUsingSocks then Result := StrToIntDef(FSocksLocalPort, 0) else Result := inherited GetLocalSinPort; end; function TTCPBlockSocket.GetRemoteSinPort: Integer; begin if FUsingSocks then Result := ResolvePort(FSocksRemotePort) else if FHTTPTunnel then Result := StrToIntDef(FHTTPTunnelRemotePort, 0) else Result := inherited GetRemoteSinPort; end; function TTCPBlockSocket.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; begin if FSSL.SSLEnabled then begin Result := 0; if TestStopFlag then Exit; ResetLastError; LimitBandwidth(Len, FMaxRecvBandwidth, FNextRecv); Result := FSSL.RecvBuffer(Buffer, Len); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; ExceptCheck; Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); DoReadFilter(Buffer, Result); end else Result := inherited RecvBuffer(Buffer, Len); end; function TTCPBlockSocket.SendBuffer(const Buffer: TMemory; Length: Integer): Integer; var x, y: integer; l, r: integer; {$IFNDEF CIL} p: Pointer; {$ENDIF} begin if FSSL.SSLEnabled then begin Result := 0; if TestStopFlag then Exit; ResetLastError; DoMonitor(True, Buffer, Length); {$IFDEF CIL} Result := FSSL.SendBuffer(Buffer, Length); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; Inc(FSendCounter, Result); DoStatus(HR_WriteCount, IntToStr(Result)); {$ELSE} l := Length; x := 0; while x < l do begin y := l - x; if y > FSendMaxChunk then y := FSendMaxChunk; if y > 0 then begin LimitBandwidth(y, FMaxSendBandwidth, FNextsend); p := IncPoint(Buffer, x); r := FSSL.SendBuffer(p, y); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; if Flasterror <> 0 then Break; Inc(x, r); Inc(Result, r); Inc(FSendCounter, r); DoStatus(HR_WriteCount, IntToStr(r)); end else break; end; {$ENDIF} ExceptCheck; end else Result := inherited SendBuffer(Buffer, Length); end; function TTCPBlockSocket.SSLAcceptConnection: Boolean; begin ResetLastError; if not FSSL.Accept then FLastError := WSASYSNOTREADY; ExceptCheck; Result := FLastError = 0; end; function TTCPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_STREAM); end; function TTCPBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_TCP); end; {======================================================================} function TICMPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RAW); end; function TICMPBlockSocket.GetSocketProtocol: integer; begin if FIP6Used then Result := integer(IPPROTO_ICMPV6) else Result := integer(IPPROTO_ICMP); end; {======================================================================} function TRAWBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RAW); end; function TRAWBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RAW); end; {======================================================================} function TPGMmessageBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RDM); end; function TPGMmessageBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RM); end; {======================================================================} function TPGMstreamBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_STREAM); end; function TPGMstreamBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RM); end; {======================================================================} constructor TSynaClient.Create; begin inherited Create; FIPInterface := cAnyHost; FTargetHost := cLocalhost; FTargetPort := cAnyPort; FTimeout := 5000; FUsername := ''; FPassword := ''; end; {======================================================================} constructor TCustomSSL.Create(const Value: TTCPBlockSocket); begin inherited Create; FSocket := Value; FSSLEnabled := False; FUsername := ''; FPassword := ''; FLastError := 0; FLastErrorDesc := ''; FVerifyCert := False; FSSLType := LT_all; FKeyPassword := ''; FCiphers := ''; FCertificateFile := ''; FPrivateKeyFile := ''; FCertCAFile := ''; FCertCA := ''; FTrustCertificate := ''; FTrustCertificateFile := ''; FCertificate := ''; FPrivateKey := ''; FPFX := ''; FPFXfile := ''; FSSHChannelType := ''; FSSHChannelArg1 := ''; FSSHChannelArg2 := ''; FCertComplianceLevel := -1; //default FSNIHost := ''; end; procedure TCustomSSL.Assign(const Value: TCustomSSL); begin FUsername := Value.Username; FPassword := Value.Password; FVerifyCert := Value.VerifyCert; FSSLType := Value.SSLType; FKeyPassword := Value.KeyPassword; FCiphers := Value.Ciphers; FCertificateFile := Value.CertificateFile; FPrivateKeyFile := Value.PrivateKeyFile; FCertCAFile := Value.CertCAFile; FCertCA := Value.CertCA; FTrustCertificate := Value.TrustCertificate; FTrustCertificateFile := Value.TrustCertificateFile; FCertificate := Value.Certificate; FPrivateKey := Value.PrivateKey; FPFX := Value.PFX; FPFXfile := Value.PFXfile; FCertComplianceLevel := Value.CertComplianceLevel; FSNIHost := Value.FSNIHost; end; procedure TCustomSSL.ReturnError; begin FLastError := -1; FLastErrorDesc := 'SSL/TLS support is not compiled!'; end; function TCustomSSL.LibVersion: String; begin Result := ''; end; function TCustomSSL.LibName: String; begin Result := ''; end; function TCustomSSL.CreateSelfSignedCert(Host: string): Boolean; begin Result := False; end; function TCustomSSL.Connect: boolean; begin ReturnError; Result := False; end; function TCustomSSL.Accept: boolean; begin ReturnError; Result := False; end; function TCustomSSL.Shutdown: boolean; begin ReturnError; Result := False; end; function TCustomSSL.BiShutdown: boolean; begin ReturnError; Result := False; end; function TCustomSSL.SendBuffer(Buffer: TMemory; Len: Integer): Integer; begin ReturnError; Result := integer(SOCKET_ERROR); end; procedure TCustomSSL.SetCertCAFile(const Value: string); begin FCertCAFile := Value; end; function TCustomSSL.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; begin ReturnError; Result := integer(SOCKET_ERROR); end; function TCustomSSL.WaitingData: Integer; begin ReturnError; Result := 0; end; function TCustomSSL.GetSSLVersion: string; begin Result := ''; end; function TCustomSSL.GetPeerSubject: string; begin Result := ''; end; function TCustomSSL.GetPeerSerialNo: integer; begin Result := -1; end; function TCustomSSL.GetPeerName: string; begin Result := ''; end; function TCustomSSL.GetPeerNameHash: cardinal; begin Result := 0; end; function TCustomSSL.GetPeerIssuer: string; begin Result := ''; end; function TCustomSSL.GetPeerFingerprint: AnsiString; begin Result := ''; end; function TCustomSSL.GetCertInfo: string; begin Result := ''; end; function TCustomSSL.GetCipherName: string; begin Result := ''; end; function TCustomSSL.GetCipherBits: integer; begin Result := 0; end; function TCustomSSL.GetCipherAlgBits: integer; begin Result := 0; end; function TCustomSSL.GetVerifyCert: integer; begin Result := 1; end; function TCustomSSL.DoVerifyCert:boolean; begin if assigned(OnVerifyCert) then begin result:=OnVerifyCert(Self); end else result:=true; end; {======================================================================} function TSSLNone.LibVersion: String; begin Result := 'Without SSL support'; end; function TSSLNone.LibName: String; begin Result := 'ssl_none'; end; {======================================================================} initialization begin {$IFDEF ONCEWINSOCK} if not InitSocketInterface(DLLStackName) then begin e := ESynapseError.Create('Error loading Socket interface (' + DLLStackName + ')!'); e.ErrorCode := 0; e.ErrorMessage := 'Error loading Socket interface (' + DLLStackName + ')!'; raise e; end; synsock.WSAStartup(WinsockLevel, WsaDataOnce); {$ENDIF} end; finalization begin {$IFDEF ONCEWINSOCK} synsock.WSACleanup; DestroySocketInterface; {$ENDIF} end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016432� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/sftp/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017406� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/sftp/sftpsend.pas����������������������������������������������0000644�0001750�0000144�00000035655�15104114162�021757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2013-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SftpSend; {$mode delphi} {$pointermath on} interface uses Classes, SysUtils, WfxPlugin, ftpsend, ScpSend, libssh, FtpAdv; type { TSftpSend } TSftpSend = class(TScpSend) private function FileClose(Handle: Pointer): Boolean; protected FCopySCP: Boolean; FSFTPSession: PLIBSSH2_SFTP; protected function Connect: Boolean; override; public constructor Create(const Encoding: String); override; function Login: Boolean; override; function Logout: Boolean; override; function GetCurrentDir: String; override; function FileSize(const FileName: String): Int64; override; function CreateDir(const Directory: string): Boolean; override; function DeleteDir(const Directory: string): Boolean; override; function DeleteFile(const FileName: string): Boolean; override; function ChangeWorkingDir(const Directory: string): Boolean; override; function RenameFile(const OldName, NewName: string): Boolean; override; function ChangeMode(const FileName, Mode: String): Boolean; override; function StoreFile(const FileName: string; Restore: Boolean): Boolean; override; function RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; override; public function FsFindFirstW(const Path: String; var FindData: TWin32FindDataW): Pointer; override; function FsFindNextW(Handle: Pointer; var FindData: TWin32FindDataW): BOOL; override; function FsFindClose(Handle: Pointer): Integer; override; function FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: PFileTime): BOOL; override; public property CopySCP: Boolean read FCopySCP write FCopySCP; end; implementation uses LazUTF8, DCBasicTypes, DCDateTimeUtils, DCStrUtils, DCOSUtils, FtpFunc, CTypes, DCClassesUtf8, DCFileAttributes, DCConvertEncoding; const SMB_BUFFER_SIZE = 131072; type PFindRec = ^TFindRec; TFindRec = record Path: String; Handle: PLIBSSH2_SFTP_HANDLE; end; { TSftpSend } function TSftpSend.FileClose(Handle: Pointer): Boolean; begin FLastError:= 0; if Assigned(Handle) then repeat FLastError:= libssh2_sftp_close(Handle); DoProgress(100); FSock.CanRead(10); until FLastError <> LIBSSH2_ERROR_EAGAIN; Result:= (FLastError = 0); end; function TSftpSend.Connect: Boolean; begin Result:= inherited Connect; if Result then begin FSFTPSession := libssh2_sftp_init(FSession); Result:= Assigned(FSFTPSession); if not Result then begin libssh2_session_free(FSession); FSock.CloseSocket; end; end; end; constructor TSftpSend.Create(const Encoding: String); begin inherited Create(Encoding); FCanResume := True; end; function TSftpSend.Login: Boolean; var Return: Integer; begin Result:= Connect; if Result then begin if FAuto then DetectEncoding; if (Length(FCurrentDir) = 0) then begin SetLength(FCurrentDir, MAX_PATH + 1); Return:= libssh2_sftp_realpath(FSFTPSession, '.', PAnsiChar(FCurrentDir), MAX_PATH); if Return < 1 then FCurrentDir:= '/' else begin SetLength(FCurrentDir, Return); FCurrentDir:= CeUtf16ToUtf8(ServerToClient(FCurrentDir)); end; DoStatus(False, 'Remote directory: ' + FCurrentDir); end; end; end; function TSftpSend.Logout: Boolean; begin Result:= libssh2_sftp_shutdown(FSFTPSession) = 0; Result:= Result and inherited Logout; end; function TSftpSend.GetCurrentDir: String; begin Result:= FCurrentDir; end; function TSftpSend.FileSize(const FileName: String): Int64; var Attributes: LIBSSH2_SFTP_ATTRIBUTES; begin repeat FLastError:= libssh2_sftp_stat(FSFTPSession, PAnsiChar(FileName), @Attributes); if (FLastError = 0) then Exit(Attributes.filesize); FSock.CanRead(10); DoProgress(0); until FLastError <> LIBSSH2_ERROR_EAGAIN; Result:= -1; end; function TSftpSend.CreateDir(const Directory: string): Boolean; var Return: Integer; Attributes: LIBSSH2_SFTP_ATTRIBUTES; begin Return:= libssh2_sftp_mkdir(FSFTPSession, PAnsiChar(Directory), LIBSSH2_SFTP_S_IRWXU or LIBSSH2_SFTP_S_IRGRP or LIBSSH2_SFTP_S_IXGRP or LIBSSH2_SFTP_S_IROTH or LIBSSH2_SFTP_S_IXOTH); if (Return <> 0) then begin Return:= libssh2_sftp_stat(FSFTPSession, PAnsiChar(Directory), @Attributes); end; Result:= (Return = 0); end; function TSftpSend.DeleteDir(const Directory: string): Boolean; begin Result:= libssh2_sftp_rmdir(FSFTPSession, PAnsiChar(Directory)) = 0; end; function TSftpSend.DeleteFile(const FileName: string): Boolean; begin Result:= libssh2_sftp_unlink(FSFTPSession, PAnsiChar(FileName)) = 0; end; function TSftpSend.ChangeWorkingDir(const Directory: string): Boolean; var Attributes: LIBSSH2_SFTP_ATTRIBUTES; begin Result:= libssh2_sftp_stat(FSFTPSession, PAnsiChar(Directory), @Attributes) = 0; if Result then FCurrentDir:= Directory; end; function TSftpSend.RenameFile(const OldName, NewName: string): Boolean; begin Result:= libssh2_sftp_rename(FSFTPSession, PAnsiChar(OldName), PAnsiChar(NewName)) = 0; end; function TSftpSend.ChangeMode(const FileName, Mode: String): Boolean; var Attributes: LIBSSH2_SFTP_ATTRIBUTES; begin Attributes.permissions:= OctToDec(Mode); Attributes.flags:= LIBSSH2_SFTP_ATTR_PERMISSIONS; Result:= libssh2_sftp_setstat(FSFTPSession, PAnsiChar(FileName), @Attributes) = 0; end; function TSftpSend.StoreFile(const FileName: string; Restore: Boolean): Boolean; var Index: PtrInt; FBuffer: PByte; FileSize: Int64; BytesRead: Integer; BytesToRead: Integer; BytesWritten: PtrInt; BytesToWrite: Integer; SendStream: TFileStreamEx; TotalBytesToWrite: Int64 = 0; TargetHandle: PLIBSSH2_SFTP_HANDLE = nil; Flags: cint = LIBSSH2_FXF_CREAT or LIBSSH2_FXF_WRITE; begin if FCopySCP then begin Result:= inherited StoreFile(FileName, Restore); Exit; end; SendStream := TFileStreamEx.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite); TargetName:= PWideChar(ServerToClient(FileName)); SourceName:= PWideChar(CeUtf8ToUtf16(FDirectFileName)); FileSize:= SendStream.Size; FBuffer:= GetMem(SMB_BUFFER_SIZE); libssh2_session_set_blocking(FSession, 0); try if not Restore then begin TotalBytesToWrite:= FileSize; Flags:= Flags or LIBSSH2_FXF_TRUNC end else begin TotalBytesToWrite:= Self.FileSize(FileName); if (FileSize = TotalBytesToWrite) then Exit(True); if TotalBytesToWrite < 0 then TotalBytesToWrite:= 0; SendStream.Seek(TotalBytesToWrite, soBeginning); TotalBytesToWrite := FileSize - TotalBytesToWrite; Flags:= Flags or LIBSSH2_FXF_APPEND; end; // Open remote file repeat TargetHandle:= libssh2_sftp_open(FSFTPSession, PAnsiChar(FileName), Flags, $1A0); if (TargetHandle = nil) then begin FLastError:= libssh2_session_last_errno(FSession); if (FLastError <> LIBSSH2_ERROR_EAGAIN) then Exit(False); if (FileSize > 0) then DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); FSock.CanRead(10); end; until not ((TargetHandle = nil) and (FLastError = LIBSSH2_ERROR_EAGAIN)); BytesToRead:= SMB_BUFFER_SIZE; while (TotalBytesToWrite > 0) do begin if (BytesToRead > TotalBytesToWrite) then begin BytesToRead:= TotalBytesToWrite; end; BytesRead:= SendStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Exit(False); // Start write operation Index:= 0; BytesToWrite:= BytesRead; while (BytesToWrite > 0) do begin repeat BytesWritten:= libssh2_sftp_write(TargetHandle, FBuffer + Index, BytesToWrite); if BytesWritten = LIBSSH2_ERROR_EAGAIN then begin DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); FSock.CanRead(10); end; until BytesWritten <> LIBSSH2_ERROR_EAGAIN; if (BytesWritten < 0) then Exit(False); Dec(TotalBytesToWrite, BytesWritten); Dec(BytesToWrite, BytesWritten); Inc(Index, BytesWritten); end; DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); end; Result:= True; finally SendStream.Free; FreeMem(FBuffer); Result:= FileClose(TargetHandle) and Result; libssh2_session_set_blocking(FSession, 1); end; end; function TSftpSend.RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; var FBuffer: PByte; BytesRead: PtrInt; RetrStream: TFileStreamEx; TotalBytesToRead: Int64 = 0; SourceHandle: PLIBSSH2_SFTP_HANDLE; begin if FCopySCP then begin Result:= inherited RetrieveFile(FileName, FileSize, Restore); Exit; end; if Restore and mbFileExists(FDirectFileName) then RetrStream := TFileStreamEx.Create(FDirectFileName, fmOpenWrite or fmShareExclusive) else begin RetrStream := TFileStreamEx.Create(FDirectFileName, fmCreate or fmShareDenyWrite) end; SourceName := PWideChar(ServerToClient(FileName)); TargetName := PWideChar(CeUtf8ToUtf16(FDirectFileName)); if Restore then TotalBytesToRead:= RetrStream.Seek(0, soEnd); libssh2_session_set_blocking(FSession, 0); try repeat SourceHandle:= libssh2_sftp_open(FSFTPSession, PAnsiChar(FileName), LIBSSH2_FXF_READ, 0); if (SourceHandle = nil) then begin FLastError:= libssh2_session_last_errno(FSession); if (FLastError <> LIBSSH2_ERROR_EAGAIN) then Exit(False); if (FileSize > 0) then DoProgress(TotalBytesToRead * 100 div FileSize); FSock.CanRead(10); end; until not ((SourceHandle = nil) and (FLastError = LIBSSH2_ERROR_EAGAIN)); if Restore then begin libssh2_sftp_seek64(SourceHandle, TotalBytesToRead); end; FBuffer:= GetMem(SMB_BUFFER_SIZE); TotalBytesToRead:= FileSize - TotalBytesToRead; try while TotalBytesToRead > 0 do begin repeat BytesRead := libssh2_sftp_read(SourceHandle, PAnsiChar(FBuffer), SMB_BUFFER_SIZE); if BytesRead = LIBSSH2_ERROR_EAGAIN then begin DoProgress((FileSize - TotalBytesToRead) * 100 div FileSize); FSock.CanRead(10); end; until BytesRead <> LIBSSH2_ERROR_EAGAIN; if (BytesRead < 0) then Exit(False); if RetrStream.Write(FBuffer^, BytesRead) <> BytesRead then Exit(False); Dec(TotalBytesToRead, BytesRead); DoProgress((FileSize - TotalBytesToRead) * 100 div FileSize); end; Result:= True; finally FreeMem(FBuffer); Result:= FileClose(SourceHandle) and Result; end; finally RetrStream.Free; libssh2_session_set_blocking(FSession, 1); end; end; function TSftpSend.FsFindFirstW(const Path: String; var FindData: TWin32FindDataW): Pointer; var FindRec: PFindRec; begin Result := libssh2_sftp_opendir(FSFTPSession, PAnsiChar(Path)); if (Result = nil) then PrintLastError else begin New(FindRec); FindRec.Path:= Path; FindRec.Handle:= Result; FsFindNextW(FindRec, FindData); Result:= FindRec; end; end; function TSftpSend.FsFindNextW(Handle: Pointer; var FindData: TWin32FindDataW): BOOL; var Return: Integer; FindRec: PFindRec absolute Handle; Attributes: LIBSSH2_SFTP_ATTRIBUTES; AFileName: array[0..1023] of AnsiChar; AFullData: array[0..2047] of AnsiChar; begin Return:= libssh2_sftp_readdir_ex(FindRec.Handle, AFileName, SizeOf(AFileName), AFullData, SizeOf(AFullData), @Attributes); Result:= (Return > 0); if Result then begin FillChar(FindData, SizeOf(FindData), 0); FindData.dwReserved0:= Attributes.permissions; FindData.dwFileAttributes:= FILE_ATTRIBUTE_UNIX_MODE; if (Attributes.permissions and S_IFMT) <> S_IFDIR then begin FindData.nFileSizeLow:= Int64Rec(Attributes.filesize).Lo; FindData.nFileSizeHigh:= Int64Rec(Attributes.filesize).Hi; end; StrPLCopy(FindData.cFileName, ServerToClient(AFileName), MAX_PATH - 1); FindData.ftLastWriteTime:= TWfxFileTime(UnixFileTimeToWinTime(Attributes.mtime)); FindData.ftLastAccessTime:= TWfxFileTime(UnixFileTimeToWinTime(Attributes.atime)); if (Attributes.permissions and S_IFMT) = S_IFLNK then begin if libssh2_sftp_stat(FSFTPSession, PAnsiChar(FindRec.Path + AFileName), @Attributes) = 0 then begin if (Attributes.permissions and S_IFMT) = S_IFDIR then begin FindData.nFileSizeLow:= 0; FindData.nFileSizeHigh:= 0; FindData.dwFileAttributes:= FindData.dwFileAttributes or FILE_ATTRIBUTE_REPARSE_POINT; end; end; end; end; end; function TSftpSend.FsFindClose(Handle: Pointer): Integer; var FindRec: PFindRec absolute Handle; begin Result:= libssh2_sftp_closedir(FindRec.Handle); Dispose(FindRec); end; function TSftpSend.FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: WfxPlugin.PFileTime): BOOL; var Attributes: LIBSSH2_SFTP_ATTRIBUTES; begin if (LastAccessTime = nil) or (LastWriteTime = nil) then begin if libssh2_sftp_stat(FSFTPSession, PAnsiChar(FileName), @Attributes) <> 0 then Exit(False); end; if Assigned(LastAccessTime) then begin Attributes.atime:= WinFileTimeToUnixTime(TWinFileTime(LastAccessTime^)); end; if Assigned(LastWriteTime) then begin Attributes.mtime:= WinFileTimeToUnixTime(TWinFileTime(LastWriteTime^)); end; Attributes.flags:= LIBSSH2_SFTP_ATTR_ACMODTIME; Result:= libssh2_sftp_setstat(FSFTPSession, PAnsiChar(FileName), @Attributes) = 0; end; end. �����������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/sftp/scpsend.pas�����������������������������������������������0000644�0001750�0000144�00000074321�15104114162�021561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2013-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit ScpSend; {$mode delphi} {$pointermath on} interface uses Classes, SysUtils, WfxPlugin, FtpAdv, libssh; type { TScpSend } TScpSend = class(TFTPSendEx) private FAutoDetect: Boolean; FListCommand: String; FPassphrase: AnsiString; FChannel: PLIBSSH2_CHANNEL; FErrorStream: TStringBuilder; private function OpenChannel: Boolean; procedure PrintErrors(const E: String); function CloseChannel(Channel: PLIBSSH2_CHANNEL): Boolean; function SendCommand(const Command: String): Boolean; overload; function SendCommand(const Command: String; out Answer: String; Err: Boolean = True): Boolean; overload; private FAnswer: String; protected FAgent: Boolean; FCurrentDir: String; FLastError: Integer; FSavedPassword: Boolean; FFingerprint: AnsiString; FSession: PLIBSSH2_SESSION; SourceName, TargetName: PWideChar; procedure DoProgress(Percent: Int64); protected procedure PrintLastError; procedure DetectEncoding; function AuthKey: Integer; function AuthAgent: Integer; function Connect: Boolean; override; public constructor Create(const Encoding: String); override; destructor Destroy; override; function Login: Boolean; override; function Logout: Boolean; override; function GetCurrentDir: String; override; function NetworkError: Boolean; override; procedure CloneTo(AValue: TFTPSendEx); override; function FileSize(const FileName: String): Int64; override; function FileExists(const FileName: String): Boolean; override; function CreateDir(const Directory: string): Boolean; override; function DeleteDir(const Directory: string): Boolean; override; function DeleteFile(const FileName: string): Boolean; override; function FileProperties(const FileName: String): Boolean; override; function CopyFile(const OldName, NewName: String): Boolean; override; function ChangeWorkingDir(const Directory: string): Boolean; override; function RenameFile(const OldName, NewName: string): Boolean; override; function ChangeMode(const FileName, Mode: String): Boolean; override; function ExecuteCommand(const Command, Directory: String): Boolean; override; function StoreFile(const FileName: string; Restore: Boolean): Boolean; override; function RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; override; public function DataRead(const DestStream: TStream): Boolean; override; public function List(Directory: String; NameList: Boolean): Boolean; override; function FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: PWfxFileTime): BOOL; override; public property Agent: Boolean read FAgent write FAgent; property Fingerprint: AnsiString read FFingerprint write FFingerprint; end; implementation uses CTypes, LazUTF8, FtpFunc, DCStrUtils, DCClassesUtf8, DCOSUtils, DCDateTimeUtils, DCBasicTypes, DCConvertEncoding, FileUtil, Base64, LConvEncoding, SynaCode, StrUtils; const TXT_BUFFER_SIZE = 4096; SMB_BUFFER_SIZE = 131072; LIST_TIME_STYLE = ' --time-style=+%Y.%m.%d-%H:%M:%S'; LIST_LOCALE_C = 'export LC_TIME=C' + #10 + 'export LC_MESSAGES=C' + #10; procedure userauth_kbdint(const name: PAnsiChar; name_len: cint; const instruction: PAnsiChar; instruction_len: cint; num_prompts: cint; const prompts: PLIBSSH2_USERAUTH_KBDINT_PROMPT; responses: PLIBSSH2_USERAUTH_KBDINT_RESPONSE; abstract: PPointer); cdecl; var S: String; I: Integer; Sender: TScpSend; Title, Message, Password: UnicodeString; begin Sender:= TScpSend(abstract^); for I:= 0 to num_prompts - 1 do begin if (I = 0) and (Length(Sender.FPassword) > 0) and (not Sender.FSavedPassword) then begin Sender.FSavedPassword:= True; responses^.text:= GetMem(Length(Sender.FPassword) + 1); StrCopy(responses^.text, PAnsiChar(Sender.FPassword)); responses^.length:= Length(Sender.FPassword); end else begin Title:= EmptyWideStr; Message:= EmptyWideStr; if Assigned(instruction) and (instruction_len > 0) then begin SetString(S, instruction, instruction_len); Message:= Sender.ServerToClient(S) + LineEnding; end; if Assigned(prompts[I].text) and (prompts[I].length > 0) then begin SetString(S, prompts[I].text, prompts[I].length); Message+= Sender.ServerToClient(S); end; if Assigned(name) and (name_len > 0) then begin SetString(S, name, name_len); Title:= Sender.ServerToClient(S) + #32; end; SetLength(Password, MAX_PATH + 1); Title+= 'ssh://' + UTF8ToUTF16(Sender.UserName + '@' + Sender.TargetHost); if not RequestProc(PluginNumber, RT_Password, PWideChar(Title), PWideChar(Message), PWideChar(Password), MAX_PATH) then begin responses[I].text:= nil; responses[I].length:= 0; end else begin Sender.FPassword:= Sender.ClientToServer(Password); responses[I].text:= GetMem(Length(Sender.FPassword) + 1); StrCopy(responses[I].text, PAnsiChar(Sender.FPassword)); responses[I].length:= Length(Sender.FPassword); end; end; end; end; { TScpSend } function TScpSend.OpenChannel: Boolean; begin repeat FChannel := libssh2_channel_open_session(FSession); if not Assigned(FChannel) then begin FLastError:= libssh2_session_last_errno(FSession); if (FLastError <> LIBSSH2_ERROR_EAGAIN) then begin PrintLastError; Exit(False); end; end; until not ((FChannel = nil) and (FLastError = LIBSSH2_ERROR_EAGAIN)); Result:= Assigned(FChannel); end; function TScpSend.CloseChannel(Channel: PLIBSSH2_CHANNEL): Boolean; begin repeat FLastError:= libssh2_channel_free(Channel); until (FLastError <> LIBSSH2_ERROR_EAGAIN); Result:= (FLastError = 0); end; procedure TScpSend.PrintErrors(const E: String); var S: String = ''; Index: Integer = 1; begin while GetNextLine(E, S, Index) do begin LogProc(PluginNumber, msgtype_importanterror, PWideChar(ServerToClient(S))); end; end; function TScpSend.SendCommand(const Command: String): Boolean; begin repeat FLastError := libssh2_channel_exec(FChannel, PAnsiChar(Command)); until (FLastError <> LIBSSH2_ERROR_EAGAIN); while (libssh2_channel_flush(FChannel) = LIBSSH2_ERROR_EAGAIN) do; while (libssh2_channel_send_eof(FChannel) = LIBSSH2_ERROR_EAGAIN) do; Result:= (FLastError >= 0); end; function TScpSend.SendCommand(const Command: String; out Answer: String; Err: Boolean): Boolean; var Ret: cint; E, Buffer: String; begin Result:= OpenChannel; if Result then begin Result:= SendCommand(Command); if Result then begin E:= EmptyStr; Answer:= EmptyStr; SetLength(Buffer, TXT_BUFFER_SIZE + 1); while libssh2_channel_eof(FChannel) = 0 do begin repeat Ret:= libssh2_channel_read_stderr(FChannel, Pointer(Buffer), TXT_BUFFER_SIZE); until Ret <> LIBSSH2_ERROR_EAGAIN; if Ret > 0 then E+= Copy(Buffer, 1, Ret); repeat Ret:= libssh2_channel_read(FChannel, Pointer(Buffer), TXT_BUFFER_SIZE); until Ret <> LIBSSH2_ERROR_EAGAIN; if (Ret > 0) then Answer+= Copy(Buffer, 1, Ret); end; Result:= (libssh2_channel_get_exit_status(FChannel) = 0) and (Length(E) = 0); if Err and (Length(E) > 0) then PrintErrors(E); end; CloseChannel(FChannel); end; end; procedure TScpSend.DoProgress(Percent: Int64); begin if ProgressProc(PluginNumber, SourceName, TargetName, Percent) = 1 then raise EUserAbort.Create(EmptyStr); end; procedure TScpSend.PrintLastError; var Message: String; errmsg_len: cint; errmsg: PAnsiChar; begin FLastError:= libssh2_session_last_error(FSession, @errmsg, @errmsg_len, 0); SetString(Message, errmsg, errmsg_len); LogProc(PluginNumber, msgtype_importanterror, PWideChar(UnicodeString('SSH ERROR ' + Message))); end; procedure TScpSend.DetectEncoding; begin if SendCommand('echo $LANG $LC_CTYPE $LC_ALL', FAnswer) then begin FAuto:= False; if Pos('UTF-8', FAnswer) > 0 then begin Encoding:= EncodingUTF8; end; end; end; function TScpSend.AuthKey: Integer; const Alphabet = ['a'..'z','A'..'Z','0'..'9','+','/','=', #10, #13]; var Key: String; Index: Integer; Memory: PAnsiChar; PrivateStream: String; Encrypted: Boolean = False; Passphrase: AnsiString = ''; Title, Message, Password: UnicodeString; begin PrivateStream:= ReadFileToString(FPrivateKey); // Check private key format Index:= Pos(#10, PrivateStream); if Index = 0 then Index:= Pos(#13, PrivateStream); if Index > 0 then begin // Skip first line and empty lines Memory:= Pointer(@PrivateStream[Index]) + 1; while Memory^ in [#10, #13] do Inc(Memory); // Check old private key format for Index:= 0 to 31 do begin if (not (Memory[Index] in Alphabet)) then begin Encrypted:= True; Break; end; end; // Check new OpenSSH private key format if not Encrypted then begin if Pos('-----BEGIN OPENSSH PRIVATE KEY-----', PrivateStream) > 0 then begin Key:= DecodeStringBase64(Memory); Index:= Pos('bcrypt', Key); Encrypted:= (Index > 0) and (Index <= 64); end; end; end; // Private key encrypted, request passphrase if Encrypted then begin if (Length(FPassphrase) > 0) then Passphrase:= FPassphrase else begin SetLength(Password, MAX_PATH + 1); Message:= 'Private key passphrase:'; Title:= 'ssh://' + UTF8ToUTF16(FUserName + '@' + FTargetHost); if RequestProc(PluginNumber, RT_Password, PWideChar(Title), PWideChar(Message), PWideChar(Password), MAX_PATH) then begin Passphrase:= ClientToServer(Password); FillWord(Password[1], Length(Password), 0); end; end; end; repeat FLastError:= libssh2_userauth_publickey_fromfile(FSession, PAnsiChar(FUserName), PAnsiChar(CeUtf8ToSys(FPublicKey)), PAnsiChar(CeUtf8ToSys(FPrivateKey)), PAnsiChar(Passphrase)); until (FLastError <> LIBSSH2_ERROR_EAGAIN); // Save passphrase to cache if (FLastError = 0) and (Length(Passphrase) > 0) then begin FPassphrase:= Passphrase; end; Result:= FLastError; end; function TScpSend.AuthAgent: Integer; var agent: PLIBSSH2_AGENT; identity, prev_identity: Plibssh2_agent_publickey; begin agent:= libssh2_agent_init(FSession); if (agent = nil) then Exit(-1); try Result:= libssh2_agent_connect(agent); if (Result = LIBSSH2_ERROR_NONE) then try Result:= libssh2_agent_list_identities(agent); if Result < 0 then Exit; prev_identity:= nil; while True do begin Result:= libssh2_agent_get_identity(agent, @identity, prev_identity); if (Result < 0) then Exit; if (Result = 1) then Exit(-1); repeat FLastError:= libssh2_agent_userauth(agent, PAnsiChar(FUserName), identity); until (FLastError <> LIBSSH2_ERROR_EAGAIN); if (FLastError <> 0) then begin DoStatus(False, Format('Authentication with username %s and public key %s failed', [username, identity^.comment])); end else begin DoStatus(False, Format('Authentication with username %s and public key %s succeeded', [username, identity^.comment])); Break; end; prev_identity:= identity; end; finally libssh2_agent_disconnect(agent); end; finally libssh2_agent_free(agent); end; end; function TScpSend.Connect: Boolean; const HASH_SIZE: array[1..3] of Byte = (16, 20, 32); HASH_NAME: array[1..3] of String = ('(MD5) ', '(SHA1) ', '(SHA256) '); var S: String; F: String = ''; SS: String = ''; CS, SC: PAnsiChar; I, J, Finish: Integer; Message: UnicodeString; FingerPrint: PAnsiChar; userauthlist: PAnsiChar; begin FSock.CloseSocket; DoStatus(False, 'Connecting to: ' + FTargetHost); FSock.Connect(FTargetHost, FTargetPort); Result:= (FSock.LastError = 0); if Result then begin FSession := libssh2_session_init(Self); if not Assigned(FSession) then Exit(False); try libssh2_session_set_timeout(FSession, FTimeout); //* Since we have not set non-blocking, tell libssh2 we are blocking */ libssh2_session_set_blocking(FSession, 1); FLastError:= libssh2_session_handshake(FSession, FSock.Socket); DoStatus(False, 'Key exchange method: ' + libssh2_session_methods(FSession, LIBSSH2_METHOD_KEX)); CS:= libssh2_session_methods(FSession, LIBSSH2_METHOD_CRYPT_CS); SC:= libssh2_session_methods(FSession, LIBSSH2_METHOD_CRYPT_SC); if Assigned(CS) and Assigned(SC) and (StrComp(SC, SC) = 0) then DoStatus(False, 'Encryption method: ' + CS) else begin DoStatus(False, 'Encryption method (client to server): ' + CS); DoStatus(False, 'Encryption method (server to client): ' + SC); end; DoStatus(False, 'Host key method: ' + libssh2_session_methods(FSession, LIBSSH2_METHOD_HOSTKEY)); if FLastError <> 0 then begin DoStatus(False, 'Cannot perform the SSH handshake ' + IntToStr(FLastError)); PrintLastError; Exit(False); end; LogProc(PluginNumber, MSGTYPE_CONNECT, nil); DoStatus(False, 'Connection established'); if libssh2_version($010900) = nil then Finish:= LIBSSH2_HOSTKEY_HASH_SHA1 else begin Finish:= LIBSSH2_HOSTKEY_HASH_SHA256; end; for J:= LIBSSH2_HOSTKEY_HASH_MD5 to Finish do begin FingerPrint := libssh2_hostkey_hash(FSession, J); if Assigned(FingerPrint) then begin if (J >= LIBSSH2_HOSTKEY_HASH_SHA256) then begin SetString(S, FingerPrint, HASH_SIZE[J]); S := TrimRightSet(EncodeBase64(S), ['=']); end else begin S:= EmptyStr; for I:= 0 to HASH_SIZE[J] - 1 do begin S+= IntToHex(Ord(FingerPrint[I]), 2) + #32; end; SetLength(S, Length(S) - 1); // Remove space end; SS += HASH_NAME[J] + S + LineEnding; DoStatus(False, 'Server fingerprint: ' + HASH_NAME[J] + S); if (J > LIBSSH2_HOSTKEY_HASH_MD5) and (Length(F) = 0) then F:= S; end; end; // Verify server fingerprint if FFingerPrint <> F then begin if FFingerprint = EmptyStr then Message:= 'You are using this connection for the first time.' + LineEnding + 'Please verify that the following host fingerprint matches the fingerprint of your server:' else begin Message:= 'WARNING!' + LineEnding + 'The fingerprint of the host has changed!' + LineEnding + 'Please make sure that the new fingerprint matches your server:'; end; Message += UnicodeString(LineEnding + LineEnding + SS); if not RequestProc(PluginNumber, RT_MsgYesNo, nil, PWideChar(Message), nil, 0) then begin LogProc(PluginNumber, msgtype_importanterror, 'Wrong server fingerprint!'); Exit(False); end; FFingerprint:= F; end; //* check what authentication methods are available */ userauthlist := libssh2_userauth_list(FSession, PAnsiChar(FUserName), Length(FUserName)); DoStatus(False, 'Authentication methods: ' + userauthlist); if (libssh2_userauth_authenticated(FSession) <> 0) then begin DoStatus(False, 'Username authentication'); end else if (strpos(userauthlist, 'publickey') <> nil) and (FAgent or ((FPublicKey <> '') and (FPrivateKey <> ''))) then begin if FAgent then begin DoStatus(False, 'SSH-agent authentication'); FLastError:= AuthAgent; end else begin DoStatus(False, 'Public key authentication'); FLastError:= AuthKey; end; if (FLastError < 0) then begin PrintLastError; Exit(False); end; end else if (strpos(userauthlist, 'password') <> nil) then begin DoStatus(False, 'Password authentication'); repeat FLastError := libssh2_userauth_password(FSession, PAnsiChar(FUserName), PAnsiChar(FPassword)); until (FLastError <> LIBSSH2_ERROR_EAGAIN); if FLastError < 0 then begin PrintLastError; Exit(False); end; end else if (strpos(userauthlist, 'keyboard-interactive') <> nil) then begin FSavedPassword:= False; libssh2_session_set_timeout(FSession, 0); DoStatus(False, 'Keyboard interactive authentication'); repeat FLastError := libssh2_userauth_keyboard_interactive(FSession, PAnsiChar(FUserName), @userauth_kbdint); until (FLastError <> LIBSSH2_ERROR_EAGAIN); if FLastError < 0 then begin PrintLastError; Exit(False); end; libssh2_session_set_timeout(FSession, FTimeout); end else begin LogProc(PluginNumber, msgtype_importanterror, 'Authentication failed'); Exit(False); end; DoStatus(False, 'Authentication succeeded'); finally if not Result then begin libssh2_session_free(FSession); FSock.CloseSocket; end; end; end; end; constructor TScpSend.Create(const Encoding: String); begin inherited Create(Encoding); FTargetPort:= '22'; FListCommand:= 'ls -la'; FErrorStream:= TStringBuilder.Create; end; destructor TScpSend.Destroy; begin if (Length(FPassphrase) > 0) then begin if (StringRefCount(FPassphrase) = 1) then begin FillChar(FPassphrase[1], Length(FPassphrase), 0); SetLength(FPassphrase, 0); end; end; inherited Destroy; FErrorStream.Free end; function TScpSend.Login: Boolean; var ACommand: String; begin Result:= Connect; if Result then begin if FAuto then DetectEncoding; if (Length(FCurrentDir) = 0) then begin if not SendCommand('pwd', FAnswer) then FCurrentDir:= '/' else begin FCurrentDir:= TrimRightLineEnding(FAnswer, tlbsLF); FCurrentDir:= CeUtf16ToUtf8(ServerToClient(FCurrentDir)); end; DoStatus(False, 'Remote directory: ' + FCurrentDir); end; if not FAutoDetect then begin FAutoDetect:= True; // Try to use custom time style ACommand:= LIST_LOCALE_C + FListCommand + LIST_TIME_STYLE; if SendCommand(ACommand + ' > /dev/null', FAnswer, False) then begin FListCommand:= ACommand; FFtpList.Masks.Insert(0, 'pppppppppp $!!!S* YYYY MM DD hh mm ss $n*'); end else begin // Try to use 'C' locale ACommand:= LIST_LOCALE_C + FListCommand; if SendCommand(ACommand + ' > /dev/null', FAnswer, False) then begin FListCommand:= ACommand end; end; end; end; end; function TScpSend.Logout: Boolean; begin Result:= libssh2_session_disconnect(FSession, 'Logout') = 0; libssh2_session_free(FSession); FSock.CloseSocket; end; function TScpSend.GetCurrentDir: String; begin Result:= FCurrentDir; end; function TScpSend.NetworkError: Boolean; begin Result:= FSock.CanRead(0) and (libssh2_session_last_errno(FSession) <> 0); end; procedure TScpSend.CloneTo(AValue: TFTPSendEx); begin inherited CloneTo(AValue); TScpSend(AValue).FAgent:= FAgent; TScpSend(AValue).FPassphrase:= FPassphrase; TScpSend(AValue).FFingerprint:= FFingerprint; end; function TScpSend.FileSize(const FileName: String): Int64; begin Result:= -1; end; function TScpSend.FileExists(const FileName: String): Boolean; begin Result:= SendCommand('stat ' + EscapeNoQuotes(FileName), FAnswer, False); end; function TScpSend.CreateDir(const Directory: string): Boolean; begin Result:= SendCommand('mkdir ' + EscapeNoQuotes(Directory), FAnswer); end; function TScpSend.DeleteDir(const Directory: string): Boolean; begin Result:= SendCommand('rmdir ' + EscapeNoQuotes(Directory), FAnswer); end; function TScpSend.DeleteFile(const FileName: string): Boolean; begin Result:= SendCommand('rm -f ' + EscapeNoQuotes(FileName), FAnswer); end; function TScpSend.ExecuteCommand(const Command, Directory: String): Boolean; var Index: Integer; ADirectory: String; Answer: TStringList; begin FDataStream.Clear; Result:= OpenChannel; if Result then begin if Directory = EmptyStr then ADirectory:= FCurrentDir else begin ADirectory:= Directory; end; DoStatus(False, Command); Result:= SendCommand('cd ' + EscapeNoQuotes(ADirectory) + ' && ' + Command); if Result then begin if DataRead(FDataStream) then begin FDataStream.Position:= 0; Answer:= TStringList.Create; try Answer.LoadFromStream(FDataStream); for Index:= 0 to Answer.Count - 1 do DoStatus(True, Answer.Strings[Index]); finally Answer.Free; end; end; FDataStream.Clear; end; CloseChannel(FChannel); end; end; function TScpSend.FileProperties(const FileName: String): Boolean; begin Result:= SendCommand('stat ' + EscapeNoQuotes(FileName), FAnswer); if Result then FFullResult.Text:= FAnswer; end; function TScpSend.CopyFile(const OldName, NewName: String): Boolean; begin Result:= SendCommand('cp -p ' + EscapeNoQuotes(OldName) + ' ' + EscapeNoQuotes(NewName), FAnswer); end; function TScpSend.ChangeWorkingDir(const Directory: string): Boolean; begin Result:= SendCommand('cd ' + EscapeNoQuotes(Directory), FAnswer); if Result then FCurrentDir:= Directory; end; function TScpSend.RenameFile(const OldName, NewName: string): Boolean; begin Result:= SendCommand('mv ' + EscapeNoQuotes(OldName) + ' ' + EscapeNoQuotes(NewName), FAnswer); end; function TScpSend.ChangeMode(const FileName, Mode: String): Boolean; begin Result:= SendCommand('chmod ' + Mode + ' ' + EscapeNoQuotes(FileName), FAnswer); end; function TScpSend.StoreFile(const FileName: string; Restore: Boolean): Boolean; var Index: PtrInt; FBuffer: PByte; FileSize: Int64; BytesRead: Integer; BytesToRead: Integer; BytesWritten: PtrInt; BytesToWrite: Integer; SendStream: TFileStreamEx; TotalBytesToWrite: Int64 = 0; TargetHandle: PLIBSSH2_CHANNEL = nil; begin SendStream := TFileStreamEx.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite); TargetName:= PWideChar(ServerToClient(FileName)); SourceName:= PWideChar(CeUtf8ToUtf16(FDirectFileName)); FileSize:= SendStream.Size; FBuffer:= GetMem(SMB_BUFFER_SIZE); libssh2_session_set_blocking(FSession, 0); try TotalBytesToWrite:= FileSize; // Open remote file repeat TargetHandle:= libssh2_scp_send64(FSession, PAnsiChar(FileName), $1A0, FileSize, 0, 0); if (TargetHandle = nil) then begin FLastError:= libssh2_session_last_errno(FSession); if (FLastError <> LIBSSH2_ERROR_EAGAIN) then Exit(False); if (FileSize > 0) then DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); FSock.CanRead(10); end; until not ((TargetHandle = nil) and (FLastError = LIBSSH2_ERROR_EAGAIN)); BytesToRead:= SMB_BUFFER_SIZE; while (TotalBytesToWrite > 0) do begin if (BytesToRead > TotalBytesToWrite) then begin BytesToRead:= TotalBytesToWrite; end; BytesRead:= SendStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Exit(False); // Start write operation Index:= 0; BytesToWrite:= BytesRead; while (BytesToWrite > 0) do begin repeat BytesWritten:= libssh2_channel_write(TargetHandle, PAnsiChar(FBuffer + Index), BytesToWrite); if BytesWritten = LIBSSH2_ERROR_EAGAIN then begin DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); FSock.CanRead(10); end; until BytesWritten <> LIBSSH2_ERROR_EAGAIN; if (BytesWritten < 0) then Exit(False); Dec(TotalBytesToWrite, BytesWritten); Dec(BytesToWrite, BytesWritten); Inc(Index, BytesWritten); end; DoProgress((FileSize - TotalBytesToWrite) * 100 div FileSize); end; // Close remote file repeat FLastError:= libssh2_channel_send_eof(TargetHandle); DoProgress(100); FSock.CanRead(10); until FLastError <> LIBSSH2_ERROR_EAGAIN; Result:= (FLastError = 0); finally SendStream.Free; FreeMem(FBuffer); Result:= CloseChannel(TargetHandle) and Result; libssh2_session_set_blocking(FSession, 1); end; end; function TScpSend.RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; var FBuffer: PByte; BytesRead: PtrInt; BytesToRead: Integer; RetrStream: TFileStreamEx; TotalBytesToRead: Int64 = 0; SourceHandle: PLIBSSH2_CHANNEL; begin RetrStream := TFileStreamEx.Create(FDirectFileName, fmCreate or fmShareDenyWrite); SourceName := PWideChar(ServerToClient(FileName)); TargetName := PWideChar(CeUtf8ToUtf16(FDirectFileName)); libssh2_session_set_blocking(FSession, 0); try repeat SourceHandle:= libssh2_scp_recv2(FSession, PAnsiChar(FileName), nil); if (SourceHandle = nil) then begin FLastError:= libssh2_session_last_errno(FSession); if (FLastError <> LIBSSH2_ERROR_EAGAIN) then Exit(False); if (FileSize > 0) then DoProgress(TotalBytesToRead * 100 div FileSize); FSock.CanRead(10); end; until not ((SourceHandle = nil) and (FLastError = LIBSSH2_ERROR_EAGAIN)); FBuffer:= GetMem(SMB_BUFFER_SIZE); TotalBytesToRead:= FileSize - TotalBytesToRead; try BytesToRead:= SMB_BUFFER_SIZE; while TotalBytesToRead > 0 do begin if (BytesToRead > TotalBytesToRead) then begin BytesToRead := TotalBytesToRead; end; repeat BytesRead := libssh2_channel_read(SourceHandle, PAnsiChar(FBuffer), BytesToRead); if BytesRead = LIBSSH2_ERROR_EAGAIN then begin DoProgress((FileSize - TotalBytesToRead) * 100 div FileSize); FSock.CanRead(10); end; until BytesRead <> LIBSSH2_ERROR_EAGAIN; if (BytesRead < 0) then Exit(False); if RetrStream.Write(FBuffer^, BytesRead) <> BytesRead then Exit(False); Dec(TotalBytesToRead, BytesRead); DoProgress((FileSize - TotalBytesToRead) * 100 div FileSize); end; Result:= True; finally FreeMem(FBuffer); Result:= CloseChannel(SourceHandle) and Result; end; finally RetrStream.Free; libssh2_session_set_blocking(FSession, 1); end; end; function TScpSend.DataRead(const DestStream: TStream): Boolean; var Ret: cint; Buffer: String; begin FErrorStream.Clear; SetLength(Buffer, TXT_BUFFER_SIZE + 1); while libssh2_channel_eof(FChannel) = 0 do begin repeat Ret:= libssh2_channel_read_stderr(FChannel, Pointer(Buffer), TXT_BUFFER_SIZE); until Ret <> LIBSSH2_ERROR_EAGAIN; if Ret > 0 then FErrorStream.Append(Copy(Buffer, 1, Ret)); repeat Ret:= libssh2_channel_read(FChannel, Pointer(Buffer), TXT_BUFFER_SIZE); until Ret <> LIBSSH2_ERROR_EAGAIN; if Ret > 0 then DestStream.Write(Buffer[1], Ret); end; if (FErrorStream.Length > 0) then begin PrintErrors(FErrorStream.ToString); end; Result:= DestStream.Position > 0; end; function TScpSend.List(Directory: String; NameList: Boolean): Boolean; begin FFTPList.Clear; FDataStream.Clear; Result:= OpenChannel; if Result then begin if Directory <> '' then begin Directory := ' ' + EscapeNoQuotes(Directory); end; Result:= SendCommand(FListCommand + Directory); if Result then begin Result:= DataRead(FDataStream); if Result then begin FDataStream.Position := 0; FFTPList.Lines.LoadFromStream(FDataStream); FFTPList.ParseLines; end; FDataStream.Position := 0; end; CloseChannel(FChannel); end; end; function TScpSend.FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: PWfxFileTime): BOOL; var DateTime: String; FileTime: TDateTime; begin if (LastWriteTime = nil) then Exit(False); FileTime:= WinFileTimeToDateTime(TWinFileTime(LastWriteTime^)); DateTime:= FormatDateTime('yyyymmddhhnn.ss', FileTime); Result:= SendCommand('touch -ct ' + DateTime + ' ' + EscapeNoQuotes(FileName), FAnswer); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/sftp/libssh.pas������������������������������������������������0000644�0001750�0000144�00000074207�15104114162�021411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit libssh; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes, DynLibs; const //* Hash Types */ LIBSSH2_HOSTKEY_HASH_MD5 = 1; LIBSSH2_HOSTKEY_HASH_SHA1 = 2; LIBSSH2_HOSTKEY_HASH_SHA256 = 3; //* Method constants */ LIBSSH2_METHOD_KEX = 0; LIBSSH2_METHOD_HOSTKEY = 1; LIBSSH2_METHOD_CRYPT_CS = 2; LIBSSH2_METHOD_CRYPT_SC = 3; //* Disconnect Codes (defined by SSH protocol) */ SSH_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT = 1; SSH_DISCONNECT_PROTOCOL_ERROR = 2; SSH_DISCONNECT_KEY_EXCHANGE_FAILED = 3; SSH_DISCONNECT_RESERVED = 4; SSH_DISCONNECT_MAC_ERROR = 5; SSH_DISCONNECT_COMPRESSION_ERROR = 6; SSH_DISCONNECT_SERVICE_NOT_AVAILABLE = 7; SSH_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED = 8; SSH_DISCONNECT_HOST_KEY_NOT_VERIFIABLE = 9; SSH_DISCONNECT_CONNECTION_LOST = 10; SSH_DISCONNECT_BY_APPLICATION = 11; SSH_DISCONNECT_TOO_MANY_CONNECTIONS = 12; SSH_DISCONNECT_AUTH_CANCELLED_BY_USER = 13; SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE = 14; SSH_DISCONNECT_ILLEGAL_USER_NAME = 15; { Error Codes (defined by libssh2) } LIBSSH2_ERROR_NONE = 0; LIBSSH2_ERROR_SOCKET_NONE = -(1); LIBSSH2_ERROR_BANNER_RECV = -(2); LIBSSH2_ERROR_BANNER_SEND = -(3); LIBSSH2_ERROR_INVALID_MAC = -(4); LIBSSH2_ERROR_KEX_FAILURE = -(5); LIBSSH2_ERROR_ALLOC = -(6); LIBSSH2_ERROR_SOCKET_SEND = -(7); LIBSSH2_ERROR_KEY_EXCHANGE_FAILURE = -(8); LIBSSH2_ERROR_TIMEOUT = -(9); LIBSSH2_ERROR_HOSTKEY_INIT = -(10); LIBSSH2_ERROR_HOSTKEY_SIGN = -(11); LIBSSH2_ERROR_DECRYPT = -(12); LIBSSH2_ERROR_SOCKET_DISCONNECT = -(13); LIBSSH2_ERROR_PROTO = -(14); LIBSSH2_ERROR_PASSWORD_EXPIRED = -(15); LIBSSH2_ERROR_FILE = -(16); LIBSSH2_ERROR_METHOD_NONE = -(17); LIBSSH2_ERROR_AUTHENTICATION_FAILED = -(18); LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED = LIBSSH2_ERROR_AUTHENTICATION_FAILED; LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED = -(19); LIBSSH2_ERROR_CHANNEL_OUTOFORDER = -(20); LIBSSH2_ERROR_CHANNEL_FAILURE = -(21); LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED = -(22); LIBSSH2_ERROR_CHANNEL_UNKNOWN = -(23); LIBSSH2_ERROR_CHANNEL_WINDOW_EXCEEDED = -(24); LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED = -(25); LIBSSH2_ERROR_CHANNEL_CLOSED = -(26); LIBSSH2_ERROR_CHANNEL_EOF_SENT = -(27); LIBSSH2_ERROR_SCP_PROTOCOL = -(28); LIBSSH2_ERROR_ZLIB = -(29); LIBSSH2_ERROR_SOCKET_TIMEOUT = -(30); LIBSSH2_ERROR_SFTP_PROTOCOL = -(31); LIBSSH2_ERROR_REQUEST_DENIED = -(32); LIBSSH2_ERROR_METHOD_NOT_SUPPORTED = -(33); LIBSSH2_ERROR_INVAL = -(34); LIBSSH2_ERROR_INVALID_POLL_TYPE = -(35); LIBSSH2_ERROR_PUBLICKEY_PROTOCOL = -(36); LIBSSH2_ERROR_EAGAIN = -(37); LIBSSH2_ERROR_BUFFER_TOO_SMALL = -(38); LIBSSH2_ERROR_BAD_USE = -(39); LIBSSH2_ERROR_COMPRESS = -(40); LIBSSH2_ERROR_OUT_OF_BOUNDARY = -(41); LIBSSH2_ERROR_AGENT_PROTOCOL = -(42); LIBSSH2_ERROR_SOCKET_RECV = -(43); LIBSSH2_ERROR_ENCRYPT = -(44); LIBSSH2_ERROR_BAD_SOCKET = -(45); LIBSSH2_ERROR_KNOWN_HOSTS = -(46); //* Channel API */ LIBSSH2_CHANNEL_WINDOW_DEFAULT = (2*1024*1024); LIBSSH2_CHANNEL_PACKET_DEFAULT = 32768; //* Flags for open_ex() */ _LIBSSH2_SFTP_OPENFILE = 0; _LIBSSH2_SFTP_OPENDIR = 1; //* Flags for rename_ex() */ LIBSSH2_SFTP_RENAME_OVERWRITE = $00000001; LIBSSH2_SFTP_RENAME_ATOMIC = $00000002; LIBSSH2_SFTP_RENAME_NATIVE = $00000004; //* Flags for stat_ex() */ _LIBSSH2_SFTP_STAT = 0; _LIBSSH2_SFTP_LSTAT = 1; _LIBSSH2_SFTP_SETSTAT = 2; //* Flags for symlink_ex() */ _LIBSSH2_SFTP_SYMLINK = 0; _LIBSSH2_SFTP_READLINK = 1; _LIBSSH2_SFTP_REALPATH = 2; //* SFTP attribute flag bits */ LIBSSH2_SFTP_ATTR_SIZE = $00000001; LIBSSH2_SFTP_ATTR_UIDGID = $00000002; LIBSSH2_SFTP_ATTR_PERMISSIONS = $00000004; LIBSSH2_SFTP_ATTR_ACMODTIME = $00000008; LIBSSH2_SFTP_ATTR_EXTENDED = $80000000; //* File mode */ //* Read, write, execute/search by owner */ LIBSSH2_SFTP_S_IRWXU = 448; //* RWX mask for owner */ LIBSSH2_SFTP_S_IRUSR = 256; //* R for owner */ LIBSSH2_SFTP_S_IWUSR = 128; //* W for owner */ LIBSSH2_SFTP_S_IXUSR = 64; //* X for owner */ //* Read, write, execute/search by group */ LIBSSH2_SFTP_S_IRWXG = 56; //* RWX mask for group */ LIBSSH2_SFTP_S_IRGRP = 32; //* R for group */ LIBSSH2_SFTP_S_IWGRP = 16; //* W for group */ LIBSSH2_SFTP_S_IXGRP = 8; //* X for group */ //* Read, write, execute/search by others */ LIBSSH2_SFTP_S_IRWXO = 7; //* RWX mask for other */ LIBSSH2_SFTP_S_IROTH = 4; //* R for other */ LIBSSH2_SFTP_S_IWOTH = 2; //* W for other */ LIBSSH2_SFTP_S_IXOTH = 1; //* X for other */ //* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) */ LIBSSH2_FXF_READ = $00000001; LIBSSH2_FXF_WRITE = $00000002; LIBSSH2_FXF_APPEND = $00000004; LIBSSH2_FXF_CREAT = $00000008; LIBSSH2_FXF_TRUNC = $00000010; LIBSSH2_FXF_EXCL = $00000020; type //* Session API */ PLIBSSH2_SESSION = type Pointer; //* Agent API */ PLIBSSH2_AGENT = type Pointer; libssh2_agent_publickey = record magic: cuint; node: Pointer; blob: PByte; blob_len: csize_t; comment: PAnsiChar; end; Plibssh2_agent_publickey = ^libssh2_agent_publickey; PPlibssh2_agent_publickey = ^Plibssh2_agent_publickey; //* Channel API */ PLIBSSH2_CHANNEL = type Pointer; //* SFTP API */ PLIBSSH2_SFTP = type Pointer; PLIBSSH2_SFTP_HANDLE = type Pointer; PLIBSSH2_SFTP_ATTRIBUTES = ^LIBSSH2_SFTP_ATTRIBUTES; LIBSSH2_SFTP_ATTRIBUTES = record flags: culong; filesize: cuint64; uid, gid: culong; permissions: culong; atime, mtime: culong; end; PLIBSSH2_SFTP_STATVFS = ^_LIBSSH2_SFTP_STATVFS; _LIBSSH2_SFTP_STATVFS = record f_bsize: cuint64; //* file system block size */ f_frsize: cuint64; //* fragment size */ f_blocks: cuint64; //* size of fs in f_frsize units */ f_bfree: cuint64; //* # free blocks */ f_bavail: cuint64; //* # free blocks for non-root */ f_files: cuint64; //* # inodes */ f_ffree: cuint64; //* # free inodes */ f_favail: cuint64; //* # free inodes for non-root */ f_fsid: cuint64; //* file system ID */ f_flag: cuint64; //* mount flags */ f_namemax: cuint64; //* maximum filename length */ end; PLIBSSH2_USERAUTH_KBDINT_PROMPT = ^LIBSSH2_USERAUTH_KBDINT_PROMPT; LIBSSH2_USERAUTH_KBDINT_PROMPT = record text: PAnsiChar; length: cuint; echo: cuchar; end; PLIBSSH2_USERAUTH_KBDINT_RESPONSE = ^LIBSSH2_USERAUTH_KBDINT_RESPONSE; LIBSSH2_USERAUTH_KBDINT_RESPONSE = record text: PAnsiChar; length: cuint; end; Plibssh2_struct_stat = type Pointer; //* Malloc callbacks */ LIBSSH2_ALLOC_FUNC = function(count: csize_t; abstract: Pointer): Pointer; cdecl; LIBSSH2_REALLOC_FUNC = function(ptr: Pointer; count: csize_t; abstract: Pointer): Pointer; cdecl; LIBSSH2_FREE_FUNC = procedure(ptr: Pointer; abstract: Pointer); cdecl; //* Callbacks for special SSH packets */ LIBSSH2_PASSWD_CHANGEREQ_FUNC = procedure(session: PLIBSSH2_SESSION; var newpw: PAnsiChar; var newpw_len: cint; abstract: Pointer); cdecl; //* 'keyboard-interactive' authentication callback */ LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC = procedure(const name: PAnsiChar; name_len: cint; const instruction: PAnsiChar; instruction_len: cint; num_prompts: cint; const prompts: PLIBSSH2_USERAUTH_KBDINT_PROMPT; responses: PLIBSSH2_USERAUTH_KBDINT_RESPONSE; abstract: PPointer); cdecl; var //* Global API */ libssh2_init: function(flags: cint): cint; cdecl; libssh2_exit: procedure(); cdecl; libssh2_version: function(required_version: cint): PAnsiChar; cdecl; //* Session API */ libssh2_session_init_ex: function(my_alloc: LIBSSH2_ALLOC_FUNC; my_free: LIBSSH2_FREE_FUNC; my_realloc: LIBSSH2_REALLOC_FUNC; abstract: Pointer): PLIBSSH2_SESSION; cdecl; libssh2_session_handshake: function(session: PLIBSSH2_SESSION; sock: cint): cint; cdecl; libssh2_hostkey_hash: function(session: PLIBSSH2_SESSION; hash_type: cint): PAnsiChar; cdecl; libssh2_session_methods: function(session: PLIBSSH2_SESSION; method_type: cint): PAnsiChar; cdecl; libssh2_session_disconnect_ex: function(session: PLIBSSH2_SESSION; reason: cint; const description: PAnsiChar; const lang: PAnsiChar): cint; cdecl; libssh2_session_free: function(session: PLIBSSH2_SESSION): cint; cdecl; libssh2_session_set_blocking: procedure(session: PLIBSSH2_SESSION; blocking: cint); cdecl; libssh2_session_last_errno: function(session: PLIBSSH2_SESSION): cint; cdecl; libssh2_session_set_timeout: procedure(session: PLIBSSH2_SESSION; timeout: clong); cdecl; libssh2_session_last_error: function(session: PLIBSSH2_SESSION; errmsg: PPAnsiChar; errmsg_len: pcint; want_buf: cint): cint; cdecl; //* Userauth API */ libssh2_userauth_authenticated: function(session: PLIBSSH2_SESSION): cint; cdecl; libssh2_userauth_list: function(session: PLIBSSH2_SESSION; const username: PAnsiChar; username_len: cuint): PAnsiChar; cdecl; libssh2_userauth_password_ex: function(session: PLIBSSH2_SESSION; const username: PAnsiChar; username_len: cuint; const password: PAnsiChar; password_len: cuint; passwd_change_cb: LIBSSH2_PASSWD_CHANGEREQ_FUNC): cint; cdecl; libssh2_userauth_keyboard_interactive_ex: function(session: PLIBSSH2_SESSION; const username: PAnsiChar; username_len: cuint; response_callback: LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC): cint; cdecl; libssh2_userauth_publickey_fromfile_ex: function(session: PLIBSSH2_SESSION; const username: PAnsiChar; username_len: cuint; const publickey, privatekey, passphrase: PAnsiChar): cint; cdecl; //* Agent API */ libssh2_agent_init: function(session: PLIBSSH2_SESSION): PLIBSSH2_AGENT; cdecl; libssh2_agent_connect: function(agent: PLIBSSH2_AGENT): cint; cdecl; libssh2_agent_list_identities: function(agent: PLIBSSH2_AGENT): cint; cdecl; libssh2_agent_get_identity: function(agent: PLIBSSH2_AGENT; store: PPlibssh2_agent_publickey; prev: Plibssh2_agent_publickey): cint; cdecl; libssh2_agent_userauth: function(agent: PLIBSSH2_AGENT; const username: PAnsiChar; identity: Plibssh2_agent_publickey): cint; cdecl; libssh2_agent_disconnect: function(agent: PLIBSSH2_AGENT): cint; cdecl; libssh2_agent_free: procedure(agent: PLIBSSH2_AGENT); cdecl; //* Channel API */ libssh2_channel_open_ex: function(session: PLIBSSH2_SESSION; const channel_type: PAnsiChar; channel_type_len, window_size, packet_size: cuint; const message: PAnsiChar; message_len: cuint): PLIBSSH2_CHANNEL; cdecl; libssh2_channel_free: function(channel: PLIBSSH2_CHANNEL): cint; cdecl; libssh2_channel_set_blocking: procedure (channel: PLIBSSH2_CHANNEL; blocking: cint); cdecl; libssh2_channel_process_startup: function(channel: PLIBSSH2_CHANNEL; const request: PAnsiChar; request_len: cuint; const message: PAnsiChar; message_len: cuint): cint; cdecl; libssh2_channel_flush_ex: function(channel: PLIBSSH2_CHANNEL; streamid: cint): cint; cdecl; libssh2_channel_send_eof: function(channel: PLIBSSH2_CHANNEL): cint; cdecl; libssh2_channel_eof: function(channel: PLIBSSH2_CHANNEL): cint; cdecl; libssh2_channel_read_ex: function(channel: PLIBSSH2_CHANNEL; stream_id: cint; buf: PAnsiChar; buflen: csize_t): ptrint; cdecl; libssh2_channel_write_ex: function(channel: PLIBSSH2_CHANNEL; stream_id: cint; const buf: PAnsiChar; buflen: csize_t): ptrint; cdecl; libssh2_channel_get_exit_status: function(channel: PLIBSSH2_CHANNEL): cint; cdecl; libssh2_scp_send64: function(session: PLIBSSH2_SESSION; const path: PAnsiChar; mode: cint; size: cuint64; mtime, atime: ptrint): PLIBSSH2_CHANNEL; cdecl; libssh2_scp_recv2: function(session: PLIBSSH2_SESSION; const path: PAnsiChar; sb: Plibssh2_struct_stat): PLIBSSH2_CHANNEL; cdecl; //* SFTP API */ libssh2_sftp_init: function(session: PLIBSSH2_SESSION): PLIBSSH2_SFTP; cdecl; libssh2_sftp_shutdown: function(sftp: PLIBSSH2_SFTP): cint; cdecl; libssh2_sftp_last_error: function(sftp: PLIBSSH2_SFTP): culong; cdecl; //* File / Directory Ops */ libssh2_sftp_open_ex: function(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar; filename_len: cint; flags: culong; mode: clong; open_type: cint): PLIBSSH2_SFTP_HANDLE; cdecl; libssh2_sftp_read: function(handle: PLIBSSH2_SFTP_HANDLE; buffer: PAnsiChar; buffer_maxlen: csize_t): ptrint; cdecl; libssh2_sftp_write: function(handle: PLIBSSH2_SFTP_HANDLE; buffer: PByte; count: csize_t): ptrint; cdecl; libssh2_sftp_readdir_ex: function(handle: PLIBSSH2_SFTP_HANDLE; buffer: PAnsiChar; buffer_maxlen: csize_t; longentry: PAnsiChar; longentry_maxlen: csize_t; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; cdecl; libssh2_sftp_close_handle: function(handle: PLIBSSH2_SFTP_HANDLE): cint; cdecl; libssh2_sftp_seek64: procedure(handle: PLIBSSH2_SFTP_HANDLE; offset: cuint64); cdecl; //* Miscellaneous Ops */ libssh2_sftp_rename_ex: function(sftp: PLIBSSH2_SFTP; const source_filename: PAnsiChar; srouce_filename_len: cuint; const dest_filename: PAnsiChar; dest_filename_len: cuint; flags: clong): cint; cdecl; libssh2_sftp_unlink_ex: function(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar; filename_len: cuint): cint; cdecl; libssh2_sftp_statvfs: function(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; path_len: csize_t; st: PLIBSSH2_SFTP_STATVFS): cint; cdecl; libssh2_sftp_mkdir_ex: function(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; path_len: cuint; mode: clong): cint; cdecl; libssh2_sftp_rmdir_ex: function(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; path_len: cuint): cint; cdecl; libssh2_sftp_stat_ex: function(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; path_len: cuint; stat_type: cint; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; cdecl; libssh2_sftp_symlink_ex: function(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; path_len: cuint; target: PAnsiChar; target_len: cuint; link_type: cint): cint; cdecl; //* Inline functions */ function libssh2_session_init(abstract: Pointer): PLIBSSH2_SESSION; inline; function libssh2_session_disconnect(session: PLIBSSH2_SESSION; const description: PAnsiChar): cint; inline; function libssh2_userauth_password(session: PLIBSSH2_SESSION; const username: PAnsiChar; const password: PAnsiChar): cint; inline; function libssh2_userauth_keyboard_interactive(session: PLIBSSH2_SESSION; const username: PAnsiChar; response_callback: LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC): cint; inline; function libssh2_userauth_publickey_fromfile(session: PLIBSSH2_SESSION; const username, publickey, privatekey, passphrase: PAnsiChar): cint; inline; function libssh2_channel_open_session(session: PLIBSSH2_SESSION): PLIBSSH2_CHANNEL; inline; function libssh2_channel_exec(channel: PLIBSSH2_CHANNEL; command: PAnsiChar): cint; inline; function libssh2_channel_flush(channel: PLIBSSH2_CHANNEL): cint; inline; function libssh2_channel_read(channel: PLIBSSH2_CHANNEL; buf: PAnsiChar; buflen: csize_t): ptrint; inline; function libssh2_channel_read_stderr(channel: PLIBSSH2_CHANNEL; buf: PAnsiChar; buflen: csize_t): ptrint; inline; function libssh2_channel_write(channel: PLIBSSH2_CHANNEL; const buf: PAnsiChar; buflen: csize_t): ptrint; inline; function libssh2_sftp_open(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar; flags: culong; mode: clong): PLIBSSH2_SFTP_HANDLE; inline; function libssh2_sftp_opendir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar): PLIBSSH2_SFTP_HANDLE; inline; function libssh2_sftp_close(handle: PLIBSSH2_SFTP_HANDLE): cint; inline; function libssh2_sftp_closedir(handle: PLIBSSH2_SFTP_HANDLE): cint; inline; function libssh2_sftp_rename(sftp: PLIBSSH2_SFTP; const sourcefile: PAnsiChar; const destfile: PAnsiChar): cint; inline; function libssh2_sftp_unlink(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar): cint; inline; function libssh2_sftp_mkdir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; mode: clong): cint; inline; function libssh2_sftp_rmdir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar): cint; inline; function libssh2_sftp_stat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; inline; function libssh2_sftp_lstat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; inline; function libssh2_sftp_setstat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; inline; function libssh2_sftp_symlink(sftp: PLIBSSH2_SFTP; const orig: PAnsiChar; linkpath: PAnsiChar): cint; inline; function libssh2_sftp_readlink(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; target: PAnsiChar; maxlen: cuint): cint; inline; function libssh2_sftp_realpath(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; target: PAnsiChar; maxlen: cuint): cint; inline; const LibSSHName = {$IF DEFINED(MSWINDOWS)} 'libssh2.dll' {$ELSEIF DEFINED(DARWIN)} 'libssh2.dylib' {$ELSEIF DEFINED(UNIX)} 'libssh2.so.1' {$ENDIF} ; var libssh2: TLibHandle = NilHandle; implementation uses DCOSUtils; function libssh2_alloc(count: csize_t; abstract: Pointer): Pointer; cdecl; begin Result:= GetMem(count); end; function libssh2_realloc(ptr: Pointer; count: csize_t; abstract: Pointer): Pointer; cdecl; begin Result:= ReAllocMem(ptr, count); end; procedure libssh2_free(ptr: Pointer; abstract: Pointer); cdecl; begin FreeMem(ptr); end; function libssh2_session_init(abstract: Pointer): PLIBSSH2_SESSION; begin Result:= libssh2_session_init_ex(libssh2_alloc, libssh2_free, libssh2_realloc, abstract); end; function libssh2_session_disconnect(session: PLIBSSH2_SESSION; const description: PAnsiChar): cint; begin Result:= libssh2_session_disconnect_ex(session, SSH_DISCONNECT_BY_APPLICATION, description, ''); end; function libssh2_userauth_password(session: PLIBSSH2_SESSION; const username: PAnsiChar; const password: PAnsiChar): cint; begin Result:= libssh2_userauth_password_ex(session, username, strlen(username), password, strlen(password), nil); end; function libssh2_userauth_keyboard_interactive(session: PLIBSSH2_SESSION; const username: PAnsiChar; response_callback: LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC): cint; begin Result:= libssh2_userauth_keyboard_interactive_ex(session, username, strlen(username), response_callback); end; function libssh2_userauth_publickey_fromfile(session: PLIBSSH2_SESSION; const username, publickey, privatekey, passphrase: PAnsiChar): cint; begin Result:= libssh2_userauth_publickey_fromfile_ex(session, username, strlen(username), publickey, privatekey, passphrase); end; function libssh2_channel_open_session(session: PLIBSSH2_SESSION): PLIBSSH2_CHANNEL; begin Result:= libssh2_channel_open_ex(session, 'session', Length('session'), LIBSSH2_CHANNEL_WINDOW_DEFAULT, LIBSSH2_CHANNEL_PACKET_DEFAULT, nil, 0); end; function libssh2_channel_exec(channel: PLIBSSH2_CHANNEL; command: PAnsiChar): cint; begin REsult:= libssh2_channel_process_startup(channel, 'exec', Length('exec'), command, strlen(command)); end; function libssh2_channel_flush(channel: PLIBSSH2_CHANNEL): cint; begin Result:= libssh2_channel_flush_ex(channel, 0); end; function libssh2_channel_read(channel: PLIBSSH2_CHANNEL; buf: PAnsiChar; buflen: csize_t): ptrint; cdecl; begin Result:= libssh2_channel_read_ex(channel, 0, buf, buflen); end; function libssh2_channel_read_stderr(channel: PLIBSSH2_CHANNEL; buf: PAnsiChar; buflen: csize_t): ptrint; cdecl; begin Result:= libssh2_channel_read_ex(channel, 1, buf, buflen); end; function libssh2_channel_write(channel: PLIBSSH2_CHANNEL; const buf: PAnsiChar; buflen: csize_t): ptrint; begin Result:= libssh2_channel_write_ex(channel, 0, buf, buflen); end; function libssh2_sftp_open(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar; flags: culong; mode: clong): PLIBSSH2_SFTP_HANDLE; begin Result:= libssh2_sftp_open_ex(sftp, filename, strlen(filename), flags, mode, _LIBSSH2_SFTP_OPENFILE); end; function libssh2_sftp_opendir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar): PLIBSSH2_SFTP_HANDLE; begin Result:= libssh2_sftp_open_ex(sftp, path, strlen(path), 0, 0, _LIBSSH2_SFTP_OPENDIR); end; function libssh2_sftp_close(handle: PLIBSSH2_SFTP_HANDLE): cint; begin Result:= libssh2_sftp_close_handle(handle); end; function libssh2_sftp_closedir(handle: PLIBSSH2_SFTP_HANDLE): cint; begin Result:= libssh2_sftp_close_handle(handle); end; function libssh2_sftp_rename(sftp: PLIBSSH2_SFTP; const sourcefile: PAnsiChar; const destfile: PAnsiChar): cint; begin Result:= libssh2_sftp_rename_ex(sftp, sourcefile, strlen(sourcefile), destfile, strlen(destfile), LIBSSH2_SFTP_RENAME_OVERWRITE or LIBSSH2_SFTP_RENAME_ATOMIC or LIBSSH2_SFTP_RENAME_NATIVE); end; function libssh2_sftp_unlink(sftp: PLIBSSH2_SFTP; const filename: PAnsiChar): cint; begin Result:= libssh2_sftp_unlink_ex(sftp, filename, strlen(filename)); end; function libssh2_sftp_mkdir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; mode: clong): cint; begin Result:= libssh2_sftp_mkdir_ex(sftp, path, strlen(path), mode); end; function libssh2_sftp_rmdir(sftp: PLIBSSH2_SFTP; const path: PAnsiChar): cint; begin Result:= libssh2_sftp_rmdir_ex(sftp, path, strlen(path)); end; function libssh2_sftp_stat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; begin Result:= libssh2_sftp_stat_ex(sftp, path, strlen(path), _LIBSSH2_SFTP_STAT, attrs); end; function libssh2_sftp_lstat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; begin Result:= libssh2_sftp_stat_ex(sftp, path, strlen(path), _LIBSSH2_SFTP_LSTAT, attrs); end; function libssh2_sftp_setstat(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; attrs: PLIBSSH2_SFTP_ATTRIBUTES): cint; begin repeat Result:= libssh2_sftp_stat_ex(sftp, path, strlen(path), _LIBSSH2_SFTP_SETSTAT, attrs); Sleep(1); until Result <> LIBSSH2_ERROR_EAGAIN; end; function libssh2_sftp_symlink(sftp: PLIBSSH2_SFTP; const orig: PAnsiChar; linkpath: PAnsiChar): cint; begin Result:= libssh2_sftp_symlink_ex(sftp, orig, strlen(orig), linkpath, strlen(linkpath), _LIBSSH2_SFTP_SYMLINK); end; function libssh2_sftp_readlink(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; target: PAnsiChar; maxlen: cuint): cint; begin Result:= libssh2_sftp_symlink_ex(sftp, path, strlen(path), target, maxlen, _LIBSSH2_SFTP_READLINK) end; function libssh2_sftp_realpath(sftp: PLIBSSH2_SFTP; const path: PAnsiChar; target: PAnsiChar; maxlen: cuint): cint; begin Result:= libssh2_sftp_symlink_ex(sftp, path, strlen(path), target, maxlen, _LIBSSH2_SFTP_REALPATH); end; procedure Initialize; begin libssh2:= LoadLibrary(LibSSHName); if (libssh2 <> NilHandle) then try //* Global API */ libssh2_init:= SafeGetProcAddress(libssh2, 'libssh2_init'); libssh2_exit:= SafeGetProcAddress(libssh2, 'libssh2_exit'); libssh2_version:= SafeGetProcAddress(libssh2, 'libssh2_version'); //* Session API */ libssh2_session_init_ex:= SafeGetProcAddress(libssh2, 'libssh2_session_init_ex'); libssh2_session_handshake:= SafeGetProcAddress(libssh2, 'libssh2_session_handshake'); libssh2_hostkey_hash:= SafeGetProcAddress(libssh2, 'libssh2_hostkey_hash'); libssh2_session_methods:= SafeGetProcAddress(libssh2, 'libssh2_session_methods'); libssh2_session_disconnect_ex:= SafeGetProcAddress(libssh2, 'libssh2_session_disconnect_ex'); libssh2_session_free:= SafeGetProcAddress(libssh2, 'libssh2_session_free'); libssh2_session_set_blocking:= SafeGetProcAddress(libssh2, 'libssh2_session_set_blocking'); libssh2_session_last_errno:= SafeGetProcAddress(libssh2, 'libssh2_session_last_errno'); libssh2_session_last_error:= SafeGetProcAddress(libssh2, 'libssh2_session_last_error'); libssh2_session_set_timeout:= SafeGetProcAddress(libssh2, 'libssh2_session_set_timeout'); //* Userauth API */ libssh2_userauth_list:= SafeGetProcAddress(libssh2, 'libssh2_userauth_list'); libssh2_userauth_password_ex:= SafeGetProcAddress(libssh2, 'libssh2_userauth_password_ex'); libssh2_userauth_authenticated:= SafeGetProcAddress(libssh2, 'libssh2_userauth_authenticated'); libssh2_userauth_keyboard_interactive_ex:= SafeGetProcAddress(libssh2, 'libssh2_userauth_keyboard_interactive_ex'); libssh2_userauth_publickey_fromfile_ex:= SafeGetProcAddress(libssh2, 'libssh2_userauth_publickey_fromfile_ex'); //* Agent API */ libssh2_agent_init:= SafeGetProcAddress(libssh2, 'libssh2_agent_init'); libssh2_agent_connect:= SafeGetProcAddress(libssh2, 'libssh2_agent_connect'); libssh2_agent_list_identities:= SafeGetProcAddress(libssh2, 'libssh2_agent_list_identities'); libssh2_agent_get_identity:= SafeGetProcAddress(libssh2, 'libssh2_agent_get_identity'); libssh2_agent_userauth:= SafeGetProcAddress(libssh2, 'libssh2_agent_userauth'); libssh2_agent_disconnect:= SafeGetProcAddress(libssh2, 'libssh2_agent_disconnect'); libssh2_agent_free:= SafeGetProcAddress(libssh2, 'libssh2_agent_free'); //* Channel API */ libssh2_channel_open_ex:= SafeGetProcAddress(libssh2, 'libssh2_channel_open_ex'); libssh2_channel_free:= SafeGetProcAddress(libssh2, 'libssh2_channel_free'); libssh2_channel_set_blocking:= SafeGetProcAddress(libssh2, 'libssh2_channel_set_blocking'); libssh2_channel_process_startup:= SafeGetProcAddress(libssh2, 'libssh2_channel_process_startup'); libssh2_channel_flush_ex:= SafeGetProcAddress(libssh2, 'libssh2_channel_flush_ex'); libssh2_channel_send_eof:= SafeGetProcAddress(libssh2, 'libssh2_channel_send_eof'); libssh2_channel_eof:= SafeGetProcAddress(libssh2, 'libssh2_channel_eof'); libssh2_channel_read_ex:= SafeGetProcAddress(libssh2, 'libssh2_channel_read_ex'); libssh2_channel_write_ex:= SafeGetProcAddress(libssh2, 'libssh2_channel_write_ex'); libssh2_channel_get_exit_status:= SafeGetProcAddress(libssh2, 'libssh2_channel_get_exit_status'); libssh2_scp_send64:= SafeGetProcAddress(libssh2, 'libssh2_scp_send64'); libssh2_scp_recv2:= SafeGetProcAddress(libssh2, 'libssh2_scp_recv2'); //* SFTP API */ libssh2_sftp_init:= SafeGetProcAddress(libssh2, 'libssh2_sftp_init'); libssh2_sftp_shutdown:= SafeGetProcAddress(libssh2, 'libssh2_sftp_shutdown'); libssh2_sftp_last_error:= SafeGetProcAddress(libssh2, 'libssh2_sftp_last_error'); //* File / Directory Ops */ libssh2_sftp_open_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_open_ex'); libssh2_sftp_read:= SafeGetProcAddress(libssh2, 'libssh2_sftp_read'); libssh2_sftp_write:= SafeGetProcAddress(libssh2, 'libssh2_sftp_write'); libssh2_sftp_readdir_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_readdir_ex'); libssh2_sftp_close_handle:= SafeGetProcAddress(libssh2, 'libssh2_sftp_close_handle'); libssh2_sftp_seek64:= SafeGetProcAddress(libssh2, 'libssh2_sftp_seek64'); //* Miscellaneous Ops */ libssh2_sftp_rename_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_rename_ex'); libssh2_sftp_unlink_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_unlink_ex'); libssh2_sftp_statvfs:= SafeGetProcAddress(libssh2, 'libssh2_sftp_statvfs'); libssh2_sftp_mkdir_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_mkdir_ex'); libssh2_sftp_rmdir_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_rmdir_ex'); libssh2_sftp_stat_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_stat_ex'); libssh2_sftp_symlink_ex:= SafeGetProcAddress(libssh2, 'libssh2_sftp_symlink_ex'); // Initialize the libssh2 functions if (libssh2_init(0) <> 0) then raise Exception.Create(EmptyStr); except FreeLibrary(libssh2); libssh2:= NilHandle; end; end; initialization Initialize; finalization if (libssh2 <> NilHandle) then begin libssh2_exit(); FreeLibrary(libssh2); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftputils.pas���������������������������������������������������0000644�0001750�0000144�00000015615�15104114162�021021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpUtils; {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} interface uses Classes, SysUtils, WfxPlugin; const cFtpsPort = '990'; function IsIpPrivate(Value: String): Boolean; function EncodeBase64(Data: AnsiString): AnsiString; function DecodeBase64(Data: AnsiString): AnsiString; function RepairConnectionName(Connection: AnsiString): AnsiString; function ExtractConnectionHost(Connection: AnsiString): AnsiString; function ExtractConnectionPort(Connection: AnsiString): AnsiString; function ExtractConnectionProt(Connection: AnsiString): AnsiString; function FormatMachineTime(const Time: TFileTime): String; function DecodeMachineTime(const Time: String): TDateTime; implementation uses Base64, DateUtils, synautil, synaip {$IFDEF MSWINDOWS} , Windows {$ELSE} , UnixUtil {$ENDIF} ; function IsIPv6(Value: String): Boolean; var Index: Integer; begin Index:= Pos('[', Value); if Index = 1 then begin Index:= Pos(']', Value, Index + 1); if Index > 0 then begin Value:= Copy(Value, 2, Index - 2); end; end; Result:= IsIP6(Value); end; function StrToIp(Value: String): LongWord; var S: String; I, X: LongWord; begin Result := 0; for X := 0 to 3 do begin S := Fetch(Value, '.'); I := StrToIntDef(S, 0); Result := (256 * Result) + I; end; end; function IsIpPrivate(Value: String): Boolean; var Index: Integer; Binary: LongWord; const PrivAddr: array [0..4, 0..1] of LongWord = ( // 10.0.0.0 - 10.255.255.255 (167772160, 184549375), // Single Class A network // 172.16.0.0 - 172.31.255.255 (2886729728, 2887778303), // Contiguous range of 16 Class B blocks // 192.168.0.0 - 192.168.255.255 (3232235520, 3232301055), // Contiguous range of 256 Class C blocks // 169.254.0.0 - 169.254.255.255 (2851995648, 2852061183), // Link-local address // 127.0.0.0 - 127.255.255.255 (2130706432, 2147483647) // Loopback (localhost) ); begin Binary:= StrToIp(Value); for Index:= 0 to 4 do begin if (Binary >= PrivAddr[Index][0]) and (Binary <= PrivAddr[Index][1]) then Exit(True) end; Result:= False; end; function EncodeBase64(Data: AnsiString): AnsiString; var StringStream1, StringStream2: TStringStream; begin Result:= EmptyStr; if Data = EmptyStr then Exit; StringStream1:= TStringStream.Create(Data); try StringStream1.Position:= 0; StringStream2:= TStringStream.Create(EmptyStr); try with TBase64EncodingStream.Create(StringStream2) do try CopyFrom(StringStream1, StringStream1.Size); finally Free; end; Result:= StringStream2.DataString; finally StringStream2.Free; end; finally StringStream1.Free; end; end; function DecodeBase64(Data: AnsiString): AnsiString; var StringStream1, StringStream2: TStringStream; Base64DecodingStream: TBase64DecodingStream; begin Result:= EmptyStr; if Data = EmptyStr then Exit; StringStream1:= TStringStream.Create(Data); try StringStream1.Position:= 0; StringStream2:= TStringStream.Create(EmptyStr); try Base64DecodingStream:= TBase64DecodingStream.Create(StringStream1); with StringStream2 do try CopyFrom(Base64DecodingStream, Base64DecodingStream.Size); finally Base64DecodingStream.Free; end; Result:= StringStream2.DataString; finally StringStream2.Free; end; finally StringStream1.Free; end; end; function RepairConnectionName(Connection: AnsiString): AnsiString; var Index: Integer; DenySym: set of AnsiChar; begin Result:= Connection; DenySym:= AllowDirectorySeparators + AllowDriveSeparators + ['<']; for Index:= 1 to Length(Result) do begin if Result[Index] in DenySym then begin Result[Index]:= '_'; end; end; end; function ExtractConnectionHost(Connection: AnsiString): AnsiString; var Index: Integer; begin Index:= Pos('://', Connection); if Index > 0 then Delete(Connection, 1, Index + 2); if IsIPv6(Connection) then begin Index:= Pos('[', Connection); if Index = 1 then begin Index:= Pos(']', Connection, Index + 1); if Index > 0 then begin Connection:= Copy(Connection, 2, Index - 2); end; end; end else begin Index:= Pos(':', Connection); if Index > 0 then Connection:= Copy(Connection, 1, Index - 1) end; Result:= Connection; end; function ExtractConnectionPort(Connection: AnsiString): AnsiString; var I, J: Integer; begin I:= Pos('://', Connection); if I > 0 then Delete(Connection, 1, I + 2); if IsIPv6(Connection) then begin I:= Pos(']:', Connection); if I > 0 then Delete(Connection, 1, I + 1); end else begin I:= Pos(':', Connection); if I > 0 then Delete(Connection, 1, I); end; if I = 0 then Result:= EmptyStr else begin J:= Pos('/', Connection); if J = 0 then J:= MaxInt; Result:= Trim(Copy(Connection, 1, J - 1)); end; end; function ExtractConnectionProt(Connection: AnsiString): AnsiString; var I: Integer; begin Result:= LowerCase(Connection); I:= Pos('://', Result); if I = 0 then Result:= EmptyStr else begin Result:= Copy(Result, 1, I - 1); end; end; function FormatMachineTime(const Time: TFileTime): String; var FileTime: TDateTime; begin FileTime:= (Int64(Time) / 864000000000.0) - 109205.0; Result:= FormatDateTime('yyyymmddhhnnss', FileTime); end; function DecodeMachineTime(const Time: String): TDateTime; var Year, Month, Day: Word; Hour, Minute, Second: Word; begin try Year:= StrToIntDef(Copy(Time, 1, 4), 1970); Month:= StrToIntDef(Copy(Time, 5, 2), 1); Day:= StrToIntDef(Copy(Time, 7, 2), 1); Hour:= StrToIntDef(Copy(Time, 9, 2), 0); Minute:= StrToIntDef(Copy(Time, 11, 2), 0); Second:= StrToIntDef(Copy(Time, 13, 2), 0); Result:= EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); Result:= UniversalTimeToLocal(Result, TimeZoneBias); except Result:= MinDateTime; end; end; end. �������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftpproxy.pas���������������������������������������������������0000644�0001750�0000144�00000013727�15104114162�021044� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpProxy; {$mode delphi} interface uses Classes, SysUtils, IniFiles, ftpsend; type TProxyType = ( PROXY_NONE = 0, PROXY_SOCKS4 = 1, PROXY_SOCKS5 = 2, PROXY_HTTP_CONNECT = 3 ); { TFtpProxy } TFtpProxy = class public ID: String; Host: String; Port: String; User: String; Password: String; ProxyType: TProxyType; function Clone: TFtpProxy; end; var ProxyList: TStringList; procedure LoadProxyList(IniFile: TIniFile); procedure SaveProxyList(IniFile: TIniFile); procedure SetProxy(FtpSend: TFTPSend; ProxyID: String); implementation uses FtpUtils, blcksock; procedure LoadProxyList(IniFile: TIniFile); var Proxy: TFtpProxy; I, Count: Integer; sIndex: AnsiString; begin ProxyList.Clear; Count := IniFile.ReadInteger('FTP', 'ProxyCount', 0); for I := 1 to Count do begin sIndex := IntToStr(I); Proxy := TFtpProxy.Create; Proxy.ID := IniFile.ReadString('FTP', 'Proxy' + sIndex + 'ID', EmptyStr); Proxy.Host := IniFile.ReadString('FTP', 'Proxy' + sIndex + 'Host', EmptyStr); Proxy.Port := IniFile.ReadString('FTP', 'Proxy' + sIndex + 'Port', EmptyStr); Proxy.User := IniFile.ReadString('FTP', 'Proxy' + sIndex + 'User', EmptyStr); Proxy.Password := DecodeBase64(IniFile.ReadString('FTP', 'Proxy' + sIndex + 'Password', EmptyStr)); Proxy.ProxyType := TProxyType(IniFile.ReadInteger('FTP', 'Proxy' + sIndex + 'Type', Integer(PROXY_NONE))); // Add proxy to proxy list ProxyList.AddObject(Proxy.ID, Proxy); end; end; procedure SaveProxyList(IniFile: TIniFile); var Proxy: TFtpProxy; I, Count: Integer; sIndex: AnsiString; begin Count:= ProxyList.Count; IniFile.WriteInteger('FTP', 'ProxyCount', Count); for I := 0 to Count - 1 do begin sIndex := IntToStr(I + 1); Proxy := TFtpProxy(ProxyList.Objects[I]); IniFile.WriteString('FTP', 'Proxy' + sIndex + 'ID', Proxy.ID); IniFile.WriteString('FTP', 'Proxy' + sIndex + 'Host', Proxy.Host); IniFile.WriteString('FTP', 'Proxy' + sIndex + 'Port', Proxy.Port); IniFile.WriteString('FTP', 'Proxy' + sIndex + 'User', Proxy.User); IniFile.WriteString('FTP', 'Proxy' + sIndex + 'Password', EncodeBase64(Proxy.Password)); IniFile.WriteInteger('FTP', 'Proxy' + sIndex + 'Type', Integer(Proxy.ProxyType)); end; end; procedure SetProxy(FtpSend: TFTPSend; ProxyID: String); var Index: Integer; Proxy: TFtpProxy; begin Index:= ProxyList.IndexOf(ProxyID); if (Index < 0) then begin FtpSend.Sock.HTTPTunnelIP:= EmptyStr; FtpSend.Sock.HTTPTunnelUser:= EmptyStr; FtpSend.Sock.HTTPTunnelPass:= EmptyStr; FtpSend.DSock.HTTPTunnelIP:= EmptyStr; FtpSend.DSock.HTTPTunnelUser:= EmptyStr; FtpSend.DSock.HTTPTunnelPass:= EmptyStr; FtpSend.Sock.SocksIP:= EmptyStr; FtpSend.Sock.SocksUsername:= EmptyStr; FtpSend.Sock.SocksPassword:= EmptyStr; FtpSend.DSock.SocksIP:= EmptyStr; FtpSend.DSock.SocksUsername:= EmptyStr; FtpSend.DSock.SocksPassword:= EmptyStr; end else begin Proxy:= TFtpProxy(ProxyList.Objects[Index]); case Proxy.ProxyType of PROXY_HTTP_CONNECT: begin FtpSend.Sock.HTTPTunnelIP:= Proxy.Host; FtpSend.Sock.HTTPTunnelUser:= Proxy.User; FtpSend.Sock.HTTPTunnelPass:= Proxy.Password; FtpSend.DSock.HTTPTunnelIP:= Proxy.Host; FtpSend.DSock.HTTPTunnelUser:= Proxy.User; FtpSend.DSock.HTTPTunnelPass:= Proxy.Password; if Length(Proxy.Port) > 0 then begin FtpSend.Sock.HTTPTunnelPort:= Proxy.Port; FtpSend.DSock.HTTPTunnelPort:= Proxy.Port; end; end; PROXY_SOCKS4, PROXY_SOCKS5: begin if Proxy.ProxyType = PROXY_SOCKS4 then begin FtpSend.Sock.SocksType:= ST_Socks4; FtpSend.DSock.SocksType:= ST_Socks4; end else begin FtpSend.Sock.SocksType:= ST_Socks5; FtpSend.DSock.SocksType:= ST_Socks5; end; FtpSend.Sock.SocksIP:= Proxy.Host; FtpSend.Sock.SocksResolver:= False; FtpSend.Sock.SocksUsername:= Proxy.User; FtpSend.Sock.SocksPassword:= Proxy.Password; FtpSend.DSock.SocksIP:= Proxy.Host; FtpSend.DSock.SocksResolver:= False; FtpSend.DSock.SocksUsername:= Proxy.User; FtpSend.DSock.SocksPassword:= Proxy.Password; if Length(Proxy.Port) > 0 then begin FtpSend.Sock.SocksPort:= Proxy.Port; FtpSend.DSock.SocksPort:= Proxy.Port; end; end; end; end; end; { TFtpProxy } function TFtpProxy.Clone: TFtpProxy; begin Result:= TFtpProxy.Create; Result.ID:= ID; Result.Host:= Host; Result.Port:= Port; Result.User:= User; Result.Password:= Password; Result.ProxyType:= ProxyType; end; initialization ProxyList:= TStringList.Create; ProxyList.OwnsObjects:= True; finalization ProxyList.Free; end. �����������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftppropdlg.pas�������������������������������������������������0000644�0001750�0000144�00000002757�15104114162�021333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FtpPropDlg; {$mode delphi} {$include calling.inc} interface uses SysUtils, Extension, FtpFunc; function ShowPropertiesDlg(const AText: String): Boolean; implementation {$R ftppropdlg.lfm} function DlgProc(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Data: PtrInt; Text: PString absolute Data; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin Data:= SendDlgMsg(pDlg, nil, DM_GETDLGDATA, 0, 0); Data:= PtrInt(PAnsiChar(Text^)); SendDlgMsg(pDlg, 'seProperties', DM_SETTEXT, Data, 0); end; end; end; // with end; function ShowPropertiesDlg(const AText: String): Boolean; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin Result := False; try ResHandle := FindResource(HINSTANCE, PChar('TfrmFileProperties'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin Result := (DialogBoxParam(ResData, ResSize, @DlgProc, DB_LRS, @AText, nil) > 0); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. �����������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftppropdlg.lfm�������������������������������������������������0000644�0001750�0000144�00000004772�15104114162�021325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmFileProperties: TfrmFileProperties Left = 290 Height = 400 Top = 175 Width = 640 Caption = 'Properties' ClientHeight = 400 ClientWidth = 640 Constraints.MinHeight = 223 Constraints.MinWidth = 334 DesignTimePPI = 107 OnShow = DialogBoxShow Position = poOwnerFormCenter LCLVersion = '2.2.6.0' inline seProperties: TSynEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 11 Height = 334 Top = 11 Width = 618 BorderSpacing.Left = 11 BorderSpacing.Top = 11 BorderSpacing.Right = 11 BorderSpacing.Bottom = 11 Anchors = [akTop, akLeft, akRight, akBottom] Color = clWindow Font.Color = clWindowText Font.Pitch = fpFixed Font.Quality = fqDefault ParentColor = False ParentFont = False TabOrder = 1 Gutter.Visible = False Gutter.Width = 0 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = <> MouseActions = <> MouseTextActions = <> MouseSelActions = <> Options = [eoAutoIndent, eoBracketHighlight, eoHideRightMargin, eoNoCaret, eoScrollPastEol, eoSmartTabs, eoTabsToSpaces, eoTrimTrailingSpaces] VisibleSpecialChars = [vscSpace, vscTabAtLast] ReadOnly = True ScrollBars = ssNone SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone inline SynLeftGutterPartList1: TSynGutterPartList end end object btnClose: TBitBtn AnchorSideLeft.Side = asrCenter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 265 Height = 33 Top = 356 Width = 111 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 11 Cancel = True DefaultCaption = True ModalResult = 2 Kind = bkClose TabOrder = 0 end end ������doublecmd-1.1.30/plugins/wfx/ftp/src/ftpfunc.pas����������������������������������������������������0000644�0001750�0000144�00000120341�15104114162�020605� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpFunc; {$mode delphi}{$H+} {$include calling.inc} interface uses SysUtils, Classes, WfxPlugin, Extension; const cAddConnection = '<Add connection>'; cQuickConnection = '<Quick connection>'; type { TConnection } TConnection = class public ConnectionName, Path, Host: AnsiString; Port: AnsiString; UserName: AnsiString; Password: AnsiString; MasterPassword: Boolean; CachedPassword: AnsiString; Proxy: String; PassiveMode: Boolean; CopySCP: Boolean; OnlySCP: Boolean; AutoTLS: Boolean; FullSSL: Boolean; OpenSSH: Boolean; AgentSSH: Boolean; UseAllocate: Boolean; Encoding: AnsiString; Fingerprint: AnsiString; InitCommands: AnsiString; ShowHiddenItems: Boolean; PasswordChanged: Boolean; KeepAliveTransfer: Boolean; PublicKey, PrivateKey: String; public procedure Assign(Connection: TConnection); end; function FsInitW(PluginNr: Integer; pProgressProc: TProgressProcW; pLogProc: TLogProcW; pRequestProc: TRequestProcW): Integer; dcpcall; export; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; export; function FsFindNextW(Hdl: THandle; var FindData: TWin32FindDataW): BOOL; dcpcall; export; function FsFindClose(Hdl: THandle): Integer; dcpcall; export; function FsExecuteFileW(MainWin: THandle; RemoteName, Verb: PWideChar): Integer; dcpcall; export; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; export; function FsGetFileW(RemoteName, LocalName: PWideChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; dcpcall; export; function FsPutFileW(LocalName, RemoteName: PWideChar; CopyFlags: Integer) : Integer; dcpcall; export; function FsDeleteFileW(RemoteName: PWideChar): BOOL; dcpcall; export; function FsMkDirW(RemoteDir: PWideChar): BOOL; dcpcall; export; function FsRemoveDirW(RemoteName: PWideChar): BOOL; dcpcall; export; function FsSetTimeW(RemoteName: PWideChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; dcpcall; export; function FsDisconnectW(DisconnectRoot: PWideChar): BOOL; dcpcall; export; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; export; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; export; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; export; procedure FsStatusInfoW(RemoteDir: PWideChar; InfoStartEnd, InfoOperation: Integer); dcpcall; export; function FsGetBackgroundFlags: Integer; dcpcall; export; { Network API } { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; export; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; export; function FsNetworkManageConnection(MainWin: HWND; Connection: PAnsiChar; Action: LongInt; MaxLen: LongInt): LongBool; dcpcall; export; function FsNetworkOpenConnection(Connection: PAnsiChar; RootDir, RemotePath: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; export; } { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; export; function ReadPassword(ConnectionName: AnsiString; out Password: AnsiString): Boolean; function DeletePassword(ConnectionName: AnsiString): Boolean; var gStartupInfo: TExtensionStartupInfo; var LogProc: TLogProcW; CryptProc: TCryptProcW; PluginNumber: Integer; CryptoNumber: Integer; RequestProc: TRequestProcW; ProgressProc: TProgressProcW; implementation uses IniFiles, StrUtils, FtpAdv, FtpUtils, FtpConfDlg, syncobjs, LazFileUtils, LazUTF8, DCClassesUtf8, DCConvertEncoding, SftpSend, ScpSend, FtpProxy, FtpPropDlg, DCFileAttributes; var DefaultIniName: String; TcpKeepAlive: Boolean = True; ActiveConnectionList, ConnectionList: TStringList; IniFile: TIniFile; ListLock: TCriticalSection; threadvar ThreadCon: TFtpSendEx; const FS_COPYFLAGS_FORCE = FS_COPYFLAGS_OVERWRITE or FS_COPYFLAGS_RESUME; RootList: array [0 .. 1] of AnsiString = (cAddConnection, cQuickConnection); type TListRec = record Path: AnsiString; Index: Integer; FtpSend: TFTPSendEx; FtpList: TFTPListEx; end; PListRec = ^TListRec; procedure ReadConnectionList; var I, Count: Integer; sIndex: AnsiString; Connection: TConnection; begin Count := IniFile.ReadInteger('FTP', 'ConnectionCount', 0); for I := 1 to Count do begin sIndex := IntToStr(I); Connection := TConnection.Create; Connection.ConnectionName := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Name', EmptyStr); Connection.Path := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Path', EmptyStr); Connection.Host := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Host', EmptyStr); Connection.Port := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Port', EmptyStr); Connection.UserName := IniFile.ReadString('FTP', 'Connection' + sIndex + 'UserName', EmptyStr); Connection.MasterPassword := IniFile.ReadBool('FTP', 'Connection' + sIndex + 'MasterPassword', False); if Connection.MasterPassword then Connection.Password := EmptyStr else Connection.Password := DecodeBase64(IniFile.ReadString('FTP', 'Connection' + sIndex + 'Password', EmptyStr)); Connection.Proxy := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Proxy', EmptyStr); Connection.Encoding := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Encoding', EmptyStr); Connection.PassiveMode:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'PassiveMode', True); Connection.AutoTLS:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'AutoTLS', False); Connection.FullSSL:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'FullSSL', False); Connection.OpenSSH:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'OpenSSH', False); Connection.OnlySCP:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'OnlySCP', False); Connection.CopySCP:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'CopySCP', False); Connection.AgentSSH:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'AgentSSH', False); Connection.UseAllocate:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'UseAllocate', False); Connection.PublicKey := IniFile.ReadString('FTP', 'Connection' + sIndex + 'PublicKey', EmptyStr); Connection.PrivateKey := IniFile.ReadString('FTP', 'Connection' + sIndex + 'PrivateKey', EmptyStr); Connection.Fingerprint:= IniFile.ReadString('FTP', 'Connection' + sIndex + 'Fingerprint', EmptyStr); Connection.InitCommands := IniFile.ReadString('FTP', 'Connection' + sIndex + 'InitCommands', EmptyStr); Connection.ShowHiddenItems := IniFile.ReadBool('FTP', 'Connection' + sIndex + 'ShowHiddenItems', True); Connection.KeepAliveTransfer := IniFile.ReadBool('FTP', 'Connection' + sIndex + 'KeepAliveTransfer', False); // add connection to connection list ConnectionList.AddObject(Connection.ConnectionName, Connection); end; LoadProxyList(IniFile); end; procedure WriteConnectionList; var I, Count: Integer; sIndex: AnsiString; Connection: TConnection; begin IniFile.EraseSection('FTP'); Count := ConnectionList.Count; IniFile.WriteInteger('FTP', 'ConnectionCount', Count); for I := 0 to Count - 1 do begin sIndex := IntToStr(I + 1); Connection := TConnection(ConnectionList.Objects[I]); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Name', Connection.ConnectionName); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Path', Connection.Path); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Host', Connection.Host); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Port', Connection.Port); IniFile.WriteString('FTP', 'Connection' + sIndex + 'UserName', Connection.UserName); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'MasterPassword', Connection.MasterPassword); if Connection.MasterPassword then IniFile.DeleteKey('FTP', 'Connection' + sIndex + 'Password') else IniFile.WriteString('FTP', 'Connection' + sIndex + 'Password', EncodeBase64(Connection.Password)); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Proxy', Connection.Proxy); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Encoding', Connection.Encoding); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'PassiveMode', Connection.PassiveMode); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'AutoTLS', Connection.AutoTLS); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'FullSSL', Connection.FullSSL); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'OpenSSH', Connection.OpenSSH); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'OnlySCP', Connection.OnlySCP); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'CopySCP', Connection.CopySCP); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'AgentSSH', Connection.AgentSSH); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'UseAllocate', Connection.UseAllocate); IniFile.WriteString('FTP', 'Connection' + sIndex + 'PublicKey', Connection.PublicKey); IniFile.WriteString('FTP', 'Connection' + sIndex + 'PrivateKey', Connection.PrivateKey); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Fingerprint', Connection.Fingerprint); IniFile.WriteString('FTP', 'Connection' + sIndex + 'InitCommands', Connection.InitCommands); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'ShowHiddenItems', Connection.ShowHiddenItems); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'KeepAliveTransfer', Connection.KeepAliveTransfer); end; SaveProxyList(IniFile); try IniFile.UpdateFile; except on E: Exception do gStartupInfo.MessageBox(PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; procedure FreeConnectionList; var I, Count: Integer; Connection: TConnection; begin Count := ConnectionList.Count; for I := Count - 1 downto 0 do begin Connection := TConnection(ConnectionList.Objects[I]); Connection.Free; ConnectionList.Delete(I); end; end; procedure ZeroPassword(var APassword: String); begin if (Length(APassword) > 0) then begin FillChar(APassword[1], Length(APassword), 0); SetLength(APassword, 0); end; end; function CryptFunc(Mode: LongInt; ConnectionName: String; var Password: String): LongInt; var APassword: UnicodeString; AConnection: UnicodeString; begin APassword:= CeUtf8ToUtf16(Password); AConnection:= CeUtf8ToUtf16(ConnectionName); if (Mode = FS_CRYPT_LOAD_PASSWORD) or (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) then begin SetLength(APassword, MAX_PATH); FillChar(APassword[1], MAX_PATH * SizeOf(WideChar), #0); end; Result:= CryptProc(PluginNumber, CryptoNumber, Mode, PWideChar(AConnection), PWideChar(APassword), MAX_PATH); if (Mode = FS_CRYPT_LOAD_PASSWORD) or (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) then begin Password:= UTF16ToUTF8(PWideChar(APassword)); // truncate to #0 end; end; function ShowPasswordDialog(out Password: String): Boolean; var APassword: UnicodeString; begin SetLength(APassword, MAX_PATH); APassword[1] := #0; Result := RequestProc(PluginNumber, RT_Password, nil, nil, PWideChar(APassword), MAX_PATH); if Result then Password := UTF16ToUTF8(PWideChar(APassword)) // truncate to #0 else Password := EmptyStr; end; function FtpLogin(const Connection: TConnection; const FtpSend: TFTPSendEx): Boolean; var sTemp: AnsiString; begin Result := False; if FtpSend.Login then begin sTemp:= Connection.InitCommands; while sTemp <> EmptyStr do FtpSend.ExecuteCommand(Copy2SymbDel(sTemp, ';')); if Length(Connection.Path) > 0 then FtpSend.ChangeWorkingDir(FtpSend.ClientToServer(CeUtf8ToUtf16(Connection.Path))); Result := True; end; end; function FtpConnect(const ConnectionName: AnsiString; out FtpSend: TFTPSendEx): Boolean; var I: Integer; APassword: String; Connection: TConnection; begin Result:= False; I:= ActiveConnectionList.IndexOf(ConnectionName); // If find active connection then use it if I >= 0 then begin FtpSend:= TFTPSendEx(ActiveConnectionList.Objects[I]); if FtpSend.NetworkError then //Server closed the connection, or network error occurred, or whatever else. //Attempt to reconnect and execute login sequence begin LogProc(PluginNumber, msgtype_details, PWideChar('Network error detected, attempting to reconnect...')); I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection := TConnection(ConnectionList.Objects[I]); if not FtpLogin(Connection, FtpSend) then begin RequestProc(PluginNumber, RT_MsgOK, nil, 'Connection lost, unable to reconnect!', nil, MAX_PATH); Exit; end; end; end; Result:= True; end else begin // find in exists connection list I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection := TConnection(ConnectionList.Objects[I]); if Connection.OpenSSH then begin if Connection.OnlySCP then FtpSend := TScpSend.Create(Connection.Encoding) else begin FtpSend := TSftpSend.Create(Connection.Encoding); TSftpSend(FtpSend).CopySCP := Connection.CopySCP; end; FtpSend.PublicKey:= Connection.PublicKey; FtpSend.PrivateKey:= Connection.PrivateKey; TScpSend(FtpSend).Agent:= Connection.AgentSSH; TScpSend(FtpSend).Fingerprint:= Connection.Fingerprint; end else begin FtpSend := TFTPSendEx.Create(Connection.Encoding); FtpSend.ShowHidden := Connection.ShowHiddenItems; FtpSend.KeepAliveTransfer := Connection.KeepAliveTransfer; end; FtpSend.TcpKeepAlive := TcpKeepAlive; FtpSend.TargetHost := Connection.Host; FtpSend.PassiveMode:= Connection.PassiveMode; FtpSend.AutoTLS:= Connection.AutoTLS; FtpSend.FullSSL:= Connection.FullSSL; FtpSend.UseAllocate:= Connection.UseAllocate; if Connection.Port <> EmptyStr then FtpSend.TargetPort := Connection.Port else if Connection.FullSSL then FtpSend.TargetPort := cFtpsPort; if Connection.UserName <> EmptyStr then FtpSend.UserName := Connection.UserName; if Connection.MasterPassword then begin if CryptFunc(FS_CRYPT_LOAD_PASSWORD, Connection.ConnectionName, Connection.Password) <> FS_FILE_OK then ZeroPassword(Connection.Password); end; // if no saved password then ask it if Connection.OpenSSH and (Connection.AgentSSH or ((Connection.PrivateKey <> '') and (Connection.PublicKey <> ''))) then APassword:= EmptyStr else if Length(Connection.Password) > 0 then APassword:= Connection.Password else if Length(Connection.CachedPassword) > 0 then APassword:= Connection.CachedPassword else if not ShowPasswordDialog(APassword) then begin FreeAndNil(FtpSend); Exit; end; FtpSend.Password := FtpSend.ClientToServer(APassword); SetProxy(FtpSend, Connection.Proxy); // try to connect if not FtpLogin(Connection, FtpSend) then begin RequestProc(PluginNumber, RT_MsgOK, nil, 'Can not connect to the server!', nil, MAX_PATH); FreeAndNil(FtpSend); end else begin Connection.CachedPassword:= APassword; LogProc(PluginNumber, MSGTYPE_CONNECT, PWideChar('CONNECT ' + PathDelim + CeUtf8ToUtf16(ConnectionName))); ActiveConnectionList.AddObject(ConnectionName, FtpSend); if Connection.OpenSSH and (ConnectionName <> cQuickConnection) then begin // Save connection server fingerprint if Connection.Fingerprint <> TScpSend(FtpSend).Fingerprint then begin Connection.Fingerprint:= TScpSend(FtpSend).Fingerprint; WriteConnectionList; end; end; Result:= True; end; end; end; end; function QuickConnection(out FtpSend: TFTPSendEx): Boolean; var Index: Integer; Connection: TConnection; begin Index:= ActiveConnectionList.IndexOf(cQuickConnection); Result:= (Index >= 0); if Result then FtpSend:= TFTPSendEx(ActiveConnectionList.Objects[Index]) else begin Connection := TConnection.Create; Connection.ConnectionName:= cQuickConnection; if ShowFtpConfDlg(Connection) then begin Connection.ConnectionName:= cQuickConnection; Index:= ConnectionList.AddObject(Connection.ConnectionName, Connection); Result:= FtpConnect(Connection.ConnectionName, FtpSend); ConnectionList.Delete(Index); end; Connection.Free; end; end; function AddConnection: Integer; var Connection: TConnection; begin Result := -1; Connection := TConnection.Create; Connection.PassiveMode := True; if ShowFtpConfDlg(Connection) then begin with Connection do begin if ConnectionList.IndexOf(ConnectionName) >= 0 then begin ConnectionName += '+' + IntToStr(Random(MaxInt)); end; if MasterPassword then begin if Length(Password) = 0 then MasterPassword:= False else if CryptFunc(FS_CRYPT_SAVE_PASSWORD, ConnectionName, Password) = FS_FILE_OK then Password:= EmptyStr else MasterPassword:= False; end; Result:= ConnectionList.AddObject(ConnectionName, Connection); end; end; if Result < 0 then FreeAndNil(Connection) else WriteConnectionList; end; function EditConnection(ConnectionName: AnsiString): Boolean; var I: Integer; ATemp: TConnection; Connection: TConnection; begin Result:= False; I := ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin ATemp:= TConnection.Create; Connection:= TConnection(ConnectionList.Objects[I]); ATemp.Assign(Connection); if ShowFtpConfDlg(ATemp) then begin with ATemp do begin if ConnectionName <> Connection.ConnectionName then begin if Connection.MasterPassword then begin if CryptFunc(FS_CRYPT_MOVE_PASSWORD, Connection.ConnectionName, ConnectionName) <> FS_FILE_OK then begin gStartupInfo.MessageBox('Cannot save connection!', 'FTP', MB_OK or MB_ICONERROR); Exit(False); end; end; ConnectionList[I]:= ConnectionName end; if PasswordChanged then begin // Master password enabled if MasterPassword then begin if Length(Password) = 0 then MasterPassword:= False else if CryptFunc(FS_CRYPT_SAVE_PASSWORD, ConnectionName, Password) = FS_FILE_OK then Password:= EmptyStr else MasterPassword:= False; end; // Master password disabled if (MasterPassword = False) and (Connection.MasterPassword <> MasterPassword) then begin DeletePassword(ConnectionName); end; end end; Connection.Assign(ATemp); WriteConnectionList; Result:= True; end; FreeAndNil(ATemp); end; end; function DeleteConnection(ConnectionName: AnsiString): Boolean; var I: Integer; Connection: TConnection; begin Result:= False; I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection:= TConnection(ConnectionList.Objects[I]); Connection.Free; ConnectionList.Delete(I); WriteConnectionList; Result:= True; end; end; function ExtractConnectionName(const sPath: AnsiString): AnsiString; var Index: Integer; begin Result:= sPath; if sPath[1] = PathDelim then Result := Copy(sPath, 2, Length(sPath)); Index := Pos(PathDelim, Result); if Index = 0 then Index := MaxInt; Result := Copy(Result, 1, Index - 1); end; function ExtractRemoteFileName(const FileName: AnsiString): AnsiString; var I: Integer; begin Result := FileName; System.Delete(Result, 1, 1); I := Pos(PathDelim, Result); if I = 0 then Result := '/' else begin System.Delete(Result, 1, I - 1); Result := StringReplace(Result, '\', '/', [rfReplaceAll]); end; end; function GetConnectionByPath(const sPath: UnicodeString; out FtpSend: TFTPSendEx; out RemotePath: AnsiString): Boolean; var sConnName: AnsiString; begin Result := False; if (ExtractFileDir(sPath) = PathDelim) then Exit; if Assigned(ThreadCon) then begin Result:= True; FtpSend:= ThreadCon; end else begin sConnName:= ExtractConnectionName(UTF16ToUTF8(sPath)); Result:= FtpConnect(sConnName, FtpSend); end; if Result then begin RemotePath:= FtpSend.ClientToServer(sPath); RemotePath:= ExtractRemoteFileName(RemotePath); end; end; function LocalFindNext(Hdl: THandle; var FindData: TWin32FindDataW): Boolean; var ListRec: PListRec absolute Hdl; I, RootCount: Integer; Connection: TConnection; begin Result := False; I := ListRec^.Index; RootCount := High(RootList) + 1; FillChar(FindData, SizeOf(FindData), 0); if I < RootCount then begin StrPCopy(FindData.cFileName, CeUtf8ToUtf16(RootList[I])); FindData.dwFileAttributes := 0; Inc(ListRec^.Index); Result := True; end else if I - RootCount < ConnectionList.Count then begin Connection := TConnection(ConnectionList.Objects[I - RootCount]); StrPCopy(FindData.cFileName, CeUtf8ToUtf16(Connection.ConnectionName)); FindData.dwFileAttributes := FILE_ATTRIBUTE_VOLUME; Inc(ListRec^.Index); Result := True; end; if Result then begin FindData.nFileSizeLow := $FFFFFFFE; FindData.nFileSizeHigh := $FFFFFFFF; FindData.ftLastWriteTime.dwLowDateTime := $FFFFFFFE; FindData.ftLastWriteTime.dwHighDateTime := $FFFFFFFF; end; end; function FsInitW(PluginNr: Integer; pProgressProc: TProgressProcW; pLogProc: TLogProcW; pRequestProc: TRequestProcW): Integer; dcpcall; export; begin ProgressProc := pProgressProc; LogProc := pLogProc; RequestProc := pRequestProc; PluginNumber := PluginNr; Result := 0; end; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; export; var ListRec: PListRec; sPath: AnsiString; FtpSend: TFTPSendEx; Directory: UnicodeString; begin New(ListRec); ListRec.Index := 0; ListRec.Path := Path; ListRec.FtpSend := nil; ListRec.FtpList := nil; Result := wfxInvalidHandle; if Path = PathDelim then begin Result := THandle(ListRec); LocalFindNext(Result, FindData); end else begin ListLock.Acquire; try Directory:= Path; if Directory[Length(Directory)] <> PathDelim then Directory:= Directory + PathDelim; if GetConnectionByPath(Directory, FtpSend, sPath) then begin ListRec.FtpSend := FtpSend; ListRec.FtpList := FtpSend.FsFindFirstW(sPath, FindData); if Assigned(ListRec.FtpList) then Result:= THandle(ListRec); end; finally ListLock.Release; if Result = wfxInvalidHandle then Dispose(ListRec); end; end; end; function FsFindNextW(Hdl: THandle; var FindData: TWin32FindDataW): BOOL; dcpcall; export; var ListRec: PListRec absolute Hdl; begin if ListRec.Path = PathDelim then Result := LocalFindNext(Hdl, FindData) else Result := ListRec^.FtpSend.FsFindNextW(ListRec.FtpList, FindData); end; function FsFindClose(Hdl: THandle): Integer; dcpcall; export; var ListRec: PListRec absolute Hdl; begin Result:= 0; if Assigned(ListRec) then begin if Assigned(ListRec^.FtpSend) then begin Result:= ListRec^.FtpSend.FsFindClose(ListRec.FtpList); end; Dispose(ListRec); end; end; function FsExecuteFileW(MainWin: THandle; RemoteName, Verb: PWideChar): Integer; dcpcall; export; var FtpSend: TFTPSendEx; RemoteDir: AnsiString; asFileName: AnsiString; wsFileName: UnicodeString; begin Result:= FS_EXEC_YOURSELF; if (RemoteName = '') then Exit; if Verb = 'open' then begin if (ExtractFileDir(RemoteName) = PathDelim) then // root path begin asFileName:= UTF16ToUTF8(RemoteName + 1); if RemoteName[1] <> '<' then // connection begin if not FtpConnect(asFileName, FtpSend) then Result := FS_EXEC_OK else begin Result := FS_EXEC_SYMLINK; end; end else // special item begin if asFileName = cAddConnection then begin AddConnection; Result:= FS_EXEC_OK; end else if asFileName = cQuickConnection then begin if not QuickConnection(FtpSend) then Result := FS_EXEC_OK else begin Result := FS_EXEC_SYMLINK; end; end; end; if (Result = FS_EXEC_SYMLINK) then begin wsFileName := FtpSend.ServerToClient(FtpSend.GetCurrentDir); wsFileName := SetDirSeparators(RemoteName + wsFileName); StrPLCopy(RemoteName, wsFileName, MAX_PATH); end; end; // root path end // Verb = open else if Pos('chmod', UnicodeString(Verb)) = 1 then begin if GetConnectionByPath(RemoteName, FtpSend, asFileName) then begin if FtpSend.ChangeMode(asFileName, AnsiString(Copy(Verb, 7, MaxInt))) then Result:= FS_EXEC_OK else Result := FS_EXEC_ERROR; end; end else if Pos('quote', UnicodeString(Verb)) = 1 then begin if GetConnectionByPath(RemoteName, FtpSend, RemoteDir) then begin asFileName:= FtpSend.ClientToServer(Verb); if FtpSend.ExecuteCommand(Copy(asFileName, 7, MaxInt), RemoteDir) then Result := FS_EXEC_OK else Result := FS_EXEC_ERROR; end; end else if Verb = 'properties' then begin if (ExtractFileDir(RemoteName) = PathDelim) and not (RemoteName[1] in [#0, '<']) then // connection begin EditConnection(UTF16ToUTF8(RemoteName + 1)); end else if (ExtractFileDir(RemoteName) <> PathDelim) then begin if GetConnectionByPath(RemoteName, FtpSend, asFileName) then begin if FtpSend.FileProperties(asFileName) then begin wsFileName:= FtpSend.ServerToClient(FtpSend.FullResult.Text); ShowPropertiesDlg(PAnsiChar(UTF8Encode(wsFileName))); end end; end; Result:= FS_EXEC_OK; end; end; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; export; var O, N: Integer; FtpSend: TFTPSendEx; sOldName: AnsiString; sNewName: AnsiString; Connection: TConnection; begin Result := FS_FILE_NOTSUPPORTED; if not Move then begin if (ExtractFileDir(OldName) = PathDelim) and (WideChar(OldName[1]) <> '<') and (ExtractFileDir(NewName) = PathDelim) and (WideChar(NewName[1]) <> '<') then begin O:= ConnectionList.IndexOf(OldName + 1); if O < 0 then Result:= FS_FILE_NOTFOUND else begin sNewName:= RepairConnectionName(UTF16ToUTF8(UnicodeString(NewName + 1))); N:= ConnectionList.IndexOf(sNewName); if (N >= 0) then begin if not OverWrite then Exit(FS_FILE_EXISTS); Connection:= TConnection(ConnectionList.Objects[N]); end else begin Connection:= TConnection.Create; ConnectionList.AddObject(sNewName, Connection); end; Connection.Assign(TConnection(ConnectionList.Objects[O])); Connection.ConnectionName:= sNewName; WriteConnectionList; Result:= FS_FILE_OK; end; end else if GetConnectionByPath(OldName, FtpSend, sOldName) then begin if FtpSend is TScpSend then begin sNewName := FtpSend.ClientToServer(NewName); sNewName := ExtractRemoteFileName(sNewName); ProgressProc(PluginNumber, OldName, NewName, 0); if (not OverWrite) and (FtpSend.FileExists(sNewName)) then begin Exit(FS_FILE_EXISTS); end; if FtpSend.CopyFile(sOldName, sNewName) then begin ProgressProc(PluginNumber, OldName, NewName, 100); Result := FS_FILE_OK; end; end; end; Exit; end; if (ExtractFileDir(OldName) = PathDelim) and (WideChar(OldName[1]) <> '<') then begin O:= ConnectionList.IndexOf(OldName + 1); if O < 0 then Result:= FS_FILE_NOTFOUND else begin ConnectionList[O]:= RepairConnectionName(UTF16ToUTF8(UnicodeString(NewName + 1))); TConnection(ConnectionList.Objects[O]).ConnectionName:= ConnectionList[O]; WriteConnectionList; Result:= FS_FILE_OK; end; end else if GetConnectionByPath(OldName, FtpSend, sOldName) then begin sNewName := FtpSend.ClientToServer(NewName); sNewName := ExtractRemoteFileName(sNewName); ProgressProc(PluginNumber, OldName, NewName, 0); if FtpSend.RenameFile(sOldName, sNewName) then begin ProgressProc(PluginNumber, OldName, NewName, 100); Result := FS_FILE_OK; end; end; end; function FsGetFileW(RemoteName, LocalName: PWideChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; dcpcall; export; var FileSize: Int64; FtpSend: TFTPSendEx; sFileName: AnsiString; FileName: AnsiString; begin Result := FS_FILE_READERROR; if GetConnectionByPath(RemoteName, FtpSend, sFileName) then try FileName:= UTF16ToUTF8(UnicodeString(LocalName)); if FileExistsUTF8(FileName) and (CopyFlags and FS_COPYFLAGS_FORCE = 0) then begin if not FtpSend.CanResume then Exit(FS_FILE_EXISTS); Exit(FS_FILE_EXISTSRESUMEALLOWED); end; FtpSend.DataStream.Clear; FtpSend.DirectFileName := FileName; Int64Rec(FileSize).Lo := RemoteInfo^.SizeLow; Int64Rec(FileSize).Hi := RemoteInfo^.SizeHigh; ProgressProc(PluginNumber, RemoteName, LocalName, 0); if FtpSend.RetrieveFile(sFileName, FileSize, (CopyFlags and FS_COPYFLAGS_RESUME) <> 0) then begin ProgressProc(PluginNumber, RemoteName, LocalName, 100); Result := FS_FILE_OK; end; except on EUserAbort do Result := FS_FILE_USERABORT; on EFOpenError do Result := FS_FILE_READERROR; else Result := FS_FILE_WRITEERROR; end; end; function FsPutFileW(LocalName, RemoteName: PWideChar; CopyFlags: Integer): Integer; dcpcall; export; var FtpSend: TFTPSendEx; sFileName: AnsiString; FileName: AnsiString; begin Result := FS_FILE_WRITEERROR; if GetConnectionByPath(RemoteName, FtpSend, sFileName) then try FileName:= UTF16ToUTF8(UnicodeString(LocalName)); if (CopyFlags and FS_COPYFLAGS_FORCE = 0) and (FtpSend.FileExists(sFileName)) then begin if not FtpSend.CanResume then Exit(FS_FILE_EXISTS); Exit(FS_FILE_EXISTSRESUMEALLOWED); end; FtpSend.DataStream.Clear; FtpSend.DirectFileName := FileName; ProgressProc(PluginNumber, LocalName, RemoteName, 0); if FtpSend.StoreFile(sFileName, (CopyFlags and FS_COPYFLAGS_RESUME) <> 0) then begin ProgressProc(PluginNumber, LocalName, RemoteName, 100); Result := FS_FILE_OK; end; except on EReadError do Result := FS_FILE_READERROR; on EUserAbort do Result := FS_FILE_USERABORT; else Result := FS_FILE_WRITEERROR; end; end; function FsDeleteFileW(RemoteName: PWideChar): BOOL; dcpcall; export; var FtpSend: TFTPSendEx; sFileName: AnsiString; begin Result := False; // if root path then delete connection if (ExtractFileDir(RemoteName) = PathDelim) and (RemoteName[1] <> '<') then Result:= DeleteConnection(ExtractConnectionName(UTF16ToUTF8(RemoteName))) else if GetConnectionByPath(RemoteName, FtpSend, sFileName) then Result := FtpSend.DeleteFile(sFileName); end; function FsMkDirW(RemoteDir: PWideChar): BOOL; dcpcall; export; var sPath: AnsiString; FtpSend: TFTPSendEx; begin Result := False; if GetConnectionByPath(RemoteDir, FtpSend, sPath) then Result := FtpSend.CreateDir(sPath); end; function FsRemoveDirW(RemoteName: PWideChar): BOOL; dcpcall; export; var sPath: AnsiString; FtpSend: TFTPSendEx; begin Result := False; if GetConnectionByPath(RemoteName, FtpSend, sPath) then Result := FtpSend.DeleteDir(sPath); end; function FsSetTimeW(RemoteName: PWideChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; dcpcall; export; var sPath: AnsiString; FtpSend: TFTPSendEx; begin if (LastAccessTime = nil) and (LastWriteTime = nil) then Result := False else if GetConnectionByPath(RemoteName, FtpSend, sPath) then Result := FtpSend.FsSetTime(sPath, LastAccessTime, LastWriteTime) else begin Result := False; end; end; function FsDisconnectW(DisconnectRoot: PWideChar): BOOL; dcpcall; export; var Index: Integer; asTemp: AnsiString; FtpSend: TFTPSendEx; wsTemp: UnicodeString; begin wsTemp := ExcludeLeadingPathDelimiter(DisconnectRoot); asTemp := ExtractConnectionName(UTF16ToUTF8(wsTemp)); Index := ActiveConnectionList.IndexOf(asTemp); Result := (Index >= 0); if Result then begin FtpSend:= TFTPSendEx(ActiveConnectionList.Objects[Index]); if not FtpSend.NetworkError then begin FtpSend.Logout; end; ActiveConnectionList.Delete(Index); Index:= ConnectionList.IndexOf(asTemp); if Index >= 0 then begin ZeroPassword(TConnection(ConnectionList.Objects[Index]).CachedPassword); end; LogProc(PluginNumber, MSGTYPE_DISCONNECT, PWideChar('DISCONNECT ' + DisconnectRoot)); FreeAndNil(FtpSend); end; end; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; export; begin CryptProc:= pCryptProc; CryptoNumber:= CryptoNr; end; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; export; begin StrPLCopy(DefRootName, 'FTP', MaxLen); end; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; export; begin ConnectionList := TStringList.Create; ActiveConnectionList := TStringList.Create; DefaultIniName:= ExtractFileName(dps.DefaultIniName); end; procedure FsStatusInfoW(RemoteDir: PWideChar; InfoStartEnd, InfoOperation: Integer); dcpcall; export; var FtpSend: TFtpSendEx; RemotePath: AnsiString; begin if (InfoOperation in [FS_STATUS_OP_GET_MULTI_THREAD, FS_STATUS_OP_PUT_MULTI_THREAD]) then begin if InfoStartEnd = FS_STATUS_START then begin if GetConnectionByPath(RemoteDir, FtpSend, RemotePath) then begin LogProc(PluginNumber, msgtype_details, 'Create background connection'); ThreadCon:= FtpSend.Clone; if not ThreadCon.Login then begin FreeAndNil(ThreadCon); LogProc(PluginNumber, msgtype_importanterror, 'Cannot create background connection, use foreground'); end; end; end else if Assigned(ThreadCon) then begin LogProc(PluginNumber, msgtype_details, 'Destroy background connection'); ThreadCon.Logout; FreeAndNil(ThreadCon); end; end; end; function FsGetBackgroundFlags: Integer; dcpcall; export; begin Result:= BG_DOWNLOAD or BG_UPLOAD or BG_ASK_USER; end; { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; export; begin StrPLCopy(Protocols, ftpProtocol, MaxLen); end; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; export; begin Result:= False; if Index >= ConnectionList.Count then Exit; StrPLCopy(Connection, TConnection(ConnectionList.Objects[Index]).ConnectionName, MaxLen); Result:= True; end; function FsNetworkManageConnection(MainWin: HWND; Connection: PAnsiChar; Action: LongInt; MaxLen: LongInt): LongBool; dcpcall; export; var I: Integer; begin Result:= False; case Action of FS_NM_ACTION_ADD: begin I:= AddConnection; if I >= 0 then begin StrPLCopy(Connection, ConnectionList[I], MaxLen); Result:= True; end; end; FS_NM_ACTION_EDIT: begin I:= ConnectionList.IndexOf(Connection); if I >= 0 then begin if EditConnection(Connection) then begin StrPLCopy(Connection, ConnectionList[I], MaxLen); Result:= True; end; end; end; FS_NM_ACTION_DELETE: Result:= DeleteConnection(Connection); end; end; function FsNetworkOpenConnection(Connection: PAnsiChar; RootDir, RemotePath: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; export; var I: Integer; FtpSend: TFTPSendEx; Con: TConnection; begin Result:= False; if Connection = #0 then begin if QuickConnection then begin I:= ActiveConnectionList.IndexOf(cQuickConnection); if I >= 0 then begin Con:= TConnection(ActiveConnectionList.Objects[I]); StrPLCopy(Connection, ftpProtocol + Con.Host, MaxLen); StrPLCopy(RootDir, PathDelim + Con.ConnectionName, MaxLen); StrPLCopy(RemotePath, Con.Path, MaxLen); Result:= True; end; end; end else if FtpConnect(Connection, FtpSend) then begin I:= ConnectionList.IndexOf(Connection); if I >= 0 then begin Con:= TConnection(ConnectionList.Objects[I]); StrPLCopy(Connection, ftpProtocol + Con.Host, MaxLen); StrPLCopy(RootDir, PathDelim + Con.ConnectionName, MaxLen); StrPLCopy(RemotePath, Con.Path, MaxLen); Result:= True; end; end; end; } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); begin gStartupInfo:= StartupInfo^; DefaultIniName:= gStartupInfo.PluginConfDir + DefaultIniName; try IniFile := TIniFileEx.Create(DefaultIniName, fmOpenReadWrite); // Use TCP keep alive for all connections: Useful for certain // firewalls/router if the connection breaks very often. TcpKeepAlive := IniFile.ReadBool('General', 'TcpKeepAlive', TcpKeepAlive); ReadConnectionList; except on E: Exception do gStartupInfo.MessageBox(PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; function ReadPassword(ConnectionName: AnsiString; out Password: AnsiString): Boolean; begin Password:= EmptyStr; case CryptFunc(FS_CRYPT_LOAD_PASSWORD, ConnectionName, Password) of FS_FILE_OK, FS_FILE_READERROR: Result:= True else Result:= False; end; end; function DeletePassword(ConnectionName: AnsiString): Boolean; var Password: String = ''; begin Result:= CryptFunc(FS_CRYPT_DELETE_PASSWORD, ConnectionName, Password) = FS_FILE_OK; end; { TConnection } procedure TConnection.Assign(Connection: TConnection); begin Path:= Connection.Path; Host:= Connection.Host; Port:= Connection.Port; Proxy:= Connection.Proxy; AutoTLS:= Connection.AutoTLS; FullSSL:= Connection.FullSSL; OpenSSH:= Connection.OpenSSH; CopySCP:= Connection.CopySCP; OnlySCP:= Connection.OnlySCP; AgentSSH:= Connection.AgentSSH; UserName:= Connection.UserName; Password:= Connection.Password; Encoding:= Connection.Encoding; PublicKey:= Connection.PublicKey; PrivateKey:= Connection.PrivateKey; Fingerprint:= Connection.Fingerprint; PassiveMode:= Connection.PassiveMode; UseAllocate:= Connection.UseAllocate; InitCommands:= Connection.InitCommands; MasterPassword:= Connection.MasterPassword; ConnectionName:= Connection.ConnectionName; PasswordChanged:= Connection.PasswordChanged; ShowHiddenItems:= Connection.ShowHiddenItems; KeepAliveTransfer:= Connection.KeepAliveTransfer; end; initialization ListLock := syncobjs.TCriticalSection.Create; finalization FreeAndNil(ListLock); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftpadv.pas�����������������������������������������������������0000644�0001750�0000144�00000065126�15104114162�020435� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-2021 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpAdv; {$mode delphi} {$macro on} interface uses Classes, SysUtils, WfxPlugin, FtpSend, DCClassesUtf8, LConvEncoding, DCConvertEncoding, DCFileAttributes, DCBasicTypes, blcksock, LazVersion; type TConvertUTF8ToEncodingFunc = function(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; type { EUserAbort } EUserAbort = class(Exception); { TFTPListRecEx } TFTPListRecEx = class(TFTPListRec) private FMode: TFileAttrs; public procedure Assign(Value: TFTPListRec); override; property Mode: TFileAttrs read FMode write FMode; end; { TFTPListEx } TFTPListEx = class(TFTPList) private FIndex: Integer; protected procedure FillRecord(const Value: TFTPListRec); override; public procedure Clear; override; procedure ParseLines; override; procedure Assign(Value: TFTPList); override; end; { TProgressStream } TProgressStream = class(TFileStreamEx) public DoneSize: Int64; FileSize: Int64; PluginNumber: Integer; ProgressProc: TProgressProcW; SourceName, TargetName: PWideChar; private FTime: QWord; FtpSend: TFTPSend; procedure DoProgress(Result: Integer); public function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; end; { TFTPSendEx } TFTPSendEx = class(TFTPSend) private FUnicode: Boolean; FSetTime: Boolean; FMachine: Boolean; FShowHidden: Boolean; FShowHiddenText: String; FUseAllocate: Boolean; FTcpKeepAlive: Boolean; FKeepAliveTransfer: Boolean; procedure SetEncoding(AValue: String); protected ConvertToUtf8: TConvertEncodingFunction; ConvertFromUtf8: TConvertUTF8ToEncodingFunc; protected FAuto: Boolean; FEncoding: String; FPublicKey, FPrivateKey: String; function Connect: Boolean; override; function DataSocket: Boolean; override; function ListMachine(Directory: String): Boolean; procedure DoStatus(Response: Boolean; const Value: string); override; procedure OnSocketStatus(Sender: TObject; Reason: THookSocketReason; const Value: String); public function ServerToClient(const Value: AnsiString): UnicodeString; function ClientToServer(const Value: AnsiString): AnsiString; overload; function ClientToServer(const Value: UnicodeString): AnsiString; overload; public function FsFindFirstW(const Path: String; var FindData: TWin32FindDataW): Pointer; virtual; function FsFindNextW(Handle: Pointer; var FindData: TWin32FindDataW): BOOL; virtual; function FsFindClose(Handle: Pointer): Integer; virtual; function FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: PWfxFileTime): BOOL; virtual; public constructor Create(const Encoding: String); virtual; reintroduce; function Login: Boolean; override; function Clone: TFTPSendEx; virtual; procedure CloneTo(AValue: TFTPSendEx); virtual; procedure ParseRemote(Value: string); override; function FileExists(const FileName: String): Boolean; virtual; function CreateDir(const Directory: string): Boolean; override; function FileProperties(const FileName: String): Boolean; virtual; function CopyFile(const OldName, NewName: String): Boolean; virtual; function ChangeMode(const FileName, Mode: String): Boolean; virtual; function List(Directory: String; NameList: Boolean): Boolean; override; function StoreFile(const FileName: string; Restore: Boolean): Boolean; override; function ExecuteCommand(const Command: String; const Directory: String = ''): Boolean; virtual; function RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; virtual; overload; function NetworkError(): Boolean; virtual; public property Encoding: String write SetEncoding; property UseAllocate: Boolean write FUseAllocate; property TcpKeepAlive: Boolean write FTcpKeepAlive; property PublicKey: String read FPublicKey write FPublicKey; property PrivateKey: String read FPrivateKey write FPrivateKey; property ShowHidden: Boolean read FShowHidden write FShowHidden; property KeepAliveTransfer: Boolean read FKeepAliveTransfer write FKeepAliveTransfer; end; { TFTPSendExClass } TFTPSendExClass = class of TFTPSendEx; implementation uses LazUTF8, DCOSUtils, FtpFunc, FtpUtils, synautil, synsock, DCStrUtils, DCDateTimeUtils {$IF (FPC_FULLVERSION < 30000)} , LazUTF8SysUtils {$ENDIF} ; {$IF NOT DECLARED(EncodingCP1250)} const EncodingCP1250 = 'cp1250'; EncodingCP1251 = 'cp1251'; EncodingCP1252 = 'cp1252'; EncodingCP1253 = 'cp1253'; EncodingCP1254 = 'cp1254'; EncodingCP1255 = 'cp1255'; EncodingCP1256 = 'cp1256'; EncodingCP1257 = 'cp1257'; EncodingCP1258 = 'cp1258'; EncodingCP437 = 'cp437'; EncodingCP850 = 'cp850'; EncodingCP852 = 'cp852'; EncodingCP866 = 'cp866'; EncodingCP874 = 'cp874'; EncodingCP932 = 'cp932'; EncodingCP936 = 'cp936'; EncodingCP949 = 'cp949'; EncodingCP950 = 'cp950'; EncodingCPKOI8 = 'koi8'; EncodingCPIso1 = 'iso88591'; EncodingCPIso2 = 'iso88592'; EncodingCPIso15 = 'iso885915'; {$ENDIF} {$IF NOT DECLARED(EncodingCPKOI8R)} const EncodingCPKOI8R = 'koi8r'; {$define KOI8RToUTF8:= KOI8ToUTF8} {$define UTF8ToKOI8R:= UTF8ToKOI8} {$ENDIF} function Dummy(const S: String): String; begin Result:= S; end; function Ymmud(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; begin Result:= S; end; function Utf8ToSys(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; begin Result:= CeUtf8ToSys(S); end; { TFTPListRecEx } procedure TFTPListRecEx.Assign(Value: TFTPListRec); begin inherited Assign(Value); Permission:= Value.Permission; if Value is TFTPListRecEx then Mode:= TFTPListRecEx(Value).Mode else Mode:= UnixStrToFileAttr(Permission); end; { TFTPListEx } procedure TFTPListEx.Clear; begin FIndex := 0; inherited Clear; end; procedure TFTPListEx.ParseLines; var ATotal: Int64; begin if FLines.Count > 0 then begin if Pos('total', FLines[0]) = 1 then begin if TryStrToInt64(Trim(Copy(FLines[0], 6, MaxInt)), ATotal) then FLines.Delete(0); end; end; inherited ParseLines; end; procedure TFTPListEx.FillRecord(const Value: TFTPListRec); var flr: TFTPListRecEx; begin inherited FillRecord(Value); if Value.Directory and (Value.FileName = '..') then begin flr := TFTPListRecEx.Create; flr.Assign(Value); FList.Add(flr); end; end; procedure TFTPListEx.Assign(Value: TFTPList); var flr: TFTPListRecEx; n: integer; begin Clear; for n := 0 to Value.Count - 1 do begin flr := TFTPListRecEx.Create; flr.Assign(Value[n]); Flist.Add(flr); end; Lines.Assign(Value.Lines); Masks.Assign(Value.Masks); UnparsedLines.Assign(Value.UnparsedLines); end; { TProgressStream } procedure TProgressStream.DoProgress(Result: Integer); var Percent: Int64; begin DoneSize += Result; Percent:= DoneSize * 100 div FileSize; if ProgressProc(PluginNumber, SourceName, TargetName, Percent) = 1 then raise EUserAbort.Create(EmptyStr); // Send keepalive also during a transfer if TFTPSendEx(FtpSend).KeepAliveTransfer then begin Percent:= GetTickCount64; if (Percent - FTime) > 30000 then begin FTime:= Percent; FtpSend.Sock.SendString(CRLF); end; end; end; function TProgressStream.Read(var Buffer; Count: Longint): Longint; begin Result:= inherited Read(Buffer, Count); if FileSize > 0 then DoProgress(Result); end; function TProgressStream.Write(const Buffer; Count: Longint): Longint; begin Result:= inherited Write(Buffer, Count); if FileSize > 0 then DoProgress(Result); end; { TFTPSendEx } procedure TFTPSendEx.SetEncoding(AValue: String); begin FEncoding:= AValue; if FEncoding = EncodingUTF8 then begin ConvertToUtf8:= @Dummy; ConvertFromUtf8:= @Ymmud; end else if FEncoding = EncodingCPIso1 then begin ConvertToUtf8:= @ISO_8859_1ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_1; end else if FEncoding = EncodingCPIso2 then begin ConvertToUtf8:= @ISO_8859_2ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_2; end else if FEncoding = EncodingCPIso15 then begin ConvertToUtf8:= @ISO_8859_15ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_15; end else if FEncoding = EncodingCP1250 then begin ConvertToUtf8:= @CP1250ToUTF8; ConvertFromUtf8:= @UTF8ToCP1250; end else if FEncoding = EncodingCP1251 then begin ConvertToUtf8:= @CP1251ToUTF8; ConvertFromUtf8:= @UTF8ToCP1251; end else if FEncoding = EncodingCP1252 then begin ConvertToUtf8:= @CP1252ToUTF8; ConvertFromUtf8:= @UTF8ToCP1252; end else if FEncoding = EncodingCP1253 then begin ConvertToUtf8:= @CP1253ToUTF8; ConvertFromUtf8:= @UTF8ToCP1253; end else if FEncoding = EncodingCP1254 then begin ConvertToUtf8:= @CP1254ToUTF8; ConvertFromUtf8:= @UTF8ToCP1254; end else if FEncoding = EncodingCP1255 then begin ConvertToUtf8:= @CP1255ToUTF8; ConvertFromUtf8:= @UTF8ToCP1255; end else if FEncoding = EncodingCP1256 then begin ConvertToUtf8:= @CP1256ToUTF8; ConvertFromUtf8:= @UTF8ToCP1256; end else if FEncoding = EncodingCP1257 then begin ConvertToUtf8:= @CP1257ToUTF8; ConvertFromUtf8:= @UTF8ToCP1257; end else if FEncoding = EncodingCP1258 then begin ConvertToUtf8:= @CP1258ToUTF8; ConvertFromUtf8:= @UTF8ToCP1258; end else if FEncoding = EncodingCP437 then begin ConvertToUtf8:= @CP437ToUTF8; ConvertFromUtf8:= @UTF8ToCP437; end else if FEncoding = EncodingCP850 then begin ConvertToUtf8:= @CP850ToUTF8; ConvertFromUtf8:= @UTF8ToCP850; end else if FEncoding = EncodingCP852 then begin ConvertToUtf8:= @CP852ToUTF8; ConvertFromUtf8:= @UTF8ToCP852; end else if FEncoding = EncodingCP866 then begin ConvertToUtf8:= @CP866ToUTF8; ConvertFromUtf8:= @UTF8ToCP866; end else if FEncoding = EncodingCP874 then begin ConvertToUtf8:= @CP874ToUTF8; ConvertFromUtf8:= @UTF8ToCP874; end else if FEncoding = EncodingCP932 then begin ConvertToUtf8:= @CP932ToUTF8; ConvertFromUtf8:= @UTF8ToCP932; end else if FEncoding = EncodingCP936 then begin ConvertToUtf8:= @CP936ToUTF8; ConvertFromUtf8:= @UTF8ToCP936; end else if FEncoding = EncodingCP949 then begin ConvertToUtf8:= @CP949ToUTF8; ConvertFromUtf8:= @UTF8ToCP949; end else if FEncoding = EncodingCP950 then begin ConvertToUtf8:= @CP950ToUTF8; ConvertFromUtf8:= @UTF8ToCP950; end else if FEncoding = EncodingCPKOI8R then begin ConvertToUtf8:= @KOI8RToUTF8; ConvertFromUtf8:= @UTF8ToKOI8R; end; end; function TFTPSendEx.Connect: Boolean; var Option: Cardinal = 1; Message: UnicodeString; begin Result:= inherited Connect; if Result then LogProc(PluginNumber, MSGTYPE_CONNECT, nil); // Apply TcpKeepAlive option if FTcpKeepAlive and Result then begin if SetSockOpt(FSock.Socket, SOL_SOCKET, SO_KEEPALIVE, @Option, SizeOf(Option)) <> 0 then begin Message := UTF8ToUTF16(FSock.GetErrorDesc(synsock.WSAGetLastError)); LogProc(PluginNumber, msgtype_importanterror, PWideChar('CSOCK ERROR ' + Message)); end; end; end; function TFTPSendEx.DataSocket: Boolean; var Message: UnicodeString; begin Result:= inherited DataSocket; if FDSock.LastError <> 0 then begin Message:= UTF8ToUTF16(CeSysToUtf8(FDSock.LastErrorDesc)); LogProc(PluginNumber, msgtype_importanterror, PWideChar('DSOCK ERROR ' + Message)); end; end; function TFTPSendEx.ListMachine(Directory: String): Boolean; var v: String; start: Boolean; s, x, y: Integer; flr: TFTPListRecEx; pdir, pcdir: Boolean; option, value: String; begin FFTPList.Clear; Result := False; FDataStream.Clear; if Directory <> '' then Directory := ' ' + Directory; FTPCommand('TYPE A'); if not DataSocket then Exit; x := FTPCommand('MLSD' + Directory); if (x div 100) <> 1 then Exit; Result := DataRead(FDataStream); if Result then begin pdir := False; pcdir := False; option := EmptyStr; FDataStream.Position := 0; FFTPList.Lines.LoadFromStream(FDataStream); for x:= 0 to FFTPList.Lines.Count - 1 do begin s:= 1; start := False; flr := TFTPListRecEx.Create; v:= FFTPList.Lines[x]; flr.OriginalLine:= v; // DoStatus(True, v); for y:= 1 to Length(v) do begin if (not start) and (v[y] = '=') then begin option:= LowerCase(Copy(v, s, y - s)); start := True; s:= y + 1; end else if v[y] = ';' then begin value:= LowerCase(Copy(v, s, y - s)); if (option = 'type') then begin // Skip 'cdir' entry if (value = 'cdir') then begin FreeAndNil(flr); Break; end; // Parent directory entry pcdir := (value = 'pdir'); if pcdir then begin // Skip duplicate 'pdir' entry if pdir then begin FreeAndNil(flr); Break; end; pdir := True; end; flr.Directory:= (value = 'os.unix=symlink'); if flr.Directory then flr.Mode := flr.Mode or S_IFLNK else begin flr.Directory := pcdir or (value = 'dir'); end; end else if (option = 'modify') then begin flr.FileTime:= DecodeMachineTime(value); end else if (option = 'size') then begin flr.FileSize:= StrToInt64Def(value, 0); end else if (option = 'unix.mode') then begin flr.Mode:= flr.Mode or OctToDec(value); end; if (y < Length(v)) and (v[y + 1] = ' ') then begin if (flr.Directory and pcdir) then flr.FileName:= '..' else flr.FileName:= SeparateLeft(Copy(v, y + 2, MaxInt), ' -> '); Break; end; start := False; s:= y + 1; end; end; if Assigned(flr) then FFTPList.List.Add(flr); end; end; FDataStream.Position := 0; end; procedure TFTPSendEx.DoStatus(Response: Boolean; const Value: string); var Index: Integer; Message: UnicodeString; begin Index:= Pos('PASS ', Value); if Index = 0 then Message:= ServerToClient(Value) else begin Message:= ServerToClient(Copy(Value, 1, Index + 4)) + '********'; end; LogProc(PluginNumber, msgtype_details, PWideChar(Message)); if FSock.LastError <> 0 then begin Message:= UTF8ToUTF16(CeSysToUtf8(FSock.LastErrorDesc)); LogProc(PluginNumber, msgtype_importanterror, PWideChar('CSOCK ERROR ' + Message)); end; end; procedure TFTPSendEx.OnSocketStatus(Sender: TObject; Reason: THookSocketReason; const Value: String); var MsgType: Integer; begin if (Reason in [HR_ResolvingBegin, HR_ResolvingEnd, HR_Error]) then begin if (Length(Value) > 0) then begin if Reason = HR_Error then MsgType:= msgtype_importanterror else begin MsgType:= msgtype_details; end; LogProc(PluginNumber, MsgType, PWideChar(ServerToClient(Value))); end; end; end; function TFTPSendEx.ClientToServer(const Value: AnsiString): AnsiString; begin Result:= ConvertFromUtf8(Value); end; function TFTPSendEx.ClientToServer(const Value: UnicodeString): AnsiString; begin Result:= ConvertFromUtf8(UTF16ToUTF8(Value)); end; function TFTPSendEx.ServerToClient(const Value: AnsiString): UnicodeString; begin Result:= UTF8ToUTF16(ConvertToUtf8(Value)); end; function TFTPSendEx.FsFindFirstW(const Path: String; var FindData: TWin32FindDataW): Pointer; begin Result:= nil; // Get directory listing if List(Path, False) then begin if FtpList.Count > 0 then begin // Save file list Result:= TFTPListEx.Create; TFTPListEx(Result).Assign(FtpList); FsFindNextW(Result, FindData); end; end; end; function TFTPSendEx.FsFindNextW(Handle: Pointer; var FindData: TWin32FindDataW): BOOL; var I: Integer; FtpList: TFTPListEx absolute Handle; begin Result := False; if Assigned(FtpList) then begin I := FtpList.FIndex; if I < FtpList.Count then begin FillChar(FindData, SizeOf(FindData), 0); StrPCopy(FindData.cFileName, ServerToClient(FtpList.Items[I].FileName)); FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_UNIX_MODE; if TFTPListEx(FtpList).Items[I].Directory then FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_DIRECTORY else begin FindData.nFileSizeLow := (FtpList.Items[I].FileSize and MAXDWORD); FindData.nFileSizeHigh := (FtpList.Items[I].FileSize shr $20); end; // set Unix permissions FindData.dwReserved0 := TFTPListRecEx(FtpList.Items[I]).Mode; FindData.ftLastWriteTime := TWfxFileTime(DateTimeToWinFileTime(FtpList.Items[I].FileTime)); Inc(FtpList.FIndex); Result := True; end; end; end; function TFTPSendEx.FsFindClose(Handle: Pointer): Integer; begin Result:= 0; FreeAndNil(TFTPListEx(Handle)); end; constructor TFTPSendEx.Create(const Encoding: String); begin inherited Create; FTimeout:= 15000; FDirectFile:= True; ConvertToUtf8:= @CeSysToUtf8; ConvertFromUtf8:= @Utf8ToSys; Sock.OnStatus:= OnSocketStatus; FEncoding:= NormalizeEncoding(Encoding); FAuto:= (FEncoding = '') or (FEncoding = 'auto'); if not FAuto then SetEncoding(FEncoding); FFtpList.Free; FFtpList:= TFTPListEx.Create; // Move mostly used UNIX format to first FFtpList.Masks.Exchange(0, 2); // Windows CE 5.1 (insert before BullGCOS7) FFtpList.Masks.Insert(35, 'MM DD YY hh mm !S* n*'); FFtpList.Masks.Insert(36, 'MM DD YY hh mm $ d!n*'); end; function TFTPSendEx.Login: Boolean; var Index: Integer; Client: Boolean = False; begin Result:= inherited Login; if Result then begin if IsTLS and Sock.SSL.SSLEnabled then begin LogProc(PluginNumber, msgtype_details, PWideChar('TLS Library ' + UTF8ToUTF16(FSock.SSL.LibVersion))); LogProc(PluginNumber, msgtype_details, PWideChar('TLS Protocol ' + UTF8ToUTF16(FSock.SSL.GetSSLVersion))); LogProc(PluginNumber, msgtype_details, PWideChar('TLS Cipher ' + UTF8ToUTF16(FSock.SSL.GetCipherName))); end; if (FTPCommand('FEAT') div 100) = 2 then begin for Index:= 0 to FFullResult.Count - 1 do begin if not Client then Client := Pos('CLNT', FFullResult[Index]) > 0; if not FMachine then FMachine:= Pos('MLST', FFullResult[Index]) > 0; if not FMachine then FMachine:= Pos('MLSD', FFullResult[Index]) > 0; if not FUnicode then FUnicode:= Pos('UTF8', FFullResult[Index]) > 0; if not FSetTime then FSetTime:= Pos('MFMT', FFullResult[Index]) > 0; end; // Some servers refuse to enable UTF-8 if client does not send CLNT command if Client then begin FTPCommand('CLNT Double Commander (UTF-8)'); end; if FUnicode and FAuto then begin ConvertToUtf8:= @Dummy; ConvertFromUtf8:= @Ymmud; FTPCommand('OPTS UTF8 ON'); end; end; if (not FMachine) and FShowHidden then begin if inherited List('-la', False) then FShowHiddenText:= '-la' else begin DoStatus(False, 'Server does not seem to support LIST -a'); end; end; end; end; function TFTPSendEx.Clone: TFTPSendEx; begin Result:= TFTPSendExClass(ClassType).Create(FEncoding); CloneTo(Result); end; procedure TFTPSendEx.CloneTo(AValue: TFTPSendEx); begin AValue.TargetHost := TargetHost; AValue.TargetPort:= TargetPort; AValue.PassiveMode:= PassiveMode; AValue.AutoTLS:= AutoTLS; AValue.FullSSL:= FullSSL; AValue.UseAllocate:= FUseAllocate; AValue.UserName:= UserName; AValue.Password:= Password; AValue.KeepAliveTransfer:= KeepAliveTransfer; AValue.PublicKey:= FPublicKey; AValue.PrivateKey:= FPrivateKey; AValue.ShowHidden:= FShowHidden; AValue.TcpKeepAlive:= FTcpKeepAlive; AValue.Sock.HTTPTunnelIP:= Sock.HTTPTunnelIP; AValue.Sock.HTTPTunnelPort:= Sock.HTTPTunnelPort; AValue.Sock.HTTPTunnelUser:= Sock.HTTPTunnelUser; AValue.Sock.HTTPTunnelPass:= Sock.HTTPTunnelPass; AValue.Sock.SocksIP:= Sock.SocksIP; AValue.Sock.SocksType:= Sock.SocksType; AValue.Sock.SocksPort:= Sock.SocksPort; AValue.Sock.SocksUsername:= Sock.SocksUsername; AValue.Sock.SocksPassword:= Sock.SocksPassword; AValue.DSock.HTTPTunnelIP:= DSock.HTTPTunnelIP; AValue.DSock.HTTPTunnelPort:= DSock.HTTPTunnelPort; AValue.DSock.HTTPTunnelUser:= DSock.HTTPTunnelUser; AValue.DSock.HTTPTunnelPass:= DSock.HTTPTunnelPass; AValue.DSock.SocksIP:= DSock.SocksIP; AValue.DSock.SocksType:= DSock.SocksType; AValue.DSock.SocksPort:= DSock.SocksPort; AValue.DSock.SocksUsername:= DSock.SocksUsername; AValue.DSock.SocksPassword:= DSock.SocksPassword; end; procedure TFTPSendEx.ParseRemote(Value: string); var RemoteIP: String; begin inherited ParseRemote(Value); RemoteIP:= FSock.GetRemoteSinIP; if FDataIP = '0.0.0.0' then FDataIP:= RemoteIP else if IsIpPrivate(FDataIP) and (IsIpPrivate(RemoteIP) = False) then begin FDataIP:= RemoteIP; DoStatus(False, 'Server reports local IP -> Redirect to: ' + FDataIP); end; end; function TFTPSendEx.FileExists(const FileName: String): Boolean; begin Result:= (Self.FileSize(FileName) >= 0); end; function TFTPSendEx.CreateDir(const Directory: string): Boolean; var sOldPath: AnsiString; begin sOldPath := GetCurrentDir; if ChangeWorkingDir(Directory) then Result := ChangeWorkingDir(sOldPath) else begin Result := inherited CreateDir(Directory); end; end; function TFTPSendEx.ExecuteCommand(const Command, Directory: String): Boolean; begin Result:= (FTPCommand(Command) div 100) = 2; end; function TFTPSendEx.FileProperties(const FileName: String): Boolean; begin Result:= (FTPCommand('STAT' + #32 + FileName) div 100) = 2; end; function TFTPSendEx.CopyFile(const OldName, NewName: String): Boolean; begin Result:= False; end; function TFTPSendEx.ChangeMode(const FileName, Mode: String): Boolean; begin Result:= (FTPCommand('SITE CHMOD' + #32 + Mode + #32 + FileName) div 100) = 2; end; function TFTPSendEx.List(Directory: String; NameList: Boolean): Boolean; var Message: UnicodeString; begin Result:= ChangeWorkingDir(Directory); if Result then begin if FMachine then Result:= ListMachine(EmptyStr) else begin Result:= inherited List(FShowHiddenText, NameList); end; if (Result = False) and (FSock.WaitingData > 0) then begin Message:= UnicodeString(FSock.RecvPacket(1000)); LogProc(PluginNumber, msgtype_importanterror, PWideChar(Message)); end; FTPCommand('TYPE I'); end; end; function TFTPSendEx.FsSetTime(const FileName: String; LastAccessTime, LastWriteTime: PWfxFileTime): BOOL; var Time: String; begin if not FSetTime then Exit(False); if (LastWriteTime = nil) then Exit(False); Time:= FormatMachineTime(LastWriteTime^); Result:= FTPCommand('MFMT ' + Time + ' ' + FileName) = 213; end; function TFTPSendEx.StoreFile(const FileName: string; Restore: Boolean): Boolean; var StorSize: Int64; RestoreAt: Int64 = 0; SendStream: TProgressStream; begin Result := False; Restore := Restore and FCanResume; if Restore then begin RestoreAt := Self.FileSize(FileName); if RestoreAt < 0 then RestoreAt := 0; end; SendStream := TProgressStream.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite); SendStream.FtpSend:= Self; SendStream.PluginNumber:= PluginNumber; SendStream.ProgressProc:= ProgressProc; SendStream.TargetName:= PWideChar(ServerToClient(FileName)); SendStream.SourceName:= PWideChar(CeUtf8ToUtf16(FDirectFileName)); try if not DataSocket then Exit; FTPCommand('TYPE I'); StorSize := SendStream.Size; if not FCanResume then RestoreAt := 0; if RestoreAt > StorSize then RestoreAt := 0; if (StorSize > 0) and (RestoreAt = StorSize) then begin Result := True; Exit; end; SendStream.FileSize := StorSize; SendStream.DoneSize := RestoreAt; if FUseAllocate then FTPCommand('ALLO ' + IntToStr(StorSize - RestoreAt)); if FCanResume then begin if (FTPCommand('REST ' + IntToStr(RestoreAt)) div 100) <> 3 then Exit; end; SendStream.Position := RestoreAt; if (FTPCommand('STOR ' + FileName) div 100) <> 1 then Exit; Result := DataWrite(SendStream); finally SendStream.Free; end; end; function TFTPSendEx.RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; var RetrStream: TProgressStream; begin Result := False; if not DataSocket then Exit; Restore := Restore and FCanResume; if Restore and mbFileExists(FDirectFileName) then RetrStream := TProgressStream.Create(FDirectFileName, fmOpenWrite or fmShareExclusive) else begin RetrStream := TProgressStream.Create(FDirectFileName, fmCreate or fmShareDenyWrite) end; RetrStream.FtpSend := Self; RetrStream.FileSize := FileSize; RetrStream.PluginNumber := PluginNumber; RetrStream.ProgressProc := ProgressProc; RetrStream.SourceName := PWideChar(ServerToClient(FileName)); RetrStream.TargetName := PWideChar(CeUtf8ToUtf16(FDirectFileName)); try FTPCommand('TYPE I'); if Restore then begin RetrStream.DoneSize := RetrStream.Size; RetrStream.Position := RetrStream.DoneSize; if (FTPCommand('REST ' + IntToStr(RetrStream.DoneSize)) div 100) <> 3 then Exit; end; if (FTPCommand('RETR ' + FileName) div 100) <> 1 then Exit; Result := DataRead(RetrStream); finally RetrStream.Free; end; end; function TFTPSendEx.NetworkError(): Boolean; begin Result := FSock.CanRead(0); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftp.lpi��������������������������������������������������������0000644�0001750�0000144�00000012701�15104114162�017732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <SaveOnlyProjectUnits Value="True"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <UseAppBundle Value="False"/> <Icon Value="0"/> </General> <i18n> <EnableI18N Value="True"/> <OutDir Value="..\language"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="3"/> <RevisionNr Value="5"/> <StringTable FileDescription="FTP WFX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2024 Alexander Koblov"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\ftp.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk;..\synapse"/> <OtherUnitFiles Value="..\synapse;..\..\..\..\sdk;sftp"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'darwin') and (TargetCPU = 'aarch64') then begin LinkerOptions += ' -rpath /opt/homebrew/lib'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <RequiredPackages Count="2"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> <Item2> <PackageName Value="LazUtils"/> </Item2> </RequiredPackages> <Units Count="6"> <Unit0> <Filename Value="ftp.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="ftputils.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="FtpUtils"/> </Unit1> <Unit2> <Filename Value="FtpConfDlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="DialogBox"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit2> <Unit3> <Filename Value="ftpfunc.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="FtpFunc"/> </Unit3> <Unit4> <Filename Value="ftpadv.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="FtpAdv"/> </Unit4> <Unit5> <Filename Value="sftp\sftpsend.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="SftpSend"/> </Unit5> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\ftp.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk;..\synapse"/> <OtherUnitFiles Value="..\synapse;..\..\..\..\sdk;sftp"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end; if (TargetOS = 'darwin') and (TargetCPU = 'aarch64') then begin LinkerOptions += ' -rpath /opt/homebrew/lib'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> </CONFIG> ���������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftp.ico��������������������������������������������������������0000644�0001750�0000144�00000474106�15104114162�017733� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �(����``��� ����HH��� �T��V�@@��� �(B���00��� �%��4� ��� ���Y���� � ��Vj���� �h��s�(���������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���'���'���&���&���%���%���$���#���#���"���"���!���!��� ��� ��������������������������������������������������������������������������������������������������� ��� ��� ��� ��� ��� ��� ��� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hدد֮ծӭҮѭЭϭάͭˬʪɪɫǪƫũĩé|zxutro|||mwwwkyyyisssfssscnnn_dddVOOOJ000= 2���.���.���.���-���)���&���"����������������������������������������������������������������������������������������������������������������������������������������������������������������欬ͣ|||m���2���2���2���2���)����������������������������������������������������������������������������������������������������������������������������������������������΄w���2���2���2���2���)����������������������������������������������������������������������������������������������������������������������������������� 4���2���2���2�������������������������������������������������������������������������������������������������������������������������������ggg]���2���2���2���������������������������������������������������������������������������������������������������������������������������rrrd���2���2���-�����������������������������������������������������������������������������������������������������������������������~!!!<���2���2�����������������������������������������������������������������������������������������������������������������������|���2���2���-�������������������������������������������������������������������������������������������������������������������z!!!<���2���2�������������������������������������������������������������������������������������������������������������������u���2���2�������������������������������������������������������������������������������������������������������������������s!!!<���2��� ����������������������������������������������������������������������������������������������������������������p���2���'����������������������������������������������������������������������������������������������������������������l���2���.����������������������������������������������������������������������������������������������������������������i���2���2���������������������������������������������������������������������������������������������������������������e���2���2����������������������������������������������������������������������������������������������������������������b^^^W���1����������������������������������������������������������������������������������������������������������������^||otcmY|fPx`GsX;tY:w^CzcK}iTn[vgt���0����������������������������������������������������������������������������������������������������������������\ugu^DmO0|_CqUgnv{}ysgmSw]BzhTx���/����������������������������������������������������������������������������������������������������������������Wo^rX<qQ1jM|csxyzwtqqrsuz{~eeKvbLym���.����������������������������������������������������������������������������������������������������������������SwbLmM+xZ:tWqrrqok}ijkmmnoqqu{sYpW9uh���-����������������������������������������������������������������������������������������������������������������Q{iVmN-{]<|_lkheybxbyczd{e}f}ghijllnyzbv]C|q���-����������������������������������������������������������������������������������������������������������������Oq`nP/sR0tQfxau`v`v`v`v_w`w_y`yazc}d}e~f~fhit|}}}~{qWs\E|���,����������������������������������������������������������������������������������������������������������������}}}IpT7pO-bAdv^s]t]t]u]u]v]w^w]w]w]y^y_{`{`}b~cftz{{||}}~}~~~}~~oz`DzjX���+����������������������������������������������������������������������������������������������������������������}}}EzoP0rQ.lLix]r[rZs[u[u[u[u[v[v[w[wZwZxZy]y]{^gvxyyzzzz{||||{||||xqWzeO���*����������������������������������������������������������������������������������������������������������������|||CxinN,tS/nNhgpYqXrYrXtYuXuYuXvYvXvXwYwXwXwXyZiuuwwxwxzzzzzzzzzzzzzww]{cK���)����������������������������������������������������������������������������������������������������������������xxxAkWpO-vT/pPfhcqWpVrVsVsVtVuVvWvVvVvUvUuTvTwTfœoœqÜqÝrÞtÞtßvğvßwwxxxxxxxvlwwxux_}dJ���(����������������������������������������������������������������������������������������������������������������ttt;yaHpP-wT0lJefgiiiiigfcba`^`behÚjÚkÛkÛmĜnĜoĝpĝqĝrĞtÞtÞužwwvwwvk{brvvtrv\gM���(����������������������������������������������������������������������������������������������������������������jjj7oZpP-wU0a<adfgiiklmllk™kÚjÚjějĚiśiĚhĚhĚhĚhęhŚhěiějěkĝmŝnŝoĝqÝqÝsÝsvuutshptssqktZjP���'����������������������������������������������������������������������������������������������������������������hhh4wpP-wU0[4{Ybcefhikjji™iÙhÙhĚhŚgŚgśfƛeƚeƛeŚdŚdŚdŚcƚeŚfƛgśhśiŜjĜlělěoĜpœpœrssrrrrpppo}csYlS���'����������������������������������������������������������������������������������������������������������������ccc2oO,wT0Z3oK_acefhhhhfØfØeęeŚeŚdƚcǛcǚbǚbǛbǛbǛbǚaǚaǚ`ǚ`řařaZU`ƛgŜiśiěkěmÛnšoib`gnonnllw[sXs^���&����������������������������������������������������������������������������������������������������������������```.qR3vS/}Y2`6~[_`cefeee—d—cØcŘbřbƚbǚaȚaț`ț_ɛ_ɛ_ɚ^ɚ^Ț]Ț]Ț\Ț\ř[KmCmDoFMZĚeŚgÚhdYsRsStTtUZikkkj}auYqWn���%����������������������������������������������������������������������������������������������������������������III)y]AtR.|X2^5nE\_`bcccb•a–aė`Ř_Ƙ_Ǚ_Ț_Ț]ɛ]ʚ\ʛ\˛\˛\ʛ[ʛ[ʛ[ʛZʛZʙYPi<j>j?kAlBmDuFMPpJpKpLrOqOrQqQXjihgevXsWoU���%����������������������������������������������������������������������������������������������������������������LLL'qP-zV1]5c8{S[^_a``__–_Ė]Ƙ]Ƙ\ș\ɚ[ɚ[ʚZ˛Z̜Z̛Y̜Z˜Z̜Z̛Y̛Y̛X̛X˚WEh9g9h;i<j=j>k@kAkBlCmGmGnInJoLpNnO_gfedz\tWqWfM���$����������������������������������������������������������������������������������������������������������������999"qR2wT0[3a7j>Y[]_^]]]•[Ė[ŖZǘYȘYʙYʚY˚X˛Y̛X̜Y̜Y̜Y̜X̝Y̜Y͜Y̜X̛W̛Wn9g7e6e5e6f8f9g:h;i>i?j@jBkDlFkGlHmJrMddba~]vWsVoU|���$����������������������������������������������������������������������������������������������������������������/// vsR.}Y2_6f:qDX[\\ZZZ“YĕXƕXǗWȘVʙVʙV˚W̚W̛X͜X͜X̜X͝Y͝Y͝X͝X͜W͜W͜W͜Wu9d5c3c3c2c3d4e6e7f8f:f;g=g>h@iBiDiDiF`a`^]xWtVpTjR���#����������������������������������������������������������������������������������������������������������������nN-yV0]5c8j<xIWZYXXW“WēVƕUǕTɗTʘS˙T˚ƯV̛W͜W͜WΝXΞYΝXΝXΞXΞXΝWΝWΜVΜVAb2b2a0a0`/a0`1a2c3c5c6d7f:e;e=e>fAgA[_]\[zWvVrUnSp���#�������������������������������������������������������������������������������������������������������������������zctR.~Y3a7h;o?|LXWWUUTÓTœRǕRɖQʗR˙S̚T̛ƯU͜VΝWΝWϞXϞXϟXϟXϞWϞWϞWϞWϞWΝVJa0`/_._.],],^+_-_/`.a1a2b3b5c7b9c;i@[]\ZY{WwUsUoS|cH���"�������������������������������������������������������������������������������������������������������������������nN,yV0]5e9l=sAOUTSRQ‘QœPǔPȕOɗQʗQ˙S̚S͜U͜UΝVΞWϞWϞWПXПXПWѠXПWПWПWϞVϞUϞUA`-],],\+\*\*[)\*],x3=~8`0_1_3`6r=XZ[ZX}VxUtToRlQqZ���"�������������������������������������������������������������������������������������������������������������������zsQ.~Y3a7i;p?wDMRPPOOđNƓMȕNɕNʗP˙Q̙R͛SΜTΝTΝUϞVПWРXѠWѡXѠWѠWѠWѠWПVПVПVОTϞTěOEG:\)Y&Y&X%w1ȓJǒIǒJH;_1_3z?VXZZXVzTvSqRlPtY>���!�������������������������������������������������������������������������������������������������������������������x\>wU0]5e9m=tB{FKNNLLÐKőKǓKɕMɖNʗO̙Q͛RΜSϜSϞUПVѠWПVѠWѡWҡWҢXҢWҢWҡWҡWҡVҠUѠUџTОSОSϝRΜQCa*Z'Y&9ɔJȓIǒIǒJJt5_1?TUXZXV{UwSrQmPgK���!�������������������������������������������������������������������������������������������������������������������pO-|X2`6h;p?xD}FHKJIHďHƒIȔKɕL˗N̙O͚P͛QΜRϞTПUѠVҠVҡWӢWӢWӣXԣXԣXԣXԣXԣXԣXӣXӢWӡVҡVҠUџTОSϝRIl.Z':ʕJɔJȔJǒIǒJGc0@RTVXXV|TxSsQnNhMt_��� �������������������������������������������������������������������������������������������������������������������tR.[3c8l=tB|FFEHGFÍEŏEǒHȔJʖL˗M͙OΛPϜQОSџTҠUӡVӢWԣXԤYեZեZ֦[֦[֦[֦[֦[֦[եZեZԤYԣXӢWӡVҠUџTОSǚN<J˗LʖKɕKȓIǒIƑIEGORTVXV~TyRsOnNiLlQ4��� �������������������������������������������������������������������������������������������������������������������eIwU0^5f:o?wD}FFEED‹CŎCǐEȓHʕJ˗L͙NΛPϝRџTҠUӡVӣXԤYեZ֦[֧\ק\ר]ר]ب]ب]ب]ר]ר]ק\ק\֦[֦[եZԤYӢWҡVҠUОSϝRΛP͙N̗LʖKɔJȓIǒIőIKNORTVVTzRtPoMiKpT8����������������������������������������������������������������������������������������������������������������������nN,{W1`6k5cu,Ty&^|*5CDCčCƐEȒGʕJ˗L͙NΛPНRџTҡVӢWԤYեZ֦[ק\ب]ة^٪_٪_٪_٫`٫`٫`٫`٪_٪_ة^ة^ר]ק\֦[եZԤYӢWҡVџTНRΛP͙N̗LʕJȓIǒHƑHĐIKMPRTVSzQtNoMiJvZ=l����������������������������������������������������������������������������������������������������������������������qP-~Y3tf0Fs!Iw"Nz$P|$Q}$z/DŒCŏDǑFɔI˗L͙NΛPОSџTӡVԣXեZ֦[ק\ة^٪_٫`ڬaڬaۭbۭbۭbѫ_Fj3g3c1|;ש^٪_ة^ب]ק\֦[դYԣXҡVџTОSΛP͙N˗LʕJȒHƑGŏGÏILMOSTS|PvMoKiIz^AmS9����������������������������������������������������������������������������������������������������������������������sR.\3Fo Fu!Kx#N{$P|$R}$T#8čCǐEɓHʖK̙NΛPНRџTӢWԤYեZק\ة^٪_ګ`ڬaۭbܮcܯdܯdܯdMh4a1a1a0`0`0Mۭbڬa٫`ة^ר]֧\եZԣXӡVџTНRΛP͙N˖KɔIǑGŐFĎGHLNOSR|OvMoKiH{^?aE(����������������������������������������������������������������������������������������������������������������������yvS/u_0BrGv"Ly$O{$Q}$R~#T#e'ŽBȒGʕJ̘MΚOϝRџTӢWԤY֦[ר]ة^٫`ڬaۮcܯdݰeݱfޱfڱeDa2a2a2a2a2e3Eʫ\ܯdܮcۭbڬa٪_ة^ק\եZԣXӡVџTϝRΛP̘MʖKȓHƐFĎEGILNPR}OvLoIiF|^?cF'����������������������������������������������������������������������������������������������������������������������{ewU0}a3Cr Hv"Nz$P|$Q}$S#U#V#7ɔI˗L͙NϜQџTҡVԤY֦[ר]٪_ڬaۭbܯdݰeޱf޲g߳hֱe?b3b3d4COYرe߳h߲g޲gݱfܯdۮcڬa٫`ة^ק\եZԣXҡVџTϜQ͚O˗LɔIǒGŏDEHILOP}NvKpIhF{]<dG(����������������������������������������������������������������������������������������������������������������������kPyV1`5Ds Iw"Nz$P|$R}$T#V#W#1ʕJ̘MΛPОSҡVԣX֦[ר]٪_ڬaۮcݯdޱf߲gߴijаcv<c4c4r:Ҳdlllkkji߳h޲gݰeܯdۭbګ`ة^ק\եZԣXҡVОSΛP̙NʖKȓHƐEčCEGJMN~NvJoFhC|\;eH(û����������������������������������������������������������������������������������������������������������������������vZ<zW1b6Dt Jx#N{$P}$R~#T#V#W$3˗L͚OϝRѠUӢWեZר]٪_ڬaܮcݰe޲g߳hjkǯ`o9c4c4c5Tooonnmlkji߲gޱfܯdۭbګ`ة^ק\եZӢWѠUϝR͚O˗LɔIǑFŎCCFHJM}LuHoFhCz[9fH)����������������������������������������������������������������������������������������������������������������������kL,{W1c7Et!Kx#O{$Q}$S~#U#V#X$7̘MΛPОSӡVդYק\ت_ڬaܮcݰe߲giklմgl8c5d5d6d6Orqqqpoonlkj߳hޱfܯdۭb٫`ة^֦[ԤYҡVОSΜQ̙NʖKȒGƏDŒCDFHK~KuHnCf@yX6fH)����������������������������������������������������������������������������������������������������������������������kL+|X2c7Ft!Ly$O{$Q}$S#U#W#X$C͙NϝRҠUԣX֦[ة^ڬaܮcݰe߲gikmmEd6d6e6e7e7Iuuutsrqpomlj߳hޱfܯdۭb٪_ר]եZӣXѠUϝR͚O˗LɓHƐEÍCDDGC|=u?mCe?vV3fH)}����������������������������������������������������������������������������������������������������������������������mO/{W1c7Fu!Ly$P|$R}$T#V#W#h*˗LΛPОSӡVեZר]٫`ۭbݰe߲gjlnoWd6e7e8e8e8e9yCyyyxwvtrqonlj߳hޱfܯdڬaت_ק\ԤYҡVОSΛP̘MɔIǑFčCCD4Q|&P{(Lx(qp5c<tR.eH(����������������������������������������������������������������������������������������������������������������������z_BzW1d6Fu!My$P|$R}$T#V#W$6̘MϜQџTԣX֦[ة^ڬaܯd޲gilnprDe8e8e9e:f:f:i=}~}|{zxvtrpnlj߳hݰeۮc٫`ب]եZӢWџTϜQ̙NʕJǒGŎCC>S}$P|$N{%Ix%Gu%zc6sR.eG(����������������������������������������������������������������������������������������������������������������������oWzV1c6Fu!My$P|$R}$T#V#X$C͙NϝRҡVԤYר]٫`ۮcޱfiknprtk<e9f:f;f<f<f=f=yƂŁŀ~|zwurpnli޲gܯdۭbت_֧\ԤYҠUϝR͙NʖKȒGŎCC5Q}$P|$Mz$Hv#Cs"^g*rQ.cF'����������������������������������������������������������������������������������������������������������������������jxU0b5Et!Ly$P|$R}$T#V#i*ʖK͚OОSӢWեZة^ڬaݯd߲gkmpruӹne:f;f<f=f=f>f>f>ùpȆȆDžƃƂŀ~{xurpnkߴiݱfۮc٫`ר]եZҡVОS͚O˖KȓHƏD‹C;R}$P|$Mz$Gu!Br Qh%pP-aE'����������������������������������������������������������������������������������������������������������������������}vS/`4Et!Ly$P|$R}$T#V#b'ʕJΚOџTӢW֦[٪_ۮcޱfiloruyef;f=f=f>f?f?g@g@ZʊʊɉɇȆDŽŁ|yuromj޲gܯdڬaة^֦[ӢWОSΛP˗LɓHƏD‹CCU}%P|$Ly$Fu!@pMg#nN,_C&����������������������������������������������������������������������������������������������������������������������sQ.^5Hs"Kx#P|$R}$T#V#X$EΛPџTԣXק\ګ`ܯd߲gknqty|_f=f>f?g@gAgAgAgBkDȉ̎ˍˌʊɈDžƃ|xtqnkߴiݰeۭb٪_֦[ӣXџTΛP˗LɓHƏD‹CDR|$O{$Ly$Et!?p\a(kL+_D)����������������������������������������������������������������������������������������������������������������������nN,\4Pq$Jx#O{$R}$T#V#X$:ΛPѠUԤYר]ڬaݰeߴilorw|ŀĹnf?f@gAgBgBgCgChChCfΒΑ͐̎ˌɉȆƃ{wspmjޱfܮc٫`ק\ԣXџTΜQ̗LɓHƏD‹CBQ}$O{$Kx#Dt >omX,hJ)oYC����������������������������������������������������������������������������������������������������������������������kM,}Y2Xn'Iw"O{$Q}$T#V#X$u0ΜQҠUեZة^ۭbޱfjmquzƃŃhAgAgBgChDhEhEhEhEhEnЕϓΒ͏ˍʊȆƂ~zuqnk߲gܯdګ`ר]ԤYѠUϜQ̘MɓHƏDC<Q}$O{$Jx#Cs Hk!tS/dG(}����������������������������������������������������������������������������������������������������������������������r[xU0`j*Gv"Nz$Q}$T#V#X$['ǛNҠUեZة^ۮc޲gkorx}ƂȆʋdgChDhEhFhFhGhGhGhGhGnΕЖϓ͐ˍɉDžŁ|wrol߳hݰeڬaר]ԤYѠUϜQ̗LȓHŏDC}1P}$Nz$Iv"Brgb+pP-_C&ý����������������������������������������������������������������������������������������������������������������������sQ.pd/Eu!Mz$P|$S$V#X$Y&CҠUեZت_ܮc߲glptzĀDžʊ̎͑\hFhGhHhHhIhIhIhIhIhHyR̐Зϓ͐ˌɈƃytpliݰeڬaר]ԤYѠUΜQ˗LȓHŎC@Z~&P|$Nz$Gu"[l(|X2kL+dL2����������������������������������������������������������������������������������������������������������������������kL+[3Jr#Ly$P|$R~$U#W$Y&8ѠUեZ٪_ܮc߳hlpv|ƂɇˍΑЕΓuOhIhIiJiKiKiKiKiJiIhI_Қїϓ͏ʋȆŁ{vqmiݰeڬaר]ԤYѠUΛP˗LȒGAh)R~$P|$Ly$Qs%`4wT0eH(|l����������������������������������������������������������������������������������������������������������������������~fMyV0bl*Iw"O|$R~$U#W$Y&f,ϞSդYت_ܯd߳hmqw~DŽʊ͐ϔҙԝÃiJiKiLiLiMiMiLiLiKiJhI̒ҚЖΒ̍Ɉƃ}wqnjݱfڬaר]ԤYџT̙NB6j)T$Q}$O{$Uw'j6\4pP-^C%����������������������������������������������������������������������������������������������������������������������pP-xb1Fu!N{$Q}$T$W#Y%Z(DԤYة^ܮc߳hmrxĀȆˌΒїӜ֠ЙiLiMjNjNjNjNjNjNiMiLiKwԝҙϔ͏ʊDŽ~xrnjݰeڬaק\ԣXОSĘLY&W$U#S~$P}$f{-q=d8{W1iJ*YA&����������������������������������������������������������������������������������������������������������������������jM.|X2Zo(Kx$P|$S~$W$]+_-s6Ԥ[٪a۰gߵlpu|Ƃʊ͐ϖқՠץԠlPlPkQkRkRkRkQkPkOkOiLZ֠ӜЗΑˌȆyrniݰeڬa֧\ӢWНR̘Mr-W#U#U~%}~3yCl=_5sQ.aD&}n����������������������������������������������������������������������������������������������������������������������rQ.{c2Hu"N{$R~$Y(a1c3e6S٬eݱkotyĀȇˏϕҜ֡ئګتqWpWpXqYqYpXpXoWoVoUoTnRњաӜЖ̐ɉƃ|uqlܰg٬c֧^ҢYϝT˘NƒH::A~FsAf9}Y2jK*\C*����������������������������������������������������������������������������������������������������������������������oS6}Y2gn,Ly$P|$[/f7h9i<{CӬgݳosx}ƄʋΓҚԠإ۫ݰМu]v^v_v_v`u`u_u^t]s[sZsXÇץԠҚϔˎȇxupݲk٭fרaӣ\ϟW̙RȕMÐKLFzEm=_6sQ.`D&����������������������������������������������������������������������������������������������������������������������pP-`5]t*O{$`6j>l?mBnCRݴrw|ÀLJˏЗӝפڪݰۭuzdzezfzgzfzfzfzeycybxax_t٪פԞИ̑ɊŃ}xt޴oگj֪eӥ`Р[̛VȕQÑRS~FsAe9{W1hJ)aJ2����������������������������������������������������������������������������������������������������������������������rZ@yV1g7\x*`8mFqErGtHtKczĄȊ̒Кՠبԣŋpijlmnmm~m~l~j~i~g}e}dНبբҚΔˍƆ|w޴rڰm׫iӦcС_̜YǗWXYyDk<]5pO-\A$���������������������������������������������������������������������������������������������������������������������� jK*\4m=EsMuLvLwNUiߺ|㿁ćɌ͓ќ̕yiknopsttttsrqomlhrة֤ҞϖːLjÃzݵuڰp֬kӦfϢb̝]Ƙ^_[p?b7vT/bF'dO:���������������������������������������������������������������������������������������������������������������������� ubpP-a7{Mke_e֯t۵zߺ㿄ĉɎ͔xilnqsvwyz{{{zywutqnl†اӟϙ̑ȋÆ㿁}ݵwٰs֬nӧiϢdʞcřeeWf:|X2hJ)W>%Ŀ���������������������������������������������������������������������������������������������������������������������� v_GvS/h<pƠsͥrөqׯwڵ|޺⿆Ëɐʼnjmqsvy|}~}{yvtpnuÇÅż|vpjc^[WWaÙkjvL[4mM+X>#���������������������������������������������������������������������������������������������������������������������� kQ5zV1\ßyʤxЩwծxڳ}ݹᾈÍȑɐorux{~~{xvsoligdca_\[Y~W{W`qg_6pO-[@$s���������������������������������������������������������������������������������������������������������������������� ĿfH+`;xǥͩ~Ӯ}سܸ߽Žǒ̗{vx|ŒÎŒ}zxspnljhfdb`^_bsquPrQ.]B%scR���������������������������������������������������������������������������������������������������������������������� dF(|^ʩЭղڶݼœʘɕz|ŒďőƓƔƓŒÏ~{xusqomkigefk{xluU2^B%_L9���������������������������������������������������������������������������������������������������������������������� dH*p̬ұ׵ܺ߾ÓȘ̝ČŒďŒǕȘɚəǕƒĐÍ{ywvsqpolmuƧ}v{]<\A%[H5��� ������������������������������������������������������������������������������������������������������������������� jQ5}̮ӴظݼŘɜ͞ÎĐƔȖɚʛʚȘǕŒÏŒ~{zxwtsuɩ}gJY?#l\L��� ������������������������������������������������������������������������������������������������������������������� t`JʯӶغݾ—ƛʟɚŒÎőƓǕȘəȘȗǕƓĐΌ~}{zͱɬmRS:!vj��� ������������������������������������������������������������������������������������������������������������������� udRyǯӸؼÚǞˢɛĐŒƓǕǗȗǖǖǕƔőďɶѴƭu]DL7 ��� ������������������������������������������������������������������������������������������������������������������� xk|j®η׽ÞǠʤˢțƕŔƔǕǖǖǖǕǕƔœĒѐ̻պͳ¬}bK3Q?-��� ������������������������������������������������������������������������������������������������������������������� wjǴһĥǤɤ˧ΩΨ̠ͤʝȚǘǘƘƗŖĕĔԔ—œ׾йDzkUP=)��� ������������������������������������������������������������������������������������������������������������������� xjȶѽëŪǩʩ̩̪άϭЭΪ̦ͧˤʤɢȡǠǥŧçлȵyfO<(yp��� ������������������������������������������������������������������������������������������������������������������� reWyŷͼůǯɯʯ˯ˮˮ̮ˮʭʭɮȮƭìӿͻƵ{iWI7%pg^��� ������������������������������������������������������������������������������������������������������������������� ~zm{Źɼ;ñıŲŲŲı°ξʻŸtdZI8j`V��� ������������������������������������������������������������������������������������������������������������������� dYN`RB}o`o|swgn^MO>-A3$qjb���������������������������������������������������������������������������������������������������������������������� }xohbf_Xxsm����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ww^v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]v]w^w^w^w^w^w^w^w^w^w^u\yfLvbFtbErbEl[>-�������������������������������������������������������������������������������������������������������y`}Z_dddddddddddddddddddddddddddddddddddddddb\~jKubE@@�����������������������������������������������������������������������������������������������rWdgffeeddddddddddddddddddddddddddddddddddddddd{VucE�����������������������������������������������������������������������������������������������}edjiihhggffeedddddddddddddddddddddddddddddddddddoOsbBI�������������������������������������������������������������������������������������������ƿ~\llkkjjiihhgggffeeddddddddddddddddddddddddddddddcucF�������������������������������������������������������������������������������������������bonnmmǰɲȲªjjiihhggffeedddddd|dddddddddddddxeH������������������������������������������������������������������������������������������tmqqppomllkkjjiihhgeddddddddddddddddddlMp`@ ���������������������������������������������������������������������������������������oqĤtäs£s¢rroonnmmllkkjjggffeedddddddddddddoOlY@(���������������������������������������������������������������������������������������oätȨvǧvƧuƦuťtrqqppoonnmmljiihhgeddddddddddddoOlY@(���������������������������������������������������������������������������������������oǧu̫y˫x˪xʩwɩwťtĤtäs£srrqqppoollkkjjggffeedddddddoOlY@(���������������������������������������������������������������������������������������o˫xЯ{Ю{ϭzέzͬyɩwȨvǧvƦuŦuťtĤtäs£srrqonnmmlϽνͻɵ|ggffeeddoOlY@(���������������������������������������������������������������������������������������pϮzղ~Բ}ӱ}Ұ|Ѱ|ƣţŢĢáѶȨvǧvƦuŦuťtĤtqqppooihhggfpOlY@(���������������������������������������������������������������������������������������pұ|ٶص״ִճ~׾̫y˫xʪxʩwɨwȨvĤtäs£srrqkjjiirPlY@(���������������������������������������������������������������������������������������pұ|ٶٶٶٶٶؿЯ{Ϯzϭzέyͬy̫xȨvǧvƦuŦuĥtĤt͵ʹкmmllksQlY@(���������������������������������������������������������������������������������������pұ|ٶٶٶٶٶַַշԷԶěԲ}ӱ}ӱ|Ұ|ѯ{Я{̫x˪xʪwɩwɨvȨvĤtãs£s¤vpoonntRlY@(���������������������������������������������������������������������������������������pұ|ٶٶٶٶٶٶٶٶٶٶٶضص״ֳ~ճ~Բ}Я{Ϯzέzάyͬy̫xȨvǧuƦuťtrqqppuTlY@(���������������������������������������������������������������������������������������pұ|ٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶضԲ}ӱ}ӱ|Ұ|ѯ{Я{̫x˪xʪwȨťtĥtäsãs£rvTlY@(���������������������������������������������������������������������������������������pҰ{ٶٶٶٶٶٶҰؽԲ}ƤɩwȨvȧvǧuƦuwUo\A'���������������������������������������������������������������������������������������rٶٶٶٶٶٶҲصֽέzͬyͬy̫x˪xʪwmMqU9 ���������������������������������������������������������������������������������������|þfٶٶٶٶٶٶ̧Ҳٶڿٿھӱ}Ұ|Ѱ|ѯ{Ю{ϮzέzzgI�������������������������������������������������������������������������������������������zx[ճ~ٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶص׵ֳִ~ճ~Բ}ӱ}fzfG��������������������������������������������������������������������������������������������y¼bٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶصʪwygHـ@@��������������������������������������������������������������������������������������������wbѯ{ٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶk|hIj\@$������������������������������������������������������������������������������������������������ukz^deeeeeeeeeeeeeeeeeeeeefffffffffffffedZ[rP}jJweHff3����������������������������������������������������������������������������������������������������rA5%Qo^C.jU@ ����������������������������������������������������������������������������������������������������������������~~~o���)������������������������������������������������������������������������������������������������������������������������mmm`���(���������������������������������������������������������������������������������������������������������������������������1[[[Ittuuvvvwwxxyyzzzz{{||}}~~~~~~~~~~}}||{{zzzzyyxxwwvvvuuttssrrr_���(������������������������������������������������������������������������������������������������������������������������������������������������������������ ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������������?������������?������������?������������?������������?������������������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?������������?�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���`������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]]]^^^^^^^^^______```bbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaa ``` ``` ``` ``` ``` ``` ``` ``` ``` ___ ___ __________________^^^^^^__^`__aaabaacbb~}}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������*~~~~~~~~~~~~~~~~~~|||{{{||||||{{{zzzzzzzzzxxxyyyxxxwwwvvv~uuu}uuuzuuuyssswrrruqqqspppqnnnoooolmmmjlllhxxxfda`][XVTQOMICsss9PPP+666$111"000"/// ---***(((%%%������������������������������������������������������������������������������������������������������������F㭭ttt,,,^###H���0���&���```iii��������������������������������������������������������������������������������������������E񥥥ZZZ+++R2���*iii����������������������������������������������������������������������������������������C]]]o���2���.����������������������������������������������������������������������������������������@eeet3���/fff������������������������������������������������������������������������������������>111U���1������������������������������������������������������������������������������������=fff3'NNN��������������������������������������������������������������������������������:000Y���,BBB ��������������������������������������������������������������������������������8qqq���.GGG��������������������������������������������������������������������������������6���0MMM��������������������������������������������������������������������������������4���2SSS��������������������������������������������������������������������������������1###?WWW��������������������������������������������������������������������������������/y}oudo[lUq^vf|mziiiu[[[��������������������������������������������������������������������������������-}pkV{`CnS~dovz|}|{t~fnUuc|___��������������������������������������������������������������������������������*{n}hReJpTepsqponoqty|mzdvduaaa��������������������������������������������������������������������������������(}ycL}bDxXdige~e|e}f~hijlmuuinZccc��������������������������������������������������������������������������������&ycKwY8tN~bu_u_u_v_v_w^x_ya|c}d~ehpz||}~~|u\p^ddd��������������������������������������������������������������������������������#ttY<cBZx]r[s[t\u[u\v\v[w[x\y^z_cpwyzz{||||||{ioY~eee��������������������������������������������������������������������������������!xitV7a@b`qYrYsYtXtYuYvXvXvXwXwY`nuwxwyzzzzzzzzyqrZxfff��������������������������������������������������������������������������������p]tR/gEag`[ZZZYYXWWX\j›oÜpÝqÝsÞtÞužvwwwwwtlvwprY|lgff��������������������������������������������������������������������������������s^sS1a=}]eghijjifeeddfhÙiÚiÚjÛkěmĜoĝpÝrstuvuphrtsjqWvgff��������������������������������������������������������������������������������stU3{X2xUbdfhjjji˜hÙhĚhĚgŚfŚeŚeędęeŚdŚfŚgěiějĜlÛmÛpœqssrpqqpo}drZgff��������������������������������������������������������������������������������rQ-|X2mH_adfggf—eØdędŚcƚbǚbǚaǛaǚaǚ`ǚ`ǚ_ƙ_\SU^fĚiĚkkf_^elmlkw[sZgff��������������������������������������������������������������������������������|`BzW1a8yT_acdcc–b×aŘ`ƙ`Ǚ_Ț_Ț]ɚ]ʛ]ɚ\ɚ\ɚ[ȚZWHk@lBtFPW[UxPrPrQuT]jih}`sWv^gff��������������������������������������������������������������������������������zcwT0]5lCX^```__Ö]ŗ]ǘ\ș[ə[ʚZ˛Z˛Z˛Z˛Z˚Y˛X˚XOs=g:h<j>k?oBqEmEmHnIoKoMrPcfebvXqVygff��������������������������������������������������������������������������������uS0Z2d9vLZ]]\\”[ĕZƖYȘXəXʚX˚X̛X̜X̜X̜X̜X̜X̜X̛WHh7d5d4e6e8f9h;h>i?iBkDjFkHQcb_zZtVt\gff��������������������������������������������������������������������������������xxxfHzW1_6k=|OYZYXXÓVƕVȗUɘTʙU˚V̚W͛W͜X͜X͝X͝W͜W͜W͛VIj5b2a1a1b2b3d5d7d9f;f>f@gByJ^^\|YuVoTyggf��������������������������������������������������������������������������������iii uR.\4e9qAQWWUUÒTœRȕRɗR˙S˚T̛U͜V͜WΝXΞXΞXΝWΝWΝWΝVNs6`/_.^-^,^-_/a0a2b4c7c9c;{F\\Z|XwUqTlR¸ggg��������������������������������������������������������������������������������fff iM|X2b7k<wEQSRPPœOǔOɖPʗQ˙R͛T͜UΝVϞWϞWПWПWПWПWПVϞUϞUIv4q2k/[)Z(Z(m0<=s5c3_4DXZYWyUsSmQkRhgg��������������������������������������������������������������������������������fff z[:]5f9p?{FMOMMĐLƓLȕMɖO˙Q̚RΛSΝTϞUПVРWѠWѡWѠVѠVѠVПUПTОTƛOLGz2['X%:ǒIǒIG:a2DUXYV{TuRnP}cGhgg��������������������������������������������������������������������������������eee xV1a7k<uB}FJKIŽHőIȔKɕM˘N̚P͛QϝSПUџVѠVҡWҢWӢXӢWӢWӢWӢWҡVҠUѠUџTНRK6](=ɔIȓIƒIFr4DSUXW}TvRpOiMhgg��������������������������������������������������������������������������������ddd oS}Y2f9p?zEEFFEĎDƑGȔJʖL̙NΛPϝRџTҠUӢWԣXԤYեZ֦[֦[֦[֦[֦[եZԤYԣXӢWҠUџT̜QDƗKʖKɕKȓIƑHFIORVVTwQpNjLt]hhg��������������������������������������������������������������������������������ddd ¹wW5\4j7~t5{7?DCÌCƏDȓHʖK̘MΛPОSѠUӢWԤYեZ֦[ר]ר]ة^ة^ة^ة^ר]ר]ק\֦[եZԣXҢWѠUОSΛP̘M˖KɔIǒHőHJMPSUTxPqMjKgNƿhhh��������������������������������������������������������������������������������ddd vT/za1Sr%Ox$R{%h~+<CŏDǒGʕJ̙NΛPОSҡVԣXեZ֧\ب]٪_٫`ګ`ڬaج`UA=@ƥWة^ר]צ[եZԣXҡVОSΛP͙NʖKȓHƑGďHJMPSSzOrLjIx]Ahhh��������������������������������������������������������������������������������ddd qxW0Sj$Gv!Ly#O{#R}#r+>ǑFɔI̘MΛPОSҡVԤY֦[ة^٪_ڬaۭbܮcۯd̫^Ac2a1a0f3Iۭb٫`ت_ר]զ[ԣXҡVОSΛP̘MʕJǒGŏFGJMPRzNrKjHtW9hhh��������������������������������������������������������������������������������ccc w_wY0Pm#Hv"Nz#P|#S~#X#6ɓH˗LΚOОSҡVԤY֧\ة^٫`ۭbܯdݰeܱfê[Aa2k6}?GQͬ^ܰeۮcڭb٪_ר]֦[ԣXҠUОSΚO˗LȔIƐFÍEGKNP{MrJjFuW8}hhh��������������������������������������������������������������������������������ccc hL~[2Sn%Jw"O{$Q|$T#V#y.ʕJ̙NϜQҡVԤY֧\ت_ڬaܮcݰe޲gߴi¬\|>d4@\бdڴgߵii߳hޱfݰeۭbګ`ة^֦[ԣXҡVϝQ̙NʖKǒGĎDEHLN{MrHiDvW6phhh ��������������������������������������������������������������������������������ccc uV6\3Uo%Kx#O{#Q}#T#V#|0˘MΛPџTӣX֦[ت_ڬaܯd޲gߴiߵj[i7c4c5Zoonmmki߳hݰeۮcګ`ة^֦[ӣXПTΛP˘MȓHƏD‹CFHK{JqFiBtU4u`hhh ��������������������������������������������������������������������������������ccc oN-]4Vo&Ly#O{#R~#U#W#6͙NϝRӡVեZة^ڬaܯdޱfilǰay>c5d5d6Ussrppnlk߳hݰeۮc٫`ר]ԥZҡVϝR̚OʕJǐEÍCDFG{CqCg@sS1lVhgg ��������������������������������������������������������������������������������ccc pP.]4Vp&My$P|$S~#V#]%AΛPџTԣXר]٫`ܯc޲gjlٶjKf7d7e7e8Qxxvusqomk߳hݱfۮbت_֧\ӣXПTΛP˖KȒGĎCC>p}0^z-ks3f;pP-oYggg ��������������������������������������������������������������������������������ccc |`A]3Vp&My$P|#S~#V#x.HϝRҡVեZت_ۭbޱfjmp˵fp=e8e9e:f:L}~|{yvsqmk߳hܰeڬaة^ԤYҠUϜQ˘MȓHŎCAy/P|#Lz$Gu$gh/oO,|hggg ��������������������������������������������������������������������������������ccc nT[2Uo&My$P|#S~#X$7ɘLОSӢW֧\ڬaݯdilorcf:e:e<e<f=K|ƃłĀ~{wtpmj޲gۮc٫`֦[ӢWОS̘MɔIƏD@t-P|#Kx#Ds!Rj%mM+uggg ��������������������������������������������������������������������������������ccc}f|Z1To%My$Q|$S~#Y$9̘MџTԣXب]ۮc޲gkorw\e;f<f=f>f?uGƻtɉȇȅǃ|xspmߴiܰeڬaר]ԣXПS͙NʔIƐEB2Q|$Jx#Cr Ji"jK*ggg ��������������������������������������������������������������������������������ccc}zV1Xm'Ly#P|#S~#V#3ŘLѠUեZ٪_ܰeimrw|Ye=f?f@fAgAgBbʋˍʋɉDžŁ}wsok޲gۭbة^ԤYџT͚OʔIƏDC3O{#Jw#AqWb&hJ+ggg ��������������������������������������������������������������������������������cccuS/^j(Jx"P{#S~#V#n,IҡVզ[٫`ݱfjotzŀjf@fAgBgCgDgCvLuΒ͐̎ɊdžŁ{vql߳hܯd٪_եZѠUΚOʕJƏDB~1O{#Hv"Cpe[*mR6ggg ��������������������������������������������������������������������������������ccc}_?de+Iw"O{$S~#V#\&EӡV֧\ڬa޲glqx~DŽ}~NgCgDhEhFhFhFtN~ϔϒ̎ɊDžysniݰe٫_զ[ѡVΛOʕJƐE?k+N{$Gu!Pk#lU,w`Hggg ��������������������������������������������������������������������������������cccjs]/Gu"Nz#R~#V#X$9ҡV֧\ۭb߳hms{łɉ̏}yPgGhHhIhIhIhIkJi͒Γ̎ɉł|uojݰe٫`եZѠU͚OɔIĎC5S|$Nz#Pq$p_.mM,~lggg ��������������������������������������������������������������������������������ccczX4Sq%Ly#Q}#U#W$o.ѠU֧\ۭbߴinu~DžˍϓЗthIhJiKhKhKiKhIqNąЗΒˍDž~wpkݱf٫`եZѠUɘMB7Z%P|#Px%qj/{W1eH(fff ��������������������������������������������������������������������������������cccƾ|`Agh+Jx"P|$U#X$\(L֦[ۭbiovŁɈ͐їԝϖiKiMiMiMiMiMiLhKqӛЕ͏Ɉŀyplݱf٫_եZџTDj*]%R~$X|'}t4b6sQ.^D'fff ��������������������������������������������������������������������������������bbb~is[/Vq&Nz#S~$Z(_.>Ҧ]ۮfms{Džˎϖӝ֣գmQlRlSlSlSlRkPkOwUԞҚϓʋƃ{qlݱfت`ԤYОSFw.f(r~.z=m=~Z2hI)pfff ��������������������������������������������������������������������������������bbbsU2ig,Ow$S~%^/d5s=X۰krxĀɊΔҜפڪեrZrZs[s\r[rZqYpWpU̕Ԡљ̐ȈupݲjثcԤ\ϟVʗNFBDuBe9sQ.pX>fff��������������������������������������������������������������������������������bbb~hxZ0bp+S~(c8j=mAMίjw}ń̐љաڪܮŊxbycydydxdxcwaw_v]„ץԞΕʌŃzu޴o٭gԧaС[˙SŒPQ|Em>\4hK+}fff��������������������������������������������������������������������������������bbb|aD_4jy1lAqFsHvK^{lj͔ћќȐyklnonnm~k~i~gpН֤љ̑Ljz޵sٮlԨfТ`ʛYÕYYs@a7qP-t_Ifff��������������������������������������������������������������������������������bbbxX5m=RYV_n߻~NjˑulortvwwvusqokԢќ͓ȋƒ}ݶwدpԩiϣdɜ`–a[g:xU0aE'fff��������������������������������������������������������������������������������bbbva\4WoŤmЫrٳz߻ǎlnrvy{}~}zxuqq~ƌćĹxqib]ZciUZ3fH(vffff��������������������������������������������������������������������������������bbb~fLfAo˥yҫyز|ݺƐĉruy}|xuqlifca^[Y~Ygif?hK,r`eee��������������������������������������������������������������������������������bbbľ}cI|\ãΫձ۸߾đȓy~ďĐό~zvqoljgdbclszWoP/q]Ieee��������������������������������������������������������������������������������aaaw^DwƧѰضݼ‘ɘƑÎŒǖȘǕŒÎ{wuronklv|jtW8]F.eee��������������������������������������������������������������������������������aaat^{ĨҴٹ޾ŘʝЍđǔȘɚȘǕđ~{ywvzvrX=wfSeee��������������������������������������������������������������������������������aaa||ĬѵټƜɞÐÎőƓǖȗǖǕŒÏƯsr\Czleee��������������������������������������������������������������������������������aaa{ζپǟɠǚŔœƔǖǖƕǕœđÐ˷ȰrgR<ueee��������������������������������������������������������������������������������aaa~~~ÿñѻƥɦ̨̤ͧˡɞȜțǚŘŗ×—šսͷtatgfff��������������������������������������������������������������������������������aaa|||нªƫɬˬ̭̫ͭ˪ʨɨȧƦèտ͹o_zn~~~ggg��������������������������������������������������������������������������������bbb|||~ƸοİŰưƱůîͼŶ{kvhZ}{{{~hhh��������������������������������������������������������������������������������ccc{{{{o~ysfocWxzzzzhhg��������������������������������������������������������������������������������dddzzzv��������������������������������������������������������������������������������eeezzzs��������������������������������������������������������������������������������n��������������������������������������������������������������������������������i��������������������������������������������������������������������������������~e��������������������������������������������������������������������������������{c|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|^|_|_|_|_|_|_|_|_{^oPlL}jK{jLMr��������������������������������������������������������������������zaadddcdccdccdccdccdccdccdccdccdc`xUtTe����������������������������������������������������������������xľhhhggfeedddccdccdccdccdccdccdccdccczV~kK`����������������������������������������������������������������uilkkrrphggffedddkmlddddglmhddddddddcmM����������������������������������������������������������������svmonnӿ˵kjjihhgffDZμdccdͻðcdccdccdcqPwS ������������������������������������������������������������rprrqqnmmlkkjiifeedŲŰcdccdccdcvSyeG������������������������������������������������������������oqȧvǨvǧuƦu¢rqqpoonmmjiihȵDZeddddddddvTydH������������������������������������������������������������mr̬yͬy̫x˪xƦuťtĤtãs¢rrqppmllk̸whedddcvTzeI������������������������������������������������������������ktҰ|Ұ|ѯ{Я{׾ֽռӹʬ}ƦuĥtäsãspoonϻyggfewTzfI������������������������������������������������������������iv׵ص״ִ~̫x˪xʩwɨvťtäs£srԿ~kji{V{fI������������������������������������������������������������gu״صصصڿѯ{ЮzϭzέyɩwȨvǧuƦuտȫ̳nml}X|gJ������������������������������������������������������������du״صصصݾܼܽܽطִ~ճ~Բ}ӱ|έzͬy̫x˪xĢҹƦtĥṯʰppoZ|gJ������������������������������������������������������������cu״ٶٶٶǟǞǞǞݾۻǟǞǞĜÜÛշȥּà¡ťtĤsãs[}hJ����������������������������������������������������������������`yղ}صصصշʤЮ˧ϱʪwɨvȨvZgH����������������������������������������������������������������^έzصصصѯą̈̄ɡӴַЯ{ϮzέzͬyyU禋f����������������������������������������������������������������[uٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶص׵ִ~ֳ~Բ}mxV��������������������������������������������������������������������Ztִ~صٶصصٶصصٶصصٶصصٶصصٶصصٶصصٶصصٶصصٶصصpuQl!��������������������������������������������������������������������Xjikkkkkkkkkkkkkkklllllllllllkc`~XzYr!u��������������������������������������������������������������������UE:*=mT{��������������������������������������������������������������������������������M.)"����������������������������������������������������������������������������������������HHH-w,( ����������������������������������������������������������������������������������������222222333333222222111111111111111111111111111 111 111 111 111 111 111 111 111 111 111 111 111 111 111 111 111 111 100 00/ 00/ 0/. /.- /.,/-+.,*.,)-+(-+'-*&-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%-*%,)$+(#+'"+'"*'!*& JB7 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?���������?���������?������������������������������������������������������������������������������������������������������������?���������?���������?��������������������������������(���H������� �����`T����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������IIIGNNNYNNNWNNNVNNNUNNNTNNNSNNNQMMMPMMMOMMMNMMMMMMMLMMMJLLLIKKKHLLLFKKKEKKKDKKKBJJJAJJJ@III>III=III;HHH:HHH8GGG7FFF5FFF3FFF2FFF0EEE.-+)(&$"!~~~ vvv kkkwww��������������������������������������������������������������������������������忿侾㽽⽼⼻໺๹߸޷ݴܲ۲ڲٲر֨њ̕ʑ†aaax K."""222eee��������������������������������������������������������������������񏏏HHHo5%SSS����������������������������������������������������������������9���(����������������������������������������������������������������hhh���1;;;������������������������������������������������������������C "mmm��������������������������������������������������������ccc���)ttt�������������������������������������������������������� ���.�������������������������������������������������������� ���2�������������������������������������������������������� 999P�������������������������������������������������������� xgoX{djllorrk|j^^^|�������������������������������������������������������� q^gLtWhqonnnqut~hvdhhh�������������������������������������������������������� uex_@~Wedxaw`yb{d}fgjs}~~~fxhooo�������������������������������������������������������� x^BkJ}]s\t\u\v\v\w\y]z_coyz{|}}}|vt^{qqq��������������������������������������������������������{x[<nOcqXrXtXuXuXvWvWwW]mtvwxyyyyyxv{dusss��������������������������������������������������������wvV5nLdfccb`_]]`fšlÛnÜpÝqÞstvvwrkusy`ssss��������������������������������������������������������vW5d?`egjkj˜iÙiĚhŚgŚfĚeęeŚeĚgějŜkÜnÜpœrsrorqmtZttt��������������������������������������������������������{]=[4|Xadffe×dĘcřcǚaǚ`ǚ`ǚ`Ǚ_Ǚ^\QR^Úgšje\\flkdsYuuu��������������������������������������������������������jN|X2jB]`bbaÖ_Ř^Ǚ^Ț]ɚ\ʛ[ʛ[ʛZʚZʚYIj=j?qC~IMsKpLpNvRchevYybuuu��������������������������������������������������������zW3`7wM\^]\Õ[ŖYȘYʙYʚX̛X̛Y̜X̜X̛X̛W|=e6e6f8g;h=i@jCkFlIRcazZqUuuu��������������������������������������������������������www|]=\4i<QZYXÓWƕUȗTʙT˚V̛W͜W͝X͝X͝W͜W͜V=b2a0a0b2c4d7e:f=f@tG^]}YuUt[uuu��������������������������������������������������������jjjzW1d8qASUSRœQȕPʗR˚S̛U͝VΝWϞWϞWϞWϞVΝUIf0],\+\*],i1t6`3`6xBZZ~WwUoRpuuu��������������������������������������������������������kkkeG]5k<xDOOMđMǔMɖO˙Q͛SΝTϞVПWѠWѠWѠWѠVПUϞTNH:](c)BÑHDj4@VYWzTrQeIttt��������������������������������������������������������kkkƾwU1c8q@|EIIHƑIɕK˗N͚PΜRПTѠVҡWӢWԣXԣXԣXӣXӢWҠUџT̜Q?z2FȔJƒI@ASVW|TsPjMttt��������������������������������������������������������jjj}Y2i:w@CEDŎDȒHʖK͙OϝRџTӢWԤYեZ֧[ק\ק\ק\֧\֦[եZԣXҡVОSÚM˘MʖKȓIđHIOSV~StOkLnttt��������������������������������������������������������jjjsX|^2[r(Ry%k~,?ŒCǑFʖK͙NНRҠUԤX֦[ר]ت_٫`ګ`Ҫ^KEOר]ק\եZӢWѠUϜQ̘MʕJǒHďHKOSRvNkJz`Fttt��������������������������������������������������������jjjhI\g'Hv"N{#Q}#w,ŏDɔI̙NϝRҡVեZר]٪_ڬaۮcܯdSn7`1a1@ҫ^ڬaة^֧\ԣXҠUϜQ̘MɔIŐFŒGKOQwMkHpS4ttt��������������������������������������������������������jjja?]j(Jw"P|$S~#Z$?˗LϜQҡVեZة^ڬaܯdݱfܲfPl7?Qì\ֱdݲfܰeڭb٪_ק\ԣXѠUΛPʖKǒGÍDGLOwKkFqS3ƿsss��������������������������������������������������������kkkzY5ak)Ky#P|#T#Y$?͚OџTԤYة^ڬaݰe߳hܴhNh6p:ʲcnmlkiޱfۮc٪_֧\ӣXОS̙NɔIŎDDHLwIjCqR1sss��������������������������������������������������������jjjļxU0bl*My#Q}#T#]%FϝRӢWק\ڬaݰe߳hkYe6d6o;˵gsrqoljޱfۮc٪_եZѡVΜQʖKƐECECvAh@oP/rrr��������������������������������������������������������jjjyX4bm*Mz#R}#U#r-̙NџTեZ٪_ܯdߴimֶiw?d7e8h;µh{ywtqmjޱfڭbר]ӣXНR̘MǒG‹B9U|&Nx'pi3mM+rrr��������������������������������������������������������jjj`?al*Nz#R}#W#:ΛPҢWר]ۭb߳hlqʶgg:e;f<f=eƂŁ~{vqniܰe٫`զZџT͙NȓHÌC1O{$Hv"Pl%jK*ļqqq��������������������������������������������������������iiigH`k)Mz#R}#W#<ϜQԣX٪_ݰejpvbe<f=f?f?WɉɈDžŁ}wql޲gڭbק\ҡV͚OɔIÌC6O{$Gu!Ij"gI)ppp��������������������������������������������������������iiipTeh*Ly#R}#U#4ϝRեZڬa޲gms|hf?f@gBgBqH~̏ˌɈƃ|uojܯdة^ӢWΛPɔIÌC6Nz#Et!Vc%kP4ooo��������������������������������������������������������iiivib,Jx"Q}#U#g*͝R֦[ۭbipxŁ}tIgChEhFhFxPLjΓ̎ɈŁyqlݰeت_ӣXϜQɔIŒCy/Mz#Gr!gZ*q\nnn��������������������������������������������������������iiiǿsX.Iv"P|#U#\&I֦[ܮckr}Ȇ̎|jHhHhIhIhIlJ~ϔ̎Ȇ}tmޱfت_ӣXΛPȓH;W}%Mx#dh*oO,mmm��������������������������������������������������������hhh~aBXo'N{#T#Y%=ԥZܮcktŀʋϔҙfiKiLiMiLhJ_ϕϓʊŁvn޲gت_ӢW˜K4a'S|%ks.~]2dH(lll��������������������������������������������������������hhhzlb-Nx$S~$Z(m3̤ZܯfoxDž͑Қ֢xkPkRkRkQkOsSʎј̎Ƅxoޱgة_ҡVIl*b({6k:vT/{fPkkk��������������������������������������������������������gggwY5\p(Q}%`2g8R۲muʍљ֣ګ|t\t]s]s\rZqWԠϕɊ}t޳kتbҢZ˙QGDvB`6nQ2jjj��������������������������������������������������������gggy`2^y,g=nCwHh|Ņ͓Ԡդɒj|h|j|i{h{ezcs֤Ҝ̐ńz޵rحiҤ`̛XÓTMj<tR.taiii~��������������������������������������������������������eeegJi:QSYİo⾁Ɗʑpoquvvtqnlƌԡ͔lj俀޷wخnҥf˝``zKZ2lS8hhh{��������������������������������������������������������eee|úa@YápϪrڴ|ὅƍnsx||xssxpg_Zagf=kN0gggw��������������������������������������������������������dddzdByϪ|س޼ĐÉvz‹Œ|wplhea^_k\lM,}fffu��������������������������������������������������������cccwx[Ŧӱ۹ɘőǕǖő}xtqnjkwqtX9}m\dddr��������������������������������������������������������aaatrĩԶݽřșÏƔȘəǖđŒ|zw|©{y`Fxcccn��������������������������������������������������������```q}ҸƞǛēđƓǖǖǕŒÏĭzvbMbbbj��������������������������������������������������������___nʵƤɤˣˠʞțǚƘŖÕ•ʽʷq|n```g��������������������������������������������������������]]]kȷӿǬɭˮ̭˫ɩȩŨ̸swj^^^c��������������������������������������������������������\\\iyĵ|uf{\\\_��������������������������������������������������������[[[f{{z[������������������������������������������������������������[[[eW����������������������������������������������������������������bR����������������������������������������������������������������`N����������������������������������������������������������������^~b```````````````````_vUrQ}jLm����������������������������������������������������\gffedddddcdddcddddcdddcdc_tR^ ������������������������������������������������Ykkkongffeddejjdddgkhddcddd^sRZ������������������������������������������������WrpoŬkjjihgzddd¯ddcdddbkK}[��������������������������������������������UqťtĤsзponmlk«hgfϾdcccccbwcG\��������������������������������������������Ss̬y˪xּťtĤs£srqpɰlkk¨|wieddbwcG_��������������������������������������������PvԲ}Ӱ|αͱɫ̯ƦuťtϵqpoƫigexdGa��������������������������������������������Nwصصś׼άyͫxԺƦuťtäsɭʰukizeHc��������������������������������������������LwصصŜØØطղ}ӱ|ڿͬy̫x˪wͯťtʮŪom{fId��������������������������������������������JwصٶƜԵԵԴ˥ԵҴѳвʪʬ~ťtq}hJe��������������������������������������������G~صٶŚΪپѱ›έz̫xƦukLv������������������������������������������������EҰ|ٶڹ×ĘĘĘĘۻݿĘĘĘĘĘĘݽܼĘĘʕںֳ~ղ}ӱ|lbC������������������������������������������������C}Ϯ|ղ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ճ~ղ}ӱ|ptR����������������������������������������������������@wcFpSwlC��������������������������������������������������������;QI<����������������������������������������������������������������`pqrrsttuuvvwxxxyzz{{{{|||||||||{{{{zzzzyyyxxxwwwvvuu}}}nME8����������������������������������������������������������������{}x{t~xp|vm{ti{sg{sg{sg{sg{sf{sf{sf{sf{sf{sf{sf{sf{sfzrfvnaul_tk]siZ|i��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������������������������������������(���@������� ������B��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PPPaWWWWWW}VVV{VVVyVVVxVVVvUUUtUUUsUUUqTTToTTTnTTTkSSSiRRRhRRRfQQQdQQQbPPP`PPP^OOO\OOOYNNNWNNNULLLRKKKPJJJNIIIKHHHH{{{FCA>;9630(uuuddd```\\\UUUKKK ������������������������������������������������������������������������{{{LLLj���/���$???����������������������������������������������������������������JJJn���2������������������������������������������������������������SSSs���0]]]��������������������������������������������������������4 ��������������������������������������������������������```���'�����������������������������������������������������������.�����������������������������������������������������������2��������������������������������������������������������zqx>>>U��������������������������������������������������������wp\mR|bquxz|x~g~ktWWW{��������������������������������������������������������xj|bD{Zlih}gikns}exi```��������������������������������������������������������}w\?wPy`u^u^v^w^y`|b}djy|}~~}ybzmddd��������������������������������������������������������{lxX6arZrYtYuYvYvYwYx[hvxxzz{z{{pvcfff��������������������������������������������������������q\zX5`f__^\[Z[c›mÜoÝqÞsžuwwwsmvns]ggg��������������������������������������������������������mwU0xVdgjkj™iÚhĚhŚfĚfęfŚfĚhĜkĜmÜoœrssorqeydggg��������������������������������������������������������vS/iC_dffeØdřcƚbǚaȚ`Ț`ǚ_ǚ^ZMVdĚif\\hlkw[xhhh��������������������������������������������������������vU3]5{S_aa`Ė^Ƙ]ș]ɚ[˛Z˛[˛Z˛YʚXBh<j?mBxHnGoJpMtQff}_qVhhh��������������������������������������������������������yyyk~Y2h<Y][[ĕYƗXɘW˚W̛X̜X̜X̜X̜W̛Wk7d4d4e7g:g=h@jCjFUa^uVu]hhh��������������������������������������������������������cccvS/b7sDXWVÓTǕSʗS˚T̛V͜WΝXΞXΞWΝWΜV;`/_._.`0a2c5c9d<M]ZxVpThhh��������������������������������������������������������___}e[3j<{HRQOƓNɖO˘Q͛S͜UϞVПWПWПWПVϞUO;6[(Z'6B9_3JYY{UrRhNhhh��������������������������������������������������������___vV3b7r@~GLJĐIȔKʗN̚QΜSПUѠVҡWҢWӢWӢWҡVҠUџTϝRB^(AȓIőI{7IUX~UuRjMggg��������������������������������������������������������___Ĺ{X1i;yDEFŒDƑFɕK̙NϜQџTӢWԤYեZ֦[ק\֧\֦[եZԤYӡVџTKɘMʖKȓIHKQVUvPkLggg��������������������������������������������������������^^^s}]2]r)Tz&2CŏDɔI̙NϝRҡVԤY֦[ة^٪_ګ`׫`NHUר]֦[ԤYҡVϝR͙NɕJƑGÏIMRTxOlJ{bHggg��������������������������������������������������������^^^sX_g(Iw"O{$S~#9ȒG̘MϝRҡVեZة^ګ`ۮcܯdǪ\s9a1a1Gۭb٫`ר]եZҡVϝR̘MȓHďFIMQyMlHnQ3ggg��������������������������������������������������������^^^dEbi*Kx#P|$T#p+ʖKΛPҡVզ[ت_ۭbݰe޳h[i6AZֲeߴi޲gܯdڬaة^եZҡVΛPʖKƑFEINyLkFpR1fff��������������������������������������������������������___uU2fk+Ly#Q}#U#q,̙NПTդYت_ۮc޲gjZf5c5ñapomkiݱfۭbة^ԤYПT̙NȓHÍCFJyIjCoP0fff��������������������������������������������������������^^^sR/gk,Mz$R~#V#7ΛPӢWר]ۭb޲gkյhl:d7e7^wuspmjݱfڬa֧\ҢWΜQʕJŎDC9my3i<mN,üeee��������������������������������������������������������^^^}^>fl+Nz$S~#V#EОSեZ٫`ޱfkpYe8e:f;\}{vrniܯd٪_ԤYОS˗LƐE>Q|$Kx$Xl)kL*eee��������������������������������������������������������^^^mQdj*Nz$S~#]%˗LѠUק\ܮciouRf<f=f>RɈdžƃ~xrm޳hڭb֧\џT̘MǑFAQ|$Iw"Hl!gI)ddd��������������������������������������������������������^^^|egg+My#S~#W#GҡVة^ݱfms|Rf?gAgBhCŃ̎ʋDžwpjܯdר]ҡV̙NǑFCP{$Hv"Qf$hL0ccc��������������������������������������������������������]]]}ka,Kx#R~#W#=ӢW٫`߳hoyƂlgBgDhEhFxPȊΒˍDž}smݱfة^ҢW͙NǑF<O{$Ft!d\*vbbbb��������������������������������������������������������]]]{sW.Jv#Q}$V#x1ӢWڬair~Ɉ͑ahHhIhJhIlKƈϓʋłwn޲gت_ҢW̙NďDr,Nz$]m(pP-aaa|��������������������������������������������������������]]]ziMZn'P|$U#\'ǟRڬajtł̎јϖiKiMiMiMiKgҙ͐Ȇzo޲gة^ҡV@j)R}$hw-`4dG(```y��������������������������������������������������������\\\xp^.Ly#U%`/FڭfozȈϕՠצnSmUmUmTmRqSӝЖʊ}q޲hש_џUDx.7o>wU/we___v��������������������������������������������������������\\\ugJen+V+i;oAǬfwĂ̑Ԟڪϛwaxbwcwbv_u\ʒԟ͒Ƅx޵oثeѡ[ʗQO{Db7gJ+^^^s��������������������������������������������������������ZZZs{Y1v}9qItJ[}ƈΖ̕mnppoliv֥ИȊ߷vحlѣbɚZZm=rQ.w]]]p��������������������������������������������������������ZZZqne;liزx༂ƌlrw{}~|yuoʑĆλ{pf^e\~Y2pYB\\\m��������������������������������������������������������YYYnkRb˦{ְ|޻ŏu{~yslhd`\[mlFfM2[[[j��������������������������������������������������������XXXk~fL~ЯڸɘÏƔǖŒ{vrnjkyebH,YYYg��������������������������������������������������������WWWhoҴܽřǗŒŒȗəǖđŒ~{x}©tlU>ĿXXXc��������������������������������������������������������VVVeζǟȜœœǕǖǕœÏƶĬoraPWWW_��������������������������������������������������������SSSbӾƧʨ̧̥ˢɟȝƛĚÞԿ˶o^UUU\��������������������������������������������������������SSS_ɹ®ƯǯȰƮĮѿxsRRRX��������������������������������������������������������QQQ]z~QQQS��������������������������������������������������������QQQ[O��������������������������������������������������������YJ��������������������������������������������������������VF��������������������������������������������������������Tf`````````````aaaa`yVtRւpRgo��������������������������������������������R|ggfedddddddddddddddddd`oOx��������������������������������������������Oflk{yhhgfedtvdddswddddddxU��������������������������������������������Mpqpmlkjiheeddddddd}YpO����������������������������������������KǧvȨvǧu£rqponmjiheedddd~YpQ����������������������������������������IϮzѯ{Ϯzҷеͱťtäs£ronmưofeZrR����������������������������������������Fճ~ص״ͬy̫xʩwťtäsrkj]tS����������������������������������������Dճ~ٶٶƛśճ~Բ}Ұ|ͬy˫xʩwťtätpoauT����������������������������������������Bճ}ٶٶٽٽ׺ܽٽٽֻּ׺αƦuťtdvU����������������������������������������?ǧvٶٶ–Ɯֹϭzͬya`����������������������������������������={ٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶٶص׵״Ұ|~\��������������������������������������������;prrrrrrrrrrrssssssrmf`l ��������������������������������������������8ZO=*v����������������������������������������������������$ĴŵŶƶǷƸǸȹȹȺɻʻʻʼʼʽ˾˾˾˾˾̾̾˾˾˾˾˽ʽʽʼʼɻȻȺȹǹǹƸƸŷŷĶŶĵôZQB��������������������������������������������������������dddfffeeecccccccccccccccccccccccccccccccccccccccccccccccccccbbbaaa``^ _^[ ^\X ]ZU \XR [VO ZUL ZTK ZTK ZTJ ZTJ ZTJ ZTJ ZTJ ZTJ ZTJ ZTJ ZTJ ZTJ XRH VOE UND TMA~r_������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������������(���0���`���� �����%�������������������������������������� ��������������������������������������������������������������������������������������������zԱӰѯЮϭά̫˪ɩȨƧŦå¤}}}www^^^a'''2EEEUUU������������������������������������������������}}}?'''�������������������������������������������� :\\\����������������������������������������WWW&&&����������������������������������������%%%!����������������������������������������333(����������������������������������������xnniovyiiiP����������������������������������������~oW{[hlklp|{osxxxf����������������������������������������{kS~xOv^u]v]w]z_~cpz|}~}~h~}}}n����������������������������������������w}bE{Z]yYzYzX{XYjsuwyyxumwn����������������������������������������sz]=vTfijhfefęgĚhěkĜnÜqtroren����������������������������������������phLhA`de—cĘbƚaȚ_Ț_Ț^ř\NO]aYZhjv[m����������������������������������������l\4zP^^]ŗ[șZʚY˛Y˜Y˛XQj9g9i=kAkDmISd|]y`m����������������������������������������i|[7h;TXVŔTɘT˚ƯWΝXΝWΝWQh3`/`0b3c6d;oC]ZsUl����������������������������������������zzzg_6sAPOĒNȕO˙R͜TϞVПWѠWПVОUH=c*n.C:u;XXwSjOk����������������������������������������yyyflNh;{DHGǒI˗MΛQПTҡWӣXԤYԤYԤYӢWџTI=ɕJ‘HBSWzSmMĻj����������������������������������������yyyezZ2jr-x}1AŏDʖKΛPҠUԤYק\ة_ت_UNҧ[եZӢWОS̙NȓIĐHMS}QnK{i����������������������������������������yyydĹdb*Jx"Q}#1ɔIΛPҡV֧\٫`ۮc֮bDk6?ɪ\ڬaר]ԣXОS̘MƑGGMOnIu^h����������������������������������������yyycje,Ly#S~#h)̘MѠU֦[ڬaޱfֱeA@ִgkj޲gۮcة^ԣXΜQɕJÍDHLmEiNg����������������������������������������yyyblf-Nz#T#{0ϜQդYڬa޲g߶kHd6Euspm߳hۮc֧\ѠU̘MŏEC}:l<z_Ce����������������������������������������xxxakf,O{#U#>ѠUר]ݰemոkh:e;tD~~ztn޲g٬aԣX͛PǑF7Nz$Qo&hMd����������������������������������������xxx_Ƽic+Nz#U#AӢWڬajrŶjf=f?jBͿzɉDŽ}slܯd֦[ϜQȒG;My#Il"qZ~~~a����������������������������������������www^m`0Ly#T#8ԣXܯdmy{lDgDgEUʍ̎Džzoޱfר]ϝRȒG7Kx"Yc&}}}}_����������������������������������������www\uWMv#S#k,ԤYݰeqŀ̎vhIhJhJyS̐̎Łs߳hר]ΝRAc(Xs'oS-ü|||\����������������������������������������wwwZ^k)Q}#[(QݱguȇЖӞkOkPjPjMϕDžuߴiק]ÙLi)m|-g6rX;{{{Y����������������������������������������vvvXye=Vy'd6Iڴo~֣͒Ԣu^v`u_t\sԟˎ|߶o֩b͜UJwB{W1zzzV����������������������������������������uuuV}h6MRɳqćʑqqsrnlΙϖąx֫k͟_[d8|eMxxxT����������������������������������������tttSp]̨t۶Ì{t{~wuzpf]_YtW:wwwP����������������������������������������sssQzcִŏ~ΜĐzsnijqvZ;vvvM����������������������������������������qqqNغƚÑŒȘǖĐ|oXtttI����������������������������������������pppKӻƢȟɜȚǘŖÓŵvsssF����������������������������������������oooHʸŭɮɭǫéɷrrrB����������������������������������������oooE>����������������������������������������yyyC9����������������������������������������A5����������������������������������������>baaaaaaaaaaaaa}YuSf-��������������������������������<jkkfeddfhcdfgddccxT��������������������������������:qplkjhɶedƱddcd[xU ����������������������������8tʩwϴäsrpoĨkjsjdd\vT����������������������������5æyԲ}ԸͰǧvɬrpŰh^yV����������������������������3Ũzٶ׹ԴѰֶҰ|ϰ˪xɩvǪ~oc{X����������������������������1Ũzص׹ƜѳҸǧug|X ����������������������������.ٶØԴԵԴԴԵԵԴʤȠԴӴɣճҰ|d��������������������������������,uåuåuåuåuåuåuåuåvĥvĥvåvĥvåuph٠i>��������������������������������(j]J���������������������������������������� EMtttMvvvNuuuOuuuPuuuPvvvQvvvRwwwRwwwSwwwSwwwTxxxUxxxUxxxUxxxVxxxVxwwVwwvVwvuVvutVutrVutrVusqVtspVtrpUsroUsqoUsqoUrqoUrpnTqpmTqomTpnlTkifPthV ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(��� ���@���� �����������������������������������?=;986420.,*'%"  mmm������������������������������������bBBBk444����������������������������^HHHqVVV������������������������[DDD������������������������Xddd!������������������������TlahpuxxA������������������������QpzRu\u\w\bt{||nI������������������������M}jvTfdbagělÝpttqhI������������������������Je>ac×aǙ_ɛ]ɚ\T}GVUXi{bI������������������������FdAzLYÔWɘƯW͝X͝WHb1c3e9g@X|YH������������������������Df:KMȕN̚RϞUѠWѠW͟TFn.@;PWnPG������������������������C~a{s3@ƐF̙NѠUեZר]̦Y£TեZ͟S̙NƒHMTqMF������������������������Csj<My#n*˗LҡVة^ܯdTAQۮcר]ҡV˗LÎFMrJE������������������������Am_.O{#k*ϝRة^޲gYd6Ѷiqlݱfר]ϝRƑFCq?wD������������������������@th9P|#6ӢWݰepHe<mĀwmۮcӢWɔI1Mr$B������������������������?zUO{#3֦[jzPgCWˍDžv߳hեZʕJ1Qk$@������������������������=Qw$`(ӦZnDžLjhJiKaΒ~kեZ?^|(mY,=������������������������;ik1].UxΓգr[r[rXЙȈpԥ]Dr<{d:������������������������9Ja†uuvqɎոxĦe]~\87������������������������6vʨ~߾ŒÎzoggtQ4������������������������3˱śÐƔǖÏn0������������������������0͹Ȫɨƥǽ-������������������������.¾(������������������������+$������������������������)qcbbbbbbbb\}\w��������������������'n̶jhgDzddd]}X����������������%ű̫xɬåvpl§ðg_{W ����������������"ʶصÚϭzȨvʭèf[ ���������������� ˸ٶұֺ׾l_����������������Ʃ}ʪyʪyʪyʪyʪyʪy˫y˫yʪyťti��������������������׃t]����������������������������w|s|r|r|r|r|r}vlyqev��������������?��������������������������������������������������������������(������0���� �����` �������������������������� nmkigfca_]ZXURJ:[[[\\\��������������������H???YYYY����������������ENNN����������������Axxx����������������>r~[cfu}w5����������������:tZaa_dÜotvq7����������������7q}TaŘ^ɚ]ʛ[MHPWa6����������������4e:SœR˚SΝWϞWHm2x6s=Z~c6����������������3u7EʗLѠUեZЦZʣV̠TJGRtO5����������������2gO{#<ҡVڬaª[I«\ۭbԣXʖLHvJ4����������������0aQ}#E٪_ݶjp=_wmڭbϝRAjt02����������������/xQ}#J޲g۽thAVʊ|iӢW@Op#¹0����������������-ƽTw%?lʋkiMlʊnϡV|0pa1-����������������+|N}Gܻy˒x|ijϗzҤ`~H*����������������)m޻wkfz^'����������������&®›ƗȘÑ$����������������#Ƚķ ����������������!����������������fcbdbdb]ꖀ\>������������solgid|X������������ͭ|׽ϯ~ťtǰ\������������ͯϬԶԷcw������������ª©ªªªêi{m������������$''())**+++++****y)q��������������������������������������������������������(������ ���� �����@����������������������͍̐ňrSSS ������������.JJJ��������+��������'_`asxv$��������$zY]ș[˛ZEzFV$��������"Ĺx>ǓKПVѤYğRDHyR#��������!]'џTҭ`Mӱdר]ɕK{Fú"��������k,٫``QƂlΜQhx+ ��������]{+ѯȇmSyxO|p=��������γ|}w^��������ĸƼǟ¹����������������~fwln^؏xU����ξԸֽγ̳ҿuzV����Ğͯġ̮xߝ]����lnopqqqqqqpom�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/ftp.dpr��������������������������������������������������������0000644�0001750�0000144�00000001407�15104114162�017734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library ftp; {$IFDEF FPC} {$mode delphi}{$H+} {$ENDIF} uses {$IFDEF UNIX} cthreads, {$ENDIF} DCConvertEncoding, FPCAdds, Classes, FtpFunc, FtpUtils, FtpConfDlg {$IF DEFINED(UNIX)} , ssl_openssl_ver {$ENDIF} , ssl_openssl {$IF DEFINED(LINUX)} , ssl_gnutls {$ENDIF} ; exports FsInitW, FsFindFirstW, FsFindNextW, FsFindClose, FsExecuteFileW, FsRenMovFileW, FsGetFileW, FsPutFileW, FsDeleteFileW, FsMkDirW, FsRemoveDirW, FsSetTimeW, FsDisconnectW, FsSetCryptCallbackW, FsGetDefRootName, FsSetDefaultParams, FsStatusInfoW, FsGetBackgroundFlags, { FsNetworkGetSupportedProtocols, FsNetworkGetConnection, FsNetworkManageConnection, FsNetworkOpenConnection, } ExtensionInitialize; {$R *.res} begin Randomize; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/FtpConfDlg.pas�������������������������������������������������0000644�0001750�0000144�00000045015�15104114162�021132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpConfDlg; {$mode objfpc}{$H+} {$include calling.inc} {$R FtpConfDlg.lfm} interface uses SysUtils, Extension, FtpFunc; function ShowFtpConfDlg(Connection: TConnection): Boolean; implementation uses LazUTF8, DynLibs, FtpUtils, blcksock, synaip, ssl_openssl_lib, libssh, FtpProxy, TypInfo; var Protocol: PtrInt; ProxyIndex: Integer; gConnection: TConnection; procedure ShowWarningSSL; begin with gStartupInfo do begin MessageBox(PAnsiChar('OpenSSL library not found!' + LineEnding + 'To use SSL connections, please install the OpenSSL ' + 'libraries (' + DLLSSLName + ' and ' + DLLUtilName + ')!'), 'OpenSSL', MB_OK or MB_ICONERROR ); end; end; procedure ShowWarningSSH; begin with gStartupInfo do begin MessageBox(PAnsiChar('LibSSH2 library not found!' + LineEnding + 'To use SSH2 connections, please install the LibSSH2 ' + 'library (' + LibSSHName + ')!'), 'LibSSH2', MB_OK or MB_ICONERROR ); end; end; procedure EnableControls(pDlg: PtrUInt); begin with gStartupInfo do begin SendDlgMsg(pDlg, 'gbSSH', DM_ENABLE, PtrInt(gConnection.OpenSSH), 0); SendDlgMsg(pDlg, 'gbFTP', DM_ENABLE, PtrInt(not gConnection.OpenSSH), 0); if not gConnection.OpenSSH then begin SendDlgMsg(pDlg, 'chkCopySCP', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkAgentSSH', DM_SETCHECK, 0, 0); end else begin SendDlgMsg(pDlg, 'chkShowHidden', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkPassiveMode', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkKeepAliveTransfer', DM_SETCHECK, 0, 0); SendDlgMsg(pDlg, 'chkCopySCP', DM_ENABLE, PtrInt(not gConnection.OnlySCP), 0); end; end; end; function CreateProxyID: String; var Guid: TGuid; begin if CreateGUID(Guid) = 0 then Result := GUIDToString(Guid) else Result := IntToStr(Random(MaxInt)); end; function GetProxyName(Proxy: TFtpProxy): String; begin Result:= Proxy.Host; if Proxy.Port <> '' then Result+= ':' + Proxy.Port; Result+= ' (' + GetEnumName(TypeInfo(TProxyType), Integer(Proxy.ProxyType)) + ')'; end; procedure LoadProxy(pDlg: PtrUInt); var Data: PtrInt; Text: String; Proxy: TFtpProxy; begin with gStartupInfo do begin if (ProxyIndex > 0) then begin Proxy:= TFtpProxy(SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETDATA, ProxyIndex, 0)); SendDlgMsg(pDlg, 'rgProxyType', DM_LISTSETITEMINDEX, PtrInt(Proxy.ProxyType) - 1, 0); Text:= Proxy.Host; if Proxy.Port <> EmptyStr then Text+= ':' + Proxy.Port; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtProxyHost', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(Proxy.User)); SendDlgMsg(pDlg, 'edtProxyUser', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(Proxy.Password)); SendDlgMsg(pDlg, 'edtProxyPassword', DM_SETTEXT, Data, 0); end else begin SendDlgMsg(pDlg, 'rgProxyType', DM_LISTSETITEMINDEX, 0, 0); SendDlgMsg(pDlg, 'edtProxyHost', DM_SETTEXT, 0, 0); SendDlgMsg(pDlg, 'edtProxyUser', DM_SETTEXT, 0, 0); SendDlgMsg(pDlg, 'edtProxyPassword', DM_SETTEXT, 0, 0); end; SendDlgMsg(pDlg, 'gbLogon', DM_ENABLE, ProxyIndex, 0); SendDlgMsg(pDlg, 'rgProxyType', DM_ENABLE, ProxyIndex, 0); SendDlgMsg(pDlg, 'btnDelete', DM_ENABLE, ProxyIndex, 0); end; end; procedure UpdateProxy(pDlg: PtrUInt); var Data: PtrInt; Text: String; Proxy: TFtpProxy; begin if (ProxyIndex > 0) then begin with gStartupInfo do begin Proxy:= TFtpProxy(SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETDATA, ProxyIndex, 0)); Data:= SendDlgMsg(pDlg, 'rgProxyType', DM_LISTGETITEMINDEX, 0, 0); Proxy.ProxyType:= TProxyType(Data + 1); Text:= PAnsiChar(SendDlgMsg(pDlg, 'edtProxyHost', DM_GETTEXT, 0, 0)); Proxy.Host:= ExtractConnectionHost(Text); Proxy.Port:= ExtractConnectionPort(Text); if Length(Text) > 0 then begin Text:= GetProxyName(Proxy); Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'cmbProxy', DM_LISTUPDATE, ProxyIndex, Data); end; Data:= SendDlgMsg(pDlg, 'edtProxyUser', DM_GETTEXT, 0, 0); Proxy.User:= PAnsiChar(Data); Data:= SendDlgMsg(pDlg, 'edtProxyPassword', DM_GETTEXT, 0, 0); Proxy.Password:= PAnsiChar(Data); end; end; end; procedure LoadProxyList(pDlg: PtrUInt); var Data: PtrInt; Text: String; Index: Integer; Proxy: TFtpProxy; begin ProxyIndex:= ProxyList.IndexOf(gConnection.Proxy) + 1; with gStartupInfo do begin Data:= PtrInt(PAnsiChar('(None)')); SendDlgMsg(pDlg, 'cmbProxy', DM_LISTADDSTR, Data, 0); for Index:= 0 to ProxyList.Count - 1 do begin Proxy:= TFtpProxy(ProxyList.Objects[Index]).Clone; Text:= GetProxyName(Proxy); Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'cmbProxy', DM_LISTADD, Data, PtrInt(Proxy)); end; SendDlgMsg(pDlg, 'cmbProxy', DM_LISTSETITEMINDEX, ProxyIndex, 0); end; LoadProxy(pDlg); end; procedure SaveProxyList(pDlg: PtrUInt); var Count: Integer; Index: Integer; Proxy: TFtpProxy; begin with gStartupInfo do begin ProxyList.Clear; UpdateProxy(pDlg); Count:= SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETCOUNT, 0, 0); for Index:= 1 to Count - 1 do begin Proxy:= TFtpProxy(SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETDATA, Index, 0)); ProxyList.AddObject(Proxy.ID, Proxy); end; end; if ProxyIndex > 0 then gConnection.Proxy:= TFtpProxy(ProxyList.Objects[ProxyIndex - 1]).ID else gConnection.Proxy:= EmptyStr; end; procedure FreeProxyList(pDlg: PtrUInt); var Count: Integer; Index: Integer; begin with gStartupInfo do begin Count:= SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETCOUNT, 0, 0); for Index:= 1 to Count - 1 do begin TFtpProxy(SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETDATA, Index, 0)).Free; end; end; end; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Data: PtrInt; Text: String; Proxy: TFtpProxy; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin Text:= gConnection.Encoding; Data:= PtrInt(PAnsiChar(Text)); Data:= SendDlgMsg(pDlg, 'cmbEncoding', DM_LISTINDEXOF, 0, Data); if Data >= 0 then SendDlgMsg(pDlg, 'cmbEncoding', DM_LISTSETITEMINDEX, Data, 0); Text:= gConnection.ConnectionName; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtName', DM_SETTEXT, Data, 0); Text:= gConnection.Host; if gConnection.Port <> EmptyStr then begin if IsIP6(Text) then Text := '[' + Text + ']'; Text += ':' + gConnection.Port; end; if gConnection.FullSSL then Protocol:= 1 else if gConnection.AutoTLS then Protocol:= 2 else if gConnection.OpenSSH then begin if gConnection.OnlySCP then Protocol:= 3 else Protocol:= 4; end else begin Protocol:= 0; end; SendDlgMsg(pDlg, 'cmbProtocol', DM_LISTSETITEMINDEX, Protocol, 0); Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtHost', DM_SETTEXT, Data, 0); Text:= gConnection.UserName; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); if gConnection.MasterPassword then begin SendDlgMsg(pDlg, 'chkMasterPassword', DM_SETCHECK, 1, 0); SendDlgMsg(pDlg, 'chkMasterPassword', DM_ENABLE, 0, 0); //SendDlgMsg(pDlg, 'edtPassword', DM_SHOWITEM, 0, 0); SendDlgMsg(pDlg, 'btnChangePassword', DM_SHOWITEM, 1, 0); end else begin Text:= gConnection.Password; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end; Text:= SysToUTF8(gConnection.Path); Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtRemoteDir', DM_SETTEXT, Data, 0); Text:= gConnection.InitCommands; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtInitCommands', DM_SETTEXT, Data, 0); Data:= PtrInt(gConnection.PassiveMode); SendDlgMsg(pDlg, 'chkPassiveMode', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.AgentSSH); SendDlgMsg(pDlg, 'chkAgentSSH', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.CopySCP); SendDlgMsg(pDlg, 'chkCopySCP', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.ShowHiddenItems); SendDlgMsg(pDlg, 'chkShowHidden', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.KeepAliveTransfer); SendDlgMsg(pDlg, 'chkKeepAliveTransfer', DM_SETCHECK, Data, 0); Data:= PtrInt(PAnsiChar(gConnection.PublicKey)); SendDlgMsg(pDlg, 'fnePublicKey', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(gConnection.PrivateKey)); SendDlgMsg(pDlg, 'fnePrivateKey', DM_SETTEXT, Data, 0); if SameText(gConnection.ConnectionName, cQuickConnection) then begin SendDlgMsg(pDlg, 'edtName', DM_ENABLE, 0, 0); SendDlgMsg(pDlg, 'chkMasterPassword', DM_SHOWITEM, 0, 0); end; EnableControls(pDlg); LoadProxyList(pDlg); end; DN_CHANGE: begin if DlgItemName = 'chkMasterPassword' then begin Data:= SendDlgMsg(pDlg, 'chkMasterPassword', DM_GETCHECK, 0, 0); gConnection.MasterPassword:= Boolean(Data); gConnection.PasswordChanged:= True; end else if DlgItemName = 'cmbProtocol' then begin Data:= SendDlgMsg(pDlg, 'cmbProtocol', DM_LISTGETITEMINDEX, 0, 0); case Data of 0: // FTP begin Protocol:= Data; gConnection.OpenSSH:= False; gConnection.OnlySCP:= False; gConnection.FullSSL:= False; gConnection.AutoTLS:= False; end; 1, 2: // FTPS, FTPES begin if (SSLImplementation = TSSLNone) then begin ShowWarningSSL; SendDlgMsg(pDlg, 'cmbProtocol', DM_LISTSETITEMINDEX, Protocol, 0); end else begin Protocol:= Data; gConnection.OpenSSH:= False; gConnection.OnlySCP:= False; gConnection.FullSSL:= (Data = 1); gConnection.AutoTLS:= (Data = 2); end; end; 3, 4: // SSH+SCP, SFTP begin if libssh2 = NilHandle then begin ShowWarningSSH; SendDlgMsg(pDlg, 'cmbProtocol', DM_LISTSETITEMINDEX, Protocol, 0); end else begin Protocol:= Data; gConnection.OpenSSH:= True; gConnection.FullSSL:= False; gConnection.AutoTLS:= False; gConnection.OnlySCP:= (Data = 3); SendDlgMsg(pDlg, 'chkCopySCP', DM_SETCHECK, PtrInt(Data = 3), 0); end; end; end; EnableControls(pDlg); end else if DlgItemName = 'cmbProxy' then begin UpdateProxy(pDlg); ProxyIndex:= SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETITEMINDEX, 0, 0); // Load current proxy settings LoadProxy(pDlg); end; end; DN_CLICK: if DlgItemName = 'btnAnonymous' then begin Text:= 'anonymous'; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); Text:= 'anonymous@example.org'; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end else if DlgItemName = 'btnChangePassword' then begin if ReadPassword(gConnection.ConnectionName, Text) then begin Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); SendDlgMsg(pDlg, 'edtPassword', DM_SHOWITEM, 1, 0); SendDlgMsg(pDlg, 'btnChangePassword', DM_SHOWITEM, 0, 0); SendDlgMsg(pDlg, 'chkMasterPassword', DM_ENABLE, 1, 0); gConnection.PasswordChanged:= True; end; end else if DlgItemName = 'btnAdd' then begin UpdateProxy(pDlg); Proxy:= TFtpProxy.Create; Proxy.ID:= CreateProxyID; Data:= PtrInt(PAnsiChar(Proxy.ID)); ProxyIndex:= SendDlgMsg(pDlg, 'cmbProxy', DM_LISTADD, Data, PtrInt(Proxy)); SendDlgMsg(pDlg, 'cmbProxy', DM_LISTSETITEMINDEX, ProxyIndex, 0); LoadProxy(pDlg); end else if DlgItemName = 'btnDelete' then begin Data:= SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETITEMINDEX, 0, 0); TFtpProxy(SendDlgMsg(pDlg, 'cmbProxy', DM_LISTGETDATA, Data, 0)).Free; SendDlgMsg(pDlg, 'cmbProxy', DM_LISTDELETE, Data, 0); ProxyIndex:= 0; SendDlgMsg(pDlg, 'cmbProxy', DM_LISTSETITEMINDEX, 0, 0); LoadProxy(pDlg); end else if DlgItemName = 'btnOK' then begin Data:= SendDlgMsg(pDlg, 'cmbEncoding', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Encoding:= Text; Data:= SendDlgMsg(pDlg, 'edtName', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.ConnectionName:= RepairConnectionName(Text); Data:= SendDlgMsg(pDlg, 'edtHost', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); if (Length(Text) = 0) or (Length(gConnection.ConnectionName) = 0) then begin gStartupInfo.MessageBox('You MUST at least specify a connection and host name!', nil, MB_OK or MB_ICONERROR); Exit; end; gConnection.Host:= ExtractConnectionHost(Text); gConnection.Port:= ExtractConnectionPort(Text); gConnection.FullSSL:= ExtractConnectionProt(Text) = 'ftps'; Data:= SendDlgMsg(pDlg, 'edtUserName', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.UserName:= Text; Data:= SendDlgMsg(pDlg, 'edtPassword', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Password:= Text; Data:= SendDlgMsg(pDlg, 'chkMasterPassword', DM_GETCHECK, 0, 0); gConnection.MasterPassword:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'edtRemoteDir', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Path:= UTF8ToSys(Text); Data:= SendDlgMsg(pDlg, 'edtInitCommands', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.InitCommands:= Text; Data:= SendDlgMsg(pDlg, 'chkPassiveMode', DM_GETCHECK, 0, 0); gConnection.PassiveMode:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkAgentSSH', DM_GETCHECK, 0, 0); gConnection.AgentSSH:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkCopySCP', DM_GETCHECK, 0, 0); gConnection.CopySCP:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkShowHidden', DM_GETCHECK, 0, 0); gConnection.ShowHiddenItems:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkKeepAliveTransfer', DM_GETCHECK, 0, 0); gConnection.KeepAliveTransfer:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'fnePublicKey', DM_GETTEXT, 0, 0); gConnection.PublicKey:= PAnsiChar(Data); Data:= SendDlgMsg(pDlg, 'fnePrivateKey', DM_GETTEXT, 0, 0); gConnection.PrivateKey:= PAnsiChar(Data); if gConnection.OpenSSH then begin if (Length(gConnection.PublicKey) > 0) and (Length(gConnection.PrivateKey) = 0) or (Length(gConnection.PublicKey) = 0) and (Length(gConnection.PrivateKey) > 0) then begin gStartupInfo.MessageBox('You must enter the location of the public/private key pair!', nil, MB_OK or MB_ICONERROR); Exit; end; end; if gConnection.FullSSL and (InitSSLInterface = False) then begin; ShowWarningSSL; end; SaveProxyList(pDlg); // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then begin FreeProxyList(pDlg); // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end; end;// case end; // with end; function ShowFtpConfDlg(Connection: TConnection): Boolean; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin Result := False; try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin gConnection := Connection; Result := DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/src/FtpConfDlg.lfm�������������������������������������������������0000644�0001750�0000144�00000050731�15104114162�021126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object DialogBox: TDialogBox Left = 431 Height = 482 Top = 141 Width = 440 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'FTP' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 482 ClientWidth = 440 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '3.3.0.0' object btnCancel: TButton AnchorSideTop.Control = PageControl AnchorSideTop.Side = asrBottom AnchorSideRight.Control = PageControl AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 355 Height = 25 Top = 438 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Cancel = True Caption = 'Cancel' ModalResult = 2 TabOrder = 2 OnClick = ButtonClick end object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideBottom.Side = asrBottom Left = 268 Height = 25 Top = 438 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Right = 12 Caption = '&OK' TabOrder = 1 OnClick = ButtonClick end object PageControl: TPageControl AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 10 Height = 416 Top = 10 Width = 420 ActivePage = tsGeneral TabIndex = 0 TabOrder = 0 object tsGeneral: TTabSheet Caption = 'General' ClientHeight = 381 ClientWidth = 416 object lblName: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtName AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 16 Width = 112 BorderSpacing.Left = 12 Caption = 'Connection name:' ParentColor = False end object edtName: TEdit AnchorSideLeft.Control = lblName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = tsGeneral AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 12 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 18 BorderSpacing.Top = 12 BorderSpacing.Right = 12 TabOrder = 0 end object lblHost: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtHost AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 48 Width = 70 BorderSpacing.Left = 12 Caption = 'Host[:Port]:' ParentColor = False end object edtHost: TEdit AnchorSideLeft.Control = edtName AnchorSideTop.Control = edtName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtName AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 44 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblProtocol: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = cmbProtocol AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 74 Width = 48 BorderSpacing.Left = 12 Caption = 'Protocol:' end object cmbProtocol: TComboBox AnchorSideLeft.Control = edtHost AnchorSideTop.Control = edtHost AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtHost AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 70 Width = 274 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 Items.Strings = ( 'FTP' 'FTPS' 'FTPES' 'SSH+SCP' 'SFTP' ) Style = csDropDownList TabOrder = 2 OnChange = ComboBoxChange end object lblUserName: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 111 Width = 71 BorderSpacing.Left = 12 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = btnAnonymous AnchorSideTop.Control = btnAnonymous AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAnonymous AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 107 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 4 end object btnAnonymous: TButton AnchorSideLeft.Control = edtHost AnchorSideTop.Control = cmbProtocol AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtHost AnchorSideRight.Side = asrBottom Left = 142 Height = 25 Top = 76 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Anonymous' TabOrder = 3 OnClick = ButtonClick end object edtRemoteDir: TEdit AnchorSideLeft.Control = edtPassword AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 235 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 9 end object lblRemoteDir: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtRemoteDir AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 239 Width = 71 BorderSpacing.Left = 12 Caption = 'Remote dir:' ParentColor = False end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 139 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 5 end object lblPassword: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 143 Width = 63 BorderSpacing.Left = 12 Caption = 'Password:' ParentColor = False end object chkMasterPassword: TCheckBox AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = lblPassword AnchorSideTop.Side = asrBottom Left = 12 Height = 24 Top = 173 Width = 306 BorderSpacing.Left = 12 BorderSpacing.Top = 12 Caption = 'Use master password to protect the password' TabOrder = 7 OnChange = CheckBoxChange end object btnChangePassword: TButton AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 142 Height = 25 Top = 139 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Change password...' TabOrder = 6 Visible = False OnClick = ButtonClick end object edtInitCommands: TEdit AnchorSideLeft.Control = edtRemoteDir AnchorSideTop.Control = edtRemoteDir AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtRemoteDir AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 267 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 10 end object lblInitCommands: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = edtInitCommands AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 271 Width = 96 BorderSpacing.Left = 12 Caption = 'Init commands:' ParentColor = False end object cmbEncoding: TComboBox AnchorSideLeft.Control = edtPassword AnchorSideTop.Control = chkMasterPassword AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 142 Height = 26 Top = 203 Width = 264 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 18 ItemIndex = 0 Items.Strings = ( 'Auto' 'UTF-8' 'CP1250' 'CP1251' 'CP1252' 'CP1253' 'CP1254' 'CP1255' 'CP1256' 'CP1257' 'CP1258' 'CP437' 'CP850' 'CP852' 'CP866' 'CP874' 'CP932' 'CP936' 'CP949' 'CP950' 'KOI8-R' 'ISO-8859-1' 'ISO-8859-2' 'ISO-8859-15' ) Style = csDropDownList TabOrder = 8 Text = 'Auto' end object lblEncoding: TLabel AnchorSideLeft.Control = tsGeneral AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrCenter Left = 12 Height = 18 Top = 207 Width = 61 BorderSpacing.Left = 12 Caption = 'Encoding:' ParentColor = False end end object tsAdvanced: TTabSheet Caption = 'Advanced' ClientHeight = 388 ClientWidth = 412 object gbFTP: TGroupBox AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = tsAdvanced AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom Left = 6 Height = 89 Top = 6 Width = 400 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'FTP' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 62 ClientWidth = 394 TabOrder = 0 object chkPassiveMode: TCheckBox AnchorSideLeft.Control = gbFTP AnchorSideTop.Control = gbFTP Left = 6 Height = 19 Top = 6 Width = 299 Caption = 'Use passive mode for transfers (like a WWW browser)' Checked = True State = cbChecked TabOrder = 0 end object chkShowHidden: TCheckBox AnchorSideLeft.Control = chkPassiveMode AnchorSideTop.Control = chkPassiveMode AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 25 Width = 265 Caption = 'Use ''LIST -la'' command to reveal hidden items' TabOrder = 1 end object chkKeepAliveTransfer: TCheckBox AnchorSideLeft.Control = chkPassiveMode AnchorSideTop.Control = chkShowHidden AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 44 Width = 188 Caption = 'Send keepalive during a transfer' TabOrder = 2 end end object gbSSH: TGroupBox AnchorSideLeft.Control = gbFTP AnchorSideTop.Control = gbFTP AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFTP AnchorSideRight.Side = asrBottom Left = 6 Height = 204 Top = 101 Width = 400 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'SSH' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 184 ClientWidth = 396 TabOrder = 1 object chkAgentSSH: TCheckBox AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = gbSSH Left = 6 Height = 19 Top = 6 Width = 178 Caption = 'Use SSH-agent authentication' TabOrder = 0 end object chkCopySCP: TCheckBox AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = chkAgentSSH AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 25 Width = 192 Caption = 'Copy using SCP protocol (faster)' TabOrder = 1 end object DividerBevel: TDividerBevel AnchorSideTop.Control = chkCopySCP AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSSH AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 50 Width = 384 Caption = 'Client certificate for authentication:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ParentFont = False end object lblPublicKey: TLabel AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = DividerBevel AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 71 Width = 116 BorderSpacing.Top = 6 Caption = 'Public key file (*.pub):' ParentColor = False end object fnePublicKey: TFileNameEdit AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = lblPublicKey AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSSH AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 90 Width = 384 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 2 end object lblPrivateKey: TLabel AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = fnePublicKey AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 117 Width = 122 BorderSpacing.Top = 4 Caption = 'Private key file (*.pem):' ParentColor = False end object fnePrivateKey: TFileNameEdit AnchorSideLeft.Control = gbSSH AnchorSideTop.Control = lblPrivateKey AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSSH AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 136 Width = 384 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 3 end end end object tsProxy: TTabSheet Caption = 'Proxy' ClientHeight = 388 ClientWidth = 412 object pnlProxy: TPanel Left = 0 Height = 56 Top = 0 Width = 412 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 56 ClientWidth = 412 TabOrder = 0 object lblProxy: TLabel AnchorSideLeft.Control = pnlProxy AnchorSideTop.Control = pnlProxy Left = 4 Height = 15 Top = 4 Width = 134 Caption = 'Use firewall (proxy server)' ParentColor = False end object cmbProxy: TComboBox AnchorSideLeft.Control = pnlProxy AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAdd Left = 4 Height = 23 Top = 28 Width = 339 Anchors = [akTop, akLeft, akRight] ItemHeight = 26 Style = csDropDownList TabOrder = 0 OnChange = ComboBoxChange end object btnAdd: TBitBtn AnchorSideTop.Control = cmbProxy AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnDelete Left = 343 Height = 25 Top = 27 Width = 34 Anchors = [akTop, akRight] AutoSize = True Caption = '+' Font.Style = [fsBold] OnClick = ButtonClick ParentFont = False TabOrder = 1 end object btnDelete: TBitBtn AnchorSideTop.Control = cmbProxy AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlProxy AnchorSideRight.Side = asrBottom Left = 377 Height = 25 Top = 27 Width = 31 Anchors = [akTop, akRight] AutoSize = True Caption = '-' Font.Style = [fsBold] OnClick = ButtonClick ParentFont = False TabOrder = 2 end end object rgProxyType: TRadioGroup AnchorSideLeft.Control = tsProxy AnchorSideTop.Control = pnlProxy AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsProxy AnchorSideRight.Side = asrBottom Left = 0 Height = 77 Top = 56 Width = 412 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Connect method' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 406 Items.Strings = ( 'SOCKS4' 'SOCKS5' 'HTTP CONNECT' ) TabOrder = 1 end object gbLogon: TGroupBox AnchorSideLeft.Control = tsProxy AnchorSideTop.Control = rgProxyType AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsProxy AnchorSideRight.Side = asrBottom Left = 0 Height = 101 Top = 133 Width = 412 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Firewall logon' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 74 ClientWidth = 406 TabOrder = 2 object lblProxyHost: TLabel Left = 6 Height = 23 Top = 6 Width = 189 Caption = '&Host name:' ParentColor = False end object edtProxyHost: TEdit Left = 195 Height = 23 Top = 6 Width = 207 TabOrder = 0 end object lblProxyUser: TLabel Left = 6 Height = 23 Top = 29 Width = 189 Caption = '&User name:' ParentColor = False end object edtProxyUser: TEdit Left = 195 Height = 23 Top = 29 Width = 207 TabOrder = 1 end object lblProxyPassword: TLabel Left = 6 Height = 23 Top = 52 Width = 189 Caption = '&Password:' ParentColor = False end object edtProxyPassword: TEdit Left = 195 Height = 23 Top = 52 Width = 207 TabOrder = 2 end end end end end ���������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017426� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.zh_CN.po����������������������������������������������0000644�0001750�0000144�00000006454�15104114162�021570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.btnadd.caption msgid "+" msgstr "" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "匿名" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "取消" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "更改密码..." #: tdialogbox.btndelete.caption msgid "-" msgstr "" #: tdialogbox.btnok.caption msgid "&OK" msgstr "确定(&O)" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "使用 SCP 协议复制(更快)" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "在传输期间发送 keepalive" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "使用主密码保护密码" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "使用被动模式进行传输(像 WWW浏览器)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "使用'LIST -la'命令来显示隐藏的项目" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "自动" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "用于身份验证的客户端证书:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "防火墙登录" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "编码:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "主机[:端口]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "初始化命令:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "连接名称:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "密码:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "私钥文件(*.pem):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "协议:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "使用防火墙(代理服务器)" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "主机名(&H):" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "密码(&P):" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "用户名(&U):" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "公钥文件(*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "远程目录:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "用户名:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "连接方式" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "高级" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "常规" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "代理" #: tfrmfileproperties.caption msgid "Properties" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.ru.po�������������������������������������������������0000644�0001750�0000144�00000007644�15104114162�021217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.btnadd.caption msgid "+" msgstr "+" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "Анонимно" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "Отмена" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "Изменить пароль..." #: tdialogbox.btndelete.caption msgid "-" msgstr "-" #: tdialogbox.btnok.caption msgid "&OK" msgstr "&ОК" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "Использовать SSH-агент" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "Копировать используя протокол SCP (быстрее)" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "Поддерживать соединение во время передачи" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Использовать &главный пароль для защиты пароля" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "Пассивный режим о&бмена (как Web-браузер)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "Использовать 'LIST -la' для скрытых элементов" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "Аутентификация по клиентскому сертификату:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "Соединение через прокси" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "SSH" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "Кодировка:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "Сервер [:Порт]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "Послать &команды:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "Им&я соединения:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "&Пароль:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "Файл приватного ключа (*.pem):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "Протокол:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "&Использовать прокси-сервер" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "Сервер [:Порт]:" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "&Пароль:" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "&Имя пользователя:" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "Файл публичного ключа (*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "Уд&алённый каталог:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "&Имя пользователя:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "Способ соединения" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "Расширенные" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "Общие" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "Прокси" #: tfrmfileproperties.caption msgid "Properties" msgstr "Свойства" ��������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.pot���������������������������������������������������0000644�0001750�0000144�00000005452�15104114162�020751� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.btnadd.caption msgid "+" msgstr "" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "" #: tdialogbox.btndelete.caption msgid "-" msgstr "" #: tdialogbox.btnok.caption msgid "&OK" msgstr "" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "" #: tfrmfileproperties.caption msgid "Properties" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.ko.po�������������������������������������������������0000644�0001750�0000144�00000007231�15104114162�021172� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: VenusGirl: https://venusgirls.tistory.com/\n" "Language-Team: 비너스걸: https://venusgirls.tistory.com/\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국어\n" "X-Generator: Poedit 3.4.2\n" #: tdialogbox.btnadd.caption msgid "+" msgstr "+" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "익명" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "취소" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "암호 변경..." #: tdialogbox.btndelete.caption msgid "-" msgstr "-" #: tdialogbox.btnok.caption msgid "&OK" msgstr "확인(&O)" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "SSH 에이전트 인증 사용" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "SCP 프로토콜을 사용한 복사 (더 빠름)" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "전송 중 킵얼라이브 전송" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "마스터 암호를 사용하여 암호 보호" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "전송 시 패시브 모드 사용 (예: WWW 브라우저)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "'LIST -la' 명령을 사용하여 숨겨진 항목 표시" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "자동" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "인증을 위한 클라이언트 인증서:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "방화벽 로그온" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "SSH" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "인코딩:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "호스트[:포트]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "초기화 명령:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "연결 이름:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "암호:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "개인 키 파일 (*.pem):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "프로토콜:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "방화벽 (프록시 서버) 사용" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "호스트 이름(&H):" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "암호(&P):" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "사용자 이름(&U):" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "개인 키 파일 (*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "원격 디렉터리:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "사용자 이름:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "연결 방법" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "고급" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "일반" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "프록시" #: tfrmfileproperties.caption msgid "Properties" msgstr "속성" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.hu.po�������������������������������������������������0000644�0001750�0000144�00000007360�15104114162�021200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: Double Commander FTP WFX plugin\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Forge Studios Ltd. < kroy <kroysoft@citromail.hu>>\n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "X-Generator: Poedit 1.8.8\n" #: tdialogbox.btnadd.caption msgid "+" msgstr "+" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "Vendég" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "Mégsem" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "Jelszó módosítása..." #: tdialogbox.btndelete.caption msgid "-" msgstr "-" #: tdialogbox.btnok.caption msgid "&OK" msgstr "&OK" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "SCP protokoll a másoláshoz (gyorsabb)" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "Életjel küldése az átvitel alatt" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Mesterjelszóval védett jelszó használata" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "Passzív módú átvitel használata (mint egy WWW böngésző)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "A 'LIST -la' parancs mutassa a rejtett elemeket" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "Automatikus" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "Ügyfél hitelesítő tanúsítványa:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "Tűzfal belépés" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "SSH" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "Kódolás:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "Kiszolgáló[:port]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "Kezdőparancsok:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "Kapcsolat neve:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "Jelszó:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "Privát kulcs fájl (*.pub):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "Protokoll:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "Tűzfal használata (proxy kiszolgáló)" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "&Kiszolgálónév:" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "&Jelszó:" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "&Felhasználónév:" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "Publikus kulcs fájl (*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "Távoli könyvtár:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "Felhasználónév:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "Csatlakozás módja" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "Haladó" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "Általános" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "Proxy" #: tfrmfileproperties.caption msgid "Properties" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.de.po�������������������������������������������������0000644�0001750�0000144�00000007544�15104114162�021160� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander Plugin 'ftp'\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2024-11-01 18:01+0100\n" "Last-Translator: ㋡ <braass@mail.de>\n" "Language-Team: \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: tdialogbox.btnadd.caption msgid "+" msgstr "+" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "Anonym" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "Abbrechen" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "Passwort ändern ..." #: tdialogbox.btndelete.caption msgid "-" msgstr "-" #: tdialogbox.btnok.caption msgid "&OK" msgstr "&OK" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "SSH-Agent-Authentifizierung verwenden" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "Kopieren mit SCP (Secure Copy Protocol) -> schneller" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "'Keepalive'-Pakete senden aktivieren" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Master-Passwort zum Schutz des Passworts verwenden" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "Passiven Modus für Übertragungen verwenden (wie ein Web-Browser)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "'LIST -la' verwenden um verborgene Elemente anzuzeigen" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "Auto" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "Client-Zertifikat für die Authentifizierung:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "Firewall-Anmeldung" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "SSH" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "Kodierung:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "Host[:Port]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "Startbefehle:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "Verbindungsname:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "Passwort:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "Datei mit privatem Schlüssel (*.pem):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "Protokoll:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "Firewall aktivieren (Proxy-Server)" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "Rechnername:" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "&Passwort:" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "Ben&utzername:" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "Datei mit öffentlichem Schlüssel (*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "Remote-Verzeichnis:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "Benutzername:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "Verbindungsmethode" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "Weiterführend" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "Allgemein" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "Proxy" #: tfrmfileproperties.caption msgid "Properties" msgstr "Eigenschaften" ������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/language/ftp.be.po�������������������������������������������������0000644�0001750�0000144�00000010420�15104114162�021141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Crowdin-Project: b5aaebc75354984d7cee90405a1f6642\n" "X-Crowdin-Project-ID: 7\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /l10n_Translation/plugins/wfx/ftp/language/ftp.po\n" "X-Crowdin-File-ID: 3352\n" "Project-Id-Version: b5aaebc75354984d7cee90405a1f6642\n" "Language-Team: Belarusian\n" "Language: be_BY\n" "PO-Revision-Date: 2022-09-25 05:45\n" #: tdialogbox.btnadd.caption msgid "+" msgstr "+" #: tdialogbox.btnanonymous.caption msgid "Anonymous" msgstr "Ананімна" #: tdialogbox.btncancel.caption msgid "Cancel" msgstr "Скасаваць" #: tdialogbox.btnchangepassword.caption msgid "Change password..." msgstr "Змяніць пароль..." #: tdialogbox.btndelete.caption msgid "-" msgstr "-" #: tdialogbox.btnok.caption msgid "&OK" msgstr "&Добра" #: tdialogbox.caption msgctxt "tdialogbox.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.chkagentssh.caption msgid "Use SSH-agent authentication" msgstr "" #: tdialogbox.chkcopyscp.caption msgid "Copy using SCP protocol (faster)" msgstr "Капіяваць з дапамогай пратакола SCP (хутчэй)" #: tdialogbox.chkkeepalivetransfer.caption msgid "Send keepalive during a transfer" msgstr "Падтрымліваць злучэнне падчас перадачы" #: tdialogbox.chkmasterpassword.caption msgid "Use master password to protect the password" msgstr "Выкарыcтоўваць &галоўны пароль для абароны пароля" #: tdialogbox.chkpassivemode.caption msgid "Use passive mode for transfers (like a WWW browser)" msgstr "Пасіўны рэжым &перадачы (як вэб-браўзер)" #: tdialogbox.chkshowhidden.caption msgid "Use 'LIST -la' command to reveal hidden items" msgstr "Выкарыcтоўваць 'LIST -la' для схаваных элементаў" #: tdialogbox.cmbencoding.text msgid "Auto" msgstr "Аўтаматычна" #: tdialogbox.dividerbevel.caption msgid "Client certificate for authentication:" msgstr "Аўтэнтыфікацыя па кліенцкім сертыфікаце:" #: tdialogbox.gbftp.caption msgctxt "tdialogbox.gbftp.caption" msgid "FTP" msgstr "FTP" #: tdialogbox.gblogon.caption msgid "Firewall logon" msgstr "Злучэнне праз проксі" #: tdialogbox.gbssh.caption msgctxt "tdialogbox.gbssh.caption" msgid "SSH" msgstr "SSH" #: tdialogbox.lblencoding.caption msgid "Encoding:" msgstr "Кадаванне:" #: tdialogbox.lblhost.caption msgid "Host[:Port]:" msgstr "Сервер [:Порт]:" #: tdialogbox.lblinitcommands.caption msgid "Init commands:" msgstr "Адправіць &загады:" #: tdialogbox.lblname.caption msgid "Connection name:" msgstr "&Назва злучэння:" #: tdialogbox.lblpassword.caption msgid "Password:" msgstr "&Пароль:" #: tdialogbox.lblprivatekey.caption msgid "Private key file (*.pem):" msgstr "Файл прыватнага ключа (*.pem):" #: tdialogbox.lblprotocol.caption msgid "Protocol:" msgstr "Пратакол:" #: tdialogbox.lblproxy.caption msgid "Use firewall (proxy server)" msgstr "&Выкарыcтоўваць проксі-сервер" #: tdialogbox.lblproxyhost.caption msgid "&Host name:" msgstr "&Назва хоста:" #: tdialogbox.lblproxypassword.caption msgid "&Password:" msgstr "&Пароль:" #: tdialogbox.lblproxyuser.caption msgid "&User name:" msgstr "&Імя карыстальніка:" #: tdialogbox.lblpublickey.caption msgid "Public key file (*.pub):" msgstr "Файл публічнага ключа (*.pub):" #: tdialogbox.lblremotedir.caption msgid "Remote dir:" msgstr "A&длеглы каталог:" #: tdialogbox.lblusername.caption msgid "User name:" msgstr "&Імя карыстальніка:" #: tdialogbox.rgproxytype.caption msgid "Connect method" msgstr "Спосаб злучэння" #: tdialogbox.tsadvanced.caption msgid "Advanced" msgstr "Дадатковыя" #: tdialogbox.tsgeneral.caption msgid "General" msgstr "Асноўныя" #: tdialogbox.tsproxy.caption msgid "Proxy" msgstr "Проксі" #: tfrmfileproperties.caption msgid "Properties" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/COPYING.LESSER.txt�������������������������������������������������0000644�0001750�0000144�00000063642�15104114162�020523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ����������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wfx/ftp/COPYING.GPL.txt����������������������������������������������������0000644�0001750�0000144�00000043254�15104114162�020145� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015050� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016704� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017473� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/src/TextLine.lpr����������������������������������������������0000644�0001750�0000144�00000010425�15104114162�021750� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Wdx plugin is intended to show one line of a text file Copyright (C) 2016-2017 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } library TextLine; {$mode objfpc}{$H+} {$include calling.inc} uses SysUtils, Classes, StreamEx, LazUTF8, WdxPlugin, DCClassesUtf8, DCConvertEncoding, DCOSUtils; const DETECT_STRING = '(EXT="TXT") | (EXT="LOG") | (EXT="INI") | (EXT="XML")'; var FReplace: Boolean = False; FSkipEmpty: Boolean = False; FReplaces: array[1..10, 1..2] of String; function ContentGetSupportedField(FieldIndex: Integer; FieldName, Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; begin if (FieldIndex < 0) or (FieldIndex > 9) then begin Result := FT_NOMOREFIELDS; Exit; end; StrLCopy(FieldName, PAnsiChar(IntToStr(FieldIndex + 1)), MaxLen - 1); StrLCopy(Units, 'ANSI|OEM|UTF-8', MaxLen - 1); Result := FT_STRINGW; end; function ContentGetValueW(FileName: PWideChar; FieldIndex, UnitIndex: Integer; FieldValue: PWideChar; MaxLen, Flags: Integer): Integer; dcpcall; var Value: String; Index: Integer; FileNameU: String; Stream: TFileStreamEx; Reader: TStreamReader; begin if (FieldIndex < 0) or (FieldIndex > 9) then begin Result:= ft_nosuchfield; Exit; end; FileNameU:= UTF16ToUTF8(UnicodeString(FileName)); if not mbFileExists(FileNameU) then begin Result:= ft_fileerror; Exit; end; Result:= ft_fieldempty; try Stream:= TFileStreamEx.Create(FileNameU, fmOpenRead or fmShareDenyNone); try Index:= -1; Reader:= TStreamReader.Create(Stream, BUFFER_SIZE, True); repeat Value:= EmptyStr; if Reader.Eof then Break; Value:= Trim(Reader.ReadLine); if (Length(Value) = 0) and FSkipEmpty then Continue; Inc(Index); until Index = FieldIndex; finally Reader.Free; end; except Exit(ft_fileerror); end; if Value = EmptyStr then Exit; case UnitIndex of 0: Value:= CeAnsiToUtf8(Value); 1: Value:= CeOemToUtf8(Value); end; if FReplace and (Length(Value) > 0) then begin for Flags:= Low(FReplaces) to High(FReplaces) do begin if Length(FReplaces[Flags, 1]) > 0 then Value:= StringReplace(Value, FReplaces[Flags, 1], FReplaces[Flags, 2], [rfReplaceAll]); end; end; if Length(Value) > 0 then begin MaxLen:= MaxLen div SizeOf(WideChar) - 1; StrPLCopy(FieldValue, UTF8ToUTF16(Value), MaxLen); Result:= ft_stringw; end; end; procedure ContentSetDefaultParams(dps: PContentDefaultParamStruct); dcpcall; var S: String; Index: Integer; Ini: TIniFileEx; FileName: String; begin FileName:= CeSysToUtf8(dps^.DefaultIniName); FileName:= ExtractFilePath(FileName) + 'textline.ini'; try Ini:= TIniFileEx.Create(FileName, fmOpenRead); try FSkipEmpty:= Ini.ReadBool('Options', 'SkipEmpty', FSkipEmpty); for Index:= Low(FReplaces) to High(FReplaces) do begin S:= Ini.ReadString('Replaces', 'S' + IntToStr(Index), '='); FReplaces[Index, 1]:= Copy(S, 1, Pos('=', S) - 1); FReplaces[Index, 2]:= Copy(S, Pos('=', S) + 1, MaxInt); if (FReplace = False) then FReplace:= (S <> '='); end; finally Ini.Free; end; except // Ignore end; end; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DetectString, DETECT_STRING, MaxLen - 1); end; exports ContentGetSupportedField, ContentGetValueW, ContentGetDetectString, ContentSetDefaultParams; begin end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/src/TextLine.lpi����������������������������������������������0000644�0001750�0000144�00000010164�15104114162�021737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="TextLine"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../textline.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"/> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="TextLine.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../textline.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/README.txt����������������������������������������������������0000644�0001750�0000144�00000001130�15104114162�020375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Text Line Content plugin for Double Commander Description ----------- Plugin is intended to show one line of a text file. You can select line number and text encoding, you can replace one substring by another. Settings are stored in textline.ini. Without settings file plugin don't skip empty lines and doesn't replace anything. textline.ini example: [Options] ;skip empty lines SkipEmpty=0 ;a list of substitutions in the format S<n>=<original_text>=<new_text> [Replaces] ;replace "hello" by nothing ;S1=hello= ;replace "test" by "hello" ;S2=test=hello S1= S2= S3= S4= S5= S6= S7= S8= S9= S10= ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/COPYING.LESSER.txt��������������������������������������������0000644�0001750�0000144�00000063642�15104114162�021564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ����������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/textline/COPYING.GPL.txt�����������������������������������������������0000644�0001750�0000144�00000043254�15104114162�021206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/scripts/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016537� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/scripts/textlinewdx.lua������������������������������������������������0000644�0001750�0000144�00000001532�15104114162�021622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function ContentGetSupportedField(Index) if (Index == 0) then return 'Line1','', 8; -- FieldName,Units,ft_string elseif (Index == 1) then return 'Line2','', 8; elseif (Index == 2) then return 'Line3','', 8; elseif (Index == 3) then return 'Line4','', 8; elseif (Index == 4) then return 'Line5','', 8; end return '','', 0; -- ft_nomorefields end function ContentGetDetectString() return '(EXT="TXT") | (EXT="INI")'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) if (FieldIndex > 4) then return nil; end local f=io.open(FileName,"r"); if not f then return nil; end local ii = 0; for line in f:lines() do if (ii == FieldIndex) then f:close(); return line; end ii = ii + 1; end f:close(); return nil; end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/scripts/simplewdx.lua��������������������������������������������������0000644�0001750�0000144�00000002022�15104114162�021252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Simple example of how to write wdx-scripts function ContentSetDefaultParams(IniFileName,PlugApiVerHi,PlugApiVerLow) --Initialization code here end function ContentGetSupportedField(Index) if (Index == 0) then return 'FieldName0','', 8; -- FieldName,Units,ft_string elseif (Index == 1) then return 'FieldName1','', 8; elseif (Index == 2) then return 'FieldName2','', 8; end return '','', 0; -- ft_nomorefields end function ContentGetDefaultSortOrder(FieldIndex) return 1; --or -1 end function ContentGetDetectString() return '(EXT="TXT") | (EXT="INI")'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) if (FieldIndex == 0) then return "FieldValue0"; -- return string elseif (FieldIndex == 1) then return "FieldValue1"; elseif (FieldIndex == 2) then return "FieldValue2"; end return nil; -- invalid end --function ContentGetSupportedFieldFlags(FieldIndex) --return 0; -- return flags --end --function ContentStopGetValue(Filename) --end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/scripts/fulltextodtwdx.lua���������������������������������������������0000644�0001750�0000144�00000001213�15104114162�022340� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Finds text in OpenDocument Text (.odt) -- Requires: odt2txt tool function ContentGetSupportedField(Index) if (Index == 0) then return 'Text','', 9; -- FieldName,Units,ft_fulltext end return '','', 0; -- ft_nomorefields end function ContentGetDetectString() return '(EXT="ODT")'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) if (FieldIndex > 0) then return nil; end if (UnitIndex == 0) then local f = io.popen ("odt2txt " .. FileName, 'r') if not f then return nil; end local ss = f:read("*a") f:close() return ss; end; return nil; end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/scripts/descriptionwdx.lua���������������������������������������������0000644�0001750�0000144�00000002126�15104114162�022311� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- This script reads file descriptions from descript.ion function ContentGetSupportedField(Index) if (Index > 0) then return '','', 0; -- ft_nomorefields end return 'Description','', 8; -- FieldName,Units,ft_string end function ContentGetDefaultSortOrder(FieldIndex) return 1; --or -1 end function ContentGetDetectString() return 'EXT="*"'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) if FieldIndex==0 then --Linux paths only local pat="/.*/" i,j=string.find(FileName,pat); if i~=nil then local path=string.sub(FileName,i,j); fn=string.sub(FileName,string.len(path)+1,-1); if fn~=".." then return GetDesc(path,fn); else return ""; end end end return nil; end function GetDesc(Path,Name) local f=io.open(Path..'descript.ion',"r"); if not f then return nil; end for line in f:lines() do if string.find(line,Name..' ') then f:close(); return string.sub(line,string.len(Name..' ')+1,-1); end end f:close(); return nil; end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016530� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017317� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/rpm_wdx_intf.pas�������������������������������������������0000644�0001750�0000144�00000012617�15104114162�022533� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit rpm_wdx_intf; {$mode delphi} {$include calling.inc} interface procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); dcpcall; export; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; export; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; export; implementation uses SysUtils, WdxPlugin, rpm_io, rpm_def; const IDX_PACKAGE = 0; IDX_VERSION = 1; IDX_RELEASE = 2; IDX_DISTRIBUTION = 3; IDX_VENDER = 4; IDX_LICENSE = 5; IDX_PACKAGER = 6; IDX_GROUP = 7; IDX_OS = 8; IDX_ARCH = 9; IDX_SOURCE_RPM = 10; IDX_SUMMARY = 11; IDX_DESCRIPTION = 12; FIELDS_COUNT = 13; // IDX_BUILDTIME , // IDX_ARCHIVE_SIZE var CurrentPackageFile: String; FileInfoCache : RPM_InfoRec; //cache procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); begin StrPCopy(DetectString, 'EXT="RPM"'); end; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; var Field: String; begin StrPCopy(Units, ''); // if FieldIndex =IDX_ARCHIVE_SIZE then // begin // StrPCopy(FieldName, FieldList.Strings[FieldIndex]); // StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); // Result := FT_NUMERIC_64; // exit; // end // else if FieldIndex >= FIELDS_COUNT then begin Result := FT_NOMOREFIELDS; exit; end; Result := FT_STRING; case FieldIndex of IDX_PACKAGE: Field := 'Package'; IDX_VERSION: Field := 'Version'; IDX_RELEASE: Field := 'Release'; IDX_DISTRIBUTION:Field := 'Distribution'; IDX_VENDER: Field := 'Vender'; IDX_LICENSE: Field := 'License'; IDX_PACKAGER: Field := 'Packager'; IDX_GROUP: Field := 'Group'; IDX_OS: Field := 'OS'; IDX_ARCH: Field := 'Arch'; IDX_SOURCE_RPM: Field := 'Source-RPM'; IDX_SUMMARY: Field := 'Summary'; IDX_DESCRIPTION: Field := 'Description'; // IDX_BUILD_TIME: Field := 'Build-Time'; // IDX_ARCHIVE_SIZE: // begin // Field := 'Archive-Size'; // StrPCopy(FieldName, Field); // StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); // Result := FT_NUMERIC_64; // exit; end; StrPCopy(FieldName, Field); end; function ContentGetValue(FileName:pchar; FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; function ReadRPMInfo(filename: String): integer; var fh: integer; fh_file: file; r_lead: RPM_Lead; signature, r_header: RPM_Header; //r_info: RPM_InfoRec; begin Result := -1; fh := FileOpen(filename, fmOpenRead or fmShareDenyNone); if fh=-1 then exit; AssignFile(fh_file, filename); try FileMode := 0; Reset(fh_file, 1); if IOResult <> 0 then exit; RPM_ReadLead(fh_file, r_lead); if r_lead.magic <> RPM_MAGIC then exit; if not RPM_ReadSignature(fh_file, r_lead.signature_type, signature) then exit; if not RPM_ReadHeader(fh_file, false, r_header, FileInfoCache) then exit; Result := 0; finally CloseFile(fh_file); FileClose(fh); //oppsition to FileOpen end; end; function EnsureLength(S: string; nMaxlen: integer): string; begin Result := S; if length(Result)>=nMaxlen then begin Result := Copy(Result, 1, nMaxlen-4); Result := Result + '...'; end; end; var Value : String; begin Result := FT_FILEERROR; if not FileExists(FileName) then exit; if CurrentPackageFile<>FileName then begin if ReadRPMInfo(FileName) <0 then exit; CurrentPackageFile := FileName; end {$IFDEF GDEBUG} else SendDebug('Cached info reused for '+FileName); {$ENDIF}; if (FieldIndex>=FIELDS_COUNT) then begin Result := FT_NOSUCHFIELD; exit; end; Result := FT_STRING; case FieldIndex of IDX_PACKAGE: Value := FileInfoCache.name; IDX_VERSION: Value := FileInfoCache.version; IDX_RELEASE: Value := FileInfoCache.release; IDX_DISTRIBUTION: Value := FileInfoCache.distribution; IDX_VENDER: Value := FileInfoCache.version; IDX_LICENSE: Value := FileInfoCache.license; IDX_PACKAGER: Value := FileInfoCache.packager; IDX_GROUP: Value := FileInfoCache.group; IDX_OS: Value := FileInfoCache.os; IDX_ARCH: Value := FileInfoCache.arch; IDX_SOURCE_RPM: Value := FileInfoCache.sourcerpm; IDX_SUMMARY: Value := FileInfoCache.summary; IDX_DESCRIPTION: Value := FileINfoCache.description; // IDX_BUILD_TIME: // //??? // IDX_ARCHIVE_SIZE: // Result := FT_NUMERIC_64; // size := FileInfoCache.archive_size; // case UnitIndex of // 0: //bytes // size := size * 1024; // // 1: //kbytes // // pass // 2: //mbytes // size := size div 1024; // 3: //gbytes // size := size div (1024 * 1024); // end; // exit; else Result := FT_FIELDEMPTY; exit; end; StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); end; initialization CurrentPackageFile := ''; end. �����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/rpm_wdx.lpi������������������������������������������������0000644�0001750�0000144�00000011567�15104114162�021517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="RPM WDX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\rpm_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="4"> <Unit0> <Filename Value="rpm_wdx.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="rpm_io.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="rpm_wdx_intf.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="rpm_def.pas"/> <IsPartOfProject Value="True"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\rpm_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/rpm_wdx.dpr������������������������������������������������0000644�0001750�0000144�00000001556�15104114162�021515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library rpm_wdx; {$MODE Delphi} { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes, rpm_io in 'rpm_io.pas', rpm_wdx_intf in 'rpm_wdx_intf.pas', rpm_def in 'rpm_def.pas'; {$E wdx} exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/rpm_io.pas�������������������������������������������������0000644�0001750�0000144�00000017247�15104114162�021324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** {$A-,I-} unit rpm_io; {$MODE Delphi} interface uses SysUtils, rpm_def; type TStrBuf = array[1..260] of Char; function RPM_ReadLead(var f : file; var lead : RPM_Lead) : Boolean; function RPM_ReadSignature(var f : file; sig_type : Word; var signature : RPM_Header) : Boolean; function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec) : Boolean; function RPM_ReadEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo) : Boolean; function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec) : Boolean; procedure swap_value(var value; size : Integer); procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function get_archivename(var fname : String;is_bz2file:boolean) : String; function read_string(var f : file; var s : AnsiString) : Boolean; function read_int32(var f : file; var int32 : LongWord) : Boolean; implementation uses Classes; procedure swap_value(var value; size:Integer); type byte_array = array[1..MaxInt] of Byte; var i : Integer; avalue : Byte; begin for i:=1 to size div 2 do begin avalue := byte_array(value)[i]; byte_array(value)[i] := byte_array(value)[size + 1 - i]; byte_array(value)[size + 1 - i] := avalue; end; end; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function get_archivename(var fname : String;is_bz2file:boolean) : String; var tmp_str : String; i_char : Integer; fgFound : Boolean; begin tmp_str := ExtractFileName(fname); fgFound := False; for i_char := Length(tmp_str) downto 1 do if tmp_str[i_char] = '.' then begin fgFound := True; Break; end; if fgFound then SetLength(tmp_str, i_char - 1); if is_bz2file then tmp_str := tmp_str + '.cpio.bz2' else tmp_str := tmp_str + '.cpio.gz'; Result := tmp_str; end; function RPM_ReadLead; begin Result := False; BlockRead(f, lead, Sizeof(Lead)); if IOResult = 0 then Result := True; with lead do begin swap_value(rpmtype, 2); swap_value(archnum, 2); swap_value(osnum, 2); swap_value(signature_type, 2); end; end; function RPM_ReadHeader; var i_entry : LongWord; start : Integer; entry : RPM_EntryInfo; begin Result := False; BlockRead(f, header, Sizeof(header)); if IOResult = 0 then begin with header do begin swap_value(count, 4); swap_value(data_size, 4); start := FilePos(f) + LongInt(count) * Sizeof(entry); for i_entry := 0 to count - 1 do begin if not RPM_ReadEntry(f, start, entry) then Exit else if not RPM_ProcessEntry(f, start, entry, info) then Exit; end; end; start := start + LongInt(header.data_size); // Move file pointer on padded to a multiple of 8 bytes position if align_data then if (start mod 8) <> 0 then begin start := start and $FFFFFFF8; Inc(start, 8); end; Seek(f, start); Result := True; end; end; function RPM_ReadEntry; begin Result := False; BlockRead(f, entry, Sizeof(entry)); if IOResult = 0 then Result := True; with entry do begin swap_value(tag, 4); swap_value(etype, 4); swap_value(offset, 4); offset := data_start + LongInt(offset); swap_value(count, 4); end; end; function RPM_ReadSignature; var info : RPM_InfoRec; begin Result := False; case sig_type of RPMSIG_PGP262_1024 : ; // Old PGP signature RPMSIG_MD5 : ; // RPMSIG_MD5_PGP : ; // RPMSIG_HEADERSIG : // New header signature begin if RPM_ReadHeader(f, True, signature, info) then Result := True; end; end;{case signature type} end; procedure CRtoCRLF(var instr:string); var s:string; i,l:integer; ch,ch2:char; begin instr:=instr+' '; {Avoid overflow} l:=length(instr)-1; for i:=1 to l do begin ch:=instr[i]; ch2:=instr[i+1]; if ((ch=#13) and (ch2<>#10)) or ((ch=#10) and (ch2<>#13)) then s:=s+#13#10 else s:=s+ch; end; instr:=s; end; function RPM_ProcessEntry; var save_pos : Integer; fgError : Boolean; begin result:=true; if entry.tag = RPMTAG_FILENAMES then exit; fgError := False; save_pos := FilePos(f); Seek(f, entry.offset); if IOResult = 0 then begin case entry.tag of RPMTAG_NAME : if entry.etype = 6 then fgError := not read_string(f, info.name); RPMTAG_VERSION : if entry.etype = 6 then fgError := not read_string(f, info.version); RPMTAG_RELEASE : if entry.etype = 6 then fgError := not read_string(f, info.release); RPMTAG_SUMMARY : if entry.etype = 9 then fgError := not read_string(f, info.summary); RPMTAG_DESCRIPTION : if entry.etype = 9 then begin fgError := not read_string(f, info.description); if not fgError then CRtoCRLF(info.description); end; RPMTAG_BUILDTIME : if entry.etype = 4 then fgError := not read_int32(f, info.buildtime); RPMTAG_DISTRIBUTION : if entry.etype = 6 then fgError := not read_string(f, info.distribution); RPMTAG_VENDOR : if entry.etype = 6 then fgError := not read_string(f, info.vendor); RPMTAG_LICENSE : if entry.etype = 6 then fgError := not read_string(f, info.license); RPMTAG_PACKAGER : if entry.etype = 6 then fgError := not read_string(f, info.packager); RPMTAG_GROUP : if entry.etype = 9 then fgError := not read_string(f, info.group); RPMTAG_OS : if entry.etype = 6 then fgError := not read_string(f, info.os); RPMTAG_ARCH : if entry.etype = 6 then fgError := not read_string(f, info.arch); RPMTAG_SOURCERPM : if entry.etype = 6 then fgError := not read_string(f, info.sourcerpm); end;{case} end else fgError := True; Result := not fgError; Seek(f, save_pos); end; function read_string(var f : file; var s : AnsiString) : Boolean; var i_char : Char; fgError : Boolean; begin fgError := False; SetLength(s, 0); while not eof(f) do begin BlockRead(f, i_char, 1); if IOResult <> 0 then begin fgError := True; Break; end; if i_char = #0 then Break else s := s + i_char; end; Result := not fgError; end; function read_int32(var f : file; var int32 : LongWord) : Boolean; begin BlockRead(f, int32, Sizeof(LongWord)); swap_value(int32, Sizeof(LongWord)); if IOResult = 0 then Result := True else Result := False; end; procedure RPM_CreateInfoRec(var info : RPM_InfoRec); begin end; procedure RPM_DeleteInfoRec(var info : RPM_InfoRec); begin end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/rpm_wdx/src/rpm_def.pas������������������������������������������������0000644�0001750�0000144�00000005724�15104114162�021450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit rpm_def; {$MODE Delphi} interface uses Classes; {$ifdef ver90} type longword=longint; {$endif} {$ifdef ver100} type longword=longint; {$endif} //values for TArchiveRec.headers (pseudo-files to show) const HDR_INFO = 0; HDR_DATA = 1; const MAX_PHANTOM_FILES = 13; const RPM_MAGIC = $DBEEABED; RPM_TYPE_BINARY = 0; // binary package type RPM_TYPE_SOURCE = 1; // source package type RPMSIG_PGP262_1024 = 1; RPMSIG_MD5 = 3; RPMSIG_MD5_PGP = 4; RPMSIG_HEADERSIG = 5; const RPMTAG_NAME = 1000; RPMTAG_VERSION = 1001; RPMTAG_RELEASE = 1002; RPMTAG_SUMMARY = 1004; RPMTAG_DESCRIPTION = 1005; RPMTAG_BUILDTIME = 1006; RPMTAG_DISTRIBUTION = 1010; RPMTAG_VENDOR = 1011; RPMTAG_LICENSE = 1014; RPMTAG_PACKAGER = 1015; RPMTAG_GROUP = 1016; RPMTAG_OS = 1021; RPMTAG_ARCH = 1022; RPMTAG_FILENAMES = 1027; RPMTAG_FILEMTIMES = 1034; RPMTAG_SOURCERPM = 1044; RPMTAG_ARCHIVESIZE = 1046; type RPM_EntryInfo = record tag : LongWord; etype : LongWord; offset : LongWord; count : LongWord; end;{EntryInfo} type RPM_Lead = record magic : LongWord; major_ver : Byte; minor_ver : Byte; rpmtype : Word; archnum : Word; name : array[1..66] of Char; osnum : Word; signature_type : Word; reserved : array[1..16] of Char; end;{RPM_Lead} RPM_Header =record magic : array [1..3] of byte; header_ver : Byte; reserved : array [1..4] of Byte; count : LongWord; data_size : LongWord; end;{RPM_Header} RPM_InfoRec = record name : AnsiString; // RPMTAG_NAME version : AnsiString; // RPMTAG_VERSION release : AnsiString; // RPMTAG_RELEASE summary : AnsiString; // RPMTAG_SUMMARY description : AnsiString; // RPMTAG_DESCRIPTION distribution : AnsiString; // RPMTAG_DISTRIBUTION buildtime : LongWord; // RPMTAG_BUILDTIME vendor : AnsiString; // RPMTAG_VENDOR license : AnsiString; // RPMTAG_LICENSE packager : AnsiString; // RPMTAG_PACKAGER group : AnsiString; // RPMTAG_GROUP os : AnsiString; // RPMTAG_OS arch : AnsiString; // RPMTAG_ARCH sourcerpm : AnsiString; // RPMTAG_SOURCERPM end;{RPM_Info} implementation end. ��������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016464� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017253� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/dpkg_deb.pas�����������������������������������������������0000644�0001750�0000144�00000024763�15104114162�021533� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit dpkg_deb; //Debian Linux package unpacker implemented as TFileStream //v1.0.1 add option ReadAfterDataMember, to avoid unnecessary read after data.tar.gz interface uses Classes; const MEMBER_CONTROL = 1; MEMBER_DATA = 2; type ar_hdr = record //converted from /usr/include/ar.h ar_name: array [0..Pred(16)] of char; (* name *) ar_date: array [0..Pred(12)] of char; (* modification time *) ar_uid: array [0..Pred(6)] of char; (* user id *) ar_gid: array [0..Pred(6)] of char; (* group id *) ar_mode: array [0..Pred(8)] of char; (* octal file permissions *) ar_size: array [0..Pred(10)] of char; (* size in bytes *) ar_fmag: array [0..Pred(2)] of char; (* consistency check *) end; TDebianPackage = class private //FMemberList: array of ar_hdr; FPkgVersion: string; //FDebStrm: TFileStream; FCheckHeader : boolean; //constructor Create; override; //destructor Destory; override; FFileName : string; function DoCheckHeader(arh: ar_hdr; infobuf: PChar; memberlen: integer): boolean; //function GetFileList: TStrings; function ParseHeaderLength(inh: PChar; Len: integer): integer; function SkipMember(Strm: TStream; memberlen: integer): boolean; public FMemberList: array of ar_hdr; ReadAfterDataMember: boolean; constructor Create; function ReadFromFile(DebPkgFile: string): integer; function ExtractMemberToStream(MemberIdx: integer; OutputStrm: TStream): boolean; function ExtractMemberToFile(idx: integer; OutputFile: string): boolean; published property PkgVersion: string read FPkgVersion; property CheckHeader: boolean read FCheckHeader write FCheckHeader default false; //property MemberList: array of ar_hdr read FMemberList; default; //property FileList: TStrings read GetFileList; //property GetControlFile: //need tar+gzip to implement this end; implementation uses SysUtils{$IFDEF GDEBUG}, dbugintf {$ENDIF}; const (* Pre-4BSD archives had these magic numbers in them. *) OARMAG1 = $FF6D; OARMAG2 = $FF65; ARMAG = '!<arch>'#10; (* ar "magic number" *) SARMAG = 8; (* strlen(ARMAG); *) AR_EFMT1 = '#1/'; (* extended format #1 *) ARFMAG = '`'#10''; (* static void skipmember(FILE *ar, const char *fn, long memberlen) { int c; memberlen += (memberlen&1); while (memberlen > 0) { if ((c= getc(ar)) == EOF) readfail(ar,fn,"skipped member data"); memberlen--; } } *) function TDebianPackage.SkipMember(Strm: TStream; memberlen: integer): boolean; begin Result := false; Inc(memberlen, (memberlen and 1)); if Strm.Position + memberlen > Strm.Size then exit; Strm.Seek(memberlen, soFromCurrent); Result := true; end; //return the number of members found function TDebianPackage.ReadFromFile(DebPkgFile: string): integer; var debStrm: TFileStream; MagicHeaderBuf: array[0..10] of char; //memberbuf: PChar; verinfobuf : array [0..100] of char; arh: ar_hdr; memberlen, memberidx: integer; n: integer; begin Result := 0; SetLength(FMemberList, 0); //if not Assigned(DebStrm) then raise Exception.Create('Stream not assigned'); if not FileExists(DebPkgFile) then raise Exception.Create('File not exists!'); FFileName := DebPkgFile; debStrm := TFileStream.Create(DebPkgFile, fmOpenRead or fmShareDenyWrite); try //debStrm.LoadFromFile(DebPkgFile); if DebStrm.Size < sizeof(ARMAG) + 2*sizeof(ar_hdr) then raise Exception.Create('Size of file is too small. maybe its not a debian package'); DebStrm.Seek(0, soFromBeginning); //rewind DebStrm.Read(MagicHeaderBuf, SARMAG); if StrLComp(MagicHeaderBuf, ARMAG, SARMAG)=0 then //if MagicHeaderBuf='!<arch>\n' begin memberidx:=0; repeat n := DebStrm.Read(arh, sizeof(arh)); if n=0 then break else if n<sizeof(ar_hdr) then raise Exception.Create('corrputed package'); (* if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag))) ohshit("file `%.250s' is corrupt - bad magic at end of first header",debar); *) if StrLComp(arh.ar_fmag, ARFMAG, sizeof(arh.ar_fmag))<>0 then raise Exception.Create('bad magic at end of first header'); memberlen := ParseHeaderLength(arh.ar_size, sizeof(arh.ar_size)); if memberlen<0 then raise Exception.Create('corrputed package'); //ohshit("file `%.250s' is corrupt - negative member length %ld",debar,memberlen); //save header (member info) into list SetLength(FMemberList, memberidx+1); FMemberList[memberidx] := arh; Inc(memberidx); if (memberidx=0) and FCheckHeader then //package header begin //GetMem(memberbuf, memberlen + 1); try //if DebStrm.Read(memberbuf, memberlen + (memberlen and 1))<memberlen then exit; //failed to read header info member if DebStrm.Read(verinfobuf, memberlen + (memberlen and 1))<memberlen then exit; {$IFDEF GDEBUG} SendDebug(StrPas(verinfobuf)); {$ENDIF} //if CheckHeader(arh, memberbuf, memberlen) then exit; if not DoCheckHeader(arh, verinfobuf, memberlen) then exit; finally //FreeMem(memberbuf, memberlen + 1); end; end else if (Trim(arh.ar_name)='data.tar.gz') and (not ReadAfterDataMember) then break else SkipMember(DebStrm, memberlen) until (DebStrm.Position>=DebStrm.Size); Result := memberidx + 1; end else if StrLComp(MagicHeaderBuf,'!<arch>',7)=0 then raise Exception.Create('Bad magic header. maybe it''s not a debian package') //"file looks like it might be an archive which has been\n" //"corrupted by being downloaded in ASCII mode.\n" else if StrLComp(MagicHeaderBuf,'0.93',4)=0 then raise Exception.Create('Old format debian package not supported') else raise Exception.Create('Bad magic header. maybe it''s not a debian package'); finally DebStrm.Free; end; end; function TDebianPackage.ExtractMemberToStream(MemberIdx: integer; OutputStrm: TStream): boolean; var idx, memberlen: integer; DebStrm : TFileStream; arh: ar_hdr; begin Result := false; if not Assigned(OutputStrm) then exit; if MemberIdx > High(FMemberList) then exit; DebStrm := TFileStream.Create(FFileName, fmOpenRead or fmShareDenyWrite); try DebStrm.Seek(SARMAG, soFromBeginning); //rewind to the first member idx := 0; while(idx<=memberidx) do begin arh := FMemberList[idx]; if DebStrm.Read(arh, sizeof(arh))<sizeof(ar_hdr) then raise Exception.Create('corrputed package'); memberlen := ParseHeaderLength(arh.ar_size, sizeof(arh.ar_size)); if memberlen<0 then raise Exception.Create('corrputed package'); //ohshit("file `%.250s' is corrupt - negative member length %ld",debar,memberlen); //if (idx=1) then //header // if ReadControlFile(DebStrm, arh, memberlen)<0 then raise.... if (idx=MemberIdx) then begin if OutputStrm.CopyFrom(DebStrm, memberlen)<memberlen then exit; Result := True; break; end else SkipMember(DebStrm, memberlen); Inc(idx); end; finally DebStrm.Free; end; end; function TDebianPackage.ExtractMemberToFile(idx: integer; OutputFile: string): boolean; var AFileStrm: TFileStream; begin Result := false; if idx>High(FMemberList) then exit; AFileStrm := TFileStream.Create(OutputFile, fmCreate or fmOpenWrite or fmShareDenyWrite); try Result := ExtractMemberToStream(idx, AFileStrm); finally AFileStrm.Free; end; end; function TDebianPackage.ParseHeaderLength(inh: PChar; Len: integer): integer; (*static unsigned long parseheaderlength(const char *inh, size_t len, const char *fn, const char *what) { char lintbuf[15]; unsigned long r; char *endp; if (memchr(inh,0,len)) ohshit("file `%.250s' is corrupt - %.250s length contains nulls",fn,what); assert(sizeof(lintbuf) > len); memcpy(lintbuf,inh,len); lintbuf[len]= ' '; *strchr(lintbuf,' ')= 0; r= strtoul(lintbuf,&endp,10); if ( *endp ) ohshit("file `%.250s' is corrupt - bad digit (code %d) in %s",fn,*endp,what); return r; *) var lintbuf: array[0..14] of char; begin if len> sizeof(lintbuf) then raise Exception.Create('ParseMemberLength'); StrLCopy(lintbuf, inh, len); lintbuf[len] := #0; StrScan(lintbuf, ' ')^ := #0; Result := StrToInt(StrPas(lintbuf)); end; //return the length of control.tar.gz (*function TDebianPackage.CheckControlFile(DebStrm: TMemoryStream; arh: ar_hdr; memberlen: integer; OutputFile: String): integer; begin end; *) //if any error encounted, return false function TDebianPackage.DoCheckHeader(arh: ar_hdr; infobuf: PChar; memberlen: integer): boolean; const DebianSign = 'debian-binary '; var verinfobuf: array[0..20] of char; cur: PChar; begin Result := false; if StrLComp(arh.ar_name, DebianSign, sizeof(arh.ar_name))<>0 then exit; //ohshit("file `%.250s' is not a debian binary archive (try dpkg-split?)",debar); //memberlen = ParseArchiveLength(arh.ar_size,sizeof(arh.ar_size)); infobuf[memberlen] := #0; cur := StrScan(infobuf, #10); if (cur=nil) then exit; //ohshit("archive has no newlines in header"); cur^ := #0; cur := StrScan(infobuf,'.'); if (cur=nil) then exit; //ohshit("archive has no dot in version number"); cur^ := #0; if (StrComp(infobuf,'2')<>0) then exit; //ohshit("archive version %.250s not understood, get newer " BACKEND, infobuf); cur^ := '.'; //restore version delimiter //StrLCopy(verinfobuf, infobuf, min(sizeof(verinfobuf)-1, memberlen); //got the package version info StrLCopy(verinfobuf, infobuf, sizeof(verinfobuf)-1); verinfobuf[sizeof(verinfobuf)-1] := #0; FPkgVersion := StrPas(verinfobuf); Result := true; end; constructor TDebianPackage.Create; begin CheckHeader := True; ReadAfterDataMember := false; end; end.�������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/debunpak.pas�����������������������������������������������0000644�0001750�0000144�00000010674�15104114162�021561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit debunpak; {$mode delphi}{$H+} interface uses SysUtils, Classes; // Extract 'control' from control.tar.* function Deb_ExtractCtrlInfoFile(const DebFile: String; var DescFile: String): Boolean; implementation uses dpkg_deb, libtar, AbXz, ZStream, AbZstd; var DebPkg: TDebianPackage; const HEAD_CRC = $02; { bit 1 set: header CRC present } EXTRA_FIELD = $04; { bit 2 set: extra field present } ORIG_NAME = $08; { bit 3 set: original file name present } COMMENT = $10; { bit 4 set: file comment present } type TGzHeader = packed record ID1 : Byte; ID2 : Byte; Method : Byte; Flags : Byte; ModTime : UInt32; XtraFlags : Byte; OS : Byte; end; function ExtractGzip(InStream, OutStream: TStream): Boolean; var ALength: Integer; AHeader: TGzHeader; ABuffer: array[Word] of Byte; begin Result:= False; InStream.ReadBuffer(AHeader, SizeOf(TGzHeader)); if (AHeader.ID1 = $1F) and (AHeader.ID2 = $8B) and (AHeader.Method = 8) then begin // Skip the extra field if (AHeader.Flags and EXTRA_FIELD <> 0) then begin ALength:= InStream.ReadWord; while ALength > 0 do begin InStream.ReadByte; Dec(ALength); end; end; // Skip the original file name if (AHeader.Flags and ORIG_NAME <> 0) then begin while (InStream.ReadByte > 0) do; end; // Skip the .gz file comment if (AHeader.Flags and COMMENT <> 0) then begin while (InStream.ReadByte > 0) do; end; // Skip the header crc if (AHeader.Flags and HEAD_CRC <> 0) then begin InStream.ReadWord; end; with TDecompressionStream.Create(InStream, True) do try while True do begin ALength:= Read(ABuffer[0], SizeOf(ABuffer)); if (ALength = 0) then Break; OutStream.Write(ABuffer[0], ALength); end; Result:= True; finally Free; end; end; end; function ExtractXz(InStream, OutStream: TStream): Boolean; var AStream: TStream; begin Result:= False; AStream:= TXzDecompressionStream.Create(InStream); try OutStream.CopyFrom(AStream, 0); Result:= True; finally AStream.Free; end; end; function ExtractZstd(InStream, OutStream: TStream): Boolean; var AStream: TStream; begin Result:= False; AStream:= TZstdDecompressionStream.Create(InStream); try OutStream.CopyFrom(AStream, 0); Result:= True; finally AStream.Free; end; end; function UnpackDebFile(const DebFile: String; MemberIdx: Integer; OutStream: TStream): Boolean; var Index: Integer; FileExt: String; TempStream: TMemoryStream; begin Result:= False; if (MemberIdx in [MEMBER_CONTROL, MEMBER_DATA]) then try // a debian package must have control.tar.* and data.tar.* if DebPkg.ReadFromFile(DebFile) < 2 then Exit; // Check file type FileExt:= TrimRight(DebPkg.FMemberList[MemberIdx].ar_name); Index:= Pos(ExtensionSeparator, FileExt); if Index = 0 then Exit; FileExt:= Copy(FileExt, Index, MaxInt); if (FileExt = '.tar.xz') or (FileExt = '.tar.gz') or (FileExt = '.tar.zst') then begin TempStream:= TMemoryStream.Create; try if DebPkg.ExtractMemberToStream(MemberIdx, TempStream) then begin TempStream.Position:= 0; case FileExt[6] of 'x': Result:= ExtractXz(TempStream, OutStream); 'g': Result:= ExtractGzip(TempStream, OutStream); 'z': Result:= ExtractZstd(TempStream, OutStream); end; end; finally TempStream.Free; end; end; except Result:= False; end; end; function Deb_ExtractCtrlInfoFile(const DebFile: String; var DescFile: String): Boolean; var TA: TTarArchive; DirRec: TTarDirRec; OutStream: TMemoryStream; begin Result:= False; OutStream:= TMemoryStream.Create; try Result:= UnpackDebFile(DebFile, MEMBER_CONTROL, OutStream); if Result then try TA := TTarArchive.Create(OutStream); try while TA.FindNext(DirRec) do begin if (DirRec.Name = './control') or (DirRec.Name = '.\control') or (DirRec.Name = 'control') then begin DescFile:= TA.ReadFile; Result:= True; Break; end; end; finally TA.Free; end; except // Ignore end; finally OutStream.Free; end; end; initialization DebPkg := TDebianPackage.Create; finalization DebPkg.Free; end. ��������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/deb_wdx_intf.pas�������������������������������������������0000644�0001750�0000144�00000013214�15104114162�022415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of DEBWDX, a content plugin for // Total Commander handling Debian Linux package. // // Copyright (C) 2005 Ralgh Young (yang.guilong@gmail.com) //*************************************************************** // This program is free software; you can redistribute it and/or modify it // under the GPL. // // Only version 2.0 package is supported, and I would not to add support for // old format since I haven't old packages. But if you have some package of old format, // and you're interested in, you're welcomed to modify the source by yourself. // FYI: refer to dpkg-deb/extract.c in dpkg-deb's source, // and search '0.93' in function extracthalf, you're find something useful. {$A-,I-} //no alignment, no I/O error autochecking unit deb_wdx_intf; {$mode delphi}{$H+} {$include calling.inc} interface uses Classes, WdxPlugin; procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); dcpcall; export; function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; export; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; export; implementation uses SysUtils, debunpak; var IDX_PACKAGE, IDX_VERSION, IDX_SECTION, IDX_PRIORITY, IDX_ARCH, IDX_DEPENDS, IDX_RECOMMENDS, IDX_SUGGESTS, IDX_CONFLICTS, IDX_INSTALLED_SIZE, IDX_MAINTAINER, IDX_SOURCE, IDX_SUMMARY, IDX_DESCRIPTION : integer; CurrentPackageFile: String; FieldList : TStrings; FileInfo : TStrings; procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); begin StrPCopy(DetectString, 'EXT="DEB"'); end; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; begin StrPCopy(Units, ''); if FieldIndex =IDX_INSTALLED_SIZE then begin StrPCopy(FieldName, FieldList.Strings[FieldIndex]); StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); Result := FT_NUMERIC_64; end else if FieldIndex < FieldList.Count then begin StrPCopy(FieldName, FieldList.Strings[FieldIndex]); Result := FT_STRING; end else Result := FT_NOMOREFIELDS; end; {$WRITEABLECONST ON} function ContentGetValue(FileName:pchar; FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; function EnsureLength(S: string; nMaxlen: integer): string; begin Result := S; if length(Result)>=nMaxlen then begin Result := Copy(Result, 1, nMaxlen-4); Result := Result + '...'; end; end; const DescTmpFile: String = ''; var Field, Value : String; i, where_start_desc : integer; size : int64; begin Result := FT_FILEERROR; if not FileExists(FileName) then exit; if CurrentPackageFile<>FileName then begin if not Deb_ExtractCtrlInfoFile(FileName, DescTmpFile) then exit; FileInfo.Text := DescTmpFile; CurrentPackageFile := FileName; end {$IFDEF GDEBUG} else WriteLn('Cached info reused for '+FileName); {$ENDIF}; if (FieldIndex>=FieldList.Count) then begin Result := FT_NOSUCHFIELD; exit; end; if FieldIndex<>IDX_DESCRIPTION then begin if FieldIndex=IDX_SUMMARY then //for 'Summary', return the value of Description Field := 'Description' else Field := FieldList.Strings[FieldIndex]; Value := ''; Value := Trim(FileInfo.Values[Field]); if Value='' then begin Result := FT_FIELDEMPTY; exit; end; if FieldIndex=IDX_INSTALLED_SIZE then begin size := StrToInt64Def(Value, -1); case UnitIndex of 0: //bytes size := size * 1024; // 1: //kbytes // pass 2: //mbytes size := size div 1024; 3: //gbytes size := size div (1024 * 1024); end; Move(size, FieldValue^, sizeof(size)); Result := FT_NUMERIC_64; end else //other fields, just string begin StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); Result := FT_STRING; end; end else //IDX_DESCRIPTION, begin Value := ''; where_start_desc := -1; for i:=0 to FileInfo.Count-1 do begin if FileInfo.Names[i]='Description' then begin where_start_desc := i; break; end; end; if where_start_desc>=0 then begin for i:=where_start_desc+1 to FileInfo.Count-1 do begin Value := Value + FileInfo.Strings[i]; end; StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); //Result := FT_FULLTEXT; Result := FT_STRING; end; end end; initialization CurrentPackageFile := ''; FileInfo := TStringList.Create; FileInfo.NameValueSeparator := ':'; FieldList := TStringList.Create; IDX_PACKAGE := FieldList.Add('Package'); IDX_VERSION := FieldList.Add('Version'); IDX_SECTION := FieldList.Add('Section'); IDX_PRIORITY := FieldList.Add('Priority'); IDX_ARCH := FieldList.Add('Architecture'); IDX_DEPENDS := FieldList.Add('Depends'); IDX_RECOMMENDS:= FieldList.Add('Recommends'); IDX_SUGGESTS := FieldList.Add('Suggests'); IDX_CONFLICTS := FieldList.Add('Conflicts'); IDX_INSTALLED_SIZE := FieldList.Add('Installed-Size'); IDX_MAINTAINER := FieldList.Add('Maintainer'); IDX_SOURCE := FieldList.Add('Source'); IDX_SUMMARY := FieldList.Add('Summary'); IDX_DESCRIPTION := FieldList.Add('Description'); finalization FileInfo.Free; FieldList.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/deb_wdx.lpi������������������������������������������������0000644�0001750�0000144�00000010500�15104114162�021371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="2"/> <StringTable FileDescription="DEB WDX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2021 Alexander Koblov"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\deb_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk;..\..\..\wcx\zip\src\fparchive"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <CStyleOperator Value="False"/> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> </RunParams> <Units Count="2"> <Unit0> <Filename Value="deb_wdx.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="deb_wdx_intf.pas"/> <IsPartOfProject Value="True"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\deb_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk;..\..\..\wcx\zip\src\fparchive"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <CStyleOperator Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/deb_wdx/src/deb_wdx.dpr������������������������������������������������0000644�0001750�0000144�00000001260�15104114162�021375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of DEBWDX, a content plugin for // Total Commander handling Debian Linux package. // // Copyright (C) 2005 Ralgh Young (yang.guilong@gmail.com) //*************************************************************** // Add some changes for Lazarus and Linux compatibility // // Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) //*************************************************************** library deb_wdx; uses SysUtils, Classes, WdxPlugin, deb_wdx_intf in 'deb_wdx_intf.pas'; exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017025� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/���������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017614� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/audiodata.pas��������������������������������������������0000644�0001750�0000144�00000041654�15104114162�022266� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This content plugin can show information about audio files Copyright (C) 2016-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit AudioData; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, MPEGaudio, Musepack, OggVorbis, ID3v1, ID3v2, APEtag, FLACfile, Monkey, AACfile, CDAtrack, WMAfile, WAVfile, TTA, TwinVQ, AC3, DTS, WAVPackfile, OptimFROG, MP4file; type { TAudioData } TAudioData = class private FDTS: TDTS; FAC3: TAC3; FTTA: TTTA; FTwinVQ: TTwinVQ; FMonkey: TMonkey; FMP4file: TMP4file; FAACfile: TAACfile; FWMAfile: TWMAfile; FWAVfile: TWAVfile; FFLACfile: TFLACfile; FMPEGplus: TMPEGplus; FCDAtrack: TCDAtrack; FMPEGaudio: TMPEGaudio; FOggVorbis: TOggVorbis; FOptimFrog: TOptimFrog; FWAVPackfile: TWAVPackfile; private procedure Clear; procedure ReadID3v1(ID3v1: TID3v1); procedure ReadID3v2(ID3v2: TID3v2); procedure ReadAPEtag(APEtag: TAPEtag); procedure AppendTag(const ATag: String); function FormatChannels(AChannels: Integer): String; function FormatDuration(ADuration: Integer): String; procedure UpdateValue(var AValue: Integer; AData: Integer); procedure UpdateValue(var AValue: String; const AData: String); protected FFileName: String; function ReadDTS: Boolean; function ReadAC3: Boolean; function ReadTTA: Boolean; function ReadTwinVQ: Boolean; function ReadMonkey: Boolean; function ReadMP4file: Boolean; function ReadAACfile: Boolean; function ReadWMAfile: Boolean; function ReadWAVfile: Boolean; function ReadFLACfile: Boolean; function ReadMPEGplus: Boolean; function ReadCDAtrack: Boolean; function ReadMPEGaudio: Boolean; function ReadOggVorbis: Boolean; function ReadOptimFrog: Boolean; function ReadWAVPackfile: Boolean; public Album, Artist, Title: String; Bits, Track, Duration, SampleRate, BitRate: Integer; DurationHMS, BitRateType, Channels, Date, Genre, Comment, Tags, Encoder, Composer, Copyright, URL: String; FullText: UnicodeString; public constructor Create; destructor Destroy; override; function LoadFromFile(const FileName: String): Boolean; end; implementation uses LazUTF8; { TAudioData } procedure TAudioData.Clear; begin Bits:= 0; Track:= 0; BitRate:= 0; Duration:= 0; SampleRate:= 0; URL:= EmptyStr; Tags:= EmptyStr; Date:= EmptyStr; Genre:= EmptyStr; Title:= EmptyStr; Album:= EmptyStr; Artist:= EmptyStr; Comment:= EmptyStr; Encoder:= EmptyStr; Channels:= EmptyStr; Composer:= EmptyStr; Copyright:= EmptyStr; DurationHMS:= EmptyStr; FullText:= EmptyWideStr; BitRateType:= 'Unknown'; end; procedure TAudioData.ReadID3v1(ID3v1: TID3v1); begin if ID3v1.Exists then begin UpdateValue(Date, ID3v1.Year); UpdateValue(Track, ID3v1.Track); UpdateValue(Album, ID3v1.Album); UpdateValue(Title, ID3v1.Title); UpdateValue(Genre, ID3v1.Genre); UpdateValue(Artist, ID3v1.Artist); UpdateValue(Comment, ID3v1.Comment); case ID3v1.VersionID of TAG_VERSION_1_0: AppendTag('ID3v1.0'); TAG_VERSION_1_1: AppendTag('ID3v1.1'); else AppendTag('ID3v1'); end; end; end; procedure TAudioData.ReadID3v2(ID3v2: TID3v2); begin if ID3v2.Exists then begin UpdateValue(URL, ID3v2.Link); UpdateValue(Date, ID3v2.Year); UpdateValue(Track, ID3v2.Track); UpdateValue(Album, ID3v2.Album); UpdateValue(Title, ID3v2.Title); UpdateValue(Genre, ID3v2.Genre); UpdateValue(Artist, ID3v2.Artist); UpdateValue(Comment, ID3v2.Comment); UpdateValue(Encoder, ID3v2.Encoder); UpdateValue(Composer, ID3v2.Composer); UpdateValue(Copyright, ID3v2.Copyright); case ID3v2.VersionID of TAG_VERSION_2_2: AppendTag('ID3v2.2'); TAG_VERSION_2_3: AppendTag('ID3v2.3'); TAG_VERSION_2_4: AppendTag('ID3v2.4'); else AppendTag('ID3v2'); end; end; end; procedure TAudioData.ReadAPEtag(APEtag: TAPEtag); begin if APEtag.Exists then begin UpdateValue(Date, APEtag.Year); UpdateValue(Track, APEtag.Track); UpdateValue(Album, APEtag.Album); UpdateValue(Title, APEtag.Title); UpdateValue(Genre, APEtag.Genre); UpdateValue(Artist, APEtag.Artist); UpdateValue(Comment, APEtag.Comment); UpdateValue(Composer, APEtag.Composer); UpdateValue(Copyright, APEtag.Copyright); AppendTag('APEv' + IntToStr(APEtag.Version div 1000)); end; end; procedure TAudioData.AppendTag(const ATag: String); begin if Length(Tags) = 0 then Tags:= ATag else begin Tags:= Tags + ' ' + ATag; end; end; function TAudioData.FormatChannels(AChannels: Integer): String; begin case AChannels of 0: Result:= 'Unknown'; 1: Result:= 'Mono'; 2: Result:= 'Stereo' else Result:= IntToStr(AChannels) + ' ch'; end; end; function TAudioData.FormatDuration(ADuration: Integer): String; var AHour, AMinute, ASecond: Integer; begin AHour:= ADuration div 3600; AMinute:= ADuration mod 3600 div 60; ASecond:= ADuration mod 60; Result:= Format('%.2d:%.2d:%.2d', [AHour, AMinute, ASecond]); end; procedure TAudioData.UpdateValue(var AValue: Integer; AData: Integer); begin if AValue = 0 then AValue:= AData; end; procedure TAudioData.UpdateValue(var AValue: String; const AData: String); begin if Length(AValue) = 0 then AValue:= AData; end; function TAudioData.ReadDTS: Boolean; begin Result:= FDTS.ReadFromFile(FFileName) and FDTS.Valid; if Result then begin BitRate:= FDTS.BitRate; Bits:= Integer(FDTS.Bits); Duration:= Round(FDTS.Duration); DurationHMS:= FormatDuration(Duration); Channels:= FormatChannels(FDTS.Channels); SampleRate:= FDTS.SampleRate; end; end; function TAudioData.ReadAC3: Boolean; begin Result:= FAC3.ReadFromFile(FFileName) and FAC3.Valid; if Result then begin BitRate:= FAC3.BitRate; Duration:= Round(FAC3.Duration); DurationHMS:= FormatDuration(Duration); Channels:= FormatChannels(FAC3.Channels); SampleRate:= FAC3.SampleRate; end; end; function TAudioData.ReadTTA: Boolean; begin Result:= FTTA.ReadFromFile(FFileName) and FTTA.Valid; if Result then begin Bits:= Integer(FTTA.Bits); BitRate:= Round(FTTA.BitRate); Duration:= Round(FTTA.Duration); DurationHMS:= FormatDuration(Duration); Channels:= FormatChannels(FTTA.Channels); SampleRate:= FTTA.SampleRate; ReadAPEtag(FTTA.APEtag); ReadID3v2(FTTA.ID3v2); ReadID3v1(FTTA.ID3v1); end; end; function TAudioData.ReadTwinVQ: Boolean; begin Result:= FTwinVQ.ReadFromFile(FFileName) and FTwinVQ.Valid; if Result then begin BitRate:= FTwinVQ.BitRate; Channels:= FTwinVQ.ChannelMode; Duration:= Round(FTwinVQ.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FTwinVQ.SampleRate; Album:= FTwinVQ.Album; Title:= FTwinVQ.Title; Artist:= FTwinVQ.Author; Comment:= FTwinVQ.Comment; end; end; function TAudioData.ReadMonkey: Boolean; begin Result:= FMonkey.ReadFromFile(FFileName) and FMonkey.Valid; if Result then begin Bits:= FMonkey.Bits; Channels:= FMonkey.ChannelMode; BitRate:= Round(FMonkey.BitRate) div 1000000; Duration:= Round(FMonkey.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FMonkey.SampleRate; ReadAPEtag(FMonkey.APEtag); ReadID3v2(FMonkey.ID3v2); ReadID3v1(FMonkey.ID3v1); end; end; function TAudioData.ReadMP4file: Boolean; begin Result:= FMP4file.ReadFromFile(FFileName) and FMP4file.Valid; if Result then begin SampleRate:= FMP4file.SampleRate; BitRate:= Round(FMP4file.BitRate); Duration:= Round(FMP4file.Duration); DurationHMS:= FormatDuration(Duration); Channels:= FormatChannels(FMP4file.Channels); Date:= FMP4file.Year; Track:= FMP4file.Track; Genre:= FMP4file.Genre; Title:= FMP4file.Title; Album:= FMP4file.Album; Artist:= FMP4file.Artist; Comment:= FMP4file.Comment; Encoder:= FMP4file.Encoder; Composer:= FMP4file.Composer; Copyright:= FMP4file.Copyright; end; end; function TAudioData.ReadAACfile: Boolean; begin Result:= FAACfile.ReadFromFile(FFileName) and FAACfile.Valid; if Result then begin BitRate:= FAACfile.BitRate; BitRateType:= FAACfile.BitRateType; Duration:= Round(FAACfile.Duration); DurationHMS:= FormatDuration(Duration); Channels:= FormatChannels(FAACfile.Channels); SampleRate:= FAACfile.SampleRate; ReadID3v2(FAACfile.ID3v2); ReadID3v1(FAACfile.ID3v1); ReadAPEtag(FAACfile.APEtag); end; end; function TAudioData.ReadWMAfile: Boolean; begin Result:= FWMAfile.ReadFromFile(FFileName) and FWMAfile.Valid; if Result then begin BitRate:= FWMAfile.BitRate; Channels:= FWMAfile.ChannelMode; Duration:= Round(FWMAfile.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FWMAfile.SampleRate; Date:= FWMAfile.Year; Track:= FWMAfile.Track; Album:= FWMAfile.Album; Title:= FWMAfile.Title; Genre:= FWMAfile.Genre; Artist:= FWMAfile.Artist; Comment:= FWMAfile.Comment; end; end; function TAudioData.ReadWAVfile: Boolean; begin Result:= FWAVfile.ReadFromFile(FFileName) and FWAVfile.Valid; if Result then begin Bits:= FWAVfile.BitsPerSample; BitRate:= Round(FWAVfile.BitRate); Channels:= FWAVfile.ChannelMode; Duration:= Round(FWAVfile.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FWAVfile.SampleRate; end; end; function TAudioData.ReadFLACfile: Boolean; begin Result:= FFLACfile.ReadFromFile(FFileName) and FFLACfile.Valid; if Result then begin BitRate:= FFLACfile.BitRate; Bits:= FFLACfile.BitsPerSample; Channels:= FFLACfile.ChannelMode; Duration:= Round(FFLACfile.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FFLACfile.SampleRate; URL:= FFLACfile.Link; Date:= FFLACfile.Year; Track:= FFLACfile.Track; Album:= FFLACfile.Album; Title:= FFLACfile.Title; Genre:= FFLACfile.Genre; Artist:= FFLACfile.Artist; Comment:= FFLACfile.Comment; Encoder:= FFLACfile.Encoder; Composer:= FFLACfile.Composer; Copyright:= FFLACfile.Copyright; end; end; function TAudioData.ReadMPEGplus: Boolean; begin Result:= FMPEGplus.ReadFromFile(FFileName) and FMPEGplus.Valid; if Result then begin BitRate:= FMPEGplus.BitRate; Channels:= FMPEGplus.ChannelMode; Duration:= Round(FMPEGplus.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FMPEGplus.SampleRate; ReadID3v2(FMPEGplus.ID3v2); ReadID3v1(FMPEGplus.ID3v1); ReadAPEtag(FMPEGplus.APEtag); end; end; function TAudioData.ReadCDAtrack: Boolean; begin Result:= FCDAtrack.ReadFromFile(FFileName) and FCDAtrack.Valid; if Result then begin Duration:= Round(FCDAtrack.Duration); DurationHMS:= FormatDuration(Duration); Track:= FCDAtrack.Track; Album:= FCDAtrack.Album; Title:= FCDAtrack.Title; Artist:= FCDAtrack.Artist; end; end; function TAudioData.ReadMPEGaudio: Boolean; begin Result:= FMPEGaudio.ReadFromFile(FFileName) and FMPEGaudio.Valid; if Result then begin if FMPEGaudio.VBR.Found then BitRateType:= 'VBR' else begin BitRateType:= 'CBR'; end; BitRate:= FMPEGaudio.BitRate; Channels:= FMPEGaudio.ChannelMode; Duration:= Round(FMPEGaudio.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FMPEGaudio.SampleRate; ReadID3v2(FMPEGaudio.ID3v2); ReadID3v1(FMPEGaudio.ID3v1); end; end; function TAudioData.ReadOggVorbis: Boolean; begin Result:= FOggVorbis.ReadFromFile(FFileName) and FOggVorbis.Valid; if Result then begin BitRate:= FOggVorbis.BitRate; Channels:= FOggVorbis.ChannelMode; Duration:= Round(FOggVorbis.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FOggVorbis.SampleRate; Date:= FOggVorbis.Date; Track:= FOggVorbis.Track; Album:= FOggVorbis.Album; Title:= FOggVorbis.Title; Genre:= FOggVorbis.Genre; Artist:= FOggVorbis.Artist; Comment:= FOggVorbis.Comment; Encoder:= FOggVorbis.Encoder; end; end; function TAudioData.ReadOptimFrog: Boolean; begin Result:= FOptimFrog.ReadFromFile(FFileName) and FOptimFrog.Valid; if Result then begin Bits:= FOptimFrog.Bits; BitRate:= FOptimFrog.BitRate; Channels:= FOptimFrog.ChannelMode; Duration:= Round(FOptimFrog.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FOptimFrog.SampleRate; ReadID3v2(FOptimFrog.ID3v2); ReadID3v1(FOptimFrog.ID3v1); ReadAPEtag(FOptimFrog.APEtag); end; end; function TAudioData.ReadWAVPackfile: Boolean; begin Result:= FWAVPackfile.ReadFromFile(FFileName) and FWAVPackfile.Valid; if Result then begin Bits:= FWAVPackfile.Bits; Encoder:= FWAVPackfile.Encoder; Channels:= FWAVPackfile.ChannelMode; BitRate:= Round(FWAVPackfile.BitRate); Duration:= Round(FWAVPackfile.Duration); DurationHMS:= FormatDuration(Duration); SampleRate:= FWAVPackfile.SampleRate; ReadAPEtag(FWAVPackfile.APEtag); end; end; constructor TAudioData.Create; begin FDTS:= TDTS.Create; FAC3:= TAC3.Create; FTTA:= TTTA.Create; FTwinVQ:= TTwinVQ.Create; FMonkey:= TMonkey.Create; FMP4file:= TMP4file.Create; FAACfile:= TAACfile.Create; FWMAfile:= TWMAfile.Create; FWAVfile:= TWAVfile.Create; FCDAtrack:= TCDAtrack.Create; FMPEGplus:= TMPEGplus.Create; FFLACfile:= TFLACfile.Create; FMPEGaudio:= TMPEGaudio.Create; FOggVorbis:= TOggVorbis.Create; FOptimFrog:= TOptimFrog.Create; FWAVPackfile:= TWAVPackfile.Create; end; destructor TAudioData.Destroy; begin FDTS.Free; FAC3.Free; FTTA.Free; FTwinVQ.Free; FMonkey.Free; FMP4file.Free; FAACfile.Free; FWMAfile.Free; FWAVfile.Free; FCDAtrack.Free; FMPEGplus.Free; FFLACfile.Free; FMPEGaudio.Free; FOggVorbis.Free; FOptimFrog.Free; FWAVPackfile.Free; inherited Destroy; end; function TAudioData.LoadFromFile(const FileName: String): Boolean; var FileExt: String; begin Clear; FFileName:= FileName; FileExt:= LowerCase(ExtractOnlyFileExt(FileName)); if (FileExt = 'mp3') or (FileExt = 'mp2') or (FileExt = 'mp1') then begin Result:= ReadMPEGaudio; end else if (FileExt = 'mpc') then begin Result:= ReadMPEGplus; end else if (FileExt = 'ogg') or (FileExt = 'opus') then begin Result:= ReadOggVorbis; end else if (FileExt = 'flac') then begin Result:= ReadFLACfile; end else if (FileExt = 'ape') then begin Result:= ReadMonkey; end else if (FileExt = 'aac') then begin Result:= ReadAACfile; end else if (FileExt = 'cda') then begin Result:= ReadCDAtrack; end else if (FileExt = 'wma') then begin Result:= ReadWMAfile; end else if (FileExt = 'wav') then begin Result:= ReadWAVfile; end else if (FileExt = 'tta') then begin Result:= ReadTTA; end else if (FileExt = 'vqf') then begin Result:= ReadTwinVQ; end else if (FileExt = 'ac3') then begin Result:= ReadAC3; end else if (FileExt = 'dts') then begin Result:= ReadDTS; end else if (FileExt = 'wv') or (FileExt = 'wvc') then begin Result:= ReadWAVPackfile; end else if (FileExt = 'ofr') or (FileExt = 'ofs') then begin Result:= ReadOptimFrog; end else if (FileExt = 'mp4') or (FileExt = 'm4a') then begin Result:= ReadMP4file; end else Result:= False; if Result then begin FullText:= UTF8ToUTF16(Title + LineEnding + Artist + LineEnding + Album + LineEnding + Comment + LineEnding + Composer + LineEnding + Copyright + LineEnding + URL + LineEnding + Encoder + LineEnding); end; end; end. ������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020374� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/WMAfile.pas������������������������������������������0000644�0001750�0000144�00000032557�15104114162�022401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TWMAfile - for extracting information from WMA file header } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.0 (29 April 2002) } { - Support for Windows Media Audio (versions 7, 8) } { - File info: file size, channel mode, sample rate, duration, bit rate } { - WMA tag info: title, artist, album, track, year, genre, comment } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit WMAfile; interface uses Classes, SysUtils, LazUTF8, DCClassesUtf8; const { Channel modes } WMA_CM_UNKNOWN = 0; { Unknown } WMA_CM_MONO = 1; { Mono } WMA_CM_STEREO = 2; { Stereo } { Channel mode names } WMA_MODE: array [0..2] of string = ('Unknown', 'Mono', 'Stereo'); type { Class TWMAfile } TWMAfile = class(TObject) private { Private declarations } FValid: Boolean; FFileSize: Integer; FChannelModeID: Byte; FSampleRate: Integer; FDuration: Double; FBitRate: Integer; FTitle: String; FArtist: String; FAlbum: String; FTrack: Integer; FYear: String; FGenre: String; FComment: String; procedure FResetData; function FGetChannelMode: string; public { Public declarations } constructor Create; { Create object } function ReadFromFile(const FileName: String): Boolean; { Load data } property Valid: Boolean read FValid; { True if valid data } property FileSize: Integer read FFileSize; { File size (bytes) } property ChannelModeID: Byte read FChannelModeID; { Channel mode code } property ChannelMode: string read FGetChannelMode; { Channel mode name } property SampleRate: Integer read FSampleRate; { Sample rate (hz) } property Duration: Double read FDuration; { Duration (seconds) } property BitRate: Integer read FBitRate; { Bit rate (kbit) } property Title: String read FTitle; { Song title } property Artist: String read FArtist; { Artist name } property Album: String read FAlbum; { Album name } property Track: Integer read FTrack; { Track number } property Year: String read FYear; { Year } property Genre: String read FGenre; { Genre name } property Comment: String read FComment; { Comment } end; implementation const { Object IDs } WMA_HEADER_ID = #48#38#178#117#142#102#207#17#166#217#0#170#0#98#206#108; WMA_FILE_PROPERTIES_ID = #161#220#171#140#71#169#207#17#142#228#0#192#12#32#83#101; WMA_STREAM_PROPERTIES_ID = #145#7#220#183#183#169#207#17#142#230#0#192#12#32#83#101; WMA_CONTENT_DESCRIPTION_ID = #51#38#178#117#142#102#207#17#166#217#0#170#0#98#206#108; WMA_EXTENDED_CONTENT_DESCRIPTION_ID = #64#164#208#210#7#227#210#17#151#240#0#160#201#94#168#80; { Max. number of supported comment fields } WMA_FIELD_COUNT = 7; { Names of supported comment fields } WMA_FIELD_NAME: array [1..WMA_FIELD_COUNT] of UnicodeString = ('WM/TITLE', 'WM/AUTHOR', 'WM/ALBUMTITLE', 'WM/TRACK', 'WM/YEAR', 'WM/GENRE', 'WM/DESCRIPTION'); { Max. number of characters in tag field } WMA_MAX_STRING_SIZE = 250; type { Object ID } ObjectID = array [1..16] of Char; { Tag data } TagData = array [1..WMA_FIELD_COUNT] of UnicodeString; { File data - for internal use } FileData = record FileSize: Integer; { File size (bytes) } MaxBitRate: Integer; { Max. bit rate (bps) } Channels: Word; { Number of channels } SampleRate: Integer; { Sample rate (hz) } ByteRate: Integer; { Byte rate } Tag: TagData; { WMA tag information } end; { ********************* Auxiliary functions & procedures ******************** } function ReadFieldString(const Source: TStream; DataSize: Word): UnicodeString; var Iterator, StringSize: Integer; FieldData: array [1..WMA_MAX_STRING_SIZE * 2] of Byte; begin { Read field data and convert to Unicode string } Result := ''; StringSize := DataSize div 2; if StringSize > WMA_MAX_STRING_SIZE then StringSize := WMA_MAX_STRING_SIZE; Source.ReadBuffer(FieldData, StringSize * 2); Source.Seek(DataSize - StringSize * 2, soFromCurrent); for Iterator := 1 to StringSize do Result := Result + WideChar(FieldData[Iterator * 2 - 1] + (FieldData[Iterator * 2] shl 8)); end; { --------------------------------------------------------------------------- } procedure ReadTagStandard(const Source: TStream; var Tag: TagData); var Iterator: Integer; FieldSize: array [1..5] of Word; FieldValue: UnicodeString; begin { Read standard tag data } Source.ReadBuffer(FieldSize, SizeOf(FieldSize)); for Iterator := 1 to 5 do if FieldSize[Iterator] > 0 then begin { Read field value } FieldValue := ReadFieldString(Source, FieldSize[Iterator]); { Set corresponding tag field if supported } case Iterator of 1: Tag[1] := FieldValue; 2: Tag[2] := FieldValue; 4: Tag[7] := FieldValue; end; end; end; { --------------------------------------------------------------------------- } procedure ReadTagExtended(const Source: TStream; var Tag: TagData); var Iterator1, Iterator2, FieldCount, DataSize, DataType: Word; FieldName, FieldValue: UnicodeString; begin { Read extended tag data } Source.ReadBuffer(FieldCount, SizeOf(FieldCount)); for Iterator1 := 1 to FieldCount do begin { Read field name } Source.ReadBuffer(DataSize, SizeOf(DataSize)); FieldName := ReadFieldString(Source, DataSize); { Read value data type } Source.ReadBuffer(DataType, SizeOf(DataType)); { Read field value only if string } if DataType = 0 then begin Source.ReadBuffer(DataSize, SizeOf(DataSize)); FieldValue := ReadFieldString(Source, DataSize); end else Source.Seek(DataSize, soFromCurrent); { Set corresponding tag field if supported } for Iterator2 := 1 to WMA_FIELD_COUNT do if UpperCase(Trim(FieldName)) = WMA_FIELD_NAME[Iterator2] then Tag[Iterator2] := FieldValue; end; end; { --------------------------------------------------------------------------- } procedure ReadObject(const ID: ObjectID; Source: TStream; var Data: FileData); begin { Read data from header object if supported } if ID = WMA_FILE_PROPERTIES_ID then begin { Read file properties } Source.Seek(80, soFromCurrent); Source.ReadBuffer(Data.MaxBitRate, SizeOf(Data.MaxBitRate)); end; if ID = WMA_STREAM_PROPERTIES_ID then begin { Read stream properties } Source.Seek(60, soFromCurrent); Source.ReadBuffer(Data.Channels, SizeOf(Data.Channels)); Source.ReadBuffer(Data.SampleRate, SizeOf(Data.SampleRate)); Source.ReadBuffer(Data.ByteRate, SizeOf(Data.ByteRate)); end; if ID = WMA_CONTENT_DESCRIPTION_ID then begin { Read standard tag data } Source.Seek(4, soFromCurrent); ReadTagStandard(Source, Data.Tag); end; if ID = WMA_EXTENDED_CONTENT_DESCRIPTION_ID then begin { Read extended tag data } Source.Seek(4, soFromCurrent); ReadTagExtended(Source, Data.Tag); end; end; { --------------------------------------------------------------------------- } function ReadData(const FileName: String; var Data: FileData): Boolean; var Source: TFileStreamEx; ID: ObjectID; Iterator, ObjectCount, ObjectSize, Position: Integer; begin { Read file data } try Source := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); Data.FileSize := Source.Size; { Check for existing header } Source.ReadBuffer(ID, SizeOf(ID)); if ID = WMA_HEADER_ID then begin Source.Seek(8, soFromCurrent); Source.ReadBuffer(ObjectCount, SizeOf(ObjectCount)); Source.Seek(2, soFromCurrent); { Read all objects in header and get needed data } for Iterator := 1 to ObjectCount do begin Position := Source.Position; Source.ReadBuffer(ID, SizeOf(ID)); Source.ReadBuffer(ObjectSize, SizeOf(ObjectSize)); ReadObject(ID, Source, Data); Source.Seek(Position + ObjectSize, soFromBeginning); end; end; Source.Free; Result := true; except Result := false; end; end; { --------------------------------------------------------------------------- } function IsValid(const Data: FileData): Boolean; begin { Check for data validity } Result := (Data.MaxBitRate > 0) and (Data.MaxBitRate < 320000) and ((Data.Channels = WMA_CM_MONO) or (Data.Channels = WMA_CM_STEREO)) and (Data.SampleRate >= 8000) and (Data.SampleRate <= 96000) and (Data.ByteRate > 0) and (Data.ByteRate < 40000); end; { --------------------------------------------------------------------------- } function ExtractTrack(const TrackString: UnicodeString): Integer; var Value, Code: Integer; begin { Extract track from string } Result := 0; Val(TrackString, Value, Code); if Code = 0 then Result := Value; end; { ********************** Private functions & procedures ********************* } procedure TWMAfile.FResetData; begin { Reset variables } FValid := false; FFileSize := 0; FChannelModeID := WMA_CM_UNKNOWN; FSampleRate := 0; FDuration := 0; FBitRate := 0; FTitle := ''; FArtist := ''; FAlbum := ''; FTrack := 0; FYear := ''; FGenre := ''; FComment := ''; end; { --------------------------------------------------------------------------- } function TWMAfile.FGetChannelMode: string; begin { Get channel mode name } Result := WMA_MODE[FChannelModeID]; end; { ********************** Public functions & procedures ********************** } constructor TWMAfile.Create; begin { Create object } inherited; FResetData; end; { --------------------------------------------------------------------------- } function TWMAfile.ReadFromFile(const FileName: String): Boolean; var Data: FileData; begin { Reset variables and load file data } FResetData; FillChar(Data, SizeOf(Data), 0); Result := ReadData(FileName, Data); { Process data if loaded and valid } if Result and IsValid(Data) then begin FValid := true; { Fill properties with loaded data } FFileSize := Data.FileSize; FChannelModeID := Data.Channels; FSampleRate := Data.SampleRate; FDuration := Data.FileSize * 8 / Data.MaxBitRate; FBitRate := Data.ByteRate * 8 div 1000; FTitle := UTF16ToUTF8(Trim(Data.Tag[1])); FArtist := UTF16ToUTF8(Trim(Data.Tag[2])); FAlbum := UTF16ToUTF8(Trim(Data.Tag[3])); FTrack := ExtractTrack(Trim(Data.Tag[4])); FYear := UTF16ToUTF8(Trim(Data.Tag[5])); FGenre := UTF16ToUTF8(Trim(Data.Tag[6])); FComment := UTF16ToUTF8(Trim(Data.Tag[7])); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/WAVfile.pas������������������������������������������0000644�0001750�0000144�00000041173�15104114162�022404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TWAVfile - for manipulating with WAV files } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.5 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.44 (23 March 2005) by Gambit } { - multichannel support } { } { Version 1.43 (27 August 2004) by Gambit } { - added procedures: TrimFromEnd, TrimFromBeginning and FindSilence } { - removed WriteNewLength procedure (replaced with TrimFromEnd) } { - fixed some FormatSize/HeaderSize/SampleNumber related bugs } { } { Version 1.32 (05 June 2004) by Gambit } { - WriteNewLength now properly truncates the file } { } { Version 1.31 (April 2004) by Gambit } { - Added Ratio property } { } { Version 1.3 (22 February 2004) by Gambit } { - SampleNumber is now read correctly } { - added procedure to change the duration (SampleNumber and FileSize) } { of the wav file (can be used for example to trim off the encoder } { padding from decoded mp3 files) } { } { Version 1.2 (14 January 2002) } { - Fixed bug with calculating of duration } { - Some class properties added/changed } { } { Version 1.1 (9 October 2001) } { - Fixed bug with WAV header detection } { } { Version 1.0 (31 July 2001) } { - Info: channel mode, sample rate, bits per sample, file size, duration } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit WAVfile; interface uses Classes, SysUtils, DCClassesUtf8; const { Format type names } WAV_FORMAT_UNKNOWN = 'Unknown'; WAV_FORMAT_PCM = 'Windows PCM'; WAV_FORMAT_ADPCM = 'Microsoft ADPCM'; WAV_FORMAT_ALAW = 'A-LAW'; WAV_FORMAT_MULAW = 'MU-LAW'; WAV_FORMAT_DVI_IMA_ADPCM = 'DVI/IMA ADPCM'; WAV_FORMAT_MP3 = 'MPEG Layer III'; { Channel mode names } WAV_MODE: array [0..3] of string = ('Unknown', 'Mono', 'Stereo', 'Multichannel'); type { Class TWAVfile } TWAVfile = class(TObject) private { Private declarations } FValid: Boolean; FFormatSize: Cardinal; FFormatID: Word; FChannelNumber: Byte; FSampleRate: Cardinal; FBytesPerSecond: Cardinal; FBlockAlign: Word; FBitsPerSample: Byte; FSampleNumber: Cardinal; FHeaderSize: Cardinal; FFileSize: Cardinal; FFileName: String; FAmountTrimBegin: Cardinal; FAmountTrimEnd: Cardinal; FBitrate: Double; procedure FResetData; function FGetFormat: string; function FGetChannelMode: string; function FGetDuration: Double; function FGetRatio: Double; public { Public declarations } constructor Create; { Create object } function ReadFromFile(const FileName: String): Boolean; { Load header } property Valid: Boolean read FValid; { True if header valid } property FormatSize: Cardinal read FFormatSize; property FormatID: Word read FFormatID; { Format type code } property Format: string read FGetFormat; { Format type name } property ChannelNumber: Byte read FChannelNumber; { Number of channels } property ChannelMode: string read FGetChannelMode; { Channel mode name } property SampleRate: Cardinal read FSampleRate; { Sample rate (hz) } property BytesPerSecond: Cardinal read FBytesPerSecond; { Bytes/second } property BlockAlign: Word read FBlockAlign; { Block alignment } property BitsPerSample: Byte read FBitsPerSample; { Bits/sample } property HeaderSize: Cardinal read FHeaderSize; { Header size (bytes) } property FileSize: Cardinal read FFileSize; { File size (bytes) } property Duration: Double read FGetDuration; { Duration (seconds) } property SampleNumber: Cardinal read FSampleNumber; procedure TrimFromBeginning(const Samples: Cardinal); procedure TrimFromEnd(const Samples: Cardinal); procedure FindSilence(const FromBeginning, FromEnd: Boolean); property Ratio: Double read FGetRatio; { Compression ratio (%) } property AmountTrimBegin: Cardinal read FAmountTrimBegin; property AmountTrimEnd: Cardinal read FAmountTrimEnd; property Bitrate: Double read FBitrate; end; implementation const DATA_CHUNK = 'data'; { Data chunk ID } type { WAV file header data } WAVRecord = record { RIFF file header } RIFFHeader: array [1..4] of Char; { Must be "RIFF" } FileSize: Integer; { Must be "RealFileSize - 8" } WAVEHeader: array [1..4] of Char; { Must be "WAVE" } { Format information } FormatHeader: array [1..4] of Char; { Must be "fmt " } FormatSize: Cardinal; { Format size } FormatID: Word; { Format type code } ChannelNumber: Word; { Number of channels } SampleRate: Integer; { Sample rate (hz) } BytesPerSecond: Integer; { Bytes/second } BlockAlign: Word; { Block alignment } BitsPerSample: Word; { Bits/sample } DataHeader: array [1..4] of Char; { Can be "data" } SampleNumber: Cardinal; { Number of samples (optional) } end; { ********************* Auxiliary functions & procedures ******************** } function ReadWAV(const FileName: String; var WAVData: WAVRecord): Boolean; var SourceFile: TFileStreamEx; begin try Result := true; { Set read-access and open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); { Read header } SourceFile.Read(WAVData, 36); { Read number of samples } if SourceFile.Size > (WAVData.FormatSize + 24) then begin SourceFile.Seek(WAVData.FormatSize + 24, soFromBeginning); SourceFile.Read(WAVData.SampleNumber, 4); end; SourceFile.Free; except { Error } Result := false; end; end; { --------------------------------------------------------------------------- } function HeaderIsValid(const WAVData: WAVRecord): Boolean; begin Result := True; { Header validation } if WAVData.RIFFHeader <> 'RIFF' then Result := False; if WAVData.WAVEHeader <> 'WAVE' then Result := False; if WAVData.FormatHeader <> 'fmt ' then Result := False; if WAVData.ChannelNumber = 0 then Result := False; end; { ********************** Private functions & procedures ********************* } procedure TWAVfile.FResetData; begin { Reset all data } FValid := false; FFormatSize := 0; FFormatID := 0; FChannelNumber := 0; FSampleRate := 0; FBytesPerSecond := 0; FBlockAlign := 0; FBitsPerSample := 0; FSampleNumber := 0; FHeaderSize := 0; FFileSize := 0; FFileName := ''; FAmountTrimBegin := 0; FAmountTrimEnd := 0; FBitrate := 0; end; { --------------------------------------------------------------------------- } function TWAVfile.FGetFormat: string; begin { Get format type name } case FFormatID of 1: Result := WAV_FORMAT_PCM; 2: Result := WAV_FORMAT_ADPCM; 6: Result := WAV_FORMAT_ALAW; 7: Result := WAV_FORMAT_MULAW; 17: Result := WAV_FORMAT_DVI_IMA_ADPCM; 85: Result := WAV_FORMAT_MP3; else Result := ''; end; end; { --------------------------------------------------------------------------- } function TWAVfile.FGetChannelMode: string; begin { Get channel mode name } //multichannel if FChannelNumber > 2 then Result := WAV_MODE[3] else Result := WAV_MODE[FChannelNumber]; end; { --------------------------------------------------------------------------- } function TWAVfile.FGetDuration: Double; begin { Get duration } Result := 0; if FValid then begin if (FSampleNumber = 0) and (FBytesPerSecond > 0) then Result := (FFileSize - FHeaderSize) / FBytesPerSecond; if (FSampleNumber > 0) and (FSampleRate > 0) then Result := FSampleNumber / FSampleRate; end; end; { ********************** Public functions & procedures ********************** } constructor TWAVfile.Create; begin { Create object } inherited; FResetData; end; { --------------------------------------------------------------------------- } function TWAVfile.ReadFromFile(const FileName: String): Boolean; var WAVData: WAVRecord; begin { Reset and load header data from file to variable } FResetData; FillChar(WAVData, SizeOf(WAVData), 0); Result := ReadWAV(FileName, WAVData); { Process data if loaded and header valid } if (Result) and (HeaderIsValid(WAVData)) then begin FValid := true; { Fill properties with header data } FFormatSize := WAVData.FormatSize; FFormatID := WAVData.FormatID; FChannelNumber := WAVData.ChannelNumber; FSampleRate := WAVData.SampleRate; FBytesPerSecond := WAVData.BytesPerSecond; FBlockAlign := WAVData.BlockAlign; FBitsPerSample := WAVData.BitsPerSample; FSampleNumber := WAVData.SampleNumber div FBlockAlign; if WAVData.DataHeader = DATA_CHUNK then FHeaderSize := 44 else FHeaderSize := WAVData.FormatSize + 28; FFileSize := WAVData.FileSize + 8; if FHeaderSize > FFileSize then FHeaderSize := FFileSize; FFileName := FileName; FBitrate := FBytesPerSecond * 8 / 1000; end; end; { --------------------------------------------------------------------------- } function TWAVfile.FGetRatio: Double; begin { Get compression ratio } if FValid then if FSampleNumber = 0 then Result := FFileSize / ((FFileSize - FHeaderSize) / FBytesPerSecond * FSampleRate * (FChannelNumber * FBitsPerSample / 8) + 44) * 100 else Result := FFileSize / (FSampleNumber * (FChannelNumber * FBitsPerSample / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } procedure TWAVfile.TrimFromBeginning(const Samples: Cardinal); var SourceFile: TFileStreamEx; NewData, NewSamples, EraseOldData, NewFormatSize : Cardinal; begin try // blah, blah... should be self explanatory what happens here... SourceFile := TFileStreamEx.Create(FFileName, fmOpenReadWrite or fmShareDenyWrite); SourceFile.Seek(16, soFromBeginning); NewFormatSize := (Samples * FBlockAlign) + FFormatSize; SourceFile.Write(NewFormatSize, SizeOf(NewFormatSize)); SourceFile.Seek(FHeaderSize - 8, soFromBeginning); EraseOldData := 0; SourceFile.Write(EraseOldData, SizeOf(EraseOldData)); SourceFile.Seek(FHeaderSize + (Samples * FBlockAlign) - 8, soFromBeginning); NewData := 1635017060; // 'data' SourceFile.Write(NewData, SizeOf(NewData)); NewSamples := (FSampleNumber - Samples) * FBlockAlign; SourceFile.Write(NewSamples, SizeOf(NewSamples)); FFormatSize := NewFormatSize; FSampleNumber := FSampleNumber - Samples; FHeaderSize := FFormatSize + 28; SourceFile.Free; except { Error } end; end; { --------------------------------------------------------------------------- } procedure TWAVfile.TrimFromEnd(const Samples: Cardinal); var SourceFile: TFileStreamEx; NewSamples, NewSize : Cardinal; begin try SourceFile := TFileStreamEx.Create(FFileName, fmOpenReadWrite or fmShareDenyWrite); SourceFile.Seek(4, soFromBeginning); NewSamples := (FSampleNumber - Samples) * FBlockAlign; NewSize := NewSamples + FHeaderSize - 8; SourceFile.Write(NewSize, SizeOf(NewSize)); SourceFile.Seek(FHeaderSize - 4, soFromBeginning); SourceFile.Write(NewSamples, SizeOf(NewSamples)); SourceFile.Size := NewSamples + FHeaderSize; FSampleNumber := FSampleNumber - Samples; FFileSize := NewSamples + FHeaderSize; SourceFile.Free; except { Error } end; end; { --------------------------------------------------------------------------- } procedure TWAVfile.FindSilence(const FromBeginning, FromEnd: Boolean); var SourceFile: TFileStreamEx; ReadSample : Integer; AmountBegin, AmountEnd : Cardinal; begin try SourceFile := TFileStreamEx.Create(FFileName, fmOpenRead or fmShareDenyWrite); if FromBeginning then begin AmountBegin := 0; ReadSample := 0; SourceFile.Seek(FHeaderSize, soFromBeginning); // this assumes 16bit stereo repeat SourceFile.Read(ReadSample, SizeOf(ReadSample)); if ReadSample = 0 then Inc(AmountBegin); until (ReadSample <> 0) or (SourceFile.Position >= SourceFile.Size); FAmountTrimBegin := AmountBegin; end; if FromEnd then begin AmountEnd := 0; ReadSample := 0; repeat // this assumes 16bit stereo SourceFile.Seek(FFileSize - ((AmountEnd + 1) * 4), soFromBeginning); SourceFile.Read(ReadSample, SizeOf(ReadSample)); if ReadSample = 0 then Inc(AmountEnd); until ReadSample <> 0; FAmountTrimEnd := AmountEnd; end; SourceFile.Free; except { Error } end; end; { --------------------------------------------------------------------------- } end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/WAVPackfile.pas��������������������������������������0000644�0001750�0000144�00000033734�15104114162�023207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TWAVPackFile - for manipulating with WAVPack Files } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2003-2005 by Mattias Dahlberg } { } { Version 1.2 (09 August 2004) by jtclipper } { - updated to support WavPack version 4 files } { - added encoder detection } { } { Version 1.1 (April 2004) by Gambit } { - Added Ratio and Samples property } { } { Version 1.0 (August 2003) } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit WAVPackfile; interface uses Classes, SysUtils, APEtag, DCClassesUtf8; type TWAVPackfile = class(TObject) private FFileSize: int64; FValid: boolean; FFormatTag: integer; FVersion: integer; FChannels: integer; FSampleRate: integer; FBits: integer; FBitrate: double; FDuration: double; FEncoder: string; FAPEtag : TAPEtag; FTagSize: integer; FSamples: Int64; FBSamples: Int64; procedure FResetData; function FGetRatio: Double; function FGetChannelMode: string; public constructor Create; destructor Destroy; override; function ReadFromFile(const FileName: String): Boolean; function _ReadV3( f: TFileStreamEx ): boolean; function _ReadV4( f: TFileStreamEx ): boolean; property FileSize: int64 read FFileSize; property Valid: boolean read FValid; property FormatTag: integer read FFormatTag; property Version: integer read FVersion; property Channels: integer read FChannels; property ChannelMode: string read FGetChannelMode; property SampleRate: integer read FSamplerate; property Bits: integer read FBits; property Bitrate: double read FBitrate; property Duration: double read FDuration; property Samples: Int64 read FSamples; property BSamples: Int64 read FBSamples; property Ratio: Double read FGetRatio; property Encoder: string read FEncoder; property APEtag: TAPEtag read FAPEtag; end; implementation type wavpack_header3 = record ckID: array[0..3] of char; ckSize: longword; version: word; bits: word ; flags: word; shift: word; total_samples: longword; crc: longword; crc2: longword; extension: array[0..3] of char; extra_bc: byte; extras: array[0..2] of char; end; wavpack_header4 = record ckID: array[0..3] of char; ckSize: longword; version: word; track_no: byte; index_no: byte; total_samples: longword; block_index: longword; block_samples: longword; flags: longword; crc: longword; end; fmt_chunk = record wformattag: word; wchannels: word; dwsamplespersec: longword; dwavgbytespersec: longword; wblockalign: word; wbitspersample: word; end; riff_chunk = record id: array[0..3] of char; size: longword; end; const //version 3 flags MONO_FLAG_v3 = 1; // not stereo FAST_FLAG_v3 = 2; // non-adaptive predictor and stereo mode // RAW_FLAG_v3 = 4; // raw mode (no .wav header) // CALC_NOISE_v3 = 8; // calc noise in lossy mode (no longer stored) HIGH_FLAG_v3 = $10; // high quality mode (all modes) // BYTES_3_v3 = $20; // files have 3-byte samples // OVER_20_v3 = $40; // samples are over 20 bits WVC_FLAG_v3 = $80; // create/use .wvc (no longer stored) // LOSSY_SHAPE_v3 = $100; // noise shape (lossy mode only) // VERY_FAST_FLAG_v3 = $200; // double fast (no longer stored) NEW_HIGH_FLAG_v3 = $400; // new high quality mode (lossless only) // CANCEL_EXTREME_v3 = $800; // cancel EXTREME_DECORR // CROSS_DECORR_v3 = $1000; // decorrelate chans (with EXTREME_DECORR flag) // NEW_DECORR_FLAG_v3 = $2000; // new high-mode decorrelator // JOINT_STEREO_v3 = $4000; // joint stereo (lossy and high lossless) EXTREME_DECORR_v3 = $8000; // extra decorrelation (+ enables other flags) sample_rates: array[0..14] of integer = ( 6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000, 192000 ); { --------------------------------------------------------------------------- } procedure TWAVPackfile.FResetData; begin FFileSize := 0; FTagSize := 0; FValid := false; FFormatTag := 0; FChannels := 0; FSampleRate := 0; FBits := 0; FBitrate := 0; FDuration := 0; FVersion := 0; FEncoder := ''; FSamples := 0; FBSamples := 0; FAPEtag.ResetData; end; { --------------------------------------------------------------------------- } constructor TWAVPackfile.Create; begin inherited; FAPEtag := TAPEtag.Create; FResetData; end; destructor TWAVPackfile.Destroy; begin FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TWAVPackfile.FGetChannelMode: string; begin case FChannels of 1: result := 'Mono'; 2: result := 'Stereo'; else result := 'Surround'; end; end; { --------------------------------------------------------------------------- } function TWAVPackfile.ReadFromFile(const FileName: String): Boolean; var f: TFileStreamEx; marker: array[0..3] of char; begin FResetData; FAPEtag.ReadFromFile(FileName); FTagSize := FAPEtag.Size; try f := TFileStreamEx.create(FileName, fmOpenRead or fmShareDenyWrite); FFileSize := f.Size; //read first bytes FillChar( marker, SizeOf( marker ), 0 ); f.Read( marker, SizeOf( marker) ); f.Seek( 0, soFromBeginning ); if marker = 'RIFF' then begin result := _ReadV3( f ); end else if marker = 'wvpk' then begin result := _ReadV4( f ); end else begin result := False; end; finally FreeAndNil( f ); end; end; { --------------------------------------------------------------------------- } function TWAVPackfile._ReadV4( f: TFileStreamEx ): boolean; var wvh4: wavpack_header4; EncBuf : array[1..4096] of Byte; tempo : Integer; encoderbyte: Byte; begin result := false; FillChar( wvh4, SizeOf(wvh4) ,0); f.Read( wvh4, SizeOf(wvh4) ); if wvh4.ckID = 'wvpk' then // wavpack header found begin Result := true; FValid := true; FVersion := wvh4.version shr 8; FChannels := 2 - (wvh4.flags and 4); // mono flag FBits := ((wvh4.flags and 3) * 16); // bytes stored flag FSamples := wvh4.total_samples; FBSamples := wvh4.block_samples; FSampleRate := (wvh4.flags and ($1F shl 23)) shr 23; if (FSampleRate > 14) or (FSampleRate < 0) then begin FSampleRate := 44100; end else begin FSampleRate := sample_rates[ FSampleRate ]; end; if ((wvh4.flags and 8) = 8) then // hybrid flag begin FEncoder := 'hybrid lossy'; end else begin //if ((wvh4.flags and 2) = 2) then begin // lossless flag FEncoder := 'lossless'; end; { if ((wvh4.flags and $20) > 0) then // MODE_HIGH begin FEncoder := FEncoder + ' (high)'; end else if ((wvh4.flags and $40) > 0) then // MODE_FAST begin FEncoder := FEncoder + ' (fast)'; end; } FDuration := wvh4.total_samples / FSampleRate; if FDuration > 0 then FBitrate := (FFileSize - int64( FTagSize ) ) * 8 / (FSamples / FSampleRate) / 1000; FillChar(EncBuf, SizeOf(EncBuf), 0); f.Read(EncBuf, SizeOf(EncBuf)); for tempo := 1 to 4094 do begin If EncBuf[tempo] = $65 then if EncBuf[tempo + 1] = $02 then begin encoderbyte := EncBuf[tempo + 2]; if encoderbyte = 8 then FEncoder := FEncoder + ' (high)' else if encoderbyte = 0 then FEncoder := FEncoder + ' (normal)' else if encoderbyte = 2 then FEncoder := FEncoder + ' (fast)' else if encoderbyte = 6 then FEncoder := FEncoder + ' (very fast)'; Break; end; end; end; end; { --------------------------------------------------------------------------- } function TWAVPackfile._ReadV3( f: TFileStreamEx ): boolean; var chunk: riff_chunk; wavchunk: array[0..3] of char; fmt: fmt_chunk; hasfmt: boolean; fpos: int64; wvh3: wavpack_header3; begin result := false; hasfmt := false; // read and evaluate header FillChar( chunk, sizeof(chunk), 0 ); if (f.Read(chunk, sizeof(chunk)) <> SizeOf( chunk )) or (f.Read(wavchunk, sizeof(wavchunk)) <> SizeOf(wavchunk)) or (wavchunk <> 'WAVE') then exit; // start looking for chunks FillChar( chunk, SizeOf(chunk), 0 ); while (f.Position < f.Size) do begin if (f.read(chunk, sizeof(chunk)) < sizeof(chunk)) or (chunk.size <= 0) then break; fpos := f.Position; if chunk.id = 'fmt ' then begin // Format chunk found read it if (chunk.size >= sizeof(fmt)) and (f.Read(fmt, sizeof(fmt)) = sizeof(fmt)) then begin hasfmt := true; result := True; FValid := true; FFormatTag := fmt.wformattag; FChannels := fmt.wchannels; FSampleRate := fmt.dwsamplespersec; FBits := fmt.wbitspersample; FBitrate := fmt.dwavgbytespersec / 125.0; // 125 = 1/8*1000 end else begin break; end; end else if (chunk.id = 'data') and hasfmt then begin FillChar( wvh3, SizeOf(wvh3) ,0); f.Read( wvh3, SizeOf(wvh3) ); if wvh3.ckID = 'wvpk' then begin // wavpack header found result := true; FValid := true; FVersion := wvh3.version; FChannels := 2 - (wvh3.flags and 1); // mono flag FSamples := wvh3.total_samples; // Encoder guess if wvh3.bits > 0 then begin if (wvh3.flags and NEW_HIGH_FLAG_v3) > 0 then begin FEncoder := 'hybrid'; if (wvh3.flags and WVC_FLAG_v3) > 0 then begin FEncoder := FEncoder + ' lossless'; end else begin FEncoder := FEncoder + ' lossy'; end; if (wvh3.flags and EXTREME_DECORR_v3) > 0 then FEncoder := FEncoder + ' (high)'; end else if (wvh3.flags and (HIGH_FLAG_v3 or FAST_FLAG_v3)) = 0 then begin FEncoder := IntToStr( wvh3.bits + 3 ) + '-bit lossy'; end else begin FEncoder := IntToStr( wvh3.bits + 3 ) + '-bit lossy'; if (wvh3.flags and HIGH_FLAG_v3) > 0 then begin FEncoder := FEncoder + ' high'; end else begin FEncoder := FEncoder + ' fast'; end end; end else begin if (wvh3.flags and HIGH_FLAG_v3) = 0 then begin FEncoder := 'lossless (fast mode)'; end else if (wvh3.flags and EXTREME_DECORR_v3) > 0 then begin FEncoder := 'lossless (high mode)'; end else begin FEncoder := 'lossless'; end; end; if FSampleRate <= 0 then FSampleRate := 44100; FDuration := wvh3.total_samples / FSampleRate; if FDuration > 0 then FBitrate := 8.0*(FFileSize - int64( FTagSize ) - int64(wvh3.ckSize))/(FDuration*1000.0); end; break; end else begin // not a wv file break; end; f.seek( fpos + chunk.size, soFromBeginning ); end; // while end; { --------------------------------------------------------------------------- } function TWAVPackfile.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / (FSamples * (FChannels * FBits / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } end. ������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/TwinVQ.pas�������������������������������������������0000644�0001750�0000144�00000031362�15104114162�022276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TTwinVQ - for extracting information from TwinVQ file header } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.3 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.2 (April 2004) by Gambit } { - Added Ratio property } { } { Version 1.1 (13 August 2002) } { - Added property Album } { - Support for Twin VQ 2.0 } { } { Version 1.0 (6 August 2001) } { - File info: channel mode, bit rate, sample rate, file size, duration } { - Tag info: title, comment, author, copyright, compressed file name } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit TwinVQ; interface uses Classes, SysUtils, DCClassesUtf8; const { Used with ChannelModeID property } TWIN_CM_MONO = 1; { Index for mono mode } TWIN_CM_STEREO = 2; { Index for stereo mode } { Channel mode names } TWIN_MODE: array [0..2] of string = ('Unknown', 'Mono', 'Stereo'); type { Class TTwinVQ } TTwinVQ = class(TObject) private { Private declarations } FValid: Boolean; FChannelModeID: Byte; FBitRate: Byte; FSampleRate: Word; FFileSize: Cardinal; FDuration: Double; FTitle: string; FComment: string; FAuthor: string; FCopyright: string; FOriginalFile: string; FAlbum: string; procedure FResetData; function FGetChannelMode: string; function FIsCorrupted: Boolean; function FGetRatio: Double; public { Public declarations } constructor Create; { Create object } function ReadFromFile(const FileName: String): Boolean; { Load header } property Valid: Boolean read FValid; { True if header valid } property ChannelModeID: Byte read FChannelModeID; { Channel mode code } property ChannelMode: string read FGetChannelMode; { Channel mode name } property BitRate: Byte read FBitRate; { Total bit rate } property SampleRate: Word read FSampleRate; { Sample rate (hz) } property FileSize: Cardinal read FFileSize; { File size (bytes) } property Duration: Double read FDuration; { Duration (seconds) } property Title: string read FTitle; { Title name } property Comment: string read FComment; { Comment } property Author: string read FAuthor; { Author name } property Copyright: string read FCopyright; { Copyright } property OriginalFile: string read FOriginalFile; { Original file name } property Album: string read FAlbum; { Album title } property Corrupted: Boolean read FIsCorrupted; { True if file corrupted } property Ratio: Double read FGetRatio; { Compression ratio (%) } end; implementation const { Twin VQ header ID } TWIN_ID = 'TWIN'; { Max. number of supported tag-chunks } TWIN_CHUNK_COUNT = 6; { Names of supported tag-chunks } TWIN_CHUNK: array [1..TWIN_CHUNK_COUNT] of string = ('NAME', 'COMT', 'AUTH', '(c) ', 'FILE', 'ALBM'); type { TwinVQ chunk header } ChunkHeader = record ID: array [1..4] of Char; { Chunk ID } Size: Cardinal; { Chunk size } end; { File header data - for internal use } HeaderInfo = record { Real structure of TwinVQ file header } ID: array [1..4] of Char; { Always "TWIN" } Version: array [1..8] of Char; { Version ID } Size: Cardinal; { Header size } Common: ChunkHeader; { Common chunk header } ChannelMode: Cardinal; { Channel mode: 0 - mono, 1 - stereo } BitRate: Cardinal; { Total bit rate } SampleRate: Cardinal; { Sample rate (khz) } SecurityLevel: Cardinal; { Always 0 } { Extended data } FileSize: Cardinal; { File size (bytes) } Tag: array [1..TWIN_CHUNK_COUNT] of string; { Tag information } end; { ********************* Auxiliary functions & procedures ******************** } function ReadHeader(const FileName: String; var Header: HeaderInfo): Boolean; var SourceFile: TFileStreamEx; Transferred: Integer; begin try Result := true; { Set read-access and open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); { Read header and get file size } Transferred := SourceFile.Read(Header, 40); Header.FileSize := SourceFile.Size; SourceFile.Free; { if transfer is not complete } if Transferred < 40 then Result := false; except { Error } Result := false; end; end; { --------------------------------------------------------------------------- } function GetChannelModeID(const Header: HeaderInfo): Byte; begin { Get channel mode from header } case Swap(Header.ChannelMode shr 16) of 0: Result := TWIN_CM_MONO; 1: Result := TWIN_CM_STEREO else Result := 0; end; end; { --------------------------------------------------------------------------- } function GetBitRate(const Header: HeaderInfo): Byte; begin { Get bit rate from header } Result := Swap(Header.BitRate shr 16); end; { --------------------------------------------------------------------------- } function GetSampleRate(const Header: HeaderInfo): Word; begin { Get real sample rate from header } Result := Swap(Header.SampleRate shr 16); case Result of 11: Result := 11025; 22: Result := 22050; 44: Result := 44100; else Result := Result * 1000; end; end; { --------------------------------------------------------------------------- } function GetDuration(const Header: HeaderInfo): Double; begin { Get duration from header } Result := Abs((Header.FileSize - Swap(Header.Size shr 16) - 20)) / 125 / Swap(Header.BitRate shr 16); end; { --------------------------------------------------------------------------- } function HeaderEndReached(const Chunk: ChunkHeader): Boolean; begin { Check for header end } Result := (Ord(Chunk.ID[1]) < 32) or (Ord(Chunk.ID[2]) < 32) or (Ord(Chunk.ID[3]) < 32) or (Ord(Chunk.ID[4]) < 32) or (Chunk.ID = 'DATA'); end; { --------------------------------------------------------------------------- } procedure SetTagItem(const ID, Data: string; var Header: HeaderInfo); var Iterator: Byte; begin { Set tag item if supported tag-chunk found } for Iterator := 1 to TWIN_CHUNK_COUNT do if TWIN_CHUNK[Iterator] = ID then Header.Tag[Iterator] := Data; end; { --------------------------------------------------------------------------- } procedure ReadTag(const FileName: String; var Header: HeaderInfo); var SourceFile: TFileStreamEx; Chunk: ChunkHeader; Data: array [1..250] of Char; begin try { Set read-access, open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); SourceFile.Seek(16, soFromBeginning); repeat begin FillChar(Data, SizeOf(Data), 0); { Read chunk header } SourceFile.Read(Chunk, 8); { Read chunk data and set tag item if chunk header valid } if HeaderEndReached(Chunk) then break; SourceFile.Read(Data, Swap(Chunk.Size shr 16) mod SizeOf(Data)); SetTagItem(Chunk.ID, Data, Header); end; until SourceFile.Position >= SourceFile.Size; SourceFile.Free; except end; end; { ********************** Private functions & procedures ********************* } procedure TTwinVQ.FResetData; begin FValid := false; FChannelModeID := 0; FBitRate := 0; FSampleRate := 0; FFileSize := 0; FDuration := 0; FTitle := ''; FComment := ''; FAuthor := ''; FCopyright := ''; FOriginalFile := ''; FAlbum := ''; end; { --------------------------------------------------------------------------- } function TTwinVQ.FGetChannelMode: string; begin Result := TWIN_MODE[FChannelModeID]; end; { --------------------------------------------------------------------------- } function TTwinVQ.FIsCorrupted: Boolean; begin { Check for file corruption } Result := (FValid) and ((FChannelModeID = 0) or (FBitRate < 8) or (FBitRate > 192) or (FSampleRate < 8000) or (FSampleRate > 44100) or (FDuration < 0.1) or (FDuration > 10000)); end; { ********************** Public functions & procedures ********************** } constructor TTwinVQ.Create; begin inherited; FResetData; end; { --------------------------------------------------------------------------- } function TTwinVQ.ReadFromFile(const FileName: String): Boolean; var Header: HeaderInfo; begin { Reset data and load header from file to variable } FResetData; Result := ReadHeader(FileName, Header); { Process data if loaded and header valid } if (Result) and (Header.ID = TWIN_ID) then begin FValid := true; { Fill properties with header data } FChannelModeID := GetChannelModeID(Header); FBitRate := GetBitRate(Header); FSampleRate := GetSampleRate(Header); FFileSize := Header.FileSize; FDuration := GetDuration(Header); { Get tag information and fill properties } ReadTag(FileName, Header); FTitle := Trim(Header.Tag[1]); FComment := Trim(Header.Tag[2]); FAuthor := Trim(Header.Tag[3]); FCopyright := Trim(Header.Tag[4]); FOriginalFile := Trim(Header.Tag[5]); FAlbum := Trim(Header.Tag[6]); end; end; { --------------------------------------------------------------------------- } function TTwinVQ.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / ((FDuration * FSampleRate) * (FChannelModeID * 16 / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/TTA.pas����������������������������������������������0000644�0001750�0000144�00000016112�15104114162�021532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TTTA - for manipulating with TTA Files } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2004-2005 by Gambit } { } { Version 1.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.0 (12 August 2004) } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit TTA; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag, DCClassesUtf8; type tta_header = packed record //TTAid: array[0..3] of Char; AudioFormat: Word; NumChannels: Word; BitsPerSample: Word; SampleRate: Longword; DataLength: Longword; CRC32: Longword; end; { Class TTTA } TTTA = class(TObject) private { Private declarations } FFileSize: Int64; FValid: Boolean; FAudioFormat: Cardinal; FChannels: Cardinal; FBits: Cardinal; FSampleRate: Cardinal; FSamples: Cardinal; FCRC32: Cardinal; FBitrate: Double; FDuration: Double; FID3v1: TID3v1; FID3v2: TID3v2; FAPEtag: TAPEtag; function FGetRatio: Double; procedure FResetData; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load header } property FileSize: Int64 read FFileSize; property Valid: Boolean read FValid; property AudioFormat: Cardinal read FAudioFormat; property Channels: Cardinal read FChannels; property Bits: Cardinal read FBits; property SampleRate: Cardinal read FSampleRate; property Samples: Cardinal read FSamples; { Number of samples } property CRC32: Cardinal read FCRC32; property Bitrate: Double read FBitrate; property Duration: Double read FDuration; property Ratio: Double read FGetRatio; { Compression ratio (%) } property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } end; implementation { ********************** Private functions & procedures ********************* } procedure TTTA.FResetData; begin { Reset all data } FFileSize := 0; FValid := False; FAudioFormat := 0; FChannels := 0; FBits := 0; FSampleRate := 0; FSamples := 0; FCRC32 := 0; FBitrate := 0; FDuration := 0; FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; end; { ********************** Public functions & procedures ********************** } constructor TTTA.Create; begin { Create object } inherited; FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; end; (* -------------------------------------------------------------------------- *) destructor TTTA.Destroy; begin FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; (* -------------------------------------------------------------------------- *) function TTTA.ReadFromFile(const FileName: String): Boolean; var f: TFileStreamEx; SignatureChunk: array[0..3] of Char; ttaheader: tta_header; TagSize: Int64; begin Result := False; FResetData; // load tags first FID3v2.ReadFromFile(FileName); FID3v1.ReadFromFile(FileName); FAPEtag.ReadFromFile(FileName); // calulate total tag size TagSize := 0; if FID3v1.Exists then inc(TagSize,128); if FID3v2.Exists then inc(TagSize, FID3v2.Size); if FAPEtag.Exists then inc(TagSize, FAPETag.Size); // begin reading data from file f:=nil; try f := TFileStreamEx.create(FileName, fmOpenRead or fmShareDenyWrite); // seek past id3v2-tag if FID3v2.Exists then begin f.Seek(FID3v2.Size, soFromBeginning); end; if (f.Read(SignatureChunk, SizeOf(SignatureChunk)) = SizeOf(SignatureChunk)) and (StrLComp(SignatureChunk,'TTA1',4) = 0) then begin // start looking for chunks FillChar(ttaheader, SizeOf(ttaheader),0); f.Read(ttaheader, SizeOf(ttaheader)); FFileSize := f.Size; FValid := TRUE; FAudioFormat := ttaheader.AudioFormat; FChannels := ttaheader.NumChannels; FBits := ttaheader.BitsPerSample; FSampleRate := ttaheader.SampleRate; FSamples := ttaheader.DataLength; FCRC32 := ttaheader.CRC32; FBitrate := FFileSize * 8 / (FSamples / FSampleRate) / 1000; FDuration := ttaheader.DataLength / ttaheader.SampleRate; Result := True; end; finally f.free; end; end; (* -------------------------------------------------------------------------- *) function TTTA.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / (FSamples * (FChannels * FBits / 8) + 44) * 100 else Result := 0; end; (* -------------------------------------------------------------------------- *) end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/README.txt�������������������������������������������0000644�0001750�0000144�00000035330�15104114162�022076� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Programming tools for Borland Delphi 3, 4, 5, 6, 7, 2005 } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 2.3 (27 May 2005) } { } { The pack includes several components described below: } { } { AAC - for manipulating with AAC file information } { AC3 - for manipulating with AC3 file information } { APE Tag - for manipulating with APE Tags } { CDDA Track - for getting information for CDDA track } { DTS - for manipulating with DTS file information } { FLAC - for manipulating with FLAC file information } { fpl - reads foobar2000 playlist files (*.fpl) } { ID3v1 - for manipulating with ID3v1 tags } { ID3v2 - for manipulating with ID3v2 tags } { Monkey - for manipulating with Monkey's Audio file information } { MPEG Audio - for manipulating with MPEG audio file information } { Musepack - for manipulating with Musepack file information } { Ogg Vorbis - for manipulating with Ogg Vorbis file information } { OptimFROG - for manipulating with OptimFROG file information } { Speex - for manipulating with Speex file information } { TTA - for manipulating with TTA file information } { TwinVQ - for extracting information from TwinVQ file header } { Vorbis Comment - for manipulating with Vorbis Comments } { WAV - for manipulating with WAV files } { WavPack - for manipulating with WAVPack Files } { WMA - for extracting information from WMA file header } { } { To compile, you need to have these components installed: } { - JEDI VCL 3.00 } { http://jvcl.sourceforge.net } { - TntWare Delphi Unicode Controls } { http://www.tntware.com/delphicontrols/unicode/ } { } { You are welcome to send bug reports, comments and suggestions. } { Spoken languages: English, German. } { } { 27.05.2005 - version 2.3 } { - unicode file access support } { } { 13.01.2005 - version 2.2 } { - added AC3 component } { - added DTS component } { - updated APE Tag unit (writing support for APE 2.0 tags) } { } { 31.12.2004 - version 2.1 } { - added TTA component } { - added Speex component } { - updated WavPack component } { - added support for Lyrics3 v2.00 Tags to the ID3v1 component } { - updated FLAC component } { - updated WAV component } { - updated MPEG Audio component } { - some other updates/fixes to some components } { } { 14.06.2004 - version 2.0 } { - added OptimFROG component } { - added WavPack component } { - added Vorbis Comment component } { - added fpl component } { - many changes/updates/fixes } { - ATL is now released under the GNU LGPL license } { } { 04.11.2002 } { - TCDAtrack: first release } { - TMPEGaudio: ability to recognize QDesign MPEG audio encoder } { - TMPEGaudio: fixed bug with MPEG Layer II } { - TMPEGaudio: fixed bug with very big files } { } { 02.10.2002 } { - TAACfile: first release } { - TID3v2: added property TrackString } { - TOggVorbis: writing support for Vorbis tag } { - TOggVorbis: changed several properties } { - TOggVorbis: fixed bug with long Vorbis tag fields } { } { 13.08.2002 } { - TFLACfile: first release } { - TTwinVQ: Added property Album } { - TTwinVQ: Support for Twin VQ 2.0 } { } { 29.07.2002 } { - TMonkey: correction for calculating of duration } { - TID3v2: reading support for Unicode } { - TID3v2: removed limitation for the track number } { } { 23.05.2002 } { - TMPEGaudio: improved reading performance (up to 50% faster) } { - TID3v2: support for padding } { } { 29.04.2002 } { - TWMAfile: first release } { } { 21.04.2002 } { - TAPEtag: first release } { } { 24.03.2002 } { - TID3v2: reading support for ID3v2.2.x & ID3v2.4.x tags } { } { 18.02.2002 } { - TOggVorbis: added property BitRateNominal } { - TOggVorbis: fixed bug with tag fields } { } { 16.02.2002 } { - TID3v2: fixed bug with property Comment } { - TID3v2: added info: composer, encoder, copyright, language, link } { } { 08.02.2002 } { - TMPEGplus: fixed bug with property Corrupted } { } { 14.01.2002 } { - TWAVfile: fixed bug with calculating of duration } { - TWAVfile: some class properties added/changed } { } { 21.10.2001 } { - TOggVorbis: support for UTF-8 } { - TOggVorbis: fixed bug with vendor info detection } { } { 17.10.2001 } { - TID3v2: writing support for ID3v2.3.x tags } { - TID3v2: fixed bug with track number detection } { - TID3v2: fixed bug with tag reading } { } { 09.10.2001 } { - TWAVfile: fixed bug with WAV header detection } { } { 11.09.2001 } { - TMPEGaudio: improved encoder guessing for CBR files } { - TMonkey: added property Samples } { - TMonkey: removed WAV header information } { } { 07.09.2001 } { - TMonkey: first release } { } { 31.08.2001 } { - TMPEGaudio: first release } { - TID3v2: added public procedure ResetData } { } { 15.08.2001 } { - TOggVorbis: first release } { } { 14.08.2001 } { - TID3v2: first release } { } { 06.08.2001 } { - TTwinVQ: first release } { } { 02.08.2001 } { - TMPEGplus: some class properties added/changed } { } { 31.07.2001 } { - TWAVfile: first release } { } { 26.07.2001 } { - TMPEGplus: fixed reading problem with "read only" files } { } { 25.07.2001 } { - TID3v1: first release } { } { 23.05.2001 } { - TMPEGplus: first release } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/OptimFROG.pas����������������������������������������0000644�0001750�0000144�00000023741�15104114162�022656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TOptimFROG - for manipulating with OptimFROG file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2003-2005 by Erik Stenborg } { } { Version 1.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.0 (10 July 2003) } { - Support for OptimFROG files via modification of TMonkey class by Jurgen } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { - Class TAPEtag: reading & writing support for APE tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit OptimFROG; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag, DCClassesUtf8; const OFR_COMPRESSION: array [0..9] of String = ('fast', 'normal', 'high', 'extra', 'best', 'ultra', 'insane', 'highnew', 'extranew', 'bestnew'); OFR_BITS: array [0..10] of ShortInt = (8, 8, 16, 16, 24, 24, 32, 32, -32, -32, -32); //negative value corresponds to floating point type. OFR_CHANNELMODE: array [0..1] of String = ('Mono', 'Stereo'); type { Real structure of OptimFROG header } TOfrHeader = packed record ID: array [1..4] of Char; { Always 'OFR ' } Size: Cardinal; Length: Cardinal; HiLength: Word; SampleType, ChannelMode: Byte; SampleRate: Integer; EncoderID: Word; CompressionID: Byte; end; { Class TOptimFrog } TOptimFrog = class(TObject) private { Private declarations } FFileLength: Int64; FHeader: TOfrHeader; FID3v1: TID3v1; FID3v2: TID3v2; FAPEtag: TAPEtag; procedure FResetData; function FGetValid: Boolean; function FGetVersion: string; function FGetCompression: string; function FGetBits: ShortInt; function FGetChannelMode: string; function FGetSamples: Int64; function FGetDuration: Double; function FGetRatio: Double; function FGetSampleRate: Integer; function FGetChannels: Byte; function FGetBitrate: Integer; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; {Load header } property FileLength: Int64 read FFileLength; { File length (bytes) } property Header: TOfrHeader read FHeader; { OptimFROG header } property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } property Valid: Boolean read FGetValid; { True if header valid } property Version: string read FGetVersion; { Encoder version } property Compression: string read FGetCompression; { Compression level } property Bits: ShortInt read FGetBits; { Bits per sample } property ChannelMode: string read FGetChannelMode; { Channel mode } property Samples: Int64 read FGetSamples; { Number of samples } property Duration: Double read FGetDuration; { Duration (seconds) } property SampleRate: Integer read FGetSampleRate; { Sample rate (Hz) } property Ratio: Double read FGetRatio; { Compression ratio (%) } property Channels: Byte read FGetChannels; property Bitrate: Integer read FGetBitrate; end; implementation { ********************** Private functions & procedures ********************* } procedure TOptimFrog.FResetData; begin { Reset data } FFileLength := 0; FillChar(FHeader, SizeOf(FHeader), 0); FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetValid: Boolean; begin Result := (FHeader.ID = 'OFR ') and (FHeader.SampleRate > 0) and (FHeader.SampleType in [0..10]) and (FHeader.ChannelMode in [0..1]) and (FHeader.CompressionID shr 3 in [0..9]); end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetVersion: string; begin { Get encoder version } Result := Format('%5.3f', [((FHeader.EncoderID shr 4) + 4500) / 1000]); end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetCompression: string; begin { Get compression level } Result := OFR_COMPRESSION[FHeader.CompressionID shr 3] end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetBits: ShortInt; begin { Get number of bits per sample } Result := OFR_BITS[FHeader.SampleType] end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetChannelMode: string; begin { Get channel mode } Result := OFR_CHANNELMODE[FHeader.ChannelMode] end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetSamples: Int64; var Res: array [0..1] of Cardinal absolute Result; begin { Get number of samples } Res[0] := Header.Length shr Header.ChannelMode; Res[1] := Header.HiLength shr Header.ChannelMode; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetDuration: Double; begin { Get song duration } if FHeader.SampleRate > 0 then Result := FGetSamples / FHeader.SampleRate else Result := 0; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetSampleRate: Integer; begin Result := Header.SampleRate; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetRatio: Double; begin { Get compression ratio } if FGetValid then Result := FFileLength / (FGetSamples * ((FHeader.ChannelMode+1) * Abs(FGetBits) / 8) + 44) * 100 else Result := 0; end; { ********************** Public functions & procedures ********************** } constructor TOptimFrog.Create; begin { Create object } inherited; FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; end; { --------------------------------------------------------------------------- } destructor TOptimFrog.Destroy; begin { Destroy object } FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TOptimFrog.ReadFromFile(const FileName: String): Boolean; var SourceFile: TFileStreamEx; begin Result := False; SourceFile := nil; try { Reset data and search for file tag } FResetData; FID3v1.ReadFromFile(FileName); FID3v2.ReadFromFile(FileName); FAPEtag.ReadFromFile(FileName); { Set read-access, open file and get file length } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); FFileLength := SourceFile.Size; { Read header data } SourceFile.Seek(ID3v2.Size, soFromBeginning); SourceFile.Read(FHeader, SizeOf(FHeader)); if FHeader.ID = 'OFR ' then Result := True; finally SourceFile.Free; end; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetChannels: Byte; begin Result := Header.ChannelMode + 1; end; { --------------------------------------------------------------------------- } function TOptimFrog.FGetBitrate: Integer; begin Result := Round(FFileLength * 8.0 / (FGetSamples / FHeader.SampleRate * 1000)); end; { --------------------------------------------------------------------------- } end. �������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/OggVorbis.pas����������������������������������������0000644�0001750�0000144�00000104414�15104114162�023006� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TOggVorbis - for manipulating with Ogg Vorbis file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.9 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.83 (26 march 2005) by Kurtnoise } { - Added multichannel support } { } { Version 1.82 (23 March 2005) by Gambit } { - fixed nominal bitrate info (eg 192 was 193 sometimes) } { } { Version 1.81 (21 June 2004) by Gambit } { - Added Encoder property } { } { Version 1.8 (13 April 2004) by Gambit } { - Added Ratio property } { } { Version 1.7 (20 August 2003) by Madah } { - Minor fix: changed FSampleRate into Integer } { ... so that samplerates>65535 works. } { } { Version 1.6 (2 October 2002) } { - Writing support for Vorbis tag } { - Changed several properties } { - Fixed bug with long Vorbis tag fields } { } { Version 1.2 (18 February 2002) } { - Added property BitRateNominal } { - Fixed bug with Vorbis tag fields } { } { Version 1.1 (21 October 2001) } { - Support for UTF-8 } { - Fixed bug with vendor info detection } { } { Version 1.0 (15 August 2001) } { - File info: file size, channel mode, sample rate, duration, bit rate } { - Vorbis tag: title, artist, album, track, date, genre, comment, vendor } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit OggVorbis; interface uses Classes, SysUtils, DCClassesUtf8, DCOSUtils; const { Used with ChannelModeID property } VORBIS_CM_MONO = 1; { Code for mono mode } VORBIS_CM_STEREO = 2; { Code for stereo mode } VORBIS_CM_MULTICHANNEL = 6; { Code for Multichannel Mode } { Channel mode names } VORBIS_MODE: array [0..3] of string = ('Unknown', 'Mono', 'Stereo', 'Multichannel'); type TOggCodecType = (octVorbis, octOpus, octSpeex); { Class TOggVorbis } TOggVorbis = class(TObject) private { Private declarations } FFileSize: Integer; FChannelModeID: Byte; FSampleRate: integer; FBitRateNominal: Word; FSamples: Integer; FID3v2Size: Integer; FTitle: string; FArtist: string; FAlbum: string; FTrack: Word; FDate: string; FGenre: string; FComment: string; FVendor: string; FCodec: String; procedure FResetData; function FGetChannelMode: string; function FGetDuration: Double; function FGetBitRate: Word; function FHasID3v2: Boolean; function FIsValid: Boolean; function FGetRatio: Double; function FGetEncoder: String; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load data } function SaveTag(const FileName: String): Boolean; { Save tag data } function ClearTag(const FileName: String): Boolean; { Clear tag data } property FileSize: Integer read FFileSize; { File size (bytes) } property ChannelModeID: Byte read FChannelModeID; { Channel mode code } property ChannelMode: string read FGetChannelMode; { Channel mode name } property SampleRate: integer read FSampleRate; { Sample rate (hz) } property BitRateNominal: Word read FBitRateNominal; { Nominal bit rate } property Title: string read FTitle write FTitle; { Song title } property Artist: string read FArtist write FArtist; { Artist name } property Album: string read FAlbum write FAlbum; { Album name } property Track: Word read FTrack write FTrack; { Track number } property Date: string read FDate write FDate; { Year } property Genre: string read FGenre write FGenre; { Genre name } property Comment: string read FComment write FComment; { Comment } property Vendor: string read FVendor; { Vendor string } property Duration: Double read FGetDuration; { Duration (seconds) } property BitRate: Word read FGetBitRate; { Average bit rate } property ID3v2: Boolean read FHasID3v2; { True if ID3v2 tag exists } property Valid: Boolean read FIsValid; { True if file valid } property Ratio: Double read FGetRatio; { Compression ratio (%) } property Encoder: String read FGetEncoder; { Encoder string } property Codec: String read FCodec; { Codec string } end; implementation const { Ogg page header ID } OGG_PAGE_ID = 'OggS'; { Vorbis parameter frame ID } VORBIS_PARAMETERS_ID = #1 + 'vorbis'; OPUS_PARAMETERS_ID = 'OpusHead'; SPEEX_PARAMETERS_ID = 'Speex '; { Vorbis tag frame ID } VORBIS_TAG_ID = #3 + 'vorbis'; OPUS_TAG_ID = 'OpusTags'; { Max. number of supported comment fields } VORBIS_FIELD_COUNT = 9; { Names of supported comment fields } VORBIS_FIELD: array [1..VORBIS_FIELD_COUNT] of string = ('TITLE', 'ARTIST', 'ALBUM', 'TRACKNUMBER', 'DATE', 'GENRE', 'COMMENT', 'PERFORMER', 'DESCRIPTION'); { CRC table for checksum calculating } CRC_TABLE: array [0..$FF] of Cardinal = ( $00000000, $04C11DB7, $09823B6E, $0D4326D9, $130476DC, $17C56B6B, $1A864DB2, $1E475005, $2608EDB8, $22C9F00F, $2F8AD6D6, $2B4BCB61, $350C9B64, $31CD86D3, $3C8EA00A, $384FBDBD, $4C11DB70, $48D0C6C7, $4593E01E, $4152FDA9, $5F15ADAC, $5BD4B01B, $569796C2, $52568B75, $6A1936C8, $6ED82B7F, $639B0DA6, $675A1011, $791D4014, $7DDC5DA3, $709F7B7A, $745E66CD, $9823B6E0, $9CE2AB57, $91A18D8E, $95609039, $8B27C03C, $8FE6DD8B, $82A5FB52, $8664E6E5, $BE2B5B58, $BAEA46EF, $B7A96036, $B3687D81, $AD2F2D84, $A9EE3033, $A4AD16EA, $A06C0B5D, $D4326D90, $D0F37027, $DDB056FE, $D9714B49, $C7361B4C, $C3F706FB, $CEB42022, $CA753D95, $F23A8028, $F6FB9D9F, $FBB8BB46, $FF79A6F1, $E13EF6F4, $E5FFEB43, $E8BCCD9A, $EC7DD02D, $34867077, $30476DC0, $3D044B19, $39C556AE, $278206AB, $23431B1C, $2E003DC5, $2AC12072, $128E9DCF, $164F8078, $1B0CA6A1, $1FCDBB16, $018AEB13, $054BF6A4, $0808D07D, $0CC9CDCA, $7897AB07, $7C56B6B0, $71159069, $75D48DDE, $6B93DDDB, $6F52C06C, $6211E6B5, $66D0FB02, $5E9F46BF, $5A5E5B08, $571D7DD1, $53DC6066, $4D9B3063, $495A2DD4, $44190B0D, $40D816BA, $ACA5C697, $A864DB20, $A527FDF9, $A1E6E04E, $BFA1B04B, $BB60ADFC, $B6238B25, $B2E29692, $8AAD2B2F, $8E6C3698, $832F1041, $87EE0DF6, $99A95DF3, $9D684044, $902B669D, $94EA7B2A, $E0B41DE7, $E4750050, $E9362689, $EDF73B3E, $F3B06B3B, $F771768C, $FA325055, $FEF34DE2, $C6BCF05F, $C27DEDE8, $CF3ECB31, $CBFFD686, $D5B88683, $D1799B34, $DC3ABDED, $D8FBA05A, $690CE0EE, $6DCDFD59, $608EDB80, $644FC637, $7A089632, $7EC98B85, $738AAD5C, $774BB0EB, $4F040D56, $4BC510E1, $46863638, $42472B8F, $5C007B8A, $58C1663D, $558240E4, $51435D53, $251D3B9E, $21DC2629, $2C9F00F0, $285E1D47, $36194D42, $32D850F5, $3F9B762C, $3B5A6B9B, $0315D626, $07D4CB91, $0A97ED48, $0E56F0FF, $1011A0FA, $14D0BD4D, $19939B94, $1D528623, $F12F560E, $F5EE4BB9, $F8AD6D60, $FC6C70D7, $E22B20D2, $E6EA3D65, $EBA91BBC, $EF68060B, $D727BBB6, $D3E6A601, $DEA580D8, $DA649D6F, $C423CD6A, $C0E2D0DD, $CDA1F604, $C960EBB3, $BD3E8D7E, $B9FF90C9, $B4BCB610, $B07DABA7, $AE3AFBA2, $AAFBE615, $A7B8C0CC, $A379DD7B, $9B3660C6, $9FF77D71, $92B45BA8, $9675461F, $8832161A, $8CF30BAD, $81B02D74, $857130C3, $5D8A9099, $594B8D2E, $5408ABF7, $50C9B640, $4E8EE645, $4A4FFBF2, $470CDD2B, $43CDC09C, $7B827D21, $7F436096, $7200464F, $76C15BF8, $68860BFD, $6C47164A, $61043093, $65C52D24, $119B4BE9, $155A565E, $18197087, $1CD86D30, $029F3D35, $065E2082, $0B1D065B, $0FDC1BEC, $3793A651, $3352BBE6, $3E119D3F, $3AD08088, $2497D08D, $2056CD3A, $2D15EBE3, $29D4F654, $C5A92679, $C1683BCE, $CC2B1D17, $C8EA00A0, $D6AD50A5, $D26C4D12, $DF2F6BCB, $DBEE767C, $E3A1CBC1, $E760D676, $EA23F0AF, $EEE2ED18, $F0A5BD1D, $F464A0AA, $F9278673, $FDE69BC4, $89B8FD09, $8D79E0BE, $803AC667, $84FBDBD0, $9ABC8BD5, $9E7D9662, $933EB0BB, $97FFAD0C, $AFB010B1, $AB710D06, $A6322BDF, $A2F33668, $BCB4666D, $B8757BDA, $B5365D03, $B1F740B4); type { Ogg page header } OggHeader = packed record ID: array [1..4] of AnsiChar; { Always "OggS" } StreamVersion: Byte; { Stream structure version } TypeFlag: Byte; { Header type flag } AbsolutePosition: Int64; { Absolute granule position } Serial: Integer; { Stream serial number } PageNumber: Integer; { Page sequence number } Checksum: Integer; { Page checksum } Segments: Byte; { Number of page segments } LacingValues: array [1..$FF] of Byte; { Lacing values - segment sizes } end; { Vorbis parameter header } VorbisHeader = packed record ID: array [1..7] of AnsiChar; { Always #1 + "vorbis" } BitstreamVersion: array [1..4] of Byte; { Bitstream version number } ChannelMode: Byte; { Number of channels } SampleRate: Integer; { Sample rate (hz) } BitRateMaximal: Integer; { Bit rate upper limit } BitRateNominal: Integer; { Nominal bit rate } BitRateMinimal: Integer; { Bit rate lower limit } BlockSize: Byte; { Coded size for small and long blocks } StopFlag: Byte; { Always 1 } end; // Opus parameter header TOpusHeader = packed record ID: array [1..8] of AnsiChar; { Always "OpusHead" } BitstreamVersion: Byte; { Bitstream version number } ChannelCount: Byte; { Number of channels } PreSkip: Word; SampleRate: LongWord; { Sample rate (hz) } OutputGain: Word; MappingFamily: Byte; { 0,1,255 } end; // Speex parameter header TSpeexHeader = packed record ID: array [1..8] of AnsiChar; speex_version: array [1..20] of AnsiChar; speex_version_id: Integer; header_size: Integer; rate: Integer; mode: Integer; mode_bitstream_version: Integer; nb_channels: Integer; bitrate: Integer; frame_size: Integer; vbr: Integer; frames_per_packet: Integer; extra_headers: Integer; reserved1: Integer; reserved2: Integer; end; { Vorbis tag data } VorbisTag = record ID: array [1..7] of AnsiChar; { Always #3 + "vorbis" } Fields: Integer; { Number of tag fields } FieldData: array [0..VORBIS_FIELD_COUNT] of string; { Tag field data } end; // Opus tag data TOpusTags = record ID: array [1..8] of AnsiChar; { Always "OpusTags" } Fields: Integer; { Number of tag fields } FieldData: array [0..VORBIS_FIELD_COUNT] of string; { Tag field data } end; { File data } FileInfo = record FPage, SPage, LPage: OggHeader; { First, second and last page } CodecType: TOggCodecType; Parameters: VorbisHeader; { Vorbis parameter header } Tag: VorbisTag; { Vorbis tag data } OpusHeader: TOpusHeader; SpeexHeader: TSpeexHeader; FileSize: Integer; { File size (bytes) } Samples: Integer; { Total number of samples } ID3v2Size: Integer; { ID3v2 tag size (bytes) } SPagePos: Integer; { Position of second Ogg page } TagEndPos: Integer; { Tag end position } end; { ********************* Auxiliary functions & procedures ******************** } function GetID3v2Size(const Source: TFileStreamEx): Integer; type ID3v2Header = record ID: array [1..3] of AnsiChar; Version: Byte; Revision: Byte; Flags: Byte; Size: array [1..4] of Byte; end; var Header: ID3v2Header; begin { Get ID3v2 tag size (if exists) } Result := 0; Source.Seek(0, soFromBeginning); Source.Read(Header, SizeOf(Header)); if Header.ID = 'ID3' then begin Result := Header.Size[1] * $200000 + Header.Size[2] * $4000 + Header.Size[3] * $80 + Header.Size[4] + 10; if Header.Flags and $10 = $10 then Inc(Result, 10); if Result > Source.Size then Result := 0; end; end; { --------------------------------------------------------------------------- } procedure SetTagItem(const Data: string; var Info: FileInfo); var Separator, Index: Integer; FieldID, FieldData: string; begin { Set Vorbis tag item if supported comment field found } Separator := Pos('=', Data); if Separator > 0 then begin FieldID := UpperCase(Copy(Data, 1, Separator - 1)); FieldData := Copy(Data, Separator + 1, Length(Data) - Length(FieldID)); for Index := 1 to VORBIS_FIELD_COUNT do if VORBIS_FIELD[Index] = FieldID then Info.Tag.FieldData[Index] := Trim(FieldData); end else if Info.Tag.FieldData[0] = '' then Info.Tag.FieldData[0] := Data; end; { --------------------------------------------------------------------------- } procedure ReadTag(const Source: TFileStreamEx; var Info: FileInfo); var Index, Size, Position: Integer; Data: array [1..250] of AnsiChar; begin { Read Vorbis tag } Index := 0; repeat FillChar(Data, SizeOf(Data), 0); Source.Read(Size, SizeOf(Size)); Position := Source.Position; if Size > SizeOf(Data) then Source.Read(Data, SizeOf(Data)) else Source.Read(Data, Size); { Set Vorbis tag item } SetTagItem(Trim(Data), Info); Source.Seek(Position + Size, soFromBeginning); if Index = 0 then Source.Read(Info.Tag.Fields, SizeOf(Info.Tag.Fields)); Inc(Index); until Index > Info.Tag.Fields; Info.TagEndPos := Source.Position; end; { --------------------------------------------------------------------------- } function GetSamples(const Source: TFileStreamEx): Integer; var Index, DataIndex, Iterator: Integer; Data: array [0..250] of AnsiChar; Header: OggHeader; begin { Get total number of samples } Result := 0; for Index := 1 to 50 do begin DataIndex := Source.Size - (SizeOf(Data) - 10) * Index - 10; Source.Seek(DataIndex, soFromBeginning); Source.Read(Data, SizeOf(Data)); { Get number of PCM samples from last Ogg packet header } for Iterator := SizeOf(Data) - 10 downto 0 do if Data[Iterator] + Data[Iterator + 1] + Data[Iterator + 2] + Data[Iterator + 3] = OGG_PAGE_ID then begin Source.Seek(DataIndex + Iterator, soFromBeginning); Source.Read(Header, SizeOf(Header)); Result := Header.AbsolutePosition; exit; end; end; end; { --------------------------------------------------------------------------- } function GetInfo(const FileName: String; var Info: FileInfo): Boolean; var SourceFile: TFileStreamEx; OpusTags: TOpusTags; CodecID: array [1..8] of AnsiChar; TagsID: array [1..8] of AnsiChar; begin { Get info from file } Result := false; SourceFile := nil; try SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); Info.FileSize := SourceFile.Size; Info.ID3v2Size := GetID3v2Size(SourceFile); SourceFile.Seek(Info.ID3v2Size, soFromBeginning); SourceFile.Read(Info.FPage, SizeOf(Info.FPage)); if Info.FPage.ID <> OGG_PAGE_ID then exit; // Read the codec ID signature SourceFile.Seek(Info.ID3v2Size + Info.FPage.Segments + 27, soFromBeginning); SourceFile.Read(CodecID, SizeOf(CodecID)); // Check codec if Copy(CodecID, 1, 7) = VORBIS_PARAMETERS_ID then Info.CodecType:= octVorbis else if CodecID = OPUS_PARAMETERS_ID then Info.CodecType:= octOpus else if CodecID = SPEEX_PARAMETERS_ID then Info.CodecType:= octSpeex else Exit; // Back to header start position SourceFile.Seek(Info.ID3v2Size + Info.FPage.Segments + 27, soFromBeginning); case Info.CodecType of octVorbis: { Read Vorbis parameter header } SourceFile.Read(Info.Parameters, SizeOf(Info.Parameters)); octOpus: SourceFile.Read(Info.OpusHeader, SizeOf(TOpusHeader)); octSpeex: SourceFile.Read(Info.SpeexHeader, SizeOf(TSpeexHeader)); end; Info.SPagePos := SourceFile.Position; SourceFile.Read(Info.SPage, SizeOf(Info.SPage)); SourceFile.Seek(Info.SPagePos + Info.SPage.Segments + 27, soFromBeginning); SourceFile.Read(TagsID, SizeOf(TagsID)); if not (((Info.CodecType = octVorbis) and (Copy(TagsID, 1, 7) = VORBIS_TAG_ID)) or ((Info.CodecType = octOpus) and (TagsID = OPUS_TAG_ID)) or (Info.CodecType = octSpeex)) then Exit; // Back to tags start position SourceFile.Seek(Info.SPagePos + Info.SPage.Segments + 27, soFromBeginning); // Speex tags block has no header, so in case of it we not read anything case Info.CodecType of octVorbis: { Read Vorbis parameter header } SourceFile.Read(Info.Tag.ID, SizeOf(Info.Tag.ID)); octOpus: SourceFile.Read(OpusTags.ID, SizeOf(OpusTags.ID)); end; { Read Vorbis, Opus or Speex tags } ReadTag(SourceFile, Info); { Get total number of samples } Info.Samples := GetSamples(SourceFile); Result := true; finally SourceFile.Free; end; end; { --------------------------------------------------------------------------- } function GetTrack(const TrackString: string): Byte; var Index, Value, Code: Integer; begin { Extract track from string } Index := Pos('/', TrackString); if Index = 0 then Val(TrackString, Value, Code) else Val(Copy(TrackString, 1, Index), Value, Code); if Code = 0 then Result := Value else Result := 0; end; { --------------------------------------------------------------------------- } function BuildTag(const Info: FileInfo): TStringStream; var Index, Fields, Size: Integer; FieldData: string; begin { Build Vorbis tag } Result := TStringStream.Create(''); Fields := 0; for Index := 1 to VORBIS_FIELD_COUNT do if Info.Tag.FieldData[Index] <> '' then Inc(Fields); { Write frame ID, vendor info and number of fields } Result.Write(Info.Tag.ID, SizeOf(Info.Tag.ID)); Size := Length(Info.Tag.FieldData[0]); Result.Write(Size, SizeOf(Size)); Result.WriteString(Info.Tag.FieldData[0]); Result.Write(Fields, SizeOf(Fields)); { Write tag fields } for Index := 1 to VORBIS_FIELD_COUNT do if Info.Tag.FieldData[Index] <> '' then begin FieldData := VORBIS_FIELD[Index] + '=' + Info.Tag.FieldData[Index]; Size := Length(FieldData); Result.Write(Size, SizeOf(Size)); Result.WriteString(FieldData); end; end; { --------------------------------------------------------------------------- } procedure SetLacingValues(var Info: FileInfo; const NewTagSize: Integer); var Index, Position, Value: Integer; Buffer: array [1..$FF] of Byte; begin { Set new lacing values for the second Ogg page } Position := 1; Value := 0; for Index := Info.SPage.Segments downto 1 do begin if Info.SPage.LacingValues[Index] < $FF then begin Position := Index; Value := 0; end; Inc(Value, Info.SPage.LacingValues[Index]); end; Value := Value + NewTagSize - (Info.TagEndPos - Info.SPagePos - Info.SPage.Segments - 27); { Change lacing values at the beginning } for Index := 1 to Value div $FF do Buffer[Index] := $FF; Buffer[(Value div $FF) + 1] := Value mod $FF; if Position < Info.SPage.Segments then for Index := Position + 1 to Info.SPage.Segments do Buffer[Index - Position + (Value div $FF) + 1] := Info.SPage.LacingValues[Index]; Info.SPage.Segments := Info.SPage.Segments - Position + (Value div $FF) + 1; for Index := 1 to Info.SPage.Segments do Info.SPage.LacingValues[Index] := Buffer[Index]; end; { --------------------------------------------------------------------------- } procedure CalculateCRC(var CRC: Cardinal; const Data; Size: Cardinal); var Buffer: ^Byte; Index: Cardinal; begin { Calculate CRC through data } Buffer := Addr(Data); for Index := 1 to Size do begin CRC := (CRC shl 8) xor CRC_TABLE[((CRC shr 24) and $FF) xor Buffer^]; Inc(Buffer); end; end; { --------------------------------------------------------------------------- } procedure SetCRC(const Destination: TFileStreamEx; Info: FileInfo); var Index: Integer; Value: Cardinal; Data: array [1..$FF] of Byte; begin { Calculate and set checksum for Vorbis tag } Value := 0; CalculateCRC(Value, Info.SPage, Info.SPage.Segments + 27); Destination.Seek(Info.SPagePos + Info.SPage.Segments + 27, soFromBeginning); for Index := 1 to Info.SPage.Segments do if Info.SPage.LacingValues[Index] > 0 then begin Destination.Read(Data, Info.SPage.LacingValues[Index]); CalculateCRC(Value, Data, Info.SPage.LacingValues[Index]); end; Destination.Seek(Info.SPagePos + 22, soFromBeginning); Destination.Write(Value, SizeOf(Value)); end; { --------------------------------------------------------------------------- } function RebuildFile(FileName: String; Tag: TStream; Info: FileInfo): Boolean; var Source, Destination: TFileStreamEx; BufferName: String; begin { Rebuild the file with the new Vorbis tag } Result := false; if (not mbFileExists(FileName)) or (mbFileSetReadOnly(FileName, False) <> True) then exit; try { Create file streams } BufferName := FileName + '~'; Source := TFileStreamEx.Create(FileName, fmOpenRead); Destination := TFileStreamEx.Create(BufferName, fmCreate); { Copy data blocks } Destination.CopyFrom(Source, Info.SPagePos); Destination.Write(Info.SPage, Info.SPage.Segments + 27); Destination.CopyFrom(Tag, 0); Source.Seek(Info.TagEndPos, soFromBeginning); Destination.CopyFrom(Source, Source.Size - Info.TagEndPos); SetCRC(Destination, Info); Source.Free; Destination.Free; { Replace old file and delete temporary file } if (mbDeleteFile(FileName)) and (mbRenameFile(BufferName, FileName)) then Result := true else raise Exception.Create(''); except { Access error } if mbFileExists(BufferName) then mbDeleteFile(BufferName); end; end; { ********************** Private functions & procedures ********************* } procedure TOggVorbis.FResetData; begin { Reset variables } FFileSize := 0; FChannelModeID := 0; FSampleRate := 0; FBitRateNominal := 0; FSamples := 0; FID3v2Size := 0; FTitle := ''; FArtist := ''; FAlbum := ''; FTrack := 0; FDate := ''; FGenre := ''; FComment := ''; FVendor := ''; FCodec := ''; end; { --------------------------------------------------------------------------- } function TOggVorbis.FGetChannelMode: string; begin if FChannelModeID > 2 then Result := VORBIS_MODE[3] else Result := VORBIS_MODE[FChannelModeID]; end; { --------------------------------------------------------------------------- } function TOggVorbis.FGetDuration: Double; begin { Calculate duration time } if FSamples > 0 then if FSampleRate > 0 then Result := FSamples / FSampleRate else Result := 0 else if (FBitRateNominal > 0) and (FChannelModeID > 0) then Result := (FFileSize - FID3v2Size) / FBitRateNominal / FChannelModeID / 125 * 2 else Result := 0; end; { --------------------------------------------------------------------------- } function TOggVorbis.FGetBitRate: Word; begin { Calculate average bit rate } Result := 0; if FGetDuration > 0 then Result := Round((FFileSize - FID3v2Size) / FGetDuration / 125); end; { --------------------------------------------------------------------------- } function TOggVorbis.FHasID3v2: Boolean; begin { Check for ID3v2 tag } Result := FID3v2Size > 0; end; { --------------------------------------------------------------------------- } function TOggVorbis.FIsValid: Boolean; begin { Check for file correctness } Result := (FChannelModeID in [VORBIS_CM_MONO, VORBIS_CM_STEREO, VORBIS_CM_MULTICHANNEL]) and (FSampleRate > 0) and (FGetDuration > 0.1) and (FGetBitRate > 0); end; { ********************** Public functions & procedures ********************** } constructor TOggVorbis.Create; begin { Object constructor } FResetData; inherited; end; { --------------------------------------------------------------------------- } destructor TOggVorbis.Destroy; begin { Object destructor } inherited; end; { --------------------------------------------------------------------------- } function TOggVorbis.ReadFromFile(const FileName: String): Boolean; var Info: FileInfo; begin { Read data from file } Result := false; FResetData; FillChar(Info, SizeOf(Info), 0); if GetInfo(FileName, Info) then begin { Fill variables } FFileSize := Info.FileSize; case Info.CodecType of octVorbis: begin FChannelModeID := Info.Parameters.ChannelMode; FSampleRate := Info.Parameters.SampleRate; FBitRateNominal := Info.Parameters.BitRateNominal div 1000; FCodec:='Vorbis'; end; octOpus: begin FChannelModeID := Info.OpusHeader.ChannelCount; FSampleRate := Info.OpusHeader.SampleRate; FCodec:='Opus'; end; octSpeex: begin FChannelModeID := Info.SpeexHeader.nb_channels; FSampleRate := Info.SpeexHeader.rate; FCodec:='Speex'; end; end; FSamples := Info.Samples; FID3v2Size := Info.ID3v2Size; FTitle := Info.Tag.FieldData[1]; if Info.Tag.FieldData[2] <> '' then FArtist := Info.Tag.FieldData[2] else FArtist := Info.Tag.FieldData[8]; FAlbum := Info.Tag.FieldData[3]; FTrack := GetTrack(Info.Tag.FieldData[4]); FDate := Info.Tag.FieldData[5]; FGenre := Info.Tag.FieldData[6]; if Info.Tag.FieldData[7] <> '' then FComment := Info.Tag.FieldData[7] else FComment := Info.Tag.FieldData[9]; FVendor := Info.Tag.FieldData[0]; Result := true; end; end; { --------------------------------------------------------------------------- } function TOggVorbis.SaveTag(const FileName: String): Boolean; var Info: FileInfo; Tag: TStringStream; begin { Save Vorbis tag } Result := false; FillChar(Info, SizeOf(Info), 0); if GetInfo(FileName, Info) then begin { Prepare tag data and save to file } Info.Tag.FieldData[1] := Trim(FTitle); Info.Tag.FieldData[2] := Trim(FArtist); Info.Tag.FieldData[3] := Trim(FAlbum); if FTrack > 0 then Info.Tag.FieldData[4] := IntToStr(FTrack) else Info.Tag.FieldData[4] := ''; Info.Tag.FieldData[5] := Trim(FDate); Info.Tag.FieldData[6] := Trim(FGenre); Info.Tag.FieldData[7] := Trim(FComment); Info.Tag.FieldData[8] := ''; Info.Tag.FieldData[9] := ''; Tag := BuildTag(Info); Info.SPage.Checksum := 0; SetLacingValues(Info, Tag.Size); Result := RebuildFile(FileName, Tag, Info); Tag.Free; end; end; { --------------------------------------------------------------------------- } function TOggVorbis.ClearTag(const FileName: String): Boolean; begin { Clear Vorbis tag } FTitle := ''; FArtist := ''; FAlbum := ''; FTrack := 0; FDate := ''; FGenre := ''; FComment := ''; Result := SaveTag(FileName); end; { --------------------------------------------------------------------------- } function TOggVorbis.FGetRatio: Double; begin { Get compression ratio } if FIsValid then //Result := FFileSize / (FSamples * FChannelModeID * FBitsPerSample / 8 + 44) * 100 Result := FFileSize / (FSamples * (FChannelModeID * 16 / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } function TOggVorbis.FGetEncoder: String; begin if FVendor = 'Xiphophorus libVorbis I 20000508' then Result := '1.0 beta 1 or beta 2' else if FVendor = 'Xiphophorus libVorbis I 20001031' then Result := '1.0 beta 3' else if FVendor = 'Xiphophorus libVorbis I 20010225' then Result := '1.0 beta 4' else if FVendor = 'Xiphophorus libVorbis I 20010615' then Result := '1.0 rc1' else if FVendor = 'Xiphophorus libVorbis I 20010813' then Result := '1.0 rc2' else if FVendor = 'Xiphophorus libVorbis I 20010816 (gtune 1)' then Result := '1.0 RC2 GT1' else if FVendor = 'Xiphophorus libVorbis I 20011014 (GTune 2)' then Result := '1.0 RC2 GT2' else if FVendor = 'Xiphophorus libVorbis I 20011217' then Result := '1.0 rc3' else if FVendor = 'Xiphophorus libVorbis I 20011231' then Result := '1.0 rc3' //prolly an earlier build of 1.0 //else if FVendor = 'Xiph.Org libVorbis I 20020711' then Result := '1.0' else if FVendor = 'Xiph.Org libVorbis I 20020717' then Result := '1.0' else if FVendor = 'Xiph.Org/Sjeng.Org libVorbis I 20020717 (GTune 3, beta 1)' then Result := '1.0 GT3b1' else if FVendor = 'Xiph.Org libVorbis I 20030308' then Result := 'Post 1.0 CVS' else if FVendor = 'Xiph.Org libVorbis I 20030909 (1.0.1)' then Result := '1.0.1' else if FVendor = 'Xiph.Org libVorbis I 20030909' then Result := '1.0.1' else if FVendor = 'Xiph.Org/Sjeng.Org libVorbis I 20030909 (GTune 3, beta 2) EXPERIMENTAL' then Result := 'Experimental GT3b2' else if FVendor = 'Xiph.Org libVorbis I 20031230 (1.0.1)' then Result := 'Post 1.0.1 CVS' else if FVendor = 'Xiph.Org/Sjeng.Org libVorbis I 20031230 (GTune 3, beta 2)' then Result := 'GT3b2' else if FVendor = 'AO; aoTuV b2 [20040420] (based on Xiph.Org''s 1.0.1)' then Result := '1.0.1 aoTuV beta 2' else if FVendor = 'Xiph.Org libVorbis I 20040629' then Result := '1.1' else if FVendor = 'Xiph.Org libVorbis I 20040920' then Result := '1.1 with impulse_trigger_profile' else if FVendor = 'AO; aoTuV b3 [20041120] (based on Xiph.Org''s libVorbis)' then Result := '1.1 aoTuV beta 3' else Result := FVendor; end; { --------------------------------------------------------------------------- } end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/Musepack.pas�����������������������������������������0000644�0001750�0000144�00000044027�15104114162�022660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TMPEGplus - for manipulating with Musepack file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 2.0 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.9 (13 April 2004) by Gambit } { - Added Ratio property } { } { Version 1.81 (27 September 2003) } { - changed minimal allowed bitrate to '3' (e.g. encoded digital silence) } { } { Version 1.8 (20 August 2003) by Madah } { - Will now read files with different samplerates correctly } { - Also changed GetProfileID() for this to work } { - Added the ability to determine encoder used } { } { Version 1.7 (7 June 2003) by Gambit } { - --quality 0 to 10 detection (all profiles) } { - Stream Version 7.1 detected and supported } { } { Version 1.6 (8 February 2002) } { - Fixed bug with property Corrupted } { } { Version 1.2 (2 August 2001) } { - Some class properties added/changed } { } { Version 1.1 (26 July 2001) } { - Fixed reading problem with "read only" files } { } { Version 1.0 (23 May 2001) } { - Support for MPEGplus files (stream versions 4-7) } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { - Class TAPEtag: reading & writing support for APE tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit Musepack; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag, DCClassesUtf8; const { Used with ChannelModeID property } MPP_CM_STEREO = 1; { Index for stereo mode } MPP_CM_JOINT_STEREO = 2; { Index for joint-stereo mode } { Channel mode names } MPP_MODE: array [0..2] of string = ('Unknown', 'Stereo', 'Joint Stereo'); { Used with ProfileID property } MPP_PROFILE_QUALITY0 = 9; { '--quality 0' profile } MPP_PROFILE_QUALITY1 = 10; { '--quality 1' profile } MPP_PROFILE_TELEPHONE = 11; { 'Telephone' profile } MPP_PROFILE_THUMB = 1; { 'Thumb' (poor) quality } MPP_PROFILE_RADIO = 2; { 'Radio' (normal) quality } MPP_PROFILE_STANDARD = 3; { 'Standard' (good) quality } MPP_PROFILE_XTREME = 4; { 'Xtreme' (very good) quality } MPP_PROFILE_INSANE = 5; { 'Insane' (excellent) quality } MPP_PROFILE_BRAINDEAD = 6; { 'BrainDead' (excellent) quality } MPP_PROFILE_QUALITY9 = 7; { '--quality 9' (excellent) quality } MPP_PROFILE_QUALITY10 = 8; { '--quality 10' (excellent) quality } MPP_PROFILE_UNKNOWN = 0; { Unknown profile } MPP_PROFILE_EXPERIMENTAL = 12; { Profile names } MPP_PROFILE: array [0..12] of string = ('Unknown', 'Thumb', 'Radio', 'Standard', 'Xtreme', 'Insane', 'BrainDead', '--quality 9', '--quality 10', '--quality 0', '--quality 1', 'Telephone', 'Experimental'); type { Class TMPEGplus } TMPEGplus = class(TObject) private { Private declarations } FValid: Boolean; FChannelModeID: Byte; FFileSize: Integer; FFrameCount: Integer; FSampleRate: Integer; FBitRate: Word; FStreamVersion: Byte; FProfileID: Byte; FID3v1: TID3v1; FID3v2: TID3v2; FAPEtag: TAPEtag; FEncoder : string; procedure FResetData; function FGetChannelMode: string; function FGetBitRate: Word; function FGetProfile: string; function FGetDuration: Double; function FIsCorrupted: Boolean; function FGetRatio: Double; function FGetStreamStreamVersionString: String; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean;{ Load header } property Valid: Boolean read FValid; { True if header valid } property ChannelModeID: Byte read FChannelModeID; { Channel mode code } property ChannelMode: string read FGetChannelMode; { Channel mode name } property FileSize: Integer read FFileSize; { File size (bytes) } property FrameCount: Integer read FFrameCount; { Number of frames } property BitRate: Word read FGetBitRate; { Bit rate } property StreamVersion: Byte read FStreamVersion; { Stream version } property StreamStreamVersionString: String read FGetStreamStreamVersionString; property SampleRate: Integer read FSampleRate; property ProfileID: Byte read FProfileID; { Profile code } property Profile: string read FGetProfile; { Profile name } property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } property Duration: Double read FGetDuration; { Duration (seconds) } property Corrupted: Boolean read FIsCorrupted; { True if file corrupted } property Encoder: string read FEncoder; { Encoder used } property Ratio: Double read FGetRatio; { Compression ratio (%) } end; implementation const { ID code for stream version 7 and 7.1 } STREAM_VERSION_7_ID = 120279117; { 120279117 = 'MP+' + #7 } STREAM_VERSION_71_ID = 388714573; { 388714573 = 'MP+' + #23 } type { File header data - for internal use } HeaderRecord = record ByteArray: array [1..32] of Byte; { Data as byte array } IntegerArray: array [1..8] of Integer; { Data as integer array } FileSize: Integer; { File size } ID3v2Size: Integer; { ID3v2 tag size (bytes) } end; { ********************* Auxiliary functions & procedures ******************** } function ReadHeader(const FileName: String; var Header: HeaderRecord): Boolean; var SourceFile: TFileStreamEx; Transferred: Integer; begin try Result := true; { Set read-access and open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); SourceFile.Seek(Header.ID3v2Size, soFromBeginning); { Read header and get file size } Transferred := SourceFile.Read(Header, 32); Header.FileSize := SourceFile.Size; SourceFile.Free; { if transfer is not complete } if Transferred < 32 then Result := false else Move(Header.ByteArray, Header.IntegerArray, SizeOf(Header.ByteArray)); except { Error } Result := false; end; end; { --------------------------------------------------------------------------- } function GetStreamVersion(const Header: HeaderRecord): Byte; begin { Get MPEGplus stream version } if Header.IntegerArray[1] = STREAM_VERSION_7_ID then Result := 7 else if Header.IntegerArray[1] = STREAM_VERSION_71_ID then Result := 71 else case (Header.ByteArray[2] mod 32) div 2 of 3: Result := 4; 7: Result := 5; 11: Result := 6 else Result := 0; end; end; { --------------------------------------------------------------------------- } function GetSampleRate(const Header: HeaderRecord): Integer; const mpp_samplerates : array[0..3] of integer = ( 44100, 48000, 37800, 32000 ); begin (* get samplerate from header note: this is the same byte where profile is stored *) Result := mpp_samplerates[Header.ByteArray[11] and 3]; end; { --------------------------------------------------------------------------- } function GetEncoder(const Header: HeaderRecord): string; var EncoderID : integer; begin EncoderID := Header.ByteArray[11+2+15]; Result := ''; if EncoderID = 0 then begin //FEncoder := 'Buschmann 1.7.0...9, Klemm 0.90...1.05'; end else begin case ( EncoderID mod 10 ) of 0: Result := format('%u.%u Release', [EncoderID div 100, (EncoderID div 10) mod 10]); 2,4,6,8 : Result := format('%u.%.2u Beta', [EncoderID div 100, EncoderID mod 100] ); else Result := format('%u.%.2u --Alpha--', [EncoderID div 100, EncoderID mod 100] ); end; end; end; { --------------------------------------------------------------------------- } function GetChannelModeID(const Header: HeaderRecord): Byte; begin if (GetStreamVersion(Header) = 7) or (GetStreamVersion(Header) = 71) then { Get channel mode for stream version 7 } if (Header.ByteArray[12] mod 128) < 64 then Result := MPP_CM_STEREO else Result := MPP_CM_JOINT_STEREO else { Get channel mode for stream version 4-6 } if (Header.ByteArray[3] mod 128) = 0 then Result := MPP_CM_STEREO else Result := MPP_CM_JOINT_STEREO; end; { --------------------------------------------------------------------------- } function GetFrameCount(const Header: HeaderRecord): Integer; begin { Get frame count } case GetStreamVersion(Header) of 4: Result := Header.IntegerArray[2] shr 16; 5..71: Result := Header.IntegerArray[2]; else Result := 0; end; end; { --------------------------------------------------------------------------- } function GetBitRate(const Header: HeaderRecord): Word; begin { Try to get bit rate } case GetStreamVersion(Header) of 4, 5: Result := Header.IntegerArray[1] shr 23; else Result := 0; end; end; { --------------------------------------------------------------------------- } function GetProfileID(const Header: HeaderRecord): Byte; begin Result := MPP_PROFILE_UNKNOWN; { Get MPEGplus profile (exists for stream version 7 only) } if (GetStreamVersion(Header) = 7) or (GetStreamVersion(Header) = 71) then // ((and $F0) shr 4) is needed because samplerate is stored in the same byte! case ((Header.ByteArray[11] and $F0) shr 4) of 1: Result := MPP_PROFILE_EXPERIMENTAL; 5: Result := MPP_PROFILE_QUALITY0; 6: Result := MPP_PROFILE_QUALITY1; 7: Result := MPP_PROFILE_TELEPHONE; 8: Result := MPP_PROFILE_THUMB; 9: Result := MPP_PROFILE_RADIO; 10: Result := MPP_PROFILE_STANDARD; 11: Result := MPP_PROFILE_XTREME; 12: Result := MPP_PROFILE_INSANE; 13: Result := MPP_PROFILE_BRAINDEAD; 14: Result := MPP_PROFILE_QUALITY9; 15: Result := MPP_PROFILE_QUALITY10; end; end; { ********************** Private functions & procedures ********************* } procedure TMPEGplus.FResetData; begin FValid := false; FChannelModeID := 0; FFileSize := 0; FFrameCount := 0; FBitRate := 0; FStreamVersion := 0; FSampleRate := 0; FEncoder := ''; FProfileID := MPP_PROFILE_UNKNOWN; FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetChannelMode: string; begin Result := MPP_MODE[FChannelModeID]; end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetBitRate: Word; var CompressedSize: Integer; begin Result := FBitRate; { Calculate bit rate if not given } CompressedSize := FFileSize - FID3v2.Size - FAPEtag.Size; if FID3v1.Exists then Dec(FFileSize, 128); if (Result = 0) and (FFrameCount > 0) then Result := Round(CompressedSize * 8 * (FSampleRate/1000) / FFRameCount / 1152); end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetProfile: string; begin Result := MPP_PROFILE[FProfileID]; end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetDuration: Double; begin { Calculate duration time } if FSampleRate > 0 then Result := FFRameCount * 1152 / FSampleRate else Result := 0; end; { --------------------------------------------------------------------------- } function TMPEGplus.FIsCorrupted: Boolean; begin { Check for file corruption } Result := (FValid) and ((FGetBitRate < 3) or (FGetBitRate > 480)); end; { ********************** Public functions & procedures ********************** } constructor TMPEGplus.Create; begin inherited; FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; end; { --------------------------------------------------------------------------- } destructor TMPEGplus.Destroy; begin FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TMPEGplus.ReadFromFile(const FileName: String): Boolean; var Header: HeaderRecord; begin { Reset data and load header from file to variable } FResetData; FillChar(Header, SizeOf(Header), 0); { At first try to load ID3v2 tag data, then header } if FID3v2.ReadFromFile(FileName) then Header.ID3v2Size := FID3v2.Size; Result := ReadHeader(FileName, Header); { Process data if loaded and file valid } if (Result) and (Header.FileSize > 0) and (GetStreamVersion(Header) > 0) then begin FValid := true; { Fill properties with header data } FSampleRate := GetSampleRate(Header); FChannelModeID := GetChannelModeID(Header); FFileSize := Header.FileSize; FFrameCount := GetFrameCount(Header); FBitRate := GetBitRate(Header); FStreamVersion := GetStreamVersion(Header); FProfileID := GetProfileID(Header); FEncoder := GetEncoder(Header); FID3v1.ReadFromFile(FileName); FAPEtag.ReadFromFile(FileName); end; end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetRatio: Double; begin { Get compression ratio } if (FValid) and ((FChannelModeID = MPP_CM_STEREO) or (FChannelModeID = MPP_CM_JOINT_STEREO)) then Result := FFileSize / ((FFrameCount * 1152) * (2 * 16 / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } function TMPEGplus.FGetStreamStreamVersionString: String; begin case FStreamVersion of 4: Result := '4.0'; 5: Result := '5.0'; 6: Result := '6.0'; 7: Result := '7.0'; 71: Result := '7.1'; else Result := IntToStr(FStreamVersion); end; end; { --------------------------------------------------------------------------- } end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/Monkey.pas�������������������������������������������0000644�0001750�0000144�00000044217�15104114162�022353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TMonkey - for manipulating with Monkey's Audio file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.7 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.6 (11 April 2004) by Gambit } { - Added Ratio property again } { } { Version 1.5 (22 August 2003) by MaDah } { - Added support for Monkey's Audio 3.98 } { - Added/changed/removed some stuff } { } { Version 1.4 (29 July 2002) } { - Correction for calculating of duration } { } { Version 1.1 (11 September 2001) } { - Added property Samples } { - Removed WAV header information } { } { Version 1.0 (7 September 2001) } { - Support for Monkey's Audio files } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { - Class TAPEtag: reading & writing support for APE tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit Monkey; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag, DCClassesUtf8; const { Compression level codes } MONKEY_COMPRESSION_FAST = 1000; { Fast (poor) } MONKEY_COMPRESSION_NORMAL = 2000; { Normal (good) } MONKEY_COMPRESSION_HIGH = 3000; { High (very good) } MONKEY_COMPRESSION_EXTRA_HIGH = 4000; { Extra high (best) } MONKEY_COMPRESSION_INSANE = 5000; { Insane } MONKEY_COMPRESSION_BRAINDEAD = 6000; { BrainDead } { Compression level names } MONKEY_COMPRESSION: array [0..6] of string = ('Unknown', 'Fast', 'Normal', 'High', 'Extra High', 'Insane', 'BrainDead'); { Format flags, only for Monkey's Audio <= 3.97 } MONKEY_FLAG_8_BIT = 1; // Audio 8-bit MONKEY_FLAG_CRC = 2; // New CRC32 error detection MONKEY_FLAG_PEAK_LEVEL = 4; // Peak level stored MONKEY_FLAG_24_BIT = 8; // Audio 24-bit MONKEY_FLAG_SEEK_ELEMENTS = 16; // Number of seek elements stored MONKEY_FLAG_WAV_NOT_STORED = 32; // WAV header not stored { Channel mode names } MONKEY_MODE: array [0..2] of string = ('Unknown', 'Mono', 'Stereo'); type { Class TMonkey } TMonkey = class(TObject) private { Private declarations } FValid : boolean; // Stuff loaded from the header: FVersion : integer; FVersionStr : string; FChannels : integer; FSampleRate : integer; FBits : integer; FPeakLevel : longword; FPeakLevelRatio : double; FTotalSamples : int64; FBitrate : double; FDuration : double; FCompressionMode : integer; FCompressionModeStr : string; // FormatFlags, only used with Monkey's <= 3.97 FFormatFlags : integer; FHasPeakLevel : boolean; FHasSeekElements : boolean; FWavNotStored : boolean; // Tagging FID3v1 : TID3v1; FID3v2 : TID3v2; FAPEtag : TAPEtag; // FFileSize : int64; procedure FResetData; function FGetRatio: Double; function FGetChannelMode: string; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load header } property FileSize : int64 read FFileSize; property Valid : boolean read FValid; property Version : integer read FVersion; property VersionStr : string read FVersionStr; property Channels : integer read FChannels; property SampleRate : integer read FSamplerate; property Bits : integer read FBits; property Bitrate : double read FBitrate; property Duration : double read FDuration; property PeakLevel : longword read FPeakLevel; property PeakLevelRatio : double read FPeakLevelRatio; property TotalSamples : int64 read FTotalSamples; property CompressionMode : integer read FCompressionMode; property CompressionModeStr: string read FCompressionModeStr; property ChannelMode: string read FGetChannelMode; { Channel mode name } // FormatFlags, only used with Monkey's <= 3.97 property FormatFlags : integer read FFormatFlags; property HasPeakLevel : boolean read FHasPeakLevel; property HasSeekElements : boolean read FHasSeekElements; property WavNotStored : boolean read FWavNotStored; // Tagging property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } property Ratio: Double read FGetRatio; { Compression ratio (%) } end; implementation type { Real structure of Monkey's Audio header } // common header for all versions APE_HEADER = packed record cID: array[0..3] of byte; // should equal 'MAC ' nVersion : WORD; // version number * 1000 (3.81 = 3810) end; // old header for <= 3.97 APE_HEADER_OLD = packed record nCompressionLevel, // the compression level nFormatFlags, // any format flags (for future use) nChannels: word; // the number of channels (1 or 2) nSampleRate, // the sample rate (typically 44100) nHeaderBytes, // the bytes after the MAC header that compose the WAV header nTerminatingBytes, // the bytes after that raw data (for extended info) nTotalFrames, // the number of frames in the file nFinalFrameBlocks: longword; // the number of samples in the final frame nInt : integer; end; // new header for >= 3.98 APE_HEADER_NEW = packed record nCompressionLevel : word; // the compression level (see defines I.E. COMPRESSION_LEVEL_FAST) nFormatFlags : word; // any format flags (for future use) Note: NOT the same flags as the old header! nBlocksPerFrame : longword; // the number of audio blocks in one frame nFinalFrameBlocks : longword; // the number of audio blocks in the final frame nTotalFrames : longword; // the total number of frames nBitsPerSample : word; // the bits per sample (typically 16) nChannels : word; // the number of channels (1 or 2) nSampleRate : longword; // the sample rate (typically 44100) end; // data descriptor for >= 3.98 APE_DESCRIPTOR = packed record padded : Word; // padding/reserved (always empty) nDescriptorBytes, // the number of descriptor bytes (allows later expansion of this header) nHeaderBytes, // the number of header APE_HEADER bytes nSeekTableBytes, // the number of bytes of the seek table nHeaderDataBytes, // the number of header data bytes (from original file) nAPEFrameDataBytes, // the number of bytes of APE frame data nAPEFrameDataBytesHigh, // the high order number of APE frame data bytes nTerminatingDataBytes : longword;// the terminating data of the file (not including tag data) cFileMD5 : array[0..15] of Byte; // the MD5 hash of the file (see notes for usage... it's a littly tricky) end; { ********************** Private functions & procedures ********************* } procedure TMonkey.FResetData; begin { Reset data } FValid := false; FVersion := 0; FVersionStr := ''; FChannels := 0; FSampleRate := 0; FBits := 0; FPeakLevel := 0; FPeakLevelRatio := 0.0; FTotalSamples := 0; FBitrate := 0.0; FDuration := 0.0; FCompressionMode := 0; FCompressionModeStr := ''; FFormatFlags := 0; FHasPeakLevel := false; FHasSeekElements := false; FWavNotStored := false; FFileSize := 0; FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; end; { ********************** Public functions & procedures ********************** } constructor TMonkey.Create; begin { Create object } inherited; FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; end; { --------------------------------------------------------------------------- } destructor TMonkey.Destroy; begin { Destroy object } FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TMonkey.ReadFromFile(const FileName: String): Boolean; var f : TFileStreamEx; APE : APE_HEADER; // common header APE_OLD : APE_HEADER_OLD; // old header <= 3.97 APE_NEW : APE_HEADER_NEW; // new header >= 3.98 APE_DESC : APE_DESCRIPTOR; // extra header >= 3.98 BlocksPerFrame : integer; LoadSuccess : boolean; TagSize : integer; begin Result := FALSE; FResetData; // load tags first FID3v2.ReadFromFile(FileName); FID3v1.ReadFromFile(FileName); FAPEtag.ReadFromFile(FileName); // calculate total tag size TagSize := 0; if FID3v1.Exists then inc(TagSize, 128); if FID3v2.Exists then inc(TagSize, FID3v2.Size); if FAPEtag.Exists then inc(TagSize, FAPETag.Size); // begin reading data from file LoadSuccess := FALSE; f:=nil; try try f := TFileStreamEx.create(FileName, fmOpenRead or fmShareDenyWrite); FFileSize := f.Size; // seek past id3v2-tag if FID3v2.Exists then begin f.Seek(FID3v2.Size, soFromBeginning); end; // Read APE Format Header fillchar(APE, sizeof(APE), 0); if (f.Read(APE, sizeof(APE)) = sizeof(APE)) and ( StrLComp(@APE.cID[0],'MAC ',4)=0) then begin FVersion := APE.nVersion; Str(FVersion / 1000 : 4 : 2, FVersionStr); // Load New Monkey's Audio Header for version >= 3.98 if APE.nVersion >= 3980 then begin fillchar(APE_DESC, sizeof(APE_DESC), 0); if (f.Read(APE_DESC, sizeof(APE_DESC)) = sizeof(APE_DESC)) then begin // seek past description header if APE_DESC.nDescriptorBytes <> 52 then f.Seek(APE_DESC.nDescriptorBytes - 52, soFromCurrent); // load new ape_header if APE_DESC.nHeaderBytes > sizeof(APE_NEW) then APE_DESC.nHeaderBytes := sizeof(APE_NEW); fillchar(APE_NEW, sizeof(APE_NEW), 0); if (longword(f.Read(APE_NEW, APE_DESC.nHeaderBytes)) = APE_DESC.nHeaderBytes ) then begin // based on MAC SDK 3.98a1 (APEinfo.h) FSampleRate := APE_NEW.nSampleRate; FChannels := APE_NEW.nChannels; FFormatFlags := APE_NEW.nFormatFlags; FBits := APE_NEW.nBitsPerSample; FCompressionMode := APE_NEW.nCompressionLevel; // calculate total uncompressed samples if APE_NEW.nTotalFrames>0 then begin FTotalSamples := Int64(APE_NEW.nBlocksPerFrame) * Int64(APE_NEW.nTotalFrames-1) + Int64(APE_NEW.nFinalFrameBlocks); end; LoadSuccess := TRUE; end; end; end else begin // Old Monkey <= 3.97 fillchar(APE_OLD, sizeof(APE_OLD), 0); if (f.Read(APE_OLD, sizeof(APE_OLD)) = sizeof(APE_OLD) ) then begin FCompressionMode := APE_OLD.nCompressionLevel; FSampleRate := APE_OLD.nSampleRate; FChannels := APE_OLD.nChannels; FFormatFlags := APE_OLD.nFormatFlags; FBits := 16; if APE_OLD.nFormatFlags and MONKEY_FLAG_8_BIT <>0 then FBits := 8; if APE_OLD.nFormatFlags and MONKEY_FLAG_24_BIT <>0 then FBits := 24; FHasSeekElements := APE_OLD.nFormatFlags and MONKEY_FLAG_PEAK_LEVEL <>0; FWavNotStored := APE_OLD.nFormatFlags and MONKEY_FLAG_SEEK_ELEMENTS <>0; FHasPeakLevel := APE_OLD.nFormatFlags and MONKEY_FLAG_WAV_NOT_STORED<>0; if FHasPeakLevel then begin FPeakLevel := APE_OLD.nInt; FPeakLevelRatio := (FPeakLevel / (1 shl FBits) / 2.0) * 100.0; end; // based on MAC_SDK_397 (APEinfo.cpp) if (FVersion >= 3950) then BlocksPerFrame := 73728 * 4 else if (FVersion >= 3900) or ((FVersion >= 3800) and (APE_OLD.nCompressionLevel = MONKEY_COMPRESSION_EXTRA_HIGH)) then BlocksPerFrame := 73728 else BlocksPerFrame := 9216; // calculate total uncompressed samples if APE_OLD.nTotalFrames>0 then begin FTotalSamples := Int64(APE_OLD.nTotalFrames-1) * Int64(BlocksPerFrame) + Int64(APE_OLD.nFinalFrameBlocks); end; LoadSuccess := TRUE; end; end; if LoadSuccess then begin // compression profile name if ((FCompressionMode mod 1000) = 0) and (FCompressionMode<=6000) then begin FCompressionModeStr := MONKEY_COMPRESSION[FCompressionMode div 1000]; end else begin FCompressionModeStr := IntToStr(FCompressionMode); end; // length if FSampleRate>0 then FDuration := FTotalSamples / FSampleRate; // average bitrate if FDuration>0 then FBitrate := (FFileSize - Int64(TagSize))*8.0 / (FDuration/1000.0); // some extra sanity checks FValid := (FBits>0) and (FSampleRate>0) and (FTotalSamples>0) and (FChannels>0); Result := FValid; end; end; finally f.free; end; except end; end; { --------------------------------------------------------------------------- } function TMonkey.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / (FTotalSamples * (FChannels * FBits / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } function TMonkey.FGetChannelMode: string; begin if FChannels < Length(MONKEY_MODE) then Result:= MONKEY_MODE[FChannels] else begin Result:= EmptyStr; end; end; { --------------------------------------------------------------------------- } end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/MPEGaudio.pas����������������������������������������0000644�0001750�0000144�00000106606�15104114162�022664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TMPEGaudio - for manipulating with MPEG audio file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 2.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 2.00 (December 2004) by e-w@re } { - returns the correct MPEG data position in file } { - added property MPEGstart -> returns start of MPEG data in file } { - added property MPEGend -> returns end of MPEG data in file } { } { Version 1.99 (April 2004) by Gambit } { - Improved LAME detection } { (checks for the LAME string in the padding) } { } { Version 1.91 (April 2004) by Gambit } { - Added Ratio property } { } { Version 1.9 (22 February 2004) by Gambit } { - Added Samples property } { } { Version 1.8 (29 June 2003) by Gambit } { - Reads ape tags in mp3 files } { } { Version 1.7 (4 November 2002) } { - Ability to recognize QDesign MPEG audio encoder } { - Fixed bug with MPEG Layer II } { - Fixed bug with very big files } { } { Version 1.6 (23 May 2002) } { - Improved reading performance (up to 50% faster) } { } { Version 1.1 (11 September 2001) } { - Improved encoder guessing for CBR files } { } { Version 1.0 (31 August 2001) } { - Support for MPEG audio (versions 1, 2, 2.5, layers I, II, III) } { - Support for Xing & FhG VBR } { - Ability to guess audio encoder (Xing, FhG, LAME, Blade, GoGo, Shine) } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit MPEGaudio; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag; const { Table for bit rates } MPEG_BIT_RATE: array [0..3, 0..3, 0..15] of Word = ( { For MPEG 2.5 } ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0), (0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0), (0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0)), { Reserved } ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), { For MPEG 2 } ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0), (0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0), (0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0)), { For MPEG 1 } ((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0), (0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 0), (0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0)) ); { Sample rate codes } MPEG_SAMPLE_RATE_LEVEL_3 = 0; { Level 3 } MPEG_SAMPLE_RATE_LEVEL_2 = 1; { Level 2 } MPEG_SAMPLE_RATE_LEVEL_1 = 2; { Level 1 } MPEG_SAMPLE_RATE_UNKNOWN = 3; { Unknown value } { Table for sample rates } MPEG_SAMPLE_RATE: array [0..3, 0..3] of Word = ( (11025, 12000, 8000, 0), { For MPEG 2.5 } (0, 0, 0, 0), { Reserved } (22050, 24000, 16000, 0), { For MPEG 2 } (44100, 48000, 32000, 0) { For MPEG 1 } ); { VBR header ID for Xing/FhG } VBR_ID_XING = 'Xing'; { Xing VBR ID } VBR_ID_FHG = 'VBRI'; { FhG VBR ID } { MPEG version codes } MPEG_VERSION_2_5 = 0; { MPEG 2.5 } MPEG_VERSION_UNKNOWN = 1; { Unknown version } MPEG_VERSION_2 = 2; { MPEG 2 } MPEG_VERSION_1 = 3; { MPEG 1 } { MPEG version names } MPEG_VERSION: array [0..3] of string = ('MPEG 2.5', 'MPEG ?', 'MPEG 2', 'MPEG 1'); { MPEG layer codes } MPEG_LAYER_UNKNOWN = 0; { Unknown layer } MPEG_LAYER_III = 1; { Layer III } MPEG_LAYER_II = 2; { Layer II } MPEG_LAYER_I = 3; { Layer I } { MPEG layer names } MPEG_LAYER: array [0..3] of string = ('Layer ?', 'Layer III', 'Layer II', 'Layer I'); { Channel mode codes } MPEG_CM_STEREO = 0; { Stereo } MPEG_CM_JOINT_STEREO = 1; { Joint Stereo } MPEG_CM_DUAL_CHANNEL = 2; { Dual Channel } MPEG_CM_MONO = 3; { Mono } MPEG_CM_UNKNOWN = 4; { Unknown mode } { Channel mode names } MPEG_CM_MODE: array [0..4] of string = ('Stereo', 'Joint Stereo', 'Dual Channel', 'Mono', 'Unknown'); { Extension mode codes (for Joint Stereo) } MPEG_CM_EXTENSION_OFF = 0; { IS and MS modes set off } MPEG_CM_EXTENSION_IS = 1; { Only IS mode set on } MPEG_CM_EXTENSION_MS = 2; { Only MS mode set on } MPEG_CM_EXTENSION_ON = 3; { IS and MS modes set on } MPEG_CM_EXTENSION_UNKNOWN = 4; { Unknown extension mode } { Emphasis mode codes } MPEG_EMPHASIS_NONE = 0; { None } MPEG_EMPHASIS_5015 = 1; { 50/15 ms } MPEG_EMPHASIS_UNKNOWN = 2; { Unknown emphasis } MPEG_EMPHASIS_CCIT = 3; { CCIT J.17 } { Emphasis names } MPEG_EMPHASIS: array [0..3] of string = ('None', '50/15 ms', 'Unknown', 'CCIT J.17'); { Encoder codes } MPEG_ENCODER_UNKNOWN = 0; { Unknown encoder } MPEG_ENCODER_XING = 1; { Xing } MPEG_ENCODER_FHG = 2; { FhG } MPEG_ENCODER_LAME = 3; { LAME } MPEG_ENCODER_BLADE = 4; { Blade } MPEG_ENCODER_GOGO = 5; { GoGo } MPEG_ENCODER_SHINE = 6; { Shine } MPEG_ENCODER_QDESIGN = 7; { QDesign } { Encoder names } MPEG_ENCODER: array [0..7] of string = ('Unknown', 'Xing', 'FhG', 'LAME', 'Blade', 'GoGo', 'Shine', 'QDesign'); type hFileInt = Integer; { Xing/FhG VBR header data } VBRData = record Found: Boolean; { True if VBR header found } ID: array [1..4] of Char; { Header ID: "Xing" or "VBRI" } Frames: Integer; { Total number of frames } Bytes: Integer; { Total number of bytes } Scale: Byte; { VBR scale (1..100) } VendorID: string; { Vendor ID (if present) } end; { MPEG frame header data} FrameData = record Found: Boolean; { True if frame found } Position: Integer; { Frame position in the file } Size: Word; { Frame size (bytes) } Xing: Boolean; { True if Xing encoder } Data: array [1..4] of Byte; { The whole frame header data } VersionID: Byte; { MPEG version ID } LayerID: Byte; { MPEG layer ID } ProtectionBit: Boolean; { True if protected by CRC } BitRateID: Word; { Bit rate ID } SampleRateID: Word; { Sample rate ID } PaddingBit: Boolean; { True if frame padded } PrivateBit: Boolean; { Extra information } ModeID: Byte; { Channel mode ID } ModeExtensionID: Byte; { Mode extension ID (for Joint Stereo) } CopyrightBit: Boolean; { True if audio copyrighted } OriginalBit: Boolean; { True if original media } EmphasisID: Byte; { Emphasis ID } end; { Class TMPEGaudio } TMPEGaudio = class(TObject) private { Private declarations } FFileLength: Integer; FVendorID: string; FVBR: VBRData; FFrame: FrameData; FMPEGStart: Int64; FMPEGEnd: Int64; FAudioSizeTag: Int64; FID3v1: TID3v1; FID3v2: TID3v2; FAPEtag: TAPEtag; procedure FResetData; function FGetVersion: string; function FGetLayer: string; function FGetBitRate: Word; function FGetSampleRate: Word; function FGetChannelMode: string; function FGetEmphasis: string; function FGetFrames: Integer; function FGetDuration: Double; function FGetVBREncoderID: Byte; function FGetCBREncoderID: Byte; function FGetEncoderID: Byte; function FGetEncoder: string; function FGetValid: Boolean; function FGetSamples: Cardinal; function FGetRatio: Double; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load data } property FileLength: Integer read FFileLength; { File length (bytes) } property VBR: VBRData read FVBR; { VBR header data } property Frame: FrameData read FFrame; { Frame header data } property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } property Version: string read FGetVersion; { MPEG version name } property Layer: string read FGetLayer; { MPEG layer name } property BitRate: Word read FGetBitRate; { Bit rate (kbit/s) } property SampleRate: Word read FGetSampleRate; { Sample rate (hz) } property ChannelMode: string read FGetChannelMode; { Channel mode name } property Emphasis: string read FGetEmphasis; { Emphasis name } property Frames: Integer read FGetFrames; { Total number of frames } property Duration: Double read FGetDuration; { Song duration (sec) } property EncoderID: Byte read FGetEncoderID; { Guessed encoder ID } property Encoder: string read FGetEncoder; { Guessed encoder name } property Valid: Boolean read FGetValid; { True if MPEG file valid } property Samples: Cardinal read FGetSamples; property Ratio: Double read FGetRatio; { Compression ratio (%) } property MPEGStart: Int64 read FMPEGStart;{Returns start pos of MPEG data} property MPEGEnd: Int64 read FMPEGEnd; { Returns end pos of MPEG data } property AudioSizeTag: Int64 read FAudioSizeTag; { Returns ID3v2 TSIZ value or 0 } end; implementation uses DCOSUtils; const { Limitation constants } MAX_MPEG_FRAME_LENGTH = 1729; { Max. MPEG frame length } MIN_MPEG_BIT_RATE = 8; { Min. bit rate value } MAX_MPEG_BIT_RATE = 448; { Max. bit rate value } MIN_ALLOWED_DURATION = 0.1; { Min. song duration value } { VBR Vendor ID strings } VENDOR_ID_LAME = 'LAME'; { For LAME } VENDOR_ID_GOGO_NEW = 'GOGO'; { For GoGo (New) } VENDOR_ID_GOGO_OLD = 'MPGE'; { For GoGo (Old) } hINVALID_HANDLE_VALUE = hFileInt(-1); { ********************* Auxiliary functions & procedures ******************** } function IsFrameHeader(const HeaderData: array of Byte): Boolean; begin { Check for valid frame header } if ((HeaderData[0] and $FF) <> $FF) or ((HeaderData[1] and $E0) <> $E0) or (((HeaderData[1] shr 3) and 3) = 1) or (((HeaderData[1] shr 1) and 3) = 0) or ((HeaderData[2] and $F0) = $F0) or ((HeaderData[2] and $F0) = 0) or (((HeaderData[2] shr 2) and 3) = 3) or ((HeaderData[3] and 3) = 2) then Result := false else Result := true; end; { --------------------------------------------------------------------------- } procedure DecodeHeader(const HeaderData: array of Byte; var Frame: FrameData); begin { Decode frame header data } Move(HeaderData, Frame.Data, SizeOf(Frame.Data)); Frame.VersionID := (HeaderData[1] shr 3) and 3; Frame.LayerID := (HeaderData[1] shr 1) and 3; Frame.ProtectionBit := (HeaderData[1] and 1) <> 1; Frame.BitRateID := HeaderData[2] shr 4; Frame.SampleRateID := (HeaderData[2] shr 2) and 3; Frame.PaddingBit := ((HeaderData[2] shr 1) and 1) = 1; Frame.PrivateBit := (HeaderData[2] and 1) = 1; Frame.ModeID := (HeaderData[3] shr 6) and 3; Frame.ModeExtensionID := (HeaderData[3] shr 4) and 3; Frame.CopyrightBit := ((HeaderData[3] shr 3) and 1) = 1; Frame.OriginalBit := ((HeaderData[3] shr 2) and 1) = 1; Frame.EmphasisID := HeaderData[3] and 3; end; { --------------------------------------------------------------------------- } function ValidFrameAt(const Index: Word; Data: array of Byte): Boolean; var HeaderData: array [1..4] of Byte; begin { Check for frame at given position } HeaderData[1] := Data[Index]; HeaderData[2] := Data[Index + 1]; HeaderData[3] := Data[Index + 2]; HeaderData[4] := Data[Index + 3]; if IsFrameHeader(HeaderData) then Result := true else Result := false; end; { --------------------------------------------------------------------------- } function GetCoefficient(const Frame: FrameData): Byte; begin { Get frame size coefficient } if Frame.VersionID = MPEG_VERSION_1 then if Frame.LayerID = MPEG_LAYER_I then Result := 48 else Result := 144 else if Frame.LayerID = MPEG_LAYER_I then Result := 24 else if Frame.LayerID = MPEG_LAYER_II then Result := 144 else Result := 72; end; { --------------------------------------------------------------------------- } function GetBitRate(const Frame: FrameData): Word; begin { Get bit rate } Result := MPEG_BIT_RATE[Frame.VersionID, Frame.LayerID, Frame.BitRateID]; end; { --------------------------------------------------------------------------- } function GetSampleRate(const Frame: FrameData): Word; begin { Get sample rate } Result := MPEG_SAMPLE_RATE[Frame.VersionID, Frame.SampleRateID]; end; { --------------------------------------------------------------------------- } function GetPadding(const Frame: FrameData): Byte; begin { Get frame padding } if Frame.PaddingBit then if Frame.LayerID = MPEG_LAYER_I then Result := 4 else Result := 1 else Result := 0; end; { --------------------------------------------------------------------------- } function GetFrameLength(const Frame: FrameData): Word; var Coefficient, BitRate, SampleRate, Padding: Word; begin { Calculate MPEG frame length } Coefficient := GetCoefficient(Frame); BitRate := GetBitRate(Frame); SampleRate := GetSampleRate(Frame); Padding := GetPadding(Frame); Result := Trunc(Coefficient * BitRate * 1000 / SampleRate) + Padding; end; { --------------------------------------------------------------------------- } function IsXing(const Index: Word; Data: array of Byte): Boolean; begin { Get true if Xing encoder } Result := (Data[Index] = 0) and (Data[Index + 1] = 0) and (Data[Index + 2] = 0) and (Data[Index + 3] = 0) and (Data[Index + 4] = 0) and (Data[Index + 5] = 0); end; { --------------------------------------------------------------------------- } function GetXingInfo(const Index: Word; Data: array of Byte): VBRData; begin { Extract Xing VBR info at given position } FillChar(Result, SizeOf(Result), 0); Result.Found := true; Result.ID := VBR_ID_XING; Result.Frames := Data[Index + 8] * $1000000 + Data[Index + 9] * $10000 + Data[Index + 10] * $100 + Data[Index + 11]; Result.Bytes := Data[Index + 12] * $1000000 + Data[Index + 13] * $10000 + Data[Index + 14] * $100 + Data[Index + 15]; Result.Scale := Data[Index + 119]; { Vendor ID can be not present } Result.VendorID := Chr(Data[Index + 120]) + Chr(Data[Index + 121]) + Chr(Data[Index + 122]) + Chr(Data[Index + 123]) + Chr(Data[Index + 124]) + Chr(Data[Index + 125]) + Chr(Data[Index + 126]) + Chr(Data[Index + 127]); end; { --------------------------------------------------------------------------- } function GetFhGInfo(const Index: Word; Data: array of Byte): VBRData; begin { Extract FhG VBR info at given position } FillChar(Result, SizeOf(Result), 0); Result.Found := true; Result.ID := VBR_ID_FHG; Result.Scale := Data[Index + 9]; Result.Bytes := Data[Index + 10] * $1000000 + Data[Index + 11] * $10000 + Data[Index + 12] * $100 + Data[Index + 13]; Result.Frames := Data[Index + 14] * $1000000 + Data[Index + 15] * $10000 + Data[Index + 16] * $100 + Data[Index + 17]; end; { --------------------------------------------------------------------------- } function FindVBR(const Index: Word; Data: array of Byte): VBRData; begin { Check for VBR header at given position } FillChar(Result, SizeOf(Result), 0); if Chr(Data[Index]) + Chr(Data[Index + 1]) + Chr(Data[Index + 2]) + Chr(Data[Index + 3]) = VBR_ID_XING then Result := GetXingInfo(Index, Data); if Chr(Data[Index]) + Chr(Data[Index + 1]) + Chr(Data[Index + 2]) + Chr(Data[Index + 3]) = VBR_ID_FHG then Result := GetFhGInfo(Index, Data); end; { --------------------------------------------------------------------------- } function GetVBRDeviation(const Frame: FrameData): Byte; begin { Calculate VBR deviation } if Frame.VersionID = MPEG_VERSION_1 then if Frame.ModeID <> MPEG_CM_MONO then Result := 36 else Result := 21 else if Frame.ModeID <> MPEG_CM_MONO then Result := 21 else Result := 13; end; { --------------------------------------------------------------------------- } function FindFrame(const Data: array of Byte; var VBR: VBRData): FrameData; var HeaderData: array [1..4] of Byte; Iterator, VBRIdx: Integer; begin { Search for valid frame } FillChar(Result, SizeOf(Result), 0); Move(Data, HeaderData, SizeOf(HeaderData)); for Iterator := 0 to SizeOf(Data) - MAX_MPEG_FRAME_LENGTH do begin { Decode data if frame header found } if IsFrameHeader(HeaderData) then begin DecodeHeader(HeaderData, Result); { Check for next frame and try to find VBR header } VBRIdx := Iterator + GetFrameLength(Result); if (VBRIdx < SizeOf(Data)) and ValidFrameAt(VBRIdx, Data) then begin Result.Found := true; Result.Position := Iterator; Result.Size := GetFrameLength(Result); Result.Xing := IsXing(Iterator + SizeOf(HeaderData), Data); VBR := FindVBR(Iterator + GetVBRDeviation(Result), Data); break; end; end; { Prepare next data block } HeaderData[1] := HeaderData[2]; HeaderData[2] := HeaderData[3]; HeaderData[3] := HeaderData[4]; HeaderData[4] := Data[Iterator + SizeOf(HeaderData)]; end; end; { --------------------------------------------------------------------------- } function FindVendorID(const Data: array of Byte; Size: Word): string; var Iterator: Integer; VendorID: string; begin { Search for vendor ID } Result := ''; if (SizeOf(Data) - Size - 8) < 0 then Size := SizeOf(Data) - 8; for Iterator := 0 to Size do begin VendorID := Chr(Data[SizeOf(Data) - Iterator - 8]) + Chr(Data[SizeOf(Data) - Iterator - 7]) + Chr(Data[SizeOf(Data) - Iterator - 6]) + Chr(Data[SizeOf(Data) - Iterator - 5]); if VendorID = VENDOR_ID_LAME then begin Result := VendorID + Chr(Data[SizeOf(Data) - Iterator - 4]) + Chr(Data[SizeOf(Data) - Iterator - 3]) + Chr(Data[SizeOf(Data) - Iterator - 2]) + Chr(Data[SizeOf(Data) - Iterator - 1]); break; end; if VendorID = VENDOR_ID_GOGO_NEW then begin Result := VendorID; break; end; end; end; { ********************** Private functions & procedures ********************* } procedure TMPEGaudio.FResetData; begin { Reset all variables } FFileLength := 0; FMPEGStart := 0; FMPEGEnd := 0; FAudioSizeTag := 0; FVendorID := ''; FillChar(FVBR, SizeOf(FVBR), 0); FillChar(FFrame, SizeOf(FFrame), 0); FFrame.VersionID := MPEG_VERSION_UNKNOWN; FFrame.SampleRateID := MPEG_SAMPLE_RATE_UNKNOWN; FFrame.ModeID := MPEG_CM_UNKNOWN; FFrame.ModeExtensionID := MPEG_CM_EXTENSION_UNKNOWN; FFrame.EmphasisID := MPEG_EMPHASIS_UNKNOWN; FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetVersion: string; begin { Get MPEG version name } Result := MPEG_VERSION[FFrame.VersionID]; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetLayer: string; begin { Get MPEG layer name } Result := MPEG_LAYER[FFrame.LayerID]; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetBitRate: Word; begin { Get bit rate, calculate average bit rate if VBR header found } if (FVBR.Found) and (FVBR.Frames > 0) then Result := Round((FVBR.Bytes / FVBR.Frames - GetPadding(FFrame)) * GetSampleRate(FFrame) / GetCoefficient(FFrame) / 1000) else Result := GetBitRate(FFrame); end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetSampleRate: Word; begin { Get sample rate } Result := GetSampleRate(FFrame); end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetChannelMode: string; begin { Get channel mode name } Result := MPEG_CM_MODE[FFrame.ModeID]; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetEmphasis: string; begin { Get emphasis name } Result := MPEG_EMPHASIS[FFrame.EmphasisID]; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetFrames: Integer; var MPEGSize: Integer; begin { Get total number of frames, calculate if VBR header not found } if FVBR.Found then Result := FVBR.Frames else begin MPEGSize := FMPEGEnd - FMPEGStart; Result := (MPEGSize - FFrame.Position) div GetFrameLength(FFrame); end; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetDuration: Double; var MPEGSize: Int64; begin { Calculate song duration } if FFrame.Found then if (FVBR.Found) and (FVBR.Frames > 0) then Result := FVBR.Frames * GetCoefficient(FFrame) * 8 / GetSampleRate(FFrame) else begin MPEGSize := FMPEGEnd - FMPEGStart; Result := (MPEGSize - FFrame.Position) / GetBitRate(FFrame) / 1000 * 8; end else Result := 0; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetVBREncoderID: Byte; begin { Guess VBR encoder and get ID } Result := 0; if Copy(FVBR.VendorID, 1, 4) = VENDOR_ID_LAME then Result := MPEG_ENCODER_LAME; if Copy(FVBR.VendorID, 1, 4) = VENDOR_ID_GOGO_NEW then Result := MPEG_ENCODER_GOGO; if Copy(FVBR.VendorID, 1, 4) = VENDOR_ID_GOGO_OLD then Result := MPEG_ENCODER_GOGO; if (FVBR.ID = VBR_ID_XING) and (Copy(FVBR.VendorID, 1, 4) <> VENDOR_ID_LAME) and (Copy(FVBR.VendorID, 1, 4) <> VENDOR_ID_GOGO_NEW) and (Copy(FVBR.VendorID, 1, 4) <> VENDOR_ID_GOGO_OLD) then Result := MPEG_ENCODER_XING; if FVBR.ID = VBR_ID_FHG then Result := MPEG_ENCODER_FHG; if (Copy(FVendorID, 1, 4) = VENDOR_ID_LAME) then Result := MPEG_ENCODER_LAME; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetCBREncoderID: Byte; begin { Guess CBR encoder and get ID } Result := MPEG_ENCODER_FHG; if (FFrame.OriginalBit) and (FFrame.ProtectionBit) then Result := MPEG_ENCODER_LAME; if (GetBitRate(FFrame) <= 160) and (FFrame.ModeID = MPEG_CM_STEREO) then Result := MPEG_ENCODER_BLADE; if (FFrame.CopyrightBit) and (FFrame.OriginalBit) and (not FFrame.ProtectionBit) then Result := MPEG_ENCODER_XING; if (FFrame.Xing) and (FFrame.OriginalBit) then Result := MPEG_ENCODER_XING; if FFrame.LayerID = MPEG_LAYER_II then Result := MPEG_ENCODER_QDESIGN; if (FFrame.ModeID = MPEG_CM_DUAL_CHANNEL) and (FFrame.ProtectionBit) then Result := MPEG_ENCODER_SHINE; if Copy(FVendorID, 1, 4) = VENDOR_ID_LAME then Result := MPEG_ENCODER_LAME; if Copy(FVendorID, 1, 4) = VENDOR_ID_GOGO_NEW then Result := MPEG_ENCODER_GOGO; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetEncoderID: Byte; begin { Get guessed encoder ID } if FFrame.Found then if FVBR.Found then Result := FGetVBREncoderID else Result := FGetCBREncoderID else Result := 0; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetEncoder: string; var VendorID: string; begin { Get guessed encoder name and encoder version for LAME } Result := MPEG_ENCODER[FGetEncoderID]; if FVBR.VendorID <> '' then VendorID := FVBR.VendorID; if FVendorID <> '' then VendorID := FVendorID; if (FGetEncoderID = MPEG_ENCODER_LAME) and (Length(VendorID) >= 8) and (VendorID[5] in ['0'..'9']) and (VendorID[6] = '.') and (VendorID[7] in ['0'..'9']) and (VendorID[8] in ['0'..'9']) then Result := Result + #32 + VendorID[5] + VendorID[6] + VendorID[7] + VendorID[8]; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetValid: Boolean; begin { Check for right MPEG file data } Result := (FFrame.Found) and (FGetBitRate >= MIN_MPEG_BIT_RATE) and (FGetBitRate <= MAX_MPEG_BIT_RATE) and (FGetDuration >= MIN_ALLOWED_DURATION); end; { ********************** Public functions & procedures ********************** } constructor TMPEGaudio.Create; begin { Object constructor } inherited; FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; end; { --------------------------------------------------------------------------- } destructor TMPEGaudio.Destroy; begin { Object destructor } FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TMPEGaudio.ReadFromFile(const FileName: String): Boolean; var SourceFile: hFileInt; Data: array [1..MAX_MPEG_FRAME_LENGTH * 2] of Byte; Transferred: DWORD; Position : Int64; tmp : Integer; str: string; Value: Int64; Code: Integer; begin FResetData; SourceFile := hINVALID_HANDLE_VALUE; try SourceFile := mbFileOpen(FileName, fmOpenRead or fmShareDenyWrite); if (SourceFile = hINVALID_HANDLE_VALUE) then begin Result := false; Exit; end; { At first search for tags & Lyrics3 then search for a MPEG frame and VBR data } if (FID3v2.ReadFromFile(FileName)) and (FID3v1.ReadFromFile(FileName)) then begin FFileLength := mbFileSize(FileName); Position := FID3v2.Size; FileSeek(SourceFile, Position, soFromBeginning); Transferred:= FileRead(SourceFile, Data, SizeOf(Data)); FFrame := FindFrame(Data, FVBR); // Search for vendor ID at the beginning FVendorID := FindVendorID(Data, FFrame.Size * 5); { patched by e-w@re } { Try to find the first frame if no frame at the beginning found ]} if (not FFrame.Found) and (Transferred = SizeOf(Data)) then repeat Transferred:= FileRead(SourceFile, Data, SizeOf(Data)); Inc(Position, Transferred); FFrame := FindFrame(Data, FVBR); until (FFrame.Found) or (Transferred < SizeOf(Data)); if FFrame.Found then begin FFrame.Position := Position + FFrame.Position; FMPEGStart := FFrame.Position; tmp := FID3v1.TagSize; FMPEGEnd := FFileLength - tmp; end; if FID3v2.Exists then begin str := FID3v2.TSIZ; if Length(str) > 0 then try Val(str, Value, Code); if (Code = 0) then FAudioSizeTag := Value; except // ignore end; end; { Search for vendor ID at the end if CBR encoded } if (FFrame.Found) and (FVendorID = '') then begin if not FID3v1.Exists then Position := FFileLength - SizeOf(Data) else Position := FFileLength - SizeOf(Data) - 128; FileSeek(SourceFile, Position, soFromBeginning); Transferred:= FileRead(SourceFile, Data, SizeOf(Data)); FVendorID := FindVendorID(Data, FFrame.Size * 5); end; end; FileClose(SourceFile); Result := true; except if (SourceFile <> hINVALID_HANDLE_VALUE) then FileClose(SourceFile); Result := false; end; if not FFrame.Found then FResetData; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetSamples: Cardinal; begin Result := 0; if FFrame.Found then // rework, it's the same if (FVBR.Found) and (FVBR.Frames > 0) then Result := FVBR.Frames * GetCoefficient(FFrame) * 8 else Result := FGetFrames * GetCoefficient(FFrame) * 8; end; { --------------------------------------------------------------------------- } function TMPEGaudio.FGetRatio: Double; begin { Get compression ratio } if FGetValid then begin //Result := FFileSize / (FGetSamples * FChannels * FBits / 8 + 44) * 100 if ChannelMode = 'Mono' then Result := FFileLength / (FGetSamples * (1 * 16 / 8) + 44) * 100 else Result := FFileLength / (FGetSamples * (2 * 16 / 8) + 44) * 100; end else Result := 0; end; { --------------------------------------------------------------------------- } end. ��������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/MP4file.pas������������������������������������������0000644�0001750�0000144�00000023070�15104114162�022343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Class TMP4file - for manipulating with M4A audio file information Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit MP4file; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8; type TAtomName = array [0..3] of AnsiChar; { TMP4file } TMP4file = class private FFileSize: Int64; FStream: TStream; function GetValid: Boolean; private FChannels: Word; FBitRate: Double; FDuration: Double; FSampleSize: Word; FSampleRate: LongWord; private FYear, FGenre, FTitle, FAlbum, FArtist, FEncoder, FComment, FComposer, FCopyright: String; FTrack: LongWord; protected procedure ResetData; procedure ReadMovieHeader; procedure ReadMetaDataItemList; procedure ReadSampleDescription; function ReadAtomData: String; function ReadGenreData: String; function ReadTrackData: LongWord; function FindAtomHeader(const AName: TAtomName; ASize: PInt64 = nil): Boolean; function LoadAtomHeader(out AtomName: TAtomName; out AtomSize: Int64): Boolean; public constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load header } property FileSize: Int64 read FFileSize; { File size (bytes) } property Channels: Word read FChannels; { Number of channels } property SampleRate: LongWord read FSampleRate; { Sample rate (hz) } property BitRate: Double read FBitRate; { Bit rate (bit/s) } property Duration: Double read FDuration; { Duration (seconds) } property Year: String read FYear; { Release year } property Genre: String read FGenre; { Genre name } property Track: LongWord read FTrack; { Track number } property Title: String read FTitle; { Song title } property Album: String read FAlbum; { Album title } property Artist: String read FArtist; { Artist name } property Comment: String read FComment; { Comment } property Encoder: String read FEncoder; { Encoder } property Composer: String read FComposer; { Composer } property Copyright: String read FCopyright; { Copyright } property Valid: Boolean read GetValid; { True if data valid } end; implementation uses ID3v1; { TMP4file } function TMP4file.FindAtomHeader(const AName: TAtomName; ASize: PInt64): Boolean; var AtomSize: Int64; APosition: Int64; AtomName: TAtomName; begin repeat if not LoadAtomHeader(AtomName, AtomSize) then Break; if SameText(AtomName, AName) then begin if Assigned(ASize) then ASize^:= AtomSize; Exit(True); end else begin APosition:= FStream.Seek(AtomSize, soCurrent); end; until (APosition >= FFileSize); Result:= False; end; function TMP4file.GetValid: Boolean; begin Result:= (FDuration > 0.0) and (FBitRate > 0.0); end; function TMP4file.LoadAtomHeader(out AtomName: TAtomName; out AtomSize: Int64): Boolean; begin AtomSize:= SwapEndian(FStream.ReadDWord); FillChar({%H-}AtomName, SizeOf(TAtomName), #0); FStream.Read(AtomName, SizeOf(TAtomName)); if AtomSize <> 1 then AtomSize:= AtomSize - 8 else begin AtomSize:= Int64(SwapEndian(FStream.ReadQWord)) - 16; end; Result:= not ((AtomSize < 0) or (AtomSize > FFileSize)); end; procedure TMP4file.ResetData; begin FTrack:= 0; FBitRate:= 0; FChannels:= 0; FDuration:= 0.0; FSampleSize:= 0; FSampleRate:= 0; FYear:= EmptyStr; FGenre:= EmptyStr; FTitle:= EmptyStr; FAlbum:= EmptyStr; FArtist:= EmptyStr; FEncoder:= EmptyStr; FComment:= EmptyStr; FComposer:= EmptyStr; FCopyright:= EmptyStr; end; procedure TMP4file.ReadMovieHeader; var AVersion: Byte; MediaSize: Int64; ADuration: QWord = 0; TimeScale: LongWord = 0; begin FStream.Seek(0, soBeginning); if FindAtomHeader('moov') and FindAtomHeader('mvhd') then begin AVersion:= FStream.ReadByte; FStream.Seek(3, soCurrent); if AVersion = 0 then begin FStream.Seek(8, soCurrent); TimeScale:= SwapEndian(FStream.ReadDWord); ADuration:= SwapEndian(FStream.ReadDWord); end else if AVersion = 1 then begin FStream.Seek(16, soCurrent); TimeScale:= SwapEndian(FStream.ReadDWord); ADuration:= SwapEndian(FStream.ReadQWord); end; if TimeScale > 0 then FDuration:= ADuration / TimeScale; end; FStream.Seek(0, soBeginning); if (FDuration > 0) and FindAtomHeader('mdat', @MediaSize) then begin FBitRate:= MediaSize * 8 / FDuration / 1000; end; end; function TMP4file.ReadAtomData: String; var AtomSize: Int64; DataType: LongWord; Buffer: array[Byte] of AnsiChar; begin Result:= EmptyStr; if FindAtomHeader('data', @AtomSize) then begin if AtomSize - 8 > High(Byte) then Exit; DataType:= SwapEndian(FStream.ReadDWord); if DataType = 1 then begin FStream.Seek(4, soCurrent); FStream.Read({%H-}Buffer, AtomSize - 8); SetString(Result, Buffer, AtomSize - 8); end; end; end; function TMP4file.ReadGenreData: String; var AtomSize: Int64; AGenre: Word = 0; begin Result:= EmptyStr; if FindAtomHeader('data', @AtomSize) then begin FStream.Seek(8, soCurrent); AGenre:= SwapEndian(FStream.ReadWord); FStream.Seek(AtomSize - 10, soCurrent); end; if (AGenre > 0) and (AGenre < MAX_MUSIC_GENRES) then begin Result:= aTAG_MusicGenre[AGenre - 1]; end; end; function TMP4file.ReadTrackData: LongWord; var AtomSize: Int64; begin Result:= 0; if FindAtomHeader('data', @AtomSize) then begin FStream.Seek(8, soCurrent); Result:= SwapEndian(FStream.ReadDWord); FStream.Seek(AtomSize - 12, soCurrent); end; end; procedure TMP4file.ReadMetaDataItemList; var AtomSize: Int64; AtomFinish: Int64; AtomName: TAtomName; begin FStream.Seek(0, soBeginning); if not FindAtomHeader('moov') then Exit; if not FindAtomHeader('udta') then Exit; if FindAtomHeader('meta') then begin FStream.Seek(4, soCurrent); if FindAtomHeader('ilst', @AtomSize) then begin AtomFinish := FStream.Position + AtomSize; while FStream.Position < AtomFinish do begin LoadAtomHeader(AtomName, AtomSize); if SameText('trkn', AtomName) then FTrack:= ReadTrackData else if SameText('gnre', AtomName) then FGenre:= ReadGenreData else if SameText('cprt', AtomName) then FCopyright:= ReadAtomData else if SameText(#169'art', AtomName) then FArtist:= ReadAtomData else if SameText(#169'alb', AtomName) then FAlbum:= ReadAtomData else if SameText(#169'cmt', AtomName) then FComment:= ReadAtomData else if SameText(#169'day', AtomName) then FYear:= ReadAtomData else if SameText(#169'nam', AtomName) then FTitle:= ReadAtomData else if SameText(#169'too', AtomName) then FEncoder:= ReadAtomData else if SameText(#169'wrt', AtomName) then FComposer:= ReadAtomData else if SameText(#169'gen', AtomName) then FGenre:= ReadAtomData else FStream.Seek(AtomSize, soCurrent); end; end; end; end; procedure TMP4file.ReadSampleDescription; var Number: LongWord; begin if not FindAtomHeader('moov') then Exit; if not FindAtomHeader('trak') then Exit; if not FindAtomHeader('mdia') then Exit; if not FindAtomHeader('minf') then Exit; if not FindAtomHeader('stbl') then Exit; if FindAtomHeader('stsd') then begin FStream.Seek(4, soCurrent); Number:= SwapEndian(FStream.ReadDWord); if Number = 1 then begin if FindAtomHeader('mp4a') then begin FStream.Seek(16, soCurrent); FChannels:= SwapEndian(FStream.ReadWord); FSampleSize:= SwapEndian(FStream.ReadWord); FStream.Seek(2, soCurrent); FSampleRate:= SwapEndian(FStream.ReadDWord); end; end; end; end; constructor TMP4file.Create; begin end; destructor TMP4file.Destroy; begin inherited Destroy; end; function TMP4file.ReadFromFile(const FileName: String): Boolean; var AtomSize: Int64; AtomName: TAtomName; begin ResetData; FStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try FFileSize:= FStream.Size; Result:= LoadAtomHeader(AtomName, AtomSize) and SameText(AtomName, 'ftyp'); if Result then begin FStream.Seek(AtomSize, soCurrent); ReadSampleDescription; ReadMovieHeader; ReadMetaDataItemList; end; finally FreeAndNil(FStream); end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/ID3v2.pas��������������������������������������������0000644�0001750�0000144�00000066634�15104114162�021747� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TID3v2 - for manipulating with ID3v2 tags } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.8 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.7 (2 October 2002) } { - Added property TrackString } { } { Version 1.6 (29 July 2002) } { - Reading support for Unicode } { - Removed limitation for the track number } { } { Version 1.5 (23 May 2002) } { - Support for padding } { } { Version 1.4 (24 March 2002) } { - Reading support for ID3v2.2.x & ID3v2.4.x tags } { } { Version 1.3 (16 February 2002) } { - Fixed bug with property Comment } { - Added info: composer, encoder, copyright, language, link } { } { Version 1.2 (17 October 2001) } { - Writing support for ID3v2.3.x tags } { - Fixed bug with track number detection } { - Fixed bug with tag reading } { } { Version 1.1 (31 August 2001) } { - Added public procedure ResetData } { } { Version 1.0 (14 August 2001) } { - Reading support for ID3v2.3.x tags } { - Tag info: title, artist, album, track, year, genre, comment } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit ID3v2; interface uses Classes, SysUtils, DCClassesUtf8, DCOSUtils; const TAG_VERSION_2_2 = 2; { Code for ID3v2.2.x tag } TAG_VERSION_2_3 = 3; { Code for ID3v2.3.x tag } TAG_VERSION_2_4 = 4; { Code for ID3v2.4.x tag } type { Class TID3v2 } TID3v2 = class(TObject) private { Private declarations } FExists: Boolean; FVersionID: Byte; FSize: Integer; FTitle: string; FArtist: string; FAlbum: string; FTrack: Word; FTrackString: string; FYear: string; FGenre: string; FComment: string; FComposer: string; FEncoder: string; FCopyright: string; FLanguage: string; FLink: string; FTSIZ: string; procedure FSetTitle(const NewTitle: string); procedure FSetArtist(const NewArtist: string); procedure FSetAlbum(const NewAlbum: string); procedure FSetTrack(const NewTrack: Word); procedure FSetYear(const NewYear: string); procedure FSetGenre(const NewGenre: string); procedure FSetComment(const NewComment: string); procedure FSetComposer(const NewComposer: string); procedure FSetEncoder(const NewEncoder: string); procedure FSetCopyright(const NewCopyright: string); procedure FSetLanguage(const NewLanguage: string); procedure FSetLink(const NewLink: string); public { Public declarations } constructor Create; { Create object } procedure ResetData; { Reset all data } function ReadFromFile(const FileName: String): Boolean; { Load tag } function SaveToFile(const FileName: String): Boolean; { Save tag } function RemoveFromFile(const FileName: String): Boolean;{ Delete tag } property Exists: Boolean read FExists; { True if tag found } property VersionID: Byte read FVersionID; { Version code } property Size: Integer read FSize; { Total tag size } property Title: string read FTitle write FSetTitle; { Song title } property Artist: string read FArtist write FSetArtist; { Artist name } property Album: string read FAlbum write FSetAlbum; { Album title } property Track: Word read FTrack write FSetTrack; { Track number } property TrackString: string read FTrackString; { Track number (string) } property Year: string read FYear write FSetYear; { Release year } property Genre: string read FGenre write FSetGenre; { Genre name } property Comment: string read FComment write FSetComment; { Comment } property Composer: string read FComposer write FSetComposer; { Composer } property Encoder: string read FEncoder write FSetEncoder; { Encoder } property Copyright: string read FCopyright write FSetCopyright; { (c) } property Language: string read FLanguage write FSetLanguage; { Language } property Link: string read FLink write FSetLink; { URL link } property TSIZ: string read FTSIZ; end; implementation uses LazUTF8, DCConvertEncoding, DCUnicodeUtils; const { ID3v2 tag ID } ID3V2_ID = 'ID3'; { Max. number of supported tag frames } ID3V2_FRAME_COUNT = 17; { Names of supported tag frames (ID3v2.3.x & ID3v2.4.x) } ID3V2_FRAME_NEW: array [1..ID3V2_FRAME_COUNT] of string = ('TIT2', 'TPE1', 'TALB', 'TRCK', 'TYER', 'TCON', 'COMM', 'TCOM', 'TENC', 'TCOP', 'TLAN', 'WXXX', 'TDRC', 'TOPE', 'TIT1', 'TOAL', 'TSIZ'); { Names of supported tag frames (ID3v2.2.x) } ID3V2_FRAME_OLD: array [1..ID3V2_FRAME_COUNT] of string = ('TT2', 'TP1', 'TAL', 'TRK', 'TYE', 'TCO', 'COM', 'TCM', 'TEN', 'TCR', 'TLA', 'WXX', 'TOR', 'TOA', 'TT1', 'TOT', 'TSI'); { Max. tag size for saving } ID3V2_MAX_SIZE = 4096; { Unicode ID } UTF16_ID = #01; UTF16BE_ID = #02; UTF8_ID = #03; type { Frame header (ID3v2.3.x & ID3v2.4.x) } FrameHeaderNew = record ID: array [1..4] of Char; { Frame ID } Size: Integer; { Size excluding header } Flags: Word; { Flags } end; { Frame header (ID3v2.2.x) } FrameHeaderOld = record ID: array [1..3] of Char; { Frame ID } Size: array [1..3] of Byte; { Size excluding header } end; { ID3v2 header data - for internal use } TagInfo = record { Real structure of ID3v2 header } ID: array [1..3] of Char; { Always "ID3" } Version: Byte; { Version number } Revision: Byte; { Revision number } Flags: Byte; { Flags of tag } Size: array [1..4] of Byte; { Tag size excluding header } { Extended data } FileSize: Integer; { File size (bytes) } Frame: array [1..ID3V2_FRAME_COUNT] of string; { Information from frames } NeedRewrite: Boolean; { Tag should be rewritten } PaddingSize: Integer; { Padding size (bytes) } end; { ********************* Auxiliary functions & procedures ******************** } function ReadHeader(const FileName: String; var Tag: TagInfo): Boolean; var SourceFile: TFileStreamEx; Transferred: Integer; begin try Result := true; { Set read-access and open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); { Read header and get file size } Transferred := SourceFile.Read(Tag, 10); Tag.FileSize := SourceFile.Size; SourceFile.Free; { if transfer is not complete } if Transferred < 10 then Result := false; except { Error } Result := false; end; end; { --------------------------------------------------------------------------- } function GetTagSize(const Tag: TagInfo): Integer; begin { Get total tag size } Result := Tag.Size[1] * $200000 + Tag.Size[2] * $4000 + Tag.Size[3] * $80 + Tag.Size[4] + 10; if Tag.Flags and $10 = $10 then Inc(Result, 10); if Result > Tag.FileSize then Result := 0; end; { --------------------------------------------------------------------------- } procedure SetTagItem(const ID, Data: string; var Tag: TagInfo); var Iterator: Byte; FrameID: string; begin { Set tag item if supported frame found } for Iterator := 1 to ID3V2_FRAME_COUNT do begin if Tag.Version > TAG_VERSION_2_2 then FrameID := ID3V2_FRAME_NEW[Iterator] else FrameID := ID3V2_FRAME_OLD[Iterator]; if (FrameID = ID) and (Data[1] <= UTF8_ID) then Tag.Frame[Iterator] := Data; end; end; { --------------------------------------------------------------------------- } function Swap32(const Figure: Integer): Integer; var ByteArray: array [1..4] of Byte absolute Figure; begin { Swap 4 bytes } Result := ByteArray[1] * $1000000 + ByteArray[2] * $10000 + ByteArray[3] * $100 + ByteArray[4]; end; { --------------------------------------------------------------------------- } procedure ReadFramesNew(const FileName: String; var Tag: TagInfo); var ASize: Cardinal; SourceFile: TFileStreamEx; Frame: FrameHeaderNew; Data: array [1..500] of Char; DataPosition, DataSize: Integer; begin { Get information from frames (ID3v2.3.x & ID3v2.4.x) } try { Set read-access, open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); SourceFile.Seek(10, soFromBeginning); // ID3v2 extended header if Tag.Flags and $40 = $40 then begin ASize:= BEToN(SourceFile.ReadDWord); SourceFile.Seek(ASize - 4, soFromCurrent); end; while (SourceFile.Position < GetTagSize(Tag)) and (SourceFile.Position < SourceFile.Size) do begin FillChar(Data, SizeOf(Data), 0); { Read frame header and check frame ID } SourceFile.Read(Frame, 10); if not (Frame.ID[1] in ['A'..'Z']) then break; { Note data position and determine significant data size } DataPosition := SourceFile.Position; if Swap32(Frame.Size) > SizeOf(Data) then DataSize := SizeOf(Data) else DataSize := Swap32(Frame.Size); { Read frame data and set tag item if frame supported } SourceFile.Read(Data, DataSize); if Frame.Flags and $8000 <> $8000 then SetTagItem(Frame.ID, Data, Tag); SourceFile.Seek(DataPosition + Swap32(Frame.Size), soFromBeginning); end; SourceFile.Free; except end; end; { --------------------------------------------------------------------------- } procedure ReadFramesOld(const FileName: String; var Tag: TagInfo); var SourceFile: TFileStreamEx; Frame: FrameHeaderOld; Data: array [1..500] of Char; DataPosition, FrameSize, DataSize: Integer; begin { Get information from frames (ID3v2.2.x) } try { Set read-access, open file } SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); SourceFile.Seek(10, soFromBeginning); while (SourceFile.Position < GetTagSize(Tag)) and (SourceFile.Position < SourceFile.Size) do begin FillChar(Data, SizeOf(Data), 0); { Read frame header and check frame ID } SourceFile.Read(Frame, 6); if not (Frame.ID[1] in ['A'..'Z']) then break; { Note data position and determine significant data size } DataPosition := SourceFile.Position; FrameSize := Frame.Size[1] shl 16 + Frame.Size[2] shl 8 + Frame.Size[3]; if FrameSize > SizeOf(Data) then DataSize := SizeOf(Data) else DataSize := FrameSize; { Read frame data and set tag item if frame supported } SourceFile.Read(Data, DataSize); SetTagItem(Frame.ID, Data, Tag); SourceFile.Seek(DataPosition + FrameSize, soFromBeginning); end; SourceFile.Free; except end; end; { --------------------------------------------------------------------------- } function GetStringUtf8(const Source: string): string; const UTF16BEBOM = #$FE#$FF; UTF16LEBOM = #$FF#$FE; begin { Convert string from unicode if needed and trim spaces } if (Length(Source) > 0) and (Source[1] = UTF16_ID) then begin if (Length(Source) < 3) then Result := EmptyStr else if (CompareWord(Source[2], UTF16BEBOM, 1) = 0) then Result := Trim(Utf16BEToUtf8(Copy(Source, 4, MaxInt))) else if (CompareWord(Source[2], UTF16LEBOM, 1) = 0) then Result := Trim(Utf16LEToUtf8(Copy(Source, 4, MaxInt))) else Result := EmptyStr end else if (Length(Source) > 0) and (Source[1] = UTF16BE_ID) then Result := Trim(Utf16BEToUtf8(Copy(Source, 2, MaxInt))) else if (Length(Source) > 0) and (Source[1] = UTF8_ID) then Result := Trim(Copy(Source, 2, MaxInt)) else Result := CeAnsiToUtf8(Trim(Source)); end; { --------------------------------------------------------------------------- } function GetContent(const Content1, Content2: string): string; begin { Get content preferring the first content } Result := GetStringUtf8(Content1); if Result = '' then Result := GetStringUtf8(Content2); end; { --------------------------------------------------------------------------- } function ExtractTrack(const TrackString: string): Word; var Track: string; Index, Value, Code: Integer; begin { Extract track from string } Track := GetStringUtf8(TrackString); Index := Pos('/', Track); if Index = 0 then Val(Track, Value, Code) else Val(Copy(Track, 1, Index - 1), Value, Code); if Code = 0 then Result := Value else Result := 0; end; { --------------------------------------------------------------------------- } function ExtractYear(const YearString, DateString: string): string; begin { Extract year from strings } Result := GetStringUtf8(YearString); if Result = '' then Result := Copy(GetStringUtf8(DateString), 1, 4); end; { --------------------------------------------------------------------------- } function ExtractGenre(const GenreString: string): string; begin { Extract genre from string } Result := GetStringUtf8(GenreString); if Pos(')', Result) > 0 then Delete(Result, 1, LastDelimiter(')', Result)); end; { --------------------------------------------------------------------------- } function ExtractText(const SourceString: string; LanguageID: Boolean): string; var Source, Separator: string; EncodingID: Char; begin { Extract significant text data from a complex field } Source := SourceString; Result := ''; if Length(Source) > 0 then begin EncodingID := Source[1]; if EncodingID in [UTF16_ID, UTF16BE_ID] then Separator := #0#0 else begin Separator := #0; end; if LanguageID then Delete(Source, 1, 4) else begin Delete(Source, 1, 1); end; Delete(Source, 1, Pos(Separator, Source) + Length(Separator) - 1); Result := GetStringUtf8(EncodingID + Source); end; end; { --------------------------------------------------------------------------- } procedure BuildHeader(var Tag: TagInfo); var Iterator, TagSize: Integer; begin { Calculate new tag size (without padding) } TagSize := 10; for Iterator := 1 to ID3V2_FRAME_COUNT do if Tag.Frame[Iterator] <> '' then Inc(TagSize, Length(Tag.Frame[Iterator]) + 11); { Check for ability to change existing tag } Tag.NeedRewrite := (Tag.ID <> ID3V2_ID) or (GetTagSize(Tag) < TagSize) or (GetTagSize(Tag) > ID3V2_MAX_SIZE); { Calculate padding size and set padded tag size } if Tag.NeedRewrite then Tag.PaddingSize := ID3V2_MAX_SIZE - TagSize else Tag.PaddingSize := GetTagSize(Tag) - TagSize; if Tag.PaddingSize > 0 then Inc(TagSize, Tag.PaddingSize); { Build tag header } Tag.ID := ID3V2_ID; Tag.Version := TAG_VERSION_2_3; Tag.Revision := 0; Tag.Flags := 0; { Convert tag size } for Iterator := 1 to 4 do Tag.Size[Iterator] := ((TagSize - 10) shr ((4 - Iterator) * 7)) and $7F; end; { --------------------------------------------------------------------------- } function ReplaceTag(const FileName: String; TagData: TStream): Boolean; var Destination: TFileStreamEx; begin { Replace old tag with new tag data } Result := false; if (not mbFileExists(FileName)) or (not mbFileSetReadOnly(FileName, False)) then exit; try TagData.Position := 0; Destination := TFileStreamEx.Create(FileName, fmOpenReadWrite); Destination.CopyFrom(TagData, TagData.Size); Destination.Free; Result := true; except { Access error } end; end; { --------------------------------------------------------------------------- } function RebuildFile(const FileName: String; TagData: TStream): Boolean; var Tag: TagInfo; Source, Destination: TFileStreamEx; BufferName: string; begin { Rebuild file with old file data and new tag data (optional) } Result := false; if (not mbFileExists(FileName)) or (not mbFileSetReadOnly(FileName, False)) then exit; if not ReadHeader(FileName, Tag) then exit; if (TagData = nil) and (Tag.ID <> ID3V2_ID) then exit; try { Create file streams } BufferName := FileName + '~'; Source := TFileStreamEx.Create(FileName, fmOpenRead); Destination := TFileStreamEx.Create(BufferName, fmCreate); { Copy data blocks } if Tag.ID = ID3V2_ID then Source.Seek(GetTagSize(Tag), soFromBeginning); if TagData <> nil then Destination.CopyFrom(TagData, 0); Destination.CopyFrom(Source, Source.Size - Source.Position); { Free resources } Source.Free; Destination.Free; { Replace old file and delete temporary file } if (mbDeleteFile(FileName)) and (mbRenameFile(BufferName, FileName)) then Result := true else raise Exception.Create(''); except { Access error } if mbFileExists(BufferName) then mbDeleteFile(BufferName); end; end; { --------------------------------------------------------------------------- } function SaveTag(const FileName: String; Tag: TagInfo): Boolean; var TagData: TStringStream; Iterator, FrameSize: Integer; Padding: array [1..ID3V2_MAX_SIZE] of Byte; begin { Build and write tag header and frames to stream } TagData := TStringStream.Create(''); BuildHeader(Tag); TagData.Write(Tag, 10); for Iterator := 1 to ID3V2_FRAME_COUNT do if Tag.Frame[Iterator] <> '' then begin TagData.WriteString(ID3V2_FRAME_NEW[Iterator]); FrameSize := Swap32(Length(Tag.Frame[Iterator]) + 1); TagData.Write(FrameSize, SizeOf(FrameSize)); TagData.WriteString(#0#0#0 + Tag.Frame[Iterator]); end; { Add padding } FillChar(Padding, SizeOf(Padding), 0); if Tag.PaddingSize > 0 then TagData.Write(Padding, Tag.PaddingSize); { Rebuild file or replace tag with new tag data } if Tag.NeedRewrite then Result := RebuildFile(FileName, TagData) else Result := ReplaceTag(FileName, TagData); TagData.Free; end; { ********************** Private functions & procedures ********************* } procedure TID3v2.FSetTitle(const NewTitle: string); begin { Set song title } FTitle := Trim(NewTitle); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetArtist(const NewArtist: string); begin { Set artist name } FArtist := Trim(NewArtist); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetAlbum(const NewAlbum: string); begin { Set album title } FAlbum := Trim(NewAlbum); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetTrack(const NewTrack: Word); begin { Set track number } FTrack := NewTrack; end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetYear(const NewYear: string); begin { Set release year } FYear := Trim(NewYear); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetGenre(const NewGenre: string); begin { Set genre name } FGenre := Trim(NewGenre); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetComment(const NewComment: string); begin { Set comment } FComment := Trim(NewComment); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetComposer(const NewComposer: string); begin { Set composer name } FComposer := Trim(NewComposer); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetEncoder(const NewEncoder: string); begin { Set encoder name } FEncoder := Trim(NewEncoder); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetCopyright(const NewCopyright: string); begin { Set copyright information } FCopyright := Trim(NewCopyright); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetLanguage(const NewLanguage: string); begin { Set language } FLanguage := Trim(NewLanguage); end; { --------------------------------------------------------------------------- } procedure TID3v2.FSetLink(const NewLink: string); begin { Set URL link } FLink := Trim(NewLink); end; { ********************** Public functions & procedures ********************** } constructor TID3v2.Create; begin { Create object } inherited; ResetData; end; { --------------------------------------------------------------------------- } procedure TID3v2.ResetData; begin { Reset all variables } FExists := false; FVersionID := 0; FSize := 0; FTitle := ''; FArtist := ''; FAlbum := ''; FTrack := 0; FTrackString := ''; FYear := ''; FGenre := ''; FComment := ''; FComposer := ''; FEncoder := ''; FCopyright := ''; FLanguage := ''; FLink := ''; FTSIZ := ''; end; { --------------------------------------------------------------------------- } function TID3v2.ReadFromFile(const FileName: String): Boolean; var Tag: TagInfo; begin { Reset data and load header from file to variable } ResetData; Result := ReadHeader(FileName, Tag); { Process data if loaded and header valid } if (Result) and (Tag.ID = ID3V2_ID) then begin FExists := true; { Fill properties with header data } FVersionID := Tag.Version; FSize := GetTagSize(Tag); { Get information from frames if version supported } if (FVersionID in [TAG_VERSION_2_2..TAG_VERSION_2_4]) and (FSize > 0) then begin if FVersionID > TAG_VERSION_2_2 then ReadFramesNew(FileName, Tag) else ReadFramesOld(FileName, Tag); FTitle := GetContent(Tag.Frame[1], Tag.Frame[15]); FArtist := GetContent(Tag.Frame[2], Tag.Frame[14]); FAlbum := GetContent(Tag.Frame[3], Tag.Frame[16]); FTrack := ExtractTrack(Tag.Frame[4]); FTrackString := GetStringUtf8(Tag.Frame[4]); FYear := ExtractYear(Tag.Frame[5], Tag.Frame[13]); FGenre := ExtractGenre(Tag.Frame[6]); FComment := ExtractText(Tag.Frame[7], true); FComposer := GetStringUtf8(Tag.Frame[8]); FEncoder := GetStringUtf8(Tag.Frame[9]); FCopyright := GetStringUtf8(Tag.Frame[10]); FLanguage := GetStringUtf8(Tag.Frame[11]); FLink := ExtractText(Tag.Frame[12], false); FTSIZ := GetStringUtf8(Tag.Frame[17]); end; end; end; { --------------------------------------------------------------------------- } function TID3v2.SaveToFile(const FileName: String): Boolean; var Tag: TagInfo; begin { Check for existing tag } FillChar(Tag, SizeOf(Tag), 0); ReadHeader(FileName, Tag); { Prepare tag data and save to file } Tag.Frame[1] := FTitle; Tag.Frame[2] := FArtist; Tag.Frame[3] := FAlbum; if FTrack > 0 then Tag.Frame[4] := IntToStr(FTrack); Tag.Frame[5] := FYear; Tag.Frame[6] := FGenre; if FComment <> '' then Tag.Frame[7] := 'eng' + #0 + FComment; Tag.Frame[8] := FComposer; Tag.Frame[9] := FEncoder; Tag.Frame[10] := FCopyright; Tag.Frame[11] := FLanguage; if FLink <> '' then Tag.Frame[12] := #0 + FLink; Result := SaveTag(FileName, Tag); end; { --------------------------------------------------------------------------- } function TID3v2.RemoveFromFile(const FileName: String): Boolean; begin { Remove tag from file } Result := RebuildFile(FileName, nil); end; { --------------------------------------------------------------------------- } end. ����������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/ID3v1.pas��������������������������������������������0000644�0001750�0000144�00000071327�15104114162�021741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TID3v1 - for manipulating with ID3v1 tags } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.2 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.1 (16 June 2004) by jtclipper } { - added support for Lyrics3 v2.00 Tags } { } { Version 1.0 (25 July 2001) } { - Reading & writing support for ID3v1.x tags } { - Tag info: title, artist, album, track, year, genre, comment } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit ID3v1; interface uses Classes, SysUtils, StrUtils, DCClassesUtf8, DCOSUtils; const MAX_MUSIC_GENRES = 148; // Max. number of music genres DEFAULT_GENRE = 255; { Index for default genre } { Used with VersionID property } TAG_VERSION_1_0 = 1; { Index for ID3v1.0 tag } TAG_VERSION_1_1 = 2; { Index for ID3v1.1 tag } var aTAG_MusicGenre: array [0..MAX_MUSIC_GENRES - 1] of string; // Genre names bTAG_PreserveDate: boolean; bTAG_ID3v2PreserveALL: boolean; bTAG_UseLYRICS3: boolean; bTAG_GenreOther: boolean; type String04 = string[4]; { String with max. 4 symbols } { Real structure of ID3v1 tag } TagRecord = record Header: array [1..3] of Char; //Tag header - must be "TAG" Title: array [1..30] of Char; // Title data Artist: array [1..30] of Char; // Artist data Album: array [1..30] of Char; // Album data Year: array [1..4] of Char; // Year data Comment: array [1..30] of Char; // Comment data Genre: Byte; // Genre data end; Lyr2Mark = record Size: array [1..6] of Char; Mark: array [1..9] of Char; end; Lyr2Field = record ID: array [1..3] of Char; Size: array [1..5] of Char; end; { Class TID3v1 } TID3v1 = class(TObject) private FExists: Boolean; FVersionID: Byte; FTitle: string; FArtist: string; FAlbum: string; FYear: String04; FComment: string; FTrack: Byte; //FTrackString: string; FGenreID: byte; //lyrics 2 FExists2: boolean; FLyrics2Size: integer; FArtist2: string; FAlbum2: string; FTitle2: string; FComment2: string; FIMG: string; function FGetLyrics2Size: integer; function FGetTagSize: integer; function ReadTag(const FileName: String; bSetFields: boolean=true): Boolean; function SaveTag(const FileName: String; bUseLYR2: boolean = true): Boolean; procedure FSetTitle(const NewTitle: string); procedure FSetArtist(const NewArtist: string); procedure FSetAlbum(const NewAlbum: string); procedure FSetYear(const NewYear: String04); procedure FSetComment(const NewComment: string); procedure FSetTrack(const NewTrack: Byte); procedure FSetGenreID(const NewGenreID: Byte); procedure FSetGenre(const NewGenre: string); function FGetTrackString: string; function FGetTitle: string; function FGetArtist: string; function FGetAlbum: string; function FGetComment: string; function FGetGenre: string; function FGetHasLyrics: boolean; public //lyrics 2 Writer: string; Lyrics: string; constructor Create; procedure ResetData; function ReadFromFile(const FileName: String): Boolean; function RemoveFromFile(const FileName: String; bLyr2Only: boolean = false): Boolean; function SaveToFile(const FileName: String ): Boolean; property Exists: Boolean read FExists; // True if tag found property ExistsLyrics2: Boolean read FExists2; // True if Lyrics 2 tag found property VersionID: Byte read FVersionID; // Version code property Track: Byte read FTrack write FSetTrack; // Track number property TrackString: string read FGetTrackString; property Title: string read FGetTitle write FSetTitle; property Artist: string read FGetArtist write FSetArtist; property Album: string read FGetAlbum write FSetAlbum; property Year: String04 read FYear write FSetYear; property Comment: string read FGetComment write FSetComment; property GenreID: Byte read FGenreID write FSetGenreID; // Genre code property Genre: string read FGetGenre write FSetGenre; // Genre name property HasLyrics: boolean read FGetHasLyrics; property Lyrics2Size: integer read FGetLyrics2Size; // full LYRICS2 tag size property TagSize: integer read FGetTagSize; // full tag size end; implementation uses DCConvertEncoding; //----------------------------------------------------------------------------------------------------------------------------------- // Private functions & procedures //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetTitle(const NewTitle: String); begin FTitle := CeUtf8ToAnsi(TrimRight(NewTitle)); if Length( FTitle ) > 30 then begin FTitle2 := FTitle; end else begin FTitle2 := ''; end; end; //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetArtist(const NewArtist: String); begin FArtist := CeUtf8ToAnsi(TrimRight(NewArtist)); if Length( FArtist ) > 30 then begin FArtist2 := FArtist; end else begin FArtist2 := ''; end; end; //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetAlbum(const NewAlbum: string); begin FAlbum := CeUtf8ToAnsi(TrimRight(NewAlbum)); if Length( FAlbum ) > 30 then begin FAlbum2 := FAlbum; end else begin FAlbum2 := ''; end; end; //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetYear(const NewYear: String04); begin FYear := TrimRight(NewYear); end; //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetComment(const NewComment: string); begin FComment := CeUtf8ToAnsi(TrimRight(NewComment)); if Length( FComment ) > 30 then begin FComment2 := FComment; end else begin FComment2 := ''; end; end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetTrack(const NewTrack: Byte); begin FTrack := NewTrack; end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetGenreID(const NewGenreID: Byte); begin FGenreID := NewGenreID; end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.FSetGenre(const NewGenre: string); var i: integer; begin FGenreID := 255; for i := 0 to MAX_MUSIC_GENRES - 1 do begin if UpperCase( aTAG_MusicGenre[ i ] ) = UpperCase( NewGenre ) then begin FGenreID := i; break; end end; if bTAG_GenreOther and ((FGenreID = 255) and (NewGenre <> '')) then FGenreID := 12; // _OTHER_GENRE_ID = 12; end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetTrackString: string; begin if FTrack = 0 then begin result := ''; end else begin result := IntToStr( FTrack ); end; end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetTitle: string; begin if FTitle2 <> '' then begin result := FTitle2; end else begin result := FTitle; end; Result:= CeAnsiToUtf8(Result); end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetArtist: string; begin if FArtist2 <> '' then begin result := FArtist2; end else begin result := FArtist; end; Result:= CeAnsiToUtf8(Result); end; //---------------------------------------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetAlbum: string; begin if FAlbum2 <> '' then begin result := FAlbum2; end else begin result := FAlbum; end; Result:= CeAnsiToUtf8(Result); end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetComment: string; begin if FComment2 <> '' then begin result := FComment2; end else begin result := FComment; end; Result:= CeAnsiToUtf8(Result); end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetGenre: string; begin Result := ''; // Return an empty string if the current GenreID is not valid if FGenreID in [0..MAX_MUSIC_GENRES - 1] then Result := aTAG_MusicGenre[ FGenreID ]; end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetLyrics2Size: integer; begin if FLyrics2Size > 0 then begin result := FLyrics2Size + 15; end else begin result := 0; end; end; function TID3v1.FGetTagSize: integer; begin result := Lyrics2Size; if FExists then result := result + 128; end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.FGetHasLyrics: boolean; begin result := ( Trim( Lyrics ) <> '' ); end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.ReadTag(const FileName: String; bSetFields: boolean=true): Boolean; var TagData: TagRecord; SourceFile: TFileStreamEx; Mark: Lyr2Mark; Field: Lyr2Field; iOffSet, iFieldSize: integer; aBuff: array of char; begin try Result := true; // Set read-access and open file SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); // Read id3v1 tag SourceFile.Seek(SourceFile.Size - 128, soFromBeginning); SourceFile.Read(TagData, 128); if TagData.Header = 'TAG' then begin FExists := true; if bSetFields then begin // set version if ((TagData.Comment[29] = #0) and (TagData.Comment[30] <> #0)) or ((TagData.Comment[29] = #32) and (TagData.Comment[30] <> #32)) then begin // Terms for ID3v1.1 FVersionID := TAG_VERSION_1_1; end else begin FVersionID := TAG_VERSION_1_0; end; FTitle := TrimRight( TagData.Title ); FArtist := TrimRight( TagData.Artist ); FAlbum := TrimRight( TagData.Album ); FYear := TrimRight( TagData.Year ); if FVersionID = TAG_VERSION_1_0 then begin FComment := TrimRight( TagData.Comment ) end else begin FComment := TrimRight( Copy( TagData.Comment, 1, 28 ) ); FTrack := Ord( TagData.Comment[30] ); end; FGenreID := TagData.Genre; end; end; // try to read LYRICS2 tag iOffSet := 15; if FExists then iOffSet := iOffSet + 128; SourceFile.Seek(SourceFile.Size - iOffSet, soFromBeginning); SourceFile.Read(Mark, 15); if Mark.Mark = 'LYRICS200' then begin FLyrics2Size := StrToIntDef( Mark.Size, 0 ); if FLyrics2Size > 0 then begin SourceFile.Seek(SourceFile.Size - (FLyrics2Size + iOffSet), soFromBeginning); SetLength( aBuff, 11 ); // LYRICSBEGIN SourceFile.Read(aBuff[0], 11); if String( aBuff ) = 'LYRICSBEGIN' then begin // is it ok ? FExists2 := true; if bSetFields then begin while true do begin // read all fields SourceFile.Read(Field, SizeOf(Field)); iFieldSize := StrToIntDef( Field.Size, -1 ); if iFieldSize < 0 then break; SetLength( aBuff, iFieldSize ); SourceFile.Read(aBuff[0], iFieldSize); if Field.ID = 'IND' then begin end else if Field.ID = 'LYR' then begin Lyrics := Trim( String( aBuff ) ); Lyrics := StringReplace( Lyrics, #13, #13#10, [rfReplaceAll] ); Lyrics := StringReplace( Lyrics, #13#10#10, #13#10, [rfReplaceAll] ); end else if Field.ID = 'INF' then begin FComment2 := Trim( String( aBuff ) ); end else if Field.ID = 'AUT' then begin Writer := Trim( String( aBuff ) ); end else if Field.ID = 'EAL' then begin FAlbum2 := Trim( String( aBuff ) ); end else if Field.ID = 'EAR' then begin FArtist2 := Trim( String( aBuff ) ); end else if Field.ID = 'ETT' then begin FTitle2 := Trim( String( aBuff ) ); end else if Field.ID = 'IMG' then begin FIMG := String( aBuff ); end else begin break; end; end; //while end; end else begin FExists2 := false; FLyrics2Size := 0; end; end; end; // end SetLength( aBuff, 0 ); SourceFile.Free; except Result := false; // Error end; end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.SaveTag(const FileName: String; bUseLYR2: boolean = true): Boolean; var Tag: TagRecord; iFileAge: integer; SourceFile: TFileStreamEx; iFilePos: integer; sTmp: string; sTmp30: string[30]; procedure WriteField( sID, sValue: string ); var iLen: integer; begin if Trim( sValue ) <> '' then begin iLen := Length( sValue ); sTmp := sID + DupeString( '0', 5 - Length( IntToStr( iLen ) ) ) + IntToStr( iLen ) + sValue; SourceFile.Write(sTmp[1], Length(sTmp)); end; end; begin result := true; iFileAge := 0; try if bTAG_PreserveDate then iFileAge := mbFileAge(FileName); // Allow write-access and open file mbFileSetReadOnly(FileName, False); SourceFile := TFileStreamEx.Create(FileName, fmOpenReadWrite or fmShareDenyWrite); // Write lyrics2 if bUseLYR2 and ( bTAG_UseLYRICS3 or ( (Lyrics <> '') or (Writer <> '') or ( FIMG <> '' ) ) ) then begin if (Lyrics <> '') or (Writer <> '') or (FArtist2 <> '') or (FAlbum2 <> '' ) or (FComment2 <> '') or (FTitle2 <> '') then begin SourceFile.Seek(SourceFile.Size, soFromBeginning); iFilePos := SourceFile.Position; SourceFile.Write('LYRICSBEGIN', 11); if Lyrics <> '' then begin SourceFile.Write('IND0000210', 10); end else begin SourceFile.Write('IND0000200', 10); end; WriteField( 'EAL', FAlbum2 ); WriteField( 'EAR', FArtist2 ); WriteField( 'ETT', FTitle2 ); WriteField( 'INF', FComment2 ); WriteField( 'AUT', Writer ); WriteField( 'LYR', Lyrics ); WriteField( 'IMG', FIMG ); iFilepos := SourceFile.Position - iFilePos; sTmp := DupeString( '0', 6 - Length( IntToStr( iFilepos ) ) ) + IntToStr( iFilepos ) + 'LYRICS200'; SourceFile.Write(sTmp[1], Length(sTmp)); FExists2 := true; end; end; // Write id3v1 SourceFile.Seek(SourceFile.Size, soFromBeginning); FillChar( Tag, SizeOf( Tag ), 0); Tag.Header := 'TAG'; sTmp30 := TrimRight( Title ); Move( sTmp30[1], Tag.Title , Length( sTmp30 ) ); sTmp30 := TrimRight( Artist ); Move( sTmp30[1], Tag.Artist , Length( sTmp30 ) ); sTmp30 := TrimRight( Album ); Move( sTmp30[1], Tag.Album , Length( sTmp30 ) ); Move( Year[1], Tag.Year , Length( Year ) ); sTmp30 := TrimRight( Comment ); Move( sTmp30[1], Tag.Comment, Length( sTmp30 ) ); if FTrack > 0 then begin Tag.Comment[29] := #0; Tag.Comment[30] := Chr( FTrack ); end; Tag.Genre := FGenreID; SourceFile.Write(Tag, SizeOf(Tag)); SourceFile.Free; if bTAG_PreserveDate then mbFileSetTime(FileName, iFileAge); except result := false; // Error end; end; //----------------------------------------------------------------------------------------------------------------------------------- procedure TID3v1.ResetData; begin FExists := false; FVersionID := TAG_VERSION_1_0; FTitle := ''; FArtist := ''; FAlbum := ''; FYear := ''; FComment := ''; FTrack := 0; FGenreID := DEFAULT_GENRE; // lyrics 2 FExists2 := false; FLyrics2Size := 0; Lyrics := ''; Writer := ''; FArtist2 := ''; FAlbum2 := ''; FTitle2 := ''; FComment2 := ''; FIMG := ''; end; //----------------------------------------------------------------------------------------------------------------------------------- // Public functions & procedures //----------------------------------------------------------------------------------------------------------------------------------- constructor TID3v1.Create; begin inherited; ResetData; end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.ReadFromFile(const FileName: String): Boolean; begin // Reset and load tag data from file to variable ResetData; Result := ReadTag(FileName); end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.SaveToFile(const FileName: String): Boolean; begin // Delete old tag and write new tag result := (RemoveFromFile(FileName)) and (SaveTag(FileName)); if (result) and ( not FExists ) then FExists := true; // NOTE end; //----------------------------------------------------------------------------------------------------------------------------------- function TID3v1.RemoveFromFile(const FileName: String; bLyr2Only: boolean = false): Boolean; var iFileAge: integer; SourceFile: TFileStreamEx; begin result := true; try ReadTag(FileName, false); if FExists or FExists2 then begin iFileAge := 0; if bTAG_PreserveDate then iFileAge := mbFileAge(FileName); Result := true; // Allow write-access and open file mbFileSetReadOnly(FileName, False); SourceFile := TFileStreamEx.Create(FileName, fmOpenReadWrite or fmShareDenyWrite); // Delete id3v1 if FExists then begin SourceFile.Seek(SourceFile.Size - 128, soFromBeginning); //truncate SourceFile.Size := SourceFile.Position; FExists := false; end; // Delete lyrics2 if FExists2 then begin SourceFile.Seek(SourceFile.Size - Lyrics2Size, soFromBeginning); //truncate SourceFile.Size := SourceFile.Position; FExists2 := false; end; if bLyr2Only then begin if SaveTag(FileName, false) then begin FExists := true; end; end; SourceFile.Free; if bTAG_PreserveDate then mbFileSetTime(FileName, iFileAge); end; except result := false; // Error end; end; { ************************** Initialize music genres ************************ } initialization begin //-- Initialize music genres { Standard genres } aTAG_MusicGenre[0] := 'Blues'; aTAG_MusicGenre[1] := 'Classic Rock'; aTAG_MusicGenre[2] := 'Country'; aTAG_MusicGenre[3] := 'Dance'; aTAG_MusicGenre[4] := 'Disco'; aTAG_MusicGenre[5] := 'Funk'; aTAG_MusicGenre[6] := 'Grunge'; aTAG_MusicGenre[7] := 'Hip-Hop'; aTAG_MusicGenre[8] := 'Jazz'; aTAG_MusicGenre[9] := 'Metal'; aTAG_MusicGenre[10] := 'New Age'; aTAG_MusicGenre[11] := 'Oldies'; aTAG_MusicGenre[12] := 'Other'; aTAG_MusicGenre[13] := 'Pop'; aTAG_MusicGenre[14] := 'R&B'; aTAG_MusicGenre[15] := 'Rap'; aTAG_MusicGenre[16] := 'Reggae'; aTAG_MusicGenre[17] := 'Rock'; aTAG_MusicGenre[18] := 'Techno'; aTAG_MusicGenre[19] := 'Industrial'; aTAG_MusicGenre[20] := 'Alternative'; aTAG_MusicGenre[21] := 'Ska'; aTAG_MusicGenre[22] := 'Death Metal'; aTAG_MusicGenre[23] := 'Pranks'; aTAG_MusicGenre[24] := 'Soundtrack'; aTAG_MusicGenre[25] := 'Euro-Techno'; aTAG_MusicGenre[26] := 'Ambient'; aTAG_MusicGenre[27] := 'Trip-Hop'; aTAG_MusicGenre[28] := 'Vocal'; aTAG_MusicGenre[29] := 'Jazz+Funk'; aTAG_MusicGenre[30] := 'Fusion'; aTAG_MusicGenre[31] := 'Trance'; aTAG_MusicGenre[32] := 'Classical'; aTAG_MusicGenre[33] := 'Instrumental'; aTAG_MusicGenre[34] := 'Acid'; aTAG_MusicGenre[35] := 'House'; aTAG_MusicGenre[36] := 'Game'; aTAG_MusicGenre[37] := 'Sound Clip'; aTAG_MusicGenre[38] := 'Gospel'; aTAG_MusicGenre[39] := 'Noise'; aTAG_MusicGenre[40] := 'AlternRock'; aTAG_MusicGenre[41] := 'Bass'; aTAG_MusicGenre[42] := 'Soul'; aTAG_MusicGenre[43] := 'Punk'; aTAG_MusicGenre[44] := 'Space'; aTAG_MusicGenre[45] := 'Meditative'; aTAG_MusicGenre[46] := 'Instrumental Pop'; aTAG_MusicGenre[47] := 'Instrumental Rock'; aTAG_MusicGenre[48] := 'Ethnic'; aTAG_MusicGenre[49] := 'Gothic'; aTAG_MusicGenre[50] := 'Darkwave'; aTAG_MusicGenre[51] := 'Techno-Industrial'; aTAG_MusicGenre[52] := 'Electronic'; aTAG_MusicGenre[53] := 'Pop-Folk'; aTAG_MusicGenre[54] := 'Eurodance'; aTAG_MusicGenre[55] := 'Dream'; aTAG_MusicGenre[56] := 'Southern Rock'; aTAG_MusicGenre[57] := 'Comedy'; aTAG_MusicGenre[58] := 'Cult'; aTAG_MusicGenre[59] := 'Gangsta'; aTAG_MusicGenre[60] := 'Top 40'; aTAG_MusicGenre[61] := 'Christian Rap'; aTAG_MusicGenre[62] := 'Pop/Funk'; aTAG_MusicGenre[63] := 'Jungle'; aTAG_MusicGenre[64] := 'Native American'; aTAG_MusicGenre[65] := 'Cabaret'; aTAG_MusicGenre[66] := 'New Wave'; aTAG_MusicGenre[67] := 'Psychadelic'; aTAG_MusicGenre[68] := 'Rave'; aTAG_MusicGenre[69] := 'Showtunes'; aTAG_MusicGenre[70] := 'Trailer'; aTAG_MusicGenre[71] := 'Lo-Fi'; aTAG_MusicGenre[72] := 'Tribal'; aTAG_MusicGenre[73] := 'Acid Punk'; aTAG_MusicGenre[74] := 'Acid Jazz'; aTAG_MusicGenre[75] := 'Polka'; aTAG_MusicGenre[76] := 'Retro'; aTAG_MusicGenre[77] := 'Musical'; aTAG_MusicGenre[78] := 'Rock & Roll'; aTAG_MusicGenre[79] := 'Hard Rock'; { Extended genres } aTAG_MusicGenre[80] := 'Folk'; aTAG_MusicGenre[81] := 'Folk-Rock'; aTAG_MusicGenre[82] := 'National Folk'; aTAG_MusicGenre[83] := 'Swing'; aTAG_MusicGenre[84] := 'Fast Fusion'; aTAG_MusicGenre[85] := 'Bebob'; aTAG_MusicGenre[86] := 'Latin'; aTAG_MusicGenre[87] := 'Revival'; aTAG_MusicGenre[88] := 'Celtic'; aTAG_MusicGenre[89] := 'Bluegrass'; aTAG_MusicGenre[90] := 'Avantgarde'; aTAG_MusicGenre[91] := 'Gothic Rock'; aTAG_MusicGenre[92] := 'Progressive Rock'; aTAG_MusicGenre[93] := 'Psychedelic Rock'; aTAG_MusicGenre[94] := 'Symphonic Rock'; aTAG_MusicGenre[95] := 'Slow Rock'; aTAG_MusicGenre[96] := 'Big Band'; aTAG_MusicGenre[97] := 'Chorus'; aTAG_MusicGenre[98] := 'Easy Listening'; aTAG_MusicGenre[99] := 'Acoustic'; aTAG_MusicGenre[100]:= 'Humour'; aTAG_MusicGenre[101]:= 'Speech'; aTAG_MusicGenre[102]:= 'Chanson'; aTAG_MusicGenre[103]:= 'Opera'; aTAG_MusicGenre[104]:= 'Chamber Music'; aTAG_MusicGenre[105]:= 'Sonata'; aTAG_MusicGenre[106]:= 'Symphony'; aTAG_MusicGenre[107]:= 'Booty Bass'; aTAG_MusicGenre[108]:= 'Primus'; aTAG_MusicGenre[109]:= 'Porn Groove'; aTAG_MusicGenre[110]:= 'Satire'; aTAG_MusicGenre[111]:= 'Slow Jam'; aTAG_MusicGenre[112]:= 'Club'; aTAG_MusicGenre[113]:= 'Tango'; aTAG_MusicGenre[114]:= 'Samba'; aTAG_MusicGenre[115]:= 'Folklore'; aTAG_MusicGenre[116]:= 'Ballad'; aTAG_MusicGenre[117]:= 'Power Ballad'; aTAG_MusicGenre[118]:= 'Rhythmic Soul'; aTAG_MusicGenre[119]:= 'Freestyle'; aTAG_MusicGenre[120]:= 'Duet'; aTAG_MusicGenre[121]:= 'Punk Rock'; aTAG_MusicGenre[122]:= 'Drum Solo'; aTAG_MusicGenre[123]:= 'A capella'; aTAG_MusicGenre[124]:= 'Euro-House'; aTAG_MusicGenre[125]:= 'Dance Hall'; aTAG_MusicGenre[126]:= 'Goa'; aTAG_MusicGenre[127]:= 'Drum & Bass'; aTAG_MusicGenre[128]:= 'Club-House'; aTAG_MusicGenre[129]:= 'Hardcore'; aTAG_MusicGenre[130]:= 'Terror'; aTAG_MusicGenre[131]:= 'Indie'; aTAG_MusicGenre[132]:= 'BritPop'; aTAG_MusicGenre[133]:= 'Negerpunk'; aTAG_MusicGenre[134]:= 'Polsk Punk'; aTAG_MusicGenre[135]:= 'Beat'; aTAG_MusicGenre[136]:= 'Christian Gangsta Rap'; aTAG_MusicGenre[137]:= 'Heavy Metal'; aTAG_MusicGenre[138]:= 'Black Metal'; aTAG_MusicGenre[139]:= 'Crossover'; aTAG_MusicGenre[140]:= 'Contemporary Christian'; aTAG_MusicGenre[141]:= 'Christian Rock'; aTAG_MusicGenre[142]:= 'Merengue'; aTAG_MusicGenre[143]:= 'Salsa'; aTAG_MusicGenre[144]:= 'Thrash Metal'; aTAG_MusicGenre[145]:= 'Anime'; aTAG_MusicGenre[146]:= 'JPop'; aTAG_MusicGenre[147]:= 'Synthpop'; //--- bTAG_PreserveDate := false; bTAG_ID3v2PreserveALL := false; bTAG_UseLYRICS3 := false; bTAG_GenreOther := false; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/FLACfile.pas�����������������������������������������0000644�0001750�0000144�00000071733�15104114162�022461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TFLACfile - for manipulating with FLAC file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.4 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.3 (13 August 2004) by jtclipper } { - unit rewritten, VorbisComment is obsolete now } { } { Version 1.2 (23 June 2004) by sundance } { - Check for ID3 tags (although not supported) } { - Don't parse for other FLAC metablocks if FLAC header is missing } { } { Version 1.1 (6 July 2003) by Erik } { - Class: Vorbis comments (native comment to FLAC files) added } { } { Version 1.0 (13 August 2002) } { - Info: channels, sample rate, bits/sample, file size, duration, ratio } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit FLACfile; interface uses Classes, SysUtils, StrUtils, ID3v2, DCClassesUtf8, DCBasicTypes, DCOSUtils; const META_STREAMINFO = 0; META_PADDING = 1; META_APPLICATION = 2; META_SEEKTABLE = 3; META_VORBIS_COMMENT = 4; META_CUESHEET = 5; META_PICTURE = 6; type TFlacHeader = record StreamMarker: array[1..4] of Char; //should always be 'fLaC' MetaDataBlockHeader: array[1..4] of Byte; Info: array[1..18] of Byte; MD5Sum: array[1..16] of Byte; end; TMetaData = record MetaDataBlockHeader: array[1..4] of Byte; Data: TMemoryStream; end; { TFLACfile } TFLACfile = class(TObject) private FHeader: TFlacHeader; FFileName: String; FPaddingIndex: integer; FPaddingLast: boolean; FPaddingFragments: boolean; FVorbisIndex: integer; FPadding: integer; FVCOffset: integer; FAudioOffset: integer; FChannels: byte; FSampleRate: integer; FBitsPerSample: byte; FBitrate: integer; FFileLength: integer; FSamples: Int64; aMetaBlockOther: array of TMetaData; // tag data FVendor: string; FTagSize: integer; FExists: boolean; FID3v2: TID3v2; function FGetHasLyrics: boolean; procedure FResetData( const bHeaderInfo, bTagFields :boolean ); function FIsValid: Boolean; function FGetDuration: Double; function FGetTrack: Word; function FGetRatio: Double; function FGetChannelMode: string; function GetInfo( sFile: String; bSetTags: boolean ): boolean; procedure AddMetaDataOther( aMetaHeader: array of Byte; stream: TFileStreamEx; const iBlocklength,iIndex: integer ); procedure ReadTag( Source: TFileStreamEx; bSetTagFields: boolean ); function RebuildFile( const sFile: String; VorbisBlock: TStringStream ): Boolean; public TrackString: string; Title: string; Artist: string; Album: string; Year: string; Genre: string; Comment: string; //extra xTones: string; xStyles: string; xMood: string; xSituation: string; xRating: string; xQuality: string; xTempo: string; xType: string; // Composer: string; Language: string; Copyright: string; Link: string; Encoder: string; Lyrics: string; Performer: string; License: string; Organization: string; Description: string; Location: string; Contact: string; ISRC: string; aExtraFields: array of array of string; constructor Create; destructor Destroy; override; function ReadFromFile( const sFile: String ): boolean; function SaveToFile( const sFile: String; const bBasicOnly: boolean = false ): boolean; function RemoveFromFile( const sFile: String ):boolean; procedure AddExtraField(const sID, sValue: string); property Channels: Byte read FChannels; // Number of channels property SampleRate: Integer read FSampleRate; // Sample rate (hz) property BitsPerSample: Byte read FBitsPerSample; // Bits per sample property FileLength: integer read FFileLength; // File length (bytes) property Samples: Int64 read FSamples; // Number of samples property Valid: Boolean read FIsValid; // True if header valid property Duration: Double read FGetDuration; // Duration (seconds) property Ratio: Double read FGetRatio; // Compression ratio (%) property Track: Word read FGetTrack; // Track number property Bitrate: integer read FBitrate; property ChannelMode: string read FGetChannelMode; property Exists: boolean read FExists; property Vendor: string read FVendor; property FileName: String read FFileName; property AudioOffset: integer read FAudioOffset; //offset of audio data property HasLyrics: boolean read FGetHasLyrics; end; var bTAG_PreserveDate: boolean; implementation (* -------------------------------------------------------------------------- *) procedure TFLACfile.FResetData( const bHeaderInfo, bTagFields :boolean ); var i: integer; begin if bHeaderInfo then begin FFileName := ''; FPadding := 0; FPaddingLast := false; FPaddingFragments := false; FChannels := 0; FSampleRate := 0; FBitsPerSample := 0; FFileLength := 0; FSamples := 0; FVorbisIndex := 0; FPaddingIndex := 0; FVCOffset := 0; FAudioOffset := 0; for i := 0 to Length( aMetaBlockOther ) - 1 do aMetaBlockOther[ i ].Data.Free; SetLength( aMetaBlockOther, 0 ); end; //tag data if bTagFields then begin FVendor := ''; FTagSize := 0; FExists := false; Title := ''; Artist := ''; Album := ''; TrackString := ''; Year := ''; Genre := ''; Comment := ''; //extra xTones := ''; xStyles := ''; xMood := ''; xSituation := ''; xRating := ''; xQuality := ''; xTempo := ''; xType := ''; // Composer := ''; Language := ''; Copyright := ''; Link := ''; Encoder := ''; Lyrics := ''; Performer := ''; License := ''; Organization := ''; Description := ''; Location := ''; Contact := ''; ISRC := ''; SetLength( aExtraFields, 0 ); end; end; (* -------------------------------------------------------------------------- *) // Check for right FLAC file data function TFLACfile.FIsValid: Boolean; begin result := (FHeader.StreamMarker = 'fLaC') and (FChannels > 0) and (FSampleRate > 0) and (FBitsPerSample > 0) and (FSamples > 0); end; (* -------------------------------------------------------------------------- *) function TFLACfile.FGetDuration: Double; begin if (FIsValid) and (FSampleRate > 0) then begin result := FSamples / FSampleRate end else begin result := 0; end; end; (* -------------------------------------------------------------------------- *) function TFLACfile.FGetTrack: Word; var Index, Value, Code: Integer; begin { Extract track from string } Index := Pos('/', TrackString); if Index = 0 then Val(TrackString, Value, Code) else Val(Copy(TrackString, 1, Index - 1), Value, Code); if Code = 0 then Result := Value else Result := 0; end; (* -------------------------------------------------------------------------- *) // Get compression ratio function TFLACfile.FGetRatio: Double; begin if FIsValid then begin result := FFileLength / (FSamples * FChannels * FBitsPerSample / 8) * 100 end else begin result := 0; end; end; (* -------------------------------------------------------------------------- *) // Get channel mode function TFLACfile.FGetChannelMode: string; begin if FIsValid then begin case FChannels of 1 : result := 'Mono'; 2 : result := 'Stereo'; else result := 'Multi Channel'; end; end else begin result := ''; end; end; (* -------------------------------------------------------------------------- *) function TFLACfile.FGetHasLyrics: boolean; begin result := ( Trim( Lyrics ) <> '' ); end; (* -------------------------------------------------------------------------- *) constructor TFLACfile.Create; begin inherited; FID3v2 := TID3v2.Create; FResetData( true, true ); end; destructor TFLACfile.Destroy; begin FResetData( true, true ); FID3v2.Free; inherited; end; (* -------------------------------------------------------------------------- *) function TFLACfile.ReadFromFile( const sFile: String ): boolean; begin FResetData( false, true ); result := GetInfo( sFile, true ); end; (* -------------------------------------------------------------------------- *) function TFLACfile.GetInfo( sFile: String; bSetTags: boolean ): boolean; var SourceFile: TFileStreamEx; aMetaDataBlockHeader: array[1..4] of byte; iBlockLength, iMetaType, iIndex: integer; bPaddingFound: boolean; begin result := true; bPaddingFound := false; FResetData( true, false ); try { Read data from ID3 tags } FID3v2.ReadFromFile(sFile); // Set read-access and open file SourceFile := TFileStreamEx.Create(sFile, fmOpenRead or fmShareDenyWrite); FFileLength := SourceFile.Size; FFileName := sFile; { Seek past the ID3v2 tag, if there is one } if FID3v2.Exists then begin SourceFile.Seek(FID3v2.Size, soFromBeginning) end; // Read header data FillChar( FHeader, SizeOf(FHeader), 0 ); SourceFile.Read( FHeader, SizeOf(FHeader) ); // Process data if loaded and header valid if FHeader.StreamMarker = 'fLaC' then begin with FHeader do begin FChannels := ( Info[13] shr 1 and $7 + 1 ); FSampleRate := ( Info[11] shl 12 or Info[12] shl 4 or Info[13] shr 4 ); FBitsPerSample := ( Info[13] and 1 shl 4 or Info[14] shr 4 + 1 ); FSamples := ( Info[15] shl 24 or Info[16] shl 16 or Info[17] shl 8 or Info[18] ); end; if (FHeader.MetaDataBlockHeader[1] and $80) <> 0 then exit; //no metadata blocks exist iIndex := 0; repeat // read more metadata blocks if available SourceFile.Read( aMetaDataBlockHeader, 4 ); iIndex := iIndex + 1; // metadatablock index iBlockLength := (aMetaDataBlockHeader[2] shl 16 or aMetaDataBlockHeader[3] shl 8 or aMetaDataBlockHeader[4]); //decode length if iBlockLength <= 0 then exit; // can it be 0 ? iMetaType := (aMetaDataBlockHeader[1] and $7F); // decode metablock type if iMetaType = META_VORBIS_COMMENT then begin // read vorbis block FVCOffset := SourceFile.Position; FTagSize := iBlockLength; FVorbisIndex := iIndex; ReadTag(SourceFile, bSetTags); // set up fields end else if (iMetaType = META_PADDING) and not bPaddingFound then begin // we have padding block FPadding := iBlockLength; // if we find more skip & put them in metablock array FPaddingLast := ((aMetaDataBlockHeader[1] and $80) <> 0); FPaddingIndex := iIndex; bPaddingFound := true; SourceFile.Seek(FPadding, soCurrent); // advance into file till next block or audio data start end else begin // all other if iMetaType <= META_PICTURE then begin // is it a valid metablock ? if (iMetaType = META_PADDING) then begin // set flag for fragmented padding blocks FPaddingFragments := true; end; AddMetaDataOther(aMetaDataBlockHeader, SourceFile, iBlocklength, iIndex); end else begin FSamples := 0; // ops... Exit; end; end; until ((aMetaDataBlockHeader[1] and $80) <> 0); // until is last flag ( first bit = 1 ) end; finally if FIsValid then begin FAudioOffset := SourceFile.Position; // we need that to rebuild the file if nedeed FBitrate := Round( ( ( FFileLength - FAudioOffset ) / 1000 ) * 8 / FGetDuration ); //time to calculate average bitrate end else begin result := false; end; FreeAndNil(SourceFile); end; end; (* -------------------------------------------------------------------------- *) procedure TFLACfile.AddMetaDataOther( aMetaHeader: array of Byte; stream: TFileStreamEx; const iBlocklength,iIndex: integer ); var iMetaLen: integer; begin // enlarge array iMetaLen := Length( aMetaBlockOther ) + 1; SetLength( aMetaBlockOther, iMetaLen ); // save header aMetaBlockOther[ iMetaLen - 1 ].MetaDataBlockHeader[1] := aMetaHeader[0]; aMetaBlockOther[ iMetaLen - 1 ].MetaDataBlockHeader[2] := aMetaHeader[1]; aMetaBlockOther[ iMetaLen - 1 ].MetaDataBlockHeader[3] := aMetaHeader[2]; aMetaBlockOther[ iMetaLen - 1 ].MetaDataBlockHeader[4] := aMetaHeader[3]; // save content in a stream aMetaBlockOther[ iMetaLen - 1 ].Data := TMemoryStream.Create; aMetaBlockOther[ iMetaLen - 1 ].Data.Position := 0; aMetaBlockOther[ iMetaLen - 1 ].Data.CopyFrom( stream, iBlocklength ); end; (* -------------------------------------------------------------------------- *) procedure TFLACfile.ReadTag( Source: TFileStreamEx; bSetTagFields: boolean ); var i, iCount, iSize, iSepPos: Integer; Data, sFieldID, sFieldData: String; begin Source.Read( iSize, SizeOf( iSize ) ); // vendor SetLength( Data, iSize ); Source.Read( Data[ 1 ], iSize ); FVendor := String( Data ); Source.Read( iCount, SizeOf( iCount ) ); //fieldcount FExists := ( iCount > 0 ); for i := 0 to iCount - 1 do begin Source.Read( iSize, SizeOf( iSize ) ); SetLength( Data , iSize ); Source.Read( Data[ 1 ], iSize ); if not bSetTagFields then Continue; // if we don't want to re asign fields we skip iSepPos := Pos( '=', String( Data ) ); if iSepPos > 0 then begin sFieldID := UpperCase( Copy( String( Data ), 1, iSepPos - 1) ); sFieldData := Copy( String( Data ), iSepPos + 1, MaxInt ); if (sFieldID = 'TRACKNUMBER') and (TrackString = '') then begin TrackString := sFieldData; end else if (sFieldID = 'ARTIST') and (Artist = '') then begin Artist := sFieldData; end else if (sFieldID = 'ALBUM') and (Album = '') then begin Album := sFieldData; end else if (sFieldID = 'TITLE') and (Title = '') then begin Title := sFieldData; end else if (sFieldID = 'DATE') and (Year = '') then begin Year := sFieldData; end else if (sFieldID = 'GENRE') and (Genre = '') then begin Genre := sFieldData; end else if (sFieldID = 'COMMENT') and (Comment = '') then begin Comment := sFieldData; end else if (sFieldID = 'COMPOSER') and (Composer = '') then begin Composer := sFieldData; end else if (sFieldID = 'LANGUAGE') and (Language = '') then begin Language := sFieldData; end else if (sFieldID = 'COPYRIGHT') and (Copyright = '') then begin Copyright := sFieldData; end else if (sFieldID = 'URL') and (Link = '') then begin Link := sFieldData; end else if (sFieldID = 'ENCODER') and (Encoder = '') then begin Encoder := sFieldData; end else if (sFieldID = 'TONES') and (xTones = '') then begin xTones := sFieldData; end else if (sFieldID = 'STYLES') and (xStyles = '') then begin xStyles := sFieldData; end else if (sFieldID = 'MOOD') and (xMood = '') then begin xMood := sFieldData; end else if (sFieldID = 'SITUATION') and (xSituation = '') then begin xSituation := sFieldData; end else if (sFieldID = 'RATING') and (xRating = '') then begin xRating := sFieldData; end else if (sFieldID = 'QUALITY') and (xQuality = '') then begin xQuality := sFieldData; end else if (sFieldID = 'TEMPO') and (xTempo = '') then begin xTempo := sFieldData; end else if (sFieldID = 'TYPE') and (xType = '') then begin xType := sFieldData; end else if (sFieldID = 'LYRICS') and (Lyrics = '') then begin Lyrics := sFieldData; end else if (sFieldID = 'PERFORMER') and (Performer = '') then begin Performer := sFieldData; end else if (sFieldID = 'LICENSE') and (License = '') then begin License := sFieldData; end else if (sFieldID = 'ORGANIZATION') and (Organization = '') then begin Organization := sFieldData; end else if (sFieldID = 'DESCRIPTION') and (Description = '') then begin Description := sFieldData; end else if (sFieldID = 'LOCATION') and (Location = '') then begin Location := sFieldData; end else if (sFieldID = 'CONTACT') and (Contact = '') then begin Contact := sFieldData; end else if (sFieldID = 'ISRC') and (ISRC = '') then begin ISRC := sFieldData; end else begin // more fields AddExtraField( sFieldID, sFieldData ); end; end; end; end; (* -------------------------------------------------------------------------- *) procedure TFLACfile.AddExtraField(const sID, sValue: string); var iExtraLen: integer; begin iExtraLen := Length( aExtraFields ) + 1; SetLength( aExtraFields, iExtraLen ); SetLength( aExtraFields[ iExtraLen - 1 ], 2 ); aExtraFields[ iExtraLen - 1, 0 ] := sID; aExtraFields[ iExtraLen - 1, 1 ] := sValue; end; (* -------------------------------------------------------------------------- *) function TFLACfile.SaveToFile( const sFile: String; const bBasicOnly: boolean = false ): boolean; var i, iFieldCount, iSize: Integer; VorbisBlock, Tag: TStringStream; procedure _WriteTagBuff( sID, sData: string ); var sTmp: string; iTmp: integer; begin if sData <> '' then begin sTmp := sID + '=' + sData; iTmp := Length( sTmp ); Tag.Write( iTmp, SizeOf( iTmp ) ); Tag.WriteString( sTmp ); iFieldCount := iFieldCount + 1; end; end; begin try result := false; Tag := TStringStream.Create(''); VorbisBlock := TStringStream.Create(''); if not GetInfo( sFile, false ) then exit; //reload all except tag fields iFieldCount := 0; _WriteTagBuff( 'TRACKNUMBER', TrackString ); _WriteTagBuff( 'ARTIST', Artist ); _WriteTagBuff( 'ALBUM', Album ); _WriteTagBuff( 'TITLE', Title ); _WriteTagBuff( 'DATE', Year ); _WriteTagBuff( 'GENRE', Genre ); _WriteTagBuff( 'COMMENT', Comment ); _WriteTagBuff( 'COMPOSER', Composer ); _WriteTagBuff( 'LANGUAGE', Language ); _WriteTagBuff( 'COPYRIGHT', Copyright ); _WriteTagBuff( 'URL', Link ); _WriteTagBuff( 'ENCODER', Encoder ); _WriteTagBuff( 'TONES', xTones ); _WriteTagBuff( 'STYLES', xStyles ); _WriteTagBuff( 'MOOD', xMood ); _WriteTagBuff( 'SITUATION', xSituation ); _WriteTagBuff( 'RATING', xRating ); _WriteTagBuff( 'QUALITY', xQuality ); _WriteTagBuff( 'TEMPO', xTempo ); _WriteTagBuff( 'TYPE', xType ); if not bBasicOnly then begin _WriteTagBuff( 'PERFORMER', Performer ); _WriteTagBuff( 'LICENSE', License ); _WriteTagBuff( 'ORGANIZATION', Organization ); _WriteTagBuff( 'DESCRIPTION', Description ); _WriteTagBuff( 'LOCATION', Location ); _WriteTagBuff( 'CONTACT', Contact ); _WriteTagBuff( 'ISRC', ISRC ); _WriteTagBuff( 'LYRICS', Lyrics ); for i := 0 to Length( aExtraFields ) - 1 do begin if Trim( aExtraFields[ i, 0 ] ) <> '' then _WriteTagBuff( aExtraFields[ i, 0 ], aExtraFields[ i, 1 ] ); end; end; // Write vendor info and number of fields with VorbisBlock do begin if FVendor = '' then FVendor := 'reference libFLAC 1.1.0 20030126'; // guess it iSize := Length( FVendor ); Write( iSize, SizeOf( iSize ) ); WriteString( FVendor ); Write( iFieldCount, SizeOf( iFieldCount ) ); end; VorbisBlock.CopyFrom( Tag, 0 ); // All tag data is here now VorbisBlock.Position := 0; result := RebuildFile( sFile, VorbisBlock ); FExists := result and (Tag.Size > 0 ); finally FreeAndNil( Tag ); FreeAndNil( VorbisBlock ); end; end; (* -------------------------------------------------------------------------- *) function TFLACfile.RemoveFromFile( const sFile: String ):boolean; begin FResetData( false, true ); result := SaveToFile( sFile ); if FExists then FExists := not result; end; (* -------------------------------------------------------------------------- *) // saves metablocks back to the file // always tries to rebuild header so padding exists after comment block and no more than 1 padding block exists function TFLACfile.RebuildFile( const sFile: String; VorbisBlock: TStringStream ): Boolean; var iFileAge: TFileTime; Source, Destination: TFileStreamEx; i, iNewPadding, iMetaCount, iExtraPadding: Integer; BufferName, sTmp: string; MetaDataBlockHeader: array[1..4] of Byte; oldHeader: TFlacHeader; MetaBlocks: TMemoryStream; bRebuild, bRearange: boolean; begin result := false; bRearange := false; iExtraPadding := 0; if (not mbFileExists(FileName)) or (not mbFileSetReadOnly(FileName, False)) then exit; try iFileAge := 0; if bTAG_PreserveDate then iFileAge := mbFileAge( FileName ); // re arrange other metadata in case of // 1. padding block is not aligned after vorbis comment // 2. insufficient padding - rearange upon file rebuild // 3. fragmented padding blocks iMetaCount := Length( aMetaBlockOther ); if (FPaddingIndex <> FVorbisIndex + 1) or (FPadding <= VorbisBlock.Size - FTagSize ) or FPaddingFragments then begin MetaBlocks := TMemoryStream.Create; for i := 0 to iMetaCount - 1 do begin aMetaBlockOther[ i ].MetaDataBlockHeader[ 1 ] := ( aMetaBlockOther[ i ].MetaDataBlockHeader[ 1 ] and $7f ); // not last if aMetaBlockOther[ i ].MetaDataBlockHeader[ 1 ] = META_PADDING then begin iExtraPadding := iExtraPadding + aMetaBlockOther[ i ].Data.Size + 4; // add padding size plus 4 bytes of header block end else begin aMetaBlockOther[ i ].Data.Position := 0; MetaBlocks.Write( aMetaBlockOther[ i ].MetaDataBlockHeader[ 1 ], 4 ); MetaBlocks.CopyFrom( aMetaBlockOther[ i ].Data, 0 ); end; end; MetaBlocks.Position := 0; bRearange := true; end; // set up file if (FPadding <= VorbisBlock.Size - FTagSize ) then begin // no room rebuild the file from scratch bRebuild := true; BufferName := FileName + '~'; Source := TFileStreamEx.Create( FileName, fmOpenRead ); // Set read-only and open old file, and create new Destination := TFileStreamEx.Create( BufferName, fmCreate ); Source.Read( oldHeader, sizeof( oldHeader ) ); oldHeader.MetaDataBlockHeader[ 1 ] := (oldHeader.MetaDataBlockHeader[ 1 ] and $7f ); //just in case no metadata existed Destination.Write( oldHeader, Sizeof( oldHeader ) ); Destination.CopyFrom( MetaBlocks, 0 ); end else begin bRebuild := false; Source := nil; Destination := TFileStreamEx.Create( FileName, fmOpenWrite); // Set write-access and open file if bRearange then begin Destination.Seek( SizeOf( FHeader ), soFromBeginning ); Destination.CopyFrom( MetaBlocks, 0 ); end else begin Destination.Seek( FVCOffset - 4, soFromBeginning ); end; end; // finally write vorbis block MetaDataBlockHeader[1] := META_VORBIS_COMMENT; MetaDataBlockHeader[2] := Byte(( VorbisBlock.Size shr 16 ) and 255 ); MetaDataBlockHeader[3] := Byte(( VorbisBlock.Size shr 8 ) and 255 ); MetaDataBlockHeader[4] := Byte( VorbisBlock.Size and 255 ); Destination.Write( MetaDataBlockHeader[ 1 ], SizeOf( MetaDataBlockHeader ) ); Destination.CopyFrom( VorbisBlock, VorbisBlock.Size ); // and add padding if FPaddingLast or bRearange then begin MetaDataBlockHeader[1] := META_PADDING or $80; end else begin MetaDataBlockHeader[1] := META_PADDING; end; if bRebuild then begin iNewPadding := 4096; // why not... end else begin if FTagSize > VorbisBlock.Size then begin // tag got smaller increase padding iNewPadding := (FPadding + FTagSize - VorbisBlock.Size) + iExtraPadding; end else begin // tag got bigger shrink padding iNewPadding := (FPadding - VorbisBlock.Size + FTagSize ) + iExtraPadding; end; end; MetaDataBlockHeader[2] := Byte(( iNewPadding shr 16 ) and 255 ); MetaDataBlockHeader[3] := Byte(( iNewPadding shr 8 ) and 255 ); MetaDataBlockHeader[4] := Byte( iNewPadding and 255 ); Destination.Write(MetaDataBlockHeader[ 1 ], 4); if (FPadding <> iNewPadding) or bRearange then begin // fill the block with zeros sTmp := DupeString( #0, iNewPadding ); Destination.Write( sTmp[1], iNewPadding ); end; // finish if bRebuild then begin // time to put back the audio data... Source.Seek( FAudioOffset, soFromBeginning ); Destination.CopyFrom( Source, Source.Size - FAudioOffset ); Source.Free; Destination.Free; if ( mbDeleteFile( FileName ) ) and ( mbRenameFile( BufferName, FileName ) ) then begin //Replace old file and delete temporary file result := true end else begin raise Exception.Create(''); end; end else begin result := true; Destination.Free; end; // post save tasks if bTAG_PreserveDate then mbFileSetTime( FileName, iFileAge ); if bRearange then FreeAndNil( MetaBlocks ); except // Access error if mbFileExists( BufferName ) then mbDeleteFile( BufferName ); end; end; (* -------------------------------------------------------------------------- *) end. �������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/DTS.pas����������������������������������������������0000644�0001750�0000144�00000015623�15104114162�021542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TDTS - for manipulating with DTS Files } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2005 by Gambit } { } { Version 1.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.0 (10 January 2005) } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit DTS; interface uses Classes, SysUtils, DCClassesUtf8; const BIRATES: array[0..31] of Integer = (32, 56, 64, 96, 112, 128, 192, 224, 256, 320, 384, 448, 512, 576, 640, 768, 960, 1024, 1152, 1280, 1344, 1408, 1411, 1472, 1536, 1920, 2048, 3072, 3840, 0, -1, 1); //open, variable, lossless type { Class TDTS } TDTS = class(TObject) private { Private declarations } FFileSize: Int64; FValid: Boolean; FChannels: Cardinal; FBits: Cardinal; FSampleRate: Cardinal; FBitrate: Word; FDuration: Double; function FGetRatio: Double; procedure FResetData; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load header } property FileSize: Int64 read FFileSize; property Valid: Boolean read FValid; property Channels: Cardinal read FChannels; property Bits: Cardinal read FBits; property SampleRate: Cardinal read FSampleRate; property Bitrate: Word read FBitrate; property Duration: Double read FDuration; property Ratio: Double read FGetRatio; { Compression ratio (%) } end; implementation { ********************** Private functions & procedures ********************* } procedure TDTS.FResetData; begin { Reset all data } FFileSize := 0; FValid := False; FChannels := 0; FBits := 0; FSampleRate := 0; FBitrate := 0; FDuration := 0; end; { ********************** Public functions & procedures ********************** } constructor TDTS.Create; begin { Create object } inherited; FResetData; end; (* -------------------------------------------------------------------------- *) destructor TDTS.Destroy; begin inherited; end; (* -------------------------------------------------------------------------- *) function TDTS.ReadFromFile(const FileName: String): Boolean; var f: TFileStreamEx; SignatureChunk: Cardinal; tehWord: Word; gayDTS: array[0..7] of Byte; begin Result := False; FResetData; f:=nil; try f := TFileStreamEx.create(FileName, fmOpenRead or fmShareDenyWrite); //0x7FFE8001 if (f.Read(SignatureChunk, SizeOf(SignatureChunk)) = SizeOf(SignatureChunk)) and (SignatureChunk = 25230975) then begin FillChar(gayDTS, SizeOf(gayDTS),0); f.Seek(3, soFromCurrent); f.Read(gayDTS, SizeOf(gayDTS)); FFileSize := f.Size; FValid := TRUE; tehWord := gayDTS[1] or (gayDTS[0] shl 8); case ((tehWord and $0FC0) shr 6) of 0: FChannels := 1; 1..4: FChannels := 2; 5..6: FChannels := 3; 7..8: FChannels := 4; 9: FChannels := 5; 10..12: FChannels := 6; 13: FChannels := 7; 14..15: FChannels := 8; else FChannels := 0; end; case ((tehWord and $3C) shr 2) of 1: FSampleRate := 8000; 2: FSampleRate := 16000; 3: FSampleRate := 32000; 6: FSampleRate := 11025; 7: FSampleRate := 22050; 8: FSampleRate := 44100; 11: FSampleRate := 12000; 12: FSampleRate := 24000; 13: FSampleRate := 48000; else FSampleRate := 0; end; tehWord := 0; tehWord := gayDTS[2] or (gayDTS[1] shl 8); FBitrate := BIRATES[(tehWord and $03E0) shr 5]; tehWord := 0; tehWord := gayDTS[7] or (gayDTS[6] shl 8); case ((tehWord and $01C0) shr 6) of 0..1: FBits := 16; 2..3: FBits := 20; 4..5: FBits := 24; else FBits := 16; end; FDuration := FFileSize * 8 / 1000 / FBitrate; Result := True; end; finally f.free; end; end; (* -------------------------------------------------------------------------- *) function TDTS.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / ((FDuration * FSampleRate) * (FChannels * FBits / 8) + 44) * 100 else Result := 0; end; (* -------------------------------------------------------------------------- *) end. �������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/COPYING.txt������������������������������������������0000644�0001750�0000144�00000064500�15104114162�022252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/CDAtrack.pas�����������������������������������������0000644�0001750�0000144�00000016300�15104114162�022515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TCDAtrack - for getting information for CDDA track } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.0 (4 November 2002) } { - Using cdplayer.ini } { - Track info: title, artist, album, duration, track number, position } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit CDAtrack; interface uses Classes, SysUtils, IniFiles, DCClassesUtf8; type { Class TCDAtrack } TCDAtrack = class(TObject) private { Private declarations } FValid: Boolean; FTitle: String; FArtist: String; FAlbum: String; FDuration: Double; FTrack: Word; FPosition: Double; procedure FResetData; public { Public declarations } constructor Create; { Create object } function ReadFromFile(const FileName: String): Boolean; { Load data } property Valid: Boolean read FValid; { True if valid format } property Title: String read FTitle; { Song title } property Artist: String read FArtist; { Artist name } property Album: String read FAlbum; { Album name } property Duration: Double read FDuration; { Duration (seconds) } property Track: Word read FTrack; { Track number } property Position: Double read FPosition; { Track position (seconds) } end; implementation type { CDA track data } TrackData = packed record RIFFHeader: array [1..4] of Char; { Always "RIFF" } FileSize: Integer; { Always "RealFileSize - 8" } CDDAHeader: array [1..8] of Char; { Always "CDDAfmt " } FormatSize: Integer; { Always 24 } FormatID: Word; { Always 1 } TrackNumber: Word; { Track number } Serial: Integer; { CD serial number (stored in cdplayer.ini) } PositionHSG: Integer; { Track position in HSG format } DurationHSG: Integer; { Track duration in HSG format } PositionRB: Integer; { Track position in Red-Book format } DurationRB: Integer; { Track duration in Red-Book format } Title: string; { Song title } Artist: string; { Artist name } Album: string; { Album name } end; { ********************* Auxiliary functions & procedures ******************** } function ReadData(const FileName: String; var Data: TrackData): Boolean; var SourceFile: TFileStreamEx; CDData: TIniFile; begin { Read track data } Result := false; try SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); SourceFile.Read(Data, 44); SourceFile.Free; Result := true; { Try to get song info } CDData := TIniFile.Create('cdplayer.ini'); Data.Title := CDData.ReadString(IntToHex(Data.Serial, 2), IntToStr(Data.TrackNumber), ''); Data.Artist := CDData.ReadString(IntToHex(Data.Serial, 2), 'artist', ''); Data.Album := CDData.ReadString(IntToHex(Data.Serial, 2), 'title', ''); CDData.Free; except end; end; { --------------------------------------------------------------------------- } function IsValid(const Data: TrackData): Boolean; begin { Check for format correctness } Result := (Data.RIFFHeader = 'RIFF') and (Data.CDDAHeader = 'CDDAfmt '); end; { ********************** Private functions & procedures ********************* } procedure TCDAtrack.FResetData; begin { Reset variables } FValid := false; FTitle := ''; FArtist := ''; FAlbum := ''; FDuration := 0; FTrack := 0; FPosition := 0; end; { ********************** Public functions & procedures ********************** } constructor TCDAtrack.Create; begin { Create object } inherited; FResetData; end; { --------------------------------------------------------------------------- } function TCDAtrack.ReadFromFile(const FileName: String): Boolean; var Data: TrackData; begin { Reset variables and load file data } FResetData; FillChar(Data, SizeOf(Data), 0); Result := ReadData(FileName, Data); { Process data if loaded and valid } if Result and IsValid(Data) then begin FValid := true; { Fill properties with loaded data } FTitle := Data.Title; FArtist := Data.Artist; FAlbum := Data.Album; FDuration := Data.DurationHSG / 75; FTrack := Data.TrackNumber; FPosition := Data.PositionHSG / 75; end; end; { --------------------------------------------------------------------------- } end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/APEtag.pas�������������������������������������������0000644�0001750�0000144�00000044035�15104114162�022210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TAPEtag - for manipulating with APE tags } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 2.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 2.0 (30 May 2003) by Jean-Marie Prat } { - Writing support for APE 2.0 tags } { - Removed UTF8 decoding since calling application is supposed to provide } { or handle UTF8 strings. } { - Removed direct tag infos. All fields are now stored into an array. A } { specific field can be requested using SeekField function. } { - Introduced procedures to add/remove/order fields. } { } { Version 1.0 (21 April 2002) } { - Reading & writing support for APE 1.0 tags } { - Reading support for APE 2.0 tags (UTF-8 decoding) } { - Tag info: title, artist, album, track, year, genre, comment, copyright } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit APEtag; interface uses Classes, SysUtils, DCClassesUtf8; const { Tag ID } ID3V1_ID = 'TAG'; { ID3v1 } APE_ID = 'APETAGEX'; { APE } { Size constants } ID3V1_TAG_SIZE = 128; { ID3v1 tag } APE_TAG_FOOTER_SIZE = 32; { APE tag footer } APE_TAG_HEADER_SIZE = 32; { APE tag header } { Version of APE tag } APE_VERSION_1_0 = 1000; APE_VERSION_2_0 = 1000; type { APE tag header/footer - for internal use } RTagHeader = record { Real structure of APE footer } ID: array [0..7] of Char; { Always "APETAGEX" } Version: Integer; { Tag version } Size: Integer; { Tag size including footer } Fields: Integer; { Number of fields } Flags: Integer; { Tag flags } Reserved: array [0..7] of Char; { Reserved for later use } { Extended data } DataShift: Byte; { Used if ID3v1 tag found } FileSize: Integer; { File size (bytes) } end; RField = record Name: string; Value: String; end; AField = array of RField; { TAPETag } TAPETag = class private pField: Afield; pExists: Boolean; pVersion: Integer; pSize: Integer; function ReadFooter(sFile: String; var footer: RTagHeader): boolean; procedure ReadFields(sFile: String; footer: RTagHeader); private function GetTrack: Word; function GetYear: String; function GetGenre: String; function GetTitle: String; function GetAlbum: String; function GetArtist: String; function GetComment: String; function GetComposer: String; function GetCopyright: String; public property Exists: Boolean read pExists; { True if tag found } property Version: Integer read pVersion; { Tag version } property Fields: AField read pField; property Size: Integer read pSize; constructor Create(); function ReadFromFile(sFile: String): Boolean; function RemoveTagFromFile(sFile: String): Boolean; function WriteTagInFile(sFile: String): Boolean; procedure InsertField(pos: integer ; name: string ; value: String); { Insert field so that it has position pos} procedure RemoveField(pos: integer); procedure AppendField(name: string ; value: String); procedure SwapFields(pos1, pos2: integer); function SeekField(Field: string): String; procedure ResetData; property Title: String read GetTitle; { Song title } property Artist: String read GetArtist; { Artist name } property Album: String read GetAlbum; { Album title } property Track: Word read GetTrack; { Track number } property Year: String read GetYear; { Release year } property Genre: String read GetGenre; { Genre name } property Comment: String read GetComment; { Comment } property Composer: String read GetComposer; { Composer } property Copyright: String read GetCopyright; { Copyright } end; implementation //----------------------------------------------------------------------------// // Private stuff // //----------------------------------------------------------------------------// procedure TAPETag.ResetData(); begin SetLength(pField,0); pExists := False; pVersion := 0; pSize := 0; end; // ---------------------------------------------------------------------------- function TAPETag.ReadFooter(sFile: String; var footer: RTagHeader): boolean; var SourceFile: TFileStreamEx; TagID: array [1..3] of Char; Transferred: Integer; begin FillChar(Footer, SizeOf(Footer), 0); try Result := true; { Set read-access and open file } SourceFile := TFileStreamEx.Create(sFile, fmOpenRead or fmShareDenyWrite); Footer.FileSize := SourceFile.Size; if (IOResult <> 0) then begin SourceFile.Free; Result := False; Exit; end; { Check for existing ID3v1 tag } if (Footer.FileSize - ID3V1_TAG_SIZE > 0) then begin SourceFile.Seek(Footer.FileSize - ID3V1_TAG_SIZE, soFromBeginning); SourceFile.Read(TagID, SizeOf(TagID)); if TagID = ID3V1_ID then Footer.DataShift := ID3V1_TAG_SIZE else Footer.DataShift := 0; end; { Read footer data } Transferred := 0; if (Footer.FileSize - Footer.DataShift - APE_TAG_FOOTER_SIZE) > 0 then begin SourceFile.Seek(Footer.FileSize - Footer.DataShift - APE_TAG_FOOTER_SIZE, soFromBeginning); //BlockRead(SourceFile, Footer, APE_TAG_FOOTER_SIZE, Transferred); Transferred := SourceFile.Read(Footer, APE_TAG_FOOTER_SIZE); end; SourceFile.Free; { if transfer is not complete } if Transferred < APE_TAG_FOOTER_SIZE then Result := false; except { Error } Result := false; end; end; function TAPETag.GetAlbum: String; begin Result := SeekField('Album'); end; function TAPETag.GetArtist: String; begin Result := SeekField('Artist'); end; function TAPETag.GetComment: String; begin Result := SeekField('Comment'); end; function TAPETag.GetComposer: String; begin Result := SeekField('Composer'); end; function TAPETag.GetCopyright: String; begin Result := SeekField('Copyright'); end; function TAPETag.GetYear: String; begin Result := SeekField('Year'); end; function TAPETag.GetGenre: String; begin Result := SeekField('Genre'); end; function TAPETag.GetTitle: String; begin Result := SeekField('Title'); end; function TAPETag.GetTrack: Word; var TrackString: String; Index, Value, Code: Integer; begin { Extract track from string } TrackString := SeekField('Track'); Index := Pos('/', TrackString); if Index = 0 then Val(TrackString, Value, Code) else Val(Copy(TrackString, 1, Index - 1), Value, Code); if Code = 0 then Result := Value else Result := 0; end; // ---------------------------------------------------------------------------- procedure TAPETag.ReadFields(sFile: String; footer: RTagHeader); var SourceFile: TFileStreamEx; FieldName: String; FieldValue: array [1..250] of Char; NextChar: Char; Iterator, ValueSize, ValuePosition, FieldFlags: Integer; begin try { Set read-access, open file } SourceFile := TFileStreamEx.Create(sFile, fmOpenRead or fmShareDenyWrite); SourceFile.Seek(footer.FileSize - footer.DataShift - footer.Size, soFromBeginning); { Read all stored fields } SetLength(pField,footer.Fields); for Iterator := 0 to footer.Fields-1 do begin FillChar(FieldValue, SizeOf(FieldValue), 0); SourceFile.Read(ValueSize, SizeOf(ValueSize)); SourceFile.Read(FieldFlags, SizeOf(FieldFlags)); FieldName := ''; repeat SourceFile.Read(NextChar, SizeOf(NextChar)); FieldName := FieldName + NextChar; until Ord(NextChar) = 0; ValuePosition := SourceFile.Position; SourceFile.Read(FieldValue, ValueSize mod SizeOf(FieldValue)); pField[Iterator].Name := Trim(FieldName); pField[Iterator].Value := Trim(FieldValue); SourceFile.Seek(ValuePosition + ValueSize, soFromBeginning); end; SourceFile.Free; except end; end; //----------------------------------------------------------------------------// // Public stuff // //----------------------------------------------------------------------------// constructor TAPETag.Create(); begin inherited; ResetData; end; // ---------------------------------------------------------------------------- function TAPETag.ReadFromFile(sFile: String): Boolean; var Footer: RTagHeader; begin ResetData; Result := ReadFooter(sFile, Footer); { Process data if loaded and footer valid } if (Result) and (Footer.ID = APE_ID) then begin pExists := True; pVersion := Footer.Version; pSize := Footer.Size; ReadFields(sFile, Footer); end; end; // ---------------------------------------------------------------------------- function TAPETag.RemoveTagFromFile(sFile: String): Boolean; var SourceFile: TFileStreamEx; Footer: RTagHeader; ID3: pointer; begin Result := ReadFooter(sFile, Footer); { Process data if loaded and footer valid } if (Result) and (Footer.ID = APE_ID) then begin SourceFile := TFileStreamEx.Create(sFile, fmOpenReadWrite or fmShareDenyWrite); { If there is an ID3v1 tag roaming around behind the APE tag, we have to buffer it } if Footer.DataShift = ID3V1_TAG_SIZE then begin GetMem(ID3,ID3V1_TAG_SIZE); SourceFile.Seek(footer.FileSize - footer.DataShift, soFromBeginning); SourceFile.Read(ID3^, ID3V1_TAG_SIZE); end; { If this is an APEv2, header size must be added } if (Footer.Flags shr 31) > 0 then Inc(Footer.Size, APE_TAG_HEADER_SIZE); SourceFile.Seek(Footer.FileSize - footer.Size-Footer.DataShift, soFromBeginning); { If there is an ID3v1 tag roaming around, we copy it } if Footer.DataShift = ID3V1_TAG_SIZE then begin SourceFile.Write(ID3^, ID3V1_TAG_SIZE); FreeMem(ID3,128); end; SourceFile.Seek(Footer.FileSize-Footer.Size, soFromBeginning); //truncate SourceFile.Size := SourceFile.Position; SourceFile.Free; end; end; // ---------------------------------------------------------------------------- function TAPETag.WriteTagInFile(sFile: String): Boolean; const APEPreample: array [0..7] of char = ('A','P','E','T','A','G','E','X'); var SourceFile: TFileStreamEx; Header, Footer, RefFooter: RTagHeader; ID3: PChar; i, len, TagSize, Flags: integer; TagData: TStringStream; begin ID3 := nil; // method : first, save any eventual ID3v1 tag lying around // then we truncate the file after the audio data // then write the APE tag (and possibly the ID3) Result := ReadFooter(sFile, RefFooter); { Process data if loaded and footer valid } if (Result) and (RefFooter.ID = APE_ID) then begin SourceFile := TFileStreamEx.Create(sFile, fmOpenReadWrite or fmShareDenyWrite); { If there is an ID3v1 tag roaming around behind the APE tag, we have to buffer it } if RefFooter.DataShift = ID3V1_TAG_SIZE then begin GetMem(ID3,ID3V1_TAG_SIZE); SourceFile.Seek(Reffooter.FileSize - Reffooter.DataShift, soFromBeginning); SourceFile.Read(ID3^, ID3V1_TAG_SIZE); end; { If this is an APEv2, header size must be added } //if (RefFooter.Flags shr 31) > 0 then Inc(RefFooter.Size, APE_TAG_HEADER_SIZE); SourceFile.Seek(RefFooter.FileSize - RefFooter.Size-RefFooter.DataShift, soFromBeginning); //truncate SourceFile.Size := SourceFile.Position; SourceFile.Free; end; TagData := TStringStream.Create(''); TagSize := APE_TAG_FOOTER_SIZE; for i:=0 to high(pField) do begin TagSize := TagSize + 9 + Length(pField[i].Name) + Length(pField[i].Value); end; Header.ID[0] := 'A'; Header.ID[1] := 'P'; Header.ID[2] := 'E'; Header.ID[3] := 'T'; Header.ID[4] := 'A'; Header.ID[5] := 'G'; Header.ID[6] := 'E'; Header.ID[7] := 'X'; Header.Version := 2000; Header.Size := TagSize; Header.Fields := Length(pField); Header.Flags := Integer(0 or (1 shl 29) or (1 shl 31)); // tag contains a header and this is the header //ShowMessage(IntToSTr(Header.Flags)); TagData.Write(Header,APE_TAG_HEADER_SIZE); for i:=0 to high(pField) do begin len := Length(pField[i].Value); Flags := 0; TagData.Write(len, SizeOf(len)); TagData.Write(Flags, SizeOf(Flags)); TagData.WriteString(pField[i].Name + #0); TagData.WriteString(pField[i].Value); end; Footer.ID[0] := 'A'; Footer.ID[1] := 'P'; Footer.ID[2] := 'E'; Footer.ID[3] := 'T'; Footer.ID[4] := 'A'; Footer.ID[5] := 'G'; Footer.ID[6] := 'E'; Footer.ID[7] := 'X'; Footer.Version := 2000; Footer.Size := TagSize; Footer.Fields := Length(pField); Footer.Flags := Integer(0 or (1 shl 31)); // tag contains a header and this is the footer TagData.Write(Footer,APE_TAG_FOOTER_SIZE); if (RefFooter.DataShift = ID3V1_TAG_SIZE) and Assigned(ID3)then begin TagData.Write(ID3^,ID3V1_TAG_SIZE); FreeMem(ID3); end; SourceFile := TFileStreamEx.Create(sFile, fmOpenReadWrite or fmShareDenyWrite); SourceFile.Seek(0, soFromEnd); TagData.Seek(0, soFromBeginning); SourceFile.CopyFrom(TagData, TagData.Size); SourceFile.Free; TagData.Free; end; // ---------------------------------------------------------------------------- procedure TAPETag.InsertField (pos: integer ; name: string ; value: String); var dummy: AField; i: integer; begin if pos>=Length(pField) then exit; SetLength(dummy,Length(pField)-pos); dummy := copy(pField,pos,Length(dummy)); pField[pos].Name := name; pField[pos].Value := value; SetLength(pField,Length(pField)+1); for i:= pos+1 to high(pField) do pField[i] := dummy[i-pos-1]; end; // ---------------------------------------------------------------------------- procedure TAPETag.RemoveField (pos: integer); var i: integer; begin if pos>Length(pField) then exit; for i:=pos+1 to high(pField) do pField[i-1]:=pField[i]; SetLength(pField,Length(pField)-1); end; // ---------------------------------------------------------------------------- procedure TAPETag.AppendField(name: string ; value: String); begin SetLength(pField,Length(pField)+1); pField[high(pField)].Name := name; pField[high(pField)].Value := value; end; // ---------------------------------------------------------------------------- procedure TAPETag.SwapFields (pos1, pos2: integer); var dummy: RField; begin dummy.Name := pField[pos1].Name; dummy.Value := pField[pos1].Value; pField[pos1].Name := pField[pos2].Name; pField[pos1].Value := pField[pos2].Value; pField[pos2].Name := dummy.Name; pField[pos2].Value := dummy.Value; end; // ---------------------------------------------------------------------------- function TAPETag.SeekField(Field: string): String; var i: integer; begin Result := ''; for i:=0 to high(pField) do begin if UpperCase(Field)=UpperCase(pField[i].Name) then begin Result := pField[i].Value; Break; end; end; end; // ---------------------------------------------------------------------------- end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/AC3.pas����������������������������������������������0000644�0001750�0000144�00000014215�15104114162�021452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TAC3 - for manipulating with AC3 Files } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2005 by Gambit } { } { Version 1.1 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.0 (05 January 2005) } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit AC3; interface uses Classes, SysUtils, DCClassesUtf8; const BIRATES: array[0..18] of Integer = (32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 512, 576, 640); type { Class TAC3 } TAC3 = class(TObject) private { Private declarations } FFileSize: Int64; FValid: Boolean; FChannels: Cardinal; FBits: Cardinal; FSampleRate: Cardinal; FBitrate: Word; FDuration: Double; function FGetRatio: Double; procedure FResetData; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean; { Load header } property FileSize: Int64 read FFileSize; property Valid: Boolean read FValid; property Channels: Cardinal read FChannels; property Bits: Cardinal read FBits; property SampleRate: Cardinal read FSampleRate; property Bitrate: Word read FBitrate; property Duration: Double read FDuration; property Ratio: Double read FGetRatio; { Compression ratio (%) } end; implementation { ********************** Private functions & procedures ********************* } procedure TAC3.FResetData; begin { Reset all data } FFileSize := 0; FValid := False; FChannels := 0; FBits := 0; FSampleRate := 0; FBitrate := 0; FDuration := 0; end; { ********************** Public functions & procedures ********************** } constructor TAC3.Create; begin { Create object } inherited; FResetData; end; (* -------------------------------------------------------------------------- *) destructor TAC3.Destroy; begin inherited; end; (* -------------------------------------------------------------------------- *) function TAC3.ReadFromFile(const FileName: String): Boolean; var f: TFileStreamEx; SignatureChunk: Word; tehByte: Byte; begin Result := False; FResetData; f:=nil; try f := TFileStreamEx.create(FileName, fmOpenRead or fmShareDenyWrite); //0x0B77 if (f.Read(SignatureChunk, SizeOf(SignatureChunk)) = SizeOf(SignatureChunk)) and (SignatureChunk = 30475) then begin FillChar(tehByte, SizeOf(tehByte),0); f.Seek(2, soFromCurrent); f.Read(tehByte, SizeOf(tehByte)); FFileSize := f.Size; FValid := TRUE; case (tehByte and $C0) of 0: FSampleRate := 48000; $40: FSampleRate := 44100; $80: FSampleRate := 32000; else FSampleRate := 0; end; FBitrate := BIRATES[(tehByte and $3F) shr 1]; FillChar(tehByte, SizeOf(tehByte),0); f.Seek(1, soFromCurrent); f.Read(tehByte, SizeOf(tehByte)); case (tehByte and $E0) of 0: FChannels := 2; $20: FChannels := 1; $40: FChannels := 2; $60: FChannels := 3; $80: FChannels := 3; $A0: FChannels := 4; $C0: FChannels := 4; $E0: FChannels := 5; else FChannels := 0; end; FBits := 16; FDuration := FFileSize * 8 / 1000 / FBitrate; Result := True; end; finally f.free; end; end; (* -------------------------------------------------------------------------- *) function TAC3.FGetRatio: Double; begin { Get compression ratio } if FValid then Result := FFileSize / ((FDuration * FSampleRate) * (FChannels * FBits / 8) + 44) * 100 else Result := 0; end; (* -------------------------------------------------------------------------- *) end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/atl/AACfile.pas������������������������������������������0000644�0001750�0000144�00000036035�15104114162�022334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ *************************************************************************** } { } { Audio Tools Library } { Class TAACfile - for manipulating with AAC file information } { } { http://mac.sourceforge.net/atl/ } { e-mail: macteam@users.sourceforge.net } { } { Copyright (c) 2000-2002 by Jurgen Faul } { Copyright (c) 2003-2005 by The MAC Team } { } { Version 1.2 (April 2005) by Gambit } { - updated to unicode file access } { } { Version 1.1 (April 2004) by Gambit } { - Added Ratio and TotalFrames property } { } { Version 1.01 (September 2003) by Gambit } { - fixed the bitrate/duration bug (scans the whole file) } { } { Version 1.0 (2 October 2002) } { - Support for AAC files with ADIF or ADTS header } { - File info: file size, type, channels, sample rate, bit rate, duration } { - Class TID3v1: reading & writing support for ID3v1 tags } { - Class TID3v2: reading & writing support for ID3v2 tags } { } { This library 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 library 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 library; if not, write to the Free Software } { Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { *************************************************************************** } unit AACfile; interface uses Classes, SysUtils, ID3v1, ID3v2, APEtag, DCClassesUtf8; const { Header type codes } AAC_HEADER_TYPE_UNKNOWN = 0; { Unknown } AAC_HEADER_TYPE_ADIF = 1; { ADIF } AAC_HEADER_TYPE_ADTS = 2; { ADTS } { Header type names } AAC_HEADER_TYPE: array [0..2] of string = ('Unknown', 'ADIF', 'ADTS'); { MPEG version codes } AAC_MPEG_VERSION_UNKNOWN = 0; { Unknown } AAC_MPEG_VERSION_2 = 1; { MPEG-2 } AAC_MPEG_VERSION_4 = 2; { MPEG-4 } { MPEG version names } AAC_MPEG_VERSION: array [0..2] of string = ('Unknown', 'MPEG-2', 'MPEG-4'); { Profile codes } AAC_PROFILE_UNKNOWN = 0; { Unknown } AAC_PROFILE_MAIN = 1; { Main } AAC_PROFILE_LC = 2; { LC } AAC_PROFILE_SSR = 3; { SSR } AAC_PROFILE_LTP = 4; { LTP } { Profile names } AAC_PROFILE: array [0..4] of string = ('Unknown', 'AAC Main', 'AAC LC', 'AAC SSR', 'AAC LTP'); { Bit rate type codes } AAC_BITRATE_TYPE_UNKNOWN = 0; { Unknown } AAC_BITRATE_TYPE_CBR = 1; { CBR } AAC_BITRATE_TYPE_VBR = 2; { VBR } { Bit rate type names } AAC_BITRATE_TYPE: array [0..2] of string = ('Unknown', 'CBR', 'VBR'); type { Class TAACfile } TAACfile = class(TObject) private { Private declarations } FFileSize: Integer; FHeaderTypeID: Byte; FMPEGVersionID: Byte; FProfileID: Byte; FChannels: Byte; FSampleRate: Integer; FBitRate: Integer; FBitRateTypeID: Byte; FID3v1: TID3v1; FID3v2: TID3v2; FAPEtag: TAPEtag; FTotalFrames: Integer; procedure FResetData; function FGetHeaderType: string; function FGetMPEGVersion: string; function FGetProfile: string; function FGetBitRateType: string; function FGetDuration: Double; function FIsValid: Boolean; function FRecognizeHeaderType(const Source: TFileStreamEx): Byte; procedure FReadADIF(const Source: TFileStreamEx); procedure FReadADTS(const Source: TFileStreamEx); function FGetRatio: Double; public { Public declarations } constructor Create; { Create object } destructor Destroy; override; { Destroy object } function ReadFromFile(const FileName: String): Boolean;{ Load header } property FileSize: Integer read FFileSize; { File size (bytes) } property HeaderTypeID: Byte read FHeaderTypeID; { Header type code } property HeaderType: string read FGetHeaderType; { Header type name } property MPEGVersionID: Byte read FMPEGVersionID; { MPEG version code } property MPEGVersion: string read FGetMPEGVersion; { MPEG version name } property ProfileID: Byte read FProfileID; { Profile code } property Profile: string read FGetProfile; { Profile name } property Channels: Byte read FChannels; { Number of channels } property SampleRate: Integer read FSampleRate; { Sample rate (hz) } property BitRate: Integer read FBitRate; { Bit rate (bit/s) } property BitRateTypeID: Byte read FBitRateTypeID; { Bit rate type code } property BitRateType: string read FGetBitRateType; { Bit rate type name } property Duration: Double read FGetDuration; { Duration (seconds) } property Valid: Boolean read FIsValid; { True if data valid } property ID3v1: TID3v1 read FID3v1; { ID3v1 tag data } property ID3v2: TID3v2 read FID3v2; { ID3v2 tag data } property APEtag: TAPEtag read FAPEtag; { APE tag data } property Ratio: Double read FGetRatio; { Compression ratio (%) } property TotalFrames: Integer read FTotalFrames;{ Total number of frames } end; implementation const { Sample rate values } SAMPLE_RATE: array [0..15] of Integer = (96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 0, 0, 0, 0); { ********************* Auxiliary functions & procedures ******************** } function ReadBits(Source: TFileStreamEx; Position, Count: Integer): Integer; var Buffer: array [1..4] of Byte; begin { Read a number of bits from file at the given position } Source.Seek(Position div 8, soFromBeginning); Source.Read(Buffer, SizeOf(Buffer)); Result := Buffer[1] * $1000000 + Buffer[2] * $10000 + Buffer[3] * $100 + Buffer[4]; Result := (Result shl (Position mod 8)) shr (32 - Count); end; { ********************** Private functions & procedures ********************* } procedure TAACfile.FResetData; begin { Reset all variables } FFileSize := 0; FHeaderTypeID := AAC_HEADER_TYPE_UNKNOWN; FMPEGVersionID := AAC_MPEG_VERSION_UNKNOWN; FProfileID := AAC_PROFILE_UNKNOWN; FChannels := 0; FSampleRate := 0; FBitRate := 0; FBitRateTypeID := AAC_BITRATE_TYPE_UNKNOWN; FID3v1.ResetData; FID3v2.ResetData; FAPEtag.ResetData; FTotalFrames := 0; end; { --------------------------------------------------------------------------- } function TAACfile.FGetHeaderType: string; begin { Get header type name } Result := AAC_HEADER_TYPE[FHeaderTypeID]; end; { --------------------------------------------------------------------------- } function TAACfile.FGetMPEGVersion: string; begin { Get MPEG version name } Result := AAC_MPEG_VERSION[FMPEGVersionID]; end; { --------------------------------------------------------------------------- } function TAACfile.FGetProfile: string; begin { Get profile name } Result := AAC_PROFILE[FProfileID]; end; { --------------------------------------------------------------------------- } function TAACfile.FGetBitRateType: string; begin { Get bit rate type name } Result := AAC_BITRATE_TYPE[FBitRateTypeID]; end; { --------------------------------------------------------------------------- } function TAACfile.FGetDuration: Double; begin { Calculate duration time } if FBitRate = 0 then Result := 0 else Result := 8 * (FFileSize - ID3v2.Size) / FBitRate; end; { --------------------------------------------------------------------------- } function TAACfile.FIsValid: Boolean; begin { Check for file correctness } Result := (FHeaderTypeID <> AAC_HEADER_TYPE_UNKNOWN) and (FChannels > 0) and (FSampleRate > 0) and (FBitRate > 0); end; { --------------------------------------------------------------------------- } function TAACfile.FRecognizeHeaderType(const Source: TFileStreamEx): Byte; var Header: array [1..4] of Char; begin { Get header type of the file } Result := AAC_HEADER_TYPE_UNKNOWN; Source.Seek(FID3v2.Size, soFromBeginning); Source.Read(Header, SizeOf(Header)); if Header[1] + Header[2] + Header[3] + Header[4] = 'ADIF' then Result := AAC_HEADER_TYPE_ADIF else if (Byte(Header[1]) = $FF) and (Byte(Header[1]) and $F0 = $F0) then Result := AAC_HEADER_TYPE_ADTS; end; { --------------------------------------------------------------------------- } procedure TAACfile.FReadADIF(const Source: TFileStreamEx); var Position: Integer; begin { Read ADIF header data } Position := FID3v2.Size * 8 + 32; if ReadBits(Source, Position, 1) = 0 then Inc(Position, 3) else Inc(Position, 75); if ReadBits(Source, Position, 1) = 0 then FBitRateTypeID := AAC_BITRATE_TYPE_CBR else FBitRateTypeID := AAC_BITRATE_TYPE_VBR; Inc(Position, 1); FBitRate := ReadBits(Source, Position, 23); if FBitRateTypeID = AAC_BITRATE_TYPE_CBR then Inc(Position, 51) else Inc(Position, 31); FMPEGVersionID := AAC_MPEG_VERSION_4; FProfileID := ReadBits(Source, Position, 2) + 1; Inc(Position, 2); FSampleRate := SAMPLE_RATE[ReadBits(Source, Position, 4)]; Inc(Position, 4); Inc(FChannels, ReadBits(Source, Position, 4)); Inc(Position, 4); Inc(FChannels, ReadBits(Source, Position, 4)); Inc(Position, 4); Inc(FChannels, ReadBits(Source, Position, 4)); Inc(Position, 4); Inc(FChannels, ReadBits(Source, Position, 2)); end; { --------------------------------------------------------------------------- } procedure TAACfile.FReadADTS(const Source: TFileStreamEx); var Frames, TotalSize, Position: Integer; begin { Read ADTS header data } Frames := 0; TotalSize := 0; repeat Inc(Frames); Position := (FID3v2.Size + TotalSize) * 8; if ReadBits(Source, Position, 12) <> $FFF then break; Inc(Position, 12); if ReadBits(Source, Position, 1) = 0 then FMPEGVersionID := AAC_MPEG_VERSION_4 else FMPEGVersionID := AAC_MPEG_VERSION_2; Inc(Position, 4); FProfileID := ReadBits(Source, Position, 2) + 1; Inc(Position, 2); FSampleRate := SAMPLE_RATE[ReadBits(Source, Position, 4)]; Inc(Position, 5); FChannels := ReadBits(Source, Position, 3); if FMPEGVersionID = AAC_MPEG_VERSION_4 then Inc(Position, 9) else Inc(Position, 7); Inc(TotalSize, ReadBits(Source, Position, 13)); Inc(Position, 13); if ReadBits(Source, Position, 11) = $7FF then FBitRateTypeID := AAC_BITRATE_TYPE_VBR else FBitRateTypeID := AAC_BITRATE_TYPE_CBR; if FBitRateTypeID = AAC_BITRATE_TYPE_CBR then break; // more accurate //until (Frames = 1000) or (Source.Size <= FID3v2.Size + TotalSize); until (Source.Size <= FID3v2.Size + TotalSize); FTotalFrames := Frames; FBitRate := Round(8 * TotalSize / 1024 / Frames * FSampleRate); end; { ********************** Public functions & procedures ********************** } constructor TAACfile.Create; begin { Create object } FID3v1 := TID3v1.Create; FID3v2 := TID3v2.Create; FAPEtag := TAPEtag.Create; FResetData; inherited; end; { --------------------------------------------------------------------------- } destructor TAACfile.Destroy; begin { Destroy object } FID3v1.Free; FID3v2.Free; FAPEtag.Free; inherited; end; { --------------------------------------------------------------------------- } function TAACfile.ReadFromFile(const FileName: String): Boolean; var SourceFile: TFileStreamEx; begin { Read data from file } Result := false; FResetData; { At first search for tags, then try to recognize header type } if (FID3v2.ReadFromFile(FileName)) and (FID3v1.ReadFromFile(FileName)) and (FAPEtag.ReadFromFile(FileName)) then try SourceFile := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); FFileSize := SourceFile.Size; FHeaderTypeID := FRecognizeHeaderType(SourceFile); { Read header data } if FHeaderTypeID = AAC_HEADER_TYPE_ADIF then FReadADIF(SourceFile); if FHeaderTypeID = AAC_HEADER_TYPE_ADTS then FReadADTS(SourceFile); SourceFile.Free; Result := true; except end; end; { --------------------------------------------------------------------------- } function TAACfile.FGetRatio: Double; begin { Get compression ratio } if FIsValid then Result := FFileSize / ((FTotalFrames * 1024) * (FChannels * 16 / 8) + 44) * 100 else Result := 0; end; { --------------------------------------------------------------------------- } end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/AudioInfo.lpr��������������������������������������������0000644�0001750�0000144�00000012477�15104114162�022223� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library AudioInfo; {$mode objfpc}{$H+} {$include calling.inc} uses FPCAdds, SysUtils, Classes, LazUTF8, WdxPlugin, AudioData, DCOSUtils; const DETECT_STRING: String = '(EXT="MP3") | (EXT="MP2") | (EXT="MP1") | (EXT="OGG") | (EXT="WMA") | ' + '(EXT="WAV") | (EXT="VQF") | (EXT="AAC") | (EXT="APE") | (EXT="MPC") | ' + '(EXT="FLAC") | (EXT="CDA") | (EXT="TTA") | (EXT="AC3") | (EXT="DTS") | ' + '(EXT="WV") | (EXT="WVC") | (EXT="OFR") | (EXT="OFS") | (EXT="M4A") | ' + '(EXT="MP4") | (EXT="OPUS")'; const FIELD_COUNT = 21; FIELD_NAME: array[0..Pred(FIELD_COUNT)] of String = ( 'Channels', 'Duration (seconds)', 'Duration (H:M:S)', 'Sample rate', 'Bitrate', 'Bitrate type', 'Title', 'Artist', 'Album', 'Track', 'Track (zero-filled)', 'Date', 'Genre', 'Comment', 'Composer', 'Copyright', 'Link', 'Encoder', 'Tags', 'Bit depth', 'Full text' ); FIELD_TYPE: array[0..Pred(FIELD_COUNT)] of Integer = ( ft_multiplechoice, ft_numeric_32, ft_string, ft_numeric_32, ft_numeric_32, ft_multiplechoice, ft_stringw, ft_stringw, ft_stringw, ft_numeric_32, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_stringw, ft_numeric_32, ft_fulltextw ); FIELD_UNIT: array[0..Pred(FIELD_COUNT)] of String = ( 'Unknown|Mono|Stereo|Joint Stereo|Dual Channel', '', '', 'Hz|kHz', '', 'CBR|VBR|Unknown', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''); var DataAudio: TAudioData; CurrentFileName: String; function ContentGetSupportedField(FieldIndex: Integer; FieldName, Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; begin if (FieldIndex < 0) or (FieldIndex >= FIELD_COUNT) then begin Result := FT_NOMOREFIELDS; Exit; end; Result := FIELD_TYPE[FieldIndex]; StrPLCopy(Units, FIELD_UNIT[FieldIndex], MaxLen - 1); StrPLCopy(FieldName, FIELD_NAME[FieldIndex], MaxLen - 1); end; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; begin Result:= ft_nosuchfield; end; function ContentGetValueW(FileName: PWideChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; var Value: String; FileNameU: String; FullText: UnicodeString; ValueI: PInteger absolute FieldValue; begin if (FieldIndex < 0) or (FieldIndex >= FIELD_COUNT) then begin Result:= ft_nosuchfield; Exit; end; FileNameU:= UTF16ToUTF8(UnicodeString(FileName)); if not mbFileExists(FileNameU) then begin Result:= ft_fileerror; Exit; end; if CurrentFileName <> FileNameU then try CurrentFileName:= FileNameU; DataAudio.LoadFromFile(FileNameU); except Exit(ft_fileerror); end; Result:= FIELD_TYPE[FieldIndex]; case FieldIndex of 0: Value:= DataAudio.Channels; 1: ValueI^:= DataAudio.Duration; 2: Value:= DataAudio.DurationHMS; 3: case UnitIndex of 0: ValueI^:= DataAudio.SampleRate; 1: ValueI^:= DataAudio.SampleRate div 1000; end; 4: ValueI^:= DataAudio.BitRate; 5: Value:= DataAudio.BitRateType; 6: Value:= DataAudio.Title; 7: Value:= DataAudio.Artist; 8: Value:= DataAudio.Album; 9: ValueI^:= DataAudio.Track; 10: if DataAudio.Track = 0 then Value:= EmptyStr else begin Value:= Format('%.2d', [DataAudio.Track]); end; 11: Value:= DataAudio.Date; 12: Value:= DataAudio.Genre; 13: Value:= DataAudio.Comment; 14: Value:= DataAudio.Composer; 15: Value:= DataAudio.Copyright; 16: Value:= DataAudio.URL; 17: Value:= DataAudio.Encoder; 18: Value:= DataAudio.Tags; 19: ValueI^:= DataAudio.Bits; 20: begin if UnitIndex = -1 then Result:= ft_fieldempty else begin MaxLen:= MaxLen div SizeOf(WideChar) - 1; FullText:= Copy(DataAudio.FullText, UnitIndex + 1, MaxLen); if Length(FullText) = 0 then Result:= ft_fieldempty else begin StrPLCopy(PWideChar(FieldValue), FullText, MaxLen); end; end; end; end; case Result of ft_string, ft_stringw, ft_multiplechoice: begin if Length(Value) = 0 then PWideChar(FieldValue)^:= #0 else begin if Result <> ft_stringw then StrPLCopy(PAnsiChar(FieldValue), Value, MaxLen - 1) else begin MaxLen:= MaxLen div SizeOf(WideChar) - 1; StrPLCopy(PWideChar(FieldValue), UTF8ToUTF16(Value), MaxLen); end; end; end; ft_numeric_32: if ValueI^ = 0 then Result:= ft_fieldempty; end; end; procedure ContentSetDefaultParams(dps: PContentDefaultParamStruct); dcpcall; begin DataAudio:= TAudioData.Create; end; procedure ContentPluginUnloading; dcpcall; begin FreeAndNil(DataAudio); end; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DetectString, DETECT_STRING, MaxLen - 1); end; exports ContentGetSupportedField, ContentGetValue, ContentGetValueW, ContentGetDetectString, ContentSetDefaultParams, ContentPluginUnloading; begin end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/src/AudioInfo.lpi��������������������������������������������0000644�0001750�0000144�00000007610�15104114162�022203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="AudioInfo"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../audioinfo.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk;atl"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"/> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="AudioInfo.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../audioinfo.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk;$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk;atl"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wdx/audioinfo/audioinfo.lng������������������������������������������������0000644�0001750�0000144�00000004761�15104114162�021514� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[KOR] Channels=채널 Duration (seconds)=지속 시간 (초) Duration (H:M:S)=지속 시간 (시:분:초) Sample rate=샘플 속도 Bitrate=비트레이트 Bitrate type=비트레이트 유형 Title=제목 Artist=아티스트 Album=앨범 Track=트랙 Track (zero-filled)=트랙 (0으로 채워짐) Date=날짜 Genre=장르 Comment=주석 Composer=작곡가 Copyright=저작권 Link=링크 Encoder=인코더 Tags=태그 Bit depth=비트 깊이 Full text=전체 텍스트 Unknown|Mono|Stereo|Joint Stereo|Dual Channel=알 수 없음|모노|스테레오|조인트 스테레오|듀얼 채널 Hz|kHz=Hz|kHz CBR|VBR|Unknown=CBR|VBR|알 수 없음 [RUS] Channels=Каналы Duration (seconds)=Время (секунды) Duration (H:M:S)=Время (Ч:М:С) Sample rate=Частота Bitrate=Битрейт Bitrate type=Тип битрейта Title=Название Artist=Исполнитель Album=Альбом Track=Трек Track (zero-filled)=Трек (ведущий ноль) Date=Дата Genre=Жанр Comment=Комментарий Composer=Композитор Copyright=Авторское право Link=Ссылка Encoder=Кодировщик Tags=Теги Bit depth=Разрядность Full text=Весь текст Unknown|Mono|Stereo|Joint Stereo|Dual Channel=Неизвестно|Моно|Стерео|Joint Стерео|Dual Channel Hz|kHz=Гц|КГц CBR|VBR|Unknown=CBR|VBR|Неизвестно [FRA] Channels=Canaux Duration (seconds)=Duree (secondes) Duration (H:M:S)=Duree (H:M:S) Sample rate=Échantillonnage Bitrate=Débit Bitrate type=Type de débit Title=Titre Artist=Artiste Album=Album Track=Piste Track (zero-filled)=Piste (zero-filled) Date=Date Genre=Genre Comment=Commentaire Composer=Compositeur Copyright=Copyright Link=Lien Encoder=Encodeur Tags=Tags Full text=Texte Inconnu|Mono|Stereo|Joint Stereo|Deux cannaux=Inconnu|Mono|Stereo|Joint Stereo|Deux canaux Hz|KHz=Hz|kHz [HUN] Channels=Csatornák Duration (seconds)=Hossz (másodperc) Duration (H:M:S)=Hossz (Ó:P:MP) Sample rate=Mintavételi ráta Bitrate=Bitráta Bitrate type=Bitráta típus Title=Cím Artist=Előadó Album=Album Track=Szám Track (zero-filled)=Szám (üres) Date=Dátum Genre=Műfaj Comment=Megjegyzés Composer=Szerző Copyright=Jogtulajdonos Link=Link Encoder=Enkóder Tags=Címkék Full text=Teljes szöveg Unknown|Mono|Stereo|Joint Stereo|Dual Channel=Ismeretlen|Monó|Sztereó|Joint Sztereó|Kétcsatornás Hz|KHz=Hz|kHz ���������������doublecmd-1.1.30/plugins/wcx/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015047� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015651� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016440� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017403� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/lzma.txt��������������������������������������������������0000644�0001750�0000144�00000051212�15104114162�021110� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LZMA SDK 4.42 ------------- LZMA SDK Copyright (C) 1999-2006 Igor Pavlov LZMA SDK provides the documentation, samples, header files, libraries, and tools you need to develop applications that use LZMA compression. LZMA is default and general compression method of 7z format in 7-Zip compression program (www.7-zip.org). LZMA provides high compression ratio and very fast decompression. LZMA is an improved version of famous LZ77 compression algorithm. It was improved in way of maximum increasing of compression ratio, keeping high decompression speed and low memory requirements for decompressing. LICENSE ------- LZMA SDK is available under any of the following licenses: 1) GNU Lesser General Public License (GNU LGPL) 2) Common Public License (CPL) 3) Simplified license for unmodified code (read SPECIAL EXCEPTION) 4) Proprietary license It means that you can select one of these four options and follow rules of that license. 1,2) GNU LGPL and CPL licenses are pretty similar and both these licenses are classified as - "Free software licenses" at http://www.gnu.org/ - "OSI-approved" at http://www.opensource.org/ 3) SPECIAL EXCEPTION Igor Pavlov, as the author of this code, expressly permits you to statically or dynamically link your code (or bind by name) to the files from LZMA SDK without subjecting your linked code to the terms of the CPL or GNU LGPL. Any modifications or additions to files from LZMA SDK, however, are subject to the GNU LGPL or CPL terms. SPECIAL EXCEPTION allows you to use LZMA SDK in applications with closed code, while you keep LZMA SDK code unmodified. SPECIAL EXCEPTION #2: Igor Pavlov, as the author of this code, expressly permits you to use this code under the same terms and conditions contained in the License Agreement you have for any previous version of LZMA SDK developed by Igor Pavlov. SPECIAL EXCEPTION #2 allows owners of proprietary licenses to use latest version of LZMA SDK as update for previous versions. SPECIAL EXCEPTION #3: Igor Pavlov, as the author of this code, expressly permits you to use code of the following files: BranchTypes.h, LzmaTypes.h, LzmaTest.c, LzmaStateTest.c, LzmaAlone.cpp, LzmaAlone.cs, LzmaAlone.java as public domain code. 4) Proprietary license LZMA SDK also can be available under a proprietary license which can include: 1) Right to modify code without subjecting modified code to the terms of the CPL or GNU LGPL 2) Technical support for code To request such proprietary license or any additional consultations, send email message from that page: http://www.7-zip.org/support.html You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA You should have received a copy of the Common Public License along with this library. LZMA SDK Contents ----------------- LZMA SDK includes: - C++ source code of LZMA compressing and decompressing - ANSI-C compatible source code for LZMA decompressing - C# source code for LZMA compressing and decompressing - Java source code for LZMA compressing and decompressing - Compiled file->file LZMA compressing/decompressing program for Windows system ANSI-C LZMA decompression code was ported from original C++ sources to C. Also it was simplified and optimized for code size. But it is fully compatible with LZMA from 7-Zip. UNIX/Linux version ------------------ To compile C++ version of file->file LZMA, go to directory C/7zip/Compress/LZMA_Alone and type "make" or "make clean all" to recompile all. In some UNIX/Linux versions you must compile LZMA with static libraries. To compile with static libraries, change string in makefile LIB = -lm to string LIB = -lm -static Files --------------------- C - C / CPP source code CS - C# source code Java - Java source code lzma.txt - LZMA SDK description (this file) 7zFormat.txt - 7z Format description 7zC.txt - 7z ANSI-C Decoder description (this file) methods.txt - Compression method IDs for .7z LGPL.txt - GNU Lesser General Public License CPL.html - Common Public License lzma.exe - Compiled file->file LZMA encoder/decoder for Windows history.txt - history of the LZMA SDK Source code structure --------------------- C - C / CPP files Common - common files for C++ projects Windows - common files for Windows related code 7zip - files related to 7-Zip Project Common - common files for 7-Zip Compress - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm BinTree - Binary Tree Match Finder for LZ algorithm HashChain - Hash Chain Match Finder for LZ algorithm Patricia - Patricia Match Finder for LZ algorithm RangeCoder - Range Coder (special code of compression/decompression) LZMA - LZMA compression/decompression on C++ LZMA_Alone - file->file LZMA compression/decompression LZMA_C - ANSI-C compatible LZMA decompressor LzmaDecode.h - interface for LZMA decoding on ANSI-C LzmaDecode.c - LZMA decoding on ANSI-C (new fastest version) LzmaDecodeSize.c - LZMA decoding on ANSI-C (old size-optimized version) LzmaTest.c - test application that decodes LZMA encoded file LzmaTypes.h - basic types for LZMA Decoder LzmaStateDecode.h - interface for LZMA decoding (State version) LzmaStateDecode.c - LZMA decoding on ANSI-C (State version) LzmaStateTest.c - test application (State version) Branch - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code Archive - files related to archiving 7z_C - 7z ANSI-C Decoder CS - C# files 7zip Common - some common files for 7-Zip Compress - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm LZMA - LZMA compression/decompression LzmaAlone - file->file LZMA compression/decompression RangeCoder - Range Coder (special code of compression/decompression) Java - Java files SevenZip Compression - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm LZMA - LZMA compression/decompression RangeCoder - Range Coder (special code of compression/decompression) C/C++ source code of LZMA SDK is part of 7-Zip project. You can find ANSI-C LZMA decompressing code at folder C/7zip/Compress/LZMA_C 7-Zip doesn't use that ANSI-C LZMA code and that code was developed specially for this SDK. And files from LZMA_C do not need files from other directories of SDK for compiling. 7-Zip source code can be downloaded from 7-Zip's SourceForge page: http://sourceforge.net/projects/sevenzip/ LZMA features ------------- - Variable dictionary size (up to 1 GB) - Estimated compressing speed: about 1 MB/s on 1 GHz CPU - Estimated decompressing speed: - 8-12 MB/s on 1 GHz Intel Pentium 3 or AMD Athlon - 500-1000 KB/s on 100 MHz ARM, MIPS, PowerPC or other simple RISC - Small memory requirements for decompressing (8-32 KB + DictionarySize) - Small code size for decompressing: 2-8 KB (depending from speed optimizations) LZMA decoder uses only integer operations and can be implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions). Some critical operations that affect to speed of LZMA decompression: 1) 32*16 bit integer multiply 2) Misspredicted branches (penalty mostly depends from pipeline length) 3) 32-bit shift and arithmetic operations Speed of LZMA decompressing mostly depends from CPU speed. Memory speed has no big meaning. But if your CPU has small data cache, overall weight of memory speed will slightly increase. How To Use ---------- Using LZMA encoder/decoder executable -------------------------------------- Usage: LZMA <e|d> inputFile outputFile [<switches>...] e: encode file d: decode file b: Benchmark. There are two tests: compressing and decompressing with LZMA method. Benchmark shows rating in MIPS (million instructions per second). Rating value is calculated from measured speed and it is normalized with AMD Athlon 64 X2 CPU results. Also Benchmark checks possible hardware errors (RAM errors in most cases). Benchmark uses these settings: (-a1, -d21, -fb32, -mfbt4). You can change only -d. Also you can change number of iterations. Example for 30 iterations: LZMA b 30 Default number of iterations is 10. <Switches> -a{N}: set compression mode 0 = fast, 1 = normal default: 1 (normal) d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB) The maximum value for dictionary size is 1 GB = 2^30 bytes. Dictionary size is calculated as DictionarySize = 2^N bytes. For decompressing file compressed by LZMA method with dictionary size D = 2^N you need about D bytes of memory (RAM). -fb{N}: set number of fast bytes - [5, 273], default: 128 Usually big number gives a little bit better compression ratio and slower compression process. -lc{N}: set number of literal context bits - [0, 8], default: 3 Sometimes lc=4 gives gain for big files. -lp{N}: set number of literal pos bits - [0, 4], default: 0 lp switch is intended for periodical data when period is equal 2^N. For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's better to set lc0, if you change lp switch. -pb{N}: set number of pos bits - [0, 4], default: 2 pb switch is intended for periodical data when period is equal 2^N. -mf{MF_ID}: set Match Finder. Default: bt4. Algorithms from hc* group doesn't provide good compression ratio, but they often works pretty fast in combination with fast mode (-a0). Memory requirements depend from dictionary size (parameter "d" in table below). MF_ID Memory Description bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing. bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing. bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing. hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing. -eos: write End Of Stream marker. By default LZMA doesn't write eos marker, since LZMA decoder knows uncompressed size stored in .lzma file header. -si: Read data from stdin (it will write End Of Stream marker). -so: Write data to stdout Examples: 1) LZMA e file.bin file.lzma -d16 -lc0 compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K) and 0 literal context bits. -lc0 allows to reduce memory requirements for decompression. 2) LZMA e file.bin file.lzma -lc0 -lp2 compresses file.bin to file.lzma with settings suitable for 32-bit periodical data (for example, ARM or MIPS code). 3) LZMA d file.lzma file.bin decompresses file.lzma to file.bin. Compression ratio hints ----------------------- Recommendations --------------- To increase compression ratio for LZMA compressing it's desirable to have aligned data (if it's possible) and also it's desirable to locate data in such order, where code is grouped in one place and data is grouped in other place (it's better than such mixing: code, data, code, data, ...). Using Filters ------------- You can increase compression ratio for some data types, using special filters before compressing. For example, it's possible to increase compression ratio on 5-10% for code for those CPU ISAs: x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC. You can find C/C++ source code of such filters in folder "7zip/Compress/Branch" You can check compression ratio gain of these filters with such 7-Zip commands (example for ARM code): No filter: 7z a a1.7z a.bin -m0=lzma With filter for little-endian ARM code: 7z a a2.7z a.bin -m0=bc_arm -m1=lzma With filter for big-endian ARM code (using additional Swap4 filter): 7z a a3.7z a.bin -m0=swap4 -m1=bc_arm -m2=lzma It works in such manner: Compressing = Filter_encoding + LZMA_encoding Decompressing = LZMA_decoding + Filter_decoding Compressing and decompressing speed of such filters is very high, so it will not increase decompressing time too much. Moreover, it reduces decompression time for LZMA_decoding, since compression ratio with filtering is higher. These filters convert CALL (calling procedure) instructions from relative offsets to absolute addresses, so such data becomes more compressible. Source code of these CALL filters is pretty simple (about 20 lines of C++), so you can convert it from C++ version yourself. For some ISAs (for example, for MIPS) it's impossible to get gain from such filter. LZMA compressed file format --------------------------- Offset Size Description 0 1 Special LZMA properties for compressed data 1 4 Dictionary size (little endian) 5 8 Uncompressed size (little endian). -1 means unknown size 13 Compressed data ANSI-C LZMA Decoder ~~~~~~~~~~~~~~~~~~~ To compile ANSI-C LZMA Decoder you can use one of the following files sets: 1) LzmaDecode.h + LzmaDecode.c + LzmaTest.c (fastest version) 2) LzmaDecode.h + LzmaDecodeSize.c + LzmaTest.c (old size-optimized version) 3) LzmaStateDecode.h + LzmaStateDecode.c + LzmaStateTest.c (zlib-like interface) Memory requirements for LZMA decoding ------------------------------------- LZMA decoder doesn't allocate memory itself, so you must allocate memory and send it to LZMA. Stack usage of LZMA decoding function for local variables is not larger than 200 bytes. How To decompress data ---------------------- LZMA Decoder (ANSI-C version) now supports 5 interfaces: 1) Single-call Decompressing 2) Single-call Decompressing with input stream callback 3) Multi-call Decompressing with output buffer 4) Multi-call Decompressing with input callback and output buffer 5) Multi-call State Decompressing (zlib-like interface) Variant-5 is similar to Variant-4, but Variant-5 doesn't use callback functions. Decompressing steps ------------------- 1) read LZMA properties (5 bytes): unsigned char properties[LZMA_PROPERTIES_SIZE]; 2) read uncompressed size (8 bytes, little-endian) 3) Decode properties: CLzmaDecoderState state; /* it's 24-140 bytes structure, if int is 32-bit */ if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) return PrintError(rs, "Incorrect stream properties"); 4) Allocate memory block for internal Structures: state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); if (state.Probs == 0) return PrintError(rs, kCantAllocateMessage); LZMA decoder uses array of CProb variables as internal structure. By default, CProb is unsigned_short. But you can define _LZMA_PROB32 to make it unsigned_int. It can increase speed on some 32-bit CPUs, but memory usage will be doubled in that case. 5) Main Decompressing You must use one of the following interfaces: 5.1 Single-call Decompressing ----------------------------- When to use: RAM->RAM decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: no defines Memory Requirements: - Input buffer: compressed size - Output buffer: uncompressed size - LZMA Internal Structures (~16 KB for default settings) Interface: int res = LzmaDecode(&state, inStream, compressedSize, &inProcessed, outStream, outSize, &outProcessed); 5.2 Single-call Decompressing with input stream callback -------------------------------------------------------- When to use: File->RAM or Flash->RAM decompressing. Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_IN_CB Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Output buffer: uncompressed size - LZMA Internal Structures (~16 KB for default settings) Interface: typedef struct _CBuffer { ILzmaInCallback InCallback; FILE *File; unsigned char Buffer[kInBufferSize]; } CBuffer; int LzmaReadCompressed(void *object, const unsigned char **buffer, SizeT *size) { CBuffer *bo = (CBuffer *)object; *buffer = bo->Buffer; *size = MyReadFile(bo->File, bo->Buffer, kInBufferSize); return LZMA_RESULT_OK; } CBuffer g_InBuffer; g_InBuffer.File = inFile; g_InBuffer.InCallback.Read = LzmaReadCompressed; int res = LzmaDecode(&state, &g_InBuffer.InCallback, outStream, outSize, &outProcessed); 5.3 Multi-call decompressing with output buffer ----------------------------------------------- When to use: RAM->File decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_OUT_READ Memory Requirements: - Input buffer: compressed size - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { LzmaDecode(&state, inBuffer, inAvail, &inProcessed, g_OutBuffer, outAvail, &outProcessed); inAvail -= inProcessed; inBuffer += inProcessed; } while you need more bytes see LzmaTest.c for more details. 5.4 Multi-call decompressing with input callback and output buffer ------------------------------------------------------------------ When to use: File->File decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_IN_CB, _LZMA_OUT_READ Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { LzmaDecode(&state, &bo.InCallback, g_OutBuffer, outAvail, &outProcessed); } while you need more bytes see LzmaTest.c for more details: 5.5 Multi-call State Decompressing (zlib-like interface) ------------------------------------------------------------------ When to use: file->file decompressing Compile files: LzmaStateDecode.h, LzmaStateDecode.c Compile defines: Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { res = LzmaDecode(&state, inBuffer, inAvail, &inProcessed, g_OutBuffer, outAvail, &outProcessed, finishDecoding); inAvail -= inProcessed; inBuffer += inProcessed; } while you need more bytes see LzmaStateTest.c for more details: 6) Free all allocated blocks Note ---- LzmaDecodeSize.c is size-optimized version of LzmaDecode.c. But compiled code of LzmaDecodeSize.c can be larger than compiled code of LzmaDecode.c. So it's better to use LzmaDecode.c in most cases. EXIT codes ----------- LZMA decoder can return one of the following codes: #define LZMA_RESULT_OK 0 #define LZMA_RESULT_DATA_ERROR 1 If you use callback function for input data and you return some error code, LZMA Decoder also returns that code. LZMA Defines ------------ _LZMA_IN_CB - Use callback for input data _LZMA_OUT_READ - Use read function for output data _LZMA_LOC_OPT - Enable local speed optimizations inside code. _LZMA_LOC_OPT is only for LzmaDecodeSize.c (size-optimized version). _LZMA_LOC_OPT doesn't affect LzmaDecode.c (speed-optimized version) and LzmaStateDecode.c _LZMA_PROB32 - It can increase speed on some 32-bit CPUs, but memory usage will be doubled in that case _LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit. _LZMA_SYSTEM_SIZE_T - Define it if you want to use system's size_t. You can use it to enable 64-bit sizes supporting C++ LZMA Encoder/Decoder ~~~~~~~~~~~~~~~~~~~~~~~~ C++ LZMA code use COM-like interfaces. So if you want to use it, you can study basics of COM/OLE. By default, LZMA Encoder contains all Match Finders. But for compressing it's enough to have just one of them. So for reducing size of compressing code you can define: #define COMPRESS_MF_BT #define COMPRESS_MF_BT4 and it will use only bt4 match finder. --- http://www.7-zip.org http://www.7-zip.org/support.html ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/history.txt�����������������������������������������������0000644�0001750�0000144�00000001710�15104114162�021644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HISTORY of the LZMA SDK ----------------------- Version 4.42b 2006-06-13 -------------------------------------- - Fixed bug in ULZBinTree which caused an infinite loop on some files - Fixed bug in ULZMAEncoder which caused encoding to fail on some files - Fixed code layout problems caused by a mixture of tabs and spaces Version 4.42a 2006-06-05 -------------------------------------- - Added port of LZMA benchmark Version 4.42 2006-06-01 -------------------------------------- - First version of Pascal SDK ported from Java SDK HISTORY of the LZMA ------------------- 2001-2004: Improvements to LZMA compressing/decompressing code, keeping compatibility with original LZMA format 1996-2001: Development of LZMA compression format Some milestones: 2001-08-30: LZMA compression was added to 7-Zip 1999-01-02: First version of 7-Zip was released End of document ��������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/����������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021744� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/RangeCoder/�����������������������������������0000755�0001750�0000144�00000000000�15104114162�023755� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/RangeCoder/URangeEncoder.pas������������������0000644�0001750�0000144�00000010323�15104114162�027142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit URangeEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,ULZMACommon; const kNumBitPriceShiftBits = 6; kTopMask = not ((1 shl 24) - 1); kNumBitModelTotalBits = 11; kBitModelTotal = (1 shl kNumBitModelTotalBits); kNumMoveBits = 5; kNumMoveReducingBits = 2; type TRangeEncoder=class private ProbPrices: array [0..kBitModelTotal shr kNumMoveReducingBits-1] of integer; public Stream:TStream; Low,Position:int64; Range,cacheSize,cache:integer; procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init; procedure FlushData; procedure FlushStream; procedure ShiftLow; procedure EncodeDirectBits(const v,numTotalBits:integer); function GetProcessedSizeAdd:int64; procedure Encode(var probs: array of smallint;const index,symbol:integer); constructor Create; function GetPrice(const Prob,symbol:integer):integer; function GetPrice0(const Prob:integer):integer; function GetPrice1(const Prob:integer):integer; end; var RangeEncoder:TRangeEncoder; procedure InitBitModels(var probs:array of smallint); implementation procedure TRangeEncoder.SetStream(const stream:TStream); begin self.Stream:=Stream; end; procedure TRangeEncoder.ReleaseStream; begin stream:=nil; end; procedure TRangeEncoder.Init; begin position := 0; Low := 0; Range := -1; cacheSize := 1; cache := 0; end; procedure TRangeEncoder.FlushData; var i:integer; begin for i:=0 to 4 do ShiftLow(); end; procedure TRangeEncoder.FlushStream; begin //stream.flush; end; procedure TRangeEncoder.ShiftLow; var LowHi:integer; temp:integer; begin LowHi := (Low shr 32); if (LowHi <> 0) or (Low < int64($FF000000)) then begin position := position + cacheSize; temp := cache; repeat WriteByte(stream,byte(temp + LowHi)); temp := $FF; dec(cacheSize); until(cacheSize = 0); cache := (Low shr 24); end; inc(cacheSize); Low := (Low and integer($FFFFFF)) shl 8; end; procedure TRangeEncoder.EncodeDirectBits(const v,numTotalBits:integer); var i:integer; begin for i := numTotalBits - 1 downto 0 do begin Range := Range shr 1; if (((v shr i) and 1) = 1) then Low := Low + Range; if ((Range and kTopMask) = 0) then begin Range := range shl 8; ShiftLow; end; end; end; function TRangeEncoder.GetProcessedSizeAdd:int64; begin result:=cacheSize + position + 4; end; procedure InitBitModels(var probs:array of smallint); var i:integer; begin for i := 0 to length(probs) -1 do probs[i] := kBitModelTotal shr 1; end; procedure TRangeEncoder.Encode(var probs: array of smallint;const index,symbol:integer); var prob,newbound:integer; begin prob := probs[index]; newBound := integer((Range shr kNumBitModelTotalBits) * prob); if (symbol = 0) then begin Range := newBound; probs[index] := (prob + ((kBitModelTotal - prob) shr kNumMoveBits)); end else begin Low := Low + (newBound and int64($FFFFFFFF)); Range := integer(Range - newBound); probs[index] := (prob - ((prob) shr kNumMoveBits)); end; if ((Range and kTopMask) = 0) then begin Range := Range shl 8; ShiftLow; end; end; constructor TRangeEncoder.Create; var kNumBits:integer; i,j,start,_end:integer; begin kNumBits := (kNumBitModelTotalBits - kNumMoveReducingBits); for i := kNumBits - 1 downto 0 do begin start := 1 shl (kNumBits - i - 1); _end := 1 shl (kNumBits - i); for j := start to _end -1 do ProbPrices[j] := (i shl kNumBitPriceShiftBits) + (((_end - j) shl kNumBitPriceShiftBits) shr (kNumBits - i - 1)); end; end; function TRangeEncoder.GetPrice(const Prob,symbol:integer):integer; begin result:=ProbPrices[(((Prob - symbol) xor ((-symbol))) and (kBitModelTotal - 1)) shr kNumMoveReducingBits]; end; function TRangeEncoder.GetPrice0(const Prob:integer):integer; begin result:= ProbPrices[Prob shr kNumMoveReducingBits]; end; function TRangeEncoder.GetPrice1(const Prob:integer):integer; begin result:= ProbPrices[(kBitModelTotal - Prob) shr kNumMoveReducingBits]; end; initialization RangeEncoder:=TRangeEncoder.Create; finalization RangeEncoder.Free; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/RangeCoder/URangeDecoder.pas������������������0000644�0001750�0000144�00000004742�15104114162�027140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit URangeDecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,ULZMACommon; type TRangeDecoder=class public Range,Code:integer; Stream:TStream; procedure SetStream(const Stream:TStream); procedure ReleaseStream; procedure Init; function DecodeDirectBits(const numTotalBits:integer):integer; function DecodeBit(var probs: array of smallint;const index:integer):integer; end; procedure InitBitModels(var probs: array of smallint); implementation const kTopMask = not ((1 shl 24) - 1); kNumBitModelTotalBits = 11; kBitModelTotal = (1 shl kNumBitModelTotalBits); kNumMoveBits = 5; procedure TRangeDecoder.SetStream(const Stream:TStream); begin self.Stream:=Stream; end; procedure TRangeDecoder.ReleaseStream; begin stream:=nil; end; procedure TRangeDecoder.Init; var i:integer; begin code:=0; Range:=-1; for i:=0 to 4 do begin code:=(code shl 8) or byte(ReadByte(stream)); end; end; function TRangeDecoder.DecodeDirectBits(const numTotalBits:integer):integer; var i,t:integer; begin result:=0; for i := numTotalBits downto 1 do begin range:=range shr 1; t := (cardinal(Code - Range) shr 31); Code := integer(Code - Range and (t - 1)); result := (result shl 1) or (1 - t); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; end; end; function TRangeDecoder.DecodeBit(var probs: array of smallint;const index:integer):integer; var prob,newbound:integer; begin prob:=probs[index]; newbound:= integer((Range shr kNumBitModelTotalBits) * prob); if (integer((integer(Code) xor integer($80000000))) < integer((integer(newBound) xor integer($80000000)))) then begin Range := newBound; probs[index] := (prob + ((kBitModelTotal - prob) shr kNumMoveBits)); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; result:=0; end else begin Range := integer(Range - newBound); Code := integer(Code - newBound); probs[index] := (prob - ((prob) shr kNumMoveBits)); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; result:=1; end; end; procedure InitBitModels(var probs: array of smallint); var i:integer; begin for i:=0 to length(probs)-1 do probs[i] := kBitModelTotal shr 1; end; end. ������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/RangeCoder/UBitTreeEncoder.pas����������������0000644�0001750�0000144�00000006122�15104114162�027446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UBitTreeEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses URangeDecoder,URangeEncoder; type TBitTreeEncoder=class public Models: array of smallint; NumBitLevels:integer; constructor Create(const numBitLevels:integer); procedure Init; procedure Encode(const rangeEncoder:TRangeEncoder;const symbol:integer); procedure ReverseEncode(const rangeEncoder:TRangeEncoder;symbol:integer); function GetPrice(const symbol:integer):integer; function ReverseGetPrice(symbol:integer):integer;overload; end; procedure ReverseEncode(var Models:array of smallint;const startIndex:integer;const rangeEncoder:TRangeEncoder;const NumBitLevels:integer; symbol:integer); function ReverseGetPrice(var Models:array of smallint;const startIndex,NumBitLevels:integer; symbol:integer):integer; implementation constructor TBitTreeEncoder.Create(const numBitLevels:integer); begin self.NumBitLevels:=numBitLevels; setlength(Models,1 shl numBitLevels); end; procedure TBitTreeEncoder.Init; begin URangeDecoder.InitBitModels(Models); end; procedure TBitTreeEncoder.Encode(const rangeEncoder:TRangeEncoder;const symbol:integer); var m,bitindex,bit:integer; begin m := 1; for bitIndex := NumBitLevels -1 downto 0 do begin bit := (symbol shr bitIndex) and 1; rangeEncoder.Encode(Models, m, bit); m := (m shl 1) or bit; end; end; procedure TBitTreeEncoder.ReverseEncode(const rangeEncoder:TRangeEncoder;symbol:integer); var m,i,bit:integer; begin m:=1; for i:= 0 to NumBitLevels -1 do begin bit := symbol and 1; rangeEncoder.Encode(Models, m, bit); m := (m shl 1) or bit; symbol := symbol shr 1; end; end; function TBitTreeEncoder.GetPrice(const symbol:integer):integer; var price,m,bitindex,bit:integer; begin price := 0; m := 1; for bitIndex := NumBitLevels - 1 downto 0 do begin bit := (symbol shr bitIndex) and 1; price := price + RangeEncoder.GetPrice(Models[m], bit); m := (m shl 1) + bit; end; result:=price; end; function TBitTreeEncoder.ReverseGetPrice(symbol:integer):integer; var price,m,i,bit:integer; begin price := 0; m := 1; for i:= NumBitLevels downto 1 do begin bit := symbol and 1; symbol := symbol shr 1; price :=price + RangeEncoder.GetPrice(Models[m], bit); m := (m shl 1) or bit; end; result:=price; end; function ReverseGetPrice(var Models:array of smallint;const startIndex,NumBitLevels:integer;symbol:integer):integer; var price,m,i,bit:integer; begin price := 0; m := 1; for i := NumBitLevels downto 1 do begin bit := symbol and 1; symbol := symbol shr 1; price := price + RangeEncoder.GetPrice(Models[startIndex + m], bit); m := (m shl 1) or bit; end; result:=price; end; procedure ReverseEncode(var Models:array of smallint;const startIndex:integer;const rangeEncoder:TRangeEncoder;const NumBitLevels:integer;symbol:integer); var m,i,bit:integer; begin m:=1; for i := 0 to NumBitLevels -1 do begin bit := symbol and 1; rangeEncoder.Encode(Models, startIndex + m, bit); m := (m shl 1) or bit; symbol := symbol shr 1; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/RangeCoder/UBitTreeDecoder.pas����������������0000644�0001750�0000144�00000003507�15104114162�027440� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UBitTreeDecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses URangeDecoder; type TBitTreeDecoder=class public Models: array of smallint; NumBitLevels:integer; constructor Create(const numBitLevels:integer); procedure Init; function Decode(const rangeDecoder:TRangeDecoder):integer; function ReverseDecode(const rangeDecoder:TRangeDecoder):integer;overload; end; function ReverseDecode(var Models: array of smallint; const startIndex:integer;const rangeDecoder:TRangeDecoder; const NumBitLevels:integer):integer;overload; implementation constructor TBitTreeDecoder.Create(const numBitLevels:integer); begin self.NumBitLevels := numBitLevels; setlength(Models,1 shl numBitLevels); end; procedure TBitTreeDecoder.Init; begin urangedecoder.InitBitModels(Models); end; function TBitTreeDecoder.Decode(const rangeDecoder:TRangeDecoder):integer; var m,bitIndex:integer; begin m:=1; for bitIndex := NumBitLevels downto 1 do begin m:=m shl 1 + rangeDecoder.DecodeBit(Models, m); end; result:=m - (1 shl NumBitLevels); end; function TBitTreeDecoder.ReverseDecode(const rangeDecoder:TRangeDecoder):integer; var m,symbol,bitindex,bit:integer; begin m:=1; symbol:=0; for bitindex:=0 to numbitlevels-1 do begin bit:=rangeDecoder.DecodeBit(Models, m); m:=(m shl 1) + bit; symbol:=symbol or (bit shl bitIndex); end; result:=symbol; end; function ReverseDecode(var Models: array of smallint;const startIndex:integer; const rangeDecoder:TRangeDecoder;const NumBitLevels:integer):integer; var m,symbol,bitindex,bit:integer; begin m:=1; symbol:=0; for bitindex:=0 to numbitlevels -1 do begin bit := rangeDecoder.DecodeBit(Models, startIndex + m); m := (m shl 1) + bit; symbol := symbol or bit shl bitindex; end; result:=symbol; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZMA/�����������������������������������������0000755�0001750�0000144�00000000000�15104114162�022507� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMAEncoder.pas�������������������������0000644�0001750�0000144�00000152752�15104114162�025420� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMAEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses UBitTreeEncoder,ULZMABase,ULZBinTree,URangeEncoder,Classes,Math,ULZMACommon; const EMatchFinderTypeBT2 = 0; EMatchFinderTypeBT4 = 1; kIfinityPrice:integer = $FFFFFFF; kDefaultDictionaryLogSize = 22; kNumFastBytesDefault = $20; kNumLenSpecSymbols = ULZMABase.kNumLowLenSymbols + ULZMABase.kNumMidLenSymbols; kNumOpts = 1 shl 12; kPropSize = 5; type TLZMAEncoder2=class; TLZMALiteralEncoder=class; TLZMAOptimal=class; TLZMALenPriceTableEncoder=class; TLZMAEncoder=class private FOnProgress:TLZMAProgress; procedure DoProgress(const Action:TLZMAProgressAction;const Value:integer); public g_FastPos:array [0..1 shl 11-1] of byte; _state:integer; _previousByte:byte; _repDistances:array [0..ULZMABase.kNumRepDistances-1] of integer; _optimum: array [0..kNumOpts-1] of TLZMAOptimal; _matchFinder:TLZBinTree; _rangeEncoder:TRangeEncoder; _isMatch:array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1]of smallint; _isRep:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG0:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG1:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG2:array [0..ULZMABase.kNumStates-1] of smallint; _isRep0Long:array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1]of smallint; _posSlotEncoder:array [0..ULZMABase.kNumLenToPosStates-1] of TBitTreeEncoder; // kNumPosSlotBits _posEncoders:array [0..ULZMABase.kNumFullDistances-ULZMABase.kEndPosModelIndex-1]of smallint; _posAlignEncoder:TBitTreeEncoder; _lenEncoder:TLZMALenPriceTableEncoder; _repMatchLenEncoder:TLZMALenPriceTableEncoder; _literalEncoder:TLZMALiteralEncoder; _matchDistances:array [0..ULZMABase.kMatchMaxLen*2+1] of integer; _numFastBytes:integer; _longestMatchLength:integer; _numDistancePairs:integer; _additionalOffset:integer; _optimumEndIndex:integer; _optimumCurrentIndex:integer; _longestMatchWasFound:boolean; _posSlotPrices:array [0..1 shl (ULZMABase.kNumPosSlotBits+ULZMABase.kNumLenToPosStatesBits)-1] of integer; _distancesPrices:array [0..ULZMABase.kNumFullDistances shl ULZMABase.kNumLenToPosStatesBits-1] of integer; _alignPrices:array [0..ULZMABase.kAlignTableSize-1] of integer; _alignPriceCount:integer; _distTableSize:integer; _posStateBits:integer; _posStateMask:integer; _numLiteralPosStateBits:integer; _numLiteralContextBits:integer; _dictionarySize:integer; _dictionarySizePrev:integer; _numFastBytesPrev:integer; nowPos64:int64; _finished:boolean; _inStream:TStream; _matchFinderType:integer; _writeEndMark:boolean; _needReleaseMFStream:boolean; reps:array [0..ULZMABase.kNumRepDistances-1]of integer; repLens:array [0..ULZMABase.kNumRepDistances-1] of integer; backRes:integer; processedInSize:int64; processedOutSize:int64; finished:boolean; properties:array [0..kPropSize] of byte; tempPrices:array [0..ULZMABase.kNumFullDistances-1]of integer; _matchPriceCount:integer; constructor Create; destructor Destroy;override; function GetPosSlot(const pos:integer):integer; function GetPosSlot2(const pos:integer):integer; procedure BaseInit; procedure _Create; procedure SetWriteEndMarkerMode(const writeEndMarker:boolean); procedure Init; function ReadMatchDistances:integer; procedure MovePos(const num:integer); function GetRepLen1Price(const state,posState:integer):integer; function GetPureRepPrice(const repIndex, state, posState:integer):integer; function GetRepPrice(const repIndex, len, state, posState:integer):integer; function GetPosLenPrice(const pos, len, posState:integer):integer; function Backward(cur:integer):integer; function GetOptimum(position:integer):integer; function ChangePair(const smallDist, bigDist:integer):boolean; procedure WriteEndMarker(const posState:integer); procedure Flush(const nowPos:integer); procedure ReleaseMFStream; procedure CodeOneBlock(var inSize,outSize:int64;var finished:boolean); procedure FillDistancesPrices; procedure FillAlignPrices; procedure SetOutStream(const outStream:TStream); procedure ReleaseOutStream; procedure ReleaseStreams; procedure SetStreams(const inStream, outStream:TStream;const inSize, outSize:int64); procedure Code(const inStream, outStream:TStream;const inSize, outSize:int64); procedure WriteCoderProperties(const outStream:TStream); function SetAlgorithm(const algorithm:integer):boolean; function SetDictionarySize(dictionarySize:integer):boolean; function SeNumFastBytes(const numFastBytes:integer):boolean; function SetMatchFinder(const matchFinderIndex:integer):boolean; function SetLcLpPb(const lc,lp,pb:integer):boolean; procedure SetEndMarkerMode(const endMarkerMode:boolean); property OnProgress:TLZMAProgress read FOnProgress write FOnProgress; end; TLZMALiteralEncoder=class public m_Coders: array of TLZMAEncoder2; m_NumPrevBits:integer; m_NumPosBits:integer; m_PosMask:integer; procedure _Create(const numPosBits,numPrevBits:integer); destructor Destroy;override; procedure Init; function GetSubCoder(const pos:integer;const prevByte:byte):TLZMAEncoder2; end; TLZMAEncoder2=class public m_Encoders: array[0..$300-1] of smallint; procedure Init; procedure Encode(const rangeEncoder:TRangeEncoder;const symbol:byte); procedure EncodeMatched(const rangeEncoder:TRangeEncoder;const matchByte,symbol:byte); function GetPrice(const matchMode:boolean;const matchByte,symbol:byte):integer; end; TLZMALenEncoder=class public _choice:array[0..1] of smallint; _lowCoder: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of TBitTreeEncoder; _midCoder: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of TBitTreeEncoder; _highCoder:TBitTreeEncoder; constructor Create; destructor Destroy;override; procedure Init(const numPosStates:integer); procedure Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer);virtual; procedure SetPrices(const posState,numSymbols:integer;var prices:array of integer;const st:integer); end; TLZMALenPriceTableEncoder=class(TLZMALenEncoder) public _prices: array [0..ULZMABase.kNumLenSymbols shl ULZMABase.kNumPosStatesBitsEncodingMax-1] of integer; _tableSize:integer; _counters: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of integer; procedure SetTableSize(const tableSize:integer); function GetPrice(const symbol,posState:integer):integer; procedure UpdateTable(const posState:integer); procedure UpdateTables(const numPosStates:integer); procedure Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer);override; end; TLZMAOptimal=class public State:integer; Prev1IsChar:boolean; Prev2:boolean; PosPrev2:integer; BackPrev2:integer; Price:integer; PosPrev:integer; BackPrev:integer; Backs0:integer; Backs1:integer; Backs2:integer; Backs3:integer; procedure MakeAsChar; procedure MakeAsShortRep; function IsShortRep:boolean; end; implementation constructor TLZMAEncoder.Create; var kFastSlots,c,slotFast,j,k:integer; begin kFastSlots := 22; c := 2; g_FastPos[0] := 0; g_FastPos[1] := 1; for slotFast := 2 to kFastSlots -1 do begin k := (1 shl ((slotFast shr 1) - 1)); for j := 0 to k -1 do begin g_FastPos[c] := slotFast; inc(c); end; end; _state := ULZMABase.StateInit(); _matchFinder:=nil; _rangeEncoder:=TRangeEncoder.Create; _posAlignEncoder:=TBitTreeEncoder.Create(ULZMABase.kNumAlignBits); _lenEncoder:=TLZMALenPriceTableEncoder.Create; _repMatchLenEncoder:=TLZMALenPriceTableEncoder.Create; _literalEncoder:=TLZMALiteralEncoder.Create; _numFastBytes:= kNumFastBytesDefault; _distTableSize:= (kDefaultDictionaryLogSize * 2); _posStateBits:= 2; _posStateMask:= (4 - 1); _numLiteralPosStateBits:= 0; _numLiteralContextBits:= 3; _dictionarySize:= (1 shl kDefaultDictionaryLogSize); _dictionarySizePrev:= -1; _numFastBytesPrev:= -1; _matchFinderType:= EMatchFinderTypeBT4; _writeEndMark:= false; _needReleaseMFStream:= false; end; destructor TLZMAEncoder.Destroy; var i:integer; begin _rangeEncoder.Free; _posAlignEncoder.Free; _lenEncoder.Free; _repMatchLenEncoder.Free; _literalEncoder.Free; if _matchFinder<>nil then _matchFinder.Free; for i := 0 to kNumOpts -1 do _optimum[i].Free; for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i].Free; end; procedure TLZMAEncoder._Create; var bt:TLZBinTree; numHashBytes,i:integer; begin if _matchFinder = nil then begin bt := TLZBinTree.Create; numHashBytes:= 4; if _matchFinderType = EMatchFinderTypeBT2 then numHashBytes := 2; bt.SetType(numHashBytes); _matchFinder := bt; end; _literalEncoder._Create(_numLiteralPosStateBits, _numLiteralContextBits); if (_dictionarySize = _dictionarySizePrev) and (_numFastBytesPrev = _numFastBytes) then exit; _matchFinder._Create(_dictionarySize, kNumOpts, _numFastBytes, ULZMABase.kMatchMaxLen + 1); _dictionarySizePrev := _dictionarySize; _numFastBytesPrev := _numFastBytes; for i := 0 to kNumOpts -1 do _optimum[i]:=TLZMAOptimal.Create; for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i] :=TBitTreeEncoder.Create(ULZMABase.kNumPosSlotBits); end; function TLZMAEncoder.GetPosSlot(const pos:integer):integer; begin if (pos < (1 shl 11)) then result:=g_FastPos[pos] else if (pos < (1 shl 21)) then result:=(g_FastPos[pos shr 10] + 20) else result:=(g_FastPos[pos shr 20] + 40); end; function TLZMAEncoder.GetPosSlot2(const pos:integer):integer; begin if (pos < (1 shl 17)) then result:=(g_FastPos[pos shr 6] + 12) else if (pos < (1 shl 27)) then result:=(g_FastPos[pos shr 16] + 32) else result:=(g_FastPos[pos shr 26] + 52); end; procedure TLZMAEncoder.BaseInit; var i:integer; begin _state := ulzmaBase.StateInit; _previousByte := 0; for i := 0 to ULZMABase.kNumRepDistances -1 do _repDistances[i] := 0; end; procedure TLZMAEncoder.SetWriteEndMarkerMode(const writeEndMarker:boolean); begin _writeEndMark := writeEndMarker; end; procedure TLZMAEncoder.Init; var i:integer; begin BaseInit; _rangeEncoder.Init; URangeEncoder.InitBitModels(_isMatch); URangeEncoder.InitBitModels(_isRep0Long); URangeEncoder.InitBitModels(_isRep); URangeEncoder.InitBitModels(_isRepG0); URangeEncoder.InitBitModels(_isRepG1); URangeEncoder.InitBitModels(_isRepG2); URangeEncoder.InitBitModels(_posEncoders); _literalEncoder.Init(); for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i].Init; _lenEncoder.Init(1 shl _posStateBits); _repMatchLenEncoder.Init(1 shl _posStateBits); _posAlignEncoder.Init; _longestMatchWasFound := false; _optimumEndIndex := 0; _optimumCurrentIndex := 0; _additionalOffset := 0; end; function TLZMAEncoder.ReadMatchDistances:integer; var lenRes:integer; begin lenRes := 0; _numDistancePairs := _matchFinder.GetMatches(_matchDistances); if _numDistancePairs > 0 then begin lenRes := _matchDistances[_numDistancePairs - 2]; if lenRes = _numFastBytes then lenRes := lenRes + _matchFinder.GetMatchLen(lenRes - 1, _matchDistances[_numDistancePairs - 1], ULZMABase.kMatchMaxLen - lenRes); end; inc(_additionalOffset); result:=lenRes; end; procedure TLZMAEncoder.MovePos(const num:integer); begin if num > 0 then begin _matchFinder.Skip(num); _additionalOffset := _additionalOffset + num; end; end; function TLZMAEncoder.GetRepLen1Price(const state,posState:integer):integer; begin result:=RangeEncoder.GetPrice0(_isRepG0[state]) + RangeEncoder.GetPrice0(_isRep0Long[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); end; function TLZMAEncoder.GetPureRepPrice(const repIndex, state, posState:integer):integer; var price:integer; begin if repIndex = 0 then begin price := RangeEncoder.GetPrice0(_isRepG0[state]); price := price + RangeEncoder.GetPrice1(_isRep0Long[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); end else begin price := RangeEncoder.GetPrice1(_isRepG0[state]); if repIndex = 1 then price := price + RangeEncoder.GetPrice0(_isRepG1[state]) else begin price := price + RangeEncoder.GetPrice1(_isRepG1[state]); price := price + RangeEncoder.GetPrice(_isRepG2[state], repIndex - 2); end; end; result:=price; end; function TLZMAEncoder.GetRepPrice(const repIndex, len, state, posState:integer):integer; var price:integer; begin price := _repMatchLenEncoder.GetPrice(len - ULZMABase.kMatchMinLen, posState); result := price + GetPureRepPrice(repIndex, state, posState); end; function TLZMAEncoder.GetPosLenPrice(const pos, len, posState:integer):integer; var price,lenToPosState:integer; begin lenToPosState := ULZMABase.GetLenToPosState(len); if pos < ULZMABase.kNumFullDistances then price := _distancesPrices[(lenToPosState * ULZMABase.kNumFullDistances) + pos] else price := _posSlotPrices[(lenToPosState shl ULZMABase.kNumPosSlotBits) + GetPosSlot2(pos)] + _alignPrices[pos and ULZMABase.kAlignMask]; result := price + _lenEncoder.GetPrice(len - ULZMABase.kMatchMinLen, posState); end; function TLZMAEncoder.Backward(cur:integer):integer; var posMem,backMem,posPrev,backCur:integer; begin _optimumEndIndex := cur; posMem := _optimum[cur].PosPrev; backMem := _optimum[cur].BackPrev; repeat if _optimum[cur].Prev1IsChar then begin _optimum[posMem].MakeAsChar; _optimum[posMem].PosPrev := posMem - 1; if _optimum[cur].Prev2 then begin _optimum[posMem - 1].Prev1IsChar := false; _optimum[posMem - 1].PosPrev := _optimum[cur].PosPrev2; _optimum[posMem - 1].BackPrev := _optimum[cur].BackPrev2; end; end; posPrev := posMem; backCur := backMem; backMem := _optimum[posPrev].BackPrev; posMem := _optimum[posPrev].PosPrev; _optimum[posPrev].BackPrev := backCur; _optimum[posPrev].PosPrev := cur; cur := posPrev; until not (cur > 0); backRes := _optimum[0].BackPrev; _optimumCurrentIndex := _optimum[0].PosPrev; result:=_optimumCurrentIndex; end; function TLZMAEncoder.GetOptimum(position:integer):integer; var lenRes,lenMain,numDistancePairs,numAvailableBytes,repMaxIndex,i:integer; matchPrice,repMatchPrice,shortRepPrice,lenEnd,len,repLen,price:integer; curAndLenPrice,normalMatchPrice,Offs,distance,cur,newLen:integer; posPrev,state,pos,curPrice,curAnd1Price,numAvailableBytesFull:integer; lenTest2,t,state2,posStateNext,nextRepMatchPrice,offset:integer; startLen,repIndex,lenTest,lenTestTemp,curAndLenCharPrice:integer; nextMatchPrice,curBack:integer; optimum,opt,nextOptimum:TLZMAOptimal; currentByte,matchByte,posState:byte; nextIsChar:boolean; begin if (_optimumEndIndex <> _optimumCurrentIndex) then begin lenRes := _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; backRes := _optimum[_optimumCurrentIndex].BackPrev; _optimumCurrentIndex := _optimum[_optimumCurrentIndex].PosPrev; result:=lenRes; exit; end;//if optimumendindex _optimumCurrentIndex := 0; _optimumEndIndex := 0; if not _longestMatchWasFound then begin lenMain := ReadMatchDistances(); end else begin //if not longest lenMain := _longestMatchLength; _longestMatchWasFound := false; end;//if not longest else numDistancePairs := _numDistancePairs; numAvailableBytes := _matchFinder.GetNumAvailableBytes + 1; if numAvailableBytes < 2 then begin backRes := -1; result:=1; exit; end;//if numavailable {if numAvailableBytes > ULZMABase.kMatchMaxLen then numAvailableBytes := ULZMABase.kMatchMaxLen;} repMaxIndex := 0; for i := 0 to ULZMABase.kNumRepDistances-1 do begin reps[i] := _repDistances[i]; repLens[i] := _matchFinder.GetMatchLen(0 - 1, reps[i], ULZMABase.kMatchMaxLen); if repLens[i] > repLens[repMaxIndex] then repMaxIndex := i; end;//for i if repLens[repMaxIndex] >= _numFastBytes then begin backRes := repMaxIndex; lenRes := repLens[repMaxIndex]; MovePos(lenRes - 1); result:=lenRes; exit; end;//if replens[] if lenMain >= _numFastBytes then begin backRes := _matchDistances[numDistancePairs - 1] + ULZMABase.kNumRepDistances; MovePos(lenMain - 1); result:=lenMain; exit; end;//if lenMain currentByte := _matchFinder.GetIndexByte(0 - 1); matchByte := _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - 1); if (lenMain < 2) and (currentByte <> matchByte) and (repLens[repMaxIndex] < 2) then begin backRes := -1; result:=1; exit; end;//if lenmain<2 _optimum[0].State := _state; posState := (position and _posStateMask); _optimum[1].Price := RangeEncoder.GetPrice0(_isMatch[(_state shl ULZMABase.kNumPosStatesBitsMax) + posState]) + _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(not ULZMABase.StateIsCharState(_state), matchByte, currentByte); _optimum[1].MakeAsChar(); matchPrice := RangeEncoder.GetPrice1(_isMatch[(_state shl ULZMABase.kNumPosStatesBitsMax) + posState]); repMatchPrice := matchPrice + RangeEncoder.GetPrice1(_isRep[_state]); if matchByte = currentByte then begin shortRepPrice := repMatchPrice + GetRepLen1Price(_state, posState); if shortRepPrice < _optimum[1].Price then begin _optimum[1].Price := shortRepPrice; _optimum[1].MakeAsShortRep; end;//if shortrepprice end;//if matchbyte if lenMain >= repLens[repMaxIndex] then lenEnd:=lenMain else lenEnd:=repLens[repMaxIndex]; if lenEnd < 2 then begin backRes := _optimum[1].BackPrev; result:=1; exit; end;//if lenend<2 _optimum[1].PosPrev := 0; _optimum[0].Backs0 := reps[0]; _optimum[0].Backs1 := reps[1]; _optimum[0].Backs2 := reps[2]; _optimum[0].Backs3 := reps[3]; len := lenEnd; repeat _optimum[len].Price := kIfinityPrice; dec(len); until not (len >= 2); for i := 0 to ULZMABase.kNumRepDistances -1 do begin repLen := repLens[i]; if repLen < 2 then continue; price := repMatchPrice + GetPureRepPrice(i, _state, posState); repeat curAndLenPrice := price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); optimum := _optimum[repLen]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := 0; optimum.BackPrev := i; optimum.Prev1IsChar := false; end;//if curandlenprice dec(replen); until not (repLen >= 2); end;//for i normalMatchPrice := matchPrice + RangeEncoder.GetPrice0(_isRep[_state]); if repLens[0] >= 2 then len:=repLens[0] + 1 else len:=2; if len <= lenMain then begin offs := 0; while len > _matchDistances[offs] do offs := offs + 2; while (true) do begin distance := _matchDistances[offs + 1]; curAndLenPrice := normalMatchPrice + GetPosLenPrice(distance, len, posState); optimum := _optimum[len]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := 0; optimum.BackPrev := distance + ULZMABase.kNumRepDistances; optimum.Prev1IsChar := false; end;//if curlenandprice if len = _matchDistances[offs] then begin offs := offs + 2; if offs = numDistancePairs then break; end;//if len=_match inc(len); end;//while (true) end;//if len<=lenmain cur := 0; while (true) do begin inc(cur); if cur = lenEnd then begin result:=Backward(cur); exit; end;//if cur=lenEnd newLen := ReadMatchDistances; numDistancePairs := _numDistancePairs; if newLen >= _numFastBytes then begin _longestMatchLength := newLen; _longestMatchWasFound := true; result:=Backward(cur); exit; end;//if newlen=_numfast inc(position); posPrev := _optimum[cur].PosPrev; if _optimum[cur].Prev1IsChar then begin dec(posPrev); if _optimum[cur].Prev2 then begin state := _optimum[_optimum[cur].PosPrev2].State; if _optimum[cur].BackPrev2 < ULZMABase.kNumRepDistances then state := ULZMABase.StateUpdateRep(state) else state := ULZMABase.StateUpdateMatch(state); end//if _optimum[cur].Prev2 else state := _optimum[posPrev].State; state := ULZMABase.StateUpdateChar(state); end//if _optimum[cur].Prev1IsChar else state := _optimum[posPrev].State; if posPrev = cur - 1 then begin if _optimum[cur].IsShortRep then state := ULZMABase.StateUpdateShortRep(state) else state := ULZMABase.StateUpdateChar(state); end //if posPrev = cur - 1 else begin if _optimum[cur].Prev1IsChar and _optimum[cur].Prev2 then begin posPrev := _optimum[cur].PosPrev2; pos := _optimum[cur].BackPrev2; state := ULZMABase.StateUpdateRep(state); end//if _optimum[cur].Prev1IsChar else begin pos := _optimum[cur].BackPrev; if pos < ULZMABase.kNumRepDistances then state := ULZMABase.StateUpdateRep(state) else state := ULZMABase.StateUpdateMatch(state); end;//if else _optimum[cur].Prev1IsChar opt := _optimum[posPrev]; if pos < ULZMABase.kNumRepDistances then begin if pos = 0 then begin reps[0] := opt.Backs0; reps[1] := opt.Backs1; reps[2] := opt.Backs2; reps[3] := opt.Backs3; end//if pos=0 else if pos = 1 then begin reps[0] := opt.Backs1; reps[1] := opt.Backs0; reps[2] := opt.Backs2; reps[3] := opt.Backs3; end //if pos=1 else if pos = 2 then begin reps[0] := opt.Backs2; reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs3; end//if pos=2 else begin reps[0] := opt.Backs3; reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs2; end;//else if pos= end// if pos < ULZMABase.kNumRepDistances else begin reps[0] := (pos - ULZMABase.kNumRepDistances); reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs2; end;//if else pos < ULZMABase.kNumRepDistances end;//if else posPrev = cur - 1 _optimum[cur].State := state; _optimum[cur].Backs0 := reps[0]; _optimum[cur].Backs1 := reps[1]; _optimum[cur].Backs2 := reps[2]; _optimum[cur].Backs3 := reps[3]; curPrice := _optimum[cur].Price; currentByte := _matchFinder.GetIndexByte(0 - 1); matchByte := _matchFinder.GetIndexByte(0 - reps[0] - 1 - 1); posState := (position and _posStateMask); curAnd1Price := curPrice + RangeEncoder.GetPrice0(_isMatch[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]) + _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). GetPrice(not ULZMABase.StateIsCharState(state), matchByte, currentByte); nextOptimum := _optimum[cur + 1]; nextIsChar := false; if curAnd1Price < nextOptimum.Price then begin nextOptimum.Price := curAnd1Price; nextOptimum.PosPrev := cur; nextOptimum.MakeAsChar; nextIsChar := true; end;//if curand1price matchPrice := curPrice + RangeEncoder.GetPrice1(_isMatch[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); repMatchPrice := matchPrice + RangeEncoder.GetPrice1(_isRep[state]); if (matchByte = currentByte) and (not ((nextOptimum.PosPrev < cur) and (nextOptimum.BackPrev = 0))) then begin shortRepPrice := repMatchPrice + GetRepLen1Price(state, posState); if shortRepPrice <= nextOptimum.Price then begin nextOptimum.Price := shortRepPrice; nextOptimum.PosPrev := cur; nextOptimum.MakeAsShortRep; nextIsChar := true; end;//if shortRepPrice <= nextOptimum.Price end;//if (matchByte = currentByte) and numAvailableBytesFull := _matchFinder.GetNumAvailableBytes + 1; numAvailableBytesFull := min(kNumOpts - 1 - cur, numAvailableBytesFull); numAvailableBytes := numAvailableBytesFull; if numAvailableBytes < 2 then continue; if numAvailableBytes > _numFastBytes then numAvailableBytes := _numFastBytes; if (not nextIsChar) and (matchByte <> currentByte) then begin // try Literal + rep0 t := min(numAvailableBytesFull - 1, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(0, reps[0], t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateChar(state); posStateNext := (position + 1) and _posStateMask; nextRepMatchPrice := curAnd1Price + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + RangeEncoder.GetPrice1(_isRep[state2]); begin offset := cur + 1 + lenTest2; while lenEnd < offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenend curAndLenPrice := nextRepMatchPrice + GetRepPrice( 0, lenTest2, state2, posStateNext); optimum := _optimum[offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := false; end;//if curandlenprice end;//none end;//if lentest end;//if not nextischar and ... startLen := 2; // speed optimization for repIndex := 0 to ULZMABase.kNumRepDistances -1 do begin lenTest := _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); if lenTest < 2 then continue; lenTestTemp := lenTest; repeat while lenEnd < cur + lenTest do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); optimum := _optimum[cur + lenTest]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur; optimum.BackPrev := repIndex; optimum.Prev1IsChar := false; end;//if curandlen dec(lenTest); until not (lenTest >= 2); lenTest := lenTestTemp; if repIndex = 0 then startLen := lenTest + 1; // if (_maxMode) if lenTest < numAvailableBytesFull then begin t := min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(lenTest, reps[repIndex], t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateRep(state); posStateNext := (position + lenTest) and _posStateMask; curAndLenCharPrice := repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + RangeEncoder.GetPrice0(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + _literalEncoder.GetSubCoder(position + lenTest, _matchFinder.GetIndexByte(lenTest - 1 - 1)).GetPrice(true, _matchFinder.GetIndexByte(lenTest - 1 - (reps[repIndex] + 1)), _matchFinder.GetIndexByte(lenTest - 1)); state2 := ULZMABase.StateUpdateChar(state2); posStateNext := (position + lenTest + 1) and _posStateMask; nextMatchPrice := curAndLenCharPrice + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]); nextRepMatchPrice := nextMatchPrice + RangeEncoder.GetPrice1(_isRep[state2]); // for(; lenTest2 >= 2; lenTest2--) begin offset := lenTest + 1 + lenTest2; while lenEnd < cur + offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); optimum := _optimum[cur + offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + lenTest + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := true; optimum.PosPrev2 := cur; optimum.BackPrev2 := repIndex; end;//if curAndLenPrice < optimum.Price end;//none end;//if lenTest2 >= 2 end;//if lenTest < numAvailableBytesFull end;//for repIndex if newLen > numAvailableBytes then begin newLen := numAvailableBytes; numDistancePairs := 0; while newLen > _matchDistances[numDistancePairs] do numDistancePairs := numDistancePairs + 2; _matchDistances[numDistancePairs] := newLen; numDistancePairs := numDistancePairs + 2; end;//if newLen > numAvailableBytes if newLen >= startLen then begin normalMatchPrice := matchPrice + RangeEncoder.GetPrice0(_isRep[state]); while lenEnd < cur + newLen do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd offs := 0; while startLen > _matchDistances[offs] do offs := offs + 2; lenTest := startLen; while (true) do begin curBack := _matchDistances[offs + 1]; curAndLenPrice := normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); optimum := _optimum[cur + lenTest]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur; optimum.BackPrev := curBack + ULZMABase.kNumRepDistances; optimum.Prev1IsChar := false; end;//if curAndLenPrice < optimum.Price if lenTest = _matchDistances[offs] then begin if lenTest < numAvailableBytesFull then begin t := min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(lenTest, curBack, t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateMatch(state); posStateNext := (position + lenTest) and _posStateMask; curAndLenCharPrice := curAndLenPrice + RangeEncoder.GetPrice0(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + _literalEncoder.GetSubCoder(position + lenTest, _matchFinder.GetIndexByte(lenTest - 1 - 1)). GetPrice(true, _matchFinder.GetIndexByte(lenTest - (curBack + 1) - 1), _matchFinder.GetIndexByte(lenTest - 1)); state2 := ULZMABase.StateUpdateChar(state2); posStateNext := (position + lenTest + 1) and _posStateMask; nextMatchPrice := curAndLenCharPrice + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]); nextRepMatchPrice := nextMatchPrice + RangeEncoder.GetPrice1(_isRep[state2]); offset := lenTest + 1 + lenTest2; while lenEnd < cur + offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); optimum := _optimum[cur + offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + lenTest + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := true; optimum.PosPrev2 := cur; optimum.BackPrev2 := curBack + ULZMABase.kNumRepDistances; end;//if curAndLenPrice < optimum.Price end;//if lenTest2 >= 2 end;//lenTest < numAvailableBytesFull offs :=offs + 2; if offs = numDistancePairs then break; end;//if lenTest = _matchDistances[offs] inc(lenTest); end;//while(true) end;//if newLen >= startLen end;//while (true) end; function TLZMAEncoder.ChangePair(const smallDist, bigDist:integer):boolean; var kDif:integer; begin kDif := 7; result:= (smallDist < (1 shl (32 - kDif))) and (bigDist >= (smallDist shl kDif)); end; procedure TLZMAEncoder.WriteEndMarker(const posState:integer); var len,posSlot,lenToPosState,footerBits,posReduced:integer; begin if not _writeEndMark then exit; _rangeEncoder.Encode(_isMatch, (_state shl ULZMABase.kNumPosStatesBitsMax) + posState, 1); _rangeEncoder.Encode(_isRep, _state, 0); _state := ULZMABase.StateUpdateMatch(_state); len := ULZMABase.kMatchMinLen; _lenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); posSlot := (1 shl ULZMABase.kNumPosSlotBits) - 1; lenToPosState := ULZMABase.GetLenToPosState(len); _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); footerBits := 30; posReduced := (1 shl footerBits) - 1; _rangeEncoder.EncodeDirectBits(posReduced shr ULZMABase.kNumAlignBits, footerBits - ULZMABase.kNumAlignBits); _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced and ULZMABase.kAlignMask); end; procedure TLZMAEncoder.Flush(const nowPos:integer); begin ReleaseMFStream; WriteEndMarker(nowPos and _posStateMask); _rangeEncoder.FlushData(); _rangeEncoder.FlushStream(); end; procedure TLZMAEncoder.CodeOneBlock(var inSize,outSize:int64;var finished:boolean); var progressPosValuePrev:int64; posState,len,pos,complexState,distance,i,posSlot,lenToPosState:integer; footerBits,baseVal,posReduced:integer; curByte,matchByte:byte; subcoder:TLZMAEncoder2; begin inSize := 0; outSize := 0; finished := true; if _inStream <>nil then begin _matchFinder.SetStream(_inStream); _matchFinder.Init; _needReleaseMFStream := true; _inStream := nil; end; if _finished then exit; _finished := true; progressPosValuePrev := nowPos64; if nowPos64 = 0 then begin if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(nowPos64); exit; end; ReadMatchDistances; posState := integer(nowPos64) and _posStateMask; _rangeEncoder.Encode(_isMatch, (_state shl ULZMABase.kNumPosStatesBitsMax) + posState, 0); _state := ULZMABase.StateUpdateChar(_state); curByte := _matchFinder.GetIndexByte(0 - _additionalOffset); _literalEncoder.GetSubCoder(integer(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); _previousByte := curByte; dec(_additionalOffset); inc(nowPos64); end; if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(integer(nowPos64)); exit; end; while true do begin len := GetOptimum(integer(nowPos64)); pos := backRes; posState := integer(nowPos64) and _posStateMask; complexState := (_state shl ULZMABase.kNumPosStatesBitsMax) + posState; if (len = 1) and (pos = -1) then begin _rangeEncoder.Encode(_isMatch, complexState, 0); curByte := _matchFinder.GetIndexByte(0 - _additionalOffset); subCoder := _literalEncoder.GetSubCoder(integer(nowPos64), _previousByte); if not ULZMABase.StateIsCharState(_state) then begin matchByte := _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - _additionalOffset); subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); end else subCoder.Encode(_rangeEncoder, curByte); _previousByte := curByte; _state := ULZMABase.StateUpdateChar(_state); end else begin _rangeEncoder.Encode(_isMatch, complexState, 1); if pos < ULZMABase.kNumRepDistances then begin _rangeEncoder.Encode(_isRep, _state, 1); if pos = 0 then begin _rangeEncoder.Encode(_isRepG0, _state, 0); if len = 1 then _rangeEncoder.Encode(_isRep0Long, complexState, 0) else _rangeEncoder.Encode(_isRep0Long, complexState, 1); end else begin _rangeEncoder.Encode(_isRepG0, _state, 1); if pos = 1 then _rangeEncoder.Encode(_isRepG1, _state, 0) else begin _rangeEncoder.Encode(_isRepG1, _state, 1); _rangeEncoder.Encode(_isRepG2, _state, pos - 2); end; end; if len = 1 then _state := ULZMABase.StateUpdateShortRep(_state) else begin _repMatchLenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); _state := ULZMABase.StateUpdateRep(_state); end; distance := _repDistances[pos]; if pos <> 0 then begin for i := pos downto 1 do _repDistances[i] := _repDistances[i - 1]; _repDistances[0] := distance; end; end else begin _rangeEncoder.Encode(_isRep, _state, 0); _state := ULZMABase.StateUpdateMatch(_state); _lenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); pos := pos - ULZMABase.kNumRepDistances; posSlot := GetPosSlot(pos); lenToPosState := ULZMABase.GetLenToPosState(len); _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); if posSlot >= ULZMABase.kStartPosModelIndex then begin footerBits := integer((posSlot shr 1) - 1); baseVal := ((2 or (posSlot and 1)) shl footerBits); posReduced := pos - baseVal; if posSlot < ULZMABase.kEndPosModelIndex then UBitTreeEncoder.ReverseEncode(_posEncoders, baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced) else begin _rangeEncoder.EncodeDirectBits(posReduced shr ULZMABase.kNumAlignBits, footerBits - ULZMABase.kNumAlignBits); _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced and ULZMABase.kAlignMask); inc(_alignPriceCount); end; end; distance := pos; for i := ULZMABase.kNumRepDistances - 1 downto 1 do _repDistances[i] := _repDistances[i - 1]; _repDistances[0] := distance; inc(_matchPriceCount); end; _previousByte := _matchFinder.GetIndexByte(len - 1 - _additionalOffset); end; _additionalOffset := _additionalOffset - len; nowPos64 := nowPos64 + len; if _additionalOffset = 0 then begin // if (!_fastMode) if _matchPriceCount >= (1 shl 7) then FillDistancesPrices; if _alignPriceCount >= ULZMABase.kAlignTableSize then FillAlignPrices; inSize := nowPos64; outSize := _rangeEncoder.GetProcessedSizeAdd; if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(integer(nowPos64)); exit; end; if (nowPos64 - progressPosValuePrev >= (1 shl 12)) then begin _finished := false; finished := false; exit; end; end; end; end; procedure TLZMAEncoder.ReleaseMFStream; begin if (_matchFinder <>nil) and _needReleaseMFStream then begin _matchFinder.ReleaseStream; _needReleaseMFStream := false; end; end; procedure TLZMAEncoder.SetOutStream(const outStream:TStream); begin _rangeEncoder.SetStream(outStream); end; procedure TLZMAEncoder.ReleaseOutStream; begin _rangeEncoder.ReleaseStream; end; procedure TLZMAEncoder.ReleaseStreams; begin ReleaseMFStream; ReleaseOutStream; end; procedure TLZMAEncoder.SetStreams(const inStream, outStream:TStream;const inSize, outSize:int64); begin _inStream := inStream; _finished := false; _Create(); SetOutStream(outStream); Init(); // if (!_fastMode) FillDistancesPrices; FillAlignPrices; _lenEncoder.SetTableSize(_numFastBytes + 1 - ULZMABase.kMatchMinLen); _lenEncoder.UpdateTables(1 shl _posStateBits); _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - ULZMABase.kMatchMinLen); _repMatchLenEncoder.UpdateTables(1 shl _posStateBits); nowPos64 := 0; end; procedure TLZMAEncoder.Code(const inStream, outStream:TStream;const inSize, outSize:int64); var lpos:int64; progint:int64; inputsize:int64; begin if insize=-1 then inputsize:=instream.Size-instream.Position else inputsize:=insize; progint:=inputsize div CodeProgressInterval; lpos:=progint; _needReleaseMFStream := false; DoProgress(LPAMax,inputsize); try SetStreams(inStream, outStream, inSize, outSize); while true do begin CodeOneBlock(processedInSize, processedOutSize, finished); if finished then begin DoProgress(LPAPos,inputsize); exit; end; if (processedInSize>=lpos) then begin DoProgress(LPAPos,processedInSize); lpos:=lpos+progint; end; end; finally ReleaseStreams(); end; end; procedure TLZMAEncoder.WriteCoderProperties(const outStream:TStream); var i:integer; begin properties[0] := (_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits; for i := 0 to 3 do properties[1 + i] := byte(_dictionarySize shr (8 * i)); outStream.write(properties, kPropSize); end; procedure TLZMAEncoder.FillDistancesPrices; var i,posSlot,footerBits,baseVal,lenToPosState,st,st2:integer; encoder:TBitTreeEncoder; begin for i := ULZMABase.kStartPosModelIndex to ULZMABase.kNumFullDistances -1 do begin posSlot := GetPosSlot(i); footerBits := integer((posSlot shr 1) - 1); baseVal := (2 or (posSlot and 1)) shl footerBits; tempPrices[i] := ReverseGetPrice(_posEncoders, baseVal - posSlot - 1, footerBits, i - baseVal); end; for lenToPosState := 0 to ULZMABase.kNumLenToPosStates -1 do begin encoder := _posSlotEncoder[lenToPosState]; st := (lenToPosState shl ULZMABase.kNumPosSlotBits); for posSlot := 0 to _distTableSize -1 do _posSlotPrices[st + posSlot] := encoder.GetPrice(posSlot); for posSlot := ULZMABase.kEndPosModelIndex to _distTableSize -1 do _posSlotPrices[st + posSlot] := _posSlotPrices[st + posSlot] + ((((posSlot shr 1) - 1) - ULZMABase.kNumAlignBits) shl kNumBitPriceShiftBits); st2 := lenToPosState * ULZMABase.kNumFullDistances; for i := 0 to ULZMABase.kStartPosModelIndex -1 do _distancesPrices[st2 + i] := _posSlotPrices[st + i]; for i := ULZMABase.kStartPosModelIndex to ULZMABase.kNumFullDistances-1 do _distancesPrices[st2 + i] := _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; end; _matchPriceCount := 0; end; procedure TLZMAEncoder.FillAlignPrices; var i:integer; begin for i := 0 to ULZMABase.kAlignTableSize -1 do _alignPrices[i] := _posAlignEncoder.ReverseGetPrice(i); _alignPriceCount := 0; end; function TLZMAEncoder.SetAlgorithm(const algorithm:integer):boolean; begin { _fastMode = (algorithm == 0); _maxMode = (algorithm >= 2); } result:=true; end; function TLZMAEncoder.SetDictionarySize(dictionarySize:integer):boolean; var kDicLogSizeMaxCompress,dicLogSize:integer; begin kDicLogSizeMaxCompress := 29; if (dictionarySize < (1 shl ULZMABase.kDicLogSizeMin)) or (dictionarySize > (1 shl kDicLogSizeMaxCompress)) then begin result:=false; exit; end; _dictionarySize := dictionarySize; dicLogSize := 0; while dictionarySize > (1 shl dicLogSize) do inc(dicLogSize); _distTableSize := dicLogSize * 2; result:=true; end; function TLZMAEncoder.SeNumFastBytes(const numFastBytes:integer):boolean; begin if (numFastBytes < 5) or (numFastBytes > ULZMABase.kMatchMaxLen) then begin result:=false; exit; end; _numFastBytes := numFastBytes; result:=true; end; function TLZMAEncoder.SetMatchFinder(const matchFinderIndex:integer):boolean; var matchFinderIndexPrev:integer; begin if (matchFinderIndex < 0) or (matchFinderIndex > 2) then begin result:=false; exit; end; matchFinderIndexPrev := _matchFinderType; _matchFinderType := matchFinderIndex; if (_matchFinder <> nil) and (matchFinderIndexPrev <> _matchFinderType) then begin _dictionarySizePrev := -1; _matchFinder := nil; end; result:=true; end; function TLZMAEncoder.SetLcLpPb(const lc,lp,pb:integer):boolean; begin if (lp < 0) or (lp > ULZMABase.kNumLitPosStatesBitsEncodingMax) or (lc < 0) or (lc > ULZMABase.kNumLitContextBitsMax) or (pb < 0) or (pb > ULZMABase.kNumPosStatesBitsEncodingMax) then begin result:=false; exit; end; _numLiteralPosStateBits := lp; _numLiteralContextBits := lc; _posStateBits := pb; _posStateMask := ((1) shl _posStateBits) - 1; result:=true; end; procedure TLZMAEncoder.SetEndMarkerMode(const endMarkerMode:boolean); begin _writeEndMark := endMarkerMode; end; procedure TLZMAEncoder2.Init; begin URangeEncoder.InitBitModels(m_Encoders); end; procedure TLZMAEncoder2.Encode(const rangeEncoder:TRangeEncoder;const symbol:byte); var context:integer; bit,i:integer; begin context := 1; for i := 7 downto 0 do begin bit := ((symbol shr i) and 1); rangeEncoder.Encode(m_Encoders, context, bit); context := (context shl 1) or bit; end; end; procedure TLZMAEncoder2.EncodeMatched(const rangeEncoder:TRangeEncoder;const matchByte,symbol:byte); var context,i,bit,state,matchbit:integer; same:boolean; begin context := 1; same := true; for i := 7 downto 0 do begin bit := ((symbol shr i) and 1); state := context; if same then begin matchBit := ((matchByte shr i) and 1); state :=state + ((1 + matchBit) shl 8); same := (matchBit = bit); end; rangeEncoder.Encode(m_Encoders, state, bit); context := (context shl 1) or bit; end; end; function TLZMAEncoder2.GetPrice(const matchMode:boolean;const matchByte,symbol:byte):integer; var price,context,i,matchbit,bit:integer; begin price := 0; context := 1; i := 7; if matchMode then while i>=0 do begin matchBit := (matchByte shr i) and 1; bit := (symbol shr i) and 1; price := price + RangeEncoder.GetPrice(m_Encoders[((1 + matchBit) shl 8) + context], bit); context := (context shl 1) or bit; if (matchBit <> bit) then begin dec(i); break; end; dec(i); end; while i>=0 do begin bit := (symbol shr i) and 1; price := price + RangeEncoder.GetPrice(m_Encoders[context], bit); context := (context shl 1) or bit; dec(i); end; result:=price; end; procedure TLZMALiteralEncoder._Create(const numPosBits,numPrevBits:integer); var numstates:integer; i:integer; begin if (length(m_Coders)<>0) and (m_NumPrevBits = numPrevBits) and (m_NumPosBits = numPosBits) then exit; m_NumPosBits := numPosBits; m_PosMask := (1 shl numPosBits) - 1; m_NumPrevBits := numPrevBits; numStates := 1 shl (m_NumPrevBits + m_NumPosBits); setlength(m_coders,numStates); for i := 0 to numStates-1 do m_Coders[i] := TLZMAEncoder2.Create; end; destructor TLZMALiteralEncoder.Destroy; var i:integer; begin for i:=low(m_Coders) to high(m_Coders) do if m_Coders[i]<>nil then m_Coders[i].Free; inherited; end; procedure TLZMALiteralEncoder.Init; var numstates,i:integer; begin numStates := 1 shl (m_NumPrevBits + m_NumPosBits); for i := 0 to numStates-1 do m_Coders[i].Init; end; function TLZMALiteralEncoder.GetSubCoder(const pos:integer;const prevByte:byte):TLZMAEncoder2; begin result:=m_Coders[((pos and m_PosMask) shl m_NumPrevBits) + ((prevByte and $FF) shr (8 - m_NumPrevBits))]; end; constructor TLZMALenEncoder.Create; var posState:integer; begin _highCoder := TBitTreeEncoder.Create(ULZMABase.kNumHighLenBits); for posState := 0 to ULZMABase.kNumPosStatesEncodingMax-1 do begin _lowCoder[posState] := TBitTreeEncoder.Create(ULZMABase.kNumLowLenBits); _midCoder[posState] := TBitTreeEncoder.Create(ULZMABase.kNumMidLenBits); end; end; destructor TLZMALenEncoder.Destroy; var posState:integer; begin _highCoder.Free; for posState := 0 to ULZMABase.kNumPosStatesEncodingMax-1 do begin _lowCoder[posState].Free; _midCoder[posState].Free; end; inherited; end; procedure TLZMALenEncoder.Init(const numPosStates:integer); var posState:integer; begin URangeEncoder.InitBitModels(_choice); for posState := 0 to numPosStates -1 do begin _lowCoder[posState].Init; _midCoder[posState].Init; end; _highCoder.Init; end; procedure TLZMALenEncoder.Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer); begin if (symbol < ULZMABase.kNumLowLenSymbols) then begin rangeEncoder.Encode(_choice, 0, 0); _lowCoder[posState].Encode(rangeEncoder, symbol); end else begin symbol := symbol - ULZMABase.kNumLowLenSymbols; rangeEncoder.Encode(_choice, 0, 1); if symbol < ULZMABase.kNumMidLenSymbols then begin rangeEncoder.Encode(_choice, 1, 0); _midCoder[posState].Encode(rangeEncoder, symbol); end else begin rangeEncoder.Encode(_choice, 1, 1); _highCoder.Encode(rangeEncoder, symbol - ULZMABase.kNumMidLenSymbols); end; end; end; procedure TLZMALenEncoder.SetPrices(const posState,numSymbols:integer;var prices:array of integer;const st:integer); var a0,a1,b0,b1,i:integer; begin a0 := RangeEncoder.GetPrice0(_choice[0]); a1 := RangeEncoder.GetPrice1(_choice[0]); b0 := a1 + RangeEncoder.GetPrice0(_choice[1]); b1 := a1 + RangeEncoder.GetPrice1(_choice[1]); i:=0; while i<ULZMABase.kNumLowLenSymbols do begin if i >= numSymbols then exit; prices[st + i] := a0 + _lowCoder[posState].GetPrice(i); inc(i); end; while i < ULZMABase.kNumLowLenSymbols + ULZMABase.kNumMidLenSymbols do begin if i >= numSymbols then exit; prices[st + i] := b0 + _midCoder[posState].GetPrice(i - ULZMABase.kNumLowLenSymbols); inc(i); end; while i < numSymbols do begin prices[st + i] := b1 + _highCoder.GetPrice(i - ULZMABase.kNumLowLenSymbols - ULZMABase.kNumMidLenSymbols); inc(i); end; end; procedure TLZMALenPriceTableEncoder.SetTableSize(const tableSize:integer); begin _tableSize := tableSize; end; function TLZMALenPriceTableEncoder.GetPrice(const symbol,posState:integer):integer; begin result:=_prices[posState * ULZMABase.kNumLenSymbols + symbol] end; procedure TLZMALenPriceTableEncoder.UpdateTable(const posState:integer); begin SetPrices(posState, _tableSize, _prices, posState * ULZMABase.kNumLenSymbols); _counters[posState] := _tableSize; end; procedure TLZMALenPriceTableEncoder.UpdateTables(const numPosStates:integer); var posState:integer; begin for posState := 0 to numPosStates -1 do UpdateTable(posState); end; procedure TLZMALenPriceTableEncoder.Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer); begin inherited Encode(rangeEncoder, symbol, posState); dec(_counters[posState]); if (_counters[posState] = 0) then UpdateTable(posState); end; procedure TLZMAOptimal.MakeAsChar; begin BackPrev := -1; Prev1IsChar := false; end; procedure TLZMAOptimal.MakeAsShortRep; begin BackPrev := 0; Prev1IsChar := false; end; function TLZMAOptimal.IsShortRep:boolean; begin result:=BackPrev = 0; end; procedure TLZMAEncoder.DoProgress(const Action:TLZMAProgressAction;const Value:integer); begin if assigned(fonprogress) then fonprogress(action,value); end; end. ����������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMADecoder.pas�������������������������0000644�0001750�0000144�00000034140�15104114162�025374� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMADecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses ULZMABase,UBitTreeDecoder,ULZOutWindow,URangeDecoder,Math,Classes,ULZMACommon; type TLZMALenDecoder = class; TLZMALiteralDecoder = class; TLZMADecoder = class private FOnProgress:TLZMAProgress; procedure DoProgress(const Action:TLZMAProgressAction;const Value:integer); public m_OutWindow:TLZOutWindow; m_RangeDecoder:TRangeDecoder; m_IsMatchDecoders: array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1] of smallint; m_IsRepDecoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG0Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG1Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG2Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRep0LongDecoders: array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1] of smallint; m_PosSlotDecoder: array [0..ULZMABase.kNumLenToPosStates-1] of TBitTreeDecoder; m_PosDecoders: array [0..ULZMABase.kNumFullDistances - ULZMABase.kEndPosModelIndex-1] of smallint; m_PosAlignDecoder:TBitTreeDecoder; m_LenDecoder:TLZMALenDecoder; m_RepLenDecoder:TLZMALenDecoder; m_LiteralDecoder:TLZMALiteralDecoder; m_DictionarySize:integer; m_DictionarySizeCheck:integer; m_PosStateMask:integer; constructor Create; destructor Destroy;override; function SetDictionarySize(const dictionarySize:integer):boolean; function SetLcLpPb(const lc,lp,pb:integer):boolean; procedure Init; function Code(const inStream,outStream:TStream;outSize:int64):boolean; function SetDecoderProperties(const properties:array of byte):boolean; property OnProgress:TLZMAProgress read FOnProgress write FOnProgress; end; TLZMALenDecoder = class public m_Choice:array [0..1] of smallint; m_LowCoder: array[0..ULZMABase.kNumPosStatesMax-1] of TBitTreeDecoder; m_MidCoder: array[0..ULZMABase.kNumPosStatesMax-1] of TBitTreeDecoder; m_HighCoder: TBitTreeDecoder; m_NumPosStates:integer; constructor Create; destructor Destroy;override; procedure _Create(const numPosStates:integer); procedure Init; function Decode(const rangeDecoder:TRangeDecoder;const posState:integer):integer; end; TLZMADecoder2 = class public m_Decoders: array [0..$300-1] of smallint; procedure Init; function DecodeNormal(const rangeDecoder:TRangeDecoder):byte; function DecodeWithMatchByte(const rangeDecoder:TRangeDecoder;matchByte:byte):byte; end; TLZMALiteralDecoder = class public m_Coders: array of TLZMADecoder2; m_NumPrevBits:integer; m_NumPosBits:integer; m_PosMask:integer; procedure _Create(const numPosBits, numPrevBits:integer); procedure Init; function GetDecoder(const pos:integer;const prevByte:byte):TLZMADecoder2; destructor Destroy;override; end; implementation constructor TLZMALenDecoder.Create; begin m_HighCoder:=TBitTreeDecoder.Create(ULZMABase.kNumHighLenBits); m_NumPosStates:=0; end; destructor TLZMALenDecoder.Destroy; var i:integer; begin m_HighCoder.free; for i:=low(m_LowCoder) to high(m_LowCoder) do begin if m_LowCoder[i]<>nil then m_LowCoder[i].free; if m_MidCoder[i]<>nil then m_MidCoder[i].free; end; inherited; end; procedure TLZMALenDecoder._Create(const numPosStates:integer); begin while m_NumPosStates < numPosStates do begin m_LowCoder[m_NumPosStates] := TBitTreeDecoder.Create(ULZMABase.kNumLowLenBits); m_MidCoder[m_NumPosStates] := TBitTreeDecoder.Create(ULZMABase.kNumMidLenBits); inc(m_NumPosStates); end; end; procedure TLZMALenDecoder.Init; var posState:integer; begin URangeDecoder.InitBitModels(m_Choice); for posState := 0 to m_NumPosStates-1 do begin m_LowCoder[posState].Init; m_MidCoder[posState].Init; end; m_HighCoder.Init; end; function TLZMALenDecoder.Decode(const rangeDecoder:TRangeDecoder;const posState:integer):integer; var symbol:integer; begin if (rangeDecoder.DecodeBit(m_Choice, 0) = 0) then begin result:=m_LowCoder[posState].Decode(rangeDecoder); exit; end; symbol := ULZMABase.kNumLowLenSymbols; if (rangeDecoder.DecodeBit(m_Choice, 1) = 0) then symbol := symbol + m_MidCoder[posState].Decode(rangeDecoder) else symbol := symbol + ULZMABase.kNumMidLenSymbols + m_HighCoder.Decode(rangeDecoder); result:=symbol; end; procedure TLZMADecoder2.Init; begin URangeDecoder.InitBitModels(m_Decoders); end; function TLZMADecoder2.DecodeNormal(const rangeDecoder:TRangeDecoder):byte; var symbol:integer; begin symbol := 1; repeat symbol := (symbol shl 1) or rangeDecoder.DecodeBit(m_Decoders, symbol); until not (symbol < $100); result:= byte(symbol); end; function TLZMADecoder2.DecodeWithMatchByte(const rangeDecoder:TRangeDecoder;matchByte:byte):byte; var symbol:integer; matchbit:integer; bit:integer; begin symbol := 1; repeat matchBit := (matchByte shr 7) and 1; matchByte := byte(matchByte shl 1); bit := rangeDecoder.DecodeBit(m_Decoders, ((1 + matchBit) shl 8) + symbol); symbol := (symbol shl 1) or bit; if (matchBit <> bit) then begin while (symbol < $100) do begin symbol := (symbol shl 1) or rangeDecoder.DecodeBit(m_Decoders, symbol); end; break; end; until not (symbol < $100); result:= byte(symbol); end; procedure TLZMALiteralDecoder._Create(const numPosBits, numPrevBits:integer); var numStates,i:integer; begin if (length(m_Coders) <> 0) and (m_NumPrevBits = numPrevBits) and (m_NumPosBits = numPosBits) then exit; m_NumPosBits := numPosBits; m_PosMask := (1 shl numPosBits) - 1; m_NumPrevBits := numPrevBits; numStates := 1 shl (m_NumPrevBits + m_NumPosBits); setlength(m_Coders,numStates); for i :=0 to numStates-1 do m_Coders[i] := TLZMADecoder2.Create; end; destructor TLZMALiteralDecoder.Destroy; var i:integer; begin for i :=low(m_Coders) to high(m_Coders) do if m_Coders[i]<>nil then m_Coders[i].Free; inherited; end; procedure TLZMALiteralDecoder.Init; var numStates,i:integer; begin numStates := 1 shl (m_NumPrevBits + m_NumPosBits); for i := 0 to numStates -1 do m_Coders[i].Init; end; function TLZMALiteralDecoder.GetDecoder(const pos:integer;const prevByte:byte):TLZMADecoder2; begin result:=m_Coders[((pos and m_PosMask) shl m_NumPrevBits) + ((prevByte and $FF) shr (8 - m_NumPrevBits))]; end; constructor TLZMADecoder.Create; var i:integer; begin FOnProgress:=nil; m_OutWindow:=TLZOutWindow.Create; m_RangeDecoder:=TRangeDecoder.Create; m_PosAlignDecoder:=TBitTreeDecoder.Create(ULZMABase.kNumAlignBits); m_LenDecoder:=TLZMALenDecoder.Create; m_RepLenDecoder:=TLZMALenDecoder.Create; m_LiteralDecoder:=TLZMALiteralDecoder.Create; m_DictionarySize:= -1; m_DictionarySizeCheck:= -1; for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i] :=TBitTreeDecoder.Create(ULZMABase.kNumPosSlotBits); end; destructor TLZMADecoder.Destroy; var i:integer; begin m_OutWindow.Free; m_RangeDecoder.Free; m_PosAlignDecoder.Free; m_LenDecoder.Free; m_RepLenDecoder.Free; m_LiteralDecoder.Free; for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i].Free; end; function TLZMADecoder.SetDictionarySize(const dictionarySize:integer):boolean; begin if dictionarySize < 0 then result:=false else begin if m_DictionarySize <> dictionarySize then begin m_DictionarySize := dictionarySize; m_DictionarySizeCheck := max(m_DictionarySize, 1); m_OutWindow._Create(max(m_DictionarySizeCheck, (1 shl 12))); end; result:=true; end; end; function TLZMADecoder.SetLcLpPb(const lc,lp,pb:integer):boolean; var numPosStates:integer; begin if (lc > ULZMABase.kNumLitContextBitsMax) or (lp > 4) or (pb > ULZMABase.kNumPosStatesBitsMax) then begin result:=false; exit; end; m_LiteralDecoder._Create(lp, lc); numPosStates := 1 shl pb; m_LenDecoder._Create(numPosStates); m_RepLenDecoder._Create(numPosStates); m_PosStateMask := numPosStates - 1; result:=true; end; procedure TLZMADecoder.Init; var i:integer; begin m_OutWindow.Init(false); URangeDecoder.InitBitModels(m_IsMatchDecoders); URangeDecoder.InitBitModels(m_IsRep0LongDecoders); URangeDecoder.InitBitModels(m_IsRepDecoders); URangeDecoder.InitBitModels(m_IsRepG0Decoders); URangeDecoder.InitBitModels(m_IsRepG1Decoders); URangeDecoder.InitBitModels(m_IsRepG2Decoders); URangeDecoder.InitBitModels(m_PosDecoders); m_LiteralDecoder.Init(); for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i].Init; m_LenDecoder.Init; m_RepLenDecoder.Init; m_PosAlignDecoder.Init; m_RangeDecoder.Init; end; function TLZMADecoder.Code(const inStream,outStream:TStream;outSize:int64):boolean; var state,rep0,rep1,rep2,rep3:integer; nowPos64:int64; prevByte:byte; posState:integer; decoder2:TLZMADecoder2; len,distance,posSlot,numDirectBits:integer; lpos:int64; progint:int64; begin DoProgress(LPAMax,outSize); m_RangeDecoder.SetStream(inStream); m_OutWindow.SetStream(outStream); Init; state := ULZMABase.StateInit; rep0 := 0; rep1 := 0; rep2 := 0; rep3 := 0; nowPos64 := 0; prevByte := 0; progint:=outsize div CodeProgressInterval; lpos:=progint; while (outSize < 0) or (nowPos64 < outSize) do begin if (nowPos64 >=lpos) then begin DoProgress(LPAPos,nowPos64); lpos:=lpos+progint; end; posState := nowPos64 and m_PosStateMask; if (m_RangeDecoder.DecodeBit(m_IsMatchDecoders, (state shl ULZMABase.kNumPosStatesBitsMax) + posState) = 0) then begin decoder2 := m_LiteralDecoder.GetDecoder(nowPos64, prevByte); if not ULZMABase.StateIsCharState(state) then prevByte := decoder2.DecodeWithMatchByte(m_RangeDecoder, m_OutWindow.GetByte(rep0)) else prevByte := decoder2.DecodeNormal(m_RangeDecoder); m_OutWindow.PutByte(prevByte); state := ULZMABase.StateUpdateChar(state); inc(nowPos64); end else begin if (m_RangeDecoder.DecodeBit(m_IsRepDecoders, state) = 1) then begin len := 0; if (m_RangeDecoder.DecodeBit(m_IsRepG0Decoders, state) = 0) then begin if (m_RangeDecoder.DecodeBit(m_IsRep0LongDecoders, (state shl ULZMABase.kNumPosStatesBitsMax) + posState) = 0) then begin state := ULZMABase.StateUpdateShortRep(state); len := 1; end; end else begin if m_RangeDecoder.DecodeBit(m_IsRepG1Decoders, state) = 0 then distance := rep1 else begin if (m_RangeDecoder.DecodeBit(m_IsRepG2Decoders, state) = 0) then distance := rep2 else begin distance := rep3; rep3 := rep2; end; rep2 := rep1; end; rep1 := rep0; rep0 := distance; end; if len = 0 then begin len := m_RepLenDecoder.Decode(m_RangeDecoder, posState) + ULZMABase.kMatchMinLen; state := ULZMABase.StateUpdateRep(state); end; end else begin rep3 := rep2; rep2 := rep1; rep1 := rep0; len := ULZMABase.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); state := ULZMABase.StateUpdateMatch(state); posSlot := m_PosSlotDecoder[ULZMABase.GetLenToPosState(len)].Decode(m_RangeDecoder); if posSlot >= ULZMABase.kStartPosModelIndex then begin numDirectBits := (posSlot shr 1) - 1; rep0 := ((2 or (posSlot and 1)) shl numDirectBits); if posSlot < ULZMABase.kEndPosModelIndex then rep0 := rep0 + UBitTreeDecoder.ReverseDecode(m_PosDecoders, rep0 - posSlot - 1, m_RangeDecoder, numDirectBits) else begin rep0 := rep0 + (m_RangeDecoder.DecodeDirectBits( numDirectBits - ULZMABase.kNumAlignBits) shl ULZMABase.kNumAlignBits); rep0 := rep0 + m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); if rep0 < 0 then begin if rep0 = -1 then break; result:=false; exit; end; end; end else rep0 := posSlot; end; if (rep0 >= nowPos64) or (rep0 >= m_DictionarySizeCheck) then begin m_OutWindow.Flush(); result:=false; exit; end; m_OutWindow.CopyBlock(rep0, len); nowPos64 := nowPos64 + len; prevByte := m_OutWindow.GetByte(0); end; end; m_OutWindow.Flush(); m_OutWindow.ReleaseStream(); m_RangeDecoder.ReleaseStream(); DoProgress(LPAPos,nowPos64); result:=true; end; function TLZMADecoder.SetDecoderProperties(const properties:array of byte):boolean; var val,lc,remainder,lp,pb,dictionarysize,i:integer; begin if length(properties) < 5 then begin result:=false; exit; end; val := properties[0] and $FF; lc := val mod 9; remainder := val div 9; lp := remainder mod 5; pb := remainder div 5; dictionarySize := 0; for i := 0 to 3 do dictionarySize := dictionarysize + ((properties[1 + i]) and $FF) shl (i * 8); if (not SetLcLpPb(lc, lp, pb)) then begin result:=false; exit; end; result:=SetDictionarySize(dictionarySize); end; procedure TLZMADecoder.DoProgress(const Action:TLZMAProgressAction;const Value:integer); begin if assigned(fonprogress) then fonprogress(action,value); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMACommon.pas��������������������������0000644�0001750�0000144�00000001152�15104114162�025254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMACommon; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZMAProgressAction=(LPAMax,LPAPos); TLZMAProgress=procedure (const Action:TLZMAProgressAction;const Value:int64) of object; function ReadByte(const stream:TStream):byte; procedure WriteByte(const stream:TStream;const b:byte); const CodeProgressInterval = 50;//approx. number of times an OnProgress event will be fired during coding implementation function ReadByte(const stream:TStream):byte; begin stream.Read(result,1); end; procedure WriteByte(const stream:TStream;const b:byte); begin stream.Write(b,1); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZMA/ULZMABase.pas����������������������������0000644�0001750�0000144�00000004706�15104114162�024706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMABase; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface function StateInit:integer; function StateUpdateChar(const index:integer):integer; function StateUpdateMatch(const index:integer):integer; function StateUpdateRep(const index:integer):integer; function StateUpdateShortRep(const index:integer):integer; function StateIsCharState(const index:integer):boolean; function GetLenToPosState(len:integer):integer; const kNumRepDistances = 4; kNumStates = 12; kNumPosSlotBits = 6; kDicLogSizeMin = 0; // kDicLogSizeMax = 28; // kDistTableSizeMax = kDicLogSizeMax * 2; kNumLenToPosStatesBits = 2; // it's for speed optimization kNumLenToPosStates = 1 shl kNumLenToPosStatesBits; kMatchMinLen = 2; kNumAlignBits = 4; kAlignTableSize = 1 shl kNumAlignBits; kAlignMask = (kAlignTableSize - 1); kStartPosModelIndex = 4; kEndPosModelIndex = 14; kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; kNumFullDistances = 1 shl (kEndPosModelIndex div 2); kNumLitPosStatesBitsEncodingMax = 4; kNumLitContextBitsMax = 8; kNumPosStatesBitsMax = 4; kNumPosStatesMax = (1 shl kNumPosStatesBitsMax); kNumPosStatesBitsEncodingMax = 4; kNumPosStatesEncodingMax = (1 shl kNumPosStatesBitsEncodingMax); kNumLowLenBits = 3; kNumMidLenBits = 3; kNumHighLenBits = 8; kNumLowLenSymbols = 1 shl kNumLowLenBits; kNumMidLenSymbols = 1 shl kNumMidLenBits; kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + (1 shl kNumHighLenBits); kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; implementation function StateInit:integer; begin result:=0; end; function StateUpdateChar(const index:integer):integer; begin if (index < 4) then result:=0 else if (index < 10) then result:=index - 3 else result:=index - 6; end; function StateUpdateMatch(const index:integer):integer; begin if index<7 then result:=7 else result:=10; end; function StateUpdateRep(const index:integer):integer; begin if index<7 then result:=8 else result:=11; end; function StateUpdateShortRep(const index:integer):integer; begin if index<7 then result:=9 else result:=11; end; function StateIsCharState(const index:integer):boolean; begin result:=index<7; end; function GetLenToPosState(len:integer):integer; begin len := len - kMatchMinLen; if (len < kNumLenToPosStates) then result:=len else result:=(kNumLenToPosStates - 1); end; end. ����������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZ/�������������������������������������������0000755�0001750�0000144�00000000000�15104114162�022271� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZ/ULZOutWindow.pas���������������������������0000644�0001750�0000144�00000004107�15104114162�025332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZOutWindow; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZOutWindow=class public buffer: array of byte; pos:integer; windowSize:integer; streamPos:integer; stream:TStream; procedure _Create(const windowSize:integer); procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init(const solid:boolean); procedure Flush; procedure CopyBlock(const distance:integer; len:integer); procedure PutByte(const b:byte); function GetByte(const distance:integer):byte; end; implementation procedure TLZOutWindow._Create(const windowSize:integer); begin if (length(buffer)=0) or (self.windowSize <> windowSize) then setlength(buffer,windowSize); self.windowSize := windowSize; pos := 0; streamPos := 0; end; procedure TLZOutWindow.SetStream(const stream:TStream); begin ReleaseStream; self.stream:=stream; end; procedure TLZOutWindow.ReleaseStream; begin flush; self.stream:=nil; end; procedure TLZOutWindow.Init(const solid:boolean); begin if not solid then begin streamPos:=0; Pos:=0; end; end; procedure TLZOutWindow.Flush; var size:integer; begin size := pos - streamPos; if (size = 0) then exit; stream.write(buffer[streamPos], size); if (pos >= windowSize) then pos := 0; streamPos := pos; end; procedure TLZOutWindow.CopyBlock(const distance:integer;len:integer); var pos:integer; begin pos := self.pos - distance - 1; if pos < 0 then pos := pos + windowSize; while len<>0 do begin if pos >= windowSize then pos := 0; buffer[self.pos] := buffer[pos]; inc(self.pos); inc(pos); if self.pos >= windowSize then Flush(); dec(len); end; end; procedure TLZOutWindow.PutByte(const b:byte); begin buffer[pos] := b; inc(pos); if (pos >= windowSize) then Flush(); end; function TLZOutWindow.GetByte(const distance:integer):byte; var pos:integer; begin pos := self.pos - distance - 1; if (pos < 0) then pos := pos + windowSize; result:=buffer[pos]; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZ/ULZInWindow.pas����������������������������0000644�0001750�0000144�00000011165�15104114162�025133� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZInWindow; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZInWindow=class public bufferBase: array of byte;// pointer to buffer with data stream:TStream; posLimit:integer; // offset (from _buffer) of first byte when new block reading must be done streamEndWasReached:boolean; // if (true) then _streamPos shows real end of stream pointerToLastSafePosition:integer; bufferOffset:integer; blockSize:integer; // Size of Allocated memory block pos:integer; // offset (from _buffer) of curent byte keepSizeBefore:integer; // how many BYTEs must be kept in buffer before _pos keepSizeAfter:integer; // how many BYTEs must be kept buffer after _pos streamPos:integer; // offset (from _buffer) of first not read byte from Stream procedure MoveBlock; procedure ReadBlock; procedure _Free; procedure _Create(const keepSizeBefore, keepSizeAfter, keepSizeReserv:integer);virtual; procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init;virtual; procedure MovePos;virtual; function GetIndexByte(const index:integer):byte; // index + limit have not to exceed _keepSizeAfter; function GetMatchLen(const index:integer;distance,limit:integer):integer; function GetNumAvailableBytes:integer; procedure ReduceOffsets(const subValue:integer); end; implementation procedure TLZInWindow.MoveBlock; var offset,numbytes,i:integer; begin offset := bufferOffset + pos - keepSizeBefore; // we need one additional byte, since MovePos moves on 1 byte. if (offset > 0) then dec(offset); numBytes := bufferOffset + streamPos - offset; // check negative offset ???? for i := 0 to numBytes -1 do bufferBase[i] := bufferBase[offset + i]; bufferOffset := bufferOffset - offset; end; procedure TLZInWindow.ReadBlock; var size,numreadbytes,pointerToPostion:integer; begin if streamEndWasReached then exit; while (true) do begin size := (0 - bufferOffset) + blockSize - streamPos; if size = 0 then exit; numReadBytes := stream.Read(bufferBase[bufferOffset + streamPos], size); if (numReadBytes = 0) then begin posLimit := streamPos; pointerToPostion := bufferOffset + posLimit; if (pointerToPostion > pointerToLastSafePosition) then posLimit := pointerToLastSafePosition - bufferOffset; streamEndWasReached := true; exit; end; streamPos := streamPos + numReadBytes; if (streamPos >= pos + keepSizeAfter) then posLimit := streamPos - keepSizeAfter; end; end; procedure TLZInWindow._Free; begin setlength(bufferBase,0); end; procedure TLZInWindow._Create(const keepSizeBefore, keepSizeAfter, keepSizeReserv:integer); var blocksize:integer; begin self.keepSizeBefore := keepSizeBefore; self.keepSizeAfter := keepSizeAfter; blockSize := keepSizeBefore + keepSizeAfter + keepSizeReserv; if (length(bufferBase) = 0) or (self.blockSize <> blockSize) then begin _Free; self.blockSize := blockSize; setlength(bufferBase,self.blockSize); end; pointerToLastSafePosition := self.blockSize - keepSizeAfter; end; procedure TLZInWindow.SetStream(const stream:TStream); begin self.stream:=stream; end; procedure TLZInWindow.ReleaseStream; begin stream:=nil; end; procedure TLZInWindow.Init; begin bufferOffset := 0; pos := 0; streamPos := 0; streamEndWasReached := false; ReadBlock; end; procedure TLZInWindow.MovePos; var pointerToPostion:integer; begin inc(pos); if pos > posLimit then begin pointerToPostion := bufferOffset + pos; if pointerToPostion > pointerToLastSafePosition then MoveBlock; ReadBlock; end; end; function TLZInWindow.GetIndexByte(const index:integer):byte; begin result:=bufferBase[bufferOffset + pos + index]; end; function TLZInWindow.GetMatchLen(const index:integer;distance,limit:integer):integer; var pby,i:integer; begin if streamEndWasReached then if (pos + index) + limit > streamPos then limit := streamPos - (pos + index); inc(distance); // Byte *pby = _buffer + (size_t)_pos + index; pby := bufferOffset + pos + index; i:=0; while (i<limit)and(bufferBase[pby + i] = bufferBase[pby + i - distance]) do begin inc(i); end; result:=i; end; function TLZInWindow.GetNumAvailableBytes:integer; begin result:=streamPos - pos; end; procedure TLZInWindow.ReduceOffsets(const subvalue:integer); begin bufferOffset := bufferOffset + subValue; posLimit := posLimit - subValue; pos := pos - subValue; streamPos := streamPos - subValue; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/compression/LZ/ULZBinTree.pas�����������������������������0000644�0001750�0000144�00000026616�15104114162�024734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZBinTree; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses ULZInWindow,Math; type TLZBinTree=class(TLZInWindow) public cyclicBufferPos:integer; cyclicBufferSize:integer; matchMaxLen:integer; son: array of integer; hash: array of integer; cutValue:integer; hashMask:integer; hashSizeSum:integer; HASH_ARRAY:boolean; kNumHashDirectBytes:integer; kMinMatchCheck:integer; kFixHashSize:integer; constructor Create; procedure SetType(const numHashBytes:integer); procedure Init;override; procedure MovePos;override; function _Create(const historySize,keepAddBufferBefore,matchMaxLen,keepAddBufferAfter:integer):boolean;reintroduce; function GetMatches(var distances:array of integer):integer; procedure Skip(num:integer); procedure NormalizeLinks(var items:array of integer;const numItems,subValue:integer); procedure Normalize; procedure SetCutValue(const cutValue:integer); end; implementation const kHash2Size = 1 shl 10; kHash3Size = 1 shl 16; kBT2HashSize = 1 shl 16; kStartMaxLen = 1; kHash3Offset = kHash2Size; kEmptyHashValue = 0; kMaxValForNormalize = (1 shl 30) - 1; var CRCTable: array [0..255] of integer; constructor TLZBinTree.Create; begin inherited Create; cyclicBufferSize:=0; cutValue:=$FF; hashSizeSum:=0; HASH_ARRAY:=true; kNumHashDirectBytes:=0; kMinMatchCheck:=4; kFixHashsize:=kHash2Size + kHash3Size; end; procedure TLZBinTree.SetType(const numHashBytes:integer); begin HASH_ARRAY := (numHashBytes > 2); if HASH_ARRAY then begin kNumHashDirectBytes := 0; kMinMatchCheck := 4; kFixHashSize := kHash2Size + kHash3Size; end else begin kNumHashDirectBytes := 2; kMinMatchCheck := 2 + 1; kFixHashSize := 0; end; end; procedure TLZBinTree.Init; var i:integer; begin inherited init; for i := 0 to hashSizeSum - 1 do hash[i] := kEmptyHashValue; cyclicBufferPos := 0; ReduceOffsets(-1); end; procedure TLZBinTree.MovePos; begin inc(cyclicBufferPos); if cyclicBufferPos >= cyclicBufferSize then cyclicBufferPos := 0; inherited MovePos; if pos = kMaxValForNormalize then Normalize; end; function TLZBinTree._Create(const historySize,keepAddBufferBefore,matchMaxLen,keepAddBufferAfter:integer):boolean; var windowReservSize:integer; cyclicBufferSize:integer; hs:integer; begin if (historySize > kMaxValForNormalize - 256) then begin result:=false; exit; end; cutValue := 16 + (matchMaxLen shr 1); windowReservSize := (historySize + keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) div 2 + 256; inherited _Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); self.matchMaxLen := matchMaxLen; cyclicBufferSize := historySize + 1; if self.cyclicBufferSize <> cyclicBufferSize then begin self.cyclicBufferSize:=cyclicBufferSize; setlength(son,cyclicBufferSize * 2); end; hs := kBT2HashSize; if HASH_ARRAY then begin hs := historySize - 1; hs := hs or (hs shr 1); hs := hs or (hs shr 2); hs := hs or (hs shr 4); hs := hs or (hs shr 8); hs := hs shr 1; hs := hs or $FFFF; if (hs > (1 shl 24)) then hs := hs shr 1; hashMask := hs; inc(hs); hs := hs + kFixHashSize; end; if (hs <> hashSizeSum) then begin hashSizeSum := hs; setlength(hash,hashSizeSum); end; result:=true; end; function TLZBinTree.GetMatches(var distances:array of integer):integer; var lenLimit:integer; offset,matchMinPos,cur,maxlen,hashvalue,hash2value,hash3value:integer; temp,curmatch,curmatch2,curmatch3,ptr0,ptr1,len0,len1,count:integer; delta,cyclicpos,pby1,len:integer; begin if pos + matchMaxLen <= streamPos then lenLimit := matchMaxLen else begin lenLimit := streamPos - pos; if lenLimit < kMinMatchCheck then begin MovePos(); result:=0; exit; end; end; offset := 0; if (pos > cyclicBufferSize) then matchMinPos:=(pos - cyclicBufferSize) else matchMinPos:=0; cur := bufferOffset + pos; maxLen := kStartMaxLen; // to avoid items for len < hashSize; hash2Value := 0; hash3Value := 0; if HASH_ARRAY then begin temp := CrcTable[bufferBase[cur] and $FF] xor (bufferBase[cur + 1] and $FF); hash2Value := temp and (kHash2Size - 1); temp := temp xor ((bufferBase[cur + 2] and $FF) shl 8); hash3Value := temp and (kHash3Size - 1); hashValue := (temp xor (CrcTable[bufferBase[cur + 3] and $FF] shl 5)) and hashMask; end else hashValue := ((bufferBase[cur] and $FF) xor ((bufferBase[cur + 1] and $FF) shl 8)); curMatch := hash[kFixHashSize + hashValue]; if HASH_ARRAY then begin curMatch2 := hash[hash2Value]; curMatch3 := hash[kHash3Offset + hash3Value]; hash[hash2Value] := pos; hash[kHash3Offset + hash3Value] := pos; if curMatch2 > matchMinPos then if bufferBase[bufferOffset + curMatch2] = bufferBase[cur] then begin maxLen := 2; distances[offset] := maxLen; inc(offset); distances[offset] := pos - curMatch2 - 1; inc(offset); end; if curMatch3 > matchMinPos then if bufferBase[bufferOffset + curMatch3] = bufferBase[cur] then begin if curMatch3 = curMatch2 then offset := offset - 2; maxLen := 3; distances[offset] := maxlen; inc(offset); distances[offset] := pos - curMatch3 - 1; inc(offset); curMatch2 := curMatch3; end; if (offset <> 0) and (curMatch2 = curMatch) then begin offset := offset - 2; maxLen := kStartMaxLen; end; end; hash[kFixHashSize + hashValue] := pos; ptr0 := (cyclicBufferPos shl 1) + 1; ptr1 := (cyclicBufferPos shl 1); len0 := kNumHashDirectBytes; len1 := len0; if kNumHashDirectBytes <> 0 then begin if (curMatch > matchMinPos) then begin if (bufferBase[bufferOffset + curMatch + kNumHashDirectBytes] <> bufferBase[cur + kNumHashDirectBytes]) then begin maxLen := kNumHashDirectBytes; distances[offset] := maxLen; inc(offset); distances[offset] := pos - curMatch - 1; inc(offset); end; end; end; count := cutValue; while (true) do begin if (curMatch <= matchMinPos) or (count = 0) then begin son[ptr1] := kEmptyHashValue; son[ptr0] := son[ptr1]; break; end; dec(count); delta := pos - curMatch; if delta<=cyclicBufferPos then cyclicpos:=(cyclicBufferPos - delta) shl 1 else cyclicpos:=(cyclicBufferPos - delta + cyclicBufferSize) shl 1; pby1 := bufferOffset + curMatch; len := min(len0, len1); if bufferBase[pby1 + len] = bufferBase[cur + len] then begin inc(len); while (len <> lenLimit) do begin if (bufferBase[pby1 + len] <> bufferBase[cur + len]) then break; inc(len); end; if maxLen < len then begin maxLen := len; distances[offset] := maxlen; inc(offset); distances[offset] := delta - 1; inc(offset); if (len = lenLimit) then begin son[ptr1] := son[cyclicPos]; son[ptr0] := son[cyclicPos + 1]; break; end; end; end; if (bufferBase[pby1 + len] and $FF) < (bufferBase[cur + len] and $FF) then begin son[ptr1] := curMatch; ptr1 := cyclicPos + 1; curMatch := son[ptr1]; len1 := len; end else begin son[ptr0] := curMatch; ptr0 := cyclicPos; curMatch := son[ptr0]; len0 := len; end; end; MovePos; result:=offset; end; procedure TLZBinTree.Skip(num:integer); var lenLimit,matchminpos,cur,hashvalue,temp,hash2value,hash3value,curMatch:integer; ptr0,ptr1,len,len0,len1,count,delta,cyclicpos,pby1:integer; begin repeat if pos + matchMaxLen <= streamPos then lenLimit := matchMaxLen else begin lenLimit := streamPos - pos; if lenLimit < kMinMatchCheck then begin MovePos(); dec(num); continue; end; end; if pos>cyclicBufferSize then matchminpos:=(pos - cyclicBufferSize) else matchminpos:=0; cur := bufferOffset + pos; if HASH_ARRAY then begin temp := CrcTable[bufferBase[cur] and $FF] xor (bufferBase[cur + 1] and $FF); hash2Value := temp and (kHash2Size - 1); hash[hash2Value] := pos; temp := temp xor ((bufferBase[cur + 2] and $FF) shl 8); hash3Value := temp and (kHash3Size - 1); hash[kHash3Offset + hash3Value] := pos; hashValue := (temp xor (CrcTable[bufferBase[cur + 3] and $FF] shl 5)) and hashMask; end else hashValue := ((bufferBase[cur] and $FF) xor ((bufferBase[cur + 1] and $FF) shl 8)); curMatch := hash[kFixHashSize + hashValue]; hash[kFixHashSize + hashValue] := pos; ptr0 := (cyclicBufferPos shl 1) + 1; ptr1 := (cyclicBufferPos shl 1); len0 := kNumHashDirectBytes; len1 := kNumHashDirectBytes; count := cutValue; while true do begin if (curMatch <= matchMinPos) or (count = 0) then begin son[ptr1] := kEmptyHashValue; son[ptr0] := son[ptr1]; break; end else dec(count); delta := pos - curMatch; if (delta <= cyclicBufferPos) then cyclicpos:=(cyclicBufferPos - delta) shl 1 else cyclicpos:=(cyclicBufferPos - delta + cyclicBufferSize) shl 1; pby1 := bufferOffset + curMatch; len := min(len0, len1); if bufferBase[pby1 + len] = bufferBase[cur + len] then begin inc(len); while (len <> lenLimit) do begin if bufferBase[pby1 + len] <> bufferBase[cur + len] then break; inc(len); end; if len = lenLimit then begin son[ptr1] := son[cyclicPos]; son[ptr0] := son[cyclicPos + 1]; break; end; end; if ((bufferBase[pby1 + len] and $FF) < (bufferBase[cur + len] and $FF)) then begin son[ptr1] := curMatch; ptr1 := cyclicPos + 1; curMatch := son[ptr1]; len1 := len; end else begin son[ptr0] := curMatch; ptr0 := cyclicPos; curMatch := son[ptr0]; len0 := len; end; end; MovePos; dec(num); until num=0; end; procedure TLZBinTree.NormalizeLinks(var items:array of integer;const numItems,subValue:integer); var i,value:integer; begin for i:=0 to NumItems-1 do begin value := items[i]; if value <= subValue then value := kEmptyHashValue else value := value - subValue; items[i] := value; end; end; procedure TLZBinTree.Normalize; var subvalue:integer; begin subValue := pos - cyclicBufferSize; NormalizeLinks(son, cyclicBufferSize * 2, subValue); NormalizeLinks(hash, hashSizeSum, subValue); ReduceOffsets(subValue); end; procedure TLZBinTree.SetCutValue(const cutvalue:integer); begin self.cutValue:=cutValue; end; procedure InitCRC; var i,r,j:integer; begin for i := 0 to 255 do begin r := i; for j := 0 to 7 do if ((r and 1) <> 0) then r := (r shr 1) xor integer($EDB88320) else r := r shr 1; CrcTable[i] := r; end; end; initialization InitCRC; end. ������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/ULZMABench.pas��������������������������������������������0000644�0001750�0000144�00000033322�15104114162�021743� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMABench; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,UCRC,ULZMACommon,windows,ULZMAEncoder,ULZMADecoder; type TLZMABench=class public function GetLogSize(const size:integer):integer; function MyMultDiv64(const value, elapsedTime:int64):int64; function GetCompressRating(const dictionarySize:integer;const elapsedTime,size:int64):int64; function GetDecompressRating(const elapsedTime:int64;const outSize,inSize:int64):int64; function GetTotalRating(const dictionarySize:int64;const elapsedTimeEn, sizeEn, elapsedTimeDe, inSizeDe, outSizeDe:int64):int64; procedure PrintValue(const v:int64); procedure PrintRating(const rating:int64); procedure PrintResults(const dictionarySize:integer;const elapsedTime, size:int64;const decompressMode:boolean;const secondSize:int64); function LzmaBenchmark(const numIterations, dictionarySize:integer):integer; end; TLZMARandomGenerator=class public A1:integer; A2:integer; constructor Create; procedure Init; function GetRnd:integer; end; TLZMABenchBitRandomGenerator=class public RG:TLZMARandomGenerator; Value:integer; NumBits:integer; constructor Create; destructor Destroy;override; procedure Init; function GetRnd(numBits:integer):integer; end; TLZMABenchRandomGenerator=class public RG:TLZMABenchBitRandomGenerator; Pos:integer; Rep0:integer; Buffer:array of byte; BufferSize:integer; constructor Create; destructor Destroy;override; procedure _Set(const bufferSize:integer); function GetRndBit:integer; function GetLogRandBits(const numBits:integer):integer; function GetOffset:integer; function GetLen1:integer; function GetLen2:integer; procedure Generate; end; TCRCStream=class(TStream) public CRC:TCRC; constructor Create; destructor Destroy;override; procedure Init; function GetDigest:integer; function Write(const Buffer; Count: Longint): Longint;override; end; TByteArray=array of byte; PByteArray=^TByteArray; TMyOutputStream=class(TStream) public _buffer:PByteArray; _size:integer; _pos:integer; constructor Create(const buffer:PByteArray); procedure Reset; function Write(const Buffer; Count: Longint): Longint;override; function Size:integer; end; TMyInputStream=class(TStream) public _buffer:PByteArray; _size:integer; _pos:integer; constructor Create(const buffer:PByteArray;const size:integer); procedure Reset; function Read(var Buffer; Count: Longint): Longint;override; end; TLZMAProgressInfo=class public ApprovedStart:int64; InSize:int64; Time:cardinal; procedure Init; procedure OnProgress(const Action:TLZMAProgressAction;const Value:int64); end; implementation uses SysUtils; const kAdditionalSize = (1 shl 21); kCompressedAdditionalSize = (1 shl 10); kSubBits = 8; constructor TLZMARandomGenerator.Create; begin Init; end; procedure TLZMARandomGenerator.Init; begin A1 := 362436069; A2 := 521288629; end; function TLZMARandomGenerator.GetRnd:integer; begin A1 := 36969 * (A1 and $ffff) + (A1 shr 16); A2 := 18000 * (A2 and $ffff) + (A2 shr 16); result:=(A1 shl 16) xor (A2); end; constructor TLZMABenchBitRandomGenerator.Create; begin RG:=TLZMARandomGenerator.Create; end; destructor TLZMABenchBitRandomGenerator.Destroy; begin RG.Free; end; procedure TLZMABenchBitRandomGenerator.Init; begin Value := 0; NumBits := 0; end; function TLZMABenchBitRandomGenerator.GetRnd(numBits:integer):integer; begin if self.NumBits > numBits then begin result := Value and ((1 shl numBits) - 1); Value := Value shr numBits; self.NumBits := self.NumBits - numBits; exit; end; numBits := numBits - self.NumBits; result := (Value shl numBits); Value := RG.GetRnd; result := result or (Value and ((1 shl numBits) - 1)); Value := value shr numBits; self.NumBits := 32 - numBits; end; constructor TLZMABenchRandomGenerator.Create; begin RG:=TLZMABenchBitRandomGenerator.Create; end; destructor TLZMABenchRandomGenerator.Destroy; begin RG.free; end; procedure TLZMABenchRandomGenerator._Set(const bufferSize:integer); begin setlength(Buffer,bufferSize); Pos := 0; self.BufferSize := bufferSize; end; function TLZMABenchRandomGenerator.GetLogRandBits(const numBits:integer):integer; var len:integer; begin len := RG.GetRnd(numBits); result:=RG.GetRnd(len); end; function TLZMABenchRandomGenerator.GetRndBit:integer; begin result:=RG.GetRnd(1); end; function TLZMABenchRandomGenerator.GetOffset:integer; begin if GetRndBit = 0 then result:=GetLogRandBits(4) else result:=(GetLogRandBits(4) shl 10) or RG.GetRnd(10); end; function TLZMABenchRandomGenerator.GetLen1:integer; begin result:=RG.GetRnd(1 + RG.GetRnd(2)); end; function TLZMABenchRandomGenerator.GetLen2:integer; begin result:=RG.GetRnd(2 + RG.GetRnd(2)); end; procedure TLZMABenchRandomGenerator.Generate; var len,i:integer; begin RG.Init; Rep0 := 1; while Pos < BufferSize do begin if (GetRndBit = 0) or (Pos < 1) then begin Buffer[Pos] := RG.GetRnd(8); inc(pos); end else begin if RG.GetRnd(3) = 0 then len := 1 + GetLen1 else begin repeat Rep0 := GetOffset; until not (Rep0 >= Pos); inc(Rep0); len := 2 + GetLen2; end; i:=0; while (i < len) and (Pos < BufferSize) do begin Buffer[Pos] := Buffer[Pos - Rep0]; inc(i); inc(pos); end; end; end; end; constructor TCRCStream.Create; begin CRC:=TCRC.Create; end; destructor TCRCStream.Destroy; begin CRC.Free; end; procedure TCRCStream.Init; begin CRC.Init; end; function TCRCStream.GetDigest:integer; begin result:=CRC.GetDigest; end; function TCRCStream.Write(const Buffer; Count: Longint): Longint; var p:^byte; i:integer; begin p:=@buffer; for i:=0 to count -1 do begin CRC.UpdateByte(p^); inc(p); end; result:=count; end; constructor TMyOutputStream.Create(const buffer:PByteArray); begin _buffer:=buffer; _size:=length(buffer^); end; procedure TMyOutputStream.Reset; begin _pos:=0; end; function TMyOutputStream.Write(const Buffer; Count: Longint): Longint; begin if _pos+count>=_size then raise Exception.Create('Error'); move(buffer,_buffer^[_pos],count); _pos:=_pos+count; result:=count; end; function TMyOutputStream.Size:integer; begin result:=_pos; end; constructor TMyInputStream.Create(const buffer:PByteArray;const size:integer); begin _buffer:=buffer; _size:=size; end; procedure TMyInputStream.Reset; begin _pos:=0; end; function TMyInputStream.Read(var Buffer; Count: Longint): Longint; var b:int64; begin try b:=_size-_pos; if b>count then b:=count; result:=b; move(_buffer^[_pos],buffer,b); _pos:=_pos+b; except writeln('inread error'); end; end; procedure TLZMAProgressInfo.Init; begin InSize:=0; end; procedure TLZMAProgressInfo.OnProgress(const Action:TLZMAProgressAction;const Value:int64); begin if Action=LPAMax then exit; if (value >= ApprovedStart) and (InSize = 0) then begin Time := GetTickCount; InSize := value; end; end; function TLZMABench.GetLogSize(const size:integer):integer; var i,j:integer; begin for i := kSubBits to 31 do for j := 0 to 1 shl kSubBits -1 do if (size <= (1 shl i) + (j shl (i - kSubBits))) then begin result:=(i shl kSubBits) + j; exit; end; result:=32 shl kSubBits; end; function TLZMABench.MyMultDiv64(const value, elapsedTime:int64):int64; var freq,elTime:int64; begin freq := 1000; // ms elTime := elapsedTime; while freq > 1000000 do begin freq := freq shr 1; elTime :=elTime shr 1; end; if elTime = 0 then elTime := 1; result:=value * freq div elTime; end; function TLZMABench.GetCompressRating(const dictionarySize:integer;const elapsedTime,size:int64):int64; var t,numCommandsForOne,numCommands:int64; begin t := GetLogSize(dictionarySize) - (18 shl kSubBits); numCommandsForOne := 1060 + ((t * t * 10) shr (2 * kSubBits)); numCommands := size * numCommandsForOne; result:=MyMultDiv64(numCommands, elapsedTime); end; function TLZMABench.GetDecompressRating(const elapsedTime:int64;const outSize,inSize:int64):int64; var numCommands:int64; begin numCommands := inSize * 220 + outSize * 20; result:=MyMultDiv64(numCommands, elapsedTime); end; function TLZMABench.GetTotalRating(const dictionarySize:int64;const elapsedTimeEn, sizeEn, elapsedTimeDe, inSizeDe, outSizeDe:int64):int64; begin result:=(GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) div 2; end; procedure TLZMABench.PrintValue(const v:int64); var s:string; i:integer; begin s:=inttostr(v); i:=0; while i+length(s)<6 do begin write(' '); inc(i); end; write(s); end; procedure TLZMABench.PrintRating(const rating:int64); begin PrintValue(rating div 1000000); write(' MIPS'); end; procedure TLZMABench.PrintResults(const dictionarySize:integer;const elapsedTime, size:int64;const decompressMode:boolean;const secondSize:int64); var speed:int64; rating:int64; begin speed := MyMultDiv64(size, elapsedTime); PrintValue(speed div 1024); write(' KB/s '); if decompressMode then rating := GetDecompressRating(elapsedTime, size, secondSize) else rating := GetCompressRating(dictionarySize, elapsedTime, size); PrintRating(rating); end; function TLZMABench.LzmaBenchmark(const numIterations, dictionarySize:integer):integer; var encoder:TLZMAEncoder; decoder:TLZMADecoder; kBufferSize,kCompressedBufferSize:integer; propStream:TMemoryStream; proparray:array of byte; rg:TLZMABenchRandomGenerator; crc:TCRC; progressInfo:TLZMAProgressInfo; totalBenchSize,totalEncodeTime,totalDecodeTime,totalCompressedSize:int64; inStream:TMyInputStream; compressedBuffer:array of byte; compressedStream:TMyOutputStream; CrcOutStream:TCRCStream; inputCompressedStream:TMyInputStream; compressedSize,i,j:integer; encodeTime,decodeTime:cardinal; outSize,startTime,benchSize:int64; begin if numIterations <= 0 then begin result:=0; exit; end; if dictionarySize < (1 shl 18) then begin writeln(#10'Error: dictionary size for benchmark must be >= 18 (256 KB)'); result:=1; exit; end; write(#10' Compressing Decompressing'#10#10); encoder := TLZMAEncoder.Create; decoder := TLZMADecoder.Create; if not encoder.SetDictionarySize(dictionarySize) then raise Exception.Create('Incorrect dictionary size'); kBufferSize := dictionarySize + kAdditionalSize; kCompressedBufferSize := (kBufferSize div 2) + kCompressedAdditionalSize; propstream:=TMemoryStream.Create; encoder.WriteCoderProperties(propStream); setlength(proparray,propstream.size); propstream.Position:=0; propstream.Read(propArray[0],propstream.Size); decoder.SetDecoderProperties(propArray); rg := TLZMABenchRandomGenerator.Create; rg._Set(kBufferSize); rg.Generate; crc := TCRC.Create; crc.Init; crc.Update(rg.Buffer[0], 0, rg.BufferSize); progressInfo := TLZMAProgressInfo.Create; progressInfo.ApprovedStart := dictionarySize; totalBenchSize := 0; totalEncodeTime := 0; totalDecodeTime := 0; totalCompressedSize := 0; inStream := TMyInputStream.Create(@(rg.Buffer), rg.BufferSize); setlength(compressedBuffer,kCompressedBufferSize); compressedStream := TMyOutputStream.Create(@compressedBuffer); crcOutStream :=TCRCStream.Create; inputCompressedStream := nil; compressedSize := 0; for i := 0 to numIterations -1 do begin progressInfo.Init; inStream.reset; compressedStream.reset; encoder.OnProgress:=progressInfo.OnProgress; encoder.Code(inStream, compressedStream, rg.BufferSize, -1); encodeTime := GetTickCount - progressInfo.Time; if i = 0 then begin compressedSize := compressedStream.size; inputCompressedStream := TMyInputStream.Create(@compressedBuffer, compressedSize); end else if compressedSize <> compressedStream.size then raise Exception.Create('Encoding error'); if progressInfo.InSize = 0 then raise Exception.Create('Internal ERROR 1282'); decodeTime := 0; for j := 0 to 1 do begin inputCompressedStream.reset; crcOutStream.Init; outSize := kBufferSize; startTime := GetTickCount; if not decoder.Code(inputCompressedStream, crcOutStream, outSize) then raise Exception.Create('Decoding Error'); decodeTime := GetTickCount - startTime; if crcOutStream.GetDigest <> crc.GetDigest then raise Exception.Create('CRC Error'); end; benchSize := kBufferSize - progressInfo.InSize; PrintResults(dictionarySize, encodeTime, benchSize, false, 0); write(' '); PrintResults(dictionarySize, decodeTime, kBufferSize, true, compressedSize); writeln(''); totalBenchSize := totalBenchSize + benchSize; totalEncodeTime := totalEncodeTime + encodeTime; totalDecodeTime := totalDecodeTime + decodeTime; totalCompressedSize := totalCompressedSize + compressedSize; end; writeln('---------------------------------------------------'); PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); write(' '); PrintResults(dictionarySize, totalDecodeTime, kBufferSize * numIterations, true, totalCompressedSize); writeln(' Average'); result:=0; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/ULZMAAlone.pas��������������������������������������������0000644�0001750�0000144�00000022213�15104114162�021757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ULZMAAlone; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses ULZMABench,ULZMAEncoder,ULZMADecoder,UBufferedFS,ULZMACommon,Classes; const kEncode=0; kDecode=1; kBenchmark=2; type TCommandLine=class public command:integer; NumBenchMarkPasses:integer; DictionarySize:integer; DictionarySizeIsDefined:boolean; Lc:integer; Lp:integer; Pb:integer; Fb:integer; FbIsDefined:boolean; Eos:boolean; Algorithm:integer; MatchFinder:integer; InFile:string; OutFile:string; constructor Create; function ParseSwitch(const s:string):boolean; function Parse:boolean; end; TLZMAAlone=class public procedure PrintHelp; procedure Main; end; implementation uses SysUtils; constructor TCommandLine.Create; begin Command:=-1; NumBenchMarkPasses:=10; DictionarySize:=1 shl 23; DictionarySizeIsDefined:= false; Lc:= 3; Lp:= 0; Pb:= 2; Fb:= 128; FbIsDefined:= false; Eos:= false; Algorithm:= 2; MatchFinder:= 1; end; function GetStr(const str:string;const offset:integer):string; var i:integer; begin result:=''; for i:=offset to length(str) do result:=result+str[i]; end; function GetInt(const str:string;const offset:integer):integer; var s:string; begin s:=GetStr(s,offset); result:=strtoint(s); end; function TCommandLine.ParseSwitch(const s:string):boolean; var l:integer; mfs:string; begin result:=false; l:=length(s); if l=0 then exit; case s[1] of 'd': begin DictionarySize := 1 shl GetInt(s,2); DictionarySizeIsDefined := true; result:=true; end; 'f': begin if (l>=2)and(s[2]='b') then begin fb:=GetInt(s,3); FbIsDefined := true; result:=true; end; end; 'a': begin Algorithm := GetInt(s,2); result:=true; end; 'l': begin if (l>=2) then begin if s[2]='c' then begin Lc:=GetInt(s,3); result:=true; end; if s[2]='p' then begin Lp:=GetInt(s,3); result:=true; end; end; end; 'p': begin if (l>=2)and(s[2]='b') then begin Pb:=GetInt(s,3); result:=true; end; end; 'e': begin if (l>=3)and(s[2]='o')and(s[3]='s') then begin eos:=true; result:=true; end; end; 'm': begin if (l>=2)and(s[2]='f') then begin mfs:=GetStr(s,3); if mfs='bt2' then MatchFinder:=0 else if mfs='bt4' then MatchFinder:=1 else if mfs='bt4b' then MatchFinder:=2 else begin result:=false; exit; end; end; end; else result:=false; end; end; function TCommandLine.Parse:boolean; var pos:integer; switchMode:boolean; i,l:integer; s,sw:string; begin pos := 1; switchMode := true; l:=ParamCount; for i := 1 to l do begin s := ParamStr(i); if length(s) = 0 then begin result:=false; exit; end; if switchMode then begin if comparestr(s,'--')= 0 then begin switchMode := false; continue; end; if s[1]='-' then begin sw := AnsiLowerCase(GetStr(s,2)); if length(sw) = 0 then begin result:=false; exit; end; try if not ParseSwitch(sw) then begin result:=false; exit; end; except on e:EConvertError do begin result:=false; exit; end; end; continue; end; end; if pos = 1 then begin if comparetext(s,'e')=0 then Command := kEncode else if comparetext(s,'d')=0 then Command := kDecode else if comparetext(s,'b')=0 then Command := kBenchmark else begin result:=false; exit; end; end else if pos = 2 then begin if Command = kBenchmark then begin try NumBenchmarkPasses := strtoint(s); if NumBenchmarkPasses < 1 then begin result:=false; exit; end; except on e:EConvertError do begin result:=false; exit; end; end; end else InFile := s; end else if pos = 3 then OutFile := s else begin result:=false; exit; end; inc(pos); continue; end; result:=true; exit; end; procedure TLZMAAlone.PrintHelp; begin writeln( #10'Usage: LZMA <e|d> [<switches>...] inputFile outputFile'#10 + ' e: encode file'#10 + ' d: decode file'#10 + ' b: Benchmark'#10 + '<Switches>'#10 + // ' -a{N}: set compression mode - [0, 1], default: 1 (max)\n' + ' -d{N}: set dictionary - [0,28], default: 23 (8MB)'#10 + ' -fb{N}: set number of fast bytes - [5, 273], default: 128'#10 + ' -lc{N}: set number of literal context bits - [0, 8], default: 3'#10 + ' -lp{N}: set number of literal pos bits - [0, 4], default: 0'#10 + ' -pb{N}: set number of pos bits - [0, 4], default: 2'#10 + ' -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4'#10 + ' -eos: write End Of Stream marker'#10 ); end; procedure TLZMAAlone.Main; var params:TCommandLine; dictionary:integer; lzmaBench:tlzmabench; inStream:TBufferedFS; outStream:TBufferedFS; eos:boolean; encoder:TLZMAEncoder; filesize:int64; i:integer; properties:array[0..4] of byte; decoder:TLZMADecoder; outSize:int64; v:byte; const propertiessize=5; begin writeln(#10'LZMA (Pascal) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15'#10); if paramcount<1 then begin PrintHelp; exit; end; params:=TCommandLine.Create; if not params.Parse then begin writeln(#10'Incorrect command'); exit; end; if params.command=kBenchmark then begin dictionary:=1 shl 21; if params.DictionarySizeIsDefined then dictionary:=params.DictionarySize; if params.MatchFinder>1 then raise Exception.Create('Unsupported match finder'); lzmaBench:=TLZMABench.Create; lzmaBench.LzmaBenchmark(params.NumBenchMarkPasses,dictionary); lzmaBench.Free; end else if (params.command=kEncode)or(params.command=kDecode) then begin inStream:=TBufferedFS.Create(params.InFile,fmOpenRead or fmsharedenynone); outStream:=TBufferedFS.Create(params.OutFile,fmcreate); eos := false; if params.Eos then eos := true; if params.Command = kEncode then begin encoder:=TLZMAEncoder.Create; if not encoder.SetAlgorithm(params.Algorithm) then raise Exception.Create('Incorrect compression mode'); if not encoder.SetDictionarySize(params.DictionarySize) then raise Exception.Create('Incorrect dictionary size'); if not encoder.SeNumFastBytes(params.Fb) then raise Exception.Create('Incorrect -fb value'); if not encoder.SetMatchFinder(params.MatchFinder) then raise Exception.Create('Incorrect -mf value'); if not encoder.SetLcLpPb(params.Lc, params.Lp, params.Pb) then raise Exception.Create('Incorrect -lc or -lp or -pb value'); encoder.SetEndMarkerMode(eos); encoder.WriteCoderProperties(outStream); if eos then fileSize := -1 else fileSize := inStream.Size; for i := 0 to 7 do WriteByte(outStream,(fileSize shr (8 * i)) and $FF); encoder.Code(inStream, outStream, -1, -1); encoder.free; end else begin if inStream.read(properties, propertiesSize) <> propertiesSize then raise Exception.Create('input .lzma file is too short'); decoder := TLZMADecoder.Create; if not decoder.SetDecoderProperties(properties) then raise Exception.Create('Incorrect stream properties'); outSize := 0; for i := 0 to 7 do begin v := {shortint}(ReadByte(inStream)); if v < 0 then raise Exception.Create('Can''t read stream size'); outSize := outSize or v shl (8 * i); end; if not decoder.Code(inStream, outStream, outSize) then raise Exception.Create('Error in data stream'); decoder.Free; end; outStream.Free; inStream.Free; end else raise Exception.Create('Incorrect command'); params.Free; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/UCRC.pas��������������������������������������������������0000644�0001750�0000144�00000002663�15104114162�020653� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UCRC; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface type TCRC=class public Value:integer; constructor Create; procedure Init; procedure Update(const data: array of byte;const offset,size:integer);overload; procedure Update(const data: array of byte);overload; procedure UpdateByte(const b:integer); function GetDigest:integer; end; implementation var Table: array [0..255] of integer; constructor TCRC.Create; begin Value:=-1; end; procedure TCRC.Init; begin Value:=-1; end; procedure TCRC.Update(const data: array of byte;const offset,size:integer); var i:integer; begin for i := 0 to size-1 do value := Table[(value xor data[offset + i]) and $FF] xor (value shr 8); end; procedure TCRC.Update(const data: array of byte); var size:integer; i:integer; begin size := length(data); for i := 0 to size - 1 do value := Table[(value xor data[i]) and $FF] xor (value shr 8); end; procedure TCRC.UpdateByte(const b:integer); begin value := Table[(value xor b) and $FF] xor (value shr 8); end; function TCRC.GetDigest:integer; begin result:=value xor (-1); end; procedure InitCRC; var i,j,r:integer; begin for i := 0 to 255 do begin r := i; for j := 0 to 7 do begin if ((r and 1) <> 0) then r := (r shr 1) xor integer($EDB88320) else r := r shr 1; end; Table[i] := r; end; end; initialization InitCRC; end. �����������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/UBufferedFS.pas�������������������������������������������0000644�0001750�0000144�00000011605�15104114162�022213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit UBufferedFS; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,Math; const BufferSize=$10000;//64K type TBFSMode=(BFMRead,BFMWrite); TBufferedFS=class(TFileStream) private membuffer:array [0..BufferSize-1] of byte; bytesinbuffer:integer; bufferpos:integer; bufferdirty:boolean; Mode:TBFSMode; procedure Init; procedure ReadBuffer; public constructor Create(const FileName: string; Mode: Word); overload; constructor Create(const FileName: string; Mode: Word; Rights: Cardinal); overload; destructor Destroy; override; procedure Flush; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 0)} function ReadQWord: QWord; procedure WriteQWord(q: QWord); {$ENDIF} function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; type TByteArray = array of byte; PByteArray = ^TByteArray; implementation function MovePointer(const P: Pointer; const dist: PtrInt): Pointer; begin Result:= Pointer(PtrInt(p) + dist); end; procedure TBufferedFS.Init; begin bytesinbuffer:=0; bufferpos:=0; bufferdirty:=false; mode:=BFMWrite; end; procedure TBufferedFS.Flush; begin if bufferdirty then inherited Write(membuffer[0],bufferpos); bufferdirty:=false; bytesinbuffer:=0; bufferpos:=0; end; constructor TBufferedFS.Create(const FileName: string; Mode: Word); begin inherited Create(FileName, Mode); init; end; constructor TBufferedFS.Create(const FileName: string; Mode: Word; Rights: Cardinal); begin inherited Create(FileName, Mode, Rights); init; end; destructor TBufferedFS.Destroy; begin flush; inherited Destroy; end; procedure TBufferedFS.ReadBuffer; begin flush; bytesinbuffer:=inherited Read(membuffer,buffersize); bufferpos:=0; end; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 0)} function TBufferedFS.ReadQWord: QWord; var q: QWord; begin ReadBuffer(q, SizeOf(QWord)); ReadQWord:= q; end; procedure TBufferedFS.WriteQWord(q: QWord); begin WriteBuffer(q, SizeOf(QWord)); end; {$ENDIF} function TBufferedFS.Read(var Buffer; Count: Longint): Longint; var p:PByteArray; bytestoread:integer; b:PtrInt; begin if Mode=BFMWrite then flush; mode:=BFMRead; result:=0; if count<=bytesinbuffer then begin //all data already in buffer move(membuffer[bufferpos],buffer,count); bytesinbuffer:=bytesinbuffer-count; bufferpos:=bufferpos+count; result:=count; end else begin bytestoread:=count; if (bytestoread<>0)and(bytesinbuffer<>0) then begin //read data remaining in buffer and increment data pointer b:=Read(buffer,bytesinbuffer); p:=PByteArray(@(TByteArray(buffer)[b])); bytestoread:=bytestoread-b; result:=b; end else p:=@buffer; if bytestoread>=BufferSize then begin //data to read is larger than the buffer, read it directly result:=result+inherited Read(p^,bytestoread); end else begin //refill buffer ReadBuffer; //recurse result:=result+Read(p^,math.Min(bytestoread,bytesinbuffer)); end; end; end; function TBufferedFS.Write(const Buffer; Count: Longint): Longint; var p:pointer; bytestowrite:integer; b:PtrInt; begin if mode=BFMRead then begin seek(-BufferSize+bufferpos,soFromCurrent); bytesinbuffer:=0; bufferpos:=0; end; mode:=BFMWrite; result:=0; if count<=BufferSize-bytesinbuffer then begin //all data fits in buffer bufferdirty:=true; move(buffer,membuffer[bufferpos],count); bytesinbuffer:=bytesinbuffer+count; bufferpos:=bufferpos+count; result:=count; end else begin bytestowrite:=count; if (bytestowrite<>0)and(bytesinbuffer<>BufferSize)and(bytesinbuffer<>0) then begin //write data to remaining space in buffer and increment data pointer b:=Write(buffer,BufferSize-bytesinbuffer); p:=MovePointer(@buffer,b); bytestowrite:=bytestowrite-b; result:=b; end else p:=@buffer; if bytestowrite>=BufferSize then begin //empty buffer Flush; //data to write is larger than the buffer, write it directly result:=result+inherited Write(p^,bytestowrite); end else begin //empty buffer Flush; //recurse result:=result+Write(p^,bytestowrite); end; end; end; function TBufferedFS.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Origin=soCurrent)and(Offset=0) then result:=inherited seek(Offset,origin)+bufferpos else begin flush; result:=inherited Seek(offset,origin); end; end; end. ���������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/Methods.txt�����������������������������������������������0000644�0001750�0000144�00000005162�15104114162�021553� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Compression method IDs (4.38) ----------------------------- Each compression method in 7z has unique binary value (ID). The length of ID in bytes is arbitrary but it can not exceed 15 bytes. If you want to add some new ID, you have two ways: 1) Write request for allocating IDs to 7-zip developers. 2) Use such random ID: 03 E0 ZZ ... ZZ MM ... MM VV ... VV ZZ != 0, MM != 0, VV != 0 03 E0 - Prefix for random IDs ZZ ... ZZ - Developer ID. (length >= 4). Use real random bytes. You can notify 7-Zip developers about your Developer ID. MM ... MM - Method ID (length >= 1) VV ... VV - Version (length >= 1) Note: Use new ID (MM ... MM VV .. VV) only if old codec can not decode data encoded with new version. List of defined IDs ------------------- 00 - Copy 01 - Reserved 02 - Common 03 Swap - 2 Swap2 - 4 Swap4 04 Delta (subject to change) 03 - 7z 01 - LZMA 01 - Version 03 - Branch 01 - x86 03 - BCJ 1B - BCJ2 02 - PPC 05 - BC_PPC_B (Big Endian) 03 - Alpha 01 - BC_Alpha 04 - IA64 01 - BC_IA64 05 - ARM 01 - BC_ARM 06 - M68 05 - BC_M68_B (Big Endian) 07 - ARM Thumb 01 - BC_ARMThumb 08 - SPARC 05 - BC_SPARC 04 - PPMD 01 - Version 80 - reserved for independent developers E0 - Random IDs 04 - Misc 00 - Reserved 01 - Zip 00 - Copy (not used). Use {00} instead 01 - Shrink 06 - Implode 08 - Deflate 09 - Deflate64 12 - BZip2 (not used). Use {04 02 02} instead 02 - BZip 02 - BZip2 03 - Rar 01 - Rar15 02 - Rar20 03 - Rar29 04 - Arj 01 - Arj (1,2,3) 02 - Arj 4 05 - Z 06 - Lzh 07 - Reserved for 7z 08 - Cab 09 - NSIS 01 - DeflateNSIS 02 - BZip2NSIS 06 - Crypto 00 - 01 - AES 0x - AES-128 4x - AES-192 8x - AES-256 x0 - ECB x1 - CBC x2 - CFB x3 - OFB 07 - Reserved 0F - Reserved F0 - Misc Ciphers (Real Ciphers without hashing algo) F1 - Misc Ciphers (Combine) 01 - Zip 01 - Main Zip crypto algo 03 - RAR 02 - 03 - Rar29 AES-128 + (modified SHA-1) 07 - 7z 01 - AES-256 + SHA-256 07 - Hash (subject to change) 00 - 01 - CRC 02 - SHA-1 03 - SHA-256 04 - SHA-384 05 - SHA-512 F0 - Misc Hash F1 - Misc 03 - RAR 03 - Rar29 Password Hashing (modified SHA1) 07 - 7z 01 - SHA-256 Password Hashing --- End of document ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LZMAAlone.lpr���������������������������������������������0000644�0001750�0000144�00000001760�15104114162�021650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program LZMAAlone; {$MODE Delphi} uses UCRC in 'UCRC.pas', ULZBinTree in 'compression\LZ\ULZBinTree.pas', ULZInWindow in 'compression\LZ\ULZInWindow.pas', ULZOutWindow in 'compression\LZ\ULZOutWindow.pas', ULZMABase in 'compression\LZMA\ULZMABase.pas', ULZMACommon in 'compression\LZMA\ULZMACommon.pas', ULZMADecoder in 'compression\LZMA\ULZMADecoder.pas', ULZMAEncoder in 'compression\LZMA\ULZMAEncoder.pas', UBitTreeDecoder in 'compression\RangeCoder\UBitTreeDecoder.pas', UBitTreeEncoder in 'compression\RangeCoder\UBitTreeEncoder.pas', URangeDecoder in 'compression\RangeCoder\URangeDecoder.pas', URangeEncoder in 'compression\RangeCoder\URangeEncoder.pas', UBufferedFS in 'UBufferedFS.pas', ULZMAAlone in 'ULZMAAlone.pas', ULZMABench in 'ULZMABench.pas',SysUtils; var lz:TLZMAAlone; {$IFDEF MSWINDOWS} {$APPTYPE CONSOLE} {$ENDIF} begin try lz:=TLZMAAlone.Create; lz.Main; lz.Free; except on e:exception do writeln(e.message); end; end. ����������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LZMAAlone.lpi���������������������������������������������0000644�0001750�0000144�00000014541�15104114162�021640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="\"/> <Version Value="5"/> <General> <MainUnit Value="0"/> <IconPath Value="./"/> <TargetFileExt Value=".exe"/> <ActiveEditorIndexAtStart Value="3"/> </General> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <CommandLineParams Value="e "C:\Games\Black & White 2\white.exe" c:\desktop\test.lz"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="16"> <Unit0> <Filename Value="LZMAAlone.lpr"/> <IsPartOfProject Value="True"/> <CursorPos X="18" Y="23"/> <TopLine Value="1"/> <EditorIndex Value="5"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit0> <Unit1> <Filename Value="UCRC.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="UCRC"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit1> <Unit2> <Filename Value="compression\LZ\ULZBinTree.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZBinTree"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit2> <Unit3> <Filename Value="compression\LZ\ULZInWindow.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZInWindow"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit3> <Unit4> <Filename Value="compression\LZ\ULZOutWindow.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZOutWindow"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit4> <Unit5> <Filename Value="compression\LZMA\ULZMABase.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMABase"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit5> <Unit6> <Filename Value="compression\LZMA\ULZMACommon.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMACommon"/> <CursorPos X="18" Y="19"/> <TopLine Value="1"/> <EditorIndex Value="1"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit6> <Unit7> <Filename Value="compression\LZMA\ULZMADecoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMADecoder"/> <CursorPos X="15" Y="151"/> <TopLine Value="367"/> <EditorIndex Value="2"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit7> <Unit8> <Filename Value="compression\LZMA\ULZMAEncoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMAEncoder"/> <CursorPos X="35" Y="451"/> <TopLine Value="443"/> <EditorIndex Value="3"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit8> <Unit9> <Filename Value="compression\RangeCoder\UBitTreeDecoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="UBitTreeDecoder"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit9> <Unit10> <Filename Value="compression\RangeCoder\UBitTreeEncoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="UBitTreeEncoder"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit10> <Unit11> <Filename Value="compression\RangeCoder\URangeDecoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="URangeDecoder"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit11> <Unit12> <Filename Value="compression\RangeCoder\URangeEncoder.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="URangeEncoder"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit12> <Unit13> <Filename Value="UBufferedFS.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="UBufferedFS"/> <CursorPos X="17" Y="37"/> <TopLine Value="22"/> <EditorIndex Value="4"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit13> <Unit14> <Filename Value="ULZMAAlone.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMAAlone"/> <CursorPos X="83" Y="315"/> <TopLine Value="300"/> <EditorIndex Value="0"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit14> <Unit15> <Filename Value="ULZMABench.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="ULZMABench"/> <CursorPos X="15" Y="3"/> <TopLine Value="1"/> <UsageCount Value="20"/> </Unit15> </Units> <JumpHistory Count="1" HistoryIndex="0"> <Position1> <Filename Value="compression\LZMA\ULZMAEncoder.pas"/> <Caret Line="130" Column="38" TopLine="115"/> </Position1> </JumpHistory> </ProjectOptions> <CompilerOptions> <Version Value="5"/> <PathDelim Value="\"/> <SearchPaths> <IncludeFiles Value="compression\LZ\;compression\LZMA\;compression\RangeCoder\"/> <OtherUnitFiles Value="compression\LZ\;compression\LZMA\;compression\RangeCoder\"/> </SearchPaths> <CodeGeneration> <Generate Value="Faster"/> </CodeGeneration> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LZMAAlone.dpr���������������������������������������������0000644�0001750�0000144�00000001760�15104114162�021640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program LZMAAlone; {$MODE Delphi} uses UCRC in 'UCRC.pas', ULZBinTree in 'compression\LZ\ULZBinTree.pas', ULZInWindow in 'compression\LZ\ULZInWindow.pas', ULZOutWindow in 'compression\LZ\ULZOutWindow.pas', ULZMABase in 'compression\LZMA\ULZMABase.pas', ULZMACommon in 'compression\LZMA\ULZMACommon.pas', ULZMADecoder in 'compression\LZMA\ULZMADecoder.pas', ULZMAEncoder in 'compression\LZMA\ULZMAEncoder.pas', UBitTreeDecoder in 'compression\RangeCoder\UBitTreeDecoder.pas', UBitTreeEncoder in 'compression\RangeCoder\UBitTreeEncoder.pas', URangeDecoder in 'compression\RangeCoder\URangeDecoder.pas', URangeEncoder in 'compression\RangeCoder\URangeEncoder.pas', UBufferedFS in 'UBufferedFS.pas', ULZMAAlone in 'ULZMAAlone.pas', ULZMABench in 'ULZMABench.pas',SysUtils; var lz:TLZMAAlone; {$IFDEF MSWINDOWS} {$APPTYPE CONSOLE} {$ENDIF} begin try lz:=TLZMAAlone.Create; lz.Main; lz.Free; except on e:exception do writeln(e.message); end; end. ����������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LZMAAlone.dof���������������������������������������������0000644�0001750�0000144�00000015015�15104114162�021621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[FileVersion] Version=7.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; NamespacePrefix= SymbolDeprecated=1 SymbolLibrary=1 SymbolPlatform=1 UnitLibrary=1 UnitPlatform=1 UnitDeprecated=1 HResultCompat=1 HidingMember=1 HiddenVirtual=1 Garbage=1 BoundsError=1 ZeroNilCompat=1 StringConstTruncated=1 ForLoopVarVarPar=1 TypedConstVarPar=1 AsgToTypedConst=1 CaseLabelRange=1 ForVariable=1 ConstructingAbstract=1 ComparisonFalse=1 ComparisonTrue=1 ComparingSignedUnsigned=1 CombiningSignedUnsigned=1 UnsupportedConstruct=1 FileOpen=1 FileOpenUnitSrc=1 BadGlobalSymbol=1 DuplicateConstructorDestructor=1 InvalidDirective=1 PackageNoLink=1 PackageThreadVar=1 ImplicitImport=1 HPPEMITIgnored=1 NoRetVal=1 UseBeforeDef=1 ForLoopVarUndef=1 UnitNameMismatch=1 NoCFGFileFound=1 MessageDirective=1 ImplicitVariants=1 UnicodeToLocale=1 LocaleToUnicode=1 ImagebaseMultiple=1 SuspiciousTypecast=1 PrivatePropAccessor=1 UnsafeType=0 UnsafeCode=0 UnsafeCast=0 [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath= Packages=PFMod;PDirDialog;pamixer;PMedia;DJcl;JvStdCtrlsD7R;JvAppFrmD7R;JvCoreD7R;JvBandsD7R;JvBDED7R;JvDBD7R;JvDlgsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;qrpt;JvGlobusD7R;JvHMID7R;JvInspectorD7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvSystemD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;ppsvApplicationHook Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams=e "c:\desktop\badlzma\dgaport.inf" "c:\desktop\test.lz" HostApplication=C:\Program Files\Borland\Delphi7\Projects\lzmabench\Project1.exe Launcher= UseLauncher=0 DebugCWD= [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Excluded Packages] C:\Program Files\Borland\Delphi7\Bin\dbx70.bpl=Borland SQL Explorer UI Package c:\program files\borland\delphi7\Bin\dclshlctrls70.bpl=Shell Control Property and Component Editors c:\program files\borland\delphi7\bin\dclRave70.bpl=Rave Reports BE 5.0 Package c:\program files\borland\delphi7\Projects\Bpl\L207vd70.bpl=TurboPower LockBox 2.07 Design-time package - VCL60 C:\Program Files\Borland\Delphi7\Bin\dclstd70.bpl=Borland Standard Components c:\program files\borland\delphi7\Bin\dclie70.bpl=Internet Explorer Components c:\program files\borland\delphi7\Bin\dcl31w70.bpl=Delphi 1.0 Compatibility Components c:\program files\borland\delphi7\Bin\dclIntraweb_50_70.bpl=Intraweb 5.0 Design Package for Delphi 7 c:\program files\borland\delphi7\Bin\dclofficexp70.bpl=Microsoft Office XP Sample Automation Server Wrapper Components c:\program files\borland\delphi7\Projects\Bpl\CrossKylix.bpl=CrossKylix IDE Plugin c:\program files\borland\delphi7\Projects\Bpl\VirtualTreesD7D.bpl=Virtual Treeview design time package c:\program files\borland\delphi7\Projects\Bpl\dclIndyCore70.bpl=Indy 10 Core Design Time c:\program files\borland\delphi7\Projects\Bpl\dclIndyProtocols70.bpl=Indy 10 Protocols Design Time c:\program files\borland\delphi7\Projects\Bpl\Png Delphi for Delphi 7.bpl=PNG Delphi (http://pngdelphi.sourceforge.net) c:\program files\borland\delphi7\Projects\Bpl\PDAB.bpl=(untitled) C:\Program Files\Borland\Delphi7\Projects\Bpl\Plinklists.bpl=(untitled) C:\Program Files\Borland\Delphi7\Projects\Bpl\PGIF.bpl=(untitled) c:\program files\borland\delphi7\Bin\idl2paswizardpkg.bpl=Borland IDL2PAS wizard package c:\program files\borland\delphi7\Bin\dclite70.bpl=Borland Integrated Translation Environment c:\program files\borland\delphi7\Bin\dclnet70.bpl=Borland Internet Components c:\program files\borland\delphi7\Bin\dclmcn70.bpl=Borland DataSnap Connection Components C:\Program Files\Borland\Delphi7\Bin\dclmid70.bpl=Borland MyBase DataAccess Components C:\Program Files\Borland\Delphi7\Bin\dcldb70.bpl=Borland Database Components c:\program files\borland\delphi7\Bin\dclsoap70.bpl=Borland SOAP Components c:\program files\borland\delphi7\Bin\dclocx70.bpl=Borland Sample Imported ActiveX Controls c:\program files\borland\delphi7\Bin\dclsmp70.bpl=Borland Sample Components c:\program files\borland\delphi7\Bin\dcldbx70.bpl=Borland dbExpress Components c:\program files\borland\delphi7\Bin\dcldbxcds70.bpl=Borland SimpleDataset Component (DBX) c:\program files\borland\delphi7\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package C:\Program Files\Borland\Delphi7\Bin\dclbde70.bpl=Borland BDE DB Components c:\program files\borland\delphi7\Bin\dclwbm70.bpl=Borland InternetExpress Components c:\program files\borland\delphi7\Bin\dclwebsnap70.bpl=Borland WebSnap Components c:\program files\borland\delphi7\Bin\dclado70.bpl=Borland ADO DB Components c:\program files\borland\delphi7\Bin\DCLIB70.bpl=InterBase Data Access Components c:\program files\borland\delphi7\Bin\dcltee70.bpl=TeeChart Components c:\program files\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components c:\program files\borland\delphi7\Bin\dclclxdb70.bpl=Borland CLX Database Components C:\Program Files\Borland\Delphi7\Bin\dclclxstd70.bpl=Borland CLX Standard Components c:\program files\borland\delphi7\Bin\dclsmpedit70.bpl=Borland Editor Script Enhancements c:\program files\borland\delphi7\Bin\applet70.bpl=Borland Control Panel Applet Package c:\program files\borland\delphi7\Bin\dclemacsedit70.bpl=Borland Editor Emacs Enhancements c:\program files\borland\delphi7\Bin\dclact70.bpl=Borland ActionBar Components c:\program files\borland\delphi7\Bin\dclmlwiz70.bpl=Borland Markup Language Wizards D:\WINDOWS\system32\ibevnt70.bpl=Borland Interbase Event Alerter Component c:\program files\borland\delphi7\Bin\dclindy70.bpl=Internet Direct (Indy) for D7 Property and Component Editors [HistoryLists\hlUnitAliases] Count=1 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [HistoryLists\hlSearchPath] Count=1 Item0=C:\Program Files\Promixis\Girder\includes �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LZMAAlone.cfg���������������������������������������������0000644�0001750�0000144�00000000662�15104114162�021612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-$A8 -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I+ -$J- -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\program files\borland\delphi7\Projects\Bpl" -LN"c:\program files\borland\delphi7\Projects\Bpl" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST ������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/LGPL.txt��������������������������������������������������0000644�0001750�0000144�00000063514�15104114162�020713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/zip/src/lzma/CPL.html��������������������������������������������������0000644�0001750�0000144�00000035531�15104114162�020716� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD><TITLE>Common Public License - v 1.0

Common Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    b) in the case of each subsequent Contributor:
    i) changes to the Program, and
    ii) additions to the Program;
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

    a) it complies with the terms and conditions of this Agreement; and
    b) its license agreement:
    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

    a) it must be made available under this Agreement; and
    b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

doublecmd-1.1.30/plugins/wcx/zip/src/lzma/7zFormat.txt0000644000175000001440000001617215104114162021664 0ustar alexxusers7z Format description (2.30 Beta 25) ----------------------------------- This file contains description of 7z archive format. 7z archive can contain files compressed with any method. See "Methods.txt" for description for defined compressing methods. Format structure Overview ------------------------- Some fields can be optional. Archive structure ~~~~~~~~~~~~~~~~~ SignatureHeader [PackedStreams] [PackedStreamsForHeaders] [ Header or { Packed Header HeaderInfo } ] Header structure ~~~~~~~~~~~~~~~~ { ArchiveProperties AdditionalStreams { PackInfo { PackPos NumPackStreams Sizes[NumPackStreams] CRCs[NumPackStreams] } CodersInfo { NumFolders Folders[NumFolders] { NumCoders CodersInfo[NumCoders] { ID NumInStreams; NumOutStreams; PropertiesSize Properties[PropertiesSize] } NumBindPairs BindPairsInfo[NumBindPairs] { InIndex; OutIndex; } PackedIndices } UnPackSize[Folders][Folders.NumOutstreams] CRCs[NumFolders] } SubStreamsInfo { NumUnPackStreamsInFolders[NumFolders]; UnPackSizes[] CRCs[] } } MainStreamsInfo { (Same as in AdditionalStreams) } FilesInfo { NumFiles Properties[] { ID Size Data } } } HeaderInfo structure ~~~~~~~~~~~~~~~~~~~~ { (Same as in AdditionalStreams) } Notes about Notation and encoding --------------------------------- 7z uses little endian encoding. 7z archive format has optional headers that are marked as [] Header [] REAL_UINT64 means real UINT64. UINT64 means real UINT64 encoded with the following scheme: Size of encoding sequence depends from first byte: First_Byte Extra_Bytes Value (binary) 0xxxxxxx : ( xxxxxxx ) 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y ... 1111110x BYTE y[6] : ( x << (8 * 6)) + y 11111110 BYTE y[7] : y 11111111 BYTE y[8] : y Property IDs ------------ 0x00 = kEnd, 0x01 = kHeader, 0x02 = kArchiveProperties, 0x03 = kAdditionalStreamsInfo, 0x04 = kMainStreamsInfo, 0x05 = kFilesInfo, 0x06 = kPackInfo, 0x07 = kUnPackInfo, 0x08 = kSubStreamsInfo, 0x09 = kSize, 0x0A = kCRC, 0x0B = kFolder, 0x0C = kCodersUnPackSize, 0x0D = kNumUnPackStream, 0x0E = kEmptyStream, 0x0F = kEmptyFile, 0x10 = kAnti, 0x11 = kName, 0x12 = kCreationTime, 0x13 = kLastAccessTime, 0x14 = kLastWriteTime, 0x15 = kWinAttributes, 0x16 = kComment, 0x17 = kEncodedHeader, 7z format headers ----------------- SignatureHeader ~~~~~~~~~~~~~~~ BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; ArchiveVersion { BYTE Major; // now = 0 BYTE Minor; // now = 2 }; UINT32 StartHeaderCRC; StartHeader { REAL_UINT64 NextHeaderOffset REAL_UINT64 NextHeaderSize UINT32 NextHeaderCRC } ........................... ArchiveProperties ~~~~~~~~~~~~~~~~~ BYTE NID::kArchiveProperties (0x02) while(true) { BYTE PropertyType; if (aType == 0) break; UINT64 PropertySize; BYTE PropertyData[PropertySize]; } Digests (NumStreams) ~~~~~~~~~~~~~~~~~~~~~ BYTE AllAreDefined if (AllAreDefined == 0) { for(NumStreams) BIT Defined } UINT32 CRCs[NumDefined] PackInfo ~~~~~~~~~~~~ BYTE NID::kPackInfo (0x06) UINT64 PackPos UINT64 NumPackStreams [] BYTE NID::kSize (0x09) UINT64 PackSizes[NumPackStreams] [] [] BYTE NID::kCRC (0x0A) PackStreamDigests[NumPackStreams] [] BYTE NID::kEnd Folder ~~~~~~ UINT64 NumCoders; for (NumCoders) { BYTE { 0:3 DecompressionMethod.IDSize 4: 0 - IsSimple 1 - Is not simple 5: 0 - No Attributes 1 - There Are Attributes 7: 0 - Last Method in Alternative_Method_List 1 - There are more alternative methods } BYTE DecompressionMethod.ID[DecompressionMethod.IDSize] if (!IsSimple) { UINT64 NumInStreams; UINT64 NumOutStreams; } if (DecompressionMethod[0] != 0) { UINT64 PropertiesSize BYTE Properties[PropertiesSize] } } NumBindPairs = NumOutStreamsTotal - 1; for (NumBindPairs) { UINT64 InIndex; UINT64 OutIndex; } NumPackedStreams = NumInStreamsTotal - NumBindPairs; if (NumPackedStreams > 1) for(NumPackedStreams) { UINT64 Index; }; Coders Info ~~~~~~~~~~~ BYTE NID::kUnPackInfo (0x07) BYTE NID::kFolder (0x0B) UINT64 NumFolders BYTE External switch(External) { case 0: Folders[NumFolders] case 1: UINT64 DataStreamIndex } BYTE ID::kCodersUnPackSize (0x0C) for(Folders) for(Folder.NumOutStreams) UINT64 UnPackSize; [] BYTE NID::kCRC (0x0A) UnPackDigests[NumFolders] [] BYTE NID::kEnd SubStreams Info ~~~~~~~~~~~~~~ BYTE NID::kSubStreamsInfo; (0x08) [] BYTE NID::kNumUnPackStream; (0x0D) UINT64 NumUnPackStreamsInFolders[NumFolders]; [] [] BYTE NID::kSize (0x09) UINT64 UnPackSizes[] [] [] BYTE NID::kCRC (0x0A) Digests[Number of streams with unknown CRC] [] BYTE NID::kEnd Streams Info ~~~~~~~~~~~~ [] PackInfo [] [] CodersInfo [] [] SubStreamsInfo [] BYTE NID::kEnd FilesInfo ~~~~~~~~~ BYTE NID::kFilesInfo; (0x05) UINT64 NumFiles while(true) { BYTE PropertyType; if (aType == 0) break; UINT64 Size; switch(PropertyType) { kEmptyStream: (0x0E) for(NumFiles) BIT IsEmptyStream kEmptyFile: (0x0F) for(EmptyStreams) BIT IsEmptyFile kAnti: (0x10) for(EmptyStreams) BIT IsAntiFile case kCreationTime: (0x12) case kLastAccessTime: (0x13) case kLastWriteTime: (0x14) BYTE AllAreDefined if (AllAreDefined == 0) { for(NumFiles) BIT TimeDefined } BYTE External; if(External != 0) UINT64 DataIndex [] for(Definded Items) UINT32 Time [] kNames: (0x11) BYTE External; if(External != 0) UINT64 DataIndex [] for(Files) { wchar_t Names[NameSize]; wchar_t 0; } [] kAttributes: (0x15) BYTE AllAreDefined if (AllAreDefined == 0) { for(NumFiles) BIT AttributesAreDefined } BYTE External; if(External != 0) UINT64 DataIndex [] for(Definded Attributes) UINT32 Attributes [] } } Header ~~~~~~ BYTE NID::kHeader (0x01) [] ArchiveProperties [] [] BYTE NID::kAdditionalStreamsInfo; (0x03) StreamsInfo [] [] BYTE NID::kMainStreamsInfo; (0x04) StreamsInfo [] [] FilesInfo [] BYTE NID::kEnd HeaderInfo ~~~~~~~~~~ [] BYTE NID::kEncodedHeader; (0x17) StreamsInfo for Encoded Header [] --- End of document doublecmd-1.1.30/plugins/wcx/zip/src/lzma/7zC.txt0000644000175000001440000001511415104114162020611 0ustar alexxusers7z ANSI-C Decoder 4.23 ---------------------- 7z ANSI-C Decoder 4.23 Copyright (C) 1999-2005 Igor Pavlov 7z ANSI-C provides 7z/LZMA decoding. 7z ANSI-C version is simplified version ported from C++ code. LZMA is default and general compression method of 7z format in 7-Zip compression program (www.7-zip.org). LZMA provides high compression ratio and very fast decompression. LICENSE ------- Read lzma.txt for information about license. Files --------------------- 7zAlloc.* - Allocate and Free 7zBuffer.* - Buffer structure 7zCrc.* - CRC32 code 7zDecode.* - Low level memory->memory decoding 7zExtract.* - High level stream->memory decoding 7zHeader.* - .7z format constants 7zIn.* - .7z archive opening 7zItem.* - .7z structures 7zMain.c - Test application 7zMethodID.* - MethodID structure 7zTypes.h - Base types and constants How To Use ---------- You must download 7-Zip program from www.7-zip.org. You can create .7z archive with 7z.exe or 7za.exe: 7za.exe a archive.7z *.htm -r -mx -m0fb=255 -mf=off If you have big number of files in archive, and you need fast extracting, you can use partly-solid archives: 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K -mf=off In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only 512KB for extracting one file from such archive. Limitations of current version of 7z ANSI-C Decoder --------------------------------------------------- - It reads only "FileName", "Size", and "CRC" information for each file in archive. - It supports only LZMA and Copy (no compression) methods. - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. These limitations will be fixed in future versions. Using 7z ANSI-C Decoder Test application: ----------------------------------------- Usage: 7zDec : e: Extract files from archive l: List contents of archive t: Test integrity of archive Example: 7zDec l archive.7z lists contents of archive.7z 7zDec e archive.7z extracts files from archive.7z to current folder. How to use .7z Decoder ---------------------- .7z Decoder can be compiled in one of two modes: 1) Default mode. In that mode 7z Decoder will read full compressed block to RAM before decompressing. 2) Mode with defined _LZMA_IN_CB. In that mode 7z Decoder can read compressed block by parts. And you can specify desired buffer size. So memory requirements can be reduced. But decompressing speed will be 5-10% lower and code size is slightly larger. Memory allocation ~~~~~~~~~~~~~~~~~ 7z Decoder uses two memory pools: 1) Temporary pool 2) Main pool Such scheme can allow you to avoid fragmentation of allocated blocks. Steps for using 7z decoder -------------------------- Use code at 7zMain.c as example. 1) Declare variables: inStream /* implements ISzInStream interface */ CArchiveDatabaseEx db; /* 7z archive database structure */ ISzAlloc allocImp; /* memory functions for main pool */ ISzAlloc allocTempImp; /* memory functions for temporary pool */ 2) call InitCrcTable(); function to initialize CRC structures. 3) call SzArDbExInit(&db); function to initialize db structures. 4) call SzArchiveOpen(inStream, &db, &allocMain, &allocTemp) to open archive This function opens archive "inStream" and reads headers to "db". All items in "db" will be allocated with "allocMain" functions. SzArchiveOpen function allocates and frees temporary structures by "allocTemp" functions. 5) List items or Extract items Listing code: ~~~~~~~~~~~~~ { UInt32 i; for (i = 0; i < db.Database.NumFiles; i++) { CFileItem *f = db.Database.Files + i; printf("%10d %s\n", (int)f->Size, f->Name); } } Extracting code: ~~~~~~~~~~~~~~~~ SZ_RESULT SzExtract( ISzInStream *inStream, CArchiveDatabaseEx *db, UInt32 fileIndex, /* index of file */ UInt32 *blockIndex, /* index of solid block */ Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ size_t *outBufferSize, /* buffer size for output buffer */ size_t *offset, /* offset of stream for required file in *outBuffer */ size_t *outSizeProcessed, /* size of file in *outBuffer */ ISzAlloc *allocMain, ISzAlloc *allocTemp); If you need to decompress more than one file, you can send these values from previous call: blockIndex, outBuffer, outBufferSize, You can consider "outBuffer" as cache of solid block. If your archive is solid, it will increase decompression speed. After decompressing you must free "outBuffer": allocImp.Free(outBuffer); 6) call SzArDbExFree(&db, allocImp.Free) to free allocated items in "db". Memory requirements for .7z decoding ------------------------------------ Memory usage for Archive opening: - Temporary pool: - Memory for compressed .7z headers (if _LZMA_IN_CB is not defined) - Memory for uncompressed .7z headers - some other temporary blocks - Main pool: - Memory for database: Estimated size of one file structures in solid archive: - Size (4 or 8 Bytes) - CRC32 (4 bytes) - Some file information (4 bytes) - File Name (variable length) + pointer + allocation structures Memory usage for archive Decompressing: - Temporary pool: - Memory for compressed solid block (if _LZMA_IN_CB is not defined) - Memory for LZMA decompressing structures - Main pool: - Memory for decompressed solid block If _LZMA_IN_CB is defined, 7z Decoder will not allocate memory for compressed blocks. Instead of this, you must allocate buffer with desired size before calling 7z Decoder. Use 7zMain.c as example. EXIT codes ----------- 7z Decoder functions can return one of the following codes: #define SZ_OK (0) #define SZE_DATA_ERROR (1) #define SZE_OUTOFMEMORY (2) #define SZE_CRC_ERROR (3) #define SZE_NOTIMPL (4) #define SZE_FAIL (5) #define SZE_ARCHIVE_ERROR (6) LZMA Defines ------------ _LZMA_IN_CB - Use special callback mode for input stream to reduce memory requirements _SZ_FILE_SIZE_64 - define it if you need support for files larger than 4 GB _SZ_NO_INT_64 - define it if your compiler doesn't support long long int _LZMA_PROB32 - it can increase LZMA decompressing speed on some 32-bit CPUs. _SZ_ONE_DIRECTORY - define it if you want to locate all source files to one directory _SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. --- http://www.7-zip.org http://www.7-zip.org/support.html doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/0000755000175000001440000000000015104114162020234 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/zip/src/inflate64/outputwindow.pas0000644000175000001440000001256215104114162023537 0ustar alexxusers// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE.txt file in the directory for more information. // The Pascal translation by Alexander Koblov. unit OutputWindow; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, InputBuffer; type { TOutputWindow } TOutputWindow = class private // With Deflate64 we can have up to a 65536 length as well as up to a 65538 distance. This means we need a Window that is at // least 131074 bytes long so we have space to retrieve up to a full 64kb in lookback and place it in our buffer without // overwriting existing data. OutputWindow requires that the WindowSize be an exponent of 2, so we round up to 2^18. const WINDOW_SIZE = Integer(262144); const WINDOW_MASK = Integer(262143); private _window: array [0..Pred(WINDOW_SIZE)] of Byte; // The window is 2^18 bytes _end: Integer; // this is the position to where we should write next byte _bytesUsed: Integer; // The number of bytes in the output window which is not consumed. public // Add a byte to output window procedure Write(b: Byte); procedure WriteLengthDistance(length, distance: Integer); // Copy up to length of bytes from input directly function CopyFrom(input: TInputBuffer; length: Integer): Integer; // Free space in output window function FreeBytes: Integer; // Copy the decompressed bytes to output array function CopyTo(output: PByte; offset, length: Integer): Integer; // Bytes not consumed in output window property AvailableBytes: Integer read _bytesUsed; end; implementation uses Math; { TOutputWindow } procedure TOutputWindow.Write(b: Byte); begin Assert(_bytesUsed < WINDOW_SIZE, 'Can''t add byte when window is full!'); _window[_end] := b; Inc(_end); _end := _end and WINDOW_MASK; Inc(_bytesUsed); end; procedure TOutputWindow.WriteLengthDistance(length, distance: Integer); var copyStart, border: Integer; begin Assert((_bytesUsed + length) <= WINDOW_SIZE, 'No Enough space'); // move backwards distance bytes in the output stream, // and copy length bytes from this position to the output stream. _bytesUsed += length; copyStart := (_end - distance) and WINDOW_MASK; // start position for coping. border := WINDOW_SIZE - length; if (copyStart <= border) and (_end < border) then begin if (length <= distance) then begin Move(_window[copyStart], _window[_end], length); _end += length; end else begin // The referenced string may overlap the current // position; for example, if the last 2 bytes decoded have values // X and Y, a string reference with // adds X,Y,X,Y,X to the output stream. while (length > 0) do begin _window[_end] := _window[copyStart]; Inc(_end); Dec(length); Inc(copyStart); end; end; end else begin // copy byte by byte while (length > 0) do begin _window[_end] := _window[copyStart]; Inc(_end); Dec(length); Inc(copyStart); _end := _end and WINDOW_MASK; copyStart := copyStart and WINDOW_MASK; end; end; end; function TOutputWindow.CopyFrom(input: TInputBuffer; length: Integer): Integer; var copied, tailLen: Integer; begin length := Math.Min(Math.Min(length, WINDOW_SIZE - _bytesUsed), input.AvailableBytes); // We might need wrap around to copy all bytes. tailLen := WINDOW_SIZE - _end; if (length > tailLen) then begin // copy the first part copied := input.CopyTo(_window, _end, tailLen); if (copied = tailLen) then begin // only try to copy the second part if we have enough bytes in input copied += input.CopyTo(_window, 0, length - tailLen); end; end else begin // only one copy is needed if there is no wrap around. copied := input.CopyTo(_window, _end, length); end; _end := (_end + copied) and WINDOW_MASK; _bytesUsed += copied; Result := copied; end; function TOutputWindow.FreeBytes: Integer; begin Result := WINDOW_SIZE - _bytesUsed; end; function TOutputWindow.CopyTo(output: PByte; offset, length: Integer): Integer; var copyEnd, copied, tailLen: Integer; begin if (length > _bytesUsed) then begin // we can copy all the decompressed bytes out copyEnd := _end; length := _bytesUsed; end else begin copyEnd := (_end - _bytesUsed + length) and WINDOW_MASK; // copy length of bytes end; copied := length; tailLen := length - copyEnd; if (tailLen > 0) then begin // this means we need to copy two parts separately // copy tailLen bytes from the end of output window Move(_window[WINDOW_SIZE - tailLen], output[offset], tailLen); offset += tailLen; length := copyEnd; end; if (length > 0) then begin Move(_window[copyEnd - length], output[offset], length); end; _bytesUsed -= copied; Assert( _bytesUsed >= 0, 'check this function and find why we copied more bytes than we have' ); Result := copied; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/inputbuffer.pas0000644000175000001440000001276715104114162023307 0ustar alexxusers// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE.txt file in the directory for more information. // The Pascal translation by Alexander Koblov. unit InputBuffer; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils; type { TInputBuffer } TInputBuffer = class private _buffer: PByte; // byte array to store input _start: Integer; // start poisition of the buffer _end: Integer; // end position of the buffer _bitBuffer: Cardinal; // store the bits here, we can quickly shift in this buffer _bitsInBuffer: Integer; // number of bits available in bitBuffer public // Total bytes available in the input buffer function AvailableBytes: Integer; // Ensure that count bits are in the bit buffer function EnsureBitsAvailable(count: Integer): Boolean; // This function will try to load 16 or more bits into bitBuffer function TryLoad16Bits: Cardinal; // Gets count bits from the input buffer. Returns -1 if not enough bits available function GetBits(count: Integer): Integer; // Copies length bytes from input buffer to output buffer starting at output[offset] function CopyTo(output: PByte; offset, length: Integer): Integer; // Return true is all input bytes are used function NeedsInput: Boolean; // Set the byte array to be processed procedure SetInput(buffer: PByte; offset, length: Integer); // Skip n bits in the buffer procedure SkipBits(n: Integer); /// Skips to the next byte boundary procedure SkipToByteBoundary; // Total bits available in the input buffer property AvailableBits: Integer read _bitsInBuffer; end; implementation { TInputBuffer } function TInputBuffer.AvailableBytes: Integer; begin Result:= (_end - _start) + (_bitsInBuffer div 8); end; function TInputBuffer.EnsureBitsAvailable(count: Integer): Boolean; begin Assert((0 < count) and (count <= 16), 'count is invalid.'); // manual inlining to improve perf if (_bitsInBuffer < count) then begin if (NeedsInput()) then begin Exit(false); end; // insert a byte to bitbuffer _bitBuffer := _bitBuffer or Cardinal(_buffer[_start]) << _bitsInBuffer; _bitsInBuffer += 8; Inc(_start); if (_bitsInBuffer < count) then begin if (NeedsInput()) then begin Exit(false); end; // insert a byte to bitbuffer _bitBuffer := _bitBuffer or Cardinal(_buffer[_start]) << _bitsInBuffer; _bitsInBuffer += 8; Inc(_start); end; end; Result := true; end; function TInputBuffer.TryLoad16Bits: Cardinal; begin if (_bitsInBuffer < 8) then begin if (_start < _end) then begin _bitBuffer := _bitBuffer or Cardinal(_buffer[_start]) << _bitsInBuffer; _bitsInBuffer += 8; Inc(_start); end; if (_start < _end) then begin _bitBuffer := _bitBuffer or Cardinal(_buffer[_start]) << _bitsInBuffer; _bitsInBuffer += 8; Inc(_start); end; end else if (_bitsInBuffer < 16) then begin if (_start < _end) then begin _bitBuffer := _bitBuffer or Cardinal(_buffer[_start]) << _bitsInBuffer; _bitsInBuffer += 8; Inc(_start); end; end; Result := _bitBuffer; end; function TInputBuffer.GetBits(count: Integer): Integer; begin Assert((0 < count) and (count <= 16), 'count is invalid.'); if (not EnsureBitsAvailable(count)) then begin Exit(-1); end; result := Integer(_bitBuffer) and (((Cardinal(1) << count) - 1)); _bitBuffer := _bitBuffer >> count; _bitsInBuffer -= count; end; function TInputBuffer.CopyTo(output: PByte; offset, length: Integer): Integer; var avail: Integer; bytesFromBitBuffer: Integer = 0; begin Assert(output <> nil); Assert(offset >= 0); Assert(length >= 0); // Assert(offset <= System.Length(output) - length); Assert((_bitsInBuffer mod 8) = 0); // Copy the bytes in bitBuffer first. while (_bitsInBuffer > 0) and (length > 0) do begin output[offset] := Byte(_bitBuffer); _bitBuffer := _bitBuffer >> 8; _bitsInBuffer -= 8; Inc(offset); Dec(length); Inc(bytesFromBitBuffer); end; if (length = 0) then begin Exit(bytesFromBitBuffer); end; avail := _end - _start; if (length > avail) then begin length := avail; end; Move(_buffer[_start], output[offset], length); _start += length; Result := bytesFromBitBuffer + length; end; function TInputBuffer.NeedsInput(): Boolean; begin Result := (_start = _end); end; procedure TInputBuffer.SetInput(buffer: PByte; offset, length: Integer); begin Assert(buffer <> nil); Assert(offset >= 0); Assert(length >= 0); // Assert(offset <= System.Length(buffer) - length); Assert(_start = _end); _buffer := buffer; _start := offset; _end := offset + length; end; procedure TInputBuffer.SkipBits(n: Integer); begin Assert( _bitsInBuffer >= n, 'No enough bits in the buffer, Did you call EnsureBitsAvailable?' ); _bitBuffer := _bitBuffer >> n; _bitsInBuffer -= n; end; procedure TInputBuffer.SkipToByteBoundary; begin _bitBuffer := _bitBuffer >> (_bitsInBuffer mod 8); _bitsInBuffer -= (_bitsInBuffer mod 8); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/inflatermanaged.pas0000644000175000001440000006011415104114162024064 0ustar alexxusers// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE.txt file in the directory for more information. // The Pascal translation by Alexander Koblov. unit InflaterManaged; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, OutputWindow, InputBuffer, HuffmanTree; type TBlockType = ( Uncompressed = 0, Static = 1, Dynamic = 2 ); // Do not rearrange the enum values. TInflaterState = ( ReadingHeader = 0, // Only applies to GZIP ReadingBFinal = 2, // About to read bfinal bit ReadingBType = 3, // About to read blockType bits ReadingNumLitCodes = 4, // About to read # literal codes ReadingNumDistCodes = 5, // About to read # dist codes ReadingNumCodeLengthCodes = 6, // About to read # code length codes ReadingCodeLengthCodes = 7, // In the middle of reading the code length codes ReadingTreeCodesBefore = 8, // In the middle of reading tree codes (loop top) ReadingTreeCodesAfter = 9, // In the middle of reading tree codes (extension; code > 15) DecodeTop = 10, // About to decode a literal (char/match) in a compressed block HaveInitialLength = 11, // Decoding a match, have the literal code (base length) HaveFullLength = 12, // Ditto, now have the full match length (incl. extra length bits) HaveDistCode = 13, // Ditto, now have the distance code also, need extra dist bits //* uncompressed blocks */ UncompressedAligning = 15, UncompressedByte1 = 16, UncompressedByte2 = 17, UncompressedByte3 = 18, UncompressedByte4 = 19, DecodingUncompressed = 20, // These three apply only to GZIP StartReadingFooter = 21, // (Initialisation for reading footer) ReadingFooter = 22, VerifyingFooter = 23, Done = 24 // Finished ); type { TInflaterManaged } TInflaterManaged = class private _output: TOutputWindow; _input: TInputBuffer; _literalLengthTree: IHuffmanTree; _distanceTree: IHuffmanTree; _state: TInflaterState; _bfinal: Integer; _blockType: TBlockType; // uncompressed block _blockLengthBuffer: array[0..3] of Byte; _blockLength: Integer; // compressed block _length: Integer; _distanceCode: Integer; _extraBits: Integer; _loopCounter: Integer; _literalLengthCodeCount: Integer; _distanceCodeCount: Integer; _codeLengthCodeCount: Integer; _codeArraySize: Integer; _lengthCode: Integer; _codeList: TBytes; // temporary array to store the code length for literal/Length and distance _codeLengthTreeCodeLength: TBytes; _deflate64: Boolean; _codeLengthTree: IHuffmanTree; private procedure Reset; function Decode: Boolean; function DecodeUncompressedBlock(out endOfBlock: Boolean): Boolean; function DecodeBlock(out endOfBlockCodeSeen: Boolean): Boolean; function DecodeDynamicBlockHeader: Boolean; public constructor Create(deflate64: Boolean); destructor Destroy; override; procedure SetInput(inputBytes: PByte; offset, length: Integer); function Finished: Boolean; function AvailableOutput: Integer; function Inflate(bytes: PByte; offset, length: Integer): Integer; end; implementation const // Extra bits for length code 257 - 285. S_EXTRA_LENGTH_BITS: array[0..28] of Byte = ( 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16 ); // The base length for length code 257 - 285. // The formula to get the real length for a length code is lengthBase[code - 257] + (value stored in extraBits) S_LENGTH_BASE: array[0..28] of Integer = ( 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3 ); // The base distance for distance code 0 - 31 // The real distance for a distance code is distanceBasePosition[code] + (value stored in extraBits) S_DISTANCE_BASE_POSITION: array[0..31] of Integer = ( 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153 ); // code lengths for code length alphabet is stored in following order S_CODE_ORDER: array[0..18] of Byte = (16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); S_STATIC_DISTANCE_TREE_TABLE: array[0..31] of Byte = ( $00, $10, $08, $18, $04, $14, $0c, $1c, $02, $12, $0a, $1a, $06, $16, $0e, $1e, $01, $11, $09, $19, $05, $15, $0d, $1d, $03, $13, $0b, $1b, $07, $17, $0f, $1f ); { TInflaterManaged } procedure TInflaterManaged.Reset; begin _state := TInflaterState.ReadingBFinal; // start by reading BFinal bit end; function TInflaterManaged.Decode: Boolean; var eob: Boolean = false; begin result := false; if (Finished()) then begin Exit(true); end; if (_state = TInflaterState.ReadingBFinal) then begin // reading bfinal bit // Need 1 bit if (not _input.EnsureBitsAvailable(1)) then begin Exit(false); end; _bfinal := _input.GetBits(1); _state := TInflaterState.ReadingBType; end; if (_state = TInflaterState.ReadingBType) then begin // Need 2 bits if (not _input.EnsureBitsAvailable(2)) then begin _state := TInflaterState.ReadingBType; Exit(false); end; _blockType := TBlockType(_input.GetBits(2)); if (_blockType = TBlockType.Dynamic) then begin _state := TInflaterState.ReadingNumLitCodes; end else if (_blockType = TBlockType.Static) then begin _literalLengthTree := THuffmanTree.StaticLiteralLengthTree; _distanceTree := THuffmanTree.StaticDistanceTree; _state := TInflaterState.DecodeTop; end else if (_blockType = TBlockType.Uncompressed) then begin _state := TInflaterState.UncompressedAligning; end else begin raise Exception.Create('Deflate64: unknown block type'); end; end; if (_blockType = TBlockType.Dynamic) then begin if (_state < TInflaterState.DecodeTop) then begin // we are reading the header result := DecodeDynamicBlockHeader(); end else begin result := DecodeBlock(eob); // this can returns true when output is full end; end else if (_blockType = TBlockType.Static) then begin result := DecodeBlock(eob); end else if (_blockType = TBlockType.Uncompressed) then begin result := DecodeUncompressedBlock(eob); end else begin raise Exception.Create('Deflate64: unknown block type'); end; // // If we reached the end of the block and the block we were decoding had // bfinal=1 (final block) // if (eob and (_bfinal <> 0)) then begin _state := TInflaterState.Done; end; end; function TInflaterManaged.DecodeUncompressedBlock(out endOfBlock: Boolean ): Boolean; var bits, bytesCopied: Integer; blockLengthComplement: Integer; begin endOfBlock := false; while (true) do begin case (_state) of TInflaterState.UncompressedAligning: // initial state when calling this function begin // we must skip to a byte boundary _input.SkipToByteBoundary(); _state := TInflaterState.UncompressedByte1; Continue; end; TInflaterState.UncompressedByte1, // decoding block length TInflaterState.UncompressedByte2, TInflaterState.UncompressedByte3, TInflaterState.UncompressedByte4: begin bits := _input.GetBits(8); if (bits < 0) then begin Exit(false); end; _blockLengthBuffer[Integer(_state) - Integer(TInflaterState.UncompressedByte1)] := byte(bits); if (_state = TInflaterState.UncompressedByte4) then begin _blockLength := _blockLengthBuffer[0] + (_blockLengthBuffer[1] * 256); blockLengthComplement := _blockLengthBuffer[2] + (_blockLengthBuffer[3] * 256); // make sure complement matches if (UInt16(_blockLength) <> UInt16((not blockLengthComplement))) then begin raise Exception.Create('Deflate64: invalid block length'); end; end; Inc(_state); end; TInflaterState.DecodingUncompressed: // copying block data begin // Directly copy bytes from input to output. bytesCopied := _output.CopyFrom(_input, _blockLength); _blockLength -= bytesCopied; if (_blockLength = 0) then begin // Done with this block, need to re-init bit buffer for next block _state := TInflaterState.ReadingBFinal; endOfBlock := true; Exit(true); end; // We can fail to copy all bytes for two reasons: // Running out of Input // running out of free space in output window if (_output.FreeBytes = 0) then begin Exit(true); end; Exit(false); end; else begin //*Fail*/ Assert(false, 'check why we are here!'); raise Exception.Create('Deflate64: unknown state'); end; end; end; end; function TInflaterManaged.DecodeBlock(out endOfBlockCodeSeen: Boolean): Boolean; var freeBytes, symbol, bits, offset: Integer; begin endOfBlockCodeSeen := false; freeBytes := _output.FreeBytes; // it is a little bit faster than frequently accessing the property while (freeBytes > 65536) do begin // With Deflate64 we can have up to a 64kb length, so we ensure at least that much space is available // in the OutputWindow to avoid overwriting previous unflushed output data. case (_state) of TInflaterState.DecodeTop: begin // decode an element from the literal tree // TODO: optimize this!!! symbol := _literalLengthTree.GetNextSymbol(_input); if (symbol < 0) then begin // running out of input Exit(false); end; if (symbol < 256) then begin // literal _output.Write(Byte(symbol)); Dec(freeBytes); end else if (symbol = 256) then begin // end of block endOfBlockCodeSeen := true; // Reset state _state := TInflaterState.ReadingBFinal; Exit(true); end else begin // length/distance pair symbol -= 257; // length code started at 257 if (symbol < 8) then begin symbol += 3; // match length = 3,4,5,6,7,8,9,10 _extraBits := 0; end else if ((not _deflate64) and (symbol = 28)) then begin // extra bits for code 285 is 0 symbol := 258; // code 285 means length 258 _extraBits := 0; end else begin if (symbol < 0) or (symbol >= Length(S_EXTRA_LENGTH_BITS)) then begin raise Exception.Create('Deflate64: invalid data'); end; _extraBits := S_EXTRA_LENGTH_BITS[symbol]; Assert(_extraBits <> 0, 'We handle other cases separately!'); end; _length := symbol; _state := TInflaterState.HaveInitialLength; Continue; end; end; TInflaterState.HaveInitialLength: begin if (_extraBits > 0) then begin _state := TInflaterState.HaveInitialLength; bits := _input.GetBits(_extraBits); if (bits < 0) then begin Exit(false); end; if (_length < 0) or (_length >= Length(S_LENGTH_BASE)) then begin raise Exception.Create('Deflate64: invalid data'); end; _length := S_LENGTH_BASE[_length] + bits; end; _state := TInflaterState.HaveFullLength; Continue; end; TInflaterState.HaveFullLength: begin if (_blockType = TBlockType.Dynamic) then begin _distanceCode := _distanceTree.GetNextSymbol(_input); end else begin // get distance code directly for static block _distanceCode := _input.GetBits(5); if (_distanceCode >= 0) then begin _distanceCode := S_STATIC_DISTANCE_TREE_TABLE[_distanceCode]; end; end; if (_distanceCode < 0) then begin // running out input Exit(false); end; _state := TInflaterState.HaveDistCode; Continue; end; TInflaterState.HaveDistCode: begin // To avoid a table lookup we note that for distanceCode > 3, // extra_bits = (distanceCode-2) >> 1 if (_distanceCode > 3) then begin _extraBits := (_distanceCode - 2) >> 1; bits := _input.GetBits(_extraBits); if (bits < 0) then begin Exit(false); end; offset := S_DISTANCE_BASE_POSITION[_distanceCode] + bits; end else begin offset := _distanceCode + 1; end; _output.WriteLengthDistance(_length, offset); freeBytes -= _length; _state := TInflaterState.DecodeTop; end; else begin //*Fail*/ Assert(false, 'check why we are here!'); raise Exception.Create('Deflate64: unknown state'); end; end; end; Result := true; end; function TInflaterManaged.DecodeDynamicBlockHeader: Boolean; var i, j, bits, repeatCount, previousCode: Integer; literalTreeCodeLength, distanceTreeCodeLength: TBytes; begin while (True) do begin case (_state) of TInflaterState.ReadingNumLitCodes: begin _literalLengthCodeCount := _input.GetBits(5); if (_literalLengthCodeCount < 0) then begin Exit(false); end; _literalLengthCodeCount += 257; _state := TInflaterState.ReadingNumDistCodes; Continue; end; TInflaterState.ReadingNumDistCodes: begin _distanceCodeCount := _input.GetBits(5); if (_distanceCodeCount < 0) then begin Exit(false); end; _distanceCodeCount += 1; _state := TInflaterState.ReadingNumCodeLengthCodes; Continue; end; TInflaterState.ReadingNumCodeLengthCodes: begin _codeLengthCodeCount := _input.GetBits(4); if (_codeLengthCodeCount < 0) then begin Exit(false); end; _codeLengthCodeCount += 4; _loopCounter := 0; _state := TInflaterState.ReadingCodeLengthCodes; Continue; end; TInflaterState.ReadingCodeLengthCodes: begin while (_loopCounter < _codeLengthCodeCount) do begin bits := _input.GetBits(3); if (bits < 0) then begin Exit(false); end; _codeLengthTreeCodeLength[S_CODE_ORDER[_loopCounter]] := Byte(bits); Inc(_loopCounter); end; for i := _codeLengthCodeCount to High(S_CODE_ORDER) do begin _codeLengthTreeCodeLength[S_CODE_ORDER[i]] := 0; end; // create huffman tree for code length _codeLengthTree := THuffmanTree.Create(_codeLengthTreeCodeLength); _codeArraySize := _literalLengthCodeCount + _distanceCodeCount; _loopCounter := 0; // reset loop count _state := TInflaterState.ReadingTreeCodesBefore; Continue; end; TInflaterState.ReadingTreeCodesBefore, TInflaterState.ReadingTreeCodesAfter: begin while (_loopCounter < _codeArraySize) do begin if (_state = TInflaterState.ReadingTreeCodesBefore) then begin _lengthCode := _codeLengthTree.GetNextSymbol(_input); if (_lengthCode < 0) then begin Exit(false); end; end; // The alphabet for code lengths is as follows: // 0 - 15: Represent code lengths of 0 - 15 // 16: Copy the previous code length 3 - 6 times. // The next 2 bits indicate repeat length // (0 = 3, ... , 3 = 6) // Example: Codes 8, 16 (+2 bits 11), // 16 (+2 bits 10) will expand to // 12 code lengths of 8 (1 + 6 + 5) // 17: Repeat a code length of 0 for 3 - 10 times. // (3 bits of length) // 18: Repeat a code length of 0 for 11 - 138 times // (7 bits of length) if (_lengthCode <= 15) then begin _codeList[_loopCounter] := Byte(_lengthCode); Inc(_loopCounter); end else begin if (_lengthCode = 16) then begin if (not _input.EnsureBitsAvailable(2)) then begin _state := TInflaterState.ReadingTreeCodesAfter; Exit(false); end; if (_loopCounter = 0) then begin // can't have "prev code" on first code raise Exception(EmptyStr); end; previousCode := _codeList[_loopCounter - 1]; repeatCount := _input.GetBits(2) + 3; if (_loopCounter + repeatCount > _codeArraySize) then begin raise Exception(EmptyStr); end; for j := 0 to Pred(repeatCount) do begin _codeList[_loopCounter] := previousCode; Inc(_loopCounter); end; end else if (_lengthCode = 17) then begin if (not _input.EnsureBitsAvailable(3)) then begin _state := TInflaterState.ReadingTreeCodesAfter; Exit(false); end; repeatCount := _input.GetBits(3) + 3; if (_loopCounter + repeatCount > _codeArraySize) then begin raise Exception(EmptyStr); end; for j := 0 to Pred(repeatCount) do begin _codeList[_loopCounter] := 0; Inc(_loopCounter); end; end else begin // code == 18 if (not _input.EnsureBitsAvailable(7)) then begin _state := TInflaterState.ReadingTreeCodesAfter; Exit(false); end; repeatCount := _input.GetBits(7) + 11; if (_loopCounter + repeatCount > _codeArraySize) then begin raise Exception(EmptyStr); end; for j := 0 to Pred(repeatCount) do begin _codeList[_loopCounter] := 0; Inc(_loopCounter); end; end; end; _state := TInflaterState.ReadingTreeCodesBefore; // we want to read the next code. end; end; else //*Fail*/ Assert(false, 'check why we are here!'); raise Exception.Create('Deflate64: unknown state'); end; Break; end; SetLength(literalTreeCodeLength, THuffmanTree.MAX_LITERAL_TREE_ELEMENTS); SetLength(distanceTreeCodeLength, THuffmanTree.MAX_DIST_TREE_ELEMENTS); // Create literal and distance tables Move(_codeList[0], literalTreeCodeLength[0], _literalLengthCodeCount); Move(_codeList[_literalLengthCodeCount], distanceTreeCodeLength[0], _distanceCodeCount); // Make sure there is an end-of-block code, otherwise how could we ever end? if (literalTreeCodeLength[THuffmanTree.END_OF_BLOCK_CODE] = 0) then begin raise Exception(EmptyStr); end; _literalLengthTree := THuffmanTree.Create(literalTreeCodeLength); _distanceTree := THuffmanTree.Create(distanceTreeCodeLength); _state := TInflaterState.DecodeTop; Result := true; end; constructor TInflaterManaged.Create(deflate64: Boolean); begin _output := TOutputWindow.Create; _input := TInputBuffer.Create; SetLength(_codeList, THuffmanTree.MAX_LITERAL_TREE_ELEMENTS + THuffmanTree.MAX_DIST_TREE_ELEMENTS); SetLength(_codeLengthTreeCodeLength, THuffmanTree.NUMBER_OF_CODE_LENGTH_TREE_ELEMENTS); _deflate64 := deflate64; Reset(); end; destructor TInflaterManaged.Destroy; begin inherited Destroy; _output.Free; _input.Free; end; procedure TInflaterManaged.SetInput(inputBytes: PByte; offset, length: Integer); begin _input.SetInput(inputBytes, offset, length); // append the bytes end; function TInflaterManaged.Finished: Boolean; begin Result := (_state = TInflaterState.Done) or (_state = TInflaterState.VerifyingFooter); end; function TInflaterManaged.AvailableOutput: Integer; begin Result := _output.AvailableBytes; end; function TInflaterManaged.Inflate(bytes: PByte; offset, length: Integer): Integer; var copied: Integer; count: Integer = 0; begin // copy bytes from output to outputbytes if we have available bytes // if buffer is not filled up. keep decoding until no input are available // if decodeBlock returns false. Throw an exception. repeat copied := _output.CopyTo(bytes, offset, length); if (copied > 0) then begin offset += copied; count += copied; length -= copied; end; if (length = 0) then begin // filled in the bytes array break; end; // Decode will return false when more input is needed until not ((not Finished() and Decode())); Result := count; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/inflate64stream.pas0000644000175000001440000000433415104114162023755 0ustar alexxusers// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE.txt file in the directory for more information. // The Pascal translation by Alexander Koblov. unit Inflate64Stream; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, InflaterManaged; type { TInflate64Stream } TInflate64Stream = class(TOwnerStream) private _buffer: array[Word] of Byte; _inflater: TInflaterManaged; public constructor Create(ASource: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; end; implementation { TInflate64Stream } constructor TInflate64Stream.Create(ASource: TStream); begin inherited Create(ASource); _inflater:= TInflaterManaged.Create(True); end; destructor TInflate64Stream.Destroy; begin inherited Destroy; _inflater.Free; end; function TInflate64Stream.Read(var Buffer; Count: Longint): Longint; var bytesRead, bytes: Integer; currentOffset, remainingCount: Integer; begin currentOffset := 0; remainingCount := Count; while (true) do begin bytesRead := _inflater.Inflate(@Buffer, currentOffset, remainingCount); currentOffset += bytesRead; remainingCount -= bytesRead; if (remainingCount = 0) then begin break; end; if (_inflater.Finished()) then begin // if we finished decompressing, we can't have anything left in the outputwindow. Assert( _inflater.AvailableOutput = 0, 'We should have copied all stuff out!' ); break; end; bytes := FSource.Read(_buffer, Length(_buffer)); if (bytes <= 0) then begin break; end else if (bytes > Length(_buffer)) then begin // The stream is either malicious or poorly implemented and returned a number of // bytes larger than the buffer supplied to it. raise Exception.Create('Deflate64: invalid data'); end; _inflater.SetInput(_buffer, 0, bytes); end; Result := count - remainingCount; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/huffmantree.pas0000644000175000001440000002740515104114162023255 0ustar alexxusers// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE.txt file in the directory for more information. // The Pascal translation by Alexander Koblov. unit HuffmanTree; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Types, InputBuffer; type { IHuffmanTree } IHuffmanTree = interface(IUnknown) ['{83791289-1747-4815-AC47-B57A0A0C39C6}'] function GetNextSymbol(input: TInputBuffer): Integer; end; { THuffmanTree } THuffmanTree = class(TInterfacedObject, IHuffmanTree) public const MAX_LITERAL_TREE_ELEMENTS = Integer(288); const MAX_DIST_TREE_ELEMENTS = Integer(32); const END_OF_BLOCK_CODE = Integer(256); const NUMBER_OF_CODE_LENGTH_TREE_ELEMENTS = Integer(19); private _tableBits: Integer; _table: TSmallIntDynArray; _left: TSmallIntDynArray; _right: TSmallIntDynArray; _codeLengthArray: TBytes; _tableMask: Integer; private _StaticLiteralLengthTree: THuffmanTree; static; _StaticDistanceTree: THuffmanTree; static; private class procedure CreateStaticTrees; class procedure FreeStaticTrees; // Generate the array contains huffman codes lengths for static huffman tree class function GetStaticLiteralTreeLength: TBytes; class function GetStaticDistanceTreeLength: TBytes; // Calculate the huffman code for each character based on the code length for each character. function CalculateHuffmanCode: TCardinalDynArray; procedure CreateTable; public class property StaticLiteralLengthTree: THuffmanTree read _StaticLiteralLengthTree; class property StaticDistanceTree: THuffmanTree read _StaticDistanceTree; public constructor Create(constref codeLengths: TBytes); // This function will try to get enough bits from input and try to decode the bits function GetNextSymbol(input: TInputBuffer): Integer; end; implementation // Reverse 'length' of the bits in code function BitReverse(code: Cardinal; length: Integer): Cardinal; begin Result := 0; Assert((length > 0) and (length <= 16), 'Invalid len'); repeat Result := Result or (code and 1); Result := Result << 1; code := code >> 1; Dec(length); until (length = 0); Result := Result >> 1; end; { THuffmanTree } class procedure THuffmanTree.CreateStaticTrees; begin _StaticLiteralLengthTree:= THuffmanTree.Create(GetStaticLiteralTreeLength()); _StaticDistanceTree:= THuffmanTree.Create(GetStaticDistanceTreeLength()); _StaticLiteralLengthTree._AddRef; _StaticDistanceTree._AddRef; end; class procedure THuffmanTree.FreeStaticTrees; begin _StaticLiteralLengthTree._Release; _StaticDistanceTree._Release; end; class function THuffmanTree.GetStaticLiteralTreeLength: TBytes; var i: Integer; literalTreeLength: TBytes; begin SetLength(literalTreeLength, MAX_LITERAL_TREE_ELEMENTS); for i := 0 to 143 do begin literalTreeLength[i] := 8; end; for i := 144 to 255 do begin literalTreeLength[i] := 9; end; for i := 256 to 279 do begin literalTreeLength[i] := 7; end; for i := 280 to 287 do begin literalTreeLength[i] := 8; end; Result := literalTreeLength; end; class function THuffmanTree.GetStaticDistanceTreeLength: TBytes; var i: Integer; staticDistanceTreeLength: TBytes; begin SetLength(staticDistanceTreeLength, MAX_DIST_TREE_ELEMENTS); for i := 0 to Pred(MAX_DIST_TREE_ELEMENTS) do begin staticDistanceTreeLength[i] := 5; end; Result := staticDistanceTreeLength; end; function THuffmanTree.CalculateHuffmanCode: TCardinalDynArray; var i, bits: Integer; tempCode: Cardinal = 0; code: TCardinalDynArray; len, codeLength: Integer; bitLengthCount: TCardinalDynArray; nextCode: array[0..16] of Cardinal; begin SetLength(bitLengthCount, 17); SetLength(code, MAX_LITERAL_TREE_ELEMENTS); for i := 0 to High(_codeLengthArray) do begin codeLength := _codeLengthArray[i]; Inc(bitLengthCount[codeLength]); end; bitLengthCount[0] := 0; // clear count for length 0 for bits := 1 to 16 do begin tempCode := (tempCode + bitLengthCount[bits - 1]) << 1; nextCode[bits] := tempCode; end; for i := 0 to High(_codeLengthArray) do begin len := _codeLengthArray[i]; if (len > 0) then begin code[i] := BitReverse(nextCode[len], len); Inc(nextCode[len]); end; end; Result:= code; end; procedure THuffmanTree.CreateTable; var avail, value: Int16; increment, locs: Integer; array_: TSmallIntDynArray; codeArray: TCardinalDynArray; j, ch, len, start, index: Integer; overflowBits, codeBitMask: Integer; begin codeArray := CalculateHuffmanCode(); avail := Int16(Length(_codeLengthArray)); for ch := 0 to High(_codeLengthArray) do begin // length of this code len := _codeLengthArray[ch]; if (len > 0) then begin // start value (bit reversed) start := Integer(codeArray[ch]); if (len <= _tableBits) then begin // If a particular symbol is shorter than nine bits, // then that symbol's translation is duplicated // in all those entries that start with that symbol's bits. // For example, if the symbol is four bits, then it's duplicated // 32 times in a nine-bit table. If a symbol is nine bits long, // it appears in the table once. // // Make sure that in the loop below, code is always // less than table_size. // // On last iteration we store at array index: // initial_start_at + (locs-1)*increment // = initial_start_at + locs*increment - increment // = initial_start_at + (1 << tableBits) - increment // = initial_start_at + table_size - increment // // Therefore we must ensure: // initial_start_at + table_size - increment < table_size // or: initial_start_at < increment // increment := 1 << len; if (start >= increment) then begin raise Exception.Create('Deflate64: invalid Huffman data'); end; // Note the bits in the table are reverted. locs := 1 << (_tableBits - len); for j := 0 to Pred(locs) do begin _table[start] := Int16(ch); start += increment; end; end else begin // For any code which has length longer than num_elements, // build a binary tree. overflowBits := len - _tableBits; // the nodes we need to respent the data. codeBitMask := 1 << _tableBits; // mask to get current bit (the bits can't fit in the table) // the left, right table is used to repesent the // the rest bits. When we got the first part (number bits.) and look at // tbe table, we will need to follow the tree to find the real character. // This is in place to avoid bloating the table if there are // a few ones with long code. index := start and ((1 << _tableBits) - 1); array_ := _table; repeat value := array_[index]; if (value = 0) then begin // set up next pointer if this node is not used before. array_[index] := Int16(-avail); // use next available slot. value := Int16(-avail); Inc(avail); end; if (value > 0) then begin // prevent an IndexOutOfRangeException from array[index] raise Exception.Create('Deflate64: invalid Huffman data'); end; Assert( value < 0, 'CreateTable: Only negative numbers are used for tree pointers!' ); if ((start and codeBitMask) = 0) then begin // if current bit is 0, go change the left array array_ := _left; end else begin // if current bit is 1, set value in the right array array_ := _right; end; index := -value; // go to next node codeBitMask := codeBitMask << 1; Dec(overflowBits); until (overflowBits = 0); array_[index] := Int16(ch); end; end; end; end; constructor THuffmanTree.Create(constref codeLengths: TBytes); begin Assert( (Length(codeLengths) = MAX_LITERAL_TREE_ELEMENTS) or (Length(codeLengths) = MAX_DIST_TREE_ELEMENTS) or (Length(codeLengths) = NUMBER_OF_CODE_LENGTH_TREE_ELEMENTS), 'we only expect three kinds of Length here' ); _codeLengthArray := codeLengths; if (Length(_codeLengthArray) = MAX_LITERAL_TREE_ELEMENTS) then begin // bits for Literal/Length tree table _tableBits := 9; end else begin // bits for distance tree table and code length tree table _tableBits := 7; end; _tableMask := (1 << _tableBits) - 1; SetLength(_table, 1 << _tableBits); // I need to find proof that left and right array will always be // enough. I think they are. SetLength(_left, 2 * Length(_codeLengthArray)); SetLength(_right, 2 * Length(_codeLengthArray)); CreateTable(); end; function THuffmanTree.GetNextSymbol(input: TInputBuffer): Integer; var bitBuffer, mask: Cardinal; symbol, codeLength: Integer; begin // Try to load 16 bits into input buffer if possible and get the bitBuffer value. // If there aren't 16 bits available we will return all we have in the // input buffer. bitBuffer := input.TryLoad16Bits(); if (input.AvailableBits = 0) then begin // running out of input. Exit(-1); end; // decode an element symbol := _table[bitBuffer and _tableMask]; if (symbol < 0) then begin // this will be the start of the binary tree // navigate the tree mask := Cardinal(1) << _tableBits; repeat symbol := -symbol; if ((bitBuffer and mask) = 0) then begin symbol := _left[symbol]; end else begin symbol := _right[symbol]; end; mask := mask << 1; until (symbol >= 0); end; codeLength := _codeLengthArray[symbol]; // huffman code lengths must be at least 1 bit long if (codeLength <= 0) then begin raise Exception.Create('Deflate64: invalid Huffman data'); end; // // If this code is longer than the # bits we had in the bit buffer (i.e. // we read only part of the code), we can hit the entry in the table or the tree // for another symbol. However the length of another symbol will not match the // available bits count. if (codeLength > input.AvailableBits) then begin // We already tried to load 16 bits and maximum length is 15, // so this means we are running out of input. Exit(-1); end; input.SkipBits(codeLength); Result := symbol; end; initialization THuffmanTree.CreateStaticTrees; finalization THuffmanTree.FreeStaticTrees; end. doublecmd-1.1.30/plugins/wcx/zip/src/inflate64/LICENSE.txt0000644000175000001440000000213415104114162022057 0ustar alexxusersThe MIT License (MIT) Copyright (c) .NET Foundation and Contributors All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. doublecmd-1.1.30/plugins/wcx/zip/src/fpc-extra.cfg0000644000175000001440000000015715104114162021015 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/0000755000175000001440000000000015104114162020407 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/zip/src/fparchive/readme.txt0000644000175000001440000000220115104114162022400 0ustar alexxusersZip plugin compression library It is a Free Pascal compression toolkit which supports ZIP, ZIPX, TAR, XZ, LZMA, GZip, Zstandard and BZip2 data compression and archiving. Based on TurboPower Abbrevia compression toolkit Version: 5.0 Revision: 512 Home Page: http://tpabbrevia.sourceforge.net NOTES: Functions AbDetectCharSet and IsOEM from AbCharset unit fails with some code pages and characters (eg. 936 and 图片) ! Don't use it when merging with Abbrevia. Better to try to convert with MultiByteToWideChar (see DCConvertEncoding CeTryEncode and CeTryDecode). Abbrevia sets current directory before reading files from disk in case paths are relative and uses ExpandFileName (which relies on current directory) to change relative paths to absolute. Since Double Commander uses the toolkit from a non-main thread it cannot rely on current directory not changing while working. Instead, always full paths in archive items are used, both archive file name and disk file name, paths are rebased against TAbArchive.BaseDirectory (which doesn't change during working) and all calls to functions changing current directory have been removed. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/license.txt0000644000175000001440000006223315104114162022600 0ustar alexxusers MOZILLA PUBLIC LICENSE Version 1.1 --------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. EXHIBIT A -Mozilla Public License. ``The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzstdtyp.pas0000644000175000001440000003611215104114162023143 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Koblov * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZstdTyp.pas *} {*********************************************************} {* ABBREVIA: TAbZstdArchive, TAbZstdItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with zst files *} {*********************************************************} unit AbZstdTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; const { The first for (4) bytes of the Stream are so called Header } { Magic Bytes. They can be used to identify the file type. } AB_ZSTD_FILE_HEADER = #$28#$B5#$2F#$FD; type PAbZstdHeader = ^TAbZstdHeader; { File Header } TAbZstdHeader = packed record { SizeOf(TAbZstdHeader) = 10 } MagicNumber : array[0..3] of AnsiChar;{ 28 B5 2F FD } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbZstdItem = class(TabArchiveItem); TAbZstdArchiveState = (gsZstd, gsTar); TAbZstdArchive = class(TAbTarArchive) private FZstdStream : TStream; { stream for Zstd file} FZstdItem : TAbArchiveList; { item in zstd (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbZstdArchiveState; FIsZstdTar : Boolean; procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToZstd; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsZstdTar : Boolean read FIsZstdTar write FIsZstdTar; end; function VerifyZstd(Strm : TStream) : TAbArchiveType; implementation uses SysUtils, BufStream, AbZstd, AbExcept, AbVMStrm, AbBitBkt, AbProgress, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbZstdHeader) : Boolean; begin Result := CompareByte(Header.MagicNumber, AB_ZSTD_FILE_HEADER, SizeOf(Header.MagicNumber)) = 0; end; { -------------------------------------------------------------------------- } function VerifyZstd(Strm : TStream) : TAbArchiveType; var Hdr : TAbZstdHeader; CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atZstd; { Check for embedded TAR } Strm.Seek(0, soBeginning); DecompStream := TZSTDDecompressionStream.Create(Strm); try TarStream := TMemoryStream.Create; try DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soBeginning); if VerifyTar(TarStream) = atTar then Result := atZstdTar; finally TarStream.Free; end; finally DecompStream.Free; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbZstdArchive ***************************** } constructor TAbZstdArchive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsZstd; FZstdStream := FStream; FZstdItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.SwapToZstd; begin FStream := FZstdStream; FItemList := FZstdItem; FState := gsZstd; end; { -------------------------------------------------------------------------- } function TAbZstdArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var ZstdItem : TAbZstdItem; FullSourceFileName, FullArchiveFileName: String; begin if IsZstdTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToZstd; ZstdItem := TAbZstdItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); ZstdItem.FileName := FullArchiveFileName; ZstdItem.DiskFileName := FullSourceFileName; Result := ZstdItem; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbZstdArchive.Destroy; begin SwapToZstd; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsZstdTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToZstd; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Bz2 doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsZstdTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToZstd; { Index ignored as there's only one item in a Bz2 } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbZstdArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsZstdTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.LoadArchive; var ItemName: string; Item: TAbZstdItem; Abort: Boolean = False; begin if FZstdStream.Size = 0 then Exit; if IsZstdTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToZstd; Item := TAbZstdItem.Create; Item.Action := aaNone; Item.UncompressedSize := ZSTD_FileSize(FZstdStream); { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.SaveArchive; var I: Integer; CompStream: TStream; CurItem: TAbZstdItem; TempFileName: String; UpdateArchive: Boolean; InputFileStream: TStream; begin if IsZstdTar and TarAutoHandle then begin SwapToTar; UpdateArchive := (FZstdStream.Size > 0) and (FZstdStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FZstdStream); TempFileName := GetTempName(FArchiveName); { Create new archive with temporary name } FZstdStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompStream := TZSTDCompressionStream.Create(FZstdStream, CompressionLevel); try FTargetStream := TWriteBufStream.Create(CompStream, $40000); try inherited SaveArchive; finally FreeAndNil(FTargetStream); end; finally CompStream.Free; end; if UpdateArchive then begin FreeAndNil(FZstdStream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FZstdStream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToZstd; for I := 0 to pred(Count) do begin FCurrentItem := ItemList[I]; CurItem := TAbZstdItem(ItemList[I]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; bz2 doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FZstdStream.Size := 0; if CurItem.Action = aaStreamAdd then CurItem.UncompressedSize := InStream.Size else begin CurItem.UncompressedSize := mbFileSize(CurItem.DiskFileName); end; CompStream := TZSTDCompressionStream.Create(FZstdStream, CompressionLevel, CurItem.UncompressedSize); try if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FZstdStream } else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try with TAbProgressWriteStream.Create(CompStream, InputFileStream.Size, OnProgress) do try CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FZstdStream } finally Free; end; finally InputFileStream.Free; end; end; finally CompStream.Free; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToZstd; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.DecompressToStream(aStream: TStream); const BufSize = $40000; var DecompStream: TZSTDDecompressionStream; ProxyStream: TAbProgressReadStream; Buffer: PByte; N: Integer; begin ProxyStream:= TAbProgressReadStream.Create(FZstdStream, OnProgress); try DecompStream := TZSTDDecompressionStream.Create(ProxyStream); try GetMem(Buffer, BufSize); try N := DecompStream.Read(Buffer^, BufSize); while N > 0 do begin aStream.WriteBuffer(Buffer^, N); N := DecompStream.Read(Buffer^, BufSize); end; finally FreeMem(Buffer, BufSize); end; finally DecompStream.Free; end; finally ProxyStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.TestItemAt(Index: Integer); var ZstdType: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsZstdTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { note Index ignored as there's only one item in a GZip } ZstdType := VerifyZstd(FZstdStream); if not (ZstdType in [atZstd, atZstdTar]) then raise EAbGzipInvalid.Create; // TODO: Add zstd-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbZstdArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzstd.pas0000644000175000001440000002547415104114162022417 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Simple interface to zstd library * * Copyright (C) 2019-2023 Alexander Koblov (alexx2000@mail.ru) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ***** END LICENSE BLOCK ***** *) {**********************************************************************} {* ABBREVIA: AbZstd.pas *} {**********************************************************************} {* ABBREVIA: TZstdCompressionStream, TZstdDecompressionStream classes *} {**********************************************************************} unit AbZstd; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes; const ZSTD_FRAMEHEADERSIZE_MAX = 18; ZSTD_CONTENTSIZE_UNKNOWN = UInt64(-1); ZSTD_CONTENTSIZE_ERROR = UInt64(-2); type PZSTD_CCtx = ^TZSTD_CCtx; TZSTD_CCtx = record end; PZSTD_DCtx = ^ZSTD_DCtx; ZSTD_DCtx = record end; PZSTD_inBuffer = ^ZSTD_inBuffer; ZSTD_inBuffer = record src: pcuint8; size: csize_t; pos: csize_t; end; PZSTD_outBuffer = ^ZSTD_outBuffer; ZSTD_outBuffer = record dst: pcuint8; size: csize_t; pos: csize_t; end; EZstdError = class(Exception); { TZstdCompressionStream } TZstdCompressionStream = class(TStream) private FStream: TStream; FContext: PZSTD_CCtx; FBufferOut: ZSTD_outBuffer; public constructor Create(OutStream: TStream; ALevel: Integer; InSize: UInt64 = ZSTD_CONTENTSIZE_UNKNOWN); destructor Destroy; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; { TZstdDecompressionStream } TZstdDecompressionStream = class(TStream) private FStream: TStream; FContext: PZSTD_DCtx; FBufferIn: ZSTD_inBuffer; FBufferInSize: UIntPtr; FBufferOut: ZSTD_outBuffer; FBufferOutPos: UIntPtr; public constructor Create(InStream: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; function ZSTD_FileSize(const InStream: TStream): UInt64; implementation uses DynLibs; const libzstd = {$IF DEFINED(MSWINDOWS)} 'libzstd.dll' {$ELSEIF DEFINED(DARWIN)} 'libzstd.dylib' {$ELSEIF DEFINED(UNIX)} 'libzstd.so.1' {$IFEND}; type ZSTD_cParameter = ( ZSTD_c_compressionLevel = 100, ZSTD_c_checksumFlag = 201 ); ZSTD_EndDirective = ( ZSTD_e_continue = 0, ZSTD_e_flush = 1, ZSTD_e_end = 2 ); var ZSTD_CStreamInSize: function(): csize_t; cdecl; ZSTD_CStreamOutSize: function(): csize_t; cdecl; ZSTD_createCCtx: function(): PZSTD_CCtx; cdecl; ZSTD_freeCCtx: function(cctx: PZSTD_CCtx): csize_t; cdecl; ZSTD_CCtx_setParameter: function(cctx: PZSTD_CCtx; param: ZSTD_cParameter; value: cint): csize_t; cdecl; ZSTD_compressStream2: function(cctx: PZSTD_CCtx; output: PZSTD_outBuffer; input: PZSTD_inBuffer; endOp: ZSTD_EndDirective): csize_t; cdecl; ZSTD_DStreamInSize: function(): csize_t; cdecl; ZSTD_DStreamOutSize: function(): csize_t; cdecl; ZSTD_createDCtx: function(): PZSTD_DCtx; cdecl; ZSTD_freeDCtx: function(dctx: PZSTD_DCtx): csize_t; cdecl; ZSTD_DCtx_setMaxWindowSize: function(dctx: PZSTD_DCtx; maxWindowSize: csize_t): csize_t; cdecl; ZSTD_decompressStream: function(zds: PZSTD_DCtx; output: PZSTD_outBuffer; input: PZSTD_inBuffer): csize_t; cdecl; ZSTD_isError: function(code: csize_t): cuint; cdecl; ZSTD_getErrorName: function(code: csize_t): PAnsiChar; cdecl; ZSTD_getFrameContentSize: function(src: pcuint8; srcSize: csize_t): cuint64; cdecl; ZSTD_CCtx_setPledgedSrcSize: function(cctx: PZSTD_CCtx; pledgedSrcSize: cuint64): csize_t; cdecl; var hZstd: TLibHandle = NilHandle; procedure Initialize; begin if hZstd <> NilHandle then Exit; hZstd:= LoadLibrary(libzstd); if hZstd = NilHandle then raise EZstdError.Create('Zstd shared library not found'); @ZSTD_CStreamInSize:= GetProcAddress(hZstd, 'ZSTD_CStreamInSize'); @ZSTD_CStreamOutSize:= GetProcAddress(hZstd, 'ZSTD_CStreamOutSize'); @ZSTD_createCCtx:= GetProcAddress(hZstd, 'ZSTD_createCCtx'); @ZSTD_freeCCtx:= GetProcAddress(hZstd, 'ZSTD_freeCCtx'); @ZSTD_CCtx_setParameter:= GetProcAddress(hZstd, 'ZSTD_CCtx_setParameter'); @ZSTD_compressStream2:= GetProcAddress(hZstd, 'ZSTD_compressStream2'); @ZSTD_DStreamInSize:= GetProcAddress(hZstd, 'ZSTD_DStreamInSize'); @ZSTD_DStreamOutSize:= GetProcAddress(hZstd, 'ZSTD_DStreamOutSize'); @ZSTD_createDCtx:= GetProcAddress(hZstd, 'ZSTD_createDCtx'); @ZSTD_freeDCtx:= GetProcAddress(hZstd, 'ZSTD_freeDCtx'); @ZSTD_DCtx_setMaxWindowSize:= GetProcAddress(hZstd, 'ZSTD_DCtx_setMaxWindowSize'); @ZSTD_decompressStream:= GetProcAddress(hZstd, 'ZSTD_decompressStream'); @ZSTD_isError:= GetProcAddress(hZstd, 'ZSTD_isError'); @ZSTD_getErrorName:= GetProcAddress(hZstd, 'ZSTD_getErrorName'); @ZSTD_getFrameContentSize:= GetProcAddress(hZstd, 'ZSTD_getFrameContentSize'); @ZSTD_CCtx_setPledgedSrcSize:= GetProcAddress(hZstd, 'ZSTD_CCtx_setPledgedSrcSize'); end; function ZSTD_Check(code: csize_t): csize_t; begin Result:= code; if (ZSTD_isError(code) <> 0) then raise EZstdError.Create(ZSTD_getErrorName(code)) end; function ZSTD_FileSize(const InStream: TStream): UInt64; var APosition: Int64; ABuffer: array[1..ZSTD_FRAMEHEADERSIZE_MAX] of Byte; begin Initialize; APosition:= InStream.Position; InStream.Seek(0, soBeginning); InStream.Read(ABuffer[1], ZSTD_FRAMEHEADERSIZE_MAX); InStream.Seek(APosition, soBeginning); Result:= ZSTD_getFrameContentSize(@ABuffer[1], ZSTD_FRAMEHEADERSIZE_MAX); if (Result = ZSTD_CONTENTSIZE_UNKNOWN) or (Result = ZSTD_CONTENTSIZE_ERROR) then Result:= 0; end; { TZstdDecompressionStream } constructor TZstdDecompressionStream.Create(InStream: TStream); const {$IFDEF CPU32} ZSTD_MAXWINDOWSIZE = (1 shl 30); {$ELSE} ZSTD_MAXWINDOWSIZE = (1 shl 31); {$ENDIF} begin Initialize; FStream:= InStream; FContext:= ZSTD_createDCtx(); FBufferInSize:= ZSTD_DStreamInSize(); FBufferIn.size := FBufferInSize; FBufferIn.pos:= FBufferInSize; FBufferIn.src:= GetMem(FBufferIn.size); FBufferOut.pos:= 0; FBufferOut.size := ZSTD_DStreamOutSize(); FBufferOut.dst:= GetMem(FBufferOut.size); ZSTD_Check(ZSTD_DCtx_setMaxWindowSize(FContext, ZSTD_MAXWINDOWSIZE)); end; destructor TZstdDecompressionStream.Destroy; begin if Assigned(FContext) then begin FreeMem(FBufferIn.src); FreeMem(FBufferOut.dst); ZSTD_freeDCtx(FContext); end; inherited Destroy; end; function TZstdDecompressionStream.Read(var Buffer; Count: Longint): Longint; var ABuffer: PByte; Available: Integer; begin Result:= 0; ABuffer:= @Buffer; while (Count > 0) do begin Available:= FBufferOut.pos - FBufferOutPos; if (Available > 0) then begin if Available > Count then Available:= Count; Move(FBufferOut.dst[FBufferOutPos], ABuffer^, Available); Inc(Result, Available); if (Available = Count) then begin Inc(FBufferOutPos, UIntPtr(Available)); Break; end; Inc(ABuffer, Available); Dec(Count, Available); end; if (FBufferIn.size > 0) and (FBufferIn.pos = FBufferIn.size) then begin FBufferIn.pos:= 0; FBufferIn.size:= FStream.Read(FBufferIn.src^, FBufferInSize); end; FBufferOutPos:= 0; FBufferOut.pos:= 0; ZSTD_Check(ZSTD_decompressStream(FContext, @FBufferOut, @FBufferIn)); if (FBufferOut.pos = 0) and (FBufferIn.size = 0) then Break; end; end; function TZstdDecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result:= -1; end; { TZstdCompressionStream } constructor TZstdCompressionStream.Create(OutStream: TStream; ALevel: Integer; InSize: UInt64); begin Initialize; FStream:= OutStream; FContext:= ZSTD_createCCtx(); FBufferOut.size:= ZSTD_CStreamOutSize(); FBufferOut.dst:= GetMem(FBufferOut.size); ZSTD_CCtx_setPledgedSrcSize(FContext, InSize); ZSTD_Check(ZSTD_CCtx_setParameter(FContext, ZSTD_c_checksumFlag, 1)); ZSTD_Check(ZSTD_CCtx_setParameter(FContext, ZSTD_c_compressionLevel, ALevel)); end; destructor TZstdCompressionStream.Destroy; var ARemaining: csize_t; AInput: ZSTD_inBuffer; begin try if Assigned(FContext) then try FillChar({%H-}AInput, SizeOf(ZSTD_inBuffer), 0); repeat FBufferOut.pos:= 0; ARemaining:= ZSTD_Check(ZSTD_compressStream2(FContext, @FBufferOut, @AInput, ZSTD_e_end)); if (FBufferOut.pos > 0) then begin FStream.WriteBuffer(FBufferOut.dst^, FBufferOut.pos); end; until (ARemaining = 0); finally FreeMem(FBufferOut.dst); ZSTD_freeCCtx(FContext); end; finally inherited Destroy; end; end; function TZstdCompressionStream.Write(const Buffer; Count: Longint): Longint; var AInput: ZSTD_inBuffer; begin AInput.pos:= 0; AInput.src:= @Buffer; AInput.size:= Count; while AInput.pos < AInput.size do begin FBufferOut.pos:= 0; ZSTD_Check(ZSTD_compressStream2(FContext, @FBufferOut, @AInput, ZSTD_e_continue)); if (FBufferOut.pos > 0) then FStream.WriteBuffer(FBufferOut.dst^, FBufferOut.pos); end; Result:= AInput.pos; end; function TZstdCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result:= -1; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzlibprc.pas0000644000175000001440000001121615104114162023065 0ustar alexxusersunit AbZlibPrc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ZStream, AbDfBase; type { TDeflateStream } TDeflateStream = class(TCompressionStream) private FSize: Int64; FHash: UInt32; FOnProgressStep: TAbProgressStep; public constructor Create(ALevel: Integer; ADest: TStream); function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property Hash: UInt32 read FHash; end; { TInflateStream } TInflateStream = class(TDecompressionStream) private FHash: UInt32; public function CopyInto(ATarget: TStream; ACount: Int64): Int64; function Read(var Buffer; Count: LongInt): LongInt; override; end; function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; function Inflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; implementation uses Math, ZDeflate, ZBase, DCcrc32; function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper): longint; var ALevel: Integer; ADeflateStream: TDeflateStream; begin case aHelper.PKZipOption of 'n': ALevel:= 6; 'x': ALevel:= 9; 'f': ALevel:= 3; 's': ALevel:= 1; else ALevel:= Z_DEFAULT_COMPRESSION; end; { if the helper's stream size <= 0, calculate the stream size from the stream itself } if (aHelper.StreamSize <= 0) then aHelper.StreamSize := aSource.Size; ADeflateStream:= TDeflateStream.Create(ALevel, aDest); try ADeflateStream.FSize:= aHelper.StreamSize; { attach progress notification method } ADeflateStream.FOnProgressStep:= aHelper.OnProgressStep; ADeflateStream.CopyFrom(aSource, aHelper.StreamSize); { save the uncompressed and compressed sizes } aHelper.NormalSize:= ADeflateStream.raw_written; aHelper.CompressedSize:= ADeflateStream.compressed_written; { provide encryption check value } Result := LongInt(ADeflateStream.FHash); finally ADeflateStream.Free; end; end; function Inflate(aSource: TStream; aDest: TStream; aHelper: TAbDeflateHelper): longint; var ACount: Int64; AInflateStream: TInflateStream; begin AInflateStream:= TInflateStream.Create(aSource, True); try if aHelper.PartialSize > 0 then begin ACount:= aHelper.PartialSize; aHelper.NormalSize:= AInflateStream.CopyInto(aDest, ACount); end else begin ACount:= aHelper.NormalSize; aHelper.NormalSize:= aDest.CopyFrom(AInflateStream, ACount); end; aHelper.CompressedSize:= AInflateStream.compressed_read; Result:= LongInt(AInflateStream.FHash); finally AInflateStream.Free; end; end; { TInflateStream } function TInflateStream.CopyInto(ATarget: TStream; ACount: Int64): Int64; var ARead, ASize: Integer; ABuffer: array of Byte; begin Result:= 0; ASize:= Min(ACount, $8000); SetLength(ABuffer, ASize); repeat if ACount < ASize then begin ASize:= ACount; end; ARead:= Read(ABuffer[0], ASize); if ARead > 0 then begin Dec(ACount, ARead); Inc(Result, ARead); ATarget.WriteBuffer(ABuffer[0], ARead); end; until (ARead < ASize) or (ACount = 0); end; function TInflateStream.Read(var Buffer; Count: LongInt): LongInt; begin Result:= inherited Read(Buffer, Count); FHash:= crc32_16bytes(@Buffer, Result, FHash); if (Result < Count) and (Fstream.avail_in > 0) then begin FSource.Seek(-Fstream.avail_in, soCurrent); Fstream.avail_in:= 0; end; end; { TDeflateStream } constructor TDeflateStream.Create(ALevel: Integer; ADest: TStream); const BUF_SIZE = 16384; var AError: Integer; begin TOwnerStream(Self).Create(ADest); Fbuffer:= GetMem(BUF_SIZE); Fstream.next_out:= Fbuffer; Fstream.avail_out:= BUF_SIZE; AError:= deflateInit2(Fstream, ALevel, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, 0); if AError <> Z_OK then raise Ecompressionerror.Create(zerror(AError)); end; function TDeflateStream.Write(const Buffer; Count: Longint): Longint; begin FHash:= crc32_16bytes(@Buffer, Count, FHash); Result:= inherited Write(Buffer, Count); if Assigned(FOnProgressStep) then begin FOnProgressStep(raw_written * 100 div FSize); end; end; function TDeflateStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result:= raw_written else begin Result:= inherited Seek(Offset, Origin); end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzipxprc.pas0000644000175000001440000001006315104114162023116 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Compress item to .zipx archive * * Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ***** END LICENSE BLOCK ***** *) {**********************************************************} {* ABBREVIA: AbZipxPrc.pas *} {**********************************************************} {* ABBREVIA: TZipHashStream class *} {**********************************************************} unit AbZipxPrc; {$mode delphi} interface uses Classes, SysUtils, BufStream, AbZipTyp, AbArcTyp; type { TZipHashStream } TZipHashStream = class(TReadBufStream) private FSize: Int64; FHash: UInt32; FOnProgress: TAbProgressEvent; public constructor Create(ASource : TStream); reintroduce; function Read(var ABuffer; ACount : LongInt) : Integer; override; property OnProgress : TAbProgressEvent read FOnProgress write FOnProgress; property Hash: UInt32 read FHash; end; procedure DoCompressXz(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); procedure DoCompressZstd(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); implementation uses AbXz, AbZstd, AbExcept, DCcrc32; procedure DoCompressXz(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var ASource: TZipHashStream; CompStream: TXzCompressionStream; begin Item.CompressionMethod := cmXz; ASource := TZipHashStream.Create(InStream); try ASource.OnProgress := Archive.OnProgress; CompStream := TXzCompressionStream.Create(OutStream, Archive.CompressionLevel); try CompStream.CopyFrom(ASource, Item.UncompressedSize); finally CompStream.Free; end; Item.CRC32 := LongInt(ASource.Hash); finally ASource.Free; end; end; procedure DoCompressZstd(Archive: TAbZipArchive; Item: TAbZipItem; OutStream, InStream: TStream); var ASource: TZipHashStream; CompStream: TZSTDCompressionStream; begin Item.CompressionMethod := cmZstd; ASource := TZipHashStream.Create(InStream); try ASource.OnProgress := Archive.OnProgress; CompStream := TZSTDCompressionStream.Create(OutStream, Archive.CompressionLevel, Item.UncompressedSize); try CompStream.CopyFrom(ASource, Item.UncompressedSize); finally CompStream.Free; end; Item.CRC32 := LongInt(ASource.Hash); finally ASource.Free; end; end; { TZipHashStream } constructor TZipHashStream.Create(ASource: TStream); begin FSize := ASource.Size; inherited Create(ASource); end; function TZipHashStream.Read(var ABuffer; ACount: LongInt): Integer; var Abort: Boolean = False; begin Result := inherited Read(ABuffer, ACount); FHash := crc32_16bytes(@ABuffer, Result, FHash); if Assigned(FOnProgress) then begin FOnProgress(GetPosition * 100 div FSize, Abort); if Abort then raise EAbUserAbort.Create; end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abziptyp.pas0000644000175000001440000026471015104114162022770 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipTyp.pas *} {*********************************************************} {* ABBREVIA: PKZip types *} {* Based on information from Appnote.txt, shipped with *} {* PKWare's PKZip for Windows 2.5 *} {*********************************************************} unit AbZipTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbUtils, AbSpanSt; const { note #$50 = 'P', #$4B = 'K'} Ab_ZipVersion = 63; Ab_ZipLocalFileHeaderSignature : Longint = $04034B50; Ab_ZipDataDescriptorSignature : Longint = $08074B50; Ab_ZipCentralDirectoryFileHeaderSignature : Longint = $02014B50; Ab_Zip64EndCentralDirectorySignature : Longint = $06064B50; Ab_Zip64EndCentralDirectoryLocatorSignature:Longint = $07064B50; Ab_ZipEndCentralDirectorySignature : Longint = $06054B50; Ab_ZipSpannedSetSignature : Longint = $08074B50; Ab_ZipPossiblySpannedSignature : Longint = $30304B50; Ab_GeneralZipSignature : Word = $4B50; Ab_ArchiveExtraDataRecord : Longint = $08064B50; Ab_DigitalSignature : Longint = $05054B50; Ab_WindowsExeSignature : Word = $5A4D; Ab_LinuxExeSignature : Longint = $464C457F; AbDefZipSpanningThreshold = 0; AbDefPasswordRetries = 3; AbFileIsEncryptedFlag = $0001; AbHasDataDescriptorFlag = $0008; AbLanguageEncodingFlag = $0800; Ab_Zip64SubfieldID : Word = $0001; Ab_NTFSSubfieldID : Word = $000A; Ab_InfoZipTimestampSubfieldID : Word = $5455; Ab_InfoZipUnicodePathSubfieldID : Word = $7075; Ab_XceedUnicodePathSubfieldID : Word = $554E; Ab_XceedUnicodePathSignature : LongWord= $5843554E; type TNtfsTimeField = packed record Reserved : UInt32; Tag : UInt16; Size : UInt16; Mtime : UInt64; Atime : UInt64; Ctime : UInt64; end; PNtfsTimeField = ^TNtfsTimeField; TInfoZipTimeField = packed record Tag : Byte; Mtime : UInt32; end; PInfoZipTimeField = ^TInfoZipTimeField; type PAbByteArray4K = ^TAbByteArray4K; TAbByteArray4K = array[1..4096] of Byte; PAbByteArray8K = ^TAbByteArray8K; TAbByteArray8K = array[0..8192] of Byte; PAbIntArray8K = ^TAbIntArray8K; TAbIntArray8K = array[0..8192] of SmallInt; PAbWordArray = ^TAbWordArray; TAbWordArray = array[0..65535 div SizeOf(Word)-1] of Word; PAbByteArray = ^TAbByteArray; TAbByteArray = array[0..65535-1] of Byte; PAbSmallIntArray = ^TAbSmallIntArray; TAbSmallIntArray = array[0..65535 div SizeOf(SmallInt)-1] of SmallInt; PAbIntegerArray = ^TAbIntegerArray; TAbIntegerArray = array[0..65535 div sizeof(integer)-1] of integer; TAbZip64EndOfCentralDirectoryRecord = packed record Signature : Longint; RecordSize : Int64; VersionMadeBy : Word; VersionNeededToExtract : Word; DiskNumber : LongWord; StartDiskNumber : LongWord; EntriesOnDisk : Int64; TotalEntries : Int64; DirectorySize : Int64; DirectoryOffset : Int64; end; TAbZip64EndOfCentralDirectoryLocator = packed record Signature : Longint; StartDiskNumber : Longint; RelativeOffset : Int64; TotalDisks : Longint; end; TAbZipEndOfCentralDirectoryRecord = packed record Signature : Longint; DiskNumber : Word; StartDiskNumber : Word; EntriesOnDisk : Word; TotalEntries : Word; DirectorySize : LongWord; DirectoryOffset : LongWord; CommentLength : Word; end; TAbFollower = {used to expand reduced files} packed record Size : Byte; {size of follower set} FSet : array[0..31] of Byte; {follower set} end; PAbFollowerSets = ^TAbFollowerSets; TAbFollowerSets = array[0..255] of TAbFollower; PAbSfEntry = ^TAbSfEntry; TAbSfEntry = {entry in a Shannon-Fano tree} packed record case Byte of 0 : (Code : Word; Value, BitLength : Byte); 1 : (L : Longint); end; PAbSfTree = ^TAbSfTree; TAbSfTree = packed record {a Shannon-Fano tree} Entries : SmallInt; MaxLength : SmallInt; Entry : array[0..256] of TAbSfEntry; end; PInfoZipUnicodePathRec = ^TInfoZipUnicodePathRec; TInfoZipUnicodePathRec = packed record Version: Byte; NameCRC32: LongInt; UnicodeName: array[0..0] of AnsiChar; end; PXceedUnicodePathRec = ^TXceedUnicodePathRec; TXceedUnicodePathRec = packed record Signature: LongWord; Length: Integer; UnicodeName: array[0..0] of WideChar; end; PZip64LocalHeaderRec = ^TZip64LocalHeaderRec; TZip64LocalHeaderRec = packed record UncompressedSize: Int64; CompressedSize: Int64; end; type TAbZipCompressionMethod = (cmStored, cmShrunk, cmReduced1, cmReduced2, cmReduced3, cmReduced4, cmImploded, cmTokenized, cmDeflated, cmEnhancedDeflated, cmDCLImploded, cmBzip2 = 12, cmLZMA = 14, cmIBMTerse = 18, cmLZ77, cmZstd = 93, cmXz = 95, cmJPEG = 96, cmWavPack = 97, cmPPMd); TAbZipSupportedMethod = (smStored, smDeflated, smBestMethod); {ExternalFileAttributes compatibility; aliases are Info-ZIP/PKZIP overlaps} TAbZipHostOS = (hosDOS, hosAmiga, hosVAX, hosUnix, hosVMCMS, hosAtari, hosOS2, hosMacintosh, hosZSystem, hosCPM, hosNTFS, hosTOPS20 = hosNTFS, hosMVS, hosWinNT = hosMVS, hosVSE, hosQDOS = hosVSE, hosRISC, hosVFAT, hosAltMVS, hosBeOS, hosTandem, hosOS400, hosTHEOS = hosOS400, hosDarwin, hosAtheOS = 30); {for method 6 - imploding} TAbZipDictionarySize = (dsInvalid, ds4K, ds8K); {for method 8 - deflating} TAbZipDeflationOption = (doInvalid, doNormal, doMaximum, doFast, doSuperFast ); type TAbNeedPasswordEvent = procedure(Sender : TObject; var NewPassword : AnsiString) of object; const AbDefCompressionMethodToUse = smBestMethod; AbDefDeflationOption = doNormal; type TAbZipDataDescriptor = class( TObject ) protected {private} FCRC32 : Longint; FCompressedSize : Int64; FUncompressedSize : Int64; public {methods} procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); public {properties} property CRC32 : Longint read FCRC32 write FCRC32; property CompressedSize : Int64 read FCompressedSize write FCompressedSize; property UncompressedSize : Int64 read FUncompressedSize write FUncompressedSize; end; type { TAbZipFileHeader interface =============================================== } {ancestor class for ZipLocalFileHeader and DirectoryFileHeader} TAbZipFileHeader = class( TObject ) protected {private} FValidSignature : Longint; FSignature : Longint; FVersionNeededToExtract : Word; FGeneralPurposeBitFlag : Word; FCompressionMethod : Word; FLastModFileTime : Word; FLastModFileDate : Word; FCRC32 : Longint; FCompressedSize : LongWord; FUncompressedSize : LongWord; FFileName : AnsiString; FExtraField : TAbExtraField; protected {methods} function GetCompressionMethod : TAbZipCompressionMethod; function GetCompressionRatio : Double; function GetDataDescriptor : Boolean; function GetDeflationOption : TAbZipDeflationOption; function GetDictionarySize : TAbZipDictionarySize; function GetEncrypted : Boolean; function GetIsUTF8 : Boolean; function GetShannonFanoTreeCount : Byte; function GetValid : Boolean; procedure SetCompressionMethod( Value : TAbZipCompressionMethod ); procedure SetIsUTF8( Value : Boolean ); public {methods} constructor Create; destructor Destroy; override; public {properties} property Signature : Longint read FSignature write FSignature; property VersionNeededToExtract : Word read FVersionNeededToExtract write FVersionNeededToExtract; property GeneralPurposeBitFlag : Word read FGeneralPurposeBitFlag write FGeneralPurposeBitFlag; property CompressionMethod : TAbZipCompressionMethod read GetCompressionMethod write SetCompressionMethod; property LastModFileTime : Word read FLastModFileTime write FLastModFileTime; property LastModFileDate : Word read FLastModFileDate write FLastModFileDate; property CRC32 : Longint read FCRC32 write FCRC32; property CompressedSize : LongWord read FCompressedSize write FCompressedSize; property UncompressedSize : LongWord read FUncompressedSize write FUncompressedSize; property FileName : AnsiString read FFileName write FFileName; property ExtraField : TAbExtraField read FExtraField; property CompressionRatio : Double read GetCompressionRatio; property DeflationOption : TAbZipDeflationOption read GetDeflationOption; property DictionarySize : TAbZipDictionarySize read GetDictionarySize; property HasDataDescriptor : Boolean read GetDataDescriptor; property IsValid : Boolean read GetValid; property IsEncrypted : Boolean read GetEncrypted; property IsUTF8 : Boolean read GetIsUTF8 write SetIsUTF8; property ShannonFanoTreeCount : Byte read GetShannonFanoTreeCount; end; { TAbZipLocalFileHeader interface ========================================== } TAbZipLocalFileHeader = class( TAbZipFileHeader ) public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); end; { TAbZipDirectoryFileHeader interface ====================================== } TAbZipDirectoryFileHeader = class( TAbZipFileHeader ) protected {private} FVersionMadeBy : Word; FDiskNumberStart : Word; FInternalFileAttributes : Word; FExternalFileAttributes : LongWord; FRelativeOffset : LongWord; FFileComment : AnsiString; public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); public {properties} property VersionMadeBy : Word read FVersionMadeBy write FVersionMadeBy; property DiskNumberStart : Word read FDiskNumberStart write FDiskNumberStart; property InternalFileAttributes : Word read FInternalFileAttributes write FInternalFileAttributes; property ExternalFileAttributes : LongWord read FExternalFileAttributes write FExternalFileAttributes; property RelativeOffset : LongWord read FRelativeOffset write FRelativeOffset; property FileComment : AnsiString read FFileComment write FFileComment; end; { TAbZipDirectoryFileFooter interface ====================================== } TAbZipDirectoryFileFooter = class( TObject ) protected {private} FDiskNumber : LongWord; FStartDiskNumber : LongWord; FEntriesOnDisk : Int64; FTotalEntries : Int64; FDirectorySize : Int64; FDirectoryOffset : Int64; FZipfileComment : AnsiString; function GetIsZip64: Boolean; public {methods} procedure LoadFromStream( Stream : TStream ); procedure LoadZip64FromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream; aZip64TailOffset : Int64 = -1 ); public {properties} property DiskNumber : LongWord read FDiskNumber write FDiskNumber; property EntriesOnDisk : Int64 read FEntriesOnDisk write FEntriesOnDisk; property TotalEntries : Int64 read FTotalEntries write FTotalEntries; property DirectorySize : Int64 read FDirectorySize write FDirectorySize; property DirectoryOffset : Int64 read FDirectoryOffset write FDirectoryOffset; property StartDiskNumber : LongWord read FStartDiskNumber write FStartDiskNumber; property ZipfileComment : AnsiString read FZipfileComment write FZipfileComment; property IsZip64: Boolean read GetIsZip64; end; { TAbZipItem interface ===================================================== } TAbZipItem = class( TAbArchiveItem ) protected {private} FItemInfo : TAbZipDirectoryFileHeader; FDiskNumberStart : LongWord; FLFHExtraField : TAbExtraField; FRelativeOffset : Int64; FDateTime : TDateTime; protected {methods} function GetCompressionMethod : TAbZipCompressionMethod; function GetCompressionRatio : Double; function GetDeflationOption : TAbZipDeflationOption; function GetDictionarySize : TAbZipDictionarySize; function GetExtraField : TAbExtraField; function GetFileComment : AnsiString; function GetGeneralPurposeBitFlag : Word; function GetHostOS: TAbZipHostOS; function GetInternalFileAttributes : Word; function GetRawFileName : AnsiString; function GetShannonFanoTreeCount : Byte; function GetVersionMadeBy : Word; function GetVersionNeededToExtract : Word; procedure SaveCDHToStream( Stream : TStream ); procedure SaveDDToStream( Stream : TStream ); procedure SaveLFHToStream( Stream : TStream ); procedure SetCompressionMethod( Value : TAbZipCompressionMethod ); procedure SetDiskNumberStart( Value : LongWord ); procedure SetFileComment(const Value : AnsiString ); procedure SetGeneralPurposeBitFlag( Value : Word ); procedure SetHostOS( Value : TAbZipHostOS ); procedure SetInternalFileAttributes( Value : Word ); procedure SetRelativeOffset( Value : Int64 ); procedure SetVersionMadeBy( Value : Word ); procedure SetVersionNeededToExtract( Value : Word ); procedure UpdateVersionNeededToExtract; procedure UpdateZip64ExtraHeader; protected {redefined property methods} function GetCRC32 : Longint; override; function GetExternalFileAttributes : LongWord; override; function GetIsDirectory: Boolean; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetNativeFileAttributes : LongInt; override; function GetNativeLastModFileTime: Longint; override; function GetLastModTimeAsDateTime: TDateTime; override; procedure SetCompressedSize( const Value : Int64 ); override; procedure SetCRC32( const Value : Longint ); override; procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string ); override; procedure SetLastModFileDate(const Value : Word ); override; procedure SetLastModFileTime(const Value : Word ); override; procedure SetUncompressedSize( const Value : Int64 ); override; procedure SetLastModTimeAsDateTime(const Value: TDateTime); override; public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); public {properties} property CompressionMethod : TAbZipCompressionMethod read GetCompressionMethod write SetCompressionMethod; property CompressionRatio : Double read GetCompressionRatio; property DeflationOption : TAbZipDeflationOption read GetDeflationOption; property DictionarySize : TAbZipDictionarySize read GetDictionarySize; property DiskNumberStart : LongWord read FDiskNumberStart write SetDiskNumberStart; property ExtraField : TAbExtraField read GetExtraField; property FileComment : AnsiString read GetFileComment write SetFileComment; property HostOS: TAbZipHostOS read GetHostOS write SetHostOS; property InternalFileAttributes : Word read GetInternalFileAttributes write SetInternalFileAttributes; property GeneralPurposeBitFlag : Word read GetGeneralPurposeBitFlag write SetGeneralPurposeBitFlag; property LFHExtraField : TAbExtraField read FLFHExtraField; property RawFileName : AnsiString read GetRawFileName; property RelativeOffset : Int64 read FRelativeOffset write SetRelativeOffset; property ShannonFanoTreeCount : Byte read GetShannonFanoTreeCount; property VersionMadeBy : Word read GetVersionMadeBy write SetVersionMadeBy; property VersionNeededToExtract : Word read GetVersionNeededToExtract write SetVersionNeededToExtract; end; { TAbZipArchive interface ================================================== } TAbZipArchive = class( TAbArchive ) protected {private} FCompressionMethodToUse : TAbZipSupportedMethod; FDeflationOption : TAbZipDeflationOption; FInfo : TAbZipDirectoryFileFooter; FIsExecutable : Boolean; FPassword : AnsiString; FPasswordRetries : Byte; FStubSize : LongWord; FExtractHelper : TAbArchiveItemExtractEvent; FExtractToStreamHelper : TAbArchiveItemExtractToStreamEvent; FTestHelper : TAbArchiveItemTestEvent; FInsertHelper : TAbArchiveItemInsertEvent; FInsertFromStreamHelper : TAbArchiveItemInsertFromStreamEvent; FOnNeedPassword : TAbNeedPasswordEvent; FOnRequestLastDisk : TAbRequestDiskEvent; FOnRequestNthDisk : TAbRequestNthDiskEvent; FOnRequestBlankDisk : TAbRequestDiskEvent; protected {methods} procedure DoExtractHelper(Index : Integer; const NewName : string); procedure DoExtractToStreamHelper(Index : Integer; aStream : TStream); procedure DoTestHelper(Index : Integer); procedure DoInsertHelper(Index : Integer; OutStream : TStream); procedure DoInsertFromStreamHelper(Index : Integer; OutStream : TStream); function GetItem( Index : Integer ) : TAbZipItem; function GetZipfileComment : AnsiString; procedure PutItem( Index : Integer; Value : TAbZipItem ); procedure DoRequestDisk(const AMessage: string; var Abort : Boolean); procedure DoRequestLastDisk( var Abort : Boolean ); virtual; procedure DoRequestNthDisk(Sender: TObject; DiskNumber : Byte; var Abort : Boolean ); virtual; procedure DoRequestBlankDisk(Sender: TObject; var Abort : Boolean ); virtual; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure TestItemAt(Index : Integer); override; function FixName(const Value : string ) : string; override; function GetSupportsEmptyFolders: Boolean; override; procedure LoadArchive; override; procedure SaveArchive; override; procedure SetZipfileComment(const Value : AnsiString ); protected {properties} property IsExecutable : Boolean read FIsExecutable write FIsExecutable; public {protected} procedure DoRequestImage(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); public {methods} constructor CreateFromStream( aStream : TStream; const ArchiveName : string ); override; destructor Destroy; override; function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; public {properties} property CompressionMethodToUse : TAbZipSupportedMethod read FCompressionMethodToUse write FCompressionMethodToUse; property DeflationOption : TAbZipDeflationOption read FDeflationOption write FDeflationOption; property ExtractHelper : TAbArchiveItemExtractEvent read FExtractHelper write FExtractHelper; property ExtractToStreamHelper : TAbArchiveItemExtractToStreamEvent read FExtractToStreamHelper write FExtractToStreamHelper; property TestHelper : TAbArchiveItemTestEvent read FTestHelper write FTestHelper; property InsertHelper : TAbArchiveItemInsertEvent read FInsertHelper write FInsertHelper; property InsertFromStreamHelper : TAbArchiveItemInsertFromStreamEvent read FInsertFromStreamHelper write FInsertFromStreamHelper; property Password : AnsiString read FPassword write FPassword; property PasswordRetries : Byte read FPasswordRetries write FPasswordRetries default AbDefPasswordRetries; property StubSize : LongWord read FStubSize; property ZipfileComment : AnsiString read GetZipfileComment write SetZipfileComment; property Items[Index : Integer] : TAbZipItem read GetItem write PutItem; default; property SuspiciousLinks : TStringList read FSuspiciousLinks; public {events} property OnNeedPassword : TAbNeedPasswordEvent read FOnNeedPassword write FOnNeedPassword; property OnRequestLastDisk : TAbRequestDiskEvent read FOnRequestLastDisk write FOnRequestLastDisk; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write FOnRequestNthDisk; property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write FOnRequestBlankDisk; end; {============================================================================} procedure MakeSelfExtracting( StubStream, ZipStream, SelfExtractingStream : TStream ); {-takes an executable stub, and a .zip format stream, and creates a SelfExtracting stream. The stub should create a TAbZipArchive passing itself as the file, using a read-only open mode. It should then perform operations as needed - like ExtractFiles( '*.*' ). This routine updates the RelativeOffset of each item in the archive} function FindCentralDirectoryTail(aStream : TStream) : Int64; function VerifyZip(Strm : TStream) : TAbArchiveType; function VerifySelfExtracting(Strm : TStream) : TAbArchiveType; function ZipCompressionMethodToString(aMethod: TAbZipCompressionMethod): string; implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} {$IFDEF UnixDialogs} {$IFDEF KYLIX} QControls, QDialogs, {$ENDIF} {$IFDEF LCL} Controls, Dialogs, {$ENDIF} {$ENDIF} Math, AbResString, AbExcept, AbVMStrm, SysUtils, LazUTF8, DCOSUtils, DCStrUtils, DCBasicTypes, DCClassesUtf8, DCDateTimeUtils, DCConvertEncoding; function VerifyZip(Strm : TStream) : TAbArchiveType; { determine if stream appears to be in PkZip format } var Empty : TAbZipEndOfCentralDirectoryRecord; Footer : TAbZipEndOfCentralDirectoryRecord; Sig : LongInt; TailPosition : int64; StartPos : int64; begin StartPos := Strm.Position; Result := atUnknown; try Strm.Position := 0; if Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig) then begin if (Sig = Ab_ZipSpannedSetSignature) then Result := atSpannedZip else begin { attempt to find Central Directory Tail } TailPosition := FindCentralDirectoryTail( Strm ); if TailPosition <> -1 then begin { check Central Directory Signature } if (Strm.Read(Footer, SizeOf(Footer)) = SizeOf(Footer)) and (Footer.Signature = Ab_ZipEndCentralDirectorySignature) then begin Empty:= Default(TAbZipEndOfCentralDirectoryRecord); Empty.Signature:= Ab_ZipEndCentralDirectorySignature; { check Central Directory Offset } if (Footer.DirectoryOffset = High(LongWord)) or ((Strm.Seek(Footer.DirectoryOffset, soBeginning) = Footer.DirectoryOffset) and (Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig)) and (Sig = Ab_ZipCentralDirectoryFileHeaderSignature)) then begin if Footer.DiskNumber = 0 then Result := atZip else Result := atSpannedZip; end { empty archive } else if (Strm.Size = SizeOf(Footer)) and (CompareMem(@Footer, @Empty, SizeOf(Footer))) then begin Result := atZip end; end; end; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := StartPos; end; function VerifySelfExtracting(Strm : TStream) : TAbArchiveType; { determine if stream appears to be an executable with appended PkZip data } var FileSignature : Longint; StartPos : Int64; IsWinExe, IsLinuxExe : Boolean; begin StartPos := Strm.Position; { verify presence of executable stub } {check file type of stub stream} Strm.Position := 0; Strm.Read( FileSignature, sizeof( FileSignature ) ); Result := atSelfExtZip; { detect executable type } IsLinuxExe := FileSignature = Ab_LinuxExeSignature; IsWinExe := LongRec(FileSignature).Lo = Ab_WindowsExeSignature; if not (IsWinExe or IsLinuxExe) then Result := atUnknown; { Check for central directory tail } if VerifyZip(Strm) <> atZip then Result := atUnknown; Strm.Position := StartPos; end; {============================================================================} function ZipCompressionMethodToString(aMethod: TAbZipCompressionMethod): string; begin case aMethod of cmStored: Result := AbZipStored; cmShrunk: Result := AbZipShrunk; cmReduced1..cmReduced4: Result := AbZipReduced; cmImploded: Result := AbZipImploded; cmTokenized: Result := AbZipTokenized; cmDeflated: Result := AbZipDeflated; cmEnhancedDeflated: Result := AbZipDeflate64; cmDCLImploded: Result := AbZipDCLImploded; cmBzip2: Result := AbZipBzip2; cmLZMA: Result := AbZipLZMA; cmIBMTerse: Result := AbZipIBMTerse; cmLZ77: Result := AbZipLZ77; cmJPEG: Result := AbZipJPEG; cmWavPack: Result := AbZipWavPack; cmPPMd: Result := AbZipPPMd; else Result := Format(AbZipUnknown, [Ord(aMethod)]); end; end; {============================================================================} function FindCentralDirectoryTail(aStream : TStream) : Int64; { search end of aStream looking for ZIP Central Directory structure returns position in stream if found (otherwise returns -1), leaves stream positioned at start of structure or at original position if not found } const MaxBufSize = 256 * 1024; var StartPos : Int64; TailRec : TAbZipEndOfCentralDirectoryRecord; Buffer : PAnsiChar; Offset : Int64; TestPos : PAnsiChar; BytesRead : Int64; BufSize : Int64; CommentLen: integer; begin {save the starting position} StartPos := aStream.Seek(0, soCurrent); {start off with the majority case: no zip file comment, so the central directory tail is the last thing in the stream and it's a fixed size and doesn't indicate a zip file comment} Result := aStream.Seek(-sizeof(TailRec), soEnd); if (Result >= 0) then begin aStream.ReadBuffer(TailRec, sizeof(TailRec)); if (TailRec.Signature = Ab_ZipEndCentralDirectorySignature) and (TailRec.CommentLength = 0) then begin aStream.Seek(Result, soBeginning); Exit; end; end; {the zip stream seems to have a comment, or it has null padding bytes from some flaky program, or it's not even a zip formatted stream; we need to search for the tail signature} {get a buffer} BufSize := Min(MaxBufSize, aStream.Size); GetMem(Buffer, BufSize); try {start out searching backwards} Offset := -BufSize; {seek to the search position} Result := aStream.Seek(Offset, soEnd); if (Result < 0) then begin Result := aStream.Seek(0, soBeginning); end; {read a buffer full} BytesRead := aStream.Read(Buffer^, BufSize); if BytesRead < sizeOf(TailRec) then begin Result := -1; Exit; end; {search backwards through the buffer looking for the signature} TestPos := Buffer + BytesRead - sizeof(TailRec); while (TestPos <> Buffer) and (PLongint(TestPos)^ <> Ab_ZipEndCentralDirectorySignature) do dec(TestPos); {if we found the signature...} if (PLongint(TestPos)^ = Ab_ZipEndCentralDirectorySignature) then begin {get the tail record at this position} Move(TestPos^, TailRec, sizeof(TailRec)); {if it's as valid a tail as we can check here...} CommentLen := -Offset - (TestPos - Buffer + sizeof(TailRec)); if (TailRec.CommentLength <= CommentLen) then begin {calculate its position and exit} Result := Result + (TestPos - Buffer); aStream.Seek(Result, soBeginning); Exit; end; end; {if we reach this point, the CD tail is not present} Result := -1; aStream.Seek(StartPos, soBeginning); finally FreeMem(Buffer); end; end; {============================================================================} procedure MakeSelfExtracting( StubStream, ZipStream, SelfExtractingStream : TStream ); {-takes an executable stub, and a .zip format stream, and creates a SelfExtracting stream. The stub should create a TAbZipArchive passing itself as the file, using a read-only open mode. It should then perform operations as needed - like ExtractFiles( '*.*' ). This routine updates the RelativeOffset of each item in the archive} var DirectoryStart : Int64; FileSignature : Longint; StubSize : LongWord; TailPosition : Int64; ZDFF : TAbZipDirectoryFileFooter; ZipItem : TAbZipItem; IsWinExe, IsLinuxExe : Boolean; begin {check file type of stub stream} StubStream.Position := 0; StubStream.Read(FileSignature, SizeOf(FileSignature)); {detect executable type } IsLinuxExe := FileSignature = Ab_LinuxExeSignature; IsWinExe := LongRec(FileSignature).Lo = Ab_WindowsExeSignature; if not (IsWinExe or IsLinuxExe) then raise EAbZipInvalidStub.Create; StubStream.Position := 0; StubSize := StubStream.Size; ZipStream.Position := 0; ZipStream.Read( FileSignature, sizeof( FileSignature ) ); if LongRec(FileSignature).Lo <> Ab_GeneralZipSignature then raise EAbZipInvalid.Create; ZipStream.Position := 0; {copy the stub into the selfex stream} SelfExtractingStream.Position := 0; SelfExtractingStream.CopyFrom( StubStream, 0 ); TailPosition := FindCentralDirectoryTail( ZipStream ); if TailPosition = -1 then raise EAbZipInvalid.Create; {load the ZipDirectoryFileFooter} ZDFF := TAbZipDirectoryFileFooter.Create; try ZDFF.LoadFromStream( ZipStream ); DirectoryStart := ZDFF.DirectoryOffset; finally ZDFF.Free; end; {copy everything up to the CDH into the SelfExtractingStream} ZipStream.Position := 0; SelfExtractingStream.CopyFrom( ZipStream, DirectoryStart ); ZipStream.Position := DirectoryStart; repeat ZipItem := TAbZipItem.Create; try ZipItem.LoadFromStream( ZipStream ); ZipItem.RelativeOffset := ZipItem.RelativeOffset + StubSize; {save the modified entry into the Self Extracting Stream} ZipItem.SaveCDHToStream( SelfExtractingStream ); finally ZipItem.Free; end; until ZipStream.Position = TailPosition; {save the CDH Footer.} ZDFF := TAbZipDirectoryFileFooter.Create; try ZDFF.LoadFromStream( ZipStream ); ZDFF.DirectoryOffset := ZDFF.DirectoryOffset + StubSize; ZDFF.SaveToStream( SelfExtractingStream ); finally ZDFF.Free; end; end; {============================================================================} { TAbZipDataDescriptor implementation ====================================== } procedure TAbZipDataDescriptor.LoadFromStream(Stream: TStream); var Signature: LongInt = 0; begin Stream.Read(Signature, SizeOf(Ab_ZipDataDescriptorSignature)); if (Signature <> Ab_ZipDataDescriptorSignature) then Exit; Stream.Read(FCRC32, SizeOf(FCRC32)); Stream.Read(FCompressedSize, SizeOf(LongWord)); Stream.Read(FUncompressedSize, SizeOf(LongWord)); end; { -------------------------------------------------------------------------- } procedure TAbZipDataDescriptor.SaveToStream( Stream : TStream ); begin Stream.Write( Ab_ZipDataDescriptorSignature, sizeof( Ab_ZipDataDescriptorSignature ) ); Stream.Write( FCRC32, sizeof( FCRC32 ) ); if (FCompressedSize >= $FFFFFFFF) or (FUncompressedSize >= $FFFFFFFF) then begin Stream.Write( FCompressedSize, sizeof( FCompressedSize ) ); Stream.Write( FUncompressedSize, sizeof( FUncompressedSize ) ); end else begin Stream.Write( FCompressedSize, sizeof( LongWord ) ); Stream.Write( FUncompressedSize, sizeof( LongWord ) ); end; end; { -------------------------------------------------------------------------- } { TAbZipFileHeader implementation ========================================== } constructor TAbZipFileHeader.Create; begin inherited Create; FExtraField := TAbExtraField.Create; FValidSignature := $0; end; { -------------------------------------------------------------------------- } destructor TAbZipFileHeader.Destroy; begin FreeAndNil(FExtraField); inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetCompressionMethod : TAbZipCompressionMethod; begin Result := TAbZipCompressionMethod( FCompressionMethod ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDataDescriptor : Boolean; begin Result := ( CompressionMethod = cmDeflated ) and ( ( FGeneralPurposeBitFlag and AbHasDataDescriptorFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetCompressionRatio : Double; var CompSize : Int64; begin {adjust for encrypted headers - ensures we never get negative compression ratios for stored, encrypted files - no guarantees about negative compression ratios in other cases} if isEncrypted then CompSize := CompressedSize - 12 else CompSize := CompressedSize; if UncompressedSize > 0 then Result := 100.0 * ( 1 - ( ( 1.0 * CompSize ) / UncompressedSize ) ) else Result := 0.0; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDeflationOption : TAbZipDeflationOption; begin if CompressionMethod = cmDeflated then if ( ( FGeneralPurposeBitFlag and $02 ) <> 0 ) then if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := doSuperFast else Result := doMaximum else if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := doFast else Result := doNormal else Result := doInvalid; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDictionarySize : TAbZipDictionarySize; begin if CompressionMethod = cmImploded then if ( ( FGeneralPurposeBitFlag and $02 ) <> 0 ) then Result := ds8K else Result := ds4K else Result := dsInvalid; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetEncrypted : Boolean; begin {bit 0 of the GeneralPurposeBitFlag} Result := ( ( FGeneralPurposeBitFlag and AbFileIsEncryptedFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetIsUTF8 : Boolean; begin Result := ( ( GeneralPurposeBitFlag and AbLanguageEncodingFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetShannonFanoTreeCount : Byte; begin if CompressionMethod = cmImploded then if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := 3 else Result := 2 else Result := 0; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetValid : Boolean; begin Result := ( FValidSignature = FSignature ); end; { -------------------------------------------------------------------------- } procedure TAbZipFileHeader.SetCompressionMethod( Value : TAbZipCompressionMethod ); begin FCompressionMethod := Ord( Value ); end; { -------------------------------------------------------------------------- } procedure TAbZipFileHeader.SetIsUTF8( Value : Boolean ); begin if Value then GeneralPurposeBitFlag := GeneralPurposeBitFlag or AbLanguageEncodingFlag else GeneralPurposeBitFlag := GeneralPurposeBitFlag and not AbLanguageEncodingFlag; end; { -------------------------------------------------------------------------- } { TAbZipLocalFileHeader implementation ===================================== } constructor TAbZipLocalFileHeader.Create; begin inherited Create; FValidSignature := Ab_ZipLocalFileHeaderSignature; end; { -------------------------------------------------------------------------- } destructor TAbZipLocalFileHeader.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbZipLocalFileHeader.LoadFromStream( Stream : TStream ); var ExtraFieldLength, FileNameLength : Word; begin with Stream do begin Read( FSignature, sizeof( FSignature ) ); Read( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Read( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Read( FCompressionMethod, sizeof( FCompressionMethod ) ); Read( FLastModFileTime, sizeof( FLastModFileTime ) ); Read( FLastModFileDate, sizeof( FLastModFileDate ) ); Read( FCRC32, sizeof( FCRC32 ) ); Read( FCompressedSize, sizeof( FCompressedSize ) ); Read( FUncompressedSize, sizeof( FUncompressedSize ) ); Read( FileNameLength, sizeof( FileNameLength ) ); Read( ExtraFieldLength, sizeof( ExtraFieldLength ) ); SetLength( FFileName, FileNameLength ); if FileNameLength > 0 then Read( FFileName[1], FileNameLength ); FExtraField.LoadFromStream( Stream, ExtraFieldLength ); end; if not IsValid then raise EAbZipInvalid.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipLocalFileHeader.SaveToStream( Stream : TStream ); var ExtraFieldLength, FileNameLength: Word; begin with Stream do begin {write the valid signature from the constant} Write( FValidSignature, sizeof( FValidSignature ) ); Write( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Write( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Write( FCompressionMethod, sizeof( FCompressionMethod ) ); Write( FLastModFileTime, sizeof( FLastModFileTime ) ); Write( FLastModFileDate, sizeof( FLastModFileDate ) ); Write( FCRC32, sizeof( FCRC32 ) ); Write( FCompressedSize, sizeof( FCompressedSize ) ); Write( FUncompressedSize, sizeof( FUncompressedSize ) ); FileNameLength := Word( Length( FFileName ) ); Write( FileNameLength, sizeof( FileNameLength ) ); ExtraFieldLength := Length(FExtraField.Buffer); Write( ExtraFieldLength, sizeof( ExtraFieldLength ) ); if FileNameLength > 0 then Write( FFileName[1], FileNameLength ); if ExtraFieldLength > 0 then Write(FExtraField.Buffer[0], ExtraFieldLength); end; end; { -------------------------------------------------------------------------- } { TAbZipDirectoryFileHeader implementation ================================= } constructor TAbZipDirectoryFileHeader.Create; begin inherited Create; FValidSignature := Ab_ZipCentralDirectoryFileHeaderSignature; end; { -------------------------------------------------------------------------- } destructor TAbZipDirectoryFileHeader.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileHeader.LoadFromStream( Stream : TStream ); var ExtraFieldLength, FileCommentLength, FileNameLength : Word; begin with Stream do begin Read( FSignature, sizeof( FSignature ) ); Read( FVersionMadeBy, sizeof( FVersionMadeBy ) ); Read( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Read( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Read( FCompressionMethod, sizeof( FCompressionMethod ) ); Read( FLastModFileTime, sizeof( FLastModFileTime ) ); Read( FLastModFileDate, sizeof( FLastModFileDate ) ); Read( FCRC32, sizeof( FCRC32 ) ); Read( FCompressedSize, sizeof( FCompressedSize ) ); Read( FUncompressedSize, sizeof( FUncompressedSize ) ); Read( FileNameLength, sizeof( FileNameLength ) ); Read( ExtraFieldLength, sizeof( ExtraFieldLength ) ); Read( FileCommentLength, sizeof( FileCommentLength ) ); Read( FDiskNumberStart, sizeof( FDiskNumberStart ) ); Read( FInternalFileAttributes, sizeof( FInternalFileAttributes ) ); Read( FExternalFileAttributes, sizeof( FExternalFileAttributes ) ); Read( FRelativeOffset, sizeof( FRelativeOffset ) ); SetLength( FFileName, FileNameLength ); if FileNameLength > 0 then Read( FFileName[1], FileNameLength ); FExtraField.LoadFromStream( Stream, ExtraFieldLength ); SetLength( FFileComment, FileCommentLength ); if FileCommentLength > 0 then Read( FFileComment[1], FileCommentLength ); end; if not IsValid then raise EAbZipInvalid.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileHeader.SaveToStream( Stream : TStream ); var ExtraFieldLength, FileCommentLength, FileNameLength : Word; begin with Stream do begin {write the valid signature from the constant} Write( FValidSignature, sizeof( FValidSignature ) ); Write( FVersionMadeBy, sizeof( FVersionMadeBy ) ); Write( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Write( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Write( FCompressionMethod, sizeof( FCompressionMethod ) ); Write( FLastModFileTime, sizeof( FLastModFileTime ) ); Write( FLastModFileDate, sizeof( FLastModFileDate ) ); Write( FCRC32, sizeof( FCRC32 ) ); Write( FCompressedSize, sizeof( FCompressedSize ) ); Write( FUncompressedSize, sizeof( FUncompressedSize ) ); FileNameLength := Word( Length( FFileName ) ); Write( FileNameLength, sizeof( FileNameLength ) ); ExtraFieldLength := Length(FExtraField.Buffer); Write( ExtraFieldLength, sizeof( ExtraFieldLength ) ); FileCommentLength := Word( Length( FFileComment ) ); Write( FileCommentLength, sizeof( FileCommentLength ) ); Write( FDiskNumberStart, sizeof( FDiskNumberStart ) ); Write( FInternalFileAttributes, sizeof( FInternalFileAttributes ) ); Write( FExternalFileAttributes, sizeof( FExternalFileAttributes ) ); Write( FRelativeOffset, sizeof( FRelativeOffset ) ); if FileNameLength > 0 then Write( FFileName[1], FileNameLength ); if ExtraFieldLength > 0 then Write( FExtraField.Buffer[0], ExtraFieldLength ); if FileCommentLength > 0 then Write( FFileComment[1], FileCommentLength ); end; end; { -------------------------------------------------------------------------- } { TAbZipDirectoryFileFooter implementation ================================= } function TAbZipDirectoryFileFooter.GetIsZip64: Boolean; begin if DiskNumber >= $FFFF then Exit(True); if StartDiskNumber >= $FFFF then Exit(True); if EntriesOnDisk >= $FFFF then Exit(True); if TotalEntries >= $FFFF then Exit(True); if DirectorySize >= $FFFFFFFF then Exit(True); if DirectoryOffset >= $FFFFFFFF then Exit(True); Result := False; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.LoadFromStream( Stream : TStream ); var Footer: TAbZipEndOfCentralDirectoryRecord; begin Stream.ReadBuffer( Footer, SizeOf(Footer) ); if Footer.Signature <> Ab_ZipEndCentralDirectorySignature then raise EAbZipInvalid.Create; FDiskNumber := Footer.DiskNumber; FStartDiskNumber := Footer.StartDiskNumber; FEntriesOnDisk := Footer.EntriesOnDisk; FTotalEntries := Footer.TotalEntries; FDirectorySize := Footer.DirectorySize; FDirectoryOffset := Footer.DirectoryOffset; SetLength( FZipfileComment, Footer.CommentLength ); if Footer.CommentLength > 0 then Stream.ReadBuffer( FZipfileComment[1], Footer.CommentLength ); end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.LoadZip64FromStream( Stream : TStream ); {load the ZIP64 end of central directory record. LoadFromStream() must be called first to load the standard record} var Footer: TAbZip64EndOfCentralDirectoryRecord; begin Stream.ReadBuffer( Footer, SizeOf(Footer) ); if Footer.Signature <> Ab_Zip64EndCentralDirectorySignature then raise EAbZipInvalid.Create; if FDiskNumber = $FFFF then FDiskNumber := Footer.DiskNumber; if FStartDiskNumber = $FFFF then FStartDiskNumber := Footer.StartDiskNumber; if FEntriesOnDisk = $FFFF then FEntriesOnDisk := Footer.EntriesOnDisk; if FTotalEntries = $FFFF then FTotalEntries := Footer.TotalEntries; if FDirectorySize = $FFFFFFFF then FDirectorySize := Footer.DirectorySize; if FDirectoryOffset = $FFFFFFFF then FDirectoryOffset := Footer.DirectoryOffset; {RecordSize, VersionMadeBy, and VersionNeededToExtract are currently ignored} end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.SaveToStream( Stream : TStream; aZip64TailOffset: Int64 = -1); {write end of central directory record, along with Zip64 records if necessary. aZip64TailOffset is the value to use for the Zip64 locator's directory offset, and is only necessary when writing to an intermediate stream} var Footer: TAbZipEndOfCentralDirectoryRecord; Zip64Footer: TAbZip64EndOfCentralDirectoryRecord; Zip64Locator: TAbZip64EndOfCentralDirectoryLocator; begin if IsZip64 then begin {setup Zip64 end of central directory record} Zip64Footer.Signature := Ab_Zip64EndCentralDirectorySignature; Zip64Footer.RecordSize := SizeOf(Zip64Footer) - SizeOf(Zip64Footer.Signature) - SizeOf(Zip64Footer.RecordSize); Zip64Footer.VersionMadeBy := 45; Zip64Footer.VersionNeededToExtract := 45; Zip64Footer.DiskNumber := DiskNumber; Zip64Footer.StartDiskNumber := StartDiskNumber; Zip64Footer.EntriesOnDisk := EntriesOnDisk; Zip64Footer.TotalEntries := TotalEntries; Zip64Footer.DirectorySize := DirectorySize; Zip64Footer.DirectoryOffset := DirectoryOffset; {setup Zip64 end of central directory locator} Zip64Locator.Signature := Ab_Zip64EndCentralDirectoryLocatorSignature; Zip64Locator.StartDiskNumber := DiskNumber; if aZip64TailOffset = -1 then Zip64Locator.RelativeOffset := Stream.Position else Zip64Locator.RelativeOffset := aZip64TailOffset; Zip64Locator.TotalDisks := DiskNumber + 1; {write Zip64 records} Stream.WriteBuffer(Zip64Footer, SizeOf(Zip64Footer)); Stream.WriteBuffer(Zip64Locator, SizeOf(Zip64Locator)); end; Footer.Signature := Ab_ZipEndCentralDirectorySignature; Footer.DiskNumber := Min(FDiskNumber, $FFFF); Footer.StartDiskNumber := Min(FStartDiskNumber, $FFFF); Footer.EntriesOnDisk := Min(FEntriesOnDisk, $FFFF); Footer.TotalEntries := Min(FTotalEntries, $FFFF); Footer.DirectorySize := Min(FDirectorySize, $FFFFFFFF); Footer.DirectoryOffset := Min(FDirectoryOffset, $FFFFFFFF); Footer.CommentLength := Length( FZipfileComment ); Stream.WriteBuffer( Footer, SizeOf(Footer) ); if FZipfileComment <> '' then Stream.Write( FZipfileComment[1], Length(FZipfileComment) ); end; { -------------------------------------------------------------------------- } { TAbZipItem implementation ================================================ } constructor TAbZipItem.Create; begin inherited Create; FItemInfo := TAbZipDirectoryFileHeader.Create; FLFHExtraField := TAbExtraField.Create; end; { -------------------------------------------------------------------------- } destructor TAbZipItem.Destroy; begin FLFHExtraField.Free; FItemInfo.Free; FItemInfo := nil; inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCompressionMethod : TAbZipCompressionMethod; begin Result := FItemInfo.CompressionMethod; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCompressionRatio : Double; begin Result := FItemInfo.CompressionRatio; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCRC32 : Longint; begin Result := FItemInfo.CRC32; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetDeflationOption : TAbZipDeflationOption; begin Result := FItemInfo.DeflationOption; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetDictionarySize : TAbZipDictionarySize; begin Result := FItemInfo.DictionarySize; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetGeneralPurposeBitFlag : Word; begin Result := FItemInfo.GeneralPurposeBitFlag; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetHostOS: TAbZipHostOS; begin Result := TAbZipHostOS(Hi(VersionMadeBy)); end; { -------------------------------------------------------------------------- } function TAbZipItem.GetExternalFileAttributes : LongWord; begin Result := FItemInfo.ExternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetExtraField : TAbExtraField; begin Result := FItemInfo.ExtraField; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetFileComment : AnsiString; begin Result := FItemInfo.FileComment; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetInternalFileAttributes : Word; begin Result := FItemInfo.InternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetIsDirectory: Boolean; begin Result := ((ExternalFileAttributes and faDirectory) <> 0) or ((FileName <> '') and CharInSet(Filename[Length(FFilename)], ['\','/'])); end; { -------------------------------------------------------------------------- } function TAbZipItem.GetIsEncrypted : Boolean; begin Result := FItemInfo.IsEncrypted; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetLastModFileDate : Word; begin Result := FItemInfo.LastModFileDate; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetLastModFileTime : Word; begin Result := FItemInfo.LastModFileTime; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetNativeFileAttributes : LongInt; begin {$IFDEF MSWINDOWS} if (HostOS = hosUnix) or (ExternalFileAttributes > $1FFFF) then Result := AbUnix2DosFileAttributes(ExternalFileAttributes shr 16) else Result := Byte(ExternalFileAttributes); {$ENDIF} {$IFDEF UNIX} if HostOS in [hosDOS, hosOS2, hosNTFS, hosWinNT, hosVFAT] then Result := AbDOS2UnixFileAttributes(ExternalFileAttributes) else begin Result := ExternalFileAttributes shr 16; if Result = 0 then begin Result:= AB_FPERMISSION_GENERIC; if GetIsDirectory then begin Result := Result or AB_FMODE_DIR or AB_FPERMISSION_OWNEREXECUTE; end; end; end; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbZipItem.GetRawFileName : AnsiString; begin Result := FItemInfo.FileName; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetNativeLastModFileTime: Longint; {$IFDEF UNIX} var DateTime: TDateTime; {$ENDIF} begin // Zip stores MS-DOS date/time. {$IFDEF UNIX} if (FDateTime <> 0) then DateTime := FDateTime else begin DateTime := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); end; Result := DateTimeToUnixFileTime(DateTime); {$ELSE} if (FDateTime <> 0) then Result := DateTimeToDosFileTime(FDateTime) else begin LongRec(Result).Hi := LastModFileDate; LongRec(Result).Lo := LastModFileTime; end; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbZipItem.GetLastModTimeAsDateTime: TDateTime; begin if (FDateTime <> 0) then Result := FDateTime else Result := AbDosFileDateToDateTime(FItemInfo.LastModFileDate, FItemInfo.LastModFileTime); end; { -------------------------------------------------------------------------- } function TAbZipItem.GetShannonFanoTreeCount : Byte; begin Result := FItemInfo.ShannonFanoTreeCount; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetVersionMadeBy : Word; begin Result := FItemInfo.VersionMadeBy; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetVersionNeededToExtract : Word; begin Result := FItemInfo.VersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.LoadFromStream( Stream : TStream ); var Tag, TagSize, FieldSize: Word; FieldStream: TStream; InfoZipField: PInfoZipUnicodePathRec; UnicodeName: UnicodeString; UTF8Name: AnsiString; XceedField: PXceedUnicodePathRec; SystemCode: TAbZipHostOs; begin FItemInfo.LoadFromStream( Stream ); { decode filename (ANSI/OEM/UTF-8) } if FItemInfo.IsUTF8 and (FindInvalidUTF8Codepoint(PAnsiChar(FItemInfo.FileName), Length(FItemInfo.FileName)) < 0) then FFileName := FItemInfo.FileName else if FItemInfo.ExtraField.Get(Ab_InfoZipUnicodePathSubfieldID, Pointer(InfoZipField), FieldSize) and (FieldSize > SizeOf(TInfoZipUnicodePathRec)) and (InfoZipField.Version = 1) and (InfoZipField.NameCRC32 = AbCRC32Of(FItemInfo.FileName)) then begin SetString(UTF8Name, InfoZipField.UnicodeName, FieldSize - SizeOf(TInfoZipUnicodePathRec) + 1); FFileName := UTF8Name; end else if FItemInfo.ExtraField.Get(Ab_XceedUnicodePathSubfieldID, Pointer(XceedField), FieldSize) and (FieldSize > SizeOf(TXceedUnicodePathRec)) and (XceedField.Signature = Ab_XceedUnicodePathSignature) and (XceedField.Length * SizeOf(WideChar) = FieldSize - SizeOf(TXceedUnicodePathRec) + SizeOf(WideChar)) then begin SetString(UnicodeName, XceedField.UnicodeName, XceedField.Length); FFileName := Utf16ToUtf8(UnicodeName); end else begin SystemCode := HostOS; if (SystemCode = hosDOS) then FFileName := CeOemToUtf8(FItemInfo.FileName) else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then FFileName := CeAnsiToUtf8(FItemInfo.FileName) else FFileName := CeSysToUtf8(FItemInfo.FileName); end; { read ZIP64 extended header } FUncompressedSize := FItemInfo.UncompressedSize; FCompressedSize := FItemInfo.CompressedSize; FRelativeOffset := FItemInfo.RelativeOffset; FDiskNumberStart := FItemInfo.DiskNumberStart; if FItemInfo.ExtraField.GetStream(Ab_Zip64SubfieldID, FieldStream) then try if FItemInfo.UncompressedSize = $FFFFFFFF then FieldStream.ReadBuffer(FUncompressedSize, SizeOf(Int64)); if FItemInfo.CompressedSize = $FFFFFFFF then FieldStream.ReadBuffer(FCompressedSize, SizeOf(Int64)); if FItemInfo.RelativeOffset = $FFFFFFFF then FieldStream.ReadBuffer(FRelativeOffset, SizeOf(Int64)); if FItemInfo.DiskNumberStart = $FFFF then FieldStream.ReadBuffer(FDiskNumberStart, SizeOf(LongWord)); finally FieldStream.Free; end; LastModFileTime := FItemInfo.LastModFileTime; LastModFileDate := FItemInfo.LastModFileDate; // NTFS Extra Field if FItemInfo.ExtraField.GetStream(Ab_NTFSSubfieldID, FieldStream) then try FieldSize:= FieldStream.Size; if (FieldSize >= 32) then begin // Skip Reserved Dec(FieldSize, 4); FieldStream.Seek(4, soBeginning); while (FieldSize > 4) do begin Dec(FieldSize, 4); Tag:= FieldStream.ReadWord; TagSize:= FieldStream.ReadWord; TagSize:= Min(TagSize, FieldSize); if (Tag = $0001) and (TagSize >= 24) then begin FDateTime:= WinFileTimeToDateTime(TWinFileTime(FieldStream.ReadQWord)); Break; end; Dec(FieldSize, TagSize); end; end; finally FieldStream.Free; end // Extended Timestamp Extra Field else if FItemInfo.ExtraField.GetStream(Ab_InfoZipTimestampSubfieldID, FieldStream) then try FieldSize:= FieldStream.Size; if (FieldSize >= 5) then begin Tag:= FieldStream.ReadByte; if (Tag and $01 <> 0) then FDateTime:= UnixFileTimeToDateTime(TUnixFileTime(FieldStream.ReadDWord)); end; finally FieldStream.Free; end; FDiskFileName := FileName; AbUnfixName( FDiskFileName ); Action := aaNone; Tagged := False; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveLFHToStream( Stream : TStream ); var LFH : TAbZipLocalFileHeader; Zip64Field: TZip64LocalHeaderRec; begin LFH := TAbZipLocalFileHeader.Create; try LFH.VersionNeededToExtract := VersionNeededToExtract; LFH.GeneralPurposeBitFlag := GeneralPurposeBitFlag; LFH.CompressionMethod := CompressionMethod; LFH.LastModFileTime := LastModFileTime; LFH.LastModFileDate := LastModFileDate; LFH.CRC32 := CRC32; LFH.FileName := RawFileName; LFH.ExtraField.Assign(LFHExtraField); LFH.ExtraField.CloneFrom(ExtraField, Ab_InfoZipUnicodePathSubfieldID); LFH.ExtraField.CloneFrom(ExtraField, Ab_XceedUnicodePathSubfieldID); { Write ZIP64 local header when file size > 3 GB to speed up archive creation } if (UncompressedSize > $C0000000) then begin { setup sizes; unlike the central directory header, the ZIP64 local header needs to store both compressed and uncompressed sizes if either needs it } if (CompressedSize >= $FFFFFFFF) or (UncompressedSize >= $FFFFFFFF) then begin LFH.UncompressedSize := $FFFFFFFF; LFH.CompressedSize := $FFFFFFFF; end else begin LFH.UncompressedSize := UncompressedSize; LFH.CompressedSize := CompressedSize; end; Zip64Field.UncompressedSize := UncompressedSize; Zip64Field.CompressedSize := CompressedSize; LFH.ExtraField.Put(Ab_Zip64SubfieldID, Zip64Field, SizeOf(Zip64Field)); end else begin LFH.UncompressedSize := UncompressedSize; LFH.CompressedSize := CompressedSize; LFH.ExtraField.Delete(Ab_Zip64SubfieldID); end; LFH.SaveToStream( Stream ); { Synchronize central directory header with local file header } FItemInfo.CompressedSize := LFH.CompressedSize; FItemInfo.UncompressedSize := LFH.UncompressedSize; finally LFH.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveCDHToStream( Stream : TStream ); {-Save a ZipCentralDirectorHeader entry to Stream} begin FItemInfo.SaveToStream( Stream ); end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveDDToStream( Stream : TStream ); var DD : TAbZipDataDescriptor; begin DD := TAbZipDataDescriptor.Create; try DD.CRC32 := CRC32; DD.CompressedSize := CompressedSize; DD.UncompressedSize := UncompressedSize; DD.SaveToStream( Stream ); finally DD.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCompressedSize( const Value : Int64 ); begin FCompressedSize := Value; FItemInfo.CompressedSize := Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCompressionMethod( Value : TAbZipCompressionMethod ); begin FItemInfo.CompressionMethod := Value; UpdateVersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCRC32( const Value : Longint ); begin FItemInfo.CRC32 := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetDiskNumberStart( Value : LongWord ); begin FDiskNumberStart := Value; FItemInfo.DiskNumberStart := Min(Value, $FFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetExternalFileAttributes( Value : LongWord ); begin FItemInfo.ExternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetFileComment(const Value : AnsiString ); begin FItemInfo.FileComment := Value; end; { -------------------------------------------------------------------------- } {$IFDEF KYLIX}{$IFOPT O+}{$DEFINE OPTIMIZATIONS_ON}{$O-}{$ENDIF}{$ENDIF} procedure TAbZipItem.SetFileName(const Value : string ); var {$IFDEF MSWINDOWS} AnsiName : AnsiString; UnicName : UnicodeString; {$ENDIF} UTF8Name : AnsiString; FieldSize : Word; I : Integer; InfoZipField : PInfoZipUnicodePathRec; UseExtraField: Boolean; begin inherited SetFileName(Value); {$IFDEF MSWINDOWS} FItemInfo.IsUTF8 := False; HostOS := hosDOS; UnicName := CeUtf8ToUtf16(Value); if CeTryEncode(UnicName, CP_OEMCP, False, AnsiName) then {no-op} else if (GetACP <> GetOEMCP) and CeTryEncode(UnicName, CP_ACP, False, AnsiName) then HostOS := hosWinNT else FItemInfo.IsUTF8 := True; if FItemInfo.IsUTF8 then FItemInfo.FileName := Value else FItemInfo.FileName := AnsiName; {$ENDIF} {$IFDEF UNIX} HostOS := hosUnix; FItemInfo.FileName := Value; FItemInfo.IsUTF8 := SystemEncodingUtf8; {$ENDIF} UseExtraField := False; if not FItemInfo.IsUTF8 then for i := 1 to Length(Value) do begin if Ord(Value[i]) > 127 then begin UseExtraField := True; Break; end; end; if UseExtraField then begin UTF8Name := Value; FieldSize := SizeOf(TInfoZipUnicodePathRec) + Length(UTF8Name) - 1; GetMem(InfoZipField, FieldSize); try InfoZipField.Version := 1; InfoZipField.NameCRC32 := AbCRC32Of(FItemInfo.FileName); Move(UTF8Name[1], InfoZipField.UnicodeName, Length(UTF8Name)); FItemInfo.ExtraField.Put(Ab_InfoZipUnicodePathSubfieldID, InfoZipField^, FieldSize); finally FreeMem(InfoZipField); end; end else FItemInfo.ExtraField.Delete(Ab_InfoZipUnicodePathSubfieldID); FItemInfo.ExtraField.Delete(Ab_XceedUnicodePathSubfieldID); end; {$IFDEF OPTIMIZATIONS_ON}{$O+}{$ENDIF} { -------------------------------------------------------------------------- } procedure TAbZipItem.SetGeneralPurposeBitFlag( Value : Word ); begin FItemInfo.GeneralPurposeBitFlag := Value; UpdateVersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetHostOS( Value : TAbZipHostOS ); begin FItemInfo.VersionMadeBy := Low(FItemInfo.VersionMadeBy) or Word(Ord(Value)) shl 8; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetInternalFileAttributes( Value : Word ); begin FItemInfo.InternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetLastModFileDate( const Value : Word ); begin FItemInfo.LastModFileDate := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetLastModFileTime( const Value : Word ); begin FItemInfo.LastModFileTime := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetRelativeOffset( Value : Int64 ); begin FRelativeOffset := Value; FItemInfo.RelativeOffset := Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetUncompressedSize( const Value : Int64 ); begin FUncompressedSize := Value; FItemInfo.UncompressedSize:= Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; procedure TAbZipItem.SetLastModTimeAsDateTime(const Value: TDateTime); var DataSize: Word; ANtfsTime: PNtfsTimeField; AInfoZipTime: PInfoZipTimeField; begin inherited SetLastModTimeAsDateTime(Value); // Update time extra fields if FItemInfo.ExtraField.Get(Ab_NTFSSubfieldID, ANtfsTime, DataSize) then begin if (DataSize = SizeOf(TNtfsTimeField)) then begin if ANtfsTime^.Tag = $0001 then begin ANtfsTime^.Mtime := DateTimeToWinFileTime(Value); end; end; end else if FItemInfo.ExtraField.Get(Ab_InfoZipTimestampSubfieldID, AInfoZipTime, DataSize) then begin if (DataSize = SizeOf(TInfoZipTimeField)) then begin if (AInfoZipTime^.Tag and $01 <> 0) then begin AInfoZipTime^.Mtime := UInt32(DateTimeToUnixFileTime(Value)); end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetVersionMadeBy( Value : Word ); begin FItemInfo.VersionMadeBy := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetVersionNeededToExtract( Value : Word ); begin FItemInfo.VersionNeededToExtract := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.UpdateVersionNeededToExtract; {calculates VersionNeededToExtract and VersionMadeBy based on used features} begin {According to AppNote.txt zipx compression methods should set the Version Needed To Extract to the AppNote version the method was introduced in (e.g., 6.3 for PPMd). Most utilities just set it to 2.0 and rely on the extractor detecting unsupported compression methods, since it's easier to add support for decompression methods without implementing the entire newer spec. } if ExtraField.Has(Ab_Zip64SubfieldID) then VersionNeededToExtract := 45 else if IsDirectory or IsEncrypted or not (CompressionMethod in [cmStored..cmImploded]) then VersionNeededToExtract := 20 else VersionNeededToExtract := 10; VersionMadeBy := (VersionMadeBy and $FF00) + Max(20, VersionNeededToExtract); end; { -------------------------------------------------------------------------- } procedure TAbZipItem.UpdateZip64ExtraHeader; var Changed: Boolean; FieldStream: TMemoryStream; begin FieldStream := TMemoryStream.Create; try if UncompressedSize >= $FFFFFFFF then FieldStream.WriteBuffer(FUncompressedSize, SizeOf(Int64)); if CompressedSize >= $FFFFFFFF then FieldStream.WriteBuffer(FCompressedSize, SizeOf(Int64)); if RelativeOffset >= $FFFFFFFF then FieldStream.WriteBuffer(FRelativeOffset, SizeOf(Int64)); if DiskNumberStart >= $FFFF then FieldStream.WriteBuffer(FDiskNumberStart, SizeOf(LongWord)); Changed := (FieldStream.Size > 0) <> ExtraField.Has(Ab_Zip64SubfieldID); if FieldStream.Size > 0 then ExtraField.Put(Ab_Zip64SubfieldID, FieldStream.Memory^, FieldStream.Size) else ExtraField.Delete(Ab_Zip64SubfieldID); if Changed then UpdateVersionNeededToExtract; finally FieldStream.Free; end; end; { -------------------------------------------------------------------------- } { TAbZipArchive implementation ============================================= } constructor TAbZipArchive.CreateFromStream( aStream : TStream; const ArchiveName : string ); begin inherited CreateFromStream( aStream, ArchiveName ); FCompressionMethodToUse := smBestMethod; FInfo := TAbZipDirectoryFileFooter.Create; StoreOptions := StoreOptions + [soStripDrive]; FDeflationOption := doNormal; FPasswordRetries := AbDefPasswordRetries; FTempDir := ''; SpanningThreshold := AbDefZipSpanningThreshold; FSuspiciousLinks := TStringList.Create; end; { -------------------------------------------------------------------------- } destructor TAbZipArchive.Destroy; begin FInfo.Free; FInfo := nil; inherited Destroy; FSuspiciousLinks.Free; end; { -------------------------------------------------------------------------- } function TAbZipArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var FullSourceFileName, FullArchiveFileName: string; begin Result := TAbZipItem.Create; with TAbZipItem( Result ) do begin CompressionMethod := cmDeflated; GeneralPurposeBitFlag := 0; CompressedSize := 0; CRC32 := 0; RelativeOffset := 0; MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); if mbDirectoryExists(FullSourceFileName) then begin FullSourceFileName := IncludeTrailingPathDelimiter(FullSourceFileName); end; Result.FileName := FullArchiveFileName; Result.DiskFileName := FullSourceFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoExtractHelper(Index : Integer; const NewName : string); begin if Assigned(FExtractHelper) then FExtractHelper(Self, ItemList[Index], NewName) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoExtractToStreamHelper(Index : Integer; aStream : TStream); begin if Assigned(FExtractToStreamHelper) then FExtractToStreamHelper(Self, ItemList[Index], aStream) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoTestHelper(Index : Integer); begin if Assigned(FTestHelper) then FTestHelper(Self, ItemList[Index]) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoInsertHelper(Index : Integer; OutStream : TStream); begin if Assigned(FInsertHelper) then FInsertHelper(Self, ItemList[Index], OutStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoInsertFromStreamHelper(Index : Integer; OutStream : TStream); begin if Assigned(FInsertFromStreamHelper) then FInsertFromStreamHelper(Self, ItemList[Index], OutStream, InStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestDisk(const AMessage: string; var Abort : Boolean); begin {$IFDEF MSWINDOWS} Abort := Windows.MessageBox( 0, PChar(AMessage), PChar(AbDiskRequestS), MB_TASKMODAL or MB_OKCANCEL ) = IDCANCEL; {$ENDIF} {$IFDEF UnixDialogs} {$IFDEF KYLIX} Abort := QDialogs.MessageDlg(AbDiskRequestS, AMessage, mtWarning, mbOKCancel, 0) = mrCancel; {$ENDIF} {$IFDEF LCL} Abort := Dialogs.MessageDlg(AbDiskRequestS, AMessage, mtWarning, mbOKCancel, 0) = mrCancel; {$ENDIF} {$ELSE} Abort := True; {$ENDIF} end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestLastDisk( var Abort : Boolean ); begin Abort := False; if Assigned( FOnRequestLastDisk ) then FOnRequestLastDisk( Self, Abort ) else DoRequestDisk( AbLastDiskRequestS, Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestNthDisk( Sender: TObject; DiskNumber : Byte; var Abort : Boolean ); begin Abort := False; if Assigned( FOnRequestNthDisk ) then FOnRequestNthDisk( Self, DiskNumber, Abort ) else DoRequestDisk( Format(AbDiskNumRequestS, [DiskNumber]), Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestBlankDisk(Sender: TObject; var Abort : Boolean ); begin Abort := False; FSpanned := True; if Assigned( FOnRequestBlankDisk ) then FOnRequestBlankDisk( Self, Abort ) else DoRequestDisk( AbBlankDiskS, Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestImage(Sender: TObject; ImageNumber : Integer; var ImageName : string ; var Abort : Boolean); begin if Assigned(FOnRequestImage) then FOnRequestImage(Self, ImageNumber, ImageName, Abort); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.ExtractItemAt(Index : Integer; const UseName : string); begin DoExtractHelper(Index, UseName); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.ExtractItemToStreamAt(Index : Integer; aStream : TStream); begin DoExtractToStreamHelper(Index, aStream); end; { -------------------------------------------------------------------------- } function TAbZipArchive.FixName(const Value : string ) : string; {-changes backslashes to forward slashes} var i : SmallInt; lValue : string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := AbAddBackSlash(BaseDirectory) + lValue; end; lValue := AbGetShortFileSpec( lValue ); end; {$ENDIF MSWINDOWS} {Zip files Always strip the drive path} StoreOptions := StoreOptions + [soStripDrive]; {strip drive stuff} if soStripDrive in StoreOptions then AbStripDrive( lValue ); {check for a leading backslash} if (Length(lValue) > 1) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then begin lValue := ExtractFileName( lValue ); end; if soRemoveDots in StoreOptions then AbStripDots( lValue ); for i := 1 to Length( lValue ) do if lValue[i] = AbDosPathDelim then lValue[i] := AbUnixPathDelim; Result := lValue; end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetItem( Index : Integer ) : TAbZipItem; begin Result := TAbZipItem(FItemList.Items[Index]); end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetSupportsEmptyFolders: Boolean; begin Result := True; end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetZipfileComment : AnsiString; begin Result := FInfo.ZipfileComment; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.LoadArchive; var Abort : Boolean; TailPosition : int64; Item : TAbZipItem; Progress : Byte; FileSignature : Longint; Zip64Locator : TAbZip64EndOfCentralDirectoryLocator; begin Abort := False; if FStream.Size = 0 then Exit; {Get signature info} FStream.Position := 0; FStream.Read( FileSignature, sizeof( FileSignature ) ); {Get Executable Type; allow non-native stubs} IsExecutable := (LongRec(FileSignature).Lo = Ab_WindowsExeSignature) or (FileSignature = Ab_LinuxExeSignature); { try to locate central directory tail } TailPosition := FindCentralDirectoryTail( FStream ); if (TailPosition = -1) and (FileSignature = Ab_ZipSpannedSetSignature) and FOwnsStream and AbDriveIsRemovable(ArchiveName) then begin while TailPosition = -1 do begin FreeAndNil(FStream); DoRequestLastDisk(Abort); if Abort then begin FStatus := asInvalid; //TODO: Status updates are extremely inconsistent raise EAbUserAbort.Create; end; FStream := TFileStreamEx.Create( ArchiveName, Mode ); TailPosition := FindCentralDirectoryTail( FStream ); end; end; if TailPosition = -1 then begin FStatus := asInvalid; raise EAbZipInvalid.Create; end; { load the ZipDirectoryFileFooter } FInfo.LoadFromStream(FStream); { find Zip64 end of central directory locator; it will usually occur immediately before the standard end of central directory record. the actual Zip64 end of central directory may be on another disk } if FInfo.IsZip64 then begin Dec(TailPosition, SizeOf(Zip64Locator)); repeat if TailPosition < 0 then raise EAbZipInvalid.Create; FStream.Position := TailPosition; FStream.ReadBuffer(Zip64Locator, SizeOf(Zip64Locator)); Dec(TailPosition); until Zip64Locator.Signature = Ab_Zip64EndCentralDirectoryLocatorSignature; { update current image number } FInfo.DiskNumber := Zip64Locator.TotalDisks - 1; end; { setup spanning support and move to the start of the central directory } FSpanned := FInfo.DiskNumber > 0; if FSpanned then begin if FOwnsStream then begin FStream := TAbSpanReadStream.Create( ArchiveName, FInfo.DiskNumber, FStream ); TAbSpanReadStream(FStream).OnRequestImage := DoRequestImage; TAbSpanReadStream(FStream).OnRequestNthDisk := DoRequestNthDisk; if FInfo.IsZip64 then begin TAbSpanReadStream(FStream).SeekImage(Zip64Locator.StartDiskNumber, Zip64Locator.RelativeOffset); FInfo.LoadZip64FromStream(FStream); end; TAbSpanReadStream(FStream).SeekImage(FInfo.StartDiskNumber, FInfo.DirectoryOffset); end else raise EAbZipBadSpanStream.Create; end else begin if FInfo.IsZip64 then begin FStream.Position := Zip64Locator.RelativeOffset; FInfo.LoadZip64FromStream(FStream); end; FStream.Position := FInfo.DirectoryOffset; end; { build Items list from central directory records } FStubSize := High(LongWord); while Count < FInfo.TotalEntries do begin { create new Item } Item := TAbZipItem.Create; try Item.LoadFromStream(FStream); Item.Action := aaNone; FItemList.Add(Item); except Item.Free; raise; end; if IsExecutable and (Item.DiskNumberStart = 0) and (Item.RelativeOffset < FStubSize) then FStubSize := Item.RelativeOffset; Progress := (Count * 100) div FInfo.TotalEntries; DoArchiveProgress( Progress, Abort ); if Abort then begin FStatus := asInvalid; raise EAbUserAbort.Create; end; end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.PutItem( Index : Integer; Value : TAbZipItem ); begin FItemList.Items[Index] := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.SaveArchive; {builds a new archive and copies it to FStream} var APos : Int64; Abort : Boolean; MemStream : TMemoryStream; HasDataDescriptor : Boolean; i : LongWord; LFH : TAbZipLocalFileHeader; NewStream : TStream; WorkingStream : TAbVirtualMemoryStream; CurrItem : TAbZipItem; Progress : Byte; ATempName : String; CreateArchive : Boolean; begin if Count = 0 then Exit; {shouldn't be trying to overwrite an existing spanned archive} if Spanned then begin for i := 0 to Pred(Count) do if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; FIsDirty := False; raise EAbZipSpanOverwrite.Create; end; {init new zip archive stream can span only new archives, if SpanningThreshold > 0 or removable drive spanning writes to original location, rather than writing to a temp stream first} if FOwnsStream and (FStream.Size = 0) and not IsExecutable and ((SpanningThreshold > 0) or AbDriveIsRemovable(ArchiveName)) then begin NewStream := TAbSpanWriteStream.Create(ArchiveName, FStream, SpanningThreshold); FStream := nil; TAbSpanWriteStream(NewStream).OnRequestBlankDisk := DoRequestBlankDisk; TAbSpanWriteStream(NewStream).OnRequestImage := DoRequestImage; end else begin CreateArchive:= FOwnsStream and (FStream.Size = 0) and (FStream is TFileStreamEx); if CreateArchive then NewStream := FStream else begin ATempName := GetTempName(FArchiveName); NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite); end; end; try {NewStream} {copy the executable stub over to the output} if IsExecutable then NewStream.CopyFrom( FStream, StubSize ) {assume spanned for spanning stream} else if NewStream is TAbSpanWriteStream then NewStream.Write(Ab_ZipSpannedSetSignature, SizeOf(Ab_ZipSpannedSetSignature)); {build new zip archive from existing archive} for i := 0 to pred( Count ) do begin CurrItem := (ItemList[i] as TAbZipItem); FCurrentItem := ItemList[i]; case CurrItem.Action of aaNone, aaMove: begin {just copy the file to new stream} Assert(not (NewStream is TAbSpanWriteStream)); FStream.Position := CurrItem.RelativeOffset; CurrItem.DiskNumberStart := 0; CurrItem.RelativeOffset := NewStream.Position; {toss old local file header} LFH := TAbZipLocalFileHeader.Create; try {LFH} LFH.LoadFromStream( FStream ); if CurrItem.LFHExtraField.Count = 0 then CurrItem.LFHExtraField.Assign(LFH.ExtraField); finally {LFH} LFH.Free; end; {LFH} {write out new local file header and append compressed data} CurrItem.SaveLFHToStream( NewStream ); if (CurrItem.CompressedSize > 0) then NewStream.CopyFrom(FStream, CurrItem.CompressedSize); end; aaDelete: begin {doing nothing omits file from new stream} end; aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin {compress the file and add it to new stream} try if NewStream is TAbSpanWriteStream then begin WorkingStream := TAbVirtualMemoryStream.Create; try {WorkingStream} WorkingStream.SwapFileDirectory := FTempDir; {compress the file} if (CurrItem.Action = aaStreamAdd) then DoInsertFromStreamHelper(i, WorkingStream) else begin DoInsertHelper(i, WorkingStream); end; {write local header} MemStream := TMemoryStream.Create; try CurrItem.SaveLFHToStream(MemStream); TAbSpanWriteStream(NewStream).WriteUnspanned( MemStream.Memory^, MemStream.Size); {calculate positions after the write in case it triggered a new span} CurrItem.DiskNumberStart := TAbSpanWriteStream(NewStream).CurrentImage; CurrItem.RelativeOffset := NewStream.Position - MemStream.Size; finally MemStream.Free; end; {copy compressed data} NewStream.CopyFrom(WorkingStream, 0); finally WorkingStream.Free; end; end else begin {write local header} CurrItem.DiskNumberStart := 0; CurrItem.RelativeOffset := NewStream.Position; CurrItem.UncompressedSize := mbFileSize(CurrItem.DiskFileName); CurrItem.SaveLFHToStream(NewStream); {compress the file} if (CurrItem.Action = aaStreamAdd) then DoInsertFromStreamHelper(i, NewStream) else begin DoInsertHelper(i, NewStream); end; {update local header} APos:= NewStream.Position; NewStream.Seek(CurrItem.RelativeOffset, soBeginning); CurrItem.SaveLFHToStream(NewStream); NewStream.Seek(APos, soBeginning); end; if CurrItem.IsEncrypted then CurrItem.SaveDDToStream(NewStream); except on E : Exception do begin { Exception was caused by a User Abort and Item Failure should not be called Question: Do we want an New Event when this occurs or should the exception just be re-raised [783614] } if (E is EAbUserAbort) then raise; CurrItem.Action := aaDelete; DoProcessItemFailure(CurrItem, ptAdd, ecFileOpenError, 0); end; end; end; end; { case } { TODO: Check HasDataDescriptior behavior; seems like it's getting written twice for encrypted files } {Now add the data descriptor record to new stream} HasDataDescriptor := (CurrItem.CompressionMethod = cmDeflated) and ((CurrItem.GeneralPurposeBitFlag and AbHasDataDescriptorFlag) <> 0); if (CurrItem.Action <> aaDelete) and HasDataDescriptor then CurrItem.SaveDDToStream(NewStream); Progress := AbPercentage(9 * succ( i ), 10 * Count); DoArchiveSaveProgress(Progress, Abort); DoArchiveProgress(Progress, Abort); if Abort then raise EAbUserAbort.Create; end; {write the central directory} if NewStream is TAbSpanWriteStream then FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage else FInfo.DiskNumber := 0; FInfo.StartDiskNumber := FInfo.DiskNumber; FInfo.DirectoryOffset := NewStream.Position; FInfo.DirectorySize := 0; FInfo.EntriesOnDisk := 0; FInfo.TotalEntries := 0; MemStream := TMemoryStream.Create; try {write central directory entries} for i := 0 to Count - 1 do begin if not (FItemList[i].Action in [aaDelete, aaFailed]) then begin (FItemList[i] as TAbZipItem).SaveCDHToStream(MemStream); if NewStream is TAbSpanWriteStream then begin TAbSpanWriteStream(NewStream).WriteUnspanned(MemStream.Memory^, MemStream.Size); {update tail info on span change} if FInfo.DiskNumber <> TAbSpanWriteStream(NewStream).CurrentImage then begin FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage; FInfo.EntriesOnDisk := 0; if FInfo.TotalEntries = 0 then begin FInfo.StartDiskNumber := FInfo.DiskNumber; FInfo.DirectoryOffset := NewStream.Position - MemStream.Size; end; end; end else NewStream.WriteBuffer(MemStream.Memory^, MemStream.Size); FInfo.DirectorySize := FInfo.DirectorySize + MemStream.Size; FInfo.EntriesOnDisk := FInfo.EntriesOnDisk + 1; FInfo.TotalEntries := FInfo.TotalEntries + 1; MemStream.Clear; end; end; {append the central directory footer} FInfo.SaveToStream(MemStream, NewStream.Position); if NewStream is TAbSpanWriteStream then begin {update the footer if writing it would trigger a new span} if not TAbSpanWriteStream(NewStream).WriteUnspanned(MemStream.Memory^, MemStream.Size) then begin FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage; FInfo.EntriesOnDisk := 0; FInfo.SaveToStream(NewStream); end; end else NewStream.WriteBuffer(MemStream.Memory^, MemStream.Size); finally {MemStream} MemStream.Free; end; {MemStream} FSpanned := (FInfo.DiskNumber > 0); {update output stream} if NewStream is TAbSpanWriteStream then begin {zip has already been written to target location} FStream := TAbSpanWriteStream(NewStream).ReleaseStream; if Spanned then begin {switch to read stream} FStream := TAbSpanReadStream.Create(ArchiveName, FInfo.DiskNumber, FStream); TAbSpanReadStream(FStream).OnRequestImage := DoRequestImage; TAbSpanReadStream(FStream).OnRequestNthDisk := DoRequestNthDisk; end else begin {replace spanned signature} FStream.Position := 0; FStream.Write(Ab_ZipPossiblySpannedSignature, SizeOf(Ab_ZipPossiblySpannedSignature)); end; end else begin {copy new stream to FStream (non-spanned only)} NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else begin if FOwnsStream then begin {need new stream to write} if CreateArchive then NewStream := nil else begin FreeAndNil(FStream); FreeAndNil(NewStream); if (mbDeleteFile(FArchiveName) and mbRenameFile(ATempName, FArchiveName)) then FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite) else RaiseLastOSError; end; end else begin FStream.Size := 0; FStream.Position := 0; FStream.CopyFrom(NewStream, 0) end; end; end; {update Items list} for i := pred( Count ) downto 0 do begin if FItemList[i].Action = aaDelete then FItemList.Delete( i ) else if FItemList[i].Action <> aaFailed then FItemList[i].Action := aaNone; end; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream} if (FStream <> NewStream) then NewStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.SetZipfileComment(const Value : AnsiString ); begin FInfo.FZipfileComment := Value; FIsDirty := True; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.TestItemAt(Index : Integer); begin DoTestHelper(Index); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzipprc.pas0000644000175000001440000002304415104114162022731 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipPrc.pas *} {*********************************************************} {* ABBREVIA: TABZipHelper class *} {*********************************************************} unit AbZipPrc; {$I AbDefine.inc} interface uses Classes, AbZipTyp; procedure AbZip( Sender : TAbZipArchive; Item : TAbZipItem; OutStream : TStream ); procedure AbZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); implementation uses SysUtils, AbArcTyp, AbExcept, AbUtils, AbDfCryS, AbVMStrm, AbDfBase, AbZlibPrc, AbZipxPrc, DCcrc32, DCClassesUtf8; { ========================================================================== } procedure DoDeflate(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); const DEFLATE_NORMAL_MASK = $00; DEFLATE_MAXIMUM_MASK = $02; DEFLATE_FAST_MASK = $04; DEFLATE_SUPERFAST_MASK = $06; var Hlpr : TAbDeflateHelper; begin Item.CompressionMethod := cmDeflated; Hlpr := TAbDeflateHelper.Create; {anything dealing with store options, etc. should already be done.} try {Hlpr} Hlpr.StreamSize := InStream.Size; { set deflation level desired } Hlpr.PKZipOption := '0'; case Archive.DeflationOption of doNormal : begin Hlpr.PKZipOption := 'n'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_NORMAL_MASK; end; doMaximum : begin Hlpr.PKZipOption := 'x'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_MAXIMUM_MASK; end; doFast : begin Hlpr.PKZipOption := 'f'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_FAST_MASK; end; doSuperFast : begin Hlpr.PKZipOption := 's'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_SUPERFAST_MASK; end; end; { attach progress notification method } Hlpr.OnProgressStep := Archive.DoInflateProgress; { provide encryption check value } Item.CRC32 := Deflate(InStream, OutStream, Hlpr); finally {Hlpr} Hlpr.Free; end; {Hlpr} end; { ========================================================================== } procedure DoStore(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var CRC32 : UInt32; Percent : LongInt; LastPercent : LongInt; InSize : Int64; DataRead : Int64; Total : Int64; Abort : Boolean; Buffer : array [0..16383] of byte; begin { setup } Item.CompressionMethod := cmStored; Abort := False; CRC32 := 0; Total := 0; Percent := 0; LastPercent := 0; InSize := InStream.Size; { get first bufferful } DataRead := InStream.Read(Buffer, SizeOf(Buffer)); { while more data has been read and we're not told to bail } while (DataRead <> 0) and not Abort do begin {report the progress} if Assigned(Archive.OnProgress) then begin Total := Total + DataRead; Percent := Round((100.0 * Total) / InSize); if (LastPercent <> Percent) then Archive.OnProgress(Percent, Abort); LastPercent := Percent; end; { update CRC} CRC32 := crc32_16bytes(Buffer, DataRead, CRC32); { write data (encrypting if needed) } OutStream.WriteBuffer(Buffer, DataRead); { get next bufferful } DataRead := InStream.Read(Buffer, SizeOf(Buffer)); end; { finish CRC calculation } Item.CRC32 := LongInt(CRC32); { show final progress increment } if (Percent < 100) and Assigned(Archive.OnProgress) then Archive.OnProgress(100, Abort); { User wants to bail } if Abort then begin raise EAbUserAbort.Create; end; end; { ========================================================================== } procedure DoZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var ZipArchive : TAbZipArchive; InStartPos : Int64; OutStartPos : Int64; TempOut : TAbVirtualMemoryStream; DestStrm : TStream; begin ZipArchive := TAbZipArchive(Sender); { save starting point } OutStartPos := OutStream.Position; { configure Item } Item.UncompressedSize := InStream.Size; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag and AbLanguageEncodingFlag; if ZipArchive.Password <> '' then { encrypt the stream } DestStrm := TAbDfEncryptStream.Create(OutStream, LongInt(Item.LastModFileTime shl $10), ZipArchive.Password) else DestStrm := OutStream; try if InStream.Size > 0 then begin if SameText(ExtractFileExt(Sender.ArchiveName), '.zipx') then begin case ZipArchive.CompressionMethod of IntPtr(cmXz): DoCompressXz(ZipArchive, Item, DestStrm, InStream); IntPtr(cmZstd): DoCompressZstd(ZipArchive, Item, DestStrm, InStream); else raise Exception.Create(EmptyStr); end; end else { determine how to store Item based on specified CompressionMethodToUse } case ZipArchive.CompressionMethodToUse of smDeflated : begin { Item is to be deflated regarless } { deflate item } DoDeflate(ZipArchive, Item, DestStrm, InStream); end; smStored : begin { Item is to be stored regardless } { store item } DoStore(ZipArchive, Item, DestStrm, InStream); end; smBestMethod : begin { Item is to be archived using method producing best compression } TempOut := TAbVirtualMemoryStream.Create; try TempOut.SwapFileDirectory := Sender.TempDirectory; { save starting points } InStartPos := InStream.Position; { try deflating item } DoDeflate(ZipArchive, Item, TempOut, InStream); { if deflated size > input size then got negative compression } { so storing the item is more efficient } if TempOut.Size > InStream.Size then begin { store item instead } { reset streams to original positions } InStream.Position := InStartPos; TempOut.Free; TempOut := TAbVirtualMemoryStream.Create; TempOut.SwapFileDirectory := Sender.TempDirectory; { store item } DoStore(ZipArchive, Item, TempOut, InStream); end {if}; TempOut.Seek(0, soBeginning); DestStrm.CopyFrom(TempOut, TempOut.Size); finally TempOut.Free; end; end; end; { case } end else begin { InStream is zero length} Item.CRC32 := 0; { ignore any storage indicator and treat as stored } DoStore(ZipArchive, Item, DestStrm, InStream); end; finally if DestStrm <> OutStream then DestStrm.Free; end; { update item } Item.CompressedSize := OutStream.Position - OutStartPos; Item.InternalFileAttributes := 0; { don't care } if (ZipArchive.Password <> '') then Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or AbFileIsEncryptedFlag or AbHasDataDescriptorFlag; end; { -------------------------------------------------------------------------- } procedure AbZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var FileTimeStamp : LongInt; begin // Set item properties for non-file streams Item.ExternalFileAttributes := 0; FileTimeStamp := DateTimeToFileDate(SysUtils.Now); Item.LastModFileTime := LongRec(FileTimeStamp).Lo; Item.LastModFileDate := LongRec(FileTimeStamp).Hi; DoZipFromStream(Sender, Item, OutStream, InStream); end; { -------------------------------------------------------------------------- } procedure AbZip( Sender : TAbZipArchive; Item : TAbZipItem; OutStream : TStream ); var UncompressedStream : TStream; AttrEx : TAbAttrExRec; begin if not AbFileGetAttrEx(Item.DiskFileName, AttrEx) then Raise EAbFileNotFound.Create; if ((AttrEx.Attr and faDirectory) <> 0) then UncompressedStream := TMemoryStream.Create else UncompressedStream := TFileStreamEx.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); try {UncompressedStream} {$IFDEF UNIX} Item.ExternalFileAttributes := LongWord(AttrEx.Mode) shl 16 + LongWord(AttrEx.Attr); {$ELSE} Item.ExternalFileAttributes := AttrEx.Attr; {$ENDIF} Item.LastModTimeAsDateTime := AttrEx.Time; DoZipFromStream(Sender, Item, OutStream, UncompressedStream); finally {UncompressedStream} UncompressedStream.Free; end; {UncompressedStream} end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzipper.pas0000644000175000001440000005257215104114162022743 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipper.pas *} {*********************************************************} {* ABBREVIA: Non-visual Component with Zip support *} {*********************************************************} unit AbZipper; {$I AbDefine.inc} interface uses Classes, AbBrowse, AbZBrows, AbArcTyp, AbZipTyp; type TAbCustomZipper = class(TAbCustomZipBrowser) protected {private} FAutoSave : Boolean; FCompressionMethodToUse : TAbZipSupportedMethod; FDeflationOption : TAbZipDeflationOption; FDOSMode : Boolean; FOnConfirmSave : TAbArchiveConfirmEvent; FOnSave : TAbArchiveEvent; FOnArchiveSaveProgress : TAbArchiveProgressEvent; FArchiveSaveProgressMeter : IAbProgressMeter; FStoreOptions : TAbStoreOptions; protected {methods} procedure DoConfirmSave(Sender : TObject; var Confirm : Boolean); virtual; procedure DoSave(Sender : TObject); virtual; procedure DoArchiveSaveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); procedure InitArchive; override; procedure SetAutoSave(Value : Boolean); procedure SetCompressionMethodToUse(Value : TAbZipSupportedMethod); procedure SetDeflationOption(Value : TAbZipDeflationOption); procedure SetDOSMode( Value : Boolean ); procedure SetFileName(const aFileName : string); override; procedure SetStoreOptions( Value : TAbStoreOptions ); procedure SetArchiveSaveProgressMeter(const Value: IAbProgressMeter); procedure SetZipfileComment(const Value : AnsiString); override; procedure ZipProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); procedure ZipFromStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream ); procedure Notification(Component: TComponent; Operation: TOperation); override; procedure ResetMeters; override; protected {properties} property AutoSave : Boolean read FAutoSave write SetAutoSave; property CompressionMethodToUse : TAbZipSupportedMethod read FCompressionMethodToUse write SetCompressionMethodToUse default AbDefCompressionMethodToUse; property DeflationOption : TAbZipDeflationOption read FDeflationOption write SetDeflationOption default AbDefDeflationOption; property DOSMode : Boolean read FDOSMode write SetDOSMode; property StoreOptions : TAbStoreOptions read FStoreOptions write SetStoreOptions default AbDefStoreOptions; property ArchiveSaveProgressMeter : IAbProgressMeter read FArchiveSaveProgressMeter write SetArchiveSaveProgressMeter; protected {events} property OnConfirmSave : TAbArchiveConfirmEvent read FOnConfirmSave write FOnConfirmSave; property OnSave : TAbArchiveEvent read FOnSave write FOnSave; property OnArchiveSaveProgress : TAbArchiveProgressEvent read FOnArchiveSaveProgress write FOnArchiveSaveProgress; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure AddFiles(const FileMask : string; SearchAttr : Integer); procedure AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); procedure AddFromStream(const NewName : string; FromStream : TStream); procedure DeleteAt(Index : Integer); procedure DeleteFiles(const FileMask : string); procedure DeleteFilesEx(const FileMask, ExclusionMask : string); procedure DeleteTaggedItems; procedure FreshenFiles(const FileMask : string); procedure FreshenFilesEx(const FileMask, ExclusionMask : string); procedure FreshenTaggedItems; procedure Move(aItem : TAbArchiveItem; const NewStoredPath : string); procedure Save; procedure Replace(aItem : TAbArchiveItem); end; type TAbZipper = class(TAbCustomZipper) published property ArchiveProgressMeter; property ArchiveSaveProgressMeter; property ItemProgressMeter; property AutoSave; property BaseDirectory; property CompressionMethodToUse; property DeflationOption; property DOSMode; property SpanningThreshold; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveSaveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmProcessItem; property OnConfirmSave; property OnLoad; property OnProcessItemFailure; property OnRequestBlankDisk; property OnRequestImage; property OnRequestLastDisk; property OnRequestNthDisk; property OnSave; property Password; property StoreOptions; property TempDirectory; property Version; property FileName; {must be after OnLoad} end; implementation uses SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc, AbXzTyp, AbLzmaTyp, AbZstdTyp, DCOSUtils; { -------------------------------------------------------------------------- } constructor TAbCustomZipper.Create( AOwner : TComponent ); begin inherited Create( AOwner ); CompressionMethodToUse := AbDefCompressionMethodToUse; DeflationOption := AbDefDeflationOption; StoreOptions := AbDefStoreOptions; end; { -------------------------------------------------------------------------- } destructor TAbCustomZipper.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFiles(const FileMask : string; SearchAttr : Integer); {Add files to the archive where the disk filespec matches} begin if (ZipArchive <> nil) then ZipArchive.AddFiles(FileMask, SearchAttr) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); {Add files that match Filemask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.AddFilesEx(FileMask, ExclusionMask, SearchAttr) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFromStream(const NewName : string; FromStream : TStream); {Add stream directly to archive} begin if (ZipArchive <> nil) then begin FromStream.Position := 0; ZipArchive.AddFromStream(NewName, FromStream); end else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteFiles(const FileMask : string); {delete all files from the archive that match the file mask} begin if (ZipArchive <> nil) then ZipArchive.DeleteFiles( FileMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteAt(Index : Integer); {delete item at Index} begin if (ZipArchive <> nil) then ZipArchive.DeleteAt( Index ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteFilesEx(const FileMask, ExclusionMask : string); {Delete files that match Filemask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.DeleteFilesEx(FileMask, ExclusionMask) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteTaggedItems; {delete all tagged items from the archive} begin if (ZipArchive <> nil) then ZipArchive.DeleteTaggedItems else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoConfirmSave(Sender : TObject; var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmSave) then FOnConfirmSave(Self, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoSave(Sender : TObject); begin if Assigned(FOnSave) then FOnSave(Self); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenFiles(const FileMask : string); {freshen all items that match the file mask} begin if (ZipArchive <> nil) then ZipArchive.FreshenFiles( FileMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenFilesEx(const FileMask, ExclusionMask : string); {freshen all items matching FileMask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.FreshenFilesEx( FileMask, ExclusionMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenTaggedItems; {freshen all tagged items} begin if (ZipArchive <> nil) then ZipArchive.FreshenTaggedItems else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.InitArchive; begin inherited InitArchive; if (ZipArchive is TAbZipArchive) then begin {properties} ZipArchive.AutoSave := FAutoSave; TAbZipArchive(ZipArchive).CompressionMethodToUse := FCompressionMethodToUse; TAbZipArchive(ZipArchive).DeflationOption := FDeflationOption; FArchive.DOSMode := FDOSMode; ZipArchive.StoreOptions := FStoreOptions; {events} ZipArchive.OnArchiveSaveProgress := DoArchiveSaveProgress; ZipArchive.OnConfirmSave := DoConfirmSave; TAbZipArchive(ZipArchive).OnRequestBlankDisk := OnRequestBlankDisk; ZipArchive.OnSave := DoSave; TAbZipArchive(ZipArchive).InsertHelper := ZipProc; TAbZipArchive(ZipArchive).InsertFromStreamHelper := ZipFromStreamProc; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Move(aItem : TAbArchiveItem; const NewStoredPath : string); {renames the item} begin if (ZipArchive <> nil) then ZipArchive.Move(aItem, NewStoredPath) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Replace(aItem : TAbArchiveItem); {replace the item} begin if (ZipArchive <> nil) then ZipArchive.Replace( aItem ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Save; begin if (ZipArchive <> nil) then begin ZipArchive.Save; DoChange; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetAutoSave(Value : Boolean); begin FAutoSave := Value; if (ZipArchive <> nil) then ZipArchive.AutoSave := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetCompressionMethodToUse( Value : TAbZipSupportedMethod); begin FCompressionMethodToUse := Value; if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).CompressionMethodToUse := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetDeflationOption(Value : TAbZipDeflationOption); begin FDeflationOption := Value; if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).DeflationOption := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetDOSMode(Value : Boolean); begin FDOSMode := Value; if (ZipArchive <> nil) then ZipArchive.DOSMode := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetFileName(const aFileName : string); var ArcType : TAbArchiveType; begin FFileName := aFileName; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then begin FArchive.Save; FreeAndNil(FArchive); end; ArcType := ArchiveType; if (FileName <> '') then if mbFileExists(FileName) then begin { open it } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; atXz, atXzippedTar : begin FArchive := TAbXzArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); inherited InitArchive; end; atLzma, atLzmaTar : begin FArchive := TAbLzmaArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); inherited InitArchive; end; atZstd, atZstdTar : begin FArchive := TAbZstdArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbZstdArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbZstdArchive(FArchive).IsZstdTar := (ArcType = atZstdTar); inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchive.Load; FArchiveType := ArcType; end else begin { file doesn't exist, so create a new one } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip : begin FArchive := TAbZipArchive.Create(FileName, fmCreate or fmShareDenyWrite); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyWrite); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; atXz, atXzippedTar : begin FArchive := TAbXzArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); inherited InitArchive; end; atLzma, atLzmaTar : begin FArchive := TAbLzmaArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); inherited InitArchive; end; atZstd, atZstdTar : begin FArchive := TAbZstdArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbZstdArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbZstdArchive(FArchive).IsZstdTar := (ArcType = atZstdTar); inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchiveType := ArcType; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetStoreOptions(Value : TAbStoreOptions); begin FStoreOptions := Value; if (ZipArchive <> nil) then ZipArchive.StoreOptions := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetArchiveSaveProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FArchiveSaveProgressMeter, opRemove); FArchiveSaveProgressMeter := Value; ReferenceInterface(FArchiveSaveProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetZipfileComment(const Value : AnsiString); begin if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).ZipfileComment := Value else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ZipProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); begin AbZip(TAbZipArchive(Sender), TAbZipItem(Item), OutStream); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ZipFromStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream); begin if Assigned(InStream) then AbZipFromStream(TAbZipArchive(Sender), TAbZipItem(Item), OutStream, InStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoArchiveSaveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FArchiveSaveProgressMeter) then FArchiveSaveProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveSaveProgress) then FOnArchiveSaveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Notification(Component: TComponent; Operation: TOperation); begin inherited Notification(Component, Operation); if (Operation = opRemove) then if Assigned(ArchiveSaveProgressMeter) and Component.IsImplementorOf(ArchiveSaveProgressMeter) then ArchiveSaveProgressMeter := nil end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ResetMeters; begin inherited ResetMeters; if Assigned(FArchiveSaveProgressMeter) then FArchiveSaveProgressMeter.Reset; end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzipkit.pas0000644000175000001440000002304715104114162022737 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipKit.pas *} {*********************************************************} {* ABBREVIA: TABZipKit component *} {*********************************************************} unit AbZipKit; {$I AbDefine.inc} interface uses Classes, AbZipper, AbArcTyp, AbZipTyp; type TAbCustomZipKit = class(TAbCustomZipper) protected {private} FExtractOptions : TAbExtractOptions; FOnConfirmOverwrite : TAbConfirmOverwriteEvent; FOnNeedPassword : TAbNeedPasswordEvent; FPasswordRetries : Byte; protected {methods} procedure DoConfirmOverwrite(var Name : string; var Confirm : Boolean); virtual; procedure DoNeedPassword(Sender : TObject; var NewPassword : AnsiString); virtual; procedure InitArchive; override; procedure SetExtractOptions(Value : TAbExtractOptions); procedure SetPasswordRetries(Value : Byte); procedure UnzipProc(Sender : TObject; Item : TAbArchiveItem; const NewName : string ); procedure UnzipToStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); procedure TestItemProc(Sender : TObject; Item : TAbArchiveItem); protected {properties} property ExtractOptions : TAbExtractOptions read FExtractOptions write SetExtractOptions default AbDefExtractOptions; property PasswordRetries : Byte read FPasswordRetries write SetPasswordRetries default AbDefPasswordRetries; protected {events} property OnConfirmOverwrite : TAbConfirmOverwriteEvent read FOnConfirmOverwrite write FOnConfirmOverwrite; property OnNeedPassword : TAbNeedPasswordEvent read FOnNeedPassword write FOnNeedPassword; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure ExtractAt(Index : Integer; const NewName : string); procedure ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} procedure ExtractFilesEx(const FileMask, ExclusionMask : string); {extract files matching FileMask except those matching ExclusionMask} procedure ExtractTaggedItems; {extract all tagged items from the archive} procedure ExtractToStream(const aFileName : string; ToStream : TStream); {extract the specified item to TStream descendant} procedure TestTaggedItems; {test all tagged items in the archive} public {property} property Spanned; end; TAbZipKit = class(TAbCustomZipKit) published property ArchiveProgressMeter; property ArchiveSaveProgressMeter; property AutoSave; property BaseDirectory; property CompressionMethodToUse; property DeflationOption; {$IFDEF MSWINDOWS} property DOSMode; {$ENDIF} property ExtractOptions; property SpanningThreshold; property ItemProgressMeter; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveSaveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmOverwrite; property OnConfirmProcessItem; property OnConfirmSave; property OnLoad; property OnNeedPassword; property OnProcessItemFailure; property OnRequestBlankDisk; property OnRequestImage; property OnRequestLastDisk; property OnRequestNthDisk; property OnSave; property Password; property PasswordRetries; property StoreOptions; property TempDirectory; property Version; property FileName; {must be after OnLoad} end; implementation uses AbExcept, AbUnzPrc, AbZBrows; { -------------------------------------------------------------------------- } constructor TAbCustomZipKit.Create( AOwner : TComponent ); begin inherited Create( AOwner ); PasswordRetries := AbDefPasswordRetries; end; { -------------------------------------------------------------------------- } destructor TAbCustomZipKit.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.DoConfirmOverwrite( var Name : string; var Confirm : Boolean ); begin Confirm := True; if Assigned( FOnConfirmOverwrite ) then FOnConfirmOverwrite( Name, Confirm ); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.DoNeedPassword( Sender : TObject; var NewPassword : AnsiString ); begin if Assigned( FOnNeedPassword ) then begin FOnNeedPassword( Self, NewPassword ); FPassword := NewPassword; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractAt(Index : Integer; const NewName : string); {extract a file from the archive that match the index} begin if (ZipArchive <> nil) then ZipArchive.ExtractAt( Index, NewName ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} begin if (ZipArchive <> nil) then ZipArchive.ExtractFiles( FileMask ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractFilesEx(const FileMask, ExclusionMask : string); {extract files matching FileMask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.ExtractFilesEx( FileMask, ExclusionMask ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractTaggedItems; {extract all tagged items from the archive} begin if (ZipArchive <> nil) then ZipArchive.ExtractTaggedItems else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractToStream(const aFileName : string; ToStream : TStream); begin if (ZipArchive <> nil) then ZipArchive.ExtractToStream(aFileName, ToStream) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.InitArchive; begin inherited InitArchive; if (ZipArchive <> nil) then begin if ZipArchive is TAbZipArchive then begin {properties} ZipArchive.ExtractOptions := FExtractOptions; TAbZipArchive(ZipArchive).PasswordRetries := FPasswordRetries; {events} ZipArchive.OnConfirmOverwrite := DoConfirmOverwrite; TAbZipArchive(ZipArchive).OnNeedPassword := DoNeedPassword; TAbZipArchive(ZipArchive).ExtractHelper := UnzipProc; TAbZipArchive(ZipArchive).ExtractToStreamHelper := UnzipToStreamProc; TAbZipArchive(ZipArchive).TestHelper := TestItemProc; end; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.SetExtractOptions( Value : TAbExtractOptions ); begin FExtractOptions := Value; if (ZipArchive <> nil) then ZipArchive.ExtractOptions := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.SetPasswordRetries( Value : Byte ); begin FPasswordRetries := Value; if (ZipArchive <> nil) then (ZipArchive as TAbZipArchive).PasswordRetries := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.TestTaggedItems; {test all tagged items in the archive} begin if (ZipArchive <> nil) then ZipArchive.TestTaggedItems else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.UnzipProc( Sender : TObject; Item : TAbArchiveItem; const NewName : string ); begin AbUnzip( TAbZipArchive(Sender), TAbZipItem(Item), NewName); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.UnzipToStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); begin AbUnzipToStream(TAbZipArchive(Sender), TAbZipItem(Item), OutStream); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.TestItemProc(Sender : TObject; Item : TAbArchiveItem); begin AbTestZipItem(TAbZipArchive(Sender), TAbZipItem(Item)); end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abzbrows.pas0000644000175000001440000002660715104114162022760 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZBrows.pas *} {*********************************************************} {* ABBREVIA: Zip file Browser Component *} {*********************************************************} unit AbZBrows; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbBrowse, AbSpanSt, AbZipTyp; type TAbCustomZipBrowser = class(TAbBaseBrowser) private function GetTarAutoHandle: Boolean; procedure SetTarAutoHandle(const Value: Boolean); protected {private} FPassword : AnsiString; FOnRequestLastDisk : TAbRequestDiskEvent; FOnRequestNthDisk : TAbRequestNthDiskEvent; FOnRequestBlankDisk : TAbRequestDiskEvent; FTarAutoHandle : Boolean; protected {methods} function GetItem(Index : Integer) : TAbZipItem; virtual; function GetStream: TStream; function GetZipfileComment : AnsiString; procedure InitArchive; override; procedure SetFileName(const aFileName : string); override; procedure SetStream(aValue: TStream); procedure SetOnRequestLastDisk(Value : TAbRequestDiskEvent); procedure SetOnRequestNthDisk(Value : TAbRequestNthDiskEvent); procedure SetOnRequestBlankDisk(Value : TAbRequestDiskEvent); procedure SetPassword(const Value : AnsiString); procedure SetZipfileComment(const Value : AnsiString); virtual; protected {properties} property Password : AnsiString read FPassword write SetPassword; protected {events} property OnRequestLastDisk : TAbRequestDiskEvent read FOnRequestLastDisk write SetOnRequestLastDisk; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write SetOnRequestNthDisk; property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write SetOnRequestBlankDisk; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; public {properties} property Items[Index : Integer] : TAbZipItem read GetItem; default; property Stream : TStream // This can be used instead of Filename read GetStream write SetStream; property ZipArchive : {TAbZipArchive} TAbArchive read FArchive; property ZipfileComment : AnsiString read GetZipfileComment write SetZipfileComment; property TarAutoHandle : Boolean read GetTarAutoHandle write SetTarAutoHandle; end; TAbZipBrowser = class(TAbCustomZipBrowser) published property ArchiveProgressMeter; property ItemProgressMeter; property BaseDirectory; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmProcessItem; property OnLoad; property OnProcessItemFailure; property OnRequestLastDisk; property OnRequestNthDisk; property Version; property TarAutoHandle; property FileName; {must be after OnLoad} end; implementation uses SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils, DCOSUtils; { TAbCustomZipBrowser implementation ======================================= } { -------------------------------------------------------------------------- } constructor TAbCustomZipBrowser.Create(AOwner : TComponent); begin inherited Create(AOwner); end; { -------------------------------------------------------------------------- } destructor TAbCustomZipBrowser.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetItem(Index : Integer) : TAbZipItem; begin Result := TAbZipItem(ZipArchive.ItemList[Index]); end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetStream: TStream; begin if FArchive <> nil then Result := FArchive.FStream else Result := nil end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetTarAutoHandle: Boolean; begin Result := False; if FArchive is TAbGzipArchive then Result := TAbGzipArchive(FArchive).TarAutoHandle else if FArchive is TAbBzip2Archive then Result := TAbBzip2Archive(FArchive).TarAutoHandle; end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetZipfileComment : AnsiString; begin if ZipArchive is TAbZipArchive then Result := TAbZipArchive(ZipArchive).ZipfileComment else Result := ''; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.InitArchive; begin inherited InitArchive; if ZipArchive is TAbZipArchive then begin {properties} TAbZipArchive(ZipArchive).Password := FPassword; {events} TAbZipArchive(ZipArchive).OnRequestLastDisk := FOnRequestLastDisk; TAbZipArchive(ZipArchive).OnRequestNthDisk := FOnRequestNthDisk; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetFileName(const aFileName : string); var ArcType : TAbArchiveType; begin FFileName := aFileName; if csDesigning in ComponentState then Exit; try if Assigned(FArchive) then begin FArchive.Save; end; except end; FArchive.Free; FArchive := nil; if FileName <> '' then begin if mbFileExists(FileName) then begin { open it } ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchive.Load; FArchiveType := ArcType; end; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetStream(aValue: TStream); var ArcType : TAbArchiveType; begin FFileName := ''; try if FArchive <> nil then FArchive.Save; except end; FreeAndNil(FArchive); if aValue <> nil then begin ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(aValue); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.CreateFromStream(aValue, ''); end; atTar : begin FArchive := TAbTarArchive.CreateFromStream(aValue, ''); end; atGZip, atGZippedTar : begin FArchive := TAbGzipArchive.CreateFromStream(aValue, ''); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := (ArcType = atGZippedTar); end; atBzip2, atBzippedTar : begin FArchive := TAbBzip2Archive.CreateFromStream(aValue, ''); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := (ArcType = atBzippedTar); end; else raise EAbUnhandledType.Create; end {case}; InitArchive; FArchive.Load; FArchiveType := ArcType; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestBlankDisk(Value : TAbRequestDiskEvent); begin FOnRequestBlankDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestBlankDisk := FOnRequestBlankDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestLastDisk(Value : TAbRequestDiskEvent); begin FOnRequestLastDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestLastDisk := FOnRequestLastDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestNthDisk(Value : TAbRequestNthDiskEvent); begin FOnRequestNthDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestNthDisk := FOnRequestNthDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetPassword(const Value : AnsiString); begin FPassword := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).Password := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetTarAutoHandle(const Value: Boolean); begin FTarAutoHandle := Value; if FArchive is TAbGzipArchive then begin if TAbGzipArchive(FArchive).TarAutoHandle <> Value then begin TAbGzipArchive(FArchive).TarAutoHandle := Value; InitArchive; FArchive.Load; DoChange; end; end; if FArchive is TAbBzip2Archive then begin if TAbBzip2Archive(FArchive).TarAutoHandle <> Value then begin TAbBzip2Archive(FArchive).TarAutoHandle := Value; InitArchive; FArchive.Load; DoChange; end; end; end; procedure TAbCustomZipBrowser.SetZipfileComment(const Value : AnsiString); begin {NOP - descendents wishing to set this property should override} end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abxztyp.pas0000644000175000001440000003541215104114162022622 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Koblov * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbXzTyp.pas *} {*********************************************************} {* ABBREVIA: TAbXzArchive, TAbXzItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Xz files *} {*********************************************************} unit AbXzTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; const { The first six (6) bytes of the Stream are so called Header } { Magic Bytes. They can be used to identify the file type. } AB_XZ_FILE_HEADER = #$FD'7zXZ'#00; type PAbXzHeader = ^TAbXzHeader; { File Header } TAbXzHeader = packed record { SizeOf(TAbXzHeader) = 12 } HeaderMagic : array[0..5] of AnsiChar; { 0xFD, '7', 'z', 'X', 'Z', 0x00 } StreamFlags : Word; { 0x00, 0x00-0x0F } CRC32 : LongWord; { The CRC32 is calculated from the Stream Flags field } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbXzItem = class(TabArchiveItem); TAbXzArchiveState = (gsXz, gsTar); TAbXzArchive = class(TAbTarArchive) private FXzStream : TStream; { stream for Xz file} FXzItem : TAbArchiveList; { item in xz (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbXzArchiveState; FIsXzippedTar : Boolean; procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToXz; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsXzippedTar : Boolean read FIsXzippedTar write FIsXzippedTar; end; function VerifyXz(Strm : TStream) : TAbArchiveType; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, BufStream, AbXz, AbExcept, AbVMStrm, AbBitBkt, AbProgress, CRC, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbXzHeader) : Boolean; begin Result := CompareByte(Header.HeaderMagic, AB_XZ_FILE_HEADER, SizeOf(Header.HeaderMagic)) = 0; Result := Result and (Crc32(0, PByte(@Header.StreamFlags), SizeOf(Header.StreamFlags)) = Header.CRC32); end; { -------------------------------------------------------------------------- } function VerifyXz(Strm : TStream) : TAbArchiveType; var Hdr : TAbXzHeader; CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atXz; { Check for embedded TAR } Strm.Seek(0, soBeginning); DecompStream := TXzDecompressionStream.Create(Strm); try TarStream := TMemoryStream.Create; try DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soBeginning); if VerifyTar(TarStream) = atTar then Result := atXzippedTar; finally TarStream.Free; end; finally DecompStream.Free; end; end; except Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbXzArchive ***************************** } constructor TAbXzArchive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsXz; FXzStream := FStream; FXzItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SwapToXz; begin FStream := FXzStream; FItemList := FXzItem; FState := gsXz; end; { -------------------------------------------------------------------------- } function TAbXzArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var XzItem : TAbXzItem; FullSourceFileName, FullArchiveFileName: String; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToXz; XzItem := TAbXzItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); XzItem.FileName := FullArchiveFileName; XzItem.DiskFileName := FullSourceFileName; Result := XzItem; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbXzArchive.Destroy; begin SwapToXz; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToXz; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Xz doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToXz; { Index ignored as there's only one item in a Xz } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbXzArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsXzippedTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.LoadArchive; var Item: TAbXzItem; Abort: Boolean; ItemName: string; begin if FXzStream.Size = 0 then Exit; if IsXzippedTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToXz; Item := TAbXzItem.Create; Item.Action := aaNone; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.txz', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SaveArchive; var I: Integer; CurItem: TAbXzItem; UpdateArchive: Boolean; TempFileName: String; CompStream: TStream; InputFileStream: TStream; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; UpdateArchive := (FXzStream.Size > 0) and (FXzStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FXzStream); TempFileName := GetTempName(FArchiveName); { Create new archive with temporary name } FXzStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompStream := TXzCompressionStream.Create(FXzStream, FCompressionLevel); try FTargetStream := TWriteBufStream.Create(CompStream, $40000); try inherited SaveArchive; finally FreeAndNil(FTargetStream); end; finally CompStream.Free; end; if UpdateArchive then begin FreeAndNil(FXzStream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FXzStream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToXz; for I := 0 to Pred(Count) do begin FCurrentItem := ItemList[I]; CurItem := TAbXzItem(ItemList[I]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; xz doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FXzStream.Size := 0; CompStream := TXZCompressionStream.Create(FXzStream, CompressionLevel); try if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FBzip2Stream } else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try with TAbProgressWriteStream.Create(CompStream, InputFileStream.Size, OnProgress) do try CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } finally Free; end; finally InputFileStream.Free; end; end; finally CompStream.Free; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToXz; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.DecompressToStream(aStream: TStream); var ProxyStream: TAbProgressReadStream; DecompStream: TXzDecompressionStream; begin ProxyStream:= TAbProgressReadStream.Create(FXzStream, OnProgress); try DecompStream := TXzDecompressionStream.Create(ProxyStream); try aStream.CopyFrom(DecompStream, 0) finally DecompStream.Free; end; finally ProxyStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.TestItemAt(Index: Integer); var XzType: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { Note Index ignored as there's only one item in a GZip } XzType := VerifyXz(FXzStream); if not (XzType in [atXz, atXzippedTar]) then raise EAbGzipInvalid.Create; // TODO: Add xz-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abxz.pas0000644000175000001440000002506215104114162022065 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Simple interface to lzma library * * Copyright (C) 2014-2023 Alexander Koblov (alexx2000@mail.ru) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ***** END LICENSE BLOCK ***** *) {********************************************************************} {* ABBREVIA: AbXz.pas *} {********************************************************************} {* ABBREVIA: TXzDecompressionStream, TXzDecompressionStream classes *} {********************************************************************} unit AbXz; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes; type TLzmaStreamRec = record next_in: pbyte; (**< Pointer to the next input byte. *) avail_in: csize_t; (**< Number of available input bytes in next_in. *) total_in: cuint64; (**< Total number of bytes read by liblzma. *) next_out: pbyte; (**< Pointer to the next output position. *) avail_out: csize_t; (**< Amount of free space in next_out. *) total_out: cuint64; (**< Total number of bytes written by liblzma. *) (** * \brief Custom memory allocation functions * * In most cases this is NULL which makes liblzma use * the standard malloc() and free(). *) allocator: pointer; (** Internal state is not visible to applications. *) internal: pointer; (* * Reserved space to allow possible future extensions without * breaking the ABI. Excluding the initialization of this structure, * you should not touch these, because the names of these variables * may change. *) reserved_ptr1: pointer; reserved_ptr2: pointer; reserved_ptr3: pointer; reserved_ptr4: pointer; reserved_int1: cuint64; reserved_int2: cuint64; reserved_int3: csize_t; reserved_int4: csize_t; reserved_enum1: cuint32; reserved_enum2: cuint32; end; type { TXzCustomStream } TXzCustomStream = class(TOwnerStream) protected FLzmaRec: TLzmaStreamRec; FBuffer: array[Word] of Byte; public constructor Create(AStream: TStream); destructor Destroy; override; end; { TXzCompressionStream } TXzCompressionStream = class(TXzCustomStream) private procedure FlushBuffer; function Check(Return: cint): cint; public constructor Create(ATarget: TStream; ALevel: Integer); destructor Destroy; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; { TXzDecompressionStream } TXzDecompressionStream = class(TXzCustomStream) private function Check(Return: cint): cint; public constructor Create(ASource: TStream); function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; ELzmaError = class(Exception); ELzmaCompressionError = class(ELzmaError); ELzmaDecompressionError = class(ELzmaError); implementation uses DynLibs, RtlConsts; const // Lzma return codes LZMA_OK = 0; LZMA_STREAM_END = 1; LZMA_NO_CHECK = 2; LZMA_UNSUPPORTED_CHECK = 3; LZMA_GET_CHECK = 4; LZMA_MEM_ERROR = 5; LZMA_MEMLIMIT_ERROR = 6; LZMA_FORMAT_ERROR = 7; LZMA_OPTIONS_ERROR = 8; LZMA_DATA_ERROR = 9; LZMA_BUF_ERROR = 10; LZMA_PROG_ERROR = 11; const // Lzma actions LZMA_RUN = 0; LZMA_SYNC_FLUSH = 1; LZMA_FULL_FLUSH = 2; LZMA_FINISH = 3; const // Type of the integrity check (Check ID) LZMA_CHECK_CRC64 = 4; const // Decoding flags LZMA_TELL_UNSUPPORTED_CHECK = $02; LZMA_CONCATENATED = $08; const liblzma = {$IF DEFINED(MSWINDOWS)} 'liblzma.dll' {$ELSEIF DEFINED(DARWIN)} 'liblzma.dylib' {$ELSEIF DEFINED(UNIX)} 'liblzma.so.5' {$IFEND}; var hLzma: TLibHandle = NilHandle; var lzma_stream_decoder: function(var strm: TLzmaStreamRec; memlimit: cuint64; flags: cuint32): cint; cdecl; lzma_easy_encoder: function(var strm: TLzmaStreamRec; preset: cuint32; check: cint): cint; cdecl; lzma_code: function(var strm: TLzmaStreamRec; action: cint): cint; cdecl; lzma_end: procedure(var strm: TLzmaStreamRec); cdecl; procedure LzmaLoadLibrary; begin if hLzma <> NilHandle then Exit; hLzma := LoadLibrary(liblzma); if hLzma = NilHandle then raise ELzmaError.Create('Lzma shared library not found'); @lzma_stream_decoder := GetProcAddress(hLzma, 'lzma_stream_decoder'); @lzma_easy_encoder := GetProcAddress(hLzma, 'lzma_easy_encoder'); @lzma_code := GetProcAddress(hLzma, 'lzma_code'); @lzma_end := GetProcAddress(hLzma, 'lzma_end'); end; constructor TXzCustomStream.Create(AStream: TStream); begin LzmaLoadLibrary; inherited Create(AStream); end; destructor TXzCustomStream.Destroy; begin if (@lzma_end <> nil) then lzma_end(FLzmaRec); inherited Destroy; end; { TXzCompressionStream } function TXzCompressionStream.Check(Return: cint): cint; var Message: String; begin Result:= Return; if not (Return in [LZMA_OK, LZMA_STREAM_END]) then begin case Return of LZMA_MEM_ERROR: Message:= 'Memory allocation failed'; LZMA_OPTIONS_ERROR: Message:= 'Specified preset is not supported'; LZMA_UNSUPPORTED_CHECK: Message:= 'Specified integrity check is not supported'; LZMA_FORMAT_ERROR: Message:= 'The input is not in the .xz format'; LZMA_DATA_ERROR: Message:= 'File size limits exceeded'; else Message:= Format('Unknown error, possibly a bug (error code %d)', [Return]); end; raise ELzmaCompressionError.Create(Message); end; end; constructor TXzCompressionStream.Create(ATarget: TStream; ALevel: Integer); begin inherited Create(ATarget); FLzmaRec.next_out:= FBuffer; FLzmaRec.avail_out:= SizeOf(FBuffer); Check(lzma_easy_encoder(FLzmaRec, ALevel, LZMA_CHECK_CRC64)); end; function TXzCompressionStream.Write(const Buffer; Count: Longint): Longint; begin FLzmaRec.avail_in:= Count; FLzmaRec.next_in:= @Buffer; while FLzmaRec.avail_in > 0 do begin Check(lzma_code(FLzmaRec, LZMA_RUN)); if FLzmaRec.avail_out = 0 then FlushBuffer; end; Result:= Count; end; function TXzCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result:= FLzmaRec.total_in else if (Origin = soBeginning) and (FLzmaRec.total_in = Offset) then Result:= Offset else begin raise ELzmaCompressionError.CreateFmt(SStreamInvalidSeek, [ClassName]); end; end; procedure TXzCompressionStream.FlushBuffer; begin FLzmaRec.next_out:= FBuffer; FLzmaRec.avail_out:= SizeOf(FBuffer); FSource.WriteBuffer(FBuffer, SizeOf(FBuffer)); end; destructor TXzCompressionStream.Destroy; var State: cint; begin try repeat if FLzmaRec.avail_out = 0 then FlushBuffer; State:= Check(lzma_code(FLzmaRec, LZMA_FINISH)); until State = LZMA_STREAM_END; if FLzmaRec.avail_out < SizeOf(FBuffer) then begin FSource.WriteBuffer(FBuffer, SizeOf(FBuffer) - FLzmaRec.avail_out); end; finally inherited Destroy; end; end; { TXzDecompressionStream } function TXzDecompressionStream.Check(Return: cint): cint; var Message: String; begin Result:= Return; if not (Return in [LZMA_OK, LZMA_STREAM_END]) then begin case Return of LZMA_MEM_ERROR: Message:= 'Memory allocation failed'; LZMA_OPTIONS_ERROR: Message:= 'Unsupported decompressor flags'; LZMA_FORMAT_ERROR: Message:= 'The input is not in the .xz format'; LZMA_DATA_ERROR: Message:= 'Compressed file is corrupt'; LZMA_BUF_ERROR: Message:= 'Compressed file is truncated or otherwise corrupt'; else Message:= Format('Unknown error, possibly a bug (error code %d)', [Return]); end; raise ELzmaDecompressionError.Create(Message); end; end; constructor TXzDecompressionStream.Create(ASource: TStream); const flags = LZMA_TELL_UNSUPPORTED_CHECK or LZMA_CONCATENATED; var memory_limit: cuint64 = High(cuint64); begin inherited Create(ASource); Check(lzma_stream_decoder(FLzmaRec, memory_limit, flags)); end; function TXzDecompressionStream.Read(var Buffer; Count: Longint): Longint; var State: cint; Action: cint = LZMA_RUN; begin FLzmaRec.avail_out:= Count; FLzmaRec.next_out:= @Buffer; while FLzmaRec.avail_out > 0 do begin if FLzmaRec.avail_in = 0 then begin FLzmaRec.next_in:= FBuffer; FLzmaRec.avail_in:= FSource.Read(FBuffer, SizeOf(FBuffer)); if FLzmaRec.avail_in = 0 then Action:= LZMA_FINISH; end; State:= Check(lzma_code(FLzmaRec, Action)); if State = LZMA_STREAM_END then Break; end; Result:= Count - FLzmaRec.avail_out; end; function TXzDecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset >= 0) and (Origin = soCurrent) then begin if (Offset > 0) then Discard(Offset); Result:= FLzmaRec.total_out; end else if (Origin = soBeginning) and (FLzmaRec.total_out = Offset) then Result:= Offset else begin raise ELzmaDecompressionError.CreateFmt(SStreamInvalidSeek, [ClassName]); end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abwinzipaes.pas0000644000175000001440000001351115104114162023431 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * * WinZip AES decryption stream * * Copyright (C) 2017 Alexander Koblov (alexx2000@mail.ru) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ***** END LICENSE BLOCK ***** *) unit AbWinZipAes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCPrijndael, HMAC; const Ab_WinZipAesID : Word = $9901; type { TWinZipAesRec } PWinZipAesRec = ^TWinZipAesRec; TWinZipAesRec = packed record Version: Word; Vendor: Word; Strength: Byte; Method: Word; end; { TAbWinZipAesDecryptStream } TAbWinZipAesDecryptStream = class(TStream) private FKey : TBytes; FOwnsStream : Boolean; FReady : Boolean; FStream : TStream; FDataStream : TStream; FPassword : AnsiString; FContext : THMAC_Context; FDecoder : TDCP_rijndael; FExtraField : TWinZipAesRec; public constructor Create(aStream : TStream; aExtraField: PWinZipAesRec; const aPassword : AnsiString); destructor Destroy; override; function IsValid : Boolean; function Verify : Boolean; function Read(var aBuffer; aCount : Longint) : Longint; override; function Seek(aOffset : Longint; aOrigin : Word) : Longint; override; function Write(const aBuffer; aCount : Longint) : Longint; override; property ExtraField : TWinZipAesRec read FExtraField; property OwnsStream : Boolean read FOwnsStream write FOwnsStream; end; implementation uses AbUnzOutStm, DCPcrypt2, SHA1, Hash, kdf; const CTR : array[0..15] of Byte = (1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); const MAC_LENGTH = 10; PWD_VER_LENGTH = 2; KEY_LENGTH: array[1..3] of Byte = (16, 24, 32); SALT_LENGTH: array[1..3] of Byte = (8, 12, 16); { TAbWinZipAesDecryptStream } constructor TAbWinZipAesDecryptStream.Create(aStream: TStream; aExtraField: PWinZipAesRec; const aPassword: AnsiString); begin inherited Create; FStream := aStream; FExtraField := aExtraField^; FPassword := aPassword; FDecoder := TDCP_rijndael.Create(nil); end; destructor TAbWinZipAesDecryptStream.Destroy; begin FDecoder.Free; FDataStream.Free; if FOwnsStream then FStream.Free; inherited Destroy; end; function TAbWinZipAesDecryptStream.IsValid: Boolean; var F: WordRec; Salt: AnsiString; HashDesc: PHashDesc; AKeyLength: Integer; ASaltLength: Integer; AExtraLength: Integer; begin // Integer mode value indicating AES encryption strength if not FExtraField.Strength in [1..3] then Exit(False); AKeyLength := KEY_LENGTH[FExtraField.Strength]; ASaltLength := SALT_LENGTH[FExtraField.Strength]; AExtraLength := AKeyLength * 2 + PWD_VER_LENGTH; SetLength(FKey, AExtraLength); HashDesc:= FindHash_by_ID(_SHA1); // Read salt value SetLength(Salt, ASaltLength); FStream.Read(Salt[1], ASaltLength); // Read password verification value FStream.Read({%H-}F, PWD_VER_LENGTH); pbkdf2(HashDesc, Pointer(FPassword), Length(FPassword), Pointer(Salt), Length(Salt), 1000, FKey[0], AExtraLength); Result := (FKey[AExtraLength - 2] = F.Lo) and (FKey[AExtraLength - 1] = F.Hi); if Result then begin FReady := True; FDecoder.Init(FKey[0], AKeyLength * 8, @CTR[0]); // Initialize for authentication using second key part hmac_init(FContext, HashDesc, @FKey[AKeyLength], AKeyLength); // Create encrypted file data stream AExtraLength := ASaltLength + PWD_VER_LENGTH + MAC_LENGTH; FDataStream := TAbUnzipSubsetStream.Create(FStream, FStream.Size - AExtraLength); end else begin FReady := False; FStream.Seek(-(ASaltLength + PWD_VER_LENGTH), soCurrent); end end; function TAbWinZipAesDecryptStream.Verify: Boolean; var AMac: THashDigest; ABuffer: array[0..MAC_LENGTH - 1] of Byte; begin hmac_final(FContext, {%H-}AMac); FStream.Read({%H-}ABuffer[0], MAC_LENGTH); Result := CompareByte(ABuffer[0], AMac[0], MAC_LENGTH) = 0; end; function TAbWinZipAesDecryptStream.Read(var aBuffer; aCount: Longint): Longint; begin Assert(FReady, 'TAbWinZipAesDecryptStream.Read: the stream header has not been verified'); Result := FDataStream.Read(aBuffer, aCount); if Result > 0 then begin hmac_updateXL(FContext, @aBuffer, Result); FDecoder.DecryptCTR(aBuffer, aBuffer, Result); end; end; function TAbWinZipAesDecryptStream.Seek(aOffset: Longint; aOrigin: Word): Longint; begin Result := FDataStream.Seek(aOffset, aOrigin); end; function TAbWinZipAesDecryptStream.Write(const aBuffer; aCount: Longint): Longint; begin Assert(False, 'TAbWinZipAesDecryptStream.Write: the stream is read-only'); Result := 0; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abvmstrm.pas0000644000175000001440000004162315104114162022755 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbVMStrm.pas *} {*********************************************************} {* ABBREVIA: Virtual Memory Stream *} {*********************************************************} unit AbVMStrm; {$I AbDefine.inc} interface uses Classes; const AB_VMSPageSize = 4096; {must be a power of two} AB_VMSMaxPages = 16384; {makes 64MB with the above value} type PvmsPage = ^TvmsPage; TvmsPage = packed record vpStmOfs : Int64; {value will be multiple of AB_VMSPageSize} vpLRU : integer; {'time' page was last accessed} vpDirty : Boolean; {has the page been changed?} vpData : array [0..pred(AB_VMSPageSize)] of byte; {stream data} end; type TAbVirtualMemoryStream = class(TStream) protected {private} vmsCachePage : PvmsPage; {the latest page used} vmsLRU : Longint; {'tick' value} vmsMaxMemToUse : Longword; {maximum memory to use for data} vmsMaxPages : Integer; {maximum data pages} vmsPageList : TList; {page array, sorted by offset} vmsPosition : Int64; {position of stream} vmsSize : Int64; {size of stream} vmsSwapFileDir : string; {swap file directory} vmsSwapFileName : string; {swap file name} vmsSwapFileSize : Int64; {size of swap file} vmsSwapHandle : System.THandle; {swap file handle} protected procedure vmsSetMaxMemToUse(aNewMem : Longword); function vmsAlterPageList(aNewMem : Longword) : Longword; procedure vmsFindOldestPage(out OldestInx : Longint; out OldestPage: PvmsPage); function vmsGetNextLRU : Longint; function vmsGetPageForOffset(aOffset : Int64) : PvmsPage; procedure vmsSwapFileCreate; procedure vmsSwapFileDestroy; procedure vmsSwapFileRead(aPage : PvmsPage); procedure vmsSwapFileWrite(aPage : PvmsPage); public constructor Create; {-create the virtual memory stream} destructor Destroy; override; {-destroy the virtual memory stream} function Read(var Buffer; Count : Longint) : Longint; override; {-read from the stream into a buffer} function Write(const Buffer; Count : Longint) : Longint; override; {-write to the stream from a buffer} function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; {-seek to a particular point in the stream} procedure SetSize(const NewSize : Int64); override; {-set the stream size} property MaxMemToUse : Longword read vmsMaxMemToUse write vmsSetMaxMemToUse; {-maximum memory to use for data before swapping to disk} property SwapFileDirectory : string read vmsSwapFileDir write vmsSwapFileDir; end; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix warning about unexpanded inline functions {$ENDIF} SysUtils, AbExcept, AbUtils, DCOSUtils; const LastLRUValue = $7FFFFFFF; {===TAbVirtualMemoryStream===========================================} constructor TAbVirtualMemoryStream.Create; var Page : PvmsPage; begin inherited Create; {create the page array} vmsPageList := TList.Create; {create the first page} New(Page); with Page^ do begin vpStmOfs := 0; vpLRU := vmsGetNextLRU; vpDirty := False; FillChar(vpData, AB_VMSPageSize, 0); end; vmsPageList.Insert(0, pointer(Page)); {prime the cache, from now on the cache will never be nil} vmsCachePage := Page; {default to using all allowed pages} MaxMemToUse := AB_VMSMaxPages * AB_VMSPageSize; end; {--------} destructor TAbVirtualMemoryStream.Destroy; var Inx : integer; begin {destroy the swap file} vmsSwapFileDestroy; {throw away all pages in the list} if (vmsPageList <> nil) then begin for Inx := 0 to pred(vmsPageList.Count) do Dispose(PvmsPage(vmsPageList[Inx])); vmsPageList.Destroy; end; {let our ancestor clean up} inherited Destroy; end; {--------} function TAbVirtualMemoryStream.Read(var Buffer; Count : Longint) : Longint; var BufPtr : PByte; Page : PvmsPage; PageDataInx : integer; Posn : int64; BytesToGo : int64; BytesToRead : int64; StartOfs : int64; begin {reading is complicated by the fact we can only read in chunks of AB_VMSPageSize: we need to partition out the overall read into a read from a partial page, zero or more reads from complete pages and then a possible read from a partial page} {initialise some variables, note that the complex calc in the expression for PageDataInx is the offset of the start of the page where Posn is found.} BufPtr := @Buffer; Posn := vmsPosition; PageDataInx := Posn - (Posn and (not pred(AB_VMSPageSize))); BytesToRead := AB_VMSPageSize - PageDataInx; {calculate the actual number of bytes to read - this depends on the current position and size of the stream} BytesToGo := Count; if (vmsSize < (vmsPosition + Count)) then BytesToGo := vmsSize - vmsPosition; if (BytesToGo < 0) then BytesToGo := 0; Result := BytesToGo; {while we have bytes to read, read them} while (BytesToGo <> 0) do begin if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; StartOfs := Posn and (not pred(AB_VMSPageSize)); if (vmsCachePage^.vpStmOfs = StartOfs) then Page := vmsCachePage else Page := vmsGetPageForOffset(StartOfs); Move(Page^.vpData[PageDataInx], BufPtr^, BytesToRead); dec(BytesToGo, BytesToRead); inc(Posn, BytesToRead); inc(BufPtr, BytesToRead); PageDataInx := 0; BytesToRead := AB_VMSPageSize; end; {remember our new position} vmsPosition := Posn; end; {--------} function TAbVirtualMemoryStream.Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; begin case Origin of soBeginning : vmsPosition := Offset; soCurrent : inc(vmsPosition, Offset); soEnd : vmsPosition := vmsSize + Offset; else raise EAbVMSInvalidOrigin.Create( Integer(Origin)); end; Result := vmsPosition; end; {--------} procedure TAbVirtualMemoryStream.SetSize(const NewSize : Int64); var Page : PvmsPage; Inx : integer; NewFileSize : Int64; begin if (NewSize < vmsSize) then begin {go through the page list discarding pages whose offset is greater than our new size; don't bother saving any data from them since it be beyond the end of the stream anyway} {never delete the last page here} for Inx := pred(vmsPageList.Count) downto 1 do begin Page := PvmsPage(vmsPageList[Inx]); if (Page^.vpStmOfs >= NewSize) then begin Dispose(Page); vmsPageList.Delete(Inx); end else begin Break; end; end; { Reset cache to the first page in case the cached page was deleted. } vmsCachePage := vmsPageList[0]; {force the swap file file size in range, it'll be a multiple of AB_VMSPageSize} NewFileSize := pred(NewSize + AB_VMSPageSize) and (not pred(AB_VMSPageSize)); if (NewFileSize < vmsSwapFileSize) then vmsSwapFileSize := NewFileSize; {ignore the swap file itself} end; vmsSize := NewSize; if (vmsPosition > NewSize) then vmsPosition := NewSize; end; {--------} function TAbVirtualMemoryStream.vmsAlterPageList(aNewMem : Longword) : Longword; var NumPages : Longint; Page : PvmsPage; i : integer; OldestPageNum : Longint; begin {calculate the max number of pages required} if aNewMem = 0 then NumPages := 1 // always have at least one page else NumPages := pred(aNewMem + AB_VMSPageSize) div AB_VMSPageSize; if (NumPages > AB_VMSMaxPages) then NumPages := AB_VMSMaxPages; {if the maximum number of pages means we have to shrink the current list, do so, tossing out the oldest pages first} if (NumPages < vmsPageList.Count) then begin for i := 1 to (vmsPageList.Count - NumPages) do begin {find the oldest page} vmsFindOldestPage(OldestPageNum, Page); {if it is dirty, write it out to the swap file} if Page^.vpDirty then begin vmsSwapFileWrite(Page); end; {remove it from the page list} vmsPageList.Delete(OldestPageNum); {free the page memory} Dispose(Page); end; { Reset cache to the first page in case the cached page was deleted. } vmsCachePage := vmsPageList[0]; end; {remember our new max number of pages} vmsMaxPages := NumPages; Result := NumPages * AB_VMSPageSize; end; {--------} procedure TAbVirtualMemoryStream.vmsFindOldestPage(out OldestInx : Longint; out OldestPage: PvmsPage); var OldestLRU : Longint; Inx : integer; Page : PvmsPage; begin OldestInx := -1; OldestLRU := LastLRUValue; for Inx := 0 to pred(vmsPageList.Count) do begin Page := PvmsPage(vmsPageList[Inx]); if (Page^.vpLRU < OldestLRU) then begin OldestInx := Inx; OldestLRU := Page^.vpLRU; OldestPage := Page; end; end; end; {--------} function TAbVirtualMemoryStream.vmsGetNextLRU : Longint; var Inx : integer; begin if (vmsLRU = LastLRUValue) then begin {reset all LRUs in list} for Inx := 0 to pred(vmsPageList.Count) do PvmsPage(vmsPageList[Inx])^.vpLRU := 0; vmsLRU := 0; end; inc(vmsLRU); Result := vmsLRU; end; {--------} function TAbVirtualMemoryStream.vmsGetPageForOffset(aOffset : Int64) : PvmsPage; var Page : PvmsPage; PageOfs : Int64; L, M, R : integer; OldestPageNum : integer; CreatedNewPage: boolean; begin {using a sequential or a binary search (depending on the number of pages), try to find the page in the cache; we'll do a sequential search if the number of pages is very small, eg less than 4} if (vmsPageList.Count < 4) then begin L := vmsPageList.Count; for M := 0 to pred(vmsPageList.Count) do begin Page := PvmsPage(vmsPageList[M]); PageOfs := Page^.vpStmOfs; if (aOffset < PageOfs) then begin L := M; Break; end; if (aOffset = PageOfs) then begin Page^.vpLRU := vmsGetNextLRU; vmsCachePage := Page; Result := Page; Exit; end; end; end else {we need to do a binary search} begin L := 0; R := pred(vmsPageList.Count); repeat M := (L + R) div 2; Page := PvmsPage(vmsPageList[M]); PageOfs := Page^.vpStmOfs; if (aOffset < PageOfs) then R := pred(M) else if (aOffset > PageOfs) then L := succ(M) else {aOffset = PageOfs} begin Page^.vpLRU := vmsGetNextLRU; vmsCachePage := Page; Result := Page; Exit; end; until (L > R); end; {if we get here the page for the offset is not present in the page list, and once created/loaded, the page should be inserted at L} {enter a try..except block so that if a new page is created and an exception occurs, the page is freed} CreatedNewPage := false; Result := nil; try {if there is room to insert a new page, create one ready} if (vmsPageList.Count < vmsMaxPages) then begin New(Page); CreatedNewPage := true; end {otherwise there is no room for the insertion, so find the oldest page in the list and discard it} else {vmsMaxPages <= vmsPageList.Count} begin {find the oldest page} vmsFindOldestPage(OldestPageNum, Page); {if it is dirty, write it out to the swap file} if Page^.vpDirty then begin vmsSwapFileWrite(Page); end; {remove it from the page list} vmsPageList.Delete(OldestPageNum); {patch up the insertion point, in case the page just deleted was before it} if (OldestPageNum < L) then dec(L); end; {set all the page fields} with Page^ do begin vpStmOfs := aOffset; vpLRU := vmsGetNextLRU; vpDirty := False; vmsSwapFileRead(Page); end; {insert the page into the correct spot} vmsPageList.Insert(L, pointer(Page)); {return the page, remembering to save it in the cache} vmsCachePage := Page; Result := Page; except if CreatedNewPage then Dispose(Page); raise; end;{try..except} end; {--------} procedure TAbVirtualMemoryStream.vmsSetMaxMemToUse(aNewMem : Longword); begin vmsMaxMemToUse := vmsAlterPageList(aNewMem); end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileCreate; begin if (vmsSwapHandle = 0) then begin vmsSwapFileName := AbCreateTempFile(vmsSwapFileDir); vmsSwapHandle := mbFileOpen(vmsSwapFileName, fmOpenReadWrite); if (vmsSwapHandle <= 0) then begin vmsSwapHandle := 0; mbDeleteFile(vmsSwapFileName); raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName ); end; vmsSwapFileSize := 0; end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileDestroy; begin if (vmsSwapHandle <> 0) then begin FileClose(vmsSwapHandle); mbDeleteFile(vmsSwapFileName); vmsSwapHandle := 0; end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileRead(aPage : PvmsPage); var BytesRead : Longint; SeekResult: Int64; begin if (vmsSwapHandle = 0) or (aPage^.vpStmOfs >= vmsSwapFileSize) then begin {there is nothing to be read from the disk (either the swap file doesn't exist or it's too small) so zero out the page data} FillChar(aPage^.vpData, AB_VMSPageSize, 0) end else {there is something to be read from the swap file} begin SeekResult := FileSeek(vmsSwapHandle, aPage^.vpStmOfs, 0); if (SeekResult = -1) then raise EAbVMSSeekFail.Create( vmsSwapFileName ); BytesRead := FileRead(vmsSwapHandle, aPage^.vpData, AB_VMSPageSize); if (BytesRead <> AB_VMSPageSize) then raise EAbVMSReadFail.Create( AB_VMSPageSize, vmsSwapFileName ); end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileWrite(aPage : PvmsPage); var NewPos : Int64; SeekResult: Int64; BytesWritten : Longint; begin if (vmsSwapHandle = 0) then vmsSwapFileCreate; SeekResult := FileSeek(vmsSwapHandle, aPage^.vpStmOfs, 0); if (SeekResult = -1) then raise EAbVMSSeekFail.Create( vmsSwapFileName ); BytesWritten := FileWrite(vmsSwapHandle, aPage^.vpData, AB_VMSPageSize); if BytesWritten <> AB_VMSPageSize then raise EAbVMSWriteFail.Create( AB_VMSPageSize, vmsSwapFileName ); NewPos := aPage^.vpStmOfs + AB_VMSPageSize; if (NewPos > vmsSwapFileSize) then vmsSwapFileSize := NewPos; end; {--------} function TAbVirtualMemoryStream.Write(const Buffer; Count : Longint) : Longint; var BufPtr : PByte; Page : PvmsPage; PageDataInx : integer; Posn : Int64; BytesToGo : Int64; BytesToWrite: Int64; StartOfs : Int64; begin {writing is complicated by the fact we can only write in chunks of AB_VMSPageSize: we need to partition out the overall write into a write to a partial page, zero or more writes to complete pages and then a possible write to a partial page} {initialise some variables, note that the complex calc in the expression for PageDataInx is the offset of the start of the page where Posn is found.} BufPtr := @Buffer; Posn := vmsPosition; PageDataInx := Posn - (Posn and (not pred(AB_VMSPageSize))); BytesToWrite := AB_VMSPageSize - PageDataInx; {calculate the actual number of bytes to write} BytesToGo := Count; Result := BytesToGo; {while we have bytes to write, write them} while (BytesToGo <> 0) do begin if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; StartOfs := Posn and (not pred(AB_VMSPageSize)); if (vmsCachePage^.vpStmOfs = StartOfs) then Page := vmsCachePage else Page := vmsGetPageForOffset(StartOfs); Move(BufPtr^, Page^.vpData[PageDataInx], BytesToWrite); Page^.vpDirty := True; dec(BytesToGo, BytesToWrite); inc(Posn, BytesToWrite); inc(BufPtr, BytesToWrite); PageDataInx := 0; BytesToWrite := AB_VMSPageSize; end; {remember our new position} vmsPosition := Posn; {if we've grown the stream, make a note of it} if (vmsPosition > vmsSize) then vmsSize := vmsPosition; end; {====================================================================} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abutils.pas0000644000175000001440000012143715104114162022567 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUtils.pas *} {*********************************************************} {* ABBREVIA: Utility classes and routines *} {*********************************************************} unit AbUtils; {$I AbDefine.inc} interface uses {$IFDEF MSWINDOWS} Windows, DCWindows, DCConvertEncoding, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} {$IFDEF FPCUnixAPI} baseunix, {$IFDEF Linux} initc, {$ENDIF} unix, {$ENDIF} {$IFDEF PosixAPI} Posix.SysStatvfs, Posix.SysStat, Posix.Utime, Posix.Base, Posix.Unistd, Posix.Fcntl, Posix.SysTypes, {$ENDIF} {$IFDEF UNIX} DCClassesUtf8, {$ENDIF} DateUtils, SysUtils, Classes; type {describe the pending action for an archive item} TAbArchiveAction = (aaFailed, aaNone, aaAdd, aaDelete, aaFreshen, aaMove, aaReplace, aaStreamAdd); TAbProcessType = (ptAdd, ptDelete, ptExtract, ptFreshen, ptMove, ptReplace, ptFoundUnhandled); TAbLogType = (ltAdd, ltDelete, ltExtract, ltFreshen, ltMove, ltReplace, ltStart, ltFoundUnhandled); TAbErrorClass = (ecAbbrevia, ecInOutError, ecFilerError, ecFileCreateError, ecFileOpenError, ecCabError, ecOther); const AbPathDelim = PathDelim; { Delphi/Linux constant } AbPathSep = PathSep; { Delphi/Linux constant } AbDosPathDelim = '\'; AbUnixPathDelim = '/'; AbDosPathSep = ';'; AbUnixPathSep = ':'; AbDosAnyFile = '*.*'; AbUnixAnyFile = '*'; AbAnyFile = {$IFDEF UNIX} AbUnixAnyFile; {$ELSE} AbDosAnyFile; {$ENDIF} AbThisDir = '.'; AbParentDir = '..'; type TAbArchiveType = (atUnknown, atZip, atSpannedZip, atSelfExtZip, atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar, atXz, atXzippedTar, atLzma, atLzmaTar, atZstd, atZstdTar); {$IF NOT DECLARED(DWORD)} type DWORD = LongWord; {$IFEND} {$IF NOT DECLARED(PtrInt)} type // Delphi 7-2007 declared NativeInt incorrectly {$IFDEF CPU386} PtrInt = LongInt; PtrUInt = LongWord; {$ELSE} PtrInt = NativeInt; PtrUInt = NativeUInt; {$ENDIF} {$IFEND} { Unicode backwards compatibility types } {$IF NOT DECLARED(RawByteString)} type RawByteString = AnsiString; {$IFEND} { System-encoded SBCS string (formerly AnsiString) } type AbSysString = {$IFDEF Posix}UTF8String{$ELSE}AnsiString{$ENDIF}; const AbCrc32Table : array[0..255] of DWord = ( $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, $1db71064, $6ab020f2, $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, $fa0f3d63, $8d080df5, $3b6e20c8, $4c69105e, $d56041e4, $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, $35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59, $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, $b8bda50f, $2802b89e, $5f058808, $c60cd9b2, $b10be924, $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, $76dc4190, $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433, $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, $6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, $65b0d9c6, $12b7e950, $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65, $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, $4369e96a, $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, $5005713c, $270241aa, $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81, $b7bd5c3b, $c0ba6cad, $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, $73dc1683, $e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, $196c3671, $6e6b06e7, $fed41b76, $89d32be0, $10da7a5a, $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, $d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b, $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, $4669be79, $cb61b38c, $bc66831a, $256fd2a0, $5268e236, $cc0c7795, $bb0b4703, $220216b9, $5505262f, $c5ba3bbe, $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d, $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, $86d3d2d4, $f1d4e242, $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777, $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69, $616bffd3, $166ccf45, $a00ae278, $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, $4969474d, $3e6e77db, $aed16a4a, $d9d65adc, $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693, $54de5729, $23d967bf, $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d ); type TAbPathType = ( ptNone, ptRelative, ptAbsolute ); {===Helper functions===} function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; procedure AbCreateDirectory( const Path : string ); {creates the requested directory tree. CreateDir is insufficient, because if you have a path x:\dir, and request x:\dir\sub1\sub2, (/dir and /dir/sub1/sub2 on Unix) it fails.} function AbCreateTempFile(const Dir : string) : string; function AbGetTempDirectory : string; {-Return the system temp directory} function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; function AbDrive(const ArchiveName : string) : Char; function AbDriveIsRemovable(const ArchiveName : string) : Boolean; function AbFileMatch(FileName : string; FileMask : string ) : Boolean; {see if FileName matches FileMask} procedure AbFindFiles(const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); procedure AbFindFilesEx( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); function AbAddBackSlash(const DirName : string) : string; function AbFindNthSlash( const Path : string; n : Integer ) : Integer; {return the position of the character just before the nth backslash} function AbGetDriveFreeSpace(const ArchiveName : string) : Int64; {return the available space on the specified drive } function AbGetPathType( const Value : string ) : TAbPathType; {returns path type - none, relative or absolute} {$IFDEF MSWINDOWS} function AbGetShortFileSpec(const LongFileSpec : string ) : string; {$ENDIF} procedure AbIncFilename( var Filename : string; Value : Word ); procedure AbParseFileName( FileSpec : string; out Drive : string; out Path : string; out FileName : string ); procedure AbParsePath( Path : string; SubPaths : TStrings ); {- break abart path into subpaths --- Path : abbrevia/examples -> SubPaths[0] = abbrevia SubPaths[1] = examples} function AbPatternMatch(const Source : string; iSrc : Integer; const Pattern : string; iPat : Integer ) : Boolean; { recursive routine to see if the source string matches the pattern. Both ? and * wildcard characters are allowed.} function AbPercentage(V1, V2 : Int64) : Byte; {-Returns the ratio of V1 to V2 * 100} procedure AbStripDots( var FName : string ); {-strips relative path information} procedure AbStripDrive( var FName : string ); {-strips the drive off a filename} procedure AbFixName( var FName : string ); {-changes backslashes to forward slashes} procedure AbUnfixName( var FName : string ); {-changes forward slashes to backslashes} procedure AbUpdateCRC( var CRC : LongInt; const Buffer; Len : Integer ); function AbUpdateCRC32(CurByte : Byte; CurCrc : LongInt) : LongInt; {-Returns an updated crc32} function AbCRC32Of( const aValue : RawByteString ) : LongInt; function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; const AB_SPAN_VOL_LABEL = 'PKBACK# %3.3d'; function AbGetVolumeLabel(Drive : Char) : string; procedure AbSetSpanVolumeLabel(Drive: Char; VolNo : Integer); function AbTestSpanVolumeLabel(Drive: Char; VolNo : Integer): Boolean; procedure AbSetFileAttr(const aFileName : string; aAttr: Integer); {-Sets platform-native file attributes (DOS attr or Unix mode)} function AbFileGetSize(const aFileName : string) : Int64; type TAbAttrExRec = record Time: TDateTime; Size: Int64; Attr: Integer; Mode: {$IFDEF UNIX}mode_t{$ELSE}Cardinal{$ENDIF}; end; function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; function AbSwapLongEndianness(Value : LongInt): LongInt; { date and time stuff } const Date1900 {: LongInt} = $0001AC05; {Julian day count for 01/01/1900 -- TDateTime Start Date} Date1970 {: LongInt} = $00020FE4; {Julian day count for 01/01/1970 -- Unix Start Date} Unix0Date: TDateTime = 25569; {Date1970 - Date1900} SecondsInDay = 86400; {Number of seconds in a day} SecondsInHour = 3600; {Number of seconds in an hour} SecondsInMinute = 60; {Number of seconds in a minute} HoursInDay = 24; {Number of hours in a day} MinutesInHour = 60; {Number of minutes in an hour} MinutesInDay = 1440; {Number of minutes in a day} function AbUnixTimeToLocalDateTime(UnixTime : Int64) : TDateTime; function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : Int64; function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime; function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt; function AbGetFileTime(const aFileName: string): TDateTime; function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; { file attributes } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; function AbUnix2DosFileAttributes(Attr: LongInt): LongInt; { UNIX File Types and Permissions } const AB_FMODE_FILE = $0000; AB_FMODE_FIFO = $1000; AB_FMODE_CHARSPECFILE = $2000; AB_FMODE_DIR = $4000; AB_FMODE_BLOCKSPECFILE = $6000; AB_FMODE_FILE2 = $8000; AB_FMODE_FILELINK = $A000; AB_FMODE_SOCKET = $C000; AB_FPERMISSION_OWNERREAD = $0100; { read by owner } AB_FPERMISSION_OWNERWRITE = $0080; { write by owner } AB_FPERMISSION_OWNEREXECUTE = $0040; { execute/search by owner } AB_FPERMISSION_GROUPREAD = $0020; { read by group } AB_FPERMISSION_GROUPWRITE = $0010; { write by group } AB_FPERMISSION_GROUPEXECUTE = $0008; { execute/search by group } AB_FPERMISSION_OTHERREAD = $0004; { read by other } AB_FPERMISSION_OTHERWRITE = $0002; { write by other } AB_FPERMISSION_OTHEREXECUTE = $0001; { execute/search by other } AB_FPERMISSION_GENERIC = AB_FPERMISSION_OWNERREAD or AB_FPERMISSION_OWNERWRITE or AB_FPERMISSION_GROUPREAD or AB_FPERMISSION_OTHERREAD; { Unicode backwards compatibility functions } {$IFNDEF UNICODE} function CharInSet(C: AnsiChar; CharSet: TSysCharSet): Boolean; {$ENDIF} implementation uses StrUtils, LazUTF8, AbConst, AbExcept, DCOSUtils, DCStrUtils, DCBasicTypes, DCDateTimeUtils; (* {$IF DEFINED(FPCUnixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external clib name 'mktemp'; {$ELSEIF DEFINED(PosixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external libc name _PU + 'mktemp'; {$IFEND} {$IF DEFINED(FPCUnixAPI) AND DEFINED(Linux)} // FreePascal libc definitions type nl_item = cint; const __LC_CTYPE = 0; _NL_CTYPE_CLASS = (__LC_CTYPE shl 16); _NL_CTYPE_CODESET_NAME = (_NL_CTYPE_CLASS)+14; function nl_langinfo(__item: nl_item): PAnsiChar; cdecl; external clib name 'nl_langinfo'; {$IFEND} *) {===platform independent routines for platform dependent stuff=======} function ExtractShortName(const SR : TSearchRec) : string; begin {$IFDEF MSWINDOWS} {$WARN SYMBOL_PLATFORM OFF} if SR.FindData.cAlternateFileName[0] <> #0 then Result := SR.FindData.cAlternateFileName else Result := SR.FindData.cFileName; {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$IFDEF UNIX} Result := SR.Name; {$ENDIF} end; {====================================================================} { ========================================================================== } function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; {$IFDEF UNIX} var DesStream, SrcStream: TFileStreamEx; {$ENDIF} begin {$IFDEF UNIX} Result := False; if not FailIfExists or not mbFileExists(Destination) then try SrcStream := TFileStreamEx.Create(Source, fmOpenRead or fmShareDenyWrite); try DesStream := TFileStreamEx.Create(Destination, fmCreate); try DesStream.CopyFrom(SrcStream, 0); Result := True; finally DesStream.Free; end; finally SrcStream.Free; end; except // Ignore errors and just return false end; {$ENDIF UNIX} {$IFDEF MSWINDOWS} Result := CopyFileW(PWideChar(CeUtf8ToUtf16(Source)), PWideChar(CeUtf8ToUtf16(Destination)), FailIfExists); {$ENDIF MSWINDOWS} end; { -------------------------------------------------------------------------- } procedure AbCreateDirectory( const Path : string ); {creates the requested directory tree. CreateDir is insufficient, because if you have a path x:\dir, and request x:\dir\sub1\sub2, (/dir and /dir/sub1/sub2 on Unix) it fails.} var iStartSlash : Integer; i : Integer; TempPath : string; begin if mbDirectoryExists( Path ) then Exit; {see how much of the path currently exists} if Pos( '\\', Path ) > 0 then {UNC Path \\computername\sharename\path1..\pathn} iStartSlash := 5 else {standard Path drive:\path1..\pathn} iStartSlash := 2; repeat {find the Slash at iStartSlash} i := AbFindNthSlash( Path, iStartSlash ); {get a temp path to try: drive:\path1} TempPath := Copy( Path, 1, i ); {if it doesn't exist, create it} if not mbDirectoryExists( TempPath ) then if mbCreateDir( TempPath ) = False then Exit; inc( iStartSlash ); until ( Length( TempPath ) = Length( Path ) ); end; { -------------------------------------------------------------------------- } function AbCreateTempFile(const Dir : string) : string; begin Result := AbGetTempFile(Dir, True); end; { -------------------------------------------------------------------------- } function AbGetTempDirectory : string; begin Result:= SysToUTF8(GetTempDir); end; { -------------------------------------------------------------------------- } function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; var hFile: System.THandle; TempPath : String; begin if mbDirectoryExists(Dir) then TempPath := IncludeTrailingPathDelimiter(Dir) else TempPath := AbGetTempDirectory; Result := GetTempName(TempPath + 'VMS'); if CreateIt then begin hFile := mbFileCreate(Result); if hFile <> feInvalidHandle then FileClose(hFile); end; end; { -------------------------------------------------------------------------- } function AbDrive(const ArchiveName : string) : Char; var iPos: Integer; Path : string; begin Path := ExpandFileName(ArchiveName); iPos := Pos(':', Path); if (iPos <= 0) then Result := 'A' else Result := Path[1]; end; { -------------------------------------------------------------------------- } function AbDriveIsRemovable(const ArchiveName : string) : Boolean; {$IFDEF MSWINDOWS} var Path: string; {$ENDIF} begin {$IFDEF MSWINDOWS} Path := ExpandFileName(ArchiveName); if AnsiStartsText('\\?\UNC\', Path) then Delete(Path, 1, 8) else if AnsiStartsText('\\?\', Path) then Delete(Path, 1, 4); Path := IncludeTrailingPathDelimiter(ExtractFileDrive(Path)); Result := GetDriveType(PChar(Path)) = DRIVE_REMOVABLE; {$ENDIF} {$IFDEF LINUX} {LINUX -- Following may not cover all the bases} Result := AnsiStartsText('/mnt/floppy', ExtractFilePath(ExpandFileName(ArchiveName))); {$ENDIF} {$IFDEF DARWIN} Result := False; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbGetDriveFreeSpace(const ArchiveName : string) : Int64; { attempt to find free space (in bytes) on drive/volume, returns -1 if fails for some reason } {$IFDEF MSWINDOWS} var FreeAvailable, TotalSpace: Int64; begin if GetDiskFreeSpaceExW(PWideChar(CeUtf8ToUtf16(ExtractFilePath(ExpandFileName(ArchiveName)))), FreeAvailable, TotalSpace, nil) then Result := FreeAvailable else Result := -1; {$ENDIF} {$IFDEF UNIX} var FStats : {$IFDEF PosixAPI}_statvfs{$ELSE}TStatFs{$ENDIF}; begin {$IF DEFINED(LibcAPI)} if statfs(PAnsiChar(ExtractFilePath(ArchiveName)), FStats) = 0 then Result := Int64(FStats.f_bAvail) * Int64(FStats.f_bsize) {$ELSEIF DEFINED(FPCUnixAPI)} if fpStatFS(PAnsiChar(UTF8ToSys(ExtractFilePath(ArchiveName))), @FStats) = 0 then Result := Int64(FStats.bAvail) * Int64(FStats.bsize) {$ELSEIF DEFINED(PosixAPI)} if statvfs(PAnsiChar(AbSysString(ExtractFilePath(ArchiveName))), FStats) = 0 then Result := Int64(FStats.f_bavail) * Int64(FStats.f_bsize) {$IFEND} else Result := -1; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbFileMatch(FileName: string; FileMask: string ): Boolean; {see if FileName matches FileMask} var DirMatch : Boolean; MaskDir : string; begin //FileName := UpperCase( FileName ); //FileMask := UpperCase( FileMask ); MaskDir := ExtractFilePath( FileMask ); if MaskDir = '' then DirMatch := True else DirMatch := AbPatternMatch( ExtractFilePath( FileName ), 1, MaskDir, 1 ); Result := DirMatch and AbPatternMatch( ExtractFileName( FileName ), 1, ExtractFileName( FileMask ), 1 ); end; { -------------------------------------------------------------------------- } procedure AbFindFiles( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); var NewFile : string; SR : TSearchRec; Found : Integer; NameMask: string; begin Found := FindFirst( FileMask, SearchAttr, SR ); if Found = 0 then begin try NameMask := ExtractFileName(FileMask); while Found = 0 do begin NewFile := ExtractFilePath( FileMask ) + SR.Name; if (SR.Name <> AbThisDir) and (SR.Name <> AbParentDir) and AbPatternMatch(SR.Name, 1, NameMask, 1) then if (SR.Attr and faDirectory) <> 0 then FileList.Add( NewFile + PathDelim ) else FileList.Add( NewFile ); Found := FindNext( SR ); end; finally FindClose( SR ); end; end; if not Recurse then Exit; NewFile := ExtractFilePath( FileMask ); if ( NewFile <> '' ) and ( NewFile[Length(NewFile)] <> AbPathDelim) then NewFile := NewFile + AbPathDelim; NewFile := NewFile + AbAnyFile; Found := FindFirst( NewFile, faDirectory or SearchAttr, SR ); if Found = 0 then begin try while ( Found = 0 ) do begin if ( SR.Name <> AbThisDir ) and ( SR.Name <> AbParentDir ) and ((SR.Attr and faDirectory) > 0 ) then AbFindFiles( ExtractFilePath( NewFile ) + SR.Name + AbPathDelim + ExtractFileName( FileMask ), SearchAttr, FileList, True ); Found := FindNext( SR ); end; finally FindClose( SR ); end; end; end; { -------------------------------------------------------------------------- } procedure AbFindFilesEx( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); var I, J: Integer; MaskPart: string; begin I := 1; while I <= Length(FileMask) do begin J := I; while (I <= Length(FileMask)) and (FileMask[I] <> AbPathSep) do Inc(I); MaskPart := Trim(Copy(FileMask, J, I - J)); if (I <= Length(FileMask)) and (FileMask[I] = AbPathSep) then Inc(I); AbFindFiles(MaskPart, SearchAttr, FileList, Recurse); end; end; { -------------------------------------------------------------------------- } function AbAddBackSlash(const DirName : string) : string; { Add a default slash to a directory name } const AbDelimSet : set of AnsiChar = [AbPathDelim, ':', #0]; begin Result := DirName; if Length(DirName) = 0 then Exit; if not CharInSet(DirName[Length(DirName)], AbDelimSet) then Result := DirName + AbPathDelim; end; { -------------------------------------------------------------------------- } function AbFindNthSlash( const Path : string; n : Integer ) : Integer; { return the position of the character just before the nth slash } var i : Integer; Len : Integer; iSlash : Integer; begin Len := Length( Path ); Result := Len; iSlash := 0; i := 0; while i <= Len do begin if Path[i] = AbPathDelim then begin inc( iSlash ); if iSlash = n then begin Result := pred( i ); break; end; end; inc( i ); end; end; { -------------------------------------------------------------------------- } function AbGetPathType( const Value : string ) : TAbPathType; { returns path type - none, relative or absolute } begin Result := ptNone; {$IFDEF MSWINDOWS} {check for drive/unc info} if ( Pos( '\\', Value ) > 0 ) or ( Pos( ':', Value ) > 0 ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (Length(Value) > 0) and (Value[1] = AbPathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( AbPathDelim, Value ) > 0 ) or ( Pos( AB_ZIPPATHDELIM, Value ) > 0 ) then Result := ptRelative; end; { -------------------------------------------------------------------------- } {$IFDEF MSWINDOWS} {$WARN SYMBOL_PLATFORM OFF} function AbGetShortFileSpec(const LongFileSpec : string ) : string; var SR : TSearchRec; Search : string; Drive : string; Path : string; FileName : string; Found : Integer; SubPaths : TStrings; i : Integer; begin AbParseFileName( LongFileSpec, Drive, Path, FileName ); SubPaths := TStringList.Create; try AbParsePath( Path, SubPaths ); Search := Drive; Result := Search + AbPathDelim; if SubPaths.Count > 0 then for i := 0 to pred( SubPaths.Count ) do begin Search := Search + AbPathDelim + SubPaths[i]; Found := FindFirst( Search, faHidden + faSysFile + faDirectory, SR ); if Found <> 0 then raise EAbException.Create( 'Path not found' ); try Result := Result + ExtractShortName(SR) + AbPathDelim; finally FindClose( SR ); end; end; Search := Search + AbPathDelim + FileName; Found := FindFirst( Search, faReadOnly + faHidden + faSysFile + faArchive, SR ); if Found <> 0 then raise EAbFileNotFound.Create; try Result := Result + ExtractShortName(SR); finally FindClose( SR ); end; finally SubPaths.Free; end; end; {$WARN SYMBOL_PLATFORM ON} {$ENDIF} { -------------------------------------------------------------------------- } procedure AbIncFilename( var Filename : string; Value : Word ); { place value at the end of filename, e.g. Files.C04 } var Ext : string; I : Word; begin I := (Value + 1) mod 100; Ext := ExtractFileExt(Filename); if (Length(Ext) < 2) then Ext := '.' + Format('%.2d', [I]) else Ext := Ext[1] + Ext[2] + Format('%.2d', [I]); Filename := ChangeFileExt(Filename, Ext); end; { -------------------------------------------------------------------------- } procedure AbParseFileName( FileSpec : string; out Drive : string; out Path : string; out FileName : string ); var i : Integer; iColon : Integer; iStartSlash : Integer; begin if Pos( AB_ZIPPATHDELIM, FileSpec ) > 0 then AbUnfixName( FileSpec ); FileName := ExtractFileName( FileSpec ); Path := ExtractFilePath( FileSpec ); {see how much of the path currently exists} iColon := Pos( ':', Path ); if Pos( '\\', Path ) > 0 then begin {UNC Path \\computername\sharename\path1..\pathn} {everything up to the 4th slash is the drive} iStartSlash := 4; i := AbFindNthSlash( Path, iStartSlash ); Drive := Copy( Path, 1, i ); Delete( Path, 1, i + 1 ); end else if iColon > 0 then begin Drive := Copy( Path, 1, iColon ); Delete( Path, 1, iColon ); if Path[1] = AbPathDelim then Delete( Path, 1, 1 ); end; end; { -------------------------------------------------------------------------- } procedure AbParsePath( Path : string; SubPaths : TStrings ); { break abart path into subpaths --- Path : abbrevia/examples > SubPaths[0] = abbrevia SubPaths[1] = examples} var i : Integer; iStart : Integer; iStartSlash : Integer; SubPath : string; begin if Path = '' then Exit; if Path[ Length( Path ) ] = AbPathDelim then Delete( Path, Length( Path ), 1 ); iStart := 1; iStartSlash := 1; repeat {find the Slash at iStartSlash} i := AbFindNthSlash( Path, iStartSlash ); {get the subpath} SubPath := Copy( Path, iStart, i - iStart + 1 ); iStart := i + 2; inc( iStartSlash ); SubPaths.Add( SubPath ); until ( i = Length( Path ) ); end; { -------------------------------------------------------------------------- } function AbPatternMatch(const Source : string; iSrc : Integer; const Pattern : string; iPat : Integer ) : Boolean; { recursive routine to see if the source string matches the pattern. Both ? and * wildcard characters are allowed. Compares Source from iSrc to Length(Source) to Pattern from iPat to Length(Pattern)} var Matched : Boolean; k : Integer; begin if Length( Source ) = 0 then begin Result := Length( Pattern ) = 0; Exit; end; if iPat = 1 then begin if ( CompareStr( Pattern, AbDosAnyFile) = 0 ) or ( CompareStr( Pattern, AbUnixAnyFile ) = 0 ) then begin Result := True; Exit; end; end; if Length( Pattern ) = 0 then begin Result := (Length( Source ) - iSrc + 1 = 0); Exit; end; while True do begin if ( Length( Source ) < iSrc ) and ( Length( Pattern ) < iPat ) then begin Result := True; Exit; end; if Length( Pattern ) < iPat then begin Result := False; Exit; end; if Pattern[iPat] = '*' then begin k := iPat; if ( Length( Pattern ) < iPat + 1 ) then begin Result := True; Exit; end; while True do begin Matched := AbPatternMatch( Source, k, Pattern, iPat + 1 ); if Matched or ( Length( Source ) < k ) then begin Result := Matched; Exit; end; inc( k ); end; end else begin if ( (Pattern[iPat] = '?') and ( Length( Source ) <> iSrc - 1 ) ) or ( Pattern[iPat] = Source[iSrc] ) then begin inc( iPat ); inc( iSrc ); end else begin Result := False; Exit; end; end; end; end; { -------------------------------------------------------------------------- } function AbPercentage(V1, V2 : Int64): Byte; { Returns the ratio of V1 to V2 * 100 } begin if V2 <= 0 then Result := 0 else if V1 >= V2 then Result := 100 else Result := (V1 * 100) div V2; end; { -------------------------------------------------------------------------- } procedure AbStripDots( var FName : string ); { strips relative path information, e.g. ".."} begin while Pos( AbParentDir + AbPathDelim, FName ) = 1 do System.Delete( FName, 1, 3 ); end; { -------------------------------------------------------------------------- } procedure AbStripDrive( var FName : string ); { strips the drive off a filename } var Drive, Path, Name : string; begin AbParseFileName( FName, Drive, Path, Name ); FName := Path + Name; end; { -------------------------------------------------------------------------- } procedure AbFixName( var FName : string ); { changes backslashes to forward slashes } var i : Integer; begin for i := 1 to Length( FName ) do if FName[i] = AbPathDelim then FName[i] := AB_ZIPPATHDELIM; end; { -------------------------------------------------------------------------- } procedure AbUnfixName( var FName : string ); { changes forward slashes to backslashes } var i : Integer; begin for i := 1 to Length( FName ) do if FName[i] = AB_ZIPPATHDELIM then FName[i] := AbPathDelim; end; { -------------------------------------------------------------------------- } procedure AbUpdateCRC( var CRC : LongInt; const Buffer; Len : Integer ); var BufPtr : PByte; i : Integer; CRCTemp : DWORD; begin BufPtr := @Buffer; CRCTemp := CRC; for i := 0 to pred( Len ) do begin CRCTemp := AbCrc32Table[ Byte(CrcTemp) xor (BufPtr^) ] xor ((CrcTemp shr 8) and $00FFFFFF); Inc(BufPtr); end; CRC := CRCTemp; end; { -------------------------------------------------------------------------- } function AbUpdateCRC32(CurByte : Byte; CurCrc : LongInt) : LongInt; { Return the updated 32bit CRC } { Normally a good candidate for basm, but Delphi32's code generation couldn't be beat on this one!} begin Result := DWORD(AbCrc32Table[ Byte(CurCrc xor LongInt( CurByte ) ) ] xor ((CurCrc shr 8) and DWORD($00FFFFFF))); end; { -------------------------------------------------------------------------- } function AbCRC32Of( const aValue : RawByteString ) : LongInt; begin Result := -1; AbUpdateCRC(Result, aValue[1], Length(aValue)); Result := not Result; end; { -------------------------------------------------------------------------- } function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; {$IFDEF MSWINDOWS} var Temp : UnicodeString; Vol : array[0..11] of WideChar; Root : array[0..3] of WideChar; {$ENDIF} begin {$IFDEF MSWINDOWS} Temp := CeUtf8ToUtf16(VolName); StrPCopyW(Root, '%:' + AbPathDelim); Root[0] := Drive; if Length(Temp) > 11 then SetLength(Temp, 11); StrPCopyW(Vol, Temp); if Windows.SetVolumeLabelW(Root, Vol) then Result := 0 else Result := GetLastError; {$ENDIF MSWINDOWS} {$IFDEF UNIX} { Volume labels not supported on Unix } Result := 0; {$ENDIF UNIX} end; { -------------------------------------------------------------------------- } {$IFDEF MSWINDOWS} function AbOffsetFromUTC: LongInt; { local timezone's offset from UTC in seconds (UTC = local + bias) } var TZI: TTimeZoneInformation; begin case GetTimeZoneInformation(TZI) of TIME_ZONE_ID_UNKNOWN: Result := TZI.Bias; TIME_ZONE_ID_DAYLIGHT: Result := TZI.Bias + TZI.DaylightBias; TIME_ZONE_ID_STANDARD: Result := TZI.Bias + TZI.StandardBias else Result := 0 end; Result := Result * SecondsInMinute; end; {$ENDIF} { -------------------------------------------------------------------------- } function AbUnixTimeToLocalDateTime(UnixTime : Int64) : TDateTime; { convert UTC unix date to Delphi TDateTime in local timezone } {$IFDEF MSWINDOWS} var Hrs, Mins, Secs : Word; TodaysSecs : LongInt; Time: TDateTime; begin UnixTime := UnixTime - AbOffsetFromUTC; TodaysSecs := UnixTime mod SecondsInDay; Hrs := TodaysSecs div SecondsInHour; TodaysSecs := TodaysSecs - (Hrs * SecondsInHour); Mins := TodaysSecs div SecondsInMinute; Secs := TodaysSecs - (Mins * SecondsInMinute); if TryEncodeTime(Hrs, Mins, Secs, 0, Time) then Result := Unix0Date + (UnixTime div SecondsInDay) + Time else Result := 0; {$ENDIF} {$IFDEF UNIX} begin Result := UnixFileTimeToDateTime(TUnixFileTime(UnixTime)); {$ENDIF} end; { -------------------------------------------------------------------------- } function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : Int64; { convert local Delphi TDateTime to UTC unix date } {$IFDEF MSWINDOWS} var Hrs, Mins, Secs, MSecs : Word; Dt, Tm : TDateTime; begin Dt := Trunc(DateTime); Tm := DateTime - Dt; if Dt < Unix0Date then Result := 0 else Result := Trunc(Dt - Unix0Date) * SecondsInDay; DecodeTime(Tm, Hrs, Mins, Secs, MSecs); Result := Result + (Hrs * SecondsInHour) + (Mins * SecondsInMinute) + Secs; Result := Result + AbOffsetFromUTC; {$ENDIF} {$IFDEF UNIX} begin Result := Int64(DateTimeToUnixFileTime(DateTime)); {$ENDIF} end; { -------------------------------------------------------------------------- } function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime; var Yr, Mo, Dy : Word; Hr, Mn, S : Word; begin Yr := FileDate shr 9 + 1980; Mo := FileDate shr 5 and 15; if Mo < 1 then Mo := 1; if Mo > 12 then Mo := 12; Dy := FileDate and 31; if Dy < 1 then Dy := 1; if Dy > DaysInAMonth(Yr, Mo) then Dy := DaysInAMonth(Yr, Mo); Hr := FileTime shr 11; if Hr > 23 then Hr := 23; Mn := FileTime shr 5 and 63; if Mn > 59 then Mn := 59; S := FileTime and 31 shl 1; if S > 59 then S := 59; Result := EncodeDate(Yr, Mo, Dy) + EncodeTime(Hr, Mn, S, 0); end; function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt; {$IFDEF MSWINDOWS} begin Result := DateTimeToFileDate(Value); {$ENDIF MSWINDOWS} {$IFDEF UNIX} var Yr, Mo, Dy : Word; Hr, Mn, S, MS: Word; begin DecodeDate(Value, Yr, Mo, Dy); if (Yr < 1980) or (Yr > 2107) then { outside DOS file date year range } Yr := 1980; DecodeTime(Value, Hr, Mn, S, MS); LongRec(Result).Lo := (S shr 1) or (Mn shl 5) or (Hr shl 11); LongRec(Result).Hi := Dy or (Mo shl 5) or (Word(Yr - 1980) shl 9); {$ENDIF UNIX} end; { -------------------------------------------------------------------------- } function AbGetFileTime(const aFileName: string): TDateTime; var Attr: TAbAttrExRec; begin AbFileGetAttrEx(aFileName, Attr); Result := Attr.Time; end; function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; begin Result:= mbFileSetTime(aFileName, DateTimeToFileTime(aValue)); end; { -------------------------------------------------------------------------- } function AbSwapLongEndianness(Value : LongInt): LongInt; { convert BigEndian <-> LittleEndian 32-bit value } type TCastArray = array [0..3] of Byte; var i : Integer; begin for i := 3 downto 0 do TCastArray(Result)[3-i] := TCastArray(Value)[i]; end; { -------------------------------------------------------------------------- } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; begin {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := { default permissions } AB_FPERMISSION_OWNERREAD or AB_FPERMISSION_GROUPREAD or AB_FPERMISSION_OTHERREAD; if (Attr and faReadOnly) = 0 then Result := Result or AB_FPERMISSION_OWNERWRITE; if (Attr and faSymLink) <> 0 then Result := Result or AB_FMODE_FILELINK or AB_FPERMISSION_OWNEREXECUTE else if (Attr and faDirectory) <> 0 then Result := Result or AB_FMODE_DIR or AB_FPERMISSION_OWNEREXECUTE else Result := Result or AB_FMODE_FILE; {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } function AbUnix2DosFileAttributes(Attr: LongInt): LongInt; begin {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := 0; case (Attr and $F000) of AB_FMODE_FILE, AB_FMODE_FILE2: { standard file } Result := 0; AB_FMODE_DIR: { directory } Result := Result or faDirectory; AB_FMODE_FILELINK: { symlink} Result := Result or faSymLink; AB_FMODE_FIFO, AB_FMODE_CHARSPECFILE, AB_FMODE_BLOCKSPECFILE, AB_FMODE_SOCKET: Result := Result or faSysFile; end; if (Attr and AB_FPERMISSION_OWNERWRITE) <> AB_FPERMISSION_OWNERWRITE then Result := Result or faReadOnly; {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } procedure AbSetFileAttr(const aFileName : string; aAttr: Integer); begin {$IFDEF MSWINDOWS} mbFileSetAttr(aFileName, aAttr); {$ENDIF} {$IF DEFINED(LibcAPI) OR DEFINED(PosixAPI)} chmod(PAnsiChar(AbSysString(aFileName)), aAttr); {$ELSEIF DEFINED(FPCUnixAPI)} mbFileSetAttr(aFileName, aAttr); {$IFEND} end; { -------------------------------------------------------------------------- } function AbFileGetSize(const aFileName : string) : Int64; var SR: TAbAttrExRec; begin if AbFileGetAttrEx(aFileName, SR) then Result := SR.Size else Result := -1; end; { -------------------------------------------------------------------------- } function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; var {$IFDEF MSWINDOWS} FileDate: LongRec; FindData: TWin32FindDataW; LocalFileTime: Windows.TFileTime; {$ENDIF} {$IFDEF FPCUnixAPI} StatBuf: stat; {$ENDIF} {$IFDEF LibcAPI} StatBuf: TStatBuf64; {$ENDIF} {$IFDEF PosixAPI} StatBuf: _stat; {$ENDIF} begin aAttr.Time := 0; aAttr.Size := -1; aAttr.Attr := -1; aAttr.Mode := 0; {$IFDEF MSWINDOWS} Result := GetFileAttributesExW(PWideChar(UTF16LongName(aFileName)), GetFileExInfoStandard, @FindData); if Result then begin aAttr.Time := WinFileTimeToDateTime(FindData.ftLastWriteTime); LARGE_INTEGER(aAttr.Size).LowPart := FindData.nFileSizeLow; LARGE_INTEGER(aAttr.Size).HighPart := FindData.nFileSizeHigh; aAttr.Attr := FindData.dwFileAttributes; aAttr.Mode := AbDOS2UnixFileAttributes(FindData.dwFileAttributes); end; {$ENDIF} {$IFDEF UNIX} {$IFDEF FPCUnixAPI} if FollowLinks then Result := (FpStat(UTF8ToSys(aFileName), StatBuf) = 0) else Result := (FpLStat(UTF8ToSys(aFileName), StatBuf) = 0); {$ENDIF} {$IFDEF LibcAPI} // Work around Kylix QC#2761: Stat64, et al., are defined incorrectly Result := (__lxstat64(_STAT_VER, PAnsiChar(aFileName), StatBuf) = 0); {$ENDIF} {$IFDEF PosixAPI} Result := (stat(PAnsiChar(AbSysString(aFileName)), StatBuf) = 0); {$ENDIF} if Result then begin aAttr.Time := FileDateToDateTime(StatBuf.st_mtime); aAttr.Size := StatBuf.st_size; aAttr.Attr := AbUnix2DosFileAttributes(StatBuf.st_mode); aAttr.Mode := StatBuf.st_mode; end; {$ENDIF UNIX} end; const MAX_VOL_LABEL = 16; function AbGetVolumeLabel(Drive : Char) : string; {-Get the volume label for the specified drive.} {$IFDEF MSWINDOWS} var Root : WideString; Flags, MaxLength : DWORD; NameSize : Integer; VolName : WideString; {$ENDIF} begin {$IFDEF MSWINDOWS} NameSize := 0; Root := Drive + ':\'; SetLength(VolName, MAX_VOL_LABEL); Result := ''; if GetVolumeInformationW(PWideChar(Root), PWideChar(VolName), Length(VolName), nil, MaxLength, Flags, nil, NameSize) then Result := Utf16ToUtf8(VolName); {$ELSE} Result := ''; //Stop Gap, spanning support needs to be rethought for Unix {$ENDIF} end; procedure AbSetSpanVolumeLabel(Drive: Char; VolNo : Integer); begin AbWriteVolumeLabel(Format(AB_SPAN_VOL_LABEL, [VolNo]), Drive); end; function AbTestSpanVolumeLabel(Drive: Char; VolNo : Integer): Boolean; var VolLabel, TestLabel : string; begin TestLabel := Format(AB_SPAN_VOL_LABEL, [VolNo]); VolLabel := UpperCase(AbGetVolumeLabel(Drive)); Result := VolLabel = TestLabel; end; { Unicode backwards compatibility functions } {$IFNDEF UNICODE} function CharInSet(C: AnsiChar; CharSet: TSysCharSet): Boolean; begin Result := C in CharSet; end; {$ENDIF} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abunzprc.pas0000644000175000001440000012025215104114162022742 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUnzPrc.pas *} {*********************************************************} {* ABBREVIA: UnZip procedures *} {*********************************************************} unit AbUnzPrc; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbZipTyp; type TAbUnzipHelper = class( TObject ) protected {private} {internal variables} FOutWriter : TStream; FOutStream : TStream; FUnCompressedSize : LongInt; FCompressionMethod : TAbZipCompressionMethod; FDictionarySize : TAbZipDictionarySize; FShannonFanoTreeCount : Byte; FOutBuf : PAbByteArray; {output buffer} FOutSent : LongInt; {number of bytes sent to output buffer} FOutPos : Cardinal; {current position in output buffer} FBitSValid : Byte; {Number of valid bits} FInBuf : TAbByteArray4K; FInPos : Integer; {current position in input buffer} FInCnt : Integer; {number of bytes in input buffer} FInEof : Boolean; {set when stream read returns 0} FCurByte : Byte; {current input byte} FBitsLeft : Byte; {bits left to process in FCurByte} FZStream : TStream; protected procedure uzFlushOutBuf; {-Flushes the output buffer} function uzReadBits(Bits : Byte) : Integer; {-Read the specified number of bits} procedure uzReadNextPrim; {-does less likely part of uzReadNext} {$IFDEF UnzipImplodeSupport} procedure uzUnImplode; {-Extract an imploded file} {$ENDIF} {$IFDEF UnzipReduceSupport} procedure uzUnReduce; {-Extract a reduced file} {$ENDIF} {$IFDEF UnzipShrinkSupport} procedure uzUnShrink; {-Extract a shrunk file} {$ENDIF} procedure uzWriteByte(B : Byte); {write to output} public constructor Create( InputStream, OutputStream : TStream ); destructor Destroy; override; procedure Execute; property UnCompressedSize : LongInt read FUncompressedSize write FUncompressedSize; property CompressionMethod : TAbZipCompressionMethod read FCompressionMethod write FCompressionMethod; property DictionarySize : TAbZipDictionarySize read FDictionarySize write FDictionarySize; property ShannonFanoTreeCount : Byte read FShannonFanoTreeCount write FShannonFanoTreeCount; end; procedure AbUnzipToStream( Sender : TObject; Item : TAbZipItem; OutStream : TStream); procedure AbUnzip(Sender : TObject; Item : TAbZipItem; const UseName : string); procedure AbTestZipItem(Sender : TObject; Item : TAbZipItem); procedure InflateStream(CompressedStream, UnCompressedStream : TStream); {-Inflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills!} implementation uses SysUtils, {$IFDEF UnzipBzip2Support} AbBzip2, {$ENDIF} {$IFDEF UnzipLzmaSupport} ULZMADecoder, {$ENDIF} {$IFDEF UnzipPPMdSupport} AbPPMd, {$ENDIF} {$IFDEF UnzipWavPackSupport} AbWavPack, {$ENDIF} {$IFDEF UnzipXzSupport} AbXz, {$ENDIF} {$IFDEF UnzipZstdSupport} AbZstd, {$ENDIF} AbBitBkt, AbConst, AbDfBase, AbDfCryS, AbExcept, AbSpanSt, AbSWStm, AbUnzOutStm, AbUtils, AbZlibPrc, AbWinZipAes, Inflate64Stream, DCOSUtils, DCStrUtils, DCClassesUtf8, DCConvertEncoding; { -------------------------------------------------------------------------- } procedure AbReverseBits(var W : Word); {-Reverse the order of the bits in W} register; const RevTable : array[0..255] of Byte = ($00, $80, $40, $C0, $20, $A0, $60, $E0, $10, $90, $50, $D0, $30, $B0, $70, $F0, $08, $88, $48, $C8, $28, $A8, $68, $E8, $18, $98, $58, $D8, $38, $B8, $78, $F8, $04, $84, $44, $C4, $24, $A4, $64, $E4, $14, $94, $54, $D4, $34, $B4, $74, $F4, $0C, $8C, $4C, $CC, $2C, $AC, $6C, $EC, $1C, $9C, $5C, $DC, $3C, $BC, $7C, $FC, $02, $82, $42, $C2, $22, $A2, $62, $E2, $12, $92, $52, $D2, $32, $B2, $72, $F2, $0A, $8A, $4A, $CA, $2A, $AA, $6A, $EA, $1A, $9A, $5A, $DA, $3A, $BA, $7A, $FA, $06, $86, $46, $C6, $26, $A6, $66, $E6, $16, $96, $56, $D6, $36, $B6, $76, $F6, $0E, $8E, $4E, $CE, $2E, $AE, $6E, $EE, $1E, $9E, $5E, $DE, $3E, $BE, $7E, $FE, $01, $81, $41, $C1, $21, $A1, $61, $E1, $11, $91, $51, $D1, $31, $B1, $71, $F1, $09, $89, $49, $C9, $29, $A9, $69, $E9, $19, $99, $59, $D9, $39, $B9, $79, $F9, $05, $85, $45, $C5, $25, $A5, $65, $E5, $15, $95, $55, $D5, $35, $B5, $75, $F5, $0D, $8D, $4D, $CD, $2D, $AD, $6D, $ED, $1D, $9D, $5D, $DD, $3D, $BD, $7D, $FD, $03, $83, $43, $C3, $23, $A3, $63, $E3, $13, $93, $53, $D3, $33, $B3, $73, $F3, $0B, $8B, $4B, $CB, $2B, $AB, $6B, $EB, $1B, $9B, $5B, $DB, $3B, $BB, $7B, $FB, $07, $87, $47, $C7, $27, $A7, $67, $E7, $17, $97, $57, $D7, $37, $B7, $77, $F7, $0F, $8F, $4F, $CF, $2F, $AF, $6F, $EF, $1F, $9F, $5F, $DF, $3F, $BF, $7F, $FF); begin W := RevTable[Byte(W shr 8)] or Word(RevTable[Byte(W)] shl 8); end; { TAbUnzipHelper implementation ============================================ } { -------------------------------------------------------------------------- } constructor TAbUnzipHelper.Create( InputStream, OutputStream : TStream ); begin inherited Create; FOutBuf := AllocMem( AbBufferSize ); FOutPos := 0; FZStream := InputStream; FOutStream := OutputStream; FUncompressedSize := 0; FDictionarySize := dsInvalid; FShannonFanoTreeCount := 0; FCompressionMethod := cmDeflated; end; { -------------------------------------------------------------------------- } destructor TAbUnzipHelper.Destroy; begin FreeMem( FOutBuf, AbBufferSize ); inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.Execute; begin {parent class handles exceptions via OnExtractFailure} FBitsLeft := 0; FCurByte := 0; FInCnt := 0; FOutSent := 0; FOutPos := 0; FInEof := False; {set the output stream; for Imploded/Reduced files this has to be buffered, for all other types of compression, the code buffers the output data nicely and so the given output stream can be used.} {$IFDEF UnzipImplodeSupport} if (FCompressionMethod = cmImploded) then FOutWriter := TabSlidingWindowStream.Create(FOutStream) else {$ENDIF} {$IFDEF UnzipReduceSupport} if (FCompressionMethod >= cmReduced1) and (FCompressionMethod <= cmReduced4) then FOutWriter := TabSlidingWindowStream.Create(FOutStream) else {$ENDIF} FOutWriter := FOutStream; FInPos := 1+SizeOf(FInBuf); { GetMem( FInBuf, SizeOf(FInBuf^) );} try {uncompress it with the appropriate method} case FCompressionMethod of {$IFDEF UnzipShrinkSupport} cmShrunk : uzUnshrink; {$ENDIF} {$IFDEF UnzipReduceSupport} cmReduced1..cmReduced4 : uzUnReduce; {$ENDIF} {$IFDEF UnzipImplodeSupport} cmImploded : uzUnImplode; {$ENDIF} {cmTokenized} {cmEnhancedDeflated} {cmDCLImploded} else raise EAbZipInvalidMethod.Create; end; finally uzFlushOutBuf; {free any memory} if (FOutWriter <> FOutStream) then FOutWriter.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzReadNextPrim; begin FInCnt := FZStream.Read( FInBuf, sizeof( FInBuf ) ); FInEof := FInCnt = 0; {load first byte in buffer and set position counter} FCurByte := FInBuf[1]; FInPos := 2; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzFlushOutBuf; {-flushes the output buffer} begin if (FOutPos <> 0) then begin FOutWriter.Write( FOutBuf^, FOutPos ); Inc( FOutSent, FOutPos ); FOutPos := 0; end; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzWriteByte(B : Byte); {-Write one byte to the output buffer} begin FOutBuf^[FOutPos] := B; inc(FOutPos); if (FOutPos = AbBufferSize) or (LongInt(FOutPos) + FOutSent = FUncompressedSize) then uzFlushOutBuf; end; { -------------------------------------------------------------------------- } function TAbUnzipHelper.uzReadBits(Bits : Byte) : Integer; {-Read the specified number of bits} var SaveCurByte, Delta, SaveBitsLeft : Byte; begin {read next byte if we're out of bits} if FBitsLeft = 0 then begin {do we still have a byte buffered?} if FInPos <= FInCnt then begin {get next byte out of buffer and advance position counter} FCurByte := FInBuf[FInPos]; Inc(FInPos); end {are there any left to read?} else uzReadNextPrim; FBitsLeft := 8; end; if ( Bits < FBitsLeft ) then begin Dec( FBitsLeft, Bits ); Result := ((1 shl Bits) - 1) and FCurByte; FCurByte := FCurByte shr Bits; end else if ( Bits = FBitsLeft ) then begin Result := FCurByte; FCurByte := 0; FBitsLeft := 0; end else begin SaveCurByte := FCurByte; SaveBitsLeft := FBitsLeft; {number of additional bits that we need} Delta := Bits - FBitsLeft; {do we still have a byte buffered?} if FInPos <= FInCnt then begin {get next byte out of buffer and advance position counter} FCurByte := FInBuf[FInPos]; Inc(FInPos); end {are there any left to read?} else uzReadNextPrim; FBitsLeft := 8; Result := ( uzReadBits( Delta ) shl SaveBitsLeft ) or SaveCurByte; end; end; {$IFDEF UnzipImplodeSupport} { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzUnImplode; {-Extract an imploded file} const szLengthTree = SizeOf(TAbSfTree)-(192*SizeOf(TAbSfEntry)); szDistanceTree = SizeOf(TAbSfTree)-(192*SizeOf(TAbSfEntry)); szLitTree = SizeOf(TAbSfTree); var Length : Integer; DIndex : LongInt; Distance : Integer; SPos : LongInt; MyByte : Byte; DictBits : Integer; {number of bits used in sliding dictionary} MinMatchLength : Integer; {minimum match length} LitTree : PAbSfTree; {Literal tree} LengthTree : PAbSfTree; {Length tree} DistanceTree : PAbSfTree; {Distance tree} procedure uzLoadTree(var T; TreeSize : Integer); {-Load one Shannon-Fano tree} var I : Word; Tree : TAbSfTree absolute T; procedure GenerateTree; {-Generate a Shannon-Fano tree} var C : Word; CodeIncrement : Integer; LastBitLength : Integer; I : Integer; begin C := 0; CodeIncrement := 0; LastBitLength := 0; for I := Tree.Entries-1 downto 0 do with Tree.Entry[I] do begin Inc(C, CodeIncrement); if BitLength <> LastBitLength then begin LastBitLength := BitLength; CodeIncrement := 1 shl (16-LastBitLength); end; Code := C; end; end; procedure SortLengths; {-Sort the bit lengths in ascending order, while retaining the order of the original lengths stored in the file} var XL : Integer; XGL : Integer; TXP : PAbSfEntry; TXGP : PAbSfEntry; X, Gap : Integer; Done : Boolean; LT : LongInt; begin Gap := Tree.Entries shr 1; repeat repeat Done := True; for X := 0 to (Tree.Entries-1)-Gap do begin TXP := @Tree.Entry[X]; TXGP := @Tree.Entry[X+Gap]; XL := TXP^.BitLength; XGL := TXGP^.BitLength; if (XL > XGL) or ((XL = XGL) and (TXP^.Value > TXGP^.Value)) then begin LT := TXP^.L; TXP^.L := TXGP^.L; TXGP^.L := LT; Done := False; end; end; until Done; Gap := Gap shr 1; until (Gap = 0); end; procedure uzReadLengths; {-Read bit lengths for a tree} var TreeBytes : Integer; I, J, K : Integer; Num, Len : Integer; B : Byte; begin {get number of bytes in compressed tree} TreeBytes := uzReadBits(8)+1; I := 0; Tree.MaxLength := 0; {High nibble: Number of values at this bit length + 1. Low nibble: Bits needed to represent value + 1} for J := 1 to TreeBytes do begin B := uzReadBits(8); Len := (B and $0F)+1; Num := (B shr 4)+1; for K := I to I+Num-1 do with Tree, Entry[K] do begin if Len > MaxLength then MaxLength := Len; BitLength := Len; Value := K; end; Inc(I, Num); end; end; begin Tree.Entries := TreeSize; uzReadLengths; SortLengths; GenerateTree; for I := 0 to TreeSize-1 do AbReverseBits(Tree.Entry[I].Code); end; function uzReadTree(var T) : Byte; {-Read next byte using a Shannon-Fano tree} var Bits : Integer; CV : Word; E : Integer; Cur : Integer; var Tree : TAbSfTree absolute T; begin Result := 0; Bits := 0; CV := 0; Cur := 0; E := Tree.Entries; repeat CV := CV or (uzReadBits(1) shl Bits); Inc(Bits); while Tree.Entry[Cur].BitLength < Bits do begin Inc(Cur); if Cur >= E then Exit; end; while Tree.Entry[Cur].BitLength = Bits do begin if Tree.Entry[Cur].Code = CV then begin Result := Tree.Entry[Cur].Value; Exit; end; Inc(Cur); if Cur >= E then Exit; end; until False; end; begin {do we have an 8K dictionary?} if FDictionarySize = ds8K then DictBits := 7 else DictBits := 6; {allocate trees} LengthTree := AllocMem(szLengthTree); DistanceTree := AllocMem(szDistanceTree); LitTree := nil; try {do we have a Literal tree?} MinMatchLength := FShannonFanoTreeCount; if MinMatchLength = 3 then begin LitTree := AllocMem(szLitTree); uzLoadTree(LitTree^, 256); end; {load the other two trees} uzLoadTree(LengthTree^, 64); uzLoadTree(DistanceTree^, 64); while (not FInEof) and (FOutSent + LongInt(FOutPos) < FUncompressedSize) do {is data literal?} if Boolean(uzReadBits(1)) then begin {if MinMatchLength = 3 then we have a Literal tree} if (MinMatchLength = 3) then uzWriteByte( uzReadTree(LitTree^) ) else uzWriteByte( uzReadBits(8) ); end else begin {data is a sliding dictionary} Distance := uzReadBits(DictBits); {using the Distance Shannon-Fano tree, read and decode the upper 6 bits of the Distance value} Distance := Distance or (uzReadTree(DistanceTree^) shl DictBits); {using the Length Shannon-Fano tree, read and decode the Length value} Length := uzReadTree(LengthTree^); if Length = 63 then Inc(Length, uzReadBits(8)); Inc(Length, MinMatchLength); {move backwards Distance+1 bytes in the output stream, and copy Length characters from this position to the output stream. (if this position is before the start of the output stream, then assume that all the data before the start of the output stream is filled with zeros)} DIndex := (FOutSent + LongInt(FOutPos))-(Distance+1); while Length > 0 do begin if DIndex < 0 then uzWriteByte(0) else begin uzFlushOutBuf; SPos := FOutWriter.Position; FOutWriter.Position := DIndex; FOutWriter.Read( MyByte, 1 ); FOutWriter.Position := SPos; uzWriteByte(MyByte); end; Inc(DIndex); Dec(Length); end; end; finally if (LitTree <> nil) then FreeMem(LitTree, szLitTree); FreeMem(LengthTree, szLengthTree); FreeMem(DistanceTree, szDistanceTree); end; end; {$ENDIF UnzipImplodeSupport} { -------------------------------------------------------------------------- } {$IFDEF UnzipReduceSupport} procedure TAbUnzipHelper.uzUnReduce; const FactorMasks : array[1..4] of Byte = ($7F, $3F, $1F, $0F); DLE = 144; var C, Last : Byte; OpI : LongInt; I, J, Sz : Integer; D : Word; SPos : LongInt; MyByte : Byte; Factor : Byte; {reduction Factor} FactorMask : Byte; {bit mask to use based on Factor} Followers : PAbFollowerSets; {array of follower sets} State : Integer; {used while processing reduced files} V : Integer; {"} Len : Integer; {"} function BitsNeeded( i : Byte ) : Word; begin dec( i ); Result := 0; repeat inc( Result ); i := i shr 1; until i = 0; end; begin GetMem(Followers, SizeOf(TAbFollowerSets)); try Factor := Ord( FCompressionMethod ) - 1; FactorMask := FactorMasks[Factor]; State := 0; C := 0; V := 0; Len := 0; D := 0; {load follower sets} for I := 255 downto 0 do begin Sz := uzReadBits(6); Followers^[I].Size := Sz; Dec(Sz); for J := 0 to Sz do Followers^[I].FSet[J] := uzReadBits(8); end; while (not FInEof) and ((FOutSent + LongInt(FOutPos)) < FUncompressedSize) do begin Last := C; with Followers^[Last] do if Size = 0 then C := uzReadBits(8) else begin C := uzReadBits(1); if C <> 0 then C := uzReadBits(8) else C := FSet[uzReadBits(BitsNeeded(Size))]; end; if FInEof then Exit; case State of 0 : if C <> DLE then uzWriteByte(C) else State := 1; 1 : if C <> 0 then begin V := C; Len := V and FactorMask; if Len = FactorMask then State := 2 else State := 3; end else begin uzWriteByte(DLE); State := 0; end; 2 : begin Inc(Len, C); State := 3; end; 3 : begin case Factor of 1 : D := (V shr 7) and $01; 2 : D := (V shr 6) and $03; 3 : D := (V shr 5) and $07; 4 : D := (V shr 4) and $0f; else raise EAbZipInvalidFactor.Create; end; {Delphi raises compiler Hints here, saying D might be undefined... If Factor is not in [1..4], the exception gets raised, and we never execute the following line} OpI := (FOutSent + LongInt(FOutPos))-(Swap(D)+C+1); for I := 0 to Len+2 do begin if OpI < 0 then uzWriteByte(0) else if OpI >= FOutSent then uzWriteByte(FOutBuf[OpI - FOutSent]) else begin SPos := FOutWriter.Position; FOutWriter.Position := OpI; FOutWriter.Read( MyByte, 1 ); FOutWriter.Position := SPos; uzWriteByte(MyByte); end; Inc(OpI); end; State := 0; end; end; end; finally FreeMem(Followers, SizeOf(Followers^)); end; end; {$ENDIF UnzipReduceSupport} { -------------------------------------------------------------------------- } {$IFDEF UnzipShrinkSupport} procedure TAbUnzipHelper.uzUnShrink; {-Extract a file that was shrunk} const MaxBits = 13; InitBits = 9; FirstFree = 257; Clear = 256; MaxCodeMax = 8192; {= 1 shl MaxBits} Unused = -1; var CodeSize : SmallInt; NextFree : SmallInt; BaseChar : SmallInt; NewCode : SmallInt; OldCode : SmallInt; SaveCode : SmallInt; N, R : SmallInt; I : Integer; PrefixTable : PAbIntArray8K; {used while processing shrunk files} SuffixTable : PAbByteArray8K; {"} Stack : PAbByteArray8K; {"} StackIndex : Integer; {"} begin CodeSize := InitBits; { MaxCode := (1 shl InitBits)-1;} NextFree := FirstFree; PrefixTable := nil; SuffixTable := nil; Stack := nil; try GetMem(PrefixTable, SizeOf(PrefixTable^)); SuffixTable := AllocMem(SizeOf(SuffixTable^)); GetMem(Stack, SizeOf(Stack^)); FillChar(PrefixTable^, SizeOf(PrefixTable^), $FF); for NewCode := 255 downto 0 do begin PrefixTable^[NewCode] := 0; SuffixTable^[NewCode] := NewCode; end; OldCode := uzReadBits(CodeSize); if FInEof then Exit; BaseChar := OldCode; uzWriteByte(BaseChar); StackIndex := 0; while (not FInEof) do begin NewCode := uzReadBits(CodeSize); while (NewCode = Clear) and (not FInEof) do begin case uzReadBits(CodeSize) of 1 : begin Inc(CodeSize); end; 2 : begin {mark all nodes as potentially unused} for I := FirstFree to pred( NextFree ) do PrefixTable^[I] := PrefixTable^[I] or LongInt($8000); {unmark those used by other nodes} for N := FirstFree to NextFree-1 do begin {reference to another node?} R := PrefixTable^[N] and $7FFF; {flag node as referenced} if R >= FirstFree then PrefixTable^[R] := PrefixTable^[R] and $7FFF; end; {clear the ones that are still marked} for I := FirstFree to pred( NextFree ) do if PrefixTable^[I] < 0 then PrefixTable^[I] := -1; {recalculate NextFree} NextFree := FirstFree; while (NextFree < MaxCodeMax) and (PrefixTable^[NextFree] <> -1) do Inc(NextFree); end; end; NewCode := uzReadBits(CodeSize); end; if FInEof then Exit; {save current code} SaveCode := NewCode; {special case} if PrefixTable^[NewCode] = Unused then begin Stack^[StackIndex] := BaseChar; Inc(StackIndex); NewCode := OldCode; end; {generate output characters in reverse order} while (NewCode >= FirstFree) do begin if PrefixTable^[NewCode] = Unused then begin Stack^[StackIndex] := BaseChar; Inc(StackIndex); NewCode := OldCode; end else begin Stack^[StackIndex] := SuffixTable^[NewCode]; Inc(StackIndex); NewCode := PrefixTable^[NewCode]; end; end; BaseChar := SuffixTable^[NewCode]; uzWriteByte(BaseChar); {put them out in forward order} while (StackIndex > 0) do begin Dec(StackIndex); uzWriteByte(Stack^[StackIndex]); end; {add new entry to tables} NewCode := NextFree; if NewCode < MaxCodeMax then begin PrefixTable^[NewCode] := OldCode; SuffixTable^[NewCode] := BaseChar; while (NextFree < MaxCodeMax) and (PrefixTable^[NextFree] <> Unused) do Inc(NextFree); end; {remember previous code} OldCode := SaveCode; end; finally FreeMem(PrefixTable, SizeOf(PrefixTable^)); FreeMem(SuffixTable, SizeOf(SuffixTable^)); FreeMem(Stack, SizeOf(Stack^)); end; end; {$ENDIF} { -------------------------------------------------------------------------- } procedure RequestPassword(Archive : TAbZipArchive; var Abort : Boolean); var APassPhrase : AnsiString; begin APassPhrase := Archive.Password; Abort := False; if Assigned(Archive.OnNeedPassword) then begin Archive.OnNeedPassword(Archive, APassPhrase); if APassPhrase = '' then Abort := True else Archive.Password := APassPhrase; end; end; { -------------------------------------------------------------------------- } procedure CheckPassword(Archive : TAbZipArchive; var Tries : Integer; var Abort : Boolean); begin { if current password empty } if Archive.Password = '' then begin { request password } RequestPassword(Archive, Abort); { increment tries } Inc(Tries); end; { if current password still empty } if Archive.Password = '' then begin { abort } raise EAbZipInvalidPassword.Create; end; end; { -------------------------------------------------------------------------- } procedure DoInflate(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Hlpr : TAbDeflateHelper; begin Hlpr := TAbDeflateHelper.Create; try Hlpr.NormalSize := Item.UncompressedSize; AbZlibPrc.Inflate(InStream, OutStream, Hlpr); finally Hlpr.Free; end; end; { -------------------------------------------------------------------------- } procedure DoInflate64(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Inflate64Stream: TInflate64Stream; begin Inflate64Stream := TInflate64Stream.Create(InStream); try OutStream.CopyFrom(Inflate64Stream, Item.UncompressedSize); finally Inflate64Stream.Free; end; end; { -------------------------------------------------------------------------- } procedure DoLegacyUnzip(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Helper : TAbUnzipHelper; begin Helper := TAbUnzipHelper.Create(InStream, OutStream); try {Helper} Helper.DictionarySize := Item.DictionarySize; Helper.UnCompressedSize := Item.UncompressedSize; Helper.CompressionMethod := Item.CompressionMethod; Helper.ShannonFanoTreeCount := Item.ShannonFanoTreeCount; Helper.Execute; finally Helper.Free; end; end; { -------------------------------------------------------------------------- } {$IFDEF UnzipBzip2Support} procedure DoExtractBzip2(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Bzip2Stream: TStream; begin Bzip2Stream := TBZDecompressionStream.Create(InStream); try OutStream.CopyFrom(Bzip2Stream, Item.UncompressedSize); finally Bzip2Stream.Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } {$IFDEF UnzipLzmaSupport} procedure DoExtractLzma(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Header: packed record MajorVer, MinorVer: Byte; PropSize: Word; end; Properties: array of Byte; begin InStream.ReadBuffer(Header, SizeOf(Header)); SetLength(Properties, Header.PropSize); InStream.ReadBuffer(Properties[0], Header.PropSize); with TLZMADecoder.Create do try SetDecoderProperties(Properties); Code(InStream, OutStream, Item.UncompressedSize); finally Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } {$IFDEF UnzipXzSupport} procedure DoExtractXz(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var XzStream: TXzDecompressionStream; begin XzStream := TXzDecompressionStream.Create(InStream); try OutStream.CopyFrom(XzStream, Item.UncompressedSize); finally XzStream.Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } {$IFDEF UnzipZstdSupport} procedure DoExtractZstd(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var ZstdStream: TStream; begin ZstdStream := TZstdDecompressionStream.Create(InStream); try OutStream.CopyFrom(ZstdStream, Item.UncompressedSize); finally ZstdStream.Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } function ExtractPrep(ZipArchive: TAbZipArchive; Item: TAbZipItem): TStream; var LFH : TAbZipLocalFileHeader; Abort : Boolean; Tries : Integer; CheckValue : LongInt; DecryptStream: TAbDfDecryptStream; FieldSize: Word; WinZipAesField: PWinZipAesRec = nil; AesDecryptStream: TAbWinZipAesDecryptStream; begin { validate } if (Lo(Item.VersionNeededToExtract) > Ab_ZipVersion) then raise EAbZipVersion.Create; { seek to compressed file } if ZipArchive.FStream is TAbSpanReadStream then TAbSpanReadStream(ZipArchive.FStream).SeekImage(Item.DiskNumberStart, Item.RelativeOffset) else ZipArchive.FStream.Position := Item.RelativeOffset; { get local header info for Item} LFH := TAbZipLocalFileHeader.Create; try { select appropriate CRC value based on General Purpose Bit Flag } { also get whether the file is stored, while we've got the local file header } LFH.LoadFromStream(ZipArchive.FStream); if (LFH.GeneralPurposeBitFlag and AbHasDataDescriptorFlag = AbHasDataDescriptorFlag) then { if bit 3 is set, then the data descriptor record is appended to the compressed data } CheckValue := LFH.LastModFileTime shl $10 else CheckValue := Item.CRC32; finally LFH.Free; end; Result := TAbUnzipSubsetStream.Create(ZipArchive.FStream, Item.CompressedSize); { get decrypting stream } if Item.IsEncrypted then begin try { check WinZip AES extra field } if Item.ExtraField.Get(Ab_WinZipAesID, Pointer(WinZipAesField), FieldSize) then begin { get real compression method } Item.CompressionMethod := TAbZipCompressionMethod(WinZipAesField.Method); end; { need to decrypt } Tries := 0; Abort := False; CheckPassword(ZipArchive, Tries, Abort); while True do begin if Abort then raise EAbUserAbort.Create; { check for valid password } if Assigned(WinZipAesField) then begin AesDecryptStream := TAbWinZipAesDecryptStream.Create(Result, WinZipAesField, ZipArchive.Password); if AesDecryptStream.IsValid then begin AesDecryptStream.OwnsStream := True; Result := AesDecryptStream; Break; end; FreeAndNil(AesDecryptStream); end else begin DecryptStream := TAbDfDecryptStream.Create(Result, CheckValue, ZipArchive.Password); if DecryptStream.IsValid then begin DecryptStream.OwnsStream := True; Result := DecryptStream; Break; end; FreeAndNil(DecryptStream); end; { prompt again } Inc(Tries); if (Tries > ZipArchive.PasswordRetries) then raise EAbZipInvalidPassword.Create; RequestPassword(ZipArchive, Abort); end; except Result.Free; raise; end; end; end; { -------------------------------------------------------------------------- } procedure DoExtract(aZipArchive: TAbZipArchive; aItem: TAbZipItem; aInStream, aOutStream: TStream); var Wrong: Boolean; OutStream : TAbUnzipOutputStream; begin if aItem.UncompressedSize = 0 then Exit; OutStream := TAbUnzipOutputStream.Create(aOutStream); try OutStream.UncompressedSize := aItem.UncompressedSize; OutStream.OnProgress := aZipArchive.OnProgress; { determine storage type } case aItem.CompressionMethod of cmStored: begin { unstore aItem } OutStream.CopyFrom(aInStream, aItem.UncompressedSize); end; cmDeflated: begin { inflate aItem } DoInflate(aZipArchive, aItem, aInStream, OutStream); end; cmEnhancedDeflated: begin { inflate aItem } DoInflate64(aZipArchive, aItem, aInStream, OutStream); end; {$IFDEF UnzipBzip2Support} cmBzip2: begin DoExtractBzip2(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipLzmaSupport} cmLZMA: begin DoExtractLzma(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipPPMdSupport} cmPPMd: begin DecompressPPMd(aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipWavPackSupport} cmWavPack: begin DecompressWavPack(aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipXzSupport} cmXz: begin DoExtractXz(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipZstdSupport} cmZstd: begin DoExtractZstd(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} cmShrunk..cmImploded: begin DoLegacyUnzip(aZipArchive, aItem, aInStream, OutStream); end; else raise EAbZipInvalidMethod.Create; end; { check CRC } if not (aInStream is TAbWinZipAesDecryptStream) then Wrong := (OutStream.CRC32 <> aItem.CRC32) else begin Wrong := not TAbWinZipAesDecryptStream(aInStream).Verify; if TAbWinZipAesDecryptStream(aInStream).ExtraField.Version = 1 then Wrong := Wrong or (OutStream.CRC32 <> aItem.CRC32); end; if Wrong then begin if Assigned(aZipArchive.OnProcessItemFailure) then aZipArchive.OnProcessItemFailure(aZipArchive, aItem, ptExtract, ecAbbrevia, AbZipBadCRC) else raise EAbZipBadCRC.Create; end; finally OutStream.Free; end; end; { -------------------------------------------------------------------------- } procedure AbUnzipToStream( Sender : TObject; Item : TAbZipItem; OutStream : TStream); var ZipArchive : TAbZipArchive; InStream : TStream; begin ZipArchive := Sender as TAbZipArchive; if not Assigned(OutStream) then raise EAbBadStream.Create; InStream := ExtractPrep(ZipArchive, Item); try DoExtract(ZipArchive, Item, InStream, OutStream); finally InStream.Free end; end; { -------------------------------------------------------------------------- } procedure AbUnzip(Sender : TObject; Item : TAbZipItem; const UseName : string); {create the output filestream and pass it to DoExtract} var LinkTarget : String; PathType : TPathType; AbsolutePath : String; ZipArchive : TAbZipArchive; InStream, OutStream : TStream; begin ZipArchive := TAbZipArchive(Sender); if Item.IsDirectory then AbCreateDirectory(UseName) else begin InStream := ExtractPrep(ZipArchive, Item); try if FPS_ISLNK(Item.NativeFileAttributes) then begin OutStream := TMemoryStream.Create; try try {OutStream} DoExtract(ZipArchive, Item, InStream, OutStream); SetString(LinkTarget, TMemoryStream(OutStream).Memory, OutStream.Size); LinkTarget := NormalizePathDelimiters(CeRawToUtf8(LinkTarget)); finally {OutStream} OutStream.Free; end; {OutStream} PathType := GetPathType(LinkTarget); if PathType in [ptRelative, ptAbsolute] then begin if PathType = ptAbsolute then AbsolutePath := LinkTarget else begin AbsolutePath := GetAbsoluteFileName(ExtractFilePath(UseName), LinkTarget); end; if not IsInPath(ZipArchive.BaseDirectory, AbsolutePath, True, True) then ZipArchive.SuspiciousLinks.Add(NormalizePathDelimiters(Item.FileName)); end; if not CreateSymLink(LinkTarget, UseName, UInt32(Item.NativeFileAttributes)) then RaiseLastOSError; except if ExceptObject is EAbUserAbort then ZipArchive.FStatus := asInvalid; raise; end; end else begin ZipArchive.VerifyItem(Item); OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyWrite); try try {OutStream} DoExtract(ZipArchive, Item, InStream, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} except if ExceptObject is EAbUserAbort then ZipArchive.FStatus := asInvalid; DeleteFile(UseName); raise; end; end; finally InStream.Free end; end; if not FPS_ISLNK(Item.NativeFileAttributes) then begin AbSetFileTime(UseName, Item.LastModTimeAsDateTime); AbSetFileAttr(UseName, Item.NativeFileAttributes); end; end; { -------------------------------------------------------------------------- } procedure AbTestZipItem(Sender : TObject; Item : TAbZipItem); {extract item to bit bucket and verify its local file header} var BitBucket : TAbBitBucketStream; FieldSize : Word; LFH : TAbZipLocalFileHeader; Zip64Field : PZip64LocalHeaderRec; ZipArchive : TAbZipArchive; DD : TAbZipDataDescriptor = nil; begin ZipArchive := TAbZipArchive(Sender); if (Lo(Item.VersionNeededToExtract) > Ab_ZipVersion) then raise EAbZipVersion.Create; { seek to compressed file } if ZipArchive.FStream is TAbSpanReadStream then TAbSpanReadStream(ZipArchive.FStream).SeekImage(Item.DiskNumberStart, Item.RelativeOffset) else ZipArchive.FStream.Position := Item.RelativeOffset; BitBucket := nil; LFH := nil; try BitBucket := TAbBitBucketStream.Create(0); LFH := TAbZipLocalFileHeader.Create; {get the item's local file header} ZipArchive.FStream.Seek(Item.RelativeOffset, soBeginning); LFH.LoadFromStream(ZipArchive.FStream); if LFH.HasDataDescriptor then begin DD := TAbZipDataDescriptor.Create; ZipArchive.FStream.Seek(Item.CompressedSize, soCurrent); DD.LoadFromStream(ZipArchive.FStream); end; ZipArchive.FStream.Seek(Item.RelativeOffset, soBeginning); {currently a single exception is raised for any LFH error} if (LFH.VersionNeededToExtract <> Item.VersionNeededToExtract) then raise EAbZipInvalidLFH.Create; if (LFH.GeneralPurposeBitFlag <> Item.GeneralPurposeBitFlag) then raise EAbZipInvalidLFH.Create; if (LFH.LastModFileTime <> Item.LastModFileTime) then raise EAbZipInvalidLFH.Create; if (LFH.LastModFileDate <> Item.LastModFileDate) then raise EAbZipInvalidLFH.Create; if Assigned(DD) then begin if (DD.CRC32 <> Item.CRC32) then raise EAbZipInvalidLFH.Create; end else begin if (LFH.CRC32 <> Item.CRC32) then raise EAbZipInvalidLFH.Create; end; if LFH.ExtraField.Get(Ab_Zip64SubfieldID, Pointer(Zip64Field), FieldSize) then begin if (Zip64Field.CompressedSize <> Item.CompressedSize) then raise EAbZipInvalidLFH.Create; if (Zip64Field.UncompressedSize <> Item.UncompressedSize) then raise EAbZipInvalidLFH.Create; end else if Assigned(DD) then begin if (DD.CompressedSize <> Item.CompressedSize) then raise EAbZipInvalidLFH.Create; if (DD.UncompressedSize <> Item.UncompressedSize) then raise EAbZipInvalidLFH.Create; end else begin if (LFH.CompressedSize <> Item.CompressedSize) then raise EAbZipInvalidLFH.Create; if (LFH.UncompressedSize <> Item.UncompressedSize) then raise EAbZipInvalidLFH.Create; end; if (LFH.FileName <> Item.RawFileName) then raise EAbZipInvalidLFH.Create; {any CRC errors will raise exception during extraction} AbUnZipToStream(Sender, Item, BitBucket); finally BitBucket.Free; LFH.Free; DD.Free; end; end; { -------------------------------------------------------------------------- } procedure InflateStream( CompressedStream, UnCompressedStream : TStream ); {-Inflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills!} begin Inflate(CompressedStream, UncompressedStream, nil); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abunzoutstm.pas0000644000175000001440000001365515104114162023521 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUnzOutStm.pas *} {*********************************************************} {* ABBREVIA: UnZip output stream; progress and CRC32 *} {*********************************************************} unit AbUnzOutStm; {$I AbDefine.inc} interface uses SysUtils, Classes, AbArcTyp; type // Fixed-length read-only stream, limits reads to the range between // the input stream's starting position and a specified size. Seek/Position // are adjusted to be 0 based. TAbUnzipSubsetStream = class( TStream ) private FStream : TStream; FStartPos: Int64; FCurPos: Int64; FEndPos: Int64; public constructor Create(aStream: TStream; aStreamSize: Int64); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; // Write-only output stream, computes CRC32 and calls progress event TAbUnzipOutputStream = class( TStream ) private FBytesWritten : Int64; FCRC32 : UInt32; FCurrentProgress : Byte; FStream : TStream; FUncompressedSize : Int64; FOnProgress : TAbProgressEvent; function GetCRC32 : LongInt; public constructor Create(aStream : TStream); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property CRC32 : LongInt read GetCRC32; property Stream : TStream read FStream write FStream; property UncompressedSize : Int64 read FUncompressedSize write FUncompressedSize; property OnProgress : TAbProgressEvent read FOnProgress write FOnProgress; end; implementation uses Math, AbExcept, AbUtils, DCcrc32; { TAbUnzipSubsetStream implementation ====================================== } { -------------------------------------------------------------------------- } constructor TAbUnzipSubsetStream.Create(aStream: TStream; aStreamSize: Int64); begin inherited Create; FStream := aStream; FStartPos := FStream.Position; FCurPos := FStartPos; FEndPos := FStartPos + aStreamSize; end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Read(var Buffer; Count: Longint): Longint; begin if Count > FEndPos - FCurPos then Count := FEndPos - FCurPos; if Count > 0 then begin Result := FStream.Read(Buffer, Count); Inc(FCurPos, Result); end else Result := 0; end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Write(const Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbUnzipSubsetStream.Write not supported'); end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var OldPos: Int64; begin OldPos := FCurPos; case Origin of soBeginning: FCurPos := FStartPos + Offset; soCurrent: FCurPos := FCurPos + Offset; soEnd: FCurPos := FEndPos + Offset; end; if FCurPos < FStartPos then FCurPos := FStartPos; if FCurPos > FEndPos then FCurPos := FEndPos; if OldPos <> FCurPos then FStream.Position := FCurPos; Result := FCurPos - FStartPos; end; { -------------------------------------------------------------------------- } { TAbUnzipOutputStream implementation ====================================== } { -------------------------------------------------------------------------- } constructor TAbUnzipOutputStream.Create(aStream: TStream); begin inherited Create; FStream := aStream; end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Read(var Buffer; Count: Integer): Longint; begin raise EAbException.Create('TAbUnzipOutputStream.Read not supported'); end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Write(const Buffer; Count: Longint): Longint; var Abort : Boolean; NewProgress : Byte; begin Result := FStream.Write(Buffer, Count); FCRC32 := crc32_16bytes(@Buffer, Count, FCRC32); Inc( FBytesWritten, Result ); if Assigned( FOnProgress ) then begin Abort := False; NewProgress := AbPercentage(FBytesWritten, FUncompressedSize); if (NewProgress <> FCurrentProgress) then begin FOnProgress( NewProgress, Abort ); FCurrentProgress := NewProgress; end; if Abort then raise EAbUserAbort.Create; end; end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result := FStream.Seek(Offset, Origin); end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.GetCRC32: LongInt; begin Result := LongInt(FCRC32); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abtartyp.pas0000644000175000001440000027424715104114162022762 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Joel Haynie * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbTarTyp.pas *} {*********************************************************} {* ABBREVIA: TAbTarArchive, TAbTarItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Tar files *} {*********************************************************} unit AbTarTyp; {$I AbDefine.inc} interface uses Classes, AbUtils, AbArcTyp; const AB_TAR_RECORDSIZE = 512; {Note: SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE} AB_TAR_NAMESIZE = 100; AB_TAR_V7_EMPTY_SIZE = 167; AB_TAR_USTAR_PREFIX_SIZE = 155; AB_TAR_STAR_PREFIX_SIZE = 131; AB_TAR_OLD_GNU_EMPTY1_SIZE = 5; AB_TAR_OLD_GNU_SPARSE_SIZE = 96; AB_TAR_OLD_GNU_EMPTY2_SIZE = 17; AB_TAR_SIZE_AFTER_STDHDR = 167; AB_TAR_TUSRNAMELEN = 32; AB_TAR_TGRPNAMELEN = 32; { The checksum field is filled with this while the checksum is computed. } AB_TAR_CHKBLANKS = ' '; { 8 blank spaces(#20), no null } AB_TAR_L_HDR_NAME = '././@LongLink'; { As seen in the GNU File Examples} AB_TAR_L_HDR_USR_NAME='root'; { On Cygwin this is #0, Redhat it is 'root' } AB_TAR_L_HDR_GRP_NAME='root'; { Same on all OS's } AB_TAR_L_HDR_ARR8_0 ='0000000'#0; { 7 zeros and one null } AB_TAR_L_HDR_ARR12_0 ='00000000000'#0;{ 11 zeros and one null } AB_TAR_MAGIC_VAL = 'ustar'#0; { 5 chars & a nul } AB_TAR_MAGIC_VER = '00'; { 2 chars } AB_TAR_MAGIC_GNUOLD = 'ustar '#0; { 7 chars & a null } AB_TAR_MAGIC_V7_NONE = #0#0#0#0#0#0#0#0;{ 8, #0 } { The linkflag defines the type of file(FH), and Meta Data about File(MDH) } AB_TAR_LF_OLDNORMAL = #0; { FH, Normal disk file, Unix compatible } { Historically used for V7 } AB_TAR_LF_NORMAL = '0'; { FH, Normal disk file } AB_TAR_LF_LINK = '1'; { FH, Link to previously archived file } AB_TAR_LF_SYMLINK = '2'; { FH, Symbolic(soft) link } AB_TAR_LF_CHR = '3'; { FH, Character special file }{ Used for device nodes, Conditionally compiled into GNUTAR } AB_TAR_LF_BLK = '4'; { FH, Block special file }{ Used for device nodes, Conditionally compiled into GNUTAR } AB_TAR_LF_DIR = '5'; { FH, Directory, Zero size File } AB_TAR_LF_FIFO = '6'; { FH, FIFO special file }{ Used for fifo files(pipe like), Conditionally complied into GNUTAR } AB_TAR_LF_CONTIG = '7'; { FH, Contiguous file } { Normal File, but All blocks should be contiguos on the disk } AB_TAR_LF_XHDR = 'x'; { MDH, POSIX, Next File has Extended Header } AB_TAR_LF_XGL = 'g'; { MDH, POSIX, Global Extended Header } AB_TAR_LF_DUMPDIR = 'D'; { FH, Extra GNU, Dump Directory} { Generated Dump of Files in a directory, has a size } AB_TAR_LF_LONGLINK = 'K'; { MDH, Extra GNU, Next File has Long LinkName} AB_TAR_LF_LONGNAME = 'L'; { MDH, Extra GNU, Next File has Long Name} AB_TAR_LF_MULTIVOL = 'M'; { FH, Extra GNU, MultiVolume File Cont.}{ End of a file that spans multiple TARs } AB_TAR_LF_SPARSE = 'S'; { FH, Extra GNU, Sparse File Cont.} AB_TAR_LF_VOLHDR = 'V'; { FH, Extra GNU, File is Volume Header } AB_TAR_LF_EXHDR = 'X'; { MDH, Extra GNU, Solaris Extended Header } { The only questionable MetaData type is 'V', file or meta-data? will treat as file header } AB_SUPPORTED_F_HEADERS = [AB_TAR_LF_OLDNORMAL, AB_TAR_LF_NORMAL, AB_TAR_LF_LINK, AB_TAR_LF_SYMLINK, AB_TAR_LF_DIR]; AB_UNSUPPORTED_F_HEADERS = [AB_TAR_LF_CHR, AB_TAR_LF_BLK, AB_TAR_LF_FIFO, AB_TAR_LF_CONTIG, AB_TAR_LF_DUMPDIR, AB_TAR_LF_MULTIVOL, AB_TAR_LF_SPARSE, AB_TAR_LF_VOLHDR]; AB_SUPPORTED_MD_HEADERS = [AB_TAR_LF_LONGNAME, AB_TAR_LF_LONGLINK]; AB_UNSUPPORTED_MD_HEADERS= [AB_TAR_LF_XHDR, AB_TAR_LF_XGL, AB_TAR_LF_EXHDR]; AB_GNU_MD_HEADERS = [AB_TAR_LF_LONGLINK, AB_TAR_LF_LONGNAME]; { If present then OLD_/GNU_FORMAT } AB_PAX_MD_HEADERS = [AB_TAR_LF_XHDR, AB_TAR_LF_XGL]; { If present then POSIX_FORMAT } AB_IGNORE_SIZE_HEADERS = [AB_TAR_LF_LINK, AB_TAR_LF_SYMLINK, AB_TAR_LF_CHR, AB_TAR_LF_BLK, AB_TAR_LF_DIR, AB_TAR_LF_FIFO]; { The rest of the Chars are unsupported and unknown types Treat those headers as File types } { Further link types may be defined later. } { Bits used in the mode field - values in octal } AB_TAR_TSUID = $0800; { Set UID on execution } AB_TAR_TSGID = $0400; { Set GID on execution } AB_TAR_TSVTX = $0200; { Save text (sticky bit) } type Arr8 = array [0..7] of AnsiChar; Arr12 = array [0..11] of AnsiChar; Arr12B = array[0..11] of Byte; ArrName = array [0..AB_TAR_NAMESIZE-1] of AnsiChar; TAbTarHeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); TAbTarItemType = (SUPPORTED_ITEM, UNSUPPORTED_ITEM, UNKNOWN_ITEM); TAbTarHeaderType = (FILE_HEADER, META_DATA_HEADER, MD_DATA_HEADER, UNKNOWN_HEADER); TAbTarMagicType = (GNU_OLD, NORMAL); TAbTarMagicRec = packed record case TAbTarMagicType of GNU_OLD: (gnuOld : array[0..7] of AnsiChar); { Old GNU magic: (Magic.gnuOld) } NORMAL : (value : array[0..5] of AnsiChar; { Magic value: (Magic.value)} version: array[0..1] of AnsiChar); { Version: (Magic.version) } end; { Notes from GNU Tar & POSIX Spec.: } {All the first 345 bytes are the same. } { "USTAR_header": Prefix(155): 345-499, empty(12): 500-511 } { "old_gnu_header": atime(12): 345-356, ctime(12): 357-368, offset(12): 369-380, longnames(4): 381-384, empty(1): 385, sparse structs(4x(12+12)=96): 386-481, isextended(1): 482, realsize(12): 483-494, empty(16): 495-511 } { "star_header": Prefix(131): 345-475, atime(12): 476-487, ctime(12): 488-499, empty(12): 500-511 } { "star_in_header": prefix(1): 345, empty(9): 346-354, isextended(1): 355, sparse structs(4x(12+12)=96): 356-451, realsize(12): 452-463, offset(12): 464-475, atime(12): 476-487, ctime(12): 488-499, empty(8): 500-507, xmagic(4): 508-511 } { "sparse_header": These two structs are the same, and they are Meta data about file. } {"star_ext_header": sparse structs(21x(12+12)=504): 0-503, isextended(1): 504 } {POSIX(PAX) extended header: is a buffer packed with content of this form: This if from the POSIX spec. References the C printf command string. "%d %s=%s\n". Then they are simply concatenated. } { PAX Extended Header Keywords: } { 'atime', 'charset', 'comment', 'ctime', 'gid', 'gname', 'linkpath', 'mtime', 'path', 'realtime.', 'security.', 'size', 'uid', 'uname' } { GNU Added PAX Extended Header Keywords: } { 'GNU.sparse.name', 'GNU.sparse.major', 'GNU.sparse.minor', 'GNU.sparse.realsize', 'GNU.sparse.numblocks', 'GNU.sparse.size', 'GNU.sparse.offset', 'GNU.sparse.numbytes', 'GNU.sparse.map', 'GNU.dumpdir', 'GNU.volume.label', 'GNU.volume.filename', 'GNU.volume.size', 'GNU.volume.offset' } { V7 uses AB_TAR_LF_OLDNORMAL linkflag, has no magic field & no Usr/Grp Names } { V7 Format ends Empty(padded with zeros), as does the POSIX record. } TAbTarEnd_Empty_Rec = packed record Empty: array[0..AB_TAR_V7_EMPTY_SIZE-1] of Byte; { 345-511, $159-1FF, Empty Space } end; { UStar End Format } TAbTarEnd_UStar_Rec = packed record Prefix: array[0..AB_TAR_USTAR_PREFIX_SIZE-1] of AnsiChar; { 345-499, $159-1F3, Prefix of file & path name, null terminated ASCII string } Empty : Arr12B;{ 500-512, $1F4-1FF, Empty Space } end; { Old GNU End Format } TAbTarEnd_GNU_old_Rec = packed record Atime : Arr12; { 345-356, $159-164, time of last access (UNIX Date in ASCII coded Octal)} Ctime : Arr12; { 357-368, $165-170, time of last status change (UNIX Date in ASCII coded Octal)} Offset: Arr12; { 369-380, $171-17C, Multirecord specific value } Empty1: array[0..AB_TAR_OLD_GNU_EMPTY1_SIZE-1] of Byte; { 381-385, $17D-181, Empty Space, Once contained longname ref. } Sparse: array[0..AB_TAR_OLD_GNU_SPARSE_SIZE-1] of Byte; { 386-481, $182-1E1, Sparse File specific values } IsExtended: byte;{ 482, $ 1E2, Flag to signify Sparse file headers follow } RealSize: Arr12;{ 483-494, $1E3-1EE, Real size of a Sparse File. } Empty2: array[0..AB_TAR_OLD_GNU_EMPTY2_SIZE-1] of Byte; { 495-511, $1EF-1FF, Empty Space } end; { Star End Format } TAbTarEnd_Star_Rec = packed record Prefix: array[0..AB_TAR_STAR_PREFIX_SIZE-1] of AnsiChar; { 345-499, $159-1F3, prefix of file & path name, null terminated ASCII string } Atime : Arr12; { 476-487, $1DC-1E7, time of last access (UNIX Date in ASCII coded Octal)} Ctime : Arr12; { 488-499, $1E8-1F3, time of last status change (UNIX Date in ASCII coded Octal)} Empty : Arr12B;{ 500-512, $1F4-1FF, Empty Space } end; { When support for sparse files is added, Add another record for sparse in header } { Note: SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE by design } PAbTarHeaderRec = ^TAbTarHeaderRec; { Declare pointer type for use in the list } TAbTarHeaderRec = packed record Name : ArrName; { 0- 99, $ 0- 63, filename, null terminated ASCII string, unless length is 100 } Mode : Arr8; { 100-107, $ 64- 6B, file mode (UNIX style, ASCII coded Octal) } uid : Arr8; { 108-115, $ 6C- 73, usrid # (UNIX style, ASCII coded Octal) } gid : Arr8; { 116-123, $ 74- 7B, grpid # (UNIX style, ASCII coded Octal) } Size : Arr12; { 124-135, $ 7C- 87, size of TARred file (ASCII coded Octal) } ModTime : Arr12; { 136-147, $ 88- 93, time of last modification.(UNIX Date in ASCII coded Octal) UTC time } ChkSum : Arr8; { 148-155, $ 94- 9B, checksum of header (6 bytes ASCII coded Octal, #00, #20) } LinkFlag: AnsiChar; { 156, $ 9C, type of item, one of the Link Flag constants from above } LinkName: ArrName; { 157-256, $ 9D-100, name of link, null terminated ASCII string } Magic : TAbTarMagicRec; { 257-264, $101-108, identifier, usually 'ustar'#00'00' } UsrName : array [0..AB_TAR_TUSRNAMELEN-1] of AnsiChar; { 265-296, $109-128, username, null terminated ASCII string } GrpName : array [0..AB_TAR_TGRPNAMELEN-1] of AnsiChar; { 297-328, $129-148, groupname, null terminated ASCII string } DevMajor: Arr8; { 329-336, $149-150, major device ID (UNIX style, ASCII coded Octal) } DevMinor: Arr8; { 337-344, $151-158, minor device ID (UNIX style, ASCII coded Octal) } case TAbTarHeaderFormat of{ 345-511, $159-1FF See byte Definitions above.} V7_FORMAT : ( v7 : TAbTarEnd_Empty_Rec ); OLDGNU_FORMAT: ( gnuOld: TAbTarEnd_GNU_old_Rec ); GNU_FORMAT : ( gnu : TAbTarEnd_GNU_old_Rec ); USTAR_FORMAT : ( ustar : TAbTarEnd_UStar_Rec ); STAR_FORMAT : ( star : TAbTarEnd_Star_Rec ); POSIX_FORMAT : ( pax : TAbTarEnd_Empty_Rec ); end;{ end TAbTarHeaderRec } { There are three main types of headers we will see in a Tar file } { TAbTarHeaderType = (STANDARD_HDR, SPARSE_HDR, POSIX_EXTENDED_HDR); } { The 1st is defined above, The later two are simply organized data types. } TAbTarItemRec = record { Note: that the actual The name needs to be coherient with the name Inherited from parent type TAbArchiveItem } Name : string; { Path & File name. } Mode : LongWord; { File Permissions } uid : Integer; { User ID } gid : Integer; { Group ID } Size : Int64; { Tared File size } ModTime : Int64; { Last time of Modification, in UnixTime } ChkSumPass : Boolean; { Header Check sum found to be good } LinkFlag : AnsiChar; { Link Flag, Echos the actual File Type of this Item. } ItemType : TAbTarItemType; { Item Type Assigned from LinkFlag Header Types. } LinkName : string; { Link Name } Magic : AnsiString; { Magic value } Version : Integer; { Version Number } UsrName : string; { User Name, for User ID } GrpName : string; { Group Name, for Group ID } DevMajor : Integer; { Major Device ID } DevMinor : Integer; { Minor Device ID } { Additional Types used for holding info. } AccessTime : Int64; { Time of Last Access, in UnixTime } ChangeTime : Int64; { Time of Last Status Change, in UnixTime } ArchiveFormat: TAbTarHeaderFormat; { Type of Archive of this record } StreamPosition: Int64; { Pointer to the top of the item in the file. } Dirty : Boolean; { Indication if this record needs to have its headers CheckSum recalculated } ItemReadOnly: Boolean; { Indication if this record is READ ONLY } FileHeaderCount:Integer;{ Number of Headers in the Orginal TarHeaders in the File Stream } end; type PTAbTarItem = ^TAbTarItem; TAbTarItem = class(TAbArchiveItem) private { The following private members are used for Stuffing FTarItem struct } procedure ParseTarHeaders; { Error in header if } procedure ParsePaxHeaders; { Error in header if } procedure DetectHeaderFormat; { Helper to stuff HeaderFormat } procedure GetFileNameFromHeaders; { Helper to pull name from Headers } procedure GetLinkNameFromHeaders; { Helper to pull name from Headers } function TestCheckSum: Boolean; { Helper to Calculate Checksum of a header. } procedure DoGNUExistingLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); procedure DoGNUNewLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); protected {private} PTarHeader: PAbTarHeaderRec;{ Points to FTarHeaderList.Items[FTarHeaderList.Count-1] } FTarHeaderList: TList; { List of The Headers } FTarHeaderTypeList: TList; { List of the Header Types } FTarItem: TAbTarItemRec; { Data about current TAR Item } protected function GetDevMajor: Integer; function GetDevMinor: Integer; function GetGroupID: Integer; function GetGroupName: string; function GetLinkName: string; function GetUserID: Integer; function GetUserName: string; function GetModTime: Int64; function GetNumHeaders: Integer; function GetMagic: string; { All Sets shall update the headers Or add headers as needed. } procedure SetDevMajor(const Value: Integer); procedure SetDevMinor(const Value: Integer); procedure SetGroupID(const Value: Integer); { Extended Headers } procedure SetGroupName(const Value: string); { Extended Headers } procedure SetLinkFlag(Value: AnsiChar); procedure SetLinkName(const Value: string); { Extended Headers } procedure SetUserID(const Value: Integer); { Extended Headers } procedure SetUserName(const Value: string); { Extended Headers } procedure SetModTime(const Value: Int64); Procedure SetMagic(const Value: string); { TODO: add support for Atime and Ctime here } { Overrides for Inherited Properties from type TAbArchiveItem } function GetCompressedSize : Int64; override; function GetExternalFileAttributes : LongWord; override; function GetFileName : string; override; function GetIsDirectory: Boolean; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; function GetNativeFileAttributes : LongInt; override; function GetNativeLastModFileTime: Longint; override; function GetUncompressedSize : Int64; override; procedure SetCompressedSize(const Value : Int64); override; { Extended Headers } procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string); override; { Extended Headers } procedure SetIsEncrypted(Value : Boolean); override; procedure SetLastModFileDate(const Value : Word); override; { Extended Headers } procedure SetLastModFileTime(const Value : Word); override; { Extended Headers } procedure SetLastModTimeAsDateTime(const Value: TDateTime); override; procedure SetUncompressedSize(const Value : Int64); override; { Extended Headers } procedure SaveTarHeaderToStream(AStream : TStream); procedure LoadTarHeaderFromStream(AStream : TStream); property Magic : string { Magic value } read GetMagic write SetMagic; public { property Name : STRING; Path & File name. Inherited from parent type TAbArchiveItem } { read GetFileName write SetFileName; overridden above} property Mode : LongWord { File Permissions } read GetExternalFileAttributes write SetExternalFileAttributes; property UserID : Integer { User ID } read GetUserID write SetUserID; property GroupID : Integer { Group ID } read GetGroupID write SetGroupID; property ModTime : Int64 read GetModTime write SetModTime; { property UncompressedSize/CompressedSize(Size): Int64; File size (comp/uncomp) Inherited from parent type TAbArchiveItem } { read GetUncompressedSize, GetCompressedSize; overridden above } { write SetUncompressedSize, SetCompressedSize; overridden above } { property LastModFileTime/LastModFileDate(ModeTime): TDateTime; Last time of Modification Inherited from parent type TAbArchiveItem } { read GetLastModFileTime, GetLastModFileDate; overridden above } { write SetLastModFileTime, SetLastModFileDate; overridden above } property CheckSumGood: Boolean read FTarItem.ChkSumPass; { Header Check sum found to be good } property LinkFlag : AnsiChar { Link Flag of File Header } read FTarItem.LinkFlag write SetLinkFlag; property LinkName : string { Link Name } read GetLinkName write SetLinkName; property UserName : string { User Name, for User ID } read GetUserName write SetUserName; property GroupName : string { Group Name, for Group ID } read GetGroupName write SetGroupName; property DevMajor : Integer { Major Device ID } read GetDevMajor write SetDevMajor; property DevMinor : Integer { Minor Device ID } read GetDevMinor write SetDevMinor; { TODO: Add support ATime and CTime } {AccessTime : TDateTime;} { Time of Last Access } {ChangeTime : TDateTime;} { Time of Last Status Change } { Additional Types used for holding info. } property ExternalFileAttributes; property ArchiveFormat: TAbTarHeaderFormat read FTarItem.ArchiveFormat write FTarItem.ArchiveFormat; property ItemType: TAbTarItemType read FTarItem.ItemType write FTarItem.ItemType; property ItemReadOnly: Boolean read FTarItem.ItemReadOnly write FTarItem.ItemReadOnly; property FileHeaderCount: Integer read FTarItem.FileHeaderCount; property HeaderCount: Integer read GetNumHeaders; property StreamPosition: Int64 read FTarItem.StreamPosition write FTarItem.StreamPosition; constructor Create; destructor Destroy; override; end; { end TAbArchiveItem } TAbTarStreamHelper = class(TAbArchiveStreamHelper) private function FindItem: Boolean; { Tool for FindFirst/NextItem functions } protected FOnProgress : TAbProgressEvent; FTarHeader : TAbTarHeaderRec; { Speed-up Buffer only } FCurrItemSize : Int64; { Current Item size } FCurrItemPreHdrs: Integer; { Number of Meta-data Headers before the Item } public constructor Create(AStream : TStream; AEvent : TAbProgressEvent); overload; destructor Destroy; override; procedure ExtractItemData(AStream : TStream); override; function FindFirstItem : Boolean; override; function FindNextItem : Boolean; override; procedure ReadHeader; override; procedure ReadTail; override; function SeekItem(Index : Integer): Boolean; override; procedure WriteArchiveHeader; override; procedure WriteArchiveItem(AStream : TStream); override; procedure WriteArchiveItemSize(AStream : TStream; ASize: Int64); procedure WriteArchiveTail; override; function GetItemCount : Integer; override; end; TAbTarArchive = class(TAbArchive) private FArchReadOnly : Boolean; FArchFormat: TAbTarHeaderFormat; protected FTargetStream: TStream; protected function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function FixName(const Value: string): string; override; function GetSupportsEmptyFolders: Boolean; override; function GetItem(Index: Integer): TAbTarItem; procedure PutItem(Index: Integer; const Value: TAbTarItem); public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; property UnsupportedTypesDetected : Boolean read FArchReadOnly; property Items[Index : Integer] : TAbTarItem read GetItem write PutItem; default; end; procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; out Permissions: LongWord; out LinkFlag: AnsiChar); procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; out UnixAttrs: LongWord); function VerifyTar(Strm : TStream) : TAbArchiveType; implementation uses Math, RTLConsts, SysUtils, AbVMStrm, AbExcept, AbProgress, DCOSUtils, DCClassesUtf8, DCConvertEncoding, DCStrUtils; { ****************** Helper functions Not from Classes Above ***************** } function OctalToInt(const Oct : PAnsiChar; aLen : integer): Int64; var r : UInt64; i : integer; c, sign : Byte; begin Result := 0; if (aLen = 0 ) then Exit; { detect binary number format } if ((Ord(Oct[0]) and $80) <> 0) then begin c:= Ord(Oct[0]); if (c and $40 <> 0) then begin sign := $FF; r := High(UInt64); end else begin r := 0; sign := 0; c := c and $7F; end; i:= 1; while (aLen > SizeOf(Int64)) do begin if (c <> sign) then begin if (sign <> 0) then Result:= Low(Int64) else begin Result:= High(Int64); end; Exit; end; c := Ord(Oct[i]); Dec(aLen); Inc(i); end; if ((c xor sign) and $80 <> 0) then begin if (sign <> 0) then Result:= Low(Int64) else begin Result:= High(Int64); end; Exit; end; while (aLen > 1) do begin r := (r shl 8) or c; c:= Ord(Oct[i]); Dec(aLen); Inc(i); end; r := (r shl 8) or c; Exit(Int64(r)); end; i := 0; while (i < aLen) and (Oct[i] = ' ') do inc(i); if (i = aLen) then Exit; while (i < aLen) and (Oct[i] in ['0'..'7']) do begin Result := (Result * 8) + (Ord(Oct[i]) - Ord('0')); inc(i); end; end; function IntToOctal(Value : Int64): AnsiString; const OctDigits : array[0..7] of AnsiChar = '01234567'; begin if Value = 0 then Result := '0' else begin Result := ''; while Value > 0 do begin Result := OctDigits[Value and 7] + Result; Value := Value shr 3; end; end; end; function CalcTarHeaderChkSum(const TarH : TAbTarHeaderRec): LongInt; var HdrBuffer : PAnsiChar; HdrChkSum : LongInt; j : Integer; begin { prepare for the checksum calculation } HdrBuffer := PAnsiChar(@TarH); HdrChkSum := 0; {calculate the checksum, a simple sum of the bytes in the header} for j := 0 to Pred(SizeOf(TAbTarHeaderRec)) do HdrChkSum := HdrChkSum + Ord(HdrBuffer[j]); Result := HdrChkSum; end; function VerifyTar(Strm : TStream) : TAbArchiveType; { assumes Tar positioned correctly for test of item } var TarItem : TAbTarItem; StartPos : Int64; begin StartPos := Strm.Position; try { Verifies that the header checksum is valid, and Item type is understood. This does not mean that extraction is supported. } TarItem := TAbTarItem.Create; try { get current Tar Header } TarItem.LoadTarHeaderFromStream(Strm); if TarItem.CheckSumGood then Result := atTar else Result := atUnknown; finally TarItem.Free; end; except on EReadError do Result := atUnknown; end; Strm.Position := StartPos; end; function PadString(const S : AnsiString; Places : Integer) : AnsiString; { Pads a string (S) with one right space and as many left spaces as needed to fill Places If length S greater than Places, just returns S Some TAR utilities evidently expect Octal numeric fields to be in this format } begin if Length(S) >= LongInt(Places) then Result := S else begin Result := S + ' '; Result := StringOfChar(AnsiChar(' '), Places - Length(Result)) + Result; end; end; { Round UP to the nearest Tar Block Boundary. } function RoundToTarBlock(Size: Int64) : Int64; begin Result := (Size + (AB_TAR_RECORDSIZE - 1)) and not (AB_TAR_RECORDSIZE - 1); end; procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; out Permissions: LongWord; out LinkFlag: AnsiChar); begin case (UnixAttrs and $F000) of AB_FMODE_SOCKET: ; AB_FMODE_FILELINK: LinkFlag := AB_TAR_LF_SYMLINK; AB_FMODE_FILE2: LinkFlag := AB_TAR_LF_NORMAL; AB_FMODE_BLOCKSPECFILE: LinkFlag := AB_TAR_LF_BLK; AB_FMODE_DIR: LinkFlag := AB_TAR_LF_DIR; AB_FMODE_CHARSPECFILE: LinkFlag := AB_TAR_LF_CHR; AB_FMODE_FIFO: LinkFlag := AB_TAR_LF_FIFO; AB_FMODE_FILE: LinkFlag := AB_TAR_LF_NORMAL; else LinkFlag := AB_TAR_LF_OLDNORMAL; end; Permissions := (UnixAttrs and $0FFF); end; { -------------------------------------------------------------------------- } procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; out UnixAttrs: LongWord); begin case LinkFlag of AB_TAR_LF_OLDNORMAL: UnixAttrs := AB_FMODE_FILE; AB_TAR_LF_NORMAL: UnixAttrs := AB_FMODE_FILE2; AB_TAR_LF_SYMLINK: UnixAttrs := AB_FMODE_FILELINK; AB_TAR_LF_BLK: UnixAttrs := AB_FMODE_BLOCKSPECFILE; AB_TAR_LF_DIR: UnixAttrs := AB_FMODE_DIR; AB_TAR_LF_CHR: UnixAttrs := AB_FMODE_CHARSPECFILE; AB_TAR_LF_FIFO: UnixAttrs := AB_FMODE_FIFO; else UnixAttrs := AB_FMODE_FILE; end; UnixAttrs := UnixAttrs or (Permissions and $0FFF); end; { ****************************** TAbTarItem ********************************** } constructor TAbTarItem.Create; begin inherited Create; FTarHeaderList := TList.Create; FTarHeaderTypeList := TList.Create; GetMem(PTarHeader, AB_TAR_RECORDSIZE); { PTarHeader is our new Header } FillChar(PTarHeader^, AB_TAR_RECORDSIZE, #0); FTarHeaderList.Add(PTarHeader); FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); FTarItem.FileHeaderCount := 1; { set defaults } FTarItem.ArchiveFormat := UNKNOWN_FORMAT; FileName := ''; Mode := AB_FPERMISSION_GENERIC; UserID := 0; GroupID := 0; UncompressedSize := 0; { ModTime } LinkFlag := AB_TAR_LF_OLDNORMAL; { Link Name } PTarHeader.Magic.gnuOld := AB_TAR_MAGIC_V7_NONE; { Default to GNU type } UserName := ''; GroupName := ''; DevMajor := 0; DevMinor := 0; { TODO: atime, ctime } FTarItem.ItemType := SUPPORTED_ITEM; FTarItem.Dirty := True; { Checksum needs to be generated } FTarItem.ItemReadOnly := False; end; destructor TAbTarItem.Destroy; var i : Integer; begin if Assigned(FTarHeaderList) then begin for i := 0 to FTarHeaderList.Count - 1 do FreeMem(FTarHeaderList.Items[i]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Free; end; FTarHeaderTypeList.Free; inherited Destroy; end; function TAbTarItem.GetCompressedSize: Int64; { TAR includes no internal compression, returns same value as GetUncompressedSize } begin Result := FTarItem.Size; end; function TAbTarItem.GetDevMajor: Integer; begin Result := FTarItem.DevMajor; end; function TAbTarItem.GetDevMinor: Integer; begin Result := FTarItem.DevMinor; end; function TAbTarItem.GetExternalFileAttributes: LongWord; begin TarAttrsToUnixAttrs(FTarItem.Mode, FTarItem.LinkFlag, Result); end; function TAbTarItem.GetFileName: string; begin Result := FTarItem.Name; { Inherited String from Parent Class } end; function TAbTarItem.GetGroupID: Integer; begin Result := FTarItem.gid; end; function TAbTarItem.GetGroupName: string; begin Result := FTarItem.GrpName; end; function TAbTarItem.GetIsDirectory: Boolean; begin Result := (LinkFlag = AB_TAR_LF_DIR); end; function TAbTarItem.GetIsEncrypted: Boolean; begin { TAR has no native encryption } Result := False; end; function TAbTarItem.GetLastModFileDate: Word; begin { convert to local DOS file Date } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Hi; end; function TAbTarItem.GetLastModFileTime: Word; begin { convert to local DOS file Time } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Lo; end; function TAbTarItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbUnixTimeToLocalDateTime(FTarItem.ModTime); end; function TAbTarItem.GetNativeLastModFileTime: Longint; {$IFDEF MSWINDOWS} var DateTime: TDateTime; {$ENDIF} begin Result := Self.ModTime; {$IFDEF MSWINDOWS} DateTime := AbUnixTimeToLocalDateTime(Result); Result := AbDateTimeToDosFileDate(DateTime); {$ENDIF} end; function TAbTarItem.GetLinkName: string; begin Result := FTarItem.LinkName; end; function TAbTarItem.GetMagic: string; begin Result := string(FTarItem.Magic); end; function TAbTarItem.GetNativeFileAttributes : LongInt; begin Result := GetExternalFileAttributes; {$IFDEF MSWINDOWS} Result := AbUnix2DosFileAttributes(Result); {$ENDIF} end; function TAbTarItem.GetUncompressedSize: Int64; { TAR includes no internal compression, returns same value as GetCompressedSize } begin Result := FTarItem.Size; end; function TAbTarItem.GetUserID: Integer; begin Result := FTarItem.uid; end; function TAbTarItem.GetUserName: string; begin Result := FTarItem.UsrName; end; function TAbTarItem.GetModTime: Int64; begin Result := FTarItem.ModTime; end; { Get Number of tar headers currently for this item } function TAbTarItem.GetNumHeaders: Integer; begin Result := FTarHeaderList.Count; end; { Takes data from Supported Header types stored in TAbTarItem.FTarHeaderList } { and updates values in the TAbTarItem.FTarItem.X } procedure TAbTarItem.DetectHeaderFormat; begin if FTarItem.ArchiveFormat <> UNKNOWN_FORMAT then Exit;{ We have already set the format. } { In the previous header parsing if pax headers are detected the format is changed } { GNU_FORMAT is detected by the presence of GNU extended headers. } { These detections are similar to GNU tar's. } if CompareByte(PTarHeader.Magic.value, AB_TAR_MAGIC_VAL, SizeOf(AB_TAR_MAGIC_VAL)) = 0 then begin { We have one of three types, STAR_FORMAT, USTAR_FORMAT, POSIX_FORMAT } { Detect STAR format. Leave disabled until explicit STAR support is added. } {if (PTarHeader.star.Prefix[130] = #00) and (PTarHeader.star.Atime[0] in ['0'..'7']) and (PTarHeader.star.Atime[11] = #20) and (PTarHeader.star.Ctime[0]in ['0'..'7']) and (PTarHeader.star.Ctime[11] = #20) then begin FTarItme.ArchiveType := STAR_FORMAT; end } { else if } { POSIX uses the existance of x headers } { This can define false positives, Pax headers/ STAR format could be detected as this } FTarItem.ArchiveFormat := USTAR_FORMAT; end else if CompareByte(PTarHeader.Magic.gnuOld, AB_TAR_MAGIC_GNUOLD, SizeOf(AB_TAR_MAGIC_GNUOLD)) = 0 then begin FTarItem.ArchiveFormat := OLDGNU_FORMAT; end else { V7 uses AB_TAR_LF_OLDNORMAL linkflag, has no magic field & no Usr/Grp Names } begin FTarItem.ArchiveFormat := V7_FORMAT; { Lowest Common Denominator } end; end; { Extract the file name from the headers } procedure TAbTarItem.GetFileNameFromHeaders; var I, J : Integer; PHeader: PAbTarHeaderRec; FoundName: Boolean; NameLength : Int64; NumMHeaders: integer; ExtraName: integer; RawFileName, TempStr: AnsiString; begin { UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT } FoundName := False; I := 0; while (not FoundName) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGNAME then begin FoundName := True; RawFileName := ''; NameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size)); NumMHeaders := NameLength div AB_TAR_RECORDSIZE; ExtraName := NameLength mod AB_TAR_RECORDSIZE; { Chars in the last Header } { NumMHeaders should never be zero } { It appears that it is not null terminated in the blocks } for J := 1 to NumMHeaders do begin { Copy entire content of Header to String } PHeader := FTarHeaderList.Items[I+J]; SetString(TempStr, PAnsiChar(PHeader), AB_TAR_RECORDSIZE); RawFileName := RawFileName + TempStr; end; if ExtraName <> 0 then begin PHeader := FTarHeaderList.Items[I+NumMHeaders+1]; SetString(TempStr, PAnsiChar(PHeader), ExtraName-1); RawFileName := RawFileName + TempStr; end else { We already copied the entire name, but the string is still null terminated. } begin { Removed the last zero } SetLength(RawFileName, (Length(RawFileName)-1)); end; end { end long filename link flag } else I := I + 1; end; { End While } if not FoundName then begin if (FTarItem.ArchiveFormat = USTAR_FORMAT) and (PTarHeader.ustar.Prefix[0] <> #0) then RawFileName := PTarHeader.ustar.Prefix+'/'+PTarHeader.Name else { V7_FORMAT, OLDGNU_FORMAT } RawFileName := PTarHeader.Name; end; { End not FoundName } FTarItem.Name := CeRawToUtf8(RawFileName); end; { Extract the file name from the headers } procedure TAbTarItem.GetLinkNameFromHeaders; var I, J : Integer; PHeader: PAbTarHeaderRec; FoundName: Boolean; NameLength : Int64; NumMHeaders: integer; ExtraName: integer; RawLinkName, TempStr: AnsiString; begin { UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT } PHeader := nil; FoundName := False; I := 0; { Note that: FTarHeaderList.Count <= 1, always } while (not FoundName) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGLINK then begin FoundName := True; RawLinkName := ''; NameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size)); NumMHeaders := NameLength div AB_TAR_RECORDSIZE; ExtraName := NameLength mod AB_TAR_RECORDSIZE; { Chars in the last Header } { NumMHeaders should never be zero } { It appears that it is not null terminated in the blocks } for J := 1 to NumMHeaders do begin { Copy entire content of Header to String } PHeader := FTarHeaderList.Items[I+J]; SetString(TempStr, PAnsiChar(PHeader), AB_TAR_RECORDSIZE); RawLinkName := RawLinkName + TempStr; end; if ExtraName <> 0 then begin PHeader := FTarHeaderList.Items[I+NumMHeaders+1]; SetString(TempStr, PAnsiChar(PHeader), ExtraName-1); RawLinkName := RawLinkName + TempStr; end else { We already copied the entire name, but the string is still null terminated. } begin { Removed the last zero } SetLength(RawLinkName, (Length(RawLinkName)-1)); end; end { end long filename link flag } else I := I + 1; end; { End While } if not FoundName then RawLinkName := PHeader.LinkName; FTarItem.LinkName := CeRawToUtf8(RawLinkName); end; { Return True if CheckSum passes out. } function TAbTarItem.TestCheckSum : Boolean; var TarChkSum : LongInt; TarChkSumArr : Arr8; { ChkSum field is Arr8 } PHeader: PAbTarHeaderRec; I: Integer; begin Result := True; { Check sums are in valid headers but NOT in the data headers. } for I := 0 to FTarHeaderList.Count - 1 do begin if TAbTarHeaderType(FTarHeaderTypeList.Items[I]) in [FILE_HEADER, META_DATA_HEADER] then begin PHeader := FTarHeaderList.Items[i]; { Save off old Check sum } Move(PHeader.ChkSum, TarChkSumArr, SizeOf(PHeader.ChkSum)); TarChkSum := OctalToInt(TarChkSumArr, SizeOf(TarChkSumArr)); { Set to Generator Value } PHeader.ChkSum := AB_TAR_CHKBLANKS; if CalcTarHeaderChkSum(PHeader^) <> TarChkSum then Result := False; { Pass unless one miss-compares } { Save back old checksum } Move(TarChkSumArr, PHeader.ChkSum, SizeOf(TarChkSumArr)); end; end; end; procedure TAbTarItem.ParseTarHeaders; begin { The final index is the Item index } DetectHeaderFormat; { Long term this parsing is not correct, as the values in extended headers override the later values in this header } FTarItem.Mode := OctalToInt(PTarHeader.Mode, SizeOf(PTarHeader.Mode)); FTarItem.uid := OctalToInt(PTarHeader.uid, SizeOf(PTarHeader.uid)); { Extended in PAX Headers } FTarItem.gid := OctalToInt(PTarHeader.gid, SizeOf(PTarHeader.gid)); { Extended in PAX Headers } FTarItem.Size := OctalToInt(PTarHeader.Size, SizeOf(PTarHeader.Size)); { Extended in PAX Headers } { ModTime should be an Int64 but no tool support, No issues until Feb 6th, 2106 :) } { ModTime is Extended in PAX Headers } FTarItem.ModTime := OctalToInt(PTarHeader.ModTime, SizeOf(PTarHeader.ModTime)); FTarItem.ChkSumPass := TestCheckSum(); FTarItem.LinkFlag := PTarHeader.LinkFlag; GetLinkNameFromHeaders; { Extended in PAX Headers } FTarItem.Magic := PTarHeader.Magic.value; FTarItem.Version := OctalToInt(PTarHeader.Magic.version, SizeOf(PTarHeader.Magic.version)); FTarItem.UsrName := string(PTarHeader.UsrName); { Extended in PAX Headers } FTarItem.GrpName := string(PTarHeader.GrpName); { Extended in PAX Headers } FTarItem.DevMajor := OctalToInt(PTarHeader.DevMajor, SizeOf(PTarHeader.DevMajor)); FTarItem.DevMinor := OctalToInt(PTarHeader.DevMinor, SizeOf(PTarHeader.DevMinor)); GetFileNameFromHeaders; { FTarItem.ArchiveFormat; Already stuffed } { FTarItem.StreamPosition: Already Stuffed } { FTarItem.Dirty; Stuffed upon creaction } end; procedure TAbTarItem.ParsePaxHeaders; var I, J : Integer; ALength: Integer; RawLength: Int64; RawExtra: Integer; S, P, O: PAnsiChar; NumMHeaders: Integer; PHeader: PAbTarHeaderRec; AName, AValue: AnsiString; RawValue, TempStr: AnsiString; begin RawValue := EmptyStr; for I := 0 to FTarHeaderList.Count - 1 do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_XHDR then begin RawLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size)); // Number of headers NumMHeaders := RawLength div AB_TAR_RECORDSIZE; // Chars in the last header RawExtra := RawLength mod AB_TAR_RECORDSIZE; // Copy data from headers for J := 1 to NumMHeaders do begin PHeader := FTarHeaderList.Items[I + J]; SetString(TempStr, PAnsiChar(PHeader), AB_TAR_RECORDSIZE); RawValue := RawValue + TempStr; end; // Copy data from the last header if RawExtra <> 0 then begin PHeader := FTarHeaderList.Items[I + NumMHeaders + 1]; SetString(TempStr, PAnsiChar(PHeader), RawExtra); RawValue := RawValue + TempStr; end; Break; end; end; // Parse pax headers if (Length(RawValue) > 0) then begin O := nil; ALength:= 0; S:= Pointer(RawValue); P:= S; while (P^ <> #0) do begin case P^ of #10: begin Inc(P); S := P; O := nil; ALength:= 0; end; #32: begin P^:= #0; Inc(P); O:= P; ALength:= StrToIntDef(S, 0); end; '=': begin // Something wrong, exit if (ALength = 0) or (O = nil) then Exit; SetString(AName, O, P - O); ALength:= ALength - (P - S) - 1; if (AName = 'path') then begin SetString(AValue, P + 1, ALength - 1); FTarItem.Name := CeRawToUtf8(AValue); end else if (AName = 'linkpath') then begin SetString(AValue, P + 1, ALength - 1); FTarItem.LinkName := CeRawToUtf8(AValue); end else if (AName = 'size') then begin SetString(AValue, P + 1, ALength - 1); FTarItem.Size := StrToInt64Def(AValue, FTarItem.Size); end else if (AName = 'mtime') then begin SetString(AValue, P + 1, ALength - 1); FTarItem.ModTime := Round(StrToFloatDef(AValue, FTarItem.ModTime)); end; Inc(P, ALength); end; else begin Inc(P); end; end; end; end; end; procedure TAbTarItem.LoadTarHeaderFromStream(AStream: TStream); var NumMHeaders : Integer; I : Integer; FoundItem : Boolean; begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } { We should expect FindNext/FirstItem, and next check for bounds. } if FTarHeaderList.Count > 0 then begin { We're Going to stomp over the headers that are already present } { We need to destory the memory we've used } PTarHeader := nil; for i := 0 to FTarHeaderList.Count - 1 do FreeMem(FTarHeaderList.Items[i]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Clear; FTarHeaderTypeList.Clear; FTarItem.FileHeaderCount := 0; { All pointers should now be removed from those headers } end; { Now lets start filling up that list. } FTarItem.ItemType := UNKNOWN_ITEM; { We don't know what we have yet } FoundItem := False; while not FoundItem do begin { Create a Header to be Stored in the Items List } GetMem(PTarHeader, AB_TAR_RECORDSIZE); AStream.ReadBuffer(PTarHeader^, AB_TAR_RECORDSIZE); FTarHeaderList.Add(PTarHeader); { Store the Header to the list } { Parse header based on LinkFlag } if PTarHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { This Header type is in the Set of un/supported Meta data type headers } if PTarHeader.LinkFlag in AB_UNSUPPORTED_MD_HEADERS then FTarItem.ItemReadOnly := True; { We don't fully support this meta-data type } if (PTarHeader.LinkFlag in AB_PAX_MD_HEADERS) and (CompareByte(PTarHeader.Magic.value, AB_TAR_MAGIC_VAL, SizeOf(AB_TAR_MAGIC_VAL)) = 0) then FTarItem.ArchiveFormat := POSIX_FORMAT; { We have a POSIX_FORMAT, has x headers, and Magic matches } if PTarHeader.LinkFlag in AB_GNU_MD_HEADERS then FTarItem.ArchiveFormat := OLDGNU_FORMAT; { We have a OLDGNU_FORMAT, has L/K headers } { There can be a unknown number of Headers of data } { We are for sure going to read at least one more header, but are we going to read more than that? } FTarHeaderTypeList.Add(Pointer(META_DATA_HEADER)); NumMHeaders := Ceil(OctalToInt(PTarHeader.Size, SizeOf(PTarHeader.Size)) / AB_TAR_RECORDSIZE); { NumMHeasder should never be zero } for I := 1 to NumMHeaders do begin GetMem(PTarHeader, AB_TAR_RECORDSIZE); { Create a new Header } AStream.ReadBuffer(PTarHeader^, AB_TAR_RECORDSIZE); { Get the Meta Data } FTarHeaderList.Add(PTarHeader); { Store the Header to the list } FTarHeaderTypeList.Add(Pointer(MD_DATA_HEADER)); end; { Loop and reparse } end else if PTarHeader.LinkFlag in AB_SUPPORTED_F_HEADERS then begin { This Header type is in the Set of supported File type Headers } FoundItem := True; { Exit Criterion } FTarItem.ItemType := SUPPORTED_ITEM; if FTarItem.ItemReadOnly then { Since some of the Headers are read only. } FTarItem.ItemType := UNSUPPORTED_ITEM; { This Item is unsupported } FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); end else if PTarHeader.LinkFlag in AB_UNSUPPORTED_F_HEADERS then begin { This Header type is in the Set of unsupported File type Headers } FoundItem := True; { Exit Criterion } FTarItem.ItemType := UNSUPPORTED_ITEM; FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); end else { These are unknown header types } begin { Note: Some of these unknown types could have known Meta-data headers } FoundItem := True; FTarItem.ItemType := UNKNOWN_ITEM; FTarHeaderTypeList.Add(Pointer(UNKNOWN_HEADER)); end;{ end LinkFlag parsing } end; { end Found Item While } { PTarHeader points to FTarHeaderList.Items[FTarHeaderList.Count-1]; } { Re-wind the Stream back to the begining of this Item inc. all headers } AStream.Seek(-(FTarHeaderList.Count*AB_TAR_RECORDSIZE), soCurrent); { AStream.Position := FTarItem.StreamPosition; } { This should be equivalent as above } FTarItem.FileHeaderCount := FTarHeaderList.Count; if FTarItem.ItemType <> UNKNOWN_ITEM then begin ParseTarHeaders; { Update FTarItem values } ParsePaxHeaders; { Update FTarItem values } FFileName := FTarItem.Name; {FTarHeader.Name;} // FDiskFileName := FileName; // AbUnfixName(FDiskFileName); end; Action := aaNone; Tagged := False; end; { ****************** BEGIN SET ********************** } procedure TAbTarItem.SaveTarHeaderToStream(AStream: TStream); var i : Integer; j : Integer; PHeader : PAbTarHeaderRec; HdrChkSum : Integer; HdrChkStr : AnsiString; HdrBuffer : PAnsiChar; SkipNextChkSum: Integer; SkipChkSum: Boolean; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } if FTarItem.Dirty then SkipNextChkSum := 0 else SkipNextChkSum := FTarHeaderList.Count; { Don't recalc any chkSums } { The first header in the Item list must have a checksum calculation } for i := 0 to (FTarHeaderList.Count-1) do begin SkipChkSum := False; PHeader := FTarHeaderList.Items[i]; if (SkipNextChkSum = 0) then begin { We need to parse this header } if PHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { We have a Meta-Data Header, Calculate how many headers to skip. } { These meta-data headers have non-Header buffers after this Header } SkipNextChkSum := Ceil(OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); { Ceil will mandate one run through, and will handle 512 correctly } end else if PHeader.LinkFlag in AB_SUPPORTED_F_HEADERS then begin SkipNextChkSum := 0; end else begin { Un-Supported Header type, Copy but do nothing to the data } SkipNextChkSum := 0; SkipChkSum := True; end;{ end LinkFlag parsing } end else begin { Do not calcuate the check sum on this meta Data header buffer } SkipNextChkSum := SkipNextChkSum - 1; SkipChkSum := True; end;{ end SkipNextChkSum } if not SkipChkSum then begin { We are Calculating the Checksum for this Header } {Tar ChkSum is "odd" The check sum field is filled with #20 chars as empty } { ChkSum field itself is #20'd and has an effect on the sum } PHeader.ChkSum := AB_TAR_CHKBLANKS; { Set up the buffers } HdrBuffer := PAnsiChar(PHeader); HdrChkSum := 0; { Calculate the checksum, a simple sum of the bytes in the header } for j := 0 to (AB_TAR_RECORDSIZE-1) do HdrChkSum := HdrChkSum + Ord(HdrBuffer[j]); { set the checksum in the header } HdrChkStr := PadString(IntToOctal(HdrChkSum), SizeOf(PHeader.ChkSum)); Move(HdrChkStr[1], PHeader.ChkSum, Length(HdrChkStr)); end; { end Skip Check Sum } { write header to the file } AStream.Write(PHeader^, AB_TAR_RECORDSIZE); end; { End for the number of headers in the list } { Updated here as the stream is now updated to the latest number of headers } FTarItem.FileHeaderCount := FTarHeaderList.Count; end; procedure TAbTarItem.SetCompressedSize(const Value: Int64); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Size is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.Size := Value; { Store our Vitrual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.Size, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetDevMajor(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Dev Major and Minor are Only used for AB_TAR_LF_CHR, AB_TAR_LF_BLK } { Otherwise they are stuffed with #00 } FTarItem.DevMajor := Value; { Store to the struct } S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.DevMajor, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetDevMinor(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Dev Major and Minor are Only used for AB_TAR_LF_CHR, AB_TAR_LF_BLK } { Otherwise they are stuffed with #00 } FTarItem.DevMinor := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.DevMinor, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetExternalFileAttributes(Value: LongWord); var S : AnsiString; I: Integer; Permissions: LongWord; ALinkFlag: AnsiChar; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; UnixAttrsToTarAttrs(Value, Permissions, ALinkFlag); FTarItem.Mode := Permissions; S := PadString(IntToOctal(Permissions), SizeOf(Arr8)); for I := 0 to FTarHeaderList.Count - 1 do if TAbTarHeaderType(FTarHeaderTypeList.Items[I]) in [FILE_HEADER, META_DATA_HEADER] then Move(S[1], PAbTarHeaderRec(FTarHeaderList.Items[I]).Mode, Length(S)); Self.LinkFlag := ALinkFlag; // also updates headers FTarItem.Dirty := True; end; { Add/Remove Headers as needed To/From Existing GNU Long (Link/Name) TarItems } procedure TAbTarItem.DoGNUExistingLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); var PHeader: PAbTarHeaderRec; J: Integer; OldNameLength: Integer; TotalOldNumHeaders: Integer; TotalNewNumHeaders: Integer; NumHeaders: Integer; ExtraName: Integer; tempStr: AnsiString; begin PHeader := FTarHeaderList.Items[I]; { Need this data from the old header } OldNameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size));{ inlcudes Null termination } { Length(FTarItem.Name)+1 = OldNameLength; }{ This should be true, always } { Save off the new Length, so we don't have to change the pointers later. } tempStr := PadString(IntToOctal(Length(Value)+1), SizeOf(PHeader.Size)); Move(tempStr[1], PHeader.Size, Length(tempStr)); TotalOldNumHeaders := Ceil(OldNameLength / AB_TAR_RECORDSIZE); TotalNewNumHeaders := Ceil((Length(Value)+1) / AB_TAR_RECORDSIZE);{ Null terminated } {Length(Value)+1: 1-512 = 1, 513-1024 = 2 ... } J := TotalOldNumHeaders - TotalNewNumHeaders; while J <> 0 do begin if J > 0 then begin { Old > New, Have to many Headers, Remove } FreeMem(FTarHeaderList.Items[I+J]); { Free the Memory for the extra Header } FTarHeaderList.Delete(I+J); { Delete the List index } FTarHeaderTypeList.Delete(I+J); J := J - 1; end else { if J < 0 then } begin { Old < New, Need more Headers, Insert } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I+1,PHeader);{ Insert: Inserts at index } FTarHeaderTypeList.Insert(I+1,Pointer(MD_DATA_HEADER));{ We are only adding MD Data headers here } J := J + 1; end; end;{ end numHeaders while } { Yes, GNU Tar adds a Nil filled MD data header if Length(Value) mod AB_TAR_RECORDSIZE = 0 } NumHeaders := (Length(Value)+1) div AB_TAR_RECORDSIZE; { Include Null terminator } ExtraName := (Length(Value)+1) mod AB_TAR_RECORDSIZE; { Chars in the last Header } { Now we have the number of headers set up, stuff the name in the Headers } TempStr := AnsiString(Value); for J := 1 to NumHeaders do begin { Copy entire next AB_TAR_RECORDSIZE bytes of tempString to content of Header } { There may only be AB_TAR_RECORDSIZE-1 bytes if this is the last rounded header } PHeader := FTarHeaderList.Items[I+J]; Move(TempStr[1], PHeader^, AB_TAR_RECORDSIZE); if Length(TempStr) >= AB_TAR_RECORDSIZE then Delete(TempStr, 1, AB_TAR_RECORDSIZE);{ Crop string } end; if ExtraName <> 0 then begin { Copy whatever is left in tempStr into the rest of the buffer } PHeader := FTarHeaderList.Items[I+NumHeaders+1]; FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } Move(TempStr[1], PHeader^, ExtraName-1); { The string is null terminated } end else { We already copied the entire name, but it must be null terminated } begin FillChar(Pointer(PtrInt(PHeader)+AB_TAR_RECORDSIZE-1)^, 1, #0); { Zero rest of the block } end; { Finally we need to stuff the file type Header. } { Note: Value.length > AB_TAR_NAMESIZE(100) } if LinkFlag = AB_TAR_LF_LONGNAME then Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; { Always inserts the L/K Headers at index 0+ } procedure TAbTarItem.DoGNUNewLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); var PHeader: PAbTarHeaderRec; J: Integer; NumHeaders: Integer; ExtraName: Integer; tempStr: AnsiString; begin { We have a GNU_FORMAT, and no L/K Headers.} { Add a new MD Header and MD Data Headers } { Make an L/K header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I, PHeader);{ Insert: Inserts at base index } FTarHeaderTypeList.Insert(I, Pointer( META_DATA_HEADER));{ This is the L/K Header } FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } StrPCopy(PHeader.Name, AB_TAR_L_HDR_NAME); { Stuff L/K String Name } StrPCopy(PHeader.Mode, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } StrPCopy(PHeader.uid, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } StrPCopy(PHeader.gid, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } tempStr := PadString(IntToOctal(Length(Value)+1), SizeOf(PHeader.Size)); { Stuff Size } Move(tempStr[1], PHeader.Size, Length(tempStr)); StrPCopy(PHeader.ModTime, AB_TAR_L_HDR_ARR12_0); { Stuff zeros } { Check sum will be calculated as the Dirty flag is in caller. } PHeader.LinkFlag := LinkFlag; { Stuff Link FlagSize } StrPCopy(PHeader.Magic.gnuOld, AB_TAR_MAGIC_GNUOLD); { Stuff the magic } StrPCopy(PHeader.UsrName, AB_TAR_L_HDR_USR_NAME); StrPCopy(PHeader.GrpName, AB_TAR_L_HDR_GRP_NAME); { All else stays as Zeros. } { Completed with L/K Header } { OK, now we need to add the proper number of MD Data Headers, and intialize to new name } { Yes, GNU Tar adds an extra Nil filled MD data header if Length(Value) mod AB_TAR_RECORDSIZE = 0 } NumHeaders := Ceil((Length(Value)+1) / AB_TAR_RECORDSIZE); { Include Null terminator } ExtraName := (Length(Value)+1) mod AB_TAR_RECORDSIZE; { Chars in the last Header } { Now we have the number of headers set up, stuff the name in the Headers } TempStr := AnsiString(Value); for J := 1 to NumHeaders-1 do begin { Make a buffer, and copy entire next AB_TAR_RECORDSIZE bytes of tempStr to content of Header } { There may only be AB_TAR_RECORDSIZE-1 bytes if this is the last rounded header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(J+I, PHeader); FTarHeaderTypeList.Insert(J+I, Pointer(MD_DATA_HEADER));{ We are adding MD Data headers here } Move(TempStr[1], PHeader^, AB_TAR_RECORDSIZE); if Length(TempStr) >= AB_TAR_RECORDSIZE then Delete(TempStr, 1, AB_TAR_RECORDSIZE);{ Crop string } end; if ExtraName <> 0 then begin { Copy what ever is left in tempStr into the rest of the buffer } { Create the last MD Data Header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I+NumHeaders, PHeader);{ Insert: Inserts at base index } FTarHeaderTypeList.Insert(I+NumHeaders, Pointer(MD_DATA_HEADER));{ We are only adding MD Data headers here } FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } Move(TempStr[1], PHeader^, ExtraName-1); { The string is null terminated in the header } end else { We already copied the entire name, but it must be null terminated } begin FillChar(Pointer(PtrInt(PHeader)+AB_TAR_RECORDSIZE-1)^, 1, #0); { Zero rest of the block } end; { Finally we need to stuff the file type Header. } { Note: Value.length > AB_TAR_NAMESIZE(100) } if LinkFlag = AB_TAR_LF_LONGNAME then Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; procedure TAbTarItem.SetFileName(const Value: string); var FoundMetaDataHeader: Boolean; PHeader: PAbTarHeaderRec; I, J: Integer; TotalOldNumHeaders: Integer; RawFileName: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Assume ItemReadOnly is set for all Unsupported Type. } { Cases: New File Name is short, Length <= 100, All formats: Zero Name field and move new name to field. V7: Work complete, 1 header USTAR: zero prefix field, 1 Header OLD_GNU & GNU: Remove old name headers, 1 header. STAR & PAX: And should not yet get here. New File Name is Long, Length >=101 Note: The Header Parsing sets any V7 to GNU if 'L'/'K" Headers are present V7: Raise an exception, as this can NOT be done, no change to header. USTAR: if new length <= 254 zero fill header, update name fields, 1 updated Header if new Length >= 255 raise an exception, as this can NOT be done, no change to header if old was Short, Add files to match format, OLD_GNU & GNU: Create new Name header, Add N Headers for name, Update name in file header, update name fields, min 3 headers STAR & PAX: And should not yet get here. if old was Long, OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers Add headers to length of new Name Length, update name in file header, update name fields } RawFileName := CeUtf8ToSys(Value); { In all cases zero out the name fields in the File Header. } if Length(RawFileName) > AB_TAR_NAMESIZE then begin { Must be null terminated except at 100 char length } { Look for long name meta-data headers already in the archive. } FoundMetaDataHeader := False; I := 0; { FTarHeaderList.Count <= 1 always } while (not FoundMetaDataHeader) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGNAME then begin { We are growing or Shriking the Name MD Data fields. } FoundMetaDataHeader := True; DoGNUExistingLongNameLink(AB_TAR_LF_LONGNAME, I, RawFileName); { Need to copy the Name to the header. } FTarItem.Name := Value; end else I := I + 1; end; { End While } { MD Headers & MD Data Headers have been stuffed if FoundMetaDataHeader } { Still need to stuff the File type header contents. } if not FoundMetaDataHeader then begin case FTarItem.ArchiveFormat of V7_FORMAT: raise EAbTarBadFileName.Create; { File Name to Long } USTAR_FORMAT: begin { Longest file name is AB_TAR_NAMESIZE(100) chars } { Longest Prefix is AB_TAR_USTAR_PREFIX_SIZE(155) chars } { These two fields are delimted by a '/' char } {0123456789012345, Length = 15, NameLength = 5, PrefixLength = 9} { AAAA/BBBB/C.txt, Stored as Name := 'C.txt', Prefix := 'AAAA/BBBB' } { That means Theoretical maximum is 256 for Length(RawFileName) } if Length(RawFileName) > (AB_TAR_NAMESIZE+AB_TAR_USTAR_PREFIX_SIZE+1) then { Check the obvious one. } raise EAbTarBadFileName.Create; { File Name to Long } for I := Length(RawFileName) downto Length(RawFileName)-AB_TAR_NAMESIZE-1 do begin if RawFileName[I] = '/' then begin if (I <= AB_TAR_USTAR_PREFIX_SIZE+1) and (Length(RawFileName)-I <= AB_TAR_NAMESIZE) then begin { We have a successfull parse. } FillChar(PTarHeader.Name, SizeOf(PTarHeader.Name), #0); FillChar(PTarHeader.ustar.Prefix, SizeOf(PTarHeader.ustar.Prefix), #0); Move(RawFileName[I+1], PTarHeader.Name, Length(RawFileName)-I); Move(RawFileName[1], PTarHeader.ustar.Prefix, I); break; end else if (Length(RawFileName)-I > AB_TAR_NAMESIZE) then raise EAbTarBadFileName.Create { File Name not splittable } { else continue; } end; end;{ End for I... } end; { End USTAR Format } OLDGNU_FORMAT: DoGNUNewLongNameLink(AB_TAR_LF_LONGNAME, 0, RawFileName); {GNU_FORMAT} else begin { UNKNOWN_FORMAT, STAR_FORMAT, POSIX_FORMAT } raise EAbTarBadOp.Create; { Unknown Archive Format } end;{ End of Else for case statement } end;{ End of case statement } FTarItem.Name := Value; end; { if no Meta data header found } end { End "name length larger than 100" } else begin { Short new name, Simple Case Just put it in the Name Field & remove any headers } { PTarHeader Points to the File type Header } { Zero the Name field } FillChar(PTarHeader.Name, SizeOf(PTarHeader.Name), #0); if FTarItem.ArchiveFormat in [USTAR_FORMAT] then { Zero the prefix field } FillChar(PTarHeader.ustar.Prefix, SizeOf(PTarHeader.ustar.Prefix), #0); if FTarItem.ArchiveFormat in [GNU_FORMAT, OLDGNU_FORMAT] then begin { We may have AB_TAR_LF_LONGNAME Headers to be removed } { Remove long file names Headers if they exist} FoundMetaDataHeader := False; I := 0; while not FoundMetaDataHeader and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag in [AB_TAR_LF_LONGNAME] then begin { Delete this Header, and the data Headers. } FoundMetaDataHeader := True; TotalOldNumHeaders := Ceil( OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); for J := TotalOldNumHeaders downto 0 do begin { Note 0 will delete the Long Link MD Header } FreeMem(FTarHeaderList.Items[I+J]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Delete(I+J); FTarHeaderTypeList.Delete(I+J); end; end else I := I + 1; { Got to next header } end;{ End While not found... } end; { End if GNU... } { Save off the new name and store to the Header } FTarItem.Name := Value; { Must add Null Termination before we store to Header } StrPLCopy(PTarHeader.Name, RawFileName, AB_TAR_NAMESIZE); end;{ End else Short new name,... } { Update the inherited file names. } FFileName := FTarItem.Name; //DiskFileName := FFileName; //AbUnfixName(FDiskFileName); // Don't override DiskFileName FTarItem.Dirty := True; end; procedure TAbTarItem.SetGroupID(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { gid is extendable in PAX Headers, Rember PAX extended Header Over Rule File Headers } FTarItem.gid := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.gid, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetGroupName(const Value: string); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { GrpName is extendable in PAX Headers, Rember PAX extended Header Over Rule File Headers } FTarItem.GrpName := Value; StrPLCopy(PTarHeader.GrpName, AnsiString(Value), SizeOf(PTarHeader.GrpName)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetIsEncrypted(Value: Boolean); begin { do nothing, TAR has no native encryption } end; procedure TAbTarItem.SetLastModFileDate(const Value: Word); begin { replace date, keep existing time } LastModTimeAsDateTime := EncodeDate( Value shr 9 + 1980, Value shr 5 and 15, Value and 31) + Frac(LastModTimeAsDateTime); end; procedure TAbTarItem.SetLastModFileTime(const Value: Word); begin { keep current date, replace time } LastModTimeAsDateTime := Trunc(LastModTimeAsDateTime) + EncodeTime( Value shr 11, Value shr 5 and 63, Value and 31 shl 1, 0); end; procedure TAbTarItem.SetLastModTimeAsDateTime(const Value: TDateTime); begin // TAR stores always Unix time. SetModTime(AbLocalDateTimeToUnixTime(Value)); // also updates headers end; procedure TAbTarItem.SetLinkFlag(Value: AnsiChar); begin if FTarItem.ItemReadOnly then Exit; FTarItem.LinkFlag := Value; PTarHeader.LinkFlag := Value; FTarItem.Dirty := True; end; procedure TAbTarItem.SetLinkName(const Value: string); var FoundMetaDataHeader: Boolean; PHeader: PAbTarHeaderRec; I, J: Integer; TotalOldNumHeaders: Integer; RawLinkName: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Cases: New Link Name is short, Length <= 100, All formats: Zero Name field and move new name to field. V7: Work complete, 1 header USTAR: Work complete, 1 Header OLD_GNU & GNU: Remove old link headers, 1 header. STAR & PAX: And should not yet get here. New File Name is Long, Length >=101 Note: The Header Parsing sets any V7 to GNU if 'L'/'K' Headers are present V7: Raise an exception, as this can NOT be done, no change to header. USTAR: Raise an exception, as this can NOT be done, no change to header. if old was Short, Add files to match format, OLD_GNU & GNU: Create new Link header, Add N Headers for name, Update name in file header, update name fields, min 3 headers if old was Long, OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers STAR & PAX: And should not yet get here.} RawLinkName := CeUtf8ToSys(Value); if Length(RawLinkName) > AB_TAR_NAMESIZE then { Must be null terminated except at 100 char length } begin { Look for long name meta-data headers already in the archive. } FoundMetaDataHeader := False; I := 0; { FTarHeaderList.Count <= 1 always } while (not FoundMetaDataHeader) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGLINK then begin { We are growing or Shriking the Name MD Data fields. } FoundMetaDataHeader := True; DoGNUExistingLongNameLink(AB_TAR_LF_LONGLINK, I, RawLinkName); { Need to copy the Name to the header. } FTarItem.LinkName := Value; end else I := I + 1; end; { End While } { MD Headers & MD Data Headers have been stuffed if FoundMetaDataHeader } { Still need to stuff the File type header contents. } if not FoundMetaDataHeader then begin case FTarItem.ArchiveFormat of V7_FORMAT: raise EAbTarBadLinkName.Create; { Link Name to Long } USTAR_FORMAT: raise EAbTarBadLinkName.Create; { Link Name to Long } OLDGNU_FORMAT: DoGNUNewLongNameLink(AB_TAR_LF_LONGLINK, 0, RawLinkName); {GNU_FORMAT} else begin { UNKNOWN_FORMAT, STAR_FORMAT, POSIX_FORMAT } raise EAbTarBadOp.Create; { Unknown Archive Format } end;{ End of Else for case statement } end;{ End of case statement } FTarItem.LinkName := Value; end; { if no Meta data header found } end { End "name length larger than 100" } else begin { Short new name, Simple Case Just put it in the Link Field & remove any headers } { PTarHeader Points to the File type Header } { Zero the Link field } FillChar(PTarHeader.LinkName, SizeOf(PTarHeader.LinkName), #0); if FTarItem.ArchiveFormat in [GNU_FORMAT, OLDGNU_FORMAT] then begin { We may have AB_TAR_LF_LONGNAME Headers to be removed } { Remove long file names Headers if they exist} FoundMetaDataHeader := False; I := 0; while not FoundMetaDataHeader and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag in [AB_TAR_LF_LONGLINK] then begin { Delete this Header, and the data Headers. } FoundMetaDataHeader := True; TotalOldNumHeaders := Ceil( OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); for J := TotalOldNumHeaders downto 0 do begin { Note 0 will delete the Long Link MD Header } FreeMem(FTarHeaderList.Items[I+J]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Delete(I+J); FTarHeaderTypeList.Delete(I+J); end; end else I := I + 1; { Got to next header } end;{ End While not found... } end; { End if GNU... } { Save off the new name and store to the Header } FTarItem.LinkName := Value; StrPLCopy(PTarHeader.LinkName, RawLinkName, AB_TAR_NAMESIZE); end;{ End else Short new name,... } FTarItem.Dirty := True; end; procedure TAbTarItem.SetMagic(const Value: String); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; FTarItem.Magic := AnsiString(Value); Move(Value[1], PTarHeader.Magic, SizeOf(TAbTarMagicRec)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUncompressedSize(const Value: Int64); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Size is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.Size := Value; { Store our Vitrual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.Size, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUserID(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { uid is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.uid := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.uid, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUserName(const Value: string); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { UsrName is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.UsrName := Value; StrPLCopy(PTarHeader.UsrName, AnsiString(Value), SizeOf(PTarHeader.UsrName)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetModTime(const Value: Int64); var S: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { ModTime is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.ModTime := Value; { Store our Virtual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.ModTime, Length(S)); FTarItem.Dirty := True; end; { ************************** TAbTarStreamHelper ****************************** } destructor TAbTarStreamHelper.Destroy; begin inherited Destroy; end; { This is slow, use the archive class instead } procedure TAbTarStreamHelper.ExtractItemData(AStream: TStream); begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } if FCurrItemSize <> 0 then begin { copy stored data to output } AStream.CopyFrom(FStream, FCurrItemSize); {reset the stream to the start of the item} FStream.Seek(-(FCurrItemPreHdrs*AB_TAR_RECORDSIZE+FCurrItemSize), soCurrent); end; { else do nothing } end; { This function Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindItem: Boolean; var DataRead : LongInt; FoundItem: Boolean; SkipHdrs : Integer; begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } { Note: Standard LBA size of hard disks is 512 bytes = AB_TAR_RECORDSIZE } FoundItem := False; { Getting an new Item reset these numbers } FCurrItemSize := 0; FCurrItemPreHdrs := 0; DataRead := FStream.Read(FTarHeader, AB_TAR_RECORDSIZE); { Read in a header } { DataRead <> AB_TAR_RECORDSIZE means end of stream, and the End Of Archive record is all #0's, which the StrLen(FTarHeader.Name) check will catch } while (DataRead = AB_TAR_RECORDSIZE) and (StrLen(FTarHeader.Name) > 0) and not FoundItem do begin { Either exit when we find a supported file or end of file or an invalid header name. } if FTarHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { We have a un/supported Meta-Data Header } { FoundItem := False } { Value remains False. } SkipHdrs := Ceil(OctalToInt(FTarHeader.Size, SizeOf(FTarHeader.Size))/AB_TAR_RECORDSIZE); FStream.Seek(SkipHdrs*AB_TAR_RECORDSIZE, soCurrent); { Tally new Headers: Consumed + Current } FCurrItemPreHdrs := FCurrItemPreHdrs + SkipHdrs + 1; { Read our next header, Loop, and re-parse } DataRead := FStream.Read(FTarHeader, AB_TAR_RECORDSIZE); end else if FTarHeader.LinkFlag in (AB_SUPPORTED_F_HEADERS+AB_UNSUPPORTED_F_HEADERS) then begin { We have a un/supported File Header. } FoundItem := True; if not (FTarHeader.LinkFlag in AB_IGNORE_SIZE_HEADERS) then FCurrItemSize := OctalToInt(FTarHeader.Size, SizeOf(FTarHeader.Size)) else FCurrItemSize := 0; { Per The spec these Headers do not have file content } FCurrItemPreHdrs := FCurrItemPreHdrs + 1; { Tally current header } end else begin{ We Have an Unknown header } FoundItem := True; FCurrItemSize := 0; { We could have many un/supported headers before this unknown type } FCurrItemPreHdrs := FCurrItemPreHdrs + 1; { Tally current header } { These Headers should throw exceptions when TAbTarItem.LoadTarHeaderFromStream is called } end; { End of Link Flag parsing } end; { Rewind to the "The Beginning" of this Item } { Really that means to the first supported Header Type before a supported Item Type } if FoundItem then FStream.Seek(-(FCurrItemPreHdrs*AB_TAR_RECORDSIZE), soCurrent); Result := FoundItem; end; constructor TAbTarStreamHelper.Create(AStream: TStream; AEvent: TAbProgressEvent); begin Create(AStream); FOnProgress:= AEvent; end; { Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindFirstItem: Boolean; begin FStream.Seek(0, soBeginning); Result := FindItem; end; { Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindNextItem: Boolean; begin { Fast Forward Past the current Item } FStream.Seek((FCurrItemPreHdrs*AB_TAR_RECORDSIZE + RoundToTarBlock(FCurrItemSize)), soCurrent); Result := FindItem; end; { This is slow, use the archive class instead } function TAbTarStreamHelper.GetItemCount : Integer; var Found : Boolean; begin Result := 0; Found := FindFirstItem; while Found do begin Inc(Result); Found := FindNextItem; end; end; procedure TAbTarStreamHelper.ReadHeader; begin { do nothing } { Tar archives have no overall header data } end; procedure TAbTarStreamHelper.ReadTail; begin { do nothing } { Tar archives have no overall tail data } end; { This is slow, use the archive class instead } function TAbTarStreamHelper.SeekItem(Index: Integer): Boolean; var i : Integer; begin Result := FindFirstItem; { see if can get to first item } i := 1; while Result and (i < Index) do begin Result := FindNextItem; Inc(i); end; end; procedure TAbTarStreamHelper.WriteArchiveHeader; begin { do nothing } { Tar archives have no overall header data } end; procedure TAbTarStreamHelper.WriteArchiveItem(AStream: TStream); begin WriteArchiveItemSize(AStream, AStream.Size); end; procedure TAbTarStreamHelper.WriteArchiveItemSize(AStream: TStream; ASize: Int64); var PadBuff : PAnsiChar; PadSize : Integer; begin if ASize = 0 then Exit; { transfer actual item data } with TAbProgressWriteStream.Create(FStream, ASize, FOnProgress) do try CopyFrom(AStream, ASize); finally Free; end; { Pad to Next block } PadSize := RoundToTarBlock(ASize) - ASize; GetMem(PadBuff, PadSize); FillChar(PadBuff^, PadSize, #0); FStream.Write(PadBuff^, PadSize); FreeMem(PadBuff, PadSize); end; procedure TAbTarStreamHelper.WriteArchiveTail; var PadBuff : PAnsiChar; PadSize : Integer; begin { append 2 terminating null blocks } PadSize := AB_TAR_RECORDSIZE; GetMem(PadBuff, PadSize); try FillChar(PadBuff^, PadSize, #0); FStream.Write(PadBuff^, PadSize); FStream.Write(PadBuff^, PadSize); finally FreeMem(PadBuff, PadSize); end; end; { ***************************** TAbTarArchive ******************************** } constructor TAbTarArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); begin inherited; FArchFormat := OLDGNU_FORMAT; // Default for new archives FSuspiciousLinks := TStringList.Create; end; destructor TAbTarArchive.Destroy; begin inherited Destroy; FSuspiciousLinks.Free; end; function TAbTarArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var Item : TAbTarItem; I: Integer; FullSourceFileName, FullArchiveFileName: String; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Create Item Unsupported in this Archive } MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); Item := TAbTarItem.Create; try // HeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); if FArchFormat in [OLDGNU_FORMAT, GNU_FORMAT] then begin Item.ArchiveFormat := FArchFormat; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_GNUOLD; end else if FArchFormat in [USTAR_FORMAT] then begin Item.ArchiveFormat := USTAR_FORMAT; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end else if (FArchFormat = V7_FORMAT) and (Length(FullArchiveFileName) > 100) then begin { Switch the rep over to GNU so it can have long file names. } FArchFormat := OLDGNU_FORMAT; Item.ArchiveFormat := OLDGNU_FORMAT; { Leave the Defaults for LinkFlag, and Magic } { Update all the rest so that it can transistion to GNU_FORMAT } for I := 0 to FItemList.Count - 1 do TAbTarItem(FItemList.Items[i]).ArchiveFormat := OLDGNU_FORMAT; end;{ This should not execute... }{ else if FArchFormat in [STAR_FORMAT, POSIX_FORMAT] then begin Item.ArchiveFormat := FArchFormat; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end; }{ else FArchFormat in [ UNKNOWN_FORMAT, V7_FORMAT and Length(S) <= 100 ] } { This is the default. } { Most others are initialized in the .Create } Item.CRC32 := 0; { Note this can raise exceptions for file name lengths. } Item.FileName := FullArchiveFileName; Item.DiskFileName := FullSourceFileName; Item.Action := aaNone; finally Result := Item; end; end; procedure TAbTarArchive.ExtractItemAt(Index: Integer; const UseName: string); var AFileName : String; LinkTarget : String; OutStream : TStream; PathType : TPathType; CurItem : TAbTarItem; begin { Check the index is not out of range. } if(Index >= ItemList.Count) then raise EListError.CreateFmt(SListIndexError, [Index]); CurItem := TAbTarItem(ItemList[Index]); if CurItem.ItemType in [UNKNOWN_ITEM] then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { Link to previously archived file } if CurItem.LinkFlag in [AB_TAR_LF_LINK] then begin { Find link target } AFileName := NormalizePathDelimiters(CurItem.FileName); { If link target exists then try to create hard link } if StrEnds(UseName, AFileName) then begin AFileName := StringReplace(UseName, AFileName, CurItem.LinkName, []); if mbFileExists(AFileName) and CreateHardLink(AFileName, UseName) then Exit; end; { Cannot create hard link, extract previously archived file } Index := ItemList.Find(CurItem.LinkName); if (Index >= 0) and (Index < ItemList.Count) then CurItem := TAbTarItem(ItemList[Index]) else raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } end; if CurItem.IsDirectory then AbCreateDirectory(UseName) else begin case (CurItem.Mode and $F000) of AB_FMODE_FILE, AB_FMODE_FILE2: begin VerifyItem(CurItem); OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} except if ExceptObject is EAbUserAbort then FStatus := asInvalid; mbDeleteFile(UseName); raise; end; end; AB_FMODE_FILELINK: begin LinkTarget := NormalizePathDelimiters(CurItem.LinkName); PathType := GetPathType(LinkTarget); if PathType in [ptRelative, ptAbsolute] then begin if PathType = ptAbsolute then AFileName := LinkTarget else begin AFileName := GetAbsoluteFileName(ExtractFilePath(UseName), LinkTarget); end; if not IsInPath(BaseDirectory, AFileName, True, True) then FSuspiciousLinks.Add(NormalizePathDelimiters(CurItem.FileName)); end; if not CreateSymLink(LinkTarget, UseName) then raise EOSError.Create(mbSysErrorMessage(GetLastOSError)); end; end; end; if (CurItem.Mode and $F000) <> AB_FMODE_FILELINK then begin AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); AbSetFileAttr(UseName, CurItem.NativeFileAttributes); end; end; procedure TAbTarArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); var CurItem : TAbTarItem; begin if(Index >= ItemList.Count) then raise EListError.CreateFmt(SListIndexError, [Index]); CurItem := TAbTarItem(ItemList[Index]); if CurItem.ItemType in [UNKNOWN_ITEM] then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } FStream.Position := CurItem.StreamPosition+CurItem.FileHeaderCount*AB_TAR_RECORDSIZE; if CurItem.UncompressedSize <> 0 then aStream.CopyFrom(FStream, CurItem.UncompressedSize); { Else there is nothing to copy. } end; procedure TAbTarArchive.LoadArchive; var TarHelp : TAbTarStreamHelper; Item : TAbTarItem; ItemFound : Boolean; Abort : Boolean; Confirm : Boolean; Duplicate : Boolean; i : Integer; Progress : Byte; begin { create helper } TarHelp := TAbTarStreamHelper.Create(FStream); try {TarHelp} {build Items list from tar header records} { reset Tar } Duplicate := False; ItemFound := (FStream.Size > 0) and TarHelp.FindFirstItem; if ItemFound then FArchFormat := UNKNOWN_FORMAT else FArchFormat := V7_FORMAT; { while more data in Tar } while (FStream.Position < FStream.Size) and ItemFound do begin {create new Item} Item := TAbTarItem.Create; Item.FTarItem.StreamPosition := FStream.Position; try {Item} Item.LoadTarHeaderFromStream(FStream); if Item.ItemReadOnly then FArchReadOnly := True; { Set Archive as Read Only } if Item.ItemType in [SUPPORTED_ITEM, UNSUPPORTED_ITEM] then begin { List of supported Item/File Types. } { Add the New Supported Item to the List } if FArchFormat < Item.ArchiveFormat then FArchFormat := Item.ArchiveFormat; { Take the max format } Item.Action := aaNone; { TAR archive can contain the same directory multiple times. In this case, use the last found directory. } if Item.IsDirectory then begin I := FItemList.Find(Item.FileName); if (I >= 0) then begin Duplicate := True; FItemList.Items[I] := Item; end; end; if Duplicate then Duplicate := False else begin FItemList.Add(Item); end; end { end if } else begin { unhandled Tar file system entity, notify user, but otherwise ignore } if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(self, Item, ptFoundUnhandled, Confirm); end; { show progress and allow for aborting } Progress := (FStream.Position*100) div FStream.Size; DoArchiveProgress(Progress, Abort); if Abort then begin FStatus := asInvalid; raise EAbUserAbort.Create; end; { get the next item } ItemFound := TarHelp.FindNextItem; except {Item} raise EAbTarBadOp.Create; { Invalid Item } end; {Item} end; {end while } { All the items need to reflect this information. } for i := 0 to FItemList.Count - 1 do begin TAbTarItem(FItemList.Items[i]).ArchiveFormat := FArchFormat; TAbTarItem(FItemList.Items[i]).ItemReadOnly := FArchReadOnly; end; DoArchiveProgress(100, Abort); FIsDirty := False; finally {TarHelp} { Clean Up } TarHelp.Free; end; {TarHelp} end; function TAbTarArchive.FixName(const Value: string): string; { fixup filename for storage } var lValue : string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := BaseDirectory + AbPathDelim + lValue; end; lValue := AbGetShortFileSpec( lValue ); end; {$ENDIF MSWINDOWS} { Should always trip drive info if on a Win/Dos system } StoreOptions := StoreOptions + [soStripDrive]; { strip drive stuff } if soStripDrive in StoreOptions then AbStripDrive( lValue ); { check for a leading slash } if (Length(lValue) > 0) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then lValue := ExtractFileName(lValue); if soRemoveDots in StoreOptions then AbStripDots(lValue); AbFixName(lValue); Result := lValue; end; function TAbTarArchive.GetItem(Index: Integer): TAbTarItem; begin Result := TAbTarItem(FItemList.Items[Index]); end; function TAbTarArchive.GetSupportsEmptyFolders: Boolean; begin Result := True; end; procedure TAbTarArchive.PutItem(Index: Integer; const Value: TAbTarItem); begin //TODO: Remove this from all archives FItemList.Items[Index] := Value; end; procedure TAbTarArchive.SaveArchive; var OutTarHelp : TAbTarStreamHelper; Abort : Boolean; i : Integer; NewStream : TStream; TempStream : TStream; CurItem : TAbTarItem; AttrEx : TAbAttrExRec; ATempName : String; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Archive is read only } {init new archive stream} if Assigned(FTargetStream) then NewStream := FTargetStream else if FOwnsStream and (FStream is TFileStreamEx) then begin if FStream.Size = 0 then NewStream := FStream else begin ATempName := GetTempName(FArchiveName); NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite); end; end else begin NewStream := TAbVirtualMemoryStream.Create; TAbVirtualMemoryStream(NewStream).SwapFileDirectory := ExtractFileDir(FArchiveName); end; OutTarHelp := TAbTarStreamHelper.Create(NewStream, OnProgress); try {NewStream/OutTarHelp} {build new archive from existing archive} for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbTarItem(ItemList[i]); case CurItem.Action of aaNone, aaMove : begin {just copy the file to new stream} { "Seek" to the Item Data } { SaveTarHeaders, Updates FileHeaderCount } FStream.Position := CurItem.StreamPosition+CurItem.FileHeaderCount*AB_TAR_RECORDSIZE; CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } { Flush The Headers to the new stream } CurItem.SaveTarHeaderToStream(NewStream); { Copy to new Stream, Round to the AB_TAR_RECORDSIZE boundry, and Pad zeros} outTarhelp.WriteArchiveItemSize(FStream, CurItem.UncompressedSize); end; aaDelete: {doing nothing omits file from new stream} ; aaStreamAdd : begin try { adding from a stream } CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } CurItem.UncompressedSize := InStream.Size; CurItem.SaveTarHeaderToStream(NewStream); OutTarHelp.WriteArchiveItemSize(InStream, InStream.Size); except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; aaAdd, aaFreshen, aaReplace: begin try { update metadata } if not AbFileGetAttrEx(CurItem.DiskFileName, AttrEx, False) then Raise EAbFileNotFound.Create; CurItem.ExternalFileAttributes := AttrEx.Mode; CurItem.LastModTimeAsDateTime := AttrEx.Time; { TODO: uid, gid, uname, gname should be added here } { TODO: Add support for different types of files here } case (AttrEx.Mode and $F000) of AB_FMODE_DIR: begin CurItem.UncompressedSize := 0; CurItem.SaveTarHeaderToStream(NewStream); end; AB_FMODE_FILELINK: begin CurItem.UncompressedSize := 0; CurItem.LinkName := ReadSymlink(CurItem.DiskFileName); CurItem.SaveTarHeaderToStream(NewStream); end; AB_FMODE_FILE, AB_FMODE_FILE2: begin TempStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try { TempStream } CurItem.UncompressedSize := TempStream.Size; CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } CurItem.SaveTarHeaderToStream(NewStream); OutTarHelp.WriteArchiveItemSize(TempStream, TempStream.Size); finally { TempStream } TempStream.Free; end; { TempStream } end; else begin CurItem.UncompressedSize := AttrEx.Size; CurItem.SaveTarHeaderToStream(NewStream); end; end; except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; { aaAdd ... } end; { case } end; { for i ... } if NewStream.Position > 0 then OutTarHelp.WriteArchiveTail; { Terminate the TAR } { Size of NewStream is still 0, and max of the stream will also be 0 } if (FTargetStream = nil) then begin {copy new stream to FStream} NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else if (FStream is TAbVirtualMemoryStream) then begin FStream.Position := 0; FStream.Size := 0; TAbVirtualMemoryStream(FStream).CopyFrom(NewStream, NewStream.Size) end else begin if FOwnsStream then begin {need new stream to write} if NewStream = FStream then NewStream := nil else begin FreeAndNil(FStream); FreeAndNil(NewStream); if (mbDeleteFile(FArchiveName) and mbRenameFile(ATempName, FArchiveName)) then FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite) else RaiseLastOSError; end; end else begin FStream.Size := 0; FStream.Position := 0; FStream.CopyFrom(NewStream, 0) end; end; end; {update Items list} for i := pred( Count ) downto 0 do begin if ItemList[i].Action = aaDelete then FItemList.Delete( i ) else if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; end; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream/OutTarHelp} OutTarHelp.Free; if (FStream <> NewStream) and (FTargetStream <> NewStream) then NewStream.Free; end; end; { This assumes that LoadArchive has been called. } procedure TAbTarArchive.TestItemAt(Index: Integer); begin FStream.Position := TAbTarItem(FItemList[Index]).StreamPosition; if VerifyTar(FStream) <> atTar then raise EAbTarInvalid.Create; { Invalid Tar } end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abswstm.pas0000644000175000001440000003346115104114162022603 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSWStm.pas *} {*********************************************************} {* ABBREVIA: TabSlidingWindowStream class *} {*********************************************************} unit AbSWStm; {$I AbDefine.inc} {Notes: The TabSlidingWindowStream class provides a simple buffered stream for sliding window compression/decompression routines. The sliding window stream is limited when compared with a true buffered stream: - it is assumed that the underlying stream is just going to be written to and is initially empty - the buffer is fixed in size to 40KB - write operations can only occur at the end of the stream - the stream can only be positioned with a certain limited range - we can only read up to 32KB - we can only write up to 32KB The stream is written as a wrapper around another stream (presumably a file stream) which is used for actual reads to the buffer and writes from the buffer. The stream buffer is organized as five 8KB chunks in an array. The last chunk is the only one used for writing, the other four are a 32KB buffer for reading. As the final chunk gets filled, the class will drop off the first chunk (writing it to the underlying stream, and shift the other chunks in the array.} {Define this if you wish to see a trace of the stream usage in a file called C:\SlideWin.LOG} {.$DEFINE DebugTrace} interface uses SysUtils, Classes; const abSWChunkCount = 5; type TabSlidingWindowStream = class(TStream) protected {private} bsChunks : array [0..pred(abSWChunkCount)] of PByteArray; bsBufferStart : longint; bsLastPos : integer; bsCurChunk : integer; bsPosInChunk : integer; bsPosInBuffer : longint; bsSize : Longint; {count of bytes in stream} bsDirty : boolean; {whether the buffer is dirty or not} bsStream : TStream; {actual stream containing data} {$IFDEF DebugTrace} bsF : System.Text; {$ENDIF} protected procedure bsWriteChunk(aIndex : integer); procedure bsSlide; public constructor Create(aStream : TStream); {-create the buffered stream} destructor Destroy; override; {-destroy the buffered stream} procedure Flush; {-ensures that all dirty buffered data is flushed} function Read(var Buffer; Count : Longint) : Longint; override; {-read from the stream into a buffer} function Seek(Offset : Longint; Origin : Word) : Longint; override; {-seek to a particular point in the stream} function Write(const Buffer; Count : Longint) : Longint; override; {-write to the stream from a buffer} end; implementation const ChunkSize = 8192; {cannot be greater than MaxInt} {===Helper routines==================================================} procedure RaiseException(const S : string); begin raise Exception.Create(S); end; {====================================================================} {===TabSlidingWindowStream===========================================} constructor TabSlidingWindowStream.Create(aStream : TStream); var i : integer; begin inherited Create; {save the actual stream} bsStream := aStream; {allocate the chunks-they must be set to binary zeros} for i := 0 to pred(abSWChunkCount) do bsChunks[i] := AllocMem(ChunkSize); {set the page/buffer variables to the start of the stream; remember we only write to the last chunk--the previous chunks are set to binary zeros} aStream.Position := 0; bsSize := 0; bsBufferStart := -ChunkSize * pred(abSWChunkCount); bsPosInBuffer := ChunkSize * pred(abSWChunkCount); bsCurChunk := pred(abSWChunkCount); bsPosInChunk := 0; bsDirty := false; {$IFDEF DebugTrace} System.Assign(bsF, 'c:\SlideWin.LOG'); if FileExists('c:\SlideWin.LOG') then System.Append(bsF) else System.Rewrite(bsF); writeln(bsF, '---NEW LOG---'); {$ENDIF} end; {--------} destructor TabSlidingWindowStream.Destroy; var i : integer; begin {destroy the buffer, after writing it to the actual stream} if bsDirty then Flush; for i := 0 to pred(abSWChunkCount) do if (bsChunks[i] <> nil) then FreeMem(bsChunks[i], ChunkSize); {$IFDEF DebugTrace} System.Close(bsF); {$ENDIF} {let our ancestor clean up} inherited Destroy; end; {--------} procedure TabSlidingWindowStream.bsSlide; var SavePtr : PByteArray; i : integer; begin {write out the first chunk} bsWriteChunk(0); {slide the chunks around} SavePtr := bsChunks[0]; for i := 0 to abSWChunkCount-2 do bsChunks[i] := bsChunks[i+1]; bsChunks[pred(abSWChunkCount)] := SavePtr; {advance the buffer start position} inc(bsBufferStart, ChunkSize); {reset the write position} bsPosInChunk := 0; bsPosInBuffer := ChunkSize * pred(abSWChunkCount); bsLastPos := 0; end; {--------} procedure TabSlidingWindowStream.bsWriteChunk(aIndex : integer); var SeekResult : longint; BytesWrit : longint; Offset : longint; BytesToWrite : integer; begin Offset := bsBufferStart + (longint(aIndex) * ChunkSize); if (Offset >= 0) then begin SeekResult := bsStream.Seek(Offset, 0); if (SeekResult = -1) then RaiseException('TabSlidingWindowStream.bsWriteChunk: seek failed'); if (aIndex <> pred(abSWChunkCount)) then BytesToWrite := ChunkSize else BytesToWrite := bsLastPos; BytesWrit := bsStream.Write(bsChunks[aIndex]^, BytesToWrite); if (BytesWrit <> BytesToWrite) then RaiseException('TabSlidingWindowStream.bsWriteChunk: write failed'); end; end; {--------} procedure TabSlidingWindowStream.Flush; var i : integer; begin if bsDirty then begin for i := 0 to pred(abSWChunkCount) do bsWriteChunk(i); bsDirty := false; end; end; {--------} function TabSlidingWindowStream.Read(var Buffer; Count : Longint) : Longint; var BufPtr : PByte; BytesToGo : Longint; BytesToRead : integer; begin BufPtr := @Buffer; {$IFDEF DebugTrace} System.Writeln(bsF, 'Read: ', Count, ' bytes'); {$ENDIF} {we do not support reads greater than 32KB bytes} if (Count > 32*1024) then Count := 32*1024; {reading is complicated by the fact we can only read in chunks of ChunkSize: we need to partition out the overall read into a read from part of the chunk, zero or more reads from complete chunks and then a possible read from part of a chunk} {calculate the actual number of bytes we can read - this depends on the current position and size of the stream as well as the number of bytes requested} BytesToGo := Count; if (bsSize < (bsBufferStart + bsPosInBuffer + Count)) then BytesToGo := bsSize - (bsBufferStart + bsPosInBuffer); if (BytesToGo <= 0) then begin Result := 0; Exit; end; {remember to return the result of our calculation} Result := BytesToGo; {calculate the number of bytes we can read prior to the loop} BytesToRead := ChunkSize - bsPosInChunk; if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; {copy from the stream buffer to the caller's buffer} if (BytesToRead = 1) then BufPtr^ := bsChunks[bsCurChunk]^[bsPosInChunk] else Move(bsChunks[bsCurChunk]^[bsPosInChunk], BufPtr^, BytesToRead); {calculate the number of bytes still to read} dec(BytesToGo, BytesToRead); {while we have bytes to read, read them} while (BytesToGo > 0) do begin {advance the pointer for the caller's buffer} inc(BufPtr, BytesToRead); {as we've exhausted this chunk, advance to the next} inc(bsCurChunk); bsPosInChunk := 0; {calculate the number of bytes we can read in this cycle} BytesToRead := ChunkSize; if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; {copy from the stream buffer to the caller's buffer} Move(bsChunks[bsCurChunk]^, BufPtr^, BytesToRead); {calculate the number of bytes still to read} dec(BytesToGo, BytesToRead); end; {remember our new position} inc(bsPosInChunk, BytesToRead); end; {--------} function TabSlidingWindowStream.Seek(Offset : Longint; Origin : Word) : Longint; {$IFDEF DebugTrace} const OriginStr : array [0..2] of string[7] = ('start', 'current', 'end'); {$ENDIF} var NewPos : Longint; begin {$IFDEF DebugTrace} System.Writeln(bsF, 'Seek: ', Offset, ' bytes from ', OriginStr[Origin]); {$ENDIF} {calculate the new position} case Origin of soFromBeginning : NewPos := Offset; soFromCurrent : NewPos := bsBufferStart + bsPosInBuffer + Offset; soFromEnd : NewPos := bsSize + Offset; else NewPos := 0; RaiseException('TabSlidingWindowStream.Seek: invalid origin'); end; {if the new position is invalid, say so} if (NewPos < bsBufferStart) or (NewPos > bsSize) then RaiseException('TabSlidingWindowStream.Seek: invalid new position'); {calculate the chunk number and the position in buffer & chunk} bsPosInBuffer := NewPos - bsBufferStart; bsCurChunk := bsPosInBuffer div ChunkSize; bsPosInChunk := bsPosInBuffer mod ChunkSize; {return the new position} Result := NewPos; end; {--------} function TabSlidingWindowStream.Write(const Buffer; Count : Longint) : Longint; var BufPtr : PByte; BytesToGo : Longint; BytesToWrite: integer; begin BufPtr := @Buffer; {$IFDEF DebugTrace} System.Writeln(bsF, 'Write: ', Count, ' bytes'); {$ENDIF} {we ONLY write at the end of the stream} if ((bsBufferStart + bsPosInBuffer) <> bsSize) then RaiseException('TabSlidingWindowStream.Write: Not at end of stream'); {we do not support writes greater than 32KB bytes} if (Count > 32*1024) then Count := 32*1024; {writing is complicated by the fact we write in chunks of Chunksize bytes: we need to partition out the overall write into a write to part of the chunk, zero or more writes to complete chunks and then a possible write to part of a chunk; every time we fill a chunk we have toi slide the buffer} {when we write to this stream we always assume that we can write the requested number of bytes: if we can't (eg, the disk is full) we'll get an exception somewhere eventually} BytesToGo := Count; {remember to return the result of our calculation} Result := BytesToGo; {calculate the number of bytes we can write prior to the loop} BytesToWrite := ChunkSize - bsPosInChunk; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy from the caller's buffer to the stream buffer} if (BytesToWrite = 1) then bsChunks[pred(abSWChunkCount)]^[bsPosInChunk] := BufPtr^ else Move(BufPtr^, bsChunks[pred(abSWChunkCount)]^[bsPosInChunk], BytesToWrite); {mark our buffer as requiring a save to the actual stream} bsDirty := true; {calculate the number of bytes still to write} dec(BytesToGo, BytesToWrite); {while we have bytes to write, write them} while (BytesToGo > 0) do begin {slide the buffer} bsSlide; {advance the pointer for the caller's buffer} inc(BufPtr, BytesToWrite); {calculate the number of bytes we can write in this cycle} BytesToWrite := ChunkSize; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy from the caller's buffer to our buffer} Move(BufPtr^, bsChunks[pred(abSWChunkCount)]^, BytesToWrite); {calculate the number of bytes still to write} dec(BytesToGo, BytesToWrite); end; {remember our new position} inc(bsPosInChunk, BytesToWrite); bsPosInBuffer := (longint(ChunkSize) * pred(abSWChunkCount)) + bsPosInChunk; bsLastPos := bsPosInChunk; {make sure the stream size is correct} inc(bsSize, Result); {if we're at the end of the chunk, slide the buffer ready for next time we write} if (bsPosInChunk = ChunkSize) then bsSlide; end; {====================================================================} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abspanst.pas0000644000175000001440000003072315104114162022734 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSpanSt.pas *} {*********************************************************} {* ABBREVIA: TAbSpan*Stream Classes *} {*********************************************************} {* Streams to handle splitting ZIP files or spanning *} {* them to diskettes *} {*********************************************************} unit AbSpanSt; {$I AbDefine.inc} interface uses Classes, AbArcTyp; type { TAbSpanBaseStream interface ============================================== } TAbSpanBaseStream = class(TStream) protected {private} FArchiveName: string; FOnRequestImage: TAbRequestImageEvent; protected {methods} function GetImageName( ImageNumber: Integer ): string; public {methods} constructor Create( const ArchiveName: string ); public {events} property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write FOnRequestImage; end; { TAbSpanReadStream interface ============================================== } TAbSpanReadStream = class(TAbSpanBaseStream) protected {private} FCurrentImage: LongWord; FIsSplit: Boolean; FLastImage: LongWord; FStream: TStream; FOnRequestNthDisk : TAbRequestNthDiskEvent; protected {methods} procedure GotoImage( ImageNumber: Integer ); procedure SetOnRequestImage(Value: TAbRequestImageEvent); public {methods} constructor Create( const ArchiveName: string; CurrentImage: LongWord; Stream: TStream ); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; procedure SeekImage( Image: LongWord; const Offset: Int64); public {events} property OnRequestImage write SetOnRequestImage; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write FOnRequestNthDisk; end; { TAbSpanWriteStream interface ============================================= } TAbSpanWriteStream = class(TAbSpanBaseStream) protected {private} FCurrentImage: LongWord; FImageSize: Int64; FStream: TStream; FThreshold: Int64; FOnRequestBlankDisk : TAbRequestDiskEvent; protected {methods} procedure NewImage; public {methods} constructor Create( const ArchiveName: string; Stream: TStream; Threshold: Int64 ); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function WriteUnspanned(const Buffer; Count: Longint; FailOnSpan: Boolean = False): Boolean; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function ReleaseStream: TStream; public {properties} property CurrentImage : LongWord read FCurrentImage; public {events} property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write FOnRequestBlankDisk; end; implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} Math, RTLConsts, SysUtils, AbUtils, AbExcept, DCOSUtils, DCClassesUtf8; {============================================================================} { TAbSpanBaseStream implementation ========================================= } constructor TAbSpanBaseStream.Create( const ArchiveName: string ); begin inherited Create; FArchiveName := ArchiveName; end; {------------------------------------------------------------------------------} function TAbSpanBaseStream.GetImageName( ImageNumber: Integer ): string; var Abort : Boolean; Ext : string; begin {generate default name} Ext := ExtractFileExt(FArchiveName); if (Length(Ext) < 2) then Ext := '.' + Format('%.2d', [ImageNumber]) else Ext := Ext[1] + Ext[2] + Format('%.2d', [ImageNumber]); Result := ChangeFileExt(FArchiveName, Ext); {call event} if Assigned(FOnRequestImage) then begin Abort := False; FOnRequestImage(Self, ImageNumber, Result, Abort); if Abort then raise EAbUserAbort.Create; end; end; {============================================================================} { TAbSpanReadStream implementation ========================================= } constructor TAbSpanReadStream.Create( const ArchiveName: string; CurrentImage: LongWord; Stream: TStream ); begin inherited Create(ArchiveName); FCurrentImage := CurrentImage; FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); FLastImage := CurrentImage; FStream := Stream; end; {------------------------------------------------------------------------------} destructor TAbSpanReadStream.Destroy; begin FreeAndNil(FStream); inherited; end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.GotoImage( ImageNumber: Integer ); var Abort: Boolean; ImageName: string; begin { switch to the requested image. ImageNumber is passed in as 0-based to match the zip spec, but all of the callbacks receive 1-based values. } FreeAndNil(FStream); FCurrentImage := ImageNumber; Inc(ImageNumber); ImageName := FArchiveName; if FIsSplit then begin { the last image uses the original filename } if FCurrentImage <> FLastImage then ImageName := GetImageName(ImageNumber) end else if Assigned(FOnRequestNthDisk) then begin Abort := False; repeat FOnRequestNthDisk(Self, ImageNumber, Abort); if Abort then raise EAbUserAbort.Create; until AbGetDriveFreeSpace(ImageName) <> -1; end else raise EAbUserAbort.Create; FStream := TFileStreamEx.Create(ImageName, fmOpenRead or fmShareDenyWrite); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Read(var Buffer; Count: Longint): Longint; var BytesRead, BytesLeft: LongInt; PBuf: PByte; begin { read until the buffer's full, switching images if necessary } Result := 0; if FStream = nil then Exit; PBuf := @Buffer; BytesLeft := Count; while Result < Count do begin BytesRead := FStream.Read(PBuf^, BytesLeft); Inc(Result, BytesRead); Inc(PBuf, BytesRead); Dec(BytesLeft, BytesRead); if BytesRead < BytesLeft then begin if FCurrentImage <> FLastImage then GotoImage(FCurrentImage + 1) else Break; end; end; end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Write(const Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbSpanReadStream.Write unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if FStream = nil then Result := 0 else if (Offset = 0) and (Origin = soCurrent) then Result := FStream.Position else raise EAbException.Create('TAbSpanReadStream.Seek unsupported'); end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.SeekImage( Image: LongWord; const Offset: Int64); begin if FStream = nil then Exit; if FCurrentImage <> Image then GotoImage(Image); FStream.Position := Offset; end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.SetOnRequestImage(Value: TAbRequestImageEvent); begin FOnRequestImage := Value; FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); end; {============================================================================} { TAbSpanWriteStream implementation ======================================== } constructor TAbSpanWriteStream.Create( const ArchiveName: string; Stream: TStream; Threshold: Int64 ); begin inherited Create(ArchiveName); FCurrentImage := 0; FStream := Stream; FThreshold := Threshold; end; {------------------------------------------------------------------------------} destructor TAbSpanWriteStream.Destroy; begin FStream.Free; inherited; end; {------------------------------------------------------------------------------} procedure TAbSpanWriteStream.NewImage; var Abort: Boolean; begin { start a new span or blank disk. FCurrentImage is 0-based to match the zip spec, but all of the callbacks receive 1-based values. } FreeAndNil(FStream); Inc(FCurrentImage); if FThreshold > 0 then mbRenameFile(FArchiveName, GetImageName(FCurrentImage)) else begin if Assigned(FOnRequestBlankDisk) then begin Abort := False; repeat FOnRequestBlankDisk(Self, Abort); if Abort then raise EAbUserAbort.Create; until AbGetDriveFreeSpace(FArchiveName) <> -1; end else raise EAbUserAbort.Create; AbSetSpanVolumeLabel(AbDrive(FArchiveName), FCurrentImage); end; FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FImageSize := 0; end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Read(var Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbSpanWriteStream.Read unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Write(const Buffer; Count: Longint): Longint; var BytesWritten, BytesLeft: LongInt; PBuf: PByte; begin { write until the buffer is done, starting new spans if necessary } Result := 0; if FStream = nil then Exit; PBuf := @Buffer; BytesLeft := Count; while Result < Count do begin if FThreshold > 0 then BytesWritten := FStream.Write(PBuf^, Min(BytesLeft, FThreshold - FImageSize)) else BytesWritten := FStream.Write(PBuf^, BytesLeft); Inc(FImageSize, BytesWritten); Inc(Result, BytesWritten); Inc(PBuf, BytesWritten); Dec(BytesLeft, BytesWritten); if BytesWritten < BytesLeft then NewImage; end; end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.WriteUnspanned(const Buffer; Count: Longint; FailOnSpan: Boolean = False): Boolean; var BytesWritten: LongInt; begin { write as a contiguous block, starting a new span if there isn't room. FailOnSpan (and result = false) can be used to update data before it's written again } if FStream = nil then raise EWriteError.Create(SWriteError); if (FThreshold > 0) and (FThreshold - FImageSize < Count) then BytesWritten := 0 else BytesWritten := FStream.Write(Buffer, Count); if BytesWritten < Count then begin if BytesWritten > 0 then FStream.Size := FStream.Size - BytesWritten; NewImage; if FailOnSpan then BytesWritten := 0 else begin BytesWritten := Count; FStream.WriteBuffer(Buffer, Count); end; end; Inc(FImageSize, BytesWritten); Result := (BytesWritten = Count); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if FStream = nil then Result := 0 else if (Offset = 0) and (Origin = soCurrent) then Result := FStream.Position else raise EAbException.Create('TAbSpanWriteStream.Seek unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.ReleaseStream: TStream; begin Result := FStream; FStream := nil; end; {------------------------------------------------------------------------------} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abselfex.pas0000644000175000001440000000752115104114162022712 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSelfEx.pas *} {*********************************************************} {* ABBREVIA: Component for building self-extracting zips *} {*********************************************************} unit AbSelfEx; {$I AbDefine.inc} interface uses Classes, AbBase; type TAbGetFileEvent = procedure(Sender : TObject; var aFilename : string; var Abort : Boolean) of object; type TAbMakeSelfExe = class(TAbBaseComponent) protected {private} FStubExe : string; FZipFile : string; FSelfExe : string; FStubStream : TStream; FZipStream : TStream; FSelfStream : TStream; FOnGetStubExe : TAbGetFileEvent; FOnGetZipFile : TAbGetFileEvent; procedure DoGetStubExe(var Abort : Boolean); procedure DoGetZipFile(var Abort : Boolean); public function Execute : Boolean; published property SelfExe : string read FSelfExe write FSelfExe; property StubExe : string read FStubExe write FStubExe; property ZipFile : string read FZipFile write FZipFile; property OnGetStubExe : TAbGetFileEvent read FOnGetStubExe write FOnGetStubExe; property OnGetZipFile : TAbGetFileEvent read FOnGetZipFile write FOnGetZipFile; property Version; end; implementation uses SysUtils, {$IFDEF LibcAPI} Libc, {$ENDIF} AbExcept, AbZipTyp, DCOSUtils, DCClassesUtf8; { -------------------------------------------------------------------------- } function TAbMakeSelfExe.Execute : Boolean; var Abort : Boolean; begin Abort := False; if (FStubExe = '') then DoGetStubExe(Abort); if Abort then raise EAbUserAbort.Create; if not mbFileExists(FStubExe) then raise EAbFileNotFound.Create; if (FZipFile = '') then DoGetZipFile(Abort); if Abort then raise EAbUserAbort.Create; if not mbFileExists(FZipFile) then raise EAbFileNotFound.Create; FStubStream := TFileStreamEx.Create(FStubExe, fmOpenRead or fmShareDenyWrite); FZipStream := TFileStreamEx.Create(FZipFile, fmOpenRead or fmShareDenyWrite); if (FSelfExe = '') then FSelfExe := ChangeFileExt(FZipFile, '.exe'); FSelfStream := TFileStreamEx.Create(FSelfExe, fmCreate or fmShareExclusive); try MakeSelfExtracting(FStubStream, FZipStream, FSelfStream); Result := True; finally FStubStream.Free; FZipStream.Free; FSelfStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbMakeSelfExe.DoGetStubExe(var Abort: Boolean); begin if Assigned(FOnGetStubExe) then FOnGetStubExe(Self, FStubExe, Abort); end; { -------------------------------------------------------------------------- } procedure TAbMakeSelfExe.DoGetZipFile(var Abort : Boolean); begin if Assigned(FOnGetZipFile) then FOnGetZipFile(Self, FZipFile, Abort); end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abresstring.pas0000644000175000001440000002341615104114162023445 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Roman Kassebaum * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* Abbrevia: AbResString.pas *} {*********************************************************} {* Abbrevia: Resource strings *} {*********************************************************} unit AbResString; {$I AbDefine.inc} interface resourcestring AbErrZipInvalidS = 'Invalid file - not a PKZip file'; AbZipVersionNeededS = 'Cannot extract file - newer version required'; AbUnknownCompressionMethodS = 'Cannot extract file - unsupported compression method'; AbNoExtractionMethodS = 'Cannot extract file - no extraction support provided'; AbInvalidPasswordS = 'Cannot extract file - invalid password'; AbNoInsertionMethodS = 'Cannot insert file - no insertion support provided'; AbInvalidFactorS = 'Invalid Reduce Factor'; AbDuplicateNameS = 'Cannot insert file - duplicates stored name'; AbUnsupportedCompressionMethodS = 'Cannot insert file - unsupported compression method'; AbUserAbortS = 'Process aborted by user'; AbArchiveBusyS = 'Archive is busy - cannot process new requests'; AbLastDiskRequestS = 'Insert the last disk in the spanned disk set'; AbDiskRequestS = 'Insert floppy'; AbImageRequestS = 'Image file name'; AbBadSpanStreamS = 'Spanned archives must be opened as file streams'; AbDiskNumRequestS = 'Insert disk number %d of the spanned disk set'; AbImageNumRequestS = 'Insert span number %d of the spanned file set'; AbNoOverwriteSpanStreamS = 'Cannot update an existing spanned disk set'; AbNoSpannedSelfExtractS = 'Cannot make a self-extracting spanned disk set'; AbBlankDiskS = 'Insert a blank floppy disk'; AbStreamFullS = 'Stream write error'; AbNoSuchDirectoryS = 'Directory does not exist'; AbInflateBlockErrorS = 'Cannot inflate block'; AbBadStreamTypeS = 'Invalid Stream'; AbTruncateErrorS = 'Error truncating Zip File'; AbZipBadCRCS = 'Failed CRC Check'; AbZipBadStubS = 'Stub must be an executable'; AbFileNotFoundS = 'File not found'; AbInvalidLFHS = 'Invalid Local File Header entry'; AbNoArchiveS = 'Archive does not exist - Filename is blank'; AbReadErrorS = 'Error reading archive'; AbInvalidIndexS = 'Invalid archive item index'; AbInvalidThresholdS = 'Invalid archive size threshold'; AbUnhandledFileTypeS = 'Unhandled Archive Type'; AbSpanningNotSupportedS = 'Spanning not supported by this Archive type'; AbLogCreateErrorS = 'Error creating Log File'; AbMoveFileErrorS = 'Error Moving File %s to %s'; AbFileSizeTooBigS = 'File size is too big for archive type'; AbSuspiciousSymlinkOperation = 'Suspicious operation with symbolic link!'; AbNoCabinetDllErrorS = 'Cannot load cabinet.dll'; AbFCIFileOpenErrorS = 'FCI cannot open file'; AbFCIFileReadErrorS = 'FCI cannot read file'; AbFCIFileWriteErrorS = 'FCI cannot write file'; AbFCIFileCloseErrorS = 'FCI close file error'; AbFCIFileSeekErrorS = 'FCI file seek error'; AbFCIFileDeleteErrorS = 'FCI file delete error'; AbFCIAddFileErrorS = 'FCI cannot add file'; AbFCICreateErrorS = 'FCI cannot create context'; AbFCIFlushCabinetErrorS = 'FCI cannot flush cabinet'; AbFCIFlushFolderErrorS = 'FCI cannot flush folder'; AbFDICopyErrorS = 'FDI cannot enumerate files'; AbFDICreateErrorS = 'FDI cannot create context'; AbInvalidCabTemplateS = 'Invalid cab file template'; AbInvalidCabFileS = 'Invalid file - not a cabinet file'; AbZipStored = 'Stored'; AbZipShrunk = 'Shrunk'; AbZipReduced = 'Reduced'; AbZipImploded = 'Imploded'; AbZipTokenized = 'Tokenized'; AbZipDeflated = 'Deflated'; AbZipDeflate64 = 'Enhanced Deflation'; AbZipDCLImploded = 'DCL Imploded'; AbZipBzip2 = 'Bzip2'; AbZipLZMA = 'LZMA'; AbZipIBMTerse = 'IBM Terse'; AbZipLZ77 = 'IBM LZ77'; AbZipJPEG = 'JPEG'; AbZipWavPack = 'WavPack'; AbZipPPMd = 'PPMd'; AbZipUnknown = 'Unknown (%d)'; AbZipBestMethod = 'Best Method'; AbVersionFormatS = 'Version %s'; AbCompressedSizeFormatS = 'Compressed Size: %d'; AbUncompressedSizeFormatS = 'Uncompressed Size: %d'; AbCompressionMethodFormatS = 'Compression Method: %s'; AbCompressionRatioFormatS = 'Compression Ratio: %2.0f%%'; AbCRCFormatS = 'CRC: %x'; AbReadOnlyS = 'r'; AbHiddenS = 'h'; AbSystemS = 's'; AbArchivedS = 'a'; AbEFAFormatS = 'External File Attributes: %s'; AbIFAFormatS = 'File Type: %s'; AbTextS = 'Text'; AbBinaryS = 'Binary'; AbEncryptionFormatS = 'Encryption: %s'; AbEncryptedS = 'Encrypted'; AbNotEncryptedS = 'Not Encrypted'; AbUnknownS = 'Unknown'; AbTimeStampFormatS = 'Time Stamp: %s'; AbMadeByFormatS = 'Made by Version: %f'; AbNeededFormatS = 'Version Needed to Extract: %f'; AbCommentFormatS = 'Comment: %s'; AbDefaultExtS = '*.zip'; AbFilterS = 'PKZip Archives (*.zip)|*.zip|Self Extracting Archives (*.exe)|*.exe|All Files (*.*)|*.*'; AbFileNameTitleS = 'Select File Name'; AbOKS = 'OK'; AbCancelS = 'Cancel'; AbSelectDirectoryS = 'Select Directory'; AbEnterPasswordS = 'Enter Password'; AbPasswordS = '&Password'; AbVerifyS = '&Verify'; AbCabExtS = '*.cab'; AbCabFilterS = 'Cabinet Archives (*.cab)|*.CAB|All Files (*.*)|*.*'; AbLogExtS = '*.txt'; AbLogFilterS = 'Text Files (*.txt)|*.TXT|All Files (*.*)|*.*'; AbExeExtS = '*.exe'; AbExeFilterS = 'Self-Extracting Zip Files (*.exe)|*.EXE|All Files (*.*)|*.*'; AbVMSReadTooManyBytesS = 'VMS: request to read too many bytes [%d]'; AbVMSInvalidOriginS = 'VMS: invalid origin %d, should be 0, 1, 2'; AbVMSErrorOpenSwapS = 'VMS: Cannot open swap file %s'; AbVMSSeekFailS = 'VMS: Failed to seek in swap file %s'; AbVMSReadFailS = 'VMS: Failed to read %d bytes from swap file %s'; AbVMSWriteFailS = 'VMS: Failed to write %d bytes to swap file %s'; AbVMSWriteTooManyBytesS = 'VMS: request to write too many bytes [%d]'; AbBBSReadTooManyBytesS = 'BBS: request to read too many bytes [%d]'; AbBBSSeekOutsideBufferS = 'BBS: New position is outside the buffer'; AbBBSInvalidOriginS = 'BBS: Invalid Origin value'; AbBBSWriteTooManyBytesS = 'BBS: request to write too many bytes [%d]'; AbSWSNotEndofStreamS = 'TabSlidingWindowStream.Write: Not at end of stream'; AbSWSSeekFailedS = 'TabSlidingWindowStream.bsWriteChunk: seek failed'; AbSWSWriteFailedS = 'TabSlidingWindowStream.bsWriteChunk: write failed'; AbSWSInvalidOriginS = 'TabSlidingWindowStream.Seek: invalid origin'; AbSWSInvalidNewOriginS = 'TabSlidingWindowStream.Seek: invalid new position'; AbItemNameHeadingS = 'Name'; AbPackedHeadingS = 'Packed'; AbMethodHeadingS = 'Method'; AbRatioHeadingS = 'Ratio (%)'; AbCRCHeadingS = 'CRC32'; AbFileAttrHeadingS = 'Attributes'; AbFileFormatHeadingS = 'Format'; AbEncryptionHeadingS = 'Encrypted'; AbTimeStampHeadingS = 'Time Stamp'; AbFileSizeHeadingS = 'Size'; AbVersionMadeHeadingS = 'Version Made'; AbVersionNeededHeadingS = 'Version Needed'; AbPathHeadingS = 'Path'; AbPartialHeadingS = 'Partial'; AbExecutableHeadingS = 'Executable'; AbFileTypeHeadingS = 'Type'; AbLastModifiedHeadingS = 'Modified'; AbCabMethod0S = 'None'; AbCabMethod1S = 'MSZip'; AbLtAddS = ' added '; AbLtDeleteS = ' deleted '; AbLtExtractS = ' extracted '; AbLtFreshenS = ' freshened '; AbLtMoveS = ' moved '; AbLtReplaceS = ' replaced '; AbLtStartS = ' logging '; AbGzipInvalidS = 'Invalid Gzip'; AbGzipBadCRCS = 'Bad CRC'; AbGzipBadFileSizeS = 'Bad File Size'; AbTarInvalidS = 'Invalid Tar'; AbTarBadFileNameS = 'File name too long'; AbTarBadLinkNameS = 'Symbolic link path too long'; AbTarBadOpS = 'Unsupported Operation'; AbUnhandledEntityS = 'Unhandled Entity'; { pre-defined "operating system" (really more FILE system) identifiers for the Gzip header } AbGzOsFat = 'FAT File System (MS-DOS, OS/2, NT/Win32)'; AbGzOsAmiga = 'Amiga'; AbGzOsVMS = 'VMS (or OpenVMS)'; AbGzOsUnix = 'Unix'; AbGzOsVM_CMS = 'VM/CMS'; AbGzOsAtari = 'Atari TOS'; AbGzOsHPFS = 'HPFS File System (OS/2, NT)'; AbGzOsMacintosh = 'Macintosh'; AbGzOsZ_System = 'Z-System'; AbGzOsCP_M = 'CP/M'; AbGzOsTOPS_20 = 'TOPS-20'; AbGzOsNTFS = 'NTFS File System (NT)'; AbGzOsQDOS = 'QDOS'; AbGzOsAcornRISCOS = 'Acorn RISCOS'; AbGzOsVFAT = 'VFAT File System (Win95, NT)'; AbGzOsMVS = 'MVS'; AbGzOsBeOS = 'BeOS (BeBox or PowerMac)'; AbGzOsTandem = 'Tandem/NSK'; AbGzOsTHEOS = 'THEOS'; AbGzOsunknown = 'unknown'; AbGzOsUndefined = 'ID undefined by gzip'; { Compound File specific error messages } resourcestring AbCmpndIndexOutOfBounds = 'Index out of bounds'; AbCmpndBusyUpdating = 'Compound file is busy updating'; AbCmpndInvalidFile = 'Invalid compound file'; AbCmpndFileNotFound = 'File/Directory not found'; AbCmpndFolderNotEmpty = 'Folder not empty'; AbCmpndExceedsMaxFileSize = 'File size exceeds maximum allowable'; implementation end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abprogress.pas0000755000175000001440000000471315104114162023273 0ustar alexxusersunit AbProgress; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, AbArcTyp; type { TAbProgress } TAbProgress = object DoneSize: Int64; FileSize: Int64; OnProgress: TAbProgressEvent; procedure DoProgress(Result: Integer); end; { TAbProgressReadStream } TAbProgressReadStream = class(TStream) private FSource: TStream; FProgress: TAbProgress; public constructor Create(ASource : TStream; AEvent: TAbProgressEvent); reintroduce; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; { TAbProgressWriteStream } TAbProgressWriteStream = class(TStream) private FTarget: TStream; FProgress: TAbProgress; public constructor Create(ATarget : TStream; ASize: Int64; AEvent: TAbProgressEvent); reintroduce; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; implementation uses AbExcept; { TAbProgress } procedure TAbProgress.DoProgress(Result: Integer); var Percent: Byte; Abort: Boolean = False; begin if (FileSize > 0) then begin DoneSize += Result; Percent:= Byte(DoneSize * 100 div FileSize); OnProgress(Percent, Abort); if Abort then raise EAbUserAbort.Create; end; end; { TAbProgressReadStream } constructor TAbProgressReadStream.Create(ASource: TStream; AEvent: TAbProgressEvent); begin FSource:= ASource; FProgress.OnProgress:= AEvent; FProgress.FileSize:= FSource.Size; end; function TAbProgressReadStream.Read(var Buffer; Count: Longint): Longint; begin Result:= FSource.Read(Buffer, Count); if Assigned(FProgress.OnProgress) then FProgress.DoProgress(Result); end; function TAbProgressReadStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result:= FSource.Seek(Offset, Origin); end; { TAbProgressWriteStream } constructor TAbProgressWriteStream.Create(ATarget: TStream; ASize: Int64; AEvent: TAbProgressEvent); begin FTarget:= ATarget; FProgress.FileSize:= ASize; FProgress.OnProgress:= AEvent; end; function TAbProgressWriteStream.Write(const Buffer; Count: Longint): Longint; begin Result:= FTarget.Write(Buffer, Count); if Assigned(FProgress.OnProgress) then FProgress.DoProgress(Result); end; function TAbProgressWriteStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result:= FTarget.Seek(Offset, Origin); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/ablzmatyp.pas0000644000175000001440000003524315104114162023126 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Koblov * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbLzmaTyp.pas *} {*********************************************************} {* ABBREVIA: TAbLzmaArchive, TAbLzmaItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Lzma files *} {*********************************************************} unit AbLzmaTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; type PAbLzmaHeader = ^TAbLzmaHeader; { File Header } TAbLzmaHeader = packed record { SizeOf(TAbLzmaHeader) = 13 } Properties: array[0..4] of Byte; { LZMA properties } UncompressedSize : Int64; { Uncompressed size } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbLzmaItem = class(TabArchiveItem); TAbLzmaArchiveState = (gsLzma, gsTar); { TAbLzmaArchive } TAbLzmaArchive = class(TAbTarArchive) private FLzmaStream : TStream; { stream for Lzma file} FLzmaItem : TAbArchiveList; { item in lzma (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbLzmaArchiveState; FIsLzmaTar : Boolean; procedure CompressFromStream(aStream: TStream); procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToLzma; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsLzmaTar : Boolean read FIsLzmaTar write FIsLzmaTar; end; function VerifyLzma(Strm : TStream) : TAbArchiveType; implementation uses StrUtils, SysUtils, Math, AbExcept, AbVMStrm, AbBitBkt, ULZMADecoder, ULZMAEncoder, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyLzma(Strm : TStream) : TAbArchiveType; var CurPos : Int64; TarStream: TStream; Hdr : TAbLzmaHeader; UncompressedSize: Int64; DecompStream: TLZMADecoder; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soBeginning); try if Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr) then begin TarStream := TMemoryStream.Create; try DecompStream := TLZMADecoder.Create; try if Hdr.UncompressedSize <> -1 then UncompressedSize:= Min(AB_TAR_RECORDSIZE * 4, Hdr.UncompressedSize) else if Strm.Size < AB_TAR_RECORDSIZE * 8 then UncompressedSize:= -1 else begin UncompressedSize:= AB_TAR_RECORDSIZE * 4; end; if DecompStream.SetDecoderProperties(Hdr.Properties) and DecompStream.Code(Strm, TarStream, UncompressedSize) then begin Result := atLzma; { Check for embedded TAR } TarStream.Seek(0, soBeginning); if VerifyTar(TarStream) = atTar then Result := atLzmaTar; end; finally DecompStream.Free; end; finally TarStream.Free; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbLzmaArchive ***************************** } constructor TAbLzmaArchive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsLzma; FLzmaStream := FStream; FLzmaItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SwapToLzma; begin FStream := FLzmaStream; FItemList := FLzmaItem; FState := gsLzma; end; { -------------------------------------------------------------------------- } function TAbLzmaArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var LzmaItem : TAbLzmaItem; FullSourceFileName, FullArchiveFileName: String; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToLzma; LzmaItem := TAbLzmaItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); LzmaItem.FileName := FullArchiveFileName; LzmaItem.DiskFileName := FullSourceFileName; Result := LzmaItem; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbLzmaArchive.Destroy; begin SwapToLzma; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToLzma; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Lzma doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToLzma; { Index ignored as there's only one item in a Lzma } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbLzmaArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsLzmaTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.LoadArchive; var Item: TAbLzmaItem; Abort: Boolean; ItemName: string; Header: TAbLzmaHeader; begin if FLzmaStream.Size = 0 then Exit; if IsLzmaTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToLzma; FStream.Read(Header, SizeOf(Header)); Item := TAbLzmaItem.Create; Item.Action := aaNone; if Header.UncompressedSize <> -1 then Item.UncompressedSize := Header.UncompressedSize; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.tlz', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SaveArchive; var I: Integer; CurItem: TAbLzmaItem; UpdateArchive: Boolean; TempFileName: String; InputFileStream: TStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; UpdateArchive := (FLzmaStream.Size > 0) and (FLzmaStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FLzmaStream); TempFileName := GetTempName(FArchiveName); { Create new archive with temporary name } FLzmaStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompressFromStream(FTarStream); if UpdateArchive then begin FreeAndNil(FLzmaStream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FLzmaStream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToLzma; for I := 0 to Pred(Count) do begin FCurrentItem := ItemList[I]; CurItem := TAbLzmaItem(ItemList[I]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; lzma doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FLzmaStream.Size := 0; if CurItem.Action = aaStreamAdd then begin CompressFromStream(InStream); { Copy/compress entire Instream to FLzmaStream } end else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try CompressFromStream(InputFileStream); { Copy/compress entire Instream to FLzmaStream } finally InputFileStream.Free; end; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToLzma; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.CompressFromStream(aStream: TStream); var Encoder: TLZMAEncoder; begin Encoder := TLZMAEncoder.Create; try Encoder.WriteCoderProperties(FLzmaStream); FLzmaStream.WriteQWord(NToLE(aStream.Size)); Encoder.Code(aStream, FLzmaStream, -1, -1); finally Encoder.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.DecompressToStream(aStream: TStream); var Header: TAbLzmaHeader; Decoder: TLZMADecoder; begin FLzmaStream.Seek(0, soBeginning); if FLzmaStream.Read(Header, SizeOf(Header)) = SizeOf(Header) then begin Decoder := TLZMADecoder.Create; try if Decoder.SetDecoderProperties(Header.Properties) and Decoder.Code(FLzmaStream, aStream, Header.UncompressedSize) then begin Exit; { Success } end; finally Decoder.Free; end; end; raise EAbUnhandledType.Create; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.TestItemAt(Index: Integer); var LzmaType: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { Note Index ignored as there's only one item in a GZip } LzmaType := VerifyLzma(FLzmaStream); if not (LzmaType in [atLzma, atLzmaTar]) then raise EAbGzipInvalid.Create; // TODO: Add lzma-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abgztyp.pas0000644000175000001440000011611115104114162022575 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbGzTyp.pas *} {*********************************************************} {* ABBREVIA: TAbGzipArchive, TAbGzipItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with GZip files *} {* See: RFC 1952 *} {* "GZIP file format specification version 4.3" *} {* for more information on GZip *} {* See "algorithm.doc" in Gzip source and "format.txt" *} {* on gzip.org for differences from RFC *} {*********************************************************} unit AbGzTyp; {$I AbDefine.inc} interface uses Classes, AbUtils, AbArcTyp, AbTarTyp; type { pre-defined "operating system" (really more FILE system) types for the Gzip header } TAbGzFileSystem = (osFat, osAmiga, osVMS, osUnix, osVM_CMS, osAtariTOS, osHPFS, osMacintosh, osZSystem, osCP_M, osTOPS20, osNTFS, osQDOS, osAcornRISCOS, osVFAT, osMVS, osBeOS, osTandem, osTHEOS, osUnknown, osUndefined); type PAbGzHeader = ^TAbGzHeader; TAbGzHeader = packed record { SizeOf(TGzHeader) = 10} ID1 : Byte; { ID Byte, should always be $1F} ID2 : Byte; { ID Byte, should always be $8B} CompMethod : Byte; { compression method used} { 0..7 reserved, 8 = deflate, others undefined as of this writing (4/27/2001)} Flags : Byte; { misc flags} { Bit 0: FTEXT compressed file contains text, can be used for} { cross platform line termination translation} { Bit 1: FCONTINUATION file is a continuation of a multi-part gzip file} { RFC 1952 says this is the header CRC16 flag, but gzip} { reserves it and won't extract the file if this is set} { header data includes part number after header record} { Bit 2: FEXTRA header data contains Extra Data, starts after part} { number (if any)} { Bit 3: FNAME header data contains FileName, null terminated} { string starting immediately after Extra Data (if any)} { RFC 1952 says this is ISO 8859-1 encoded, but gzip} { always uses the system encoding} { Bit 4: FCOMMENT header data contains Comment, null terminated string} { starting immediately after FileName (if any)} { Bit 5: FENCRYPTED file is encrypted using zip-1.9 encryption } { header data contains a 12-byte encryption header } { starting immediately after Comment. Documented in} { "algorithm.doc", but unsupported in gzip} { Bits 6..7 are undefined and reserved as of this writing (8/25/2009)} ModTime : LongInt; { File Modification (Creation) time,} { UNIX cdate format} XtraFlags : Byte; { additional flags} { XtraFlags = 2 -- Deflate compressor used maximum compression algorithm} { XtraFlags = 4 -- Deflate compressor used fastest algorithm} OS : Byte; { Operating system that created file,} { see GZOsToStr routine for values} end; TAbGzTailRec = packed record CRC32 : LongInt; { crc for uncompressed data } ISize : LongWord; { size of uncompressed data } end; TAbGzExtraFieldSubID = array[0..1] of AnsiChar; type TAbGzipExtraField = class(TAbExtraField) private FGZHeader : PAbGzHeader; function GetID(aIndex : Integer): TAbGzExtraFieldSubID; protected procedure Changed; override; public constructor Create(aGZHeader : PAbGzHeader); procedure Delete(aID : TAbGzExtraFieldSubID); function Get(aID : TAbGzExtraFieldSubID; out aData : Pointer; out aDataSize : Word) : Boolean; procedure Put(aID : TAbGzExtraFieldSubID; const aData; aDataSize : Word); public property IDs[aIndex : Integer]: TAbGzExtraFieldSubID read GetID; end; TAbGzipItem = class(TAbArchiveItem) protected {private} FGZHeader : TAbGzHeader; FExtraField : TAbGzipExtraField; FFileComment : AnsiString; FRawFileName : AnsiString; protected function GetFileSystem: TAbGzFileSystem; function GetHasExtraField: Boolean; function GetHasFileComment: Boolean; function GetHasFileName: Boolean; function GetIsText: Boolean; procedure SetFileComment(const Value : AnsiString); procedure SetFileSystem(const Value: TAbGzFileSystem); procedure SetIsText(const Value: Boolean); function GetExternalFileAttributes : LongWord; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; function GetNativeLastModFileTime: Longint; override; procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string); override; procedure SetIsEncrypted(Value : Boolean); override; procedure SetLastModFileDate(const Value : Word); override; procedure SetLastModFileTime(const Value : Word); override; procedure SetLastModTimeAsDateTime(const Value: TDateTime); override; procedure SaveGzHeaderToStream(AStream : TStream); procedure LoadGzHeaderFromStream(AStream : TStream); public property CompressionMethod : Byte read FGZHeader.CompMethod; property ExtraFlags : Byte {Default: 2} read FGZHeader.XtraFlags write FGZHeader.XtraFlags; property Flags : Byte read FGZHeader.Flags; property FileComment : AnsiString read FFileComment write SetFileComment; property FileSystem : TAbGzFileSystem {Default: osFat (Windows); osUnix (Linux)} read GetFileSystem write SetFileSystem; property ExtraField : TAbGzipExtraField read FExtraField; property IsEncrypted : Boolean read GetIsEncrypted; property HasExtraField : Boolean read GetHasExtraField; property HasFileName : Boolean read GetHasFileName; property HasFileComment : Boolean read GetHasFileComment; property IsText : Boolean read GetIsText write SetIsText; property GZHeader : TAbGzHeader read FGZHeader; constructor Create; destructor Destroy; override; end; TAbGzipStreamHelper = class(TAbArchiveStreamHelper) private function GetGzCRC: LongInt; function GetFileSize: LongInt; protected {private} FItem : TAbGzipItem; FTail : TAbGzTailRec; FArchive : TAbArchive; public constructor Create(AStream : TStream); overload; constructor Create(Archive : TAbArchive; AStream : TStream); overload; destructor Destroy; override; procedure ExtractItemData(AStream : TStream); override; function FindFirstItem : Boolean; override; function FindNextItem : Boolean; override; function SeekItem(Index : Integer): Boolean; override; procedure SeekToItemData; procedure WriteArchiveHeader; override; procedure WriteArchiveItem(AStream : TStream); override; procedure WriteArchiveTail; override; function GetItemCount : Integer; override; procedure ReadHeader; override; procedure ReadTail; override; property CRC : LongInt read GetGzCRC; property FileSize : LongInt read GetFileSize; property TailCRC : LongInt read FTail.CRC32; property TailSize : LongWord read FTail.ISize; end; TAbGzipArchiveState = (gsGzip, gsTar); TAbGzipArchive = class(TAbTarArchive) private FGZStream : TStream; { stream for GZip file} FGZItem : TAbArchiveList; { item in Gzip (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbGzipArchiveState; FIsGzippedTar : Boolean; procedure SetTarAutoHandle(const Value: Boolean); function GetIsGzippedTar: Boolean; procedure SwapToGzip; procedure SwapToTar; protected function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function FixName(const Value : string) : string; override; function GetSupportsEmptyFolders : Boolean; override; function GetItem(Index: Integer): TAbGzipItem; procedure PutItem(Index: Integer; const Value: TAbGzipItem); public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsGzippedTar : Boolean read GetIsGzippedTar write FIsGzippedTar; property Items[Index : Integer] : TAbGzipItem read GetItem write PutItem; default; end; function VerifyGZip(Strm : TStream) : TAbArchiveType; function GZOsToStr(OS: Byte) : string; implementation uses SysUtils, BufStream, AbBitBkt, AbDfBase, AbZlibPrc, AbExcept, AbResString, AbProgress, AbVMStrm, DCOSUtils, DCClassesUtf8, DCConvertEncoding; const { Header Signature Values} AB_GZ_HDR_ID1 = $1F; AB_GZ_HDR_ID2 = $8B; { Test bits for TGzHeader.Flags field } AB_GZ_FLAG_FTEXT = $01; AB_GZ_FLAG_FCONTINUATION = $02; AB_GZ_FLAG_FEXTRA = $04; AB_GZ_FLAG_FNAME = $08; AB_GZ_FLAG_FCOMMENT = $10; AB_GZ_FLAG_FENCRYPTED = $20; AB_GZ_UNSUPPORTED_FLAGS = $E2; { GZip OS source flags } AB_GZ_OS_ID_FAT = 0; AB_GZ_OS_ID_Amiga = 1; AB_GZ_OS_ID_VMS = 2; AB_GZ_OS_ID_Unix = 3; AB_GZ_OS_ID_VM_CMS = 4; AB_GZ_OS_ID_AtariTOS = 5; AB_GZ_OS_ID_HPFS = 6; AB_GZ_OS_ID_Macintosh = 7; AB_GZ_OS_ID_Z_System = 8; AB_GZ_OS_ID_CP_M = 9; AB_GZ_OS_ID_TOPS20 = 10; AB_GZ_OS_ID_NTFS = 11; AB_GZ_OS_ID_QDOS = 12; AB_GZ_OS_ID_AcornRISCOS = 13; AB_GZ_OS_ID_VFAT = 14; AB_GZ_OS_ID_MVS = 15; AB_GZ_OS_ID_BEOS = 16; AB_GZ_OS_ID_TANDEM = 17; AB_GZ_OS_ID_THEOS = 18; AB_GZ_OS_ID_unknown = 255; function GZOsToStr(OS: Byte) : string; { Return a descriptive string for TGzHeader.OS field } begin case OS of AB_GZ_OS_ID_FAT : Result := AbGzOsFat; AB_GZ_OS_ID_Amiga : Result := AbGzOsAmiga; AB_GZ_OS_ID_VMS : Result := AbGzOsVMS; AB_GZ_OS_ID_Unix : Result := AbGzOsUnix; AB_GZ_OS_ID_VM_CMS : Result := AbGzOsVM_CMS; AB_GZ_OS_ID_AtariTOS : Result := AbGzOsAtari; AB_GZ_OS_ID_HPFS : Result := AbGzOsHPFS; AB_GZ_OS_ID_Macintosh : Result := AbGzOsMacintosh; AB_GZ_OS_ID_Z_System : Result := AbGzOsZ_System; AB_GZ_OS_ID_CP_M : Result := AbGzOsCP_M; AB_GZ_OS_ID_TOPS20 : Result := AbGzOsTOPS_20; AB_GZ_OS_ID_NTFS : Result := AbGzOsNTFS; AB_GZ_OS_ID_QDOS : Result := AbGzOsQDOS; AB_GZ_OS_ID_AcornRISCOS : Result := AbGzOsAcornRISCOS; AB_GZ_OS_ID_VFAT : Result := AbGzOsVFAT; AB_GZ_OS_ID_MVS : Result := AbGzOsMVS; AB_GZ_OS_ID_BEOS : Result := AbGzOsBeOS; AB_GZ_OS_ID_TANDEM : Result := AbGzOsTandem; AB_GZ_OS_ID_THEOS : Result := AbGzOsTHEOS; AB_GZ_OS_ID_unknown : Result := AbGzOsunknown; else Result := AbGzOsUndefined; end; end; function VerifyHeader(const Header : TAbGzHeader) : Boolean; begin { check id fields and if deflated (only handle deflate anyway)} Result := (Header.ID1 = AB_GZ_HDR_ID1) and (Header.ID2 = AB_GZ_HDR_ID2) and (Header.CompMethod = 8 {deflate}); end; function VerifyGZip(Strm : TStream) : TAbArchiveType; var GHlp : TAbGzipStreamHelper; Hlpr : TAbDeflateHelper; PartialTarData : TMemoryStream; CurPos : Int64; begin Result := atUnknown; CurPos := Strm.Position; try Strm.Seek(0, soBeginning); {prepare for the try..finally} Hlpr := nil; PartialTarData := nil; GHlp := TAbGzipStreamHelper.Create(Strm); try {create the stream helper and read the item header} GHlp.ReadHeader; { check id fields and if deflated (only handle deflate anyway)} if VerifyHeader(GHlp.FItem.FGZHeader) then begin Result := atGZip; { provisional } { check if is actually a Gzipped Tar } { partial extract contents, verify vs. Tar } PartialTarData := TMemoryStream.Create; GHlp.SeekToItemData; Hlpr := TAbDeflateHelper.Create; Hlpr.PartialSize := AB_TAR_RECORDSIZE * 4; PartialTarData.SetSize(Hlpr.PartialSize); Inflate(Strm, PartialTarData, Hlpr); {set to beginning of extracted data} PartialTarData.Position := 0; if (VerifyTar(PartialTarData) = atTar) then Result := atGZippedTar; end; finally GHlp.Free; Hlpr.Free; PartialTarData.Free; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; end; { TAbGzipExtraField } constructor TAbGzipExtraField.Create(aGZHeader : PAbGzHeader); begin inherited Create; FGZHeader := aGZHeader; end; procedure TAbGzipExtraField.Changed; begin if Buffer = nil then FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FEXTRA else FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FEXTRA; end; procedure TAbGzipExtraField.Delete(aID : TAbGzExtraFieldSubID); begin inherited Delete(Word(aID)); end; function TAbGzipExtraField.GetID(aIndex : Integer): TAbGzExtraFieldSubID; begin Result := TAbGzExtraFieldSubID(inherited IDs[aIndex]); end; function TAbGzipExtraField.Get(aID : TAbGzExtraFieldSubID; out aData : Pointer; out aDataSize : Word) : Boolean; begin Result := inherited Get(Word(aID), aData, aDataSize); end; procedure TAbGzipExtraField.Put(aID : TAbGzExtraFieldSubID; const aData; aDataSize : Word); begin inherited Put(Word(aID), aData, aDataSize); end; { TAbGzipStreamHelper } constructor TAbGzipStreamHelper.Create(AStream: TStream); begin inherited Create(AStream); FItem := TAbGzipItem.Create; end; constructor TAbGzipStreamHelper.Create(Archive : TAbArchive; AStream: TStream); begin Create(AStream); FArchive := Archive; end; destructor TAbGzipStreamHelper.Destroy; begin FItem.Free; inherited; end; function ReadCStringInStream(AStream: TStream): AnsiString; { locate next instance of a null character in a stream leaves stream positioned just past that, or at end of stream if not found or null is last byte in stream. Result is the entire read string. } const BuffSiz = 1024; var Buff : array [0..BuffSiz-1] of AnsiChar; Len, DataRead : LongInt; begin { basically what this is supposed to do is...} { repeat AStream.Read(C, 1); Result := Result + C; until (AStream.Position = AStream.Size) or (C = #0); } Result := ''; repeat DataRead := AStream.Read(Buff, BuffSiz - 1); Buff[DataRead] := #0; Len := StrLen(Buff); if Len > 0 then begin SetLength(Result, Length(Result) + Len); Move(Buff, Result[Length(Result) - Len + 1], Len); end; if Len < DataRead then begin AStream.Seek(Len - DataRead + 1, soCurrent); Break; end; until DataRead = 0; end; procedure TAbGzipStreamHelper.SeekToItemData; {find end of header data, including FileName etc.} begin {** Seek to Compressed Data **} FStream.Seek(0, soBeginning); FItem.LoadGzHeaderFromStream(FStream); end; procedure TAbGzipStreamHelper.ExtractItemData(AStream: TStream); var Helper : TAbDeflateHelper; begin Helper := TAbDeflateHelper.Create; try if (AStream is TAbBitBucketStream) then Helper.Options := Helper.Options or dfc_TestOnly; FItem.CRC32 := Inflate(FStream, AStream, Helper); FItem.UncompressedSize := Helper.NormalSize; finally Helper.Free; end; end; function TAbGzipStreamHelper.FindFirstItem: Boolean; var GZH : TAbGzHeader; DataRead : Integer; begin Result := False; FStream.Seek(0, soBeginning); DataRead := FStream.Read(GZH, SizeOf(TAbGzHeader)); if (DataRead = SizeOf(TAbGzHeader)) and VerifyHeader(GZH) then begin FItem.FGZHeader := GZH; Result := True; end; FStream.Seek(0, soBeginning); end; function TAbGzipStreamHelper.FindNextItem: Boolean; begin { only one item in a GZip } Result := False; end; function TAbGzipStreamHelper.SeekItem(Index: Integer): Boolean; begin if Index > 0 then Result := False else Result := FindFirstItem; end; procedure TAbGzipStreamHelper.WriteArchiveHeader; begin FItem.SaveGzHeaderToStream(FStream); end; procedure TAbGzipStreamHelper.WriteArchiveItem(AStream: TStream); var Helper : TAbDeflateHelper; begin Helper := TAbDeflateHelper.Create; try case FArchive.CompressionLevel of 1 : Helper.PKZipOption := 's'; 3 : Helper.PKZipOption := 'f'; 6 : Helper.PKZipOption := 'n'; 9 : Helper.PKZipOption := 'x'; end; FItem.CRC32 := Deflate(AStream, FStream, Helper); FItem.UncompressedSize := AStream.Size; finally Helper.Free; end; end; procedure TAbGzipStreamHelper.WriteArchiveTail; var Tail : TAbGzTailRec; begin Tail.CRC32 := FItem.CRC32; Tail.ISize := FItem.UncompressedSize; FStream.Write(Tail, SizeOf(TAbGzTailRec)); end; function TAbGzipStreamHelper.GetItemCount: Integer; begin { only one item in a gzip } Result := 1; end; procedure TAbGzipStreamHelper.ReadHeader; begin FItem.LoadGzHeaderFromStream(FStream); end; procedure TAbGzipStreamHelper.ReadTail; begin FStream.Read(FTail, SizeOf(TAbGzTailRec)); end; function TAbGzipStreamHelper.GetGzCRC: LongInt; begin Result := FItem.CRC32; end; function TAbGzipStreamHelper.GetFileSize: LongInt; begin Result := FItem.UncompressedSize; end; { TAbGzipItem } constructor TAbGzipItem.Create; begin inherited Create; { default ID fields } FGzHeader.ID1 := AB_GZ_HDR_ID1; FGzHeader.ID2 := AB_GZ_HDR_ID2; { compression method } FGzHeader.CompMethod := 8; { deflate } { Maxium Compression } FGzHeader.XtraFlags := 2; FFileName := ''; FFileComment := ''; FExtraField := TAbGzipExtraField.Create(@FGzHeader); { source OS ID } {$IFDEF LINUX } {assume EXT2 system } FGzHeader.OS := AB_GZ_OS_ID_Unix; {$ENDIF LINUX } {$IFDEF MSWINDOWS } {assume FAT system } FGzHeader.OS := AB_GZ_OS_ID_FAT; {$ENDIF MSWINDOWS } end; destructor TAbGzipItem.Destroy; begin FExtraField.Free; inherited; end; function TAbGzipItem.GetExternalFileAttributes: LongWord; begin { GZip has no provision for storing attributes } Result := 0; end; function TAbGzipItem.GetFileSystem: TAbGzFileSystem; begin case FGzHeader.OS of 0..18: Result := TAbGzFileSystem(FGzHeader.OS); 255: Result := osUnknown; else Result := osUndefined; end; { case } end; function TAbGzipItem.GetIsEncrypted: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FENCRYPTED) = AB_GZ_FLAG_FENCRYPTED; end; function TAbGzipItem.GetHasExtraField: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FEXTRA) = AB_GZ_FLAG_FEXTRA; end; function TAbGzipItem.GetHasFileComment: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FCOMMENT) = AB_GZ_FLAG_FCOMMENT; end; function TAbGzipItem.GetHasFileName: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FNAME) = AB_GZ_FLAG_FNAME; end; function TAbGzipItem.GetIsText: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FTEXT) = AB_GZ_FLAG_FTEXT; end; function TAbGzipItem.GetLastModFileDate: Word; begin { convert to local DOS file Date } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Hi; end; function TAbGzipItem.GetLastModFileTime: Word; begin { convert to local DOS file Time } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Lo; end; function TAbGzipItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbUnixTimeToLocalDateTime(FGZHeader.ModTime); end; function TAbGzipItem.GetNativeLastModFileTime: Longint; {$IFDEF MSWINDOWS} var DateTime: TDateTime; {$ENDIF} begin Result := FGZHeader.ModTime; {$IFDEF MSWINDOWS} DateTime := AbUnixTimeToLocalDateTime(Result); Result := AbDateTimeToDosFileDate(DateTime); {$ENDIF} end; procedure TAbGzipItem.LoadGzHeaderFromStream(AStream: TStream); var LenW : Word; begin FGzHeader.ID1 := 0; AStream.Read(FGzHeader, SizeOf(TAbGzHeader)); if not VerifyHeader(FGzHeader) then Exit; { Skip part number, if any } if (FGzHeader.Flags and AB_GZ_FLAG_FCONTINUATION) = AB_GZ_FLAG_FCONTINUATION then AStream.Seek(SizeOf(Word), soCurrent); if HasExtraField then begin { get length of extra data } AStream.Read(LenW, SizeOf(Word)); FExtraField.LoadFromStream(AStream, LenW); end else FExtraField.Clear; { Get Filename, if any } if HasFileName then begin FRawFileName := ReadCStringInStream(AStream); FFileName := CeRawToUtf8(FRawFileName) end else FFileName := 'unknown'; { any comment present? } if HasFileComment then FFileComment := ReadCStringInStream(AStream) else FFileComment := ''; {Assert: stream should now be located at start of compressed data } {If file was compressed with 3.3 spec this will be invalid so use with care} CompressedSize := AStream.Size - AStream.Position - SizeOf(TAbGzTailRec); FDiskFileName := FileName; AbUnfixName(FDiskFileName); Action := aaNone; Tagged := False; end; procedure TAbGzipItem.SaveGzHeaderToStream(AStream: TStream); var LenW : Word; begin { default ID fields } FGzHeader.ID1 := AB_GZ_HDR_ID1; FGzHeader.ID2 := AB_GZ_HDR_ID2; { compression method } FGzHeader.CompMethod := 8; { deflate } { reset unsupported flags } FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_UNSUPPORTED_FLAGS; { main header data } AStream.Write(FGzHeader, SizeOf(TAbGzHeader)); { add extra field if any } if HasExtraField then begin LenW := Length(FExtraField.Buffer); AStream.Write(LenW, SizeOf(LenW)); if LenW > 0 then AStream.Write(FExtraField.Buffer[0], LenW); end; { add filename if any (and include final #0 from string) } if HasFileName then AStream.Write(FRawFileName[1], Length(FRawFileName) + 1); { add file comment if any (and include final #0 from string) } if HasFileComment then AStream.Write(FFileComment[1], Length(FFileComment) + 1); end; procedure TAbGzipItem.SetExternalFileAttributes(Value: LongWord); begin { do nothing } end; procedure TAbGzipItem.SetFileComment(const Value: AnsiString); begin FFileComment := Value; if FFileComment <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FCOMMENT else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FCOMMENT; end; procedure TAbGzipItem.SetFileName(const Value: string); begin FFileName := Value; FRawFileName := CeUtf8ToSys(Value); if Value <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FNAME else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FNAME; end; procedure TAbGzipItem.SetFileSystem(const Value: TAbGzFileSystem); begin if Value = osUnknown then FGzHeader.OS := 255 else FGzHeader.OS := Ord(Value); end; procedure TAbGzipItem.SetIsEncrypted(Value: Boolean); begin { do nothing } end; procedure TAbGzipItem.SetIsText(const Value: Boolean); begin if Value then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FTEXT else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FTEXT; end; procedure TAbGzipItem.SetLastModFileDate(const Value: Word); begin { replace date, keep existing time } LastModTimeAsDateTime := EncodeDate( Value shr 9 + 1980, Value shr 5 and 15, Value and 31) + Frac(LastModTimeAsDateTime); end; procedure TAbGzipItem.SetLastModFileTime(const Value: Word); begin { keep current date, replace time } LastModTimeAsDateTime := Trunc(LastModTimeAsDateTime) + EncodeTime( Value shr 11, Value shr 5 and 63, Value and 31 shl 1, 0); end; procedure TAbGzipItem.SetLastModTimeAsDateTime(const Value: TDateTime); begin FGZHeader.ModTime := AbLocalDateTimeToUnixTime(Value); end; { TAbGzipArchive } constructor TAbGzipArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsGzip; FGZStream := FStream; FGZItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; procedure TAbGzipArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; procedure TAbGzipArchive.SwapToGzip; begin FStream := FGzStream; FItemList := FGzItem; FState := gsGzip; end; function TAbGzipArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var GzItem : TAbGzipItem; FullSourceFileName, FullArchiveFileName: String; begin if IsGZippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToGzip; GzItem := TAbGzipItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); GzItem.FileName := FullArchiveFileName; GzItem.DiskFileName := FullSourceFileName; Result := GzItem; except Result := nil; raise; end; end; end; destructor TAbGzipArchive.Destroy; begin SwapToGzip; FTarList.Free; FTarStream.Free; inherited Destroy; end; procedure TAbGzipArchive.ExtractItemAt(Index: Integer; const UseName: string); var OutStream : TStream; CurItem : TAbGzipItem; begin if IsGZippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, UseName); end else begin SwapToGzip; if Index > 0 then Index := 0; { only one item in a GZip} CurItem := TAbGzipItem(ItemList[Index]); OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); AbSetFileAttr(UseName, CurItem.NativeFileAttributes); except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(UseName) then mbDeleteFile(UseName); raise; end else begin if mbFileExists(UseName) then mbDeleteFile(UseName); raise; end; end; end; end; procedure TAbGzipArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); var GzHelp : TAbGzipStreamHelper; ProxyStream : TAbProgressReadStream; begin if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToGzip; { note Index ignored as there's only one item in a GZip } ProxyStream := TAbProgressReadStream.Create(FGzStream, FOnProgress); try GZHelp := TAbGzipStreamHelper.Create(ProxyStream); try FGzStream.Seek(0, soBeginning); { read GZip Header } GzHelp.ReadHeader; repeat { extract copy data from GZip} GzHelp.ExtractItemData(aStream); { Get validation data } GzHelp.ReadTail; {$IFDEF STRICTGZIP} { According to http://www.gzip.org/zlib/rfc1952.txt A compliant gzip compressor should calculate and set the CRC32 and ISIZE. However, a compliant decompressor should not check these values. If you want to check the the values of the CRC32 and ISIZE in a GZIP file when decompressing enable the STRICTGZIP define contained in AbDefine.inc } { validate against CRC } if GzHelp.FItem.Crc32 <> GzHelp.TailCRC then raise EAbGzipBadCRC.Create; { validate against file size } if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then raise EAbGzipBadFileSize.Create; {$ENDIF} { try concatenated streams } GzHelp.ReadHeader; until not VerifyHeader(GZHelp.FItem.FGzHeader); finally GzHelp.Free; end; finally ProxyStream.Free; end; end; end; function TAbGzipArchive.FixName(const Value: string): string; { fix up fileaname for storage } begin if FState = gsTar then Result := inherited FixName( Value ) else begin {GZip files Always strip the file path} StoreOptions := StoreOptions + [soStripDrive, soStripPath]; Result := ''; if Value <> '' then Result := ExtractFileName(Value); end; end; function TAbGzipArchive.GetIsGzippedTar: Boolean; begin Result := FIsGzippedTar; end; function TAbGzipArchive.GetItem(Index: Integer): TAbGzipItem; begin Result := nil; if Index = 0 then Result := TAbGzipItem(FItemList.Items[Index]); end; function TAbGzipArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsGzippedTar and TarAutoHandle; end; procedure TAbGzipArchive.LoadArchive; var GzHelp : TAbGzipStreamHelper; Item : TAbGzipItem; Abort : Boolean; begin SwapToGzip; if FGzStream.Size > 0 then begin GzHelp := TAbGzipStreamHelper.Create(FGzStream); try if GzHelp.FindFirstItem then begin Item := TAbGzipItem.Create; Item.LoadGzHeaderFromStream(FGzStream); FGzStream.Seek(-SizeOf(TAbGzTailRec), soEnd); GZHelp.ReadTail; Item.CRC32 := GZHelp.TailCRC; Item.UncompressedSize := GZHelp.TailSize; Item.Action := aaNone; FGZItem.Add(Item); if IsGzippedTar and TarAutoHandle then begin { extract Tar and set stream up } FGzStream.Seek(0, soBeginning); GzHelp.ReadHeader; repeat GzHelp.ExtractItemData(FTarStream); GzHelp.ReadTail; GzHelp.ReadHeader; until not VerifyHeader(GZHelp.FItem.FGzHeader); SwapToTar; inherited LoadArchive; end; end; DoArchiveProgress(100, Abort); FIsDirty := False; finally { Clean Up } GzHelp.Free; end; end; end; procedure TAbGzipArchive.PutItem(Index: Integer; const Value: TAbGzipItem); begin if Index = 0 then FItemList.Items[Index] := Value; end; procedure TAbGzipArchive.SaveArchive; var InGzHelp, OutGzHelp : TAbGzipStreamHelper; CompStream : TDeflateStream; Abort : Boolean; i : Integer; NewStream : TStream; UncompressedStream : TStream; CurItem : TAbGzipItem; CreateArchive : Boolean; ATempName : String; Tail : TAbGzTailRec; begin {prepare for the try..finally} OutGzHelp := nil; NewStream := nil; try InGzHelp := TAbGzipStreamHelper.Create(Self, FGzStream); try {init new archive stream} CreateArchive:= FOwnsStream and (FGzStream.Size = 0) and (FGzStream is TFileStreamEx); if CreateArchive then NewStream := FGzStream else begin ATempName := GetTempName(FArchiveName); NewStream := TFileStreamEx.Create(ATempName, fmCreate or fmShareDenyWrite); end; OutGzHelp := TAbGzipStreamHelper.Create(Self, NewStream); { save the Tar data } if IsGzippedTar and TarAutoHandle then begin SwapToTar; if FGZItem.Count = 0 then begin CurItem := TAbGzipItem.Create; FGZItem.Add(CurItem); end; CurItem := FGZItem[0] as TAbGzipItem; CurItem.Action := aaNone; CurItem.LastModTimeAsDateTime := Now; CurItem.SaveGzHeaderToStream(NewStream); FTarStream.Position := 0; CompStream := TDeflateStream.Create(CompressionLevel, NewStream); try FTargetStream := TWriteBufStream.Create(CompStream, $40000); try inherited SaveArchive; finally FreeAndNil(FTargetStream); end; CurItem.CRC32 := LongInt(CompStream.Hash); CurItem.UncompressedSize := CompStream.Seek(0, soCurrent); finally CompStream.Free; end; Tail.CRC32 := CurItem.CRC32; Tail.ISize := CurItem.UncompressedSize; NewStream.Write(Tail, SizeOf(TAbGzTailRec)); end else begin SwapToGzip; {build new archive from existing archive} for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbGzipItem(ItemList[i]); InGzHelp.SeekToItemData; case CurItem.Action of aaNone, aaMove : begin {just copy the file to new stream} CurItem.SaveGzHeaderToStream(NewStream); InGzHelp.SeekToItemData; NewStream.CopyFrom(FGZStream, FGZStream.Size - FGZStream.Position); end; aaDelete: {doing nothing omits file from new stream} ; aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin try if (CurItem.Action = aaStreamAdd) then begin { adding from a stream } CurItem.SaveGzHeaderToStream(NewStream); CurItem.UncompressedSize := InStream.Size; OutGzHelp.WriteArchiveItem(InStream); OutGzHelp.WriteArchiveTail; end else begin CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); UncompressedStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try CurItem.UncompressedSize := UncompressedStream.Size; CurItem.SaveGzHeaderToStream(NewStream); CompStream := TDeflateStream.Create(CompressionLevel, NewStream); try with TAbProgressWriteStream.Create(CompStream, CurItem.UncompressedSize, OnProgress) do try CopyFrom(UncompressedStream, CurItem.UncompressedSize); finally Free; end; CurItem.CRC32 := LongInt(CompStream.Hash); CurItem.UncompressedSize := CompStream.Seek(0, soCurrent); finally CompStream.Free; end; Tail.CRC32 := CurItem.CRC32; Tail.ISize := CurItem.UncompressedSize; NewStream.Write(Tail, SizeOf(TAbGzTailRec)); finally {UncompressedStream} UncompressedStream.Free; end; {UncompressedStream} end; except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; end; {case} end; { for } end; finally InGzHelp.Free; end; {copy new stream to FStream} SwapToGzip; NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else begin { need new stream to write } if CreateArchive then NewStream := nil else begin if FOwnsStream then begin {need new stream to write} if CreateArchive then NewStream := nil else begin FGZStream := nil; FreeAndNil(FStream); FreeAndNil(NewStream); if (mbDeleteFile(FArchiveName) and mbRenameFile(ATempName, FArchiveName)) then FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite) else begin RaiseLastOSError; end; FGZStream := FStream; end; end else begin FStream.Size := 0; FStream.Position := 0; FStream.CopyFrom(NewStream, 0) end; end; end; {update Items list} for i := pred( Count ) downto 0 do begin if ItemList[i].Action = aaDelete then FItemList.Delete( i ) else if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; end; if IsGzippedTar and TarAutoHandle then SwapToTar; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream} OutGzHelp.Free; if (FStream <> NewStream) then NewStream.Free; end; end; procedure TAbGzipArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToGzip; FTarAutoHandle := Value; end; procedure TAbGzipArchive.TestItemAt(Index: Integer); var SavePos : LongInt; GZType : TAbArchiveType; BitBucket : TAbBitBucketStream; GZHelp : TAbGzipStreamHelper; begin if IsGzippedTar and TarAutoHandle then begin inherited TestItemAt(Index); end else begin { note Index ignored as there's only one item in a GZip } SavePos := FGzStream.Position; GZType := VerifyGZip(FGZStream); if not (GZType in [atGZip, atGZippedTar]) then raise EAbGzipInvalid.Create; BitBucket := nil; GZHelp := nil; try BitBucket := TAbBitBucketStream.Create(1024); GZHelp := TAbGzipStreamHelper.Create(FGZStream); Index := 0; FGZStream.Seek(0, soBeginning); GZHelp.ReadHeader; repeat GZHelp.ExtractItemData(BitBucket); GZHelp.ReadTail; { validate against CRC } if GzHelp.FItem.Crc32 <> GZHelp.TailCRC then raise EAbGzipBadCRC.Create; Inc(Index); GzHelp.ReadHeader; until not VerifyHeader(GZHelp.FItem.FGzHeader); if (Index < 2) then begin { validate against file size } if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then raise EAbGzipBadFileSize.Create; end; finally GZHelp.Free; BitBucket.Free; end; FGzStream.Position := SavePos; end; end; procedure TAbGzipArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abexcept.pas0000644000175000001440000004232715104114162022717 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbExcept.pas *} {*********************************************************} {* ABBREVIA: Exception classes *} {*********************************************************} unit AbExcept; {$I AbDefine.inc} interface uses SysUtils, AbUtils; type EAbException = class( Exception ) public ErrorCode : Integer; end; EAbArchiveBusy = class( EAbException ) public constructor Create; end; EAbBadStream = class( EAbException ) protected FInnerException : Exception; public constructor Create; constructor CreateInner(aInnerException : Exception); property InnerException : Exception read FInnerException; end; EAbDuplicateName = class( EAbException ) public constructor Create; end; EAbFileNotFound = class( EAbException ) public constructor Create; end; EAbNoArchive = class( EAbException ) public constructor Create; end; EAbUserAbort = class( EAbException ) public constructor Create; end; EAbNoSuchDirectory = class( EAbException ) public constructor Create; end; EAbUnhandledType = class( EAbException ) public constructor Create; end; EAbSpanningNotSupported = class (EAbException) public constructor Create; end; EAbInvalidSpanningThreshold = class ( EAbException ) public constructor Create; end; EAbZipException = class( EAbException ); {Zip exception} EAbCabException = class( EAbException ); {Cab exception} EAbTarException = class( EAbException ); {Tar Exception} EAbGzipException = class( EAbException); {GZip exception} EAbZipBadSpanStream = class( EAbZipException ) public constructor Create; end; EAbZipBadCRC = class( EAbZipException ) public constructor Create; end; EAbZipInflateBlock = class( EAbZipException ) public constructor Create; end; EAbZipInvalid = class( EAbZipException ) public constructor Create; end; EAbInvalidIndex = class( EAbZipException ) public constructor Create; end; EAbZipInvalidFactor = class( EAbZipException ) public constructor Create; end; EAbZipInvalidLFH = class( EAbZipException ) public constructor Create; end; EAbZipInvalidMethod = class( EAbZipException ) public constructor Create; end; EAbZipInvalidPassword = class( EAbZipException ) public constructor Create; end; EAbZipInvalidStub= class( EAbZipException ) public constructor Create; end; EAbZipNoExtraction = class( EAbZipException ) public constructor Create; end; EAbZipNoInsertion = class( EAbZipException ) public constructor Create; end; EAbZipSpanOverwrite= class( EAbZipException ) public constructor Create; end; EAbZipStreamFull = class( EAbZipException ) public constructor Create; end; EAbZipTruncate = class( EAbZipException ) public constructor Create; end; EAbZipUnsupported = class( EAbZipException ) public constructor Create; end; EAbZipVersion = class( EAbZipException ) public constructor Create; end; EAbReadError = class( EAbZipException ) public constructor Create; end; EAbGzipBadCRC = class( EAbGZipException ) public constructor Create; end; EAbGzipBadFileSize = class( EAbGZipException ) public constructor Create; end; EAbGzipInvalid = class( EAbGZipException ) public constructor Create; end; EAbTarInvalid = class( EAbTarException) public constructor Create; end; EAbTarBadFileName = class( EAbTarException) public constructor Create; end; EAbTarBadLinkName = class( EAbTarException) public constructor Create; end; EAbTarBadOp = class( EAbTarException) public constructor Create; end; EAbVMSInvalidOrigin = class( EAbZipException ) public constructor Create( Value : Integer ); end; EAbVMSErrorOpenSwap = class( EAbZipException ) public constructor Create( const Value : string ); end; EAbVMSSeekFail = class( EAbZipException ) public constructor Create( const Value : string ); end; EAbVMSReadFail = class( EAbZipException ) public constructor Create( Count : Integer; const Value : string ); end; EAbVMSWriteFail = class( EAbZipException ) public constructor Create( Count : Integer; const Value : string ); end; EAbVMSWriteTooManyBytes = class( EAbZipException ) public constructor Create( Count : Integer ); end; EAbBBSReadTooManyBytes = class( EAbZipException ) public constructor Create(Count : Integer ); end; EAbBBSSeekOutsideBuffer = class( EAbZipException ) public constructor Create; end; EAbBBSInvalidOrigin = class( EAbZipException ) public constructor Create; end; EAbBBSWriteTooManyBytes = class( EAbZipException ) public constructor Create(Count : Integer ); end; EAbSWSNotEndofStream = class( EAbZipException ) public constructor Create; end; EAbSWSSeekFailed = class( EAbZipException ) public constructor Create; end; EAbSWSWriteFailed = class( EAbZipException ) public constructor Create; end; EAbSWSInvalidOrigin = class( EAbZipException ) public constructor Create; end; EAbSWSInvalidNewOrigin = class( EAbZipException ) public constructor Create; end; EAbNoCabinetDll = class( EAbCabException ) public constructor Create; end; EAbFCIFileOpenError = class( EAbCabException ) public constructor Create; end; EAbFCIFileReadError = class( EAbCabException ) public constructor Create; end; EAbFCIFileWriteError = class( EAbCabException ) public constructor Create; end; EAbFCIFileCloseError = class( EAbCabException ) public constructor Create; end; EAbFCIFileSeekError = class( EAbCabException ) public constructor Create; end; EAbFCIFileDeleteError = class( EAbCabException ) public constructor Create; end; EAbFCIAddFileError = class( EAbCabException ) public constructor Create; end; EAbFCICreateError = class( EAbCabException ) public constructor Create; end; EAbFCIFlushCabinetError = class( EAbCabException ) public constructor Create; end; EAbFCIFlushFolderError = class( EAbCabException ) public constructor Create; end; EAbFDICopyError = class( EAbCabException ) public constructor Create; end; EAbFDICreateError = class( EAbCabException ) public constructor Create; end; EAbInvalidCabTemplate = class( EAbCabException ) public constructor Create; end; EAbInvalidCabFile = class( EAbCabException ) public constructor Create; end; EAbFileTooLarge = class(EAbException) public constructor Create; end; procedure AbConvertException( const E : Exception; var eClass : TAbErrorClass; var eErrorCode : Integer ); implementation uses Classes, AbConst, AbResString; constructor EAbArchiveBusy.Create; begin inherited Create(AbArchiveBusyS); ErrorCode := AbArchiveBusy; end; constructor EAbBadStream.Create; begin inherited Create(AbBadStreamTypeS); FInnerException := nil; ErrorCode := AbBadStreamType; end; constructor EAbBadStream.CreateInner(aInnerException: Exception); begin inherited Create(AbBadStreamTypeS + #13#10 + aInnerException.Message); FInnerException := aInnerException; ErrorCode := AbBadStreamType; end; constructor EAbDuplicateName.Create; begin inherited Create(AbDuplicateNameS); ErrorCode := AbDuplicateName; end; constructor EAbNoSuchDirectory.Create; begin inherited Create(AbNoSuchDirectoryS); ErrorCode := AbNoSuchDirectory; end; constructor EAbInvalidSpanningThreshold.Create; begin inherited Create(AbInvalidThresholdS); ErrorCode := AbInvalidThreshold; end; constructor EAbFileNotFound.Create; begin inherited Create(AbFileNotFoundS); ErrorCode := AbFileNotFound; end; constructor EAbNoArchive.Create; begin inherited Create(AbNoArchiveS); ErrorCode := AbNoArchive; end; constructor EAbUserAbort.Create; begin inherited Create(AbUserAbortS); ErrorCode := AbUserAbort; end; constructor EAbZipBadSpanStream.Create; begin inherited Create(AbBadSpanStreamS); ErrorCode := AbBadSpanStream; end; constructor EAbZipBadCRC.Create; begin inherited Create(AbZipBadCRCS); ErrorCode := AbZipBadCRC; end; constructor EAbZipInflateBlock.Create; begin inherited Create(AbInflateBlockErrorS); ErrorCode := AbInflateBlockError; end; constructor EAbZipInvalid.Create; begin inherited Create(AbErrZipInvalidS); ErrorCode := AbErrZipInvalid; end; constructor EAbInvalidIndex.Create; begin inherited Create(AbInvalidIndexS); ErrorCode := AbInvalidIndex; end; constructor EAbZipInvalidFactor.Create; begin inherited Create(AbInvalidFactorS); ErrorCode := AbInvalidFactor; end; constructor EAbZipInvalidLFH.Create; begin inherited Create(AbInvalidLFHS); ErrorCode := AbInvalidLFH; end; constructor EAbZipInvalidMethod.Create; begin inherited Create(AbUnknownCompressionMethodS); ErrorCode := AbUnknownCompressionMethod; end; constructor EAbZipInvalidPassword.Create; begin inherited Create(AbInvalidPasswordS); ErrorCode := AbInvalidPassword; end; constructor EAbZipInvalidStub.Create; begin inherited Create(AbZipBadStubS); ErrorCode := AbZipBadStub; end; constructor EAbZipNoExtraction.Create; begin inherited Create(AbNoExtractionMethodS); ErrorCode := AbNoExtractionMethod; end; constructor EAbZipNoInsertion.Create; begin inherited Create(AbNoInsertionMethodS); ErrorCode := AbNoInsertionMethod; end; constructor EAbZipSpanOverwrite.Create; begin inherited Create(AbNoOverwriteSpanStreamS); ErrorCode := AbNoOverwriteSpanStream; end; constructor EAbZipStreamFull.Create; begin inherited Create(AbStreamFullS); ErrorCode := AbStreamFull; end; constructor EAbZipTruncate.Create; begin inherited Create(AbTruncateErrorS); ErrorCode := AbTruncateError; end; constructor EAbZipUnsupported.Create; begin inherited Create(AbUnsupportedCompressionMethodS); ErrorCode := AbUnsupportedCompressionMethod; end; constructor EAbZipVersion.Create; begin inherited Create(AbZipVersionNeededS); ErrorCode := AbZipVersionNeeded; end; constructor EAbReadError.Create; begin inherited Create(AbReadErrorS); ErrorCode := AbReadError; end; constructor EAbVMSInvalidOrigin.Create( Value : Integer ); begin inherited Create(Format(AbVMSInvalidOriginS, [Value])); ErrorCode := AbVMSInvalidOrigin; end; constructor EAbBBSReadTooManyBytes.Create(Count : Integer ); begin inherited Create(Format(AbBBSReadTooManyBytesS, [Count])); ErrorCode := AbBBSReadTooManyBytes; end; constructor EAbBBSSeekOutsideBuffer.Create; begin inherited Create(AbBBSSeekOutsideBufferS); ErrorCode := AbBBSSeekOutsideBuffer; end; constructor EAbBBSInvalidOrigin.Create; begin inherited Create(AbBBSInvalidOriginS); ErrorCode := AbBBSInvalidOrigin; end; constructor EAbBBSWriteTooManyBytes.Create(Count : Integer); begin inherited Create(Format(AbBBSWriteTooManyBytesS, [Count])); ErrorCode := AbBBSWriteTooManyBytes; end; constructor EAbVMSErrorOpenSwap.Create( const Value : string ); begin inherited Create(Format(AbVMSErrorOpenSwapS, [Value])); ErrorCode := AbVMSErrorOpenSwap; end; constructor EAbVMSSeekFail.Create( const Value : string ); begin inherited Create(Format(AbVMSSeekFailS, [Value])); ErrorCode := AbVMSSeekFail; end; constructor EAbVMSReadFail.Create( Count : Integer; const Value : string ); begin inherited Create(Format(AbVMSReadFailS, [Count, Value])); ErrorCode := AbVMSReadFail; end; constructor EAbVMSWriteFail.Create( Count : Integer; const Value : string ); begin inherited Create(Format(AbVMSWriteFailS, [Count, Value])); ErrorCode := AbVMSWriteFail; end; constructor EAbVMSWriteTooManyBytes.Create( Count : Integer ); begin inherited Create(Format(AbVMSWriteTooManyBytesS, [Count])); ErrorCode := AbVMSWriteTooManyBytes; end; constructor EAbSWSNotEndofStream.Create; begin inherited Create(AbSWSNotEndofStreamS); ErrorCode := AbSWSNotEndofStream; end; constructor EAbSWSSeekFailed.Create; begin inherited Create(AbSWSSeekFailedS); ErrorCode := AbSWSSeekFailed; end; constructor EAbSWSWriteFailed.Create; begin inherited Create(AbSWSWriteFailedS); ErrorCode := AbSWSWriteFailed; end; constructor EAbSWSInvalidOrigin.Create; begin inherited Create(AbSWSInvalidOriginS); ErrorCode := AbSWSInvalidOrigin; end; constructor EAbSWSInvalidNewOrigin.Create; begin inherited Create(AbSWSInvalidNewOriginS); ErrorCode := AbSWSInvalidNewOrigin; end; constructor EAbFCIFileOpenError.Create; begin inherited Create(AbFCIFileOpenErrorS); ErrorCode := AbFCIFileOpenError; end; constructor EAbNoCabinetDll.Create; begin inherited Create(AbNoCabinetDllErrorS); ErrorCode := AbNoCabinetDllError; end; constructor EAbFCIFileReadError.Create; begin inherited Create(AbFCIFileReadErrorS); ErrorCode := AbFCIFileReadError; end; constructor EAbFCIFileWriteError.Create; begin inherited Create(AbFCIFileWriteErrorS); ErrorCode := AbFCIFileWriteError; end; constructor EAbFCIFileCloseError.Create; begin inherited Create(AbFCIFileCloseErrorS); ErrorCode := AbFCIFileCloseError; end; constructor EAbFCIFileSeekError.Create; begin inherited Create(AbFCIFileSeekErrorS); ErrorCode := AbFCIFileSeekError; end; constructor EAbFCIFileDeleteError.Create; begin inherited Create(AbFCIFileDeleteErrorS); ErrorCode := AbFCIFileDeleteError; end; constructor EAbFCIAddFileError.Create; begin inherited Create(AbFCIAddFileErrorS); ErrorCode := AbFCIAddFileError; end; constructor EAbFCICreateError.Create; begin inherited Create(AbFCICreateErrorS); ErrorCode := AbFCICreateError; end; constructor EAbFCIFlushCabinetError.Create; begin inherited Create(AbFCIFlushCabinetErrorS); ErrorCode := AbFCIFlushCabinetError; end; constructor EAbFCIFlushFolderError.Create; begin inherited Create(AbFCIFlushFolderErrorS); ErrorCode := AbFCIFlushFolderError; end; constructor EAbFDICopyError.Create; begin inherited Create(AbFDICopyErrorS); ErrorCode := AbFDICopyError; end; constructor EAbFDICreateError.Create; begin inherited Create(AbFDICreateErrorS); ErrorCode := AbFDICreateError; end; constructor EAbInvalidCabTemplate.Create; begin inherited Create(AbInvalidCabTemplateS); ErrorCode := AbInvalidCabTemplate; end; constructor EAbInvalidCabFile.Create; begin inherited Create(AbInvalidCabFileS); ErrorCode := AbInvalidCabFile; end; procedure AbConvertException( const E : Exception; var eClass : TAbErrorClass; var eErrorCode : Integer ); begin eClass := ecOther; eErrorCode := 0; if E is EAbException then begin eClass := ecAbbrevia; eErrorCode := (E as EAbException).ErrorCode; end else if E is EInOutError then begin eClass := ecInOutError; eErrorCode := (E as EInOutError).ErrorCode; end else if E is EFilerError then eClass := ecFilerError else if E is EFOpenError then eClass := ecFileOpenError else if E is EFCreateError then eClass := ecFileCreateError; end; { EAbUnhandledType } constructor EAbUnhandledType.Create; begin inherited Create(AbUnhandledFileTypeS); ErrorCode := AbUnhandledFileType; end; { EAbGzipBadCRC } constructor EAbGzipBadCRC.Create; begin inherited Create(AbGzipBadCRCS); ErrorCode := AbGzipBadCRC; end; { EAbGzipBadFileSize } constructor EAbGzipBadFileSize.Create; begin inherited Create(AbGzipBadFileSizeS); ErrorCode := AbGzipBadFileSize; end; { EAbGzipInvalid } constructor EAbGzipInvalid.Create; begin inherited Create(AbSpanningNotSupportedS); ErrorCode := AbSpanningNotSupported; end; { EAbTarInvalid } constructor EAbTarInvalid.Create; begin inherited Create(AbTarInvalidS); ErrorCode := AbTarInvalid; end; { EAbTarBadFileName } constructor EAbTarBadFileName.Create; begin inherited Create(AbTarBadFileNameS); ErrorCode := AbTarBadFileName; end; { EAbTarBadLinkName } constructor EAbTarBadLinkName.Create; begin inherited Create(AbTarBadLinkNameS); ErrorCode := AbTarBadLinkName; end; { EAbTarBadOp } constructor EAbTarBadOp.Create; begin inherited Create(AbTarBadOpS); ErrorCode := AbTarBadOp; end; { EAbSpanningNotSupported } constructor EAbSpanningNotSupported.Create; begin inherited Create(AbSpanningNotSupportedS); ErrorCode := AbSpanningNotSupported; end; { EAbFileTooLarge } constructor EAbFileTooLarge.Create; begin {TODO Create const and fix wording} inherited Create(AbFileSizeTooBigS); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abdfcrys.pas0000644000175000001440000004536715104114162022730 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfCryS.pas *} {*********************************************************} {* Deflate encryption streams *} {*********************************************************} unit AbDfCryS; {$I AbDefine.inc} interface uses Classes; type TAbZipEncryptHeader = array [0..11] of byte; TAbZipDecryptEngine = class private FReady : boolean; FState : array [0..2] of longint; protected procedure zdeInitState(const aPassphrase : AnsiString); public constructor Create; function Decode(aCh : byte) : byte; {-decodes a byte} procedure DecodeBuffer(var aBuffer; aCount : integer); {-decodes a buffer} function VerifyHeader(const aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint) : boolean; {-validate an encryption header} end; TAbDfDecryptStream = class(TStream) private FCheckValue : longint; FEngine : TAbZipDecryptEngine; FOwnsStream : Boolean; FPassphrase : AnsiString; FReady : boolean; FStream : TStream; protected public constructor Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); destructor Destroy; override; function IsValid : boolean; function Read(var aBuffer; aCount : longint) : longint; override; function Seek(aOffset : longint; aOrigin : word) : longint; override; function Write(const aBuffer; aCount : longint) : longint; override; property OwnsStream : Boolean read FOwnsStream write FOwnsStream; end; TAbZipEncryptEngine = class private FReady : boolean; FState : array [0..2] of longint; protected procedure zeeInitState(const aPassphrase : AnsiString); public constructor Create; function Encode(aCh : byte) : byte; {-encodes a byte} procedure EncodeBuffer(var aBuffer; aCount : integer); {-encodes a buffer} procedure CreateHeader(var aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint); {-generate an encryption header} end; TAbDfEncryptStream = class(TStream) private FBuffer : PAnsiChar; FBufSize : integer; FEngine : TAbZipEncryptEngine; FStream : TStream; protected public constructor Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); destructor Destroy; override; function Read(var aBuffer; aCount : longint) : longint; override; function Seek(aOffset : longint; aOrigin : word) : longint; override; function Write(const aBuffer; aCount : longint) : longint; override; end; implementation {Notes: the ZIP spec defines a couple of primitive routines for performing encryption. For speed Abbrevia inlines them into the respective methods of the encryption/decryption engines char crc32(long,char) return updated CRC from current CRC and next char update_keys(char): Key(0) <- crc32(key(0),char) Key(1) <- Key(1) + (Key(0) & 000000ffH) Key(1) <- Key(1) * 134775813 + 1 Key(2) <- crc32(key(2),key(1) >> 24) end update_keys char decrypt_byte() local unsigned short temp temp <- Key(2) | 2 decrypt_byte <- (temp * (temp ^ 1)) >> 8 end decrypt_byte } uses AbUtils; {---magic numbers from ZIP spec---} const StateInit1 = 305419896; StateInit2 = 591751049; StateInit3 = 878082192; MagicNumber = 134775813; {===internal encryption class========================================} constructor TAbZipDecryptEngine.Create; begin {create the ancestor} inherited Create; {we're not ready for decryption yet since a header hasn't been properly verified with VerifyHeader} FReady := false; end; {--------} function TAbZipDecryptEngine.Decode(aCh : byte) : byte; var Temp : longint; begin {check for programming error} Assert(FReady, 'TAbZipDecryptEngine.Decode: must successfully call VerifyHeader first'); {calculate the decoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Result := aCh xor ((Temp * (Temp xor 1)) shr 8); {mix the decoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(Result, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {--------} procedure TAbZipDecryptEngine.DecodeBuffer(var aBuffer; aCount : integer); var i : integer; Temp : longint; Buffer : PAnsiChar; WorkState : array [0..2] of longint; begin {check for programming error} Assert(FReady, 'TAbZipDecryptEngine.Decode: must successfully call VerifyHeader first'); {move the state to a local variable--for better speed} WorkState[0] := FState[0]; WorkState[1] := FState[1]; WorkState[2] := FState[2]; {reference the buffer as a PChar--easier arithmetic} Buffer := @aBuffer; {for each byte in the buffer...} for i := 0 to pred(aCount) do begin {calculate the next decoded byte (uses inlined decrypt_byte)} Temp := (WorkState[2] and $FFFF) or 2; Buffer^ := AnsiChar( byte(Buffer^) xor ((Temp * (Temp xor 1)) shr 8)); {mix the decoded byte into the state (uses inlined update_keys)} WorkState[0] := AbUpdateCrc32(byte(Buffer^), WorkState[0]); WorkState[1] := WorkState[1] + (WorkState[0] and $FF); WorkState[1] := (WorkState[1] * MagicNumber) + 1; WorkState[2] := AbUpdateCrc32(WorkState[1] shr 24, WorkState[2]); {move onto the next byte} inc(Buffer); end; {save the state} FState[0] := WorkState[0]; FState[1] := WorkState[1]; FState[2] := WorkState[2]; end; {--------} function TAbZipDecryptEngine.VerifyHeader(const aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint) : boolean; type TLongAsBytes = packed record L1, L2, L3, L4 : byte end; var i : integer; Temp : longint; WorkHeader : TAbZipEncryptHeader; begin {check for programming errors} Assert(aPassphrase <> '', 'TAbZipDecryptEngine.VerifyHeader: need a passphrase'); {initialize the decryption state} zdeInitState(aPassphrase); {decrypt the bytes in the header} for i := 0 to 11 do begin {calculate the next decoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; WorkHeader[i] := aHeader[i] xor ((Temp * (Temp xor 1)) shr 8); {mix the decoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(WorkHeader[i], FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {the header is valid if the twelfth byte of the decrypted header equals the fourth byte of the check value} Result := WorkHeader[11] = TLongAsBytes(aCheckValue).L4; {note: zips created with PKZIP prior to version 2.0 also checked that the tenth byte of the decrypted header equals the third byte of the check value} FReady := Result; end; {--------} procedure TAbZipDecryptEngine.zdeInitState(const aPassphrase : AnsiString); var i : integer; begin {initialize the decryption state} FState[0] := StateInit1; FState[1] := StateInit2; FState[2] := StateInit3; {mix in the passphrase to the state (uses inlined update_keys)} for i := 1 to length(aPassphrase) do begin FState[0] := AbUpdateCrc32(byte(aPassphrase[i]), FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; end; {====================================================================} {====================================================================} constructor TAbDfDecryptStream.Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); begin {create the ancestor} inherited Create; {save the parameters} FStream := aStream; FCheckValue := aCheckValue; FPassphrase := aPassphrase; {create the decryption engine} FEngine := TAbZipDecryptEngine.Create; end; {--------} destructor TAbDfDecryptStream.Destroy; {new !!.02} begin FEngine.Free; if FOwnsStream then FStream.Free; inherited Destroy; end; {--------} function TAbDfDecryptStream.IsValid : boolean; var Header : TAbZipEncryptHeader; begin {read the header from the stream} FStream.ReadBuffer(Header, sizeof(Header)); {check to see if the decryption engine agrees it's valid} Result := FEngine.VerifyHeader(Header, FPassphrase, FCheckValue); {if it isn't valid, reposition the stream, ready for the next try} if not Result then begin FStream.Seek(-sizeof(Header), soCurrent); FReady := false; end {otherwise, the stream is ready for decrypting data} else FReady := true; end; {--------} function TAbDfDecryptStream.Read(var aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(FReady, 'TAbDfDecryptStream.Read: the stream header has not been verified'); {read the data from the underlying stream} Result := FStream.Read(aBuffer, aCount); {decrypt the data} FEngine.DecodeBuffer(aBuffer, Result); end; {--------} function TAbDfDecryptStream.Seek(aOffset : longint; aOrigin : word) : longint; begin Result := FStream.Seek(aOffset, aOrigin); end; {--------} function TAbDfDecryptStream.Write(const aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(false, 'TAbDfDecryptStream.Write: the stream is read-only'); Result := 0; end; {====================================================================} {===TAbZipEncryptEngine==============================================} constructor TAbZipEncryptEngine.Create; begin {create the ancestor} inherited Create; {we're not ready for encryption yet since a header hasn't been properly generated with CreateHeader} FReady := false; end; {--------} procedure TAbZipEncryptEngine.CreateHeader( var aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint); type TLongAsBytes = packed record L1, L2, L3, L4 : byte end; var Ch : byte; i : integer; Temp : longint; WorkHeader : TAbZipEncryptHeader; begin {check for programming errors} Assert(aPassphrase <> '', 'TAbZipEncryptEngine.CreateHeader: need a passphrase'); {set the first ten bytes of the header with random values (in fact, we use a random value for each byte and mix it in with the state)} {initialize the decryption state} zeeInitState(aPassphrase); {for the first ten bytes...} for i := 0 to 9 do begin {get a random value} Ch := Random( 256 ); {calculate the XOR encoding byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); {set the current byte of the header} WorkHeader[i] := Ch xor Temp; end; {now encrypt the first ten bytes of the header (this merely sets up the state so that we can encrypt the last two bytes)} {reinitialize the decryption state} zeeInitState(aPassphrase); {for the first ten bytes...} for i := 0 to 9 do begin {calculate the XOR encoding byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(WorkHeader[i], FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); {set the current byte of the header} WorkHeader[i] := WorkHeader[i] xor Temp; end; {now initialize byte 10 of the header, and encrypt it} Ch := TLongAsBytes(aCheckValue).L3; Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); WorkHeader[10] := Ch xor Temp; {now initialize byte 11 of the header, and encrypt it} Ch := TLongAsBytes(aCheckValue).L4; Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); WorkHeader[11] := Ch xor Temp; {we're now ready to encrypt} FReady := true; {return the header} aHeader := WorkHeader; end; {--------} function TAbZipEncryptEngine.Encode(aCh : byte) : byte; var Temp : longint; begin {check for programming error} Assert(FReady, 'TAbZipEncryptEngine.Encode: must call CreateHeader first'); {calculate the encoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Result := aCh xor (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(aCh, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {--------} procedure TAbZipEncryptEngine.EncodeBuffer(var aBuffer; aCount : integer); var Ch : byte; i : integer; Temp : longint; Buffer : PAnsiChar; WorkState : array [0..2] of longint; begin {check for programming error} Assert(FReady, 'TAbZipEncryptEngine.EncodeBuffer: must call CreateHeader first'); {move the state to a local variable--for better speed} WorkState[0] := FState[0]; WorkState[1] := FState[1]; WorkState[2] := FState[2]; {reference the buffer as a PChar--easier arithmetic} Buffer := @aBuffer; {for each byte in the buffer...} for i := 0 to pred(aCount) do begin {calculate the next encoded byte (uses inlined decrypt_byte)} Temp := (WorkState[2] and $FFFF) or 2; Ch := byte(Buffer^); Buffer^ := AnsiChar(Ch xor ((Temp * (Temp xor 1)) shr 8)); {mix the decoded byte into the state (uses inlined update_keys)} WorkState[0] := AbUpdateCrc32(Ch, WorkState[0]); WorkState[1] := WorkState[1] + (WorkState[0] and $FF); WorkState[1] := (WorkState[1] * MagicNumber) + 1; WorkState[2] := AbUpdateCrc32(WorkState[1] shr 24, WorkState[2]); {move onto the next byte} inc(Buffer); end; {save the state} FState[0] := WorkState[0]; FState[1] := WorkState[1]; FState[2] := WorkState[2]; end; {--------} procedure TAbZipEncryptEngine.zeeInitState(const aPassphrase : AnsiString); var i : integer; begin {initialize the decryption state} FState[0] := StateInit1; FState[1] := StateInit2; FState[2] := StateInit3; {mix in the passphrase to the state (uses inlined update_keys)} for i := 1 to length(aPassphrase) do begin FState[0] := AbUpdateCrc32(byte(aPassphrase[i]), FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; end; {====================================================================} {===TAbDfEncryptStream===============================================} constructor TAbDfEncryptStream.Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); var Header : TAbZipEncryptHeader; begin {create the ancestor} inherited Create; {save the stream parameter} FStream := aStream; {create the encryption engine} FEngine := TAbZipEncryptEngine.Create; {generate the encryption header, write it to the stream} FEngine.CreateHeader(Header, aPassphrase, aCheckValue); aStream.WriteBuffer(Header, sizeof(Header)); end; {--------} destructor TAbDfEncryptStream.Destroy; begin {free the internal buffer if used} if (FBuffer <> nil) then FreeMem(FBuffer); {free the engine} FEngine.Free; {destroy the ancestor} inherited Destroy; end; {--------} function TAbDfEncryptStream.Read(var aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(false, 'TAbDfEncryptStream.Read: the stream is write-only'); Result := 0; end; {--------} function TAbDfEncryptStream.Seek(aOffset : longint; aOrigin : word) : longint; begin Result := FStream.Seek(aOffset, aOrigin); end; {--------} function TAbDfEncryptStream.Write(const aBuffer; aCount : longint) : longint; begin {note: since we cannot alter a const parameter, we should copy the data to our own buffer, encrypt it and then write it} {check that our buffer is large enough} if (FBufSize < aCount) then begin if (FBuffer <> nil) then FreeMem(FBuffer); GetMem(FBuffer, aCount); FBufSize := aCount; end; {copy the data to our buffer} Move(aBuffer, FBuffer^, aCount); {encrypt the data in our buffer} FEngine.EncodeBuffer(FBuffer^, aCount); {write the data in our buffer to the underlying stream} Result := FStream.Write(FBuffer^, aCount); end; {====================================================================} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abdfbase.pas0000644000175000001440000005631515104114162022655 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfBase.pas *} {*********************************************************} {* Deflate base unit *} {*********************************************************} unit AbDfBase; {$I AbDefine.inc} interface uses SysUtils, Classes; type PAbDfLongintList = ^TAbDfLongintList; TAbDfLongintList = array [0..pred(MaxInt div sizeof(longint))] of longint; const dfc_CodeLenCodeLength = 7; dfc_LitDistCodeLength = 15; dfc_MaxCodeLength = 15; const dfc_MaxMatchLen = 258; {lengths are 3..258 for deflate} dfc_MaxMatchLen64 = 64 * 1024; {lengths are 3..65536 for deflate64} const dfc_LitExtraOffset = 257; dfc_LitExtraBits : array [0..30] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16, 99, 99); { note: the last two are required to avoid going beyond the end} { of the array when generating static trees} dfc_DistExtraOffset = 0; dfc_DistExtraBits : array [0..31] of byte = (0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14); { note: the last two are only use for deflate64} dfc_LengthBase : array [0..28] of word = (3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3); { note: the final 3 is correct for deflate64; for symbol 285,} { lengths are stored as (length - 3)} { for deflate it's very wrong, but there's special code in} { the (de)compression code to cater for this} dfc_DistanceBase : array [0..31] of word = (1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153); dfc_CodeLengthIndex : array [0..18] of byte = (16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); const dfc_CanUseStored = $01; dfc_CanUseStatic = $02; dfc_CanUseDynamic = $04; dfc_UseLazyMatch = $08; dfc_UseDeflate64 = $10; dfc_UseAdler32 = $20; dfc_CanUseHuffman = dfc_CanUseStatic or dfc_CanUseDynamic; dfc_TestOnly = $40000000; type TAbProgressStep = procedure (aPercentDone : integer) of object; {-progress metering of deflate/inflate; abort with AbortProgress} TAbDeflateHelper = class private FAmpleLength : longint; FChainLength : longint; FLogFile : string; FMaxLazy : longint; FOnProgressStep : TAbProgressStep; FOptions : longint; FPartSize : Int64; FSizeCompressed : Int64; FSizeNormal : Int64; FStreamSize : Int64; FWindowSize : longint; FZipOption : AnsiChar; protected procedure dhSetAmpleLength(aValue : longint); procedure dhSetChainLength(aValue : longint); procedure dhSetLogFile(const aValue : string); procedure dhSetMaxLazy(aValue : longint); procedure dhSetOnProgressStep(aValue : TAbProgressStep); procedure dhSetOptions(aValue : longint); procedure dhSetWindowSize(aValue : longint); procedure dhSetZipOption(aValue : AnsiChar); public constructor Create; procedure Assign(aHelper : TAbDeflateHelper); property AmpleLength : longint read FAmpleLength write dhSetAmpleLength; property ChainLength : longint read FChainLength write dhSetChainLength; property LogFile : string read FLogFile write dhSetLogFile; property MaxLazyLength : longint read FMaxLazy write dhSetMaxLazy; property Options : longint read FOptions write dhSetOptions; property PartialSize : Int64 read FPartSize write FPartSize; property PKZipOption : AnsiChar read FZipOption write dhSetZipOption; property StreamSize : Int64 read FStreamSize write FStreamSize; property WindowSize : longint read FWindowSize write dhSetWindowSize; property CompressedSize : Int64 read FSizeCompressed write FSizeCompressed; property NormalSize : Int64 read FSizeNormal write FSizeNormal; property OnProgressStep : TAbProgressStep read FOnProgressStep write dhSetOnProgressStep; end; type TAbLineDelimiter = (ldCRLF, ldLF); TAbLogger = class(TStream) private FBuffer : PAnsiChar; FCurPos : PAnsiChar; FLineDelim : TAbLineDelimiter; FStream : TFileStream; protected function logWriteBuffer : boolean; public constructor Create(const aLogName : string); destructor Destroy; override; function Read(var Buffer; Count : longint) : longint; override; function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; function Write(const Buffer; Count : longint) : longint; override; procedure WriteLine(const S : string); procedure WriteStr(const S : string); property LineDelimiter : TAbLineDelimiter read FLineDelim write FLineDelim; end; type TAbNodeManager = class private FFreeList : pointer; FNodeSize : cardinal; FNodesPerPage : cardinal; FPageHead : pointer; FPageSize : cardinal; protected function nmAllocNewPage : pointer; public constructor Create(aNodeSize : cardinal); destructor Destroy; override; function AllocNode : pointer; function AllocNodeClear : pointer; procedure FreeNode(aNode : pointer); end; {---exception classes---} type EAbAbortProgress = class(Exception); EAbPartSizedInflate = class(Exception); EAbInflatePasswordError = class(Exception); EAbInternalInflateError = class(Exception); EAbInflateError = class(Exception) public constructor Create(const aMsg : string); constructor CreateUnknown(const aMsg : string; const aErrorMsg : string); end; EAbInternalDeflateError = class(Exception); EAbDeflateError = class(Exception) public constructor Create(const aMsg : string); constructor CreateUnknown(const aMsg : string; const aErrorMsg : string); end; {---aborting a process---} procedure AbortProgress; {---calculation of checksums---} procedure AbUpdateAdlerBuffer(var aAdler : longint; var aBuffer; aCount : integer); procedure AbUpdateCRCBuffer(var aCRC : longint; var aBuffer; aCount : integer); implementation uses AbUtils; {===TAbDeflateHelper=================================================} constructor TAbDeflateHelper.Create; begin inherited Create; FAmpleLength := 8; FChainLength := 32; {FLogFile := '';} FMaxLazy := 16; {FOnProgressStep := nil;} FOptions := $F; {FStreamSize := 0;} FWindowSize := 32 * 1024; FZipOption := 'n'; end; {--------} procedure TAbDeflateHelper.Assign(aHelper : TAbDeflateHelper); begin FAmpleLength := aHelper.FAmpleLength; FChainLength := aHelper.FChainLength; FLogFile := aHelper.FLogFile; FMaxLazy := aHelper.FMaxLazy; FOnProgressStep := aHelper.FOnProgressStep; FOptions := aHelper.FOptions; FPartSize := aHelper.FPartSize; FStreamSize := aHelper.FStreamSize; FWindowSize := aHelper.FWindowSize; FZipOption := aHelper.FZipOption; end; {--------} procedure TAbDeflateHelper.dhSetAmpleLength(aValue : longint); begin if (aValue <> AmpleLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FAmpleLength := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetChainLength(aValue : longint); begin if (aValue <> ChainLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FChainLength := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetLogFile(const aValue : string); begin FLogFile := aValue; end; {--------} procedure TAbDeflateHelper.dhSetMaxLazy(aValue : longint); begin if (aValue <> MaxLazyLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FMaxLazy := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetOnProgressStep(aValue : TAbProgressStep); begin FOnProgressStep := aValue; end; {--------} procedure TAbDeflateHelper.dhSetOptions(aValue : longint); begin if (aValue <> Options) then begin FOptions := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetWindowSize(aValue : longint); var NewValue : longint; begin if (aValue <> WindowSize) then begin {calculate the window size rounded to nearest 1024 bytes} NewValue := ((aValue + 1023) div 1024) * 1024; {if the new window size is greater than 32KB...} if (NewValue > 32 * 1024) then {if the Deflate64 option is set, force to 64KB} if ((Options and dfc_UseDeflate64) <> 0) then NewValue := 64 * 1024 {otherwise, force to 32KB} else NewValue := 32 * 1024; {set the new window size} FWindowSize := NewValue; end; end; {--------} procedure TAbDeflateHelper.dhSetZipOption(aValue : AnsiChar); begin {notes: The original Abbrevia code used the following table for setting the equivalent values: Good Lazy Chain UseLazy Option 4 4 4 N s ^ 4 5 8 N | 4 6 32 N f faster 4 4 16 Y slower 8 16 32 Y n | 8 16 128 Y | 8 32 256 Y | 32 128 1024 Y | 32 258 4096 Y x V The new Abbrevia 3 code follows these values to a certain extent. } {force to lower case} if ('A' <= aValue) and (aValue <= 'Z') then aValue := AnsiChar(ord(aValue) + ord('a') - ord('A')); {if the value has changed...} if (aValue <> PKZipOption) then begin {switch on the new value...} case aValue of '0' : {no compression} begin FZipOption := aValue; FOptions := (FOptions and (not $0F)) or dfc_CanUseStored; FAmpleLength := 8; { not actually needed} FChainLength := 32; { not actually needed} FMaxLazy := 16; { not actually needed} end; '2' : {hidden option: Abbrevia 2 compatibility} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 8; FChainLength := 32; FMaxLazy := 16; end; 'f' : {fast compression} begin FZipOption := aValue; FOptions := FOptions or $07; { no lazy matching} FAmpleLength := 4; FChainLength := 32; FMaxLazy := 6; end; 'n' : {normal compression} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 16; FChainLength := 32; FMaxLazy := 24; end; 's' : {super fast compression} begin FZipOption := aValue; FOptions := FOptions or $07; { no lazy matching} FAmpleLength := 4; FChainLength := 4; FMaxLazy := 4; end; 'x' : {maximum compression} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 64;{32;} FChainLength := 4096; FMaxLazy := 258; end; end; end; end; {====================================================================} {===TAbLogger========================================================} const LogBufferSize = 4096; {--------} constructor TAbLogger.Create(const aLogName : string); begin Assert(aLogName <> '', 'TAbLogger.Create: a filename must be provided for the logger'); {create the ancestor} inherited Create; {set the default line terminator} {$IFDEF MSWINDOWS} FLineDelim := ldCRLF; {$ENDIF} {$IFDEF UNIX} FLineDelim := ldLF; {$ENDIF} {create and initialize the buffer} GetMem(FBuffer, LogBufferSize); FCurPos := FBuffer; {create the log file} FStream := TFileStream.Create(aLogName, fmCreate); end; {--------} destructor TAbLogger.Destroy; begin {if there is a buffer ensure that it is flushed before freeing it} if (FBuffer <> nil) then begin if (FCurPos <> FBuffer) then logWriteBuffer; FreeMem(FBuffer, LogBufferSize); end; {free the stream} FStream.Free; {destroy the ancestor} inherited Destroy; end; {--------} function TAbLogger.logWriteBuffer : boolean; var BytesToWrite : longint; BytesWritten : longint; begin BytesToWrite := FCurPos - FBuffer; BytesWritten := FStream.Write(FBuffer^, BytesToWrite); if (BytesWritten = BytesToWrite) then begin Result := true; FCurPos := FBuffer; end else begin Result := false; if (BytesWritten <> 0) then begin Move(FBuffer[BytesWritten], FBuffer^, BytesToWrite - BytesWritten); FCurPos := FBuffer + (BytesToWrite - BytesWritten); end; end; end; {--------} function TAbLogger.Read(var Buffer; Count : longint) : longint; begin Assert(false, 'TAbLogger.Read: loggers are write-only, no reading allowed'); Result := 0; end; {--------} function TAbLogger.Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; begin case Origin of soBeginning : begin end; soCurrent : if (Offset = 0) then begin Result := FStream.Position + (FCurPos - FBuffer); Exit; end; soEnd : if (Offset = 0) then begin Result := FStream.Position + (FCurPos - FBuffer); Exit; end; end; Assert(false, 'TAbLogger.Seek: loggers are write-only, no seeking allowed'); Result := 0; end; {--------} function TAbLogger.Write(const Buffer; Count : longint) : longint; var UserBuf : PAnsiChar; BytesToGo : longint; BytesToWrite : longint; begin {reference the user's buffer as a PChar} UserBuf := @Buffer; {start the counter for the number of bytes written} Result := 0; {if needed, empty the internal buffer into the underlying stream} if (LogBufferSize = FCurPos - FBuffer) then if not logWriteBuffer then Exit; {calculate the number of bytes to copy this time from the user's buffer to the internal buffer} BytesToGo := Count; BytesToWrite := LogBufferSize - (FCurPos - FBuffer); if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy the bytes} Move(UserBuf^, FCurPos^, BytesToWrite); {adjust the counters} inc(FCurPos, BytesToWrite); dec(BytesToGo, BytesToWrite); inc(Result, BytesToWrite); {while there are still more bytes to copy, do so} while (BytesToGo <> 0) do begin {advance the user's buffer} inc(UserBuf, BytesToWrite); {empty the internal buffer into the underlying stream} if not logWriteBuffer then Exit; {calculate the number of bytes to copy this time from the user's buffer to the internal buffer} BytesToWrite := LogBufferSize; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy the bytes} Move(UserBuf^, FCurPos^, BytesToWrite); {adjust the counters} inc(FCurPos, BytesToWrite); dec(BytesToGo, BytesToWrite); inc(Result, BytesToWrite); end; end; {--------} procedure TAbLogger.WriteLine(const S : string); const cLF : AnsiChar = ^J; cCRLF : array [0..1] of AnsiChar = ^M^J; begin if (length(S) > 0) then Write(S[1], length(S)); case FLineDelim of ldLF : Write(cLF, sizeof(cLF)); ldCRLF : Write(cCRLF, sizeof(cCRLF)); end; end; {--------} procedure TAbLogger.WriteStr(const S : string); begin if (length(S) > 0) then Write(S[1], length(S)); end; {====================================================================} {===Calculate checksums==============================================} procedure AbUpdateAdlerBuffer(var aAdler : longint; var aBuffer; aCount : integer); var S1 : LongWord; S2 : LongWord; i : integer; Buffer : PAnsiChar; BytesToUse : integer; begin {Note: this algorithm will *only* work if the buffer is 4KB or less, which is why we go to such lengths to chop up the user buffer into usable chunks of 4KB. However, for Delphi 3 there is no proper 32-bit longword. Although the additions pose no problems in this situation, the mod operations below (especially for S2) will be signed integer divisions, producing an (invalid) signed result. In this case, the buffer is chopped up into 2KB chunks to avoid any signed problems.} {split the current Adler checksum into its halves} S1 := LongWord(aAdler) and $FFFF; S2 := LongWord(aAdler) shr 16; {reference the user buffer as a PChar: it makes it easier} Buffer := @aBuffer; {while there's still data to checksum...} while (aCount <> 0) do begin {calculate the number of bytes to checksum this time} {$IFDEF HasLongWord} BytesToUse := 4096; {$ELSE} BytesToUse := 2048; {$ENDIF} if (BytesToUse > aCount) then BytesToUse := aCount; {checksum the bytes} for i := 0 to pred(BytesToUse) do begin inc(S1, ord(Buffer^)); inc(S2, S1); inc(Buffer); end; {recalibrate the Adler checksum halves} S1 := S1 mod 65521; S2 := S2 mod 65521; {calculate the number of bytes still to go} dec(aCount, BytesToUse); end; {join the halves to produce the complete Adler checksum} aAdler := longint((S2 shl 16) or S1); end; {--------} procedure AbUpdateCRCBuffer(var aCRC : longint; var aBuffer; aCount : integer); var i : integer; CRC : LongWord; Buffer : PAnsiChar; begin {$R-}{$Q-} {reference the user buffer as a PChar: it makes it easier} Buffer := @aBuffer; {get the current CRC as a local variable, it's faster} CRC := aCRC; {checksum the bytes in the buffer} for i := 0 to pred(aCount) do begin CRC := AbCrc32Table[byte(CRC) xor byte(Buffer^)] xor (CRC shr 8); inc(Buffer); end; {return the new CRC} aCRC := CRC; {$R+}{$Q+} end; {====================================================================} {===EAbInflateError==================================================} constructor EAbInflateError.Create(const aMsg : string); begin inherited Create( 'Abbrevia inflate error, possibly a corrupted compressed stream. ' + '(Internal cause: ' + aMsg + ')'); end; {--------} constructor EAbInflateError.CreateUnknown(const aMsg : string; const aErrorMsg : string); begin inherited Create(aMsg + ': ' + aErrorMsg); end; {====================================================================} {===EAbDeflateError==================================================} constructor EAbDeflateError.Create(const aMsg : string); begin inherited Create( 'Abbrevia deflate error. ' + '(Internal cause: ' + aMsg + ')'); end; {--------} constructor EAbDeflateError.CreateUnknown(const aMsg : string; const aErrorMsg : string); begin inherited Create(aMsg + ': ' + aErrorMsg); end; {====================================================================} {===Node manager=====================================================} const PageSize = 8 * 1024; type PGenericNode = ^TGenericNode; TGenericNode = packed record gnNext : PGenericNode; gnData : record end; end; {--------} constructor TAbNodeManager.Create(aNodeSize : cardinal); const Gran = sizeof(pointer); Mask = not (Gran - 1); begin {create the ancestor} inherited Create; {save the node size rounded to nearest 4 bytes} if (aNodeSize <= sizeof(pointer)) then aNodeSize := sizeof(pointer) else aNodeSize := (aNodeSize + Gran - 1) and Mask; FNodeSize := aNodeSize; {calculate the page size (default 1024 bytes) and the number of nodes per page; if the default page size is not large enough for two or more nodes, force a single node per page} FNodesPerPage := (PageSize - sizeof(pointer)) div aNodeSize; if (FNodesPerPage > 1) then FPageSize := PageSize else begin FNodesPerPage := 1; FPagesize := aNodeSize + sizeof(pointer); end; end; {--------} destructor TAbNodeManager.Destroy; var Temp : pointer; begin {dispose of all the pages, if there are any} while (FPageHead <> nil) do begin Temp := PGenericNode(FPageHead)^.gnNext; FreeMem(FPageHead, FPageSize); FPageHead := Temp; end; {destroy the ancestor} inherited Destroy; end; {--------} function TAbNodeManager.AllocNode : pointer; begin Result := FFreeList; if (Result = nil) then Result := nmAllocNewPage else FFreeList := PGenericNode(Result)^.gnNext; end; {--------} function TAbNodeManager.AllocNodeClear : pointer; begin Result := FFreeList; if (Result = nil) then Result := nmAllocNewPage else FFreeList := PGenericNode(Result)^.gnNext; FillChar(Result^, FNodeSize, 0); end; {--------} procedure TAbNodeManager.FreeNode(aNode : pointer); begin {add the node (if non-nil) to the top of the free list} if (aNode <> nil) then begin PGenericNode(aNode)^.gnNext := FFreeList; FFreeList := aNode; end; end; {--------} function TAbNodeManager.nmAllocNewPage : pointer; var NewPage : PAnsiChar; i : integer; FreeList : pointer; NodeSize : integer; begin {allocate a new page and add it to the front of the page list} GetMem(NewPage, FPageSize); PGenericNode(NewPage)^.gnNext := FPageHead; FPageHead := NewPage; {now split up the new page into nodes and push them all onto the free list; note that the first 4 bytes of the page is a pointer to the next page, so remember to skip over it} inc(NewPage, sizeof(pointer)); FreeList := FFreeList; NodeSize := FNodeSize; for i := 0 to pred(FNodesPerPage) do begin PGenericNode(NewPage)^.gnNext := FreeList; FreeList := NewPage; inc(NewPage, NodeSize); end; {return the top of the list} Result := FreeList; FFreeList := PGenericNode(Result)^.gnNext; end; {====================================================================} {====================================================================} procedure AbortProgress; begin raise EAbAbortProgress.Create('Abort'); end; {====================================================================} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abdefine.inc0000644000175000001440000002123015104114162022635 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDefine.inc *} {*********************************************************} {* ABBREVIA: Compiler options/directives include file *} {*********************************************************} {NOTE: ABDEFINE.INC is included in all ABBREVIA units; hence you can specify global compiler options here. ABDEFINE.INC is included *before* each unit's own required compiler options, so options specified here could be overridden by hardcoded options in the unit source file.} {====Compiler options that can be changed====} {$A+ Force alignment on word/dword boundaries} {$S- No stack checking} {---Global compiler defines for 32-bit OS's---} {====Global fixed compiler options (do NOT change)====} {$B- Incomplete boolean evaluation} {$H+ Long string support} {$P- No open string parameters} {$Q- Arithmetic overflow checking} {!! - Needs to be turned on!} {$R- Range checking} {!! - Needs to be turned on!} {$T+ No type-checked pointers} {$V- No var string checking} {$X+ Extended syntax} {$Z1 Enumerations are byte sized} {====Platform defines================================================} { map Delphi platform defines to FreePascal's (MSWINDOWS/UNIX/LINUX/DARWIN) } {$IFNDEF FPC} {$IF DEFINED(LINUX) AND (CompilerVersion < 15)} {$DEFINE KYLIX} {$DEFINE UNIX} {$IFEND} {$IFDEF MACOS} {$DEFINE DARWIN} {$ENDIF} {$IFDEF POSIX} {$DEFINE UNIX} {$ENDIF} {$ENDIF} { Unix API (Kylix/Delphi/FreePascal) } {$IFDEF UNIX} {$IF DEFINED(FPC)} {$DEFINE FPCUnixAPI} {$ELSEIF DEFINED(KYLIX)} {$DEFINE LibcAPI} {$ELSE} {$DEFINE PosixAPI} {$IFEND} {$ENDIF} {$IFDEF FPC} {$MODE DELPHI} {$PACKRECORDS C} {$ENDIF} {Activate this define to show CLX/LCL dialogs for spanning media requests. The default behavior will abort the operation instead. This define is only safe when using Abbrevia from the foreground thread. If using it from a background thread override OnRequestLastDisk, OnRequestNthDisk, and OnRequestBlankDisk and synchronize to the foreground yourself. The Windows version always MessageBox so it's thread-safe.} {.$DEFINE UnixDialogs} {====RTL defines=====================================================} {$IFNDEF FPC} {$IF RTLVersion >= 18} // Delphi 2006 {$DEFINE HasAdvancedRecords} {$IFEND} {$IF RTLVersion >= 20} // Delphi 2009 {$DEFINE HasThreadFinished} {$IFEND} {$IF RTLVersion >= 21} // Delphi 2010 {$DEFINE HasThreadStart} {$IFEND} {$IF RTLVersion >= 23} // Delphi XE2 {$DEFINE HasPlatformsAttribute} {$IFEND} {$ENDIF} {====Widgetset defines===============================================} { VCL version specific defines } {$IFNDEF FPC} {$IF RTLVersion >= 17} // Delphi 2005 {$DEFINE HasOnMouseActivate} {$IFEND} {$IF RTLVersion >= 18} // Delphi 2006 {$DEFINE HasOnMouseEnter} {$IFEND} {$IF RTLVersion >= 20} // Delphi 2009 {$DEFINE HasListViewGroups} {$DEFINE HasListViewOnItemChecked} {$DEFINE HasParentDoubleBuffered} {$DEFINE HasTreeViewExpandedImageIndex} {$IFEND} {$IF RTLVersion >= 21} // Delphi 2010 {$DEFINE HasGridDrawingStyle} {$DEFINE HasTouch} {$IFEND} {$ENDIF} {====General defines=================================================} {Activate the following define to include extra code to get rid of all hints and warnings. Parts of ABBREVIA are written in such a way that the hint/warning algorithms of the Delphi compilers are fooled and report things like variables being used before initialisation and so on when in reality the problem does not exist.} {$DEFINE DefeatWarnings} { Disable warnings for explicit string casts } {$IFDEF UNICODE} {$WARN EXPLICIT_STRING_CAST OFF} {$WARN EXPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} { Disable hints on Delphi XE2/Mac to prevent unexpanded inline messages } {$IFDEF POSIX} {$HINTS OFF} {$ENDIF} {====Bzip2 defines===================================================} {Activate this define to statically link bzip2 .obj files into the application. Curerntly only supported by Delphi/Win32.} {.$DEFINE Bzip2Static} {Activate this define to dynamically link to a libbz2.dll/libbbz2.so.1} {.$DEFINE Bzip2Dynamic} {Activate this define to load libbz2.dll/libbz2.so.1 at runtime using LoadLibrary} {.$DEFINE Bzip2Runtime} {Pick an appropriate linking method if none of the above are activate} {$IF NOT DEFINED(Bzip2Static) AND NOT DEFINED(Bzip2Dynamic) AND NOT DEFINED(Bzip2Runtime)} {$IFDEF FPC} {$DEFINE Bzip2Runtime} {$ELSE} {$IFDEF MSWINDOWS} {$DEFINE Bzip2Static} {$ELSE} {$DEFINE Bzip2Dynamic} {$ENDIF} {$ENDIF} {$IFEND} {====Zip defines=====================================================} {Activate the following define when you don't want Visual parts of the VCL library included for a program using a TAbArchive or TAbZipArchive} {.$DEFINE BuildingStub} {Activate the following define to include support for extracting files using PKzip compatible unShrink.} {.$DEFINE UnzipShrinkSupport} {Activate the following define to include support for extracting files using PKZip compatible unReduce.} {.$DEFINE UnzipReduceSupport} {Activate the following define to include support for extracting files using PKZip compatible unImplode.} {.$DEFINE UnzipImplodeSupport} {Activate the following to include support for extracting files using all older PKZip compatible methods (Shrink, Reduce, Implode} {$DEFINE UnzipBackwardSupport} {Activate the following to include support for extracting files using BZIP2 compression. Added in AppNote.txt v4.6. } {.$DEFINE UnzipBzip2Support} {Activate the following to include support for extracting files using 7-zip compatible Lzma compression. Added in AppNote.txt v6.3.} {.$DEFINE UnzipLzmaSupport} {Activate the following to include support for extracting files using zipx PPMd I compression. Added in AppNote.txt v6.3.} {.$DEFINE UnzipPPMdSupport} {Activate the following to include support for extracting .wav files using zipx WavPack compression. Requires copyright notice in your documentation. Check "WavPack License.txt" for details. Added in AppNote.txt v6.3. } {.$DEFINE UnzipWavPackSupport} {Activate the following to include support for extracting files using all newer (zipx) compatible methods (Bzip2, Lzma, PPMd, WavPack)} {$DEFINE UnzipZipxSupport} {Activate the following to include logging support in the deflate/ inflate code. Since this logging support is a by-product of assertion checking, you should only activate it if that is also on: $C+} {$IFOPT C+} //if Assertions are on {.$DEFINE UseLogging} {$ENDIF} { According to http://www.gzip.org/zlib/rfc1952.txt A compliant gzip compressor should calculate and set the CRC32 and ISIZE. However, a compliant decompressor should not check these values. If you want to check the the values of the CRC32 and ISIZE in a GZIP file when decompressing enable the STRICTGZIP define below. } {.$DEFINE STRICTGZIP} { The following define is ONLY used for Abbrevia Unit Tests. It has no effect on the Abbrevia Library. If defined it uses Winzip to create and test archives for compatability. The winzip tests require Systools stSpawn.pas It can be downloaded at http://sf.net/projects/tpsystools } {$IFDEF MSWINDOWS} {.$DEFINE WINZIPTESTS} {$ENDIF} {-------- !! DO NOT CHANGE DEFINES BELOW THIS LINE !! --------} {$IFDEF UnzipBackwardSupport} {$DEFINE UnzipShrinkSupport} {$DEFINE UnzipReduceSupport} {$DEFINE UnzipImplodeSupport} {$ENDIF} {$IFDEF UnzipZipxSupport} {$DEFINE UnzipXzSupport} {$DEFINE UnzipBzip2Support} {$DEFINE UnzipLzmaSupport} {$DEFINE UnzipPPMdSupport} {$DEFINE UnzipZstdSupport} {$DEFINE UnzipWavPackSupport} {$ENDIF} { Linking .obj files isn't currently supported in Kylix or FPC } {$IF DEFINED(FPC) OR NOT DEFINED(MSWINDOWS)} {$UNDEF UnzipPPMdSupport} {$UNDEF UnzipWavPackSupport} {$IFEND} doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abconst.pas0000644000175000001440000001747315104114162022561 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* Abbrevia: AbConst.pas *} {*********************************************************} {* Abbrevia: Constants *} {*********************************************************} unit AbConst; {$I AbDefine.inc} interface const AbVersion = 5.0; AbVersionS = '5.0'; Ab_MessageLen = 255; Ab_CaptionLen = 80; AB_ZIPPATHDELIM = '/'; const AbZipVersionNeeded = 1; AbUnknownCompressionMethod = 2; AbNoExtractionMethod = 3; AbInvalidPassword = 4; AbNoInsertionMethod = 5; AbInvalidFactor = 6; AbDuplicateName = 7; AbUnsupportedCompressionMethod = 8; AbUserAbort = 9; AbArchiveBusy = 10; AbBadSpanStream = 11; AbNoOverwriteSpanStream = 12; AbNoSpannedSelfExtract = 13; AbStreamFull = 14; AbNoSuchDirectory = 15; AbInflateBlockError = 16; AbBadStreamType = 17; AbTruncateError = 18; AbZipBadCRC = 19; AbZipBadStub = 20; AbFileNotFound = 21; AbInvalidLFH = 22; AbNoArchive = 23; AbErrZipInvalid = 24; AbReadError = 25; AbInvalidIndex = 26; AbInvalidThreshold = 27; AbUnhandledFileType = 28; AbSpanningNotSupported = 29; AbBBSReadTooManyBytes = 40; AbBBSSeekOutsideBuffer = 41; AbBBSInvalidOrigin = 42; AbBBSWriteTooManyBytes = 43; AbNoCabinetDllError = 50; AbFCIFileOpenError = 51; AbFCIFileReadError = 52; AbFCIFileWriteError = 53; AbFCIFileCloseError = 54; AbFCIFileSeekError = 55; AbFCIFileDeleteError = 56; AbFCIAddFileError = 57; AbFCICreateError = 58; AbFCIFlushCabinetError = 59; AbFCIFlushFolderError = 60; AbFDICopyError = 61; AbFDICreateError = 62; AbInvalidCabTemplate = 63; AbInvalidCabFile = 64; AbSWSNotEndofStream = 80; AbSWSSeekFailed = 81; AbSWSWriteFailed = 82; AbSWSInvalidOrigin = 83; AbSWSInvalidNewOrigin = 84; AbVMSReadTooManyBytes = 100; AbVMSInvalidOrigin = 101; AbVMSErrorOpenSwap = 102; AbVMSSeekFail = 103; AbVMSReadFail = 104; AbVMSWriteFail = 105; AbVMSWriteTooManyBytes = 106; AbGZipInvalid = 200; AbGzipBadCRC = 201; AbGzipBadFileSize = 202; AbTarInvalid = 220; AbTarBadFileName = 221; AbTarBadLinkName = 222; AbTarBadOp = 223; function AbStrRes(Index : Integer) : string; implementation uses AbResString; type AbStrRec = record ID: Integer; Str: string; end; const AbStrArray : array [0..66] of AbStrRec = ( (ID: AbZipVersionNeeded; Str: AbZipVersionNeededS), (ID: AbUnknownCompressionMethod; Str: AbUnknownCompressionMethodS), (ID: AbNoExtractionMethod; Str: AbNoExtractionMethodS), (ID: AbInvalidPassword; Str: AbInvalidPasswordS), (ID: AbNoInsertionMethod; Str: AbNoInsertionMethodS), (ID: AbInvalidFactor; Str: AbInvalidFactorS), (ID: AbDuplicateName; Str: AbDuplicateNameS), (ID: AbUnsupportedCompressionMethod; Str: AbUnsupportedCompressionMethodS), (ID: AbUserAbort; Str: AbUserAbortS), (ID: AbArchiveBusy; Str: AbArchiveBusyS), (ID: AbBadSpanStream; Str: AbBadSpanStreamS), (ID: AbNoOverwriteSpanStream; Str: AbNoOverwriteSpanStreamS), (ID: AbNoSpannedSelfExtract; Str: AbNoSpannedSelfExtractS), (ID: AbStreamFull; Str: AbStreamFullS), (ID: AbNoSuchDirectory; Str: AbNoSuchDirectoryS), (ID: AbInflateBlockError; Str: AbInflateBlockErrorS), (ID: AbBadStreamType; Str: AbBadStreamTypeS), (ID: AbTruncateError; Str: AbTruncateErrorS), (ID: AbZipBadCRC; Str: AbZipBadCRCS), (ID: AbZipBadStub; Str: AbZipBadStubS), (ID: AbFileNotFound; Str: AbFileNotFoundS), (ID: AbInvalidLFH; Str: AbInvalidLFHS), (ID: AbNoArchive; Str: AbNoArchiveS), (ID: AbErrZipInvalid; Str: AbErrZipInvalidS), (ID: AbReadError; Str: AbReadErrorS), (ID: AbInvalidIndex; Str: AbInvalidIndexS), (ID: AbInvalidThreshold; Str: AbInvalidThresholdS), (ID: AbUnhandledFileType; Str: AbUnhandledFileTypeS), (ID: AbSpanningNotSupported; Str: AbSpanningNotSupportedS), (ID: AbBBSReadTooManyBytes; Str: AbBBSReadTooManyBytesS), (ID: AbBBSSeekOutsideBuffer; Str: AbBBSSeekOutsideBufferS), (ID: AbBBSInvalidOrigin; Str: AbBBSInvalidOriginS), (ID: AbBBSWriteTooManyBytes; Str: AbBBSWriteTooManyBytesS), (ID: AbNoCabinetDllError; Str: AbNoCabinetDllErrorS), (ID: AbFCIFileOpenError; Str: AbFCIFileOpenErrorS), (ID: AbFCIFileReadError; Str: AbFCIFileReadErrorS), (ID: AbFCIFileWriteError; Str: AbFCIFileWriteErrorS), (ID: AbFCIFileCloseError; Str: AbFCIFileCloseErrorS), (ID: AbFCIFileSeekError; Str: AbFCIFileSeekErrorS), (ID: AbFCIFileDeleteError; Str: AbFCIFileDeleteErrorS), (ID: AbFCIAddFileError; Str: AbFCIAddFileErrorS), (ID: AbFCICreateError; Str: AbFCICreateErrorS), (ID: AbFCIFlushCabinetError; Str: AbFCIFlushCabinetErrorS), (ID: AbFCIFlushFolderError; Str: AbFCIFlushFolderErrorS), (ID: AbFDICopyError; Str: AbFDICopyErrorS), (ID: AbFDICreateError; Str: AbFDICreateErrorS), (ID: AbInvalidCabTemplate; Str: AbInvalidCabTemplateS), (ID: AbInvalidCabFile; Str: AbInvalidCabFileS), (ID: AbSWSNotEndofStream; Str: AbSWSNotEndofStreamS), (ID: AbSWSSeekFailed; Str: AbSWSSeekFailedS), (ID: AbSWSWriteFailed; Str: AbSWSWriteFailedS), (ID: AbSWSInvalidOrigin; Str: AbSWSInvalidOriginS), (ID: AbSWSInvalidNewOrigin; Str: AbSWSInvalidNewOriginS), (ID: AbVMSReadTooManyBytes; Str: AbVMSReadTooManyBytesS), (ID: AbVMSInvalidOrigin; Str: AbVMSInvalidOriginS), (ID: AbVMSErrorOpenSwap; Str: AbVMSErrorOpenSwapS), (ID: AbVMSSeekFail; Str: AbVMSSeekFailS), (ID: AbVMSReadFail; Str: AbVMSReadFailS), (ID: AbVMSWriteFail; Str: AbVMSWriteFailS), (ID: AbVMSWriteTooManyBytes; Str: AbVMSWriteTooManyBytesS), (ID: AbGzipInvalid; Str: AbGzipInvalidS), (ID: AbGzipBadCRC; Str: AbGzipBadCRCS), (ID: AbGzipBadFileSize; Str: AbGzipBadFileSizeS), (ID: AbTarInvalid; Str: AbTarInvalidS), (ID: AbTarBadFileName; Str: AbTarBadFileNameS), (ID: AbTarBadLinkName; Str: AbTarBadLinkNameS), (ID: AbTarBadOp; Str: AbTarBadOpS) ); function AbStrRes(Index : Integer) : string; var i : Integer; begin for i := Low(AbStrArray) to High(AbStrArray) do if AbStrArray[i].ID = Index then Result := AbStrArray[i].Str; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abbzip2typ.pas0000644000175000001440000003645515104114162023217 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBzip2Typ.pas *} {*********************************************************} {* ABBREVIA: TAbBzip2Archive, TAbBzip2Item classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Bzip2 files *} {*********************************************************} unit AbBzip2Typ; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; const { Default Stream Header for Bzip2s is 'BZhX', where X is the block size setting 1-9 in ASCII } { Each block has the following header: '1AY&SY', and are in units of 100kilobytes NOT 100kibiBytes } AB_BZIP2_FILE_HEADER = 'BZh'; AB_BZIP2_BLOCK_SIZE = ['1','2','3','4','5','6','7','8','9']; AB_BZIP2_BLOCK_HEADER = '1AY&SY'; { Note: $314159265359, BCD for Pi :) } { Note that Blocks are bit aligned, as such the only time you will "for sure" see the block header is on the start of stream/File } AB_BZIP2_FILE_TAIL =#23#114#36#83#133#9#0; { $1772245385090, BCD for sqrt(Pi) :) } { This is odd as the blocks are bit allgned so this is a string that is 13*4 bits = 52 bits } type PAbBzip2Header = ^TAbBzip2Header; { File Header } TAbBzip2Header = packed record { SizeOf(TAbBzip2Header) = 10 } FileHeader : array[0..2] of AnsiChar;{ 'BZh'; $42,5A,68 } BlockSize : AnsiChar; { '1'..'9'; $31-$39 } BlockHeader : array[0..5] of AnsiChar;{ '1AY&SY'; $31,41,59,26,53,59 } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbBzip2Item = class(TabArchiveItem); TAbBzip2ArchiveState = (gsBzip2, gsTar); TAbBzip2Archive = class(TAbTarArchive) private FBzip2Stream : TStream; { stream for Bzip2 file} FBzip2Item : TAbArchiveList; { item in bzip2 (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbBzip2ArchiveState; FIsBzippedTar : Boolean; procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToBzip2; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsBzippedTar : Boolean read FIsBzippedTar write FIsBzippedTar; end; function VerifyBzip2(Strm : TStream) : TAbArchiveType; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, BufStream, AbBzip2, AbExcept, AbVMStrm, AbBitBkt, AbProgress, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbBzip2Header) : Boolean; begin Result := (Header.FileHeader = AB_BZIP2_FILE_HEADER) and (Header.BlockSize in AB_BZIP2_BLOCK_SIZE) and (Header.BlockHeader = AB_BZIP2_BLOCK_HEADER); end; { -------------------------------------------------------------------------- } function VerifyBzip2(Strm : TStream) : TAbArchiveType; var Hdr : TAbBzip2Header; CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atBzip2; { Check for embedded TAR } Strm.Seek(0, soBeginning); DecompStream := TBZDecompressionStream.Create(Strm); try TarStream := TMemoryStream.Create; try DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soBeginning); if VerifyTar(TarStream) = atTar then Result := atBzippedTar; finally TarStream.Free; end; finally DecompStream.Free; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbBzip2Archive ***************************** } constructor TAbBzip2Archive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsBzip2; FBzip2Stream := FStream; FBzip2Item := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SwapToBzip2; begin FStream := FBzip2Stream; FItemList := FBzip2Item; FState := gsBzip2; end; { -------------------------------------------------------------------------- } function TAbBzip2Archive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var Bz2Item : TAbBzip2Item; FullSourceFileName, FullArchiveFileName: String; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToBzip2; Bz2Item := TAbBzip2Item.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); Bz2Item.FileName := FullArchiveFileName; Bz2Item.DiskFileName := FullSourceFileName; Result := Bz2Item; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbBzip2Archive.Destroy; begin SwapToBzip2; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToBzip2; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Bz2 doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToBzip2; { Index ignored as there's only one item in a Bz2 } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbBzip2Archive.GetSupportsEmptyFolders : Boolean; begin Result := IsBzippedTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.LoadArchive; var Item: TAbBzip2Item; Abort: Boolean; ItemName: string; begin if FBzip2Stream.Size = 0 then Exit; if IsBzippedTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToBzip2; Item := TAbBzip2Item.Create; Item.Action := aaNone; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.tbz', ItemName) or AnsiEndsText('.tbz2', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SaveArchive; var CompStream: TStream; i: Integer; CurItem: TAbBzip2Item; UpdateArchive: Boolean; TempFileName: String; InputFileStream: TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; UpdateArchive := (FBzip2Stream.Size > 0) and (FBzip2Stream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FBzip2Stream); TempFileName := GetTempName(FArchiveName); { Create new archive with temporary name } FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompStream := TBZCompressionStream.Create(CompressionLevel, FBzip2Stream); try FTargetStream := TWriteBufStream.Create(CompStream, $40000); try inherited SaveArchive; finally FreeAndNil(FTargetStream); end; finally CompStream.Free; end; if UpdateArchive then begin FreeAndNil(FBzip2Stream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FBzip2Stream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToBzip2; for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbBzip2Item(ItemList[i]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; bz2 doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FBzip2Stream.Size := 0; CompStream := TBZCompressionStream.Create(CompressionLevel, FBzip2Stream); try if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FBzip2Stream } else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try with TAbProgressWriteStream.Create(CompStream, InputFileStream.Size, OnProgress) do try CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } finally Free; end; finally InputFileStream.Free; end; end; finally CompStream.Free; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToBzip2; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.DecompressToStream(aStream: TStream); const BufSize = $F000; var DecompStream: TBZDecompressionStream; ProxyStream: TAbProgressReadStream; Buffer: PByte; N: Integer; begin ProxyStream:= TAbProgressReadStream.Create(FBzip2Stream, OnProgress); try DecompStream := TBZDecompressionStream.Create(ProxyStream); try GetMem(Buffer, BufSize); try N := DecompStream.Read(Buffer^, BufSize); while N > 0 do begin aStream.WriteBuffer(Buffer^, N); N := DecompStream.Read(Buffer^, BufSize); end; finally FreeMem(Buffer, BufSize); end; finally DecompStream.Free; end; finally ProxyStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.TestItemAt(Index: Integer); var Bzip2Type: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { note Index ignored as there's only one item in a GZip } Bzip2Type := VerifyBzip2(FBzip2Stream); if not (Bzip2Type in [atBzip2, atBzippedTar]) then raise EAbGzipInvalid.Create;// TODO: Add bzip2-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abbzip2.pas0000644000175000001440000006604015104114162022453 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * This program, "bzip2", the associated library "libbzip2", and all * documentation, are copyright (C) 1996-2007 Julian R Seward. All * rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. The origin of this software must not be misrepresented; you must * not claim that you wrote the original software. If you use this * software in a product, an acknowledgment in the product * documentation would be appreciated but is not required. * * 3. Altered source versions must be plainly marked as such, and must * not be misrepresented as being the original software. * * 4. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Julian Seward, jseward@bzip.org * bzip2/libbzip2 version 1.0.5 of 10 December 2007 * * Pascal wrapper created by Edison Mera, version 1.04 * http://edisonlife.homelinux.com/ * * Dynamic and runtime linking and Win64/OS X/Linux support by Craig Peterson * http://tpabbrevia.sourceforge.net/ * ***** END LICENSE BLOCK ***** *) unit AbBzip2; {$I AbDefine.inc} interface uses SysUtils, Classes; type TAlloc = function(opaque: Pointer; Items, Size: Integer): Pointer; cdecl; TFree = procedure(opaque, Block: Pointer); cdecl; // Internal structure. Ignore. TBZStreamRec = record next_in: PByte; // next input byte avail_in: Integer; // number of bytes available at next_in total_in_lo32: Integer; // total nb of input bytes read so far total_in_hi32: Integer; next_out: PByte; // next output byte should be put here avail_out: Integer; // remaining free space at next_out total_out_lo32: Integer; // total nb of bytes output so far total_out_hi32: Integer; state: Pointer; bzalloc: TAlloc; // used to allocate the internal state bzfree: TFree; // used to free the internal state opaque: Pointer; end; // Abstract ancestor class TCustomBZip2Stream = class(TStream) private FStrm: TStream; FStrmPos: Int64; FOnProgress: TNotifyEvent; FBZRec: TBZStreamRec; FBuffer: array[Word] of Byte; protected procedure Progress(Sender: TObject); dynamic; property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; constructor Create(Strm: TStream); end; { TBZCompressionStream compresses data on the fly as data is written to it, and stores the compressed data to another stream. TBZCompressionStream is write-only and strictly sequential. Reading from the stream will raise an exception. Using Seek to move the stream pointer will raise an exception. Output data is cached internally, written to the output stream only when the internal output buffer is full. All pending output data is flushed when the stream is destroyed. The Position property returns the number of uncompressed bytes of data that have been written to the stream so far. CompressionRate returns the on-the-fly percentage by which the original data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 If raw data size = 100 and compressed data size = 25, the CompressionRate is 75% The OnProgress event is called each time the output buffer is filled and written to the output stream. This is useful for updating a progress indicator when you are writing a large chunk of data to the compression stream in a single call.} TBZCompressionStream = class(TCustomBZip2Stream) private function GetCompressionRate: Single; public constructor Create(Level: IntPtr; Dest: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property CompressionRate: Single read GetCompressionRate; property OnProgress; end; { TDecompressionStream decompresses data on the fly as data is read from it. Compressed data comes from a separate source stream. TDecompressionStream is read-only and unidirectional; you can seek forward in the stream, but not backwards. The special case of setting the stream position to zero is allowed. Seeking forward decompresses data until the requested position in the uncompressed data has been reached. Seeking backwards, seeking relative to the end of the stream, requesting the size of the stream, and writing to the stream will raise an exception. The Position property returns the number of bytes of uncompressed data that have been read from the stream so far. The OnProgress event is called each time the internal input buffer of compressed data is exhausted and the next block is read from the input stream. This is useful for updating a progress indicator when you are reading a large chunk of data from the decompression stream in a single call.} TBZDecompressionStream = class(TCustomBZip2Stream) private FReadState: LongInt; public constructor Create(Source: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property OnProgress; end; { CompressBuf compresses data, buffer to buffer, in one call. In: InBuf = ptr to compressed data InBytes = number of bytes in InBuf Out: OutBuf = ptr to newly allocated buffer containing decompressed data OutBytes = number of bytes in OutBuf } procedure BZCompressBuf(const InBuf: Pointer; InBytes: Integer; out OutBuf: Pointer; out OutBytes: Integer); { DecompressBuf decompresses data, buffer to buffer, in one call. In: InBuf = ptr to compressed data InBytes = number of bytes in InBuf OutEstimate = zero, or est. size of the decompressed data Out: OutBuf = ptr to newly allocated buffer containing decompressed data OutBytes = number of bytes in OutBuf } procedure BZDecompressBuf(const InBuf: Pointer; InBytes: Integer; OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); type EBZip2Error = class(Exception); EBZCompressionError = class(EBZip2Error); EBZDecompressionError = class(EBZip2Error); implementation // Compile for Win64 using MSVC // \bin\x86_amd64\cl.exe -c -nologo -GS- -Z7 -wd4086 -Gs32768 // -DBZ_NO_STDIO blocksort.c huffman.c compress.c decompress.c bzlib.c uses {$IFDEF Bzip2Runtime} {$IF DEFINED(FPC)} dynlibs, {$ELSEIF DEFINED(MSWINDOWS)} Windows, {$IFEND} {$ENDIF} AbUtils; {$IFDEF Bzip2Static} {$IF DEFINED(WIN32)} {$L Win32\blocksort.obj} {$L Win32\huffman.obj} {$L Win32\compress.obj} {$L Win32\decompress.obj} {$L Win32\bzlib.obj} {$ELSEIF DEFINED(WIN64)} {$L Win64\blocksort.obj} {$L Win64\huffman.obj} {$L Win64\compress.obj} {$L Win64\decompress.obj} {$L Win64\bzlib.obj} {$IFEND} procedure BZ2_hbMakeCodeLengths; external; procedure BZ2_blockSort; external; procedure BZ2_hbCreateDecodeTables; external; procedure BZ2_hbAssignCodes; external; procedure BZ2_compressBlock; external; procedure BZ2_decompress; external; {$ENDIF} type TLargeInteger = record case Integer of 0: ( LowPart: LongWord; HighPart: LongWord); 1: ( QuadPart: Int64); end; const BZ_RUN = 0; BZ_FLUSH = 1; BZ_FINISH = 2; BZ_OK = 0; BZ_RUN_OK = 1; BZ_FLUSH_OK = 2; BZ_FINISH_OK = 3; BZ_STREAM_END = 4; BZ_SEQUENCE_ERROR = (-1); BZ_PARAM_ERROR = (-2); BZ_MEM_ERROR = (-3); BZ_DATA_ERROR = (-4); BZ_DATA_ERROR_MAGIC = (-5); BZ_IO_ERROR = (-6); BZ_UNEXPECTED_EOF = (-7); BZ_OUTBUFF_FULL = (-8); BZ_BLOCK_SIZE_100K = 9; {$IFDEF Bzip2Static} BZ2_rNums: array[0..511] of Longint = ( 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 ); BZ2_crc32Table: array[0..255] of Longint = ( $00000000, $04C11DB7, $09823B6E, $0D4326D9, $130476DC, $17C56B6B, $1A864DB2, $1E475005, $2608EDB8, $22C9F00F, $2F8AD6D6, $2B4BCB61, $350C9B64, $31CD86D3, $3C8EA00A, $384FBDBD, $4C11DB70, $48D0C6C7, $4593E01E, $4152FDA9, $5F15ADAC, $5BD4B01B, $569796C2, $52568B75, $6A1936C8, $6ED82B7F, $639B0DA6, $675A1011, $791D4014, $7DDC5DA3, $709F7B7A, $745E66CD, -$67DC4920, -$631D54A9, -$6E5E7272, -$6A9F6FC7, -$74D83FC4, -$70192275, -$7D5A04AE, -$799B191B, -$41D4A4A8, -$4515B911, -$48569FCA, -$4C97827F, -$52D0D27C, -$5611CFCD, -$5B52E916, -$5F93F4A3, -$2BCD9270, -$2F0C8FD9, -$224FA902, -$268EB4B7, -$38C9E4B4, -$3C08F905, -$314BDFDE, -$358AC26B, -$0DC57FD8, -$09046261, -$044744BA, -$0086590F, -$1EC1090C, -$1A0014BD, -$17433266, -$13822FD3, $34867077, $30476DC0, $3D044B19, $39C556AE, $278206AB, $23431B1C, $2E003DC5, $2AC12072, $128E9DCF, $164F8078, $1B0CA6A1, $1FCDBB16, $018AEB13, $054BF6A4, $0808D07D, $0CC9CDCA, $7897AB07, $7C56B6B0, $71159069, $75D48DDE, $6B93DDDB, $6F52C06C, $6211E6B5, $66D0FB02, $5E9F46BF, $5A5E5B08, $571D7DD1, $53DC6066, $4D9B3063, $495A2DD4, $44190B0D, $40D816BA, -$535A3969, -$579B24E0, -$5AD80207, -$5E191FB2, -$405E4FB5, -$449F5204, -$49DC74DB, -$4D1D696E, -$7552D4D1, -$7193C968, -$7CD0EFBF, -$7811F20A, -$6656A20D, -$6297BFBC, -$6FD49963, -$6B1584D6, -$1F4BE219, -$1B8AFFB0, -$16C9D977, -$1208C4C2, -$0C4F94C5, -$088E8974, -$05CDAFAB, -$010CB21E, -$39430FA1, -$3D821218, -$30C134CF, -$3400297A, -$2A47797D, -$2E8664CC, -$23C54213, -$27045FA6, $690CE0EE, $6DCDFD59, $608EDB80, $644FC637, $7A089632, $7EC98B85, $738AAD5C, $774BB0EB, $4F040D56, $4BC510E1, $46863638, $42472B8F, $5C007B8A, $58C1663D, $558240E4, $51435D53, $251D3B9E, $21DC2629, $2C9F00F0, $285E1D47, $36194D42, $32D850F5, $3F9B762C, $3B5A6B9B, $0315D626, $07D4CB91, $0A97ED48, $0E56F0FF, $1011A0FA, $14D0BD4D, $19939B94, $1D528623, -$0ED0A9F2, -$0A11B447, -$075292A0, -$03938F29, -$1DD4DF2E, -$1915C29B, -$1456E444, -$1097F9F5, -$28D8444A, -$2C1959FF, -$215A7F28, -$259B6291, -$3BDC3296, -$3F1D2F23, -$325E09FC, -$369F144D, -$42C17282, -$46006F37, -$4B4349F0, -$4F825459, -$51C5045E, -$550419EB, -$58473F34, -$5C862285, -$64C99F3A, -$6008828F, -$6D4BA458, -$698AB9E1, -$77CDE9E6, -$730CF453, -$7E4FD28C, -$7A8ECF3D, $5D8A9099, $594B8D2E, $5408ABF7, $50C9B640, $4E8EE645, $4A4FFBF2, $470CDD2B, $43CDC09C, $7B827D21, $7F436096, $7200464F, $76C15BF8, $68860BFD, $6C47164A, $61043093, $65C52D24, $119B4BE9, $155A565E, $18197087, $1CD86D30, $029F3D35, $065E2082, $0B1D065B, $0FDC1BEC, $3793A651, $3352BBE6, $3E119D3F, $3AD08088, $2497D08D, $2056CD3A, $2D15EBE3, $29D4F654, -$3A56D987, -$3E97C432, -$33D4E2E9, -$3715FF60, -$2952AF5B, -$2D93B2EE, -$20D09435, -$24118984, -$1C5E343F, -$189F298A, -$15DC0F51, -$111D12E8, -$0F5A42E3, -$0B9B5F56, -$06D8798D, -$0219643C, -$764702F7, -$72861F42, -$7FC53999, -$7B042430, -$6543742B, -$6182699E, -$6CC14F45, -$680052F4, -$504FEF4F, -$548EF2FA, -$59CDD421, -$5D0CC998, -$434B9993, -$478A8426, -$4AC9A2FD, -$4E08BF4C ); procedure bz_internal_error(errcode: Integer); cdecl; begin raise EBZip2Error.CreateFmt('Compression Error %d', [errcode]); end; { _bz_internal_error } function malloc(size: Integer): Pointer; cdecl; begin GetMem(Result, Size); end; { _malloc } procedure free(block: Pointer); cdecl; begin FreeMem(block); end; { _free } {$ENDIF} const libbz2 = {$IF DEFINED(MSWINDOWS)}'bz2.dll' {$ELSEIF DEFINED(DARWIN)}'libbz2.dylib' {$ELSE}'libbz2.so.1'{$IFEND}; {$IFDEF Bzip2Runtime} var hBzip2: HMODULE; // deflate compresses data BZ2_bzCompressInit: function(var strm: TBZStreamRec; blockSize100k: Integer; verbosity: Integer; workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzCompress: function(var strm: TBZStreamRec; action: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzCompressEnd: function (var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzBuffToBuffCompress: function(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, blockSize100k, verbosity, workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} // inflate decompresses data BZ2_bzDecompressInit: function(var strm: TBZStreamRec; verbosity: Integer; small: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzDecompress: function(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzDecompressEnd: function(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzBuffToBuffDecompress: function(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, small, verbosity: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} {$ELSE} // deflate compresses data function BZ2_bzCompressInit(var strm: TBZStreamRec; blockSize100k: Integer; verbosity: Integer; workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompressInit'{$ENDIF}; function BZ2_bzCompress(var strm: TBZStreamRec; action: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompress'{$ENDIF}; function BZ2_bzCompressEnd(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompressEnd'{$ENDIF}; function BZ2_bzBuffToBuffCompress(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, blockSize100k, verbosity, workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzBuffToBuffCompress'{$ENDIF}; // inflate decompresses data function BZ2_bzDecompressInit(var strm: TBZStreamRec; verbosity: Integer; small: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompressInit'{$ENDIF}; function BZ2_bzDecompress(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompress'{$ENDIF}; function BZ2_bzDecompressEnd(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompressEnd'{$ENDIF}; function BZ2_bzBuffToBuffDecompress(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, small, verbosity: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzBuffToBuffDecompress'{$ENDIF}; {$ENDIF} procedure LoadBzip2DLL; begin {$IFDEF Bzip2Runtime} if hBzip2 <> 0 then Exit; hBzip2 := LoadLibrary(libbz2); if hBzip2 = 0 then raise EBZip2Error.Create('Bzip2 shared library not found'); @BZ2_bzCompressInit := GetProcAddress(hBzip2, 'BZ2_bzCompressInit'); @BZ2_bzCompress := GetProcAddress(hBzip2, 'BZ2_bzCompress'); @BZ2_bzCompressEnd := GetProcAddress(hBzip2, 'BZ2_bzCompressEnd'); @BZ2_bzBuffToBuffCompress := GetProcAddress(hBzip2, 'BZ2_bzBuffToBuffCompress'); @BZ2_bzDecompressInit := GetProcAddress(hBzip2, 'BZ2_bzDecompressInit'); @BZ2_bzDecompress := GetProcAddress(hBzip2, 'BZ2_bzDecompress'); @BZ2_bzDecompressEnd := GetProcAddress(hBzip2, 'BZ2_bzDecompressEnd'); @BZ2_bzBuffToBuffDecompress := GetProcAddress(hBzip2, 'BZ2_bzBuffToBuffDecompress'); {$ENDIF} end; function bzip2AllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; begin GetMem(Result, Items * Size); end; { bzip2AllocMem } procedure bzip2FreeMem(AppData, Block: Pointer); cdecl; begin FreeMem(Block); end; { bzip2FreeMem } function CCheck(code: Integer): Integer; begin Result := code; if code < 0 then raise EBZCompressionError.CreateFmt('error %d', [code]); //!! end; { CCheck } function DCheck(code: Integer): Integer; begin Result := code; if code < 0 then raise EBZDecompressionError.CreateFmt('error %d', [code]); //!! end; { DCheck } procedure BZCompressBuf(const InBuf: Pointer; InBytes: Integer; out OutBuf: Pointer; out OutBytes: Integer); var strm: TBZStreamRec; P: Pointer; begin LoadBzip2DLL; FillChar(strm, sizeof(strm), 0); strm.bzalloc := bzip2AllocMem; strm.bzfree := bzip2FreeMem; OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; GetMem(OutBuf, OutBytes); try strm.next_in := InBuf; strm.avail_in := InBytes; strm.next_out := OutBuf; strm.avail_out := OutBytes; CCheck(BZ2_bzCompressInit(strm, 9, 0, 0)); try while CCheck(BZ2_bzCompress(strm, BZ_FINISH)) <> BZ_STREAM_END do begin P := OutBuf; Inc(OutBytes, 256); ReallocMem(OutBuf, OutBytes); strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := 256; end; finally CCheck(BZ2_bzCompressEnd(strm)); end; ReallocMem(OutBuf, strm.total_out_lo32); OutBytes := strm.total_out_lo32; except FreeMem(OutBuf); raise end; end; procedure BZDecompressBuf(const InBuf: Pointer; InBytes: Integer; OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); var strm: TBZStreamRec; P: Pointer; BufInc: Integer; begin LoadBzip2DLL; FillChar(strm, sizeof(strm), 0); strm.bzalloc := bzip2AllocMem; strm.bzfree := bzip2FreeMem; BufInc := (InBytes + 255) and not 255; if OutEstimate = 0 then OutBytes := BufInc else OutBytes := OutEstimate; GetMem(OutBuf, OutBytes); try strm.next_in := InBuf; strm.avail_in := InBytes; strm.next_out := OutBuf; strm.avail_out := OutBytes; DCheck(BZ2_bzDecompressInit(strm, 0, 0)); try while DCheck(BZ2_bzDecompress(strm)) <> BZ_STREAM_END do begin P := OutBuf; Inc(OutBytes, BufInc); ReallocMem(OutBuf, OutBytes); strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := BufInc; end; finally DCheck(BZ2_bzDecompressEnd(strm)); end; ReallocMem(OutBuf, strm.total_out_lo32); OutBytes := strm.total_out_lo32; except FreeMem(OutBuf); raise end; end; // TCustomBZip2Stream constructor TCustomBZip2Stream.Create(Strm: TStream); begin inherited Create; FStrm := Strm; FStrmPos := Strm.Position; FBZRec.bzalloc := bzip2AllocMem; FBZRec.bzfree := bzip2FreeMem; end; procedure TCustomBZip2Stream.Progress(Sender: TObject); begin if Assigned(FOnProgress) then FOnProgress(Sender); end; { TCustomBZip2Stream } // TBZCompressionStream constructor TBZCompressionStream.Create(Level: IntPtr; Dest: TStream); begin inherited Create(Dest); LoadBzip2DLL; FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); CCheck(BZ2_bzCompressInit(FBZRec, Level, 0, 0)); end; destructor TBZCompressionStream.Destroy; begin if FBZRec.state <> nil then begin FBZRec.next_in := nil; FBZRec.avail_in := 0; try if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (CCheck(BZ2_bzCompress(FBZRec, BZ_FINISH)) <> BZ_STREAM_END) and (FBZRec.avail_out = 0) do begin FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); end; if FBZRec.avail_out < sizeof(FBuffer) then FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FBZRec.avail_out); finally BZ2_bzCompressEnd(FBZRec); end; end; inherited Destroy; end; function TBZCompressionStream.Read(var Buffer; Count: Longint): Longint; begin raise EBZCompressionError.Create('Invalid stream operation'); end; { TBZCompressionStream } function TBZCompressionStream.Write(const Buffer; Count: Longint): Longint; begin FBZRec.next_in := @Buffer; FBZRec.avail_in := Count; if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_in > 0) do begin CCheck(BZ2_bzCompress(FBZRec, BZ_RUN)); if FBZRec.avail_out = 0 then begin FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); FStrmPos := FStrm.Position; end; Progress(Self); end; Result := Count; end; { TBZCompressionStream } function TBZCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var conv64 : TLargeInteger; begin if (Offset = 0) and (Origin = soCurrent) then begin conv64.LowPart := FBZRec.total_in_lo32; conv64.HighPart := FBZRec.total_in_hi32; Result := conv64.QuadPart end else raise EBZCompressionError.Create('Invalid stream operation'); end; { TBZCompressionStream } function TBZCompressionStream.GetCompressionRate: Single; var conv64In : TLargeInteger; conv64Out: TLargeInteger; begin conv64In.LowPart := FBZRec.total_in_lo32; conv64In.HighPart := FBZRec.total_in_hi32; conv64Out.LowPart := FBZRec.total_out_lo32; conv64Out.HighPart := FBZRec.total_out_hi32; if conv64In.QuadPart = 0 then Result := 0 else Result := (1.0 - (conv64Out.QuadPart / conv64In.QuadPart)) * 100.0; end; { TBZCompressionStream } // TDecompressionStream constructor TBZDecompressionStream.Create(Source: TStream); begin inherited Create(Source); LoadBzip2DLL; FBZRec.next_in := @FBuffer[0]; FBZRec.avail_in := 0; DCheck(BZ2_bzDecompressInit(FBZRec, 0, 0)); end; destructor TBZDecompressionStream.Destroy; begin if FBZRec.state <> nil then BZ2_bzDecompressEnd(FBZRec); inherited Destroy; end; function TBZDecompressionStream.Read(var Buffer; Count: Longint): Longint; begin FBZRec.next_out := @Buffer; FBZRec.avail_out := Count; if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_out > 0) do begin if FReadState = BZ_STREAM_END then begin Result := Count - FBZRec.avail_out; Exit; end else if FBZRec.avail_in = 0 then begin FBZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); if FBZRec.avail_in = 0 then begin Result := Count - FBZRec.avail_out; Exit; end; FBZRec.next_in := @FBuffer[0]; FStrmPos := FStrm.Position; end; FReadState := DCheck(BZ2_bzDecompress(FBZRec)); Progress(Self); end; Result := Count; end; { TBZDecompressionStream } function TBZDecompressionStream.Write(const Buffer; Count: Longint): Longint; begin raise EBZDecompressionError.Create('Invalid stream operation'); end; { TBZDecompressionStream } function TBZDecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var I : Integer; Buf : array[0..4095] of Char; conv64: TLargeInteger; NewOff: Int64; begin conv64.LowPart := FBZRec.total_out_lo32; conv64.HighPart := FBZRec.total_out_hi32; if (Offset = 0) and (Origin = soBeginning) then begin DCheck(BZ2_bzDecompressEnd(FBZRec)); DCheck(BZ2_bzDecompressInit(FBZRec, 0, 0)); FBZRec.next_in := @FBuffer[0]; FBZRec.avail_in := 0; FStrm.Position := 0; FStrmPos := 0; end else if ((Offset >= 0) and (Origin = soCurrent)) or (((Offset - conv64.QuadPart) > 0) and (Origin = soBeginning)) then begin NewOff := Offset; if Origin = soBeginning then Dec(NewOff, conv64.QuadPart); if NewOff > 0 then begin for I := 1 to NewOff div sizeof(Buf) do ReadBuffer(Buf, sizeof(Buf)); ReadBuffer(Buf, NewOff mod sizeof(Buf)); end; end else raise EBZDecompressionError.Create('Invalid stream operation'); Result := conv64.QuadPart; end; { TBZDecompressionStream } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abbrowse.pas0000644000175000001440000005164715104114162022735 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBrowse.pas *} {*********************************************************} {* ABBREVIA: Base Browser Component *} {*********************************************************} unit AbBrowse; {$I AbDefine.inc} interface uses Classes, AbBase, AbUtils, AbArcTyp; type IAbProgressMeter = interface ['{4B766704-FD20-40BF-BA40-2EC2DD77B178}'] procedure DoProgress(Progress : Byte); procedure Reset; end; TAbBaseBrowser = class(TAbBaseComponent) public FArchive : TAbArchive; protected {private} FSpanningThreshold : Longint; FItemProgressMeter : IAbProgressMeter; FArchiveProgressMeter : IAbProgressMeter; FBaseDirectory : string; FFileName : string; FLogFile : string; FLogging : Boolean; FOnArchiveProgress : TAbArchiveProgressEvent; FOnArchiveItemProgress : TAbArchiveItemProgressEvent; FOnChange : TNotifyEvent; FOnConfirmProcessItem : TAbArchiveItemConfirmEvent; FOnLoad : TAbArchiveEvent; FOnProcessItemFailure : TAbArchiveItemFailureEvent; FOnRequestImage : TAbRequestImageEvent; FTempDirectory : string; { detected compression type } FArchiveType : TAbArchiveType; FForceType : Boolean; protected {private methods} function GetCount : Integer; function GetItem(Value : Longint) : TAbArchiveItem; function GetSpanned : Boolean; function GetStatus : TAbArchiveStatus; procedure ResetMeters; virtual; procedure SetArchiveProgressMeter(const Value: IAbProgressMeter); procedure SetCompressionType(const Value: TAbArchiveType); procedure SetBaseDirectory(const Value : string); procedure SetItemProgressMeter(const Value: IAbProgressMeter); procedure SetSpanningThreshold(Value : Longint); procedure SetLogFile(const Value : string); procedure SetLogging(Value : Boolean); procedure SetTempDirectory(const Value : string); procedure Loaded; override; procedure Notification(Component: TComponent; Operation: TOperation); override; protected {virtual methods} procedure DoArchiveItemProgress(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); virtual; procedure DoChange; virtual; procedure DoConfirmProcessItem(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean); virtual; procedure DoLoad(Sender : TObject); virtual; procedure DoProcessItemFailure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); virtual; procedure SetOnRequestImage(Value : TAbRequestImageEvent); virtual; procedure InitArchive; virtual; {This method must be defined in descendent classes} procedure SetFileName(const aFileName : string); virtual; abstract; protected {properties} property Archive : TAbArchive read FArchive; property ArchiveProgressMeter : IAbProgressMeter read FArchiveProgressMeter write SetArchiveProgressMeter; property BaseDirectory : string read FBaseDirectory write SetBaseDirectory; property FileName : string read FFileName write SetFileName; property SpanningThreshold : Longint read FSpanningThreshold write SetSpanningThreshold default 0; property ItemProgressMeter : IAbProgressMeter read FItemProgressMeter write SetItemProgressMeter; property LogFile : string read FLogFile write SetLogFile; property Logging : Boolean read FLogging write SetLogging default False; property Spanned : Boolean read GetSpanned; property TempDirectory : string read FTempDirectory write SetTempDirectory; protected {events} property OnArchiveProgress : TAbArchiveProgressEvent read FOnArchiveProgress write FOnArchiveProgress; property OnArchiveItemProgress : TAbArchiveItemProgressEvent read FOnArchiveItemProgress write FOnArchiveItemProgress; property OnConfirmProcessItem : TAbArchiveItemConfirmEvent read FOnConfirmProcessItem write FOnConfirmProcessItem; property OnProcessItemFailure : TAbArchiveItemFailureEvent read FOnProcessItemFailure write FOnProcessItemFailure; property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write SetOnRequestImage; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure ClearTags; {Clear all tags from the archive} function FindItem(aItem : TAbArchiveItem) : Integer; function FindFile(const aFileName : string) : Integer; procedure TagItems(const FileMask : string); {tag all items that match the mask} procedure UnTagItems(const FileMask : string); {clear tags for all items that match the mask} procedure CloseArchive; {closes the archive by setting FileName to ''} procedure OpenArchive(const aFileName : string); {opens the archive} public {properties} property Count : Integer read GetCount; property Items[Index : Integer] : TAbArchiveItem read GetItem; default; property Status : TAbArchiveStatus read GetStatus; property ArchiveType : TAbArchiveType read FArchiveType write SetCompressionType default atUnknown; property ForceType : Boolean read FForceType write FForceType default False; public {events} property OnChange : TNotifyEvent read FOnChange write FOnChange; property OnLoad : TAbArchiveEvent read FOnLoad write FOnLoad; end; function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; overload; function AbDetermineArcType(aStream: TStream) : TAbArchiveType; overload; implementation uses SysUtils, AbExcept, {$IF DEFINED(ExtractCabSupport)} AbCabTyp, {$ENDIF} AbZipTyp, AbTarTyp, AbGzTyp, AbBzip2Typ, AbLzmaTyp, AbXzTyp, AbZstdTyp, DCOSUtils, DCClassesUtf8; { TAbBaseBrowser implementation ======================================= } { -------------------------------------------------------------------------- } constructor TAbBaseBrowser.Create(AOwner : TComponent); begin inherited Create(AOwner); FLogFile := ''; FLogging := False; FSpanningThreshold := 0; FArchiveType := atUnknown; FForceType := False; end; { -------------------------------------------------------------------------- } destructor TAbBaseBrowser.Destroy; begin FArchive.Free; FArchive := nil; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.ClearTags; {Clear all tags from the archive} begin if Assigned(FArchive) then FArchive.ClearTags else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.CloseArchive; {closes the archive by setting FileName to ''} begin if FFileName <> '' then FileName := ''; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoArchiveItemProgress(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FItemProgressMeter) then FItemProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveItemProgress) then FOnArchiveItemProgress(Self, Item, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoArchiveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FArchiveProgressMeter) then FArchiveProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveProgress) then FOnArchiveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoChange; begin if Assigned(FOnChange) then begin FOnChange(Self); end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoConfirmProcessItem(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean); begin Confirm := True; if Assigned(FItemProgressMeter) then FItemProgressMeter.Reset; if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(Self, Item, ProcessType, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoLoad(Sender : TObject); begin if Assigned(FOnLoad) then FOnLoad(Self); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoProcessItemFailure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); begin if Assigned(FOnProcessItemFailure) then FOnProcessItemFailure(Self, Item, ProcessType, ErrorClass, ErrorCode); end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.FindItem(aItem : TAbArchiveItem) : Integer; begin if Assigned(FArchive) then Result := FArchive.FindItem(aItem) else Result := -1; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.FindFile(const aFileName : string) : Integer; begin if Assigned(FArchive) then Result := FArchive.FindFile(aFileName) else Result := -1; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetSpanned : Boolean; begin if Assigned(FArchive) then Result := FArchive.Spanned else Result := False; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetStatus : TAbArchiveStatus; begin if Assigned(FArchive) then Result := FArchive.Status else Result := asInvalid; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetCount : Integer; begin if Assigned(FArchive) then Result := FArchive.Count else Result := 0; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetItem(Value : Longint) : TAbArchiveItem; begin if Assigned(FArchive) then Result := FArchive.ItemList[Value] else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.InitArchive; begin ResetMeters; if Assigned(FArchive) then begin {properties} FArchive.SpanningThreshold := FSpanningThreshold; FArchive.LogFile := FLogFile; FArchive.Logging := FLogging; FArchive.TempDirectory := FTempDirectory; SetBaseDirectory(FBaseDirectory); {events} FArchive.OnArchiveProgress := DoArchiveProgress; FArchive.OnArchiveItemProgress := DoArchiveItemProgress; FArchive.OnConfirmProcessItem := DoConfirmProcessItem; FArchive.OnLoad := DoLoad; FArchive.OnProcessItemFailure := DoProcessItemFailure; FArchive.OnRequestImage := FOnRequestImage; end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.Loaded; begin inherited Loaded; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.Notification(Component: TComponent; Operation: TOperation); begin inherited Notification(Component, Operation); if (Operation = opRemove) then begin if Assigned(ItemProgressMeter) and Component.IsImplementorOf(ItemProgressMeter) then ItemProgressMeter := nil; if Assigned(ArchiveProgressMeter) and Component.IsImplementorOf(ArchiveProgressMeter) then ArchiveProgressMeter := nil; end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.OpenArchive(const aFileName : string); {opens the archive} begin FileName := AFileName; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.ResetMeters; begin if Assigned(FArchiveProgressMeter) then FArchiveProgressMeter.Reset; if Assigned(FItemProgressMeter) then FItemProgressMeter.Reset; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetBaseDirectory(const Value : string); begin if Assigned(FArchive) then begin FArchive.BaseDirectory := Value; FBaseDirectory := FArchive.BaseDirectory; end else FBaseDirectory := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetSpanningThreshold(Value : Longint); begin FSpanningThreshold := Value; if Assigned(FArchive) then FArchive.SpanningThreshold := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetLogFile(const Value : string); begin FLogFile := Value; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then FArchive.LogFile := Value; SetLogging(Value <> ''); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetLogging(Value : Boolean); begin FLogging := Value; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then FArchive.Logging:= Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetOnRequestImage(Value : TAbRequestImageEvent); begin FOnRequestImage := Value; if Assigned(FArchive) then FArchive.OnRequestImage := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetTempDirectory(const Value : string); begin FTempDirectory := Value; if Assigned(FArchive) then FArchive.TempDirectory := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.TagItems(const FileMask : string); {tag all items that match the mask} begin if Assigned(FArchive) then FArchive.TagItems(FileMask) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.UnTagItems(const FileMask : string); {clear tags for all items that match the mask} begin if Assigned(FArchive) then FArchive.UnTagItems(FileMask) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetCompressionType(const Value: TAbArchiveType); begin if not Assigned(FArchive) or (Status <> asInvalid) then FArchiveType := Value else raise EAbArchiveBusy.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetArchiveProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FArchiveProgressMeter, opRemove); FArchiveProgressMeter := Value; ReferenceInterface(FArchiveProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetItemProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FItemProgressMeter, opRemove); FItemProgressMeter := Value; ReferenceInterface(FItemProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; var Ext : string; FS : TStream; begin Result := AssertType; if Result = atUnknown then begin { Guess archive type based on it's extension } Ext := UpperCase(ExtractFileExt(FN)); if (Ext = '.ZIP') or (Ext = '.JAR') or (Ext = '.ZIPX') then Result := atZip else if (Ext = '.EXE') then Result := atSelfExtZip else if (Ext = '.TAR') then Result := atTar else if (Ext = '.GZ') then Result := atGzip else if (Ext = '.TGZ') then Result := atGzippedTar else if (Ext = '.CAB') then Result := atCab else if (Ext = '.BZ2') then Result := atBzip2 else if (Ext = '.TBZ') then Result := atBzippedTar else if (Ext = '.XZ') then Result := atXz else if (Ext = '.TXZ') then Result := atXzippedTar else if (Ext = '.LZMA') then Result := atLzma else if (Ext = '.TLZ') then Result := atLzmaTar else if (Ext = '.ZST') then Result := atZstd else if (Ext = '.TZST') then Result := atZstdTar; end; {$IF NOT DEFINED(ExtractCabSupport)} if Result = atCab then Result := atUnknown; {$ENDIF} if mbFileExists(FN) and (AbFileGetSize(FN) > 0) then begin { If the file doesn't exist (or is empty) presume to make one, otherwise guess or verify the contents } try FS := TFileStreamEx.Create(FN, fmOpenRead or fmShareDenyNone); try if Result <> atUnknown then begin case Result of atZip : begin Result := VerifyZip(FS); end; atSelfExtZip : begin Result := VerifySelfExtracting(FS); end; atTar : begin Result := VerifyTar(FS); end; atGzip, atGzippedTar: begin Result := VerifyGzip(FS); end; {$IF DEFINED(ExtractCabSupport)} atCab : begin Result := VerifyCab(FS); end; {$ENDIF} atBzip2, atBzippedTar: begin Result := VerifyBzip2(FS); end; atXz, atXzippedTar: begin Result := VerifyXz(FS); end; atLzma, atLzmaTar: begin Result := VerifyLzma(FS); end; atZstd, atZStdTar: begin Result := VerifyZstd(FS); end; end; end; if Result = atUnknown then Result := AbDetermineArcType(FS) finally FS.Free; end; except // Skip end; end; end; { -------------------------------------------------------------------------- } function AbDetermineArcType(aStream: TStream): TAbArchiveType; begin { VerifyZip returns true for self-extracting zips too, so test those first } Result := VerifySelfExtracting(aStream); { VerifyZip returns true for example when ZIP file is stored in a TAR archive, so test it first } if Result = atUnknown then Result := VerifyTar(aStream); if Result = atUnknown then Result := VerifyZip(aStream); if Result = atUnknown then Result := VerifyGzip(aStream); if Result = atUnknown then Result := VerifyBzip2(aStream); {$IF DEFINED(ExtractCabSupport)} if Result = atUnknown then Result := VerifyCab(aStream); {$ENDIF} if Result = atUnknown then Result := VerifyXz(aStream); if Result = atUnknown then Result := VerifyZstd(aStream); end; { -------------------------------------------------------------------------- } end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abbitbkt.pas0000644000175000001440000001560015104114162022700 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBitBkt.pas *} {*********************************************************} {* ABBREVIA: Bit bucket memory stream class *} {*********************************************************} unit AbBitBkt; {$I AbDefine.inc} interface uses Classes, AbUtils; type TAbBitBucketStream = class(TStream) private FBuffer : {$IFDEF UNICODE}PByte{$ELSE}PAnsiChar{$ENDIF}; FBufSize : longint; FBufPosn : longint; FPosn : Int64; FSize : Int64; FTail : Int64; protected public constructor Create(aBufSize : cardinal); destructor Destroy; override; function Read(var Buffer; Count : Longint) : Longint; override; function Write(const Buffer; Count : Longint) : Longint; override; function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; procedure ForceSize(aSize : Int64); end; implementation uses Math, SysUtils, AbExcept; {Notes: The buffer is a circular queue without a head pointer; FTail is where data is next going to be written and it wraps indescriminately. The buffer can never be empty--it is always full (initially it is full of binary zeros. The class is designed to act as a bit bucket for the test feature of Abbrevia's zip code; it is not intended as a complete class with many possible applications. It is designed to be written to in a steady progression with some reading back in the recently written stream (the buffer size details how far back the Seek method will work). Seeking outside this buffer will result in exceptions being generated. For testing deflated files, the buffer size should be 32KB, for imploded files, either 8KB or 4KB. The Create constructor limits the buffer size to these values.} {===TAbBitBucketStream===============================================} constructor TAbBitBucketStream.Create(aBufSize : cardinal); begin inherited Create; if (aBufSize <> 4096) and (aBufSize <> 8192) and (aBufSize <> 32768) then FBufSize := 32768 else FBufSize := aBufSize; {add a 1KB leeway} inc(FBufSize, 1024); GetMem(FBuffer, FBufSize); end; {--------} destructor TAbBitBucketStream.Destroy; begin if (FBuffer <> nil) then FreeMem(FBuffer, FBufSize); inherited Destroy; end; {--------} procedure TAbBitBucketStream.ForceSize(aSize : Int64); begin FSize := aSize; end; {--------} function TAbBitBucketStream.Read(var Buffer; Count : Longint) : Longint; var Chunk2Size : Int64; Chunk1Size : Int64; OutBuffer : PByte; begin OutBuffer := @Buffer; {we cannot read more bytes than there is buffer} if (Count > FBufSize) then raise EAbBBSReadTooManyBytes.Create(Count); {calculate the size of the chunks} if (FBufPosn <= FTail) then begin Chunk1Size := FTail - FBufPosn; if (Chunk1Size > Count) then Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk1Size := FBufSize - FBufPosn; if (Chunk1Size > Count) then begin Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk2Size := FTail; if (Chunk2Size > (Count - Chunk1Size)) then Chunk2Size := Count - Chunk1Size; end end; {we cannot read more bytes than there are available} if (Count > (Chunk1Size + Chunk2Size)) then raise EAbBBSReadTooManyBytes.Create(Count); {perform the read} if (Chunk1Size > 0) then begin Move(FBuffer[FBufPosn], OutBuffer^, Chunk1Size); inc(FBufPosn, Chunk1Size); inc(FPosn, Chunk1Size); end; if (Chunk2Size > 0) then begin {we've wrapped} Move(FBuffer[0], (OutBuffer + Chunk1Size)^, Chunk2Size); FBufPosn := Chunk2Size; inc(FPosn, Chunk2Size); end; Result := Count; end; {--------} function TAbBitBucketStream.Write(const Buffer; Count : Longint) : Longint; var Chunk2Size : Int64; Chunk1Size : Int64; InBuffer : PByte; Overage : longint; begin Result := Count; InBuffer := @Buffer; {we cannot write more bytes than there is buffer} while Count > FBufSize do begin Overage := Min(FBufSize, Count - FBufSize); Write(InBuffer^, Overage); Inc(PtrInt(InBuffer), Overage); Dec(Count, Overage); end; {calculate the size of the chunks} Chunk1Size := FBufSize - FTail; if (Chunk1Size > Count) then begin Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk2Size := Count - Chunk1Size; end; {write the first chunk} if (Chunk1Size > 0) then begin Move(InBuffer^, FBuffer[FTail], Chunk1Size); inc(FTail, Chunk1Size); end; {if the second chunk size is not zero, write the second chunk; note that we have wrapped} if (Chunk2Size > 0) then begin Move((InBuffer + Chunk1Size)^, FBuffer[0], Chunk2Size); FTail := Chunk2Size; end; {the stream size and position have changed} inc(FSize, Count); FPosn := FSize; FBufPosn := FTail; end; {--------} function TAbBitBucketStream.Seek(const Offset : Int64; Origin : TSeekOrigin): Int64; var Posn : Int64; BytesBack : longint; begin {calculate the new position} case Origin of soBeginning : Posn := Offset; soCurrent : Posn := FPosn + Offset; soEnd : if (Offset = 0) then begin {special case: position at end of stream} FBufPosn := FTail; FPosn := FSize; Result := FSize; Exit; end else begin Posn := FSize + Offset; end; else raise EAbBBSInvalidOrigin.Create; end; {calculate whether the new position is within the buffer; if not, raise exception} if (Posn > FSize) or (Posn <= (FSize - FBufSize)) then raise EAbBBSSeekOutsideBuffer.Create; {set the internal fields for the new position} FPosn := Posn; BytesBack := FSize - Posn; if (BytesBack <= FTail) then FBufPosn := FTail - BytesBack else FBufPosn := longint(FTail) + FBufSize - BytesBack; {return the new position} Result := Posn; end; {====================================================================} end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abbase.pas0000644000175000001440000000347015104114162022335 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBase.pas *} {*********************************************************} {* ABBREVIA: Base component class *} {*********************************************************} unit AbBase; {$I AbDefine.inc} interface uses Classes; type TAbBaseComponent = class(TComponent) protected {methods} function GetVersion : string; procedure SetVersion(const Value : string); protected {properties} property Version : string read GetVersion write SetVersion stored False; end; implementation uses AbConst; { -------------------------------------------------------------------------- } function TAbBaseComponent.GetVersion : string; begin Result := AbVersionS; end; { -------------------------------------------------------------------------- } procedure TAbBaseComponent.SetVersion(const Value : string); begin {NOP} end; end. doublecmd-1.1.30/plugins/wcx/zip/src/fparchive/abarctyp.pas0000644000175000001440000021342415104114162022727 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbArcTyp.pas *} {*********************************************************} {* ABBREVIA: TABArchive, TABArchiveItem classes *} {*********************************************************} unit AbArcTyp; {$I AbDefine.inc} interface uses Classes, Types, DCStrUtils, AbUtils; { ===== TAbArchiveItem ====================================================== } type TAbArchiveItem = class(TObject) protected {private} NextItem : TAbArchiveItem; FAction : TAbArchiveAction; FCompressedSize : Int64; FCRC32 : Longint; FDiskFileName : string; FExternalFileAttributes : LongWord; FFileName : string; FIsEncrypted : Boolean; FLastModFileTime : Word; FLastModFileDate : Word; FTagged : Boolean; FUncompressedSize : Int64; protected {property methods} function GetCompressedSize : Int64; virtual; function GetCRC32 : Longint; virtual; function GetDiskPath : string; function GetExternalFileAttributes : LongWord; virtual; function GetFileName : string; virtual; function GetIsDirectory: Boolean; virtual; function GetIsEncrypted : Boolean; virtual; function GetLastModFileDate : Word; virtual; function GetLastModFileTime : Word; virtual; { This depends on in what format the attributes are stored in the archive, to which system they refer (MS-DOS, Unix, etc.) and what system we're running on (compile time). } function GetNativeFileAttributes : LongInt; virtual; { This depends on in what format the date/time is stored in the archive (Unix, MS-DOS, ...) and what system we're running on (compile time). Returns MS-DOS local time on Windows, Unix UTC time on Unix. } function GetNativeLastModFileTime : Longint; virtual; function GetStoredPath : string; function GetUncompressedSize : Int64; virtual; procedure SetCompressedSize(const Value : Int64); virtual; procedure SetCRC32(const Value : Longint); virtual; procedure SetExternalFileAttributes( Value : LongWord ); virtual; procedure SetFileName(const Value : string); virtual; procedure SetIsEncrypted(Value : Boolean); virtual; procedure SetLastModFileDate(const Value : Word); virtual; procedure SetLastModFileTime(const Value : Word); virtual; procedure SetUncompressedSize(const Value : Int64); virtual; function GetLastModTimeAsDateTime: TDateTime; virtual; procedure SetLastModTimeAsDateTime(const Value: TDateTime); virtual; public {methods} constructor Create; destructor Destroy; override; function MatchesDiskName(const FileMask : string) : Boolean; function MatchesStoredName(const FileMask : string) : Boolean; function MatchesStoredNameEx(const FileMask : string) : Boolean; public {properties} property Action : TAbArchiveAction read FAction write FAction; property CompressedSize : Int64 read GetCompressedSize write SetCompressedSize; property CRC32 : Longint read GetCRC32 write SetCRC32; property DiskFileName : string read FDiskFileName write FDiskFileName; property DiskPath : string read GetDiskPath; property ExternalFileAttributes : LongWord read GetExternalFileAttributes write SetExternalFileAttributes; property FileName : string read GetFileName write SetFileName; property IsDirectory: Boolean read GetIsDirectory; property IsEncrypted : Boolean read GetIsEncrypted write SetIsEncrypted; property LastModFileDate : Word read GetLastModFileDate write SetLastModFileDate; property LastModFileTime : Word read GetLastModFileTime write SetLastModFileTime; property NativeFileAttributes : LongInt read GetNativeFileAttributes; property NativeLastModFileTime : Longint read GetNativeLastModFileTime; property StoredPath : string read GetStoredPath; property Tagged : Boolean read FTagged write FTagged; property UncompressedSize : Int64 read GetUncompressedSize write SetUncompressedSize; property LastModTimeAsDateTime : TDateTime read GetLastModTimeAsDateTime write SetLastModTimeAsDateTime; end; { ===== TAbArchiveListEnumerator ============================================ } type TAbArchiveList = class; TAbArchiveListEnumerator = class private FIndex: Integer; FList: TAbArchiveList; public constructor Create(aList: TAbArchiveList); function GetCurrent: TAbArchiveItem; function MoveNext: Boolean; property Current: TAbArchiveItem read GetCurrent; end; { ===== TAbArchiveList ====================================================== } TAbArchiveList = class protected {private} FList : TList; FOwnsItems: Boolean; HashTable : array[0..1020] of TAbArchiveItem; protected {methods} function GenerateHash(const S : string) : LongInt; function GetCount : Integer; function Get(Index : Integer) : TAbArchiveItem; procedure Put(Index : Integer; Item : TAbArchiveItem); public {methods} constructor Create(AOwnsItems: Boolean); destructor Destroy; override; function Add(Item : Pointer): Integer; procedure Clear; procedure Delete(Index : Integer); function Find(const FN : string) : Integer; function GetEnumerator: TAbArchiveListEnumerator; function IsActiveDupe(const FN : string) : Boolean; public {properties} property Count : Integer read GetCount; property Items[Index : Integer] : TAbArchiveItem read Get write Put; default; end; { ===== TAbArchive specific types =========================================== } type TAbStoreOption = (soStripDrive, soStripPath, soRemoveDots, soRecurse, soFreshen, soReplace); TAbStoreOptions = set of TAbStoreOption; TAbExtractOption = (eoCreateDirs, eoRestorePath); TAbExtractOptions = set of TAbExtractOption; TAbArchiveStatus = (asInvalid, asIdle, asBusy); TAbArchiveEvent = procedure(Sender : TObject) of object; TAbArchiveConfirmEvent = procedure (Sender : TObject; var Confirm : Boolean) of object; TAbArchiveProgressEvent = procedure(Sender : TObject; Progress : Byte; var Abort : Boolean) of object; TAbArchiveItemEvent = procedure(Sender : TObject; Item : TAbArchiveItem) of object; TAbArchiveItemConfirmEvent = procedure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean) of object; TAbConfirmOverwriteEvent = procedure(var Name : string; var Confirm : Boolean) of object; TAbArchiveItemFailureEvent = procedure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer) of object; TAbArchiveItemExtractEvent = procedure(Sender : TObject; Item : TAbArchiveItem; const NewName : string) of object; TAbArchiveItemExtractToStreamEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream) of object; TAbArchiveItemTestEvent = procedure(Sender : TObject; Item : TAbArchiveItem) of object; TAbArchiveItemInsertEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream) of object; TAbArchiveItemInsertFromStreamEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream) of object; TAbArchiveItemProgressEvent = procedure(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean) of object; TAbProgressEvent = procedure(Progress : Byte; var Abort : Boolean) of object; TAbRequestDiskEvent = procedure(Sender : TObject; var Abort : Boolean) of object; TAbRequestImageEvent = procedure(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean) of object; TAbRequestNthDiskEvent = procedure(Sender : TObject; DiskNumber : Byte; var Abort : Boolean) of object; type TAbArchiveStreamHelper = class protected FStream : TStream; public constructor Create(AStream : TStream); procedure ExtractItemData(AStream : TStream); virtual; abstract; function FindFirstItem : Boolean; virtual; abstract; function FindNextItem : Boolean; virtual; abstract; procedure ReadHeader; virtual; abstract; procedure ReadTail; virtual; abstract; function SeekItem(Index : Integer): Boolean; virtual; abstract; procedure WriteArchiveHeader; virtual; abstract; procedure WriteArchiveItem(AStream : TStream); virtual; abstract; procedure WriteArchiveTail; virtual; abstract; function GetItemCount : Integer; virtual; abstract; end; { ===== TAbArchive ========================================================== } type TAbArchive = class(TObject) public FStream : TStream; FStatus : TAbArchiveStatus; protected {property variables} //These break Encapsulation FArchiveName : string; FAutoSave : Boolean; FBaseDirectory : string; FCurrentItem : TAbArchiveItem; FDOSMode : Boolean; FExtractOptions : TAbExtractOptions; FImageNumber : Word; FInStream : TStream; FIsDirty : Boolean; FSpanningThreshold : Int64; FCompressionLevel : IntPtr; FCompressionMethod : IntPtr; FSuspiciousLinks : TStringList; FItemList : TAbArchiveList; FLogFile : string; FLogging : Boolean; FLogStream : TFileStream; FMode : Word; FOwnsStream : Boolean; FSpanned : Boolean; FStoreOptions : TAbStoreOptions; FTempDir : string; protected {event variables} FOnProcessItemFailure : TAbArchiveItemFailureEvent; FOnArchiveProgress : TAbArchiveProgressEvent; FOnArchiveSaveProgress : TAbArchiveProgressEvent; FOnArchiveItemProgress : TAbArchiveItemProgressEvent; FOnConfirmProcessItem : TAbArchiveItemConfirmEvent; FOnConfirmOverwrite : TAbConfirmOverwriteEvent; FOnConfirmSave : TAbArchiveConfirmEvent; FOnLoad : TAbArchiveEvent; FOnProgress : TAbProgressEvent; FOnRequestImage : TAbRequestImageEvent; FOnSave : TAbArchiveEvent; protected {methods} constructor CreateInit; procedure CheckValid; function ConfirmPath(Item : TAbArchiveItem; const NewName : string; out UseName : string) : Boolean; procedure FreshenAt(Index : Integer); function FreshenRequired(Item : TAbArchiveItem) : Boolean; procedure GetFreshenTarget(Item : TAbArchiveItem); function GetItemCount : Integer; procedure MakeLogEntry(const FN: string; LT : TAbLogType); procedure MakeFullNames(const SourceFileName: String; const ArchiveDirectory: String; out FullSourceFileName: String; out FullArchiveFileName: String); procedure ReplaceAt(Index : Integer); procedure SaveIfNeeded(aItem : TAbArchiveItem); procedure SetBaseDirectory(Value : string); procedure SetLogFile(const Value : string); procedure SetLogging(Value : Boolean); protected {abstract methods} function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; {SourceFileName - full or relative path to a file/dir on some file system If full path, BaseDirectory is used to determine relative path} {ArchiveDirectory - path to a directory in the archive the file/dir will be in} {Example: FBaseDirectory = /dir SourceFileName = /dir/subdir/file ArchiveDirectory = files/storage (or files/storage/) -> name in archive = files/storage/subdir/file} virtual; abstract; overload; function CreateItem(const FileSpec : string): TAbArchiveItem; overload; procedure ExtractItemAt(Index : Integer; const UseName : string); virtual; abstract; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); virtual; abstract; procedure LoadArchive; virtual; abstract; procedure SaveArchive; virtual; abstract; procedure TestItemAt(Index : Integer); virtual; abstract; protected {virtual methods} procedure DoProcessItemFailure(Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); virtual; procedure DoArchiveSaveProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveItemProgress(Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); virtual; procedure DoConfirmOverwrite(var FileName : string; var Confirm : Boolean); virtual; procedure DoConfirmProcessItem(Item : TAbArchiveItem; const ProcessType : TAbProcessType; var Confirm : Boolean); virtual; procedure DoConfirmSave(var Confirm : Boolean); virtual; procedure DoLoad; virtual; procedure DoProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoSave; virtual; function FixName(const Value : string) : string; virtual; function GetSpanningThreshold : Int64; virtual; function GetSupportsEmptyFolders : Boolean; virtual; procedure SetSpanningThreshold( Value : Int64 ); virtual; protected {properties and events} property InStream : TStream read FInStream; public {methods} constructor Create(const FileName : string; Mode : Word); virtual; constructor CreateFromStream(aStream : TStream; const aArchiveName : string); virtual; destructor Destroy; override; procedure Add(aItem : TAbArchiveItem); virtual; procedure AddEntry(const Path : String; const ArchiveDirectory : String); procedure AddFiles(const FileMask : string; SearchAttr : Integer); procedure AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); procedure AddFromStream(const NewName : string; aStream : TStream); procedure ClearTags; procedure Delete(aItem : TAbArchiveItem); procedure DeleteAt(Index : Integer); procedure DeleteFiles(const FileMask : string); procedure DeleteFilesEx(const FileMask, ExclusionMask : string); procedure DeleteTaggedItems; procedure Extract(aItem : TAbArchiveItem; const NewName : string); procedure ExtractAt(Index : Integer; const NewName : string); procedure ExtractFiles(const FileMask : string); procedure ExtractFilesEx(const FileMask, ExclusionMask : string); procedure ExtractTaggedItems; procedure ExtractToStream(const aFileName : string; aStream : TStream); function FindFile(const aFileName : string): Integer; function FindItem(aItem : TAbArchiveItem): Integer; procedure Freshen(aItem : TAbArchiveItem); procedure FreshenFiles(const FileMask : string); procedure FreshenFilesEx(const FileMask, ExclusionMask : string); procedure FreshenTaggedItems; procedure Load; virtual; procedure Move(aItem : TAbArchiveItem; const NewStoredPath : string); virtual; procedure Replace(aItem : TAbArchiveItem); procedure Save; virtual; procedure TagItems(const FileMask : string); procedure TestTaggedItems; procedure TestAt(Index : Integer); procedure UnTagItems(const FileMask : string); procedure VerifyItem(Item: TAbArchiveItem); procedure DoDeflateProgress(aPercentDone : integer); virtual; procedure DoInflateProgress(aPercentDone : integer); virtual; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); virtual; public {properties} property OnProgress : TAbProgressEvent read FOnProgress write FOnProgress; property ArchiveName : string read FArchiveName; property AutoSave : Boolean read FAutoSave write FAutoSave; property BaseDirectory : string read FBaseDirectory write SetBaseDirectory; property Count : Integer read GetItemCount; property DOSMode : Boolean read FDOSMode write FDOSMode; property ExtractOptions : TAbExtractOptions read FExtractOptions write FExtractOptions; property IsDirty : Boolean read FIsDirty write FIsDirty; property ItemList : TAbArchiveList read FItemList; property LogFile : string read FLogFile write SetLogFile; property Logging : Boolean read FLogging write SetLogging; property Mode : Word read FMode; property Spanned : Boolean read FSpanned; property SpanningThreshold : Int64 read GetSpanningThreshold write SetSpanningThreshold; property Status : TAbArchiveStatus read FStatus; property StoreOptions : TAbStoreOptions read FStoreOptions write FStoreOptions; property SupportsEmptyFolders : Boolean read GetSupportsEmptyFolders; property TempDirectory : string read FTempDir write FTempDir; property CompressionLevel: IntPtr read FCompressionLevel write FCompressionLevel; property CompressionMethod: IntPtr read FCompressionMethod write FCompressionMethod; public {events} property OnProcessItemFailure : TAbArchiveItemFailureEvent read FOnProcessItemFailure write FOnProcessItemFailure; property OnArchiveProgress : TAbArchiveProgressEvent read FOnArchiveProgress write FOnArchiveProgress; property OnArchiveSaveProgress : TAbArchiveProgressEvent read FOnArchiveSaveProgress write FOnArchiveSaveProgress; property OnArchiveItemProgress : TAbArchiveItemProgressEvent read FOnArchiveItemProgress write FOnArchiveItemProgress; property OnConfirmProcessItem : TAbArchiveItemConfirmEvent read FOnConfirmProcessItem write FOnConfirmProcessItem; property OnConfirmOverwrite : TAbConfirmOverwriteEvent read FOnConfirmOverwrite write FOnConfirmOverwrite; property OnConfirmSave : TAbArchiveConfirmEvent read FOnConfirmSave write FOnConfirmSave; property OnLoad : TAbArchiveEvent read FOnLoad write FOnLoad; property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write FOnRequestImage; property OnSave : TAbArchiveEvent read FOnSave write FOnSave; end; { ===== TAbExtraField ======================================================= } type PAbExtraSubField = ^TAbExtraSubField; TAbExtraSubField = packed record ID : Word; Len : Word; Data : record end; end; TAbExtraField = class private {fields} FBuffer : TByteDynArray; private {methods} procedure DeleteField(aSubField : PAbExtraSubField); function FindField(aID : Word; out aSubField : PAbExtraSubField) : Boolean; function FindNext(var aCurField : PAbExtraSubField) : Boolean; function GetCount : Integer; function GetID(aIndex : Integer): Word; procedure SetBuffer(const aValue : TByteDynArray); protected {methods} procedure Changed; virtual; public {methods} procedure Assign(aSource : TAbExtraField); procedure Clear; procedure CloneFrom(aSource : TAbExtraField; aID : Word); procedure Delete(aID : Word); function Get(aID : Word; out aData : Pointer; out aDataSize : Word) : Boolean; function GetStream(aID : Word; out aStream : TStream): Boolean; function Has(aID : Word): Boolean; procedure LoadFromStream(aStream : TStream; aSize : Word); procedure Put(aID : Word; const aData; aDataSize : Word); public {properties} property Count : Integer read GetCount; property Buffer : TByteDynArray read FBuffer write SetBuffer; property IDs[aIndex : Integer]: Word read GetID; end; const AbDefAutoSave = False; AbDefExtractOptions = [eoCreateDirs]; AbDefStoreOptions = [soStripDrive, soRemoveDots]; AbBufferSize = 32768; AbLastDisk = -1; AbLastImage = -1; implementation {.$R ABRES.R32} uses RTLConsts, SysUtils, AbExcept, AbDfBase, AbConst, AbResString, DCOSUtils, DCClassesUtf8; { TAbArchiveItem implementation ============================================ } { TAbArchiveItem } constructor TAbArchiveItem.Create; begin inherited Create; FCompressedSize := 0; FUncompressedSize := 0; FFileName := ''; FAction := aaNone; FLastModFileTime := 0; FLastModFileDate := 0; end; { -------------------------------------------------------------------------- } destructor TAbArchiveItem.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetCompressedSize : Int64; begin Result := FCompressedSize; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetCRC32 : LongInt; begin Result := FCRC32; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetDiskPath : string; begin Result := ExtractFilePath(DiskFileName); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetExternalFileAttributes : LongWord; begin Result := FExternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetFileName : string; begin Result := FFileName; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetIsDirectory: Boolean; begin Result := False; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetIsEncrypted : Boolean; begin Result := FIsEncrypted; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModFileTime : Word; begin Result := FLastModFileTime; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModFileDate : Word; begin Result := FLastModFileDate; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetNativeFileAttributes : LongInt; begin {$IFDEF MSWINDOWS} if IsDirectory then Result := faDirectory else Result := 0; {$ENDIF} {$IFDEF UNIX} if IsDirectory then Result := AB_FPERMISSION_GENERIC or AB_FPERMISSION_OWNEREXECUTE else Result := AB_FPERMISSION_GENERIC; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetNativeLastModFileTime : Longint; begin LongRec(Result).Hi := LastModFileDate; LongRec(Result).Lo := LastModFileTime; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetStoredPath : string; begin Result := ExtractFilePath(DiskFileName); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetUnCompressedSize : Int64; begin Result := FUnCompressedSize; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesDiskName(const FileMask : string) : Boolean; var DiskName, Mask : string; begin DiskName := DiskFileName; AbUnfixName(DiskName); Mask := FileMask; AbUnfixName(Mask); Result := AbFileMatch(DiskName, Mask); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesStoredName(const FileMask : string) : Boolean; var Value : string; Drive, Dir, Name : string; begin Value := FileMask; AbUnfixName(Value); AbParseFileName(Value, Drive, Dir, Name); Value := Dir + Name; Name := FileName; AbUnfixName(Name); if IsDirectory then Name := ExcludeTrailingPathDelimiter(Name); Result := AbFileMatch(Name, Value); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesStoredNameEx(const FileMask : string) : Boolean; var I, J: Integer; MaskPart: string; begin Result := True; I := 1; while I <= Length(FileMask) do begin J := I; while (I <= Length(FileMask)) and (FileMask[I] <> PathSep {';'}) do Inc(I); MaskPart := Trim(Copy(FileMask, J, I - J)); if (I <= Length(FileMask)) and (FileMask[I] = PathSep {';'}) then Inc(I); if MatchesStoredName(MaskPart) then Exit; end; Result := False; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetCompressedSize(const Value : Int64); begin FCompressedSize := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetCRC32(const Value : LongInt); begin FCRC32 := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetExternalFileAttributes( Value : LongWord ); begin FExternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetFileName(const Value : string); begin FFileName := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetIsEncrypted(Value : Boolean); begin FIsEncrypted := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModFileDate(const Value : Word); begin FLastModFileDate := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModFileTime(const Value : Word); begin FLastModFileTime := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetUnCompressedSize(const Value : Int64); begin FUnCompressedSize := Value; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModTimeAsDateTime(const Value: TDateTime); var FileDate : Integer; begin FileDate := AbDateTimeToDosFileDate(Value); LastModFileTime := LongRec(FileDate).Lo; LastModFileDate := LongRec(FileDate).Hi; end; { -------------------------------------------------------------------------- } { TAbArchiveEnumeratorList implementation ================================== } { TAbArchiveEnumeratorList } constructor TAbArchiveListEnumerator.Create(aList: TAbArchiveList); begin inherited Create; FIndex := -1; FList := aList; end; { -------------------------------------------------------------------------- } function TAbArchiveListEnumerator.GetCurrent: TAbArchiveItem; begin Result := FList[FIndex]; end; { -------------------------------------------------------------------------- } function TAbArchiveListEnumerator.MoveNext: Boolean; begin Result := FIndex < FList.Count - 1; if Result then Inc(FIndex); end; { -------------------------------------------------------------------------- } { TAbArchiveList implementation ============================================ } { TAbArchiveList } constructor TAbArchiveList.Create(AOwnsItems: Boolean); begin inherited Create; FList := TList.Create; FOwnsItems := AOwnsItems; end; { -------------------------------------------------------------------------- } destructor TAbArchiveList.Destroy; begin Clear; FList.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbArchiveList.Add(Item : Pointer) : Integer; var H : LongInt; begin if FOwnsItems then begin H := GenerateHash(TAbArchiveItem(Item).FileName); TAbArchiveItem(Item).NextItem := HashTable[H]; HashTable[H] := TAbArchiveItem(Item); end; Result := FList.Add(Item); end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Clear; var i : Integer; begin if FOwnsItems then for i := 0 to Count - 1 do TObject(FList[i]).Free; FList.Clear; FillChar(HashTable, SizeOf(HashTable), #0); end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Delete(Index: Integer); var Look : TAbArchiveItem; Last : Pointer; FN : string; begin if FOwnsItems then begin FN := TAbArchiveItem(FList[Index]).FileName; Last := @HashTable[GenerateHash(FN)]; Look := TAbArchiveItem(Last^); while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Move(Look.NextItem, Last^, SizeOf(Pointer)); Break; end; Last := @Look.NextItem; Look := TAbArchiveItem(Last^); end; TObject(FList[Index]).Free; end; FList.Delete(Index); end; { -------------------------------------------------------------------------- } function TAbArchiveList.Find(const FN : string) : Integer; var Look : TAbArchiveItem; I : Integer; begin if FOwnsItems then begin Look := HashTable[GenerateHash(FN)]; while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Result := FList.IndexOf(Look); Exit; end; Look := Look.NextItem; end; end else begin for I := 0 to FList.Count - 1 do if CompareText(Items[I].FileName, FN) = 0 then begin Result := I; Exit; end; end; Result := -1; end; { -------------------------------------------------------------------------- } {$IFOPT Q+}{$DEFINE OVERFLOW_CHECKS_ON}{$Q-}{$ENDIF} function TAbArchiveList.GenerateHash(const S : string) : LongInt; var G : LongInt; I : Integer; U : string; begin Result := 0; U := AnsiUpperCase(S); for I := 1 to Length(U) do begin Result := (Result shl 4) + Ord(U[I]); G := LongInt(Result and $F0000000); if (G <> 0) then Result := Result xor (G shr 24); Result := Result and (not G); end; Result := Result mod 1021; end; {$IFDEF OVERFLOW_CHECKS_ON}{$Q+}{$ENDIF} { -------------------------------------------------------------------------- } function TAbArchiveList.Get(Index : Integer): TAbArchiveItem; begin Result := TAbArchiveItem(FList[Index]); end; { -------------------------------------------------------------------------- } function TAbArchiveList.GetCount : Integer; begin Result := FList.Count; end; { -------------------------------------------------------------------------- } function TAbArchiveList.GetEnumerator: TAbArchiveListEnumerator; begin Result := TAbArchiveListEnumerator.Create(Self); end; { -------------------------------------------------------------------------- } function TAbArchiveList.IsActiveDupe(const FN : string) : Boolean; var Look : TAbArchiveItem; I : Integer; begin if FOwnsItems then begin Look := HashTable[GenerateHash(FN)]; while Look <> nil do begin if (CompareText(Look.FileName, FN) = 0) and (Look.Action <> aaDelete) then begin Result := True; Exit; end; Look := Look.NextItem; end; end else begin for I := 0 to Count - 1 do if (CompareText(Items[I].FileName, FN) = 0) and (Items[I].Action <> aaDelete) then begin Result := True; Exit; end; end; Result := False; end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Put(Index : Integer; Item : TAbArchiveItem); var H : LongInt; Look : TAbArchiveItem; Last : Pointer; FN : string; begin if FOwnsItems then begin FN := TAbArchiveItem(FList[Index]).FileName; Last := @HashTable[GenerateHash(FN)]; Look := TAbArchiveItem(Last^); { Delete old index } while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Move(Look.NextItem, Last^, SizeOf(Pointer)); Break; end; Last := @Look.NextItem; Look := TAbArchiveItem(Last^); end; { Free old instance } TObject(FList[Index]).Free; { Add new index } H := GenerateHash(TAbArchiveItem(Item).FileName); TAbArchiveItem(Item).NextItem := HashTable[H]; HashTable[H] := TAbArchiveItem(Item); end; { Replace pointer } FList[Index] := Item; end; { TAbArchive implementation ================================================ } { TAbArchive } constructor TAbArchive.CreateInit; begin inherited Create; FIsDirty := False; FAutoSave := False; FItemList := TAbArchiveList.Create(True); StoreOptions := []; ExtractOptions := []; FStatus := asIdle; FOnProgress := DoProgress; // BaseDirectory := ExtractFilePath(ParamStr(0)); end; { -------------------------------------------------------------------------- } constructor TAbArchive.Create(const FileName : string; Mode : Word); {create an archive by opening a filestream on filename with the given mode} begin FOwnsStream := True; CreateFromStream(TFileStreamEx.Create(FileName, Mode), FileName); FMode := Mode; end; { -------------------------------------------------------------------------- } constructor TAbArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); {create an archive based on an existing stream} begin CreateInit; FArchiveName := aArchiveName; FStream := aStream; end; { -------------------------------------------------------------------------- } destructor TAbArchive.Destroy; begin FItemList.Free; if FOwnsStream then FStream.Free; FLogStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Add(aItem : TAbArchiveItem); var Confirm, ItemAdded : Boolean; begin ItemAdded := False; try CheckValid; if FItemList.IsActiveDupe(aItem.FileName) then begin if (soFreshen in StoreOptions) then Freshen(aItem) else if (soReplace in StoreOptions) then Replace(aItem) else DoProcessItemFailure(aItem, ptAdd, ecAbbrevia, AbDuplicateName); Exit; end; DoConfirmProcessItem(aItem, ptAdd, Confirm); if not Confirm then Exit; aItem.Action := aaAdd; FItemList.Add(aItem); ItemAdded := True; FIsDirty := True; if AutoSave then Save; finally if not ItemAdded then aItem.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddEntry(const Path : String; const ArchiveDirectory : String); var Item : TAbArchiveItem; FullSourceFileName, FullArchiveFileName : String; begin MakeFullNames(Path, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); if (FullSourceFileName <> FArchiveName) then begin Item := CreateItem(Path, ArchiveDirectory); Add(Item); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFiles(const FileMask : string; SearchAttr : Integer); {Add files to the archive where the disk filespec matches} begin AddFilesEx(FileMask, '', SearchAttr); end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); {Add files matching Filemask except those matching ExclusionMask} var PathType : TAbPathType; IsWild : Boolean; SaveDir : string; Mask : string; MaskF : string; procedure CreateItems(Wild, Recursing : Boolean); var i : Integer; Files : TStrings; FilterList : TStringList; Item : TAbArchiveItem; begin FilterList := TStringList.Create; try if (MaskF <> '') then AbFindFilesEx(MaskF, SearchAttr, FilterList, Recursing); Files := TStringList.Create; try AbFindFilesEx(Mask, SearchAttr, Files, Recursing); if (Files.Count > 0) then for i := 0 to pred(Files.Count) do if FilterList.IndexOf(Files[i]) < 0 then if not Wild then begin if (Files[i] <> FArchiveName) then begin Item := CreateItem(Files[i]); Add(Item); end; end else begin if (AbAddBackSlash(FBaseDirectory) + Files[i]) <> FArchiveName then begin Item := CreateItem(Files[i]); Add(Item); end; end; finally Files.Free; end; finally FilterList.Free; end; end; begin if not SupportsEmptyFolders then SearchAttr := SearchAttr and not faDirectory; CheckValid; IsWild := (Pos('*', FileMask) > 0) or (Pos('?', FileMask) > 0); PathType := AbGetPathType(FileMask); Mask := FileMask; AbUnfixName(Mask); MaskF := ExclusionMask; AbUnfixName(MaskF); case PathType of ptNone, ptRelative : begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try CreateItems(IsWild, soRecurse in StoreOptions); finally if BaseDirectory <> '' then ChDir(SaveDir); end; end; ptAbsolute : begin CreateItems(IsWild, soRecurse in StoreOptions); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFromStream(const NewName : string; aStream : TStream); {Add an item to the archive directly from a TStream descendant} var Confirm : Boolean; Item : TAbArchiveItem; PT : TAbProcessType; begin Item := CreateItem(NewName); CheckValid; PT := ptAdd; if FItemList.IsActiveDupe(NewName) then begin if ((soFreshen in StoreOptions) or (soReplace in StoreOptions)) then begin Item.Free; Item := FItemList[FItemList.Find(NewName)]; PT := ptReplace; end else begin DoProcessItemFailure(Item, ptAdd, ecAbbrevia, AbDuplicateName); Item.Free; Exit; end; end; DoConfirmProcessItem(Item, PT, Confirm); if not Confirm then Exit; FInStream := aStream; Item.Action := aaStreamAdd; if (PT = ptAdd) then FItemList.Add(Item); FIsDirty := True; Save; FInStream := nil; end; { -------------------------------------------------------------------------- } procedure TAbArchive.CheckValid; begin if Status = asInvalid then raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ClearTags; {Clear all tags from the archive} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do TAbArchiveItem(FItemList[i]).Tagged := False; end; { -------------------------------------------------------------------------- } function TAbArchive.ConfirmPath(Item : TAbArchiveItem; const NewName : string; out UseName : string) : Boolean; var Path : string; begin if Item.IsDirectory and not (ExtractOptions >= [eoRestorePath, eoCreateDirs]) then begin Result := False; Exit; end; if (NewName = '') then begin UseName := Item.FileName; AbUnfixName(UseName); if Item.IsDirectory then UseName := ExcludeTrailingPathDelimiter(UseName); if (not (eoRestorePath in ExtractOptions)) then UseName := ExtractFileName(UseName); end else UseName := NewName; if (AbGetPathType(UseName) <> ptAbsolute) then UseName := AbAddBackSlash(BaseDirectory) + UseName; Path := ExtractFileDir(UseName); if (Path <> '') and not mbDirectoryExists(Path) then if (eoCreateDirs in ExtractOptions) then AbCreateDirectory(Path) else raise EAbNoSuchDirectory.Create; Result := True; if not Item.IsDirectory and mbFileExists(UseName) then DoConfirmOverwrite(UseName, Result); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Delete(aItem : TAbArchiveItem); {delete an item from the archive} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then DeleteAt(Index); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteAt(Index : Integer); {delete the item at the index from the archive} var Confirm : Boolean; begin CheckValid; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptDelete, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaDelete; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteFiles(const FileMask : string); {delete all files from the archive that match the file mask} begin DeleteFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteFilesEx(const FileMask, ExclusionMask : string); {Delete files matching Filemask except those matching ExclusionMask} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) then if not MatchesStoredNameEx(ExclusionMask) then DeleteAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteTaggedItems; {delete all tagged items from the archive} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if Tagged then DeleteAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoProcessItemFailure(Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); begin if Assigned(FOnProcessItemFailure) then FOnProcessItemFailure(Self, Item, ProcessType, ErrorClass, ErrorCode); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveSaveProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveSaveProgress) then FOnArchiveSaveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveProgress) then FOnArchiveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveItemProgress(Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveItemProgress) then FOnArchiveItemProgress(Self, Item, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmOverwrite(var FileName : string; var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmOverwrite) then FOnConfirmOverwrite(FileName, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmProcessItem(Item : TAbArchiveItem; const ProcessType : TAbProcessType; var Confirm : Boolean); const ProcessTypeToLogType : array[TAbProcessType] of TAbLogType = (ltAdd, ltDelete, ltExtract, ltFreshen, ltMove, ltReplace, ltFoundUnhandled); begin Confirm := True; if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(Self, Item, ProcessType, Confirm); if (Confirm and FLogging) then MakeLogEntry(Item.Filename, ProcessTypeToLogType[ProcessType]); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmSave(var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmSave) then FOnConfirmSave(Self, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoDeflateProgress(aPercentDone: integer); var Abort : Boolean; begin DoProgress(aPercentDone, Abort); if Abort then raise EAbAbortProgress.Create(AbUserAbortS); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoInflateProgress(aPercentDone: integer); var Abort : Boolean; begin DoProgress(aPercentDone, Abort); if Abort then raise EAbAbortProgress.Create(AbUserAbortS); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoLoad; begin if Assigned(FOnLoad) then FOnLoad(Self); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; DoArchiveItemProgress(FCurrentItem, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoSave; begin if Assigned(FOnSave) then FOnSave(Self); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Extract(aItem : TAbArchiveItem; const NewName : string); {extract an item from the archive} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then ExtractAt(Index, NewName); end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractAt(Index : Integer; const NewName : string); {extract an item from the archive at Index} var Confirm : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; UseName : string; begin CheckValid; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptExtract, Confirm); if not Confirm then Exit; if not ConfirmPath(FItemList[Index], NewName, UseName) then Exit; try FCurrentItem := FItemList[Index]; ExtractItemAt(Index, UseName); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptExtract, ErrorClass, ErrorCode); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractToStream(const aFileName : string; aStream : TStream); {extract an item from the archive at Index directly to a stream} var Confirm : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; Index : Integer; begin CheckValid; Index := FindFile(aFileName); if (Index = -1) then Exit; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptExtract, Confirm); if not Confirm then Exit; FCurrentItem := FItemList[Index]; try ExtractItemToStreamAt(Index, aStream); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptExtract, ErrorClass, ErrorCode); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} begin ExtractFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractFilesEx(const FileMask, ExclusionMask : string); {Extract files matching Filemask except those matching ExclusionMask} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) and not MatchesStoredNameEx(ExclusionMask) and ((eoCreateDirs in ExtractOptions) or not IsDirectory) then ExtractAt(i, ''); DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractTaggedItems; {extract all tagged items from the archive} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if Tagged then ExtractAt(i, ''); DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.TestTaggedItems; {test all tagged items in the archive} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if Tagged then begin FCurrentItem := FItemList[i]; TestItemAt(i); end; DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.TestAt(Index: Integer); begin FCurrentItem := FItemList[Index]; TestItemAt(Index); end; { -------------------------------------------------------------------------- } function TAbArchive.FindFile(const aFileName : string): Integer; {find the index of the specified file} begin Result := FItemList.Find(aFileName); end; { -------------------------------------------------------------------------- } function TAbArchive.FindItem(aItem : TAbArchiveItem): Integer; {find the index of the specified item} begin Result := FItemList.Find(aItem.FileName); end; { -------------------------------------------------------------------------- } function TAbArchive.FixName(const Value : string) : string; var lValue: string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := AbAddBackSlash(BaseDirectory) + lValue; end; lValue := AbGetShortFileSpec(lValue); end; {$ENDIF} {strip drive stuff} if soStripDrive in StoreOptions then AbStripDrive(lValue); {check for a leading backslash} if lValue[1] = AbPathDelim then System.Delete(lValue, 1, 1); if soStripPath in StoreOptions then begin lValue := ExtractFileName(lValue); end; if soRemoveDots in StoreOptions then AbStripDots(lValue); Result := lValue; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Freshen(aItem : TAbArchiveItem); {freshen the item} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then begin FreshenAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenAt(Index : Integer); {freshen item at index} var Confirm : Boolean; FR : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; begin CheckValid; SaveIfNeeded(FItemList[Index]); GetFreshenTarget(FItemList[Index]); FR := False; try FR := FreshenRequired(FItemList[Index]); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptFreshen, ErrorClass, ErrorCode); end; end; if not FR then Exit; DoConfirmProcessItem(FItemList[Index], ptFreshen, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaFreshen; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenFiles(const FileMask : string); {freshen all items that match the file mask} begin FreshenFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenFilesEx(const FileMask, ExclusionMask : string); {freshen all items that match the file mask} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) then if not MatchesStoredNameEx(ExclusionMask) then FreshenAt(i); end; end; end; { -------------------------------------------------------------------------- } function TAbArchive.FreshenRequired(Item : TAbArchiveItem) : Boolean; var FS : TFileStreamEx; DateTime : LongInt; FileTime : Word; FileDate : Word; Matched : Boolean; SaveDir : string; begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try FS := TFileStreamEx.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); try DateTime := FileGetDate(FS.Handle); FileTime := LongRec(DateTime).Lo; FileDate := LongRec(DateTime).Hi; Matched := (Item.LastModFileDate = FileDate) and (Item.LastModFileTime = FileTime) and (Item.UncompressedSize = FS.Size); Result := not Matched; finally FS.Free; end; finally if BaseDirectory <> '' then ChDir(SaveDir); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenTaggedItems; {freshen all tagged items} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if Tagged then FreshenAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.GetFreshenTarget(Item : TAbArchiveItem); var PathType : TAbPathType; Files : TStrings; SaveDir : string; DName : string; begin PathType := AbGetPathType(Item.DiskFileName); if (soRecurse in StoreOptions) and (PathType = ptNone) then begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try Files := TStringList.Create; try // even if archive supports empty folder we don't have to // freshen it because there is no data, although, the timestamp // can be update since the folder was added AbFindFiles(Item.FileName, faAnyFile and not faDirectory, Files, True); if Files.Count > 0 then begin DName := AbAddBackSlash(BaseDirectory) + Files[0]; AbUnfixName(DName); Item.DiskFileName := DName; end else Item.DiskFileName := ''; finally Files.Free; end; finally if BaseDirectory <> '' then ChDir(SaveDir); end; end else begin if (BaseDirectory <> '') then DName := AbAddBackSlash(BaseDirectory) + Item.FileName else if AbGetPathType(Item.DiskFileName) = ptAbsolute then DName := Item.DiskFileName else DName := Item.FileName; AbUnfixName(DName); Item.DiskFileName := DName; end; end; { -------------------------------------------------------------------------- } function TAbArchive.GetSpanningThreshold : Int64; begin Result := FSpanningThreshold; end; { -------------------------------------------------------------------------- } function TAbArchive.GetSupportsEmptyFolders : Boolean; begin Result := False; end; { -------------------------------------------------------------------------- } function TAbArchive.GetItemCount : Integer; begin if Assigned(FItemList) then Result := FItemList.Count else Result := 0; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Load; {load the archive} begin try LoadArchive; FStatus := asIdle; finally DoLoad; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.MakeLogEntry(const FN: string; LT : TAbLogType); const LogTypeRes : array[TAbLogType] of string = (AbLtAddS, AbLtDeleteS, AbLtExtractS, AbLtFreshenS, AbLtMoveS, AbLtReplaceS, AbLtStartS, AbUnhandledEntityS); var Buf : string; begin if Assigned(FLogStream) then begin Buf := FN + LogTypeRes[LT] + DateTimeToStr(Now) + sLineBreak; FLogStream.Write(Buf[1], Length(Buf) * SizeOf(Char)); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.MakeFullNames(const SourceFileName: String; const ArchiveDirectory: String; out FullSourceFileName: String; out FullArchiveFileName: String); var PathType : TAbPathType; RelativeSourceFileName: String; begin PathType := AbGetPathType(SourceFileName); case PathType of ptNone, ptRelative : begin if FBaseDirectory <> '' then FullSourceFileName := AbAddBackSlash(FBaseDirectory) + SourceFileName else FullSourceFileName := SourceFileName; RelativeSourceFileName := SourceFileName; end; ptAbsolute : begin FullSourceFileName := SourceFileName; if FBaseDirectory <> '' then RelativeSourceFileName := ExtractRelativepath(AbAddBackSlash(FBaseDirectory), SourceFileName) else RelativeSourceFileName := ExtractFileName(SourceFileName); end; end; if ArchiveDirectory <> '' then FullArchiveFileName := AbAddBackSlash(ArchiveDirectory) + RelativeSourceFileName else FullArchiveFileName := RelativeSourceFileName; FullArchiveFileName := FixName(FullArchiveFileName); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Move(aItem : TAbArchiveItem; const NewStoredPath : string); var Confirm : Boolean; Found : Boolean; i : Integer; FixedPath: string; begin CheckValid; FixedPath := FixName(NewStoredPath); Found := False; if Count > 0 then for i := 0 to pred(Count) do if (ItemList[i] <> aItem) and SameText(FixedPath, ItemList[i].FileName) and (ItemList[i].Action <> aaDelete) then begin Found := True; Break; end; if Found then begin DoProcessItemFailure(aItem, ptMove, ecAbbrevia, AbDuplicateName); {even if something gets done in the AddItemFailure, we don't want to continue...} Exit; end; SaveIfNeeded(aItem); DoConfirmProcessItem(aItem, ptMove, Confirm); if not Confirm then Exit; with aItem do begin FileName := FixedPath; Action := aaMove; end; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Replace(aItem : TAbArchiveItem); {replace the item} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then begin ReplaceAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ReplaceAt(Index : Integer); {replace item at Index} var Confirm : Boolean; begin CheckValid; SaveIfNeeded(FItemList[Index]); GetFreshenTarget(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptReplace, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaReplace; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Save; {save the archive} var Confirm : Boolean; begin if Status = asInvalid then Exit; if not FIsDirty then Exit; DoConfirmSave(Confirm); if not Confirm then Exit; SaveArchive; FIsDirty := False; DoSave; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SaveIfNeeded(aItem : TAbArchiveItem); begin if (aItem.Action <> aaNone) then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetBaseDirectory(Value : string); begin if (Value <> '') then if Value[Length(Value)] = AbPathDelim then if (Length(Value) > 1) and (Value[Length(Value) - 1] <> ':') then System.Delete(Value, Length(Value), 1); if (Length(Value) = 0) or mbDirectoryExists(Value) then FBaseDirectory := Value else raise EAbNoSuchDirectory.Create; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetSpanningThreshold( Value : Int64 ); begin FSpanningThreshold := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetLogFile(const Value : string); begin FLogFile := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetLogging(Value : Boolean); begin FLogging := Value; if Assigned(FLogStream) then begin FLogStream.Free; FLogStream := nil; end; if FLogging and (FLogFile <> '') then begin try FLogStream := TFileStream.Create(FLogFile, fmCreate or fmOpenWrite); MakeLogEntry(FArchiveName, ltStart); except raise EAbException.Create(AbLogCreateErrorS); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.TagItems(const FileMask : string); {tag all items that match the mask} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do with TAbArchiveItem(FItemList[i]) do begin if MatchesStoredNameEx(FileMask) then Tagged := True; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.UnTagItems(const FileMask : string); {clear tags for all items that match the mask} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do with TAbArchiveItem(FItemList[i]) do begin if MatchesStoredNameEx(FileMask) then Tagged := False; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.VerifyItem(Item: TAbArchiveItem); var Index: Integer; AFileName: String; begin if FSuspiciousLinks.Count > 0 then begin AFileName := NormalizePathDelimiters(Item.FileName); for Index := 0 to FSuspiciousLinks.Count - 1 do begin if IsInPath(FSuspiciousLinks[Index], AFileName, True, True) then raise EInvalidOpException.Create(AbSuspiciousSymlinkOperation); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin raise EAbSpanningNotSupported.Create; end; { -------------------------------------------------------------------------- } function TAbArchive.CreateItem(const FileSpec : string): TAbArchiveItem; begin // This function is used by Abbrevia. We don't use it but a dummy // definition is needed for the code to compile successfully. raise Exception.Create(''); end; { -------------------------------------------------------------------------- } { TAbExtraField implementation ============================================= } procedure TAbExtraField.Assign(aSource : TAbExtraField); begin SetBuffer(aSource.Buffer); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Changed; begin // No-op end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Clear; begin FBuffer := nil; Changed; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.CloneFrom(aSource : TAbExtraField; aID : Word); var Data : Pointer; DataSize : Word; begin if aSource.Get(aID, Data, DataSize) then Put(aID, Data, DataSize) else Delete(aID); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Delete(aID : Word); var SubField : PAbExtraSubField; begin if FindField(aID, SubField) then begin DeleteField(SubField); Changed; end; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.DeleteField(aSubField : PAbExtraSubField); var Len, Offset : Integer; begin Len := SizeOf(TAbExtraSubField) + aSubField.Len; Offset := Pointer(aSubField) - Pointer(FBuffer); if Offset + Len < Length(FBuffer) then Move(FBuffer[Offset + Len], aSubField^, Length(FBuffer) - Offset - Len); SetLength(FBuffer, Length(FBuffer) - Len); end; { -------------------------------------------------------------------------- } function TAbExtraField.FindField(aID : Word; out aSubField : PAbExtraSubField) : Boolean; begin Result := False; aSubField := nil; while FindNext(aSubField) do if aSubField.ID = aID then begin Result := True; Break; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.FindNext(var aCurField : PAbExtraSubField) : Boolean; var BytesLeft : Integer; begin if aCurField = nil then begin aCurField := PAbExtraSubField(FBuffer); BytesLeft := Length(FBuffer); end else begin BytesLeft := Length(FBuffer) - (Pointer(aCurField) - Pointer(FBuffer)) - SizeOf(TAbExtraSubField) - aCurField.Len; Inc(Pointer(aCurField), aCurField.Len + SizeOf(TAbExtraSubField)); end; Result := (BytesLeft >= SizeOf(TAbExtraSubField)); if Result and (BytesLeft < SizeOf(TAbExtraSubField) + aCurField.Len) then aCurField.Len := BytesLeft - SizeOf(TAbExtraSubField); end; { -------------------------------------------------------------------------- } function TAbExtraField.Get(aID : Word; out aData : Pointer; out aDataSize : Word) : Boolean; var SubField : PAbExtraSubField; begin Result := FindField(aID, SubField); if Result then begin aData := @SubField.Data; aDataSize := SubField.Len; end else begin aData := nil; aDataSize := 0; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.GetCount : Integer; var SubField : PAbExtraSubField; begin Result := 0; SubField := nil; while FindNext(SubField) do Inc(Result); end; { -------------------------------------------------------------------------- } function TAbExtraField.GetID(aIndex : Integer): Word; var i: Integer; SubField : PAbExtraSubField; begin i := 0; SubField := nil; while FindNext(SubField) do if i = aIndex then begin Result := SubField.ID; Exit; end else Inc(i); raise EListError.CreateFmt(SListIndexError, [aIndex]); end; { -------------------------------------------------------------------------- } function TAbExtraField.GetStream(aID : Word; out aStream : TStream): Boolean; var Data: Pointer; DataSize: Word; begin Result := Get(aID, Data, DataSize); if Result then begin aStream := TMemoryStream.Create; aStream.WriteBuffer(Data^, DataSize); aStream.Position := 0; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.Has(aID : Word): Boolean; var SubField : PAbExtraSubField; begin Result := FindField(aID, SubField); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.LoadFromStream(aStream : TStream; aSize : Word); begin SetLength(FBuffer, aSize); if aSize > 0 then aStream.ReadBuffer( FBuffer[0], aSize); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Put(aID : Word; const aData; aDataSize : Word); var Offset : Cardinal; SubField : PAbExtraSubField; begin if FindField(aID, SubField) then begin if SubField.Len = aDataSize then begin Move(aData, SubField.Data, aDataSize); Changed; Exit; end else DeleteField(SubField); end; Offset := Length(FBuffer); SetLength(FBuffer, Length(FBuffer) + SizeOf(TAbExtraSubField) + aDataSize); SubField := PAbExtraSubField(@FBuffer[Offset]); SubField.ID := aID; SubField.Len := aDataSize; Move(aData, SubField.Data, aDataSize); Changed; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.SetBuffer(const aValue : TByteDynArray); begin SetLength(FBuffer, Length(aValue)); if Length(FBuffer) > 0 then Move(aValue[0], FBuffer[0], Length(FBuffer)); Changed; end; { -------------------------------------------------------------------------- } { ========================================================================== } { TAbArchiveStreamHelper } constructor TAbArchiveStreamHelper.Create(AStream: TStream); begin if Assigned(AStream) then FStream := AStream else raise Exception.Create('nil stream'); end; end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipOpt.pas0000644000175000001440000000701515104114162020375 0ustar alexxusersunit ZipOpt; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, AbUtils, AbZipTyp; type TArchiveFormat = ( afNil, afZip, afZipx, afGzip, afBzip2, afXzip, afLzma, afZstd ); TFormatOptions = record Level: PtrInt; Method: PtrInt; end; const ARCHIVE_FORMAT: array[TAbArchiveType] of TArchiveFormat = ( afNil, afZip, afZip, afZip, afNil, afGzip, afGzip, afNil, afBzip2, afBzip2, afXzip, afXzip, afLzma, afLzma, afZstd, afZstd ); const DefaultConfig: array[TArchiveFormat] of TFormatOptions = ( (Level: 0; Method: 0;), (Level: 6; Method: PtrInt(cmDeflated);), (Level: 7; Method: PtrInt(cmXz);), (Level: 6; Method: PtrInt(cmDeflated);), (Level: 9; Method: PtrInt(cmBzip2);), (Level: 7; Method: PtrInt(cmXz);), (Level: 7; Method: PtrInt(cmLZMA);), (Level: 11; Method: PtrInt(cmZstd);) ); var PluginConfig: array[TArchiveFormat] of TFormatOptions; procedure LoadConfiguration; procedure SaveConfiguration; implementation uses TypInfo, DCClassesUtf8, Extension, ZipFunc; procedure LoadConfiguration; var Ini: TIniFileEx; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try for ArchiveFormat:= Succ(Low(TArchiveFormat)) to High(TArchiveFormat) do begin Section:= Copy(GetEnumName(TypeInfo(TArchiveFormat), PtrInt(ArchiveFormat)), 3, MaxInt); PluginConfig[ArchiveFormat].Level:= Ini.ReadInteger(Section, 'Level', DefaultConfig[ArchiveFormat].Level); PluginConfig[ArchiveFormat].Method:= Ini.ReadInteger(Section, 'Method', DefaultConfig[ArchiveFormat].Method); end; gTarAutoHandle:= Ini.ReadBool('Configuration', 'TarAutoHandle', True); // Backward compatibility case Ini.ReadInteger('Configuration', 'DeflationOption', -1) of IntPtr(doSuperFast): PluginConfig[afZip].Level:= 1; IntPtr(doFast): PluginConfig[afZip].Level:= 3; IntPtr(doNormal): PluginConfig[afZip].Level:= 6; IntPtr(doMaximum): PluginConfig[afZip].Level:= 9; end; case Ini.ReadInteger('Configuration', 'CompressionMethodToUse', -1) of IntPtr(smStored): PluginConfig[afZip].Method:= IntPtr(cmStored); IntPtr(smDeflated): PluginConfig[afZip].Method:= IntPtr(cmDeflated); IntPtr(smBestMethod): PluginConfig[afZip].Method:= IntPtr(cmEnhancedDeflated); end; finally Ini.Free; end; except // Ignore end; end; procedure SaveConfiguration; var Ini: TIniFileEx; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try for ArchiveFormat:= Succ(Low(TArchiveFormat)) to High(TArchiveFormat) do begin Section:= Copy(GetEnumName(TypeInfo(TArchiveFormat), PtrInt(ArchiveFormat)), 3, MaxInt); Ini.WriteInteger(Section, 'Level', PluginConfig[ArchiveFormat].Level); Ini.WriteInteger(Section, 'Method', PluginConfig[ArchiveFormat].Method); end; Ini.DeleteKey('Configuration', 'DeflationOption'); Ini.DeleteKey('Configuration', 'CompressionMethodToUse'); Ini.WriteBool('Configuration', 'TarAutoHandle', gTarAutoHandle); Ini.UpdateFile; finally Ini.Free; end; except on E: Exception do begin gStartupInfo.MessageBox(PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; end; initialization Move(DefaultConfig[Low(DefaultConfig)], PluginConfig[Low(PluginConfig)], SizeOf(PluginConfig)); end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipLng.pas0000644000175000001440000000347415104114162020360 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Zip archiver plugin, language support Copyright (C) 2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit ZipLng; {$mode delphi} interface uses Classes, SysUtils; resourcestring rsCompressionMethodStore = 'Store'; rsCompressionMethodOptimal = 'Optimal (2x slower)'; rsCompressionLevelFastest = 'Fastest'; rsCompressionLevelFast = 'Fast'; rsCompressionLevelNormal = 'Normal'; rsCompressionLevelMaximum = 'Maximum'; rsCompressionLevelUltra = 'Ultra'; procedure TranslateResourceStrings; implementation uses ZipFunc; function Translate(Name, Value: AnsiString; Hash: LongInt; Arg: Pointer): AnsiString; var ALen: Integer; begin with gStartupInfo do begin SetLength(Result, MaxSmallint); ALen:= TranslateString(Translation, PAnsiChar(Name), PAnsiChar(Value), PAnsiChar(Result), MaxSmallint); SetLength(Result, ALen); end; end; procedure TranslateResourceStrings; begin if Assigned(gStartupInfo.Translation) then begin SetResourceStrings(@Translate, nil); end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipFunc.pas0000644000175000001440000005531115104114162020530 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.tar, *.tgz archives Copyright (C) 2007-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit ZipFunc; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, WcxPlugin, AbArcTyp, AbZipTyp, Extension, AbExcept, AbUtils, AbConst, ZipApp; type { TAbZipKitEx } TAbZipKitEx = class (TAbZipKit) private FItemProgress: Byte; FItem: TAbArchiveItem; FNeedPassword: Boolean; FOperationResult: LongInt; FChangeVolProcW: TChangeVolProcW; FProcessDataProcW : TProcessDataProcW; procedure AbOneItemProgressEvent(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); procedure AbArchiveItemProgressEvent(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); procedure AbArchiveProgressEvent (Sender : TObject; Progress : Byte; var Abort : Boolean); procedure AbNeedPasswordEvent(Sender : TObject; var NewPassword : AnsiString); procedure AbProcessItemFailureEvent(Sender: TObject; Item: TAbArchiveItem; ProcessType: TAbProcessType; ErrorClass: TAbErrorClass; ErrorCode: Integer); procedure AbRequestImageEvent(Sender : TObject; ImageNumber : Integer; var ImageName : String; var Abort : Boolean); public constructor Create(AOwner: TComponent); override; end; {Mandatory functions} function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; export; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; export; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; export; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; export; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; export; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; export; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; export; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; export; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; export; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; export; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; export; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; export; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; export; function GetPackerCaps : Integer;dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; procedure ConfigurePacker (Parent: HWND; DllInstance: THandle);dcpcall; export; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; export; {Extension API} procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; export; const IniFileName = 'zip.ini'; var gStartupInfo: TExtensionStartupInfo; gTarAutoHandle : Boolean; implementation uses SysUtils, LazUTF8, ZipConfDlg, AbBrowse, DCConvertEncoding, DCOSUtils, ZipOpt, ZipLng, ZipCache, DCDateTimeUtils; var PasswordCache: TPasswordCache; threadvar gProcessDataProcW : TProcessDataProcW; procedure StringToArrayW(src: UnicodeString; pDst: PWideChar; MaxDstLength: Integer); begin if Length(src) < MaxDstLength then MaxDstLength := Length(src) else MaxDstLength := MaxDstLength - 1; // for ending #0 if Length(src) > 0 then Move(src[1], pDst^, SizeOf(WideChar) * MaxDstLength); pDst[MaxDstLength] := WideChar(0); end; function StrEndsWith(S : String; SearchPhrase : String) : Boolean; begin Result := (RightStr(S, Length(SearchPhrase)) = SearchPhrase); end; function GetArchiveError(const E : Exception): Integer; begin if E is EAbUserAbort then Result := E_EABORTED else if E is EAbFileNotFound then Result := E_EOPEN else if E is EAbUnhandledType then Result := E_UNKNOWN_FORMAT else if E is EFCreateError then Result := E_ECREATE else if E is EFOpenError then Result := E_EOPEN else if E is EReadError then Result := E_EREAD else if E is EWriteError then Result := E_EWRITE else Result := E_UNKNOWN; end; procedure CheckError(Arc: TAbZipKitEx; E: Exception; const FileName: String); var AMessage: String; begin if (Arc.FOperationResult = E_UNKNOWN) then begin AMessage:= E.Message + LineEnding + LineEnding + FileName; if gStartupInfo.MessageBox(PAnsiChar(AMessage), nil, MB_OKCANCEL or MB_ICONERROR) = ID_OK then Arc.FOperationResult:= E_HANDLED else begin Arc.FOperationResult:= E_EABORTED; end; end; end; // -- Exported functions ------------------------------------------------------ function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; export; begin Result := 0; ArchiveData.OpenResult := E_NOT_SUPPORTED; end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; export; var Arc : TAbZipKitEx; begin Result := 0; Arc := TAbZipKitEx.Create(nil); try Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.OnNeedPassword:= @Arc.AbNeedPasswordEvent; Arc.OnRequestImage:= @Arc.AbRequestImageEvent; Arc.TarAutoHandle := gTarAutoHandle; Arc.OpenArchive(UTF16ToUTF8(UnicodeString(ArchiveData.ArcName))); if Arc.ArchiveType in [atGzip, atBzip2, atXz, atLzma, atZstd] then Arc.OnArchiveItemProgress := @Arc.AbOneItemProgressEvent else begin Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; end; Arc.Password := PasswordCache.GetPassword(Arc.FileName); Arc.Tag := 0; Result := TArcHandle(Arc); except on E: Exception do begin Arc.Free; ArchiveData.OpenResult := GetArchiveError(E); if (ArchiveData.OpenResult = E_UNKNOWN) then begin ArchiveData.OpenResult := E_HANDLED; gStartupInfo.MessageBox(PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; end; end; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; export; begin Result := E_NOT_SUPPORTED; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; export; var sFileName : String; Arc : TAbZipKitEx absolute hArcData; begin if Arc.Tag > Arc.Count - 1 then Exit(E_END_ARCHIVE); sFileName := Arc.GetFileName(Arc.Tag); StringToArrayW(CeUtf8ToUtf16(sFileName), @HeaderData.FileName, SizeOf(HeaderData.FileName)); with Arc.Items[Arc.Tag] do begin HeaderData.PackSize := Lo(CompressedSize); HeaderData.PackSizeHigh := Hi(CompressedSize); HeaderData.UnpSize := Lo(UncompressedSize); HeaderData.UnpSizeHigh := Hi(UncompressedSize); HeaderData.FileCRC := CRC32; HeaderData.FileTime := NativeLastModFileTime; HeaderData.FileAttr := NativeFileAttributes; HeaderData.MfileTime := DateTimeToWinFileTime(LastModTimeAsDateTime); if IsEncrypted then begin HeaderData.Flags := RHDF_ENCRYPTED; end; if IsDirectory then begin HeaderData.FileAttr := HeaderData.FileAttr or faFolder; end; end; Result := E_SUCCESS; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; export; begin Result := E_NOT_SUPPORTED; end; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; export; var Abort: Boolean; DestNameUtf8: String; Arc : TAbZipKitEx absolute hArcData; begin try Arc.FOperationResult := E_SUCCESS; case Operation of PK_TEST: begin Arc.TestItemAt(Arc.Tag); if (Arc.FNeedPassword) and (Arc.FOperationResult = E_SUCCESS) and Arc.Items[Arc.Tag].IsEncrypted then begin Arc.FNeedPassword:= False; PasswordCache.SetPassword(Arc.FileName, Arc.Password); end; // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin Abort := False; Arc.OnArchiveItemProgress(Arc, Arc.Items[Arc.Tag], 100, Abort); if Abort then Arc.FOperationResult := E_EABORTED; end; end; PK_EXTRACT: begin DestNameUtf8 := UTF16ToUTF8(UnicodeString(DestName)); if (DestPath <> nil) and (DestPath[0] <> #0) then Arc.BaseDirectory := DestPath else begin Arc.BaseDirectory := ExtractFilePath(DestNameUtf8); end; repeat Arc.FOperationResult := E_SUCCESS; Arc.ExtractAt(Arc.Tag, DestNameUtf8); until (Arc.FOperationResult <> maxLongint); if (Arc.FNeedPassword) and (Arc.FOperationResult = E_SUCCESS) and Arc.Items[Arc.Tag].IsEncrypted then begin Arc.FNeedPassword:= False; PasswordCache.SetPassword(Arc.FileName, Arc.Password); end; // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin Abort := False; Arc.OnArchiveItemProgress(Arc, Arc.Items[Arc.Tag], 100, Abort); if Abort then Arc.FOperationResult := E_EABORTED; end; end; PK_SKIP: begin end; end; {case} except on E: Exception do begin Arc.FOperationResult := GetArchiveError(E); if (Operation = PK_TEST) then CheckError(Arc, E, Arc.Items[Arc.Tag].FileName); end; end; Result:= Arc.FOperationResult; Arc.Tag := Arc.Tag + 1; end; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; export; var Arc : TAbZipKitEx absolute hArcData; begin Arc.CloseArchive; FreeAndNil(Arc); Result := E_SUCCESS; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; export; begin end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; export; var Arc : TAbZipKitEx absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then begin Arc.FChangeVolProcW := pChangeVolProc; end; end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; export; begin end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; export; var Arc : TAbZipKitEx absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then // if archive is open Arc.FProcessDataProcW := pProcessDataProc else begin // if archive is close gProcessDataProcW := pProcessDataProc; end; end; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; export; var FileExt: String; FilePath: String; Arc : TAbZipKitEx; FileName: UnicodeString; sPassword: AnsiString; sPackedFile: String; ArchiveFormat: TArchiveFormat; begin if (Flags and PK_PACK_MOVE_FILES) <> 0 then begin Exit(E_NOT_SUPPORTED); end; Arc := TAbZipKitEx.Create(nil); try Arc.AutoSave := False; Arc.TarAutoHandle:= True; Arc.FProcessDataProcW := gProcessDataProcW; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; sPackedFile := UTF16ToUTF8(UnicodeString(PackedFile)); try FileExt:= LowerCase(ExtractFileExt(sPackedFile)); if ((Flags and PK_PACK_ENCRYPT) <> 0) then begin // Only zip/zipx supports encryption if (FileExt = '.zip') or (FileExt = '.zipx') then begin sPassword:= EmptyStr; Arc.AbNeedPasswordEvent(Arc, sPassword); Arc.Password:= sPassword; end; end; Arc.OpenArchive(sPackedFile); ArchiveFormat:= ARCHIVE_FORMAT[Arc.ArchiveType]; if (ArchiveFormat = afZip) then begin if (FileExt = '.zipx') then ArchiveFormat:= afZipx else begin case PluginConfig[ArchiveFormat].Level of 1: Arc.DeflationOption:= doSuperFast; 3: Arc.DeflationOption:= doFast; 6: Arc.DeflationOption:= doNormal; 9: Arc.DeflationOption:= doMaximum; end; case PluginConfig[ArchiveFormat].Method of PtrInt(cmStored): Arc.CompressionMethodToUse:= smStored; PtrInt(cmDeflated): Arc.CompressionMethodToUse:= smDeflated; PtrInt(cmEnhancedDeflated): Arc.CompressionMethodToUse:= smBestMethod; end; end; end; Arc.ZipArchive.CompressionLevel:= PluginConfig[ArchiveFormat].Level; Arc.ZipArchive.CompressionMethod:= PluginConfig[ArchiveFormat].Method; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; Arc.StoreOptions := Arc.StoreOptions + [soReplace]; Arc.BaseDirectory := UTF16ToUTF8(UnicodeString(SrcPath)); FilePath:= UTF16ToUTF8(UnicodeString(SubPath)); while True do begin FileName := UnicodeString(AddList); Arc.Archive.AddEntry(UTF16ToUTF8(FileName), FilePath); if (AddList + Length(FileName) + 1)^ = #0 then Break; Inc(AddList, Length(FileName) + 1); end; if Arc.ArchiveType in [atGzip, atBzip2, atXz, atLzma, atZstd] then begin with Arc.Archive.ItemList[0] do begin UncompressedSize := mbFileSize(DiskFileName); end; Arc.OnArchiveItemProgress := @Arc.AbOneItemProgressEvent end else begin Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; end; Arc.Save; Arc.CloseArchive; except on E: Exception do begin Arc.FOperationResult := GetArchiveError(E); CheckError(Arc, E, sPackedFile); end; end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; export; var Arc : TAbZipKitEx; FileNameUTF8 : String; pFileName : PWideChar; FileName : UnicodeString; ArchiveFormat: TArchiveFormat; begin Arc := TAbZipKitEx.Create(nil); try Arc.TarAutoHandle:= True; Arc.FProcessDataProcW := gProcessDataProcW; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.OnNeedPassword:= @Arc.AbNeedPasswordEvent; try Arc.OpenArchive(UTF16ToUTF8(UnicodeString(PackedFile))); ArchiveFormat:= ARCHIVE_FORMAT[Arc.ArchiveType]; Arc.ZipArchive.CompressionLevel:= PluginConfig[ArchiveFormat].Level; // Set this after opening archive, to get only progress of deleting. Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; // Parse file list. pFileName := DeleteList; while pFileName^ <> #0 do begin FileName := pFileName; // Convert PWideChar to UnicodeString (up to first #0). FileNameUTF8 := UTF16ToUTF8(FileName); // If ends with '.../*.*' or '.../' then delete directory. if StrEndsWith(FileNameUTF8, PathDelim + '*.*') or StrEndsWith(FileNameUTF8, PathDelim) then Arc.DeleteDirectoriesRecursively(ExtractFilePath(FileNameUTF8)) else Arc.DeleteFile(FileNameUTF8); pFileName := pFileName + Length(FileName) + 1; // move after filename and ending #0 if pFileName^ = #0 then Break; // end of list end; Arc.Save; Arc.CloseArchive; except on E: Exception do begin Arc.FOperationResult := GetArchiveError(E); CheckError(Arc, E, Arc.FileName); end; end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function GetPackerCaps : Integer;dcpcall; export; begin Result := PK_CAPS_NEW or PK_CAPS_DELETE or PK_CAPS_MODIFY or PK_CAPS_MULTIPLE or PK_CAPS_OPTIONS or PK_CAPS_BY_CONTENT or PK_CAPS_ENCRYPT; end; function GetBackgroundFlags: Integer; dcpcall; export; begin Result:= BACKGROUND_UNPACK or BACKGROUND_PACK; end; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle);dcpcall; export; begin CreateZipConfDlg; end; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; export; begin try Result:= (AbDetermineArcType(UTF16ToUTF8(UnicodeString(FileName)), atUnknown) <> atUnknown); except Result := False; end; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; export; begin gStartupInfo:= StartupInfo^; // Load configuration from ini file LoadConfiguration; TranslateResourceStrings; // Create password cache object PasswordCache:= TPasswordCache.Create; end; { TAbZipKitEx } constructor TAbZipKitEx.Create(AOwner: TComponent); begin inherited Create(AOwner); FOperationResult := E_SUCCESS; FProcessDataProcW := nil; TempDirectory := GetTempDir; end; procedure TAbZipKitEx.AbProcessItemFailureEvent(Sender: TObject; Item: TAbArchiveItem; ProcessType: TAbProcessType; ErrorClass: TAbErrorClass; ErrorCode: Integer); var Message: AnsiString; begin // Unknown error FOperationResult:= E_UNKNOWN; // Check error class if (ErrorClass = ecAbbrevia) then begin case ErrorCode of AbUserAbort: FOperationResult:= E_EABORTED; AbZipBadCRC: FOperationResult:= E_BAD_ARCHIVE; AbFileNotFound: FOperationResult:= E_NO_FILES; AbReadError: FOperationResult:= E_EREAD; end; end // Has exception message? Show it! else if Assigned(ExceptObject) and (ExceptObject is Exception) then begin Message := Exception(ExceptObject).Message; if Assigned(Item) then Message += LineEnding + LineEnding + Item.FileName; if (ProcessType = ptExtract) then begin case gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_ABORTRETRYIGNORE or MB_ICONERROR) of ID_RETRY: FOperationResult:= maxLongint; ID_IGNORE: FOperationResult:= E_HANDLED; ID_ABORT: raise EAbUserAbort.Create; end; end else begin if gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_OKCANCEL or MB_ICONERROR) = ID_OK then FOperationResult:= E_HANDLED else begin raise EAbUserAbort.Create; end; end; end // Check error class else case ErrorClass of ecFileOpenError: begin ErrorClass:= ecAbbrevia; ErrorCode:= AbFCIFileOpenError; FOperationResult:= E_EOPEN; end; ecFileCreateError: begin ErrorClass:= ecAbbrevia; ErrorCode:= AbFCICreateError; FOperationResult:= E_ECREATE; end; end; // Show abbrevia specific errors if (ErrorClass = ecAbbrevia) and (ProcessType in [ptAdd, ptFreshen, ptReplace]) then begin Message:= AbStrRes(ErrorCode) + LineEnding + LineEnding + Item.FileName; if gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_OKCANCEL or MB_ICONERROR) = ID_OK then FOperationResult:= E_HANDLED else begin raise EAbUserAbort.Create; end; end; end; procedure TAbZipKitEx.AbRequestImageEvent(Sender: TObject; ImageNumber: Integer; var ImageName: String; var Abort: Boolean); var AVolume: array[0..MAX_PATH] of WideChar; begin if (not mbFileExists(ImageName)) and Assigned(FChangeVolProcW) then begin StrPCopy(AVolume, CeUtf8ToUtf16(ImageName)); Abort := (FChangeVolProcW(AVolume, PK_VOL_ASK) = 0); if not Abort then ImageName:= CeUtf16ToUtf8(UnicodeString(AVolume)); end; end; procedure TAbZipKitEx.AbOneItemProgressEvent(Sender: TObject; Item: TAbArchiveItem; Progress: Byte; var Abort: Boolean); var ASize: Int64; begin if Assigned(FProcessDataProcW) then begin ASize := Item.UncompressedSize; if ASize = 0 then ASize := -Progress else if FItemProgress = Progress then ASize := 0 else begin ASize := (Int64(Progress) - Int64(FItemProgress)) * ASize div 100; if ASize > High(Int32) then ASize := -Progress; FItemProgress := Progress; end; Abort := (FProcessDataProcW(PWideChar(CeUtf8ToUtf16(Item.FileName)), ASize) = 0); end; end; procedure TAbZipKitEx.AbArchiveItemProgressEvent(Sender: TObject; Item: TAbArchiveItem; Progress: Byte; var Abort: Boolean); var ASize: Int64; begin if Assigned(FProcessDataProcW) then begin if (Item = nil) then Abort := (FProcessDataProcW(nil, -(Progress + 1000)) = 0) else begin if Item.IsDirectory then ASize:= 0 else if Item.UncompressedSize = 0 then ASize:= -(Progress + 1000) else begin if FItem <> Item then begin FItem := Item; FItemProgress := 0; end; if FItemProgress = Progress then ASize := 0 else begin ASize := Item.UncompressedSize; ASize := (Int64(Progress) - Int64(FItemProgress)) * ASize div 100; if ASize > High(Int32) then ASize := -(Progress + 1000); FItemProgress := Progress; end; end; Abort := (FProcessDataProcW(PWideChar(CeUtf8ToUtf16(Item.FileName)), ASize) = 0) end; end; end; procedure TAbZipKitEx.AbArchiveProgressEvent(Sender: TObject; Progress: Byte; var Abort: Boolean); begin try if Assigned(FProcessDataProcW) then Abort := (FProcessDataProcW(nil, -(Progress)) = 0); except Abort := True; end; end; procedure TAbZipKitEx.AbNeedPasswordEvent(Sender: TObject; var NewPassword: AnsiString); var aNewPassword: array[0..MAX_PATH-1] of AnsiChar; Result: Boolean; begin aNewPassword := Copy(NewPassword, 1, MAX_PATH); Result:= gStartupInfo.InputBox('Zip', 'Please enter the password:', True, PAnsiChar(aNewPassword), MAX_PATH); if Result then NewPassword := aNewPassword else begin raise EAbUserAbort.Create; end; FNeedPassword:= True; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipConfDlg.pas0000644000175000001440000002124115104114162021144 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.bz2, *.tar, *.tgz, *.tbz archives Copyright (C) 2008-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit ZipConfDlg; {$mode objfpc}{$H+} {$include calling.inc} {$R ZipConfDlg.lfm} interface uses SysUtils, Extension; procedure CreateZipConfDlg; implementation uses ZipFunc, ZipOpt, ZipLng, AbZipTyp; function GetComboBox(pDlg: PtrUInt; DlgItemName: PAnsiChar): PtrInt; begin with gStartupInfo do begin Result:= SendDlgMsg(pDlg, DlgItemName, DM_LISTGETITEMINDEX, 0, 0); if Result >= 0 then begin Result:= SendDlgMsg(pDlg, DlgItemName, DM_LISTGETDATA, Result, 0); end; end; end; procedure SetComboBox(pDlg: PtrUInt; DlgItemName: PAnsiChar; ItemData: PtrInt); var Index, Count: Integer; begin with gStartupInfo do begin Count:= SendDlgMsg(pDlg, DlgItemName, DM_LISTGETCOUNT, 0, 0); for Index:= 0 to Count - 1 do begin if SendDlgMsg(pDlg, DlgItemName, DM_LISTGETDATA, Index, 0) = ItemData then begin SendDlgMsg(pDlg, DlgItemName, DM_LISTSETITEMINDEX, Index, 0); Exit; end; end; end; end; function ComboBoxAdd(pDlg: PtrUInt; DlgItemName: PAnsiChar; ItemText: String; ItemData: PtrInt): IntPtr; var P: PAnsiChar; AText: IntPtr absolute P; begin P:= PAnsiChar(ItemText); Result:= gStartupInfo.SendDlgMsg(pDlg, DlgItemName, DM_LISTADD, AText, ItemData); end; function AddCompressionLevel(pDlg: PtrUInt; const AName: String; ALevel: IntPtr): IntPtr; var AText: String; begin AText:= AName + ' (' + IntToStr(ALevel) + ')'; Result:= ComboBoxAdd(pDlg, 'cbCompressionLevel', AText, ALevel); end; procedure UpdateLevel(pDlg: PtrUInt; ALevel: IntPtr); var Index: IntPtr; AFormat: TArchiveFormat; AMethod: TAbZipCompressionMethod; begin with gStartupInfo do begin SendDlgMsg(pDlg, 'cbCompressionLevel', DM_LISTCLEAR, 0, 0); AFormat:= TArchiveFormat(GetComboBox(pDlg, 'cbArchiveFormat')); Index:= SendDlgMsg(pDlg, 'cbCompressionMethod', DM_LISTGETITEMINDEX, 0, 0); AMethod:= TAbZipCompressionMethod(SendDlgMsg(pDlg, 'cbCompressionMethod', DM_LISTGETDATA, Index, 0)); if (AMethod = cmStored) then begin SendDlgMsg(pDlg, 'cbCompressionLevel', DM_ENABLE, 0, 0); end else begin SendDlgMsg(pDlg, 'cbCompressionLevel', DM_ENABLE, 1, 0); case AMethod of cmDeflated, cmEnhancedDeflated: begin AddCompressionLevel(pDlg, rsCompressionLevelFastest, 1); AddCompressionLevel(pDlg, rsCompressionLevelFast, 3); Index:= AddCompressionLevel(pDlg, rsCompressionLevelNormal, 6); AddCompressionLevel(pDlg, rsCompressionLevelMaximum, 9); end; cmXz, cmLZMA, cmBzip2: begin AddCompressionLevel(pDlg, rsCompressionLevelFastest, 1); AddCompressionLevel(pDlg, rsCompressionLevelFast, 3); Index:= AddCompressionLevel(pDlg, rsCompressionLevelNormal, 5); AddCompressionLevel(pDlg, rsCompressionLevelMaximum, 7); AddCompressionLevel(pDlg, rsCompressionLevelUltra, 9); end; cmZstd: begin AddCompressionLevel(pDlg, rsCompressionLevelFastest, 3); AddCompressionLevel(pDlg, rsCompressionLevelFast, 5); Index:= AddCompressionLevel(pDlg, rsCompressionLevelNormal, 11); AddCompressionLevel(pDlg, rsCompressionLevelMaximum, 17); AddCompressionLevel(pDlg, rsCompressionLevelUltra, 22); end; end; if ALevel < 0 then SendDlgMsg(pDlg, 'cbCompressionLevel', DM_LISTSETITEMINDEX, Index, 0) else begin SetComboBox(pDlg, 'cbCompressionLevel', PluginConfig[AFormat].Level); end; end; end; end; procedure UpdateMethod(pDlg: PtrUInt); var Index: IntPtr; AFormat: TArchiveFormat; begin with gStartupInfo do begin SendDlgMsg(pDlg, 'cbCompressionMethod', DM_LISTCLEAR, 0, 0); AFormat:= TArchiveFormat(GetComboBox(pDlg, 'cbArchiveFormat')); case AFormat of afGzip: ComboBoxAdd(pDlg, 'cbCompressionMethod', 'Deflate', PtrInt(cmDeflated)); afXzip: ComboBoxAdd(pDlg, 'cbCompressionMethod', 'LZMA2', PtrInt(cmXz)); afBzip2: ComboBoxAdd(pDlg, 'cbCompressionMethod', 'BZip2', PtrInt(cmBzip2)); afZstd: ComboBoxAdd(pDlg, 'cbCompressionMethod', 'Zstandard', PtrInt(cmZstd)); afZip: begin ComboBoxAdd(pDlg, 'cbCompressionMethod', rsCompressionMethodStore, PtrInt(cmStored)); ComboBoxAdd(pDlg, 'cbCompressionMethod', 'Deflate', PtrInt(cmDeflated)); ComboBoxAdd(pDlg, 'cbCompressionMethod', rsCompressionMethodOptimal, PtrInt(cmEnhancedDeflated)); end; afZipx: begin ComboBoxAdd(pDlg, 'cbCompressionMethod', 'LZMA2', PtrInt(cmXz)); ComboBoxAdd(pDlg, 'cbCompressionMethod', 'Zstandard', PtrInt(cmZstd)); end; end; // case Index:= SendDlgMsg(pDlg, 'cbCompressionMethod', DM_LISTGETCOUNT, 0, 0); if (Index = 1) then begin SendDlgMsg(pDlg, 'cbCompressionMethod', DM_LISTSETITEMINDEX, 0, 0); end else begin SetComboBox(pDlg, 'cbCompressionMethod', PluginConfig[AFormat].Method); end; // Randomly crashes under Qt // https://github.com/doublecmd/doublecmd/issues/1233 // SendDlgMsg(pDlg, 'cbCompressionMethod', DM_ENABLE, PtrInt(Index > 1), 0); end; UpdateLevel(pDlg, PluginConfig[AFormat].Level); end; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Index: IntPtr; AFormat: TArchiveFormat; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin ComboBoxAdd(pDlg, 'cbArchiveFormat', 'gz', PtrInt(afGzip)); ComboBoxAdd(pDlg, 'cbArchiveFormat', 'xz', PtrInt(afXzip)); ComboBoxAdd(pDlg, 'cbArchiveFormat', 'bz2', PtrInt(afBzip2)); ComboBoxAdd(pDlg, 'cbArchiveFormat', 'zst', PtrInt(afZstd)); Index:= ComboBoxAdd(pDlg, 'cbArchiveFormat', 'zip', PtrInt(afZip)); ComboBoxAdd(pDlg, 'cbArchiveFormat', 'zipx', PtrInt(afZipx)); SendDlgMsg(pDlg, 'cbArchiveFormat', DM_LISTSETITEMINDEX, Index, 0); UpdateMethod(pDlg); SendDlgMsg(pDlg, 'chkTarAutoHandle', DM_SETCHECK, PtrInt(gTarAutoHandle), 0); end; DN_CHANGE: begin if DlgItemName = 'cbArchiveFormat' then begin UpdateMethod(pDlg); end else if DlgItemName = 'cbCompressionMethod' then begin UpdateLevel(pDlg, -1); end; end; DN_CLICK: if DlgItemName = 'btnOK' then begin AFormat:= TArchiveFormat(GetComboBox(pDlg, 'cbArchiveFormat')); PluginConfig[AFormat].Level:= GetComboBox(pDlg, 'cbCompressionLevel'); PluginConfig[AFormat].Method:= GetComboBox(pDlg, 'cbCompressionMethod'); gTarAutoHandle:= Boolean(SendDlgMsg(pDlg, 'chkTarAutoHandle', DM_GETCHECK, 0, 0)); SaveConfiguration; SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end;// case end; // with end; procedure CreateZipConfDlg; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipConfDlg.lfm0000644000175000001440000001055315104114162021143 0ustar alexxusersobject DialogBox: TDialogBox Left = 693 Height = 353 Top = 345 Width = 438 AutoSize = True BorderStyle = bsDialog Caption = 'Zip plugin configuration' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 353 ClientWidth = 438 OnShow = DialogBoxShow Position = poOwnerFormCenter LCLVersion = '2.2.4.0' object lblAbout: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = gbCompression AnchorSideRight.Side = asrBottom Left = 10 Height = 57 Top = 10 Width = 417 Alignment = taCenter Anchors = [akTop, akLeft, akRight] Caption = 'Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving.' ParentColor = False WordWrap = True end object gbCompression: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblAbout AnchorSideTop.Side = asrBottom Left = 10 Height = 203 Top = 87 Width = 417 AutoSize = True BorderSpacing.Top = 20 Caption = 'Compression' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 25 ChildSizing.VerticalSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 183 ClientWidth = 415 TabOrder = 0 object lblArchiveFormat: TLabel Left = 10 Height = 35 Top = 10 Width = 204 Caption = 'Archive format:' Layout = tlCenter ParentColor = False end object cbArchiveFormat: TComboBox Left = 239 Height = 35 Top = 10 Width = 166 ItemHeight = 0 OnChange = ComboBoxChange Style = csDropDownList TabOrder = 0 end object lblCompressionMethod: TLabel AnchorSideTop.Side = asrCenter Left = 10 Height = 35 Top = 50 Width = 204 Caption = 'Compression method:' Layout = tlCenter ParentColor = False end object cbCompressionMethod: TComboBox AnchorSideRight.Side = asrBottom Left = 239 Height = 35 Top = 50 Width = 166 ItemHeight = 0 OnChange = ComboBoxChange Style = csDropDownList TabOrder = 1 end object lblCompressionLevel: TLabel AnchorSideTop.Side = asrCenter Left = 10 Height = 35 Top = 90 Width = 204 Caption = 'Compression level:' Layout = tlCenter ParentColor = False end object cbCompressionLevel: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 239 Height = 35 Top = 90 Width = 166 BorderSpacing.Left = 20 ItemHeight = 0 OnChange = ComboBoxChange Style = csDropDownList TabOrder = 2 end object chkTarAutoHandle: TCheckBox AnchorSideLeft.Control = gbCompression AnchorSideTop.Control = cbCompressionLevel AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 135 Width = 395 BorderSpacing.Top = 10 Caption = 'Open *.tar.xyz archives at one step (slowly with big archives)' TabOrder = 3 end end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 217 Height = 36 Top = 310 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 10 Constraints.MinWidth = 100 Default = True DefaultCaption = True Kind = bkOK ModalResult = 1 OnClick = ButtonClick TabOrder = 1 end object btnCancel: TBitBtn AnchorSideTop.Control = gbCompression AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbCompression AnchorSideRight.Side = asrBottom Left = 327 Height = 36 Top = 310 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 20 Cancel = True Constraints.MinWidth = 100 DefaultCaption = True Kind = bkCancel ModalResult = 2 OnClick = ButtonClick TabOrder = 2 end end doublecmd-1.1.30/plugins/wcx/zip/src/ZipCache.pas0000644000175000001440000000470615104114162020642 0ustar alexxusersunit ZipCache; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, SyncObjs, fpTimer; type { TPasswordCache } TPasswordCache = class private FTimer: TFPTimer; FArchiveSize: Int64; FArchiveName: String; FArchiveTime: Integer; FMutex: TCriticalSection; FArchivePassword: String; const FInterval: Cardinal = 120000; private procedure ResetTimer; procedure ZeroPassword; procedure TimerEvent(Sender: TObject); public constructor Create; destructor Destroy; override; function GetPassword(const Archive: String): String; procedure SetPassword(const Archive: String; const Password: String); end; implementation uses LazFileUtils; { TPasswordCache } procedure TPasswordCache.ResetTimer; begin if FTimer.Interval > FInterval then FTimer.Interval:= FTimer.Interval - 1 else FTimer.Interval:= FTimer.Interval + 1; end; procedure TPasswordCache.ZeroPassword; begin if (Length(FArchivePassword) > 0) then begin FillChar(FArchivePassword[1], Length(FArchivePassword), #0); SetLength(FArchivePassword, 0); end; end; procedure TPasswordCache.TimerEvent(Sender: TObject); begin FMutex.Acquire; try ZeroPassword; FTimer.Enabled:= False; finally FMutex.Release; end; end; function TPasswordCache.GetPassword(const Archive: String): String; begin FMutex.Acquire; try if (SameText(FArchiveName, Archive)) and (FArchiveSize = FileSizeUtf8(Archive)) and (FArchiveTime = FileAgeUtf8(Archive)) then begin ResetTimer; Result:= FArchivePassword end else begin FTimer.Enabled:= False; Result:= EmptyStr; ZeroPassword; end; finally FMutex.Release; end; end; procedure TPasswordCache.SetPassword(const Archive: String; const Password: String); begin FMutex.Acquire; try if (Length(Password) = 0) then FArchiveName:= EmptyStr else begin FArchiveName:= Archive; FArchivePassword:= Password; FArchiveTime:= FileAgeUtf8(Archive); FArchiveSize:= FileSizeUtf8(Archive); FTimer.Enabled:= True; ResetTimer; end; finally FMutex.Release; end; end; constructor TPasswordCache.Create; begin FTimer:= TFPTimer.Create(nil); FTimer.UseTimerThread:= True; FTimer.OnTimer:= @TimerEvent; FTimer.Interval:= FInterval; FMutex:= TCriticalSection.Create; end; destructor TPasswordCache.Destroy; begin FTimer.Free; FMutex.Free; inherited Destroy; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/ZipApp.pas0000644000175000001440000001431615104114162020355 0ustar alexxusers(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: ZipApp.pas *} {*********************************************************} {* ABBREVIA: Additional classes and routines *} {*********************************************************} unit ZipApp; {$mode objfpc}{$H+} interface uses Classes, SysUtils, AbArcTyp, AbZipKit, AbUtils; const {$IF DEFINED(MSWINDOWS)} faFolder = faDirectory; {$ELSE} faFolder = AB_FMODE_DIR or AB_FPERMISSION_GENERIC or AB_FPERMISSION_OWNEREXECUTE; {$ENDIF} type { TAbArchiveItemHelper } TAbArchiveItemHelper = class helper for TAbArchiveItem function MatchesPath(const Path : String; Recursive : Boolean = False) : Boolean; function MatchesPathEx(const Paths : String; Recursive : Boolean = False) : Boolean; end; { TAbArchiveAccess } TAbArchiveAccess = class(TAbArchive) end; { TAbZipKit } TAbZipKit = class(TAbCustomZipKit) public {en Delete one file from archive } procedure DeleteFile(const aFileName : String); {en Get the normalized file name } function GetFileName(aFileIndex: Integer): String; {en Delete directory entry and all file and directory entries matching the same path recursively } procedure DeleteDirectoriesRecursively(const Paths : String); {en Test specific item in the archive } procedure TestItemAt(Index : Integer); end; {en See if DirPath matches PathToMatch. If Recursive=True it is allowed for DirPath to point to a subdirectory of PathToMatch, for example: PathToMatch = 'dir/', DirPath = 'dir/subdir' - Result is True. } function AbDirMatch(DirPath : String; PathToMatch : String; Recursive : Boolean) : Boolean; {en From a list of paths separated with AbPathSep (';') extracts a path from the position StartPos (counted from 1) and modifies StartPos to point to next entry. When no more entries are found, returns empty string. } function AbExtractEntry(const Entries : String; var StartPos : Integer) : String; implementation uses AbExcept, DCStrUtils; { TAbArchiveItemHelper } function TAbArchiveItemHelper.MatchesPath(const Path: String; Recursive: Boolean): Boolean; var Value : string; Drive, Dir, Name : string; begin Value := Path; if (Value <> '') and (RightStr(Value, 1) <> AbPathDelim) then Value := Value + AbPathDelim; AbUnfixName(Value); AbParseFileName(Path, Drive, Dir, Name); Value := Dir + Name; Name := FileName; AbUnfixName(Name); Result := AbDirMatch(Name, Value, Recursive); end; function TAbArchiveItemHelper.MatchesPathEx(const Paths: String; Recursive: Boolean): Boolean; var Position: Integer; Path: String; begin Result := True; Position := 1; while True do begin Path := AbExtractEntry(Paths, Position); if Path = '' then Break; if MatchesPath(Path, Recursive) then Exit; end; Result := False; end; { TAbZipKit } procedure TAbZipKit.DeleteFile(const aFileName: String); var I : Integer; begin TAbArchiveAccess(Archive).CheckValid; if Count > 0 then begin for I := Pred(Count) downto 0 do begin with Archive.ItemList[I] do begin if CompareStr(GetFileName(I), aFileName) = 0 then begin DeleteAt(I); Break; end; end; end; end; end; function TAbZipKit.GetFileName(aFileIndex: Integer): String; begin Result := Items[aFileIndex].FileName; if (ArchiveType in [atGzip, atGzippedTar]) and (Result = 'unknown') then begin Result := ExtractOnlyFileName(FileName); if (ArchiveType = atGzippedTar) then begin if (TarAutoHandle = False) and (ExtractOnlyFileExt(Result) <> 'tar') then Result := Result + '.tar'; end; end; DoDirSeparators(Result); Result := ExcludeFrontPathDelimiter(Result); Result := ExcludeTrailingPathDelimiter(Result); while StrBegins(Result, '..' + PathDelim) do begin Result := Copy(Result, 4, MaxInt); Result := ExcludeFrontPathDelimiter(Result); end; if StrEnds(Result, PathDelim + '..') then begin Result[Length(Result)] := '_'; Result[Length(Result) - 1] := '_'; end; Result := StringReplace(Result, PathDelim + '..' + PathDelim, PathDelim + '__' + PathDelim, [rfReplaceAll]); end; procedure TAbZipKit.DeleteDirectoriesRecursively(const Paths: String); var I : Integer; begin TAbArchiveAccess(Archive).CheckValid; if Count > 0 then begin for I := Pred(Count) downto 0 do begin with Archive.ItemList[I] do if MatchesPathEx(Paths, True) then DeleteAt(I); end; end; end; procedure TAbZipKit.TestItemAt(Index: Integer); begin if (Archive <> nil) then TAbArchiveAccess(Archive).TestAt(Index) else raise EAbNoArchive.Create; end; function AbDirMatch(DirPath : String; PathToMatch : String; Recursive : Boolean) : Boolean; begin if Recursive then PathToMatch := PathToMatch + '*'; // append wildcard Result := AbPatternMatch(DirPath, 1, PathToMatch, 1); end; function AbExtractEntry(const Entries : String; var StartPos : Integer) : String; var I : Integer; Len: Integer; begin Result := ''; Len := Length(Entries); I := StartPos; if (I >= 1) and (I <= Len) then begin while (I <= Len) and (Entries[I] <> AbPathSep) do Inc(I); Result := Copy(Entries, StartPos, I - StartPos); if (I <= Len) and (Entries[I] = AbPathSep) then Inc(I); StartPos := I; end; end; end. doublecmd-1.1.30/plugins/wcx/zip/src/Zip.lpi0000644000175000001440000001205415104114162017712 0ustar alexxusers doublecmd-1.1.30/plugins/wcx/zip/src/Zip.dpr0000644000175000001440000000110415104114162017705 0ustar alexxuserslibrary Zip; uses {$IFDEF UNIX} cthreads, {$ENDIF} FPCAdds, SysUtils, Classes, ZipFunc, ZipOpt; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } PackFilesW, DeleteFilesW, GetPackerCaps, ConfigurePacker, GetBackgroundFlags, CanYouHandleThisFileW, { Extension API } ExtensionInitialize; {$R *.res} begin {$IFDEF UNIX} WriteLn('Zip plugin is loaded'); {$ENDIF} end. doublecmd-1.1.30/plugins/wcx/zip/language/0000755000175000001440000000000015104114162017434 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/zip/language/zip.zh_CN.po0000644000175000001440000000210715104114162021576 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Zip插件配置" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "Zip 插件支持 PKZIP 兼容、TAR、XZ、GZip、Zstandard 和 BZip2 数据压缩和归档." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "压缩" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "压缩方式:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "压缩级别:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "一步打开 *.tar.xyz 文件(大文件打开慢)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "取消" #: tdialogbox.btnOK.caption msgid "OK" msgstr "确定" doublecmd-1.1.30/plugins/wcx/zip/language/zip.ru.po0000644000175000001440000000361015104114162021223 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Настройки Zip-плагина" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "Плагин Zip поддерживает PKZIP-совместимое, TAR, XZ, GZip, Zstandard и BZip2 сжатие и архивирование данных." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "Cжатие" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "Формат архива:" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "Метод сжатия:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "Уровень сжатия:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "Открывать архивы *.tar.xyz за один шаг (медленно с большими архивами)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "Отмена" #: tdialogbox.btnOK.caption msgid "OK" msgstr "OK" #: ziplng.rscompressionmethodstore msgid "Store" msgstr "Без сжатия" #: ziplng.rscompressionmethodoptimal msgid "Optimal (2x slower)" msgstr "Оптимальный (медленно)" #: ziplng.rscompressionlevelfastest msgid "Fastest" msgstr "Скоростной" #: ziplng.rscompressionlevelfast msgid "Fast" msgstr "Быстрый" #: ziplng.rscompressionlevelnormal msgid "Normal" msgstr "Нормальный" #: ziplng.rscompressionlevelmaximum msgid "Maximum" msgstr "Максимальный" #: ziplng.rscompressionlevelultra msgid "Ultra" msgstr "Ультра" doublecmd-1.1.30/plugins/wcx/zip/language/zip.po0000644000175000001440000000251615104114162020602 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "" #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "" #: tdialogbox.btnOK.caption msgid "OK" msgstr "" #: ziplng.rscompressionmethodstore msgid "Store" msgstr "" #: ziplng.rscompressionmethodoptimal msgid "Optimal (2x slower)" msgstr "" #: ziplng.rscompressionlevelfastest msgid "Fastest" msgstr "" #: ziplng.rscompressionlevelfast msgid "Fast" msgstr "" #: ziplng.rscompressionlevelnormal msgid "Normal" msgstr "" #: ziplng.rscompressionlevelmaximum msgid "Maximum" msgstr "" #: ziplng.rscompressionlevelultra msgid "Ultra" msgstr "" doublecmd-1.1.30/plugins/wcx/zip/language/zip.ko.po0000644000175000001440000000400615104114162021206 0ustar alexxusersmsgid "" msgstr "" "Project-Id-Version: Double Commander Plugin - wcx\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: VenusGirl: https://venusgirls.tistory.com/\n" "Language-Team: 비너스걸: https://venusgirls.tistory.com/\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국어\n" "X-Generator: Poedit 3.4.2\n" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Zip 플러그인 구성" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "Zip 플러그인은 PKZIP 호환, TAR, XZ, GZip, Zstandard 및 BZip2 데이터 압축 및 보관을 지원합니다." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "압축" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "압축 형식:" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "압축 방법:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "압축 수준:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr ".tar.xyz 압축파일을 한 번에 열기 (대용량 압축파일은 천천히)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "취소" #: tdialogbox.btnOK.caption msgid "OK" msgstr "확인" #: ziplng.rscompressionmethodstore msgid "Store" msgstr "저장" #: ziplng.rscompressionmethodoptimal msgid "Optimal (2x slower)" msgstr "최적 (2배 느림)" #: ziplng.rscompressionlevelfastest msgid "Fastest" msgstr "가장 빠른" #: ziplng.rscompressionlevelfast msgid "Fast" msgstr "빠른" #: ziplng.rscompressionlevelnormal msgid "Normal" msgstr "일반" #: ziplng.rscompressionlevelmaximum msgid "Maximum" msgstr "최대" #: ziplng.rscompressionlevelultra msgid "Ultra" msgstr "울트라" doublecmd-1.1.30/plugins/wcx/zip/language/zip.hu.po0000644000175000001440000000273015104114162021213 0ustar alexxusersmsgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: Double Commander Zip WCX plugin\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Forge Studios Ltd. >\n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "X-Generator: Poedit 1.8.8\n" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Zip plugin beállítások" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "A Zip plugin a PKZIP-kompatibilis, TAR, XZ, GZip, Zstandard és BZip2 adattömörítést és archiválást támogatja." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "Tömörítés" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "Tömörítési módszer:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "Tömörítési szint:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "Nyissa meg a * .tar.xyz archívumokat egy lépésben (nagy archívumokkal lassú)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "Mégsem" #: tdialogbox.btnOK.caption msgid "OK" msgstr "OK" doublecmd-1.1.30/plugins/wcx/zip/language/zip.de.po0000644000175000001440000000376015104114162021173 0ustar alexxusersmsgid "" msgstr "" "Project-Id-Version: Double Commander Plugin 'zip'\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2024-11-01 18:01+0100\n" "Last-Translator: ㋡ \n" "Language-Team: Deutsch \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Zip-Plugin Konfiguration" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "Zip-Plugin unterstützt PKZIP-kompatible, TAR, XZ, GZip, Zstandard and BZip2 Komprimierung und Archivierung von Daten." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "Komprimierung" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "Format des Archivs:" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "Komprimierungsmethode:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "Komprimierungsgrad:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "*.tar.xyz Archive in einem Schritt öffnen (langsam bei großen Archiven)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "Abbrechen" #: tdialogbox.btnOK.caption msgid "OK" msgstr "OK" #: ziplng.rscompressionmethodstore msgid "Store" msgstr "Speichern" #: ziplng.rscompressionmethodoptimal msgid "Optimal (2x slower)" msgstr "Optimal (2x langsamer)" #: ziplng.rscompressionlevelfastest msgid "Fastest" msgstr "Am schnellsten" #: ziplng.rscompressionlevelfast msgid "Fast" msgstr "Schnell" #: ziplng.rscompressionlevelnormal msgid "Normal" msgstr "Normal" #: ziplng.rscompressionlevelmaximum msgid "Maximum" msgstr "Maximum" #: ziplng.rscompressionlevelultra msgid "Ultra" msgstr "Extrem" doublecmd-1.1.30/plugins/wcx/zip/language/zip.be.po0000644000175000001440000000345715104114162021174 0ustar alexxusersmsgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Crowdin-Project: b5aaebc75354984d7cee90405a1f6642\n" "X-Crowdin-Project-ID: 7\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /l10n_Translation/plugins/wcx/zip/language/zip.po\n" "X-Crowdin-File-ID: 3350\n" "Project-Id-Version: b5aaebc75354984d7cee90405a1f6642\n" "Language-Team: Belarusian\n" "Language: be_BY\n" "PO-Revision-Date: 2022-09-25 05:45\n" #: tdialogbox.caption msgid "Zip plugin configuration" msgstr "Канфігурацыя Zip-убудовы" #: tdialogbox.lblAbout.caption msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving." msgstr "Zip-убудова сумяшчальная з PKZIP, TAR, XZ, GZip, Zstandard і BZip2, падтрымлівае сцісканне і архівацыю даных." #: tdialogbox.gbCompression.caption msgid "Compression" msgstr "Сцісканне" #: tdialogbox.gbCompression.lblArchiveFormat.caption msgid "Archive format:" msgstr "" #: tdialogbox.gbCompression.lblCompressionMethod.caption msgid "Compression method:" msgstr "Метад сціскання:" #: tdialogbox.gbCompression.lblCompressionLevel.caption msgid "Compression level:" msgstr "Узровень сціскання:" #: tdialogbox.chkTarAutoHandle.caption msgid "Open *.tar.xyz archives at one step (slowly with big archives)" msgstr "Адкрываць архівы *.tar.xyz за адзін крок (павольна з вялікімі архівамі)" #: tdialogbox.btnCancel.caption msgid "Cancel" msgstr "Скасаваць" #: tdialogbox.btnOK.caption msgid "OK" msgstr "ДОБРА" doublecmd-1.1.30/plugins/wcx/zip/COPYING.txt0000644000175000001440000004313115104114162017524 0ustar alexxusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. doublecmd-1.1.30/plugins/wcx/unrar/0000755000175000001440000000000015104114162016176 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/unrar/src/0000755000175000001440000000000015104114162016765 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/unrar/src/unrarfunc.pas0000644000175000001440000004310315104114162021476 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for unpacking RAR archives This is simple wrapper for unrar.dll or libunrar.so Copyright (C) 2008-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit UnRARFunc; {$mode objfpc}{$H+} {$if FPC_FULLVERSION >= 30300} {$modeswitch arraytodynarray} {$endif} {$include calling.inc} interface uses DynLibs, WcxPlugin, Extension; const {$IF DEFINED(MSWINDOWS)} // libunrar must be built with sizeof(wchar_t) = 2 (default on Windows) _unrar = 'unrar.dll'; {$ELSEIF DEFINED(DARWIN)} // libunrar must be built with sizeof(wchar_t) = 4 (default on Unix) _unrar = 'libunrar.dylib'; {$ELSEIF DEFINED(UNIX)} // libunrar must be built with sizeof(wchar_t) = 4 (default on Unix) _unrar = 'libunrar.so'; {$ENDIF} const // Unrar callback messages. UCM_CHANGEVOLUME = 0; UCM_PROCESSDATA = 1; UCM_NEEDPASSWORD = 2; UCM_CHANGEVOLUMEW = 3; UCM_NEEDPASSWORDW = 4; UCM_LARGEDICT = 5; // Main header flags. MHD_VOLUME = $0001; MHD_COMMENT = $0002; MHD_LOCK = $0004; MHD_SOLID = $0008; MHD_PACK_COMMENT = $0010; MHD_NEWNUMBERING = $0010; MHD_AV = $0020; // (archive signed) MHD_PROTECT = $0040; MHD_PASSWORD = $0080; MHD_FIRSTVOLUME = $0100; MHD_ENCRYPTVER = $0200; type {$IFDEF UNIX} TRarUnicodeChar = UCS4Char; TRarUnicodeString = UCS4String; {$ENDIF} {$IFDEF WINDOWS} TRarUnicodeChar = WideChar; // assuming 2 byte WideChar TRarUnicodeString = UnicodeString; {$ENDIF} PRarUnicodeChar = ^TRarUnicodeChar; TRarUnicodeArray = packed array [0..1023] of TRarUnicodeChar; RARHeaderDataEx = packed record ArcName: packed array [0..1023] of Char; ArcNameW: TRarUnicodeArray; FileName: packed array [0..1023] of Char; FileNameW: TRarUnicodeArray; Flags: LongWord; PackSize: LongWord; PackSizeHigh: LongWord; UnpSize: LongWord; UnpSizeHigh: LongWord; HostOS: LongWord; FileCRC: LongWord; FileTime: LongWord; UnpVer: LongWord; Method: LongWord; FileAttr: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; DictSize: LongWord; HashType: LongWord; Hash: array[0..31] of Byte; RedirType: LongWord; RedirName: PRarUnicodeChar; RedirNameSize: LongWord; DirTarget: LongWord; MtimeLow: LongWord; MtimeHigh: LongWord; CtimeLow: LongWord; CtimeHigh: LongWord; AtimeLow: LongWord; AtimeHigh: LongWord; ArcNameEx: PRarUnicodeChar; ArcNameExSize: LongWord; FileNameEx: PRarUnicodeChar; FileNameExSize: LongWord; Reserved: packed array [0..981] of LongWord; end; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} TUnrarCallback = function(Msg: LongWord; UserData, P1: Pointer; P2: PtrInt): Integer; RAROpenArchiveDataEx = packed record ArcName: PAnsiChar; ArcNameW: PRarUnicodeChar; OpenMode: LongWord; OpenResult: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; Flags: LongWord; Callback: TUnrarCallback; UserData: PtrInt; Reserved: packed array [0..27] of LongWord; end; TRAROpenArchiveEx = function(var ArchiveData: RAROpenArchiveDataEx) : TArcHandle; TRARCloseArchive = function(hArcData: TArcHandle) : Integer; TRARReadHeaderEx = function (hArcData: TArcHandle; var HeaderData: RARHeaderDataEx) : Integer; TRARProcessFileW = function(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PRarUnicodeChar) : Integer; TRARSetCallback = procedure(hArcData: TArcHandle; UnrarCallback: TUnrarCallback; UserData: PtrInt); TRARSetPassword = procedure(hArcData: TArcHandle; Password: PChar); TRARGetDllVersion = function: Integer; {$CALLING DEFAULT} var RAROpenArchiveEx : TRAROpenArchiveEx = nil; RARCloseArchive : TRARCloseArchive = nil; RARReadHeaderEx : TRARReadHeaderEx = nil; RARProcessFileW : TRARProcessFileW = nil; RARSetCallback : TRARSetCallback = nil; RARSetPassword : TRARSetPassword = nil; RARGetDllVersion : TRARGetDllVersion = nil; ModuleHandle : TLibHandle = NilHandle; { Mandatory } function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle; dcpcall; export; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW) : TArcHandle; dcpcall; export; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer; dcpcall; export; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer; dcpcall; export; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PAnsiChar) : Integer; dcpcall; export; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer; dcpcall; export; function CloseArchive(hArcData: TArcHandle): Integer; dcpcall; export; procedure SetChangeVolProc(hArcData : TArcHandle; pChangeVolProc : TChangeVolProc); dcpcall; export; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW); dcpcall; export; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); dcpcall; export; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW); dcpcall; export; { Optional } function GetPackerCaps : Integer; dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; export; var gStartupInfo: TExtensionStartupInfo; threadvar ProcessDataProcW : TProcessDataProcW; implementation uses SysUtils, DCBasicTypes, DCDateTimeUtils, DCConvertEncoding, DCFileAttributes, RarLng; type // From libunrar (dll.hpp) RarHostSystem = ( HOST_MSDOS = 0, HOST_OS2 = 1, HOST_WIN32 = 2, HOST_UNIX = 3, HOST_MACOS = 4, HOST_BEOS = 5, HOST_MAX ); TRARHandle = class Handle: TArcHandle; ChangeVolProcW: TChangeVolProcW; ProcessDataProcW: TProcessDataProcW; ProcessFileNameW: array [0..1023] of WideChar; end; function StrLCopy(Dest, Source: PRarUnicodeChar; MaxLen: SizeInt): PRarUnicodeChar; overload; var ACounter: SizeInt; begin ACounter := 0; while (Source[ACounter] <> TRarUnicodeChar(0)) and (ACounter < MaxLen) do begin Dest[ACounter] := TRarUnicodeChar(Source[ACounter]); Inc(ACounter); end; Dest[ACounter] := TRarUnicodeChar(0); StrLCopy := Dest; end; procedure StringToArrayW(src: UnicodeString; pDst: PWideChar; MaxDstLength: Integer); begin if Length(src) < MaxDstLength then MaxDstLength := Length(src) else MaxDstLength := MaxDstLength - 1; // for ending #0 if Length(src) > 0 then Move(src[1], pDst^, SizeOf(WideChar) * MaxDstLength); pDst[MaxDstLength] := WideChar(0); end; function RarUnicodeStringToWideString(src: TRarUnicodeString): UnicodeString; begin {$IFDEF UNIX} Result := UCS4StringToUnicodeString(src); {$ELSE} Result := src; {$ENDIF} end; function WideStringToRarUnicodeString(src: UnicodeString): TRarUnicodeString; begin {$IFDEF UNIX} Result := UnicodeStringToUCS4String(src); {$ELSE} Result := src; {$ENDIF} end; function GetSystemSpecificFileTime(FileTime: LongInt) : LongInt; begin Result := FileTime; {$IFDEF UNIX} Result := LongInt(DateTimeToUnixFileTime(DosFileTimeToDateTime(TDosFileTime(Result)))); {$ENDIF} end; function GetSystemSpecificAttributes(HostOS: RarHostSystem; Attrs: LongInt): LongInt; begin Result := Attrs; {$IFDEF MSWINDOWS} if (HostOS = HOST_UNIX) or // Ugly hack: $1FFFF is max value of attributes on Windows (Result > $1FFFF) then begin Result := LongInt(UnixToWinFileAttr(TFileAttrs(Attrs))); end; {$ENDIF} {$IFDEF UNIX} if HostOS in [HOST_MSDOS, HOST_WIN32] then Result := LongInt(WinToUnixFileAttr(TFileAttrs(Result))); {$ENDIF} end; function UnrarCallback(Msg: LongWord; UserData, P1: Pointer; P2: PtrInt) : Integer; dcpcall; const Giga = 1024 * 1024; var PasswordU: String; Buttons: PPAnsiChar; DictSize: UIntPtr absolute P1; VolumeNameA: TRarUnicodeArray; VolumeNameU: TRarUnicodeString; PasswordA: array[0..511] of AnsiChar; AHandle: TRARHandle absolute UserData; VolumeNameW: array [0..1023] of WideChar; begin Result := 0; case Msg of UCM_CHANGEVOLUMEW: begin if Assigned(AHandle.ChangeVolProcW) then begin Move(PRarUnicodeChar(P1)^, VolumeNameA[0], SizeOf(TRarUnicodeArray)); VolumeNameW := RarUnicodeStringToWideString(VolumeNameA); if AHandle.ChangeVolProcW(VolumeNameW, LongInt(P2)) = 0 then Result := -1 else begin Result := 1; if (P2 = PK_VOL_ASK) then begin VolumeNameU := WideStringToRarUnicodeString(VolumeNameW); Move(PRarUnicodeChar(VolumeNameU)^, P1^, SizeOf(TRarUnicodeArray)); end; end; end else begin Result := -1; end; end; UCM_PROCESSDATA: begin // P1 - pointer to data buffer (first param of ProcessDataProc) // P2 - number of bytes in the buffer (second param of ProcessDataProc) if Assigned(AHandle.ProcessDataProcW) then begin if AHandle.ProcessDataProcW(PWideChar(AHandle.ProcessFileNameW), LongInt(P2)) = 0 then Result := -1; end; end; UCM_NEEDPASSWORDW: begin // DLL needs a password to process archive. This message must be // processed if you wish to be able to handle encrypted archives. // Return zero or a positive value to continue process or -1 // to cancel the archive operation. // P1 - contains the address pointing to the buffer for a password. // You need to copy a password here. // P2 - contains the size of password buffer in characters. StrLCopy(VolumeNameA, PRarUnicodeChar(P1), High(VolumeNameA)); PasswordU := CeUtf16ToUtf8(RarUnicodeStringToWideString(VolumeNameA)); StrLCopy(PasswordA, PAnsiChar(PasswordU), High(PasswordA)); if not gStartupInfo.InputBox('Unrar', 'Please enter the password:', True, PasswordA, High(PasswordA)) then Result := -1 else begin Result := 1; StrPLCopy(VolumeNameW, CeUtf8ToUtf16(PasswordA), High(VolumeNameW)); StrLCopy(PRarUnicodeChar(P1), PRarUnicodeChar(WideStringToRarUnicodeString(VolumeNameW)), P2 - 1); end; end; UCM_LARGEDICT: begin P2:= P2 div Giga; DictSize:= (DictSize div Giga) + Ord((DictSize mod Giga <> 0)); Buttons:= ArrayStringToPPchar([rsMsgButtonExtract, rsMsgButtonCancel], 0); try PasswordU:= Format(rsDictNotAllowed, [DictSize, P2, DictSize]) + LineEnding; if gStartupInfo.MsgChoiceBox(PAnsiChar(PasswordU), PAnsiChar(rsDictLargeWarning), Buttons, 0, 1) = 0 then Result:= 1 else begin Result:= -1; end; finally FreeMem(Buttons); end; end; end; end; function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle; dcpcall; export; begin Result := 0; ArchiveData.OpenResult := E_NOT_SUPPORTED; end; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW): TArcHandle; dcpcall; export; var RarArcName: TRarUnicodeString; AHandle: TRARHandle absolute Result; RarArchiveData: RAROpenArchiveDataEx; begin if (RAROpenArchiveEx = nil) then begin Result := 0; ArchiveData.OpenResult := E_EOPEN; end else begin AHandle:= TRARHandle.Create; RarArcName := WideStringToRarUnicodeString(ArchiveData.ArcName); RarArchiveData := Default(RAROpenArchiveDataEx); RarArchiveData.ArcNameW := PRarUnicodeChar(RarArcName); RarArchiveData.OpenMode := ArchiveData.OpenMode; RarArchiveData.Callback := @UnrarCallback; RarArchiveData.UserData := PtrInt(Result); AHandle.Handle := RAROpenArchiveEx(RarArchiveData); ArchiveData.OpenResult := RarArchiveData.OpenResult; if AHandle.Handle = 0 then FreeAndNil(AHandle) else begin ArchiveData.CmtSize := RarArchiveData.CmtSize; ArchiveData.CmtState := RarArchiveData.CmtState; RARSetCallback(AHandle.Handle, @UnrarCallback, PtrInt(Result)); end; end; end; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer; dcpcall; export; begin Result := E_NOT_SUPPORTED; end; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer; dcpcall; export; var RarHeader: RARHeaderDataEx; AHandle: TRARHandle absolute hArcData; begin if (RARReadHeaderEx = nil) then Result := E_EREAD else begin RarHeader:= Default(RARHeaderDataEx); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeaderEx(AHandle.Handle, RarHeader); if Result <> E_SUCCESS then Exit; {$PUSH}{$Q-}{$R-} StringToArrayW( RarUnicodeStringToWideString(TRarUnicodeString(RarHeader.ArcNameW)), @HeaderData.ArcName, SizeOf(HeaderData.ArcName)); StringToArrayW( RarUnicodeStringToWideString(TRarUnicodeString(RarHeader.FileNameW)), @HeaderData.FileName, SizeOf(HeaderData.FileName)); HeaderData.Flags := RarHeader.Flags; HeaderData.PackSize := RarHeader.PackSize; HeaderData.PackSizeHigh := RarHeader.PackSizeHigh; HeaderData.UnpSize := RarHeader.UnpSize; HeaderData.UnpSizeHigh := RarHeader.UnpSizeHigh; HeaderData.HostOS := RarHeader.HostOS; HeaderData.FileCRC := RarHeader.FileCRC; HeaderData.FileTime := RarHeader.FileTime; HeaderData.UnpVer := RarHeader.UnpVer; HeaderData.Method := RarHeader.Method; HeaderData.FileAttr := RarHeader.FileAttr; HeaderData.CmtSize := RarHeader.CmtSize; HeaderData.CmtState := RarHeader.CmtState; HeaderData.FileAttr := GetSystemSpecificAttributes(RarHostSystem(HeaderData.HostOS), HeaderData.FileAttr); HeaderData.FileTime := GetSystemSpecificFileTime(HeaderData.FileTime); Int64Rec(HeaderData.MfileTime).Lo:= RarHeader.MtimeLow; Int64Rec(HeaderData.MfileTime).Hi:= RarHeader.MtimeHigh; {$POP} AHandle.ProcessFileNameW := HeaderData.FileName; end; end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PAnsiChar) : Integer; dcpcall; export; begin Result := E_NOT_SUPPORTED; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer; dcpcall; export; var pwcDestPath: PRarUnicodeChar = nil; pwcDestName: PRarUnicodeChar = nil; AHandle: TRARHandle absolute hArcData; SysSpecDestPath, SysSpecDestName: TRarUnicodeString; begin if (RARProcessFileW = nil) then Result := E_EREAD else begin if DestPath <> nil then begin SysSpecDestPath:= WideStringToRarUnicodeString(DestPath); pwcDestPath := PRarUnicodeChar(SysSpecDestPath); end; if DestName <> nil then begin SysSpecDestName:= WideStringToRarUnicodeString(DestName); pwcDestName := PRarUnicodeChar(SysSpecDestName); end; Result := RARProcessFileW(AHandle.Handle, Operation, pwcDestPath, pwcDestName); end; end; function CloseArchive(hArcData: TArcHandle) : Integer;dcpcall; export; var AHandle: TRARHandle absolute hArcData; begin if (RARCloseArchive = nil) then Result := E_ECLOSE else begin Result := RARCloseArchive(AHandle.Handle); end; AHandle.Free; end; procedure SetChangeVolProc(hArcData: TArcHandle; pChangeVolProc: TChangeVolProc); dcpcall; export; begin end; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); dcpcall; export; begin end; procedure SetChangeVolProcW(hArcData: TArcHandle; pChangeVolProc: TChangeVolProcW); dcpcall; export; var AHandle: TRARHandle absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then AHandle.ChangeVolProcW := pChangeVolProc end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW); dcpcall; export; var AHandle: TRARHandle absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then AHandle.ProcessDataProcW := pProcessDataProc else begin ProcessDataProcW := pProcessDataProc; end; end; function GetPackerCaps: Integer; dcpcall; export; begin Result := PK_CAPS_MULTIPLE or PK_CAPS_BY_CONTENT or PK_CAPS_NEW or PK_CAPS_MODIFY or PK_CAPS_DELETE or PK_CAPS_OPTIONS or PK_CAPS_ENCRYPT; end; function GetBackgroundFlags: Integer; dcpcall; export; begin Result:= BACKGROUND_UNPACK or BACKGROUND_PACK; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; export; begin gStartupInfo := StartupInfo^; TranslateResourceStrings; if ModuleHandle = NilHandle then begin gStartupInfo.MessageBox(PAnsiChar(Format(rsMsgLibraryNotFound, [_unrar])), nil, MB_OK or MB_ICONERROR); end; end; finalization if ModuleHandle <> 0 then UnloadLibrary(ModuleHandle); end. doublecmd-1.1.30/plugins/wcx/unrar/src/unrar.lpi0000644000175000001440000001045115104114162020623 0ustar alexxusers doublecmd-1.1.30/plugins/wcx/unrar/src/unrar.dpr0000644000175000001440000000272415104114162020630 0ustar alexxuserslibrary unrar; uses {$IFDEF UNIX} cthreads, {$ENDIF} FPCAdds, SysUtils, DynLibs, UnRARFunc, RarFunc, RarLng; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } GetPackerCaps, PackFilesW, DeleteFilesW, ConfigurePacker, GetBackgroundFlags, PackSetDefaultParams, { Extension API } ExtensionInitialize; {$R *.res} begin ModuleHandle := LoadLibrary(_unrar); {$IF DEFINED(LINUX)} if ModuleHandle = NilHandle then ModuleHandle := LoadLibrary(_unrar + '.5'); {$ENDIF} if ModuleHandle = NilHandle then ModuleHandle := LoadLibrary(GetEnvironmentVariable('COMMANDER_PATH') + PathDelim + _unrar); if ModuleHandle <> NilHandle then begin RAROpenArchiveEx := TRAROpenArchiveEx(GetProcAddress(ModuleHandle, 'RAROpenArchiveEx')); RARCloseArchive := TRARCloseArchive(GetProcAddress(ModuleHandle, 'RARCloseArchive')); RARReadHeaderEx := TRARReadHeaderEx(GetProcAddress(ModuleHandle, 'RARReadHeaderEx')); RARProcessFileW := TRARProcessFileW(GetProcAddress(ModuleHandle, 'RARProcessFileW')); RARSetCallback := TRARSetCallback(GetProcAddress(ModuleHandle, 'RARSetCallback')); RARSetPassword := TRARSetPassword(GetProcAddress(ModuleHandle, 'RARSetPassword')); RARGetDllVersion := TRARGetDllVersion(GetProcAddress(ModuleHandle, 'RARGetDllVersion')); end; end. doublecmd-1.1.30/plugins/wcx/unrar/src/rarlng.pas0000644000175000001440000000376715104114162020774 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Rar archiver plugin, language support Copyright (C) 2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit RarLng; {$mode delphi} interface uses Classes, SysUtils; resourcestring rsMsgButtonCancel = '&Cancel'; rsMsgButtonExtract = '&Extract'; rsDictLargeWarning = 'Large dictionary warning'; rsMsgPasswordEnter = 'Please enter the password:'; rsDictNotAllowed = '%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack.'; rsMsgLibraryNotFound = 'Cannot load library %s! Please check your installation.'; rsMsgExecutableNotFound = 'Cannot find RAR executable!'#10#10'%s'#10#10'Please check the plugin settings.'; procedure TranslateResourceStrings; implementation uses UnRARFunc; function Translate(Name, Value: AnsiString; Hash: LongInt; Arg: Pointer): AnsiString; var ALen: Integer; begin with gStartupInfo do begin SetLength(Result, MaxSmallint); ALen:= TranslateString(Translation, PAnsiChar(Name), PAnsiChar(Value), PAnsiChar(Result), MaxSmallint); SetLength(Result, ALen); end; end; procedure TranslateResourceStrings; begin if Assigned(gStartupInfo.Translation) then begin SetResourceStrings(@Translate, nil); end; end; end. doublecmd-1.1.30/plugins/wcx/unrar/src/rarfunc.pas0000644000175000001440000002205715104114162021140 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Wcx plugin for packing RAR archives Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. } unit RarFunc; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WcxPlugin; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall; export; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; export; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; export; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; dcpcall; export; var IniFileName: String; implementation uses Process, LazUTF8, DCConvertEncoding, DCProcessUtf8, DCOSUtils, UnRARFunc, RarConfDlg, RarLng, Extension; const UTF16LEBOM: WideChar = #$FEFF; LineEndingW = WideChar(#13) + WideChar(#10); function RarToWcx(Error: Integer): Integer; begin case Error of 0: Result:= E_SUCCESS; // Successful operation 1: Result:= E_SUCCESS; // Warning. Non fatal error(s) occurred 2: Result:= E_BAD_ARCHIVE; // A fatal error occurred 3: Result:= E_BAD_DATA; // Invalid checksum. Data is damaged 4: Result:= E_EOPEN; // Attempt to modify a locked archive 5: Result:= E_EWRITE; // Write error 6: Result:= E_EOPEN; // File open error 7: Result:= E_NOT_SUPPORTED; // Wrong command line option 8: Result:= E_NO_MEMORY; // Not enough memory 9: Result:= E_ECREATE; // File create error 10: Result:= E_BAD_DATA; // No files matching the specified mask and options were found 11: Result:= E_BAD_DATA; // Wrong password 12: Result:= E_EREAD; // Read error 255: Result:= E_EABORTED; // User break else Result:= E_UNKNOWN; // Unknown end; end; function RarExists(const FileName: String): Boolean; var Message: String; begin Result:= mbFileExists(FileName); if not Result then begin Message:= Format(rsMsgExecutableNotFound, [FileName]); gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_OK or MB_ICONERROR); end; end; function ExecuteRar(Process: TProcessUtf8; FileList : UnicodeString): Integer; var TempFile: THandle; S, FileName: String; Percent: Integer = 0; begin FileName:= GetTempName(''); TempFile:= mbFileCreate(FileName); if (TempFile = feInvalidHandle) then Exit(E_ECREATE); try FileWrite(TempFile, FileList[1], Length(FileList) * SizeOf(WideChar)); FileClose(TempFile); Process.Parameters.Add('@' + FileName); Process.Execute; if poUsePipes in Process.Options then begin S:= EmptyStr; SetLength(FileName, MAX_PATH); while Process.Running do begin if Process.Output.NumBytesAvailable = 0 then Sleep(100) else begin SetLength(FileName, Process.Output.Read(FileName[1], Length(FileName))); S+= FileName; Result:= Pos('%', S); if Result > 0 then begin TempFile:= Result - 1; while S[TempFile] in ['0'..'9'] do Dec(TempFile); if (Result - TempFile) > 1 then begin Percent:= StrToIntDef(Copy(S, TempFile + 1, Result - TempFile - 1), Percent); end; S:= EmptyStr; end; end; if ProcessDataProcW(nil, -(Percent + 1000)) = 0 then begin Process.Terminate(255); Exit(E_EABORTED); end; end; end; Process.WaitOnExit; Result:= RarToWcx(Process.ExitStatus); finally DeleteFile(FileName); end; end; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall; export; begin IniFileName:= CeSysToUtf8(dps^.DefaultIniName); LoadConfig; end; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; export; begin CreateRarConfDlg; end; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; export; var Rar: String; Process : TProcessUtf8; FileName : UnicodeString; FileList : UnicodeString; FolderName: UnicodeString; begin Rar:= mbExpandEnvironmentStrings(WinRar); if not RarExists(Rar) then Exit(E_HANDLED); Process := TProcessUtf8.Create(nil); try Process.Executable:= Rar; Process.Parameters.Add('d'); Process.Parameters.Add('-c-'); Process.Parameters.Add('-r-'); Process.Parameters.Add(CeUtf16ToUtf8(UnicodeString(PackedFile))); try // Parse file list FileList:= UTF16LEBOM; while DeleteList^ <> #0 do begin FileName := DeleteList; // Convert PWideChar to UnicodeString (up to first #0). FileList += FileName + LineEndingW; // If ends with '*' then delete directory if FileName[Length(FileName)] = '*' then begin FolderName:= FileName; Delete(FolderName, Length(FileName) - 3, 4); FileList += FolderName + LineEndingW; end; DeleteList := DeleteList + Length(FileName) + 1; // move after filename and ending #0 end; Result:= ExecuteRar(Process, FileList); except Result:= E_EOPEN; end; finally Process.Free; end; end; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; export; const {$IF DEFINED(MSWINDOWS)} SFXExt = '.exe'; {$ELSE} SFXExt = '.run'; {$ENDIF} var Rar: String; Process : TProcessUtf8; FileList: UnicodeString; FileName: UnicodeString; FolderName: UnicodeString; Password: array[0..MAX_PATH] of AnsiChar; begin Rar:= mbExpandEnvironmentStrings(WinRar); if not RarExists(Rar) then Exit(E_HANDLED); Process := TProcessUtf8.Create(nil); try Process.Executable:= Rar; if FileIsConsoleExe(Process.Executable) then begin Process.Options:= [poUsePipes, poNoConsole, poNewProcessGroup]; end; if (Flags and PK_PACK_MOVE_FILES <> 0) then Process.Parameters.Add('m') else begin Process.Parameters.Add('a'); end; Process.Parameters.Add('-c-'); Process.Parameters.Add('-r-'); // Create solid archive if Solid then Process.Parameters.Add('-s'); // Compression method Process.Parameters.Add('-m' + IntToStr(Method)); if SameStr(ExtractFileExt(CeUtf16ToUtf8(UnicodeString(PackedFile))), SFXExt) then Process.Parameters.Add('-sfx'); // Add user command line parameters if Length(Args) > 0 then CommandToList(Args, Process.Parameters); // Add data recovery record if Recovery and (Pos('-rr', Args) = 0) then Process.Parameters.Add('-rr3p'); // Encrypt archive if (Flags and PK_PACK_ENCRYPT <> 0) then begin FillChar(Password, SizeOf(Password), #0); if gStartupInfo.InputBox('Rar', PAnsiChar(rsMsgPasswordEnter), True, PAnsiChar(Password), MAX_PATH) then begin if Encrypt then Process.Parameters.Add('-hp' + Password) else begin Process.Parameters.Add('-p' + Password); end; end else begin Exit(E_EABORTED); end; end; // Destination path if Assigned(SubPath) then begin Process.Parameters.Add('-ap' + CeUtf16ToUtf8(UnicodeString(SubPath))); end; Process.Parameters.Add(CeUtf16ToUtf8(UnicodeString(PackedFile))); // Source path if Assigned(SrcPath) then begin Process.CurrentDirectory:= CeUtf16ToUtf8(UnicodeString(SrcPath)); end; try // Parse file list FileList:= UTF16LEBOM; while AddList^ <> #0 do begin FileName := UnicodeString(AddList); FileList += FileName + LineEndingW; // If ends with '/' then add directory if FileName[Length(FileName)] = PathDelim then begin FolderName:= FileName; Delete(FolderName, Length(FileName), 1); FileList += FolderName + LineEndingW; end; Inc(AddList, Length(FileName) + 1); end; Result:= ExecuteRar(Process, FileList); except Result:= E_EOPEN; end; finally Process.Free; end; end; end. doublecmd-1.1.30/plugins/wcx/unrar/src/rarconfdlg.pas0000644000175000001440000000753315104114162021623 0ustar alexxusersunit RarConfDlg; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils; procedure LoadConfig; procedure CreateRarConfDlg; var Args: String; Method: Integer; Recovery: Boolean; Encrypt: Boolean; Solid: Boolean; {$IF DEFINED(MSWINDOWS)} WinRar: String = '%ProgramFiles%\WinRAR\WinRAR.exe'; {$ELSEIF DEFINED(DARWIN)} WinRar: String = '/usr/local/bin/rar'; {$ELSE} WinRar: String = '/usr/bin/rar'; {$ENDIF} implementation uses DCClassesUtf8, UnRARFunc, Extension, RarFunc; {$R *.lfm} procedure LoadConfig; var gIni: TIniFileEx; begin try gIni:= TIniFileEx.Create(IniFileName, fmOpenRead); try Args:= gIni.ReadString('unrar', 'Args', EmptyStr); WinRar:= gIni.ReadString('unrar', 'Path', WinRar); Method:= gIni.ReadInteger('unrar', 'Method', 3); Recovery:= gIni.ReadBool('unrar', 'Recovery', False); Encrypt:= gIni.ReadBool('unrar', 'Encrypt', False); Solid:= gIni.ReadBool('unrar', 'Solid', False); finally gIni.Free; end; except end; end; procedure SaveConfig; var gIni: TIniFileEx; begin try gIni:= TIniFileEx.Create(IniFileName, fmOpenReadWrite); try gIni.WriteString('unrar', 'Args', Args); gIni.WriteString('unrar', 'Path', WinRar); gIni.WriteInteger('unrar', 'Method', Method); gIni.WriteBool('unrar', 'Recovery', Recovery); gIni.WriteBool('unrar', 'Encrypt', Encrypt); gIni.WriteBool('unrar', 'Solid', Solid); gIni.UpdateFile; finally gIni.Free; end; except end; end; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin SendDlgMsg(pDlg, 'cmbMethod', DM_LISTSETITEMINDEX, Method, 0); SendDlgMsg(pDlg, 'chkRecovery', DM_SETCHECK, PtrInt(Recovery), 0); SendDlgMsg(pDlg, 'chkEncrypt', DM_SETCHECK, PtrInt(Encrypt), 0); SendDlgMsg(pDlg, 'chkSolid', DM_SETCHECK, PtrInt(Solid), 0); SendDlgMsg(pDlg, 'edtArgs', DM_SETTEXT, PtrInt(PAnsiChar(Args)), 0); SendDlgMsg(pDlg, 'fnePath', DM_SETTEXT, PtrInt(PAnsiChar(WinRar)), 0); end; DN_CLICK: if DlgItemName = 'btnSave' then begin Args:= PAnsiChar(SendDlgMsg(pDlg, 'edtArgs', DM_GETTEXT, 0, 0)); WinRar:= PAnsiChar(SendDlgMsg(pDlg, 'fnePath', DM_GETTEXT, 0, 0)); Method:= SendDlgMsg(pDlg, 'cmbMethod', DM_LISTGETITEMINDEX, 0, 0); Recovery:= Boolean(SendDlgMsg(pDlg, 'chkRecovery', DM_GETCHECK, 0, 0)); Encrypt:= Boolean(SendDlgMsg(pDlg, 'chkEncrypt', DM_GETCHECK, 0, 0)); Solid:= Boolean(SendDlgMsg(pDlg, 'chkSolid', DM_GETCHECK, 0, 0)); SaveConfig; SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end;// case end; // with end; procedure CreateRarConfDlg; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. doublecmd-1.1.30/plugins/wcx/unrar/src/rarconfdlg.lfm0000644000175000001440000001051315104114162021606 0ustar alexxusersobject DialogBox: TDialogBox Left = 373 Height = 282 Top = 194 Width = 320 AutoSize = True BorderStyle = bsDialog Caption = 'Options' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 282 ClientWidth = 320 OnShow = DialogBoxShow Position = poOwnerFormCenter LCLVersion = '1.4.2.0' object fnePath: TFileNameEdit AnchorSideLeft.Control = lblPath AnchorSideTop.Control = lblPath AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 31 Width = 296 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 BorderSpacing.Top = 6 MaxLength = 0 TabOrder = 0 end object lblPath: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 10 Height = 15 Top = 10 Width = 143 Caption = 'Path to Win&RAR executable' ParentColor = False end object gbOptions: TGroupBox AnchorSideLeft.Control = cmbMethod AnchorSideTop.Control = edtArgs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 85 Top = 158 Width = 300 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Archiving options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 65 ClientWidth = 296 TabOrder = 2 object chkRecovery: TCheckBox Left = 6 Height = 19 Top = 4 Width = 127 Caption = 'Add r&ecovery record' TabOrder = 0 end object chkEncrypt: TCheckBox Left = 6 Height = 19 Top = 23 Width = 127 Caption = 'Encrypt file &names' TabOrder = 1 end object chkSolid: TCheckBox Left = 6 Height = 19 Top = 42 Width = 127 Caption = 'Create &solid archive' TabOrder = 2 end end object lblMethod: TLabel AnchorSideLeft.Control = fnePath AnchorSideTop.Control = fnePath AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 60 Width = 115 BorderSpacing.Top = 6 Caption = '&Compression method' ParentColor = False end object cmbMethod: TComboBox AnchorSideLeft.Control = lblMethod AnchorSideTop.Control = lblMethod AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 79 Width = 300 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 15 ItemIndex = 3 Items.Strings = ( 'Store' 'Fastest' 'Fast' 'Normal' 'Good' 'Best' ) Style = csDropDownList TabOrder = 1 Text = 'Normal' end object brnCancel: TButton AnchorSideTop.Control = gbOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 235 Height = 25 Top = 253 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 10 Caption = 'Cancel' Cancel = True ModalResult = 2 OnClick = ButtonClick TabOrder = 4 end object btnSave: TButton AnchorSideTop.Control = brnCancel AnchorSideRight.Control = brnCancel Left = 154 Height = 25 Top = 253 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'OK' ModalResult = 1 OnClick = ButtonClick TabOrder = 3 end object lblArgs: TLabel AnchorSideLeft.Control = cmbMethod AnchorSideTop.Control = cmbMethod AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 108 Width = 117 BorderSpacing.Top = 6 Caption = 'Additional parameters' ParentColor = False end object edtArgs: TEdit AnchorSideLeft.Control = lblArgs AnchorSideTop.Control = lblArgs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 129 Width = 300 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 5 end end doublecmd-1.1.30/plugins/wcx/unrar/src/fpc-extra.cfg0000644000175000001440000000015715104114162021342 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-1.1.30/plugins/wcx/unrar/readme.txt0000644000175000001440000000130315104114162020171 0ustar alexxusersFor using this plugin you need unrar library. You can download it from http://www.rarlab.com/rar_add.htm Windows: Download "UnRAR.dll" - Self-extracting archive UnRARDLL.exe, unpack it and copy unrar.dll in Double Commander (or %windir%\system32) directory Linux: Download "UnRAR source" unrarsrc-x.x.x.tar.gz, unpack it: $ tar -xf unrarsrc-x.x.x.tar.gz go to "unrar" directory: $ cd unrar make symlink makefile.unix -> makefile: $ ln -s makefile.unix makefile set CXX environment variable to "g++ -DSILENT" $export CXX="g++ -DSILENT" and build library: $ make lib After compiling, copy "libunrar.so" in "/usr/lib" directory: $ cp libunrar.so /usr/lib/libunrar.sodoublecmd-1.1.30/plugins/wcx/unrar/language/0000755000175000001440000000000015104114162017761 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/unrar/language/unrar.zh_CN.po0000644000175000001440000000323515104114162022453 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Options" msgstr "选项" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "WinRAR 可执行文件的路径(&R)" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "存档选项" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "添加恢复记录(&E)" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "加密文件名(&N)" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "创建可靠的存档(&S)" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "压缩方式(&C)" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "取消" #: tdialogbox.btnsave.caption msgid "OK" msgstr "确定" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "附加参数" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "" #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "" doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.ru.po0000644000175000001440000000460315104114162022100 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Options" msgstr "Настройки" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "Путь к исполняемому файлу Win&RAR" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "Параметры архивации" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "Добавить запись &восстановления" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "&Шифровать имена файлов" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "Создать &непрерывный архив" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "&Метод сжатия" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "Отмена" #: tdialogbox.btnsave.caption msgid "OK" msgstr "OK" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "Дополнительные параметры" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "Предупреждение о большом словаре" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "Размер словаря %u Гб превышает ограничение в %u Гб, для распаковки требуется более %u Гб памяти." #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "О&тмена" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "&Распаковать" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Введите пароль:" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" "Исполняемый файл RAR не найден!\n" "\n" "%s\n" "\n" "Проверьте настройки плагина." #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "Не удалось загрузить библиотеку %s! Пожалуйста, проверьте установку." doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.pot0000644000175000001440000000277615104114162021650 0ustar alexxusersmsgid "" msgstr "Content-Type: text/plain; charset=UTF-8" #: tdialogbox.caption msgid "Options" msgstr "" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "" #: tdialogbox.btnsave.caption msgid "OK" msgstr "" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "" #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "" doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.ko.po0000644000175000001440000000457315104114162022071 0ustar alexxusersmsgid "" msgstr "" "Project-Id-Version: Double Commander Plugin - unrar\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: VenusGirl: https://venusgirls.tistory.com/\n" "Language-Team: 비너스걸: https://venusgirls.tistory.com/\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국어\n" "X-Generator: Poedit 3.4.2\n" #: tdialogbox.caption msgid "Options" msgstr "압축 옵션" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "WinRAR 실행 파일 경로(&R)" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "압축 옵션" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "복구 레코드 추가" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "파일 이름 암호화(&N)" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "솔리드 압축파일 만들기(&S)" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "압축 방법(&C)" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "취소" #: tdialogbox.btnsave.caption msgid "OK" msgstr "확인" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "추가 매개변수" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "큰 사전 경고" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "%u GB 사전이 %u GB 제한을 초과하여 풀려면 %u GB 이상의 메모리가 필요합니다." #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "취소(&C)" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "추출(&E)" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "암호를 입력하십시오:" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" "RAR 실행 파일을 찾을 수 없습니다!\\n\n" "\n" "%s\n" "\n" "플러그인 설정을 확인해 주세요." #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "%s 라이브러리를 로드할 수 없습니다! 설치를 확인하십시오." doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.hu.po0000644000175000001440000000437115104114162022070 0ustar alexxusersmsgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Project-Id-Version: Double Commander unrar WCX plugin\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Forge Studios Ltd. >\n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu_HU\n" "X-Generator: Poedit 1.8.8\n" #: tdialogbox.caption msgid "Options" msgstr "Beállítások" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "Win&RAR futtatható állomány helye" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "Archiválási beállítások" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "&Helyreállítási jegyzék hozzáadása" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "Fájl&nevek titkosítása" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "&Tömör archívum létrehozása" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "Tö&mörítési eljárás" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "Mégsem" #: tdialogbox.btnsave.caption msgid "OK" msgstr "OK" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "További paraméterek" #: dropdown list content msgid "Store;Fastest;Fast;Normal;Good;Best" msgstr "Tároló;Leggyorsabb;Gyors;Normál;Jó;Legjobb" msgid "Normal" msgstr "Normál" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "" #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "" doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.de.po0000644000175000001440000000472115104114162022043 0ustar alexxusersmsgid "" msgstr "" "Project-Id-Version: Double Commander Plugin 'unrar'\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2024-11-01 18:01+0100\n" "Last-Translator: ㋡ \n" "Language-Team: \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: tdialogbox.caption msgid "Options" msgstr "Optionen" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "Pfad zur ausführbaren Win&RAR-Datei" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "Optionen für die Archivierung" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "Wiederherstellungs&eintrag hinzufügen" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "Datei&namen verschlüsseln" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "&Solide (progressiv) komprimiertes Archiv erstellen" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "&Komprimierungsmethode" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "Abbrechen" #: tdialogbox.btnsave.caption msgid "OK" msgstr "OK" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "Zusätzliche Parameter" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "" "\"Großes Wörterbuch\"-Warnung (es fallen extrem viele Ersatzsymbole für " "Zeichenfolgen an)" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "" "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to " "unpack." msgstr "" "%u GB \"Wörterbuch\" übersteigt %u GB Grenze und braucht mehr als %u GB " "Speicher zum Entpacken." #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "Abbre&chen" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "&Entpacke einzelne Datei(en)" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Bitte Passwort eingeben:" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" "Ausführbares RAR-Programm nicht gefunden!\n" "\n" "%s\n" "\n" "Bitte überprüfen Sie die Einstellungen des Plugins." #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "" "Kann Bibliothek %s nicht laden! Bitte überprüfen Sie Ihre Installation." doublecmd-1.1.30/plugins/wcx/unrar/language/unrar.be.po0000644000175000001440000000445015104114162022040 0ustar alexxusersmsgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Crowdin-Project: b5aaebc75354984d7cee90405a1f6642\n" "X-Crowdin-Project-ID: 7\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /l10n_Translation/plugins/wcx/unrar/language/unrar.po\n" "X-Crowdin-File-ID: 3348\n" "Project-Id-Version: b5aaebc75354984d7cee90405a1f6642\n" "Language-Team: Belarusian\n" "Language: be_BY\n" "PO-Revision-Date: 2022-09-25 05:45\n" #: tdialogbox.caption msgid "Options" msgstr "Параметры" #: tdialogbox.lblpath.caption msgid "Path to Win&RAR executable" msgstr "Шлях да выканальнага файла Win&RAR" #: tdialogbox.gboptions.caption msgid "Archiving options" msgstr "Параметры архівацыі" #: tdialogbox.gboptions.chkrecovery.caption msgid "Add r&ecovery record" msgstr "Дадаць запіс &аднаўлення" #: tdialogbox.gboptions.chkencrypt.caption msgid "Encrypt file &names" msgstr "Шыфраваць назвы &файлаў" #: tdialogbox.gboptions.chksolid.caption msgid "Create &solid archive" msgstr "Стварыць &суцэльны архіў" #: tdialogbox.lblmethod.caption msgid "&Compression method" msgstr "Метад &сціскання" #: tdialogbox.brncancel.caption msgid "Cancel" msgstr "Скасаваць" #: tdialogbox.btnsave.caption msgid "OK" msgstr "ДОБРА" #: tdialogbox.lblargs.caption msgid "Additional parameters" msgstr "Дадатковыя параметры" #: rarlng.rsdictlargewarning msgid "Large dictionary warning" msgstr "" #: rarlng.rsdictnotallowed #, object-pascal-format msgid "%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to unpack." msgstr "" #: rarlng.rsmsgbuttoncancel msgid "&Cancel" msgstr "" #: rarlng.rsmsgbuttonextract msgid "&Extract" msgstr "" #: rarlng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: rarlng.rsmsgexecutablenotfound #, object-pascal-format msgid "" "Cannot find RAR executable!\n" "\n" "%s\n" "\n" "Please check the plugin settings." msgstr "" #: rarlng.rsmsglibrarynotfound #, object-pascal-format msgid "Cannot load library %s! Please check your installation." msgstr "" doublecmd-1.1.30/plugins/wcx/torrent/0000755000175000001440000000000015104114162016544 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/torrent/src/0000755000175000001440000000000015104114162017333 5ustar alexxusersdoublecmd-1.1.30/plugins/wcx/torrent/src/torrent.lpr0000644000175000001440000001007715104114162021554 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- BitTorrent archiver plugin Copyright (C) 2017 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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, see . } library torrent; {$mode delphi} {$include calling.inc} uses {$IFDEF UNIX} cthreads, {$ENDIF} FPCAdds, Classes, SysUtils, TorrentFile, WcxPlugin, DCDateTimeUtils, DCClassesUtf8, DCConvertEncoding; type PTorrentHandle = ^TTorrentHandle; TTorrentHandle = record Index: Integer; Torrent: TTorrentFile; end; function OpenArchive(var ArchiveData : tOpenArchiveData) : TArcHandle; dcpcall; begin Result := 0; ArchiveData.OpenResult := E_NOT_SUPPORTED; end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle; dcpcall; var AFileName: String; AStream: TFileStreamEx; AHandle: PTorrentHandle = nil; begin Result:= 0; if ArchiveData.OpenMode = PK_OM_EXTRACT then begin ArchiveData.OpenResult:= E_NOT_SUPPORTED; Exit; end; try AFileName := CeUtf16ToUtf8(UnicodeString(ArchiveData.ArcName)); AStream:= TFileStreamEx.Create(AFileName, fmOpenRead or fmShareDenyNone); try New(AHandle); AHandle.Index:= 0; AHandle.Torrent:= TTorrentFile.Create; if not AHandle.Torrent.Load(AStream) then raise Exception.Create(EmptyStr); Result:= TArcHandle(AHandle); finally AStream.Free; end; except ArchiveData.OpenResult:= E_EOPEN; if Assigned(AHandle) then begin AHandle.Torrent.Free; Dispose(AHandle); end; end; end; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer; dcpcall; begin Result := E_NOT_SUPPORTED; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer; dcpcall; var AFile: TTorrentSubFile; AHandle: PTorrentHandle absolute hArcData; begin if AHandle.Index >= AHandle.Torrent.Files.Count then Exit(E_END_ARCHIVE); AFile:= TTorrentSubFile(AHandle.Torrent.Files[AHandle.Index]); HeaderData.FileTime:= UnixFileTimeToWcxTime(AHandle.Torrent.CreationTime); HeaderData.FileName:= CeUtf8ToUtf16(AFile.Path + AFile.Name); HeaderData.UnpSize:= Int64Rec(AFile.Length).Lo; HeaderData.UnpSizeHigh:= Int64Rec(AFile.Length).Hi; HeaderData.PackSize:= HeaderData.UnpSize; HeaderData.PackSizeHigh:= HeaderData.UnpSizeHigh; Result:= E_SUCCESS; end; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer; dcpcall; begin Result := E_NOT_SUPPORTED; end; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer; dcpcall; var AHandle: PTorrentHandle absolute hArcData; begin Inc(AHandle.Index); Result:= E_SUCCESS; end; function CloseArchive (hArcData : TArcHandle) : Integer; dcpcall; var AHandle: PTorrentHandle absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin AHandle.Torrent.Free; Dispose(AHandle); end; Result:= E_SUCCESS; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : TChangeVolProc); dcpcall; begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); dcpcall; begin end; function GetPackerCaps : Integer;dcpcall; begin Result := PK_CAPS_MULTIPLE or PK_CAPS_HIDE; end; exports OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetProcessDataProc, GetPackerCaps; end. doublecmd-1.1.30/plugins/wcx/torrent/src/torrent.lpi0000644000175000001440000001003715104114162021537 0ustar alexxusers <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../torrent.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <TrashVariables Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="/usr/bin/doublecmd"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="torrent.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../torrent.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/torrent/src/TorrentFile.pas��������������������������������������������0000644�0001750�0000144�00000024711�15104114162�022302� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit TorrentFile; interface uses SysUtils, Contnrs, Hashes, Classes, BDecode; type TBitfield = array of boolean; TTorrentPiece = class(TObject) private _Hash: String; _HashBin: String; _Valid: Boolean; public property Hash: String read _Hash; property HashBin: String read _HashBin; property Valid: Boolean read _Valid write _Valid; constructor Create(Hash: String; HashBin:String; Valid: Boolean); end; TTorrentSubFile = class(TObject) private _Name: String; _Path: String; _Filename: String; _Length: Int64; _Offset: Int64; _Left: Int64; public property Name: String read _Name write _Name; property Path: String read _Path write _Path; property Length: Int64 read _Length; property Offset: Int64 read _Offset; property Left: Int64 read _Left write _Left; property Filename: String read _Filename write _Filename; constructor Create(Name: String; Path: String; Length: Int64; Offset: Int64); end; TTorrentFile = class(TObject) published private _Announce : String; _Name : String; _Comment : String; _Length : Int64; _CreationTime : Int32; _Count : Integer; _Err : TStringList; _Tree : TObjectHash; _SHA1Hash : String; _HashBin : String; _Multifile : Boolean; _Files : TObjectList; public Pieces : array of TTorrentPiece; PieceLength : Integer; BackupTrackers : TStringList; property Announce: String read _Announce write _Announce; property Name: String read _Name write _Name; property CreationTime: Int32 read _CreationTime write _CreationTime; property Length: Int64 read _Length; property Count: Integer read _Count; property Tree: TObjectHash read _Tree; property Errors: TStringList read _Err; property Hash: String read _SHA1Hash; property Comment: String read _Comment write _Comment; property HashBin: String read _HashBin; property Multifile: Boolean read _Multifile; property Files: TObjectList read _Files write _Files; procedure Clear(); function Load(Stream: TStream): Boolean; procedure Save(Stream: TStream; Pieces : array of TTorrentPiece); procedure Init(Announce, Name, Comment, HashBin:String; Length:Int64; Multifile:Boolean); constructor Create(); destructor Destroy(); override; end; implementation uses DCDateTimeUtils, SHA1; { TTorrentSubFile } constructor TTorrentSubFile.Create(Name, Path: String; Length: Int64; Offset: Int64); begin _Name := Name; _Path := Path; _Length := Length; _Offset := Offset; _Left := Length; inherited Create(); end; procedure TTorrentFile.Clear(); var i : Integer; begin _Announce := ''; _Name := ''; _SHA1Hash := ''; _Length := 0; _Count := 0; _Files.Clear(); _Tree.Clear(); _Err.Clear(); for i := Low(Pieces) to High(Pieces) do FreeAndNil(Pieces[i]); SetLength(Pieces,0); _Multifile := False; end; constructor TTorrentFile.Create(); begin _Files := TObjectList.Create(); _Tree := TObjectHash.Create(); _Err := TStringList.Create(); BackupTrackers := TStringList.Create; inherited Create(); end; destructor TTorrentFile.Destroy(); begin Clear(); FreeAndNil(_Files); FreeAndNil(_Tree); FreeAndNil(_Err); FreeAndNil(BackupTrackers); inherited; end; procedure TTorrentFile.Init(Announce, Name, Comment, HashBin:String; Length:Int64; Multifile:Boolean); begin _Announce := Announce; _Name := Name; _Comment := Comment; _HashBin := HashBin; _Length := Length; _Multifile := Multifile; _CreationTime := DateTimeToUnixFileTime(Now); end; function TTorrentFile.Load(Stream: TStream): Boolean; var info, thisfile: TObjectHash; files, path, backup, backup2: TObjectList; fp, fn: String; i, j, pcount: Integer; sz, fs, fo: Int64; digest: TSHA1Digest; r: Boolean; o: TObject; s:string; begin Clear(); r := False; sz := 0; try o := bdecodeStream(Stream); if(Assigned(o)) then begin _Tree := o as TObjectHash; if(_Tree.Exists('announce')) then begin _Announce := (_Tree['announce'] as TIntString).StringPart; end else begin _Err.Add('Corrupt File: Missing "announce" segment'); end; if(_Tree.Exists('announce-list')) then begin backup := _Tree['announce-list'] as TObjectList; for i := 0 to backup.Count - 1 do begin backup2 := (backup[i] as TObjectList); for j:=0 to backup2.Count -1 do BackupTrackers.Add((backup2[j] as TIntString).StringPart); end; end; if(_Tree.Exists('comment')) then begin _Comment := (_Tree['comment'] as TIntString).StringPart; end; if(_Tree.Exists('creation date')) then begin _CreationTime := (_Tree['creation date'] as TIntString).IntPart; end; if(_Tree.Exists('info')) then begin info := _Tree['info'] as TObjectHash; if(info.Exists('name')) then begin _Name := (info['name'] as TIntString).StringPart; if copy(_Name,system.length(_Name)-7,8)='.torrent' then _Name:=copy(_Name,0,system.length(_Name)-8); end else begin _Err.Add('Corrupt File: Missing "info.name" segment'); end; if(info.Exists('piece length')) then begin PieceLength := (info['piece length'] as TIntString).IntPart; end else begin _Err.Add('Corrupt File: Missing "info.piece length" segment'); end; { if(info.Exists('pieces')) then begin fp := (info['pieces'] as TIntString).StringPart; pcount := System.Length(fp) div 20; SetLength(Pieces,pcount); for i := 0 to pcount - 1 do begin s:=copy(fp,(i * 20) + 1,20); Pieces[i] := TTorrentPiece.Create(bin2hex(s), s, False); end; end else begin _Err.Add('Corrupt File: Missing "info.pieces" segment'); end; } if(info.Exists('length')) then begin // single-file archive sz := (info['length'] as TIntString).IntPart; _Count := 1; _Files.Add(TTorrentSubFile.Create(_Name,'',sz,Int64(0))); end else begin if(info.Exists('files')) then begin _Multifile := True; files := info['files'] as TObjectList; for i := 0 to files.Count - 1 do begin thisfile := files[i] as TObjectHash; if(thisfile.Exists('length')) then begin fs := (thisfile['length'] as TIntString).IntPart; end else begin fs := Int64(0); _Err.Add('Corrupt File: files[' + IntToStr(i) + '] is missing a "length" segment'); end; fp := ''; fn := ''; if(thisfile.Exists('path')) then begin path := thisfile['path'] as TObjectList; for j := 0 to path.Count - 2 do fp := fp + (path[j] as TIntString).StringPart + PathDelim; if(path.Count > 0) then fn := (path[path.Count - 1] as TIntString).StringPart; end else begin _Err.Add('Corrupt File: files[' + IntToStr(i) + '] is missing a "path" segment'); end; _Files.Add(TTorrentSubFile.Create(fn,fp,fs,sz)); sz := sz + fs; end; _Count := _Files.Count; end else begin _Err.Add('Corrupt File: Missing both "info.length" and "info.files" segments (should have one or the other)'); end; end; if(_Tree.Exists('_info_start') and _Tree.Exists('_info_length')) then begin fo := Stream.Position; Stream.Seek((_Tree['_info_start'] as TIntString).IntPart,soFromBeginning); fs := (_Tree['_info_length'] as TIntString).IntPart; SetLength(fp,fs); Stream.Read(PChar(fp)^,fs); digest := SHA1String(fp); _SHA1Hash := SHA1Print(digest); SetLength(_HashBin, 20); Move(digest[0], _HashBin[1], 20); Stream.Seek(fo,soFromBeginning); end; end else begin _Err.Add('Corrupt File: Missing "info" segment'); end; _Length := sz; r := True; end else begin _Err.Add('Error parsing file; does not appear to be valid bencoded metainfo'); end; except _Err.Add('Something bad happened while trying to load the file, probably corrupt metainfo'); end; Result := r; end; procedure TTorrentFile.Save(Stream: TStream; Pieces : array of TTorrentPiece); var i:integer; s,s2:string; procedure WStrm(s:string); begin Stream.WriteBuffer(s[1],system.length(s)); end; procedure WStrg(s:string); var t:String; begin t:=inttostr(system.length(s))+':'+s; WStrm(t); end; procedure WInt(i:int64); begin WStrm('i'); WStrm(IntToStr(i)); WStrm('e'); end; begin WStrm('d'); WStrg('announce'); WStrg(Announce); if BackupTrackers.Count > 0 then begin WStrg('announce-list'); WStrm('l'); // Primary Tracker WStrm('l'); WStrg(Announce); WStrm('e'); // Backup Tracker for i:=0 to BackupTrackers.Count-1 do if BackupTrackers[i] <> Announce then begin WStrm('l'); WStrg(BackupTrackers[i]); WStrm('e'); end; WStrm('e'); end; if Comment <> '' then begin WStrg('comment'); WStrg(comment); end; if Date <> 0 then begin WStrg('creation date'); WInt(CreationTime); end; WStrg('info'); WStrm('d'); if Multifile then begin WStrg('files'); WStrm('l'); for i:=0 to Files.Count-1 do with (Files[i] as TTorrentSubFile) do begin WStrm('d'); WStrg('length'); WInt(Length); WStrg('path'); WStrm('l'); if Path <> '' then begin s:=path; repeat if pos('\',s) <> 0 then begin s2:=copy(s,1,pos('\',s)-1); WStrg(s2); Delete(s,1,pos('\',s)); end; if (pos('\',s)=0) and (s <>'') then WStrg(s); until pos('\',s)=0; end; WStrg(Name); WStrm('e'); WStrm('e'); end; WStrm('e'); end else begin WStrg('length'); WInt(Length); end; WStrg('name'); WStrg(Name); WStrg('piece length'); WInt(PieceLength); WStrg('pieces'); WStrm(IntToStr((high(pieces)+1)*20)); WStrm(':'); for i:=0 to high(pieces) do WStrm(pieces[i].HashBin); WStrm('e'); WStrm('e'); end; constructor TTorrentPiece.Create(Hash, HashBin: String; Valid: Boolean); begin _Hash := Hash; _HashBin := HashBin; _Valid := Valid; inherited Create(); end; end. �������������������������������������������������������doublecmd-1.1.30/plugins/wcx/torrent/src/Hashes.pas�������������������������������������������������0000644�0001750�0000144�00000043304�15104114162�021257� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit Hashes; interface uses SysUtils; const c_HashInitialItemShift = 7; c_HashCompactR = 2; { This many spaces per item. } c_HashCompactM = 100; { Never for less than this number of spaces. } type EHashError = class(Exception); EHashFindError = class(EHashError); EHashIterateError = class(EHashError); EHashInvalidKeyError = class(EHashError); THashRecord = record Hash: Cardinal; ItemIndex: integer; Key: string; end; THashIterator = record ck, cx: integer; end; THash = class protected f_Keys: array of array of THashRecord; f_CurrentItemShift: integer; f_CurrentItemCount: integer; f_CurrentItemMask: integer; f_CurrentItemMaxIdx: integer; f_SpareItems: array of integer; f_NextAllowed: boolean; f_CurrentKey: string; f_AllowCompact: boolean; f_CurrentIterator: THashIterator; procedure FUpdateMasks; procedure FUpdateBuckets; function FFindKey(const Key: string; var k, x: integer): boolean; procedure FSetOrAddKey(const Key: string; ItemIndex: integer); procedure FDeleteIndex(i: integer); virtual; abstract; function FGetItemCount: integer; function FAllocItemIndex: integer; procedure FMoveIndex(oldIndex, newIndex: integer); virtual; abstract; procedure FTrimIndexes(count: integer); virtual; abstract; procedure FClearItems; virtual; abstract; function FIndexMax: integer; virtual; abstract; procedure FAutoCompact; public constructor Create; reintroduce; virtual; function Exists(const Key: string): boolean; procedure Rename(const Key, NewName: string); procedure Delete(const Key: string); procedure Restart; function Next: boolean; function Previous: boolean; function CurrentKey: string; property ItemCount: integer read FGetItemCount; procedure Compact; procedure Clear; property AllowCompact: boolean read f_AllowCompact write f_AllowCompact; property CurrentIterator: THashIterator read f_CurrentIterator write f_CurrentIterator; function NewIterator: THashIterator; end; TStringHash = class(THash) protected f_Items: array of string; procedure FDeleteIndex(i: integer); override; function FGetItem(const Key: string): string; procedure FSetItem(const Key, Value: string); procedure FMoveIndex(oldIndex, newIndex: integer); override; procedure FTrimIndexes(count: integer); override; procedure FClearItems; override; function FIndexMax: integer; override; public property Items[const Key: string]: string read FGetItem write FSetItem; default; end; TIntegerHash = class(THash) protected f_Items: array of integer; procedure FDeleteIndex(i: integer); override; function FGetItem(const Key: string): integer; procedure FSetItem(const Key: string; Value: integer); procedure FMoveIndex(oldIndex, newIndex: integer); override; procedure FTrimIndexes(count: integer); override; procedure FClearItems; override; function FIndexMax: integer; override; public property Items[const Key: string]: integer read FGetItem write FSetItem; default; end; TObjectHash = class(THash) protected f_Items: array of TObject; procedure FDeleteIndex(i: integer); override; function FGetItem(const Key: string): TObject; procedure FSetItem(const Key: string; Value: TObject); procedure FMoveIndex(oldIndex, newIndex: integer); override; procedure FTrimIndexes(count: integer); override; procedure FClearItems; override; function FIndexMax: integer; override; public property Items[const Key: string]: TObject read FGetItem write FSetItem; default; destructor Destroy; override; end; implementation function HashThis(const s: string): cardinal; var h, g, i: cardinal; begin if (s = '') then raise EHashInvalidKeyError.Create('Key cannot be an empty string'); h := $12345670; for i := 1 to Length(s) do begin h := (h shl 4) + ord(s[i]); g := h and $f0000000; if (g > 0) then h := h or (g shr 24) or g; end; result := h; end; constructor THash.Create; begin inherited Create; self.f_CurrentIterator.ck := -1; self.f_CurrentIterator.cx := 0; self.f_CurrentItemShift := c_HashInitialItemShift; self.FUpdateMasks; self.FUpdateBuckets; self.f_AllowCompact := true; end; procedure THash.Delete(const Key: string); var k, x, i: integer; begin { Hash has been modified, so disallow Next. } self.f_NextAllowed := false; if (self.FFindKey(Key, k, x)) then begin { Delete the Index entry. } i := self.f_Keys[k][x].ItemIndex; self.FDeleteIndex(i); { Add the index to the Spares list. } SetLength(self.f_SpareItems, Length(self.f_SpareItems) + 1); self.f_SpareItems[High(self.f_SpareItems)] := i; { Overwrite key with the last in the list. } self.f_Keys[k][x] := self.f_Keys[k][High(self.f_Keys[k])]; { Delete the last in the list. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) - 1); end else raise EHashFindError.CreateFmt('Key "%s" not found', [Key]); self.FAutoCompact; end; function THash.Exists(const Key: string): boolean; var dummy1, dummy2: integer; begin result := FFindKey(Key, dummy1, dummy2); end; procedure THash.FSetOrAddKey(const Key: string; ItemIndex: integer); var k, x, i: integer; begin { Exists already? } if (self.FFindKey(Key, k, x)) then begin { Yep. Delete the old stuff and set the new value. } i := self.f_Keys[k][x].ItemIndex; self.FDeleteIndex(i); self.f_Keys[k][x].ItemIndex := ItemIndex; { Add the index to the spares list. } SetLength(self.f_SpareItems, Length(self.f_SpareItems) + 1); self.f_SpareItems[High(self.f_SpareItems)] := i; end else begin { No, create a new one. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) + 1); self.f_Keys[k][High(self.f_Keys[k])].Key := Key; self.f_Keys[k][High(self.f_Keys[k])].ItemIndex := ItemIndex; self.f_Keys[k][High(self.f_Keys[k])].Hash := HashThis(Key); end; end; function THash.FFindKey(const Key: string; var k, x: integer): boolean; var i: integer; h: cardinal; begin { Which bucket? } h := HashThis(Key); k := h and f_CurrentItemMask; result := false; { Look for it. } for i := 0 to High(self.f_Keys[k]) do if (self.f_Keys[k][i].Hash = h) or true then if (self.f_Keys[k][i].Key = Key) then begin { Found it! } result := true; x := i; break; end; end; procedure THash.Rename(const Key, NewName: string); var k, x, i: integer; begin { Hash has been modified, so disallow Next. } self.f_NextAllowed := false; if (self.FFindKey(Key, k, x)) then begin { Remember the ItemIndex. } i := self.f_Keys[k][x].ItemIndex; { Overwrite key with the last in the list. } self.f_Keys[k][x] := self.f_Keys[k][High(self.f_Keys[k])]; { Delete the last in the list. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) - 1); { Create the new item. } self.FSetOrAddKey(NewName, i); end else raise EHashFindError.CreateFmt('Key "%s" not found', [Key]); self.FAutoCompact; end; function THash.CurrentKey: string; begin if (not (self.f_NextAllowed)) then raise EHashIterateError.Create('Cannot find CurrentKey as the hash has ' + 'been modified since Restart was called') else if (self.f_CurrentKey = '') then raise EHashIterateError.Create('Cannot find CurrentKey as Next has not yet ' + 'been called after Restart') else result := self.f_CurrentKey; end; function THash.Next: boolean; begin if (not (self.f_NextAllowed)) then raise EHashIterateError.Create('Cannot get Next as the hash has ' + 'been modified since Restart was called'); result := false; if (self.f_CurrentIterator.ck = -1) then begin self.f_CurrentIterator.ck := 0; self.f_CurrentIterator.cx := 0; end; while ((not result) and (self.f_CurrentIterator.ck <= f_CurrentItemMaxIdx)) do begin if (self.f_CurrentIterator.cx < Length(self.f_Keys[self.f_CurrentIterator.ck])) then begin result := true; self.f_CurrentKey := self.f_Keys[self.f_CurrentIterator.ck][self.f_CurrentIterator.cx].Key; inc(self.f_CurrentIterator.cx); end else begin inc(self.f_CurrentIterator.ck); self.f_CurrentIterator.cx := 0; end; end; end; procedure THash.Restart; begin self.f_CurrentIterator.ck := -1; self.f_CurrentIterator.cx := 0; self.f_NextAllowed := true; end; function THash.FGetItemCount: integer; var i: integer; begin { Calculate our item count. } result := 0; for i := 0 to f_CurrentItemMaxIdx do inc(result, Length(self.f_Keys[i])); end; function THash.FAllocItemIndex: integer; begin if (Length(self.f_SpareItems) > 0) then begin { Use the top SpareItem. } result := self.f_SpareItems[High(self.f_SpareItems)]; SetLength(self.f_SpareItems, Length(self.f_SpareItems) - 1); end else begin result := self.FIndexMax + 1; end; end; procedure THash.Compact; var aSpaces: array of boolean; aMapping: array of integer; i, j: integer; begin { Find out where the gaps are. We could do this by sorting, but that's at least O(n log n), and sometimes O(n^2), so we'll go for the O(n) method, even though it involves multiple passes. Note that this is a lot faster than it looks. Disabling this saves about 3% in my benchmarks, but uses a lot more memory. } if (self.AllowCompact) then begin SetLength(aSpaces, self.FIndexMax + 1); SetLength(aMapping, self.FIndexMax + 1); for i := 0 to High(aSpaces) do aSpaces[i] := false; for i := 0 to High(aMapping) do aMapping[i] := i; for i := 0 to High(self.f_SpareItems) do aSpaces[self.f_SpareItems[i]] := true; { Starting at the low indexes, fill empty ones from the high indexes. } i := 0; j := self.FIndexMax; while (i < j) do begin if (aSpaces[i]) then begin while ((i < j) and (aSpaces[j])) do dec(j); if (i < j) then begin aSpaces[i] := false; aSpaces[j] := true; self.FMoveIndex(j, i); aMapping[j] := i end; end else inc(i); end; j := self.FIndexMax; while (aSpaces[j]) do dec(j); { Trim the items array down to size. } self.FTrimIndexes(j + 1); { Clear the spaces. } SetLength(self.f_SpareItems, 0); { Update our buckets. } for i := 0 to f_CurrentItemMaxIdx do for j := 0 to High(self.f_Keys[i]) do self.f_Keys[i][j].ItemIndex := aMapping[self.f_Keys[i][j].ItemIndex]; end; end; procedure THash.FAutoCompact; begin if (self.AllowCompact) then if (Length(self.f_SpareItems) >= c_HashCompactM) then if (self.FIndexMax * c_HashCompactR > Length(self.f_SpareItems)) then self.Compact; end; procedure THash.Clear; var i: integer; begin self.FClearItems; SetLength(self.f_SpareItems, 0); for i := 0 to f_CurrentItemMaxIdx do SetLength(self.f_Keys[i], 0); end; procedure THash.FUpdateMasks; begin f_CurrentItemMask := (1 shl f_CurrentItemShift) - 1; f_CurrentItemMaxIdx := (1 shl f_CurrentItemShift) - 1; f_CurrentItemCount := (1 shl f_CurrentItemShift); end; procedure THash.FUpdateBuckets; begin { This is just a temporary thing. } SetLength(self.f_Keys, self.f_CurrentItemCount); end; function THash.NewIterator: THashIterator; begin result.ck := -1; result.cx := 0; end; function THash.Previous: boolean; begin if (not (self.f_NextAllowed)) then raise EHashIterateError.Create('Cannot get Next as the hash has ' + 'been modified since Restart was called'); result := false; if (self.f_CurrentIterator.ck >= 0) then begin while ((not result) and (self.f_CurrentIterator.ck >= 0)) do begin dec(self.f_CurrentIterator.cx); if (self.f_CurrentIterator.cx >= 0) then begin result := true; self.f_CurrentKey := self.f_Keys[self.f_CurrentIterator.ck][self.f_CurrentIterator.cx].Key; end else begin dec(self.f_CurrentIterator.ck); if (self.f_CurrentIterator.ck >= 0) then self.f_CurrentIterator.cx := Length(self.f_Keys[self.f_CurrentIterator.ck]); end; end; end; end; { TStringHash } procedure TStringHash.FDeleteIndex(i: integer); begin self.f_Items[i] := ''; end; function TStringHash.FGetItem(const Key: string): string; var k, x: integer; begin if (self.FFindKey(Key, k, x)) then result := self.f_Items[self.f_Keys[k][x].ItemIndex] else raise EHashFindError.CreateFmt('Key "%s" not found', [Key]); end; procedure TStringHash.FMoveIndex(oldIndex, newIndex: integer); begin self.f_Items[newIndex] := self.f_Items[oldIndex]; end; procedure TStringHash.FSetItem(const Key, Value: string); var k, x, i: integer; begin if (self.FFindKey(Key, k, x)) then self.f_Items[self.f_Keys[k][x].ItemIndex] := Value else begin { New index entry, or recycle an old one. } i := self.FAllocItemIndex; if (i > High(self.f_Items)) then SetLength(self.f_Items, i + 1); self.f_Items[i] := Value; { Add it to the hash. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) + 1); self.f_Keys[k][High(self.f_Keys[k])].Key := Key; self.f_Keys[k][High(self.f_Keys[k])].ItemIndex := i; self.f_Keys[k][High(self.f_Keys[k])].Hash := HashThis(Key); { Hash has been modified, so disallow Next. } self.f_NextAllowed := false; end; end; function TStringHash.FIndexMax: integer; begin result := High(self.f_Items); end; procedure TStringHash.FTrimIndexes(count: integer); begin SetLength(self.f_Items, count); end; procedure TStringHash.FClearItems; begin SetLength(self.f_Items, 0); end; { TIntegerHash } procedure TIntegerHash.FDeleteIndex(i: integer); begin self.f_Items[i] := 0; end; function TIntegerHash.FGetItem(const Key: string): integer; var k, x: integer; begin if (self.FFindKey(Key, k, x)) then result := self.f_Items[self.f_Keys[k][x].ItemIndex] else raise EHashFindError.CreateFmt('Key "%s" not found', [Key]); end; procedure TIntegerHash.FMoveIndex(oldIndex, newIndex: integer); begin self.f_Items[newIndex] := self.f_Items[oldIndex]; end; procedure TIntegerHash.FSetItem(const Key: string; Value: integer); var k, x, i: integer; begin if (self.FFindKey(Key, k, x)) then self.f_Items[self.f_Keys[k][x].ItemIndex] := Value else begin { New index entry, or recycle an old one. } i := self.FAllocItemIndex; if (i > High(self.f_Items)) then SetLength(self.f_Items, i + 1); self.f_Items[i] := Value; { Add it to the hash. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) + 1); self.f_Keys[k][High(self.f_Keys[k])].Key := Key; self.f_Keys[k][High(self.f_Keys[k])].ItemIndex := i; self.f_Keys[k][High(self.f_Keys[k])].Hash := HashThis(Key); { Hash has been modified, so disallow Next. } self.f_NextAllowed := false; end; end; function TIntegerHash.FIndexMax: integer; begin result := High(self.f_Items); end; procedure TIntegerHash.FTrimIndexes(count: integer); begin SetLength(self.f_Items, count); end; procedure TIntegerHash.FClearItems; begin SetLength(self.f_Items, 0); end; { TObjectHash } procedure TObjectHash.FDeleteIndex(i: integer); begin self.f_Items[i].Free; self.f_Items[i] := nil; end; function TObjectHash.FGetItem(const Key: string): TObject; var k, x: integer; begin if (self.FFindKey(Key, k, x)) then result := self.f_Items[self.f_Keys[k][x].ItemIndex] else raise EHashFindError.CreateFmt('Key "%s" not found', [Key]); end; procedure TObjectHash.FMoveIndex(oldIndex, newIndex: integer); begin self.f_Items[newIndex] := self.f_Items[oldIndex]; end; procedure TObjectHash.FSetItem(const Key: string; Value: TObject); var k, x, i: integer; begin if (self.FFindKey(Key, k, x)) then begin self.f_Items[self.f_Keys[k][x].ItemIndex].Free; self.f_Items[self.f_Keys[k][x].ItemIndex] := Value; end else begin { New index entry, or recycle an old one. } i := self.FAllocItemIndex; if (i > High(self.f_Items)) then SetLength(self.f_Items, i + 1); self.f_Items[i] := Value; { Add it to the hash. } SetLength(self.f_Keys[k], Length(self.f_Keys[k]) + 1); self.f_Keys[k][High(self.f_Keys[k])].Key := Key; self.f_Keys[k][High(self.f_Keys[k])].ItemIndex := i; self.f_Keys[k][High(self.f_Keys[k])].Hash := HashThis(Key); { Hash has been modified, so disallow Next. } self.f_NextAllowed := false; end; end; function TObjectHash.FIndexMax: integer; begin result := High(self.f_Items); end; procedure TObjectHash.FTrimIndexes(count: integer); begin SetLength(self.f_Items, count); end; procedure TObjectHash.FClearItems; var i: integer; begin for i := 0 to High(self.f_Items) do if (Assigned(self.f_Items[i])) then self.f_Items[i].Free; SetLength(self.f_Items, 0); end; destructor TObjectHash.Destroy; var i: integer; begin for i := 0 to High(self.f_Items) do if (Assigned(self.f_Items[i])) then self.f_Items[i].Free; inherited; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/torrent/src/BDecode.pas������������������������������������������������0000644�0001750�0000144�00000007535�15104114162�021337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit BDecode; {====================================================================== BDecode.pas -- BitTorrent BDecoding Routines Original Coding by Knowbuddy, 2003-03-19 ======================================================================} interface uses SysUtils, Classes, Hashes, Contnrs; type TISType = (tisString = 0, tisInt); TIntString = class(TObject) public StringPart: String; IntPart: Int64; ISType: TISType; end; function bdecodeStream(s: TStream): TObject; function bdecodeInt64(s: TStream): TIntString; function bdecodeHash(s: TStream): TObjectHash; function bdecodeString(s: TStream; i: Integer = 0): TIntString; function bdecodeList(s: TStream): TObjectList; function bin2hex(s: String; m: Integer = 999): String; var hexchars: array[0..15] of Char = '0123456789abcdef'; implementation function bin2hex(s: String; m: Integer = 999): String; var i, j, k, l : Integer; r : array of Char; begin l := Length(s); if(m < l) then l := m; SetLength(r,l * 2); for i := 1 to l do begin j := Ord(s[i]); k := (i - 1) * 2; r[k] := hexchars[j div 16]; r[k+1] := hexchars[j mod 16]; end; bin2hex := String(r); end; function bdecodeStream(s: TStream): TObject; var r: TObject; c: Char; n: Integer; begin n := s.Read(c, 1); if(n > 0) then begin case c of 'd' : r:= bdecodeHash(s); 'l' : r:= bdecodeList(s); 'i' : r:= bdecodeInt64(s); '0'..'9' : r:= bdecodeString(s,StrToInt(c)); else r := nil; end; end else begin r := nil; end; bdecodeStream := r; end; function bdecodeHash(s: TStream): TObjectHash; var r: TObjectHash; o: TObject; n, st: Integer; c: Char; k, l: TIntString; begin r := TObjectHash.Create(); n := s.Read(c, 1); while((n > 0) and (c <> 'e') and (c >= '0') and (c <= '9')) do begin n := StrToInt(c); k := bdecodeString(s, n); if(k <> nil) then begin st := s.Position; o := bdecodeStream(s); if((o <> nil) and (k.StringPart <> '')) then r[k.StringPart] := o; if(k.StringPart = 'pieces') then begin k.StringPart:='pieces'; end; if(k.StringPart = 'info') then begin l := TIntString.Create(); l.IntPart := st; r['_info_start'] := l; l := TIntString.Create(); l.IntPart := s.Position - st; r['_info_length'] := l; end; end; n := s.Read(c, 1); end; if ((c < '0') or (c > '9')) and (c <> 'e') then bdecodeHash:= nil else bdecodeHash := r; end; function bdecodeList(s: TStream): TObjectList; var r: TObjectList; o: TObject; n: Integer; c: Char; begin r := TObjectList.Create(); n := s.Read(c, 1); while((n > 0) and (c <> 'e')) do begin s.Seek(-1, soFromCurrent); o := bdecodeStream(s); if(o <> nil) then r.Add(o); n := s.Read(c, 1); end; bdecodeList := r; end; function bdecodeString(s: TStream; i: Integer = 0): TIntString; var r: TIntString; t: String; c: Char; n: Integer; begin c := '0'; n := s.Read(c, 1); while((n > 0) and (c >= '0') and (c <= '9')) do begin i := (i * 10) + StrToInt(c); n := s.Read(c, 1); end; SetLength(t, i); n:=s.Read(PChar(t)^, i); r := TIntString.Create(); r.StringPart := t; r.ISType := tisString; bdecodeString := r; end; function bdecodeInt64(s: TStream): TIntString; var r: TIntString; i: Int64; c: Char; n: Integer; neg: boolean; begin i := 0; c := '0'; neg:= false; repeat if c='-' then neg:= true else i := (i * 10) + StrToInt(c); n := s.Read(c, 1); until not ((n > 0) and (((c >= '0')and(c <= '9'))or(c = '-'))); if neg then i:=-i; r := TIntString.Create(); r.IntPart := i; r.ISType := tisInt; bdecodeInt64 := r; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/torrent/COPYING.txt����������������������������������������������������0000644�0001750�0000144�00000064505�15104114162�020427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. (This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.) Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {description} Copyright (C) {year} {fullname} This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. {signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice That's all there is to it! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016712� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017501� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/platform/�������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021325� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/platform/sevenziphlp.pas����������������������������������0000644�0001750�0000144�00000001152�15104114162�024400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SevenZipHlp; {$mode delphi} interface uses Classes, SysUtils, ActiveX; procedure VarStringClear(var PropVariant: TPropVariant); function BinaryToUnicode(const bstrVal: TBstr): UnicodeString; implementation uses Windows; procedure VarStringClear(var PropVariant: TPropVariant); begin PropVariant.vt:= VT_EMPTY; SysFreeString(PropVariant.bstrVal); end; function BinaryToUnicode(const bstrVal: TBstr): UnicodeString; var PropSize: Cardinal; begin PropSize:= SysStringByteLen(bstrVal); SetLength(Result, PropSize div SizeOf(WideChar)); Move(bstrVal^, PWideChar(Result)^, PropSize); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020251� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/windows/����������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021743� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/windows/sevenzip.pas����������������������������������0000644�0001750�0000144�00000101315�15104114162�024314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{**************************************************************************************************} { } { Project JEDI Code Library (JCL) } { } { interface of the 'sevenzip' (http://sourceforge.net/projects/sevenzip/) compression library } { version 4.62, December 2th, 2008 } { } { Copyright (C) 1999-2008 Igor Pavlov } { } { GNU LGPL information } { -------------------- } { } { This library 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 library 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 } { library; if not, write to } { the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } { } { unRAR restriction } { ----------------- } { } { The decompression engine for RAR archives was developed using source code of unRAR program. } { All copyrights to original unRAR code are owned by Alexander Roshal. } { } { The license for original unRAR code has the following restriction: } { } { The unRAR sources cannot be used to re-create the RAR compression algorithm, } { which is proprietary. Distribution of modified unRAR sources in separate form } { or as a part of other software is permitted, provided that it is clearly } { stated in the documentation and source comments that the code may } { not be used to develop a RAR (WinRAR) compatible archiver. } { } {**************************************************************************************************} { } { Translation 2007-2008 Florent Ouchet for the JEDI Code Library } { Contributors: } { Uwe Schuster (uschuster) } { Jan Goyvaerts (jgsoft) } { } {**************************************************************************************************} { } { Last modified: $Date:: $ } { Revision: $Rev:: $ } { Author: $Author:: $ } { } {**************************************************************************************************} unit sevenzip; {$mode delphi} interface {$DEFINE 7ZIP_LINKONREQUEST} uses {$IFDEF HAS_UNITSCOPE} Winapi.ActiveX, Winapi.Windows, {$ELSE ~HAS_UNITSCOPE} ActiveX, Windows, {$ENDIF ~HAS_UNITSCOPE} {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} DCJclAlternative; //DOM-IGNORE-BEGIN // Guid.txt const CLSID_CCodec : TGUID = '{23170F69-40C1-2790-0000-000000000000}'; CLSID_CCodecBCJ2 : TGUID = '{23170F69-40C1-2790-1B01-030300000000}'; // BCJ2 0303011B CLSID_CCodecBCJ : TGUID = '{23170F69-40C1-2790-0301-030300000000}'; // BCJ 03030103 CLSID_CCodecSWAP2 : TGUID = '{23170F69-40C1-2790-0203-030000000000}'; // swap2 020302 CLSID_CCodecSWAP4 : TGUID = '{23170F69-40C1-2790-0403-020000000000}'; // swap4 020304 CLSID_CCodecBPPC : TGUID = '{23170F69-40C1-2790-0502-030300000000}'; // branch ppc 03030205 CLSID_CCodecBIA64 : TGUID = '{23170F69-40C1-2790-0104-030300000000}'; // branch IA64 03030401 CLSID_CCodecBARM : TGUID = '{23170F69-40C1-2790-0105-030300000000}'; // branch ARM 03030501 CLSID_CCodecBARMT : TGUID = '{23170F69-40C1-2790-0107-030300000000}'; // branch ARM Thumb 03030701 CLSID_CCodecBARMS : TGUID = '{23170F69-40C1-2790-0508-030300000000}'; // branch ARM Sparc 03030805 CLSID_CCodecBZIP : TGUID = '{23170F69-40C1-2790-0202-040000000000}'; // bzip2 040202 CLSID_CCodecCOPY : TGUID = '{23170F69-40C1-2790-0000-000000000000}'; // copy 0 CLSID_CCodecDEF64 : TGUID = '{23170F69-40C1-2790-0901-040000000000}'; // deflate64 040109 CLSID_CCodecDEFNSIS : TGUID = '{23170F69-40C1-2790-0109-040000000000}'; // deflate nsis 040901 CLSID_CCodecDEFREG : TGUID = '{23170F69-40C1-2790-0801-040000000000}'; // deflate register 040108 CLSID_CCodecLZMA : TGUID = '{23170F69-40C1-2790-0101-030000000000}'; // lzma 030101 CLSID_CCodecPPMD : TGUID = '{23170F69-40C1-2790-0104-030000000000}'; // ppmd 030401 CLSID_CCodecRAR1 : TGUID = '{23170F69-40C1-2790-0103-040000000000}'; // rar1 040301 CLSID_CCodecRAR2 : TGUID = '{23170F69-40C1-2790-0203-040000000000}'; // rar2 040302 CLSID_CCodecRAR3 : TGUID = '{23170F69-40C1-2790-0303-040000000000}'; // rar3 040303 CLSID_CAESCodec : TGUID = '{23170F69-40C1-2790-0107-F10600000000}'; // AES 06F10701 CLSID_CArchiveHandler : TGUID = '{23170F69-40C1-278A-1000-000110000000}'; CLSID_CFormatZip : TGUID = '{23170F69-40C1-278A-1000-000110010000}'; CLSID_CFormatBZ2 : TGUID = '{23170F69-40C1-278A-1000-000110020000}'; CLSID_CFormatRar : TGUID = '{23170F69-40C1-278A-1000-000110030000}'; CLSID_CFormatArj : TGUID = '{23170F69-40C1-278A-1000-000110040000}'; CLSID_CFormatZ : TGUID = '{23170F69-40C1-278A-1000-000110050000}'; CLSID_CFormatLzh : TGUID = '{23170F69-40C1-278A-1000-000110060000}'; CLSID_CFormat7z : TGUID = '{23170F69-40C1-278A-1000-000110070000}'; CLSID_CFormatCab : TGUID = '{23170F69-40C1-278A-1000-000110080000}'; CLSID_CFormatNsis : TGUID = '{23170F69-40C1-278A-1000-000110090000}'; CLSID_CFormatLzma : TGUID = '{23170F69-40C1-278A-1000-0001100A0000}'; CLSID_CFormatLzma86 : TGUID = '{23170F69-40C1-278A-1000-0001100B0000}'; CLSID_CFormatXz : TGUID = '{23170F69-40C1-278A-1000-0001100C0000}'; CLSID_CFormatPpmd : TGUID = '{23170F69-40C1-278A-1000-0001100D0000}'; CLSID_CFormatTE : TGUID = '{23170F69-40C1-278A-1000-000110CF0000}'; CLSID_CFormatUEFIc : TGUID = '{23170F69-40C1-278A-1000-000110D00000}'; CLSID_CFormatUEFIs : TGUID = '{23170F69-40C1-278A-1000-000110D10000}'; CLSID_CFormatSquashFS : TGUID = '{23170F69-40C1-278A-1000-000110D20000}'; CLSID_CFormatCramFS : TGUID = '{23170F69-40C1-278A-1000-000110D30000}'; CLSID_CFormatAPM : TGUID = '{23170F69-40C1-278A-1000-000110D40000}'; CLSID_CFormatMslz : TGUID = '{23170F69-40C1-278A-1000-000110D50000}'; CLSID_CFormatFlv : TGUID = '{23170F69-40C1-278A-1000-000110D60000}'; CLSID_CFormatSwf : TGUID = '{23170F69-40C1-278A-1000-000110D70000}'; CLSID_CFormatSwfc : TGUID = '{23170F69-40C1-278A-1000-000110D80000}'; CLSID_CFormatNtfs : TGUID = '{23170F69-40C1-278A-1000-000110D90000}'; CLSID_CFormatFat : TGUID = '{23170F69-40C1-278A-1000-000110DA0000}'; CLSID_CFormatMbr : TGUID = '{23170F69-40C1-278A-1000-000110DB0000}'; CLSID_CFormatVhd : TGUID = '{23170F69-40C1-278A-1000-000110DC0000}'; CLSID_CFormatPe : TGUID = '{23170F69-40C1-278A-1000-000110DD0000}'; CLSID_CFormatElf : TGUID = '{23170F69-40C1-278A-1000-000110DE0000}'; CLSID_CFormatMacho : TGUID = '{23170F69-40C1-278A-1000-000110DF0000}'; CLSID_CFormatUdf : TGUID = '{23170F69-40C1-278A-1000-000110E00000}'; CLSID_CFormatXar : TGUID = '{23170F69-40C1-278A-1000-000110E10000}'; CLSID_CFormatMub : TGUID = '{23170F69-40C1-278A-1000-000110E20000}'; CLSID_CFormatHfs : TGUID = '{23170F69-40C1-278A-1000-000110E30000}'; CLSID_CFormatDmg : TGUID = '{23170F69-40C1-278A-1000-000110E40000}'; CLSID_CFormatCompound : TGUID = '{23170F69-40C1-278A-1000-000110E50000}'; CLSID_CFormatWim : TGUID = '{23170F69-40C1-278A-1000-000110E60000}'; CLSID_CFormatIso : TGUID = '{23170F69-40C1-278A-1000-000110E70000}'; //CLSID_CFormatBkf : TGUID = '{23170F69-40C1-278A-1000-000110E80000}'; not in 4.57 CLSID_CFormatChm : TGUID = '{23170F69-40C1-278A-1000-000110E90000}'; CLSID_CFormatSplit : TGUID = '{23170F69-40C1-278A-1000-000110EA0000}'; CLSID_CFormatRpm : TGUID = '{23170F69-40C1-278A-1000-000110EB0000}'; CLSID_CFormatDeb : TGUID = '{23170F69-40C1-278A-1000-000110EC0000}'; CLSID_CFormatCpio : TGUID = '{23170F69-40C1-278A-1000-000110ED0000}'; CLSID_CFormatTar : TGUID = '{23170F69-40C1-278A-1000-000110EE0000}'; CLSID_CFormatGZip : TGUID = '{23170F69-40C1-278A-1000-000110EF0000}'; // IStream.h type // "23170F69-40C1-278A-0000-000300xx0000" ISequentialInStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300010000}'] function Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; {Out: if size != 0, return_value = S_OK and (*processedSize == 0), then there are no more bytes in stream. if (size > 0) && there are bytes in stream, this function must read at least 1 byte. This function is allowed to read less than number of remaining bytes in stream. You must call Read function in loop, if you need exact amount of data} end; ISequentialOutStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300020000}'] function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; {if (size > 0) this function must write at least 1 byte. This function is allowed to write less than "size". You must call Write function in loop, if you need to write exact amount of data} end; IInStream = interface(ISequentialInStream) ['{23170F69-40C1-278A-0000-000300030000}'] function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; end; IOutStream = interface(ISequentialOutStream) ['{23170F69-40C1-278A-0000-000300040000}'] function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; IStreamGetSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300060000}'] function GetSize(Size: PInt64): HRESULT; stdcall; end; IOutStreamFlush = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300070000}'] function Flush: HRESULT; stdcall; end; // PropID.h const kpidNoProperty = 0; kpidMainSubfile = 1; kpidHandlerItemIndex = 2; kpidPath = 3; kpidName = 4; kpidExtension = 5; kpidIsFolder = 6 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidIsDir' {$ENDIF} {$ENDIF}; kpidIsDir = 6; kpidSize = 7; kpidPackedSize = 8 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidPackSize' {$ENDIF} {$ENDIF}; kpidPackSize = 8; kpidAttributes = 9 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidAttrib' {$ENDIF} {$ENDIF}; kpidAttrib = 9; kpidCreationTime = 10 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidCTime' {$ENDIF} {$ENDIF}; kpidCTime = 10; kpidLastAccessTime = 11 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidATime' {$ENDIF} {$ENDIF}; kpidATime = 11; kpidLastWriteTime = 12 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidMTime' {$ENDIF} {$ENDIF}; kpidMTime = 12; kpidSolid = 13; kpidCommented = 14; kpidEncrypted = 15; kpidSplitBefore = 16; kpidSplitAfter = 17; kpidDictionarySize = 18; kpidCRC = 19; kpidType = 20; kpidIsAnti = 21; kpidMethod = 22; kpidHostOS = 23; kpidFileSystem = 24; kpidUser = 25; kpidGroup = 26; kpidBlock = 27; kpidComment = 28; kpidPosition = 29; kpidPrefix = 30; kpidNumSubDirs = 31; kpidNumSubFiles = 32; kpidUnpackVer = 33; kpidVolume = 34; kpidIsVolume = 35; kpidOffset = 36; kpidLinks = 37; kpidNumBlocks = 38; kpidNumVolumes = 39; kpidTimeType = 40; kpidBit64 = 41; kpidBigEndian = 42; kpidCpu = 43; kpidPhySize = 44; kpidHeadersSize = 45; kpidChecksum = 46; kpidCharacts = 47; kpidVa = 48; kpidId = 49; kpidShortName = 50; kpidCreatorApp = 51; kpidSectorSize = 52; kpidPosixAttrib = 53; kpidLink = 54; kpidIsAltStream = 63; kpidTotalSize = $1100; kpidFreeSpace = $1101; kpidClusterSize = $1102; kpidVolumeName = $1103; kpidLocalName = $1200; kpidProvider = $1201; kpidUserDefined = $10000; // HandlerOut.cpp kCopyMethodName = WideString('Copy'); kLZMAMethodName = WideString('LZMA'); kLZMA2MethodName = WideString('LZMA2'); kBZip2MethodName = WideString('BZip2'); kPpmdMethodName = WideString('PPMd'); kDeflateMethodName = WideString('Deflate'); kDeflate64MethodName = WideString('Deflate64'); kAES128MethodName = WideString('AES128'); kAES192MethodName = WideString('AES192'); kAES256MethodName = WideString('AES256'); kZipCryptoMethodName = WideString('ZIPCRYPTO'); // ICoder.h type ICompressProgressInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400040000}'] function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; ICompressCoder = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400050000}'] function Code(InStream: ISequentialInStream; OutStream: ISequentialOutStream; InSize, OutSize: PInt64; Progress: ICompressProgressInfo): HRESULT; stdcall; end; PISequentialInStream = ^ISequentialInStream; PISequentialOutStream = ^ISequentialOutStream; ICompressCoder2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400180000}'] function Code(InStreams: PISequentialInStream; InSizes: JclBase.PPInt64; NumInStreams: Cardinal; OutStreams: PISequentialOutStream; OutSizes: JclBase.PPInt64; NumOutStreams: Cardinal; Progress: ICompressProgressInfo): HRESULT; stdcall; end; const kDictionarySize = $400; kUsedMemorySize = $401; kOrder = $402; kBlockSize = $403; kPosStateBits = $440; kLitContextBits = $441; kLitPosBits = $442; kNumFastBytes = $450; kMatchFinder = $451; kMatchFinderCycles = $452; kNumPasses = $460; kAlgorithm = $470; kMultiThread = $480; kNumThreads = $481; kEndMarker = $490; type ICompressSetCoderProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400200000}'] function SetCoderProperties(PropIDs: PPropID; Properties: PPropVariant; NumProperties: Cardinal): HRESULT; stdcall; end; ICompressSetDecoderProperties2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400220000}'] function SetDecoderProperties2(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICompressWriteCoderProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400230000}'] function WriteCoderProperties(OutStream: ISequentialOutStream): HRESULT; stdcall; end; ICompressGetInStreamProcessedSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400240000}'] function GetInStreamProcessedSize(Value: PInt64): HRESULT; stdcall; end; ICompressSetCoderMt = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400250000}'] function SetNumberOfThreads(NumThreads: Cardinal): HRESULT; stdcall; end; ICompressGetSubStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400300000}'] function GetSubStreamSize(SubStream: Int64; out Value: Int64): HRESULT; stdcall; end; ICompressSetInStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400310000}'] function SetInStream(InStream: ISequentialInStream): HRESULT; stdcall; function ReleaseInStream: HRESULT; stdcall; end; ICompressSetOutStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400320000}'] function SetOutStream(OutStream: ISequentialOutStream): HRESULT; stdcall; function ReleaseOutStream: HRESULT; stdcall; end; ICompressSetInStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400330000}'] function SetInStreamSize(InSize: PInt64): HRESULT; stdcall; end; ICompressSetOutStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400340000}'] function SetOutStreamSize(OutSize: PInt64): HRESULT; stdcall; end; ICompressFilter = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400400000}'] function Init: HRESULT; stdcall; function Filter(Data: PByte; Size: Cardinal): Cardinal; stdcall; // Filter return outSize (UInt32) // if (outSize <= size): Filter have converted outSize bytes // if (outSize > size): Filter have not converted anything. // and it needs at least outSize bytes to convert one block // (it's for crypto block algorithms). end; ICompressCodecsInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400600000}'] function GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function CreateDecoder(Index: Cardinal; IID: PGUID; out Decoder): HRESULT; stdcall; function CreateEncoder(Index: Cardinal; IID: PGUID; out Coder): HRESULT; stdcall; end; ISetCompressCodecsInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400610000}'] function SetCompressCodecsInfo(CompressCodecsInfo: ICompressCodecsInfo): HRESULT; stdcall; end; ICryptoProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400800000}'] function SetKey(Data: PByte; Size: Cardinal): HRESULT; stdcall; function SetInitVector(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICryptoSetPassword = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400900000}'] function CryptoSetPassword(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICryptoSetCRC = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400A00000}'] function CryptoSetCRC(crc: Cardinal): HRESULT; stdcall; end; const kID = 0; kName = 1; kDecoder = 2; kEncoder = 3; kInStreams = 4; kOutStreams = 5; kDescription = 6; kDecoderIsAssigned = 7; kEncoderIsAssigned = 8; // IProgress.h type IProgress = interface(IUnknown) ['{23170F69-40C1-278A-0000-000000050000}'] function SetTotal(Total: Int64): HRESULT; stdcall; function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; end; // IArchive.h const // file time type kWindows = 0; kUnix = 1; kDOS = 2; // archive kArchiveName = 0; kClassID = 1; kExtension = 2; kAddExtension = 3; kUpdate = 4; kKeepName = 5; kStartSignature = 6; kFinishSignature = 7; kAssociate = 8; // ask mode kExtract = 0; kTest = 1; kSkip = 2; // operation result kOK = 0; kUnSupportedMethod = 1; kDataError = 2; kCRCError = 3; kError = 1; type // "23170F69-40C1-278A-0000-000600xx0000" IArchiveOpenCallback = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600100000}'] function SetTotal(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; function SetCompleted(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; end; IArchiveExtractCallback = interface(IProgress) ['{23170F69-40C1-278A-0000-000600200000}'] function GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; stdcall; // GetStream OUT: S_OK - OK, S_FALSE - skeep this file function PrepareOperation(askExtractMode: Cardinal): HRESULT; stdcall; function SetOperationResult(resultEOperationResult: Integer): HRESULT; stdcall; end; IArchiveOpenVolumeCallback = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600300000}'] function GetProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetStream(Name: PWideChar; out InStream: IInStream): HRESULT; stdcall; end; IInArchiveGetStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600400000}'] function GetStream(Index: Cardinal; out Stream: ISequentialInStream): HRESULT; stdcall; end; IArchiveOpenSetSubArchiveName = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600500000}'] function SetSubArchiveName(Name: PWideChar): HRESULT; stdcall; end; IInArchive = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600600000}'] function Open(Stream: IInStream; MaxCheckStartPosition: PInt64; OpenArchiveCallback: IArchiveOpenCallback): HRESULT; stdcall; function Close: HRESULT; stdcall; function GetNumberOfItems(NumItems: PCardinal): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; var Value: TPropVariant): HRESULT; stdcall; function Extract(Indices: PCardinal; NumItems: Cardinal; TestMode: Integer; ExtractCallback: IArchiveExtractCallback): HRESULT; stdcall; // indices must be sorted // numItems = 0xFFFFFFFF means all files // testMode != 0 means "test files operation" function GetArchiveProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetNumberOfProperties(NumProperties: PCardinal): HRESULT; stdcall; function GetPropertyInfo(Index: Cardinal; out Name: TBStr; out PropID: TPropID; out VarType: TVarType): HRESULT; stdcall; function GetNumberOfArchiveProperties(NumProperties: PCardinal): HRESULT; stdcall; function GetArchivePropertyInfo(Index: Cardinal; out Name: TBStr; out PropID: TPropID; out VarType: TVarType): HRESULT; stdcall; end; IArchiveUpdateCallback = interface(IProgress) ['{23170F69-40C1-278A-0000-000600800000}'] function GetUpdateItemInfo(Index: Cardinal; NewData: PInteger; // 1 - new data, 0 - old data NewProperties: PInteger; // 1 - new properties, 0 - old properties IndexInArchive: PCardinal // -1 if there is no in archive, or if doesn't matter ): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; stdcall; function SetOperationResult(OperationResult: Integer): HRESULT; stdcall; end; IArchiveUpdateCallback2 = interface(IArchiveUpdateCallback) ['{23170F69-40C1-278A-0000-000600820000}'] function GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; stdcall; function GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; stdcall; end; IOutArchive = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600A00000}'] function UpdateItems(OutStream: ISequentialOutStream; NumItems: Cardinal; UpdateCallback: IArchiveUpdateCallback): HRESULT; stdcall; function GetFileTimeType(Type_: PCardinal): HRESULT; stdcall; end; ISetProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600030000}'] function SetProperties(Names: PPWideChar; Values: PPropVariant; NumProperties: Integer): HRESULT; stdcall; end; // IPassword.h type ICryptoGetTextPassword = interface(IUnknown) ['{23170F69-40C1-278A-0000-000500100000}'] function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; end; ICryptoGetTextPassword2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000500110000}'] function CryptoGetTextPassword2(PasswordIsDefined: PInteger; Password: PBStr): HRESULT; stdcall; end; // ZipHandlerOut.cpp const kDeflateAlgoX1 = 0 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kLzAlgoX1' {$ENDIF} {$ENDIF}; kLzAlgoX1 = 0; kDeflateAlgoX5 = 1 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kLzAlgoX5' {$ENDIF} {$ENDIF}; kLzAlgoX5 = 1; kDeflateNumPassesX1 = 1; kDeflateNumPassesX7 = 3; kDeflateNumPassesX9 = 10; kNumFastBytesX1 = 32 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX1' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX1 = 32; kNumFastBytesX7 = 64 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX7' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX7 = 64; kNumFastBytesX9 = 128 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX9' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX9 = 128; kLzmaNumFastBytesX1 = 32; kLzmaNumFastBytesX7 = 64; kBZip2NumPassesX1 = 1; kBZip2NumPassesX7 = 2; kBZip2NumPassesX9 = 7; kBZip2DicSizeX1 = 100000; kBZip2DicSizeX3 = 500000; kBZip2DicSizeX5 = 900000; // HandlerOut.cpp const kLzmaAlgoX1 = 0; kLzmaAlgoX5 = 1; kLzmaDicSizeX1 = 1 shl 16; kLzmaDicSizeX3 = 1 shl 20; kLzmaDicSizeX5 = 1 shl 24; kLzmaDicSizeX7 = 1 shl 25; kLzmaDicSizeX9 = 1 shl 26; kLzmaFastBytesX1 = 32; kLzmaFastBytesX7 = 64; kPpmdMemSizeX1 = (1 shl 22); kPpmdMemSizeX5 = (1 shl 24); kPpmdMemSizeX7 = (1 shl 26); kPpmdMemSizeX9 = (192 shl 20); kPpmdOrderX1 = 4; kPpmdOrderX5 = 6; kPpmdOrderX7 = 16; kPpmdOrderX9 = 32; kDeflateFastBytesX1 = 32; kDeflateFastBytesX7 = 64; kDeflateFastBytesX9 = 128; {$IFDEF 7ZIP_LINKONREQUEST} type TCreateObjectFunc = function (ClsID: PGUID; IID: PGUID; out Obj): HRESULT; stdcall; TGetHandlerProperty2 = function (FormatIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetHandlerProperty = function (PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetMethodProperty = function (CodecIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetNumberOfFormatsFunc = function (NumFormats: PCardinal): HRESULT; stdcall; TGetNumberOfMethodsFunc = function (NumMethods: PCardinal): HRESULT; stdcall; TSetLargePageMode = function: HRESULT; stdcall; var CreateObject: TCreateObjectFunc = nil; GetHandlerProperty2: TGetHandlerProperty2 = nil; GetHandlerProperty: TGetHandlerProperty = nil; GetMethodProperty: TGetMethodProperty = nil; GetNumberOfFormats: TGetNumberOfFormatsFunc = nil; GetNumberOfMethods: TGetNumberOfMethodsFunc = nil; SetLargePageMode: TSetLargePageMode = nil; {$ELSE ~7ZIP_LINKONREQUEST} function CreateObject(ClsID: PGUID; IID: PGUID; out Obj): HRESULT; stdcall; function GetHandlerProperty2(FormatIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetHandlerProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetMethodProperty(CodecIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetNumberOfFormats(NumFormats: PCardinal): HRESULT; stdcall; function GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; function SetLargePageMode: HRESULT; stdcall; {$ENDIF ~7ZIP_LINKONREQUEST} //DOM-IGNORE-END const SevenzipDefaultLibraryName = '7z.dll'; CreateObjectDefaultExportName = 'CreateObject'; GetHandlerProperty2DefaultExportName = 'GetHandlerProperty2'; GetHandlerPropertyDefaultExportName = 'GetHandlerProperty'; GetMethodPropertyDefaultExportName = 'GetMethodProperty'; GetNumberOfFormatsDefaultExportName = 'GetNumberOfFormats'; GetNumberOfMethodsDefaultExportName = 'GetNumberOfMethods'; SetLargePageModeDefaultExportName = 'SetLargePageMode'; {$IFDEF 7ZIP_LINKONREQUEST} var SevenzipLibraryName: string = SevenzipDefaultLibraryName; CreateObjectExportName: string = CreateObjectDefaultExportName; GetHandlerProperty2ExportName: string = GetHandlerProperty2DefaultExportName; GetHandlerPropertyExportName: string = GetHandlerPropertyDefaultExportName; GetMethodPropertyExportName: string = GetMethodPropertyDefaultExportName; GetNumberOfFormatsExportName: string = GetNumberOfFormatsDefaultExportName; GetNumberOfMethodsExportName: string = GetNumberOfMethodsDefaultExportName; SetLargePageModeExportName: string = SetLargePageModeDefaultExportName; SevenzipLibraryHandle: TModuleHandle = INVALID_MODULEHANDLE_VALUE; {$ENDIF 7ZIP_LINKONREQUEST} function Load7Zip: Boolean; function Is7ZipLoaded: Boolean; procedure Unload7Zip; {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL$'; Revision: '$Revision$'; Date: '$Date$'; LogPath: 'JCL\source\windows'; Extra: ''; Data: nil ); {$ENDIF UNITVERSIONING} implementation {$IFDEF 7ZIP_LINKDLL} function CreateObject; external SevenzipDefaultLibraryName name CreateObjectDefaultExportName; function GetHandlerProperty2; external SevenzipDefaultLibraryName name GetHandlerProperty2DefaultExportName; function GetHandlerProperty; external SevenzipDefaultLibraryName name GetHandlerPropertyDefaultExportName; function GetMethodProperty; external SevenzipDefaultLibraryName name GetMethodPropertyDefaultExportName; function GetNumberOfFormats; external SevenzipDefaultLibraryName name GetNumberOfFormatsDefaultExportName; function GetNumberOfMethods; external SevenzipDefaultLibraryName name GetNumberOfMethodsDefaultExportName; function SetLargePageMode; external SevenzipDefaultLibraryName name SetLargePageModeDefaultExportName; {$ENDIF 7ZIP_LINKDLL} function Load7Zip: Boolean; {$IFDEF 7ZIP_LINKONREQUEST} begin Result := SevenzipLibraryHandle <> INVALID_MODULEHANDLE_VALUE; if Result then Exit; Result := JclSysUtils.LoadModule(SevenzipLibraryHandle, SevenzipLibraryName); if Result then begin @CreateObject := GetModuleSymbol(SevenzipLibraryHandle, CreateObjectExportName); @GetHandlerProperty2 := GetModuleSymbol(SevenzipLibraryHandle, GetHandlerProperty2ExportName); @GetHandlerProperty := GetModuleSymbol(SevenzipLibraryHandle, GetHandlerPropertyExportName); @GetMethodProperty := GetModuleSymbol(SevenzipLibraryHandle, GetMethodPropertyExportName); @GetNumberOfFormats := GetModuleSymbol(SevenzipLibraryHandle, GetNumberOfFormatsExportName); @GetNumberOfMethods := GetModuleSymbol(SevenzipLibraryHandle, GetNumberOfMethodsExportName); @SetLargePageMode := GetModuleSymbol(SevenzipLibraryHandle, SetLargePageModeExportName); Result := Assigned(@CreateObject) and Assigned(@GetHandlerProperty2) and Assigned(@GetHandlerProperty) and Assigned(@GetMethodProperty) and Assigned(@GetNumberOfFormats) and Assigned(@GetNumberOfMethods) and Assigned(@SetLargePageMode); end; end; {$ELSE ~7ZIP_LINKONREQUEST} begin Result := True; end; {$ENDIF ~7ZIP_LINKONREQUEST} function Is7ZipLoaded: Boolean; begin {$IFDEF 7ZIP_LINKONREQUEST} Result := SevenzipLibraryHandle <> INVALID_MODULEHANDLE_VALUE; {$ELSE ~7ZIP_LINKONREQUEST} Result := True; {$ENDIF ~7ZIP_LINKONREQUEST} end; procedure Unload7Zip; begin {$IFDEF 7ZIP_LINKONREQUEST} @CreateObject := nil; @GetHandlerProperty2 := nil; @GetHandlerProperty := nil; @GetMethodProperty := nil; @GetNumberOfFormats := nil; @GetNumberOfMethods := nil; @SetLargePageMode := nil; JclSysUtils.UnloadModule(SevenzipLibraryHandle); {$ENDIF 7ZIP_LINKONREQUEST} end; {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); finalization UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/doublecmd.diff����������������������������������������0000644�0001750�0000144�00000033335�15104114162�023050� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ jcl/source/common/JclCompression.pas | 180 ++++++++++++++++++++++++++++++----- jcl/source/windows/sevenzip.pas | 10 +- 2 files changed, 161 insertions(+), 29 deletions(-) diff --git a/jcl/source/common/JclCompression.pas b/jcl/source/common/JclCompression.pas index e5e6a2f..80889a3 100644 --- a/jcl/source/common/JclCompression.pas +++ b/jcl/source/common/JclCompression.pas @@ -44,8 +44,7 @@ unit JclCompression; -{$I jcl.inc} -{$I crossplatform.inc} +{$mode delphi} interface @@ -75,7 +74,10 @@ uses ZLib, {$ENDIF ZLIB_RTL} {$ENDIF ~HAS_UNITSCOPE} - zlibh, bzip2, JclWideStrings, JclBase, JclStreams; + {$IFNDEF FPC} + zlibh, bzip2, + {$ENDIF FPC} + DCJclAlternative; // Must be after Classes, SysUtils, Windows {$IFDEF RTL230_UP} {$HPPEMIT '// To avoid ambiguity with System::Zlib::z_stream_s we force using ours'} @@ -180,6 +182,9 @@ uses **************************************************************************************************} type + +{$IFNDEF FPC} + TJclCompressionStream = class(TJclStream) private FOnProgress: TNotifyEvent; @@ -562,8 +567,12 @@ type function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; +{$ENDIF FPC} + EJclCompressionError = class(EJclError); +{$IFNDEF FPC} + // callback type used in helper functions below: TJclCompressStreamProgressCallback = procedure(FileSize, Position: Int64; UserData: Pointer) of object; @@ -586,6 +595,8 @@ procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); +{$ENDIF FPC} + // archive ancestor classes {$IFDEF MSWINDOWS} type @@ -595,6 +606,7 @@ type var AVolumeMaxSize: Int64) of object; TJclCompressionProgressEvent = procedure(Sender: TObject; const Value, MaxValue: Int64) of object; TJclCompressionRatioEvent = procedure(Sender: TObject; const InSize, OutSize: Int64) of object; + TJclCompressionPasswordEvent = procedure(Sender: TObject; var Password: WideString) of object; TJclCompressionItemProperty = (ipPackedName, ipPackedSize, ipPackedExtension, ipFileSize, ipFileName, ipAttributes, ipCreationTime, ipLastAccessTime, @@ -770,6 +782,7 @@ type FOnRatio: TJclCompressionRatioEvent; FOnVolume: TJclCompressionVolumeEvent; FOnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent; + FOnPassword: TJclCompressionPasswordEvent; FPassword: WideString; FVolumeIndex: Integer; FVolumeIndexOffset: Integer; @@ -803,6 +816,9 @@ type // function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; + public + PropNames: array of WideString; + PropValues: array of TPropVariant; public class function MultipleItemContainer: Boolean; virtual; class function VolumeAccess: TJclStreamAccess; virtual; @@ -855,6 +871,7 @@ type property OnVolume: TJclCompressionVolumeEvent read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent read FOnVolumeMaxSize write FOnVolumeMaxSize; + property OnPassword: TJclCompressionPasswordEvent read FOnPassword write FOnPassword; property Password: WideString read FPassword write FPassword; property SupportsNestedArchive: Boolean read GetSupportsNestedArchive; @@ -1193,6 +1210,7 @@ function GetArchiveFormats: TJclCompressionArchiveFormats; type TJclSevenzipCompressArchive = class(TJclCompressArchive, IInterface) private + FSfxModule: String; FOutArchive: IOutArchive; protected function GetItemClass: TJclCompressionItemClass; override; @@ -1203,6 +1221,7 @@ type destructor Destroy; override; procedure Compress; override; property OutArchive: IOutArchive read GetOutArchive; + property SfxModule: String read FSfxModule write FSfxModule; end; // file formats @@ -2189,6 +2208,9 @@ function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: OnArchiveProgress: TJclCompressionProgressEvent = nil; OnArchiveRatio: TJclCompressionRatioEvent = nil): Boolean; overload; +var + JclCompressSharedFiles: Boolean = False; + {$ENDIF MSWINDOWS} {$IFDEF UNITVERSIONING} @@ -2206,8 +2228,7 @@ const implementation uses - JclUnicode, // WideSameText - JclDateTime, JclFileUtils, JclResources, JclStrings, JclSysUtils; + DCJclResources, DCJclCompression; const JclDefaultBufferSize = 131072; // 128k @@ -2218,6 +2239,8 @@ var GlobalStreamFormats: TObject; GlobalArchiveFormats: TObject; +{$IFNDEF FPC} + //=== { TJclCompressionStream } ============================================== constructor TJclCompressionStream.Create(AStream: TStream); @@ -3743,6 +3766,8 @@ begin end; end; +{$ENDIF FPC} + {$IFDEF MSWINDOWS} function OpenFileStream(const FileName: TFileName; StreamAccess: TJclStreamAccess): TStream; @@ -3887,7 +3912,7 @@ end; function TJclCompressionItem.GetNestedArchiveName: WideString; var ParentArchiveExtension, ArchiveFileName, ArchiveExtension: WideString; - ExtensionMap: TJclWideStrings; + ExtensionMap: TStrings; begin if ipPackedName in ValidProperties then Result := PackedName @@ -3914,7 +3939,7 @@ begin else if ArchiveFileName <> '' then begin - ExtensionMap := TJclWideStringList.Create; + ExtensionMap := TStringList.Create; try ExtensionMap.Delimiter := ';'; ExtensionMap.DelimitedText := Archive.ArchiveSubExtensions; @@ -3962,9 +3987,16 @@ begin end; function TJclCompressionItem.GetStream: TStream; +var + AItemAccess: TJclStreamAccess; begin if not Assigned(FStream) and (FileName <> '') then - FStream := OpenFileStream(FileName, Archive.ItemAccess); + begin + AItemAccess:= Archive.ItemAccess; + if (AItemAccess = saReadOnly) and JclCompressSharedFiles then + AItemAccess:= saReadOnlyDenyNone; + FStream := OpenFileStream(FileName, AItemAccess); + end; Result := FStream; end; @@ -5544,6 +5576,18 @@ begin end; if not AllHandled then raise EJclCompressionError.CreateRes(@RsCompressionReplaceError); + end + else begin + // Remove temporary files + for Index := 0 to FVolumes.Count - 1 do + begin + AVolume := TJclCompressionVolume(FVolumes.Items[Index]); + if AVolume.OwnsTmpStream then + begin + FreeAndNil(AVolume.FTmpStream); + FileDelete(AVolume.TmpFileName); + end; + end; end; end; @@ -5791,6 +5835,8 @@ begin FItemIndex := AItemIndex; FStream := nil; FOwnsStream := False; + + NeedStream; end; constructor TJclSevenzipInStream.Create(AStream: TStream; AOwnsStream: Boolean); @@ -6117,6 +6163,8 @@ end; procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); var + Index: Integer; + JclArchive: TJclCompressionArchive; PropertySetter: Sevenzip.ISetProperties; InArchive, OutArchive: Boolean; Unused: IInterface; @@ -6254,9 +6302,18 @@ begin else AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'F'); end; + + JclArchive := AJclArchive as TJclCompressionArchive; + for Index := Low(JclArchive.PropNames) to High(JclArchive.PropNames) do + begin + AddProperty(PWideChar(JclArchive.PropNames[Index]), JclArchive.PropValues[Index]); + end; end; if Length(PropNames) > 0 then + begin SevenZipCheck(PropertySetter.SetProperties(@PropNames[0], @PropValues[0], Length(PropNames))); + SetLength(JclArchive.PropNames, 0); SetLength(JclArchive.PropValues, 0); + end; end; end; @@ -6510,7 +6567,10 @@ begin // kpidCharacts: ; // kpidVa: ; // kpidId: ; - // kpidShortName: ; + kpidShortName: + begin + Value.vt := VT_EMPTY; + end; // kpidCreatorApp: ; // kpidSectorSize: ; kpidPosixAttrib: @@ -6525,6 +6585,11 @@ begin // kpidLocalName: ; // kpidProvider: ; // kpidUserDefined: ; + kpidIsAltStream: + begin + Value.vt := VT_BOOL; + Value.bool := False; + end; else Value.vt := VT_EMPTY; Result := S_FALSE; @@ -6534,9 +6599,27 @@ end; function TJclSevenzipUpdateCallback.GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; begin + Result := E_FAIL; FLastStream := Index; - InStream := TJclSevenzipInStream.Create(FArchive, Index); - Result := S_OK; + repeat + try + InStream := TJclSevenzipInStream.Create(FArchive, Index); + Result := S_OK; + except + on E: Exception do + begin + case MessageBox(0, PAnsiChar(E.Message), nil, MB_ABORTRETRYIGNORE or MB_ICONERROR) of + IDABORT: Exit(E_ABORT); + IDIGNORE: + begin + FArchive.Items[Index].OperationSuccess := osNoOperation; + FLastStream := MAXDWORD; + Exit(S_FALSE); + end; + end; + end; + end; + until Result = S_OK; end; function TJclSevenzipUpdateCallback.GetUpdateItemInfo(Index: Cardinal; NewData, @@ -6595,17 +6678,20 @@ end; function TJclSevenzipUpdateCallback.SetOperationResult( OperationResult: Integer): HRESULT; begin - case OperationResult of - kOK: - FArchive.Items[FLastStream].OperationSuccess := osOK; - kUnSupportedMethod: - FArchive.Items[FLastStream].OperationSuccess := osUnsupportedMethod; - kDataError: - FArchive.Items[FLastStream].OperationSuccess := osDataError; - kCRCError: - FArchive.Items[FLastStream].OperationSuccess := osCRCError; - else - FArchive.Items[FLastStream].OperationSuccess := osUnknownError; + if FLastStream < MAXDWORD then + begin + case OperationResult of + kOK: + FArchive.Items[FLastStream].OperationSuccess := osOK; + kUnSupportedMethod: + FArchive.Items[FLastStream].OperationSuccess := osUnsupportedMethod; + kDataError: + FArchive.Items[FLastStream].OperationSuccess := osDataError; + kCRCError: + FArchive.Items[FLastStream].OperationSuccess := osCRCError; + else + FArchive.Items[FLastStream].OperationSuccess := osUnknownError; + end; end; Result := S_OK; @@ -6681,7 +6767,10 @@ end; procedure TJclSevenzipCompressArchive.Compress; var + Value: HRESULT; + Index: Integer; OutStream: IOutStream; + AVolume: TJclCompressionVolume; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin @@ -6692,12 +6781,32 @@ begin SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; - OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); + if Length(FSfxModule) > 0 then + OutStream := TSfxSevenzipOutStream.Create(SplitStream, FSfxModule) + else begin + OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); + end; UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); - SevenzipCheck(OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback)); + Value:= OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback); + + if Value <> S_OK then + begin + // Remove partial archives + for Index := 0 to FVolumes.Count - 1 do + begin + AVolume := TJclCompressionVolume(FVolumes.Items[Index]); + if AVolume.OwnsStream then + begin + FreeAndNil(AVolume.FStream); + FileDelete(AVolume.FileName); + end; + end; + end; + + SevenzipCheck(Value); finally FCompressing := False; // release volumes and other finalizations @@ -7422,7 +7531,14 @@ function TJclSevenzipOpenCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then + begin + if Length(FArchive.FPassword) = 0 then + begin + if Assigned(FArchive.OnPassword) then + FArchive.OnPassword(FArchive, FArchive.FPassword); + end; password^ := SysAllocString(PWideChar(FArchive.Password)); + end; Result := S_OK; end; @@ -7456,7 +7572,14 @@ function TJclSevenzipExtractCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then + begin + if Length(FArchive.FPassword) = 0 then + begin + if Assigned(FArchive.OnPassword) then + FArchive.OnPassword(FArchive, FArchive.FPassword); + end; password^ := SysAllocString(PWideChar(FArchive.Password)); + end; Result := S_OK; end; @@ -8807,6 +8930,7 @@ end; procedure TJclSevenzipUpdateArchive.Compress; var + Value: HRESULT; OutStream: IOutStream; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; @@ -8824,7 +8948,13 @@ begin SetSevenzipArchiveCompressionProperties(Self, OutArchive); - SevenzipCheck(OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback)); + Value:= OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback); + + if Value <> S_OK then + begin + FReplaceVolumes:= False; + SevenzipCheck(Value); + end; finally FCompressing := False; // release reference to volume streams diff --git a/jcl/source/windows/sevenzip.pas b/jcl/source/windows/sevenzip.pas index 06fb94f..68f4ae2 100644 --- a/jcl/source/windows/sevenzip.pas +++ b/jcl/source/windows/sevenzip.pas @@ -53,10 +53,11 @@ unit sevenzip; +{$mode delphi} + interface -{$I jcl.inc} -{$I windowsonly.inc} +{$DEFINE 7ZIP_LINKONREQUEST} uses {$IFDEF HAS_UNITSCOPE} @@ -67,8 +68,7 @@ uses {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} - JclBase, - JclSysUtils; + DCJclAlternative; //DOM-IGNORE-BEGIN @@ -251,6 +251,8 @@ const kpidPosixAttrib = 53; kpidLink = 54; + kpidIsAltStream = 63; + kpidTotalSize = $1100; kpidFreeSpace = $1101; kpidClusterSize = $1102; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/common/�����������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021541� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/common/JclCompression.pas�����������������������������0000644�0001750�0000144�00001124061�15104114162�025205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{**************************************************************************************************} { } { Project JEDI Code Library (JCL) } { } { The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); } { you may not use this file except in compliance with the License. You may obtain a copy of the } { License at http://www.mozilla.org/MPL/ } { } { Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF } { ANY KIND, either express or implied. See the License for the specific language governing rights } { and limitations under the License. } { } { The Original Code is JclCompression.pas. } { } { The Initial Developer of the Original Code is Matthias Thoma. } { All Rights Reserved. } { } { Contributors: } { Olivier Sannier (obones) } { Florent Ouchet (outchy) } { Jan Goyvaerts (jgsoft) } { Uwe Schuster (uschuster) } { } {**************************************************************************************************} { } { Alternatively, the contents of this file may be used under the terms of the GNU Lesser General } { Public License (the "LGPL License"), in which case the provisions of the LGPL License are } { applicable instead of those above. If you wish to allow use of your version of this file only } { under the terms of the LGPL License and not to allow others to use your version of this file } { under the MPL, indicate your decision by deleting the provisions above and replace them with the } { notice and other provisions required by the LGPL License. If you do not delete the provisions } { above, a recipient may use your version of this file under either the MPL or the LGPL License. } { } { For more information about the LGPL: } { http://www.gnu.org/copyleft/lesser.html } { } {**************************************************************************************************} { } { Last modified: $Date:: $ } { Revision: $Rev:: $ } { Author: $Author:: $ } { } {**************************************************************************************************} unit JclCompression; {$mode delphi} interface uses {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} {$IFDEF HAS_UNIT_LIBC} Libc, {$ENDIF HAS_UNIT_LIBC} {$IFDEF HAS_UNITSCOPE} {$IFDEF MSWINDOWS} Winapi.Windows, Sevenzip, Winapi.ActiveX, {$ENDIF MSWINDOWS} System.Types, System.SysUtils, System.Classes, System.Contnrs, {$IFDEF ZLIB_RTL} System.ZLib, {$ENDIF ZLIB_RTL} {$ELSE ~HAS_UNITSCOPE} {$IFDEF MSWINDOWS} Windows, Sevenzip, ActiveX, {$ENDIF MSWINDOWS} Types, SysUtils, Classes, Contnrs, {$IFDEF ZLIB_RTL} ZLib, {$ENDIF ZLIB_RTL} {$ENDIF ~HAS_UNITSCOPE} {$IFNDEF FPC} zlibh, bzip2, {$ENDIF FPC} DCJclAlternative; // Must be after Classes, SysUtils, Windows {$IFDEF RTL230_UP} {$HPPEMIT '// To avoid ambiguity with System::Zlib::z_stream_s we force using ours'} {$HPPEMIT '#define z_stream_s Zlibh::z_stream_s'} {$ENDIF RTL230_UP} {************************************************************************************************** Class hierarchy TJclCompressionStream | |-- TJclCompressStream | | | |-- TJclZLibCompressStream handled by zlib http://www.zlib.net/ | |-- TJclBZIP2CompressStream handled by bzip2 http://www.bzip.net/ | |-- TJclGZIPCompressStream handled by zlib http://www.zlib.net/ + JCL | |-- TJclDecompressStream | |-- TJclZLibDecompressStream handled by zlib http://www.zlib.net/ |-- TBZIP2DecompressStream handled by bzip2 http://www.bzip.net/ |-- TGZIPDecompressStream handled by zlib http://www.zlib.net/ + JCL TJclCompressionArchive | |-- TJclCompressArchive | | | |-- TJclSevenzipCompressArchive | | | |-- TJclZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBZ2CompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJcl7zCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTarCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclGZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXzCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfcCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclWimCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDecompressArchive | | | |-- TJclSevenZipDecompressArchive | | | |-- TJclZipDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBZ2DecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclRarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclArjDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclZDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzhDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJcl7zDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCabDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclNsisDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzmaDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzma86DecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclPeDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclElfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMachoDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUdfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMubDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclHfsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDmgDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCompoundDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclWimDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclIsoDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBkfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclChmDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSplitDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclRpmDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDebDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCpioDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclGZipDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXzDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclNtfsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclFatDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMbrDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclVhdDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMslzDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclFlvDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfcDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclAPMDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclPpmdDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTEDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUEFIcDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUEFIsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSquashFSDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCramFSDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUpdateArchive | |-- TJclSevenzipUpdateArchive | |-- TJclZipUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclBZ2UpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJcl7zUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclTarUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclGZipUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclXzUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclSwfcUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ **************************************************************************************************} type {$IFNDEF FPC} TJclCompressionStream = class(TJclStream) private FOnProgress: TNotifyEvent; FBuffer: Pointer; FBufferSize: Cardinal; FStream: TStream; protected function SetBufferSize(Size: Cardinal): Cardinal; virtual; procedure Progress(Sender: TObject); dynamic; property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; public class function StreamExtensions: string; virtual; class function StreamName: string; virtual; class function StreamSubExtensions: string; virtual; constructor Create(AStream: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; procedure Reset; virtual; end; TJclCompressionStreamClass = class of TJclCompressionStream; TJclCompressStream = class(TJclCompressionStream) public function Flush: Integer; dynamic; abstract; constructor Create(Destination: TStream); end; TJclCompressStreamClass = class of TJclCompressStream; TJclDecompressStream = class(TJclCompressionStream) private FOwnsStream: Boolean; public constructor Create(Source: TStream; AOwnsStream: Boolean = False); destructor Destroy; override; end; TJclDecompressStreamClass = class of TJclDecompressStream; TJclCompressionStreamFormats = class private FCompressFormats: TList; FDecompressFormats: TList; protected function GetCompressFormatCount: Integer; function GetCompressFormat(Index: Integer): TJclCompressStreamClass; function GetDecompressFormatCount: Integer; function GetDecompressFormat(Index: Integer): TJclDecompressStreamClass; public constructor Create; destructor Destroy; override; procedure RegisterFormat(AClass: TJclCompressionStreamClass); procedure UnregisterFormat(AClass: TJclCompressionStreamClass); function FindCompressFormat(const AFileName: TFileName): TJclCompressStreamClass; function FindDecompressFormat(const AFileName: TFileName): TJclDecompressStreamClass; property CompressFormatCount: Integer read GetCompressFormatCount; property CompressFormats[Index: Integer]: TJclCompressStreamClass read GetCompressFormat; property DecompressFormatCount: Integer read GetDecompressFormatCount; property DecompressFormats[Index: Integer]: TJclDecompressStreamClass read GetDecompressFormat; end; // retreive a singleton list containing registered stream classes function GetStreamFormats: TJclCompressionStreamFormats; // ZIP Support type TJclCompressionLevel = Integer; TJclZLibCompressStream = class(TJclCompressStream) private FWindowBits: Integer; FMemLevel: Integer; FMethod: Integer; FStrategy: Integer; FDeflateInitialized: Boolean; FCompressionLevel: Integer; protected ZLibRecord: TZStreamRec; procedure SetCompressionLevel(Value: Integer); procedure SetStrategy(Value: Integer); procedure SetMemLevel(Value: Integer); procedure SetMethod(Value: Integer); procedure SetWindowBits(Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; CompressionLevel: TJclCompressionLevel = -1); destructor Destroy; override; function Flush: Integer; override; procedure Reset; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Write(const Buffer; Count: Longint): Longint; override; property WindowBits: Integer read FWindowBits write SetWindowBits; property MemLevel: Integer read FMemLevel write SetMemLevel; property Method: Integer read FMethod write SetMethod; property Strategy: Integer read FStrategy write SetStrategy; property CompressionLevel: Integer read FCompressionLevel write SetCompressionLevel; end; {$IFDEF ZLIB_RTL} const DEF_WBITS = 15; {$EXTERNALSYM DEF_WBITS} DEF_MEM_LEVEL = 8; {$EXTERNALSYM DEF_MEM_LEVEL} type PBytef = PByte; {$EXTERNALSYM PBytef} {$ENDIF ZLIB_RTL} type TJclZLibDecompressStream = class(TJclDecompressStream) private FWindowBits: Integer; FInflateInitialized: Boolean; protected ZLibRecord: TZStreamRec; procedure SetWindowBits(Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; WindowBits: Integer = DEF_WBITS; AOwnsStream: Boolean = False); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property WindowBits: Integer read FWindowBits write SetWindowBits; end; // GZIP Support //=== { GZIP helpers } ======================================================= type TJclGZIPHeader = packed record ID1: Byte; ID2: Byte; CompressionMethod: Byte; Flags: Byte; ModifiedTime: Cardinal; ExtraFlags: Byte; OS: Byte; end; TJclGZIPFooter = packed record DataCRC32: Cardinal; DataSize: Cardinal; end; const // ID1 and ID2 fields JCL_GZIP_ID1 = $1F; // value for the ID1 field JCL_GZIP_ID2 = $8B; // value for the ID2 field // Compression Model field JCL_GZIP_CM_DEFLATE = 8; // Zlib classic // Flags field : extra fields for the header JCL_GZIP_FLAG_TEXT = $01; // file is probably ASCII text JCL_GZIP_FLAG_CRC = $02; // a CRC16 for the header is present JCL_GZIP_FLAG_EXTRA = $04; // extra fields present JCL_GZIP_FLAG_NAME = $08; // original file name is present JCL_GZIP_FLAG_COMMENT = $10; // comment is present // ExtraFlags field : compression level JCL_GZIP_EFLAG_MAX = 2; // compressor used maximum compression JCL_GZIP_EFLAG_FAST = 4; // compressor used fastest compression // OS field : file system JCL_GZIP_OS_FAT = 0; // FAT filesystem (MS-DOS, OS/2, NT/Win32) JCL_GZIP_OS_AMIGA = 1; // Amiga JCL_GZIP_OS_VMS = 2; // VMS (or OpenVMS) JCL_GZIP_OS_UNIX = 3; // Unix JCL_GZIP_OS_VM = 4; // VM/CMS JCL_GZIP_OS_ATARI = 5; // Atari TOS JCL_GZIP_OS_HPFS = 6; // HPFS filesystem (OS/2, NT) JCL_GZIP_OS_MAC = 7; // Macintosh JCL_GZIP_OS_Z = 8; // Z-System JCL_GZIP_OS_CPM = 9; // CP/M JCL_GZIP_OS_TOPS = 10; // TOPS-20 JCL_GZIP_OS_NTFS = 11; // NTFS filesystem (NT) JCL_GZIP_OS_QDOS = 12; // QDOS JCL_GZIP_OS_ACORN = 13; // Acorn RISCOS JCL_GZIP_OS_UNKNOWN = 255; // unknown type TJclGZIPSubFieldHeader = packed record SI1: Byte; SI2: Byte; Len: Word; end; // constants to identify sub fields in the extra field // source: http://www.gzip.org/format.txt const JCL_GZIP_X_AC1 = $41; // AC Acorn RISC OS/BBC MOS file type information JCL_GZIP_X_AC2 = $43; JCL_GZIP_X_Ap1 = $41; // Ap Apollo file type information JCL_GZIP_X_Ap2 = $70; JCL_GZIP_X_cp1 = $63; // cp file compressed by cpio JCL_GZIP_X_cp2 = $70; JCL_GZIP_X_GS1 = $1D; // GS gzsig JCL_GZIP_X_GS2 = $53; JCL_GZIP_X_KN1 = $4B; // KN KeyNote assertion (RFC 2704) JCL_GZIP_X_KN2 = $4E; JCL_GZIP_X_Mc1 = $4D; // Mc Macintosh info (Type and Creator values) JCL_GZIP_X_Mc2 = $63; JCL_GZIP_X_RO1 = $52; // RO Acorn Risc OS file type information JCL_GZIP_X_RO2 = $4F; type TJclGZIPFlag = (gfDataIsText, gfHeaderCRC16, gfExtraField, gfOriginalFileName, gfComment); TJclGZIPFlags = set of TJclGZIPFlag; TJclGZIPFatSystem = (gfsFat, gfsAmiga, gfsVMS, gfsUnix, gfsVM, gfsAtari, gfsHPFS, gfsMac, gfsZ, gfsCPM, gfsTOPS, gfsNTFS, gfsQDOS, gfsAcorn, gfsOther, gfsUnknown); // Format is described in RFC 1952, http://www.faqs.org/rfcs/rfc1952.html TJclGZIPCompressionStream = class(TJclCompressStream) private FFlags: TJclGZIPFlags; FUnixTime: Cardinal; FAutoSetTime: Boolean; FCompressionLevel: TJclCompressionLevel; FFatSystem: TJclGZIPFatSystem; FExtraField: string; FOriginalFileName: TFileName; FComment: string; FZLibStream: TJclZLibCompressStream; FOriginalSize: Cardinal; FDataCRC32: Cardinal; FHeaderWritten: Boolean; FFooterWritten: Boolean; // flag so we only write the footer once! (NEW 2007) procedure WriteHeader; function GetDosTime: TDateTime; function GetUnixTime: Cardinal; procedure SetDosTime(const Value: TDateTime); procedure SetUnixTime(Value: Cardinal); procedure ZLibStreamProgress(Sender: TObject); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; CompressionLevel: TJclCompressionLevel = -1); destructor Destroy; override; function Write(const Buffer; Count: Longint): Longint; override; procedure Reset; override; // IMPORTANT: In order to get a valid GZip file, Flush MUST be called after // the last call to Write. function Flush: Integer; override; property Flags: TJclGZIPFlags read FFlags write FFlags; property DosTime: TDateTime read GetDosTime write SetDosTime; property UnixTime: Cardinal read GetUnixTime write SetUnixTime; property AutoSetTime: Boolean read FAutoSetTime write FAutoSetTime; property FatSystem: TJclGZIPFatSystem read FFatSystem write FFatSystem; property ExtraField: string read FExtraField write FExtraField; // Note: In order for most decompressors to work, the original file name // must be given or they would display an empty file name in their list. // This does not affect the decompression stream below as it simply reads // the value and does not work with it property OriginalFileName: TFileName read FOriginalFileName write FOriginalFileName; property Comment: string read FComment write FComment; end; TJclGZIPDecompressionStream = class(TJclDecompressStream) private FHeader: TJclGZIPHeader; FFooter: TJclGZIPFooter; FCompressedDataStream: TJclDelegatedStream; FZLibStream: TJclZLibDecompressStream; FOriginalFileName: TFileName; FComment: string; FExtraField: string; FComputedHeaderCRC16: Word; FStoredHeaderCRC16: Word; FComputedDataCRC32: Cardinal; FCompressedDataSize: Int64; FDataSize: Int64; FDataStarted: Boolean; FDataEnded: Boolean; FAutoCheckDataCRC32: Boolean; function GetCompressedDataSize: Int64; function GetComputedDataCRC32: Cardinal; function GetDosTime: TDateTime; function GetFatSystem: TJclGZIPFatSystem; function GetFlags: TJclGZIPFlags; function GetOriginalDataSize: Cardinal; function GetStoredDataCRC32: Cardinal; function ReadCompressedData(Sender: TObject; var Buffer; Count: Longint): Longint; procedure ZLibStreamProgress(Sender: TObject); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; CheckHeaderCRC: Boolean = True; AOwnsStream: Boolean = False); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; property ComputedHeaderCRC16: Word read FComputedHeaderCRC16; property StoredHeaderCRC16: Word read FStoredHeaderCRC16; property ExtraField: string read FExtraField; property OriginalFileName: TFileName read FOriginalFileName; property Comment: string read FComment; property Flags: TJclGZIPFlags read GetFlags; property CompressionLevel: Byte read FHeader.ExtraFlags; property FatSystem: TJclGZIPFatSystem read GetFatSystem; property UnixTime: Cardinal read FHeader.ModifiedTime; property DosTime: TDateTime read GetDosTime; property ComputedDataCRC32: Cardinal read GetComputedDataCRC32; property StoredDataCRC32: Cardinal read GetStoredDataCRC32; property AutoCheckDataCRC32: Boolean read FAutoCheckDataCRC32 write FAutoCheckDataCRC32; property CompressedDataSize: Int64 read GetCompressedDataSize; property OriginalDataSize: Cardinal read GetOriginalDataSize; end; // BZIP2 Support TJclBZIP2CompressionStream = class(TJclCompressStream) private FDeflateInitialized: Boolean; FCompressionLevel: Integer; protected BZLibRecord: bz_stream; procedure SetCompressionLevel(const Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; ACompressionLevel: TJclCompressionLevel = 9); destructor Destroy; override; function Flush: Integer; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Write(const Buffer; Count: Longint): Longint; override; property CompressionLevel: Integer read FCompressionLevel write SetCompressionLevel; end; TJclBZIP2DecompressionStream = class(TJclDecompressStream) private FInflateInitialized: Boolean; protected BZLibRecord: bz_stream; public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; AOwnsStream: Boolean = False); overload; destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; {$ENDIF FPC} EJclCompressionError = class(EJclError); {$IFNDEF FPC} // callback type used in helper functions below: TJclCompressStreamProgressCallback = procedure(FileSize, Position: Int64; UserData: Pointer) of object; {helper functions - one liners by wpostma} function GZipFile(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; function UnGZipFile(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; procedure GZipStream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); procedure UnGZipStream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); function BZip2File(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; function UnBZip2File(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); {$ENDIF FPC} // archive ancestor classes {$IFDEF MSWINDOWS} type TJclCompressionVolumeEvent = procedure(Sender: TObject; Index: Integer; var AFileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean) of object; TJclCompressionVolumeMaxSizeEvent = procedure(Sender: TObject; Index: Integer; var AVolumeMaxSize: Int64) of object; TJclCompressionProgressEvent = procedure(Sender: TObject; const Value, MaxValue: Int64) of object; TJclCompressionRatioEvent = procedure(Sender: TObject; const InSize, OutSize: Int64) of object; TJclCompressionPasswordEvent = procedure(Sender: TObject; var Password: WideString) of object; TJclCompressionItemProperty = (ipPackedName, ipPackedSize, ipPackedExtension, ipFileSize, ipFileName, ipAttributes, ipCreationTime, ipLastAccessTime, ipLastWriteTime, ipComment, ipHostOS, ipHostFS, ipUser, ipGroup, ipCRC, ipStream, ipMethod, ipEncrypted); TJclCompressionItemProperties = set of TJclCompressionItemProperty; TJclCompressionItemKind = (ikFile, ikDirectory); TJclCompressionOperationSuccess = (osNoOperation, osOK, osUnsupportedMethod, osDataError, osCRCError, osUnknownError); TJclCompressionDuplicateCheck = (dcNone, dcExisting, dcAll); TJclCompressionDuplicateAction = (daOverwrite, daError, daSkip); TJclCompressionArchive = class; TJclCompressionItem = class private FArchive: TJclCompressionArchive; // source or destination FFileName: TFileName; FStream: TStream; FOwnsStream: Boolean; // miscellaneous FValidProperties: TJclCompressionItemProperties; FModifiedProperties: TJclCompressionItemProperties; FPackedIndex: Cardinal; FSelected: Boolean; FOperationSuccess: TJclCompressionOperationSuccess; // file properties FPackedName: WideString; FPackedSize: Int64; FFileSize: Int64; FAttributes: Cardinal; FPackedExtension: WideString; FCreationTime: TFileTime; FLastAccessTime: TFileTime; FLastWriteTime: TFileTime; FComment: WideString; FHostOS: WideString; FHostFS: WideString; FUser: WideString; FGroup: WideString; FCRC: Cardinal; FMethod: WideString; FEncrypted: Boolean; function WideChangeFileExt(const AFileName, AExtension: WideString): WideString; function WideExtractFileExt(const AFileName: WideString): WideString; function WideExtractFileName(const AFileName: WideString): WideString; protected // property checkers procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); virtual; abstract; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); virtual; abstract; function ValidateExtraction(Index: Integer): Boolean; virtual; function DeleteOutputFile: Boolean; function UpdateFileTimes: Boolean; // property getters function GetAttributes: Cardinal; function GetComment: WideString; function GetCRC: Cardinal; function GetCreationTime: TFileTime; function GetDirectory: Boolean; function GetEncrypted: Boolean; function GetFileName: TFileName; function GetFileSize: Int64; function GetGroup: WideString; function GetHostFS: WideString; function GetHostOS: WideString; function GetItemKind: TJclCompressionItemKind; function GetLastAccessTime: TFileTime; function GetLastWriteTime: TFileTime; function GetMethod: WideString; function GetNestedArchiveName: WideString; virtual; function GetNestedArchiveStream: TStream; virtual; function GetPackedExtension: WideString; function GetPackedName: WideString; function GetPackedSize: Int64; function GetStream: TStream; function GetUser: WideString; // property setters procedure SetAttributes(Value: Cardinal); procedure SetComment(const Value: WideString); procedure SetCRC(Value: Cardinal); procedure SetCreationTime(const Value: TFileTime); procedure SetDirectory(Value: Boolean); procedure SetEncrypted(Value: Boolean); procedure SetFileName(const Value: TFileName); procedure SetFileSize(const Value: Int64); procedure SetGroup(const Value: WideString); procedure SetHostFS(const Value: WideString); procedure SetHostOS(const Value: WideString); procedure SetLastAccessTime(const Value: TFileTime); procedure SetLastWriteTime(const Value: TFileTime); procedure SetMethod(const Value: WideString); procedure SetPackedExtension(const Value: WideString); procedure SetPackedName(const Value: WideString); procedure SetPackedSize(const Value: Int64); procedure SetStream(const Value: TStream); procedure SetUser(const Value: WideString); public constructor Create(AArchive: TJclCompressionArchive); destructor Destroy; override; // release stream if owned and created from file name procedure ReleaseStream; // properties in archive property Attributes: Cardinal read GetAttributes write SetAttributes; property Comment: WideString read GetComment write SetComment; property CRC: Cardinal read GetCRC write SetCRC; property CreationTime: TFileTime read GetCreationTime write SetCreationTime; property Directory: Boolean read GetDirectory write SetDirectory; property Encrypted: Boolean read GetEncrypted write SetEncrypted; property FileSize: Int64 read GetFileSize write SetFileSize; property Group: WideString read GetGroup write SetGroup; property HostOS: WideString read GetHostOS write SetHostOS; property HostFS: WideString read GetHostFS write SetHostFS; property Kind: TJclCompressionItemKind read GetItemKind; property LastAccessTime: TFileTime read GetLastAccessTime write SetLastAccessTime; property LastWriteTime: TFileTime read GetLastWriteTime write SetLastWriteTime; property Method: WideString read GetMethod write SetMethod; property PackedExtension: WideString read GetPackedExtension write SetPackedExtension; property PackedName: WideString read GetPackedName write SetPackedName; property PackedSize: Int64 read GetPackedSize write SetPackedSize; property User: WideString read GetUser write SetUser; // source or destination property FileName: TFileName read GetFileName write SetFileName; property OwnsStream: Boolean read FOwnsStream write FOwnsStream; property Stream: TStream read GetStream write SetStream; property NestedArchiveStream: TStream read GetNestedArchiveStream; property NestedArchiveName: WideString read GetNestedArchiveName; // miscellaneous property Archive: TJclCompressionArchive read FArchive; property OperationSuccess: TJclCompressionOperationSuccess read FOperationSuccess write FOperationSuccess; property ValidProperties: TJclCompressionItemProperties read FValidProperties; property ModifiedProperties: TJclCompressionItemProperties read FModifiedProperties write FModifiedProperties; property PackedIndex: Cardinal read FPackedIndex; property Selected: Boolean read FSelected write FSelected; end; TJclCompressionItemClass = class of TJclCompressionItem; TJclCompressionVolume = class protected FFileName: TFileName; FTmpFileName: TFileName; FStream: TStream; FTmpStream: TStream; FOwnsStream: Boolean; FOwnsTmpStream: Boolean; FVolumeMaxSize: Int64; public constructor Create(AStream, ATmpStream: TStream; AOwnsStream, AOwnsTmpStream: Boolean; AFileName, ATmpFileName: TFileName; AVolumeMaxSize: Int64); destructor Destroy; override; procedure ReleaseStreams; property FileName: TFileName read FFileName; property TmpFileName: TFileName read FTmpFileName; property Stream: TStream read FStream; property TmpStream: TStream read FTmpStream; property OwnsStream: Boolean read FOwnsStream; property OwnsTmpStream: Boolean read FOwnsTmpStream; property VolumeMaxSize: Int64 read FVolumeMaxSize; end; TJclStreamAccess = (saCreate, saReadOnly, saReadOnlyDenyNone, saWriteOnly, saReadWrite); { TJclCompressionArchive is not ref-counted } TJclCompressionArchive = class(TInterfacedObject, IInterface) private FOnProgress: TJclCompressionProgressEvent; FOnRatio: TJclCompressionRatioEvent; FOnVolume: TJclCompressionVolumeEvent; FOnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent; FOnPassword: TJclCompressionPasswordEvent; FPassword: WideString; FVolumeIndex: Integer; FVolumeIndexOffset: Integer; FVolumeMaxSize: Int64; FVolumeFileNameMask: TFileName; FProgressMax: Int64; FCancelCurrentOperation: Boolean; FCurrentItemIndex: Integer; function GetItemCount: Integer; function GetItem(Index: Integer): TJclCompressionItem; function GetVolumeCount: Integer; function GetVolume(Index: Integer): TJclCompressionVolume; protected FVolumes: TObjectList; FItems: TObjectList; procedure InitializeArchiveProperties; virtual; function InternalOpenStream(const FileName: TFileName): TStream; function TranslateItemPath(const ItemPath, OldBase, NewBase: WideString): WideString; function DoProgress(const Value, MaxValue: Int64): Boolean; function DoRatio(const InSize, OutSize: Int64): Boolean; function NeedStream(Index: Integer): TStream; function NeedStreamMaxSize(Index: Integer): Int64; procedure ReleaseVolumes; function GetItemClass: TJclCompressionItemClass; virtual; abstract; function GetSupportsNestedArchive: Boolean; virtual; public { IInterface } // function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public PropNames: array of WideString; PropValues: array of TPropVariant; public class function MultipleItemContainer: Boolean; virtual; class function VolumeAccess: TJclStreamAccess; virtual; function ItemAccess: TJclStreamAccess; virtual; class function ArchiveExtensions: string; virtual; class function ArchiveName: string; virtual; class function ArchiveSubExtensions: string; virtual; class function ArchiveSignature: TDynByteArray; virtual; constructor Create(Volume0: TStream; AVolumeMaxSize: Int64 = 0; AOwnVolume: Boolean = False); overload; virtual; constructor Create(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0; VolumeMask: Boolean = False); overload; virtual; // if VolumeMask is true then VolumeFileName represents a mask to get volume file names // "myfile%d.zip" "myfile.zip.%.3d" ... destructor Destroy; override; function AddVolume(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0): Integer; overload; virtual; function AddVolume(const VolumeFileName, TmpVolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0): Integer; overload; virtual; function AddVolume(VolumeStream: TStream; AVolumeMaxSize: Int64 = 0; AOwnsStream: Boolean = False): Integer; overload; virtual; function AddVolume(VolumeStream, TmpVolumeStream: TStream; AVolumeMaxSize: Int64 = 0; AOwnsStream: Boolean = False; AOwnsTmpStream: Boolean = False): Integer; overload; virtual; // miscellaneous procedure ClearVolumes; procedure ClearItems; procedure CheckOperationSuccess; procedure ClearOperationSuccess; procedure SelectAll; procedure UnselectAll; property ItemCount: Integer read GetItemCount; property Items[Index: Integer]: TJclCompressionItem read GetItem; property VolumeCount: Integer read GetVolumeCount; property Volumes[Index: Integer]: TJclCompressionVolume read GetVolume; property VolumeMaxSize: Int64 read FVolumeMaxSize; property VolumeFileNameMask: TFileName read FVolumeFileNameMask; property VolumeIndexOffset: Integer read FVolumeIndexOffset write FVolumeIndexOffset; property CurrentItemIndex: Integer read FCurrentItemIndex; // valid during OnProgress property OnProgress: TJclCompressionProgressEvent read FOnProgress write FOnProgress; property OnRatio: TJclCompressionRatioEvent read FOnRatio write FOnRatio; // volume events property OnVolume: TJclCompressionVolumeEvent read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent read FOnVolumeMaxSize write FOnVolumeMaxSize; property OnPassword: TJclCompressionPasswordEvent read FOnPassword write FOnPassword; property Password: WideString read FPassword write FPassword; property SupportsNestedArchive: Boolean read GetSupportsNestedArchive; property CancelCurrentOperation: Boolean read FCancelCurrentOperation write FCancelCurrentOperation; end; TJclCompressionArchiveClass = class of TJclCompressionArchive; IJclArchiveNumberOfThreads = interface ['{9CFAB801-E68E-4A51-AC49-277B297F1141}'] function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); property NumberOfThreads: Cardinal read GetNumberOfThreads write SetNumberOfThreads; end; IJclArchiveCompressionLevel = interface ['{A6A2F55F-2860-4E44-BC20-8C5D3E322AB6}'] function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); property CompressionLevel: Cardinal read GetCompressionLevel write SetCompressionLevel; property CompressionLevelMax: Cardinal read GetCompressionLevelMax; property CompressionLevelMin: Cardinal read GetCompressionLevelMin; end; TJclCompressionMethod = (cmCopy, cmDeflate, cmDeflate64, cmBZip2, cmLZMA, cmLZMA2, cmPPMd); TJclCompressionMethods = set of TJclCompressionMethod; IJclArchiveCompressionMethod = interface ['{2818F8E8-7D5F-4C8C-865E-9BA4512BB766}'] function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); property CompressionMethod: TJclCompressionMethod read GetCompressionMethod write SetCompressionMethod; property SupportedCompressionMethods: TJclCompressionMethods read GetSupportedCompressionMethods; end; TJclEncryptionMethod = (emNone, emAES128, emAES192, emAES256, emZipCrypto); TJclEncryptionMethods = set of TJclEncryptionMethod; IJclArchiveEncryptionMethod = interface ['{643485B6-66A1-41C9-A13B-0A8453E9D0C9}'] function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); property EncryptionMethod: TJclEncryptionMethod read GetEncryptionMethod write SetEncryptionMethod; property SupportedEncryptionMethods: TJclEncryptionMethods read GetSupportedEncryptionMethods; end; IJclArchiveDictionarySize = interface ['{D3949834-9F3B-49BC-8403-FE3CE5FDCF35}'] function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); property DictionarySize: Cardinal read GetDictionarySize write SetDictionarySize; end; IJclArchiveNumberOfPasses = interface ['{C61B2814-50CE-4C3C-84A5-BACF8A57E3BC}'] function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); property NumberOfPasses: Cardinal read GetNumberOfPasses write SetNumberOfPasses; end; IJclArchiveRemoveSfxBlock = interface ['{852D050D-734E-4610-902A-8FB845DB32A9}'] function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); property RemoveSfxBlock: Boolean read GetRemoveSfxBlock write SetRemoveSfxBlock; end; IJclArchiveCompressHeader = interface ['{22C62A3B-A58E-4F88-9D3F-08586B542639}'] function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); property CompressHeader: Boolean read GetCompressHeader write SetCompressHeader; property CompressHeaderFull: Boolean read GetCompressHeaderFull write SetCompressHeaderFull; end; IJclArchiveEncryptHeader = interface ['{7DBA20A8-48A1-4CA2-B9AC-41C219A09A4A}'] function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); property EncryptHeader: Boolean read GetEncryptHeader write SetEncryptHeader; end; IJclArchiveSaveCreationDateTime = interface ['{8B212BF9-C13F-4582-A4FA-A40E538EFF65}'] function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); property SaveCreationDateTime: Boolean read GetSaveCreationDateTime write SetSaveCreationDateTime; end; IJclArchiveSaveLastAccessDateTime = interface ['{1A4B2906-9DD2-4584-B7A3-3639DA92AFC5}'] function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); property SaveLastAccessDateTime: Boolean read GetSaveLastAccessDateTime write SetSaveLastAccessDateTime; end; IJclArchiveSaveLastWriteDateTime = interface ['{0C1729DC-35E8-43D4-8ECA-54F20CDFF87A}'] function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); property SaveLastWriteDateTime: Boolean read GetSaveLastWriteDateTime write SetSaveLastWriteDateTime; end; IJclArchiveAlgorithm = interface ['{53965F1F-24CC-4548-B9E8-5AE2EB7F142D}'] function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); property Algorithm: Cardinal read GetAlgorithm write SetAlgorithm; property SupportedAlgorithms: TDynCardinalArray read GetSupportedAlgorithms; end; IJclArchiveSolid = interface ['{6902C54C-1577-422C-B18B-E27953A28661}'] function GetSolidBlockSize: Int64; function GetSolidExtension: Boolean; procedure SetSolidBlockSize(const Value: Int64); procedure SetSolidExtension(Value: Boolean); property SolidBlockSize: Int64 read GetSolidBlockSize write SetSolidBlockSize; property SolidExtension: Boolean read GetSolidExtension write SetSolidExtension; end; TJclCompressItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; end; TJclCompressArchive = class(TJclCompressionArchive, IInterface) private FBaseRelName: WideString; FBaseDirName: string; FAddFilesInDir: Boolean; FDuplicateAction: TJclCompressionDuplicateAction; FDuplicateCheck: TJclCompressionDuplicateCheck; procedure InternalAddFile(const Directory: string; const FileInfo: TSearchRec); procedure InternalAddDirectory(const Directory: string); protected FCompressing: Boolean; FPackedNames: TJclWideStringList; procedure CheckNotCompressing; function AddFileCheckDuplicate(NewItem: TJclCompressionItem): Integer; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; destructor Destroy; override; function AddDirectory(const PackedName: WideString; const DirName: string = ''; RecurseIntoDir: Boolean = False; AddFilesInDir: Boolean = False): Integer; overload; virtual; function AddFile(const PackedName: WideString; const FileName: TFileName): Integer; overload; virtual; function AddFile(const PackedName: WideString; AStream: TStream; AOwnsStream: Boolean = False): Integer; overload; virtual; procedure Compress; virtual; property DuplicateCheck: TJclCompressionDuplicateCheck read FDuplicateCheck write FDuplicateCheck; property DuplicateAction: TJclCompressionDuplicateAction read FDuplicateAction write FDuplicateAction; end; TJclCompressArchiveClass = class of TJclCompressArchive; TJclCompressArchiveClassArray = array of TJclCompressArchiveClass; TJclDecompressItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; function ValidateExtraction(Index: Integer): Boolean; override; end; // return False not to extract this file // assign your own FileName, Stream or AOwnsStream to override default one TJclCompressionExtractEvent = function (Sender: TObject; Index: Integer; var FileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean of object; TJclDecompressArchive = class(TJclCompressionArchive, IInterface) private FOnExtract: TJclCompressionExtractEvent; FAutoCreateSubDir: Boolean; protected FDecompressing: Boolean; FListing: Boolean; FDestinationDir: string; FExtractingAllIndex: Integer; procedure CheckNotDecompressing; procedure CheckListing; function ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; virtual; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; procedure ListFiles; virtual; abstract; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; property OnExtract: TJclCompressionExtractEvent read FOnExtract write FOnExtract; property DestinationDir: string read FDestinationDir; property AutoCreateSubDir: Boolean read FAutoCreateSubDir; end; TJclDecompressArchiveClass = class of TJclDecompressArchive; TJclDecompressArchiveClassArray = array of TJclDecompressArchiveClass; TJclUpdateItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; function ValidateExtraction(Index: Integer): Boolean; override; end; TJclUpdateArchive = class(TJclCompressArchive, IInterface) private FOnExtract: TJclCompressionExtractEvent; FAutoCreateSubDir: Boolean; protected FDecompressing: Boolean; FListing: Boolean; FDestinationDir: string; FExtractingAllIndex: Integer; procedure CheckNotDecompressing; procedure CheckListing; procedure InitializeArchiveProperties; override; function ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; virtual; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; procedure ListFiles; virtual; abstract; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure DeleteItem(Index: Integer); virtual; abstract; procedure RemoveItem(const PackedName: WideString); virtual; abstract; property OnExtract: TJclCompressionExtractEvent read FOnExtract write FOnExtract; property DestinationDir: string read FDestinationDir; property AutoCreateSubDir: Boolean read FAutoCreateSubDir; end; // ancestor class for all archives that update files in-place (not creating a copy of the volumes) TJclInPlaceUpdateArchive = class(TJclUpdateArchive, IInterface) end; // called when tmp volumes will replace volumes after out-of-place update TJclCompressionReplaceEvent = function (Sender: TObject; const SrcFileName, DestFileName: TFileName; var SrcStream, DestStream: TStream; var OwnsSrcStream, OwnsDestStream: Boolean): Boolean of object; // ancestor class for all archives that update files out-of-place (by creating a copy of the volumes) TJclOutOfPlaceUpdateArchive = class(TJclUpdateArchive, IInterface) private FReplaceVolumes: Boolean; FTmpVolumeIndex: Integer; FOnReplace: TJclCompressionReplaceEvent; FOnTmpVolume: TJclCompressionVolumeEvent; protected function NeedTmpStream(Index: Integer): TStream; procedure InitializeArchiveProperties; override; function InternalOpenTmpStream(const FileName: TFileName): TStream; public class function TmpVolumeAccess: TJclStreamAccess; virtual; procedure Compress; override; property ReplaceVolumes: Boolean read FReplaceVolumes write FReplaceVolumes; property OnReplace: TJclCompressionReplaceEvent read FOnReplace write FOnReplace; property OnTmpVolume: TJclCompressionVolumeEvent read FOnTmpVolume write FOnTmpVolume; end; TJclUpdateArchiveClass = class of TJclUpdateArchive; TJclUpdateArchiveClassArray = array of TJclUpdateArchiveClass; // registered archive formats type TJclCompressionArchiveFormats = class private FCompressFormats: TList; FDecompressFormats: TList; FUpdateFormats: TList; protected function GetCompressFormatCount: Integer; function GetCompressFormat(Index: Integer): TJclCompressArchiveClass; function GetDecompressFormatCount: Integer; function GetDecompressFormat(Index: Integer): TJclDecompressArchiveClass; function GetUpdateFormatCount: Integer; function GetUpdateFormat(Index: Integer): TJclUpdateArchiveClass; public constructor Create; destructor Destroy; override; procedure RegisterFormat(AClass: TJclCompressionArchiveClass); procedure UnregisterFormat(AClass: TJclCompressionArchiveClass); // archive signatures do not give significant results for ISO/UDF (signature is not located at stream start) // need to find a generic way to match all signature before publishing the code //function SignatureMatches(Format: TJclCompressionArchiveClass; ArchiveStream: TStream; var Buffer: TDynByteArray): Boolean; function FindCompressFormat(const AFileName: TFileName): TJclCompressArchiveClass; //function FindDecompressFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclDecompressArchiveClass; overload; function FindDecompressFormat(const AFileName: TFileName): TJclDecompressArchiveClass; //overload; //function FindUpdateFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclUpdateArchiveClass; overload; function FindUpdateFormat(const AFileName: TFileName): TJclUpdateArchiveClass; //overload; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; property CompressFormatCount: Integer read GetCompressFormatCount; property CompressFormats[Index: Integer]: TJclCompressArchiveClass read GetCompressFormat; property DecompressFormatCount: Integer read GetDecompressFormatCount; property DecompressFormats[Index: Integer]: TJclDecompressArchiveClass read GetDecompressFormat; property UpdateFormatCount: Integer read GetUpdateFormatCount; property UpdateFormats[Index: Integer]: TJclUpdateArchiveClass read GetUpdateFormat; end; // retreive a singleton list containing archive formats function GetArchiveFormats: TJclCompressionArchiveFormats; // sevenzip classes for compression type TJclSevenzipCompressArchive = class(TJclCompressArchive, IInterface) private FSfxModule: String; FOutArchive: IOutArchive; protected function GetItemClass: TJclCompressionItemClass; override; function GetOutArchive: IOutArchive; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure Compress; override; property OutArchive: IOutArchive read GetOutArchive; property SfxModule: String read FSfxModule write FSfxModule; end; // file formats TJclZipCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveCompressionMethod, IJclArchiveEncryptionMethod, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IJclArchiveAlgorithm, IInterface) private FNumberOfThreads: Cardinal; FEncryptionMethod: TJclEncryptionMethod; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressionMethod: TJclCompressionMethod; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptionMethod } function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgoritm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclBZ2CompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); end; TJcl7zCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfThreads, IJclArchiveRemoveSfxBlock, IJclArchiveCompressHeader, IJclArchiveEncryptHeader, IJclArchiveSaveCreationDateTime, IJclArchiveSaveLastAccessDateTime, IJclArchiveSaveLastWriteDateTime, IJclArchiveSolid, IInterface) private FNumberOfThreads: Cardinal; FEncryptHeader: Boolean; FRemoveSfxBlock: Boolean; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressHeader: Boolean; FCompressHeaderFull: Boolean; FSaveLastAccessDateTime: Boolean; FSaveCreationDateTime: Boolean; FSaveLastWriteDateTime: Boolean; FSolidBlockSize: Int64; FSolidExtension: Boolean; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptHeader } function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); { IJclArchiveRemoveSfxBlock } function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressHeader } function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); { IJclArchiveSaveLastAccessDateTime } function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); { IJclArchiveSaveCreationDateTime } function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); { IJclArchiveSaveLastWriteDateTime } function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); { IJclArchiveSolid } function GetSolidBlockSize: Int64; function GetSolidExtension: Boolean; procedure SetSolidBlockSize(const Value: Int64); procedure SetSolidExtension(Value: Boolean); end; TJclTarCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveNumberOfPasses, IJclArchiveAlgorithm, IInterface) private FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgorithm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclXzCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionMethod, IInterface) private FCompressionMethod: TJclCompressionMethod; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); end; TJclSwfcCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclWimCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // sevenzip classes for decompression type TJclSevenzipDecompressItem = class(TJclDecompressItem) protected function GetNestedArchiveStream: TStream; override; end; TJclSevenzipDecompressArchive = class(TJclDecompressArchive, IInterface) private FInArchive: IInArchive; FInArchiveGetStream: IInArchiveGetStream; FOpened: Boolean; protected procedure OpenArchive; function GetInArchive: IInArchive; function GetInArchiveGetStream: IInArchiveGetStream; function GetItemClass: TJclCompressionItemClass; override; function GetSupportsNestedArchive: Boolean; override; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure ListFiles; override; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; property InArchive: IInArchive read GetInArchive; property InArchiveGetStream: IInArchiveGetStream read GetInArchiveGetStream; end; // file formats TJclZipDecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclBZ2DecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclRarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclArjDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclZDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzhDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJcl7zDecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclCabDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclNsisDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzmaDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzma86DecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclPeDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclElfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMachoDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUdfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclXarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMubDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclHfsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclDmgDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCompoundDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclWimDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclIsoDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // not implemented in 9.04 {TJclBkfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) protected function GetCLSID: TGUID; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; end;} TJclChmDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSplitDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclRpmDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclDebDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCpioDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclTarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclXzDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclNtfsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclFatDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMbrDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclVhdDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMslzDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclFlvDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSwfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSwfcDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclAPMDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclPpmdDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclTEDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUEFIcDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUEFIsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSquashFSDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCramFSDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; //sevenzip classes for updates (read and write) type TJclSevenzipUpdateArchive = class(TJclOutOfPlaceUpdateArchive, IInterface) private FInArchive: IInArchive; FOutArchive: IOutArchive; FOpened: Boolean; protected procedure OpenArchive; function GetInArchive: IInArchive; function GetItemClass: TJclCompressionItemClass; override; function GetOutArchive: IOutArchive; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure ListFiles; override; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure Compress; override; procedure DeleteItem(Index: Integer); override; procedure RemoveItem(const PackedName: WideString); override; property InArchive: IInArchive read GetInArchive; property OutArchive: IOutArchive read GetOutArchive; end; TJclZipUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveCompressionMethod, IJclArchiveEncryptionMethod, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IJclArchiveAlgorithm, IInterface) private FNumberOfThreads: Cardinal; FEncryptionMethod: TJclEncryptionMethod; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressionMethod: TJclCompressionMethod; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptionMethod } function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgoritm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclBZ2UpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); end; TJcl7zUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfThreads, IJclArchiveRemoveSfxBlock, IJclArchiveCompressHeader, IJclArchiveEncryptHeader, IJclArchiveSaveCreationDateTime, IJclArchiveSaveLastAccessDateTime, IJclArchiveSaveLastWriteDateTime, IInterface) private FNumberOfThreads: Cardinal; FEncryptHeader: Boolean; FRemoveSfxBlock: Boolean; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressHeader: Boolean; FCompressHeaderFull: Boolean; FSaveLastAccessDateTime: Boolean; FSaveCreationDateTime: Boolean; FSaveLastWriteDateTime: Boolean; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptHeader } function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); { IJclArchiveRemoveSfxBlock } function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressHeader } function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); { IJclArchiveSaveLastAccessDateTime } function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); { IJclArchiveSaveCreationDateTime } function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); { IJclArchiveSaveLastWriteDateTime } function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); end; TJclTarUpdateArchive = class(TJclSevenzipUpdateArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveNumberOfPasses, IJclArchiveAlgorithm, IInterface) private FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgorithm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclXzUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionMethod, IInterface) private FCompressionMethod: TJclCompressionMethod; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); end; TJclSwfcUpdateArchive = class(TJclSevenzipUpdateArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // internal sevenzip stuff, do not use it directly type TJclSevenzipOutStream = class(TInterfacedObject, ISequentialOutStream, IOutStream, IUnknown) private FArchive: TJclCompressionArchive; FItemIndex: Integer; FStream: TStream; FOwnsStream: Boolean; FTruncateOnRelease: Boolean; FMaximumPosition: Int64; procedure NeedStream; procedure ReleaseStream; public constructor Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); overload; constructor Create(AStream: TStream; AOwnsStream: Boolean; ATruncateOnRelease: Boolean); overload; destructor Destroy; override; // ISequentialOutStream function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IOutStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; TJclSevenzipNestedInStream = class(TJclStream) private FInStream: IInStream; protected procedure SetSize(const NewSize: Int64); override; public constructor Create(AInStream: IInStream); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; TJclSevenzipInStream = class(TInterfacedObject, ISequentialInStream, IInStream, IStreamGetSize, IUnknown) private FArchive: TJclCompressionArchive; FItemIndex: Integer; FStream: TStream; FOwnsStream: Boolean; procedure NeedStream; procedure ReleaseStream; public constructor Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); overload; constructor Create(AStream: TStream; AOwnsStream: Boolean); overload; destructor Destroy; override; // ISequentialInStream function Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IInStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; // IStreamGetSize function GetSize(Size: PInt64): HRESULT; stdcall; end; TJclSevenzipOpenCallback = class(TInterfacedObject, IArchiveOpenCallback, ICryptoGetTextPassword, IUnknown) private FArchive: TJclCompressionArchive; public constructor Create(AArchive: TJclCompressionArchive); // IArchiveOpenCallback function SetCompleted(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; function SetTotal(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; // ICryptoGetTextPassword function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; end; TJclSevenzipExtractCallback = class(TInterfacedObject, IUnknown, IProgress, IArchiveExtractCallback, ICryptoGetTextPassword, ICompressProgressInfo) private FArchive: TJclCompressionArchive; FLastStream: Cardinal; public constructor Create(AArchive: TJclCompressionArchive); // IArchiveExtractCallback function GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; stdcall; function PrepareOperation(askExtractMode: Cardinal): HRESULT; stdcall; function SetOperationResult(resultEOperationResult: Integer): HRESULT; stdcall; // IProgress function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; function SetTotal(Total: Int64): HRESULT; stdcall; // ICryptoGetTextPassword function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; // ICompressProgressInfo function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; TJclSevenzipUpdateCallback = class(TInterfacedObject, IUnknown, IProgress, IArchiveUpdateCallback, IArchiveUpdateCallback2, ICryptoGetTextPassword2, ICompressProgressInfo) private FArchive: TJclCompressionArchive; FLastStream: Cardinal; public constructor Create(AArchive: TJclCompressionArchive); // IProgress function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; function SetTotal(Total: Int64): HRESULT; stdcall; // IArchiveUpdateCallback function GetProperty(Index: Cardinal; PropID: Cardinal; out Value: tagPROPVARIANT): HRESULT; stdcall; function GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; stdcall; function GetUpdateItemInfo(Index: Cardinal; NewData: PInteger; NewProperties: PInteger; IndexInArchive: PCardinal): HRESULT; stdcall; function SetOperationResult(OperationResult: Integer): HRESULT; stdcall; // IArchiveUpdateCallback2 function GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; stdcall; function GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; stdcall; // ICryptoGetTextPassword2 function CryptoGetTextPassword2(PasswordIsDefined: PInteger; Password: PBStr): HRESULT; stdcall; // ICompressProgressInfo function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; type TWideStringSetter = procedure (const Value: WideString) of object; TCardinalSetter = procedure (Value: Cardinal) of object; TInt64Setter = procedure (const Value: Int64) of object; TFileTimeSetter = procedure (const Value: TFileTime) of object; TBoolSetter = procedure (Value: Boolean) of object; procedure SevenzipCheck(Value: HRESULT); function Get7zWideStringProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TWideStringSetter): Boolean; function Get7zCardinalProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TCardinalSetter): Boolean; function Get7zInt64Prop(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TInt64Setter): Boolean; function Get7zFileTimeProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TFileTimeSetter): Boolean; function Get7zBoolProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TBoolSetter): Boolean; procedure Load7zFileAttribute(AInArchive: IInArchive; ItemIndex: Integer; AItem: TJclCompressionItem); procedure GetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil; OnArchiveRatio: TJclCompressionRatioEvent = nil): Boolean; overload; function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil; OnArchiveRatio: TJclCompressionRatioEvent = nil): Boolean; overload; var JclCompressSharedFiles: Boolean = False; {$ENDIF MSWINDOWS} {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL$'; Revision: '$Revision$'; Date: '$Date$'; LogPath: 'JCL\source\common'; Extra: ''; Data: nil ); {$ENDIF UNITVERSIONING} implementation uses DCJclResources, DCJclCompression; const JclDefaultBufferSize = 131072; // 128k var // using TObject prevents default linking of TJclCompressionStreamFormats // and TJclCompressionArchiveFormats and all classes GlobalStreamFormats: TObject; GlobalArchiveFormats: TObject; {$IFNDEF FPC} //=== { TJclCompressionStream } ============================================== constructor TJclCompressionStream.Create(AStream: TStream); begin inherited Create; FBuffer := nil; SetBufferSize(JclDefaultBufferSize); FStream := AStream; end; destructor TJclCompressionStream.Destroy; begin SetBufferSize(0); inherited Destroy; end; function TJclCompressionStream.Read(var Buffer; Count: Longint): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionReadNotSupported); end; function TJclCompressionStream.Write(const Buffer; Count: Longint): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; function TJclCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin raise EJclCompressionError.CreateRes(@RsCompressionSeekNotSupported); end; procedure TJclCompressionStream.Reset; begin raise EJclCompressionError.CreateRes(@RsCompressionResetNotSupported); end; function TJclCompressionStream.SetBufferSize(Size: Cardinal): Cardinal; begin if FBuffer <> nil then FreeMem(FBuffer, FBufferSize); FBufferSize := Size; if FBufferSize > 0 then GetMem(FBuffer, FBufferSize) else FBuffer := nil; Result := FBufferSize; end; class function TJclCompressionStream.StreamExtensions: string; begin Result := ''; end; class function TJclCompressionStream.StreamName: string; begin Result := ''; end; class function TJclCompressionStream.StreamSubExtensions: string; begin Result := ''; end; procedure TJclCompressionStream.Progress(Sender: TObject); begin if Assigned(FOnProgress) then FOnProgress(Sender); end; //=== { TJclCompressStream } ================================================= constructor TJclCompressStream.Create(Destination: TStream); begin inherited Create(Destination); end; //=== { TJclDecompressStream } =============================================== constructor TJclDecompressStream.Create(Source: TStream; AOwnsStream: Boolean); begin inherited Create(Source); FOwnsStream := AOwnsStream; end; destructor TJclDecompressStream.Destroy; begin if FOwnsStream then FStream.Free; inherited Destroy; end; //=== { TJclCompressionStreamFormats } ======================================= constructor TJclCompressionStreamFormats.Create; begin inherited Create; FCompressFormats := TList.Create; FDecompressFormats := TList.Create; RegisterFormat(TJclZLibCompressStream); RegisterFormat(TJclZLibDecompressStream); RegisterFormat(TJclGZIPCompressionStream); RegisterFormat(TJclGZIPDecompressionStream); RegisterFormat(TJclBZIP2CompressionStream); RegisterFormat(TJclBZIP2DecompressionStream); end; destructor TJclCompressionStreamFormats.Destroy; begin FCompressFormats.Free; FDecompressFormats.Free; inherited Destroy; end; function TJclCompressionStreamFormats.FindCompressFormat(const AFileName: TFileName): TJclCompressStreamClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressStreamClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.StreamExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionStreamFormats.FindDecompressFormat(const AFileName: TFileName): TJclDecompressStreamClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclDecompressStreamClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to DecompressFormatCount - 1 do begin AFormat := DecompressFormats[IndexFormat]; StrTokenToStrings(AFormat.StreamExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionStreamFormats.GetCompressFormat(Index: Integer): TJclCompressStreamClass; begin Result := TJclCompressStreamClass(FCompressFormats.Items[Index]); end; function TJclCompressionStreamFormats.GetCompressFormatCount: Integer; begin Result := FCompressFormats.Count; end; function TJclCompressionStreamFormats.GetDecompressFormat(Index: Integer): TJclDecompressStreamClass; begin Result := TJclDecompressStreamClass(FDecompressFormats.Items[Index]); end; function TJclCompressionStreamFormats.GetDecompressFormatCount: Integer; begin Result := FDecompressFormats.Count; end; procedure TJclCompressionStreamFormats.RegisterFormat(AClass: TJclCompressionStreamClass); begin if AClass.InheritsFrom(TJclCompressStream) then FCompressFormats.Add(AClass) else if AClass.InheritsFrom(TJclDecompressStream) then FDecompressFormats.Add(AClass); end; procedure TJclCompressionStreamFormats.UnregisterFormat(AClass: TJclCompressionStreamClass); begin if AClass.InheritsFrom(TJclCompressStream) then FCompressFormats.Remove(AClass) else if AClass.InheritsFrom(TJclDecompressStream) then FDecompressFormats.Remove(AClass); end; function GetStreamFormats: TJclCompressionStreamFormats; begin if not Assigned(GlobalStreamFormats) then GlobalStreamFormats := TJclCompressionStreamFormats.Create; Result := TJclCompressionStreamFormats(GlobalStreamFormats); end; //=== { TJclZLibCompressionStream } ========================================== { Error checking helper } function ZLibCheck(const ErrCode: Integer): Integer; begin case ErrCode of 0..High(ErrCode): Result := ErrCode; // no error Z_ERRNO: raise EJclCompressionError.CreateRes(@RsCompressionZLibZErrNo); Z_STREAM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZStreamError); Z_DATA_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZDataError); Z_MEM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZMemError); Z_BUF_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZBufError); Z_VERSION_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZVersionError); else raise EJclCompressionError.CreateResFmt(@RsCompressionZLibError, [ErrCode]); end; end; constructor TJclZLibCompressStream.Create(Destination: TStream; CompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadZLib; Assert(FBuffer <> nil); Assert(FBufferSize > 0); // Initialize ZLib StreamRecord ZLibRecord.zalloc := nil; // Use build-in memory allocation functionality ZLibRecord.zfree := nil; ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; FWindowBits := DEF_WBITS; FMemLevel := DEF_MEM_LEVEL; FMethod := Z_DEFLATED; FStrategy := Z_DEFAULT_STRATEGY; FCompressionLevel := CompressionLevel; FDeflateInitialized := False; end; destructor TJclZLibCompressStream.Destroy; begin Flush; if FDeflateInitialized then begin ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.avail_out := 0; ZLibRecord.next_out := nil; ZLibCheck(deflateEnd(ZLibRecord)); end; inherited Destroy; end; function TJclZLibCompressStream.Write(const Buffer; Count: Longint): Longint; begin if not FDeflateInitialized then begin ZLibCheck(deflateInit2(ZLibRecord, FCompressionLevel, FMethod, FWindowBits, FMemLevel, FStrategy)); FDeflateInitialized := True; end; ZLibRecord.next_in := @Buffer; ZLibRecord.avail_in := Count; while ZLibRecord.avail_in > 0 do begin ZLibCheck(deflate(ZLibRecord, Z_NO_FLUSH)); if ZLibRecord.avail_out = 0 then // Output buffer empty. Write to stream and go on... begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; end; end; Result := Count; end; function TJclZLibCompressStream.Flush: Integer; begin Result := 0; if FDeflateInitialized then begin ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; while (ZLibCheck(deflate(ZLibRecord, Z_FINISH)) <> Z_STREAM_END) and (ZLibRecord.avail_out = 0) do begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; Inc(Result, FBufferSize); end; if ZLibRecord.avail_out < FBufferSize then begin FStream.WriteBuffer(FBuffer^, FBufferSize - ZLibRecord.avail_out); Progress(Self); Inc(Result, FBufferSize - ZLibRecord.avail_out); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; end; end; end; function TJclZLibCompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := ZLibRecord.total_in else if (Offset = 0) and (Origin = soBeginning) and (ZLibRecord.total_in = 0) then Result := 0 else Result := inherited Seek(Offset, Origin); end; procedure TJclZLibCompressStream.SetWindowBits(Value: Integer); begin FWindowBits := Value; end; class function TJclZLibCompressStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZLibCompressStream.StreamName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZLibCompressStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; procedure TJclZLibCompressStream.SetMethod(Value: Integer); begin FMethod := Value; end; procedure TJclZLibCompressStream.SetStrategy(Value: Integer); begin FStrategy := Value; if FDeflateInitialized then ZLibCheck(deflateParams(ZLibRecord, FCompressionLevel, FStrategy)); end; procedure TJclZLibCompressStream.SetMemLevel(Value: Integer); begin FMemLevel := Value; end; procedure TJclZLibCompressStream.SetCompressionLevel(Value: Integer); begin FCompressionLevel := Value; if FDeflateInitialized then ZLibCheck(deflateParams(ZLibRecord, FCompressionLevel, FStrategy)); end; procedure TJclZLibCompressStream.Reset; begin if FDeflateInitialized then begin Flush; ZLibCheck(deflateReset(ZLibRecord)); end; end; //=== { TJclZLibDecompressionStream } ======================================= constructor TJclZLibDecompressStream.Create(Source: TStream; WindowBits: Integer; AOwnsStream: Boolean); begin inherited Create(Source, AOwnsStream); LoadZLib; // Initialize ZLib StreamRecord ZLibRecord.zalloc := nil; // Use build-in memory allocation functionality ZLibRecord.zfree := nil; ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; FInflateInitialized := False; FWindowBits := WindowBits; end; destructor TJclZLibDecompressStream.Destroy; begin if FInflateInitialized then begin FStream.Seek(-ZLibRecord.avail_in, soCurrent); ZLibCheck(inflateEnd(ZLibRecord)); end; inherited Destroy; end; function TJclZLibDecompressStream.Read(var Buffer; Count: Longint): Longint; var Res: Integer; begin if not FInflateInitialized then begin ZLibCheck(InflateInit2(ZLibRecord, FWindowBits)); FInflateInitialized := True; end; ZLibRecord.next_out := @Buffer; ZLibRecord.avail_out := Count; while ZLibRecord.avail_out > 0 do // as long as we have data begin if ZLibRecord.avail_in = 0 then begin ZLibRecord.avail_in := FStream.Read(FBuffer^, FBufferSize); if ZLibRecord.avail_in = 0 then begin Result := Count - Longint(ZLibRecord.avail_out); Exit; end; ZLibRecord.next_in := FBuffer; end; if ZLibRecord.avail_in > 0 then begin Res := inflate(ZLibRecord, Z_NO_FLUSH); ZLibCheck(Res); Progress(Self); // Suggestion by ZENsan (mantis 4546) if Res = Z_STREAM_END then begin Result := Count - Longint(ZLibRecord.avail_out); Exit; end; end; end; Result := Count; end; function TJclZLibDecompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := ZLibRecord.total_out else Result := inherited Seek(Offset, Origin); end; procedure TJclZLibDecompressStream.SetWindowBits(Value: Integer); begin FWindowBits := Value; end; class function TJclZLibDecompressStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZLibDecompressStream.StreamName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZLibDecompressStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; //=== { TJclGZIPCompressionStream } ========================================== constructor TJclGZIPCompressionStream.Create(Destination: TStream; CompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadZLib; FFlags := [gfHeaderCRC16, gfExtraField, gfOriginalFileName, gfComment]; FAutoSetTime := True; FFatSystem := gfsUnknown; FCompressionLevel := CompressionLevel; FDataCRC32 := crc32(0, nil, 0); end; destructor TJclGZIPCompressionStream.Destroy; begin // BUGFIX: CRC32 and Uncompressed Size missing from GZIP output // unless you called Flush manually. This is not correct Stream behaviour. // Flush should be optional! Flush; FZLibStream.Free; inherited Destroy; end; function TJclGZIPCompressionStream.Flush: Integer; var AFooter: TJclGZIPFooter; begin if Assigned(FZLibStream) then Result := FZLibStream.Flush else Result := 0; if FFooterWritten then Exit; FFooterWritten := True; // Write footer, CRC32 followed by ISIZE AFooter.DataCRC32 := FDataCRC32; AFooter.DataSize := FOriginalSize; Inc(Result, FStream.Write(AFooter, SizeOf(AFooter))); end; function TJclGZIPCompressionStream.GetDosTime: TDateTime; begin if AutoSetTime then Result := Now else Result := UnixTimeToDateTime(FUnixTime); end; function TJclGZIPCompressionStream.GetUnixTime: Cardinal; begin if AutoSetTime then Result := DateTimeToUnixTime(Now) else Result := FUnixTime; end; procedure TJclGZIPCompressionStream.Reset; begin if Assigned(FZLibStream) then FZLibStream.Reset; FDataCRC32 := crc32(0, nil, 0); FOriginalSize := 0; end; procedure TJclGZIPCompressionStream.SetDosTime(const Value: TDateTime); begin AutoSetTime := False; FUnixTime := DateTimeToUnixTime(Value); end; procedure TJclGZIPCompressionStream.SetUnixTime(Value: Cardinal); begin AutoSetTime := False; FUnixTime := Value; end; class function TJclGZIPCompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZIPCompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZIPCompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; function TJclGZIPCompressionStream.Write(const Buffer; Count: Integer): Longint; begin if not FHeaderWritten then begin WriteHeader; FHeaderWritten := True; end; if not Assigned(FZLibStream) then begin FZLibStream := TJclZLibCompressStream.Create(FStream, FCompressionLevel); FZLibStream.WindowBits := -DEF_WBITS; // negative value for raw mode FZLibStream.OnProgress := ZLibStreamProgress; end; Result := FZLibStream.Write(Buffer, Count); FDataCRC32 := crc32(FDataCRC32, PBytef(@Buffer), Result); Inc(FOriginalSize, Result); end; procedure TJclGZIPCompressionStream.WriteHeader; const FatSystemToByte: array [TJclGZIPFatSystem] of Byte = (JCL_GZIP_OS_FAT, JCL_GZIP_OS_AMIGA, JCL_GZIP_OS_VMS, JCL_GZIP_OS_UNIX, JCL_GZIP_OS_VM, JCL_GZIP_OS_ATARI, JCL_GZIP_OS_HPFS, JCL_GZIP_OS_MAC, JCL_GZIP_OS_Z, JCL_GZIP_OS_CPM, JCL_GZIP_OS_TOPS, JCL_GZIP_OS_NTFS, JCL_GZIP_OS_QDOS, JCL_GZIP_OS_ACORN, JCL_GZIP_OS_UNKNOWN, JCL_GZIP_OS_UNKNOWN); var AHeader: TJclGZIPHeader; ExtraFieldLength, HeaderCRC16: Word; HeaderCRC: Cardinal; TmpAnsiString: AnsiString; procedure StreamWriteBuffer(const Buffer; Count: Longint); begin FStream.WriteBuffer(Buffer, Count); if gfHeaderCRC16 in Flags then HeaderCRC := crc32(HeaderCRC, @Byte(Buffer), Count); end; function CheckCString(const Buffer: string): Boolean; var Index: Integer; begin Result := False; for Index := 1 to Length(Buffer) do if Buffer[Index] = #0 then Exit; Result := True; end; begin if gfHeaderCRC16 in Flags then HeaderCRC := crc32(0, nil, 0); AHeader.ID1 := JCL_GZIP_ID1; AHeader.ID2 := JCL_GZIP_ID2; AHeader.CompressionMethod := JCL_GZIP_CM_DEFLATE; AHeader.Flags := 0; if gfDataIsText in Flags then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_TEXT; if gfHeaderCRC16 in Flags then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_CRC; if (gfExtraField in Flags) and (ExtraField <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_EXTRA; if (gfOriginalFileName in Flags) and (OriginalFileName <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_NAME; if (gfComment in Flags) and (Comment <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_COMMENT; if AutoSetTime then AHeader.ModifiedTime := DateTimeToUnixTime(Now) else AHeader.ModifiedTime := FUnixTime; case FCompressionLevel of Z_BEST_COMPRESSION: AHeader.ExtraFlags := JCL_GZIP_EFLAG_MAX; Z_BEST_SPEED: AHeader.ExtraFlags := JCL_GZIP_EFLAG_FAST; else AHeader.ExtraFlags := 0; end; AHeader.OS := FatSystemToByte[FatSystem]; StreamWriteBuffer(AHeader, SizeOf(AHeader)); if (gfExtraField in Flags) and (ExtraField <> '') then begin if Length(ExtraField) > High(Word) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPExtraFieldTooLong); ExtraFieldLength := Length(ExtraField); StreamWriteBuffer(ExtraFieldLength, SizeOf(ExtraFieldLength)); StreamWriteBuffer(ExtraField[1], Length(ExtraField)); end; if (gfOriginalFileName in Flags) and (OriginalFileName <> '') then begin if not CheckCString(OriginalFileName) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPBadString); TmpAnsiString := AnsiString(OriginalFileName); StreamWriteBuffer(TmpAnsiString[1], Length(TmpAnsiString) + 1); end; if (gfComment in Flags) and (Comment <> '') then begin if not CheckCString(Comment) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPBadString); TmpAnsiString := AnsiString(Comment); StreamWriteBuffer(TmpAnsiString[1], Length(TmpAnsiString) + 1); end; if (gfHeaderCRC16 in Flags) then begin HeaderCRC16 := HeaderCRC and $FFFF; FStream.WriteBuffer(HeaderCRC16, SizeOf(HeaderCRC16)); end; end; procedure TJclGZIPCompressionStream.ZLibStreamProgress(Sender: TObject); begin Progress(Self); end; //=== { TJclGZIPDecompressionStream } ======================================== constructor TJclGZIPDecompressionStream.Create(Source: TStream; CheckHeaderCRC: Boolean; AOwnsStream: Boolean); var HeaderCRC: Cardinal; ComputeHeaderCRC: Boolean; ExtraFieldLength: Word; procedure ReadBuffer(var Buffer; SizeOfBuffer: Longint); begin Source.ReadBuffer(Buffer, SizeOfBuffer); if ComputeHeaderCRC then HeaderCRC := crc32(HeaderCRC, @Byte(Buffer), SizeOfBuffer); end; function ReadCString: AnsiString; var Buf: AnsiChar; begin Result := ''; Buf := #0; repeat Source.ReadBuffer(Buf, SizeOf(Buf)); if Buf = #0 then Break; Result := Result + Buf; until False; end; begin inherited Create(Source, AOwnsStream); LoadZLib; FAutoCheckDataCRC32 := True; FComputedDataCRC32 := crc32(0, nil, 0); HeaderCRC := crc32(0, nil, 0); ComputeHeaderCRC := CheckHeaderCRC; ReadBuffer(FHeader, SizeOf(FHeader)); if (FHeader.ID1 <> JCL_GZIP_ID1) or (FHeader.ID2 <> JCL_GZIP_ID2) then raise EJclCompressionError.CreateResFmt(@RsCompressionGZipInvalidID, [FHeader.ID1, FHeader.ID2]); if (FHeader.CompressionMethod <> JCL_GZIP_CM_DEFLATE) then raise EJclCompressionError.CreateResFmt(@RsCompressionGZipUnsupportedCM, [FHeader.CompressionMethod]); if (FHeader.Flags and JCL_GZIP_FLAG_EXTRA) <> 0 then begin ExtraFieldLength := 0; ReadBuffer(ExtraFieldLength, SizeOf(ExtraFieldLength)); SetLength(FExtraField, ExtraFieldLength); ReadBuffer(FExtraField[1], ExtraFieldLength); end; if (FHeader.Flags and JCL_GZIP_FLAG_NAME) <> 0 then FOriginalFileName := TFileName(ReadCString); if (FHeader.Flags and JCL_GZIP_FLAG_COMMENT) <> 0 then FComment := string(ReadCString); if CheckHeaderCRC then begin ComputeHeaderCRC := False; FComputedHeaderCRC16 := HeaderCRC and $FFFF; end; if (FHeader.Flags and JCL_GZIP_FLAG_CRC) <> 0 then begin Source.ReadBuffer(FStoredHeaderCRC16, SizeOf(FStoredHeaderCRC16)); if CheckHeaderCRC and (FComputedHeaderCRC16 <> FStoredHeaderCRC16) then raise EJclCompressionError.CreateRes(@RsCompressionGZipHeaderCRC); end; end; destructor TJclGZIPDecompressionStream.Destroy; begin FZLibStream.Free; FCompressedDataStream.Free; inherited Destroy; end; function TJclGZIPDecompressionStream.GetCompressedDataSize: Int64; begin if not FDataStarted then Result := FStream.Size - FStream.Position - SizeOf(FFooter) else if FDataEnded then Result := FCompressedDataSize else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.GetComputedDataCRC32: Cardinal; begin if FDataEnded then Result := FComputedDataCRC32 else raise EJclCompressionError.CreateRes(@RsCompressionGZipNotDecompressed); end; function TJclGZIPDecompressionStream.GetDosTime: TDateTime; begin Result := UnixTimeToDateTime(FHeader.ModifiedTime); end; function TJclGZIPDecompressionStream.GetFatSystem: TJclGZIPFatSystem; const ByteToFatSystem: array [JCL_GZIP_OS_FAT..JCL_GZIP_OS_ACORN] of TJclGZIPFatSystem = (gfsFat, gfsAmiga, gfsVMS, gfsUnix, gfsVM, gfsAtari, gfsHPFS, gfsMac, gfsZ, gfsCPM, gfsTOPS, gfsNTFS, gfsQDOS, gfsAcorn); begin case FHeader.OS of JCL_GZIP_OS_FAT..JCL_GZIP_OS_ACORN: Result := ByteToFatSystem[FHeader.OS]; JCL_GZIP_OS_UNKNOWN: Result := gfsUnknown; else Result := gfsOther; end; end; function TJclGZIPDecompressionStream.GetFlags: TJclGZIPFlags; begin Result := []; if (FHeader.Flags and JCL_GZIP_FLAG_TEXT) <> 0 then Result := Result + [gfDataIsText]; if (FHeader.Flags and JCL_GZIP_FLAG_CRC) <> 0 then Result := Result + [gfHeaderCRC16]; if (FHeader.Flags and JCL_GZIP_FLAG_EXTRA) <> 0 then Result := Result + [gfExtraField]; if (FHeader.Flags and JCL_GZIP_FLAG_NAME) <> 0 then Result := Result + [gfOriginalFileName]; if (FHeader.Flags and JCL_GZIP_FLAG_COMMENT) <> 0 then Result := Result + [gfComment]; end; function TJclGZIPDecompressionStream.GetOriginalDataSize: Cardinal; var StartPos: Int64; AFooter: TJclGZIPFooter; begin if not FDataStarted then begin StartPos := FStream.Position; try FStream.Seek(-SizeOf(AFooter), soEnd); AFooter.DataCRC32 := 0; AFooter.DataSize := 0; FStream.ReadBuffer(AFooter, SizeOf(AFooter)); Result := AFooter.DataSize; finally FStream.Seek(StartPos, soBeginning); end; end else if FDataEnded then Result := FFooter.DataSize else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.GetStoredDataCRC32: Cardinal; var StartPos: Int64; AFooter: TJclGZIPFooter; begin if not FDataStarted then begin StartPos := FStream.Position; try FStream.Seek(-SizeOf(AFooter), soEnd); AFooter.DataSize := 0; AFooter.DataCRC32 := 0; FStream.ReadBuffer(AFooter, SizeOf(AFooter)); Result := AFooter.DataCRC32; finally FStream.Seek(StartPos, soBeginning); end; end else if FDataEnded then Result := FFooter.DataCRC32 else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.Read(var Buffer; Count: Longint): Longint; begin if not Assigned(FZLibStream) then begin FCompressedDataStream := TJclDelegatedStream.Create; FCompressedDataStream.OnRead := ReadCompressedData; FZLibStream := TJclZLibDecompressStream.Create(FCompressedDataStream, -DEF_WBITS); FZLibStream.OnProgress := ZLibStreamProgress; end; Result := FZLibStream.Read(Buffer, Count); Inc(FDataSize, Result); FComputedDataCRC32 := crc32(FComputedDataCRC32, @Byte(Buffer), Result); if Result < Count then begin if not FDataEnded then // the decompressed stream is stopping before the compressed stream raise EJclCompressionError.CreateRes(@RsCompressionGZipInternalError); if AutoCheckDataCRC32 and (FComputedDataCRC32 <> FFooter.DataCRC32) then raise EJclCompressionError.CreateRes(@RsCompressionGZipDataCRCFailed); end; end; function TJclGZIPDecompressionStream.ReadCompressedData(Sender: TObject; var Buffer; Count: Longint): Longint; var BufferAddr: PAnsiChar; FooterAddr: PAnsiChar; begin if (Count = 0) or FDataEnded then begin Result := 0; Exit; end else if not FDataStarted then begin FDataStarted := True; // prolog if FStream.Read(FFooter, SizeOf(FFooter)) < SizeOf(FFooter) then raise EJclCompressionError.CreateRes(@RsCompressionGZipDataTruncated); end; BufferAddr := @Byte(Buffer); Move(FFooter, Buffer, SizeOf(FFooter)); Result := FStream.Read(BufferAddr[SizeOf(FFooter)], Count - SizeOf(FFooter)) + FStream.Read(FFooter, SizeOf(FFooter)); if Result < Count then begin FDataEnded := True; // epilog FooterAddr := @FFooter; if (Count - Result) < SizeOf(FFooter) then begin // the "real" footer is splitted in the data and the footer // shift the valid bytes of the footer to their place Move(FFooter, FooterAddr[Count - Result], SizeOf(FFooter) - Count + Result); // the missing bytes of the footer are located after the data Move(BufferAddr[Result], FFooter, Count - Result); end else // the "real" footer is located in the data Move(BufferAddr[Result], FFooter, SizeOf(FFooter)); end; Inc(FCompressedDataSize, Result); end; class function TJclGZIPDecompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZIPDecompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZIPDecompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; procedure TJclGZIPDecompressionStream.ZLibStreamProgress(Sender: TObject); begin Progress(Self); end; //=== { TJclBZLibCompressionStream } ========================================= { Error checking helper } function BZIP2LibCheck(const ErrCode: Integer): Integer; begin case ErrCode of 0..High(ErrCode): Result := ErrCode; // no error BZ_SEQUENCE_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2SequenceError); BZ_PARAM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2ParameterError); BZ_MEM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2MemoryError); BZ_DATA_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2DataError); BZ_DATA_ERROR_MAGIC: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2HeaderError); BZ_IO_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2IOError); BZ_UNEXPECTED_EOF: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2EOFError); BZ_OUTBUFF_FULL: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2OutBuffError); BZ_CONFIG_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2ConfigError); else raise EJclCompressionError.CreateResFmt(@RsCompressionBZIP2Error, [ErrCode]); end; end; constructor TJclBZIP2CompressionStream.Create(Destination: TStream; ACompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadBZip2; Assert(FBuffer <> nil); Assert(FBufferSize > 0); // Initialize ZLib StreamRecord BZLibRecord.bzalloc := nil; // Use build-in memory allocation functionality BZLibRecord.bzfree := nil; BZLibRecord.next_in := nil; BZLibRecord.avail_in := 0; BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; FDeflateInitialized := False; FCompressionLevel := ACompressionLevel; end; destructor TJclBZIP2CompressionStream.Destroy; begin Flush; if FDeflateInitialized then BZIP2LibCheck(BZ2_bzCompressEnd(BZLibRecord)); inherited Destroy; end; function TJclBZIP2CompressionStream.Flush: Integer; begin Result := 0; if FDeflateInitialized then begin BZLibRecord.next_in := nil; BZLibRecord.avail_in := 0; while (BZIP2LibCheck(BZ2_bzCompress(BZLibRecord, BZ_FINISH)) <> BZ_STREAM_END) and (BZLibRecord.avail_out = 0) do begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; Inc(Result, FBufferSize); end; if BZLibRecord.avail_out < FBufferSize then begin FStream.WriteBuffer(FBuffer^, FBufferSize - BZLibRecord.avail_out); Progress(Self); Inc(Result, FBufferSize - BZLibRecord.avail_out); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; end; end; end; function TJclBZIP2CompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := (BZLibRecord.total_in_hi32 shl 32) or BZLibRecord.total_in_lo32 else if (Offset = 0) and (Origin = soBeginning) and (BZLibRecord.total_in_lo32 = 0) then Result := 0 else Result := inherited Seek(Offset, Origin); end; procedure TJclBZIP2CompressionStream.SetCompressionLevel(const Value: Integer); begin if not FDeflateInitialized then FCompressionLevel := Value else raise EJclCompressionError.CreateRes(@RsCompressionBZIP2SequenceError); end; class function TJclBZIP2CompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZIP2CompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZIP2CompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; function TJclBZIP2CompressionStream.Write(const Buffer; Count: Longint): Longint; begin if not FDeflateInitialized then begin BZIP2LibCheck(BZ2_bzCompressInit(BZLibRecord, FCompressionLevel, 0, 0)); FDeflateInitialized := True; end; BZLibRecord.next_in := @Buffer; BZLibRecord.avail_in := Count; while BZLibRecord.avail_in > 0 do begin BZIP2LibCheck(BZ2_bzCompress(BZLibRecord, BZ_RUN)); if BZLibRecord.avail_out = 0 then // Output buffer empty. Write to stream and go on... begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; end; end; Result := Count; end; //=== { TJclBZip2DecompressionStream } ======================================= constructor TJclBZIP2DecompressionStream.Create(Source: TStream; AOwnsStream: Boolean); begin inherited Create(Source, AOwnsStream); LoadBZip2; // Initialize ZLib StreamRecord BZLibRecord.bzalloc := nil; // Use build-in memory allocation functionality BZLibRecord.bzfree := nil; BZLibRecord.opaque := nil; BZLibRecord.next_in := nil; BZLibRecord.state := nil; BZLibRecord.avail_in := 0; BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; FInflateInitialized := False; end; destructor TJclBZIP2DecompressionStream.Destroy; begin if FInflateInitialized then begin FStream.Seek(-BZLibRecord.avail_in, soCurrent); BZIP2LibCheck(BZ2_bzDecompressEnd(BZLibRecord)); end; inherited Destroy; end; function TJclBZIP2DecompressionStream.Read(var Buffer; Count: Longint): Longint; begin if not FInflateInitialized then begin BZIP2LibCheck(BZ2_bzDecompressInit(BZLibRecord, 0, 0)); FInflateInitialized := True; end; BZLibRecord.next_out := @Buffer; BZLibRecord.avail_out := Count; Result := 0; while Result < Count do // as long as we need data begin if BZLibRecord.avail_in = 0 then // no more compressed data begin BZLibRecord.avail_in := FStream.Read(FBuffer^, FBufferSize); if BZLibRecord.avail_in = 0 then Exit; BZLibRecord.next_in := FBuffer; end; if BZLibRecord.avail_in > 0 then begin BZIP2LibCheck(BZ2_bzDecompress(BZLibRecord)); Result := Count; Dec(Result, BZLibRecord.avail_out); end end; Result := Count; end; function TJclBZIP2DecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := (BZLibRecord.total_out_hi32 shl 32) or BZLibRecord.total_out_lo32 else Result := inherited Seek(Offset, Origin); end; class function TJclBZIP2DecompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZIP2DecompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZIP2DecompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; procedure InternalCompress(SourceStream: TStream; CompressStream: TJclCompressStream; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer); var SourceStreamSize, SourceStreamPosition: Int64; Buffer: Pointer; ReadBytes: Integer; EofFlag: Boolean; begin SourceStreamSize := SourceStream.Size; // source file size SourceStreamPosition := 0; GetMem(Buffer, JclDefaultBufferSize + 2); try // ZLibStream.CopyFrom(SourceStream, 0 ); // One line way to do it! may not // // be reliable idea to do this! also, // //no progress callbacks! EofFlag := False; while not EofFlag do begin if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStreamPosition, UserData); ReadBytes := SourceStream.Read(Buffer^, JclDefaultBufferSize); SourceStreamPosition := SourceStreamPosition + ReadBytes; CompressStream.WriteBuffer(Buffer^, ReadBytes); // short block indicates end of zlib stream EofFlag := ReadBytes < JclDefaultBufferSize; end; //CompressStream.Flush; (called by the destructor of compression streams finally FreeMem(Buffer); end; if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStreamPosition, UserData); end; procedure InternalDecompress(SourceStream, DestStream: TStream; DecompressStream: TJclDecompressStream; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer); var SourceStreamSize: Int64; Buffer: Pointer; ReadBytes: Integer; EofFlag: Boolean; begin SourceStreamSize := SourceStream.Size; // source file size GetMem(Buffer, JclDefaultBufferSize + 2); try // ZLibStream.CopyFrom(SourceStream, 0 ); // One line way to do it! may not // // be reliable idea to do this! also, // //no progress callbacks! EofFlag := False; while not EofFlag do begin if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStream.Position, UserData); ReadBytes := DecompressStream.Read(Buffer^, JclDefaultBufferSize); DestStream.WriteBuffer(Buffer^, ReadBytes); // short block indicates end of zlib stream EofFlag := ReadBytes < JclDefaultBufferSize; end; finally FreeMem(Buffer); end; if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStream.Position, UserData); end; { Compress to a .gz file - one liner - NEW MARCH 2007 } function GZipFile(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var GZipStream: TJclGZIPCompressionStream; DestStream: TFileStream; SourceStream: TFileStream; GZipStreamDateTime: TDateTime; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; GetFileLastWrite(SourceFile, GZipStreamDateTime); {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils try { create compressionstream third, and copy from source, through zlib compress layer, out through file stream} GZipStream := TJclGZIPCompressionStream.Create(DestStream, CompressionLevel); try GZipStream.DosTime := GZipStreamDateTime; InternalCompress(SourceStream, GZipStream, ProgressCallback, UserData); finally GZipStream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; { Decompress a .gz file } function UnGZipFile(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var GZipStream: TJclGZIPDecompressionStream; DestStream: TFileStream; SourceStream: TFileStream; GZipStreamDateTime: TDateTime; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils try { create decompressionstream third, and copy from source, through zlib decompress layer, out through file stream } GZipStream := TJclGZIPDecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestStream, GZipStream, ProgressCallback, UserData); GZipStreamDateTime := GZipStream.DosTime; finally GZipStream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); if Result and (GZipStreamDateTime <> 0) then // preserve datetime when unpacking! (see JclFileUtils) SetFileLastWrite(DestinationFile, GZipStreamDateTime); end; procedure GZipStream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var GZStream: TJclGZIPCompressionStream; begin GZStream := TJclGZIPCompressionStream.Create(DestinationStream, CompressionLevel); try InternalCompress(SourceStream, GZStream, ProgressCallback, UserData); finally GZStream.Free; end; end; procedure UnGZipStream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var GZipStream: TJclGZIPDecompressionStream; begin GZipStream := TJclGZIPDecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestinationStream, GZipStream, ProgressCallback, UserData); finally GZipStream.Free; end; end; { Compress to a .bz2 file - one liner } function BZip2File(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var BZip2Stream: TJclBZIP2CompressionStream; DestStream: TFileStream; SourceStream: TFileStream; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils try { create compressionstream third, and copy from source, through zlib compress layer, out through file stream} BZip2Stream := TJclBZIP2CompressionStream.Create(DestStream, CompressionLevel); try InternalCompress(SourceStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; { Decompress a .bzip2 file } function UnBZip2File(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var BZip2Stream: TJclBZIP2DecompressionStream; DestStream: TFileStream; SourceStream: TFileStream; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils try { create decompressionstream third, and copy from source, through zlib decompress layer, out through file stream } BZip2Stream := TJclBZIP2DecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var BZ2Stream: TJclBZIP2CompressionStream; begin BZ2Stream := TJclBZIP2CompressionStream.Create(DestinationStream, CompressionLevel); try InternalCompress(SourceStream, BZ2Stream, ProgressCallback, UserData); finally BZ2Stream.Free; end; end; procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var BZip2Stream: TJclBZIP2DecompressionStream; begin BZip2Stream := TJclBZIP2DecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestinationStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; end; {$ENDIF FPC} {$IFDEF MSWINDOWS} function OpenFileStream(const FileName: TFileName; StreamAccess: TJclStreamAccess): TStream; begin Result := nil; case StreamAccess of saCreate: Result := TFileStream.Create(FileName, fmCreate); saReadOnly: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); saReadOnlyDenyNone: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); saWriteOnly: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenWrite) else if FileName <> '' then Result := TFileStream.Create(FileName, fmCreate); saReadWrite: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenReadWrite) else if FileName <> '' then Result := TFileStream.Create(FileName, fmCreate); end; end; //=== { TJclCompressionItem } ================================================ constructor TJclCompressionItem.Create(AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; FPackedIndex := $FFFFFFFF; end; function TJclCompressionItem.DeleteOutputFile: Boolean; begin Result := (FFileName <> '') and FileExists(FFileName) and FileDelete(FFileName); end; destructor TJclCompressionItem.Destroy; begin ReleaseStream; inherited Destroy; end; function TJclCompressionItem.GetAttributes: Cardinal; begin CheckGetProperty(ipAttributes); Result := FAttributes; end; function TJclCompressionItem.GetComment: WideString; begin CheckGetProperty(ipComment); Result := FComment; end; function TJclCompressionItem.GetCRC: Cardinal; begin CheckGetProperty(ipCRC); Result := FCRC; end; function TJclCompressionItem.GetCreationTime: TFileTime; begin CheckGetProperty(ipCreationTime); Result := FCreationTime; end; function TJclCompressionItem.GetDirectory: Boolean; begin Result := (Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0; end; function TJclCompressionItem.GetEncrypted: Boolean; begin CheckGetProperty(ipEncrypted); Result := FEncrypted; end; function TJclCompressionItem.GetFileName: TFileName; begin CheckGetProperty(ipFileName); Result := FFileName; end; function TJclCompressionItem.GetFileSize: Int64; begin CheckGetProperty(ipFileSize); Result := FFileSize; end; function TJclCompressionItem.GetGroup: WideString; begin CheckGetProperty(ipGroup); Result := FGroup; end; function TJclCompressionItem.GetHostFS: WideString; begin CheckGetProperty(ipHostFS); Result := FHostFS; end; function TJclCompressionItem.GetHostOS: WideString; begin CheckGetProperty(ipHostOS); Result := FHostOS; end; function TJclCompressionItem.GetItemKind: TJclCompressionItemKind; begin if (Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then Result := ikDirectory else Result := ikFile; end; function TJclCompressionItem.GetLastAccessTime: TFileTime; begin CheckGetProperty(ipLastAccessTime); Result := FLastAccessTime; end; function TJclCompressionItem.GetLastWriteTime: TFileTime; begin CheckGetProperty(ipLastWriteTime); Result := FLastWriteTime; end; function TJclCompressionItem.GetMethod: WideString; begin CheckGetProperty(ipMethod); Result := FMethod; end; function TJclCompressionItem.GetNestedArchiveName: WideString; var ParentArchiveExtension, ArchiveFileName, ArchiveExtension: WideString; ExtensionMap: TStrings; begin if ipPackedName in ValidProperties then Result := PackedName else begin ArchiveFileName := ''; ArchiveExtension := ''; // find archive file name if Archive.VolumeCount > 0 then ArchiveFileName := WideExtractFileName(WideString(Archive.Volumes[0].FileName)); if (ArchiveFileName <> '') and (WideExtractFileExt(ArchiveFileName) = '.001') then ArchiveFileName := WideChangeFileExt(ArchiveFileName, ''); ParentArchiveExtension := WideExtractFileExt(ArchiveFileName); ArchiveFileName := WideChangeFileExt(ArchiveFileName, ''); // find item extension ArchiveExtension := WideExtractFileExt(ArchiveFileName); if ArchiveExtension <> '' then ArchiveFileName := WideChangeFileExt(ArchiveFileName, '') else if ipPackedExtension in ValidProperties then ArchiveExtension := PackedExtension else if ArchiveFileName <> '' then begin ExtensionMap := TStringList.Create; try ExtensionMap.Delimiter := ';'; ExtensionMap.DelimitedText := Archive.ArchiveSubExtensions; ArchiveExtension := ExtensionMap.Values[ParentArchiveExtension]; finally ExtensionMap.Free; end; end; // elaborate result if (ArchiveFileName = '') and (ArchiveExtension = '') then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty) else if ArchiveFileName = '' then Result := ArchiveExtension else Result := WideChangeFileExt(ArchiveFileName, ArchiveExtension); end; end; function TJclCompressionItem.GetNestedArchiveStream: TStream; begin raise EJclCompressionError.CreateRes(@RsCompressionNoNestedArchive); end; function TJclCompressionItem.GetPackedExtension: WideString; begin CheckGetProperty(ipPackedExtension); if FPackedName = '' then Result := FPackedExtension else Result := WideExtractFileExt(FPackedName); end; function TJclCompressionItem.GetPackedName: WideString; begin CheckGetProperty(ipPackedName); Result := FPackedName; end; function TJclCompressionItem.GetPackedSize: Int64; begin CheckGetProperty(ipPackedSize); Result := FPackedSize; end; function TJclCompressionItem.GetStream: TStream; var AItemAccess: TJclStreamAccess; begin if not Assigned(FStream) and (FileName <> '') then begin AItemAccess:= Archive.ItemAccess; if (AItemAccess = saReadOnly) and JclCompressSharedFiles then AItemAccess:= saReadOnlyDenyNone; FStream := OpenFileStream(FileName, AItemAccess); end; Result := FStream; end; function TJclCompressionItem.GetUser: WideString; begin CheckGetProperty(ipUser); Result := FUser; end; procedure TJclCompressionItem.ReleaseStream; begin if OwnsStream or (FileName <> '') then FreeAndNil(FStream); end; procedure TJclCompressionItem.SetAttributes(Value: Cardinal); begin CheckSetProperty(ipAttributes); FAttributes := Value; Include(FModifiedProperties, ipAttributes); Include(FValidProperties, ipAttributes); end; procedure TJclCompressionItem.SetComment(const Value: WideString); begin CheckSetProperty(ipComment); FComment := Value; Include(FModifiedProperties, ipComment); Include(FValidProperties, ipComment); end; procedure TJclCompressionItem.SetCRC(Value: Cardinal); begin CheckSetProperty(ipCRC); FCRC := Value; Include(FModifiedProperties, ipCRC); Include(FValidProperties, ipCRC); end; procedure TJclCompressionItem.SetCreationTime(const Value: TFileTime); begin CheckSetProperty(ipCreationTime); FCreationTime := Value; Include(FModifiedProperties, ipCreationTime); Include(FValidProperties, ipCreationTime); end; procedure TJclCompressionItem.SetDirectory(Value: Boolean); begin CheckSetProperty(ipAttributes); if Value then FAttributes := FAttributes or FILE_ATTRIBUTE_DIRECTORY else FAttributes := FAttributes and (not FILE_ATTRIBUTE_DIRECTORY); Include(FModifiedProperties, ipAttributes); Include(FValidProperties, ipAttributes); end; procedure TJclCompressionItem.SetEncrypted(Value: Boolean); begin CheckSetProperty(ipEncrypted); FEncrypted := Value; Include(FModifiedProperties, ipEncrypted); Include(FValidProperties, ipEncrypted); end; procedure TJclCompressionItem.SetFileName(const Value: TFileName); var AFindData: TWin32FindData; begin CheckSetProperty(ipFileName); FFileName := Value; if Value <> '' then begin Include(FModifiedProperties, ipFileName); Include(FValidProperties, ipFileName); end else begin Exclude(FModifiedProperties, ipFileName); Exclude(FValidProperties, ipFileName); end; if (Value <> '') and (FArchive is TJclCompressionArchive) and GetFileAttributesEx(PChar(Value), GetFileExInfoStandard, @AFindData) then begin FileSize := (Int64(AFindData.nFileSizeHigh) shl 32) or AFindData.nFileSizeLow; Attributes := AFindData.dwFileAttributes; CreationTime := AFindData.ftCreationTime; LastAccessTime := AFindData.ftLastAccessTime; LastWriteTime := AFindData.ftLastWriteTime; // TODO: user name and group (using file handle and GetSecurityInfo) {$IFDEF MSWINDOWS} HostOS := LoadResString(@RsCompression7zWindows); {$ENDIF MSWINDOWS} {$IFDEF UNIX} HostOS := LoadResString(@RsCompression7zUnix); {$ENDIF UNIX} end; end; procedure TJclCompressionItem.SetFileSize(const Value: Int64); begin CheckSetProperty(ipFileSize); FFileSize := Value; Include(FModifiedProperties, ipFileSize); Include(FValidProperties, ipFileSize); end; procedure TJclCompressionItem.SetGroup(const Value: WideString); begin CheckSetProperty(ipGroup); FGroup := Value; Include(FModifiedProperties, ipGroup); Include(FValidProperties, ipGroup); end; procedure TJclCompressionItem.SetHostFS(const Value: WideString); begin CheckSetProperty(ipHostFS); FHostFS := Value; Include(FModifiedProperties, ipHostFS); Include(FValidProperties, ipHostFS); end; procedure TJclCompressionItem.SetHostOS(const Value: WideString); begin CheckSetProperty(ipHostOS); FHostOS := Value; Include(FModifiedProperties, ipHostOS); Include(FValidProperties, ipHostOS); end; procedure TJclCompressionItem.SetLastAccessTime(const Value: TFileTime); begin CheckSetProperty(ipLastAccessTime); FLastAccessTime := Value; Include(FModifiedProperties, ipLastAccessTime); Include(FValidProperties, ipLastAccessTime); end; procedure TJclCompressionItem.SetLastWriteTime(const Value: TFileTime); begin CheckSetProperty(ipLastWriteTime); FLastWriteTime := Value; Include(FModifiedProperties, ipLastWriteTime); Include(FValidProperties, ipLastWriteTime); end; procedure TJclCompressionItem.SetMethod(const Value: WideString); begin CheckSetProperty(ipMethod); FMethod := Value; Include(FModifiedProperties, ipMethod); Include(FValidProperties, ipMethod); end; procedure TJclCompressionItem.SetPackedExtension(const Value: WideString); begin CheckSetProperty(ipPackedExtension); if (Value <> '') and (Value[1] <> '.') then // force heading '.' FPackedExtension := '.' + Value else FPackedExtension := Value; Include(FModifiedProperties, ipPackedExtension); Include(FValidProperties, ipPackedExtension); end; procedure TJclCompressionItem.SetPackedName(const Value: WideString); var PackedNamesIndex: Integer; begin if FPackedName <> Value then begin CheckSetProperty(ipPackedName); if FArchive is TJclCompressArchive then begin PackedNamesIndex := -1; if (TJclCompressArchive(FArchive).FPackedNames <> nil) and TJclCompressArchive(FArchive).FPackedNames.Find(FPackedName, PackedNamesIndex) then begin TJclCompressArchive(FArchive).FPackedNames.Delete(PackedNamesIndex); try TJclCompressArchive(FArchive).FPackedNames.Add(Value); except raise EJclCompressionError(Format(LoadResString(@RsCompressionDuplicate), [Value])); end; end; end; FPackedName := Value; Include(FModifiedProperties, ipPackedName); Include(FValidProperties, ipPackedName); end; end; procedure TJclCompressionItem.SetPackedSize(const Value: Int64); begin CheckSetProperty(ipPackedSize); FPackedSize := Value; Include(FModifiedProperties, ipPackedSize); Include(FValidProperties, ipPackedSize); end; procedure TJclCompressionItem.SetStream(const Value: TStream); begin CheckSetProperty(ipStream); ReleaseStream; FStream := Value; if Value <> nil then begin Include(FModifiedProperties, ipStream); Include(FValidProperties, ipStream); end else begin Exclude(FModifiedProperties, ipStream); Exclude(FValidProperties, ipStream); end; end; procedure TJclCompressionItem.SetUser(const Value: WideString); begin CheckSetProperty(ipUser); FUser := Value; Include(FModifiedProperties, ipUser); Include(FValidProperties, ipUser); end; function TJclCompressionItem.UpdateFileTimes: Boolean; const FILE_WRITE_ATTRIBUTES = $00000100; var FileHandle: HFILE; ACreationTime, ALastAccessTime, ALastWriteTime: PFileTime; begin ReleaseStream; Result := FFileName <> ''; if Result then begin FileHandle := CreateFile(PChar(FFileName), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0); try // creation time should be the oldest if ipCreationTime in FValidProperties then ACreationTime := @FCreationTime else if ipLastWriteTime in FValidProperties then ACreationTime := @FLastWriteTime else if ipLastAccessTime in FValidProperties then ACreationTime := @FLastAccessTime else ACreationTime := nil; // last access time may default to now if not set if ipLastAccessTime in FValidProperties then ALastAccessTime := @FLastAccessTime else ALastAccessTime := nil; // last write time may, if not set, be the creation time or last access time if ipLastWriteTime in FValidProperties then ALastWriteTime := @FLastWriteTime else if ipCreationTime in FValidProperties then ALastWriteTime := @FCreationTime else if ipLastAccessTime in FValidProperties then ALastWriteTime := @FLastAccessTime else ALastWriteTime := nil; Result := (FileHandle <> INVALID_HANDLE_VALUE) and SetFileTime(FileHandle, ACreationTime, ALastAccessTime, ALastWriteTime); finally CloseHandle(FileHandle); end; end; end; function TJclCompressionItem.ValidateExtraction(Index: Integer): Boolean; begin Result := False; end; function TJclCompressionItem.WideChangeFileExt(const AFileName, AExtension: WideString): WideString; var Index: Integer; begin Result := AFileName; // Unicode version of ChangeFileExt for Index := Length(Result) downto 1 do begin case Result[Index] of '.': begin Result := Copy(Result, 1, Index - 1) + AExtension; Exit; end; DirSeparator, DirDelimiter: // no extension Break; end; end; Result := Result + AExtension; end; function TJclCompressionItem.WideExtractFileExt( const AFileName: WideString): WideString; var Index: Integer; begin Result := ''; // Unicode version of ExtractFileExt for Index := Length(AFileName) downto 1 do begin case AFileName[Index] of '.': begin Result := Copy(AFileName, Index, Length(AFileName) - Index + 1); Break; end; DirSeparator, DirDelimiter: // no extension Break; end; end; end; function TJclCompressionItem.WideExtractFileName( const AFileName: WideString): WideString; var Index: Integer; begin Result := AFileName; // Unicode version of ExtractFileName for Index := Length(AFileName) downto 1 do begin case AFileName[Index] of DirSeparator, DirDelimiter: begin Result := Copy(AFileName, Index + 1, Length(AFileName) - Index); Break; end; end; end; end; //=== { TJclCompressionArchiveFormats } ====================================== constructor TJclCompressionArchiveFormats.Create; begin inherited Create; FCompressFormats := TList.Create; FDecompressFormats := TList.Create; FUpdateFormats := TList.Create; // register compression archives RegisterFormat(TJclZipCompressArchive); RegisterFormat(TJclBZ2CompressArchive); RegisterFormat(TJcl7zCompressArchive); RegisterFormat(TJclTarCompressArchive); RegisterFormat(TJclGZipCompressArchive); RegisterFormat(TJclXzCompressArchive); RegisterFormat(TJclSwfcCompressArchive); RegisterFormat(TJclWimCompressArchive); // register decompression archives RegisterFormat(TJclZipDecompressArchive); RegisterFormat(TJclBZ2DecompressArchive); RegisterFormat(TJclRarDecompressArchive); RegisterFormat(TJclArjDecompressArchive); RegisterFormat(TJclZDecompressArchive); RegisterFormat(TJclLzhDecompressArchive); RegisterFormat(TJcl7zDecompressArchive); RegisterFormat(TJclCabDecompressArchive); RegisterFormat(TJclNsisDecompressArchive); RegisterFormat(TJclLzmaDecompressArchive); RegisterFormat(TJclLzma86DecompressArchive); RegisterFormat(TJclPeDecompressArchive); RegisterFormat(TJclElfDecompressArchive); RegisterFormat(TJclMachoDecompressArchive); RegisterFormat(TJclUdfDecompressArchive); RegisterFormat(TJclXarDecompressArchive); RegisterFormat(TJclMubDecompressArchive); RegisterFormat(TJclHfsDecompressArchive); RegisterFormat(TJclDmgDecompressArchive); RegisterFormat(TJclCompoundDecompressArchive); RegisterFormat(TJclWimDecompressArchive); RegisterFormat(TJclIsoDecompressArchive); RegisterFormat(TJclChmDecompressArchive); RegisterFormat(TJclSplitDecompressArchive); RegisterFormat(TJclRpmDecompressArchive); RegisterFormat(TJclDebDecompressArchive); RegisterFormat(TJclCpioDecompressArchive); RegisterFormat(TJclTarDecompressArchive); RegisterFormat(TJclGZipDecompressArchive); RegisterFormat(TJclNtfsDecompressArchive); RegisterFormat(TJclFatDecompressArchive); RegisterFormat(TJclMbrDecompressArchive); RegisterFormat(TJclVhdDecompressArchive); RegisterFormat(TJclMslzDecompressArchive); RegisterFormat(TJclFlvDecompressArchive); RegisterFormat(TJclSwfDecompressArchive); RegisterFormat(TJclSwfcDecompressArchive); RegisterFormat(TJclAPMDecompressArchive); RegisterFormat(TJclPpmdDecompressArchive); RegisterFormat(TJclTEDecompressArchive); RegisterFormat(TJclUEFIcDecompressArchive); RegisterFormat(TJclUEFIsDecompressArchive); RegisterFormat(TJclSquashFSDecompressArchive); RegisterFormat(TJclCramFSDecompressArchive); // register update archives RegisterFormat(TJclZipUpdateArchive); RegisterFormat(TJclBZ2UpdateArchive); RegisterFormat(TJcl7zUpdateArchive); RegisterFormat(TJclTarUpdateArchive); RegisterFormat(TJclGZipUpdateArchive); RegisterFormat(TJclSwfcUpdateArchive); end; destructor TJclCompressionArchiveFormats.Destroy; begin FCompressFormats.Free; FDecompressFormats.Free; FUpdateFormats.Free; inherited Destroy; end; function TJclCompressionArchiveFormats.FindCompressFormat(const AFileName: TFileName): TJclCompressArchiveClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressArchiveClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionArchiveFormats.FindCompressFormats( const AFileName: TFileName): TJclCompressArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; {function TJclCompressionArchiveFormats.FindDecompressFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclDecompressArchiveClass; var MatchingFormats: TJclDecompressArchiveClassArray; Index: Integer; ArchiveStream: TStream; Buffer: TDynByteArray; begin SetLength(Buffer, 0); // enumerate formats based on filename MatchingFormats := FindDecompressFormats(AFileName); if (Length(MatchingFormats) >= 1) and (not TestArchiveSignature) then begin Result := MatchingFormats[0]; Exit; end else Result := nil; // load archive to test signature ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone); try for Index := Low(MatchingFormats) to High(MatchingFormats) do if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then begin Result := MatchingFormats[Index]; Exit; end; finally ArchiveStream.Free; end; end;} function TJclCompressionArchiveFormats.FindDecompressFormat(const AFileName: TFileName): TJclDecompressArchiveClass; var MatchingFormats: TJclDecompressArchiveClassArray; begin // enumerate formats based on filename MatchingFormats := FindDecompressFormats(AFileName); if Length(MatchingFormats) >= 1 then begin Result := MatchingFormats[0]; Exit; end else Result := nil; end; function TJclCompressionArchiveFormats.FindDecompressFormats( const AFileName: TFileName): TJclDecompressArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclDecompressArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to DecompressFormatCount - 1 do begin AFormat := DecompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; {function TJclCompressionArchiveFormats.FindUpdateFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclUpdateArchiveClass; var MatchingFormats: TJclUpdateArchiveClassArray; Index: Integer; ArchiveStream: TStream; Buffer: TDynByteArray; begin SetLength(Buffer, 0); // enumerate formats based on filename MatchingFormats := FindUpdateFormats(AFileName); if (Length(MatchingFormats) >= 1) and (not TestArchiveSignature) then begin Result := MatchingFormats[0]; Exit; end else Result := nil; // load archive to test signature ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone); try for Index := Low(MatchingFormats) to High(MatchingFormats) do if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then begin Result := MatchingFormats[Index]; Exit; end; finally ArchiveStream.Free; end; end;} function TJclCompressionArchiveFormats.FindUpdateFormat(const AFileName: TFileName): TJclUpdateArchiveClass; var MatchingFormats: TJclUpdateArchiveClassArray; begin // enumerate formats based on filename MatchingFormats := FindUpdateFormats(AFileName); if Length(MatchingFormats) >= 1 then begin Result := MatchingFormats[0]; Exit; end else Result := nil; end; function TJclCompressionArchiveFormats.FindUpdateFormats( const AFileName: TFileName): TJclUpdateArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclUpdateArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to UpdateFormatCount - 1 do begin AFormat := UpdateFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; function TJclCompressionArchiveFormats.GetCompressFormat(Index: Integer): TJclCompressArchiveClass; begin Result := TJclCompressArchiveClass(FCompressFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetCompressFormatCount: Integer; begin Result := FCompressFormats.Count; end; function TJclCompressionArchiveFormats.GetDecompressFormat(Index: Integer): TJclDecompressArchiveClass; begin Result := TJclDecompressArchiveClass(FDecompressFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetDecompressFormatCount: Integer; begin Result := FDecompressFormats.Count; end; function TJclCompressionArchiveFormats.GetUpdateFormat(Index: Integer): TJclUpdateArchiveClass; begin Result := TJclUpdateArchiveClass(FUpdateFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetUpdateFormatCount: Integer; begin Result := FUpdateFormats.Count; end; procedure TJclCompressionArchiveFormats.RegisterFormat(AClass: TJclCompressionArchiveClass); begin if AClass.InheritsFrom(TJclUpdateArchive) then FUpdateFormats.Add(AClass) else if AClass.InheritsFrom(TJclDecompressArchive) then FDecompressFormats.Add(AClass) else if AClass.InheritsFrom(TJclCompressArchive) then FCompressFormats.Add(AClass); end; {function TJclCompressionArchiveFormats.SignatureMatches( Format: TJclCompressionArchiveClass; ArchiveStream: TStream; var Buffer: TDynByteArray): Boolean; var Index, StartPos, EndPos: Integer; Signature: TDynByteArray; begin // must match empty signatures Result := True; Signature := Format.ArchiveSignature; // fill buffer if needed StartPos := Length(Buffer); // High(Buffer) + 1 EndPos := Length(Signature); if StartPos < EndPos then begin SetLength(Buffer, EndPos); for Index := StartPos to EndPos - 1 do ArchiveStream.ReadBuffer(Buffer[Index], SizeOf(Buffer[Index])); end; // compare buffer and signature for Index := 0 to EndPos - 1 do if Buffer[Index] <> Signature[Index] then begin Result := False; Break; end; end;} procedure TJclCompressionArchiveFormats.UnregisterFormat(AClass: TJclCompressionArchiveClass); begin if AClass.InheritsFrom(TJclUpdateArchive) then FUpdateFormats.Remove(AClass) else if AClass.InheritsFrom(TJclDecompressArchive) then FDecompressFormats.Remove(AClass) else if AClass.InheritsFrom(TJclCompressArchive) then FCompressFormats.Remove(AClass); end; function GetArchiveFormats: TJclCompressionArchiveFormats; begin if not Assigned(GlobalArchiveFormats) then GlobalArchiveFormats := TJclCompressionArchiveFormats.Create; Result := TJclCompressionArchiveFormats(GlobalArchiveFormats); end; //=== { TJclCompressionVolume } ============================================== constructor TJclCompressionVolume.Create(AStream, ATmpStream: TStream; AOwnsStream, AOwnsTmpStream: Boolean; AFileName, ATmpFileName: TFileName; AVolumeMaxSize: Int64); begin inherited Create; FStream := AStream; FTmpStream := ATmpStream; FOwnsStream := AOwnsStream; FOwnsTmpStream := AOwnsTmpStream; FFileName := AFileName; FTmpFileName := ATmpFileName; FVolumeMaxSize := AVolumeMaxSize; end; destructor TJclCompressionVolume.Destroy; begin ReleaseStreams; inherited Destroy; end; procedure TJclCompressionVolume.ReleaseStreams; begin if OwnsStream then FreeAndNil(FStream); if OwnsTmpStream then FreeAndNil(FTmpStream); end; //=== { TJclCompressionArchive } ============================================= constructor TJclCompressionArchive.Create(Volume0: TStream; AVolumeMaxSize: Int64 = 0; AOwnVolume: Boolean = False); begin inherited Create; FVolumeIndex := -1; FVolumeIndexOffset := 1; FVolumeMaxSize := AVolumeMaxSize; FItems := TObjectList.Create(True); FVolumes := TObjectList.Create(True); if Assigned(Volume0) then AddVolume(Volume0, AVolumeMaxSize, AOwnVolume); InitializeArchiveProperties; end; constructor TJclCompressionArchive.Create(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0; VolumeMask: Boolean = False); begin inherited Create; FVolumeIndex := -1; FVolumeIndexOffset := 1; FVolumeMaxSize := AVolumeMaxSize; FItems := TObjectList.Create(True); FVolumes := TObjectList.Create(True); if VolumeMask then FVolumeFileNameMask := VolumeFileName else AddVolume(VolumeFileName, AVolumeMaxSize); InitializeArchiveProperties; end; destructor TJclCompressionArchive.Destroy; begin FItems.Free; FVolumes.Free; inherited Destroy; end; function TJclCompressionArchive.AddVolume(VolumeStream: TStream; AVolumeMaxSize: Int64; AOwnsStream: Boolean): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(VolumeStream, nil, AOwnsStream, True, '', '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(VolumeStream, TmpVolumeStream: TStream; AVolumeMaxSize: Int64; AOwnsStream, AOwnsTmpStream: Boolean): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(VolumeStream, TmpVolumeStream, AOwnsStream, AOwnsTmpStream, '', '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(const VolumeFileName: TFileName; AVolumeMaxSize: Int64): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, VolumeFileName, '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(const VolumeFileName, TmpVolumeFileName: TFileName; AVolumeMaxSize: Int64): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, VolumeFileName, TmpVolumeFileName, AVolumeMaxSize)); end; class function TJclCompressionArchive.ArchiveExtensions: string; begin Result := ''; end; class function TJclCompressionArchive.ArchiveName: string; begin Result := ''; end; class function TJclCompressionArchive.ArchiveSignature: TDynByteArray; begin SetLength(Result, 0); end; class function TJclCompressionArchive.ArchiveSubExtensions: string; begin Result := ''; end; procedure TJclCompressionArchive.CheckOperationSuccess; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do begin case TJclCompressionItem(FItems.Items[Index]).OperationSuccess of osNoOperation: ; osOK: ; osUnsupportedMethod: raise EJclCompressionError.CreateRes(@RsCompressionUnsupportedMethod); osDataError: raise EJclCompressionError.CreateRes(@RsCompressionDataError); osCRCError: raise EJclCompressionError.CreateRes(@RsCompressionCRCError); else raise EJclCompressionError.CreateRes(@RsCompressionUnknownError); end; end; end; procedure TJclCompressionArchive.ClearItems; begin FItems.Clear; end; procedure TJclCompressionArchive.ClearOperationSuccess; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).OperationSuccess := osNoOperation; end; procedure TJclCompressionArchive.ClearVolumes; begin FVolumes.Clear; end; procedure TJclCompressionArchive.InitializeArchiveProperties; begin // override to customize end; function TJclCompressionArchive.DoProgress(const Value, MaxValue: Int64): Boolean; begin if Assigned(FOnProgress) then FOnProgress(Self, Value, MaxValue); Result := not FCancelCurrentOperation; end; function TJclCompressionArchive.DoRatio(const InSize, OutSize: Int64): Boolean; begin if Assigned(FOnRatio) then FOnRatio(Self, InSize, OutSize); Result := not FCancelCurrentOperation; end; function TJclCompressionArchive.GetItem(Index: Integer): TJclCompressionItem; begin Result := TJclCompressionItem(FItems.Items[Index]); end; function TJclCompressionArchive.GetItemCount: Integer; begin Result := FItems.Count; end; function TJclCompressionArchive.GetSupportsNestedArchive: Boolean; begin Result := False; end; function TJclCompressionArchive.GetVolume(Index: Integer): TJclCompressionVolume; begin Result := TJclCompressionVolume(FVolumes.Items[Index]); end; function TJclCompressionArchive.GetVolumeCount: Integer; begin Result := FVolumes.Count; end; function TJclCompressionArchive.InternalOpenStream( const FileName: TFileName): TStream; begin Result := OpenFileStream(FileName, VolumeAccess); end; function TJclCompressionArchive.ItemAccess: TJclStreamAccess; begin Result := saReadOnly; end; class function TJclCompressionArchive.MultipleItemContainer: Boolean; begin Result := True; end; function TJclCompressionArchive.NeedStream(Index: Integer): TStream; var AVolume: TJclCompressionVolume; AOwnsStream: Boolean; AFileName: TFileName; begin Result := nil; if Index <> FVolumeIndex then begin AOwnsStream := VolumeFileNameMask <> ''; AVolume := nil; AFileName := Format(VolumeFileNameMask, [Index + VolumeIndexOffset]); if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.Stream; AOwnsStream := AVolume.OwnsStream; AFileName := AVolume.FileName; end; if Assigned(FOnVolume) then FOnVolume(Self, Index, AFileName, Result, AOwnsStream); if Assigned(AVolume) then begin if not Assigned(Result) then Result := InternalOpenStream(AFileName); AVolume.FFileName := AFileName; AVolume.FStream := Result; AVolume.FOwnsStream := AOwnsStream; end else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if not Assigned(Result) then Result := InternalOpenStream(AFileName); if Assigned(Result) then begin if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FFileName := AFileName; AVolume.FStream := Result; AVolume.FOwnsStream := AOwnsStream; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(Result, nil, AOwnsStream, True, AFileName, '', FVolumeMaxSize)); end; end; FVolumeIndex := Index; end else if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.Stream; if Assigned(Result) then Result.Seek(0, soBeginning); end else FVolumeIndex := Index; end; function TJclCompressionArchive.NeedStreamMaxSize(Index: Integer): Int64; var AVolume: TJclCompressionVolume; begin if (Index <> FVolumeIndex) then begin AVolume := nil; if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); FVolumeMaxSize := AVolume.VolumeMaxSize; end; if Assigned(FOnVolumeMaxSize) then FOnVolumeMaxSize(Self, Index, FVolumeMaxSize); if Assigned(AVolume) then AVolume.FVolumeMaxSize := FVolumeMaxSize else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FFileName := Format(VolumeFileNameMask, [Index + VolumeIndexOffset]); AVolume.FStream := nil; AVolume.FOwnsStream := True; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); end; end; Result := FVolumeMaxSize; end; procedure TJclCompressionArchive.ReleaseVolumes; var Index: Integer; begin for Index := 0 to FVolumes.Count - 1 do TJclCompressionVolume(FVolumes.Items[Index]).ReleaseStreams; end; procedure TJclCompressionArchive.SelectAll; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).Selected := True; end; function TJclCompressionArchive.TranslateItemPath(const ItemPath, OldBase, NewBase: WideString): WideString; begin Result := PathCanonicalize(PathAddSeparator(NewBase) + PathGetRelativePath(OldBase, ItemPath)); end; procedure TJclCompressionArchive.UnselectAll; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).Selected := False; end; class function TJclCompressionArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; function TJclCompressionArchive._AddRef: Integer; begin Result := -1; end; function TJclCompressionArchive._Release: Integer; begin Result := -1; end; //=== { TJclCompressItem } =================================================== procedure TJclCompressItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // always valid end; procedure TJclCompressItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin if AProperty in [ipMethod] then raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); (Archive as TJclCompressArchive).CheckNotCompressing; end; //=== { TJclCompressArchive } ================================================ destructor TJclCompressArchive.Destroy; begin FPackedNames.Free; inherited Destroy; end; function TJclCompressArchive.AddDirectory(const PackedName: WideString; const DirName: string; RecurseIntoDir: Boolean; AddFilesInDir: Boolean): Integer; var AItem: TJclCompressionItem; begin CheckNotCompressing; if DirName <> '' then begin FBaseRelName := PackedName; FBaseDirName := PathRemoveSeparator(DirName); FAddFilesInDir := AddFilesInDir; if RecurseIntoDir then begin Result := FItems.Count; EnumDirectories(DirName, InternalAddDirectory, True, '', nil); Exit; end; end; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.FileName := DirName; except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); if (DirName <> '') and AddFilesInDir then EnumFiles(PathAddSeparator(DirName) + '*', InternalAddFile, faDirectory); end; function TJclCompressArchive.AddFile(const PackedName: WideString; const FileName: TFileName): Integer; var AItem: TJclCompressionItem; begin CheckNotCompressing; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.FileName := FileName; except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.AddFile(const PackedName: WideString; AStream: TStream; AOwnsStream: Boolean): Integer; var AItem: TJclCompressionItem; NowFileTime: TFileTime; begin CheckNotCompressing; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.Stream := AStream; AItem.OwnsStream := AOwnsStream; AItem.FileSize := AStream.Size - AStream.Position; NowFileTime := LocalDateTimeToFileTime(Now); AItem.Attributes := faReadOnly and faArchive; AItem.CreationTime := NowFileTime; AItem.LastAccessTime := NowFileTime; AItem.LastWriteTime := NowFileTime; {$IFDEF MSWINDOWS} AItem.HostOS := LoadResString(@RsCompression7zWindows); {$ENDIF MSWINDOWS} {$IFDEF UNIX} AItem.HostOS := LoadResString(@RsCompression7zUnix); {$ENDIF UNIX} except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.AddFileCheckDuplicate(NewItem: TJclCompressionItem): Integer; var I, PackedNamesIndex: Integer; S: string; begin if FDuplicateCheck = dcNone then Result := FItems.Add(NewItem) else begin if FPackedNames = nil then begin FPackedNames := TJclWideStringList.Create; FPackedNames.Sorted := True; {$IFDEF UNIX} FPackedNames.CaseSensitive := True; {$ELSE ~UNIX} FPackedNames.CaseSensitive := False; {$ENDIF ~UNIX} FPackedNames.Duplicates := dupIgnore; for I := ItemCount - 1 downto 0 do FPackedNames.AddObject(Items[I].PackedName, Items[I]); FPackedNames.Duplicates := dupError; end; if DuplicateCheck = dcAll then begin try PackedNamesIndex := -1; FPackedNames.AddObject(NewItem.PackedName, NewItem); Result := FItems.Add(NewItem); except Result := -1; end; end else if FPackedNames.Find(NewItem.PackedName, PackedNamesIndex) then Result := -1 else Result := FItems.Add(NewItem); if Result < 0 then begin case DuplicateAction of daOverwrite: begin if PackedNamesIndex < 0 then PackedNamesIndex := FPackedNames.IndexOf(NewItem.PackedName); FItems.Remove(FPackedNames.Objects[PackedNamesIndex]); Result := FItems.Add(NewItem); if DuplicateCheck = dcAll then FPackedNames.Objects[PackedNamesIndex] := NewItem else FPackedNames.Delete(PackedNamesIndex); end; daError: begin S := Format(LoadResString(@RsCompressionDuplicate), [NewItem.PackedName]); NewItem.Free; raise EJclCompressionError.Create(S); end; daSkip: begin NewItem.Free; Result := -1; end; end end; end; end; procedure TJclCompressArchive.CheckNotCompressing; begin if FCompressing then raise EJclCompressionError.CreateRes(@RsCompressionCompressingError); end; procedure TJclCompressArchive.Compress; begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclCompressArchive.InternalAddDirectory(const Directory: string); begin AddDirectory(TranslateItemPath(Directory, FBaseDirName, FBaseRelName), Directory, False, FAddFilesInDir); end; procedure TJclCompressArchive.InternalAddFile(const Directory: string; const FileInfo: TSearchRec); var AFileName: TFileName; AItem: TJclCompressionItem; begin AFileName := PathAddSeparator(Directory) + FileInfo.Name; AItem := GetItemClass.Create(Self); try AItem.PackedName := TranslateItemPath(AFileName, FBaseDirName, FBaseRelName); AItem.FileName := AFileName; except AItem.Destroy; raise; end; AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.ItemAccess: TJclStreamAccess; begin Result := saReadOnly; end; class function TJclCompressArchive.VolumeAccess: TJclStreamAccess; begin Result := saWriteOnly; end; //=== { TJclDecompressItem } ================================================= procedure TJclDecompressItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // TODO end; procedure TJclDecompressItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin (Archive as TJclDecompressArchive).CheckNotDecompressing; end; function TJclDecompressItem.ValidateExtraction(Index: Integer): Boolean; begin Result := (FArchive as TJclDecompressArchive).ValidateExtraction(Index, FFileName, FStream, FOwnsStream); end; //=== { TJclDecompressArchive } ============================================== procedure TJclDecompressArchive.CheckListing; begin if not FListing then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclDecompressArchive.CheckNotDecompressing; begin if FDecompressing then raise EJclCompressionError.CreateRes(@RsCompressionDecompressingError); end; procedure TJclDecompressArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclDecompressArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; function TJclDecompressArchive.ItemAccess: TJclStreamAccess; begin Result := saCreate; end; function TJclDecompressArchive.ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; var AItem: TJclCompressionItem; PackedName: TFileName; begin if FExtractingAllIndex <> -1 then // extracting all FExtractingAllIndex := Index; AItem := Items[Index]; if (FileName = '') and not Assigned(AStream) then begin PackedName := AItem.PackedName; if PackedName = '' then PackedName := ChangeFileExt(ExtractFileName(Volumes[0].FileName), AItem.PackedExtension); FileName := PathGetRelativePath(FDestinationDir, PackedName); end; Result := True; if Assigned(FOnExtract) then Result := FOnExtract(Self, Index, FileName, AStream, AOwnsStream); if Result and not Assigned(AStream) and AutoCreateSubDir then begin if (AItem.Attributes and faDirectory) <> 0 then ForceDirectories(FileName) else ForceDirectories(ExtractFilePath(FileName)); end; end; class function TJclDecompressArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; //=== { TJclUpdateItem } ===================================================== procedure TJclUpdateItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // TODO end; procedure TJclUpdateItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin (Archive as TJclCompressArchive).CheckNotCompressing; end; function TJclUpdateItem.ValidateExtraction(Index: Integer): Boolean; begin Result := (Archive as TJclUpdateArchive).ValidateExtraction(Index, FFileName, FStream, FOwnsStream); end; //=== { TJclUpdateArchive } ================================================== procedure TJclUpdateArchive.CheckListing; begin if not FListing then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclUpdateArchive.CheckNotDecompressing; begin if FDecompressing then raise EJclCompressionError.CreateRes(@RsCompressionDecompressingError); end; procedure TJclUpdateArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclUpdateArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FDuplicateCheck := dcExisting; end; function TJclUpdateArchive.ItemAccess: TJclStreamAccess; begin if FDecompressing then Result := saCreate else Result := saReadOnly; end; function TJclUpdateArchive.ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; var AItem: TJclCompressionItem; PackedName: TFileName; begin if FExtractingAllIndex <> -1 then // extracting all FExtractingAllIndex := Index; AItem := Items[Index]; if (FileName = '') and not Assigned(AStream) then begin PackedName := AItem.PackedName; if PackedName = '' then PackedName := ChangeFileExt(ExtractFileName(Volumes[0].FileName), AItem.PackedExtension); FileName := PathGetRelativePath(FDestinationDir, PackedName); end; Result := True; if Assigned(FOnExtract) then Result := FOnExtract(Self, Index, FileName, AStream, AOwnsStream); if Result and not Assigned(AStream) and AutoCreateSubDir then begin if (AItem.Attributes and faDirectory) <> 0 then ForceDirectories(FileName) else ForceDirectories(ExtractFilePath(FileName)); end; end; class function TJclUpdateArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; //=== { TJclOutOfPlaceUpdateArchive } ======================================== procedure TJclOutOfPlaceUpdateArchive.Compress; var Index: Integer; AVolume: TJclCompressionVolume; SrcFileName, DestFileName: TFileName; SrcStream, DestStream: TStream; OwnsSrcStream, OwnsDestStream, AllHandled, Handled: Boolean; CopiedSize: Int64; begin // release volume streams and other finalization inherited Compress; if ReplaceVolumes then begin AllHandled := True; // replace streams by tmp streams for Index := 0 to FVolumes.Count - 1 do begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); SrcFileName := AVolume.TmpFileName; DestFileName := AVolume.FileName; SrcStream := AVolume.TmpStream; DestStream := AVolume.Stream; OwnsSrcStream := AVolume.OwnsTmpStream; OwnsDestStream := AVolume.OwnsStream; Handled := Assigned(FOnReplace) and FOnReplace(Self, SrcFileName, DestFileName, SrcStream, DestStream, OwnsSrcStream, OwnsDestStream); if not Handled then begin if (SrcFileName <> '') and (DestFileName <> '') and (OwnsSrcStream or not Assigned(SrcStream)) and (OwnsDestStream or not Assigned(DestStream)) then begin // close references before moving files if OwnsSrcStream then FreeAndNil(SrcStream); if OwnsDestStream then FreeAndNil(DestStream); Handled := FileMove(SrcFileName, DestFileName, True); end else if (SrcFileName = '') and (DestFileName = '') and Assigned(SrcStream) and Assigned(DestStream) then begin // in-memory moves SrcStream.Seek(0, soBeginning); DestStream.Seek(0, soBeginning); CopiedSize := StreamCopy(SrcStream, DestStream); // reset size DestStream.Size := CopiedSize; Handled := True; end; // identity // else // Handled := False; end; // update volume information AVolume.FTmpStream := SrcStream; AVolume.FStream := DestStream; AVolume.FOwnsTmpStream := OwnsSrcStream; AVolume.FOwnsStream := OwnsDestStream; AVolume.FTmpFileName := SrcFileName; AVolume.FFileName := DestFileName; AllHandled := AllHandled and Handled; end; if not AllHandled then raise EJclCompressionError.CreateRes(@RsCompressionReplaceError); end else begin // Remove temporary files for Index := 0 to FVolumes.Count - 1 do begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); if AVolume.OwnsTmpStream then begin FreeAndNil(AVolume.FTmpStream); FileDelete(AVolume.TmpFileName); end; end; end; end; procedure TJclOutOfPlaceUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FReplaceVolumes := True; FTmpVolumeIndex := -1; end; function TJclOutOfPlaceUpdateArchive.InternalOpenTmpStream( const FileName: TFileName): TStream; begin Result := OpenFileStream(FileName, TmpVolumeAccess); end; function TJclOutOfPlaceUpdateArchive.NeedTmpStream(Index: Integer): TStream; var AVolume: TJclCompressionVolume; AOwnsStream: Boolean; AFileName: TFileName; begin Result := nil; if Index <> FTmpVolumeIndex then begin AOwnsStream := VolumeFileNameMask <> ''; AVolume := nil; if VolumeFileNameMask = '' then AFileName := '' else AFileName := FindUnusedFileName(Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '.tmp'); if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.TmpStream; AOwnsStream := AVolume.OwnsTmpStream; AFileName := AVolume.TmpFileName; if (AFileName = '') and (AVolume.FileName <> '') then AFileName := FindUnusedFileName(AVolume.FileName, '.tmp'); end; if Assigned(FOnTmpVolume) then FOnTmpVolume(Self, Index, AFileName, Result, AOwnsStream); if Assigned(AVolume) then begin if not Assigned(Result) then Result := InternalOpenTmpStream(AFileName); AVolume.FTmpFileName := AFileName; AVolume.FTmpStream := Result; AVolume.FOwnsTmpStream := AOwnsStream; end else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if not Assigned(Result) then Result := InternalOpenTmpStream(AFileName); if Assigned(Result) then begin if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FTmpFileName := AFileName; AVolume.FTmpStream := Result; AVolume.FOwnsTmpStream := AOwnsStream; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(nil, Result, True, AOwnsStream, '', AFileName, FVolumeMaxSize)); end; end; FTmpVolumeIndex := Index; end else if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.TmpStream; if Assigned(Result) then Result.Seek(0, soBeginning); end else FTmpVolumeIndex := Index; end; class function TJclOutOfPlaceUpdateArchive.TmpVolumeAccess: TJclStreamAccess; begin Result := saWriteOnly; end; //=== { TJclSevenzipOutStream } ============================================== constructor TJclSevenzipOutStream.Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); begin inherited Create; FArchive := AArchive; FItemIndex := AItemIndex; FStream := nil; FOwnsStream := False; FMaximumPosition := 0; FTruncateOnRelease := False; NeedStream; end; constructor TJclSevenzipOutStream.Create(AStream: TStream; AOwnsStream: Boolean; ATruncateOnRelease: Boolean); begin inherited Create; FArchive := nil; FItemIndex := -1; FStream := AStream; FOwnsStream := AOwnsStream; FMaximumPosition := 0; FTruncateOnRelease := ATruncateOnRelease; end; destructor TJclSevenzipOutStream.Destroy; begin ReleaseStream; inherited Destroy; end; procedure TJclSevenzipOutStream.NeedStream; begin if Assigned(FArchive) then begin FArchive.FCurrentItemIndex := FItemIndex; if not Assigned(FStream) then FStream := FArchive.Items[FItemIndex].Stream; end; end; procedure TJclSevenzipOutStream.ReleaseStream; begin // truncate to the maximum position that was written if FTruncateOnRelease then FStream.Size := FMaximumPosition; if Assigned(FArchive) then FArchive.Items[FItemIndex].ReleaseStream else if FOwnsStream then FStream.Free; end; function TJclSevenzipOutStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; var NewPos: Int64; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(Offset, TSeekOrigin(SeekOrigin)); if Assigned(NewPosition) then NewPosition^ := NewPos; end else Result := S_FALSE; end; function TJclSevenzipOutStream.SetSize(NewSize: Int64): HRESULT; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; FStream.Size := NewSize; if FTruncateOnRelease and (FMaximumPosition < NewSize) then FMaximumPosition := NewSize; end else Result := S_FALSE; end; function TJclSevenzipOutStream.Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; var Processed: Cardinal; APosition: Int64; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; Processed := FStream.Write(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; if FTruncateOnRelease then begin APosition := FStream.Position; if FMaximumPosition < APosition then FMaximumPosition := APosition; end; end else Result := S_FALSE; end; //=== { TJclSevenzipNestedInStream } ========================================= constructor TJclSevenzipNestedInStream.Create(AInStream: IInStream); begin inherited Create; FInStream := AInStream; end; function TJclSevenzipNestedInStream.Read(var Buffer; Count: Integer): Longint; begin SevenzipCheck(FInStream.Read(@Buffer, Count, @Result)); end; function TJclSevenzipNestedInStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin SevenzipCheck(FInStream.Seek(Offset, Cardinal(Origin), @Result)); end; procedure TJclSevenzipNestedInStream.SetSize(const NewSize: Int64); begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; function TJclSevenzipNestedInStream.Write(const Buffer; Count: Integer): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; //=== { TJclSevenzipInStream } =============================================== constructor TJclSevenzipInStream.Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); begin inherited Create; FArchive := AArchive; FItemIndex := AItemIndex; FStream := nil; FOwnsStream := False; NeedStream; end; constructor TJclSevenzipInStream.Create(AStream: TStream; AOwnsStream: Boolean); begin inherited Create; FArchive := nil; FItemIndex := -1; FStream := AStream; FOwnsStream := AOwnsStream; end; destructor TJclSevenzipInStream.Destroy; begin ReleaseStream; inherited Destroy; end; function TJclSevenzipInStream.GetSize(Size: PInt64): HRESULT; begin NeedStream; if Assigned(FStream) then begin if Assigned(Size) then Size^ := FStream.Size; Result := S_OK; end else Result := S_FALSE; end; procedure TJclSevenzipInStream.NeedStream; begin if Assigned(FArchive) then begin FArchive.FCurrentItemIndex := FItemIndex; if not Assigned(FStream) then FStream := FArchive.Items[FItemIndex].Stream; end; end; function TJclSevenzipInStream.Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; var Processed: Cardinal; begin NeedStream; if Assigned(FStream) then begin Processed := FStream.Read(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; Result := S_OK; end else Result := S_FALSE; end; procedure TJclSevenzipInStream.ReleaseStream; begin if Assigned(FArchive) then FArchive.Items[FItemIndex].ReleaseStream else if FOwnsStream then FStream.Free; end; function TJclSevenzipInStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; var NewPos: Int64; begin NeedStream; if Assigned(FStream) then begin // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(Offset, TSeekOrigin(SeekOrigin)); if Assigned(NewPosition) then NewPosition^ := NewPos; Result := S_OK; end else Result := S_FALSE; end; // sevenzip helper functions procedure SevenzipCheck(Value: HRESULT); begin if (Value <> S_OK) and (Value <> E_ABORT) then raise EJclCompressionError.CreateResFmt(@RsCompression7zReturnError, [Value, SysErrorMessage(Value)]); end; function Get7zWideStringProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TWideStringSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_LPSTR: begin Result := True; Setter(WideString(AnsiString(Value.pszVal))); end; VT_LPWSTR: begin Result := True; Setter(Value.pwszVal); end; VT_BSTR: begin Result := True; Setter(Value.bstrVal); SysFreeString(Value.bstrVal); end; VT_I1: begin Result := True; Setter(IntToStr(Value.iVal)); end; VT_I2: begin Result := True; Setter(IntToStr(Value.iVal)); end; VT_INT, VT_I4: begin Result := True; Setter(IntToStr(Value.lVal)); end; VT_I8: begin Result := True; Setter(IntToStr(Value.hVal.QuadPart)); end; VT_UI1: begin Result := True; Setter(IntToStr(Value.bVal)); end; VT_UI2: begin Result := True; Setter(IntToStr(Value.uiVal)); end; VT_UINT, VT_UI4: begin Result := True; Setter(IntToStr(Value.ulVal)); end; VT_UI8: begin Result := True; Setter(IntToStr(Value.uhVal.QuadPart)); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zCardinalProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TCardinalSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_I1, VT_I2, VT_INT, VT_I4, VT_I8, VT_UI1, VT_UI2, VT_UINT, VT_UI4, VT_UI8: begin Result := True; case Value.vt of VT_I1: Setter(Value.iVal); VT_I2: Setter(Value.iVal); VT_INT, VT_I4: Setter(Value.lVal); VT_I8: Setter(Value.hVal.QuadPart); VT_UI1: Setter(Value.bVal); VT_UI2: Setter(Value.uiVal); VT_UINT, VT_UI4: Setter(Value.ulVal); VT_UI8: Setter(Value.uhVal.QuadPart); end; end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zInt64Prop(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TInt64Setter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_I1, VT_I2, VT_INT, VT_I4, VT_I8, VT_UI1, VT_UI2, VT_UINT, VT_UI4, VT_UI8: begin Result := True; case Value.vt of VT_I1: Setter(Value.iVal); VT_I2: Setter(Value.iVal); VT_INT, VT_I4: Setter(Value.lVal); VT_I8: Setter(Value.hVal.QuadPart); VT_UI1: Setter(Value.bVal); VT_UI2: Setter(Value.uiVal); VT_UINT, VT_UI4: Setter(Value.ulVal); VT_UI8: Setter(Value.uhVal.QuadPart); end; end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zFileTimeProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TFileTimeSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_FILETIME: begin Result := True; Setter(Value.filetime); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zBoolProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TBoolSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_BOOL: begin Result := True; Setter(Value.bool); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; // TODO: Are changes for UTF-8 filenames (>= 4.58 beta) necessary? procedure Load7zFileAttribute(AInArchive: IInArchive; ItemIndex: Integer; AItem: TJclCompressionItem); begin AItem.FValidProperties := []; AItem.FPackedIndex := ItemIndex; AItem.FileName := ''; AItem.Stream := nil; AItem.OwnsStream := False; // sometimes, items have neither names nor extension although other properties may succeed Get7zWideStringProp(AInArchive, ItemIndex, kpidPath, AItem.SetPackedName); Get7zWideStringProp(AInArchive, ItemIndex, kpidExtension, AItem.SetPackedExtension); Get7zCardinalProp(AInArchive, ItemIndex, kpidAttrib, AItem.SetAttributes); // SetDirectory must be after SetAttributes Get7zBoolProp(AInArchive, ItemIndex, kpidIsDir, AItem.SetDirectory); Get7zInt64Prop(AInArchive, ItemIndex, kpidSize, AItem.SetFileSize); Get7zInt64Prop(AInArchive, ItemIndex, kpidPackSize, AItem.SetPackedSize); Get7zFileTimeProp(AInArchive, ItemIndex, kpidCTime, AItem.SetCreationTime); Get7zFileTimeProp(AInArchive, ItemIndex, kpidATime, AItem.SetLastAccessTime); Get7zFileTimeProp(AInArchive, ItemIndex, kpidMTime, AItem.SetLastWriteTime); Get7zWideStringProp(AInArchive, ItemIndex, kpidComment, AItem.SetComment); Get7zWideStringProp(AInArchive, ItemIndex, kpidHostOS, AItem.SetHostOS); Get7zWideStringProp(AInArchive, ItemIndex, kpidFileSystem, AItem.SetHostFS); Get7zWideStringProp(AInArchive, ItemIndex, kpidUser, AItem.SetUser); Get7zWideStringProp(AInArchive, ItemIndex, kpidGroup, AItem.SetGroup); Get7zCardinalProp(AInArchive, ItemIndex, kpidCRC, AItem.SetCRC); Get7zWideStringProp(AInArchive, ItemIndex, kpidMethod, AItem.SetMethod); Get7zBoolProp(AInArchive, ItemIndex, kpidEncrypted, AItem.SetEncrypted); // reset modified flags AItem.ModifiedProperties := []; end; procedure GetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); begin // TODO properties from ASevenzipArchive to AJclArchive end; procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); var Index: Integer; JclArchive: TJclCompressionArchive; PropertySetter: Sevenzip.ISetProperties; InArchive, OutArchive: Boolean; Unused: IInterface; MultiThreadStrategy: IJclArchiveNumberOfThreads; CompressionMethod: IJclArchiveCompressionMethod; CompressionLevel: IJclArchiveCompressionLevel; EncryptionMethod: IJclArchiveEncryptionMethod; DictionarySize: IJclArchiveDictionarySize; NumberOfPasses: IJclArchiveNumberOfPasses; RemoveSfxBlock: IJclArchiveRemoveSfxBlock; CompressHeader: IJclArchiveCompressHeader; EncryptHeader: IJclArchiveEncryptHeader; SaveCreationDateTime: IJclArchiveSaveCreationDateTime; SaveLastAccessDateTime: IJclArchiveSaveLastAccessDateTime; SaveLastWriteDateTime: IJclArchiveSaveLastWriteDateTime; Algorithm: IJclArchiveAlgorithm; Solid: IJclArchiveSolid; PropNames: array of PWideChar; PropValues: array of TPropVariant; procedure AddProperty(const Name: PWideChar; const Value: TPropVariant); begin SetLength(PropNames, Length(PropNames)+1); PropNames[High(PropNames)] := Name; SetLength(PropValues, Length(PropValues)+1); PropValues[High(PropValues)] := Value; end; procedure AddCardinalProperty(const Name: PWideChar; Value: Cardinal); var PropValue: TPropVariant; begin PropValue.vt := VT_UI4; PropValue.ulVal := Value; AddProperty(Name, PropValue); end; procedure AddWideStringProperty(const Name: PWideChar; const Value: WideString); var PropValue: TPropVariant; begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(Value)); AddProperty(Name, PropValue); end; procedure AddBooleanProperty(const Name: PWideChar; Value: Boolean); var PropValue: TPropVariant; const BooleanValues: array [False..True] of WideString = ( 'OFF', 'ON' ); begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(BooleanValues[Value])); AddProperty(Name, PropValue); end; const EncryptionMethodNames: array [TJclEncryptionMethod] of WideString = ( '' {emNone}, kAES128MethodName {emAES128}, kAES192MethodName {emAES192}, kAES256MethodName {emAES256}, kZipCryptoMethodName {emZipCrypto} ); CompressionMethodNames: array [TJclCompressionMethod] of WideString = ( kCopyMethodName {cmCopy}, kDeflateMethodName {cmDeflate}, kDeflate64MethodName {cmDeflate64}, kBZip2MethodName {cmBZip2}, kLZMAMethodName {cmLZMA}, kLZMA2MethodName {cmLZMA2}, kPPMdMethodName {cmPPMd} ); begin if Supports(ASevenzipArchive, Sevenzip.ISetProperties, PropertySetter) and Assigned(PropertySetter) then begin InArchive := Supports(ASevenzipArchive, Sevenzip.IInArchive, Unused); OutArchive := Supports(ASevenzipArchive, Sevenzip.IOutArchive, Unused); if (InArchive or OutArchive) and Supports(AJclArchive, IJclArchiveNumberOfThreads, MultiThreadStrategy) and Assigned(MultiThreadStrategy) and (MultiThreadStrategy.NumberOfThreads > 1) then AddCardinalProperty('MT', MultiThreadStrategy.NumberOfThreads); if OutArchive then begin if Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) then AddWideStringProperty('M', CompressionMethodNames[CompressionMethod.CompressionMethod]); if Supports(AJclArchive, IJclArchiveCompressionLevel, CompressionLevel) and Assigned(CompressionLevel) then AddCardinalProperty('X', CompressionLevel.CompressionLevel); if Supports(AJclArchive, IJclArchiveEncryptionMethod, EncryptionMethod) and Assigned(EncryptionMethod) and (EncryptionMethod.EncryptionMethod <> emNone) then AddWideStringProperty('EM', EncryptionMethodNames[EncryptionMethod.EncryptionMethod]); if Supports(AJclArchive, IJclArchiveDictionarySize, DictionarySize) and Assigned(DictionarySize) and Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) and (CompressionMethod.CompressionMethod in [cmBZip2,cmLZMA,cmLZMA2]) then AddWideStringProperty('D', IntToStr(DictionarySize.DictionarySize) + 'B'); if Supports(AJclArchive, IJclArchiveNumberOfPasses, NumberOfPasses) and Assigned(NumberOfPasses) then AddCardinalProperty('PASS', NumberOfPasses.NumberOfPasses); if Supports(AJclArchive, IJclArchiveRemoveSfxBlock, RemoveSfxBlock) and Assigned(RemoveSfxBlock) then AddBooleanProperty('RSFX', RemoveSfxBlock.RemoveSfxBlock); if Supports(AJclArchive, IJclArchiveCompressHeader, CompressHeader) and Assigned(CompressHeader) then begin AddBooleanProperty('HC', CompressHeader.CompressHeader); if CompressHeader.CompressHeaderFull then AddBooleanProperty('HCF', CompressHeader.CompressHeaderFull); end; if Supports(AJclArchive, IJclArchiveEncryptHeader, EncryptHeader) and Assigned(EncryptHeader) then AddBooleanProperty('HE', EncryptHeader.EncryptHeader); if Supports(AJclArchive, IJclArchiveSaveCreationDateTime, SaveCreationDateTime) and Assigned(SaveCreationDateTime) then AddBooleanProperty('TC', SaveCreationDateTime.SaveCreationDateTime); if Supports(AJclArchive, IJclArchiveSaveLastAccessDateTime, SaveLastAccessDateTime) and Assigned(SaveLastAccessDateTime) then AddBooleanProperty('TA', SaveLastAccessDateTime.SaveLastAccessDateTime); if Supports(AJclArchive, IJclArchiveSaveLastWriteDateTime, SaveLastWriteDateTime) and Assigned(SaveLastWriteDateTime) then AddBooleanProperty('TM', SaveLastWriteDateTime.SaveLastWriteDateTime); if Supports(AJclArchive, IJclArchiveAlgorithm, Algorithm) and Assigned(Algorithm) then AddCardinalProperty('A', Algorithm.Algorithm); if Supports(AJclArchive, IJclArchiveSolid, Solid) and Assigned(Solid) then begin if Solid.SolidExtension then AddWideStringProperty('S', 'E'); if Solid.SolidBlockSize > 0 then AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'B') else AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'F'); end; JclArchive := AJclArchive as TJclCompressionArchive; for Index := Low(JclArchive.PropNames) to High(JclArchive.PropNames) do begin AddProperty(PWideChar(JclArchive.PropNames[Index]), JclArchive.PropValues[Index]); end; end; if Length(PropNames) > 0 then try SevenZipCheck(PropertySetter.SetProperties(@PropNames[0], @PropValues[0], Length(PropNames))); finally for Index := 0 to High(PropValues) do begin if (PropValues[Index].vt = VT_BSTR) and (PropValues[Index].bstrVal <> nil) then begin SysFreeString(PropValues[Index].bstrVal); end; SetLength(JclArchive.PropNames, 0); SetLength(JclArchive.PropValues, 0); end end; end; end; function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64; Password: String; OnArchiveProgress: TJclCompressionProgressEvent; OnArchiveRatio: TJclCompressionRatioEvent): Boolean; var ArchiveFileName: string; SourceFile : String; AFormat: TJclUpdateArchiveClass; Archive : TJclCompressionArchive; i: Integer; InnerList : tStringList; j: Integer; begin Result := False; ArchiveFileName := DestinationFile; AFormat := GetArchiveFormats.FindUpdateFormat(ArchiveFileName); if AFormat <> nil then begin if VolumeSize <> 0 then ArchiveFileName := ArchiveFileName + '.%.3d'; Archive := AFormat.Create(ArchiveFileName, VolumeSize, VolumeSize <> 0); try Archive.Password := Password; Archive.OnProgress := OnArchiveProgress; Archive.OnRatio := OnArchiveRatio; InnerList := tStringList.Create; try for i := 0 to SourceFiles.Count - 1 do begin InnerList.Clear; BuildFileList(SourceFiles[i], faAnyFile, InnerList, True); for j := 0 to InnerList.Count - 1 do begin SourceFile:=InnerList[j]; (Archive as TJclCompressArchive).AddFile(ExtractFileName(SourceFile), SourceFile); Result := True; end; end; finally InnerList.Free; end; (Archive as TJclCompressArchive).Compress; finally Archive.Free; end; end; end; function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64; Password: String; OnArchiveProgress: TJclCompressionProgressEvent; OnArchiveRatio: TJclCompressionRatioEvent): Boolean; var SourceFiles : TStringList; begin SourceFiles := TStringList.Create; try SourceFiles.Add(SourceFile); Result := Create7zFile(SourceFiles, DestinationFile, VolumeSize, Password, OnArchiveProgress, OnArchiveRatio); finally SourceFiles.Free; end; end; function Get7zArchiveSignature(const ClassID: TGUID): TDynByteArray; var I, NumberOfFormats: Cardinal; J: Integer; PropValue: TPropVariant; Found: Boolean; Data: PAnsiChar; begin Found := False; SetLength(Result, 0); SevenzipCheck(Sevenzip.GetNumberOfFormats(@NumberOfFormats)); for I := 0 to NumberOfFormats - 1 do begin SevenzipCheck(Sevenzip.GetHandlerProperty2(I, kClassID, PropValue)); if PropValue.vt = VT_BSTR then begin try if SysStringByteLen(PropValue.bstrVal) = SizeOf(TGUID) then Found := GUIDEquals(PGUID(PropValue.bstrVal)^, ClassID) else raise EJclCompressionError.CreateRes(@RsCompressionDataError); finally SysFreeString(PropValue.bstrVal); end; end else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [PropValue.vt, kClassID]); if Found then begin SevenzipCheck(Sevenzip.GetHandlerProperty2(I, kStartSignature, PropValue)); if PropValue.vt = VT_BSTR then begin try SetLength(Result, SysStringByteLen(PropValue.bstrVal)); Data := PAnsiChar(PropValue.bstrVal); for J := Low(Result) to High(Result) do Result[J] := Ord(Data[J]); finally SysFreeString(PropValue.bstrVal); end; end else if PropValue.vt <> VT_EMPTY then raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [PropValue.vt, kClassID]); Break; end; end; end; //=== { TJclSevenzipOutputCallback } ========================================= constructor TJclSevenzipUpdateCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipUpdateCallback.CryptoGetTextPassword2( PasswordIsDefined: PInteger; Password: PBStr): HRESULT; begin if Assigned(PasswordIsDefined) then begin if FArchive.Password <> '' then PasswordIsDefined^ := Integer($FFFFFFFF) else PasswordIsDefined^ := 0; end; if Assigned(Password) then Password^ := SysAllocString(PWideChar(FArchive.Password)); Result := S_OK; end; function TJclSevenzipUpdateCallback.GetProperty(Index, PropID: Cardinal; out Value: tagPROPVARIANT): HRESULT; var AItem: TJclCompressionItem; begin Result := S_OK; AItem := FArchive.Items[Index]; case PropID of kpidNoProperty: Value.vt := VT_NULL; // kpidMainSubfile: ; // kpidHandlerItemIndex: ; kpidPath: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.PackedName)); end; //kpidName: (read only) { kpidExtension: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(WideString(ExtractFileExt(FCompressionStream.FileNames[Index])))); end;} kpidIsDir: begin Value.vt := VT_BOOL; Value.bool := AItem.Kind = ikDirectory; end; kpidSize: begin Value.vt := VT_UI8; Value.uhVal.QuadPart := AItem.FileSize; end; // kpidPackSize: ; kpidAttrib: begin Value.vt := VT_UI4; Value.ulVal := AItem.Attributes; end; kpidCTime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.CreationTime; end; kpidATime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.LastAccessTime; end; kpidMTime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.LastWriteTime; end; kpidSolid: begin Value.vt := VT_BOOL; Value.bool := True; end; // kpidCommented: ; // kpidEncrypted: ; // kpidSplitBefore: ; // kpidSplitAfter: ; // kpidDictionarySize: ; // kpidCRC: ; // kpidType: ; kpidIsAnti: begin Value.vt := VT_BOOL; Value.bool := False; end; // kpidMethod: ; // kpidHostOS: ; // kpidFileSystem: ; kpidUser: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.User)); end; kpidGroup: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.Group)); end; // kpidBlock: ; kpidComment: begin Value.vt := VT_EMPTY; end; // kpidPosition: ; // kpidPrefix: ; // kpidNumSubDirs: ; // kpidNumSubFiles: ; // kpidUnpackVer: ; // kpidVolume: ; // kpidIsVolume: ; // kpidOffset: ; // kpidLinks: ; // kpidNumBlocks: ; // kpidNumVolumes: ; kpidTimeType: begin Value.vt := VT_UI4; Value.ulVal := kWindows; end; // kpidBit64: ; // kpidBigEndian: ; // kpidCpu: ; // kpidPhySize: ; // kpidHeadersSize: ; // kpidChecksum: ; // kpidCharacts: ; // kpidVa: ; // kpidId: ; kpidShortName: begin Value.vt := VT_EMPTY; end; // kpidCreatorApp: ; // kpidSectorSize: ; kpidPosixAttrib: begin Value.vt := VT_EMPTY; end; // kpidLink: ; // kpidTotalSize: ; // kpidFreeSpace: ; // kpidClusterSize: ; // kpidVolumeName: ; // kpidLocalName: ; // kpidProvider: ; // kpidUserDefined: ; kpidIsAltStream: begin Value.vt := VT_BOOL; Value.bool := False; end; else Value.vt := VT_EMPTY; Result := S_FALSE; end; end; function TJclSevenzipUpdateCallback.GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; begin Result := E_FAIL; FLastStream := Index; repeat try InStream := TJclSevenzipInStream.Create(FArchive, Index); Result := S_OK; except on E: Exception do begin case MessageBoxW(0, PWideChar(UTF8Decode(E.Message)), nil, MB_ABORTRETRYIGNORE or MB_ICONERROR) of IDABORT: Exit(E_ABORT); IDIGNORE: begin FArchive.Items[Index].OperationSuccess := osNoOperation; FLastStream := MAXDWORD; Exit(S_FALSE); end; end; end; end; until Result = S_OK; end; function TJclSevenzipUpdateCallback.GetUpdateItemInfo(Index: Cardinal; NewData, NewProperties: PInteger; IndexInArchive: PCardinal): HRESULT; var CompressionItem: TJclCompressionItem; begin CompressionItem := FArchive.Items[Index]; if Assigned(NewData) then begin if ([ipFileName, ipStream] * CompressionItem.ModifiedProperties) <> [] then NewData^ := 1 else NewData^ := 0; end; if Assigned(NewProperties) then begin if (CompressionItem.ModifiedProperties - [ipFileName, ipStream]) <> [] then NewProperties^ := 1 else NewProperties^ := 0; end; // TODO if Assigned(IndexInArchive) then IndexInArchive^ := CompressionItem.PackedIndex; Result := S_OK; end; function TJclSevenzipUpdateCallback.GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; begin // the JCL has its own spliting engine if Assigned(Size) then Size^ := 0; Result := S_FALSE; end; function TJclSevenzipUpdateCallback.GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; begin VolumeStream := nil; Result := S_FALSE; end; function TJclSevenzipUpdateCallback.SetCompleted( CompleteValue: PInt64): HRESULT; begin Result := S_OK; if Assigned(CompleteValue) and not FArchive.DoProgress(CompleteValue^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipUpdateCallback.SetOperationResult( OperationResult: Integer): HRESULT; begin if FLastStream < MAXDWORD then begin case OperationResult of kOK: FArchive.Items[FLastStream].OperationSuccess := osOK; kUnSupportedMethod: FArchive.Items[FLastStream].OperationSuccess := osUnsupportedMethod; kDataError: FArchive.Items[FLastStream].OperationSuccess := osDataError; kCRCError: FArchive.Items[FLastStream].OperationSuccess := osCRCError; else FArchive.Items[FLastStream].OperationSuccess := osUnknownError; end; end; Result := S_OK; end; function TJclSevenzipUpdateCallback.SetRatioInfo(InSize, OutSize: PInt64): HRESULT; var AInSize, AOutSize: Int64; begin if Assigned(InSize) then AInSize := InSize^ else AInSize := -1; if Assigned(OutSize) then AOutSize := OutSize^ else AOutSize := -1; if FArchive.DoRatio(AInSize, AOutSize) then Result := S_OK else Result := E_ABORT; end; function TJclSevenzipUpdateCallback.SetTotal(Total: Int64): HRESULT; begin FArchive.FProgressMax := Total; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipCompressArchive } ======================================== class function TJclSevenzipCompressArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; class function TJclSevenzipCompressArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; destructor TJclSevenzipCompressArchive.Destroy; begin FOutArchive := nil; inherited Destroy; end; function TJclSevenzipCompressArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclCompressItem; end; function TJclSevenzipCompressArchive.GetOutArchive: IOutArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FOutArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IOutArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FOutArchive) <> ERROR_SUCCESS) or not Assigned(FOutArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zOutArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FOutArchive; end; procedure TJclSevenzipCompressArchive.Compress; var Value: HRESULT; Index: Integer; OutStream: IOutStream; AVolume: TJclCompressionVolume; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin CheckNotCompressing; FCompressing := True; try SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; if Length(FSfxModule) > 0 then OutStream := TSfxSevenzipOutStream.Create(SplitStream, FSfxModule) else begin OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); end; UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); Value:= OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback); if Value <> S_OK then begin // Remove partial archives for Index := 0 to FVolumes.Count - 1 do begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); if AVolume.OwnsStream then begin FreeAndNil(AVolume.FStream); FileDelete(AVolume.FileName); end; end; end; SevenzipCheck(Value); finally FCompressing := False; // release volumes and other finalizations inherited Compress; end; end; //=== { TJcl7zCompressArchive } ============================================== class function TJcl7zCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zCompressArchive.GetCompressHeader: Boolean; begin Result := FCompressHeader; end; function TJcl7zCompressArchive.GetCompressHeaderFull: Boolean; begin Result := FCompressHeaderFull; end; function TJcl7zCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJcl7zCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJcl7zCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJcl7zCompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJcl7zCompressArchive.GetEncryptHeader: Boolean; begin Result := FEncryptHeader; end; function TJcl7zCompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJcl7zCompressArchive.GetRemoveSfxBlock: Boolean; begin Result := FRemoveSfxBlock; end; function TJcl7zCompressArchive.GetSaveCreationDateTime: Boolean; begin Result := FSaveCreationDateTime; end; function TJcl7zCompressArchive.GetSaveLastAccessDateTime: Boolean; begin Result := FSaveLastAccessDateTime; end; function TJcl7zCompressArchive.GetSaveLastWriteDateTime: Boolean; begin Result := FSaveLastWriteDateTime; end; function TJcl7zCompressArchive.GetSolidBlockSize: Int64; begin Result := FSolidBlockSize; end; function TJcl7zCompressArchive.GetSolidExtension: Boolean; begin Result := FSolidExtension; end; procedure TJcl7zCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptHeader := False; FRemoveSfxBlock := False; FDictionarySize := kLzmaDicSizeX5; FCompressionLevel := 6; FCompressHeader := False; FCompressHeaderFull := False; FSaveLastAccessDateTime := True; FSaveCreationDateTime := True; FSaveLastWriteDateTime := True; FSolidBlockSize := High(Cardinal); FSolidExtension := False; end; class function TJcl7zCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zCompressArchive.SetCompressHeader(Value: Boolean); begin CheckNotCompressing; FCompressHeader := Value; end; procedure TJcl7zCompressArchive.SetCompressHeaderFull(Value: Boolean); begin CheckNotCompressing; FCompressHeaderFull := Value; end; procedure TJcl7zCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJcl7zCompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJcl7zCompressArchive.SetEncryptHeader(Value: Boolean); begin CheckNotCompressing; FEncryptHeader := Value; end; procedure TJcl7zCompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; procedure TJcl7zCompressArchive.SetRemoveSfxBlock(Value: Boolean); begin CheckNotCompressing; FRemoveSfxBlock := Value; end; procedure TJcl7zCompressArchive.SetSaveCreationDateTime(Value: Boolean); begin CheckNotCompressing; FSaveCreationDateTime := Value; end; procedure TJcl7zCompressArchive.SetSaveLastAccessDateTime(Value: Boolean); begin CheckNotCompressing; FSaveLastAccessDateTime := Value; end; procedure TJcl7zCompressArchive.SetSaveLastWriteDateTime(Value: Boolean); begin CheckNotCompressing; FSaveLastWriteDateTime := Value; end; procedure TJcl7zCompressArchive.SetSolidBlockSize(const Value: Int64); begin CheckNotCompressing; FSolidBlockSize := Value; end; procedure TJcl7zCompressArchive.SetSolidExtension(Value: Boolean); begin CheckNotCompressing; FSolidExtension := Value; end; //=== { TJclZipCompressArchive } ============================================= class function TJclZipCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipCompressArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclZipCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclZipCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclZipCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclZipCompressArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclZipCompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclZipCompressArchive.GetEncryptionMethod: TJclEncryptionMethod; begin Result := FEncryptionMethod; end; function TJclZipCompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclZipCompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJclZipCompressArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result, 2); Result[0] := 0; Result[1] := 1; end; function TJclZipCompressArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmCopy,cmDeflate,cmDeflate64,cmBZip2,cmLZMA,cmPPMd]; end; function TJclZipCompressArchive.GetSupportedEncryptionMethods: TJclEncryptionMethods; begin Result := [emNone,emAES128,emAES192,emAES256,emZipCrypto]; end; procedure TJclZipCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptionMethod := emZipCrypto; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FCompressionMethod := cmDeflate; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; class function TJclZipCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipCompressArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; if (Value = 0) or (Value = 1) then FAlgorithm := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; case FCompressionMethod of cmDeflate, cmDeflate64: begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; cmBZip2: begin if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end; cmLZMA: begin if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; end; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetCompressionMethod(Value: TJclCompressionMethod); begin CheckNotCompressing; if Value in GetSupportedCompressionMethods then FCompressionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJclZipCompressArchive.SetEncryptionMethod(Value: TJclEncryptionMethod); begin CheckNotCompressing; if Value in GetSupportedEncryptionMethods then FEncryptionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; procedure TJclZipCompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2CompressArchive } ============================================= class function TJclBZ2CompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2CompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2CompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2CompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2CompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclBZ2CompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclBZ2CompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclBZ2CompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclBZ2CompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclBZ2CompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2CompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FNumberOfPasses := kBZip2NumPassesX7; end; procedure TJclBZ2CompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclBZ2CompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJclBZ2CompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; procedure TJclBZ2CompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; //=== { TJclTarCompressArchive } ============================================= class function TJclTarCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipCompressArchive } ============================================ class function TJclGZipCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipCompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; function TJclGZipCompressArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclGZipCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclGZipCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclGZipCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclGZipCompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclGZipCompressArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; procedure TJclGZipCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionLevel := 7; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; procedure TJclGZipCompressArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; FAlgorithm := Value; end; procedure TJclGZipCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclGZipCompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; //=== { TJclXzCompressArchive } ============================================== class function TJclXzCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzName); end; class function TJclXzCompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; function TJclXzCompressArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclXzCompressArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmLZMA2]; end; procedure TJclXzCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionMethod := cmLZMA2; end; procedure TJclXzCompressArchive.SetCompressionMethod( Value: TJclCompressionMethod); begin CheckNotCompressing; FCompressionMethod := Value; end; //=== { TJclSwfcCompressArchive } ============================================ class function TJclSwfcCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; //=== { TJclWimCompressArchive } ============================================= class function TJclWimCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatWim; end; class function TJclWimCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionWimExtensions); end; class function TJclWimCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionWimName); end; //=== { TJclSevenzipOpenCallback } =========================================== constructor TJclSevenzipOpenCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipOpenCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then begin if Length(FArchive.FPassword) = 0 then begin if Assigned(FArchive.OnPassword) then FArchive.OnPassword(FArchive, FArchive.FPassword); end; password^ := SysAllocString(PWideChar(FArchive.Password)); end; Result := S_OK; end; function TJclSevenzipOpenCallback.SetCompleted(Files, Bytes: PInt64): HRESULT; begin Result := S_OK; if Assigned(Files) and not FArchive.DoProgress(Files^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipOpenCallback.SetTotal(Files, Bytes: PInt64): HRESULT; begin if Assigned(Files) then FArchive.FProgressMax := Files^; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipExtractCallback } ======================================== constructor TJclSevenzipExtractCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipExtractCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then begin if Length(FArchive.FPassword) = 0 then begin if Assigned(FArchive.OnPassword) then FArchive.OnPassword(FArchive, FArchive.FPassword); end; password^ := SysAllocString(PWideChar(FArchive.Password)); end; Result := S_OK; end; function TJclSevenzipExtractCallback.GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; begin FLastStream := Index; Assert(askExtractMode in [kExtract, kTest, kSkip]); if askExtractMode in [kTest, kSkip] then begin OutStream := nil; Result := S_OK; end else if FArchive.Items[Index].ValidateExtraction(Index) then begin OutStream := TJclSevenzipOutStream.Create(FArchive, Index); Result := S_OK; end else begin OutStream := nil; Result := S_FALSE; end; end; function TJclSevenzipExtractCallback.PrepareOperation( askExtractMode: Cardinal): HRESULT; begin Result := S_OK; end; function TJclSevenzipExtractCallback.SetCompleted( CompleteValue: PInt64): HRESULT; begin Result := S_OK; if Assigned(CompleteValue) and not FArchive.DoProgress(CompleteValue^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipExtractCallback.SetOperationResult( resultEOperationResult: Integer): HRESULT; var LastItem: TJclCompressionItem; begin LastItem := FArchive.Items[FLastStream]; case resultEOperationResult of kOK: begin LastItem.OperationSuccess := osOK; LastItem.UpdateFileTimes; end; kUnSupportedMethod: begin LastItem.OperationSuccess := osUnsupportedMethod; LastItem.DeleteOutputFile; end; kDataError: begin LastItem.OperationSuccess := osDataError; LastItem.DeleteOutputFile; end; kCRCError: begin LastItem.OperationSuccess := osCRCError; LastItem.DeleteOutputFile; end else LastItem.OperationSuccess := osUnknownError; LastItem.DeleteOutputFile; end; Result := S_OK; end; function TJclSevenzipExtractCallback.SetRatioInfo(InSize, OutSize: PInt64): HRESULT; var AInSize, AOutSize: Int64; begin if Assigned(InSize) then AInSize := InSize^ else AInSize := -1; if Assigned(OutSize) then AOutSize := OutSize^ else AOutSize := -1; if FArchive.DoRatio(AInSize, AOutSize) then Result := S_OK else Result := E_ABORT; end; function TJclSevenzipExtractCallback.SetTotal(Total: Int64): HRESULT; begin FArchive.FProgressMax := Total; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipDecompressItem } ========================================= function TJclSevenzipDecompressItem.GetNestedArchiveStream: TStream; var SequentialInStream: ISequentialInStream; InStream: IInStream; InterfaceID: TGUID; begin if Archive.SupportsNestedArchive and (Archive is TJclSevenzipDecompressArchive) then begin SevenzipCheck(TJclSevenzipDecompressArchive(Archive).InArchiveGetStream.GetStream(PackedIndex, SequentialInStream)); InterfaceID := IInStream; SevenzipCheck(SequentialInStream.QueryInterface(InterfaceID, InStream)); Result := TJclSevenzipNestedInStream.Create(InStream); end else Result := inherited GetNestedArchiveStream; end; //=== { TJclSevenzipDecompressArchive } ====================================== class function TJclSevenzipDecompressArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; class function TJclSevenzipDecompressArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; destructor TJclSevenzipDecompressArchive.Destroy; begin FInArchive := nil; FInArchiveGetStream := nil; inherited Destroy; end; procedure TJclSevenzipDecompressArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; FExtractingAllIndex := 0; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; // seems buggy: first param "indices" is dereferenced without // liveness checks inside Sevenzip code //SevenzipCheck(InArchive.Extract(nil, $FFFFFFFF, 0, AExtractCallback)); NbIndices := ItemCount; SetLength(Indices, NbIndices); for Index := 0 to NbIndices - 1 do begin Items[Index].Selected := True; Indices[Index] := Index; end; SevenzipCheck(InArchive.Extract(@Indices[0], NbIndices, 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; FExtractingAllIndex := -1; FCurrentItemIndex := -1; AExtractCallback := nil; // release volumes and other finalizations inherited ExtractAll(ADestinationDir, AAutoCreateSubDir); end; end; procedure TJclSevenzipDecompressArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then Inc(NbIndices); SetLength(Indices, NbIndices); NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then begin Indices[NbIndices] := Index; Inc(NbIndices); end; SevenzipCheck(InArchive.Extract(@Indices[0], Length(Indices), 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; FCurrentItemIndex := -1; // release volumes and other finalizations inherited ExtractSelected(ADestinationDir, AAutoCreateSubDir); end; end; function TJclSevenzipDecompressArchive.GetInArchive: IInArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FInArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IInArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FInArchive) <> ERROR_SUCCESS) or not Assigned(FInArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zInArchiveError, [GUIDToString(SevenzipCLSID)]); FExtractingAllIndex := -1; end; Result := FInArchive; end; function TJclSevenzipDecompressArchive.GetInArchiveGetStream: IInArchiveGetStream; var InterfaceID: TGUID; begin if not Assigned(FInArchiveGetStream) then begin InterfaceID := Sevenzip.IInArchiveGetStream; SevenzipCheck(InArchive.QueryInterface(InterfaceID, FInArchiveGetStream)); end; Result := FInArchiveGetStream; end; function TJclSevenzipDecompressArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclSevenzipDecompressItem; end; function TJclSevenzipDecompressArchive.GetSupportsNestedArchive: Boolean; var InterfaceID: TGUID; begin Result := Assigned(FInArchiveGetStream); if not Result then begin InterfaceID := Sevenzip.IInArchiveGetStream; Result := InArchive.QueryInterface(InterfaceID, FInArchiveGetStream) = ERROR_SUCCESS; end; end; procedure TJclSevenzipDecompressArchive.ListFiles; var NumberOfItems: Cardinal; Index: Integer; AItem: TJclCompressionItem; begin CheckNotDecompressing; FListing := True; try ClearItems; OpenArchive; SevenzipCheck(InArchive.GetNumberOfItems(@NumberOfItems)); if NumberOfItems > 0 then begin for Index := 0 to NumberOfItems - 1 do begin AItem := GetItemClass.Create(Self); Load7zFileAttribute(InArchive, Index, AItem); FItems.Add(AItem); end; end; finally FListing := False; end; end; procedure TJclSevenzipDecompressArchive.OpenArchive; var SplitStream: TJclDynamicSplitStream; OpenCallback: IArchiveOpenCallback; MaxCheckStartPosition: Int64; AInStream: IInStream; begin if not FOpened then begin if (VolumeFileNameMask <> '') or (VolumeMaxSize <> 0) or (FVolumes.Count <> 0) then begin SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; AInStream := TJclSevenzipInStream.Create(SplitStream, True); end else AInStream := TJclSevenzipInStream.Create(NeedStream(0), False); OpenCallback := TJclSevenzipOpenCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, InArchive); MaxCheckStartPosition := 1 shl 22; SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback)); GetSevenzipArchiveCompressionProperties(Self, InArchive); FOpened := True; end; end; //=== { TJclZipDecompressArchive } =========================================== class function TJclZipDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipDecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclZipDecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; class function TJclZipDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipDecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2DecompressArchive } =========================================== class function TJclBZ2DecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2DecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2DecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2DecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2DecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2DecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; procedure TJclBZ2DecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclRarDecompressArchive } =========================================== class function TJclRarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionRarExtensions); end; class function TJclRarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionRarName); end; class function TJclRarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatRar; end; class function TJclRarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclArjDecompressArchive } =========================================== class function TJclArjDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionArjExtensions); end; class function TJclArjDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionArjName); end; class function TJclArjDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatArj; end; class function TJclArjDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclZDecompressArchive } ============================================= class function TJclZDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; class function TJclZDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZ; end; class function TJclZDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclLzhDecompressArchive } =========================================== class function TJclLzhDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzhExtensions); end; class function TJclLzhDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzhName); end; class function TJclLzhDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzh; end; class function TJclLzhDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJcl7zDecompressArchive } ============================================ class function TJcl7zDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zDecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJcl7zDecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; class function TJcl7zDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zDecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclCabDecompressArchive } =========================================== class function TJclCabDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCabExtensions); end; class function TJclCabDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCabName); end; class function TJclCabDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCab; end; class function TJclCabDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclNsisDecompressArchive } ========================================== class function TJclNsisDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionNsisExtensions); end; class function TJclNsisDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionNsisName); end; class function TJclNsisDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatNsis; end; class function TJclNsisDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclLzmaDecompressArchive } ========================================== class function TJclLzmaDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzmaExtensions); end; class function TJclLzmaDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzmaName); end; class function TJclLzmaDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzma; end; class function TJclLzmaDecompressArchive.MultipleItemContainer: Boolean; begin Result := False; end; //=== { TJclLzma86DecompressArchive } ======================================== class function TJclLzma86DecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzma86Extensions); end; class function TJclLzma86DecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzma86Name); end; class function TJclLzma86DecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzma86; end; class function TJclLzma86DecompressArchive.MultipleItemContainer: Boolean; begin Result := False; end; //=== { TJclPeDecompressArchive } ============================================ class function TJclPeDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionPeExtensions); end; class function TJclPeDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionPeName); end; class function TJclPeDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatPe; end; class function TJclPeDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclElfDecompressArchive } =========================================== class function TJclElfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionElfExtensions); end; class function TJclElfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionElfName); end; class function TJclElfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatElf; end; class function TJclElfDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMachoDecompressArchive } ========================================= class function TJclMachoDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMachoExtensions); end; class function TJclMachoDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMachoName); end; class function TJclMachoDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMacho; end; class function TJclMachoDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclUdfDecompressArchive } ========================================== class function TJclUdfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUdfExtensions); end; class function TJclUdfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUdfName); end; class function TJclUdfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUdf; end; class function TJclUdfDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclXarDecompressArchive } =========================================== class function TJclXarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXarExtensions); end; class function TJclXarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXarName); end; class function TJclXarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXar; end; class function TJclXarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMubDecompressArchive } =========================================== class function TJclMubDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMubExtensions); end; class function TJclMubDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMubName); end; class function TJclMubDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMub; end; class function TJclMubDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclHfsDecompressArchive } =========================================== class function TJclHfsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionHfsExtensions); end; class function TJclHfsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionHfsName); end; class function TJclHfsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatHfs; end; class function TJclHfsDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclDmgDecompressArchive } =========================================== class function TJclDmgDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionDmgExtensions); end; class function TJclDmgDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionDmgName); end; class function TJclDmgDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatDmg; end; class function TJclDmgDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclCompoundDecompressArchive } ====================================== class function TJclCompoundDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCompoundExtensions); end; class function TJclCompoundDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCompoundName); end; class function TJclCompoundDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCompound; end; class function TJclCompoundDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclWimDecompressArchive } =========================================== class function TJclWimDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionWimExtensions); end; class function TJclWimDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionWimName); end; class function TJclWimDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatWim; end; class function TJclWimDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclIsoDecompressArchive } =========================================== class function TJclIsoDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionIsoExtensions); end; class function TJclIsoDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionIsoName); end; class function TJclIsoDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatIso; end; class function TJclIsoDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclChmDecompressArchive } =========================================== class function TJclChmDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionChmExtensions); end; class function TJclChmDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionChmName); end; class function TJclChmDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatChm; end; class function TJclChmDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclSplitDecompressArchive } ========================================= class function TJclSplitDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSplitExtensions); end; class function TJclSplitDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSplitName); end; class function TJclSplitDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSplit; end; //=== { TJclRpmDecompressArchive } =========================================== class function TJclRpmDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionRpmExtensions); end; class function TJclRpmDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionRpmName); end; class function TJclRpmDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatRpm; end; class function TJclRpmDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclDebDecompressArchive } =========================================== class function TJclDebDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionDebExtensions); end; class function TJclDebDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionDebName); end; class function TJclDebDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatDeb; end; class function TJclDebDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclCpioDecompressArchive } ========================================== class function TJclCpioDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCpioExtensions); end; class function TJclCpioDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCpioName); end; class function TJclCpioDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCpio; end; class function TJclCpioDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclTarDecompressArchive } =========================================== class function TJclTarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipDecompressArchive } ========================================== class function TJclGZipDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; //=== { TJclXzDecompressArchive } ============================================ class function TJclXzDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzName); end; class function TJclXzDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; //=== { TJclNtfsDecompressArchive } ========================================== class function TJclNtfsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionNtfsExtensions); end; class function TJclNtfsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionNtfsName); end; class function TJclNtfsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatNtfs; end; class function TJclNtfsDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclFatDecompressArchive } =========================================== class function TJclFatDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionFatExtensions); end; class function TJclFatDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionFatName); end; class function TJclFatDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatFat; end; class function TJclFatDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMbrDecompressArchive } =========================================== class function TJclMbrDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMbrExtensions); end; class function TJclMbrDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMbrName); end; class function TJclMbrDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMbr; end; class function TJclMbrDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclVhdDecompressArchive } =========================================== class function TJclVhdDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionVhdExtensions); end; class function TJclVhdDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionVhdName); end; class function TJclVhdDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionVhdSubExtensions); end; class function TJclVhdDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatVhd; end; //=== { TJclMslzDecompressArchive } ========================================== class function TJclMslzDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMslzExtensions); end; class function TJclMslzDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMslzName); end; class function TJclMslzDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMslz; end; //=== { TJclFlvDecompressArchive } =========================================== class function TJclFlvDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionFlvExtensions); end; class function TJclFlvDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionFlvName); end; class function TJclFlvDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatFlv; end; //=== { TJclSwfDecompressArchive } =========================================== class function TJclSwfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfExtensions); end; class function TJclSwfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfName); end; class function TJclSwfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwf; end; //=== { TJclSwfcDecompressArchive } ========================================== class function TJclSwfcDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; //=== { TJclAPMDecompressArchive } =========================================== class function TJclAPMDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionApmExtensions); end; class function TJclAPMDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionApmName); end; class function TJclAPMDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatAPM; end; //=== { TJclPpmdDecompressArchive } ========================================== class function TJclPpmdDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionPpmdExtensions); end; class function TJclPpmdDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionPpmdName); end; class function TJclPpmdDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatPpmd; end; //=== { TJclTEDecompressArchive } ============================================ class function TJclTEDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTEExtensions); end; class function TJclTEDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTEName); end; class function TJclTEDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTE; end; //=== { TJclUEFIcDecompressArchive } ========================================= class function TJclUEFIcDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUEFIcExtensions); end; class function TJclUEFIcDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUEFIcName); end; class function TJclUEFIcDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUEFIc; end; //=== { TJclUEFIsDecompressArchive } ========================================= class function TJclUEFIsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUEFIsExtensions); end; class function TJclUEFIsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUEFIsName); end; class function TJclUEFIsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUEFIs; end; //=== { TJclSquashFSDecompressArchive } ====================================== class function TJclSquashFSDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSquashFSExtensions); end; class function TJclSquashFSDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSquashFSName); end; class function TJclSquashFSDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSquashFS; end; //=== { TJclCramFSDecompressArchive } ======================================== class function TJclCramFSDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCramFSExtensions); end; class function TJclCramFSDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCramFSName); end; class function TJclCramFSDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCramFS; end; //=== { TJclSevenzipUpdateArchive } ========================================== class function TJclSevenzipUpdateArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; destructor TJclSevenzipUpdateArchive.Destroy; begin FInArchive := nil; FOutArchive := nil; inherited Destroy; end; class function TJclSevenzipUpdateArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; procedure TJclSevenzipUpdateArchive.Compress; var Value: HRESULT; OutStream: IOutStream; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin CheckNotCompressing; CheckNotDecompressing; FCompressing := True; try SplitStream := TJclDynamicSplitStream.Create(True); SplitStream.OnVolume := NeedTmpStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; OutStream := TJclSevenzipOutStream.Create(SplitStream, True, True); UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); Value:= OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback); if Value <> S_OK then begin FReplaceVolumes:= False; SevenzipCheck(Value); end; finally FCompressing := False; // release reference to volume streams OutStream := nil; // replace streams by tmp streams inherited Compress; end; end; procedure TJclSevenzipUpdateArchive.DeleteItem(Index: Integer); var I, BaseLength: Integer; IsDirectory: Boolean; AItem: TJclCompressionItem; DirectoryName: WideString; begin AItem := Items[Index]; IsDirectory := (AItem.Attributes and faDirectory) <> 0; DirectoryName := AItem.PackedName + DirDelimiter; FItems.Delete(Index); if IsDirectory then begin BaseLength := Length(DirectoryName); for I := ItemCount - 1 downto 0 do if WideSameText(DirectoryName, Copy(Items[I].PackedName, 1, BaseLength)) then FItems.Delete(I); end; end; procedure TJclSevenzipUpdateArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; CheckNotCompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; FExtractingAllIndex := 0; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; // seems buggy: first param "indices" is dereferenced without // liveness checks inside Sevenzip code //SevenzipCheck(InArchive.Extract(nil, $FFFFFFFF, 0, AExtractCallback)); NbIndices := ItemCount; SetLength(Indices, NbIndices); for Index := 0 to NbIndices - 1 do begin Items[Index].Selected := True; Indices[Index] := Index; end; SevenzipCheck(InArchive.Extract(@Indices[0], NbIndices, 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; FExtractingAllIndex := -1; FCurrentItemIndex := -1; AExtractCallback := nil; // release volumes and other finalizations inherited ExtractAll(ADestinationDir, AAutoCreateSubDir); end; end; procedure TJclSevenzipUpdateArchive.ExtractSelected( const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; CheckNotCompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then Inc(NbIndices); SetLength(Indices, NbIndices); NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then begin Indices[NbIndices] := Index; Inc(NbIndices); end; SevenzipCheck(InArchive.Extract(@Indices[0], Length(Indices), 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; FCurrentItemIndex := -1; // release volumes and other finalizations inherited ExtractSelected(ADestinationDir, AAutoCreateSubDir); end; end; function TJclSevenzipUpdateArchive.GetInArchive: IInArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FInArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IInArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FInArchive) <> ERROR_SUCCESS) or not Assigned(FInArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zInArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FInArchive; end; function TJclSevenzipUpdateArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclUpdateItem; end; function TJclSevenzipUpdateArchive.GetOutArchive: IOutArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FOutarchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IOutArchive; if not Supports(InArchive, InterfaceID, FOutArchive) or not Assigned(FOutArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zOutArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FOutArchive; end; procedure TJclSevenzipUpdateArchive.ListFiles; var NumberOfItems: Cardinal; Index: Integer; AItem: TJclCompressionItem; begin CheckNotDecompressing; CheckNotCompressing; FListing := True; try ClearItems; OpenArchive; SevenzipCheck(InArchive.GetNumberOfItems(@NumberOfItems)); if NumberOfItems > 0 then begin for Index := 0 to NumberOfItems - 1 do begin AItem := GetItemClass.Create(Self); Load7zFileAttribute(InArchive, Index, AItem); FItems.Add(AItem); end; end; finally FListing := False; end; end; procedure TJclSevenzipUpdateArchive.OpenArchive; var OpenCallback: IArchiveOpenCallback; MaxCheckStartPosition: Int64; AInStream: IInStream; SplitStream: TJclDynamicSplitStream; begin if not FOpened then begin SplitStream := TJclDynamicSplitStream.Create(True); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; AInStream := TJclSevenzipInStream.Create(SplitStream, True); OpenCallback := TJclSevenzipOpenCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, InArchive); MaxCheckStartPosition := 1 shl 22; SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback)); GetSevenzipArchiveCompressionProperties(Self, InArchive); FOpened := True; end; end; procedure TJclSevenzipUpdateArchive.RemoveItem(const PackedName: WideString); var Index, BaseLength, PackedNamesIndex: Integer; IsDirectory: Boolean; AItem: TJclCompressionItem; DirectoryName: WideString; begin IsDirectory := False; for Index := 0 to ItemCount - 1 do begin AItem := Items[Index]; if WideSameText(AItem.PackedName, PackedName) then begin DirectoryName := AItem.PackedName; if (AItem.Attributes and faDirectory) <> 0 then IsDirectory := True; FItems.Delete(Index); PackedNamesIndex := -1; if (FPackedNames <> nil) and FPackedNames.Find(PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); Break; end; end; if IsDirectory then begin DirectoryName := PackedName + DirDelimiter; BaseLength := Length(DirectoryName); for Index := ItemCount - 1 downto 0 do if WideSameText(DirectoryName, Copy(Items[Index].PackedName, 1, BaseLength)) then begin if (FPackedNames <> nil) and FPackedNames.Find(Items[Index].PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); FItems.Delete(Index); end; end; end; //=== { TJclZipUpdateArchive } =============================================== class function TJclZipUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipUpdateArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclZipUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclZipUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclZipUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclZipUpdateArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclZipUpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclZipUpdateArchive.GetEncryptionMethod: TJclEncryptionMethod; begin Result := FEncryptionMethod; end; function TJclZipUpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclZipUpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJclZipUpdateArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; function TJclZipUpdateArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmCopy,cmDeflate,cmDeflate64,cmBZip2,cmLZMA]; end; function TJclZipUpdateArchive.GetSupportedEncryptionMethods: TJclEncryptionMethods; begin Result := [emNone,emAES128,emAES192,emAES256,emZipCrypto]; end; procedure TJclZipUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptionMethod := emZipCrypto; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FCompressionMethod := cmDeflate; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; class function TJclZipUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipUpdateArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if (Value = 0) or (Value = 1) then FAlgorithm := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; case FCompressionMethod of cmDeflate, cmDeflate64: begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; cmBZip2: begin if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end; cmLZMA: begin if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; end; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetCompressionMethod(Value: TJclCompressionMethod); begin CheckNotCompressing; CheckNotDecompressing; if Value in GetSupportedCompressionMethods then FCompressionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJclZipUpdateArchive.SetEncryptionMethod(Value: TJclEncryptionMethod); begin CheckNotCompressing; CheckNotDecompressing; if Value in GetSupportedEncryptionMethods then FEncryptionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; procedure TJclZipUpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2UpdateArchive } =============================================== class function TJclBZ2UpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2UpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2UpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2UpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2UpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclBZ2UpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclBZ2UpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclBZ2UpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclBZ2UpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclBZ2UpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2UpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FNumberOfPasses := kBZip2NumPassesX7; end; procedure TJclBZ2UpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclBZ2UpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJclBZ2UpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; procedure TJclBZ2UpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJcl7zUpdateArchive } ================================================ class function TJcl7zUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zUpdateArchive.GetCompressHeader: Boolean; begin Result := FCompressHeader; end; function TJcl7zUpdateArchive.GetCompressHeaderFull: Boolean; begin Result := FCompressHeaderFull; end; function TJcl7zUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJcl7zUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJcl7zUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJcl7zUpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJcl7zUpdateArchive.GetEncryptHeader: Boolean; begin Result := FEncryptHeader; end; function TJcl7zUpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJcl7zUpdateArchive.GetRemoveSfxBlock: Boolean; begin Result := FRemoveSfxBlock; end; function TJcl7zUpdateArchive.GetSaveCreationDateTime: Boolean; begin Result := FSaveCreationDateTime; end; function TJcl7zUpdateArchive.GetSaveLastAccessDateTime: Boolean; begin Result := FSaveLastAccessDateTime; end; function TJcl7zUpdateArchive.GetSaveLastWriteDateTime: Boolean; begin Result := FSaveLastWriteDateTime; end; procedure TJcl7zUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptHeader := False; FRemoveSfxBlock := False; FDictionarySize := kLzmaDicSizeX5; FCompressionLevel := 6; FCompressHeader := False; FCompressHeaderFull := False; FSaveLastAccessDateTime := True; FSaveCreationDateTime := True; FSaveLastWriteDateTime := True; end; class function TJcl7zUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zUpdateArchive.SetCompressHeader(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FCompressHeader := Value; end; procedure TJcl7zUpdateArchive.SetCompressHeaderFull(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FCompressHeaderFull := Value; end; procedure TJcl7zUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJcl7zUpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJcl7zUpdateArchive.SetEncryptHeader(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FEncryptHeader := Value; end; procedure TJcl7zUpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; procedure TJcl7zUpdateArchive.SetRemoveSfxBlock(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FRemoveSfxBlock := Value; end; procedure TJcl7zUpdateArchive.SetSaveCreationDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveCreationDateTime := Value; end; procedure TJcl7zUpdateArchive.SetSaveLastAccessDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveLastAccessDateTime := Value; end; procedure TJcl7zUpdateArchive.SetSaveLastWriteDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveLastWriteDateTime := Value; end; //=== { TJclTarUpdateArchive } =============================================== class function TJclTarUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipUpdateArchive } ============================================== class function TJclGZipUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipUpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; function TJclGZipUpdateArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclGZipUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclGZipUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclGZipUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclGZipUpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclGZipUpdateArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; procedure TJclGZipUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionLevel := 7; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; procedure TJclGZipUpdateArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FAlgorithm := Value; end; procedure TJclGZipUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclGZipUpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; //=== { TJclXzUpdateArchive } ================================================ class function TJclXzUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzUpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; function TJclXzUpdateArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclXzUpdateArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmLZMA2]; end; procedure TJclXzUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionMethod := cmLZMA2 end; procedure TJclXzUpdateArchive.SetCompressionMethod( Value: TJclCompressionMethod); begin CheckNotDecompressing; CheckNotCompressing; FCompressionMethod := Value; end; //=== { TJclSwfcUpdateArchive } ============================================== class function TJclSwfcUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; {$ENDIF MSWINDOWS} initialization {$IFDEF UNITVERSIONING} RegisterUnitVersion(HInstance, UnitVersioning); {$ENDIF UNITVERSIONING} finalization {$IFDEF UNITVERSIONING} UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} FreeAndNil(GlobalStreamFormats); FreeAndNil(GlobalArchiveFormats); end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/DCJclResources.pas������������������������������������0000644�0001750�0000144�00000016120�15104114162�023570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclResources; {$mode delphi} interface resourcestring RsCompressionUnavailableProperty = 'This property is unavailable'; RsCompressionNoNestedArchive = 'Nested archive is not implemented'; RsCompression7zWindows = 'Windows'; RsCompressionDuplicate = 'Archive already contains the file %s'; RsCompressionUnsupportedMethod = 'Unsupported method'; RsCompressionDataError = 'Data error'; RsCompressionCRCError = 'CRC error'; RsCompressionUnknownError = 'Unknown error'; RsCompressionWriteNotSupported = 'Write operation is not supported'; RsCompressionCompressingError = 'This operation is not allowed during compression'; RsCompressionDecompressingError = 'This operation is not allowed during decompression'; RsCompressionReplaceError = 'Some volume could not be replaced while archive update'; RsCompression7zReturnError = '7-Zip: Error code (%.8x) - %s'; RsCompression7zUnknownValueType = '7-Zip: Property (%d) contains unknown value type (%d)'; RsCompression7zLoadError = '7-Zip: Cannot load library 7z.dll'; RsCompression7zOutArchiveError = '7-Zip: Unable to get out archive interface of %s class'; RsCompression7zInArchiveError = '7-Zip: Unable to get in archive interface of %s class'; RsCompressionZipName = 'ZIP format'; RsCompressionZipExtensions = '*.zip'; RsCompressionBZip2Name = 'BZIP2 format'; RsCompressionBZip2Extensions = '*.bz2;*.bzip2;*.tbz2;*.tbz'; RsCompressionBZip2SubExtensions = '.tbz2=.tar;.tbz=.tar'; RsCompressionRarName = 'RAR format'; RsCompressionRarExtensions = '*.rar;*.r00'; RsCompressionArjName = 'ARJ format'; RsCompressionArjExtensions = '*.arj'; RsCompressionZName = 'Z format'; RsCompressionZExtensions = '*.z;*.taz'; RsCompressionZSubExtensions = '.taz=.tar'; RsCompressionLzhName = 'LZH format'; RsCompressionLzhExtensions = '*.lzh;*.lha'; RsCompression7zName = '7z format'; RsCompression7zExtensions = '*.7z'; RsCompressionCabName = 'CAB format'; RsCompressionCabExtensions = '*.cab'; RsCompressionNsisName = 'NSIS format'; RsCompressionNsisExtensions = '*.nsis'; RsCompressionLzmaName = 'LZMA format'; RsCompressionLzmaExtensions = '*.lzma'; RsCompressionLzma86Name = 'LZMA86 format'; RsCompressionLzma86Extensions = '*.lzma86'; RsCompressionXzName = 'XZ format'; RsCompressionXzExtensions = '*.xz;*.txz'; RsCompressionXzSubExtensions = '.txz=.tar'; RsCompressionPpmdName = 'PPMD format'; RsCompressionPpmdExtensions = '*.ppmd'; RsCompressionTEName = 'TE format'; RsCompressionTEExtensions = '*.te'; RsCompressionUEFIcName = 'UEFIc format'; RsCompressionUEFIcExtensions = '*.scap'; RsCompressionUEFIsName = 'UEFIs format'; RsCompressionUEFIsExtensions = '*.uefif'; RsCompressionSquashFSName = 'SquashFS format'; RsCompressionSquashFSExtensions = '*.squashfs'; RsCompressionCramFSName = 'CramFS format'; RsCompressionCramFSExtensions = '*.cramfs'; RsCompressionApmName = 'APM format'; RsCompressionApmExtensions = '*.apm'; RsCompressionMsLZName = 'MsLZ format'; RsCompressionMsLZExtensions = ''; RsCompressionFlvName = 'FLV format'; RsCompressionFlvExtensions = '*.flv'; RsCompressionSwfName = 'SWF format'; RsCompressionSwfExtensions = '*.swf'; RsCompressionSwfcName = 'SWFC format'; RsCompressionSwfcExtensions = '*.swf'; RsCompressionNtfsName = 'NTFS format'; RsCompressionNtfsExtensions = '*.ntfs;*.img'; RsCompressionFatName = 'FAT format'; RsCompressionFatExtensions = '*.fat;*.img'; RsCompressionMbrName = 'MBR format'; RsCompressionMbrExtensions = '*.mbr'; RsCompressionVhdName = 'VHD format'; RsCompressionVhdExtensions = '*.vhd'; RsCompressionVhdSubExtensions = '.vhd=.mbr'; RsCompressionPeName = 'PE format'; RsCompressionPeExtensions = '*.exe;*.dll'; RsCompressionElfName = 'ELF format'; RsCompressionElfExtensions = ''; RsCompressionMachoName = 'MACH-O format'; RsCompressionMachoExtensions = ''; RsCompressionUdfName = 'UDF format'; RsCompressionUdfExtensions = '*.udf;*.iso;*.img'; RsCompressionXarName = 'XAR format'; RsCompressionXarExtensions = '*.xar;*.pkg'; RsCompressionMubName = 'MUB format'; RsCompressionMubExtensions = '*.mub'; RsCompressionHfsName = 'HFS format'; RsCompressionHfsExtensions = '*.hfs;*.hfsx'; RsCompressionDmgName = 'DMG format'; RsCompressionDmgExtensions = '*.dmg'; RsCompressionCompoundName = 'COMPOUND format'; RsCompressionCompoundExtensions = '*.msi;*.msp;*.doc;*.xls;*.ppt'; RsCompressionWimName = 'WIM format'; RsCompressionWimExtensions = '*.wim;*.swm'; RsCompressionIsoName = 'ISO format'; RsCompressionIsoExtensions = '*.iso;*.img'; RsCompressionChmName = 'CHM format'; RsCompressionChmExtensions = '*.chm;*.chw;*.chi;*.chq;*.hxs;*.hxi;*.hxr;*.hxq;*.hxw;*.lit'; RsCompressionSplitName = 'SPLIT format'; RsCompressionSplitExtensions = '*.001'; RsCompressionRpmName = 'RPM format'; RsCompressionRpmExtensions = '*.rpm'; RsCompressionDebName = 'DEB format'; RsCompressionDebExtensions = '*.deb'; RsCompressionCpioName = 'CPIO format'; RsCompressionCpioExtensions = '*.cpio'; RsCompressionTarName = 'TAR format'; RsCompressionTarExtensions = '*.tar'; RsCompressionGZipName = 'GZIP format'; RsCompressionGZipExtensions = '*.gz;*.gzip;*.tgz'; RsCompressionGZipSubExtensions = '.tgz=.tar'; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/DCJclCompression.pas����������������������������������0000644�0001750�0000144�00000007060�15104114162�024122� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclCompression; {$mode delphi} interface uses Classes, SysUtils, SevenZip; type { TSfxSevenzipOutStream } TSfxSevenzipOutStream = class(TInterfacedObject, ISequentialOutStream, IOutStream, IUnknown) private FStream: TStream; FSfxLength: Int64; FSfxModule: String; public constructor Create(AStream: TStream; const ASfxModule: String); destructor Destroy; override; // ISequentialOutStream function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IOutStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; implementation uses ActiveX, JwaWinError; { TSfxSevenzipOutStream } constructor TSfxSevenzipOutStream.Create(AStream: TStream; const ASfxModule: String); var SfxModule: TFileStream; begin inherited Create; FStream := AStream; FSfxModule := ASfxModule; SfxModule:= TFileStream.Create(FSfxModule, fmOpenRead or fmShareDenyNone); try FStream.Seek(0, soBeginning); FSfxLength := FStream.CopyFrom(SfxModule, SfxModule.Size); finally SfxModule.Free; end; end; destructor TSfxSevenzipOutStream.Destroy; begin FStream.Free; inherited Destroy; end; function TSfxSevenzipOutStream.Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; var Processed: Cardinal; begin if Assigned(FStream) then begin Result := S_OK; Processed := FStream.Write(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; end else Result := S_FALSE; end; function TSfxSevenzipOutStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; var NewPos: Int64; NewOffset: Int64; begin if Assigned(FStream) then begin Result := S_OK; if SeekOrigin <> STREAM_SEEK_SET then NewOffset := Offset else begin NewOffset := Offset + FSfxLength; end; // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(NewOffset, TSeekOrigin(SeekOrigin)); if NewPos < FSfxLength then Exit(E_INVALIDARG); if Assigned(NewPosition) then NewPosition^ := NewPos - FSfxLength; end else Result := S_FALSE; end; function TSfxSevenzipOutStream.SetSize(NewSize: Int64): HRESULT; stdcall; begin if Assigned(FStream) then begin Result := S_OK; FStream.Size := NewSize + FSfxLength; end else Result := S_FALSE; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/jcl/DCJclAlternative.pas����������������������������������0000644�0001750�0000144�00000033676�15104114162�024113� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclAlternative; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, Windows, DCClassesUtf8; // JclBase.pas ----------------------------------------------------------------- type EJclError = class(Exception); TDynByteArray = array of Byte; TDynCardinalArray = array of Cardinal; type JclBase = class type PPInt64 = ^PInt64; end; // JclStreams.pas -------------------------------------------------------------- type TJclStream = TStream; TJclOnVolume = function(Index: Integer): TStream of object; TJclOnVolumeMaxSize = function(Index: Integer): Int64 of object; type { TJclDynamicSplitStream } TJclDynamicSplitStream = class(TJclStream) private FVolume: TStream; FOnVolume: TJclOnVolume; FOnVolumeMaxSize: TJclOnVolumeMaxSize; private function LoadVolume: Boolean; function GetVolume(Index: Integer): TStream; function GetVolumeMaxSize(Index: Integer): Int64; protected function GetSize: Int64; override; procedure SetSize(const NewSize: Int64); override; public constructor Create(ADummy: Boolean = False); function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Read(var Buffer; Count: LongInt): LongInt; override; function Write(const Buffer; Count: LongInt): LongInt; override; property OnVolume: TJclOnVolume read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclOnVolumeMaxSize read FOnVolumeMaxSize write FOnVolumeMaxSize; end; function StreamCopy(Source, Target: TStream): Int64; // JclDateTime.pas ------------------------------------------------------------- function LocalDateTimeToFileTime(DateTime: TDateTime): TFileTime; // JclFileUtils.pas ------------------------------------------------------------ const DirDelimiter = DirectorySeparator; DirSeparator = PathSeparator; type TJclOnAddDirectory = procedure(const Directory: String) of object; TJclOnAddFile = procedure(const Directory: String; const FileInfo: TSearchRec) of object; function PathAddSeparator(const Path: String): String; inline; function PathRemoveSeparator(const Path: String): String; inline; function PathGetRelativePath(const Base, Path: String): String; inline; function PathCanonicalize(const Path: WideString): WideString; function IsFileNameMatch(const FileName, Mask: WideString): Boolean; inline; procedure BuildFileList(const SourceFile: String; FileAttr: Integer; InnerList: TStrings; Dummy: Boolean); procedure EnumFiles(const Path: String; OnAddFile: TJclOnAddFile; ExcludeAttributes: Integer); procedure EnumDirectories(const Path: String; OnAddDirectory: TJclOnAddDirectory; DummyBoolean: Boolean; const DummyString: String; DummyPointer: Pointer); function FileDelete(const FileName: String): Boolean; inline; function FindUnusedFileName(const FileName, FileExt: String): String; function FileMove(const OldName, NewName: String; Replace: Boolean = False): Boolean; // JclSysUtils.pas ------------------------------------------------------------- type TModuleHandle = TLibHandle; const INVALID_MODULEHANDLE_VALUE = NilHandle; type JclSysUtils = class class function LoadModule(var Module: TModuleHandle; FileName: String): Boolean; class procedure UnloadModule(var Module: TModuleHandle); end; function GUIDEquals(const GUID1, GUID2: TGUID): Boolean; inline; function GetModuleSymbol(Module: TModuleHandle; SymbolName: String): Pointer; inline; // JclStrings.pas -------------------------------------------------------------- procedure StrTokenToStrings(const Token: String; Separator: AnsiChar; var Strings: TStrings); // JclWideStrings.pas ---------------------------------------------------------- type TFPWideStrObjMap = specialize TFPGMap<WideString, TObject>; type { TJclWideStringList } TJclWideStringList = class(TFPWideStrObjMap) private FCaseSensitive: Boolean; private procedure SetCaseSensitive(AValue: Boolean); function CompareWideStringProc(Key1, Key2: Pointer): Integer; function CompareTextWideStringProc(Key1, Key2: Pointer): Integer; protected function Get(Index: Integer): WideString; function GetObject(Index: Integer): TObject; procedure Put(Index: Integer; const S: WideString); procedure PutObject(Index: Integer; AObject: TObject); public constructor Create; function AddObject(const S: WideString; AObject: TObject): Integer; property CaseSensitive: Boolean read FCaseSensitive write SetCaseSensitive; property Objects[Index: Integer]: TObject read GetObject write PutObject; property Strings[Index: Integer]: WideString read Get write Put; default; end; // Classes.pas ----------------------------------------------------------------- type TFileStream = TFileStreamEx; // SysUtils.pas ---------------------------------------------------------------- function FileExists(const FileName: String): Boolean; inline; // Windows.pas ----------------------------------------------------------------- function CreateFile(lpFileName: LPCSTR; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; inline; function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_LEVELS; lpFileInformation: Pointer): BOOL; inline; implementation uses LazFileUtils, DCOSUtils, DCWindows; function StreamCopy(Source, Target: TStream): Int64; begin Result:= Target.CopyFrom(Source, Source.Size); end; function LocalDateTimeToFileTime(DateTime: TDateTime): TFileTime; begin Int64(Result) := Round((Extended(DateTime) + 109205.0) * 864000000000.0); Windows.LocalFileTimeToFileTime(@Result, @Result); end; function PathAddSeparator(const Path: String): String; begin Result:= IncludeTrailingPathDelimiter(Path); end; function PathRemoveSeparator(const Path: String): String; begin Result:= ExcludeTrailingPathDelimiter(Path); end; function PathGetRelativePath(const Base, Path: String): String; begin Result:= ExtractRelativePath(Base, Path); end; function PathMatchSpecW(pszFile, pszSpec: LPCWSTR): BOOL; stdcall; external 'shlwapi.dll'; function PathCanonicalizeW(lpszDst, lpszSrc: LPCWSTR): BOOL; stdcall; external 'shlwapi.dll'; function PathCanonicalize(const Path: WideString): WideString; begin SetLength(Result, MAX_PATH); if PathCanonicalizeW(PWideChar(Result), PWideChar(Path)) then Result:= PWideChar(Result) else begin Result:= EmptyWideStr; end; end; function IsFileNameMatch(const FileName, Mask: WideString): Boolean; begin Result:= PathMatchSpecW(PWideChar(FileName), PWideChar(Mask)); end; procedure BuildFileList(const SourceFile: String; FileAttr: Integer; InnerList: TStrings; Dummy: Boolean); begin raise Exception.Create('Not implemented'); end; procedure EnumFiles(const Path: String; OnAddFile: TJclOnAddFile; ExcludeAttributes: Integer); begin raise Exception.Create('Not implemented'); end; procedure EnumDirectories(const Path: String; OnAddDirectory: TJclOnAddDirectory; DummyBoolean: Boolean; const DummyString: String; DummyPointer: Pointer); begin raise Exception.Create('Not implemented'); end; function FileDelete(const FileName: String): Boolean; begin Result:= mbDeleteFile(FileName); end; function FindUnusedFileName(const FileName, FileExt: String): String; var Counter: Int64 = 0; begin Result:= FileName + ExtensionSeparator + FileExt; if FileExists(Result) then repeat Inc(Counter); Result:= FileName + IntToStr(Counter) + ExtensionSeparator + FileExt; until not FileExists(Result); end; function FileMove(const OldName, NewName: String; Replace: Boolean): Boolean; const dwFlags: array[Boolean] of DWORD = (0, MOVEFILE_REPLACE_EXISTING); begin Result:= MoveFileExW(PWideChar(UTF16LongName(OldName)), PWideChar(UTF16LongName(NewName)), dwFlags[Replace] or MOVEFILE_COPY_ALLOWED); end; function GUIDEquals(const GUID1, GUID2: TGUID): Boolean; begin Result:= IsEqualGUID(GUID1, GUID2); end; class function JclSysUtils.LoadModule(var Module: TModuleHandle; FileName: String): Boolean; begin Module:= mbLoadLibrary(FileName); Result:= Module <> INVALID_MODULEHANDLE_VALUE; end; function GetModuleSymbol(Module: TModuleHandle; SymbolName: String): Pointer; begin Result:= GetProcAddress(Module, PAnsiChar(SymbolName)); end; class procedure JclSysUtils.UnloadModule(var Module: TModuleHandle); begin if Module <> INVALID_MODULEHANDLE_VALUE then begin FreeLibrary(Module); Module:= INVALID_MODULEHANDLE_VALUE; end; end; procedure StrTokenToStrings(const Token: String; Separator: AnsiChar; var Strings: TStrings); var Start: Integer = 1; Len, Finish: Integer; begin Len:= Length(Token); Strings.BeginUpdate; try Strings.Clear; for Finish:= 1 to Len - 1 do begin if Token[Finish] = Separator then begin Strings.Add(Copy(Token, Start, Finish - Start)); Start:= Finish + 1; end; end; if Start <= Len then begin Strings.Add(Copy(Token, Start, Len - Start + 1)); end; finally Strings.EndUpdate; end; end; function FileExists(const FileName: String): Boolean; begin Result:= mbFileExists(FileName); end; function CreateFile(lpFileName: LPCSTR; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; begin Result:= CreateFileW(PWideChar(UTF16LongName(lpFileName)), dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); end; function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_LEVELS; lpFileInformation: Pointer): BOOL; begin Result:= GetFileAttributesExW(PWideChar(UTF16LongName(lpFileName)), fInfoLevelId, lpFileInformation); end; { TJclDynamicSplitStream } function TJclDynamicSplitStream.LoadVolume: Boolean; begin Result:= Assigned(FVolume); if not Result then begin FVolume:= GetVolume(0); GetVolumeMaxSize(0); Result := Assigned(FVolume); if Result then FVolume.Seek(0, soBeginning); end; end; function TJclDynamicSplitStream.GetVolume(Index: Integer): TStream; begin if Assigned(FOnVolume) then Result:= FOnVolume(Index) else begin Result:= nil; end; end; function TJclDynamicSplitStream.GetVolumeMaxSize(Index: Integer): Int64; begin if Assigned(FOnVolumeMaxSize) then Result:= FOnVolumeMaxSize(Index) else begin Result:= 0; end; end; function TJclDynamicSplitStream.GetSize: Int64; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Size; end; end; procedure TJclDynamicSplitStream.SetSize(const NewSize: Int64); begin if LoadVolume then FVolume.Size:= NewSize; end; constructor TJclDynamicSplitStream.Create(ADummy: Boolean); begin inherited Create; end; function TJclDynamicSplitStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Seek(Offset, Origin); end; end; function TJclDynamicSplitStream.Read(var Buffer; Count: LongInt): LongInt; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Read(Buffer, Count); end; end; function TJclDynamicSplitStream.Write(const Buffer; Count: LongInt): LongInt; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Write(Buffer, Count); end; end; { TJclWideStringList } procedure TJclWideStringList.SetCaseSensitive(AValue: Boolean); begin if FCaseSensitive <> AValue then begin FCaseSensitive:= AValue; if FCaseSensitive then OnKeyPtrCompare := @CompareWideStringProc else begin OnKeyPtrCompare := @CompareTextWideStringProc; end; if Sorted then Sort; end; end; function TJclWideStringList.Get(Index: Integer): WideString; begin Result := Keys[Index]; end; function TJclWideStringList.GetObject(Index: Integer): TObject; begin Result := Data[Index]; end; procedure TJclWideStringList.Put(Index: Integer; const S: WideString); begin Keys[Index] := S; end; procedure TJclWideStringList.PutObject(Index: Integer; AObject: TObject); begin Data[Index] := AObject; end; function TJclWideStringList.CompareWideStringProc(Key1, Key2: Pointer): Integer; begin {$if FPC_FULLVERSION<30002} Result:= WideStringManager.CompareWideStringProc(WideString(Key1^), WideString(Key2^)); {$else} Result:= WideStringManager.CompareWideStringProc(WideString(Key1^), WideString(Key2^), []); {$endif} end; function TJclWideStringList.CompareTextWideStringProc(Key1, Key2: Pointer): Integer; begin {$if FPC_FULLVERSION<30002} Result:= WideStringManager.CompareTextWideStringProc(WideString(Key1^), WideString(Key2^)); {$else} Result:= WideStringManager.CompareWideStringProc(WideString(Key1^), WideString(Key2^), [coIgnoreCase]); {$endif} end; constructor TJclWideStringList.Create; begin inherited Create; OnKeyPtrCompare := @CompareTextWideStringProc; end; function TJclWideStringList.AddObject(const S: WideString; AObject: TObject): Integer; begin Result:= inherited Add(S, AObject); end; end. ������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipWcx.lpi�������������������������������������������0000644�0001750�0000144�00000012130�15104114162�022431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="SevenZipWcx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MajorVersionNr Value="24"/> <MinorVersionNr Value="11"/> <RevisionNr Value="4"/> <CharSet Value="04B0"/> <StringTable FileDescription="SevenZip archiver plugin" InternalName="SevenZip" LegalCopyright="Copyright (C) 2014-2024 Alexander Koblov"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\sevenzip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk;jcl\common;jcl\windows;jcl;platform"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CustomOptions Value="-dUNICODE_CTRLS"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <HostApplicationFilename Value="D:\doublecmd\doublecmd.exe"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <HostApplicationFilename Value="D:\doublecmd\doublecmd.exe"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="2"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> <Item2> <PackageName Value="LazUtils"/> </Item2> </RequiredPackages> <Units Count="6"> <Unit0> <Filename Value="SevenZipWcx.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="SevenZipFunc.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="SevenZipAdv.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="SevenZipDlg.pas"/> <IsPartOfProject Value="True"/> </Unit3> <Unit4> <Filename Value="SevenZipLng.pas"/> <IsPartOfProject Value="True"/> </Unit4> <Unit5> <Filename Value="SevenZipCodecs.pas"/> <IsPartOfProject Value="True"/> </Unit5> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\sevenzip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk;jcl\common;jcl\windows;jcl;platform"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> <CustomOptions Value="-dUNICODE_CTRLS"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipWcx.dpr�������������������������������������������0000644�0001750�0000144�00000003465�15104114162�022445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library SevenZipWcx; uses CMem, FPCAdds, SevenZipFunc, SevenZipDlg, WcxPlugin, SevenZipAdv, SevenZipLng, SevenZipCodecs; function OpenArchive(var ArchiveData : tOpenArchiveData) : TArcHandle; stdcall; begin Result:= 0; ArchiveData.OpenResult:= E_NOT_SUPPORTED; end; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PAnsiChar) : Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc); stdcall; begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); stdcall; begin end; function PackFiles(PackedFile, SubPath, SrcPath, AddList: PAnsiChar; Flags: Integer): Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function DeleteFiles(PackedFile, DeleteList: PAnsiChar): Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function GetBackgroundFlags: Integer; stdcall; begin Result:= BACKGROUND_UNPACK or BACKGROUND_PACK; end; function GetPackerCaps : Integer; stdcall; begin Result:= PK_CAPS_NEW or PK_CAPS_DELETE or PK_CAPS_MODIFY or PK_CAPS_MULTIPLE or PK_CAPS_OPTIONS or PK_CAPS_ENCRYPT; end; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } PackFiles, PackFilesW, DeleteFiles, DeleteFilesW, GetPackerCaps, ConfigurePacker, GetBackgroundFlags, PackSetDefaultParams, CanYouHandleThisFileW ; {$R *.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipOpt.pas�������������������������������������������0000644�0001750�0000144�00000037767�15104114162�022460� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, compression options Copyright (C) 2014-2017 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipOpt; {$mode delphi} interface uses Classes, SysUtils, Windows, IniFiles, JclCompression, SevenZip; const cKilo = 1024; cMega = cKilo * cKilo; cGiga = cKilo * cKilo * cKilo; const kNoSolidBlockSize = 0; kSolidBlockSize = 64; const DeflateDict: array[0..0] of PtrInt = ( cKilo * 32 ); Deflate64Dict: array[0..0] of PtrInt = ( cKilo * 64 ); Bzip2Dict: array[0..8] of PtrInt = ( cKilo * 100, cKilo * 200, cKilo * 300, cKilo * 400, cKilo * 500, cKilo * 600, cKilo * 700, cKilo * 800, cKilo * 900 ); LZMADict: array[0..21] of PtrInt = ( cKilo * 64, cMega, cMega * 2, cMega * 3, cMega * 4, cMega * 6, cMega * 8, cMega * 12, cMega * 16, cMega * 24, cMega * 32, cMega * 48, cMega * 64, cMega * 96, cMega * 128, cMega * 192, cMega * 256, cMega * 384, cMega * 512, cMega * 768, cMega * 1024, cMega * 1536 ); PPMdDict: array[0..19] of PtrInt = ( cMega, cMega * 2, cMega * 3, cMega * 4, cMega * 6, cMega * 8, cMega * 12, cMega * 16, cMega * 24, cMega * 32, cMega * 48, cMega * 64, cMega * 96, cMega * 128, cMega * 192, cMega * 256, cMega * 384, cMega * 512, cMega * 768, cMega * 1024 ); DeflateWordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 258); Deflate64WordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 257); LZMAWordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 273); PPMdWordSize: array[0..14] of PtrInt = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); // Stored as block size / 1024 SolidBlock: array[0..16] of PtrInt = ( cKilo, cKilo * 2, cKilo * 4, cKilo * 8, cKilo * 16, cKilo * 32, cKilo * 64, cKilo * 128, cKilo * 256, cKilo * 512, cMega, cMega * 2, cMega * 4, cMega * 8, cMega * 16, cMega * 32, cMega * 64 ); const TargetCPU = {$I %FPCTARGETCPU%}; // Target CPU of FPC type TCompressionLevel = ( clStore = 0, clFastest = 1, clFast = 3, clNormal = 5, clMaximum = 7, clUltra = 9 ); TArchiveFormat = (afSevenZip, afBzip2, afGzip, afTar, afWim, afXz, afZip); PPasswordData = ^TPasswordData; TPasswordData = record EncryptHeader: Boolean; Password: array[0..MAX_PATH] of WideChar; end; TFormatOptions = record Level: PtrInt; Method: PtrInt; Dictionary: PtrInt; WordSize: PtrInt; SolidSize: PtrInt; ThreadCount: PtrInt; ArchiveCLSID: PGUID; Parameters: WideString; end; function GetNumberOfProcessors: LongWord; function FormatFileSize(ASize: Int64; AGiga: Boolean = True): String; procedure SetArchiveOptions(AJclArchive: IInterface); procedure LoadConfiguration; procedure SaveConfiguration; const DefaultIniName = 'sevenzip.ini'; var ConfigFile: AnsiString; LibraryPath: AnsiString; const ArchiveExtension: array[TArchiveFormat] of WideString = ('7z', 'bzip2', 'gzip', 'tar', 'wim', 'xz', 'zip'); const MethodName: array [TJclCompressionMethod] of WideString = (kCopyMethodName, kDeflateMethodName, kDeflate64MethodName, kBZip2MethodName, kLZMAMethodName, kLZMA2MethodName, kPPMdMethodName); const DefaultConfig: array[TArchiveFormat] of TFormatOptions = ( (Level: PtrInt(clNormal); Method: PtrInt(cmLZMA2); Dictionary: cMega * 16; WordSize: 32; SolidSize: cMega * 2; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormat7z; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmBZip2); Dictionary: cKilo * 900; WordSize: 0; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatBZ2; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmDeflate); Dictionary: cKilo * 32; WordSize: 32; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatGZip; Parameters: '';), (Level: PtrInt(clStore); Method: 0; Dictionary: 0; WordSize: 0; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatTar; Parameters: '';), (Level: PtrInt(clStore); Method: 0; Dictionary: 0; WordSize: 0; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatWim; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmLZMA2); Dictionary: cMega * 16; WordSize: 32; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatXz; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmDeflate); Dictionary: cKilo * 32; WordSize: 32; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatZip; Parameters: '';) ); var PluginConfig: array[TArchiveFormat] of TFormatOptions; implementation uses ActiveX, LazUTF8, SevenZipAdv, SevenZipCodecs; function GetNumberOfProcessors: LongWord; var SystemInfo: TSYSTEMINFO; begin GetSystemInfo(@SystemInfo); Result:= SystemInfo.dwNumberOfProcessors; end; function FormatFileSize(ASize: Int64; AGiga: Boolean): String; begin if ((ASize div cGiga) > 0) and AGiga then Result:= IntToStr(ASize div cGiga) + ' GB' else if (ASize div cMega) >0 then Result:= IntToStr(ASize div cMega) + ' MB' else if (ASize div cKilo) > 0 then Result:= IntToStr(ASize div cKilo) + ' KB' else Result:= IntToStr(ASize); end; procedure SetArchiveCustom(AJclArchive: IInterface; AFormat: TArchiveFormat); var Index: Integer; Start: Integer = 1; Parameters: WideString; MethodStandard: Boolean; Method: TJclCompressionMethod; JclArchive: TJclCompressionArchive; procedure AddProperty(const Name: WideString; const Value: TPropVariant); begin with JclArchive do begin SetLength(PropNames, Length(PropNames) + 1); PropNames[High(PropNames)] := Name; SetLength(PropValues, Length(PropValues) + 1); PropValues[High(PropValues)] := Value; end; end; procedure AddCardinalProperty(const Name: WideString; Value: Cardinal); var PropValue: TPropVariant; begin PropValue.vt := VT_UI4; PropValue.ulVal := Value; AddProperty(Name, PropValue); end; procedure AddWideStringProperty(const Name: WideString; const Value: WideString); var PropValue: TPropVariant; begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(Value)); AddProperty(Name, PropValue); end; procedure AddOption(Finish: Integer); var C: WideChar; IValue: Int64; PropValue: TPropVariant; Option, Value: WideString; begin Option:= Copy(Parameters, Start, Finish - Start); Start:= Pos('=', Option); if Start = 0 then begin PropValue.vt:= VT_EMPTY; C:= Option[Length(Option)]; if C = '+' then Variant(PropValue):= True else if C = '-' then begin Variant(PropValue):= False; end; if (PropValue.vt <> VT_EMPTY) then begin Delete(Option, Length(Option), 1); end; AddProperty(Option, PropValue); end else begin Value:= Copy(Option, Start + 1, MaxInt); SetLength(Option, Start - 1); if TryStrToInt64(AnsiString(Value), IValue) then AddCardinalProperty(Option, IValue) else AddWideStringProperty(Option, Value); end; end; begin JclArchive:= AJclArchive as TJclCompressionArchive; // Parse additional parameters Parameters:= Trim(PluginConfig[AFormat].Parameters); if Length(Parameters) > 0 then begin for Index:= 1 to Length(Parameters) do begin if Parameters[Index] = #32 then begin AddOption(Index); Start:= Index + 1; end; end; AddOption(MaxInt); end; Parameters:= WideUpperCase(Parameters); MethodStandard:= PluginConfig[AFormat].Method <= cmMaximum; // Set word size parameter if MethodStandard then begin Method:= TJclCompressionMethod(PluginConfig[AFormat].Method); case Method of cmLZMA, cmLZMA2, cmDeflate, cmDeflate64: begin if (Pos('FB=', Parameters) = 0) and (Pos('1=', Parameters) = 0) then AddCardinalProperty('fb', PluginConfig[AFormat].WordSize); end; cmPPMd: begin if Pos('O=', Parameters) = 0 then AddCardinalProperty('o', PluginConfig[AFormat].WordSize); end; end; end; // Set 7-zip compression method if IsEqualGUID(CLSID_CFormat7z, PluginConfig[AFormat].ArchiveCLSID^) then begin if Pos('0=', Parameters) = 0 then begin if MethodStandard then AddWideStringProperty('0', MethodName[Method]) else begin AddWideStringProperty('0', GetCodecName(PluginConfig[AFormat].Method)); end; end; if MethodStandard then begin if (Method > cmCopy) and (Method < cmPPMd) and (Pos('D=', Parameters) = 0) then begin AddWideStringProperty('D', WideString(IntToStr(PluginConfig[AFormat].Dictionary) + 'B')); end else if (Method = cmPPMd) and (Pos('MEM=', Parameters) = 0) then begin AddWideStringProperty('MEM', WideString(IntToStr(PluginConfig[AFormat].Dictionary) + 'B')); end; end; end; end; procedure SetArchiveOptions(AJclArchive: IInterface); var MethodStd: Boolean; ArchiveCLSID: TGUID; SolidBlockSize: Int64; Index: TArchiveFormat; Solid: IJclArchiveSolid; CompressHeader: IJclArchiveCompressHeader; DictionarySize: IJclArchiveDictionarySize; CompressionLevel: IJclArchiveCompressionLevel; MultiThreadStrategy: IJclArchiveNumberOfThreads; CompressionMethod: IJclArchiveCompressionMethod; SaveCreationDateTime: IJclArchiveSaveCreationDateTime; SaveLastAccessDateTime: IJclArchiveSaveLastAccessDateTime; begin if AJclArchive is TJclSevenzipCompressArchive then ArchiveCLSID:= (AJclArchive as TJclSevenzipCompressArchive).ArchiveCLSID else begin ArchiveCLSID:= (AJclArchive as TJclSevenzipUpdateArchive).ArchiveCLSID end; for Index:= Low(PluginConfig) to High(PluginConfig) do begin if IsEqualGUID(ArchiveCLSID, PluginConfig[Index].ArchiveCLSID^) then begin MethodStd:= (PluginConfig[Index].Method <= cmMaximum); if MethodStd and Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) then CompressionMethod.SetCompressionMethod(TJclCompressionMethod(PluginConfig[Index].Method)); if Supports(AJclArchive, IJclArchiveCompressionLevel, CompressionLevel) and Assigned(CompressionLevel) then CompressionLevel.SetCompressionLevel(PluginConfig[Index].Level); if PluginConfig[Index].Level <> PtrInt(clStore) then begin if MethodStd and Supports(AJclArchive, IJclArchiveDictionarySize, DictionarySize) and Assigned(DictionarySize) then DictionarySize.SetDictionarySize(PluginConfig[Index].Dictionary); if Supports(AJclArchive, IJclArchiveSolid, Solid) and Assigned(Solid) then begin SolidBlockSize:= Int64(PluginConfig[Index].SolidSize); if SolidBlockSize <> kSolidBlockSize then SolidBlockSize:= SolidBlockSize * cKilo; Solid.SetSolidBlockSize(SolidBlockSize); end; if Supports(AJclArchive, IJclArchiveNumberOfThreads, MultiThreadStrategy) and Assigned(MultiThreadStrategy) then MultiThreadStrategy.SetNumberOfThreads(PluginConfig[Index].ThreadCount); if Supports(AJclArchive, IJclArchiveSaveCreationDateTime, SaveCreationDateTime) and Assigned(SaveCreationDateTime) then SaveCreationDateTime.SetSaveCreationDateTime(False); if Supports(AJclArchive, IJclArchiveSaveLastAccessDateTime, SaveLastAccessDateTime) and Assigned(SaveLastAccessDateTime) then SaveLastAccessDateTime.SetSaveLastAccessDateTime(False); if Supports(AJclArchive, IJclArchiveCompressHeader, CompressHeader) and Assigned(CompressHeader) then CompressHeader.SetCompressHeader(True); end; try SetArchiveCustom(AJclArchive, Index); except on E: Exception do MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR); end; Exit; end; end; end; procedure LoadConfiguration; var Ini: TIniFile; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFile.Create(ConfigFile); try LibraryPath:= Ini.ReadString('Library', TargetCPU, EmptyStr); LibraryPath:= Utf16ToUtf8(ExpandEnvironmentStrings(UTF8ToUTF16(LibraryPath))); for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do begin Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^); PluginConfig[ArchiveFormat].Level:= Ini.ReadInteger(Section, 'Level', DefaultConfig[ArchiveFormat].Level); PluginConfig[ArchiveFormat].Method:= Ini.ReadInteger(Section, 'Method', DefaultConfig[ArchiveFormat].Method); PluginConfig[ArchiveFormat].Dictionary:= Ini.ReadInteger(Section, 'Dictionary', DefaultConfig[ArchiveFormat].Dictionary); PluginConfig[ArchiveFormat].WordSize:= Ini.ReadInteger(Section, 'WordSize', DefaultConfig[ArchiveFormat].WordSize); PluginConfig[ArchiveFormat].SolidSize:= Ini.ReadInteger(Section, 'SolidSize', DefaultConfig[ArchiveFormat].SolidSize); PluginConfig[ArchiveFormat].ThreadCount:= Ini.ReadInteger(Section, 'ThreadCount', DefaultConfig[ArchiveFormat].ThreadCount); PluginConfig[ArchiveFormat].Parameters:= Ini.ReadString(Section, 'Parameters', DefaultConfig[ArchiveFormat].Parameters); end; finally Ini.Free; end; except on E: Exception do MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR); end; end; procedure SaveConfiguration; var Ini: TIniFile; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFile.Create(ConfigFile); try for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do begin Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^); Ini.WriteString(Section, 'Format', ArchiveExtension[ArchiveFormat]); Ini.WriteInteger(Section, 'Level', PluginConfig[ArchiveFormat].Level); Ini.WriteInteger(Section, 'Method', PluginConfig[ArchiveFormat].Method); Ini.WriteInteger(Section, 'Dictionary', PluginConfig[ArchiveFormat].Dictionary); Ini.WriteInteger(Section, 'WordSize', PluginConfig[ArchiveFormat].WordSize); Ini.WriteInteger(Section, 'SolidSize', PluginConfig[ArchiveFormat].SolidSize); Ini.WriteInteger(Section, 'ThreadCount', PluginConfig[ArchiveFormat].ThreadCount); Ini.WriteString(Section, 'Parameters', PluginConfig[ArchiveFormat].Parameters); end; finally Ini.Free; end; except on E: Exception do MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR); end; end; initialization CopyMemory(@PluginConfig[Low(PluginConfig)], @DefaultConfig[Low(DefaultConfig)], SizeOf(PluginConfig)); end. ���������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipLng.pas�������������������������������������������0000644�0001750�0000144�00000002763�15104114162�022422� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, language support Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipLng; {$mode delphi} interface uses Classes, SysUtils; resourcestring rsSevenZipLoadError = 'Failed to load 7z.dll'; rsSevenZipSfxNotFound = 'Cannot find specified SFX module'; resourcestring rsCompressionLevelStore = 'Store'; rsCompressionLevelFastest = 'Fastest'; rsCompressionLevelFast = 'Fast'; rsCompressionLevelNormal = 'Normal'; rsCompressionLevelMaximum = 'Maximum'; rsCompressionLevelUltra = 'Ultra'; rsSolidBlockSolid = 'Solid'; rsSolidBlockNonSolid = 'Non-solid'; implementation end. �������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipFunc.pas������������������������������������������0000644�0001750�0000144�00000054220�15104114162�022570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2014-2022 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipFunc; {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} interface uses WcxPlugin; { Mandatory } function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;stdcall; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;stdcall; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;stdcall; function CloseArchive (hArcData : TArcHandle) : Integer;stdcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);stdcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);stdcall; { Optional } function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; stdcall; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; stdcall; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; stdcall; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); stdcall; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); stdcall; implementation uses JwaWinBase, Windows, SysUtils, Classes, JclCompression, SevenZip, SevenZipAdv, fpTimer, SevenZipDlg, SevenZipLng, SevenZipOpt, LazFileUtils, SyncObjs, LazUTF8, SevenZipCodecs; type { ESevenZipAbort } ESevenZipAbort = class(EJclCompressionError) end; { TSevenZipUpdate } TSevenZipUpdate = class(TThread) FPercent: Int64; FFileName: WideString; FPause: TEventObject; FProgress: TEventObject; FArchive: TJclCompressionArchive; public constructor Create; overload; constructor Create(Archive: TJclCompressionArchive); overload; destructor Destroy; override; public procedure Execute; override; function Update: Integer; virtual; procedure JclCompressionPassword(Sender: TObject; var Password: WideString); procedure JclCompressionProgress(Sender: TObject; const Value, MaxValue: Int64); virtual; end; { TSevenZipHandle } TSevenZipHandle = class(TSevenZipUpdate) Index, Count: LongWord; OpenMode, OperationMode: Integer; ProcessIndex: Cardinal; ArchiveName: String; ProcessArray: TCardinalArray; FileName: array of String; ProcessDataProc: TProcessDataProcW; public procedure Execute; override; function Update: Integer; override; procedure SetArchive(AValue: TJclDecompressArchive); function JclCompressionExtract(Sender: TObject; AIndex: Integer; var AFileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean; end; { TPasswordCache } TPasswordCache = class private FTimer: TFPTimer; FArchiveSize: Int64; FArchiveName: String; FArchiveTime: Integer; FMutex: TCriticalSection; FArchivePassword: WideString; const FInterval: Cardinal = 120000; private procedure ResetTimer; procedure ZeroPassword; procedure TimerEvent(Sender: TObject); public constructor Create; destructor Destroy; override; function GetPassword(const Archive: String): WideString; procedure SetPassword(const Archive: String; const Password: WideString); end; var PasswordCache: TPasswordCache; threadvar ProcessDataProcT: TProcessDataProcW; function GetArchiveError(const E: Exception): Integer; begin if E is EFOpenError then Result:= E_EOPEN else if E is EFCreateError then Result:= E_ECREATE else if E is EReadError then Result:= E_EREAD else if E is EWriteError then Result:= E_EWRITE else if E is ESevenZipAbort then Result:= E_EABORTED else if Pos(HexStr(E_OUTOFMEMORY, 8), E.Message) > 0 then Result:= E_NO_MEMORY else begin Result:= E_UNKNOWN_FORMAT; end; end; function WinToDosTime(const WinTime: TFILETIME; var DosTime: Cardinal): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle; stdcall; var I: Integer; ResultHandle: TSevenZipHandle; Archive: TJclDecompressArchive; AFormats: TJclDecompressArchiveClassArray; begin ResultHandle:= TSevenZipHandle.Create; with ResultHandle do begin Index:= 0; ProcessIndex:= 0; OpenMode:= ArchiveData.OpenMode; ArchiveName := Utf16ToUtf8(WideString(ArchiveData.ArcName)); AFormats := FindDecompressFormats(ArchiveName); for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(ArchiveName, 0, False); try SetArchive(Archive); Archive.Password:= PasswordCache.GetPassword(ArchiveName); Archive.ListFiles; PasswordCache.SetPassword(ArchiveName, Archive.Password); Count:= Archive.ItemCount; if OpenMode = PK_OM_EXTRACT then begin SetLength(FileName, Count); SetLength(ProcessArray, Count); end; ArchiveData.OpenResult:= E_SUCCESS; Exit(TArcHandle(ResultHandle)); except on E: Exception do begin ArchiveData.OpenResult:= GetArchiveError(E); FreeAndNil(Archive); Continue; end; end; end; if (Archive = nil) then Free; end; Result:= 0; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer; stdcall; var FileNameW: UnicodeString; Item: TJclCompressionItem; Handle: TSevenZipHandle absolute hArcData; begin with Handle do begin if Index >= Count then Exit(E_END_ARCHIVE); Item:= FArchive.Items[Index]; FileNameW:= Item.PackedName; HeaderData.UnpSize:= Int64Rec(Item.FileSize).Lo; HeaderData.UnpSizeHigh:= Int64Rec(Item.FileSize).Hi; HeaderData.PackSize:= Int64Rec(Item.PackedSize).Lo; HeaderData.PackSizeHigh:= Int64Rec(Item.PackedSize).Hi; if ipAttributes in Item.ValidProperties then HeaderData.FileAttr:= LongInt(Item.Attributes) else begin HeaderData.FileAttr:= FILE_ATTRIBUTE_ARCHIVE; end; HeaderData.MfileTime:= UInt64(Item.LastWriteTime); WinToDosTime(Item.LastWriteTime, LongWord(HeaderData.FileTime)); if Item.Encrypted then begin HeaderData.Flags:= RHDF_ENCRYPTED; end; // Special case for absolute file name if (Length(FileNameW) > 0) and (FileNameW[1] = PathDelim) then HeaderData.FileName:= Copy(FileNameW, 2, Length(FileNameW) - 1) else begin HeaderData.FileName:= FileNameW; end; // Special case for BZip2, GZip and Xz archives if (HeaderData.FileName[0] = #0) then begin HeaderData.FileName:= GetNestedArchiveName(ArchiveName, Item); end; end; Result:= E_SUCCESS; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; stdcall; var Handle: TSevenZipHandle absolute hArcData; begin try with Handle do case Operation of PK_TEST, PK_EXTRACT: begin if Operation = PK_EXTRACT then begin if Assigned(DestPath) then begin FileName[Index]:= IncludeTrailingPathDelimiter(Utf16ToUtf8(WideString(DestPath))) + Utf16ToUtf8(WideString(DestName)); end else begin FileName[Index]:= Utf16ToUtf8(WideString(DestName)); end; end; Result:= E_SUCCESS; OperationMode:= Operation; ProcessArray[ProcessIndex]:= Index; Inc(ProcessIndex); end; else Result:= E_SUCCESS; end; finally Inc(Handle.Index); end; end; function CloseArchive(hArcData: TArcHandle): Integer; stdcall; var Handle: TSevenZipHandle absolute hArcData; begin Result:= E_SUCCESS; if (hArcData <> wcxInvalidHandle) then with Handle do begin if OpenMode = PK_OM_EXTRACT then begin Start; Update; end; FArchive.Free; Free; end; end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW); stdcall; begin end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW); stdcall; var Handle: TSevenZipHandle absolute hArcData; begin if (hArcData = wcxInvalidHandle) then ProcessDataProcT:= pProcessDataProc else begin Handle.ProcessDataProc:= pProcessDataProc; end; end; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; stdcall; var I, J: Integer; Encrypt: Boolean; AMessage: String; Password: WideString; FilePath: WideString; FileName: WideString; SfxModule: String = ''; FileNameUTF8: String; AItem: TJclCompressionItem; AProgress: TSevenZipUpdate; Archive: TJclCompressArchive; AFormats: TJclCompressArchiveClassArray; begin FileNameUTF8 := Utf16ToUtf8(WideString(PackedFile)); // If update existing archive if (GetFileAttributesW(PackedFile) <> INVALID_FILE_ATTRIBUTES) then AFormats := TJclCompressArchiveClassArray(FindUpdateFormats(FileNameUTF8)) else begin if not SameText(ExtractFileExt(FileNameUTF8), '.exe') then AFormats := FindCompressFormats(FileNameUTF8) else begin // Only 7-Zip supports self-extract SfxModule := ExtractFilePath(SevenzipLibraryName) + '7z.sfx'; if FileExistsUTF8(SfxModule) then begin SetLength(AFormats, 1); AFormats[0] := TJcl7zCompressArchive; end else begin AMessage := SysErrorMessage(GetLastError) + LineEnding; AMessage += rsSevenZipSfxNotFound + LineEnding + SfxModule; MessageBoxW(0, PWideChar(UTF8ToUTF16(AMessage)), nil, MB_OK or MB_ICONERROR); Exit(E_NO_FILES); end; end; end; for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(FileNameUTF8, 0, False); try AProgress:= TSevenZipUpdate.Create(Archive); if (Flags and PK_PACK_ENCRYPT) <> 0 then begin Encrypt:= Archive is IJclArchiveEncryptHeader; if not ShowPasswordQuery(Encrypt, Password) then Exit(E_EABORTED) else begin Archive.Password:= Password; if Archive is TJcl7zUpdateArchive then TJcl7zUpdateArchive(Archive).SetEncryptHeader(Encrypt); if Archive is TJcl7zCompressArchive then TJcl7zCompressArchive(Archive).SetEncryptHeader(Encrypt); if Archive is TJclZipUpdateArchive then TJclZipUpdateArchive(Archive).SetEncryptionMethod(emAES256); if Archive is TJclZipCompressArchive then TJclZipCompressArchive(Archive).SetEncryptionMethod(emAES256); end; end; if (Archive is TJclUpdateArchive) then try TJclUpdateArchive(Archive).ListFiles; except Continue; end; SetArchiveOptions(Archive); if Archive is TJcl7zCompressArchive then begin TJcl7zCompressArchive(Archive).SfxModule := SfxModule; end; if Assigned(SubPath) then begin FilePath:= WideString(SubPath); if FilePath[Length(FilePath)] <> PathDelim then FilePath := FilePath + PathDelim; end; while True do begin FileName := WideString(AddList); FileNameUTF8:= Utf16ToUtf8(WideString(SrcPath + FileName)); if FileName[Length(FileName)] = PathDelim then Archive.AddDirectory(FilePath + Copy(FileName, 1, Length(FileName) - 1), FileNameUTF8) else Archive.AddFile(FilePath + FileName, FileNameUTF8); if (AddList + Length(FileName) + 1)^ = #0 then Break; Inc(AddList, Length(FileName) + 1); end; AProgress.Start; Result:= AProgress.Update; // If move files requested if (Result = E_SUCCESS) and (Flags and PK_PACK_MOVE_FILES <> 0) then begin // First remove files for J:= 0 to Archive.ItemCount - 1 do begin AItem:= Archive.Items[J]; if AItem.OperationSuccess = osOK then begin if not AItem.Directory then DeleteFileUtf8(AItem.FileName); end; end; // Second remove directories for J:= Archive.ItemCount - 1 downto 0 do begin AItem:= Archive.Items[J]; if AItem.Directory then RemoveDirUtf8(AItem.FileName); end; end; Exit; finally Archive.Free; AProgress.Free; end; end; Result:= E_NOT_SUPPORTED; end; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; stdcall; var I: Integer; PathEnd : WideChar; FileList : PWideChar; FileName : WideString; FileNameUTF8 : String; Archive: TJclUpdateArchive; AProgress: TSevenZipUpdate; AFormats: TJclUpdateArchiveClassArray; begin FileNameUTF8 := Utf16ToUtf8(WideString(PackedFile)); AFormats := FindUpdateFormats(FileNameUTF8); for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(FileNameUTF8, 0, False); try AProgress:= TSevenZipUpdate.Create(Archive); try Archive.ListFiles; except Continue; end; // Parse file list. FileList := DeleteList; while FileList^ <> #0 do begin FileName := FileList; // Convert PWideChar to WideString (up to first #0) PathEnd := (FileList + Length(FileName) - 1)^; // If ends with '.../*.*' or '.../' then delete directory. if (PathEnd = '*') or (PathEnd = PathDelim) then TJclSevenzipUpdateArchive(Archive).RemoveDirectory(WideExtractFilePath(FileName)) else TJclSevenzipUpdateArchive(Archive).RemoveItem(FileName); FileList := FileList + Length(FileName) + 1; // move after filename and ending #0 if FileList^ = #0 then Break; // end of list end; AProgress.Start; Exit(AProgress.Update); finally Archive.Free; AProgress.Free; end; end; Result:= E_NOT_SUPPORTED; end; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; stdcall; begin Result:= FindDecompressFormats(Utf16ToUtf8(WideString(FileName))) <> nil; end; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); stdcall; var ModulePath: AnsiString; begin // Save configuration file name ConfigFile:= ExtractFilePath(dps^.DefaultIniName); ConfigFile:= WinCPToUTF8(ConfigFile) + DefaultIniName; // Get plugin path if GetModulePath(ModulePath) then begin // Use configuration from plugin path if FileExistsUTF8(ModulePath + DefaultIniName) then ConfigFile:= ModulePath + DefaultIniName; end; // Load plugin configuration LoadConfiguration; // Try to find library path if FileExistsUTF8(LibraryPath) then SevenzipLibraryName:= LibraryPath else if Length(ModulePath) > 0 then begin if FileExistsUTF8(ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName) then SevenzipLibraryName:= ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName else if FileExistsUTF8(ModulePath + SevenzipDefaultLibraryName) then begin SevenzipLibraryName:= ModulePath + SevenzipDefaultLibraryName; end; end; // Process Xz files as archives GetArchiveFormats.RegisterFormat(TJclXzDecompressArchive); // Replace TJclXzCompressArchive by TJclXzCompressArchiveEx GetArchiveFormats.UnregisterFormat(TJclXzCompressArchive); GetArchiveFormats.RegisterFormat(TJclXzCompressArchiveEx); // Don't process PE files as archives GetArchiveFormats.UnregisterFormat(TJclPeDecompressArchive); // Try to load 7z.dll if (Is7ZipLoaded or Load7Zip) then LoadLibraries else begin MessageBoxW(0, PWideChar(UTF8ToUTF16(rsSevenZipLoadError)), 'SevenZip', MB_OK or MB_ICONERROR); end; // Create password cache object PasswordCache:= TPasswordCache.Create; end; procedure ConfigurePacker(Parent: WcxPlugin.HWND; DllInstance: THandle); stdcall; begin ShowConfigurationDialog(Parent); end; { TSevenZipUpdate } constructor TSevenZipUpdate.Create; begin inherited Create(True); FPause:= TEventObject.Create(nil, False, False, ''); FProgress:= TEventObject.Create(nil, False, False, ''); end; constructor TSevenZipUpdate.Create(Archive: TJclCompressionArchive); begin Create; FArchive:= Archive; Archive.OnPassword:= JclCompressionPassword; end; destructor TSevenZipUpdate.Destroy; begin FPause.Free; FProgress.Free; inherited Destroy; end; procedure TSevenZipUpdate.Execute; begin try (FArchive as TJclCompressArchive).Compress; ReturnValue:= E_SUCCESS; except on E: Exception do ReturnValue:= GetArchiveError(E); end; Terminate; FProgress.SetEvent; end; function TSevenZipUpdate.Update: Integer; begin FArchive.OnProgress:= JclCompressionProgress; while not Terminated do begin // Wait progress event FProgress.WaitFor(INFINITE); // If the user has clicked on Cancel, the function returns zero FArchive.CancelCurrentOperation:= (ProcessDataProcT(PWideChar(FFileName), -FPercent) = 0); // Drop pause FPause.SetEvent; end; Result:= ReturnValue; end; procedure TSevenZipUpdate.JclCompressionPassword(Sender: TObject; var Password: WideString); var Encrypt: Boolean = False; begin if not ShowPasswordQuery(Encrypt, Password) then raise ESevenZipAbort.Create(EmptyStr); end; procedure TSevenZipUpdate.JclCompressionProgress(Sender: TObject; const Value, MaxValue: Int64); begin if MaxValue > 0 then begin FPercent:= (Value * 100) div MaxValue; end; if FArchive.ItemCount > 0 then begin FFileName:= FArchive.Items[FArchive.CurrentItemIndex].PackedName; end; // Fire progress event FProgress.SetEvent; // Check pause progress FPause.WaitFor(INFINITE); end; { TSevenZipHandle } procedure TSevenZipHandle.Execute; begin try SetLength(ProcessArray, ProcessIndex); TJclSevenzipDecompressArchive(FArchive).ProcessSelected(ProcessArray, OperationMode = PK_TEST); ReturnValue:= E_SUCCESS; except on E: Exception do begin ReturnValue:= GetArchiveError(E); MessageBoxW(0, PWideChar(UTF8ToUTF16(E.Message)), nil, MB_OK or MB_ICONERROR); end; end; Terminate; FProgress.SetEvent; end; function TSevenZipHandle.Update: Integer; begin FArchive.OnProgress:= JclCompressionProgress; while not Terminated do begin // Wait progress event FProgress.WaitFor(INFINITE); if Assigned(ProcessDataProc) then begin // If the user has clicked on Cancel, the function returns zero FArchive.CancelCurrentOperation:= ProcessDataProc(PWideChar(FFileName), -FPercent) = 0; end; // Drop pause FPause.SetEvent; end; Result:= ReturnValue; end; procedure TSevenZipHandle.SetArchive(AValue: TJclDecompressArchive); begin FArchive:= AValue; AValue.OnPassword := JclCompressionPassword; AValue.OnExtract := JclCompressionExtract; end; function TSevenZipHandle.JclCompressionExtract(Sender: TObject; AIndex: Integer; var AFileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean; begin Result:= True; AFileName:= FileName[AIndex]; end; { TPasswordCache } procedure TPasswordCache.ResetTimer; begin if FTimer.Interval > FInterval then FTimer.Interval:= FTimer.Interval - 1 else FTimer.Interval:= FTimer.Interval + 1; end; procedure TPasswordCache.ZeroPassword; begin if (Length(FArchivePassword) > 0) then begin FillWord(FArchivePassword[1], Length(FArchivePassword), 0); SetLength(FArchivePassword, 0); end; end; procedure TPasswordCache.TimerEvent(Sender: TObject); begin FMutex.Acquire; try ZeroPassword; FTimer.Enabled:= False; finally FMutex.Release; end; end; function TPasswordCache.GetPassword(const Archive: String): WideString; begin FMutex.Acquire; try if (SameText(FArchiveName, Archive)) and (FArchiveSize = FileSizeUtf8(Archive)) and (FArchiveTime = FileAgeUtf8(Archive)) then begin ResetTimer; Result:= FArchivePassword end else begin FTimer.Enabled:= False; Result:= EmptyWideStr; ZeroPassword; end; finally FMutex.Release; end; end; procedure TPasswordCache.SetPassword(const Archive: String; const Password: WideString); begin FMutex.Acquire; try if (Length(Password) = 0) then FArchiveName:= EmptyStr else begin FArchiveName:= Archive; FArchivePassword:= Password; FArchiveTime:= FileAgeUtf8(Archive); FArchiveSize:= FileSizeUtf8(Archive); FTimer.Enabled:= True; ResetTimer; end; finally FMutex.Release; end; end; constructor TPasswordCache.Create; begin FTimer:= TFPTimer.Create(nil); FTimer.UseTimerThread:= True; FTimer.OnTimer:= TimerEvent; FTimer.Interval:= FInterval; FMutex:= TCriticalSection.Create; end; destructor TPasswordCache.Destroy; begin FTimer.Free; FMutex.Free; inherited Destroy; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipDlg.res�������������������������������������������0000644�0001750�0000144�00000003320�15104114162�022404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������4����D�I�A�L�O�G�_�C�F�G���������0 ��������Ȁ����������!����O�p�t�i�o�n�s����M�S� �S�h�e�l�l� �D�l�g�������P���� � �h��J�A�r�c�h�i�v�e� �&�f�o�r�m�a�t�:�������!P����r� �X�P�4���������P���� � �h��K�C�o�m�p�r�e�s�s�i�o�n� �&�l�e�v�e�l�:������!P����r��X�P�2���������P���� �5�h��P�C�o�m�p�r�e�s�s�i�o�n� �&�m�e�t�h�o�d�:��������!P����r�3�X�P�6���������P���� �J�h��Q�&�D�i�c�t�i�o�n�a�r�y� �s�i�z�e�:������!P����r�H�X��7���������P���� �_�h��R�&�W�o�r�d� �s�i�z�e�:������!P����r�]�X��8���������P���� �t�h��S�&�S�o�l�i�d� �B�l�o�c�k� �s�i�z�e�:��������!P����r�r�X��9���������P���� ��h��T�&�N�u�m�b�e�r� �o�f� �C�P�U� �t�h�r�e�a�d�s�:������!P����r��5��:��������P��������;�1�������P���� �����M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �C�o�m�p�r�e�s�s�i�n�g�:������P������(���0�������P���� �����M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �D�e�c�o�m�p�r�e�s�s�i�n�g�:������P������(���0�������P���� ����O�S�p�l�i�t� �t�o� �&�v�o�l�u�m�e�s�,� �b�y�t�e�s�:�����B�!P���� ���I�5���������P���� ����L�&�P�a�r�a�m�e�t�e�r�s�:��������P���� ����C�������P����� @����O�K��������P����M� @����C�a�n�c�e�l��������P����� @�� ��A�p�p�l�y�����h��4����D�I�A�L�O�G�_�P�W�D���������0 ��������Ȁ����������g�����E�n�t�e�r� �p�a�s�s�w�o�r�d����M�S� �S�h�e�l�l� �D�l�g�����P���������&�E�n�t�e�r� �p�a�s�s�w�o�r�d�:��������P���������������P���� �(�� ��&�S�h�o�w� �p�a�s�s�w�o�r�d�������P���� �K�@����O�K��������P����R�K�@����C�a�n�c�e�l�������P���� �7�� ����E�n�c�r�y�p�t� �f�i�l�e� �&�n�a�m�e�s���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipDlg.rc��������������������������������������������0000644�0001750�0000144�00000017074�15104114162�022232� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D�I�A�L�O�G�_�C�F�G� �D�I�A�L�O�G� �M�O�V�E�A�B�L�E� �P�U�R�E� �L�O�A�D�O�N�C�A�L�L� �D�I�S�C�A�R�D�A�B�L�E� �0�,� �0�,� �2�2�1�,� �2�8�9� � �S�T�Y�L�E� �D�S�_�S�E�T�F�O�N�T� �|�D�S�_�M�O�D�A�L�F�R�A�M�E� �|�D�S�_�C�E�N�T�E�R� �|�W�S�_�P�O�P�U�P� �|�W�S�_�S�Y�S�M�E�N�U� �|�W�S�_�C�A�P�T�I�O�N� � � �C�A�P�T�I�O�N� �"�O�p�t�i�o�n�s�"� � �F�O�N�T� �8�,� �"�M�S� �S�h�e�l�l� �D�l�g�"� � �L�A�N�G�U�A�G�E� �L�A�N�G�_�E�N�G�L�I�S�H�,� �1� � �B�E�G�I�N� � � � �C�O�N�T�R�O�L� �"�A�r�c�h�i�v�e� �&�f�o�r�m�a�t�:�"�,�1�0�9�8�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�1�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�6�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�C�B�S�_�S�O�R�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�9�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�C�o�m�p�r�e�s�s�i�o�n� �&�l�e�v�e�l�:�"�,�1�0�9�9�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�3�2�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�4�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�3�0�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�C�o�m�p�r�e�s�s�i�o�n� �&�m�e�t�h�o�d�:�"�,�1�1�0�4�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�5�3�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�8�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�5�1�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�&�D�i�c�t�i�o�n�a�r�y� �s�i�z�e�:�"�,�1�1�0�5�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�7�4�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�9�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�7�2�,�8�8�,�1�6�7� � � � �C�O�N�T�R�O�L� �"�&�W�o�r�d� �s�i�z�e�:�"�,�1�1�0�6�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�9�5�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�0�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�9�3�,�8�8�,�1�4�1� � � � �C�O�N�T�R�O�L� �"�&�S�o�l�i�d� �B�l�o�c�k� �s�i�z�e�:�"�,�1�1�0�7�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�1�6�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�1�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�1�1�4�,�8�8�,�1�4�0� � � � �C�O�N�T�R�O�L� �"�&�N�u�m�b�e�r� �o�f� �C�P�U� �t�h�r�e�a�d�s�:�"�,�1�1�0�8�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�3�7�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�2�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�1�3�5�,�5�3�,�1�4�0� � � � �C�O�N�T�R�O�L� �"�1�"�,�1�0�8�3�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�7�7�,�1�3�7�,�2�5�,�8� � � � �C�O�N�T�R�O�L� �"�M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �C�o�m�p�r�e�s�s�i�n�g�:�"�,�1�0�2�2�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�6�0�,�1�5�2�,�8� � � � �C�O�N�T�R�O�L� �"�0�"�,�1�0�2�7�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�6�2�,�1�6�0�,�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �D�e�c�o�m�p�r�e�s�s�i�n�g�:�"�,�1�0�2�3�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�7�6�,�1�5�2�,�8� � � � �C�O�N�T�R�O�L� �"�0�"�,�1�0�2�8�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�6�2�,�1�7�6�,�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�S�p�l�i�t� �t�o� �&�v�o�l�u�m�e�s�,� �b�y�t�e�s�:�"�,�1�1�0�3�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�9�5�,�1�9�2�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�7�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N� �|�C�B�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�2�0�7�,�1�9�2�,�7�3� � � � �C�O�N�T�R�O�L� �"�&�P�a�r�a�m�e�t�e�r�s�:�"�,�1�1�0�0�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�2�3�0�,�1�9�2�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�9�1�,�"�E�D�I�T�"�,�E�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�E�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�B�O�R�D�E�R� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�2�,�2�4�0�,�1�9�0�,�1�4� � � � �C�O�N�T�R�O�L� �"�O�K�"�,�1�,�"�B�U�T�T�O�N�"�,�B�S�_�D�E�F�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�5�,�2�6�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�C�a�n�c�e�l�"�,�2�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�7�7�,�2�6�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�A�p�p�l�y�"�,�9�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�4�9�,�2�6�5�,�6�4�,�1�6� � �E�N�D� � � � �D�I�A�L�O�G�_�P�W�D� �D�I�A�L�O�G� �M�O�V�E�A�B�L�E� �P�U�R�E� �L�O�A�D�O�N�C�A�L�L� �D�I�S�C�A�R�D�A�B�L�E� �0�,� �0�,� �1�5�7�,� �1�0�3� � �S�T�Y�L�E� �D�S�_�S�E�T�F�O�N�T� �|�D�S�_�M�O�D�A�L�F�R�A�M�E� �|�D�S�_�C�E�N�T�E�R� �|�W�S�_�P�O�P�U�P� �|�W�S�_�S�Y�S�M�E�N�U� �|�W�S�_�C�A�P�T�I�O�N� � � �C�A�P�T�I�O�N� �"�E�n�t�e�r� �p�a�s�s�w�o�r�d�"� � �F�O�N�T� �8�,� �"�M�S� �S�h�e�l�l� �D�l�g�"� � �L�A�N�G�U�A�G�E� �L�A�N�G�_�E�N�G�L�I�S�H�,� �1� � �B�E�G�I�N� � � � �C�O�N�T�R�O�L� �"�&�E�n�t�e�r� �p�a�s�s�w�o�r�d�:�"�,�1�0�0�0�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�,�8�,�1�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�0�1�,�"�E�D�I�T�"�,�E�S�_�P�A�S�S�W�O�R�D� �|�E�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�E�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�B�O�R�D�E�R� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�,�2�0�,�1�4�0�,�1�4� � � � �C�O�N�T�R�O�L� �"�&�S�h�o�w� �p�a�s�s�w�o�r�d�"�,�1�0�0�2�,�"�B�U�T�T�O�N�"�,�B�S�_�A�U�T�O�C�H�E�C�K�B�O�X� �|�B�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�4�0�,�1�4�0�,�1�0� � � � �C�O�N�T�R�O�L� �"�O�K�"�,�1�,�"�B�U�T�T�O�N�"�,�B�S�_�D�E�F�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�7�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�C�a�n�c�e�l�"�,�2�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�2�,�7�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�E�n�c�r�y�p�t� �f�i�l�e� �&�n�a�m�e�s�"�,�0�,�"�B�U�T�T�O�N�"�,�B�S�_�A�U�T�O�C�H�E�C�K�B�O�X� �|�B�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�5�5�,�1�4�0�,�1�0� � �E�N�D� � ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipDlg.pas�������������������������������������������0000644�0001750�0000144�00000062513�15104114162�022407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, dialogs unit Copyright (C) 2014-2017 Alexander Koblov (alexx2000@mail.ru) Based on 7-Zip 15.06 (http://7-zip.org) 7-Zip Copyright (C) 1999-2015 Igor Pavlov This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipDlg; {$mode delphi} interface uses Classes, SysUtils, Windows, Math, SevenZipOpt, SevenZipLng, JclCompression; procedure ShowConfigurationDialog(Parent: HWND); function ShowPasswordQuery(var Encrypt: Boolean; var Password: WideString): Boolean; implementation uses LazUTF8, SevenZipCodecs; {$R *.res} const IDC_PASSWORD = 1001; IDC_SHOW_PASSWORD = 1002; IDC_ENCRYPT_HEADER = 0; const IDC_APPLY_BUTTON = 9; IDC_COMP_FORMAT = 1076; IDC_COMP_METHOD = 1078; IDC_COMP_LEVEL = 1074; IDC_VOLUME_SIZE = 1077; IDC_COMP_DICT = 1079; IDC_COMP_WORD = 1080; IDC_COMP_SOLID = 1081; IDC_COMP_THREAD = 1082; IDC_MAX_THREAD = 1083; IDC_PARAMETERS = 1091; IDC_MEMORY_COMP = 1027; IDC_MEMORY_DECOMP = 1028; function GetComboBox(hwndDlg: HWND; ItemID: Integer): PtrInt; var Index: Integer; begin Index:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETCURSEL, 0, 0); Result:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETITEMDATA, Index, 0); end; procedure SetComboBox(hwndDlg: HWND; ItemID: Integer; ItemData: PtrInt); var Index, Count: Integer; begin Count:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETCOUNT, 0, 0); for Index:= 0 to Count - 1 do begin if SendDlgItemMessage(hwndDlg, ItemID, CB_GETITEMDATA, Index, 0) = ItemData then begin SendDlgItemMessage(hwndDlg, ItemID, CB_SETCURSEL, Index, 0); Exit; end; end; end; procedure SaveArchiver(hwndDlg: HWND); var Format: TArchiveFormat; Parameters: array[0..MAX_PATH] of WideChar; begin Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); PluginConfig[Format].Level:= GetComboBox(hwndDlg, IDC_COMP_LEVEL); PluginConfig[Format].Method:= GetComboBox(hwndDlg, IDC_COMP_METHOD); if PluginConfig[Format].Level <> PtrInt(clStore) then begin PluginConfig[Format].Dictionary:= GetComboBox(hwndDlg, IDC_COMP_DICT); PluginConfig[Format].WordSize:= GetComboBox(hwndDlg, IDC_COMP_WORD); PluginConfig[Format].SolidSize:= GetComboBox(hwndDlg, IDC_COMP_SOLID); PluginConfig[Format].ThreadCount:= GetComboBox(hwndDlg, IDC_COMP_THREAD); end; GetDlgItemTextW(hwndDlg, IDC_PARAMETERS, Parameters, MAX_PATH); PluginConfig[Format].Parameters:= Parameters; SaveConfiguration; end; function ComboBoxAdd(hwndDlg: HWND; ItemID: Integer; ItemText: String; ItemData: PtrInt): Integer; var Text: UnicodeString; begin Text:= UTF8ToUTF16(ItemText); Result:= SendDlgItemMessageW(hwndDlg, ItemID, CB_ADDSTRING, 0, LPARAM(PWideChar(Text))); SendDlgItemMessage(hwndDlg, ItemID, CB_SETITEMDATA, Result, ItemData); end; function GetMemoryUsage(hwndDlg: HWND; out decompressMemory: Int64): Int64; var size: Int64 = 0; Dictionary, hs, numThreads, numThreads1, numBlockThreads: Cardinal; size1, chunkSize: Int64; Level: TCompressionLevel; Method: TJclCompressionMethod; begin Level := TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); if (level = clStore) then begin decompressMemory := (1 shl 20); Exit(decompressMemory); end; decompressMemory := -1; Dictionary := Cardinal(GetComboBox(hwndDlg, IDC_COMP_DICT)); Method := TJclCompressionMethod(GetComboBox(hwndDlg, IDC_COMP_METHOD)); if (Method <> cmDeflate) and (Method <> cmDeflate64) and (level >= clUltra) then size += (12 shl 20) * 2 + (5 shl 20); numThreads := GetComboBox(hwndDlg, IDC_COMP_THREAD); case (method) of cmLZMA, cmLZMA2: begin hs := dictionary - 1; hs := hs or (hs shr 1); hs := hs or (hs shr 2); hs := hs or (hs shr 4); hs := hs or (hs shr 8); hs := hs shr 1; hs := hs or $FFFF; if (hs > (1 shl 24)) then hs := hs shr 1; Inc(hs); size1 := Int64(hs) * 4; size1 += Int64(dictionary) * 4; if (level >= clNormal) then size1 += Int64(dictionary) * 4; size1 += (2 shl 20); numThreads1 := 1; if (numThreads > 1) and (level >= clNormal) then begin size1 += (2 shl 20) + (4 shl 20); numThreads1 := 2; end; numBlockThreads := numThreads div numThreads1; if (method = cmLZMA) or (numBlockThreads = 1) then size1 += Int64(dictionary) * 3 div 2 else begin chunkSize := Int64(dictionary) shl 2; chunkSize := Max(chunkSize, Int64(1 shl 20)); chunkSize := Min(chunkSize, Int64(1 shl 28)); chunkSize := Max(chunkSize, Int64(dictionary)); size1 += chunkSize * 2; end; size += size1 * numBlockThreads; decompressMemory := Int64(dictionary) + (2 shl 20); Exit(size); end; cmPPMd: begin decompressMemory := Int64(dictionary) + (2 shl 20); Exit(size + decompressMemory); end; cmDeflate, cmDeflate64: begin if (level >= clMaximum) then size += (1 shl 20); size += 3 shl 20; decompressMemory := (2 shl 20); Exit(size); end; cmBZip2: begin decompressMemory := (7 shl 20); size1 := (10 shl 20); Exit(size + size1 * numThreads); end; end; Result := -1; end; procedure UpdateMemoryUsage(hwndDlg: HWND); var Comp, Decomp: Int64; begin if (GetComboBox(hwndDlg, IDC_COMP_METHOD) > cmMaximum) then begin SetDlgItemText(hwndDlg, IDC_MEMORY_COMP, '?'); SetDlgItemText(hwndDlg, IDC_MEMORY_DECOMP, '?'); end else begin Comp := GetMemoryUsage(hwndDlg, Decomp); SetDlgItemText(hwndDlg, IDC_MEMORY_COMP, PAnsiChar(IntToStr(Comp div cMega) + 'Mb')); SetDlgItemText(hwndDlg, IDC_MEMORY_DECOMP, PAnsiChar(IntToStr(Decomp div cMega) + 'Mb')); end; end; procedure SetDefaultOptions(hwndDlg: HWND); var Value: PtrInt; Level: TCompressionLevel; Method: TJclCompressionMethod; begin Value:= GetComboBox(hwndDlg, IDC_COMP_METHOD); if (Value <= cmMaximum) then begin // Get compression method Method:= TJclCompressionMethod(Value); // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); case Method of cmDeflate, cmDeflate64: begin case Level of clFastest, clFast, clNormal: SetComboBox(hwndDlg, IDC_COMP_WORD, 32); clMaximum: SetComboBox(hwndDlg, IDC_COMP_WORD, 64); clUltra: SetComboBox(hwndDlg, IDC_COMP_WORD, 128); end; SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_SETCURSEL, 0, 0); end; cmBZip2: begin case Level of clFastest: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 100 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 8 * cKilo); end; clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 500 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 32 * cKilo); end; clNormal, clMaximum, clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 900 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 64 * cKilo); end; end; end; cmLZMA, cmLZMA2: begin case Level of clFastest: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cKilo); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 8 * cKilo); end; clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 128 * cKilo); end; clNormal: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 16 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 2 * cMega); end; clMaximum: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 32 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 64); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 64); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; end; end; cmPPMd: begin case Level of clFastest, clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 4 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 4); SetComboBox(hwndDlg, IDC_COMP_SOLID, 512 * cKilo); end; clNormal: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 16 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 6); SetComboBox(hwndDlg, IDC_COMP_SOLID, 2 * cMega); end; clMaximum: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 16); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 192 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 16); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; end; end; end; end; UpdateMemoryUsage(hwndDlg); end; procedure UpdateSolid(hwndDlg: HWND); var Index: Integer; Format: TArchiveFormat; Level: TCompressionLevel; begin SendDlgItemMessage(hwndDlg, IDC_COMP_SOLID, CB_RESETCONTENT, 0, 0); // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); if (Format in [afSevenZip]) and (Level <> clStore) then begin ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, rsSolidBlockNonSolid, kNoSolidBlockSize); for Index:= Low(SolidBlock) to High(SolidBlock) do begin ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, FormatFileSize(Int64(SolidBlock[Index]) * cKilo), PtrInt(SolidBlock[Index])); end; ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, rsSolidBlockSolid, kSolidBlockSize); end; end; procedure UpdateThread(hwndDlg: HWND; dwAlgoThreadMax: LongWord); var Index: LongWord; dwMaxThread: LongWord; dwDefaultValue: DWORD; wsMaxThread: WideString; dwHardwareThreads: DWORD; begin SendDlgItemMessage(hwndDlg, IDC_COMP_THREAD, CB_RESETCONTENT, 0, 0); dwHardwareThreads:= GetNumberOfProcessors; dwDefaultValue:= dwHardwareThreads; dwMaxThread:= dwHardwareThreads * 2; if dwMaxThread > dwAlgoThreadMax then dwMaxThread:= dwAlgoThreadMax; if dwAlgoThreadMax < dwDefaultValue then dwDefaultValue:= dwAlgoThreadMax; for Index:= 1 to dwMaxThread do begin ComboBoxAdd(hwndDlg, IDC_COMP_THREAD, IntToStr(Index), Index); end; wsMaxThread:= '/ ' + WideString(IntToStr(dwHardwareThreads)); SendDlgItemMessage(hwndDlg, IDC_COMP_THREAD, CB_SETCURSEL, dwDefaultValue - 1, 0); SendDlgItemMessageW(hwndDlg, IDC_MAX_THREAD, WM_SETTEXT, 0, LPARAM(PWideChar(wsMaxThread))); end; procedure UpdateMethod(hwndDlg: HWND); var Index: PtrInt; Format: TArchiveFormat; dwAlgoThreadMax: LongWord = 1; Method: TJclCompressionMethod; begin // Clear comboboxes SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_WORD, CB_RESETCONTENT, 0, 0); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_DICT), not (Format in [afTar, afWim])); // Get Compression method Index:= GetComboBox(hwndDlg, IDC_COMP_METHOD); if Index > cmMaximum then begin dwAlgoThreadMax:= GetNumberOfProcessors; EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_DICT), False); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_WORD), False); end else begin Method:= TJclCompressionMethod(Index); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_WORD), (Format in [afSevenZip, afGzip, afXz, afZip]) and (Method <> cmBZip2)); case Method of cmDeflate: begin for Index:= Low(DeflateDict) to High(DeflateDict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(DeflateDict[Index]), PtrInt(DeflateDict[Index])); end; for Index:= Low(DeflateWordSize) to High(DeflateWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(DeflateWordSize[Index]), PtrInt(DeflateWordSize[Index])); end; end; cmDeflate64: begin for Index:= Low(Deflate64Dict) to High(Deflate64Dict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(Deflate64Dict[Index]), PtrInt(Deflate64Dict[Index])); end; for Index:= Low(Deflate64WordSize) to High(Deflate64WordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(Deflate64WordSize[Index]), PtrInt(Deflate64WordSize[Index])); end; end; cmLZMA, cmLZMA2: begin for Index:= Low(LZMADict) to High(LZMADict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(LZMADict[Index], False), PtrInt(LZMADict[Index])); end; for Index:= Low(LZMAWordSize) to High(LZMAWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(LZMAWordSize[Index]), PtrInt(LZMAWordSize[Index])); end; dwAlgoThreadMax:= IfThen(Method = cmLZMA, 2, 32); end; cmBZip2: begin for Index:= Low(BZip2Dict) to High(BZip2Dict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(BZip2Dict[Index]), PtrInt(BZip2Dict[Index])); end; dwAlgoThreadMax:= 32; end; cmPPMd: begin for Index:= Low(PPMdDict) to High(PPMdDict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(PPMdDict[Index], False), PtrInt(PPMdDict[Index])); end; for Index:= Low(PPMdWordSize) to High(PPMdWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(PPMdWordSize[Index]), PtrInt(PPMdWordSize[Index])); end; end; end; if Format = afZip then dwAlgoThreadMax:= 128; end; UpdateThread(hwndDlg, dwAlgoThreadMax); end; procedure FillMethod(hwndDlg: HWND); var Index: Integer; Format: TArchiveFormat; begin // Clear combobox SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_RESETCONTENT, 0, 0); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); case Format of afSevenZip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA', PtrInt(cmLZMA)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA2', PtrInt(cmLZMA2)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'PPMd', PtrInt(cmPPMd)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); if Assigned(ACodecs) then begin for Index:= 0 to ACodecs.Count - 1 do begin ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, ACodecs[Index].Name, PtrInt(ACodecs[Index].ID)); end; end; SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); end; afBzip2: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afGzip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate', PtrInt(cmDeflate)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afXz: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA2', PtrInt(cmLZMA2)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afZip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate', PtrInt(cmDeflate)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate64', PtrInt(cmDeflate64)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA', PtrInt(cmLZMA)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'PPMd', PtrInt(cmPPMd)); end; end; end; procedure UpdateFormat(hwndDlg: HWND); var Format: TArchiveFormat; begin // Clear comboboxes SendDlgItemMessage(hwndDlg, IDC_COMP_LEVEL, CB_RESETCONTENT, 0, 0); // Get archive format Format:= TArchiveFormat(GetComboBox(hwndDlg, IDC_COMP_FORMAT)); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, LONG_PTR(Format)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), Format = afSevenZip); // 7Zip and Zip if Format in [afSevenZip, afZip] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelStore, PtrInt(clStore)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFastest, PtrInt(clFastest)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else if Format in [afBzip2, afXz] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFastest, PtrInt(clFastest)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else if Format in [afGzip] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelStore, PtrInt(clStore)); end; FillMethod(hwndDlg); end; procedure UpdateLevel(hwndDlg: HWND; First: Boolean); var MethodStd: Boolean; Format: TArchiveFormat; Level: TCompressionLevel; begin Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); // Get compression method MethodStd:= (GetComboBox(hwndDlg, IDC_COMP_METHOD) <= cmMaximum); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_DICT), (Level <> clStore) and MethodStd); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_WORD), (Level <> clStore) and MethodStd); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), (Format = afSevenZip) and (Level <> clStore)); if Level = clStore then begin SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_WORD, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_SOLID, CB_RESETCONTENT, 0, 0); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, MethodName[cmCopy], PtrInt(cmCopy)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); UpdateThread(hwndDlg, 1); end else if not First then begin FillMethod(hwndDlg); PluginConfig[Format].Method:= DefaultConfig[Format].Method; SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); UpdateMethod(hwndDlg); UpdateSolid(hwndDlg); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), Format = afSevenZip); end; end; procedure SelectFormat(hwndDlg: HWND); var Format: TArchiveFormat; begin UpdateFormat(hwndDlg); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); SetComboBox(hwndDlg, IDC_COMP_LEVEL, PluginConfig[Format].Level); SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); UpdateMethod(hwndDlg); UpdateLevel(hwndDlg, True); UpdateSolid(hwndDlg); SetComboBox(hwndDlg, IDC_COMP_DICT, PluginConfig[Format].Dictionary); SetComboBox(hwndDlg, IDC_COMP_WORD, PluginConfig[Format].WordSize); SetComboBox(hwndDlg, IDC_COMP_SOLID, PluginConfig[Format].SolidSize); SetComboBox(hwndDlg, IDC_COMP_THREAD, PluginConfig[Format].ThreadCount); SetDlgItemTextW(hwndDlg, IDC_PARAMETERS, PWideChar(PluginConfig[Format].Parameters)); UpdateMemoryUsage(hwndDlg); end; function DialogProc(hwndDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): INT_PTR; stdcall; var Index: TArchiveFormat; begin case uMsg of WM_INITDIALOG: begin EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME_SIZE), False); for Index:= Low(ArchiveExtension) to High(ArchiveExtension) do ComboBoxAdd(hwndDlg, IDC_COMP_FORMAT, ArchiveExtension[Index], PtrInt(Index)); SendDlgItemMessage(hwndDlg, IDC_COMP_FORMAT, CB_SETCURSEL, 0, 0); SelectFormat(hwndDlg); Result:= 1; end; WM_COMMAND: begin case LOWORD(wParam) of IDC_COMP_FORMAT: begin if (HIWORD(wParam) = CBN_SELCHANGE) then begin SelectFormat(hwndDlg); end; end; IDC_COMP_METHOD: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateMethod(hwndDlg); SetDefaultOptions(hwndDlg); end; IDC_COMP_LEVEL: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateLevel(hwndDlg, False); SetDefaultOptions(hwndDlg); end; IDC_COMP_DICT, IDC_COMP_WORD, IDC_COMP_THREAD: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateMemoryUsage(hwndDlg); end; IDOK: begin SaveArchiver(hwndDlg); EndDialog(hwndDlg, IDOK); end; IDCANCEL: EndDialog(hwndDlg, IDCANCEL); IDC_APPLY_BUTTON: SaveArchiver(hwndDlg); end; end; WM_CLOSE: begin EndDialog(hwndDlg, 0); end else begin Result:= 0; end; end; end; function PasswordDialog(hwndDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): INT_PTR; stdcall; var PasswordData: PPasswordData; begin case uMsg of WM_INITDIALOG: begin PasswordData:= PPasswordData(lParam); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, LONG_PTR(lParam)); SetDlgItemTextW(hwndDlg, IDC_PASSWORD, PasswordData^.Password); SendDlgItemMessage(hwndDlg, IDC_PASSWORD, EM_SETLIMITTEXT, MAX_PATH, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_ENCRYPT_HEADER), PasswordData^.EncryptHeader); Exit(1); end; WM_COMMAND: begin case LOWORD(wParam) of IDOK: begin PasswordData:= PPasswordData(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); PasswordData^.EncryptHeader:= IsDlgButtonChecked(hwndDlg, IDC_ENCRYPT_HEADER) <> 0; GetDlgItemTextW(hwndDlg, IDC_PASSWORD, PasswordData^.Password, MAX_PATH); EndDialog(hwndDlg, IDOK); end; IDCANCEL: EndDialog(hwndDlg, IDCANCEL); IDC_SHOW_PASSWORD: begin wParam:= (not IsDlgButtonChecked(hwndDlg, IDC_SHOW_PASSWORD) and $01) * $2A; SendDlgItemMessageW(hwndDlg, IDC_PASSWORD, EM_SETPASSWORDCHAR, wParam, 0); RedrawWindow(hwndDlg, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW); end; end; end; end; Result:= 0; end; function ShowPasswordQuery(var Encrypt: Boolean; var Password: WideString): Boolean; var PasswordData: TPasswordData; begin PasswordData.Password:= Password; PasswordData.EncryptHeader:= Encrypt; Result:= (DialogBoxParam(hInstance, 'DIALOG_PWD', 0, @PasswordDialog, LPARAM(@PasswordData)) = IDOK); if Result then begin Password:= PasswordData.Password; Encrypt:= PasswordData.EncryptHeader; end; end; procedure ShowConfigurationDialog(Parent: HWND); begin DialogBox(hInstance, 'DIALOG_CFG', Parent, @DialogProc); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipCodecs.pas����������������������������������������0000644�0001750�0000144�00000026563�15104114162�023106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2017-2023 Alexander Koblov (alexx2000@mail.ru) Based on Far Manager arclite plugin Copyright © 2000 Far Group All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } unit SevenZipCodecs; {$mode delphi} interface uses Classes, SysUtils, SevenZip, fgl, ActiveX, Windows, JclCompression; const cmMaximum = PtrInt(Ord(High(TJclCompressionMethod))); type { TLibraryInfo } TLibraryInfo = class public Handle: TLibHandle; CreateObject: TCreateObjectFunc; GetHandlerProperty2: TGetHandlerProperty2; GetHandlerProperty: TGetHandlerProperty; GetMethodProperty: TGetMethodProperty; GetNumberOfFormats: TGetNumberOfFormatsFunc; GetNumberOfMethods: TGetNumberOfMethodsFunc; SetLargePageMode: TSetLargePageMode; SetCodecs: function(compressCodecsInfo: ICompressCodecsInfo): HRESULT; stdcall; CreateDecoder: function(Index: Cardinal; IID: PGUID; out Decoder): HRESULT; stdcall; CreateEncoder: function(Index: Cardinal; IID: PGUID; out Coder): HRESULT; stdcall; end; { TCodecInfo } TCodecInfo = class LibraryIndex: Integer; CodecIndex: Integer; EncoderIsAssigned: LongBool; DecoderIsAssigned: LongBool; Encoder: CLSID; Decoder: CLSID; ID: Cardinal; Name: UnicodeString; end; { TCompressCodecsInfo } TCompressCodecsInfo = class(TInterfacedObject, ICompressCodecsInfo, IUnknown) private FCodecs: TFPGObjectList<TCodecInfo>; FLibraries: TFPGObjectList<TLibraryInfo>; public constructor Create(ACodecs: TFPGObjectList<TCodecInfo>; ALibraries: TFPGObjectList<TLibraryInfo>); public function GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function CreateDecoder(Index: Cardinal; IID: PGUID; out Decoder): HRESULT; stdcall; function CreateEncoder(Index: Cardinal; IID: PGUID; out Coder): HRESULT; stdcall; end; procedure LoadLibraries; function GetCodecName(AMethod: Cardinal): WideString; var ACodecs: TFPGObjectList<TCodecInfo> = nil; implementation uses LazUTF8, FileUtil, SevenZipHlp; { TCompressCodecsInfo } constructor TCompressCodecsInfo.Create(ACodecs: TFPGObjectList<TCodecInfo>; ALibraries: TFPGObjectList<TLibraryInfo>); begin FCodecs:= ACodecs; FLibraries:= ALibraries; end; function TCompressCodecsInfo.GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; begin NumMethods^:= FCodecs.Count; Result:= S_OK; end; function TCompressCodecsInfo.GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; var ACodecInfo: TCodecInfo; begin ACodecInfo:= FCodecs[Index]; if (PropID = kDecoderIsAssigned) then begin Value.vt:= VT_BOOL; Value.bool:= ACodecInfo.DecoderIsAssigned; Exit(S_OK); end else if (PropID = kEncoderIsAssigned) then begin Value.vt:= VT_BOOL; Value.bool:= ACodecInfo.EncoderIsAssigned; Exit(S_OK); end; Result:= FLibraries[ACodecInfo.LibraryIndex].GetMethodProperty(ACodecInfo.CodecIndex, PropID, Value); end; function TCompressCodecsInfo.CreateDecoder(Index: Cardinal; IID: PGUID; out Decoder): HRESULT; stdcall; var ACodecInfo: TCodecInfo; ALibraryInfo: TLibraryInfo; begin Result:= S_OK; ACodecInfo:= FCodecs[Index]; if (ACodecInfo.DecoderIsAssigned) then begin ALibraryInfo:= FLibraries[ACodecInfo.LibraryIndex]; if Assigned(ALibraryInfo.CreateDecoder) then Result:= ALibraryInfo.CreateDecoder(ACodecInfo.CodecIndex, IID, Decoder) else Result:= ALibraryInfo.CreateObject(@ACodecInfo.Decoder, IID, Decoder); end; end; function TCompressCodecsInfo.CreateEncoder(Index: Cardinal; IID: PGUID; out Coder): HRESULT; stdcall; var ACodecInfo: TCodecInfo; ALibraryInfo: TLibraryInfo; begin Result:= S_OK; ACodecInfo:= FCodecs[Index]; if (ACodecInfo.EncoderIsAssigned) then begin ALibraryInfo:= FLibraries[ACodecInfo.LibraryIndex]; if Assigned(ALibraryInfo.CreateEncoder) then Result:= ALibraryInfo.CreateEncoder(ACodecInfo.CodecIndex, IID, Coder) else Result:= ALibraryInfo.CreateObject(@ACodecInfo.Encoder, IID, Coder); end; end; function GetCoderInfo(GetMethodProperty: TGetMethodProperty; Index: UInt32; var AInfo: TCodecInfo): Boolean; var Value: TPropVariant; begin Value.vt:= VT_EMPTY; if (GetMethodProperty(Index, kDecoder, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_EMPTY) then begin if (Value.vt <> VT_BSTR) then Exit(False); try if (SysStringByteLen(Value.bstrVal) < SizeOf(CLSID)) then begin Exit(False); end; AInfo.Decoder:= PGUID(Value.bstrVal)^; AInfo.DecoderIsAssigned:= True; finally VarStringClear(Value); end; end; if (GetMethodProperty(Index, kEncoder, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_EMPTY) then begin if (Value.vt <> VT_BSTR) then Exit(False); try if (SysStringByteLen(Value.bstrVal) < SizeOf(CLSID)) then begin Exit(False); end; AInfo.Encoder:= PGUID(Value.bstrVal)^; AInfo.EncoderIsAssigned:= True; finally VarStringClear(Value); end; end; if (GetMethodProperty(Index, kID, Value) <> S_OK) then Exit(False); if (Value.vt <> VT_UI8) then Exit(False); AInfo.ID:= Value.uhVal.QuadPart; Value.vt:= VT_EMPTY; if (GetMethodProperty(Index, kName, Value) <> S_OK) then Exit(False); if (Value.vt = VT_BSTR) then try AInfo.Name:= BinaryToUnicode(Value.bstrVal); finally VarStringClear(Value); end; Result:= AInfo.DecoderIsAssigned or AInfo.EncoderIsAssigned; end; var ALibraries: TFPGObjectList<TLibraryInfo> = nil; procedure LoadCodecs; var Handle: TLibHandle; Index, J: Integer; AFiles: TStringList; ACodecCount: Integer; NumMethods: UInt32 = 1; ACodecInfo: TCodecInfo; ALibraryInfo: TLibraryInfo; ACompressInfo: ICompressCodecsInfo; begin AFiles:= FindAllFiles(ExtractFilePath(SevenzipLibraryName) + 'Codecs', '*.' + SharedSuffix); for Index:= 0 to AFiles.Count - 1 do begin Handle:= System.LoadLibrary(AFiles[Index]); if Handle <> 0 then begin ALibraryInfo:= TLibraryInfo.Create; ALibraryInfo.Handle:= Handle; ALibraryInfo.CreateObject:= GetProcAddress(Handle, 'CreateObject'); ALibraryInfo.CreateDecoder:= GetProcAddress(Handle, 'CreateDecoder'); ALibraryInfo.CreateEncoder:= GetProcAddress(Handle, 'CreateEncoder'); ALibraryInfo.GetNumberOfMethods:= GetProcAddress(Handle, 'GetNumberOfMethods'); ALibraryInfo.GetMethodProperty:= GetProcAddress(Handle, 'GetMethodProperty'); if (Assigned(ALibraryInfo.CreateObject) or Assigned(ALibraryInfo.CreateDecoder) or Assigned(ALibraryInfo.CreateEncoder)) and Assigned(ALibraryInfo.GetMethodProperty) then begin ACodecCount:= ACodecs.Count; if Assigned(ALibraryInfo.GetNumberOfMethods) then begin if ALibraryInfo.GetNumberOfMethods(@NumMethods) = S_OK then begin for J := 0 to Int32(NumMethods) - 1 do begin ACodecInfo:= TCodecInfo.Create; ACodecInfo.LibraryIndex:= ALibraries.Count; ACodecInfo.CodecIndex:= J; if (GetCoderInfo(ALibraryInfo.GetMethodProperty, J, ACodecInfo)) then ACodecs.Add(ACodecInfo) else ACodecInfo.Free; end; end; end; // GetNumberOfMethods if (ACodecCount < ACodecs.Count) then ALibraries.Add(ALibraryInfo) else begin ALibraryInfo.Free; FreeLibrary(Handle); end; end; end; end; AFiles.Free; if (ACodecs.Count > 0) then begin ACompressInfo:= TCompressCodecsInfo.Create(ACodecs, ALibraries); for Index:= 0 to ALibraries.Count - 1 do begin if Assigned(ALibraries[Index].SetCodecs) then ALibraries[Index].SetCodecs(ACompressInfo); end; end; end; procedure LoadLibraries; var ALibraryInfo: TLibraryInfo; begin ACodecs:= TFPGObjectList<TCodecInfo>.Create; ALibraries:= TFPGObjectList<TLibraryInfo>.Create; // Add default library ALibraryInfo:= TLibraryInfo.Create; ALibraryInfo.Handle:= SevenzipLibraryHandle; ALibraryInfo.CreateObject:= SevenZip.CreateObject; ALibraryInfo.GetHandlerProperty2:= SevenZip.GetHandlerProperty2; ALibraryInfo.GetHandlerProperty:= SevenZip.GetHandlerProperty; ALibraryInfo.GetMethodProperty:= SevenZip.GetMethodProperty; ALibraryInfo.GetNumberOfFormats:= SevenZip.GetNumberOfFormats; ALibraryInfo.GetNumberOfMethods:= SevenZip.GetNumberOfMethods; ALibraryInfo.SetLargePageMode:= SevenZip.SetLargePageMode; ALibraryInfo.SetCodecs:= GetProcAddress(SevenzipLibraryHandle, 'SetCodecs'); ALibraryInfo.CreateDecoder:= GetProcAddress(SevenzipLibraryHandle, 'CreateDecoder'); ALibraryInfo.CreateEncoder:= GetProcAddress(SevenzipLibraryHandle, 'CreateEncoder'); ALibraries.Add(ALibraryInfo); // Load external codecs LoadCodecs; end; function GetCodecName(AMethod: Cardinal): WideString; var Index: Integer; begin if Assigned(ACodecs) then begin for Index:= 0 to ACodecs.Count - 1 do begin if (ACodecs[Index].ID = AMethod) then Exit(ACodecs[Index].Name); end; end; Result:= EmptyWideStr; end; procedure Finish; var Index: Integer; begin if Assigned(ALibraries) then begin for Index:= 0 to ALibraries.Count - 1 do begin if Assigned(ALibraries[Index].SetCodecs) then ALibraries[Index].SetCodecs(nil); FreeLibrary(ALibraries[Index].Handle); end; end; end; finalization Finish; end. ���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/src/SevenZipAdv.pas�������������������������������������������0000644�0001750�0000144�00000040121�15104114162�022402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2014-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipAdv; {$mode delphi} interface uses Classes, SysUtils, SevenZip, JclCompression; type TBytes = array of Byte; TCardinalArray = array of Cardinal; TJclCompressionArchiveClassArray = array of TJclCompressionArchiveClass; type { TArchiveFormat } TArchiveFormat = class Name: UnicodeString; Extension: UnicodeString; AddExtension: UnicodeString; Update: WordBool; KeepName: WordBool; ClassID: TGUID; StartSignature: TBytes; end; { TJclXzCompressArchiveEx } TJclXzCompressArchiveEx = class(TJclSevenzipCompressArchive) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; { TJclSevenzipUpdateArchiveHelper } TJclSevenzipUpdateArchiveHelper = class helper for TJclSevenzipUpdateArchive procedure RemoveDirectory(const PackedName: WideString); overload; end; { TJclSevenzipDecompressArchiveHelper } TJclSevenzipDecompressArchiveHelper = class helper for TJclSevenzipDecompressArchive procedure ProcessSelected(const SelectedArray: TCardinalArray; Verify: Boolean); end; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; function GetNestedArchiveName(const ArchiveName: String; Item: TJclCompressionItem): WideString; function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString; function WideExtractFilePath(const FileName: WideString): WideString; function GetModulePath(out ModulePath: AnsiString): Boolean; implementation uses CTypes, ActiveX, Windows, LazFileUtils, LazUTF8, SevenZipHlp; type TArchiveFormats = array of TArchiveFormat; TJclSevenzipUpdateArchiveClass = class of TJclSevenzipUpdateArchive; TJclSevenzipCompressArchiveClass = class of TJclSevenzipCompressArchive; TJclSevenzipDecompressArchiveClass = class of TJclSevenzipDecompressArchive; TJclArchiveType = (atUpdateArchive, atCompressArchive, atDecompressArchive); type TArchiveFormatCache = record ArchiveName: String; ArchiveClassArray: TJclCompressionArchiveClassArray; end; var Mutex: TRTLCriticalSection; ArchiveFormatsX: TArchiveFormats; var UpdateFormatsCache: TArchiveFormatCache; CompressFormatsCache: TArchiveFormatCache; DecompressFormatsCache: TArchiveFormatCache; function _wcsnicmp(const s1, s2: pwidechar; count: csize_t): cint; cdecl; external 'msvcrt.dll'; function ReadStringProp(FormatIndex: Cardinal; PropID: TPropID; out Value: UnicodeString): LongBool; var PropValue: TPropVariant; begin PropValue.vt:= VT_EMPTY; Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BSTR); if Result then try Value:= BinaryToUnicode(PropValue.bstrVal); finally VarStringClear(PropValue); end; end; {$OPTIMIZATION OFF} function ReadBooleanProp(FormatIndex: Cardinal; PropID: TPropID; out Value: WordBool): LongBool; var PropValue: TPropVariant; begin PropValue.vt:= VT_EMPTY; Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BOOL); if Result then Value:= PropValue.boolVal; end; {$OPTIMIZATION DEFAULT} procedure LoadArchiveFormats(var ArchiveFormats: TArchiveFormats); var Idx: Integer = 0; PropSize: Cardinal; PropValue: TPropVariant; ArchiveFormat: TArchiveFormat; Index, NumberOfFormats: Cardinal; begin if (not Is7ZipLoaded) and (not Load7Zip) then Exit; if not Succeeded(GetNumberOfFormats(@NumberOfFormats)) then Exit; SetLength(ArchiveFormats, NumberOfFormats); for Index := Low(ArchiveFormats) to High(ArchiveFormats) do begin PropValue.vt:= VT_EMPTY; // Archive format GUID if Succeeded(GetHandlerProperty2(Index, kClassID, PropValue)) then begin if PropValue.vt = VT_BSTR then try if SysStringByteLen(PropValue.bstrVal) <> SizeOf(TGUID) then Continue else begin ArchiveFormat:= TArchiveFormat.Create; ArchiveFormat.ClassID:= PGUID(PropValue.bstrVal)^; end; finally VarStringClear(PropValue); end; end; PropValue.vt:= VT_EMPTY; // Archive format signature if Succeeded(GetHandlerProperty2(Index, kStartSignature, PropValue)) then begin if PropValue.vt = VT_BSTR then try PropSize:= SysStringByteLen(PropValue.bstrVal); if (PropSize > 0) then begin SetLength(ArchiveFormat.StartSignature, PropSize); CopyMemory(@ArchiveFormat.StartSignature[0], PropValue.bstrVal, PropSize); end; finally VarStringClear(PropValue); end; end; ReadStringProp(Index, kArchiveName, ArchiveFormat.Name); ReadStringProp(Index, kExtension, ArchiveFormat.Extension); ReadStringProp(Index, kAddExtension, ArchiveFormat.AddExtension); ReadBooleanProp(Index, kUpdate, ArchiveFormat.Update); ReadBooleanProp(Index, kKeepName, ArchiveFormat.KeepName); ArchiveFormats[Idx]:= ArchiveFormat; Inc(Idx); end; SetLength(ArchiveFormats, Idx); end; function Contains(const ArrayToSearch: TJclCompressionArchiveClassArray; const ArchiveClass: TJclCompressionArchiveClass): Boolean; var Index: Integer; begin for Index := Low(ArrayToSearch) to High(ArrayToSearch) do if ArrayToSearch[Index] = ArchiveClass then Exit(True); Result := False; end; function FindArchiveFormat(const ClassID: TGUID; ArchiveType: TJclArchiveType): TJclCompressionArchiveClass; var Index: Integer; UpdateClass: TJclSevenzipUpdateArchiveClass; CompressClass: TJclSevenzipCompressArchiveClass; DecompressClass: TJclSevenzipDecompressArchiveClass; begin case ArchiveType of atUpdateArchive: for Index:= 0 to GetArchiveFormats.UpdateFormatCount - 1 do begin UpdateClass:= TJclSevenzipUpdateArchiveClass(GetArchiveFormats.UpdateFormats[Index]); if IsEqualGUID(ClassID, UpdateClass.ArchiveCLSID) then Exit(GetArchiveFormats.UpdateFormats[Index]); end; atCompressArchive: for Index:= 0 to GetArchiveFormats.CompressFormatCount - 1 do begin CompressClass:= TJclSevenzipCompressArchiveClass(GetArchiveFormats.CompressFormats[Index]); if IsEqualGUID(ClassID, CompressClass.ArchiveCLSID) then Exit(GetArchiveFormats.CompressFormats[Index]); end; atDecompressArchive: for Index:= 0 to GetArchiveFormats.DecompressFormatCount - 1 do begin DecompressClass:= TJclSevenzipDecompressArchiveClass(GetArchiveFormats.DecompressFormats[Index]); if IsEqualGUID(ClassID, DecompressClass.ArchiveCLSID) then Exit(GetArchiveFormats.DecompressFormats[Index]); end; end; Result:= nil; end; procedure FindArchiveFormats(const AFileName: TFileName; ArchiveType: TJclArchiveType; var Result: TJclCompressionArchiveClassArray); const BufferSize = 524288; var AFile: THandle; Buffer: TBytes; Idx, Index: Integer; ArchiveFormat: TArchiveFormat; ArchiveClass: TJclCompressionArchiveClass; begin if Length(ArchiveFormatsX) = 0 then LoadArchiveFormats(ArchiveFormatsX); AFile:= FileOpenUTF8(AFileName, fmOpenRead or fmShareDenyNone); if AFile = feInvalidHandle then Exit; try SetLength(Buffer, BufferSize); if FileRead(AFile, Buffer[0], BufferSize) = 0 then Exit; finally FileClose(AFile); end; for Index := Low(ArchiveFormatsX) to High(ArchiveFormatsX) do begin ArchiveFormat:= ArchiveFormatsX[Index]; if (not ArchiveFormat.Update) and (ArchiveType in [atUpdateArchive, atCompressArchive]) then Continue; // Skip container types if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatPe) then Continue; if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatIso) then Continue; if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatUdf) then Continue; if Length(ArchiveFormat.StartSignature) = 0 then Continue; for Idx:= 0 to Pred(BufferSize) - Length(ArchiveFormat.StartSignature) do begin if CompareMem(@Buffer[Idx], @ArchiveFormat.StartSignature[0], Length(ArchiveFormat.StartSignature)) then begin ArchiveClass:= FindArchiveFormat(ArchiveFormat.ClassID, ArchiveType); if Assigned(ArchiveClass) and not Contains(Result, ArchiveClass) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := ArchiveClass; end; Break; end; end; end; end; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin System.EnterCriticalSection(Mutex); try // Try to find archive type in cache if UpdateFormatsCache.ArchiveName = AFileName then Exit(TJclUpdateArchiveClassArray(UpdateFormatsCache.ArchiveClassArray)) else begin UpdateFormatsCache.ArchiveName:= AFileName; SetLength(UpdateFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindUpdateFormats(AFileName); FindArchiveFormats(AFileName, atUpdateArchive, ArchiveClassArray); // Save archive type in cache UpdateFormatsCache.ArchiveClassArray:= ArchiveClassArray; finally System.LeaveCriticalSection(Mutex); end; end; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin System.EnterCriticalSection(Mutex); try // Try to find archive type in cache if CompressFormatsCache.ArchiveName = AFileName then Exit(TJclCompressArchiveClassArray(CompressFormatsCache.ArchiveClassArray)) else begin CompressFormatsCache.ArchiveName:= AFileName; SetLength(CompressFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindCompressFormats(AFileName); FindArchiveFormats(AFileName, atCompressArchive, ArchiveClassArray); // Save archive type in cache CompressFormatsCache.ArchiveClassArray:= ArchiveClassArray; finally System.LeaveCriticalSection(Mutex); end; end; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin System.EnterCriticalSection(Mutex); try // Try to find archive type in cache if DecompressFormatsCache.ArchiveName = AFileName then Exit(TJclDecompressArchiveClassArray(DecompressFormatsCache.ArchiveClassArray)) else begin DecompressFormatsCache.ArchiveName:= AFileName; SetLength(DecompressFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindDecompressFormats(AFileName); FindArchiveFormats(AFileName, atDecompressArchive, ArchiveClassArray); // Save archive type in cache DecompressFormatsCache.ArchiveClassArray:= ArchiveClassArray; finally System.LeaveCriticalSection(Mutex); end; end; { TJclXzCompressArchiveEx } class function TJclXzCompressArchiveEx.ArchiveExtensions: string; begin Result:= TJclXzCompressArchive.ArchiveExtensions; end; class function TJclXzCompressArchiveEx.ArchiveName: string; begin Result:= TJclXzCompressArchive.ArchiveName; end; class function TJclXzCompressArchiveEx.ArchiveSubExtensions: string; begin Result:= TJclXzCompressArchive.ArchiveSubExtensions; end; class function TJclXzCompressArchiveEx.ArchiveCLSID: TGUID; begin Result:= TJclXzCompressArchive.ArchiveCLSID; end; { TJclSevenzipUpdateArchiveHelper } procedure TJclSevenzipUpdateArchiveHelper.RemoveDirectory(const PackedName: WideString); var DirectoryName: WideString; AItem: TJclCompressionItem; Index, PackedNamesIndex: Integer; begin DirectoryName:= Copy(PackedName, 1, Length(PackedName) - 1); // Remove directory for Index := 0 to ItemCount - 1 do begin AItem := Items[Index]; // Can be with or without path delimiter at end if WideSameText(AItem.PackedName, PackedName) or WideSameText(AItem.PackedName, DirectoryName) then begin FItems.Delete(Index); PackedNamesIndex := -1; if (FPackedNames <> nil) and FPackedNames.Find(PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); Break; end; end; // Remove directory content for Index := ItemCount - 1 downto 0 do begin if (_wcsnicmp(PWideChar(PackedName), PWideChar(Items[Index].PackedName), Length(PackedName)) = 0) then begin if (FPackedNames <> nil) and FPackedNames.Find(Items[Index].PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); FItems.Delete(Index); end; end; end; { TJclSevenzipDecompressArchiveHelper } procedure TJclSevenzipDecompressArchiveHelper.ProcessSelected(const SelectedArray: TCardinalArray; Verify: Boolean); var AExtractCallback: IArchiveExtractCallback; begin CheckNotDecompressing; FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; SevenzipCheck(InArchive.Extract(@SelectedArray[0], Length(SelectedArray), Cardinal(Verify), AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; end; end; function GetNestedArchiveName(const ArchiveName: String; Item: TJclCompressionItem): WideString; var Extension: String; begin Result:= Item.NestedArchiveName; Extension:= LowerCase(ExtractFileExt(ArchiveName)); if (Extension = '.tbz') or (Extension = '.tgz') or (Extension = '.txz') then begin Result:= Result + '.tar'; end; end; function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString; var dwSize: DWORD; begin SetLength(Result, MAX_PATH + 1); dwSize:= ExpandEnvironmentStringsW(PWideChar(FileName), PWideChar(Result), MAX_PATH); if dwSize > 0 then SetLength(Result, dwSize - 1); end; function WideExtractFilePath(const FileName: WideString): WideString; var Index: Integer; begin for Index:= Length(FileName) downto 1 do case FileName[Index] of PathDelim: Exit(Copy(FileName, 1, Index)); end; Result:= EmptyWideStr; end; function GetModulePath(out ModulePath: AnsiString): Boolean; var lpBuffer: TMemoryBasicInformation; ModuleName: array[0..MAX_PATH] of WideChar; begin Result:= VirtualQuery(@GetModulePath, @lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer); if Result then begin Result:= GetModuleFileNameW(THandle(lpBuffer.AllocationBase), ModuleName, MAX_PATH) > 0; if Result then begin ModulePath:= ExtractFilePath(Utf16ToUtf8(WideString(ModuleName))); end; end; end; initialization InitCriticalSection(Mutex); finalization DoneCriticalSection(Mutex); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/pluginst.inf��������������������������������������������������0000644�0001750�0000144�00000000200�15104114162�021245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[plugininstall] description=SevenZip archiver plugin type=wcx file=SevenZip.wcx defaultextension=7z defaultdir=SevenZip ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/build.bat�����������������������������������������������������0000644�0001750�0000144�00000001602�15104114162�020500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off set VERSION=21.09.18 rem The next two line must be changed before run on your computer set lazpath=D:\Alexx\Prog\FreePascal\Lazarus set PATH=%lazpath%;%PATH% del /Q /S *.wcx* del /Q /S lib\*.* lazbuild.exe --cpu=x86_64 --os=win64 --bm=Release src\SevenZipWcx.lpi ren sevenzip.wcx sevenzip.wcx64 del /Q /S lib\*.* lazbuild.exe --cpu=i386 --os=win32 --bm=Release src\SevenZipWcx.lpi del /Q /S lib\*.* rem Prepare archive del /Q /S release\* copy "C:\Program Files (x86)\7-Zip\7z.dll" release\i386\ copy "C:\Program Files\7-Zip\7z.dll" release\x86_64\ copy LICENSE.txt release\ copy pluginst.inf release\ copy README.txt release\ copy sevenzip.wcx release\ copy sevenzip.wcx64 release\ del /Q sevenzip-*.zip pushd release "C:\Program Files\7-Zip\7z.exe" a ..\sevenzip-%VERSION%.zip .\* popd del /Q /S release\* ������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/README.txt����������������������������������������������������0000644�0001750�0000144�00000001231�15104114162�020405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SevenZip plugin can store configuration in two places: 1. If sevenzip.ini exists in plugin directory then plugin will use it 2. Otherwise it will store sevenzip.ini in commander configuration directory SevenZip plugin search 7z.dll in next places: 1. Path from sevenzip.ini [Library] i386=<full path to 7z.dll 32 bit> x86_64=<full path to 7z.dll 64 bit> 2. Plugin directory \i386\7z.dll \x86_64\7z.dll \7z.dll 3. Commander directory 4. Windows system directory SevenZip plugin can load external codecs. Plugin searches codecs in subdirectory "Codecs" near 7z.dll. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/sevenzip/LICENSE.txt���������������������������������������������������0000644�0001750�0000144�00000064505�15104114162�020547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. (This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.) Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {description} Copyright (C) {year} {fullname} This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. {signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice That's all there is to it! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015645� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016434� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm_io.pas�����������������������������������������������������0000644�0001750�0000144�00000020237�15104114162�020432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** {$A-,I-} unit rpm_io; interface uses SysUtils, rpm_def; type TStrBuf = array[1..260] of Char; function RPM_ReadLead(var f : file; var lead : RPM_Lead) : Boolean; function RPM_ReadSignature(var f : file; sig_type : Word; var signature : RPM_Header) : Boolean; function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec; var deps : RPM_DepsRec) : Boolean; function RPM_ReadEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo) : Boolean; function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec; var deps : RPM_DepsRec) : Boolean; procedure swap_value(var value; size : Integer); procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function get_archivename(var fname : String;datasig:RPM_DataSig) : String; function read_string(var f : file; var s : AnsiString) : Boolean; function read_int32(var f : file; var int32 : LongWord) : Boolean; implementation uses Classes; procedure swap_value(var value; size:Integer); type byte_array = array[1..MaxInt] of Byte; var i : Integer; avalue : Byte; begin for i:=1 to size div 2 do begin avalue := byte_array(value)[i]; byte_array(value)[i] := byte_array(value)[size + 1 - i]; byte_array(value)[size + 1 - i] := avalue; end; end; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function get_archivename(var fname : String;datasig:RPM_DataSig) : String; var tmp_str : String; i_char : Integer; fgFound : Boolean; begin tmp_str := ExtractFileName(fname); fgFound := False; for i_char := Length(tmp_str) downto 1 do if tmp_str[i_char] = '.' then begin fgFound := True; Break; end; if fgFound then SetLength(tmp_str, i_char - 1); if (datasig[0] = #031) and (datasig[1] = #139) then tmp_str := tmp_str + '.cpio.gz' else if (datasig[0]='B') and (datasig[1]='Z') and (datasig[2]='h') then tmp_str := tmp_str + '.cpio.bz2' else if CompareByte(datasig, #253'7zXZ'#000, 6) = 0 then tmp_str := tmp_str + '.cpio.xz' else if CompareByte(datasig, #$28#$B5#$2F#$FD, 4) = 0 then tmp_str := tmp_str + '.cpio.zst' else tmp_str := tmp_str + '.cpio.lzma'; Result := tmp_str; end; function RPM_ReadLead; begin Result := False; BlockRead(f, lead, Sizeof(Lead)); if IOResult = 0 then Result := True; with lead do begin swap_value(rpmtype, 2); swap_value(archnum, 2); swap_value(osnum, 2); swap_value(signature_type, 2); end; end; function RPM_ReadHeader; var i_entry : LongWord; start : Integer; entry : RPM_EntryInfo; begin Result := False; BlockRead(f, header, Sizeof(header)); if IOResult = 0 then begin with header do begin swap_value(count, 4); swap_value(data_size, 4); start := FilePos(f) + LongInt(count) * Sizeof(entry); for i_entry := 0 to count - 1 do begin if not RPM_ReadEntry(f, start, entry) then Exit else if not RPM_ProcessEntry(f, start, entry, info, deps) then Exit; end; end; start := start + LongInt(header.data_size); // Move file pointer on padded to a multiple of 8 bytes position if align_data then if (start mod 8) <> 0 then begin start := start and $FFFFFFF8; Inc(start, 8); end; Seek(f, start); Result := True; end; end; function RPM_ReadEntry; begin Result := False; BlockRead(f, entry, Sizeof(entry)); if IOResult = 0 then Result := True; with entry do begin swap_value(tag, 4); swap_value(etype, 4); swap_value(offset, 4); offset := data_start + LongInt(offset); swap_value(count, 4); end; end; function RPM_ReadSignature; var info : RPM_InfoRec; deps : RPM_DepsRec; begin Result := False; case sig_type of RPMSIG_PGP262_1024 : ; // Old PGP signature RPMSIG_MD5 : ; // RPMSIG_MD5_PGP : ; // RPMSIG_HEADERSIG : // New header signature begin if RPM_ReadHeader(f, True, signature, info, deps) then Result := True; end; end;{case signature type} end; procedure CRtoCRLF(var instr:string); var s:string; i,l:integer; ch,ch2:char; begin s := ''; instr:=instr+' '; {Avoid overflow} l:=length(instr)-1; for i:=1 to l do begin ch:=instr[i]; ch2:=instr[i+1]; if ((ch=#13) and (ch2<>#10)) or ((ch=#10) and (ch2<>#13)) then s:=s+#13#10 else s:=s+ch; end; instr:=s; end; function RPM_ProcessEntry; var save_pos : Integer; fgError : Boolean; i : Integer; s : String; begin result:=true; if entry.tag = RPMTAG_FILENAMES then exit; fgError := False; save_pos := FilePos(f); Seek(f, entry.offset); if IOResult = 0 then begin case entry.tag of RPMTAG_NAME : if entry.etype = 6 then fgError := not read_string(f, info.name); RPMTAG_VERSION : if entry.etype = 6 then fgError := not read_string(f, info.version); RPMTAG_RELEASE : if entry.etype = 6 then fgError := not read_string(f, info.release); RPMTAG_SUMMARY : if entry.etype = 9 then fgError := not read_string(f, info.summary); RPMTAG_DESCRIPTION : if entry.etype = 9 then begin fgError := not read_string(f, info.description); if not fgError then CRtoCRLF(info.description); end; RPMTAG_BUILDTIME : if entry.etype = 4 then fgError := not read_int32(f, info.buildtime); RPMTAG_DISTRIBUTION : if entry.etype = 6 then fgError := not read_string(f, info.distribution); RPMTAG_VENDOR : if entry.etype = 6 then fgError := not read_string(f, info.vendor); RPMTAG_LICENSE : if entry.etype = 6 then fgError := not read_string(f, info.license); RPMTAG_PACKAGER : if entry.etype = 6 then fgError := not read_string(f, info.packager); RPMTAG_GROUP : if entry.etype = 9 then fgError := not read_string(f, info.group); RPMTAG_OS : if entry.etype = 6 then fgError := not read_string(f, info.os); RPMTAG_ARCH : if entry.etype = 6 then fgError := not read_string(f, info.arch); RPMTAG_SOURCERPM : if entry.etype = 6 then fgError := not read_string(f, info.sourcerpm); RPMTAG_REQUIRENAME: if entry.etype = 8 then begin SetLength(deps.names, entry.Count); for i := 0 to entry.Count - 1 do begin read_string(f, s); deps.names[i] := s; end; end; end;{case} end else fgError := True; Result := not fgError; Seek(f, save_pos); end; function read_string(var f : file; var s : AnsiString) : Boolean; var i_char : Char; fgError : Boolean; begin fgError := False; SetLength(s, 0); while not eof(f) do begin BlockRead(f, i_char, 1); if IOResult <> 0 then begin fgError := True; Break; end; if i_char = #0 then Break else s := s + i_char; end; Result := not fgError; end; function read_int32(var f : file; var int32 : LongWord) : Boolean; begin BlockRead(f, int32, Sizeof(LongWord)); swap_value(int32, Sizeof(LongWord)); if IOResult = 0 then Result := True else Result := False; end; procedure RPM_CreateInfoRec(var info : RPM_InfoRec); begin end; procedure RPM_DeleteInfoRec(var info : RPM_InfoRec); begin end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm_def.pas����������������������������������������������������0000644�0001750�0000144�00000005773�15104114162�020571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit rpm_def; interface uses Classes, SysUtils; {$ifdef ver90} type longword=longint; {$endif} {$ifdef ver100} type longword=longint; {$endif} //values for TArchiveRec.headers (pseudo-files to show) const HDR_INFO = 0; HDR_DATA = 1; const MAX_PHANTOM_FILES = 13; const RPM_MAGIC = $DBEEABED; RPM_TYPE_BINARY = 0; // binary package type RPM_TYPE_SOURCE = 1; // source package type RPMSIG_PGP262_1024 = 1; RPMSIG_MD5 = 3; RPMSIG_MD5_PGP = 4; RPMSIG_HEADERSIG = 5; const RPMTAG_NAME = 1000; RPMTAG_VERSION = 1001; RPMTAG_RELEASE = 1002; RPMTAG_SUMMARY = 1004; RPMTAG_DESCRIPTION = 1005; RPMTAG_BUILDTIME = 1006; RPMTAG_DISTRIBUTION = 1010; RPMTAG_VENDOR = 1011; RPMTAG_LICENSE = 1014; RPMTAG_PACKAGER = 1015; RPMTAG_GROUP = 1016; RPMTAG_OS = 1021; RPMTAG_ARCH = 1022; RPMTAG_FILENAMES = 1027; RPMTAG_FILEMTIMES = 1034; RPMTAG_SOURCERPM = 1044; RPMTAG_ARCHIVESIZE = 1046; RPMTAG_REQUIRENAME = 1049; type RPM_DataSig = array[0..5] of char; type RPM_EntryInfo = record tag : LongWord; etype : LongWord; offset : LongWord; count : LongWord; end;{EntryInfo} type RPM_Lead = record magic : LongWord; major_ver : Byte; minor_ver : Byte; rpmtype : Word; archnum : Word; name : array[1..66] of Char; osnum : Word; signature_type : Word; reserved : array[1..16] of Char; end;{RPM_Lead} RPM_Header =record magic : array [1..3] of byte; header_ver : Byte; reserved : array [1..4] of Byte; count : LongWord; data_size : LongWord; end;{RPM_Header} RPM_InfoRec = record name : AnsiString; // RPMTAG_NAME version : AnsiString; // RPMTAG_VERSION release : AnsiString; // RPMTAG_RELEASE summary : AnsiString; // RPMTAG_SUMMARY description : AnsiString; // RPMTAG_DESCRIPTION distribution : AnsiString; // RPMTAG_DISTRIBUTION buildtime : LongWord; // RPMTAG_BUILDTIME vendor : AnsiString; // RPMTAG_VENDOR license : AnsiString; // RPMTAG_LICENSE packager : AnsiString; // RPMTAG_PACKAGER group : AnsiString; // RPMTAG_GROUP os : AnsiString; // RPMTAG_OS arch : AnsiString; // RPMTAG_ARCH sourcerpm : AnsiString; // RPMTAG_SOURCERPM end;{RPM_Info} RPM_DepsRec = record names: TStringArray; end; implementation end. �����doublecmd-1.1.30/plugins/wcx/rpm/src/rpm_archive.pas������������������������������������������������0000644�0001750�0000144�00000025115�15104114162�021444� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2012 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** // History // 2001-02-04 Bug: Error Opening rpm file on CD (readonly) // Fix: Add FileMode = 0 before Reset // Who: Oliver Haeger <haeger@inghb.de> unit rpm_archive; {$mode delphi}{$A-,I-} {$include calling.inc} interface uses Classes, WcxPlugin, rpm_def, rpm_io; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; headers : Integer; header : RPM_Header; arch_len : LongWord; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; //- RPM tags ------------------------------------------- info : RPM_InfoRec; deps : RPM_DepsRec; datasig : RPM_DataSig; end;{ArchiveRec} function GetPackerCaps : Integer; dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; export; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; export; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; export; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; export; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; export; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; export; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes, DCFileAttributes; function GetPackerCaps: Integer; begin Result := PK_CAPS_MULTIPLE; end; function GetBackgroundFlags: Integer; begin Result := BACKGROUND_UNPACK; end; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; var arch : THandle; filename : String; r_lead : RPM_Lead; signature : RPM_Header; fgError : Boolean; headerend : integer; arec : PArchiveRec absolute Result; begin arec := nil; arch := 0; fgError := False; filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = THandle(-1) then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; headers := HDR_INFO; arch_len := 0; fdate := FileAge(filename); process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end else begin RPM_ReadLead(arec^.handle_file, r_lead); if r_lead.magic <> RPM_MAGIC then fgError := True else begin if not RPM_ReadSignature(arec^.handle_file, r_lead.signature_type, signature) then fgError := True else if not RPM_ReadHeader(arec^.handle_file, False, arec^.header, arec^.info, arec^.deps) then fgError := True else arec^.arch_len := FileSize(arec^.handle_file) - FilePos(arec^.handle_file); if not fgError then begin headerend:=FilePos(arec^.handle_file); BlockRead(arec^.handle_file, arec^.datasig, SizeOf(RPM_DataSig)); Seek(arec^.handle_file, headerend); end; end; end;{ioresult} end;{arch = -1} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; ArchiveData.OpenResult := E_EOPEN end; end; function CloseArchive(hArcData: TArcHandle): Integer; var arec : PArchiveRec absolute hArcData; begin CloseFile(arec^.handle_file); FileClose(arec^.handle_io); Dispose(arec); Result := E_SUCCESS; end; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData): Integer; var arec : PArchiveRec absolute hArcData; begin Result := E_SUCCESS; with HeaderData do begin case arec^.headers of HDR_DATA: begin copy_str2buf(TStrBuf(FileName), get_archivename(arec^.fname,arec^.datasig)); PackSize := arec^.arch_len; UnpSize := arec^.arch_len; end; HDR_INFO: begin copy_str2buf(TStrBuf(FileName), 'INFO.TXT'); PackSize := -1; UnpSize := -1; end; else Result := E_END_ARCHIVE; end; if Result = E_SUCCESS then begin copy_str2buf(TStrBuf(ArcName), arec^.fname); FileAttr := GENERIC_ATTRIBUTE_FILE; FileTime := UnixFileTimeToWcxTime(TUnixFileTime(arec^.info.buildtime)); Inc(arec^.headers); end; end; end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath: PChar; DestName: PChar): Integer; var rpm_file : file; rpm_name : String; index : Integer; buf : Pointer; buf_size : LongWord; fsize : LongWord; fgReadError : Boolean; fgWriteError: Boolean; faborted : Boolean; testonly : Boolean; arec : PArchiveRec absolute hArcData; // Helper function to output one line of text to rpm_file function Line(S: AnsiString): Integer; begin Result := 0; if not fgReadError and not fgWriteError then if testonly then Result := Length(S) + 2 else begin S := S + #13#10; BlockWrite(rpm_file, S[1], Length(S), Result); if IOResult <> 0 then fgWriteError := True; end; end; begin case Operation of // Because rpm archive doesn't contains length of _alone_ attached // gzipped cpio archive, plugin cann't skip or test rpm archive // correctly without extracting archive. PK_SKIP : Result := E_SUCCESS; PK_TEST, PK_EXTRACT : begin testonly:=Operation=PK_TEST; if not testonly then begin rpm_name := String(DestName); AssignFile(rpm_file, rpm_name); Rewrite(rpm_file, 1); end; if not testonly and (IOResult <> 0) then begin Result := E_EWRITE end else begin fgReadError := False; fgWriteError := False; faborted:=false; case (arec^.headers-1) of HDR_DATA: begin fsize := arec^.arch_len; buf_size := 65536; GetMem(buf, buf_size); while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} if not testonly then begin BlockWrite(rpm_file, buf^, buf_size); if IOResult <> 0 then begin fgWriteError := True; Break; end;{if IO error} end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then faborted:=true; end;{while} if not fgReadError and not fgWriteError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if not testonly and not fgReadError then begin BlockWrite(rpm_file, buf^, fsize); if IOResult <> 0 then fgWriteError := True; end; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then faborted:=true; end; end; Freemem(buf, buf_size); //Other pseudo-files end; HDR_INFO: with arec^.info do begin Line('NAME: ' + name); Line('VERSION: ' + version); Line('RELEASE: ' + release); Line('SUMMARY: ' + summary); Line('DISTRIBUTION: ' + distribution); Line('VENDOR: ' + vendor); Line('LICENSE: ' + license); Line('PACKAGER: ' + packager); Line('GROUP: ' + group); Line('OS: ' + os); Line('ARCH: ' + arch); Line('SOURCE RPM: ' + sourcerpm); Line('DESCRIPTION: '); Line(description); if Length(arec^.deps.names) > 0 then begin Line(EmptyStr); Line('REQUIRES: '); for index:= 0 to High(arec^.deps.names) do begin Line(' ' + arec^.deps.names[index]); end; end; end; end; if faborted then Result:=E_EABORTED else if fgReadError then Result := E_BAD_DATA else if fgWriteError then Result:= E_EWRITE else Result := E_SUCCESS; if not testonly then begin if result = E_SUCCESS then FileSetDate(tfilerec(rpm_file).handle, UnixFileTimeToWcxTime(TUnixFileTime(arec^.info.buildtime))); CloseFile(rpm_file); if result <> E_SUCCESS then Erase(rpm_file); end; end; end else Result := E_SUCCESS; end;{case operation} end; procedure SetProcessDataProc(hArcData: TArcHandle; ProcessDataProc: TProcessDataProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc(hArcData: TArcHandle; ChangeVolProc: TChangeVolProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.changevol_proc := ChangeVolProc; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm.lpi��������������������������������������������������������0000644�0001750�0000144�00000012111�15104114162�017734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <LRSInOutputDirectory Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="RPM WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../rpm.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="4"> <Unit0> <Filename Value="rpm.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="rpm_io.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="rpm_def.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="rpm_archive.pas"/> <IsPartOfProject Value="True"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../rpm.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm.dpr��������������������������������������������������������0000644�0001750�0000144�00000001726�15104114162�017747� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2012 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** library rpm; uses SysUtils, Classes, WcxPlugin, rpm_io in 'rpm_io.pas', rpm_def in 'rpm_def.pas', rpm_archive in 'rpm_archive.pas'; exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc, GetBackgroundFlags; {$R *.res} begin {$IFNDEF MSWINDOWS} WriteLn('Rpm plugin is loaded'); {$ENDIF} end. ������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm.dof��������������������������������������������������������0000644�0001750�0000144�00000002373�15104114162�017731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Compiler] A=0 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=0 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= SearchPath= Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;dcldtree50 Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=e:\delphi\exedpr\totalcmd.exe [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=1 Release=0 Build=188 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Brain group FileDescription=rpm plugin for Windows Commander FileVersion=1.1.0.188 InternalName=rpm.wcx LegalCopyright=Mandryka Yurij LegalTrademarks= OriginalFilename=rpm.wcx ProductName=rpm plugin ProductVersion=1.1.0.0 Comments=any questions on braingroup@hotmail.ru ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/src/rpm.cfg��������������������������������������������������������0000644�0001750�0000144�00000000546�15104114162�017720� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-$A- -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I- -$J+ -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\borland\delphi5\Projects\Bpl" -LN"c:\borland\delphi5\Projects\Bpl" ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/license.txt��������������������������������������������������������0000644�0001750�0000144�00000002205�15104114162�020027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPM plugin v.1.4 for Windows Commander. Copyright (c) 2000..2002 Mandryka Yurij ( Brain Group ) Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse rpm archives with Windows Commander 4.0 or greater. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any questions about plugin can be made via e-mail : braingroup@hotmail.ru and information about plugin can be found on Brain Group web site : http://braingroup.hotmail.ru/wcplugins/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/rpm/install.txt��������������������������������������������������������0000644�0001750�0000144�00000001026�15104114162�020053� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install RPM plugin: 1. Unzip the rpm.wcx and cpio.wcx to the Totalcmd directory 2. In Total Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type rpm as the extension 6. Click 'new type', and select the rpm.wcx 5. type cpio as the extension 6. Click 'new type', and select the cpio.wcx 7. Click OK What it does: This plugin allow you to browse rpm archives. Mandryka Yurij Brain group http://braingroup.hotmail.ru/wcplugins/ mailto:braingroup@hotmail.ru����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015601� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016370� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb_io.pas�����������������������������������������������������0000644�0001750�0000144�00000003420�15104114162�020315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_io; interface {$A-,I-} uses deb_def; function deb_ReadHeader(var f : file; var header, lastheader : deb_Header) : Boolean; implementation uses SysUtils, DCStrUtils, DCFileAttributes; function deb_ReadHeader(var f : file; var header, lastheader : deb_Header) : Boolean; var tmp_str : String; loadlen : Integer; tmp_buf : array [0..259] of Char; begin Result:= False; loadlen:= size_deb_files; // Skip last header Seek(f, lastheader.pos + lastheader.size); if IOResult <> 0 then Exit; // Read next header header.pos:= FilePos(f) + size_deb_files; BlockRead(f, {%H-}tmp_buf, loadlen); if IOResult <> 0 then Exit; // Other version DPKG - offset 1. if tmp_buf[0] = #10 then begin Seek(f, lastheader.pos + lastheader.size + 1); if IOResult <> 0 then Exit; header.pos:= FilePos(f) + size_deb_files; BlockRead(f, tmp_buf, loadlen); if IOResult <> 0 then Exit; end; // Read file name SetLength(header.filename, 16); Move(tmp_buf[0], header.filename[1], 16); header.filename:= Trim(header.filename); if (Length(header.filename) > 0) then begin loadlen:= Length(header.filename); if header.filename[loadlen] = '/' then SetLength(header.filename, loadlen - 1); end; // Read file time SetLength(tmp_str, 12); Move(tmp_buf[16], tmp_str[1], 12); header.Time:= StrToIntDef(Trim(tmp_str), 0); // Read file mode SetLength(tmp_str, 8); Move(tmp_buf[40], tmp_str[1], 8); tmp_str:= Trim(tmp_str); if Length(tmp_str) > 0 then header.Mode:= OctToDec(tmp_str) else begin header.Mode:= S_IRUSR or S_IWUSR or S_IRGRP or S_IROTH; end; // Read file size SetLength(tmp_str, 10); Move(tmp_buf[48], tmp_str[1], 10); header.size:= StrToIntDef(Trim(tmp_str), 0); Result := True; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb_def.pas����������������������������������������������������0000644�0001750�0000144�00000000400�15104114162�020437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_def; interface type deb_Header = record filename : String; time : longint; size : longint; mode : longint; pos : longint; end; const size_deb_files= 60; size_deb_signature = 72; implementation end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb_archive.pas������������������������������������������������0000644�0001750�0000144�00000022003�15104114162�021325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_archive; interface {$mode delphi}{$A-,I-} {$include calling.inc} uses Classes, WcxPlugin, deb_def, deb_io; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; fgEndArchive : Boolean; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; last_header : deb_Header; end;{ArchiveRec} function GetPackerCaps : Integer; dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; export; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; export; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; export; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; export; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; export; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; export; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes, DCFileAttributes; function GetPackerCaps: Integer; begin Result := PK_CAPS_MULTIPLE; end; function GetBackgroundFlags: Integer; begin Result:= BACKGROUND_UNPACK; end; function OpenArchive(var ArchiveData: TOpenArchiveData): TArcHandle; var arch : THandle; filename : String; fgError : Boolean; arec : PArchiveRec absolute Result; function SignatureProbe: integer; //0 Ales Gut; 1 IO error; 2 is not DEBIAN PKG const deb_signature: array [0..20] of Char ='!<arch>'#10'debian-binary'; var tmp_buf : array [0..20] of Char; j : integer; begin Result:=2; BlockRead(arec^.handle_file, tmp_buf, 21); if IOResult <> 0 then begin Result:=1; Exit; end; for j:=0 to 20 do if deb_signature[j] <> tmp_buf[j] then Exit; Result:=0; end; begin ArchiveData.OpenResult := E_EOPEN; arec := nil; arch := 0; fgError := False; filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = THandle(-1) then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; fdate := FileAge(filename); fgEndArchive := False; process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; last_header.size:=0; last_header.pos:=size_deb_signature; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end else begin case SignatureProbe of 1: begin ArchiveData.OpenResult := E_EREAD; fgError := True; end; 2: begin ArchiveData.OpenResult := E_UNKNOWN_FORMAT; fgError := True; end else begin Seek(arec^.handle_file, size_deb_signature); if IOResult <> 0 then fgError := True; end; end;{case SignatureProbe} end;{ioresult} end;{arch = -1} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; end else begin ArchiveData.OpenResult := E_SUCCESS; end; end; function CloseArchive(hArcData: TArcHandle): Integer; var arec : PArchiveRec absolute hArcData; begin CloseFile(arec^.handle_file); FileClose(arec^.handle_io); Dispose(arec); Result := E_SUCCESS; end; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData): Integer; var header : deb_Header; arec : PArchiveRec absolute hArcData; begin Result := E_EREAD; if arec^.fgEndArchive then Result := E_END_ARCHIVE else begin while True do begin if not deb_ReadHeader(arec^.handle_file, header, arec^.last_header) then begin Result := E_END_ARCHIVE; Break end else begin with HeaderData do begin StrPCopy(ArcName, arec^.fname); StrPCopy(FileName, header.filename); PackSize := header.size; UnpSize := header.size; UnpVer := 2; HostOS := 0; FileCRC := 0; FileAttr := UnixToWcxFileAttr(header.mode); FileTime := UnixFileTimeToWcxTime(TUnixFileTime(header.time)); end;{with} Result := E_SUCCESS; Break; end{if header readed} end;{while true} arec^.last_header := header; end;{if not end of archive} end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath: PChar; DestName: PChar): Integer; var targz_file : file; targz_name : String; buf : Pointer; buf_size : LongWord; fsize : LongWord; fpos : LongWord; fgReadError : Boolean; fgWriteError: Boolean; fAborted : Boolean; head : deb_Header; arec : PArchiveRec absolute hArcData; begin head := arec^.last_header; case Operation of PK_TEST : begin fAborted:=false; fsize := head.size; fpos := head.pos; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; Seek(arec^.handle_file, fpos); if IOResult <> 0 then begin fgReadError := True; fAborted:=True; end; while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:=E_EABORTED else if fgReadError then Result := E_EREAD else Result := 0; Seek(arec^.handle_file, size_deb_signature); FreeMem(buf, 65536); end;{PK_TEST} PK_SKIP : Result := 0; PK_EXTRACT : begin targz_name := String(DestName); AssignFile(targz_file, targz_name); Rewrite(targz_file, 1); if IOResult <> 0 then Result := E_ECREATE else begin fgReadError := False; fgWriteError :=False; fAborted := False; fsize := head.size; fpos := head.pos; buf_size := 65536; GetMem(buf, buf_size); Seek(arec^.handle_file, fpos); if IOResult <> 0 then begin fgReadError := True; fAborted:=True; end; while not fAborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} BlockWrite(targz_file, buf^, buf_size); if ioresult<>0 then begin fgWriteError:=true; break; end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; BlockWrite(targz_file, buf^, fsize); if ioresult<>0 then fgWriteError:=true; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:= E_EABORTED else if fgWriteError then Result := E_EWRITE else if fgReadError then Result := E_EREAD else Result := 0; FileSetDate(tfilerec(targz_file).handle, UnixFileTimeToWcxTime(TUnixFileTime(head.time))); CloseFile(targz_file); Seek(arec^.handle_file, size_deb_signature); if result<>0 then Erase(targz_file); FreeMem(buf, 65536); end; end;{PK_EXTRACT} else Result := E_SUCCESS; end;{case operation} end; procedure SetProcessDataProc(hArcData: TArcHandle; ProcessDataProc: TProcessDataProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc(hArcData: TArcHandle; ChangeVolProc: TChangeVolProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.changevol_proc := ChangeVolProc; end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb.lpi��������������������������������������������������������0000644�0001750�0000144�00000012122�15104114162�017626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="DEB WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2018 Koblov Alexander"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\deb.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <HostApplicationFilename Value="X:\Totalcmd\Totalcmd.exe"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <HostApplicationFilename Value="X:\Totalcmd\Totalcmd.exe"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="4"> <Unit0> <Filename Value="deb.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="deb_io.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="deb_archive.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="deb_def.pas"/> <IsPartOfProject Value="True"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\deb.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb.dpr��������������������������������������������������������0000644�0001750�0000144�00000000435�15104114162�017633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library deb; uses deb_io in 'deb_io.pas', deb_archive in 'deb_archive.pas', deb_def in 'deb_def.pas'; exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc, GetBackgroundFlags; {$R *.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/src/deb.dof��������������������������������������������������������0000644�0001750�0000144�00000002417�15104114162�017620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[FileVersion] Version=6.0 [Compiler] A=8 B=0 C=0 D=0 E=0 F=0 G=1 H=1 I=0 J=0 K=0 L=0 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=1 V=1 W=1 X=1 Y=0 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=65536 ExeDescription= [Directories] OutputDir=bin UnitOutputDir=bin PackageDLLOutputDir= PackageDCPOutputDir= SearchPath=..\..\.. Packages=vcl;rtl;vclx Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=X:\Totalcmd\Totalcmd.exe Launcher= UseLauncher=0 DebugCWD= [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=1 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Alexandre Maximov FileDescription= FileVersion=1.0.0.0 InternalName=deb.wcx LegalCopyright= LegalTrademarks= OriginalFilename=deb.wcx ProductName=WC Plugin for Debian pakages ProductVersion=1.0.0.0 Comments= [Excluded Packages] [HistoryLists\hlUnitAliases] Count=1 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/license.txt��������������������������������������������������������0000644�0001750�0000144�00000002037�15104114162�017766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DEB plugin for Windows Commander. Copyright (c) 2002 Alexandre Maximov Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse debian linux package (*.deb) archives with Windows Commander 4.0 or greater. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any information about plugin can be found on web site : http://max.reklam.ru �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/deb/install.txt��������������������������������������������������������0000644�0001750�0000144�00000000646�15104114162�020016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install DEB plugin: 1. Unzip the deb.wcx to the Wincmd directory 2. In Windows Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type deb as the extension 6. Click 'new type', and select the deb.wcx 7. Click OK What it does: This plugin allow you to browse debian linux package archives. Alexandre Maximov. Penza. Russia. http://max.reklam.ru ������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016001� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016570� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio_io.pas���������������������������������������������������0000644�0001750�0000144�00000017233�15104114162�020724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // Part of code (functions DirectoryExists and ForceDirectories) // got from Delphi source code //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit cpio_io; interface uses cpio_def, Classes; type TStrBuf = array[1..260] of Char; function CPIO_ReadHeader(var f : file; var header : CPIO_Header) : Boolean; function IsCPIOArchive(FileName: String): Boolean; function AlignFilePointer(var f : file; align : Integer) : Boolean; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function CreateDirectories(Dir : String) : Boolean; function correct_filename(oldname : AnsiString) : AnsiString; implementation uses SysUtils; {$IFNDEF FPC} // for compiling under Delphi Const DirSeparators : set of char = ['/','\']; Procedure DoDirSeparators (Var FileName : String); VAr I : longint; begin For I:=1 to Length(FileName) do If FileName[I] in DirSeparators then FileName[i]:=PathDelim; end; {$ENDIF} procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function AlignFilePointer; var start : Integer; mul : LongWord; begin Result := False; start := FilePos(f); case align of 2 : mul := $FFFFFFFE; 4 : mul := $FFFFFFFC; 8 : mul := $FFFFFFF8; else Exit; end;{case} if (start mod align) <> 0 then begin start := start and mul; Inc(start, align); end; Seek(f, start); if IOResult = 0 then Result := True; end; function ExcludeTrailingBackslash(Dir:string):string; begin if (length(dir)>0) and (dir[length(dir)]='\') then result:=copy(dir,1,length(dir)-1) else result:=dir; end; function CreateDirectories(Dir : String) : Boolean; begin Result := True; if Length(Dir) = 0 then Result := False else begin Dir := ExcludeTrailingBackslash(Dir); if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir) then Exit; Result := CreateDirectories(ExtractFilePath(Dir)) and CreateDir(Dir); end; end; function OctalToDec(Octal: String): Longword; var i: Integer; begin Result := 0; for i := 1 to Length(Octal) do begin Result := Result shl 3; case Octal[i] of '0'..'7': Result := Result + Longword(Ord(Octal[i]) - Ord('0')); end; end; end; function HexToDec(Hex: String): Longword; var i: Integer; begin Result := 0; for i := 1 to Length(Hex) do begin Result := Result shl 4; case Hex[i] of '0'..'9': Result := Result + LongWord(Ord(Hex[i]) - Ord('0')); 'A'..'F': Result := Result + LongWord(Ord(Hex[i]) - Ord('A')) + 10; 'a'..'f': Result := Result + LongWord(Ord(Hex[i]) - Ord('a')) + 10; end; end; end; function CPIO_ReadHeader(var f : file; var header : CPIO_Header): Boolean; var Buffer : array [0..259] of AnsiChar; OldHdr : TOldBinaryHeader absolute Buffer; OdcHdr : TOldCharHeader absolute Buffer; NewHdr : TNewCharHeader absolute Buffer; ofs : Integer; begin Result := False; {First, check the type of header} BlockRead(f, Buffer[0], 6); if IOResult <> 0 then Exit; header.IsOldHeader := False; // Old binary format. if PWord(@Buffer[0])^ = $71C7 then begin header.IsOldHeader := True; BlockRead(f, Buffer[6], SizeOf(TOldBinaryHeader) - 6); if IOResult <> 0 then Exit; with header, OldHdr do begin magic := c_magic; dev_major := c_dev; dev_minor := 0; inode := c_ino; mode := c_mode; uid := c_uid; gid := c_gid; nlink := c_nlink; mtime := 65536 * c_mtime1 + c_mtime2; filesize := 65536 * c_filesize1 + c_filesize2; namesize := c_namesize; end; end // Old Ascii format. else if strlcomp(Buffer, '070707', 6) = 0 then begin BlockRead(f, Buffer[6], SizeOf(TOldCharHeader) - 6); if IOResult <> 0 then Exit; with header, OdcHdr do begin magic := OctalToDec(c_magic); dev_major := OctalToDec(c_dev); dev_minor := 0; inode := OctalToDec(c_ino); mode := OctalToDec(c_mode); uid := OctalToDec(c_uid); gid := OctalToDec(c_gid); nlink := OctalToDec(c_nlink); mtime := OctalToDec(c_mtime); filesize := OctalToDec(c_filesize); namesize := OctalToDec(c_namesize); end; end // New Ascii format. else if (strlcomp(Buffer, '070701', 6) = 0) or (strlcomp(Buffer, '070702', 6) = 0) then begin BlockRead(f, Buffer[6], SizeOf(TNewCharHeader) - 6); if IOResult <> 0 then Exit; with header, NewHdr do begin magic := HexToDec(c_magic); dev_major := HexToDec(c_devmajor); dev_minor := HexToDec(c_devminor); inode := HexToDec(c_ino); mode := HexToDec(c_mode); uid := HexToDec(c_uid); gid := HexToDec(c_gid); nlink := HexToDec(c_nlink); mtime := HexToDec(c_mtime); filesize := HexToDec(c_filesize); namesize := HexToDec(c_namesize); end; end else Exit; with header do begin if namesize = 0 then exit; {Error!} {Read name} ofs:=0; if namesize > 259 then begin ofs := namesize - 259; namesize := 259; end; FillChar(Buffer, SizeOf(Buffer), #0); BlockRead(f, Buffer, namesize); if IOResult <> 0 then Exit; SetString(filename, Buffer, namesize); if ofs <> 0 then Seek(f, FilePos(f) + ofs); origname := filename; DoDirSeparators(filename); if IsOldHeader then begin if not AlignFilePointer(f, 2) then Exit; end else if not AlignFilePointer(f, 4) then Exit; //Correct file name started with "./" or "/" filename := correct_filename(filename); end; Result := True; end; function IsCPIOArchive(FileName: String): Boolean; type TAsciiHeader = array[0..5] of AnsiChar; const sOld: TAsciiHeader = ('0', '7', '0', '7', '0', '7'); sNew: TAsciiHeader = ('0', '7', '0', '7', '0', '1'); sCrc: TAsciiHeader = ('0', '7', '0', '7', '0', '2'); var Buf: TAsciiHeader; Stream: TFileStream; begin Result := False; Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); try if (Stream.Size >= 6) and (Stream.Read(Buf[0], 6) = 6) then begin Result := // Binary format (PWord(@Buf[0])^ = $71C7) or // Ascii formats CompareMem(@Buf[0], @sOld[0], 6) or CompareMem(@Buf[0], @sNew[0], 6) or CompareMem(@Buf[0], @sCrc[0], 6); end; finally Stream.Free; end; end; function correct_filename(oldname : AnsiString) : AnsiString; begin Result := oldname; if Length(oldname) > 1 then begin case oldname[1] of '.' : case oldname[2] of '/', '\' : System.Delete(oldname, 1, 2); end;{case} '/', '\' : System.Delete(oldname, 1, 1); end;{case} end; Result := oldname; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio_def.pas��������������������������������������������������0000644�0001750�0000144�00000006143�15104114162�021051� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit cpio_def; interface type CPIO_Header = record magic, dev_major, dev_minor, inode, mode, uid, gid, nlink, mtime, filesize, namesize: Longword; filename : String; origname : String; IsOldHeader: Boolean; end;{CPIO_Header} TOldBinaryHeader=packed record c_magic, c_dev, c_ino, c_mode, c_uid, c_gid, c_nlink, c_rdev:word; c_mtime1,c_mtime2:word; c_namesize:word; c_filesize1,c_filesize2:word; (* char c_name[c_namesize rounded to word];*) end; TOldCharHeader=packed record c_magic : array[0..5] of AnsiChar; {070707} c_dev : array[0..5] of AnsiChar; c_ino : array[0..5] of AnsiChar; c_mode : array[0..5] of AnsiChar; c_uid : array[0..5] of AnsiChar; c_gid : array[0..5] of AnsiChar; c_nlink : array[0..5] of AnsiChar; c_rdev : array[0..5] of AnsiChar; c_mtime : array[0..10] of AnsiChar; c_namesize: array[0..5] of AnsiChar; c_filesize: array[0..10] of AnsiChar; end; TNewCharHeader=packed record c_magic : array[0..5] of AnsiChar; {070701} {070702 - CRC format} c_ino : array[0..7] of AnsiChar; c_mode : array[0..7] of AnsiChar; c_uid : array[0..7] of AnsiChar; c_gid : array[0..7] of AnsiChar; c_nlink : array[0..7] of AnsiChar; c_mtime : array[0..7] of AnsiChar; c_filesize : array[0..7] of AnsiChar; //must be 0 for FIFOs and directories c_devmajor : array[0..7] of AnsiChar; c_devminor : array[0..7] of AnsiChar; c_rdevmajor: array[0..7] of AnsiChar; //only valid for chr and blk special files c_rdevminor: array[0..7] of AnsiChar; //only valid for chr and blk special files c_namesize : array[0..7] of AnsiChar; //count includes terminating NUL in pathname c_check : array[0..7] of AnsiChar; //0 for "new" portable format; for CRC format the sum of all the bytes in the file end; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio_archive.pas����������������������������������������������0000644�0001750�0000144�00000024062�15104114162�021734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2009 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** // History // 2001-02-04 Bug: Error Opening rpm file on CD (readonly) // Fix: Add FileMode = 0 before Reset // Who: Oliver Haeger <haeger@inghb.de> // 2001-02-27 Bug: My or Ghisler I don't know : WC incorrectly // work with names in archive started with // "./" or "/" (normal UNIX filenames form) unit cpio_archive; interface {$mode delphi}{$A-,I-} {$include calling.inc} uses Classes, WcxPlugin, cpio_def, cpio_io; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; fgEndArchive : Boolean; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; last_header : CPIO_Header; end;{ArchiveRec} function GetPackerCaps : Integer; dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; export; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; export; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; export; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; export; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; export; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; export; function CanYouHandleThisFile(FileName: PAnsiChar): Boolean; dcpcall; export; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes, DCFileAttributes, DCOSUtils; function GetPackerCaps: Integer; begin Result := PK_CAPS_MULTIPLE; end; function GetBackgroundFlags: Integer; begin Result := BACKGROUND_UNPACK; end; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; var arch : THandle; filename : String; fgError : Boolean; arec : PArchiveRec absolute Result; begin arec := nil; arch := 0; fgError := False; filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = feInvalidHandle then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; fdate := FileAge(filename); fgEndArchive := False; process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end;{ioresult} end;{arch = -1} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; ArchiveData.OpenResult := E_EOPEN end; end; function CloseArchive(hArcData: TArcHandle): Integer; var arec : PArchiveRec absolute hArcData; begin CloseFile(arec^.handle_file); FileClose(arec^.handle_io); Dispose(arec); Result := E_SUCCESS; end; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData): Integer; var header : CPIO_Header; arec : PArchiveRec absolute hArcData; begin Result := E_EREAD; if arec^.fgEndArchive then Result := E_END_ARCHIVE else begin while True do begin if CPIO_ReadHeader(arec^.handle_file, header) then begin if header.filename = 'TRAILER!!!' then begin Result := E_END_ARCHIVE; Break end else begin if header.filesize <> 0 then begin with HeaderData do begin copy_str2buf(TStrBuf(ArcName), arec^.fname); copy_str2buf(TStrBuf(FileName), header.filename); PackSize := header.filesize; UnpSize := header.filesize; FileAttr := UnixToWcxFileAttr(header.mode); FileTime := UnixFileTimeToWcxTime(TUnixFileTime(header.mtime)); end;{with} Result := 0; Break; end else Continue; end;{not end of file "TRAILER!!!"} end{if header readed} else begin Result := E_EREAD; Break; end; end;{while true} arec^.last_header := header; end;{if not end of archive} end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath: PChar; DestName: PChar): Integer; var cpio_file : file; cpio_name : String; cpio_dir : String; buf : Pointer; buf_size : LongWord; fsize : LongWord; fgReadError : Boolean; fgWriteError: Boolean; fAborted : Boolean; head : CPIO_Header; arec : PArchiveRec absolute hArcData; begin head := arec^.last_header; case Operation of PK_TEST : begin faborted:=false; fsize := head.filesize; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then faborted:=true; end;{while} if not fgReadError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if Assigned(arec^.process_proc) then arec^.process_proc(nil, fsize); end; end; if faborted then Result:=E_EABORTED else if fgReadError then Result := E_EREAD else begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end; FreeMem(buf, 65536); end;{PK_TEST} PK_SKIP : begin Seek(arec^.handle_file, FilePos(arec^.handle_file) + LongInt(head.filesize)); if IOResult = 0 then begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end else Result := E_EREAD; end;{PK_SKIP} PK_EXTRACT : begin cpio_name := String(DestName); cpio_dir := ExtractFileDir(cpio_name); if CreateDirectories(cpio_dir) then begin AssignFile(cpio_file, cpio_name); Rewrite(cpio_file, 1); if IOResult <> 0 then Result := E_ECREATE else begin fsize := head.filesize; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; fgWriteError :=False; fAborted := False; while not fAborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} BlockWrite(cpio_file, buf^, buf_size); if ioresult<>0 then begin fgWriteError:=true; break; end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; BlockWrite(cpio_file, buf^, fsize); if ioresult<>0 then fgWriteError:=true; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:= E_EABORTED else if fgWriteError then Result := E_EWRITE else if fgReadError then Result := E_EREAD else begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end; CloseFile(cpio_file); if Result <> 0 then Erase(cpio_file) else begin mbFileSetAttr(cpio_name, UnixToWcxFileAttr(head.mode)); FileSetDate(cpio_name, UnixFileTimeToWcxTime(TUnixFileTime(head.mtime))); end; FreeMem(buf, 65536); end; end else Result := E_ECREATE; end{PK_EXTRACT} else Result := 0; end;{case operation} end; procedure SetProcessDataProc(hArcData: TArcHandle; ProcessDataProc: TProcessDataProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc(hArcData: TArcHandle; ChangeVolProc: TChangeVolProc); var arec : PArchiveRec absolute hArcData; begin if hArcData <> wcxInvalidHandle then begin arec^.changevol_proc := ChangeVolProc; end; end; function CanYouHandleThisFile; begin try Result:= IsCPIOArchive(StrPas(FileName)); except Result := False; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio.lpi������������������������������������������������������0000644�0001750�0000144�00000012140�15104114162�020226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="CPIO WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../cpio.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="4"> <Unit0> <Filename Value="cpio.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="cpio_io.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="cpio_def.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="cpio_archive.pas"/> <IsPartOfProject Value="True"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../cpio.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio.dpr������������������������������������������������������0000644�0001750�0000144�00000001660�15104114162�020234� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** library cpio; uses SysUtils, Classes, WcxPlugin, cpio_io in 'cpio_io.pas', cpio_def in 'cpio_def.pas', cpio_archive in 'cpio_archive.pas'; exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc, GetBackgroundFlags, CanYouHandleThisFile; {$R *.res} begin end. ��������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio.dof������������������������������������������������������0000644�0001750�0000144�00000002433�15104114162�020216� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Compiler] A=0 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=0 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= SearchPath= Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;dcldtree50 Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=e:\delphi\exedpr\wincmd32.exe [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=0 Release=0 Build=79 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Brain group FileDescription=cpio plugin for rpm plugin for Windows Commander FileVersion=1.0.0.79 InternalName=cpio.wcx LegalCopyright=Mandryka Yurij LegalTrademarks= OriginalFilename=cpio.wcx ProductName=cpio plugin for rpm plugin ProductVersion=1.0.0.0 Comments=any questions on braingroup@hotmail.ru �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/src/cpio.cfg������������������������������������������������������0000644�0001750�0000144�00000000546�15104114162�020210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-$A- -$B- -$C+ -$D+ -$E- -$F- -$G+ -$H+ -$I- -$J+ -$K- -$L+ -$M- -$N+ -$O+ -$P+ -$Q- -$R- -$S- -$T- -$U- -$V+ -$W- -$X+ -$YD -$Z1 -cg -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\borland\delphi5\Projects\Bpl" -LN"c:\borland\delphi5\Projects\Bpl" ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/license.txt�������������������������������������������������������0000644�0001750�0000144�00000002205�15104114162�020163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPM plugin v.1.4 for Windows Commander. Copyright (c) 2000..2002 Mandryka Yurij ( Brain Group ) Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse rpm archives with Windows Commander 4.0 or greater. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any questions about plugin can be made via e-mail : braingroup@hotmail.ru and information about plugin can be found on Brain Group web site : http://braingroup.hotmail.ru/wcplugins/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/cpio/install.txt�������������������������������������������������������0000644�0001750�0000144�00000001026�15104114162�020207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install RPM plugin: 1. Unzip the rpm.wcx and cpio.wcx to the Totalcmd directory 2. In Total Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type rpm as the extension 6. Click 'new type', and select the rpm.wcx 5. type cpio as the extension 6. Click 'new type', and select the cpio.wcx 7. Click OK What it does: This plugin allow you to browse rpm archives. Mandryka Yurij Brain group http://braingroup.hotmail.ru/wcplugins/ mailto:braingroup@hotmail.ru����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016133� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016722� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/mimeinln.pas������������������������������������������������0000644�0001750�0000144�00000035465�15104114162�021254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{==============================================================================| | Project : Ararat Synapse | 001.001.011 | |==============================================================================| | Content: Inline MIME support procedures and functions | |==============================================================================| | Copyright (c)1999-2017, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2000-2006. | | All Rights Reserved. | |==============================================================================| | Contributor(s): Copyright (C) 2022 Alexander Koblov (alexx2000@mail.ru) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(Utilities for inline MIME) Support for Inline MIME encoding and decoding. Used RFC: RFC-2047, RFC-2231 } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit MimeInLn; interface uses SysUtils, Classes; type TSpecials = set of AnsiChar; const SpecialChar: TSpecials = ['=', '(', ')', '[', ']', '<', '>', ':', ';', ',', '@', '/', '?', '\', '"', '_']; NonAsciiChar: TSpecials = [#0..#31, #127..#255]; {:Returns a portion of the "Value" string located to the left of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateLeft(const Value, Delimiter: string): string; {:Returns the portion of the "Value" string located to the right of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateRight(const Value, Delimiter: string): string; {:Returns parameter value from string in format: parameter1="value1"; parameter2=value2} function GetParameter(const Value, Parameter: string): string; {:Fetch string from left of Value string. This function ignore delimitesr inside quotations.} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; {:Decodes mime inline encoding (i.e. in headers).} function InlineDecode(const Value: string): string; {:Encodes string to MIME inline encoding.} function InlineEncode(const Value: string): string; {:Returns @true, if "Value" contains characters which require inline coding.} function NeedInline(const Value: AnsiString): boolean; {:Decodes mime inline encoding similar to @link(InlineDecode), but it checks first that "Value" encoded by inline coding.} function InlineDecodeEx(const Value: string): string; {:Inline MIME encoding similar to @link(InlineEncode), but it checks first that "Value" contains characters which require inline coding.} function InlineEncodeEx(const Value: string): string; implementation uses Base64, LConvEncoding, DCConvertEncoding; {==============================================================================} function UnquoteStr(const Value: string; Quote: Char): string; var n: integer; inq, dq: Boolean; c, cn: char; begin Result := ''; if Value = '' then Exit; if Value = Quote + Quote then Exit; inq := False; dq := False; for n := 1 to Length(Value) do begin c := Value[n]; if n <> Length(Value) then cn := Value[n + 1] else cn := #0; if c = quote then if dq then dq := False else if not inq then inq := True else if cn = quote then begin Result := Result + Quote; dq := True; end else inq := False else Result := Result + c; end; end; {==============================================================================} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; var b: Boolean; begin Result := ''; b := False; while Length(Value) > 0 do begin if b then begin if Pos(Quotation, Value) = 1 then b := False; Result := Result + Value[1]; Delete(Value, 1, 1); end else begin if Pos(Delimiter, Value) = 1 then begin Delete(Value, 1, Length(delimiter)); break; end; b := Pos(Quotation, Value) = 1; Result := Result + Value[1]; Delete(Value, 1, 1); end; end; end; {==============================================================================} function SeparateLeft(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x < 1 then Result := Value else Result := Copy(Value, 1, x - 1); end; {==============================================================================} function SeparateRight(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x > 0 then x := x + Length(Delimiter) - 1; Result := Copy(Value, x + 1, Length(Value) - x); end; {==============================================================================} function GetParameter(const Value, Parameter: string): string; var s: string; v: string; begin Result := ''; v := Value; while v <> '' do begin s := Trim(FetchEx(v, ';', '"')); if Pos(Uppercase(parameter), Uppercase(s)) = 1 then begin Delete(s, 1, Length(Parameter)); s := Trim(s); if s = '' then Break; if s[1] = '=' then begin Result := Trim(SeparateRight(s, '=')); Result := UnquoteStr(Result, '"'); break; end; end; end; end; {==============================================================================} function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; var x, l, lv: Integer; c: AnsiChar; b: Byte; bad: Boolean; begin lv := Length(Value); SetLength(Result, lv); x := 1; l := 1; while x <= lv do begin c := Value[x]; Inc(x); if c <> Delimiter then begin Result[l] := c; Inc(l); end else if x < lv then begin Case Value[x] Of #13: if (Value[x + 1] = #10) then Inc(x, 2) else Inc(x); #10: if (Value[x + 1] = #13) then Inc(x, 2) else Inc(x); else begin bad := False; Case Value[x] Of '0'..'9': b := (Byte(Value[x]) - 48) Shl 4; 'a'..'f', 'A'..'F': b := ((Byte(Value[x]) And 7) + 9) shl 4; else begin b := 0; bad := True; end; end; Case Value[x + 1] Of '0'..'9': b := b Or (Byte(Value[x + 1]) - 48); 'a'..'f', 'A'..'F': b := b Or ((Byte(Value[x + 1]) And 7) + 9); else bad := True; end; if bad then begin Result[l] := c; Inc(l); end else begin Inc(x, 2); Result[l] := AnsiChar(b); Inc(l); end; end; end; end else break; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := DecodeTriplet(Value, '='); end; {==============================================================================} function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; Specials: TSpecials): AnsiString; var n, l: Integer; s: AnsiString; c: AnsiChar; begin SetLength(Result, Length(Value) * 3); l := 1; for n := 1 to Length(Value) do begin c := Value[n]; if c in Specials then begin Result[l] := Delimiter; Inc(l); s := IntToHex(Ord(c), 2); Result[l] := s[1]; Inc(l); Result[l] := s[2]; Inc(l); end else begin Result[l] := c; Inc(l); end; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', ['='] + NonAsciiChar); end; {==============================================================================} function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', SpecialChar + NonAsciiChar); end; {==============================================================================} function InlineDecode(const Value: string): string; var s, su, e, v: string; x, y, z, n: Integer; b: Boolean; c: Char; function SearchEndInline(const Value: string; be: Integer): Integer; var n, q: Integer; begin q := 0; Result := 0; for n := be + 2 to Length(Value) - 1 do if Value[n] = '?' then begin Inc(q); if (q > 2) and (Value[n + 1] = '=') then begin Result := n; Break; end; end; end; begin Result := ''; v := Value; x := Pos('=?', v); y := SearchEndInline(v, x); // fix for broken coding // with begin, but not with end. if (x > 0) and (y <= 0) then y := Length(Result); while (y > x) and (x > 0) do begin s := Copy(v, 1, x - 1); if Trim(s) <> '' then Result := Result + s; s := Copy(v, x, y - x + 2); Delete(v, 1, y + 1); su := Copy(s, 3, Length(s) - 4); z := Pos('?', su); if (Length(su) >= (z + 2)) and (su[z + 2] = '?') then begin e := SeparateLeft(Copy(su, 1, z - 1), '*'); c := UpperCase(su)[z + 1]; su := Copy(su, z + 3, Length(su) - z - 2); if c = 'B' then begin s := DecodeStringBase64(su); s := ConvertEncodingToUTF8(s, e, b); if not b then Exit(EmptyStr); end; if c = 'Q' then begin s := ''; for n := 1 to Length(su) do if su[n] = '_' then s := s + ' ' else s := s + su[n]; s := DecodeQuotedPrintable(s); s := ConvertEncodingToUTF8(s, e, b); if not b then Exit(EmptyStr); end; end; Result := Result + s; x := Pos('=?', v); y := SearchEndInline(v, x); end; Result := Result + v; end; {==============================================================================} function InlineEncode(const Value: string): string; var s, s1, e: string; n: Integer; begin s := Value; e := 'UTF-8'; s := EncodeSafeQuotedPrintable(s); s1 := ''; Result := ''; for n := 1 to Length(s) do if s[n] = ' ' then begin s1 := s1 + '_'; if Length(s1) > 32 then begin if Result <> '' then Result := Result + ' '; Result := Result + '=?' + e + '?Q?' + s1 + '?='; s1 := ''; end; end else s1 := s1 + s[n]; if s1 <> '' then begin if Result <> '' then Result := Result + ' '; Result := Result + '=?' + e + '?Q?' + s1 + '?='; end; end; {==============================================================================} function NeedInline(const Value: AnsiString): boolean; var n: Integer; begin Result := False; for n := 1 to Length(Value) do if Value[n] in (SpecialChar + NonAsciiChar - ['_']) then begin Result := True; Break; end; end; {==============================================================================} function InlineDecodeEx(const Value: string): string; begin if Pos('=?', Value) > 0 then Result := InlineDecode(Value) else Result := CeSysToUtf8(Value); end; {==============================================================================} function InlineEncodeEx(const Value: string): string; begin if NeedInline(Value) then Result := InlineEncode(Value) else Result := Value; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/base64wcx.lpr�����������������������������������������������0000644�0001750�0000144�00000000554�15104114162�021253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library Base64Wcx; uses {$IFDEF UNIX} cthreads, {$ENDIF} FPCAdds, SysUtils, Classes, Base64Func; exports { Mandatory } OpenArchiveW, ReadHeaderExW, ProcessFileW, CloseArchive, SetChangeVolProcW, SetProcessDataProcW, { Optional } PackFilesW, GetPackerCaps, GetBackgroundFlags; {$R *.res} begin end. ����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/base64wcx.lpi�����������������������������������������������0000644�0001750�0000144�00000010544�15104114162�021242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="Base64Wcx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="BASE64 WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2022 Alexander Koblov"/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\base64.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> <RunParams> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"/> </Modes> </RunParams> <RequiredPackages Count="2"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> <Item2> <PackageName Value="LazUtils"/> </Item2> </RequiredPackages> <Units Count="3"> <Unit0> <Filename Value="base64wcx.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="Base64Wcx"/> </Unit0> <Unit1> <Filename Value="base64func.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="Base64Func"/> </Unit1> <Unit2> <Filename Value="base64buf.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="Base64Buf"/> </Unit2> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\base64.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="2"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> </Other> </CompilerOptions> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/base64func.pas����������������������������������������������0000644�0001750�0000144�00000024171�15104114162�021374� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Base64 archiver plugin Copyright (C) 2022-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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, see <http://www.gnu.org/licenses/>. } unit Base64Func; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, WcxPlugin; { Mandatory functions } function OpenArchiveW(var ArchiveData: TOpenArchiveDataW): TArcHandle; dcpcall; export; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW): Integer; dcpcall; export; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; dcpcall; export; function CloseArchive (hArcData: TArcHandle): Integer; dcpcall; export; procedure SetChangeVolProcW(hArcData: TArcHandle; pChangeVolProc: TChangeVolProcW); dcpcall; export; procedure SetProcessDataProcW(hArcData: TArcHandle; pProcessDataProc: TProcessDataProcW); dcpcall; export; { Optional functions } function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; dcpcall; export; function GetBackgroundFlags: Integer; dcpcall; export; function GetPackerCaps: Integer; dcpcall; export; implementation uses SysUtils, Base64Buf, NullStream, LazFileUtils, DCConvertEncoding, DCOSUtils, DCStrUtils, DCClassesUtf8, MimeInLn; const BUFFER_SIZE = 32768; MIME_VERSION = 'MIME-VERSION:'; CONTENT_TYPE = 'CONTENT-TYPE:'; CONTENT_DISPOSITION = 'CONTENT-DISPOSITION:'; CONTENT_TRANSFER_ENCODING = 'CONTENT-TRANSFER-ENCODING:'; MIME_HEADER = 'MIME-Version: 1.0' + LineEnding + 'Content-Type: application/octet-stream; name="%s"' + LineEnding + 'Content-Transfer-Encoding: base64' + LineEnding + 'Content-Disposition: attachment; filename="%s"' + LineEnding + LineEnding; threadvar gProcessDataProcW : TProcessDataProcW; type TRecord = class Count: Integer; FileName: String; Stream: TFileStreamEx; ProcessDataProcW: TProcessDataProcW; end; function ParseHeader(var AHandle: TRecord): Boolean; var P, ALength: Integer; S, AText, ABuffer: String; begin SetLength(ABuffer, 4096); ALength:= AHandle.Stream.Read(ABuffer[1], Length(ABuffer)); if ALength > 0 then begin SetLength(ABuffer, ALength); AText:= Copy(ABuffer, 1, Length(MIME_VERSION)); // No MIME-header, assume raw Base64 data if CompareStr(MIME_VERSION, UpperCase(AText)) <> 0 then AHandle.Stream.Seek(0, soBeginning) else begin P:= 1; while GetNextLine(ABuffer, AText, P) do begin // Base64 data starts after empty line if (Length(AText) = 0) then begin AHandle.Stream.Seek(P - 1, soBeginning); Break; end; S:= UpperCase(AText); if StrBegins(S, CONTENT_TYPE) then begin S:= SeparateRight(S, ':'); S:= Trim(SeparateLeft(S, ';')); if (S = 'MESSAGE/PARTIAL') then Exit(False); AHandle.FileName:= GetParameter(AText, 'name'); AHandle.FileName:= ExtractFileName(InlineDecodeEx(AHandle.FileName)); end else if StrBegins(S, CONTENT_TRANSFER_ENCODING) then begin S:= Trim(SeparateRight(S, ':')); if (S <> 'BASE64') then Exit(False); end else if StrBegins(S, CONTENT_DISPOSITION) then begin S:= SeparateRight(S, ':'); S:= Trim(SeparateLeft(S, ';')); if (S <> 'ATTACHMENT') then Exit(False); AHandle.FileName:= GetParameter(AText, 'filename'); AHandle.FileName:= ExtractFileName(InlineDecodeEx(AHandle.FileName)); end; end; end; end; Result:= True; end; { Mandatory functions } function OpenArchiveW(var ArchiveData: TOpenArchiveDataW): TArcHandle; dcpcall; export; var AHandle: TRecord absolute Result; begin AHandle:= TRecord.Create; try AHandle.Stream:= TFileStreamEx.Create(CeUtf16ToUtf8(ArchiveData.ArcName), fmOpenRead or fmShareDenyNone); if not ParseHeader(AHandle) then begin AHandle.Stream.Free; FreeAndNil(AHandle); ArchiveData.OpenResult:= E_UNKNOWN_FORMAT; end else if Length(AHandle.FileName) = 0 then begin AHandle.FileName:= ExtractFileNameOnly(AHandle.Stream.FileName); end; except AHandle.Stream.Free; FreeAndNil(AHandle); ArchiveData.OpenResult:= E_EOPEN; end; end; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW): Integer; dcpcall; export; var PackSize: Int64; FileName: UnicodeString; AHandle: TRecord absolute hArcData; begin if AHandle.Count > 0 then Result:= E_END_ARCHIVE else begin Result := E_SUCCESS; FileName:= CeUtf8ToUtf16(AHandle.FileName); FillChar(HeaderData, SizeOf(AHandle.Count), 0); HeaderData.UnpSize:= $FFFFFFFE; HeaderData.UnpSizeHigh:= $FFFFFFFF; PackSize:= AHandle.Stream.Size - AHandle.Stream.Position; HeaderData.PackSize:= Int64Rec(PackSize).Lo; HeaderData.PackSizeHigh:= Int64Rec(PackSize).Hi; StrPLCopy(HeaderData.FileName, FileName, SizeOf(HeaderData.FileName) - 1); end; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer; dcpcall; export; var ARead: Integer; ABuffer: TBytes; AFileSize: Int64; fsOutput: TStream; APercent: Integer; ATargetName: String; ASourceName: UnicodeString; AStream: TBase64DecodingStreamEx; AHandle: TRecord absolute hArcData; begin case Operation of PK_TEST, PK_EXTRACT: begin try if Operation = PK_TEST then fsOutput:= TNullStream.Create else begin ATargetName:= CeUtf16ToUtf8(DestPath) + CeUtf16ToUtf8(DestName); fsOutput:= TFileStreamEx.Create(ATargetName, fmCreate); end; try AStream:= TBase64DecodingStreamEx.Create(AHandle.Stream); try AFileSize:= AHandle.Stream.Size; SetLength(ABuffer, BUFFER_SIZE); ASourceName:= CeUtf8ToUtf16(AHandle.FileName); repeat ARead:= AStream.Read(ABuffer[0], BUFFER_SIZE); if ARead > 0 then begin fsOutput.WriteBuffer(ABuffer[0], ARead); APercent:= (AStream.Source.Position * 100) div AFileSize; if (AHandle.ProcessDataProcW(PWideChar(ASourceName), -APercent) = 0) then begin FreeAndNil(fsOutput); if Operation = PK_EXTRACT then mbDeleteFile(ATargetName); Exit(E_EABORTED); end; end; until ARead < BUFFER_SIZE; finally AStream.Free; end; finally fsOutput.Free; end; except Exit(E_ECREATE); end; end; PK_SKIP: begin end; end; Inc(AHandle.Count); Result:= E_SUCCESS; end; function CloseArchive (hArcData: TArcHandle): Integer; dcpcall; export; var AHandle: TRecord absolute hArcData; begin Result := E_SUCCESS; AHandle.Stream.Free; AHandle.Free; end; procedure SetChangeVolProcW(hArcData: TArcHandle; pChangeVolProc: TChangeVolProcW); dcpcall; export; begin end; procedure SetProcessDataProcW(hArcData: TArcHandle; pProcessDataProc: TProcessDataProcW); dcpcall; export; var AHandle: TRecord absolute hArcData; begin if (hArcData <> wcxInvalidHandle) then AHandle.ProcessDataProcW := pProcessDataProc else begin gProcessDataProcW := pProcessDataProc; end; end; { Optional functions } function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; dcpcall; export; var ARead: Integer; ABuffer: TBytes; AHeader: String; AFileName: String; ATargetName: String; AStream: TBase64EncodingStreamEx; fsInput, fsOutput: TFileStreamEx; begin if (Flags and PK_PACK_MOVE_FILES) <> 0 then begin Exit(E_NOT_SUPPORTED); end; try AFileName:= CeUtf16ToUtf8(AddList); fsInput:= TFileStreamEx.Create(CeUtf16ToUtf8(SrcPath) + AFileName, fmOpenRead or fmShareDenyNone); try ATargetName:= CeUtf16ToUtf8(PackedFile); try fsOutput:= TFileStreamEx.Create(ATargetName, fmCreate); try AFileName:= InlineEncodeEx(AFileName); AHeader:= Format(MIME_HEADER, [AFileName, AFileName]); try fsOutput.WriteBuffer(AHeader[1], Length(AHeader)); AStream:= TBase64EncodingStreamEx.Create(fsOutput); try SetLength(ABuffer, BUFFER_SIZE); repeat ARead:= fsInput.Read(ABuffer[0], BUFFER_SIZE); if ARead > 0 then begin AStream.WriteBuffer(ABuffer[0], ARead); if (gProcessDataProcW(PackedFile, ARead) = 0) then begin FreeAndNil(AStream); FreeAndNil(fsOutput); mbDeleteFile(ATargetName); Exit(E_EABORTED); end; end; until ARead < BUFFER_SIZE; finally AStream.Free; end; except Exit(E_EWRITE); end; finally fsOutput.Free; end; except Exit(E_ECREATE); end; finally fsInput.Free; end; except Exit(E_EOPEN); end; Result:= E_SUCCESS; end; function GetBackgroundFlags: Integer; dcpcall; export; begin Result:= BACKGROUND_UNPACK or BACKGROUND_PACK; end; function GetPackerCaps: Integer; dcpcall; export; begin Result := PK_CAPS_NEW; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/wcx/base64/src/base64buf.pas�����������������������������������������������0000644�0001750�0000144�00000004000�15104114162�021202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit Base64Buf; {$mode delphi} interface uses Classes, SysUtils, Base64, BufStream; type { TWriteBufStreamEx } TWriteBufStreamEx = class(TWriteBufStream) private FPosition: Int64; public function Write(const Buffer; Count: Longint): Longint; override; end; { TBase64EncodingStreamEx } TBase64EncodingStreamEx = class(TBase64EncodingStream) private FStream: TStream; public constructor Create(ASource : TStream); reintroduce; destructor Destroy; override; end; { TBase64DecodingStreamEx } TBase64DecodingStreamEx = class(TBase64DecodingStream) private FStream: TStream; public constructor Create(ASource : TStream); reintroduce; overload; constructor Create(ASource: TStream; AMode: TBase64DecodingMode); reintroduce; overload; destructor Destroy; override; end; implementation const BUFFER_SIZE = 32768; { TWriteBufStreamEx } function TWriteBufStreamEx.Write(const Buffer; Count: Longint): Longint; const LINE_LENGTH = 76; EOL = String(LineEnding); begin if (FPosition + Count) > LINE_LENGTH then begin FPosition:= 0; inherited Write(EOL[1], Length(EOL)); end; Inc(FPosition, Count); Result:= inherited Write(Buffer, Count); end; { TBase64DecodingStreamEx } constructor TBase64DecodingStreamEx.Create(ASource: TStream); begin FStream:= TReadBufStream.Create(ASource, BUFFER_SIZE); inherited Create(FStream); end; constructor TBase64DecodingStreamEx.Create(ASource: TStream; AMode: TBase64DecodingMode); begin Create(ASource); Mode:= AMode; end; destructor TBase64DecodingStreamEx.Destroy; begin inherited Destroy; FStream.Free; end; { TBase64EncodingStreamEx } constructor TBase64EncodingStreamEx.Create(ASource: TStream); begin FStream:= TWriteBufStreamEx.Create(ASource, BUFFER_SIZE); inherited Create(FStream); end; destructor TBase64EncodingStreamEx.Destroy; begin inherited Destroy; FStream.Free; end; end. doublecmd-1.1.30/plugins/dsx/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015044� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/everything/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017230� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/everything/src/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020017� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/everything/src/everything.pas������������������������������������������0000644�0001750�0000144�00000021645�15104114162�022720� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Everything search engine interface via IPC Copyright (C) 2017 Alexander Koblov (alexx2000@mail.ru) Based on Everything command line interface source Copyright (C) 2016 David Carpenter Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit everything; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows; const COPYDATA_IPCTEST_QUERYCOMPLETEW = 0; MSGFLT_RESET = 0; MSGFLT_ALLOW = 1; MSGFLT_DISALLOW = 2; EVERYTHING_IPC_COPYDATAQUERYW = 2; EVERYTHING_IPC_SEARCH_WNDCLASS = 'EVERYTHING'; EVERYTHING_IPC_WNDCLASS = 'EVERYTHING_TASKBAR_NOTIFICATION'; EVERYTHING_IPC_ALLRESULTS = $FFFFFFFF; // all results EVERYTHING_IPC_FOLDER = $00000001; // The item is a folder. (its a file if not set) EVERYTHING_IPC_DRIVE = $00000002; // The folder is a drive. Path will be an empty string. // search flags for querys EVERYTHING_IPC_MATCHCASE = $00000001; // match case EVERYTHING_IPC_REGEX = $00000008; // enable regex type PChangeFilterStruct = ^TChangeFilterStruct; TChangeFilterStruct = record cbSize: DWORD; ExtStatus: DWORD; end; {$push}{$packrecords 1} TEVERYTHING_IPC_QUERYW = record // the window that will receive the new results. reply_hwnd: HWND; // the value to set the dwData member in the COPYDATASTRUCT struct // sent by Everything when the query is complete. reply_copydata_message: ULONG_PTR; // search flags (see EVERYTHING_MATCHCASE | EVERYTHING_MATCHWHOLEWORD | EVERYTHING_MATCHPATH) search_flags: DWORD; // only return results after 'offset' results (0 to return the first result) // useful for scrollable lists offset: DWORD; // the number of results to return // zero to return no results // EVERYTHING_IPC_ALLRESULTS to return ALL results max_results: DWORD; // null terminated string. arbitrary sized search_string buffer. search_string: WCHAR; end; PEVERYTHING_IPC_ITEMW = ^TEVERYTHING_IPC_ITEMW; TEVERYTHING_IPC_ITEMW = record // item flags flags: DWORD; // The offset of the filename from the beginning of the list structure. // (wchar_t *)((char *)everything_list + everythinglist->name_offset) filename_offset: DWORD; // The offset of the filename from the beginning of the list structure. // (wchar_t *)((char *)everything_list + everythinglist->path_offset) path_offset: DWORD; end; PEVERYTHING_IPC_LISTW = ^TEVERYTHING_IPC_LISTW; TEVERYTHING_IPC_LISTW = record // the total number of folders found. totfolders: DWORD; // the total number of files found. totfiles: DWORD; // totfolders + totfiles totitems: DWORD; // the number of folders available. numfolders: DWORD; // the number of files available. numfiles: DWORD; // the number of items available. numitems: DWORD; // index offset of the first result in the item list. offset: DWORD; // arbitrary sized item list. // use numitems to determine the actual number of items available. items: TEVERYTHING_IPC_ITEMW; end; {$pop} type TFoundCallback = procedure(FileName: PWideChar); var ChangeWindowMessageFilterEx: function(hWnd: HWND; message: UINT; action: DWORD; filter: PChangeFilterStruct): BOOL; stdcall; procedure Start(FileMask: String; Flags: Integer; pr: TFoundCallback); implementation function SendQuery(hwnd: HWND; num: DWORD; search_string: PWideChar; search_flags: integer): Boolean; var query: ^TEVERYTHING_IPC_QUERYW; len: Int32; size: Int32; everything_hwnd: HWND; cds: COPYDATASTRUCT; begin everything_hwnd:= FindWindow(EVERYTHING_IPC_WNDCLASS, nil); if (everything_hwnd <> 0) then begin len := StrLen(search_string); size := SizeOf(TEVERYTHING_IPC_QUERYW) - SizeOf(WideChar) + len * SizeOf(WideChar) + SizeOf(WideChar); query := GetMem(size); if Assigned(query) then begin query^.offset := 0; query^.max_results := num; query^.reply_copydata_message := COPYDATA_IPCTEST_QUERYCOMPLETEW; query^.search_flags := search_flags; query^.reply_hwnd := hwnd; StrLCopy(@query^.search_string, search_string, len); cds.cbData := size; cds.dwData := EVERYTHING_IPC_COPYDATAQUERYW; cds.lpData := query; if (SendMessage(everything_hwnd, WM_COPYDATA, WPARAM(hwnd), LPARAM(@cds)) <> 0) then begin //HeapFree(GetProcessHeap(),0,query); //return 1; REsult:= True; end else begin //write(L"Everything IPC service not running.\n"); end; FreeMem(query); end; end; Result:= False; end; function EVERYTHING_IPC_ITEMPATHW(list: PEVERYTHING_IPC_LISTW; item: PEVERYTHING_IPC_ITEMW): PWideChar; begin Result:= PWideChar(PByte(list) + item^.path_offset); end; function EVERYTHING_IPC_ITEMFILENAMEW(list: PEVERYTHING_IPC_LISTW; item: PEVERYTHING_IPC_ITEMW): PWideChar; begin Result:= PWideChar(PByte(list) + item^.filename_offset); end; procedure listresultsW(hwnd2: HWND; list: PEVERYTHING_IPC_LISTW); var I: Integer; Item: PEVERYTHING_IPC_ITEMW; CallB: TFoundCallback; Result: PWideChar; Res: UnicodeString; begin CallB:= TFoundCallback(GetWindowLongPtr(hwnd2, GWL_USERDATA)); for i:=0 to list^.numitems - 1 do begin Item:= PEVERYTHING_IPC_ITEMW(@list^.items) + i; if (Item^.flags and EVERYTHING_IPC_DRIVE) <> 0 then begin //WriteLn(WideString(EVERYTHING_IPC_ITEMFILENAMEW(list, Item))); Result:= EVERYTHING_IPC_ITEMFILENAMEW(list, Item); end else begin //WriteLn(WideString(EVERYTHING_IPC_ITEMPATHW(list, Item))); //WriteLn(WideString(EVERYTHING_IPC_ITEMFILENAMEW(list, Item))); Res:= UnicodeString(EVERYTHING_IPC_ITEMPATHW(list, Item)) + PathDelim + UnicodeString(EVERYTHING_IPC_ITEMFILENAMEW(list, Item)); Result:= PWideChar(Res);//EVERYTHING_IPC_ITEMFILENAMEW(list, Item); end; CallB(REsult); end; CallB(nil); PostQuitMessage(0); end; function window_proc(hwnd: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var cds: PCOPYDATASTRUCT; begin case msg of WM_COPYDATA: begin cds := PCOPYDATASTRUCT(lParam); if cds^.dwData = COPYDATA_IPCTEST_QUERYCOMPLETEW then begin listresultsW(hwnd, PEVERYTHING_IPC_LISTW(cds^.lpData)); Exit(1); end; end; end; Result:= DefWindowProc(hwnd, msg, wParam, lParam); end; procedure Start(FileMask: String; Flags: Integer; pr: TFoundCallback); var wcex: WNDCLASSEX; hwnd2: HWND; HH: HMODULE; lpMsg: TMsg; begin ZeroMemory(@wcex, SizeOf(wcex)); wcex.cbSize := sizeof(wcex); wcex.hInstance := System.HINSTANCE;; wcex.lpfnWndProc := @window_proc; wcex.lpszClassName := 'IPCTEST'; if (RegisterClassEx(@wcex) = 0) then begin WriteLn('failed to register IPCTEST window class'); end; hwnd2 := CreateWindow( 'IPCTEST', '', 0, 0,0,0,0, 0,0,HINSTANCE,nil); HH:= LoadLibrary('user32.dll'); Pointer(ChangeWindowMessageFilterEx) := GetProcAddress(HH, 'ChangeWindowMessageFilterEx'); ChangeWindowMessageFilterEx(hwnd2, WM_COPYDATA, MSGFLT_ALLOW, nil); SetWindowLongPtr(hwnd2, GWL_USERDATA, LONG_PTR(pr)); sendquery(hwnd2,EVERYTHING_IPC_ALLRESULTS,PWideChar(WideString(FileMask)), Flags); while (True) do begin if (PeekMessage(lpmsg, 0,0,0,0)) then begin if not GetMessage(lpmsg,0,0,0) then Exit; // let windows handle it. TranslateMessage(lpmsg); DispatchMessage(lpmsg); end else begin WaitMessage(); end; end; end; end. �������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/everything/src/EverythingDsx.lpr���������������������������������������0000644�0001750�0000144�00000001723�15104114162�023344� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library EverythingDsx; {$mode objfpc}{$H+} uses Classes, Everything, DsxPlugin, DCConvertEncoding; threadvar AddFileProc: TSAddFileProc; procedure FoundCallback(FileName: PWideChar); var S: String; begin S:= CeUtf16ToUtf8(UnicodeString(FileName)); AddFileProc(0, PAnsiChar(S)); end; function Init(dps: PDsxDefaultParamStruct; pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): Integer; stdcall; begin AddFileProc:= pAddFileProc; end; procedure StartSearch(FPluginNr: Integer; pSearchRecRec: PDsxSearchRecord); stdcall; var Flags: Integer = 0; begin if pSearchRecRec^.CaseSensitive then Flags:= Flags or EVERYTHING_IPC_MATCHCASE; Start(pSearchRecRec^.FileMask, Flags, @FoundCallback); end; procedure StopSearch(FPluginNr: Integer); stdcall; begin end; procedure Finalize(FPluginNr: Integer); stdcall; begin end; exports Init, StartSearch, StopSearch, Finalize; begin end. ���������������������������������������������doublecmd-1.1.30/plugins/dsx/everything/src/EverythingDsx.lpi���������������������������������������0000644�0001750�0000144�00000007773�15104114162�023346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="12"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <MainUnitHasScaledStatement Value="False"/> <CompatibilityMode Value="True"/> </Flags> <SessionStorage Value="InProjectDir"/> <Title Value="EverythingDsx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\everything.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <RelocatableUnit Value="True"/> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> <VerifyObjMethodCallValidity Value="True"/> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <TrashVariables Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> </PublishOptions> <RunParams> <local> <HostApplicationFilename Value="R:\Temp\doublecmd\doublecmd.exe"/> </local> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <HostApplicationFilename Value="R:\Temp\doublecmd\doublecmd.exe"/> </local> </Mode0> </Modes> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> </RequiredPackages> <Units Count="2"> <Unit0> <Filename Value="EverythingDsx.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="everything.pas"/> <IsPartOfProject Value="True"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\everything.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <CodeGeneration> <SmartLinkUnit Value="True"/> <RelocatableUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �����doublecmd-1.1.30/plugins/dsx/DSXLocate/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016632� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/DSXLocate/src/���������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017421� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/DSXLocate/src/un_process.pas�������������������������������������������0000644�0001750�0000144�00000004444�15104114162�022314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$mode delphi} {$longstrings on} unit un_process; interface uses process, Math, SysUtils; type TOnReadLn = procedure(str: String) of object; { TExProcess } TExProcess = class protected p: TProcess; s: String; FStop: Boolean; function _GetExitStatus(): Integer; public OnReadLn: TOnReadLn; constructor Create(commandline: String = ''); procedure Execute; procedure Stop; procedure SetCmdLine(commandline: String); destructor Destroy; override; property ExitStatus: Integer read _GetExitStatus; end; implementation const buf_len = 3000; { TExProcess } function TExProcess._GetExitStatus(): Integer; begin Result := p.ExitStatus; end; constructor TExProcess.Create(commandline: String = ''); begin s := ''; p := TProcess.Create(nil); p.CommandLine := commandline; p.Options := [poUsePipes, poNoConsole, poWaitOnExit]; end; procedure TExProcess.Execute; var buf: String; i, j: Integer; begin try p.Execute; repeat if FStop then exit; SetLength(buf, buf_len); SetLength(buf, p.output.Read(buf[1], length(buf))); //waits for the process output // cut the incoming stream to lines: s := s + buf; //add to the accumulator repeat //detect the line breaks and cut. i := Pos(#13, s); j := Pos(#10, s); if i = 0 then i := j; if j = 0 then j := i; if j = 0 then Break; //there are no complete lines yet. if Assigned(OnReadLn) then OnReadLn(Copy(s, 1, min(i, j) - 1)); //return the line without the CR/LF characters s := Copy(s, max(i, j) + 1, length(s) - max(i, j)); //remove the line from accumulator until False; until buf = ''; if s <> '' then if Assigned(OnReadLn) then OnReadLn(s); buf := ''; except {$IFDEF UNIX} on e: Exception do Writeln('DSXLocate error: ', e.Message); {$ENDIF} end; if Assigned(OnReadLn) then OnReadLn(buf); //Empty line to notify DC about search process finish end; procedure TExProcess.Stop; begin FStop := True; end; procedure TExProcess.SetCmdLine(commandline: String); begin p.CommandLine := commandline; end; destructor TExProcess.Destroy; begin FreeAndNil(p); inherited Destroy; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/DSXLocate/src/DSXLocate.lpr��������������������������������������������0000644�0001750�0000144�00000012010�15104114162�021720� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { DSXLocate ------------------------------------------------------------------------- This is DSX (Search) plugin for Double Commander. Plugin use locate and it's database for searching. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) The original class of TExProcess used in plugin was written by Anton Rjeshevsky. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } library DSXLocate; {$mode objfpc}{$H+} {$include calling.inc} uses Classes, SysUtils, DsxPlugin, un_process; var List: TStringList; LocatePath: String; type { TPlugInfo } TPlugInfo = class private FProcess: TExProcess; FAddProc: TSAddFileProc; FUpdateProc: TSUpdateStatusProc; FSearchRec: TDsxSearchRecord; FilesScanned: Integer; public PluginNr: Integer; //--------------------- constructor Create(Nr: Integer); procedure SetProcs(AddProc: TSAddFileProc; UpdateProc: TSUpdateStatusProc); procedure SetDefs(pSearchRec: PDsxSearchRecord); destructor Destroy; override; //--------------------- procedure Start; procedure Stop; procedure OnReadLn(str: String); end; constructor TPlugInfo.Create(Nr: Integer); begin PluginNr := Nr; FProcess := nil; end; procedure TPlugInfo.SetProcs(AddProc: TSAddFileProc; UpdateProc: TSUpdateStatusProc); begin FAddProc := AddProc; FUpdateProc := UpdateProc; end; procedure TPlugInfo.SetDefs(pSearchRec: PDsxSearchRecord); begin FSearchRec := pSearchRec^; end; destructor TPlugInfo.Destroy; begin if Assigned(FProcess) then FreeAndNil(FProcess); inherited Destroy; end; procedure TPlugInfo.Start; var sSearch: String; begin FilesScanned := 0; if Assigned(FProcess) then FreeAndNil(FProcess); FProcess := TExProcess.Create; FProcess.OnReadLn := @OnReadLn; with FSearchRec do begin // TProcess doesn't support passing parameters other than quoted in "". // Adapt this code when this changes. sSearch := String(StartPath); if sSearch <> '' then begin // Search in given start path and in subdirectories. sSearch := '"' + IncludeTrailingPathDelimiter(sSearch) + String(FileMask) + '" ' + '"' + IncludeTrailingPathDelimiter(sSearch) + '*' + PathDelim + String(FileMask) + '"'; end else sSearch := '"' + String(FileMask) + '"'; end; if LocatePath <> '' then FProcess.SetCmdLine(LocatePath + ' ' + sSearch); FProcess.Execute; end; procedure TPlugInfo.Stop; begin if Assigned(FProcess) then begin FProcess.Stop; FreeAndNil(FProcess); end; end; procedure TPlugInfo.OnReadLn(str: String); begin if str <> '' then Inc(FilesScanned); FAddProc(PluginNr, PChar(str)); FUpdateProc(PluginNr, PChar(str), FilesScanned); end; {Main --------------------------------------------------------------------------------} function Init(dps: PDsxDefaultParamStruct; pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): Integer; dcpcall; var i: Integer; begin if not assigned(List) then List := TStringList.Create; I := List.Count; List.AddObject(IntToStr(I), TPlugInfo.Create(I)); TPlugInfo(List.Objects[I]).SetProcs(pAddFileProc, pUpdateStatus); Result := I; end; procedure StartSearch(FPluginNr: Integer; pSearchRecRec: PDsxSearchRecord); dcpcall; begin TPlugInfo(List.Objects[FPluginNr]).SetDefs(pSearchRecRec); TPlugInfo(List.Objects[FPluginNr]).Start; end; procedure StopSearch(FPluginNr: Integer); dcpcall; begin TPlugInfo(List.Objects[FPluginNr]).Stop; end; procedure Finalize(FPluginNr: Integer); dcpcall; begin if not Assigned(List) then exit; if (FPluginNr > List.Count) or (FPluginNr < 0) or (List.Count = 0) then exit; //Destroy PlugInfo Item № TPlugInfo(List.Objects[FPluginNr]).Free; List.Delete(FPluginNr); if List.Count = 0 then FreeAndNil(List); end; exports Init, StartSearch, StopSearch, Finalize; type Tx = class procedure OnReadLnWhich(str: String); end; procedure Tx.OnReadLnWhich(str: String); begin if str <> '' then begin LocatePath := str; //WriteLn('PLUGIN: locate found in '+str); end; end; var Pr: TExProcess; x: TX; {$R *.res} begin pr := TExProcess.Create('which locate'); x := Tx.Create; pr.OnReadLn := @x.OnReadLnWhich; pr.Execute; pr.Free; x.Free; {$IFDEF UNIX} if LocatePath = '' then Writeln('DSXLocate: Locate utility not found.'); {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/dsx/DSXLocate/src/DSXLocate.lpi��������������������������������������������0000644�0001750�0000144�00000007722�15104114162�021725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="DSXLocate"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="DSXLocate plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../dsxlocate.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="2"> <Unit0> <Filename Value="DSXLocate.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="un_process.pas"/> <IsPartOfProject Value="True"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../dsxlocate.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> </CompilerOptions> </CONFIG> ����������������������������������������������doublecmd-1.1.30/plugins/build.sh�������������������������������������������������������������������0000755�0001750�0000144�00000002063�15104114162�015705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Build all plugins # Do not execute this script directly. # This script is called from ../build.sh. # CD to plugins directory basedir=$(pwd) cd plugins # WCX plugins $lazbuild wcx/base64/src/base64wcx.lpi $DC_ARCH $lazbuild wcx/cpio/src/cpio.lpi $DC_ARCH $lazbuild wcx/deb/src/deb.lpi $DC_ARCH $lazbuild wcx/rpm/src/rpm.lpi $DC_ARCH $lazbuild wcx/unrar/src/unrar.lpi $DC_ARCH $lazbuild wcx/zip/src/Zip.lpi $DC_ARCH # WDX plugins $lazbuild wdx/rpm_wdx/src/rpm_wdx.lpi $DC_ARCH $lazbuild wdx/deb_wdx/src/deb_wdx.lpi $DC_ARCH $lazbuild wdx/audioinfo/src/AudioInfo.lpi $DC_ARCH # WFX plugins $lazbuild wfx/ftp/src/ftp.lpi $DC_ARCH # Don't build under OS X if [ -z $(uname | grep Darwin) ]; then $lazbuild wfx/samba/src/samba.lpi $DC_ARCH # WLX plugins $lazbuild wlx/WlxMplayer/src/wlxMplayer.lpi $DC_ARCH else # WLX plugins $lazbuild wlx/MacPreview/src/MacPreview.lpi $DC_ARCH fi # DSX plugins $lazbuild dsx/DSXLocate/src/DSXLocate.lpi $DC_ARCH # Return from plugins directory cd $basedir �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/plugins/build.bat������������������������������������������������������������������0000644�0001750�0000144�00000001715�15104114162�016041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem Build all plugins rem Do not execute this script directly. rem This script is called from ..\build.bat. rem CD to plugins directory pushd plugins rem WCX plugins lazbuild wcx\base64\src\base64wcx.lpi %DC_ARCH% lazbuild wcx\deb\src\deb.lpi %DC_ARCH% lazbuild wcx\rpm\src\rpm.lpi %DC_ARCH% lazbuild wcx\sevenzip\src\sevenzipwcx.lpi %DC_ARCH% lazbuild wcx\unrar\src\unrar.lpi %DC_ARCH% lazbuild wcx\zip\src\zip.lpi %DC_ARCH% rem WDX plugins lazbuild wdx\rpm_wdx\src\rpm_wdx.lpi %DC_ARCH% lazbuild wdx\deb_wdx\src\deb_wdx.lpi %DC_ARCH% lazbuild wdx\audioinfo\src\AudioInfo.lpi %DC_ARCH% rem WFX plugins lazbuild wfx\ftp\src\ftp.lpi %DC_ARCH% rem WLX plugins lazbuild wlx\wmp\src\wmp.lpi %DC_ARCH% lazbuild wlx\preview\src\preview.lpi %DC_ARCH% lazbuild wlx\richview\src\richview.lpi %DC_ARCH% rem Return from plugins directory popd ���������������������������������������������������doublecmd-1.1.30/pixmaps/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014246� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016043� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/visualelements/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021103� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/visualelements/doublecmd-70x70.png��������������������������������0000644�0001750�0000144�00000011341�15104114162�024332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���F���F���q.��� pHYs�������tEXtSoftware�www.inkscape.org<��nIDATx{U?t{'!@呈,b<tr],[Ubk]dղUQQV_宂E)<EYdI2۷}dfMUts~݆W:R%޷c'LZ0�l?k4�krygeϴ1YY>ieyMb2Obƨ탣';Q9`t?b9юQV� "Z$%}',5Xfa'r.d<H% J[>S >Y4fV-Q:;W,Xu]J*I!Iۤf$m/`ZD̀L#"gY#$}I x$]LdxoO{ddW˕J<tɉ]nKvvw+8`N3 G$\nbtӎd)ӥ%$ڴs$ER^HA6ӳSE`<gϞz cytv+uEͮc5,+/֧׀Ek)mkG{Ԯ?گ1`1}u%Y lR5jlcCd,V0"wޥ�46[KTwuWbb@9P5AT4 NzwuRue`$t`c#+XU | 7m6j+bPWب*�)?,NyEN;z0=+_Bd,%4ɼ3ΤgX 7'^R)3T\x׹r]\ok�BDFݵ?:8J^0"DR Al5m`WQ융m###А_* "MF)E3YL1rwӦywnecCXV]sf G3K|j72_ߡ#QtrJ(=ZØ㯺/ۀsgiLķ^^}49Jl0jX!00w~]yuK@Qcŗq8)G1-GZ*0F,lt_J%NSi:ruڻ$StQpUs(qʚ}^ɱK6J)eSOK:Oj8DsVO[>=`w"B1djZt,# W#*2Ehqʇoe'�gc̤"C2DD*aٗZkT.GMq\[Q/"Bh,Q̊{ǝu6uy{3qLyhaLB @'o=y=g;$q0 Bd 8}1gVuN5⼴S De$a)Pu4� `Mۼ"r_90|:Ӧ(@T &&vFxH8>z/ ֽN5+EJ)N}GSZr8NSʭ~ D8TQNTiqwVrZ(%&X"CNiĀdCos49XyWh*~}enSŞiG^Ȳkn/LXg&5˱a5kk3)}2"hO~_]ZyZCU^F-B: [ V G)\MGΣ75> i*l"0滝sj,qg/pUe25Fa:=7ӽVjƾSV]Mi|fxI^Dj Jw FKbjPU]ȶ|Nhw|$` Ѵ{._3H?;*ts֦ ӓ!2Bͱg*-up_3Qt\c Ѵy.9Er&-ө^u%1�xܧ?AVF�W+K!,Od:j*@gi*$,8#eֲU { T@)EN'3R>tp֑R\qg3"P\z\Ci)GΠhMQ|bwbWLl)[b֜rҲ&VR6]'9bRReWϠ-úĆ1<u"--�HuAJ 5UZ߹镯Mu;t̮ۑ[R'hJwW&�nWw:Aj]nwϤtƱtb=-:2 :8 ";SOD-L3VOjS0x0h[ٓT27Mi6m`׀NoYKTpru&yhю<ۘtr&/ aj5@ Q`rl "zxD##TBO CI]htG h)h$b-&=$3>Jo'JdR$'ikKfhĕ2R.;hnֆED2;4fSFY\ai"Dq1JZmDevHb{RXaډt[~ ӐOɧ!9,Gb Qַa$"ʇS|e22j *{y)y YҜAc;2~`5u4 WMJP@饭=\@(`ZxqHLTwH46Lh,e Qa0& 6Q`o0jöxJLjmǎ"Rl{&O1 ^$N%~:OXEo&[$5M#a@4%l P2qєy*Jӓ~TVTEf10b%vl:9GFa޻> Ec#T?7}t)Mk2-% -~3r.DV(a82/{չ*<HDx 7ZANA. 8&s,�ML$޷ #.zIFc!TeqyHAD4 G) Zq%*cۯe71J"u�T&+hF^VH" V,Baݦ]MW;%_-DZfF__wzNoXwt0&BE JiUO8_c ~*{w1U#F(xl,!^ɒj4K/P~Gi]7YUR}酦[x٬~:ryFDT"+N/ Cz:QP-2YF"Xy*TUWQnI{0FQV6JR aaѥoٺ\goyza>Bk BbHJul&zGn ^Xj*_]xt4$mSp~y_ "JY&"m"ƒRNc|JAy`x:byށ>~~<蘆 ݴClޯ}j]N@^&ݦÛŅKX돩=^[;׮&8<СC_|>:]M ;%+E.vV7awߐ.OSpg\V| _dۗ>4p,r`vf.^r,s{y#7R=<1r=MOAɨ^r:)Z?h kik3ǡ}M̳(`<á\fi `yi_bu ?1z 9T{P&6ae3? z_+S3c(JRyr3^ %lJebW%.KeӃ<p`odYF)6(^xҊ6 VJH,~dnT%`wdYJf ZYkwwwW~(,_Aq2bR3b{Q%+э}{Jf& Z,EpHbcRYvz˶QLo!Z<1.ovn5"&qŒ&囅z"<�,7Q[{E\T�^j[ }HH#VL#]]v AQd˵uUPb(|GsTIOEz}YLӤ\2IO. XЮUgj+[m(T1~�v}YI^EJ0RΟI +%3G7Znء9GŞ5ԏ^dL(Lef**E0SG/!b^ ~0 ~fD>"aA9TONkfEF[]^(nVW8#A[ &8 8$ wm`-&-e$BĀյgҪ%CUGEb|47! 8m+Q>#F`ɯ+4Gٰh2����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/visualelements/doublecmd-150x150.png������������������������������0000644�0001750�0000144�00000030027�15104114162�024472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������<q��zTXtRaw profile type exif��xY$ Dy ;pt_Y[lZ}LtFT, p;&ؿy?UjMF#?UΈ|XG\x<9Tؖׯ}<}O6@cOOh}?~3윏*u"eŮC_²}+ 'gOK񜒳T"ߥ'P_ e>;9:<K~zτ|eFקZ臬|US!'?Oq5Y;E},:Q#0!(7P8qžL>n餙ngf5[NΛQ$k.t- ג?璞jy'qiN ?woK!8>cżr`3 ϜsI結QQ^C1Ay]}`dR!d-zD  L= HvJ$s-"4qȌLҋ-df+z6Kޥ;)N)04"2De2hc蘚@MUgNF=`ΕWYu5Ϯe{|ʁ?N?r3-Pjͺ Sn+w\3kw)P>Q!I󜑰j")�sG5{<gQ2l<cdZ܅ʨg/-H!o\f~WY;.Cث =P}1.vlf&EwnKGzTZ6}޼+e960kj $0Ws1`b!u6pNw 1fK, Ȭ�T{Hͽ]5D)1J4J:}Qm;sϬjT C\`@ƳE7(>3|S{n-R0sm<uWjJX#.buX۰OSL=;4 d3ͬS;RR7'^OⴻO֩fc⸃v[ܽNXjL7Kq{~;ڳ>ާT@ 4rNӌ1^Lf=I q&{5 ijm2'܎@;fBA 98̌]}MlRkZ۾g2\V㿖tg@mHQ,յgyq[PT/|v?1j R.jEL3EURFq`9}ıS ڔ51Z, ._<]Ƣaj_I͚pY"b쯤9h%ǧZ$Qт{vӬܖeLe9 BݘWڣ`Hf6dҌT_`G;\~ڦ :/4H)�p KV7߫5]{5Env,[:c\v0CP1KZ} mkw txD £k1 vm6M|Eƥ><i<۪~T&HUg0LjacojE@m嶡 2xWލ(�&98j!O@B_e-+`81,Ti.({A*NCq֩K0G^*j= vxkA:ʊ$V`.gmՑ4ʥ F roٶс5&[ #W2_? ? T)@wtyz ӂrp~G2Ρ!wQAf6wp`=ê ר.@G -P&"@tw{**vԢW IyNVS3@tmxawnk2 uw!AIGuev!Hl6," FpXF/fju:LQA#+hjڳ'B٘E} s2ұF26L$jֈ [5!'C' 8wqh,pҡ4Zp au!uW<Μ5cx<6PU!dQN SZ/p$&χ_F]R ]Nry X*:P]28?R"ي8$/$xѥX$ut *4~)"b),Th<TX>L`#zL 2yY6ƾb8بD2!dt?YƤ9tN\!@ZFtUI!&65J6\wcL2-&Z#bNhhų#pf[6o+"}ptF;jK!yz3 TxcIQRgpϚ" P)3 GFܲ²pla< dB19[ބnv@=p1͂KESlValv_=<>?kk+:c0J>JQjpv AmeU! tm_J+&}'%+4i:!K0T6|uv- V1fW:kWK(tRBouKY�FW]P\xhٲHtg^DzJTvhoL(*>45Q)aK'3y|Cy8dW;IY>w !�s  %b`@cs`�T䀖lql}Q+7<I*P9&e5x4ȡHPEޑ_ `ßD>}njc>Uw;:y+);!ya݀cb Oq"kD h7>@]"9۠/bO w�D m3&@DӠ0QG�DĂ0#OOE@8ThXtDuQ@\ސvf>Ҁa(<Yu>܍XH)aQ#T]')wYfB!W>5 ]T:y{?rq%t#bJEgRACtk^8ӊ{ nUGE5 t*&{5c3BǶ 6~xS:zҎ[ n5NSVH"w mᛁM8yw8LW"'2MzIףH,3ULw &Kh7(p�fI4l8^]/a^G9 q*Ƈ7j̈́O4`9},\zo"iCR3#}^|0!2Z^0`bEl$�cD{:RqJMFf`"^oqu }ļz@AIG熳83Cidw) M + 9M2-x6u 2P7L'!?^b&_܍ncX~^NS]ٴAg#҃:[{_E Hv"$\oDة<~1xT2p&  AN,pb_LUUuw֪YDx.KnuNu+P-fߒn╟ds„;J9vO0`2bBqb|yAΖ/|ɖ&!Qz8?|0$R MH a xy, [UY&ɤ-⁃cMYHmCtΠuA{w@/n+, ��iCCPICC profile��x}=H@_SR*vqP,8J`Zu0 4$).kŪ "%/)=BTkP5Hcb6*^! ~D1 1SO3_.ʳ9z�H<t" ٴtaVsq.Hu7E62y0X`YP#QuYYX:ı!2*24RLh?vIr*cU?,LMIb@`hmض'j$"G@6pq=rz%Cr$?MP�r-\s{kPW7!0VuwtV?wr&�� iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:409ed184-c7fd-488b-acf9-9f31887f149e" xmpMM:InstanceID="xmp.iid:20121daa-8e34-4a26-8743-636abea02268" xmpMM:OriginalDocumentID="xmp.did:eefaf66b-7c48-45e3-9a4c-6da5442c3d1b" dc:Format="image/png" GIMP:API="2.0" GIMP:Platform="Windows" GIMP:TimeStamp="1676051601125785" GIMP:Version="2.10.30" tiff:Orientation="1" xmp:CreatorTool="GIMP 2.10"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:094b5064-c225-4afb-9c38-49181fbb8fa8" stEvt:softwareAgent="Gimp 2.10 (Windows)" stEvt:when="2023-02-10T20:53:21"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>@���bKGD������ pHYs����c���tIME 5�݄��bIDATxyuƿsowuь4  F rbL)\)\$.lS,.*bCRۄWNl%8X d2FH6e7o{O~OohF ZUݷ{                  |h&s  0��[FaM` X˵ {0x'k�#2QZ&>n;`oѵf04Em5"+9#39׵fҙb03PY, D"T6Htmt lѺv>/:6>։}_ C3[GF 5[ 鏞H+_mtvih(~\0jVmlju߯>XL6/}}­Y1 ͌elc6n%F|?Qu?阳{\y.QC_FdrD8Gս۲?hiHay{E84Ƿ�]:W~-seF%nimL3)Ehe8ۉ %Y[-9Mڈ.Ӏ>[*)M03@CNDPL 44(SBdU1Yf &Qa c4$*~,:NZv탉/yfq(6׆H(\RpT$Z&ÌX֢b,*q<4-YsCzN-zDS.wիW :8Wg/u;;J&U 30<7xC !j$K DtBEe[rhP B8{Eyy)JH\j�7HVxv\FV^�'d Gt\jb"sG}B-:^"D>m\ز M )u|0Q6y?@ poGL[~.ڿ롯E+TT(쎯bx 5#Xj_H0|+BT:#1* "!چew=@31⪖cT|.o|ֶ#cLumDX %Rk>~أW5ˇ! q=K&'XCSD&:Tq3k`X8*'uK_B09BUuԋA|^('$ Ccj:Kf5#}߇ C�7рכ3A+ieН== в24JfG>ls9HiEub`0䇸辇=fk"* ckb(ډ|`F ~e#c�eHfϱ]$D,#, !21LK.O|2흇pӜnvM|p.()0.LYk' �Fwk) B@2~ZHY�~#Q ՄNTk,,+X�ad<֍x/n꫰cגzR~sj̏<ڝ>j9UqW\vy MeJ] SHsz^X'*?_4r4Z.: 9WJif{P>u@`- p#@4O}~h/y 4&7cBSDJ!j&]፻or!p1]"k]׋4ju Gۢ&M^h1AD 54} 7Ti<|/?iVbW^M <D Z,=}dq % \{Fb|YׁGj jı\Ezmoo\/-C aM֢%Oج.̌k~޾lj[W\ƞ!ʹwBFyW"+ ĻY_DpaTΚȻ"BBkd񡂖%\!`l2Lj~5SjVUDa�)G#: bUgQ�tRZd{MWU4VfAc۷LYW絴#06\gU{Pmm2Kܴ^e֪QvÊ mosf"f4@&LjT*E's6WEj=t@<2P4D˓ ZU͡F*alu)"#C5aMfqzx!2\MO_Rܾ^nhǁq�i*aD8vҧ>Lne @1dӞ A@ $V")d:JJSQQV[ݵc+*}POjXx]^3L\Bq_%RpMZZ#l#:yEBL'?6i@ݟaP@qhǁ4ⳞuMC(WHNYT ؤ S7l]}C YuJ+FAaVCvҩ]EA4�]ۧLkEI̳D8; 3>(@!b(ϛ*Įi" }թ@P /)j|ڇʶ7 Sby&uF,~.Eq/!Bni/cAY)`V[aB8lL\ȇޥW"9)G῵MAP~#Sߋ+>YdflaGݦ"Q1#o,JݽMk^|IX8S4sHσ{߇G#0A ߍ;د-0[x`1e1NM+N):dAH*3؄St\p}(6\\,:as#eQ2cX\t :MoOE%C>8<}¿Onz^V>{ όru*ape8S\`1ļ/?@yq#wSҊw ӦԻHcQ`D%FL�5bŔvQɱ)W[oY|`1X"{m~'iB|-Q6X}՚h  ,(б/>i1m+Ca?Xh`+Tz\!�^TB9,l#l%yD OM+84Q<cY].;u]~�Bc^BiTA @%g4XFk'۲鏶57S"Uܒ>z[["RDP8hEalqq5Q-r ~!dq>c"+Jù\s5W9XcLn(Jgc?}_"q H)BTwތ!^s3&8cìvnBVGƄSJ+Brx?69w͏v k|+ރ&GEMѧp (Brp/^/DXط?JMޛŕ͏;͏|6ffUC~~t8QTl߻ j!ca`X|Zyk(܆{q;Fr&k뢶" [R/`뒥STacQ޴+CCS'QMjߪ[VK;:/Mt] D!:NJ/BGS9JM1 Z�p⾃'z+AQgY 7ܚ1;::fq13;~F{O8ćn3=ZsP`(&XLt4iwSV<E]ksmi[w^2#0QUNo %8[_B;0 R^FN)9hSP] R\�hjp+gu!GMQS�A$Ŧ-�j:M4`Cc~zk& 7F3mò'.ވа<OXAbR���l#l'zeaOCׯXᎵKO5+dlb{k{E͙=ofNK�LӌLjՂ&:Q̌A@=5^]@(:<:]|Zccx�W`:"G:6e\0`Ă2 [a]:S)6&c-rh?CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Zzzx2;����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/papirus/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017526� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/papirus/readme.txt������������������������������������������������0000644�0001750�0000144�00000000205�15104114162�021521� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Papirus icon theme Version 20171223 License GNU LGPL v3.0 https://github.com/PapirusDevelopmentTeam/papirus-icon-theme/tree/20171223 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/papirus/doublecmd.svg���������������������������������������������0000644�0001750�0000144�00000004245�15104114162�022212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1"> <path style="opacity:0.2" d="M 4,56.200069 4,58.20004 C 4,59.750018 5.2495821,61 6.8007599,61 l 50.3992791,0 c 1.549978,0 2.79996,-1.249982 2.79996,-2.79996 l 0,-1.999971 c 0,1.549977 -1.249982,2.79996 -2.79996,2.79996 l -50.3992791,0 c -1.5503778,0 -2.7999599,-1.249983 -2.7999599,-2.79996 z"/> <rect style="fill:#d34d33" width="55.999" height="55.999" x="-60" y="-60" rx="2.8" ry="2.8" transform="matrix(0,-1,-1,0,0,0)"/> <path style="opacity:0.2" d="m 7.9999428,13.000686 0,7.999886 9.7934602,0 c 0.904387,0 2.206368,1.095984 2.206368,1.999971 l 0,19.999714 c 0,0.904487 -1.303501,2.052571 -2.206368,1.999972 l -9.7934602,0 0,7.999885 17.1425552,0 c 1.583977,0 2.857959,-1.273981 2.857959,-2.857959 l 0,-34.283509 c 0,-1.583778 -1.273982,-2.85796 -2.857959,-2.85796 z"/> <path style="fill:#ffffff" d="m 7.9999428,12.000715 0,7.999886 9.7934602,0 c 0.904387,0 2.206368,1.095984 2.206368,1.999971 l 0,19.999714 c 0,0.904487 -1.303501,2.052571 -2.206368,1.999971 l -9.7934602,0 0,7.999886 17.1425552,0 c 1.583977,0 2.857959,-1.273982 2.857959,-2.857959 l 0,-34.28351 c 0,-1.583777 -1.273982,-2.857959 -2.857959,-2.857959 z"/> <path style="opacity:0.2" d="m 55.999256,13.000686 0,7.999886 -9.79346,0 c -0.903987,0 -2.205968,1.095984 -2.205968,1.999971 l 0,19.999714 c 0,0.904487 1.303501,2.052571 2.206368,1.999972 l 9.79386,0 0,7.999885 -17.142554,0 c -1.583978,0 -2.85796,-1.273981 -2.85796,-2.857959 l 0,-34.283509 c 0,-1.583778 1.273982,-2.85796 2.85796,-2.85796 z"/> <path style="fill:#ffffff" d="m 55.999256,12.000715 0,7.999886 -9.79346,0 c -0.903987,0 -2.205968,1.095984 -2.205968,1.999971 l 0,19.999714 c 0,0.904487 1.303501,2.052571 2.206368,1.999971 l 9.79386,0 0,7.999886 -17.142554,0 c -1.583978,0 -2.85796,-1.273982 -2.85796,-2.857959 l 0,-34.28351 c 0,-1.583777 1.273982,-2.857959 2.85796,-2.857959 z"/> <path style="opacity:0.2;fill:#ffffff" d="M 6.8007812 4 C 5.2496034 4 4 5.2496034 4 6.8007812 L 4 7.8027344 C 4 6.2515566 5.2496034 5.0019531 6.8007812 5.0019531 L 57.199219 5.0019531 C 58.749197 5.0019531 60 6.2515566 60 7.8027344 L 60 6.8007812 C 60 5.2496035 58.749197 4 57.199219 4 L 6.8007812 4 z"/> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/papirus/doublecmd.ico���������������������������������������������0000644�0001750�0000144�00000316113�15104114162�022165� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �h��v������ � ���� ��� ���f��00��� �%����@@��� �(B��D����� �(�ކ������� �E ���(������ ���� ������������������������������������������������������������������������������3L3M3M3M3M3M3M3M3M3M3M3M3M3L��������3M0I0I0I0I1K3M3M1K0I0I0I0I3M��������3M3M3M3M��������3M3M3M3M��������3M3M3ME]3M3ME]3M3M3M��������3M3M3M3M3M3M3M3M3M3M��������3M3M3M3M3M3M3M3M3M3M��������3M3M3M3M3M3M3M3M3M3M��������3M3M3M3M3M3M3M3M3M3M��������3M0I0IBY3M3MBY0I0I3M��������3M3M3M3M��������3M3M3M3M��������3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������?X>W>W>W>W>W>W>W>W>W>W>W>W@X����������������������������������������������������������������������������������������������������(������0���� ������ ����������������������������������������������������������������������������������������������������������������������1+B-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D+C1��������2K{3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2Kz��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M<T3M3M=U3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M3M3M3M4NӀ��������4NӀ3M?W3M3M@X3M4NӀ��������4NӀ3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M4NӀ��������=Vz3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M=Vy��������QkPh}Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Nf׀Pg|Qk��������������������������������������������������������������������������������������������������������������������������������������������������(��� ���@���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������.E3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M.F����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M.E.E.E.E.E.E.E.E.E1K3M3M3M3M1K.E.E.E.E.E.E.E.E.E3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3Ms3M3M3M3Mr3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3L3M3M3M3M3L3M3M3M3M3M3M3M����������������3M3M.E.E.E.E.Es3M3M3M3Mr.E.E.E.E.E3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������7Q3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M7Q����������������OdٛIaI`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`I`IaOdٛ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���0���`���� ������$���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%������������������������������!5\2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2K"2[������������������������2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3L������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M,B,B,B,B,B,B,B,B,B,B,B,B,B-D2K3M3M3M3M3M3M2K-D,B,B,B,B,B,B,B,B,B,B,B,B,B3M3M3M������������������������3M3M3M\n3M3M3M3M3M3M\n3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M=V3M3M3M3M3M3M=V3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M;T3M3M3M3M3M3M;T3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M7N3M3M3M3M3M3M7N3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M,B,B,B,B,B,B,B7K3M3M3M3M3M3M7K,B,B,B,B,B,B,B3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3Mbv3M3M3M3M3M3Mcw3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M������������������������6P3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M6P������������������������G^3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MH_������������������������VkJUkQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgUkUnH����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���@������� ������@���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���0���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���0��������������������������������������F,-D3L3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3L-DC*��������������������������������/F3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M.E��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>*?-D3L3M3M3M3M3M3M3M3M3L-D*?)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M��������������������������������3M3M3M3M7M3M3M3M3M3M3M3M3M7M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M4N^s3M3M3M3M3M3M3M3M]r4N3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MXm3M3M3M3M3M3M3M3MWl3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M1J3M3M3M3M3M3M3M3M1J3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M1IPb3M3M3M3M3M3M3M3MPb1J3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M)>)>)>)>)>)>)>)>)>*?Zj3M3M3M3M3M3M3M3MYi*?)>)>)>)>)>)>)>)>)>3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M=U3M3M3M3M3M3M3M3M=U3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M��������������������������������5O3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M5O��������������������������������AX3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MAY��������������������������������Vl۪BZ5O3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M5OBZUlۨ��������������������������������ZiZoݪ\p\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\pYnܩZi��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,���2���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���2���,������������������������������������������������������������������������������������� ���/���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���/��� ��������������������������������������������������������������������������/KG-B2J3L3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3L2J+BIF���/����������������������������������������������������������������������.c2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2L/b�������������������������������������������������������������������RA2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2LP@����������������������������������������������������������������-B3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M,C����������������������������������������������������������������2J3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2K����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>*@.E2L3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2L.E*@)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>*?1J3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M1J*?)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M9L*?2L3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2L*?9L3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3MSd.E3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M.ETe3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M:N3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M;O3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M5NTj3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MSi5N3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MG^3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MF^3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M2K3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M-D3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M-E3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M/G>Q3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M=P/G3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M1J,B)>3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M)>,C1J3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>,@Pa3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MO`,@)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3MBZ3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MC[3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M\q3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M\q3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3MC[3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MD\3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M����������������������������������������������������������������4N3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M4N����������������������������������������������������������������9R3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M9R����������������������������������������������������������������E\3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3MD\����������������������������������������������������������������Vl5O3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M6PVl����������������������������������������������������������������YmڝRh5O3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M6PRhZnۜ����������������������������������������������������������������Uo[qXmE\9R4N3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M3M4N9RE\XmZpUo��������������������������������������������������������������������UkE[q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\qZpUkE����������������������������������������������������������������������������UoYmڝZp[p\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q\q[pZpZnۜUo������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������\rf�� IDATxk\g}߹LMěbP8"bU#jHHmC @"$Hi[x1k}wvg9Ĥ4=c?s~c?3{sf�����������������������w~KJ=AWx?hvIzIr,V;ϴp7u6Vƍ#^o+޿ȅC~3J?|ݹɖ(*߰k?jԚ 38|o HK4܈z'UTRQRz Z Jm%y'q兮׿7FiV؈/{f$Q41h蘒z�sz}ɲZQ}bL^*YC<y_+ӷX*Փ&q]գGK8O@oEw4YJ{a~,'U}ᰒ.I 37]3u�hdZqGy-VT;: % \vH]#򤢉1חvg�I >zO�ScJdQuR .۸[I=R\.]'u�Sg'�pr8_̸F{\`R#^z@Fh}w�d� #�a�0���0�F���`� #�a�0���0�F��rk4VdK+V42OkG4{G>x T*\aWn9$ўt|]vWaEyUy~^MlzkƏek]S �вd}?5tURyaNozף4 Zz跟>|WU(8 ˘Rߕq=csgȠuש}Zcuzǻ]9 �÷ c}- j`Jݟr|Zp=�dXۛq=BS#�V2#xQ[!aGP~Ȱ ;]@57 3=0�F���`� #�a�0���0�F���`� #�a�0���0�F��Ü֢ڗЅk߮^^tNZetX7߯#[~*..(:̢鲆=oiGoZ<ף$==65zL �69{5B2̴4aףd �Бi7>3z>3i8?pĉTcF'$iIuzDH;ulS'~xs/Wl'=ZXie[A?Mn ?CįVS!?p|Sok^K-z{j˼}WIZRlQok^>iO8Cm@KK8.7.yZԖ \9`Jaּ*#îG126ּJ!\9ʇ*lkWW;8|B�R(r\+A*^ W1H���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0���0�F�R;]`^zL#�)/s=yŋ/s=Bzy]i`:]Rߕ0ooR5׺#~o1PK\I .}oG~z/|*]ףd8M^>[- 浻"hk;\8y ^5k}{_Hx^hэ755}~Zu=Zr?zg#TG>zSs ɼ� #�a�0���0�F���`� #�a�0���0�F���`� #�a�0�dXǮGh0w *#CGPelH�d1#hȰwAC{]@tdCG@  &;_߮C\9"�R(֞o}#AkU ?|#[͛\9p32v|󒤶\z34kqp@f= k5}O}�JaW\jmCH8S;t@y\&ɓZMOg5!}վlp $qȐ~ l{PO)'Lg.Լ&8I[.Pg>h54jޤ Z7{Zzt6O"uEfߌ]AB_KKxDsS3ܿ3%tS*շ9ΐ\%;g:Tf VrMuJ<I[j ~j @�Py }OW[.P1 YdrZ55Y\ʼn 4Hɓ4/ 4 ުq �0���0�F���`� #�a�0���0�F���`� kD�^�Dq2z�8OF#&A$LF�E>X4^>Rٱ77cS]#u�zvѨ"�N_$wx,:ph|z#SzC�K&qh|z2:xtms)h'v,)}^-Vѩ׾]op78pՊII^#P4hZrhꁷ.j]k,sQfZny|rRRMJ@@".3} *J7 Ⱥ(IGw}h{>K Үݨ[yLRKU`UyC8dL'cQ>;>勻쏌I_5Gy@EZvLKڧٳyDҰfP8%P~f#0 >`QMHټ/rjۑi/k|����������������l$.p����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/info.txt����������������������������������������������������������0000644�0001750�0000144�00000000350�15104114162�017535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Author of the Double Commander icon is Андрей Гудяк (Andryei Gudyak). The source file is dc.ai. SVG files are generated from it. The "colored" directory contains some early versions of the icon with different colors. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/dc_96.svg���������������������������������������������������������0000644�0001750�0000144�00000037642�15104114162�017504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="96px" height="96px" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve"> <g> <image overflow="visible" opacity="0.75" width="99" height="100" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABlCAYAAAC7vkbxAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABN1JREFUeNrsnetPE0EUxTvbpS0o KEV8v2I0Ub/4//8jmhjfqOADUEAK23bHe+VMczvMlmrbxJRzkpO2dAvb+c25M8OX62pUpbz39qWr umxwgXMT/0035ZubRznjKiDegpkElBsThBvz5uYNRB3OxVnie+vglOKeuA/7ClB+HDBujETEN1Z1 c/MGQ79jQ9wSL4oXMAZWCqAr7oiPxAUAlQZUgFUGQKPAuDNSkQFAEzd1AY8Nc3NuToHk+K4r8KKZ jDUz4ApjD+4AUA9w9PUvPBYGjq8qZe4MGA1AWBVfEa+LL4uXopubN2VIxBK+b/jOCxEQHfxD8Q/4 Fwa+i+f6s+/iHTzXa48BpkylJa+AUUcqdGZcE98R3xffApSL0c3Na0Ka+K4XULrqZhJ7zPYjDP4B nncBRV9viz/Bm+Iv4l2AKUwZSwOJkrECAI/Ej8UP8XrVxHee15FQrhumRMcTsASUwpSk0qwrPwBh Q/xO/Eb8XrwVrpMQDKUkT6Qjx4y4DhjPxE/F98RreG+e0xFvdzOziXEVW95Fu2gbKFpNrqLK6PNl gO3h/TLeMueJdDSRgrviJ4DxEL/QwjhvZ5FRP88SoOxGaBmPdZS1PZQ0TVXfpiRPxLQFILfFDwAm 0D0PyZgGsDC57XHBYUHfRRnbxtrTsynJEuVKqbZRsq7h+RJhTHS4bGBCr2Oi3zEV5w+scO7LonoZ 1o82PrBqYDiO70RQtIRdwiS/Ge1WB+tTFpUre+5og2rzHK4Zs4KyiDPNVZzrTi0DWeJDrWjvnbNU Tf30vwy34uNDlliI7N47ZzKm/v+xhWh8syogqf23I5CZnW2SY5v95b6bmvHZhmvDf/j/GopAKAIh EIpACIQiEAKhCIRAKAKhCIRAKAIhEIpACIQiEAKhCIQiEAKhCIRAKAIhEIpACIQiEIpACIQiEAKh CIRAKAIhEIpAKAIhEIpACIQiEAKhCIRAKAKhCIRAKAIhEIpACIQiEAKhCIQiEAKhCIRAKAIhEIpA CIQiEGoEEM+hmbn83ybEE87MIPhxEhL6sWo76h4e+wQydSD9aIyHukXHCdELQi9wbcJ+TChTh3GM se1grPtVCSlBTTsYa2N27WocWkyXhDI1GPviHYxx6BZdxkBCbAp84Jt4S/wdULoEMjEM7aP+U/xV /BmP+xjz4fbdaK4eEnKAiz+KN5GUQ0OSYMYHEcb0CInQ8XwrfocJvx/GNdXg3uNNHXxtvr4hviFe q5001NVPaCvvOkDa1t/U8O6phG0yNBUvxS/Eb1CFwkQfTPIBECXkvS9Rnn6C5mvxCiBotC4DTmis WyeQZHnqYbw6GMstQHgOIBtITGHTESckTsmX2kl76Tp+sS5E2gdce61fRFoaNfZaj0tUgfE7QLn/ CgA6uV+JP6ACdVI72FMDKSmxfb81EdfFt2AtYevitkkL+60P71I7mP07KEubKFefMMl3cU0vTkcV kLDYazKatZNG9yuA0MaasoakaEoWCGQApIt07CIF2wCj3sM2N5ztTsGoXJABJW543wIABbSMstXE ++e977o35f4Y5WofAA6xsBd2p5qCceYOyaTFITF1JKJhFnam43TZKuBu9C+osgrEWEASiXEmORmT UZmU0pzZ/KhE/BOQCjg8g4w+i4wNgfqP9VuAAQD0aY7Zw5enTgAAAABJRU5ErkJggg==" transform="matrix(1 0 0 1 -1.4893 -2.2207)"> </image> <g> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.8647" y1="47.5703" x2="92.0439" y2="47.5703"> <stop offset="0" style="stop-color:#F05A28"/> <stop offset="0.9831" style="stop-color:#930500"/> </linearGradient> <path fill="url(#SVGID_1_)" d="M92.044,81.077c0,5.844-4.738,10.583-10.582,10.583H14.446c-5.844,0-10.582-4.739-10.582-10.583 V14.062c0-5.844,4.737-10.581,10.582-10.581h67.016c5.844,0,10.582,4.737,10.582,10.581V81.077z"/> <radialGradient id="SVGID_2_" cx="60.75" cy="77.1973" r="66.3267" gradientTransform="matrix(1 0 0 0.4883 0 39.5009)" gradientUnits="userSpaceOnUse"> <stop offset="0.4444" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.9215" style="stop-color:#FFFFFF;stop-opacity:0.4637"/> <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.54"/> </radialGradient> <path opacity="0.58" fill="url(#SVGID_2_)" d="M92.044,81.077c0,5.844-4.738,10.583-10.582,10.583H14.446 c-5.844,0-10.582-4.739-10.582-10.583V14.062c0-5.844,4.737-10.581,10.582-10.581h67.016c5.844,0,10.582,4.737,10.582,10.581 V81.077z"/> <g opacity="0.49"> <path fill="#FFFFFF" d="M14.446,90.21c-8.089-0.596-9.379-7.086-9.379-13.646c0-6.551,0-13.101,0-19.651 c0-13.67,0-27.34,0-41.011c0-6.141,3.503-10.972,10.061-10.972c4.794,0,9.588,0,14.383,0c15.036,0,30.072,0,45.108,0 c4.569,0,9.119-0.622,12.994,2.304c4.205,3.174,3.228,9.695,3.228,14.314c0,15.101,0,30.203,0,45.303c0,4.583,0,9.166,0,13.749 c0,6.903-5.662,9.609-11.591,9.609c-13.865,0-27.73,0-41.596,0C29.918,90.21,22.182,90.21,14.446,90.21c-0.004,0-0.004,0.5,0,0.5 c22.332,0,44.664,0,66.996,0c12.486,0,9.404-17.726,9.404-25.552c0-14.958,0-29.916,0-44.874c0-2.616,0.088-5.238-0.104-7.848 c-0.508-6.903-7.374-8.005-12.786-8.005c-14.373,0-28.745,0-43.118,0c-5.926,0-11.852,0-17.778,0 c-5.953,0-11.876,2.397-11.996,9.415c-0.166,9.746-0.001,19.509-0.001,29.257c0,10.584,0,21.168,0,31.752 c0,7.054-0.171,15.152,9.384,15.855C14.438,90.709,14.462,90.211,14.446,90.21z"/> </g> <path fill="none" stroke="#BE1E2D" stroke-width="0.25" stroke-miterlimit="1" d="M92.044,81.077 c0,5.844-4.738,10.583-10.582,10.583H14.446c-5.844,0-10.582-4.739-10.582-10.583V14.062c0-5.844,4.737-10.581,10.582-10.581 h67.016c5.844,0,10.582,4.737,10.582,10.581V81.077z"/> <g opacity="0.58"> <path fill="#0D003B" d="M92.042,80.475c-0.497,8.013-6.723,10.561-13.625,10.561c-6.092,0-12.184,0-18.276,0 c-14.216,0-28.433,0-42.649,0c-6.213,0-13.62-2.254-13.62-9.978c0-3.673,0-7.345,0-11.017c0-15.231,0-30.463,0-45.694 c0-4.018-0.431-8.294,0.317-12.266c1.293-6.868,8.057-7.976,13.764-7.976c14.373,0,28.746,0,43.118,0 c8.443,0,30.968-3.765,30.968,10.034c0,11.641,0,23.282,0,34.922c0,10.672,0,21.344,0,32.016c0,0.707,0.012,0.707,0.012,0 c0-22.332,0-44.664,0-66.996c0-13.701-15.621-11.226-24.813-11.226c-15.101,0-30.202,0-45.303,0 c-4.145,0-8.608-0.528-12.461,1.24c-4.771,2.188-5.613,7.2-5.613,11.807c0,13.67,0,27.34,0,41.011c0,6.551,0,13.101,0,19.651 c0,3.039-0.217,6.03,0.719,8.962c2.014,6.312,8.408,6.759,13.865,6.759c6.404,0,12.808,0,19.212,0c11.418,0,22.836,0,34.254,0 c8.408,0,19.415,1.017,20.138-10.605C92.069,81.304,92.024,80.768,92.042,80.475z"/> </g> </g> </g> <g> <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="21.0039" y1="83.1426" x2="21.0039" y2="12.9473"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_3_)" d="M0.289,83.143v-13.94h6.676c11.978,0,20.813-9.622,20.813-20.714 c0-11.881-9.032-21.601-21.01-21.601H0.289v-13.94h6.676c19.243,0,34.755,15.609,34.755,35.442 c0,18.947-15.512,34.753-34.755,34.753H0.289z"/> <g opacity="0.51"> <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="21.0039" y1="83.1426" x2="21.0039" y2="12.9473"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_4_)" d="M0.289,83.143v-13.94h6.676c11.978,0,20.813-9.622,20.813-20.714 c0-11.881-9.032-21.601-21.01-21.601H0.289v-13.94h6.676c19.243,0,34.755,15.609,34.755,35.442 c0,18.947-15.512,34.753-34.755,34.753H0.289z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="21.0039" y1="12.9468" x2="21.0039" y2="83.1431"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_5_)" d="M0.289,83.143v-13.94h6.676c11.978,0,20.813-9.622,20.813-20.714 c0-11.881-9.032-21.601-21.01-21.601H0.289v-13.94h6.676c19.243,0,34.755,15.609,34.755,35.442 c0,18.947-15.512,34.753-34.755,34.753H0.289z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M0.645,82.79c0-2.858,0-5.718,0-8.576c0-1.43,0-2.859,0-4.289c0-0.09,3.309-0.007,4.094-0.007 c10.594,0,19.527-5.138,22.692-15.688c1.729-5.764,0.415-12.545-2.392-17.641c-5.016-9.105-14.43-10.417-23.761-10.417 c-1.035,0-0.634-0.261-0.634-1.705c0-1.847,0-3.693,0-5.539c0-1.608,0-3.216,0-4.824c0-1.019,1.87-0.441,3.158-0.441 c10.116,0,19.059,2.313,26.696,9.281c19.325,17.63,10.858,49.57-12.923,57.81c-5.482,1.899-11.231,1.674-16.935,1.674 c-0.005,0-0.005,0.727,0,0.727c10.494,0,19.736-1.113,28.256-7.917c8.054-6.432,12.473-16.653,12.473-26.847 c0-10.381-4.124-20.016-11.803-27.022c-8.212-7.492-18.383-8.431-28.926-8.431c-0.004,0-0.003,0.344-0.003,0.363 c0,4.412,0,8.824,0,13.235c0,0.019-0.001,0.363,0.003,0.363c5.246,0,10.161-0.153,15.105,1.961 c6.963,2.977,11.146,9.964,12.22,17.202c1.318,8.885-4.26,17.137-11.871,21.068c-4.794,2.477-10.244,2.063-15.455,2.063 c-0.004,0-0.003,0.345-0.003,0.363c0,4.412,0,8.823,0,13.235C0.638,83.2,0.645,83.2,0.645,82.79z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M0.289,83.143v-13.94h6.676 c11.978,0,20.813-9.622,20.813-20.714c0-11.881-9.032-21.601-21.01-21.601H0.289v-13.94h6.676 c19.243,0,34.755,15.609,34.755,35.442c0,18.947-15.512,34.753-34.755,34.753H0.289z"/> <g opacity="0.58"> <path fill="#959595" d="M0.289,83.143c0-2.818,0-5.636,0-8.454c0-1.571,0-3.143,0-4.714c0-1.302,1.808-0.712,2.883-0.712 c10.162,0,18.86-3.114,23.157-13.095c2.28-5.296,1.688-11.51-0.397-16.719c-4.001-9.994-13.648-12.622-23.363-12.622 c-1.055,0-2.28,0.503-2.28-0.711c0-1.572,0-3.143,0-4.715c0-1.233-0.635-8.393,0.582-8.393c9.375,0,17.762,0.775,25.81,6.166 c11.201,7.503,16.441,21.482,14.606,34.599c-1.542,11.025-9.026,20.419-18.681,25.565c-7.028,3.746-14.605,3.744-22.318,3.744 c-0.001,0-0.001,0.121,0,0.121c10.72,0,20.167-1.073,28.866-8.068c7.948-6.391,12.565-16.613,12.565-26.746 c0-10.37-4.373-20.018-12.021-26.974c-8.379-7.62-18.681-8.529-29.41-8.529c0,0,0,0.058,0,0.061c0,4.647,0,9.293,0,13.94 c0,0.003,0,0.061,0,0.061c5.338,0,10.372-0.21,15.395,1.966c6.809,2.951,10.892,9.844,11.937,16.935 c1.309,8.874-3.794,17.178-11.458,21.209c-4.884,2.569-10.548,2.084-15.873,2.084c0,0,0,0.058,0,0.061 C0.288,73.849,0.288,78.496,0.289,83.143C0.288,83.211,0.289,83.211,0.289,83.143z"/> </g> </g> <g> <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="74.9414" y1="83.1426" x2="74.9414" y2="12.9473"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_6_)" d="M95.656,12.947v13.94H88.98c-11.977,0-20.813,9.622-20.813,20.715c0,11.88,9.032,21.6,21.01,21.6 h6.479v13.94H88.98c-19.242,0-34.755-15.608-34.755-35.442c0-18.948,15.513-34.754,34.755-34.754H95.656z"/> <g opacity="0.51"> <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="74.9414" y1="83.1426" x2="74.9414" y2="12.9473"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_7_)" d="M95.656,12.947v13.94H88.98c-11.977,0-20.813,9.622-20.813,20.715c0,11.88,9.032,21.6,21.01,21.6 h6.479v13.94H88.98c-19.242,0-34.755-15.608-34.755-35.442c0-18.948,15.513-34.754,34.755-34.754H95.656z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="74.9414" y1="12.9468" x2="74.9414" y2="83.1431"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_8_)" d="M95.656,12.947v13.94H88.98c-11.977,0-20.813,9.622-20.813,20.715c0,11.88,9.032,21.6,21.01,21.6 h6.479v13.94H88.98c-19.242,0-34.755-15.608-34.755-35.442c0-18.948,15.513-34.754,34.755-34.754H95.656z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M88.98,82.427c-25.714-0.488-42.359-27.824-30.127-50.961c5.169-9.777,15.241-16.058,26.024-17.561 c3.358-0.468,6.866-0.243,10.249-0.243c0.355,0,0.173,7.772,0.173,9.144c0,1.211,0,2.422,0,3.633c0-0.538-3.649-0.267-4.094-0.267 c-4.953,0-9.32,0.752-13.643,3.334c-6.327,3.781-9.824,11.139-9.752,18.353c0.102,10.088,6.317,18.602,16.046,21.399 c3.444,0.991,7.264,0.66,10.81,0.66c1.034,0,0.633,0.261,0.633,1.705c0,2.169,0,4.339,0,6.508c0,1.01,0.184,4.296-0.173,4.296 C93.078,82.427,91.029,82.427,88.98,82.427c-0.006,0-0.006,0.727,0,0.727c2.107,0,4.216,0,6.323,0 c0.004,0,0.004-0.345,0.004-0.363c0-4.412,0-8.823,0-13.235c0-0.019,0-0.363-0.004-0.363c-5.245,0-10.161,0.153-15.105-1.96 c-6.963-2.977-11.146-9.964-12.221-17.201c-1.318-8.886,4.261-17.138,11.872-21.07c4.794-2.477,10.243-2.063,15.454-2.063 c0.004,0,0.004-0.344,0.004-0.363c0-4.412,0-8.824,0-13.235c0-0.019,0-0.363-0.004-0.363c-9.549,0-18.053,0.773-26.209,6.344 c-8.576,5.857-14.285,16.336-14.491,26.726C54.207,66.042,68.436,82.763,88.98,83.153C88.981,83.153,88.99,82.428,88.98,82.427z" /> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M95.656,12.947v13.94H88.98 c-11.977,0-20.813,9.622-20.813,20.715c0,11.88,9.032,21.6,21.01,21.6h6.479v13.94H88.98c-19.242,0-34.755-15.608-34.755-35.442 c0-18.948,15.513-34.754,34.755-34.754H95.656z"/> <g opacity="0.58"> <path fill="#959595" d="M95.655,12.947c0,2.818,0,5.636,0,8.454c0,1.572,0,3.143,0,4.715c0,1.301-1.807,0.711-2.883,0.711 c-10.162,0-18.86,3.115-23.157,13.095c-2.28,5.295-1.688,11.511,0.397,16.719c4.001,9.994,13.648,12.622,23.362,12.622 c1.055,0,2.28-0.503,2.28,0.712c0,1.571,0,3.143,0,4.714c0,1.233,0.636,8.394-0.581,8.394c-9.374,0-17.762-0.775-25.81-6.166 c-11.201-7.503-16.441-21.481-14.607-34.599c1.542-11.025,9.027-20.419,18.682-25.565c7.028-3.746,14.605-3.744,22.317-3.744 c0.001,0,0.001-0.121,0-0.121c-10.72,0-20.166,1.073-28.865,8.068c-7.949,6.391-12.566,16.614-12.566,26.747 c0,10.37,4.373,20.018,12.022,26.973c8.379,7.62,18.68,8.529,29.409,8.529c0.001,0,0.001-0.058,0.001-0.061 c0-4.646,0-9.294,0-13.94c0-0.003,0-0.061-0.001-0.061c-5.339,0-10.372,0.21-15.395-1.966c-6.809-2.95-10.892-9.843-11.938-16.934 c-1.308-8.874,3.795-17.179,11.459-21.21c4.885-2.569,10.548-2.084,15.873-2.084c0.001,0,0.001-0.058,0.001-0.061 c0-4.647,0-9.293,0-13.94C95.657,12.878,95.655,12.878,95.655,12.947z"/> </g> </g> </svg> ����������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/dc_48.svg���������������������������������������������������������0000644�0001750�0000144�00000032772�15104114162�017500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"> <g> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.1279" y1="23.9697" x2="45.8799" y2="23.9697"> <stop offset="0" style="stop-color:#F05A28"/> <stop offset="0.9831" style="stop-color:#930500"/> </linearGradient> <path fill="url(#SVGID_1_)" d="M45.88,40.595c0,2.898-2.354,5.25-5.251,5.25H7.378c-2.9,0-5.25-2.352-5.25-5.25V7.344 c0-2.899,2.351-5.25,5.25-5.25h33.25c2.897,0,5.251,2.35,5.251,5.25V40.595z"/> <radialGradient id="SVGID_2_" cx="30.3525" cy="38.6689" r="32.9095" gradientTransform="matrix(1 0 0 0.4883 0 19.7864)" gradientUnits="userSpaceOnUse"> <stop offset="0.4444" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.9215" style="stop-color:#FFFFFF;stop-opacity:0.4637"/> <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.54"/> </radialGradient> <path opacity="0.58" fill="url(#SVGID_2_)" d="M45.88,40.595c0,2.898-2.354,5.25-5.251,5.25H7.378c-2.9,0-5.25-2.352-5.25-5.25 V7.344c0-2.899,2.351-5.25,5.25-5.25h33.25c2.897,0,5.251,2.35,5.251,5.25V40.595z"/> <g opacity="0.49"> <path fill="#FFFFFF" d="M7.378,45.158c-3.755-0.253-4.682-3.215-4.682-6.372c0-2.941,0-5.881,0-8.823c0-6.857,0-13.716,0-20.575 c0-3.003,0.53-5.844,4.046-6.565c1.556-0.318,3.411-0.042,4.978-0.042c7.215,0,14.433,0,21.648,0 c4.307,0,11.941-1.347,11.941,5.103c0,6.145,0,12.288,0,18.432c0,3.419,0,6.84,0,10.263c0,2.053,0.308,4.376-0.64,6.26 c-1.249,2.484-4.012,2.32-6.332,2.32c-3.078,0-6.155,0-9.233,0C21.862,45.158,14.622,45.158,7.378,45.158 c-0.002,0-0.002,0.236,0,0.236c10.981,0,21.961,0,32.943,0c5.786,0,4.992-5.903,4.992-9.821c0-7.249,0-14.498,0-21.747 c0-3.831,1.223-11.283-4.72-11.283c-5.373,0-10.746,0-16.12,0c-5.653,0-11.305,0-16.958,0c-5.851,0-4.821,6.679-4.821,10.535 c0,7.011,0,14.022,0,21.033c0,4.077-1.223,10.884,4.684,11.283C7.375,45.393,7.385,45.158,7.378,45.158z"/> </g> <path fill="none" stroke="#BE1E2D" stroke-width="0.25" stroke-miterlimit="1" d="M45.88,40.595c0,2.898-2.354,5.25-5.251,5.25 H7.378c-2.9,0-5.25-2.352-5.25-5.25V7.344c0-2.899,2.351-5.25,5.25-5.25h33.25c2.897,0,5.251,2.35,5.251,5.25V40.595z"/> <g opacity="0.58"> <path fill="#0D003B" d="M45.878,40.311c-0.24,3.884-3.238,5.24-6.627,5.24c-2.791,0-5.584,0-8.378,0c-6.981,0-13.962,0-20.943,0 c-2.429,0-4.574,0.139-6.477-1.766c-1.698-1.698-1.322-4.409-1.322-6.589c0-7.126,0-14.246,0-21.371 c0-4.506-1.545-13.436,5.384-13.436c5.654,0,11.306,0,16.958,0c5.374,0,10.747,0,16.12,0c7.002,0,5.283,9.812,5.283,14.279 c0,7.978,0,15.951,0,23.926c0,0.335,0.005,0.335,0.005,0c0-10.981,0-21.962,0-32.943c0-3.189-1.94-5.647-5.253-5.854 c-1.545-0.095-3.129,0-4.678,0c-7.234,0-14.47,0-21.705,0c-4.515,0-12.121-1.178-12.121,5.546c0,5.071,0,10.143,0,15.215 c0,5.909,0,11.82,0,17.729c0,3.188,1.939,5.648,5.253,5.855c1.545,0.094,3.128,0,4.676,0c6.836,0,13.671,0,20.506,0 c4.657,0,12.899,1.489,13.32-5.264C45.892,40.702,45.87,40.448,45.878,40.311z"/> </g> </g> <g> <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="10.6323" y1="41.6191" x2="10.6323" y2="6.791"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_3_)" d="M0.354,41.619v-6.917h3.312c5.943,0,10.327-4.775,10.327-10.277c0-5.895-4.481-10.717-10.424-10.717 H0.354V6.791h3.312c9.548,0,17.245,7.744,17.245,17.584c0,9.402-7.697,17.244-17.245,17.244H0.354z"/> <g opacity="0.51"> <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="10.6323" y1="41.6191" x2="10.6323" y2="6.791"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_4_)" d="M0.354,41.619v-6.917h3.312c5.943,0,10.327-4.775,10.327-10.277 c0-5.895-4.481-10.717-10.424-10.717H0.354V6.791h3.312c9.548,0,17.245,7.744,17.245,17.584c0,9.402-7.697,17.244-17.245,17.244 H0.354z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="10.6323" y1="6.7905" x2="10.6323" y2="41.6196"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_5_)" d="M0.354,41.619v-6.917h3.312c5.943,0,10.327-4.775,10.327-10.277 c0-5.895-4.481-10.717-10.424-10.717H0.354V6.791h3.312c9.548,0,17.245,7.744,17.245,17.584c0,9.402-7.697,17.244-17.245,17.244 H0.354z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M0.522,41.453c0-1.331,0-2.663,0-3.994c0-0.742,0-1.481,0-2.224c0-0.462,0.977-0.194,1.572-0.194 c5.01,0,9.288-1.809,11.359-6.675c1.127-2.646,0.84-5.924-0.171-8.534c-1.86-4.789-6.508-6.463-11.237-6.463 c-0.332,0-1.522,0.042-1.522,0.003c0-0.657,0-1.313,0-1.97c0-0.914,0-1.826,0-2.738c0-0.46-0.089-1.535,0.086-1.535 c4.478,0,8.517,0.301,12.421,2.77c4.387,2.772,6.988,7.624,7.611,12.682c0.772,6.262-2.443,12.307-7.497,15.823 c-3.828,2.665-8.145,2.878-12.624,2.878c-0.002,0-0.002,0.343,0,0.343c5.24,0,9.853-0.558,14.091-3.979 c3.958-3.192,6.134-8.234,6.134-13.27c0-5.126-2.033-9.897-5.816-13.367C10.842,7.261,5.781,6.786,0.52,6.786 c-0.002,0-0.001,0.163-0.001,0.171c0,2.195,0,4.389,0,6.583c0,0.009,0,0.172,0.001,0.172c2.545,0,4.942-0.085,7.35,0.903 c3.545,1.454,5.692,4.982,6.214,8.648c0.603,4.228-1.938,8.183-5.489,10.209c-2.486,1.417-5.327,1.224-8.075,1.224 c-0.002,0-0.001,0.164-0.001,0.174c0,2.192,0,4.387,0,6.583C0.519,41.647,0.522,41.647,0.522,41.453z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M0.354,41.619v-6.917h3.312 c5.943,0,10.327-4.775,10.327-10.277c0-5.895-4.481-10.717-10.424-10.717H0.354V6.791h3.312c9.548,0,17.245,7.744,17.245,17.584 c0,9.402-7.697,17.244-17.245,17.244H0.354z"/> <g opacity="0.58"> <path fill="#959595" d="M0.354,41.619c0-1.309,0-2.619,0-3.929c0-0.796,0-1.591,0-2.387c0-0.78,0.22-0.573,0.994-0.573 c4.804,0,8.959-1.005,11.481-5.522c1.362-2.441,1.404-5.321,0.721-7.953c-1.255-4.84-5.792-7.576-10.569-7.576 c-0.783,0-1.565,0-2.348,0c-0.471,0-0.279-0.478-0.279-0.881c0-1.802,0-3.603,0-5.405c0-1.113,2.097-0.573,3.023-0.573 c2.438,0,4.753,0.449,7.011,1.364c11.426,4.628,13.667,20.071,5.262,28.527c-4.233,4.258-9.628,4.879-15.296,4.879v0.06 c5.347,0,10.058-0.54,14.38-4.055c3.908-3.174,6.177-8.216,6.177-13.22c0-5.121-2.152-9.897-5.921-13.343 C10.823,7.224,5.703,6.761,0.354,6.761c0,0,0,0.028,0,0.029c0,2.307,0,4.611,0,6.917c0,0.001,0,0.028,0,0.028 c2.586,0,5.044-0.11,7.491,0.907c3.469,1.443,5.566,4.925,6.076,8.521c0.63,4.446-1.968,8.6-5.849,10.552 c-2.385,1.198-5.135,0.957-7.718,0.957c0,0,0,0.027,0,0.029C0.354,37.008,0.354,39.314,0.354,41.619 C0.354,41.651,0.354,41.651,0.354,41.619z"/> </g> </g> <g> <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="37.3945" y1="41.6191" x2="37.3945" y2="6.791"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_6_)" d="M47.672,6.791v6.917H44.36c-5.943,0-10.328,4.774-10.328,10.278c0,5.895,4.481,10.716,10.425,10.716 h3.215v6.917H44.36c-9.549,0-17.244-7.744-17.244-17.585c0-9.4,7.695-17.244,17.244-17.244H47.672z"/> <g opacity="0.51"> <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="37.3945" y1="41.6191" x2="37.3945" y2="6.791"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_7_)" d="M47.672,6.791v6.917H44.36c-5.943,0-10.328,4.774-10.328,10.278 c0,5.895,4.481,10.716,10.425,10.716h3.215v6.917H44.36c-9.549,0-17.244-7.744-17.244-17.585c0-9.4,7.695-17.244,17.244-17.244 H47.672z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="37.3945" y1="6.7905" x2="37.3945" y2="41.6196"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_8_)" d="M47.672,6.791v6.917H44.36c-5.943,0-10.328,4.774-10.328,10.278 c0,5.895,4.481,10.716,10.425,10.716h3.215v6.917H44.36c-9.549,0-17.244-7.744-17.244-17.585c0-9.4,7.695-17.244,17.244-17.244 H47.672z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M44.36,41.281C32.252,41.061,23.994,28.79,28.688,17.424c1.983-4.802,6.318-8.289,11.237-9.711 c1.964-0.568,3.983-0.583,6.008-0.583c0.332,0,1.57-0.042,1.57-0.004c0,0.809,0,1.615,0,2.423c0,0.608,0.092,3.821-0.087,3.821 c-1.896,0-3.776-0.09-5.638,0.319c-4.664,1.026-7.869,5.528-7.916,10.175c-0.034,3.562,1.438,6.78,4.204,9.03 c1.794,1.462,4.189,2.147,6.477,2.147c0.767,0,1.535,0,2.303,0c0.831,0,0.657-0.157,0.657,0.769c0,1.674,0,3.346,0,5.017 c0,0.728,0.024,0.455-0.679,0.455C46.004,41.281,45.181,41.281,44.36,41.281c-0.003,0-0.003,0.343,0,0.343 c1.047,0,2.096,0,3.146,0c0.002,0,0.002-0.161,0.002-0.171c0-2.196,0-4.391,0-6.583c0-0.01,0-0.174-0.002-0.174 c-2.544,0-4.943,0.086-7.35-0.903c-3.546-1.453-5.691-4.979-6.214-8.646c-0.604-4.227,1.938-8.184,5.487-10.21 c2.487-1.417,5.328-1.224,8.076-1.224c0.002,0,0.002-0.164,0.002-0.172c0-2.194,0-4.388,0-6.583c0-0.009,0-0.171-0.002-0.171 c-4.793,0-9.057,0.395-13.126,3.228c-4.208,2.927-6.989,8.091-7.087,13.217C27.106,33.155,34.19,41.44,44.36,41.624 C44.361,41.624,44.365,41.281,44.36,41.281z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M47.672,6.791v6.917H44.36 c-5.943,0-10.328,4.774-10.328,10.278c0,5.895,4.481,10.716,10.425,10.716h3.215v6.917H44.36c-9.549,0-17.244-7.744-17.244-17.585 c0-9.4,7.695-17.244,17.244-17.244H47.672z"/> <g opacity="0.58"> <path fill="#959595" d="M47.672,6.791c0,1.31,0,2.619,0,3.929c0,0.795,0,1.589,0,2.384c0,0.783-0.22,0.575-0.996,0.575 c-4.804,0-8.958,1.005-11.48,5.522c-1.362,2.441-1.403,5.322-0.721,7.953c1.254,4.843,5.793,7.577,10.568,7.577 c0.784,0,1.565,0,2.351,0c0.469,0,0.278,0.478,0.278,0.879c0,1.803,0,3.605,0,5.407c0,1.115-2.097,0.573-3.023,0.573 c-2.438,0-4.753-0.448-7.01-1.362c-11.428-4.63-13.668-20.072-5.262-28.529c4.231-4.257,9.627-4.879,15.295-4.879 c0.001,0,0.001-0.059,0-0.059c-5.347,0-10.058,0.541-14.379,4.052c-3.909,3.176-6.177,8.217-6.177,13.221 c0,5.122,2.15,9.897,5.922,13.344c4.163,3.808,9.286,4.271,14.634,4.271c0.001,0,0.001-0.027,0.001-0.03c0-2.305,0-4.611,0-6.917 c0-0.002,0-0.029-0.001-0.029c-2.587,0-5.045,0.111-7.489-0.907c-3.471-1.44-5.567-4.923-6.078-8.519 c-0.629-4.449,1.97-8.602,5.85-10.552c2.384-1.2,5.135-0.959,7.718-0.959c0.001,0,0.001-0.027,0.001-0.028 C47.673,11.402,47.673,9.097,47.672,6.791C47.673,6.758,47.672,6.758,47.672,6.791z"/> </g> </g> </svg> ������doublecmd-1.1.30/pixmaps/mainicon/dc_256.svg��������������������������������������������������������0000644�0001750�0000144�00000034310�15104114162�017547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="256px" height="256px" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve"> <g> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="9.9214" y1="128.1143" x2="246.1299" y2="128.1143"> <stop offset="0" style="stop-color:#F05A28"/> <stop offset="0.9831" style="stop-color:#930500"/> </linearGradient> <path fill="url(#SVGID_1_)" d="M246.13,217.871c0,15.656-12.693,28.346-28.346,28.346H38.267 c-15.655,0-28.345-12.689-28.345-28.346V38.357c0-15.654,12.69-28.345,28.345-28.345h179.518c15.652,0,28.346,12.691,28.346,28.345 V217.871z"/> <radialGradient id="SVGID_2_" cx="162.3027" cy="207.4746" r="177.6697" gradientTransform="matrix(1 0 0 0.4883 0 106.1623)" gradientUnits="userSpaceOnUse"> <stop offset="0.4444" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.9215" style="stop-color:#FFFFFF;stop-opacity:0.4637"/> <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.54"/> </radialGradient> <path opacity="0.58" fill="url(#SVGID_2_)" d="M246.13,217.871c0,15.656-12.693,28.346-28.346,28.346H38.267 c-15.655,0-28.345-12.689-28.345-28.346V38.357c0-15.654,12.69-28.345,28.345-28.345h179.518c15.652,0,28.346,12.691,28.346,28.345 V217.871z"/> <g opacity="0.49"> <path fill="#FFFFFF" d="M38.267,242.516c-20.272-1.37-25.272-17.359-25.272-34.41c0-15.875,0-31.75,0-47.627 c0-37.029,0-74.059,0-111.087c0-16.214,2.855-31.555,21.847-35.444c8.393-1.718,18.409-0.23,26.868-0.23 c38.958,0,77.917,0,116.874,0c23.259,0,64.474-7.272,64.474,27.551c0,33.172,0,66.341,0,99.51c0,18.47,0,36.939,0,55.412 c0,11.073,1.66,23.621-3.453,33.79c-6.739,13.422-21.664,12.535-34.189,12.535c-16.618,0-33.23,0-49.848,0 C116.467,242.516,77.368,242.516,38.267,242.516c-0.011,0-0.011,1.276,0,1.276c59.287,0,118.57,0,177.857,0 c31.231,0,26.948-31.88,26.948-53.02c0-39.139,0-78.279,0-117.417c0-20.678,6.604-60.916-25.479-60.916 c-29.008,0-58.015,0-87.029,0c-30.515,0-61.033,0-91.551,0c-31.599,0-26.031,36.057-26.031,56.876c0,37.854,0,75.706,0,113.561 c0,21.996-6.607,58.762,25.285,60.915C38.248,243.788,38.305,242.517,38.267,242.516z"/> </g> <path fill="none" stroke="#BE1E2D" stroke-width="0.25" stroke-miterlimit="1" d="M246.13,217.871 c0,15.656-12.693,28.346-28.346,28.346H38.267c-15.655,0-28.345-12.689-28.345-28.346V38.357c0-15.654,12.69-28.345,28.345-28.345 h179.518c15.652,0,28.346,12.691,28.346,28.345V217.871z"/> <g opacity="0.58"> <path fill="#0D003B" d="M246.122,216.335c-1.295,20.968-17.481,28.288-35.775,28.288c-15.078,0-30.155,0-45.235,0 c-37.691,0-75.381,0-113.073,0c-13.111,0-24.693,0.751-34.962-9.522c-9.17-9.172-7.139-23.807-7.139-35.574 c0-38.463,0-76.917,0-115.378c0-24.328-8.337-72.539,29.076-72.539c30.518,0,61.037,0,91.551,0c29.015,0,58.021,0,87.029,0 c37.8,0,28.521,52.973,28.521,77.096c0,43.056,0,86.108,0,129.166c0,1.808,0.03,1.808,0.03,0c0-59.283,0-118.568,0-177.854 c0-17.22-10.469-30.49-28.36-31.603c-8.343-0.517-16.89,0-25.245,0c-39.065,0-78.128,0-117.191,0 c-24.376,0-65.442-6.36-65.442,29.943c0,27.379,0,54.764,0,82.146c0,31.902,0,63.807,0,95.708 c0,17.221,10.471,30.494,28.361,31.607c8.345,0.514,16.892,0,25.247,0c36.902,0,73.806,0,110.709,0 c25.147,0,69.647,8.053,71.914-28.407C246.193,218.453,246.08,217.084,246.122,216.335z"/> </g> </g> <g> <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="55.8335" y1="223.4033" x2="55.8335" y2="35.3721"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_3_)" d="M0.343,223.403v-37.345h17.883c32.084,0,55.753-25.771,55.753-55.484 c0-31.826-24.193-57.862-56.28-57.862H0.343v-37.34h17.883c51.546,0,93.099,41.809,93.099,94.939 c0,50.752-41.553,93.093-93.099,93.093H0.343z"/> <g opacity="0.51"> <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="55.8335" y1="223.4033" x2="55.8335" y2="35.3721"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_4_)" d="M0.343,223.403v-37.345h17.883c32.084,0,55.753-25.771,55.753-55.484 c0-31.826-24.193-57.862-56.28-57.862H0.343v-37.34h17.883c51.546,0,93.099,41.809,93.099,94.939 c0,50.752-41.553,93.093-93.099,93.093H0.343z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="55.8335" y1="35.3716" x2="55.8335" y2="223.4038"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_5_)" d="M0.343,223.403v-37.345h17.883c32.084,0,55.753-25.771,55.753-55.484 c0-31.826-24.193-57.862-56.28-57.862H0.343v-37.34h17.883c51.546,0,93.099,41.809,93.099,94.939 c0,50.752-41.553,93.093-93.099,93.093H0.343z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M1.251,222.504c0-7.185,0-14.368,0-21.556c0-4.009,0-8.012,0-12.017c0-2.486,5.265-1.04,8.484-1.04 c27.05,0,50.146-9.767,61.326-36.032c6.085-14.3,4.542-31.987-0.928-46.076C60.093,79.93,35.006,70.884,9.47,70.884 c-1.795,0-8.219,0.229-8.219,0.021c0-3.546,0-7.091,0-10.637c0-4.928,0-9.854,0-14.783c0-2.477-0.478-8.286,0.468-8.286 c24.17,0,45.977,1.625,67.053,14.951c23.688,14.972,37.727,41.153,41.098,68.471c4.166,33.803-13.192,66.436-40.474,85.42 c-20.673,14.384-43.976,15.536-68.153,15.536c-0.014,0-0.014,1.854,0,1.854c28.286,0,53.196-3.014,76.069-21.473 c21.373-17.249,33.12-44.465,33.12-71.646c0-27.68-10.972-53.437-31.401-72.171C56.965,37.908,29.641,35.344,1.243,35.344 c-0.011,0-0.009,0.879-0.009,0.926c0,11.848,0,23.694,0,35.541c0,0.046-0.002,0.928,0.009,0.928 c13.732,0,26.679-0.453,39.677,4.878c19.142,7.848,30.727,26.896,33.552,46.686c3.259,22.818-10.468,44.182-29.635,55.112 c-13.421,7.656-28.757,6.615-43.594,6.615c-0.011,0-0.009,0.882-0.009,0.933c0,11.845,0,23.693,0,35.541 C1.234,223.55,1.251,223.55,1.251,222.504z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M0.343,223.403v-37.345h17.883 c32.084,0,55.753-25.771,55.753-55.484c0-31.826-24.193-57.862-56.28-57.862H0.343v-37.34h17.883 c51.546,0,93.099,41.809,93.099,94.939c0,50.752-41.553,93.093-93.099,93.093H0.343z"/> <g opacity="0.58"> <path fill="#959595" d="M0.344,223.403c0-7.068,0-14.139,0-21.208c0-4.297,0-8.587,0-12.878c0-4.225,1.192-3.102,5.373-3.102 c25.935,0,48.369-5.427,61.984-29.816c7.355-13.177,7.58-28.727,3.892-42.937c-6.779-26.134-31.275-40.904-57.061-40.904 c-4.225,0-8.45,0-12.676,0c-2.545,0-1.512-2.581-1.512-4.756c0-9.725,0-19.452,0-29.179c0-6.014,11.324-3.099,16.323-3.099 c13.157,0,25.658,2.427,37.852,7.364c61.694,24.986,73.788,108.366,28.401,154.015c-22.847,22.984-51.976,26.345-82.578,26.345 c-0.002,0-0.002,0.309,0,0.309c28.867,0,54.307-2.91,77.635-21.873c21.098-17.144,33.349-44.357,33.349-71.373 c0-27.652-11.613-53.438-31.97-72.042C56.863,37.709,29.218,35.214,0.343,35.214c0,0,0,0.149,0,0.158c0,12.446,0,24.892,0,37.34 c0,0.008,0,0.155,0,0.155c13.966,0,27.231-0.589,40.436,4.897c18.738,7.786,30.054,26.593,32.807,45.996 c3.408,24.009-10.621,46.433-31.574,56.966c-12.878,6.475-27.723,5.181-41.669,5.181c0,0,0,0.145,0,0.152 c0,12.448,0,24.899,0,37.345C0.342,223.574,0.344,223.574,0.344,223.403z"/> </g> </g> <g> <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="200.3184" y1="223.4033" x2="200.3183" y2="35.3721"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_6_)" d="M255.806,35.372v37.34h-17.881c-32.084,0-55.757,25.778-55.757,55.489 c0,31.827,24.196,57.858,56.277,57.858h17.36v37.345h-17.881c-51.549,0-93.095-41.813-93.095-94.937 c0-50.759,41.546-93.095,93.095-93.095H255.806z"/> <g opacity="0.51"> <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="200.3184" y1="223.4033" x2="200.3183" y2="35.3721"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_7_)" d="M255.806,35.372v37.34h-17.881c-32.084,0-55.757,25.778-55.757,55.489 c0,31.827,24.196,57.858,56.277,57.858h17.36v37.345h-17.881c-51.549,0-93.095-41.813-93.095-94.937 c0-50.759,41.546-93.095,93.095-93.095H255.806z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="200.3184" y1="35.3716" x2="200.3183" y2="223.4038"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_8_)" d="M255.806,35.372v37.34h-17.881c-32.084,0-55.757,25.778-55.757,55.489 c0,31.827,24.196,57.858,56.277,57.858h17.36v37.345h-17.881c-51.549,0-93.095-41.813-93.095-94.937 c0-50.759,41.546-93.095,93.095-93.095H255.806z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M237.925,221.576c-65.366-1.184-109.953-67.434-84.609-128.803c10.704-25.926,34.107-44.749,60.673-52.426 c10.601-3.064,21.506-3.15,32.429-3.15c1.805,0,8.478-0.227,8.478-0.021c0,4.36,0,8.721,0,13.082 c0,3.284,0.499,20.625-0.464,20.625c-10.231,0-20.387-0.488-30.438,1.724c-25.181,5.546-42.479,29.853-42.734,54.939 c-0.19,19.232,7.764,36.604,22.692,48.751c9.687,7.893,22.618,11.594,34.961,11.594c4.145,0,8.293,0,12.438,0 c4.483,0,3.545-0.852,3.545,4.151c0,9.032,0,18.055,0,27.083c0,3.917,0.137,2.45-3.656,2.45 C246.801,221.576,242.364,221.576,237.925,221.576c-0.014,0-0.014,1.854,0,1.854c5.66,0,11.32,0,16.983,0 c0.008,0,0.008-0.875,0.008-0.926c0-11.848,0-23.696,0-35.541c0-0.051,0-0.933-0.008-0.933c-13.73,0-26.685,0.454-39.683-4.874 c-19.141-7.851-30.725-26.894-33.552-46.687c-3.259-22.814,10.471-44.18,29.637-55.116c13.423-7.656,28.764-6.614,43.598-6.614 c0.008,0,0.008-0.882,0.008-0.928c0-11.847,0-23.693,0-35.541c0-0.047,0-0.926-0.008-0.926c-25.872,0-48.894,2.133-70.865,17.423 c-22.715,15.805-37.73,43.687-38.257,71.366c-1.01,53.581,37.239,98.3,92.139,99.297 C237.928,223.43,237.951,221.58,237.925,221.576z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M255.806,35.372v37.34h-17.881 c-32.084,0-55.757,25.778-55.757,55.489c0,31.827,24.196,57.858,56.277,57.858h17.36v37.345h-17.881 c-51.549,0-93.095-41.813-93.095-94.937c0-50.759,41.546-93.095,93.095-93.095H255.806z"/> <g opacity="0.58"> <path fill="#959595" d="M255.804,35.372c0,7.067,0,14.141,0,21.208c0,4.292,0,8.585,0,12.877c0,4.221-1.189,3.102-5.37,3.102 c-25.938,0-48.37,5.424-61.982,29.814c-7.36,13.178-7.582,28.729-3.896,42.938c6.78,26.133,31.276,40.905,57.061,40.905 c4.229,0,8.454,0,12.68,0c2.545,0,1.508,2.578,1.508,4.753c0,9.729,0,19.457,0,29.183c0,6.014-11.321,3.097-16.318,3.097 c-13.162,0-25.657-2.425-37.853-7.362c-61.693-24.989-73.79-108.366-28.4-154.018c22.844-22.98,51.972-26.343,82.573-26.343 c0.007,0,0.007-0.311,0-0.311c-28.865,0-54.301,2.916-77.636,21.874c-21.095,17.145-33.342,44.361-33.342,71.379 c0,27.65,11.61,53.434,31.964,72.043c22.492,20.551,50.142,23.047,79.014,23.047c0.007,0,0.007-0.146,0.007-0.153 c0-12.445,0-24.896,0-37.345c0-0.008,0-0.152-0.007-0.152c-13.965,0-27.232,0.59-40.438-4.896 c-18.729-7.785-30.051-26.59-32.806-45.995c-3.406-24.014,10.625-46.438,31.577-56.969c12.879-6.474,27.724-5.179,41.667-5.179 c0.007,0,0.007-0.147,0.007-0.155c0-12.448,0-24.894,0-37.34C255.813,35.195,255.804,35.195,255.804,35.372z"/> </g> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/dc_192.svg��������������������������������������������������������0000644�0001750�0000144�00000034067�15104114162�017557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="192px" height="192px" viewBox="0 0 192 192" enable-background="new 0 0 192 192" xml:space="preserve"> <g> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="7.5474" y1="96.6719" x2="184.4063" y2="96.6719"> <stop offset="0" style="stop-color:#F05A28"/> <stop offset="0.9831" style="stop-color:#930500"/> </linearGradient> <path fill="url(#SVGID_1_)" d="M184.406,163.877c0,11.723-9.504,21.223-21.224,21.223H28.771c-11.721,0-21.223-9.5-21.223-21.223 V29.467c0-11.721,9.502-21.223,21.223-21.223h134.412c11.72,0,21.224,9.502,21.224,21.223V163.877z"/> <radialGradient id="SVGID_2_" cx="121.6416" cy="156.0918" r="133.0283" gradientTransform="matrix(1 0 0 0.4883 0 79.8703)" gradientUnits="userSpaceOnUse"> <stop offset="0.4444" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.9215" style="stop-color:#FFFFFF;stop-opacity:0.4637"/> <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.54"/> </radialGradient> <path opacity="0.58" fill="url(#SVGID_2_)" d="M184.406,163.877c0,11.723-9.504,21.223-21.224,21.223H28.771 c-11.721,0-21.223-9.5-21.223-21.223V29.467c0-11.721,9.502-21.223,21.223-21.223h134.412c11.72,0,21.224,9.502,21.224,21.223 V163.877z"/> <g opacity="0.49"> <path fill="#FFFFFF" d="M28.771,182.328c-15.179-1.025-18.922-12.997-18.922-25.764c0-11.887,0-23.772,0-35.659 c0-27.727,0-55.451,0-83.176c0-12.14,2.138-23.626,16.357-26.539c6.284-1.286,13.783-0.172,20.117-0.172 c29.169,0,58.339,0,87.508,0c17.414,0,48.273-5.445,48.273,20.629c0,24.837,0,49.672,0,74.507c0,13.829,0,27.657,0,41.488 c0,8.292,1.243,17.687-2.585,25.301c-5.046,10.049-16.221,9.385-25.599,9.385c-12.442,0-24.881,0-37.323,0 C87.322,182.328,58.047,182.328,28.771,182.328c-0.008,0-0.008,0.956,0,0.956c44.391,0,88.778,0,133.169,0 c23.385,0,20.177-23.869,20.177-39.697c0-29.305,0-58.611,0-87.915c0-15.483,4.946-45.61-19.076-45.61 c-21.719,0-43.438,0-65.162,0c-22.848,0-45.698,0-68.548,0c-23.659,0-19.49,26.997-19.49,42.585c0,28.343,0,56.684,0,85.028 c0,16.47-4.947,43.997,18.931,45.609C28.756,183.281,28.799,182.329,28.771,182.328z"/> </g> <path fill="none" stroke="#BE1E2D" stroke-width="0.25" stroke-miterlimit="1" d="M184.406,163.877 c0,11.723-9.504,21.223-21.224,21.223H28.771c-11.721,0-21.223-9.5-21.223-21.223V29.467c0-11.721,9.502-21.223,21.223-21.223 h134.412c11.72,0,21.224,9.502,21.224,21.223V163.877z"/> <g opacity="0.58"> <path fill="#0D003B" d="M184.4,162.727c-0.97,15.698-13.09,21.18-26.786,21.18c-11.291,0-22.578,0-33.87,0 c-28.221,0-56.44,0-84.662,0c-9.816,0-18.489,0.563-26.178-7.129c-6.866-6.868-5.345-17.826-5.345-26.637 c0-28.798,0-57.591,0-86.388C7.559,45.538,1.317,9.44,29.33,9.44c22.85,0,45.7,0,68.548,0c21.724,0,43.443,0,65.162,0 c28.303,0,21.354,39.663,21.354,57.725c0,32.238,0,64.473,0,96.712c0,1.354,0.022,1.354,0.022,0c0-44.389,0-88.777,0-133.167 c0-12.894-7.839-22.829-21.234-23.662c-6.247-0.388-12.646,0-18.902,0c-29.25,0-58.498,0-87.746,0c-18.251,0-49-4.762-49,22.419 c0,20.5,0,41.003,0,61.505c0,23.888,0,47.775,0,71.661c0,12.894,7.84,22.832,21.235,23.666c6.249,0.385,12.647,0,18.904,0 c27.63,0,55.261,0,82.892,0c18.829,0,52.147,6.028,53.845-21.271C184.454,164.313,184.368,163.286,184.4,162.727z"/> </g> </g> <g> <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="41.9238" y1="168.0186" x2="41.9238" y2="27.2324"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_3_)" d="M0.375,168.019v-27.961h13.39c24.023,0,41.745-19.297,41.745-41.544 c0-23.83-18.114-43.324-42.139-43.324H0.375V27.232h13.39c38.595,0,69.707,31.304,69.707,71.084c0,38-31.112,69.702-69.707,69.702 H0.375z"/> <g opacity="0.51"> <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="41.9238" y1="168.0186" x2="41.9238" y2="27.2324"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_4_)" d="M0.375,168.019v-27.961h13.39c24.023,0,41.745-19.297,41.745-41.544 c0-23.83-18.114-43.324-42.139-43.324H0.375V27.232h13.39c38.595,0,69.707,31.304,69.707,71.084c0,38-31.112,69.702-69.707,69.702 H0.375z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="41.9238" y1="27.2319" x2="41.9238" y2="168.019"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_5_)" d="M0.375,168.019v-27.961h13.39c24.023,0,41.745-19.297,41.745-41.544 c0-23.83-18.114-43.324-42.139-43.324H0.375V27.232h13.39c38.595,0,69.707,31.304,69.707,71.084c0,38-31.112,69.702-69.707,69.702 H0.375z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M1.056,167.345c0-5.379,0-10.758,0-16.14c0-3.001,0-5.998,0-8.997c0-1.861,3.942-0.778,6.353-0.778 c20.253,0,37.546-7.313,45.917-26.979c4.557-10.707,3.401-23.95-0.694-34.499C45.113,60.594,26.329,53.821,7.209,53.821 c-1.344,0-6.154,0.172-6.154,0.016c0-2.655,0-5.309,0-7.964c0-3.69,0-7.378,0-11.069c0-1.854-0.358-6.204,0.35-6.204 c18.097,0,34.425,1.217,50.205,11.194c17.736,11.209,28.248,30.813,30.771,51.267c3.119,25.31-9.877,49.743-30.304,63.958 C36.6,165.788,19.152,166.65,1.049,166.65c-0.01,0-0.01,1.388,0,1.388c21.179,0,39.83-2.256,56.957-16.077 c16.002-12.915,24.797-33.292,24.797-53.645c0-20.725-8.215-40.01-23.511-54.037C42.771,29.131,22.312,27.211,1.049,27.211 c-0.008,0-0.007,0.658-0.007,0.693c0,8.871,0,17.741,0,26.611c0,0.035-0.001,0.695,0.007,0.695 c10.282,0,19.976-0.339,29.708,3.653c14.332,5.875,23.006,20.138,25.122,34.956c2.44,17.084-7.838,33.081-22.189,41.264 c-10.048,5.732-21.531,4.953-32.64,4.953c-0.008,0-0.007,0.66-0.007,0.698c0,8.869,0,17.74,0,26.61 C1.042,168.129,1.056,168.129,1.056,167.345z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M0.375,168.019v-27.961h13.39 c24.023,0,41.745-19.297,41.745-41.544c0-23.83-18.114-43.324-42.139-43.324H0.375V27.232h13.39 c38.595,0,69.707,31.304,69.707,71.084c0,38-31.112,69.702-69.707,69.702H0.375z"/> <g opacity="0.58"> <path fill="#959595" d="M0.376,168.019c0-5.292,0-10.586,0-15.88c0-3.217,0-6.429,0-9.643c0-3.162,0.892-2.321,4.023-2.321 c19.418,0,36.215-4.063,46.41-22.324c5.507-9.866,5.675-21.509,2.914-32.149C48.647,66.134,30.306,55.075,11,55.075 c-3.164,0-6.327,0-9.491,0c-1.905,0-1.132-1.932-1.132-3.561c0-7.282,0-14.564,0-21.847c0-4.502,8.479-2.32,12.222-2.32 c9.851,0,19.211,1.817,28.341,5.514c46.192,18.708,55.248,81.138,21.266,115.316c-17.107,17.209-38.917,19.727-61.83,19.727 c-0.001,0-0.001,0.23,0,0.23c21.614,0,40.662-2.18,58.128-16.377c15.797-12.837,24.969-33.213,24.969-53.44 c0-20.705-8.695-40.011-23.937-53.941C42.695,28.982,21.996,27.114,0.375,27.114c0,0,0,0.112,0,0.118c0,9.319,0,18.638,0,27.958 c0,0.006,0,0.116,0,0.116c10.457,0,20.389-0.441,30.276,3.667c14.029,5.829,22.502,19.911,24.564,34.439 c2.551,17.976-7.953,34.765-23.641,42.653c-9.642,4.848-20.757,3.879-31.199,3.879c0,0,0,0.108,0,0.114c0,9.32,0,18.643,0,27.961 C0.375,168.147,0.376,168.147,0.376,168.019z"/> </g> </g> <g> <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="150.1055" y1="168.0186" x2="150.1055" y2="27.2324"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_6_)" d="M191.651,27.232V55.19h-13.389c-24.022,0-41.747,19.301-41.747,41.547 c0,23.83,18.116,43.321,42.137,43.321h12.999v27.961h-13.389c-38.597,0-69.704-31.307-69.704-71.083 c0-38.005,31.107-69.704,69.704-69.704H191.651z"/> <g opacity="0.51"> <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="150.1055" y1="168.0186" x2="150.1055" y2="27.2324"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_7_)" d="M191.651,27.232V55.19h-13.389c-24.022,0-41.747,19.301-41.747,41.547 c0,23.83,18.116,43.321,42.137,43.321h12.999v27.961h-13.389c-38.597,0-69.704-31.307-69.704-71.083 c0-38.005,31.107-69.704,69.704-69.704H191.651z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="150.1055" y1="27.2319" x2="150.1055" y2="168.019"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_8_)" d="M191.651,27.232V55.19h-13.389c-24.022,0-41.747,19.301-41.747,41.547 c0,23.83,18.116,43.321,42.137,43.321h12.999v27.961h-13.389c-38.597,0-69.704-31.307-69.704-71.083 c0-38.005,31.107-69.704,69.704-69.704H191.651z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M178.263,166.65c-48.942-0.886-82.327-50.49-63.35-96.44c8.014-19.411,25.537-33.505,45.428-39.253 c7.937-2.294,16.102-2.358,24.28-2.358c1.351,0,6.348-0.169,6.348-0.016c0,3.264,0,6.53,0,9.795 c0,2.458,0.374,15.442-0.348,15.442c-7.66,0-15.264-0.365-22.79,1.292c-18.853,4.152-31.806,22.351-31.996,41.135 c-0.143,14.399,5.813,27.406,16.989,36.501c7.254,5.91,16.937,8.682,26.178,8.682c3.103,0,6.209,0,9.313,0 c3.356,0,2.654-0.638,2.654,3.108c0,6.763,0,13.519,0,20.278c0,2.933,0.102,1.834-2.738,1.834 C184.908,166.65,181.587,166.65,178.263,166.65c-0.011,0-0.011,1.388,0,1.388c4.237,0,8.476,0,12.716,0 c0.006,0,0.006-0.655,0.006-0.693c0-8.87,0-17.741,0-26.61c0-0.038,0-0.698-0.006-0.698c-10.28,0-19.979,0.34-29.712-3.649 c-14.331-5.878-23.005-20.137-25.121-34.956c-2.439-17.082,7.84-33.079,22.19-41.268c10.05-5.733,21.536-4.953,32.643-4.953 c0.006,0,0.006-0.66,0.006-0.695c0-8.87,0-17.74,0-26.611c0-0.036,0-0.693-0.006-0.693c-19.372,0-36.608,1.597-53.06,13.045 c-17.007,11.834-28.25,32.71-28.645,53.435c-0.756,40.118,27.883,73.601,68.988,74.347 C178.265,168.038,178.282,166.654,178.263,166.65z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M191.651,27.232V55.19h-13.389 c-24.022,0-41.747,19.301-41.747,41.547c0,23.83,18.116,43.321,42.137,43.321h12.999v27.961h-13.389 c-38.597,0-69.704-31.307-69.704-71.083c0-38.005,31.107-69.704,69.704-69.704H191.651z"/> <g opacity="0.58"> <path fill="#959595" d="M191.649,27.232c0,5.292,0,10.587,0,15.879c0,3.214,0,6.428,0,9.642c0,3.161-0.891,2.322-4.021,2.322 c-19.421,0-36.216,4.062-46.408,22.323c-5.511,9.868-5.678,21.51-2.917,32.15c5.077,19.566,23.417,30.627,42.724,30.627 c3.166,0,6.33,0,9.493,0c1.906,0,1.13,1.931,1.13,3.558c0,7.285,0,14.569,0,21.852c0,4.503-8.477,2.319-12.219,2.319 c-9.854,0-19.21-1.816-28.341-5.513c-46.193-18.711-55.25-81.138-21.265-115.32c17.104-17.207,38.913-19.724,61.826-19.724 c0.004,0,0.004-0.233,0-0.233c-21.613,0-40.657,2.183-58.129,16.377c-15.796,12.837-24.965,33.215-24.965,53.444 c0,20.703,8.693,40.008,23.933,53.941c16.841,15.388,37.543,17.257,59.161,17.257c0.004,0,0.004-0.109,0.004-0.115 c0-9.318,0-18.641,0-27.961c0-0.006,0-0.114-0.004-0.114c-10.457,0-20.391,0.441-30.278-3.666 c-14.023-5.83-22.501-19.909-24.563-34.439c-2.552-17.979,7.955-34.769,23.643-42.654c9.643-4.848,20.757-3.878,31.198-3.878 c0.004,0,0.004-0.11,0.004-0.116c0-9.32,0-18.639,0-27.958C191.655,27.1,191.649,27.1,191.649,27.232z"/> </g> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/dc_128.svg��������������������������������������������������������0000644�0001750�0000144�00000034031�15104114162�017545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve"> <g> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="5.1636" y1="63.4834" x2="122.8584" y2="63.4834"> <stop offset="0" style="stop-color:#F05A28"/> <stop offset="0.9831" style="stop-color:#930500"/> </linearGradient> <path fill="url(#SVGID_1_)" d="M122.858,108.208c0,7.8-6.325,14.122-14.124,14.122H19.287c-7.8,0-14.123-6.322-14.123-14.122 V18.761c0-7.801,6.323-14.124,14.123-14.124h89.448c7.799,0,14.124,6.323,14.124,14.124V108.208z"/> <radialGradient id="SVGID_2_" cx="81.0898" cy="103.0264" r="88.5272" gradientTransform="matrix(1 0 0 0.4883 0 52.7174)" gradientUnits="userSpaceOnUse"> <stop offset="0.4444" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.9215" style="stop-color:#FFFFFF;stop-opacity:0.4637"/> <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.54"/> </radialGradient> <path opacity="0.58" fill="url(#SVGID_2_)" d="M122.858,108.208c0,7.8-6.325,14.122-14.124,14.122H19.287 c-7.8,0-14.123-6.322-14.123-14.122V18.761c0-7.801,6.323-14.124,14.123-14.124h89.448c7.799,0,14.124,6.323,14.124,14.124V108.208 z"/> <g opacity="0.49"> <path fill="#FFFFFF" d="M19.287,120.485c-10.101-0.682-12.592-8.649-12.592-17.145c0-7.911,0-15.821,0-23.731 c0-18.451,0-36.9,0-55.351c0-8.079,1.423-15.722,10.885-17.661c4.182-0.856,9.173-0.115,13.387-0.115c19.412,0,38.822,0,58.234,0 c11.588,0,32.125-3.624,32.125,13.728c0,16.528,0,33.056,0,49.583c0,9.203,0,18.404,0,27.609c0,5.519,0.828,11.77-1.72,16.837 c-3.358,6.688-10.795,6.245-17.036,6.245c-8.28,0-16.558,0-24.838,0C58.251,120.485,38.77,120.485,19.287,120.485 c-0.005,0-0.005,0.637,0,0.637c29.541,0,59.079,0,88.621,0c15.562,0,13.427-15.885,13.427-26.419c0-19.5,0-39.003,0-58.504 c0-10.303,3.292-30.353-12.694-30.353c-14.454,0-28.908,0-43.363,0c-15.206,0-30.412,0-45.618,0 c-15.744,0-12.971,17.966-12.971,28.34c0,18.861,0,37.722,0,56.583c0,10.961-3.292,29.279,12.599,30.353 C19.277,121.12,19.306,120.486,19.287,120.485z"/> </g> <path fill="none" stroke="#BE1E2D" stroke-width="0.25" stroke-miterlimit="1" d="M122.858,108.208 c0,7.8-6.325,14.122-14.124,14.122H19.287c-7.8,0-14.123-6.322-14.123-14.122V18.761c0-7.801,6.323-14.124,14.123-14.124h89.448 c7.799,0,14.124,6.323,14.124,14.124V108.208z"/> <g opacity="0.58"> <path fill="#0D003B" d="M122.854,107.44c-0.646,10.447-8.711,14.096-17.826,14.096c-7.514,0-15.025,0-22.539,0 c-18.78,0-37.56,0-56.341,0c-6.532,0-12.304,0.374-17.42-4.744c-4.569-4.57-3.557-11.863-3.557-17.727c0-19.163,0-38.325,0-57.489 c0-12.121-4.154-36.144,14.487-36.144c15.206,0,30.412,0,45.618,0c14.455,0,28.909,0,43.363,0 c18.834,0,14.211,26.395,14.211,38.415c0,21.454,0,42.906,0,64.361c0,0.899,0.015,0.899,0.015,0c0-29.54,0-59.081,0-88.621 c0-8.58-5.217-15.192-14.131-15.746c-4.158-0.258-8.416,0-12.579,0c-19.465,0-38.929,0-58.393,0 c-12.145,0-32.607-3.169-32.607,14.919c0,13.642,0,27.287,0,40.93c0,15.896,0,31.794,0,47.688c0,8.581,5.218,15.194,14.131,15.749 c4.158,0.257,8.417,0,12.58,0c18.387,0,36.775,0,55.163,0c12.53,0,34.702,4.012,35.832-14.154 C122.891,108.497,122.833,107.813,122.854,107.44z"/> </g> </g> <g> <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="28.0396" y1="110.9629" x2="28.0395" y2="17.2734"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_3_)" d="M0.39,110.963V92.355h8.911c15.987,0,27.78-12.842,27.78-27.646 c0-15.858-12.054-28.831-28.042-28.831H0.39V17.273h8.911c25.684,0,46.388,20.832,46.388,47.305 c0,25.288-20.704,46.385-46.388,46.385H0.39z"/> <g opacity="0.51"> <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="28.0396" y1="110.9629" x2="28.0395" y2="17.2734"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_4_)" d="M0.39,110.963V92.355h8.911c15.987,0,27.78-12.842,27.78-27.646 c0-15.858-12.054-28.831-28.042-28.831H0.39V17.273h8.911c25.684,0,46.388,20.832,46.388,47.305 c0,25.288-20.704,46.385-46.388,46.385H0.39z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="28.0396" y1="17.2729" x2="28.0395" y2="110.9634"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_5_)" d="M0.39,110.963V92.355h8.911c15.987,0,27.78-12.842,27.78-27.646 c0-15.858-12.054-28.831-28.042-28.831H0.39V17.273h8.911c25.684,0,46.388,20.832,46.388,47.305 c0,25.288-20.704,46.385-46.388,46.385H0.39z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M0.843,110.515c0-3.579,0-7.159,0-10.74c0-1.997,0-3.992,0-5.988c0-1.238,2.623-0.518,4.227-0.518 c13.478,0,24.986-4.866,30.556-17.953c3.033-7.125,2.264-15.938-0.462-22.958C30.162,39.475,17.662,34.968,4.938,34.968 c-0.895,0-4.095,0.114-4.095,0.01c0-1.767,0-3.534,0-5.3c0-2.456,0-4.91,0-7.366c0-1.234-0.239-4.128,0.233-4.128 c12.043,0,22.909,0.81,33.41,7.449c11.803,7.46,18.798,20.505,20.478,34.117c2.076,16.842-6.573,33.103-20.167,42.562 c-10.301,7.168-21.912,7.741-33.958,7.741c-0.007,0-0.007,0.924,0,0.924c14.094,0,26.506-1.501,37.903-10.7 c10.649-8.594,16.502-22.154,16.502-35.698c0-13.792-5.467-26.625-15.646-35.96C28.604,18.537,14.989,17.259,0.839,17.259 c-0.005,0-0.004,0.438-0.004,0.461c0,5.903,0,11.806,0,17.709c0,0.023-0.001,0.462,0.004,0.462c6.842,0,13.293-0.226,19.77,2.431 c9.538,3.91,15.31,13.401,16.718,23.262C38.95,72.954,32.11,83.599,22.56,89.046c-6.688,3.814-14.329,3.296-21.721,3.296 c-0.005,0-0.004,0.439-0.004,0.464c0,5.902,0,11.806,0,17.709C0.834,111.036,0.843,111.036,0.843,110.515z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M0.39,110.963V92.355h8.911 c15.987,0,27.78-12.842,27.78-27.646c0-15.858-12.054-28.831-28.042-28.831H0.39V17.273h8.911 c25.684,0,46.388,20.832,46.388,47.305c0,25.288-20.704,46.385-46.388,46.385H0.39z"/> <g opacity="0.58"> <path fill="#959595" d="M0.391,110.963c0-3.522,0-7.044,0-10.567c0-2.141,0-4.278,0-6.417c0-2.104,0.594-1.545,2.677-1.545 c12.923,0,24.101-2.703,30.885-14.855c3.665-6.566,3.777-14.314,1.939-21.395C32.514,43.162,20.308,35.802,7.46,35.802 c-2.105,0-4.21,0-6.316,0c-1.268,0-0.753-1.286-0.753-2.37c0-4.846,0-9.692,0-14.539c0-2.997,5.643-1.544,8.134-1.544 c6.556,0,12.785,1.208,18.86,3.669c30.739,12.45,36.766,53.995,14.151,76.74C30.152,109.21,15.638,110.887,0.39,110.887 c-0.001,0-0.001,0.152,0,0.152c14.384,0,27.059-1.449,38.683-10.898c10.513-8.542,16.616-22.102,16.616-35.563 c0-13.778-5.787-26.626-15.929-35.896C28.553,18.438,14.778,17.194,0.39,17.194c0,0,0,0.075,0,0.079c0,6.202,0,12.403,0,18.605 c0,0.004,0,0.077,0,0.077c6.959,0,13.568-0.293,20.148,2.44c9.336,3.879,14.975,13.251,16.347,22.919 c1.698,11.962-5.292,23.136-15.732,28.384c-6.417,3.226-13.814,2.581-20.763,2.581c0,0,0,0.072,0,0.076 C0.39,98.558,0.39,104.762,0.391,110.963C0.39,111.049,0.391,111.049,0.391,110.963z"/> </g> </g> <g> <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="100.0313" y1="110.9629" x2="100.0312" y2="17.2734"> <stop offset="0" style="stop-color:#C6C6C6"/> <stop offset="0.618" style="stop-color:#B1B1B1"/> <stop offset="0.6292" style="stop-color:#BEBEBE"/> <stop offset="0.9831" style="stop-color:#B8B8B8"/> </linearGradient> <path fill="url(#SVGID_6_)" d="M127.679,17.273v18.605h-8.909c-15.986,0-27.781,12.844-27.781,27.648 c0,15.858,12.057,28.829,28.041,28.829h8.649v18.607h-8.909c-25.685,0-46.387-20.834-46.387-47.304 c0-25.292,20.702-46.386,46.387-46.386H127.679z"/> <g opacity="0.51"> <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="100.0313" y1="110.9629" x2="100.0312" y2="17.2734"> <stop offset="0" style="stop-color:#A6A6A6"/> <stop offset="0.5" style="stop-color:#838383"/> <stop offset="0.5378" style="stop-color:#898989"/> <stop offset="0.6652" style="stop-color:#999999"/> <stop offset="0.8086" style="stop-color:#A3A3A3"/> <stop offset="1" style="stop-color:#A6A6A6"/> </linearGradient> <path fill="url(#SVGID_7_)" d="M127.679,17.273v18.605h-8.909c-15.986,0-27.781,12.844-27.781,27.648 c0,15.858,12.057,28.829,28.041,28.829h8.649v18.607h-8.909c-25.685,0-46.387-20.834-46.387-47.304 c0-25.292,20.702-46.386,46.387-46.386H127.679z"/> </g> <g opacity="0.7"> <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="100.0313" y1="17.2729" x2="100.0312" y2="110.9634"> <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.77"/> <stop offset="0.2033" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3448" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.3462" style="stop-color:#FFFFFF;stop-opacity:0.65"/> <stop offset="0.511" style="stop-color:#FFFFFF;stop-opacity:0"/> <stop offset="0.5247" style="stop-color:#E1E1E1;stop-opacity:0.0045"/> <stop offset="0.5464" style="stop-color:#B8B8B8;stop-opacity:0.0116"/> <stop offset="0.5708" style="stop-color:#929292;stop-opacity:0.0196"/> <stop offset="0.5974" style="stop-color:#727272;stop-opacity:0.0283"/> <stop offset="0.6268" style="stop-color:#565656;stop-opacity:0.0379"/> <stop offset="0.6599" style="stop-color:#404040;stop-opacity:0.0487"/> <stop offset="0.6986" style="stop-color:#2F2F2F;stop-opacity:0.0614"/> <stop offset="0.7465" style="stop-color:#242424;stop-opacity:0.0771"/> <stop offset="0.8136" style="stop-color:#1D1D1D;stop-opacity:0.099"/> <stop offset="1" style="stop-color:#1B1B1B;stop-opacity:0.16"/> </linearGradient> <path fill="url(#SVGID_8_)" d="M127.679,17.273v18.605h-8.909c-15.986,0-27.781,12.844-27.781,27.648 c0,15.858,12.057,28.829,28.041,28.829h8.649v18.607h-8.909c-25.685,0-46.387-20.834-46.387-47.304 c0-25.292,20.702-46.386,46.387-46.386H127.679z"/> </g> <g opacity="0.49"> <path fill="#FFFFFF" d="M118.77,110.053c-32.57-0.59-54.786-33.601-42.157-64.179c5.333-12.917,16.995-22.296,30.23-26.122 c5.282-1.526,10.715-1.569,16.158-1.569c0.898,0,4.224-0.113,4.224-0.01c0,2.172,0,4.345,0,6.518 c0,1.636,0.249,10.277-0.231,10.277c-5.098,0-10.156-0.244-15.166,0.859C99.281,38.59,90.661,50.701,90.535,63.201 c-0.095,9.582,3.868,18.238,11.306,24.29c4.827,3.933,11.271,5.777,17.42,5.777c2.065,0,4.133,0,6.198,0 c2.233,0,1.766-0.424,1.766,2.069c0,4.499,0,8.996,0,13.494c0,1.952,0.068,1.221-1.82,1.221 C123.192,110.053,120.981,110.053,118.77,110.053c-0.007,0-0.007,0.924,0,0.924c2.82,0,5.64,0,8.462,0 c0.004,0,0.004-0.438,0.004-0.462c0-5.903,0-11.807,0-17.709c0-0.024,0-0.464-0.004-0.464c-6.841,0-13.295,0.226-19.771-2.429 c-9.537-3.912-15.311-13.4-16.718-23.263c-1.624-11.367,5.217-22.014,14.767-27.462c6.688-3.815,14.331-3.296,21.723-3.296 c0.004,0,0.004-0.439,0.004-0.462c0-5.903,0-11.806,0-17.709c0-0.023,0-0.461-0.004-0.461c-12.892,0-24.361,1.063-35.31,8.682 C80.604,33.816,73.122,47.708,72.86,61.5c-0.504,26.697,18.555,48.979,45.909,49.477 C118.771,110.977,118.782,110.055,118.77,110.053z"/> </g> <path fill="none" stroke="#CCCCCC" stroke-width="0.5878" stroke-miterlimit="1" d="M127.679,17.273v18.605h-8.909 c-15.986,0-27.781,12.844-27.781,27.648c0,15.858,12.057,28.829,28.041,28.829h8.649v18.607h-8.909 c-25.685,0-46.387-20.834-46.387-47.304c0-25.292,20.702-46.386,46.387-46.386H127.679z"/> <g opacity="0.58"> <path fill="#959595" d="M127.678,17.273c0,3.522,0,7.045,0,10.567c0,2.14,0,4.278,0,6.417c0,2.104-0.593,1.545-2.676,1.545 c-12.924,0-24.101,2.703-30.884,14.855c-3.667,6.567-3.778,14.314-1.941,21.395c3.379,13.021,15.585,20.382,28.432,20.382 c2.107,0,4.213,0,6.318,0c1.269,0,0.751,1.284,0.751,2.367c0,4.849,0,9.695,0,14.541c0,2.997-5.641,1.545-8.131,1.545 c-6.558,0-12.785-1.209-18.861-3.668C69.946,94.767,63.92,53.222,86.535,30.475c11.383-11.45,25.896-13.125,41.144-13.125 c0.003,0,0.003-0.155,0-0.155c-14.383,0-27.056,1.453-38.682,10.899c-10.513,8.543-16.615,22.104-16.615,35.566 c0,13.777,5.786,26.624,15.927,35.896c11.207,10.24,24.984,11.483,39.37,11.483c0.003,0,0.003-0.072,0.003-0.076 c0-6.201,0-12.405,0-18.607c0-0.004,0-0.076-0.003-0.076c-6.957,0-13.568,0.294-20.148-2.439 c-9.334-3.88-14.975-13.249-16.346-22.918c-1.698-11.965,5.293-23.138,15.733-28.386c6.416-3.226,13.813-2.581,20.761-2.581 c0.003,0,0.003-0.073,0.003-0.077c0-6.202,0-12.404,0-18.605C127.682,17.185,127.678,17.185,127.678,17.273z"/> </g> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/dc.ai�������������������������������������������������������������0000644�0001750�0000144�00001302310�15104114162�016744� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.5 % 1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R 120 0 R]/Order 121 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R 120 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 42532/Subtype/XML/Type/Metadata>>stream <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:11:12 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> <dc:title> <rdf:Alt> <rdf:li xml:lang="x-default">v4_3</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"> <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool> <xmp:CreateDate>2009-11-23T23:45:51+03:00</xmp:CreateDate> <xmp:ModifyDate>2009-11-26T01:53+02:00</xmp:ModifyDate> <xmp:MetadataDate>2009-11-26T01:53+02:00</xmp:MetadataDate> <xmp:Thumbnails> <rdf:Alt> <rdf:li rdf:parseType="Resource"> <xmpGImg:width>256</xmpGImg:width> <xmpGImg:height>256</xmpGImg:height> <xmpGImg:format>JPEG</xmpGImg:format> <xmpGImg:image>/9j/4AAQSkZJRgABAgEB0wHTAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAB0wAAAAEA AQHTAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhtR1TTN MtWutRu4bK1T7U9xIsSD/ZOQMaSATyYNqX59/llZOyLqT3rqaEWsEsi/Q5VUb6GyQi3DTT7kkm/5 yX8lqf3FneuPF4+H6ueS4B3r+Wn3fchD/wA5OeXqmmlzEdiXYf8AMrD4Y71/LT7vubT/AJyc8uFh z0yZV7kMxP3GIY+GO9fy0+77lUf85NeUajlY3QXuQCTT/gRj4Y71/LT7vuVf+hmPI/8Ayy3v/Isf 1weH5r+Wn3fc7/oZnyN/yy3v/Isf1x8PzX8tPu+53/QzPkb/AJZb3/kWP64+H5r+Wn3fc7/oZryN /wAst7/yLH9cfD81/LT7vua/6Ga8i/8ALLe/8ix/XHw/Nfy0+77nf9DNeRf+Wa9/5Fj+uHw/Nfy0 +77nf9DN+Rf+Wa9/5Fj+uPh+a/lp933O/wChm/In/LNe/wDIsf1x8PzX8tPu+53/AEM55E/5Zr3/ AJFj+uPh+a/lp933Nf8AQznkT/lmvf8AkWP64+H5r+Wn3fc7/oZzyJ/yzXv/ACLH9cfD81/LT7vu d/0M75D/AOWa9/5Fj+uPh+a/lp933O/6Gd8h/wDLPe/8ix/XHwvNfy0+77nf9DPeQv8Alnvf+RY/ rj4Xmv5afd9zX/Qz3kL/AJZ7z/kWP64+F5r+Wn3fcpN/zlB5LDHjZ3JXsSCD93E4+F5r+Wn3fc1/ 0ND5N/5Yrj8f+acfC81/LT7vuVIf+coPIpP762u0FeqJz2+nhj4Xmv5afd9zKfLv51/lxr0iQ22q pb3MhokF2PRY/Sfh/HInGWEsUo8wzhWV1DKQysKqw3BB7jINbeKuxV2KuxV2KvOfzB/NC503UV8s eVoFv/M0wBkZ94LRG25y06t4LjKQgLk5Wm0pyHyYJJ5YsJLr6/5qu5vMutdWM7kW8RPVY0HwgDwA pmsza48h9jvsGiAGwofj8bo1LiKAcbO0trRR0EMKL+JBzClmkXOjp4jvaN/dn9v/AIVf6ZDjLPwo rRqN4Ojj6VU/rGHjKnFFx1a+/nT/AJFx/wDNOS8QsfAj+CVp1e//AJ0/5Fx/804fEK+BH8ErTq9/ /On/ACKj/wCacfEK+BH8ErDrF/8Azp/yKj/5px8Qr4EfwSsOsah/On/IqL/mnD4hR4EfwStOs6h/ On/IqL/mnD4hXwI/glYdZ1D+dP8AkVF/zTh8Qr4EfwStOtaj/On/ACKi/wCacfEK+BH8ErDrWo/z p/yKi/5px4yvgR/BK063qP8AOn/IqL/mnDxlHgR/BK063qP86f8AIqL/AJpw8ZXwI/glYdc1L+dP +RUX/NOPGV8CP4JWnXNS/nT/AJFRf804eMr4EfwSsOu6l/On/IqL/mnDxlfAj+CVp13U/wCdP+RM X/NGPGUeBH8ErG13UiCOafRFEP8AjXDxlfBj+CVFtX1BhvIPoRB+oY8RT4UVM6rf/wC/f+FX+mPE U+HFoavqCnaUfSiH9Yw8RQcUVZPMd+u0kcEynqskKUI/2IXJCZYHTx8/msuG8n6qpj1XRoomb/j4 tgEYE9/h4n8Tl0M5DRLSnob96aaB5r8yfl4Y7qxu5PMHkpmAuLRzyntgTu0ZPSn8p2+WZmPMJ7H5 us1GiB5CpPoPRNa0zW9JtdW0ydbixvEEkEq9wdiCOzKdiOx2yZFOolEg0UbgQ7FXYqx78wPNSeVv KOo6zQNPAnC0jP7U8pCRD5cmBPthAZ44cUgHj3lfTZtJ0p7u7cy67q7G4v7p/t/GdxX57ZpdVqTO V/L3PWabTiIA6D7/ANn3oo5hOcsOFK04oWHCqw4qsOSVacULGxVYcKrThVYcKrDihYcKrTiqxsIQ tOFVhxVYcKrDhQtOFKw4oWHCq04qsOFVhwqr2OoTWcrMoDxSDhPA32XQ9Qf65IGmucBIMw/JTzKf L3nOTyo0hOha8HudJDU/dXSrydK7UEiKQR/MAB1ObHFk4o+YdF2jpq9Q/H4+59BZN07sVQVxrOnW 9w1vLIfWUBmRUdyAeh+FTirz3814bzzGNBsNOgkuLCC9a81B+DJxMMZWFSHClg5kPSvTK83FwER5 udoJ44TuZpKrvSdSaY0gYItFQmg+FRQHc+2aeWjy3y+530O08AH1fYf1IOTT7tOqb+AZT+o5E6XI OjbHtHAf4goS29xGKvGyjxKkDK5Y5DmC5EM8JfTIH4qJyDYsOFVhxVYckq04oWNiqw4VWnCqw4VW HFCw4VWnFVjYQhacKrDiqw4VWHChacKVhxQsOFVpxVaqO7BUUsx6KBUn7skEEgc0bF5d12YVSwnp 1qyMo+9qZMY5Ho48tXiHOQ+aIHkrzM9eNn08ZYh+t8n4E+5q/lHB/O+w/qdL5L85wSafqFlp/LUN KvIbu2HqQkH03V+NedKbGo98uwwlE7uPn1uCYri+w/Hp3Po8eYNLIqJJCP8AjDN/zRmU84jba5hu YVmhblG9eLUI6Gh2ND1GKpNckjV7uhpVYq0/1Tirub/zH78Vb9WT+Y/firjLIRQmoPUGh/Xiqg9n Yyfbtoqn9pVCt/wS0OKpdd+VtFuan0zEx8PiH0k/H/w2VTwQlzDk4tZlh9MikGo+QrlAXspBKB+z 3+7r91cw8mgH8Jdng7aI2mPkxa7sbu1cpPGUINCSNq5g5MMocw7nBqseUek2hTkHIWnFCxsVWHCq 04VWHCqw4oWHCq04qsbCELThVYcVWHCqw4ULThStAJNAKk7ADFBZDovkDXtUYMYjbw92cfEP9jtT /ZEZkQ08jz2dbn7UxQ2HqPl+tm+l/lXo9uA14xuJNiQxJH3Div38syo6eI83VZe1MsuXpHkyez0D SLNOFvbqi+Aov4IFH4ZcIgcnAnklLeRJRiW9ulCsSKR3CrX76YWCrzelORoOmKu5v/MfvxV3NvE4 qjtB/wCOXH/ry/8AJ1sVQF1/x1rv/Vi/4icVdirsVdirsVdirsVUbuztLxOF1EJRSlT9oD54CAdi mMiDY2LDNd8jyRBp9PPqRjcxnqPo/wA/ozAzaIHePyd1pO1yNsm472ISxvG5R1KsOoOa4xINF38Z iQsGwpNgZLDhVacKrDhVYcULDhVacVWNhCFpwqsOKrDhVYcKE00HyxqetThLaMiKvxTEbDxp4/51 y7FhM/c4mq1sMI33l3PU/L3kTSNIVZHUXF3+1Idx9/8AT8cz8eGMeTzmp1uTLzO3cyQUChQAqjZV AoB8gMtcR2KuxV2KuxV2KuxVH6D/AMcuP/Xl/wCTrYql91/x1rv/AFYv+InFXbYq7bFXbYq7bFXb Yq7bFXbYq6uKpD5h8r2upRmSFRHdDcEbBsozYI5BvzczSayeE7bx7nnF9Z3FnO0E6FHXx75qMmMw NF6rBnjljxRQpyDctOFVhwqsOKFhwqtOKrGwhC04VWHFVhwqynyj5IuNXkW4ugYrJaE1qCwP9cy8 Gn4tzydRru0RD0w+r7v2vWLOztLK3W3tYxHGoAoKVNPGmZ4FPOykSbPNW2wodtirtsVdtirtsVdt irtsVdtiqYaD/wAcuP8A15f+TrYql92f9y93/qxf8ROKra4q6uKurirq4q6uKurirq4q6uKuriqT +Y/L8Oq2xIFLpB8DePt8/wDP5VZsQmKLk6XVSwyscuo73l91by20zwyji6GhzTTgYmi9dhyxyREo 8ioHItqw4VWHFCw4VWnFVjYQhacKrDirJ/JflJ9Vuhc3C0s4jU1Gzf19h/DMzT4OLc8nUdpa7g9E Pq+79r1mKKOGJYol4RoKKo/z65sHnF1cVdXFXVxV1cVdXFXVxV1cVdXFXVxVMdB/45cf+tL/AMnW xVbdaMZruS5juXhaUKHULGw+EUB+JTirFfNuo6hod/p1tFP6y3sdw7MyRAqYGhUUonf1jmNqc5xg EOw0GjGfis1SR/4x1bxU+3FP4LmH/KJ7nZHsSP8AOPyVovO92G/ewoy+1a/ryce0R1DVPsSX8Mvs /tTO084aZNQS1hY+O4zJhq8cute9wc3ZuaHSx5b/ALU6hnhnTnC6yL4qa/fmS4CpirsVdirsVdir FvOnl4XcBvbdf38e7gd/9v8Az75janDxixzDseztZ4U6P0H8W85bNQ9WsOFVhxQsOFVpxVY2EIWn CqY+X9Fm1bUEt0FYwR6h9vDb5fdl2DFxnycPXaoYYX/EeT2awsYLG1jtoBREFK0pU+ObUCnkpSJN nmiMKHYq7FXYq2AT0xVKdW81aBpSn63drzHSOMhjkZSA5tuPDOZqItiV/wDnDYIStlZNJ4O5oP4f qyk6mPR2GPsjKeZASeX849YP93ZxJ9Ib9a5D815OQOxh1l9n7VKT849fW3kkEEVU6Ci+BP8AL7Yj UnuZfyPH+cXsWmafd3mm2l2966PcQxysgjioC6BiN17VzLdDIUaTewtBaWqW4cycKku1KksxY9KD qcUK+KvPfzPA/S2hnuIrwV+b22a/tDkPe77sT+P4fpYYc1D0Cw4ULDhSr2WpXllIJIJCpHau2X4t ROHLk4ep0WPL9Q37+rNtC8021+BDcERXPj0U/Pw/V8s22DURye95rV6GeE77x709IIND1zIcJ2Ku xV2KtEKwKsKqRRgehB6jFXl/nHRjp+pM6D9xMeSn3P8AX9dc1WrxcMrHIvT9larjhwn6o/cx45iu 1WHFCw4VWnFVjYQhoKzMFUVZjQAdSThCk1uXrXkjQk07TVmcAzzCvL2PX7z+AGbfDj4I08frNScu Qnp0ZJlriuxV2KuxVD3+oWen2zXN3II4lFanqaeGAmubKMTI0Ny8s80/mXf35e202ttadOY+0w+n +P4Zh5NSeUXe6XsoDfJue5g8skkjl5GLuerMSSfpOY127iMQBQ2CkcWSw4oWT/7xzfL/AI1bJRR1 fWukoU0qzQ9VgiB+YQDNo8Xk+o+9FYsHYq8+/M//AI6uh/8AGK8/4nbZru0OQ97vuxOU/h+lhZzU vQLDhQsOFK04oWq7IwdDxZdwRkgSDYYyiJCjyZz5V8yi7VbK7aky0EUh79gD/DNzptRxij9TyvaG hOE2PoP2MlzKdc7FXYq7FUk826WL/SZKD97F8Sn/AD96fRXKs2PjiQ5Okz+FkEunX3PKGBGx2I6j NK9ksOKrDhVacVWNhCE88naSdQ1ZKj93GRU+BNd/oUE/OmZWlx3K+51naufgx8I5y+7q9gVVVQqi iqAFA6ADoM2bzDeKuxV2KobUtRtdOs5Lu5YLFGK/M+GAmhZZQgZEAcy8U80+ab3XLxnkYraqf3MP ag6E5rsuYzPk9TotFHCO+XekJylzlhwqsOFVhxQsn/3jm+X/ABq2Sijq+uLD/eG2/wCMSf8AERmz DxeT6j71fCwdirz78z/+Orof/GK8/wCJ22a7tDkPe77sTlP4fpYWc1L0Cw4ULDhStOKFhwq6OV4p FkQ0ZemThMxNhry44ziYy5F6b5f1ZdS09ZCazR0WWvU+Dfhv75vcWQTiCHjNRgOKZieiZZY0uxV2 KtOiujI4qjgqw8QRQ4q8g8xWTWmrTxHuxaviakMf+CBzT6mHDMvW9nZuPCO8bfL9iVHKHOWHCq04 qsbCEPTPy500Q2DXLD4nGx93ox/4UJm100Kh73le083HmPdHZmOZDr3Yq7FXYq8j/MTzM2oX5sYH P1S32YDozdf8/wCzMHU5bPCHoeytJwx8Q8zy9zCzmK7hacVWHCqw4VWHFCyf/eOb5f8AGrZKKOr6 4sP94bb/AIxJ/wARGbMPF5PqPvV8LB2KvPvzP/46uh/8Yrz/AInbZru0OQ97vuxOU/h+lhZzUvQL DhQsOFK04oWHCqw4qnvk/U2tdSELH93N8JHap/tofozYaHJR4e90vbGnuIyDmOfuZ9658M2jzjXr nwxV3rnwxV3rnwxVgX5gW4+tR3IFOVOX+yFAP+SZP05ga6OwLvOxcm8o/Fh5zXu/WHCq04q3FE00 yRL9qRgg+bGmSiLNMJy4QSej2PRFW30yFEWisOYHsxqv3LQZuwKeIlIk2Ud658MKHeufDFXeufDF Up806z+j9EuJtuZXio9zt+PT6chklwxJb9Nh8TII97xKR3kdnclnclmY9STuTmpJeyAAFBSOFVpx VYcKrDhVYcULJ/8AeOb5f8atkoo6vriw/wB4bb/jEn/ERmzDxeT6j71fCwdirz78z/8Ajq6H/wAY rz/idtmu7Q5D3u+7E5T+H6WFnNS9AsOFCw4UrTihYcKrDircEpinjkrTiwJp4d8sxy4ZAtOfHxwM e8PTYp/UjRz1ZQT8yN86B4hd6gxV3qDFXeoMVY353jEmnBx1Tf8A4ZQPwJzG1YuBdj2XOs487YAc 1L1Sw4VWnFUXo6c9TgHdSXHzRSw/Vl+nFzDh6+XDhkfL79nrcdI41jHRAFH0Cmbd5Bd6gxV3qDFX eoMVYP8Amben0LS1B2di5/2I3H/DDMTVy2Adz2Njucpdw+954cwXoFhwqtOKrDhVYcKrDihZP/vH N8v+NWyUUdX1xYf7w23/ABiT/iIzZh4vJ9R96vhYOxV59+Z//HV0P/jFef8AE7bNd2hyHvd92Jyn 8P0sLOal6BYcKFhwpWnFCw4VWHFVhySs/wBLnL6bbMepjFfmd832I3AHyeI1MaySH9I/eivUyxpd 6mKu9TFUn80MG0t6jYBiSfZGb+GU6j6C5ehNZo+95y91EO+aW3suEqL3sQx4k8BUW1BBjxJ8NNfK VyLjW4kFOhP3/D/HMrSG8gdb2vGsB94eq+pm2eSd6mKu9TFXepirzL8ztSEetwwntAHof8okf8a5 r9ZL1AeT0vYmO8cj/S/Qw79JR5icTufDd9fiOStjwFv63Ce+G0GJb9aM9GwootcgehrhQtOKFk/+ 8c3y/wCNWyUUdX1xYf7w23/GJP8AiIzZh4vJ9R96vhYOxV59+Z//AB1dD/4xXn/E7bNd2hyHvd92 Jyn8P0sLOal6BYcKFhwpWnFCw4VWHFVNmA6nCrNdJ5fo22PYxqR9IzfYPoHueL1n99P+sUXVvHLX GdVvHFXVbxxVKPNUhTRrgk7COU/8kmynUH93L3OXoBeeH9YPIHvD45z3E+gcCg92fHG08Ci92fHD a8DIPy/uifMsK9SyMB9FG/hmXoT+8Dqe3If4OfeHsdW8c3bxLqt44q6reOKuq3jiryL84i0XmC1k 7SWqr7VVmP8Axtmr131D3PW+z++KQ/pfoDAfrh8cw7d7wO+unxw2jgbF+fHDaDBcNQPjkrYGCoup sO+SEmJxq6aqfHJCTA41dtSVrOYH2H/Ctk4lqMN32NYf7w23/GJP+IjNoHh8n1H3q+Fg7FXn35n/ APHV0P8A4xXn/E7bNd2hyHvd92Jyn8P0sLOal6BYcKFhwpWEgdcUKEk6L74LZCJQkt74HAZNgxoK S7ZmCruSaADxOR4mzgp6paQCG0ghH+641X+n4Z08I0AO588yz4pmXebVOOSa3ccVdxxVjfn+YQ+X bk9+FP8AgnVP+N8xdYaxF2XY8OLUwH45F4w8pznrfQKUmlOG00pNIcbWk48k3Qi802LE/aMiAe7x Mq/icytHKsodb2xj4tNP3fcQXvxAJNOnb5Z0D581xxV3HFXccVeX/nnYt9T0vUFHwxvJA58S4DL9 3DNf2hHYF6X2cyeqcO8A/L+14+ZTmsespaZjhRS0zHxwopr1z45JHC76yfHDbHhXC7PjkrYmKsLw /VpBX9pf1Nk4lrlF912H+8Nt/wAYk/4iM3AfPMn1H3q+Fg7FXn35n/8AHV0P/jFef8Tts13aHIe9 33YnKfw/Sws5qXoFjEDrhVDy3Cr0wGTIQQM92fHIGTbHGgJbk+ORMm0QQkk58cjbYIo7yrZPqGu2 0Q+xGwlc9gFO1f8AZUrmVosfHkHlu6/tbP4Wnkesth8f2PWWIrtsvRR4AdM6R4FrFXYq7FWA/mxe +npkduD8UsiinioqzfiEzXdpTrGB3l6D2cxcWcy/mx+/8F5OzHNI9qpsThVTY4qq6befUtTtLz/l nmjl/wCAYN/DLMcuGQPc06jH4mOUf5wIfSts4e2iYGoKgVHcr8JP3jOnfMCFTFXYq7FWO/mDojaz 5SvbWNeVwi+tbjvzQ1AH+sQBlOox8cCHO7N1Pg54yPLkfcXzQTmhfRVMnChYWwqsLYULS+SRTXqY UUvWX/R5P9df1Nk482Eg+/rD/eG2/wCMSf8AERm6D5tk+o+9XwsHYq8+/M//AI6uh/8AGK8/4nbZ ru0OQ97vuxOU/h+lhEkiqPfNQS9CBaBnueu+RMm6MEBNcHffKzJujBBSze+RJbBFCyS4LZiKGeTG 2VPTPIGhtY6a19OtLi7+yD1VB0/X/nTOh7P0/BCzzk8N25rfFy8Efph9/X9TKKZsHSOpirqYq6mK vG/zP1MXWuJbK1UtlJP+tJQ/8QVDmj7SyXPh7ntvZ3T8OEzP8Z+wftthbHNc9ApMcKqbHCqxsKH0 D+XmqDUvKdnITWWFRFJ41T4N/nw5fTnRaWfFjBfOu1cHhaiQ6E3892R0zIde6mKupirqAggiqkEM PEHYjFXzr+aflN9B8wySxL/oN8WlgYDYMTV126daj7u2aXV4eCVjkXu+xdb42LhP1w2P6CwljmM7 hY2FVNsKFNjhVYThQvVv3D/66fqbJx5sJP0FsP8AeG2/4xJ/xEZuw+aZPqPvV8LB2KvO/wA1H4an oZ8Yrz/idtmt7RPpHveg7CF8fw/S87nnO++aQyeojBATS5AltEUHLJkbbQEK74LZAKDtiypknkry q+qXS3l0tNPhNd/92MOw8R/n45s9Bo+M8UvpH2ug7a7UGGPhwP7w/wCxH6/7e56jQUAAooFFA7AZ 0DxDqYq6mKupiqE1W8istOnuZW4JGpJbw2JJ+hQTkZSEQSejPFjM5CI5k0+e9SvZL6+nu5NnncuR 2AJ2UewG2ctkmZSMj1fTsGEYoCA5RFINsi2qbYVU2wqpthQ9I/JfXlg1G40eZ6R3Q9SCp25gAOB7 7K3yU5s+zstExeY9o9LcY5R02Pu6fjzevlSCQdiOubd5F1MVdTFXUxVJ/Nfley8y6NLptyKOfit5 aCqSD7JFf8+3QnK8uITjRcrR6uWDIJx/tHc+ZvMGg6loWpy6dqERjmjPwn9l1rQOp8D/AGHfNHkx mBovoOm1MM0BOB2Spsi5Cm2FVNsKFjHCrY/uH/10/U2TjzYSfoRYf7w23/GJP+IjN2HzPJ9R96vh YOxV5r+bzcdR0I/5F5/xO2zV9qfTH3vR+z4+v4fpeaTSZoiXrAEHI++RtsAQ0jYGQCgxJNBuTill XlnyFc3zLdakDBZ1qIjs7/0GbXSdmmXqnsO55ztLt6MLhh3l39B+v7no8MEMEKQQII4YxREXYADN 8AAKDx0pGRs7kr6YWLqYq6mKupirzf8ANfzCqxpo8D/E3xXFP5Qen0sKf7H3zV9pZ6HAOvN6b2d0 XFI5jyjsPf8AseXNmlexU2woU2wqpthVTbChW03UbjTdRt763NJrdw6jsadVPsw2OWY5mJBHRqz4 Y5YGEuUg+mNG1S21jSLbU7Zucc6Dl4g+/vtv71zo8cxKII6vmufDLFMwlzCLpk2l1MVdTFXUxVIf OXknSfNmnfVrweldxgm1vB9pGIpv7eI7/cRVmwjIKLm6HXT08+KPLqO986ebvJGveWLxoNQgPoVp FdoCY3r037HbofoqN80+XBKB3e40XaGLUC4nfu6scbK3OU2woU2wq2P7h/8AXT9TZKPNhJ+hNh/v Dbf8Yk/4iM3gfM8n1H3q+Fgoy3lnC/CWeON+vF3VTT5E4q84/Nc/XL7RGs/9JEa3QkMXxheTW/Hk VrSvE9c1vaUJSjGhe70PYOWEOPiIGw5n3vN5bDUK0+rS/wDAN/TNH+XyfzZfIvUDWYP58P8ATBZH oes3BpFZysT0qpH66ZOOizS5RP3Nc+1dNDnMfDf7k0svy91m4YG5KW0fepq33ZmY+yZn6iA63P7S Yo/3cTI+ewZZo3k3R9MKycPrFwP92yb0+QzaYNFjx7gb95ee1naufPtI1HuHL9vxT075lutdTFXU xV1MVdTFUt8xa3baJpUt7M1HoRCv7RbpUe/h7+wOVZsoxxMi5Ok0ss+QQj1+zzeBajfT395Ldzms srVPgB0CivYDYZzGTIZyMjzL6Rp8EcUBCPIINsi3KbYUKbYVU2wqpthQpthV6L+UHnRdM1A6Lesf qV637gn9mU/s/wCy7e/+tmx0GfhPCeRec7f7P44+LH6o8/d+z7vc9sdOJ61B3Vh0IPQjNw8atpir qYq6mKupiqy6tbO9tmtb6BLq2ccWjkAYUPbfAQDzZRmYmwaLzTzL+QOg6g7T6Hdtp0rb/V5Bzir7 AkUr7NT2zDyaKJ5bO90vtBlhtMcY+Recax+SP5gaex4WSXse59S3kFKfKT0z92YstJMebu8Xbumn zJj7x+q2L3Hk3zbDIUfRr3kNjxt5GH0MqkZX4Mx0Lmx1+A8px+YWDyp5p9Fx+hr6vNf+PabsG/yc lHHK+RWWsw/z4/6YPuyx1HT1srdWuYgwjQEF1BBCj3zcB87yfUfejY5I5EDxsHRujKQQfpGFgxXW wv6YuDxBJWPcgHoD44qgwQOir/wK/wBMVbLk+H0AD+GKrSSepOKupirqYq6mKupirqYq6mKqdzcW 1pbSXVy/CCIEsSQK0FaCuAkAWWUIGRAAsl4f50813Gv6izA8bOI0gjFQDTblQ/h/UnOc1mqOWW30 h7/sns0aaG/95Ln+pjTZiO2U2wqpthQpthVTbCqm2FCm2FVhJBBBoRuCMKvdvys/MGLWrNdG1OQJ qcA/cysf7xfH/mr7++270mp4xR+oPDdsdlnBLjgP3Z+zy93cz9kKsVYUI6jM10bVMVdTFXUxV1MV dTFW1d1+yxX5GmKrjK5+0Q3zAP6xiq2o/lT/AIBf6Yq6o/lT/gF/pirJvLgpo8I7cpaf8jWxVJdb /wCOxP8A6sf/ABHFUHTFXUxV1MVdTFXUxV1MVdTFXUxVSu7m1srV7q8kEUCCpZiBWnhXIykIizyZ 48cpyEYiyXjvnfzxca7P9Xt6xabHsidOdD1Pt/tnsBoNZrTkPDH6fve57J7IGnHHPfJ9347/AMGI NmA7tTbCqm2FVNsKFNsKqbYVU2woU2wqpthVdbXVxaXMdzbSGKeFg8ci9Qw6ZKMiDYYZMcZxMZCw Xvn5c/mbZeY4E03U2W31eNaIa/DIAOq1/V1Hyzd6bVDJsfqeF7U7JlpzxR3x/d7/ANbOXjZG4tsc y3TtUxV1MVdTFXUxV1MVdTFXUxV1MVZP5e/45EP+tJ/ycbFUl1of7mJ/9WP/AIjiqDpirqYq6mKu pirqYq6mKthSTQCp8BiqUa/5p0fQoS1zIJLgj93boakn6P8Aa98x8+phiHqPwc3Rdn5dRKoDbv6B 5D5n826pr0/K4b07ZT+7t1Pwjwr4nNBqdXLKd9h3Pc9n9l49MNt59T+ruSBsxXZKbYUKbYVU2wqp thQpthVTbCqm2FCm2FVNsKrGwoWxyywypLE5jljIZHUkMrDcEEdCMINIlEEUeT1/yF+diqkemeZ/ iQfDHfjan+uB0+fTxp1zaafW9J/N5TtHsEi54f8AS/q/U9dge3uoFubOVbi3cBldDXY7jpmxBt5i USDR5uphQ6mKupirqYq6mKupirqYqyby9/xyYf8AWk/5ONiqTax/x17j/Vj/AOI4qhaYq6mKupir gpOw3xVtk4CshEYPQuQv68VSrVfNGg6Wp+tXIMg/3UtQ33UL/wDC098oy6nHj+ouZptBmz/REkd/ T5sC1/8ANG/uVaDS4/q0J2MjAcz/ALGrD7yfozU5+1SdoCvN6bR+zkI75TxHuHL9f3MFuJ5p5Wlm dpJXNWdyWYn3JzVmRJs83pIQjAVEUAoNgZKbYVU2woU2wqpthVTbChTbCqm2FVNsKFNsKqbYVWNh QpNhVY2FU88seevMnlqYPpt0RCDVrWSrRHx2qCv+xIy/FnlDk4Gs7Ow6j6h6u8c3sXln89vLWpBI dbjOnXR2MvWMn/XAp/wQX55ssetjLns8vquwc2PeHrj9vy/U9CtLzTr6JZrG7iuIpPsMrD4vka0P 0HMsEHk6ScDE0RRV2idPtKR8xhYraYq6mKupirqYqyPy/wD8cmH/AFpP+TjYqhtQ0a8nvpLiIwlJ FUUk5ggqKfs4qxvzdqE3li0tbu8hilhurgWq+lzJV2jeRS3Jl2PpkfOmVZ8oxxMiLpy9HpDnnwAg HzY/P+YttA4U2lahWBCmhVhUdZPfMCXasB0LtYezuWQ+qP2/qQU35oUH7uz3/wBgv6xJlR7Yj0i5 EfZmfWY+SV3n5n604IgjWIH+Zmb8E9MfhlM+15nkAHLxezOIfVKR92362PX3mnXruoku3RT1SKkY +nhQn6cw8mtyz5y/Q7TB2TpsXKAvz3+9JWJNSdyeuYzsVNsVUmwqsbCqm2FVNsKFNsKqbYVU2woU 2wqpthVTbChTbCqm2FVjYUKTYVWNhVTbCqm2FCvp+r6rpkpl0+7mtJD9owuyVHg1DuPnk4zMeRas uCGQVMCXvZfpX53efNOCq1xHdoNuMqFdv+eRjqfc1zJjrJjzdVl7B08uQMfcf12yW1/5yRv1UC80 hZW7ukqgf8D6Vf8AhsvGu7w4E/Zofwz+z9qZx/8AOSWimvraRKp7cKH76yrkxro9zjn2cy9JR+1M NN/P7RtQvtPsLbR7h7vUrhLW2jPEVeR1jUn970LN+By3HqRM0A4+fsTJiiZGUaHv/U9i/QepEfZt h785T+FMyHSptpNnLZ6fFbysHlTkXZdgSzFtq/PFUXiqS+cvLieY/LN9pBf0pbhA1tP/AL7niYSQ v8lkVSfEZGURIUeTdp8xxzEh0fP9o81/aTWs8Rt9Z0p3hvbJvtoUJ5r78WqQe6n2zmdTppYzwnpy 8w99ptXGYEx9MvsP7UFIMwnZAodxgZKLDCqk2FVNsVU2wqpthVTbCqm2FCm2FVNsKqbYUKbYVU2w qpthQpthVTbCqxsKFJsKrGwqpthVTbChTbCqm2FVNsKF1tazXUwiiG9CWY7KqjdmY9lA3OEC2MpA Cy9g/wCcbvI7a75ybzRLGTonl+sdizjaW7YEKQCP2Axc06MVzb6bDwRs8z9zyfbWu4h4cfj+PsfV eZDzbsVdirsVeZfml+Vl3rN0vmfyvKLPzRbqFkWvGO7jT7KSeDjoreGx7UhkxRyCpOdo9bLCf6Ly CTzLpxu3sPMlrL5e1uM8ZhJGxgZh34j4lr7VGafUdlyG4ep0vagI7x+Pxuik0/61vY3Vreqehgnj Y/8AAkhvwzWy0s49HaQ12Muby9q/++P+HT/mrIeDLubPzePv+9Rby7rH/LP/AMOn/NWHwZdyfzeP v+9TPl3WP+Wf/h0/5qx8GXcv5rH3/ept5d1j/ln/AOHT/mrD4Mu5fzWPv+9Tby5rP/LP/wAOn/NW HwZdy/msff8Aepny3rX/ACz/APDx/wDNWHwZdyPzWPv+9YfLetf8s3/Dx/8ANWPgy7l/NY+/71M+ Wtb/AOWb/h4/+asPhS7l/NY+/wC9YfLOt/8ALN/w8f8AzVh8KXcv5rH3/ept5Y1z/lm/4eP/AJqw +FLuR+ax9/3qZ8sa5/yzf8PH/wA1YfCl3L+ax9/3rG8r67/yzf8ADx/81YfCl3L+ax9/3qbeVtd/ 5Zf+Hj/5qw+FLuX81j7/AL1jeVte/wCWX/kpH/zVh8KSPzWPv+9Tbyrr3/LL/wAlI/8AmrD4Ul/N Y+/71h8qa/8A8sv/ACUj/wCasPhSX81j7/vUz5T1/wD5Zf8AkpH/AM1Y+FJH5rH3/esbyn5g/wCW X/kpH/zVh8OS/msff96mfKXmD/lk/wCSkf8AzVh8OS/msff96m3lHzD/AMsn/JSL/mrD4ckfmsfe sbyj5h/5ZP8AkpF/zVh8OS/msfesbyjryrzlhjhTu8s8CAfe+SGKR6MTrMY6/ehZ9O0ez31DV7eo /wB0WVbqU+1VpGPpfMiGimfJxsnacB9ItnnkH8n/ADP549MRWcvl7yc5Vrm+uP8Aeu8QUICVAqp7 UHAf5RGbDFpo4/Muh1vapO17vqzy55d0jy5otro2kQC3sLROEUY6nxZj3ZjuTlxNvPykZGymWBi7 FXYq7FXYqlHmHyj5a8x2/oa1p0N6g2VpF+Nf9VxRh9+ESITGRG4ec6j/AM4y+Qbhy9pLd2lTXh6n qKPYA0/XkuIdQ5A1mQdUvH/OLugAUGsXAA7cD/1Uwej+az/P5e93/Qrmgf8AV4uP+AP/AFUxqH81 fz+XvXJ/zi55bDfvNWuWXwVSp+8u2NQ/mr+fy96//oV3yl/1c7z7/wC3BUP5oX8/l73f9CueUv8A q5Xn3/241D+aF/P5e9r/AKFb8o/9XK8+/wDtxqH80L+fy97v+hWvKH/VyvPv/tx9P80L+fy97X/Q rPk//q5Xf3/24fT/ADQv5/L3u/6FY8n/APVxu/v/ALcfT/NC/n8ve1/0Kv5O/wCrjd/f/bj6f5oX 8/l73f8AQq/k7/q43f3/ANuPp/mhfz+Xvd/0Kt5N/wCrhd/f/bj6f5oX8/l72v8AoVXyZ/1cLv7/ AO3H0/zQv5/L3u/6FU8l/wDVwu/v/txuPcF/P5e9r/oVPyX/ANXC7+/+3G49y/n8ve7/AKFS8lf8 t939/wDzdjce5fz+XvWSf84oeTyB6eo3KnvyBb9TrhuP81fz+XvUJP8AnE3y0QPT1aVT35RM36pl xuP81fz+XvUJP+cTdH5fBqvJfFo5FP3CY4eKH81fz+XvWf8AQpmlf9XMf8BL/wBVcPFDuX8/l718 f/OJeiE/vdV4jtxjkb9cy4OKH81fz+XvTKz/AOcT/wAvUcNeXF3cU3Ko/pA/OvqH8ceMdAg63J3s 38tfkz+WflyRZtN0G3NypDLc3INzIGHQqZi/A/6tMiZFqnqJy5lmuRaXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k=</xmpGImg:image> </rdf:li> </rdf:Alt> </xmp:Thumbnails> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"> <xmpMM:DocumentID>xmp.did:1909C3C878D8DE11BA3FC4734EDA5420</xmpMM:DocumentID> <xmpMM:InstanceID>uuid:79f4e077-af0a-49b0-8661-3c88af079b47</xmpMM:InstanceID> <xmpMM:OriginalDocumentID>uuid:4BC73B30D582DE118E9E833D7C53E1E9</xmpMM:OriginalDocumentID> <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass> <xmpMM:DerivedFrom rdf:parseType="Resource"> <stRef:instanceID>xmp.iid:1809C3C878D8DE11BA3FC4734EDA5420</stRef:instanceID> <stRef:documentID>xmp.did:1809C3C878D8DE11BA3FC4734EDA5420</stRef:documentID> <stRef:originalDocumentID>uuid:4BC73B30D582DE118E9E833D7C53E1E9</stRef:originalDocumentID> <stRef:renditionClass>proof:pdf</stRef:renditionClass> </xmpMM:DerivedFrom> <xmpMM:History> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <stEvt:action>saved</stEvt:action> <stEvt:instanceID>xmp.iid:1709C3C878D8DE11BA3FC4734EDA5420</stEvt:instanceID> <stEvt:when>2009-11-23T23:40:14+02:00</stEvt:when> <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent> <stEvt:changed>/</stEvt:changed> </rdf:li> <rdf:li rdf:parseType="Resource"> <stEvt:action>saved</stEvt:action> <stEvt:instanceID>xmp.iid:1809C3C878D8DE11BA3FC4734EDA5420</stEvt:instanceID> <stEvt:when>2009-11-23T23:44:22+02:00</stEvt:when> <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent> <stEvt:changed>/</stEvt:changed> </rdf:li> <rdf:li rdf:parseType="Resource"> <stEvt:action>saved</stEvt:action> <stEvt:instanceID>xmp.iid:1909C3C878D8DE11BA3FC4734EDA5420</stEvt:instanceID> <stEvt:when>2009-11-23T23:45:49+02:00</stEvt:when> <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent> <stEvt:changed>/</stEvt:changed> </rdf:li> </rdf:Seq> </xmpMM:History> </rdf:Description> <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"> <pdf:Producer>Adobe PDF library 9.00</pdf:Producer> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"> <xmpTPg:NPages>1</xmpTPg:NPages> <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency> <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint> <xmpTPg:MaxPageSize rdf:parseType="Resource"> <stDim:w>100.000000</stDim:w> <stDim:h>100.000000</stDim:h> <stDim:unit>Pixels</stDim:unit> </xmpTPg:MaxPageSize> <xmpTPg:PlateNames> <rdf:Seq> <rdf:li>Cyan</rdf:li> <rdf:li>Magenta</rdf:li> <rdf:li>Yellow</rdf:li> <rdf:li>Black</rdf:li> </rdf:Seq> </xmpTPg:PlateNames> <xmpTPg:SwatchGroups> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <xmpG:groupName>Default Swatch Group</xmpG:groupName> <xmpG:groupType>0</xmpG:groupType> <xmpG:Colorants> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>White</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>255</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Black</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Charcoal</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>63</xmpG:red> <xmpG:green>63</xmpG:green> <xmpG:blue>63</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Graphite</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>102</xmpG:red> <xmpG:green>102</xmpG:green> <xmpG:blue>102</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Ash</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>140</xmpG:red> <xmpG:green>140</xmpG:green> <xmpG:blue>140</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Smoke</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>178</xmpG:red> <xmpG:green>178</xmpG:green> <xmpG:blue>178</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Latte</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>228</xmpG:red> <xmpG:green>188</xmpG:green> <xmpG:blue>150</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Capuccino</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>213</xmpG:red> <xmpG:green>151</xmpG:green> <xmpG:blue>88</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Mochaccino</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>139</xmpG:red> <xmpG:green>92</xmpG:green> <xmpG:blue>41</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Chocolate</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>90</xmpG:red> <xmpG:green>61</xmpG:green> <xmpG:blue>28</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Mars Red</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>143</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Ruby</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>191</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Pure Red</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Pumpkin</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>64</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Squash</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>127</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Sunshine</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>191</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Yellow</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>255</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Chartreuse Green</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>204</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Fresh Grass Green</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>125</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Pure Green</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Spearmint</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>163</xmpG:green> <xmpG:blue>61</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Holly Green</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>107</xmpG:green> <xmpG:blue>51</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Sea Green</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>1</xmpG:red> <xmpG:green>83</xmpG:green> <xmpG:blue>83</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Caribbean Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>4</xmpG:red> <xmpG:green>115</xmpG:green> <xmpG:blue>145</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Mediterranean Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>160</xmpG:green> <xmpG:blue>198</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Aloha Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>96</xmpG:green> <xmpG:blue>182</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Black Light Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>60</xmpG:green> <xmpG:blue>255</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Pure Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>0</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>255</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Sapphire Blue</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>34</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>210</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Tanzanite</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>66</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>210</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Brilliant Purple</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>93</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>210</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Violet</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>130</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>210</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Purple Orchid</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>171</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>210</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Fuschia</xmpG:swatchName> <xmpG:mode>RGB</xmpG:mode> <xmpG:type>PROCESS</xmpG:type> <xmpG:red>208</xmpG:red> <xmpG:green>16</xmpG:green> <xmpG:blue>177</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Pure Red</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>255</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Squash</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>255</xmpG:red> <xmpG:green>126</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Yellow</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>255</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Pure Green</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>0</xmpG:red> <xmpG:green>255</xmpG:green> <xmpG:blue>0</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Mediterranean Blue</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>0</xmpG:red> <xmpG:green>160</xmpG:green> <xmpG:blue>198</xmpG:blue> </rdf:li> <rdf:li rdf:parseType="Resource"> <xmpG:swatchName>Global Pure Blue</xmpG:swatchName> <xmpG:type>PROCESS</xmpG:type> <xmpG:tint>100.000000</xmpG:tint> <xmpG:mode>RGB</xmpG:mode> <xmpG:red>0</xmpG:red> <xmpG:green>0</xmpG:green> <xmpG:blue>255</xmpG:blue> </rdf:li> </rdf:Seq> </xmpG:Colorants> </rdf:li> </rdf:Seq> </xmpTPg:SwatchGroups> </rdf:Description> <rdf:Description rdf:about="" xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"> <illustrator:Type>Document</illustrator:Type> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[122 0 R]/Type/Pages>> endobj 122 0 obj <</ArtBox[0.0 0.0 100.0 100.0]/BleedBox[0.0 0.0 100.0 100.0]/Contents 123 0 R/Group 124 0 R/LastModified(D:20091126015259+03'00')/MediaBox[0.0 0.0 100.0 100.0]/Parent 3 0 R/PieceInfo<</Illustrator 125 0 R>>/Resources<</ColorSpace<</CS0 126 0 R/CS1 126 0 R>>/ExtGState<</GS0 127 0 R/GS1 128 0 R/GS2 129 0 R/GS3 130 0 R/GS4 131 0 R/GS5 132 0 R/GS6 133 0 R>>/Properties<</MC0 120 0 R>>/Shading<</Sh0 134 0 R/Sh1 135 0 R>>/XObject<</Fm0 136 0 R/Fm1 137 0 R/Fm10 138 0 R/Fm11 139 0 R/Fm2 140 0 R/Fm3 141 0 R/Fm4 142 0 R/Fm5 143 0 R/Fm6 144 0 R/Fm7 145 0 R/Fm8 146 0 R/Fm9 147 0 R>>>>/Thumb 148 0 R/TrimBox[0.0 0.0 100.0 100.0]/Type/Page>> endobj 123 0 obj <</Filter/FlateDecode/Length 828>>stream HVMo1 W7wN=}a *$NfUZ3dz>ݟ=kfӿK}>П_K=}C}I.QeJt.L>.@kuāLe*uDS:MW7;Ʋ۪xx&XN!v|TЪxS{긦X { CC\lNz}T7_`}EtR+^s]w:#EJ>ɜ3E/ʐ f}gO*3-.mҋG "c2%%3f&/aNM,rBޡ ܊ė@`3amUH״xɩI`tFKjHL6RTD\ȅmL1|!#vƒ!`wUC.\ĴX4w϶ i xvo#?Ē} 5f�("fJlH&< ֣}sTEH!3_s{mJ٭d@=U`BF'vHhn "G k %|AM$N`c8B hB#F"bHLiUs-ő̆eg00;P֡eG v'Ly]h1`A򤌉UlgCc}K/ ?Y9^;)5SKFLҸ;F4$4:ۨiiI6jjч\9L&8v qwPkFfj^&7濻O��ku endstream endobj 124 0 obj <</CS 149 0 R/I false/K false/S/Transparency>> endobj 148 0 obj <</BitsPerComponent 8/ColorSpace 150 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 12/Length 126/Width 12>>stream 8;TH&Yml4;%(iAMQZNRi0YmpAU7%IPRh*W\fQTk76<7pUNf5GP5e+@-2h3.j-C=c[ X>?7'ff1<=MJ!eeY$4!s/8sW4K8q\C--cHIW\"sBhR',F>s<)t)$&!h:Po~> endstream endobj 150 0 obj [/Indexed/DeviceRGB 255 151 0 R] endobj 151 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1 VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH< PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 136 0 obj <</BBox[-1.25195 102.252 101.748 -1.74805]/Group 152 0 R/Length 57/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 153 0 R>>/ExtGState<</GS0 154 0 R>>/ProcSet[/PDF/ImageC/ImageI]/XObject<</Im0 155 0 R>>>>/Subtype/Form>>stream q /GS0 gs 103 0 0 104 -1.2519531 -1.7480469 cm /Im0 Do Q endstream endobj 137 0 obj <</BBox[3.75 96.4238 96.2119 3.96191]/Group 156 0 R/Length 316/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 157 0 R>>/Shading<</Sh0 158 0 R>>>>/Subtype/Form>>stream q 96.212 15.058 m 96.212 8.931 91.243 3.962 85.116 3.962 c 14.845 3.962 l 8.717 3.962 3.75 8.931 3.75 15.058 c 3.75 85.329 l 3.75 91.457 8.717 96.424 14.845 96.424 c 85.116 96.424 l 91.243 96.424 96.212 91.457 96.212 85.329 c h W n q 0 g /GS0 gs 69.5471954 0 0 -33.9607239 63.3984375 19.1269531 cm BX /Sh0 sh EX Q Q endstream endobj 138 0 obj <</BBox[56.9268 86.5078 99.6934 12.8818]/Group 159 0 R/Length 1151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 93 13.6084 cm 0 0 m -25.587 0.464 -43.041 26.396 -33.12 50.419 c -28.93 60.568 -19.768 67.936 -9.37 70.94 c -5.22 72.14 -0.952 72.174 3.324 72.174 c 4.029 72.174 6.644 72.262 6.644 72.182 c 6.644 67.061 l 6.644 65.776 6.838 58.987 6.461 58.987 c 2.456 58.987 -1.518 59.179 -5.454 58.312 c -15.31 56.142 -22.082 46.627 -22.181 36.807 c -22.256 29.279 -19.142 22.479 -13.3 17.724 c -9.507 14.636 -4.445 13.187 0.386 13.187 c 5.256 13.187 l 7.01 13.187 6.644 13.519 6.644 11.56 c 6.644 0.959 l 6.644 -0.574 6.697 0 5.212 0 c 0 0 l -0.006 0 -0.006 -0.727 0 -0.727 c 6.647 -0.727 l 6.651 -0.727 6.651 -0.382 6.651 -0.363 c 6.651 13.55 l 6.651 13.568 6.651 13.913 6.647 13.913 c 1.272 13.913 -3.796 13.736 -8.885 15.822 c -16.377 18.895 -20.912 26.35 -22.019 34.097 c -23.294 43.028 -17.92 51.391 -10.417 55.671 c -5.163 58.669 0.841 58.262 6.647 58.262 c 6.651 58.262 6.651 58.605 6.651 58.625 c 6.651 72.537 l 6.651 72.556 6.651 72.899 6.647 72.899 c -3.479 72.899 -12.49 72.064 -21.092 66.079 c -29.982 59.893 -35.861 48.978 -36.065 38.143 c -36.462 17.169 -21.49 -0.336 0 -0.727 c 0.001 -0.727 0.01 -0.001 0 0 c f Q endstream endobj 139 0 obj <</BBox[56.5566 86.5581 100.081 12.6768]/Group 160 0 R/Length 1148/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 0.584 0.584 0.584 scn /GS0 gs q 1 0 0 1 99.999 86.4976 cm 0 0 m 0 -8.302 l 0 -13.343 l 0 -14.996 -0.466 -14.557 -2.103 -14.557 c -12.256 -14.557 -21.036 -16.68 -26.366 -26.228 c -29.246 -31.387 -29.334 -37.473 -27.891 -43.036 c -25.236 -53.265 -15.646 -59.047 -5.554 -59.047 c -0.591 -59.047 l 0.405 -59.047 0 -60.057 0 -60.909 c 0 -72.331 l 0 -74.685 -4.432 -73.544 -6.389 -73.544 c -11.539 -73.544 -16.433 -72.595 -21.206 -70.663 c -45.354 -60.88 -50.09 -28.242 -32.323 -10.372 c -23.38 -1.377 -11.978 -0.061 0.001 -0.061 c 0.002 -0.061 0.002 0.061 0.001 0.061 c -11.299 0.061 -21.256 -1.08 -30.389 -8.501 c -38.647 -15.212 -43.442 -25.866 -43.442 -36.442 c -43.442 -47.266 -38.896 -57.359 -30.929 -64.642 c -22.124 -72.689 -11.302 -73.666 0.001 -73.666 c 0.002 -73.666 0.002 -73.608 0.002 -73.605 c 0.002 -58.987 l 0.002 -58.984 0.002 -58.926 0.001 -58.926 c -5.466 -58.926 -10.659 -59.158 -15.828 -57.009 c -23.162 -53.962 -27.593 -46.601 -28.671 -39.005 c -30.005 -29.606 -24.512 -20.828 -16.31 -16.705 c -11.27 -14.171 -5.458 -14.678 0.001 -14.678 c 0.002 -14.678 0.002 -14.62 0.002 -14.617 c 0.002 0 l 0.002 0.068 0 0.068 0 0 c f Q endstream endobj 140 0 obj <</BBox[4.72559 95.4736 95.2344 4.91211]/Group 161 0 R/Length 716/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 14.8452 5.4121 cm 0 0 m -7.936 0.536 -9.893 6.795 -9.893 13.469 c -9.893 32.113 l -9.893 75.597 l -9.893 81.944 -8.775 87.948 -1.341 89.471 c 1.944 90.144 5.865 89.562 9.176 89.562 c 54.925 89.562 l 64.029 89.562 80.164 92.408 80.164 78.776 c 80.164 39.824 l 80.164 18.135 l 80.164 13.798 80.814 8.887 78.813 4.905 c 76.173 -0.348 70.332 0 65.428 0 c 45.917 0 l 0 0 l -0.004 0 -0.004 -0.5 0 -0.5 c 69.621 -0.5 l 81.847 -0.5 80.169 11.979 80.169 20.255 c 80.169 66.216 l 80.169 74.311 82.756 90.062 70.197 90.062 c 36.13 90.062 l 0.292 90.062 l -12.077 90.062 -9.897 75.947 -9.897 67.797 c -9.897 23.346 l -9.897 14.734 -12.484 0.343 0 -0.5 c -0.007 -0.499 0.015 -0.001 0 0 c f Q endstream endobj 141 0 obj <</BBox[3.44629 97.2163 96.5996 3.04102]/Group 162 0 R/Length 839/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 0.051 0 0.231 scn /GS0 gs q 1 0 0 1 96.21 15.6602 cm 0 0 m -0.51 -8.207 -6.845 -11.073 -14.005 -11.073 c -31.712 -11.073 l -75.974 -11.073 l -81.106 -11.073 -85.64 -11.367 -89.66 -7.347 c -93.249 -3.757 -92.454 1.974 -92.454 6.579 c -92.454 51.744 l -92.454 61.266 -95.718 80.139 -81.072 80.139 c -45.235 80.139 l -11.168 80.139 l 3.628 80.139 -0.004 59.402 -0.004 49.96 c -0.004 -0.603 l -0.004 -1.31 0.008 -1.31 0.008 -0.603 c 0.008 69.019 l 0.008 75.759 -4.091 80.954 -11.094 81.389 c -14.36 81.592 -17.705 81.389 -20.977 81.389 c -66.85 81.389 l -76.392 81.389 -92.466 83.879 -92.466 69.668 c -92.466 37.513 l -92.466 0.048 l -92.466 -6.693 -88.367 -11.889 -81.365 -12.323 c -78.098 -12.526 -74.753 -12.323 -71.482 -12.323 c -28.145 -12.323 l -18.302 -12.323 -0.883 -15.476 0.004 -1.205 c 0.027 -0.829 -0.018 -0.293 0 0 c f Q endstream endobj 142 0 obj <</BBox[0.0 86.4976 43.4429 12.8926]/Group 163 0 R/Length 320/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>/Shading<</Sh0 164 0 R>>>>/Subtype/Form>>stream q 0 12.893 m 0 27.511 l 7 27.511 l 19.56 27.511 28.824 37.6 28.824 49.23 c 28.824 61.688 19.354 71.88 6.794 71.88 c 0 71.88 l 0 86.498 l 7 86.498 l 27.178 86.498 43.443 70.131 43.443 49.334 c 43.443 29.467 27.178 12.893 7 12.893 c h W n q 0 g /GS0 gs 0 73.6044922 73.6044922 0 21.7211914 12.8925781 cm BX /Sh0 sh EX Q Q endstream endobj 143 0 obj <</BBox[0.0 86.4976 43.4429 12.8926]/Group 165 0 R/Length 322/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 166 0 R>>/Shading<</Sh0 167 0 R>>>>/Subtype/Form>>stream q 0 12.893 m 0 27.511 l 7 27.511 l 19.56 27.511 28.824 37.6 28.824 49.23 c 28.824 61.688 19.354 71.88 6.794 71.88 c 0 71.88 l 0 86.498 l 7 86.498 l 27.178 86.498 43.443 70.131 43.443 49.334 c 43.443 29.467 27.178 12.893 7 12.893 c h W n q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 21.7211914 86.4975586 cm BX /Sh0 sh EX Q Q endstream endobj 144 0 obj <</BBox[0.308105 86.5078 43.1143 12.8818]/Group 168 0 R/Length 1075/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 0.356 13.2451 cm 0 0 m 0 8.438 l 0 13.143 l 0 14.115 2.06 13.55 3.32 13.55 c 13.909 13.55 22.95 17.372 27.326 27.653 c 29.708 33.251 29.104 40.175 26.962 45.689 c 23.033 55.81 13.212 59.351 3.217 59.351 c 2.514 59.351 0 59.261 0 59.342 c 0 63.506 l 0 69.293 l 0 70.263 -0.188 72.537 0.183 72.537 c 9.645 72.537 18.18 71.9 26.43 66.685 c 35.703 60.824 41.198 50.575 42.517 39.882 c 44.149 26.65 37.354 13.875 26.674 6.444 c 18.582 0.813 9.46 0.363 -0.003 0.363 c -0.009 0.363 -0.009 -0.363 -0.003 -0.363 c 11.069 -0.363 20.82 0.816 29.774 8.043 c 38.14 14.795 42.738 25.448 42.738 36.089 c 42.738 46.924 38.443 57.006 30.446 64.339 c 21.808 72.259 11.113 73.263 -0.003 73.263 c -0.008 73.263 -0.007 72.919 -0.007 72.9 c -0.007 58.988 l -0.007 58.969 -0.008 58.625 -0.003 58.625 c 5.372 58.625 10.439 58.802 15.528 56.715 c 23.021 53.643 27.556 46.187 28.662 38.44 c 29.937 29.509 24.564 21.146 17.061 16.866 c 11.807 13.869 5.803 14.276 -0.003 14.276 c -0.008 14.276 -0.007 13.932 -0.007 13.913 c -0.007 0 l -0.007 -0.41 0 -0.41 0 0 c f Q endstream endobj 145 0 obj <</BBox[-0.0810547 86.7134 43.4434 12.832]/Group 169 0 R/Length 1035/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>>>/Subtype/Form>>stream /CS0 cs 0.584 0.584 0.584 scn /GS0 gs q 1 0 0 1 0.0005 12.8926 cm 0 0 m 0 8.303 l 0 13.344 l 0 14.997 0.466 14.558 2.103 14.558 c 12.256 14.558 21.037 16.681 26.366 26.229 c 29.246 31.387 29.333 37.473 27.89 43.036 c 25.236 53.265 15.647 59.048 5.554 59.048 c 0.592 59.048 l -0.405 59.048 0 60.058 0 60.91 c 0 72.331 l 0 74.685 4.433 73.544 6.39 73.544 c 11.54 73.544 16.434 72.595 21.206 70.662 c 45.356 60.881 50.09 28.243 32.324 10.373 c 23.381 1.378 11.979 0.061 0 0.061 c -0.001 0.061 -0.001 -0.061 0 -0.061 c 11.3 -0.061 21.257 1.08 30.389 8.502 c 38.648 15.213 43.443 25.865 43.443 36.441 c 43.443 47.266 38.897 57.359 30.929 64.642 c 22.125 72.689 11.303 73.666 0 73.666 c -0.001 73.666 -0.001 73.608 -0.001 73.605 c -0.001 58.988 l -0.001 58.985 -0.001 58.927 0 58.927 c 5.466 58.927 10.659 59.158 15.828 57.01 c 23.163 53.963 27.593 46.601 28.67 39.005 c 30.004 29.606 24.512 20.829 16.311 16.706 c 11.27 14.172 5.458 14.679 0 14.679 c -0.001 14.679 -0.001 14.621 -0.001 14.618 c -0.001 0 l -0.001 -0.068 0 -0.068 0 0 c f Q endstream endobj 146 0 obj <</BBox[56.5576 86.4976 100.0 12.8926]/Group 170 0 R/Length 335/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 128 0 R>>/Shading<</Sh0 164 0 R>>>>/Subtype/Form>>stream q 100 86.498 m 100 71.88 l 93 71.88 l 80.441 71.88 71.175 61.791 71.175 50.159 c 71.175 37.702 80.646 27.511 93.205 27.511 c 100 27.511 l 100 12.893 l 93 12.893 l 72.822 12.893 56.558 29.26 56.558 50.056 c 56.558 69.925 72.822 86.498 93 86.498 c h W n q 0 g /GS0 gs 0 73.6044922 73.6044922 0 78.2792969 12.8925781 cm BX /Sh0 sh EX Q Q endstream endobj 147 0 obj <</BBox[56.5576 86.4976 100.0 12.8926]/Group 171 0 R/Length 337/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 126 0 R>>/ExtGState<</GS0 172 0 R>>/Shading<</Sh0 167 0 R>>>>/Subtype/Form>>stream q 100 86.498 m 100 71.88 l 93 71.88 l 80.441 71.88 71.175 61.791 71.175 50.159 c 71.175 37.702 80.646 27.511 93.205 27.511 c 100 27.511 l 100 12.893 l 93 12.893 l 72.822 12.893 56.558 29.26 56.558 50.056 c 56.558 69.925 72.822 86.498 93 86.498 c h W n q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 78.2792969 86.4975586 cm BX /Sh0 sh EX Q Q endstream endobj 171 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 167 0 obj <</AntiAlias false/ColorSpace 126 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 173 0 R/ShadingType 2>> endobj 126 0 obj [/ICCBased 174 0 R] endobj 173 0 obj <</Bounds[0.203293 0.346161 0.510986]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0]/FunctionType 3/Functions[175 0 R 176 0 R 177 0 R 178 0 R]>> endobj 175 0 obj <</C0[1.0 1.0 1.0]/C1[1.0 1.0 1.0]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 176 0 obj <</C0[1.0 1.0 1.0]/C1[1.0 1.0 1.0]/Domain[0.0 1.0]/FunctionType 2/N 2.02823>> endobj 177 0 obj <</C0[1.0 1.0 1.0]/C1[1.0 1.0 1.0]/Domain[0.0 1.0]/FunctionType 2/N 1.40747>> endobj 178 0 obj <</C0[0.105881 0.105881 0.105881]/C1[1.0 1.0 1.0]/Domain[0.0 1.0]/FunctionType 2/N 4.97728>> endobj 174 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽�'0 �֠Jb � �2y.-;!KZ ^i"L0- �@8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K�t;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-�[�0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c.� ��R ߁-25 S>ӣVd`rn~Y&+`;A4 A9�=-tl`;~p Gp| [`L`< "A YA+Cb(R,�*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh 8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MI JlN<DHJIڐtCj'KwKgC%Nd |ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O�[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-�u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km � endstream endobj 172 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask 179 0 R/Type/ExtGState/ca 1.0/op false>> endobj 179 0 obj <</G 180 0 R/S/Luminosity/Type/Mask>> endobj 180 0 obj <</BBox[-32768.0 32767.0 32767.0 -32767.0]/Group 181 0 R/Length 83/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 128 0 R>>/Shading<</Sh0 182 0 R>>>>/Subtype/Form>>stream q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 78.2792969 86.4975586 cm BX /Sh0 sh EX Q endstream endobj 181 0 obj <</CS 183 0 R/I false/K false/S/Transparency/Type/Group>> endobj 182 0 obj <</AntiAlias false/ColorSpace 184 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 185 0 R/ShadingType 2>> endobj 184 0 obj /DeviceGray endobj 185 0 obj <</Bounds[0.203293 0.346161 0.510986]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0]/FunctionType 3/Functions[186 0 R 187 0 R 188 0 R 189 0 R]>> endobj 186 0 obj <</C0[0.770004]/C1[0.649994]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 187 0 obj <</C0[0.649994]/C1[0.649994]/Domain[0.0 1.0]/FunctionType 2/N 2.02823>> endobj 188 0 obj <</C0[0.649994]/C1[0.0]/Domain[0.0 1.0]/FunctionType 2/N 1.40747>> endobj 189 0 obj <</C0[0.160004]/C1[0.0]/Domain[0.0 1.0]/FunctionType 2/N 4.97728>> endobj 128 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 183 0 obj /DeviceGray endobj 170 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 164 0 obj <</AntiAlias false/ColorSpace 126 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 190 0 R/ShadingType 2>> endobj 190 0 obj <</Bounds[0.5]/Domain[0.0 1.0]/Encode[0.0 1.0 1.0 0.0]/FunctionType 3/Functions[191 0 R 192 0 R]>> endobj 191 0 obj <</C0[0.650986 0.650986 0.650986]/C1[0.513733 0.513733 0.513733]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 192 0 obj <</C0[0.650986 0.650986 0.650986]/C1[0.513733 0.513733 0.513733]/Domain[0.0 1.0]/FunctionType 2/N 2.55891>> endobj 169 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 168 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 165 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 166 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask 193 0 R/Type/ExtGState/ca 1.0/op false>> endobj 193 0 obj <</G 194 0 R/S/Luminosity/Type/Mask>> endobj 194 0 obj <</BBox[-32768.0 32767.0 32767.0 -32767.0]/Group 195 0 R/Length 83/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 128 0 R>>/Shading<</Sh0 182 0 R>>>>/Subtype/Form>>stream q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 21.7211914 86.4975586 cm BX /Sh0 sh EX Q endstream endobj 195 0 obj <</CS 183 0 R/I false/K false/S/Transparency/Type/Group>> endobj 163 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 162 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 161 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 160 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 159 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 156 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 158 0 obj <</AntiAlias false/ColorSpace 126 0 R/Coords[0.0 0.0 0.0 0.0 0.0 1.0]/Domain[0.0 1.0]/Extend[true true]/Function 196 0 R/ShadingType 3>> endobj 196 0 obj <</Bounds[0.444443]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0]/FunctionType 3/Functions[175 0 R 197 0 R]>> endobj 197 0 obj <</C0[1.0 1.0 1.0]/C1[1.0 1.0 1.0]/Domain[0.0 1.0]/FunctionType 2/N 4.97728>> endobj 157 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask 198 0 R/Type/ExtGState/ca 1.0/op false>> endobj 198 0 obj <</G 199 0 R/S/Luminosity/Type/Mask>> endobj 199 0 obj <</BBox[-32767.0 32767.0 32767.0 -32767.0]/Group 200 0 R/Length 82/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 128 0 R>>/Shading<</Sh0 201 0 R>>>>/Subtype/Form>>stream q 0 g /GS0 gs 69.5471954 0 0 -33.9607239 63.3984375 19.1269531 cm BX /Sh0 sh EX Q endstream endobj 200 0 obj <</CS 183 0 R/I false/K false/S/Transparency/Type/Group>> endobj 201 0 obj <</AntiAlias false/ColorSpace 184 0 R/Coords[0.0 0.0 0.0 0.0 0.0 1.0]/Domain[0.0 1.0]/Extend[true true]/Function 202 0 R/ShadingType 3>> endobj 202 0 obj <</Bounds[0.444443]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0]/FunctionType 3/Functions[203 0 R 204 0 R]>> endobj 203 0 obj <</C0[0.0]/C1[0.0]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 204 0 obj <</C0[0.0]/C1[0.539993]/Domain[0.0 1.0]/FunctionType 2/N 4.97728>> endobj 152 0 obj <</I false/K false/S/Transparency/Type/Group>> endobj 155 0 obj <</BitsPerComponent 8/ColorSpace 153 0 R/Decode[0.0 255.0]/Filter/FlateDecode/Height 104/Intent/RelativeColorimetric/Length 36/Name/X/SMask 205 0 R/Subtype/Image/Type/XObject/Width 103>>stream H1��� Om ����������x0�)� endstream endobj 153 0 obj [/Indexed 206 0 R 0 207 0 R] endobj 205 0 obj <</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 103>>/Filter/FlateDecode/Height 104/Intent/RelativeColorimetric/Length 973/Name/X/Subtype/Image/Type/XObject/Width 103>>stream HOhfpK#L3]a9a RH ;١)%<ׇQF; g%i^V^}IlFؑ%e R{zby @ЉAC A>ae4eX)Th&lHfBS^; AN3gɴAI&&FdL! ongs\pۙ+s~';ޚl{E8߻~v+=:ޟ$f/fύVoHrl`+(D/ޅ8^4h9|~^\Xfa:z4^9>^U 7kU6Q3q'wJuLM`;dX_M<[1�fIL0%ScZHCIN0e5:n3p`I0 `��0 `��0 `��Ť^N'9t`/@+VDd]/McR:cAlݚ9ˑ.9j L&݀Af(X. 7eX|XagG5vNZ߿9ۇX խQBq k d=廴QC6YfEF7 M|zDIeEm_%q1whu^zIZGZ/"7]xE"2M㯎[zRriwMԩ /Iv#~bf/[k?nݺ﹩Nm帶WȘA>ST9Gޛ K/ED/'hr97qCѠu}`9&T`*43sqp~^ IR6FDr1ldUFA^W (F<EuN2:5_8y=a/�C endstream endobj 206 0 obj [/ICCBased 174 0 R] endobj 207 0 obj <</Length 3>>stream endstream endobj 154 0 obj <</AIS true/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask 208 0 R/Type/ExtGState/ca 1.0/op false>> endobj 208 0 obj <</BC 209 0 R/G 210 0 R/S/Luminosity/Type/Mask>> endobj 209 0 obj [0.0 0.0 0.0] endobj 210 0 obj <</BBox[-1.25195 102.252 101.748 -1.74805]/Group 211 0 R/Length 57/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 212 0 R>>/ProcSet[/PDF/ImageB]/XObject<</Im0 213 0 R>>>>/Subtype/Form>>stream q /GS0 gs 103 0 0 104 -1.2519531 -1.7480469 cm /Im0 Do Q endstream endobj 211 0 obj <</CS 206 0 R/I false/K false/S/Transparency/Type/Group>> endobj 213 0 obj <</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 103>>/Filter/FlateDecode/Height 104/Intent/RelativeColorimetric/Length 973/Name/X/Subtype/Image/Type/XObject/Width 103>>stream HOhfpK#L3]a9a RH ;١)%<ׇQF; g%i^V^}IlFؑ%e R{zby @ЉAC A>ae4eX)Th&lHfBS^; AN3gɴAI&&FdL! ongs\pۙ+s~';ޚl{E8߻~v+=:ޟ$f/fύVoHrl`+(D/ޅ8^4h9|~^\Xfa:z4^9>^U 7kU6Q3q'wJuLM`;dX_M<[1�fIL0%ScZHCIN0e5:n3p`I0 `��0 `��0 `��Ť^N'9t`/@+VDd]/McR:cAlݚ9ˑ.9j L&݀Af(X. 7eX|XagG5vNZ߿9ۇX խQBq k d=廴QC6YfEF7 M|zDIeEm_%q1whu^zIZGZ/"7]xE"2M㯎[zRriwMԩ /Iv#~bf/[k?nݺ﹩Nm帶WȘA>ST9Gޛ K/ED/'hr97qCѠu}`9&T`*43sqp~^ IR6FDr1ldUFA^W (F<EuN2:5_8y=a/�C endstream endobj 212 0 obj <</AIS true/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 134 0 obj <</AntiAlias false/ColorSpace 126 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 214 0 R/ShadingType 2>> endobj 135 0 obj <</AntiAlias false/ColorSpace 126 0 R/Coords[0.0 0.0 1.0 0.0]/Domain[0.0 1.0]/Extend[true true]/Function 215 0 R/ShadingType 2>> endobj 215 0 obj <</Bounds[0.617981 0.629211 0.983139]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0]/FunctionType 3/Functions[216 0 R 217 0 R 218 0 R 219 0 R]>> endobj 216 0 obj <</C0[0.776474 0.776474 0.776474]/C1[0.694122 0.694122 0.694122]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 217 0 obj <</C0[0.694122 0.694122 0.694122]/C1[0.745102 0.745102 0.745102]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 218 0 obj <</C0[0.745102 0.745102 0.745102]/C1[0.721573 0.721573 0.721573]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 219 0 obj <</C0[0.721573 0.721573 0.721573]/C1[0.721573 0.721573 0.721573]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 214 0 obj <</Bounds[0.983139]/Domain[0.0 1.0]/Encode[0.0 1.0 0.0 1.0]/FunctionType 3/Functions[220 0 R 221 0 R]>> endobj 220 0 obj <</C0[0.941177 0.352936 0.15686]/C1[0.576477 0.0196075 0.0]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 221 0 obj <</C0[0.576477 0.0196075 0.0]/C1[0.576477 0.0196075 0.0]/Domain[0.0 1.0]/FunctionType 2/N 1.0>> endobj 120 0 obj <</Intent 222 0 R/Name(Layer 2)/Type/OCG/Usage 223 0 R>> endobj 222 0 obj [/View/Design] endobj 223 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 14.0)/Subtype/Artwork>>>> endobj 127 0 obj <</AIS true/BM/Screen/CA 0.75/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.75/op false>> endobj 129 0 obj <</AIS false/BM/Lighten/CA 0.580002/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.580002/op false>> endobj 130 0 obj <</AIS false/BM/Screen/CA 0.490005/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.490005/op false>> endobj 131 0 obj <</AIS false/BM/Normal/CA 0.580002/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.580002/op false>> endobj 132 0 obj <</AIS false/BM/Screen/CA 0.509995/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.509995/op false>> endobj 133 0 obj <</AIS false/BM/Screen/CA 0.699997/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.699997/op false>> endobj 125 0 obj <</LastModified(D:20091126015259+03'00')/Private 224 0 R>> endobj 224 0 obj <</AIMetaData 225 0 R/AIPrivateData1 226 0 R/AIPrivateData2 227 0 R/AIPrivateData3 228 0 R/AIPrivateData4 229 0 R/AIPrivateData5 230 0 R/ContainerVersion 11/CreatorVersion 14/NumBlock 5/RoundtripStreamType 1/RoundtripVersion 14>> endobj 225 0 obj <</Length 1190>>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 14.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Administrator) () %%Title: (v4_3.ai) %%CreationDate: 11/26/2009 1:52 AM %%Canvassize: 16383 %%BoundingBox: -2 -2 102 103 %%HiResBoundingBox: -1.25195 -1.74805 101.748 102.252 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 10.0 %AI12_BuildNumber: 357 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0.627451 0.776471 (Global Mediterranean Blue) %%+ 0 0 1 (Global Pure Blue) %%+ 0 1 0 (Global Pure Green) %%+ 1 0 0 (Global Pure Red) %%+ 1 0.498039 0 (Global Squash) %%+ 1 1 0 (Global Yellow) %%+ 0 0 0 ([Registration]) %AI3_Cropmarks: 0 0 100 100 %AI3_TemplateBox: 50.5 49.5 50.5 49.5 %AI3_TileBox: -247.6001 -370.8701 347.4199 470.9902 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -110 120 4 1252 620 18 0 0 69 109 0 0 0 1 1 0 1 1 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 226 0 obj <</Length 27287>>stream %%BoundingBox: -2 -2 102 103 %%HiResBoundingBox: -1.25195 -1.74805 101.748 102.252 %AI7_Thumbnail: 128 128 8 %%BeginData: 27134 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFD1EFFCBA2A87D7E7D7D537D537D777D777E %7D7D7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E %7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA2 %7D7E7DA27D7E7D7E7D7E7D7E7D7E7DA8A9FD20FFA87D4C4C4B4B214C4B4B %454C4B4B454C4B4B214C454B214B214B214B214B214B214B214B214B214B %214B214B214B214B214B214B214B214B214B214B214B214B214B214B214B %214B214B214B214B214B214B214B214B214B214B214B2145214C4CA2A8FD %1CFF764C6FA1A1C3A1C9C3C3A0C3C3C9A1C9C3C9A1C9A1C9A1C9A1C9A1C9 %A1C9A1C9A1C3A1C9A1C3A1C9A1C3A1C9A1C3A1C9A1C3A1C3A1C3A1C3A1C3 %A1C3A1C3A1C3A1C3A1C3A1C3A1C3A1A1A1C3A1A1A0C3A1A19AA19AA19AA1 %9AA19AFD05A176702152A2FD19FF7D4576A1C9C3C3C2C29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA09A %C29A9A9AC29A9A9AA09A9A9AA09A9A9AA0FD0E9A999A9A9A999A999A759A %999A6F9A999A759A9AA1A1C9A1A16F4B52FD16FFA9774BC3C9C9C2C29AC2 %C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29A9A9AC29A9A9AA0FD069A999A9A9A999A9A9A99 %9A9A9A999A9A9A999A9A9A999A9A9A999A9A9A759A999A6F9A939A75A1A1 %CA9A4B4CFD14FFAF524BC9C3C299C29AC29AC29AC29AC29AC29AC29AC299 %C29AC299C29AA099C29A9A99C29A9A99A09A9A999A9A9A999A999A999A99 %9A999A999A999A999A999A999A999A999A999A999A759A999A6F9A999A6F %9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A76A19A4B4CFD13FF7D %4BC9C9C2BCC3C2C2BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA0 %9AC29A9A9AC29A9A9AA0FD129A999A9A9A999A9A9A759A9A9A759A9A9A6F %C3A14B7DFD11FFA821A0C3C29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A99C29A9A99A09A9A999A %9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A759A999A %759A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6FA17645A8FD %10FF5276C3C39AC2C2C29AC2C2C29AC2C2C29AC2BCC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9AC2FD0A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A %9A759A9A9A6F9A9A9A6F9A759A6FA14B77FD0FFFA84B9AC39AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC299C29AC299C29A9A99C29A9A99C2 %9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A999A999A %999A999A759A999A6F9A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A %6F9A6F9A6F9A6F9A6F9A6F9A21CAFD0EFFA26FC9C2C2C2C3C2C2C2C3C2C2 %9AC3C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AA0FD12 %9A999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A6F9A9A6F7DFD0EFF76 %9AC2C2BCC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AA09AC29A9A9AC29A9A99C29A9A99C29A9A999A9A9A999A9A9A999A9A %9A999A9A9A999A999A999A999A999A999A999A999A759A999A6F9A999A6F %9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F76FD0DFFCA76A0C3 %9AC3C2C2A0C2C2C2BCC2C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A %9AA0FD0A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A9A759A9A9A6F %9A999A6F9A999A759A769A769A4BFD09FFA87DA8A8A87DA8A8A8A7A8A1A8 %A1A7A1A19AC29AC299C29AC29AC29AC299C29AC299C29AA099C29A9A99C2 %9A9A99A09A9A999A9A9A999A999A999A999A999A999A999A999A999A999A %999A999A999A999A759A999A6F9A999A6F9A759A6F9A6F9A6F9A6F9A6F9A %6F9A6F9A76A17DA1A1A87DA8A8A8A1FD06A8FD04FFA8FD0BFFAFFFAFFFA8 %FFA8A8A1C3A0C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA09AC29A9A9AC29A9A9A %A0FD129A999A9A9A939A9AA1A1A8A8FFA8FFAFFFAFFFFFFFAFFFFFFFA8FF %FFA8FD04FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8AFA8A8A1A1 %9AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A99C29A9A99A0 %9A9A999A9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A %759A999A759A999A6F9A759A6F9A76A1A1A8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFFFFFA8FFA8A8A1C3BCC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AC2FD0A9A999A9A9A999A9A %9A999A9A9A999A9A9A999A9AA1A1FFAFFFA8FFFFFFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8AFA8A19ABC99C29AC299C29A9A99C29A9A99C29A9A999A %9A9A999A9A9A999A999A999A999A999A999A999A999A999A999A999A999A %759A999A6F9A999A6F9A759A6F9A6F9A76A8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFA8FFA8FFAFA8A1C3BCC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9AA0FD0E9A999A9AA1A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19ABC9AC29AA09AC29A9A9AC29A9A %99C29A9A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A999A999A %999A999A999A999A999A759A999A76A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFFA8A8A0C29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0 %FD0A9A999A9A9A999A9A9A93A0A1FFA9FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A19A99C29A %9A99C29A9A99A09A9A999A9A9A999A999A999A999A999A999A999A999A99 %9A999A999A999A999A999A759A999A6F9A93A0A1FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFFF %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFFFFFA1C39AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %A09AC29AA09AC29A9A9AC29A9A9AA0FD099AA1A8FFFFFFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA1A0999A9AC29A9A9AC29A9A99C29A9A99A09A9A999A9A9A99 %9A9A9A999A9A9A999A999A999A999A999A999A999A999A75A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFFFFFA8C39AC29AC29AC29AC29AC29AC29AC29A %C29AA09AC29A9A9AC29A9A9AC2FD0A9A999A9A9A999A9AA8A8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1999A99C29A9A999A9A9A999A9A9A99 %9A999A999A999A999A999A999A999A999A999A999A999A759A999A76A8A8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AA0FD079A %A8FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A099C29A9A %99C29A9A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A999A999A %999A999A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8A19AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0 %FD0B9AA8AFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA19A99A09A9A999A9A9A999A999A999A999A999A999A999A999A999A %999A999A999A999A99A1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FF %A8FFAFFFA8FFAFFFA8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFFFFFA1C29AC29AC29AC29AC29AC29AC29AC29AC29AA0 %9AC29AA09AC29A9A9AC2FD059AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFFAFFFFFFFAFFFFFFFA8FFA8A8FD04 %FFFD05A8A1A8A1A7A1A8A7A8A8AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8A9A0BC9A9A99C29A9A99A09A9A999A9A9A %999A9A9A999A9A9A999A999A999A999A93A1A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A87DA8A1A17DA1FD05A8 %FD09FF9AC2C3C2C29AC2A0C3A0C9A8A8A8FFFFFFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFFFA89AC29AC29AC29AC29AC29AA09AC29A9A %9AC29A9A9AC2FD099AA0A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFFFFFA8A87DA1769A759A6F9A759A6FCAFD0DFF9AC29AC29A %C29AC29AC299C29AA1A1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8A8999A9A9A999A9A9A999A999A999A999A999A999A999A99 %9A999A999A999A7DAFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A8769A6F9A6F9A6F9A6F9A6F9A6F6FA2FD0DFFA0C2C3C2C2C2C3 %C2C2C2C3C2C2BCC3A1A8A8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8A79AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9ABCA1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFF %A1A19A9A939A9A9A759A9A9A6F9A9A9A6FCBFD0DFF9AC29AC29AC29AC29A %C29AC29AC29AC29AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A0999A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A99 %9A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8769A6F %9A6F9A6F9A6F9A6F9A6F9A6F9A756FA8FD0CFFCBFD07C29AC2C2C29AC2C2 %C29AC2BCC2A1FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA1 %C29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0FD059AA1A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1769A999A759A9A9A6F9A9A %9A6F9A759A6F9A6FCAFD0DFF9AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC2A1A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD049A99 %9A999A999A999A999A999A999A999A999A999A93A07DFFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A16F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9AA8FD0DFFC2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2C2C29AC2 %A1AFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A89AC29AC29AC2 %9AC29AC29AC29AA09AC29AA09AC29A9A9ABCA1FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFCAFFA8A1999A999A9A9A759A9A9A759A9A9A6F9A9A9A %759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC29AC29AC2A0A8 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A0999A99A09A9A999A %9A9A999A9A9A999A9A9A999A999A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA89A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A %A8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC2A1AFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA1C29AC29AC29AA09AC29A %9A9AC29A9A9AC2FD059AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A1999A999A9A9A759A9A9A6F9A9A9A6F9A759A6F9A769A6FFD0EFF9A %C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC299C2A1A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD049A999A999A999A999A999A999A %999A999A999A7DAFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A16F9A %6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F6FA8FD0DFFC2C2C3C2 %C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2C29AC2BCC2A1FFFFFFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29AC29AC29AC29AA09AC29A %9A9ABCA0A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFAFA1999A9A9A99 %9A9A9A999A9A9A759A9A9A759A9A9A6F9A9A9A6FFD0EFF9AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AC29AA07DFFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8AF7DC29A9A999A9A9A999A9A9A999A9A9A999A9A9A99 %A1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8759A6F9A759A6F9A75 %9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F70A8FD0CFFCBFD07C29AC2C2C29A %C2C2C29AC2C2C29AC29AC29AC2BCA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFAFA89AC29AC29AC29A9A9AC29A9A9AC29A9A9AA09AA07DFFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFFFAF769A9A9A999A9A9A759A9A9A759A9A %9A6F9A9A9A6F9A759A6F9A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC29AC299C29AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A1999A999A999A999A999A999A999A999A999A76A8A8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FF7D9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9A6F76A8FD0DFFC2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2 %C2C29AC2C2C29AC29AC2A0FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A1C29AC29AC29AC29AC29AA09AC29AA09AC29AA1A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8A1999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A %6F9A9A9A759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC27DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04 %9A999A9A9A999A9A9A999A9A9A999A7DA8A8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A8999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9AA8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC2 %9AC29AC29AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AA0 %9AC29A9A9AC29A9A9AC29A9A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8AFFD049A999A9A9A999A9A9A759A9A9A6F9A9A9A6F9A759A6F9A769A6F %FD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC299 %C29AFD13A8A09A999A999A999A999A999A999A999A99A17EFFFD0FA8FFA1 %9A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F6FA8 %FD0DFFC2C2C3C2C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2C29AC29AC29AC2 %9AC2A1FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29AC2 %9AC29AA09AC29A9AA1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1999A %9A9A999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A6F9A9A9A6FFD0EFF %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA1 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8AFA19A999A9A9A999A9A9A999A %9A9A999A99A1A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD04A89A9A6F9A999A6F %9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F70A8FD0CFFCBFD07 %C29AC2C2C29AC2C2C29AC2C2C29AC29AC29AC29AC29AC2A0A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8A89AC29AC29A9A9AC29A9A9AC29A9A9AC2A1 %A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A0999A999A9A9A999A9A9A75 %9A9A9A759A9A9A6F9A9A9A6F9A759A6F9A6FFD0EFF9AC29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC299C29AC299C2A1FD11A87DA0999A99 %9A999A999A999A999A999A99FD13A86F9A759A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9A6F9A6F9A6F9A6F76A8FD0DFFC2C2C3C2C3C2C2C2C3C2C2 %BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC29AA8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8A8A0C29AC29AC29AC29AA09AC29AA09AC3A8AFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA1FD079A999A9A9A999A9A9A759A9A9A759A %9A9A6F9A9A9A759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC2A1FD11A87DA1999A999A9A9A999A999A999A %999A9AFD12A8A16F9A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9AA8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2 %BCC29AC29AC29AC29AC29AC9FD12A8A0C29A9A99BC9A9A999A999A999A99 %9AA8AFFD0FA8AFA1996F9A939A6F9A999A6F9A999A6F9A9A9A759A9A9A6F %9A759A6F9A769A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC299C29ABCA0FD11A87EA0939A9999939A9399939993996F %9976FD12A8A16E936F936F936F996F936F996F996F9A6F9A6F9A6F9A6F9A %6F9A6F9A6F6FA8FD0DFFC2C2C3C2C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2 %C29AC29AC29AC29AC29AC3FD12A89ABC999A999A9999939A93999399939A %A8AFFD0FA8AF9A936F996F936F996F996F996F996F9A6F996F9A6F9A6F9A %759A6F9A9A9A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29ABCA0FD11A884A093999399939993936F9993936E93 %99FD12A8A168936E936E936E936F6F6E936F6F6F936F6F6F936F6F6F996F %936F9A6F6FA8FD0CFFCBFD07C29AC2C2C29AC2C2C29AC2C2C29AC29AC29A %C29AC29AC29AA1FD12A89A99939993999399939993999393929AFD11A8AF %76936E936E936F936E936F936E936F936F936F936F936F936F936F936F9A %6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC299BCA0A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87D9A92936E939293 %6E936E936E936E936FA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A16893 %686F6893686F686F686F686F686F686F686F686F6E6F68FD056FA8FD0DFF %C2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC299 %A1FD12A89A939399939993999393929993939299FD11A8A9A1936E936E93 %6E936E936E936E936E936E936E936E936F936E936F936F996FFD0EFF9AC2 %A0C29AC29AC29AC29AC29AC29AC29AC29AC29AC29ABC99BC999A99BCA1FD %11A87D9A92936E9392936E9392936E936E926EFD13A86892686E6893686E %686F686E686F686E686F686F686F686F686F686F6E6FA8FD0DFFC2C2C3C2 %C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC29ABC99BC99BC99FD13A8FD %049392939293929392936E9392937DAFFD11A89968936E93689368936893 %686F6893686F6893686F686F686F686F6E6F68FD0EFF9AC29AC29AC29AC2 %9AC29AC29AC29AC29AC299C299BC99BC999993BB939A7DFD11A87D936E93 %92936E936E936E936E92689368A184FD10A8A97668686E686E686E686E68 %6E6868686E6868686E6868686E6868686F686FA8FD0DFFC2C2C3C2C2C2C3 %C2C2C2C3C2C29AC2C2C29AC29AC299C299BC99BC99BB9AAFFD0FA8FFA8A1 %9299929392939293929392939293929276AFFD11A8A16893689368936893 %689368936893686F6893686F6893686F686F686F68FD0EFF9AC29AC29AC2 %9AC29AC29AC29AC299C299BC99BC99BB99BB999993BB93A1FD12A876926E %9392936E9392936E936E926893689A84FD12A86F6892686E686E686E686E %6868686E6868686E6868686E6868686F6869A8FD0CFFCBFD07C29AC2C2C2 %9AC2BCC299C299BC99BC99BB99BB99BB93BCFD12A884A092939293929392 %939293929392936E9393FD12A8AF768C689368926893686E6893686E686F %686E686F686E686F686E686F68FD0EFF9AC29AC29AC29AC29AC299BC99BC %99BB99BB99BB93BB939992BB93939AFD13A86F9292936E936E9268936E92 %68936E9268937DFD12A8A16868686E6868686E6868686EFD0F6869A8FD0D %FFC2C2C3C2C3C2C2BCC2BCC299C2BBBC99BC99BB99BC99BB93BB99BB93FD %13A87D9992939293929392939293929392936E9392A1A8FFFD0FA8FFA89A %68936893689368926893686E6893686E686F686E686F686E686F68FD0EFF %9AC2A0C29AC29AC299C299BC99BC99BB99BB99BB93BB939992BB929AFD13 %A8A1929392936E9392926E936E9268936E92689275FD12A8AF7D6E686E68 %6E686E6868686E6868686EFD0B6869A8FD0DFFC2C2C3C2C29AC2BCC299C2 %BBBC99BC99BB99BB99BB93BB93BB92BBA7AFFD12A89A9292939293929392 %93929392936E9392936899FD13A8AF75686893686E6893686E686F686E68 %6E686E686E6868686E686E68FD0EFF9AC29AC299C299BC99BB99BB99BB93 %BB93BB92BB939992BB929276A9FD12A87D9392926E936E9268936E926893 %6E926893689268A1FD14A86868686E6868686EFD0E6844686868A8FD0DFF %C2C2C2BCC2BBC2BBC299C2BBBB99BB99BB99BB99BB93BB93BB99AFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8A192939293929392939293929392 %93929392936E929AAFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A168 %9368926893686E6893686E686F686E686F686E686E686F68FD0EFF9AC299 %C299BC99BC99BB99BB99BB93BB93BB92BB939992BB93FD15A86F9292936E %9392926E9392926E936E9268936E926893A1FD14A876686E6868686E6868 %686EFD0E68A8FD0CFFCBC2C2C299C2BBBC99BCBBBB99BB99BB93BB99BB93 %BB93BB92A7FD13A8AFA1939293929392939293929392936E9392936E9392 %9368A1FD13A8FFA8996893686E6893686E686E686E686E6868686E686868 %6F68FD0EFF99C299BC99BB99BB93BB99BB93BB93BB92BB929992BB92A1FD %14A8849A8C926E9392926E936E9268936E9268936892689268926FFD14A8 %AFA86F686EFD0E68446868684468A8FD0DFFC2BCC2BBC2BBBC99BCBBBB99 %BB99BB93BB99BB93BB93A1A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD %04A89393929992939293929392939293929392936E9392936E93A1FFA8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FFA899686E6893686E6893686E %686F686E686E6868686F68FD0EFF99C299BB99BB99BB93BB99BB93BB93BB %92BB92B592A7FD16A876929293929392936E9392926E936E9268936E9268 %936E926899FD15A8AFA89A6868686EFD1068A8FD0DFFBCBBC2BBBB99BBBB %BB99BB99BB93BB99BB92BB99A8A8FFFD13A8FFA199929392939293929392 %939293929392936E9392936E93929368A1FD15A8FFA8A16868686E686E68 %6E6868686E6868686E686E68FD0EFF99BC99BB99BB93BB93BB92BB93BB92 %BB92999AFD17A8849A92936E9392926E936E9268936E9268936E92689368 %92689268926FFD18A8A16FFD0D6844686868A8FD0DFFBCBBC2BBBB99BBBB %BB99BBBBBB92BB99A0A1FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %FFA8CAA8A8929392999293929392939293929392939293929392936E9392 %936E92A0FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFAFAF76 %936868686F686E686F686E686E686E68FD0EFF99BB99BB99BB93BB93BB92 %BB92999AFD1BA86F929293929392936E9392926E9392926E936E9268936E %92689368926893A1AFFD17A8AFA8A16FFD0D68A8FD0DFFBCFD06BB93BB99 %9A9AA7A8AFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %AF9A92929392939293929392939293929392936E9392936E9392936E936E %93689AA8FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FFA8FFA1 %9A6F6FFD0968FD0AFFA8FFA8A89AC3A0A09AA09AA17DFD1EA8A97D939293 %929392926E9392926E936E9268936E9268936892689268926892689268A1 %FD1BA8FFA8A8A1A876766F766F766F76A8FFA8FFA8FD04FFFD05A8FFA8FF %A8FFA8AFA8FFA8FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8FFA89992939299929392999293929392939293929392939293 %6E9392936E9392936E936EA8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8FFA8FFA8FFA9FFA8FFA8FFA8A8A8FFA8A8FD04FFFD %2AA8FFA89A9293929392939293929392936E9392926E936E9268936E9268 %936E926893689268926FFD2CA8FD04FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FFA8A0 %929392999293929392939293929392939293929392936E9392936E939293 %6E936E9368926FA9A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD04A8FD04FFFD28A8AFA8A19293 %9293929392936E9392926E936E9268936E9268936E926893689268926892 %68926892689275FD2AA8FD04FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A192BB929992 %99929392999293929392939293929392939293929392936E9392936E936E %936E936E9276FFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFFD28A8A192929293929392 %939293929392936E9392926E9392926E936E9268936E9268936892689368 %926892686E76AFFD27A8FD04FFFD05A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8 %A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A192B592939299929392 %9392939293929392939293929392936E9392936E9392936E936E9368936E %936893689275FFAFFFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8FD04FFFD24A8AFA8A0929292939293 %92939293929392926E9392926E936E9268936E9268936892689268926892 %68926892686E689268686FFD26A8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A092BB92BB92 %9992BB929392999293929992939293929392939293929392936E9392936E %9392936E936E9368936E9368926FA8AFFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFFD22A8AFA199 %92939293929392939293929392939293929392936E9392926E936E926893 %6E9268936E9268936892689368926892686E689268A1A8FFFD21A8FD04FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A89ABB929992BB9293929992939299929392939293929392939293 %9293929392936E9392936E9392936E936E9368936E9368936E926892689A %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %FD04A8FD04FFFD1EA8AFA8A7999292939293929392939293929392939293 %6E9392926E936E9268936E9268936E926893689268926892689268926892 %686E6892686E686E686F7CAFFD1FA8FD04FFA8A8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8C292B592BB93BB92BB9399 %92BB92999299929392999293929392939293929392939293929392936E93 %92936E936E936E936E9368936E9368936893689275A8A8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFFD1AA8AFA8A8 %9A9992BB929392999293929392939293929392939293929392936E939292 %6E9392926E936E9268936E926893689268936892689268926892686E6892 %686E686868767DFFA8FFFD19A8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8A8A8FFA8FFA8AFA7A093BB92BB92BB939992BB929992BB9293 %92999293929392939293929392939293929392936E9392936E9392936E93 %6E9368936E9368936E9368936892689368926892686F75A8A8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFFD12A8FFA8A9A8 %A9A1A199BB92939299929392939293929392939293929392939293929392 %926E9392926E936E9268936E926893689268926892689268926892686E68 %92686E6892686E686E686E686E6868686F76A8A8FFA8AFFD13A8FD04FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A7C39ABB92BB93BB92BB93 %BB92BB93BB92BB939992BB929992BB929392999293929992939293929392 %939293929392936E9392936E9392936E936E9368936E9368936E93689368 %936893689368936868689A9AA8A8FFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A8FD04FFFD06A8AFA8A8A8AFFD04A8A1A1A0A099BB92BB929992BB92 %9392BB92939299929392939293929392939293929392939293929392936E %9392926E936E9268936E9268936E9268936892689368926892686E689268 %6E6892686E686E6868686EFD05686F6F9A7DA8A1FD04A8AFA8AFA8FFFD04 %A87DFD06FFA8FFAFA19AC3A0C29AC29ABC99BB99BB92BB93BB92BB93BB92 %BB93BB92BB93BB92BB929992BB9293929992939299929392939293929392 %9392939293929392936E9392936E9392936E936E9368936E9368936E9268 %936892689368926893686E6893686E686E6868686E686F6E936F9A6F9A76 %7676FFA8FFA8FD0AFFA19299BB92BB92BB92BB92BB92BB92BB929992BB92 %939299929392999293929392939293929392939293929392936E9392926E %936E9268936E9268936E926893689268926892689268926892686E689268 %6E686E686E686E6868686E6868686EFD0A6844686868446E4477FD0FFF6F %C2C2BB99BBBBBB99BB99BB93BB99BB93BB93BB92BB93BB92BB93BB92BB93 %BB92BB939992BB9299929992939299929392939293929392939293929392 %9392936E9392936E936E936E936E9368936E936893689368936893689368 %926893686E6893686E686F686E686F686E686F6845A8FD0FFF7792C299BB %93BB93BB92BB93BB92BB92BB92BB929992BB929392BB9293929992939293 %92939293929392939293929392936E9392926E9392926E936E9268936E92 %6893689268936892689268926892686E6892686E686E686E686E6868686E %6868686EFD0C684CFD10FFA86FBBC3BBBB99BBBBBB93BB99BB92BB93BB92 %BB93BB92BB93BB92BB939992BB929992BB92939299929392939293929392 %9392939293929392936E9392936E9392936E936E9368936E9368936E9368 %936892689368926893686E6893686E6893686E686E686E686EFD04686E6F %20A8FD11FF776F99C293BB92BB93BB92BB92BB92BB929992BB9293929992 %9392939293929392939293929392939293929392926E9392926E936E9268 %936E926893689268926892689268926892686E6892686E6892686E686E68 %6E686E6868686EFD0F68932077FD13FF526FC2C399BBBBBB99BB99BB93BB %93BB93BB93BB92BB93BB92BB93BB92BB939992BB929992BB929392999293 %929992939293929392939293929392936E9392936E9392936E936E936893 %6E9368936E936893689368936893689368926893686E6893686E686F6868 %6F9A204CFD15FF4C4B9AC399BB92BB92BB92BB92BB929992BB929392BB92 %9392999293929392939293929392939293929392926E9392926E9392926E %936E9268936E926893689268926892689268926892686E6892686E689268 %6E686E6868686E6868686EFD0768936F70204CA8FD16FF524B6FA1C2C2BB %BB99BB99BB93BB99BB93BB93BB93BB93BB92BB93BB92BB939992BB939992 %99939392999293929992939293929392939293929392936E9392936E9392 %936E936E936E936E9368936E9368936E93689368936893686F689368936E %93939A704B2077FD19FF7D4C206F6F9A9AC29AC29AC29AC29AC29AC29AC2 %9AC29AA09AC29AA09AC29A9A99A09A9A99A09A9A999A9A9A999A9A9A999A %9A9A999A999A999A999A999A999A999A999A759A999A759A999A6F9A759A %6F9A759A6F9A759A6F9A6F9A6F9A76764B4C20214BA8FD1CFFA24C4C454B %45704B6F4B6F4B6F4B6F4B6F456F4B4B456F4B4B456F4B4B456F454B454B %454B454B454B454B454B454B454B454B454B454B454B454B454B454B454B %454B454B454B454B454B454B454B454B454B454B454B454B454B2145204B %4B77A8FD20FFA8A87D7D52775377527753775277537D537D777D537D777D %537D777D537D777D537D777D537D777D537D777D537D777D537D777D537D %777D537D777D537D777D537D777D537D5377527752534C534C534C534C53 %4C535253527D7DA8A8FD70FFA9FFAFFFA8FFAFFFA8FDFCFFFDFCFFFDA1FF %FF %%EndData endstream endobj 227 0 obj <</Length 65536>>stream %AI12_CompressedDataxkɑ-�CFXn#axVՌbhPjĽl/=~n+U̇gd<͎?eX=~|zOz~w~?n×ӷ>~>GϞqwOohl߼~$ OssU5>Կ;|͛o}34wz/Wt_]|xߦ/]W]ۡx/ rm?~Oa7~/̛a~3[_ n~[/޽ꟿOoa4Ǜ/q}|ۯ/~ {c|p??y_ӧ7{oz/wަX鳿~Ʒ'OWvf4}ۿ+fSS΃>}7緿ͯۯyg ٮz~=y>?ZWUW{ <#X9~S<ǻ-/4l۰A7?޿} 񱑎>~=#qz/*޽_73A?Φކo~˺\o~z[ =\RըZo8Ɛ_>˻_ӻY@+<gRޟ? W;sW"||:"x/l>C|  |K8bC/;x7>~o?ׯ?3_gpV@wp]o= oy}3>WO\3߿>cwϼG]5wWlDz!o#zʭ_>f~ۿ>:2{gzϏCť'/o޿Oo?/<tޫ΢?^/}b~? ;} ނ(_/pxɼ2} z_a`=o>8^Ç7_/P}aa^ׯ~UnjXMRnXRork]F7mM4Mׄnnfk׶k};~n]չwc7wk_uzߏ/oW$O~_6TC=Zn0`0˰pNc5#l،ء/ql;~5_vX֢uh=GF5d_me;Ubu^Κ֥#W?6i#^z2+)zXU x^ ~]ݪg>oq]:6wjj/-{(pe3}3eSWwB3}7?tkӃwׯ QH}ɟ_Ԩ'?E'eJx&M'P䣢 ~Jl`ȮFvmj'1izG9cMvF_mC4q#^xŭvW`;~#(3x E* *F++'Wlq2?YTOZ'ޤQrΣO!2W/z+Ywϲ%aːO%z53kbPx#,@pN\.'5̳O^I25bQx;;bW\=z3&i%U5Zn#\Da-sB4[4nr2ӅI"'XcifS .DPnEWpщ \aDsy\naV_p, <.Up�(t#/=x 嘊㕘VZm9\qeeWNv5_ `[ٖ wqW[{Wn5Fr: ?uTomC?%XuSdI_խrZe|qڥYgֈk մ<C@4@Z̻522@PAlU6C0B lJ yz *!piw4Ծf{+}+~+�n<Pu!Z;zҙ n-zc`_N|R +m ^p m qтmpn.z5]wBV6$"FBA Cׯok5:V{Ofj[1 #^ڟӈ/ţxr_<ʋGy(/~#GiWcr4{o zu�;};&uxap;x: 均&0C<tcT?>nM]lwpcF_!I{.UxxF86`q�(ʺWR{LB31fi^ 2oZ̐58jUj0Ri) f7N^Mf~ɣ9fFkpΣyOlL(]t6vŴͲmlnN[u`{7moȰVj fL/BHBU1ԇ|l/և:8'�źr BuS+1UW_qU")ت*7 _H'{+@cTpꠂh2l~ )Kj qj2ZVIWgWTTQUEFix*euJG.+5YZя=M?ч؍cB/�첦0Za^s:D.;w0cW0uk{[8NW4xl¸q#;.m.S8 Rh͗[j-\y2, |G\~23W\F%MpX[%vT oXrzg�y<,2[e]Vt|RzDp+h]m=m`B5"~:gOh[6xm',>>d#6$>AHl�|tM:a0no9۹ϼy1`_r0⚜\Fs.R1 }sι3Up6cG g熇h' g VHy8:88jLmp-˼LxXtxsۊɷ a:0搂;an4܈d2ANi:iG~x!Ai2 6NXI0&) S_\.G-LlȚ0m19rt҆ G,`} Gc6x5x]&bϐ8I&JpL#1^nG0tEت Ͻ+3/.&D; EȈ ^.'o*&G}7|AG-0Oc_ yFGpf<MzpYaJ7!'MxrmԵ)CBX)O{w_SnhO5Ӟr񔄨B}09~1fYw\h/C8˅Hg}`'Së \cAu?ZE0ߎqK N= [W)zG]6ؿ/h7CK.8d 5wbG1\㮩0t zo9Xsu\r*f\xǃNl9蘽{!L|=娿`5Ec ;q6븼_]/=Lxwhj|}qӀvc_CW)+W:C0?}&?vmiq9Bm{߾}kM$A7mkoĴ[H0 44NXQ-  ܭX{{U iMW_PV&BZ"W uCg&5mgҤYi3Q6HI 3&NI %:,oP/<B6t,99ǰR>!$:7g7Lo0Df8x );ǭ9Ŭ:m(<avh14S@!s �qcI5̌ :ht%%,='FpY]}Jik6љ:, .pyI&&_׬{um{P0Pr�1kKbϭ.ǃե j HAҮ/եY_j6Wq+fL$Mr"ZB1)@}Zޫ0)Vg%ݷw[^;dYR|Q=Jc~Dm<̗[E4jr_Ù>cB\љџ,ӒJNŐs.z-+H%+&]`PҥO}`dJПdB0fVX$[ Op* D�35lN`\UArI K^s^X0`>m05&[إ ی[GqjpJ`rˉ\]0Jٸeekh$z,|E  ,R/%W%?EWW.G׳V͙MBfSz#hlVѱ�#Nh[H"p΂^jFO51DžHr$*_9Ԝ:/# cnBdbpP`!3>3I0MˆTp""[OjJgӄqyk28r_[̪"vS/Y&2Rň/IH 7PT.O$-Y󳣞!=s5rϓOϔOBBE-‰ ڒ'4AŁ m|'_=]Ǩc$.j$Ab,#I<D�4ٟOGsRh`W*a^W3bUZ(SӟaR/*Ɍ,+ 6`Op͆e5EF7vIt> Qd?r{DG|rG]Lq9̺d>W~fJF. "4ʡp{Up#x'&az=qqkt`ƿ ?p .#}s\Zy"`b6BJա*Cφ@:ՠ8: vU㏮J87w [ĚXY-lJh>-ݒtW�۝wT@ !Rs9C *Zbڲ`2X`Zilnl]3vg`M.|Z*Ҽڍhv*1,m|XhOZxϙv 3올c_a}Ȅc>Խm =ߗl!O$1IFsR'MJdnrᙄ�-7=jW L 4~Y~cʴe39h>M'9pO k83 ,厇'˜m AaJ!pyUEUɟKr.$Wעo'|ހ�{F7>^0%igJ#Yc V#!IE,x2 $ZA&Gd':FNH<$~ڐTUǬwH}v\mcs1S;뚊1-U<gP&ΙX\,I6q0l&hv뇠F9-gc�3aS1=f|O9˪C/Fo$(ИFFxy<vdêc05 PkE@pZW W6 [+ 1{Cs\Oflsv[i=b �+1`;Yr5\s�kЃ&E1!Pp! b'W ?a;:�v{+ &pn/+To=B` ^W= N[ HP l>4 {wDwS]-n~0!/6|\C<H٦iXp]Hľ4M˷rŃ6b6qpNw-'-`\oVj",ob.uh3`#ׯxѳ צ @w a* 7]ئ)t{ eR9MloHYQoE/ބ _Qgp[ ei0yeKp -$`" %t8RC)0!+\Jܐps bo{L#!(맄ZlN+:lҵD.Bofeeƣ`y(] dz`. T-$XKiF.GA- m6}~ Ŗ`ڸ 2I+,XxFNGx'p2(W ~^go'--#'0 %#}v9qViwj!+,Ul I%- b4'fhR'M ~Z˜czf ňE8 qxvq,, ܑ4_tmԤK)Q]2ImL^w[bfĮan&tY4\\w\`2uByDJsWx S!3hoĴ+,_⡸Ӣ7y,$PqˍD a2*]j"OhXb{qgFߥH_+G<J`Vm 1GW ,v4⒄@_'.( xZ L;5#/N1#2-$o+Sַ4 :fssƉ٤MIRRO pJQs|5XD(VW&~i\bGFJuoA {$oq9Hwž}Ln:,L{5ZЊp᭸e"iĿ Vc*d6HM}LVXgp=p9 ׋Z%׊\)>>9̞$k)YIOE1`Ky$9XjUMjɮfd%+&D=94?^KGP?I:?Vs}mrek99 Xlۘ-`}*P�Jt .y)E&KfEϨK%/p( 0TP RHF &_hy͞.o#kCb8t~I@ )1`a%=p{pt*:1m fF5gsQ{IA Vw)s*VY<7NZWUQ g Y2SkZU<1 3'=k,,fiŬ�z&p9 y5hׁKBEQ�)cTT'j5<i&K~UH^2 \B`7"Mw52A0Yv PeUr�; 9 rxzS%A{JG 8}eքF}S"9 a c@.IyDNT}Yy8ɰX!f*a 4=G턋e t#6֎t]c0Lra圅W! y.pO١I9pO޿?yO1%3`b=(PkI)mbU/4ô9L| �:5I{</FL.Nָ@UGb[ L08aʗF<9_BD·>$]Ϟ\c9#8gȲM[C03I\* �Te7>s✼9|ěx; ?JU& }ҹoG-pȳW1idfK eSVR>'J`ҫ е�-|,.+>K9'Ũ/,dL%J'p r9VXR@zH_𙧁P&r̭>D)#^#VMéwІC3Z?ѲrdہFuhG4.ڮ1PQigw4H<z3 `Ews/bϙy^eI뉸~3R%HYsAI]nRM&[1~5` 'tXMVOb*≬l*fg-ϑb]j5G0M+l)Q0p Fp)fY@hUmĐ^4P]#�A�7MXD1aP93MW!Bɠ"I_ w('7,Ok̨ hC`aֆː0KvA yZNXb _W(*VJωY6`S(r?< Ai=@D΋<Dv"j6"`6f:e"{�\%v~.p]ʮA;g�a )a̰J+X+V&AhBm=2F!|gxmq`XB�nkqמ5Z -i;)eMb$KbzslI%;�ڂ)YZBX;tfV[2ѓu-!CF{U a(vSєlaіs[\lo'KEBQJ?*4RjFظEgsj fLʑ6rqC8|6χxNe5e}H uۇRZS(|rf\:II���jT86Һ܍�lF#jɋ dz䥃&Ӊq.^8x`+9=vq4_HH 8yt8Y8 n@JXxxv !v&8R-v` #OZ5h3 4ɼ1dƘJD!4F/kF8FӤM <Ou 0}3#P*FZ!Xg),!K:{afg )hpR'{EM[R֦E[!ҢS;j8Y+L*w}#2b(݄.RI G"r*J\"}% a6cvi1I*\%,&d!ˈSb㘎LID10ZAh0Ip|%IcILtѤFzqM$x ˰{Y1 v( ŐA [x T$ȟ+~.߲h_b}ˉZh36�#+y叜JKU)Ђ22uGUsss97i+?itKtt llTNؾ^bI?V>eq4 ,iߵyL~ X4~M gf[;_z xZWpA;Ha}pAr K= `Ln༲Į8{ɓ](8uRGڗ fa w]2x} ʗ{b)o#AdZ#>Wr3U:L`XRYy8ٶ0–c蛛A_q'?_C.di\m"ae3qֿmmAZj„Ie�q8떯#:C�,X[h0 6 ƊAhXg ZWBڭkVB] *ض+fE?ia2m?mڏ"!ʎ\1r3ZYόۂ9pZZҹB׷ɒ4.><|, (5.eRř&XBb- ^"1HAϷ$,}OpRۆ>IPTiFD)"K?0W&)22[|npuԥy1<tU($n{jaֆ{0}AC= =exat M3aT<mVVuVx[}jA-]jjGdqxZ|E/.^ck/X#9CGґpu}CH.XXb,[/w:j"/}vP`F* b~mP6!Ȕ7 |fzҕ3=G?hK5*n!ZZlڨCIh`ʾ"z&$܌~ϘNGF 'Þ|cIAo9TE,hG4م _gl#X m>ڔc2/xDOU#=zBd䟁q02 qڽs82?Rbq_9W]MJdzC()݈j7o'�D[`{R} XS͜#|s|gaskO3*FwlgPpT=v>yW9c5\t~ 8~@ݺV`e_ gt9$ƪ+6,֯r#SR5@!>lVrb%Sh<ΒOpf௙H58dzq"KА𔐂Pƙ̑Pq'Fy:yru]*4s4#In.'S%Z<1sVr3*&&;Ay3N dd 82J ,Ӝ潾 LT ]*<&-ǩ=1Dpv +]+`ipz@qk-և`2{O祧`:Ά '4q(L>Oz=&'rRG>Rm(>l2Dѐ./s^9BTbŠ}5z^n}#]ǟpvM_3&Hֈ`ʨItޠ!tW/hfh p Im"h HjzXe�6Kb%Ṿ#Eۏ,`m4`]t=+n)7 IwClr He-ڥR(3|-.e vS Q>7 D>'.i4% CQGayD 3i܊[zp W2UJ1:,;n.H} 8Cdq?i<5 {Y] C`lO9>%Z+4~55Zí+ud=$Mն8miApwnm1v(,b3 }2/[ 0&b Ls혜!,]'Xzd2Lm?in#Ƃ3S_� Om^lēV'c;^ؒ`Ĝ4<ET<TʕjFBxT Ț<τs)dX^˥x(oy&bΣ^Y� Fc-M.brCϘT^QhZ]$!D:�?Ք\WaBE=:cZ &Nim߳wv8-v!q 1dʑy ӳֹlpfmXT İ2\!B`q.Ӏ eX6|2qhQac >w\ЂrrM{W&0o#NnO4}YF (%DpG0Uݍt!ěPc8%XBX*Ske*XIIe&&g"52p> Z馬^j\Lt6I^䀳%ß5غcQo I)åk^\1Z(0B23}윥P ^sh;T#f(qcКy26)#w "DN0͵0jXTCew3/1 \d"N^5gv[AMp]V"&xliΩtfPWPHg `^`9qV I(]C|=2_JkpR,$ FBEDP,Bp ϰ(~M,ڠh8 Ԕ3 %Lu7dU܁AkNgAwW9̍ޏ%@|5KV+q 6EqXη(W\AHJ0D~{Q_B4ߞ;xph<<z 7ehp5ӤNB7V>FYKH@PT՚bCpi!"|4"d!Y֌xփnJ"fDs&XE,}Z-'d*Y)s%*،!㿪*9x/<A g Vj~HXޔN`m9sY)]6k#A6"U)0 RUSCF "zdtZ3 DDcG)Ku'pjSx2LbKfŕKv`-۩ W[ұu$91&ɮW=~q*v5%εWtC1(w0Pq1D1gr,gb; HXPz!*!:Nhz8f[0k#XS2V"Π7CaK1Xa=T<xX=ԍ߾}wz)D#0hBBX&B;qBβ96E|k:ڹUa`&5* P-%()B2:M-^,A&o22yLBmR³p,{U:oV 7˲$,j"2r-<|@;)uZ8XİTas!]41:K’Gh,r!m̝ %Z>ޝ] ϶90#1w-9i\,4J]'\Y||12}}' L~1;©&Vy3FôGzn/G2֛wOn?(Xǂ}6[Q^<"=hIv:m >?VFS[ή2ٴyTj/).Y[D%hWqj-s˨Aqx* r9wjt$H[B:5?0rmj`Β;c}L#}:=X<Q`pmx^u4XbqczK3O=pգpjᴑM.N=IHR,K}L,E[cN:�{MŖߑY9i sHkHh.h;ʯ?zU9tәb|9%*=g&.߆sFV<'jCJe;k>ҭ>nr;:ǓsC29?P> k<Y'۝ӥ`{G w_x57==Z#ݓW"Q翩V8+ҫ$wMW破7  HKLjd [M=7={44yo#O4=ҸsLyS+ȴ~I`4_Dx9 =I% 0e2Qw%#9._pZ iP'y#mls<ޅD-&f#\f T;ąG"Q2sƫ\lhJϿCNѿ1Ƿ0}wU}ei#rk$a,_kH*LAȕoWܲY+ݲAYyq^:9o>N] gV =1er߀t�XN7a.&+cEA:1i=蛤GHn | 5kƅlŤp|mxՠzq'|>=Fkx19Ƙ3+!&5nTDsGZ.?yTf|v6*߽Oݿ[2Sc$pSl,|qp s/nڮū Ӫ=+jFk=?>Խ*LmdUb]wkV/W7N{m~ oW{~gpMuoc=:]IߒN+NYdW]6{UgS?|m[^+yuv'߿\6kbeaJypKW67/V_ gaf-#xI7Qvc߱_ӬaWW\} oߠjjqwpNL Is9U~*ӟ1᮳:?TEaC~|]5ZmCc�1lkE^A[( ּaC<۵0u`!.#f|~+2Y.?";bUX |H?{I&A\rsR!ACc>d(OBtԪ^ Q:_tjrj0MuDՠaҎI h|FeY96k!@$"fb#e'65- 9Dۦ--F£Ȟ[>Z`,>Y^_&9l㼳ҷܿ=H8 6lޘv φ@$,{^MErRG|^ңzYf/}g:q[ m=g 6n)^|oCKe=NٯJbvoha�,� x)h!eK`trlG|c smdۍx~a%;b((\Zw%#.؅ 7 FZvmߌ+]0] 2l|-GH<EzE8U޲Q7BQ@-MG@ꓛo4d>VAr M'5Y C _Oyb s# ]8b-) DŽg8'mjۢxWohu_ τaZ{Yh+ƊTP`"grG{WETʗ7\JF+7epX-mMie&?16OՊeGM&�Igh̨wv5JW`LL Z �I\m횈}<21_2.7�JN5[4O%2 <`D&`\L@2eN G,'ĝ Y0\;$B,x 9#f<IW@>}@'4kab�/w:yC/SF$y2rVJ8x#o؂pkfUH�O}'<!b2"'f5FU"F{gJQx/|*zq6s/~QAp%(36,Bb ݶ̛"o Yo+sL"pU@z7 \pCW'>jT l:`1[}0k$"es-7cHeW[ynfhlffU|̅OBzgw|n~̲<s~VGyar>@16g?3%uoٓN/bN( 'V#&ƿ Y=y+`!Rص^G'w *D^ޣE~BU3poqfs(6p~Q2cV#j6<#e,Od)p5,Hq,$HD=)\6U4,k@q-jJAqa |" [9DzűTq&q})yaFeAZrJl &O,&n]Gc 3H;E(ntC΢!Y'>Ɏx�9#>%s|M)^G-kEV[`xͱ,ثg�J/l}2�'ʭr&_=Wʙ`~ IK+yx CLɝ5D }d$]JcWp0XYN#+m 5&ur|PHI.�?IG2?zpI>yFGhԬ2vkB>bI'܊Z|6D g3v 0Ds&MD Zs~+JʺM Ů. f/݌fgA)m si9蔌c,)7glrRQ& C}-^<zϟ *7I2pڢ$/2jY?5 FUJklpVx�¹pC= [y{f?DH3OÔ?a]fQ1�DY:22'V^0w ۫a䴖?(NQU"8]`sDEKfLqc-Kb U-5(0aFK9ɖIV2Oa&4j !aԋ^$.rbn;$rr+%ɗ ћZ]4[XQ{+k##kkA}-\G)Nߊ"бLD9@ 7F媠R �J8&72@J_($vǖd$t!YxX ީH VG#`\JA"65Bv1v *NVtCXxȨsF6?6ueHPm)>5:KN{ [{` A]>_O' 얼ܓW!(-uXJѺv`22nԺ!qS8bݘ-@(biMI'7cx;~B0ӄseb\&sʕ͏E#%$t%kVRbפt!C@+兟!.o)0KzXRĒ&6̂g5m,cI7ՓN0/'M(IjbG6} Ŕ]T%0swq7"oP 3JSUO4h@u,^Hc=PĂӆ_QVTQ{i:6󧋃 3apLO<GaE/Ut'Q(~~h' ON@pCzQ,l)V~PmH9q 7z*LD68 wh<(ufs\;|{\4qkg5 X/Yr򅫷 ɔaؖy"�-у=<j&i,~#YET=|IZr59:U^%wBu_o w}MdUPW-.KIQd ;G^nc`Í=EZBP=fO?.9pM:"+9*#CRbhs6ؐ;vZ zÐ-3ncN j/4Lp(:E {}"}KrA%]1=!m۾|+Ч++0ҀSk s ™:Wf K{;8r.=S5:=[}C҆N)YP)4=.r2d_{^pG*@Vc(KLl-Rb?)סDl[0[CZ%\8a٤20"(ӀƞI@פ^^U+M%R}]0F IcAt1)X黱B蔃8|B ? ^%'Ι2]= C`*W5~}o(ßfUVQ wpmW̙g7˱kI]cA2OmZ̾ܮnP-/6G-˪]%闬좑ZR Bqz*[ >O=BZv;<)@ g%D i#LYYZ֚{ik紞amGA)YLM*hi/Ή\Ea`Q=ЊgiČ4r4=zٰ.5%أuL ŠjLκ"ФGA&9[ O<(3DoLIQۊpM'6Ad5_*D'*u,Zd7 }m#u'i3{9d'F^?կ4wZ#CHXA>G@^&@KR~rzʏlz+]Tj捕ɜ31~Nnt2{o;߇'{{ГM6%H2HL1HrE<h *^W܏r_aJ^LsVhԇ  Qʎ9RtDCFb!#[ɒxHl0b:}\@&: >3yr &?xދF:C kP4�VZ voZ$豵?ߎJs>xh0bϷ%ќmMPbXPD2{&ϕ�eupˈA)x8MZʢrhX&!Pa|8d42I] T^ (̚elRo5B6ڍ Unj&f΀\eo#OV Oc+-v0㒉vC7([auR2"MwWL-ZCs˽Љ=8 #v̠d/#>om[O3,65[(6 OҌ+2`;묭@0xAsY3i:U25%UT1$HV8ͪxVDVNn@tGEl#:TQXPzJ ińͶ[V Ǝ,T,o  X"rS0W %S:i#OԌ3 ~3ԌǰYt<74Hi:mt:m _.,xҧT n2z+$Ҝ\%z觌+`HI!:~ggrI)sq'r@S*S;I8VFCl8o0Wj?=Ed0"q(XǐpP؆Y"Xb F I. Tn Jhk34P!g|{Hc|-ZgHOޠNVW]#Tz'L`>jyIT=%??+#nju̐_c{BeB�9=4b}t鿿طj+?bRzjmŶpÐ~hCHĔIU/e<tc;̞w<<׏<4#DGmK< ܹU}i%qK#RW1>nŖa ⛋ `F"BOQ$e,jg6`D;!9Y,w&e̦ Cާ<gny86Ja;dzKWg&m^+vጙ)D6E z_TEyZ{v..ɍFOr)P ^d"L}xH a2uj}fg;ȒtrdOh’s%G%#k=RǻCu<ά]V3)RU1u<^ RVkar2`/ʣ4X,#vGSW׎)h6XAkg/J$1A}k6k·+9 ,뇦aڑ•�:qcOm0mvoL5Mc_|ZC^2/kH9ry>]= k)T2uϠʼnRޔu~‹Gӄ?8aR1TT)mVkNz峲G5+e dHUjKL`kYsߧ<#`0b ;~M h0}r.xuWnƟ1z(АOr(Й\qP[k(GF ({@i<C�[q ZP��M$]t=ͦጬŘtIIBCLSPBg\ܭl_;PKEHVړQP2"�SП v>%>!5, jDQg1iض[ F܎WO22tQDO5Q#OI#یl!鸕mVgQg@O#]y4Zn` lp$f a}1+AgzpsmE$%’F, j3hBD‚2,+GP;_A�Lzu`荕EMJ+q[Q1 _w?2ˈ7[,YjNJRFs!3iYTA#<MkZ�\y<ʆ-9%8Vi% T@Ul0%Ugs[^ 1M@\5^F<:D=QFKDmS]0KU VIy%0QbTKM*X×+qVoQT+LWM۳uYMZbq+a+k7̗S* ?ӮZh9Cl'yU6/v|*/j<^F<:\X;G0#G2I䔤EXQ+jKbAM!f pY%#PA t#J/n"Wz7,qN֔ax+Ba_ahE7)T\ؽOX7x/a$Z79n*!\_PI:A$i곢>>ƪ{+qˑqF<Kt^0`Ļ"dyer! !d-^cD8g|k?!h&Z-@WEu*Vh`hA>RExSS/m[p@槵]! m75^δ^/[r%C=̓ƌٙv[23 L]ݷ-Io}apCZI? `C3cCVaUGդʩ)|@{ :K f\*ֆN FQHx"l9ia#&"ۇNLIyVߌ;aPZc1a8bQXLBK ؕwc=9SO'E69WOb{G©b-Ss_WVZ^Hj'+6V8;aѓkG_NsWP"xi(<{, SD\/b׀�?^Cwp*?uPk=eBTbQN3(v**,-wX.X+Z1|'|GT׎94&<c3.{chEBp7P/b0Ƃn,#F:[!6+Ah΁\2�ݤxfjm[(X>˳>؏a4V:ln_␺`mWGoteie)D"P5P˂˟1dJlBzp¤)3ˆi[BJ <sl0"ssss,<C13@jƃy,Wq%}^Iz8~L\Z(<l8NAi} H{w9Y=}mvY(uޤd V<eZY&-SM˔2UaYFI<cL>J,rV!{aR\ t2R"2OCY"'=Ipo&uLJf%\K$j 8¹~tf^{E?{Jq^�UP@+{08�hk`G2avH4b !0\o΀ �H & ,*8A[Gr=P )*5R[PNHۮzoĉ:VE?v!Qv<pչ!7K.(+Cgvmzaw]sw~h}o<y˰0ϻ�s *q)1О{qfH3ϣbbLj7Xȉ|a=g g7pBs {G9af <FSjϺ6X&`iՄI; L( f#˞DS`nl)̘U"6{ ؓ>%@?AZ9mkȔ35!F|}4R_? Xs?@6L8$vP/Dà lD K30-Ru&$Y m }gA;IF$8Q[HW@#BN";EOCNx7c"_184>qPaH1+1,O Sڊ~҃Z.>x ܠXBKfKc~0;&!Y b"Ixo}b,,C兕 ~pD oCO±'\;Gh qY]lGVb=GP/!PR^v&KpssDQZe般eyQlg͊Yv)!ňG*(SοiZ2)!qP8\}c eR Xp#]x|hۆ'փ_ɵQ`m.<M><i@ںF܌uP#NCXKQG47i!?jTi<MҘp\BP9 Ҥ "uYjR0fs+IXOIjVXүȾ΂~P/'9;nZXʽ<cmf%hwxjDlmH"uq1>lM.3]z[NyJ$Lgw>bBZ#EՁ+kT-#%+.7!$W 7[_<Uf,BtkZ* W)܀.dS,&:9kF]Z޳j*X%b rkGW  ,H(,&F!)Mδj&`\=֭ȕQcvMj[?RҦ1[/WzyiyR=߿ycĻOsE7wǚ_5f0EX\J(,CB= 5FLNi 98FB52)˫*Z5ܴ0gIM2Px;޽2ռ.puZFHFMHA*Vcl&s4wY U˫Jt!oiſ(kvVbk@M]@V&{av#PȞO sWŪ\i~7(ec(2:@Wҫ`.:ЛuBISΘ<%ʘ r be^F?jd왍{Ђ-W,t Ɉnat9)ٵ/Ĕ:M0`0!AVtgv] ' Ig-׶gvCszB{y(ִI{9Q]8S9V"@j/")qAđ\`L+Af{[CWokuri*QSrOO^j'[r KQ'l8lOo #f״iݾ tzl\qoa];xq~#XfV諌b))ZjES,zɪ+Od \s=a,2BS\9B?ot-\ D\Ŷ*UZ\SØhbݰ`.Z &U<s.ۂShV<63ڔ2oL6)؜!cf%R( /Y6 ӈ_0UiMy1dO!Xஷ3r行2GF~2{M LBQLbDDPcHWh{Lq#;ƲWg 1Jt ƞFLh0.`\J>CH-n`>5o,>~#]dQQ. c25B.`co []}!͸9js s3Z]25Y*5^ է3<ZKҿߙO P#u=\@vÓJ:lEbZsQ6qV׌ t 2_3H'Q3 3FpYDq%-<6"SrܳJ5JKEl9vn I":RB[gKs.@_I|rV} ^dc�]mC&ܫ^Y<`]dn:>g6$;`U.5˰kʮ\�Cڕőn{~`ۺ&DaiWYH PKC; FU^2pֆ!QpINdαi@޺};{K \r7+M#>b/F$1 6-*IL V/r;…f;Eͼ\(i%l)鐋rWӠWkrדm@ҩ6!>p2$iXXٕ]VL-<S0Z2p'ˆĉ|hLpG{-S!%6>q1$iG0pot3YNӞ@_2ľvN:p%51KSF%(fB<jm Xu@/ΐ KܐP~ݚ٬bE8 ,!:?e6`3.szvd?jUϲLj/#TKQKXhl&V!ʤע_ |,XW$3)θ`2-p9k " ìΈ�'CxWؚ`' ժHGqG䠪NˆKD JCNB E_ py}Uc >f.%SX{eħ7(?gTINgJ݅svbKT)WBgN #R{+i*:]$4 9wl5L 5wlLsvO(:ZtX2sF|Q{Q{Q{Qy5oZ/V_j}6V쓦P~D ,ELxNں=,sE^+~S̙0F%+M9'f4+e,&f_ ԨѪcV#djaJ%̂b%\HMFͣc6VnŕY4TEJmbt7̥7[wl0g65xu/ }݋B_ƁjǑS#EQ ]Rx/`�=`c3CP\4c#oؕ *<Gs?>k#jj%jש*O?N%a>pq=?B~)ێ4t@1hq`s `yH>> fG!Z]{*Y3aA[4٬B_ʨF) }?vd6Sƻ<вf\㪶qoDc>׎ZGWzZ|H=bwGwphEܗNtKs`�1uh9mք1M@'V+&: >W?%cWg"0HF_pKpG\{xLʇ# aȚq' DZz t\dRӟr6r^t'-Ų9=މhA)]Դ]gu)ԍLNe9Z|vJ좖-mF.-Qa%j9]8ƅdDWtn3b#@>rջKэ]qvm􇴖X{ ˸(6)ڳ�|"pozIco`⟱pߜeܳjo*]J< PgIhqi\XbZk^x%48p*RQL?jF.Ip"IS;haTttwD">r&Q,cB3il6i]:rb -)nH!v*cGgJ\.G^Jp_shD+˴[T+AuR lkӸtk5p"T-q{R2btܕuSX/^Ki֚#K6Ui:du9Qޥ&HQzF".Dr&[\J6+ґnP+ɘH,EW+]vYPJmt9DvZR.svZi+k(:L0>r \bh8O5^:+LF`בBJU0'"6 l"|T`mi0E' 2(i>+pb&#F?Wٝ(zG&K E= =D0i#f|6h.XbB#6?e c1b3# btf;oz5#j&{m)m'z RD$ztAW#*kNl;f\/ d/7> x[\3+!,j:hVXϊ̝L7s|7X&JIv%bsܜW?Y!9 kGQw8[֛k\0b*A[! o668U>ޱ𝕽kݍ a:1 �ĉ5_IE�;MDj�5#+g-pYyz(هGpFu"B`CF τpNX>z|FsCܲ 6C=ɏr(=y~ڨ,7$9<3Jj- k2vO՟Y/(U`6ٍH`6 r%ț7+EzNIpE(3HP"Rr㏫2y GHd_\<>^U0fw\znܰJ4kFm,&~fC~mNXuF&kr/ MVu*j֪f>x_ȭ6 ɭY{av&{'aNVkLYNK Opg>t ?{pV'p?Xb yA`ØEapz61KVlI6m,/6#㦽ĝōp{s.ĎDV}V0s_D E!;֝|T .d  *;LdpGg&9*K:tL9G5<"<G:Q&T:yQy;kp!K k|{| CF#O૞.@OyқR(nHVH7")$I+&5 mi15VL&).JHH&i .4".4Gj@֫d'Pz`aabsL#GѹDv*>ǽ$Z&9͆GLgZDRtV"t<8{aSǢLb< 5}eei7ed!Ec!OJpVƖ3pt=5{h!bMxdxrt3l{sE_Nh@RrKI KR.1}*{5WCIRozZA<$t0I&K]kpqDݎ6U5 2 VY`Aٯ"jl,+U`oI EAkjŅ+z^XE`^xNnwRp <O� L%̄m1t‘V+5&.f(FJ "t)pavt>:gyއB`|LWv>yyo=?>A -ox]O.ktv۴/4v<Rm<',R/=6efTʴ1y\.M"c9&G+nHS&�DuYcy0IڧqgӘԇFUkiNj>bAh{>]nPHϲhtU-dDᤑ7az6JdBR2b%9Z�6=ޟZmE V2( #|SHպ(QthЈYLaTH:*kQgif"4XD ~b?FeL<7>\~^0 89>p2;mQtlJ9# J$`.aLJo|]Oz& D'3M[dotHK| Qޱ.p=6QFz0iM!wt`((;8*lWJq+&C׿XSK1o(1ã{3ߕ,|^ˎ8 2CC;\6;>tORS3Fo#iZغ63jwc{|Ï3ёgş {3rн=ݢ_cac/,|fs( ˖FZ:N90@#2 . j{?LKmRaʒ4ǹ8ƋMO pk;'9�m0m,idIct4G[�6Ɍ"tMY pkPGq/${9/d]Ykq='nD,¼>@㞌r@pm<}==Ks! t]enN}c-3^"V͎2WX~Y"aWh!@Z!J:#E܏7c.іa,{'UÞ6�/ =hk`^djA5[lE~SV} X7UuO9}8_ΈW鼳\Sqe͊ nWXr؆D٬cCmik&5}O\7[ ȫDz@YRq8dQd9 e]|iMs.\_)fT74GtazkY=p�N!"uĭs~ħ>= 5ᎇ>jBߘ .Kỻ[Χ0tI^쓚u0:pqO1Py5@1 \ xê,sXޅB>X]gGo#rw6ZD( 'wt{֬Ti �RI:E^=L>ԴfC9*u3O+A'9+^G=޴?v}=س>5*Ē&d&Ǽ�%SJ\Yinq^C.iʶ*iҶ2P|cJ�"]Qp]quae}m2dI Oq8u֧=6sKS,R1E8Sƌ/3k\�q3f]`dA/dY4$KYGv$K$gVB)./'<yT\,5X_;'\ )2 %S@'ZY6م,xĐ(Z<%'漿]1asbپm<evw rik/<a;|F <#V~4=`Mfmf9 SS hf#Wq >|i"N*Kbo9Nsan#ݭ޶%J{[$ECT7n�)'@"}d0bV~XXJ�Xb BJq9lAo F>Y ෭orkˈfMMGdX]#vIaY0?LD31ųj{Arf1!3#zi?#psKgZQ8 X~7pn0b>'4fbG=cqBcSRD]d􎓖&ژ9HoL'z0{UC_n[xtRr)$@h?\~ȴ+v,+ !T}vv4!'l{J[Ψ@2DýIݪEګ/G:m&;(X\i"3m ` M"۷(Q'7ڲd[&8,-K'ŊMJ,MD͌GwbRV?(:JAY4T¸aI͇e'*n@kdE+fwzchZ !^b!f0Rr" ,zHKδ}GD1ϣ><yxQ  IĤ*#b^Q/4QtSIJ&~b: 4Dވ6s-ܠF?:F$07anw% (I%YRՖ۞'H#ؾkQXQM2]aM] #Vz<֞ڦ+9RkýP IÚն$pN'/YncG;mo5͍H9w#G@P�ގ M:z?@؆Gӟ a H/^ 0 Ê[ 9w܆sȜGeeF qN\N3lzg(@Wvf A@{ vԳz8-N k$LAGyGKՍ45:̠V-A9A,cfH�fj(T%gĈMY1}-wӐfR!%d('`ڢ;vR N1ZaE)n+b_{Ѫ7ϢE+$LFPZYMlۜɵ1k `dYSV"-XD SmRՂU%UWWZ /^R.ȟW��NW<^FMb|)kJ6,+y(bCԴάvUEWlU<(&jBk\cp[r% $$$0iDRTXG%F %{S.\){- ~DDDDDDDDDDz#'ccDf BӪ88Tzc:brqIRB -D+HT;!1܉ZPc($E$*dT>+fO#~o0}7{I;1x .3Aq�!`v@0) B~=d- ?ڪ[LW43:d)j@B8OBIߧkqG "%$U^lZ&_K+V"^CH"_,Kw 3Ŕ#@rȍ$jߵ�zARZh:݌=utsO 85*z J]pm dqC )MPvsôMiNMWS1p2(IŵbhMij�' 0lȾ[|_Y %C8<3QntzSXQ;s-;ܷܼ߿oOQ~ڃ[Q;֊x&.UoZŅE\/Qd(z�$|HqM: [(:9\;/ZUJowZmE5'6UZQ:j+*T"S7#(%{(Dl6\KJ+K  浯 FAx5kd߿+>bԍ F&Bo<0sD#w6('MSWr!4%չ*V<z%ٱhozmL׶y9eVhS=T&T=LWѼfF6ZŚ偾03y#u2VO ¢( RVUAnE[kp> rְUTjEf\\mÃԠx@sYre(T?:Mͨ@³@QMx#tYEq =Aۑ3!.'@@<Da&*PsjU}TbfHo*dz .#rP͹4=)yLufDccƥ]�T <P]njFi11P-Ь=1qiYe2hg')bEIkJZQ5%R_LnYf A!B7!?ů۹dcԜo.c2bT⸬ ƽdL [쁵1q8kFcT-7>?+FȚ-a$c ܤi22I޵b4k1"TtL`0+�f\M]sccG41L )[G;^q4jU{Sv8̶cbvfVln);M46+*nl֠ g]TV!K%KѺͨ<+E.dÍڌں 6&Q¡� �Q 6ɒݲrR3UI@jFaEV#C,d*A6=1jP6niӮOopO(wWb]iY6Ś&O򊷾e6Ԩ*>{)d3 <�m{;_%;5TO_쐃;SO#:!0j\mGL3[q*}W@UPݾ~* ݛRv?{k4k7`-Fgl4c['Sl q(Txf3k'iO:RNj7ѦfEkxq8wyvO]\$-2ou.31Af.|2ouEkҴ6zYLSeM-cr|]>{L7y!هᚏ49GYԪ|y �;2sFN>w{wIyШaj <N;qVz+n#@7x8U'ڑGrc:u#*(3:7,ߘxl/3uSHXif޼fx]Ļ3rxdw4||3|Nlfre]1ÿ__> ?^>h4{׽!zg{=3`L0*N7e-g2Q�M {S.K֓O]jl훹v/ g;s+˨XHp>Ggg)_se{μg/`1znz@Ս!Fi1V5!جrivOZt.3 a`4,x6 %HiZZs\ՁTA|B7߿ThӸܦDn$I8d.=u_ ̈f P|<78iFN+v0 ͂,4_(7I# b@Yi�i[h|q5ӭDލ/@VC@)yuEpAG} ;ܛSGl爭T'H.2wEuLnf=Rw/Y۳|Y3 ,srfh /+3xrsɝIAqՌˉ[?;f"l[Ӌ??S欴kgF+b'ǃe3 >_!᳓ɶ3⟚ w7U3ٱ=kb\ *XWB+]xwcl] s/_&|0SKLU<piu7e qݯ57H2w?o}]V{$BRm՞P(ψ+|-Sl,&iT2z^^qK7\F vPOCnȡHꀩJ>cNsRFQ=#I"\A3pW6oWh`$:;c8sU_;|8%ěɏ͛= YȐNyu |PNQa)3FXbD7Mw ټ^g;íqB_:^n*#'g548J˔܅)qq|N/ Hi`fl7LJs'p487Q=)X ^G<7_U7 ZlWV u6coMRsfu(=nc*SblCR\` ZThEZ78&C\3éd2=`og4R%;n|Hg<Ć@<"P3X#UN1#c%^;.~LhԮt^hvU juKy~F#uQ[zzE"cI>O17͕�e\G (:MϏX-:cH~zV賁6 ~ ڑQ0W1"C1;!J$(41pvάb_5Q=l>g#H{jXyGƜ%UWN;(T BibŢ>;ΘSfjR)*y<;Ikba;ב㝘x cb8bL:ױdVח+.沐^Z<;h;R.!\Gyuo<Y]zp۪n#k良 ޙ)'VSgz P`pVe/zc¦ywuM`>%NY0-kEV.ɹ|{\zYBRl.t;�mUsk7oh_pm(ogpq#mC:]pET 5*5QyRfT78}x=ػs=ŪwܫR3ɰRW:KUNhw3vTk5 7J47DwHt$cpLvGZ8XEF UIֆUDifNKTaQ}g]]xڕRwb&�QA^q~_dPGE� 2"<2-Umڥ�h=ZQP{WVPJNڽՆ;Ak(i4Ycx5QC'8{uL[ͨ~Oe$b#wsswOUPD/ɪy%3M}*-=T5.9*G~CCPpKJl咰R_!_!�mT{1ѤڀF0c3] {&tG*5(1T'Y�g#+~+43@ìA<Q\:T(5`)ybk'֕-A"A/(1 9_$FY zM N+x!(ie3~"V<3՞1Pבb;t5yL}opԼ�QϏX3^Ԙ1 6z=" ֑ n8ȓoEi];Zt<J|d +jYSQ\uf3=K(:ëxr:hgRgF8_+W3EGJcĀHE^zt Q5BCͻ(./7 zY7 I<<qos37´BT[UЊWHճ6Du*R/=oe?g'ȟ`"Lϯ5qXHi4W�K$suOFuF[+X\:9_mĴE5SQZʎ'}:kiKh%&k!4bѲ=\k�;Q2%|Fh\+2իg!;*'UVYONDhAhQ,׷كC=B΄sXdJ>J:*5-E}\s !s{{h{OJ|X�ʛ~&7GVgkx@VucGu*/v4lL1FNvFW2NyZ<EskŮ*pqo=ΝU MRez/F* 4kw'`*À*Uk6izԯ`wZ*6`z{ѩ yC T&/n<W8!'}ay5G�͠ϣ+Y]^-wxƫ3^& }wȊ6kuݏ6nf=kIWR끏'C,Ӟ\TxNkˍ.{*$uzq w_)u}#_JNׂu׽/ag)̟_de]�#TΆͭ?o[ӳ%E[s%/07@x'L� + fg ̯ltk{5]a^]~+Z/b,<yu}}{!nlMHQ WЮm5&WDQ Q(R FMgku%; fΕV0I0,9Ign7~'+>q3gɴHѫǸ$xAǸ֪;z5 OH*+ʻ3_辭e\hvwǔ O_BH..жNW3/uxߤ=<via@kwhxjI{i<LߡPt7[&Yۼ So?7_y2L98Ǔ ̈́7W:-'ж3<1 KW":'&%ڶc?4'nm>sSwܷ_C<]Zw:|~Axҍ�6  ;FPwntWZPhY Ӷȴ^ ~>7,#|x3HLΰ1e;6)MdgSnɞ:S2Kl>sr:o)f8YROYdw; !*^bz72J/tr=e3#}q"%6t RV1ת0[X*\s$l*MhvQ=oh_ݖ)2:'S�66{oQ޳1v`#?cYg'S%PTK 8_VP |3XsxB[Hĵp)/+p SLyE|/b6=/<>jmbCR9N ("_9t"2TY6 8'4M BZPOMI쓖@~dNgVuN0K<^exS]y]ٟ&'K-4MS&&E3ҧ'.nʔs)}_ "U!ㄶ=Rӓ%RS:WI<9׶{~;`/xjǛ=Vи?ڹ#<,-S3v{G;go.;n6aH҆ZX/6  .$sw{BU|uJ([y!eTø 1n/.;(̤ؑA:# [RQeȟ:�7cF؀>-(;v{[%5$df<o As)�28W\t6$/k~bwq&a/%#U=Ѩr/Z vecOO4t `U}̠DG S:V8Vem>[IgW4WoK,jPVJuq lQ66VTim8>SlkmFGo|TYmh f._Q#.S+99_bF%v>>3z'~9+3z.l$,zwYىFHss6h=-hJ5>@1b0sEZdppdM&k왡atŵ፸0D@`YΠb[׉&$Yuit<ox 1ŝ1޹03o#?F՗& r#{i  OG?=V~lq/`l ĝ;c<atíeT/:^>ʸ7 ҞOOy LwN \ uL}~-j7H܅Yb;saݵ;!慯աEe.ܵEhxܣKuhr#yr9vmgMԡU1Ez23LAxݗ=.x-e%Wjbҕ*v9j፤\%k$%6gY4wO E<  H=$Y6 qe*4:K蜤҂iq2 mNX^ &6V63SYe[v~l OUWC\Ԟݫ#<qtώEL?2tȚqYcE+1]\{8$+vhmpGWfS:"S-T(VP5@M\xp`gդ;_^SP@ܦP͍ݦ:J6Žlt *jEaRl69¶ʹ,x1sTֳMv5#N.ø]~2PA 7FT@>V6PGیNZ5N#;1!#bYʄϹX= ھy3OKj5gҊSY 4N]<P 2 ۡЁAx%y.,!Va@mv[r!x!jeZSZ}04{t;#('E&o�:IAoٛ@҈qΣ ]4ixҕjoI5U}5{a*%1ƼS\V%N]ywlٽ&Re�+,PT�v2݇ǝ;p~YU}Embn]QX2Y{M ?lv5we^g|4 TZ)]MPP}bTvVb5ENuWB^{F꣋7s/W~3ry̷r/W87Y̩m-U\a\E+yGZ՜E-ER$ ]ԳVn�rl'lwROUuYG )bA$lWfʸ{eJAqRYRsEQX |6΋Թ 6l;^A Nb落cL-i+jg[=Cu/JȤ^;ȏ� N[<K";CgGn J@|8a='fϤwsߩ6 q@W[eϏ=.EPn $S|Ucl4L%n0{y E<+:5O@AosMV='�BDoճ4MV9o-$ 5G?Ӯ{ח3tZcB=>W@7PɭglDq|=xGtՋr+=SKzײڸobDB 1^Gҟu𥏋v[קw8~I!4cM7oDjs,T`];>I&&n&4�Ҏ3$^X|ѾO+bW(o>̬Ҙ~f+SX.w7}GKwŀ25mRR'-vxG|yGw?OaQeYAQ, o"@cgKg%h$[*  W`�^9@J0ajp�((:f1d0 ,u^¤7H'@-^؟\Ѱ6AxSdgy3组 33SK(HDz)mL[ aDVcïދՃcM+o=i9tV(<ecYX4:^r^])f-R(`,ơ$,k!`#SFdӯŹJ0p.ۆ t ,\@ 2B@ix-n$B6/Ϩ\+nv~qs⡼-X'n4Oo٧|wCoi*ٲd$2U[7E'Swv7)Ս] 컾MΞXX]n9.,_XD A'Tlt#xv9Vc5I{ɂo{Su[|0U!S`BŠF=6zqkzdD^i$LT 4nXev25;/!*[g™2? xwxoHn,13sʢ-NxVvj ކ7r[ ĎٶM~ 6CCџ诗ڐ^=_ٗLןi!.xy/bWxB&�Z,2l$+:?v0y XUwU"ۋ<K}y瘁Rk]QlHY; A/Y&kqOHooo83+3r^i�q+\Y1h 3mnp;h%le�8!p X=EE!O 1?Gue"02j sB2+; m| #?i.o֬׻w{w~ms h[#; ur;xp5F(w};smQB*Z!ȷY0uv[EEmy{\OFF�WDw긨ҹ.^ZK;+`?wv!չc&IYg!n̗bQf cƹ.hEd1]xVϩx v"2ogLCeh Csx¾jëMP Y#h0(m@.ƩNbyXE揌  P)#GRbw؈U/̚{eԸ0ǚZ3G_ʴݰ+(C2q ڈW:&mkT1HTiBʒ¦? P*m :}BJ|;Q3uMGxk53|~)N} H?a Ij|V>dM Ldf?k@t#}.i`IOb6rbx;-;n*3`p2ݢ}.`H4 "-$/�d’l΅d].Uv&(S{D2B6RE$8}^u]P/>?$KS/Uv 2W|i*5cd&0YX.uc(X =�0*W徫[%SI  ++�[-$Ue*o�$ �)fk4:xNqs�RQR_8d5QjZKle6$srј}#XA8xs%J\$(15d]6u0 /}F[QL_\"ڝ[B(^9>ߡxwΒHMF@f-g�%HAK80]`t7b p@E)*AAKL'A 4@ YM ,N i o E[= x ysęi !y4[4d 3!.eY;7wG{%_'ߓOS9d1QB2nB.%t��χΫ˟z_ QYl+{̀c�/{ȉ=zlOW-)eedI֤B̊grVMiaZ%*2,M@*h Ӌ�̼T2JHW,LߋbG_' D@sw=ܫ ؇_ߵ5}+@QܵŝE7}iȞ^,BW$D})PNhn"ex>\ tR+7_1ƙ r&,fR&,d2&H=t$_;?=~#C]TZK]j$-ku;rR(EGi^r·S#Nm3rJ{UJW'*I{<q)s:q\+ Cy,=vA �T2* D3W%m?#<O] oRj6vb$lҴ w9_C5oZ-b30aRg?vҊ!b5CTo�:�W`�j\q"tk kThK_b0kW߯7Xl}łʿ|Q]|5S= ϨVͪu?Zbh\a 0"jATNSPu"]Sԑ Q*Ia�.3"xQ17TEA0bIAGLsY]k(7髍G9Nԕ 7^Y1b{I=ZОz͜e9}=㋏G/z ̧BZ[ +UڍhcgfM4NHJfbR5' ,�슣pg8,0O8ltD&(T܅󑅍\򑕓9N{z@!E>b[{sh]ϵcōPt1ah|s_*ǀqRHOY3#v`lQ3rMX7Wv*q@ yd#KF9z&iՍFgȕ7D"1q[Z!'�$vI+#x0�e.1 躯݀ד|-p$r &_Sa&kT/`�L3.?Mu u.,ڮc->\:8c}jKΏ?qGWG. {s?rV\8}.R/}tC͐@QCNNDio:ڒR A8V\>LzT ﵻ1*ظ0g1:b-QՋ{g5V,{YuW/e*=Lb=[<sK=Ѝm1;D4'5kV_}J3_"'"ODR#y###;jo/㎣3c�O wUdZi$c�{ G8�(x`My^. xÑ "R!FND)>mE5:R<2:QXy B^t]-"Trooܢf2NQL io+lT^ղ-jVj:)A}QU!y=ri'2{,AŃh,r0p3�סzFou1oc=뼱~zzP2VoNnesU6ӝ]NH=(Ш8u'cg#|١^/;!zc@A5�”,&1L@ǡa�H {QF},($͍ݷ;^.uǫ=Fs|'K+ƳFFc* JNfCS .7 .Q'j͢ ɪ) B*)V/)q(*ӿ#;US=t4աm(duIcNZG5d͓R}x7y׽k'N$&#~0(xV)uEj~fεBZr:F6jֈ.b%GZoy}Nq{#w�˝JK�cJp �[հ[k+f0VZb!kCV"FLb_bfz>OM`^ M�P 6 Bn`Rr_ |Kr@h'wr[{G!jV~gZQs~$?Bpke(`E6郫QB6cZ޾ӏvK>!A(#]`@eq]>̝|u ho'/4λ Z),Xw9H^iucN%tSn o! !݃'=qߢ#HG<.UBh$RP\zL_Uī/?I(*=Pbo+vĺo"K$O_YwHnun`{}Ryc (L8az *`ox/T<m7KV6MB7*#|<?TygS*>"3:l{q w:IXyrrj[ uZaRACVS0䐳8,5ROb c:HP! {Qlᤇj`SR|PNx"cIb5CV#('?*PWO #)ZK)R\"|^Fzq=XI|^{L1>̨[zύn<7&mbκz7SҦ62ô oJeD TB+HP`wc{p׏^@2P3@/'-=6oV_o3pQP�_�xGIWIJ;tmw+Wy("]Y W?Il8" pp*D{CrI4\F,bYZM`iJW +M]q VGZ3 JL)GP`6A(daR e~:Ҙ Yx"oF||ۀaTa.kU|5mWW3XrM.Um!.N0.5aG(D!^^\ }eK~u 0.]zunv }SfdUPfg6d\2yeL ~e�ESǍl>9C=R,Wǜ~C;KҰ&m;]\ cg'woǝWH 2_7H)f>QN?SxcOJj qGX1 z2 U,չx7 w3V,ڰ޳% fš(!KTW `ʌ7 _vcMn[$> Jq189͵dGMsRQKՖ2T1.uW:]t#ƍPd=%Bnb͈b>jur)Qx`DQmnFȚ9")c񉎥&@^īO~-(򖱒'Y Vf\@GM|]=.遶W8 <eYRiu+ݏeY)Ksۄ(<58O -DUhתJu%MC5[sK"9KyB"0,qML{D.0NP2B(^~Be[͸ 1En:,^ծ8P[ʫ0a;}÷ Eݬ\J;YF}6yp %O])�l!H"LCbD`>�8WPr('eX4C*؇g8 Ʃ>!tͦ,Y6A*=xg+=vSӓwN-AcCL?f Ϛex,\5Bf8ny  ӓڃvH+:5Uj>r 1xL�Vș }O 4,DpaZ')5&$ÆKu%9e+͜suKs`'l.aQ6Lb3e3\,xrNWjԱrV 4ˆ_6�,_'r/dqLHV}m*{㼐JaZ'K8>!ꍟоU!ux>(f!>AsBwBE*%U�i!FJth X%G&~(PO8cu- 5//S+Dp"ϜafBlHDMgOz'mi)Os#! |=|}Hfw?qJG_D*,$:d%T!Qٹ9uBu0pB !GH@ߐV#>qWh)EtȫxI-qK[?#j$@@)LČRqR#Y6񬷝]M2܄5,pX1f q,%!u D$KEHH@9PdZ^F*s༡ӃNs.ѕԪ\UOD\=Ra& %UV$)^XB bL"o4QVӮ"�d>fJlVQslwZƥEdTg>6٤]JM>Acm}n)Z Yhěj\-TXHDB^¬)ڲl^5LTa25`F<[*Qq˩\@]5sCUX2hCH4Û̀@0`r\TCAZҲ{,E�eTKS]9_㱗eQօi0PFNq, R2x&V693 Q047S̮(M*BR*w&=vRy* n5Z > +^.TIXWgxdrd >0ҁN{fJ <`pgQu5b�@Q9uţ?}Z̟>e>2Qtf>128jF[SaЖ{\2w9WW+/c!X+ P *B%ت ܯ*'JS]{Oך>e \~'p \~\k w�+x;};T*%q�B([73Fraa�F΢Ƞ H\**p sfo-^SBJJ?B4 ;.;fVEP(94FJB-Wl:w..Pz@^3u"nV%ʄq F0_q֕_J鸢I;TV%j_ҮkiR޶[_k& ( mj\dG/<9[#c~}&)|8Umw jƞU 0d稄(x%d`րXnrQux`q %d6p<4)jxf08tƫ&A))_WE ;}ǧ gAB]u׶'h PpO4瓊u=MaBҡS\ Pa;'D._Clnqs=�s#Hv0<vs/xmnJ"*Zg =n, irAJSSjP*Fb $-oQ iG$ ;VtstkTJS' N2L[/_NݹK=!zUۅzY6g$C7:kx LJa2#Sքl;gDwnhyա],`^H}uvT3, ~܂9]h=_$Y uoȘIWsw*J:yȭ_e.(ez\2 Oe-3]cY0 O5FQuϮyYMBpNZĮ{F# -rWI2ӸV�j֕ByULY.= QV]On;�R; j7\e:Tv&w Nz-^Ϯ^kk|<1%<=)1bZ1^XTx:H!ͣDZ4ܝy0 g`bp=$$8 !WHnMeZ5Eb 84N)!Dv d>ziI6XƟD%a_֫ QZ]2i@n?/9x5 .K)H24DRk�R W뫻p't34SIXVZu!|ajt᫋ےEg�ΊC 6do|g>1>k- &u 8_|@x_$ƗiI lw,s!tm Tf"SΆ˽ ^GpLO,l PlsJ#JJ|,4xu@k6*NR=&v(z}`t&t)Z25e}\drOs`B޺bVӉW]WՑHP VpZIv'y.3;\~ӑb䟫jI>%$G2^ Wop,/K²"+[!Y s*+�YjqqLi ۥCB@"q3՝TCvD$, >=pP Qnurq??tU|# y)'J(Y&++INu31AsLb#)�{c_k[w}S�/C3H[c1Y $X'P.7H0HM@�L)o+52޽!ibdGi(F1Ѭt@)o LQW%8u F"3K1$"=ҾXMy9.TrsO<7sy|/w)S:d)J +fǑ5e" v$kz*yusꧠs1K 0gܵsvҝ!`dVHV\C,$ Upm^Z֟jgRh21O3:g2,chm'%+�EZS=b#U]!gW\=ouZq|VʵI}W|}P5?cC;C퀙*L㇝?((%ԃTOԿaYI#9 gta|m&÷h؉EV "5fw'nMuekܠ�ϞUP� =et')UƂTl)&aWB[f*jlQb3l#Og>cݿ~2�-Il> o-_im?@F&Px(УO@\/AGx:堡G U-k<z@ͿǖzDUEЁE�%_E]h|bt:~r 0�6fHrosMyc3+/- P\ }k/ڵb2 z207QVY"}BGϺ_ףVyë]Y`(xJXcg~uW#�OL\rB™P*簚,Ɉ ^{=:X!f©)7Õ/;CFѫtQy {;+rgFXQ!NFs 9Øܕߌ)JpT t$%]pz#㗌zċZEW'`K0+eƤʌJhV m=4vU4EB¥? iBR/̹)E#rFpm *3d)2tIWoMxQću]B^䃽U2а,M@;.E+)EOrbO=۩ii0# =+ߣ _ͨA7YUnl5AF/m>VOO~ 9X)eOPD1R~~Gx6\Yqo)K�4!"/fZZ2#3b%Kveq�,onO%)HKy'Q2 umJ?qU }ql{&=ag[yRe}÷wo@4 !Њ^0)f6R4 TP  KS* w)g{0}!`-D5fii ,LuuNgtbx@}sRXy;sqTX=WUqg/ :`P;ܑr'{ٵ}^{U#k{t,c/6ઓ�;t |tN Zi 馵Tܗ{vJ\nGЂ4 < xgs~8bW=6ơΟ6, -={rgl^ؑDZGRz~Y?v Ÿ؎Pq$IuTooUyp{id._1OBAIJSV5FiZ2HR#e*uSb6(-#yۿQ$o<y)Jiאg!]ISVb%2J /0ApaB G䪄Io4f ̋ 3H@,wHGNש-@?TRjU Q =m}5ފ8ee-M7Mjp� MC֭{l!Mf?"/!5z;8{ 5#"|= m<[ɒ.`X i7Hlͅsq='!6ퟩ?J ~&Mfy){-]=.mk J$~{C=N_^ލp0[rS|,/쟑ӌaj&0_:0i]-$J'*dbǍW^f[jmˈ8 \S3謠qH&r"Hm :bs6"#!�gӝlZh!n6r<ΏzPx7- aa7˅8).eYew돺fҀ ͨz uȃv1.mdMߢ>`4w@nu PnlBgP7ʲDY\yNo AWe0b4ɲBv_Ӫ& 54M=@"69;v܊?߰ 6B3[*{ADx#qWAA`ū(?3BV¸&^<YN᫊|QUE_R$.:[Ǖmk@ sE-{ZyjXSpsl?9x"NA ;2r!W0c gR90F*m:wxߔ_B~{iхw =yL^k[OvQOm}4X(q=>Kkqz4 ?Kk/Vɀ-*v6.+,ۨ!r[4>ʟڽ:)/Wf{^z<,5KI*gc` hE6]<f>ۓ_ÖّLYQgE Gd<tjV~pf&Np:B|g<b͒J']9,TENxez Wg8D3 uJsp4I *蜷('ɄՐD UY4m42ijkJƘ^D&_7d3U!QRXl!3!=!ɐHPurzmnpuf"t&{຦>l ݊=zxaN~=Gpm$ξoS]@*<(N<M4ΜZLS5U2Q赐{. MRf&$wuqv{B>ZHDqD%ӑ"O~r-$77=(odjU'm$|ˍyVh?*O$؋pIk! }~pUQќ dΌ2*wrrS |Y;,d5A)켧{+'S0^Wo.Y6l&*N7njV閵3o\5SA3)N_a+#DGVC;P'ST LW;LȽU2o&3o ^of,y4sQEj꣐nK"J`2q>guǻC)�L`R`)L 0ԀT/2:7ǡZl#0nWøH@O pB+d/)w "V}S3Cp o\":Ct�G SՉV!1Q\lh;Z-RS㤸]{zslh"zuJTi9B=頲=:Z-1$ɍ"A]dGg&1 A`ĩV@5 rh (fwg2I?1>4cGuS*TԣfToRE4(EP%[A\js`WsF (wYX;0,gm^Qdb'T@C&D*I:I0-%JPNP3"8╶$W\@ QR-QM\oؓtbޱ7sMHe4tȦqQ14xIZ#Wrٙ;d$AZ "a!8Ɖ#2Ӈ{' V tpm4&Ҷf㶕BOjrzζҺwx?FV=_4Y]hKQƊ Z6e|g[֒rcKkoD(_]_wo<;z4z/tsCx!Ǩ*7߅滤$fʧ  #*(l fZ}9mqb[J[6WckcB=Z/Z[r9˔`6Rsz[_i{`LouLu_oG] lX/hȁo@ 1&W!|]%YT%zŒ?-y|>fD-2d,9 Tp0~o2ha0RXu u hoTzIu̍E\ϭ;*^vN2b=HjORG[bJ-6lZ- *bRX�.@$Kg,WbCmK?dIAS0h. Z[-xZE*r^: s EV @1` lT%00HԌxL U$H+BJ)pB =|nI'>1X>I['I9G|&MƆm0FГQ]Wޚ/cp5u;]?Zp=ɤm?BpItfRYBn3 [Kn9}u>Ug^;`-�bBoo@j$h&f2/XYĚMztE֧wlS*Ld>?#{@<'|PME3u.d>lڎ �EN$9D$q҃5 ɋd=Ӈ 5=ХzFg4JZ{)NaS9B| }KvGvfM|z;/d!8QQ\vm{|́l=aqac4 Z5l8FqK8#8&MA+EVwp WŢE6^YSiNmBu+ `)U ˼H&Y3|!nf9{Ya8z|erRSI+ns(;VʧH8wXǂTS}6X\5H[H<DH9mE5UX@5J"RAyJ- D/00+yƾ_1/]8Zck0FOa:aN0A7 { /je!r=B Jؗ],oJNtp(ϹA4}N]eU,I+{gk0? gܗEX'ڵO&n]WRXo*K,9& XN9 5#8P a89ù@\iF*^D'W,^U^9gÌtM൴W_O{Em˱a85Ѹ=!Ms A$[9)Y]jKYHNOWzfH4iT\\e-EUӲ o!YFlf3$`$9'4M4aJ]&yBd߱zәzX a*xoJo.+lۋ)2'h=�+jzD �5 n7Q__1KBOJvrH{ʴ^ ǁth�@N=� @N`KxQ#�qۗ6jـ.6i{MOPү~ <^>heU}V}\kvOm%t~VuQ>;6.7Ū.!WɎEFzF̀1dIb^@$x* Ivyw5 <k<&X?wB1f1ıi6-y'whnvFiXR{(!_bwC<}XPv2ġ�Ջ)Sh{K54�l!KF`D{Ӟ}A'ub!\㿟HH�%) 80H]7";bdHWAH6<�d*�g|Ů�(r$vO <Spf5sP ȁ5!oK3^% 8c4L |E8Yj5$`q :;*zU;V/Շw6'F f˛=)۱=WZ3>x  mWn0WfV(/�DIX~24=\(c#\8UtS<B3Uw:x]WIag])eW fku`@c+jfz6ê=H0zx\![В,EBԆV\puH+C p*կCLR̕qa�ٕ +f(7Q(u{gggYUxp~+F^b>{.T*C39V͡'P>×X|.K>�cdv] P�~ 0怦Tf)0SnaU3r `Ŏ4%E7^^:lF_fCvͽw:@~w^zr*^v2@aUȢ3"+"x*q7Oðrxo9c^ O`OB\'@P"Wt.Z{mޗWt5煴Uİj ϤV'ΜXOz2˓ ≀Uz!)9t>-RFn$MjVDNj6qHM:ٱ+mb~3'mqiS4k!mWYWsӟ*�[u hOg9  �5㔞'f4c5b^'#c~.Ɯ4FIOg(ű &fXEg I S뱩7C<`b;Yy&X9)F1rX*Gv۹BBjZ=qz8ݔSyٕѵpѪ_ ]r•գ'L:cذ"WqՅndr S{2?3.+yJcr߀ns?n?c󗏍0 tx֥SMԤ79UOtR39 @I2Fv(p.u'cd%FU`lIU6`g(RɅ&(RUH0JTBeu! *6 :AHq-_c  _׌d04k 䚍 w6 WY19A7ق<OpH(ciyL5N|PctgU@}UrZ/AJ`Y^^:%1+'w2AZQh_cwՁ=5Ir]Ձa_Y5«֩/Q[G{TkF^b'@2vQpkgUìBL[7L<t@+= OΈѱGz"]YGjpYtUUҺZ7 jiݧVh]^/ó;Q+ FZBILjԡ�FJ5CW h bLN!SכFVCfՆT2ijSM2:<^Ym'_mjVC)RHʱH%uV>[q:RWd8/VrYiT:uJ+ߴOj5xOg7q@rraliW\B[:iw^iGy<p<ET,xWb+cE]Y>P7}?=hZ&|1 (Iٜ0*5M,7Ek0ٳ1=WѲ=_Q<d|Ml9@]A P Ƀ rk,:s2BFD+"B)~( I|2dk>RB^N(^B,+4ū mF0C %dD1udS&dmڕأZ_w?+J4?+J45+k3Fn+w篢ӟ\dž6Wb8VƱJ>�7U -DL0kFw ɻhX__rC &|E;SP3zWƒ+9}yމ6$Bg;?! ֒ZK5jX t 0똧«@XJ(p;QY9pjEt|U} ?W(;*wVq_#\~ohាI5UxL{]#5w 0j? l&6ᗓ WK88?}Q3l<]+^[&5?G榡 b(r>DRlEA4/wfd  8gQ@/H�ψn53N9zt!l1^"OUxzD1zGM1"5�ycd%ԛ@6F8qμ@H@RE<ʕ:qu#Fr\cڿ|՟oί�KVw5JZV;Xq </edG�Ebqd=rV޲YWa.n8Ovf] Uq׮qh[o'hؓ1^(2a3)y˷ KHX(/䙡h1I{`WYć&d`n0Zg/k1F;?C$=;c#Xc(\JpN4PG5xqu!cq>?Ú̦(Ɇ(ءH`(Q1BxdYdF UQ9pJ%Qh#lij]{u"{WIcM 3|~אUd _tbc,`To(r(:iݨ>s6|(w%K#"yc0*Ũw-9_vN Qݳ,tz@7vp:/j8 <;]"ZqlIg򇢃d+qׂܴ6Hf!(w/-J: :qc r8JύF;3fs)#'Z&Jg_r'&9]V ׮NYV{hO^!C:/XBX" Q^KQN(F(89Ej<_qy'X\W-YtݝøR,3;a縖cREQecyHgѓ/WHRX<Fg~g>4N&>Խ6unͰ,an&\f{;*|Sf M{5|ײ-_xu7)Dkr;ci<6с+W',t|Ys<snec6c j,+ yV2e5W1"fY^f?WԹL(_ǫާp}`d%}1l;V hњl2 zSRv4s+2ʶha <ː تc;e2O>H=lr.Tk=¹o66۾\ݟ}uMdvyvzfANVןA8ۭYL7U, TEOq8>8S1S~ 5nV^hO?<ρY+cw.h^^1dto^o ~f.tjn҇^t'#tsT4.[꽫0w.Ai9_ʙҺW"^mjPkVk%65?GJ{/$q `EnQ-~6uO;ij>yY=/uTuTϫoɞ\ԽU)|{ B;SdDwɂ<T:\ӟksM}5ĪX݇;r*t4IW!uRu}-x5u8/XLtmk^y67ȳS>U.䓞+7gOʎy"+e&07t (d !-@`{LX7zesKY R.YBP{Ŧ r~>VY>a#$)%Q%LF5CL﫞ICqsΚ!}8-~n+}tx�ӏlO6UɅǺD~?w`_xW.�oCfƸ>6%}thO0_M<[7z!g% !pҙ кx\wrbՆɺ}K2U[^ltMhEc|uaW\];j~Smh�!pʍ0˗oqzlaIgHf{};]3K v<ǻe5~3oż7ƳJ#hr_|m_m>M⯸-$MeLɚ{i'{};4N:_rE;bp imq^ІM�S7!?cȿא 5C`%2}mDbC�s S�~qcT@N%a,c9B*`c,7c_</Ks*R/z(A`3qJ!u~h8ذ##$xLLdE8CP *[0h𗢕V jbD3-ɐ!>&0>韂>xn �->T|#/@T{" 3({ W&&3HF9} xL50lY"x3'Ѳ ۳@fM>Vcqƨzb+6M tN`ӳ-)e߿�tiI+<0m ̱G_.hƖkbG:! %67V}fEfֺK&gk9A|ͼّY2^= eVsΤ 8q@if"vI %b8\ݯWIfIm6!6KۄK @.ނNh4%OIޅ E(e${s1R$QJ3#W s¦.j"m&qi o:'C@JLBKA`;$,)VJd^op\7fjV2/Ҧ56fӲͭ'kuuhW^YVcGa`KYq=S[Ny`iy>()kb`|Yt-'϶~dmwm G0^@a Y]벖Oi {E6O VJvʣh-$1M1!a;[y{{vRc΅LVr|8%R&urc$dǴzD:H KNm&ނ,Za 3Sg;e_x�$:H"ͼ/D+{Ȓ+.x-qw5W4Weⵛ95yJi 3ٳ'y5I,pk5[ t8?"I (-iΠxUU0w;@֙4 f~u{5=on5AAs':mi~ͦY!@mVDJעYU�d F O'TRnsHd2X$pDӕ<͓OCLmiffT0óBzLN-*rz5)=1=+/EeIKE} P&DQ(8(@<t`5җX"&Ѿ2߉نb.GY?}gELxR|O\ Ft8.qI˞_(?Cϱ(d`a|^.r?lA$h*wր?0fb( ƿ9^B{h0I/˖̔,g |Y3 7S܍QJ:[y+v4w`Z5 >ܠ!'w'�3ȉ:2’uɘ 6m`n+h-_7\fi$6.7XQfx=vGf-ɔ3'ɉq%)iG`|c7o&%{̴A<]Ǽ[4C;,bN6=܀vZoԈHJ{˫CP2B◺0pplB??)+o*qRX7!\_6>n@/azcaˁʼ}ץꛥkR퀿/=ƕ wN�p /p`[/ ӸK;e*2{K_#R) .Oxg2ST9[^pp1a` @|d\  �T89;�f2TF}%ҞBsU>%硫YhɲdUf[Mr +iL*@Xo K $gBY- <B96g�U0=H:Bi0EYp bR e 1{{w7(s> k%3<ݾך,c:dIut{nn@Isĥo�Rʎ�,tq3.qǕ>!.m`㚻\wC\ӓ&�'}-1o͞ MdS/q-kI"g�w�;mvYY]|CZ8 WI$n�,^y>=u]w9)HQGK:Zq&RǟgZ9+z `]0&")ZY_WƑ|"uO$|B8PTLzDRRh:$fFē땹.W"~Ŕ:7W40>TᘯLe6;ZlZ04H|}3$\vwRfDN8qN.RV€ԙiu[�8xD֌njZDNw(Fs.ݰ,?)с4q-PO駦&,w{STc/}:�oxcY)+O9A\۾ħÎ_M=IMn ujy7!'CHX\fݗJ1\iuQu0U2Hax)rG\ef. 7ٿ-hcR?%r ;Q`i|nwY+̑C!h>C~ύ e "fSDL<֩<+O4ys! ΒbdN>nQOL~%WgO<=dq_@El�G (3eO]>6j#qbv4,$ޑEViܡ6Ғ 92AF6L}إcUr߫lŬ0'nbH=(Q+:yM<+[*',I! JeTJCm%9f.C9s>~$;/s$V ͷ1LHί3 0Bб cdg+-btDޝz{&@4A?ԄXp"ueu>q!Z۫mt͡>dR^}s"<a&Bxaî^"cbG&@&q2RvI"ȸ_P' _ E_1ҍ*c~_T,QR`6]y='|R?P<"=f}َ_K!8@NOdA2SR)޶ŮC0J5kPq^Qɩh>SJƺI.ɐPbX M|c^d"R~C*g,Mn+>؅$<?#-QxYq8}B˯ ;A|R/pS~y  "ĝkN<V+9rr@v.撋SQ7E m;muކ%&�6 6%jBu6+Og6𰨄󏳄mA- *\а,\$u\2 W&^Tߞ ܗp0c',7FjdN+C2Q7ڝRDLbLgfjgxXH"ȓ"rvl%y~RgabC2: Rq">Ǯw 9*FVa<2 3G)c|q @yfgbv8gjzi dޘ `˒mɴy\.~l| xsb;% }ٸwAJk&g3,,<j 8f~ϊ9V#q wnQ7b <C@r8K8~aƗl>|%E1&Q4Śt;nJK3#pﳙ+V܀ƚj S6Ҙtn5TLVKnfLq=wm^svEkҴN>93Īo1 <gc|s6f^ەzdcalg@$6w˳fzL/432Y0z;0 U 9N"e4t#j2,'eۦd{K]X[�Ѕ¦ALdlBkP Ecԯ>l:l}C9b ܛx,Vu@C2H~vXv^gh Æ)|A_d(hhH.X!L)BUr!r'(ٗ,=�6m&:06dѱg~F/v@Tw! g�%)5?< =>$3OhͰ?z + /Ό!3/̨ǚ'ý[=cbĆbZ0~Qx1!1yeZ q Uvtyҕ� }%X`L, 9k  �#4 8asb[ ѭf#1Ʊ\i҃bс-g4pÙջx!cJ#8A qԹ`ƶb00qp^-~ZW /v?~7^Qgn?|gt% bA Z!FPH6mHtP ~81i 2%؅(A:F F[qMn<Dhm՘;Uh$ě5 h#\ uZ�Cm&=w،2P, xL`KN\BSЧ3_a_}7̘;Xüe[_7mUHl,={20aFHK,5:gYv6krܳ*dTH 9I[ K^K8M^S<UqIZ endstream endobj 228 0 obj <</Length 65536>>stream ѰWOj`8Ӻ|fQ4A|uP~g4|ZOt–QM,Ƙ5Fa^Hx1G@-1iX@o�J}wc yT# 6 ie[UYzu\U9Ua9 wKr8}ZG H>LԱb,P\.�ѭ81ug4+c|5FDg"V(+ī&xeC/B!|7E'\ e@tjMj}c5ρ,jbF%%ňCcxz+~4gn6lq^gΩQv()~IɘXKiRQ/S�Yt :~]Z!r1n 1'ƪg@tBWL@.qa "C"M�B_Qq%!a<`0F㭣a0#B" oDy{F& a؈Wb`F0\@Wb-Ȑ][W$.R֟HkCZ'l,,yoX!-51= 3�eU[=3E@u_@CC2A*e"Ʀu|R9nW}K~kQF-ƈ_mJ# co_M ciGtqLq?Fe;A<>$ȶ.+$fR*818tŒ,Dt8t1H}0DrfvfpS'隷$H%:;YrKIھu|d]j9\ǒ z9a!ǮOxkrI SE7#.G*;+RuGuuvB@,! hՆ*fk� ̽f`oAr=bWAE| ]Dngqyدr O]܏`Q ZDV7y7WKɠd/X'zg`K'_YX#}! LDF%Ϊ^v?�u w,=vر3<D uggIW`PW}CNGʏB鵙 +M*$2V_4~W-K~ge:jU@vɍ8u34A"i]($?D QVݝAbC=#  [ 'L5"6XX|W+9y%ns9ԠP~{/@/&2N<n<qp]`;W)*?O }lo_Ӓoxv*o`LANEaBk b$F#ޟ=CW=6SX78S[,Y٫m<-ho%6zj6z`VYma#92}#Tr&M8%M*P#LA>AÌK#"d Dn*k>L TҪhnI-uM$RI vgOp(shKf-MXPlG5;6,'"5ai5bVRXkXɅ=wwKʘ*P/,#8QYܸ +!aVn7fF3fm8zPEyۙZQ/i;\ \a~P' \P.%t%7Jmwn;ޤY>Q\?$MQ6IzDgcGRmXN_0mV`I* E E eT5 34M8VcUX)Ii?Nr:0逓k, 6x5kB&odQRD)ƌZM-PQ٘X l|QĎ#1hմWcX(wQDs'If)8V[_(j#Dφܑɉfc%bLK�HZX[ ȿmu,`Iy9R^Q&MG",a)�eT0ҳ=-ָT�)RC0$ֆYMS f%%GЃ`by.) $hbemU�&",f\D%rQ1KIƼѼFL,+X90Y53is1 sҗ#0b:m.aD46{^ x6geszcSgPЉa"W@S,?E 1͉.kc%lUĖel<rb 0EmUVmv q6 >C)XoʖdÆۂd-(Z*kTWHNNy0,/W_rxE ؠM"Jۦ$;]nV! OD[nt=ʤE#e I\Q d)%qUJĊ<,RqG {S[ؼL%]Եjjh)QYhh`�IXE[ FѥR)Sa:-v%:*rtvUUVSasV<W/-ue=n8PlmY-B<7#4:=9q^/#{8[yPMuiwU=[Bt"P:)1jH}G 3ȤB6�sz}KGԷ oWqqnA%.ʺ,ۅfyq<?21`udl;O5۬PI \5 T$N jT%v>K.1:hFMtlɎ!~Hs I ^J�cz0m V6 @bB1C;0PѢD!s?ǚNVNawzqudU>!Ư`|~H|,]BC&N27磘[M=6&R:c;]AK@.ȔؾjŦy!AvTKyOWY?o*!+f2�e�{%D]]ܺӱgc3sR#Hƀ"X!ե ukw0ӳ{6cڳI}<@ jly: E+%rU| H;(reDÌ CaV݈۽9gx{{NZN"֝ßtVz\A(irw''fr+笜gǩ=FhËZ:5@CWpp:3ݡɑGRooĵ+IA kEAv3-kƩB \b$"/$+JV׾G #b)1bZ.#O2E'ڨY!gN/TMB_<- `lH5TP}<|<S�̾{8. RH@`x$pwID!>mO|{5˷{FӢ|"ȎL 9 M0U\*@F*AG D3'L<:SsψB9_/:A}(Xk&ʁKd=||wWCyUdsx)])3)N\ *kALf,|+][NWKZુ^qL@ n?D(:l=}|Ƥn iOX%m S{4C**h[-M;!H=wώ[BH>;ޙk v)dώwB;P"P/{(Y\ 85a8kMmŹ͎L $$ >|D-hDT'0c̺/Sj)\c9T>]CPqݛ=8= l1_ 9,O{%L-h: 9`ޱBNϯ)Ԩ(fYrx,c6ߧ݉&X\K*eOr~;e;mKƸvWaE! +oL=X4al`h *Bv;RӮO|<N+Fܬ{l?fE=8x4{뜡HNv^ {j y=癿쭠5~U!_3L@2= ½fb7o]+o=&<0in"X L0ֶaPC+9?-xftxA 7#JN5d@n_aӍ3wu8ab`gS2?n?7cp]P5`%r'k",9+ι *W�,:A-*B uZN}O5<+tC2J] e(P}7)ck /-6DE[yBB2I@r*>%&Kɪ(G4.TvEXf;eʷ#O#J yh*s5IkԕlGIufh#M@"nȵl8FW &_;jUxw8(O.,~எE[!<'$xO.ܿ^q1yd0")<pw^|] ޅκ*Ƅ_`:әx"|?^D"ZBlF}1,?F7 sz%Bbd%s/ʡg0#|0;h-Ӱtu2lv_L&A2 ¿ȍ �)V\ı Dmj�B v!Q�:F<GR\އdUے2&:G뗩[wz)7IL i9Pf7p5Y?X*p5#aF&_ו0?ތi$zTVǤ1#\5H ׌lFY܋czیP]@8hDBsp2$ .R)=In+tt3l40I|ҡ.lz[¸ai5RV_|.Zp\<0UhK5W 8Du!Eh)Br0H03-L oKѶKFD&=TE >k;UFh)iO<۸-)75,=4lhVA8FB&iB5`Q{D38p4BQ,} FvmF; .m3H gPz:&<v`"x!Bs [c){9ڟ?pf:0Q\584`�T7J |@AȐ} : �H i֡mTiJ+(TЬŏ8$4 3VO0 %emCi-ݪEnvMZ�DjBE uQ0^Wu8/h\B4uIԽ+ұWܬrotGGMD(nfu[PܤKNJ;8 T~Ω"X=3~l'R]A@ m4 D6_TO]e"x|XU]w/OǾ3Ц@u)"SQbg,^.$kFL[5ak 9s56 c$E]KhŶW=^7<yqBޖ6m|}fj6nFVBbd[&[bYXmAeN|C~nf"ΥEJO "�BG9-{!Y[qɗLLIΝaE /t9w6-dE|>] ]u%k^&t)=r>/]8<L1iACݸj|: Wl?,!0hOg3 huc]~1;TnELsÚ�=0[kHǷp5Op ݕK+ߞޕCxCxo#fǼ>/=jrZ}@j` )rrJq�xtރfS7@fh0u1GLU9e65zvިO AU'Pޭ(-|GYZJ#7ew$־™>hO'&}L; f\K_~AgcOG1YtFK?]EOu*d(E.<2 l6܁IQX,0n3RZ%nشמk>kRX:($!rlW:CL$G`<)"۠JqQ8ֵ]}vBp$v /($1ll2Q)G61@ �.E JlۑF%ƕ[6gq>71d ıX^ OFAfBيoEpX3PRb6ۿ`yb&ZvscO$dZ8g 5'Vqb/2imb2 Z6zHA=T&@JB[Cu,!Q k0jJh~FVzx6Hha_yDc%QIT h$̈ϼ [Z=8MDl(OG񵟬^XsI3C>FZ*HeܛW'zȚ WCTФ'-E狈YI q =�Q!K낊" ]LWA#5F$jZbg!o(T`flM?݁xO\Vje֫NG uf~vUz>{l0k?_ȔAxǟ4?R'RA}(^ G|ȒE(n!'3:VkZv~p껹{=])X t xP,H$Bˀ Ѡ $APk"@*eODގDE[t>$yԄu8,"3IƘ$oӒɎ]Ch�t<W=ϴҟj^h�1[ǟ4cfd]l'$XDADC< TCbHD"bf< %Ed!nAVO4j٘4 bUdU8N(5cK!J.&9C)i'Dr8k1xH=!JEQJ ax=H:H6RFXOQl71\į5��cW>L˜8Za2,+̽S2C9͝�: ]E7+GkXK8$*z;zC"N6ڊP/Fp,7Ʒ'<N2R}fƒ9S6XHݭf,(R |g4#sxI3:_?_drÀxj@f_FS;*~7O<o5h"�*z-Xe·7>|gbLvu$3a~5Q}gK3?3c )J1N_OيcC5aVIz~KgPPWIϞ )&=4FLQ>ze`gP6ٹu+|^'}`'�h~<b !}9 w8s#s 22"y^yE+w1pzPi89yav%"HՄXKN١' 1ߐ9�ix0#|&B%T^,CXHXp|E0~ᑃ˖NϿKN#tJ-H�aN鉺ލ`[7n4qgxd{+lkί<v 53ceZ+ ՉF;a>75B=vK|Ζ";5eyPe˻&r%ti<>܄!jpj w: 4mS%&deGdi('K#Tw]<qrU}I"__Sߖ >>+c|+i<}K6GS`[H.pIP|lno|,"]+9pi#\ZbHk!afRAq.D*j9 X(J@)ht]ֱ7%.8Ũ ݨ zatT(E'd]>AJ0ubr`bCa26HKtX {X�yS >^p)E"._B\n@ X)j}!&=cQޠErUq^Q�8Zb8hÙ 6%! z{73;$gn]_~eC-JT$m[Ew];+,}34՟|wFɊqsHn%A'\ȵl#U{R;+QTS@ (%i7 @gȟ#kq+\z? {DNpo1@fNRNT.Hsx "k |m.#|xG3zG �I% !ϡW0S17Z-ۦ--IJ{ה fXċ1` baAs8R;p(7j[[;@kAB uRbhvFUfT_*aݩ"IM2.<e1ՁO(y!mpuʸ!oZ;``.gY5)Dkf Τ{ɌםJjR8Jt^zL**vjV6mE"u$}5 J͈}\ ic:UUR&}33ʛq*uәX*#9N M%is 8(<+QƐ0+I!~w\s^"Yup`C@w\B$(HU0Ju°AL Z+k[cxf4/- 7lĥG8ƨdndgLɊo.>ͅWVOSDS祃ϸu*c4+-.΢oMcLo$ C5p[hhtS8ObQ8b8I] 5~gwz?TJd,CH-Qj bIw>NL =USG'UBGp럆rUHP{drlv8&*\)d&.Z:ͦw"+yNRA"7IHgĦZ4>h@%ў"=n-k". XÒ/-S?1QjFU_ԿUYZ u=onTYoOG)kvT&$\$lTxuv<,p(y] 0l71H kM]nktp_8XM +A*~;_:7aF}l T̥8)fcN@S>0wj˚ڱhN + F9v&XVeިa{ԬK/ 1l"n~*b e,({![F*pQ-b&MnqԨِnt[zbӭ4{_O`|x2cf瓍L GQd~u 50#xOͰÄAfc!ME&>5zafhV~c#OuFQ4`%ͺч`7Jo G=DP id@ ņf-Eߕ XEc<�0FmDo)z׵*�㙅τ6@ q #;24JvLnBGhO9/.*^HKk)s,?BUkU"x(OPCr8\>wB xPۏH`Zv֎<V]@6/; 7C-f{z߇)7tTvA9%!`5a(JH `ȳ͊сD@ V<t;3T�Epд=jmsَe=1\v38.|lOǞ0q2(H :Xl̰ Y $ g"u'r" Oza Q2GITCg!Ґ뉋bI.VLoptm�c XX+Cz1�+�HA u-�_l�x p:_<'5;T>)@^P1}i@Q_ -+ItSqJe^XܠJ}<t}mC[' ^Lc4`d$aA1<)ݢ7$qƪM~'n{5e(r#V "ۖ)^44fU%}"�E ZN}*u:pf)-Q>NJ` cާ'RIHyDvVF_m@ڠB qQc22:b= V FxU#KoIz< %B,= :J:2!e8CD6X!x+uǮ"TW-b+0 ZX!  $Bag2s)>y;_6�P܌w F8]z\m }'1M x >y $0apw׀&4�}+@䁮e{@Q !pKgX 0f>2@ƫ뻕_ީb`qLp1IOR_@G' ٢͉cWc-^x7$ ^{qu!VkFܔhQZ²Lv I0�AчrmqDS؈ [wt(vj w5 e-%3aj)5ĨlRARxsDN<@4[mRNFY3#1-)?W Ox^8OdP<HzǼbY,T\靰T4]F)ݥ%^بxvFR_)"Kqⳳg <b9qBwUf5qā*%`~�+>>( 9|&UNr?07m.͝Kz.C[y1`Ʊ`61enDVUVn'#3m#ClUrrNl #R'Ƨ ^rJp}z,]'p=W9K=|[kћ9'%+Qdadw'u|,`fb˕9pTtHA{Bs~_*| ? : S4@x|p=z"׌/E}b75jf \Ʀ`\4.(�Â'Wd$�/_*BoDwM(wJ+V-Wf*�o?/ ~Sb?s95畳Dj 7Bzh+̙SixbNv9,\ | U,@!k`B2 6(<=j !DFFn0ÄPQ9FcGe.==ҪѿpYœÉ`;"0.]Z+4' Qn_6pvHĺxV90pQ9EEqVgϋrnZӳ# &G^ΚF>B9ֻ\u'zW:kMzG;[|wt7YP-я`F;Ñ@=Bk�)"@'xFbT+jQ㻞 WW'PߧSV&J%3ʂܦv=gk\dyN~.E-a�@$fIh(1TbNpZI3hH~ܠݨR V$yU j0 _{ᷞog939?^o0m!ꩿ>wjo7"N 0j񖙝XfZT0г *js Kܧ⮔=AO(FSOOIWgp uG^O@υ=djzvK={zUAڥϵVmo^δpδSCv(w ]Ιw=\gsFN5c.&ޟrc["ծF -Ϥ[&㝛-~Z '_ Lm-fUi#^40oi)ǘ~` `Ot@*Q  qcvSk'@'. L*E\Q%㴢:$גKjse5Tc jFٷX\y=cw1hgo|3:k-~Y ,zfR1�6m�kH[ J8Zm|!e}%]f@-#rCX 4ehl^83"> OC9Kq"8}-'o.SF1&=mņѦJKRZa=$ANKTN |>Ѧ:DɪEqpzQ ,stb66#ij`6jL<Z=-MlI_ v|~ŏ.a;t)轓YϞpft's80O!`aNs%<˟NR٩/6huU#Sijs₪Ym9kʉ]^sRRo0Nz<Pq=<穚msR21LuGrtcdhpӡ�]5MM b$8} }[Jwu<Bݯ~%Lg=l6Nx[uU<mN<-J_m2j-joJLwg8l˩d[L%U|sY1Xj�Hj9 F"Z;Qx;I廰@"lP%22Y)x\( oFXtCNz!r%dIIY(z {YG~ ?=@l /+:F5 %ii] 5OKgUN/4)~TTl'^H+w)=zIGR1]I"JTna�(PsT{1ZrޚM^";K:t rtHgN<oFQݥ\I0J{9sv: B銽|9')NrfKBbHh҈*mMS^`BYrۜ38>,Xi&7d 5B:t8-dDa&\|Mh4}4g'Ls?` ]`38QyL}nt+C]9_a5`>A26-# Y;44vgO3zsj9M  d ̊NO>ыG:P" hOΠk$YuDBB*^GFo%C@$q^wa- 1-cIifJT<Wt2 = A}2 јU9q= RYG\Ŵ["dA�hE �  opV�)Ch*^iߝޡQ.!/к bm#i.`` CZD? hIJFez 8At)-,V!d$f5Yh2id*$C}L?1 e0BF.Mי{5xujO@{}[=㕆5\DV=ysX+aՍq>R~-hA{eN0N{T&U߹ M5mWWd ♐ʴz]$L;$fƫ@b-# j\!ȓ4<Ku&dCT~t2U c,oF1 )23ʃ:7{F)=%,ƚGE}+,K,q(a/P鷐?a7 T7 R?dpS 0! Bjs6CBd"G/ :Ϙ8 yx%1Y^a$ ؞b]Gb Yzp+N!TVrUi׫Nff 蓑=� tOFR 6Qtq&i4JnZĪt҇.4")}7 2Y}f #>!#7v1==Kѹg$ P|:ڣp⠋3fXfӔ9h>ΜVMG '.%nQ˼KQ2ڂo |dSaC3m;8\yG[be~bmp(f͢[׺B,{&{F/WB%J�a%iPI(6;T;oA&C7U~>Vc CD⃻@2-wL'TfC�OK]%JDհjazT:m JDU Df$֍ B_lH^XZZpH+q$Ƭ^Z*Yr�\{b Q-iת=~J:ԁɰ5;:"un/< x2Bf|G">:fq`p3Sg4=Ĭ"b!XDL!x�){$^WܯŞ@4M2-E qةdl?B}dJl.mQĔxF)iB=H⹆X3 6: @cc-AJ?gC$p=s򽆪>F>7YkPGn3=0nFbdh7xɍsxoҞp졶yx>xoS(FQ]0YLc@^.h!5�m=æpF:|k Ϛ$XǃDHtoH2W9T�V":0D Kd܎:Աʈ8BL#:v_rmˎ;x^>Z X @!/UPf;;Z7:wdXБlp/95iP;27Y^E07 Ĭaޘ,0^:1Ɇi9c*fDq2[j'ICndVʃ�뷐K֔M$@757|ìr!ю啭=Ì$?^CtD !OTAzA{|܋ƘlDcePS}1Cq`uC7jZ j@P\*;,%͆JfۑxvLO"Z^a.Ϝ9fcKܷP`1Bݨ-l+RT12>/vjO{ᾬ Č )]a">/Z'8ET%QZ!;z(Y_NK"菟? .Cuжѡ6 .[}}n+ϚJ2E0cErKFRFҸÄg#Kg3"1\QIx@=gՎz;tI'2#!$J &G,F3 oD3+bYi"d]VwEܥ)1o 1Ůb`6zQ^&vˢJKPպ,V%)TJ;&q:\kr>HJ+2fǟ:cӆj Z#X;FbƑM𽘭A0 ZZ)NQuNŠ_ʳ7 慝O8zf^Pr8GJQ/` (`8C u0 かD 6X'|mP ' /lpxAL%݌mFn~n;-C5`btJa#u8[ԷKzr~Vf#8)hqK'2JP&ZP%,[8D͊l>-կ٫dR-aUi N)ŷIxyP9 G CXm|dmGak9<qTkG2h<5*Bx6KOR) pp `<~E#+ 5VE?VʇD:=`$@#{jK1WWO8f\_ 8d@Q-1ߑ4ъfxq5R(0/TaA:1ћA06l&;$ϴb7Śhs+)k&VRb$%Lϵ*H%<۔ VEoFuԵqTEf*EtP.Xx}܇GX-RbA[,j&td-1#{{cE˱\pgD[v\;7X+!+昍Ťi wHfwN ydID^Gi.~&ety4c95Ԑns"יK"t`[ƃ^\^v@h1q(}^&3iJJ88g$" ryh gl}d:pw�~SS]ԸXl$|XHZ $zA2h5ĭHз.nH\ThkE4Wͻs*ޣ2zihTm,q1,TEȌ[Qsi33F_* Y~8#*NŒ�US  kmD᪰nXʪꧩ9IoΏTSQ]Q-l7puᆛͷ_'{K|Y^ZEw ^o̓^*(|l善RD yu+#400Œ)< 1IghyCy!S%xc](=d@f<b>ciK_?L|+cf AQ/T]HU1ڨ+['$0b\E=y Ϧ6eʒ9/ SyNrGBnrZEܘ:}OE= qخAz`qJVƩщ�I7mX`[�Bu'г� mU�ݪamj�s_ Pd?a3^TK>[yao D!!ZPAÚ |Ngъ`Cu=a{e| kYc{glNi[?J5_I! sՏTw'  ظ{o'=60y_Hv0ȗ㕞ދw :@?*cz'$@1! Ҋww~Qޚ[ӕ9Bi xUa 4ib-l cS|/g _OH KMb#5RB,y#@Fxx_]-uF[Qp�eCn[*HG*=LN{qJr`ъVkB�.imPk5Íw %Jh.f q}xލ!c:,4Q- 3S#ײw>W.)wYY!ERFܳ-@[%AAU+pC@juQp[`HE6;dl A͂ -1Q# d;Z6E>`G|Alk$";gj s&dlli'Gc.)wL0>XOVa?X5}FF7<W֮ZXA[X#:Vΰ5Q#~uZY!_[A}%kf^3WCskiťèW|^ !TBW`UG,-ʍcv°ᕒr{8al\,sl4ɝ|ðy\X> U<"H&Qܘ3zV`S`=%4ll6Ax*<&8+qU§tϑ)'ŃoקM[_w e[ TA-0gK- '4`{&Fq3L3L؍ toè'xooeh=ޥ<<`:b=0[ZxnV\2?j:AkPN;v/0{y`v08R) z-d O[T_?c&,7,~7:Ȥ}M#~pk|1 .һwz3.­:'vǏ^-bx;v }k�q<7^5VAfu^f'<V:_숸ּh*ܥU[aBV=ab %tfL`0zr&dm#r3㼣6:{snPv~o;89}34zn|17h3=>z (9xCD*ιrD(lsKpe]|RgǞmep֪ϧ>>>>N݌ q ں%$и {/G8IGV"Ji5"whRUT*;iga!gދtr'ƉHCxTO+/�n%',ͳ ;}}IIϝ%:YzW}.?$:?GEjܥ̩sq#`:}WS~WァN=@ow}x/4yp⪧:6|*ɦ@3zq.نϢb-JAqNAD͝!{)͜V\51 |R+Yb&xE.!:V5.9G,gѨԄ o6#[Vf8ļ 2t?zzKT>qP D YVA=Ğ"FXzXN8%(MQErV?'XDk$L4Ů1vhu S=UD9HVChu>0 z:N'Rx`"$^)E 9sWcu#9]k&*M2wg%JF {ّf+ 9~9-'I 73l{ΘU[BbVPOOs \�6b@ac-P[-q�JV>I3,4 \i"3*G;p4ӕ_QsUjqlrtc^ QUmI>!UZ (ܫw ;@d߆'4!ޭ/ĽLXM!+P !=`E;ʠ7ZOµ$R|ȣ`1wgަOgjЎ#Eu0N,Zf7ʳp|вƲj iIS,'uay]MZ=:J(zxL\jYż^I^fE+'TOVUޙ̢IYdXkJZZs0(^{Ly} 6ߔOޕv ;*?qeuO@q5;*WGJ_'q$Vy}8Vs}κTQ^w|#ԭ{֩MDoߍCl̋ھU>W<ZNc_x,-QC5l=][hCGqdC4]jt߬:êA9æI=&,:h&w}6g>Fw=MKG4::i�oVZ5‹*,%-m*ۖ396&0#]j0:۬V5rq96Q*LI$[T (_?&.[޵C)@, 9EʴI[6ೄEBR_N{6b)k?OŒ" yO9|% a vm,(n@<:0`I #o[y rVam6q� Zn-ظԢ9M-@N I6V @RB ڒOQd+#^z| H@F5%D.b8h -2Y9ob8ǰ>=KO[`|.rv 1"C!N;—q|X,}o ӭܩlNna{CڑZ3r"~VK u z9?7tI:Jɤyoдt>DP?{`VY *U0 B3@[ 襤B+^0I*S%:<k!SL"IMvO݌鱵#ZZai%a3(w>3&  t^F*!)e$<Qe䬃t9HX~"홣B*d}"'"Sx_zyBN"d@~"6(UD$l9bYּ (B:[VvssijZ$ձ-Rx[] fV%[-X3fM̿uXZ#԰w 3sm)m-Ie3SG̾8ʼq=yNF0DQ=wWMy߁݈ZS/L(R$Nb/ 4G/.5]-ɼvEe&_P 1ēZ[xlxDYJ|FIUDpIK2B :EPAѷihsF߈.IhgMh+%+ H…*Pn>::#7@v0^ހ#D^4hF6Zl4o q9`2>dRofox:rCa0B@R9(!p癚 UmZi}C4|C0MD] wgI':ܛ#{>1 XUeU<uŽ4bp HZITP-VPz[E:b'BAFQ#]vxE\۝?_Y=L0tDh#9#y&C.ۏf,{_nV3bv6TZ^lFypA ר"HcTr8`#-: ˸jzKGc-c>^:%{ؗ{KgtJVbCLdQ-Wav>`i'<TW=I[c,ǓmxNR&|dts?wgXSf LGCH8La*- MM&!0摜 >&㳑?^k=ä+tuQisF svjv�IQJHUbdB2߫�Nվ)ԃ^:w`�GHBBApK+!<דkyuWtXޤa򆪰Ƀݦb'm=k@Qr2^!b@n)GڬCzDaFR; Th߫qbfo-o"} P_['zq;~�ϯ~l9m>MSfzLN5`b!@'~hd304d3 7qߜ/ 4J8yЇqPc j U`;ea6 bn8v}#kXOxp1J;jNu h50 C�@jwXJaBRŭ ߅wf3L5\WMwT"x W; -;p_~ftN14*cTwB>m\j繁r,(oP6FҐrFXTpݜS!a;Pz.RM/NNKKdRoLRMWp”4suҟ?>B_$`$#S='{RAǹ{Ah6P_2zE"lMmf<ن9 B")(!CD<Q6M!--'s)hOpF,c,:@  i|ӇN}5l;hh1qZ(Z"_$pL?:fO\Jχ򳙟1hǿjƩ<@ )V{x/4=ؼ}hN^Phh lrH9B̸-F-X@3,[1l$2 >[JPEQb�9:�*j5 KtnGSY#MO ŕัD!E-r� bZ#VY?9]:m3{tf+N9k{66y%C]g?)c=z%Medwƻf+NIqK^b"?_5.aƃTk)[?CٲktPӏ b QjU#EeF٬â.pOl$z oe[+ǚVf՞U]] ؞vcaׯlW8OQT`Zt{Ԥ:58XLж<VaO|rrΆza lW`آN@-(^UI64uSpFܒ7�ԉW@ڥ JH@�ʀx)] I3?F,$Zϖ$trajXamHulU:R3tAYkW\pzӅ_YxNjihNX�g ؖȖt-ؙ5$eNZI^65Q#O5҈WfĽ؅Nל'Sy8yDDjͱG.NԐ ot?>\8N5%k_007QmziƎ#Jx$zfHR2 uMs ATT؎`g�+7.SS"MJTڃm.z}M;Q7,vnj J?j~Q|if :7-hz>0#S(=lHeugPxI<<�~%xw@]h@cJ~&YcہP3 B>2FdU?m5OU:C1x"@Inu|U~ks15uSS/kwԗ!pб]7]יʊ*=r!JY$BW6vPS01x~`) iO(yIchB>Ni)X)L ՞: h8? 1\ÌÓ47Œ^'q60w) E<N!:kZмm1ϩ ~*[~:^#nAxlP>HFdըF=FV)[#;cP[a Af@yq[h*"0;\ޖV&$[=Þ{"c*Ks vBf_7/^[ΘH>)B`a 辥>=qy=_yA\=q޳Ǭҥ:L"&3t*B\$VwelA h*~qNC[d?>è6.Ĵ* ,ү+ƿN ke3_}CS~xO;,s;~7F: +:gtzٱFQtO{quqaK]w4&UNs( 6y&#D롶CT"j3 Ɋdj*vx>N_ss9"3&8i_/a-+a 7r.Xm0.(@xF0%wW} Z0|>DZ0V"ތОc YlV 3ܞ(. жj V?Г _"1&c#̈?J[lJdYx#=eMwGs>ŒθQTўR_0|$,˰$$x,'Q/0 # gHjIy" %ޝƾ?x0I&*RR&Xȳ$!, H"z$1Af!!7;FX I"-vtTCbH"  KD&6|cS\\zH#S5&M@:S2d$Sa~>ŒWS÷x_|WNtG]\S8}0<1pWnQ=*{]&q?Y@%nn\>?ފF^V+mۚFPk)-GjT/} g aH uF콛]/gHr?FvPTqj}kJ㒊Aɏf]bWh\e}){{pl /3v NՖr ,2[%ĉsWxb> kQAO%AΜ"hх$a"Ksً/ϝ[t U "ۊMlKNKǯyZPG(�ȏN|pjM1|:4]_w4 TjBi>n66k?`d|Utda]>h|Х/ȃ?j/4<'!jjj{3Tn$ le*ؽs$@Q7dT" me4qn�| T۱ z"[DphN+hBkb@{�s)𦩡hƦ X;)zoR0YЛ1Ɣ1QC.9)}$uFX6ԶوڲӚ)#_E@A#a? gѹzt-:բTMp Z0AUE~!Dկ1oUuTևdQ+mEpDrBJUELhhvf2*j\q?%+q:Cne7<bƪKqj^ŊٝӢPnsbPs[v&y `i7<Y?^ݦ(,4-RnJB[3\hkCޚVD[8+HD#Gʌ|И:y[AOa=gRƠitggҍT8KѝiMaj ?EwMa>XT68ja'*>4$%m"x7\>,qqf 2j"S0fĥDAriN"U`@!X՛d5cFHZ70*]  mP'_ v�5xJ @D@iϺSt&^5o4hِ$<G&p@CKA Ʈn,!;c4krŊzӳ,=]6ZKIZ;ԋAG^)n 52<Ε /ev<ZƵk[ Mic^T~A$<%0(# 3hk|ͧћΗ:<ۯuI?s;Ӂ:F~{uKuCG^v/;]tu6n1Cax=zƿTίj.ՇjDQЬ0}X]#C'Ȁ"bAa-'`#`-b&bh-gqCF]^+(f#k,*)xv-zDV 3.IqV"8ˆ�rRlJY]uMZ" 3q>ʴҐmgw~f9g;Q݇+C� U[&퉠#\)k猱s 3=~yƣ@U.B+i{/vm=< xQծ33_z2\䖁3F0RU;.rWq[(]̹ @ii:16]rCV073wV!!zbHqkO:NKX\zEiX"6o_8;!뻱8^a�']['$ߕK]ے+Βɭ:"4 eKO Ed;1T ؝!e i҉"{>V$գX`6qʅ=()*Q8֥+k~ʨM;ѓ{yɷ Wv߁>i9W+2Ne9d\Z.n^ij0[Bc00ع 6tq37ra4@̛bi i}xs\wk*c9'/bFJHT||t"v+-lle\ۡk0z XZ\"}V!Bii`求m?LM_\&`]7 -c :v}n|S�k )VW^ױMw芆SwNؗ>3UI1;AN .w/ZrܠzK{ kKВV;t Rz-&S<%kc>9uI*GWj6&$r&Epy {}33JhϳgL0㥞KJxNCX! I\Z#2Fxn,[ϭu3 Tਤ)`*9!S*Djn&8nS;&\1u�G;9|.d̜xH,^Q."K,qn:9xȷ3sOe!.2|)Őr<npԭD#5o'ٚu4h)VGU]UeT-uL1UeLLCeh\uR)>RBjf 髍|}8p9% ge�A *2wL(mf@+VSql$P$MiU}2U>#JXY;՘1sUO8i^U|"X,%Op~$_ v{yet%|@VҸXh7QJm0ߤUGWPe*Ӛ@ju}}oAVȻu5S֜vOnXXY㼅x(CMi^ϝ[@ "]6)nM?1ewq`R3~`Xƫ U'[q&W\s4Įקf8Np8+q.4;=#=oqL~58Tp jwqoyo*l+x<h'9sXHrk A֛ƒ`ijrtXZJ>#ZӦ")eS6[ݡ^0np?Z*Ԫ*kuYzECPrPXyq%=D[*^Dϖ߁A3^3>W~ C^mO1q.[\Ϥu7ODϬ DҲCFnn!='\(1/#ѠXeC|!(Ė\0 vjW&Q1>0W]09az$WFzR{>@TG̩E5PÏ" ,>GecFnԄg_[NqR?rIL֫AO 9R<ou?˪j2Uʼ*zed2K^pMW?~?{\?u,ap/[*R0C 5xCNb[H$ vqgA_8upW DZֽ΢7]F,CEdmzmgzCXa{Cxt$0H|,p>b7>j�5g [v#d~]:P[Ɯ3HYZ&f%}{ $0_eG< _O_Q|s+5oQef<W7j7ga5[ǟ:?$Jڼ]` !ыb;cTdwԊNiU\*h=V2GXP_6If`LQ;5dO^O{Ph ḡ(_ uĝ4U yTn쪲L;*i*&We 8DQb<{'Oj/Sg\׹s_i, Y%Q wBA=$yv8 %ZyP;k BD!`<yrfd#<�7Eؿ%ɮ ɱ@Lpxc 39.nD\Ltc;nip> c{<g+2XQ@35T!ކjXUd{a@qwKz18fAj7ʭO};pMНjۺ@3 &Y7&YwwR?dn[J\*y$cqK,HcVJΙD]fZkQɟz zQWgyFNs'SGw?Njy\;:or.dU!n*u=D:Q1Ur/e\̙=C4s "6˝\T-FRX)&UT gȕ&;NfSlmRU_s{ G읅fǬ:-{#Xu UHuKXi=FbOz*ZD3Kr{B0w<!f_/IeBOR u&N UW+^B$&=~|CWqwK?LnX䇥!s,kw`O#?J�6U Vr?nǭvpA5X^/ՉT+F)D.0ޏ`52QpAEBLrw.ǵS\;= _Qeӌ 9e.!ۡ4<wUlGz׎cTnJi�[0Q&rIPgLTS;f4)㉧]!nVPmU2>kׂeO)�k鯞ڀnD_w'+Dz-^fbi>Pە!Vp#܃[Y՜a`N =^Md7 <,RlWԎX4ܥNz _%o5>a{r/)) i3'Ou⒇\I^^r:-jI5` #33 F֊7zũ~CxXPN3\ׄ {E9HD~EhJ7_\x낶VwNqgt`Ao)F+7׉^+ d wY7X@͂56ϘҞ;y7!hT;u+W`da�V)A| Wc Y>rR3PN W6JjL<G%,#r>=WJ6(D_X ?لx٘26[XNp9NЂD٘$cFy\J0wx2xsŻ&=ٺԆm_�n?GBټL,`1`E!{M&^ iN`E:Fhnq>(_~WL@$/ů{* '`Q{gC}s?٥laFOuژ t[533nT/\^hjޫ 'Uôv8aHxcQ<-u _ً΋L?yQW3�p0>v1F[3_%_N[װwK*GQfFaSR8aPaRo0NP0EйQ8nWQ5c,ct܄t eD؄4&/Q}ܵXKݕ:Y3<#uGhC$D.l"Wj]lGh0*7MEQBJwf./D 6olضE5% ̈́É"3=ɸDɌE#0cu瓯1Y;_&Q^�{[r<�cc  ` og0F$Ӏa#4iCۛߺq]5Ugoނ\\o%M~BOdѲ@{P(9!A bC1fL6SGa9;${%aFQa׍/0(jQ ":Z<¥{~*%oFЕ9zS`7 6d*zUҫ>I&]2In8GunIri5Φv/&qxKV:?_\I~aw<Cr(~gq'ރ(�@&� Aq&%ٮY%|'Y%1"Y ?>ڥM9sN/ KI .@$HJ~L:ї9 HLf8d gR3S71!lFY@ψ lBYތ=ћo2h'dFmP0k-ޅ> WlI*܂T3Mh2L0]sՕ 8zKd1_xYKZt䉯}RajL}lQH< a~tד8\TtwssO%G ծ]>c<{캰 fisfz>qq%'3A%Exd fN3g h9@=n#84ja"y9e%\ m,:g`R0@<*VpVb4_inݙ~!�WށFpATvs@ü8ci@s5_ߩRbkVNNhIpFXM H"VӌpשO-!"#`y8"(9@V۠VpWӶun YGGplr6;M)p|7͉kPUHNs@l9El9s9%?8NPzdES,\VGbNjcCƢr2>{<U~15 {tY8>8@.{צhz޵) yaFm g(ܱS݉kSi&4$vm X8/@|O/ňwUqC/ł6U.RܥNV Y)h淸)+9)ocx-Y O|F^lv/?ﴵ␷v?lg-uG${qTrQt$l�uJ/!_^@[Ybܷ(hJRV' >udEf7œ`7sVUFmca@+SSVZ%cHD}C8(c*:vVTH)r,*TF b ߙHEtP'AtJj9b88H5?Iy/}K}NEדձlq][ WkD]b^G)^QJ+᪴N|xOe~5hr'O`TÒ~"h޻K @&jC?O,y3seI$ TY>,]Ã),&(G2lt 4_Z$1 |6;/KcI0nEA~,eS%qźhbk9{9�vmkzpK>8^jׯsS'ʼn`�ur9Zcpﺲ^k_ |:՘>{?]Ƿ_aT*guG\Hv@nN;&Z."6m/GѶ =`8�:w] ù8dۜCh4 LV+#TIϮzO`<\ҥZ]@S KKxk|L)1;輕\9ȵNv3vWO"r٫]G_ߥ}J;^nn=X۳}}ܻnNit d}yoϮnu5^Xu ~|zx((>̀| ~@tzT 4Cӟ$]/YR"t- t[ZMXnc8Y -?',^sf�\.yFs*/2}zUkO@:^䗩+8gw?| ,{ыfFz?z8[MM_nބD ͹l/ xGfGbw-YN;s~pylp""{]scG:2#U~)Ѹx^sK*)gu?\5W&wp>x݅vU~3HR+]uŋkt{1Mq*'IŬ J KQ:?}T̏O7 XgI6H%%hВH ސ&j-㘱 KEgVNF :o۶:ke+64so&� %BIDO.ySK.w8<t w]|7\W|_#ׯ V/i__̓N%z xk:|5Sޏ^ƷZ1xB8? G~~18/βO�:N\cs%wA5ƒu̲IyL]euL:K꯳[Q$zv=ZzY%!hm_QCgk tUPl`=FZbY| K p�dkWAQ?XVw?j_1G&yBBNY ]&my]j`JkӘ =ߗ<mԣ>M]|4 #5{q!Slxpwq{4$:lrFԻt7=XוUX ҝps3~NoӮz ^ gTQ;RMϡcPL`!^ս:ktAX|Pd];)D �FNA)@@x!Uҷi‡ki 6FBc|4uO8n,Bౌ%Lh)g,e+d<;cg=_-Ly^3|uӽQ mB<涒tA:Uz,''DLaϒv4jcZĘƋ]R>f97fɻ0 0 `-N/j׫d;#o"S>sNBH0 A_<e]qP<jK-x4.Mb((GYěEݓJ dDqÞl0W$Bya{Ƣf(7>~'(#cK@ȱl�j[9пjָExlp]kOqs|7g{9%Zu6fE2+ :|¯~Uw_-誙E|| &nDAR;Mаޔ(!;2KNc\9Qt RI,9]L2R )ȮI?=9n40Y|_%l)e-k yIX:?'~Vx} ;/`^$L~Yyݐ0Юt) O35BQVD{ۓ:w~9ݵܵk"/vv4&K%UɌm=Nnڶ*J緙YZhL$U}s6<Tj~$exT/'C'Nz$o4'6b Wv+R. ۋՖ)_2=۠;5u{P ;\oE?'."w /"un?#Tj[5v褝g%@۲pl'ƙXNv3+QOp 7>+=O$ s�,> >Y蘺St Nם!q�zSPL:Pݷ[iޫNt Ht9zS3e&/QשtKjQsQ,>k<Dg )+w^̾TsMCwͳVӃL&5PZU4[ß]O3qݧ!މX! KɽݚvW&ܺw]x|qTb5r#?[kN;俷\gȮ5^6r_>~l/s9.re8~rW~5vዸï'b8 $lw]9d@@=TޝN9AĚ`n2H$J8GRӲȋ$%i}s540DGA$* ɢ�P"x:uY$}}J*&"sp$}AK*@5 TIg2\o5Riʥ,*_;;u!*Ǽ: U$<HN0&K�')U+{TB<fp>u +|'NF񅀷6?OIU\&rp9 !)b Hp5 A1I0 uԕH8,6:Vz^:VM]ݏǥ&o� j./j'AsXMXY&`fOV!X?Y&̼;ULS-#J˽\yKZ"‹]zO.wޮ>*dL$xn ѾX.-BwM5vmUk&ƵS7\勀% W~5Nɿ=,<xىWw$%0,{�' -kuXaV-K<?uLM֌ԫfv[6K9!]&O>z~K#r5fgj;gri:QH˹Oh0}5>LSޛ.zƻ^]5ZUV )\R PНR `~-PqqޝzJhB;Ƭ۳BX]�MZf ѲCbHe=Kg|賝@Pgqfe鳌d1g9gk#bLSڃZXѬ55R03_.g\~}fko 4퉸3Mk@-aHiݛhǕrvM�*M hՐ)Qer(=+3z&n?g!-b>y+53TJFquJ^c.GR"3hؔ\6$ %25^Q@r_̗zW~5^-;rŕ|Ӛnd/ZӚ.Em_dxv{Д1<;k^y귙3]rLEE3s3J~ o0GL_خnȉ܅9L&䚣7P<ٿO;4X@]dҳP�əTtsoem_e!>:C3mNS',;/Ks?VTn]DAWcs(B$V%D."LrŠܶK_tm$Q˱׬WD PZJ'/{ J+JnpMCY막1'f8L部7ç[ܢNhA{f}8s}[wY<̓y+Vӳ?ʫԮpoM?88A!g�H,z -d_Qx夷Od:Z g2W_򕝐HDanfwo7/ƣ|xCT-<Er DŽS\8 z@wyWT!&_" ՑWXO^g�;ȱ-gb4Qԙ+O䎠vA K?}%H@Rsޓ_&�<V<P.eb3�8Ԭ0JO Щol“L,�LF;7f?:;Юz65t2 H^�}VV> sM22ijXIc\B_=<K@2^ѫoIQ%m `5WN0:쨾,^Rw*>%\Gd!$W:5T9waq 4Kr`:LbhX!j޴ӨRwZ:nO\}!//0s+SsfGD.HG[,BrNH I8rpѢ$N@]4By4>(WBy|N@>-:$!A ]ͳGd_ourV5JkNUkC_fr.Rss .̋ג*P'Di( (q0&Z;YJjo;fU%:8ױ*Ƌ!DTEwnY}ɥ-fvuZ92uٿlyAmo_G 5 t׿P4̎udd'E֕ONL KSR~錑uf}Y!l#�W:eW!=jK;Y,2{*A muUNy^WS`ċkG6A RK<YD**H)RkT]LAa&P@~I n �+BM$Ԅ@ș᜞Ʃe 0I\rpqqHT) Ûƛ]e(Ϧxw> /(]g$B㦐vlfI^ ٻHu"p=hd12  zjpo0ցL k8=n @ȆE4 YwtrX6Ӕ 4#N `_{O0 |=OgctbވDn|*ҾF 2\Vp[֣ X_Ⲕ`DK~9*ad(rR;Xt }>_m.4Vw)T-zm!}OP5GAOJr(5{Nhv8H5+KםKÁ!k0%[_n]d%򫷭t.D<s>Ɓ &\䇨^9�53@ ((ۡthĬ30\`r@T-<t X@LT �2ɻ7taŌ ψtq %q0qސbMpp ߟմdO_]^_o=ݑٱgwTlȈmdOm4mFi,\|.El_}$hbLv?3JRd~<?t9}ZF/|f ~*i04L1L3<(892='25lm58 JE #J30K6@EQ@lށu!  tf'0TI?_/ )|m9Fo&Z{Mǘ_Zl%fYM!lX3kA] 5k(.h鞎[ f֧wNNWA{tRNhZ9<(2T:J*PB4W`-=S1Qbb՝t+6]{gU"`BsD(4O{2@"_7Npzs7e8^M}zq 7wz;U%=goN{X`>^w׽owW;Hc6Coz55ܗѭ]jS Ŀ 5ivV&~Bsx}6Zë=rl,Y崿0,DgH~-dWU};/OdOHm$.T_!@*Qʶy-6P㓰=(%w~-v7˧9T[U/7u_otp ,aUrb5ujw:}bH1|}mw^>6]K}o~l[V;}.}[uߪ@'뭎* bK_vݹYR0P';+mv&Vo$X�P|%1'_zѕh%k`]207]u>we#k.tJw9VyVyV?=櫜 jdTއ ʺw ,e$O|q!4d/n&qGyi/ۛP@j&:R}Gj5ߕ;po|^V)ޗӗRGd R{'GɊ:5*! rP@Bh#(1F1{!{I>瓭B:+c纄F`O{ n9/Ty Y KF)aD^qJi u<*>5^VJi\emĝpgyC[k^x_m\ kq<)7k#>&6m:d]v($KƞQQ5: [:4wo,90mxxדw1I߳(=բnJ[hȑ\WbMSv#D!2WiN+sHi6H:acW$Dc &.wc#εNN(fEkx@%Rəd$ 9E܉ &) J3Kɕ8d,dw<M <j/>+}|\:ͺEj_.<X㫌;xoh#*wp)G9Nno]w)^Nn{mW⬦׭6~,z.gRrΪ7랝AUխ'YqՎ{%)|nv>^o[ϾNAѿ+Yg[=u:oZٞʼnuVڜJ>Zg5~YkN 35f}mܛu<E{IY_sLJ Z;"׵"뉒!Ea<huJ+Zm[;ZURנ-YXOUoѓ+2_Uv A?~]o:<zr5ʵ$+{yʇ_t[O?~H;xny_O4אKwh\kXr`ѩx<BP#4n26DSe$9-j̭:$Y\Gi*Zz*E0L2e5l ̄>1ˈxxGN 92e6 a&1xfFŨM5S A <9~R|^e{%{lyr_ @ |זxxqy]SLxjԲN ),q,,%у xA@1OxQws(VA<Q0 ŗLǝ UwT>'|~貛Fb@; x-ųV<j{mOlm#lyigUYXykԽr*SٜkYcg8W6n&L~ڧH ue,}_ؓi> |sbFmv_b"YE$F]IJin}<YEve[V(uA{@i Z9Wzhh 5’Mڍ60RDnYWc}ڏ®Z(^.1}` R::ƈt�Y_ d$5@wݧ;1޴oT89=xitYKVZkL) 7|rO\ss%PE@T/ @2N}fIW~Vˤ2Q �WZ Hgj?VZ/)ėW͔}QT}wqrs0!siլLm.d+\ky4EP 3JFKA >j4&߸s64FK9GgǯtI/f..x-QŐnwq)ϮZϼtN#]Φ]$O~m%SdTL02ngd܊+Wh{^sWM2^_O! 4Z|n\ȈRNߺ~>q ywOs"ps;{gi.&'v[d|o}e"C58k]?O;d˟2̋K (;!o72w9;Yq}y}ޜj-ZB%5П3ѷ\¢ew%l}^!7P(4,cz|$I7]S(gyrZkJ_U=R;r`U8ri<4_#7;JÔE6X;>! %a*-O)I%0`AﲡA]AhNx?9U] I~G #voN;Jr<'LJc1.6>ufLf[񬾔S [D<,ϞR4$6 ᳛'lzK9\7GpIT925)[X =v}/irDO(,+ Z Ǻo0 ?F(˵$!~qBey�< Z %tw-G4|,u4{F NsHY<!!][BW,1 ܲ`i84ȣ O?OCdg$[9>Lښnr b Y^ 5h2 3`7TBxGLF.!*ԅ\aܼ Єm^ r�pK >e@ K QA=.b 4&ZjDw,M:r{Fh[B.KtȊ]c&Rr,XgOW1%5+؂A`Y9U/ZhhRj"M~8 ,mWQi '3$ǏE¡89 {1mgP4L4 1;y2jP49ersMDzL% ؄?P[0͡~j&\{7yB8{zB_&.CpXK`^W8 hfJ)y}*^K됒dLxSJQa}Jӥ(iZ~[0Őվ3u = ɉǔ}bbXՇ NZ9H'ynw} \KS-zjl5ibLE(:r0tIpsOL>#jwF$/:0RWOdU.ꃩlEKXRO=Dk-NZ҅?LS$AL]zI+5QA+E' J_;' %QB 8ǁ_ Ѯ_ǭkJ#:dБXXFdzSGHoґtt Fk#߫5N2|ə�_o]K"8nUYbCi4KG?po!ܬ޸Fp9��ۏB/LÇn䈔("bܨdEp[#圪t-G_c⾲0 ey,kTʼnmH{^3(Zm4j+\WʙI'wIpX|z*|.Zվ3?wDt 7o8po8pzQ"U|ba\Z7U(iَo7A M&}R7A MWôߪ 6 X-O??;/_|_-o?cd~$MJokm{YPnr~ooe/(_0i^{Ue*7~{j(܆fMpWuۺo lk"4$xZOX%<p9OݎoT;ǩ۹{$e]/uipy{Ho>*#o|$0Y+~X8oӶ?{ }|>"Yk+ۿ?6[WB4Ulڻ*J%?GŶݷUJ_IePnxpYsi?|%wMkmgmEWmM\o>ҿuh\R8c¡m*;5ԥF C7dغ2j>C-u(uƖ>~ݮ/m=~6MW4ܺD-4YyKhH$*ec˭O5GSWmPc!u.+>'*N_~yΫw@VTW6}ZQTIY7+B}UTia^Q>D{&JVT7'idMuecۭWFu%<_ͯKE;eZn}rT{4=}o7?!oZ{Է3ק/)uТ x}>Ml-JYק֒.nz3cpz^J1>lMO^^ק uD3ӱmPI[ٸO3wGU73e\T-[%Vm *.\dŦhF-ݞ#wi'e>-{fpC'8 YQ,Wv S;lm sz0M<4љܣ#y~e|]QWOskC 8ezKBa-a~t+t3~b^a }1]yeO범N|73{ LYΣm#n}[1}A3]\^̄3HkyӾ2yyzyӮ~b23“3S;Ew>A8젳�6E5WwR==_Ν}.?_n 4Q\VA 6nhkUF 5?B]PU|? bJl^7T+=85QmYl$flbcW[GFXc۬ G+HBEs'"P)b(t}`KXeCK 2&ŕ(6+OoڗXH u,%܆u+ZJcԕPڅQT}V\E_-Cl$1eR M}"V"X+n�XWjSjEQday"^obYm^c]G euZQo W?m^.6%D%(1St^l{]?LƾoGݺ٪ zz\*'ӝ%kֱߔ:\>nݏzoSuS(Rzg%2j3{A{\RWgVVWvD/񴡂gy 9cVyue=ýnRgȈ$X)r.lCCi %UQn$;!WSq_sK=Jq mNֺԇp[ѵlE+Zj BtƝun{zgX]*OaD; ҍvROttnCRw6Zgj[Kܥ[aBKFX镂v\[\iS(c"&u1[-^y!az>宺hsݞ(-Z=Vqj!`8 UJXLn^_q_mOT.C0걾QTTOoQv#YIJ/ug+ ֩Dj De_ud (UŪ9\%6vkBf}_jtm5fI+G]{"á/9`D!*\ˍLj#Ɉ,e4=cfs=_7 Z6{se�btXT_Ӳ1/u EwMOhX'-q`m8jCqE 7pIvTJF*TrV^D l2%`zk=Snu %kD/KRn%juXY:Ԭ3 25)98̝Ku,=mEeycƉ_kَ^ 4%PW:H⊬=FϦLo/+-^]%pumG}t !Tbv4>=8V]Y/ZL =L݃.z\ۋ!dxViPjT9Jp7F㋡R1h-ںC`%X7Z 07^cw{bfΦ*+{QŢEzHtbDl;|=[K^iu;JyغXHT%n@9\BjϴnԦ#6<!dw ^Yy6:YBh ~8}u/W}swj$x\s:ޏ:٘�'뽍nx8l)TMv+|7ot; ͏Bh=;^x&U~llٳU?ί:Cԃ/E{M7ukn(ĽXʈח]bM1u.`2 1)8(\j/3ت6٘z'J*_!#1kƑv ~! tx+\拉Q,-3v*v#aa0 $TBLͳܾgj7ڨfzBﶎ ZH£+oNoH#f-E_w>QZ3Ya76Ur@d9"@Yl׽@<ИpȪ:걲%>,!AwCmR K;@YPɨ-ʬڇ:8ZJ~ MГğ:ɯmL*O?^tF=ā{+xUVI6)0jP&8lЯn\ida!Wq,nNVWmEܑf8FZAUWLJbriv5knl#6)f2]eRDQ *-+0 rJzk xg8AZ@rvӑ0Pk /4&/)8}8G=%`z/B[-t,aU$ƶ06Nr"0 E`J̝>vrq| b@9Q,SΌ;+Pڎ !3߰?'Lj?2i3$A<AH1Y9A"Ѓݎ .N@[ u3WIfpwg`ed�$% )4nY<-,,41zHS"դ3y=V*ݕ]ĔWRRFڑDn-TE)0Օؚn NrWbpwjTiaq N5Ҥv;ڠd3&/eZXb42u6i v�ҸV7Ϯ/҉敌^ioگ*&~/T<UtR0fuAnmUkS$뾫Sv,Kj_r Vև:WײnVA7# .T`ep: ahVO㠓`V+ol*n|v7ދX$-,"SCϼUe+&C*I 7Y'|C_ԃ0@aKJob,!:=ҜB])&}*@tmV-1 Й<pݬґSЈ0+E`* J4*@MobB[b ZwxKM=~]5SNlÐ KˁzUp% =#M,dҋ6 ,tA,l^Ȃtn¾WꑔTՍ5,kr,*Yv-YgωTMWe`p/ND%TsM*kY}X`i5nŔ 9Ji딑vTnsb]M{vxj'ᒨz%colB"N*CdBgrC4=|׎3Or4:EԖdJqH1Egb\&ݒꭐ );U8A dw$i &MZB:ն"O1ړ?8ڇRɰv(iR6he$`gR 4ߥ˪4pהGfc;lƹ7T)z}J@KbPb~#'$ jS#UA,wKGa M0ldH]+[ < ʹ]u߰hjqVXJ\�MpCؠ-II2+1<8W(X@rl@UE&>,L1m*L d b#%#6ZRb#*(y7ymLkTnEҦ> 9ᄀP6u]M$ߏBIUra*B:Y hş.*A7X'3Pe"sUJ Fl@)mzH r>-2VT+_-?@<<*[tO * *KAqMTŜ9XRgOP^$ٸ3Ԉ9K:XÇ!C f0OY0褜u o)@|el `_b#ۜF;qtpj6٢2v{x‘ gi[)bBí)E*?hS7�s^=]ً*dZ Yn6 i@`Pj|D,Q~z<D^jȠbJ&-d&w~Q=w6@8&/O 'ق9(̗g%52J -zXdq@WgngjIzV;W) wں:   U1J9bl''9`1]Y{sg 1PGY&l 48l0N~NR<|#+7f/hJJsx3fwWTQy"1V HGV5$(E /PfVuc 7Tf)PbVs"2]IqÕ[k`a!o&C@U@rD w(yTKBR,aAh�( `MGd%l%dMC@IܢvjK, cJbOD<8)lbsKmjIW[ΧO BBE/77m?j V@4.5۰",붤l]doMe,!7.6M,YٴeUX=쬴0М<e\XuuO$+Há9z9<#'y(%shS6g1 p2Wx~u#d-,<ԃI > k v*ڔ9gQ\YFP9T6»u wɰ] 3 װBE\ 8V}<.(�Y{Od2]+?(/'gd 9#x#pJ<#{Gmf$!=O#tSV$=;%CTYJ޶[2|L=s&\&(gu3Mx6h`Xh:];zn{&*k4K-3ɠNQgi;YN'u)0q .Qg"h�{XT}}t褙;[{6QQ-21~PmL�-"t:Tu^!� FQA#P<H"+ŗZL-p\ 9&r6(*UN5'N^7�y|{�8fB0Ov$N=@#n-:3p,E !SӱCX)!K іfQ];MBa2)AV#J1E 4a\BX/Z3F ŴzkƤ 80G .zEأBMb#,%t 0+/G{DnbXc eEΤ}USS m]7(AY!k `)-ɌiySY%M|X B:`ȭ~h]am {NQ܃"SW[Ǖ9#Br]qp YJo $QdnU{yj.(B= W+u%f [�䅃kOq.i5vZ0$.K<Q7qvd�a.,xުf]T_@VdRүlՏ+d$TBu" 0vҎp! uL`u1bΣMuBـa$x;[ `p.P 9O,$V&v4dԌ' ͺ,W_;+ڭSGmN&4RĂ׊B Cs3% xb!&ǝZb> gq!gj3ޱljyZ3Սnq _7wOqP Me>\47#>;Hz=@?ޙB)4p3}е9ܓқQ_WΪz%:9AÚ$Gc; n@m*'HX"p�6=wh7aj{b]Zi<ͫs8!cy-i B=K͂r HgNu7s\7+o!`'dCQ.d_Y:rtbS6^8\SWNtv*!3v+D<"g=r}.}Cn:VVcQaٵ0y e2FM rU .&9F Ξn.B6?]%UIԣ9.ùª}kwyl QlWIZ;Z2�p΁{r[ 2)كkp$~۵^a7w'܍#r z:CйB5DyqvqPL6͊R+pPnG] ͂i-s͚sP%2-f޼UB\y9Q_%9X j=+!kU- tf3g-qk16gJ�@!7oG碊q@]MF4RZj-a*HAzm9P5 7B[NE[Np~>6R夆4'rBNN[N�Tw<.\YW[Np� `ʴ-'Cr6B�9DɃPI($,r>B*LpՄi  [Mx>V(ɞe2(a)$SHapd$"i|%PJ/`adE4 FxHႝOzZAfIJ@-JH'Hmou?_"5)Eme!oz?٣M pD( <MZrgS )}7DJ" .1;B_ uJIlшb6&F; =$"Ѻ:/GzJF@rUĀDZH'xj0N 4\\{ߕMN=}>~7$Lvh`^+k40O$#@(M"'7aA}ԀZ �| óA'AKI!ifəޛm%^kR9i,1^yQl PlFC f*+�x)kp¸XLON;!:<vrH<-t JS0D9iu(K~AT.%dER,*"ᢅ@G�y� I4$9.cPo7Η}sJ<~hfW <ȇYj~+ X؈ _)ӘgBJ[)[Aa!{KCNJn!k80?ok ᖗsPJ`xjF|Y\kQWoJ=Ku�""p^:Xf+$7" P{[ TŹ8%%l+ ~ C6'l@5esHхPaկsBJA6`l4 2( sRm+;"j0'as"-YixWZzh.qYi$-CB 0'O 30AA`ǣLRBqtEu->M<ڼĶ[V|. 7#qQ;?`hϔeI"(濈i�˖ҿ0 4kþp,e`5,,^b\0Ʉ)0hXVys *{~ ;* ;U}I/#B*iUcÔh7|N)XAuo |T "sT=-)X&P! [K暖T.m9҂(0h #Z$o/ !|6Xa@ jTH5%]� v>&ԭ`_*F0kkWth25+ѦZW(80HVwa�OhF)+AJV_w sAV5HmoM K Q]ZĎ}B`Y079s)̅&-;3a�"i@#Akes,Q^jp�@P2KE,Jڵ/`P6u`�v7``%K-PsKڗ"y(v"Q녠d ҥWa%qu$ƝX- )Fuf�~ǃ=T{y}Z=Y8,ĦG:1Z)�M�)WAN6|G(Tq W a7FvX7q:;?tidJw kaB( d1Írw>I `wj"2m?i:WlGrSvE|aT* h7hg8@%[;2qy�wSpaKl,a*5ٝr3ZARZ9Տ+ ]$Z?kCb eCh)d'� vf DqY0E`J(XZ \ {iLE?kS`E{�`(R ʜCcM%B ٦ăn0nQhErP̢VCGt8ȀrЖ_bC݂r73#frPߥfr"3?.F%mJYZ=BC Ɵ"Qk4ͨ9vp6ReHe oh 1@o7/aU4`hA_(d.V&㽖 E5' LNۄ=%.`2~h=ݏ =d̍B/p_Zq` ۋE&%i0M�-dW&UD5" ^[@X;zNc68E i, |ؚm OP0:.l°R( 'j\v+b.\k/~]@8O/3ZgHpwIS/H{B z7ט-mI #*'p \2( 8lƚF!_BFvm%zjS\#s\s>.Հ+Sn4,&H?@dL <eH�0 )pX1ȕ"i#u(s8OP"-QUp,f/71g-ҰX 2d]i ` CwJVi06oa@W^I$sxMs E>ڪE,}(rg/s52E2X$@վylA)733d%+ m78/)tq d5l'@B<VrFѾ |{&ac;{, (< } \B�- l7m{3SWơ][:8 @'1Bz4;M$ ]<HAd;H>P, $yPNj#ߝU.#0E'ijH#b˔*7i ;Ev@6KE ghbc48@ݔՈ=&|ڬa@V̛O, 0sd1K|E f5@!1yu=!2ȋra"<1ɥ|E5ДCN@^3 #?Pʉ�o醉9LK0�у[>Xΐ 'x (>+SmtnQKXuHs 9须]YGj Gt"#&b7DzgЌ"K %D<D7gf$Ly ʹ{--(ߺ13|{T4xN˓Y%tѡY*{R�.5dBrCXkJš1AKӢs0`t C *j-8+/9D"mN@PZ PڡE 4>J|_93QI_덻x++vk<8bv4Յ!,g>k?-Đj�ՙAnv.űfVcbrJڅE?d*X"XlzΕQJ` [唀r!P8I"j2E+mmn]dz,8"%ZeQ.U11)N#B7C^¾FGcVw/TܫS |^hRĭ*Xjid 6s\ԑkukGMG|PΔic@C SZHuz*e4)+soZ5yh+CrSkIDE`Cy,K[$g1Z(Z+Uv[NUv)#m$=%l};oG·cǹFE -ǻ2%\+(̺'];@ 1T V޷[;+zK_06ФJ5>KoE] ;GxS-][j(ՂkKS!I[ T']! b;FK]J^4T!-mhi-iwM}%ۤ?f_vgBV: 32*&P+Mq$-]BbI}hi-iwM}%iӧ#ZaD\}N%}H VIZJ}K)tcJ1 ?VX<BR2Ԏ+,p`whϹJ!-j%ҷ!J¤%T^&%(Y0&CݔJRߒ>ąmjCKoIn+&-Qöwk�%H δ#r%}H X%޷ћPIIYer^&d!kۄv$n7!0vS*}KkJ%n;4im: _Lr]q>n+Z҇P Y%ah)-qwWNZw^4pE] YA}B>lԷi!-B -ߒvGoچJIK *EL;.h/חҋ)g:YDw۩={J7qehO 9v6VM>LUw ZmqØu%r-8V9.c(q[qVQC_%<W^D+q,9f톻\Yߪ=jŬlSahUg7Ʊ:nS6O]!,i/7%^@zlSwS_ڷq`dZtܺ70il8 e$))Tȍ|Ze"utdx* };c][aVs_[$<REUy([XEg\FNVڷv+z˩S;QbIvBPBhmd};Bϓf7S5k¯UL|vnϭ ÛVB^X β>%(QZY!z~ϕڣVUNUݸ*A WuǠr8:05:=aFm皺A+%m*-EޖO5IMOEBVʝNQA[Irjw&An;ԵhZ)wUu-}Ԕ&-ޏDi"uqVH dCm)-ڃVʝnU[mTS0ՍR0ah-} euk c=Z-YgN(<xd]B7Ht 9{NKɡURמzIs%cpPWHr0aJo*qߣH *9גuG ]wqL5kؼXJY+=(|)*Xm+9."MXEyl/wimCEeҞ pn_Jzj@RNCwxuBTQמ=mc{wKos߄eҞlnEyXRqh_5Gy[T޷hZA򅋜REGgᰎƚʤEųX*4FOFmr[+}{\$#q( q@ ^okJE_TBu\/d{9Te}9T&v\b\oBc"aЭ5[&U3خZ<eE/HSL۶[NUv);8Ur ߲UvXiRko/mNxֶjOm9+eU}{--y\"Ƣ4=/Qͻqn7О>gEzi 6ߞu6T4S-V6/h8V)[ؘe"u3R֔-RI-eb;Ö"&Eud )D9vly*o+!.UԺ72iWP(+`, kMu?Cn*C%oj*ICKon+9,2+(dR)Is'7ԷOY!-xӪن-tܖQ˗2 ezwW8k;L={K\* c{ºn*Z'Ow8P_Hp4::5UMe4z#7ԷOY!1VͺmZI[Q(Kl٭^`J,=TUv@v7-Co!ܸ©5jױq~fd+%U�mɳVƊJߞ=$nԵr __;;/j)zfgo9\Wߨ=jfS*+Ƒ:*P+%Um6Zհn*Z9+%VQ:--kCwNK7?&䟐; * %}H ٛH*9ï1펻䘴$Jo^n,'cIX`HAJbߒ>ąYB<;mtW&-kOՓ|b&@`%Jbߒ>3CKoI74iWr(I]!utϽt&J}땤6TMT:jCK^aћPI$%RJb~ VZ"_PV>6G܊A6wP#Id`uHDPI[҇PC8i7IKq]!L\)mx`t;d;Mc%gRuhi[H-tN6Fx#{ k^|׽�oKBŽhլC[k:$7屖<iK݁Yg? h4S3B$@ɅoY1+M7}lnY0V4nbl'3΀̡[3넿TQ^oPVhVɣYf=1n؆JQNM�俸CzBNPַgihE^h<V'ЅR1ljS@T(lSTQמ=ǥIqZQKC{--I{&gGuCwc {" -0AYmh۳TЭclsjnmX:ideHS1K 9"Z]1t, ڣVL ѵjs7cu) Bu9$;R/E!FBzSkI}[USSP4ԲM7/:,hD*N[En+!-dV-uTJʤ%~м0He̒iȼ{e/4Vҵi!G2i%qh)-qw2TR&-qG|w0qt/熤-ĺ{m $uMPַi!k%/YwM}%y\frelRh<[Ч9-*|;CY%ov+|:Vۡ͗wWۧ/?ß~7of7_UTY?? ݿ_?Z7?hhbT=scOE?o摛O}0I\(w(ܖ"0[)OYKd1&cv6 w;Hgv2�G(g^5bkho)~ FHxF&|I?)ڕ2>ݖ̿zҺf;p4з  h �Z]sFY&lu.セWqֽI W23ʄo{ڮiaqŴ.>}$`WnDiUd�8# kUɳ|LBiBvrN0~?d2'Rn]S}Pgw. nPsiWXub}{]sE2~ԓK2 iA H+X!i-Qb $~w0ݠҍ 2{ $p_eL>+]kB_s.\uҺf'eSEL _0]E kݰ<eJF{l;vҿ q.>X&&`8!<3&7-=Kb ̊ɧɕ2Yt[}V53)e-}u{JwQ]|4$JR'gꂱd0W~X6Rm3:FXoCە2?a.,_T7? äDY?alۧ љj6{ϖE2Y\)bVHFʇ2ҳ!LY\/o˟A0q'Df{ψXl#۞4WQkB_s.\',_(.ofR[/ H2]/wR>LR0?*j>tY}4MW^\vҿ /ٟ\)ŎiB|fln\"[brLڱ #ۓ좂zS@J1o]pҕ_L7? W 2|>MhΌ-=oRL7(j>kJ-7\ړ<Ө׽kˌ-g['|_&oFֹtٳYRlԫEN\:Ms-*Atq՘nj\?!A}&[[8X_r?}5, ("eU ?6w&enLeuvFk_֟2=tkiǸ>_CwrtкM'$t GD"ÄY{R/3%^eI𧓩w;cezN n>L>:9􈡟~4MF CW8Y>Я&|b2%e&W^`cODP:CjH=k:JQHא|zCq7'vκS:U-ZgQ:s7 W^{xؑ<O|ؓ<G#yl/|n_ qH*|^'y* wQe!_K#y{މpƒ]^*a|ޑ<O|'y2-wFLqt_䵃b2 m+_KO,M҇KɦFpXڃo}S:*\ht%wׯ&>n:)ivtRMA8B?!2#ZzðG?^hQ5FJ7m >gl!=:[T+j~6Y}?ҵoePi<!5)⹪/ZLo8WvEKοTzJ :Gr) =m.= mFaG9L{9dls{M]=JT#4|}Lvz%ۚLFG~Z_%B^ ,m[~te?:&;צy2/7noe?Qϴf^mL3H2s?k&}~]Mgd2pG +u$J띕]^@\bB1D/-s$@t8޿لL9lI໑zMnGH7&}ݏc<fyݎH$ �{ڑP̞vhvtԐ>˓AG>#}ܤ"(y"9^.G^K"0˅a"3==avnJ%Qi]}!tΦ]0#3ώc3Ӷv4ʂʷۈR |>C]o_^7'ӹXC):UR5]wϴeSZ)e] ?}eL|q6 R·np?C'ۜ3ežE=4Lr X {ɜYrM|PfN&;(=Opkzz #]'}lJ VOw]Ja|I~Jź+/EdggL (qYRN۵2@qGݬM[C^I@XY@J!ZU|MU׻)7qc|C&�ٶkц,] pw,)v—8Oq::z{ܿ91}ƭ1sŪ;4ӧh_ˠ:FKn/ tҽ }hͱ.nOlgkMB]i)WM{ NItn~obکMbgOQNiJ; q:ӗ4?_EmO¦_ W7}[bSIj=5}KcMq2D$P^{+lJ8HO[nJ*I <R![Ny: A`nI\~vDҋ/^\N/AF'q-ډH�bʬE]+12{n;QRTqۄdfQJҋHuw~7{Qt&GO.%ë̙s&.4Ql@mE،ce=:q#[] lD3en&zԩ~q|IsBbh8tJ-=Ђ+Qi v@ ;S:{&RD@nn=-uػ�@2~IvÊdۖ>  F}&1X5gW^ Xgmv}ueAd;xJc+zɇSbΪ1ʱґ A|UɅw9v봧Tgvon9;ю[W oGgbOO4pŠk)^C3T|fO}1hQ|zQskC#?4Pk~?r.uº]P6xMj Dg'5.(=f~h9oK+j|^[Axq>IwټV4ߴkeht|UI*o~OǏ3@uK;]ڟRq6_*e`ݟB<9݈γ2XF`|+Moq)qB"=::{ bGh"⡯$uxYo{{SJkrwHNgiiii<niiii<`aiiaGOONNu7O7O7N7N77O7N77?Z?)}(?(A\/$A4h$M\דn'|$֓>w|$|C]OXO뗰 %v>rGb>KOKOKNKNKBv;#.<-<-8-8-Anףn'}$֣~?/$w}4=Nr/UOqۧNNrDNr}(InƟO+OKr{cO_(In>In_~Z~ZvZvZ'ϯ$o%%|BNrDNrG}GIzO.wǼ?Ru}׎߫\{q8}ugԚ6G`Bvm}֫ZC$0j';'W6۾&G58Nvʣ?[z4XOO6ghi0�'ؐ1#xܶ%cxBoGc?!ȧSc@|40i6ңvtm,}x4z8 _:vah?6^NCcv: ?~soG4|ih:/nKOÏia<Ӏ<tFDq ?~/w;(.}(|߆4[q';'铑NцdX0滛h\J|wڙӇKѧSvT;|B?=uFiaeN|Z9`6Gb>Ǯ|ZrZ#1+y>.[9Бv 暈E:i>6piivZOdpFGb;.<`}"EO˧=~^;~z <OqF|'ʮPvϿ|]Α>e4󙥞|v"*N_O<K+l{=K(jݐPS>IâRQ!=8Mb7βݙ /R/ +EEģyȫ\dF8%T&ۗe*!O׏goiTGO؏slDIe{, ^+գU%5pzyk#wU%mmCq˿,6{ }gK~pF 嫦=9T[3[ +_9okK"7V)\Ś>yUvRI{6zv_wU j*e {褞o[@֔,RyFl=Eʳ|:ɟgGgGG(1ȷ=/aly2gln<yڳѣ5xS_s?Ntv’2yrg+0U<[7?[gw>/XC3mkؾ"W/ 甔&HSnxϞ-W]}"˯Ϟ޴A:*ztZv ?ЉL3a]N M'w\M9X[v,!=6. pq[xmG4G vgw| UÎ)X"S7 `aweu":a \>>?5}x ]<.{m{,v͑1Mǹ?SlIF=]f6g#l=cls8_v%uZs pJոnư 86c=EMξ[j\'ф\<wZ/7s<gzʽkYԣlkǥ7xQB_~'Կ ]@$&H&T]n_z6zv9Z v&Zż5H8Fd7r@~62}, ?i;P<szɾ# OUIoU${�q{轅k~GMو]Ojt~9țɭE?NpkF'}z> H<]d90Sz \Iw?Dw병kG-]#ggoCbux#5I~R OXm*}w(7姰h|4jZ7I]|4SgGWO Z:~n^h~R3γpptFoۑ+UNR]-bPlTg#Z"ܿp㣋DoվpCm,壚l4Ѧ~Fή|;xPو}ݬO)h|?\g[G} _-3C.m ~)olOYlC,>\gGo}()/5ZDpKI55? fܥYr¯V>y~;'<&w 3H߅)ETM0S9oO _+<RS]S\g~Q=O*vOxDnA6<8oO4ne~;7{(6?,]߿$~:z~x36/GLO7~`}ߌS~߿!<~<nEP1=}u[Bvzo]�umfu0}t>l 0zۡ)e¿j?Aל/ta˟7COy|Sş+. t \?vgL_OyT. x}o_3a|3`}Opmo=)$|�8?+W!???]og?3?/O·?OE,-\fHR5WnW:>W˸w+Ekr~(Sb6J)(%H9yƣL3o>\9l9q{Z =6qE:yrb,9i8;vu{Tõ'{SWBG+m endstream endobj 229 0 obj <</Length 65536>>stream o51Ы1QI+'hԱ}th틕;y'$@6d|ؚBO=![Biⶋ b).b~>)t]a~ڽ6]$R3b 1%chɞ2mߎ=xUߥs^̚*_fSFr9JtͧaX.uf޵Bڵd:]dka}'q1;v$_Z:n7w5ǽ&LEiVwYk-`"pm^'q~[t@~h&k\{dW`@ bq_>Ep^XxM 97ۄBԂB,:1bbMlOlY}_0B%V۩gky/ 8@p"NRz X"Ո N;Ҟi;Rk>umO۱Pl7YcuƩFX-s:"DiXi:!:&xdp,rżdpcSE%qEp aHD0EaCmz5.X4e Jlixɘ鯅IosҨBﳋ$S;>ߐJ>C;q4BE|_c2~ &UNB&<#W{ȠFe�>Kы"h  A?&8:>[ߎ}KrKCl=uW;.u yIH.èC#DH!hIHUcrڽFv(vg;,4ȃ݋0 :8D@kr/y٨rΫ,v .zXNv�S!۫y3J擑K^a$vfr4 ڮk{4Kx"!MqF̙w./K%mȋ*]J/a. ]m V% \ g4#j"D}pf?/ M~9LR֘6d>.UYTW˴nLL2U>ptU |1{н_ g8&jMd5"EhM^u䀑%#3b&Ķ+Z\ P %V)a-r> mc|L|kHzz=Gz5܊wr} lɡm͂cv^i%UGm $[(�Z9ςD%:c[YF.lIb6@)٧"]עr4Ѩ.f/5Z ZfnUKvvhNoF՗H[A$IZچ|QP^C,bN Y6#Ν"a9{{56B 8U(l"Z)ri!HJ)f&ȩ{o+vUw#$u"*!vas/eT@bH ;Sv\3@jH Sԍ⒈ZƓ| -Wӈ]aN+I5&30ƑRBZ r9Ќ'nlY%N*'6a4%KN5?kZ\NWgRLEl#sb4IB !OAiw$RI:W0HֵjxUPDф+>)\; 5y_bL~чӒbRR<N=~'+gLI娆wMѱp .=Y {U\t>G`;_rQw})-4%qۺDy,J"U9(BmZݬB+GuS ==!yny,+\\Ѯ Dmx\DQ|jơ\ Xߩזfe8D\IUa+ިy#5ʤ1>*y$K笑Aց` .)`s"AyF=L!DDt-M 8Cê^Ҳmm C[iVXZ0{ETzd Rr6k #Y;[Z+tЗ8D75F{s|SψfRhr;5%Y۝)MDDN& m,QMW.BF{FdFZr%cb-ô ]q40ye["؏E E z/b_&y dZ"6e\6t.et1(QΙ6mRf" I#I8p#Q \_8 q\ +Ƶ4^jge,kL\P5e}WCk)znu]ͲocR0)j%2fvWii/ 8g Ȳ!^I/}`b2x;"}>T]xkI˿\ v3j\'TLU.wԶ8\ -״6q0 KGi(҆7:Q|0+n9h,eQrO U㉠zLjPԘמšGlQBߕ/FWՇzBݠԵᨉƢqQ"*-`C :`:(q%c-bM[{1C ΙlmpyUfDMh'Gf1 &q5j>Fɹظyl]DX|GEe&R5ۉ X֎R"BV+^ڂXWDE Ϭ 'mZrP!gG)jߖF·WzNU2Tvb7 ~'U ]R#8 =GX}tWȭRݡ&ﱎgxSb=鄞;9e|65/WE'aI;@Cl\QKBu4ʹuXs|Ft[s{%D5AQt:+9h %k$Q WЈP`)fN87B^&,~n-鿈-I�ܚ -k+[tSI"eL~h'_D:"vcbU9ab9 ?GGV07[Rm ʇ0+a]G{vD'ra!4 @⚆ 3"} l WQGFح fFi_\f'8Z!X&jP STLjKeaҦ}LKORTnh渘d)HKkBVF~yqA`uӱ9}T? +BLe1G{])Ћ /d+Bju2"X.1=qR6KG E=&68݀kЙ$ԩUʶ"@Hwr褩]yn 6D CͶt OA+άƤ{i~TZkc".qA@ACO`C0%vI D?VCPe !uY@-Y;2 ?(t>%!>[-&D*Uv08$w&3#=3(Α/u| HJ|,Z6n"1:Bp$00}b+b  =zDa_0Za&Ҹ@g)t~e>?¨2=~)\}?9e40XHW6{5̜S d>=ˈe-t Q?D]bKnz`D6 ۳Q\ݽҞ$ֈ\DK|lBjw\H�VŖ(a f@mԈTFWIXb(灡];V TX߅H\1vȜ.s �e-+9,W6Ur *ϔ}o!㭣BnGAǪs4nShcb(SA㣨]&0@[u@musf]$l+}r&j&w$J aI. Øp- 29C<P&M j/qW{[SEp`=!Ҫ/@QKß׊NGk:qH <W&-"LN%_uٽ^ǰ!S0MLam^=J[Mtd7{EMhNvf1BDIenmV4CCmR�I΁nw(xv41lZ/|o6{CA9t5CQ훶'sSBm/VuA<syGT8}fN:%HFl�C(%Ɲ1JP7گ zQ! --CB؎}c#90ǝҭBAX ̈́W=aIr@^I=K -JBp\_1:9|Nd"HlmQ=0jmFQ+Of@A*`D_2ܜ؈.\WVsӗ-mKDBxG�J: =BР"D(f&dU@HMbܬ\[i%CJOӕ{k_z}k봜)~%>SՓlt\ 9gdB60"BQGr F; 8 efK=sԊaXޚȈ m F &m }4 E=pJȀo7'P7hDckc&3]mWΡg U׺AóI C1;<“8#V )#vognxC.zb:U w&pSA*>6bE'[儚IE&pv@ +ű 9vAw�aq\cxw@hMͳUƁ]. P 9-MPbaX-8 ۽,'Er{҈S/Lh[ZAòDwzhA6sL2)q.v/anon0;G RJI׈Y?ǜ\aMk05`k?7 D L{|e%.nj}͋AM)~hn.e?'J ΅uvcH(i#>?x_MAO3 |tWb"qr=Ψ[F7Kp6QJԫ]LYo e>tRx#t�� Dfb _?`1qQoӢ,P/U bg@�f@oN<jO;iluq 0Eruc]pq"xEK �v: 0qg,#ޏRomѩ. 2-\N0bmDj�l; 5^|9nH!:y;~p?eVryy0@UBs9ގ`Bt~{z�zRlKpb M!]jօIy.1w{yAuDZ|nE UFłYȰ FvP Mq&j.5U9G<VA [C].Qzemo*kXZ+>3 0˒%1 ishU9rmIe)eNnc!ox\W=E Z'źA8QS`5)C}@C,|5FJ fy+v[{q Eo̜O4�Ywk< jG i됾C{Y~7DE"ewD KzyJ_]rFKs0k {bnc.Q4lnL[F?R\--o Tb BAKmMڌT&'bG@ع67�Mrb WҩVޝ0O6]%=B׉i.vF9vۍxH:I9FwlGu r_.BL]$gj R, ÅY?}P4[dNc @KG|e8x1=3#/3q 0Ac`B3u-S6d= Q~E5ȇ#8G:m l!b|ZTzQ-6`Fqp=DzcXV̆ E"Q[lW ^y9ߙ]1uAn}-֠eBsR?vaqsߧi:Ku%GqRqdtN_2RrZ  >pKD\>zXdIou3Nx6jAcW7L|�O<x_ dd3>f$xx= " lv#J�Gҗ$8uQkI.چν'i3z4pbF)KREcpw,pB.gOz7pqCo3X[{YaK~ͲuH7qtBZQaɕ$zn-x LP0ؗ!)0Nc]3Vb:#wstF#Lb%܍XO<$[xstb2^C^tG";hSU|^Oo!r?)M}')+Hnc|w}m;_-*oh/0["[hYc_0|?ng@[#U^}GQ18yrŶ+syBm w"jr@0Os'ŝgV <Jnuc0S=StK""!'I|$f%̠otUp Jg y g?`PDˠ7҉sL!J`*bE*aeB) ʸh79gp#@S<1:Ϲ>f2=`T[XSK i"5+bHc焍yf{$T ʖ!6XP}1#14u-U3 {ܴQ$3-<�:弘z]jJ`?WE(K ^YϯKsvJ9adn=臇 ,= I�7]J~}5tљI!ݥڦʨ] NvaI"<re* Ra\;YdO =x[w0p5�HUTH$Cs3ue #m{$\}n3 5HN0FA1uXr=3E,l-nهP1ì5vޏ90 VXh-z3 o¶ "n~"x`R0P$2VHӫGv=hɖ<(°=QT;7`X'L]if/JB-^_8l� i> = -3z;ݔm �LU5PϨz| K"pr,QmoJ8y|HJtBdǼ@2bv?R21,!SD.!8>`p_oIzI&ʄ r ܶ)yNι5zK< s(6Wp O-R:�͉_xrmQH_ Ȗ=XQ0RfGDdG|ZBhX>�8QnY_I'$|XƢWM+{v@+35;-1QU'9?N̶2Lf?4"˽²z$O_vKv׶  1 A) &F9{:70DzoNo +Hi1G!70_3>-Dl`U^>q,SRGQNmߟq4bw̡Hcqj;ŻW|t|o3 EfF |32*ĕoImAMS- u[4ѽnW=fA(e.A[ݏL5 K+Jǻ.nz#Xy,�iVf|W߰1cVX'F @7`s|#wR8d+yi;[~w2WT�0#%fUsW>sEƛN-/[J59NKR$b 0i4X{Ɖ逓JN7@gÓ! ҙ& \=x0s2~N+eb,Qy?=<WFzZH'4vYK>xqkw/H| >P 31|F;|՗ewP dk,8ciw pmVi[MӰ;{> B9Q[O2h,tIwM\2 ;Y$"zdF6G,^$�Y(x߃aVl=゜z%}-댞cxx9G/q~?_/&?e>,W_}[*Ze\YIMR_Xz'W}%سYFХuGg Jq&K"NS弗Tt(IMJ`&L+y^ڒϞǰ 8Kw+6/{UrgQCeXEV8b\(\2XUmmJljd.p43X5DEk6[MhIȁH3z'`+G0۩ 읂^-d[JA1HȤR Ӻ0*Q=/dyn(WM؅w; RzISӣ #J>7%քNJѯnozQ[}k g ;@.?!_D6kaw(&y^t9=E'9h'% N#MJh�ydjlQC+:%n v_Gs ơ7GPk+r(]w6  D+єE%: D(0RiY?[Ո,6DB~ 9mnaBU Qo12B_dB/"tg1;S3)Je@Q9[.rF׋& lu4hT_'Bj&SYbT6)>U`-u'`UTLBh*FA3lC1 ITǭ2QBBɡ.0eZ*ύLrHK ^i<川VD7^* 3O:]+_ Pzx!g<}vdB#/Suُ ?W=ZFbHCЮ զ"bs4)Tۊg eu@899 Uh9m : KP0�/NI,dJWimDRUZHy=nd!kk@\EֻVM2I;fQA}%aN'bef$ lָ͆=oJޫ%pv ċDbSkp7Ud{�v6c,f'Tdd?r)n/0vuv$OTpW ^dFkoվ~`;MU.tIb'F$/ZA, 1EDq.ݧV8 tS�^! \d/,T̟fSh.q-CT5k\rjZ@ꪪ;tz5* PujhruLNKTp旳4hjpS-A54Uؠ*j>!vն #j\s 6-9FhBZM:I<꾈1,/ #*{@l] pqN4VT<I�h<j,jQ!|Ҕ#ámZ"m8Ph)(yW9n)FL PQ\ҭE jl)5=ej[WuAfX0S%{)T}nY=lA@>'V%[@Zc 'tͨa[BX1Y4km. 0-QDhIQ\,?JN&gEpQL,I 9oRZ ux:aegKD&pX LSmcV5XFk1f@Iך&*49AL%ee֕h`&>NyϨjgI ɷ'UQ^^ Шl dĩ d\˖VJkj_@h[Vsh)8 dž'%Uvj6zoXWЈ٭'!Jj ɋsk@bn&PZv%A^`V +LWl rQf t_IU.ZEQ1$J;[߯VY8A[QEY_K6X݇̚E<BT()]m^0j0 EG1ۈd&6KL? RHUET7Jq�?J5d|kkKW-Y WXNWz Xx7Z+ǵ3M =l0h&3\iRңI%a *S.3jN$nYm'@[fJSRYM1m`[ZWXjRQ;^o e #vQd1CJϞ^&7w}JiF8m`*Gt.fٍ8$5^W0"<}=f^f 5mMvJi @#OhWR1uu3W=3Y1E!&g6%Y1S}�jgDJ "X1jUB#=)2/GΛ+fU**OV71,oEԼ+lfAde.J}LBoɁ*>!e+DTKD/t-= 4Fۺя>=%Oo -;'W v(ό nI_\>/6Xνy%v5I6*sG] D.V1N>D(}:QTg]7} $}1 xI(5iI܅<}fUQL<9@%~i?ï&?o??۟_ůϿc}[ tHW|`AZ Hm<ӕ'k#{[PNSaY@e0ѴeCIF9YUX{iԫ Ž:*JAQG3oSWq eOky6-\||n|Kx\F�0N(3 X\ ʔ=Vu>ve,c$py`U/N%#P_c`D)jfAL!:]k@!.xuߒ#? 2cЗ3cPo'ߖ%s\/3̬i|?ʌV濰{ $$=�C2zۦz*Q/l`Z pP`0Bb3n0-d efZd)4~5x(Tu닇4<n[m@`>%5J6Ƅ$s�5mVq Cْ̺}AJL<!p38Z&YkO,"s0+:JJI 1SY#L\WMbMnĒ>\ZfrlCt"UȦYK OTt-BC"O~zŌͶn\ +=""Ȉl>|#*^T7"N-k|r<=ګ#y|Yrk1Żc=v1UfG!yh4Fd:0tnP[].C*SGfu6LY;k ΌAq}&3I*DRfqEt;^HsCȼ!>[ -8[?Ccmdžd3ߐumCmK{`v]i ׳o&;XluJi3QpF>/}@p!jģҋVwf2fԏ[8z�`LJtkV+/?Mԉ߯]GLSͭUB_5xd]C=eVn{=qk6R/>uO7ч(nXu;޺V!%ΥthZy^:g<;{9{{dz,ّ}5Ґ4 $iSݍG݌tj}>9m7l|ؓVRm,pu a&RÚIO&aZR",0U ;X(O[xeų4C[`f`-Ie y#8G3 Κ EhU<%A֯A_UN֙HZze3`QhPVKec˵ HW9nY,2)ŬOP*d<^W_mٚGUQMia~鈊P$71Ua/9 n" u&昳lk=x{$<W4vmLK4` tPkYxb maav'O?`%0{F/Vk)V<03~$^Nʞly+sY˖>p L9?WONȈGLSj]^ܵQ7EbdcJ^T^޷n<XfŅ^}}?u34myYklkQ%Č*-mQkF\UzA`!8&hOmښ[q2:U!esӯ _DqW^4!ȵ+9>;|yǞ<Z!4dN-ɓ+,J[DCqm+ xܺ&!@Y5xa׶l nYLF[x5qAAnSS9/hIC[yaP*iti@ _,bbH IW3y,ab=ͨ"Y_;98nȇU:2~o/ ,,bSEe<Rz_pt37JE=&m6|t}|~ׯ/kG8ri'>ȂO"?L AyU&aQ,]W ~Kf^υsAD-"'u̪id*?olj=ƞf$Y`IXăO?R l Yb .m*JD:JcXeYKfn/i_8DtN(PIJsDIB4, ġE(-l<*$FBAdKV`cҒ!-)o_(Ry/D9V$BikY7eU*ͬj lNƄț|[J*Dhi @+�]VIސA ڴӤ"ׁGm:BK1XT T"3&Xm^CZp\6bM,<PJΠ#bG6W^ ݲ<@eqE6J$^ sq(O_n^^0qC vF1l.QQ isn:]zo~ 'Ks"[RYm\$8T9JMX]GC!z<]ֻK0,YfjL+fV)P]3U`V3k841vn "5* ڲP<P:[@O ˴U#hFF^>c| 5#Khp1a #؞#Hie-ini7@fᶨLf𲥬^XVЫ2[XVj@/72dOl+!~`jBmd/ }W#\&^=N`ĸrlD[ɍ5!񔈝0v۲V{dý kM ob"/9!z/cL8Oؒ+zY-ZBH$*LS/l %ªe%š뱕˜؅,όU" 6$KyX6D`)R۵Ŵ+1 B j#˵ٟiU@91ԮAkL"݊S44su~M'CwdN<vbˬSˬ`R#ԎAνJ,>\imk9 ﻶ̛U^ǎw:٫jt\@nBM u .pYċUޭ1VBēP:qJ1 Iga~y#xziGZݦ ,=f(D쑬�E u&DձdQ63mT|SLw|'`Lx=_Ϥ2M3{)vi*Dwh[s1+QBD_a d.# DlSVvБ�Jz)!Bb2ٓP :j]KO=* nM@jdNX*y+.}x&PlB8U>ld~iNv~9e:UG%O-F &НzP1,D}վx)yX.Jvаpɫ[&ˆ:,$h%3gKoǺf&1ho_cͬnIm fu3N/4!tNC"Hn&۴l�/x% `'n%`4-V+RG4њ^cچ54ψm1ʸC%Oxfm tAuΓW8`TBonaaaG1V [*2;Z=!w4ku$t#+\"*ޙ^[J ڶ`�p9}!OLxmOMl扥U]^תװ, +K^[F`/Kcm- ZF:Grl,ָ.lF;akdeoH+_KP5rx]Β61gw{􊟸5\d%+|J}w>@V6 KUKRki,[>hA�VnI<mΆV84zLB/!ROF7O!{“+ z,m nN4ͤ[cf L׉KT* )Eb}&\,amCkt(3\sA*erm +BIG9ܶuBvӓ&ՇF@#zj ê<0hCWp"qb")㫑ZY z&]=yL&@zL.*Z\xN(*V C gxntTpk8' K¨mb8Td}FDK ŃÃkKOrq _-)1rx&u]b �BfqZSu>cx%/enaYJVcKYxm]('˸J" ila5?EH%Yi?;5Wtg{VNSᝯ\mrV1h I-`**rdλ:V^A3~Wa Lq"#{q,u0YOkj`[W讓unaϠc[ ``47XVyKGF L'}Ri[VN> &`FWӰRa@G61 B΀6B%&N#C9&rX5De(s7- mnt;;-իm �s`ӣbwC!(I!qfڭtJ/-׃֪-m\7o 0$V+x/{. MLS.af/p!:b1_oI Z #"! vVu9nD~ q& Iyw /ڜv㱖P̋[Rck& \$8GyHuO$ ag%)^IfR)A2z,맥ޜ6OP.UIBlt>/zɔ67g(i.^%Z5#‰@S1vd6þ@�$a|p '[ype{6+)Zj bk83ӛӝdB9gQN )SU3=CQL{PPeh-DֳVێT͓,$]tܶytL,vFhꗽ5Ĭ%C-!6/Ir'R K~ ڵ(Md2N gZ6sH q<鋯[g;" Λr"7Tf/jGܼD'Dh%o]|$S72s:ӣBCN=.5T-S#谵)bZN؇%҃7{ݺ2VT*<n k  ~p޽s@y!f SIr0(|O0'{yX>9dDszYf U94}1Djm90K e3xf3{e+EmN<(δliBro#O7 `[&\ `Q:t z_iu;Rf4 ]HP$iCBiQvK(VY[*HyMFE5M\&s#x igܷI l |ugbUӚm6JaډWtw�,+1K�R~.Q]~G#\M<5Ԧ5DMhK˛̃p8x1]hV/NaD:qgOlLE<'�X@wN� v#[K %rB"Io;[օdJj\w'颦d)]'Zׄ^�MFK2_l}O}&:\soԁޙٛ'/2&*+Qxƚ/-!"FW-no_n{#xN(N Vz7}34J]B\'GB*L vj"/iK&jcwFr4С u;Kk?:4w3y"-GMۑY^[+:Q-Uɜ-o+0WJ*D {q X`-OEuMezsgF`!ڵ)yO6A܈ } arzC*{qnZb8bq(lsxyإp<Da6i<+%S\Uo2O&Ok0YPgk^ʘ4Sǫ :0K%O< uKIt:E~;m=6o T_$ם8VļlR1n+qw+X1Gg`w!z4EPuְX)p9 <aD�;hlry}xqgsxO_++uNļd[0P$;uxs:HfMP %"CS8Rz.}CE:-beE5.ۍcoX[!$xnMVHAОdZqR2‡}x٦zN2O?]++ӟe B&qBܦ?'O�r&zxln@(Xf MK(#nIG}Ls`!N 225+Q_ɋ֛a27'O,^ڞ 9h^`M3D6 5-U9 q;F LS/9OoHU8 o2BĚ dÈKIg:$S0[Lе~y l�1RQاȋ5WqTrH~Gn8<>״u{ѣ:3C?6LQ(6?;8 onށ "|;e+ɂ2Fdmó9HNR sFGb|tHDֱ8ؗ4C8j"(f݀b<ۚJ…鷐oeٓ% fRI)$TO0grX Y)w,6v2ᆰ f\YNpDMu5"R:dmhRg<j WthԬZwW LdG(!gg10cނ?="Z-^6<I+R:} ic E31t{X0BIi2ўgt+wC!o3IMi66b[=LDD73bzXiz\ēoN 3ơAG+Պ4'ty;PIgrF Ej3F|v9H?C1ݵ=9(7e�SݳcwW[K#~zeXsm  W92eU6au z䐈A @ѷcKG0|͝wt׎1qXƴtJ:5P\sWjI|Pbsb+`}.YM;le}CS]ݓD bQ>" []K._9Nn]CyF�~T"`t΄N:28Mō ,>fz 3J$± AՃʰo%Œ"AwaW}:yb8#.պ d)v;BR0u[>Rxgo ŀb' [W/ nۈLm ϻMыxxkzqE~uk ْ=I[=L@8Djo8Hv=tUȴ_wϏ3];*Aا0z\'W>iq@ǽqqZs.>~R8©/3QN$qQ[t`[̍+9ܩեzp>SZY sfv֨Ii[{n"؜ns#L(Ү=,F,dO_ IܙWO8 4食#@9#yoR\OR~%zL^QA} A,6XEo8&QTg*D^ͱmxضhcZ"Lq/*xFZ(LʫC2ΐ{B`i|==kxy>NHY5RS3H1Lz>K낑>@Y4/㛭nI$jT�`-ⒿkvX.5E<͒ЂF3X|j1R+c2N_fS:@p-ӈhcT=If91ϝD#3 Y5^:ʧ9]=kZ-zlAߧƾdR雱BQ%c@\jA*u#x.u(3xaF0`)! Lw.,F#7,%=.s H,vDQ)p)b)飮F\UW ߰1:@. X7FJ{]<eơVwzR$q/)~vՇ:^I_fb G=m(\[6P-^R;Q+P@ P۾ M[ + 7b6;͵&&mVO}*G`e*oI2&=_aP8^ݧ }%22}gz~DTqtL]E" Aˌ6Z9b =QRi[p(Ff/gF,TfئUj/xAؔmVA^Wsԍ Q_i4q=s^ҝ<՞A䁏B,n�漎v⻂$s˂kJ1&T6<wxZq=<l(nnZ`_R0vc-|(I&[0X/ln*UJ@"iuN*S\<bk5x1i IZOB;D ]HzBWg77KU(w^y_WU$LVh&4lWdg,/d=؊&s"H]$8oVո/_,{jkm{N. M-kernǴf7 UrR#ĮI<Mj7qWŹFRlof�A $wp0z:dJ߅ةfZ]HB[^GWv%S# ճ越W3XL~HjJĨ7 -NxANYGj4V'84DŽlIH 5*DTc=.>; y T\#iE4QAтtK:,R"[ ΁/ʈHF!{Gq|)1놃&k=+ݭkaT$xw++O#z8vp0 "RYVYIKD[ *ٔ4W+ jrJ;,T(W[(zdSbbt"6.A^E2T0{d"TvݫHh=kKJae/Xhi2Qq=Ũ;p~Tud6X K!׷GGzN, -x:#χEqkM-$kL.mrq1٣cg0DT E *j"['L #XI^M˹6륓:n)#Y=my*MH=afF?sRɥ )q2xS;P@2㦢 EN rr7f"ڤ˄/f)_jKՋߪg2Юc&=Ğ9i`=eGKH8=,Ŋ2+ξf+D~ū$Cn'Gd\9!W-*:#没U^ >'0RvP. )>4ZOݫL" m-`5R_F3ɴRf%$t{ K+xWd?Bɸ۶T<)@hnpH\k{x15I˺\/໴otZ$M +DV¦r6VVa ED yB#yvdۂ2<ٓw'f턹ɷ<PpD)קUui&v b ;+h�A YP:<V}.՝2 }K�Y=0Z D`*Gc( yfW>Μ=c~%Rˬ BGBJ9'+4%z6T<}2)YyoZٕY"?އ'*fzYErMG#'r+=vHmx薸:QmE76Mu}U=<aRrtx9%@Ŷ{ҩ<C%Ϫ</͂32Hl^/Rʀ[sqWoZf uPgD2xKSd#zL}AMX5J٤e:"",{l]IgGIĺ]]tWaϰ$Ɯ'̐؀#Gg)+ª{:lFUm2>Vc)0ӁP5#rwA1AV7sEB͋^]Q#߉DdB[J:!{4H錑@o+Tt4K1D%B5  gT56w-c^VsgY(Ak>D� P#zG'H{Ƕ,Y$f yw {Jde4x1ZC:S64Τcݥ64 [OH6iR\vfK&w4N$h]iwUBf(N[rDp[_0e58c֮jfr2o7es Q�dڙdOy=I.O 3Cxӈ{v{Ξ]nBOB~stR0wzᄎ^J=)=ap%* т1ٓGo q4Y_f }6[6 |kbyzs}{.2WFpdHjuޮgː3(LQ@ZD!r/r:,�+gr]%@:B`T=Nehq9*XZ& 0p'1CZm^8X b pU 0:I*<ۂ%%"D6rA.+Dtwz< ʨ-ېa a;(vBfHoBeBJgVN!A\z S(�-YwC|o K"q#u8 ~;pjMZ"i c}x 㖧7] ߱OBW[rnIp,ci&%v'8Yƻ$BwM/V!2Z^;v]{l,dKnػ[Ț]Nj{Tv ݳPnz$C* ԕd0>8!˚uSPp9u]HͱϽvl^4ѽiWB}c>LZ;}ˠ%3 JT|p@sʆ+M-҈Cְ먲֚^WQ–�XF輍(2/"bZzw@ _Bu+[}K)Ԝ öiлŠEBXKK ;ֈwGWbq6dDÚA+V[vgY}e9 :5�4JI'0q"-}=UxdWty^UCv�lնk`Sk1n'N?ʹ䓆TY  #ozN;v uDWdE1`CrpȌm`` [zu!fu&\QL| "vJ+nfq(|;*m»T8:/(Oylp ElUbQ8,>o-J.\71Ӷd m3ywXƼ@MݞB:LF 1{۞a&{1K~㈂G/ޖ&Qѻ9-IėZWܨ+6+Ee"roqyOɍ^X?>6F~uS*Q}[uIrݻ`ClA7y<Je?ؔ1czF@,!}VĩSI`#_ʓ;w^"#V%X\ސ-l7Sa//pmDfCmekW8"xAŸ< L`VDnP cb!λtnσH,H6 '˥mѸ夺-`!za3_FԀCP`MxNInDA3e> [:ϪulX͸<b::]LmDNN$~/;bҩH`;;Yk=6p|ߝ@5"\bOwCW \bm2Yv4}7Lv0#3Mml"OD2D##s\rBcϯƉHxbd1?N6rjBf ! P_xI$ ;j,s[p oH/\חz f"B}0T#}!"xͪ2İȽ),@Qm҂,ڊqLDV\  q"%6koŷ^騽MѬ#Ҋ 3@؂˓sB_qk0P/ݫ_V՗8@T *Y ?ы牏ԗnσp*I%h2wL@7+z\;LoAN\,abkjoO9_YFԸG:$S)W*8 `yfT%|+ar;#aFB&ʧblsW"-| V_9Q�"6+KNIGȳ;Hh:q8œ&2FTt�Ȁ([^)eU(;:+xQ_ AX64|cO*VL4׈UNƜ跶;ΧxɕK J'nw'�)=' l\wP؋O1:.zCGC}h8@5>TR!]LaUu7prx}0|x&Y| # _$G>]:w\A*[p|^'YDLBN=NxyJ.tbT*L QKH*A:\pPv\8-Ľ17hSfBm[eĠاkA` .2Df<cpF_hU4zXb6 JL؍gldh7@}y|$Byfl#_e.9^^p)LNEи[gFN{ #'IdbWbӷ%FcSE+=؄Z?Lmo@ $~[ $̅E8qISG[B ~Yk1 yƗ1)w=k^#QqzzHd|; 7cY P6q%׺Zd{q}q|.L.Au"1l;x`ԫrŅ/)\p) }صgټS˘ f_R%m= ܘ5&: rdҀͫ!v]Du,;XFR}p *{)ù 1BW.aÍ^07BC,K@3(V%l\¹ e NEĢiB U(nwv{gy _Uon>.C!;+Otd3㊄=Zp5b?I2@F7>ciI:t�Auz^mfĎh~p)CoU;j:W9'�{eOXY! 8v?.yYhvQMbאַtu1ԯoS{.`*aD'O"t-DJ! ނ_oxaRw7a$#ǟ݆6-K ZfZq,_X.Iix74QgM:P YLV4kqlu~Dz(1S-&1_IӨ' CU'13>2S& aRR}@vGE@DisI#xr򎆁 8Q.4PBy9+׺ d=z;-6q#1y[6{Q{n0 FmEOw1k 7z 8@:-* a,$FTH}xpn"SZ!Ai#îF9Ն]Wj%AG UD*NX`iڢdG$@K8\*k.0@*?;CטOx~�KspɶuV)-bkO1n޸y˛hEoXN[Tͩ#:rJ*98:YtjL9A)IA՜ �b``Ŏ_ Bq9lIڨ*vcmZAX PW։[5o &hlmr^�8< dN ;$JX#E~hZ9*1o V@0P#"UEWۂJ*F ;BatUXB,)\Jfbi3k8>56 O\P;ƋFe4a0[{B+=Vj-5^s5n$6P0)9,]$wŧ f^hjWdUPL`.*=p2?sȽV{r`cQ)"l;fAJ(9(ͨw`o $\L\uԳ 3N<BۼuE^#kڃ_*އ=)i0D:O<ܟUv(FT|"vAyQ;X` ӬPfE|2ɐg+]DN /}#QKԾћ2t ߅1T}Xi W+sʞҟT+VdϿ�J][[7#U1_GQ" "_( 2$MыTUl`~ζ JU5|!UNq+-gE=[asW?@.)7a XBS?w~KHWo$<738#1@ŷkcX=xBU->;Jf)A§Fw)VB}Y=j[O@٤+N9dП[T#UiNzcXioPi5ӈ-%~ɸ>t@ `߶'zX~W(eR}rv+x;Ő_ԻT66P;82~ 7OA<RK~X);:7kwh̦{OW\f # '/Ef$FOxܩb9JƎ55SDLNSt[H崻؄\7g)=+H5"nG8.cPz| zcYg A5@@;ح'_0j3*1a}aw)cĸ՘3VKlQK3fkkgO~dOtȺ0#:Uy~PQkITЪeT 􋼂h`ո#DrjZ×;e IꂃEwQϯqu<8;Hfs{QVߢPP3-´6ef~\$1@Pʔ|U" nULN-}Dw'#ؓ;* [nhW]ЩJ!~?m/t:ٟȞ1?E M]-X8K𜃐Yl�ӕfclU5h5<(ؤY�oj ztqq.22yFR&a>\PK:NFN</biĚ*\哛/vZ|<3>)<']Ŗ쓖�vKh#?W";"Z0\jtv49:p+<LM.?kiH #vǛH oѿ::+jQbxEk]W~;DȣLdlEqg| ^D,CXbk7T#۹n|mIiL*\}?`ޤ9 &Tzt( 0=:=Rϱ=֏6f}S */``$8 x7Ԇv!INRO-?Mhb{Pd& Fs.^ -me8rRP^9pl�?_hz} 9x7U'A&]!N\.[ eW{9rLy[tS|nX؇GKIC*L ezVtdzd /sQնVTb;XX(] ֨#p6�hZZn.6/ �켌uK 7e&󲟇~S4W�)1?ZlOzmVΰIIqo碒]unboag@B+nPzD:kZ&{=}2R;]o6#.ɓB]º.b>V" flrM֐A"V2}pe ݅K 8YIK*A}ӍteS=[u܇]ٕW[^#=t B1Oۗ\=^/{P_ĒRHS/Rb`]&E%R 7ዬ1g dpd1c;O3g|tUso0{)~Z.d.zO.3dfԒ\ U UQ"1CO\`ŋ4V/Rk|PI$Oh.N)b/ـB%V!.l^6^EirP aa=XC76.2EZr{ Z= U%MnMJpOVWgLAtœ"W,9Lr"R(vDR�:fJJJ&'*"ILwiƭ* Vl<L<N -4Ov]l{IνzaJ`ff\@Zs,|q1zZ[p:] Bgw=Z_ z0* t}� |WrŌb>aN몳 tx9v5VXܪ`7y ]V S&́2x7k[qiA;߽v|6,2bX6C$Qn}8c*ʞņCfނԸqURǍVB} UR;XA=-Dܿ3W,,ݕwLeM ް yY9k}TOP?rJ֏w2 pc:):!0C|.T3JIm> "/s+y h hqh0Ȁrp0#撸{7g~)sj<x`[F)1^D_7z7kh&/䗗(&nN*-\:YlŶTADSB\ BDٳPsnDXy�2)>K:U{47Y_#ܬ/%>,Qˮ<" ׿+�PacF*|/P0IGnFS p\0w'>@\7|[a" :`G΍`d}I&z93xڝ^=Hcc8o+FĖIDA2 FO{{BBN9럕\# g_]O kCL-\ ΖeL/ b;̅{1=,-i"Y/5)k2 5jW:Ox8/+ trU\t+ր )O14\Ŕ2 z0H!= k\LH.AOB{z N&_^ -rjm9ˇ'!<P^^jq q]oY>4 kOJ$}3x013+Yh "p;۔-KF3"/f5L*F+LDlq1RbgQ<LǗ?x42!G_Ex+ߖ.>ݱ] g[mIƜ2LvuɞC:2fmc+oU9!] -�R)!,zٍ{p}x߃%m &[YJ!NzU,?ҟBBKKT !s`7A W HOB$K8FʙidDĞBȊG1Qpۢ7<V(vTEݔ by eB&inxP^KI#t>ZEq#'擖ͩy9'/K2°U6bkS/zhe"s6 om ،X;y`JԾzS de:5p FG҄lG/Į+b7 Is&4t3bݨAq2DQa<qi!E<$C}#M+$ěcXJ_-ЉARނ`P>`ӝq3I;>M>=&y0V³H wC9|mąx"JÉlDe25N{qM=<1U&�Y;!=Y{#2mA.6K@} T:p Ik?,"&V!Q8P;ۊxBƈU <ª3.F ;21xW$y!P$ stq$j\K}y?<6a41}Nc:to wS6iv¡Q;3c0#ov˕9}وë[*qxKCi\u" ;wZv\#M:MpA}о wS�!{۠Gp׷*2"dY?uJ:z 24Y;WnTۼ4̏&Umi[qcF0 168gc'8H`Wxxk ?kS /v;6�`4gJGK#ie2.;'wA-MߢxŎF*Fe݈dq)o)eﵙCm1f DzN P{.[O|gN'쾘9N^ݝ{굆S3 ǰBt=yeKتS|mkM" Z /ЗU38u7I;~f2dpx 0Q2|uw-\ZV>ȈFXpdP Cvr;lxp1S7teּg$?{E{${YG"_O ?^@&^k-NGX,c8 ~^j$j/Y"zF@Q9`-L;HT4M99"?J:[DHԾ�(+h*D eKGIa_m2U uC̭?`$SMHhp[ȳL\BDž 4ٶ7' 5M;QPdZیp$J!mDR(N͜_Y@vCUѺ (G1Û@Sw_8{?u!F^D 8n֝i�c鎊>4O~-o%}xl ȪFDln"I Ccmh>`4HEqLZp䖧:ޢ/o>Co�,[#{|40Q闗[ç9E[%3ebkuhFi &?v๟y3RC'C QDPnz5$ׯ/.M/n*E>OD6/wV9?SO顗.?~5jNUQg;?oyJ‰j`tKJߋ ʺa}'1PgB$$y(arc@exʱQO'%BIFIR s9c!/{`[[^yo&k;RCtDj,5Sn&NM߿i=w'e(� vxvTXDiID/SHPs.Pot"q\V{m0oRGks$EVCyM 0wrRPUmօTf]HX#8/@=TY]o55cH�&C3<QV>QCv(|,an�XT]I�\#%'3Ͻ'l)hbFl`u ]G'*׾$ f7; r"2ky첡S!Ub1:ƿ ܅t>LGρ>M-fV}(޹x 0S%sĢfwDV^d7?@>Jx*2 )Np8x(˩qᾙjn2$Q#&j:y JbX=:v]�YP!U^JCفi!`1"VHPuWH yBC]ӋnIN+Hp,<8y5'#iz8BZ VNph3bWVl#G ~/*Mt r.Ұ]V.Y4.qQCj"YbT 2+RޠDNxy1DZ# 'J()0n.t'JNAӡsPx\."&)p\dhz.v fhu8a w-~uPz=2?RlzQ c (nHX@;׾; j -'v=9W0}S$/x I;Fۀ+j[ʳ9:5Xhb 3p-Nxt9PV;Tw/⸥9߾̥Ui;(z[kfL;rӜp>XO[7ĸlȖvWN&jum�-yݘ.VMwoo*>}Z;y=Gk;|VlbBD>hg6 BvHFK]ԛ1wй]E W߈fAJݩbzX ۣ6̍󗠲1Ej!8\c]Ln*-#Ϩ( ,ʠZEwOB%#xOeJ IۉF3D~6Њ˃a]=xR-h̘'* <-I8kT|'a0#NZ z[`sP>S,~ɼ= $ׂڡ7 ycOux0a E&7E|J>$u`fE%ؽ:-D 7r&_5kHoRM) Y/d,^Uw ̑bDV_T`R>rN´VU@Vx͝ OPbIiV .eJyVl^~ҷwdφlP  ?)S f lLڶ2޾yxFBI/?)j b 2q�3B0 e߽/#a0#~)Ԧ—xDyb@_-O&߿o츨-m6( H ok|uv їN(\:N\|6_}y �wv*^Qsڛ߿n>~AbP[ e(rd(؂<P [β=>5,;v/ N%9!QP vfCRM" L}"xJlW_ݝnOrW`;ɓes/sKM<#uҗĞ,cc7=ݏxQc[^QͫR4|䬻WcEZ(ZI"Rm</! YG{߯8 LgM<|;1QWߥ{ls@|O]mu8DZ,9#QO8=bdt=U !n4>-wEL{5_DyGɫi>sODa�7B_sЌa!o/l :8b˴;f:2tJ*8I<.{c: /rV7l_<Ms`+'s?[=7advC�` =v(ATB\s"7"R/Xn&{#`: p鰴xo?goI?=?_I-wSw?-?O`�ʜxa(/L{lR!sW.B^č=zG)d+;ukH5MZ4v$L~A?\za /xѐ%6 hurC\T{HvFGj@o{�eG Vmc[HďC oB#Wﰗ,B 3ݡJ8kc&g[a@Girud~IڍGby)=1nRK̫a'5͘ Iu_i]؆3ʝl!9h{'gﰏ&u?-¥: bSpkf8m$Ye<{~jGв^:4T*b}n}Mt>=siSrǥEVE"CeJtߔhk޴rܛPRﰷ͹^ 9A/FgNՎ:}mnIVqaʊc)lX} Mga%� jڷO?nh}l5Mp7qo_'߄fμђɍYX7~vz$>spRh@b0/MQX *q7yb]JU2Ji@bG[geAC�["*dyF+$68_ށhVO>>`?D0cP=Տ`s"3W:vSbImGpF+Wq1c[=+v/r&!o۽wJ ,[|U~T)!Rn"P#ς@DIj#)\kq<h5.Kg!`1z4enЙj!zT S,;MP\\_^P' 6?w4v"t}_1g7~1dY>g2/yIOq|{6څn"A .F�>ֵ̈́7b)܋4Be۫ x0wxK>$]!@OBoOkO2,Kw=koETJn4V?5}(+bߐopJBr_?K,JAITBO/xZC ] �Q4kN`~H:;Wڝ+1J+(锚-( ~#JrBaZ: v!yB笥~bŝsX+D{X vd܅d^P6q:Gq:.| xlXZX; xPG+v8NćC:"r(vK:cAFp:^zCiTiQ]Nᒿ`F}דn_!<3't7Us uV4be||{0-F)870!g8X a˔]mzho|w=sciDg|v]8YZʍ6\) l|™;"y$8"qo? _=U0bg=^.} TۼHZ)V? ͨBp%<o sSJcO]f#9ea*ctKl-Vc G<j\*޻(c<ٗ\{rO6S }ҕճy)Ź۴Nε6ߘ?H֥vfVCjgy4<xFq C\KTx8_|?򗛊= i,Ws;_ OJLŵZ;<]a3.T`b^nb<ćqO}ȍ!%v?X N%�ᪧ[q{f(y(7L\h;jQql<Q}7\7"#Nғr#XV 2ip}Q;}i^! S2d ,>n1&.\C'!yړ+A\!_\ apJk'oQzEIN!!8/2pkvW�yUqP\K\wC;IJi^[P=y ';򛛹˔kQհ$g>rpd{*qɱ"0ʮ bcKkuv-$FQ;Pƙa(օn~ߩ�vu/ݔ+z|w2mXg/9k+:\psU!g8 k˄HԹLiYU0fY ^ke|H`^P K6cKTj{8xXR~l Woiꔃ'нBO >ZCNZ&]>$sةP})cYQTT0~W5[sT.zhVGif.~nl-~}�)UJI`S R^ܸ+u] ~ |'Fac=xBPyktX5`@Jg+CA+ jfP@[8FYN>0P><üu>KDֿjv/>6vwr?$k?) 4P@I )>p@ts-m�S|^i`47قǾN>ы;[\Uk"hXN�s|X`{C*T(YM-Ls8%Un|.l ,[qa<҅:RE*ǖx271S;d19[/Oүk)X.__HAzЏkO>n}-f;k=t,F ԅ!Kj?^&L_m-G5Mb\yY{j;Be4_׫UP/︚^G!S _?Po ,ww#1Zݯ7j1ݣF1x}袊=pp< /܇}vIpfTbtxzF `.{ݡASk/,O%yaW</zϞTg7&ňQ87q<EuVR{sxhwMSR]Ȯ:3qĬF!AHc# x3ΨѣJ]j,Yۿ[kl2gi`񻿐Q{6]@rɽ e 5O.N%R:1@ B;-cZuvuQ#3Qa]in]yhL^_o=(Fr~a#RX/!S~RXWvPOƔk!ӎky a|8.`PANDQ*lotcg%0#9赲drX1]{s|�qODSLggc5 ?n}57y 6:̥r dT87ZQ bhʼA'7e|;37r)h[?'UN\ EE[kC?k%c5ɬMy`2v[(sa%~E5#2.5Y38Sیlޤe( L2.xh82jThnW�%lq̔"gkA *iDl % ocxxJF0;A=6=ʼ@`ոNgqH \3"[@X&V1ȥ�b]Z[ dT7;*n%х1bJꚆ?yHI(hE򲵣kX6xQWf|c4X2�Z/.ĖlwڅWliK*vkyp*-ǂ\ոHgȡdl^ b47^֧Zn DB@qQ] =[{wv % KPɋ6nfl¡T Whč:O * oY3vus\вŃɃ-C%!*! Jk0wLPdxXI׸EXC{:xUEmh'-UUdt=sot/л"t15SP;n4^*TVz!Ob;1vJOD_>$U;m4oxxxN"Vj]ѝ vNA hURI'V azHUۖf1n~ǘSMO|~1ޔ{,yaDXRQn2ovtӈ~0װ*z`8\y"q(8d:}]zH=*3M<҇i@-S\,?cM&ds/@ᴖ.fP(Uο~o;d*xuwaո 7[ n\ja=6A(L>)ti? f1zrJDWrC^W&lxMڠɢt?<.Ycn_!{2yA"+.`eqv|h(�9,bx[>yN )-"A>f}}hJC[DU-p 7t/'A4ԇ̃3г|&]ܢȼJ>CWcI͈ k%"x9H*Lc tC4V ?E.n3f4Ju@0xaῤ.ruKDk"~`GM0tcTYqL%GvDKK.2Ck~,R2 LZ+ �Q/Ȅ:^${vtT#T/(1#t̷ٰs*ܯpqsy4g<0w'(?ܰ _mjйIv.X4JL3QHUrsVh4b{ŊccЩ\WJYຍ)"''8s-}q~/m&&N* JMXpoɿp̞fLVgj _ʵtΡX;ACcj<V%fʯeQp4غL4_e ?8v B[gV!6 f$ A]Op)S2ċ^( [*T>FxL@dM_Qwa`ז©`7)E0lS XAUAW-8sl¬۳đ~8:"'T;`q}U 8;dܸ_B*]̬%Q7\Y'# p.CyTV#W2}oTB*7Ox 7Hh]R|L |x@(Qa>[|.+`N6@Ӊ1PDR&ٴ"*z sPhnA:љ kBD5{Nh{ƙهBJ/"WЯ肪Ab1GVmڡg2T"r|&2 Pi cSc.A@o2gGϪTx(a>d'p3[N$9E ,nml"ȟiX?I\5 nmkDhƥ !G4Jna$e3@\pvN N]fJ# DV%1ڪ{Wq"|Z`>J^n<xP*'ef'}=\AX\v{'f#]/b#"P=RpqٿRhoigٱ@qh-p˚S?_1lE >X;C}c) �,k6PB~ FRYgO}�aҕI>�+1VD>qS#)0fǭ^C�f�/B X->1Ad\J �T Ard R)7j}#N>߬uOBKV1Sc3%6PEohV)[y'3b!T7ǵK:1#J!+2#pdzMX]k؅žc.ao:Q޼"d`?{_@RiRջV?Fhwdul/ɶWI 1/SCMTQc۬JmTz'իk-C=; ?3j8#4–17^!$=gP!Hz d_C"XP.37Xl)A0Kt<AN[~N$[p"Lyg[Axb_(éF,\پeɇ TZѪD Pv ȩXU̕:X WUŚh'U:ř8`20I&6 h6PtG1\ˢ+vh^קNoln\˫\vY v2ʽyW4p%;j,x0GOǷaav4jIHARGf':A{z�K s RisT MUQ)ŃFֲD~y$l@ӡ>H+I]qODS@~m! )#l/,I& +_|1Z }!{hu;(Tg;g]F;mCgU2(ʧGmUZ\/T* R'KțRI7r]1"P$ /r myi{2Z=!tU ڌ5*9BV �tփ "l!wkQބ c>Pn7LtT*Q 7ܱG;s}Ư̎�&},3]3Ll}-[P͝sIا@Eb ;j)Wy=FnT@2蝰'\ w[?8' pQh5>N# 0^pK( 5booMlCtq�2'rI� YY b+^wy]A-`lvX8i5^ ^:u ˪-<u@=NsF� [LnWLMhBr {�(ejf;u46}8H^}7-tɕ$'ʡ+FT_z bEOD~Pd݀%n$ƼFBՍhQ1�xB&jaL&c[틥Q(!&ȸn<7"*9J%1J%s'(:v:jv]Z( vCΫ� =PPI:"6jjYMI˕-uZpUpJdC)n@5ف.7j-oK`t}r䞜7;<1~؈$9$FV2Sз2n8.lļ97 `}[ *<i �uܟ-Zy'[9CVFKZ^(}FQHvT,k<۩yqnCϫ|:M$snQ{11"ҩV{LX~a}T1�:/w M8Cq-;�#]8"yt\Ho=5$KzH4 /S^RW4\+J^ y妢r[Sa&ߢJEڑ̲"L3xa{Y4vDA& YT7"x* c8̪(6:7){P9}H( 4^CB!hivᷔALنwr#`RȉByL>Ql�0E6g1R Yk:/rYi*=`�"6@y$=ŇxK:$~tꜴ>#2OܤV==wEdre|-uB87:ˁ^ah=;<Υh!|[yqP2FŰ><DzC2z*Ƃ8W'[Iq-M| #.Sy_ȭLnt2*(!2B ]@J<~ݓM<Zp\T,X<ź⟣c ~V+jQ,Ž> e-7H{=1/*ENҸ>xg*q~3J #J|z +M)/T9Nc30c\ bwpAWi%ѵ͞n ǿ2$�[GBІ  t w^IpbP.t׾ۖ[+pCx$ίlaİT5:6.Y\ TFH?AyȆ#~K}Kk1oYW9nTv VB\Ď ":c 8Âkb&t"|}S2X E,. 5ZTՀ=\(D6 3f㵱8ø)Dl5ŘjtWT&*5quBiɉ@,j,ast1#\p9FP@G%G_9=_I^D}7i#S.kF u %%dQ~=5LUsNC R*‹]l m!Y 21Irud6wh?!P'V�v`>?`G|@Q4rQZO/#f^jD5WĸՈЁ^~|1FѠ ڇ#5XvDO4q¿B7KyU[.l8E|6}MeH%ɈR^<%B�D10~)<`Ii i �WCiP4Bd`L^qFq(zfƾI]r^9pbv-zxZ F >l#Wc!m(5X=c{@Qcͬkע׎?n͇t2,dƶP| sov/$([Ǭ0d<yڗϯ-Y0Y"8!짃�ib=ٴY*ipO}xK (P: �H-#:R<zC 1uKjç[~Rޛ&`2K-M3tyJ+DMtdKr@H tHO0hRkomnLEP!?~]FnZiƸ-~zmV505/Vm;'^ۉczdU2 wڝf1* %7+Q%xQt»Dåa/Ƒ0񯩝Q))Ƌtpԝbވзg! _0ǿB5fr#+WNm:ha_#%_Df6ܯ@YKgؿBF$F)w2̞e~c-Ԏk4HY)jQR][8_^lbɼJ1tsN#7FX�YU~Gʃ 6QAv>$+J9E{]qjj?o!\AI`<e](@cw�5bbԩحIbI]ť6z􋡏qMݢ^)_. ײSߴq/1a {ŖW7D5 Z:о 5W۟ǿ?on?۳_?ƿ]6_T_aǟO_OzfSIB+Y$e,';NO|gO&'p XE5%f=`I>B9(ǐnDpwIڒuv_|qHi:Z$mJ܍612N^'df8fWVBV1ļh$R*]Ltdub u/82oA vKTI)dᰟHJ\�/}Q0TJG^1H8`>d](z}l$4 gKK7 H+" ^OFKޜ\Y0K BV\VCEɠ6P s 'Ι$ט!`+r аJ-%UaBxq�0/Q/mrqGg4re#=9#&ўIZ7HAVP,J2&N%ELP/ÌrzAolZ#5E5͚RBh<!0Ip(=GnTsO@Fn#$q䕪LQ/w2BNH55o6d;˽(б�xRJLqN/7,ReEA$4ŵ #Ɓ|ٟҡjC;EX'Q"Bcu'q[i-04AK{kҕO)ͨ>ASMk$k? v- <, ڰ'hI 1D1Hc[X�2o`"�|X5AΌq9B!7Eng<Ī~y˲' I%oM3_ٴ`'pI )VaI 6/ lKBO(0^#X?V]W@VV(t,xɈGuلV(Pwҹ 9jNLʹ nub�-;Y]tq2Nec<b?taWt/=q)[#�Y(1%wIpJm5\c`!Q#MȼARGz ]Zl1V!a#�Cc)0cVB X`6e,՞Ҍ�[4 g~!8`C vb xl">DmOV {�L^0zTL&:,c8I~T F]s z6'I11 X|}뱊ao^C'A#ϱtk!0pC'*jbXA/`ą\D$�Ⱦ%Փ\@Ӎˇ]p~ÜLTڊ 7q1< V;KOBNDha!^(MA sj[-`EWoDj$-Tŭ.�XpF6xj߶QMZ JQ@^d<*5 aއHb【Py(Xj'RS+bYIdD.Zwॸ/>vT| >Brr{B{I- m 4&c# d4r Ua_vՉJ_1c%I{p6@/@:< OQdZAn;ZM%l \/<7N(~O@g\;pʨMn>Qx=DP݌�U'ߦ+ A@(nMA!Ru9j*bc1y=/B &`AebSz@H>_Es4X etf8&sT|7Ztt֬5edX ?.}3�ԇ` fl/jPҀt`zDSK[B{aIlC]؊ Do{\-AȘ MIUš͍\C7Iۋ}zW隃(zrde˃.Ղgi>H?I y%TFRLP/_<L6cU=.F܄{~fh7XOG B}W[@Gj`P~rg 22UKl~c< &5tԾyMU 6f <1'/Lk?-T.𥰵 Hv=@&\xqrb SZN>@JD/L1.=aS>H.q&!Gu╅ �J!ga㹬8 xPYMo3u)"R1A8ua$zɝ+UQ  ODQ$M}Od XP'.E2@ + :Ϥvsd}K@r_xP)$iQd5O߰.!"�.}@t.V4%( }f >OqR2mbl1Xmbfd=,q!ݐJk6g9gb6a%c\w%j@ híъ*Ħ)7L<M' */"y׉ͻv(i U\s q Z_C LHt'b?xf/hɫb s]n`RRi|5A-HfAii]f>�yܰ{1a$=-򯊛Ca*XHb?Q0o$ yF}kI+ƹ"tQrBwy$~t\:Ë XVЁ\JztdCqN@峴l][,NSB)u72Y=lBEru;Pf1}0_XWVbv$HӺNE˥"Iŋ"Dز)t |e~F~糧@ Ha U@jX^CUW' $ũ+.NS<Fg !+ռꈀˀf'mC:5 Wd;ұRj\]-`6z~J̷pccmb޴IfN>x-BBǚZpؚ޸qpϺ ޒѠrT- 6ӊw_U:Pssu]LQr^�SBx_Zƞ7u䇚:u}g^j-5im`Zh?hbi)y{Mu׍RZJ 3; } XJ#9oQ(ܝ|_K: %H5qFwҏ;Wqnl%a ;} R4R?Mc7 Q3.H6zdAyVNK/ͥyǴ y;EmqC �#0/Av^j<o?Ռ8Խ|:A緬=\[8:\W4 8 ҂>2_GXa'uWC/Y@.~4~#g<P#"*<ԂWڦf H^Ƞt|fl":O|No ДIFtOayY[Pv=tP\ ']vҧCr;Hyrq&?|SE[ULC͋^�' 9娽ѥEو%Ύ 1Yևpk4MZ"( m7쌋] |`mGWk Mצ8!.�Jzxq1v$jGf�awc;WwY6^-`?IVvt)6/n\pеchpwUK:kKBN #:%OuyG y lsa%b)T[ЋcD2}~=1rnFUy!�?0FvETNXrrGq ZuM#uaiaflFE"p΍Et aT Lh$ ,Lh1C]s$];DJu2G;>p H)#bUIRJ:Ĵ9F>OxZmMp\C˂䒇G%x~\&F79qP pӁ'Cna1f٤\<Y^1^('V!>{:a"fbPf'FA$Nۇeԟ'zcp*o䌴cсʫ}^xc283SU55.oxC72[}r/!Eª=prX˓\:=Mݳتt{H*//&d }`rn@,WG[�{뾛2ˮ+l<"UO1Rv4pX~=prkN.w#~4~&aNlW;U2@WU]4HSR&o׉B,dZx'HDy9׉Q!͉hD;;HD]V�9>x2JkhTzX #]$oZޛ`k< k*ZHVttJ;';* ju3yQO?r^rK>H~h(ZhC,\/W}#W粚6*JMrBRon\XNQM,g:6b( &HۙAhU5@Wf#gk19W 6'fL0e<X�yգ)nC7j<oFc4z,Σ+y1Š8/�BKKe 7Np :-Ewbue8z.ޤV+iv % ?02`ۄ،W[ -< 9ZEsтm;ĥ2DbdZhcAU%^9}FI^SⱪmF_2&yLBhIX" = ȷ!̚ HvOFy\WnFjҫ:5=lKlI " $vyT%L6eo D51.2 ?vc4?k<uc(bӎj1RˏtA 壖v|6;c@ *xjE&ꇶeNa_*/m 5p}61r]5DX6X2Nh!A_YSFan WZ(VgQ^>zdľH<QY\ɫQ73}-ib:Plr湽`_6_-l*o*۬l7I.8t0Mk%syM'4s| |& p-Jll !i#�t6뎭T<~z  oL|&~/V ^ƽAg [ e}9MMzriGA,bik �>1KN剖9)5IP 3-Ei-TQRn.`ʝ#4IsBoavGA aB~EM-iBe:Bm6��716塸6U|PHPC[җH5R`6+RB�$A'`;֜pnjK>g.9h ' Ƹ mW Ҵ.A ŪKҤ' IN*=|/ZYʁ{eU, ͚ҥE@X.!:l]jo$^m W j8Zĸd~Pc#^RviB;-=}<έ "~Z .v8ċU\b<Pr_K[8aKV;ďmwdJ>'*YF- ΎrD3|$j2SĦdk!kljca |Vq}3,%*5q_nR%6hOHGÈ]ʌшnE`uoȞ/e{=# OwV^i!3H<s&d Hg-o""i_D_C{;aH#-6\~D 8ei+}~ MPв-3m[=dRgv-u�ΰw 8%@hr2Qi16<)*Hd>8Y?؇6Em`0-u�BdTyEVħD2Lbl9-4-XkX$@@J&!!cAxJͿ'+ɜ);Bߴß BpYZɤ9L,DHSJ ]=t]x#]M%~ɺ!u;!B )7ƽȊ}2&jWܬU&0'I|?s?x0<-#}E0x=[jZ֝EPV^F&&^Kb4V)�--@GNUg֖cx|u|saNL*IJZ QI�l`4> ï& !>1壘K1y.cRRN9\H2ZW՘JU`~h]EꑋqZXy @qqxte|igb,X`Il`բt -<j"ڂ։P�)8L3Ǿڱ:K{+t()*uUWg.&ܾe}iħ;v-\Ǎ˫)?x (ղXkFBRj %zQQbjg[V%Gv<blwM֦xއ-p vy2A?k}3)RJ݀OpP>`@HOu#goF-v@[y"5BNb @ }WhYfDʧcYx2Ԁ9iC)n5W$B%$Hl:±bKЄԝ*}C Y.TS,KH6-#fbҍBG.W_КW2)Vpe0BN7zh a j([ށ&*\u!A@ O;[w]GB>O{:.B7bRHF-u-5m7l*xJf-q4cݒ{ܼf,'{?6cqSr(> 8>H͋d,(79(t:7IJBՅ65[pr.gCHX, I[.l1Rغ?=լt:[xfQ6rQA hih{0n)@?u*`wM\b± F)ı|,Jr2FWG/&+^7ҭ3J ]ƛ䙬GDZ^VVvK_L<E^-c#6c EFWsjAԲm ]*jz-2d|_3/ooIBBx1 y٘oBB&!$/aCLb`csU붺U]ۖ=P˨ Hc%"QYNJt> Q @vcM!xBu-¦xBkbѥVf{I8u\r&Ŵ!/=}5H lydZ`QA 7cW$q߿2%l,:1d-.m"F0:NI6.`"뵢l $PX2:-za^gkBcrЁiW:4�TKZ8vL̲&%Ɏ|y^.f*Z X564&)S<w\$YŬ>#"� BZ0q qBg# C^%!A3 3669n9gd*;aع 1jח$βr^a>i`ԓ۬uE+)%=6Ai).(g864 Qu5$C롪&��\ă ߄g\܉p Jx E[LAt+dJ~҇( ,_A=%KӍQRR))S] #I6�RBc�3 RAJlagN ;FcS؃Q'x8E -buN7K{iX28E`؜J2̸p %<[pN< B+ÈL.o{0R CAk0 mQO!dp 9y)^)rRǑqJM: W(tHĴ,EYٲ%GxR;/BaHt^&Mb1;JrbR_ʳ4?6ݼf2PVa ٕ=f(iCk^FopεC I=:RW' 0樚J$ l� m& uBH΀ڻSՄ٣iFV:CND0t 6DnQG8刯gc6wu$yߩ[OYe7؃um6e (]ف BȜ3]F]RocM-K#ıX/"|R9H{"G5 %~"rtNmṊ\&hvƜiR%&[.eydV<s9W `ȝٳٜP@A2߉X"zE mbzRS. %QR307 w5at)d(R o1$8jBr5b{ȊYB6SޡÈxQƑ:pyDQ|˶i=+›Ɯ %?Ħ~ZL؛U.59!nGˤQ\0<ѬqN$}%RB<\z"DⳖbIS8UEh02< /;rI1HS\J%<mV?u 6!Ao Fg+][`/E@0P(I AN\T$A  EBnW("EN#ifR6$&VQ]HRoHdE" m丐vR,A!Pi bK yBng�gTE[bN r| &=mFȬ1 qH(A ,EMTB0LY)eW9y.܎a_)()) i8/ wo`|m SDŽb=)ddq=E�V*dҊعA_1XR? Bv\/2E,x1^bbR,7d!t 0B 2=H6 +UAK�,kD (Il=I" p/ x]dh~(N'rPA՞[=ј/5х8Rv3'6Z ٪8_bNR%6EUp8 Y|~& bipfm9܅r8rb/2F:NpgXr*-1V \6 t8HR C HR(IC} Bi^ bե|vh[CwBi(^)Le. 'Jp5a1-)}g`ʚ8*{9JmH ) ~a@)("lj(חC蹴udžGFS)`KXX ܱ^¾-"O] lb2%bۃ)<cAnơ;a ˞mI [Lh6c1bD5LBѫ\87WSMIa aӶ:c2"ĮYU)l"ԡqCK̋ Bb+DdF $h1E5"h !P.2 /%(B*d=Nq;sql&_$L C:5PD&Cv\0Ȓ)\+]㠉+H!~H#=y("1 ">dBR9Br=2Y"N@%tҙD&DrI82Efa< h7JHƁb lR2¾T+!)(y@ܷYx]BPI8"<YQ"T]�@3&GõFƥ]!<Nl2R^8b[s<WזjeP18ʥ#+dߊB MtC570q'2R|%$戢_>'Ƃi+`lۄ}bAUZgvDq>zR[#.K@6 u*m+yؼ_:3H@#a\ePL3A976!W*,�m !Φ8ƨ1pLI&qa px cJjD[U)2A'W GM2倓4:\i j<R.i 9` լ@p#VhɞJK(aH %z[cG= $EAv $Rqrv]_z W."~P,3JEP NE2 q,\kѩrW-@-qÈ= "eC,F䐙֍S]p]›Ux\] b S!b,W!O#s&&GUg QQ?#ؼ-2rż㥚>kLll,DZ̆q)^0ݨ(9#cP &cgԄUMA('m=&&?}D 2Bc]36y;Q(=y.Q(zhs['�#p?H zq9ӀjOOҺ2eZMBVPb5#8ɮ5ec(L ^D -,TH>X\EDL#J[E-lʃ� 2 0V֯^R#ci�fB6 YB&m($gQN-I0X*RF-in,Wyq %ZE aAc2! lf)Ԓ׈ѥaŠJOљ[yɱU:v!mdo9^RxB)c(SЌ*huM.ےpϘ_o8ide`3a\~4{J7* rw9}WeFљH& 7 ]ƒz _˻؆K$d(cVTѲ!̈I@&Lq&f'&aC>8l hdn$$s &׃6d2Ħ_9qMwf?xIҜ^Z9Jâ<meryB_f-K塌Xd-^gsi{Gpdp:6i-`b5D-`6D^"yelT2zQZ-6)OyV  +/` b`  F@w)iX/^(4>%Ú\eIR%q݁o#F�eҥtt@)ҘӮ؆,ZJnsi|g]+}הZ~;L# Y |NN8hZ"Q c"QߘƗ̬%XpER30cf)):,)d1=U#$ `.9UPfgFS1Qh9hʌmn$[KNY9vqڒ03e"^XMg 'Y,t<m,7l}=oZ9W rGā ;?1g ϴ pt ǜu9>;4,X9I*b-Xqjڀm0 '.wiaWgc}MX^+-,4oҫ8Q+)+^٤uva&^vٶdsɇ̌}aUH-r1CK<\@Ҟg3jpGg3ydEY(ّiz՟qHo$%'֡y)ߪv0@INũ i4k veӤ e3+Iz zr@6q+1 WDӺZ@!x#u2<{FYspdG/nFZoSLzi,Lb'hӂ|qL[ȩw&<I$ɞjE Z6w`xSqS�?}GE@S.ObzG<Q,u=dD] ߋA5WC &.NC5M2i׳mK2ۭFD@ɾeDC bW8E̞- j0k‚+|1ݳ)�1aw$m9h璢fA l'S@Ws 8<8vMTp`@=sfiHr}<qr-+NŢI"m!KGK6'ƑѢ^hxDIgk݁zhAZlcmU_nӠHʗ66:fӶ[I:PHI}FN?܁Ή& Q -yGцqη1\, W۴GeMXOX#F0f,?[6*a&�碩%2-Ie[JX9ב'%ɾNq89NJd"RO8 Th_L&ȝ&nd{aUݴJ? bi!i$Js=@<lJV5aBL|."=pG %)qͥAFYFhQ�t2@`n?"N9 L3x҅ASFk */ i`zV{k=h`D⻬|%s:X$Ci[i ׁŖ,K۳) ΑGTm$Qw"8áQlv"\q<<+'Q,H$̱es@b0GJj"FNF$a\b2cY K9F☇pqBU޳mhC?h.gn+9Cǚes#�&Np%SHTĎRJ`;h]K8r " }.aLK%2ZNK@7:36S(%mD0#08Fp83*ϗ$=W: C2Pd. :6O[xHMtYsq'MP^Z&rk{Q.X8J.* 0䳁!e!Upˤ$f<ESDXOEmM1;b``bNU]v\a3$3L%3:IJ&f!'SvKc|."U';J`dܡ1[sU&zKaTud#+#Ǔ}+�҂ai<tK,ag1ch l,% VsfIqbKx8ys@dEZ4UMWG+EiK[\[^-D3p{rDMaTfd0*.=^jb"I+ء+$ڋ,WŅ[1<OSFf$Yx>5+|e(�/IȬj {Xjy>#[g:9=Լ A3Q6r<7hYAb #9>&Ű]ǂUBZ~,[JN V[~T 4 -YC)p*zAJeTx4=A5zY q66:j Գ^Y;S_L1^"ܺbjc8C:Mys+zhgüh-ȡh1ԎN将;s6ifO&ɤ1w*KT, ڳI`' pR4)Z|4NLT\Nht̅ <l p[z+lnʞ P)9Ƴv ϑU`NAvJ b@ͧ- NaYssgSqCm*:61ofUKq;ˌ+\8":X<Q:g.7,Bc$8+Q)*>ȅ]2l{v%F׳h2c'{K u2-gmEH 2fTγ$j2BX){(d.+ExL̩ƾ*-3 %*HPk߫SR(2j6]t }W+]omFa U-0܉DFx-gD(4M&(lP6֎N9.BF>-|496nPG{؆G'D-C.)=`X{ئYi@Q~Ĩ:.s]˹s]/'0eXTijiRmR+w+?e;7&e JH! ͜Ɉ6ǏkCT=!8*'%y mҔ׾M*Iw 8'BU�9"(OY= b9~y<ŶU37\* O>sy{ sr,g1XVgWNsT{d[uVڝj:8;p{w]M_Nzg׷(nxhf TzN,1~FndXLiC(ҒYLQ.A3(*).hoU  3> (ƫ)'V)m<hs^:2[ڳjg -q(uIKz*t Y :6tG %Dr75 IlݷGA<Jo.*m#bkvtT�#=rCh.tN2IlDԅ*klc{1[<ZX!_͑@XTy 0-5"mtgMNvYqVRa>))<kֺGJ%|Tjsm,Z>u\b&Q`w*["!%.. #dF-⬒|DΠz--aFDeE:Ji/O..qgIKA+؊ %)Њت Y7 J&5#T Y:a+CϺ'En'vj \8;M87UゎZ{i&+9?Lȗzu*,Xv� ۳KX!r:n>e땸zR8j+фΗ=r&R@([ Ӹ9T�FhYG0Zn_M"-V2NXJYn1B"OYI�3bRS-HIc%%"c͔ GR8'XjQ)K1N+ Y0 m %8Ցs1|%' ]mmc6k2Ѡ`=BԴسclg=An8'Uqsm@:uQЪ)Z7,O:'Cyӆri"udBJItgϞx_!m\w :hJEjb +)`6yh"J@Y_J#Y7v<Ä�3u;G^8 govmSy7Ԟv> ymݹ}ΏWj[uRJkf˰m3{=?[:+ʩ} KN{vŲ-iίJS[lJ a xl[|B>7!`RGҽOKONw\}n&w𖙃'3j)2xkмѸ=}ٕCPw €vey-=thjveu|3yQɽjlybKWض-)go.nZjkyl\S#ϳpdvyOE>3vV+kPD23=4"45l>ń"q[wdQ+cٰcեKœihgjw&q;kg&]l-5WK,}b7k]nv6i=['j*9tNC+9 ȡ~%r艥&pu˕$:ZDGR Z Z Z wnzۉ4!¨}2S@aP͹dDy Էq|~u :=mB>5fvr9;:y5WM<WύB'N,V!L8Nqf:a#twn$ VS%Ҽd854R7noiuJLɱMlzf>9َit9:6,prOMTW3A9MKmԻGԻ;+ӢxֵuLP״p-r%ٓŠO3)ƕhUƣ9F'.w#nש+15X܌$pw3211P<^9l%N0n.WN.VJʊOX:8]-\׉Jm;:ʑk4Peh&EQ8&CMTudqMuZwn"⊶_\j:`9^->xEWbFs%f4;&Mk7KxL|kwidw{ש32~(Dӄ�[ Ab]&<rB0_I@}Or>ӛOP#Fge'G'?JH dt?*A�*AmKٝ*+vĸ�N }JFn:tZZRڌ'5GX{On//7g[ ʭʼn$j Mnt$Ik^WrG>},}_'Lp: Tp)MRk #ofdC7)ht {bS4nD?nr~j'󥼸'aO,uJ̊ZkVוn ;fkA c'u"P6sqM9o"\*G5qMptbm4Q'ظ<6goΕgĸvFrM,[Mn+3όkK-ҭ>ϹJ2tOU:jv vG"G*1 UTH[W]BM ~H%4ijtnGRtF6ltw<r61I#Ĕ&XWIų<Q;<YTdL i~I%4jIH*s&m?S4nrKz$M}l=\f;;;8qVMLζl(9mB-3)LIuވ$Z K T *D0oa+D]K�Š!p<s\ `Z4͔twp8m*nF_nUwk:ھ5tyjdVv*sUjN<fPZ讕`R@Sթlyګ�j /juݙkhw%JKVsp+yd\|lIˋ4iV)J5S&m56m;W=>R(J2I^$I.,vk>b`<a)=Fןݽa+9vlg77#5F3Z#-7#33*4>YԸx2durrRd}w2oqd׭-q`*<q`#4k@9T72W5*~enuxe [GwW' wlK\ĉ&oפSjS{pϕwX'5S#Ot}hP֣ϵSեVS#RFp]Z`Zڝ]Kݥfѯc`,+JXi+-&rjU<e8sc G\k~+<2f6ɽH.ti[y%ly5 `i;{,Ǎ-).jrlA׬?9>vb }699ɕҩR:UJJT1I4P{NҩR:0JT)*٠t-RTi.f HK[iRTj;$lPVa>~aJd0%hBÔфduJO om2L0Tx"*U'ƥFm1msm[zc's{irM"cL(1zJ*腄NA<5WbFk܌t1)8{rkRk? 8N\qf|6 "Z"jt,HE8 Bc]{G>%11T#|o)۞+*65Sbj'[kffۏkrJJ_d*ĩdJ%3A\xT2%fTd*L{OJo*$dPh\iq3D'2Xjή4oK.{X&8URI-6Ҥ^cLRǛ˭ZZmufK=k%uV�޹L3b{l2;w4Єm̍>](1/j=y^bh[oN2ِHUWyFg5<_cu<`ԒY'D ޹<gno+r /p+1 q󶯓_M_̬7 Mf% n? No 0[Yeh{@%>jDJDJD- UEGf+Qtށp gclYtyVh%n=Rɢ,Zɢ*նFKMiB`ʣe6tsw-5KJ~S.D~m. U^c*ne>jL;1t};]|s5uS7Q//:4mwjB/MxD'<tE֙jR˔kuj[bJEt[ KnKvt e5icLRSJs9Ѻ?Wޕc2qޓeḶGܲS}n\MoyuDsUrKOHQfejZDžkotGnQ<3` DUV,S{⸰o]Ze'>#f\b*l 곀%8#; >,zI̶[wV悭AF';w̐lhߌJIr3211G]61txr^K`"\j\hZT㭏'фń3b\O ^_O2-D|Uv2X3A*&gw6uy>}']|Ic)ΞUVKYF&.'}rNKR~hǤś&?֕owtvΊ*$]o|6gJ6L(GprMh)ޱW>[ N *Nn@IfQ"2b~/vM-j<^b'Ikk[Ih\R-{hX~lD5vv#:ېࡱ:)XjvORf އuM7:iT9<3VʜJSGxp~6Vn8GP"ރ(oΜLG�A3u;GBT]Nݻn[~|ةyV[z -lsݫwrgzx.vjJ1p 8JE:CU&!A{&Ѻvg;>Rw^`ڭݫn߽+Q Oq7P�y84BFv- BWkwA#wk*Z78jk( #(] #n(?IjAC6 S (M OA/u`A!ACE:0zlop0b-F`! 5#kCX4</1� {c>ch%54C@QC �Bu,@״iD@7?05S*%nO!̵ &o x`i> mN8 HG.1 "؉$,R>LO! endstream endobj 230 0 obj <</Length 61136>>stream pTɠ - )<Oa Tk~.S/4p&/u?tn& x}:1]GkOK[w29v?�ٜFX P03 8:{=3*+T|]z*^:\U@*Z%*írʋ|Bp0ky}鐐1'!*7!n?hyF�d|Ϗ%p z69fRip:# /`}xT35Lu1# 8E»IΗNjO8,#�0"!kx*GF؈>)y. 8݉]>D&`l' 6IE0 1Xhp* 3³w#KFe76л]8¦M6 cYJGn# #1E ң3Ͱ$�LjT|a n�M i1,f;((Ib4.8|Cbʂ+"TB!<F ±H<<0C<^%X>1>Bdh!†baghIq'�!a"0�=.%"I8p;\h/Ŝcj\N~XOJPkmc y_k|@<j[ x !`܃[� wH&- qp3j0 c�!hj0 L9^7^!W:,\H PJ&CKB-jh6p:`bM ANōU4&� E�h@$"^�)B"VT1(HJ„ <`k �>\8`'74�)N\˄4� Sgx&p瀸H6 g�ƀAFa 8*2>tOgb�-!Ujc )pA@>#Y2%F<L�]2{|M"L1#�QHL@hZ~ ϒB =s0D@8%/ �<�a2 �ïa/aIl LX9Kq  U} xB,Ɠ!F  uzO\I| vA|Fᴊ o]�0WD �<�$�C! @ICBp+ a0n$[{|; :/"#S ^*t"`4h'# ]8ANhC"L' CFH&_Ca<9+[YzeJ0/!A{N(Xi (vO }q=(F~;}?>1atdiab-c|ք[i!a«'":f&M~h݇qL<m9xâ(s*H4ɝd8XNC"^?wTEPqz_m| "؛Ýq` S{K B^c\Ge:ˆ]�Iƙ[|�"R)(r-nORĄ! 1w8�ȥ D9@xmbQq览N wV 44@ 'A 1 t$ FJ'"-ӵ+8Cv! dvD גl P><$Yt_"O<ViY>ሸZؒ$ P3#i!j,'+U`,@+}NҍS䮲l ܊ef|D|̅Vؠ$e�'sbOn/~ y"Nǫ<"o<Z [-L!/DЖg~ w W3 9l°7E\b@xJ[<2:<p4V,B,\5뿀X `{#[YHx[>.mXq&#޾ L q�>*@�["m)/ .D⧍(X^fœ 5N$u*p"Ag�V:L8'8xx]'< /7BC*}Qo;uae\S kiXT5(ք CdT:E<*xE�3hd_ D}34BZ 24nR]j>b_?NŹy2zrṚc5֞%Mߤ XMбDG-mP)58#"TPFD7C2JVWπϘn%!Vdً`88R$&,byteLr4~B$W wMJP| Oe-'Kj9%.4Q�Bz?`v54TK7`o2,ѩ@ɩC=b։Y"D\Q;4@ dFJ˳>ϷK0y+2:_X&@lCĹi،[ ZneVN6kJjl4/nN9bP !eLl;4uJrD^N3PSlv7srI* #aQ E`({PKKT3sdp jѨPkO:/`,qN0c9T&j}fQ+I Ch( şÀ25e7"X {_8{#~I Wҷod5iļP(#RNhPA�z$n!3F%g+QtFau·S⮧%| K#dJ<^Hm>&TѠ8j`Q;rWvBv=O9ߤkf(nd*ChK�)Df ¸\ٝF@e=y~i(pL)a>BSh# XxpE-TX T1SB:(f5D"Bz\$Cd9I_(ֆ!\BS∄CC rPB'4rE8wQh' @%NȐN,)x9tlЕ$& @EEFвNH,4'IE .ʈ*[nՏ| @HH%YڪP^P( Cȼu .Z;DEԊ%t0*F5a5ۅ:$ tSB1s_-Č,a}&-jXI EF#"2MS|J&0Fbbf5MSag344"͜�ɤɤ isfkQΊۀtx</)Յh5HAq;B  $=$'H'"ސ(fRPG%F5d-D .+Zr|u 1jܘ*BTHd&eO]eXךX l"!Tb8HPTE0M yIE:t01QSk0fM6aBm$$vF$a,eY; l @h!\~>@ON j܏,me`aTe^LلabQ熽x" jk#OY<L Cʘ)qsw9u"ۉPWVoDj:XU$+lf} Md6?>ؤXkJmX0W~YQ?=aP;L+Jeay`6i(5Ӥzj=6i#j̠_2&r֭\gz}{FCDv!%? i#RfO3ZJ"=&26dePO:dJX3Fut {H�h0uvVe/Fctz$#B2#Ð Q2!I|U%cwd }'% 8T gF eb%U&q>RI +G-;nAbȳ%ŘuU"MEu4 A .hvɴIDl?G*d!GP-!&GVҒ%V%)" /Ҏ8GdcK"d&])/jU@ 5ˑ!)В~b)Jx–Q)QOMŨh7&DzLO06A}`/նbV):@a#VQʸM!"Y;FM>P @Hr5Na!{&*%=~$Sg1Ynquc{ѶEhWaܢ;(+T޳؝Q+𷶙@^^lS+@/-KƇOބk[mM߼D AUhV"g+V;'DeNs"O EDr 35Ȭļ;<@GMl`Y]PJaRʕ>?=+Y)r5`!H$$-$!#S'0e1dS"/$ĥVr#G%p׻bpi%wg@Nvd=ůJSS[˭r3grIP i Ցf!t&p("2{ƔrYFVtF-,l{q�*z/<P>d||k'&ofԡ<ߡhj Zjε[8/u!6z&I*а_X% ` 'Ђ(nxq5Bh``ADBMZsU'㒇)w<njϷnF|\f^jӞm~ڝ67x+HH,yo Γ! 5@i/ psyC-�L{םz5;Juoߌ5idcal�J c006{�k `0� cc8Ƹ1l1w�՟OSL֟-?}cY-(_aLc�0fcl0J `3lHN2:FRgv8!?;vϞ979J?G{.(n-=~*?}眏-_tEWMA/~O>%?O~k_SW]龷緱==oݗk=k)q]9{?hoKn?}18~o<UYO}e5vz?~>b׶''xΣعƟ ۮQP_-?3BEػVqk5}o=x9{߭-,==}xںA<ѣǶ:J_mG_{Qf˜2gY/sJ2w.)gN/Sz;8u�>\]L~mрBڲph0%ѬW9ZxsΡ4v;shS޽ץ)6\t>%٬> gܧ zK׈N՚b+QPSa`X>. N α~ʠ{hWI#hxSshѾ:z% 1D]]|qH9"wnй),1;�ϭ(@ut6`[jWW5}wgo%9r|tOkn S3jvPmmݕ[ݥ98󌇟\Mf9w.-B8rj5!t;Di>@dDǐϠ_Ԡb=Eގ&L/9n5|vs1V)%lG)ľRPT/tց{JdLrӐ>zž/[w;__39/~?'8 :a#rv;scCFucRxixKSk;xvN39'e|rxBGܧO=? |/ c?v<o9 :¹wAP;v}[&{ghSoЙ;_wzv֜@= sOki>5^\l ?^bsk hOZ҇6{ςB;o=J|_>?7v|_ݯޜ}4[@R`bz]A;4'N^NϷ6x$}Tp<.F3D �>)L2Ÿ1~ƘdžY_833 cÇtب!mH=#}<gf$#LfxH ̏dx5q$[m0}$[s0cFv<cC5LSٖ3d0[d<[":r?qgH`xLg>:FY06vH2҆c1~˵sc' Mw{svs?w s=Ͽk{͕}>򫯏_w[o{bυر9{o~__ݿWyNs}m>z nS>0??7yoÏ?ھ;w]|;ʾO/Wvڟse>O=mh~OwƗg8o?}?6[_{mŗ]pN:{O>~}s~]C<Q'?w gǹ{?B?ģ}t/#@?qDݏ|gY~WGn~)u΅W?? ۯ۽F,rq7'aX>Gw*^yO}5ԟ|?=W:Y?p_~`wB }sO[Mlk7GlOqs7;ysc/2ֽܮ<3%Od)^/>{>]u� >o 3O>38W-bc_CB#_ß:dp$w: ~!o z'_ {P?|ox0ԯm^5Ц74 m10\(_w,3᳔ HW\qՔ70`&kRm~kĎ"GY;b`:\Y"jaԐz" }ΜP,@ Ibt8{d e)wtDE${p8DlG}3@K\j9V ޗ6)d=ű芏5Gc?qTKw0ߢrCݹ4%Ktp1CUv|:ʧp,l>7`ic${!aSLЛH?̹�WQRknl{q�Y4@L$;?s.BPxL&b;/:?J蓊˩aI&Il *1_8cn"\ *֛56TӜ rOcYO*`t( @pSZr(oR!1mU�nI*E{THҼ/*"< wSI; 3 RAtQ\{('v!Qh9j5,ET)aSnD$s5EUOCH[O`fBc$�XHQb G5sܻܷ8wc Zُ>䋛/"<꿽 |OX~+=}c73>7g_7{n˯ /^ώg>gSK7><zgK;qPq ҧV1FcoÖUEIw"KtT7�e]Pn SnNhhpo5 Tpm貵JUX%QPk{-fOo<|'6~/o}{ٿ#yLO UKf?o)`5?/j?4[̠f<󙅴/<6ݣt͞yVm}gX'oi8gyhq`q>ē}hxgһ{]ݷދ>F84g~ }xvތv#2y']g#k5>?Ƌ>9Wkr�Ú|O~~`'3_ jC/ܕ$YϺ?YCt:~N=?V~K�#_/D{P3Yx/<` u3Yfq-,3&TiqaDRR9i/^�k2*p XP@Uq\52;wcQfǎ>ssP</uE]tϹs]ly.K?^rE.80k%{^|E/x%w%.|^x/e/ˮxK^=^4ծk+_~/~%AlwϾK_x^s˯ >;㣱 /yK^v5{uUJl89+W{ ~Wswοy/~{]کc׀ҋ\r~s_x˯~ ~(hx_>ǎpy]+U QpCG{/<;ً{tnHw+~e{v˔0W6t%^]jhc_\]^{~7^ ?0W] /d׹{&^nj_{v^]- AWv0x#iG{~[*?Jn|_h~bX=nlm/:XYë~4`qu n\Uyzιݥ^D>"8Wyn49ѥА+_I&#sv ^}^LnE]׷V |e/fpŗy/{ \]@]pK.K. 1 �~v:� w�VfLC(u`+ic8ݘs4εTufʻ"aymF$E CUqG9֕�ThXV # ^׋7If `jPo�<ecAv) _ ez5u&,Zs)Ո# 2gk4&Z\V x粡.סh;, l6IPa &�c]%¹5= s5l6y[/խoƯگ<;yd]O=/?_{wzO_ʏZ:\gD^o-;u׾Ty~߽'  U_hq: /?o~l姾|X?'~<W~zV |;y[ҳ=oOߙycPmwmwG~*Qy? Mz0j+23`ujLKss{K u`ofgs� V8.ۓQ֕޸Q 6+oPW|jLf(C=FЏx[:+lkQ-.i*LA&&X^r:lqt!Plj|HMW:_ _/u_ ~ig8vn?!ﶰz\J LI~;Ы:Va=:Lxf(&ĺᇡZI# �qz V =d[C߀C0<$�}{[rEmM_[-۔o=`1:+ջkH-)Q<j~}U;Nq�kɴ?U>hEnrCe \^^Ma}[j'=_>w@~ozz.7 x8u/p'~ji;OG~.}_t#MG^ntk)f<τk5?8ↁ[oBoX!:7}xQCǑxLwnMF {cx)݈%^j"dxciIcO�-֫iASAJ5@LP'Fa_HgD00ۋ$h:blz$0!}n,Kj&t&ӵ{ҎNΌ}DS!*3'PQk*H d`\mgv$ Π #YGR8ͬRFe=xQ"ⶾ7�w7?ٵ:_ k|u|dªjM[vSO_"D~m3oqr//<G2lƑ< U$~ W#OҩHZeSQ^Rn8z)I+ 9nS };+ >�wĠeD8F٫6]Xvj'Bwիsڹ[:\Yi-u̷;KZKgwtNtI˚_3Qzp= u&�F `fBiɂB$U@J_呉)1A@Mu~//6 l`*ۯwO`uyt枴}]v̰zfT}ɺ@_i"!LeR x1 -q h a&HTV8tKʔұL~H3Úy,$ 8 \:IA/A,9Lje8P.GChj0 0(6Hi N@0B$ hiR}(=44tl�Y~_)V*  Сxb8ꘐp71ʧO5\:++^$-l`'{Q`7h"E 0;)#~U4NT¶ F#*,kd Xq6G2~|"& : 6Cy 8waGG!\A"_؈ Ja JA@8Vc6O+ edANclIE3JLP ^9C"K15M�F!puA " ;)CE)E�\x6cTOw3[@ > >6�pWӠdt<ia zF,ըMl.굩nӚ].%z!<N}ϮċpHM _X@#!lQV <1Q 2gOz=\#<N>0cI{xN ރB FL,Ht0ԀcI`3}hAxM$2@gnvVL7wݶHUVOnmvwjG@ނƗ5v9?{d{VﯙJvd4V>M͕Z)B[c+Ođ{GڳYoxo(x�}PƱr<\k w׎.o'rl94i- y*ߞd3VEvt`Ħpxd:_ǰ' vxZǠɎ$2tX LpWio�}*?uC^u'OH)oO&] f Ԧ;f1i )4<O暰C&;%fq#F"Ccm:c5fc&!Cc&uoM4)8t&R+ǷbNc5!w0p@ G4(6r9hpMљ_<W4xhZ5x|Av|^CF0׃ZwwN>sv69 kXvO5?%0qz`S& fwzT"s{ $:-JL'\Kݻ[e%y{jy e5jbt]:lЀqFQH.FMP=Q;P۽/3h5khh3+\R6|itaY[j+T~e$ƲƤwc]V#ʺк:w7-n9277xcwѮA\/f{.#c� r_wWFZzl4B:%~uVJ>p4>?pKgYnOާ"�/?΅ʌ6\P~i"Nry_8lAxvUuEoY*vԍwLal/QGSEn˫K' L_je뾕%`WNڷ�tⲝO24=,[-WwuOku-| ۗZti%/7S[C<OD!e+, G4 :G?'s)(vxgW67 T~e8S[z|wyw[c+-yaKO[[ep#O5o^ GQ n//7O\sò^Ks>ԂYu*IG[Kˋ-bq\j.,N{ݜo5@cK{BqQ?w|-wrqvyiwEK fvG'u!u7Óݥw`9*r>>)>l t]QW$iCYxƅPQяԯ?gy3 s'1}ϼ1y{0=2;[6cTP(CI'JAoa^p�3:f-)MM0~㤸$Lr"/P6T>gps α$:XR"۝{X}+T^vOY&r:y^fa+P1rTQ~KR͒G@5h#~>O_W诤$ ,>z[_|<x9JHBEvGoӔKޫ{)Ϊy <PIsR-k?�/&$:^4L?wU։'-rl!3;-I3Sdf7Jd>=U"ֹ̀.\:(#3?LR\"E{_aluHil KY1듣uqT1ÅQi驔53Ir&PP1NtNZ*d6Bf*l96q C}&gS+|;2sc1'p5eh]ۘ! [g-Bb3*gCn�Fad}YӶ;2M7dQ^*xYCx`Z % SD[֖X sjqni,Zjt΅s %,b*X%lW/p~5؜=9&Jd'b(Á֚9nw,bsNls5gVy ,l;>]lxuث{b-y+oI8Ǧ=8g^{dy{w@)54/XíZ2Tϛ"T':CN9c,)!`730++++qa-US8Cl|79֎m`glj@ݕ*n*nV^^ܟLݟƐRIv}:)[W`Ø+L7VZ_e8;lev+6XL)'ZQeU .H8#M<<1h axF8/9)BdPFɧW>!BO,67p1nS[T'ST@)fl3g s_MekWb@ܗ :c?S{7ث(3Eb"T#u2Dzm<C`2~պ\Dy|W>ɧ7*{f9*fbr鳊Y&YUXw}0 ׮IgdFrpZS ֺ,[fwK(*q:=}5VE?69*48jDv_W,r"o!}-^g .ⴐoiņؑ=*h<؆2TRkL^Xڌ{ʢQ\ފnA[ym/zGΞK*=gX9+=疑EOjGf!"00۔t А6DHuU`e^y}4n#lϸ \LIegkgw:0~~ֺ7":Lp093J Yg{a]$*] 0%5<?q[ =b #oҔqXPe<wcM B.#0(iDbuJBtPd[FDyND<dq !#1e< 2NޭJr<*iTj/T&Li擆l[UJ3& 8E֍Eщ(YZc~SGfcx J>sY)7F1ʍQnrcXGn,2u׼dXWf/du7/i~'_פGx8cS^0ɋ-|tyMVl15kv5?XQ![Q[)1bJwTze+;+QIΥ"Ϙ{rKj-䇙6Ks} @a[#i$ߢv%mOr}m{!$cSW[㬁h;j<jWjLm? ,$vWM�G yd1̜(Z?#|~#4E)i&)}.1̀Û84- d~a͠^)D,{C"e8gL9 m �G,Q2YƱ� @@ }H ໆKkcN,zCH苺q2 MBuԾq`2$ #HE Qx!'1l`>̨yzH].d�'7#ak1 ⪈)83VC'õ&-V5YB0} v(3ɋ_<qƯʞdnɱ <>Eg|U/ak'ϸZk?|˸]Dvmfgmf5Ge\ɢ)LJA Œ7$1 ճL\vqEة3 w5ú' f}*![RmWgM%6)!S0RrGBK-~Fj,6ͬ@E TTKhBcz�da팈dcjڀrzYY z#F.2Pq =ݾ 9:`'TDޔD�D),&mQbEtV1K!kkz7^mbp`ڿv?ܨvH[n3/d^ܱ0"%Q@&9�0A& $xq ݚVhQ|caDiQ+I%pd "Snt[ÇeC;dd|ÒWϾDk�ah<5HCmfe;nh)nG)%ஶ8Y.)5Ж{wmPS48Z; FɗDdEvӮ\ O%%m1PCEtL7of^H_͖jÜakb̻0aJ/v9es҃ë8(X-ņDupHg$Be~,OgOkðB8Qn NeKc$&֏O!Y(4VGGc?b% w8`ל$[dIIdIp>/߱n[^b.๝=w`W'4 ؞>_ xT oy#^$R [bֈw+BCά4L( eZ"~J +rYS0R*۞Wr5D�,֜dPu4Gf6s!)}=#\fHZB~3JES ?I:?xڿx*xS< cw%$NG$YTd; (!Ïx9N9C}4CdJ@Wp"#fdvddا!m%^NͽڈNRybNP@}j^-hEZk[WыxErZ6 g/.kYyϳK1%W}q]AkUX@tޞ R:Nw~]԰u!ZZx$�.}8+'1U4,c)d|sF5tBE|ބ/1rF15ܿ;L:]h~ØTڏC~jYAK BWV\.ahu}y^,&l0s"}pIdF6]A]ZL-dqD9igo &lF\q+ Vpߋ'n,#,wǷKUgDě) WK"] ;�V2C.S/; 0t)�8kn A�c=EEL׽ q_q0^T){I_e,qU$o2W\"X-ZEA[>>A<ASEY.<'+e˓Nފ*p!e9\W +xOBu)QB8ѐJRh٤Dz3nSU؟RU<Ty 2=S0ThN8A&e#�@,ʜ K$|8 #A G=H`=f;Oidw?fY*(kDcwHTkI#~TUK�<kT}pV]1Sn02V`%Y�I6|dI!OyJ9"D(gm*1 sl^cg 돁`<IG;raKqFPsELX'o/:tߊnǤ& <R_ RsbJZ1ahŊ{_iEWOڒpPʹZtb1JJjW_q"߲8i_aJb�8l(gc=^ûLKfqT)fx߼QTU9;S|zP\&, qeybc#|5> pFquALxM۪aeK ) 6yERtYR[t/(.X,!YIdٟ?\l(ChKN{Wq0lj8Ù>b E8tFÂI�)U]dUOƋ*a)5bSO&_|Q|lm a[(b\PQ LCF.>蹭y㡣c X<: Fn~i AJ5m?%ljqZXRs$@~brt SeGF@~zC[b^IUwYz0d˪|![%0X\.{H�2eb^&ѐV d,oш_rң@VLzui,G`bY%Qf =HYi<먔5"M)I!h`(A_�Z-<Ě@ b~&�ԤԸь.wvLwv(Gs>LꍨC12 ')QGUkU2!; ˶SvOC R@l'#вyrPձќq43/R\3U*SKO)ix%RH4O%~*S\"&K_$EMb9FCyB P"O -,/uh6TF_s@K.(H@J?!vPT_d⿩FӒ"bM=�-g]1RڕWd362Lj�4ZOol-$CndN65?VxHqߏms芄 e$.Z$FVb9I:I˷QPA*PF)o%B2^OUHΡWˈ& LTSӛS?BPtYJ %#U6Gfu "6k6;xKXcG$;#祕Anmd!g(>+C/e I$V@�%(q^EѰ[||El=5eE(w2܉7,X*B $$Up(9#rZ~# !wEȊ$ËZ8I1Ĉ,XbȒHWxyXI1 6@:54A+M!j,BsԀaM`Q3,(:`77 EYHqS%*۵rRA$GwTh7FE;*ڍhwG v-M:N 86OUG.cn~Dy_ߩR2͢uPWyXc0LT,b,eAlAp,P+q V0N"p":- 2']{?4n [< Gee iqO闽�g_E Jl{q53{./$gZ|b4Tam`<˾y^dHNJAD8!~$dbLcOsTCU1Ӏg=/&I~*q1qb?"V*x*FjmNxk�I*D"V"{EVvB VFeʻȐ?'qƟ^d+j%_2d?]ކv^t}ӺV n`Szql2d?r:M>ZfZb,*<A^V%Jky 2^ Z w4mő{$uxO'|v IhOHU Hk$y FY z*IJtu 3:eaH 4#j&BTE8W ZQ񪶟nj e+6�VJ@#4:$#s|=UP94Ih"F:$Qf =HUT1bTA!obw:fRyK3D=v?}gJ:瓩zhT!S)'UyR X%u$=H G\ˆ{F&QB!쌈$�+w Hя5?iR!5D4JWaUM$.UKT)4*P5N^:OG_0Y%wQWPckl#R<ho^.v助T 3_D~ 'iF#'^ 5̛CR mDSYgO(*9rNZZLgbާ � D5Go/8]:`k˼fYV<ni9ăcYR8JPb)F—ēt_X{V5;} <4"ٱcoi  jRE&x]Y.M:qA(]Ұ1[mkڲ q r@2jSс4VQBeZX *?SgNe(Y@eƂAL^vk9.ތ]F3~Rbʆ^?c"jp]&-1YRҎrm'iE47xZׁ8Y7ޗO2 mA=RY˨ji&Lddug#-;SNy1t:7Gcju#?O\풳 mWfVdʐׂW]o " $L�%Rh%¥*H";9KQwPy~͘:E(HwBſa/qz5=8 e2`nӪH؄&6vbsa$0,$B h~߄߄7MhU$ă D"MoNF,2J / IuHq%nbdJMWT%?{;Im-9;ODoib:~bT+;MOP/iŁlQoIS� �'4 92') Y `!Q_ E}_7i|ɜ1tzm3I6+Ռ ?s z Vki)״%%mi\ lSĸ_wSz4t5.PA5\=KS '@�C\2@d("VV ELIEȋ$8ZiԮDJ+ոARFTd v%Lܒ3)9W!\*AUdV%/jQQ)%Ю IJ ﵲ:Q?ƙ7Lk(_;Պ>=7u/홌߈z[9sF@ i :^X;/Y| Xދl�q% j.@(TK4\ݩypq;}DRHWgB~i1)i1Zw@/p0,^1bLŘZZVX< Hb(tBS/H%pl"0&NjDII�2feQF$ 2,xrvjL:kgiIK׈nax_[x!gh.ٓ-}Fߋ{?kN+8vZe B-5Q1p6(6Gv?)j/ղSԞ -;y<G '0!A8nq, vh!*Hj Jkco�x{@ǫ*@FZƲY5]|*NgRo.ǛƔ8PTCQͷQ5L34�R - 0S/ѡ{""8 � ,SʄdؗL(3}@XpP` 21$ /Jv0,K h%!4Ѐ@�4Ѐ7A%^9OJ+3#MUD~JT}'@"㈲ m{d+r|ok[r}p$ =3qwb lYgkq ge36 ڊۯL݃,;ؗvddk2dF1~$[}L98b-WPtX:[i)WuFY%n1 dbƍSe䈔�HcP9+K�1ÓDBU!+qv~mMMZ3i˄: [Xk3 X 8t`J0<a"+[  ?Dk ,v�ro@%2KMIbIEJ*c4~pUԲTj4H|b}{.-C#1zG5T!Ed@`H F�$q\n#;JL`ʸ4cŞ┐{>JX^?@g24VJP"Bc%y"5c+͵qtg@ht�4d 2ϠZ!/2<vE(~xΟ IBl0~XOBOV 1VFo2Ӑ@CxLR*( J!JT'D![Z>cUB?hd*!3Fhp |o?u>:sٵˍёA fJk/gهmlPd8nr<߻Tdk @~kE_4?eO:f Rᔪ{mz3ޜZ }Sh%D NR<du02dq'f$gJm4G$P dji5@<'cKa�8Yiؠ28v8z$9$-mN Fò  WA 9[x`!ɶ5YGt1t]yq*4:qPETEEBY>aN)AaGゝQ# ;SM7yqcwT8cY g/ /$g�%ta4B/`DV63#1UI[XN`{ȣ^j:2A SK&wTvFR$Sl]0R`tTUVSY'U8՗M $IX) /ID{ J#U\yJZ[q.g"<FYG�<IωhUvb+H):H`V5�J<%T6"W*BРTiLUiSJc*/UK5iפݫn%+S2�e,G2p#6 C2E5]흫݋զM6E+2$d^uPf?Zmj5�W�BjJ>^mT0GjSՐ`+�R~Y^z."ST6P=CUj֨fCR q΁Ph+NS3(YO'M4iԬ-+ 8)~yK\T6@8j<OSfmjլH<լQK5kӫYGW;cmtiWho/bJh9苎PխyHXGUj"1PHx_qh@ E xO0ziԫ1"� 3"' Inp2�%?$Ԓ>RV*5ϓA8JЃԃըZmT0`h$(oҢ>}:ꈜ2~:yӧBeʌLUʜh+DD N.b$U4>%ԵꀨP7`ˌ]{[!c*{M)" [敩Y,bk }1%ETh_A].2RQ_/BT8*iń+M*]=F5i~ ]Q:sz6i!{'(q%]1ǂ_)yoFkRvꛩ ?~8|)O~7cfjCq7qyf \$JgoWR< EȊĨ+Np�NHN;'VL3|@�SOK{9,_ߩQ-(ٛԚe%#$ GrKT d'Y`(BV[)Y2dR<h zM?<ߝ@m3<4 0uM�p28$~؈3,(:51!v4x3ބ,*kx�ƈ5Aei5JUjqD2Bf弈o'jtF�j^4ɒvj;ɴׂB֘i.[~]t�.tbyQq2-#lZ:ù|"T2ek# (&9 ʼW˕BV SjA ':x߿Se,EG*:s|ASlP*V52 Noo*ˉUOR6䊹]X)1$ub ;vu[s<+[&͢,g0蚼^!_{\0R/V 6% K vZ(Z?D B^c'ֽ7Ӭ5ha8BM0ZX `ƟxA&YYVAp6{D`eOf>@ARF2SK)#HARFpA_NY eYbd8L�!g`eM`֥V) HY@_-9 HP8!ZKD>`f^{ !# X0H2 %dG`#hyTF-4(J-[H2J }{-o}ΡWSfPOmOvMt rftXkNP2rx( Qџj6/msK!|3IԎsZ|ooRF(d`I9r V_ O2dN59e^r]@|!")>@&r=[1;Ի(g7tMuQ;$w|<uGJٽﰘ*^ nϛb`h+u cU͍?H9{9 4V=lO (VᏭRMo_7ƛ5^ wa'+bDŽoDVD3\d2˼Hbx@?e[W +9Z8U9vx[YvA 1#1$H IDayh)Y:U8Ha$'pAϪ8(R*ۡX]@=o'[Z9"^o?Ϛ:WвJq lU3%v{鰾p^srB DlW4[vEl:ƟaV Ky_4o(5=U2^,R_Ư# "Q2 Up_ vK= c w@luj'lQnYY\Ffyk?]1zeT'$f +zދGy<dRO%K-Kó�C9�=�bKS?G3^\I47I̯D4cpFk r¨<  ^d ^C/@"pEtQq8X  a!5J/9SL< 2$HBAƗ cAͬ,12A}!.vVbPEn8He))h\\=1\(h\h*/gأh1j@ܘ Q4F(7mSa1�DF%V`b$N"OW-9i|%=�6&$ ``}terl"p }@{7<=E"TJ9- rwgru/4ϣ% ߒ+U *{je#Tk*Kf lu~]pN,4G[j咮.wFhUÑ$f(Ò m`!{u3Fǔ2hI 3%teEwK vE\QLMygymwBt?&~S ?]oIzj1Gr\R(eSFXAv'{$!#J _'2(EE;oAV$,%$< �c+#: F�BvTDB0<Dhx0ßvQR\jc y9DY(ņV("Y|$C9Y�ME%i~E8H$�< ?Poa�9hd !YRgHX?zBJ?Yew-YDEVe܌YAKЮV)NMF3gյbƙ$#O1}dH @aIwvkAKJ}KJ%pD@ۀ.3,q Dӏu KtoDз%FĪ-qr"'*H"q;pphPJY 1>&? P B2.&SSlPQES+>\JET[!^bx/,ZZH)ʐ2=&jQS$"+ X� 򵌮rVONz"ӔA艼H>F3S~! :8vJ �'0p感S6|%(tG>0+{U׍?TFl "I^"(đ&HI 4nLo #8A$r4^e <Ẍ:VGk%PyrPUz؇ d#**62 /4iL0XMcPD]`U} ˽Hn4JdN iPQRN!pP Yd\�%Y%% }?fM?WMҋcsF!S&ߨ"*b<<KB)Hf A%?, 7[L"GMu1SD%/ uy"Y u UP *T%CU2T%CU2T%*^N2.iu$+Hj `[ҨeU IW I4gTֳ4q&ǎ04Do4CW+3իT1 rxA^*i ;ة-@�f2�E t/03�R,n!s͐l;?[H2lO Tc⬸//2dl"ǹ=hq?@`H)g3+c7Cʡ[/QKFb0@s{81C'zp Oa`D눠P�T:'I6 geĆ_crCZLl M?PKLF`Htr+~2l4VӍ?Дu2^@F`O¥!@8Ntk4?%%4?U4=4xj|8T!;XVQM{iFNfaȫhXk2!-Zi~1asWu.IP:/ $Nf�ZU\ʯb&dV䑀* a]jDi/=^0@MuHvnsZEF*ft"E`&$h%1^:a*Ho'0ӆ:D sb^[>V$D!52˓0D9/D2O//p+0V1ԑ ğH"tB�?ޒ�h;�U|<U8K;VHA-4wT1sDKhw@ZO`eN' ,'V4kXD#ɂ P&!X`11">.OtNq <KfyI$2>^a4q֊eE6Yb ]iX;P"yGF=#^OT3-CA5`8\VS[o,s$\שJjQ)8=5Ed Vl}\ f6|}TeۭPwZVV(\/\~ҰOAݣ5x^7bղ7UpkeVoE}z*/H8'~Q#Ks3ANX :,Y@hދ,$  -6/ÉQ́!BƼd+&KȌuvC4Y5%Ui^$A+8!kC'` /6ʊ0TJU>։�=A 6UhV ZR mJW <O{cZZkFNqw& K&Co A`$#Bht ܯˀ'Zz >�p~HVܓuJ ~9 P?ߩ+O)\W~U*Ca'׫NX Ct'µmV$v_@ȤCxо+bftКLLqaRQ-%PTzTm)]k>٪By&Cc+ߥ?\s_]+fɤkM/:C%SX:_;Vؘj" (ﱡg_a2>$FSHT~,w:>iM[m"=ɭkajn5t؆ څ]o?J3#|;Şs_c_v/v-b׬BBi)% Hڼ||}�_-:\ͭn+e5g%[C~s;'Z`]2#(E3ዾё\ WS),*8,_ߙam|xj`y(j!rQ_,FAʺro9h4uMŦRwimMceAs`?XAh@\F5+Zw-ɝ>Ҩ"M5VV 0}E7ViMtb!,]e 56~ZƷ#yxXn-2V#'~XF:((gd5%@zܪTGxԈ冗m؆Z53b7{cZYф.%5j.k]lwx)04ԙ뱅z\"9(,�OkY]V˕73K@m˾gODOhRao yQZ #qc!0ZH4JJУbA}vUpC~߭}4*L@FխPNNKB}/gem *2mzju08ތުQ70a޶d0֏ɿ?%?1|藂Z11m=�mxtX̷�XDPgΌ2\6GtRA�Kypwzru7}K"jP*hjE<EPc.VAU[RퟗߊY\;>Hm+Db_ =緪ل>vI7y ckcV̠ ~`&VjXhcA7tߔBSg>6~p�x4bҌFY{?ޠ |&*�=˺4�A׉ lEɢ�\-C"=zn9&+{,Yz/i:ksx;,e 1pf+禆Dپذ?&V8&`<Dbd5ߞl֒s #'%b*Vpuh[�12m[E�>=g.1(XW-t(JX+k^ n_Z#GQrRWۺGlP|jЫnmC�j*(+VK$ѬJ݅ Tqė/QLZV+JԫJygB= M;]*jj&6~;J'̚g7]4TΫRk2lCS)K -鿨g-`vz=Ұ=q=׷[%Ja_,UkMw`(ŷFv-ΆL> J9<rɨ4St͡'ݙ#\8BPbԎ6b/[i]+òh2jwI&zd_Jѕb0%gύߪYjegP|0Va9YM7PK 1\8CM] !WX!ft/aevUXӴL3M'Ls]T<Q 6]+tosZ:2ۀ�u~S�DȽcU]w@_k`-1>͇ƍDұ;B/6݈4ud|%<`zo[7R4v3MinEfD|RHKC'f|a9R嗻ODpbU9:8WWgYÜ؎vۖ|x[+[ӊe?='@ԍ7&Bw7N wIq㼈.]8E5t31tQP EM[5tr--L{}BX/u;YشR ZZ.7XI" biL/ (KZDov}5t!?pϯK ]'gfch`ӊzwV%=@6J]5 VͷB>XEvi5ӫQ{twX ftmTF̗6`O95ަ) lVicoF:H45,DBضfjY+[cJ]#fw=jaFn;@Zd݉KqSvZL,HsXI6Y%Ҭ'zNR" >v⟛FcQK3̨ea)[3׵OҲq]*V)(@ 4F m,v.nZcRVMW,hsPz�̢k3Ќ:4K])Ag(Aj$3]� %n8~^BW ZCn5qE hg69XݒRrM0#E#[u(ts<[}GԱ}A1妙Ѻ>>7μ殙eh] U$nwJf(v&7k:4D"K)%3[pE5} akaJ}CKwӋ A["VQ1yd߮Ҩjz.A\\EUC2i˼ݑ٨ͼ6/40'T`~A/?Rhca+Q WPnoWkYGXd:ʟVFP=⨵w! V'ױ5{mLf =u=(jUSۊM/9~(9<OcU9q~py3̛dt<[ƿ\mUd-~O: '˿~߿t443/0gW!MG/_3~xOݷf eaq|Jᯛk6wsCzM!+K3󭐔xϢOf1ZC_Vp>c| e>�5Q ~|, Kl.ejd47( ?�KXꊙoE w…Gy> hchv`>z\^ȮPVC=N\P3 <U\ag9:4>}+aïs&ڝ׫!~=?BK]<~Axf+>a�M"+qOgA ]fv±Yh)ood>pDջ={n؂B#T0ު9雈};={iq5v?\5zؿS1E{G^1epXx F{{g*/u|N7V fyc0s {:օ(\Lռ/%j8fC ES!)fO\4|z|#? YD3w?z#5#~Qt>݇eC^!n.jbޥgm6dH?xWo)ܿYxϮEsj?/[}.[vGr,iW7ՋxM3ąEV\#?\}K{_k3^;;Gݛ7^+Qq[0Ǟ`?</ՐD.  i)f7?n0OwעBˤ?sWg3;'T_ظ}G_YcfJuf>Y.,gV#L<k9U6g8pZ@G3FifgQٚ3?f"L嘟9|>gNg3̥~Q\3>3Τ h!;] RB:TLҜ]wsZv6fnuV*(٭_ٽAϞgOv`~vyqY.* ŜUߒw 3[f Zmne?7l œ1s\E`q NWo˵mpci&1l>eOss_\oV0 wg'ŧypa%:u3fEnx{y>)g*w/zc>_R6]Xg~a1X.J 8� {Zh oNŅ텇Ԃh›*<.j`vq|X wspqbi1|lbigwV[*-TsYxX89|]v16\/TY7N\*&RtT ,/zd5,,ヤr",Enem K|cu%8+|~倛SW. eP_VRמW**+3/&zWoOUe<~*W+3"fmu6ֶZٵ m`xwVF }@>x Tj4Rzp/Won7'[sA #nk=pyZ2zz~Q^8 b<+(q樒enޢL".a�8[^8TSpm,HvC *ct8rޭY"M9/"¯k.!gyn{?ys ïW"ݯw+s^+en,W*|+ȼp~,o"•.'e%~ Ey9nNab4Vr[i$G¼y&i{+qB/ܔXnKΡ/mmh?B_j]mG0sǺGby*|=Zܬ(4+lE޵D.}HO[ه_ہJfyLɥ_o掷KGllGS;g+;vJZia7wwIbWEw͒"ﭟDnq/49G-ܿnnE%^ʿj!|\bKx6\2ӫhHlؓHR9dS7ѹj&*G`6~&c ;Z,,,ǮR/޾99~Jy߿/3<|tcu<`A4arŠvvusZ^~?~LG}hʞGɫQF9^:,o?#FFS,I+$C+'e9‘ӫk=}oVŷYnٳS<x<0Lu#_L9e6qTMV^*lB3<" /..^H뻗人p_L%_ΗKW+jw*t~VɦW7ŵy^in&{]'y4m-{} ܚٝ<x~;_]ڼ{˟W͉#+=-;}Z0 G-<so/vRgsp yzH<W+p}ĕup e+R_/2wzRvnnDR&.RD&sH+˴tVAäe6 \{{\3Sy\V#FPaUl^ftg7Γ oq\bpO˛ƣV<;;LߓOv^^3hH̗K*P 3wVPxaG%y[O:mH>:n\jg2糥DWXa>_;2cjoq<o.OlYRN*Ӫ^Jje^zQDCkj"~FkL:ڿY]^Xpj4I#^ ]H,㫫jywTvvAgFu5O07V$ڝ}@1kLҦR*'_fhgs^*Ѩ^1I]Dz0S?JPʨ?7U@x<ܰ&Jף\wj]66c7hU$jX駮�TF,tVaMp*ݨ@y٠m<~ѱV}njY / D-xo%۰NFag+S+*fVuIv-*\5�dKvkv)*W-w3'7C;WzZϻ[²jj6pԕ;S$\U2˫F/`nAݬ]Nsr]Ԣw+Ӌ]=@R*uA:"jFS8uC,AS}!чg)ԢXiJ?jACAz%_+!KY6qxh7\Hs C^-U EZi=[_̄3(W9<b8;ջF+C)l}xJEod6RoNVbH-D]n.=겗׈u;6Xm~Ⱥ1gpmO @,)&F ac dُ=_x\ݺ^T֎@x/6ފmi1)>ٍS~witϬx=2L9}[c6_+{[k^]GmMQ%vpqūɈo-cdрb4>!>Wa!*'e$Wr;psw} 2G͉rVx| ]E7Gml񼷕?m|5ɢa~!>ߊw *�\;k!'{[VGhۋ>-|`?Blњĝat,-\,ErVh[X ¶xD6i%?iI0hjs6LX] OIr/`yo(mpy/TL/VO7Ӷ+nZQ휸" :dpXSú(Xk?ߋndpvG/[7 65L)Σ%Y|,^V0`Mϳuek!_}00Bz!M0Lj'_Vw[ر>e޳՝}۶;̼ӬwaPQm )KJ3_>t*ͮeq. S[םU.] %ҧ+ gKݯjm,uAKޛh6ː-E*˫;)0Wz{7Now)IfBt+kaC~iM*pqWX{]]Guf >YyU ]Ut [ϰkB[UBi9UMsQۛX;Rێ 0W8=| X*%? ǡi<=p#=ma?zr>n6wyt??.nmnF*,ngM{yX6A: vy𠾮Muc2#gԷ'8~5S%E׵Av�NC%.0[L쩶#ؚq:K?E M/<. \K+. y2 'زRN׽+q<rq\$de! -He<ϑ \TRM: ]DVUzm-ws;ې#^"E/Ώ\E񭘰L~%y[)ZNX{7u1qpz R/!n?c^"`?r? HیkK33wd5%0Ɛ& 'u^!B[(C)la 'Xaޑ5 ^m;76I<^ (dMZ3ޠ+lVѼKxF%_M]&J^Ŀwjggmdm IaWS?a40~;' ![ޑmWUm$u;�X&jF!-xIm]uxi\{5kZ+AΎlWצ+mvJk۲c=H]kӨ/`ܸv1ތP+YbF,PW'{Iw&hȮc{Y|6$#9{Ӷj#Y^B ,O*›`w&r̾#D?BW7�ylɟE",z1\m2 jmShar  4axǎ▸pq#"%J4d1b,ǻ|0W5tYL^Bld}ߓKq\Ϭ>Bpp66Up S1w^k"n/Ce\ծp|:<=~\5m) D`wѢ\AXGz^ZԱŌscwiiꀊg wx5la +�m/Qxv:dsIh<JMq} ,Z#\p;wɭGֵ [U񺴌qZ9$QYe8`߆цt9v,p߃āx *ZRf5uGߋY$XO/?506Ŝ]D׫kǣr&f]E"b [Hek!~xXGIL/{h53[P]%oCFWS 8UK !&{o쿾:D<OW/ʼ춿CMald :i^ mF6uxKJ<A"f<ϼ6ٽkL΁RU1eUrBhqU@joz1ؠTc}f3[M{4†ğ84@ W7:>MNpjMk[טs)!dhW=qL5~�_N?vه6ߓk>y͑-ge&@j4 ċ[@0P0枳zN}ln?mmS~6\8dŎ*[]V> PpnC۸6xcWD|9Иoy=2KH>lF 1 ?ә~r(\)>GWQ Րzrek33by&tuhҞ"eѩ߮iz,d-OzGyUCR7k3t̘Oė y7:9d}H.Y ,8,ɠuqv;r6(]+[&LꣵC  󡫨ޛH]a- �L=վ733 0|00IyaBAh @chAl1(RܔsnmOﭪ{rO]%0\f>qG&6mD3Gy+v 73+ly.Ijaw%7GŅǽit Q--. t[FsoWA> $LZMi w4!O3Ov\뛲=>UEǷ`黗 blK<? ٕ܂nqcY#FKr!wZhvNV7T,3 _.O=$M ݹ'tq6ۉżp0S9&Ul*'GzJIJd> ġjer`%t^RPgV/jŀ^YX#ɏg"eM߇F~oŻ͘|֜.F Ձ4̮2ť&q}+gs#ƪŀlgrn6/=ŅX)[l"aMFI<R8/O&Ysw%ğ~SvX\S@mp͏9\x<Lc 9x5Z.lǞ3{y>(XR%wG`Nފrt*wOW| O N):?A:i%"NxZsۮmX/&io7B `폈׋+ַ*ǕʉHsJ=\>% quZ_)׮)䝕xRHMc,ŮǓwҶ9<vLYrl+MPv87r[Oo5F#;J>=7?]6s[;\;Ņ=tN*RZv ]>f.JTNJ}b&Q2>, hڀmcE Y|q|ad҄kN_y5(N)@NӥwŅˍb,VFyTz_6@/{E]vnu DK6&k3/Y8/0 GiǶ0Fbvv|v#oFF㵙cnWNJoǟLvܜ&`EZr4smBP *) !PߟoGK'鈵hFp&�~8#eƃ猪}UI<?ض{$_tbc S �LV*q|;Wo$b2Fe)te˹JnMgV,^ɛ̅<͗÷ %ӤIقUF^U7*i~(oU3k77@ HtJ[M^zݾA4ʨ71e)]fW؎3ONnqL}Ҋ5Ns~bz<ûܽe%'myrx؄m7[Ԟ4 [gQQhs4rĪiig2[v'Ycc]ol&oz O6G8DylY:7FL+^=>$SVk4tW,ȩVU>8U%wј mY<>ti'{|ne0ddxrs-R]XS`S7@6^)OT{So jo4]\LDEh<yI9~dWܴF~"O^s%(T=kiN^~Xf'W'3Fk@:/a#LØmRj| uJmxW{Ml5k&Ef4@X8\dAee`缂1g;bV{Ԟs~Xnv[{T<q#F jgA^7$r�L̊g2&XI�}'LodyƆܘ_>Tn͙:,yKlJO;I0ɕ}f8a23q9! tx S6^xH"nȺTkB9;sK>./Y:.? h.5a`<`'sHR�pY4?j6Z5�Jr[12o-˝>ގ3,f<aZи򚘭 [COgZJEPArH>noCȧbv4 ttu*ʘ:=kر;uXᲓnP[ɕ#4`:V8(Clji}#S!tҼpC3>)]rZgk*q�f*Uns30d_׽2B;x9vݱq�,<!2סOL8} jyrMjZ\e]ΝmzAc7o�NZƦp[F!><z51u*^OίwW88`* u|%nsknPI *!5vRpdTgP+Ln\g%#P >H<*\:-۠N3rEmPGi�dAE0dGu}NRT,zA-2+';ԅ*Ȱ֠nMMP[<(l#FTmcPw'<n]o{A0KO$uNy~z'Ze1{sKEw+ɉ+ԓOD+I.uPk T 9zÔn]*T f&p{jc*71Ǻ̜Mfs5 {6xL@Efn=P_I>5ve0BM<n᥍.VG$ r䓰q~4[XCm6!P#$!rG]|9\v#ٶedS쌟>f=8`w^3ճWϻ@#h�a<QХƻ+)lyVq}wܵ!=|]&7ϼ^O'<ύ^x>x6rq^&RNﴴN<w7:/n=8&mmz7v{\x0gc^֟wow9i7D9avֲϤ/Oz>^ʭ7<.rs#]qb)Lw)FkN[HO;nU&s֤]G+0G']3-D [/q/+Ԣz0~Mtwi.'gW4o *&fS:u=Qw= H:AvFfEy�ewH8�|;mfnf@FJ׳tFiDi4`)Б;T*w'TF*1\)l % U*-v9>�;&us;'TT<^f8jvD7 *#PN,88j uO\Aը$'<A*J6bK_xކϝ?x>ѡ?:6)^اӍ<8D>lRƔצNgƷ{?s&?Om]G:~2ۋf;cfQXyB1OrQ@d̓i2Nu8f٤iƶf>\D0zgsFw֡8$Z[Ӊ35qҳ,ccȤݪ >ݪN�$99 dֹ۬02‰�#$5$.eq,FNzC[ k菥I;W(mR/ؼ Mz}y^3?}..H#"J-Bdd__{*DF+R:^hlv6rӒ9X,%?w$s}bk{F?B)tWuWkO j/H(І%�P۷s?,>/z,U򉭏NT477~Lc"41x!t5t>\R/G_V'X(a(A8pdqI,GЎ#0BI[[0Du FRq똆-/g/;6gYDB$,(UZl &A9z\W^k.+8-AUxʣŋE>m�ZCFpK]Ø>2We>�F+Pk[xTL_<x߀&٩[=v&&=i/$ɹ-R*Sp\~z8=_F=ϣ0M<.4.-p4t02fgE8? wڙ<h=!گ3@<iK=!ݡ3CyL1,M ]so&yïM.u"1͍xlNG,mVt@E ;�i跽O4Y,@854n{hzE [:iU h7nغ/ZZz̗NmezoEN7ǯ.,#Ai=re`~) 0�#onecIމV ! ϜL ?$ݽHôE=7sIyǜ )SDM&m_-I[ov#Mn7KNIn9cty3Zh| `KN jf7ll:E!L ^HΘ9169]\[t6A:A\wM;BCu hz~t(=Xb:/umZ7~(KVG؎veb߇C7 usXxxHC+FHBh5Ax2fD $"֡ slJA53lKw){ͻd٤S\7u ?wZ�m'�u lnN~OvԭG*�+u4hh� [AF4dnvM>Juݰn~F5nȌ@GЈܬX=W.ԝ]T,`ǯyI7Et]hmw8Oqѱ2][@ذr3#y@ FU8Zq3 h[Ť51[^w64?Fp2GKQ!}ȦgAppo@)s&+t;~akx}[H+9HCl4ԍ֊J?Z=Q^g Թ0GtvQ^zhОSPk, =wh3rCS.ܕ`{tϤPX:Ўq`Jw3hA(t?тdփSҩ6NUH{wړMGtk`8{8?>×�C{5[lWߏ}mSKS``vhcc5kv Ƕ?E{\[޾aW}H^j8QNS9Jt>\>!HC6t>\>�3t>\#ut>\>DER{L0I3=G &/g(}=fL' |�퓌>QޤwQSM>U@zm�/@)w*Q.<Uv[ Tਗ਼KykvU fq>B >#1NiwvCW>y[ߩO ]~SUg T -/1䋿4D3\T{aprR�rE,1 vbf@iw]Ǘ2b%[QrėYtPT[ %2Gk�/M8;{@ ]/wӌ B5y9+ �o7gkUx}tWOт&A S1|sƥMtz'txw^݄%\VV/p4V~0& ZhEK Z>ivEv1ii;=)wǐ'T"R:qѓ(wƝ=3}^GtWAwB x ݩ gX.T+:R o Y}{`]PkqAtG~4q۴/U.af[m)K7B[MCpiY/Ai }}k�Lw ?{pO#/T]we1tu2I(zR} #A~ El3Nzn/F_zo Rh?UͦbYHpBa_~ڂz� Zo [ D!^:X E%XkkG?AID<- L5fUjec] {u:M)~?{[ .w0.g"MdV[}-ܴ l~98gi;#Xf^AdE/;zgk̼vNJڀ3}Ltfe=O$@f- ScyۙzSf٩aN]0vz  "!>9uAB/;R-߯ [h-U4;#P)SwHzG6uc07a~@l-zb ߍhm9#C=]xZ'\^ԧICFJ:Xtw:KĦcCޙ0Ħ{?/OZ&/@Yp5@I@s{i^N-I>R 4I>rޗmAHdd1om I@d`h#^  ؏v4fS^cǤ<W6<W 'm`IymI1)E|Iy{Iy:>ѿs+4I~ocmK/ŏ(ּ3fbg3<' ^=$v�E0v?+"!ݲҼY{Nƣn�uNZ_kkΟgK󙗉By{N> gK\U^,(%<yaOcwN){FavG7mmdi$M]Fk x=96=]f<2wJ'j%RPaD˄<Byh#m$vǦ=&}hYz=J;K1\):ܸKlطFړJGI}j^P7-я 11>@ 9:h|]kRg˒j띓v\^pxhs1?:�s"O՛>gybo[`fzn(mmz>^/aDWStOk7MN <B{. ~uFPOڧ[Xe~p^j8cNھO3"SoXb[V_ۤ6?zO죧٠ =$ )!ľ*f`v&& %/Tb[V>>  jh}nVz=a}nXblHs3iGo? (m ] %װiA'5Օ8Xb[SnRg}ΦJĤH%yal`0}n Ddq~q>a:/sb[Ħ>$eQ>ܲ">gVF{b_{/>^ܠ:݂/k?ӓ}iK}]O?NkwBL:A{I:u9c"֑{ :UnRST:Uuɋؐnu0OPVH!))^Bz8;+>GM ?u s!:}GN}gnOL,*m4ots;`N_Zj�i)@qS6 n&gRD&5Zx&S1\{.FƈIBS,%zp4`|q/ ւ|o/`$!@"G=m~PD_3k3pV}8ֹpv ;mVl߭~[G:B\)f9gq._dI]PD%Fv eegz)ڲ7Ra|F#por]'uP).r4^1Z ?HH|熼b 7Qh_5gq<wIi+.G_v_{dJ͇Mr_D;ܿHܨ,PG0.ەuns~_WQMٝh 4#fis�tHv~><l_vęыuS'WK@D3׆WЩ!ܠT"8H%h:,FHѴ@Tl¸Nf ~i {z$Recg#&f⭓czTs]Ru쓻L7?twG.1FM˻-aIIn<0Bʻ=0̎60IWm[h_:vnu[ n1X2!Ugl!Y+F[ŹYB_u-p|\ّƋE9뿢 M-3=XQ-�M-x˲P23Ⱗُ7'^~YOTDhpW^G}rEή:ǭyGe<6wtu1|hЇ[NDdKP蘰Z<̫9Qje#zUR=u{7vJ;eݤDLQ9x9>GǗ8aS5=.̴v8/ 0bN*:ص|ZCf R.<B_UfrUSA1QSv`NJa-Xzሇ7E[A$�c:(0x t?8<h4oTWa`~}P~ml8HWxvNJAmӑN'@ "7S̈:H؈MN7i]}{Z{kii�iG47&|n:h5Jf.?Ld!8kP&]/{ڐठ>tN/oQMN"nyi.Wh'\JǤ@ݪ]}O-VnSԳO6me'*t.} ͤZtPQ{hefl.Zv9inҖcڲ=F|DM9%Z7SKI kGJL{#`AeJ['ݦ$]#{˔Ġ4A9$&훒)h1EiB'B qXa:0R+tHBWs.g6BBwXOO6 SƲ끇U'wimx[hoO@jEx?$1zUiA{vNð><;yࡿ4o'}ic"tB]x68K8K#އtw琈zo0ya<#V�R C#Hq=Y]^<îĴ<O;t{?п7f CgjÈk"fg@vX<t n:~i1k`pࡿL#68C뻏<8swzK%q9пT{Iv C0ÎMH~b><tX?gQO;xߊIl=0'&@;'g6U1;CONJGѴ<N #v NCvz?пX<top[=[S#C3x:Z&u!|߁b}xiA%^N; {;-(=_bW9_b<8Miţ=>yqLCzO;tFpaǔ_v假Jq+2.% _f\}ԙ`7bHa6'kvi,֥9V6GknZC2tզ.Mu= lfq8q:doeSTǬѕم4{\= |z<{wnLRs^ϯyi~ï1Q=oϷG.~z)+Y~vg=VƪkŅ⻑ͥcc.\ǚ(Hco#%KRMgwvӉay71OƔKybHkVT:oGf^vb&Kꈑ.l? |jԝPVS55wux;6_^t/20fvaU' Dc={=;̔95zw9|FkIXŀ!9+oo1K[KOa$z߳9HmEk'N*jrd>2`3˩]/0s\U>vvEclVƌ΃&Wq[۫%JU^Kcq̊M]17^4/6Fl0-I g 3IRvԄb!mVF\Vh$ɱr&'kFW nH7}Tn2•ynTϘְ:I΍W+0m5MNd 2Q*xxV6A7~~Hj\YQD$˳!_"]g/p6v/6vHh;9O`3T\<%nM B0S;ߥ&soK [1ӧPkcv4ūi&ڋ8md^|YmTNMrqs'ze2<0mmj9DCQ@1??X]sx_K 4u/A͡d킬ax1Q8!7FwyFvtq2w9;sq1A'{_"/W&~v@KLz8O42ƍ?{6e~E#8?޿0L, tj&8IVfKX&`E 4QEh0%rrF0T) Ј>I̤K)*dٙw%?ܙsva9b՚Ff ]ơ ZFj+ iX/Y&]9\?ԕWML{R7Rȍ/ ZqMX!ѹ%p1aR722;Wa.$-Y)-_e#b&M̶e*w81m KS)~|ꈅi.&}4ݓ!V wqbkG'􃡹 ۇtىɍB8b’c&yDH,!h8 6!Bv<dbQڤ_ؼNH%2.GshSnZ$Eup.Vlj+Gڰ-ߛz%p#"a $f\z~J/Ϊbd<D|31ܚǭmpjG7H؄[m.mv"�Ʒ~6dh <cEf8sIǤy#> dxN\*yb쏲Mf`_,lf&n=S뮇xi&Yd>9i/ŌX;0nLk΢F-&Y:N|t )VL2sJ1NZ)|7M9?3  W"^hʋ)^h3SZд~tz\-1oO-mB'2MӰK b @a/i[c]6uƽ*#ʴJLLwV*OYKĺ1*-#rZcf M-9blLZ9M0'e#k.R[`%g/k24{qxjA9YٺE* U\\ʚs0QJI5z.;&rH inDۙtkOW<I6mM'v쎰O.cs5gjgq[Sibu ^ZeXm/Dz=:%W_ܕ r81-36^7&r2uμ!9C͔g)-D2<왙FsdO ,MaH5N=1]->?|A{^쿤5=&MZŏNꒆݪ7r\f2;4i~@M mnL7U bVq2@mЄZTn FS@ d1!?׻Fsysu0Xvl4xzxxer[E,6./C%I<)YP3Nlj~ZF7gŷ,!% D 2avzx. 'maH4-6Rbeya xw^zY \U̎GUnK^KB"EPհ{_Ƈӫd .ãE%3cpbcdu8q^sé9\ٯO>G.vJNJrʹ?RF')WP\TuSϐ"_BҋNG5etx}1TzZQ ؾE18haƸQM^X7`^kyT7^Tf&:4!(x_''A<&C6Wɒ"P\2$&5 heZI< @# w9ux !NZ1S^=L씧K;N :wPtkO0 ܤYKd|QPJy~]\w>kPm&qZu}F5B_: >ϰ qRiOYu:֯.҆qHCq?~{N-;&g^ԍa!Lly+m@^3Ig ˴ݚNi͝4M8qd}kIQB"$1R]c@g)UcnnQNԅpQ8Lf2 }hVY2r=9Hdbh~e '5) @vL^u`ӏL;-P!b] xbb{J5kr *t5g2܌infak6h,'6gwj%pb8҆CnaydJkZ�hoFuJoak`hNri9Ījͺ C= ɭg>vyj{\ ZkÆqJZV+ژ;4yZLf~nV>n#B;yDD׍yc`j=%(fK{<yI_ <h^ͩM}GL6|;q 6~Qkv?ZK Ǥ?,Ϯ\4i{Ѳ5}qس`;9BQ{ Vuf?6Iՙi+n=8צb{n֣[V<oڊ׶o_#1SK'9MyIR|>zG3N"_-1Yh4~Ť] FR/DIe,?CaRheJirm 27.X?^4|Rh(Е,gLeA,+ .QKtz}!eI/5M)9IkvAH a[ U4^jZN*�G֚`cDMgLjRڙr;Sgky){4nۻ7#�y+ZaBΗBxZ&xĵ_]MnP*aJ4T$4N{O9Jo+E}4LZK@Wthnpz ho M ,[+=\V=yDW7/57῜(*r<&FCer͗C,_YY(ekP q'vcf(ybҲbKxg~f2o(ܑ@s@ (&*7b 7J~h#s)6͉* QrCWqd0Z/ϱ/ '>p#Oz~ '~곟O ~3؇GO}?I ۇ'R3G>񙨴T{/}Wt}~O,(n?}t}w,O?~W]?ٟć`>_/w33ӆO¿?G?ƿ룟G?#_ CG|/Wp'p>o~P?3|՟|4~_wÜ?_܉,͗�᷾O~׾'G_08?�+!L& `B0!L& `B0!L& `B0!+0#nvi`޳CN}7ޗ{tHG>?Yӽ~*v˿p,pwx?//|`窿?8?o/gёz(ON?-clΟ|w?Ŧ|𱿫>wptGД_|ϾM_~W.?{_|KG?o篾Wv;}~_?z;y:l?f_џG]E"[f}G{_Oi󟢃>|Wٯo/iaU3|__/V2t 1Ó/_:*L ޲K_΂:s? G$?#L\f]ż[fhB6~?~茷ÏO~S~ӟ*޲§?1}m@ :< XXGW#or b j6뭗F3f55=E0Ckb_Q4Dz+Q*%$ lxnOCfY*y!UyeVTOˢ$) }9E—I /i-AW `F7dTAF*cTF(uV8w}rYi< <g�&5)A)ZwaVT j4ƤU|{5 iIy[soyhwIJ OW/xUH}</ /piciW(<Դ(Ȝ~<#I|WaU,'u6oMO�?sk459qP 3*l B408RH"sV"c5ZT[VyhUn.^&KWQxeXVZKz%V1ecxLZrivHC.Fsg*k8՝ԛZ_C 3t{>/DeRZq�̢VFbaTq05h=³ieD,ENWDfS YVXЯ(ryҌFU؃|Zd(ˆf+dEf*pBXojQ�2l?Y [M"v`U9p o!*oU2F`GDP̲�K< j>ÀdJD#0$Qpp*v2L ćɊ�cXw,# !,)&f(e^08v,Q%iN% ݓ`P15`Xdx(2̸$rVS-eX O\R5l'Ud @b�TF2ˀ$35p^E'D)3) x,"B{`3K 2J[h#e"K8p*oVqrQx f,/+w$EIddEE5vI`-r�((kA0cQVW8d}0&򸰲((JBb/< %FCBp]آSX1T�~7_[CۏwqB(a@x1Ǘ83eϫjȗ%J g恎Ȍ,pШ Iy5_7/7旆X7zi<\ i7.kP?r(6b^7&7UB-|eH�Uv l|8 b �<+, s8Ӫˀt@| 82`5_۔%0Y*gKfdnzm4kaDy \2]IZGImwO;PAC H!"꡼%fN6d@̲|MU74`5%U m dQer*Xd贠hDBuP x*eFīD1@$^< :bD l$EH8Hj(F3*72>W(K(L6PUIUҌ'e ֞c iT UPb2 1#3JSfEF{y{ V8C@e $+2 n8T`CAHPa)}A 9\5QzCTaqV*s+ *bU2< (ļ/l _H #BePiEӯH')1*fŭo�@X_�Zf b9l dN'm#ȜBHK:hTAu"%v%Q_e؉Wi$DDDIjDbɊ(XyI0A Xˢ+ |)+E.h~<-iki 6wVuw,0{}yL7i#n.ƚy,RK56( `Df~>\56.&~xSo@wHphWWqV /d/d rn+_Yxh.5t_\k\b'oط10$mD'_-P}p"8ԟEd�,IUɬ&p Kz "3Di6Kh &x 24D+Y@1(,cAͣj@ V*&( (C_`�s-C~vPݽ)N $JT�\VֺR =<+IT%£ƒ؂~W8-nC $o5Zz�/Qot ~s }0;n㉜VTv@`oJtqdYvѬKce81U'" 2um]a1;Ʀ ^)̥~Mc,2| )jT57 :"#ښbQ~Qҝ-Ewx(J;@-=6/K +/*DN7Dk"zۇѲ"vQɩ6"C6^6Xͨ`8E%[-=>^[we[-` X#]UǨ$8YXͨ ʣ@_?6Z왈Uje:IS J2U!]ĪDX*4Ȳ%Ypz!#K$Kl5'Y�qdVaSl8( [KMTF`U<DT`w*X�#~` "Fv2Wpf98@BVU^*`@o)0X,Ԫ�XRЩMϬ$юe#|%8D @%V �u@b!WxD�8 "V^s_ 8U<1qdA*H2zjm <z@Q4O!kE,$uEH6~AfP!U Ă-X�γA`9̩)(THhFb{emH @I8 J�hHE G k@J.}a-G*+HਇbF‡**`A oaM(0D#zoEʺąUx*-`+bBGe4BW�$"Uf oa H4s$L%e¹ k ;RB8<@3#b +Z1*虦rb@HO,. 1+WQoĚ~ ѓ)Z,[ *Ö`e(jelXX;5UCdDևpV$2$nnl .8[]vԽق ah Dl$A"rL,氿<f�;Uw"DҪUa)@~z1r`Z]>/ P/ =Kwh-N`RjE(e$e٪@F>:I$ Ɍ01^w_,31b3,$1 rzpA:dh"y:2-RNr$OAȊ2 1]U pD3Өjp@7贷'X*2TTKJɲ! z%i؂2"?vt$f1n�7 ^5Q`D4QI@Ҍb.'B֣yQM0hwDleQ45t)a&(DlB46~FU|V<ϣF@E# 8 i(X ? 7d8x=H(;6DxRQOl$(N^ #J� >)*8^9^f(ij 1 e"/"J{ *C_Bi=I¤*?IS5%Io* Uq%`eD,Nj((<)DQy0 [\բ`B)ƭjQtb_v쨁fGX# #UI HbJDp HRQ"_.yQ2]zׅP^yb7C՛ks^w<0%_/7*<uA hϿe,Ľ׊Z<]RPXem!EG lʈfYDgTG$A;U^4Zh-[UrVT& XYFDԬF204OMZ? ]ۂrsjCCNe=_L) Y 9}@z]zw{hdNxwK,"�s/u|ؾC(g~z^57O0vs `DQΰ goi&Gx@sp<,jRKn&5R=/#Tk c.!gy1�U )`fc5�fS%ý.-(XlethQg )Py{YtYzHfFR>@I0镘ɬH1D7B e[mF-XOjI .J$tȪG 'Ĝ!Y@/a7)ZGOL"+OAު(7悠|WˢUPʄ\TJ29(2,2W;c,3*_$gzMLz ^ f4M**jZbCDҳ!o238ͧ\t:K_s(rY7c(aՈLzEp#RZBj)FBG}0*>$D@-aQt12 $ДA'UB[b 0@$!-+i`U 7ʚ_,;zErGH 'I 6t/Q6frUUΦM)'UL-%V:IH2`RHN`"DIATV�&~yFXl"đL9!/KBa  yt˘l.0`+J+)tY0$+FLY6.̠:2;`BrU@kHf))Iւ!I!42"Z|@0m<<4G4$-Jd1*1| B&B3؄@_hq[eUâ2+U%+KWLBu+XPj6}} k]7묉t&"m2+a0+A 5|Z&()�0Z+ʊ7aԐ*I+ffLl#jފC/ 2@]1C1S&z"2(+^cD"!Hu,2tG A*yCH4B V̆&|D# 2/fѾ6@=,9-\e 2Ћ iҋFR'@kDW0S I�] $" lOy"̊B| R!֨1*I^9])H � (@ } u(a#�"*QET$@2^VW%ⳖC,h}$-GY,;241=$aQE"hS]{9 sEuY76jUG0 z;ٖF~:WÖ2:@I[f"@k4P T󦨚~YL6 2 w,P9F-cQW9XqN%ǎB VlcFM6.Bu/YEʒeEIT,(/ BU9I=)˥8lbP6`E(/y~$.Z0#0hP5�D|>  ,0�$f7_j4S)[_5;UPѣc1Ժ~"K ccr ݇ endstream endobj 149 0 obj [/ICCBased 174 0 R] endobj 5 0 obj <</Intent 108 0 R/Name(Layer 1)/Type/OCG/Usage 109 0 R>> endobj 6 0 obj <</Intent 110 0 R/Name(Layer 2)/Type/OCG/Usage 111 0 R>> endobj 110 0 obj [/View/Design] endobj 111 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 14.0)/Subtype/Artwork>>>> endobj 108 0 obj [/View/Design] endobj 109 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 14.0)/Subtype/Artwork>>>> endobj 121 0 obj [120 0 R] endobj 231 0 obj <</CreationDate(D:20091123234551+03'00')/Creator(Adobe Illustrator CS4)/ModDate(D:20091126015300+02'00')/Producer(Adobe PDF library 9.00)/Title(v4_3)>> endobj xref 0 232 0000000004 65535 f 0000000016 00000 n 0000000174 00000 n 0000042784 00000 n 0000000008 00000 f 0000356296 00000 n 0000356368 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000356558 00000 n 0000356590 00000 n 0000356440 00000 n 0000356472 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000068464 00000 n 0000356676 00000 n 0000042837 00000 n 0000043488 00000 n 0000044387 00000 n 0000069392 00000 n 0000055904 00000 n 0000068656 00000 n 0000060385 00000 n 0000068771 00000 n 0000068896 00000 n 0000069020 00000 n 0000069144 00000 n 0000069268 00000 n 0000067167 00000 n 0000067313 00000 n 0000045286 00000 n 0000045612 00000 n 0000046165 00000 n 0000047533 00000 n 0000048898 00000 n 0000049830 00000 n 0000050885 00000 n 0000051441 00000 n 0000051999 00000 n 0000053292 00000 n 0000054546 00000 n 0000055119 00000 n 0000044451 00000 n 0000356259 00000 n 0000044721 00000 n 0000044771 00000 n 0000063567 00000 n 0000063890 00000 n 0000065250 00000 n 0000063631 00000 n 0000062156 00000 n 0000062590 00000 n 0000062220 00000 n 0000062092 00000 n 0000062028 00000 n 0000061964 00000 n 0000061900 00000 n 0000061836 00000 n 0000060592 00000 n 0000061228 00000 n 0000061292 00000 n 0000055758 00000 n 0000061164 00000 n 0000061100 00000 n 0000060528 00000 n 0000055694 00000 n 0000059153 00000 n 0000055941 00000 n 0000056503 00000 n 0000056112 00000 n 0000056203 00000 n 0000056298 00000 n 0000056393 00000 n 0000059270 00000 n 0000059325 00000 n 0000059622 00000 n 0000059697 00000 n 0000060499 00000 n 0000059843 00000 n 0000059872 00000 n 0000060043 00000 n 0000060128 00000 n 0000060217 00000 n 0000060301 00000 n 0000060738 00000 n 0000060854 00000 n 0000060975 00000 n 0000061409 00000 n 0000061464 00000 n 0000061761 00000 n 0000062374 00000 n 0000062495 00000 n 0000062707 00000 n 0000062762 00000 n 0000063058 00000 n 0000063133 00000 n 0000063287 00000 n 0000063408 00000 n 0000063483 00000 n 0000063936 00000 n 0000065160 00000 n 0000065197 00000 n 0000065366 00000 n 0000065432 00000 n 0000065463 00000 n 0000065755 00000 n 0000067054 00000 n 0000065830 00000 n 0000068114 00000 n 0000067459 00000 n 0000067630 00000 n 0000067751 00000 n 0000067872 00000 n 0000067993 00000 n 0000068235 00000 n 0000068351 00000 n 0000068538 00000 n 0000068570 00000 n 0000069468 00000 n 0000069715 00000 n 0000070958 00000 n 0000098299 00000 n 0000163889 00000 n 0000229479 00000 n 0000295069 00000 n 0000356703 00000 n trailer <</Size 232/Root 1 0 R/Info 231 0 R/ID[<1F0D587CBC58A649A3D8E2D8EAF9C97C><7592BE616E403549899ECDF72B80D9A7>]>> startxref 356872 %%EOF ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017472� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/v4_6.png��������������������������������������������������0000644�0001750�0000144�00000017233�15104114162�020764� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���e���^���:ڡ��� pHYs�� �� ����tEXtSoftware�Adobe ImageReadyqe<��(IDATx]yl}f#x߷(uٖhۉlNa$ îhu.?i uAHRmMq⤎8,[m]EEJ<^3-I)p۷;;|k~3$]+7[+IbI["YyR�j@+.A4b�"EQ/*AF DcwS|hW'EVMkHȤU dk~ P|lV_j^kkCq$>ľ gM*ީ"Nk=slOj7  %b tb"g>R 5BDmAD97Zvٰcl^:ϰ0(+b1V_9WŁuS߶c}A0yc BEDhuKZ/Ɛ{g@cJB Xbh"4�:0THeKu9AM"7޹~!n,, <u?i g751#ߐDS2@0/ĄxIʵ~o�uv/=zM}h  a{ق0@6Qr#&[86)Bzk D=G<ʀ0GTYoB#Hi� ==ẕa{ Ev]/$F�Qm4,78ydEwjٔSݪ4`\#}i}1}1_>/kz"lo:>.c4ow~ns\/QwISf{v/ElmCSnSPJ t|<]IT9X�zٴB>�^Z\n}N:Hq_Y4۩|/M}&]n:f5!衺3Ise=C:c!ljb2u8hseLWy\g7LvLB}mtq"(SO >ڊd*pv*qc:@_ |L,r5eq,jdP\Bsh+O15ڧhA ڧSBOq`/),ۧI/9Ƭ<r`miL6MKGd&LiWWWe+X̧h Òt)dY1TYҮDf@baS݂ҙ`f]@yRH")Avqz ^5: zK` sseP^^x<juU粐m= Yd9I hkjjPY$W0;.X0<#DuZJ*+,%^}\H^*5( pFВHDO^4QOgP[ʦJ6|J՗̙Phģż8[CCcؼ`jj 'FG0jD-X|�QML�)>QtrtӨ3V u1(ȠXmBV򭾾w67#J)9و$ڄe5dcBD㘒ؓ 3$!H gI\ .  .Ҹܵx1 7a 59 8Ő{ &@ !TX;TU."Kh7MMxYm]@7ޓ*++=>1NOȀ qMOi)E|?RA?6s7/Wze52XpZZZ@COHӄ$vt$1C@H1d(Qb<+2zSسMF0˺mxnՋ{;PIduʢD3 E)iMT TSyݳ eeek3 n͜1<?4ic) q2$H?Z$PՅi_{jfLMꮮ.<@3ƔFe*{8cxCKoNfR>Vmʠӵ&wz0TWWs.c )t0,R Gr~ˍޭ&E5cƸKFmv7 ?$.;7g S|-6Ck]ˍDoCœUoQ�"YLݡD s{;:ր8K/k|OY؉`YG;э�М�Y^~7מEooێ[p eXsÂ3x` U99tWͲJ VP3hk*s.SJxSߘ6`ao޼AǙ\lB6Q圉|Չ8>Pc{#1zӊv2JWeD(EykS k qlw8c:ouHPVw3ggxbdbbg/cl)x3re F\Jo@ɞ+_`9+ańYZzNNqܽ35ZQv Gcj"J(V]Icw<eM�̸x"1I6 [XΣ&-CAd!B];~~ ÃMxyt :\wvNÛ[7xi;�J Yvi6#Rҧ (OV~tpYCs-46yͫ90n"8}b\Oe',zڎ!^R =[՘S֙pGW :ZY_ҁ~k1ZhYX%xbs9kqzҪ_{Fk-uBN)"/جćDݫWs!Vʔ)Rβ+%GX  :HȀ9:ق؁wN ؽEd*2 P9 X'%I^y 80=R &g/Y3!?=?g(Y= u6bhh(0؍Q ]4c˽rs`ꉝNbdǎ#`r+<4!0BGr [L26@e 7_kz-20h^%Óry$5P3kc^C#8EٶM 7[ɮHŐ�/,z� QKRƸX1&Df;#1$gM)wpNmii W)"K@B8J_zrys8Vq Op:]UTT`WˌK,}8�YǂOWH*Euޠ\kxKdZT&XfeJ Xe׷p%C\`ٰMs=7 oE\bM$r|{Ǘ*PPG{Ch$`DE,]`_(@cGp%`\CՓ.S3{TemPEQͷ##¤U� Gw5FKaDAA"^^b{!>L7ZpӶya㗺% t]l ;`H9^xU1h4L&q.IBMjoH�! w:i[D#,R9ǴMѣڔ"na28n8"Ru<r uzgʁPiS`PQ5"Ǻ�,7>"%$Hq284ePYF#j &z$kPJh :G#~F W/6RKF;W7ZiXHS/^("Q@fxv AS�rB�!",8JdMGMJI?əfOF*u "S𵒨k똵P5/:A�LS:1#(YeT)Y*$�6&TKB&3ӕ]Uz P,|]|9,+)'eb:H$nchr{TKX] H!oRW O=u1&v\:p!r#tCdɭc9dD! q& g"w6zG4B[IH2T0ÇMҴYb-[<YN*qޔvƆ,kX>U,^.|*%; @M1j;H>QF TMZ'+j+r>G (6cPJiEUsŘ'Qkӯsdp|# Q!>C\E9LIm41\`YؽJ?y1"/H`Q]H9 aڂD$7[*ScS<5m8~r A@.dZk6(%Z_ħG"TE}:FexCX3%*^!~$ ;;qKRgI(+P+iΪ i9b8f^Rŗ) Uc\y.T7EjE|ʍ߸ׂSMG`c! nȳQy9γb>|.˦W@.{�\UV34ZWȵ> lcI&RGT9KwLD*af}`mG`a[7m?s'ӕR@j̚jRb[ux3 /z@X7{k 2yR4$S1Deα9wL%JvdʝH; y:23)S1 J1yX??E--M, Qdmq\/,?�\U2-sxyB ~E1y!q)8I ,$ }A M]E1k-KB Y9�)^1ჃחzOλ3;jej1v~²Db''.⌔RQ2ROv~bbj� :�s }Ѣ|w} )GkߺRY[G$Sv~[Z�C\`b'(:I h%{F- }F 뾾ˑ3ͶO$ dV9lQ6{QNJz?iL|z%?0cH: +S DA�3{vƭJD_D/&JdKV"^溨vs6@YA霔#3xwZ*s1J(/׻ydpӉLF#7/v֛'c߸i+<xΘt^c()'A/bJaBě-E> Ea '&Mb]i cD/9oVjm"tGK x4Pjc5{#7KE&|nJf +,af|f1ߔ?y ^Xg8H .YaoT3,zuq;ESz'؂uQer86)ĬY+c�1ux!YG˾gBGuy2)rWpF ]JFJЭn %00vVai[D)%'K|D#b)YvO5`b)P@2晱ěu08;P[O-`\c]-iM,w|p뽈sxrpŵu� ?\D6pػq|z|w)Cb%y%5oG<TQ{-g,wB|! g_iuhVûuG; qV.ɱ :➮)JOQ]]xEfk>wkڒA7z:H96ۄU=/_?g>P93^{SzŁ c"oMsןC,}ծe=_B˯ /T]H$st36>T9vo9>}  Xt5c},X|Yu=έtY* 1:iE+]Yu-7(d{~XBȐ)|o_} ,V!gi~x`2U +_Fz6)V*col>[}=6Β:�!P6)3O-jH ߩb:Gf膺0!Uys]+$vsI)*+7&{BD) qDȽP4\|vlm:vkb;_}3ؙ {+/B4L-z MJ,,wN{脅6�ȉs-_"+`,F"@K2|@?\SPzeճLMjq,@Q� ѳr2V[e'jm^ܛ~8>'HPR\?j ? <] \͵E7sK⋷(:B) \n|٤䋭)Wrsk- w-a.3h>co^#ҽ"<^Ua w6$ϝ J(XyBM_dg*AOr_^܀O{|Z&݁UpQ/G$Os,|F_2c(G| R2WUK7♳.m>Qz)==qOnƏNB&ʭ#&, ~3ּN|<g[zZDZJq<ցIҐ [0+:;׿ iS}m&4[j(^j z*�b║fDJkRq롁=nKx"�zn[ lmNQܷ-C_w( ^�Ȳ#P';X .!&@MHe;m[nI↦)llk]ev5h>e7<ܩ8.Ϊlzd޽k*֔r`MxW?oU4p*_?Ϙ?]]zJ�u Qo {{ьNI4}B~g(vt�WjEкֳStDHpA&-QWrfr/\�^:<[{o20:8�kNsyqK (Y{?)&#65�5z  9O;pP}hItI'[n!gb<pa7UBֱZ>``caketK~HR@V aJ> r@ε+\Z\W' 2ٺ1]W EG0<Қ`&-֥]<=ʁ܈ZY3@>[e58ѻ wFbjLxa¶`� ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/v4_5.png��������������������������������������������������0000644�0001750�0000144�00000013343�15104114162�020761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���e���^���:ڡ��� pHYs�� �� ����tEXtSoftware�Adobe ImageReadyqe<��pIDATx t[WOeٲdyQǻ%5{ڐd2PJ,@[Z8sP�sf:90 P 4ӆ6]HC$MqR;݉E}idKO4,=w[wqHCrq%E''{\%{XAo\3W_s&CLt=rx=s>":($.AI35a+ryKfMFM1 )�1{Xqy*+9jDL99I{}v؇z~ H >ߺtOWrݵPRZ.)15텏}<-ڹ) o3}8^8]8g/?/Gzf9[KXT*5|=p⭿O ~> J?-wZWZ6;y0qBǺF B/}T@l@c})-xaaCvKBoVT61LL2c>0d k4d*6^e ] A!b.isͶ;W^ dO̡?8-Z`{ '쮥'?u&C%˷nݺ _qnӘ|ivY?_vXиC2>v+)`YC{B+/Ϻe:t9`յ otҖ\cNrWj/`ȃŲRP&¤ݻwdje/L; JؤVߵs|WYi. M:, ^T,6}7J<LLKGBqE�^Ȅ4444FUR^jSȀdBWs%HT.ciz^j:FVJGNgrƠH!DZvEgjj S.}@0:~Dzz,7ZjdYp'iFJL0W.:/%%%hl8Bk5%MF4aES)-Z$ 1GI&UH*켰7]_׸N�}َ F}]mA}mAL>vY0(рHQYwU$=v| �S{Xز(g"eRK"=Xf{ǩ6{ Ȧ|]5***d ,(DᔖOYpN<qiKɨض5IVkضeL`Ҧ$[92lif *6c =`cC5r"W{/9 >G=ZV41ȴ$(.%K𥻚P_BޕnkFyyyЛv(je!2I vﹳNJ[TQ!L&D5ۛQTT)^0IQZ Z]%(2g?2]dqۇ*w@U_T@(FGd4,G:96c@rrrX=*AxuN |. :j4~'cdנ€%z=x@P98Wy7Zg |ąq`tC`Ӗl3Ra1硳ow=>o㻾F+eVf <م\F]&`ODa>ۏN r1Bs~oo{4Σ͑3~lX-YL(, }_x3LF7l I ^>؉3z0eWE$uq={8\}[6uf*YSc m<WeƖܬCUUUZvOOGpRoD0SnDpZ_<(6UWyՋ%~ϰDUʃ�~P&2ڣ?q6?3])?tYYvnI;+ީgw{05M7g<3#;mSCakHZ犗[ k+SrIBjŞ}b_6===)2rW6د[aD&u<~}v 2ڕ'0{abb"u}rK y\-|W?z1s@2RG/җ7F6uW{e65tԝU(x+PhorChe:ԪoC_t6_] k4ŷԔz/^@27F_MPH.Mjҁ7~Hv*cvc2;MyՓj+5jFi3SVt?ښrUO]u.S7dQlϒ͑-im!\P(iwbiVtb IXө/rrd|/rTv�QUk?<BI.o(c:*)J<ل估 +M1m/o(/02& ??VKk.H-:IYBvlvaAyPWcJwDEVr_8(#9{dU%JD,tD21maA \pczR'e1FF@ <QVjb>>_`r-j:' hd 8QuoD/:JT}$2*+%YfUTM**? ) Hj ,62˟c PUOj$ ySalv(Ӏ0M``Gz'\@u! �$.�DIIH�j. (Wtig!>J",[#}]trLRfOd"T*-B)RCapt @ m-,9KA4+F1dÌ?Q;wގIG&Sa@Da?p;ң c6fyB` OG)[ Ս6aXeݧR#h/a B`טK&IOԄXM:j8E">-A%=]Z\4Zvg\P$s}AXNS DžmˠB@"U[�J bH !�C%\>,j#c2` RRJt(FS,CM尾U螑j,1L{ ϊjLMJ"2/F$bY.8nB4W8uVZ2ɕnЈ; "L4$Nrb�zJ %Àa!# @踪Y5(Чos\p A+ΝIi2V8:AdӘ#UfAԜ}1t{<);x:~+gL<t[ 0:*xk~'I;PZoB|R>T0ˍRn"k̋0 <#WԚOdRCҳmcjL:IOk'FŋZ%NzՓ)sK Aw$b7ȰR;R$)rxmd2^u\{M`el7#v>fb5`~FSk� 1*)(t+ՓK^,<� _�C[mKJ*TyOGN09X̌B<~7U^UwR>oVŒ\xt\!N5=9 dE9`#dbcaЋEV҃vdvfOi.TR3x3j+rV\ HHEf oN(} q:wU%H ٓco)'85e |=F9 a(@ J6I[>TUd(vQ/}m>rsMaե6:>q慩I ޻TI{H}Q<)O Yr<߾Yo=콫$]owHwzrD5l[}A"P_hb1E=)_ ѾgعUc j;ml|j gO[ln 1{$[mBP/̝mGFHBEB[?|h9CQ,Dؓ]0%+s߾odctiJЭ aTݻ*7haKb??=T&I̝n#_Uͦ/M T#(4̭>Z7mJx㉧G$)I }'1T$bx7aϏ8'3P(ކ0uPg0~ri=.SxvUm@e;cݍT/a05 j ַԪN-tHƇiҪ:F? |ҋSgqp?ИC}V]P鎎MϸJQ�RK;7k:27{?:#IsP|-|,RoF{1: :,Y;e6O)1>ŋw*POW")S Ixi 'ֽ9ZåZaN&Rm6<4~J>7e{gjD$M%?s<4 +?b@iE+khI{_v_+%{?9ֳ fAz.|Y=;{끓AIuӟ\A}_|MRY# Q/VHrov6Jd]Rˣ/m׾;./!UvCm#&뒒 Kۻ_ HG3k^<3V{6WϊPg}ϝ�Hĭ_xM?e6L7RU~9uz�>1<sIKG4:mß^/}z6񝆖3eJMQg{i9\hy1rC/>uk+X#8TwS G 3Ӓd8ޓ1Aw|U3* ]Kc^  {xM7^8DG_>4&Q4յګkG5jY\~%șlLA VfxMc4 \wRΏr0s~u%+o=vtۤ<~ f+ P]aƆ\f^cG |ֶ}#۰*lKo;:=9eWGP*V:7H}.ICYM_yb@}Mgp6|QK&xLCRXՓ˖h-yN:gCs_k # p(աyi)99~eSxuvqiAp͞,uܬyp%IkV,O@+M(C\=c^4 _�EL&I0@wwPŔ،6W;yqȽ7~" a^0ٵ^ 7us@BP(\iiox9LLz/.90(fv\#{c;oi˷mUkk`^%@EGMV3$&& yYW_2^|)z]}_yKtyokKPl4ot j=Ø@eãQyTKC1]= kt9ZnG&$8u_帢 И*]nQ<\1P@q֚ؿ$Eϣ^l'wA>ߪ~O{B�x.`����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/v4_4.png��������������������������������������������������0000644�0001750�0000144�00000015143�15104114162�020760� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���e���]���U��� pHYs�� �� ����tEXtSoftware�Adobe ImageReadyqe<��IDATx]y\G}zcg[ڕVuYucc)\_IA2$e*EP1|#cccK6`Z[,jW{ưwfv8R׾ury:3<jfg>ѹ.{AN*QUØ \"w5v=N?.\TXJ$ҿ<Lz)uPPFpmp >|pѠşTֺæ{Vׂ8fqD-6ve~1Ai퇓4|LfՒ;?vd?c=g=Sl^[2cQD$InxN4_"IJ#y:17T�-T�nB\AifߝRnAq΁=~Ï}a PZ6?ܱկ~;WH3!!!L/rɓDYO9@w}*`=O irF#'75ٚ/+C)”ϕk_FЭIQ1Ux\H ܔhI h%o4y$=!Fc(<e64T4ΖRu"Mt緽892«DOHJsIu-uN82RB3*vq"M;5<uuEuvQgV|m\NATuI 2!TE)FDD9n�̈́}#4}=x#=BOQFjwغ |AkW}s&f>hQPP5�xD6M>Qp(-,!SHvb3,ՁKušP ̭TiAhaת eʒ؃^r8kN<q=Q|h;M>4uOJyT34)e.|OGvۤ=1Iz8;FJ'+q_U_C*SOz//I‘0"0$;l6'2S[;"j5OGWH^f<SS'DcH?y-8IN"k!�bhb1xnXX悰ǃ=.4.⫪swEEE$2%G477h4 x ଂt$Jw0YMhZ]e$Ow1@D)QQIFS'VxB}ᐉs̀ppD&tJIچf񗗗@u\0fUPG$(DmHZ+\&8lITT,BoiiFRE <aZ95,UcS/%(>Μ~ll?, }UUjjsB011#\$:Xe ] 'ՀdE MY D CV!Fk ?+o9@$fJ١5NtFpYKee%nA0ĥqfΎy[EZl qф֘$wNaJ&� 1PJ=>@}kry߳I%E izva?'.cbFքV8&kZjc`.e h8RVSdk[jBE,\.>~:GFƕw4bZM#i J%PH #P$cd3¦:;/P`@)F Nmm-0s B B5ih?|odyQucX*P Qt[cswEXMk;[ݲE <Z!Nc[U�kV :=hrwh6׮N`3Rf2[ewj4v5ۘZhܱ(&e ?7 RTߔk8DƂ/>vˢV&%ýݏu0b,HEj<]kRQD4=+P]]J+◌SFx^|#Wf1*yuM ,s$ZjIܵ\DtSRo dYaD04Eˍ v.'Zj@r/~nggs+c!&rC= ̅z5hk[`"'|ż ~+(/Y?Y7,zMvԻWUGRcp,P 3[֔yqjj 'f0>x/90ON+.s[Sw^Jг]:=E'؟y"a=$F4>TGzO g[WL?\[d-:; l]\R.LJy8.gmު)e3+s7g?g43e1.2_w.X ̦bTak>$"O l ED2&}9ec[E&RCCC8x1ڴa!sXR)2ziMm,*~qɍCcY|q[[@d1ßl_&/g2/Ϟ:B/GKKgI# ţ82UT/ 8o< I48|nҮn#:=2;yqNd?^W7~kkz0 ?[:&]Nmg,`1__ `0SAƔ:w%eɬg >) *JSs>6?[梼ↆlv/kcY<Fdpi..eᄀhquYtb:eq7qFrNe^D=mS(aZL։&No~;"40+|xcԏɈՔեgu6դS^<WtEb^DRGXkEͨCRB/J > P49D܎+~era3ÜnӀp7^<yхHR\bhbN0EJ`疗,[' Hml*MĽ Ɇ}7/z'9|K o22\0UkU2K8w]`n돔12-:Jβ*:7&|/Ȁ֗*gX+֨2f‰kʢtKs�ggrhuuuY3ITڪ< 9{4ٕIK|qb hzV-$m ->@^lq)1gR29Uac:t9aD r̨.9Os 0 L M%!D`k#[^W jfB+`#Qb9%!zEa:Ƚ!՛ȊK֔<rFՄ1("p߅l8q71ezg'-Y.;MKgG196$MRrU+rzٲP/\ c9/8Nì]e9'때L5A7& ACDp:5HJ:.6yez%W66[DNM00<&SYcM꒷&18^3*c-h\z$CډքrсytZM%$zlp+}s[qXMa-,2(A'6Tʥčp<H&ЉR(yz:=Nn$zø8iVGy( >3N(q]Bpm|jD^X4ŕk�:%&ZQ [ "$Q|;}namfQe9~}&љ&4S+œ| {4"wU\BI(�W358jwTy- ]L72\V(~F!E 4�RFs %%7pA*:ʀ)@߈AuF0<@wse5 3]քn(Tdr+w)u(*@QKO(҈@z6ԎsȍMIQpAϴ׸e/{<lxRaٲ)E%HK_xH[UYA0 WN1nQcgφEC5VQqcr?- UPCH\a&b9=zvc4a?B D\ FEp8-6K"e ȫxE=~O_ֱRENN[U~LQ-c�I"\w"xAPByɁ*S(�H3τ=MxhQj`*+ UM"ZulY_+,]sZW\CzcLrn*T[71/Qeups.b0l\B"M{g tYؘ(HH-T9 ^QP25ˉ`r ~5PfU>$ 0%D]x~SKffA(Y,KTK c`04/ V \_+9 tN>l_X^Z<ɩ01/j쳡BKZL|AiuTkf^'f*M~bPQrLnJSO/ys .:,Fjs*GĪjp$^hn̾]1uT[hJjwˣorܱ 4&4/PȂkXTni^}<eYбC|y¦ueɦ/]mp0] %sUsh)q+nԘXdBrd?LU 3Q4ֹ [7xҮD&}QėAOT^[!ZT;~b4r#j̇_cd/DsS13 S֢qg 0x"崖n|T;t)MRuyas1tmt'Pt[޹CЬl)4 )xrSWVS޻(6]#%_y;uuwt2t�H "V{,fp~tq1S"eĊ3[l->^/1>[|ʍM˙1fۥՆ>ei)MyyfS||΢{&QK-WOZ08<!{LK71{?=ª(2R@@p>{G#|bs`|=3|W <YoӺV[|i& 1NۊQuQlgW5knoQH򾇙[]|x7]+@6?ԮQ<~#ah"ph>Iz*Y):h󢹡J^6ǩZ.;0YϷgirz^pC(|C0b(h>ZN_Ǜz2h^SηUgN#;:n \)IUW吭)N֯%IfA<cb7HU[/RqLVf;^QnVLny[ (ƶyR%ϼr{ʰX88K&R1#rsQ" s6Ef;Ŋ| &7.aK/܁׬ho;v_D9w{`&pgݟS(85/<؀8(J'n$?Ǚs}K̒E;?c`,:h+o÷~csYlZRѺUI[ܛ~Xt87/⶛;iܛX]Ns+_៟3@K!_VnsbXX?8^cV W?g.񡣭QcE?ɝ߼6~{6#3سU<޵k/Nᢊ_N'IxerފЉ~ŝNlP|O-/DTöPbSS~z/ccOp95@qo 2qp*v8q#quͯ-k[]-n ˖Xb~~W10.XI=c.dVl Nht/+^J�1NC6X@w2E}U-Z: NJ.2F;qm>8nzւWzt]2 P %975o\]}0)&$ܿqA?*wgN|뾍9c_Hh+~T/v #<3H^'NOlv bkgOѼ@֙k#zNΛqC{BZ><scZ]xg,wT5WlJ66Cbݜrӻk0>27{ /Wxqh~;njNZ6(rYʓ"juJt6;[p꾡x4cT$+~wuW߸}YTҔj,2=5+02mlm<5TU:nk*mUiZVSv;>@ASxefzшOC-gy�RJ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/v4_3.png��������������������������������������������������0000644�0001750�0000144�00000015506�15104114162�020762� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���g���h���,��� pHYs�� �� ����tEXtSoftware�Adobe ImageReadyqe<��IDATx] třhf$HIdY-6` 8!1`BBM&Yݷ<솗l^ 6�vsuY1:f4W_S3YC2vLwW_GU7pbHY/q-U ' =^*v $C(/  i* QEUY �2EJ0r93�dݗp-EngMAF<#8/%p`̂Q!ۿWss$!٧dwL<?B텅׭8 G]bͨ_�HP"p`lRFz*#NG,<j91Z1YepYY帬|"S'ߋh*ǁ)ǝ}6m{Vseͽ㞗z~oCh:ՁP.=~&@V�JFjLٌ3W{;V,,.5(-@;BcȡPa##yr24L2#r!1�k1D,Qе߅^NjĵUddw̎Nf /mߏO}oͯ+$)JO<8dcr dT_?|3_m󧯰^^Pi{:bzY*mp⯋Gh9Vi+kyRph;P؎Lt9y5xk!</6'v51a%A'5Fag H1Ywb۶۾ūly]duǃ :} +V_)tlɯ[zK9S<8cs`^kbS[n:[E,N`]&g ݳV‡ϳ%¾[ă~ԕ\S/q5E ѱ{6\9{rybB@,8}ny_[PG3�/_sq%7ή~gxv\dn46ǠUkԐx[Qg6X}bη+Wa\mٲeE~~åh+l*)̃q~?'`'Lf3>q_rJKJa,pTR?;i-@8F kAa-)n{wAFT\iܹs-((ܱhp866ƁANC{eP]xX [\L3@3Ju*A]f@Ic텉d4q ^Za(�1K![�ˢPPRyCc0s 8 IAnDSq1 a8:N ʂ%E(`LmNu؜ReBv:(^|u8xv5�E]SA6SϥmxHQo^#szM4GЅJ5Wr(**#T1gMԳHϻ^pS.V#7'$'+kQnBۡtf0GluaZJV%'7h+.g`H`2t+/Y;Vmʔnt5:no*g0Uup~ x XgN^QQ'j�3VQ>rVLq]4VY;E1Qݦ/.9ڎ )V)PXX3vQfYJJJ _^[~֟w±Sܛ ZwE<:"l6v.<_ɒ=g |㭨0;C'sWnillt j߶kYc#^&Yr Y:KWT bĥӓ!=_|zPvdOV\KNW:1AAA v^qd5XIs?u_:FXa`lڴ)To]Y4 gf; 0^5HHtҵW3g[f# ʫ*!Lww7 c02`,l,'a?9y",a$^rAvyA/}͐0xUXǜ)>|=34ӗufgNȺ󎕎Bс]x,lq)G|Rrvj{DժNMEzգy5ˌԬXUUiqo7rJIN[H2ú~:VH u`p \n-YJ3yZkT]ެD*Nʟy)Ɨax,X{m?[XJyyQvR4ԉϢ�kr V7QJJiX@sOet7>}3gxcrهfק^#K`S7; o{ N!d<,@�v``` j^%'q=Ԅa!d)kaWJهnc5 xHozxq+ÙjZ@Э,d64OtVg"Lvck.pwj\Vj S lve-PlLң9NilC;^|ެ+k'0B#-Gsssѕ_;BϪ3IY-GdWYd,:QZ5G$U `]0>' [3tIS0Zfd(p k5_C 7)|p}|f_i*.3\91.p F52™tqܒd-VbΧQk!?#A#(`R䐝=g� sɓolSvLv$Jɫ>~6MYͭa`#sB K 99L�9r8WH!YPT¥ јDb&@aG#;h4F"x"ɪV0U Q� k�tm(4ծu !zb$Fւc0 ѢMFLGKrhQ K<AZ$)$9)g@h+f8 ,R ~ˠ�3E@ (H̑ IuGXlOU,a7 !GU,Kk}]g4}PvG5E>Ȩ:Wyge&lBQ7I̸Ycs(N? E!ψ�%`K#ƗN:*Nv*'�Lni繷SQˠHU<HBgb.8{ ѾI$ %8-G"0çev UZ45GV7PPF0DPcID>ah9[A"VAbc,o09ᠰ9qK(vq5G\R<ֆpL"ؤ}q IS.}GZ0B `B%q|dl<sFTp(HyȮckrPX GDQР&E(C#“,LU r:"G- NVO_d|8bT9^b۠I%\aVMMbORx�Y?&,$bS䄄h@!1H|򀢞Ec#&ZaMaѽ{{Fq#9|:*OVW .Aa˸W#$A~r#ߓC[0Pʋpd19X]cSOF?GR3IZ6|`Mf:R+ϝ"h);up\o 0@PP_ٺ rdb�Χ^s\qM\W eJ[#:W_=` RH!>H/?(h@QT+uMQ=S ,sIS!צ'Qb hDNpdU @(98"JCE_.LJ#ozP<WQ&FUΆ;0ШDF:&)JVrp GG$D ҀoY%xGbcq'2on%glga>W\*Vb''oj,0ўĀJ ;A+yH {={1$~_g�F&@i&mq)G@ {J $&KQe-oH:\o wwƪ4HKjC~EzE@MQAQE YH 6쟻 ;COo3~ޮCd38達bAHQYWX+QW0G4P;:^A {HW-$AշW_)l9Qu I kF|_xvF鍗aK_9kSH)o}j4HIC]cW+Stpoy1uoz϶#mi@{+_J$hwgeђqr!Y+aЫlanZތ9N]g*a|>R1 <:GQnZ,c(049n<G*td#{zEe:{k7Z_݁y7ތQm܏O߁-Oóm+B-g2H:0䮆]yXJ+Qr^ϧl><Q,ZFUC;L{XW|Et9{ix.?C0Ou֕3;T6 !ʮk.Xlv57EY[6/P@R3!]c|X?o6lBw~z9]mpFE˩ۖt'.p]5(EJ|ɏSUJDJRP/,z MUX/ b}H�T,,tt'.z̹Q&SyZ6Z^߉CKX3>z#@rzd*Fd*B֓z0Nka{8wg3w Lp>д�jc7�M;8:@ޣ?e;J ~ vF$(#ić%2Kٳht(z?a{!cfC?NH(f&vi = |ϋ?#RilxdF/> ;L[Q/qØn.d+m~Ӡ{ù70ҪM\%4|}=M7sud"m0 < gP|hB*r<=@=_Bͪ5<LDI2&9P||&S…]BoFwп(nH}TJyQrL~�J٢?yqNZ]oIJ*z@ )F^ Adtt6 kz ޝh߳uCp3;6)T=1;31gʊ6D@hu+K߅Ӈ?s h䘋"GGOxC?K,X/ybgA _eLq1pV2sh} _v"L X]-B}=쇉[?,nfކT?SS I)^46TΛS#=ZjdT;n?GH HmJ-|c{䓫f]M d7,q;.npb-�˱9>~s'3E3@] hniVuténq3 ;{r:uB  K. og_~)$X^nV52hs`v,e?S=ş|{;E])E^&dԸ 8Aqx嵫+{a{ .\&!@$( L.fm܄oc[_XB0 &Sk;/BswBZtL嵚-h%|$)Oc]+}vSH_Qi$v{`6k.o[> Ko@=.1X'q$_TyeK+/GU ?GfN@W;818{vO8xUy-uP[¬ B=mAH7b%�ă]#]uߋq>Wݕ&׀;y^>kwT7AktaIσYWko[MKq(\p+{+vׇfF LF.-@a^cK!(Q0|$-SM<BUsb~c~aUk}|pl (u#)!+ӤxówPvMF u>3YP0 $IQ`T1]f +P8x`TX{m6ǖkU/Z{VtwyH=¶+N4LdhM gRf9qiC&<DG 罂?~1 kUy>4RdԀdTR,$*>EeJ@Qem7M$:AH%tـ)}8)2jT!ACLW 4<0� j/kƅcp8@o P| @3�ZRmoX����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/colored/v4_2.png��������������������������������������������������0000644�0001750�0000144�00000014677�15104114162�020771� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���_���^���EP��� pHYs�� �� ����tEXtSoftware�Adobe ImageReadyqe<��LIDATx] tչFZdyf'N:!!&!%Pвe+ByJr(=}4%@YZ KHH=!dKp8M,Y}sG3HdY#iՙh<s& /q$/fz2IyƋ&cC�t d!9ۃkCns:27o4[~8S&֡dFXx4M $y{F2L! #4dЯ]ű#8V];_?92_W[>ن,l+K`tB_؍0NYZ/lKuWhHZa|aovogP`~Q/Moي֬Þvm~|mKj7Ϙf w"C  '+~yI 0 c`x׻^.'@(c_u-];:vEybd1)R?sގIўmcd~& .�voLbjn]{g_"饫reӰ۵, ߆kg\'<LJ`μ P%`hI;1{lXƔ,/e A'v �׎MbGTZx5pg =&WAg6\'|9|?MujaAo^i {x,ߘV ?<K�_"|hy0y3hVe]բAۭاyV~6fv~c+HՓgdZџ2<?>v JZO$@rCxSj]H/�|]^uT�ш cR[y<Hϫeod5nn9ßǻ?倭j?YG`ҘPGA7-1?ǎ 4|pucjajs.](Iȫ5'$=r `1f5MN }NʬcX?a5# HggW+n,� [9SNC|P(O3\Cث. < oYF4nrf`R9{_ ,3mppp|<yP;3 ZFO+"*Av #%af+u |DG�50?塬 P ˲:Uk_=4u6{Gl�0\<~c x0B%_}JPt pwKn7aD0Pe5lmtz׶ҝ6lh_ӂo?gc1ɗJ5 i س½GFJ xGV:lX<fw]”c=kh#ݐR<v# jG)9% =tF�0LDj5Pl59#  $ ?2ɢ!pE|DfR69qG\ˋN IV蓦O8X  `|R[ Əӆ,]=;^[Q(ئCMD̟aБCh>y~<FèqVui_.zvG�O q=o5~W} NMyg=]= Uv"bN\ms߇Jkʠi䩠[dv"4/2 (<Q6nw.?9BQǤ *B='j\1geٱoVx u bڼnȖ�nV|+9koa MA7�ޟ,LdwNI] +V++[Ǧ[poL%]Oܰ\@>' H=F*r ;Һ1 nN`ҭ]A&I0cU!pZ<i;9.;CZ.sЉ\3i+_~>q~Þ?�$gT9T![hq<-M] (7S ja3&ԥì9q+;;g~!;DtVuj`?zVԃ~PNi نL"3v|+\{A=CA.\fE$!'!Q BYqJVXIL<GU5?JWI?چL��~G@B v[/{ϊ Xp)dvaRif!/(QsC#z>SNڴVFs :8}ѹ$@�?yn [ѠLځ a ?;s9# a^F+Lfm $E1pr (_ ?y('$S;H@J)~z쟷%> jmYm¥=L/?743L~α*WHkp `B? iPU9& T†=SUObvt;(G'Sm/z>$'`1fؿ+j< ̖v/Ӛ>X4dpݺOt^AmV;U;H�gSӓ)T& 3'nz!@ ~ 4r(ʨ1e^0ѕq%8m ҄qeTOQv/爴}�uI`aHd s,"N!ҪBMg|!%v\vmx<u,s5\n_x&l;r !+BR&y0&rD-Y(=]&@?:>3l/?op)<>_Si^'6Ք!J$3tNL;0Hp Tɧ!^^8#9z ?O& 6 $$0¨#dFIT;^1w"FSFOCG6_Y|t#Ӊx@T/>EWF@d/IcLvrC�:jO`E#u())Q ]Y{~\; lZ`~Hl>(T73 l%H�TWE%^%/e:hz&Y  GQ-bP6TR) )騂+!k�$8b* "R8 ģ}$�nD$^"\|V<K8as(e} 6' c '7[<(962:Qū% A ?s(TS`C\Dj"qXlQaa5(Wmt3>䇔O_{BxV =&~9IE$ N PRA ~(5  Du1Щ6C ʲ_kC[ڨ/5QL[u5E3Uc( QDb[x~)իQ_ܼ_:FxGloy94. c+hye}ݹB+A= ҷH=уCNӌ%*_8IG4It3 ^P4r1I4 <@NPQUS�9nXh6V0 O2Zhj94N72yUN:}O #B ~Ȍ3'Jꅂ)bRDHr )/%Gw[pat#VEk qe] }F!zDF4% )^aQ/D#n=U+;bN I R_1Ák,SP$ol{Q+z^15Q$y`@m`d-{bdj*b3$3&p^:Hl G8 {.]PtũB\=2E^Ζ`oA/=!뤩[mUD}eM&!IBLC*D38? 4(H`<).PQH!Wɕdm*yYʤ~˾ plݷC=rsU?*l!j$[å@�r6 t.Ht.*E 6rxl~ѡw&(vO"CoX?a2$$""N 爀G4GXt:}:d3n54*p/#R ܤ<a6hlgUj{Um:[0iTt:Y .P)D 1/D7j%bP1*Lckp¯Ai71ڝ|uLVW+_i}-]P<dv * a)<�n$/@zA4-ϊ%C*mgjvN To t5:wS|sᶙ7'RU�0Oxt~8k|sVt#38~斴 `4)A{ W^iY*דA^; bU97%஋oG|VH�G@ |1HƒTr#_)Ĕ1(}Kωeޭh6Ѯt8*Rp_cjS5&}> R$VIKVˢQ)SQK9XWcJ cT=ͽAZkPi(^c;`PTBWgŚ"?Ο3pٷ.7@fѩjsRLϱŷV뿟6ymհ@Ʃ7^(ćyo',}HPLG:э*(ԏCi8QhxWFۂ�O'&T˂G=کO6qvKi2Ͱ_{ǝwP#M R)[>z08Ak ÔbzYE'u|~)lU΍ϊL;fT??_İ=Ūz9cymI )3DKi.jGSY+VYu}*'gˎm_]Γl868붽d?5ɺtǒNvcG?LyHx:}663*es(w)W5 ;41+U0r/ -ֈ}ޫI|ѹ.!lUGgOmqyw n{7$>l8) ЕڀOjNaS~ .-/oR-Zh 54Dpa9WKoϓ_g/Т LR kG|/p`On[O;57ۆ7=ZDPc'RO#W= +g.&On^ЌmV=)UWBFyj F�Zku@BxxS({ӂk.Esrb -cc? yVt_wFݓ1g ~jԫX%4VNI� hPJ} *JcGS19r�&'c ègǮq zP؏փ`1Ν܈c&CTOU4<iׯyylCy9ѧ<Ai2Չ]H,-`.f-`B%C$XB[^H IOa *}!9:!-O3j1F!FS81e; K: 9%ZUFS+)R{eo?_D@#G*({ؤW_`pC|TZ"D(sq"8STP&} ^遌h}]7xH,os͑@/F"/#{:/z142[}$Ad]K= 7t9>=5֣a^ y510퍑_V*-.4V @W_q=ۭa3&-2!5{-HL7\ĝ/GS/=\L7;\w~TLU7y@L&@(}9릠\}/yi/A (sQc}Ǝ)ylTLU.1Xf;-ȌI-q^ 4^PlsR+遦ؿ{raߊ siJM穭Q< Fk~H>C0T 8I46]; {Bgi<wy_Jv`�J7s>����IENDB`�����������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016623� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/info.txt������������������������������������������������������0000644�0001750�0000144�00000000105�15104114162�020313� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Alternative version of the main icon by Ivan Dzikovsky (vanyasmart). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/doublecmd.svg�������������������������������������������������0000644�0001750�0000144�00000066640�15104114162�021316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="48" height="48" id="svg2"> <defs id="defs4"> <linearGradient id="linearGradient3858"> <stop id="stop3860" style="stop-color:#f0f0f0;stop-opacity:1" offset="0" /> <stop id="stop3862" style="stop-color:#ffffff;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient4777"> <stop id="stop4779" style="stop-color:#e24e20;stop-opacity:1" offset="0" /> <stop id="stop4781" style="stop-color:#b30700;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient4767"> <stop id="stop4769" style="stop-color:#940600;stop-opacity:1" offset="0" /> <stop id="stop4771" style="stop-color:#940600;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3988"> <stop id="stop3990" style="stop-color:#f0f0f0;stop-opacity:1" offset="0" /> <stop id="stop3992" style="stop-color:#f0f0f0;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3688"> <stop id="stop4775" style="stop-color:#bf4823;stop-opacity:1" offset="0" /> <stop id="stop3692" style="stop-color:#610905;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient3680"> <stop id="stop3682" style="stop-color:#ea5729;stop-opacity:0.99607843" offset="0" /> <stop id="stop3684" style="stop-color:#990600;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient3672"> <stop id="stop3674" style="stop-color:#0000ff;stop-opacity:1" offset="0" /> <stop id="stop3676" style="stop-color:#0000ff;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3710" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4188" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4191" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4773" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4793" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4797" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <filter color-interpolation-filters="sRGB" id="filter4799"> <feGaussianBlur id="feGaussianBlur4801" stdDeviation="0.69097655" /> </filter> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4804" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4807" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5011" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-45.608369,26.681584)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5013" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5021" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-45.078039,32.338438)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5023" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5025" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-45.078057,34.825009)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5047" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5049" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5051" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient5053" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient5055" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3655" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3657" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3659" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3661" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3663" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3676" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3681" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3684" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-173.59957,-499.07053)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient2886" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient2890" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient2893" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-173.59957,-499.07053)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3013" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3017" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3020" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794386,0,0,3.2957524,-569.93696,-1742.32)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3795" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3797" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3817" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-575.67077,-1765.2781)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3820" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-578.94942,-1765.2781)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3864" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3888" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3890" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3929" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3933" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3941" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3943" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3945" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3947" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3966" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794386,0,0,3.2957524,-569.93696,-1742.32)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3968" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3970" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3972" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3974" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3976" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3066" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3070" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3073" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3847" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3849" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3851" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3881" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3883" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3885" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="95.393379" y1="-18.338352" x2="94.107689" y2="-28.195293" id="linearGradient3889" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3892" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="48.894325" y1="-3.9815011" x2="41.82304" y2="3.7326276" id="linearGradient3896" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3934" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3080" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3082" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3096" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3100" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3103" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3915" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3930" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3935" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3938" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3110" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3114" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3117" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> </defs> <g id="g3891"> <rect width="44.024006" height="43.6968" rx="5.0727262" x="1.9879968" y="2.1515989" id="rect2898" style="fill:url(#linearGradient3117);fill-opacity:1;fill-rule:evenodd;stroke:none" /> <path d="m 7.0574045,2.7504562 c -2.4860882,0 -4.4664646,1.9886603 -4.4664646,4.4761323 l 0,33.5468225 c 0,2.487472 1.9803764,4.476132 4.4664646,4.476132 l 33.8851905,0 c 2.48609,0 4.466465,-1.98866 4.466465,-4.476132 l 0,-33.5468225 c 0,-2.487472 -1.980375,-4.4761323 -4.466465,-4.4761323 l -33.8851905,0 z" id="path3939" style="fill:none;stroke:url(#linearGradient3114);stroke-width:0.64966756;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> <path d="m 7.0536084,2.2530542 c -2.9606867,0 -5.3580672,2.3973806 -5.3580672,5.358067 l 0,26.0611328 C 15.175428,23.570923 32.003559,21.016207 46.303828,25.841232 l 0,-18.2301108 c 0,-2.9606864 -2.397381,-5.358067 -5.358065,-5.358067 l -33.8921546,0 z" id="path3687" style="opacity:0.21000001;fill:#ffffff;fill-opacity:1;stroke:none" /> <rect width="44.024006" height="43.6968" rx="5.0727262" x="1.9879968" y="2.1515989" id="rect4723" style="fill:none;stroke:url(#linearGradient3110);stroke-width:0.61873102;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> <g id="g3936"> <g transform="matrix(0.30936551,0,0,0.30936551,-0.14500871,31.400917)" id="g3911"> <path d="m 1.8125,-79.78125 a 1.50015,1.50015 0 0 0 -1.34375,1.5 l 0,20.28125 a 1.50015,1.50015 0 0 0 1.5,1.5 l 12.5625,0 c 17.999836,0 32.53125,14.620182 32.53125,32.625 0,18.0048185 -14.526431,32.53125 -32.53125,32.53125 l -12.5625,0 a 1.50015,1.50015 0 0 0 -1.5,1.5 l 0,20.28125 a 1.50015,1.50015 0 0 0 1.5,1.5 l 12.5625,0 c 30.834376,0 55.9375,-24.9739611 55.9375,-55.8125 0,-30.838538 -25.100001,-55.90625 -55.9375,-55.90625 l -12.5625,0 a 1.50015,1.50015 0 0 0 -0.15625,0 z" id="path3844" style="fill:#e5e5e5;fill-opacity:1;stroke:none" /> <path d="m 141.5625,-79.78125 c -30.83539,0 -55.9375,25.069829 -55.9375,55.90625 0,30.8364215 25.10523,55.8125 55.9375,55.8125 l 12.5625,0 a 1.4962434,1.4962434 0 0 0 1.5,-1.5 l 0,-20.28125 a 1.4962434,1.4962434 0 0 0 -1.5,-1.5 l -12.5625,0 c -18.00693,0 -32.53125,-14.5243249 -32.53125,-32.53125 0,-18.006925 14.52929,-32.625 32.53125,-32.625 l 12.5625,0 a 1.4962434,1.4962434 0 0 0 1.5,-1.5 l 0,-20.28125 a 1.4962434,1.4962434 0 0 0 -1.5,-1.5 l -12.5625,0 z" id="path3842" style="fill:#e5e5e5;fill-opacity:1;stroke:none" /> </g> <g transform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" id="g3895"> <path d="m 14.53125,-78.28125 c -6.8165266,0 -12.5546875,-0.0039 -12.5546875,-0.0039 0,0 0,20.28907 0,20.28907 0,0 5.4585105,-0.0039 12.5546875,-0.0039 18.813676,0 34.03125,15.311325 34.03125,34.125 0,18.8136755 -15.217574,34.03125 -34.03125,34.03125 -7.096177,0 -12.5546875,0 -12.5546875,0 l 0,20.292969 c 0,0 5.8223236,-0.01172 12.5546875,-0.01172 30.025497,0 54.4375,-24.2870035 54.4375,-54.3125 0,-30.025496 -24.412003,-54.40625 -54.4375,-54.40625 z" id="path3830" style="fill:#d3d3d3;fill-opacity:1;stroke:none" /> <g id="g3892"> <path d="m 141.5585,-78.28125 c 6.81653,0 12.55469,-0.0039 12.55469,-0.0039 0,0 0,20.28907 0,20.28907 0,0 -5.45851,-0.0039 -12.55469,-0.0039 -18.81368,0 -34.03125,15.311325 -34.03125,34.125 0,18.8136755 15.21757,34.03125 34.03125,34.03125 7.09618,0 12.55469,0 12.55469,0 l 0,20.292969 c 0,0 -5.82233,-0.01172 -12.55469,-0.01172 -30.0255,0 -54.4375,-24.2870035 -54.4375,-54.3125 0,-30.025496 24.412,-54.40625 54.4375,-54.40625 z" id="path3832" style="fill:#d3d3d3;fill-opacity:1;stroke:none" /> </g> </g> <g id="g3898" style="fill:url(#linearGradient3915);fill-opacity:1"> <path d="m 43.648925,7.1818712 c 2.108799,0 3.883988,-0.00121 3.883988,-0.00121 0,0 0,6.2767388 0,6.2767388 0,0 -1.688675,-0.0012 -3.883988,-0.0012 -5.820304,0 -10.528095,4.736795 -10.528095,10.557098 0,5.820302 4.707791,10.528095 10.528095,10.528095 2.195313,0 3.883988,0 3.883988,0 l 0,6.277944 c 0,0 -1.801228,-0.0036 -3.883988,-0.0036 -9.288855,0 -16.841085,-7.513562 -16.841085,-16.802415 0,-9.288853 7.55223,-16.8314174 16.841085,-16.8314174 z" id="path3828" style="fill:url(#linearGradient3080);fill-opacity:1;stroke:none" /> <path d="m 4.3510746,7.1818712 c -2.1087982,0 -3.88398728,-0.00121 -3.88398728,-0.00121 0,0 0,6.2767388 0,6.2767388 0,0 1.68867488,-0.0012 3.88398728,-0.0012 5.8203024,0 10.5280954,4.736795 10.5280954,10.557098 0,5.820302 -4.707793,10.528095 -10.5280954,10.528095 -2.1953124,0 -3.88398728,0 -3.88398728,0 l 0,6.277944 c 0,0 1.80122608,-0.0036 3.88398728,-0.0036 9.2888534,0 16.8410854,-7.513562 16.8410854,-16.802415 0,-9.288853 -7.552232,-16.8314174 -16.8410854,-16.8314174 z" id="path3894" style="fill:url(#linearGradient3082);fill-opacity:1;stroke:none" /> </g> </g> </g> </svg> ������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/dcfinal.svg���������������������������������������������������0000644�0001750�0000144�00000112613�15104114162�020750� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="48" height="48" id="svg2"> <defs id="defs4"> <linearGradient id="linearGradient4375"> <stop id="stop4377" style="stop-color:#000000;stop-opacity:1" offset="0" /> <stop id="stop4379" style="stop-color:#000000;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3858"> <stop id="stop3860" style="stop-color:#f0f0f0;stop-opacity:1" offset="0" /> <stop id="stop3862" style="stop-color:#ffffff;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient4777"> <stop id="stop4779" style="stop-color:#e24e20;stop-opacity:1" offset="0" /> <stop id="stop4781" style="stop-color:#b30700;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient4767"> <stop id="stop4769" style="stop-color:#940600;stop-opacity:1" offset="0" /> <stop id="stop4771" style="stop-color:#940600;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3988"> <stop id="stop3990" style="stop-color:#f0f0f0;stop-opacity:1" offset="0" /> <stop id="stop3992" style="stop-color:#f0f0f0;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3688"> <stop id="stop4775" style="stop-color:#bf4823;stop-opacity:1" offset="0" /> <stop id="stop3692" style="stop-color:#610905;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient3680"> <stop id="stop3682" style="stop-color:#ea5729;stop-opacity:0.99607843" offset="0" /> <stop id="stop3684" style="stop-color:#990600;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient id="linearGradient3672"> <stop id="stop3674" style="stop-color:#0000ff;stop-opacity:1" offset="0" /> <stop id="stop3676" style="stop-color:#0000ff;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3710" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4188" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4191" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4773" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4793" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4797" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <filter color-interpolation-filters="sRGB" id="filter4799"> <feGaussianBlur id="feGaussianBlur4801" stdDeviation="0.69097655" /> </filter> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4804" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient4807" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5011" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-45.608369,26.681584)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5013" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5021" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-45.078039,32.338438)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5023" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5025" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-45.078057,34.825009)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient5047" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5049" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient5051" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient5053" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient5055" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3655" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,1.8498509e-5,-2.4865711)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3657" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3659" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3661" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3663" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3676" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3681" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3684" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-173.59957,-499.07053)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient2886" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient2890" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="translate(-173.59959,-496.58396)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient2893" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.99999993,0,0,1.0049745,-173.59957,-499.07053)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3013" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3017" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3020" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794386,0,0,3.2957524,-569.93696,-1742.32)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3795" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.6995,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3797" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="translate(0.3002593,0)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3817" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-575.67077,-1765.2781)" /> <linearGradient x1="194.53125" y1="514.36218" x2="194.53125" y2="521.51562" id="linearGradient3820" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-578.94942,-1765.2781)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3864" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3888" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3890" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3929" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3933" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3941" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3943" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3945" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3947" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3966" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794386,0,0,3.2957524,-569.93696,-1742.32)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3968" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3970" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2794389,0,0,3.2794389,-569.93703,-1734.1654)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3972" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3974" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3976" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3066" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3070" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3073" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3847" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3849" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3851" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3881" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3883" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3885" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" /> <linearGradient x1="95.393379" y1="-18.338352" x2="94.107689" y2="-28.195293" id="linearGradient3889" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="1.9765625" y1="-46.575531" x2="1.9765625" y2="-29.074638" id="linearGradient3892" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="48.894325" y1="-3.9815011" x2="41.82304" y2="3.7326276" id="linearGradient3896" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.30936551,0,0,0.30936551,-0.14439295,31.39939)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3934" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3080" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3082" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3096" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3100" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3103" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient3915" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3930" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3935" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3938" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3110" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3114" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3117" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4281" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4295" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4299" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient4302" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4304" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4306" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4308" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <filter color-interpolation-filters="sRGB" id="filter4332"> <feGaussianBlur stdDeviation="0.66719267" id="feGaussianBlur4334" /> </filter> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4348" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4350" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4352" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4355" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4358" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4381" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4385" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(0,-27.305233)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4389" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(-48,0)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4393" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(-48,-27.305233)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient4439" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145452,0,0,1.0195921,-176.46325,-507.50396)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4441" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46387,-504.97918)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient4443" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0145453,0,0,1.0145453,-176.46327,-504.98121)" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4445" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="17.235727" y1="14.986952" x2="18.561554" y2="23.999998" id="linearGradient4447" xlink:href="#linearGradient3988" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4449" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4451" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(0,-27.305233)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4453" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(-48,0)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4455" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="translate(-48,-27.305233)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3311" xlink:href="#linearGradient3688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.018204,0,0,1.018204,-177.18618,-506.88882)" /> <linearGradient x1="175.59285" y1="521.39734" x2="219.58569" y2="521.39734" id="linearGradient3315" xlink:href="#linearGradient4777" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.018204,0,0,1.018204,-177.18678,-506.88678)" /> <linearGradient x1="175.89285" y1="521.29077" x2="219.28571" y2="521.29077" id="linearGradient3318" xlink:href="#linearGradient3680" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0182039,0,0,1.023269,-177.18616,-509.42067)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient3329" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,-47.870215,-27.257974)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient3332" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,-47.870215,0.18828737)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient3335" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.8,0,0,0.9968721,0.12978282,-27.257973)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient3338" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,0.12978283,0.18828737)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4152" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,-47.870215,-27.257974)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4155" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,-47.870215,0.18828737)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4158" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.8,0,0,0.9968721,0.12978282,-27.257973)" /> <linearGradient x1="1.0625" y1="37.652618" x2="3.5625" y2="37.652618" id="linearGradient4161" xlink:href="#linearGradient4375" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.79999998,0,0,0.9968722,0.12978283,0.18828737)" /> </defs> <g id="g4163"> <rect width="44.182766" height="43.854378" rx="5.0910196" x="1.9086171" y="2.0728102" id="rect2898" style="fill:url(#linearGradient3318);fill-opacity:1;fill-rule:evenodd;stroke:none" /> <path d="m 6.9963061,2.6738271 c -2.4950535,0 -4.4825716,1.9958318 -4.4825716,4.4922741 l 0,33.6677988 c 0,2.496443 1.9875181,4.492274 4.4825716,4.492274 l 34.0073869,0 c 2.495056,0 4.482572,-1.995831 4.482572,-4.492274 l 0,-33.6677988 c 0,-2.4964423 -1.987516,-4.4922741 -4.482572,-4.4922741 l -34.0073869,0 z" id="path3939" style="fill:none;stroke:url(#linearGradient3315);stroke-width:0.65201038;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> <path d="m 6.9924963,2.1746313 c -2.9713635,0 -5.3773894,2.4060261 -5.3773894,5.3773893 l 0,26.1551144 C 15.143605,23.569377 32.032421,21.005448 46.38426,25.847873 l 0,-18.2958524 c 0,-2.9713632 -2.406026,-5.3773893 -5.377387,-5.3773893 l -34.0143767,0 z" id="path3687" style="opacity:0.21000001;fill:#ffffff;fill-opacity:1;stroke:none" /> <rect width="44.182766" height="43.854378" rx="5.0910196" x="1.9086171" y="2.0728102" id="rect4723" style="fill:none;stroke:url(#linearGradient3311);stroke-width:0.62096226;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> <g transform="matrix(1.0036062,0,0,1.0036062,-0.0865488,-0.08654784)" id="g4408"> <path d="m 1.6875,6.71875 0,7.1875 2.65625,0 c 5.5685284,0 10.0625,4.52368 10.0625,10.09375 0,5.57007 -4.49243,10.09375 -10.0625,10.09375 l -2.65625,0 0,7.1875 2.65625,0 c 9.539092,0 17.3125,-7.74087 17.3125,-17.28125 0,-9.54038 -7.772441,-17.28125 -17.3125,-17.28125 l -2.65625,0 z" id="path3844" style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4332)" /> <path d="m 43.65625,6.71875 c -9.539406,0 -17.3125,7.741525 -17.3125,17.28125 0,9.539725 7.774059,17.28125 17.3125,17.28125 l 2.65625,0 0,-7.1875 -2.65625,0 c -5.570723,0 -10.0625,-4.523028 -10.0625,-10.09375 0,-5.570722 4.493314,-10.09375 10.0625,-10.09375 l 2.65625,0 0,-7.1875 -2.65625,0 z" id="path3842" style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4332)" /> </g> <g transform="matrix(1.0036062,0,0,1.0036062,-0.0865488,-0.08654784)" id="g4395"> <path d="m 1.0625,7.1875 0,6.28125 c 0.4147035,-2.64e-4 1.4223161,0 3.28125,0 5.820302,0 10.53125,4.710947 10.53125,10.53125 0,5.820302 -4.710948,10.53125 -10.53125,10.53125 l -3.28125,0 0,6.28125 c 0.4371972,-7.91e-4 1.5176216,0 3.28125,0 9.288853,0 16.84375,-7.523647 16.84375,-16.8125 0,-9.288853 -7.554897,-16.8125 -16.84375,-16.8125 -1.7856759,0 -2.8492564,2.659e-4 -3.28125,0 z" id="path3830" style="fill:#d3d3d3;fill-opacity:1;stroke:none" /> <path d="M 43.65625,7.1875 C 34.367395,7.1875 26.8125,14.711147 26.8125,24 c 0,9.288853 7.554895,16.8125 16.84375,16.8125 1.763627,0 2.844052,-7.91e-4 3.28125,0 l 0,-6.28125 -3.28125,0 C 37.835946,34.53125 33.125,29.820302 33.125,24 c 0,-5.820303 4.710946,-10.53125 10.53125,-10.53125 1.858934,0 2.866546,-2.64e-4 3.28125,0 l 0,-6.28125 c -0.431994,2.659e-4 -1.495573,0 -3.28125,0 z" id="path3832" style="fill:#d3d3d3;fill-opacity:1;stroke:none" /> </g> <g transform="matrix(1.0036062,0,0,1.0036062,-0.0865488,-0.08654784)" id="g4403"> <g id="g4399"> <path d="m 1.0625,7.1875 0,6.28125 c 0.4147035,-2.64e-4 1.4223161,0 3.28125,0 5.820302,0 10.53125,4.710947 10.53125,10.53125 0,5.820302 -4.710948,10.53125 -10.53125,10.53125 l -3.28125,0 0,6.28125 c 0.4371972,-7.91e-4 1.5176216,0 3.28125,0 9.288853,0 16.84375,-7.523647 16.84375,-16.8125 0,-9.288853 -7.554897,-16.8125 -16.84375,-16.8125 -1.7856759,0 -2.8492564,2.659e-4 -3.28125,0 z" id="path3894" style="fill:url(#linearGradient4445);fill-opacity:1;stroke:none" /> <path d="M 43.65625,7.1875 C 34.367395,7.1875 26.8125,14.711147 26.8125,24 c 0,9.288853 7.554895,16.8125 16.84375,16.8125 1.763627,0 2.844052,-7.91e-4 3.28125,0 l 0,-6.28125 -3.28125,0 C 37.835946,34.53125 33.125,29.820302 33.125,24 c 0,-5.820303 4.710946,-10.53125 10.53125,-10.53125 1.858934,0 2.866546,-2.64e-4 3.28125,0 l 0,-6.28125 c -0.431994,2.659e-4 -1.495573,0 -3.28125,0 z" id="path3828" style="fill:url(#linearGradient4447);fill-opacity:1;stroke:none" /> </g> </g> <rect width="2" height="6.3000002" x="0.97978276" y="34.573132" id="rect4373" style="opacity:0.22000002;fill:url(#linearGradient4161);fill-opacity:1;stroke:none" /> <rect width="2" height="6.3000002" x="0.97978276" y="7.1268716" id="rect4383" style="opacity:0.22000002;fill:url(#linearGradient4158);fill-opacity:1;stroke:none" /> <rect width="2" height="6.3000002" x="-47.020218" y="34.573132" transform="scale(-1,1)" id="rect4387" style="opacity:0.22000002;fill:url(#linearGradient4155);fill-opacity:1;stroke:none" /> <rect width="2" height="6.3000002" x="-47.020218" y="7.1268716" transform="scale(-1,1)" id="rect4391" style="opacity:0.22000002;fill:url(#linearGradient4152);fill-opacity:1;stroke:none" /> </g> </svg> ���������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/256px-doublecmd.png�������������������������������������������0000644�0001750�0000144�00000036705�15104114162�022164� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������\rf���sBIT|d��� pHYs��I��IE���tEXtSoftware�www.inkscape.org<�� �IDATxw%Unɉ&0 H$I@AQ @_e]װ|W  KNa<=g:\u?n{V|zVթsN;y!DPL3P(C B1QP`�(3%� F B1QP`�(3# sY+r$=;s]:Z1ގQ>Ru]R??>܉o̹'5==whsK+;ҩ;n߹%;: D&�k^y7GKXd1H'|dv"DSNi ~ #ZWҁ$\B$+Ⲋv( @Y�mf1-n@֤4]�:g!r$_h VP\q%�綵�ݶpEHSsV5k_tvvD1 a`:a e</eQIet}c_i+MP!\D I8V*cUQƤ[c^oxW W9ZU^~-)  dyv7ͱ8&㹫NBr"(]:E*1Z=*gibT~zIR @EZ$� byMwP:,[F @y:A�rÖa�=c)Q$z(HH箾D=@2dER*Q / �L(j0x+� ɃCkD<&�w�-BYpfu1&0±~L �^*m)Zay,kUJs8+ﯘjqj"'? /iˮbw έ<QY9Ċ{y|E@1Rql^w*?575Hɯ',Z9ܛiiRR_*ejt[96lUfTH; Hj:8 &_4+RiVS/QOzX-!!!x˒8]3_apkVwHɑ`_a,_d25&RG@ iN(=$?]ܷq3b=$%�^3te2f�v^zL ]Ѩt}*I* d2eutpKcV<}$p:bS*S FGGW"шUW(&Db Eya28i&-�R3v,gٲevމ\0Q: EMH`yEtWZEإMgRpyquaH=A K񔢨sUD5bL&Z�Y `ٲe>_3 W(Åxx,v98^`!)O4TW(Kvaig'G/^ re[�w!D3w{\hW(ÈgID" _,VƂ }N?=b¯P4 I5cVef/8?b]]J# E#7;X Apky p=O~nW(Z@FB� qK|V%/5z,ܓ4ΎNU+-]蚯(_D.�Bvvv":(֑i,5SV')Op;< z)Ux'7]ZK<VݯgBQꏬPASB+UNHm ad2+4U+A:sR2;5 fD;#.v:PAhS.sB܅Az{{B!ekV3C 怌؂Pq ˄|B1_)jBQ-C'8b4وA_d%K�===Gb;AJ(20ЇؿGr`7 !5#h4qF %/%x  Ix-G' x4[v|f~/(GF@טþ ؃ؿM02l*S%=!k.YJ|bK[;#v)0jGF4rp)OwmdLe ,1qi%;HR:?#$/pˁQ8q hB4?˲;:J)7`"3R"Kvl|J EbqN#8ėj{aMu bO$4˃W)RJ"b !N<[Dnz}Dʍπ%3 atu,ݧA1!EG4 0w �TCA$q'`0B!:b1!2#u3Hٻ9+k: ^~ g wMƼ`d5!taLgGs|{7+Dͣ3:t }ǜt{hw('Q,V2%rsX֎J��_}^w!Gb0 bmW�BX,F,ò,ri@~) mzJe]UG1u<~)%|3_M'�8hF"�lg.WB P!wn^;eub#G]D|!cb1q}Ӆi˲fc9ȽsvjL&tp s_w!˼" OaZ�ji>+rk!ef%�P�ְ[v7"4Mf~93^�dY�@b " UMR*M�=bޛ.r{N>'*Lk'`=!H$H)d27E4#{oSRV|tz&|Sʹ_mc&lַڱ~.@Y�bZKKbޓv  0cH#QwRz5P0AY)�Fg6tT`bhL&eYat6Dkt,\̢}AOJ~V~e0bl6[z9A<, W5JL|iehF<EY�u`5@4F saX8E(nfJwb|�H" ϓB4bKWorΠ7#.Z}Ch4jԉeYd2ҎBſ=RM ӬJ]MΓOg?K$33TPM)iTt#1oxsRf9q 2ogyopU51զS0IɤIyyT3&@Q?K.sKy*h]d2!0= Q#"^1RG/z"z-cyUiN2to~1/qe6 -dW˗nxg.Jm%� 8!O `zl|KWKRB^kC'ڂ$.. 0WMd"|g> ;kV!/DzQ`/=Ļ>)Dלs~Ø;+aՅ޸ xYI\ !}В,?ct|*ʹwP$"[D⒏ U&BD,ৈ,Zbo]ފJ�ZIK0=SEh:/(k}(3V @IRM7I-X-{e$<_ީYڡދR###vOBܝ7nf_6:N>Od"l7cADSA ,t,-/Y L(ei =%�-@7 s&Yܾ)KtJRwۙw y) `"FM[S>"t/FRfFZ h$ n 37L-6|%Gc VB|>?~\Lu0f@8ƛ5ě#7a[�c*t]I݈RJLt ӊ^rv\ {eaYoyo0D"V8##vov4S!Uk|kHs[;D)I;�N{{{:Cwno޹K@hn{cK_@!h A$]s @Xn)k6O_RJ�uf3Eb_pMViGQ,˝Z~%ܞ=X4f6`e3 4G?! /;p&WzÕ_`Zd�b k8H�aT�wiό�BY� #r*[4ʐRs`( r9X} J)3i` L31gRJ"adlXi_[,#gglHvg/AZTKs+=ޡ!־+�?�m=<vFt(r%+\2Mӭ5͑HbeY -ҿ̹29N+ݲ,w}r~z { H/? ˂͈͈t:D'B\r9r\ A"p#%r(<sG72:+M|5~~grwPW-#%/?H yÎsWyB?DqsRL+(Nw;oT ?�}uY_WjF%FŽ}?IVr\1MDK앯njf^FwCzÚ+4frvVmˇ6�ڟI}  )%t-,bXɿqڹ|�sﮀrX" y}f C!i߲8{w-+0ў0Ї'8킥�{=bBxh$.x7۬>췾1w>^t( ^-mF[�`;Ry d2(HiI7%5 m:1')/hǟBlv.ӄ X)q)šAv3j0=��|!䆧xۄ86yR-2OݱB[Eᅧ̦k/Lh$^~ބALu>x~v:̑5ncͦo)r²,FFF&|NJJG"vyy賺*kԽnFx_ᗒݿ;?ӮtQCwbtP622/Y[Z'8VB^))V.}}2Z��ٷ$�vd2}p;/ʼn|ToE8 U=zV =fYzUǖ"CO<:o��=;0RmdYwD/FP|WՌ"s\d y=gao #}ToE�@zߕ  n=a Mv;܈qRc642^G{=880;> �0_/n|h :ٸV@ ڠ0 :^ZT64Ғnj !@Jx�9Vv901gB"|q3'uv;SV< �n:B>^xoͿ?ouچ'��z~$zs.~y0ϒtz/ZxorS%oSs1;6%ǠfA=MN?A[Nㅇ?:v^z2c�HI9_\.אѵ {jh;N<҈̰;m]3+��!YHQ@LYȡG":f54cÏlθ+~shW߾l�o}=^ ߋ[jѣ_>n8N'el_fޗ— ~Hn)\` � �J}0M;ǻZN,̀ԉ=h(T ~njԥ5J�F1r?zP(~<)\ 6CdADZ�Z_ȫ50c7 �IL̔: LP{Ҩ{ ;004�xf0$T>r�b܉QEǟֈB(Kk X[Y((zaviU=Ar�ڬn"oUOؚ#ܞzTi99f <F\B $;)8*jR-7QX30rQ�ÏJՅ|N_Z&v2+rOvmQ sNM0-G�c?Bp5z7J�`>pĴ{Wʔ-/:hN -Id2rJ;nmNO�TAc>m+uy.HQʗLb'I쐗Tv3i>u%�`>xD]DIqwqb [J�A؋c-NkpTYa}ݍi (>z t)thf7RB1D%Qȫ.<?C׃ [}}'VYz?cCY#E^[66j/J�j|a V,Sv9Z>_%i3 yOCN?gqZU 6d,>B+➸}dsӜO3~/|IڋX5&wG[TW܍iWW+'n_]qTP#溿m@$oZG'Z2mךF|5F,BTTN3-oX}bqB7c5j4Rz/<WW^f2w'2= f!m~ƂRZAP)#� ;p3eԌںw?&^WHx*1~CYE@fj_( -/HL+kJamB[�:>QλGzݳ 鏲�ڱɷ=ދZ h7i-X�^e 9xgd7X3%�u vc[ٶ9MtSiPI^71w/mhu+�R߽a�C83ffrw ! dzE'B>nF>"/PP'okNMV<C@tjpN^:8 @,K7?zqQ@{$ &Xs|SlZ�hj^@6{vC @li^flؖX�&@Xjrg:^٪ &@ 0':9�48YZ "ڂ&@,Ko/BB�!ta@)%��ooZh�blFi @f۷ۥI_`aD"D$2;:mE":-f|v~c�+e9|3ٿ#vPx` X V& "H$i#J�e/ԺXX,V.9ZХS "_ RZf.ˎ^8Z,CO�ԉ=pܘR`G03iLb&A^+HV7}-ٺU|+0oZ4O'z<ZaPP/eN _�X V.f:͂,7,{?M�YٖAZ$ґHu~ND;8d6#aN oF�HI1Nc att`:tt%�0^da/�-`P��6IDATZ/H "DRɔ(P"@@9X$O)!0R)N]]DR4: G|��2~@8AAAgaH)) "0&Mt֬}TP'bBtX@:\�uAgiX"پ}dH,$a �ԉ6*�  \M�^tVZmߊH`tucE%�n{:;EM fZqz pElA@稵 f:CZ�"'&g='�ŽBӓ=;}i,O+?@+l%+a�g6b B6-,:8:J�@;P @гeio4gri/�ԁ0� ڵ]cK˾Io-43<ᤀs^b<D�!q2y _k-$3-ZJl鲀s>9<5k',/!HD5jG @d!GaN#c3KO`w: [_fӘv,nin3 87�/<@nFطY, :s �|xV)9�<<tr&Fs(�d>GqO]nJGO9tE(` B6ܶM<`87�PJnE{`aq�:r=QIg�l'`XDX,ͳy_pnڃ)�mm]9?nX} / Waʭ0Rӏ<'qQ#IXpnό�soJtN#^dGF2vS гݾ3Zw` 0mzBV\h]sy`Xa B}þ˲\;?i+�4)&y wLjɄg)]٧ lV'"4~�(=+-c;pnBž^roWUDYDϺh4Bh ~!w�4ݎA t1Ƭs^�|m6?y`BTC{P9ɏ@ �@$.~O //�f[ah\ڼEο?-ӟu= ӗ�?,(�Xf.I~R8͟ghăJ:FƏXb ''�Rb#�FW�7N!F<?+s2lP,~8٧*�; Lڹ7.(KpֲkR_6,: t|_B` 6-J߶έBz%q_N0[æ-4wYRJ![r(\Z�\ŽMvlBf뉏&g0uu^ܹ OrĦ0G}rgoo$p @!OaV [׏ Ï'Β?2txG=4C]׀eddm /u4&�uX iڂ%$>oўl%L5=T`wĄ uϫ#� -/؝xZ$O|CX& t_8mܳOPܻ3܌p( ?=%[D [(ni.B#mHk?r_x 6t]]@'Wa׾.2 %恽52co~0^v`mxp$vdk`?pn3p(Jy#؎9g}2G `eog;BsR;/P>9D"7t RuArv R244zzwU0T�iRܳ \IOϹ+x_0fbCE= !_: .xSj=-�smoU~F?/0"n0rm2#3o4]ТQ|_fOW*9 ;6a["Aoyy-a_ӎ4÷2~5Ty}`ZK/#{-FGg9k �Eazd&8p/\-N͖` _{#pdl � M٧1?-+X h�l1i7J/=$788ji?|,q'X~0ߍĊӛ>笹4\�{(@jo#~ŷHڦ\P|D"ng?d s�vǠ~XN?cV/ޏYw&0<Ş}'_D ǙdBd2 c~tjw�Žr: Mg?}C 5P"2 g|*zX{U"Holߡؿ` CK&Y N?sX$�*bf{b>]}W E4#wp[Mf3 HjEur~ФLSܺk5*!f'r'D+-:x Ju.WL+Bj33ZJXO!2Ԩ_�Ka ,ψؿRg]7000}u[ 8G#³+l' %߀awqa_:QZsvb�x@r4o gzky2L[|ޫϿ^K tsH& М<Dž1a΢޵c:npG`)II"-rdٶ-Dmi,Hb7>hF"ݤux<N,Ch:  ٞ&vz3m[#V8XNbՑRJooF]_sfiw.㸓P\/i222B&)YB_8+>q8}?O!p5O�!{brX~(ښc8(\T(3i/N _g\{9R)b 3X:&9]/;*LģA;#[6l1# ;vdq. $hnk(MGƒv'$"] eMԩ!¶4w5kO^Z׏SǼW&}5!^S�Rǝ̪o^ßnhxc!L͌lHfvCG( c Sq>%Gw ok_@%K< zzz8ŶtC2tMeWWz R  !�ljAN0�(zzzn.lURJ,²,Lt}3h4JGG�gHkR|�ƪo]Gq'4]M4 ]?g_WVE嚲74.X};L o�980CJCk4X̙2 dYV[umGtvvD\4:;;E+K6= tÿZy,WΙ1OXP":::\op1=waD|�T*UZ籿06nv|+ v۠vE @I$Zyb>/X !HdW>Sv(&ݗ}_T+c?�[<a>vF @b~} @k7̑!6}}w�v06<]Px _4з W\3J%$�4d2Ybs~vle'.࿯ơxk*sN|}sվd6\Lg෬A @pz9m ripڟ\vb)bX7b("NwW/ipΦ}Kz!ʪD1(Gc?>.e:+fz?~w'`5kVXֶ-J�&I,?15d!Ϧ/^ޛ~X}&<08sۻS[ *Wfl`YlWlIJ|JD",:pj{dvcϯBFU`(r? |eqs6sI{uA5&@4ɤ[|O#s.k?Lk̑a6~ {W|-wtZ04x<NWWW+spW<޷ٲ]]] (atuuL&rw/G7=E2Ğ.FL&wj`/,|8Sq!-Hۘ :YVi8UR/)v͊RS!Hԕ�wz0(s܌0J�ZnXBc.f@d2d,p�xpf<_KWI9hGm|a_ @3Ҍ̞y痖,L&ӔΌ�!Xx<+Vf2?,{!T @8cq/ggJb!n˲fr9߹ә+�B8x7ڵmkatq%�O��3o|,lv �MWo wKsQ0=ݯi=5,}Iz|"!�B(Xl' sYM-J�B,�O?.G /b\.7i.�HX,F$3^|q?O �Y'²?D׉EJIP Q(hw0-zGŮv&vQ|. VZCE;0 < +Xp-^Zh˲if[Z�ak1D|o 85cЌ|_9 ^wy-zʿdbHPX, ]@u"Hea>ke|v~%�w(_ŘsXxE>t6vرW J4 ]!wnZ8ֺ'IN!PPSJ�j_gtuuItx2/?5Pe~B4, 4}P.�y kb̟wihVrNuO`{BxL @Mq(iFO</?N%b!IJ,,BJk4?(KTe{v wo۱vmrߑ}*J�jC @Mkc%r5H:UCnjRRB.4v!Ϧ!3};K{]6*)%�5zѹH\ErjR+WXcF*L:ГIw =rە_o'"aݚicBŤsc^<f_)לB̸�4#3A�[O$SID aDF,lzNzF0G?tmHe,Y<�XuF '"!oԊ8k{^<ON EM f&f*H�ab+4G6.Yd +k3v:? eeYN E؉0ZGJev<jYE~P(Žw05P�܆ǘOii�{J^м m]f'&xzGP(Zp8%z5saX~Y gGbw'|Eyo3X(+@h ߡ2OH;6s[µFA(_B:DJyu|ߜy V(MFMB#ouP�x+ //(+@h-&_?]Fk.x ]oyն, l9Fuu8x w8}EA/�MfFQ(څ~7W=׍79 .f (!tz*a aɺ�vSmSB>E  P�tʪ];{j2OzYk7`gI!BQP__F׎~:t¿�w6&l/怴, ٜj(5 '/F's?epLI�ξsxٗ`~,E!b /`/? x5ù) ǝCg߹q8ϗSŽFsHIPLFLՅX1Sр8 ,m{ ^heypnhyhXsW%|ԙDQ iQaԠtf=oH lCN=<{)ȿ-I绾 _]=/Ur*N44Xk(_+ˮcߓjϡZcqXg묞o Ҟ<];Iύ+WP!tt<w $o$,cy*njK^! 閝W5]vtc2_!X)i'R-ݲ -,O寃{5c؍jqt˯Zp݋4񌵱ɃCki MU'!J‰HC@&I I('` ]{؃gZ/Eѫ`sV5^M@J�]J $:] U l\~k~W|;׳B!LռO,;a �TkI�-?=#!E0G- /`FDӿu*CH, +Ƽprs}¹_r7jmzxn)ts]ߘsK+Ok<>9V#U疎W:wSwca9ιP.rcaN$WJ٦~6kY';_JNp! T@ {6EڳlK ڳW-#Ym!$�T;\ @m!�~~Zߟy�]7ZمP`Z@)w^u 3@�( ExQP`�(3%� F B1QP`�(3%� ӌ����IENDB`�����������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/256px-dcfinal.png���������������������������������������������0000644�0001750�0000144�00000056323�15104114162�021624� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������\rf���bKGD������tIME ?6�� �IDATx}w$GyV潽t9(¡ @1cgA&cBDd0 ID| w:r{'tQU==3fgvNz7TRH"E)RH"E)RH"E)RH"E)RH1Ag9ճe$Z2!B=SpMFw�5lăm0G焄؉2hd|2ezs +)oI1~Iy2;i'/} xMLJʗXj# t$7MbBv&N�?xyBFO~Jǭ]yF C wt,_xc|.<^xca¥.}wI ұx>36Xޥϟx,1'_I7�p{7�+}0)w�N*) "'M7}j헭Ͼ|oV"P/f3 GV\eti+@g+R78. XH V&YǏ{?I@?C3ƞ#.,Tהȷ˾KDž,D#x�UN<G1\(B!n~?D&pq1#芼 A{{'֌& D+,%?8PB Fp4ᣙl؅>D DQB JL_\07L+//)Rb6nx $Q !n.}Fo!ߏ(xM�c`~חN�_|% Y0{V:ەڇ:VpI:%iC�/O=zuV;bLPW7 0gl̛7lxAI ~RJ�3�y�;di?Q25&�;.]Q@;:hB455E ""flȹZ/ΏXe9IaxVݷZ^]ruBڕW.}.R Gv#Z^f=+YKwSH_F8 ep }\ڹ 3~upJ_Ũ7ξV|B,^.FoADp $@T )RLX/>T@ʹ' fŚsͺ8?`xYw $q�ɪ�xٗdr*twD%!. ')R( XAH fu`go/5әYgCEKWo5MMMX|25ɰ㺠TS E>&2,]}(x9u5�l@)dr*d3L61lRHQ >8�!mr,¶c=( ʺ[*>c";.Y~2@�\Ūp3sw)4 8rvqp\g'݁iv`uQ ;�Ze/YYuL"0a霖f\bZ}}y]u5gy'GŸ"c%UK;;q)jͼe鎊�d,>j['"dL*)R��{ً9ft^Y"�6ۋsOV`�mDxֲ+0Zܷ&o1۳w\iE)FaqX2+8ΠhJ8#ج2�?{ A8H1ȱj0dnB X0Ԓ}H�4clՉY8̪ )f+'miN+}I0/09ɬ�L"ܮpڋIb*jY.SG|1ó̙k%GpY2(G�dL" v%pZZ&!ؗ%�|HFd_Rh$Tr<+]HHKYY%:\i)f_*�n>[ cRClkmS#Ě.%8i B|݅餻]&3Q0dc0bl*1äV#ÔŻ,AGpmo>� <j#N�o~%p13ii'q,-}9a @ BODjcg&f81Di%EDг%(Rt8 Ge{{]  .x/+n_= E_V$�Y�ZE4AXiFb RE)Z vf6Z\]0؄f7j@fHc)K@@G,��Ωs'G@�ĞW%=59mNj XkvE &5\lR2H1$ =8TEgX)v̰ &'ah/#`Y5" [0=\Y�4egǀO)<M�.I@R( ziz蹬jĺD^E^nJ)lјio(ց<f3mh#d`Yn@@ 43h( AӔO2  ԑzWd @�|}Ս¸� @:)"EB k3!p ,2,LD\Z�ZCӝ2P &>=ҰD,sR @[ сL%"t"+!{20}|0ȑ􍠇7 ]�AmHK�)af`QBo! hw,ʽS;A32 >s@R|iY HV vl@JʣL"0Z J'@�G�e2؋fz&)L<ɐ҇_(/  {sbx ڊ⡽0`4n�%�GoBkX3T"κ ?}~KG.o>DQ=Jvjj)C|K3ẍ5l Kc�m-N5ǣc̞Cٶ6d[67#85,Dš(<bB!X"袋Jz Vj0n� �.2&z,FR"?8Cڷ7oDc?hz �P :ʂX q5^H2 hw ϡ/Y>!�i=ǝ>=]+VRǂhiP6ʵH4wt]Wy1A ߍA~v584րZ 4AHBX0PH|@k1-@aVfsjwʩ4gr4MAp˵h(Ѵ$]}-e( w<'N �_ "E"\:>#Y3_C�uSv-sd8-XqXzsduJHr-->Ttx*\}p䁻o_ȫXC� `] _$05 D|�<M�V4+_?,]V15U0e ]krZףoN/#rXEk`ATPkR@zBS?FW_f0Xėf/[>-ƴ �Bt-]z;^fy! `\`KҲ$ j`Rk1^J؍Z_UߩuFe8’ϥlsKݞh D"܂Eg_@ :{vbǏ}= >1$�$A`Z` "lBmo|p]7^EsAbY�I "t-Yw^GC=GΟ;~@de, :d0[[7Q$fbm )>zej敯IW:έM>fh='ʹWa/oD6Hb8,8hm XABc D09 ~<{Pp^y=j4iG�8C^Jl|wC>va V� Hl EmQI뇑{~}H�'%<|qHm]]61c sN˷QWo753\LpY5�}�aa Иe[f=Z�d9tO/xO�|?O\=TeMDBP@VCa!)&M~ƪeqh4͝�-\{ڌ)X "t?~3mՏyO GB\AqnHĺ4@8_E`dLKV oEMK}[q_E87�uWǿQ.١ 8{)Be%.xP&>KQUq>L_)T@{hn| T-IjU[�L! yaTo}g ]NӭD#%*B`ŗS\Dž#h @f #tl� `BJGsG$~ݼ8\OѬS)= ܏~= |/Q%REKR-LSt H~1OQ}}+_*KHH-Qq]i3y> H3>O P~#tum"ц<UR88_>J>ٟH-1`g9Dz�_G*SK?*zR<;w>.{' 6^bK `^>v e.LԔFr/M=)*Xm}ƹxE3uG w!%q Ԅu!+BC+ܔʣ7zT߼SE_J<Rٟ4T)x&� !Nyմmq7Cpsi$�&&@3@E_G;ރ_xM}#ծ̪mPH@@DXuKeBlz&B15a`pfv"ddآ'hY3D E�jEgӮ8[˸s'U}~Ko>q#ұ VQJ�Oź~|vu90f +'Kx$-<zf=z 93rf10Yb ]C@Q6:@L"DŽDkOLȓ;Ĵ0ߤk j+I@JXO? 4[SE_W>O5jiFG PCYT4 W|Z`S<-Y<`D4t []{hzJ@¶L:7%ĵXJ!KЄ5`:,<8lΫ-8iS'!* c-\^oCJ�k�WdBW|O~?#6`'QJ`񺳒ӫWƤx5׍5(Sv�\K{ЯGj�R C /fO#Vcً_ϿF*7jՈf<V~$+?҆@M1 "WCsc( "M$ф(T)Rob tQ2yֽ#zz y a'^5Jl HDg2eBbpG\W@67@pDɜAp!Y8np @8Nw0m!x?s\=h}%aZ3^s$ߞϷc"3Zibq4iKσ_( <`)kma)!>XJ X,BJM]]ffLD['+�8z�pSۓ"ӄEKfXOSP CvEۚh[ PhұAW@:.2B%'#9tz a0i_sd]*5Ihצ8,ղOw*H> \oo,D I@ؿ}vrO';z6JLO �]-0ρ�̝{÷7�E�IytZg�>�ʒ#]RcBV@/c΃]֠RJp Ԍܼt5{1:O8/T|SwCljq3)q@+0U`UW_V`*iZծ/w<n17p7Fߎm`F 3BYJ>{202Dz:HBqb P> eց$=+M:#FSE�AWF[N fa66cf Fa%W"^3Φ×3beI M�AF+Pb7V5V'%_ ,~SR+_ĞͷG6<mͱT}:X}_=ޤpɪFЃ*RGM�82 p'�e-�4Bu AY[-D}Ҭ+'*y]@l>De_o a_Xc!uy8lx~b5 \HAƭWך.ad@h]FGD�:�dIM]p58Џa Ab!! �k59HEN̚RksSK+o ȝ.`>B^sC0C0J\iFGdF<Ij@~p;~{?o�)\(fGoEZ~7ًG `Ah1:�=/�fq 8"+Dl9~"V'_EbH aǽXR5<:/NlaT�_HK`j 0idm\t,\)a/w|mFn~`�[nowy&HX� @�Zdz !@+2.:2ڿ%��"QvƩB�8`!1C6c W o*/MXqE9ў~΅@RqEDЅ0јV~fXU)&Bk M/B@`\Whz%/ZwSyAL�SqV1d� bϘV<m$(:%  &`Ñ Bw'w©SBKBw bj{PdPCEwL6_~"!ZȓΗRb}/|~U]+WX¯sl !{WYg RFDe%(7${&h5e NAT`x"�!K@k Ջs'?'sV *̎X7aR> ƵmSty#DߪO߷|3|l P V`}9*|:N�Ѥx%�lyFhۨoa7Rmі�P$A>5/{aENմO%|ᕴ?_*R bw8ĵlk}#nzѕA;zx?'oVwj%9~IVB?J`ߵJ PFf`XfWb�m%PJ”{ �!U"" !KY/k(2\8⤫0e,ahW'RDZ&=fJ1#Iw('؆Ǒ$_X��'|~ Ph掼Pcf t:G +oFf'hZu6<?p51<mbx }}ҩh?~mA&�� �IDATX tVۦn=Ϙlb`; %i։kuzID7Ynt?wܻqd.kzqеb P.Ie^h5B1""0͓@S7~<w˙ji$Nwj8#yx-@K'4c r;QN$])Гˡc-D)̍ Ihy"/Lݦ\z Jbv}+>k^QblGZEw%8ǻԐa HV>(P`\=ZD]7Fsܱl;oJw1Mհ.b&~ {�l]K@g|'F5u1 G7]#hǾӡd-ZjB$�Z#I�HV~1<'#hO6حٟ o0%v TD5$…4kw7=kH@ \x&JXo4) 9~T&v!ex<xza~z/TWH|b:M@Vz?u-؃z#I+^jAyѶh$h"d'`|~6WJ00{_ m ]/ǟ�$ _T -:a&I g;6 p„JZ&byV?2KBWڷ^`+ iCss'GG:@Ɵ?F  Ejl*,cEIG7o`)Ls$Jǒ=y-h& {IEL}<1_ M>tڀ./aʈaK?Sۈ-S�h;K`.7#[=k$G{Urs~um aڳJ֚vJ 'M3ɓ ^m %> y5A[d9o|<`C"P_XA $ 8xO_gB^Nǚl*etI6!>3VVMm|$i'|ۏxo CW FDm~9LZ@În,t##:2:VEK"% s-iǣ]+Gf<Ȟ#F@urt�W%hزLL�03gfrF>}NUt lڀ?^KZ\if"}> k5m^h a寴K6@,O(3M�Qac,MJ7׋?))�HP[lEjRםKd  @` v#I+3#=}TJ;<xfri3C~Ӗ�rՄ0h%(hއž?G*&8&`f;0gE: HI ν�MX Ѧ헷qǭ65s�Ī g 8WZv+NGZ<<궰-W*0\p1Uzq[v1PG0lL~`�~Hq!1ߵ)o00>M^IkZuUڮ@kk@sQ"B&ǟT!OJRbw$e.ı4k#f3��բ+ } =7JO:?D&ϼ(0C"`ǮgF0g]Mzc}qD<Cϣa/h䃙# "� ~B8b5P?L+"{ˆZ.w~>bvtD`ip?ib4B^-rƓ:ov E�EY5 {wH:^rΕkc56iTk/8Cb&Mi'aǝ`'AN=]3M5fWXAasU hH;$+2Yt}F6�L4\``iπ.#Ҏ_Οo$`31�LPе\Ot3!p[ #u$:LOK;i޻27|=&P0{,f0z'Hֹ#o4u-VAGu)l'�?ǎ~MUx`@V􂘩r? Ir�h3ٹ#RV Krf|4.|)eʌ= +gZ# &� [ѦY&hQ�N9#l&Uaf=rz$ϕ\J"~l*]+%vsv(g3� V4ph WIuŝ`]7�a`K>c;z9)*dq�+ @8=<Rs.ܵhӾ|U7r ÀAm@-Zڗ>?I``[Aˌp䞻 ☴yҾjB^.mfF˼f+�X@ Ҋ <r8xߟ,"?H @)>~1'yx[\7m2,�ڗ 稁7 &.h]2Q.etч\-BBJ�5?"CG v4FR[D@<@+u銊2w1dp?icWi % Z{!�Byt-˥ � PD+*`��}$ÜWȓff}jcYcA $L1 el% ~@sXuIRc5[,䵀}{@߳yqrE+<M$ݾ[! x[A�X�;`4oEd!7+ E%dӂX(L<vZWjϓ$!�ٴA�#T�1B#`(CO?VKiiڪϫ3Nk;Di&xJ{j#|iR L(hGm06Ν޷6VE,)p- 2_`nhHPIϣ3jU4Vlx$_f ~lT(,b,R 8�!;nUrX5Xc ٹ1L&̜ǂ~5@BjAf(WhN{{͋w`3[9{կ)H+!@(QX̉j<hg6U;බd"wp?6 jH ` {0ogUAOv%WNmQBXJ@suo0h@ F>w4A IZ=ƃ5 f G(קUc!%r0c+4&;+d4ՊNKKI\-ލ�?mM H `0U�b~Pv$\pk Sh֝{sz>PS7`dH `0Z%ρ\f _;^4/RBfq. !Q8`D«־mߠP QZdx^_/@  H< 8]݀S"7Ạ`ijY,:IH `W)~G\45qH�/+PPP("/"y<7<`t},%wT8Ll"e45C45f/RX1K#T2Aj=Yz֬?zf!!a#%6A4ijܬ:g57ThH `0m ʙ)侥Œ?7 x27ox2? 0'd>XE$W1rPQNs +2݈x8uJ5�H ~n X}]c DTE`V9Cdp[බmoS(RH `M/|G>PaWDKF'/pM#�ˊC ( DpZභ!]=$#%Qt�d2 a0p4 jrC~mi#n@r@ "wnWфL{܎d;&<�AwAo/X$ #o?V:PNxPu ;k2@WKC/<[ �2]&?s kv}jvѠeBܗ8yF;r�ശiVLP5%"-^XX{^]GeÁP AxܻvBYம1[)A` =>Sqª{k:8hSSo.YN�X´X$kd &;z#"Ypgu4%DFa c"F�e[(ij[>l%`F VԿ"A$'6pg�F RZ;;P~XDےe�o!OZM �hi|�Q";1y&amU [V0sɠR(;cHyٚR08D"crLʽsN;# j3w! |5C`3G| A@y !žcvoʞ ִr4}YD:'upJIH vA2ɪ[~.]Y,�woPZM7Qڤ>{큝['cgm qjH @WB{Ez#s3r{wB>Zwv�;E|ZQܾFwN8=~40`6P8|�^�u 1� &PGI B7`pƐ'!03u5m(8Sh\gAJ{#mr >gg7�;3MpJ؎/==7_<2@SmkV@)R� s9Fn쁗ׅF}DsfuA �`#}sY>Hz{{hWJbҰ袋!ZZ#q�CB)f4}܂M(;~ zh?B:N֧!p<|sc�0msM;R8-A @s$`a�Kǎ Ivo?44ׁ@S.aMA"M,XM�L=w_"2#6Q`߃wx?[6x`7` ];Z3'V1qk9}R@sOFq2oR+ iO�\,x`7[6;r ⯚�H+j RD,*0з AB`@-K J %z<v"Iǎt @G8 u/'(OnW "p0=��,+wh0I`wi_*0K$\@ zh~K3׈10ZG676,4W01m@PسO<T&>ͺj6̻,�8Rmg5q� �{辆/-ֈ`f%)O�\)4@j̇V j"�.Nkc � 8COo;}�Oa, jAB ىe/{~C3,p1ooGe�{EH蜃/ ^}zI1/c_5]aml"K0S1Pؾ_r-z~!G\ګiWq@ ͻ%G�w6,e::pM@Eg+0uڋ¶'KBbIc󉧣ϛ>?8 Z6@ R LRNFN]?(H]'�f=TTШ7_jk_*+.](5o,(W+�V@�y8tj1}$Gy+jL#&�9ЇŽM6T o 1D 9 ͋OcLW,@ZC[Xfx-o pӹr V/#`TAj$�9<(i;ZX?4M�cFvXpK޻׾}01g$:Nxۨ;[ͽF_Ѯӝ�+'6Cs$a|-/uci3vV|k8 P ]e0ӆ} LcD C�~!v<9~ >P@Xt5(`#w�hm뗐^%Z,iyDA@X�;�;wxߘHz7fK#e?Wsݳ}Z Z7[ײ/@v`yry=8;&)7âq<rF�ہBnb47|:W4Q*׶YX4�`ơ_ʂE.95 VPֆou_-V0! �7 L>j⎧F݂l;&G_LucFkLC8m ;E:L6LAM nلCF�!p?J@(QK c0ޖdz`RK=Qܵ@\+;xTw[e50_I8[}`f[muq m(?48M87R5A"͇TF!�?ݛ I2hCk$ŘӜn,{H4XS_Oo@c~2_ z}̍N)3Id@+n Ԝ�`?;Z%2/å`4eX~g) |[&ocPہ@!%j`[�۾ssCGK|רeي1$0�5P3`߇'ĤR_6MpϳPJ3Nk?C9Zow 2I ^`~G;E'1wGE _SNK<Q,ґhjB�r;:}XC/Z_ a?} W-_h7hGG7(i��³>ew*(hډpL=Tv &�Xz섷'0"6M~f?X5tϠ?b'ˤLXU0IVʯz}�o!in9 -eA@.G c@Ed0aCv>=.rDMk4cUҢzA85,疯CD]A p"j}W?{uiuLϸ::뉛[2D~5XA# @Q(rҒ ?( %4%_Y ֯ AKMALE2gv(ࢯ~ZVl j%#JdPoR3-Q4#]a쪡va8*녁ge.4)(n,=/ Pn-�;\8Sl V9_-J^FBҊ QbTѠKb ��]IDAT9�`fdGqVB!j3~(@A - ;?-H8nТ7D&;WR?CJj?޿H K/<47hVpE8MX7L+We[@T {{0QB\uE~E>1C ( hnL5s-&?bfYgCڳ?G#M 4/TyPMMm߈RDk7-+� t{~;*;L\=<ͯ7<!  -6="'8ͱ_7bŒE&�"I&}G~S`1#X /9o#>s_7際 xq)ߟCӟBj$o`JW$@ �0C H`?ɳo>uhA^&,rz+7;~b ˫"l&CpG!.c떥QU_Ueܢ7y2P2@R~ː#o,?^_*7<'ۣ1S"t$w\,Ӭ _@N*L6v}s{r=\A/ pIk ?L! 2/)5Sqh^;F|ȴ<\z9s9nK0!BT:갤R7 ~N|]J+:؁V d+<{0 rf6 %!IZ'f`\U|2oYBK@fqeאMyG=\-.(�V5f_d-.vF T HbO1 0Y9cG87_o6O凕BKNbCPja*}X*Zɋ(l(�Nn#dw/M�3Q,R]�iuXlTEk1KgCL]mos{vZuaZڏS]Ү 1�iox։ߥ9S[,>:;n9}ana !P^O/(0~M,@Dp !p2T`_=A`{f8nM� u @h:z6u|d6P]Klǘ41*`b0gH0\zaç? 7Xikʗ+_ ܷ;s_m:`S0TMq٢S�Dc'Q~$Bt}=-�#A e mQ7dݍ֡330Uz#}6<,\b,�9IG1W6.u( `|c[n:Vo Gۢp߂>t=x?-�#2pU i5ݗ d[�U .[&-Sd)<A@R28쏟ࣨB̠݋]%YMKL?-_==$&j@YW�*ZnJC"oҼssL{>_~_~yI܁۹v؎|_ s ;%�c�T$wi�3pT#m 8 t�Ϊmhi }BoZ!7߱ %BY~?c]g6i_|m]TO;in_UUfF `pK;·u6PEQ{?�/ �Yʵf13ZXI"Rʧ^~0~Ć@�L&̒Up.\E& ]ׅS)>]_ÃWU~5x⮀d\̪}Cf08G|gn&qGi%5k</X:E{bxjX3?�ۨSױgU'Dڛ#Ѽ$$ C[追qN銸i(0c }*ǜ5o-!ȎnaC'GBzy�oT wLy$`}Kk}]}`đEr۰ )@c~>aH 8ϾhPSd `)T7R؄hpd?dZ`o?ez %oÁ"so;�:@J|?Sgٿ)ƈ#wߎߺ3'4w]]3 j�܍& xO2Zrًƛ{]aw?~vw_;vk0dH-Zo3aY,вN9H `qg?[0"doUߠ?Sg>-8 1%~ lR`Ʀ?|_%)LG?^Iϵmn356  2%I�XoAy3u)L�+b7>˽=`/V~H1&;?5M$X>l:O&r;^opsnzÆ>&.36 E&J�`S8;~ORnHǁwq~zd@_Vj?7o4$ SYNP6 S=˃w-)݃׿}JlI*FBamtw>Ցh )z3" ? DH$ ᧿u,=E1Qp ޴2Ic>L>TG ˳fq13c'!j_OMqa~~D%0ր‘2:F[^{wW?ՐZ�U `}]}v/75MHj,$]M :S Yx}xχ_ۖTBJ�˗{#+jN%tA {k8 �Z :TӔXp?)z/-�S)$sy|@3dMxp.c&+jg`;;.Pɴ#u.&ZuY)XV1凑t FͺTOI�f�ҒKv2ݿ̫pz_@d2uyFDJ�n*9Dh7&)d0^3u_-`g0(gc-RP;C'袋'13�\?~"w,-G_KDME R?U=uᄫN8.(08oГ%z�G⳪LBdK;}Y{~<sq›FsN=^TW,`F[yxp�4Pٷ%Z?5'I.X3| 3�؃Os<+_FZp3Æ3�3�Xı{±;{w!zv }x%kA��15=݇#`k@Klvj'�Ni@~} Cv?ڳ *FM^jC9k�P5?[HDR[*޶}zae/²:ÓM?Džm'h'�V(j{S&RTG0YnD @Y*aZd1l-<3E/}jtL 0=x<! Ƙ&o@ԋW4:7OC0;>+pXtנ!__Ϗ~>\踋Lԟvj�3r`0۲}�Y�$,v7>X +" A Q0սq$J@H?߃٧gO ;]ǟ){&-r[7p~zF9Y�BGÀ= W�`F0� )&)1-P3MG}D@ZdпGг!/i<9}fv[w&֜�rz1\n߻Qܳ {k+&P=L;#&A&"og/$ŸPa" blbˀ~"xGoľ @4`։'sjtuZkmHr&̳W��?7>} w�Q<r�<4� Pʗ` <NV}4u`zQ71[t<z"zt;V j 241ŐH ]0�2rqh[mi<j=Y]vviV v45éau$Yu ="M/yGgƹ[O62 D0ԡ7(?vcnΥLiOD 'KEL Y;Yp/'O7{vXGvO{ܱ#n��fSJ-P"`�d\+NLPR%<O:w rP\E~$  'PK�h EĤ6mn{gcQ_{c�BlG P.6!�w$s@8!S28"2ʅbd >$>r�%8q^k{7ag{z~x`TWtUW4n5| ͫ1_Hf=ku$YHHc9V@UЭ^;z | T/l+ՉHECHEu$p JV %:K̠V�ۙ_ R(A+,_;tN_lg@zh h# f@]'jEJAވtyHhϒ:^QIؚ^Tpz gyYY+EhE+\@1edfVuiDum2re9p.\ѓ 0=oX^''ˢYmիS{ 7bJGvMq"eq2@:h+O22VY[; # ›Dd0Tb 3o\]g [Dсa b�RB#$hftm yټϸsS/N)š] i)�ߢw5G�nx[Z[ vJnJDw B00=> t2HI�FK`9c/ \ 1i@oXǑj7 UI5ɾ689LgXVe0zk;Bf[o<C(~7! |ۏx M4ip=XEN/9]X{vDaFY*ڶ,e8j_=B*?}@"=S`N fGY̫p fj l+:%ȸ7WӮ[hW _g&9XͧPq,m$@9)$q_Fەlw p[SV|UPFಋ/N(Seddl0$_5Ɠty}niZw2ʳ.X*6bRNFFm`(g0_-Ow`Zzk:h`λeD1de###c=`?3y8kR�Ox:7\|dzU&8w� bnAkR��C(p+\[L&Y ddl$l0ġ59VkV�`'.0֖-J$+ CIk_C Z_Yԁ`ʖ>Y�{D.^(\,3GlY2pFF4`3oe@OFzX>vg\P81L'j-H̏32ւ# xi",F<ss[ǖ>f=x To,"lqE"֖bK+"<:9#n` svGnu[�Ps塳O)4b<h$(VG)#<,vT#@;09tx?)I2+/M3e Ӕbg1V5T' h]a}et{pg>tmW_~ue1u{t44C`,JhK oWol�6> <Ϸ a$;MR z\9b; tm9 ㉾ӐNRP_o^ONaui6IqEq9%DH$ߴz~ :]o[.1n T+751\S~a_<{/(<m6-b#ք [g-Q>{TXˀ7UkeJCKK@l]ɫ?yjA¢ZH %hΌ!p) ͮ$̋WscoՍ݉{dy8~4^4_EfsΥ-h&I] HQNnSjg`]w Mϯ%ؾ?;|e/)ζU ЅmI[ Y߻6죮%mf{N̘޺cmO JGz䠲C7{pW&ޣx&)>^WGL˟6kWXLˏ\ V0Т⊅\=̋nߵZ]}nMˋK} ?m6GȃkD:Wø};?T2xVeSV�Y `Y-CwM]zػwx^eL~5QTw�Z+saI܀6 0cGBr6Z960_|q8W# Y|ܾKW}l_7k쯺 ۄ:t$*ruW׈zSE,Xk!p]GTAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_a <����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/128px-doublecmd.png�������������������������������������������0000644�0001750�0000144�00000017365�15104114162�022163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���bKGD������tIME7K��IDATx}y\UwRkoIYl@MD6eQqeMy#AF>*7sA~Q!DYe K$@t:Iw.UVuUuUJ,s~;ι<1y *OG݈1UD#T9s!!BrL8ߋFV#֝8_XD/S(�0 F_ Ľ(s/~IX0B~*P>?;/~s.JDWpf�zS-B^]EGO[nk*Tb "0:f++A^pŅʙ(D =/|\)_B*(}BBqSDHs(|UX&*~%-#iFڱZ $[~6ꚜ@Xw˘-Psǂ BƅqI\}1nQeY%3D=)_4.J S>*>K/8))3HD[8yQʹ5`J}Upe ("IG"/*2__'ZR ?R[BQ0 -ɣZlq+Hs(t5QE�WOUIEN f�dlol{){�*Ыw0xK+/[NBBi Tܒ0/v:eW7=|x+@E'3t/ϔ اl*N >^"KBqʔOq_0@=--:0ztvI]3!e @vsYFmaЪF"B؟f:ƤKzR\wGc1CBh0 IJQ1P�,LhkŎ[sѦvK,65-$3(0<f @BjvKe +Oe> ]L4H�iL$ [V x 1hpAZ$r& kt!\y4?,ÚEb=e=Bx�G,|] )ݎ0:3ӎ;ڽ o@/x+!3rO$%سWy  ^)$0,'ưp͚u^+V�>\WǸ,(FA@>kl<$dO^7grz_qyRM\ &]4DZPKQ{)BKbh(xJ[Oi cʙܼ@RwND9 k;sf`�i\ػރaSYIs?86M&fmېRN"3޼ڟw� Yu0ZO�dX<WDui֤Z8l�PJm "o O;�3viZ \P!)e:|1fN�[qᏀahP(4cJcNaYcA8S*yG@D"X B2#3"B8�dp™~rkv_{~.D5x :Bڡ:BМ3'̌L&o b�FteY{8D"K1]@%H)fy? A,DH$ sTibq%~N>P=dKSADD"s-$4<D"8>D%c92<bs120~x>7 hkB]KbfW`?@%Fs|W Ήd5FX+"\CCZ)9]Xo֎X,6jJ.w_)UMN� Gx<#_xigEGkIFUt\-nC,&-ZI\_E4sV4jJ�f $<cci7ښ˅p@�ȑ"1D/cŁ־�_D$g3S{. R<QϜL!"Ō_OoaU~9 ]IhqEADT1li - _t"Rǻ骔(DRSdOܛ6 cV9U OPvԱG?MՇ/hTPN_<}U+w/'={ n+WC3M<.M(�c@bNk9G /Tm۰- ;1G W^fJQJuB32ې޶֞ݜݵ Xʶ -0 r<M,Z7RJuwwD$z=>p{ `�̗ ,&V(>h-c]8Mgiu]DϿ}9ȦSBb_$@u]z\KXus'/"̓<i#t@FxA 3ò߱V:\x6~ ˠ7_f6#Nz(%[iڌ#RJ!|')sg+h;3$bqBz *žuʤ 2s�(BQJ)P(]^ o&$d2Ch!!֪jwdy@/<F-/mdٚi@LLJ\<sx>xWC.`0;$Ym? |4gjg@ `u/qI^xr"C@_|V9}SJ]wG_:^yR@U1>J �M֋O�iZ1sᱫZ^*c5E7qv@ ȟًL&Sԗ3@u:Ģ0<>p#}ì~^˫ޝpwous 0䝷2 $hĽYJbO(ZN?(!as>u`xl:*j4eW LGXZ~LvMԼ_  uOsKjV-w sJ`& rQr%+ ]?[|6Pm :�(t�`q Ȝ{ rq_ 41-O[b ��*Lp�a~e y`SB}o-[h bANj/f滏v79oZ_J2kOl)��jP7h RW!0xrrTK{id= MC��pz}:#B83QKe5 #7+V;!n/7�5ּayB^V镔\9R_5?Z ME��Pu]+K-wOJ ca 5=UjS ܋.ɧk4ar+0 Mݥ̓|BK7, X>ByrP0 t 㯾԰,3�.ۛN42h-@DbjޱiHm|,gvj4�pߛ-uX_.<zu.[k)t99a 3@@n<i;w𥔂U?%5ܸ`v3[6Q5�@n�['e(kˍ b"ZY4M}Cd?khJh]+|BaA#n,,n64'�a"GORJ@4i�2�&Zt5%Õ# �� ө[( &'hffNM�V ʲl ʂwu=H�M�:0!tdf"4/fkO,%d&7ҐQg4.?JKӘsdwyt"C !Q%�MpfX&Ll%(z$N&]z593h#Pi;pƒEX h FKZ �d3#"p#u 9F-؎! Y,`CaQ{~MK�Ѿp>T&Uw<-m|>(ׅ5:k4Gr2 a--U6'@ V�I8SW!#@tiSm#w!⭹RNjQM � h98Pw_"vs[J)E-vZL��R##ZBSVRpN;-"8}udzwb9@u&t`�KVmO`M;տDήM3$ܑp)= v�Ek_w\w>x %rm' u!(ARBvA8P AY�{S-ew,@ vZAcn^.ܽ:S!۶~@{m9ln`V gp'?bӪ-[SjE|LJm-P b0f3Y\ T6 gW!G+΍>~19 d:`[n~42o@{w]R), (رXWՇ<Ld2@6MM/Lm#@�d2XtyvD !tݻj +d;ľxӄa<~crP^:uk7fV P)X)vھ/Eܿ0l0 c##N+؃ ?K7]B� pYfpW ڣ:Jq>Ρ*5ӏ}?Rzej=j&�[8;ނ;4zw]o币<ѿi<v`0 �r~uqMQ{i i6 �onҎ5%7p8 gg/2/?X7n4c!/XX!Q8!}ʍ::ZЍ_zOnJaߝsd'sQg`փg6{v4X ~@jqS>krp�'3 r ]&kE}9si|`e193tﮟp33$Ģ.¥}"k^Ƚ�n̬RB_˯bR/њ hn6?|_i{y7{*X5a.wfm\P�*MTu _D ~Rhi"3 6OlF`~?,$}.Ghg/fQ�]pw#1hg~!+(d2)X ?>�kӆ/Ex@n LVt=N=]-^}qgDc.%1�@$Xq8$(MG:Hח"CXq۬}̇p*E".JaYlF(ނU_V]u =0i8cc3gϞGzŰH C $D70B`3 {=&SւfT@0z7X&_(opύ#q(3#²,躎ο(A)mDfVNn*w94uwGv�NiD8okW)%l.c!@[[R ɟ~'S߱jX+[K|sH̰[`4Mm_�. c.{_ )} ICJͼś |S4 kSfWC,6@{_O:q,36(Kt 4D`J}ˡ]s-]?.eufx3�HaA+:&6@]ų�H@\3 ciP 9zPz"O>̹kESadSH|Kl\4%=lXIд4 mmm{ l<"Ռo?j.~L)  uR;Z#G[[[P (tH[Mwh2o^A_xt:ůAi,@8Fkk+Wl=~\w6]Iξ2ښ)8L؄T0M37bASe>n;]Wp#+%Ѿ�L&B\  #,\ÿucNը�4x ]&,z#V B0M*9Js$Oo_]BK?sY#5Bt]d{7w)ϙ�^"G_~]EW뺅!3ef�D]aFaΚ#pYncJ?Ht~|90:us/z O"DY (w(x?",l``)kw6cu;ǟDG -GJYhuJC�Μ2J48c~`p'xyO?䎷N*<j'@1bUZCѕ]zk Vhx#'� x'}w aC!. 88u% P 0Y*a#Y4�HCkwVXbD}&V A�\m΅ڙGBeE dIL5P7�D `דq&m6�ҒY1uesgΣ,@@"f½j,�%YAV@C'x\8Xe% p]fQR `I}\؊B2]%Ё<5N@g "|RޗYګtb8ּ%hf�H,4RX_IK H0l"q<f@ :�r<AH�T;加vܗtuԸSWu](%3 QUg߀9O3xKa/<OH{';L2 /+j?)ST}(|}E)JW�`�('."‚-"b$Rε5?=t檋|++Zm) P@0E^I~b+$7_+$/KM\\| E)pI@/k< "fό+YFP33VI5*!"҈Ac�Pb˶HZDJZ2S|OLeyc濗[!Be+ - ъIkyy�@YsGWDMߋ7rjsFy3#Ɖ QW"pq%ʅEEfػ_V((O*?|-jr~~˥_hTWpfF?C=-uZ?څ7\ wir_D#T9s!!BrL8yc<1RuSÎ=����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/mainicon/alt/128px-dcfinal.png���������������������������������������������0000644�0001750�0000144�00000022776�15104114162�021627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���bKGD������tIME5"�� �IDATxy%Uuk3ݡzlD@FA|$/?O38<5!>38D � ($34|izC{QU=w;=|νuNڵk^{<1y"d\{ޑˁƹU#ʜ̉ӭ"FFO(j99^Sλ%y!Aۺv1 L�_9#SWpsR*(W =*I=%ټ3ג $j}*QwՃ/)-?{~z)תryR ŤJE)KX<DLI >ejG3g�k % pƓ5+lyq%=l]dILUŋf嚿hڼY)qelyWFzP=dzu <"r& Ɨ:D.+dAg+;}P4{=;<z%[Ar06ε|!ym!eಗej3]S}1Fyjq~ܹ hM_觗ǩ1?qKYt)F ""BFg =JF<lk%nX~#ټ_#(t2iG>c((>U\į{{PǓbK2x'oyUBTVj,]c XH̢i(R9 jω P}X%w Á�%/~ǮYNt/@vU(TP]st]p̑0ceX JU+VمXy:E xʕ :s+G/}Ogg.]y:ZyʊNY::ҎJZZ|�?/gJLӏ8B0U ;;( gQ!<B䰎5"�×uj+: CAC#rJ|"?.7'![2Vy8UʪrĂD/2^2X* TBG( DʂTwBv0o7N YQp1' N)8@pB^`IG` ߣ̈ %@,|[PTk6+}b$!͊`DkI҈$y2iv(.ѴKZ:D흙?H1b@>�b9*0t:D06j,K�J' o F3+` aX+W5~$KT<.!CF(, '@$PD0<�ީ oFD^Q,)Je9Eh䈢" }{ڡO2{I V`3``D4&4 ?4KDN;%rzB0!Cq r2s]H:1z ÐrT*D䚳:UTUD&`,wtҹtl8qqRfg}ޥ}wނ؏o 1i{<w)1"İvQ@(x1^r?xݑK/w$GXb ,YAchs>}29cKri5dU}*)(łTbks^,]KzØd!"t.YF_S~w_Q ϒ�y>ZFJEBG9ja3yA]L:0ưp:ʁvݷΛ[Ks%g IFςn!c"G]D-rT�^z!{{9)!%@]Kq%W O|ߝY 5<)Q (9yٻc9- Ei"N|e>R,yOL<|&YD! qNa R,YEl{_Q6HvAC'|5rTˆrqܛΆ.M�q.ǟC!BRTKZx]S𮣋s?ds]8t$pZN/pzH5"s클OuCa`}l+H ے��BS!Y1XTˆ r1Du[x_Dr/O72kڪ h?t1#Vh;uw0Lc()'}?^!#ϵ~sc ښ�`9׽ !XH<fT¯Er2F751sGȣ{V 8ڿ h'Ɔw Cj$Ss_4~PqfJ-9w}6]&mC<c�'`=d{Bm!>?^85PcMfiJvŪΒ#q_ԣ u`ez;Ywr<^qҏ4E)cLU\s PG2b b-ss?WJmn8!g!qS*aD%Xu%<‹$+aL$ \6WFaDVe\!P=�K9 =RTcl6Z k9tukbW!Ɋ_;(y9+�IðYs?97,\?6)Zӎ^}Qm|! ڸJ E<W H͎P/yօΰ1X$LQRюԶ=-8U/WIaKfUCX~T~WWFX1Lfkp;X;Li'*#Ҫһ};onZZ`0FNW*%QrVbgː@ q|x x"�JBad/po]5VY|Y#Bi"6Cg/WO ր;+MD(⤿[).X'#QђE=_w؊/O (lUF(/5'm puF[X3�T5 B8Q Q߻-kݲx9G=ha剧IS8, HiΩ*'ƪd7><A@|~hw9c$.o&i"2f~s@N fCoBcoɤl_d*18KކTR;8Vrw#oB:SP0 RaD %}>|2]A{/7ǂ$$_4X r6d7aؚa7ŖN<#xI Gt9 9jwxr|';wvҷP kZH}阿9ֿM6氫/'|}g\YđRGZZ|FM Ą`y,(tunҙ/~ baC?SH^%/ʙ~o7nwEw߯Z.ϣó9OLìٲDP=]y<O|;#H0ufaJC73!k.bo<^ˏ+l,xϒ7bV'dMƫˆ=Xs4_v鲹ةz&L}P8zsu~BQLZ|m!`Mذ<~z5n/g'%՗QU5H4~[G2ߏ}ݷQZ"\M݂5}=]5+w,%Cd Q:?2/hrd}0#0{~?fa?1t6p rǖ|Jߝs\gX^5U-K~w”[~ӿm ~ZB0 x5P( <OhnU3ΑtS(~d<k5'h5m,n$@�c ԧD cwkRWұjM&,ē7|_=(de g y/^sW ;FJ `ɋ^^L'Z~ fBΖ9~p.^sk(Xo$^&?ڜ:4"H_AZ %cnԃTiq/�C,| c`�6)S%�=4Rc˝G%T&JƆ bXvhrmemOܺ^11=n},48H`2p$۲cBa\!Ulyfs6 �4':}HEV.+:DB\;\]KsO8'tmmA�!Lg}:M*F"584oPtj = Q__oE[�t1 l|XGx"/\7.@KG[> i[Z <k8нc01+h1`mBq FI{d$t}^KL0q dҧ:[㜟[Wx.ݐ[s#n-Lj|2Zj6:m?Eh�h0j`U;l\XU/^~P>{E@{i�$vL+Z)|`P|~C+;{ IR{,߳]A9噬 56_#@7|Q1ڊ� pժ:q c&\4 Qv4sDn5ڎ�ĺ 0AOj&hꄵ PPVlGi۷`DDJܿ( rz\l;hK4n\?,R!,q2QFT: ԓAh0}]n9 |[(` XDfp$&j،2,D}D2^mϰ!@X<1IbiqÈ!хWS-ڎ�J\nڝdmgnӄ1(_QjyB±Q WSo_؎n&64ʆ3>lyF4+MeW$ߕYXE>T{k[҂`Ǯ"�ڜu.v�iOm6 'Bՙ:FXm LULF@~w>= 7]OM]V)7TW0! sT*#ڶ!�d"qTW÷ ,=udKX` E:>d=چ�LAxIܳ-Hahr=ۧ]E? 0*=[}<iw՝'I'[[ ~[s8H0M則lDmSX c7Q7=+&w >贻? x)*2j9!ឧ>0DA@.pJ ϛ<tos$bg%gVe A $֪;Q=~/aym߄'*[>?Hh,&/l-pH*e=[myh{MCZTyyL=xěFM 7`J�:Vs_J]{ΤwpUhJ}f6G"M}5 n=]tI~V<O<{=#r:,)uʳY!u]۩oy 740zb4~N,8 +VM^׷K,D{q3.sZּ - V (9½;o~HهS*-ZW^6#]c*�' r24Ȟ;oqY̲ -αQ8#P ڿG'dMm b,Gi@$NI$݇'/fDF^IԌ 62H1½;E%Rr .~tt@wCܕc<6モ3R'<v8m #L�QDk;Mh3 XCc0r~9.|͔ъ5xN�i  ~wfL>\zrʪTS"O}룸 Ozbx&G]2S}u䍐K759#<}38J|Xb* !wM�ZlpWxWbaZCU5&sL3; x1h_é,~y#Hp}%M taRS_c pνUoz ӵ2&^(fC0'B;�6}\V^U)+TabFNNسhӣGOf|J51loz2o~ԫgj >7c8'ǿR/R(R%-e3MqlۈVFFiR%vĂ c tGϪ,|Kf`֟baM3wk/|Nx>CRQ S =LTR۹(atХ/JNuQl S\D}ϧ$r4::Elg`hy+{ɢk:?p30蔡D#4@L nO IUM6(T�SJ/Y(ݴ1٘!86;idЅK<Yt΅=W_lh>ڛ7(!!/Jh`pl?87DXgK.M]ͦo}CvSJrM40$(!KڣxulzT#Pb%1� N] \SD^/d/LZ{wi=vFBe"D+O6_;`ۍ?]?VbgBpWjS�ⴹrCF`5JA�VaWDq݆]4}j(Ecșxfar *DNyg| -\4kcXy٬<lqAއ`]Ga`fO@6V W QGq*5B ]ZerW%e66g)|yiX1NLrhQtZ(+]xqG_6qv}^wʹ&M4[CS#p 蝉paHX)S (qa`B"x[1K52ch)b\HXl5]ʖ/}J6Qlmɰd7< jNuuq."* RR0 7)e~/i?dw/D\t1Bo~ B<& v~[p%ke"CBIzwO~9*^kSu :m\ylIfÅCt(t*Q~sꂺsٛq':}:t̶|;swS*䍢.&o|Y83phkz_V(`%nsGAeuEWO|߇d&6--=+;ćL~AgR}vN QX2Bo;=m\qL%#6;۵Nk(%"Axdaݺ;z纈z>v^9}[=C-s MI՝(&N%s]ڂ�"t }߿Bj.O(Yv۬JH'UD?bg7qУr+`<Y9 {+J&JF(!2T:H'0 k!Ԟ9NYv 洜sC�U%m<ϱ{NNsRAV(Viړsϻߡ}GMsd'CJ2D]?kL@oȉ3Blo޴>KQ<G?_%Y��IDATe%$G<CVY'F!M/{ߐw'3ՏT h3;!شG?}3`(^$+8s':Gg3GKAl/B9'nt hsBOso0 {M&R O:ŧ&N=G3H "Q% e\U{RCkv> *Cu݀#xFMHoE${,EByAyw;~b:\5XV֬t)^_*wtwvMʖ(٫\̄b=H$(I/-Uo6%gb>p3hm O%c!c>f;Ĕ%ѿJ$>]'%yQ_#N)rT^ 4g� `zvXŌGF?GICҿK[YOٙԣ舅)H#e_-inq"= xP/Y6[:=k ۹[5V* ;KT F fwM;Hi%B X%1@r]dqNX#'B[[x1<&lOb2(IcxL: SE~L&"8+ 6QQQ+K%-647Tv(bb+=#koU"&0u:/gR@'K/򛣥uP(A]-g&AcTAϫhF%~nO#A+g <(8я�o3[]4oa( < B;mbx2^kW?35cXϼa@tY\j2b1= '0܋U@Wc]7c؁s)yW{#%Fmt_]X2U4QτT/[uD7 X5aoD$8QvꄯM]8&F??kÌT3kܰ|2# ׎V7gP=^&M(:_~פ!ixuPDs5 :3~RDԗf?kx7O[i/¥eQػor\SAd)aFr5鏎 Ӽ5q3fd \۸) B?*U_ڍL6.sSjw*Gd+;&?k0Ietg+12~V woD߳|16=lGht*8WWv$J3m_R]]-N;hb9z5}#UĈ3w#i3E-'Gky#oU7$v rO1yc<&#<����IENDB`��doublecmd-1.1.30/pixmaps/dctheme/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015657� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017425� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/places/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020674� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/places/folder.svg�����������������������������������������0000644�0001750�0000144�00000004322�15104114162�022671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg height="32" viewBox="0 0 32 32" width="32" version="1.1" id="svg21" sodipodi:docname="folder.svg" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> <defs id="defs25"> <linearGradient inkscape:collect="always" id="linearGradient1428"> <stop style="stop-color:#ffe087;stop-opacity:1" offset="0" id="stop1424" /> <stop style="stop-color:#ffd255;stop-opacity:1" offset="1" id="stop1426" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient1428" id="linearGradient1430" x1="2" y1="18.5" x2="30" y2="18.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0714286,0,0,1.2941176,-1.1428572,-5.9411765)" /> </defs> <path d="m 3.8778536,2.9999998 c -1.594425,0 -2.877854,1.0938697 -2.877854,2.4521073 V 26.547893 C 0.9999996,27.907088 2.2834286,29 3.8778536,29 H 28.121019 C 29.716573,29 31,27.907088 31,26.547893 V 8.8716473 C 31,7.2461686 29.454029,5.9291185 27.546348,5.9291185 H 14.26923 c -0.707631,0 -1.354416,-0.3400375 -1.672175,-0.8783521 L 12.163237,4.3170499 C 11.685472,3.5095785 10.715294,2.9999998 9.6538459,2.9999998 Z m 0,0" fill="#438de6" id="path12" style="fill:#fbbb1a;fill-opacity:1;stroke-width:0.265959" /> <path d="M 16.570162,7 C 15.77802,7 15.0625,7.2885862 14.543044,7.7572792 c -0.655799,0.590475 -1.552735,1.338543 -2.490235,1.338543 H 3.877854 c -1.594425,0 -2.87785406,1.1686668 -2.87785406,2.6197788 V 26.380222 C 0.99999994,27.831334 2.283429,29 3.877854,29 H 28.121019 C 29.716573,29 31,27.831334 31,26.380222 V 9.6197782 C 31,8.1686672 29.716573,7 28.121019,7 Z m 0,0" fill="#a4caee" id="path14" style="fill:url(#linearGradient1430);fill-opacity:1;stroke-width:0.2749" /> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/mimetypes/������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021441� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/mimetypes/unknown.svg�������������������������������������0000644�0001750�0000144�00000017611�15104114162�023667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128" height="128" id="svg3172" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="unknown.svg"> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="3200" inkscape:window-height="1674" id="namedview41" showgrid="false" inkscape:zoom="10.90625" inkscape:cx="64" inkscape:cy="64" inkscape:window-x="0" inkscape:window-y="60" inkscape:window-maximized="1" inkscape:current-layer="svg3172" /> <defs id="defs3174"> <linearGradient xlink:href="#linearGradient3977" id="linearGradient3093" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.4594595,0,0,3.1081081,4.9729852,-14.594559)" x1="23.99999" y1="5.5641499" x2="23.99999" y2="43" /> <linearGradient id="linearGradient3977"> <stop id="stop3979" style="stop-color:#ffffff;stop-opacity:1;" offset="0" /> <stop offset="0.03626217" style="stop-color:#ffffff;stop-opacity:0.23529412;" id="stop3981" /> <stop id="stop3983" style="stop-color:#ffffff;stop-opacity:0.15686275;" offset="0.95056331" /> <stop id="stop3985" style="stop-color:#ffffff;stop-opacity:0.39215687;" offset="1" /> </linearGradient> <linearGradient xlink:href="#linearGradient3600" id="linearGradient3096" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.6571409,0,0,2.5422194,0.228619,-4.91283)" x1="25.132275" y1="0.98520643" x2="25.132275" y2="47.013336" /> <linearGradient id="linearGradient3600"> <stop offset="0" style="stop-color:#f4f4f4;stop-opacity:1" id="stop3602" /> <stop offset="1" style="stop-color:#dbdbdb;stop-opacity:1" id="stop3604" /> </linearGradient> <linearGradient xlink:href="#linearGradient3104" id="linearGradient3098" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.1456328,0,0,2.3791386,158.08997,-7.746077)" x1="-51.786404" y1="50.786446" x2="-51.786404" y2="2.9062471" /> <linearGradient id="linearGradient3104"> <stop offset="0" style="stop-color:#a0a0a0;stop-opacity:1;" id="stop3106" /> <stop offset="1" style="stop-color:#bebebe;stop-opacity:1;" id="stop3108-4" /> </linearGradient> <linearGradient xlink:href="#linearGradient3702-501-757-486" id="linearGradient3120" gradientUnits="userSpaceOnUse" x1="25.058096" y1="47.027729" x2="25.058096" y2="39.999443" gradientTransform="matrix(3.1428572,0,0,1.2857143,-11.428573,61.571428)" /> <linearGradient id="linearGradient3702-501-757-486"> <stop offset="0" style="stop-color:#181818;stop-opacity:0" id="stop3100" /> <stop offset="0.5" style="stop-color:#181818;stop-opacity:1" id="stop3102" /> <stop offset="1" style="stop-color:#181818;stop-opacity:0" id="stop3104" /> </linearGradient> <radialGradient xlink:href="#linearGradient3688-464-309-255" id="radialGradient3123" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.4045407,0,0,1.7999999,-32.014243,-195.8)" cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" r="2.5" /> <linearGradient id="linearGradient3688-464-309-255"> <stop offset="0" style="stop-color:#181818;stop-opacity:1" id="stop3094" /> <stop offset="1" style="stop-color:#181818;stop-opacity:0" id="stop3096" /> </linearGradient> <linearGradient id="linearGradient3688-166-749-737"> <stop offset="0" style="stop-color:#181818;stop-opacity:1" id="stop3088" /> <stop offset="1" style="stop-color:#181818;stop-opacity:0" id="stop3090" /> </linearGradient> <radialGradient r="2.5" fy="43.5" fx="4.9929786" cy="43.5" cx="4.9929786" gradientTransform="matrix(2.4045407,0,0,1.7999999,95.985757,39.200001)" gradientUnits="userSpaceOnUse" id="radialGradient3170" xlink:href="#linearGradient3688-166-749-737" /> </defs> <metadata id="metadata3177"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <rect width="6" height="8.999999" x="108" y="113" id="rect2801" style="opacity:0.4;fill:url(#radialGradient3170);fill-opacity:1;stroke:none" /> <rect width="6" height="8.999999" x="-20" y="-122" transform="scale(-1,-1)" id="rect3696" style="opacity:0.4;fill:url(#radialGradient3123);fill-opacity:1;stroke:none" /> <rect width="88" height="9" x="20" y="113" id="rect3700" style="opacity:0.4;fill:url(#linearGradient3120);fill-opacity:1;stroke:none" /> <path inkscape:connector-curvature="0" d="m 17.499929,1.500412 c 21.311061,0 93.000031,0.007 93.000031,0.007 l 1.1e-4,116.992628 c 0,0 -62.0001,0 -93.00014,0 0,-39.000029 0,-78.000054 0,-117.000079 z" id="path4160" style="display:inline;fill:url(#linearGradient3096);fill-opacity:1;stroke:url(#linearGradient3098);stroke-width:0.99992186;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> <path inkscape:connector-curvature="0" id="rect6741-1" d="m 109.5,117.5 -91,0 0,-115.000003 91,0 z" style="fill:none;stroke:url(#linearGradient3093);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> <path style="font-style:normal;font-weight:bold;font-size:72px;font-family:'Standard Symbols L';opacity:1;fill:#7e8087;fill-opacity:1;stroke:none" id="path9053" d="M 66.3899,77.429181 C 66.216438,71.237594 67.603633,65.226606 73.453432,60.968843 79.632314,56.153793 85.583073,50.129194 84.954203,43.027742 84.816888,36.178763 76.83707,30.812095 68.239394,30.040568 58.568405,28.700834 46.86657,32.013741 43.625885,39.566404 c -1.6436,3.67336 -0.119437,10.263698 5.396462,10.263698 3.226261,0 4.708103,-2.083922 4.951543,-3.990433 0.184195,-1.442411 -0.408015,-2.730512 -0.757749,-3.922039 -0.398499,-1.357768 1.302667,-3.989055 3.155472,-5.061079 1.548231,-0.895676 3.168075,-1.196186 3.406849,-1.25349 5.56013,-1.336309 11.10278,1.615347 13.415271,5.207908 2.312494,3.592365 -0.232865,9.041209 -3.892495,14.340441 -3.659635,5.299035 -7.587076,11.317346 -7.571387,17.71014 0,2.433769 -0.216851,3.260381 -0.06276,4.24515 0.123087,0.786713 2.727969,0.691425 4.72282,0.322481 z m -2.53747,8.333981 c -5.316364,-0.28875 -8.996026,5.738382 -5.802216,9.5781 2.852221,4.239638 10.849193,3.19305 12.219871,-1.607812 1.425012,-3.733538 -2.004296,-8.032631 -6.417652,-7.970288 l -3e-6,0 z" inkscape:connector-curvature="0" /> </svg> �����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/mimetypes/text-x-hash.svg���������������������������������0000644�0001750�0000144�00000021712�15104114162�024337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg inkscape:export-ydpi="24.000002" inkscape:export-xdpi="24.000002" sodipodi:docname="text-x-hash.svg" inkscape:version="1.1 (c68e22c387, 2021-05-23)" version="1.1" id="svg3172" height="128" width="128" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <sodipodi:namedview inkscape:document-rotation="0" inkscape:current-layer="svg3172" inkscape:window-maximized="1" inkscape:window-y="0" inkscape:window-x="0" inkscape:cy="66.242035" inkscape:cx="50.669207" inkscape:zoom="7.7118833" showgrid="false" id="namedview41" inkscape:window-height="1365" inkscape:window-width="2560" inkscape:pageshadow="2" inkscape:pageopacity="0" guidetolerance="10" gridtolerance="10" objecttolerance="10" borderopacity="1" bordercolor="#666666" pagecolor="#ffffff" inkscape:pagecheckerboard="0" /> <defs id="defs3174"> <linearGradient y2="43" x2="23.99999" y1="5.5641499" x1="23.99999" gradientTransform="matrix(2.4594595,0,0,3.1081081,4.9729852,-14.594559)" gradientUnits="userSpaceOnUse" id="linearGradient3093" xlink:href="#linearGradient3977" /> <linearGradient id="linearGradient3977"> <stop offset="0" style="stop-color:#ffffff;stop-opacity:1;" id="stop3979" /> <stop id="stop3981" style="stop-color:#ffffff;stop-opacity:0.23529412;" offset="0.03626217" /> <stop offset="0.95056331" style="stop-color:#ffffff;stop-opacity:0.15686275;" id="stop3983" /> <stop offset="1" style="stop-color:#ffffff;stop-opacity:0.39215687;" id="stop3985" /> </linearGradient> <linearGradient y2="47.013336" x2="25.132275" y1="0.98520643" x1="25.132275" gradientTransform="matrix(2.6571409,0,0,2.5422194,0.228619,-4.91283)" gradientUnits="userSpaceOnUse" id="linearGradient3096" xlink:href="#linearGradient3600" /> <linearGradient id="linearGradient3600"> <stop id="stop3602" style="stop-color:#f4f4f4;stop-opacity:1" offset="0" /> <stop id="stop3604" style="stop-color:#dbdbdb;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient y2="2.9062471" x2="-51.786404" y1="50.786446" x1="-51.786404" gradientTransform="matrix(2.1456328,0,0,2.3791386,158.08997,-7.746077)" gradientUnits="userSpaceOnUse" id="linearGradient3098" xlink:href="#linearGradient3104" /> <linearGradient id="linearGradient3104"> <stop id="stop3106" style="stop-color:#a0a0a0;stop-opacity:1;" offset="0" /> <stop id="stop3108-4" style="stop-color:#bebebe;stop-opacity:1;" offset="1" /> </linearGradient> <linearGradient gradientTransform="matrix(3.1428572,0,0,1.2857143,-11.428573,61.571428)" y2="39.999443" x2="25.058096" y1="47.027729" x1="25.058096" gradientUnits="userSpaceOnUse" id="linearGradient3120" xlink:href="#linearGradient3702-501-757-486" /> <linearGradient id="linearGradient3702-501-757-486"> <stop id="stop3100" style="stop-color:#181818;stop-opacity:0" offset="0" /> <stop id="stop3102" style="stop-color:#181818;stop-opacity:1" offset="0.5" /> <stop id="stop3104" style="stop-color:#181818;stop-opacity:0" offset="1" /> </linearGradient> <radialGradient r="2.5" fy="43.5" fx="4.9929786" cy="43.5" cx="4.9929786" gradientTransform="matrix(2.4045407,0,0,1.7999999,-32.014243,-195.8)" gradientUnits="userSpaceOnUse" id="radialGradient3123" xlink:href="#linearGradient3688-464-309-255" /> <linearGradient id="linearGradient3688-464-309-255"> <stop id="stop3094" style="stop-color:#181818;stop-opacity:1" offset="0" /> <stop id="stop3096" style="stop-color:#181818;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient id="linearGradient3688-166-749-737"> <stop id="stop3088" style="stop-color:#181818;stop-opacity:1" offset="0" /> <stop id="stop3090" style="stop-color:#181818;stop-opacity:0" offset="1" /> </linearGradient> <radialGradient xlink:href="#linearGradient3688-166-749-737" id="radialGradient3170" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.4045407,0,0,1.7999999,95.985757,39.200001)" cx="4.9929786" cy="43.5" fx="4.9929786" fy="43.5" r="2.5" /> </defs> <metadata id="metadata3177"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <rect style="opacity:0.4;fill:url(#radialGradient3170);fill-opacity:1;stroke:none" id="rect2801" y="113" x="108" height="8.999999" width="6" /> <rect style="opacity:0.4;fill:url(#radialGradient3123);fill-opacity:1;stroke:none" id="rect3696" transform="scale(-1,-1)" y="-122" x="-20" height="8.999999" width="6" /> <rect style="opacity:0.4;fill:url(#linearGradient3120);fill-opacity:1;stroke:none" id="rect3700" y="113" x="20" height="9" width="88" /> <path style="display:inline;fill:url(#linearGradient3096);fill-opacity:1;stroke:url(#linearGradient3098);stroke-width:0.99992186;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path4160" d="m 17.499929,1.500412 c 21.311061,0 93.000031,0.007 93.000031,0.007 l 1.1e-4,116.992628 c 0,0 -62.0001,0 -93.00014,0 0,-39.000029 0,-78.000054 0,-117.000079 z" inkscape:connector-curvature="0" /> <path style="fill:none;stroke:url(#linearGradient3093);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="m 109.5,117.5 -91,0 0,-115.000003 91,0 z" id="rect6741-1" inkscape:connector-curvature="0" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g224" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g226" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g228" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g230" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g232" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g234" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g236" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g238" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g240" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g242" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g244" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g246" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g248" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g250" /> <g transform="matrix(0.16655518,0,0,0.16564225,22.712816,23.494753)" id="g252" /> <g id="g4" transform="matrix(0.17212888,0,0,0.15545321,21.483188,23.207)"> <path d="M 395.527,97.043 V 55.352 h -270.99 l 159.46,171.507 c 9.983,10.749 9.848,27.458 -0.319,38.026 L 126.017,428.861 h 269.504 v -25.18 c 0,-15.256 12.413,-27.668 27.674,-27.668 15.256,0 27.681,12.412 27.681,27.668 v 52.848 c 0,15.262 -12.419,27.681 -27.681,27.681 H 61.014 c -11.106,0 -21.107,-6.603 -25.464,-16.834 -4.359,-10.226 -2.189,-22.012 5.509,-30.026 L 225.643,245.386 40.743,46.521 C 33.251,38.453 31.247,26.723 35.642,16.622 40.042,6.525 50.005,0 61.014,0 h 362.188 c 15.255,0 27.68,12.413 27.68,27.68 v 69.363 c 0,15.259 -12.419,27.677 -27.68,27.677 -15.262,0 -27.675,-12.412 -27.675,-27.677 z" id="path2" /> </g> </svg> ������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/mimetypes/package-x-generic.svg���������������������������0000644�0001750�0000144�00000023266�15104114162�025445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="128" height="128" id="svg4164"> <defs id="defs4166"> <linearGradient x1="23.99999" y1="4.3177118" x2="23.99999" y2="43" id="linearGradient4092" xlink:href="#linearGradient3878" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.9459456,0,0,0.59459456,-6.702671,-42.770263)" /> <linearGradient id="linearGradient3878"> <stop id="stop3880" style="stop-color:#ffffff;stop-opacity:1" offset="0" /> <stop id="stop3882" style="stop-color:#ffffff;stop-opacity:0.23529412" offset="0.08389385" /> <stop id="stop3884" style="stop-color:#ffffff;stop-opacity:0.15686275" offset="0.95056331" /> <stop id="stop3886" style="stop-color:#ffffff;stop-opacity:0.39215687" offset="1" /> </linearGradient> <linearGradient x1="23.99999" y1="5.5641499" x2="23.99999" y2="43" id="linearGradient3033" xlink:href="#linearGradient3977" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.9459459,0,0,1.9189191,-6.702674,-27.054045)" /> <linearGradient id="linearGradient3977"> <stop id="stop3979" style="stop-color:#ffffff;stop-opacity:1" offset="0" /> <stop id="stop3981" style="stop-color:#ffffff;stop-opacity:0.23529412" offset="0.03626217" /> <stop id="stop3983" style="stop-color:#ffffff;stop-opacity:0.15686275" offset="0.95056331" /> <stop id="stop3985" style="stop-color:#ffffff;stop-opacity:0.39215687" offset="1" /> </linearGradient> <linearGradient x1="26" y1="22" x2="26" y2="8" id="linearGradient3397" xlink:href="#linearGradient3827" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.9999998,0,0,2.7142858,-8.000012,-63.714286)" /> <linearGradient id="linearGradient3827"> <stop id="stop3829" style="stop-color:#ffffff;stop-opacity:1" offset="0" /> <stop id="stop4295" style="stop-color:#ffffff;stop-opacity:1" offset="0.3021296" /> <stop id="stop4293" style="stop-color:#ffffff;stop-opacity:0.64347827" offset="0.34361121" /> <stop id="stop3832" style="stop-color:#ffffff;stop-opacity:0.39130434" offset="1" /> </linearGradient> <linearGradient x1="63.5" y1="47.5" x2="63.5" y2="23.5" id="linearGradient3164" xlink:href="#linearGradient4793" gradientUnits="userSpaceOnUse" gradientTransform="translate(0,-64)" /> <linearGradient id="linearGradient4793"> <stop id="stop4795" style="stop-color:#ad8757;stop-opacity:1" offset="0" /> <stop id="stop4797" style="stop-color:#c7ad88;stop-opacity:0.39215687" offset="1" /> </linearGradient> <linearGradient x1="24.822832" y1="15.377745" x2="24.996943" y2="37.27668" id="linearGradient3219-8-6" xlink:href="#linearGradient3199-7-8" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.4710784,0,0,4.1494795,-17.402231,-103.82322)" /> <linearGradient id="linearGradient3199-7-8"> <stop id="stop3201-7-0" style="stop-color:#dac196;stop-opacity:1" offset="0" /> <stop id="stop3203-6-2" style="stop-color:#c7ae8e;stop-opacity:1" offset="0.23942046" /> <stop id="stop3205-7-1" style="stop-color:#dac197;stop-opacity:1" offset="0.27582464" /> <stop id="stop3207-3-0" style="stop-color:#b19974;stop-opacity:1" offset="1" /> </linearGradient> <linearGradient x1="15.464298" y1="7.9756851" x2="15.464298" y2="45.04248" id="linearGradient3221-5" xlink:href="#linearGradient3295-5-1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.7070742,0,0,2.6645997,-0.9697811,-63.079475)" /> <linearGradient id="linearGradient3295-5-1"> <stop id="stop3297-6-1" style="stop-color:#c9af8b;stop-opacity:1" offset="0" /> <stop id="stop3299-3-0" style="stop-color:#ad8757;stop-opacity:1" offset="0.23942046" /> <stop id="stop3301-9-8" style="stop-color:#c2a57f;stop-opacity:1" offset="0.27582464" /> <stop id="stop3303-4-5" style="stop-color:#9d7d53;stop-opacity:1" offset="1" /> </linearGradient> <radialGradient cx="5" cy="41.5" r="5" fx="5" fy="41.5" id="radialGradient3188" xlink:href="#linearGradient3681" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2036149,0,0,3.8,112.06083,-202.69998)" /> <linearGradient id="linearGradient3681"> <stop id="stop3683" style="stop-color:#000000;stop-opacity:1" offset="0" /> <stop id="stop3685" style="stop-color:#000000;stop-opacity:0" offset="1" /> </linearGradient> <linearGradient x1="17.554192" y1="46.000275" x2="17.554192" y2="34.999718" id="linearGradient3191" xlink:href="#linearGradient3703" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.7015924,0,0,3.4545456,-46.497997,-94.909105)" /> <linearGradient id="linearGradient3703"> <stop id="stop3705" style="stop-color:#000000;stop-opacity:0" offset="0" /> <stop id="stop3711" style="stop-color:#000000;stop-opacity:1" offset="0.5" /> <stop id="stop3707" style="stop-color:#000000;stop-opacity:0" offset="1" /> </linearGradient> <radialGradient cx="5" cy="41.5" r="5" fx="5" fy="41.5" id="radialGradient4162" xlink:href="#linearGradient3681" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.2036149,0,0,3.8,-16.018071,-202.69998)" /> </defs> <metadata id="metadata4169"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title /> </cc:Work> </rdf:RDF> </metadata> <g transform="translate(0,64)" id="layer1"> <rect width="6" height="38" x="-10" y="-63.999992" transform="scale(-1,-1)" id="rect2484" style="opacity:0.3;fill:url(#radialGradient4162);fill-opacity:1;stroke:none" /> <rect width="108.1366" height="38" x="9.9211044" y="25.999992" id="rect2486" style="opacity:0.3;fill:url(#linearGradient3191);fill-opacity:1;stroke:none" /> <rect width="6" height="38" x="118.0789" y="-63.999992" transform="scale(1,-1)" id="rect3444" style="opacity:0.3;fill:url(#radialGradient3188);fill-opacity:1;stroke:none;display:inline" /> <path d="m 23.422918,-40.430382 79.852532,0 c 4.66154,0 6.75935,-0.763541 8.09835,2.664598 l 8.12592,21.316798 0,68.410696 c 0,4.13894 0.27864,3.50655 -4.38292,3.50655 l -102.233597,0 c -4.6615606,0 -4.3829244,0.63239 -4.3829244,-3.50655 l 0,-68.410696 8.1259194,-21.316798 c 1.301646,-3.358892 2.135157,-2.664598 6.79672,-2.664598 z" id="path2488" style="color:#000000;fill:url(#linearGradient3219-8-6);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3221-5);stroke-width:0.99420083;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible;enable-background:accumulate" /> <path d="m 63.5,-40 0,23" id="path4763" style="opacity:0.4;fill:none;stroke:url(#linearGradient3164);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> <path d="m 58,-42 c 3.99999,0 8.000009,0 12,0 0,12.666668 0,25.333333 0,38 -1.181191,0 -2.36238,-2.092942 -3.54357,-2.092942 C 65.24707,-6.092942 64.037679,-4 62.82832,-4 61.85473,-4 60.88114,-5.831326 59.90755,-5.831326 59.2717,-5.831326 58.635849,-4 58,-4 c 0,-12.666667 0,-25.333332 0,-38 z" id="rect3326-4" style="opacity:0.3;fill:url(#linearGradient3397);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> <path d="m 118.5,54.49999 -109.0000001,0 0,-71.000001 109.0000001,0 z" id="rect6741-1" style="opacity:0.3;fill:none;stroke:url(#linearGradient3033);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> <path d="m 9.4999999,-17.5 9.1591071,-22 90.681793,0 9.1591,22 m -54,-22.5 0,23" id="rect6741-1-1" style="opacity:0.2;fill:none;stroke:url(#linearGradient4092);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/mimetypes/application-x-executable.svg��������������������0000644�0001750�0000144�00000023126�15104114162�027055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48.000000px" height="48.000000px" id="svg53383" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/mimetypes" sodipodi:docname="application-x-executable.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <defs id="defs3"> <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 24 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="48 : 24 : 1" inkscape:persp3d-origin="24 : 16 : 1" id="perspective22" /> <linearGradient id="linearGradient2300"> <stop id="stop2302" offset="0.0000000" style="stop-color:#000000;stop-opacity:0.32673267;" /> <stop id="stop2304" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <linearGradient id="aigrd1" gradientUnits="userSpaceOnUse" x1="99.7773" y1="15.4238" x2="153.0005" y2="248.6311"> <stop offset="0" style="stop-color:#184375" id="stop53300" /> <stop offset="1" style="stop-color:#C8BDDC" id="stop53302" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#aigrd1" id="linearGradient53551" gradientUnits="userSpaceOnUse" x1="99.7773" y1="15.4238" x2="153.0005" y2="248.6311" gradientTransform="matrix(0.200685,0.000000,0.000000,0.200685,-0.585758,-1.050787)" /> <radialGradient gradientUnits="userSpaceOnUse" r="11.689870" fy="72.568001" fx="14.287618" cy="68.872971" cx="14.287618" gradientTransform="matrix(1.399258,-2.234445e-7,8.196178e-8,0.513264,4.365074,4.839285)" id="radialGradient2308" xlink:href="#linearGradient2300" inkscape:collect="always" /> </defs> <sodipodi:namedview inkscape:showpageshadow="false" id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="4" inkscape:cx="22.871258" inkscape:cy="31.58696" inkscape:current-layer="layer2" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:window-width="716" inkscape:window-height="697" inkscape:window-x="414" inkscape:window-y="151" /> <metadata id="metadata4"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title>Executable</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz/</dc:source> <dc:subject> <rdf:Bag> <rdf:li>executable</rdf:li> <rdf:li>program</rdf:li> <rdf:li>binary</rdf:li> <rdf:li>bin</rdf:li> <rdf:li>script</rdf:li> <rdf:li>shell</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/" /> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" /> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" /> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> </cc:License> </rdf:RDF> </metadata> <g inkscape:label="shadow" id="layer2" inkscape:groupmode="layer"> <path transform="matrix(1.186380,0.000000,0.000000,1.186380,-4.539687,-7.794678)" d="M 44.285715 38.714287 A 19.928572 9.8372450 0 1 1 4.4285717,38.714287 A 19.928572 9.8372450 0 1 1 44.285715 38.714287 z" sodipodi:ry="9.8372450" sodipodi:rx="19.928572" sodipodi:cy="38.714287" sodipodi:cx="24.357143" id="path1538" style="color:#000000;fill:url(#radialGradient2308);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> </g> <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <path style="fill:url(#linearGradient53551);fill-rule:nonzero;stroke:#3f4561;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" d="M 24.285801,43.196358 L 4.3751874,23.285744 L 24.285801,3.3751291 L 44.196415,23.285744 L 24.285801,43.196358 L 24.285801,43.196358 z " id="path53304" /> <path sodipodi:nodetypes="ccccccc" style="opacity:0.72000003;fill:#ffffff;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 43.505062,23.285744 L 24.285801,4.0664819 L 5.0665401,23.285744 L 5.8476076,23.910676 L 24.457240,5.4825431 L 43.505256,23.285744 L 43.505062,23.285744 z " id="path53359" /> <path style="opacity:0.49999997;fill:#ffffff;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 8.9257729,27.145172 L 9.6642227,26.120988 C 10.300972,26.389480 10.964841,26.606057 11.650406,26.765873 L 11.644594,28.342731 C 12.072322,28.431066 12.507604,28.498867 12.948699,28.547102 L 13.430473,27.045213 C 13.774514,27.073690 14.122237,27.089380 14.473834,27.089380 C 14.825043,27.089380 15.172958,27.073883 15.517000,27.045213 L 15.998775,28.547102 C 16.440063,28.498867 16.875151,28.431066 17.302879,28.342731 L 17.296874,26.765680 C 17.982632,26.606057 18.646307,26.389480 19.283056,26.120988 L 20.205536,27.400490 C 20.607887,27.218396 20.999777,27.017899 21.380431,26.799968 L 20.887614,25.301952 C 21.484844,24.939702 22.049337,24.528633 22.575085,24.073980 L 23.847226,25.005759 C 24.172864,24.709178 24.484555,24.397487 24.780942,24.071849 L 23.849357,22.799902 C 24.304204,22.274154 24.715273,21.709855 25.077523,21.112237 L 26.575538,21.605248 C 26.793470,21.224400 26.994161,20.832316 27.175867,20.430160 L 25.896559,19.507873 C 26.165051,18.871124 26.381627,18.207255 26.541638,17.521497 L 28.118301,17.527308 C 28.206636,17.099581 28.274438,16.664298 28.322479,16.223010 L 26.820784,15.741236 C 26.849648,15.397388 26.864951,15.049472 26.864951,14.698069 C 26.864951,14.346666 26.849260,13.998944 26.820784,13.654708 L 28.322479,13.172934 C 28.274632,12.731840 28.206442,12.296751 28.118495,11.868830 L 26.541444,11.874835 C 26.381627,11.189076 26.165051,10.525208 25.896753,9.8886539 L 27.176061,8.9663652 C 26.994354,8.5640139 26.793470,8.1721237 26.575926,7.7912754 L 25.077717,8.2842867 C 24.715466,7.6868623 24.304398,7.1225635 23.849744,6.5970095 L 24.781330,5.3248686 C 24.502958,5.0189892 24.210252,4.7268638 23.905922,4.4467488 L 5.0669275,23.285938 L 6.0738693,24.292880 L 6.3725811,24.074174 C 6.8983295,24.528827 7.4626276,24.939896 8.0600509,25.302146 L 7.8180983,26.037303 L 8.9261605,27.145365 L 8.9257729,27.145172 z " id="path53361" /> <path style="opacity:0.49999997;fill:#ffffff;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 28.448976,32.191116 C 28.448976,25.706434 32.682859,20.211647 38.536216,18.317093 L 36.309244,16.089926 C 36.292390,16.096901 36.275344,16.102906 36.258684,16.110073 L 36.077171,15.858241 L 34.665167,14.446237 C 34.201989,14.665137 33.748497,14.900697 33.305853,15.153885 L 33.999942,17.263078 C 33.158628,17.772747 32.364194,18.351768 31.624195,18.991810 L 29.833085,17.680151 C 29.374364,18.097611 28.935788,18.536187 28.518521,18.994716 L 29.829986,20.785630 C 29.189945,21.525825 28.611118,22.320258 28.101255,23.161378 L 25.991868,22.467289 C 25.685214,23.003692 25.402775,23.555593 25.146874,24.122021 L 26.948056,25.420314 C 26.570114,26.316643 26.265204,27.251328 26.040298,28.216815 L 23.820299,28.208291 C 23.696127,28.810557 23.600430,29.423479 23.532823,30.044342 L 25.647246,30.722740 C 25.606953,31.207033 25.585255,31.696750 25.585255,32.191310 C 25.585255,32.686063 25.606953,33.175780 25.647246,33.660073 L 23.532823,34.337889 C 23.600430,34.959140 23.696127,35.571868 23.820493,36.174134 L 26.040298,36.165804 C 26.265204,37.131291 26.570114,38.065976 26.948056,38.962306 L 25.146874,40.260792 C 25.289256,40.575582 25.440743,40.885723 25.599010,41.191215 L 29.403033,37.387579 C 28.787013,35.773334 28.448783,34.021743 28.448783,32.191310 L 28.448976,32.191116 z " id="path53363" /> <path sodipodi:nodetypes="ccccccc" style="opacity:0.34999999;fill:#000000;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" d="M 5.2050478,23.424252 L 24.285801,42.505005 L 43.505062,23.285744 L 42.789963,22.603525 L 24.310314,41.041677 L 5.2050478,23.424059 L 5.2050478,23.424252 z " id="path53365" /> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/emblems/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021051� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/emblems/emblem-cloud-pinned.svg���������������������������0000644�0001750�0000144�00000012264�15104114162�025417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg id="svg2" height="24" width="24" version="1.2" sodipodi:docname="process-completed2.svg" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <sodipodi:namedview id="namedview20" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="36.375" inkscape:cx="11.986254" inkscape:cy="12" inkscape:window-width="2560" inkscape:window-height="1361" inkscape:window-x="-9" inkscape:window-y="-9" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> <defs id="defs4"> <linearGradient id="linearGradient4011"> <stop offset="0" style="stop-color:#ffffff;stop-opacity:1" id="stop4013" /> <stop offset="0.507761" style="stop-color:#ffffff;stop-opacity:0.23529412" id="stop4015-3" /> <stop offset="0.83456558" style="stop-color:#ffffff;stop-opacity:0.15686275" id="stop4017-2" /> <stop offset="1" style="stop-color:#ffffff;stop-opacity:0.39215687" id="stop4019" /> </linearGradient> <linearGradient id="linearGradient27416-1-5"> <stop offset="0" style="stop-color:#9bdb4d;stop-opacity:1" id="stop27420-2-2" /> <stop offset="1" style="stop-color:#68b723;stop-opacity:1" id="stop27422-3-2" /> </linearGradient> <linearGradient gradientTransform="matrix(0.5135135,0,0,0.5135135,-24.83614,-1.0212801)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4011" id="linearGradient12398-3" y2="44.340794" x2="71.204407" y1="6.2375584" x1="71.204407" /> <linearGradient gradientTransform="matrix(0.8047894,0,0,0.60165743,-1628.8199,-1928.0804)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient27416-1-5" id="linearGradient11527-6-5" y2="3241.9966" x2="2035.1652" y1="3208.0737" x1="2035.1652" /> </defs> <metadata id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.98999999;fill:url(#linearGradient11527-6-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999982;marker:none;enable-background:accumulate" id="path2555-7-8-5-0-9" d="M 12,1.4999999 C 6.2064599,1.4999999 1.4999999,6.2064599 1.4999999,12 1.4999999,17.79354 6.2064599,22.5 12,22.5 17.79354,22.5 22.50001,17.79354 22.5,12 22.5,6.2064599 17.79354,1.4999999 12,1.4999999 Z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#206b00;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path2555-7-8-5-1" d="M 12,1.4999999 C 6.2064599,1.4999999 1.4999999,6.2064599 1.4999999,12 1.4999999,17.79354 6.2064599,22.5 12,22.5 17.79354,22.5 22.50001,17.79354 22.5,12 22.5,6.2064599 17.79354,1.4999999 12,1.4999999 Z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.84323651;marker:none;enable-background:accumulate" id="path2922-6-6-0-9-7" d="m 15.98656,7.6243199 2.01342,1.81209 -6.76511,8.9395901 -5.2348901,-4.51006 1.73154,-2.29531 3.0604001,2.65772 z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:url(#linearGradient12398-3);stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path8655-6-0-9-5-0" d="m 21.49999,11.99966 c 0,5.24688 -4.25361,9.50034 -9.49988,9.50034 -5.2467501,0 -9.5001101,-4.25351 -9.5001101,-9.50034 0,-5.2466301 4.25336,-9.4996601 9.5001101,-9.4996601 5.24627,0 9.49988,4.25303 9.49988,9.4996601 z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.84323651;marker:none;enable-background:accumulate" id="path2922-6-6-0-9-4-2" d="m 15.98656,6.6246799 2.01342,1.81209 -6.76511,8.9395901 -5.2348901,-4.51006 1.73154,-2.29531 3.0604001,2.65772 z" /> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/emblems/emblem-cloud-online.svg���������������������������0000644�0001750�0000144�00000003336�15104114162�025426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg height="479pt" viewBox="0 -88 479.60456 479" width="479pt" version="1.1" id="svg6" sodipodi:docname="emblem-cloud-online.svg" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> <defs id="defs10" /> <sodipodi:namedview id="namedview8" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:document-units="pt" showgrid="false" inkscape:zoom="1.3669102" inkscape:cx="318.96755" inkscape:cy="319.33334" inkscape:window-width="2560" inkscape:window-height="1361" inkscape:window-x="-9" inkscape:window-y="-9" inkscape:window-maximized="1" inkscape:current-layer="svg6" /> <path d="m383.605469 120.3125c-5.851563.003906-11.6875.585938-17.425781 1.746094-4.324219-21.582032-18.304688-39.992188-37.929688-49.957032-19.628906-9.964843-42.742188-10.386718-62.71875-1.140624-18.078125-49.792969-73.101562-75.507813-122.898438-57.425782-49.796874 18.078125-75.507812 73.101563-57.429687 122.898438-43.621094 1.378906-78.078125 37.480468-77.421875 81.121094.652344 43.636718 36.179688 78.691406 79.824219 78.757812h296c48.601562 0 88-39.398438 88-88 0-48.597656-39.398438-88-88-88zm0 0" fill="#000000" id="path2" style="fill:#d2d2d2;fill-opacity:1;stroke:#3cc1f4;stroke-opacity:1;stroke-width:20.02524195;stroke-miterlimit:4;stroke-dasharray:none" /> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/emblems/emblem-cloud-offline.svg��������������������������0000644�0001750�0000144�00000012446�15104114162�025566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg id="svg2" height="24" width="24" version="1.2" sodipodi:docname="process-completed.svg" inkscape:export-filename="x:\onedrive\24x24\emblems\emblem-cloud-local.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <sodipodi:namedview id="namedview20" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="36.375" inkscape:cx="11.051546" inkscape:cy="12" inkscape:window-width="2560" inkscape:window-height="1361" inkscape:window-x="-9" inkscape:window-y="-9" inkscape:window-maximized="1" inkscape:current-layer="svg2" /> <defs id="defs4"> <linearGradient id="linearGradient4011"> <stop offset="0" style="stop-color:#ffffff;stop-opacity:1" id="stop4013" /> <stop offset="0.507761" style="stop-color:#ffffff;stop-opacity:0.23529412" id="stop4015-3" /> <stop offset="0.83456558" style="stop-color:#ffffff;stop-opacity:0.15686275" id="stop4017-2" /> <stop offset="1" style="stop-color:#ffffff;stop-opacity:0.39215687" id="stop4019" /> </linearGradient> <linearGradient id="linearGradient27416-1-5"> <stop offset="0" style="stop-color:#9bdb4d;stop-opacity:1" id="stop27420-2-2" /> <stop offset="1" style="stop-color:#68b723;stop-opacity:1" id="stop27422-3-2" /> </linearGradient> <linearGradient gradientTransform="matrix(0.5135135,0,0,0.5135135,-24.83614,-1.0212801)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4011" id="linearGradient12398-3" y2="44.340794" x2="71.204407" y1="6.2375584" x1="71.204407" /> <linearGradient gradientTransform="matrix(0.8047894,0,0,0.60165743,-1628.8199,-1928.0804)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient27416-1-5" id="linearGradient11527-6-5" y2="3241.9966" x2="2035.1652" y1="3208.0737" x1="2035.1652" /> </defs> <metadata id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.98999999;fill:#d2d2d2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999982;marker:none;enable-background:accumulate" id="path2555-7-8-5-0-9" d="M 12,1.4999999 C 6.2064599,1.4999999 1.4999999,6.2064599 1.4999999,12 1.4999999,17.79354 6.2064599,22.5 12,22.5 17.79354,22.5 22.50001,17.79354 22.5,12 22.5,6.2064599 17.79354,1.4999999 12,1.4999999 Z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#206b00;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path2555-7-8-5-1" d="M 12,1.4999999 C 6.2064599,1.4999999 1.4999999,6.2064599 1.4999999,12 1.4999999,17.79354 6.2064599,22.5 12,22.5 17.79354,22.5 22.50001,17.79354 22.5,12 22.5,6.2064599 17.79354,1.4999999 12,1.4999999 Z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.84323651;marker:none;enable-background:accumulate" id="path2922-6-6-0-9-7" d="m 15.98656,7.6243199 2.01342,1.81209 -6.76511,8.9395901 -5.2348901,-4.51006 1.73154,-2.29531 3.0604001,2.65772 z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:url(#linearGradient12398-3);stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path8655-6-0-9-5-0" d="m 21.49999,11.99966 c 0,5.24688 -4.25361,9.50034 -9.49988,9.50034 -5.2467501,0 -9.5001101,-4.25351 -9.5001101,-9.50034 0,-5.2466301 4.25336,-9.4996601 9.5001101,-9.4996601 5.24627,0 9.49988,4.25303 9.49988,9.4996601 z" /> <path style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#206b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.84323651;marker:none;enable-background:accumulate" id="path2922-6-6-0-9-4-2" d="m 15.98656,6.6246799 2.01342,1.81209 -6.76511,8.9395901 -5.2348901,-4.51006 1.73154,-2.29531 3.0604001,2.65772 z" /> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021047� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/network-wired.svg���������������������������������0000644�0001750�0000144�00000012450�15104114162�024373� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient12810"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#e5e5e5" offset="1"/> </linearGradient> <radialGradient id="radialGradient12962" cx="30.204" cy="44.565" r="6.566" gradientTransform="matrix(1 7.1069e-17 -4.3595e-17 .33846 -5.0366e-14 29.482)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient3152" x1="84.999" x2="62.591" y1="25.21" y2="12.022" gradientTransform="matrix(1.3741 0 0 1.3741 -85.102 -12.388)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient12810"/> <radialGradient id="radialGradient3156" cx="88.593" cy="33.399" r="7.0056" gradientTransform="matrix(.88944 .20922 -.17864 .75945 -34.977 -11.864)" gradientUnits="userSpaceOnUse"> <stop stop-color="#cccccd" offset="0"/> <stop stop-color="#adadae" offset="0"/> <stop stop-color="#8f8f90" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient3159" x1="88.75" x2="92.062" y1="31.656" y2="36.656" gradientTransform="matrix(1.3741 0 0 1.3741 -84.459 -12.067)" gradientUnits="userSpaceOnUse"> <stop stop-color="#515152" offset="0"/> <stop stop-color="#515152" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3166" x1="65.624" x2="87.529" y1="21.46" y2="21.46" gradientTransform="matrix(1.3741 0 0 1.3741 -85.102 -12.388)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient12810"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Network</dc:title> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <g fill-rule="evenodd"> <path transform="matrix(2.7527 1.4384 -2.4554 4.6796 48.4 -223.04)" d="m36.77 44.565a6.566 2.2223 0 1 1-13.132 0 6.566 2.2223 0 1 1 13.132 0z" color="#000000" fill="url(#radialGradient12962)" opacity=".40642"/> <path d="m12.801 5.8182-7.6433 6.6986 0.25764 6.1404 17.992 16.188 11.594-10.735 0.25764-6.6986-22.457-11.594z" color="#000000" fill="#484848" stroke="#4d4d4d" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/> <path d="m5.0704 12.658 0.24671 5.9211 18.257 16.036-0.24671-6.4145-18.257-15.543z" color="#000000" fill="#a6a6a6"/> <path d="m23.327 28.201v6.5379l11.596-10.732 0.24671-6.6613-11.842 10.855z" color="#000000" fill="#7f7f7f"/> <path d="m5.0704 12.669 18.503 15.779 11.596-10.855-22.451-11.842-7.6481 6.9189z" color="#000000" fill="url(#linearGradient3166)"/> </g> <g fill="#ffc11a" fill-rule="evenodd"> <path d="m6.2665 11.645 2.8747 2.0003s0.67846 0.24671 0.98685 0c0.30839-0.24671 0.24671-0.98685 0.24671-0.98685l-2.8747-2.2579-1.2336 1.2445z" color="#000000"/> <path d="m8.401 9.6711 2.9606 2.0003s0.67846 0.24671 0.98685 0c0.30839-0.24671 0.24671-0.98685 0.24671-0.98685l-2.8747-2.2579-1.3194 1.2445z" color="#000000"/> <path d="m10.584 7.7348 2.8747 2.0861s0.67846 0.24671 0.98685 0c0.30839-0.24671 0.24671-0.98685 0.24671-0.98685l-2.9606-2.3438-1.1477 1.2445z" color="#000000"/> </g> <path d="m12.83 6.3689-7.0819 6.636 0.23872 5.3459 17.271 15.515 11.086-10.29 0.23871-5.6054-21.753-11.601z" color="#000000" fill="none" opacity=".34225" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m31.564 28.211s5.8398 2.3187 8.9315 7.0421c3.0917 4.7234 4.8092 11.594 4.8092 11.594" color="#000000" fill="none" stroke="url(#linearGradient3159)" stroke-linecap="round" stroke-linejoin="bevel" stroke-miterlimit="10" stroke-width="5"/> <g fill-rule="evenodd"> <path d="m32.201 26.733c-0.83283 0.10088-1.4913 0.75356-1.5995 1.5855-0.10822 0.83191 0.36135 1.6313 1.1406 1.9419 0 0 4.8833 2.6652 6.5189 5.164 1.7888 2.7328 2.9825 7.1981 2.9825 7.1981 0.25341 0.98198 1.2549 1.5726 2.2369 1.3192 0.98198-0.25342 1.5726-1.2549 1.3192-2.2369 0 0-1.1005-4.7116-3.4413-8.2879-2.4941-3.8104-8.2395-6.5405-8.2395-6.5405-0.28855-0.12568-0.60456-0.17506-0.91769-0.14339z" color="#000000" fill="url(#radialGradient3156)"/> <path d="m15.926 15.865 15.05 11.349c1.727 1.1102 3.3923-0.18504 4.4408-1.4803 1.0485-1.2952 0.8635-2.8372-0.24671-3.7007l-16.036-8.635-3.2073 2.4671z" color="#000000" fill="#a0a0a1"/> <path d="m15.309 15.865 15.42 9.3751c0.8635 0.61678 2.7138-0.12336 3.454-0.98685 0.74014-0.8635 0.12336-2.0971-0.49342-2.4671l-14.679-8.7583-3.7007 2.8372z" color="#000000" fill="url(#linearGradient3152)"/> </g> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/media-optical.svg���������������������������������0000644�0001750�0000144�00000021303�15104114162�024277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient3435" x1="12.274" x2="35.391" y1="32.416" y2="14.203" gradientUnits="userSpaceOnUse"> <stop stop-color="#ffffc8" offset="0"/> <stop stop-color="#9a91ef" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4236"> <stop stop-color="#fff" stop-opacity=".32673" offset="0"/> <stop stop-color="#fff" stop-opacity=".60396" offset="1"/> </linearGradient> <linearGradient id="linearGradient23353" x1="28.703" x2="17.743" y1="31.495" y2="18.367" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient23368" cx="133.84" cy="23.914" r="21.333" gradientTransform="matrix(-.050482 .013878 -.12844 -.4672 35.413 39.442)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3435"/> <radialGradient id="radialGradient23371" cx="35.511" cy="21.618" r="21.333" gradientTransform="matrix(.10592 -.019142 .10479 .57981 17.137 7.1152)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3435"/> <radialGradient id="radialGradient23374" cx="16.885" cy="33.378" r="21.333" gradientTransform="matrix(.0051843 -.12286 .54455 .022978 .95723 26.308)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3435"/> <radialGradient id="radialGradient23377" cx="53.557" cy="48.238" r="21.333" gradientTransform="matrix(.15845 -.15899 .43291 .43144 -2.7236 15.001)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#b8c04c" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient23380" cx="26.138" cy="38.807" r="21.333" gradientTransform="matrix(.7695 -1.2425 .6703 .41514 -21.779 41.366)" gradientUnits="userSpaceOnUse"> <stop stop-color="#b307ff" stop-opacity=".82178" offset="0"/> <stop stop-color="#f0ff8b" stop-opacity=".64356" offset="1"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient23383" cx="37.751" cy="27.569" r="21.333" gradientTransform="matrix(.84868 .95802 -.78212 .69283 18.691 -20.526)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff307" offset="0"/> <stop stop-color="#166eff" offset=".5"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient23387" x1="10.502" x2="48.799" y1="3.61" y2="54.698" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient23390" x1="21.125" x2="29" y1="14.625" y2="28" gradientTransform="matrix(1.25 0 0 1.25 -5.653 -2.6042)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4236"/> <linearGradient id="linearGradient23397" x1="12.274" x2="35.391" y1="32.416" y2="14.203" gradientTransform="matrix(1.1905 0 0 1.1905 -4.2244 -2.5)" gradientUnits="userSpaceOnUse"> <stop stop-color="#FBFBFB" offset="0"/> <stop stop-color="#B6B6B6" offset=".5"/> <stop stop-color="#E4E4E4" offset="1"/> </linearGradient> <linearGradient id="linearGradient23400" x1="14.997" x2="32.511" y1="11.188" y2="34.308" gradientTransform="matrix(1.1905 0 0 1.1905 -4.2244 -2.5)" gradientUnits="userSpaceOnUse"> <stop stop-color="#EBEBEB" offset="0"/> <stop stop-color="#fff" offset=".5"/> <stop stop-color="#EBEBEB" offset="1"/> </linearGradient> <radialGradient id="radialGradient23425" cx="23.335" cy="41.636" r="22.627" gradientTransform="matrix(1 0 0 .25 0 31.227)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media CD-ROM</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <dc:subject> <rdf:Bag> <rdf:li>cdrom</rdf:li> <rdf:li>media</rdf:li> <rdf:li>removable</rdf:li> <rdf:li>cd</rdf:li> <rdf:li>audio</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <path transform="matrix(1 0 0 1.0663 1 -2.8851)" d="m45.962 41.636a22.627 5.6569 0 1 1-45.255 0 22.627 5.6569 0 1 1 45.255 0z" color="#000000" fill="url(#radialGradient23425)" fill-rule="evenodd" opacity=".55"/> <g> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#linearGradient23400)"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#linearGradient23397)" stroke="#808080"/> <path d="m24.347 14.896c-5.6426 0-10.104 4.5928-10.104 10.104 0 5.6426 4.5928 10.104 10.104 10.104 5.6426 0 10.104-4.5928 10.104-10.104 0-5.6426-4.5928-10.104-10.104-10.104zm0 15.616c-3.0181 0-5.5114-2.4932-5.5114-5.5114 0-3.0181 2.4932-5.5114 5.5114-5.5114s5.5114 2.4932 5.5114 5.5114c0 3.0181-2.4932 5.5114-5.5114 5.5114z" opacity=".11"/> <path d="m29.922 5.6692-3.5966 13.995c1.1247 0.29952 2.0241 0.99547 2.6351 1.9585l12.392-7.5493c-2.5352-4.1297-6.6042-7.1681-11.431-8.4039z" fill="url(#linearGradient23390)"/> <path d="m17.308 43.766 4.7353-13.651c-1.0963-0.39099-1.9354-1.1586-2.4651-2.1686l-12.971 6.5046c2.1871 4.3242 5.9924 7.6869 10.701 9.3155z" fill="url(#linearGradient23390)"/> </g> <path d="m24.347 5.2024c-10.974 0-19.798 8.8241-19.798 19.798 0 10.974 8.8241 19.798 19.798 19.798s19.798-8.8241 19.798-19.798c0-10.974-8.8241-19.798-19.798-19.798z" fill="none" opacity=".54645" stroke="url(#linearGradient23387)"/> <path transform="translate(.088388 .088389)" d="m30.406 24.931a6.0988 6.0988 0 1 1-12.198 0 6.0988 6.0988 0 1 1 12.198 0z" color="#000000" fill="none" opacity=".67213" stroke="url(#linearGradient23353)" stroke-width=".93054"/> <g> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23383)" opacity=".11429"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23380)" opacity=".097143"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23377)" opacity=".71429"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23374)" opacity=".62286"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23371)" opacity=".37143"/> <path d="m24.347 4.1667c-11.548 0-20.833 9.2857-20.833 20.833 0 11.548 9.2857 20.833 20.833 20.833s20.833-9.2857 20.833-20.833c0-11.548-9.2857-20.833-20.833-20.833zm0 25.833c-2.7381 0-5-2.2619-5-5 0-2.7381 2.2619-5 5-5s5 2.2619 5 5c0 2.7381-2.2619 5-5 5z" fill="url(#radialGradient23368)" opacity=".23429"/> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/media-floppy.svg����������������������������������0000644�0001750�0000144�00000012020�15104114162�024151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient6719" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient6717" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient6715" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2269" x1="40.885" x2="16.88" y1="71.869" y2="-.38931" gradientTransform="matrix(.97661 0 0 1.1398 .56422 -3.2712)" gradientUnits="userSpaceOnUse"> <stop stop-color="#1e2d69" offset="0"/> <stop stop-color="#78a7e0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2283" x1="13.784" x2="33.075" y1="-.99673" y2="55.702" gradientTransform="matrix(.98543 0 0 1.1482 .64107 -2.9339)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2348" x1="20.125" x2="28.562" y1="21.844" y2="42.469" gradientTransform="matrix(1.0677 0 0 1.1215 -1.3689 -5.5745)" gradientUnits="userSpaceOnUse"> <stop stop-color="#858585" offset="0"/> <stop stop-color="#cbcbcb" offset=".5"/> <stop stop-color="#6b6b6b" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media Floppy</dc:title> <dc:creator> <cc:Agent> <dc:title>Tuomas Kuosmanen</dc:title> </cc:Agent> </dc:creator> <dc:source>http://www.tango-project.org</dc:source> <dc:subject> <rdf:Bag> <rdf:li>save</rdf:li> <rdf:li>document</rdf:li> <rdf:li>store</rdf:li> <rdf:li>file</rdf:li> <rdf:li>io</rdf:li> <rdf:li>floppy</rdf:li> <rdf:li>media</rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024158 0 0 .020868 45.237 41.654)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient6715)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient6717)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient6719)" opacity=".40206"/> </g> <g> <path d="m4.5578 3.5676h38.89c0.58929 0 1.0637 0.47441 1.0637 1.0637v37.765c0 0.58929-0.47441 1.0637-1.0637 1.0637h-36.89l-3.0637-3.0637v-35.765c0-0.58929 0.47441-1.0637 1.0637-1.0637z" fill="url(#linearGradient2269)" stroke="#25375f" stroke-linecap="round" stroke-linejoin="round"/> <rect x="9" y="4" width="30" height="23" fill="#fff"/> <rect x="9" y="4" width="30" height="4" rx=".12621" ry=".12621" fill="#d31c00"/> </g> <g> <rect x="6" y="6" width="2" height="2" rx=".12621" ry=".12621" opacity=".73864"/> <g stroke="#000"> <path d="m11 12.5h26" opacity=".13068"/> <path d="m11 17.5h26" opacity=".13068"/> <path d="m11 22.5h26" opacity=".13068"/> </g> </g> <g> <path d="m4.6189 4.5277h38.768c0.069919 0 0.12621 0.056289 0.12621 0.12621v37.648c0 0.069919-0.056289 0.12621-0.12621 0.12621h-36.459l-2.4356-2.3914v-35.383c0-0.069919 0.056289-0.12621 0.12621-0.12621z" fill="none" opacity=".59659" stroke="url(#linearGradient2283)" stroke-linecap="round"/> <path d="m14.114 28.562h19.75c0.88797 0 1.6028 0.75091 1.6028 1.6837v13.202h-22.955v-13.202c0-0.93274 0.71486-1.6837 1.6028-1.6837z" fill="url(#linearGradient2348)" stroke="#525252"/> <rect x="16.464" y="30.457" width="5.0298" height="10.066" rx=".75121" ry=".75121" fill="#4967a2" stroke="#525252"/> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/media-flash.svg�����������������������������������0000644�0001750�0000144�00000016151�15104114162�023746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient6105" x1="22.797" x2="22.797" y1="39.68" y2="46.636" gradientTransform="matrix(1 0 0 .934 0 1.558)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#dededa" offset=".89189"/> <stop stop-color="#838375" offset="1"/> </linearGradient> <linearGradient id="linearGradient6202" x1="29.375" x2="22.102" y1="21.741" y2="7.6786" gradientUnits="userSpaceOnUse"> <stop stop-color="#edd400" offset="0"/> <stop stop-color="#c3af07" offset=".5"/> <stop stop-color="#ffeb3e" offset="1"/> </linearGradient> <linearGradient id="linearGradient6208" x1="21.617" x2="26.444" y1="4.6076" y2="47.007" gradientTransform="matrix(1 0 0 .98252 0 -.070767)" gradientUnits="userSpaceOnUse"> <stop stop-color="#555753" offset="0"/> <stop stop-color="#3e3f3c" offset="1"/> </linearGradient> <linearGradient id="linearGradient6216" x1="16.846" x2="30.508" y1="8.6785" y2="78.505" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <filter id="filter5339" x="-.068966" y="-.62069" width="1.1379" height="2.2414"> <feGaussianBlur stdDeviation="1.1886709"/> </filter> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Generic Flash Media</dc:title> <dc:subject> <rdf:Bag> <rdf:li>flash</rdf:li> <rdf:li>memory</rdf:li> <rdf:li>removable</rdf:li> <rdf:li>photo</rdf:li> </rdf:Bag> </dc:subject> <dc:rights> <cc:Agent> <dc:title>Novell, Inc., Jakub Steiner</dc:title> </cc:Agent> </dc:rights> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <g> <rect transform="matrix(.96581 0 0 1 .82194 0)" x="3.3588" y="41.99" width="41.366" height="4.5962" rx="2.3794" ry="2.2981" color="#000000" filter="url(#filter5339)" opacity=".43373"/> <path id="path4291" d="m5.5 3.2369v40.382c0.069706 1.0502 0.99874 2.1024 2.3834 1.9974h31.852c0.89357-0.04311 1.7778-0.7862 1.7647-2.2579v-36.93c0-0.71654-0.23125-1.1979-0.75626-1.7137 0 0-2.749-2.8355-2.749-2.8355-0.28726-0.27138-0.46396-0.37912-1.2595-0.37912h-30c-0.9375 0.061407-1.2978 0.99997-1.2353 1.7369z" color="black" fill="url(#linearGradient6208)" fill-rule="evenodd" stroke="#2e3436" stroke-dashoffset=".8"/> <rect x="9.5" y="5.6161" width="27.977" height="17" rx="1.8974" ry="1.8974" color="black" fill="#edd400" fill-rule="evenodd" stroke="#2e3436" stroke-dashoffset=".8" stroke-width="3"/> </g> <rect x="9.5" y="5.6161" width="27.977" height="17" rx="1.8974" ry="1.8974" color="black" fill="url(#linearGradient6202)" fill-rule="evenodd" stroke="#c4a000" stroke-dashoffset=".8"/> <rect transform="matrix(1 0 -.0055327 .99998 0 0)" x="10.578" y="6.6162" width="26" height="15" rx="1.1461" ry="1.1461" color="black" fill="none" opacity=".44944" stroke="#fff" stroke-dashoffset=".8"/> <g fill="#fff" fill-rule="evenodd"> <path d="m12 6.1161v6c7.2049-2.8603 15.058 3.978 23 2v-7.9281h1v15.928h-1v-6c-8.663 1.9407-15.554-5.0456-23-2v8h-1v-16h1z" color="black" opacity=".44944"/> <path d="m13 6.1161v4.7348l1-0.23922v-4.4956h-1z" color="black" opacity=".44944"/> <path d="m15 10.612v-4.4956h1v4.4072l-1 0.088388z" color="black" opacity=".44944"/> <path d="m17 10.523v-4.4072h1v4.5581l-1-0.15083z" color="black" opacity=".44944"/> <path d="m19 10.895v-4.779h1v5l-1-0.22097z" color="black" opacity=".44944"/> <path d="m21 11.275v-5.1585h1v5.3353l-1-0.17678z" color="black" opacity=".44944"/> <path d="m23 11.805v-5.6889h1v5.8214l-1-0.13258z" color="black" opacity=".44944"/> <path d="m25 12.335v-6.2192h1v6.396l-1-0.17678z" color="black" opacity=".44944"/> <path d="m27 12.733v-6.6169h1v6.7937l-1-0.17678z" color="black" opacity=".44944"/> <path d="m29 13.219v-7.1031h1v7.1915l-1-0.088388z" color="black" opacity=".44944"/> <path d="m31 13.396v-7.2798h1v7.2798l-1-1e-6z" color="black" opacity=".44944"/> <path d="m33 13.396v-7.2798h1v7.1473l-1 0.13258z" color="black" opacity=".44944"/> <path d="m13 22.07v-7.4307l1-0.11433v7.545h-1z" color="black" opacity=".44944"/> <path d="m15 14.481v7.5892h1v-7.7218l-1 0.13258z" color="black" opacity=".44944"/> <path d="m17 14.348v7.7218h1v-7.6075l-1-0.11433z" color="black" opacity=".44944"/> <path d="m19 14.772v7.2981h1v-7.0771l-1-0.22097z" color="black" opacity=".44944"/> <path d="m21 15.232v6.8379h1v-6.5727l-1-0.26516z" color="black" opacity=".44944"/> <path d="m23 15.851v6.2192h1v-5.8656l-1-0.35355z" color="black" opacity=".44944"/> <path d="m25 16.381v5.6889h1v-5.4237l-1-0.26516z" color="black" opacity=".44944"/> <path d="m27 16.823v5.2469h1v-5.0701l-1-0.17678z" color="black" opacity=".44944"/> <path d="m29 17.177v4.8934h1v-4.8492l-1-0.044194z" color="black" opacity=".44944"/> <path d="m31 17.398v4.6724h1v-4.805l-1 0.13258z" color="black" opacity=".44944"/> <path d="m33 17.354v4.7166h1v-4.8934l-1 0.17678z" color="black" opacity=".44944"/> </g> <g fill-rule="evenodd"> <rect x="8" y="35.116" width="31" height="11" rx=".81718" ry=".81718" color="black" fill="#2e3436"/> <rect x="9" y="36.116" width="29" height="9" rx=".12968" ry=".12968" color="black" fill="url(#linearGradient6105)"/> <rect x="9" y="36.116" width="29" height="3" rx=".12968" ry=".12968" color="black" fill="#8f5902"/> <rect x="11" y="37.116" width="10.036" height="2" rx=".12968" ry=".12968" color="black" fill="#e9b96e"/> <rect x="22.964" y="37.116" width="4.0364" height="2" rx=".12968" ry=".12968" color="black" fill="#e9b96e"/> </g> <path d="m6.8125 2.5c-0.14109 0.0092414-0.14702 0.005736-0.21875 0.125s-0.1077 0.36682-0.09375 0.53125c0.001465 0.031233 0.001465 0.062517 0 0.09375v40.312c0.03409 0.5136 0.4648 1.1268 1.3125 1.0625 0.020828-6.51e-4 0.041672-6.51e-4 0.0625 0h31.812c0.35473-0.017114 0.82204-0.20659 0.8125-1.2812v-36.906c-1e-6 -0.50713-0.034819-0.60436-0.4375-1-0.010645-0.010185-0.021065-0.020604-0.03125-0.03125 0 0-2.6587-2.7504-2.7188-2.8125-0.059691-0.056392-0.029281-0.028176-0.03125-0.03125s-0.031319-0.031273-0.03125-0.03125c1.38e-4 4.67e-5 -0.14569-0.03125-0.5-0.03125h-29.938z" color="black" fill="none" opacity=".17978" stroke="url(#linearGradient6216)" stroke-dashoffset=".8" xlink:href="#path4291"/> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/drive-removable-media.svg�������������������������0000644�0001750�0000144�00000016006�15104114162�025733� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient6719" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient6717" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient6715" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2681"> <stop stop-opacity=".47525" offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4234" x1="7.6046" x2="36.183" y1="28.481" y2="40.944" gradientTransform="translate(0 .055463)" gradientUnits="userSpaceOnUse"> <stop stop-color="#bbb" offset="0"/> <stop stop-color="#9f9f9f" offset="1"/> </linearGradient> <radialGradient id="radialGradient4250" cx="15.571" cy="2.9585" r="20.936" gradientTransform="matrix(1.2862 .7817 -.71078 1.1696 -2.3543 -4.8214)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e4e4e4" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </radialGradient> <linearGradient id="linearGradient4260" x1="12.378" x2="44.096" y1="4.4331" y2="47.621" gradientTransform="translate(0 .055463)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient2679" cx="40.797" cy="33.734" r=".98438" gradientTransform="matrix(1.254 -7.2182e-15 7.2182e-15 1.254 -10.361 -8.5675)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#6f6f6f" offset="1"/> </radialGradient> <linearGradient id="linearGradient2687" x1="25.785" x2="25.785" y1="32.363" y2="35.67" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2681"/> <linearGradient id="linearGradient5705" x1="34.421" x2="16.127" y1="22.705" y2="10.596" gradientUnits="userSpaceOnUse"> <stop stop-color="#7a7a7a" offset="0"/> <stop stop-color="#a5a5a5" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Drive - Removable</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>media</rdf:li> <rdf:li>removable</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:identifier/> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024527 0 0 .020868 45.691 36.154)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient6715)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient6717)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient6719)" opacity=".40206"/> </g> <path d="m11.286 8.0181c-0.625 0-1.0312 0.29018-1.2812 0.84375-1e-6 0-6.4688 17.104-6.4688 17.104s-0.25 0.67156-0.25 1.7812v9.65c0 1.0826 0.65779 1.625 1.6562 1.625h38.562c0.98485 0 1.5938-0.71818 1.5938-1.8438v-9.65s0.10596-0.77042-0.09375-1.3125l-6.7188-17.197c-0.18452-0.51191-0.6369-0.9881-1.125-1h-25.875z" fill="none" stroke="#535353" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <g fill-rule="evenodd"> <path d="m3.2736 27.052 0.7646-0.69222 37.61 0.0625 3.4624 0.3173v10.439c0 1.1256-0.60702 1.8433-1.5919 1.8433h-38.583c-0.99846 0-1.6618-0.54205-1.6618-1.6247v-10.345z" fill="url(#linearGradient4234)"/> <path d="m3.5491 25.97c-0.71429 1.4643-6.156e-4 2.3929 1.0357 2.3929h39c1.119-0.02381 1.8452-1.0119 1.4286-2.1429l-6.7143-17.211c-0.18452-0.51191-0.65476-0.9881-1.1429-1h-25.857c-0.625 0-1.0357 0.30357-1.2857 0.85715l-6.4643 17.104z" fill="url(#radialGradient4250)"/> <path d="m43.562 27.674s-38.119-1e-6 -38.119 0c-1.2892 0-1.9119-0.23656-2.1282-0.77967 0.091761 0.94433 0.87001 1.5609 2.1282 1.5609-1e-7 -1e-6 38.119 0 38.119 0 1.076-0.033071 1.7394-0.85875 1.4847-2.1551-0.13405 0.84158-0.57663 1.3459-1.4847 1.3739z" fill="#fff"/> </g> <path d="m38.345 9.2121 6.1553 15.538c-0.61872-0.39775-0.88128-0.71339-1.5-0.625h-37.75c-0.70711 0-1.4116 0.75-1.4116 0.75l6.2866-16c0.13388-0.49965 0.6237-0.80178 1.2866-0.80178l25.419-0.088388c1.3258 0.17678 1.2929 0.60853 1.5139 1.2273z" color="#000000" fill="url(#linearGradient5705)"/> <path d="m44.708 25.362c-0.33422-0.23351-0.63497-0.19452-1.1895-0.22243l-38.782-0.26516c-0.57452 0.044194-1.2409 0.80968-1.2409 0.80968l0.57106-1.4s0.33968-1.1632 1.5979-1.1632c-1e-7 1e-6 37.191 0 37.191 0 0.72245 0.033071 1.1672 0.42966 1.3522 0.89557l0.50028 1.3455z" fill="#686868" fill-rule="evenodd"/> <path d="m11.643 8.4712c-0.60169 0-0.99279 0.27936-1.2335 0.81229-1e-6 0-6.415 16.591-6.415 16.591s-0.24068 0.64652-0.24068 1.7148v9.2901c0 1.3547 0.44406 1.6269 1.5945 1.6269h37.687c1.3231 0 1.5343-0.3164 1.5343-1.8375v-9.2901s0.10201-0.74169-0.090255-1.2636l-6.5932-16.806c-0.17764-0.49282-0.55065-0.82625-1.0205-0.83771h-25.223z" fill="none" stroke="url(#linearGradient4260)" stroke-linecap="round" stroke-linejoin="round"/> <g> <g transform="matrix(.8282 0 0 .61024 4.176 11.161)" fill="url(#linearGradient2687)"> <rect x="5.3414" y="32.363" width="37.931" height="3.865" color="#000000" fill="url(#linearGradient2687)" fill-rule="evenodd"/> </g> <path d="m8.625 33.25s0.44465 0.81694 1.2401 0.77275l30.85-0.022748c-0.044194-2.4307-0.6875-3.1186-0.6875-3.1186l0.034615 2.4311-31.438-0.0625z" fill="#fff" fill-rule="evenodd" opacity=".71429"/> <path transform="matrix(1.381 0 0 1.381 -15.625 -10.946)" d="m42 33.984a0.98438 0.98438 0 1 1-1.9688 0 0.98438 0.98438 0 1 1 1.9688 0z" color="#000000" fill="url(#radialGradient2679)" fill-rule="evenodd"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/drive-removable-media-usb.svg���������������������0000644�0001750�0000144�00000024474�15104114162�026532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="128" height="128" version="1.0" viewBox="0 0 128 128" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs><filter id="filter3858"><feGaussianBlur stdDeviation="2.29"/></filter><linearGradient id="linearGradient3431" x1="64.001" x2="64.001" y1="94" y2="17" gradientUnits="userSpaceOnUse"><stop stop-color="#ffbf80" offset=".3965"/><stop stop-color="#fdba7d" offset=".4323"/><stop stop-color="#f7a971" offset=".6024"/><stop stop-color="#f39e6a" offset=".7849"/><stop stop-color="#f29b68" offset="1"/></linearGradient><linearGradient id="linearGradient3473" x1="64" x2="64" y1="101.72" y2="6.5005" gradientUnits="userSpaceOnUse"><stop stop-color="#ddd" offset="0"/><stop stop-color="#e3e3e3" offset=".3335"/><stop stop-color="#f4f4f4" offset=".7789"/><stop stop-color="#fff" offset="1"/></linearGradient><radialGradient id="radialGradient3476" cx="63" cy="124" r="162" gradientUnits="userSpaceOnUse"><stop stop-color="#eeeeec" offset="0"/><stop stop-color="#fafaf9" offset=".2777"/><stop stop-color="#fff" offset=".5385"/><stop stop-color="#fbfbfb" offset=".6335"/><stop stop-color="#f1f1ef" offset=".7282"/><stop stop-color="#eeeeec" offset=".7456"/><stop stop-color="#f2f2f0" offset=".8624"/><stop stop-color="#fcfcfc" offset=".9787"/><stop stop-color="#fff" offset="1"/></radialGradient><radialGradient id="radialGradient3479" cx="63" cy="124" r="162" gradientUnits="userSpaceOnUse"><stop stop-color="#888" offset="0"/><stop stop-color="#939393" offset=".0025"/><stop stop-color="#bababa" offset=".0125"/><stop stop-color="#d7d7d7" offset=".0216"/><stop stop-color="#e8e8e8" offset=".0296"/><stop stop-color="#eee" offset=".0355"/><stop stop-color="#bbb" offset=".6154"/><stop stop-color="#bfbfbf" offset=".6824"/><stop stop-color="#cbcbcb" offset=".7492"/><stop stop-color="#ddd" offset=".8107"/></radialGradient><linearGradient id="linearGradient3482" x1="64.001" x2="64.001" y1="104.85" y2="101.98" gradientUnits="userSpaceOnUse"><stop stop-color="#ddd" offset="0"/><stop stop-color="#fdfdfd" offset=".525"/><stop stop-color="#fff" offset=".5621"/></linearGradient><linearGradient id="linearGradient3485" x1="64.001" x2="64.001" y1="115.32" y2="101.01" gradientUnits="userSpaceOnUse"><stop stop-color="#ddd" offset="0"/><stop stop-color="#bbb" offset=".2738"/><stop stop-color="#9f9f9f" offset=".5617"/><stop stop-color="#8e8e8e" offset=".8136"/><stop stop-color="#888" offset="1"/></linearGradient><linearGradient id="linearGradient3488" x1="64.001" x2="64.001" y1="116.5" y2="101.83" gradientUnits="userSpaceOnUse"><stop stop-color="#bbb" offset="0"/><stop stop-color="#9f9f9f" offset=".0954"/><stop stop-color="#8e8e8e" offset=".18"/><stop stop-color="#888" offset=".2426"/><stop stop-color="#888" offset="1"/></linearGradient><linearGradient id="linearGradient3491" x1="64.001" x2="64.001" y1="116.5" y2="101.83" gradientUnits="userSpaceOnUse"><stop stop-color="#888" offset="0"/><stop stop-color="#656565" offset=".2792"/><stop stop-color="#494949" offset=".565"/><stop stop-color="#383838" offset=".815"/><stop stop-color="#323232" offset="1"/></linearGradient></defs> <path transform="matrix(1 0 0 .97545 0 2.9586)" d="m19.2 5.5c-1.972 0-3.571 1.262-3.72 2.935l-8.467 94.827c-2e-3 0.029-4e-3 0.06-4e-3 0.089 0 0.028 1e-3 0.056 3e-3 0.084 0 0 0.013 0.155 0.025 0.301-4e-3 0.036-0.037 0.059-0.037 0.097v12.872c0 2.093 1.763 3.795 3.93 3.795h106.14c2.167 0 3.93-1.702 3.93-3.795v-12.872c0-0.038-0.033-0.061-0.037-0.098 0.012-0.152 0.024-0.31 0.024-0.31 2e-3 -0.026 3e-3 -0.053 3e-3 -0.079 0-0.029-1e-3 -0.06-4e-3 -0.089l-8.466-94.823c-0.146-1.672-1.745-2.934-3.72-2.934h-89.6z" filter="url(#filter3858)" opacity=".6"/> <path d="m121 114.7c0 0.991-0.896 1.795-2 1.795h-110c-1.104 0-2-0.804-2-1.795v-12.872h114v12.872z" fill="url(#linearGradient3491)"/><path d="m121 114.7c0 0.991-0.896 1.795-2 1.795h-110c-1.104 0-2-0.804-2-1.795v-12.872h114v12.872z" fill="url(#linearGradient3488)"/><path d="m119 113.59c-0.044 0.957-0.944 1.732-2.008 1.732h-105.98c-1.064 0-1.963-0.775-2.009-1.732l-0.589-12.571h111.17l-0.59 12.571z" fill="url(#linearGradient3485)"/><path d="m7 101.98c0.738 1.269 1.89 2.876 2.792 2.876h108.42c0.902 0 2.055-1.607 2.792-2.876h-114z" fill="url(#linearGradient3482)"/><path d="m17.571 5.5c-0.933 0-1.734 0.497-1.791 1.112l-8.775 94.828c-0.08 0.861 0.753 1.56 1.861 1.56h110.27c1.106 0 1.94-0.699 1.859-1.561l-8.774-94.827c-0.057-0.615-0.858-1.112-1.791-1.112h-92.858z" fill="url(#radialGradient3479)"/><path d="m17.571 6.5c-0.458 0-0.764 0.193-0.814 0.273 0 0.135-8.757 94.758-8.757 94.758v0.024c0 0.036 0.01 0.095 0.08 0.171 0.12 0.132 0.39 0.274 0.786 0.274h110.27c0.396 0 0.665-0.142 0.786-0.274 0.087-0.096 0.08-0.163 0.077-0.192 0-2e-3 -8.774-94.829-8.774-94.829-0.031-0.011-0.336-0.204-0.795-0.204h-92.858v-1e-3z" fill="url(#radialGradient3476)"/><path d="m16.757 7.773c0.05-0.081 0.355-0.273 0.814-0.273h92.858c0.459 0 0.764 0.193 0.795 0.204 0 0 7.854 84.872 8.699 94.018 0.083-0.093 0.078-0.159 0.075-0.188 0-2e-3 -8.774-94.829-8.774-94.829-0.031-0.011-0.336-0.204-0.795-0.204h-92.858c-0.458 0-0.764 0.193-0.814 0.273 0 0.134-8.757 94.757-8.757 94.757v0.024c0 0.035 0.012 0.092 0.076 0.165 0.845-9.138 8.681-93.819 8.681-93.947z" fill="url(#linearGradient3473)" opacity=".8"/> <linearGradient id="XMLID_20_" x1="180.37" x2="188.83" y1="-157.96" y2="-157.96" gradientTransform="matrix(0 -1 1 0 183 295.08)" gradientUnits="userSpaceOnUse"> <stop stop-color="#ddd" offset="0"/> <stop stop-color="#bbb" offset=".2738"/> <stop stop-color="#9f9f9f" offset=".5617"/> <stop stop-color="#8e8e8e" offset=".8136"/> <stop stop-color="#888" offset="1"/> </linearGradient> <path d="m25.034 114.71c2.331 0 4.229-1.897 4.229-4.229s-1.897-4.229-4.229-4.229-4.229 1.897-4.229 4.229 1.897 4.229 4.229 4.229z" fill="url(#XMLID_20_)"/> <radialGradient id="XMLID_21_" cx="25.037" cy="110.48" r="3.0208" fx="25" fy="110" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0ff80" offset="0"/> <stop stop-color="#edfe77" offset=".0509"/> <stop stop-color="#e3fc5f" offset=".1338"/> <stop stop-color="#d4f937" offset=".2385"/> <stop stop-color="#bff500" offset=".3599"/> <stop stop-color="#bff500" offset=".3609"/> <stop stop-color="#bcf400" offset=".4825"/> <stop stop-color="#b4f200" offset=".555"/> <stop stop-color="#a6ee00" offset=".6147"/> <stop stop-color="#92e800" offset=".6674"/> <stop stop-color="#77e100" offset=".7154"/> <stop stop-color="#57d800" offset=".7602"/> <stop stop-color="#31cd00" offset=".8024"/> <stop stop-color="#06c100" offset=".8414"/> <stop stop-color="#00bf00" offset=".8462"/> <stop stop-color="#008c00" offset="1"/> </radialGradient> <circle cx="25.037" cy="110.48" r="3.021" fill="url(#XMLID_21_)"/> <linearGradient id="XMLID_22_" x1="39.5" x2="39.5" y1="98" y2="9.0005" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#bbb" offset=".5089"/> <stop stop-color="#ddd" offset="1"/> </linearGradient> <path d="m15.185 90.812c-0.115 2.411-0.175 4.807-0.185 7.188h0.676c0.01-2.381 0.069-4.777 0.182-7.188 2.181-46.842 23.657-81.812 48.142-81.812-24.827 0-46.604 34.97-48.815 81.812z" fill="url(#XMLID_22_)"/> <linearGradient id="XMLID_23_" x1="88.5" x2="88.5" y1="98" y2="9.0005" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#bbb" offset=".5089"/> <stop stop-color="#ddd" offset="1"/> </linearGradient> <path d="m112.82 90.812c-2.212-46.842-23.989-81.812-48.816-81.812 24.485 0 45.962 34.97 48.143 81.812 0.112 2.41 0.172 4.807 0.182 7.188h0.675c-0.01-2.381-0.07-4.777-0.184-7.188z" fill="url(#XMLID_23_)"/> <path d="m87.606 35.569h-14.108v10.863h4.391c-0.132 4.092-0.854 7.749-2.244 8.82-1.742 1.341-4.637 2.097-7.189 2.763-0.325 0.084-0.65 0.17-0.974 0.257v-29.236h7.054l-9.876-13.036-9.876 13.036h7.054v37.492c-0.323-0.087-0.648-0.172-0.974-0.257-2.553-0.667-5.447-1.422-7.189-2.764-1.417-1.091-2.139-4.868-2.252-9.053 3.421-0.837 5.9-3.301 5.9-6.211 0-3.6-3.79-6.518-8.465-6.518s-8.465 2.918-8.465 6.518c0 2.758 2.229 5.112 5.374 6.063 0.086 4.46 0.869 9.927 3.917 12.275 2.674 2.059 6.386 3.027 9.369 3.806 0.931 0.243 2.123 0.556 2.785 0.802v9.154c-3.285 0.896-5.643 3.303-5.643 6.14 0 3.6 3.79 6.518 8.465 6.518 4.674 0 8.465-2.918 8.465-6.518 0-2.837-2.358-5.244-5.644-6.14v-17.411c0.661-0.246 1.854-0.559 2.784-0.801 2.983-0.778 6.695-1.748 9.369-3.806 2.961-2.281 3.785-7.507 3.909-11.893h4.062v-10.863h1e-3z" fill="#bbb"/><path d="m87.606 37.569h-14.108v10.863h4.391c-0.132 4.092-0.854 7.749-2.244 8.82-1.742 1.341-4.637 2.097-7.189 2.763-0.325 0.084-0.65 0.17-0.974 0.257v-29.236h7.054l-9.876-13.036-9.876 13.036h7.054v37.492c-0.323-0.087-0.648-0.172-0.974-0.257-2.553-0.667-5.447-1.422-7.189-2.764-1.417-1.091-2.139-4.868-2.252-9.053 3.421-0.837 5.9-3.301 5.9-6.211 0-3.6-3.79-6.518-8.465-6.518s-8.465 2.918-8.465 6.518c0 2.758 2.229 5.112 5.374 6.063 0.086 4.46 0.869 9.927 3.917 12.275 2.674 2.059 6.386 3.027 9.369 3.806 0.931 0.243 2.123 0.556 2.785 0.802v9.154c-3.285 0.896-5.643 3.303-5.643 6.14 0 3.6 3.79 6.518 8.465 6.518 4.674 0 8.465-2.918 8.465-6.518 0-2.837-2.358-5.244-5.644-6.14v-17.411c0.661-0.246 1.854-0.559 2.784-0.801 2.983-0.778 6.695-1.748 9.369-3.806 2.961-2.281 3.785-7.507 3.909-11.893h4.062v-10.863h1e-3z" fill="#fff"/><path d="m87.606 36.569h-14.108v10.863h4.391c-0.132 4.092-0.854 7.749-2.244 8.82-1.742 1.341-4.637 2.097-7.189 2.763-0.325 0.084-0.65 0.17-0.974 0.257v-29.236h7.054l-9.876-13.036-9.876 13.036h7.054v37.492c-0.323-0.087-0.648-0.172-0.974-0.257-2.553-0.667-5.447-1.422-7.189-2.764-1.417-1.091-2.139-4.868-2.252-9.053 3.421-0.837 5.9-3.301 5.9-6.211 0-3.6-3.79-6.518-8.465-6.518s-8.465 2.918-8.465 6.518c0 2.758 2.229 5.112 5.374 6.063 0.086 4.46 0.869 9.927 3.917 12.275 2.674 2.059 6.386 3.027 9.369 3.806 0.931 0.243 2.123 0.556 2.785 0.802v9.154c-3.285 0.896-5.643 3.303-5.643 6.14 0 3.6 3.79 6.518 8.465 6.518 4.674 0 8.465-2.918 8.465-6.518 0-2.837-2.358-5.244-5.644-6.14v-17.411c0.661-0.246 1.854-0.559 2.784-0.801 2.983-0.778 6.695-1.748 9.369-3.806 2.961-2.281 3.785-7.507 3.909-11.893h4.062v-10.863h1e-3z" fill="url(#linearGradient3431)"/> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/drive-optical.svg���������������������������������0000644�0001750�0000144�00000022250�15104114162�024333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient6719" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient6717" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient6715" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4234" x1="7.6046" x2="36.183" y1="28.481" y2="40.944" gradientTransform="translate(0 -1.9445)" gradientUnits="userSpaceOnUse"> <stop stop-color="#bbb" offset="0"/> <stop stop-color="#9f9f9f" offset="1"/> </linearGradient> <radialGradient id="radialGradient4250" cx="15.571" cy="2.9585" r="20.936" gradientTransform="matrix(1.2862 .7817 -.71078 1.1696 -2.3543 -6.8214)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e4e4e4" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </radialGradient> <linearGradient id="linearGradient4260" x1="12.378" x2="44.096" y1="4.4331" y2="47.621" gradientTransform="translate(0 -1.9445)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2155" x1="14.997" x2="32.511" y1="11.188" y2="34.308" gradientTransform="matrix(.95253 0 0 .65672 1.3455 19.22)" gradientUnits="userSpaceOnUse"> <stop stop-color="#EBEBEB" offset="0"/> <stop stop-color="#fff" offset=".5"/> <stop stop-color="#EBEBEB" offset="1"/> </linearGradient> <linearGradient id="linearGradient2161" x1="10.502" x2="48.799" y1="3.61" y2="54.698" gradientTransform="matrix(.73893 0 0 .50946 6.2158 21.992)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient2171" cx="24.218" cy="33.769" r="17.678" gradientTransform="matrix(1 0 0 .695 0 10.3)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2321" x1="24.307" x2="24.307" y1="33.693" y2="37.609" gradientUnits="userSpaceOnUse"> <stop stop-color="#656565" offset="0"/> <stop stop-color="#656565" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2335" x1="23.375" x2="23.375" y1="28.434" y2="32.938" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient2341" x1="24.307" x2="24.307" y1="32.791" y2="34.201" gradientTransform="matrix(1 0 0 .79943 -9.6537e-16 6.6046)" gradientUnits="userSpaceOnUse"> <stop stop-color="#656565" offset="0"/> <stop stop-color="#656565" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2343" x1="26.333" x2="26.194" y1="34.172" y2="21.988" gradientTransform="matrix(.80013 0 0 .55165 4.7255 20.599)" gradientUnits="userSpaceOnUse"> <stop stop-color="#d9d9d9" offset="0"/> <stop stop-color="#eee" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Drive - CD-ROM</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>cdrom</rdf:li> <rdf:li>cd-rom</rdf:li> <rdf:li>optical</rdf:li> <rdf:li>drive</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:identifier/> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024527 0 0 .020868 45.691 34.828)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient6715)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient6717)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient6719)" opacity=".40206"/> </g> <path d="m11.286 6.0181c-0.625 0-1.0312 0.29018-1.2812 0.84375-1e-6 0-6.4688 17.104-6.4688 17.104s-0.25 0.67156-0.25 1.7812v9.65c0 1.0826 0.65779 1.625 1.6562 1.625h38.562c0.98485 0 1.5938-0.71818 1.5938-1.8438v-9.65s0.10596-0.77042-0.09375-1.3125l-6.7188-17.197c-0.18452-0.51191-0.6369-0.9881-1.125-1h-25.875z" fill="none" stroke="#535353" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <g fill-rule="evenodd"> <path transform="translate(.88388 1.2609e-6)" d="m41.896 33.769a17.678 12.286 0 1 1-35.355 0 17.678 12.286 0 1 1 35.355 0z" color="#000000" fill="url(#radialGradient2171)" opacity=".56571"/> <path d="m3.2736 25.052 0.7646-0.69222 37.61 0.0625 3.4624 0.3173v10.439c0 1.1256-0.60702 1.8433-1.5919 1.8433h-38.583c-0.99846 0-1.6618-0.54205-1.6618-1.6247v-10.345z" fill="url(#linearGradient4234)"/> <path d="m3.5491 23.97c-0.71429 1.4643-6.156e-4 2.3929 1.0357 2.3929h39c1.119-0.02381 1.8452-1.0119 1.4286-2.1429l-6.7143-17.211c-0.18452-0.51191-0.65476-0.9881-1.1429-1h-25.857c-0.625 0-1.0357 0.30357-1.2857 0.85715l-6.4643 17.104z" fill="url(#radialGradient4250)"/> <path d="m44.796 23.684c0.063522 1.25-0.414 2.3158-1.3221 2.3438 0 0-38.119-1e-6 -38.119 0-1.2892 0-1.8677-0.32495-2.0841-0.86806 0.091761 0.94433 0.82582 1.6493 2.0841 1.6493-1e-7 -1e-6 38.119 0 38.119 0 1.076-0.033071 1.7528-1.424 1.3522-2.9948l-0.030048-0.13021z" fill="#fff"/> </g> <path d="m11.643 6.4712c-0.60169 0-0.99279 0.27936-1.2335 0.81229-1e-6 0-6.415 16.591-6.415 16.591s-0.24068 0.64652-0.24068 1.7148v9.2901c0 1.3547 0.44406 1.6269 1.5945 1.6269h37.687c1.3231 0 1.5343-0.3164 1.5343-1.8375v-9.2901s0.10201-0.74169-0.090255-1.2636l-6.5932-16.806c-0.17764-0.49282-0.55065-0.82625-1.0205-0.83771h-25.223z" fill="none" stroke="url(#linearGradient4260)" stroke-linecap="round" stroke-linejoin="round"/> <g transform="matrix(.93365 0 0 .93365 1.6127 -.36777)"> <rect x="5.3414" y="32.363" width="37.931" height="3.865" color="#000000" fill="url(#linearGradient2321)" fill-rule="evenodd"/> <g> <path d="m7.9921 31.81c-0.27494 0.83102-0.46875 1.7034-0.46875 2.5938-1e-6 6.3702 7.4479 11.469 16.687 11.469 9.2396 0 16.656-5.0985 16.656-11.469 0-0.88658-0.16482-1.766-0.4375-2.5938h-15.563c1.8398 0.24517 3.3438 1.2594 3.3438 2.5938 0 1.5105-1.8092 2.75-4 2.75-2.1908 0-4-1.2395-4-2.75 1e-6 -1.3344 1.5039-2.3486 3.3438-2.5938h-15.562z" fill="url(#linearGradient2155)"/> <path d="m7.8359 32.342c-0.17255 0.66581-0.3125 1.3613-0.3125 2.0625 0 6.3702 7.4479 11.469 16.687 11.469 9.2396 0 16.656-5.0985 16.656-11.469 0-0.70121-0.13995-1.3967-0.3125-2.0625h-32.719z" fill="url(#linearGradient2343)" stroke="#808080"/> <path d="m16.572 31.835c-0.77349 0.91998-1.325 1.4593-1.325 2.5876-1e-6 3.473 4.1104 6.2064 9.0306 6.2064 5.0374-1e-6 9.0306-2.8141 9.0306-6.2064 0-1.1449-0.58624-1.673-1.3598-2.5876h-5.377c1.6779 0.54343 2.6224 1.2369 2.6224 2.5876 1e-6 1.8577-2.2219 3.3821-4.9163 3.3821-2.6944 0-4.9163-1.5245-4.9163-3.3821 0-1.3514 0.91933-2.0446 2.5988-2.5876h-5.3882z" opacity=".11"/> <path d="m18.574 44.743 3.7888-7.5308c-0.87715-0.21569-1.5486-0.63911-1.9724-1.1963l-10.378 3.5883c1.7499 2.3854 4.7947 4.2405 8.5621 5.1389z" fill="#fff" fill-opacity=".41808"/> </g> <path d="m8.9118 32.268c-0.24877 0.73987-0.40404 1.6796-0.40404 2.4734 0 5.5906 7.5944 10.072 15.703 10.072 8.1087-1e-6 15.502-4.4816 15.502-10.072-1e-6 -0.79429-0.1838-1.7331-0.4329-2.4734h-30.368z" fill="none" opacity=".54645" stroke="url(#linearGradient2161)"/> <rect x="5.3414" y="31.627" width="37.864" height="1.1912" color="#000000" fill="url(#linearGradient2341)" fill-rule="evenodd"/> </g> <path d="m26.312 30.25h13.75s0.54146 1.121-0.0625 3.375l-13.312-0.5c1.8504-1.8504-0.375-2.875-0.375-2.875z" fill="url(#linearGradient2335)" fill-rule="evenodd" opacity=".36"/> <path d="m22.098 30.25h-13.75s-0.54146 1.121 0.0625 3.375l13.312-0.5c-1.8504-1.8504 0.375-2.875 0.375-2.875z" fill="url(#linearGradient2335)" fill-rule="evenodd" opacity=".36"/> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/drive-harddisk.svg��������������������������������0000644�0001750�0000144�00000020551�15104114162�024473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient6719" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient6717" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient6715" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4209" x1="7.0625" x2="24.688" y1="35.281" y2="35.281" gradientTransform="translate(.79549 -1.3258)" gradientUnits="userSpaceOnUse"> <stop stop-color="#838383" offset="0"/> <stop stop-color="#bbb" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4234" x1="7.6046" x2="36.183" y1="28.481" y2="40.944" gradientUnits="userSpaceOnUse"> <stop stop-color="#bbb" offset="0"/> <stop stop-color="#9f9f9f" offset="1"/> </linearGradient> <linearGradient id="linearGradient4242" x1="12.277" x2="12.222" y1="37.206" y2="33.759" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#eee" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4250" cx="15.571" cy="2.9585" r="20.936" gradientTransform="matrix(1.2862 .7817 -.71078 1.1696 -2.3543 -4.8769)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e4e4e4" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </radialGradient> <linearGradient id="linearGradient4260" x1="12.378" x2="44.096" y1="4.4331" y2="47.621" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4272" x1="23.688" x2="23.688" y1="11.319" y2="26.357" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".2549" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient2553" x1="33.431" x2="21.748" y1="31.965" y2="11.781" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#e6e6e6" offset=".5"/> <stop stop-color="#fff" offset=".75"/> <stop stop-color="#e1e1e1" offset=".84167"/> <stop stop-color="#fff" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Drive - Hard Disk</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>hdd</rdf:li> <rdf:li>hard drive</rdf:li> <rdf:li>fixed</rdf:li> <rdf:li>media</rdf:li> <rdf:li>solid</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:identifier/> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024527 0 0 .020868 45.691 36.154)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient6715)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient6717)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient6719)" opacity=".40206"/> </g> <path d="m11.286 7.9626c-0.625 0-1.0312 0.29018-1.2812 0.84375-1e-6 0-6.4688 17.104-6.4688 17.104s-0.25 0.67156-0.25 1.7812v9.65c0 1.0826 0.65779 1.625 1.6562 1.625h38.562c0.98485 0 1.5938-0.71818 1.5938-1.8438v-9.65s0.10596-0.77042-0.09375-1.3125l-6.7188-17.197c-0.18452-0.51191-0.6369-0.9881-1.125-1h-25.875z" fill="none" stroke="#535353" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <g fill-rule="evenodd"> <path d="m3.2736 26.997 0.7646-0.69222 37.61 0.0625 3.4624 0.3173v10.439c0 1.1256-0.60702 1.8433-1.5919 1.8433h-38.583c-0.99846 0-1.6618-0.54205-1.6618-1.6247v-10.345z" fill="url(#linearGradient4234)"/> <path d="m3.5491 25.914c-0.71429 1.4643-6.156e-4 2.3929 1.0357 2.3929h39c1.119-0.02381 1.8452-1.0119 1.4286-2.1429l-6.7143-17.211c-0.18452-0.51191-0.65476-0.9881-1.1429-1h-25.857c-0.625 0-1.0357 0.30357-1.2857 0.85715l-6.4643 17.104z" fill="url(#radialGradient4250)"/> <rect x="7.858" y="31.174" width="17.625" height="5.5625" color="#000000" fill="url(#linearGradient4209)"/> <path d="m7.858 36.737v-4.0115c1.8355 3.1792 8.2965 4.0115 12.937 4.0115h-12.937z" fill="url(#linearGradient4242)" opacity=".81143"/> <path d="m44.796 25.629c0.063522 1.25-0.414 2.3158-1.3221 2.3438 0 0-38.119-1e-6 -38.119 0-1.2892 0-1.8677-0.32495-2.0841-0.86806 0.091761 0.94433 0.82582 1.6493 2.0841 1.6493-1e-7 -1e-6 38.119 0 38.119 0 1.076-0.033071 1.7528-1.424 1.3522-2.9948l-0.030048-0.13021z" fill="#fff"/> <g> <path d="m10.969 10.156c-0.046075 0.20032-0.1875 0.3868-0.1875 0.59375 0 0.9486 0.59098 1.7895 1.3438 2.5938 0.24027-0.15408 0.36512-0.35441 0.625-0.5-0.94031-0.816-1.5534-1.7166-1.7812-2.6875zm26.656 0c-0.22873 0.96962-0.84201 1.8724-1.7812 2.6875 0.27414 0.15358 0.40399 0.36824 0.65625 0.53125 0.75726-0.80666 1.3125-1.673 1.3125-2.625 0-0.20695-0.14159-0.39343-0.1875-0.59375zm2.1875 8.4375c-0.61379 4.0401-7.2986 7.25-15.531 7.25-8.2123 1e-6 -14.86-3.1928-15.5-7.2188-0.032357 0.19713-0.125 0.39188-0.125 0.59375 3e-7 4.3179 6.9891 7.8438 15.625 7.8438 8.6359 0 15.656-3.5258 15.656-7.8438 0-0.21292-0.089051-0.41736-0.125-0.625z" color="#000000" fill="url(#linearGradient4272)" opacity=".69143"/> <path transform="translate(.088388 .17678)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763"/> <path transform="translate(33.967 .088388)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763"/> </g> </g> <g fill="none"> <path d="m11.643 8.4157c-0.60169 0-0.99279 0.27936-1.2335 0.81229-1e-6 0-6.415 16.591-6.415 16.591s-0.24068 0.64652-0.24068 1.7148v9.2901c0 1.3547 0.44406 1.6269 1.5945 1.6269h37.687c1.3231 0 1.5343-0.3164 1.5343-1.8375v-9.2901s0.10201-0.74169-0.090255-1.2636l-6.5932-16.806c-0.17764-0.49282-0.55065-0.82625-1.0205-0.83771h-25.223z" stroke="url(#linearGradient4260)" stroke-linecap="round" stroke-linejoin="round"/> <g stroke="#fff" stroke-linecap="square" stroke-opacity=".42373" stroke-width="1px"> <path d="m40.5 31.429v5.0209"/> <path d="m38.5 31.489v5.0209"/> <path d="m36.5 31.489v5.0209"/> <path d="m34.5 31.489v5.0209"/> <path d="m32.5 31.489v5.0209"/> <path d="m30.5 31.489v5.0209"/> </g> <g stroke="#000" stroke-linecap="square" stroke-width="1px"> <path d="m39.5 31.479v5.0209" opacity=".097143"/> <path d="m37.5 31.539v5.0209" opacity=".097143"/> <path d="m35.5 31.539v5.0209" opacity=".097143"/> <path d="m33.5 31.539v5.0209" opacity=".097143"/> <path d="m31.5 31.539v5.0209" opacity=".097143"/> </g> </g> <path d="m7.875 31.188v5.5312h12.562l-12.219-0.34375-0.34375-5.1875z" fill="#fff" fill-rule="evenodd" opacity=".44"/> <path transform="matrix(1.0378 0 0 1.0607 -1.6329 -2.0946)" d="m39.875 19.562a14.875 6.6875 0 1 1-29.75 0 14.875 6.6875 0 1 1 29.75 0z" color="#000000" fill="url(#linearGradient2553)" fill-rule="evenodd" opacity=".20571"/> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/devices/camera-photo.svg����������������������������������0000644�0001750�0000144�00000052603�15104114162�024155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <defs> <radialGradient id="radialGradient5928" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(.062854 0 0 .020588 1.295 34.451)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5931" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(.062854 0 0 .020588 1.2826 34.451)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5934" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-.062854 0 0 .020588 46.705 34.451)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5809" x1="8.5625" x2="8.5625" y1="4.6468" y2="45.818" gradientTransform="translate(-52 7)" gradientUnits="userSpaceOnUse"> <stop stop-color="#2f3537" offset="0"/> <stop stop-color="#8a8e8e" offset=".3"/> <stop stop-color="#2f3537" offset="1"/> </linearGradient> <radialGradient id="radialGradient5807" cx="76.166" cy="14.782" r="21" gradientTransform="matrix(4.2066 1.9379e-8 0 .1402 -296.24 17.116)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7a7c7c" offset="0"/> <stop stop-color="#33393a" offset="1"/> </radialGradient> <linearGradient id="linearGradient5925" x1="697.91" x2="700.41" y1="327.78" y2="496.34" gradientTransform="matrix(.15392 0 0 .1533 -86.754 -31.25)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0f0f4" offset="0"/> <stop stop-color="#eeeeec" offset=".037441"/> <stop stop-color="#eeeeec" stop-opacity=".69595" offset=".39254"/> <stop stop-color="#a1a29f" offset=".908"/> <stop stop-color="#555753" offset="1"/> </linearGradient> <radialGradient id="radialGradient5813" cx="400.3" cy="127.65" r="2.0222" gradientTransform="matrix(1.0867 3.1905e-5 -1.4474e-5 .51097 -405.47 -42.409)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#eeeeec" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5815" cx="399.88" cy="127.25" r="2.0222" gradientTransform="matrix(.942 -.093118 .12194 .43761 -362.49 4.8425)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5821" cx="427.8" cy="33.605" r="74.908" gradientTransform="matrix(-.44827 .10225 -.081708 -.35819 231.54 -7.9557)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#eeeeec" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5823" cx="502.53" cy="217.46" r="74.908" gradientTransform="matrix(.10492 -.072831 .035871 .057009 -24.172 61.542)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#eeeeec" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5825" cx="459.45" cy="170.41" r="74.908" gradientTransform="matrix(.15094 -2.3254e-8 1.3013e-8 .12469 -39.412 10.189)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" stop-opacity=".9527" offset="0"/> <stop stop-color="#eeeeec" stop-opacity="0" offset=".47989"/> <stop stop-color="#eeeeec" stop-opacity=".99324" offset=".52296"/> <stop stop-color="#eeeeec" stop-opacity="0" offset=".63154"/> <stop stop-color="#eeeeec" stop-opacity=".23529" offset=".73835"/> <stop stop-color="#fff" stop-opacity=".71622" offset=".83401"/> <stop stop-color="#f6f6f5" stop-opacity=".27027" offset=".90514"/> <stop stop-color="#f2f2f0" stop-opacity=".27703" offset=".90514"/> <stop stop-color="#eeeeec" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5827" cx="449.88" cy="165.52" r="74.908" gradientTransform="matrix(0 -.096503 .10561 0 12.521 73.487)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" stop-opacity="0" offset="0"/> <stop stop-color="#eeeeec" stop-opacity=".49804" offset=".8667"/> <stop stop-color="#eeeeec" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient5829" cx="529.4" cy="95.382" r="74.908" gradientTransform="matrix(0 .10037 -.10096 0 39.63 -21.627)" gradientUnits="userSpaceOnUse"> <stop stop-color="#2e3436" stop-opacity="0" offset="0"/> <stop stop-color="#2e3436" stop-opacity="0" offset=".47336"/> <stop stop-color="#0f1112" offset="1"/> </radialGradient> <linearGradient id="linearGradient5831" x1="469.36" x2="280.02" y1="126.84" y2="225.83" gradientTransform="matrix(.093448 0 0 .13038 -12.724 8.5567)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient26075"/> <linearGradient id="linearGradient26075"> <stop stop-color="#555753" stop-opacity="0" offset="0"/> <stop stop-color="#eeeeec" offset="1"/> </linearGradient> <radialGradient id="radialGradient5833" cx="344.26" cy="218.66" r="74.908" gradientTransform="matrix(-.013724 -.24747 .093642 -.0055498 14.249 119.4)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient26075"/> <radialGradient id="radialGradient5835" cx="469.91" cy="131.83" r="74.908" gradientTransform="matrix(-.14051 -.13746 .12306 -.13043 83.417 105.47)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8660"/> <radialGradient id="radialGradient5839" cx="441.36" cy="130.89" r="75.756" gradientTransform="matrix(-.012867 -.088952 .29168 -.044437 -2.4991 72.075)" gradientUnits="userSpaceOnUse"> <stop stop-color="#3a3a3a" offset="0"/> <stop stop-color="#3a3a3a" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient8660"> <stop stop-color="#2e3436" offset="0"/> <stop stop-color="#555753" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5837" cx="434.13" cy="98.975" r="74.908" gradientTransform="matrix(-.15022 .15417 -.1987 -.20393 114.88 -19.249)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8660"/> <linearGradient id="linearGradient5904" x1="457.2" x2="457.2" y1="289.78" y2="114.23" gradientTransform="matrix(.072459 0 0 .10109 -3.1277 16.598)" gradientUnits="userSpaceOnUse"> <stop stop-color="#2e3436" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <radialGradient id="radialGradient5902" cx="439.05" cy="111.3" r="75.752" gradientTransform="matrix(.071034 -.056703 .11549 .15363 -16.57 39.166)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#babdb6" offset="1"/> </radialGradient> <linearGradient id="linearGradient5898" x1="236.75" x2="222.73" y1="171.62" y2="179.04" gradientTransform="matrix(.13883 0 0 .13367 -3.4886 10.255)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient9688"/> <radialGradient id="radialGradient5895" cx="251.69" cy="171.79" r="21.531" gradientTransform="matrix(.040643 -.16438 .25253 .063961 -20.112 66.502)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#090908" stop-opacity=".96622" offset="1"/> </radialGradient> <linearGradient id="linearGradient9688"> <stop stop-color="#eeeeec" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5891" cx="258.76" cy="183.64" r="18.578" gradientTransform="matrix(.17369 -.0023476 .0017845 .13208 -12.713 11.071)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient9688"/> <radialGradient id="radialGradient5851" cx="442.29" cy="62.526" r="77.923" gradientTransform="matrix(-1.3017e-5 -1.3896 .25862 0 13.835 645.6)" gradientUnits="userSpaceOnUse"> <stop stop-color="#777" stop-opacity="0" offset="0"/> <stop stop-color="#2b2b2b" offset="1"/> </radialGradient> <linearGradient id="linearGradient5853" x1="21.568" x2="24.082" y1="21.016" y2="26.868" gradientTransform="matrix(1.0732 0 0 1.0757 4.153 -3.3148)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5895"/> <filter id="filter9094" x="-.34118" y="-.34118" width="1.6824" height="1.6824" color-interpolation-filters="sRGB"> <feGaussianBlur stdDeviation="0.28648224"/> </filter> <linearGradient id="linearGradient5895"> <stop stop-color="#888a85" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient5855" x1="22.062" x2="24" y1="22.125" y2="24.938" gradientTransform="matrix(.67368 0 0 .67368 8.1325 7.0465)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5895"/> <linearGradient id="linearGradient5882" x1="5.3348" x2="8.5602" y1="29.18" y2="22.713" gradientTransform="matrix(1.1646 0 0 .37791 29.282 11.163)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#a2a2a2" offset="1"/> </linearGradient> <linearGradient id="linearGradient5880" x1="6.5596" x2="6.5596" y1="28.781" y2="30.191" gradientTransform="matrix(1.3054 0 0 .96884 29.158 -7.1109)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d7dbc7" offset="1"/> </linearGradient> <radialGradient id="radialGradient5861" cx="9.119" cy="20.823" r="3.177" gradientTransform="matrix(0 -.60512 2.7541 0 -42.501 25.185)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17963"/> <radialGradient id="radialGradient5863" cx="9.2366" cy="17.109" r="2.961" gradientTransform="matrix(1.2675 -4.6716e-7 1.8899e-7 .44533 3.2924 9.6308)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e9e9e9" offset="0"/> <stop stop-color="#a7a7a7" offset="0"/> <stop stop-color="#bebebe" offset=".529"/> <stop stop-color="#e7e7e7" offset="1"/> </radialGradient> <linearGradient id="linearGradient17963"> <stop stop-color="#dee3e0" offset="0"/> <stop stop-color="#dee3e0" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5874" cx="14.739" cy="12.007" r=".54688" gradientTransform="matrix(-3.3976e-6 -2.2552 3.3832 -5.402e-6 -25.82 51.247)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient17963"/> <linearGradient id="linearGradient5870" x1="10.666" x2="11.692" y1="20.521" y2="53.914" gradientTransform="matrix(.97498 0 0 .9583 .6005 .33444)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5947" cx="171.25" cy="188.5" r="19" gradientTransform="matrix(.23274 0 0 .23274 -11.652 -11.876)" gradientUnits="userSpaceOnUse"> <stop stop-color="#b100cb" offset="0"/> <stop stop-color="#204a87" stop-opacity="0" offset="1"/> </radialGradient> </defs> <g transform="translate(0,-2)"> <g transform="translate(0 -1)" opacity=".3"> <path d="m8.8251 42v4.9997c-3.2369 0.009412-7.8251-1.1202-7.8251-2.5002 0-1.38 3.6121-2.4995 7.8251-2.4995z" fill="url(#radialGradient5934)"/> <rect x="8.8251" y="42" width="30.35" height="5" fill="url(#linearGradient5931)"/> <path d="m39.175 42v4.9997c3.2369 0.0094 7.8251-1.1202 7.8251-2.5002 0-1.38-3.6121-2.4995-7.8251-2.4995z" fill="url(#radialGradient5928)"/> </g> <g> <rect x="3.5052" y="16.505" width="40.99" height="26.99" rx="2.4749" ry="2.1004" fill="url(#radialGradient5807)" stroke="url(#linearGradient5809)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.01"/> <rect x="4" y="19" width="40" height="24" rx="1.6573" ry="1.6573" fill="url(#linearGradient5925)"/> <path d="m32.24 21.383a2.7165 2.6372 0 0 1-5.433 0 2.7165 2.6372 0 1 1 5.433 0z" fill="url(#radialGradient5813)" opacity=".27228"/> <path d="m32.227 22.661a2.7041 1.8094 0 1 1-5.4083 0 2.7041 1.8094 0 1 1 5.4083 0z" fill="url(#radialGradient5815)"/> <path d="m40 31a10 10 0 0 1-20 0 10 10 0 1 1 20 0z" fill="url(#radialGradient5821)"/> <path d="m39 31a9 9 0 0 1-18 0 9 9 0 1 1 18 0z" fill="#888a85"/> <path d="m41 31a11 11 0 0 1-22 0 11 11 0 1 1 22 0z" fill="url(#radialGradient5823)"/> <path d="m39.937 31.438a10 10 0 0 1-20 0 10 10 0 1 1 20 0z" fill="url(#radialGradient5825)"/> <path d="m38.069 30.663a8.0691 7.8189 0 0 1-16.138 0 8.0691 7.8189 0 1 1 16.138 0z" fill="url(#radialGradient5827)"/> <path d="m37 31a7 7 0 0 1-14 0 7 7 0 1 1 14 0z" fill="url(#radialGradient5829)" opacity=".85149"/> <path d="m37 31a7 7 0 0 1-14 0 7 7 0 1 1 14 0z" fill="url(#linearGradient5831)"/> <path d="m37 32a7 7 0 0 1-14 0 7 7 0 1 1 14 0z" fill="url(#radialGradient5833)"/> <path d="m35.734 31.948a5.7663 6 0 0 1-11.533 0 5.7663 6 0 1 1 11.533 0z" fill="url(#radialGradient5835)" opacity=".5396"/> <path d="m35.676 32.5a5.6758 5.4258 0 0 1-11.352 0 5.6758 5.4258 0 1 1 11.352 0z" fill="url(#radialGradient5837)" stroke="url(#radialGradient5839)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".1485"/> <path d="m35.428 34c0 2.9961-2.4316 5.4277-5.4277 5.4277-2.9961 0-5.4277-2.4316-5.4277-5.4277s2.4316-5.4277 5.4277-5.4277c2.9961 0 5.4277 2.4316 5.4277 5.4277z" fill="url(#radialGradient5902)" stroke="url(#linearGradient5904)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".14459"/> <path d="m34.5 34a4.5 4.5 0 0 1-9 0 4.5 4.5 0 1 1 9 0z" fill="#2e3436"/> <path d="m29.224 31.466c-0.08496 0.02653-0.16639 0.05752-0.24728 0.0919 0.08079-0.03461 0.1624-0.06518 0.24728-0.0919zm1.77 0.05013c0.035 0.01321 0.06988 0.02718 0.10412 0.04177-0.03437-0.01461-0.06898-0.02856-0.10412-0.04177zm-2.308 0.18798c-0.05662 0.03268-0.11114 0.06787-0.16486 0.10443 0.05331-0.03657 0.10869-0.07167 0.16486-0.10443zm-0.16486 0.10443c-0.06461 0.04398-0.12648 0.08859-0.18655 0.13785 0.05929-0.04879 0.12287-0.09417 0.18655-0.13785zm3.2754 0.18798c0.03712 0.0324 0.07334 0.06589 0.10846 0.10026-0.03511-0.03423-0.07136-0.06799-0.10846-0.10026zm-3.5271 0.0084c-0.04762 0.0418-0.09456 0.08446-0.13883 0.12949 0.04437-0.04514 0.09114-0.08753 0.13883-0.12949zm-0.13883 0.12949c-0.33737 0.34318-0.57623 0.77514-0.6681 1.2574-2.56e-4 0.0014 2.57e-4 0.0028 0 0.0042v0.88976c0.13918 0.7375 0.61747 1.3607 1.2755 1.721h2.5987c0.63044-0.34525 1.0935-0.93177 1.2538-1.6291v-0.0084-1.0568c-0.07134-0.31524-0.20296-0.61016-0.38611-0.86887-0.14247-0.18351-0.3073-0.31654-0.48589-0.38848h-3.488c-0.03512 0.02614-0.06746 0.05237-0.09978 0.07937zm-0.6681 2.1513c-0.01352-0.07159-0.02313-0.14322-0.03037-0.21722 7e-3 0.07375 0.01683 0.14545 0.03037 0.21722zm0-0.88976c-0.01357 0.07192-0.0234 0.14331-0.03037 0.21722 0.0072-0.07297 0.01685-0.14567 0.03037-0.21722zm4.5596-1.1822c0.02542 0.02829 0.04966 0.05836 0.07375 0.08772-0.02444-0.02974-0.04796-0.05908-0.07375-0.08772zm-2.8286 3.9893c0.05283 0.01722 0.10623 0.03193 0.16052 0.04595-0.05432-0.01407-0.10765-0.02866-0.16052-0.04595zm1.6876 0c-0.05312 0.01729-0.10592 0.03188-0.16052 0.04595 0.05429-0.01402 0.10769-0.02874 0.16052-0.04595z" fill="url(#linearGradient5898)" opacity=".23267"/> <path d="m27.734 31c-0.53534 0.38473-0.96513 0.90351-1.2344 1.5013v2.946c0.28195 0.62634 0.73926 1.1627 1.3106 1.5527h4.4296c0.53925-0.36854 0.97576-0.86785 1.2598-1.4499v-3.1465c-0.27141-0.55649-0.68197-1.0403-1.1887-1.4036h-4.5769z" fill="url(#radialGradient5895)" opacity=".37557"/> <path d="m29.234 31.403c-0.08393 0.02688-0.16438 0.05827-0.24429 0.0931 0.07981-0.03506 0.16044-0.06603 0.24429-0.0931zm1.7486 0.05078c0.03457 0.01338 0.06903 0.02754 0.10286 0.04232-0.03396-0.0148-0.06815-0.02893-0.10286-0.04232zm-2.28 0.19043c-0.05593 0.03311-0.1098 0.06876-0.16286 0.1058 0.05266-0.03705 0.10737-0.07261 0.16286-0.1058zm-0.16286 0.1058c-0.06383 0.04455-0.12495 0.08974-0.18429 0.13965 0.05858-0.04943 0.12138-0.0954 0.18429-0.13965zm3.2357 0.19043c0.03667 0.03282 0.07245 0.06675 0.10715 0.10157-0.03468-0.03468-0.07049-0.06888-0.10715-0.10157zm-3.4843 0.0085c-0.04705 0.04235-0.09341 0.08557-0.13714 0.13119 0.04384-0.04573 0.09004-0.08867 0.13714-0.13119zm-0.13714 0.13119c-0.33328 0.34766-0.56925 0.78528-0.66001 1.2738-2.53e-4 0.0014 2.54e-4 0.0029 0 0.0042v0.90138c0.13749 0.74714 0.60999 1.3785 1.26 1.7435h2.5672c0.6228-0.34977 1.0802-0.94395 1.2386-1.6504v-0.0085-1.0707c-0.07047-0.31936-0.2005-0.61814-0.38143-0.88022-0.14074-0.1859-0.30357-0.32067-0.48-0.39356h-3.4458c-0.03469 0.02648-0.06665 0.05306-0.09857 0.0804zm-0.66001 2.1794c-0.01335-0.07252-0.02285-0.14509-0.03-0.22006 0.0069 0.07472 0.01662 0.14735 0.03 0.22006zm0-0.90138c-0.01341 0.07286-0.02312 0.14518-0.03 0.22006 0.0071-0.07392 0.01665-0.14757 0.03-0.22006zm4.5043-1.1976c0.02511 0.02866 0.04905 0.05912 0.07286 0.08887-0.02414-0.03013-0.04738-0.05985-0.07286-0.08887zm-2.7943 4.0414c0.05219 0.01744 0.10494 0.03235 0.15857 0.04655-0.05367-0.01425-0.10635-0.02904-0.15857-0.04655zm1.6672 0c-0.05248 0.01752-0.10464 0.0323-0.15857 0.04655 0.05363-0.0142 0.10638-0.02911 0.15857-0.04655z" fill="#2e3436"/> <path d="m29.234 31.341c-0.08393 0.02723-0.16438 0.05903-0.24429 0.0943 0.07981-0.03551 0.16044-0.06688 0.24429-0.0943zm1.7486 0.05144c0.03457 0.01355 0.06903 0.02789 0.10286 0.04286-0.03396-0.01499-0.06815-0.0293-0.10286-0.04286zm-2.28 0.19289c-0.05593 0.03353-0.1098 0.06965-0.16286 0.10716 0.05266-0.03753 0.10737-0.07354 0.16286-0.10716zm-0.16286 0.10716c-0.06383 0.04513-0.12495 0.0909-0.18429 0.14145 0.05858-0.05006 0.12138-0.09663 0.18429-0.14145zm3.2357 0.19289c0.03667 0.03325 0.07245 0.06761 0.10715 0.10288-0.03468-0.03512-0.07049-0.06977-0.10715-0.10288zm-3.4843 0.0086c-0.04705 0.0429-0.09341 0.08667-0.13714 0.13288 0.04384-0.04632 0.09004-0.08982 0.13714-0.13288zm-0.13714 0.13288c-0.33328 0.35214-0.56925 0.7954-0.66001 1.2902-2.53e-4 0.0014 2.54e-4 0.0029 0 0.0043v0.91301c0.13749 0.75678 0.60999 1.3962 1.26 1.766h2.5672c0.6228-0.35428 1.0802-0.95612 1.2386-1.6717v-0.0086-1.0845c-0.07047-0.32348-0.2005-0.62611-0.38143-0.89158-0.14074-0.1883-0.30357-0.32481-0.48-0.39864h-3.4458c-0.03469 0.02682-0.06665 0.05374-0.09857 0.08144zm-0.66001 2.2075c-0.01335-0.07346-0.02285-0.14697-0.03-0.22289 0.0069 0.07568 0.01662 0.14925 0.03 0.22289zm0-0.91301c-0.01341 0.0738-0.02312 0.14705-0.03 0.2229 0.0071-0.07488 0.01665-0.14948 0.03-0.2229zm4.5043-1.2131c0.02511 0.02903 0.04905 0.05988 0.07286 0.09002-0.02414-0.03052-0.04738-0.06063-0.07286-0.09002zm-2.7943 4.0935c0.05219 0.01767 0.10494 0.03277 0.15857 0.04715-0.05367-0.01444-0.10635-0.02941-0.15857-0.04715zm1.6672 0c-0.05248 0.01774-0.10464 0.03271-0.15857 0.04715 0.05363-0.01438 0.10638-0.02949 0.15857-0.04715z" fill="url(#radialGradient5891)" opacity=".23267"/> </g> <path d="m30.012 31.994c-1.0298-2e-6 -1.8752 0.77295-1.9851 1.7632-0.0046 0.04174-8e-3 0.08347-0.0099 0.12595-0.0014 0.0304-5e-3 0.05994-5e-3 0.09068 0 0.0067-6.7e-5 0.01348 0 0.02015-6.7e-5 0.0067 0 0.01346 0 0.02015 6.05e-4 0.03001 3e-3 0.06102 5e-3 0.09068 2e-3 0.04247 0.0053 0.08421 0.0099 0.12595 0.10987 0.99028 0.95525 1.7632 1.9851 1.7632 1.0298 0 1.8752-0.77295 1.9851-1.7632 0.0046-0.04174 8e-3 -0.08347 0.0099-0.12595 0.0024-0.03624 0.0046-0.07407 5e-3 -0.11083-3.7e-4 -0.03675-0.0026-0.0746-5e-3 -0.11083-2e-3 -0.04247-0.0053-0.08421-0.0099-0.12595-0.10987-0.99028-0.95525-1.7632-1.9851-1.7632z" fill-opacity=".50543"/> <path d="m40.516 31a10.516 10.516 0 0 1-21.033 0 10.516 10.516 0 1 1 21.033 0z" fill="none" stroke="url(#radialGradient5851)" stroke-linecap="round" stroke-linejoin="round"/> <g> <g fill-rule="evenodd"> <path d="m30.513 21.495a2.0122 2.017 0 0 1-4.0244 0 2.0122 2.017 0 1 1 4.0244 0z" fill="#2e3436" stroke="url(#linearGradient5853)" stroke-miterlimit="10" stroke-width=".97678"/> <path d="m29.334 21.502a0.81921 0.82118 0 0 1-1.6384 0 0.81921 0.82118 0 1 1 1.6384 0z" opacity=".34706"/> <path transform="matrix(.6932 0 0 .69486 9.765 10.773)" d="m28.417 16.445a0.83969 0.83969 0 1 1-1.6794 0 0.83969 0.83969 0 1 1 1.6794 0z" fill="#fff" filter="url(#filter9094)" opacity=".30588"/> <path d="m24.68 22.583a1.2632 1.2632 0 0 1-2.5263 0 1.2632 1.2632 0 1 1 2.5263 0z" fill="#2e3436" stroke="url(#linearGradient5855)" stroke-miterlimit="10" stroke-width=".47368"/> </g> <g> <rect x="34.38" y="20.38" width="8.2404" height="2.2404" rx=".93042" ry=".7955" fill="url(#linearGradient5880)" stroke="url(#linearGradient5882)" stroke-width=".75957"/> <path d="m18.728 17.871a3.7307 1.6168 0 1 1-7.4614 0 3.7307 1.6168 0 1 1 7.4614 0z" fill="#2e3436" fill-rule="evenodd" stroke="url(#radialGradient5861)" stroke-miterlimit="10" stroke-opacity=".99608" stroke-width=".4957"/> <path d="m18 17.25a3 1.25 0 0 1-6 0 3 1.25 0 1 1 6 0z" fill="url(#radialGradient5863)" fill-rule="evenodd"/> </g> <rect x="14.162" y="17.96" width="1.4429" height="1.4607" rx=".51201" ry=".5565" fill="#2e3436" stroke="url(#radialGradient5874)" stroke-linejoin="round" stroke-miterlimit="0" stroke-width=".30218"/> </g> <rect x="4.5004" y="19.5" width="38.999" height="22.999" rx="1.3157" ry="1.3157" fill="none" opacity=".4" stroke="url(#linearGradient5870)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.0008"/> <g> <path d="m33.5 34.298c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5 1.567-3.5 3.5-3.5 3.5 1.567 3.5 3.5z" fill="url(#radialGradient5947)" fill-rule="evenodd" opacity=".8"/> <rect x="11" y="27" width="2" height="10" rx="1" ry="1" fill="#eeeeec" opacity=".5"/> <rect x="15" y="28" width="2" height="8" rx="1" ry="1" fill="#555753" opacity=".2"/> </g> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021065� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/zoom-out.svg��������������������������������������0000644�0001750�0000144�00000007326�15104114162�023407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4151" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(.012049 0 0 .0082353 13.239 16.981)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <radialGradient id="radialGradient4154" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-.012049 0 0 .0082353 10.761 16.981)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient4157" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(.035207 0 0 .0082353 -.72485 16.981)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4165" x1="15.765" x2="15.765" y1="3.5294" y2="18.588" gradientTransform="matrix(1.0625 0 0 1.0625 -.75 -.75)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f4f4f4" offset="0"/> <stop stop-color="#dbdbdb" offset="1"/> </linearGradient> <linearGradient id="linearGradient4181" x1="13" x2="13" y1="19" y2="5" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4192" x1="12" x2="12" y1="24.467" y2="2.9333" gradientTransform="matrix(.88235 0 0 .88235 1.4118 1.4118)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".502" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4223" x1="12" x2="12" y1="14" y2="10" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4231" x1="15" x2="15" y1="6" y2="18" gradientUnits="userSpaceOnUse"> <stop stop-color="#6c6c6c" stop-opacity=".7" offset="0"/> <stop stop-color="#c1c1c1" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <g> <rect x="3.5" y="20" width="17" height="2" fill="url(#linearGradient4157)" opacity=".15"/> <path d="m3.5 20v1.9999c-0.62047 0.0038-1.5-0.44808-1.5-1.0001 0-0.552 0.6924-0.99982 1.5-0.99982z" fill="url(#radialGradient4154)" opacity=".15"/> <path d="m20.5 20v1.9999c0.62047 0.0038 1.5-0.44808 1.5-1.0001 0-0.552-0.6924-0.99982-1.5-0.99982z" fill="url(#radialGradient4151)" opacity=".15"/> </g> <rect x="3.5" y="3.5" width="17" height="17" rx="2.6154" ry="2.6154" fill="url(#linearGradient4165)"/> </g> <g fill="none"> <g> <rect x="3.5" y="3.5" width="17" height="17" rx="2.6154" ry="2.6154" opacity=".3" stroke="#000" stroke-width=".5"/> <path d="m16.507 11.5v3h-9.014v-3z" color="#000000" opacity=".6" stroke="url(#linearGradient4181)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".98543"/> <path d="m16.507 10.5v3h-9.014v-3z" color="#000000" stroke="url(#linearGradient4231)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".98543"/> </g> <rect x="4.5" y="4.5" width="15" height="15" rx="2.3077" ry="2.3077" stroke="url(#linearGradient4192)"/> </g> <path d="m16 11v2h-8v-2z" fill="url(#linearGradient4223)" opacity=".05"/> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/zoom-in.svg���������������������������������������0000644�0001750�0000144�00000007474�15104114162�023212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4151" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(.012049 0 0 .0082353 13.239 16.981)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <radialGradient id="radialGradient4154" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-.012049 0 0 .0082353 10.761 16.981)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient4157" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(.035207 0 0 .0082353 -.72485 16.981)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4165" x1="15.765" x2="15.765" y1="3.5294" y2="18.588" gradientTransform="matrix(1.0625 0 0 1.0625 -.75 -.75)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f4f4f4" offset="0"/> <stop stop-color="#dbdbdb" offset="1"/> </linearGradient> <linearGradient id="linearGradient4181" x1="13" x2="13" y1="19" y2="5" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4192" x1="12" x2="12" y1="24.467" y2="2.9333" gradientTransform="matrix(.88235 0 0 .88235 1.4118 1.4118)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".502" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4223" x1="12" x2="12" y1="16" y2="10" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4231" x1="15" x2="15" y1="6" y2="18" gradientUnits="userSpaceOnUse"> <stop stop-color="#6c6c6c" stop-opacity=".7" offset="0"/> <stop stop-color="#c1c1c1" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <g> <rect x="3.5" y="20" width="17" height="2" fill="url(#linearGradient4157)" opacity=".15"/> <path d="m3.5 20v1.9999c-0.62047 0.0038-1.5-0.44808-1.5-1.0001 0-0.552 0.6924-0.99982 1.5-0.99982z" fill="url(#radialGradient4154)" opacity=".15"/> <path d="m20.5 20v1.9999c0.62047 0.0038 1.5-0.44808 1.5-1.0001 0-0.552-0.6924-0.99982-1.5-0.99982z" fill="url(#radialGradient4151)" opacity=".15"/> </g> <rect x="3.5" y="3.5" width="17" height="17" rx="2.6154" ry="2.6154" fill="url(#linearGradient4165)"/> </g> <g fill="none"> <g> <rect x="3.5" y="3.5" width="17" height="17" rx="2.6154" ry="2.6154" opacity=".3" stroke="#000" stroke-width=".5"/> <path d="m10.5 11.5v-3.007h3v3.007h3.007v3h-3.007v3.007h-3v-3.007h-3.007v-3z" color="#000000" opacity=".6" stroke="url(#linearGradient4181)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".98543"/> <path d="m10.5 10.5v-3.007h3v3.007h3.007v3h-3.007v3.007h-3v-3.007h-3.007v-3z" color="#000000" stroke="url(#linearGradient4231)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".98543"/> </g> <rect x="4.5" y="4.5" width="15" height="15" rx="2.3077" ry="2.3077" stroke="url(#linearGradient4192)"/> </g> <path d="m11 8h2v3h3v2h-3v3h-2v-3h-3v-2h3z" fill="url(#linearGradient4223)" opacity=".05"/> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/view-sort-descending.svg��������������������������0000644�0001750�0000144�00000002220�15104114162�025642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> <defs id="defs3051"> <style type="text/css" id="current-color-scheme"> .ColorScheme-Text { color:#7aaddd; } </style> </defs> <path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 2 2 L 2 3 L 4.375 3 L 2 6.3183594 L 2 7 L 6 7 L 6 6 L 4 6 L 6 3 L 6 2 L 2 2 z M 10 4 L 10 12.09375 L 7.71875 9.8125 L 7 10.5 L 10.28125 13.8125 L 10.5 14 L 10.71875 13.8125 L 14 10.5 L 13.28125 9.8125 L 11 12.09375 L 11 4 L 10 4 z M 4.09375 9 C 3.31051 9.0182 2.71841 9.14339 2.28125 9.34375 L 2.53125 10.25 C 2.74072 10.1771 3.53552 9.9375 4 9.9375 L 4.0625 9.9375 C 4.70913 9.9648 4.75 10.19445 4.75 10.75 L 4.75 10.96875 L 4.40625 11.03125 C 2.83976 11.25893 2 11.45406 2 12.65625 C 2 13.49414 2.61657 14 3.5 14 C 4.1102 14 4.49642 13.75233 4.90625 13.40625 L 5 14 L 6 14 L 6 10.53125 C 6 9.50211 5.2804 9 4.1875 9 L 4.09375 9 z M 4.75 11.6875 L 4.75 12.8125 C 4.41303 13.0402 4.15591 13.1875 3.71875 13.1875 C 3.32713 13.1875 3.125 12.93983 3.125 12.59375 C 3.125 11.93801 3.70497 11.81893 4.40625 11.71875 L 4.75 11.6875 z " class="ColorScheme-Text" /> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/view-sort-ascending.svg���������������������������0000644�0001750�0000144�00000002166�15104114162�025503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> <defs id="defs3051"> <style type="text/css" id="current-color-scheme"> .ColorScheme-Text { color:#7aaddd; } </style> </defs> <path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 4.09375 2 C 3.31051 2.0182 2.71841 2.14339 2.28125 2.34375 L 2.53125 3.25 C 2.74072 3.1771 3.53552 2.9375 4 2.9375 L 4.0625 2.9375 C 4.70913 2.9648 4.75 3.19445 4.75 3.75 L 4.75 3.96875 L 4.40625 4.03125 C 2.83976 4.25893 2 4.45406 2 5.65625 C 2 6.49414 2.61657 7 3.5 7 C 4.1102 7 4.49642 6.75233 4.90625 6.40625 L 5 7 L 6 7 L 6 3.53125 C 6 2.50211 5.2804 2 4.1875 2 L 4.09375 2 z M 10.5 4 L 10.28125 4.1875 L 7 7.5 L 7.71875 8.1875 L 10 5.90625 L 10 14 L 11 14 L 11 5.90625 L 13.28125 8.1875 L 14 7.5 L 10.71875 4.1875 L 10.5 4 z M 4.75 4.6875 L 4.75 5.8125 C 4.41303 6.0402 4.15591 6.1875 3.71875 6.1875 C 3.32713 6.1875 3.125 5.93983 3.125 5.59375 C 3.125 4.93801 3.70497 4.81893 4.40625 4.71875 L 4.75 4.6875 z M 2 9 L 2 10 L 4.375 10 L 2 13.318359 L 2 14 L 6 14 L 6 13 L 4 13 L 6 10 L 6 9 L 2 9 z " class="ColorScheme-Text" /> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/view-restore.svg����������������������������������0000644�0001750�0000144�00000003454�15104114162�024247� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg height="16px" viewBox="0 0 16 16" width="16px" version="1.1" id="svg8" sodipodi:docname="view-restore.svg" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> <defs id="defs12" /> <sodipodi:namedview id="namedview10" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="49.375" inkscape:cx="7.9898734" inkscape:cy="8.0101266" inkscape:window-width="1920" inkscape:window-height="976" inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg8" /> <g fill="#2e3436" id="g6" style="fill:#398fe7;fill-opacity:1"> <path d="M 2,8 C 1.449219,8 1,8.449219 1,9 c 0,0.550781 0.449219,1 1,1 h 2.585938 l -3.292969,3.292969 c -0.390625,0.390625 -0.390625,1.023437 0,1.414062 0.390625,0.390625 1.023437,0.390625 1.414062,0 L 6,11.414062 V 14 c 0,0.550781 0.449219,1 1,1 0.550781,0 1,-0.449219 1,-1 V 8 Z m 0,0" id="path2" style="fill:#398fe7;fill-opacity:1" /> <path d="M 14,8 C 14.550781,8 15,7.550781 15,7 15,6.449219 14.550781,6 14,6 h -2.585938 l 3.292969,-3.292969 c 0.390625,-0.390625 0.390625,-1.023437 0,-1.414062 -0.390625,-0.390625 -1.023437,-0.390625 -1.414062,0 L 10,4.585938 V 2 C 10,1.449219 9.550781,1 9,1 8.449219,1 8,1.449219 8,2 v 6 z m 0,0" id="path4" style="fill:#398fe7;fill-opacity:1" /> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/view-refresh.svg����������������������������������0000644�0001750�0000144�00000014325�15104114162�024221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2797"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient1486" x1="13.479" x2="15.419" y1="10.612" y2="19.115" gradientTransform="translate(.46541 -.27759)" gradientUnits="userSpaceOnUse"> <stop stop-color="#3465a4" offset="0"/> <stop stop-color="#5b86be" offset=".33333"/> <stop stop-color="#83a8d8" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient1488" x1="37.128" x2="37.065" y1="29.73" y2="26.194" gradientTransform="matrix(-1 0 0 -1 47.528 45.847)" gradientUnits="userSpaceOnUse"> <stop stop-color="#3465a4" offset="0"/> <stop stop-color="#3465a4" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient1491" x1="5.9649" x2="52.854" y1="26.048" y2="26.048" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2797"/> <linearGradient id="linearGradient1501" x1="46.835" x2="45.38" y1="45.264" y2="50.94" gradientUnits="userSpaceOnUse"> <stop stop-color="#3465a4" offset="0"/> <stop stop-color="#3465a4" offset="1"/> </linearGradient> <radialGradient id="radialGradient1503" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 -9.6809e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2386" x1="62.514" x2="15.985" y1="36.061" y2="20.609" gradientUnits="userSpaceOnUse"> <stop stop-color="#b9cfe7" offset="0"/> <stop stop-color="#729fcf" offset="1"/> </linearGradient> <linearGradient id="linearGradient2408" x1="18.936" x2="53.589" y1="23.668" y2="26.649" gradientUnits="userSpaceOnUse"> <stop stop-color="#729fcf" offset="0"/> <stop stop-color="#528ac5" offset="1"/> </linearGradient> <linearGradient id="linearGradient2688" x1="36.714" x2="37.124" y1="31.456" y2="24.842" gradientUnits="userSpaceOnUse"> <stop stop-color="#3977c3" offset="0"/> <stop stop-color="#89aedc" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2696" x1="32.648" x2="37.124" y1="30.749" y2="24.842" gradientUnits="userSpaceOnUse"> <stop stop-color="#c4d7eb" offset="0"/> <stop stop-color="#c4d7eb" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>View Refresh</dc:title> <dc:subject> <rdf:Bag> <rdf:li>reload</rdf:li> <rdf:li>refresh</rdf:li> <rdf:li>view</rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <path transform="matrix(-1.4897 0 0 -1.0013 61.209 75.282)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient1503)" fill-rule="evenodd" opacity=".38333"/> <path d="m20.153 10.41s-8.9375-0.625-6.1875 9.875h-7.6875s0.5-11.875 13.875-9.875z" color="#000000" display="block" fill="url(#linearGradient1486)" stroke="url(#linearGradient1488)"/> <g> <g transform="matrix(-.57905 -.48923 -.48923 .57905 56.916 13.371)" fill="url(#linearGradient2386)" stroke="#3465a4"> <path d="m44.307 50.23c18.515-14.411 5.3578-36.818-21.844-37.732l-0.34857-9.3461-14.489 17.345 15.09 12.722-0.25192-9.8812c18.83 0.99898 32.982 14.072 21.844 26.892z" color="#000000" display="block" fill="url(#linearGradient2386)" stroke="url(#linearGradient1501)" stroke-width="1.3192"/> </g> <path d="m28.375 33.438s8.9375 0.625 6.1875-9.875h7.7759c0 1.5026-0.58839 11.875-13.963 9.875z" color="#000000" display="block" fill="url(#linearGradient2696)" stroke="url(#linearGradient2688)"/> <g transform="matrix(.57905 .48923 .48923 -.57905 -7.921 30.536)" color="#000000" display="block" fill="url(#linearGradient2408)" stroke="url(#linearGradient1501)" stroke-width="1.3192"> <path d="m44.307 50.23c18.515-14.411 5.3578-36.818-21.844-37.732l-0.062979-9.4286-14.605 17.355 14.668 12.582v-9.6684c18.83 0.99898 32.982 14.072 21.844 26.892z" color="#000000" display="block" fill="url(#linearGradient2408)" stroke="url(#linearGradient1501)" stroke-width="1.3192"/> </g> </g> <path d="m7.0625 38.188 0.0625-14.875 12.938-0.375-4.3889 5.1788 3.8672 2.3732c-3 2.25-4.5495 2.4221-5.5495 4.9846l-2.8169-2.1103-4.1119 4.8236z" color="#000000" fill="#fff" opacity=".27222"/> <g transform="matrix(.50854 .42965 .42965 -.50854 -3.9732 30.541)" fill="none" opacity=".5" stroke="#fff"> <path d="m51.09 45.944c9.1202-15.22-4.4587-33.743-31.605-33.995l0.028406-8.2453-12.979 15.593 12.833 10.972s0.05562-9.0069 0.05562-9.0069c17.528-0.22391 35.195 10.103 31.667 24.682z" color="#000000" display="block" fill="none" opacity="1" stroke="url(#linearGradient1491)" stroke-width="1.5021"/> </g> <g transform="matrix(-.50854 -.42965 -.42965 .50854 53.049 13.365)" fill="none" opacity=".5" stroke="#fff"> <path d="m51.39 46.506c9.1202-15.22-4.3392-34.074-31.761-34.436l-0.28566-8.019-13.002 15.329 13.468 11.385-0.18176-9.4532c18.245 0.38197 34.784 10.925 31.763 25.195z" color="#000000" display="block" fill="none" opacity="1" stroke="url(#linearGradient1491)" stroke-width="1.5021"/> </g> <path d="m6.8125 16.5c3.5934-10.441 16.444-6.1446 20.188-4.5 4.1753 0.21148 5.6747-2.835 9-3-14.05-9.79-28.812-6.5-29.188 7.5z" color="#000000" fill="#fff" opacity=".27222"/> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/view-fullscreen.svg�������������������������������0000644�0001750�0000144�00000003611�15104114162�024721� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg sodipodi:docname="view-fullscreen-symbolic.svg" id="svg8" version="1.1" width="16px" viewBox="0 0 16 16" height="16px" inkscape:version="1.1 (c68e22c387, 2021-05-23)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> <defs id="defs12" /> <sodipodi:namedview id="namedview10" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" showgrid="false" inkscape:zoom="12.34375" inkscape:cx="-15.027848" inkscape:cy="3.6455696" inkscape:window-width="1920" inkscape:window-height="1017" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg8" /> <g fill="#2e3436" id="g6" style="fill:#398fe7;fill-opacity:1"> <path d="M 1,9 C 0.449219,9 0,9.449219 0,10 v 6 H 6 C 6.550781,16 7,15.550781 7,15 7,14.449219 6.550781,14 6,14 H 3.414062 l 3.292969,-3.292969 c 0.390625,-0.390625 0.390625,-1.023437 0,-1.414062 C 6.519531,9.105469 6.265625,9 6,9 5.734375,9 5.480469,9.105469 5.292969,9.292969 L 2,12.585938 V 10 C 2,9.449219 1.550781,9 1,9 Z m 0,0" id="path2" style="fill:#398fe7;fill-opacity:1" /> <path d="m 15,7 c 0.550781,0 1,-0.449219 1,-1 V 0 H 10 C 9.449219,0 9,0.449219 9,1 9,1.550781 9.449219,2 10,2 h 2.585938 L 9.292969,5.292969 c -0.390625,0.390625 -0.390625,1.023437 0,1.414062 C 9.480469,6.894531 9.734375,7 10,7 10.265625,7 10.519531,6.894531 10.707031,6.707031 L 14,3.414062 V 6 c 0,0.550781 0.449219,1 1,1 z m 0,0" id="path4" style="fill:#398fe7;fill-opacity:1" /> </g> </svg> �����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/process-stop.svg����������������������������������0000644�0001750�0000144�00000011110�15104114162�024241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient3019" x1="71.204" x2="71.204" y1="6.2376" y2="44.341" gradientTransform="matrix(1.0541 0 0 1.0541 -51.611 -2.7279)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".50776"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".83457"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient11527-6-5" x1="2035.2" x2="2035.2" y1="3208.1" y2="3242" gradientTransform="matrix(1.5713 0 0 1.1747 -3179.5 -3763.8)" gradientUnits="userSpaceOnUse"> <stop stop-color="#ed5353" offset="0"/> <stop stop-color="#c6262e" offset="1"/> </linearGradient> <radialGradient id="radialGradient3300-8" cx="99.189" cy="185.3" r="62.769" gradientTransform="matrix(.38235 7.5556e-8 -1.8372e-8 .11152 -5.9254 36.336)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3820-7-2"/> <linearGradient id="linearGradient3820-7-2"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4192-6" cx="99.189" cy="185.3" r="62.769" gradientTransform="matrix(.2549 5.3967e-8 -1.2248e-8 .079655 6.7164 44.241)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3820-7-2"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g transform="matrix(.70833 0 0 .71428 1.3333 .7846)" stroke-width="1.4059"> <path d="m56 57.002a24 6.9986 0 1 1-48 0 24 6.9986 0 1 1 48 0z" fill="url(#radialGradient3300-8)" opacity=".2"/> <path d="m48 59.002a16 4.9989 0 1 1-32 0 16 4.9989 0 1 1 32 0z" fill="url(#radialGradient4192-6)" opacity=".4"/> </g> <g> <path d="m24 3.5c-11.311 0-20.5 9.1888-20.5 20.5 0 11.311 9.1888 20.5 20.5 20.5s20.5-9.1888 20.5-20.5c0-11.311-9.1888-20.5-20.5-20.5z" color="#000000" fill="url(#linearGradient11527-6-5)" opacity=".99"/> <path d="m43.5 23.999c0 10.77-8.7311 19.501-19.5 19.501-10.77 0-19.5-8.7309-19.5-19.501 0-10.769 8.7306-19.499 19.5-19.499 10.769 0 19.5 8.7299 19.5 19.499v0z" color="#000000" fill="none" opacity=".4" stroke="url(#linearGradient3019)" stroke-linecap="round" stroke-linejoin="round"/> <path d="m24 3.5c-11.311 0-20.5 9.1888-20.5 20.5s9.1888 20.5 20.5 20.5c11.311 0 20.5-9.1888 20.5-20.5 0-11.311-9.1888-20.5-20.5-20.5z" color="#000000" color-rendering="auto" fill="none" image-rendering="auto" opacity=".5" shape-rendering="auto" solid-color="#000000" stroke="#7a0000" stroke-linecap="round" stroke-linejoin="round" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;isolation:auto;mix-blend-mode:normal"/> </g> <g> <path d="m17.367 15.5c-0.73776 0-1.4768 0.29164-2.0318 0.84629-1.1136 1.1128-1.1136 2.9486 0 4.0614l4.5993 4.5989-4.5993 4.5969c-1.1136 1.1128-1.1136 2.9486 0 4.0614 1.1141 1.1134 2.9514 1.1134 4.0655 0l4.5993-4.5969 4.5993 4.5969c1.1141 1.1134 2.9514 1.1134 4.0655 0 1.1136-1.1128 1.1136-2.9486 0-4.0614l-4.5993-4.5969 4.5993-4.5989c1.1136-1.1128 1.1136-2.9486 0-4.0614-1.1141-1.1134-2.9514-1.1134-4.0655 0l-4.5993 4.5969-4.5993-4.5969c-0.55628-0.55592-1.296-0.84629-2.0337-0.84629z" fill="#7a0000" opacity=".05"/> <path d="m17.375 16.5c-0.479 0-0.95787 0.1856-1.3249 0.55259-0.73408 0.73399-0.73408 1.9155 0 2.6495l5.2996 5.299-5.2996 5.299c-0.73408 0.73399-0.73408 1.9155 0 2.6495 0.73408 0.73399 1.9157 0.73399 2.6498 0l5.2996-5.299 5.2996 5.299c0.73408 0.73399 1.9157 0.73399 2.6498 0 0.73408-0.73399 0.73408-1.9155 0-2.6495l-5.2996-5.299 5.2996-5.299c0.73408-0.73399 0.73408-1.9155 0-2.6495-0.73408-0.73399-1.9157-0.73399-2.6498 0l-5.2996 5.299-5.2996-5.299c-0.36704-0.36699-0.8459-0.55259-1.3249-0.55259z" fill="#7a0000" opacity=".15"/> <path d="m17.375 15.5c-0.479 0-0.95787 0.1856-1.3249 0.55259-0.73408 0.73399-0.73408 1.9155 0 2.6495l5.2996 5.299-5.2996 5.299c-0.73408 0.73399-0.73408 1.9155 0 2.6495 0.73408 0.73399 1.9157 0.73399 2.6498 0l5.2996-5.299 5.2996 5.299c0.73408 0.73399 1.9157 0.73399 2.6498 0 0.73408-0.73399 0.73408-1.9155 0-2.6495l-5.2996-5.299 5.2996-5.299c0.73408-0.73399 0.73408-1.9155 0-2.6495-0.73408-0.73399-1.9157-0.73399-2.6498 0l-5.2996 5.299-5.2996-5.299c-0.36704-0.36699-0.8459-0.55259-1.3249-0.55259z" fill="#fff"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/object-rotate-right.svg���������������������������0000644�0001750�0000144�00000013457�15104114162�025475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient3400" cx="62.625" cy="4.625" r="10.625" gradientTransform="matrix(2.0706 0 0 .84706 -105.67 35.084)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2417" x1="28.117" x2="39.686" y1="41.674" y2="28.505" gradientTransform="matrix(.97294 .058553 -.057444 .9545 2.8218 3.9296)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity="0" offset="0"/> <stop stop-color="#fff" stop-opacity=".27473" offset=".6313"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2423" x1="31.226" x2="34.966" y1="34.601" y2="26.843" gradientTransform="matrix(1.0195 .061353 -.06019 1.0001 2.7045 1.0171)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a777d8" offset="0"/> <stop stop-color="#a777d8" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2436" x1="32.326" x2="22.245" y1="5.0201" y2="43.366" gradientTransform="matrix(.68922 -.68922 .67615 .67615 -7.5101 28.645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4437" x1="39.401" x2="-33.299" y1="-5.3019" y2="68.803" gradientTransform="matrix(.69211 -.69211 .679 .679 -7.9161 28.867)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0c1ff" offset="0"/> <stop stop-color="#c5a3f2" offset=".26238"/> <stop stop-color="#7a36b1" offset=".70495"/> <stop stop-color="#4c2d81" offset="1"/> </linearGradient> <linearGradient id="linearGradient2425-5" x1="33.687" x2="37.04" y1="35.774" y2="29.857" gradientTransform="matrix(1.0195 .061353 -.06019 1.0001 2.7045 1.0171)" gradientUnits="userSpaceOnUse"> <stop stop-color="#452981" offset="0"/> <stop stop-color="#452981" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <path d="m46 39.002a22 9 0 0 1-44 0 22 9 0 1 1 44 0z" fill="url(#radialGradient3400)" fill-rule="evenodd" opacity=".4"/> <path d="m26.871 1c-0.74797 0.00391-1.3709 0.72517-1.3711 1.6328v4.0156h-0.25781c-5.2597 0.096267-10.241 1.8403-14.236 5.75-8.1272 7.9535-8.1137 20.791-0.34961 28.732 3.9705 4.0614 9.1712 5.9986 14.393 5.8574l0.45117-9.2233c-2.4221 0-6.3631-0.81754-8.457-2.9115-3.4953-3.4953-4.3166-11.773-0.03516-15.924 1.7336-1.6805 5.8494-3.86 8.2359-3.9258l0.25586-0.003906v4.3691c8.7e-4 1.2561 1.1496 2.0404 2.0684 1.4121l9.2422-8.3692c0.91818-0.62848 0.91818-2.1977 0-2.8262l-9.2422-8.3672c-0.16787-0.11436-0.35421-0.18557-0.54688-0.20898-0.050835-0.006265-0.10053-0.010026-0.15039-0.0097656z" color="#000000" color-rendering="auto" fill="url(#linearGradient4437)" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/> <path d="m24.141 46.926c9.4851 0.67369 20.759-5.9185 21.49-18.356l-8.5295 1.1244c-1.8148 6.013-7.976 8.1761-12.602 8.0707" fill="url(#linearGradient2423)"/> </g> <path d="m26.848 45.839c5.3424 0.33236 16.92-5.2792 17.647-17.37l-5.534-1.8059c0 7.1298-7.1617 11.97-13.374 12.102" fill="none" stroke="url(#linearGradient2417)" stroke-linejoin="round" stroke-width="1.0047"/> <path d="m28 27.5a2.5 2.5 0 0 1-5 0 2.5 2.5 0 1 1 5 0z" color="#000000" color-rendering="auto" fill="#cd9ef7" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/> <g fill="none"> <path d="m25.049 46.988c9.2799 0.2029 19.875-6.3794 20.583-18.418l-8.5295 1.1244c-1.6075 5.9614-7.994 8.0707-12.282 8.0707" opacity=".5" stroke="url(#linearGradient2425-5)" stroke-width="1.0048"/> <g stroke-linejoin="round"> <path d="m28 27.5a2.5 2.5 0 0 1-5 0 2.5 2.5 0 1 1 5 0z" color="#000000" color-rendering="auto" image-rendering="auto" opacity=".5" shape-rendering="auto" solid-color="#000000" stroke="#452981" style="isolation:auto;mix-blend-mode:normal"/> <path d="m25.587 38.765c-1.755 0-2.9662-0.04767-5.1654-0.81631-3.2454-1.0629-5.4087-3.3632-6.4682-6.3097-1.7051-4.6471-0.97404-10.326 2.7394-13.781 1.1381-1.0796 3.4597-2.353 5.0108-2.9891 1.9699-0.80774 3.2599-0.99971 4.7963-0.86941v5c0 1.4359 0.44184 0.98446 1.2762 0.25508 0.3266-0.28552 8.1138-7.3551 8.1138-7.3551 0.2607-0.2831 0.535-0.3878 0.535-0.9s-0.26119-0.65779-0.53-0.9l-8.3457-7.5198c-0.73446-0.73446-1.0493-0.8105-1.0493 0.41982v4.7s-1.7487 0.033093-2.7947 0.059046c-4.5105 0.11191-10.759 3.1555-13.972 7.6409-4.9246 6.402-5.1988 15.587-0.48345 22.431 3.4899 5.1561 9.7864 8.5243 15.875 8.1688" opacity=".4" stroke="url(#linearGradient2436)"/> <path d="m24.82 37.765c-1.7186 0-5.6827-0.81752-7.7766-2.9114-3.4953-3.4953-4.3166-11.773-0.03516-15.924 1.7336-1.6805 5.8494-3.86 8.2359-3.9258l0.25586-0.0039v4.3691c8.7e-4 1.2561 1.1496 2.0404 2.0684 1.4121l9.2422-8.3692c0.82477-0.74686 0.82486-2.0794 0-2.8262l-9.2422-8.3672c-0.16787-0.11436-0.35421-0.18557-0.54688-0.20898-0.05083-0.00627-0.10052-0.010026-0.15039-0.00977-0.74797 0.00391-1.3709 0.72517-1.3711 1.6328v4.0156h-0.25781c-5.2597 0.096267-10.241 1.8403-14.236 5.75-8.1272 7.9535-8.1137 20.791-0.34961 28.732 3.9705 4.0614 8.6956 5.8574 14.393 5.8574" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#452981" stroke-opacity=".5" style="isolation:auto;mix-blend-mode:normal"/> </g> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/object-rotate-left.svg����������������������������0000644�0001750�0000144�00000013445�15104114162�025307� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient3400" cx="62.625" cy="4.625" r="10.625" gradientTransform="matrix(-2.0706 0 0 .84706 153.67 35.084)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2417" x1="28.117" x2="39.686" y1="41.674" y2="28.505" gradientTransform="matrix(-.97294 .058553 .057444 .9545 45.178 3.9296)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity="0" offset="0"/> <stop stop-color="#fff" stop-opacity=".27473" offset=".6313"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2423" x1="31.226" x2="34.966" y1="34.601" y2="26.843" gradientTransform="matrix(-1.0195 .061353 .06019 1.0001 45.295 1.0171)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a777d8" offset="0"/> <stop stop-color="#a777d8" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2436" x1="32.326" x2="22.245" y1="5.0201" y2="43.366" gradientTransform="matrix(-.68922 -.68922 -.67615 .67615 55.51 28.645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4437" x1="39.401" x2="-33.299" y1="-5.3019" y2="68.803" gradientTransform="matrix(-.69211 -.69211 -.679 .679 55.916 28.867)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0c1ff" offset="0"/> <stop stop-color="#c5a3f2" offset=".26238"/> <stop stop-color="#7a36b1" offset=".70495"/> <stop stop-color="#4c2d81" offset="1"/> </linearGradient> <linearGradient id="linearGradient2425-5" x1="33.687" x2="37.04" y1="35.774" y2="29.857" gradientTransform="matrix(-1.0195 .061353 .06019 1.0001 45.295 1.0171)" gradientUnits="userSpaceOnUse"> <stop stop-color="#452981" offset="0"/> <stop stop-color="#452981" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <path d="m2 39.002a22 9 0 0 0 44 0 22 9 0 1 0-44 0z" fill="url(#radialGradient3400)" fill-rule="evenodd" opacity=".4"/> <path d="m21.129 1c0.74797 0.00391 1.3709 0.72517 1.3711 1.6328v4.0156h0.25781c5.2597 0.096267 10.241 1.8403 14.236 5.75 8.1272 7.9535 8.1137 20.791 0.34961 28.732-3.9705 4.0614-9.1712 5.9986-14.393 5.8574l-0.45117-9.2233c2.4221 0 6.3631-0.81754 8.457-2.9115 3.4953-3.4953 4.3166-11.773 0.03516-15.924-1.7336-1.6805-5.8494-3.86-8.2359-3.9258l-0.25586-0.003906v4.3691c-8.7e-4 1.2561-1.1496 2.0404-2.0684 1.4121l-9.2422-8.3692c-0.91818-0.62848-0.91818-2.1977 0-2.8262l9.2422-8.3672c0.16787-0.11436 0.35421-0.18557 0.54688-0.20898 0.050835-0.006265 0.10053-0.010026 0.15039-0.0097656z" color="#000000" color-rendering="auto" fill="url(#linearGradient4437)" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/> <path d="m23.858 46.926c-9.4851 0.67369-20.759-5.9185-21.49-18.356l8.5295 1.1244c1.8148 6.013 7.976 8.1761 12.602 8.0707" fill="url(#linearGradient2423)"/> </g> <path d="m21.152 45.839c-5.3424 0.33236-16.92-5.2792-17.647-17.37l5.534-1.8059c0 7.1298 7.1617 11.97 13.374 12.102" fill="none" stroke="url(#linearGradient2417)" stroke-linejoin="round" stroke-width="1.0048"/> <path d="m20 27.5a2.5 2.5 0 0 0 5 0 2.5 2.5 0 1 0-5 0z" color="#000000" color-rendering="auto" fill="#cd9ef7" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/> <g fill="none"> <path d="m22.951 46.988c-9.2799 0.2029-19.875-6.3794-20.583-18.418l8.5295 1.1244c1.6075 5.9614 7.994 8.0707 12.282 8.0707" opacity=".5" stroke="url(#linearGradient2425-5)" stroke-width="1.0048"/> <g stroke-linejoin="round"> <path d="m20 27.5a2.5 2.5 0 0 0 5 0 2.5 2.5 0 1 0-5 0z" color="#000000" color-rendering="auto" image-rendering="auto" opacity=".5" shape-rendering="auto" solid-color="#000000" stroke="#452981" style="isolation:auto;mix-blend-mode:normal"/> <path d="m22.413 38.765c1.755 0 2.9662-0.04767 5.1654-0.81631 3.2454-1.0629 5.4087-3.3632 6.4682-6.3097 1.7051-4.6471 0.97404-10.326-2.7394-13.781-1.1381-1.0796-3.4597-2.353-5.0108-2.9891-1.9699-0.80774-3.2599-0.99971-4.7963-0.86941v5c0 1.4359-0.44184 0.98446-1.2762 0.25508-0.3266-0.28552-8.1138-7.3551-8.1138-7.3551-0.2607-0.2831-0.535-0.3878-0.535-0.9s0.26119-0.65779 0.53-0.9l8.3457-7.5198c0.73446-0.73446 1.0493-0.8105 1.0493 0.41982v4.7s1.7487 0.033093 2.7947 0.059046c4.5105 0.11191 10.759 3.1555 13.972 7.6409 4.9246 6.402 5.1988 15.587 0.48344 22.431-3.4899 5.1561-9.7864 8.5243-15.875 8.1688" opacity=".4" stroke="url(#linearGradient2436)"/> <path d="m23.18 37.765c1.7186 0 5.6827-0.81752 7.7766-2.9114 3.4953-3.4953 4.3166-11.773 0.03516-15.924-1.7336-1.6805-5.8494-3.86-8.2359-3.9258l-0.25586-0.0039v4.3691c-8.7e-4 1.2561-1.1496 2.0404-2.0684 1.4121l-9.2422-8.3692c-0.82477-0.74686-0.82486-2.0794 0-2.8262l9.2422-8.3672c0.16787-0.11436 0.35421-0.18557 0.54688-0.20898 0.05083-0.00627 0.10052-0.010026 0.15039-0.00977 0.74797 0.00391 1.3709 0.72517 1.3711 1.6328v4.0156h0.25781c5.2597 0.096267 10.241 1.8403 14.236 5.75 8.1272 7.9535 8.1137 20.791 0.34961 28.732-3.9705 4.0614-8.6956 5.8574-14.393 5.8574" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="#452981" stroke-opacity=".5" style="isolation:auto;mix-blend-mode:normal"/> </g> </g> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/object-flip-horizontal.svg������������������������0000644�0001750�0000144�00000013462�15104114162�026201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg width="128" height="128" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2399"> <stop style="stop-color:#0968ef" offset="0"/> <stop style="stop-color:#aecffc" offset="1"/> </linearGradient> <linearGradient id="linearGradient3314"> <stop style="stop-color:#ffffff" offset="0"/> <stop style="stop-color:#ffffff;stop-opacity:0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3521" x1="73.149" x2="15.938" y1="16.525" y2="40.024" gradientUnits="userSpaceOnUse"> <stop style="stop-color:#ffffff" offset="0"/> <stop style="stop-color:#ffffff" offset=".42597"/> <stop style="stop-color:#f1f1f1" offset=".58928"/> <stop style="stop-color:#eaeaea" offset=".8022"/> <stop style="stop-color:#dfdfdf" offset="1"/> </linearGradient> <linearGradient id="linearGradient3523" x1="58.092" x2="-56.079" y1="2.6415" y2="55.637" gradientUnits="userSpaceOnUse"> <stop style="stop-color:#7c7c80" offset="0"/> <stop style="stop-color:#69696e" offset=".5"/> <stop style="stop-color:#9b9ba3" offset="1"/> </linearGradient> <linearGradient id="linearGradient3525" x1="102.02" x2="63.742" y1="7.3805" y2="41.851" gradientTransform="matrix(-1 0 1.0392 -2.602 125.71 126.16)" gradientUnits="userSpaceOnUse"> <stop style="stop-color:#ffffff" offset="0"/> <stop style="stop-color:#ffffff;stop-opacity:0" offset="1"/> </linearGradient> <radialGradient id="radialGradient3527" cx="1.6089" cy="43.392" r="51.479" gradientTransform="matrix(1.0623 -.10814 .13954 1.3892 65.036 -5.1277)" gradientUnits="userSpaceOnUse"> <stop style="stop-color:#9fbde2" offset="0"/> <stop style="stop-color:#ffffff" offset="1"/> </radialGradient> <linearGradient id="linearGradient3529" x1="37.406" x2="-122.81" y1="14.748" y2="120.07" gradientTransform="matrix(.95403 .36428 -.36469 .95282 78.177 24.112)" gradientUnits="userSpaceOnUse"> <stop style="stop-color:#245795" offset="0"/> <stop style="stop-color:#afd4ff" offset="1"/> </linearGradient> <linearGradient id="linearGradient3554" x1="113.16" x2="39.268" y1="25.786" y2="25.786" gradientTransform="matrix(1.2764 -.24092 .24092 1.2764 -60.539 91.415)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2399"/> <linearGradient id="linearGradient3582" x1="34.25" x2="34.25" y1="-117.21" y2="161.87" gradientTransform="matrix(-1 0 0 1 128.13 -15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3314"/> <linearGradient id="linearGradient3426" x1="8.7942" x2="72.434" y1="83.812" y2=".64496" gradientTransform="matrix(-1 0 0 1 128.63 -15)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3314"/> <linearGradient id="linearGradient3478" x1="66.931" x2="59.046" y1="117.75" y2="89.371" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2399"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <rect x="64" y="111.94" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="79.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="95.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <g transform="matrix(0 1 1 0 -13.906 -5.9939)"> <path transform="matrix(.95403 .36428 -.36469 .95282 78.089 24)" d="m50.05 27.113-95.12 36.202 78.49-80.206z" style="fill:url(#linearGradient3521);opacity:.89139;stroke-dashoffset:1.0878;stroke-linecap:round;stroke-linejoin:round;stroke-width:3.9188;stroke:url(#linearGradient3523)"/> <path d="m69.012 66.143c3.8641-5.0868 29.667-21.157 44.876-26.309l-10.955-11.446-29.746 17.617c-6.2869 4.815-18.037 14.445-21.978 19.817z" style="fill-rule:evenodd;fill:url(#linearGradient3525)"/> </g> <g transform="rotate(90 76.066 70.072)"> <path d="m116.04 68.177-103.97-0.045908 104.15-47.94z" style="fill:url(#radialGradient3527);opacity:.89139;stroke-dashoffset:1.0878;stroke-linecap:round;stroke-linejoin:round;stroke-width:4;stroke:url(#linearGradient3529)"/> </g> <path d="m80 15.188 23.426 51.147c-5.8009 1.3543-16.921 1.8942-23.481 1.9589z" style="fill:url(#linearGradient3582);opacity:.89139"/> <path d="m99.381 98.245-33.453-17.747-4.1161 6.0313 10.852 11.471c-19.831 9.0674-31.264 3.6208-39.982-1.1789l-4.1669 8.9034c12.859 8.1835 31.486 9.8857 46.076 2.487l-5.4061 14.971 6.0798 4.373z" style="fill-rule:evenodd;fill:url(#linearGradient3554)"/> <path d="m80 15.188 22.594 50.312c-5.543 1.2941-15.863 1.8034-22.5 1.9062v1.0312c6.5602-0.06475 17.699-0.58317 23.5-1.9375z" style="fill:url(#linearGradient3426);opacity:.89139"/> <path d="m63.188 86.531c3.4499 3.7767 7.1244 7.3575 10.406 11.281 0.0618 1.2425-1.3448 1.5981-2.2779 1.9568-5.7079 2.4158-11.813 4.1017-18.047 4.1246-5.7384 0.0825-11.449-1.2964-16.607-3.7905-1.1997-0.56164-2.4041-1.1066-3.5373-1.7909-0.87073 2.2343-1.3667 2.8603-2.3188 5.0599 18.052 12.362 47.011 3.834 61.864-7.2768-9.6108-4.9162-16.842-9.0077-26.389-14.064-1.0312 1.5-2.0625 3-3.0938 4.5z" style="fill:url(#linearGradient3478)"/> <rect x="64" y="-.062501" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="15.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="31.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="47.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> <rect x="64" y="63.938" width="4" height="8.1875" style="fill-opacity:.89412;fill:#0069eb"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/media-skip-forward.svg����������������������������0000644�0001750�0000144�00000011460�15104114162�025275� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient5075"> <stop stop-color="#adb0a8" offset="0"/> <stop stop-color="#464744" offset="1"/> </linearGradient> <linearGradient id="linearGradient2679"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d3d7cf" offset="1"/> </linearGradient> <linearGradient id="linearGradient1401" x1="55.614" x2="55.772" y1="157.57" y2="140.31" gradientTransform="matrix(-1 0 0 1 94 -121)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5075"/> <linearGradient id="linearGradient1426" x1="49.43" x2="49.667" y1="112.95" y2="115.14" gradientTransform="matrix(-1 0 0 1 90.991 -97.262)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient1436" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(-.22266 -.99627 -2.13 .47604 336.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <radialGradient id="radialGradient1439" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(-.22266 -.99627 -2.13 .47604 354.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <linearGradient id="linearGradient2322" x1="24.476" x2="23.75" y1="13.659" y2="36" gradientTransform="matrix(-1 0 0 1 46 0)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#fff" stop-opacity=".65979" offset="1"/> </linearGradient> <radialGradient id="radialGradient4375" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(-.22266 -.99627 -2.13 .47604 371.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <linearGradient id="linearGradient4413" x1="54" x2="54" y1="132.5" y2="145" gradientTransform="matrix(-1 4.681e-17 -4.681e-17 -1 93 169)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5075"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media Skip Forward</dc:title> <dc:creator> <cc:Agent> <dc:title>Lapo Calamandrei</dc:title> </cc:Agent> </dc:creator> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path d="m4.5 13.5v21l17.5-10.5-17.5-10.5zm18 0v21l17-10.188v10.188h5v-21h-5v10.188l-17-10.188z" color="#000000" fill="none" opacity=".15" stroke="url(#linearGradient2322)" stroke-linecap="square" stroke-linejoin="round" stroke-width="3"/> <g fill-rule="evenodd"> <path d="m22.5 13.5 17.5 10.5-17.5 10.5v-21z" color="#000000" fill="url(#radialGradient1439)"/> <path d="m4.4999 13.5 17.5 10.5-17.5 10.5v-21z" color="#000000" fill="url(#radialGradient1436)"/> <path d="m4.4999 13.5 1.1875 0.71875-1.1875-0.125v-0.59375zm18 0.25 0.46875 0.03125 3.9688 2.375-4.4375-0.40625v-2z" color="#000000" fill="url(#linearGradient1426)" opacity=".07027"/> </g> <path d="m22.5 13.5 17.5 10.5-17.5 10.5v-21zm-18 0 17.5 10.5-17.5 10.5v-21z" color="#000000" fill="none" stroke="url(#linearGradient1401)" stroke-linecap="square" stroke-linejoin="round"/> <g fill="#fff" fill-rule="evenodd"> <path d="m23 14.375 16.031 9.625-16.031 9.625v-19.25zm-18 0 16.031 9.625-16.031 9.625v-19.25zm19 1.7812v15.688l13.094-7.8438-13.094-7.8438zm-18 0v15.688l13.094-7.8438-13.094-7.8438z" color="#000000"/> <path d="m33.588 21.784-9.5251-5.5965v6.0429l9.5251-0.44638z" color="#000000" opacity=".56111"/> <path d="m18.279 23.207-12.278-7.0196v7.8713l12.278-0.85171z" color="#000000" opacity=".56111"/> </g> <path d="m39.5 13.5h5v21h-5v-21z" color="#000000" fill="url(#radialGradient4375)" fill-rule="evenodd"/> <rect transform="scale(-1)" x="-43.5" y="-33.5" width="3" height="19" color="#000000" fill="none" stroke="#fff" stroke-linecap="square"/> <path d="m44.5 34.5v-21h-5v21h5z" color="#000000" fill="none" stroke="url(#linearGradient4413)" stroke-linecap="square" stroke-linejoin="round"/> <path d="m41 22 1.9567-0.16295v-6.8059h-2.0329l0.076195 6.9689z" color="#000000" fill="#fff" fill-rule="evenodd" opacity=".56111"/> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/media-skip-backward.svg���������������������������0000644�0001750�0000144�00000011451�15104114162�025407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient5075"> <stop stop-color="#adb0a8" offset="0"/> <stop stop-color="#464744" offset="1"/> </linearGradient> <linearGradient id="linearGradient2679"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d3d7cf" offset="1"/> </linearGradient> <linearGradient id="linearGradient1401" x1="55.886" x2="55.936" y1="157.71" y2="142.94" gradientTransform="translate(-46 -121)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5075"/> <linearGradient id="linearGradient1426" x1="49.43" x2="49.667" y1="112.95" y2="115.14" gradientTransform="translate(-42.991 -97.262)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient1436" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(.22266 -.99627 2.13 .47604 -288.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <radialGradient id="radialGradient1439" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(.22266 -.99627 2.13 .47604 -306.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <radialGradient id="radialGradient4375" cx="64.227" cy="147.99" r="8.75" gradientTransform="matrix(.22266 -.99627 2.13 .47604 -323.95 20.852)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <linearGradient id="linearGradient4413" x1="54" x2="54" y1="131.27" y2="145" gradientTransform="matrix(1 4.681e-17 4.681e-17 -1 -45 169)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5075"/> <linearGradient id="linearGradient5293" x1="24.476" x2="23.75" y1="13.659" y2="36" gradientTransform="translate(1.9997)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#fff" stop-opacity=".65979" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media Skip Backward</dc:title> <dc:creator> <cc:Agent> <dc:title>Lapo Calamandrei</dc:title> </cc:Agent> </dc:creator> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path d="m43.5 13.5v21l-17.5-10.5 17.5-10.5zm-18 0v21l-17-10.188v10.188h-5v-21h5v10.188l17-10.188z" color="#000000" fill="none" opacity=".15" stroke="url(#linearGradient5293)" stroke-linecap="square" stroke-linejoin="round" stroke-width="3"/> <g fill-rule="evenodd"> <path d="m25.5 13.5-17.5 10.5 17.5 10.5v-21z" color="#000000" fill="url(#radialGradient1439)"/> <path d="m43.5 13.5-17.5 10.5 17.5 10.5v-21z" color="#000000" fill="url(#radialGradient1436)"/> <path d="m43.5 13.5-1.1875 0.71875 1.1875-0.125v-0.59375zm-18 0.25-0.46875 0.03125-3.9688 2.375 4.4375-0.40625v-2z" color="#000000" fill="url(#linearGradient1426)" opacity=".07027"/> </g> <path d="m25.5 13.5-17.5 10.5 17.5 10.5v-21zm18 0-17.5 10.5 17.5 10.5v-21z" color="#000000" fill="none" stroke="url(#linearGradient1401)" stroke-linecap="square" stroke-linejoin="round"/> <g fill="#fff" fill-rule="evenodd"> <path d="m25 14.375-16.031 9.625 16.031 9.625v-19.25zm18 0-16.031 9.625 16.031 9.625v-19.25zm-19 1.7812v15.688l-13.094-7.8438 13.094-7.8438zm18 0v15.688l-13.094-7.8438 13.094-7.8438z" color="#000000"/> <path d="m12.412 23.159 11.588-6.9715v6.0429l-11.588 0.92862z" color="#000000" opacity=".56111"/> <path d="m31.971 22.145 10.028-5.9571v5.5588l-10.028 0.39829z" color="#000000" opacity=".56111"/> </g> <path d="m8.5 13.5h-5v21h5v-21z" color="#000000" fill="url(#radialGradient4375)" fill-rule="evenodd"/> <rect transform="scale(1,-1)" x="4.4996" y="-33.5" width="3" height="19" color="#000000" fill="none" stroke="#fff" stroke-linecap="square"/> <path d="m3.4996 34.5v-21h5v21h-5z" color="#000000" fill="none" stroke="url(#linearGradient4413)" stroke-linecap="square" stroke-linejoin="round"/> <path d="m7 24.312-1.9567 0.33705v-9.6184h2.0329l-0.076195 9.2814z" color="#000000" fill="#fff" fill-rule="evenodd" opacity=".56111"/> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/media-playback-start.svg��������������������������0000644�0001750�0000144�00000005760�15104114162�025614� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2306" x1="71.289" x2="70.827" y1="124.12" y2="95" gradientTransform="translate(-45 -71.094)" gradientUnits="userSpaceOnUse"> <stop stop-color="#adb0a8" offset="0"/> <stop stop-color="#464744" offset="1"/> </linearGradient> <radialGradient id="radialGradient2314" cx="107.59" cy="83.991" r="12.552" gradientTransform="matrix(.053243 -.83624 2.0195 .12857 -151.92 108.08)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d3d7cf" offset="1"/> </radialGradient> <linearGradient id="linearGradient2690" x1="70.914" x2="70.952" y1="101.74" y2="88.924" gradientTransform="matrix(1.1282 0 0 1.1282 -53.993 -83.36)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media Playback Start</dc:title> <dc:creator> <cc:Agent> <dc:title>Lapo Calamandrei</dc:title> </cc:Agent> </dc:creator> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:subject> <rdf:Bag> <rdf:li>play</rdf:li> <rdf:li>media</rdf:li> <rdf:li>music</rdf:li> <rdf:li>video</rdf:li> <rdf:li>player</rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path d="m12 39.5v-30.5l26.07 14.817-26.07 15.683z" color="#000000" fill="none" opacity=".15" stroke="url(#linearGradient2690)" stroke-linecap="square" stroke-linejoin="round" stroke-width="2"/> <path d="m12.499 37.811v-27.811l24.103 13.906-24.103 13.906z" color="#000000" fill="url(#radialGradient2314)" fill-rule="evenodd"/> <path d="m12.499 37.811v-27.811l24.103 13.906-24.103 13.906z" color="#000000" fill="none" stroke="url(#linearGradient2306)" stroke-linecap="square" stroke-linejoin="round"/> <path d="m12.999 10.874v26.062l22.594-13.031-22.594-13.031zm1 1.75 19.562 11.281-19.562 11.281v-22.562z" color="#000000" fill="#fff" fill-rule="evenodd"/> <path d="m13.938 12.562v11.688c4.2692-0.044785 9.1642-0.34556 17.062-1.875l-17.062-9.8125z" color="#000000" display="block" fill="#fff" opacity=".5"/> </g> </svg> ����������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/media-playback-pause.svg��������������������������0000644�0001750�0000144�00000010425�15104114162�025566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2817"> <stop offset="0"/> <stop stop-color="#fff" stop-opacity=".48454" offset="1"/> </linearGradient> <linearGradient id="linearGradient2697"> <stop stop-color="#babdb6" offset="0"/> <stop stop-color="#555753" offset="1"/> </linearGradient> <linearGradient id="linearGradient2679"> <stop stop-color="#f7f7f7" offset="0"/> <stop stop-color="#ccd0c7" offset="1"/> </linearGradient> <linearGradient id="linearGradient3081"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2800" x1="15.09" x2="14" y1="15.292" y2="52.511" gradientTransform="translate(-4e-4 -.09426)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3081"/> <linearGradient id="linearGradient2803" x1="169" x2="169" y1="110.34" y2="93.205" gradientTransform="matrix(1 0 0 1.0044 -145 -71.462)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2697"/> <radialGradient id="radialGradient2809" cx="169.77" cy="100.2" r="11" gradientTransform="matrix(3.5623e-6 -1.072 1.9921 -1.2507e-6 -175.61 212.69)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2679"/> <linearGradient id="linearGradient2823" x1="174.83" x2="174.75" y1="84.263" y2="105.49" gradientTransform="matrix(1.1033 0 0 1.0549 -163.12 -76.311)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2817"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Media Playback Pause</dc:title> <dc:creator> <cc:Agent> <dc:title>Lapo Calamandrei</dc:title> </cc:Agent> </dc:creator> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:subject> <rdf:Bag> <rdf:li>media</rdf:li> <rdf:li>pause</rdf:li> <rdf:li>playback</rdf:li> <rdf:li>video</rdf:li> <rdf:li>music</rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path d="m26.087 12.829v22.153h8.8261v-22.153h-8.8261z" color="#000000" fill="none" opacity=".15" stroke="url(#linearGradient2823)" stroke-linecap="square" stroke-linejoin="round" stroke-width="2"/> <path d="m26.5 13.406v21h8v-21h-8z" color="#000000" fill="url(#radialGradient2809)" fill-rule="evenodd"/> <path d="m26.5 13.408v21.092h8v-21.092h-8z" color="#000000" fill="none" stroke="url(#linearGradient2803)" stroke-linecap="square" stroke-linejoin="round"/> <path d="m27.5 14.406v19h6v-19h-6z" color="#000000" fill="none" stroke="url(#linearGradient2800)" stroke-linecap="square"/> <path d="m28.019 14.943v8.3856l4.9939-0.61872v-7.8553l-4.9939 0.088388z" color="#000000" display="block" fill="#f7f7f7" opacity=".5"/> <g transform="translate(-12.972)"> <path d="m26.087 12.829v22.153h8.8261v-22.153h-8.8261z" color="#000000" fill="none" opacity=".15" stroke="url(#linearGradient2823)" stroke-linecap="square" stroke-linejoin="round" stroke-width="2"/> <path d="m26.5 13.406v21h8v-21h-8z" color="#000000" fill="url(#radialGradient2809)" fill-rule="evenodd"/> <path d="m26.5 13.408v21.092h8v-21.092h-8z" color="#000000" fill="none" stroke="url(#linearGradient2803)" stroke-linecap="square" stroke-linejoin="round"/> <path d="m27.5 14.406v19h6v-19h-6z" color="#000000" fill="none" stroke="url(#linearGradient2800)" stroke-linecap="square"/> <path d="m28.019 14.943v10.065l4.9939-0.61872v-9.5347l-4.9939 0.088388z" color="#000000" display="block" fill="#f7f7f7" opacity=".5"/> </g> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/image-red-eye.svg���������������������������������0000644�0001750�0000144�00000012225�15104114162�024222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient3101" x1="68.313" x2="68.313" y1="52.925" y2="65.922" gradientTransform="matrix(.35013 0 0 .35013 .57143 -.53165)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3031" x1="71.204" x2="71.204" y1="6.2376" y2="44.341" gradientTransform="matrix(.35135 0 0 .35135 -1.2041 15.09)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".50776"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".83457"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient3039" x1="7.0776" x2="7.0776" y1="3.0816" y2="45.369" gradientTransform="matrix(.36857 0 0 .36857 15.154 15.153)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7a0000" offset="0"/> <stop stop-color="#c6262e" offset="1"/> </linearGradient> <linearGradient id="linearGradient3820-7-2"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient3300-8-3" cx="99.189" cy="185.3" r="62.769" gradientTransform="matrix(.38235 7.5556e-8 -1.8372e-8 .11152 -5.9254 36.336)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3820-7-2"/> <radialGradient id="radialGradient4192-6-5" cx="99.189" cy="185.3" r="62.769" gradientTransform="matrix(.2549 5.3967e-8 -1.2248e-8 .079655 6.7164 44.241)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3820-7-2"/> <linearGradient id="linearGradient3932-9" x1="6.6575" x2="39.442" y1="23" y2="23" gradientTransform="matrix(0 1.4643 -1.4643 0 57.679 -9.6786)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#abacae" offset="1"/> </linearGradient> <linearGradient id="linearGradient3111-7" x1="71.204" x2="71.204" y1="7.6176" y2="43.283" gradientTransform="matrix(1.0541 0 0 1.0541 -51.611 -2.7282)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4011"/> <linearGradient id="linearGradient4011"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".50776"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".83457"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient3993-0-6-0-8-5" x1="71.204" x2="71.204" y1="6.2376" y2="44.341" gradientTransform="matrix(.45946 0 0 -.45946 -8.9586 35.65)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient4011"/> <linearGradient id="linearGradient1006" x1="24" x2="24" y1="16.501" y2="31.576" gradientUnits="userSpaceOnUse"> <stop stop-color="#ed5353" offset="0"/> <stop stop-color="#c6262e" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g transform="matrix(.70833 0 0 .71428 1.3333 .7846)" stroke-width="1.4059"> <path d="m56 57.002a24 6.9986 0 1 1-48 0 24 6.9986 0 1 1 48 0z" fill="url(#radialGradient3300-8-3)" opacity=".2"/> <path d="m48 59.002a16 4.9989 0 1 1-32 0 16 4.9989 0 1 1 32 0z" fill="url(#radialGradient4192-6-5)" opacity=".4"/> </g> <path d="m24.001 3.5c-11.322 0-20.501 9.1788-20.501 20.5 0 11.322 9.1786 20.5 20.501 20.5 11.322 0 20.499-9.1783 20.499-20.5 0-11.321-9.1776-20.5-20.499-20.5z" fill="url(#linearGradient3932-9)"/> <g fill="none" stroke-linecap="round" stroke-linejoin="round"> <path d="m43.5 23.999c0 10.77-8.7311 19.501-19.5 19.501-10.77 0-19.5-8.7309-19.5-19.501 0-10.769 8.7306-19.499 19.5-19.499 10.769 0 19.5 8.7299 19.5 19.499z" color="#000000" stroke="url(#linearGradient3111-7)"/> <path d="m32.5 23.999c0-4.6946-3.8059-8.5003-8.4999-8.5003-4.6945 0-8.5001 3.8058-8.5001 8.5003 0 4.6944 3.8056 8.4997 8.5001 8.4997 4.694 0 8.4999-3.8053 8.4999-8.4997z" color="#000000" opacity=".5" stroke="url(#linearGradient3993-0-6-0-8-5)"/> <path d="m24 3.4997c-11.311 0-20.5 9.1888-20.5 20.5s9.1888 20.5 20.5 20.5c11.311 0 20.5-9.1888 20.5-20.5 0-11.311-9.1888-20.5-20.5-20.5z" color="#000000" opacity=".6" stroke="#555761"/> </g> <path d="m24 16.501c-4.1372 0-7.4982 3.361-7.4982 7.4982s3.361 7.4982 7.4982 7.4982 7.4982-3.361 7.4982-7.4982-3.361-7.4982-7.4982-7.4982z" fill="url(#linearGradient1006)" stroke="url(#linearGradient3039)" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.0036"/> <path d="m30.5 23.999c0 3.5896-2.9104 6.5-6.5 6.5-3.5898 0-6.5-2.9104-6.5-6.5 0-3.59 2.9102-6.5 6.5-6.5 3.5896 0 6.5 2.91 6.5 6.5z" color="#000000" fill="none" opacity=".5" stroke="url(#linearGradient3031)" stroke-linecap="round" stroke-linejoin="round"/> <path d="m28 21.999a4 4 0 1 1-8 0 4 4 0 1 1 8 0z" color="#000000" fill="url(#linearGradient3101)" opacity=".4"/> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/image-crop.svg������������������������������������0000644�0001750�0000144�00000007121�15104114162�023632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient4643" cx="6.7027" cy="73.616" r="7.2284" gradientTransform="matrix(3.0435 0 0 .76089 4.6003 -16.513)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient4428-9-7" x1="24.027" x2="24.027" y1="10.082" y2="45.969" gradientTransform="matrix(.91892 0 0 .91892 -.079284 1.735)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset="0"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient4494" x1="5.8016" x2="5.8016" y1="19.413" y2="1.4826" gradientTransform="matrix(-2,0,0,-2,47.5,48.5)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fad4a1" offset="0"/> <stop stop-color="#e6b481" offset="1"/> </linearGradient> <linearGradient id="linearGradient4428-9" x1="13.145" x2="13.145" y1="1.9194" y2="38.88" gradientTransform="matrix(.91892 0 0 .91892 .92072 2.2362)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset="0"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".99149"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient4706" x1="10" x2="10" y1="2" y2="20" gradientTransform="matrix(2 0 0 2 .5 -.5)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fad4a1" offset="0"/> <stop stop-color="#e6b481" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <path d="m47 39.5c0 3.0376-9.8497 5.5-22 5.5-12.15 0-22-2.4624-22-5.5 0-3.0376 9.8497-5.5 22-5.5 12.15 0 22 2.4624 22 5.5z" fill="url(#radialGradient4643)" opacity=".2"/> <path d="m9.5 2.5v30 6h6 30v-6h-30v-30z" color="#000000" fill="url(#linearGradient4706)"/> <g fill="none"> <path d="m9.5 2.5v36h6 30v-6h-30v-30z" color="#000000" opacity=".5" stroke="#a1550a"/> <path d="m45 33.5h-30" color="#000000" opacity=".5" stroke="#fff" stroke-linejoin="round"/> <path d="m15 3.5h-4.5v34.5" color="#000000" opacity=".5" stroke="url(#linearGradient4428-9)"/> </g> <g> <path d="m9 9.5h-6.5v6h6.5m7 0h16.5v30h6v-30-6h-22.5" color="#000000" fill="url(#linearGradient4494)"/> <path d="m9.5 9.5h-7v6h7m6 0h17v30h6v-30-6h-6-17" color="#000000" fill="none" opacity=".5" stroke="#a1550a"/> <path d="m3 10.499h6m7 0h22m-4.4649 34.501-0.07012-30" color="#000000" fill="none" opacity=".5" stroke="url(#linearGradient4428-9-7)" stroke-linejoin="round"/> </g> <path d="m12 9v1h3.5v-1h-3.5zm5 3v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm-17 1v1h3.5v-1h-3.5zm0 4v1h3.5v-1h-3.5zm20.5 2v1h3.5v-1h-3.5zm-20.5 2v1h3.5v-1h-3.5zm20.5 2v1h3.5v-1h-3.5zm-20.5 2v1h3.5v-1h-3.5zm20.5 2v1h3.5v-1h-3.5zm-20.5 2v1h3.5v-1h-3.5zm20.5 2v1h3.5v-1h-3.5zm-14.5 1.5v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm4 0v3.5h1v-3.5h-1zm2.5 2.5v1h3.5v-1h-3.5zm0 4v1h3.5v-1h-3.5z" fill="#a1550a" opacity=".3" style="font-variant-east_asian:normal;paint-order:normal"/> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-up.svg�����������������������������������������0000644�0001750�0000144�00000006171�15104114162�022642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient1438" cx="24.538" cy=".40011" r="17.171" gradientTransform="matrix(-3.7494e-16 -2.0467 1.5576 -2.8534e-16 2.767 66.933)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient1441" cx="11.319" cy="22.455" r="16.956" gradientTransform="matrix(1.8719e-16 -.84302 1.0202 2.2652e-16 .60644 42.586)" gradientUnits="userSpaceOnUse"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </radialGradient> <radialGradient id="radialGradient1444" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 1.6147e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Up</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>higher</rdf:li> <rdf:li>up</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> <rdf:li>></rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <g fill-rule="evenodd"> <path transform="matrix(1.2145 0 0 .59546 -6.1638 16.313)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient1444)" opacity=".29947"/> <path d="m14.492 38.5h17.978v-12.953h8.0305l-17.125-20.048-16.846 19.99 7.9685 0.066291-0.005304 12.944z" color="#000000" fill="url(#radialGradient1441)" stroke="#3a7304" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m7.5855 25.033h7.4103l0.066601 6.5618c5.6556-11 15.993-8.8444 16.594-15.628l-8.2898-9.5447-15.781 18.611z" color="#000000" fill="url(#radialGradient1438)" opacity=".50802"/> </g> <path d="m15.603 37.5h15.9v-12.993h6.809l-14.95-17.437-14.707 17.48 6.8204-0.022097 0.12769 12.972z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-top.svg����������������������������������������0000644�0001750�0000144�00000007335�15104114162�023023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient8650"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient1438" cx="33.261" cy="8.7985" r="17.171" gradientTransform="matrix(-3.7494e-16 -2.0467 1.5576 -2.8534e-16 2.767 66.933)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8650"/> <radialGradient id="radialGradient1441" cx="11.319" cy="22.455" r="16.956" gradientTransform="matrix(1.8719e-16 -.84302 1.0202 2.2652e-16 .60644 42.586)" gradientUnits="userSpaceOnUse"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </radialGradient> <radialGradient id="radialGradient1444" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 1.5137e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2310" cx="26.438" cy="7.6636" r="17.171" gradientTransform="matrix(-3.7494e-16 -2.0467 1.5576 -2.8534e-16 2.767 66.933)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8650"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Top</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>highest</rdf:li> <rdf:li>top</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> <rdf:li>></rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g fill-rule="evenodd"> <path transform="matrix(1.2145 0 0 .59546 -6.6942 16.666)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient1444)" opacity=".29947"/> <path d="m6.5 1.5v5.9962h15.125l-15.094 18.004 7.9688 0.0625v12.938h17.969v-12.938h8.0312l-15.375-18.066h15.373v-5.9962h-33.998z" color="#000000" fill="url(#radialGradient1441)" stroke="#3a7304" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m7.5855 25.033h7.4103l0.066601 6.5618c5.6556-11 8.922-5.4857 17.832-13.506 0 0-7.7838-10.119-8.8074-11.026l-1.4049-0.043576-15.096 18.014z" color="#000000" fill="url(#radialGradient1438)" opacity=".50802"/> </g> <path d="m15.603 37.5h15.9v-12.993h6.809l-14.502-17.027-0.89025 0.031966-14.265 17.038 6.8204-0.022097 0.12769 12.972z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> <rect x="7.4989" y="2.4954" width="32.012" height="4.0095" fill="none" opacity=".481" stroke="#fff"/> <rect x="6.8943" y="1.8613" width="33.234" height="5.3033" color="#000000" fill="url(#radialGradient2310)" fill-rule="evenodd" opacity=".52273"/> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-previous.svg�����������������������������������0000644�0001750�0000144�00000005761�15104114162�024076� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient8656" cx="25.076" cy="5.786" r="17.171" gradientTransform="matrix(-2.0467 -3.7494e-16 -2.8534e-16 1.5576 67.594 3.2753)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 6.7728e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2597" cx="22.292" cy="32.798" r="16.956" gradientTransform="matrix(-.84302 1.8719e-16 2.2652e-16 1.0202 43.576 1.2052)" gradientUnits="userSpaceOnUse"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Previous</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>previous</rdf:li> <rdf:li>left</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> <rdf:li><</rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <g fill-rule="evenodd"> <path transform="matrix(-1.2712 0 0 1.2712 56.195 -15.279)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" opacity=".29947"/> <path d="m39.49 15.497v16.994h-12.953v8.4825l-19.96-17 19.954-17.244v8.7725l12.959-0.005304z" color="#000000" fill="url(#radialGradient2597)" stroke="#3a7304" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m25.988 7.978v8.0565h12.942v8.8845c-16.75-6.25-16.134 5.2947-31.384-0.95529l18.441-15.986z" color="#000000" fill="url(#radialGradient8656)" opacity=".50802"/> </g> <path d="m38.476 16.541v14.922h-12.985v7.3014l-17.322-14.796 17.338-14.905v7.4826l12.969-0.004897z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </svg> ���������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-next.svg���������������������������������������0000644�0001750�0000144�00000005762�15104114162�023201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient8656" cx="19.701" cy="2.8969" r="17.171" gradientTransform="matrix(2.0467 -3.7494e-16 2.8534e-16 1.5576 -19.518 3.4521)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 2.511e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2597" cx="22.292" cy="32.798" r="16.956" gradientTransform="matrix(.84302 1.8719e-16 -2.2652e-16 1.0202 4.4993 1.382)" gradientUnits="userSpaceOnUse"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Next</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>next</rdf:li> <rdf:li>right</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> <rdf:li>></rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <g fill-rule="evenodd"> <path transform="matrix(1.2712 0 0 1.2712 -8.1194 -15.102)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" opacity=".29947"/> <path d="m8.5542 15.517v16.994h12.984v8.545l19.96-16.906-20.079-17.025v8.3975l-12.865-0.005304z" color="#000000" fill="url(#radialGradient2597)" stroke="#3a7304" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m21.962 8.2485v7.8065h-12.817v9.0407c17.75 2 16.634-7.4553 31.384-0.95529l-18.566-15.892z" color="#000000" fill="url(#radialGradient8656)" opacity=".50802"/> </g> <path d="m9.5377 16.562v14.984h12.985v7.3952l17.478-14.796-17.494-14.78v7.2014l-12.969-0.004897z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </svg> ��������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-jump.svg���������������������������������������0000644�0001750�0000144�00000006125�15104114162�023170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 -1.1602e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2167" x1="22" x2="19.377" y1="16.642" y2="12.448" gradientTransform="matrix(1.1719 0 0 1.1719 -4.6746 -1.4279)" gradientUnits="userSpaceOnUse"> <stop stop-color="#519e07" offset="0"/> <stop stop-color="#6cc813" offset="1"/> </linearGradient> <linearGradient id="linearGradient2193" x1="14.296" x2="10.022" y1="15.231" y2="23.105" gradientTransform="matrix(1.1719 0 0 1.1719 -4.6746 -1.4279)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2708" x1="12.106" x2="6.1056" y1="24.59" y2="29.84" gradientUnits="userSpaceOnUse"> <stop stop-color="#3a7304" offset="0"/> <stop stop-color="#3a7304" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Jump</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>jump</rdf:li> <rdf:li>seek</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path transform="matrix(1.4897 0 0 -1.0013 -12.268 72.071)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" fill-rule="evenodd" opacity=".14118"/> <path d="m4.3921 35.164c-1.3211-40.026 33.709-33.369 32.537-12.567h9.3754l-14.649 11.719-15.235-11.719h9.6684c0.58596-14.063-21.433-18.49-21.696 12.567z" color="#000000" display="block" fill="url(#linearGradient2167)" stroke="url(#linearGradient2708)"/> <path d="m4.3609 33.777c0.094796-36.075 33.647-31.736 31.468-10.198h7.6045l-11.815 9.3988-12.231-9.3988h7.6794c1.0388-18.071-23.868-18.873-22.706 10.198z" color="#000000" display="block" fill="none" opacity=".41765" stroke="url(#linearGradient2193)"/> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-down.svg���������������������������������������0000644�0001750�0000144�00000006410�15104114162�023161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient1444" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 1.6147e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient1469" cx="35.293" cy="20.494" r="16.956" gradientTransform="matrix(1.8719e-16 -.84302 1.0202 2.2652e-16 .60644 42.586)" gradientUnits="userSpaceOnUse"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </radialGradient> <radialGradient id="radialGradient1471" cx="15.987" cy="1.535" r="17.171" gradientTransform="matrix(3.7494e-16 -2.0467 -1.5576 -2.8534e-16 44.116 66.933)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go Down</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>lower</rdf:li> <rdf:li>down</rdf:li> <rdf:li>arrow</rdf:li> <rdf:li>pointer</rdf:li> <rdf:li>></rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path transform="matrix(1.2145 0 0 .59546 -6.1638 16.313)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient1444)" fill-rule="evenodd" opacity=".20455"/> <g transform="matrix(-1 0 0 -1 47.029 43.999)"> <path d="m14.519 38.5 18.005-0.003906v-12.992l7.9954-0.007812-17.145-19.997-16.846 19.998 7.9959 0.00379-0.005304 12.999z" color="#000000" fill="url(#radialGradient1469)" fill-rule="evenodd" stroke="#3a7304" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m39.43 24.993-7.4064 0.011719 0.002681 12.993-15.379-0.009153c0.76992-18.341 10.723-10.993 15.382-21.647l7.4006 8.6515z" color="#000000" fill="url(#radialGradient1471)" fill-rule="evenodd" opacity=".50802"/> <path d="m15.521 37.496 16.001 0.003906v-12.993l6.8168-0.015625-14.954-17.453-14.707 17.457 6.8399 0.005247 0.002686 12.995z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/go-bottom.svg�������������������������������������0000644�0001750�0000144�00000007714�15104114162�023526� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2309"> <stop stop-color="#73d216" offset="0"/> <stop stop-color="#4e9a06" offset="1"/> </linearGradient> <radialGradient id="radialGradient7994" cx="16.621" cy="-29.735" r="16.5" gradientTransform="matrix(-2.1932 -.00053722 -.00026268 .91667 44.5 59.3)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8650"/> <linearGradient id="linearGradient8650"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient1441" cx="34.664" cy="20.321" r="16.956" gradientTransform="matrix(-1.8719e-16 .84302 -1.0202 -2.2652e-16 46.394 1.4139)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2309"/> <radialGradient id="radialGradient1444" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 -1.5178e-15 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient10491" cx="15.987" cy="1.535" r="17.171" gradientTransform="matrix(-3.7494e-16 2.0467 1.5576 2.8534e-16 2.913 -22.934)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient8650"/> <radialGradient id="radialGradient11961" cx="13.905" cy="36.436" r="16.506" gradientTransform="matrix(.99967 -.0047829 .0037853 .79167 -.22186 10.414)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2309"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Go to Bottom</dc:title> <dc:subject> <rdf:Bag> <rdf:li>go</rdf:li> <rdf:li>bottom</rdf:li> </rdf:Bag> </dc:subject> <dc:contributor> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g fill-rule="evenodd"> <path transform="matrix(1.2145 0 0 .59546 -6.1638 20.188)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient1444)" opacity=".20455"/> <path d="m40.5 42.5v-5.9962h-15.125l15.094-18.004-7.9688-0.0625v-12.938h-17.969v12.938h-8.0312l15.375 18.066h-15.373v5.9962h33.998z" color="#000000" fill="url(#radialGradient1441)" stroke="#3b7502" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m7.5987 19.006 7.4064-0.011719-0.002681-12.993 15.379 0.009153c-0.76992 18.341-10.723 10.993-15.382 21.647l-7.4006-8.6515z" color="#000000" fill="url(#radialGradient10491)" opacity=".50802"/> </g> <path d="m31.53 6.5h-16.01v12.993h-6.8311l14.458 17.005 0.91235 0.012228 14.22-16.972-6.7983-0.066291 0.049092-12.972z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> <rect x="7.4998" y="37.5" width="32.002" height="4.0095" fill="url(#radialGradient11961)" fill-rule="evenodd" opacity=".481" stroke="#fff"/> <path d="m40 40.786c-12.061-4.0532-29.403 1.2991-32.978-1.2515l0.015573-2.5066 32.962-0.023208v3.7812z" fill="url(#radialGradient7994)" fill-rule="evenodd" opacity=".17614"/> </svg> ����������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-undo.svg�������������������������������������0000644�0001750�0000144�00000007042�15104114162�023501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 -6.2273e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient1764" x1="17.061" x2="12.624" y1="11.395" y2="12.584" gradientTransform="matrix(-1.8135e-16 -1.1719 -1.1719 1.8135e-16 46.174 54.101)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2314" x1="26.5" x2="26.25" y1="34.25" y2="43.572" gradientUnits="userSpaceOnUse"> <stop stop-color="#edd400" offset="0"/> <stop stop-color="#edd400" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2322" x1="26.5" x2="26.25" y1="34.25" y2="43.572" gradientUnits="userSpaceOnUse"> <stop stop-color="#c4a000" offset="0"/> <stop stop-color="#c4a000" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient2332" cx="15.094" cy="13.283" r="10.165" gradientTransform="matrix(2.496 -1.1519e-16 1.0618e-16 2.3007 -25.124 -17.826)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Edit Undo</dc:title> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>undo</rdf:li> <rdf:li>revert</rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path transform="matrix(-1.4897 0 0 -1.0013 60.604 75.313)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" fill-rule="evenodd" opacity=".14118"/> <path d="m9.5824 45.034c40.026 1.3211 33.7-32.741 12.88-32.537v-9.3754l-16.648 14.587 16.648 15.298v-9.6684c14.063-0.58597 18.178 21.433-12.88 21.696z" color="#000000" display="block" fill="url(#linearGradient2314)" stroke="url(#linearGradient2322)"/> <path d="m31.032 39.316c11.723-6.0796 8.1878-26.228-9.5836-25.766v-8.0991l-14.048 12.264 14.048 12.944v-8.2776c14.84-0.34827 14.16 12.758 9.5836 16.935z" color="#000000" display="block" fill="none" opacity=".69886" stroke="url(#linearGradient1764)" stroke-miterlimit="10"/> <path d="m6.6291 17.683 5.6569 5.3917c6.2756-0.17678 3.4471-6.364 14.672-9.4576l-4.9497-0.61872-0.088389-8.6621-15.291 13.347z" color="#000000" fill="url(#radialGradient2332)" fill-rule="evenodd" opacity=".51136"/> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-select-all.svg�������������������������������0000644�0001750�0000144�00000010366�15104114162�024564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2240" x1="20.794" x2="35.596" y1="18.379" y2="39.6" gradientTransform="matrix(1.3427 0 0 1.2354 -8.2196 -7.5495)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f8f8f7" offset="0"/> <stop stop-color="#e8e8e8" offset=".59929"/> <stop stop-color="#e2e2de" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Select All</dc:title> <dc:date/> <dc:creator> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>select</rdf:li> <rdf:li>all</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.023828 0 0 .014488 44.944 43.779)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <rect x="4.5016" y=".52463" width="38.997" height="45.003" rx=".56651" ry=".56651" fill="url(#linearGradient2240)" fill-rule="evenodd" stroke="#888a85"/> <g fill="#999" fill-rule="evenodd"> <rect x="22" y="9.0277" width="14" height="2" color="black"/> <rect x="22" y="15.028" width="12" height="2" color="black"/> <rect x="9" y="21.028" width="22.972" height="2" color="black"/> <rect x="9" y="27.028" width="27" height="2" color="black"/> <rect x="9" y="33.028" width="17" height="2" color="black"/> </g> <rect x="5.4997" y="1.5274" width="37" height="43.022" rx="0" ry="0" fill="none" stroke="#fff"/> <rect x="9" y="9.0277" width="11" height="10" fill="#999"/> <g fill="#729fcf"> <rect x="8" y="13.028" width="29" height="6" color="black" opacity=".5"/> <rect x="8" y="7.0277" width="31" height="6" color="black" opacity=".5"/> <rect x="8" y="19.028" width="25" height="6" color="black" opacity=".5"/> <rect x="8" y="25.028" width="29" height="6" color="black" opacity=".5"/> <rect x="8" y="31.028" width="19" height="6" color="black" opacity=".5"/> </g> <g> <rect x="28" y="31.028" width="1" height="7" color="black"/> <rect x="27" y="30.028" width="1" height="1" color="black"/> <rect x="29" y="30.028" width="1" height="1" color="black"/> <rect x="29" y="38.028" width="1" height="1" color="black"/> <rect x="27" y="38.028" width="1" height="1" color="black"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-redo.svg�������������������������������������0000644�0001750�0000144�00000007131�15104114162�023464� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 -5.8253e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient1764" x1="17.061" x2="12.624" y1="11.395" y2="12.584" gradientTransform="matrix(1.8135e-16 -1.1719 1.1719 1.8135e-16 1.7828 54.101)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4997" cx="16.564" cy="11.132" r="19.062" gradientTransform="matrix(-.012901 1.6852 1.7131 .013115 -1.0415 -10.116)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2238" x1="33" x2="31.5" y1="35.75" y2="42.5" gradientUnits="userSpaceOnUse"> <stop stop-color="#788600" offset="0"/> <stop stop-color="#788600" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2246" x1="33" x2="31.5" y1="35.75" y2="42.5" gradientUnits="userSpaceOnUse"> <stop stop-color="#99b00b" offset="0"/> <stop stop-color="#99b00b" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:title>Edit Redo</dc:title> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>redo</rdf:li> <rdf:li>again</rdf:li> <rdf:li>reapply</rdf:li> </rdf:Bag> </dc:subject> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g> <path transform="matrix(1.4897 0 0 -1.0013 -12.647 75.313)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" fill-rule="evenodd" opacity=".14118"/> <path d="m38.375 45.034c-40.026 1.3211-33.7-32.741-12.88-32.537v-9.3754l16.648 14.587-16.648 15.298v-9.6684c-14.063-0.58597-18.178 21.433 12.88 21.696z" color="#000000" display="block" fill="url(#linearGradient2246)" stroke="url(#linearGradient2238)"/> <path d="m16.925 39.316c-11.723-6.0796-8.1878-26.228 9.5836-25.766v-8.0991l14.048 12.264-14.048 12.944v-8.2776c-14.84-0.34827-14.16 12.758-9.5836 16.935z" color="#000000" display="block" fill="none" opacity=".69886" stroke="url(#linearGradient1764)" stroke-miterlimit="10"/> <path d="m26.037 4.5686 10.687 10.23c-6.9375-1e-6 -4.6867 8.9372-10.812 11.812l0.0625-3.6668c-15.188-0.0625-14.312 15.5-3.25 19.75-19.088-4.8819-16.437-29.312 3.1875-29.812l0.125-8.3125z" color="#000000" fill="url(#radialGradient4997)" opacity=".49432"/> </g> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-paste.svg������������������������������������0000644�0001750�0000144�00000022101�15104114162�023641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient15234"> <stop stop-color="#97978a" offset="0"/> <stop stop-color="#c2c2b9" offset=".5"/> <stop stop-color="#7d7d6f" offset="1"/> </linearGradient> <linearGradient id="linearGradient14490" x1="6.1072" x2="33.857" y1="10.451" y2="37.88" gradientUnits="userSpaceOnUse"> <stop stop-color="#c68827" offset="0"/> <stop stop-color="#89601f" offset="1"/> </linearGradient> <linearGradient id="linearGradient15224" x1="22.308" x2="35.785" y1="18.992" y2="39.498" gradientTransform="matrix(1.0657 0 0 .9876 -1.5644 .074873)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0f0ef" offset="0"/> <stop stop-color="#e8e8e8" offset=".59929"/> <stop stop-color="#fff" offset=".82759"/> <stop stop-color="#d8d8d3" offset="1"/> </linearGradient> <linearGradient id="linearGradient15240" x1="25.405" x2="25.464" y1="3.818" y2="9.3234" gradientTransform="matrix(1.0526 0 0 1 -1.7895 0)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient15234"/> <linearGradient id="linearGradient2222" x1="36.812" x2="39.062" y1="39.156" y2="42.062" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2230" x1="35.997" x2="33.665" y1="40.458" y2="37.771" gradientUnits="userSpaceOnUse"> <stop stop-color="#7c7c7c" offset="0"/> <stop stop-color="#b8b8b8" offset="1"/> </linearGradient> <linearGradient id="linearGradient2245" x1="25.683" x2="25.692" y1="12.172" y2="-.20294" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2257" x1="33.396" x2="34.17" y1="36.921" y2="38.07" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2265" x1="26.076" x2="30.811" y1="26.697" y2="42.007" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2283" x1="25.405" x2="25.405" y1="3.818" y2="6.4811" gradientTransform="matrix(.53874 0 0 .51181 10.801 -.58264)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient15234"/> <linearGradient id="linearGradient2287" x1="25.405" x2="25.464" y1="3.818" y2="9.3234" gradientTransform="matrix(1.0052 0 0 .88393 -.62792 .84375)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient15234"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Edit Paste</dc:title> <dc:date>2005-10-10</dc:date> <dc:creator> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>paste</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.023252 0 0 .014857 44.806 43.06)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g fill-rule="evenodd"> <rect x="4.4643" y="4.5" width="39.036" height="41.045" rx="1.3879" ry="1.3879" fill="url(#linearGradient14490)" stroke="#714c16"/> <rect x="8.5323" y="6.5295" width="30.952" height="35.977" rx=".56651" ry=".56651" fill="url(#linearGradient15224)" stroke="#888a85"/> <rect x="18" width="12" height="4" rx=".98388" ry=".98388" fill="#5c5c5c"/> </g> <rect x="9.5171" y="7.4666" width="29.014" height="34.041" rx="0" ry="0" fill="none" stroke="url(#linearGradient2265)"/> <rect x="5.4393" y="5.4308" width="37.086" height="39.093" rx=".4788" ry=".4788" fill="none" stroke="#c68827"/> <g fill-rule="evenodd"> <rect x="14.791" y="4.4723" width="18.947" height="7" rx="1.3879" ry="1.3879" opacity=".10795" stroke="#000"/> <rect x="14.526" y="3.5" width="18.947" height="7" rx="1.3879" ry="1.3879" fill="url(#linearGradient15240)" stroke="#5c5c5c"/> <rect x="19.151" y="1.2087" width="9.6974" height="3.5826" rx=".32544" ry=".32544" fill="url(#linearGradient2283)"/> <rect x="14.953" y="3.9375" width="18.094" height="6.1875" rx="1.0129" ry="1.0129" fill="url(#linearGradient2287)"/> <path d="m39.018 36.25 0.044194 5.8125-8.5-0.044194 8.4558-5.7683z" color="#000000" fill="url(#linearGradient2222)" opacity=".48864"/> <path d="m30.059 42.087c1.7911 0.16765 8.9897-4.3696 9.4808-8.388-1.5633 2.4231-4.955 1.9686-9.0637 2.1276 0 0 0.39537 5.7604-0.41713 6.2604z" color="#000000" fill="url(#linearGradient2230)" stroke="#868a84"/> </g> <path d="m19.469 1.4688c-0.002096 0.0020956 0.001664 0.028784 0 0.03125-0.00117 0.002776-0.030634-0.0030243-0.03125 0v2.875c0 0.0064229 0.02891 0.025698 0.03125 0.03125 0.002466 0.0016635-0.002776 0.03008 0 0.03125h-3.5312c-0.01776 0-0.045215-0.0017449-0.0625 0-0.034032 0.0051713-0.093546 0.019776-0.125 0.03125-0.13817 0.058246-0.26767 0.19902-0.3125 0.34375-0.010509 0.041035 0 0.11185 0 0.15625v4.1562c0 0.01776-0.001745 0.045215 0 0.0625 0.005171 0.034032 0.019776 0.093546 0.03125 0.125 0.009708 0.023028 0.018426 0.0726 0.03125 0.09375 0.0046 0.00682 0.026336 0.02467 0.03125 0.03125 0.020874 0.025314 0.068436 0.072876 0.09375 0.09375 0.013159 0.0098289 0.0484 0.0227 0.0625 0.03125 0.014538 0.0078781 0.047148 0.024778 0.0625 0.03125 0.031454 0.011474 0.090968 0.026079 0.125 0.03125 0.017285 0.0017449 0.04474 0 0.0625 0h16.125c0.01776 0 0.045215 0.0017449 0.0625 0 0.034032-0.0051713 0.093546-0.019776 0.125-0.03125 0.015352-0.0064718 0.047962-0.023372 0.0625-0.03125 0.0141-0.0085496 0.049341-0.021421 0.0625-0.03125 0.025314-0.020874 0.072876-0.068436 0.09375-0.09375 0.004914-0.0065795 0.02665-0.02443 0.03125-0.03125 0.012824-0.02115 0.021542-0.070722 0.03125-0.09375 0.011474-0.031454 0.026079-0.090968 0.03125-0.125 0.001745-0.017285 0-0.04474 0-0.0625v-4.1562c0-0.044401 0.010509-0.11522 0-0.15625-0.044828-0.14473-0.17433-0.2855-0.3125-0.34375-0.031454-0.011474-0.090968-0.026079-0.125-0.03125-0.017285-0.0017449-0.04474 0-0.0625 0h-3.5312c0.002776-0.0011702-0.002466-0.029586 0-0.03125 0.002341-0.0055519 0.03125-0.024827 0.03125-0.03125v-2.875c-6.16e-4 -0.0030243-0.03008 0.002776-0.03125 0-0.001664-0.0024664 0.002096-0.029154 0-0.03125-0.002776-0.0011702-0.028226 6.157e-4 -0.03125 0h-9c-0.003024 6.157e-4 -0.028474-0.0011702-0.03125 0z" fill="none" opacity=".31682" stroke="url(#linearGradient2245)"/> <path d="m31.51 40.687c1.3698-0.68383 4.5293-2.601 5.8286-4.482-1.7925 0.37648-2.9909 0.58957-5.7276 0.69548 0 0 0.086561 3.0116-0.10106 3.7866z" color="#000000" fill="none" opacity=".36932" stroke="url(#linearGradient2257)"/> <g fill-rule="evenodd"> <rect x="14" y="15" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="14" y="19" width="20" height="2" color="#000000" opacity=".17045"/> <rect x="14" y="23" width="18" height="2" color="#000000" opacity=".17045"/> <rect x="14" y="27" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="14" y="31" width="13" height="2" color="#000000" opacity=".17045"/> </g> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-find.svg�������������������������������������0000644�0001750�0000144�00000026735�15104114162�023466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient15656" cx="8.8244" cy="3.7561" r="37.752" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a3a3a3" offset="0"/> <stop stop-color="#4c4c4c" offset="1"/> </radialGradient> <radialGradient id="radialGradient15658" cx="33.967" cy="35.737" r="86.708" gradientTransform="scale(.96049 1.0411)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#bbb" offset="1"/> </radialGradient> <radialGradient id="radialGradient15668" cx="8.1436" cy="7.2679" r="38.159" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#f8f8f8" offset="1"/> </radialGradient> <radialGradient id="radialGradient2283" cx="20.892" cy="114.57" r="5.256" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2285" cx="20.892" cy="64.568" r="5.257" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient1527" cx="24.13" cy="37.968" r="16.529" gradientTransform="matrix(1 0 0 .23797 -8.8211e-16 28.933)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient1529" x1="27.366" x2="31.336" y1="26.58" y2="30.558" gradientUnits="userSpaceOnUse"> <stop stop-color="#8a8a8a" offset="0"/> <stop stop-color="#484848" offset="1"/> </linearGradient> <linearGradient id="linearGradient1531" x1="30.656" x2="33.219" y1="34" y2="31.062" gradientTransform="matrix(1.3346 0 0 1.2913 -6.9738 -7.4607)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7d7d7d" offset="0"/> <stop stop-color="#b1b1b1" offset=".5"/> <stop stop-color="#686868" offset="1"/> </linearGradient> <linearGradient id="linearGradient1533" x1="18.293" x2="17.501" y1="13.602" y2="25.743" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".21905" offset=".5"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <radialGradient id="radialGradient1537" cx="18.241" cy="21.818" r="8.3085" gradientUnits="userSpaceOnUse"> <stop stop-color="#729fcf" stop-opacity=".20784" offset="0"/> <stop stop-color="#729fcf" stop-opacity=".67619" offset="1"/> </radialGradient> <radialGradient id="radialGradient1539" cx="15.414" cy="13.078" r="6.6562" gradientTransform="matrix(2.593 -7.7469e-24 -5.7144e-24 2.2521 -25.06 -18.941)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".24762" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Edit Find</dc:title> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>find</rdf:li> <rdf:li>locate</rdf:li> <rdf:li>search</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:creator> <cc:Agent> <dc:title>Steven Garrity</dc:title> </cc:Agent> </dc:creator> <dc:source/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.021652 0 0 .014857 43.008 42.685)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g> <rect x="6.6036" y="3.6464" width="34.875" height="40.92" ry="1.149" color="#000000" display="block" fill="url(#radialGradient15658)" stroke="url(#radialGradient15656)" stroke-linecap="round" stroke-linejoin="round"/> <rect x="7.6661" y="4.5839" width="32.776" height="38.946" rx=".14905" ry=".14905" color="#000000" display="block" fill="none" stroke="url(#radialGradient15668)" stroke-linecap="round" stroke-linejoin="round"/> <g transform="translate(.64645 -.037989)"> <g transform="matrix(.2297 0 0 .2297 4.9671 4.245)" fill="#fff"> <path d="m23.428 113.07c0 1.973-1.6 3.572-3.573 3.572-1.974 0-3.573-1.6-3.573-3.572 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> <path d="m23.428 63.07c0 1.973-1.6 3.573-3.573 3.573-1.974 0-3.573-1.6-3.573-3.573 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> </g> <path d="m9.995 29.952c0 0.4532-0.36752 0.8205-0.82073 0.8205-0.45343 0-0.82073-0.36752-0.82073-0.8205 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2283)"/> <path d="m9.995 18.467c0 0.4532-0.36752 0.82073-0.82073 0.82073-0.45343 0-0.82073-0.36752-0.82073-0.82073 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2285)"/> </g> <path d="m11.506 5.4943v37.907" fill="none" stroke="#000" stroke-opacity=".017544" stroke-width=".98855"/> <path d="m12.5 5.0205v38.018" fill="none" stroke="#fff" stroke-opacity=".20468"/> <g transform="matrix(.90909 0 0 1 2.3636 0)" fill="#9b9b9b" fill-opacity=".54971"> <rect x="15" y="9" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="11" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="13" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="15" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="17" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="19" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="21" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="23" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="25" width="9.9" height="1" rx=".068204" ry=".065391" color="#000000" display="block"/> <rect x="15" y="29" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="31" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="33" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="35" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="37" width="15.4" height="1" rx=".1061" ry=".065391" color="#000000" display="block"/> </g> <g transform="matrix(.66538 0 0 .66538 15.986 17.908)"> <g fill-rule="evenodd"> <path transform="matrix(1.4464 0 0 1.52 -10.975 -17.752)" d="m40.659 37.968a16.529 3.9333 0 1 1-33.057 0 16.529 3.9333 0 1 1 33.057 0z" color="#000000" fill="url(#radialGradient1527)" opacity=".17112"/> <path d="m18.628 3.1436c-8.1391 0-14.745 6.6057-14.745 14.745 0 8.1391 6.6057 14.745 14.745 14.745 3.4796 0 6.551-1.3844 9.0737-3.4026-0.20538 1.0069-0.078035 2.0354 0.75614 2.7599l10.964 9.5274c1.2334 1.0713 3.0875 0.93096 4.1588-0.30246 1.0713-1.2334 0.93096-3.0875-0.30246-4.1588l-10.964-9.5274c-0.67153-0.58328-1.4929-0.75597-2.3062-0.64272 1.9867-2.5124 3.3648-5.5488 3.3648-8.9981 0-8.1391-6.6057-14.745-14.745-14.745zm-0.075615 1.2262c7.6395 0 13.292 4.789 13.292 13.292 0 8.6751-5.8167 13.292-13.292 13.292-7.3029 0-13.292-5.4781-13.292-13.292 0-7.9841 5.8246-13.292 13.292-13.292z" color="#000000" fill="#dcdcdc" stroke="url(#linearGradient1529)" stroke-linecap="round" stroke-miterlimit="10" stroke-width="3.0058"/> <path d="m18.603 3.0804c-8.1654 0-14.792 6.627-14.792 14.792 0 8.1654 6.627 14.792 14.792 14.792 3.4908 0 6.5722-1.3889 9.1031-3.4136-0.20604 1.0101-0.078288 2.0419 0.75859 2.7688l11 9.5582c1.2374 1.0748 3.0974 0.93397 4.1722-0.30344 1.0748-1.2374 0.93397-3.0974-0.30344-4.1722l-11-9.5582c-0.6737-0.58516-1.4977-0.75841-2.3137-0.6448 1.9931-2.5205 3.3757-5.5667 3.3757-9.0272 0-8.1654-6.627-14.792-14.792-14.792zm-0.075859 3.1861c6.2811 2e-7 11.379 5.0977 11.379 11.379s-5.0977 11.379-11.379 11.379-11.379-5.0977-11.379-11.379c2e-7 -6.2811 5.0977-11.379 11.379-11.379z" color="#000000" fill="#dcdcdc"/> <path d="m39.507 41.578c-0.47867-2.2732 1.3973-4.8114 3.5841-4.7884l-10.76-9.2581c-2.9448-0.056706-4.2695 2.2726-3.7768 4.5999l10.953 9.4466z" color="#000000" fill="url(#linearGradient1531)"/> </g> <g stroke-linecap="round" stroke-miterlimit="10"> <path transform="matrix(1.2457 0 0 1.2457 -3.4253 -6.177)" d="m28.549 18.92a11.049 11.049 0 1 1-22.097 0 11.049 11.049 0 1 1 22.097 0z" color="#000000" fill="none" stroke="url(#linearGradient1533)" stroke-width="1.2064"/> <rect transform="matrix(.75299 .65804 -.6489 .76087 0 0)" x="40.373" y=".14086" width="19.048" height="4.4405" rx="3.2112" ry="2.8374" color="#000000" fill="none" opacity=".43316" stroke="#fff" stroke-width="1.503"/> <path transform="matrix(1.3986 0 0 1.3986 -6.2243 -8.299)" d="m25.898 18.478a8.3085 8.3085 0 1 1-16.617 0 8.3085 8.3085 0 1 1 16.617 0z" color="#000000" fill="url(#radialGradient1537)" fill-rule="evenodd" stroke="#3063a3" stroke-width="1.0746"/> </g> <path d="m18.157 7.3967c-5.2076 0-9.4245 4.217-9.4245 9.4245 0 1.504 0.42031 2.8878 1.0472 4.1499 1.2524 0.46161 2.5828 0.77568 3.9948 0.77568 6.171 0 11.099-4.8616 11.48-10.937-1.731-2.0455-4.21-3.413-7.0975-3.413z" color="#000000" fill="url(#radialGradient1539)" fill-rule="evenodd" opacity=".83422"/> </g> </g> </svg> �����������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-find-replace.svg�����������������������������0000644�0001750�0000144�00000036246�15104114162�025075� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient15656" cx="8.8244" cy="3.7561" r="37.752" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a3a3a3" offset="0"/> <stop stop-color="#4c4c4c" offset="1"/> </radialGradient> <radialGradient id="radialGradient15658" cx="33.967" cy="35.737" r="86.708" gradientTransform="scale(.96049 1.0411)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#bbb" offset="1"/> </radialGradient> <radialGradient id="radialGradient15668" cx="8.1436" cy="7.2679" r="38.159" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#f8f8f8" offset="1"/> </radialGradient> <radialGradient id="radialGradient2283" cx="20.892" cy="114.57" r="5.256" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2285" cx="20.892" cy="64.568" r="5.257" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2504" cx="24.13" cy="37.968" r="16.529" gradientTransform="matrix(1 0 0 .23797 -1.5912e-15 28.933)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2552" cx="23.562" cy="40.438" r="19.562" gradientTransform="matrix(1 0 0 .34824 -2.3965e-14 26.355)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2554" x1="48.906" x2="50.988" y1="17.376" y2="22.251" gradientTransform="translate(-5.6693 -3.313e-15)" gradientUnits="userSpaceOnUse"> <stop stop-color="#ffd1d1" offset="0"/> <stop stop-color="#ff1d1d" offset=".5"/> <stop stop-color="#6f0000" offset="1"/> </linearGradient> <linearGradient id="linearGradient2556" x1="46" x2="47.688" y1="19.812" y2="22.625" gradientTransform="translate(-5.6693 -3.313e-15)" gradientUnits="userSpaceOnUse"> <stop stop-color="#c1c1c1" offset="0"/> <stop stop-color="#acacac" offset="1"/> </linearGradient> <radialGradient id="radialGradient2558" cx="29.053" cy="27.641" r="3.2409" gradientTransform="matrix(2.9236 -1.2362e-16 8.5824e-17 2.0297 -61.555 -27.884)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e7e2b8" offset="0"/> <stop stop-color="#e7e2b8" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient2560" x1="25.719" x2="25.515" y1="31.047" y2="30.703" gradientTransform="translate(-5.8255 .125)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#c9c9c9" offset="1"/> </linearGradient> <linearGradient id="linearGradient2730" x1="27.366" x2="31.336" y1="26.58" y2="30.558" gradientTransform="matrix(-1 0 0 1 48.184 -6.2207e-15)" gradientUnits="userSpaceOnUse"> <stop stop-color="#8a8a8a" offset="0"/> <stop stop-color="#484848" offset="1"/> </linearGradient> <linearGradient id="linearGradient2732" x1="30.656" x2="33.219" y1="34" y2="31.062" gradientTransform="matrix(-1.3346 0 0 1.2913 55.158 -7.4607)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7d7d7d" offset="0"/> <stop stop-color="#b1b1b1" offset=".5"/> <stop stop-color="#686868" offset="1"/> </linearGradient> <linearGradient id="linearGradient2734" x1="18.293" x2="17.501" y1="13.602" y2="25.743" gradientTransform="matrix(-1 0 0 1 44.178 -7.0451e-16)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".21905" offset=".5"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <radialGradient id="radialGradient2736" cx="18.241" cy="21.818" r="8.3085" gradientTransform="matrix(-1 0 0 1 43.352 1.0324e-15)" gradientUnits="userSpaceOnUse"> <stop stop-color="#729fcf" stop-opacity=".20784" offset="0"/> <stop stop-color="#729fcf" stop-opacity=".67619" offset="1"/> </radialGradient> <radialGradient id="radialGradient2738" cx="15.414" cy="13.078" r="6.6562" gradientTransform="matrix(2.593 -7.7469e-24 -5.7144e-24 2.2521 -25.06 -18.941)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".24762" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Edit Find Replace</dc:title> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>find</rdf:li> <rdf:li>locate</rdf:li> <rdf:li>search</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:creator> <cc:Agent> <dc:title>Garrett LeSage</dc:title> </cc:Agent> </dc:creator> <dc:source/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner, Steven Garrity</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.021652 0 0 .014857 43.008 42.685)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g> <path d="m11.506 5.4943v37.907" fill="none" stroke="#000" stroke-opacity=".017544" stroke-width=".98855"/> <rect transform="matrix(1.0036 0 0 1.0019 -.12722 -.15353)" x="6.6036" y="3.6464" width="34.875" height="40.92" rx="1.1449" ry="1.1468" color="#000000" display="block" fill="url(#radialGradient15658)" stroke="url(#radialGradient15656)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".99724"/> <rect transform="matrix(1.0036 0 0 1.0019 -.12722 -.15353)" x="7.6661" y="4.5839" width="32.776" height="38.946" rx=".14852" ry=".14876" color="#000000" display="block" fill="none" stroke="url(#radialGradient15668)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".99724"/> <g transform="translate(.64645 -.037989)"> <g transform="matrix(.2297 0 0 .2297 4.9671 4.245)" fill="#fff"> <path d="m23.428 113.07c0 1.973-1.6 3.572-3.573 3.572-1.974 0-3.573-1.6-3.573-3.572 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> <path d="m23.428 63.07c0 1.973-1.6 3.573-3.573 3.573-1.974 0-3.573-1.6-3.573-3.573 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> </g> <path d="m9.995 29.952c0 0.4532-0.36752 0.8205-0.82073 0.8205-0.45343 0-0.82073-0.36752-0.82073-0.8205 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2283)"/> <path d="m9.995 18.467c0 0.4532-0.36752 0.82073-0.82073 0.82073-0.45343 0-0.82073-0.36752-0.82073-0.82073 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2285)"/> </g> <path d="m12.5 5.0205v38.018" fill="none" stroke="#fff" stroke-opacity=".20468"/> <g transform="matrix(.90909 0 0 1 2.3636 0)" fill="#9b9b9b" fill-opacity=".54971"> <rect x="15" y="9" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="11" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="13" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="15" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="17" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="19" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="21" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="23" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="25" width="9.9" height="1" rx=".068204" ry=".065391" color="#000000" display="block"/> <rect x="15" y="29" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="31" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="33" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="35" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="37" width="15.4" height="1" rx=".1061" ry=".065391" color="#000000" display="block"/> </g> <path transform="matrix(.96242 0 0 1.0114 -7.1308 -7.9032)" d="m40.659 37.968a16.529 3.9333 0 1 1-33.057 0 16.529 3.9333 0 1 1 33.057 0z" color="#000000" fill="url(#radialGradient2504)" fill-rule="evenodd" opacity=".17112"/> <g transform="translate(-1.0003 -.85088)"> <g fill-rule="evenodd"> <path transform="matrix(-.64328 0 0 .64328 31.498 4.8287)" d="m18.628 3.1436c-8.1391 0-14.745 6.6057-14.745 14.745 0 8.1391 6.6057 14.745 14.745 14.745 3.4796 0 6.551-1.3844 9.0737-3.4026-0.20538 1.0069-0.078035 2.0354 0.75614 2.7599l10.964 9.5274c1.2334 1.0713 3.0875 0.93096 4.1588-0.30246 1.0713-1.2334 0.93096-3.0875-0.30246-4.1588l-10.964-9.5274c-0.67153-0.58328-1.4929-0.75597-2.3062-0.64272 1.9867-2.5124 3.3648-5.5488 3.3648-8.9981 0-8.1391-6.6057-14.745-14.745-14.745zm-0.075615 1.2262c7.6395 0 13.292 4.789 13.292 13.292 0 8.6751-5.8167 13.292-13.292 13.292-7.3029 0-13.292-5.4781-13.292-13.292 0-7.9841 5.8246-13.292 13.292-13.292z" color="#000000" fill="#dcdcdc" stroke="url(#linearGradient2730)" stroke-linecap="round" stroke-miterlimit="10" stroke-width="3.1091"/> <path transform="matrix(-.64328 0 0 .64328 31.498 4.8287)" d="m18.603 3.0804c-8.1654 0-14.792 6.627-14.792 14.792 0 8.1654 6.627 14.792 14.792 14.792 3.4908 0 6.5722-1.3889 9.1031-3.4136-0.20604 1.0101-0.078288 2.0419 0.75859 2.7688l11 9.5582c1.2374 1.0748 3.0974 0.93397 4.1722-0.30344 1.0748-1.2374 0.93397-3.0974-0.30344-4.1722l-11-9.5582c-0.6737-0.58516-1.4977-0.75841-2.3137-0.6448 1.9931-2.5205 3.3757-5.5667 3.3757-9.0272 0-8.1654-6.627-14.792-14.792-14.792zm-0.075859 3.1861c6.2811 2e-7 11.379 5.0977 11.379 11.379s-5.0977 11.379-11.379 11.379-11.379-5.0977-11.379-11.379c2e-7 -6.2811 5.0977-11.379 11.379-11.379z" color="#000000" fill="#dcdcdc"/> <path transform="matrix(-.64328 0 0 .64328 31.498 4.8287)" d="m39.507 41.578c-0.47867-2.2732 1.3973-4.8114 3.5841-4.7884l-10.76-9.2581c-2.9448-0.056706-4.2695 2.2726-3.7768 4.5999l10.953 9.4466z" color="#000000" fill="url(#linearGradient2732)"/> </g> <g stroke-linecap="round" stroke-miterlimit="10"> <path transform="matrix(-.80136 0 0 .80136 33.701 .85516)" d="m28.549 18.92a11.049 11.049 0 1 1-22.097 0 11.049 11.049 0 1 1 22.097 0z" color="#000000" fill="none" stroke="url(#linearGradient2734)" stroke-width="1.2479"/> <rect transform="matrix(-.48438 .4233 .41742 .48945 31.498 4.8287)" x="40.373" y=".14086" width="19.048" height="4.4405" rx="3.3215" ry="2.9349" color="#000000" fill="none" opacity=".43316" stroke="#fff" stroke-width="1.5546"/> <path transform="matrix(-.8997 0 0 .8997 35.502 -.50983)" d="m25.898 18.478a8.3085 8.3085 0 1 1-16.617 0 8.3085 8.3085 0 1 1 16.617 0z" color="#000000" fill="url(#radialGradient2736)" fill-rule="evenodd" stroke="#3063a3" stroke-width="1.1115"/> </g> <path transform="matrix(.64328 0 0 .64328 7.8559 4.8287)" d="m18.157 7.3967c-5.2076 0-9.4245 4.217-9.4245 9.4245 0 1.504 0.42031 2.8878 1.0472 4.1499 1.2524 0.46161 2.5828 0.77568 3.9948 0.77568 6.171 0 11.099-4.8616 11.48-10.937-1.731-2.0455-4.21-3.413-7.0975-3.413z" color="#000000" fill="url(#radialGradient2738)" fill-rule="evenodd" opacity=".83422"/> </g> <path transform="matrix(.61661 0 0 .29358 12.738 29.128)" d="m43.125 40.438a19.562 6.8125 0 1 1-39.125 0 19.562 6.8125 0 1 1 39.125 0z" color="#000000" fill="url(#radialGradient2552)" fill-rule="evenodd" opacity=".2"/> <g transform="matrix(1.0337 -.27698 .27698 1.0337 16.068 -14.548)" fill-rule="evenodd"> <g> <path transform="translate(-29.755 19)" d="m17.341 32.5 5.625-5.625 20.094-9.75c3.25-1.25 5.1875 3.375 2.3125 5l-20.031 9.375-8 1z" color="#000000" fill="#cb9022" stroke="#5c410c" stroke-width=".93444"/> <path transform="translate(-29.755 19)" d="m38.331 20s1.4375 0.09375 2 1.3438c0.57949 1.2878 0 2.6562 0 2.6562l5.0312-2.4688s1.452-0.88137 0.65625-2.8438c-0.78491-1.9356-2.6875-1.1562-2.6875-1.1562l-5 2.4688z" color="#000000" fill="url(#linearGradient2554)"/> <path transform="translate(-29.755 19)" d="m38.331 20s1.4375 0.09375 2 1.3438c0.57949 1.2878 0 2.6562 0 2.6562l2-1s0.82703-1.3189 0.21875-2.6875c-0.625-1.4062-2.2188-1.3125-2.2188-1.3125l-2 1z" color="#000000" fill="url(#linearGradient2556)"/> <path transform="translate(-29.755 19)" d="m18.768 31.781 4.5-4.5c1.5 0.8125 2.2812 2.1562 1.875 3.7188l-6.375 0.78125z" color="#000000" fill="url(#radialGradient2558)"/> <path transform="translate(-29.755 19)" d="m20.112 30.375-1.625 1.5938 2.3438-0.3125c0.21875-0.71875-0.1875-1.0625-0.71875-1.2812z" color="#000000" fill="url(#linearGradient2560)"/> </g> <path transform="translate(-29.755 19)" d="m23.268 27.25 1.5625 1.25 15.387-7.3187c-0.44443-0.85604-1.2418-1.0846-1.9034-1.1623l-15.046 7.2309z" color="#000000" fill="#fff" fill-opacity=".36364"/> <path transform="translate(-29.755 19)" d="m25.143 31.062 0.1875-0.75 15.231-7.1296s-0.11016 0.61363-0.21588 0.74935l-15.203 7.1302z" color="#000000" fill-opacity=".36364"/> </g> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-delete.svg�����������������������������������0000644�0001750�0000144�00000045001�15104114162�023773� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2978"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d5d5d5" offset="1"/> </linearGradient> <radialGradient id="radialGradient6719" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient6717" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient6715" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2058" x1="7.3739" x2="7.5291" y1="27.377" y2="69.461" gradientTransform="matrix(3.5204 0 0 .34802 -3.0379 1.5443)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2970" x1="27.5" x2="27.625" y1="14" y2="18.75" gradientTransform="matrix(1 0 0 .79999 0 -1.1999)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient2984" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -17.829 -61.797)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient2988" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -16.182 -61.797)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient2992" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -14.333 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient2996" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -12.68 -61.032)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3000" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -10.785 -60.991)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3004" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -19.584 -61.752)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <linearGradient id="linearGradient3097" x1="26.151" x2="27.5" y1="-5.7401" y2="13.352" gradientTransform="matrix(.98453 0 0 1.2036 .9719 -2.1232)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </linearGradient> <radialGradient id="radialGradient3107" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -8.3326 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3111" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -6.3326 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3115" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -4.3326 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3119" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -2.3326 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3123" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 -.33256 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3127" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 1.6674 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3131" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 3.6674 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <radialGradient id="radialGradient3135" cx="9.5796" cy="33.588" r="2.5528" gradientTransform="matrix(3.1467 .069249 -.0604 2.7446 5.6674 -61.897)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2978"/> <linearGradient id="linearGradient3147" x1="40.5" x2="40.5" y1="13.823" y2="16.878" gradientUnits="userSpaceOnUse"> <stop stop-color="#a40000" offset="0"/> <stop stop-color="#ffc4c4" offset="1"/> </linearGradient> <linearGradient id="linearGradient3165" x1="23.5" x2="23.5" y1="12" y2="6.6875" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3181" x1="25" x2="25" y1="21" y2="32.25" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3239" x1="24" x2="24" y1="15.837" y2="21" gradientUnits="userSpaceOnUse"> <stop stop-color="#598bcb" offset="0"/> <stop stop-color="#2f5c96" offset=".75676"/> <stop stop-color="#203e65" offset="1"/> </linearGradient> <linearGradient id="linearGradient3247" x1="21.678" x2="22.334" y1="19.97" y2="11.644" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Delete</dc:title> <dc:date/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>delete</rdf:li> <rdf:li>shredder</rdf:li> </rdf:Bag> </dc:subject> <dc:publisher> <cc:Agent> <dc:title>Novell, Inc.</dc:title> </cc:Agent> </dc:publisher> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title/> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.022624 0 0 .019662 44.395 41.981)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient6715)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient6717)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient6719)" opacity=".40206"/> </g> <path d="m4.75 21h38.5l-0.875 11.25h-36.75l-0.875-11.25z" color="black" fill="url(#linearGradient3181)" opacity=".3866"/> <g> <path d="m4.0008 16.5c-0.043961-0.035454 1.7269 25.505 1.7274 25.513 0.16613 2.5507 1.5607 3.4829 3.1217 3.4867 0.055778 1.31e-4 29.284-0.003283 29.907-0.005941 2.6287-0.011219 3.2727-1.6346 3.4456-3.4083 0.013869-0.034971 1.7838-25.551 1.7977-25.586h-39.999z" fill="#babdb6" fill-rule="evenodd" opacity=".5" stroke="#555753"/> <path d="m43.458 20.713-36.25-0.023405c27.311 0.63733 32.677 3.6481 36.006 3.4943l0.24377-3.4709z" color="black" display="block" fill="url(#linearGradient2058)" opacity=".23711"/> <g transform="translate(.088389 .088389)" fill-rule="evenodd" opacity=".12887" stroke="#000" stroke-width="1.3"> <path d="m29.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.6151 0.42421s-0.76688-4.6057 0.046984-8.1095-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m9.9124 19.759s1.116 3.7214 0.35366 6.734c-0.76233 3.0126-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m11.667 19.714s1.116 3.7214 0.35366 6.734-3.403 5.3164-3.403 5.3164l1.2082 1.9657s2.7951-3.6016 3.609-7.1054-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m21.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.6593 0.55679s-0.81107-4.7383 0.00279-8.2421-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m35.163 19.614s1.116 3.7214 0.35366 6.734 1.0337 7.155 1.0337 7.155l1.5267-1.211s-1.9601-2.2634-1.1463-5.7673-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m31.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.5267-0.06193s-0.67849-4.1196 0.13537-7.6234-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m33.163 19.614s1.116 3.7214 0.35366 6.734-1.0434 7.6853-1.0434 7.6853l1.7919 0.42421s-0.14816-4.429 0.6657-7.9328-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m27.163 19.614s1.116 3.7214 0.35366 6.734 0.5476 7.6411 0.5476 7.6411l1.6593-0.68065s-1.6066-3.2799-0.7927-6.7837-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m25.163 19.614s1.116 3.7214 0.35366 6.734-1.3528 7.7295-1.3528 7.7295l1.5267 0.20324s0.42636-4.2522 1.2402-7.756-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m23.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m13.314 19.714s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.5801 0.38826s-0.7319-4.5698 0.081961-8.0736-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m19.418 20.52s0.19763 3.6095-0.35345 6.734c-0.53977 3.0603 2.2418 7.2425 2.2418 7.2425l1.4147-0.63234s-2.7944-2.6156-2.1624-6.7857c0.55767-3.6797 0.27365-6.5575 0.27365-6.5575l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m15.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> <path d="m16.816 20.48s1.116 3.7214 0.35366 6.734-2.4428 4.5909-2.4428 4.5909l1.238 1.1354s1.8052-2.0457 2.619-5.5495-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" opacity="1"/> </g> </g> <g fill-rule="evenodd"> <path d="m29.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.6151 0.42421s-0.76688-4.6057 0.046984-8.1095-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3123)"/> <path d="m9.9124 19.759s1.116 3.7214 0.35366 6.734c-0.76233 3.0126-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3004)"/> <path d="m11.667 19.714s1.116 3.7214 0.35366 6.734-3.403 5.3164-3.403 5.3164l1.2082 1.9657s2.7951-3.6016 3.609-7.1054-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient2984)"/> <path d="m21.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.6593 0.55679s-0.81107-4.7383 0.00279-8.2421-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3107)"/> <path d="m35.163 19.614s1.116 3.7214 0.35366 6.734 1.0337 7.155 1.0337 7.155l1.5267-1.211s-1.9601-2.2634-1.1463-5.7673-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3135)"/> <path d="m31.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.5267-0.06193s-0.67849-4.1196 0.13537-7.6234-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3127)"/> <path d="m33.163 19.614s1.116 3.7214 0.35366 6.734-1.0434 7.6853-1.0434 7.6853l1.7919 0.42421s-0.14816-4.429 0.6657-7.9328-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3131)"/> <path d="m27.163 19.614s1.116 3.7214 0.35366 6.734 0.5476 7.6411 0.5476 7.6411l1.6593-0.68065s-1.6066-3.2799-0.7927-6.7837-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3119)"/> <path d="m25.163 19.614s1.116 3.7214 0.35366 6.734-1.3528 7.7295-1.3528 7.7295l1.5267 0.20324s0.42636-4.2522 1.2402-7.756-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3115)"/> <path d="m23.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3111)"/> <path d="m13.314 19.714s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.5801 0.38826s-0.7319-4.5698 0.081961-8.0736-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient2988)"/> <path d="m19.418 20.52s0.19763 3.6095-0.35345 6.734c-0.53977 3.0603 2.2418 7.2425 2.2418 7.2425l1.4147-0.63234s-2.7944-2.6156-2.1624-6.7857c0.55767-3.6797 0.27365-6.5575 0.27365-6.5575l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient3000)"/> <path d="m15.163 19.614s1.116 3.7214 0.35366 6.734-0.2479 7.8621-0.2479 7.8621l1.4383-0.54807s-0.5901-3.6335 0.22376-7.1373-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient2992)"/> <path d="m16.816 20.48s1.116 3.7214 0.35366 6.734-2.4428 4.5909-2.4428 4.5909l1.238 1.1354s1.8052-2.0457 2.619-5.5495-0.35354-6.9098-0.35354-6.9098l-1.4143-9.14e-4z" color="black" fill="url(#radialGradient2996)"/> </g> <path d="m5.4147 19.122c-0.051257-1.34e-4 0.83675 12.817 1.5423 21.806 0.182 2.3075 0.55192 3.2466 1.9854 3.2466 11.817 0 28.611 0.086095 29.182 0.083996 2.7665-0.010159 2.7147-1.0375 2.9439-3.2203 0.083408-0.7946 1.5325-21.827 1.5187-21.827-9.9011 0-24.94-0.057403-37.173-0.089374z" fill="none" opacity=".62887" stroke="#fff"/> <path id="path1841" d="m7.1632 6.5688c-1.0668 0.002437-1.9596 0.02711-2.4459 1.0428-0.084523 0.17654-2.6609 7.3416-2.7848 7.6148-1.0604 2.3392-0.082495 5.2859 1.9657 5.2662 0.38951-0.00363 40.359 0.018271 40.979 0 1.7435-0.050494 1.9666-3.4627 1.216-4.9977-0.042521-0.086962-3.526-7.9809-3.6148-8.1208-0.41092-0.62444-1.3311-0.89811-2.0147-0.87248-0.13465 0.005175-33.167 0.066811-33.3 0.067114z" fill="url(#linearGradient3239)" fill-rule="evenodd" stroke="#204a87"/> <g fill-rule="evenodd"> <path d="m4.7922 20.902 2.4999 8.8e-5 0.76585 20.611-0.76254 3.0732c-0.60694-0.48646-0.87868-1.2243-1.0162-2.0628l-1.487-21.621z" color="black" fill="#555753" opacity=".14948"/> <path d="m8.0336 41.612-0.7123 2.9289c0.42286 0.2249 0.73575 0.31226 1.1913 0.46661l30.026-0.028697c0.57892-0.039621 1.1307-0.065799 1.5143-0.17158l-2.0458-3.436-29.973 0.24081z" color="black" fill="#eeeeec" opacity=".42784"/> <path d="m38.007 41.371 2.0125 3.4449c0.6182-0.2632 1.3303-0.72381 1.6114-1.8539l1.5084-22.017-3.4472-0.002226-1.6851 20.428z" color="black" fill="#eeeeec" opacity=".37113"/> </g> <path d="m40.375 7.5312c-0.067214 2.626e-4 -0.18758 0.030898-0.3125 0.03125-0.24985 7.031e-4 -0.60404-0.0010278-1.0625 0-0.91691 0.0020555-2.2217-0.0030392-3.7812 0-3.119 0.0060785-7.2589 0.02378-11.406 0.03125-8.2947 0.01494-16.637-4.38e-5 -16.656 0-0.51956 0.001187-0.89469 0.058675-1.0938 0.125s-0.26714 0.05319-0.40625 0.34375c0.068173-0.14239 0.021728-0.026115 0 0.03125s-0.054922 0.145-0.09375 0.25c-0.077657 0.21-0.18523 0.52625-0.3125 0.875-0.25453 0.69749-0.60284 1.6101-0.9375 2.5312s-0.6457 1.8499-0.90625 2.5625c-0.13028 0.35629-0.26022 0.65004-0.34375 0.875s-0.09934 0.27427-0.1875 0.46875c-0.41165 0.90809-0.3939 1.9986-0.125 2.75s0.63762 1.0675 1.1562 1.0625c0.13687-0.001276 0.71251-2.16e-4 1.8438 0s2.7197-6.29e-4 4.625 0c3.8107 0.001257 8.8796-0.001369 13.938 0s10.13 5.73e-4 13.969 0c1.9196-2.86e-4 3.5041 0.001156 4.6562 0s1.9972-0.002681 1.9062 0c0.095728-0.002772 0.10113 0.005987 0.21875-0.15625s0.24092-0.52058 0.3125-0.9375c0.14315-0.83384 0.003994-1.9507-0.21875-2.4062-0.06807-0.13921-0.034154-0.092692-0.0625-0.15625s-0.075018-0.1375-0.125-0.25c-0.099964-0.225-0.23879-0.56003-0.40625-0.9375-0.33492-0.75494-0.774-1.7489-1.2188-2.75s-0.87882-1.9902-1.2188-2.75c-0.16996-0.37989-0.33483-0.71116-0.4375-0.9375-0.051336-0.11317-0.097094-0.18998-0.125-0.25-0.12293-0.15424-0.70375-0.4197-1.0625-0.40625-0.099983 0.0038426-0.043268-1.135e-4 -0.0625 0s-0.028893-1.313e-4 -0.0625 0z" fill="none" opacity=".3866" stroke="url(#linearGradient3247)" xlink:href="#path1841"/> <path d="m8 10-0.625 2h32l-0.78185-1.9246-30.593-0.07544z" color="black" fill="url(#linearGradient2970)" fill-rule="evenodd" opacity=".8299"/> <path d="m9.8535 1.5h27.314c0.19587 0 0.35355 0.15768 0.35355 0.35355v9.6464h-28.021v-9.6464c0-0.19587 0.15768-0.35355 0.35355-0.35355z" color="black" fill="url(#linearGradient3097)" fill-rule="evenodd" stroke="#888a85"/> <g stroke-linecap="square"> <path d="m10.5 10.523v-8.0226h26.004v8.1117" color="black" fill="none" opacity=".62887" stroke="#fff"/> <path transform="matrix(.81438 0 0 .79638 7.5837 3.2127)" d="m43 15a2.5 1.25 0 1 1-5 0 2.5 1.25 0 1 1 5 0z" color="black" fill="#c00" fill-rule="evenodd" stroke="#a40000" stroke-width="1.2417"/> <path transform="matrix(.81438 0 0 .79638 7.5837 2.5498)" d="m43 15a2.5 1.25 0 1 1-5 0 2.5 1.25 0 1 1 5 0z" color="black" fill="#ef2929" fill-rule="evenodd" stroke="url(#linearGradient3147)" stroke-width="1.2417"/> </g> <rect x="9" y="6.6875" width="29" height="5.3125" color="black" fill="url(#linearGradient3165)" opacity=".2732"/> <g> <rect x="12" y="4" width="23" height="1" rx=".5" ry=".5" color="black" opacity=".13918"/> <rect x="12" y="6" width="15" height="1" rx=".5" ry=".5" color="black" opacity=".13918"/> <rect x="12" y="8" width="19" height="1" rx=".5" ry=".5" color="black" opacity=".13918"/> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-cut.svg��������������������������������������0000644�0001750�0000144�00000024451�15104114162�023332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2229"> <stop stop-color="#e2e2e2" offset="0"/> <stop stop-color="#d8d8d8" offset="1"/> </linearGradient> <linearGradient id="XMLID_897_" x1="292.97" x2="296.94" y1="4.7593" y2="10.711" gradientUnits="userSpaceOnUse"> <stop stop-color="#EEEEEC" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <radialGradient id="XMLID_52_" cx="165.06" cy="23.333" r="7.2848" gradientTransform="matrix(1 0 0 1.0103 1.008e-18 -.1598)" gradientUnits="userSpaceOnUse"> <stop stop-color="#EF3535" offset="0"/> <stop stop-color="#c91a1a" offset="0"/> <stop stop-color="#ff4c4c" offset="1"/> </radialGradient> <linearGradient id="linearGradient16739" x1="22.225" x2="24.19" y1="23.843" y2="22.861" gradientUnits="userSpaceOnUse"> <stop stop-color="#BABDB6" offset="0"/> <stop stop-color="#EEEEEC" offset="1"/> </linearGradient> <linearGradient id="linearGradient16769" x1="294.59" x2="297.19" y1="12.188" y2="13.34" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient16894" x1="296.76" x2="297.8" y1="12.012" y2="10.947" gradientTransform="matrix(3.6244 0 0 3.6244 -1053.2 -16.847)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient16946" x1="296.49" x2="296.53" y1="15.507" y2="9.877" gradientTransform="matrix(3.6379 0 0 3.4704 -1056.1 -16.007)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient16968" x1="292.97" x2="296.94" y1="4.7593" y2="10.711" gradientTransform="matrix(-4.1278 0 0 4.1366 1244.5 -11.905)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_897_"/> <linearGradient id="linearGradient16974" x1="292.97" x2="296.94" y1="4.7593" y2="10.711" gradientTransform="matrix(4.0534 0 0 4.1366 -1175.5 -11.905)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_897_"/> <linearGradient id="linearGradient17028" x1="39.62" x2="-3.5325" y1="44.541" y2="-11.889" gradientTransform="matrix(1.1619 0 0 .9925 -5.1121 .064005)" gradientUnits="userSpaceOnUse"> <stop stop-color="#EF3535" offset="0"/> <stop stop-color="#a40000" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient17034" x1="13.825" x2="7.6701" y1="40.069" y2="2.3262" gradientTransform="matrix(1.1619 0 0 .9925 -2.667 .064005)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient17037" x1="7.1848" x2="25.152" y1="31.057" y2="50.775" gradientTransform="matrix(1.1619 0 0 .9925 -2.4308 .26576)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient2235" x1="20.288" x2="24.326" y1="6.4604" y2="23.943" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2229"/> <radialGradient id="radialGradient2241" cx="34.376" cy="37.5" r="8.3888" gradientTransform="matrix(1 0 0 1.0604 0 -2.2995)" gradientUnits="userSpaceOnUse" xlink:href="#XMLID_52_"/> <linearGradient id="linearGradient2257" x1="298.48" x2="298.87" y1="13.6" y2="13.803" gradientUnits="userSpaceOnUse"> <stop stop-color="#df2a2a" offset="0"/> <stop stop-color="#df2a2a" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2265" x1="298.48" x2="298.87" y1="13.6" y2="13.803" gradientUnits="userSpaceOnUse"> <stop stop-color="#9a0c00" offset="0"/> <stop stop-color="#9a0c00" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient2275" cx="25.188" cy="41.625" r="18.062" gradientTransform="matrix(1 0 0 .32526 2.0296e-16 28.086)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Edit Cut</dc:title> <dc:creator> <cc:Agent> <dc:title>Garrett Le Sage</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>cut</rdf:li> <rdf:li>clipboard</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <path d="m34.174 1.625c0.21195 0.068536 0.41726 0.14466 0.62398 0.2175 0.65142 2.197 3.6715 4.4187 2.5231 6.6066-3.8258 6.3804-7.6243 12.845-11.422 19.276-0.74575 0.1469-1.498 0.22691-2.2518 0.24469-1.5864 0.04021-3.2149-0.1945-4.7206-0.73407 5.0509-8.5513 10.104-17.121 15.247-25.611z" fill="url(#linearGradient16968)" stroke="#888a85" stroke-linecap="round" stroke-linejoin="round"/> <g> <path d="m34.289 4.25c-0.23112 0.30745-0.44962 0.87094-0.68603 1.1562-4.0469 6.7527-8.162 13.494-12.224 20.219-0.060551 0.25312-0.81393 1.0123-0.012041 0.94296 1.1116 0.19788 2.2717 0.3506 3.3798 0.057037 3.759-6.2172 7.4459-12.482 11.196-18.702 0.34247-0.38727 0.40912-0.92526 0.049355-1.312-0.53002-0.81661-1.0669-1.6747-1.61-2.4549l-0.09355 0.09375z" fill="url(#linearGradient2235)"/> <polygon transform="matrix(3.6379 0 0 3.4704 -1056.1 -16.007)" points="297.04 12.3 296.4 13.385 295.13 14.719 294.73 13.673 295.75 11.96" fill="url(#linearGradient16769)" stroke="#9a0c00" stroke-linecap="round" stroke-linejoin="round" stroke-width=".28144"/> <path d="m20.406 26.969c-1.2223 0.48672-1.214 2.0352-1.925 2.964-0.34232 0.7158-0.94379 1.3462-1.2 2.0985-0.009679 0.51539 0.44795 1.3602 1.0312 0.90625 1.385-1.1463 2.5644-2.5387 3.4442-4.1269 0.23236-0.49003 0.79575-0.89416 0.86828-1.4044-0.53857-0.57081-1.5128-0.53302-2.2188-0.4375z" fill="url(#linearGradient16946)"/> </g> <path d="m12.96 1.625c-0.20813 0.068536-0.40974 0.14466-0.61275 0.2175-0.63968 2.197-3.6054 4.4187-2.4776 6.6066 3.7569 6.3804 7.487 12.845 11.216 19.276 0.73232 0.1469 1.4711 0.22691 2.2112 0.24469 1.5578 0.04021 3.157-0.1945 4.6356-0.73407-4.9599-8.5513-9.9219-17.121-14.972-25.611z" fill="url(#linearGradient16974)" stroke="#888a85" stroke-linecap="round" stroke-linejoin="round"/> <g> <path d="m12.72 4.25c-0.38304 1.1267-1.4497 1.956-1.7148 3.1562 3.7085 6.3941 7.4709 12.769 11.177 19.156 1.1984 0.2583 2.4284 0.093157 3.6134-0.15625-0.18877-0.74044-0.7382-1.3309-1.03-2.0296-3.8946-6.5705-7.8237-13.134-11.678-19.72-0.014661-0.15161-0.2167-0.48413-0.36746-0.40625z" fill="url(#linearGradient2235)"/> <path transform="matrix(.97989 0 0 1 .31138 .17404)" d="m24.19 23.843a0.98253 0.98253 0 1 1-1.965 0 0.98253 0.98253 0 1 1 1.965 0z" color="#000000" fill="url(#linearGradient16739)"/> <path transform="matrix(1.2561 0 0 .81915 -7.1994 9.0904)" d="m43.25 41.625a18.062 5.875 0 1 1-36.125 0 18.062 5.875 0 1 1 36.125 0z" color="#000000" fill="url(#radialGradient2275)" fill-rule="evenodd" opacity=".26705"/> <path d="m17.7 30.287c3.235 1.7266 3.4958 6.6129 0.57794 10.914-2.9179 4.304-7.9045 6.3952-11.141 4.6761-3.2365-1.7267-3.4958-6.6104-0.57795-10.912 2.9164-4.3014 7.9045-6.3927 11.141-4.6787zm-1.8551 2.7421c-1.4365-0.76363-4.5075 0.54052-6.4663 3.434-1.9629 2.8935-1.8229 5.9135-0.38772 6.6748 1.4351 0.76823 4.5088-0.54052 6.4677-3.434 1.9643-2.8935 1.8229-5.9112 0.3864-6.6748z" fill="url(#linearGradient17037)" stroke="#a40000"/> <path d="m14.326 30.583c-1.9251 0.38722-3.6345 1.454-5.0469 2.4812-0.75176 0.6949-1.2436 1.4499-1.9156 2.2542-1.7083 2.3521-2.4242 5.4434-1.0728 8.0697 0.61945 1.4531 2.6426 2.0474 4.3682 1.6791 1.4519-0.24846 2.6813-1.1611 3.8124-1.7989 0.9209-0.79078 1.554-1.6265 2.3329-2.5913 1.8094-2.4744 2.7919-5.7487 1.298-8.5123-0.72371-1.1421-2.2346-1.7468-3.7761-1.5818zm0.47201 0.96148c2.0165 0.25035 3.357 2.0328 3.1225 3.7219 0.020773 2.2869-1.146 4.4441-2.7232 6.2341-1.4172 1.402-3.3486 2.7283-5.6642 2.6363-1.3589-0.002867-2.4326-0.9123-2.8158-1.9605-0.61664-2.5319 0.19472-5.2652 1.9662-7.338 1.3582-1.5233 3.1948-2.8871 5.4675-3.2417 0.21569-0.015274 0.43088-0.042494 0.64687-0.052156z" fill="url(#linearGradient17034)"/> <path d="m30.332 30.287c-3.235 1.7266-3.4958 6.6129-0.57794 10.914 2.9179 4.304 7.9045 6.3952 11.141 4.6761 3.2365-1.7267 3.4958-6.6104 0.57794-10.912-2.9164-4.3014-7.9045-6.3927-11.141-4.6787zm1.8551 2.7421c1.4365-0.76363 4.5075 0.54052 6.4663 3.434 1.9629 2.8935 1.8229 5.9135 0.38772 6.6748-1.4351 0.76823-4.5088-0.54052-6.4677-3.434-1.9643-2.8935-1.8229-5.9112-0.3864-6.6748z" fill="url(#radialGradient2241)" stroke="#a40000"/> <polygon transform="matrix(3.6244 0 0 3.6244 -1053.2 -16.847)" points="296.96 12.3 297.6 13.385 298.87 14.719 299.27 13.673 298.25 11.96" fill="url(#linearGradient2257)" stroke="url(#linearGradient2265)" stroke-linecap="round" stroke-linejoin="round" stroke-width=".2759"/> <path d="m26.156 27.938c-0.42675 0.19882-1.0168 0.20148-1.3438 0.5 0.95002 1.4014 1.8899 2.9147 2.8509 4.2126 0.66855 0.75454 1.3558 1.5002 2.1179 2.1624 0.73528-1.3914 0.13516-3.0612-0.8125-4.1875-0.60254-0.89969-0.82982-2.113-1.8438-2.5938-0.30405-0.11841-0.65062-0.17788-0.96875-0.09375z" fill="url(#linearGradient16894)"/> <path d="m32.28 30.449c-1.5204 0.22975-2.8949 1.0857-3.2404 2.388-1.1311 2.3955-0.21488 5.1135 1.2798 7.2269 1.1019 1.3452 1.9401 2.9299 3.6396 3.774 1.4707 0.92362 3.3411 1.8906 5.2176 1.3009 1.5133-0.43345 2.3707-1.6806 2.6802-2.9719 0.60443-2.31-0.2957-4.676-1.707-6.6365-0.65867-0.91371-1.333-1.8832-2.1133-2.6946-1.1946-0.90345-2.6379-1.6515-4.0888-2.2324-0.5341-0.11041-1.1152-0.23274-1.6676-0.15434zm0.4357 1.2096c1.7573-0.066776 3.2345 0.73946 4.3764 1.769 1.0323 0.96913 2.0217 1.8052 2.6625 2.9989 1.0772 1.8206 1.3879 3.98 0.8401 5.9635-0.52838 1.3245-2.2262 1.972-3.7911 1.6164-1.9819-0.22883-3.2173-1.671-4.5266-2.8084-1.5057-1.4314-2.4406-3.4786-2.5106-5.4824 0.014112-1.0177-0.026468-2.1784 0.69814-3.0336 0.41227-0.54315 1.38-1.0543 2.2511-1.0235z" fill="url(#linearGradient17028)"/> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/edit-copy.svg�������������������������������������0000644�0001750�0000144�00000012472�15104114162�023511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient15218"> <stop stop-color="#f0f0ef" offset="0"/> <stop stop-color="#e8e8e8" offset=".59929"/> <stop stop-color="#fff" offset=".82759"/> <stop stop-color="#d8d8d3" offset="1"/> </linearGradient> <linearGradient id="linearGradient2259"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2230" x1="35.997" x2="33.665" y1="40.458" y2="37.771" gradientTransform="translate(6.1618 4.0334)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7c7c7c" offset="0"/> <stop stop-color="#b8b8b8" offset="1"/> </linearGradient> <linearGradient id="linearGradient2257" x1="33.396" x2="34.17" y1="36.921" y2="38.07" gradientTransform="translate(6.1618 3.6584)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4258" x1="22.308" x2="35.785" y1="18.992" y2="39.498" gradientTransform="matrix(1.0657 0 0 .9876 -8.5483 -4.8917)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient15218"/> <linearGradient id="linearGradient4260" x1="26.076" x2="30.811" y1="26.697" y2="42.007" gradientTransform="matrix(.9985 0 0 .99825 -6.9704 -4.8929)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <linearGradient id="linearGradient13651" x1="26.076" x2="30.811" y1="26.697" y2="42.007" gradientTransform="matrix(.99942 0 0 1 5.9913 4.0334)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <linearGradient id="linearGradient13653" x1="22.308" x2="35.785" y1="18.992" y2="39.498" gradientTransform="matrix(1.0672 0 0 .98928 4.3917 4.0352)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient15218"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Edit Copy</dc:title> <dc:date>2005-10-15</dc:date> <dc:creator> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>copy</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(1.0015 0 0 1.0006 -.050022 -.063049)" opacity=".5"> <rect x="20.162" y="34.033" width="13" height="2" color="#000000" fill-rule="evenodd" opacity=".17045"/> <rect x="1.5484" y="1.5629" width="30.952" height="35.977" rx=".56566" ry=".56616" fill="url(#linearGradient4258)" fill-rule="evenodd" opacity="1" stroke="#888a85" stroke-width=".99894"/> <rect x="2.5325" y="2.5606" width="28.971" height="33.981" rx="0" ry="0" fill="none" opacity="1" stroke="url(#linearGradient4260)" stroke-width=".99894"/> <g fill-rule="evenodd"> <rect x="7.0161" y="10.033" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="7.0161" y="14.033" width="20" height="2" color="#000000" opacity=".17045"/> <rect x="7.0161" y="18.033" width="18" height="2" color="#000000" opacity=".17045"/> <rect x="7.0161" y="22.033" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="7.0161" y="26.033" width="13" height="2" color="#000000" opacity=".17045"/> </g> </g> <path d="m15.073 10.501h29.856c0.31574 0 0.56993 0.25309 0.56993 0.56747v27.167c0 2.4765-6.8798 8.3031-9.2679 8.3031h-21.158c-0.31574 0-0.56993-0.25309-0.56993-0.56747v-34.903c0-0.31438 0.25419-0.56747 0.56993-0.56747z" fill="url(#linearGradient13653)" fill-rule="evenodd" stroke="#888a85"/> <g> <rect x="15.503" y="11.5" width="28.997" height="34.041" rx="0" ry="0" fill="none" stroke="url(#linearGradient13651)"/> <path d="m36.221 46.537c2.0304 0.3299 9.5888-4.5299 9.2844-8.4978-1.5633 2.4231-4.7585 1.2867-8.8673 1.4457 0 0 0.39537 6.5521-0.41713 7.0521z" color="#000000" fill="url(#linearGradient2230)" fill-rule="evenodd" stroke="#868a84"/> <path d="m37.671 44.345c1.3698-0.68383 4.4282-2.1465 5.7276-4.0275-1.5961 0.68006-2.9478 0.2095-5.7023 0.1904 0 0 0.16232 3.0621-0.025296 3.8371z" color="#000000" fill="none" opacity=".36932" stroke="url(#linearGradient2257)"/> </g> <g fill-rule="evenodd"> <rect x="20" y="19.033" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="23.033" width="19.992" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="27.033" width="17.977" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="31.033" width="21" height="2" color="#000000" opacity=".17045"/> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/draw-rectangle.svg��������������������������������0000644�0001750�0000144�00000005532�15104114162�024512� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient5397" x1="24" x2="24" y1="6.5909" y2="41.414" gradientTransform="matrix(.45946 0 0 .45946 .97422 .97175)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset="0"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <radialGradient id="radialGradient3082-6" cx="4.993" cy="43.5" r="2.5" gradientTransform="matrix(2.0038 0 0 1.4 27.988 -17.4)" gradientUnits="userSpaceOnUse"> <stop stop-color="#181818" offset="0"/> <stop stop-color="#181818" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient3084-4" cx="4.993" cy="43.5" r="2.5" gradientTransform="matrix(2.0038 0 0 1.4 -20.012 -104.4)" gradientUnits="userSpaceOnUse"> <stop stop-color="#181818" offset="0"/> <stop stop-color="#181818" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient3086-8" x1="25.058" x2="25.058" y1="47.028" y2="39.999" gradientUnits="userSpaceOnUse"> <stop stop-color="#181818" stop-opacity="0" offset="0"/> <stop stop-color="#181818" offset=".5"/> <stop stop-color="#181818" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient872" x1="13.608" x2="13.608" y1="2.5455" y2="21.532" gradientUnits="userSpaceOnUse"> <stop stop-color="#cd9ef7" offset="0"/> <stop stop-color="#a56de2" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g transform="matrix(.55 0 0 .33333 -1.2 7.3333)"> <g transform="matrix(1.0526 0 0 1.2857 -1.2632 -13.429)" opacity=".4"> <rect x="38" y="40" width="5" height="7" fill="url(#radialGradient3082-6)"/> <rect transform="scale(-1)" x="-10" y="-47" width="5" height="7" fill="url(#radialGradient3084-4)"/> <rect x="10" y="40" width="28" height="7" fill="url(#linearGradient3086-8)"/> </g> </g> <rect x="2.5" y="2.5" width="19" height="19" rx="1" ry="1" color="#000000" fill="url(#linearGradient872)"/> <rect x="3.5012" y="3.4988" width="17" height="17" fill="none" opacity=".5" stroke="url(#linearGradient5397)" stroke-linecap="round" stroke-linejoin="round"/> <rect x="2.5" y="2.5" width="19" height="19" rx="1" ry="1" color="#000000" fill="none" opacity=".5" stroke="#7239b3" stroke-linecap="round" stroke-linejoin="round"/> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/draw-path.svg�������������������������������������0000644�0001750�0000144�00000010502�15104114162�023473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient15559" x1="91.92" x2="97.698" y1="117.01" y2="121.86" gradientTransform="matrix(.97493 -.20909 .21779 1.0054 -101.79 -93.512)" gradientUnits="userSpaceOnUse"> <stop stop-color="#8cd5ff" offset="0"/> <stop stop-color="#3689e6" offset="1"/> </linearGradient> <linearGradient id="linearGradient15561" x1="1310.4" x2="1313.3" y1="762.42" y2="764.3" gradientTransform="matrix(1 0 0 .9927 -1296 -746.33)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff394" offset="0"/> <stop stop-color="#f9c440" offset="1"/> </linearGradient> <linearGradient id="linearGradient905" x1="2" x2="2" y1="21" y2="22" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset="0"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient1003" x1="16.195" x2="21.646" y1="5.3468" y2="7.6825" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".042046"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient1021" x1="14.948" x2="17.554" y1="12.211" y2="13.151" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".11457"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g fill-rule="evenodd"> <path d="m14.745 13.73-2.0166 5.2806c-0.4181 1.2153 1.2963 1.8649 1.7312 0.60477l2.0668-5.1846" fill="#d3d7cf" stroke="#484a47" stroke-linecap="square" stroke-linejoin="round"/> <path d="m13.306 8.5265 0.7913 1.1721 5.9084 2.4043 1.5569-0.50531 1.9838-5.4602c-2.4933 0-0.4986-5.954-6.9812-5.954z" fill="url(#linearGradient15559)"/> <path d="m14.208 9.8169-0.9086 3.2756 4.9866 1.8846 1.9099-3.0506" fill="url(#linearGradient15561)" stroke="#ad5f00" stroke-linecap="square" stroke-linejoin="round" stroke-opacity=".7"/> </g> <g fill="none"> <path d="m15.259 9.8169-0.7539 2.6614 3.3779 1.2704 1.384-2.2521" stroke="url(#linearGradient1021)" stroke-opacity=".5431"/> <path d="m23.546 6.6336-1.7345 4.2698c-0.2305 0.74498-1.1836 1.3453-1.6748 1.0261-1.8094-1.176-3.7727-1.9811-5.9696-2.2351-0.4209-0.048642-0.907-1.1693-0.7171-1.6684l3.1148-7.3463" opacity=".5" stroke="#002e99" stroke-linecap="round" stroke-linejoin="round" stroke-width=".98228"/> <rect x=".0361" y=".19222" width="23.936" height="23.68"/> <path d="m13.001 13.589 4.4879 1.9847 1.496-2.977-4.488-1.4885z"/> <path d="m15.993 7.6347 2.4933-5.954" stroke="#fff" stroke-linecap="round" stroke-width="1px"/> <g stroke-linejoin="round"> <path d="m22.802 6.2599-1.7091 3.7035c-0.1747 0.6765-0.2825 1.2888-0.9638 0.84487-1.6648-1.0849-3.7359-1.9293-5.4457-1.9862-0.3221-0.010721 0.1-0.28005-0.2376-0.47266l3.1934-7.6698" stroke="url(#linearGradient1003)" stroke-linecap="round" stroke-opacity=".5431"/> <path d="m3.5234 20.799c13.604-9.7524-1.997-19.142-1.997-19.142l10.078 0.016876" stroke="#0e141f" stroke-opacity=".8" stroke-width="3"/> <path d="m3.4797 20.842c13.604-9.7524-1.997-19.142-1.997-19.142l10.078 0.016876" stroke="#95a3ab" stroke-width="1.0029"/> </g> </g> <rect x="12.5" y="20.5" width="2" height="2" fill="#fff" stroke="#555761"/> <path d="m12.346 21.531h-7.3464" stroke="#555761" stroke-width="1px"/> <path d="m1 20h3v3h-3z" fill="#fafafa"/> <path d="m0.5 19.5h4v4h-4z" fill="none" opacity=".8" stroke="#555761" stroke-linecap="round" stroke-linejoin="round"/> <path d="m1.5 20.5h2v2h-2z" fill="none" stroke="url(#linearGradient905)" stroke-linecap="round"/> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/draw-freehand.svg���������������������������������0000644�0001750�0000144�00000011552�15104114162�024321� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient15385" x1="1202.4" x2="1202.4" y1="697.29" y2="701.99" gradientTransform="matrix(.81316 -.0027847 -.0022644 -.99999 -974.75 708.14)" gradientUnits="userSpaceOnUse"> <stop stop-color="#0e141e" stop-opacity=".8" offset="0"/> <stop stop-color="#2e3436" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient15387" x1="1202.4" x2="1202.4" y1="698.19" y2="701.31" gradientTransform="matrix(.81316 -.0027847 -.0022644 -.99999 -974.75 708.14)" gradientUnits="userSpaceOnUse"> <stop stop-color="#95a3ab" offset="0"/> <stop stop-color="#888a85" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient15389" x1="1259.7" x2="1264.5" y1="660.46" y2="663.06" gradientTransform="matrix(1 0 0 .99999 -1245.6 -647.28)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eec88c" offset="0"/> <stop stop-color="#e2a139" offset="1"/> </linearGradient> <linearGradient id="linearGradient15391" x1="3936.7" x2="3941.7" y1="1429.3" y2="1432.3" gradientTransform="matrix(1 0 0 .99999 -3921.5 -1422.3)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f9c440" offset="0"/> <stop stop-color="#ffa154" offset="1"/> </linearGradient> <linearGradient id="linearGradient15393" x1="1263.9" x2="1260" y1="659.63" y2="656.49" gradientTransform="matrix(1 0 0 .99999 -1245.6 -647.28)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eec88c" stop-opacity="0" offset="0"/> <stop stop-color="#eec88c" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient15395" x1="1265.6" x2="1260" y1="660.42" y2="656.49" gradientTransform="matrix(1 0 0 .99999 -1245.6 -647.28)" gradientUnits="userSpaceOnUse"> <stop stop-color="#674000" offset="0"/> <stop stop-color="#674000" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient15397" x1="20.153" x2="19.745" y1="25.813" y2="23.061" gradientTransform="matrix(.56158 -.40901 .55226 .55855 -11.734 14.713)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-color="#c9c9c9" offset="1"/> </linearGradient> <linearGradient id="linearGradient973" x1="15.88" x2="21.018" y1="8.1271" y2="10.243" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".6118"/> <stop stop-color="#fff" stop-opacity=".15686" offset="1"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g fill="none"> <rect x="-1.6016e-5" y="-.22006" width="24.037" height="24.006"/> <path d="m12.485 22.337c-4.1886-0.089-7.9272 0.32698-9.0234-3.4204-1.1053-3.7786 2.5343-3.4728 3.896-7.0876 1.3198-3.5046-2.5188-4.1454-4.4601-4.47-1.9412-0.32455-1.4471-2.4605-0.97808-4.1473" stroke="url(#linearGradient15385)" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/> <path d="m12.55 22.281c-4.6051 0.0208-8.3323 0.35689-9.1811-3.7202s2.6277-3.0514 3.9892-6.6857c1.3202-3.5233-2.5189-4.168-4.4601-4.4943-1.9414-0.32638-1.4473-2.4739-0.97824-4.1698" stroke="url(#linearGradient15387)" stroke-linecap="round" stroke-linejoin="round"/> </g> <path d="m12.538 19.814 3 0.99525 5.2712-5.8056c-1.1209-2.8138-4.5803-4.617-8.1379-3.0951z" fill="url(#linearGradient15389)" fill-rule="evenodd"/> <path d="m12.529 12.412c2.1279-1.9836 6.9482-0.98148 8.2798 2.8053l2.7291-7.2178c-2.5 0-0.5-5.9715-7-5.9715z" fill="url(#linearGradient15391)" fill-rule="evenodd"/> <g stroke-linecap="round"> <path d="m23.538 8.497-2.7291 6.7202-6.5917 6.9831c-1.6792 1.7231-1.6792 1.2255-1.6771-0.65834l-0.011-9.13 4.0089-9.8864" fill="none" opacity=".5" stroke="#57392d" stroke-linejoin="round" stroke-width=".98228"/> <path d="m20.808 15.217c-0.5413-1.0046-1.0827-2.0092-1.6241-3.0138-1.0546-0.3841-2.1092-0.76818-3.1638-1.1523-1.199 0.29145-1.7856 0.49538-2.9847 0.78682" fill="url(#linearGradient15393)" fill-rule="evenodd" stroke="url(#linearGradient15395)" stroke-width="1px"/> <path d="m16.11 9.791 2.5-5.9715" fill="none" stroke="#fff" stroke-width="1px"/> </g> <path d="m22.812 7.7369-2.7592 6.7549-6.4851 6.9897-0.041-8.8747 4.0276-9.9412" fill="none" stroke="url(#linearGradient973)" stroke-linecap="square" stroke-opacity=".50249"/> <path d="m12.536 22.9c-0.018 0.311 0.3136 0.53449 0.6673 0.27674l2.2911-2.3266c-0.2062-0.98273-2.0438-1.553-2.885-0.96854z" fill="url(#linearGradient15397)" fill-rule="evenodd"/> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/draw-ellipse.svg����������������������������������0000644�0001750�0000144�00000004757�15104114162�024213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="24" height="24" version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient12398-3" x1="71.204" x2="71.204" y1="6.2376" y2="44.341" gradientTransform="matrix(.51351 0 0 .51351 -24.836 -1.0213)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".50776"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".83457"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient11527-6-5" x1="2035.2" x2="2035.2" y1="3208.1" y2="3242" gradientTransform="matrix(.80479 0 0 .60166 -1628.8 -1928.1)" gradientUnits="userSpaceOnUse"> <stop stop-color="#cd9ef7" offset="0"/> <stop stop-color="#a56de2" offset="1"/> </linearGradient> <radialGradient id="radialGradient3108" cx="99.157" cy="186.17" r="62.769" gradientTransform="matrix(.11152 0 0 .035484 .94203 15.167)" gradientUnits="userSpaceOnUse"> <stop stop-color="#3d3d3d" offset="0"/> <stop stop-color="#686868" stop-opacity=".49804" offset=".5"/> <stop stop-color="#686868" stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <path d="m19 21.773a7 2.2273 0 0 1-14 0 7 2.2273 0 1 1 14 0z" fill="url(#radialGradient3108)"/> <g> <path d="m12 1.5c-5.7935 0-10.5 4.7065-10.5 10.5 0 5.7935 4.7065 10.5 10.5 10.5 5.7935 0 10.5-4.7065 10.5-10.5 0-5.7935-4.7065-10.5-10.5-10.5z" color="#000000" fill="url(#linearGradient11527-6-5)" opacity=".99"/> <path d="m12 1.5c-5.7935 0-10.5 4.7065-10.5 10.5 0 5.7935 4.7065 10.5 10.5 10.5 5.7935 0 10.5-4.7065 10.5-10.5 0-5.7935-4.7065-10.5-10.5-10.5z" color="#000000" fill="none" opacity=".5" stroke="#7239b3" stroke-linecap="round" stroke-width="1px" style="font-variation-settings:normal"/> <path d="m21.5 12c0 5.2469-4.2536 9.5003-9.4999 9.5003-5.2468 0-9.5001-4.2535-9.5001-9.5003 0-5.2466 4.2534-9.4997 9.5001-9.4997 5.2463 0 9.4999 4.253 9.4999 9.4997z" color="#000000" fill="none" opacity=".4" stroke="url(#linearGradient12398-3)" stroke-linecap="round" stroke-linejoin="round"/> </g> </svg> �����������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-save.svg���������������������������������0000644�0001750�0000144�00000025614�15104114162�024370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4997" cx="23.447" cy="6.4577" r="19.062" gradientTransform="matrix(-1.3145 -.010063 -.01023 1.3362 46.221 -4.9099)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient1764" x1="33.06" x2="12.624" y1="27.394" y2="12.584" gradientTransform="matrix(.91411 1.4128e-16 -1.4128e-16 .91411 -3.8687 -2.7069)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 -7.8165e-32 -1.1324e-32 .53672 -5.898e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient4209" x1="7.0625" x2="24.688" y1="35.281" y2="35.281" gradientTransform="translate(.79549 3.7992)" gradientUnits="userSpaceOnUse"> <stop stop-color="#838383" offset="0"/> <stop stop-color="#bbb" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4234" x1="7.6046" x2="36.183" y1="28.481" y2="40.944" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#bbb" offset="0"/> <stop stop-color="#9f9f9f" offset="1"/> </linearGradient> <linearGradient id="linearGradient4242" x1="12.277" x2="12.222" y1="37.206" y2="33.759" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#eee" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4250" cx="15.571" cy="2.9585" r="20.936" gradientTransform="matrix(1.2862 .7817 -.71078 1.1696 -2.3543 .24814)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e4e4e4" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </radialGradient> <linearGradient id="linearGradient4260" x1="12.378" x2="44.096" y1="4.4331" y2="47.621" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4272" x1="23.688" x2="23.688" y1="11.319" y2="26.357" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".2549" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient2553" x1="33.431" x2="21.748" y1="31.965" y2="11.781" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#e6e6e6" offset=".5"/> <stop stop-color="#fff" offset=".75"/> <stop stop-color="#e1e1e1" offset=".84167"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient6907" x1="14.752" x2="8.8953" y1="15.868" y2="16.743" gradientUnits="userSpaceOnUse"> <stop stop-color="#3465a4" offset="0"/> <stop stop-color="#3465a4" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient6931" x1="12.25" x2="7" y1="18.25" y2="21.118" gradientUnits="userSpaceOnUse"> <stop stop-color="#204a87" offset="0"/> <stop stop-color="#204a87" stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Save</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>hdd</rdf:li> <rdf:li>hard drive</rdf:li> <rdf:li>save</rdf:li> <rdf:li>io</rdf:li> <rdf:li>store</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:identifier/> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024114 0 0 .019292 45.49 41.752)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <path d="m11.286 13.088c-0.625 0-1.0312 0.29018-1.2812 0.84375-1e-6 0-6.4688 17.104-6.4688 17.104s-0.25 0.67156-0.25 1.7812v9.65c0 1.0826 0.65779 1.625 1.6562 1.625h38.562c0.98485 0 1.5938-0.71818 1.5938-1.8438v-9.65s0.10596-0.77042-0.09375-1.3125l-6.7188-17.197c-0.18452-0.51191-0.6369-0.9881-1.125-1h-25.875z" fill="none" stroke="#535353" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <g fill-rule="evenodd"> <path d="m3.2736 32.122 0.7646-0.69222 37.61 0.0625 3.4624 0.3173v10.439c0 1.1256-0.60702 1.8433-1.5919 1.8433h-38.583c-0.99846 0-1.6618-0.54205-1.6618-1.6247v-10.345z" fill="url(#linearGradient4234)"/> <path d="m3.5491 31.039c-0.71429 1.4643-6.156e-4 2.3929 1.0357 2.3929h39c1.119-0.02381 1.8452-1.0119 1.4286-2.1429l-6.7143-17.211c-0.18452-0.51191-0.65476-0.9881-1.1429-1h-25.857c-0.625 0-1.0357 0.30357-1.2857 0.85715l-6.4643 17.104z" fill="url(#radialGradient4250)"/> <rect x="7.858" y="36.299" width="17.625" height="5.5625" color="#000000" fill="url(#linearGradient4209)"/> <path d="m7.858 41.862v-4.0115c1.8355 3.1792 8.2965 4.0115 12.937 4.0115h-12.937z" fill="url(#linearGradient4242)" opacity=".81143"/> <path d="m44.796 30.754c0.063522 1.25-0.414 2.3158-1.3221 2.3438 0 0-38.119-1e-6 -38.119 0-1.2892 0-1.8677-0.32495-2.0841-0.86806 0.091761 0.94433 0.82582 1.6493 2.0841 1.6493-1e-7 -1e-6 38.119 0 38.119 0 1.076-0.033071 1.7528-1.424 1.3522-2.9948l-0.030048-0.13021z" fill="#fff"/> <path d="m10.969 15.281c-0.046075 0.20032-0.1875 0.3868-0.1875 0.59375 0 0.9486 0.59098 1.7895 1.3438 2.5938 0.24027-0.15408 0.36512-0.35441 0.625-0.5-0.94031-0.816-1.5534-1.7166-1.7812-2.6875zm26.656 0c-0.22873 0.96962-0.84201 1.8724-1.7812 2.6875 0.27414 0.15358 0.40399 0.36824 0.65625 0.53125 0.75726-0.80666 1.3125-1.673 1.3125-2.625 0-0.20695-0.14159-0.39343-0.1875-0.59375zm2.1875 8.4375c-0.61379 4.0401-7.2986 7.25-15.531 7.25-8.2123 1e-6 -14.86-3.1928-15.5-7.2188-0.032357 0.19713-0.125 0.39188-0.125 0.59375 3e-7 4.3179 6.9891 7.8438 15.625 7.8438 8.6359 0 15.656-3.5258 15.656-7.8438 0-0.21292-0.089051-0.41736-0.125-0.625z" color="#000000" fill="url(#linearGradient4272)" opacity=".69143"/> </g> <path transform="translate(.088388 5.3018)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763" fill-rule="evenodd"/> <path transform="translate(33.967 5.2134)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763" fill-rule="evenodd"/> <g fill="none"> <path d="m11.643 13.541c-0.60169 0-0.99279 0.27936-1.2335 0.81229-1e-6 0-6.415 16.591-6.415 16.591s-0.24068 0.64652-0.24068 1.7148v9.2901c0 1.3547 0.44406 1.6269 1.5945 1.6269h37.687c1.3231 0 1.5343-0.3164 1.5343-1.8375v-9.2901s0.10201-0.74169-0.090255-1.2636l-6.5932-16.806c-0.17764-0.49282-0.55065-0.82625-1.0205-0.83771h-25.223z" stroke="url(#linearGradient4260)" stroke-linecap="round" stroke-linejoin="round"/> <g stroke="#fff" stroke-linecap="square" stroke-opacity=".42373" stroke-width="1px"> <path d="m40.5 36.554v5.0209"/> <path d="m38.5 36.614v5.0209"/> <path d="m36.5 36.614v5.0209"/> <path d="m34.5 36.614v5.0209"/> <path d="m32.5 36.614v5.0209"/> <path d="m30.5 36.614v5.0209"/> </g> <g stroke="#000" stroke-linecap="square" stroke-width="1px"> <path d="m39.5 36.604v5.0209" opacity=".097143"/> <path d="m37.5 36.664v5.0209" opacity=".097143"/> <path d="m35.5 36.664v5.0209" opacity=".097143"/> <path d="m33.5 36.664v5.0209" opacity=".097143"/> <path d="m31.5 36.664v5.0209" opacity=".097143"/> </g> </g> <path d="m7.875 36.312v5.5312h12.562l-12.219-0.34375-0.34375-5.1875z" fill="#fff" fill-rule="evenodd" opacity=".44"/> <path transform="matrix(1.0378 0 0 1.0607 -1.6329 3.0304)" d="m39.875 19.562a14.875 6.6875 0 1 1-29.75 0 14.875 6.6875 0 1 1 29.75 0z" color="#000000" fill="url(#linearGradient2553)" fill-rule="evenodd" opacity=".20571"/> <g> <path transform="matrix(1.1302 1.1782e-16 7.9185e-17 -.7596 -3.9097 53.666)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" fill-rule="evenodd" opacity=".14118"/> <path d="m3.2035 25.835c-1.0305-31.221 25.538-26.286 25.379-10.047h7.3129l-11.378 12.986-11.932-12.986h7.5414c0.45706-10.969-16.718-14.179-16.923 10.047z" color="#000000" display="block" fill="url(#linearGradient6907)" stroke="url(#linearGradient6931)"/> <path d="m7.6642 9.1041c4.7422-9.1441 20.458-6.3866 20.097 7.4753h6.3174l-9.5658 10.957-10.096-10.957h6.4566c0.27166-11.575-9.9511-11.045-13.209-7.4753z" color="#000000" display="block" fill="none" opacity=".47159" stroke="url(#linearGradient1764)" stroke-miterlimit="10"/> <path d="m34.767 16.212-1.9842 2.5457c-5.41-1.5163-7.8862 2.7293-15.674 1.7318l-3.8613-4.409 7.1865 0.082785c0.048751-11.846-12.09-11.164-15.405-2.535 3.808-14.889 22.864-12.821 23.254 2.4863l6.4838 0.097501z" color="#000000" fill="url(#radialGradient4997)" opacity=".49432"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-save-as.svg������������������������������0000644�0001750�0000144�00000027002�15104114162�024762� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4997" cx="23.447" cy="6.4577" r="19.062" gradientTransform="matrix(-1.3145 -.010063 -.01023 1.3362 46.221 -4.9099)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient1764" x1="33.06" x2="12.624" y1="27.394" y2="12.584" gradientTransform="matrix(.91411 1.4128e-16 -1.4128e-16 .91411 -3.8687 -2.7069)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 -7.8165e-32 -1.1324e-32 .53672 -5.898e-14 16.873)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> <linearGradient id="linearGradient4209" x1="7.0625" x2="24.688" y1="35.281" y2="35.281" gradientTransform="translate(.79549 3.7992)" gradientUnits="userSpaceOnUse"> <stop stop-color="#838383" offset="0"/> <stop stop-color="#bbb" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4234" x1="7.6046" x2="36.183" y1="28.481" y2="40.944" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#bbb" offset="0"/> <stop stop-color="#9f9f9f" offset="1"/> </linearGradient> <linearGradient id="linearGradient4242" x1="12.277" x2="12.222" y1="37.206" y2="33.759" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eee" offset="0"/> <stop stop-color="#eee" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient4250" cx="15.571" cy="2.9585" r="20.936" gradientTransform="matrix(1.2862 .7817 -.71078 1.1696 -2.3543 .24814)" gradientUnits="userSpaceOnUse"> <stop stop-color="#e4e4e4" offset="0"/> <stop stop-color="#d3d3d3" offset="1"/> </radialGradient> <linearGradient id="linearGradient4260" x1="12.378" x2="44.096" y1="4.4331" y2="47.621" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4272" x1="23.688" x2="23.688" y1="11.319" y2="26.357" gradientTransform="translate(0 5.125)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".2549" offset="0"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient2553" x1="33.431" x2="21.748" y1="31.965" y2="11.781" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#e6e6e6" offset=".5"/> <stop stop-color="#fff" offset=".75"/> <stop stop-color="#e1e1e1" offset=".84167"/> <stop stop-color="#fff" offset="1"/> </linearGradient> <linearGradient id="linearGradient6907" x1="14.752" x2="8.8953" y1="15.868" y2="16.743" gradientUnits="userSpaceOnUse"> <stop stop-color="#3465a4" offset="0"/> <stop stop-color="#3465a4" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient6931" x1="12.25" x2="7" y1="18.25" y2="21.118" gradientUnits="userSpaceOnUse"> <stop stop-color="#204a87" offset="0"/> <stop stop-color="#204a87" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient6971" x1="28.061" x2="28.061" y1="31.431" y2="36.437" gradientUnits="userSpaceOnUse"> <stop stop-color="#ddd" offset="0"/> <stop stop-color="#fdfdfd" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Save As</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>hdd</rdf:li> <rdf:li>hard drive</rdf:li> <rdf:li>save as</rdf:li> <rdf:li>io</rdf:li> <rdf:li>store</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:identifier/> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.024114 0 0 .019292 45.49 41.752)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <path d="m11.286 13.088c-0.625 0-1.0312 0.29018-1.2812 0.84375-1e-6 0-6.4688 17.104-6.4688 17.104s-0.25 0.67156-0.25 1.7812v9.65c0 1.0826 0.65779 1.625 1.6562 1.625h38.562c0.98485 0 1.5938-0.71818 1.5938-1.8438v-9.65s0.10596-0.77042-0.09375-1.3125l-6.7188-17.197c-0.18452-0.51191-0.6369-0.9881-1.125-1h-25.875z" fill="none" stroke="#535353" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <g fill-rule="evenodd"> <path d="m3.2736 32.122 0.7646-0.69222 37.61 0.0625 3.4624 0.3173v10.439c0 1.1256-0.60702 1.8433-1.5919 1.8433h-38.583c-0.99846 0-1.6618-0.54205-1.6618-1.6247v-10.345z" fill="url(#linearGradient4234)"/> <path d="m3.5491 31.039c-0.71429 1.4643-6.156e-4 2.3929 1.0357 2.3929h39c1.119-0.02381 1.8452-1.0119 1.4286-2.1429l-6.7143-17.211c-0.18452-0.51191-0.65476-0.9881-1.1429-1h-25.857c-0.625 0-1.0357 0.30357-1.2857 0.85715l-6.4643 17.104z" fill="url(#radialGradient4250)"/> <rect x="7.858" y="36.299" width="17.625" height="5.5625" color="#000000" fill="url(#linearGradient4209)"/> <path d="m7.858 41.862v-4.0115c1.8355 3.1792 8.2965 4.0115 12.937 4.0115h-12.937z" fill="url(#linearGradient4242)" opacity=".81143"/> <path d="m44.796 30.754c0.063522 1.25-0.414 2.3158-1.3221 2.3438 0 0-38.119-1e-6 -38.119 0-1.2892 0-1.8677-0.32495-2.0841-0.86806 0.091761 0.94433 0.82582 1.6493 2.0841 1.6493-1e-7 -1e-6 38.119 0 38.119 0 1.076-0.033071 1.7528-1.424 1.3522-2.9948l-0.030048-0.13021z" fill="#fff"/> <path d="m10.969 15.281c-0.046075 0.20032-0.1875 0.3868-0.1875 0.59375 0 0.9486 0.59098 1.7895 1.3438 2.5938 0.24027-0.15408 0.36512-0.35441 0.625-0.5-0.94031-0.816-1.5534-1.7166-1.7812-2.6875zm26.656 0c-0.22873 0.96962-0.84201 1.8724-1.7812 2.6875 0.27414 0.15358 0.40399 0.36824 0.65625 0.53125 0.75726-0.80666 1.3125-1.673 1.3125-2.625 0-0.20695-0.14159-0.39343-0.1875-0.59375zm2.1875 8.4375c-0.61379 4.0401-7.2986 7.25-15.531 7.25-8.2123 1e-6 -14.86-3.1928-15.5-7.2188-0.032357 0.19713-0.125 0.39188-0.125 0.59375 3e-7 4.3179 6.9891 7.8438 15.625 7.8438 8.6359 0 15.656-3.5258 15.656-7.8438 0-0.21292-0.089051-0.41736-0.125-0.625z" color="#000000" fill="url(#linearGradient4272)" opacity=".69143"/> </g> <path transform="translate(.088388 5.3018)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763" fill-rule="evenodd"/> <path transform="translate(33.967 5.2134)" d="m8.5737 25.594a1.37 1.0165 0 1 1-2.74 0 1.37 1.0165 0 1 1 2.74 0z" color="#000000" fill="#fff" fill-opacity=".45763" fill-rule="evenodd"/> <g fill="none"> <path d="m11.643 13.541c-0.60169 0-0.99279 0.27936-1.2335 0.81229-1e-6 0-6.415 16.591-6.415 16.591s-0.24068 0.64652-0.24068 1.7148v9.2901c0 1.3547 0.44406 1.6269 1.5945 1.6269h37.687c1.3231 0 1.5343-0.3164 1.5343-1.8375v-9.2901s0.10201-0.74169-0.090255-1.2636l-6.5932-16.806c-0.17764-0.49282-0.55065-0.82625-1.0205-0.83771h-25.223z" stroke="url(#linearGradient4260)" stroke-linecap="round" stroke-linejoin="round"/> <g stroke="#fff" stroke-linecap="square" stroke-opacity=".42373" stroke-width="1px"> <path d="m40.5 36.554v5.0209"/> <path d="m38.5 36.614v5.0209"/> <path d="m36.5 36.614v5.0209"/> <path d="m34.5 36.614v5.0209"/> <path d="m32.5 36.614v5.0209"/> <path d="m30.5 36.614v5.0209"/> </g> <g stroke="#000" stroke-linecap="square" stroke-width="1px"> <path d="m39.5 36.604v5.0209" opacity=".097143"/> <path d="m37.5 36.664v5.0209" opacity=".097143"/> <path d="m35.5 36.664v5.0209" opacity=".097143"/> <path d="m33.5 36.664v5.0209" opacity=".097143"/> <path d="m31.5 36.664v5.0209" opacity=".097143"/> </g> </g> <path d="m7.875 36.312v5.5312h12.562l-12.219-0.34375-0.34375-5.1875z" fill="#fff" fill-rule="evenodd" opacity=".44"/> <path transform="matrix(1.0378 0 0 1.0607 -1.6329 3.0304)" d="m39.875 19.562a14.875 6.6875 0 1 1-29.75 0 14.875 6.6875 0 1 1 29.75 0z" color="#000000" fill="url(#linearGradient2553)" fill-rule="evenodd" opacity=".20571"/> <g> <path transform="matrix(1.1302 1.1782e-16 7.9185e-17 -.7596 -3.9097 53.666)" d="m40.482 36.421a15.645 8.3969 0 1 1-31.289 0 15.645 8.3969 0 1 1 31.289 0z" color="#000000" fill="url(#radialGradient8668)" fill-rule="evenodd" opacity=".14118"/> <path d="m3.2035 25.835c-1.0305-31.221 25.538-26.286 25.379-10.047h7.3129l-11.378 12.986-11.932-12.986h7.5414c0.45706-10.969-16.718-14.179-16.923 10.047z" color="#000000" display="block" fill="url(#linearGradient6907)" stroke="url(#linearGradient6931)"/> <path d="m7.6642 9.1041c4.7422-9.1441 20.458-6.3866 20.097 7.4753h6.3174l-9.5658 10.957-10.096-10.957h6.4566c0.27166-11.575-9.9511-11.045-13.209-7.4753z" color="#000000" display="block" fill="none" opacity=".47159" stroke="url(#linearGradient1764)" stroke-miterlimit="10"/> <g> <path d="m34.767 16.212-1.9842 2.5457c-5.41-1.5163-7.8862 2.7293-15.674 1.7318l-3.8613-4.409 7.1865 0.082785c0.048751-11.846-12.09-11.164-15.405-2.535 3.808-14.889 22.864-12.821 23.254 2.4863l6.4838 0.097501z" color="#000000" fill="url(#radialGradient4997)" opacity=".49432"/> <rect x="4.5635" y="30.298" width="39.248" height="12.278" rx="1.625" ry="1.625" color="#000000" display="block" fill="url(#linearGradient6971)" stroke="#7d7d7d" stroke-linecap="round"/> <rect x="7" y="33" width="16" height="7" ry="0" color="#000000" display="block" fill="#7d7d7d" opacity=".59659"/> <rect x="24" y="32" width="1" height="9" color="#000000" display="block"/> </g> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-properties.svg���������������������������0000644�0001750�0000144�00000017153�15104114162�025625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient15656" cx="8.8244" cy="3.7561" r="37.752" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a3a3a3" offset="0"/> <stop stop-color="#4c4c4c" offset="1"/> </radialGradient> <radialGradient id="radialGradient15658" cx="33.967" cy="35.737" r="86.708" gradientTransform="scale(.96049 1.0411)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#bbb" offset="1"/> </radialGradient> <radialGradient id="radialGradient15668" cx="8.1436" cy="7.2679" r="38.159" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#f8f8f8" offset="1"/> </radialGradient> <radialGradient id="radialGradient2283" cx="20.892" cy="114.57" r="5.256" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2285" cx="20.892" cy="64.568" r="5.257" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2622" cx="26.03" cy="24.227" r="11.63" gradientTransform="matrix(2.111 2.1107e-23 -2.5345e-23 2.5349 -28.919 -38.044)" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Document Properties</dc:title> <dc:subject> <rdf:Bag> <rdf:li>document</rdf:li> <rdf:li>settings</rdf:li> <rdf:li>preferences</rdf:li> <rdf:li>properties</rdf:li> <rdf:li>tweak</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.021652 0 0 .014857 43.008 42.685)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g> <rect x="6.6036" y="3.6464" width="34.875" height="40.92" ry="1.149" color="#000000" display="block" fill="url(#radialGradient15658)" stroke="url(#radialGradient15656)" stroke-linecap="round" stroke-linejoin="round"/> <rect x="7.6661" y="4.5839" width="32.776" height="38.946" rx=".14905" ry=".14905" color="#000000" display="block" fill="none" stroke="url(#radialGradient15668)" stroke-linecap="round" stroke-linejoin="round"/> <g transform="translate(.64645 -.037989)"> <g transform="matrix(.2297 0 0 .2297 4.9671 4.245)" fill="#fff"> <path d="m23.428 113.07c0 1.973-1.6 3.572-3.573 3.572-1.974 0-3.573-1.6-3.573-3.572 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> <path d="m23.428 63.07c0 1.973-1.6 3.573-3.573 3.573-1.974 0-3.573-1.6-3.573-3.573 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> </g> <path d="m9.995 29.952c0 0.4532-0.36752 0.8205-0.82073 0.8205-0.45343 0-0.82073-0.36752-0.82073-0.8205 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2283)"/> <path d="m9.995 18.467c0 0.4532-0.36752 0.82073-0.82073 0.82073-0.45343 0-0.82073-0.36752-0.82073-0.82073 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2285)"/> </g> <path d="m11.506 5.4943v37.907" fill="none" stroke="#000" stroke-opacity=".017544" stroke-width=".98855"/> <path d="m12.5 5.0205v38.018" fill="none" stroke="#fff" stroke-opacity=".20468"/> <g transform="matrix(.90909 0 0 1 2.3636 0)" fill="#9b9b9b" fill-opacity=".54971"> <rect x="15" y="9" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="11" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="13" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="15" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="17" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="19" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="21" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="23" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="25" width="9.9" height="1" rx=".068204" ry=".065391" color="#000000" display="block"/> <rect x="15" y="29" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="31" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="33" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="35" width="22" height="1" rx=".15156" ry=".065391" color="#000000" display="block"/> <rect x="15" y="37" width="15.4" height="1" rx=".1061" ry=".065391" color="#000000" display="block"/> </g> <path d="m25.969 14.555c-0.31249 0.024273-0.61621 0.063477-0.9375 0.125l-1.2812 1.1562 3.9688 3.75 0.21875 3.2812-2.9688 2.6875-3.5-0.375-3.625-3.4062c-1e-6 0-1.2812 1.25-1.2812 1.25-0.59076 5.6413 5.3125 10.688 11.375 7.3125l11.844 12.125v-10.375l-6.5625-7.0312c2.127-5.9082-1.8484-10.92-7.25-10.5z" color="#000000" fill="url(#radialGradient2622)" opacity=".40909"/> </g> </svg> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-page-setup.svg���������������������������0000644�0001750�0000144�00000016127�15104114162�025503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient4278" x1="182" x2="182" y1="33" y2="24.52" gradientTransform="matrix(1.6 0 0 1.6 -278.73 -17.468)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient4276" x1="188" x2="188" y1="17" y2="36.026" gradientTransform="matrix(1.6961 0 0 1.6961 -295.84 -20.733)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient8896" x1="22.004" x2="22.004" y1="47.813" y2="3.3639" gradientTransform="translate(-1.9821 -3.0471)" gradientUnits="userSpaceOnUse"> <stop stop-color="#aaa" offset="0"/> <stop stop-color="#c8c8c8" offset="1"/> </linearGradient> <linearGradient id="linearGradient3988" x1="24" x2="24" y1="5.5641" y2="43" gradientTransform="matrix(.89189 0 0 1.1351 2.5946 -4.7432)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/> <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/> <stop stop-color="#fff" stop-opacity=".39216" offset="1"/> </linearGradient> <linearGradient id="linearGradient3322" x1="25.132" x2="25.132" y1=".98521" y2="47.013" gradientTransform="matrix(.97143 0 0 .93432 .68577 -1.357)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f4f4f4" offset="0"/> <stop stop-color="#dbdbdb" offset="1"/> </linearGradient> <radialGradient id="radialGradient3327" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(.02304 0 0 .0147 26.361 37.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient3330" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-.02304 0 0 .0147 21.623 37.04)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient4039" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(.067325 0 0 .0147 -.34114 37.04)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient3170" x1="-51.786" x2="-51.786" y1="50.786" y2="2.9062" gradientTransform="matrix(.8075 0 0 .89472 59.41 -2.9773)" gradientUnits="userSpaceOnUse"> <stop stop-opacity=".31783" offset="0"/> <stop stop-opacity=".24031" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> </cc:Work> </rdf:RDF> </metadata> <g> <g> <rect x="7.7378" y="42.43" width="32.508" height="3.5701" fill="url(#linearGradient4039)" opacity=".3"/> <path d="m7.7378 42.43v3.5699c-1.1865 0.0067-2.8684-0.79982-2.8684-1.7852 0-0.98533 1.324-1.7847 2.8684-1.7847z" fill="url(#radialGradient3330)" opacity=".3"/> <path d="m40.246 42.43v3.5699c1.1865 0.0067 2.8684-0.79982 2.8684-1.7852 0-0.98533-1.324-1.7847-2.8684-1.7847z" fill="url(#radialGradient3327)" opacity=".3"/> </g> <path d="m7 1c7.7911 0 34 0.00274 34 0.00274l4.1e-5 42.997h-34v-43z" fill="url(#linearGradient3322)"/> </g> <g fill="none"> <path d="m6.5 0.49996c8.0203 0 35 3e-3 35 3e-3l3.7e-5 43.997h-35v-44z" stroke="url(#linearGradient3170)" stroke-linejoin="round" stroke-width=".99992"/> <path d="m40.5 43.5h-33v-42h33z" stroke="url(#linearGradient3988)" stroke-linecap="round" stroke-linejoin="round"/> <path d="m11 8.5h2.3438zm2.6875 0h2.1875zm2.5312 0h1.9375zm2.25 0h0.84375zm1.1875 0h1.875zm2.25 0h4.9375zm5.25 0h3.7812zm4.0938 0h1.1562zm-20.25 2h3.6562zm4.0625 0h1.75zm2.0625 0h0.875zm1.2188 0h1.5938zm1.9375 0h1.625zm1.9375 0h2.5938zm2.9375 0h3.375zm3.6875 0h2.25zm2.5625 0h0.5625zm-20.406 1.9844h3.0938zm3.4062 0h5.0625zm5.375 0h2.4688zm2.7812 0h2.3125zm2.625 0h1.9688zm2.2812 0 3.0938 0.03125zm3.375 0.03125h5.0312zm-19.844 1.9844h4.2812zm4.625 0h4.625zm4.9375 0h1.8438zm2.1562 0h4.3438zm4.625 0h2.9688zm3.3125 0h1.1875zm1.5 0h0.65625zm1 0h1.8438zm-22.156 2h1.5938zm2.0938 0h5.9062zm-2.0938 3.9844h3.0938zm3.4062 0h5.0625zm5.375 0h2.4688zm2.7812 0h2.3125zm2.625 0h1.9688zm2.2812 0 3.0938 0.03125zm3.375 0.03125h5.0312zm-19.844 1.9844h2.3438zm2.6875 0h2.1562zm2.5312 0h1.9375zm2.25 0h0.84375zm1.1875 0h1.875zm2.25 0h4.9062zm5.25 0h3.75zm4.0625 0h1.1875zm1.5 0h2.8125zm-21.719 2h3.9375zm4.25 0h4.2188zm4.5312 0h1.625zm1.9375 0h3.9688zm4.2812 0h5zm5.3438 0h1.8438zm-20.344 2h4.2812zm4.625 0h4.625zm4.9375 0h1.8438zm2.1562 0h4.3438zm4.625 0h2.9688zm3.3125 0h1.1875zm1.5 0h0.65625zm1 0h1.8438zm-22.156 2h3.6562zm4.0625 0h1.75zm2.0625 0h0.875zm1.2188 0h1.5938zm1.9375 0h1.625zm1.9375 0h2.5938zm2.9375 0h3.375zm3.6875 0h2.25zm2.5625 0h0.5625zm-20.406 3.9844h3.0938zm3.4062 0h5.0625zm5.375 0h2.4688zm2.7812 0h2.3125zm2.625 0h1.9688zm2.2812 0 3.0938 0.03125zm3.375 0.03125h5.0312zm-19.844 1.9844h3.6562zm4.0625 0h1.75zm2.0625 0h0.875zm1.2188 0h1.5938zm1.9375 0h1.625zm1.9375 0h2.5938zm2.9375 0h3.375zm3.6875 0h2.25zm2.5625 0h0.5625zm-20.406 2h3.875zm4.2188 0h1.2188zm1.5312 0h2.7812zm3.0938 0h4.0938zm4.4375 0h2.7812zm3.0625 0h0.59375zm0.90625 0h3.5312zm3.9062 0h1.8438zm-21.156 2h3.875zm4.2188 0h1.75zm2.0625 0h2.75zm3.0625 0h2.9688zm3.3125 0h1.1875zm1.5 0h0.65625zm1 0h1.8438z" stroke="url(#linearGradient8896)" stroke-width="1px"/> </g> <g> <path d="m2.5 7.5 33 33h-33v-33zm6.9683 18.032v8h8l-8-8z" color="#000000" fill="#81d72c" fill-opacity=".58824" fill-rule="evenodd" stroke="#4e9a06" stroke-linejoin="round"/> <path d="m3.4683 10v29.532h29.532l-29.532-29.532z" fill="none" opacity=".5" stroke="url(#linearGradient4276)" stroke-width="1px"/> <path d="m8.4683 22.532v12h11" fill="none" opacity=".5" stroke="url(#linearGradient4278)" stroke-width="1px"/> </g> <g> <path d="m2.9683 12.032h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1z" color="#000000" opacity=".15"/> <path d="m2.9683 13.032h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1zm0 3h2v1h-2v-1z" color="#000000" fill="#fff" opacity=".15"/> <path d="m30.968 38.032v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1z" color="#000000" opacity=".15"/> <path d="m29.968 38.032v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1zm-3 0v2h-1v-2h1z" color="#000000" fill="#fff" opacity=".15"/> </g> <path d="m6.5 41.5h29" fill="none" opacity=".3" stroke="#85f619" stroke-linecap="square" stroke-width="1px"/> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-open.svg���������������������������������0000644�0001750�0000144�00000023756�15104114162�024400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient8234" cx="8.8244" cy="3.7561" r="37.752" gradientTransform="matrix(.96827 0 0 1.0467 44.365 -17.007)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a3a3a3" offset="0"/> <stop stop-color="#4c4c4c" offset="1"/> </radialGradient> <linearGradient id="linearGradient8236" x1="25.875" x2="25.25" y1="10.625" y2="30.875" gradientTransform="matrix(1 0 0 1.2388 0 -7.8806)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#a8a8a8" offset=".5"/> <stop stop-color="#cdcdcd" offset="1"/> </linearGradient> <linearGradient id="linearGradient155" x1="19.116" x2="19.427" y1="28.946" y2="51.913" gradientTransform="scale(1.4215 .70346)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient156" x1="14.899" x2="22.715" y1="27.06" y2="41.837" gradientTransform="matrix(1.5353 0 0 .65134 3.4514 2.448)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".13402" offset="0"/> <stop stop-color="#fff" stop-opacity=".051546" offset="1"/> </linearGradient> <linearGradient id="linearGradient158" x1="5.2658" x2="8.2122" y1="18.726" y2="52.626" gradientTransform="matrix(1.4627 0 .069079 .68367 0 0)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" stop-opacity=".7006" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient159" cx="26.107" cy="38.195" r="32.26" gradientTransform="matrix(1.0156 0 .1031 1.0005 0 -.083695)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a0a0a0" offset="0"/> <stop stop-color="#a8a8a8" offset="1"/> </radialGradient> <linearGradient id="linearGradient13162" x1="22.176" x2="22.065" y1="36.988" y2="32.05" gradientTransform="matrix(1 0 0 1.0221 52.057 -1.323)" gradientUnits="userSpaceOnUse"> <stop stop-color="#6194cb" offset="0"/> <stop stop-color="#729fcf" offset="1"/> </linearGradient> <linearGradient id="linearGradient13848" x1="22.25" x2="19.75" y1="37.625" y2="14.875" gradientUnits="userSpaceOnUse"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>Folder Icon Accept</dc:title> <dc:date>2005-01-31</dc:date> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> <dc:source>http://jimmac.musichall.cz</dc:source> <dc:description>Active state - when files are being dragged to.</dc:description> <dc:publisher> <cc:Agent> <dc:title>Novell, Inc.</dc:title> </cc:Agent> </dc:publisher> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <path d="m4.62 38.651c0.041808 0.42046 0.49739 0.84091 0.91116 0.84091h31.136c0.41377 0 0.78573-0.42045 0.74392-0.84091l-2.6966-27.119c-0.041808-0.42045-0.49739-0.84091-0.91116-0.84091h-12.723c-0.59055 0-1.2091-0.37955-1.4029-0.96034l-1.103-3.3059c-0.16925-0.50728-0.54715-0.73579-1.3145-0.73579h-14.937c-0.41377 0-0.78573 0.42045-0.74392 0.84091l3.0415 32.121z" color="#000000" fill="url(#radialGradient159)" stroke="#5a5a5a" stroke-linecap="round" stroke-linejoin="round"/> <g fill="#729fcf" stroke="#000" stroke-linecap="round" stroke-linejoin="round"> <path d="m3.3386 17.533h31.15" color="#000000" opacity=".11364"/> <path d="m5.3302 37.533h29.988" color="#000000" opacity=".11364"/> <path d="m5.3302 35.533h29.988" color="#000000" opacity=".11364"/> </g> <g transform="matrix(.021652 0 0 .019038 42.415 36.934)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g> <path d="m6.1718 38.419c0.031356 0.31033-0.15462 0.51721-0.4754 0.41377-0.32078-0.10344-0.54857-0.31033-0.57992-0.62065l-3.0296-31.367c-0.031356-0.31033 0.15659-0.49772 0.46692-0.49772l14.75-0.091446c0.53128-0.0032938 0.73943 0.053306 0.8798 0.51721 0 0 1.0854 3.1128 1.2462 3.6981l-1.5556-2.917c-0.26518-0.49726-0.59874-0.41377-0.97279-0.41377h-13.129c-0.31033 0-0.49631 0.20688-0.46495 0.51721l2.9788 30.865-0.11389-0.10344z" color="#000000" display="block" fill="url(#linearGradient158)"/> <g stroke="#000"> <path d="m2.3052 7.5335h14.784" color="#000000" fill="#729fcf" opacity=".11364" stroke-linecap="round" stroke-linejoin="round"/> <path d="m2.7573 11.533h30.739" color="#000000" fill="#729fcf" opacity=".11364" stroke-linecap="round" stroke-linejoin="round"/> <g transform="matrix(1.0344 0 .10452 1.0344 -10.032 2.6319)" display="block" fill="#fff" fill-opacity=".58031"> <path d="m41.786 9.0364c0.009626-0.47458 0.015189-0.72451-0.42339-0.7242l-12.556 0.0086572c-0.3 0-0.32461-0.14321 0 0s1.2471 0.65827 2.1827 0.70099c0 0 10.796 0.016463 10.797 0.014551z" stroke="none"/> </g> </g> </g> <g fill="#729fcf" stroke="#000" stroke-linecap="round" stroke-linejoin="round"> <path d="m3.1629 15.533h30.831" color="#000000" opacity=".11364"/> <path d="m5.1595 33.533h29.988" color="#000000" opacity=".11364"/> <g> <path d="m4.8658 31.533h30.109" color="#000000" opacity=".11364"/> <path d="m4.6336 29.533h30.169" color="#000000" opacity=".11364"/> <path d="m4.463 27.533h30.169" color="#000000" opacity=".11364"/> </g> <path d="m4.2557 25.533h30.205" color="#000000" opacity=".11364"/> <path d="m4.0235 23.533h30.266" color="#000000" opacity=".11364"/> <path d="m3.8528 21.533h30.266" color="#000000" opacity=".11364"/> </g> <g transform="matrix(1.0344 0 .10452 1.0344 -10.032 2.6319)" display="block" fill="#fff" fill-opacity=".58031" stroke="#000"> <path d="m41.786 9.0364c0.009626-0.47458 0.015189-0.72451-0.42339-0.7242l-12.556 0.0086572c-0.3 0-0.32461-0.14321 0 0s1.2471 0.65827 2.1827 0.70099c0 0 10.796 0.016463 10.797 0.014551z" stroke="none"/> </g> <g fill="#729fcf" stroke="#000" stroke-linecap="round" stroke-linejoin="round"> <path d="m2.9642 13.533h31.027" color="#000000" opacity=".11364"/> <path d="m3.6514 19.533h30.296" color="#000000" opacity=".11364"/> <path d="m2.5243 9.5335h15.281" color="#000000" opacity=".11364"/> </g> <path d="m34.375 14.125 2.625 24.625-31 0.125-1.875-24.75h30.25z" color="#000000" display="block" fill="url(#linearGradient13848)" opacity=".39205"/> <g> <path d="m43.375 2.4944c0.5 16.879-9.0751 18.528-6.0126 29 0 0-31.487 0.88594-31.487 0.88594-1.875-12.853 8.375-21.215 5.375-29.731l32.125-0.15485z" color="#000000" display="block" fill="url(#linearGradient8236)" stroke="url(#radialGradient8234)"/> <path d="m15.438 6.5625h23.562" color="#000000" display="block" fill="none" stroke="#a1a1a1"/> <path d="m5.7786 39.066c0.10344 0.21147 0.31033 0.42293 0.62065 0.42293h33.308c0.20689 0 0.52116-0.1263 0.70817-0.26435 0.5304-0.39154 0.65486-0.61238 0.89278-0.97347 2.4481-3.7155 5.8051-19.277 5.8051-19.277 0.10344-0.21146-0.10344-0.42292-0.41377-0.42292h-34.924c-0.31033 0-1.656 16.107-4.863 19.287l-1.2382 1.2277h0.10344z" color="#000000" display="block" fill="url(#linearGradient13162)" stroke="#3465a4" stroke-linejoin="round"/> <path d="m15.356 8.5625h19.725" color="#000000" display="block" fill="none" stroke="#a1a1a1"/> </g> <path d="m13.134 20.139c-0.77275 4.9908-1.5013 9.0092-2.716 13.514 2.3865-0.70711 7.1161-3.2045 17.116-3.2045s16.724-9.2487 17.652-10.354l-32.052 0.044194z" fill="url(#linearGradient156)" fill-rule="evenodd"/> <g fill="none"> <path d="m15.143 10.562h24.315" color="#000000" display="block" stroke="#a1a1a1"/> <path d="m45.82 19.688h-33.158s-2.1477 16.02-4.7223 18.241c8.1211 0 31.571-0.048636 31.591-0.048636 1.7517 0 4.9076-12.636 6.2898-18.192z" color="#000000" opacity=".52273" stroke="url(#linearGradient155)" stroke-linecap="round" stroke-width="1px"/> <g stroke="#a1a1a1"> <path d="m14.399 12.562h23.853" color="#000000" display="block"/> <path d="m13.629 14.562h23.346" color="#000000" display="block"/> <path d="m12.521 16.562h18.646" color="#000000" display="block"/> </g> </g> <path d="m6.375 31.75c-1.2414-12.238 7.1875-19.062 5.625-28.75h30.875l-30 0.625c1.25 9.5625-6.1964 14.646-6.5 28.125z" color="#000000" display="block" fill="#fff"/> </svg> ������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-new.svg����������������������������������0000644�0001750�0000144�00000013333�15104114162�024216� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <radialGradient id="radialGradient5031" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(-2.7744 0 0 1.9697 112.76 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5060"> <stop offset="0"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient5029" cx="605.71" cy="486.65" r="117.14" gradientTransform="matrix(2.7744 0 0 1.9697 -1891.6 -872.89)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient5060"/> <linearGradient id="linearGradient5027" x1="302.86" x2="302.86" y1="366.65" y2="609.51" gradientTransform="matrix(2.7744 0 0 1.9697 -1892.2 -872.89)" gradientUnits="userSpaceOnUse"> <stop stop-opacity="0" offset="0"/> <stop offset=".5"/> <stop stop-opacity="0" offset="1"/> </linearGradient> <radialGradient id="radialGradient278" cx="55" cy="125" r="14.375" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff520" stop-opacity=".89109" offset=".5"/> <stop stop-color="#fff300" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient15656" cx="8.8244" cy="3.7561" r="37.752" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#a3a3a3" offset="0"/> <stop stop-color="#4c4c4c" offset="1"/> </radialGradient> <radialGradient id="radialGradient15658" cx="33.967" cy="35.737" r="86.708" gradientTransform="scale(.96049 1.0411)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fafafa" offset="0"/> <stop stop-color="#bbb" offset="1"/> </radialGradient> <radialGradient id="radialGradient15668" cx="8.1436" cy="7.2679" r="38.159" gradientTransform="matrix(.96827 0 0 1.0328 3.3536 .64645)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#f8f8f8" offset="1"/> </radialGradient> <radialGradient id="radialGradient2283" cx="20.892" cy="114.57" r="5.256" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> <radialGradient id="radialGradient2285" cx="20.892" cy="64.568" r="5.257" gradientTransform="matrix(.2297 0 0 .2297 4.6135 3.9798)" gradientUnits="userSpaceOnUse"> <stop stop-color="#F0F0F0" offset="0"/> <stop stop-color="#9a9a9a" offset="1"/> </radialGradient> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title>New Document</dc:title> <dc:creator> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:creator> <dc:source>http://jimmac.musichall.cz</dc:source> <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(.021652 0 0 .014857 43.008 42.685)"> <rect x="-1559.3" y="-150.7" width="1339.6" height="478.36" color="black" fill="url(#linearGradient5027)" opacity=".40206"/> <path d="m-219.62-150.68v478.33c142.87 0.90045 345.4-107.17 345.4-239.2 0-132.03-159.44-239.13-345.4-239.13z" color="black" fill="url(#radialGradient5029)" opacity=".40206"/> <path d="m-1559.3-150.68v478.33c-142.87 0.90045-345.4-107.17-345.4-239.2 0-132.03 159.44-239.13 345.4-239.13z" color="black" fill="url(#radialGradient5031)" opacity=".40206"/> </g> <g> <rect x="6.6036" y="3.6464" width="34.875" height="40.92" ry="1.149" color="#000000" display="block" fill="url(#radialGradient15658)" stroke="url(#radialGradient15656)" stroke-linecap="round" stroke-linejoin="round"/> <rect x="7.6661" y="4.5839" width="32.776" height="38.946" rx=".14905" ry=".14905" color="#000000" display="block" fill="none" stroke="url(#radialGradient15668)" stroke-linecap="round" stroke-linejoin="round"/> <g transform="translate(.64645 -.037989)"> <g transform="matrix(.2297 0 0 .2297 4.9671 4.245)" fill="#fff"> <path d="m23.428 113.07c0 1.973-1.6 3.572-3.573 3.572-1.974 0-3.573-1.6-3.573-3.572 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> <path d="m23.428 63.07c0 1.973-1.6 3.573-3.573 3.573-1.974 0-3.573-1.6-3.573-3.573 0-1.974 1.6-3.573 3.573-3.573s3.573 1.6 3.573 3.573z"/> </g> <path d="m9.995 29.952c0 0.4532-0.36752 0.8205-0.82073 0.8205-0.45343 0-0.82073-0.36752-0.82073-0.8205 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2283)"/> <path d="m9.995 18.467c0 0.4532-0.36752 0.82073-0.82073 0.82073-0.45343 0-0.82073-0.36752-0.82073-0.82073 0-0.45343 0.36752-0.82073 0.82073-0.82073 0.4532 0 0.82073 0.36752 0.82073 0.82073z" fill="url(#radialGradient2285)"/> </g> <path d="m11.506 5.4943v37.907" fill="none" stroke="#000" stroke-opacity=".017544" stroke-width=".98855"/> <path d="m12.5 5.0205v38.018" fill="none" stroke="#fff" stroke-opacity=".20468"/> <path transform="matrix(.78329 0 0 .78329 -6.3409 -86.652)" d="m69.375 125a14.375 14.375 0 1 1-28.75 0 14.375 14.375 0 1 1 28.75 0z" color="#000000" display="block" fill="url(#radialGradient278)"/> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/document-edit.svg���������������������������������0000644�0001750�0000144�00000022404�15104114162�024351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient3240"> <stop stop-color="#3e3e3e" offset="0"/> <stop stop-color="#828282" offset=".5"/> <stop stop-color="#3c3c3c" offset="1"/> </linearGradient> <linearGradient id="linearGradient3223"> <stop stop-color="#999" offset="0"/> <stop stop-color="#fff" offset=".5"/> <stop stop-color="#777" offset="1"/> </linearGradient> <linearGradient id="linearGradient3265-3" x1="23.576" x2="23.576" y1="25.357" y2="31.211" gradientTransform="matrix(1.1993 -1.2062 1.2307 1.2255 -36.004 13.885)" gradientUnits="userSpaceOnUse"> <stop stop-color="#ad5f00" offset="0"/> <stop stop-color="#ffe16b" offset=".13483"/> <stop stop-color="#f9c440" offset=".20224"/> <stop stop-color="#fff394" offset=".26966"/> <stop stop-color="#f9c440" offset=".4465"/> <stop stop-color="#f9c440" offset=".57114"/> <stop stop-color="#ffe16b" offset=".72038"/> <stop stop-color="#ad5f00" offset="1"/> </linearGradient> <linearGradient id="linearGradient1462" x1="23.576" x2="23.576" y1="25.357" y2="31.211" gradientTransform="matrix(1.3228 -1.3288 1.3575 1.3501 705.52 -6.3492)" gradientUnits="userSpaceOnUse"> <stop stop-color="#555761" offset="0"/> <stop stop-color="#d4d4d4" offset=".13483"/> <stop stop-color="#abacae" offset=".20224"/> <stop stop-color="#fafafa" offset=".26966"/> <stop stop-color="#abacae" offset=".4465"/> <stop stop-color="#abacae" offset=".57114"/> <stop stop-color="#d4d4d4" offset=".72038"/> <stop stop-color="#7e8087" offset="1"/> </linearGradient> <linearGradient id="linearGradient3268-0" x1="9" x2="9" y1="29.057" y2="26.03" gradientTransform="matrix(1.2854 -1.2912 1.5886 1.58 -46.995 7.9571)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff394" offset="0"/> <stop stop-color="#fafafa" offset="1"/> </linearGradient> <linearGradient id="linearGradient3270-1" x1="5.5179" x2="9.5221" y1="37.372" y2="41.392" gradientTransform="matrix(1.08 0 0 1.0787 -1.878 -.97999)" gradientUnits="userSpaceOnUse"> <stop stop-color="#d48e15" offset="0"/> <stop stop-color="#ad5f00" offset="1"/> </linearGradient> <linearGradient id="linearGradient980" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -39.961 8.1492)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3240"/> <linearGradient id="linearGradient982" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -40.295 8.4849)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3223"/> <linearGradient id="linearGradient984" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -38.802 6.9828)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3240"/> <linearGradient id="linearGradient986" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -39.135 7.3185)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3223"/> <linearGradient id="linearGradient988" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -37.636 5.8108)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3240"/> <linearGradient id="linearGradient990" x1="30.038" x2="30.038" y1="24.99" y2="30" gradientTransform="matrix(1.1654 -1.1721 1.4403 1.4342 -37.97 6.1464)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient3223"/> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g transform="translate(-.0012618 -.00824)"> <g> <path d="m40.536 38c-0.38689-0.0046-0.69723 0.0365-0.90635 0.08021l-27.847 5.8019-5.1256 1.0695-0.15627 0.026738-6.5007 3.0213 14.595-1.3369 0.12502-0.02674 5.1568-1.0695 27.847-5.8287c0.83647-0.17484-0.29232-0.68626-2.5315-1.1497-1.6794-0.34758-3.4961-0.57454-4.6568-0.58822z" fill-rule="evenodd" opacity=".15"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m8.5763 31.492c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l29.244-29.411c0.74247-0.74673-0.26564-2.9615-2.2532-4.9408-1.9876-1.9792-4.2057-2.9771-4.9482-2.2304z" fill="url(#linearGradient3265-3)" stroke="#ad5f00" stroke-linejoin="round" stroke-width=".90716"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m8.5763 31.492c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l20.139-20.255 0.07284-0.07325c0.0024-0.0031-0.04731-0.04172-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.07284 0.07325-20.139 20.255z" fill="#f9c440" opacity=".6"/> </g> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m8.5763 31.492c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l29.244-29.411c0.74247-0.74673-0.26564-2.9615-2.2532-4.9408-1.9876-1.9792-4.2057-2.9771-4.9482-2.2304z" fill="none" stroke="#ad5f00" stroke-linejoin="round" stroke-width=".90716"/> <g> <path transform="translate(-747.66 20.134)" d="m787.83-19.623c-0.37879-0.02145-0.68393 0.06387-0.88867 0.26953l-9.9629 10.008c0.88897-0.68331 3.2521 0.42375 5.377 2.5371 2.1198 2.1083 3.1866 4.4157 2.5176 5.3125-3e-3 0.00342 0.0515 0.047366 0.0488 0.050781l9.9629-10.008c0.81896-0.82264-0.29399-3.2629-2.4863-5.4434-1.6442-1.6353-3.432-2.6622-4.5684-2.7266z" fill="url(#linearGradient1462)" stroke="#555761" stroke-linejoin="round"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m34.251 5.6705c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l3.569-3.5894 0.07284-0.073254c0.0024-0.00306-0.04732-0.041724-0.04501-0.044821 0.60655-0.81401-0.35924-2.909-2.2811-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.07284 0.073254-3.569 3.5894z" fill="#fe9ab8" opacity=".9" stroke="#de3e80" stroke-linejoin="round" stroke-width=".90716"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m30.251 9.6938c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04731-0.04172-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.36418 0.36627z" fill="url(#linearGradient980)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m29.917 10.03c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04732-0.04172-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036z" fill="url(#linearGradient982)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m31.41 8.5274c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04731-0.04172-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036z" fill="url(#linearGradient984)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m31.077 8.8631c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04731-0.04172-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.36418 0.36627z" fill="url(#linearGradient986)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m32.576 7.3554c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04731-0.04173-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.36418 0.36627z" fill="url(#linearGradient988)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m32.242 7.691c0.80594-0.62026 2.9489 0.3853 4.8753 2.3036 1.9218 1.9138 2.8876 4.0087 2.281 4.8227-0.0023 0.0031 0.04736 0.04176 0.04501 0.04482l0.36418-0.36627c0.0024-0.0031-0.04732-0.04173-0.04501-0.04482 0.60656-0.81401-0.35923-2.909-2.281-4.8227-1.9264-1.9183-4.0694-2.9239-4.8753-2.3036l-0.36418 0.36627z" fill="url(#linearGradient990)"/> <path d="m0.5 47.5 14.312-6.3438 0.125-0.125c0.66904-0.89676-0.41145-3.2042-2.5312-5.3125-2.1249-2.1134-4.486-3.2146-5.375-2.5312z" fill="url(#linearGradient3268-0)" fill-rule="evenodd" stroke="url(#linearGradient3270-1)"/> <path transform="matrix(1.103 0 0 1.1017 -2.4284 -1.511)" d="m4.2588 40.97-1.6041 3.5051 3.5394-1.5778c-0.26434-0.32226-0.50703-0.65069-0.82734-0.96965-0.36875-0.36721-0.73431-0.66229-1.108-0.9576z" fill-rule="evenodd" stroke="#000" stroke-width=".90716"/> </g> </g> </svg> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/copy-right-to-left.svg����������������������������0000644�0001750�0000144�00000013141�15104114162�025243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2259"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2230" x1="35.997" x2="33.665" y1="40.458" y2="37.771" gradientTransform="translate(6.1618 4.0334)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7c7c7c" offset="0"/> <stop stop-color="#b8b8b8" offset="1"/> </linearGradient> <linearGradient id="linearGradient2257" x1="33.396" x2="34.17" y1="36.921" y2="38.07" gradientTransform="translate(6.1618 3.6584)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient13651" x1="26.076" x2="30.811" y1="26.697" y2="42.007" gradientTransform="matrix(.99942 0 0 1 5.9913 4.0334)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <linearGradient id="linearGradient13653" x1="22.308" x2="35.785" y1="18.992" y2="39.498" gradientTransform="matrix(1.0672 0 0 .98928 4.3917 4.0352)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0f0ef" offset="0"/> <stop stop-color="#e8e8e8" offset=".59929"/> <stop stop-color="#fff" offset=".82759"/> <stop stop-color="#d8d8d3" offset="1"/> </linearGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 0 16.873)" gradientUnits="userSpaceOnUse"> <stop stop-color="#282828" offset="0"/> <stop stop-color="#282828" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2597" cx="22.292" cy="32.798" r="16.956" gradientTransform="matrix(.84302 0 0 1.0202 4.4993 1.382)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eb514a" offset="0"/> <stop stop-color="#e41309" offset="1"/> </radialGradient> <radialGradient id="radialGradient8656" cx="19.701" cy="2.8969" r="17.171" gradientTransform="matrix(2.0467 0 0 1.5576 -19.518 3.4521)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <clipPath id="clipPath1178"> <rect x="7.1577" y="-3.6674" width="22.981" height="75.13" rx="66.452" ry="8.1317" fill="#ffd255" stroke="#733a04"/> </clipPath> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2005-10-15</dc:date> <dc:creator> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>copy</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(-1.1155 0 0 1 37.734 -8.0009)" clip-path="url(#clipPath1178)"> <path d="m15.073 10.501h29.856c0.31574 0 0.56993 0.25309 0.56993 0.56747v27.167c0 2.4765-6.8798 8.3031-9.2679 8.3031h-21.158c-0.31574 0-0.56993-0.25309-0.56993-0.56747v-34.903c0-0.31438 0.25419-0.56747 0.56993-0.56747z" fill="url(#linearGradient13653)" fill-rule="evenodd" stroke="#888a85"/> <g> <rect x="15.503" y="11.5" width="28.997" height="34.041" rx="0" ry="0" fill="none" stroke="url(#linearGradient13651)"/> <path d="m36.221 46.537c2.0304 0.3299 9.5888-4.5299 9.2844-8.4978-1.5633 2.4231-4.7585 1.2867-8.8673 1.4457 0 0 0.39537 6.5521-0.41713 7.0521z" color="#000000" fill="url(#linearGradient2230)" fill-rule="evenodd" stroke="#868a84"/> <path d="m37.671 44.345c1.3698-0.68383 4.4282-2.1465 5.7276-4.0275-1.5961 0.68006-2.9478 0.2095-5.7023 0.1904 0 0 0.16232 3.0621-0.0253 3.8371z" color="#000000" fill="none" opacity=".36932" stroke="url(#linearGradient2257)"/> </g> <g fill-rule="evenodd"> <rect x="20" y="19.033" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="23.033" width="19.992" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="27.033" width="17.977" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="31.033" width="21" height="2" color="#000000" opacity=".17045"/> </g> </g> <g transform="matrix(-1 0 0 1 49.566 -.24771)"> <g fill-rule="evenodd"> <ellipse transform="matrix(1.2712 0 0 1.2712 -8.1194 -15.102)" cx="24.837" cy="36.421" rx="15.645" ry="8.3969" color="#000000" fill="url(#radialGradient8668)" opacity=".29946"/> <path d="m8.5542 15.517v16.994h12.984v8.545l19.96-16.906-20.079-17.025v8.3975z" color="#000000" fill="url(#radialGradient2597)" stroke="#bd0f06" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m21.962 8.2485v7.8065h-12.817v9.0407c17.75 2 16.634-7.4553 31.384-0.95529z" color="#000000" fill="url(#radialGradient8656)" opacity=".50802"/> </g> <path d="m9.5377 16.562v14.984h12.985v7.3952l17.478-14.796-17.494-14.78v7.2014z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/scalable/actions/copy-left-to-right.svg����������������������������0000644�0001750�0000144�00000013132�15104114162�025243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <svg width="48px" height="48px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <linearGradient id="linearGradient2259"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient2230" x1="35.997" x2="33.665" y1="40.458" y2="37.771" gradientTransform="translate(6.1618 4.0334)" gradientUnits="userSpaceOnUse"> <stop stop-color="#7c7c7c" offset="0"/> <stop stop-color="#b8b8b8" offset="1"/> </linearGradient> <linearGradient id="linearGradient2257" x1="33.396" x2="34.17" y1="36.921" y2="38.07" gradientTransform="translate(6.1618 3.6584)" gradientUnits="userSpaceOnUse"> <stop stop-color="#fff" offset="0"/> <stop stop-color="#fff" stop-opacity="0" offset="1"/> </linearGradient> <linearGradient id="linearGradient13651" x1="26.076" x2="30.811" y1="26.697" y2="42.007" gradientTransform="matrix(.99942 0 0 1 5.9913 4.0334)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <linearGradient id="linearGradient13653" x1="22.308" x2="35.785" y1="18.992" y2="39.498" gradientTransform="matrix(1.0672 0 0 .98928 4.3917 4.0352)" gradientUnits="userSpaceOnUse"> <stop stop-color="#f0f0ef" offset="0"/> <stop stop-color="#e8e8e8" offset=".59929"/> <stop stop-color="#fff" offset=".82759"/> <stop stop-color="#d8d8d3" offset="1"/> </linearGradient> <radialGradient id="radialGradient8668" cx="24.837" cy="36.421" r="15.645" gradientTransform="matrix(1 0 0 .53672 0 16.873)" gradientUnits="userSpaceOnUse"> <stop stop-color="#282828" offset="0"/> <stop stop-color="#282828" stop-opacity="0" offset="1"/> </radialGradient> <radialGradient id="radialGradient2597" cx="22.292" cy="32.798" r="16.956" gradientTransform="matrix(.84302 0 0 1.0202 4.4993 1.382)" gradientUnits="userSpaceOnUse"> <stop stop-color="#eb514a" offset="0"/> <stop stop-color="#e41309" offset="1"/> </radialGradient> <radialGradient id="radialGradient8656" cx="19.701" cy="2.8969" r="17.171" gradientTransform="matrix(2.0467 0 0 1.5576 -19.518 3.4521)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient2259"/> <clipPath id="clipPath1178"> <rect x="7.1577" y="-3.6674" width="22.981" height="75.13" rx="66.452" ry="8.1317" fill="#ffd255" stroke="#733a04"/> </clipPath> </defs> <metadata> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2005-10-15</dc:date> <dc:creator> <cc:Agent> <dc:title>Andreas Nilsson</dc:title> </cc:Agent> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>edit</rdf:li> <rdf:li>copy</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/"/> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/> <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/> <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/> </cc:License> </rdf:RDF> </metadata> <g transform="matrix(1.1155 0 0 1 12.379 -8.0009)" clip-path="url(#clipPath1178)"> <path d="m15.073 10.501h29.856c0.31574 0 0.56993 0.25309 0.56993 0.56747v27.167c0 2.4765-6.8798 8.3031-9.2679 8.3031h-21.158c-0.31574 0-0.56993-0.25309-0.56993-0.56747v-34.903c0-0.31438 0.25419-0.56747 0.56993-0.56747z" fill="url(#linearGradient13653)" fill-rule="evenodd" stroke="#888a85"/> <g> <rect x="15.503" y="11.5" width="28.997" height="34.041" rx="0" ry="0" fill="none" stroke="url(#linearGradient13651)"/> <path d="m36.221 46.537c2.0304 0.3299 9.5888-4.5299 9.2844-8.4978-1.5633 2.4231-4.7585 1.2867-8.8673 1.4457 0 0 0.39537 6.5521-0.41713 7.0521z" color="#000000" fill="url(#linearGradient2230)" fill-rule="evenodd" stroke="#868a84"/> <path d="m37.671 44.345c1.3698-0.68383 4.4282-2.1465 5.7276-4.0275-1.5961 0.68006-2.9478 0.2095-5.7023 0.1904 0 0 0.16232 3.0621-0.0253 3.8371z" color="#000000" fill="none" opacity=".36932" stroke="url(#linearGradient2257)"/> </g> <g fill-rule="evenodd"> <rect x="20" y="19.033" width="21" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="23.033" width="19.992" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="27.033" width="17.977" height="2" color="#000000" opacity=".17045"/> <rect x="20" y="31.033" width="21" height="2" color="#000000" opacity=".17045"/> </g> </g> <g transform="translate(.54677 -.24771)"> <g fill-rule="evenodd"> <ellipse transform="matrix(1.2712 0 0 1.2712 -8.1194 -15.102)" cx="24.837" cy="36.421" rx="15.645" ry="8.3969" color="#000000" fill="url(#radialGradient8668)" opacity=".29946"/> <path d="m8.5542 15.517v16.994h12.984v8.545l19.96-16.906-20.079-17.025v8.3975z" color="#000000" fill="url(#radialGradient2597)" stroke="#bd0f06" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/> <path d="m21.962 8.2485v7.8065h-12.817v9.0407c17.75 2 16.634-7.4553 31.384-0.95529z" color="#000000" fill="url(#radialGradient8656)" opacity=".50802"/> </g> <path d="m9.5377 16.562v14.984h12.985v7.3952l17.478-14.796-17.494-14.78v7.2014z" color="#000000" fill="none" opacity=".48128" stroke="#fff" stroke-miterlimit="10"/> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/index.theme��������������������������������������������������������0000644�0001750�0000144�00000007441�15104114162�020020� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Icon Theme] Name=DCTheme Comment=Double Commander default theme Directories=8x8/emblems,16x16/actions,16x16/apps,16x16/devices,16x16/dirhotlist,16x16/emblems,16x16/mimetypes,16x16/places,20x20/actions,20x20/devices,20x20/emblems,20x20/mimetypes,24x24/actions,24x24/apps,24x24/devices,24x24/dirhotlist,24x24/emblems,24x24/mimetypes,24x24/places,32x32/actions,32x32/apps,32x32/devices,32x32/dirhotlist,32x32/emblems,32x32/mimetypes,32x32/places,40x40/actions,40x40/devices,40x40/emblems,40x40/mimetypes,48x48/actions,48x48/devices,48x48/emblems,48x48/mimetypes,48x48/places,60x60/actions,60x60/mimetypes,64x64/actions,64x64/devices,64x64/mimetypes,72x72/actions,72x72/mimetypes,96x96/actions,96x96/mimetypes,128x128/actions,128x128/mimetypes,scalable/actions,scalable/devices,scalable/emblems,scalable/mimetypes,scalable/places [8x8/emblems] Size=8 Context=Emblems Type=Threshold [16x16/actions] Size=16 Context=Actions Type=Threshold [16x16/apps] Size=16 Context=Applications Type=Threshold [16x16/devices] Size=16 Context=Devices Type=Threshold [16x16/dirhotlist] Size=16 Context=DirHotList Type=Threshold [16x16/emblems] Size=16 Context=Emblems Type=Threshold [16x16/mimetypes] Size=16 Context=MimeTypes Type=Threshold [16x16/places] Size=16 Context=Places Type=Threshold [20x20/actions] Size=20 Context=Actions Type=Threshold [20x20/devices] Size=20 Context=Devices Type=Threshold [20x20/emblems] Size=20 Context=Emblems Type=Threshold [20x20/mimetypes] Size=20 Context=MimeTypes Type=Threshold [24x24/actions] Size=24 Context=Actions Type=Threshold [24x24/apps] Size=24 Context=Applications Type=Fixed [24x24/devices] Size=24 Context=Devices Type=Threshold [24x24/dirhotlist] Size=24 Context=DirHotList Type=Threshold [24x24/emblems] Size=24 Context=Emblems Type=Threshold [24x24/mimetypes] Size=24 Context=MimeTypes Type=Threshold [24x24/places] Size=24 Context=Places Type=Threshold [32x32/actions] Size=32 Context=Actions Type=Threshold [32x32/apps] Size=32 Context=Applications Type=Threshold [32x32/devices] Size=32 Context=Devices Type=Threshold [32x32/dirhotlist] Size=32 Context=DirHotList Type=Threshold [32x32/emblems] Size=32 Context=Emblems Type=Threshold [32x32/mimetypes] Size=32 Context=MimeTypes Type=Threshold [32x32/places] Size=32 Context=Places Type=Threshold [40x40/actions] Size=40 Context=Actions Type=Threshold [40x40/devices] Size=40 Context=Devices Type=Threshold [40x40/emblems] Size=40 Context=Emblems Type=Threshold [40x40/mimetypes] Size=40 Context=MimeTypes Type=Threshold [48x48/actions] Size=48 Context=Actions Type=Threshold [48x48/devices] Size=48 Context=Devices Type=Threshold [48x48/emblems] Size=48 Context=Emblems Type=Threshold [48x48/mimetypes] Size=48 Context=MimeTypes Type=Threshold [48x48/places] Size=48 Context=Places Type=Threshold [60x60/actions] Size=60 Context=Actions Type=Threshold [60x60/mimetypes] Size=60 Context=MimeTypes Type=Threshold [64x64/actions] Size=64 Context=Actions Type=Threshold [64x64/devices] Size=64 Context=Devices Type=Threshold [64x64/mimetypes] Size=64 Context=MimeTypes Type=Threshold [72x72/actions] Size=72 Context=Actions Type=Threshold [72x72/mimetypes] Size=72 Context=MimeTypes Type=Threshold [96x96/actions] Size=96 Context=Actions Type=Threshold [96x96/mimetypes] Size=96 Context=MimeTypes Type=Threshold [128x128/actions] Size=128 Context=Actions Type=Threshold [128x128/mimetypes] Size=128 Context=MimeTypes Type=Threshold [scalable/actions] Size=48 MinSize=48 MaxSize=512 Context=Actions Type=Scalable [scalable/devices] Size=48 MinSize=48 MaxSize=512 Context=Devices Type=Scalable [scalable/emblems] Size=128 MinSize=60 MaxSize=512 Context=Emblems Type=Scalable [scalable/mimetypes] Size=128 MinSize=128 MaxSize=512 Context=MimeTypes Type=Scalable [scalable/places] Size=128 MinSize=60 MaxSize=512 Context=Places Type=Scalable �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016464� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020500� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000003605�15104114162�022711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8��LIDATx^[OI P^0:(1o"Wi?>%h4xWTw~njztu KN`zο9UGy|mbGPٱcGpo޼QRijzzRC$… Sl٢VVVN'uSO .7Dg5?f0 "ԯ_G|O$X^^H}"b;o&GeD4x"OA))!Ib 7[׀L)!OAX׀L)!OAG&!&&&.r>|^1V?~mܸQ~yfuV8+:::zɩ3g$ε�_|Q?V^RWnե7ٍ A(lÆ j׮]jZVҌ�SPoߪm?Vٳg* nD~5w훚[GhKׯ_W׮]UzI=FFFK.7oh1fMJnbOܹSjbppP0*{ !tD">4m۶I)'NP)cǎǏqB4/_n t 544y58ziL*_~1:gE^P޽k[&z^q49ȹ^L(ѵ@wމSub`۷'a}+f%ϟ?ú�q| mr}q�fc{8mzi\hu 8G�9RVRM7MSݬ.�8i=X {EbQe C8`bs̰.0Ġ^ę{] f2L%~:v=,lc]�@jE䤞*+)Ϟ=NwH+~/cM@afq- fG$Yi񏘮7j]`MctY\3&!)(MݻSW-(y!m%�7jq$J ` ASoݺUߵ%m"y_Gaʑ/I[ L~ .#?Oi'J[p5iz,%+ԬH,�L4ٶRftSYmڴ)ӿVD<|ȡia5DqZ�CUF =[6779cf;t8ee�m4RtY庐v#6L;釅 ur",#)b¼g˪ %1)F@&mgk@E1=Iq6m9Db$V\NB=zT[Ȭǂ+@k@LHf~a"E])(%dp/' \^=zypN�}8;_lp+Rps s;_jn]sΚ.iVH}" k~.>#l;IG0 Τ >)S:Պu޳z[J2kET^FD`kYgRίwSEp.�vL=|8S*/8%�]ORgȑ#1Ii*XQ蘒nA,>ց,LۆA,OJA85 "\;Rd/e ;L9p=d HPq*R# ~2�rKL&0{P3+RC$�iz[5|oQஆHG gϞszzoH‘b׹s/HGO<9[Q[\ۉ_^y\E$###˃=/@J^\˗/?x<OP?whp;����IENDB`���������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000004327�15104114162�023366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8��IDATx^iLI P."`0hԐxAvU?x!%&>>xD},j55x xᲠο005/yzL73?Uuu3OsSN V^^nK(,,mۖՑy̾|=z~܊0K/j  Ą.jkk7ޘp  s/ �MQ<Pፉd'xcZ�Gs'6" ~2^D1C.GؒccceU;x B2VRR-@LLngvڀ=FM@r.4se۷o.T4LewլD(ɓ'KEtWڵ$,ǥKجY؏?AInXXyӧOlr2j(jǙ_~OP˘1cرcTݻlΜ9,""kN7kӦ }P-�o-hذa,//7,;;UWWZ nggϞeQQQtܸqM>�zrs7^0/C aOf[&o_f̘aJ,oLt <XJ۷'o^fΜpp] wòCtF\|-\P"wN7^nW (k(ԩSlɒ%Mо_^z+W8lŚaŋ 8-0\�Э[7v5X7aժUԲ.\`WKHH`/^dIII_|sazjm;MK KJAiݺuԲ�Ə .>}7c۶mP-s. eb8߿�P;t-Eh UQlݺ޽Z�T&Ϝ9ÆJlٲE$jްHjM6#GPKtɍZJ!##A+Wx0N˖-١C^Yb$��"`?~x4DXl;wy�]OO.;wLz'yRU|2^s;v)SqP~97&Nq(|rj � @x3WMU gnTTTD>Hϗ=N Rټy|p 6HXV�lZti(icn~z;ԩS`w^ c {T;=cǒGí_^≳<1rHX nֆ$f ?|pc4^LAmسNkb 6_!Ȟ" ji oLL9aah"i+'U} iܱF/pٳ'Fc}T SP n@u<.U=_~1Ղ7UUU <.:v(ݻ7yoLL.tv)SX/\4z7ܹC+\Lr=|^!oL M_~n>y\ H}@=i{z1l#7n{"z.]dڼ!ZbH@'MĞ>}JYc~Ν.�2qDBC >\P=w:y{ᤴT ۷o7o̢c :bjSP<+˗i> 8  vo8SW^@!DJV @r-aÇ \t+EO'OH|$^#<͆ǏK,<�IMwp?L7Tςl^gA؅퀨n7ndԪsiNC4@; c$,Pf<p }VAC`0p;l@Zp T\7&= B:Ko?@lȥU$$$DF7E@1Al#r)B�FVx`n2A(\P5deensgSࢢwQVV*AJLLOMMԄ;N⁄_ϭ[ny/'ΤqqqQn� jGL*߽{7@ al����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000005320�15104114162�024460� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8�� IDATx^]$W룿gܙqDIT"( "}SC hḂ +J$ UP֐EA%*,,k:|twsﭯ[VUWߪ_~n׽svt;:uԩSN:uԩSN:u!Wmυ0bCwګV~ O9{ i{:\=ܘ lԡ`1ԡ8=NNüG8BN_x4|oD[b۴\ q0ıq 9;|y|/e@E-�s_k8a ֖#='b1aU H| 9pZ[oC½x <KOm+?G:.:PBḾ]Q\ߦA UR ps͍ b6p"=mtmp 'U9+x-?4yM;u\o~ZUN{|`y!-w_"J -'!ݲ.x9|?W*SP<13D򅢞oϳ 3N|FET>no0أ[4eѕ 薁Iڂ_|A*% tç74$']eUX J ~d筞<WvJ'=G9+ u"nӤk`H?>DS.UӋnnm|hhB�M,ӣ**M@7wisN '!uMUpp ?&~twz~ g>z"+2Mz&<wc]?'Q ڜ󆪑NN~!㦏h;{f9ۛ-'d4y&�Wcր3*ū~E+^T; VU xk`0 ~l"8dXr*E6t \[ ώ{ܠCA*}zo*yEx9|\ELw/ z=͘^Qw }RAі>Q"j-� ދ^ ?^z.|{?o^՟\t^+avMuīMGӋε?<7槠ѦXfRLH/<ik[Gx\QbSi9"&jmT .3m&[X0Ș�|@'5T\_TYr-`,d*U_vL{ʣbiR PA!3# 8%<eN2**SE8lFO"*S*&�;i򠪇G/~t <VP`MD{sJm"su'8;p߼N(C4Ԧ^`IOAQg}?_ѯF ߜG"}#G"%+A7 2ˎ@biRM8XU5;TD* QT 'W�3hUPYɺJƒ1:g+Cw>UHEͫ`κBFd5@S&MS rbiP W]GPyĝ`5ȾԤ6J^MPɭA@J ,A>I؇m*tPkFlCZThcU9iTVMW#`JcU_P֤t>3(zBV&U JX";5"숐*^-0u2\GtW s\3DF m P#R*+W(,LTt*I%7`4P`iJn´Q#XwtaED#UnWu8;�^l 2&PvTTMҔA=K#1˔�/.MM6KW"eJ@_`ipvK@7 Ŕ�>M+d_;V(}nD.\DX`KM ښGĞr>Ô��H_h@eN3svMtak*\Y0Oʩ6JFlUHkF'>VMy\}*@U*PL1˾Y'?m"=vM�uR("4" B(`O4E ;zH>w_`% $Bfl4PId{l,=t8I&5PX(pةoL0%l ȈKTԹckH͂U6ч <XARb� x'ч:F%!wTL�E[JrjMtOs-Gms 'GK4` J$I} $s3"tUfWє�bN3iEQWзLE{] MK_|y;wIXE|ǿ8�qPM~5ރssvlCF_(/a/( R6�w-D#N�%ۦJ@=+R28hZΔ�:JFVŏ@_DYSȔ)ȎQJ(ND .cꋂѩSk[k����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000014557�15104114162�026111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8��6IDATxilgo)HIe8sAsbgsC$^$";رIŮ@>&OAHL<3ovYIoRId}]]W>TwCꪷ?V=G#{dl/;_^}U^M؇~uiz3??ڋ݁=xw/0;+ώkc:ߠ ZA v_y ( [ą3pEY gG ~wv70 ^~o;C8u>c瘙Z@1CCB@@(ǜ9+W<,ƙ^R.?4$< oq _>R/YxhHx _q n.Y\]tzDg9do7D}^ XJJgƸE|TE|]AEg+Cw1^|'/? `*�aַ!@jÃ}>c<{qbO~5ӗh4?][*cG8C߇@psܘ[Ϝbjz$A"~߾c,UGX_a[IP(LߊHS#|D{TUÿcN0KgxŧG.=8$<=Z�8B$6H6I*0/[}MyJځ0l0 v$OB2?UMgr!|/<0$O뜮sklrvfm6<Kkq�i8I4`j!Sy_djzp\K" 0?;~ݡ�]TUG׍:0skCGy~ɩK!c:|N _^R8niَNdRG?ԝ^G+VKs$ ܽ>T/IvKmP[[-'Ԏuw 7S''Klw0:2ܘ_%)�Pa\�^k3th,FBQ6WB_ S|^p$댜4sk2^ɉh%�lƳ7(Vi38!iSx$Lc%Ö{v?Qrb|h#%#R^I(.X;L,ܳH8v N@-:Z�,Dd^$}n.Uɐ,dԶ#ib7>y_}k0 y^aĠ l1&.]a71W~~p4[{BaIF|uw''SA6_\QzmbI +*eY_"'f) &GAW91iL̇J6vY~΍ةA4M'-6T?N20 h*_;� Wt&d󥶽ٔJJ $vu)EGkN/}Ss6VWUSvrCyw9 p$P]nC~Ե1շ'<'8&;]}K:tº8h+\Vܾl a�3#l%Ju\ tq??Gz ^P{#'<ok:7m#f{4a5D7 ݨ'c<(gN/~O&e7Y4 BY,KF@POV-waݻEc4Do&WXHw`O>vv;1,/<u@I_-] oX$KJ !~Wd�J\Uv,'5w?B>!G9;:7}ap7R/~Dr$U {UU %yrbKVgGL@ !H ڪ(rSqb<B$FuژA2Kx'E7(cb/Xo3rb!LTi�>i/g7Up\* v3xX2&І .pd?.au"@Q4y#Il/] 3 `o+ %U-%wzw#Iݒ~/Kkqtݨzt?TK֢'Ē:M'9؞Hh�y [{Nr6, 0 YZ@ x<k?L,!˪{V 抲gHbHmv&'O (S aJ\ T+:5lL\&"�W׏z<|3ctw\rcfՌkK]k8JЧ3}d]'`?ی PQ4"˕&`7 L83d0Ό7| qm >p|j4~� 7~M> ;IBB!ӋJreoҢv9r]hrY7wsϞ'?>|ӠNٱIMHhjr1cxs]?/FU+W#eY[rȨ9^Ѷ`}D6H."q�N ˪%O(3k{`)\),~ rxu|.IJ%Ձt7&3?p'9,:Ýٝf7+,#t>gN%[>>~NGeV߻M8W]X_]K!r7|' n)A++]?Pt\ rA(3ؕ8@uj kIt"Ia&Qñsnp,DS܍$+!9G\ :O>0| E�Lxu핏>=�պ쿅ETt2ppkȺyp\�B,,m%-bj>B*SPٌ8"aq Uՙ5grMj?O.D\JE>?%Zừq0ƋJd0z($-'oˑ,+Ư/K$IU#F:lELҶs)$\-23^%ޗaImoSNl[eȹۍ,@zrEe#vv9,RHB6"l`r1Go_cB PG5*Znth,C8.%AT!fF??D(w$|8\B{hް ̑&H=6NEVZeu#Et+ZLDoWpw׀JL/3w;f,K6W#I P*+$Ӆ v86TMAu70 ZHԢ9r$BH䲹=_۞ҫ]~/ td HB|c= 35ca[ !)R-Oa34sQ9}ai_C_]%I(|MykN(eқlܝ0t^VKXYV(*J eY%MwoU[-lfrﲕH-sύV>U ("=}x$]^aYSuFP*+$>7NΝ`nU?={A`�\+VS5\]%1e' U$C~Ngʋ$I&Z##6)V!!�s*HK3d3 @Ng(|8炬rd;S(rfCB["'ѭ+| a͚ [?MeH�>Y $R. ͵fخckU( :F˳2 !h3' r`@G^{`˧[Ydt]8^_$QU]-pwy_R C�\' \R;]ܹnFFEQIgG3$Rz{q&+k&^Mk�+K'C*JO(c5!$aSQ5w7 HjWR|$|8W"AUf۹ܬ%n!'c.nvDp}0V=?LS*C~Ga WT]W9P;N}lF45sKuϏ% p^s#CAQdz ijkg>itΏ%R |G 7PQBR*{dV i A@7ْ$l]K�KwL%$6{ >$>.$ }GH$فoz?҉#oI X0lewnO&͹x➃�HYC;GueW"Mwtǻcqr93#!{thyS0 nO˦ &7ė|!a 0Gڶ%?87z0 LG.o�Bjc AA./ ULϏƒKe ØVvڏR.>4; 8R2IR3O2?L޾}=A:C~3ZGEʦܚ$31ވ%(K1,> "9NzJD%#[бsOcL(A&G`CBg#" b:V >Yi }Aӹ^ߧ23<4v0+˄BA2-zBQ U(d"tTDWW^=x%~ 2YN 3kw|3?g8@Hwo߉[d[.bt`P@ ʲB ͻlPGu 0 >%ۢRXߌS?^]Ͱ;ow޹n _Qݻo u2rʏ7犥]dR[x}>{ixbI~$ ]~B"0{읹_Hd~3ooFؽߺ {!9 MƗ?{bNr$R>f`7sڧ$q0&ʠܭ_q'C$t3dh$8ۺVhlCc $tQ(d5޾>ᗘA2Cٻll4m~q͕,Ao[ nd+ ѭ;=4<6ҙBDoOb\H Mה:zJ%7gWY߈ioU=Y[w*Sݼ. B.rb)Oc\`Kw&$W MSn7p=|?`p$*6<<6V#\"M20pc7g~?7gVWnN|drnAxXZ^ hJH CxNEzQ Tx^ ]@x<:ܞT4e7BND6!h6_HoN;r;gHgtwK̍e:sv&[^V޿\tMc#zCC!<l#=f\BS ،ʝ?Lf ~3-n�t̎ƑnCd$ #`9A2EU+KgL,k^�`VNnm34͈mͱs!<'2<=],G %TU^y?ebA;+;lӋ 4EEQ%d,AQTTUsҀdq}n|B bmsB 4MQ+:7F4rkr7V}خrV=wu["u~nwuk�`wq/-/u!ʹō A~N݀o6z3q�VLFnn[ja`=3 ~fen6nk|)݂_ݒFC{MsPe VUV[V$<G([ar����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020124� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000004201�15104114162�024667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8��� pHYs��X��Xm7���tEXtSoftware�www.inkscape.org<��IDATx]lND)&i T.ٵ6xiHE.*Hm,XHi(B]7euCiUŢ45(Dhdx)!%Qi P9}]dgvN\s={;޹s= BP( BP(K!+r̓M&<ǴQQD b�2A)4: cĦWߋЯ-Bh|e9]kچ|m;PozR!�slfˌ|%+`Sh%Zz< ELWGt4-=%Wz ETp;民#;ڃ  N=tIy`M&Ull`Շ"/64$6xSKJ`{.LUY@ d?cnQ2 U9 [Aх*=uu2'3ۍRC ~p8�`eCcUzl`' |*=H 08^تU3瀔9.L犮sA:+Yr*\Y�&|=@*TD("F 1M9G]%@("F 1JQD b�%@?L;sU]Il] �\�B��f�»`!൙n>/_m1Sꙷ"1�HxWa`T_O爭rfr/xZI)vݰ!T~@-2&a"�XKf&&\I^l"WAC)�� x6̜psC͕3o vˀYnxc(_ُi5zQטdBˤ甧ylY%C0 do9ʗ�]&rMk*=d0fM�f|iTƗ?/|X:OL|X&==]GѸԄk& =?uc!nIJFo\'�_u-)\) 鞻B/G6fTwLCqCEpHhc>-oHOLBM ߫ 1-cVN�#&&�FbL(kDrIi p9d"lLZLl2�[F_?vU[9σx93 Y`:_`1-A*A[skV` /XǯF|v0.GnτF|Wg#-@zx ~1LFr05ϝĭsO4wpJ>gnlH 0/A3p OH3 q3 >Y#js]:s͕0`Q 31J[:cU_P5{3�lkR̔h5z35qqò D$<-*7] 'զ?"�ƪ{.uqE$J $=f$`)NmY#-2s�2׾+̊p'1KLuhֈFIn2kꖰ-D|LV9,?3E7 Y `~4%! KO_^v2l^eND4/GN> 4ݦflJϮP&\CLi {?ZMT 2<24^J{ \[sL:o8P|@ u~։Dq0jZ)n&<[-͘=*ULOf\?oZK[m zN> )@+k@.�e˖o& [2%[mi—GMݒFz;` Wu )-gszO+ػ5fZV~�&kk◯P( BP( BXz1ͻ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000004142�15104114162�024523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8��� pHYs��X��Xm7���tEXtSoftware�www.inkscape.org<��IDATxklWgfכ)47שjTEе7AUdJd5DzM5MI҇B<HShqv�uEi1|"P$77%Z]{`<3wfv}{g_D"H$D"H$Lr#k&ś�4�@; 3Zō=GL�f(f^`)�$;5)�!2[T?"S/R(j [�>RLu!ZD!Ʊ<x>k1��K7@?�zn^v/SD+NNѯ*3�5.�-ƿ̶׍|,|/ȉTZjW=m=U;�X`q.ִ:HL�l*_Nd"'>$Z$ u)b*.�mg**n 1J9 48q )`Z`u ય�0<[iZ?uWƪr3Z`l[S(19c H|꯫Uu2vc3kV0Q &n7]A?Mԟ"Z8~au~ Vh86c 냃d764r3f` ?1]S̴_,TqI>nfc Ϥ V+&aS}G,}.\m!mJ1hs9[6RbJM̾PiDx}R>_ntBlt: gUl5]b)9qQ2:>[e-s$ 0V8m_jhBb0!ꃁB}$jD;xHh0Sau{-9�Ny^*(UqA&/4Di}0* @p7h'Fp]Fv1Amza�buNlfAdceNX 'J6XC+#�p/ 3eLk?Ns)թpMΌi["?R|=^b\gwzKY"OFt2ѧtչ”ҺwJyjƕo@grO)ozn݈Ou>~u"cO_“;2Hs!Jӯ|B6P;i=N.&;2X@sׁh/ UznQK>+h;]L|w~ O"0vjǯo2y"jNaJYB/b=8�>K�me,~K�OMverVu5%%�'҅L%ُ1aG2QZ⹾;CuL&f&y_o{Rhy]K h9{wAO%/&og`ȱYo۴xA'^DIG_5#� +p I`FM5}}U;ٶG� }%p4LL;'EՔ��Лj|ě[I�g񀨯�~pk5oTb]O'SsDMMR*#29аV.rT)@T)@T߫ UJ1TT: WCbïZ'𩸢s(Q3߈\k�d9;"SɋQ3߈T9Y0=I5G|%2~q~)qY�^C/S"*4N=M .ddr#?B;SO2FtA }`8`I9ۅM,y_2e e ]2B@ׂ2/p}YCztNo`*Sڈe5 b7\N R�|L= d\V2 $@WyVz=de3 -gy/(?%`d"_ET)@H$D"H$D"H$v) ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/96x96/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000011623�15104114162�021664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���`���`���w8���sBIT|d��� pHYs����e���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��HIDATxkp}=H|,ml4 dbSi C۔$-3@鴙|h~hIg$4m3! 6m!ɖdٖu=}~ۻ{Αu?brj>QFeQFeQFeQ/bnlGڭ7e{o^3l�h�n.Rkx_ ve1X][G*]uKܼY*uf�$u5jy`m�"?:͛7q(gݏPS]O-3ta0 >i_,u[g=OkH,[?͚UI@}'in PSsեm̰=@WCHѾd@Q|#[5ZYm]OKZlB ^ZZIchU,[ǖ+9[dMUi)u%+@ǓغJxK,<c(NvE35khSZ_n+}ci 4VS*-H*8y N_x�FJ uPs~(O�;-PuU5(+08v#Qp%xMԯ@zv w5wX/v>ΔXrtJ.e˲x`#ma,u7zN^u7DHg'I X{% 3ta0Ӽ+񟽝pj ,)oF&-b{G&ydr) z-CvälXu6\FF/Ucu*Ēʫ@�صkl}]`}89@"VI]ud26gY7QXj�u /[?̝& '0Pw  uSl-ױq%lLKC_~DY%`#$U;7qm't2#{?ѓ]BͲ54oBk}ms5ۥJa\-ľ +r%#'9q"?=118zګYu|ۛ:䭾N}4OFIh? D<w5+72QZHί"7de4ݴfVAmꈽөΔMLC5ݿǖ  ^ 2@~.nZM0*6Df tVϫ,(�O$֚ӱkLNe9|E&y5?['@(Y<Mfٸj+qnѱZYݤt)xpcl{I`;gh1 buO1cxDnyzT*.VvZl.``Y.6ƭkݡ׹8qvFd?|8;r27Z͌n',HKG_wz2GOra ?r XQ_kiXzgsGlSt�Q�>_UQg}u 'ygUhԟ�F̟J�mGORJ튵^]''{fOsԿX,N`x<�"#Cw=FcVQ:Clͳ�49apMuf#|eWj`1xE'|a>r=Y;[/M ;O!6 � R-wP%_<Wf_ÍμBs , Ef5sE92 \)"VE�ONP tSK[nF=P'Y)_hCsNsuΏ4 &�*Uԯhbt=N*hWXWШ=z4r<cA>bn\f}D3{#d8xy${x NLy'oS ��^ܸ!nVu# "@ߊoX'a89] 0dyR((D-=.,V(|v]<ݸ_t Z5u'X�:&>q+gǰptUluШ+Av}uЈ%hl@>*T֭d14}]|s,@h`}?`ƏSY;#djCy9Xf(R8AO@@ȩ '^D^W@%Ⱦtڃ̣�m+ZEֽhm@'Q#Ԩ L>\!xPh_,3*ENqxÃtMPZ}M7g~|q$u_>fH5;ڸC?c89[gݎFw3-#'I2*^##B= *Ñ�;!ǿ+ȵ-݇Yqza`Q`lm.f21~[@# cO`c#8K NPtF<mH`QSY-7^D>je珩X3pطZ\M(Q!GL <C,/g%r=dfXw[' ovj<>BhN[U]Źrs`K<Q)u+3O핊/f/`^$>q"f/zMќ1 M?6=6ۥ~6`tW-yxAZ\EڞtƩ W.f ;?4){9jc/a!$N4S Zۜ5GOk9s `OK.uj:wO\ ,mzӽ91 �lss*}P 0>G*7ny$}- w;y_7h^?(butef�؍QD?'|AcEJẙqc{JU!es=&%&KKęug YcvN[T]nUh >xh�8̱w  pc zU%dhvzgg\+ˆA&LƑX(?|d 4~ޑV<M:Q0c_L\=xS)4S1(a1Ўk/xBhR#.~lO�D};zYb1; ׹7j|J;MXK|`"kt0b%r[.􅑼lϝLןf,zӌXK 'K&S_XpdXmG+WBI~`^.&^ݡ|)71-5 2z 0BZI%�pI'#&z] !1/-A2=ESgEA ˭/ΒRnhvkw!pNηoB1@+ -̍0 Dg !qbWL b", K'^@,S仝&=\ ̘/.:$IBPuXE7= A"~(Qβ{^E8#6Y$eOB %Sc ^翴I8,KIȡ(h#oi@H?LR)O!D!n" - Jΰ?y$aX~T4%P3ze%ab XaEWXO!F"|ے1a'GjmFɷvs@a)$_%0%GI �"/*xod`m3D0xXh1 EEˋZuW[x(픗ZC Tc1 ,{sd< .~mn1Nи8~0t EL0בy^+Iry| %=*H.p~%- BNݎߑ2ރ+V QNQ Ph>bE(ΑNr@@r0l (ܗWQf l8P>ȏ3cV�4G&vp?eY%h%7[7wFA^~0b*-cY #f#@! 3kiOdX`Ey1mtVaism3CSh 3yS1g$L.'Cr:WfJ `PT2dxXH0<c=b}L9O:({[#F x|0]?ح1,ɣ"fVN(MGL?Jr륆t\Y;u+NlzyN*h.ԙ3mXIX.V+3"لb7>-{$yyiTbZa!N_ޟJsqGȶ(م_b2avLE�`OrRL9a0Qt0nQky@t>WX7,�χG9Eg o}><bVe:XhT X3鈰(�C!/?} .2(2(2(2L?ь {����IENDB`�������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016306� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/�������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017732� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/emblem-unreadable.png����������������������������������0000644�0001750�0000144�00000000504�15104114162�024000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������sBIT|d���IDAT?Haww_wD'bAPKKm5HVnH{. AE[k JkJ; G�5L6[ЕRoF+ O*Г=fLlSLJ<:mz 6^X7AzA2%J9Wi㕯P0wMν8LiF"‚_-vry>ޢyǝ2Е AӦv0. !}~?M?~ŝ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/emblem-symbolic-link.png�������������������������������0000644�0001750�0000144�00000000460�15104114162�024453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<���IDAT1 `@f ^pfíQ $5B h}m[ 7gכ^<8mx$[j:Mx:7(Ԣ(=iHy~ "�Lmј,K" P׆`X1eY!"iEmmuo bB����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/emblem-cloud-pinned.png��������������������������������0000644�0001750�0000144�00000000606�15104114162�024262� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������ pHYs����*[ ���tEXtSoftware�www.inkscape.org<��IDAT������Y)O(*J����׵hֲ�����qA*%b���� 䝎RmN!N1+���6X�. 1C%��O �D�Do ��s�i�x�ߺ�1�p�������@KD����꺿s���-vٻp����IENDB`��������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/emblem-cloud-online.png��������������������������������0000644�0001750�0000144�00000000422�15104114162�024265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������ pHYs���/���/*���tEXtSoftware�www.inkscape.org<���IDATc` �\μ/K?;82)`a```sF }qhx+#ƀ̹>o?y75ԣ'U&?/+?8c b,σL �/9BVT����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/8x8/emblems/emblem-cloud-offline.png�������������������������������0000644�0001750�0000144�00000000606�15104114162�024427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������ pHYs����*[ ���tEXtSoftware�www.inkscape.org<��IDAT������iYO/4J����ʵl�����}>%Ib ����ܸtTmiUNL-Z ��ңD&P.1"(C ��~ �  &D����գ��M*]����� >'.QB'O_6p�ڴ϶12<�ذg�������eQK%+D����Ӻl���`3k����IENDB`��������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016450� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020464� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000002534�15104114162�022675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��#IDATx^iO@p_"` ')A?MA (.qWIJ`ؙRz$'б3g#ܨT*Q4gÞ' T,l>|^@ccch-M"`www$'\(B,.TB^ssޅN6 d_@)EɨR`@SA1ȃX 1(F! b< $sQ]noo fjeTH[...X\F1zzz+V/~n?rlaa6`5]\\S:99"clddB=>>L&ȟkhiiI_=/WWWlkkR)ꤻ8gM>"8ggg- ,NsG4Bʿɂ!؞# []]C G p9V3<Nb*(b>s333c>7??/vX,Gjx GA3DBpf3I {▻ 8rw{+0-S0Ac0uS9]yO(ŠK&L1Z2 |Q ă pa0C!fWVI'<訁iُK#pdY «x�VVVANG* 9$vOb|ɠ,#QVROpSSS|i 1Cxyy9X`TH\PZ <ftuPߤ|�e& JC,"b͏u%2 g" @yi%2m(؋d>GQ Gf,<H7aȚEAr(+6 zKwPChrN:tPH榺)T ӈڳ/v9} C`e B颦 5#u-)~2** Ҩ"H#SܰtCSۇ2]CvvvDC"miLxyNvjUP}5I .۵h j>Z=³0*mbX^`B:0Įhk'U6DClOl [ϦŶ4^M:j@P<F! b<P Q2*y@H;щ.5 %O<K)Sf }A7-tэ*0mK lmgJҽ,2nl6g]p)k wt`Wu+Jj18((c�K`0����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000003242�15104114162�023345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��iIDATx^_H_ǏY_JM D'(#B>$AhP0P|P@0(1J4CGQ1 I$:gٝz3ss' [XX-<==eOhnnN[>0N=|$3+ B,^^P@ - ! b=@J.h+PA28b d 333:}b{M!''~=ʼn'ŋ!""B\̘@(6Μ9]]]LbǏn<<<<#Hݻw #f߾} ܣ>8}/<INN)e``�._[D(Rѣl:t)r~~>GxSl'c$2 X1===purVf29=b^z7nܰj $,88M(~v(..V޴1A ҟ>}8p*SRRǏ#ʕ+p]V/WfggbfN0HÁ:)!KKKl3911=b^ UUUe>*f̼XWk(%H@:::ԩS#߿[CH,GڍZxj  3줤$S]] &{eG j?-uɢSpE|\t\՞<y")FS SYY eY4A=zJ '^VVmmmc94bTݴ1𸆆_Q$He"BBBlTjM1'`.;w_$<<ՙ":G)A37 ~ytE -166iii, %'cAzddՒN,FN``S#hxxXAرc, $zjm9XAqi4Alog,ŵ4k׮ʞŝ2& $J EEE9{, Q۔@Aj"ܼyskDhnnf- ObXڸu6q4slM2Jӧ,%.\Owo bE{& @j088Jiu%Ç6rv":Y4_QQW= b(>~÷ofEyCs;wjY Hw;55ÕnCii)tvvrH%N< /_->1V<E ђ[ jDbrbV%oL^0,((o# =Q1)HXBA>| ޿[jxk )ƪQ |W+p@HCH(8F d $lT#H@Ҷ\$lUSU+SDAVpoh wXþ`oF>mmm j`Vo-2o[^Q]#%iq @QhQځ?p)Q2����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000003701�15104114162�024445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��IDATx^KEǫ{޻n\ E=!I!9Р$<*Ax%9 (ŋcδWU]]$WU盞MODM4DM4DM4<=ϥ9<֞ {`Qo*0 4k5GKr!U V}ˠzP Ky^ب7~[^^y<f*W?}}a[B=/_~N$Di=vڊv0y%qK<;L<Sl**;:vC %3Li9-<. Z<uAFZsu^4\ }E1A(W*7]ufzt⋃MTGu@Li&pΠ6 x\hM0iPU۹$Ѡ.ȴ$˪ TkLω:]y"xvظlhbT 2!m�t</䗞桲iЉ^\oh>H&C@Kߖ~1uڎ2 *yͩm8E:h'vk/F95RYZ]+<Hԉkа1 Hb AD {|~JР[<QkoGAc*ZmN+*[щrm ;2c T_m9-|g6R&)RŨuޗtqZȳjb9b?>;zܩ rJw�SkWVE7| .B1\J$2㶦x?:( wcȾCqZ~ɫᶹQ--iMYn:%jӷHa{Xo'Yߠ]~(TN2oj\q$w@FZ*h P쨱wZ8"hlWV1PlNPpy Anl"PKw}TkKN JjGBzCq@IQc$12gbY^]ΈhN&NQ:q0dPt1|ibbJWhQD+q' 8q"q!VPA(Q8@/wѹa'@GDF٠(Rr+3(q`b5[A:x ۰p-PA :cH@JڦI+ L /&DrAb@G MPA(Aj{U_@:}KT0Q�2[cv0VMP>v+h N0_uf]A6BMPVjlebMPM>I%`B&Jq+v@#P[&C86EbDyr+HpGňJ G྆Mdl|rn ".1.7:TI1۠2rJa+D"ZA<&^۰C Aǡa(Vt(֕reď*z�^h8N[:ŏT*R; 2Am4["/As|^b&�mshQ<MXA,e9AI(I&7ʡIE@I- ,@L$ǵ4H‘28nHID1G9 ݖ8e_]hk9J; vû<~W:5AT|rо ͉g=z3^T[]ǎM(;,-?*? jMOi5~8Όd9o#W:ĿշMu '~SdP\ZJndR+CLjonG&?p9����IENDB`���������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000010731�15104114162�026063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��IDATxyU~ǿU_ti![6qo` EQd#&(lmv7DZ)er<``=3}LY]]]]}UUw{f3'=W^};n[VUv<KwM'NIr|�=Kwh``v �M8CÃ/rݡPu[zix8rt1ppc`hmʥ+7+rSQ=q蘦#7^ =^ſs:oӏ];5AF8_ <?}p/$w~ozI\׀o(W@8>bݶCJvT3Z{0=j bny rER,pKW}{'mY\"̛&٫x꡻p~W/6۶)#GtMeKA@ @!>'\N;!>lncO&/MoEAU8l|dPσbk5XfA@:>j+iRO܋#~6%txX\ TJHuvbv) G~LNLmn*&7bX][ib*K(վ`9<-n 3Wߍɹ8VS|C5ڱaCA(焦i` )ȁg#S7MAu8Ǐ|nLƐHZo\s@q쯿x=ծ9tpݳ?;z&'F8'n\!.Ѩ0G& J (?ދ~yz + '5(:Df+jiGxNmV{L=S1scr&TNXGh!ztEV?kmJ)">9G9@uuWJ #7OƐk@η҄YHAi !'G1:o)-jucj6tآjeAZP;5|OVQJAA0RѐʗziKab[s1ZFG;0$(Aj !p:l@tȊ|^8)P)/wseBq3ϸidbǜ1u#[,!pmɒQQ5BUՑ*oMIbF8o8ynLD+HA!2YnjX|SÐELVӚ\Aj(Je(q@0.|.ocP(n*mI9oy=}"ǗL7DB_b "F? //#ˋػ+텍RM1$ZT0 j 5T;uX!r'Se fÑoF0ư)`d0`Ψj%49h;vlRNxd<Z2E6/3drEH (``(`Z˟|޾_tsKk8R}qjxQơCwh$)wW 2yz\/HՁVs1g62`z.嵪8r\DQ*WjU!/gǻV 7_|(ԕ&̸KCbIh ,+͈^(ˉ%+J3W%}a* ^<nfcIJr:jٶ8־͎\QqYT^sEU;poo pu>H0}8VTuYIT{\(5[n5wZ J#{v;m&/zRX5s\8vJ;35ٮ#'zsUͪ(A´Qc4ߴj(%ؿ{�v  x`N,T56VE s$nrۡpa<SvV *AQp0c!F^pߡ8; ߍݒt2ks" 6Ü!eV_3h:# $atKK*8zE̙sTA%`?}̅21L! 7dYE*+ +T**HmJjfոaqKHOͼ9F@ҹźN_3' 7FU{-tHZ2^Z(11Xp A cP�,$k9db*V5|.Y(#|Omsu]S`I- !Ӣk @-JHgʕ3""4ˁ/H&i:WEkSӆZ}ܺX.!H+sWL^b~)(2N@4MZDP,VPԔPJ#'x0 YT3gHD\jD.8KBQ"y KXgaqz@@KQevtϯ!P*U% _$PBk|ʞ~ }UչUnư/dCv>@<�ƀl{8]BJ&aMW?G9 {z *pytV�AuJc%CZљ7POA(#6hbq̹l<ΐI7gC8=_V?8�J)RibvEׇLND./%nup# 6T@@LJ-J'VEe3 F@zp.Ҍnl,44J8^pܣv@1.E;5'gYLLG ˇ}L:Xd Rklr˵L~mU_YVL?5SvΔ6޺qQY5'C44D<D>J"t<tmkp-l͍2yY*H|~ܻqus)IT vHD)!PT x9n %ȤG@rmkpRI A8.s63Z)M2A,#*~�dYE2UhĢtd2e8@~2OS(Z~ӢZ:f^1 Vk DoPr鴾| iˡp`"~%ѫb01c"NŰ2{g�3l*, ML0 Mg3:&t*xdO$z " >,IaM-B %~op9It3E5(y*Rhvϕ$) TapƌMdbUS H$Z<T!3|Χr߼+Y/hm 8.)$)DM0!^@=8LkkD#sPUX췯^HX-, bbi�pĒ$FAdYB(6Mp9Eo6$IuD# PT+8c _.\ꏖϗ P@:fKdF/SR Qj&(:lVD.+5]Xٹkg$jcdU7Y17٤hBѧĢt:X" 1ƠTTT gSM:cqq鬄H1]0=qbN'jWf-1uT*~8ɢ(NR( nwtS&<X^Z̵ih 5ŏfL7pV @uR7l�8HemOb#|>`^( kUӯt ymPtc�pSbA x=nSCp\-a-pjSҥ!oH;8!mnW d>X(>/zp= V!IԎ_SerU,|a\�3JRA遡}?> NjT*~5~s;QX XmP N'x-ʒ|/$_]#?`JEr_&I9?&6APuS.|>yfpy^AT$e g"WRՎeyPϫ\e!>38\u:da%ƔJy_Ki=[b..J7� |f|`xü T|¹{" E�jjv ō.59N2o dRI B/_:,�MU|v޹ʦprҠ^/:*[dc=ֲ:;jk�d-ݤ�%zhՓr3�+TShko[V(<Gv����IENDB`���������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020110� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000003316�15104114162�024661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��� pHYs��Bo��BoQ(���tEXtSoftware�www.inkscape.org<��[IDATxmlSUϽkm(8&/mGB@FD%v$vv̘h_A%  @EEƀ(=moK/tι<<{XXXXXXXXXX@"<1ߩן:%( 4kl7d}+L[4״*+u�v݁\>GƻYb^/Kr{+ 80�& ꬊ&1 v`9'xa@:;�M.ϖ�W@NOj)96qS^6q:d->~FDQWT8q'Czǰ�޵d,eI adPVknTߓZʀO͠Dh0l0R+gK$&-}VaA%W6qQ`ٵAPe0sgQ$Ɩ|_MaycQLwBN.߁WK%( 4X` J%( 4dTc6DTFCY.0űcTvFX7pzxܹ1c 4g0`@S1CE>PcXR7)%w63\22~r"db",H"1Fg/Ney}",8�~�bkQ ,{7݁Ɠ1 Fu;3LX5"@|b=~6\;)~2TFOGp蕯f(~Ы$K{"ܡF�nI=`$2.ŧۙ|`(7~SzCWFWϙfH[r+>_ Q7Dm:Iv<YRfR%*$E^DtUd,s!f8h.X�|١ڞA̴.h;0$KkLХ^R*9=q\c:D$ir 3 TNPe3~4:O[L܂Lf&B[|LH D#-n}GN.jw.�ݚ*JׅoM^", /a�N�N+�[&A$9*[ z^</S9`F EPW +~'y~DַDLK9Ik<`o]uMh[T/0VNC.7SU3&R%s*)?SRQ9 |^ SFcݏ`\]F%_)sMYK0 |@\\e9EuZc",86kvݡ+ɠ]g/`&ώHuWU\CƠe4K,3oЉa( :U�ƌ*�w'-DtX flwץ\"4춢M Щ*0.r1`f[DmqL�5eW1$h׈>T5~4!$�DBJ3zWIɥ:$�� ޙA>wڴT,B% |eWՍk, ]<\FF����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000003300�15104114162�024502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG��� pHYs��Bo��BoQ(���tEXtSoftware�www.inkscape.org<��MIDATxlSUǿ 7*1BDC@T@H@P$DLc<0:PEQL Q"juP@e}}-s=w:" dXnhw0M#EI�ƃ1��,ї]]eBW +O0Cpۈjk a�CP5U\oH;UVƔ/&vQCqOkt�|$aqw $i3ҖK6q�ߚ}`Hj0l+ƷfY9URbSO6}.w C*uL7m=s -B"\.f.)Bc@rC� "$[% Q/�CLOP\Y1*\.'\(5hӕr�2#k>)5/K< p-� c,s77ct(#%;"Ɗ\!P &;V#[$Tk:l6W0c!=�y@tq�wN6ۧP w͘r0OO"FEG۰7Q0mZ ]Q"utw7ϓi_[,/T-um{0I(${=ީ(#-zOJВiV=*+ Mp4#/*PFn3H5#Ś3a;Ź MWKlo 񹌅v2S</P<A;Y'f123]I Ɣ�_ĐC6c>|(Im6٤72x,،p?9C�pp&Hkm& K@X&섎8I?g[Wuamȧ붟K<BUJ3#(%׈`B #mGq.% 帺m\wp7Aczk�~1icy&^0H(X,E8)zP댊dc-˼W4dB1Q+7þ&"I~7We(2�瘸yM &0[ldmԢ- B ;.h|i�ZxNH`LI>f Ě_%5YlO:T(Xl�8vw6q!j_3:5S[Tɶ- k(H$fZ!M-*쟬6je~=UΤN.޲"ˋ*�S1Y05yEPI<jѥy\b� !BOPR,W*p^2cD16o dX/X%P/ NN@,9՗"]ޢ7ODO^w&}� đ*oٮ|R/L|:6R%P(>2rjY}'G3}9S+EIjV�u|jȩ'_oRjtj0|*#Mnb5$@GAZ) ر�J!|;Y]AZ)N\8UM~SumGQUog+z.d2p}c5z"Y4v6����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/72x72/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000006763�15104114162�021661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���H���H���UG���sBIT|d��� pHYs��%��%IR$���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� IDATx{pTǿsnĈ  @ (* uS"iLeL3tF@>PHm!$<qsݻ7\n2/s瞽{v97@JVd%+Yq-nhl5�M[v5l&z�6$&W^T aԑ0l"!ibۡ{o-HO B6cDDT<"ZE騈Lƽ˿c ˞F~@@ѭ3�{Mk>>WcDhSzpŴ58o;>b>2j"ės",1&�P"xK8б]0C̝y#N]=K.Z+0΀[p) ET<pVZ&u82`HtW/Dw;5#*;9^`5q;* p;l;u@:3ö70 SM4;[k)?nXTWNob(՟Ս@@9n 5K7Z啓ѭ6.c6.cĸgͭki83ԥŘy=˘Tv,߲ b;P>PSdh;F˄/@8;܍5밲q`eqwU@QE:^J̾nN|r D`fddXL j?2>*fv1P9`~{ZM];IgxtrCa9* ga+1qk:5H6=*k^ !؍;'k;:\]vpl$c@4h~IXMd]X^#'CE>ܲ,2^pM�ܸlN&\hoD̨c 5&˗ K֋H,j<VP@[m:̟Հ#85Zȟ�� ޗ/bRo`V / [J0o=h;s4Ћ s83ԅ0ur-no\#h "m uV?v#뉴KB9 82rO!�mX침rE8ԹLs�"|pT}3؁HoB"ǩޮe E{3܀1j،I쿇eW>͟ZWw1Z&� h uXk �"#?)3LG,޿F^[limZU3y&>?!G,@&*",� !A`b @0K4߉x+oT3v޴1�E?x۾KW]TaK ` 1E >b BAt) S<$+Lg8XuzkRb%?FX�}kjm�+h pzgx0XȄˆt蘃LxIeiw$H&RnIy!hÕ/D}eⳖU%?g?qeЫsg]K>;]~H$�&BAL )9D: 0%"@{bbeH'0v鋶c$,̯Obe.:O[]|ڵL{�P~`l M0nCY82tFd&<(kj ҿ fFEY-*T?+']t3 !(R w>f F@,y )9 ybA v bcpq䊙yG>@yU:qE֪ǿ O ]O$$ ,+SN]0Pm.D wpRMiK՞3s6z}Y.^'ꀰ99_@v>:X}%נ=]�.;jzJl~eNy Ao;H!ItB33@L 1 ڱp}HGÁtTW3]j ,jzy-Ą�pW޻b#\]+ d >X ,„H75h0  (�3ũJ |:ygAvv_s vT;Ks@ t`! +"3pTNl ;/5_l>}<fL8fb'NbQ!eRt SQjMƤ(; }60٘�˘.*S=;UkjaAH#L  (d"[�i!" 1:%B&KRtyCXh$�Ki0 X6--IՒ|)J"SLR!3 G/FxYt`DU[Q5(#x(N I1񰢆ؐ-*3QŦ?&0e=Y� b`v=  7X^V#0&zv5j@rd9'8@?uVAm%w,z :Y3,5r=SLh AڷO=4[ *6Vf Cm_H`,Ͷ靁.l��e�Bz,6z  @oo(Als�," aVe<TY=ۛd!(@f#x6>p�Uj6굔 jm^""H�`pFR2 z`Bp*iϓ̎d_p@~(wT>^3 e�I) ̪\'2lHd-X}p;Pfx4P`{/ =Gûó/Z$C&{e6=XzKL0)3W}Md.l3xO"|';Mięnb:nKdawFe2lQ^`AC%8ѲTJP%[L}eG?0@? FXsA#1Ax#Z-Ar1OXf<'2�d%+YJV�_RYr?����IENDB`�������������doublecmd-1.1.30/pixmaps/dctheme/64x64/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016452� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020466� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000002316�15104114162�022675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq��IDATx^K0oQTTPA?aA DD}~cv[ ii7̤iHˋ<34Ԏё@ n*Ʒh뫬1Z^^1&[>i*�fM,0N _KdnZ& [T5Itz "5"|~~#:99ku ==(??***JDr*b11zGܤ}=455Q{{{Ԋ**f{vvvwwCRyy9eff <wvvĵ{s梲3Z\\ 1TWW'`ަCY׌R^^aYx)ooo2$Ɛ (`XYYg `onn՟܋-6yEsq?5NyDUAr{{+p+`v w;N5�+<;*rss呻\ RXjjj(;;ʨ_6\vATu �xcU!1cyUg /+xK988S_%%%ӣl`N #r}}]}bm8 g,]$RU  xv-b .G[Ɔqjpu  fqO|u�_k݄w_]� bFFM,7@t(..\ �dU7Do`~Ac,R6  x"I 8}~ @<o.�^}/d "ߏ@mcq_ 6Dx*n >(AR$:w P z:E [D`7XT7R_ "Ңlpa) r@ 3%�fM:4.`p`ppY:b7+Cd]& ܂w݇&''Yغ|W> P~ꪳAeČa@/*T�0p`"skf+ȋW����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000002744�15104114162�023355� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq��IDATx^](e_1hbPLQHn"cj$1EJx&y/"CiD<(%x0`}ag܏3VZ{^^{uHptt;99ctƆp{{K- ~ u ےpWѿo7�NJAj #^_-g"[UݻwD ׯ_0::J5 Zj8::.DDDH(c~"Cڄ>(&'2hll$V3ᱲd F\lO5ߩ�G$@TT1v�())y'V̤yAhh(9@e0##ŅGit0)bsd:Q cccb(RSS4 [XXb} A[`Â+ s \X`ARR( &=IಇILJ~߿C^^LOO3+!<4Escbbb`hh|}}E%q Xsc}:跉| N6K"Dvv6,..Rt�' #B-bNOOϰD-٧ĈZX\y_*<Xd Y~tj?ʒ3F o߾A Lf{^ NXj~~~T3V�ATVVBuu5KE�EEET_^^N5c5,//: <"�a? 1S7<0#8rTfo /T9;>>&:˰Gd%30 Gda /SSSdD78, W`y%299I7�,bӧOo߾议?~$1O >| -�VxIIhX$Ŋqbb"طS}<%z{{azzzBOO$$$].XEBG T�|8xa17U a}ƒUUN|s]^mnn&bHJJ * (T(..&Qgn1Q455AKK ,Țxbr$W[[+ Ek `m'q:2ߖ K'9舔m419@K,^(%x.kOz}#^xXWgi o.{<XB}101 gtt߹Ur;iii\P$c[A><PU;NќmnnJ;v^+�*Ƚ4k����IENDB`����������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000003216�15104114162�024450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq��UIDATx^keٙfZ? -EīJ.P A x1z[^`^K_HXhDyfٝy47|w_ofөkkʐD}{eTUT>}q_+Oi ˪ɽP^Gm_or ٭>z$o|y#Sh^ r6`ɽPnFt{k7OB1H-7/ő{o=gi5Dj˽Pn- 0e7_+9J,s5&^wKy=Ɓc\vը\tX%vhڞz} (hlY֚ta 8貒m ̓_\%vu,ˁOVP9Fའݕ{chjnk?$(�Ж-uYEYb%]OPhM:{^-_=-ݘ�g0Z\XQ]ĵ<(S�ZWH?( �S.ɩ+ҥ"�&&k8hAp%0(ZH.a vA}.u/ϙaifݨւ9-JLZ ueU~\ٗV�XS'~s&q�7vT~B[ 瀫o|)a Cڪ+>0~NT h=zD#9jb ʪuoa 0B1 Qi`lySx+sb �[4q�Rύ�:"RVePՅO3>K0 eIҋKă=_8�_;^irah]@nTl? Nlݾ!6YUykEl?ӀHR*�C`aZgk?ݜN[zcTEMՅM!" ๽K&>U؝DAk @8gEpE} hAR�E5`T4GQ]V}V� PgE|D h*&\pd]~(n-1eu[6mJdXH@Q?Bі-�PqG% pBQDI`BIpP,q</;tnK`bb�\A_1 Hg\;kn$`r48q;@xQV5:/$DqlQ4p @g3 E-!@.NSnԀQϣX; (C҉4ПyUk Z�3p(`KleaT<π3-@0Jq (N Ԧp Ѻ&|0Z&t#w2J^$oͭs je7_\ _Yt' z.և;[q/_[tcz!*W 9᝿IqIP~WK:J:W�Q[ /Nu4S����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000007531�15104114162�026071� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq�� IDATxY[lcy9$E..nm&-b(h[{ݭmCCQ4hj m.mI)_6m^$VW^;)!yx.}8<!EJe/`tãg|^>/GY?mG87=5%ƂO}}GGE�=lzaHŤ3g/3^z?c3O.Ju~qݹ~q 9{3s^~yH#&X 9{q…WNN8p&WqwًgA 9]J±0=s21pijҁU<$<-̯G2LV+9׎c!@W^&۷"kӷ+ܾ-<QW_Okc!x~1fwtބ]| 75 �ufD@Žܾ(<SOW. �}_}p`~ _( <D8QܼAY`~6Z_xh$<hj\(y Bck~�TW~H8r ;MM8po8F 8tF#T`aՇ||}r$)οzqQw19 + #g�S cpV#; ;/jjC \nW "'I2Y 1pcF >Yo75л3r릣Ds�WD d RK'2Fғ_%~xhzfm [D0دBӴ@{Bgnv`vY-0[ع.XU(yg`D(B#7a`Ёg$Tizf-qx/h2oXjVJ@Z �ʀ1Z( ;Jl v/䨦𨼻� FAeC|4B##Zg(clAsD~ ٷLfӹ^:O'C4DQpwX"I"#d*1`z [1<O7 !gfLܹ7<Oc#}XX!{w+N1xB@&C{[#g~;4�_Ř c%DJ 2YH}Pk,il +~D)K* sZgg[za>9&@eج撱UU7ǚ+ >A+qF! ~~ه/抪_ -b Ng0^3g [pcAD|>_M%>']͹Z-M[nAQUH @WGӎ76uυt&WJ `tuP0ؓ(?:|"U g.$[mD`i%}YJtqŏUg01Bh¨-,hmip8+ 4`.~,O >?JTƗ-技&?9>{ɢ,zc3TPc`Q*P:37//]z aqՇD*]9WӅ !��4P,fM 6Lt "el3C_s^6b5U"�vɬʲ Xҗnc5|_ XD0"ƒA @ cǨde�>ϳ UVk|b'7~ftv7]0X|8:ڛ E$:ښ`vX$+wCUP;vYB+$ϫP?DOLaf(Zv5QT鏃Oe%%)Xhi@O~ċgfH(|eȒ>P/~JX\"w$#ϊX-dl}4W:?Ĭ"R d9Cv)8ig4CσH㻂j dCIv6VK0nZ�kt؛`Le Nsfn46X c97CQ!BhK[t-AI�~O$u穭8!EYL7!q*ܾ!>;snd2"@X\@8*A1ɉ^p֯*ju/B2>$IF,VxZ(+W\Ϝ9\8фm( y @"IȒ Yei49 DQMΌFuu\2Pd\ 1^3> |~˙3gp]EU#,Z �bLKP-Yڽ=--,1DD )="B"y9QB$/>twHgƄ\Vֶp&Sib3n=-hm/ !7 rxn$Q>}PlaC a,LgDdL\"o e1 \%D h@D@9 i1V;,=RrE;ֆ#)tu6plnZQ ABzt.Xb$+T}m0"ol5C"|V GPT"A̤6[}!` zZa6s Vr'Hhv sYm6444ofT Ўx | FB{+1!-4Y,46 NS6wf5hJax,ҙ*w]�?9^)Ec}}=yߧd2(#ùtZ?c839 M0 m~ȶ9IJhmm/EiX"Q񸱱L&o \6u2j}.`�k&$"|79L2$KY]څr9H4T* {[CPȏ[F:æ?l:uOkM$J�+jrk0r9._yoPJL82;?rjZ@�$Y,)fslcXh MۉK7n�jZM|%2 U$.]Eo`JȎ[L w㸝HՌD"wnAܞ_oty* {.&_3,wÞ GJȎLJnl*$Lz. vvZG7n#G.z?|@r`EQ}㎤Z(G`ob)}>A8l/琌+㕀 j$E@%Tw%CQ.]pJ|"YNo]s^};m/ƪT7Ĭ]W=#'x!;To#@el8q|9ģwz/JY[oTr{)]#'x!;@4vsˈE6wwFR岧ޮXj:sĦ>M }pgdDc&ryޯJە<@үղvY*�UUo!o߹dxVeóZ{ײ<zlXY11lj㼳ܼ+YBݗPc&xЃD`7VTj xa #݀ĔO5+}._Q(P|[<7p{�bTR+Gv.#.����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020074� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000010467�15104114162�023413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<��� tEXtTitle�NetworkLB���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATxZ{l[}KEKDQ$K$G,pM=P,uAv5ÀPlE;,Kve]R<s[N<VGlv\{IlI))(!>}?$ʤx)ɲ1}9sw~\6oh vVLĦ8y^l6 :D"Oi .dr').cW?ր˗/lvF㿞={n9oCfۏn/?bA->(c[ĉUUo߾}Xjuɷ![ǃǏZ,z󭭭arlĉB֓mSxtq:=J:i? :^G0~O׿zeP':M{E0@@nBP N#PUh4đ#G-ɲ|vg[CCCA'!@~sS*o@~r@02BUx @QKLNN̙3y&�ܦ(.\�58r[WW*2~]'.�a, :�@ {vyM4(8�પ?z7߸T)cae٣?1 �) s@aA,4\WRX�nݺ~b1�i}VASo_Kp@ (w�) (]?iz&(iM 8s �'!/^q^#6Bcc#` 4PAI ? O(( . ǎ)<===#@`nև�g^?w^~\.0z+ԦP:*۰dY0$i]B!( 8v(+idz@ pt)@OOeٯ8p�|p\0 P .`E+YN/eǥ8PBIݍF {UUٷgϞ>oK_4p] <wH a`XPUUH�VA,-˲c=B *gvo W-pBeEX,a$ T/idH0 bdGEXd"�www.\^(:x !aY<YS PU,j�,bH38cU_ٌzF.c&''iO=IY'\B(￯K84M#vrAl6vlG.C&Q!IN>ӧO@r h @t�A�qU �D/^(5;g 63X\\Dss3fffV((\>»�Fq @ܹs( hnn^X,|jhnv@Q|>HT{ X,J~@�׮]+w4kC3,GGG;;;p8VrBD`Z\!z=1<< QаRqN'&'PWWχ˗/jBELLL�/~ � BY~c4t:(J٫)BTs0p8J%qmv*򥚢( hjjD7n fAB!P/ccc[.��zvvVEn?::m۱sN�K d2hkk[sPՊz+^B�á3jeֆ7dY à(ƒ_[�� NdzzAww7hXKrXs`v">V Vkdv !#@m:)ZkF$j||Ү]Gx^_ImQ,DrV�-PV4>T*[khlo 6[&'c6'@E-DdU9,hjjqkNfp`b"4Ɗݤո}6L&V+ަ\` �&nll <40^VUS�F8kN`0r!" f:B^Tj)X,xE;,Ǫ ۍ;v@R=;; EQ\!%׹~:R$(B0D.E}}=dYF,6?��AN:fk W@Ya 0W8;2::ZÁbEJdjCr9 `vv(Bxp L>FGGFW( O ]�Zv !3bq𰭵. ,kf||X ;wH8<;(D�P`x Ύvײ�je5d2d2x7ftuui&LRpFp:`Y 8<+#  ajj|:bhׯ_7&3__&)+XK�U {p8N4n7(J3!o|EjG4�,.."" LB`0Y>x96#z_ʭ`-!(QI$r:xܓ�>4Mc׮]08~0 0X,0};.]a=HZ.?&  ]miigp)B" à7oD*t:ݲ�FFpK=NOݥgF?ReuyY}�H$n p8LjP(T t:ttta\rpB>4=4M߱�lAss3%GlFPk֪Wړ>(p `{zz`+섪B<)]O$g M{XVϚ % 0ͨ3p8Y\T+_y7n6j%^ޞ0 h3ڵ ---+B"lFgg'DQ L&yʕ_-Kxk,]08;!jhqFթVRWg,K7V PaCė!j3bl( t4yիJqg#dr1cnKl6&aX@P48<vvv.VF{`"j*J +~d2a`t.]B.b7o8r?JF'Dx4MY9 Y%IEQxIrfd2vOrZ%yhl6N/577!;J݃( H$7~]M$L|lX QlQ,%Iʲe9EQL6Yd7#@I /Bξt:{H$A2dIEC.V=0,eYJ IdNUIZP4-nVrV&REQFb _1 ַE$ovdeYe9.iBYY}-hYA획AƝ@%X]&,Z$yppLV ϚBy% 1ꔆ !jPxrsEeT܋OVOh5!-bf^]%\aǎyQiAc\.*r@aٳg5wBJPίǑHprQEehN3 ޱcGὺj,;.PlF ~Kjr\jj=rl-JOwu띫Wb1g^} 7�Xhg:Td^?+JE~UdX_g-@9@k^Z>OVVNP"lc6�L4Y7Q����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000014436�15104114162�023322� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media CD-ROM$4[���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATx{kוwν=o_CȒH󡘒lQEI�&Yd!lH柃R-:Z+08!  lOJ%)є73y{ÇR#.ࢺ=Uu{w{%WǯÇ(IZgyf~O^x!ܭ{T=".""*04~ D4m۶cO=^._$_蠎ѪU#F#"Xkr<ϑ$)1;; /B#EU_ܾ}>n0>V�:4$"2yfu]�* W1Df@Dh6'Ns6J_V^o}�P+DOh6޵ku]j MSY,C`fP8CQnJj �hZ8y$9p=}?z_>/h˖-֢j!I9f``6`P9 hLj0<i'NGA䣾xasg͛W=a4M I!"P%  *zs!\ n6ܽn,.̯z?ػwď>:4ew<{n;tpU8`s@`"'d_T\'F&DSN{|O?/Pnj1Zm޽{ihhh6 "D1^CX@�akt="j}�bc ^#9$9FDO<3�=zЧq… >Ή`#lnz DZzAŹZR4@@l6q;G)kO?tpСa9:88'|.]BFց b`aF .P?8C;K7^SjZŖ[[c?'&&ŷb|^,˾SV?o>bfLNNBDJ"._ P &P\rDD4ܚ=)ܿZ /Qdc̿n ��O8155M+5TxI98FPDY5^* q &HO�U@ @ <ߏ z;73!Pw|Gn YƸŖR e()Dg,CLZ��&?R!7V Ws~O?^ϾzÇ1qںu+)*'1f6�iwŒk q~ѣ"U\py�υcu=%FUs>Y_cl!�'O]UC!2%L]3>n]\+D)�r'R <-OY9@eHy.}gt=zj_ܜWvOJ~Jyu�L&H;m[[Mt:dY8 BTa7 4AP(quvv?D ܹNd|%ߋE 9 17?v'8É+N$qX\hN\A>\PֽޒZ6O"=삊__`{/j5$IRz 8.Zm͡JDS`�QT4i>0/,rFv'K9 bgBR ̲l;eT}c%輱ą'x` jhBE�"Al{sc"@J&1V <@KMQd oێ<O׾�Pտ366###Ȳl[c^7lltf +* yO�A*U2Oi$AHss$_X" ֯_uK�cƎ;H)E<<(v4LH@FZlU*U?Q3\ Msm,,.bqWR0]Gy.�-Ekl]~^!"ٳJeRQST,.,-�`/8*Hfܹx dlaT Ougf`˭+5("Cԩ5>LLLt r�Qk^ UF))jo Ck"^Q-)\FC[e0_z޽CCChuh7[XXaB�R3wba?B��αj *`0" &041{iKPF:\Թ,ze?.W_۳aurel} 4Zm S  !�E\�KpB.,޽vZ-DfW.P0``ajj ls+�ؿ03cǐ;ET"wA5"wN"y@".4(gzy �̼c][6 N,D9K *P 6$S7+T*77w Nzyw *w1`ddQ}C�DdVO\:8,e)CSbETbC$'7288q54}"jՊoՠ YJ0rȽ0 .gWk`սZjQ`*:'T�fA¨DfaU,Dit+G%/moa ȜC'B\7 B7@Dl e\Pe� &?>*Eh�~��GƁ�H1 .Rd9ZEa \!*I}EA :ā_p*,5" è&-1_zfsh(R�;0�P䠐 1C*',@%eH]Ty W�Ja"BUQ?:-¼bacXzW:z_Ě0& wL R+k RY!4LK<q%�@S'fXkUQT d NR"K "mUDo�"6֭EamD 9:0\)pV(,l9pC�$ysjj\. rB{P(DȲV֭;4>z7زv@;i"�c3� 4$�+TŧPe^]ߗԀy$ߙT"*V "/ aVQl,s f V1ߏZ\۰ؘ>{0{5A^_cyzƱ/mjtPu֯3V"/*H}-dD@BA²g$���86;;EYW"f* Ơ�Qm,a_xA*>4=I9WǼuݚ42:<Kl5|=h.jW�p"p&%|_aaqv8vC�8Y$}궍e{K3\c**Quklv;_RHbc_K/_4݊a]݇~װ0?V = U Kdjâ̕@(N* \2k8q9~k5W^y%ٷoo֍ofNP@H1B �4mj`tt6lº $&DsRA]!z-q^!T9D;DsnHOC{ +ݟ=DAھ;Z8v:^N. hb~~P j@g�wY+M6BJC**- r�@g{T $.r[WYklqB7c,#V}rVXLh[E ư) 8ApY4m#2Қ:o(`*$b �b\x<jGn ~x㍲goUրyi~I:\E5z,&P!aAD\@jPڒ2Y0H yP=O1D:W[��4;x1=5 6\@C�9 �~1eԪ1qi-O!P/m5 j~Ԫ}P\{�6қp&w*0I4fV󺝡3O<ﯶZ۶o^m*bKw_<OQ xw7Ƴ5*jUb(%az E/Ә2CėUk+ f"mJvPiN?qӦno|- eR QB՘} ̻P8Hq‰_2]XL3 B5gϞEsaJ*_7lOLL\ܻMΟwgwQ1]Ce*"LxaEp.2i x D_A@ 0�dA`dgߒ⸆N'S+?p7 lњy,PCE?T}sg. ej6#c@O4b¿؀ T 0P<⥏jw}[g~FtDg?UVѺu떴 IK$i+,_D"~: !'5!z>�F0Ngc_e�`x=z>ֹsg<޽ BlXGA44.58Oh) )Hkyn k.\™Ak~_?l5[ Tˆ_{çOpwI}K$pPN'|R :OD}A!Yơ0F1gphO7a{Gz�P08 {~Wtm|ԩmFyAZrbエv7Is1a J2Ż$7Q B `+1J/_Dsʟ<h,;ް(\5^{عOĺ{ȑJ#ܧOt{yL(a# ![/c /@ O?ԥ{ed9�37x|||~vn/wKЮx wl}A?Dw>t)UnSܖ8q$f&_|H=ז_zf%|wD }^EN\|,ʵC{OoC1UT*1gϞlj?׬5{/{/O��ܲQ\k�${�μ[a_t/>}iph~sweEM%LB@31l�0.^:S gNַ~S�`l[Z_n\qtcwrĒ~zϞ=;<5k]Ѧ0Q䋔N.ȝ Dx EN+TF30;|ˌ\id߳0y衇nk*W7n6mƚ1<<!/ȆHeÕ+x fg b4g9z跏;v׺Jޱ�+Qa(Hׯ__w͚5O>,Q&[P"!K:$-4n,ԁ199#G6b6/.F}�|wE<X'XEڝvk97釭V3gΜx/`e&/r»�7_1 "on幻^#)Cu\?_)����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000004757�15104114162�023205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media Floppyr*���tEXtAuthor�Tuomas KuosmanenӇL���#tEXtSource�http://www.tango-project.orgɾ���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATxZMGgwbo"Y;k+HsB%"Da~PQr 7+\(. ȉPBDGěDήzjvzv <lWTW{{U=ڵka [ D \}H=WQ,/-;O~u=Ic?m Gq@"/�$5Zbeߩsr8�s W>~ՆyK\56/M_}>:K> F[|*O@w&LO)p!U7B��l _={g[Fzw\'Q@û�rѷX4NቛH< �TnEe A Q?�Iɣ�DOǎ07̀=IVAC�_ '&` mq*>R�#x4L9�D[T�h� :�s"!�47nʕ+}lzv�L$ 4M&eÞ$MSvqE}~�*Px9@PO6jpԊXmJl�sq1u�m��HEQ ˲ 7ITQpulr@eS]�rKy ɓ1`�!Z&)&\�Fbʥ_�80N`�[{0B7B`(dYhG�� <Ao!U5q4k�!gG޷emq9 /FŃ/L4Kaio= ,S..hLgg9�aSq1*8=dOXU_oY& js|MW -k%ټ[fɭliSr=3uP[(.=[̌Ø|`3jz^=lU\b �T"Zg'}X^>50EQ 0CEHT1sms98xcݿZ8$ň@0lllgط/WeDQy񪽰KD8}u@@|Ho+�.\x :ݍ?XYY�xAy@6 ]x<QH3s^M9PF@m 89@Ӡ�x} ym �s�v- IC��k`/!`0@�39fq�c0)h�` Y]mwB�(k29@kgq@Ő6ެ,p{C<�Gvq o0(b!�mB8�cP.%�rpVQ/ S C$?+ M`h5_a0�SOhQ ;_l7 (=]P9I @K1HAAiL'El0VVQ)U4xQðz3/.w?(7 ZYY)ͪjDcSr�mya{{@ês,˰~}�Ykg?X`I VWWFI^kU<gι'2a$A1sy G cX>+c@T7Gمfa-~Me.or `#|TJQ( 8ǹ><sqhy_.^rnT$(ګ/7tDu1QH!i �aܡlh28팀 Ê,fX6Dr& Ca#Kx' HuP8֛�O9wxIDn!It:Q-(cNK3Lq "$ 4՟$IDZ mx$IP{Aܶ"cWuEE 6�aYODDV)PHIEQ(�w \_ 1*����IENDB`�����������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000007050�15104114162�022756� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Generic Flash Media%z���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� IDATxۏ\]?UuNg칬u]6Kqbc/"!W"P A"H@_@( <^vvl3{_N9=3=-:SonU]f3o}BAʪ8s�] 8w\mtP_;2RxQ"BdU]~;@B[':4b/=DD |0s|{wkPQrlllc$Id ok~s+._nݕ�cĪv4lVk)F mnk I@9&'⛯>3W^ܕݰ80~1=Ŝ:'81911q 1~|{g^rwu/=d~w9S3B5uI.T#*LMdeGss�a*՟q]c@ӻKhz�Djkwpɗۨ*69I}=lY^Ia<͟"!%*Lݯ_avqQV1f羰^vRQU~%^24~b{.eb{g+Dvlevk7zt1Mu4' kOtUn aZ}p%u\i[jQ` (웾�rN2pd Xh:nedv7 #ݼIjPpn\8+IdUe}=\,+3&":I >$Э: c SG" A06)D4>%Ņ4o#"!u}/J&7U i">}N@JA=!(!d>hPin莀j="2�!|hB |Hhi "B[>[*lk i �ibrSVL>6l@BHFP[ XXLXA[\`;Z_MfUH}B?ח>CB i,`EBˬ( 8X dCX"ҌFPg'뤵lY%ɂlHhґw1`L d<u jͺxT-JRD-bHSzmT7?1!<}Bh-" +YnEXk\7d3N w9gNrD=v#O8TcGI8RVy@_{?buG8"kݗO]@eg\AP[/pAK CF~5JahՅa,{x_ʇh8y(y*Z WH/gJh 5 XlT$G6n3fUQA66!x038!XBv4M)26*Fy+/mD�^%)bsVILMqvz$YYXh4Bk y0B#4 f}6.38pե6?yk!.R(DQ<L b\14EEĥ27-c/>�bzwy Y@QeiQ4QT`h +H'Ny5Tq6PX&+zQsĥϑ d:�Ez(] vJ"4\c}^4*}zHFJҬU8!rW(') s08 SFIQ^ XmM#e-@w&$S4jZ ت4ͪ>C 8&W rvMRffD�dd9We БO ՖJ7 #WnMAMZs fIm,9٤.z(pKBP({TYe)PИJ.r,ahiϘYKma4 sS5PEA |FCn63(qkE1f  N51T+_'hn+ @!r"3ޢP:ߡ<tc )34vPĠAEy>i ߢP>1P(N ]EbJg|W<&oal1|Օamqlj\Y}! sGw?04~uҵGf:iu ToS߸I:@Z{D}m_�q6͛D@͒ lk{$wyʛ,pfu)&q3`wk]�4[u s7צrlNךMwho3tr~|8^ OB1ut[s1<ﰇk-h c kK-(Q0JV u|f-6DZk}vIcg `vqhѹtn?]eu{^ ;g\re-os?r]llw*^:.ѓrwo库鷌x |Bf_]` <B ] z4 vu�)w4طt+ݱ|G庖黹?rVe@e? y)otQm-16I4<%2|TF!M,RQOwz?�X+ (ͥ�i*""S?W' ^d4U6DvQ~g{~ÙˈcG;>PZ8' >) 9yH=[o}=�JF<UY&ڏmnU`+4Æ)| ^~qmdt"ND"kGDz1m}K@�?=`K| I#11 l5 ;w�CF@'EDӔ@vY)`L7ZYawG'u2Whntr(VՍHE9(ѳ*8b! " )^"ӭ->ql|re~qyh܃=񼰱0QXۨz~D]mي/?�&n-[TU]`8[zO^ヨ >,߽_�c`-7h#g�`8cS.$xG<KzYH}(x4g?T*+@,>ρ<l7$@92b^iVd+ 6gvPtdJ{o2?X8i)����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/drive-virtual.png������������������������������������0000644�0001750�0000144�00000013427�15104114162�023406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sRGB����bKGD������ pHYs��n��nޱ���tIME !"7Ǽ��IDATx[}3{m'kg7o$Hw RrzWʡQNwE(= ԊK+RrI[>&\ڐd7f5{3.P^uҬg|~3"⦏<^|ťb, <v8!늢(d2;88W׿u?,ns'��]v ⋽V ]<7B!~<0 Hi4MhrB\.r<U(w_]w�|'zW\ZRPJB]0`RR)LNNT|'_ ]xyz_ЅeN5M[PUJ}(BERʲLeYb> 4SI$I4bh*BGGGѣG?xoz^7A)a˂j.r; ,K1::{ɷ~\>< G??ztM4mVmr_~%$rח^#eYLMMahh_ۇ{qIpff&vS۶mkBQEVor/} @4E,{ѣ>}zOvmhR!-gݸJAB-aP{,irĉo}[*g?$I7m4nr_. WU.M$̙3P(4}v8z\OO 0!BV'%W_YNi0 f)<a~֭њ=ѣSWWb8^$0rްr>g&* #۶m` x0 H X6[ZOaږ5-!_]J P(]r, ]mJhCW9e+DŽ)]VaajA]MEQ`<n7Dz1mc4M/aͫ^bn۬YJE y Y!Ge2Ō%pX*`^Veyp֬RqL&p8 e*c\/k^2 l. RIY~J$IB(qV]!I!pTefBK.f!# OLxU'("^׼$Xt:144.yy Q_O|><z�D`ڊD"\. mDXJ* 岝qE !v#NӫQ@ !Du @$lܸ!NCUU<t:!|u \.:,gbrr---|y^U\f[4Mc||# ertp,?V!ՅAUU j*(!E̠`Hǎ#6m*׬|>otuu[n�h\.J)<AaX,"ˡT*}tS,p,RH5^&VpX,Á P @QADQ<y4WjV�0$7Į]p8Mar9WB$Aww7Z[[: J"+S:b@�i"a``�###C(ԄUVСCXv-t]'.K1 Yqw⥗^Ν;ىq eP,1::jX,X,Il,knjo`fX_ �˲fH$HӐ$ \ BQx0 /^`_ ~h .`Ϟ=8q<oߎT*EQ<, N'\.rA$A*(`YN-RU/n{ʕ+ I,"J}x<B!|>�@KK 9@ ~8w<< fH544،ø;FqT*]VB$M>?Ae$IXbl-oy�˲`^P|BVD"E~�q1??Ç#"`zzhmmU0Ѐ~WΝ;!9{Xz5dǂx<˅D"V#0`Yttt@u2 ÀCss32 N:EQсz$088Q0 ]u* 0Mb$ĉ`YׯΝ;pI9s8466Ce455d$ٙ%ǃh4`0YmT !DZgx^ 㗿]rQQ.*5 C%vСnذaŤ0:: Q!I<N'z{{f~(y```�r r! "8 rt:m$сv�eN188 .eY~B!$ AEӧOcӦM(vuCM 8xP__SN! 333x"A@&AP!hŊXz5PUA4(EQP*i ðp:zpy~PP(`vvrrv}b8{,R/ Hw}cM!i<ưay߿vBOOl"R(6== YD H$ 2<Ph)aguR LǡR \lzj EQ%DQ(āyf`ll PZ|>eY<8p�4MÖ-[ 2d I"8q6$d2K.ٸ^յZiV(X,XE[[!ebb DQJ)By<~0??A<$I"W5a%!H୷Ν;rkA$DQl޼BB X(ą :XW'Ħ&L&cà(4 ~Nr'NK gJ%?~lMMM|`V*$x'Nķoߎt:t:1tbݺu|;eQWWN\. @ p8 066Ia:8Ckk+~?r<dYF\Hd:lقkbnnϟSSShii(Xbx vm[li5 rm۶y$IiaR)nl޼4 ccc8u2 Àʕ+с.�]בl\٬.T*!c``�Ø6ô0 ٳ0  @en#᷿-a ޽V0.eI__/d2IBrTU B<G ivҚĄwVc`R&rRؐ|E8 *]nLӤ}kkR8[ò)"/~|+R/ڮht$A8F8ʕ+F-mǶb/iŐVm IXE0,hkk˲xW=܃\.Gu]g ޳gO{MIpnn.iP`&''ͽ{^#;vt]HӐeN. H&%\.`噦isX,vKT(p6T*Xnz-z.& ұ\(ޛ @.#ݻMUUI ͛mIR(Jp##Dn ҒP(PeP(AP.{̙3餇" BBȑ#_̀]?_d<$IBOO蠅B:tȲ Q/}ms\6-`CCCrjj iS^豕,O<Y}ݔy:22B bEfY5)^r>|lR)2>>QiX$nq$ǏRt:i5#mW(033EQbX 8+V@}}=E$IV1Y188YheNiPL&I 333$CE*"ٹsgggR�kn۷oG*.]"bvJ7n܈:!8wUU0  QQ__o7*H50 "Lbjj Dl4M\.C %`zz}}}HRC͡XՑ{q 0fF/|i4Hd2`0hH۱j*z턦( TU%B&TVe [Y(PMDQtR@R!|djj $rLn70EGcc#x<4cr,&�c֭JqH4 ` @a*"tNn4DBX\@u�@4%T*L&Cs$ Lb<#[e7$NO�<`r:(I�lz8eX5H$A ""m:[`@uM܌E`6A$+V sss}{o;c cu�˛o~xSooG4$IZ(Y (bvvv:T! 0:;;!" TUE h\.:uJyO>}? r9�"ܽgϞ;vY!aQ`0hWt㋞T*IE@EBE8.믿>+pi�),,�7z�ܲuM֭wtt{zzX̆BaL&*}�χh4 ׋br M077sUرc?��PR_+,Us!W4�X p6566<hr!(j333)ittR__dR0` BlkVkxc!\x� |;U*<~�� @Ypr8�t&###txx[kh+f>�FEW|>�U|d]+k\>s &f5)I),p 1۷GnG5if4MbUz3_7onhj$M@+T4T4#6> RZy0#(SJK> !p#J)k@4 r e3gΐ)ǡX,;s뭷/35bRJeJi4M%N'1MBdG,fd2`tQ[z|>d2$I e]@p85$up9LNNRjj�B(v:F,|t:)ժ/|�ripݒc=h}}OdY] [1nyM<,ضm7v|_~SSX����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000004460�15104114162�024746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Removable(���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATxZOI}67a KIL8 (=Y�;Y)vsιml.a/QH%R6&N0i`Ӹm fꫮ FmFmFA1uB 4\pᧅڈb,cDZ1.@]0ƪm׬L_G)}1P(/_{#|򀹹9Nbvv6055J)TU5%xoK)5Y]ky籵2BSN y@P8.puӧH4J^Q111+W�p,�׈�7oիW׺Urbc&!!$I IW�899l6>8nJ齖 @){{{?JldYƵk�opݾ}"Hؒ?7;=q2ži�$]0DH$(#iuu<#1}ΏaeeŖQg`xݻ]޽{�7n`ggۖ䏚~qi:uT*|1x|pzmTUիWM'S`N$p?ג(HR J4ܴ��&/_Mْ?v6$AA)oZ�ϝ;ljUv|+�޽{Ba�$ی�w(ڲ%]:Ӱ�X<ϟ&D#NRQpg -`MMMrY`3"Ȳ\.p8 uIv,@eqk||lďU;i~i04T* _&X<JA]``tڬ]0_?L&fֶ1̜'>`uu߿7pt5cNp2k5R)`ddϞ=϶p7?66F�ѣGpҐL&!"c$ŤVw` ,,,p�`ssWA�2 A@0(s&X[P(6?YEug뺚W ˲ܬ?힌1 ۷XZZ_xk$DQDXDOO)ifaFLl񠷷KKK{7�WKhԠـ FNk̮(!V^ .aڧQ/-].DQ tkJRB(uP;E "�Td2GfPM]q с3g8vN\ˬ̉7jSK>r:S9H4K\-aV�xȎz+YѨi7T�+x<~dEM#} vMht숷"Z ׫E|[^u9<Z='n6~H0NT*!JvEfloo @nawwG֭q\�!{)ƇCJt/;lF144qAj^QA.63VX՛d2Ӿ(o*,(tl�8lllPPMw_@yp�8Ji:͞~a7u֙;1;C4 n( eb,'QvN��P�T*g /,iWf4µZٛϡ7o[�DQ잘xr&+cl{kk'O @@^@ǥK.|AB1ơ<6M!D{aǩUʳT*PҒ8ɻu$R=)4)�K{dGyyV 'xL^(2jԴ;Ӟ&I��o36h6 Qe ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/drive-removable-media-usb.png������������������������0000644�0001750�0000144�00000007157�15104114162�025543� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs��b��b8z���tEXtSoftware�www.inkscape.org<�� IDATx[ˏyUUgf类Dqd, AJDK`+p$!|.`ه�9 ?!@KtI@Æ-@%H~E E")J$;ÙgwPSU3!R@~UW_W_)%,H�^{~˲q �w5f1g\޲ʝB.?HPBB&� /ܻ+s O]f_%#ڝ_G{>�*_D`$I! j|B Asq<.8O e� L�@xtR\tX*p =]U!)19gddτPq 0H\u2f3T"QLP*8|VI� Qض}WF�`ynYDI RURJ) |�c:M$@�}c5jZG) IxJe^uN&S|7d]uu8M� �a(S5B,q°P7>\}3F$18O@)]{Us& h+O@e1RKWj�{5֔ Swq$!A4@LC/y~$WdvϫaȶTu7?̵/c2Ⱥ(%s煼"*2 (P6P�}_c{ m0]x@]9|eeB`v:.s\7 ajO#p] $Eµ/qdɄHb9Tl@ѣ#xThBΡ;%h!B2 !}8זض I0Pg6h~{Q`=a߈:O"x4۔R8͑W'AuQ@zqc_KKuGhL!</ՂR#A^ocE H T*m۶ hu 4oz8`00cRhx xYkZ $j4E�)|_rA 4#B\/~Ř?<=n۶1y\.:PvHT*!4PF)K1ƒk.CfduT* T<fJ9ZLOt:=9q.Jӈ^HkYJ,jC Z"�`az]\`{&cq w< @J&D�<0_QQ`xFas=Kzq<Z= rP}$TS֭[)0}C,Զm;5WU1A(/{4-Gk`_[?S7q{R;V w". C߶mO89sa6͏n(zrUǟgh=|n_.%ɐj5z=�mzV �v u A:GM ^V. ɮi:B~Cgw8uV HFq L&ض^u�F io>HVL|rz^TEW`a:h`ڠQz[lmzCZ5W{N뱿qFDN? w3`Tu<IEzۚ`62, 6%\h_3\xj% d=.ۿC8 h�vmnvYkf#qA@-`"Z[[`,KvY=BܶdLop>n_g}HyI_LDHƶ-4MlZ 5# + ̫v@@]m%cB>`A 7DB1zm<ab0 4ncU N�\yo~�_|_W:'�c kHRg^""dDZ ;94RFbi#8G[}GϠjFf'朴¢jT*FJ@ V*݋dB-M{WA1N">n~Hu-@ P:G5s84u]O60NC�Wś_' `\&-4_wEDdieẮspp-;ٳM۶f% ukio#ÿg@>Y\Ӕs,C5d2/8H,Ogg du('ɓ@NɎe$򌅰L|eY&padz%0e9rEdB\1^obNjp�ZvֹW6UHo[0wX s@`[L�YzB, }\^1O-|RJ̗Wƨ@�VfPX>sN w_vi:^ֵǕ_z)9Dtl6 >TZfo^h-|:Z+ϰ=-?>|7Hɸj5\ò!0IrR xQ`q5O +Bˉ(TȅdeˠylX|^Z7,W6C��A75 VsǕH{pi�lF�@F zw5DXZ-Oŭ Gy[&8p:\�Į#io� o`z)$NQr8x;0�;~orU- 7ao 8O#,Ѵ~2T֝er9klkkK XnKWXfI)PI_$v�%6wX;NV^뾪 ^ql({%UlrC1ZT S+hTpywCA 4kP%}֭}혉(mQ޲wx}<7oj)Νꫨt%(, ~rTeFD�J)\5|p?>g>AlEm pn]AD٭+#xn9F#mU�rXq'@8;<gq n[Lu%Qug&7ڏqq*R5q8E>d`hzw駟K$I,.Mwx pJ,+/?Fs�nf0]�l@iUvN !O\ =L hWb�n�=TB 2_!�1% �3(�C"*jc/+w. yҚzz����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000006613�15104114162�023352� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - CD-ROMǞ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� 7IDATxZo{gvgvŮe` v4 f6R ޒVQQJAi[(4R99!]ݝ}؝Dʑvvw;wx,<+d=Μ9#.--wl#mgcڶf�;~; Ay>N4p.\[-} ;wzw rIV\ݫV, }Ο?9y…G�ccc�v[ D)Ų^Âa<s6MOO AmAr:H`ӦMX^^4 CӴ_N\Eeemȑ# :sLi^ S$�/ò,Z$h([TWO=c g`�VVVDQlI$d2Ahf!I� .0�G fuŹ^_8QaY4Ms�ѣG;V�FGGiLPUQ]]]hoog7 �t{{;@&cwUU9ÇAyܹsU �᜿qqpΡ(JITd=DOQ Rs֭jU``68^EB5 [( s^ @9gDQ mDX]ױ~BƒJ8yd?]aD+_]P힪ؾ};CeE�EyYm۶~1 V%:4M!!l%݊�pO=zRwt6"%9iؽ{7�,L-GY�d}###Pe 7p( GUU҂D"۶˒aY�8on۶"Nx-Y  a0M_8qɯ/�Ν_z%YS7jqA"@$/�7o|1>JY*ic< @)=}!H䆿3@ PII 9t]�9vϋuK�H&�BUUXAIЯGݠ./_b֭[7AY^ 448?q/N�rz_-ki c޺�O !{J|6 C$ Ȱ��hnnF:dt%(7%80 �0:>>r�ػw/ (x(kI 0Ӄp8L!ָ4u{ .mCe¶.~8c $m5#r$ *%ц躎L&JkX1�d~~H uAue<xDL~og~+C{M}: Z@> UFeA|#+m͕{iSJ !BP ?yaa.a9!Px;uO!,} N$Ixa Bq4 D"w>hdN=1LNNmOV5_� EÈF%@QF'KKK0 F|טv�jvv'Nn9744 s^U۶A)!`jj}}Wl[ � X @.6mI`Y!Τ!;IB!tuuUCF)-�ٟ8Nr<Dc ---Fc;(c NCMs oYO͛%ŀwvvbqq yG೜bdR Y "{] � P[n=VWWǡzA;BA4u9 M`RْT<Kww7t]wCAIBK@ʗchmm+++Bww7l.T(Bx<X,FY($IX]]-�sFC*R4lRff9� b@8ܹB`f�9CLtIJu7c#N|tSED"߇4ܾ},WSB @ȶt&:.#@.( ò,ƘM I ^8_ZZe9hjj* ba!Nۈ: 0RD��04\r}ǎsX,K. $M G0 Àm~c%K�,6�>455'(o?x�[sss7 &�2�g__x< %!i۶^{ hjb&fggjI8SJ(ed'10pULMMaii�D/7d?]x��Y ��@~';^gL4M9'd2h {?r㷚TB еkp=_MRiJM);CbBl۶ĕ+W.W�(@JÔ,?@ ٳgnkk; /nXҎ84#UU˗133]tO?t/��PuJZa�|�6<:u˲?rggL&Clقp8qA�!_\\|� 7[xO)rMJ@8p+⎡!200b\^^F)mW_}S==={t-9ءTnS<�8_r|J <yq{oqXYUU g|ޭ"߿)nJƍ3y,�}6F#?~<JSSӫm7؛7o7oFss3dYv1~N1??y>77~ᇿLLL|8551[j:ߘݜ�X,jhhFZ݋ Tm?RԿ&''yYhr}V5n�Ix<EQ$s#f޽;7dcwoi6�o�NB<~sP DqpdPEA1� ֌q~DDɣx,/^u{<+6Do"����IENDB`���������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000005653�15104114162�023513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Hard Diskՙ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� TIDATxZ]o\~|9w kWI9BAlbJު%4]VH-[*qep?b3Ӌ guL)b_is}y}ߙc`,cX2g*(;�3ǫΑCW޽{(QgZ__ Ξ= ]�ByPQu:|g �ng$ xw˞m޽{wڵk(,輺"4 =G}$I}'/i$ <oòm<~X#De�EޙfE|(LVdwz-v-e%y"ycq(7n(:faZiB205Q8HA'O駟6 xhizgvv4Mt:0Ƅ%'p @ӴlQ1M1Wr[Q!`}PJi4Ḿ4a&t]4Mziu]me~*R,c R_|֭[W�ݽ'!az  ^. '1�}TU\p�>86(w.]u{`!MS˲hJivM?/o B4MCE]$KKK Zp BE`�4j <.*+ɒ@l3"|<jZ)MӡIP ӧ{V_e|3f3l^ <ayy<1?߼y>y{;k�' ŋ[.__|Yx~�%MV]~椪ʤpcq @^dz>C4yRn$Vwf֪zU͆F]1$�sƍZ-U$I0 "̾w/B*ua瞃84[#@)sΝ4M% y=oef**rfi a|20 '%r_mt:}{(fY@^:<>]�rFQW^y�.+L@ժ3^YYAH@7ѰmܳA L Tm0˲)6ɓ'PJi4ܜ82ƄgwG9yePg |Q]Q.h14ū �v!�Y]]cg@�t:0 J"'?t8xʻ 8r ?< h:_B^z%JCuT*(+r~y��P*P@)m(BT/ (a /`bbG<MS!I8RMz@L_e_'YXZr 󰳳Rq3ë7o<K+W �x7'O4Mca jZ eS~x+4].PVA)6!-")FRԜ.&''QVn\ J)2011uafs\{rILMMu]DQloo9h^öm9I[2 ۶aɾ}qc6Qn _q'M;|a.pDwQaaa~cl?T;<(mPJE:P&#cqv M\<2<cm<:Q,MSLOOh;$2l6{R[ 0e4 A5 Yb4y}}xHc.fffDcj¼'Q(ھT*믿 "VPxvwwG'S4n؜oG�hww>|?T.eazz>JT摠hGSTdO@Acho�v[ E<ɡp||4�fggAkvvZZ<8qBgt099zo,-}lmmP|@ 2+וe\TEqqROD|PP9£R.xUBȏ#Fѥ)n_bLv\Ie( yJ8z010TfyEEQJ{C.',�=. CAso ;qf/$1�Bơdsm7A=BH_8s\Q�r@ L�&c%I4v$d>D`ass=؊| \^_'I4M!@j�4í3gΠhT}σ6dj5V!c8ƺjU�cy֮�� y{7MA>TE3^GuϘy//򟇸w�RLk-JoF,ͭ߿'?%�S~l6PJmƘ� 1F!꺞A🯾av�UoIrS6�>3 <:Cp{StI.͠}WS��z0e,c[ ޿COЎ����IENDB`�������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020112� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000002615�15104114162�024664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq��� pHYs��;��;̶���tEXtSoftware�www.inkscape.org<��IDATx]hUg6DEh 3}35"CjSɇ, vg**ZBP&ŗ>Xm$EbC`m!s|H7nfg3ww&Sq9޽3@DDDDDDV~&04s06 l�m@4x5sM zʔYm 3euu;F+�#zMGDRjU?o5oQ\}GYCzїe 3-q&N}9$sEMH LxMmE^Ffw1`*iUm&RU�RޱL�.XTU't-g~6 >We~�rv4m.Sw�iinz9Ts H7l%=3guӪؿ*lyDր "D�{ eg@ (�a6Q�6 lFX=c z�` :@WA44_<;Khw`@Y_2^O#R -` ܻ3VN}iM-`{GrG[m֠F(�lk��.jvcҘ_7gw YY9; @SS��}J` Д MyДg60w骺9e cקA>9:b18k)w fA'pD4{ mn㊾):(cP2g 6cqE|gل6|,�KQskB% t,*Gj,@=x̻@nȢӚ<V @D\ BrpRy�&!^�UahHX88)B%0 ba�N=s�.NZДp=ˡD' M_r2%ke3lp)ջc~ŰOD9$1;_+vs eTek.'% 9' UNEȨp´$Jmu<A-b%"U U>Lcd4Qeg#{>ҕZ'["hC >%څ2Zjջh/y~T:i٦:z g\ApȣGU< �mm/K2`wU�nkzLz1+P>%@rA9E<נI U#e*A9 |_NE% KA� e "`<~Y9A(3&!� ofp\Z=d#޸SP@*Ev|F>Lc4Rd9GDDDDDD_LNt����IENDB`�������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000002620�15104114162�024510� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq��� pHYs��;��;̶���tEXtSoftware�www.inkscape.org<��IDATx]TeY͔-.vgȯB* 1!66?2cgm ) ]H7%UYE9KiR˜idgY=yy<H؎sM3d9RE rN|۱5D##�|\duO U7rއ=GfWP %z||8.;g_XouaFN--ʁ|%x ?LFneC@oGM"Ķ~g~S{JA,4Ed\;3IPNv5%,BubsP/,SLF(-@aFgP+Z0DVEƓɨ1}_`t;;ї!�@n S x8*PѬsHkM9P]FL` -006aè9<'J%F�bAY;$ִ݃F{Z*xZ{~ .:֙Tך aNecR|v�]!zwm@FKZYv 1AUƦކgZ ɦ:ݽ";\�n^nLۮ˸kx(3Q U:JEȃX6V*Fvx}i _R& {{ׂ*'p !}@ElA?-Wi}56B1~*[Lv@zVTN`:݆gY:PZ\1"D@uuvUCo=_ߪ(gM[3Gu,`[Ys`E*�;xuQ|уRJ:%|yM1 >'@&l#ȗȾm;;kUi YRlWu@ g,HE XwdmU�6oJ%v��UxǢ4Wi%Œ"X AEV$n$�C)X-QlL j7?:d|dQB0gHv6ÆZlj`[)+~6$;2=�;7I~Id@-Ջ *|p!RȄM*<g+~O"Ugg(?95PJ̑b|17Tj z{~FK"3<{x؀_$�;7‘נ_$X�U-wSНu7d%YPpOSZ&݋)dڿL_y׍����IENDB`����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/64x64/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000006000�15104114162�021643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs����c���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� IDATxZklΝl06blqL«M (ШjӦ?DRJZ5UR*j-Di U$~ڻ=1wbnzfv|=s.0ycGqP9pm2^zo3 f˰A8Q܂U:s+nB_ }k;B,YTVh"g(۶�Y ؤb=EYq9I`%:@6(@]^Ǡ7@UF}ua. i͖=l9"V|@\hEEVcKm*jEEd. l=ezا4`ƴd^^@F="H-|>Ӷb‚c{߄d �Y`Lr;NuʞLdX]گ #؞깁\z1�3 [ +XFC#Wȗ[1I3k{w<݂zO)�@/} zFt҅LM?EQl2$@MPpn_F$�Q8b9Pt4 r WZc3a'"ƵըډO>H7B+ &Z;^ `oACӌom怆&,a Zfjݣ11ϰ1c0e aͭ[PZR*.woX^wi/F:@X\TzMFhzZ]rNJp� Ɣ9z:vҹnO@BC 9Fw1,VY~ahvnU@L/<mܗ&I#I7}X__ކfx$#z#t| -޳V,I`E: @�~ǓTQmg0mSE+A<T_[ Gk26ы[vaz|:ty 5flmF^nhJc9  ʙk0TW9yKv D̂lչbI?;4 a]cצ7KWVݬF)MLj#�` f gI:=XDsToŒ2qV"Ϟ� *C+ jQa@ $[yKT�V"�`ln5#:ًuص>jKY YO;/,('WALN)pj!s< �<I2 Ď"r` G$¦;0mNp5߻Z@F=b| s9,*E[i61K Ā[o"dS$Lu& `42Ank^1:qu3ψ�gm�N>>Ʀ yM`/BLF6G1-#�h Eч% :0w1֭+SEA$/B*@ӹ1o+C5 ';}.Jĺ&!b FⅰO;eZkWn.uhz|mvnjeXZvmO}娮 x�8|Ñ.-H6!!!a"4=ѵRuU/[=e ֨kjy`Zr2[7�3fQ\XgZ br n?FԹnCJצz0mA~`/<`x. gftHB'-((c&oZ�fODεo2x�r}W0ma,tLAhwH1A5^z@hl \lߎJ{(KA5h9n)�jG�DL1�Ä|;Bs&O s;}l=EZub: Kfq nN܃0p/5ҾƐĐ01 '@L}|I͎{P%7#dld: QwWvG Ha҉ aaE;D ѷCB*Ӆ eC/ya<wZ;+�ܑ̾~]9.f |#/�*$U.ۉc4 @�VB6?O�/�UH'U =RZjD-o%4TL|5 aT3Iڏt@�4핥?[خ;!�sUUqskh�iD>>*i'oWvRewwz"w� 3&K6I+ fv%]�W ĉy)'k"�)C$e {=g2t9OX ƅ#i%5 ߹n$@2! ֢8 mn&_ xR%8p-c(b#d!pCf#){{/!(j~x &)>A0Ps@|V$L{\gc 䥐<F~v#03|"f3=UHcUKv$ƻ3P^:iB< O*AReD!fᙈzoxg$eָJʙ% '~$5 /ҍd3%\K|@bKad1ycGRl����IENDB`doublecmd-1.1.30/pixmaps/dctheme/60x60/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016442� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020456� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000002447�15104114162�022672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r��IDAThCJ+A+ zQq]Po} _N E \PT}Lsd2&!qN%񐂕M3&Ԥzj)9<<|>4-xhwwZ[[-5%?)~||D x% A)P4kfbN_lDɀW+X!O$p㪇.//nooEn(A9ִzKquuEtzzJwwwzwrrrjkkD/GJJ PWW VWW'=~̢g///n˃+8"!}||Lsss"tёda8foCTXX(@siVƁaga0<ZTTD###8^?88g(<ďp8ob!j``RSS^__窪*tQ୭-gdn-ƆX�!vIdl ZHZb3B9l&Q`.2,vb3@d8Rl$rsswҺvtt㋲2i]+SḇI TwMɉVa ̐8eE]]+2 ⸇< јΜΥi{lM 16X  sܤ}4v5㘸'svxxXL>8(sF !Vp+!}ss؂PSSS G`2N. v1Ntq*++eh7`}l4C5,79&(qpl,CIRl$ñyp Ta| +777Sff^ad斖!P:p621l'aNrqlY h6JFFu 8FWNRl$C5Kx{{oduC5vĵ-2uZZx=y AB,c݂-X>v 7}3n8cǸi'Roo7/ckH6imiiIm /#1^rnP-5awIXR^04#abFU %SDf,$ p2r@,HSSSgff4l"M`#tX?~K[2 xc AA:+(z����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000002677�15104114162�023352� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r��IDAThC[(e_8%ܕh2̓D%"!Ar˫˸<Hwyq߲9u}3Է9k=kߺ=&q333cښ,--f=Ce c666޾}f=ÔK6 a]5|uuE?>Bkި῍ʰ!AQ #!K oo h 4 ]x oooߟ>+>???'Ba]*8J@ss3シK{yy]`aASl@ܐPTTD>Zvi #䏫"99>~2hO@@�1hkK1#\%%%PWWG~,~MXW>4,`j.nttUH߈bΆ>4=<< ̖A*effBWW 544UUU{(..޼yCŖg 7hyzz Z,pⴅrHSA[ 6IIIAmm-^]uC1LBB %{mmm4%aeq] FFF֖4μW Ao-, Fh;;;󔖖x ^ì_RS899R{5j OTϟiJ{,I  FK ~_]]Mj4 IPP̀ Q #%Y+++D=B$Afgg޽{GS�dΎ9Crې $e_~MFҠ)))pttDC8:2F|H됞xb@VaQQQ$-_BZZ\]]ɼ^[ A- YYY9xll IZj+++noMu-mXZZ\a/'dB*ȰZXXW,vcb0._?i&i] GGE0ÓI23T077G55|6qEِ2f_zER jO-|b͕O},>AGGGŅi<Ԑ8>.UNNvϖ $>M;+Uatoo1 Q0) aIOKX0?#cw ˥c!'G8RaCFaǰ!J-< !udؘćQy(vcj _|߾3a]δLaaa~1J 9]]]d2?\w1�ǵ :>>Kߦyᅿ bp����IENDB`�����������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000003332�15104114162�024437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r��IDAThCOEg6/{miCUO zTPD|AAГxj/lOz,R襊ѴI^Όٝ$l<7dfg~vvRK-RK]3Q>y9h4yWXvؠrrU]ȱ{A51ou[?[ߵN ER(T) @J 6.]l^:+*F7Wkz2"X7N 2@NC Z]>>uȎ`{U.-B/ U) z}UO^'ϟk~x}߾ %py\\xص&hY`sJӨSJ*#v<v>Fʘ ,D#j`# 73w{b4kY: BLΐ=ݖ1iB'?x./Tj۷!iVc1lZ_9wvgm"2I+l\+2T)?]&ݏl3vDg[3 ԇHId1$6H4Sa oT; %cz*NFo;&Hk;L^Vad쉣 R)%u]+߹J&Ǒ#M:zTi_Z鮽7n�fVRJ:Ba n*582/yJqRU)e |hn"tx�FF,�mۀӅ ߯b!% ǛSX 8Pi$'` 3lj!]'4":HClkƒֈς|f%9Ñ\aht̋^2isvdqlDC”v ;u%�6(XnU:5W(0EclYn8c'Q91fau4vNCso@g4X|ǜ X!N(d_$ cLF)3`C +tY?qlC9?^DM.- t&a#f#Ös}CYT`+3{ I0''9_<UlJ9w|`82-FdENv.'9i'x)}c < ~ G1.<LuÑ<!"?lFqdV � WlF{4)xMpZǃx)51f(9*(oa߃e"Lpj Ke|Ѯ@iANF>mmߔ:g.)g",2?*1%g:Nk|]uVsr@3( ut S!#xJ:NXЀG/`@xhǙLx+ܸT|sahCbt&` QXfMz^]lh8`(-b#b< _!~<BEѧ_$#|λ:pץJͽ'jG:j Y{;~ͪe2^h?@qK;`vVT6?,c_-XZ$BsTZ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000006714�15104114162�026063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r�� IDAThs[}ǿ@�wJɱ2ږZ]ډ(q26̸r;~C;L>H'O}vL+-ْxS ;pp}�x� E2/ޙ.ggvihC?ضphCO pwEoOsS=g_'O:MSqZ^=|K@}[s2iToxVp[Oz\:?p޵>q`v|z8ێW^y̟ ^[:Gsa,ق׮LgNĀK`R9)?T:o z: Xߌ#p[8�2<^ J<n'(E7 ˉ~*9Ac6`Z&`z1ѹ�(؊7^=1x\xVc%(!bk'Ecx뻯ҹ>6`@ovtv Z.up;` 9?:9^c6"\�K,`:@ v<7ЁhJ)i o|._zj]e.-A8fyJ�TηN,vPJ(2}][ome pv|>K &[gm[|;% qUx~Jgź |{{ `^xJV$ Ji8_猣ދأ }$`va K`+)؎& &M ^7.]ƀ7l>K` 0Ƌp_s|_;)bN-1iJ EGOW# `{υCC hf 8U5s`5E@iA]c?SF|p�:#v%:9vx誁{g}  8+?TTw)!u_ߝdEGύ;XBc  W_@{�#r:163|ZUʊ'feܫf8vxk],jJ.]SSN]gc4 v^ @]3/.ba~*-a{'BlnC[sv[8F&،$:Y ЭFU<?dUR*S5MuE z:`ђkh>B!{7}CW.T K&eF@xJ \.z`;LB,;bStvwVhd_s}_ a΀5"Mo" %o.>gj^Z c~i,`xmxܮbX")?tA<HiWi;P~wF%vay ‡uX1L�^ЃF/8?ӂf_S02]织BW թ�MJ {_k泗w%]J"lQ='Jm�E%ݎ�L@9g`:"U5[16gX,@̤9@ySjK| >[[sݾt E(Hee4zl{>YF,-(Jv#eNCi``b&t*s~f�0;gq^xOV* C <b=pؠi `7-N`ܳOq: YdIIq9~_I\grj䚖ësc,I�R\{W)4fyUt~SpΡz?%h6jzamkeSXTë]Vw#t~9\> q$�"at:ebVFG[R) t4&}ٮB%'HY2|J?1D"(ja6C'Sw75^_Ժhmb=:C1G[dA"'in%Odw'MIgVG2%%ޙ#E6@< *`34cڻN[os8]` x( `G$d:$pI׹qNtףNh(TE\dpV$V 㴬қoh=;pAola`s)F|maEg -31cid D~X`e>kD#4Y /Ϫfeo껎,oe/SAPꤊ0 L;ءa#|0[ڻLF6(}(J B $R9x1VɈƲ{b,%=_F&D8Ut Ra#JX[RCKJ dtPi N"sd#EV±1oڜcB�d l?%SBˑF@ L)mւtA)d2 lmE)acdC]I\7n}r:C&Ըś3b>c4BaE )_aLsÙ'"T)mklh ^AGGCV�GJ";iKSHUgW]0aYCŬ߂NJ8U)mohCp8={nHv X Hn)5?qPhQ5[ Jiw]#EU]Mp:%J*C2)b'obal!"փ[j'ht݀U(^ p9,h7nOMs*r&jմ՗}d2y*kW~? [)k[A9Q=x|4)Sr�qbjjx +j::KLs,7լXO&s3&gUWmsqHRFX||'#IJM+rHK j�T$Ļh9t%K:_(%a{18d<Fm..=1:S�a[rKQIֵ[ՙD(U`tQDG|[2JAPlPf</FLL3/|osНR4!ˢZ6~5P%3>4|]l6˦_z:4;.']\ hdbѽAQDuRfZ)=ey/qQLdd1h%+O~(bfAmS +_|陳1!5TI'Ge9 P�Ҩf* m5ҡedͿER4/\"sJG6rR Z[iǕAF=$O# _J%Ǝ1Z0����IENDB`����������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020102� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000003021�15104114162�024644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r��� pHYs��7]��7]F]���tEXtSoftware�www.inkscape.org<��IDAThmlSUϹe uf b0*A] 1b&/1.ƀM/c *Hb Zֽ@1%ƗH3j]]oon}9<s{rz ،(.fQp&kpkV&f`qgXƚ[ΰaIKhPd~�3ǘ+9_ZhzkV3haFlD�h M%.a53U�4<FDTwE+%,p1=0jsuXQ-PHY[EVѨץfD]}y^lrӆUk q8v]ciWzL'4!J9)B�-zRi ?4J9MmI(Z7ȸݢC{=h#X?2!L;VB xIIh1kFC;<c�ƥpr%mٱ w\$R$R:P~{W}i4pOYB)_O1bj � HW�wkp[`I'e `�\cMqsK4s�I328ġ|a0+3C*-hx'o8@LMDr9\V.g b,i<px#vTգggU ~DwoKm$7zuHt=I8s]Xʸ�,a^sG zGΈhElQCm)<fS{$|kEŬtٌ-6W}V2Rsu>hʹY@.u~i4̓o&Q'$uRnT7VA^L.<fBf֎IX J��l 4o(1A?4,aC]ό%jɡ+a]h&2ݧ9W3pV@y_Yp7ar,h�" J!WxlB e|U 4+0d,]PtRzw$ KzkgCXjI=ztc{�hJf_�2S/ji^Vd>3L)̦Q+D*  44,g!e%O<t޲01?=lwB=(!+mԏ[2|$O8 q4EJ}K$ Qci5+| 29P<+S{@pX4�k�^�pX1.^�Xf;׎bLlKAs}�c?@RR}uHm!snӥ۔dY=!g()q*2�cskpjuʪ0iFǃngѕcccccc3NLwKt����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000003073�15104114162�024503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r��� pHYs��7]��7]F]���tEXtSoftware�www.inkscape.org<��IDAThlSUǿn(B@�kA"9Ac$=$D0AЄh4̵Xe[($fms01('bsmG0bf2Cb}؊o]klsϽ|9}@"E)2il뵁r)1YVdB9R[q@yB+�o•+xy2ta�X� b^oZd{?bkN'>Oi[-K� ;KeIWsʴJ}|M!GU(bkb8iaЧf#+ #7jRa[a� �M1Ӭs*(ۯ['-o% ^ `b,p;]푇$nS{ι#92@9nOK=^2wVQh[m[#2S@i S�@pbGx@DX y %m\ eͪ۬B!7 hjWy aҗ<$WL 2h]oS>]�gpdWynMDzŠ"ZB jIJu6<F75X1-`{t  wg`x, AM~mF-X%xp~f|zy@ُC5T(Fo3vK1-'�L&bТ=K@DG0%f_E ~cDbX=rs6q-TuH>@7 @*�n� "GAd]9ar_hę[nrvn[I0q�<Ftsw#O8 K$خ$h�KI=9N;znR+ yKM{H*xIhD\OL�듗8mѻYrNbd,̶?a `sR0G›+Nբ!�o$? )\tb .LE#xMnߙp)�x2,bV"Lf`.r0ͪc>괍31<�IEAMs]Vs&�ª�5ʦY�%!~w_5n Nh'n~zxsYXkQoV,l!7r[H۴4%Z + F'Ӹ-է 8Ub\B~sKwK<&5Ip(B;5V_Z#'W x8NRR8 G֏m`@itC&urr*:?3d%8qw0.k S8n={2%Z9 [1{D+'G{<SEZĶb;I7&>ҕkRÆJHiߖƦPHڈ[Дx<4xynn) vO-E)R$?u V~����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/60x60/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000005511�15104114162�021641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���<���<���:r���sBIT|d��� pHYs��t��tfx���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� IDAThkl$bI$$hh j(U>RHU×V}_V P (7čݝ9qTzs9gfEYEYE -5Oۻ!@YG/ wrCM`"+{�/�`-DX VVl.޹Ajtj5,F~*i-]kw>j/-\ES{j&|!���sPr<%ś^h ল-q[5OG6/�5O?#o~ʼnb"Xr7 o}zzV,[:^IbC`alxj6Tl#ǑO 1r;wo\>8:D14ޅܶ:R<dUU)/Ա7\Uw}712�"0}XU[m.⫻0*׶]_zCwNX-5tV_q J*mQZxغa*a+ރv }Aƺ^p myu.^Nm]-]r:T2pv7y{ߓX\f6 "Hq Ö;!|Z&?LC5OEXxx"y8{�(׉LyodϽ;*7TFm[ՇP@Hi$/߸|&59kgZ�Xl;p6:69>߄T^o�]wܫ6d1Sc9f[4��qv3}0pٍW"WCXv/Ul[Uq\C/z ZhP3j<٥o"הW>HO]NMF={jNGqAVlXy+֖[-e|g3x%sp^|QᲪ4&1|�LnP7“m/cŲUUݠ�y) OOE3{6WdXP�׌IWsZ~7D7PYjg;sVȽ5l!}HH�8k".@l25v\bcCj$v~_vy}+p-;lI-}0)vA*h8xIxK:zlr"7ޣzΟ˟{n>奫YoYDMUv-ݳa:!F&�0sOboUN[Tyc$0@C |x�Ba7Ym/&~)tG~r]N7vƇ{3 Hq'` Ұd`aX;[V˷ZO^_R&>&0ʥv>vXb#�dK9k2]r0Dܹ�4#<}cxV*tt5'wFh3{Ej8Ԡ`b /0 νBBpb<5Xr@%#DtJ3/UXQukg c:i~_;ߥk~R=+ �$pp P"`vM{2DZX T`}`1oL҄M/WG�ʶmq^}=se?-nu)^U)QA 0Y$xʢ)cBz ]m ,3 Ibb1nU _\!Սswt#p1oGP(U=`MaBEW]N(CE8hɴet, X@*C[ )HILheM> @d!Ҭ O90 l�:H1ŕAщ"\hap' �Zpe16< E܍E GdSi 4 ǟ"pM Ƴ`{WYiDjP+(�+cW H& hDtbJ!S\a=+�dhT[�̸ aXD@¢%J1Lket ,T'!61{ 0-hQ WY"1DX>A،K"@!}/pM-p6dFo922^ 0+�%@iYغT;zP{ oqo5 De2;3p6 bypMB)PK^�.l�CY ꦅ 8d^xTs:f|票�0ҦٟGλkN Xr4LMHpb w"HzE`>N0i[{ \c`rDfd[NMֻF:e /TW̵ّ8omZm1J.rI8x|YQz.u͔<eCf[6[>~Ey8BnJ�TX`v頯Қu3:^EYEY+=F"����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016456� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/places/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017725� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/places/folder.png��������������������������������������������0000644�0001750�0000144�00000003221�15104114162�021704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��XIDAThCXKU{G! YFpV &ԽP );E"3;߫937W"8S]_U}u3ӕ\ɕ\ ]LѶMS;_;"iw~ӃoI\P?ta$gr [`yШw?GJ@dTEnszS* ƵC n>`3wiA|^o蟗7?9oǴM;OhP,ӌ=/#gX2\qrgp!u? ~fPqj\7M_}=04*b'ىc٩\qRM $O6m.HU^ql~6KxG.PfIXąG63ghͧ;Q'ãR9v8-e+NvvU7v"m`S CKI#O|qs@Gq7)>E)57} #"r8 \¡0ă{󻚎[٦]Zƨ)x3o K+E~rPg'"4OZgPr�ipdL;ojn}_@\?R;J?B!Ii:j"TC,"'g~4oq^d3yMW>)q̫265A)n\r7򶊔nNOYɰC+1+X'z;ѷDXrVAFU'UDv5G 1 x- ^~1zʧݪml(8ȫ/qm&ు#qFa-VmstBW_3}.+0ߊvK~fHbbhB5lnN7(8SȃΥ9BQǥv1P$6}1_5NjJI�ZBVwRqꘗQ]F0cLDB"׿7;0 T|8ZX_@ܲ#g&\ƽƄ[j%՗SěRyQpk@Cb GM9elb@XV8~~ObI"$*OcƔcn`JRZ@qkU*O| u\>,"_Gi}!P4JL:fSf.n©bށY%Zܥ(hH�=! }�`A W KS8do%ih ֲyB*hRrS> ?%nC_A l3(1L$&|0%|x)W"9B FV/{x%-GO*2 ZM%Cظ&WB9Bl̷̍V+ ȗK;,|Iޗ8Q?BYY!y{Gb"*;חi$cZ͕q9 yj`Xy>L; #._GD?f}'_ɿ4i,H 6Lf#}篽_ՍOŒ ?Co=}++4=vv$����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020472� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/x-office-spreadsheet.png���������������������������0000644�0001750�0000144�00000004422�15104114162�025207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCY[lT]xlǦ~@T! y@ B>*'RgT)J?(RBT0RJRPUv^6`k1㙹; vVj:s眽Y{s 0r6/^4LGq@<ZbDH$b+6)*(v!tuu!''e>Ζa ҥK|n2#p1@ww2455B mRX~I/-(õkPSStqDoozF3nE:Ν;^VV6�٦Qkk[!cdg"6iEag[:HRÇjsΡua洞k~),-zzzAr@]߻wk׮5{`{]]ٛع e r U>jNpzb DL!;z}ʖ-[<djkk<x+V(w[۷-[4 <Qsss⼴pccb@}}uݎZb2<tӉ@ם:OB r T8W8.4b;^TTx I�SȮ BEyqgy6H@ٳ֭[["cV;wr*,,\$W*;;/Bx" 9 z?+L"f8h &N!ؙ+WT:CgP~~)`G!rڽ{w/PBݻXn]| Δc{�M!v-CdcH�ox" dYx`` qk|KSHPH1 I_W'FL!NyyyO/$zV$!4>#_`ןSN`Q1'ńB;u Ay,<_~=?zM�^/_v<f;N[khhX`E"x=<} C{WF/rF7P }o_x/?qBi+A>7hokC /v> Nf]Y= NI~S)wj B>)m6jmE9pd@<7{q}7ֱZT''7hQ i2Hb8UhϞ=HT 'rjnnY5MM@P-f"cB?~]?dBZJ\h}Y*zl V%VG9/#sG:jJyt:VQQN .v6J|r';Id�*W![ dDׅߪPM_Q1:U'6[JͶ@)YVASw5RXxP9*kʕ+386o؀V*}鷱t'u9IO#}rIW_\+`\ۧW_GcGӜtm&_ N>BA4]R:�BNHu{tj @P�v6aQ[G$}bx r&&Yzy$VF0X3JqޕcUm%wReNin nhaJi'0Q x/ȉSғx eE>lZVܛצ;IM{b`H%>Ƨ3L/?=r ͛Q@Wh?TZwDOSŊq7r%y9pu|O{bí?u@c7057<;з7PE ST}t\saڀ /0@4GcFI PPXRO-((7<OއΈ Ů(nĝW)"B�XOQBv}]ݍ>x-#@" qer@tb>t|t3C( ޶h� �>|X0)~M6A<9BHblf&>?7PD;> # 7?c\OĬp @+[,$]ÔaLOJhw~>JkjPA^q#~|]Hp `9sƱcNJn71#iATtMLLBP.]=refժU}.GH D2GhE)�ǬUug����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/x-office-presentation.png��������������������������0000644�0001750�0000144�00000003474�15104114162�025421� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCY[lTEv^Ŷ^BT$D( L'SDD}0FrWx@jLo Xn1<D m vwsl=lbk?̙}3b8d>'O IsZ`ݺu\LX *]_v-k2�3?%Q Eyt444 $7U*2 FuF-wpR85Ae+dFֈAK\aA&ĆNl?(>h&<̈mg[ܑ*n9ߏrvau"(+7q}j>>i.V`/@tfxJ96u%P[ K\zI^ʍv"d% p=ZV~юto@D[V. %ٔQ\QO^̐hK0|60k!Vw55p&$`VQ*d)v}gtɑQ`z؁,$&' ?j9Z]w'P2lX Յk?�\,MCۍ F˅ ,^Y3g%"n79.8mmXp!D6H%΃~q Wc֭p:>nW\KoO݋7Ґ HAe~˗M2꿲` qgn;'7�2G !"I$lvf&Ϝ_WxtqeCb`YxB$LX!?FY('O ql2") \271#@Cg> |$,599A,u�a?HDF5D#OQJ؈Aҳlܚz~HG< ZŌV3ZZ)}!Q(*B6׃qgA'%9Q2#eř(?;o^N<jtҸ2mphxB4 e+W"#;.:אLGkrM=^$َƛX3)GIR-GEÄٳQq6oƽz 9pt&"ɡ74Ķ\W_g;ʻß#+/Ox DY qMc`&1lIo3mfFdSl}+_Mt<\]~U,m(-/GHjYYc8nَZ6UtOOs]MMxx< o|Zȡ+Ҍh"O@;sVaxV~-=6%%EQcX=~R@h4"y߅(((6v]YZg`{.1E"&jَZJ*Ժc v H3d=rܾG0[eVm w]Fk'`׎OGo[VDjy2-`O�ݎU9P=> X:3L�~.^(&F(Ź&M60Q*ndLz- ﲜ謯jJN5%%%Knvo^˒Et 'ևlƩSd4Pw,@@DE$<ONnAL!_K0^:ݞ=wGވvL�6b~DxU%oi5#t,AsB�%M--1gL <(l77O<cj0Uӂ9Bjl$Ⱥh~N_ẗ́`vȤ۷ofmmVUUUHx4@VVV:ڥ)G�ubncRi����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/x-office-document.png������������������������������0000644�0001750�0000144�00000003067�15104114162�024522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCKoG˳}xm`D"!/䚫 rHqg sF"(8`H۱7@k_3kY<$>U==trׯ_oH?K&pLadҗqFLF r9iIRPTd tfbX #K+ZEq^e;]6nkpLc*tS]9vA: Nb|VWW'4h~~>p(###R%BX[[& J-@PudS~}}}{;FId\6![aa!PН{CL|s9V`zzí�굃'QOȗ]pdā!a‹:h9McuD_}gO㫐LdϢbL,..-YgS&CNC&)ro?R~*nMxxxOĥWKB]ƅ jٟ2 ]yU,Ky-1&Bt- -u{�旻ٟ|!<[C^ax9DYzovZ[z G 'ы!~3Kɽ| ĻflI V@qVO㱚=B,=yH'$RWП1p١2G.WHIVs*BO^܄T<iQކN@*.Żw j^ -/QԔ+^t'z,1vETlߎz _Rbqrمރi(W7& !(7OZ~lt MPkDI Ŗ]ă"nzr˰l <-DЄE\vUJe ^ҘD_`ZfD$]%vN[.ngN% P -Eq=<KO:}Z >=,x:oE/-) M%fc>hc ĤJL6lZVAx +͉RЦϜ9ԉv+`$!M>t8I7Hq8wlnnJ?~X`XWmɦB+& +@+>}4߀T_ٗ>|fnߦv+H`1ʁEǧہ $ LLLVw��DtT{ѭ[ŋiGbݻ֧OB'κ�Bl`DGw!2Ot <tlIk' m/+%xFO#O _iQujC"e B}VpB$x6HRw: 899j\|xtw<k׮m]rի?_�թ5۹1*����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/video-x-generic.png��������������������������������0000644�0001750�0000144�00000005662�15104114162�024176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� yIDAThCYilT>xv6 IjACHG$"RӲ&?M J(R)PBbV-K֦"J"LdXcc~yg iS)|}{w;=|1sرcGl~)0mڴ2eA&a*SN`K YYh%]mlw͖ 3f_~AܹpS!۬Bڎb (DѮq(ܘގѮc# q(DB‘6/΀^1 юJpH)QHTv8āMhgSBn@ x1,$" }{lp0SEQl@Ug˭YZ@X6̀p:xđ 1h)6Â7f[%C5GQ+ Dl s@G'LG6sHS)'<iuK446LZwC�?H:bT<M'ҽQԼwIcl[paQl޴EO%3g>#ֽ*24J&l`@0Q*}ibV ;AC٦0Qxѷ|}@ϗ?0,WΝ=<a[3dh8Y D(lfͅ~ց@l,XK?~\Z*'?)7nTMRXn(#F/W\`^H! TM,p($ g.(($"R-..25Bnl�ڊI<D4Kʏ!9+mmmę3gdԷȰ?T7 k(ch.�*Hss@֯EƎa7߿,wSgu:3" ^!`P B\ #W K؀i6A~Ol*˖.hQ%ٳUzw&W@K@n!ҔKe2h@j~x^^l6oެffӧCt!]qۻ [$/+׮]/=4B%M"C.=yii7L2@bQ9u>7^mߦ<;./B)--Ke(trtU"ԴNZ63H@ kP}44\WɞGreJ :$}U;&<e1$>s$!)S}K<),W@傝ϓ㕉'ʼy󤲲L SBHXU<% NO4(DjPtjL58+:'M֡>{Nf̜)zR"ѣ%Bi ᇿ HpUU }sV0Ԩ2ERR\\(lqܸ<h)/+S|FRXT\Nl۶UE #E} TOV\Qc8VZ#}J!2d-9FCv 2RZ-xK6QșfjӖGRRRcrsp*a jZˤIAfؚ/0t&JR4q,RZ}1EDH8V^^,jkվz;$20Z]zI.~rA}X(ܮlU@v9 vOR#r0`c$nƙ(�B2;襇މ�aw־ONUbF(fpNLqAE87'Cy}(A1`<jÅgnD7?'og)Aq) \2"n‹Uk֤RnnH!n9@ q<\4ˆ|55kr\ͅ3)i˩¸iSa<^}Z~6{N1\ݪ c)|2ˣ-KEzabHm<=C\>I@j+ =y]Ϋ{o{) COgFT;C8CTaFXY)Oc 󵤀!Lve7+Jvf~h/k[E ji681]؄j^m%ng2l0BQ[dDڼ5h,_;= ȘIqD'T3JSS&ĺ;-Z/)-6CIt4jhL4N~0h1_.xVM?PC[kku}0@鳴Z7g(tU],//O )2?`Rf}CdqG;3cV ~۲FfLqc,MZc}wFo= f%_HII ,ȻGd?6wέa@)mW9x2#NBU ^[7Wd fKX.xFwl\XΤᨔJR @T|Ό(/y?fP ov&L1Gk:Ҁ1l J =9º|@]P޾f_ 0a˰+f;JsS>r;F~qi # NN<o.*uO&7'N(y f ۥCXs1`-kh.wJ>1t?yW&>8_8"/ipL27�~ xfJY-@' N'l f jVeͶ4̟@Co/yS4=v 4!ŢUBmlhSj&@cπZk*" Vvz{_O>#¾-MR'6_8l2N\lY sG†�#`ܹs,Yҕ~& %y����IENDB`������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000003646�15104114162�022710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��mIDAThCYMoG]> ؀wV,و!qN | ~�$rq HpJ,,H5W3 GTuuuuUwu}7F)Opv`&&&)vAdvNk.\o@A^N۷Ϯ]::Q3\H9"+( -औQiJδh`wb2**89&R@CrUr<P.x_Y 8H9Q(64+aPB~�2≙,) gZ<LAq''HŻ g!zJq$ltH6һ%HeN xuFfff׶`+++ ۑ#GZ?IؤqȓM,,KDu}ݸq^|i}}}va;} y͛7޽{whK{  `e A7ݻwÇ6>>Y&=uꔝZMu͓VoeǝG�'GBn�]">-Ǐmpp8 1ܻw YZՆ>ǎ;f4jmm~}}rQh4aD%={X;wZRAVU64d{BBT-6hU$*V  բVS,xlTLKP "us1h'Jݻasz~~^L5O FŢ$ĉq2ܠ'O cF \c^zoa<#�`-9�2 sW+ Wgj>vÑ&d#7�))@Vcn Q%G]DcnΞ<y!yZU+~8;h(V$`y>z)QzqyЎ/C SI! bV|25:xUZ%Bn�nP Q8086M!؎f# ߃t!a+i6r*q((ٳg3J`e'Pϩ pH$ 2$IU5/^$@\-5Mgm_ehQHH ܗ_Q2>ױI0фw u^%+f"7�ƻ;#CF01S/<x+BeN;Hk?] 1ӔtV-!{9 /wr@ J`` JFJV(Qc%�ܐM&C\uJI*xwi$o}I3Q(�Gcづ ȶI: <Ac)0`<kKS|DE:rf(N ?�@vd h<x|><xok?NmVh&9I%tG~�%$CbqK"AѣGСC|T YU(�ܰMeƑTQn)rYTHO1 \0=BI0$*y נqE={ֆ%Ώٙ3gbӀʢ-6l'm/,ͅZS$m%[B-= vo~[ ?/6j1FFcox[^^֯vP߼kitn A>"mx& :Ol�:+(p ;Ol�8KH_&'?ypsFt yhںuPA5ЍmcІЭdr|DfK. \r}~|=[)˗/??` ����IENDB`������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-po.png��������������������������������������0000644�0001750�0000144�00000006641�15104114162�023054� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� hIDAThCYil\uf_!gHJ&EJ"[$ǖdb8VZ8h`U(5& GӺG0XV TZMʒ"%JWq'ggw"8i\ ߼s=` o/|)Ō9Vf~)uVbB&Z0,Ȋ:׋wyGFRM^s~ېn &%[!nab"B-fJRq܆^& b" R,*U`!X\z`Z!EUu.wwv%/Խ`K%I'2)L EZ|\ +1sbH&V2AHJR$d Cd)(QFr-i0zl-UóP'(RxG˵P_C ˦ H[UGsÂR.%R^/uȳƳj^PPET+|;-`6e Bq`GfaTQ_eUVKgr)i O4BD=C0<ke"ʔPE1-3%SI郐,J*JaAv Dci D5 5:Y32ņ\^G>!xetwcI~w9[OL ~JG{jL,UMϫt ZL5YbF$I,Bs1ڍP${WCݦrڭ٬!vč~||a|i=v<)6fTu�s"s!b(aG\Xf@i" g`ݳh}zvf$3y x3GNZ ^x~oJhUإ3+ :8B1\ͣc p, (uRT jȦӸ˫4g!ejl2 33JL6\V 5 "iSx MAϥӔ3tO#[ Xy}2<^f΋'-k* GX]l ;6,aF[[74BHk8*If89pVfE86,v |)#MJX{ gC(-`|q#,x X~ VV7R_ (V'IJTq9%$F,c˪x`#-[;b=a|uwrQYUPRC^3cèp+]c|y/ }H&R݌4Gn\ErA6+399DvI%cgz0ux`~)Zau#8ۋOBT,t1 <N 2S!@Vaat0贆)C&7q('gIlNd܇$sA<H=mY]' aE2AU nx*`nn@$e 8.\Od@Q")F8f sVm31:6h0+58xN݌*v=5xh p$NN7!C#XW~ъl&&._BZEHyңHcp8f~kS1W( 7ڈK#h>?|vpVxcS$NMy\OuaEC9>|C)P܅9F$%.K+пϩ+1'SMbkx?Ɖ0[ѱem#l.qtq}NJG(u5lQܖ|1J'cF]тud賕3x:~$g]mer+?x$U)2S_0{[P 9r0\x0&YE3:X舢c†Yo^#uMޖex.޹x˱yu=\̚qrrTŖ~}Xp{B?$n6c=DƴEHei&mA`c#EghCxdt&pV�fwL(^<xEl|̗LhºE>F" ~~n rBqw0]`skU sk+aX4salA,Xxp>WѶJΙӝ!9}. hþ_a^m�WGя3=zqu8m'aw[ T)C(WN]Q+3rُK]cp_=e 1ްr 2!apuNHEش}IfF!a8}*KU@ƴAVlJ|a+n{?9 _Y9YَQ4;|Ą?y 5wa0ĺ*O{|4#qczxU/+5* V78 N/4̙r%wU#t>Y.v c?>ye:7_|\�/Ff|me؀'65y+E"9PS3:y 2S4%HdQ*'wULN;+gG?gOCc=ۮ=p~lo*zFL,#Z\aKMY^`25*pTP*؀&#L/r1;(c*xt{b9??c8Nb?'3Zд'u Ҧۜz~ .ވ-忞 `@,3BE_S`˚LYN%ZR'b o]'Ԇ$s\oC%=$w`M+a}8PRRԅsk>طo*$q1$$\êrt6\eTbgmCK vWAi~3.T+GBG%TaM(G a&8d"dsPB3%,<z,ah^#dEEURyN}C( Fr}<LRnfѤIp\46.z+|+ܨ?x"@ѣS8*Ԅp($'a<JWr8$Tu݊o￯z@6(Ph42>:2vwOf Wۤ8"ܑ ||nU@VzXv&0AY򃮺3 i"<4g\7U;x !T1B/m~^kmJWC_=}vΝ;?p:����IENDB`�����������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-pascal.png����������������������������������0000644�0001750�0000144�00000004503�15104114162�023674� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� IDAThCYypW$!I ICRRdvXcQFmh[)8JZ[Ndƿ\6aS&X%5Ae)$$4 %eyw%X/9{{�>嗠ʱUN NjAd&Ut_b@ĔZYm۶q2EgSO, _"VbE㶅$bk'C$5J4&`G PЁMTSP=+UGFqF$.|Hdm!Jn-5"B6S�[WBΜnғt @dhH،3K*ӄuifhSfM,\-PXfjbq@^n湶Ɏkk!8!BNR%x֞2QR v1Ӫդ1[{kѮ+Mǝp:Hk& Ac2d@uĺH*Kul4u4"9RN)S hF[P_pv@xP;un6ҧ""GEsoD.BIOD!GG ߞ.̚)YgELT=~nI<.rrrއS!A<;]q @u[N䜲phI4ˍ;wszkQ&i\moԯY5]H9HZS$\J3k!$ Jפf#ě#s�-R Z@alêu~[jnwAǜ$BJKP)ԕz5* Q塤P @s`!ᥔi˺ؔ棴(x`tj1$G"Fė8dsۚ\qwԫ V|9c4Zh~&d3/GGyX%Xt[Feg7aꗰ;J*IaLuaLImlSK0e|k־<YzucKc ڇFgyK-Ɩ=سyi-,O,uR»>յEc8tyQ8[DfF*,Xzidfeb8:נf\Coan ֦"33g>R�o+m v! pK|88V],,xF RGw'6Ħ_}~@Y<#϶oHG4P:[ZVߪxLW""( d[ J>\7Os;?(3K+B-dy h<ڠbeKAc(7Fke~$+w|ʯ(-(߸n# z Q,RB/svXpI_bXWW)j:tG3;$#Sܚ yMQ78;CSW?:ƬR[].YoA~ѵR]<ΠBsrq\xkcjic%GC \<wyqe"n 2P8Hjw`˻{ dcojqh?զEkS# LdY }U_a|>ۅֿoOiY8WQ?a7{˿ x6X~͗?QYDSBYo||\(<>wVԍ;c….]wbaћ6>n}as32:HOD0dB4ιqW0fMמYѫ|̒Z|t7h/p~k]X9*Foj ,ǜ@~dуШDºyߓ׶$LRT'1e D&HɳaŴ,XU{I..k i2O fE46,\ Ba00@|@aٟч$ݻm-9d 7bjm+ nɈFd߹ύl' [(n7w^s}B z<:}WiʐPoOܷwwI''++f[|RL{#d"9x0*&^[vU1f?୚iO|_ ~4M&}4yt.oyyy$4F/Kڦһm~&6BN!{ Hqڵ6n\:U^ y)!{ߩXjU{3|�Tk����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-lua.png�������������������������������������0000644�0001750�0000144�00000004073�15104114162�023214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCY[lTe݂op&|F&j >@@Cx{Vy Ѩ.jJ[4(%Tm약[=7 ^g3̜r6K_Ǵ72Mק5)͂tLo[BQM<Hjl3TWW't%kQ"rW v/@`rZӃH<"˜G Q@@X`d` j0耸<*E w|a r R L#F9t%"cpTN ! Y#{줤6UK%3rnVg2@}&D-~2™:7d8⎔�VH:$X&cġHPjWWc/OHl s{e|?=. Fe fDIi^%@^~ex /氪`dW\Cth޼X낸M@HT9Uf�:Jg:I#SoohӦJ?|JJl"dO9cc1ME) 4/"SmT6Ŭ+B"mۉ(UU}'2wJ'�TsTU=<qr,tXItpN5|vg'8lo0lqNtpM�LQ$�%suȥ啪cL|A< ?h1 W# Ym8}Tnɬ:N`Cr2wӺϧ3d~m_ZJ998+e)] Q+ e ɫl4"шiV$9&[5*1e=^ {ޱꬳg.Y!1[a NFC~f:(C o߯Ab9wn>-[VDk n `'&9a`LeۨSpd2x`Np|V3iB[}+W}JO_2|?(-\P-BAjfZjjm:޽QGf2|'Tr:+ov h͇}m6m:BbO?UTVv?KTT46m>B;^;1ܟ�OJ0LsoJsn#~zsgee%護3sΧ]kǽhvA~ge^oJ oRU*+'>f],}4<iȼ# c\8C[]&NH3C[ĿNQKF L�loMW_=BАI!ilO6 pYؿ ZзߵkiѢis3dGtµOZ Ѕ.?sHTA#-JvJ;QŪ{)<.<md ; S7d4y 4*)f I 0ď8C=t Wbuf I 'r.\B/3 -[~xvB O@כ;\wϠw}w|Lҽ9 M)=_tMɞL$LƄI<r8]@O`�AP7wܸtQ7q5Rf@ؽHg6mzc �oD[2 ]E"_wkW 曔BKy! lS/4wwɓi˖RQ `?T\O7hqEKk+;{xЗ`0 wp8r: Ɯhcu| >)OS=SCSӨM� llWMNiJ94FFb;-o(ƺ~݆%}dzۤIk@޽*//Ib"sڳgO³}vw@7L�uw[����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-log.png�������������������������������������0000644�0001750�0000144�00000003525�15104114162�023215� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCYKoW>IHчP$TuOU ~Y3? +ia DUaߪRTTUbǎ=3=wΝό[J%>Ͻ9sÎ"otg;w.7֡@o Yu˗Ɠ)Mm&Z> 5/BTk=0ZD*-$UTYRTZ.,(`: s0^ׇ_ grnʍeQ9 y˺[r%{X oDh`ŲejcQ@ksS>z$G5CtDH}*1p[�<$eZ<.Fl8Ef i 5 תET)o� 1'mԐנՙYѻ?x<$P] X f,恡HOHxU#L79fj8?ր:t0ZCg0Q�&uy'4PZ9dP_v<CVdzBOpS<oennN>,ճ43e%뿯4ڝ/Z}<{32555- â>]"єITҌ@e{'@SF7lAЊ?-Mkk_JAR`^h0ALӐ2 7gQ8 B:=z*C/|xHC8f6:Ke<eWɳ:$&a؜CZ>v!0O Eip_Xm6;aG}*:cV,7'#X<w::})nOfxPg{[ET#TLc<{=mxFDz3K߁sxҌB\2+iҙɣՆE"tvE! b&�o~1ia"Qee- zXZ<ꄘa ]$4Tx~~ނ�<{32%hfƈRh|^bye+t'ON[H'K8txV0!QG7ͱy!zb_R q$nW[/кIO΋RSJOyw;[ԋHGe 1YhV񛯿wY+.lV,?P 0}\y(h(M�CobL}U4Aobt?fl<tBSl`cڵ981'ajejn)Ci༇B4 <elq,KzD:}y.-DZ:ZO'죃 p[(իɝ;w'p h:PIuAԐ ZcB@&sX^]NYvC pÀK?~́ZHi+Cy:i{&Ŝڢ v֔f!x&=| !=ð-_c޺u˥bدGBzavn<h;hgOsc�FZ/]㏹3g/>n3͛~sij|^Xdmmͥn�fϵ<~_Bb`qqq@^e�*&"WH Hm26m +m7"T{zƅ[{=y _qIFwQ| HuqdH)t6Llx)�?ܾ&%^k@዗.]z߭jzyн\rq…ŋ otvy!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000002160�15104114162�023351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��7IDAThCI,,AǿaXvBH88qؗ^.HDHN"HI88 b5{~]SUgͼ~1r5J vV'''Iٖ;@& v!d  \ha *txx(xzz6DGG+IB@@�V*ȁ ;Tw#[|*fǀLOOChh(ɱdŀ7Cxx8)llVL6EJrx}}5g XX&eddz0(%5 Cmm-K>%K>>I yyy077Gr@SSIYF usθHM#PWWG'Gt: Bbb"1 $<\hV>$Agg'9⡘HPHimm.jC)DGG#---xJ)ALgЪBǒAL-PXXHrA\dd$IY1 ϓ�Z'LPZ)$''hTTT٢Cjj*744D+kx({{{GGGfϧ5W?Ļ?=rIjف Ҩe劇"# ~/cc/// zzz %%<Uiyy@^O-LMMaߛ<ga,--ANN>ő򘘘Rs=Ç111Բ�+sTpss6 NGDD0T*lnn h)~||Dsv`vvx5〬)HU�?ih�JMM wWT ,00ߣxzz?׿8`+ ɟBL"SZhB<)E{آ #^O,<o$qы+sqqAGd[닖g={/pt8f����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-x-generic.png���������������������������������0000644�0001750�0000144�00000003525�15104114162�024050� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCYKoW>IHчP$TuOU ~Y3? +ia DUaߪRTTUbǎ=3=wΝό[J%>Ͻ9sÎ"otg;w.7֡@o Yu˗Ɠ)Mm&Z> 5/BTk=0ZD*-$UTYRTZ.,(`: s0^ׇ_ grnʍeQ9 y˺[r%{X oDh`ŲejcQ@ksS>z$G5CtDH}*1p[�<$eZ<.Fl8Ef i 5 תET)o� 1'mԐנՙYѻ?x<$P] X f,恡HOHxU#L79fj8?ր:t0ZCg0Q�&uy'4PZ9dP_v<CVdzBOpS<oennN>,ճ43e%뿯4ڝ/Z}<{32555- â>]"єITҌ@e{'@SF7lAЊ?-Mkk_JAR`^h0ALӐ2 7gQ8 B:=z*C/|xHC8f6:Ke<eWɳ:$&a؜CZ>v!0O Eip_Xm6;aG}*:cV,7'#X<w::})nOfxPg{[ET#TLc<{=mxFDz3K߁sxҌB\2+iҙɣՆE"tvE! b&�o~1ia"Qee- zXZ<ꄘa ]$4Tx~~ނ�<{32%hfƈRh|^bye+t'ON[H'K8txV0!QG7ͱy!zb_R q$nW[/кIO΋RSJOyw;[ԋHGe 1YhV񛯿wY+.lV,?P 0}\y(h(M�CobL}U4Aobt?fl<tBSl`cڵ981'ajejn)Ci༇B4 <elq,KzD:}y.-DZ:ZO'죃 p[(իɝ;w'p h:PIuAԐ ZcB@&sX^]NYvC pÀK?~́ZHi+Cy:i{&Ŝڢ v֔f!x&=| !=ð-_c޺u˥bدGBzavn<h;hgOsc�FZ/]㏹3g/>n3͛~sij|^Xdmmͥn�fϵ<~_Bb`qqq@^e�*&"WH Hm26m +m7"T{zƅ[{=y _qIFwQ| HuqdH)t6Llx)�?ܾ&%^k@዗.]z߭jzyн\rq…ŋ otvy!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/text-html.png��������������������������������������0000644�0001750�0000144�00000006067�15104114162�023137� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� IDAThCYkTy?wfvgweDтmMb6IkD &mS?Д1&E,* .cޏ;9BUM͜{= >ǧ S>4?ظqeyX>+hˇ 6\.;]WNAiKX[lb1<sbRx qQnuUbK9*xȱ3 -95YeFlŚX!ݢ! k'pq&bG$qq \$rqQXcmŘ]teK,]ݼp蓽!7D<ܷ� G**ӲMb3dٲ%l4&{Y7I-#7Akk `x QYV9,T"k{.|yBr.w-..'oG;e!Qdd\4d?Mf-j*;Dɤ} +_017_<Ncv U{כm-F2?8Bڴ41}27*wD@0*rKvPL}v| 5XIhJ?s&vكǶOBiA%)A[Rԝ;S!yI}o᷿ۃȦӗ|ޙ+0:Yg (V hTG+3/ a'sЦ+T& w&#GHfp XIDD| Fй,p&P7G {ع=BзF j6�At9ɋ(b1?s) XzcJV0eN [\i:nhȸ%N}0xVB5xHvš r*40[7d 81'B$9Gֳ9hHpaG<4<8%7R=lg x^㖅gr,�*|&XWQLXH%0a ?_13+GJZU�9IT_u Hr@:M2r뺅jBG6,z[? yP$]Wrse Ue:f9O?\GnX`߱ݞhXq}'|"=`X0\11RKG1#c>G *H`ǿab"/wLO7O#xw?`8σmzhY7XOL@:ZC{}1,kW H5;|xT,"*$d+$ى2Nis4:k*TcEwx1J 6`" _<' :5W@;K.tg~rϩD/ш'fPd:@5`M}@gu0]e1/BAY?c@(< <e%.yZQnp?'Gs<f?og x bh<Ez G6:;E1 F5R J(/ 1;ը>ձ<MnXу<ncSE ^?zCnd5jqj PЃ,=/t2YG6N2E&P5ڐ&" L]OO0`q6W9\@o~f`m. c^ 5F_nU|^cFXt W!G;ܵ1E kt#0w7_^:W;ZD TS*aR,̀g-a4$7ZgiaGyzjCG^L?7 ?&ge<^t{3y= IV0 5(NϤ̦U݇29 -?#qs)L mk WfL/`~N=0AnqwG:ls q}߻'qkz^SP岎 ZVaRH^a-M$#=tI%[-lxp=+av9ošeywD _O4bZ:X16*bF1s.ڍ.ߴ^fЖ 5y$yX@' hU k&q_}I!iƬ *-`M)O ^XM<L?}κ-.�! ?1)tnC(Ob1T<L)IQ\a;B20zҌ%IBRySz,EPxq<wȔByvJ'2x -7x))rT)yt'G^RTD s!Ӑ5[ X-pd:m� W6ɂGEqS@5Bv1eNӏk B"VĂ"2Ӥ:%C^df'f")s]]1lͅ ,PN-_ 6sSX#ޝD%Gg{ɏ!jGH}JO?]p-6+xP,1)QTX(6>\],>ϗqx=gSMus'.`tcSe?|SfS4߽33jqFh3; o}Y>,΄3Q4F?></x^^Cu_۵ C�*ΐWw'H'h0eRg`bf*׃U/#R�pƫ*wkD^B y/*U#?Wc(Kak }m0 B�kR(%knv:76?@v!v_MV+τ�Buڼoͧ*QRs1؏Xi݃H$h;`o7sMrb\!酜5'6-ܲeKr֭փ>`"Y*om۶Cys�/J;*T����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000002335�15104114162�024455� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCϋEǫ{fg?JA<9E\#"^""ٓ$ 9?`Q/z1=[P\ģ"+j߫==0_lTWg6L34$ ї]�(b5L) ң O>}=cțgW#Qx滽VY7Z#<գfA|L.MڇoWVY<ӳͭRG* = ;=qŋR>Y9L1kq(䆶gI^{4Z7YMoդƅ9sp>yǴRN9^wF6\(^qYH IPxq%- hcz西tmWHϱ a gq7ŪSp%%{tg])#Bե4Ғ-Awu^ە2F?\OytONV~՞u6^Zǡ+U=W뛑~iv98|g\A1*g-#:ݘtfqꅤp@lwwVyRFx+-<E89*Y;Z]`olnβ;i;1х2߅ͭ ; ֆrPEA#�Vg&\z F 9@%u- 芍IY@ fU D[ < '_p_*|58-11(T1'ȏ C`Lf64tm#Q]q”@TfU7MY9 tbb 2 <T6P$Ѳ@x/*�3q[`MR%.2l*ZЖw&Bg`VLJ?)IpLv�hGp2rk*@O'pEB=DY{ HF`ѫt i(H$\^cM.#4:�kЫt 2 ػ65[}uǃ+XX8luQ Pjoڸtiʟ|hִY| ߾^8 CpK м!&^ ɵwy����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/image-x-generic.png��������������������������������0000644�0001750�0000144�00000004450�15104114162�024144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCY[l[g~|.]5YڤB+$$+BILB<LTB$/ @l xڪ&BB^'Nl>9>79߱%H)R|r -/rҥhp"JI:[ \MI8n)f3FI}0h@$jNyw+p+sϝK/,,x5B)Y@;>55o^m|854h e:ۺcW>^|: iv_A0@QEhIrʜun7)mns*lo@QLNNvx`_$R*=4[Nʓ2{ag]tlmNB \׻*3B Ɒ@BHnbq M;badB<Ub("z˲Qr~OruaQ{IOJ&Є4y*c&>sg8w6g83!& ~?.ljKV 9n'p%X`<d [ J4BА'-<}|O}O'N'3:nbx}R$%ew1ɘ\'|Oxmp@oxݳp& P8z83DphSPQ !D2JJ[f%X1&R%/S?B!/vn"K^@nh8$6RJƠN�"?PȐ5/|8/CPlAi}"tdQ�+@a?Ѥ))x˕)N^( @e_n6k4n^ԙ`1F^,ruѥ`(k&jFkuzd2rua`$ހU^fiu !$!C( \ UG< 6>T=nPe";#/r^z()ZbW FA"k^*"\ YJ[C?!R.Ea&J93KZ`;n ܷ\ z¤M^n/rv Z}' lk,߀)I$S)ovHwz;<]E'E*#p0N{ gAʱV;))S <$q/a$t8=6\?~?!$(,,ڲ:Cֹ !סnoyt?Dwy`! mddY*=j.h]oWP-{%豓t^g[m֭[ ?'rltr'zY2~X5 a<4ku /'N(ЎP(|zMfJX^EHAbpKso Hdpw#-Hض{)<Cۚ^5S+tVT/Pi_v_+}B#5RDijKQ0<DhiV( K %Tj4u飰 *J)juQhVd [(:+p_Ec*([x"]^#_&".ueۈ&ENwӶ^G1%ld#qz+5] 0q~m(,DX*+ntMUh u"ilm xaYʥ<q(|+Y]|Wt !5 f zmM=Bw 2m.7酛1iV֟Ke_Ί0axka+][ r_4 ~kO`my/a.b0 cbG?aKa Xc5||lVb@zũ;/$ɮn{wAm+YL:Mb hY0*X,u/{+e"U70?(BNY+f˯?7}B)){)_`%:{Jf}WlJzO=H^̓6izU5;W_} 5kX?p8Z&F8˗_eZLS݃/>l r_%q݃_Eٸt.R]8穽O"sv99yx74w����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/audio-x-generic.png��������������������������������0000644�0001750�0000144�00000004543�15104114162�024166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� *IDAThCY]l\G'kz]۱A1U"@@j!xT}� B(M*E"))*Ui?rsuM ;wΜ93sg}LjzN/0<</̭K}aeeũb'vw~lN $D`F]~hm;єX䮆c ^\$mpVaj(asj gAr&qz$v DgN{sUgn]J4tTMQZPYh a@IlaSʌ#PPdyl:!WH~0hAJ%tX{8"0M"i@ujgVe.m#5ŃOiyEudywu.kӢP7b)SiWL/I KZ �q- PPkTТ\'W~:qa s^)P FCX-e9֎:$_:'gYsXe[- Xoh"&L&EP(Hz-r1htM][Bv o ?SaAܴ3w@t�ժz*r](jLxs3kA+NnD C!4d^~-]/VA.rryQ֤]Qha 8\NɧUյU9؉*'$$Qnw�ր<z89ՊҖ"-̀2t(()ne6}%ɭ-&Kn ?q| ΏGVR 2�R͛7drra#M >i�(u?qݵ/嘘J Gd�lP ëtf1;;~}f};z\pTes(q3cxl1~r3k.(rb("@c. =yEj_Imf2۶ڰϸ k-ϢGlG UpB݄D~`wX[ :Fi�BA.K!ή<6~[c~bXYNZf?'T\X1Gd�lᏄ?Z|Xl`zX*xP"YF:z E9tn";MGGdzzzdX;077ϧ\s TYȻr>zە\Kʭ{ n]]]r�bhn{‚9-ީ<q~81'Ba^9>8^rp+-h$㽽:TٳG4DŽr+u HA/-$ANr(ŽC,p<ݞtIQ;72uPWUGQ9ݖFFgPTΌf~ z!:�-IS LFuNzQ(V6dErsA^%h#IE3!qdh,&^_ޭZ'7:ˋ#,rJM>P{m0֦ƌmT:_^2zK8v['Q) i{cԲ<3dIkBKKk]Ff1R6V_͎?| .{hq%�im QG]Ն":�()fr9yp>E<x\<v"+GGFdF</_<Yzxoe% |#!hql?:\ώ=iE^"ެ]?bB1uI] !-a_%A0VԲB 4+x$>aR1 NO~ת\C;tNL-G {~r >Ȩ E!:Mn4FnC\Q%Vȣ M~O{w? n#URɚXZ^,KrSfeLK_[~^JiOS)t�.$r}uo\3Ȝtܹs6dnŻ _Ǚߏ?G1x*N|*9|cm<>{,nSV}%ߙ; ?痼Wi8[l ^R$(o~nλ69όV%[;cGiUF"߇/^b,w uV.<q_5^xbE�}B y= N跺oVF. Svi]t y·m7lw:99ީDhǣGN8߿+Hk;)d{'O\:tPȑ#;_1O����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-x-shellscript.png����������������������0000644�0001750�0000144�00000004154�15104114162�026306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��3IDAThCY[oTU^3BK/$<p) jZ/& $ HIMJ(OY(OsoϜN;s&|:k{׾"r<;,QA JWamooW8Zb.h-@'Np*ͱʏF?DZbq`J0$mTe8)?5ơCzUG3] vӮ)wVAžj<Ў:բ5@nNLbzSJH.(A[Fl0"ඝJOz>K#3b##r�aUfhS(MΧ^gHV`ؗӢDzjwX`$]T_g.Zyh<WšF-kBpQBy8Vٯ;JWWXQ[r6D">-6mʊ %UYY:v4,I&QO~ݝ;wd׫tj(/𫭭t: 4;;29~JREe?um&C $(Kd͚5s"KZh FO60###֭hښ3P t�c9N"wL(5<H:dBm---3L&UKs|fE ;k te%7]&) H2q17G\;@M-IHgg6}J"Hg]J,)3|'in5RHaa<^x䜜nyUU7ҳSٰnDHtU.S̐φ䁁sRtvWޑkׯɁɱcs+`Ls(q0S6$.pg<'0( 7aGhԑ*lqyNIj#ΎNja ܝ¸7.tFejjJFGGexxXw ]I: (?$ndS3ij�p�; #FdrjR#<X4Mx\)`@ r`qFcQپeOK?|_::pF"SjDa`:B Ƥ ׅj|on}!g�#B.kmrS'mo!G~($2QANMr! +>2Yb _k$/nƍ@ (J˶md_>ySt D%OBρFׂy/LsgE_z5]5yeL c+䓽+W'gZ qQLLN5\`-8f�LvƁ0,n)իƟ7_7;2to7tOdl-~.`/.L\ڱ!ĪUde [deVYa]V>h}g3k400cϓ:$-$--- ZՈ6no!7Šuv( il{TXƩrQо`ۘELg!2?ͤ wJyU!+++׫A=PBF3m`@61Ru%.`q0(=P 8re211?w{ w^38(Aežy„bͼ@z466zI:C"l4KmbرC'郆``#:ue[X:K+5@W  R!<8w4a[[6-h4|ppmY)Q}}}s. )aS‚e9w.U!5L%֧Ϝt[C xv}2#Nݻwܫ8 Dù1\xhxD,-U39> ݽ[F#0ipy:/ L$…EͲpgvs:寜_-whヷJ9#ĥ,t+_fu m߳o\4ۨ+?q,xouþi,s={B===ޝ?qx����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-x-rpm.png������������������������������0000644�0001750�0000144�00000003453�15104114162�024551� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThC lUnwgB[ʻ"�**(BbC 1"HHB4&MH D 1QDH*FH$|R  ]̬ܹ3wftњoΝ<sgv[P:ԡ݉<СW.KH%C<&x|j^#ՁC9J[[лOϟSyɐK) sgnix%W+``Uvn^EymbRRyP+A?݊47-\:^m˯hdL4 t=0 Cu}. ` ' ZSFU"mh k+/h fZr8jѹ4iH$= U%x9LKPȫYlEO2}ZTǴqȖ`f?/ps$eUp21y[aRE.I׏OORe`Vn[f$ɦa 3q\&1l^~Vjw@f. 7h qoq":y^o=5Na0/Q H-%CRJB͹ظgBVH)xpc:^# I ~\qI+kTKhx۠di(86ō5d@lnChAhCmBbkd#qnoiA!FQsᄢwwR:iZ GXI�'ʹn\t5lS%4Nص5n6Ae~gg>ujuupO~ EC+ՋJ/WkN&]cǯLbdTy^~c=kѐaΌ0canbg\(2fNkxՇoBN;aρ_[NeI0Ń'E9B퐙f<1_XY8-]4 Fuͦ/ծ(>؇Ә0<Z A pFQ!&#Y9iA芑"Ə=!_~>s2X}a~Vݑ#<}Caєm~(] \ ceZ4$T;R[\X?xn66ރ`= ;+9) v%1f}pEfO?n8X]I`Cj@>4VgL8j <$˂Z RP=׆SFA{`Ӫyt*wWWKw<[ž,b{0Ayz<6zu>N`욜BnHwʄ? Wt)ˆTcaNCcvsòYпowTΞkyU<;&f;G -fq#ےy�EmlKb"W鯄WΝ,l޶9nD.[Ѯv@>d(v2#Qh '1 ,]E€;~f1Jt y2@ i leD%f#m=($#[(с#"A'02�>d+%b+ !Fcߵ c=Q{K]x<Q.V*֔.[6۠roj k?/X,У_۳D칒w\2NxP@(7ff($����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000005312�15104114162�026070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� IDAThYYlTs=6oIl*iTݤVYpD8MT+ԧJmꧨ/}V UjR4,)0mlfسsۇx c0/mts~�/mz'KG>TIz;:|lw^z&sO$v{=Չ 7zovoω|ג{`Oڶ;:/7 N7G8ݱK%Ξ]m{b'�t#χ{ܹ3Ɔ K ZEmy(&��&ry<a(֘s?w+% x!o0d8 "cFc`x G#'kow,';JOI3"par:q pv`^~>~L<towl*Ob C5膁lNF"+wK~,O<r ؖ?qdӑTiA*-,Ls=O�-~|myOiH1Ho߽Dao E8.}TMǍ)DY&1,k Թqdd E@GWOǏBQD3Kټ "( �1ryWf睃 :cbQ:zv~p-o Ll<�`` p8J"s _ O]=;EYBH<SU*T!%(jD9Ȋ8 `Ӛ0v׮:n5ɩ&tt=w IdRaœ9ܛ@T<c9M^0F0M# =PttڵID[%Tz8&yD{q6]l<�Hd$Zv86<~idc\C4.\0M|z~EIAcYֈ%s=2\Nc2\WN-.b@GWO9TmWGV�3FشSqȪ]3əg&nߝp M5Jdhb4:'x-T tbg]X*TA,)`lmYDM DY+nr`@Z[Xl>1/v|{GySq$R+(<𬢖R˲C(|7`uk[dyw[-lt|Aҵ ŐLrK.ŀ!ey|xzc LӲ+ͻ5r| <YGg3yģA�׫J(<rUݴK_ tqV|Td# jZVs8h<x+V9|>3I73( .;/{;6[iW_!;[8Pˬo&N_ ayc-5{z<@kbȦӒgҳWV -twCc4#r*]@`"L^BKdke֕h]!Xg(V_MbSぉh"%@� ! Q(X҄DYd2EēydRy6!O"?:!HLo!JI-[OɅ\JBcv64QTd�0X,/kṯn5˱DM-0;r1,1T>�%`ش\w Y9ap>n9ln5`@I9W1-$IIQՇTw+rNln~xwʕZ#++!) .ΛHn"KJrE|0:lpd4tp*7{LB<G,s$cfisrUD<$UT7|<06xDZ=gCZ @,$v?ah4;z)se6!{L8YaDCP @,z&5EmTQr1#66.' H[+صs-5;{HF@4 EЍk?X0 M]Cw+V;UYJFo;Q2BWDkq a _l4&e+f<>bXxa>.y]U IW5MNJ|>9Qu p(rt<g"R.ٿ#6x7<�s`D@unB/^B~Lbx{6wU'W]Bl7w+�b4ϋ_=Ӑ/_ie  *>;yTQr6j4ʁjD~}+M0 V44BQux4pg\ FnŬ5 Ո D8c1T|:D# 'ԡ{/&U�W5Qfخ=x&jrɧ WCS7/W.kU@^]$l�ʤIMӮ3q_(#Jܺxu]h.@"yaiB`a72Ȭie]s�d�j*֫,u<NnzEPnmwQ wTpۣ5yݲ.hP*9B����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-x-deb.png������������������������������0000644�0001750�0000144�00000003372�15104114162�024505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��IDAThCylU.bE@Њ(rBr!Bc@b5GJL!`4) D$ � FbpT -W^;3y3}ofv]Pko{~oBկ~~$ҦS{7ǢJD|zK|%`_$Ssd-8/)\7r=ބjP;ŧp(wۃ9?Y)GM߷1#kPYk|2XMWբ+aN.ZC]&/šMX)H *eRiQUDk })Jf =BQB%6 dcMaEU ܺv3ӔE '%{ C%Q(ȾYҺ33M R3d-!M5LQQpZOUeYMMK%8P^?$q1Ͷxo!H./~Hn:3Jp )Yi iH$Bk@BNa`K%|V PQ_q1Ҳhi(x9D}sU2{hyY]LR XMW{ﬖ4^kL^03GH!MËѰNcDHʈP8+"iE}*1Ք�Z72)Qb[؇?,'@"0=vB׽jmu@?IDz1:u1Nˆ�1 C t$V $歈#Ke?IQ: KTKxn[I9^['\Ȟ�eV 4=zbl?-#屧r㗫[׮FWn6a%Y']|xw+{%{=hX`:xng!+SщJ`8S$>�=F@./z449 .< #1UkCi=~_]44݅MړP6~$<3QfA%6/1:ေpJrSJ2U; LcrwCO %yɂ!G4AXk9N2ڍqDns׍ʹehcrLtwA}f 8>D.&qن\oj)IO<3Ϛ8,xϟG_샣'c=EX)D s#loZm-mp1^K@C[$F O~zPǬg,d; T~<[v%k?֒YlS8NK_w vNR_mif`a`)DqN(2.`8;NK^[lU--]z rK55 "۳5-;XR_d'_ o7\TafBt!SF %+BgeϼxxnC lj=(4_xАX، bOxiE-m9(IGlx@4oN8g�:cbp(A~@c$!+"K5xfT3_vc}RAl}SJ;@> YٗE.%˚+�7bKiq WYns1����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-x-cd-image.png�������������������������0000644�0001750�0000144�00000005161�15104114162�025417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� 8IDAThCYoT6^c UWPc}C_x@<҇ T H#D jHS6 1$سݹk9w<aBf={m ~XbaNΜ97B7ź7EZ)s3V?=zr9z PA6l+P6<Ξ=+חG&oZ}iDOxLnXV q8 Z "r#jj.�HC-J4TܰV}"MqA)"$LťXU[_:bPdcOy8SC"" [I45vJ%VmN!  (Ѫ@Hzd/82\[K$bs"ݔ4Umq5%B( 3j]xe!5ohEH4+hjYuIՋk J�SS;162[7poT ER~5#mj @Oe3x09O/JFOvl-bot/o)Ӄw<QݡWj%penL4}:<| oǾ={LJʖ!`x=4{~c111)ލ;Rs!uSk1Lhd CCHC"CV1͸4{;9ΨCZʅµ$ҎS | FO|%8U6x\ K#(futi jzT*O/}b1B@guZTt-*MBSGk>|7Q^�"aP6,@2Mܻ �5XPIPr-՚o\XVG~[?\YO#Fki#8a]CNrGg-e/eVX|ƄiTKj-Qyk$"S}u} \A[Lz %Zā%*&b*R$&6>Ko~$DӰ˞ٹlFYf`!nQf,X00٧̠V*<u]qu$FVMiL("q4A.t 1P#a=XBkR8$zH#1`U1==*|\d-St[\c,-I@MD>Y@n,C}f8۱|' *$Cq8ԮdE\QҧE rͰ01OD[#DdCL lXrX"׹.4S{g_<C$ !#"֨V-2$캒LX@/+>gI0i'5\ n;w7٩R¶]wp݀\e!Kz U0$\$J Bv akV|w(`}NZ wkiccZ y BĄM(n{KvQ掝6oMDkK Q밀jMuLK%J\)MR&|g/.dsy~^c1&l>޷lt%!#USTZD syCe,>M�ՉvIJr,b%7HRBP J"|Đ ]@u4dIR*sfD7y2ʮYy<2x9fk usQ~-"C:;A\:ہJdze Ϫ[i4Antn" .�]G nC,/~EI[.$<1Ѽ�3rC&,ke2Y۪ k7<0gp>7X.U+'q !h5/y JIutfTaJb8,.D8&K ۣUy"Y1?#P2ii}+1q&݄ x5y><y^%T%xv}V,yï/tc۶+xJKlM,efJijYZ$Ƹ``v`5uh+[܁eWuU$3f;ce//TZF]iy*KGɺ_E6#fR.a쿷Ӄ$('n#׃כɷ/}J8ckkK2go~~qaL1xGg_O… v(ߟ|w&ɲ@[Yh3'b\ &n[Э-wmwd7CꙈ�Jeqaa5xuE^ec}T<18EG ~(ػwa)K8#emjW?[%B@A= Vۥ`~n.x<5?J.D/n<ted4F| J@oPyIߌʦ!_%ǫ[g79dMy!C* ]^%۴ɓ';O:;v6_z >}z'N~$&dž����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/mimetypes/application-pdf.png��������������������������������0000644�0001750�0000144�00000005211�15104114162�024251� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W�� PIDAThCY{lTUtB Q 5R1FDc4Q5FWF4јT%SjXB_v3{Nfw{ss?_F}m?aeR`8t8`|qj /~Hhok3FvQO+]] {L̾fDQlj$ B!ؤVtwI2cc3iCiRF됺HZ@ 3$LA~jL7Ɣǔ.OO> +B *-Ϭ5@ C2$OJ}˖PPO* JF"| ;->4IB{{曈D"Np%h*R)g<ye>"$241ATsoa1e"|Q$Ȫ/ HPA^*f|c=gƙ?(6Ǎ¤�*0ۿCF( #y/-Z`dF"f; (g�bFPș7ވmxfc*+a3k PEET³d}RBB)<8C}H[^r!P 2'RӧŋMhɣB=z"f2 /%Da6昆M.ܴ *tm݊sEA.1y2rMM.qRIǚR7"^o [w� Æ̼pOy7?ݻxSX&00~qTWadsvĘz"yH"̬UW!Um]q5mOXkSJz?AV0 ]6ipw)e#F `'he!dU*Ux+yT" ymT"0ǘt)BnnF]w'oy*GB)µ[k$!?4RsO(泬L{*Hx.p!$}Tɥfa/:顇/B:Q.[NVic3bxo,_+L=tj͞zԼ2L*7]~9n4 x&y#ɺa\8Ic8'[(Y="Uqek$nvi袗p'Uay`B= ?<qaZ4cqG96,Cﴜ|2:~ŎG\V#l y!@Ug2ь~-L,MEH}aU#G|4i$gaPCY]Sd{{Otor5ヒ:,Gz%>*RW-[̼/@dz;w܆F y)#E9dO:xN?Z$O̧|o%+@t ou<_G>pUUe/t(~eQ^S{mx3s ) W/Rw8(t zr~5q|h6%@[<x�34)f2ZjX+ ,aKBGD"ZR–<Q/cKFӪz5*n-qwO 9{bQ <{&`bbg2;iW_9󹉣2+z啨U:)� 3  YϛM&[O=GUZ)xxj0߂<"HhUan6-K.ZCNR Uv8#(e?*ϫe:<,`23w.B3`Y)@x幁y๧㙩e!RmfNc7wu%TtwSޓgN WBc. TEUaLO>AQ3kjIC#ϙzп,&җqCpy/,Y}LBH«B<N ThLXO=soVrRp==U|_^u-U?kk=UUvu햖;S6iϋzLnkmsr 0"Y?ĊڽbiinBD/FyQp y[`#lҐTlX Ȳa1MV54 ϋJL_˅"҃՛bg6qHsp1H*IÛ7J7ÇL⷗)�CWYq#Rf!S1n0S~7Z'Sʶ;Fɲ<sx ,8n؀\c#+W/~a/ <NpS6mފ$Obcl!7` @hqyAԄ{EfJbHY|Y7TNfTn)dnw /8qʕ׬Yc/]*a}{ڵ˗VXQ:3�iY0����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020102� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000002640�15104114162�024625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���` ���sBITO��� pHYs��1��1(R���tEXtSoftware�www.inkscape.org<��PLTE������������������������������������������nnnⴴ===_a^bc_bcadec   ! !! !"!""!##"$$#$$$$%$%%$%&$&&%&'&''''(&'('(('()'))()*(**)*+*++*++++,*,,+,-+-.,..-./-/0.01/11/1202222313423434534545635646757857868868888968979:8:;8:;9;<9;<:<<;<=:<=;=>;>><>?<>?=????@=?@>@A>@A?AB?AC@BC@BDACDADEBDFBEFCEFDEGDFGDFHDFHEGHEHIFIJGJJJJKGJLHKLHKLIKLKLMILNJMNKNPLOPLOQMPQMQRNQSORSORTPSTPSUQTUQTVRUWSVWSVWVVXTWYUXYUYZWY[VZZZZ\W[[Y[]Y\]Y\][\^Y]^[]_[^`[`b]`b^ac_bbabd_cccnnnooorrr}~}+_(���tRNS�  3VWkpq=��PIDATxֽkQ{٘"_Al@,A;;k[ A() ٙw9d~$ۈmq};ü)d; '`tj=H0ʞh0Ft)ZY/eV,sE/eY=5v٣YBP.MbQ#s]"IdXAb{I[ꄉ :a';5<c|hI4Sw { MљSLǫ=Z@ Wq7Xó6%FvBr� V-A Yzwbv`Dд|HƠD ,0i�oThv#ŠGd 8 #t^&NՃo_p@ m6K)M~?,v}^X@5)7խyV r\>1f+;M#"*¦lD !!*%y ·1eq9adـ| H>Br^*;sC`ww�REPU%'e=�ǑdѼ8Dc# `///'�+:f: ����IENDB`������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020100� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000005713�15104114162�023415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��� tEXtTitle�NetworkLB���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� ~IDAThmlSk;I;8!8#/leHE_F> !uۇ~ThUWhljڨJG: ѦhMc'[lǎqbV<ңc]{<omfl6HBfmS�?X,Cb[[n[W6b :yp%?4<zM\zUJvڿS;t钗N{_kDn#Gi~?񑟝�@@/ :U0Zzw^ٳgK(Gvc&ԯ`< ('y�/4 zY(}=UUA!xr& !/={]�"."ww?,>*AjrAZE�&''o \VUO|pС>?ڶJi�U3~ȵ�AE+W[o!Ν;;qDKyH]P @㎝*̈́؈G}[liEkkt%*a5>մ*c^#A p36<#`Y}ffݝםNg^�9 BXm=Ṗ(^A@UUd2h4U E �n鎎]ctƾ2�Dwww;0H$hjjE(,A@6-h4C=DE5;;kp8ƜNg퇻:Z-A2 ZZZ@Hy*,d=Zd<CAdYNCoo/G2̮̪NUE(�Ν;|>_vhH&EVT \x]e<?~'Oj,,,<Q,'  J<Ν;X|VUUh4b~Q hfCuu5"(x^XJ@Q!r�$IcSSSغukq 7?44S!DߗBBs4MC$r9 "LB$+6V6nm^ABH maa$juh00 &&&a0l�d4uk=B|00, KPujzzz�0geٳD/wuuA$HJt8bX 0 f3FZ-Q( Kv;�4]UU_v:w @�0�p8}YwGіB +7󡹹yդnqՂ|˗׳0L !jhkkE(\.b�t"L*H?,˶0 ǃU`gb�PUUU%He_k�O@x;o2jnwϮ]`0VTEQzQSS^_֡FAS ^PUH$QH޽7|s@%˲L}V[[u{I]]ݪ*�`2:u\A>G2RI\>1ȲL&OFt)f2sss?lTCCr\p8\.I|ǐe ]"N#N�rꩥ%�5`~^}iZ[[ $(0::bMU/e03dSmmWCPz{bRI|B4M*Wy###p:+ Qp8 AhQ`<Ҳ}rz��c(^f{3 QW-xEQؾ};$Ǐ1Feq8BOZZczz�VR't*&<k{{{jqFi4Mt.\|Vkh4�FLVkhhh~�n��d2H$reN߿4MߚQhZرx}b?xƃ?fsNa9pW-0ͲVmFѣG;\a"]r �>8innnGaD"hmmE(Dvŷq3Ȃ sssWrFm ˲ �a4"Mɩ9un�J!֚I&I>5ol6vcddD/烷+R~Q`YV!Ba(JEFFK!Ԓv+"{<f477'ˑq=7666tK @*\qݗX00Th$Qb )^JzYB7s:555T*U8>>~6Ws]]]=-Ay/K~NJn�hJ)i.CJp$�"�ÏY$yRN>}:Z*fpP{i*y,UxF' CUՐ,3gd(Zef۲`HE~Xľ!T( B[Z(;EWPz�N@*A(X++hk3Y|]vv7Ln����IENDB`�����������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000010242�15104114162�023315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media CD-ROM$4[���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��PIDAThk]uk}}86mpp#M7D(V*RU)j&TUVTURҪQERB+@&@H"x<;saƃ_s=s^k:V?j)pp fvNU%<x~VZQQ5u1zx̜Z|Z֩V,ZFcꫯ;vlall  APuNEQ077̌=ѩbV+rvW^Y߷o2t(�(#j"3zarr~*,,.ow:mZ|_|ѫvXBD*88|Rɲ U]NLL7+vƍO|xK s=뮫޽y29V�"[cdp'H9{O'|"rثNZ~D|mǙ}DD҆,Y¢D]uEPu  ONN~7Ç{w58*SSSq.KDDUCP9Jaf-[re[?8~_9|<x}Y<ٳghIU/,фB-I`*CU!N3,Kv||`3Л&jƝs~Ye,,,j ,! +`-M*!&2NU!Vi7A*˒W]Ͻ{ 4߿͛7U5՗h2 & "1 Ͱ`H�VVYrBp26:VuLjݒeٯ߿TD<ZaB]FD A$P`m*r"+D+"t7[Vs=V!fon? 0[I1TϚ )"."J>0z= >زya1T`8CL�Q 1!ǹj׮^>IO/iVuSV۽sN;8U8 ( hwJPpN8BbQt,/dX# .!LB`k9i}K_.Il~oeYGUUVRUGU !D2bPMi !8B0"Y1V|0(XlzUBme^@ժEqǮ](u;TUS9(2Pb 2 XAB^wxe )! !e,/w)ya!J(#AW_ 5?uQ";vH*΅զ̩[c9C]D]$ϕHA:,v,-7q1BQ,g뗕5cE fj�s]|P*؄4Tb(JL8{-MX|l;}W_{v_Cr 22FRR#F366g{fy֭[WJT�S#F)K@P<HוS3qii˝'[Vo{^q{vSh//7j(J/b*j`xsl޼MgfuA1wXVK>"j{\y-cq~~ӿ>9ZV86>Tk ]D "RGM5Q+ccw ÍF*\jƠĐ'5bc&I>D6B=Y{5ub(#h E2TVmZf @1˲fX�sP=h8u!5 +ej^\{=S?a%X$c"Y0D߫ G!(*5Ȧ բ4H(1z3BYo(f?|E[F(1B)I2B&"UӚs 9cUJ^8' 28:K9a4,-yxuej]+pjhU6 O~f#y*Z}USE2Gy|y]AK"EgP eWj/ߺm۷Jd.PJ")7cii$G۝+heH㠨juE\FwRnh[6p cc#e<>YYYwI 1sϋn_۹c'QE:Dx1<4LBDI/r{gszGnhZwڽn||sg<$ &J<J\ F3 G}{u~e0.m 2Waڝ.c3s 23؞H[7ׄQ,Ksq Qz4IjQ2QInۣ.H�xɲZ"8[J9`A}цt{]6n }ϝ(;,T& 4jm}Ls@R6SE")j^>zOD<i4yjҎ'2j<+ rwbУg-Q%a0we @$V.)K!TE^;;΋SO pɼǹTTe|WZNVyOH%D +Xb0"%HX8wm۶G/I _S艓F-YUO=J )gF(u|QV[#l71R19:a$"{^yH߽~x~qG}1V'u N%}v0P0af6mĦlڲc o&˚6!vCfi$F,a󎹹h7Ϳ^ÇߓywĕTYb6[~DDӔ+J p4kZ!ZFb:[pO# >bᣟ羻EBEQ?l.mR.*w T(<*F\5GG5̧fJQj%r^y%Ӳwyݨ?t{SSkyJmH+eP0Kn'DdĊiGD2ky!E%#LLı{:yd wmP^I[ֹ+cSSwh櫍$+y[*AhE"R#*WE#5e/ǿO+li5 5vȑ./ݻWkzEDJWiIՊV#e5&'y#?Tz}k$[#{l|ܹs<22l޼MO"e*1 NW`(e񾆙˯_}+Nfu.*KK/4=szF'''FxR*ж&Q0HLj24[b>cffbx!rVrt:P,,,MV;+uFDB9Ygxӓ''7>/eYv:)}]xR,dM6 u]wyk mظgϺ˷ocdthz2`$ZY{e̝aԬMM>?<COlq&/E`}WU}{cmzi6˼zE~w: !'_#GygNWC%+R�Ycf%Ź;nݺ{? ^oǟxs1(W7-$fyI@16x����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000003336�15104114162�023201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media Floppyr*���tEXtAuthor�Tuomas KuosmanenӇL���#tEXtSource�http://www.tango-project.orgɾ���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDAThZKU=էz:&$fFco$`ШDQh0Wʅ ƅ," &QqR&c&uQ~@M{wϽレ׮]c6'`|v,?{]'"3-Ϝx O>ؿ_03>Zo*MՒ{�pҧ�Qx/:9<#z y^6)p`6cヌ"K�T)_] A+3, &ɷ�qڜ3E (Г�1 eゔ#8%xŏ+jKm-t Q%3"Ϋ8)d%TLqZ&NJ(!*Ѕ �u%DRFK$?x\$FBẄٺf$ 5faBfD" 1Q M"SzHhAPRs'MIHhI:@道¦GhĔ]*@�u*!0CU+)7pR%0HUh<x2IzJ\xtC?mTlz{Q?pUҍ፫砼u�(ϴk}�{G!) :V a@J  iVAJ )eGJ fR*uR8<Yh+z /!}M6Lӄa^\"z{bGu#FrRIb miqqtw#~+C)s^txF7X*B@ #�ض 0@DHE`&[p@64Y([VX(( $W-^bJB r U뺛"&0DB]Ȳe u^P(2\'"@}F aI&ljF!P<M'}܊!Ima FJ t2T4p.5]XOw PL@)[/6�3R�KDo8NH t:t]1)}mf\ 8p~73 bp9B�ǁy\vlๅ#p,wN7X]6A$D {?�ؽ*ōFBx ׶aYL"JwMc`ԏ}}7#qthTTrm_ �R <v^ğډbmm6v"Nuaz^oB,8FfljD )%,Jjx=mq8zz4aJ)l6͈8</q SX۶Q8lInCD}CI4dggY,J " A#*����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000004632�15104114162�022765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Generic Flash Media%z���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��AIDAThՙo\W?n$,-tWuqТVT�B*< <B�BHb)&ІuvΝsΏ{ǞViϺy=ns|^J4 �%ʑ?=lݽrU ~VUts#CI%λܧ>qz;W|^<Ze[{g "VojWIZ Cz8pk+'~{x W~5՛T/?yMt‰? 1O=w5ݻwqM7_y?nK5~ylrhՎnG_z0Qi Dm̾$$?mLg \7@"v^bύe| 鱼s;qy<oGoߓ_|?LS,5i}kOG9ADA8Gp(/R˞dwn.cmX˜:NߪѨ_ժ>Ө#i^ZZo (~]Ck-Zk1h`s$cHk  #dcxt&w6d1y$H S h'p51(%xp$ n�{y [pNpj?&YźZ`< JuB-d#oY&R <BOes (g߲ Np :ƴPJ3a(x>x*| P c."8&1XS�QW5 ƻ weQ>ii\gD+)e Cd{8'蕟"GHohTJP8)jUQ4A?ڃo#*LTI%a[@y?O05Pπ!!>ƘnUD)>"|/pO^˅aByyk{g (<S)O9.'n}TJ@N$2Y\OO1az0:,>QTchPj}DB֘>nP0*% V>$"_(nƓ4=D$:dT0t%I4v/DH*ߡ.A * ! (7M&ߧ{6'vx]:ޞi0 T6 e ln+:r~6 p0 fm�?ì.ݏťUj&wpR%2i@e}r*;ʔ*LL$̕)m'*ēQB aT!_''Ja0w|<y1KgT"g=D?rΜ9M֠\8W|Ryc~g5^ps/^<Tą<333} ^=z/֡9 " 9k|TbMu>Jqb~[ q 帀$@L쭷ݨ\kQ7ufd]~4qېѾl%1껍F-[ n%zϣkcgbjHcFBrnt +nnF׏hSƪQj̍`#߷葲B86 ܆VbwN |E9o>ub]#r+M)fͱ| >{e�|~F]ÓX]r4Q@ l^(mGx41U|曇�hCƨ(=X:31ӹ{BexoHyXeM@!PmZ{PԀ:"NCv/t)fv)IMѹR +!UAFB:kZTRxQv>57R))FcZ@H:kZ:|�o߳oa0-X)5[f^ע@IN{"`�\9P8'ry:-4$+Fiցe`h@'vED"oF/WeII4M�,!MD����IENDB`������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/drive-virtual.png������������������������������������0000644�0001750�0000144�00000010401�15104114162�023377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sRGB����bKGD������ pHYs����pMB���tIME')ȿ��IDAThZklU{~/ޝ7{c{7Ib  " H"EEJT?T!Uq? _*!LHsk%䊕Yر2S;�_#Esywskw]SO=PA�z1rf|Muۇz �qƕ/BnA6\.f˲`<WuVf\.YkZ$Iߺr\�{߾+\n ڵwO>H$lgg'�jF(��J)$R e)!dYd2)L~߄'|fX,y~ `� ,|;!0똛[H$owy:>ٴi?b1j̛,9w"c%'|W^y |G n۶pi8<;@UU%W^=svܹL&Wlٲec W1x<:wءK˟ɓ'X̭B}DH,>_uh]ס:(u, ?˞ѣGGWXwc`d{Ԙ`]>R?qܟn?up\T@bI?u .~7m^_ iI!kZ+5M$Ivg/N-iZiU�K ۯMV/zpRRjbeY3nOYSӴ_ RJBVkyMR��j<;/xɨe�h-# ˲%\.G|>x?Fr~J%veB#͂|R,HRfYuʲ,fffFQTP*r:]h4Xt\,f1SCX].V+;͆ueZ-0 ccZVBl6QT( :::PVq9�Ks lbh|Xr%N:vtww Br<ϛ$8AAՂ(Pf! "LHRB jމ%QADQDDVh4ߏ�@\FV!,˂8,D,n?nkn/lR<P(bk׮ann^" #Cl6�0@ @4xG__&''$ DQDQttteY4M4MȲ ^,aLv<ϛ&˗NjvMuۋ .je(]axpQ h@<jt: ]!"BAVY?1 b9*t](D"X,d2$ \R � vah4p!lڴ t,;(ˍP(d$ =oߎD"7n |$T*q`099ix À80 e rP.Q.lDzqU΢8}4:;;xh<)ʚ<Bưfl߾tgϞ!p`T*eYX,%6$8EW$I(e,"`aax<# HXj|>2 Eqyk׮hk<k\. cbb㦕N'VZ<C(J(Je�1>>t:z<c!̙3?�8ABPT ]⋼ /bpparrv|z(bݺuD"p8h6( H&(fNS3gtNE^P(`nnp:zek׮EVC2Ċ+i>3[o_ lذ333PU7oƕ+WfQ,Q( ":::BV^ M1RfiLAt:7oB$dY ǃ@ �UU188'N^",s!EQ4ɥR),|ÈD"p\fjZly(Z"J-kz`#n7:::Q*PTP.( 0B� Hȑ#ضmN< ߏ7oZ$&[QL&q y|PUB6E\65k@)E.3c(P p͆^ȲlVFӉh4={N###$ 64VyB4$ \r`͈Fx"Ξ=kN8ew}D"H&&PPj<&J!Jabpp<�89a !";Fׯ_. ? 7>>ܲe 133ۍl6 J)6oތ.n cvvtAv°!eY(h4Ʋ"zzz111Ӊ@ |>5k֠cccV3>[,W_}ebA2D(B.3S_(BWWmMP�6ća<oNsA 2L&!I$ID[[EA,!cccxGkdq̅|9;edd~%AUUi&L&p8dP.aِNA)5fR13F2+YV R ͢P(@ej5vxpֆ_N$6LNNؔf~ EQom СClX.DQFa }NQ4Z Zte8Cww7v;$IBP@TB^EOO177G*ٺuׯ P(7L&sr K.x�qvW(~uxxXd2KP0 �!u<c&}bl$IVPd2󘞞ƺu!U4ubb_XX`W\I0?~O?$9r/O7HVj)˲H$ŋI0mmmbpfZ-,k*-M0;;D"bfiƍH$JD.]D8OE!HR^x�lmj)?ӿ8�RZr!G`YZE<S*PVh4q١v\.~^WlȲt:$ 6NCUU@c9}t~Ϟ=Yiʏ,kݻwΝ;fffh"|,HA4A,9#gP)DuNQZ댢(B8f3fQƏ8A߿>쳿pz7;4 =<<a\Ev!" ۑN177g;F[Nχ>SdYHf OC)8|{}� @@u~۷o400EhF^/ BHRXXX0ł> bڵ(J&jlp88uT/<vpM&CqRJc�ٲeˣ֭keѨiEZ-i$(vkSSSP^:sΝ;8)�;YR^V��]��Vait"e٫$)txʕ˗/O:غ���_}nگoo߾�@ @IElذX G|^]htt|PJ%%jZRvꬋ]3S{:{1pqNJ鈦ii&]}Sc/.7oī]z5=*4]EATZ VuJ4C/@t]t]SJOSJr~aޕXv-Z[`)kTU!mmm8x ZR"I(EL<j5Wa|RJ{J)q\w}G8c!Fpn]Z.6* jl6kZvjE68Rj'X!7رcG 5 `0lyҮ]U 75t7����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000003254�15104114162�024752� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Removable(���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��UIDAThYKkWHiFE0v%C)!*pɣ6)5klbmfen+xm M?HYDPvE[F](jcJRs{E]t{ ZYYR!d@9__޽W'7nuԱif?^lr5Rܹsg-?O5KP?߿EQ,1~ׯt ۷o /k333tL}0չp{d2ϟM(d* ޼y<6a~X]]eKjgԶ0:: �&�J:nK% D"L&ő d24q( qm+2<&&&�WLrmqq\RW;Ef{{d@(DQdC�-NNk+˨VHӟkv7J|Rty�ىճgZfB�DQL$oA˗/] N,Ù3gXB(W2L0y3AP(H$@ -'ObggQC;ӊJIJRLf‘(_;wnDUUeGǥuE l؍jvx٬yd,mcjq<t޽{eeDQ^llleY,ہl,6EQ MUUKk=$IBT /94G@ӴXOO._ B!Q'>7u$[mBeK ˲T*f?@�7NjRjSNp8욼~86.Cm%0Ͳvb1� HD�` Ea:ݞsR-V4^CUU B3:?ڽbu$ 9 3sUUQJ¬j;},k;իWX__M9?vbggg,XŬ\OO_>X_+!J =>'xEQl99�+!EQQ'(B8 4M :f*fQbc~~VM�Eh� MMDe<yB+888�D�B�X�$Iec�e��<σJ)dY`sj?>|xŋǛmh󽟓Vs @V{{4JHPZ(f!EO(OsM�u�ј4JJ?HhA@]�j�޾k->w4V)#C��h?4zA|T4<b袋w.F!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/drive-removable-media-usb.png������������������������0000644�0001750�0000144�00000005134�15104114162�025540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����mh���tEXtSoftware�www.inkscape.org<�� IDATh՚[U}wgwY@ l11HQ$P@"E EK^)oIMPB �'ج/wgo]y.#VU?uԩ "x/�b9H"@%T/mR v5UcR_ TBݗ^gϞ]-v+FGqDZ[}փ{SQJKdl e<^;� R ("kSXgvgVZ$BJR|B p}ea0 Abf - ºJgwBjPEjE˲R&$@)eYhºᐕw(Z!텈OOO/V҅v=+iѲ iub@]dH R ♈w:Y*-΀�,i+VY^JIEضSvշ"uqh_fy(! >@wQ뺹Enn]y$OaVwZJgL^&>�}  ȃϱ{o[bK϶m @Q1Foy׀VEQZx-u ԓ/�0:kXǟߏgPB|P$BzݫSJatrrySehD^w(΂?DLvA@O}9FVcgg <xn)s@9soA`z/�\kcGN}#%8qH;y+rc/(΀5???[4|?pI�)eg^bWmSB8qRBLNNkZhMQJh444"̗Yi̯'Bςz z"hD,Bg{kOwx^m9|꛱$.;Sqf4n;GJè577@qh <esgFwV_{I?tۓXCHlh) M凜 tݾ677i44߹d'%^q97$z;8O0)7SSS3| YVklX[kiS_|,w,%H`)2_( A*5l6'40MTV`? &5!zKEg�%~I5m,2!$abYl8 Cv Y,"6Wؙz{_Ֆ"||}[FSf [I}!V !fs]/n r&m )u`;߂3qtψSlh4t"BKKK um 2jbqgg 8N<-:?QQaק2;ݹn^ZZ^5&OA0ƲL~% 5w6oί;doi|JibY6aԩS3 nQk~~~u$u >ѣG~2י\Np$�`<K/% 籽M. IvӶL55?Fn!ڇ;$ihY>mfLܦ YSSSgS^p lf4?ATK/>XlۡcҜ =HT# w*^ fggDžn;Wu/ŵTeDn?Xu:\Fjh4 IYd[2Gܾ||BEfph4Jlv1d xx, ^GE~@gw 7*rX$aYaEw='G�<z~$w.w4Kd^9\:a\($ |xz*ufR3pUg)%J<ӧێc[P}-&??y4gPIIH亮u&FuرY m`0#M"A*;#M+>].AN8qb… }}˲)!KEaUEZͮK4??̴ Yn8vڨ(/bTtf5&urv!9 \Y@ w|NXnπL4IoQK ܹsZ0#}Y JvX)[wb<]| K9u}N6񳯵ENNݻ><})sßW_G@eK{YVU@8 ^[[[h4ó<:)$uؽ`_uN�=$oğ�׀={ ` l�cNz&lMZ4 ^^tw/}j)X����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000004652�15104114162�023357� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - CD-ROMǞ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��VIDAThYo=/ǃ2%X#q#f`.ɂH8$8%RE/rAĕ""a !1lƎ뙞n36DJ$~R<տ=a|- .ض?B�eL�0m߿zu \vMx͛7{{{Aȇ.m7op -{BdN wwwwcuumH.x<t:}�|Gr̙3rU.}׷U%8S @d2(N-0@cD:iB=zt(?H_R)0 XUIz^QU�p5cqB> [@Jh.$STg-ROzzzq WNcmu###˵$@J竮h5 xu>{iAPJi0t:-<i޽4b lǽ À(طo.W m܉'v8fONM###r';#a݈D"dk]tmǎcPU5uYm۰, "!Wu ض͹sS tRH#]188BoQv~J`pp>7a#T_0 $ twwR$N |)2t]UAkcǎe#rI_6堫Yb={  ]:|St:-B_6j ʁ6̍D-a8>|Xyci²@A?ƕyk]q!ض �~vA rz\LDWWg*FEKK 4MmuyrdFb8HJ) B?z l---hnn6|kTn&`Y,b@ٝ0 κY\+m#mmm>rieFt3FoǗ/_bzzM_Vk?P i 8\gie䪪$Ii>]˲ىH$bΥ( xRDŽ@ xɲ EQ(KI!1lll�!VVVF}Vp麎Qd2wP(X,V!XXXʊ-AdYFkk+!hnn(loAׇMp\U##C4w0on(FFC2ƨקcUUFs;�#t]qhCCCX[[swt�hkk۷oA)un|9SJq677^9!0/;Q! 1::^/aB "!($ [Ӿ[P(`/!PJ亱W� ۶m^*x333f$ iR QA)!<ϣP(cd2>P;,ːeuA/8&&& |X1 ðL�!TӴ<~xŋعs'cE"<|d<ϻy}(0 EdYEEaH{0pDLMM1ߦ4M{9`�ؓ'OPJ{&&&&V?~1wuDQ4 RWGA8y"={O۷䶖a&�$�a�� �&�K5O)_8}漏 m8azzSSS?ܹs珳+��T�Fh*<` `)9۶577gWWW755D" hؖ^)yl=bu ]d=qT?'Q|8/7i``T*]SSӱ#Gv$IPU={3Zql2fgg٫W~޽{K+],zfEvm=)qH�d2ٳ\joobM$$AP,: 2 6665Fz_<xw4x0w }r,%(">}փ#<ٶeɌ1J)(yL&gffR9'"a3෠)NYf |C+*l6,l#@cg� ;<agg����IENDB`��������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000004137�15104114162�023513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Hard Diskՙ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDAThYkUwuχfܲX¶tPVc뢠&(F^V!y!k<9[.k.@ [ `،A`Aa>zr3=2kvWzu7p*r*S 9IFQ,R`TTvwwg\mSBLKk0'OL0FB}ѥc {Ywq> 7t:k'Y8u֥/ÇB@gqܽ{~_�u>#�!AZ[جS<4f~R߉Ϝ9! #/!0 UǍ#%pa&666gޯ1( i16MRULTC, \m4cF, s Clll�&@i޸qCOE0 X(sO0PIN@,RmAsh|ubzƕ+WVK|ߏс!hy/7tY&mlBWc}67?g;;; tʲH"ny:4N<03@[Uy'E$VW# C /T*o&[[[sA�Ji].my7s*BȃM 0bV׉�.ɾYׁKi`ayy~{{B&z~i~~<<ϋY3]"d(.i uevMJ)I0w1=Selß|s˱ȕ�qUBD$@!k\U!mXhԭ#.2R "08Vz}s,zZ\.h�mX,*$#QntĐR ya# ~̂^�033H~ZxL3 BR b8`auubqh#p޽bxwyy�b@9z(r͛$=. ضrgς?<Grׯ(lWy;;; E}\.B�q��A CDQ46$(J)0yt:j|aphk׮ٳg#FsZJ) H=hc`pg6(*Lt0 !c@I\h(Rh4J.Հ-ͩͫ/\'#%q`t[;$nR\.O8EQV9(Haou$I͚CBT,Hei';N|c;>1|V x=nv.<cLE $NV겲Nt]\|Y];VqI#\(m|ߗ>!Eɇ$ 6iEtW@FNZȒ+ 0,[TEQ,7<܏A$9Qz:9%5 .\P)c I: i{xxX �@=w\,.F:Mea fL#2.2<`#),@=/lr~Rj0;;7oqu}W DP=ӧO[1 |CrLrlgwg!+xw �Fϟ?/V |}*0Hp3�8`0?e~D#>֕T7qtNd!�!S<D8<S9S.=����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020116� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000002227�15104114162�024667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��� pHYs��,J��,JwztM���tEXtSoftware�www.inkscape.org<��$IDATh_h[u?ZXRpsӦنNt<KbuG˒V)4m/*>a{m2JP{?Y E̛{0s{rwM4iHi"h- kFt;yhqpjtW[*0tƣb a^[XJ[8pȩwe[]@ D(S#At=7r[j)( m"&04?bY2 |t5ulaKDѩ`g]ݸ&A+Zc-s-s״N]hݲuU%2ߍgnは@3FLѸct9X {q` I`=oJ8Vv+A^zțx xE?ͷCGvl%?@/ۤ@�93P~}l61݊dhl6 9bZh yTMaDj9ʅd_dگrz? ;'+cbKE!�Ken0>v]ż2jL�v!U6J<y öBUU|z*dy", <l+?;N,v<OuR_΄f칿ͤߊ% ` | p|%΄fɵ4s3.HO(IiK\d#eL�'N3%{ #zRcDe旍{Sn!Vm]kP{(D h2y'(TSj^Q<ypoke,]49nXлXn X*}":s㰨(x ܮ4/p[뵬 dTx0\),b= !{|opѩ31ɟ9?]<T@F V#D{x7y (�(x c\ vh `ג }WE4�|/jk5iҤIc'ÇY(8����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000002243�15104114162�024515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��� pHYs��,J��,JwztM���tEXtSoftware�www.inkscape.org<��0IDATh]heIX؍`&ZAUY)ι-" TʺLE/ i" SDp[> @F8eyMڷ]7Ms{hҤID&c\7֜@l~`�0*0qs!v=\x+-;fύXia&Ο87Om 䁢N3I*��j=-Fε#P<nZr" <Y.#TpCU!jªKCM .todX:׍爾/dz+"Y)P<O']b2n}L_rĵR"2ɊjYz&bv.&B :? t/ IDŢəCF.]N&gkRKLMUCzN،pp^ ";'əCPDN`_tkKyl&Wse\7P2AJy`\"QTN}M<̇0 /5ǭTLjZ }%u d+%Z5* )AϢ2�,cOfVȬ?f~`ƈgN ^E}K:Ko/x0uZ3 k`Z:u?%x/oh/nay9XnX*|9/:Q߱rQn)>aZ=%*FS;.TAoSX(.Snmh8Q+ǀ.bpݔ>hSZWk9qQ#?6eTM-Bհ [K.ilM4^ZuTə]b+ao7VVc|1`3ZDN7@,xuQ4q61hQPUÓ�'k[:e*&02=bhuڗZ'eSb smg#۠ux&0*<;kۢuʸ&029K6Svh[kWD,;"wMBM4i=k,����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/48x48/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000004160�15104114162�021654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W��� pHYs����od���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��5IDATh[lWLl&qDIIM$n.&j6TR 䅛TAȥ DZ!@@BU(@*"E6N@դMhHl'q.No;aήg]c{7ҧg6kYiQ7j:Fo 7j}#&9cb'#p=aC_oc >խDݥeߝ~Sz={im.Q< jnoŝVAyij_ߺ鿐Ȏr%uOz>Xְ*7#еQӢ歽_{{p/(Ȏh_;1ps{gj[Gym9 D0K5lz5jl5֮8vxmn nz<27B ]/&_-eoד,tm@nqԾG6~3 WJby>վz#mOR_Pm7₆Ep8/"9˖ܮW5_{̔t.ޥ ERzS< m;|yM.<?# Vfĝkgo[bKoWju�\`ķ >"L>Yi};3|etjU йnjGN\:B,=�#&H>|rJc{wnK_ȅ(2& B,=-މMjP9?LSԮIc NR}(J+ bC6F5XW@v{7?z.c]Bv,` ƎU}ڹujֻNS%p]juoZ;u8G—m@ bR(- O 9?( N "p$7h3Mǎ\j9ϭl\ٵ! %hM*h6]wmy$UP.8qUhgl %k<[ trw/]/mv݉GHw7ij*֦8rșt@T]/ĉ=*63|8=+O޼:3oM'e.gs}dO<TdnM=yAqO29 y|r5sT..~ B;&[ �"~p/O^LƓ׾Sr8˖q_ĒW#v{)cMZ :ZADț4#A 9Kf$ @+KOez@F+ki >)=eAY? 8>NxBGEaPr'%PF\a&iAj=$4b(z+1clA39آmCY1( !8e� >9l-ds26�J:JE2~[PP `PAHu~U@*?3PN).c Ɩj0G+ZUL[%bL"R �G3Lob1 mL<@Č}˘`| NAJ �@-MT\ȱ9Ex].-A115Us歝m)}K6:Ƣ(H+HF@DŸ5DB`r |smcWuY (Ca3c<t}o]OJ`r @/nFJ'K]hSm5 kN e]h*m2AlX DʑrO7=)%dBdɩF}QT0+2+_"6&����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016436� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020452� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000003036�15104114162�022661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXGXJdGh_&⃠(x+F }g$/L4x! Kx ojcwgEOwQB:kWժuvթsN!?Fxjj*WX&=�&!gEws}#7Loh.ե|s}/nhI`PR .!XC0]IّSL˓H.Mh"5m*s 2‘*s @BPԐ#1Η ܘc2dNdmm]eYYP{U9>>;GeE@,I[7l#<;;YY__}Frrr"!333$算8g("ܮӋy)((a2>>|``@ Y ryyid c Q* 4!dr{{-R˥UFFFXP~m`B@m�Ha,[k *eHMMTTT pqqH!%NYAXJA!�Jxk I"QZZ;U9Mly6 &q6<~dTS c7 kjjz:B`SwfF@6L2ˀr]g--TF=3z]oOt[[[D# RUUŖl$Ɏ2xP02ìͰ)pX"CCCRYYɦIUƭJy j=EG=f%:lP)+9mdE� D_MA?L%uCd ToǼ!9ʁ8PXWWSY&aCF-CC)o#F <C|}�rnWg*DZ(++g-�T~nh!X H119aꁷu~=1Ҿ38qdE@:56cu(uDz5#Vu79҃؂Ǎa lm[ikk# u)�ڡ 9x s 2O3R=th96r]�92=< $ow&eZ!ʌ8{۳@tlF]4_Pv3;sz\ґ8�oQ!pY Σzi>шD4!g9++M+߶.OOP_GGG(\3*ӓ*%dR1>K\υ"3eS[yR?=\BxX|sL~FϢ2@ ҽ3+?G#xC|t-!x5;M*&Wޯy^~ mg=EVx)k\mͽe:䓻5od"Qq@N U%BUM;<<<ù/ ' `����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000001773�15104114162�023342� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXGK+A?5݃rуx."zͣ 9 ^񠈂 DqAqWpwtTK&5df~P$]NtD d=3%**J<IQ@ 7w+؅?>&9<<TStttY",, ###r<>>"55 iLi==Ѝ͡㠳r5t.Jpd)r􏕕ZzP \z333!Xzxiajj U< (rjjjp~~.=�E}YY$l6ڤb}/$K+:EuutB )R P HOOC0;;+=ar3k2++K^HUss3k+З8>>͕WC:,//pfYL"PPP =!=+{Ko'"Y\\,�P%zך t5B-"dhMkiWWW,.."##Cp5xyy)6:233E0⋋ !nssbҦz3= *looP"ܯ8lQRRQ!lJ.*++-Cii)@#7Wk,ͯwvvD?G zzz`z݌ϠemmMj.JIooo 6't")J1H |'rl~~^fs}A>SL]zfBR@mR 4T4Kb+P[azx&m vX~8`U^yxxXKHHbbbب�!"����IENDB`�����doublecmd-1.1.30/pixmaps/dctheme/40x40/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000002032�15104114162�024427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXG혻kTAgw)$X XX٤VrDL`i  +(h"I6}܇̜{qw b,_v03;gf6:ֱ+GN} zrQ_۸z΀z,%\|?zrI-^gZr.x59 R85- 2WTߧx)Ӥe{ aPd՛'Zb;_uKy~A$0=A(4\cXcXV~vZ+`\%EB5&%cBl@v/"R�ebtI&cKL(*ͩ+slB5& 116z ;R%y]gd i [Ԃ!r C P_%/ڬ7[mG"Q:GmJb!6?Wnb_Z0L,!f$1֦%z{c,FR+A" \F1cDAG'{ĠVBo fLr9@cMiւ~V] �\A,?I:$6k$!| th0LbP՘\"N,8*D8k Hc$Ϭ 9qY[ Cx ;;)|{wiѶ3#I.B$7V2 ,& Ӏ &88&C,߾j2>QA3'+aLLO¬,dlU0kp2$hO觹\`Qn/,< ˘:^E d0cRZeJJCЋt˸MIdP(~je̫0]p'0z@%f÷.- *$m.Doqx9*#^s?tbvתw@sAڳz ~䴯i !A4ߠ#/!�\M:����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000004152�15104114162�026051� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��1IDATXKl37E.iRJlN,MQHaXp/Yh^Eo"9PC!=Sp㤶,˲,K(EKzE2�3K=Nyɟ5WЩ3v3#?{kbW8>1tSS sŲ6} ݞ3*?+<191!_ P6±4lob[L|a LMg" (!Nba{/B * !PX2; D^'&<֔{jp,(Hd ]c&[ p|b2=3EA j0#HfJHeJ|ܠ5j?d׀A8}ޟ-m@VB@)i*H( �J+Tp{Lkj  +EM͎pZBBPC)JP Yc>Lgg2yT^'mQmg=6j Q 8:2~a3!ly `+]ء4,X +*�J l3y @gTfߞ8>1x+Hm`t%y#ŲAxa8!'7 J &Nģnm'&^w LQ@2S4@CѶeYA*S,yvk,L`vMj  lQv@tek5\Q, �}<(! u/Vhz<fZ^wA2pwËTԬʝy׹@܏ F$bfwcHoQi 1AgkGWg2oePJ��G&5!}}Aı]6bn j5,À#I5*Ezɏn\4K'n,U~jؖ7, /m@JyXBH#]hQuCR<({˿FB/ɳRO%I2mBQ Ld3L&#_in$`)BH8\C4vN/'Y$Ь82|R*<+VpLe}.lijll1(PUTs,ؑ0 ~jN8E!zV2`7\[@T,xGfW6U`5sH*D J �RX-&x0ww@E( ERNk- Nv\*Gvz a ӄ'y蠾0(u;]/I"V!+*QA#/B(xOYmK $u-0XdY V' �t�pԓʼL28ЖC*D at+BLrp]6!kL:<'+tNYi*K#Jwpsa f@$n=^5,;n~xyvNH5.!D_^CWpR��S4P*slsZZ-6o>%p80Վ/JXˏf rW_]ӟ})"U_ fMLLʥmwJvjCƝ͖Q, y*foz!\g=H�vpyVP-vu:{@):VwrE˟C;iFwH8ݍ*<U'x&{lV+u Y:GK/Wt^ Su g  B?иR8MCmV5<x^yWd1B}O@; ksXVS[[":rm^^Zk7@yebl|cXvxVS[[\|p5}ÆK-c=Ia{hTuo 5ZVaL~`wHe}lUpOp;vEКk{697Wϱx#����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020062� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000003002�15104114162�024576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs��F��F���tEXtSoftware�www.inkscape.org<��IDATX͙=lG=, D$$bl,WA].)؆"P�i IEKD&QSҚ dD;Rs "lnM={~̾{ovNJzQlqJf@;жP�5 ,�p# AW* B eͣ7J|ooZV8� ߒmYkk+0Yxk4J)ЊP q;�pp$nOon===f2` BsNGp++Ͽ_9О<<yyyxkCO`ZAY߾s;.};LDI(�Oz**[I�凹\K&Zf|: AhCDb ۊQVSYRAc 'S 0h`9E> WC?|͗ PJ�?qVh?aN5kA Efp`G1-1p\3~%9qI*s`m\]bܸ1·\bǎ ;]7"X+~Hj.Pc,333|ysss-PEKX&<-AZkkO&Ey!5cxO~JӀb%>V 4ȒOPQ1Vh-~IQǎs(XPBֈ%G)'9s泦(#/GMXv 'BB)Mo~N> Vd ־f$q-(hPZ8{f*$<.}7 (Zi][0`J$iPf)/)&c,{V[nq{ˇ}ӧ[+Ц5~q *uC@kb]XXH540'N|ʝ;wXYY?ɓ'cm.W�bc(,//׍… j5-J=I)}l$LB-###u]Rؚ?T*qfggS\o,wM^ _ ._km4ݻk$X,rT*š^"౱q\rx,C<~@ Z.^H\@)}if]ٳgr;" 055ųF(bq=XRy0V߬[Tm۶v螩7SŠJ|fYwۣKKKkoo7ƻ 699YZKN6uz[qMLLTw[#{J3}}}7z3eBg&Ob xot1{����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020060� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000004616�15104114162�023376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<��� tEXtTitle�NetworkLB���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��AIDATXmh[սzd/ -7q8Ih26{lۇl`cвOa}X ll4,!xy$WvdڲlGWd}\ 72WGs9szU:w:'1W̛uyߺ|t:_+`oo/'%Q2|t&_eG=zyV,}/  Q|3t�066+Z_ti9Doh�[ }960Cu�w.\PLX,^|y~�RۻCUաsu}a:u`:Yy�Q:t]G}}=N8a9411Ncc5 >3g+}j,4[SM2 J8yKK H$pG[[[_?z :a$ $�i ,ԩS6#Oڤ摩)dY ˲'WVV033c�n,Cu$ `XfaZ�l6eY?~p:֦n evdYDQ455l./ QAQL3L` (,ZVtttȑ#Bp,8999(' ~tBe(H$z$YgZ rbBXд CUUl6tuu766^ܴ ㍮뙹98W`pp<ϗ=h3ZH$PU �@#r<A()"RT`eYVQ,KyA=At8r9va13AQ\6L&D"Bɥ-p 82}Ae ]בN!ʂ8*PYLeH~<>>ڽejjξ~Pr8@Az122B� J `Ϟ= y | 6]7`D"v$f3dyu$ xv$A"� Qv Y͛7FD"l_$SaJ Fi,A󨮮j2ܹ\.555xMдVrx|'Lv777|>bi4 Uj[ZZ�rDbyBlvou}3�J@�T*$Iҵc5552ȹ9(jR)\r\cfC:�a "']:� Õd2l6;f_b Q(�-AqR;MHq3ÈD"(WNǛAESԗn$6֡\.'bq( k(4M�v! eѰxDUU!9 '&&#FH`M(*<_7LAh,4 . qgE63 p:p\o[Y)OmP_25(Z,A$3??!Jի1OU}>`ǎZlΝ H/;4ik�Z"0{�IԣoݺW�*�U$1UUuj%{<^l6"4M뙌aYz(*+͎ښ kdrf%#~VbGwj*�4#In,g%IX˂ CPr+zk�4Q5ВL&?|B ^u8EVQ,EʲM_C_ � Z57Vq@%\ ,Kvuij9ò-//[Qh*gq?M2_\\\ey 0m2 V4Y]Z ӡr2�ɓQ\7#,�+ӽ~}m1V%zzWNMw3 Qs{nʚ%D{����IENDB`������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000006415�15104114162�023304� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media CD-ROM$4[���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/�� IDATXk\uk}ܗ {&؆aô)BD(E"/Z5B2rqJPQjRG&V%h$ )93W?mh~39!Gi|nbbUlsc @TOEn~n>p-4&'ꦉM4-D T�NK9s&9;z}8ol67>>s{ɶlBYvʊ 9CEh6Z-bK/_޿3D�x_nZs=#[laee8u(yEEQUf<,#k?|-[v}Op>m۶'F˗/%(`HTL%rT@TΞ;ǏXynnn~i`Q@"VCP*FUE 1v~jgcvݻw﷟kB=_={ŋ !H)aɈQ0 źȞa ,fuiZC8z?x[v}֭[I)|Ē0"Z)p5`&43P3D0<gǎӧڻw?~>gɀW|NCa:)ff 1J RfH]H"RoC"#Wwltޱ?2_;8j{;Gőb *PJErjAUEGFJ zܹKƁCmPvl64n/R U:t b0zEA;@cׯ Cp>ǩ"a ZL,NhKG>wMEnQ37Zȳ USez)F J!$zEIׯ/jn "1_jzM͛7uΝB9G*5CPD<f-U`}P%-s9 |J˫T!S"D 3R^85>>sP=Dv{Aț~U<..)S\hJ2a . T"aĔ0;دquR[3�PCˈ,Ir3.]\㪺`fw-.OݽƛnΓRϔQ O@ m{�SJnPPd j,ot)]^^ڐ-g9;'_={ B~X*$ //f ۮ NOLLH`9?<2bUXɳ1| 7+Wo߾b0 fEFbPQF#)b}Bin-)GFFn'CģNȼ1>egz*cjғpkcS`"eDHuU!͈)b }&v{!1�)A !D:#&a0J1tšl~A*Dh%Bd!(X,jVG4ZJt`a!,gص�Om˄.w*T ,EdTU1U*k�Rr !Cְἣ8o>[oLcb|vg?}hjMR.yVⲂ,Y H0 c>!67ϟ?+O, Qs0::FL4J]'O?V:+}/lq}(:xp1Q%`"ґ{cye{Ws-Y8)FP53q-qA@REYھ]6=0tɖ>9<Q:2!kyfL� C8anWs'h8YR2UPKH2~ d^Ȳ zReFQTb6�m"̄P8{tcL+]ޑf}m5y8?(PJrSU%堋P.�,`0"X{^A:c\?8wn*:7A*NTPh4TW_$#"∡۔HD, J,"{F:Wݻwia,jQNbdIhxFFrZ# yh[R"QwDfbc0>~􁴻/̞;™ӧk�xԕ U, ,C4d6Q% 3%asw~z.=fٳ_WC:x8'5ː"<a3_P#QG*yfNP\v,WX/lBnͻDHn(f u.+%HC<CMl̻'~Pt-@믿:iӉjw@ 1o`bښ&^\3%˚\:9'?>]?č@6@ĉA~Q|~T6>>VCXbcXpCJ KqݙtWԡߘlP׍ xmSN-<yGFZ]\?59>%B "9`"nYiqiqNO`0�%PmaxiCmJbرcߎ1\\\壣c:22RRkUE&^"zG2[oQ;7ѣ@ v6z-Gٻoᮻ~kImx-_V./Kǎ=+nPڠ`M ?L߻V=ßnڛV~ٿvޞ;osIpa7Dc?=]qXdZ:(����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000003377�15104114162�023166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Media Floppyr*���tEXtAuthor�Tuomas KuosmanenӇL���#tEXtSource�http://www.tango-project.orgɾ���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATX͘oTU;td(M6tѸ@WhBj.piҝ{V 1&Ƅ@bEL?iuqgc[|=w=yy;5wUa4{?|$K?gCߜ=Ϗ910<\Mt]$EQ&߻ws T^ayn-Oh�gn!60lN&*pQ?nN>Uz/>>32U7^I t3)@?8}C{ko(CӨNP/tAEE9l<C�t =7jP-NoK*v*HD>CiP#JpEVEԄkg&*z޶+ LNN� cPbphډɑY h04nd8L&z&.]6t&MLTU$2S˵0})DYwR@ZZD3PKRfBp[fT,jĚUa :$_pyy j0A 3iVhcLU E$/ uI ¶ˇ&&UdM7lr}9e3}bᙛ̜O4;pRl}(!H(\oFw s"F�ْ"L(5b[u398ޅfl:3QU&<bXks/9{psL"Cm 0Qd-Uœ.SSG< 8{c"u18 ### :*9:SAI5_ J%jy*�v~giiZ6\<ζXqz2PDMibyI Fۥn5Q\M*M/ (Jۥj鑤W51>:�@)@ ދŐaDb YLL:PQz}3ɰ1(ۭ>RZp~ izQ#hħIޭD "^_ "f\zc V*P /cPtL$YNp8\RAƫ/OpĞ!ИGX&& `LtڬST;V 8t8k{̆ƢcqqqH|2B@5Gb; Z- fnnN4 Yڝ*fk&3g2eCB[k1{7^`>1h4X[[lAmVQ(0022BRallZFZ/JTaR,M윻ӷ!NP(P.ell kmrL\vs7<<}JV�ғ_����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000004122�15104114162�022737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Generic Flash Media%z���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATXKoYVWĉgaIH D�iV B"V|$,�Hl,!hFh@Ǐ<,t;[s܇:uvҫۻW&*ͽW7ϜЏܿ>t<~ڶܥK{l�xg>ֹ[׋е>`m+333]uE�V-msyk|<:>{u'N~ڥK7p]1ߘÙcO�>S?k_G X9ǿ3TJ@ Rҽa,H2AMBh^l&* 6=L_9-_n|:5] GW"[L6q,C\u.IxB G#-<i~?'<4{O3W#wugP(R$@@xkA; cIC8LaZB$I aPH'=Hbwo J(Hq8k hc,p I5#`n*G=P8Bh9Ep�*0*Ɛ=i)O#R+(ҁO%F!HHQ xYLk iL gWIrG4( !t :7*(x ~DiE=ldÎ9gdojr謎)]OPfPb\s+A-Nw(i7g֣ntzcc$ TJ,IIEGUq(c&Ie|y1k =F N!:P4Щ"iGd=|$}B[`mE"9 cЪdjS{RScGdz+Ic hh\O8ҫID!I]* I iJЩeNAT$$_Y@y;[ $9BV6[ " D *5(o3pDR"z$) I<ehx342 qv7‘*[; Q'(Y}v 8Iv�"E)�Rf>h u^-L-"l(MĐ֮]W Jo?LQ D%|8n<PzT=6O _8Bog(OM^K]DDȳ|]>۶* {3{{f \j a^7]:lLUTo_I~v@+ɚgD ݒ(/|s6��,.JgjofP>*.=l�)6Y{,chh@}!c 7}_\/pJk/wNruCyFpG\Q_rA$ d:wfȱK|}W] >C}ΛLJeaz}�tTz\"p#R ` @6aK{Sވ$8 @0EҵӾH,&JH�Qn,ۀt̀QDl!4JMe(!*`hQxNP&;./ꍙuͣ pRP*eqY}o]Iu<k0{O7FFEIBYwYs(3�X� 7@6BK$B9KYbS[AO]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000002736�15104114162�024736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Removable(���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATXMOF66B!UX"jH,^C+H3pCzO[%n\JzF !oYqth</όg{gkjL;dY~A=8˲1Wl֦)vŗ(R Ji^3 J)!2k�H$}>ߍ/;;;/"r\s :{{{pu (˲4::aZqppPWo4`'pyB># Իn Fu!lCA)}ӈ$h[r###+++^6͢P(ԵL'v- 6 0o<om0chh,n o %`aOT*sss߼zj%, ^h4Zu3 �@,`l Ht:b {keYPJaٶ,[Nkuc/Bk�p\777  !H$RnU RA)Xj�9F*S[a+Z\F&wkkkcU&Mx?_ZZ~ T_6P(q6 ![SSSL(bj$I(BEHI`2`2`6a6<xGoo/A3 cwwwP((h~füi1#Śbq+�z_j~BlT!n�f ~0 v{SZ#6F4GQң(H&H$5|L�QN /RܠT*5 a:icX|LOrZ dMSɥ΂㸖[f4v`F,MT |b&N( zzz�.L$\ |W\3w8C �󠔢T* *ltk�ggg( @___3 X,uC*RZ=9JR�P俧?6VHv*i۵<`�Tvy~3'˲J%-SJ;- @O? �R2"<�xǾF�(ٞeo$`����IENDB`����������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/drive-removable-media-usb.png������������������������0000644�0001750�0000144�00000004011�15104114162�025511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs����|4k���tEXtSoftware�www.inkscape.org<��IDATX͘ˏG?Uy{18[p0K(RrAp@ W$.@pA $[B,e?}]ݳ6$VǧU8NZ0D^t`0hq @IJZ^)E={E ;Uc'Nu=$B D^O*Dbu0b}}}… m*}b4)%"#BQ *x05B0_b^n8@8N.J)E2h ty�^ΘjqqqE)'+3$1k�yޝ )I#)h�,,,�j\` HqiMSɝ=evxR#K2֚*6y)%G$ 떦{xFCWAiH$OJ*w: 05 Gq\Y]?ҹ.Bv?&zg$IR"1H0}!`j6@u3|1}8}}&fSFѬEQD{uyO0s /ට8(y>i ð<@ |ۤF#R5;$2ؑ3L9*Tla`9~x}U p,PP ] ҿG˟<~_FOy7FcM? >*=A@H*HTyW$IP*sԩō;(�v=;f_L^) iGco+o!SPHy !&p[Ah4ByKKK D5??} .BGGOk^ZGI@hRo|=CWTo9`0<fggKƺbRN^:#kI]ٚd@q(^ʁ333=z(LܵQ_.{(Z9hi'ç1K9J1 Y;{v5*i"Hɨ96aBôܻK&.b(rMK9A1Ǝ5wW6EgQvwnJ(]ŤC/UġyQ-O{ݞ9lAsLtq=&/tFHAt[SjaL4BAHp�`M"We|y ?6@K:IU0cˠi0�uwWAxiC&pvGxMMl6b,L= Ac|?~u]YR^خ!>Л|DesMwVWW]7QՐLU#?0֠q]Eid;77FŚZ|{jكwiSW;bqqqɰe}q\pSV+&�{oj`uR)fff^Bsm w ):B:Nj Klt\Y5hcJw!8H{4fFu:;ޥoޅx@Zb$}:yW.D&2111Wl6@`*d!n,ZM 4ѴV)5"Vkg<nAx56Q?6ʕ?Qrpyy޻_v-$uV2 rϒ$ W\aޝP Aݻ y.sssyO7ǘzfB ;?dqO .Inܸϻ޼y'~tV}ZIk=w{wi�+YDFz!̀H �B*w#A>$o_7֏q����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000004026�15104114162�023332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - CD-ROMǞ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATXMl386x!2KԀEbUi7R{hO=''DrEjJ!Ҡ"E!B@,FĉCvXoG 4<b_kįo!?�>s˲A)nvvvU_ϟ?[p3`ڹ~ܹ#@"IS ,!(P ď2̯ggg ^\+QMT"4~ɲ f[i H9<vvv)( nE>PL&WOeUU%Iˋ/aׯ_ɲ p~ U*²^힀ҙȲP[@&ea?qFxOT*u�Ll y=SV1>>.)͞o/]&_bx*VU [ҟHEh̭ QѲ,pGΜ9L&l 8555NɲLځk6+QYwBfΞ= '{hG5 V,d2&L&9444-It]o~׮*9w\0Me}Nob_UUL&-Ƙ'<رcT*]FԦiB$rɋ_,L~$>6y4M׭X, ◵dauue]@�tss|,~߸v|kUUE>{s@:U]N+++X]]-ni6wnq\]Z�]סi8É'Ʈtl{{\`tBJ n&8C"@ZuB uB"ܽ1iѣGqԩ8CT(8p=B<STu?~DQ< !x֚bSAD" y0%@�/^ׯ]u,B(P*`Y\ݠ@A>GGG:;;[*Ƚ}6|ifWW"lάA(1۷d0 W\.N> Buޣ"bya&TU`XUU(Pa`1QF!˲T*A4B\�AuW.P(T0 hf`�ؑx<S" k`wKVT*(h4QQDsR" AwJe==0P?8ײ,ΖE1pʕk׮QQaFΎ6<X~577/_c<ϛ?&y   @>tMLLD8Lt0 lmm5xQJ'Ohsss{T�T�]P�,�APKKK$P(|FU*M1M,,, Ń`lٿhM; ._|(J*L9r$ "F$ <σMӠ*666P(̵5UUϞ={mT[*�.͓2�Ӊ}}}yg&(ſg lvKpU�z ? <lHfXvbU`EٶO1Άs�k?,6a׿ dw����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000003432�15104114162�023470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���sBIT|d��� pHYs�� N�� Nw#���tEXtSoftware�www.inkscape.org<���tEXtTitle�Drive - Hard Diskՙ���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATXMkG3;2;6i  ` vm1uC?A΁~~B|-ڋCʹb'`5"iwg_kֻ])i oG\e `u?=zd3Ν;.//9�H)!m(Jͩn{Ç1A<xm>"hVܿ'�3o Yjll RB[ mjτoooA�n}}}@Y2J!pB.nܸ� |wz=DQJiEJ)cu�z0`&t]i);]y.\jY:3`^uV0 E1!RJDQUPJi4M풋bA4!��`qqvg pkiit:�i`(]RI0Ji˫`B4M� s )VUy^B2U�Sϓk׮}QקO{ڄD%}L d8U(c `aaQmŃ[t:ʆ3")Ty>99)+ʽepcc|u90�4d<#ZmsZ+++Vۍ_<`sT yfgg%4U,)@0ttG{Y6#' J)0lj9dzzzi}}}'oߞ}$Wt<^y6Dz`y4M͛7~(y~:n�4͛7Iۍ7Uj88멪Mu1J%ض J)&q0 qEY*~yBR٨T*8<<(!hZG\׍CnY2(�8jBujR{!�J%躎v(‡;;;_\UTV+塤!(�'T0 ~ܪ`�n꺎Wǟƀe=σeYT*<]vNy14>'O @"B˗w^~3[yWEFrI(5lْNy0h4h40MaĭjVyZNj/`&88889eYh<G*<ΒYiRT0V$ϟ?I> &''155J4s_~V-&pNSim;c�y}流&H)S$X�hf3,ڶ}KV*˲NTn^n9¶mz a " J) Àit:B4 @l6{{{?oooSVc0ukalv=Bٳg>}t@Ha. @@]$RAjN 8H ��b��R"�az.�[e����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/devices/camera-photo.png�������������������������������������0000644�0001750�0000144�00000004046�15104114162�023151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m���bKGD�����IDATXoG?{.qy}SRhE ih"@J/(Ъ�o+ T)ꋂZڢ"$S'%jS ɝvc;>/w8-H4;3;37 [Җ-}ef;fkau7.WOVJԍܩǏ=z4Yt=bxG,RxlN Lèڎ(|eHI&H;86J?syv֙n"J/uA n^/6ǁg�Xo~`~oDcZ\f:2<}4NK6gq;7K煗^?|Qszs;(m2<| 5$ p:.㷿=A2 <�J)Rʶ8zb:mGRyu@hH7dooGGK\4`iiC%J5hm&ZGZS)+vvD<Zk<Ѷ뀥%޹4ţ_s⦅"N3o9~ ˴ʭN۱CJI".L" 8()j~vkmj\.ӷ57n,IÑ#5Y>yn~<===$I�LDJ]_mRkHtowjiz4W%/+D"iR(y_k|| ߵ0, H!nR"6dZ&B//f:Q8yM;|VWV@:b/"` Eo^ -7"ZGJѶ92�n.-VannQYzw,NOp0ʭUt]z{z=|Bq9_H!6T@|!-T< kk2]]rۘF~( /D"'G.%95>w}Keff0AjD"BdHPR>O)Uc$BH8K!\F8�ڿo>75s% D D"OlY溕 Z~<j"bEjAP+R(?OYyM_8skg\_~śY 8ZCkjYBYOZ;ZeX,eYAΝ B1 Q$,++L{;ڀ\.G2F*fB BÇII& 3\N87IR\z9@*PbO4Gm[7h5ZoS@)0j&HzGku%Ft۱I.VR*?IWK.#M2ҙIgfffpJiH-iA)*RPJ)QRvqEzIT*e>aQE:r}jy] =$II&R6?T"lRo5pa^kLB}2䩓!ە%񃧞 @)ɭW;̎&\x4ѺaГRf;bJwvxcɳgE2b�=d9 >-,`ZRЪA|X¯[q#&je֚Lg'rγkW?xx,0cI\-X^^F+Tݘ Sܴ` !8Ra̴L T2LVV_RռM֡7 ze3RYfO:?L¶mH%Y-Ta1 4l %j:җL+:P6?mx~F7x*1p8U/;zx@(?7Ȩ7gΏp[@q]4����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020076� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/zoom-out.png�����������������������������������������0000644�0001750�0000144�00000001337�15104114162�022401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXjPƿ눉PmEfFԅҍlF�# !(|tY@qEƜLKѸ0"6- �t:QU?[QEJv�Yˎ-ckI6S6`~2btzzjus LZ=߳YWC)pe[JEr{qR4ϧrea /, )ioeD".^R+z-Pm& @7g9xM*cLrU0L@G SеM ]AE7Ø( 0 Ez0kP*|z=$+1N=7l-Xob7\IA;#D"{Aݣ(|FQϳ޵(DGGi]?n9xRj3t"z6M1^e�C6*^^ _kI6($A4<<<\-t:p8XlcX `0f{a1B!L&ߜFl64 `h4\qcmd2'ȾaOnKK�i �|,#p{�tm&J����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/zoom-in.png������������������������������������������0000644�0001750�0000144�00000001554�15104114162�022201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��3IDATXXKKQ=w^NV mFܸRQd6ğPGn itܸV]T-HT cZfN2Lb M3#"tsz�ft]ϧRmDXL</...�Sv`麞[^^^4 >rxu_VqrrRY[[R(JN.vJ4LMM �@;4ctttt0j0J}L^pdd6Kj/^:iF+E�T$O}: c 19�)ٔ^Q�ڶEWP(Df;vb 2`YKB8 (fAT ɯ7Mܗ]`H+Ld 繜ų+wvv"*qwz`F5V AE16@Qzu( 8񏍍rǜE}UX"}S\ܬ4CM(jn5 a4?�E%K`2www�"zmH#竎m.qa6 L<3 ,wCeZv`T*UA*A@\lnnN ベL+Iˋmreccc%1ϲ?|޳kIeYͯiweDTu<֝o`7aK?| ga����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000002012�15104114162�024637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs��$��$c���tEXtSoftware�www.inkscape.org<��IDATXMhenDQJ&RU bblRj7* +["x(&Zlzmуz=x(Ԣ`a6xpg;Mft;y;@[mUSg&-[5coVO^Ն Eh ̚#tZ]gFE pMQ}j2D JqUG,q 屮uf&lf,Lߚ+ig@D`:{I֣ˡMǀqS*0/ XMVp,7CU?z;|7* T56$y7ORC'F_,׫XU_="e'=t^)c\G/l(h޾_om*�RJҲ w}ŭ M&7`Ǻ\\D>/KR4sw%}"*-Y3vo֌#nЩK[<ae4*q~_cV{27n㮥*γ@'`%-̚�1^ήٝ|a,Vq^X@j88'i'n[Ĺ9AGS*$b-5p™r{#ۖFFAW_R1*|U3 N&pr{x̅S85Y zp4YsB<5{_:jF?)rIDqF*+} ']=@@ۉzPk }'t嶿_~}3(�%U:CORicH)7^MuO<8_R~a891 kd`L"f @bX 4 1{?BU9^ GB~[3V<:~t);C;7ӿڪ%D@<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000002024�15104114162�024472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs��$��$c���tEXtSoftware�www.inkscape.org<��IDATXkU?ϛ4ZeyQᐩT)+ռ6]162ۛ՛!"^Llv7C*6DQ]2]!Xll~ٛ_]{s<|x tQGu%Ns򞀠)#&ۀyT~Q0~a�CfEbwdM{p2"GSWKS0vk ,t[M g KN{@{ъr @5 غm!޳h< DmՂ{WI0 Jޝ3',䭣 OeѲ1vaU=B1ݹݭ@:q~ꋘ͖a�Xʴlwzo PbCz~0}_P #eg=oY9 X:*.`Sp!E]e+]:|+qÆgɱDzFDCXzPՈL)�Q}r)90p.Ɓj-6HQ)ELmg Oess=-NyWaP[1z: .�W6Y 5ьB ) :`<qe"$#/?_vJҊ gQNYENd/c |4oU�Á+W~قM 20#?4nkE>~j5n2З~5Lif;x֍9MƷpUv1N_)XzNU h*j*cTtf]H!ٛ q"Z_m%+!`kBa[V*cQQіUp,:{zG[V/j0>UThrfBR#*gUWu$ⰱ@3׭ɟ:h?I:&����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/view-restore.png�������������������������������������0000644�0001750�0000144�00000002534�15104114162�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��#IDATX]lUnwRʇZ(miiZ,$^}DECM<v+M%%5C|mw>T> R[^<yϜsl8=Uq[|S n_L4r}M zODOWȹP֯Kr麚h,s4,/2�J)_dx@NѼ 0G80ѓ� !ax<X\Єu.]7PJ-F 6q=>:@)r# ${|hY^`#!p;c|}'|�@T�7YXR~,7ϲdM[Lx�x`@>_WéD2<SkXFEsnp}W"2ǞE:Ȥgf)ǥ>Wl�%RH0&.EHY;+nSf!xLҙsd¿:@)KD1ϫmٳpXűm5ݫQf! 8KHmttD}vlpJ@04or9 ڧe_R6}B…1'sbŹFiDT:,~P1D,3)ue7;yE|cŊ}.4(s;V7),yT>�:cM3 �>>⃐ [oMq޵(?.iHp6mDJucKa׾<0M@N=?Cۗl]`% (p@8p\ kUn;NE\B8s8@�*'O3tQIEpYP)մO -ڨ %t.z͟|1Rq%<P׃�sPbp%4rW0`Ft^~ki %\b8&nIH!fx'^[ \ 'ܜT . 704!8LSǑ3]'p5̓λY)Dtm-2{4٦�bڽ*"SyB5"C!'u)"FgOHuZH:fT8̝==",�\@)<BW)ۉ7}}^ro7$sViM I`)z{[-ɝ 7ݫPgm$ "{6CmL߂HϥP�k43z]Q˵[&\o9idm=^MhTӾnpWyIAQV04����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/view-refresh.png�������������������������������������0000644�0001750�0000144�00000005470�15104114162�023220� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� IDATX͘yl}ǿrI-4)DbI%;dFN;mV6u8E( -hbm&Hc[J8b(ln%,IQVr{ޯ.[d?fy�@D÷<|rʲ5w2]}"$f^1]r#!P)"! �@Ai΂O>3&ΗmV'. gk|4ojP7 U d[-  Ke0MF݁4v}NOӄLǾ'~b~6ġ;ZkKw5XJ 3Ι 0@H@z'3}X,3/NsxNR4%pE}wmg bf<րf9g_3C``JSG|yt"} N;'!Kkkíqj=]l~-e h0X#k zP~ B%`]W?{bJgYYZ޼ڝo~h<cg b1~ Fc] � R䢞aJeHX!͹@\k$3&>6W/~vPW|̿rʻnr" yA?xU7y: EhOUELl]kXuU"r) X 0@kLN8PRd]7كW&rGSPW+�m/ikt ׏C !I^0įP GN';2UqáBEm d K=(S5rj14E<탈@`|PniZKѫ'2EES{x9q`+/[mt4VYĵK(&�B^G~OTWDȱ!/]BX=;c�}X?u]{tycuDLH{ d:W�!s\$HDKYt1$QRz *tBt.t|֖,W@ i _MZܚt >tcʸύz/OpeAtmqMA0Hjoy$b+"8)%*bȮ3[ZZWӅL \Ƅ& &e!AJmoԗng[?AW ԛQP|/ R*&f?$'Féo?n*X^�$s||gH1/H�z)fS'Nxi׶:MMty4!((Wq "WF=d=a (^KСH"XXu �߲)#ndWO�M 䭒g:\-P g_qϺ�a H~9eOz<؆Uadಀ$| HDHݝ/=^)̻=CzKeٺe @Ҍx%>3>S".7}'Z)ܷ޼`k?6LV56z Mb#RlAƫxJF_OTD3͎)&NvU�aҧ�.(r iTX8᠎NeλFvRMZql;z�3Sp] ñ >Q<eS){=�S^AX&7)_;r-4.X4 B9V'cYlj1e7V[zޕ=ZCu@{2:9@ Kat]aE~1!PzFxYOأc]߱@&_zW&roYحjuN<r ?={dUum5A$Z CEH,OLxP).vZWcMC_)_ZJP-쭑"%t+PVu $ cã.pѭA[ea Z)Pw^/-Cg(ɤ?Sň&D(ms72Dzt2Y/C1I#pBٸ0@3<G&%]p6R–z:8m۽Ռ-<2_iH} MW`U5|T<йeՑ,<=]c �xhwg_?O\MeC8&=xق53,dXQf/?rM@3<o:pZ%t3M�?X%g/nm5eU�鼢A0{m\9uzЩ7>?w �t ; FA?-ٳ?p`U7}b}>&v{]uDTELFg0p-j J#>Dԉfb ̸XrF$xr:=8xɉlgxo]Y~银mG֔pqȲl BSp>ҮĴIRn_b;_6go-mbo^ 6k7scن쒚ftaD2V:^O&{_`7 7ϺV71;uin%5ς%l6^jwPj)ـ\_t1m2`)lP mii,*V3 M/vv�g$>B~����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/view-fullscreen.png����������������������������������0000644�0001750�0000144�00000002534�15104114162�023722� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��#IDATX͘_lTEƿ{{` K؆a`FDLhB|"Q PcOD -ݲ -ݽ{gPK[N}39gFDxC�ؔN#'"eU2FDS�[ ZesӃCsǶ? �lTXTtn@3|e^:N8cnOZѶd B^&nqv]If3YJ@pbG,g2 PgP/bUG :hJ* *⼩dQiџRcK]bm8xSR3[@Z5.+ P⍟5W1Rߚ1uKIEs>m@pO:a7R#>M# (gΙex}S^…S(rHH{wMR)ZURiR_R%2ݖɠįCv]9kŤ6tuu%MFi@rJLFWrN?&qn]גuhGg" Lӡ‚i:d3a GV`;ְU/I6"bx /OXFB}b{1d6{{')'WPi�c#!8ODb>�v="D4҃y=>럊�)T[sPm]õuR@{'Y.En4++\)JslzJkBF0~W�0 !Ze5G45^Uaޔ~_B83Hw߽T , U%a2@J@I@ 3ѿh5@RM'�W}<da_@ @^_J$yTb$\EĵA%鞚Ÿt[Ԗ_tmA8#%83߄Tj[-o\{<RJA _ПqMhXR:<"ɌF<~{pK,J<Y<ir-%p2xg g;N;~rmÍ;P 9,dLix߬- )$97F!k($-sJI-//3Y Ɉƀ[Ch=ߞJnqdǔ$�|yJi0?8,Vp����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/process-stop.png�������������������������������������0000644�0001750�0000144�00000005550�15104114162�023252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� /IDATX͘[lW眙k;Ӵέ7  �%PDAJTmhZ*Eࡼ!P JN|o^{s9Ϯ x@9;|s0"~Abtf;c."l��c$}}% `_3_d`ovlu2Wnuk ��S)A#IFG#F 2viS5}G { wmіUHEvN|7tC +-s/\\'?lLᆡlCK &8`@cD M m�M`vu@<<k-~s\f{enײߴm\ŗ ,QJD!!@i!_?;vΗ><t|cݻmao54oP&@pAr/mA`"8f@.azp);V.h# ]r ⑵,Ӗ4.{et~#_C۶~Lpn?AaS8TEsXV1nC"2 k!":}]�}OB-ke?~78{\Ů ™j܆qOZ@PP?r|RE1\F8>7&޶{Ut*l&˔ Rx{{>lALI0Rf1R懘 eWq.*C3M[a$D^عWd0r7;)PDql7zz8G^\9Z<1 W 6l uQT0a} <j&:mؑT^I,1W ]@QЅUW#�\EO6}~Lj$kĤf�l+6BdV^ZBǕ'}OګI >�pC l g`L$,j?8i\ALj Q %a 7gP{;g _!;~ybE 1hm6'THY4̠(OOAJ �rX7 1L(=;v"5{zbI'FT.8q݊:Ȁ;G--F��cQ@3(?0ؽ^ض q�;b|Mf8WPS62=*=3U�dAcػ֕в5Xsrj KݏtbIq�* ''M9tf=+\ !=QxWQd⶜PR,%QhQE Ƣʁ7h{M(h ~YHH_B*z85[4~Pb!N<8ʣ @PH@!>/op]hRLM]Q$1lm{mħ0-,Ԥ\wSc=Zh!B�|ٵfyi xRa =8zve\sX<t3zcK21TjpA�_%LhLyu08x=mVk&+wcFX2tc} cpz2Oĭ8K=0)d9U,b0r~&K۾{~of2Kn-Taj~l`ѥz3ˊФ\a 1#zvL�dݍYxc9&H! `s lNc̲臁~~_B|.%Q#i2vg׮p3Ic8}ȹ~vzXʁ xF(5=++��" U?dY8prnO.q&!8N}.ssM!Ɂ + j(?~ nZJ?1[&Y(fC@kA0 A.qrgP?=*BxaDol #>`Hh H(f#YV>|%o++t\Yok K0�]c߾ _2ѳ KZ\BO|ᅹd&ށjz2|Sb: ;>Tlbڂc BqR!~'"`k83Y](y.Mn<Z�P_#�dБʛrSmW}k\# RIp�X ࣋](nC, 2Ϻ[XTҾ9]QZ\�e/{ҶL,@P!20`ĒkMX,OpoDj/=9�y�1EBs!XWR! H!IDm'F/,mwaT65O>_7�E 0>^;2`uaxu[nT koi 5ݐ,fl|܉k X erdJ">@ᖶɯyWg7_m/DX~,&Iqȃ2+RI�%�2T9Ar�v|LƮ5۲yPJh)5eglX9V[(-.ťyQ~8r߼+1�>JTW}+-2;,g2,,;-d0PjCEuu[\P�D>`Ɛl0.6d.ϦL:sm 0F]R-WOţ޹c:Z gR`gM)K}-ZX>JMKTnQ`kfB^CHP{M����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/object-rotate-right.png������������������������������0000644�0001750�0000144�00000005053�15104114162�024464� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<�� IDATX{pTǿ>l6A@#RDTSfPZvv:jk0*uV+J(Jx  $L6JB99{+~dɗESGJhAκfVc*ĩid+TLUZ w }zSAN H<ksfn}Ndq .ղvÜG^ѻ{o[ڍ\Oșn+IB1]2h>Do++dҙi7n9;kɀߞ™weX=?m;ǚeIb H>nfH j;rxoǃ/+=,ܜW,L/+6cå]0"�8cHv˞>�Iy2?bQɵY/--PHtCO h<߿Z;髛kis 5ȉwܚs>@qT# GaIZG}3|~YOwRPt88XF lzom=P}1M7W~kw ޙue(D�A! 4J=ɸIikU}uϦKԸ8oW¥/wylڇd!,@-󽝁yi ̊2AB12*?i'Ww\ ܸmH鿹zefqǀDmϺjk ͓/M W@9T;>~uRi,]@ZR7tATlDbGrF{R?�?iT |Sݾ'劝7&4Lݦe;BqwΖ7Uu<j#7h8uo]u9n`G/.`h:*� A7ҝLoTUPǣ[L.)`,'gHQLvSսG$O-kˁK hu(o �8Q7Ԡ6W78^\ͫsm0K(gI!V1Y/pO ʘT\6>"'s 9$VE,Blz9_dB^/OWU{98mxm{zDBh1Ρi&+Hzh{</(ysysӦs\H490AD/!RB '(3.H1 P3TsHL&mVDzl}vQ%�={hsR@݊n7%Fv"[Q= ֻgJ<$IBSm> - } SwKpNau3hD@f�MDJrꞿG��u(?bCxk?7Qœa#(pLGyo`Vk�㞒 nn33&CR D vxO|H+}ϕaˑaJ" nh vDn* tK熪��vK�,[mg=oq͑PDBI3tsPl\aHUt^8Y TOݑ&\^E勀IdQJs6}GμAWu#LjT5V)�ILtPr2YkR]%1q*Cv~3/`YeՂ:S C&Suau)M+f/ j,BB8LPsLUj>r'wGB 8<klʃ+>|~s3#Pߧcho !-k$=53ۑt+TS9Ԑ3g>B clM^5*bjT8ET {%ffiXb)D GŜ5peܼl)D 1�BU(!D,IbK7;{v{CvH)�'r2"grsOja6/У ziĤk L`:O~"PGW6yKO㉀Û q;5Zj݋\Y]r؁q~2DVб#/Տ>VÍHY 9pGIzt6. !䢀�TU=GOꍯڪ p8wWÞis.LvdMrAXdP衎O~3�hl{1uba.V5Xu3)PpF tEv&A4K= @�B D1P?Ư3vb�&''$xZr-reݝ0ϵNE@95# D[hW(=y~k#2?/<Y#�/͢g,3VtY,CP pumg6lԓ3'D����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/object-rotate-left.png�������������������������������0000644�0001750�0000144�00000005056�15104114162�024304� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<�� IDATX͘{pǿ~WK$ (X@@Tl5:V-tZG)նNGжuRc(V*H%J P!H ! !nn{?vIxhN̙9g>9?`7~9U/mt6<sˑV+9Qo3I-,l;%ϛF{2[`iʀO:b ?֊'ڭgò.+t%Q2YnYƛ w@FjL@0컠yUՇF}v/^k\5s`)T -�TLn ]e:bu53ζ[}%@N~K_~mNzT�@4T okw{Sh�h4Vѳ׹rk-4Q"0f%XށCmOؚkɽ{.6,)%nwbA8">FH7=Tn%=w{~Uܫwcٜr3�Gj η9\y捅rkggw񺳯( K. /B-DΓP98r,t7v_s} #5C(ز4RMh74L%NIզTceVewi}+<#@�h )6l3NiPtP`<PjVuk#]sӝ'yF)LS\9 C1PW< �4 Pu+f;& z輣3={܅ĸ>o[6�M-^DS1 �ԡu*'rW]<}}N86 ;Oo(vw~jp$hL)3 *B4Zuj'�8/7T`@Φ"YsBM0m}5%(VͻQ%8\j*-'01`Mם}7#Drȩ-N82<>ΐ_b/-uUNΝQ?׺х\)Sϊ;H1 Z rxubެtbՄ_ 1d.4<du9[~k?86 RSCM᰻%=UUtwxgy_%D83]S&jKĜAg쇊*�@(9׏vtU5Llt  U s3Ku! *$I*3/ 8 M,Ӝ1h>2ZK@�iy>tNu y&d6EAp9\|iң~&�Ȏ|w_ܰ]UU}fp0`H^ �X6FQS$H<`3^W[}&KhBn)nO]ۇ�mAc "a-nD2 EFb6*WzSƲrLvxOF=!N&x.`+K+X2>>U=A$UDY2�VH!يaL=L0YxK5_d(Ҧ 'Ǹ[S<phpz&gB}+^0]rEӲ x8n9 sŏrq#CUArg�E;TmU=Vq}nQdL2ppB1VTQ_,l(,'S\.�nBg,Ĝ\ekϝeSOo}@@%2, .m.ϚsS--Y[`ƂI׌d ?׻´mKU rW'bUS(A@ vE _fÃX8bDb<,a2hrl$H H?> Dd�j P lBS[CѼvBgiد%A f@�9 "WrR萃͙8b{B�E?`Mh.^,S L<Q{siyC8I�Manz8$řсCm}�}ɀy`_Qf^-ْo)$Y!�e8�L6 ǎ/էsOQ)r"C}m>-bZ=6Jro)@.GEt|QXw:CrMjL7�ׁ}ʘ#*M!�N ؔPDɉu^l #y  \ �?.j`'` 4m' p]c<y@� jlxkKK{Z^U[p.e�Ƶ'+/!b1 jB4A&2 J <Q_I;[|Eqh՚ B`,{nܜe) Ծ5Oq87����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/object-flip-horizontal.png���������������������������0000644�0001750�0000144�00000003024�15104114162�025170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXMl\W7vx͸6Mj'u,UQAB.h,9"$$’% RPeA M ,cTQM>& Dbıͻ簘ycgA+Yw9ר*q^Yl\ro:8k{0T͏bwN:s~7__ʤ1&'~vyO<s"LP)W7up9\%]TˊOsMs3tnw{s?RClnx[&_좾\00p/M[ VW9s&c5xT:! ? п??=P}[]b@Ȥ{"~cG7z8|ʌyuuX.2qy}B׺ԩS>̌=j{3 ũsW�̩;5yAD" v>*Ç{ /v'' }D,"ѭl2{1Pi(X CSY�Lj{*>{P8:==m0`EU4fV/2("7Kzh,�gJd幫ߤIwZ�Z !Ts7} P1LZBqcT*UÓ{u>?S> >5=*kQնE2vt SJXU*'${<Ű3>6X* "F̎zגZ#Jy5@EdAx#;FeYݗR�מXE 3^@s6*BXo^Wo/S\Ykˠڻ 1R٘u :۟Ê\)m2;܅ZG)WQQgz*P_ \ϟ_W}d2T*n~MdUZUR)4.x$50#h1B"uQBi@JʹYo'c::2j4*"W-$PQ[cj�ݸS3+F։244<L"\){XQt>-~RuHgjbBv$(ߵHtbb!*I␍lE9dxu1F %ak5j:HFoX +<14N1}jbj%Z. "lc0 0Pz1-F։2"B5F�l/~/hߋ r1dXSuqdڈopZ l*g0ݠad5lXΤR5'9GɰܸoO#I|P x P㠦W:α fn/|?NhEO$΋VWni7E|P,?7pޮ^`^Y@ӕO[}m{w_U˕O:nk3a����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/media-skip-forward.png�������������������������������0000644�0001750�0000144�00000002725�15104114162�024277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��bIDATXkLWoKki.@%AH)S7]/lNݼ,پ,4fjfŸMtN]q"`KŶzD}gZ.rӯ'O9sRH!RH/"Au"KrMv"nZR �Jjt�z"e$2%\\s�w>~<Atf&|ctڴw6վj9^ҁ�tuў&� O\Ÿ+ʣk2\ do&:!WMFVd � OGy[UX25u玬3f�H0*oн6^m{Ѵ3Gʌq_M1#n<Ty[^L=6~ \0c_[>L94a81cA�KR MYO?eg0& ث"ѤQg~ֺk}~ҏhLc;0#p3_0ƨ.вEI);Mx6|ϳnpM R v;>ge}v�Ω#FAd|G&\dԨe,ڰ%B̚KڱIñ^pSLܲ>}n_C؀%Gɱ1k1` ^XڜY1Vإ$wbeXZ 1t ߈ҍ]6v g2{5vj[h;6 '݁J;#B҅I3G<wX:֨�'Mj=9ؓ gv�PPR祶N@|Ĭ/vqJ+/QA}X;0$Ik}`ܮNW|ZOò�4*H0[.5!9q>6kabwZ*3sTln=r8V4 ]lz,ox(Fֺq9��cC%H.)�M�Wz|imxm@X(<muy+ KnwNM*d` 7A^Ы0IBuXxd~ :}P.V,î(ډ'9{o wd#Wp=;u4{Qىe9#ЅsXN $8#$o$^$D8lO{ }3NK26vegA[b*ZvSMfo[ʭUy(+mVvqX6>F[x[s.�`26Zl[GuaqzߡEoo^d+LJ|TQbTj�`{g҃RH!RH?D!d����IENDB`�������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/media-skip-backward.png������������������������������0000644�0001750�0000144�00000002627�15104114162�024412� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��$IDATXkLWƟDQ,)RT ,:7/%3DuanY6%.Ǧ~X#[t(EE-T@[J[E %~퓜;9P@ЫH0鍟d~ VT�`s2g}+7OtPeVQT+4*+Cn͜Eƒ!�xsS~ژ)i5#tq;tVW r>uIG��Wa:F姦~mHw 0?KM}&{v} A9Dp1kI~J3Zʐ0U}Bo+ o+Il;l138sL5̰y)JSnr3'Qal 68".Aoĭh5`$%QfYrLiAJ\hIZ |,.Wt2?m~܁A a= 2wsN#dFbR̡Kua6N.]R^ !f|*9'V7Y}?g^[~T;ӷ/\5O3C{F/Ra8}2it3K/[p&팲6=H#pmkYߌOa2ekY�88s-LKkY}$G}X=$BQ;?;95,<DvEU/R&DYk4M(m;A)A9@6;SE/&qu6 qQQ r^cw:omgէ(T* cm -ۿ? ꣶ~ z~aԈDh[í7?4H7Z�Jٹw޹ޔwk߶5XԈ9b9{mRKw/>yɗK&W H�yxc˓NЁ'ڛMș5%hcd\H^wk.nkh9U G~"1ovjӭ=77V4UN_E\"4[8z_zMGwwumsTACI pyf%kg>}R&!J7�O֫88#uaUozjsKjػ0Ja@U{ۥ9מuv|^] =|s#s 7Jo*1^nT6T*/^$<HDP �`^V>;#c4[&ȞybY8nDA �s.TX{CSJn|m*:=a6 (|yw"����IENDB`���������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/media-playback-start.png�����������������������������0000644�0001750�0000144�00000003227�15104114162�024606� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��$IDATXoEx;I9{$(HT@ BB!!�/^� !Q8ġڦi8vkwÃڱдAv=]i?ٙx 7?nִ"El3@e ӖdmQe fe fٽ{A[m\rY9M#6Q jnv,KUP7[5NB <p͑$wBOhSՃf$cQQY;iifyyO_Q`so`խq`�Pme}#mW&xbam[z; �^LKɇ<L DctX4֐r �9NJ68~[n~TE;|C:\jvTa\ ALsj;sOg\씴T4.Ap`sO`ѭ!A*spppAI_Vz\Cu=Ukd7hl;\R8Y&ב98'h\Œr(]v8vW.U^TZT$Aې\!W~"(EŋښJNσ-u&vJ͉ Z$`S}R)Y MPѲCHCUmέ[cX mJ!s^nVChH:1i+6 oor)$k+�ltDD@{oBEn쓭rM)0x}R(ӣʥ\ $@siXLAjӣ ;bW|biT̜ ш@D M[7׉i-ß f>;o)c^)'!sD01>1C8BgmfVXY%|g#O}?>%>?3y/2'A&�#VGȃYt,v,D'׳o7me1i%Ѐ32XM6\Tp(q}$J)sz.V؊_GcKo\<QqÌ*8 S%$YIw"LQk&)NobVyL 6 g_Cz`%  n2v Լ82:msO!4 WK˪`5ɧG /OñKX.?S 6ʶb!VO|=ve Pa ,B%j,;pQ_FO D߸> �T\K$Yo`:ztz)VmD6VH0,LbKy=ΜM.}>;- V"ġiɌzX^?|7ͬ?Bܰ@N Ֆz̵M^ߩ旅 q|pe^yqp.`>$&ύ_O}wK4?ME˩ڭd{폢j*�}6ʵyS����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/media-playback-pause.png�����������������������������0000644�0001750�0000144�00000001510�15104114162�024557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDATXX=kTA=/f!KDV EBb.u H@~` Fݝ{,޼w!*̞9sΝ5|i/xʳϞŘM_{__|'w�O7Vw9疇7<v’ˏo7ֱ"8sPǙ9q3:  �8bdT͙~�HB2hiM8%; Gt΂t �d�1' 8zXq0ʾz @]Ѭy\, ńưς]ABM┹8X0�486AA Ia@iql^T7:qHq~ {ZIJN8 ؛$!":(zZX!B7Ju@6Y$Q:hl%u͙nmZgi u-m<݌GH˵؛$pH)IwN%))B :8W=Z/b1ւnUĦ!b9Cd{68 8B= $1߂s[sAHiz9,J)3=H\pb$lg>zyKo,ʤ.U6B߆Eq�¤ådGR@>}{;;zyxno{C&޽'du}����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/image-red-eye.png������������������������������������0000644�0001750�0000144�00000006501�15104114162�023220� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� IDATX͙M\WZs_UuWUv;HƉba3b 3c$[tETJY8-*X40F "8Bg&vܶ{=?,c8-{s|[9ǗyHBP*^zI>}+cVk^1d>;Blի_|pJ%s/: BRL&3EhEy$IIt8.izRW,?�Z;\/~}~~:yуa$Ijvmmvg}}[o83l\.=O8qb~aaI"$ 9sH)<qtZׯիo3+W&&&&yĉ9sc=,*wAk5�Z0dtt|> <xpG;so^|ϟ?/_|pjjꛏ>wΝ;BܹsVEC)Q)N 0PבRR(ٳœB? C_7ޘcǎO?}^S.QJC}B)ADsVi?.}_B|9g_{=쳍tRT,ȑ#9w#G\.SJOJ$zxRd]$I1jdyyG>d#TҥK~…�=Gٳg>L\ƍ8fXcH?�+֤Z)(ch{B⬥j۷ Ð%Ξ=z޻ ^|yznnN:uryyJiB$G_)raD6F$G(btf1vk-$I|gK.Dž * d"vrLOݦ!N)v]dC$X簾<@ˁr0 iw:OܻwY:ıcǞj ŧ/\Ph75!޾M껸ٯ.r O>ZG4Ľ{^vE^rqL`ll|>W_} axdaaĄHfI ׭) Pv+s+_atv�0ZOʻVCz�293C&HBHIddd1177xV;@(=fi4 \i=n:AljS9-6&Dd'7a�W=r33d^*fy077wpmm/^MNNLNNA@RchM1j;,>r3gG7f!Uss;&G4ir@all V.^'̇a8d4Mz$J*E$8kf�[8c&&$Ho//SI]#؉IraFkME^'s.snKzE!%juF A8b �1Zl}C{dFFȷZ1R ZKE!Rʜ!l<xI #0 272H> I %v)#�5J)xLk-ibZsZK?I�8ce5.zp18Lϣ!Z62#H]�Ơ" #Lw8V$q XqR=?I4[-LeaycH4MBH4$Ib`>SU[ AvڴMccx^m3DȈ$vڸtdF^/bGF t.$I:Bx7*mq5)P 8pNm{B=Kb0v8YS-oӶt>("M <vJ):ZsVWWzt44Y;S|Ԩэ5v56*Ac6+5n߸V j~:I7Qv٩+&L8߫V7flԛM:B_c;k' b0/Ъl^A}|dqg$GHBjVq8MfyjddD�Xc@A`l ۢh0/e38Qk?OxN&v< |5FjkZOu3?|cRv<L&%\c-Vf.GpqSlMOrK+oN%1)pK:,xGӡRl=sJ8W,~0 ˛#V )$A>$D>&MDgs$$ҌcTښ1&X8m666I)wmfuuh4ظV.BEI}Wj5 6NRf![2Z 5BJ ؃{fj$B.o�*8:==ME{6!$C1ԶqΑf zBH)QiyE0d{{+O>wWW*+߯V3B?NMM z{F<r\=,QZ뽯 |j5omoo /|i z/B$vƘmčlc-RJX1}-{;Z/s_y1)f!1�_2RNGQ[SSSZXX86==MPC{nh*SJ~<RJnBVU7T9g�SC@sCEO@Z)ygso۷ɩB@>'ݶ%CۥzkkmZ+?`z?nFBBRaR0 ,٬�5VѸl6?TJ[?qݴZpU/sn/ĔJ%JʡaKbX `#ALA0" }e/Mn5in:6sjא:!مlTZ*"JvAZB<gJ !8BD@[s qՁZ cW!ۅB_vKM.)2휻BLI?ܸKg e#'7cu6����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/image-crop.png���������������������������������������0000644�0001750�0000144�00000002142�15104114162�022626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��)IDATXݙOU?m - _Ψej&r+ML\bW/pa`&dWÐF̊-0ٮh{/޷[(]e{>9O{9JDfqɡfo}l~8Y@U8~W}>њtdśF#qPDgL=>.<3Trw gt֮�ܚ5r×vˑr@Q}es}~>Vlc-}s^ *Cᨩ `=m /- Erp7RaicY_]9"ZryZ&N,#�~x)z]�-``~%sE= _jçLEhjɂv(+uN8h�~#ν&7VKTlP�r|TJU]nW89 @8K@^ul>m`CcSkI'8uYY/Tx^0Lor>\lrЬf4Eܮ=9ٚb˕`,?rJl/M3g[??Pr;74{:pPϿ%R#Z~ 3 ٿ??eYk_.AGp7$x@LhAk!>9bnw_1MX!̧ N (!زj#G˽ł@*{ֻ=*/-}HR:ugFiK<jhf=w6z^펬D+3~5?L9J҉y�%"( ˹NZYDwlg=ypZ;:s H.@PDR*e4ZH+M7XZfͺa1B ɖ}Ԭ.SVC&7lzj."֜5"O<|@̗\U)Je!Z:܈Sj@%Ej_t40 #����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000003133�15104114162�021633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��"IDATX͙ml]e9/tl+ۈ.v69VQ1ic1h A/* u ۀͮw<?snサ>7<yy~sEU0ǼDU}v[G]LSC*GG]M$~\Wf> ]ٰk>7/|� =}%W-t[O}k q|�„Ӷ7^r}o'ْxewty(`~+-KZ?yGm)e96|$Sɦv;ow7䋧0>5 "�{72/q[ǒu^ݣ齉u닲-&3/32~`h(`HZ'o~@/ `Yا{ol*<'F_(B_1M= ﷵD�` )W^ټGD2C{ 準&/)`m];6|E6ZvTW~-oo\ܼξKٟs–==kyB T\ML7~֍} mJ6,'KʼĹ9;k1w&:'^ ۿ3@dڸY nM$e\�{?toEz]O &M$bDA(*_O>AÂF6{aM?�?C$Ƿlsɪ524, ,QQĂZ00bЪ#+V۶76ڽ;g&õ:vwGGt D1P[ bczSg5LtB7v֭X޺Իرvޝ4 <K qc" E@1O;OBx8z7lp{楟O_5T6]޶_{0_PXO2G wȰPp.<J$Dn_>Ϟ/\PzɞK~'T 5>~P:K.`= C�d杫ZfT5H, ,:TMrf$3t?%Y4SZv?]egU5zT,< * 9? 6U-SW^�X*yM *f#8)^^ji.Ǚ`\_-Ep*7g@&(`D#&Rn^$t8?V,gR\K#ENX#NF;'┚ g(",'=5 RcT5b9 Uu5ۢdHJqUS)iZ6Gk_U啈-P,¹H.p$?*Y[LR,w>[6�U^RB >bX$yl1kLJi7M\J1pUqoV0U0fPl3VB:%7YIEijv 1U˳+o@#FQ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-top.png�������������������������������������������0000644�0001750�0000144�00000003532�15104114162�022014� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��!IDATX͘]Eǿg}ov-lt5.ҢYQ)4j )AJ!ZJmZFXA,e۲.w9qw>ڄIN޹93sIDq.gkÇ\�eA8x"EHܧ=sŃ-Sf6R1&M@":`X65 kW!ٺ{�;~ )yPHA !܀@bc0òwp>j `O?03inrx 8[:A\UHI^{/`JT7D*d<<ś q<7Xv~U߭Dx`(PRGVlF{ noL5F<ʑc/>wf#dI&>gGf/Zh:~yem=4L֧'7E#)Y3qx9 =\LQ&Оf6}u}wAr> _=y_usy98]|);Ν+3oHfԕW;G_qե`烘eK9+,(X?{\7ޙ7ZYHz޽d.iϬ͹5t,岤9Њ?cɼ꓋/yO^V%kVuv%sWzɕc]ٹl.譗g s soGKZ[E(}o+לm5] ޢ岳F@tGN@spj[p2gcu)d_ XǂW iy޻;yCck�j*q`@J[d\'8Uww=`oMw7g<yST\2,,@ !k0U7�GOE&㋭zg hkv܏==z,N?"1lՔP Q i)vcѼ6o5KZ[/]U˻3G>SؙEAaQh0GP`Wޅk_9m(zՕ{Wߑ}s3C )0B؊Q 0J 4<e3C۲W\[2(ҽ-YzV(�ॷ r{<cx 0E"�1BDP^e<V;ٛdҵS;'v?B ~Շ27!}l q8mMF~%"WO~QӖ_G|� @K(aJđù(`xJ90jB!=4%K0\�a*)*qEp'~$\<4ƧR 瞃$ _P^۔@!h|Fw! >�@RC \shGڝTn%~:], (༪s& WnHpKIGQ¼x5&<VW[�X"�"32ɹ4یrM|ns,,*Yq<) %j-z TKy$B�kcF\MFDdDN Ma 2[\YDDMSfM)ׁM1R'-j VA໚K:rP,2v.ڦ�(MbAՂk(5O_o322^m&do;?_����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-previous.png��������������������������������������0000644�0001750�0000144�00000003357�15104114162�023073� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXlUgǿ{m  1en \^:(@Q q1.cd1n65۪A%~h?ls]WL[o[ֵ{n=[s1;͓=sϏ9DC=~Ѥ�-3=]LLvd�vJc.U_-(?S4wx- +sK ܍{S߸vi۲>@$/n= ?]5wl^c=Z4}[{U55ugn;x#!`v)6(okmk1??@wͻRkuꯘA�, fLs{rRBs?*{fo}ᾴsC]L" e 7"90,0860O.?w]V=K7mۺy}xca/|~nl`8a;7a`1-U>~e٦˿4  U wLk"28/;3; --o%҅CN%) !18vU!v/S]_ٴa~Μ u1,\TMb@ !btKfW?V<™X R\ p .LA"{/|`ƶyvABR D`RD� XaBpcE1h@`C<.$)WahrzC0)Ά@VO@�؉yA?@5BXF9|�zB;L@#ྍ-ϝyN4jRQ]"0B0`4ADȩBH`( $@AFQŠ٣k>cnа[p 0GP%D\(@X N%by &n+�ꅽg޿ZjQ p Eh/eGRwL0b8zQ؃cMkou̓x+*Hsԅ �ai*Rx('Rb\AJirG>>t\8ȔGVW8€\r%�/+ΞS3-/, -�<BU;r& X\F@ !zbN�踋㍜S5Կ<ӛ|Nf�#VQHw@j]H4hgvN0] -\Ew7-4fݙ:=;oA<j{~^bl{(1]f5'֤$R/eu\Ѻ]#Oa u;�@[Lb9`<y,WwroxwK=Gj=9BQpkk%"b8LX� 0|tOWܹ?3sֻ(P2H1%p1+Y ݾWeËMRE(k>D]D7sG%Ju�NQIJc'?z cNy<挈HnfRdpPw<.,{?^,iD'z&X*z&","ZDn^ 3˺4 �D "an'J!5?X /":ߋ ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-next.png������������������������������������������0000644�0001750�0000144�00000003373�15104114162�022173� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXklUUks[(ARD% 1b{(31 b}G b@ ôb[ʵ}ZIVι;Z<HD07ax›chV;7Xd2@ ѐv)&6' xR-69+-M9\8rx%ݼbbtvE""8{dZrӣF /,e'X漈u2c10qk/:3-rΥ8~rJ8 $0&]} sI~N%&snff/wi JSv#0F[)f5k3 m}5Tax<6@ )̘G]: 'A+qEB:g|W||ǡ-YH@DP䃇, $sq֘)(?\WR%Ѵ.m߹q7jð!,4>a ưaرw_&ϸ->'p  Èe`2GBb̡~ [j15-sݳ+K/8.@1tªGVI;*L i݋NAs=S'O|ݽg혵ԝSba-C pQ)݃n$?#K,` bN)bNVB{_F\aGTŚ=V-Z(@68S^tI!(EP@ L\7~J ߮F"ۄ;<T6 /WTO$p8l2ֺYI;׎T#{w-Ba@.|Pwp\B|�UIeDTb'h f(G �H H@�9A �B�Uw�$wtL8M&la "@X* @@,I>"_" $&�C?>NF7X]^P�8 HN^A}ϧe}�z( � ucܛxqԾNv&y/T4Xn*R!&IA=@tf&sX/Um(Q @E-PX@ Q&D�m!K@ :bfq+|mkpM# #jq?څ>^29ʢP(lj}60ZpT67immٰ}YV: ցչ}raYtG+� 8|x5Dssk�P^p I7v|;�TERP!@"@ dMHvdO_$U{> 8)Nb.(\:kl4[65=.DĄD _*PK7L\<Fl<~M}GjBkZks sF|*΋W`5?fkz =ӌ&*4Foqg9w_$5V':>Gy81.=ny#g_lbSwWHzp!.FI}ު·p�UTd<R_m~y* Xh9Q_LQe}}v Af/zQ#o]bG(����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-down.png������������������������������������������0000644�0001750�0000144�00000003050�15104114162�022154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATX[lUߙ]XZrBhh x1>�/ 11BR[b$1&FIMRPFxBZ(X)PJYJg3sNwb;]̸{?6Dԩ/dүva4A�Lfnl6?:ߺ_C f γk-e-Ϻ0]QBIVHeVk-HeoXpg^ vvUPw'ʭS5Jd0 vFOfd8Œac?�Lu ^)w)Vpq9j2leB*h�1H�$�DT6;Sҹ"sA rJ6a0�L{g�FOlfA D  )ˆM $A J(c�hWA"BjmЭo&зOB(0 +V A 8B!b6"M  '63x}W"Ɉ6o"7"N . }՘k^[t}zHl0)HBfZ.AuS6X1o0fg.%ƥ+K?&$ yWWedGN=# {6dTjK-XtɳBK{V#R=%*G/^(#j8:.=8hv*/쇥,0)- HB"Ǎ$s)VN`0Б=n NTNu~LA$^r؞s  B8e,T jjq 0s|\_ߋDĞw#ZTrDd?xsCC2O).u:A³ v: ?J[*e9`[j^O :FO1E�y8aTddm3m/ ޑNR:fѥ7cHM5@8IiC`9rP,.+6cOE0u I R1+c1_ZH/yuWc#+c1|Z7s["ٽBࡡ pԬ9+{tXQ#W Yß&4x.wH&xfKeEZxC= XP�7YnM~u$`T`1o3)ze:oئcvg@fpb3R e3Ҵϟ-hyehCWG Vb.+ܵMG\{ pgeyrsODT�~" �oG^_ug~dbH3 8/Bq35gJKD}�v89͸ok�z--wI/zߐ9s^<揝3h�P,o^�ɅҒ�SS2ceW3g?n| ?@mY%}QN{9 ŗ2|E˫gI0vw 02fi'mm.8>ެ.x] E�IDЎS5&⠨8ik_>H����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/go-bottom.png����������������������������������������0000644�0001750�0000144�00000003226�15104114162�022516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��]IDATXXklUΝl6jAJP4%J44cHaL0j1ILD#-D*VAyEFji} FXvwvw{gwC4Iny;;C"/?FDtԪ k6BOK=P`;jjg-D, mC4֮_Y$�ԋfU4z}އfie~>@>nz"SA'e0[ `2f;f}Bf e@K�a8eU 90lzl aFX:9z$p\U;8 U @dX ġ\\%(L2D&$ @lB: O9)f&{rC5KAјHci@\RA)xA'0 ;.%ձp qYYf_!^TZ\居ƊzC6Q$axN5 PJ{g$`w`'oSJoTa[,bK_/q*LN,>AR"4P   TOލl_Rϫ v4ӼZ=ǁ764.t 8`�1D%!LP�ǥ~M %r� c1{B4;پ1 .'hk^2+nNȨ7q<�JQFŤfI!0BR.,~`z9rgn>>}Ylm@9-ʲaЉgڬ }naU_G)aӛ]2m,!JC0wy p�;7|pbDy ~t0wݶWpAt4! YpNXY*TN杍 }-uqTjq*|7"ʂ#&PVx>&܈K$e-Q5 uzg,1(UY{+sؾ#DWfZym nfU F5 `p۰f?2bu&WS/(_5vi0 ]%Fha}Φ-¥7dm̦zLίB M57ZsbXwIw6ċ"\X4Ӗ1kdLͯFu^*-i}^QDz|S~iW * @01c|l޾>ycmJ~mQյOǻVoޘQ:jaf4vmOA~r$s fڳGS꽪Kfq}X\G:xG#+pt9[硼<G'qiЏG=y(L!d> M5D!AJQzVC8rfΨ^wWnjjv{rG8j,a[3@"`Ɲd ¸kƒwOBs*x~7hPG̘ H"/p��y"! `MCN^ES¶ �sd! [7%����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-undo.png����������������������������������������0000644�0001750�0000144�00000003052�15104114162�022474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXklTEs_ݾeݵVZXR >CD 1&j$h�D_ hH QAJmw˶n{u3]쮑ޙ9sw9dp`}q?q=r;_R>fBIߒيP|Ťؿgnp҆W7na)﮽S*tS}ȷl ٭ol.p5}j-?@#?8wgw?"�gsE50fw_Tn:vUK.]x[Y,oE2tķn̽2!<q&QrYݴpς<%>e{n(6 ҋLJp(0*bh8aNfM yFE.&X(G28e6A﫜�;?۠6Y@F�s,%;J:~T!uYv}YYS �WD)Es,~ҳ~:fYhih?`Z'\ JRΪ۶6򽫦PG&(߉_GDw_q`Ӧ.w=I1@(][&+9?+Q^P@SȾ\,gLpf�4>eRο4 C3Ƕk*6yϜy &s#ɒC \z\!T$J2p96c�(Fe?{t)N'L~퀧u7Q @u낛�l=}階;<ݞfc|]+mrx 2;h]|Z KM}nQGйي�*�-a>׍#K 7#7NE.vܲf Zi?6K(W �ƣTJN~{Ѯeގq*U T -f$n:scћz;Ob(m�6T$qI01�i;5.Υa4 ~6O6>_ųOj`~0E�ۼ_qH.UHr\-`*5{cϖ݁':N hp"ALT7$c斝})SSa'|;~ ܩF5&2-R v #w<%\Z-CkS֞�zI�B Nni ˍ ONOniʒm&gBԾamծ_")ƻ쏦T�Bvϳ'pn.=ڀmCilS<P&8a)=X `ŀtlt<yVoKʘ9Cfj)�)W[,@--J<U gp6|x)%)�y:\>f2ECȠWDx^"zN2DӈyV4Sϙo����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-select-all.png����������������������������������0000644�0001750�0000144�00000001545�15104114162�023561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��,IDATXXMo@}cB�E� i\Q$#qgTUTS̉#j\ -iΜJK&k{:IJzfe}n4=@XbOWxc`UL9Ћ˧B123�WOv /5yDGG؇ZTLhM VY4u"mi\9y.l2"1#, 2$޺_1i 73J#$q�f3{w|hc'z'繝L"IkcAfiL1,�j6bKޜ5Q̵n`_XQC0XIMmI2Jb3ZM$c ff{BQ+ҐQ#6Ġ8IK|#�ݒ}-fP#`*Jڼݴu7#wݕvjUaŜB,]b-zz{8JIu16"Y D& gcx6Dŭ`x6LQm]?R!ͽI[Ak_.ǷI�=Oe<1 |0^H8}4#\]3$yNe59&\Y["5<CGi8)884ۋkb/6qu71u75b"n(cfFo�)�/qu7l]i8 Yφ4�JE�-F52�~|`%�L9nʙScL&o_=Xo7Kv/?�~;Pō����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-redo.png����������������������������������������0000644�0001750�0000144�00000003143�15104114162�022461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��*IDATX[pTE}Ιd:L8HA(o U^DKUx/^,,RV.AJ_ B--QJHI dm̙̌9s/<95lm쪯N?t&B"ay!̵{jfgҲ" wiuK UvoY~^]W�w\7Y^8܇?ZGviE!΢N^|/ǑtɕlrA1]S()q/ <qq< 39nn{{Sؼv]({r%\EϽɕ몴+rnqH0cJs+m>P6z|ukPdR �G͊{{˞]]UfYROI�`cRvwH*(58T?x;HX:#ҧ+TW{h<�AE|vQIdxU ~So fG7^XМT|ߝ<ۻ}poTF5.xyU+pAT6)TCs箎}b3ϓ֬kUw掊"! ! iqnpa=*KkV,>S!T ǾmϹЎAJf\kcHp#{ Q .4^h5˜9^QvD#iHv(2Q@ ǠӉ2#;Au;m>ݫH ;QY~WqN0(x@S)@`쒦 ƢevQjw#8 ;u1Ibw(y&h:}Rw`O@w݈G "١Jqgk?8%`~cq!/`IYQTp]_||w2b Ed8t `gonmyl %sA&Dd8nCmSιę� ngF zE ctK$F%I ;/w4wN!7ELxrn9sFՉFDL  j~儡Sna t'ML@ O7u\mhq�5EUJHN#;8n'E Bц$׺K$"-G 3 Id׊��xo:E:nl ro z s[aU.&C?cgw/y!(h$~c'x M(ЉX/t!'q+$="'7X~.h?_G[-KKnpnIcI&oƐ|$L2} +տ >=)YDRӾ\.a7i΍X*:ףS 4.x4 iThb:P1t 0O2t)?OF҈t^pHT`$M{2Ӈ+`dvY-W9Pvʕ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-paste.png���������������������������������������0000644�0001750�0000144�00000002626�15104114162�022651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��]IDATXŘKEՏyf!5AC4SC0oE zZL'CEvMbdw==]a{zggf}3]U}J)� JJP'N\B<ty~~a1KQIE&&ґz+Wb R&J99Ҁ#x;O<yL񡦉];ݍm#I&'XZ"t]q}+ݧ@-4-a)cǏPUb6\&2I> 勑RVOy!9Vwx ִh?Z$>.L9Lf<vp =QS€/{I1=#q/w* -dyP|x ] v~}3J15T==>}5VVny`*ҧm)><DW[o0{CGeYƆE:+"k*ibY8= vH98ϟѴqҧx?>y:tY\{d2hB^A`fffG D@`m9xRm�\\\,(=xAˡ$*Nb89p*V1` PJ`�ssHհr,f syA^~ӌN[h{߉_8J)Z1F~ٞcnt8g|V[�Jy7x\Eiѫ`4!;7b5A##Siu]Gu 3DZU ۘ 377G@ *{jq|8?Հ+r?(;/qSG0:`.ȷ}<`8�80z\%RJZJ)lۦVJ֪Rʈ ڭtzW-q Mŭ˔$fs<~㖧 2ipZ ۶i47JlV-Jke &d \Z !uq4M*֙L܄Qp]̀qT@xvi!RPשT*WX/1k|>凣(( gF'8CDJeY(U^oPrrc�mtPH̞ q?_~!Wo,a7XDܸ-yr)?H&˼;=6.i[WWWXY[EX=40eUӪ3_*寘\)ݭ_xCL a{,c-麸v[wɪI\E0;c ضM}m}+;:'PV-5؀@ȦS0sDW D7U)JN٤oN݈A����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-delete.png��������������������������������������0000644�0001750�0000144�00000005405�15104114162�022775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� �� B(x�� IDATX͘[^U{˹~|؞Nu6BTAؗT Q)/` %B-FѴR'S|O<L=3v|]exķq9gZ{żF/^|$+w06`0Hz[o9K�/ xc07m.FcS7M[h3vvlpo}YrUx~8'}96m!�h4?^jW[;Šgޛ;<0fמOdBHQ9 CXkEѦ�*TULDwqΡaڃ;/t/~}RM4Z}rt],--9Gey!$<ȞoS<xuO|*h�~@AQRRp|ee�e&�R)4fm~u(|fbΈ��SFk=^wg_v 2t1?{{S�[MɓS;Ǻ7 OpS y]`.ݍ9_gw^ӑկ AF50F:[;?O1oRje FR1d/e+=wySggضs9<_vL'ՒL~ݓ7FWݿůL/!}mdPh�3`zp> A 3;< |]r#?w � E-]`GcՉU# N 8䙋_8gkZ&YMv?򆲵.pk~>0UxGѳ[/lCHyV;20s`D 9Fp.�9qw8c\X 1EQ邁! )qbaaG187}dWgϝ6DTJT0O?{\ogIgm߶caFKOyį>SϜ0Rvyi{v{7sܙfGQ\|>驩O䇯N/|�ֳDB %, F ʲcNJZ�1#Xe5JӔ6U1%q,y{2 I a sSt,#EA +JZ !N'"FiJ�Fk\^ !0F~usAT�kM굼V Z a�70F�{|'B&i)&"$i "IPJsR� C'DZ-ir"#asvTkmDZ,b az!ۢ( ZpmFJ9qh48nλa}l,\ZM☔R6M3ldY 2"Ec Eeve͘R eUtZ�s9Ȕ%ׂBcG#AF*f-AR i]RT=>XkVR̚u"* qpcLoժ9oGiFRPɈi]7-�'leQ>V bJ(ͱVMZPE@eYTKk,%gP)[㭤UH:LBVW7YK);a2Ǒ[%gik9t萾0IHHI  o8J4#VQ$'sAJqUQ9fy>H))bI2 C{w;k DnaFw#"ҷOuCicL!0q}s78zNpc:\_;z,(RΉqQדpr1B1ƒ8 E,v9*!XuN}W4""ljY"rZ9hKャtU-,.\̲F5K'T\HUURMOysQUBF6U&kYsk5*.JFK1�gA8up8$pV{-,,\YX_; ~z~;/^?Myi^uVJ{ι?7w['j$^y fw LJ>soji o{{-$I �Zя~neK/DQ`9V{ۇϝ7QԶ{"!T(ڵ,kxIbmϋz܃Cm]Wp�vL`;+}$p jJ�%(կ״v6,mb[`{φ6ۏ1.nу �clcq �?w.^ZZ*�ogBk-s:u> cUFC9P9r$Iκ7̓ Th1DIo.u'O�B�'ls=MDFQqbRk@`x 0KgBhf ;E-^N#�*�sp~~~fg;;;??9^w' /"zmݕv�fsbg>1VVH 笵~a|wo?vuu-W� ]ր(bƩւcߓG;/����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-cut.png�����������������������������������������0000644�0001750�0000144�00000005564�15104114162�022334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� �� B(x�� &IDATX{pT}ǿ{トBddXbpcih~M-LkvcqK&vҐI=ļ\@0bAJЮq9cE!Bo7=} ---u#5{vK{.0N+m?p%6tzHyf-(M6m@}fμ(!tUKKܸ? o&vۂՠ[L󭺮as #FHd.אH$1k5=>aƃ;hv;d$JUBB7|;.f4j'l; !\ŒKbڞH$�Ku<:mZ}m4FTU{z$R7N��!G0}zu4nR{z"�H)aUc|sT< 4ڌ*[ZZf6~6R1Td3O-Jo:}S6ʓ\6Mmq5 w`V�(9稯pxw\v˖-fۖ-#?08P6m:}Uk$2A`k4C%,[zGTQزe~)[?uUf@)%(p=z}_ nD@�(ܹT&w%!tM̙3~~DhnnVت[7K��۶gϮǽUDL${ٻ+g&rK%o45Uy~iۗ.YWw:i 6~%pW�mxT*d 0R /žښ5 z5o2(>wquc�n$Wݲq{٧BƒbbqF"ah=Poښ e\0om[ XtY01y#!D]ThOI:Q@!?#fiB�=kv5S~,}ˆD"ص͜y$ {L$sw~3F@˭z*`۶v/95o:8ZQc=+^;qg\.E>?x9T(VnL�0~CEUSX<5k0wǰg?( BڛbB WȠP,%Kq4RTrͣ_+ܘ`uuea&L݂c7\x"pTPyau!˨20؟lGX/~GU;mա_͉O{Qa6BC߇@U"|oH5Ψ~K�/ٗ"N 1ۭ>s]>GF7Ø1(a[ۏFF ck))!T V}DV!O$!5DƯ*( BC $N*f0$BoU?&Wi6}Ruu<냥Fز0vZ;z߿:}hu}~ )iAp(RlWW|:]8~Q~cJM81n<.¡T@::P`^$ūq �^0q,23֕!f۰M4غH Ikk9׼MbԽ`cgNZeh).Μ?-NJeE!0t\_r7/ڿ3=7NU9Z? ۓ}= 4KZX틜 8'K@BOfL"S(Y|} {?a!a/#_t3 #!+8g:(8ǂٳ#?| @Ǐbqd| wt(H�R2DɩaAqɋmt6;yB)p]4xcTt>]`sV((!A�aDB!"8H~)@8DJb6�2wvww8CjksI@uEiy2;R:V+hTSd~^ {ϥ@\| 9a2cF}*W. `yH)%~_/@UPJm۸o�*jWԺH{pCU1>c>J+>�80RJ+ cU/OJ J e ~Ї �0)kg̈MB{*UKˀx9~<L)h EY @@$A�[V Hv(�`%2sތզ#S(t: V 6lh˸c( ̚&CL05R- !N9BŢb,}O8cfiZk~9s& e{+Z�_gfZ1uB8.񎎵/f 4P)h}}!76N*NvJ>9k,JzEB f04 He2Ɏp0:t^U�EEBCMʹS�!b b18t{/� xHߏEl[ a�"](h2?˜z�܊:ঁ~!fljvww7DQ5fYԪM]\pرݻMv Ey R�3I7?3$SCua*�uyIy((8 (_u~{V3ہq!'@C�/>% SJƆ&p����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/edit-copy.png����������������������������������������0000644�0001750�0000144�00000002113�15104114162�022476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATX͙OoFƟ{6;lsV!~ DNJU^*=D)=q͊^+to^㤋bɊgvg}w<8˗ �O{rm9Q}qsk\�PaxͻsU;'n ?t!E4yBjmN@& *l6FS%}RU03?yp杌͖q?__tss~ٸ~Rv 1ͰN?pᢝ[&URf)*<H2$H)8`uz*Jŏ|2[D1:AQMA�.3tA֪BpFM+Fc-^"`勊\8:V j(Ucky0(1tɃHrUq$+=&�@$?U T_ăy y8uMDE,R21`4V}h%lJ4- pgȶΆxKk[ 0Z f)U׫?~A0K'+T�XYY1|״333 �(pgq ,X]m"d&%XXX2G�Ner:ᤔp]0ь7>1d�m$1zp[jJ>b2Bx>:gŇۇx[RJ+U; Z@@$ b￵ތهsQAD<~Q?̄[oY=|s?`y8* vJ)(>^�u2BkRfY>}GGq0 >|GA:?rU̪GcڧTa1<o�9wzOߝzw>*aKUv]7(b4 y.ڽCV}TN}ID`X%~ �Ap*"qo޳7jžy~DtYf!cp|ĴQ'eo�yqF&����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/draw-rectangle.png�����������������������������������0000644�0001750�0000144�00000001263�15104114162�023505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��zIDATXXnALdDH !ХJzH; =B%qb(lY^ kvgg>0X�mmW/Oֶ'ՠ@"뛃7{qf�vUm<n2Ap|zm~Xx~T}齇k땠Rz#{I|Q h4CWMDjʙD`=-T w5s�Rp%-hoN `+٘Q%R^[E%/&EgPಀ w6S~~E<)gw(K@ & r1CX0ԠRVOu(5XI,�3E߼E[;#g "%5T`5\<a˕3 9/%PP+ uK/q>dO ͠a} =]`A|znXιn9D]L 9:%%�(snfp^�݂5aK �C$n(|d$tZd""� O {4D%?Ͼw:}`'ln[w#Y7 .ĩ9 {r�{4)"o<4gnt����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/draw-path.png����������������������������������������0000644�0001750�0000144�00000007353�15104114162�022503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXXg]uf-BrIQbUW,-+ pb$@$' pIdN"$BdETD*HZ.Iq ݷ{J,&)ѐ 0 ܃ߙsw }4!;( @ML�ʹ[C 6~lٳ>2vjgRύOE8P% avaCR-ôn GBJpi0C,:hX��jL;xW8FՠhMJy}z 0qmS@!@4i:f3vJ �#?0vt`Zck$ha5�ƤJڦ5hm7^Iɋ\۶C % �� d3YJ�P6?ڲ FZҷQwo} I=ң ެ!B.sbhv>*6o ~ɣG +1 &�B'AO5k*b bMoܺ:b!@D�3/o|;H }AB|IW}FiGS$ /thLjbCG~Q�<`XMV =mZ²D2/a 4ɓ%._JPSgKN[g;ր8 )l̶Pee9J]&$u7P (fojz;++l^Dže ( !4JJ+ = P 1ҐT*./-GXgwwtێ!+{19[W,v`X)4$/2@`;; H;4tInh훻FS!WR88c)/�! +t&f%w*@� 0 0`Yvvan>259S6Itn5QWHe%w3@7}мxDזg+G>JCY|]ZgOZ#W�JrpQިfWV3M--7^)�-?\Kj�MB'o[TmǺ4% |Ϲȕ5\eUK!%bqxv.zF(;lM$j6۰Jpىvb5 �R?rKwGAM),Xe�R JJ<+BjMxn+ݾ\6goپ-ZS[c\x1P.qŒat!: >G8P{MOٵƄ/V;PBCI ./34P1u`N/E΍ݐA)<p(Q/I_fs'?2-c"B@A,P3 C'§ޝ[jb֘H Np h H!?cOk:j͗r.7H e PB˨%,Ї?0;35E6oj\6V^/d V&X80qx#IHVCZR PKd+Kǩ!J)(KL>y ꎻٶ} AN؄ZfV+2yw\,KT(%zRj(AM\,cf<^4l(f/=յ. �)0qqbRm[ڈ 60j7O% +� ֟Uٟ 6ML Cj �ACi hd`6"˴V|H|]V0Rx{MMMSGwW`zj"�=:XO4S]yٌL9FZ6,ˀTIxA ]rSiY/hpÊT޴*5ljl;n۾Uw&֦rfBgb*,֊7#`'&Gȉlqx?7TNȎMTT;!$ HͦtiKiQ UU$8XT@OmюM�q{Iqb ޻PF̷[A2&̨ +#8( x\oGR ~\bN `IR!8(*/ )Evu @f2Wc=Fm\;<{1ۙϓyma1_?Z_"s Ѐ߿@gN`t�J)_p0(%LAD 0*:bM …>h X{Fsn0_<r)߂ 3.ŃQYYh4ƌa1(B*^𴜁A` voAdF �(}#3XEkʜLa>cETlxl6֖vE$A0Ʈb %�X$D[hXHBi Xt4g*DevMX㕖m ,R7'zO?N.$-�뺡畱fM;B 0{�++PWDð >騬RpZ\XsaRw!(['#'KAs8V!s4/.M. {s8H< UUb� "_# o]';RrHE,V OUׯRz| 6c8MM87TuFw?;_Z6?X5A/⃒|V�Jи!69PJ3T)IF{7c{.8UVDz{{I�g>̶}BgϷץr! M�ꊾϮWRLvm۷k\, C2[-aq!rمʙ^Չd\ Sacy]Pa p0jg@A;bO>yvyчSO0*OHɱ0?hzBxڮNw!/eV.G9/QUgQ)GuՠT.m2uux-#TzJj)M痄`:фpAk .5mm---XI`jb t@KsbQgfa/+ 7ZIu[޽5MM{Nm33BH4Ǧ=!hT.oٰު<+ck#];F Ļ j\,uv?X׳>20p&<iF-"P bQ.Qxt}e]{{ " rM85�AAWAjn󝪚;x[n5FFsIS~4uwQ.ֺLMLp(t0 i 84b'At8i՗�|?{Z*Py]=۴H8;62Z~/CԴܬD㾘{Ik]M E)lh `yJ 7t<VS ji. tKod,m|�wd/ތe�~~Ok BIJ. Qnp|;8tQ*� F尢^ B3IrioaΞW0ZD}7k/ Z㩧Y!k/~㽿=L.\44! Pg2Y&] \nSCsq%K7����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/draw-freehand.png������������������������������������0000644�0001750�0000144�00000007426�15104114162�023324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXYYl\ysνwVr8$}Dd[ޗ4hmnZ OEAܗ>mЇݢmxIZ%BYv") v0dٲ/{sČ_v?$ a!`]`I h-/#j-͍;7֓#8FLWߢ/\~it -0 /]o@KZq:%pLY 5�{ @�`fw�mcjfV4fI`K?tu Rj Ы�`2@BwK�w7FLf~0ҕN�~?0uw�_&]77DJҲcª jI@�Ƃėcdzf ">ƽृoPs~z;=X$/ԪCt^ya BQ dsёщre-93#gMcYh�adz'0v(*{$tk-Qt:7n�*l=* 'L6s8ݑ+(7}6l0sskW>EnVBz_1=B6C`-AEiprC`?@r#~J :nzG6qT:Q$Q " �/Lӂ|Oi͢MINƅPv7th.DY@Wt1tf;#݅G$wQd�X0vݷ͖7kGva-CF¥cŁL6N$�7 D0X[?C@aм|q:ڻOvvVqZiW 7o.W*Eʸ/Z36~ C#;&ij� g( 0b7y]fbqP>7P  0 ZkTVz`ff~ʕKQd\/(l}";`Q)%KW�!Pj| c2nsqUfR}%v¥e{KոR.VakT_ܓ B!<)'ffd?tI( pa\#G'd 1/k ,.@ѮO|n*&ag*-/J鋟8eã#=<`s/]ס~Mt\!4c)v㑁<6t݂b ޱQHvCp b`_^ 64QO/NJ L ؚz!i%\uR0c80,/NJ~Ɓ_}T7iQ�:?8˻"^ v VYb#{" flN_X`D"]R5jyo/_t lg99Ydcƥ5`l>-44`U<>4~lllP)/V@l^| A. ֳ`ae9R2fu�@4øY ,2/.Jd>OXl04v0Vȧ hD@#l! �A [M*� KpTmЯ`S٬G @[\ ;zӨ"P(tCcv)S_ VilHxɔzIty)Qtí[VDem)"6`c!@*,@J'!=+ CCikXZ\a6eb.#cɱ#ChfP'FTfj%*--fWk9hiǕ�5˥z̢d!eb*6$�Lw)xy`pwxtTU<s$IB# !$MLB溺{Fܕ@QWVyyaiRz^O')b|Qڂ$Xn[p/;UW F1Qйo|c@=G3`4,F˜Lud*QR`2`c Gusݝn7LԳPv'TY fV׍N%�#mziqhw^xGSeiY<ծyB[Bl" #ȀMC&>XpT>|H<Z˫5U+R%ΰƊhu?MՇqbρ/=;ٛzqy7j>v1ҕR%%lV6!" ΣLL ?*t9"\tXYE۔$BpK%jrާ^헺·޻'Wfkͮ%h 0p'w&iH!D�s`p ZptE]&W\^U¹Ku:];xGz zgZ^_RķB�6Ue5ƀ5۠qhHv!-H`ajÛp#/�Exo>; };'=vlΛivZb2v_ْc^l13P>%:Պ^wO-ylcr.ص+y~Uiv3b9AJaGGMf  dXL6qKXf"X끄u{lLn"Q|+ܸ�ceb\|YomV%S?sАjH(at#-� #܍Akb�:OY𝏫ۊS)XW@Ê}M1'1̖JLv@m%H}8:0b�,f oR9Fcqq3BmVW;AD~E[V˰Hwd)L. Zx0 HAP2淐M8!Hj6l'`ʅ:4yzǮܿ{I+m{$7[-G!tQ=mCm8u3U3#b riF uP]og7?1?IL:ڏ0RUVvNNCCclx!|i#pP#T7Nt'Wqjj12&|V>j DbX] dȰ|-<d:if! k#eRDD$k%]!j+8;so|6w'Y Cm^u'<@ii 7njlbbU#$әmt[R��Ö87֎c 0fξ\:Hysȧ/'.L_GWVPj,j$ϾAH`d;2AIT=ǂ?pĉb:xǺ̍Breye|kk#PD:&QSK.NOG~9E/VIV|֭^{iyR?LOShjB1X%qi:yt":}=z2@Oz)lky$Qcg.-_T׿97{@ndYJd<)h8hlB3wbw_?pROۀz%`&1xΥ8 .xrs]\.빎纮Knm /בL@MFWZB:~8xsUbh=^#Iv 3qD.ѩ\d~{&JC|$ ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/draw-ellipse.png�������������������������������������0000644�0001750�0000144�00000004453�15104114162�023202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXYI\W}Wsuuݓ''!( U� E_lE�Y�2mS]7ᰨvۦ=c[Uբs[2//⩿#)GbS\B%LJ5=7 ڇ7:wlnq!|�`Bl-uv́;L<v,)<X $p@ޕ6Oۏ]k]nY�(ei"z|,;* ؛E5[.Vz]rب5+u[p��:7Sa_ްt'F@o;Dg=qK�2ܨpcSs;|cvgcJ��L0v\$LJ[Ԟ39ydqV).[Dךy5l`ZTϵ~{f+.'s:،�L(WTm=W:]ᑏ_|K02◾=½޽eG :ec+|W3 �yc-jعo~+-X!\@ �B~}fԶ(0l` z&a*2:"<+rWm)/X%r=;_=5WC3<Zl5@y,窖<5Wg_#D�#0CٙKgLNWu4,¹PҶأk'Vq .V 3hIvݵl]$aGW͎f6qa ;逹=[;7Sd34Q ͒7sU8Pl o&Xm9g*vA_f8ޙ2ӢGfӅYh([(F62]:ݘG?]jNŦd& oOU_m9sS ]0� gLԚ*?Ig3X7�~kZYY=؀5` /z[V+9<нSWkH^*J- YML7W6 3(EIJ1*geF#w2J"JTP1x/&q @dJHXeٮޝX̀Ֆ0P[5Tp'5flI&H-l;`&C+;bFr97heB v$[OF̴`l(͹ І$XÈj�~~]τa �G�Yģ?ԉg7i]i}BIy<@D[djADH N4?}�ؚ,?: ƒa Xy{u�ؗǣ ^xP#~Z_D/=Sf\mErD$(g==+;�O_Zz?01t5 BKXE5{ );FX;{+2BfP %`.e]g9+ DEHWp?<zAra^R$*/R v_)wכ0t2Xv<߁$ւMѼg2KMfe6S/7ļ֬wXe0eX|q/GDs  B,^;_4yqXv.&"Xc˖{jr ZY6/'=p Dߍ_ICu@ljOECcTf'JT]ps ,EDGT HO!Mrtbu/ ,!P"g5ӯX4<>ևrR-X(qf㊅@pMWjF Q VOZV?Ke `?.",4+a)&SyLX >P+L.KR' o@k<E)p-֎qOT�1`'�I ^"4Uhr]ЖW qȖа9)ե,<gLQJ,M4-ܚ>E$Cc޵ �c+qJV ̬\Y\CE嵥X}OJ[l Tv9G@IV][CT{MB׺7H1HPJiQi}kr}H"w\P%zY12@ء/E:"����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-save.png������������������������������������0000644�0001750�0000144�00000004763�15104114162�023370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� IDATX͙{lǿ3{#~؎wp q61$K*@ZRA Tj@ ADD! Ib;8;q.9nw3vhJi{333G>y!˽p]BPҩ�ń&ۄF;~C k֗! 0'gNmo==/VgKkBRJp!Ja|ݧZ*uT ח7PU s%H!$8H`Ɗe[N-.zoX5O>GGGnӓJxi4dE6\0.1k8h]2%|PPB ww6«Mg^6so>@e++Nxם?X" ɅK:num -�Tݽmo|091}͞qgF6<Jo=22pfKB"o~~5˃ͱ|+" \PuG~SDד�ҾtDc]YD_SfLN*:v෧cOJ@mKվN\&"q[, lmSJXJǟ4pБ�9vϞ=O]"h*M+13rGtsQ~лǽOJ2�=>a[w�nkkfRVNHy῾D]E84T_GۻkO, ?V0e֞'�pҥvUll&$y $�J�� '8*Jqxp !cx I>(\J{u]g&x/ 3WP gLp!!JQih,3R?! }.I),+Qo߾ՎJ D^؏"{+1uYLFҰ2i@ᘊ똌0בC.^ƞ6 " � 9в[{{{EQO݄cXŲǸ1ۈϘϚH, y|>͛4MJBc| 0 (EQ'^W_Z0VDpK)L\Lbb 2Q"| MPR;bXՒ;vhm*9m۰, ibcS)/WcXSY�`\,xHPæ'xVT,p=HJ)LDWWB<$rgWWRT:�18۶a6cccni,D"džVP)Z*p/fD489c�lF}}Fc(`,ZB>`۶7Ϥgs5V%l=uu%Y>Lе~ os*[^1F6mT!ᢀB{z{{ t]8; !c ;`) 5E�M8{Z¸�BtRms0 AJآҝ֭ C0(zB׎H< Pb[j np]:fHUU ƘQ[[=,�b7nF)ܕsDQh6gTQ}~u|`S|imkiPUu`0P(:!ea͚nJ۶aB04M&ɮ<|3Š[Oi|R"!Hx,8XvU΋bd2I\Ƙl!Hdh6ߧi%4- i� ((H&, D"ېd2YF<޻޶l5ǁ8! AQSčXLӄeY޸~^tСC�V^ȝ8Wqx#smfRJhZ߆a@ <B TDMM (slS 3 jDsTuvuk4=s, PڟmK]q1 att㘚B<G"0MxBr/DII ,BYYlFee%,Buu5,Bcc#t]i u`Re1}۲"j&^'TUUyJq8t6Q}  dPJQUU~ʬ4Mo溥j%3RT ;BH$Dh.SI9{DM)~?Ν;M066UUqih !'�ԉA٩D" |{Mס!X5@%��l@QQP$ut9&/GpH!L& È !�� p;VΑ�0���RdK?dw/@2��3ӆ�=ǜv����IENDB`�������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-save-as.png���������������������������������0000644�0001750�0000144�00000004517�15104114162�023766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� IDATX͘{lTUǿ{Ϋ:mm"Z]@ݭtP$bXv}j4qldǬɦLT|uWR)-X`@;v;1cºs~H)}.Bf۰? (@>$ɀA06a_�ԬyEȒHn >]ab|L;;wfm[NwXy׋[J#n_SkyuX@J .$BBS)LӖbdS~}�>ⶺ#?~*XB bҲ9�ea7eڜN\>-*h޽xe|ql!kZKWܠ_Mɂw]>S_D~??Ow坮Kbzg �(iK^ߙ?Tor8\!87lUKr\̫jh).aꑱDɷhAI+^]^'M'v!!y~=yh-Dvj8jym|=1f m]XXXY<bI$ h4R>/h&LvJԾQܼx6 !][3`F-PJ'L`7�pΟٺu drDr JW3c"qI)n}� z<Fw7߼y`sCCN0L}#$g @3z?_84 N7+WI)uwwV<7mڔo&l&˻QT�%�A^(ᄐpGqaᓣqH)3i�AiQ.ZZZ9$]]];oa(8=8g+ôv aQ \H)R dZbKTp |Ư:k!@(O=԰2}vgVfL&!Dv@0AYq>.\600m$Miq!n`0`@NP"\4!# � 8p-J G(XRQǺn'QZpǘa#>jB@|Bt$E<vx<Zf.˲P__/ !:x<iPdV*]8xyY:.^1q~8إ^J >jH1qg2?;~U!gQURJNjjjF7}+ۗڶM\qa6R,BBY^bXTp0.-4д{>9g6ãT $e !6|+rckk+d18۶a6c&ܶ0#8 kAh-ƾϾk jps02W�mUUU2++ks4UfFҟ²1۶3LJ.G^@6XVY0 Z#'ѵ% [J)c455K)8##dF9܁'Z!c`ac[5 C͂0�&3ϡ2[ H \;4M R><# tòe2( (g!kC$\gϡ([ź2X(rtwݘsN*TUc̍F�hYcc:J)89GVV4M4 ( t G,vu4 NZ{|[' Ja՚i]&Im4M~hdby=x+Pl<qrx<4MHJUUB4d<YJ qd#.[f/Ν;eY2ߔL=Ձ?3~wJ).]Jٶ};�pV677W}GXb`";;{^}cx7j*۷o-4 ! (,,0 cADQٳg tmQ1Tò,yFBz)?|0Ox (s] i u]7렔^')|&9U%�^%%%Q٠aq塮n^oٲcPUs %I/c H"ȜUއaر㪆BLD"i9�T�X,e---JII q*M|vU3Sn麎`0C!J�!�5kGg<mf.RJ!H$v}2Ms^:`��.)k8(P@:�?㿿N!'yW.����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-save-as-alt.png�����������������������������0000644�0001750�0000144�00000006030�15104114162�024534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m�� IDATX͘y}?53+!tĒ XrPG)"[Bv9*[ `ld1 ! c`Ɂ W %8]huV;331j0IpW7w|Z~/o% `&Zpg,G>B`Et~p=o߶r sͩKH!irW}lǛ8_@>$FiM\xv:vxk-Z<38iO*-HgP,5{.]aGwh^eL+?o>ş>;uJZ^'Ks֗Ofqʕ YSVL @J#;)%H)8FN43/yнkSE]t+ 侽㬛 LAc}ϘNR1!@ /�8o)MF WM뙶t){׬.gGa [e;%A)[fv6 }2qIQO-)s#/<V/$aNP_4ްY~Iyi-}}A#[HYzɳ:>eUVT*"' yNMkB1v1h'q }'Fhx2>qL$Z>*I3;5(SH)+t۽gHlO($ Ie,ԜْpZ~a=[^dۚOhֆN&כxE^1—W PS:qSXO>b|(ws2Zvm`Yeg6kM3E G ˫7yy $Z(t_q"WCRû'I'1kQ Vto0`={eu?w(qwlJ (tv_Fkڠu1cp2}ZhmJAyp5}#)waV$ S4w]A1tE;P2Q)dtxdy N&Ms3W8udF/#p"Ҧc6, 7)Zc!O>k.8no5yƗJ 1dYFi_pC̝ڷ-JvZ[VDw�  ~"ˋ6$1G^OQJK+\>t% ]` /9BYm2Fo]C } W<xk-I1[СP(U !I4ʩl4h{=oH_ȨWxcq̜+@:DwiI\G֓=gXp wr1{+v-8&(C*`?g.<#(@Bamu'?z=_KR˃OG}j#vM㋖R$ ?U} ןJy�@M7N�E'Q,< }g'CŀՏ>ni"s Tb`ĽkN{ru f"3z-=*V;8th!˳p)s(.o&Fp<Muf.Iafλ+|onfd0@^}IK{gBs`NIӗ;=sm/2`$a1B1r|�=xK!EKMOksP E{9q'r`& x`V㼓cE~!K-`;wurqgtaPvYs'7Bγ[1ʢ,0 K|9wRs= 6PT,F!J5v#OV~tY ٭(5ysb XYƗY+m&A5dZk7Ng|ť.:, 8S*"ۓ|hqnt>)Ē" ˲6HT|�L8C0|S==_]R ]{{¶Ƭ1ͭnɲ4MIӆϲl`Hk1tm3t4 &CMs\x럋*6}as߉ADQ{hzN^Vyllel3ƃ*`؉ ]_d?Y�Yrl<Q0뜻3(ɲzRjBɲ!ٌi?˳G:TJz )t)KU:B$ Fz>桧%xr9�0rJ)Rm@4mӮnJ<mtSj9*`L|ڥ}mESC1 q S$۰M[s`DjJtwp4]o_r >gic Z+r"jǑ t{鋏bg3ؼuGbBM|- r]ZZ^Oq+[6[3!JӛnT*q̷a}p/<<60 QJQV'#=xdZjo:Pи_[~\%n[#?\=tSN(e<Jp0h{՛[ZZ Bg,)`JtyBѣh~|m@%I] gyb5W9;#2E~a7ٽۓR:RJyw< ifM4Zc1iZyWwo߾# 'B+ɲ9~ �Y{yrJܹs]]]P(֐R6$RJa&4RJ(kmRZ-.~tky#Q 8!Ud|֚o"R !y{}0 su:c@RJ®]ࠝxӸ+-b%����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-save-alt.png��������������������������������0000644�0001750�0000144�00000003362�15104114162�024140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATX͘MWgkvH1c9ZHda$CP8+3pHH8# !B�;wgvf_Uq]Oͫkqwݫ5R6&՟^ "ps|ҧX]$AD�R6f/p`k;:iǞr�"_W^ߗG{HB)z=Nyep4R TLH^ʟPvT Fzzl/tB%{dYN=�K|5{HZMh#�65%s�͠yj�3"?>#8fdڜEݽGTJ=xॏj,�K);!Xt7Zt:y泻#"Ă5}eW-- $%ٛqPm0 [Z[&"!QuQ37*<@3P5~_ȪcNfxg^xSClk;LnQ+/^ڌe@�j^>Q1 yJRgEc:iS-Y ya` k(l[1͊ i8!-^n ax,y1#?Oᄇ R'BQA-�9qT>DR`ʼπk[1h^iDV{/<X JsiF'%OV+ks?FÅ}iYciyy�LupgoYSպjl8Z{�A غjQTgSOPce|mah`_\ĥ:y#B9ooosH\4Ix#5,fy(I.uY뭱B &#g53zXY]!Fe0 ,�(x4&XQ2"W^)/f(&R*!m)wrHl$MH0ν{w<㚭&Y cE-~�ۊ; 6)coeFPelY=-62*Yy*ԠSU󼞔˗y 4c,130;yk+?,jU[$!9hHpj;@$S3RMn/x\3_1触%ZYN4_͔~ ~U988`0$Iʃw9q${{{5J&>gn1iHF'IBl^>3>2_Gb,|*7+ {{{ujXkJ\VH[w/LVa;^kgNGiH-a<ϧ 7YepvPUz�'i~?q9{R{W<xPP_3Uk&*$$(`JZ<AM;icI<;?8~_r3˷o:vN! !5t:K$wcMswSՑE3h<Foggg`favn6fY+�Onm=.--u:N$Iiw".!wws,ƨY~`www <zƍp5> Ҕzϟ… 8qevy-]U,˼ܼy+O{c����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-page-setup.png������������������������������0000644�0001750�0000144�00000004326�15104114162�024477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��cIDATXXYT=UoLLxf`0C؂!+a(&8NM$‰WJEa%FqD#y!8D`Va4ݯZLϖ�_R^ws[UM)u*BmF9JEn۶-7l@.W.!ngJ)5E �w`Eٻ�RBʦcnH)%): poQ�xhۏ"sWST�$;"/=zP{OnLfq!ici*!CQpoMoEQ @>o b&.V[{=\7a10aC a:q�t]ܔ,�òc}DQ(84M8 19 HmEIm64y btM?oUK�bNB)m۠4ofBJ),�!!PUuF n%׷|5O}>Z !" &, Oq ˲y^:F46`5+;;+߅<BB Rr9PJ$ @UihmmM]^gx^ VeqeC9^}q.Y~-�h\@@HKSȜ4 k�ƣk۝ؾq>]u$2@躎Rtd"*I78 <ĩe9\&kǑ{a |$X蕳vN //|/!0Mi0f w˵Q l4]E;qﻰwՑ4+tDUYk1�sqC9XqY+؁C`vQ16cy yi} YZZuJ5 7 9cazT#r uaB!(w1'n,3Ky$$c4A5yN=[w\ )滉U&AQ)Q<�kPz<� 1y8pKmXx+~{IZK4L&uӏ!,BWWPsҚ{Us}Ul ,꺎>::Ioy{W KbCH)AARA6Ml 5Xq+ I X98sTa|-x(u.|O @:xk06mkI غh[2u7�Q9m ㈢Z @Us]X,3et^�.Ub!BX[ځ/*, aM:ظ!~q?Vv�H^x,G Jhu߸o֕v$2MQDEG> 4"0#w:fM3R6^ goj(I\QV!�z _ JchXd~QAҔJBi8)qSƍP&&.z '>ymt'"@j(fڰw#pgxbѯQ;E-Q:jZU.4􊟤 6a:g7APEACU52^˪Pq'B^E*bx~|Wlw kf)5g*JRR 'D@J*Q%,j:MK?9m=l~q^;d["D,8ORVԢiZZƝ !$= > +O᛭/biʦLҖ2l qH"p=CI}X9 4X s`!Q˰a6rE_`5Oe:!шWC6.T\cHaTj ʰX `*yTF]Sƪ%P n{7E>8gYnV}t1`0ubh]w6]& & ?ЇOl ).9i$$0~[.ZjߩA͢xz샺r{brr}sA1f8sGAMƘQ36yۅR*��fW(fNV(����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-open.png������������������������������������0000644�0001750�0000144�00000003563�15104114162�023370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��:IDATXX=o~fK>-J-H +A 'FRHaפH")d'#pEAg\rt$ZȥGr?g䮖IN1",;paDq� R3c +Wd2Bh351BsLJ4cLDrXۯiwܙO5"B#9XJyѣG)uc2qdyBhvd �T*,//kL<~tƍBtXjDTߺu뇌_�8VVV2If;:4 o0M+ܽ{w}͙6iX]]�666=0q׮]�TUWDh0P.ۄm1"b06x~" snQJqXiPJ nnn46K1J%x�brw9T*,\p c~~~ #R(#|uݵ~R4 NBш/_իWQl0z̙3�JϢ a2Ɉ$\xR`ٳ{q/l0 CJ!)?Q!fggKR,\ZZ8iVboaa`aggB{;Ç 0Bcɒ(^61Tx O_|9 fyl6 )%<_-xQX N)J?9TB�VS}}exp~.Vп~Rm3i8Qupb 3!;_Wo#Ϥ.RTJ>ߙ?î2[ 0 Ïzx"NiޅȌ\QwHݕOnc; _bfBƶr[[SfJD{em#�BT'd'QB5Q<q󅈚'@/al(W{TDO*jι8<y$XZZkbUart/k$@ =7CR@×�dR|TyҨV²,X3HD(}blTG͗m}Ŋ d,8~RK?A] ql6;98jĐU:K9$X6𣺆Y,�>xqk_Ma|XuL&lTR5/PG"PZ`x _BKӴB oʎzY BGanFu&1MӜR풏֎-5]u7Sz.fc4 Z 1|a81#UAJ@*BPŏצGhCpוA)JMӰjfp3D˄R!4ƒS#W8*ccRjG)kO<bbBيY%CCW0"՟{$"ömӚ8إo`j*/ u~JE 4앿,|O1<fQ,a5N[hx4D@-JWa`^wg۶0 b*uJ}Fs!%Bj?905}~J$M {n>;2�ckkkܜپNs'7wID˛a,~?�8a"mۿ/Կ7՟?o� Qʉ0`@1Zt ���Dud�z \ TZ sIoZ,(No 贛Hu����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/document-edit.png������������������������������������0000644�0001750�0000144�00000003674�15104114162�023357� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IIDATX{l[W=׾rvPty,xDi@*`�?<0ILi1BӠJۤIӴIc:u}8hչ\wSmb'4 6aj#AoRi W0$C.{HeBAͪ >Е!<`9줤|PZxfa6,[SwThzP00��֪bd}c{;<Ӧ:uQ Ew_@0<;(tA4<! <A݄d~ AgM<R3Oť˗3Č<WavjD#r{u`G]gyHv`0}}rJɈiU, CARLgw#l0TQAxs+\ؿ/bll F 'A4A*,!#7h_ɮ%A0]gD#?z nvܾ}N !n\+Ё@ :N |o#l3asm?Dm1| &F8~?4Bj 1@$Adx~m_`vE6GÉBI[5- â+1x^zLO`||)D;i~ouGQ<^as4k&DAl`X* YT`["EiY9nT,*f*ym8?;!2l/95+� ur8wI zof4|4)"VG5q�))(qZ:e"[oVLW[q"+c8W[ GcqHcQfQ~Co3+m&�%>Z ,%pqn?MOJO"F�ryⷕY q$멗[=[p>{xUĺ.xc7-Aϑ!{xi^;~ 㳔f7M@yܵZݍ'yq9\Mxgq%p`sAsx b@v9.9p0 l!`|5XmuZ�Ȁi>Jxl+I1.X#YM-' <XǍp(DUvps܀hs>NCI%VnUG?iVRy ,ZqN;|ݷ~RlY+|ϽI7^NNV2փg /؇=B^|K`H'`2;Zr*/<LA\<gCWnuɱ$X#"<Ok>&V=2m$hP*O-�!@$;yB \_2ϫc! �niFiL߷9cZ9$K_. ly ,N wrJ{q@@bңC6hX2Pp܄/eTyk2�H 7}նeg1~K8YhZ=|M&&y̏:�@r4�3}PV!p𯄪frOkyY:䧓#�<){Emٻ}z9ѱkL:ƹ~׿  wTs�%n/M_ISks_F`W{ +K#_"ߑZ)sէ-qU.ͼV7>\y{y>& '8u_0#?Taq~ 49����IENDB`��������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/copy-right-to-left.png�������������������������������0000644�0001750�0000144�00000003266�15104114162�024250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��}IDATX͘_l?3{{w9㳓Bpܖ"@ZBBm QHSQUN)-AC#EDEI.J"MZK&4e%avf0T|{+R,і7:;G~J)MxJe|kiiX./^-Oy%Ri/?I}C__oV'&Ζ{LB8o'ViَGܼy̶mBx|~O&IH)BTW38xTS8tHp"| H e@Xkk`}F2>*85OQ$^"6lc.dw7|j82}{vXɋv-š!X>|HRR>rޏu=/sUZ!\c`7K�!rJi8E�?v}MrԼАsM_{?͗ĤRt]?q 5z7a-sP;v'#H&jU/b~,k֬!;8dBvQz(jw=j|ǹ |u2T^hMciz=g3Mq:ZᮻwKR]lڨdlz>s/]bsQ|I {iń.Ķ]j+)lЭGr4ŧK`l, 8(A(vfgar._cIb5s9=]=_ @?�x?3##aziƥg URV՛K$t li"ޫχ6 ˗kjfhjBrUitBC1IAM'R=>Xrܤ�O*"q33beWbV(ϫq$ f�* JDJ,""%<s.;wC{{zaf̨8CktoP&&R ܹ 0 +==|oקgfs.DU5^3VPXҨ(u;Bvu#۷ɷ߆M`41[04 F ɓ'$)q g=žÇY޿:;w{R[M5d"g{ıJCqyW17l@z[QSOAz:R A } 0s&60$=چ~IG.i9_ Gg}Cs&TkaKUR%)d2dيr9,ƿ5nf(B>V 7꾭j DzN&("hw<0:Zyz ^hgajմ-:0pB'I69UJpmm|gZ.W)!Oܦi^ӇR\X1cƼ~ˑ#>_UЭ�z5VX1^[Cyp<P��E X W溺a׍[RJ~[\{;4MɚSCjZLZMfZoҥ/Zv/m|srpK-ss5+FɆ<u\YZ|64H7Di*Gt"oXC����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/copy-left-to-right.png�������������������������������0000644�0001750�0000144�00000003310�15104114162�024236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATX͘mϙ3s/,KĦnذZm6ݖXaQ~j65+4|Ylkӄ,M MkBLDI�1͕PM`][pa_˜90s/4K<9w&3Ϲ2}կ{M08p*\ ?x\ ."Ys7k LNsַͻIbBh_~շ{7wϞwÆ s Voz{szy};$B{;*[|['έ+600^J3T^iCDʿT~ wIs^b3z0NkX{sP,B:Em~ E!,X5X;e2[*VXJXQ8|ڱcGOBe3 =9%whn@$^@6 d!OgN2$}[k0[nzj �21oյډbL (` 2/-?!VukDʞ*>ܸq tTÁaNE(gᣏlCgb(2S FQbbv "äS"1p"rO=7? k*3{0x=%ǹsO+y>{={.jnY?{9I҃w&6A1p:rp {2/a:yʡ[x]e>/g`Zcb?9u ~zad j[Pk`xva^~s'+O(cJD] 2i(P r=;;QҖQOk6 >H닽-:0@6)/+SKKRq8UkZX$70@z!+' X!ϫʵ.]S섶6w/o0ֈX:0=w4s)I+*Ok<dwOhEEaT2NA_Z]N-@tmft2빼y3>Zh}ٴi (JjĴҠp/^n~;tw314ȓOri2`)h˞W/9/8toQnƗJz5sun|\=wyx5Ūy[" Q9+lK@oQuS --/6BPɊeP}%UxN"k^K:Wwa$#\ܼ 1 ZL&Su-*F d5$T3SeEࡇ=Hw7wZ("VM9`k'pP^ Nle3KBWoTj>"q*EI$(*buMmETu` Z ҮэNd<ISE82lnjk\\,_NnG7ȗ7}!Hj]*MZ- <|~?\yrb=mspu_Se/RW7;~3N[cE-XZd'5H`<O3I…{YnXD6/H-O28�XkI�u7_-y~{0oϻEw����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/choose-encoding.png����������������������������������0000644�0001750�0000144�00000001423�15104114162�023650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATX1K#A3`#Hlr띩 d hE �.HRK[lbO`'U[BfQ6$jk6ad7>x ?!(P!899Y$+-�JL]!%T.oZRJmBPKs5 ڏ|>Jy7Ʀ#s�8VfmH'|>!8o c�m,G!Ċ;\ |{ǁ$Ev˲i4MeYC*(r$epzz �T*(+(R0cii 4ws 6 84J>=="'(, dYkL&^(P| Āa5!mmwww߇8CoXbwwBem�ՕŠWIZ�x||ghi]u}@B=C3uX5,wxx&zzt]jX__~uiK$-Au)vvvGU16pgg#>::XXX@:cla0idiův(8kX Ew|v v(.�%Ɍ1:nW㫠�ZV[ѝbe$Me D)-06F]OSJWrpγ�zBlTj4ޚ;o[v'5����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/40x40/actions/application-exit.png���������������������������������0000644�0001750�0000144�00000003457�15104114162�024067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���(���m��IDATXŘoWs~xX؍1%DiSHM$RbE 'TpQqIh+PkQq␤Dv\`&klf{DHG33}ZlYk � ݋;`% |"|+1c͆h!pE*労!Nt:MPJ )%R,.֞^d+'O+[nrRt-̀R"M˴ǩSH G.K?�C)%RJi]9 u׀jP#j}Q&ڣR_PM ũ^b()8NlWH x5p|N`+`\7CM_B`8$ ^Y㗿2[& d|y/~lHhm m+("p˜۷GGw2xXb+u] jZ388ÇYXXڵkXkH3RQ;wӮ/3|�e0FA;1\7v804K1hahhUqqW/_eh|iw3+.RMĉܪS]gƍ9sw^o(ƩRs'xttVkn4kL$IkdrfÙZdZ3??Oci534D�@kPpj)&50###\pR#nsccgYy08> [qXJIWWŋ\~90@p]4Ĺ\#G0334�TB)l)a+;�lh2xttYΟ?4o޻RTo/6fqul4ƴvlԼtjT*4Sgo?㏓)]dFh#]g(LbTIcop}nٹQZ2[O`kL8NcКǝ_{&s'+WكH@JDtʔS.cFͲV>~J}!,}{8#UGFZ335jՍy'3R cLmT? ^x~cO[?1 DM ⰻ۔�s j](ӧ陝 M|ت@XI`C(qJ/}1BPf γV)dXuEH$ZpJ&L&C&!ˑf3xic W} ::+c\~/ڥH/ۖVIVQR7ɐJx^ )v)زuK#G[kQG}fq{JKyR7""!ԺMFa΅<n&B[[B@5"d �Gl熎mkkR)3wcK__/l�5>E׎U|߯2,.f۶m߿Ƙ:XuOdm |@`0s O`- 0m4ֵ\ fv*s o}pBHy_1IO[~@@)%M_QSkPAJ!kS#̆>~y<|!|'܃' 5->NZEXD_<qsѥSI^W\6w7 7<>:l*B[-Unlj~����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016440� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/places/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017707� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/places/folder.png��������������������������������������������0000644�0001750�0000144�00000002137�15104114162�021673� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��&IDATXGVjTQCvSPč RnD7+q)(Ѕ?5mƎC{sNBo^MνJ\鎺_]38ȕfӉT3=DLD't3<M+YP0*%=tؙK?tR?D=; ' "+6詋lI$?| CkP@،H.!hs䍉P_}5~]74WZB͚6rO؉ݿu.L;)uK,Y6{yms76ks;6,`~d{ =+6Bڢdw8 c)7'?<&sj É.'o yr.z`O�^qq*i&I>q#6Qj?T 5dP19Cr: |՜�v9;Z8%%Ɂ4Ϟw5�̷vIÐH!jX}|W!`R7xmR<ycHW򌑴c)\$LdBp[{Sxs>M6އЊ{!�an*<h00iy'O n`E2>͌Cwxz1�@ǪBSySaxMsNZ`IHɱf {۳E<H#Ii7NHpy:f^qk$V07"K, s\/hEI|r1@ŜPufk 5>)} JҖɖrRȅ]]~ =Li79F"q[d%Jxw^Ai �B~1AxzPBgq-͟j>IFwh,kއ&s\5:Fj!o쳍"d7Fdu*d#dRC*}lyebˣa/oTy '%EҞ"qajca'/d3%Q.?̾Zi����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020454� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/x-office-spreadsheet.png���������������������������0000644�0001750�0000144�00000002366�15104114162�025176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGW[OW1cwk !*Uw}?R(j@E%AEU%B;/lgfNe5Q?0˙sCql+++~,//8ONy@|}J%4يr9<k`Nc۰swFFx<o c*X\.#зϞ 4FbfOOc<BLoߋ}}}}G_sk�)�?awo "<"#WTly@0 884!|w< }^F}7yT=B$ↁqbEס#" zDt?Q;o8>>F2B*X4qqq3m"Mi[߹0?7GS05Tėj Oz7Xtwϟ#f0YRGQ)\8. bbS14e{If9Y%Ȓ(tUDP\jEl҈0T Qj@/]pp(/>d|J"k](`fLٌ# JHPt` FTw]sji)3i0 {85}a@ic&̴\d)kTwϑo3Ѕ��:h3u9. QߋF44]PZ4MBCY cg7|]DBl9{f{ JlN0^`M1cL3V畑)ޜw_ˋm Hiţ.h"sT#q[%ޱ<tj/--awwԊ/V_ze g3x ^__Hsžj ǧjJbYT:99*UݾG47)9r=͍Ew<1tdрIzHXV7G1Kz R6 *- }Λ@VCy[[]O]`OmHNhJf݁G&gw1@t >t򙚊7oi_77??�5=bn#^LdRX~gprֽ15yG*jU-X,/ JwSZu{BϙG:ٵ<�+\>L����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/x-office-presentation.png��������������������������0000644�0001750�0000144�00000002172�15104114162�025375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��AIDATXGVML\U13@]A0A3 k 34F3[XateW7m4htNi Sc? yϹͼy3Fq޹s;{.c~~P}T]*B4MI=dBJEgl'Y,/|x\ڤ b@j"^2`HqdMvr ~-'_ ʡS,4$ 7F&O{[wUEAڄmY/vD6mmm4,@s:չJ! 77Rw7:H|>(^&b" V=l J"p=~}}(f2(my>v %B<ךl7!M}"uuN#+*B'|^@kX岯Չ $}i (lmq$9,fQ}ٳUxX qķ@V9`/q&S/@{FtC>V*c <r(>r#xth"~.$~Vno71F<*P] GE2"z~2EOA?E[26dHۋȥKyf߉CTq<=3gR[jGS$) ЦxىvG'^=X,M4FGG>~kN <f j~^kNx�f9~R ׉@ >90-v @Fn ;ᆳ.Qcoo\ViCNN<nyfTҐ(WUqM,brrjBR)޹SWz;p|(B<\m'mW*Y?x`z~Ëk^\tChL>VY!~DD?FA%TƗw@Unِ|`WW*}xeCRSx3M#PVV+mr@󲴌*7 ;i‡*AxK7n4P_j#|?p@ZN����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/x-office-document.png������������������������������0000644�0001750�0000144�00000001653�15104114162�024503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��rIDATXGW[OA>,VciĆ&%KG^/EMl5$^B"V.\Kv˺Շ_931j5lll`}}Aj\ltx<hZ2s`sf�X1d2v(JhC%at:! h,M`P�zvbL5Aȋ ^^^j>FZR-H4?#`\Ѯ ˑ#D" kl~yyl  D ",=1:4`{GGGژ.i_>ќJz]' _}\;'ZY+*X}w-1l� ݮ_ӷg|] ku}׬`[nAf0 ^ɞJ |�^4~l+`td9u*YΛ,{Y(Ay! I1HRT&ˉu͞ȵ63_k*J�U2ZUƍU8EP]h;� ;<<f lhee (�/Y $I8==%TX_XO0rL"*̪J1Vr�&ަ=v`3# vxz q@_F f>`rc>kجPZ=XMfk&GgggD~xc$Uԝ,yg�wڊ*{<g1tQa)~`@PM$?H5P0PO“OLU�7䧐;)%����IENDB`�������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/video-x-generic.png��������������������������������0000644�0001750�0000144�00000002705�15104114162�024153� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGV}LUes/Ct^ia6,%p)8GkK>pkĶ6+Wk29*C,#/ѕ ܏s==H9{X6*` "w Sv6ŐoCDD;2.Ḩ9b\ɹF!*1V P8X,қ<] :>1w<+Q *_?h(a ׯ{v,uY4ۻT/ݣdžl [e:@DNa5Uww`eJ6}144W`cKapOL+ ,\!?Ưf x<7Hk_G6lx +[!ъ[2r4#زu+mۆT䠮8vzpyCF9c&cj>yTa5ΝkkeK)<ŋ5'N 8@Jy5l �otFkׇmw ??M&FWW7JJ6bb|ZSa\t 7ory L` WFd؎ښchbٓ19) q<WI/u@'aa?(gVM "B^Q-槤\Jq`ѧ6m1*gZ-((@ W *+q\X$K!iXTB[G"GDh0"Dj(u:>$$$/8Z0iOI.'.'Nf ~~v6{=(G2@:%,iډ+<9K/bϞv\v,\0OzӦOG9pɺF<24|q~wa$cJ6Oaq6, %x</nW(<%%/;F~|܎td5U_F FT8~%\qOKLIWR0D4ش۷M'a"%TJ>'JGbb"\tz?x!cכ 0W@d9YGn^vxKXXTT7؁Y%i!C*z{=t _6ĵdhLĉz-YP� ^ޤIb8B N׏|ʉƆ'z{9 j>;JW, ..c^U=.·Fcc\p啔Xmq :߀s\er!AXM#< <kLF<G|k1¼ MJg?'~4~|<!M;KR f<PS18 }'g&[ hG؉ O k����IENDB`�����������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000002265�15104114162�022666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��|IDATXGWKh\UfmSMZ$Z5bH r E7tӅ >6Y겸)"AaF$Q#b mG;w&-d!~w=9?{{\bjj*v`bbo:W9w} GREjsF״Oֵ).:^:@1Vw9r9OF!Rڄׯ$ӀTK]Q65PoSafD,C!9Ur48%qϿG~ U5> �$"<7@('?)b)O?V;?K`<N`t />oۈپ_mQQ&z(wRٲÒ9K)umc,rVG5 a?dx&Uㅚ ZiT%aF'FS%{/JJrؿkPTƱ%huy<v-]aoeU~O$a7@'[(WV24N"/9]R-02y5@rшDd̟)У;P:wpM%RA}pt2I_yN4M^sl]?QyaI*+g1E匒<_* Sp 2tOS{PM8RnXûoBє!ɚܴFvI* CJ!%.[55A"t-9G:˶\uk94ш*^1bJ0+&! Y#٠tN(ݠz|Q܈8da|//V;.zFqRc]>:F'Z%|po}v'ϦU0 ɱjcǺ l-!.kƆ0mcc#9)ٹ̓pL1JMï`m~s/>zi7:LzRfPNSzHت3]P]?l: KIӧ7F33H9k@ b)F6r eWFbL_O^F}8onu/8<;v����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-po.png��������������������������������������0000644�0001750�0000144�00000003220�15104114162�023024� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��WIDATXGVklUfgvgwgm<cECFS~"!!&@41) !00 +ZJvٝ;SeJЄo>;|s\!=v`FIis.Ī\*yy1?۩y^zZ1kU�1,(ي\�*^q:pYY,*ُ^ 'gրHT_ GIeF`2&Ws4ϟ`g|">GL_^4HbfokW7ng\,28cK<p ]r0!pbCK~*dj` C- HtAвz9Ѡ$!5A,!yݛF4>-}: 9|1І9@�GFu<@2VF<YGD!"dRָ /K0 .O=& P\E,@Պ n`26>ED|DL:D楦IҶp$SKKtexk1CXMNWi\$SFreMF?0 B&$NH`H/,LKdz*/5ՓEIFv3E4ÞwX "bp\G@bag*ˡg‘@&AeȲ04lY[k)ToWM8~ jQ(jT JFOcV h5UDd"v&8B/ }C,ш,W &Y H QȤ!kPz^o/?s,q<ߴCa/0ձ+ɒ.9 B n=}j. :OC{t5h&Ep;V%N1 KEB[8tȐn =zy|zKX<gcJBԍmu.>;; /'8v&=DYA+-}: hBnop=|ȕHhLCs2ut ug{O'TԆض4>=*VuM]J;BP+{EoA"ә#(  ?17PeTKG$A8Ѝȑ3!r,.?[T$o6hGQ$Z1 +/B͎𮷑豤<D Hͽ-ࣔ+2<nz> z} ?Vm?bQt*fe4 cQɓS~)#{(_,!QK9@rP,4b(0ƱaFtw_ԪήY/KaR燢PU]KL^gR&bQRtuh+xr'0fdbb~ɤj=eP(1sp`<an<lZֵ.d'w6N֕3V(vHR 4C`w>�%m2LmN51$"qKH5?f.Nh'jW� z!;Aj����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-pascal.png����������������������������������0000644�0001750�0000144�00000002604�15104114162�023656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��KIDATXGVklUl PC�u[`lӴh(j+$*??IBb4Oc0G &&Uc(,Ixι&afϜ{Ͻs3{fr 9\-J!Qpi&frx=+L#BȺb``;%{t]#7Cw̅ zljOМhlFjXM]fY#h(ݺeE4-*DYVNt؄P"$u7D?ƋS.c)n%SdbFkkkqeQ`;`/#cM2gf]dMdЈg䠩߂tZ 6B I;N]."nq _c8 K:2!{pൃj{cèziRn-YgH #eT*o 4a\rR`dz摱DL?94k=#=k5TiJ51D],w\ٸI5 _B8Fރ]t ZyW`*J/;bT!s̬Mao҈s텸o\2sbǺ{65ioHyI;$DH�o;q H՛"H~I\>#jT@sNcb�??:<‡7I{/bQM1+_6ՊzW{S쟠UXN{w"(Sˑ1Gl65 ilïPY|G@c;1ۏO}?]T F`{Ft˝PPP8dJoG!=psڍ+)[3nቐ;aQp*2Ol{ δOcjdƩOܧgqda4{ +`/+}z z tHZ̹h0O9!RL' --NDK&=*)"'ôcvJaW477I k-9Ăe#@B$ ,2]#W,|>xDZ&$oB5DKm5I0yKonݸzmɛT)  :_QlU :euOcz24%2&xT 8rTSp<R~xQeT *uIEy[feCyCeOnt7eX\D[Gm=oșt' ٔF{8FًkEFb|%Ѥ �N 0����IENDB`����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-lua.png�������������������������������������0000644�0001750�0000144�00000002335�15104114162�023175� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGV]lUvKM|F b1 R"DZ_|!IM А&F m@7Rvi"A$.CMݿYsν3l7ssw.AKd.+e[w&F&JZJJh"#㊦xU"nweCs8ݺ�T+@\=4uuR d2eE�!/3] eZDZo!phA4-xP8dZc+Drc.<2\>E×חsOV[5' ,.Z 5f/Nj~8r56a>?Y[h!1}iR$�"rgT߬|CBdxJض}3;x ޹^zV3-&A= 5|ǾG4zXK6 lO[ѝy8�㡋q5o#H#A1>ӶlCh4t#ீZXݛxԩ],|ߟ ɄW;x t{G8p`+| OQ½#GR(Z֫: ި='qnrmmajq62l,͉`!kD$5m1|I%:/JSjul% HQYz p_ضcؽ NG?&TQUE~5(&bI?go4NAQKQ5,A18kQ�\|Bss| 3C@Z'ߊiVG.w)331 chhHȈj ܾq~FE(1LȤ w+ܹk#G0M|\`Y0x@j@�uuqB`Zlp#Q5BIebێgAjR"KH%єMϫQM77QE~FMMOue=<"p/p "+RѴԚf)%&z%ySyvR)+{^6[H=~.RQKևᇶܭGey:�IQB}7WEq'ܲp36QcoV �|ˮ^����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-log.png�������������������������������������0000644�0001750�0000144�00000002046�15104114162�023174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGVOQ-_AO&$$^<h`L7�H`"#M /"&DBD@?v9*r0y3o޼y3ó<⢱=ۀ�n ܡr1'e*KT)*“6FUJ {�(LicrG <6wд<y*̛ CORnxPĠ kffƔKeћq R!$rb,\dW{[ t ָ2gkJ`&U%SR]7IŒ SX.uKAb I`y qTUQ|88l_\OqjO#yڲFZ\"zr@P0jI{Z2U|pxف=ܜҚ#-<X[CwA x>'\2dS֖g(Z=N6zQs.DQRs=>}&3�AItJ<,$=o$?6|h,rZ8h寿4-G5nj@S룍?x`z0bB0!V\$0fzvI\ 2c{/#v^+E.U ܊c.|~pٔ|.d�aZHgX t{`zz_z`l$KVJmfm_(IzVՄ -B|vv&5NT2GGhORn+c(>YޮΨf 5GU716 "⻃|~ol$7?�67}ڧ?>w(H]&~GwT0$N?.ټ2zdQ$=Eu띬qPb"5 /5<t{A?�>_(\(n2Hba�~ w): 9`^kqҿ%<d_(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000001512�15104114162�023333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXG;H+Q$"V*(`a%+"V"ZQRE-|(O ػ3=kLr+?I39s?o;-''eO|2~mh_$0Hk+% Cc6}P]]___Q^^A<<<FGG)ؘXl7F,FFFg())q2(@(X,d@ K`eaaq]]VVVxx,sT ϔNAOOϏގh4ZE8N $XZZBqq1@Z0ֆ9>$;%@u^6ڊyތ:;;,[e!+iu–A>6gE7%!vTԄD[[[X[[mrXЀ~C3R \.S^!*Zۉv=mM횝ˏK066~NRƧ>D__hL)p{{ONN055톣n9119'R 9�wDS733ĜT.8==K@ww7 5r񁪪*ŧ =+keeeXl(ѐet˄J0!hMS Xs(;珎aP^̦(%D"Գfo @B����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-x-generic.png���������������������������������0000644�0001750�0000144�00000002046�15104114162�024027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGVOQ-_AO&$$^<h`L7�H`"#M /"&DBD@?v9*r0y3o޼y3ó<⢱=ۀ�n ܡr1'e*KT)*“6FUJ {�(LicrG <6wд<y*̛ CORnxPĠ kffƔKeћq R!$rb,\dW{[ t ָ2gkJ`&U%SR]7IŒ SX.uKAb I`y qTUQ|88l_\OqjO#yڲFZ\"zr@P0jI{Z2U|pxف=ܜҚ#-<X[CwA x>'\2dS֖g(Z=N6zQs.DQRs=>}&3�AItJ<,$=o$?6|h,rZ8h寿4-G5nj@S룍?x`z0bB0!V\$0fzvI\ 2c{/#v^+E.U ܊c.|~pٔ|.d�aZHgX t{`zz_z`l$KVJmfm_(IzVՄ -B|vv&5NT2GGhORn+c(>YޮΨf 5GU716 "⻃|~ol$7?�67}ڧ?>w(H]&~GwT0$N?.ټ2zdQ$=Eu띬qPb"5 /5<t{A?�>_(\(n2Hba�~ w): 9`^kqҿ%<d_(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/text-html.png��������������������������������������0000644�0001750�0000144�00000003016�15104114162�023110� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGV[lUfvf/no텶J,E|1Řhb/O`AC|!$B4"h)(Trmhݝ}v(`vsΜssPsNּ'ذam:o#pZ= VCUf2E}~[8>qϟM0 P!:xfxDjoJS`:lt|SkX0m޷9z oSQ# Ea6tx爃]gBu"CÐ,I-BXo.A1]z/+ �vn87 u!_*XCo[/=򔀞[\Ħ}*~XF +9W-ۂ_DRҀΦRMa\<FWAϩ4$Q6=Hb,�bx#p$#hk i3)v 3 1ZlǢ4G #�4%Ma.6m?GG<"!*LI"@x[ƚVtư<kij(N]UD-@\ ߟ�r K"�)DCet&$4DDKC]@S4T䌃R߁@BA.|\=4DBv/ p*T[1dЫ.ǺK d.ft *,Pj_3hE`)4mURt Ӫ"iTUFU2EeU,DH-A| Ա�@8Vv7"&h Wؙ v=-J !zI:'F>xYl ֬h!;c0ZpuREf:MCM|՝XU ˖@>Q=ѿ&p6[czO1bB},Gҍx ibbRC*Syt*NQ/[60R_(J.G)B@_ ! Htixv)U R]4Bk4Uq9_`Љ)=l}C/R%,if!pU<tQ >B(8yEoH7!hw/<ׂ(8DUN - "jrsIJ&x+d-:rhFT渞, ÀCw#GfwO)o:BxX{qmk H5\B2J(HYxZ6],ެ !)S `xxz4A`Y~;2К 5]{i:q7b`ml&CmzcmmE[TeG DGj􃚍or7͂u  ΃]Wu,RRx'/4 k'0I,e2m_ĀD, ;bDjE(h?F,S����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000001511�15104114162�024432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXG=o@>ۗ+HD@G%/:R $E$(@BHPѥM@CIJfc{^H$ #=x3x}v1[O ca4jA#Ϛъv= 7.^>l>YɅA4jБ[/#Ϛ3!bkgtr]+RZdtRdR"fNVI*@z?鏜D-`2m@ PLQ M!Y[ke6]4z_:@(a'25֥�GPfڶ_%P$nC݄oLϜPI_6Y/APXpF>:d*JaNs`1][onex;|<k_f;#㡔:q'up_` Z^i$$4p\<'(N25tSKg*.AMV�vhIc(_s  ႒ 8Ъ&S%B>ݫ[�n&|]EfU-!rj&QB&47i w� :-%bZ(x6/9B]a" <ށ0 Ng^sAC|,i;8-FX| &-rPv{6fH�x1b(^�)8ȃ߂D6T[ϰ% Y$@d#3N{l&_l2L����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/image-x-generic.png��������������������������������0000644�0001750�0000144�00000002427�15104114162�024130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGUKoU=؞IӴH !Z .P,`,y T-]  K"6TQ*$Ui6s;3}w<IG (U7T'}~񿇏2'. }O;' d \: \s Zj{Ž$oZdߌ PnEoۭy]箹Gm- u@PR(#I8}CPO 96D硩gPPW_@^aG%d՗gQ_AZ!}NDkS 0$2ȈGB83h+>ڇޑp eDՐXbEjsG~ƻ-;: pr&^<N^7ql O X(Aa EtEcV6  ]; P@%ГPР/X6"$2 !b4hB5WDB܎6 J*\aY*$[F\ CBSC((!p wŀ-|(/Ș[87qwBJ9ׁ?Df񅐞D-5OzP)\J?f1y':L8ļ xF ނR8il_5w5,]Rq.JQZ@DVHhf@3{gkUDq$Wiŷ*Ӏ82PҎ6.vam);ݨY~vh] NV`:P\G˃0Im6L V #xsbn%^Bid -kus 4 膁nNb t+k 2 (+u:8 RQak$1ubQG>!ay5Z~(\vYo;(4VFQmb=Sbݾá:.%[\Yr*lv[Y1vcB=Y[ORPՐ^]V!x_i|5'A`TU?y5olT;x+_Cm\d4,pH`"֍j|z8=68|>OTă͂VXՍv333EXvk۱?p3@:v*rw''fi$VM_HӑȷZFP(t*=6_,,,,4Zk2@6p@es岰l[4ESD~&9G W[ c?fU{q�� C`N����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/audio-x-generic.png��������������������������������0000644�0001750�0000144�00000002273�15104114162�024146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGVMhcU4%iڄi.ƙJiq] 8.\0KGF"3NnuaNEfdBti6i^ԁ./ͻs9vh3 =`g~j"tLlك 9?:rT(X* )s[,6f]X,b5<?׏ǭ#2 $`ŬlxGGwFtAJ@jƸuƱ]vzlԸNYiu�Zvw!Ky# av JV)fw:qxO2OhU5v:~T(QD{}>$ ؜t.Fx~_`22H Qzư +ruD"KxZx*<x#dc=)�3w\RB5a׺l*sshuZRD(e@J@pB kƺ}Z. x^R7IRB R V%Q뛍3*͚觫i\\B1^; @�Z (=Rn^ 7_%GQ`bN?H p)YIRhEGfbh H$"2A) y`:T2..cs"GRz*馛:JN/Q=y|Qy?ب"VuoMKIa4ghJ9[x'* zk Gq b-E./e)!VK|ŢǁlXw 3/v>F:@r$ X]HdkkkbxIn0k[i#U¸4<#b>yyY 9{AwA:BXjǧ~ݗNⳫ_b&8#n?#0~0g4V` ®iZ<px+֖Vk"Q8=z4%l]SSh' ] "\)BE $}_f =~0zz*?bb`� Ʃn&ГKNn(9/g1~i_Nm1����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-x-shellscript.png����������������������0000644�0001750�0000144�00000002166�15104114162�026271� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��=IDATXGV[oE=vꐋo"P�"~-�HC\H\ }Q~@x\׎|nN)ffws|3{`vvp^h5995Vo[֛o&xDP +5I·lc3M MlNVGGDu6PaF-ɋ<fff/no100h4YGGb{bmFCe}}}׮}7E)<uC###8$Rr<&''155Bl6t:m>H`pp}}})!Rv7ɴ||| [Gˑs?6~ wweTLN/pBLZDrB21IO 'u䴡!#;5B|J╛Ͳ,VT lnnbggJE3|= ]O>T{?88P2$6h ϸzܺyK\P£#g]Q�g.]v\ɟ/H}m !9̤=\n Wk0@z] _?=n|6Oڻ_f}&VWW}%<x J%J%mgdn#ٮ\y߻K^ZA$Q!bKxتY6dg7r7$($5Ci9CJIRxF*fN;;;tK+nQ.T潽"t#wCN|)˾L={z/@.%AewZE(^8p˘@c0>=D.Hhkٖ%82-nVMr˖7}g9jE/DZ7e[^D D{Ev( .灵EDJbjѢTZGPxTr"ڳ0*hY4|H2_Yy)r"([I -qܭ"DFQiCOXp"PS>^<c�_-VWD����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-x-rpm.png������������������������������0000644�0001750�0000144�00000002311�15104114162�024523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGWkhU5ݨIPMj|ڊ)U1QZObm!R ZA[(jUcX[_HV$ldsd6l?3q{]o")OC"Z$Sc¶Wވ,Xt=TSIEu uh4ZXJyYF^yd"l`62g39akWn?mE&Xe0 3oZ(؈آgzmI}I-Y TD쁗ȅixSx\K ]ߥh_si>,PHT/}"pF }]Qit4l'}JB*!Lh$\-Mqg/=7ߐH$HhIq*X"[HbɩmtUDgu-SmTSFg~M;vp^X^4ި<ǦQ^e616.6n{,kQ9^(Ap]6)@ ( ? +yΜE2"?NP_B  !$H".ȷR"HpyR &rmf/w .~qi| [nǒK0»zMf粘ɢ}utEpz߀ y.3W|IjC2.s�snk[ݏnE8i|wjmdIuv<qI:\ cIM5>:FN%+t a)=6M0oVcڛ$S3xaƧHWi{<nv܂czWtf< e+[HIQz7*ak2CiԖ;-س+[YU^Ԁ˛ޡats_Y:԰J]] WǺq٥)}?v"y-@^ak*\߲wmE g`/^3]SSΟO TrW*]P[<Vm,O@A]8! dnw2PyrX4@t1ق #f/�t+wT_ r tkOn=cגߙgOo!dphy1]@Ow܋f?mK����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000003173�15104114162�026055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��BIDATXsTUǿwNҷ;ktHЀ hʒOS֤4> >X5%fE :AQB;[ol`!I{nbgVꜪ{|WuvtwjL%^ꋿ}$kg~^ CڇmǺN<:Ic缾X8FϸOvtwjC>;-(UD[vtwӅW^{E*+7iYzf§ǒض@[G8zi閧ů�A C04߁]0[,< q7utŸ^K--Mvp^+ic 9oGCSےx@[G1p!iϞfD@,DK8dd[J-P<|!TC`|Ufw㘻s[wBH(tRb>~#;>6'g {q%Q9(PaNDvs nv}~h?} L=QpFc&EgGܜ3p{;&IAETp~Awm b4++)pTana<PV!::v4590]/dw]x.U R b eJ16S* d0DXH$肵*C3F)x-uQ%6$8{Ws*pƲu@ VSosIQ[m,a~Թ]Nߞիz}w`yyontb>T};@DXLʵ�ƦJݚd dT7kH3طۅ\}}ShO`] &xZGfbQbM Nܽ'®TC(ʃsBm7bmU$rՖC1P]iNDCa;a*VO^g[u$-2? PUPlq:B gm,f?]Noo*`FVk9?zp7dY�C*$k()P_WՕiC1 Pf)mr:V_R`DÝS*(@9dQ@nG%"#ܪ08@Ot&P;2<t8jH*2aV Xp * WyxC�Dӳwdh趟żSPvRjuG"siQ{zӪ9n ߖ@N"hwbɊ*rwXa.)*f"Ғ" ^Oozumtߗ3$@P@Oll<~% M EWR,ch8w{..KW9Fic:[k'bnki:MYٞK|/?~gkn<xN@2DAbf:+U*&rةamƧ'r=7B@QBNB d�Dd'E+hΛ_0@@-øf1/ s,n5~cHiCRY$h ekq]!nnOÍ1(n׏+?Fx~2M|"����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-x-deb.png������������������������������0000644�0001750�0000144�00000002252�15104114162�024463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��qIDATXG]hU|lkl7IVV*h4X6 }(V,/ JD"Zi_ !4 jBP&Zc@u=;3w&F}ss3nݦ+s^cZeW]tC`6n}@vzrWWՌ\l ][X `zjk]oܤ(Mfz @Kx%b?՜2l,w/&Ձ +B<G1U` +|ѾM[0L}4PU`.B@�ׯ}yhc�ϵ|แHTYB#P]ñVx8P8r<Efծiqb)eɨM{EZmaOSG-ޙAGwg4+u-a3Wd9`}/ |N/1d\�[ pQI{)=ŌpABJ_^NIU�@22d(:p�q+% 4 QK%0�ܣAh?QR<nLB%zY  zq'Ŀ+m<41(-mDL2!@f 4R9W k`k6_GáҞmPL_/h:)'\j́òr>: Ƨ0[I0N?ern#:H35`n\(= ')9u~5}`:g�v8.I� ?}}..ٻs <qxo3D(`ۖ` OB W~k� PY5="#'w?fp]wp$t-pWe 08|gm=8kyXhah׏ <JEXwM—ž,{AH3S@IOO{B.AT�Ld: TbRl` 4 &(3�4A"4 J8+wP*#9nU~w\L6;/Oɉ-3 Xߔnm3�5BW����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-x-cd-image.png�������������������������0000644�0001750�0000144�00000002640�15104114162�025400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��gIDATXGVkoW=ډCↄ&$ZVHE~D~�R iTmUZ@(<x$ݍТw3sgf{/ׯ_Ok׮'BCQ#f>jF[;j_ {ٽlo6HC ]Wj742cUF.G3岷X}(nGX ?YkXs Q#IzDʋ&9(J4z֞nb'HF# O9[(u4Όvb�K3F1b!V{ww ϨxfpHCMخrS,?Bc򪐀X ۘl (;@l;$L 0>=<y]#x@OC�R;P2/kE"#^mA7H!I^T͆$#zlJ-8bpcE'xLj# .A+>Bpq=  h!x"J&^A&ǹSU<}&zX lwT\q`|QO <+)N^_^>ù1,ʀeL10̆/RH ;m @,p]o8{i_園:V kyjZM/zX H+%U'lXAzjȺ{m\"D < b~k=, e,D X[$#COI#FG'$Hc)B&#@VB({GtAk1ڜ> RH.K^g+΂혘8ScT@⇅_08"vHA&_q\a)$04ZNϖ80y*id?xp>~Z|fsgY>8DQ̔!&U|$(]Zr+c�N .6~#Qx/ 8wf?1ٵDW^%P͍nF <#F=- }Z(kO07w'WS,l@3RJ?fkR:>~7g꘻{1d޼ukJdP gGj}~-Kk*],^.3z/R- .)$ C'c,4e<U'`.^jA}pl'| ݖJ MŕYĩQyBK%`*^\Q"1ZhZ&QudoVق%d_q-Yf **~s9*mR+jX}2�^@Ptށ{ܨ0_3d>+)?Q4����IENDB`������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/mimetypes/application-pdf.png��������������������������������0000644�0001750�0000144�00000002540�15104114162�024235� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��'IDATXGWIhTY=5T4FQPE (*B ݸt"QAuAPAvut#Ƙ]&UT*5>ůJ.>y{-0"ZZZ #زe]#rΞ ϼyjaCCCap8z78VmAO$1q"ԯ]͛{ __I?q)bAQ@n& 8~h* ܽ ǃ|.d2p: k<l U[%DE3bfBQ|^0Lpm $ Y#*J^f܉uRtPE2%7͐VwQ=NħÇlFoS$h oUZj%D.\_sO+Wоu+@&S|>nu"Hp,D&n܈_._F{$?F-]x^ur'I !"WaW`ҥMMClߎ\{r@X" VHwqt:G˜xgB9!^ıcp JdN}ZYD X9tBw`R#f ׯX[D@XȸdCQsG Oك/+V`E_aW`qӼaX1+:<GеlΜ4̙1f9#$a'IS۵ SI$t= 忙Ö� S.0>~k `;ww#tBhhf>]ӼwtאwmqĮ^EpnLz5”0+BSq |^;fLJkÇbM`A;_a%۴`"Lطn{"4zL7mbx Ɉz"k c(#Q\NཆY8EZ:Z$ $q*Q !@2 6xJx #~d~}dd:;eq5j F4Qchi(@s3<L4k)Sy 1.˾~葵L7}@cl؀۷*O+>8,H_BԊoH{9sط~UjQ h׏Cy[q1 }^#Ri 9}KYID'5ak�ԩ%- xQ<>*r8\Ot _弑SK9&@5eWU0.E@Ȕ S*S0 ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020064� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/emblems/emblem-unreadable.png��������������������������������0000644�0001750�0000144�00000004475�15104114162�024145� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX{]<ZZTm0",Et3a.:ofdS5d$!.L![a+R`m)==\ d$I|ߟxD?0"f$a@?c~~}u<Jxn.dSNy+'%i\q;/rkȯH\&' ݮn$ݘokcQȵE~Thxt͚`uיrQ$tt=3X5Zј?N3?Ce; ]eH4s 6rRIIlZ8p3XJVлމ]|(_3ąӓ%}Ԧ?<4$td?u,S]֭z=ϗ4y;/F,{7xHa?_!. k˄Y,eݎۖv~ۓv[jmQhxf|s ֱ)@+n' `5Wb,J$K;⎬בNGki*^Y:1To4C/I!M<Rߩr j b7l]Xv;~[hi-89;E A{~x&q3#�;V\"3aJnM&W^m#{5sނ4^i[ZS~ͷnl.S<1aynNitؘ!;ܶ )ոUZ2U.HFFM^X=q','9KsJ;?h?2 0eV_^o4UPPa!1H˔(-)fu/8+K ,m&3z=}F}Kmz%~ב=(Z]՗ta21?2:J%V^Q Ůӯb++5A*/ 6~s&N}n7_5wssgi&F/o߳s<!=#|Fe(:Ae2MR[6Ao-4lصGRF[.k&7c}ʾ/ṗMMQ.mL'$uV(UB'*JRi;A4lڵGZBWoO9̌ł4pBf1g|#DP`("7< 8tч|$yܜۿ.1!54Nqha $$r*Cf <o6 EFaɲgZʧfd4噌AH$d"`&d1ILsWj}̇?{M3DZPvC)~O')VԦoY!F"~00"S͢=w3iy>G=bbvrME]4ԕu:K[_?"k)2CA~k?gls/?п}T0*Q& &lW[iՅ1V +C_Dq|R"W΃ϿWsFM<0vOJ5Ap, }•X$qO y�_~k4gy:L@dtīfg-~i+Ko|ҫ_cpTe82f5_{FkO)D5h^ɶvi:ު#U-?aR&rQx~Pt/Xޣ7Ys̾ƗH^`.n.uбd5 [**LFBX=C5&ǵ_5UY)W 7gg``YV.&]OIL%i5%)3[wL>hT8ASVF)O2K;!g9} ,P$ws7 Уk̥鞢ؓUs]9Сc!�$sp2Ր KI{-zܻYMzA5cCm>K4 ֱE�S4rt 3VGDduڤM&Ab_VY3<O_feyG Csh (C U(r~=+Ro³79f^ p׳.==E&2 ӌN zsxG}g\,DIcrI&60Q ZyEOԥ9�R$2?7S [ Cb����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000001702�15104114162�024605� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D���sBITO��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��PLTE���������������������������ttsuvu!!!9:8<>:=?<BDAOOO  ! !! ""!"#!#$#$$#$%$&&%&&&&'%&'&''&'('))()*(*+*+,*--,----.,..-./-00/01/1202313424535555637857868869:79:8:;8;<9<=:=><=?;=?<>?<?@>@A>@B?AB?BDACDADEBDFBFGEGHEHIFJJJJLHKKHKLILMJMMMMOKNOLOPNPQMPRNQSORTPTUQTVRUUUWYUYZYY[WZ\W[]X^`[`b]O���tRNS� )PQXY NX��jIDATxڥJAwvbbDb k_ uNL)Q {K DK{].q,30/7,5Hu(?�dI(` 1 8?w{+93>u}z8? :!"cGXU$rư "bi F /{ȱ0o'EID 9/WSHZLWȈ*ζ5㸖Y H:1xѦI!:fj]BtL>ۚ Bº@i|L:zFh~H5�а=\&�S@Z4 uDiJFMkbeHC4sէ5qÖԲh̹3����IENDB`��������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020625� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/submenuwithmissing.png����������������������������0000644�0001750�0000144�00000010214�15104114162�025275� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME"9{��+IDATX  ��������������������������������������������������������������������������������������������������������������������������������͔A�K�������������������������3lQ������������������������������������������������������������������������������ �K/h��������������������������їaL��� ���������������������������������������������������������������������������������׆���������������������^��Α9�����������������������������������������������3lP�������������������������������������������3k����������������������������������������������������ї_K��� ��������������������������������������������������������������������������������������������������%s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Α:���3lP��������������������������������������������4m���������������������������������������������јdK��� ������������������������������������/ �ً���������������������������������������� ��I�����������������������������������������0!������������������������������������������ "�������������������5i�������������������������������������������������������������������� ���������������� ,�������������������������������������������������������������������������������������1C����� �2��������������������������������������������������������������ʑ�ܩ�%�'(���͍�4�8r?� �������������������������������� %(������������������������ә� �;kr�""���������ؤ�[�BQ�5�������������������������� ������������������ƃ� �-YU�������$GG��o��������������!M�!M�� �����������������ա��2,� �SV�����QQ��&&� �ʑ������������������������������נ�� � �  �!^o����dj�*)�!�� �������� )P��� *Q�ɵ����������������������6f�.n��%*�׶�ލp����������� 1������D�� 4�b]������ ����lj� �Dl{� �տ�Ӑa�) ��� ���� � ,Q�N6�����������\�����ݿ,˺!��� ������� ��������+;C������*-�$-��������� �Ģ�������������݆���hD������CR��� �/{�07�ǫ�ǩ�3J�9M������ "-��������� '��ݿ-rd����������� �G�VY�,5�Ū�d� ��"P�%Vu�tV������<+D�������������� ��@~w��������������+����R���簇������䪓�����������~,P!7;H����������@Ԣ����������������$���sܕ����� ���̧����������������� 2 ���������� � �3�����������������������|���!�l� �������������q������������� I��-pk����Ӑ4!#�I�������������������������� �� e��>:��c ��8��������������������������� ΛF|{߻����������Z!EfKV������������������������������ �� �������������������������������������!��� ���������������� ������������������������������������������������������������������������������������������������� ������������������������� ����������������������������������������������������������������������������������������������������������������������������������������������e6O ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/submenufavtabs.png��������������������������������0000644�0001750�0000144�00000002111�15104114162�024353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME /'��IDATXGKLUs@)HS& "66).0067.$Ai.\PQnHmj4[ R#46۔Ly|BX[f'ͽw=:묳eX}C׌)+ Dl*K&o譧"yU\z'wRYa:P+I><ص~+"%[#GgQ)]$ %4<_> 7 p ~Wgf9QN%+up� <_@J$$%eA?,T��BJ&IHqH *E�,qBM%5 j"9j2@ ,IeӾ `.1裩Ir>Ϥxz,opy8u)~<}h|xO&ò׼EX?DZ1�vz/j*@m 4G MUx%YyJ_zC�&xӻL' j*�%@U[7k^b<t1|7{ m8 + x�cUwF}}d5ˆ_ #DށlTyK9-]??)^[}QUrS_ rϪ1Bݚ[.t{BRl f(ESɄD~i.ߤPיֱSfqT6"gPHOE;`eH+0 ! KY47A4v8 \B�"5 ƭ#}/Ѓ[m,<SNX0% <YRFK޹Be� 6H_21:9^9sxxjT N rU}QPuT4K e@1vGuװ/Y"?@)vՌ1�y{4H����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/submenu.png���������������������������������������0000644�0001750�0000144�00000002771�15104114162�023020� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxW[lU7{.b/hEI BLHD@|1F10h|ME_| &&DL0@ !h+(WKvwn2snip?;s4M<ȴ ߾tDn͢˘vΝ4�L8_{ږ5 0U\6l|>yWt~? wAO%qu1Xi4+`8c:{Za*Ns91 T{~?Y{gk1#-  2@g'�+"!j%YdbZJVL<ϐu�J}0'O8L5yY�wၻB@3 @?)* ZɊ2Oŀ/ 9p ȤRxPAcP9H߽/E qfTbH |$hZт1s>8Ԋfn .pjb*kZ敭ܔI2M\P_ŏ 8CГq`61$�dRbN/@(K:'dRiP5DAԶSDG E9ͭ&)޵F@x~.BXja{A1ff2Yyz5_GZ1)hlldNI*\ՋOoCY MrdF"geWƇt AaP DiY&0Q ӢWPP bSC7eODkmGVETRiN${j}Mfeu@0q>e@䶙RYH_YVJd{|sE�ǵa GfYLEknΡߤ;1v8"CޮF}#NzzZCUsh_/z7R:%W9mBMe wtWM4D}hysG™aDB(o߉kR~ jRJ <o@&)$:c]'[E/v|[ef2yiߴHב@%<5Vo0!Dc\6t0p@iw �5dKlj}2m<7n|/?#~+P\ W\^ �k"x誓S}eOo9_f5&g/k39Hax0"dc�@0}=vCf&B'ІEeova0ul+wG4TKfVyёbBlhi'|H G0r߿xיWk1gQ44."> \Ͽ|SZCl1<"y`:!!z}l~VI@p?Yt8L{w8U?.r{.> O�ݡ(����IENDB`�������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/newadditionfavtabs.png����������������������������0000644�0001750�0000144�00000001434�15104114162�025211� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXˏE?~켖5^!e9/xO0F<DDr`Dq,+Yq`G%0#$N=GRCF&9Ħ`5K/z#9&<)."EE # P9D{zEԌXj7Ќ]hT_m ¥= ^om:w ,,,T)9g/32s]5(9TG* ,w ԛS<{ǒ4M38C`Wx].Uۀ @C8>Xnɲllkt J2LDWK-lum,I0 --J(^B÷r k;%*_'l(� "#8?KQ^a"irduKZ\�w^l*�`I�)BE1=.+;/~~ @^gu)hmiy0QUn?S�<O7!Svp6oQBH`SHK0v7\?\U.wO*@?x̽ډيwX=Ngjڝzӷ{]> Y6~eѸno@QaSx1m  O3O(׭ &1  B[l}(7;����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/newaddition.png�����������������������������������0000644�0001750�0000144�00000002567�15104114162�023652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��.IDATXˎI̬{Ut1!Y$xB<Hx W0;@vݲ2+#宾Tn#4HPODfzϢNAHDZAM Z̨30�*Q=L<5a&$ظ$`t (>9&>yp],CDBJG}xA!&7T8#pDuVjU~`]I@4@ w0&Dom�ho"S',ymbnKe@D0DƘ޻wg~cݾngv($yZo:',�Tz^GaY�zܤөqsc6[\p]ltc@BC7yJ sln_s$/KҬ3E;+mD]ԴHuH> 8::Z9pQ<v nkLQdH(@y9 L  _i}`^E7qM?g:{f BLPD&Ӷ/KFӭ>_ч?o|8鍺|[_۽Dg:jf(>aMA#vWG!sΧiJ"4jy0p`ۭisfcPqvx2L&,{pցl<3 MՄsE(ߦV2TiT&$ф1EM{}]|E[0Ш&d3w%�UIIdJyD, `uol20(64|� wtjT+3"PL&]w+(jƖZZräbRlaM�3όhY&3^�TueY& A�Nk"XJ5*e!8JU%mthh´/Q=&/^na%ʥp9Ӭdg�T!"Ye/ Qe^eYqMV/>(.(!]3Ge<+*Gk�"2- $/k= pp{{"4D y8(\BNsf6"+ΟVzhr�$TO�8f%!wz /VPɂ3rc(. */)1F�(8O^AaTύyj@ @vyp H^3rNJ/Hji����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/dirhotlist/dirmissing.png������������������������������������0000644�0001750�0000144�00000004475�15104114162�023515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX{]<ZZTm0",Et3a.:ofdS5d$!.L![a+R`m)==\ d$I|ߟxD?0"f$a@?c~~}u<Jxn.dSNy+'%i\q;/rkȯH\&' ݮn$ݘokcQȵE~Thxt͚`uיrQ$tt=3X5Zј?N3?Ce; ]eH4s 6rRIIlZ8p3XJVлމ]|(_3ąӓ%}Ԧ?<4$td?u,S]֭z=ϗ4y;/F,{7xHa?_!. k˄Y,eݎۖv~ۓv[jmQhxf|s ֱ)@+n' `5Wb,J$K;⎬בNGki*^Y:1To4C/I!M<Rߩr j b7l]Xv;~[hi-89;E A{~x&q3#�;V\"3aJnM&W^m#{5sނ4^i[ZS~ͷnl.S<1aynNitؘ!;ܶ )ոUZ2U.HFFM^X=q','9KsJ;?h?2 0eV_^o4UPPa!1H˔(-)fu/8+K ,m&3z=}F}Kmz%~ב=(Z]՗ta21?2:J%V^Q Ůӯb++5A*/ 6~s&N}n7_5wssgi&F/o߳s<!=#|Fe(:Ae2MR[6Ao-4lصGRF[.k&7c}ʾ/ṗMMQ.mL'$uV(UB'*JRi;A4lڵGZBWoO9̌ł4pBf1g|#DP`("7< 8tч|$yܜۿ.1!54Nqha $$r*Cf <o6 EFaɲgZʧfd4噌AH$d"`&d1ILsWj}̇?{M3DZPvC)~O')VԦoY!F"~00"S͢=w3iy>G=bbvrME]4ԕu:K[_?"k)2CA~k?gls/?п}T0*Q& &lW[iՅ1V +C_Dq|R"W΃ϿWsFM<0vOJ5Ap, }•X$qO y�_~k4gy:L@dtīfg-~i+Ko|ҫ_cpTe82f5_{FkO)D5h^ɶvi:ު#U-?aR&rQx~Pt/Xޣ7Ys̾ƗH^`.n.uбd5 [**LFBX=C5&ǵ_5UY)W 7gg``YV.&]OIL%i5%)3[wL>hT8ASVF)O2K;!g9} ,P$ws7 Уk̥鞢ؓUs]9Сc!�$sp2Ր KI{-zܻYMzA5cCm>K4 ֱE�S4rt 3VGDduڤM&Ab_VY3<O_feyG Csh (C U(r~=+Ro³79f^ p׳.==E&2 ӌN zsxG}g\,DIcrI&60Q ZyEOԥ9�R$2?7S [ Cb����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020062� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000003325�15104114162�023374� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX[Lg.k\ 6d FtEZ)ЗjCVڇjH]U}jPiDJza%"LVnl15YJ~ҧst3_ȳ`mEQHW @4xڵ杝wۿxV[;vzU|ABȝދE`#EQ۷o,>\O?oih AAP-zpB0uvv6P($,@Mf__v>w70 ]AQ,ܹh{UU?{nzx9\6 [0?A[P0LАI񱮮.oaqqQ~Μ9c�%0j5M,E 0 <gbpp1Ͽ~٩큨/ `Ǐ7EK[w@v̲,x`Yl62H"x('O\X^^x<cRD"It:)P,a2@MTA>q4 MMMBOO%J]> ,�ߨ*x�aLMM�AKK P.A!MhooGXDPe'NիWA� ø~-L&fBNq=gnCQ@ڸ+!ɠX,brr0 <Z N3 Fzzz(QT*0N'8a`Y , !`6 Eac#r'OC P 9rra`ee�@fV`6 yx�D":t:M. r�H$:v{ml w YA.+MMM0�bMzSSSkl\. 5$ 333XXx|>Q1?d2?|{/ `ѩT*ikۻQT:DQD<GGG1>>x| KKK܄r_Z۝pP=�f;wށrڭ$vE_ Ah!DQaeY'7o>б{=)�T\֒Yt>}�*$DQqD"@R�<ff"/ʲzjxӟP UWňD"fs<?})pl6 сG!fyQ]כA@[[pVדF.Wa�S�`Dчn7Z333K>P((}t:)YVp,K C TUDb ][[}>"P(vVjTl�Ry^Q߿= Z2qT;LoJ7Wx,p$I21 QHIRyQJ+ù9U�siXRY\tyEQQ�a ԛPs~5Ƅ 4O]U|~m*+�ƾ`_> {uk2(%ru����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000004360�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX[]Uߺ9si)R tZ bcIlbL*>Jh"G|$@x3шyAAp�%P`hg tzv9tF4b|s|;ko} ߋ|y_%"w7o֗e&IRc.)Zy_yV"0}ve5>>JH*j޻w ZCv<Ϗ�=XvPJ}}fbb,); (1Xc6all 쬏1>e}�~/NNNNڵK.KKKrh!*1hmJƚFR4K"c;]yVG#<rz;qǎrI&2bP (�5M`jjJ,p̙{ly$Iݻoڼy3'NE *b z!@dhD B 7nѨ>/<9;;WZz;w�c1@8GPaH,uNmeݺu?Ro@7cuwQJdp"G~IYht]bD#8TefHzh=w޴( bh6! .\ĥ%^O١n@X*i;1gO:2R�<9 zZk )KR |h(P@ݣ;|ڭ.NUU11~⣏>:6_ڹs!Bk Zb^DD\2kkc|QBڽ.-S%8!05M̊SSS91H b^JCEYʲqShfF&'?/^<O$I56-p Tb֛/kbDZP$I p1PQg̽3fCAwKG<ґvQ(+(!U(r]^&F;@<) $6cVy~<{?s]_] nBP lRUUs9&IhK,XFG26lqc^;f}d}iF*z*pct1paleZD k|vUU_ PUZ>ZZTS@e!VXkUCRQbt$zOJ<>E)\6>|{ƘCι]$i~zyK NviRXպ;6vc$I4FS_b[o~(,:zg[˻ΑeJ1 .%Day[ˣGp1=ZGd:65XZ}(l4lA?| DT@7PxZ<Z�Gۧ2#XEY "Y-+<?:Gy6Y0XI"|I"<y"�VM</i$֠JeZ c EY`BT*J<D8xN.6My64< &QH@[r@Zuǩ !`B!GpPR^/oEs!yj>391!!DEA!@ $xDcC"Ph."b@4{?z\).]o=֛Q"h-X-RQւ҈6(eր`RJPFdP'#>y><Nzk-MEZ-۸!Hl(l7F (| ֌q;>?}ί@h,,, .V}n|1c*B#q >DB5g^}եaW&H`%gϺÇa oz74ru^#`h1Xa3O??p@ 5 [={l߿&;mVozcU.NVsӧO3N_<G_~y?0Z@`bIH7mW1#U1ڮN?~/_?aO(\ʸ 6T+}l8UQq����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000001572�15104114162�023163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��1IDATX?lE.qq.X@C?%qhP (hREAI!4n@BD4(ȊB6Etybwf}w{xٙy7;7}v&ڭ;xd_\7VV>FQe~" ;Me~?`Pw]LW^囟R#UTr"pO7iȇ?*b(Е*YɏC@tmll+@61[H<nFFHҐHe-A8n`P<' "dv"&C]` MeE{`6t _{{/ٳ#IP?дy .|a12]Č?$ mg,DZ% C(" þek-qchH3:1j5(⫯awg z}0 1jq'NK`Y`R/V*0dwg�[kXki۹~D)=1(ɍ1 WG@Pmh`4\#(j�-6ݖHp/ RGon3;U΃ #^scufϬ}=4@ 8] Axq|1K4xGd-$'� 3Of=&n_x]j`%_ft1>GI֥Ǿ<�@EKj3?ȰsϏ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000002453�15104114162�022746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��IDATXŖMlUޙ{,+B&\I"!ĕ &~.Xո(Qd΅.$1UAh"{3s{\׾jf23gsU"iQ#o"ٴ J@4U_w*#JFo^~k-\k%M2) 17nܠ1bقje :C<D88>~O^?6ŞsbYz߮WL݂'WOk 4xm}ۆAڂ:"\w3xB<m&;gc|Eݻvп2�>xBi?.B� /}8'y<< جAܣR?£{8f=ŦԀZJ,H#-..lFx 6MҔJ-(,n�+"m/}j/Be4y6"8t q,͒Y c!K$IB;R8Ađ!e)` tJ`mF.qyJҚڌ@wPC1h6% Ű= 'Mqyu%\Qf䭋3_R,1F9(QwmI֒&)3|06#M3@(n%"c(TF0:hiYRw0Dۜ$C [D1b- 1P@R<p.aL\Ø7P ~Qh2D1h ld mҏ��r.P)gtEfyZ$pNsF] H^-ӜS*ıCiuAἡZ.RR$PRu ]*E%l !j…VFZH:؈kAT Af*@m%b6l|H 8hm@AٛcÅx˨!gk8v%1|{kK�p5jk^vw9znR/8kЍb\Q(t::pmVڪjȢxHsiyN^JX\gz14H-`?+�b~S+�ã{V"6d %Ӎg'p 8%"( M�4m[k{0+"Au4G"%l"6kH����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/drive-virtual.png������������������������������������0000644�0001750�0000144�00000003041�15104114162�023363� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��IDATxŗKH]W}(jb0!cEDk;bP 2:̼B3hIL:&[NbD@ߏD~Em؃xkY9s^׿aYT*L{Qlll^tttz|||jrrrroyW~BzmSٳҬDž_8p:~Lفo=nt)vvvvd^ *** 0!# @[fff/--=@{{+11[n1pS]rEI*aØqlS؛7o_zYSSӢ///ý:Rɷ^|ggGhbqnFHzfY[;۔D_xppDXի*&&0/+� 8%5bI<ˀ8NJD�DkfC�I�= �@{}}] {y‚b!#u�ǜN,A"PGpP^WIzǏ:! Z#ge5$$$(iJ`Љ"�{xxxsJ:cvT xfiXgmm aw8;�DN!MeRR$-\=NpysZҾa!�'hD:ҔXL櫪FlppP^`Jю)AqnllDtuu؉ yvSJS)BwH_'LOOyb҈�f%<�,'4Gv\VVx4 BL{=eKsss:ڔkoU.Zv $]PF 6`\=9QŠvK3 xF@?�b%Z) 1@fff4�Q(ׂpXa*;;[Q)&ںm�HD?l ˃Z:hJn<w;;�PF k.7٬4@#Z#rRR,))!~tљ?y)_a'ݍ7Tee%)a :JqPWl\H)/Ka [ZZXt�Gx, 24`a8v*Q�O=c>M4 $ q*yNIljbUm]li\f|a’h-ˮT`c_m;Q~˩|A?sfIJո򻨱�_EAZ\eX҆3d?Od['P''|DZVUΗ}�v-7͠io߾?'[PPVe`4l*QG<OѤ8;k {o6nӎ4զliLb����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000001704�15104114162�024732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��{IDATXK[ǿw iBX4}TbT)Ң\!Aw]W"fvR !-!1(F13vLz3>69sg|t#i-c!M1Cx<N7esssO'&& 2cR7Mf[[[{'�\񸴹(t]^}>(wtt@UU躾(D"1:22!!9_5_]gYx<ӽ�qR)8MMD:0$Izq!M7d(ELP$/--yEy>33?88@\J&h1044tX,>s`300t:S"\H$- 4M5e$|>EQDӴ�rJnUUe4�2ݍmG/y @bؽw!�"}Mb+++< T*!O+ è>H&�BGQE�@�5}>!~co׋P( Btm@9==F5߬Es+I �|j[�H$ꤳ{{zi,NNNr�xW~[5~W UUz+�R{.1e$KuQ(0�$� �C8*h4 B)�nPJR===#խ~ׁ@�hnnF63� Jo64tPx :੶6+�N�p(� bϾ+{q����IENDB`������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/drive-removable-media-usb.png������������������������0000755�0001750�0000144�00000003024�15104114162�025521� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D���sBITO��� pHYs��v��v}Ղ���tEXtSoftware�www.inkscape.org<��PLTE��������������������������������������� ������������LLLWWWlllzzzmmm```ccc999TTT[[[<<<;;;++}}бɹ˳鹝ǯͰ醙èũi~ƪȫor{ˬ}ͮnzˮаԷpqs˱̲ΧӲz˧ճsy~׵ȗָ~ɗŏծ~ʙƎ˘Ϡ†Ō4Ѻ���AtRNS�  "$(,4EI[cwzz d��IDATxڅOKUQ>{e bFd%eM h%c}AE)N$ç{ww}:SZso6'ǂsQ@ @8 a�!\N\iq f)zJr8^�íOjͣ:n6}nkBřJF@:co 'qE~I9kys;8@y~Pk>XL\}?#< (P"^ BY#<"y}+fg!;j?0x9ǛߩĵFTԾ$@w~ T]+5ݱׁ 8J 8ƌ7I ` 0]p[uafXS ZۈJW/tV6H/</:T3 DxQ=&9FxOD\*J S8fs'`p +l:b4SsEB@&O.d jrWS @N�hcK{ FD#wW!9TA\x{�IuHRCCL;YN0e=VNf'I䀤@ʊN(X|"jUNlũ@vQ41<$(d����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000002472�15104114162�023337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXMkW;3Fm81J1Bdg1I: 6n ?q@ EC8El#![3sdl5]B_t99GwY"877w$0FX,~}޽/'Oׯ_hR `q\)8ѥ�?P(tqrSSSJ%,BcXY R'&&ѨSpT';m$IFGG_|x7� jGz|>pm_x<>dVA~,b||H$2`vh4͙f)ehOviLNNloo�rI*ʁyPz'N  pҥGFF&mkKD J144tP(i/^V8ήZrVhp)MJ.EMӴϳ,j)~ձm\.a ѣs)!f{H)㌏z>؂+gϞ:"NհmӧO t:M^*n[VVűcPJ{H$ѣGmN/-۶�V+8{ۂvT*nܸC_u&''w<BB)^SÇ>iJ)z{{㻪qMP�866H)}(۶FA&appZCHӻi8B,"Hw0@.ٳgH)9|0ia`Y4LbY_FA" Rׯ^b #1FIܹsai0 v:RbH\FJix˲hZeVVVCut]�$5ԟ<d2� "\p0,Hgl6B`rwL&b~?8O^PR黥ou]O{$I޼yC>gttԷ7wkMӐRcVWWy J]׉D"!Rmll|;G~v^ v=f6pff\6SӃiAU)EVX,/nիW ; TI �ؑORԔiК*Wէkkkݿ׍-7T:@(d4 ;+HwW%�-TBx-2\}w�xq濡�Q-˲ ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000002203�15104114162�023465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��:IDATXoG j T(mA H""BDI*(z˭rg=s?@/p+\!$cٻJ+3;G4{{PXR:51R*M?0ѣGZwR�onݺ866qÇ;88xNw):N B x+дJ988&7&ovmmmVJIE�;XrBvT*1ZΕQIiJ0 lAkc RJ\׵mq$ ApU1?7<s̕FACR ZkJєd}ZJe{kk볩vvvDV<hƘ!Ɂ!EKӔBD2.Ƙ1p�qRZyl<8a =g7.] (q,hyB"iy.\ɓ'c?]vnkd$|w6~H)ڪ:ujl q=yQu&^.R>�q@ZmXv0*8A1'OĉkrK))T** ~*}WJqEWk}B\^^& C:]EQDݦ롔�QVj5J�^vM6y͡beeuKWx%Zk{2nAEcyΫoA֚ӧO>'PLdڍ<O{kGe){h0ٳ�ˤ] P-Ys<}ϟsxxё}8YvM٤l6y ssst:m;e RN4'}Vԩ űC8ȴ4m~˞1ERK$VrB;~2sB1xbܹscuRF5$I牢VE,,,vjU (�aqߩ0ѯLW\>> P rtC#?&>�` |>����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/devices/camera-photo.png�������������������������������������0000644�0001750�0000144�00000002760�15104114162�023154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD�����IDATXo\ޖ$^*2eYSh`41PHbE C %CA]@Z1ֲ+"%J$͐{.} E"Zp79O0�^{R?3 30>:ʉg mٍǍV9C~1kހRlsh4PSi$!jQ-Zc1lY �"[LwxZ/yqdd�q00_!9iwp=~ �X�v0j;aMEkxyڵ%0T$Z"+hzd&3myjSʶdxnn^ܙ3$I|Ӄ$Izz"T*U,#>:.m۸C~�``tBczj"?„B;HF{c4Lzv;�]__D,W^<8\~S‰=sd󬮮1rdЄC/ uסv@ꍇ*BW_~.ORKGË9<yӃmpzmZC2`k{)> @6pzʣ279:1Aa۷)41}|W>F"dlllnBxm 8wcq�8u,/qK ryvT2I*5"Ǧ[BO+ V] c1vK%gx7׿SVd&pY^/+K \mx^Ox(j[BkRH)D<sY~p.9WY]5*_r oZaYZ+x{ HPh޳FLu�ŝ"}BǸ Ƨ]zz h҇Ӕʻضn&p@hݐ_5E,--ql8<X𙸆`^R+!H2G'Y[]^4$n㠤$ӃV$D�L&ͶL"bp0E*"1>:߲fsؑJJv!D\.#a\?FzhoSc8vW1(KKK~ GC!ZF$ 7>d&C2睷/PEkCCI� l>_=H)ο$STsgd2Aoi0aP~N6\.!hu{sSc4F`7A"(lmQV !z ǯfqis{^zq(ǀZ+>+.� \ 4?= p����IENDB`����������������doublecmd-1.1.30/pixmaps/dctheme/32x32/apps/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017403� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/apps/utilities-terminal.png����������������������������������0000644�0001750�0000144�00000002720�15104114162�023736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX]E?3sv/KقH*mIȊZ5jW`b|a !"?^@ ?\kBD(Bn-l*w3gf_s=wƔ_=s3y3sOvF&JFDO^B}iqם |ͺ߼uڑU$|"^CQklKя^epxhX{,IF.Zv|s??ܘxK.9:o@tBkcL/3\a=AXhnHT$ZLLI@ /mO"BWz?v.|=Fk @n!R(?F�5l4yXh q"1whm/Zq.ID:H Lq1"Y(욃>`9Kz&� $f`+ ̤WU+q$bL@ i`)`XvR=f/8h4kU:Kԗ�N1͛0hdfXBLiԫTiz>U1g-sxv0d |[oa6[/235E>ѐ6+1}ɥ9RE(j ZZ\} @DPIĘsāMח8,3CV_B00OsEG1`9WL6i!M= K81^_m;3k5 ;װyQJt,JkDDxDDeer~,} ^U�k-N�1 O _z!c7lcbE#14t%ʻ}lp+HĹ 1`M y&܋{S1]W~%,@X6۴'~]1_+ثP|lY�g-^X0Z#6WvHcAkݓֲHҮ Eh!HjWmW[sՆN?`=AJv DRPZ{~ wB_ĝy=_gNr4#ۯd &FYi=|0~ULM.5^K9$IZkyUɴ6]�ļ44$IrO<ss'rVڰ\^U}'L..eqqY8R@xG2O`߉簡^ qe0pωD&auwo]3<;Ͽ RB H !Z  ~{992}9uh궃߫_###k?'444G8tpjpU'PccMI_j K o\����IENDB`������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020100� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/zoom-out.png�����������������������������������������0000644�0001750�0000144�00000001115�15104114162�022375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D���PLTE���������������������!!! VVVUUUJJJkkkuuullltttvvvuuu[[[\\\~~~wwwxxxyyy{{{|||~~~nnnrrr[a���+tRNS� &''DESTVzz{{{|Z���IDAT8˭]0&WXL,.%c|1fpJIxnϓӾ=ѳ vǠRta>vZ$S Ɉ`v5eP,j3+)NR{,dn[; ;:;#XiA:́�GX(ŃqBdԿ %^ߡ�! *z 5=(gx mz$r" GrR\UpHzAng|_RIv����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/zoom-in.png������������������������������������������0000644�0001750�0000144�00000001265�15104114162�022202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D�� PLTE���������������������!!! VVVUUUJJJkkkuuullltttvvvuuu[[[\\\~~~wwwxxxyyy{{{|||~~~nnnrrrW[���+tRNS� &''DESTVzz{{{|Z��.IDAT8˥KK@FϝIlj+AEkQp# U( CSӒͳPU{@Hvtd<O@Xf} 9\\!48 } j9bW  P&Xz @ =Q7n� {ؕ0ep`.v)B@˃d r5�jɦj `|a9_9h0Ay:ʃ7.N`{b4yzwDy|j�mADhzYYQx"T/^idP����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000000775�15104114162�024657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������C��� pHYs�� �� ����tIME .��}IDATX/O@Ɵn A� 3jg`gBzffЯ@&fCz/r-w׎>k7VdrPϜM�>�!�p�,7ί7Ϸc�]�" : 1y9^&#�c%P �R"x_�l=WT@dL�θs }s. HOA $~�!%u? D4fN4TNt I`F9  ) H$`!X>0[xw;o<ΎY8Xr{yiZ�E&�Y  XlǍm_s1Vt'0O����IENDB`���doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000001003�15104114162�024470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����bKGD������C��� pHYs�� �� ����tIME:��IDATX햱K@SuqYŵKAtV&vХk,]\]NEPsRXLz!9@fOכ=gHE)y<jqɼ}y j;;;kfp!y/"B"w!'1xuC YDiIoߜ* = `-aJ*j8Mֆ\sUʹ�B)ʯDiĹ@NE@@'p:`~{`RUDbˁlv]GP@_je)ixFg|6= "Ntb>"}V3"25,5L xauH"7\Hh����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-restore.png�������������������������������������0000644�0001750�0000144�00000002035�15104114162�023241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATxlgF7Nڶֶm۶mngku{f;."=τ<GⰊCVJ>g4*sF>ݲxQZ.|w׃ E;/LnMB9g@9kPp<rfEմm+eck3r8ⱝk[zS|YBdayzߊr2i$m E߿Owyâ/_ 0c5oɤhޘRId$hvXz1g<%�aä�3('&8"1�!> zD�<QM@>}@,: e<"q�<G L}8''<A[ObJD:pnĦgtzAcvto=p3h�..hvN.8Z4{#u˧ \kC*?Y5V9wgwsVW3rCwy2qRI$D2B;H%0x~i|K셏"x:σ =!Ljw^ x/0'̀q'&DiKnTs@<#8q^HGܳ8ȥm\Pgh4s}DGVP{^Mt8 SullހÏ 7w,^Ѿl +`\:?WhZ�26<g \P,ea\hN_ͩ>4]*.<f `P]"ٔٷ\)ZmѧW]2av 2@:y8عYXN8,W[K^- ]pkKM3@hn ϻׇX~ޭv?w sTkT\]Ô3U^zV@%qBڢ; [q˥ϟ@K o-�Oww����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-refresh.png�������������������������������������0000644�0001750�0000144�00000003750�15104114162�023221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXŗilT޷q ij,\5(%%QBZ〚㦊RRPFE,iIҪ qC M�c xggz7͹;w= 66O7.(;U8[9sX n#u13mǷ[SZ[[Č�5~0-ݰ<T>XtM#%Lp@`ʽ|s }?EAӢ߷xSt ~]U..eD$IK)s~3@ }Cn#e!�XƇE]70-m]=kad^@ q$ %A )$|t}p&_[7U8y^�e].jx:0+KrKdaX!P lWr$HlI0m3<B(Srʁx2xb2Z87<! �P/++z[r0ጁQ·H 檥C%ܧ2MF2c!I!+رeU ktSSw 8ܴ,eO�zϱ[C5݀||Mr\ mp%O5]̉hŲw`L Ty%WWV.~ڇh8( GP".>=6Yͬx)w|e"y`D<cCJB!DWPˁ:^X˽8-&Pg JXI4BX꾺/Uu7/$4�\� H&a9|A@?p&;LOfj{�XQ( �"1nL (6\G�5y8 ̨cV7~?\*?i  .Upfw;"Fلt5 M[}]XuA��UpN& {EޙI[M LջIp-%Bu@f>8S'<&"F: &�x\H"خBMb߉)ronmܸ(ۋo2'q>BI˝ vq3kwRgp͖:/177 @M 0f4Iv p*/>, N]YQUmk[c�O2idm�xmtF.i�_pjH$w0XBL }f7{G 9w> kʷ uGkª8eME"9.^%8c_GO, %F,F%Y"/uvj}#_ TGѴPw枹Ա /S֤w?ڌ""/Ep UhP{'dt!qvKA hX~ɚ.q nIoK[6<Wc1 B0Da1,& K1hpI* iX1jc^� �n&֑S:zb?_tbLۈ-r$L[B[5B�1d2Y gDϮ/0jOs�m?r?=tRwslo#|ous!0{!@2w$yv+>`{Cۉg:9@{@ݘ&n?s퍽ͅ{QZȒEJ)eii �cp$`6҆d2&cmf}_y5n̓@r{Q�8{s)*[ee5zQٗB 9*׈}8t\?Y 篆L*j~w;8�l"1XN~aAX`l#BL ?َ.S!F�=HA^UK /�x!Nѻ$k >_=ˆm2sv����IENDB`������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-fullscreen.png����������������������������������0000644�0001750�0000144�00000001546�15104114162�023726� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��-IDATxb6 `@-9ѯ3=mmwm{ڶ~JVd99F[. %y4[B6$ɘ]YHvG_~ GMXv>N~߆Ӑ;FlK2;>(c;,xtܧ-%)fs\;zw׾]7+J.6cƘ4J.#ï/W0)Ub# (؈i$YcVq-f7{ rgH\6?ٔG,bp"E2h|qZzC_cט)`q +BT\_aef]aL PELTĪ@{|^F7CJfv^0Sr3*#sDnp2[aBwitI55?ozqCzCQmq Te%otos AFكAD[RL<u$,e @uc|c;Ԏە&WiCkMT'}IKpK`Ԏ4%)k2Q~܂;- nw1yV, X)c-%%XQz0e1L3ESnkf㤏ψ=tW&XX>&/`'#qH2i` Ł];Y%D:ɦa׆KXt{*& T9;GGoc\wy$k.Bx$S�߱Fi0'6?'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/view-file.png����������������������������������������0000644�0001750�0000144�00000003144�15104114162�022477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXmh[^]ٖ7َ_j`[RҒMIf4Qؗ 01ePɖt]^x mΛ_f/8NHeɺ{!)v¾큇s<?s(8{웚 !*EAQ,²,Y]oLz{{K3MӶ,˶,u=lR05z3dӧO 9 !!0M2t]G99#`6`0ض,(5^cf J(*|]Bۋ*Q в PlafрO0BP<)P "ܺu]vp_ O�ё!ߓ%sYZZDJSYYEMu-p8غuض⑒ äR\5\._>AiJß1<4}/ܲf|Vnfx3~V:B21H}{9j'o[KU@)PXBޡu|Z'uouu󝷿Dvr)N S,sQL �q;?ā0_}%r|AƁݍwŴž}/'!m{�Ť{vos{ÁhNMrQS?4ĶۙGJ%Ⱦ (2/7f "M CZDZ`CT[,3Tϕ\u7e az~ SϰLk E� I Kw-r{0t$@�y&MsbH`ˢġ9q]L PYI34m'#  N#K* ̭UWW*}}]= /?wPeraFZ1 ~sss՗xloD68+$2** ز`G7CLMMH$n\RѦMܸq(羽w~!#3<꣺B0,F兩n"m5%IϹzcc /Auv2@"6>'m \l{&thNgΜYb!Rz1MVVҌ{*vCs:1I,O?�PDQ4Mc|b1,ŋE=j_p(@4Eav6(3wI.'~p8B=LϹ_PQQA0n0??dv>ʵkWL>{Ote5^=A_rUv|8P`]s.8R>EQmx<z\ܿ%]IR,//L&I$$ 8TGbs۳,FZ67 vzzGNS k`)FU¥K;vVw X}Psj W <WV]kEۀgZwl~vF,(%3^TK p.y� hh W�/ F ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/system-search.png������������������������������������0000644�0001750�0000144�00000004247�15104114162�023404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��^IDATX͖l[ǿNL֩ I[!-AMnLӤ`eBbRX Bۘ6uu"M)LMeWmc;Ѧ4ؑ޹Ws)HD"rԂÇ !_>A�ضmB{1C�GumBP<σR 0d066QrRy#5#GB+ۡ*4MimAE(ۍR! !/b?8|pP 2 .'J<s5>vM+죫ܿ>e| Μ9˲ּKeuj5z �g;/&J&oOڥ84�P5]R]mk~s1<<<WTZ#Hy)�vPTwޠ ~ˑˏ<n{fWIlZ,\OKn$~]]]HRD"<זG:eY>ݍYĥJ]u_ZoEY8^9^vҪޣH%HWBT6C~EQ011+l``<lY7oUCh-+I9K/<!<GJتF~)ױLiCCZ[[!WM�ؓ(Ls;w9MMuPPAN84#q^MXNEX'�I`6OF+wzL۶mJudefM1ʔ RYb{Gm|�е@G"RNݲˡՉhQ PQG,ʘL`]H@0TČZ10t:`r�*1hOݴu!as3`ؔYWjtrVMA! .3۶AkeUWr%#/ '@H1Ri�! L(+"1R�@r9�҂1Q8-Ay|jNFSdp`+ "�d2X5t�._| |a_  �P<Hl�Դ)_(ߵaiډ�nvӳX75Ƨρ#S0pL�ǜd�"3J_ٷ-jHHӈb$"A) �GjtȹcVtQ8`' DUȥطW5:<j1HHK{|2|0աPOhbYGh!ӪZrfxT2ӝ|wϖ֖W]ˡ^j9 b1m1 |aÆ5[nT ^DzVT�F={ǦᩝFrp88w~?TUʼn'&_#��8rH#xssN455AQa6,B\iH8}4vލD"jT*}BRy>8%X'O~cOL&-JPUb|tx###f5M[0zf!":;;d`0b/ZD",� ؊~3R~__O?-}GGSpT*I 2N:d2~ٳ'k׮=o>0P(`6<>S\p}]ןo[\oO*to7ND"ѳqF^EB@A}}=z{{qڵulVFXcǎڴiS]t:!mۆٹhq� � URttt@$W^|A---n{rxUe(ku]:�ugϞ޷~J6E( B�,�Bjw/bsNStAg]]dI3~.{<mmmy\o~ab%X7-<kYPo۶ <�:Db]PoB6, oYk_n3+Mz@����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/process-stop.png�������������������������������������0000644�0001750�0000144�00000004050�15104114162�023246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXWkP]W^  @yG4S:'Rg3uB$ 6VMjv;ժ1$$5o Bqs}Tά9o> 7Pkqmz<mf9֕{F\ͣ| KyzŷzX.Y=+9f;K9_ /ה}}w*/(eeVO<~īgt'nht} Osgno ?(WTVJ 3 <0>jTЍ9Q|w^[ jx.R766QY'+|&CS4MO7E2�lav|aMKxquS/TTm+iꔆA,FcTKg ݾ[Q?VOkv469۷@^`K+ƒd#Ƭ ݄f;.gDR`Cfi&HTd0 F 47zHI<Vp?{H P⅝Jݢ @XS+@J$|c|ʿO9ҽY$e ufe{UVDs%^UTp${M-P x\}ƞPP`MXݱ\68 ĉq(^ځ\=ęF% g1;!  "ȼ8ږ6=ƙE4f`6qX\ IqPè))7OB�qp:P j| <a5j_8hbW.Cg?IE+.vkO ``kumr(,&K9yjauaX}jZ>A 8xBMr0N -)@r bF>AW pNda%vs>0x"Oeia4N W D0 pNUlg.>< B',�HZdƱ5qW/cgo%3Մ`S7kLK6MQd`<'zzfZS|~qhj/B<Մv_}.hw~N/;B/F?Uo }!9Ol\Kɤ�IsʲX8{{v6}: w Jn i=T dk UW a1Ysȍq@g'8]b"vu(6`>bYm QlS7c1A;CY[?*I:A�xKH0>Y!T}/>*&P0RR69d Ut,fnxtO{:qBVyUz o8zE30y0 3mǃQ)7Ah.|kB@@hpb(r%/s/s@;r=:~n,~Bh򑘔j� %" bTs޲ D|k/- 2Wp@3HPb2{so"k-vwZoH+,->8S(!湾kn\\B@n�>_hg~\t恵/Rd(1MRܼ0 &̀':ޑꑅ>O4t35OVR nKpe.mD 2(bEÇ0SL)~B#?Nx"c3^H1تјƦ#;/~*4ߥcfqi##5-L6-No_y<cw"o1}47IC 4Xa1S)x jjG?.^)]|2Pl"Ĉ,Ha4����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/object-rotate-right.png������������������������������0000644�0001750�0000144�00000004225�15104114162�024466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��"IDATXilTu0( lUP5hK5JJj$UVU�i6U[T5IQ )!^c/x3~yrdcHӓ99:s-esGAş~UR%Kyiu+;EkjX=5cHsVz2) +O/YU6zq,B@Zs ;s%d}rP6B%x* DmG?,B=vQq6WU==yZp3˧ th~ *AK`�gZ3ȿN4g^}c P^&6̨)Zhiբ"%!Z@ $/GG.yEԡOq2ӈ[=RGJD ip 0W@9hP:ʰe9t&MzDںl䗗/ ˒\bZ%Pt* �� d_$vN&n8:A><d]Y 8 zwu">= IPThnLRd{" }KjWm[Dy)!= B�($0]\:gϥ叫*?͙_ y8[ߓ=}$ܯ'.}kᩡ=\V &'(t 8ӟNub.o=֭+^ ':Nu2;K<3p;q�͚}bV# $X8AWK捷/=vX':[h>v|/G>w'�bU+Baec! 'vdҺ|\ι=j|}Gw*<`p<O �6^Ҟٹڦukym]݊lE O 03B`e=$<(5Ex�"r D0p-ӴN.] ߪ`8[jeu�� J{;jLcmvڜIoL[RMM}< 9c`s8 ԛ9ひ`Tn� sL @ppo@QM.z>8QPۑmlПj6 ~%�N33Nα@a[ P̻ю\XR{G?ؽD;7tBU;A=;T)mp(iTgG#r5[YW%Oy1nY.23#}] B3ؖR2l,8\L,T(Fk| v} �@>lsYe`VLȨ^X8ͳ_@?}^5v͞NE4%3./pwt$KPafl.qg PW{W[s*Ä@si$.Yim?7 $ăAuyQ\[5?:20`f5 װ{,;q`l 㕾{t?H;$-(\ dy#"$˓"-� XY9%}bՐn1DW<zƍd&o0#&<T]B("\ɑR-B2m1 JOM/u$ߛ?^ @�:͆T4S0ypmfsm�d"\TJ-|ݷ/n�t��}WRlTO /3A`خ =$c?rkwC'Q �bgmfŚr;D O��!�B ?eBV)&CALD;v8pcOt/G*P�(s6TE֬(d(TP+(S9plf3Vw.kutu5ZO4"ؘ܌H㕯ǂdRu@ i*HQI#15 ղӉ\NbRT����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/object-rotate-left.png�������������������������������0000644�0001750�0000144�00000004223�15104114162�024301� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<�� IDATXkp%fs **hPoN㌭m2۱Ct:~i8-BժX)E @ }K!}s; 0/ H玻jS?Isui|z}+o\dйtu;Av]˳7$j8.QǪBzg㣷lZXkd\A7SZbW|�hv/]$-Xy[]P)v@!o:oԄ!ցG�"/�umynjcU5J�e�S lӇMI gpv yf&_z@͝Xq]3k65mj-$ @HyPm<:q~83tb)?_u.]ܸ~cg rsN^9@ئ"xRZH˼b ?IҶ]DうH\j@P0@C-zEDTS.=s8' �S=/k6KJ@nm( @H `>a jA � ]P BU󭇺-ї~%g)sEAMR)Svio'cUc NI10E}g&JfPճs�(oҪ{N84hU Lvxxĩ~lpn*aeYn5i` $(\7>Rn{g5N��pxuko ){i2Y8׷_M}8{秬EQ:ZH4d*aƓW3.pڽmwW̻O.n/"Џ}x;.)A+ޤ*rYJHbg�xfܜ0`˳m[ 綞Kg�'`U>vd^ԋ�9H8 P="$ 6{P=,.d<i(6V4\AUs-}..F`^).|Z~{tVڷvm�8<{A] ,|U�!=o 5,\Eu}pgMpqq+/99Y;|/uӕ:>2UTzqpWZaĸ"7kĴ4Nrjpqsi kB 8d±|snQT?wig`DaNk~<{ilAu �.� 2%UX :G LJzc1t?%]~Zfw>Ьq؆�@jŌ'"ͽr7:au:d.kךl[srfc+vpwp{g;~9آ?ѾvP3#l\!_9c/ן8NZWH9!"H^JBtH>1u;}_ Z8Қx~k#5*`AV`Al MAcz:7G\ `Tf@6e#<#M(QEәVQ �E/@)0 .7ٓ)<C(B"S5="nkL^fY]a>A 0up@Pp.P*x\P a.NJ&Gӿvbǜ[N #{暆<G'=]|r.@ qo*500[KK3  f(�ԡ3ԌE<i E-A(dܸ/�R0"p"qđv%ٞ2J�q$}l~WT1Mjjd2%@2BʎL@%#`t0W8685ipg5h(@XY+noDzRR.Q<w:m/3ɑv>zs¡q|.p)5HRpPY"wU:eع|{i�2חMé����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/object-flip-horizontal.png���������������������������0000644�0001750�0000144�00000002376�15104114162�025203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXWMh\U}?Od&Im,$bbcE$D*S5bIʵ֕((mAQj*tIKUT)̼w9.&̛L7<}9ww3I�P<3):f�7[9l91~96 � �s$VΝ5Hk[W}1[�ߞ҇Ig3?1!pl>ҿ;/a*[O37G.ODX�X�|E=!G5?'G. MpW&e ǒukCcE'o H0�zx�.\v1C_Dﶙapm0Yte�qOQSy,?[(y 1}.l@t�1�Q �=7usSwZ3a7/V5nw/_z"6Cَ�`0"+[E{+ `TMm@iU  [>hi aH# M#=t'Ohv e]!q1m�g??&O˯Bk]�H@3mT@QXr0mOvtt:P\Xh)C+B1B! BNf,f4DfppJX*A �4S  }`D֍$xz{`3K�XU`Fr )�`y*~Z^Y,+ f2p)(DtouqiN@6췔Vp\g:F`z 쑡@1*ųRhV!|�$Jby�h`U�+D0j+�$Bfl%1 #=1Dzb>i ~UYm<T_ZAkUgPMb7j *FwqKuQh +UPa w[lMMe "fv0xzƤx� �-RGNŨ<4˝|=c[m'QU5Ô`,J,W.iaH3;z^*:@~ -<W\6(8ƕ56,x}3� 5R#j/Xް)����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-time.png������������������������������������������0000644�0001750�0000144�00000005531�15104114162�022164� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz�� IDATXGuWyl~3^k00ؘpXJ@bmD$D!m@)iP\)6Av>ֻ;x-Z#;;U\;wHggȶmԭ[*n[oll4wx<ҥKr_ߚexhX rVkxוr@dpp\}}}Ν;۷|ӦMre|φcyq/R^,t iݽ{ϵuuo Յ?Z҂ޞq/M߉j+xe+ @e֬Yxڮ].|d"fOT5,Z套^͖%{^cӁLz1=$$$]/r]$"<Œ3bf8Ɉ)x;G9̸\x3IOMMN(](}_q!˚5kL㺮K{{<xP֑O<Vgƕ+W6Q(p8Fll$ .Ԁl#BlܰgpjU" ~82>|^_$8QDD?'_KKK3 .-)~ v8zerrR?�DEGKFF|.>݃9IQkkoU~5666xٻHƔ`7<\s˖-)9}Y^ĺ\hBX2>6&d :JGGj3Gs|pTFd^BBӭ+nw/FF~ M*~ܿ_u:eՊ+|E',wl;w0d Fg6SF'&2e<^ yFjy✮Ϋq.^,Vz-͛9VZ{駞%))bGQQy%gs9$6&FBCC%""B$JQ˯R+Fֺ,etlt^P`h3ZuUdA M7FuUja<�C G|2r\ Ϯnt %#c&ZNm:j|mǎi.TnO3D/--U+QQQ)~K~H2u3FF$)1:b:xm'$d%HTWWOKl/8^^^46wk2 #<4Ty|fpV =Vi!:^nӨBGP< BznܸdffI!͵kIOOW*C9se)B,R@TUġZH_*Vs y0 [l (LVK(VUW$sRRSr<D9wZ**2*˰ ^MM&ý0`0$'fm,gϊgȫ D,k1~:!:@7*Z h`*[.s /6ף,n],95@mCBuD|.āߝ:%p>,0u35^JaAx2QU^ §v~ҥLj]%om.K{L/[&c 'S1),Kt> H(ϤO^i32RZȳDnTVJz<}:xi&4H'I+#ghi¥«azP5ώJ/91:0jA n5"%��z.:CL'=$+z6 lLCd6t/z>tYn0½ЎߖHjZ~Yr ,F|e5dGg C *tOJ(HङE4LպuXdҼd> CCϽӎ"&"ޠ󭭭M]]ۯ664**zMHqjl vCu;"0G"Ac}XORRR Θ---eӭj^^^?<<׋:7 Ţ#Q3*nC=Hơ Cy(L&qϴbQH9_ui +  j$11SiA/\(N9ܔY08CA\07 ~ g!ZPZ=3ښ~(�7קsrrc2ѓ Ђ ,`<b: 15lB�+Q z:>I'ʉ'` ?dJFd姉$?W 21LA i8PDg/ֽvhFe8A ~^CJϖqG*1b\1fhDRqZ@=j49WK NttaQv@J.I^nr+G}UUU>OR44^;h+mh ᯨTkJQ!m�SĐ?kdef1rY>g%%O! 'W\ !: (()}?+NfM@F ޅv䰊p`pRm ׯ_, <p}_ZT16@I}||ӜODp3m "Z+N,Y�8�ޞ^s^4HLġC-<P@B F]#،j.찰p努߇m$׀?'#q#oIpLYpƆ(X &bpI*x q`47�0\wiE8O.~\tDAnoGgwypJCGEd)&&K ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-savepreset.png������������������������������������0000644�0001750�0000144�00000002635�15104114162�023411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��?IDATxڼW]h\E>3snm56**RдEA4Z4 ->؈ HD? EP 4l XmjD1 V{gsmw9;g2�^99&Y�TcW;}8G�O:Bn`_Es[h}6 qYW?߆7Z:p#I`9 tO'(i^nH|a^~ 81OA0 l^&H%.\�<}Y\�8Q=q4A ZN@E74yDIиԅA'̊>+g1\:q`Ѩgsh.0?PY] vI31@xxq)GXQY< ͜GvĶ\GD3C5Ih@Șpƕ_"2Eu:̃"b4uڭYr{Kl,Ra1n878i'�pÕfɝ*; VB�Oσ*|a2/Eܯ-8<njj`p.sLCZ DN_ zWʵ{L6gC )oEN5]6^@ ƿ9ܻ =_T8o=4[/># X:M65qnξ*Ȯf 6j-I("?~ qZiWd$BSI΄Q(8�=*b*pW5CtA;Kpnx;z,5(x/=-yX*(4rp] >pQ@dw53poW:Pòts ><`W*еEәz;JUBbq(5GG-0_u4l! w<PqŌjU1 Pe-J5*@ֈ@%:o&K.͠�fUac3boK s\t3CI Lzzw0_?r#3FPף%�Ed/1>.)^YsW7Z5O=f~ JU Ag=۟Cda UM'3?U\*MK+p09<38IvY0R^n*9(fؾ-*EiGe66sP||P+(<<H^[j7lWl.֒ dd<q֢D=pW4$'uZuLLKAO/цʤ S>P)r.-/ߚߎ}kuFA<X|ny_X`� {����IENDB`���������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-rename.png����������������������������������������0000644�0001750�0000144�00000001444�15104114162�022474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��IDATXOOAƟig ]?8hx01@ƨ-1?cx%| BbѓI9T)TȟVwu[gCYҥVc;y~ Ѝn WHAcGBřz{OD]F<Qs'įa__BhkюT래"ꗜPH:/-xg�`%Obj$BdB. vQ �ǶpE4/7SbM)ۍ tnK/f=>9ƚMFj?sTILGMsMGz}S2g0g>~ lN4l~涔RVr9:VluPvoA 3 {4I0q%h$5sA1j|ف7t- HL U;BKPTBʏ >S#涔~鵺i>xBQF'DP%^~4dӹM9PZS5~׎��2</xHB ꗘH!vƨܺ* lϪ�#/*b=Dm؀hxco`q񼏽Xn8k)]TŹnsc^nt_<1����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-presets.png���������������������������������������0000644�0001750�0000144�00000002327�15104114162�022713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��yIDATxWMh\U>77L&SC s%AI.*X& UPֺP袸)%6ڍK+j]i3-5F.. Ɵ4{ϼ{3ss}LJ ` ߷>~~.DGx|at Etxi5ٗԁొ/ 89nWc`㪟kBә$ �g ~`NT e_ ް6ҥ,tSgtTyJ3UHXO�[^�|EA!Bvf-(ۮ`.=BǭyaslG דHm~,'A8x�X)h>.!g=E]\sʻ !]ǫkvAK#E'pz[a靧aq϶Srd |oágV  hֻ8 hU`q4^\Zi%O8 sKoaZ_}qIރx:CŢR0A 0}rVv sS'$dΪg`!5Iqˆ 0wh m&;�@=@vVk1| ty'>&'cPSy`&8ʸ)˼0'asyj08� `^JѮ/{on3 ڒCC஺Н5]fdfMuA$aR&(2?$[6vijwԸJCQ+;?"mECY!bF^p#(׌V,y`e/Zʠ .ʈ۪s;Z`WX}#HH'+7F�ܨ4)vLhvJ )a6t/$Z%;M`."!-�_4=z{ {x8np@::b֊TA#05mJE`fVM#95牷@63Tj@@!+dZ$PcoݺtiADG_LD'"o@ڮԤ:# FF@:[tuԂY1K#L6qoetP`�Z=����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-plugin.png����������������������������������������0000644�0001750�0000144�00000003317�15104114162�022524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��qIDATxڴWkLW>3; Kda jJDƶIS5WIjl6-II#QBIUYdA`awٹ=w# idgsrn]n$ Hy lGU9Ϋ0b5u I BzoqR77 p@ysl7s �*_D25¬5t@lH76'!5XE80fhs(BoAa:>s(@Z1�Qt<KezI)~_+!ZHDLgr`@UzqE t41U�k; :!$Gh&K"d3j(WlZ9љڝ/AnIdD$�x({\';_ ܝ]0JTBkZ~\{O߿Y\1v+Q!z {ōKM}l H~9;2�0bgb`X�$^K&3n�@ Q]NʺS@4 , 7!?x%bgυe�w@wVx,@(y<+ɖRU1<gj�BݪOz8R~*�ʑCm}nQ7Jޢ''GǼ(&`Ҫ%QGo\C-+D ΪϪY~ivB-Ŕٰ*�Ϳ 1 �4"27ív~Ƽp-� woC3=bK3c+/qn6*0g- "@k']aNQ(^`Ch YDίNVL倞b PeZ)x8j 9 yE� @4İ}UGڽV >] Hg_PɯXK,q&ƭNȝtE`"SQ;NFۀ1EH`{5^xj/"ٙZ7ס#XQ 1c!+Cǵ X%H̛ μB)8vfZ7$ )vUnL+hӡ t%0BH`3t6VXDc@IR?tv(DtTV|S�h}ybp櫦39Ig%diz馀_=DL2\| T_`?<BmXT byٯ$zC ��MH!D3�HL`uoAoO$!~Gx0aڱB KcC˳y2\hCz@ Q&�yfcEÒ UЩc^IBm۹ROof31^e:%_243[e�"{D9<sަVaɺqm]/xu+4:Ӄ@2 1IְZ d‚ɴL04< @n0 G/'b9??�rE`ƺΞ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-pathtools.png�������������������������������������0000644�0001750�0000144�00000010236�15104114162�023241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD����%~��� pHYs�� �� ����tIME43vI��+IDATX  �����������������������������������������������������������������������������������sp����y��������������������������������������������������������������������������������������?A=�������(������������������������������������������������������������������������������'&&>><������-+*�������������������������������������������������������������������������������vxzb>>;��������������� �������������������������������������������������������������������������� ?A>������I����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����suw�������������͔A�K�������������������������3lQ��������������zxDKN='&$�����"""�*))������� ������ �K/h��������������������������їaL��� ������$�3.*�����������s��������������׆���������������������^��Α9���x�YPB���Ф�r$��� �� ������Ǜv��������������������������������������3k��b�VD;�������gkW���� �إs�Iu����������������������������������������������AP�zH;�����& ��A� ������o� �������������������������������������������������� �MQ�U:���������/ �� ������� �������������������������������������������������KO�M:����������.����������������\)"F44l����������������������������~D�M1��������l������������������������������N6����̔A4lP��������������������J�{H+�������m��4l�����������������������������������������������јdK��� ���������������J�pB+�������o��/ �ً���������������������������������������� ��I�������������������x�����_���������������0!������������������������������������������ "�������������������5i�������������������������������������������������������������������� ��kԪ�������������� ,������������������������������������������������������������������������������������������2D���������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������ݥ������������������ '�����������������������������������������������������������������������������������������������"?4������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������� ���������������������!%��������������������������������������������������������������������������������� ����������������������AF���������������������������������������������������������������������� �������������������ИE� ������������������������������������������������������������������������������������3m2��������������B \;[����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-filename.png��������������������������������������0000644�0001750�0000144�00000010236�15104114162�023004� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD����%~��� pHYs�� �� ����tIMEg9��+IDATX  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ǻ�˿���&&/�::F�++5�BB������������������������������������������������������������������������������������������e������������%%-��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!!'����������������������������������������������������������������������������������������������������������������!�� ����������������������������������������������������������������������������������������������oo���������������������OOc������������������SSS��������������������������������������������������������������������$$$����������������������������������� �������������������������������������������������������������������������TTT�XXX��������������������������(((������yy������������������MMM ������UUU����������������������������������������������������������������������������&&&�����������>>>����������� �����������������������������������������������������������������������������������������VVV�UUU�������������������(((���������������������������������������������������������������������������������������������������������������UUU�WWW�����������������������������������������������������������������������������������������������������"""�EEE������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ccc���������������������mmm�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qqq�___��������������������������������������������������������������������������������������������ddd���������BBB�WWW��yyy�������������ppp�������������������������������������������������������������������������������������� �����'''�������������������������������������������������������������������������������������������|||�777�������������\\\�555���������|||���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ieYǵ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-extension.png�������������������������������������0000644�0001750�0000144�00000010236�15104114162�023240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD����%~��� pHYs�� �� ����tIME�-��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������222�LLL�:::�������������������������������������������������������������������������������������������YYY������������111����������������������������������������������������������������������������������������������������������������������� ���������������������������������������������������������������������������������������������������������������+++����������������������������������������������������������������������������������������������������������������%%%���������������������������������������������������������������������������������������������������������������������mmm��������� ���������;;K��������������������������������������������������������������������"�ww���������������������������������ddz��������������������������������������������������������������������������@@N�??P���������������ŷ����������tt�%������������������������77F ������<<M����������������������������������������������������������������������������#�vv���������ɺ�mmM����������ccx������������������������������������������������������������������������������������������AAP�<<M������������������uu�%����������������������������������������������������������������������������������������������ccx�����������������<<M�BBP������������������������������������������������������������������������������������������������������00>�������������������������������������������������������������������������������������������������������������������Ÿ�����������������������������������������������������������������������������������������������������������������o���������������������y�����������������������������������������������������������������������������������������������������dd}���������������������������������������������������������������������������������ɽ����������rr�UUh�DDV��������������������������������������������������������������������������������������������p���������//<�BBP��\\p�������������|�������������������������������������������������������������������������������������dd{� �����$�mm������������������������������������������������������������������������������������������ZZq�))2�������������EEU�$$0������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`ñQKK����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-editor.png����������������������������������������0000644�0001750�0000144�00000002600�15104114162�022506� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"IDATxڬWklUvmj1&&) ?HHhDHU|Al<L@CLID. [v33klgu|y{Ƙzී*[Ru�\@t"'@#;C͎Y[::8ut]+`t$"*ئCWmwW=ET:"nLl9/I ,Hel=0@weC&EiERy5!ϩcXQ5dlT$fJdgH$ z,f5%'%{,X Aq<'2 GgCui޶CHHnE< 2<o]�D_5HLUhJ"hI{nC⍐fWG@W&|#`Xun:<߸I-^{ANrڕʡ ĸMUU**q=0HsHB1v  ;| .탏da9Nm%7VYm0%۾DMM 󰷵˄15FRg{@ En!Á ;w6щId9D"bhK j7}hR!l.f怎^w1QV :E\5u@Nlף$ I;q $CJHiܰ\WJEH;AFj>3 <J(0Hpa3oi%XSJƂf$: 9�izŨ(1z"<(FR% Fntn{e=^sHE $^%dFod68Bsk \LfxXY 2-(u8 <OO~ۃ#}ס҂jVOXP )F[Q=#"(#paj L E2;n{݉]n,O54iSg3$L *^~|3vxՠE74\BTAAX 1JlQU{Nõb@S5=] p.ĝ8I!#Fo.oFZ҄ \?,Qp>EA1 WA^Zw~\<JnWjvUmG畖^dչ偠0`cGr6>k`Ywd*K.sxD�5`_2${9JXn @H ?(և 0�<E+_t����IENDB`��������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-droppresets.png�����������������������������������0000644�0001750�0000144�00000003217�15104114162�023577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:652DDB5759AA11E291BCF25617814C8A" xmpMM:DocumentID="xmp.did:652DDB5859AA11E291BCF25617814C8A"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:652DDB5559AA11E291BCF25617814C8A" stRef:documentID="xmp.did:652DDB5659AA11E291BCF25617814C8A"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> }��IDATxW=l@|㤪+ U)bBbĊ@ S!vbRX*vĄ?Iǎ}wKRx.�YRTC %NNE\p:yIЃ5 ^y7}V7X7hdkH>aj K3=  Xa ֧3w ށ`EuKf�M߅Jb&Kd |ot1#ϻ^x&@|ʁd$!!nich �)_!8ɏ\aŸv68x=? @ 8F�pJC9`uDá4Tt #N4y:@z?7_3&@ y bXG/q,-c 2o?�jባ-H9fU13!&Sã̖X׿=F!JX BMJźHOiEfZ dY9�C-q:bD *)g& "ɲKyg~މtۓY @QcӶPٞFS&MJCW 鯐2LT?U@9x兹 6J.\>/[}+82<BuA&)(jtЍ@JQA^ՒxySF:*�JqTᾺY2cćje3n �W.Ezxx~ 0�DpC.! ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-deletepreset.png����������������������������������0000644�0001750�0000144�00000002744�15104114162�023716� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼWklUjYhK+F HH5G %QÄ1"H ÀD DQ @F(B4J[;z,tx3s=;a�̲m6 Zm%3 J{ZK-n;Lܷ5Ê ts. W?-6�&~2xB?L”H:70%׀L޼[`uǓIL ڱ*ؒKX^P]Xbk�\p4΂$4 `ˮz̮?-!2 I<!G I;pes ?x;gܻ*y`G*c4340T3*,/\}<lˮ:YL'rM2_\X8}Ts&8X ??"DGBV'tn LB.!`G\e@pra2n> T Eevg=l[\WuSX]ǩ:$Tl&iviQ̛P* Wn;!ݦTgwB)+#wU .X+!]T~) ?6 Wx!hU;i\>݀!3p;G#q-`?d<V$.Uc*RqlLXtri7yc G^ gEJQx#(Y6j֭X9ϓV)/\j|^OB͠m"^5ԡb~m&?AJhFإaZpp[� 82MTUꃜgG4amH|]?| q4]LpmwC&Wr D8,_4,[(-p L);;v+kLԜ"pW*v MJk 0H$(y�f m:H;M}r nK[qh94=w@%:�8-uEː2,L蓔hiQX+s i>ēښv<舜o Nlh=qe8lvʴT%\Nk#9cngMDrV9DD9xs8ߺJ}@hhɗ9?ͼRuJƂ'CJW֙>1kOCN$CI=Q_6tڰ(..V'RNوcmɚz/d@m%N-@Ӹm?{IeWo0܍ U$HI] 7�*t/j.Ŝ2G�Ϻ����IENDB`����������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-date.png������������������������������������������0000644�0001750�0000144�00000003024�15104114162�022136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼW[oTU>g.PO@R"D#5$>A1B ĨQ^H|#"nK4^sr.۵szf83 ={sZk}k=B)nB4O..>z8w^wZU0\AYR!rW2ftnt1g< z E<zke)Qy9t蕨m ç7 z 10;;KkR7#x:BB~+Jрtզ5gG! i9)f!aDS0`)Șp7?c0VjK$bH~=$7BO(.lۖZ%?MNh+H裙KFA5! Cjak膝Ev *RB ֞a! ѻ Ŗz͌柚=/}ԁȥy=ޛ%|m2brs|J< !uAXk5|Uoѐ4KsZЊ\ǡ"㯕4M= G1b DĀ�&^ xe^T*=LWC2 `6Ec2sE`}{ _s]Qi;wdWū P MB׬$/Ӑ:Lbؾ};yU{G^Pz0c- ۶m^;p�鶔ޑ .7o޺(. ?|=3΀XJ)hKA0?n}GyÆ 8~aW! F;'϶bp _ؘ&#hK鬉ɤ\ZQ]f=P.Q*sNڵ‘EP3Jec"o b!#=x$~֊ $SI̩J'P3K9ޚA @)D 2O ٭:'&K18Hh|>yp_طu!ܚrC >JR v:N<AɋT''Lʈ@Oo P :daddDZQܙ3:9)ǹ\ !cnMbLݿPmvpl+ KK,bjJ > `Ye-慐##XEPg|B R$hVBvfk׶ZnJ;[ \唥#K$Orбn[jB!cnVL9wwwRx, n!k*/C ~}&;cl#&&G$ӍNtRo,^P[>sBj~UPoMB,5ӰzWgbc9lZ6eJ?h\rin7^Ƹ0�\YL����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-counter.png���������������������������������������0000644�0001750�0000144�00000004073�15104114162�022705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:964EA4D8A73E11E19572DEBF0418E34B" xmpMM:DocumentID="xmp.did:964EA4D9A73E11E19572DEBF0418E34B"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:964EA4D6A73E11E19572DEBF0418E34B" stRef:documentID="xmp.did:964EA4D7A73E11E19572DEBF0418E34B"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>u��IDATxWKo[E>׾~hv4 jP+RR Dv݀@&Gڄ]HCEm;Ra.v-Do_ל;� ̙swfnfIt�ǿi4L4 ]*zK1/,,Qiض'/n4;l:ju@2rdliibW7ĸ|B7QSnkӻ-6_|y`ES"eޫ[k5*hbb rɨd219v[6/r+?_d2IRIFӕJ"|>Gb) UXre Xl ߅Bi6({FRըZk]*r}usvR$)_>_s/ٳRիTPP"-Q^dh*C jLfd@W*%ȡLOs^O ѥi }rgƻ]7Fkkk�*EIeΗ0E3ϟcM~VIg^>C>;x<N..~z�@ H,\.OR;19^aǩ;e &!x<R�P!@&= lQ,mkkK4۸h{{[`SՄ͡Ç[@�SiMQ4 CR!Ꜩ-|&L'd0`B;[c Bdc>9HHqww+'/s~U�U oM*p( Փ46ߺu"؀X,"WE ^ǃX%Š�n ƂJǻgAi__?ݼ5ml<಺G򾲲Bb 9XA PX %bTB:uRAhDN'OLa�J$9V C<M A+{tŀJoGլ]sYP@֡Y*N5Tq 0۸eDBR600(:R�soΎf`{y v(Ou -0kgcHvt_;ǦH}p~4Fاօ7;_'?-Ht_G!�;s ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-config.png����������������������������������������0000644�0001750�0000144�00000004473�15104114162�022477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڬW{PT]vYqQP*ъU#5&aҦ:1$&$?ӦM3Q' NA_a, b_| "bR^~}9X%(-?"s|,[9@1TsxK|1 /bCQ HS f5�qyi٧</|we2/91 D#ꓤ-Ve7tM^'Y=</uLO6)o5}?>/[]>x cƒ7a i-:iON\VR�}�ng6-˱V6wV̟a̩88�ŞB"/^\i!}Z:Qyb<�pϱcٳl,uN26 zN[ܐI)WF~iF2bF"~RDǖ|;Nvڹfd s %<˽;̨=ÌCd 4 ½1 g%[@.Ѿ0 Q{,l0C$C_xǥdTPEu5S?n72OL^FwT"Zh&�,3V?gY_܃,e {ǘbUKV_`ًgc+Id!& _Λ7sq=ΡN%zPaQOiM'I*(^ -FRtU+g~ )ˏ(cFWD[5c9@>Nc_IH$%AJ$SHOԍACUZHF8Uz۫Cy!G/''K6>KK}$AVOG7:@(j][*jh?Q^8k*c$9k~m4?;}іtrma'FI@h*4dU Q*G�ESSоauF򖠃1d"}! DH2 PX7y/`D".AD|=O4_ӼU6?g>?lj#x/rzG tXτnE=Ixbs?B(fXxb^U*JDmx? 9R??bń\mѠc5G\z Mr3JA}rAqLJe{ыpVÍ<5/qѵ䂍#ab cm^e-du!3NhieھnnPԃ~)u�s^!Ē_g+\`V*a{`k>"e7,�k.VD+ Ă#f& ,a{fb)ecc8r2o4 Wm|KaiͅSX3:ch5#Š &H_BF.)R;"z~V ɸ~ń/nx+VO%.j6*FXʬ2RGj 6FaNiPۛ?݈YU?Ej|igDA0ay0+l7_BJT$ E:6vr~EBl) >�AZۀ,B73Wmލ̟"02龔*^2Z|$efzrހ( 9�եA5} c)f}#]-^.>9G`xRC7P5Tnm_ǭOmr7:?3[BJmp] L'�O!8$7zvvޝ(O:)ǹCI1mEiى6嚖-Z HD%aP0K}|2 iuݏ;g_Z˒@o:ԟ#kU>$E{$T ֮̊AqNRf#e5KdT2$5'@I<[Y歚-, &]ڭO{kkQS_WƲbG}4ۀYC!7iB�tqJr\RzJ{1 ,4$F9]/-iΔ)B+ 1؞ZK)):.1T݋^`,O׸ͼ4lj ݭ;܇ g^QUP7z%F*%tetxYz{7tno/ "(x7ڌ@] UTc|s�0@B *2 0�{\����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/mr-clearfield.png������������������������������������0000644�0001750�0000144�00000001110�15104114162�023305� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��IDATX?O@_CtA(gE^?G [+�kI<{#r0�o�^![S#wRE�< fyv&R�0Q>Y[ǧ<Õ@̚H p`^@IVB`l7pi"E"6,֨;0D\"마n2Y&Mf�u 1@6 D=OG؊XCTP6̾n+0PEC[(`'AXpSZ�ۡö:NDcT' u,7wlK AWͺ缮|:NO$`{RGmE=.Hy^`C*9e ka@{-cVx{UVs8c'Jml^NL|z.b`{f<`#�*A|T����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/media-skip-forward.png�������������������������������0000644�0001750�0000144�00000001720�15104114162�024273� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATxb�Q0 F(Xaę!t3-bfG >\R!fׁ^KmΠ;Ma�)α$Y۶ml۞i\۶Ͷ'3ӊֻmS۱u֢Z7z(?*@zx� ^ D#ʸ.|,7`sv_Ϊb;}n|0bu:&<~iGkx^DIULLhhS9`z:^m# ?#ːε!g':AM|RWL zd zvF*bUV:V8N}Iyy#]dEpnx`fdCZ3 6dO-yVru!'4H@4 p[T_cƉ*3᳟mReڇm}ÂwI嫑P4-$�ss-4xaeFiKRyrkmRUp8w:2/@DPe<qȀr^ifҽ&uL]I|R"K@u"H?Nb U?u:~EjMtB"KbfnjcZUc=ƛ|ro|r[7!hqπ9IJJ LR |>W졏U<ίF;i3VhivIFH?4~!}W<Sωl|dz&A4-^T(K*UX4⊦^s֞. O=GOqq=_<_ xeJ}\(!ܟSϡo'!fl~e+l ϯk< 6 ndG�nUs|a$> F(��׿4����IENDB`������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/media-skip-backward.png������������������������������0000644�0001750�0000144�00000001701�15104114162�024404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATxS+[m[Ƕm_Ƕ1V3k7b<gUuU#.w]C6O "p؟۱ۢ E[Aj@ءfNNSz4ԽW$?.Z0JkAf䏿n0?AV?6~R` U7F7w>#wКwYtW[݂j utpRA W =51bw^}7^]4#LG0GJEi=xnTE'ϒ#T̃LI2I[fDP: z&OjT@O)/EB۵C3g Ge<cX~+F9;:㱊:>3H :gB5XkO±_c]hj0>3>9`"rlz(>;/zӖAl<6D _-Pa�~t8KoV`'%_EpWbcDU1|ș�|| ֜y9\_k<9Ցa]+ ft@N#V|\!SƟ7Kl֜bY+Аd?س=oM}h2/ l l5칌2>UK)C+'c2N{^鯱sxg4E{糀W̑`թXv-2㌱Ԯ?ȣt%| o@Oq'OP%[k3-X&O` 6z z,eNq1 M?MG7Б9 Qy qd\{{[0ORt3.rԏQ0 �>ݓҿv����IENDB`���������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/media-playback-start.png�����������������������������0000644�0001750�0000144�00000002455�15104114162�024612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXŗkluƟ]Yq0,B FKt J!K_�cb&LHLPYȂ0dge]7ܺ^he[km?~hR`6M4<=R}XgN~p(|9;Tn"4�众gTf3pM��l\YdJùmgkq_@@Fُ+_ם]_T{Mo�̌~P 5;^\҆K[̎BXGf,C�1aT _ݹ/ڴɉ*kWGmnϱBc f'F>,Gf>ڲo+ۿ.Tה@y@f!bť GX8Y紮]QTqra#`�!D$18v1 \FXfCRNIřЬԑCS@�!D` `02r(HgߤYhU.>u.wΡH 92 BD@ &�@ JRc[,yWK^]?ƥ@@�D<@;(jlّvi҆ӹOJ~yR#�38&?%[FChC]/X ӵ'5/,,xw ǢQwٚUp%Z<Q}jG[@ z Yj03z} xbڷMWe[f2#@qk/}"D83oun$)$AUnS<oRp  fA)it&R(k@(,:I ;$5R:<hiuM=\]LU& HIW jIsd <@`@ hr^3L]{;D@bdHTE"al7E:MnJP 6WِXn+l0UYߧgGadW̒fp4^-GSeH@z<uM#^-$ď@!C9,xjo:MJ> �U󐙚  FsOgOpBP+2(jt:GQv! F-@K{yz@AZ /"5|5UU~ܥEȅl?}h}E����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/media-playback-pause.png�����������������������������0000644�0001750�0000144�00000000677�15104114162�024576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATX1N@ EVTKA4H#h ;lMDUƟbD= f:)ql�}u~Ao结ζr_]^{Q��/@f0�w1flӊ%t)'�@Ilӊ0ˏ[HDfV +P΂\Y̐؏rei9:R!' foE8!<0Z*a*rJ{8-CVe SQ/�'dn3N&Si"QNfR֭tf 9rJVhtd=C@2ԽݒPr ~_HG6"q3o}'�>7�Hr����IENDB`�����������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/list-remove.png��������������������������������������0000644�0001750�0000144�00000000475�15104114162�023062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d���IDATX!NCA}k8 p pE3 HȈRҤo+7$I$g_>~r }绋ugv.^N@)5Ng= �^HKc/Jj{kT퓦{5Sd L07-Mj%/^^g˶o^U�FCj.a&c?pb>RUf/I$I2od����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/list-add.png�����������������������������������������0000644�0001750�0000144�00000001131�15104114162�022303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX햱kAH$D+AX?B[CF+AA\aai#v"B,LD"hlryMv݋Zx ;70cDU۳z?v{:�d֕3vO"ae3No3A d홆9{!K|=Swz"(-g˙Z|w͛ܐOK1ђ<'!${V3K8̈́ N΁u}'l('Aq)m/Ǒp0VLq &o3 s R7</|tn!$>~1j>,$jt mPcT&tlV%~~3# jiw] (0[@ 4w$H^wIH|4N rZc'2Se_T0/]X&΍-OV +0JOhC3o? WLv����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/image-red-eye.png������������������������������������0000644�0001750�0000144�00000004437�15104114162�023230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��IDATXŗ_lGv|w]sL!*u4jB!TxC!UBBB< H/HhRJ@*7Ĺھ{7vvyViU!Fͬv7|>G)Jo@P.9sFqh+W �nuݕݻg_ uo_pϟ:y$ӏu]VWWY\\ܾs4}H>@uvv; ߻|ŋR~O( bJBZE4n߾͛7nܸqFO0~^~zcjjGNբ9RJ,c<<-0dnn .L�_B@�Tϝ;K//la Ae�a6a*8y9an1 ySUg=ϓvu^z/Çɲl40 z�Bl&"4M#s|g{{bٳgU!Vtn�?{ʕ\vmJh33 ,ФD!*QidY.B*A`YǏ7Oe�Ο?իWVh6mE!"G]O-e*iУ\qREQ1>>i;;;V&8 s=K.Za\UUNecﭿ1L̹cšO=<Z[E1LBqY)O<v KKK6�;ֈF,"F'<kO@iJ{ewxyi'N099r70;;8vf�ZmarrI$IvL&&yuʥe"u7eqsʙ3!Hd4^P`jjz~lց:�8RTN8C% C C,B^XQUR6VF+p>rza/}++O * q mۮqL$Iг 66)V)Uʤ;;(:VBq<I[-J2Jkwxv4Gc*Bض]�eY$I�i(+Cf9m>FPVHt˲P$IHB0?RJ(D`�(J8&jB<p,P~2βl6i&iv{=dqB1daO=%}!1BBaH)z:0qč~E#Ct{"CAj!:>QTB)RJ +ygEe:S6>hbJurq͕</%]Mzqң3ZX3pV0<N NBZJB1J,=)mփu(PŲ4 i.[qHS2ȧ,bkk_AǏ8q]m4ӪPEJ+Wh6 j:>3O+٤R((4u]}shp.UUuR<S.I,0 EQhbj:E41NOJD0DT˘z(4M�lfkk_k9s^ON$H)t: qP&j03C ԙ4tH0 m<IRD,--ܽ{GV�`G!5M\ vm08ӔQ((J稪m(rwuua> @FQ$kZ(>r@>J.U*JDQ#�`&k8^gYzn9Ce#4M1 `(tMӤ\.9w ݻsp325LhHBurlFӴggYiJPmDZmuY\\l.//:tơ<955NOO''')Njym\mw�t0Pm (ꥱbqqRP�DQ ! Ay7P;H;dxC C:8z>d?E����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/image-crop.png���������������������������������������0000644�0001750�0000144�00000001774�15104114162�022642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXŗMh\UeL&Mfa> MM X0WF\"`qƝ;I@A ԂPHKMk,mS$L$m&$ǻ{o21tƒ{/Dj6n?}=5Jկ5_>u3:ae# B~y|{\Q�@~u ThPuЍh1MkBOV*@m}c{_8+B�M}狾�ӏ`s�߉hȟ?w�4wlfPIn]>F5G&t*߫.x7�zɽ�%^U*}0r]Ĩ2T�@(m' 1�U�" Qj7u=c(HA*_Z] Z<R� Z4Dj| <~(*KA:�^^DĦ9�Y D BLMPcـ0*LAr/6MAUBme%㕦@mșe6{|b =?8<6-XFvOBmE @[w/{o\\Ԫ::<om oN?Uyh\$aja% sHv8|63Ckȡ ׉וa#rRjR~;pʹkEi-(,^R 1S[PޜUtv3)]8;PS$>Da;?(v\ <4K)^xw.]hT:h?ǰGÇ!զ:o0,4@vhq)r6%vd9/Ue�g?~1ZLԘˑb)H@68?uΚJ'b٩j?A+O����IENDB`����doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/help-about.png���������������������������������������0000644�0001750�0000144�00000004267�15104114162�022657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��nIDATXŗ{pU{snnn޹ G^"D (Luv3:cgӇm+}MhV)vE ZÃ$JBBrܳw8$i359wo}kK^Jn]ّaFC�q#6z_qxHCCmh[mO1Y+披Y>AXke<z h·!\(O<Fw}wu^uqMO>Ռ_"8ap$MǟY^:9�|O>[O8ΆXm}UOIX~7i<ۍ4$!R )/Zk,(d-WS:'X<SϾs>_},>V|hSep'{K!Lba`)1 iHCr)dҨ,+Jpɖk['>@.7ܒn=ʞaibYnpmƤIe0$�{E\[15ˊ3}sCC-L V˛vT2di PQ GnV:}aZ?A(V V$lݛr .^eûGw47߼z<s9iX.�rWX4ό\>ÐyL,Ϫٜj'�.IIa8]0rM� x]meʻm<8Ri;@LO(  3? ,ebY&4ؽ#4pk 4Z6[^],9K'A<s4 [q|?5; s{Mi \|?$!m\ttssʢ�k-n^[C1N 7I0xy,,ٮA)1KI, ƕ>!ŎhU45d*,$4ncY N"`͒TZs?ek֠¥!�*K Z/ gN_n�=Wrf*2 NsRJc8 4?2@m<\tkO nhg0iN`%1lO$ Ȝ̴Td7H!RLc8Ջ(PJa6u^1;NoLR 3�S-HM( @ χ8I).+I/+82DWedR/�G X8/Թ@ "UfRӍJ)"):{y�GHy"CݱWt.MhLB<c4⟲ce=)�HH5<thMɲX;'5^>֏Ra$va|FC~Ebu47Ԇ /uM�uBיS{4VXXұDMV([9Sw�I۶d�>c|?XWN՝pS">1ĄM"amlN=ZSFia.}wl8KMMhN3\ܪ, M=(ZH"kJs&a;>h&a+D%l]]JV`W}%훪7҄j`sH)q[fZ 7.%h` /5շ63 8 fW[FUK .+ 8o(@v'<#a,([+*0>a_k:v=>>gYHx|ƧW~^<ʩ~Z O0# 'K/\8s0?hSw{p_t-D� ~Aov;7,~k+W^Qˣ<FcG]tn`̵!@}4 J/(VU:Kl^S~mE#' FC Dh:ߣ7δXO}ԫuA |% S@6aY+} 6Z`h!}EۣЙHwFiJ$b!C 3+=x]v8]r*ŀq_7=����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000002251�15104114162�021635� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��`IDATX[lU5{OO{jCXD$JZM1T%DLDD1KO $Q  Q iz93{0rz5>==k ܴ봅;)bn4w=)_*6̼}W~[ -+3-rJ= .?_)vMf&Sl_rg>#0 .lU6LLtb&uk8--NCZ`ĚX~[{SnC:Ѹ=1g֝s "8 !-Xs״es쮉+PQk*]ʲ5'0idOGo#K{?t;JM?P^k/:c3U㿶ӝh5<?CقoNV\:<^1bkX,U-=k`^<&_=meunc ]_s_j:~n %+ }GJw4ڵ_VW/*:]N@U#QQcςg1J@E?{3� `(|~`%5ߐ N5!sHnax-]g\Xm[ۛgݶX玍5liY7hލ5;!1ؙ} $=m8 Q@*5PՁ ?\W~x0[f_p*tg TbAJ^7``PP{;#$䋑P+K_Ə$q\?GB;9wNah~ @ $FZa�RKIh$Q:Eya&.] c)MalTfπ+PPoԆ1πg$sH>O m UIQ#:c  022i 4AzGj(VW_?T0R� qP55<hȵMsPJ3RY`,烽;G-'ڱ@^Z}w*.3q% <3>4Kgde2&l˂CD3CnPh�'Ӵfg<9ioご|~����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-top.png�������������������������������������������0000644�0001750�0000144�00000002415�15104114162�022015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX]lTEgn&ZQLb*kh"~$&X'$PYEc'bQ#h <(BI){ga.v۲w;3 FOXf3L+7gއ" E ��@``a0۸maV,Xc׶X,"ǾV>@@ �G!! lp9@dr8DhrXv#�ɛ"]'"H!h]6qwlx j10sH6(Ʋ9aj}GSxM+t>UVzhg{ۚ@؇ Ja=iv5w"q�:Qek+XaPL2P=} WU_{ [2w Ɔlq4O_MM;8ͻ*@_ucnGd]L}Hy?|3tˡ`}rđԯH Ɗ)z<"2^MO5j}4l_. =��n?dt fЂ(ge{֔p4UMc"lDnIc/>`H+D0vdgeqUW@okK†a8BжB 3H?ێƩ3YfMLPZyOw<TlPhCE`aJHY98鶴9{FZڑ\j'o{ 5 PC`%DM �wJ X>{=@XFю7Gl_ ? J m/3D0cFX 0)dy�8@ L`2x-o"юr`jLDRFVR0W Q, !w*S_ \ tu" Wܗ� IC{\NA)׹e+'8&Hf%҈vbo2*:*�nGPEKJ i� Wn5be0q9�Jo9Aѕ W�Eq]ЈJ߂< !�^Lw�q@x�aܮ\r)KKaO?�XBHD[jQ<a'QE\9<D.nu9EK.rU%nbp)'`"[tc,����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-previous.png��������������������������������������0000644�0001750�0000144�00000002260�15104114162�023065� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��gIDATXmhU?̊"ôYݩeVكJ SM{^ ^AA7EM0EJEe|u=޻{y۽׭@?tLa FU_้-; NȄ<&V oG<O7 UMMZtE.Tv@utֶ7V%~{Iӓ"0DY3g2+:N1i ѤrC[6ec5Ypj,p|"mbꪟn\i'uk i4 Yl(jc ﶼ94lw^lEO]'Hfpa Xjch:!G$P=^߭1cDɚt Ƣq.38,΍D-w,߳v4C#A@�+ ' ',F&ׯl\;KgY!RZ�B K2hp |%amXp8 Xk}C&Ε3qT kV;q֩`ySq>޿sK_*S̵%>C- R xRւ0a� MP͌Iڊ9KoKlޤoܣu n2 "Ey@|֔@zRTST #bc}+W'網Y$(_|C9A)xAGjC S-m[o$^ZJoD9YY�4auXŎF GvUmOO_vSk#Cr~𗀄{4|il5N|he7vnbaͪ?P&uСd$mBR S$Ч>ןv7-q �I`H9ybµF{M] /άG<JT)GcGD6$WІՀ <рwg>p;^>GpMpt2Ab̶.1CŘYttLT�6rõu5)cF����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-next.png������������������������������������������0000644�0001750�0000144�00000002303�15104114162�022165� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��zIDATXhUe?{qd3S ~.(*- C2#( B7#  D#,ei6r*͙S7ڶ{~yw_{=y}mhEQl=wu$O{b{% Zh-r凯}kǓ0nzloZR0p1'p˄JS.Ggjofe,(g0Z$8G*9b|rF [^Z=OAmti}wh,S.hdOdLl$=A-ݺ5 ,^e9H$BfJa &;k4SF?HyMi=I̯ؽS3> ).B,m (Z:NӞ:*glU_.=L3W]|Zx(<tPE^v&N~iΒ ÜڙESDSr.|ᡄ> d#;Nr7YqwsFmYh@"VatxhKJIsh;%m%S||VKkÒ6h Fq<� gR?c FC=<M )R V`9X@i  h#ylٱU6H+ i )`�-b<<Y6ߗmLttYZmL_DB{)çT!Ü\<'낊FfUKS$2 t^|`EP)L̗Vcb7i*;GL gú$_{j�X.u%+g/Ɇ ;lT[%c$`�]E08),+dY@F>NGI.Ffw;2 l#"UDftӔ>qXrԮ0?rsIBB-0-g! vkK>ru"OW|1D�^ 򡬢=pdA4.|,cҾdA}!/wtlɡx-H@ERF677-߳Z}ETA)ɊX����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-jump.png������������������������������������������0000644�0001750�0000144�00000002723�15104114162�022170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXV[lTU]53iki+TmR@J?L5ĠclJM aL$Ah*3myX>g:<̽0SNv9}{f?7]Hx~1 9�QFO5}JC' }jCQe8NtuojU)!5.ٍ*D@.$Kqҩ' /\Xbp>U L`a1<I1Bc~ $ D5esrDg)LŸ QLHEhmkS.^m@ཟ�!B^ر2'QZo93`t(m5 ;�ŸϋK/x^4GXՁ=kzS*?~h$U�i r͉n0;9r L* <ѣ8k=unkO~GJCZL|aZoQ.G-ߡob?�� s3 'm\�,�>HJy#3%'kḻ89�Xѯ}64{KC�09! 椤%5u R�Ws% oj%7r"٘<�/XOҋ\[}Ml_ %*8pg ]aXyљ VaG3!�^CC$ɘ{NS#� j'>yts@{c{4S}H:dlj Iԁ1g& |@t uodВJX:FDQm �_|*a2#mհW$K=[)aӊ+z}$^ICtnq o}; 2ML=P\ Ӝ :U)wK:]U  BX��Tj&x~r\kAOuQMY2pe`Scy# ToM(Y1N{eT4V`.cc<ޜ|_#,FƜ/B yYO>u2%2,g#ڻK׭C jyS5֝`m\XpS@w\2;Hen;%/Pb )�٦,g6[gKo,tP`M5U)<L p8egJq:#t ȚUkspsdKW& : `ݬ!5"\!71j6uvd[8v6J HyX3w*:1�\9Dk _&-pV+ϴvS>HM9}t%2MF-i@CV@dH#miH͵ &! Zh積EOid78D:hfuXb"g"@KF-Q<_m-}m����IENDB`���������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-down.png������������������������������������������0000644�0001750�0000144�00000002243�15104114162�022161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��ZIDATXKlTU{-P4jJ&1 ##MQnи%4Acbb@<ڂ0B<ǽ̴2-#a×sg9ǽ=Ӣu^�`LYzҷ�t8gb`:+-!ׅ)S#� ۉLelȦlЦlH$Y6]$:nG-n|=�UUdo83@A|�"6/"]Z9D@KGwlEu~6 E @ !i@P҂a0( %%^&^TgnB>XXWCf*"X VBh {H$JX: "|^X}rNh#!+!)ύtq.@xjOn=Ff1k g?ѸDOo:mA[z6R0*h@'^{ZvwS_'ڷ p+ȤkY=E*&W"r=s~Ӊ t8s5^μbeCęWƻ) 650xsw{̘<_B_xxp~"[l%4=3ko}*2捦:.v]:os :8e35jO<Ei0dOdgOfx�r;VZX5d+ړa@y OkT%:q fy/XQDXk?]7켊ўB{Kٓ#SD+yKвPvoD8QVh_ٔ*~U^vt}qƍ �p`3LڎS33q�1si[dRko ;&X9Hښ]״ޫm/.< /3U~[3f I$8t7-ɩ4+Sj2T-o=s4>pV~cS `(QJTuVG:k䔦#go] U`^0i 6~OOX}}~9vԵPf4x:XXPQf6gZbRз  uO^Ŀ5/vm����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/go-bottom.png����������������������������������������0000644�0001750�0000144�00000002357�15104114162�022524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX]UU{s\?RqPì˯JKȇ@D B{azP{ #$Pȯ4t*11umrRf9gù:ܛC/mج}9~g}:oq3\4oZ[7HU~'AiF-6�dҭ ty]O %Or. (|a=/U+ BU%�!D. ty(px�i|O �>Tl3I4�*(:XP!JPrH  EaDtΡkX1"P`PQ\##j0�HB44X̤7Ҹ6eEŎ`�!/!z XT!Hj8B4caՋ{iw>ӏ8=^gByd �` & "JŒdA Zg;:e^ΗWnUk~ɏ8i'_؄ 3X?3 3t=?}_ty{{Zij&ngǹnj\)% ~%-~'',Mz޴~{l_wFq6\?߂&2.Eۛ7:n&相 "D%-Sbgw¶uVQq 0}q{Oz|w?/`}Wk?7/?foҿ!�@!~@x|י$ KXo̱KعkkoH*�mM^={ĥKK=vͭsѲNT[5�@g6<(Yw=w~+x2cL#F<q%o#N9sh-OOO{w_DN4Ԡ94lbu)+&NyBX)mMdSiƐ+OhjW[\= lmʤTTS 7ې* X*Ƙ/4h P%EuDQ>NȔ$d߅xXKéÉ.DHP TL[]yE|a^k)FØS,FqxNE) l* qۻe%J/Hz^+ * Gƃ~L@;`xMQT 0W{*6\ <����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-undo.png����������������������������������������0000644�0001750�0000144�00000003034�15104114162�022476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXŖ}lUw?9޾]vu2d"8%$3ˢs &h2b|&fFq-.dt3h񦡬RFKJi^./K|'߹w{~#Ӭ*|32o.�ln:DGca~2G`YfX{-q">cv8ǖ~!9'д'#p++d4roRY ]7%;3X 8. Վw>vP9AD|J_}vTϯ }5If6 qs{1v.jD]{ѥO-k^ ӠYT1Tf#>Wsq<g`oD6  Q�&\0jC` 죈SK}27h&}qZ�I֦Mo^@OM/ �ULo|/\A>S~7jE3=bml)|>cG^6Ԣ&& &j,pP Ac" 6̟Ϗu�{ G_^xE"*~04H f CbD?e2{[�ꐕ`cD?|xAS�DjwA3h09qOAYv=\WlkwNزY!XwdWŞ߸܂'Ѕ{?:{/cu}VSV5Ț {HJ%7|X놭e^|]ک"vdew<.1|KgPn©X7xC>BB�XU3v|6* 5pu-311Η2_]v�&!T%Vuf}MǿngG*ڀqmf[d8/e@¨I@#�-Ϟ9 fJۅrv~BdUjf �vvy̓?[|#mܨI]≄ 36 @&[#cgSඈX0{i "e$FYi:"B@8Hz@(+g}j,A<J/*lD""P9y"D>лp~4ՖW#H<̏&[E\(I$¹|}m!71b́DŽLnԨvn_V3gڦ#uT*FG:N*fU59 Og.}ՕQ$s͝t P87Wՠ0v]* D`**85w5q-u,}b1į^Jhu?5XU]Sx+ᕷQY{3gH&q"A- tRqqo5P$}-,=P�3@~YxnGXt�S@P T`Ja����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-select-all.png����������������������������������0000644�0001750�0000144�00000001167�15104114162�023563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��.IDATXŗn@*R- %qP)ox�$@SBzhUd6㈹L7+s_m׽ipmmlg`p LMwcu2l� 7* @c."s�<Yx?�Ř!�bsW 9�`u~�yx ěh<N�i�tRf�:X�qYln-ׁ4v?~seYd:@]^}l�Y Sp|xQhZg@uLs@ed[?U.S</՟ۭs~~ 9f`<f(.fY(MN uE f%%7eJjqjL'Z>@`SDdnd:qym�^VEi8>(wV.•8%]` Ǭ#E-ً/ x\-Hխ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-redo.png����������������������������������������0000644�0001750�0000144�00000002671�15104114162�022470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��pIDATXŖ[lUߙٝݶR)޸GBT MVcFYD|GQLLKb$5ATB@*ZJwv/s;nn|9̜93Aqx|ڗvܳ�B~PpUB)O+yX<sY:h9]@ڪze/ *Fn,Rǧ5" <_Ϫ7r5.mmǧ�h WYf. لrbgO[MfWkO(<9|R�MH6a ȃ{f(p%69mOsg- _vW-D B0L)08 lf1;XTrYEoe^=tVN,{lC5:&$[H։'E��Mҵt\{WO0ԩV/|tGWkTB0nm6OԔr$d '�4-X�§Uŵݠ>�� ?${0w$(q@ qnoѿHd ۣX Rf@!Gy0d�P98r<bvWߝ-k*"`@ n;ʽ#W#C2y=,1lt�*\um5Wgtf‚:ׄ52up˾h(ˌ�)1K 716ϝ K)^X6xVEd(lPDg}M/r`zfgZB,y߫7OϞF.CPQ#_X}C%KQrcx`̾` 0sEQHQ.Z; txXC^�K{w-­GK@;3#.+WY h1g,m&0ee)D&�z{]rO[y%>Jmglij@tHMZ|G;X9�9'@Dw s4ɍKSFPHiQl:ysKo�Om:H)��ʁƑΎ`aq(|Dpr&wN AMȤ>ND$aJ(i[XtlCN @id�6aO$pj{EU_c΋MW0%3(4vz9s;7N tYf<ȔK�63ۓ>H2܆D$3!QPuQ݊JW'Dҥ,f@e։U?V!R%lf'$ˤ eS|LI8gM<M,MVws����IENDB`�����������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-paste.png���������������������������������������0000644�0001750�0000144�00000002003�15104114162�022640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX݋UǦhx$WJ .^BEb- "( EPVA*zK,٦$s^/3LI9Μ91eNxSӌgN �:wit] TJ~Q`#Cp4P\nUK4\�_8U6gYY9a Cml;] k"SԐio|XU_Z0�.{h 2LHMӘCgdSzy'W??X�"Yy* �oLK4�Y,9O[C7 orjiD=!@V0 _}۶xgmT8�/�<ի[(5Cuh죔K>?Nj>dsuueV"��4u2na�a۶Τ!"!Y9uE�qۏ$\*B2STJ,>j` 8X4(X(<( 7ZMG3-s8-J ރbvЩ-f&/ً� `!B;!@2  oсlۦP(D`gSoD`Xbó6 /ޡe zH*/l&^*@G.BK6hMO> R8]g6@)5fa LϽ :NI >+8g/^۫qh5[RV \W!Nv6砃;Fۙn (fgN5zxڽt7mTe~~Ev$ˀdvBOuIYX6;Xnw D?y|M@)CP `Ht_{#Q{M0u<:,G<�@ oUE����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-find.png����������������������������������������0000644�0001750�0000144�00000003144�15104114162�022453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXmh[^]ٖ7َ_j`[RҒMIf4Qؗ 01ePɖt]^x mΛ_f/8NHeɺ{!)v¾큇s<?s(8{웚 !*EAQ,²,Y]oLz{{K3MӶ,˶,u=lR05z3dӧO 9 !!0M2t]G99#`6`0ض,(5^cf J(*|]Bۋ*Q в PlafрO0BP<)P "ܺu]vp_ O�ё!ߓ%sYZZDJSYYEMu-p8غuض⑒ äR\5\._>AiJß1<4}/ܲf|Vnfx3~V:B21H}{9j'o[KU@)PXBޡu|Z'uouu󝷿Dvr)N S,sQL �q;?ā0_}%r|AƁݍwŴž}/'!m{�Ť{vos{ÁhNMrQS?4ĶۙGJ%Ⱦ (2/7f "M CZDZ`CT[,3Tϕ\u7e az~ SϰLk E� I Kw-r{0t$@�y&MsbH`ˢġ9q]L PYI34m'#  N#K* ̭UWW*}}]= /?wPeraFZ1 ~sss՗xloD68+$2** ز`G7CLMMH$n\RѦMܸq(羽w~!#3<꣺B0,F兩n"m5%IϹzcc /Auv2@"6>'m \l{&thNgΜYb!Rz1MVVҌ{*vCs:1I,O?�PDQ4Mc|b1,ŋE=j_p(@4Eav6(3wI.'~p8B=LϹ_PQQA0n0??dv>ʵkWL>{Ote5^=A_rUv|8P`]s.8R>EQmx<z\ܿ%]IR,//L&I$$ 8TGbs۳,FZ67 vzzGNS k`)FU¥K;vVw X}Psj W <WV]kEۀgZwl~vF,(%3^TK p.y� hh W�/ F ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-find-replace.png��������������������������������0000644�0001750�0000144�00000004070�15104114162�024063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXypU?wyK#HB5HŶQR[.:L:t:ጴqJ;qDCg(6LD$3yֻ!oνg9sݤK;vqf%IR,ȲeYXa9k{>I5Mۼk׮_I<n,KX%4MK]9 H3\Ӵ'IL&Ŗ-[/^aF$I>}I0MM<?8@0 <0tv;99.#''ILP�z$|h(ǭQ]S** 't:YY߀ `.Y,˚ dρ.p  w41ާ| �lٲ9_ cl~!DyCpU9y`%,1s𸟿'nq----ٴq֯&pvn" so- ;.cgCC1u<b EE%؝v>ɓ)%4T;l9/QC׃;ANÁ+IEia6y)֬^C8<ʊ+(//a<YYLEt S$Ј%h%ѓqQy�YY|twwsEr ap8#eǰ ,! N&l2c?;'ƢTUU]k8liN%$xqISH Oh;eDUU***�Вq?KӓaS!X0ӓxўs,]IFMl H5 ?+3;=@yy555wF&h~i3?]ݒ?zp LNNԒ ڴډ*d:X8T$qj8I{<-UVWсd{x-4+},{(9|HuU iN'eE9<s  ܙ-BI^~F.֮]Gmm-v1鞭 8ra|! n۶MfNn6B!Z ؜9cg8Q h_mΦ]nN`;}jd+JL%f~׽}0. >R䭟O4 KQWWGM5,,@QUFphwEK&dff='Գ[> 29aG=0mX)oUj->Ehl ]v�H2V6dI)i_.@lh!;Ym*uuu’8z|BNn$ E,.,Ae$IBQΝa(8'>YTW9sd_ yz!Ě˗GF+$UVx< ff!2Qm-חPPq?əx6<oR`�d_RZJ'TWՒ]D<GeE0P%c~|ݍ7dr Hct&(`J, �Yljmm]ϑ, EQp:N]]$zu5ظ29pT OjGdYu ۂ@MD^npIPU˅i|>LD$"#|w;kĘ 05|FۀLaz+\la92e=I#qr(AװG^~-p!ޖR<uwwc&gN!r &|!7}*++¢eYnM_`/Az悯� z`o݆e FF'8O%ijRyt5�,O !2222RUUB`t{c%3NBEAUUEAQdYnOy8(ȩYIҮRūDoo mmm#Y� /UpΫ@�,/;l?_L@I }(Yd����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-delete.png��������������������������������������0000644�0001750�0000144�00000003734�15104114162�023002� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXW[]Wuۗ9sfN3$M&Ѧ R-xy*} R+} ->ւh*AHiSۦA3Ld.͙9s}u߇ 3әPeֿBmx(C"Rʙo;;o�#PJFU`l?z0"fF3_Ms "h`fcŶ&{{ z\ Q k-fggeٶ"yFFF+O;gxZ<=6&8w=}m ODӹ:Nf_<sLF_Dwӧ^scS'lVQU|dChZt:hZWܩ1f[} :CChZ_|r#L 35%.^t;x-ԉJ�G}stZ &��$@$Vd'myyN"<`c�A%n+�~�@nc088:_wpOc߫'~sw~!:{U7)n_^'|p7BSG(�p쪆,Z%rF(.Aɏ<[_28wYhD ,ǻ�s/}Dl_ V ՑV�pB� ȳ\(1~؝{oOy?ug4#4MZ=Z\\茎 O_yi6Zi57?Ph4F}n~JiKDۡ𩇏e�kO{q�`lY*D^έ:z=Z"/ !PRJkUJVZ2sYAJ)(xxZ]N$Ź1smt.B'p`RH )2`J:d\ !H)%ZԯeX ]Y=@m?cc )sT><cc<cR%(*yJ[TyFk+*1y,b\(&Ϩ\+ת53::6. 0 Az RʬVcLU#Jab13s_+Fy-@&=$k Q6pi=]TRÃ@CA1aZօR*J[=ϳ*}s. vH{zk Vr{(( C|<o*aEic !DZV4M;wBBk]j^dYmM Jq΃Brۙ3PT+W?{噙˧ )l^&<;J",Vp%KK3aV굁*IN<mI-FNf/K!KN{&ϟ}9<IϽ¼V$_.şN<kcTKJ�Tۋ`JqQ乔a/;o*Ǔ$Gdž1nhh0yR$16K`U*6FCCjlO,</ri=22|ujv�#!@MJ)`ŷi[q IlN֊_3H !-˂iʁ 2 7JR(mO MӢ`w5̤ � � @`kXLyEq[mCDUfn @D֮O}z(Uś[u =?ޅy `3+`Ξ=۟?>wn?8F�[crC6^g]f.v3ϝn�x:[ND@s։{vt>'_.��.1sFM(�X9!7=|=� 3;�rF����IENDB`������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-cut.png�����������������������������������������0000644�0001750�0000144�00000004047�15104114162�022331� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX{lǿ3;ww;M b40U$-U*"l7D@CMTJ64QԪ"`@0X6=vwf9dvl?]ff &ٵ0b/Gæ&v֛c9M6EƋ5fr7<^SI^S\V'w,TW\mwY8RJڝ{/}ʯJN�55;Tۂ3.;lۓ]dP!$JKK5'Sk�JeeNW8R"7ap83%߹sg tWn0!Dzz&RL @�?oHH�iZXUҥĜƜ g6E8'P8@O8BJ CCAA]5SkRBSss�٥)� oJ-uRuuu?-`S˖L� GunZ'*q~ƆÇtUR0Ŧ-$Ph25-5!!|͊S[V/DŽ��P hjjB %E=nOA]]:�۞ʥ-w)%laD&B��ENi2cR"aE*7e~9XZH5ѯnթDMUU/ PUU.sıp|*=HR@uKrsX|o ! ݾ~S�Ht{wOg0 �,¼B,(uE"H)ii-^EEQӲk<rH4 RJD"Q,[ZFΝ B0pז-G';i��,._iEbb"TUkP b7NVsJ��ӧ ݎn<dZZpܼ2 ?e+@|$0;j.b*l*oixyy8{?5 r"b74b.x|�6M!�ؘ\p>%3^xS0ݓPXgkXp9k}_ ndBL'*e +S\N'] B5?!Mѧ[7n#TQ,WФC(CDzRS^ @ڻHtFavCKw{<vyJ@�AGOOg`ϯ}!_)}*8?eZ:ou]U6lDp_YY�3ng~M炍R =#B@ܔR4X]]RBWgb{{`InV_joGZR)� 1c(�Fpw$Yx}p?7E(O?`%x 7<42r+Čˁ*H,)U=?ˆ-"a�g�o*BmWb%s}�,J+�ܸy3o�x�n3`u;uLa.YX^RXD TE�JMOIѺ\c7�(I 8HP(�hc!hnV؝#�y�ΎMe㌔LC @TUI>_R !h z�@�nS!@ @EiHN~dNAsi $H{9@ngmmlGҎ`3@t[lRr} cÙ99ߜSͺŹv7`Yo%� YV̟5K&{zA]Wcb…yӆ$�`lE07Pz:1P@H.�lC`$WSؖef:|>�@OokkͲh`}Z12P7{Nw2�SNɌ=3 gL۰r .LIJ1W~>>2bL]?K?{4HW����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/edit-copy.png����������������������������������������0000644�0001750�0000144�00000001323�15104114162�022502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX͗MkAxI~dA=-F'KтxWR-ţjU!I٤K^f<,;􁐙<�8�h1˅MY54fByv3/j(ES|>�O=t%ʩDF5ոaPV%{˫ p`iiIy "%" a0Y"*Y!"OXqBT*AeIe tС( Dsev`px(@&,T),+ L]LjH BSU(HR璂~9BxHZ_H"D0n~$?T), DM �c'a)iƘia IbJ{"~{b`{ fPi&"<|�i�Lp4D>.k*q`n9We7�;{7  I*c@O{a=?\I ڵJXup1 `6}9Y.W�& TD"i҇1!}�3?NP]zo.'[F񩤰nߵ1v0擕յiט{VT M����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/draw-rectangle.png�����������������������������������0000644�0001750�0000144�00000001212�15104114162�023501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��IDATXW=oA}v0Vd \AHHT_rHAI:D0r؎}(w6H٭i̛7ogoK>:mܱLfͽgq] /ڷZZ(�2<˓7޻n-F|L޽ok�_�S" ADA�j"!lF &QR#miʋB2HX @Tӫ:X�rW 0"[�><DPyEU>�!#q ��Kr1UQ?.ŀغ oCe "�#6�J"/%X>-7"!Е˿dx*cA�B6k`$}m5JBG�dSI@~4~z#dPR_g'^z4�pQi瀞$j@$+uvjO/?|GfA 7+힪٬f����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/draw-path.png����������������������������������������0000644�0001750�0000144�00000004230�15104114162�022474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��%IDATX{PTƟeaEvhPUh3Ak4Fik:i;6X;!j$^PDT,+eݳEQw̜y=}̙CzEdHs-ww}92V|b+oLݵ|NXaK8'qtˌ̬o_, @~ܹ2u̬wo;Px5a�a*e3fN(K 6bɼ=q ysN#0U"[LA aeŋ9OjgPBNJ[6=/AP82\"$B…W � ghL�x?{=`dy2O|z;3m:K(m-|TF)K�x!*h8kۡPHܸ/[_3$=F^ÊА9YrӍj(Y�B�Q$Y8 ��7~oG>d[,&PqOݏ VM7DDK]"#2$B($Be@n@]nWxuzG?XM~9c!"P$mw?8uk|�Ѽˬ*Nw>f3L^|+26Aj_AqZӆf-I1)N6H(A$*p:q/3O` xÇMfsWc1qT/IbuKtX$C}zw=a2#1K΢/4ƑBV)Xs Z- .U谱"%P2@zJמ�F۹FyEM�hMq&mJKe5 a0@Y<OM` p Qys304PSi1B[o+\T5<n,rސLRp |T(ijh;]jCS'0�F5J&Ld0EbW6Mhs\#\p mM Qh%AJ<~w;] `h5�pc�"ESW]e)l2YeITpuVgjGj&'6tu=ҍЩ95) Mc F HK�J0MdPkAgaPT%]Y˲i-⛪;m?tl{,[��2%Gy^R(8�1Fbsj̔YPT� 2՚ν_.'wTm -c���q11㋀P|NWWS)Ƹ�(AbA +ron?xL�Fk>DQ�%�OxKmkEeݩݓoQNH2sim^=&�҅ZVQZ9Rx-e W'wk[KOڍ(� ;8HLLMlg|^_eCfl۶vzPbp'AbU3ax�HX2N/� x;^<�/\1e':[v*Vo.ɲE䊊n% duEpF%rF^ >ɲYfxѨNJQ<7TtJt,&! I�3RdYZO|#a^eY6??w�\IOŒ�Ing Iy3 O/ko_Α,Ǿ;%z|pt98Bޱ�,?(⭖TjכfW0Ǐ~z^݀~g4hnˎϡVj'N}|��\z^`L{ܨ"ݠQ$Z7�"<P07 })FJ)!zzɯ~ �=SFVB��[:&R�@.�n{(!I+J|> JasS kO:$hi/<?i/W~����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/draw-freehand.png������������������������������������0000644�0001750�0000144�00000004237�15104114162�023323� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��,IDATXilT7>؃b`AP*MQK6mJQR- 0/xc<}3{o? fqmHssϽ[f8\KbX�LfZ*?2OLv\9bIIeMR c��3 g߻mck99wwt L&;caP;ҎxAY+V~CIijJ�gU27�̌@,X A'ط�\f&-c1̳WWW u!8*�u|`3SG�4-9=DhP6>s:N.r!A)x$e PPrHiHv X\3dwyK8}pCGѨ4�EuVt@ѻAa �#�#&d�@RTgV,/3_F#SCh7vL /xhr�P;'KYXRQ9;GA TF�&whTr3]J,!нfPhtw2i9^Deײ~\z km�a*d �D`cj?}(J _dbzݸr4??qqAܘS|Jd)ӱsū$Ouľ-< 'ŃhɎ1�0:Jr"ǾH>֛d9=jRm�NwnZ}6 7`-緹tbkLL!�D,_;nBt&?DGoM-]b ,* E.7x@I�`v!;#m"-4T�L<)TE�$A SwswQJ~q9IOX/&&� ќ<N�@oEwo83pZ�a_l|$?c6"TRY!X':dK23C.MD rcu0 qt J6�~ߜTU+YX͑~�-s<VcUnQw3\_:oGȎӪPa "-e7^CoN]wNR3[ L*@UpSn 7| hRjjZy;`繓p gņ=s@2E0-#|OS` 8Uo6v_ױ+�ynׅ֯ٹ{wpdpH{F[( sp�Ty < Tu"BkKu<9io�:aʍ뾹˗Gj`JT5Di9s<LN4U|Yͯ[^޹#|qȑp4Mm ,D*fJL8Ƨ?&Rp~^� T,)* 0@.=?.  d�T͈zd}uᆛs9G*)S~Ic"f[>;OLԅ]y<0:YzI`F8MiDgB2.izs^ɋ{>{{nx&5WtW5O;.0Md<Bv@Ttf :#ij=ojaDKhS<WQr#[w1zq⬓H$T(޸e/XT`iokNɵDovV_oqMپhq\׻#kO}Ijϵg2LHE 1ѝ��i%͕6eN(PZ({ l!ԁVvvZbt8z8�,>6j e+Wf9v캪QvO ;r$ifsdyLԷ&F|^{&ټ7'v)w"bLf(ۮk-e/s~iSSip+P8 ' D�.aLvӝM�!uA����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/draw-ellipse.png�������������������������������������0000644�0001750�0000144�00000003044�15104114162�023177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��IDATXŗKlg}}^unh;%QMq*"  V(Dv%v jICȮ]4J\۱cޏ;,\ߚ& őḩATF\b �>+ /ub Vgg^faxtHm\֋{J*ܤb n^t{C/_75vc T(bU{_g% \<33ӯ5=ЃE, Ϝ *[ Hc>_Ծy}hg|nKK?졉<||Y,(0%!�Vk 2a$>#*hC*A?<N3~wGg_k822"v%Ґ]Iƌx`c%^?Tq¹pK3o捼H{ bOИno [O^r)6?619}ǭ#5,*QH=NjSsj##'>lA<;R- O5zvG� oՎכ V#%AW1ja|wO�STi5dʈ=mٯ+lUFk 4x?jWQ+T*.ZCO}��xT*Uw-+h�,�L|^eҵ% ## F20(9,SP��*Q$$X*^;J2TL$xnʁ3u@>�wƱŽU@Ϡ�4ϋaLC�B AGtm>['0u}ZNx"?O/><�Vb@¶ j}׽>7ςjB 3Cxp3 ?/~|0/ً[RJh M2aequx/=��e.vŅ9S`>HK^KtiLDo{$4!!u{�91셮ls`z��|%Bw0+ľRMm@֚ԝ$ YР4m緃A'g҇6gۯ69EcU ="L`$H7rn] 7:Kί��py\xsU'p�"g4<(E"@d2)hϯ_w_goo��k.US_sz֣_4:Y4KU,\�0$ nDb\}YByӖD4 ԧJ [�'3spK7+ryٳ}l'OFbR*2@!"" :noe$'����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-save.png������������������������������������0000644�0001750�0000144�00000003663�15104114162�023370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��jIDATXŗ}pTn6k@0 !"hXc3֑q?ڙRgNu--B:h &;޽}MH̜ys=wE\i̵wh#6Ia"p0⹾=[_ԯ|2mo؂ymӪ5`Hqʿ3Wniϙ?JH1=b[X,)R 9~F$_ ̭v�umW7Q63<͊ؕӧ+IKJBC<f3a_~==ީ9I][Xx.kʺ ;/9_~乙74DES >Td볽ySyr+_,17z~zW:{/)(1t_= O 9caNZ18@ߟvpp2ʶ$~)g I ڈ+~H$IJ ~kndvj,ʢg_|/TWJ)w]={';Z[٦Mvvv" 74Ɛwܶi/hmIv;wb3<sgww PMA1ŊKͶ%B<_AC,b<fo|j/}V�0{_k6|u-ˢcv ߿O҅,%%k1hm0mYcsn<\RmmmBvwY rUʎF2.ni#- ƌ-ŀ}[K*q/_λu`۰aSN]ZWW8ضml^;ycL*GC6_d#s|lHSm21{p1T)%477SQQ~ݺu5B<qFnTW:A:YFvHPz,̼}w3J1!0>˖-F"͗Xd-|>mcPJ*D9wfO#+(7w\0(#u]:::�l߾]^N,Z6P(RQ,)h7sv#ϞF,­sy^cqpyAmxG2dΜ93>"�!V\I. 1&D,Ï6si92ϑ`g3>RJRhq]ŋcY֖ �֭^Ѐ8(�H)Rrooohw` Ch(++CA.CkMPή֯_o"Q|'HljF!,[CSlJSDQ8dd2y8)%H .Å: u%222 ¶eY$I`ߜN4PQn#Dkz,_ߑRJ{R!L2dddgϢFʱ,+4ԏb1=g!8ZkL@<l_%͏+Rn A/@k=v6 RСCK?Ll68ŰȔ1Af444044f466ɶB*rr)O\8�RX,6!2ys(QchmmE)В˕R!&+L+m@�ƘSN5Κ5+LRWҺ:ִy--- q&rTtԏe6ٱcR+*R?<DKբ *(v=> @8\� Z%>�/�oX]x����IENDB`�����������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-save-as.png���������������������������������0000644�0001750�0000144�00000003455�15104114162�023770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXŗml3wec]JsI0ëi)"DJ~I6}RYV U4T8 IP `H ۘn}3Wېb=zw5 g;Tx^N " e>v=([Vh9j+ӧIya|_q~dwz{_B.{, ͡x]yb̪!maIDJped7.u/u[0y{nDYO+`MR7f$*1Drl>Ikכu{"RцDMץCSw_>s򁊒ȸdڣ0?B, x]sU-l%3%<{_>YXsr+1({pwrek׮ lw-k2&5/WD-̆U|UڈsO6ƼX5rЋ04A5黖W7B(([|= ƘlRJy8ۗ`hm]֭[܌2CW\_ƐGIa>ҎsN1k׮'^�O_] qM^x1~ﵽyKl["Z1,Ri5&yu훀kWV} -ˢ~F ?8WdaWXR`[F#`eH)0޾|3ϧZpϞ=>`X.]J2<Wa# } cn.y9OMst7BIR,ZSN}0fZSN%Ja6maL.g(.a  rjd|B69vi0?!]R�BMW㌌Z⹵L(!(}sIKr/G?kTޗ1!<ϣ)6`x<N2Ķm1(}{tlxC3 4ҼhjJx4)TH)qz۶m�.;wni  N#}\%ɐdgI )gL! 0of袬(g]}lu]buuuoB|{ɒ%$ �|MbAkM2|C/rm G* 4W.y#D)qhllIJc�ZZZJN6T*Rd2 @8ΚR yaϞ*:DZst,a}5�P!D5t*[[[fl~zʕ8!mhhFD" B,ˢ(ʖ'<}-kj). D"b1bJR"$ZoaB9r|gZ#tu9ֶmꨯgO1/b1?Κ5kə0(ɰ{nZ?�quZ3i$<8ϧ ŇaeI֊GF9FcՕ+WL#D %FQ>0qT`2dw8H)T :w#۶<yH~0t_p)kZ1;y?:_OOZ3@.w񒔲qRJ]܊Cd�ĎrC( $rD[|5}N- $7@qm����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-save-as-alt.png�����������������������������0000644�0001750�0000144�00000004103�15104114162�024535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ��IDATxWkpUonnCI v4EZ1L[V[0€JCˀm;@ mGej -Mt*㨥*L eZ0$%BH>rO=瞳w&65Ov߷;2c ɘn9< ͍GV knYE5H,j, Ѳ  HtGg6S(.."̛p rYCf:Z]>ϒ, ZJ#H&ڱX"fG?X(LRA^tu?jzŲ� 9 +'P^.yYh&8ExnRq ;S$L1P5܃ γ@�e@2-:�w7{5va-5GBU6ᖕ+a1+3'f@OFa B.uC"FGqJd"6M0kz L˜ň7-<;:=SGPo l߸8䭕յ %a(MM z8`z4aW <{TR?R 4/O43m!]cPWЋӈk ~u><ryy^\E-}v NoG/pRi7c1QY°k} ᠈ao@@rhr`.NBԺpU0qRKJ` )! ~AG<'-?l^N f0-NjJW@I r'Σr:4Y`Hć<�ox1ց=0b4MCGb $2}2u9ho{ 7GZ]{/N aoԃxU;z}=]~)T\ـr ߼ c"qvrP,DQ, EO08~ӕQlk(D s1?z|IģCxxC3kp{62.4\!7;"w,.AYx[l#Y׸2ӘV˗ qC^s ÎG +yf;.ZQxTA{R%˱!`555v3+q4mƳã[Eݵ<KO}GV(r5:Y AUU$ ~tswDG[$sKRH#w׊VޅgwBkg% ,Jl؝ބ"+M{y60cR|t/'+xWyb?{&"C7#$i7�9|VN*Y,]"kiۗG$ _'P/lM%\`Z8CZ1A闪{AE]W'kMH5;\QS�pp/}Hr�ht2A:%)3G�N>!L_)h/9X G{o@UU~huwJϐ);3wFYF3N4$4R<PXDYi�]`^S))vih6Ψ:#P1۞x/> EH'I_#4l:oC$=u_}аP[|C/>9 ~iI eyZiSMCoN9¼.kxx</LR-.E-�VU]-5c$ˊ"+$ $ t0"Ѩ&JЅwbOL"tLnӻ� _Hd[3B36SI -X(&eze)sRA9DRCX+lK����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-save-alt.png��������������������������������0000644�0001750�0000144�00000002312�15104114162�024134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs��v��v}Ղ��lIDATxVoEmvbv " 7gԗ T*oE4""Lq[fFzwBM3w775 @_D]λΛ, KxgHlQ {?iֹo~4�ý:8߹�ۯ:ȍYN,~/S6Hf$IVc웠yOgy~`�n3@s -n,zž&D9a4K�h74 a pm V`5�ɨC1S �o%\(.qR�CQә1<:WJP>4$Ȃ PъOtSq1u+ �^]1.Bi5' "ڎZ]Y95}Qw<2-HZMU.BpL5WDd<`u!9 hQt%a 'C׃K/0S]['=jO~z ŠV+8[I}k@X^?):50Mjқο0\`ⱊ/+0.saST, ,_� CZŗtܸyV(>2o3� ON( KS�((N)x QKD-(dg0!#jj:   l@G$ +L"({4tࢢ8>|q$ +¢K $9_BdEdM FX_/z`V �ǁ1Z2a]4M/I |9ߞv>46˗.}P־RU-E&ωP( Y+2Mv,^lULƣ?766~gx0 9=BjDП>(h*]2ѐC4w�h4<"+츮빎(]a'/8"06}۱gxX`:Лap 壻f;4GTOD#K@4յ^xψȝL&5pgߚғC����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-properties.png������������������������������0000644�0001750�0000144�00000002133�15104114162�024615� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXjI'8c˜!8DP|}|˽+"h$3]{d2q@}_}眪 +PJaZKc*i1ًeƘZYk8ݷ1f4u$ɘq|4e(wޏ2Wi("|q#r(XytrAȲVE$S dY˽8? IJJ@akk cLU15Ng"TEpʕ+JL"P\ݩ "cL%$l�:t:cÐW^aeaan-Se4%"4e0fAk <7ny=nǏIp9)�pm"»w*klGcx5߿<f'e"r%;Jʳa׮];wb6 x)KKK"Be4Z˗/<(.}<coo7oR]!>|pHVC)2ׯ_5]077GEcxAf0ESZKx z TIh4XZZ$I$I,"yA1ձbZWiŕR\|<|'y(MFΉ(z=uGv1UZJDQ<.]�'Ou떛7BDQDVj1 xYTOg{{/$՝;w)۱8{�gΜ1Zfee~_ ~`}}H{Sa)@yfy+jpl)([@yUjaȷo\(=ߟ;;;i BngϞEDNWYvpY@C)ϲh4\{7.P`X~�2:׿޽v*6@6`ր'όn��P'qcdfCG^tl����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-page-setup.png������������������������������0000644�0001750�0000144�00000002407�15104114162�024477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATxڴ; 0T#ypy>&mF@u`aVhJ)Xkz4irΘsBDL&c@J c �n?p1BU{7=/*6_0d]X[1׌l6V36m7mbVOz/VS:=6"H̋xSsmmm,܂ox*p ӗE#an7#R{(D\v@}0hh<k1arrAu`لS#Ns9 k aLLL2TVUX :- j~-77|ػ/0 oQ X,aytrBkFUX;bEx #f@`}M L蚎@ޏ˟GM2F XE󌍍B4L_jHjpLr-Hh4 Ԍ^& M^Gsl =Y4N FFF AX ?EW`?FsȀ,4-Ik1<<|KP!t:a /8epE1!Kg8?q'a<CӍi:ucc#X!jZaKV_+{ߗ?ePw{=I< zJ~CxF#,`2"&P?oJI(leOP[rscgg'Z-,p #/3I\Uﳘ@T ?CUZM{ uJ֑% DTLQ.)a>ij$A{NP*? #)}$ŽUa|l,mJ|W4 'ش~yX'( aI: \.G ےGP6mg6 ST$]\.@ h:3j߃ZFAl#Hsk4~]߂smɓUe@CBd%?Hyz_o&_zq%a(J>kT!yY|vֱznA~p#.UGQt+[Qق(Ǖ2h+$_۬.uX,h  "2Էw御9h㽀r3'?8G<ƞ0}ϮZ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-open.png������������������������������������0000644�0001750�0000144�00000002751�15104114162�023370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs�� �� B(x��IDATXŖ͏G13 L>8:bD!=ł+$$ BI-$$2N80H !h3;3Uag{gzfF#}DE|з(.T^ObAͦS3yn_zw;Y}'P.^(Ozq#s1q̷N#y{㵷k}3˾__.�/d!RBkRJBTU<<sY[z`yyYgYvZ@y@( 7qΎZs߽ea'\WX[[sS$Ijzusk-z9cdgWqFK._ykO ~>U@eiV7oޤjcER$I?]#֎o(T8sAR:u c ys]w~g(1Ibiik-ι RJ^{UYyc<À PJaCt:ۍ .ƘdB�iZ6V=J)jaͷˁ2A=?,رcIQ cc߇Rs#+�eFCnmm�O:jW.c EPrv]0??oVWW&>t\}!8 dWF{nuFΏ6_;oFz/_`105c ߒ#>3?&AU5YftYZlngz- w!@ &J*',Iާji. 5ޥh9M?35$g/nB@YKj<5pba71d#Ԓ81�kmjGix@"n[K yTE?N3!�\cc;&w(%X11H-xQ1P~ pԩO-֖̋jc8Y&NM]�\hmkj ؐ1enzL^{1AQjƲӋjj!2unl؍ qf1ZNIFOs`0խ思SnČ$-;G�AFߎuZIsn�H;0dƍYu gDbl\JNr<r c!sUM5Ɩ ]$ NR;�WWzXhyO"ؚl6dl<mlSYnt=ll l6uE9yN;y'[}69u5(xpGOZ] DQ%wTGNa3Z#t:GQEE4M �yEFd ˸$(R/����IENDB`�����������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-new.png�������������������������������������0000644�0001750�0000144�00000001760�15104114162�023217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXŗKO[G3sm .L %Rd n*Tj.*FAjC"5ܙŵøT=hf4s,_l'n`m[g/B;`}}\.1c' Cs}w<^x;LOoWxqζj_s)Q߬D"0 cY7!45)H c�aNj9GXnӅq"lr>VjD0fTm<�еJD[< =$>֜#{/U@K8|1�ཏUX#u[^csg �zb&F 3yƂ zUFdoK�qas/@RhBbj�9<1jKԣJpݝ_/n �7AFSWrY?]W8i1i��qs^E/Ӷ9<jvg2E�?;<X(y+S}~J1'sUeI*>&P? 2ŋHarfqL9B$7 œ=,7K/@Z ¬LUi&@ו۞ ig"@J�eh):FH<�6660f0q4da^jee%bJR8I A՜3![RC0Ҭ,*H*Qz䁻[Y2F譌,UM(cNU\.A�g<p J@eoo/D:/W`p S+D^�uO_c@WDno?|1)t����IENDB`����������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/document-edit.png������������������������������������0000644�0001750�0000144�00000003216�15104114162�023351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs����c���tEXtSoftware�www.inkscape.org<��IDATX}hsI'd[Rl'%%Khq MG`cH `+2t !fMۤMHu݊8DՖ"~NwkZ%r䁃|?{7ZkTcN:W xY$![޻ǼNX(Q|Nnd| ?K^BDNw#dW$udQfkeYX2@� NBXO~/ JN)}WvYWAg6+YOsćbax9|>L&۶5a0s3_Lx vb[7XҶVOOMo# ;;(I2"sYJ:_/"%NIΖNRS#L`"()f"sELE? 8=^r m{|2F0{7≧8E$�dmɢ4뎍$Z4auC{<N]׷ 1$S)LOOczΟML s`xzmo=8)@�bPadܼDlҟh>֕:[ �ݻB@L8l%\"/!6}-Ol;~r<q-1zֽ}k_7e eq]4_LU3\:�r}s˸L-χ"F&t}38ϯ� qב> � ݊V/A�˸2>1BxAw'|SVVkq V _g|k'*7?<Y@>Gϴz]~`߀4'F |AUܺ<O5 *z n]'5Uz~8npAtu|OW7tD<J屢U^6[דFrZI]sМ*ZVq{@ptMuBǏGxEJ/Ooe<GfO0fOα+US)l:IZve @X{hƐ_p}K, iyEW~UH\"BSi-%M̺K BPJ &�&Ys"�o7`'+e!2 0ѣo!@eb4XBL<W</rg�8|;Nh%(35e^B/h.cZu!4-O)U @(�UVmē᫸xlLO^$痊T5M+<EQUEP,}a:_ W/?|?O|vٓgl!iVy^$I]\\T�f7BKb+FB?\;JnqzX R)@@嶔 kCZnV(e~w&gP0V!d8T[@cAt����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/copy-right-to-left.png�������������������������������0000644�0001750�0000144�00000002172�15104114162�024245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��AIDATXOH\G?۸We=XҊ)HUA.K HBP@4`+CFTrCR4 Ms0 }0oDM?f}3R,]onE޽Ͽ4 R Σ[%bd2MF[RMMs*Ԇ{{{KnlJ ៕ʷuuӽoϜUb?D"uĬN00NcB`%壙YZcnބ$ 'n^;'O�p $FFxp”dB,ɲ!0 }Wp0;wÇi⮫.(k_ɓ*ۿRL&Su];;ֆuܺ8Zl[׹\aӧa6 9p8b~U=蹽�=]+k~Qj ƥhBvݾ")1Ŀ$ ~ev½{:Q"ohy!^r]=4� )7΂!vꏅP<�=㙌NE_y1Gl6~,P~B7S 4株J&ee>x)7[ J{Iˍĺh:{QzU3:C! ?>6 ױ6zVxal`e=sh^J)u]>GHC2 ׮|sO  =cD=ml&˱dл,B*3mM.ӄNԹH@XUJ5Zu ws:+ÉP_L_\->*.yJ)RDIT֗ ӘL"az:@ASqz}kE/ybjX,Z&ӫǎA"sREown U?dV@ 9@joWjlL &h�55@ w<0]EP >Z D9՞D@ϿPFx, 4޲+&#hhm �\."����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/copy-left-to-right.png�������������������������������0000644�0001750�0000144�00000002207�15104114162�024244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��NIDATX]hWG&]͊Z<ZҐE#1}*HSAP>HP5_ &VUL6R(l5ЀMҰDY>ܙH6fky=sfR̗l߇{qY߀x�&e1_A&R}z%{J}ܻj;?b mJ{ Ο_TUR[knn.(\y;+ ƟmH@4 ٺf`;ںH�33 ܼY;Wp ,:HTVb9[Nӭ[T8\ 7TAm�Rf, _dRq](+uH]=|(o 8$x C'W!Î@,B0mmLRv6Ͱas}k*8!([5*6n|A�>n. e<ݻr5--|T8\`8Je:P*C4b:Ln9\acşD ` ',(*ҿٳ Rj_)lvW)<*<~ cc:ijb 2PQOӿ{7 H 6m~rT* KJ`NWۼ4+Bo;_BtL�,_p.+W{Bo8a3`Ex'ӧB�7n~(4M 0 ~|�BvDav8y={P{?`ٲW, ˲m˲es&J6`y}o֐a ̇-[4y78'mz�)Oz%%m.cGұ_:})BH)s TVB$Nz& ^FwF=f5J2R*)p<_3WztO*]_J)g/yf(^VDPru׋ +R{Ȏ'^DEP @.4R7,?�~V?����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_workwithdirectoryhotlist.png����������������������0000644�0001750�0000144�00000005026�15104114162�026502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  z�� IDATXGWyt75dHXLiPd,BZHYDR9mZ9==G(T(h-($ $L2$L207 P_sn|w}w}~$٦E鏺CrsDAO& 8U \nb|niTj27i>^}'oMcf,]ZobhM S$J6r~\Ow' ֏(T;]9O w̢7<:_d3Ia _N;Bϋw;e;C*%Cb~Լzr'2NμW3ϙo46XN2/N!iSҗ0Bೡd޻m? ƣhb|u \;{ œstBQf@Dr?G [%u*|%(zi5nEOi:V]S>.ݼ_€D8RHxWAexq蘊N|6ϖ{jűW,TΤ 1B.JJi@Xw"2(TlD|6ܞ�t*tz`ٹX!d0DxJn >Ĕrr&&+PO#ш?# DccXnU:i/E@0f�]a%K>>F [*UmçkTª=6$E+gxrt. @$Pe lwDdm2 ",JwٺQݗ2&9|$ʣ^ܾ#oڑ*EKZ s2"Apb=l-mt{uE,ʆ >҆x;ڵAY"v\J(p19VO�u;UȵA`[C)=)okrg.cǣPo+g?5p$zЧfS]=pd]VĀmD$ JRʓڵg9K9)9/q/vN@<K!pZmZ<~Hq$FIIh;fPΒP Q4*p'/< $TE^[^C(-,n=PMq/#?ى DL/IRܜ7FKOBo] >Z/®ri$uk'BRg m(֣r�ȉҍI9Љ8Aڻ'ͅ o+ 3̡!*sP|k*/y5 #QB`xIiZ xM1t("%0`�Ոk܇ٰ\EkIRXmuETqbvmڏ  .m6YzI{!`fBYzFҶl7bd*bO$fR~SǎZ)v}V P&%cDj<>kRM+p#jR VJPK[\o kN&4$ OS !ˊU0HŶ)YhqDP<BMh 85}5gЍ;tP(Ӧ Ii3y(җ~k�Gkx<u/b4Ί&QI9 QuMYLx.4[۠-X�qNLCCR2EC('* Ndj[!aH*ƥ)pUG Crs#xX QE) lP !A&HCD'c8ͧ>-7fMЧACy+Dz ݏ=H#Nsx:^qם_r|yɩ19BЄȣGwӈUƊըyMةi|l(_׏!d&(;Srp5I.J#:\FY$SyMDvBsB2  i΁qh�`honhj{T8b=Yg"΢4+ `i;`2%<t{6W#p앂L_XmŪ7/1\4*6*4U#^rf8::RqvMz,nT;ϯ/$a1-ES,3"_pyணrӫ X%R!pz `ڲņjT^j J̖WBEs Izގ8 e,u :Lʜ-Lk;:[-6l/ %3>[=Cf3^BNA`/|zR܄)e(xh�Y)ꔞŮOdHc 38ѺL?:a0(2aV~-Y6^B4*VȀy50a !;[2=2K>LcmU!s0Ϗ T����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_wipe.png������������������������������������������0000644�0001750�0000144�00000004001�15104114162�022224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d���tEXtSoftware�www.inkscape.org<��IDATXW[]Wuۗ9sfN3$M&Ѧ R-xy*} R+} ->ւh*AHiSۦA3Ld.͙9s}u߇ 3әPeֿBmx(C"Rʙo;;o�#PJFU`l?z0"fF3_Ms "h`fcŶ&{{ z\ Q k-fggeٶ"yFFF+O;gxZ<=6&8w=}m ODӹ:Nf_<sLF_Dwӧ^scS'lVQU|dChZt:hZWܩ1f[} :CChZ_|r#L 35%.^t;x-ԉJ�G}stZ &��$@$Vd'myyN"<`c�A%n+�~�@nc088:_wpOc߫'~sw~!:{U7)n_^'|p7BSG(�p쪆,Z%rF(.Aɏ<[_28wYhD ,ǻ�s/}Dl_ V ՑV�pB� ȳ\(1~؝{oOy?ug4#4MZ=Z\\茎 O_yi6Zi57?Ph4F}n~JiKDۡ𩇏e�kO{q�`lY*D^έ:z=Z"/ !PRJkUJVZ2sYAJ)(xxZ]N$Ź1smt.B'p`RH )2`J:d\ !H)%ZԯeX ]Y=@m?cc )sT><cc<cR%(*yJ[TyFk+*1y,b\(&Ϩ\+ת53::6. 0 Az RʬVcLU#Jab13s_+Fy-@&=$k Q6pi=]TRÃ@CA1aZօR*J[=ϳ*}s. vH{zk Vr{(( C|<o*aEic !DZV4M;wBBk]j^dYmM Jq΃Brۙ3PT+W?{噙˧ )l^&<;J",Vp%KK3aV굁*IN<mI-FNf/K!KN{&ϟ}9<IϽ¼V$_.şN<kcTKJ�Tۋ`JqQ乔a/;o*Ǔ$Gdž1nhh0yR$16K`U*6FCCjlO,</ri=22|ujv�#!@MJ)`ŷi[q IlN֊_3H !-˂iʁ 2 7JR(mO MӢ`w5̤ � � @`kXLyEq[mCDUfn @D֮O}z(Uś[u =?ޅy `3+`Ξ=۟?>wn?8F�[crC6^g]f.v3ϝn�x:[ND@s։{vt>'_.��.1sFM(�X9!7=|=� 3;�rF����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_visithomepage.png���������������������������������0000644�0001750�0000144�00000002542�15104114162�024134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxVYh]Ef朻i4.}IKVb0T *Ji16u"֗H}qbhJK-T Im51Mg97w7l s30nѰVC^#c Wunh)'_jE %8[X c'Z Ē@eXa0hr@d=N[`Uu1DBxuL q!p[UYXFWE`�xx_]FݢE'!�w8x7L0+cАi X !3iahֹY�dSҪ,EkV6] P <r+.Hh8X|s++hܰЭ< r�T9!2d%seHl|Ā:B^ǦD[[1bU1Jз9ucp0xkނs]x�v UH,!Ekv4o?=1DbC>&qm4_C M3J2òb@@�'mۂ8Nh}jz }ƗC2hy<JE$K,Z*�Py 3C 랏v4nݍ8uÏFΙWMKQ'E bBIO7adMou`uK=pgHf8h޲$ %̖yUa[^EM}+ُ_Ι5ydQծy�w<؃ 3Χhl}Y%)^R3@ '%'PN!}(~K(*SۆU{&Fvi};<%q-ϥs!2^s C.p0z_Y&iOhY}&wA=�w^KEfRPA�I)#5SLc^{ZF3yby=$eURx\H�uݔːz,G5E$;߷ҦJR⒫T.=kzOQi q"X_ld\ Ө( }fe?y9YqH "Ԅ8u>{f;R 2J|j|݄QjrO1QJcSE ykyE6wۨWb,g˷҄(Jsq J3䡏97S3ARx,hF gVs&%4VѨHP#,˂*Q�l�huHf`�'����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_viewsearches.png����������������������������������0000644�0001750�0000144�00000010214�15104114162�023753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  (`��+IDATX  '���������������������������������������������������� ��|G������������������������������������V9������������������������������������������������������������������}��� ������������������������������������� �w���������������������������������������������������������������F������������������������������������������� �' ���������������������������������������������������������������������������������������������������������C �C ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������***�������������������������������������������������������������vwu����������tvt�����������������������������������������������������������������###�������$$$��������������������������������������������������������������������<::��;<;�866�����������<=<� ��SSQ������������������������������������������������������������������!!�����������$$#�`_]������������������������������������������������������������LML��������MOM���������������������������������������������������������������������/]�������������� ���3��3���������y����������� ������������������ �^������ $3�����������������������������������������������������}����������� �TQL� "%����������������1�����������������������������������������������F�����������:99��ddc������U0�jih���7���������������������������������������������������������nnl���B& � � � ��p�`_��p5�##������������������������������������������������;��t�EA@��� �������F(����FA@�����qqn����������pol��***���Zg���������~('#�� �����������="�}�TY$������������������� �����������������������)��� �����������������843������������<=<���RSQ��������������������������������������������� �����������##"�][Y����������������������������  �� �������� �����>=;������MOM������������������������������- ������������D!����������������������������������������*,-0�&� ��������� �7������aa_�,-+������������������������������RPJ���R.!������4�O������##!�***�� �������887�����=7&F� � ���>;:�M$#� � ������WWT��������tsr�  ������������� :J3�� �׮���� 4������  ��445������������������ȒB7H1�� B��ۧ�(�Q��F������ \`6����� ������������������������E��ק������>��������� P6��j � ��������������n��������������#� ���Ӿ-D�0�X>�������������mb���������uw!� ���2��a�����uw � ���2��ZQ��<p4I#���X>�������������������������������������������������������������V4������������������������������������������;��� ��������;��� �������������� ������������������������������������������� ����������������������������������������������������������� K꘣nb����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_viewlogfile.png�����������������������������������0000644�0001750�0000144�00000004260�15104114162�023603� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ;4j��=IDATXGW l=3?{6ؔ5ࠢRABiZ6�mJKR$RX I[7n!PhIE%ˀƋ?~f羵k{Ҽ̼w{[ 8tPiOڶ5=8G.bp>Msm]wVڹ,%8K^ >|2m$Igv\m:^۽ٺm{ Ue-wX|_aY.^�ǶsϢRn !n0M V͝#n֞m[_HYhy6KiH|TX*'GJY3]ذYL.*\釛PɷN]m ?._=ŗKX:�$zS6b1!@Ccma)y1N:# |IB(//C X<cR~7n#"(m Q:y&NuQ>;wmmm 䎀amtʲ-@HJX<BQ3jI*ϧd=G2"g{s=LbnM~a4?X)DGw }I$'O xtP,oK&Dh2hD*bhzя;UUG#Q(#bD\< >SRȣ0;^'Ņ|~�,O>>w_4ӧ�zߟbFK8a\R5ŏ-Ľ9@��e+㈶|z8BaBqx؂p'.F"I, $,.ts.!fl<F[GV bc0E̯!�"q N<ff0VwDdz ;atݻ0=ҾX,?6{}}hq4Xh!fg&'|'Ϝ%%,oE'ΑYBn_CYo^ p NA?ʢ$8O9yin> 8u&`rC8}}H LRѓ(g1zuD"B(RͳAlt:10{?(b`:<L? WNxr\VBJ{~1ޗѿ Q "Qlr44UUB27. >d7o:V\ƙ7r:rY!i,pgQ̉" ׮]C̫$.Y Yh)9#8r, [_ax88@$k׮ž}2f͚̜|@x<[pD5jåݭx Ғ%Q Xpc!o<  fvx9Nuuri>i*I2=<|2;Pwރ(WHXN0q|rYbzOߏІ 3,|pFn\.RbaA|f-^tf#U"<Ū+YK=>b "W# biFMf񧿆$XzlwA|c8)|^7~U:WaD"YDI8! ޲ ?.ysim%N^؀nT U/q%QJgf 9NC x!O--Z.5#ߟ7oI(&bgaޜ JzDNiJDz|MCtFҴ)Ԝ\з%OYT<r{O4V?18z)]'ktPOD1>rxsS+7ߨo3t 55rvB�{{+3[TŞDZ;Kb!&ퟏ` |'lÂF HDٸ,YRuAES翺L3}]g8鍬}nO넸kPJ(*+ׯLRA#LJ`Ή'!|j)kv =T8j~-IN/6@'w곪w+u—~eAo����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_viewhistoryprev.png�������������������������������0000644�0001750�0000144�00000002311�15104114162�024553� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��kIDATxW[h\E朙e&n%hj%!JIl-BDPP(}hQbM+*V*SQM45M23캉uC9s9äXb`˺`,[2?$3Lvo$, x|K7^bG_xăDXc~g_aiKs(a7$14&±$‰4~'hI& Ih M(XK]hIt}l˂k[p\jzv]sm^0<"lHnDI@W�B ~"Eإ<b^׊@(L;o/(x<WjVO6njO U#_$Cj`T`u!^u}|Ž-jD˘<p)톲Ak%7};[2 ,G!u^ eiw33!Y[S8tA| I`j}[fGf9;N㹾n*֬~E?|p4 ?Xs�Ƨ߆IJ|Xȕn{hM»gywFK Ha>-F0HFOrr/O025G D@̇ G#S8J#w?ּ>MQ$ u1صngUCڽ(�q|z ;g|XR,/* A"Uu V a҄x='I/NPy%u.OIOe2*mTU`&Q $+ @j $ppRB0 j`\݌�\*|Ddt$HzCBүYܘU]!ޘFףuti% a96d "05sO] r.$j.(Fo8[4%-i"ffqqlv5m~ZOP[X$j& Y1;z ;5+F]?}l l&kgyjF7>V(CjtXp75-Ơ}NV֦U.*l?`� m1����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_viewhistorynext.png�������������������������������0000644�0001750�0000144�00000002333�15104114162�024561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��}IDATxW]hU;;&lڀTTl-Bj y}o"*}iER/6`jHMqmlܙɒlDFp2;n9 Rb# H+45+lЅT:R=FUG!!apP/Xw9#$ؾ^tguըDW7k&b^jQӀLN" L*Ȭ혶G0L<t*$U[u e[i4hiH ]nK0gĦH+DU*e0 #7xۧ2!tmKs_{!F>f& BM@?Ek"!c@t [G`d)N?DIjL 8X[SW/@@AP(qA lviyOBӰw?k7z҉`3^L@�27NcG$F<%vn=Dq9z}@�prwƜǵ_/l2>h! 6};8=K =aV*!)\ߚ[[;TIEP %%ǡY˞"Ő_UIE NEa u?+봕 'ñO/B#YIkX un(1&dp+6G! NG`__n< \32~1; 5R Ǽ)pN :}�i>\ڳxB HQw~7_x /4\ P ]t M:#4qvQHOX8�S$ЀJ>�ubvijᨭoΗU{ݻ7HhhiGt#4mvha/\sjF2ܙP@jt(3'}B ed`rf SSzhM!Ut7آQvڱbNne+^yhpNHo7j~;|=N݈;#2+*kgMg6b_i-Yl^-UzX͊IEŤ{WDS{n%ErY-%�vF6c����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_viewhistory.png�����������������������������������0000644�0001750�0000144�00000002273�15104114162�023665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��]IDATxWMhU̝y%y 1J@h.\rn n ҢE (]XZ(&jmb5{<sg^fҼy1}8p;w9;s,^]ⷧ^>&}ET%/:?C?9lɀ@:X ^@yBJqCǁGO|rpkW$<~Ȼ}4T)eF7՚v}<s_JR<c' nMR4mF|YY+"{AVQtAf H *]7$M~ Rl; ;v#'N-vx0qӃ.MLY`J Y Ey |Gq�!3LD Sz+'= i*;̢Vf쐄.ЩK̋+U!i#UvA1QaZG RΨ(Aj(P)$e4EO.�+2(J1)$ "xz;jhT~{B�:PCB#1.D ,aHb3#YBC}B/O <HsnS@$ Q\YpkX[̯0,z=C&R 0.Dlf 2|ρ*+?COmJ'Bі<뎜B6JSJ;("RA|[FPИSA'հ<; ~60d3MF89/{ A%  (|lT5ju]3>~Ϫ9w:ݽ( baXpVfM OcS(M৫b7)" \FgVq>NjEC/ ub[oUPL@B]w=Fnpk8ʅ`mTט18o~dםNϷ\7 ~ZXЫy&_7vqq/Wpak#b[b,Pkar:50~��c^ B����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_view.png������������������������������������������0000644�0001750�0000144�00000003144�15104114162�022241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXmh[^]ٖ7َ_j`[RҒMIf4Qؗ 01ePɖt]^x mΛ_f/8NHeɺ{!)v¾큇s<?s(8{웚 !*EAQ,²,Y]oLz{{K3MӶ,˶,u=lR05z3dӧO 9 !!0M2t]G99#`6`0ض,(5^cf J(*|]Bۋ*Q в PlafрO0BP<)P "ܺu]vp_ O�ё!ߓ%sYZZDJSYYEMu-p8غuض⑒ äR\5\._>AiJß1<4}/ܲf|Vnfx3~V:B21H}{9j'o[KU@)PXBޡu|Z'uouu󝷿Dvr)N S,sQL �q;?ā0_}%r|AƁݍwŴž}/'!m{�Ť{vos{ÁhNMrQS?4ĶۙGJ%Ⱦ (2/7f "M CZDZ`CT[,3Tϕ\u7e az~ SϰLk E� I Kw-r{0t$@�y&MsbH`ˢġ9q]L PYI34m'#  N#K* ̭UWW*}}]= /?wPeraFZ1 ~sss՗xloD68+$2** ز`G7CLMMH$n\RѦMܸq(羽w~!#3<꣺B0,F兩n"m5%IϹzcc /Auv2@"6>'m \l{&thNgΜYb!Rz1MVVҌ{*vCs:1I,O?�PDQ4Mc|b1,ŋE=j_p(@4Eav6(3wI.'~p8B=LϹ_PQQA0n0??dv>ʵkWL>{Ote5^=A_rUv|8P`]s.8R>EQmx<z\ܿ%]IR,//L&I$$ 8TGbs۳,FZ67 vzzGNS k`)FU¥K;vVw X}Psj W <WV]kEۀgZwl~vF,(%3^TK p.y� hh W�/ F ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentpath.png�����������������������������0000644�0001750�0000144�00000010236�15104114162�025044� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  %*��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_��������������������������������������������������ֆf $A2_�����h�CX��������������jA:)X����ⵗ��������yO����������������U6 K. -O 5c��ݭ��}�� �2�#��������������}L ;f'�p�Ε�!De�����FJ %SWd?��������������� ,,p���������@�d�|��������hA zMU�t��1��������������� ��?����������������#F ����-��* ������^+C9 �ݱ����������� EO�&������������������z������(I�`��� �������  r(H���������������������;����������������������Pӄ: " ����� 1�vZBxZ 0�����������������������������������������q�����������������������������-|Y������%C� ����|(B��������������������������������������������������������������������������jS_��I�  pn %��ʞ�������ZB������������������� �������������������������2 8 ���!� @,J������* � � � � � � � ��b�����.}]ꙻt"�M� %e� � 1����fa.Q��������������������V���������� �'� 1^�� �Ҥ��� � �$ ������������9.����������� ��%�� �������:�� ,�* �#& ��5�������������� �v�������������������������� � ����%����(��������� �=������@�ַ�������������������������������� #E����?��� � �� � ������������������������������  3D�����C�ߥ��  �� � �� � � �������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs�����������������������������������}������������ڮn #������ d�o� �޴T !�� ��羸�;E���������������������������}����������������������������������������g�J���I�������ЛRe>*������ "��ÿ�|�����������������������������ܑ�;���g���������;�;������IP�f������������������()�\: �����������������������������g%p�f��f��J�;�������������������%�*:����������� ����������������������������������f���fې:�:���#ߊA0k���@���'��� ���������������������������������������������������������������������$&,������I������>zQ�������������������������������������f���ff��f}��� ���$���6���-������ ������������������������������������f���:f���::��::�:}������ ������ ��������������������������������������������}ې:���������f:��:f��:}������������������������������������������������������������}������������������������������������������������������������������������������������������������������������������������di=#����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentnameext.png��������������������������0000644�0001750�0000144�00000010236�15104114162�025551� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  ):JV��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_��������������������������������������������������ֆf $A2_�����h�CX��������������jA:)X����ⵗ��������yO����������������U6 K. -O 5c��ݭ��}�� �2�#��������������}L ;f'�p�Ε�!De�����FJ %SWd?��������������� ,,p���������@�d�|��������hA zMU�t��1��������������� ��?����������������#F ����-��* ������^+C9 �ݱ����������� EO�&������������������z������(I�`��� �������  r(H���������������������;����������������������Pӄ: " ����� 1�vZBxZ 0�����������������������������������������q�����������������������������-|Y������%C� ����|(B��������������������������������������������������������������������������jS_��I�  pn %��ʞ�������ZB������������������� �������������������������2 8 ���!� @,J������* � � � � � � � ��b�����.}]ꙻt"�M� %e� � 1����fa.Q��������������������V���������� �'� 1^�� �Ҥ��� � �$ ������������9.����������� ��%�� �������:�� ,�* �#& ��5�������������� �v�������������������������� � ����%����(��������� �=������@�ַ�������������������������������� #E����?��� � �� � ������������������������������  3D�����C�ߥ��  �� � �� � � �������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i&;$ =F������k �޴T<f!����:�W��� F *��������������������������������������������RiDGK![9 Hf���:}���������������ފ## "������ܥ�������������������������������������ܑ�;�g��������;�;�������������������]: �������������;J�����p�%;����������������$o�:�����ܑ;�p��f�o$���������������������� ���'���@k0Aߊ���%���}f���::��������f}���������������������S wA�������������������������������������������������������o�:�����:�uI���������������������������������������� ������-���6���$��� ����}f���:f���:::����f}������������������������������������������������������������������������;�g��������gJ��:��Ŷf����Jg������������������������������������������������������������������������������������������������g�J���f|�o$���I�f���J�g����������������������������������������������������������}������������������������������������������������������������������������9:{�wS����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentname.png�����������������������������0000644�0001750�0000144�00000010236�15104114162�025030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  힘��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_��������������������������������������������������ֆf $A2_�����h�CX��������������jA:)X����ⵗ��������yO����������������U6 K. -O 5c��ݭ��}�� �2�#��������������}L ;f'�p�Ε�!De�����FJ %SWd?��������������� ,,p���������@�d�|��������hA zMU�t��1��������������� ��?����������������#F ����-��* ������^+C9 �ݱ����������� EO�&������������������z������(I�`��� �������  r(H���������������������;����������������������Pӄ: " ����� 1�vZBxZ 0�����������������������������������������q�����������������������������-|Y������%C� ����|(B��������������������������������������������������������������������������jS_��I�  pn %��ʞ�������ZB������������������� �������������������������2 8 ���!� @,J������* � � � � � � � ��b�����.}]ꙻt"�M� %e� � 1����fa.Q��������������������V���������� �'� 1^�� �Ҥ��� � �$ ������������9.����������� ��%�� �������:�� ,�* �#& ��5�������������� �v�������������������������� � ����%����(��������� �=������@�ַ�������������������������������� #E����?��� � �� � ������������������������������  3D�����C�ߥ��  �� � �� � � �������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i&;$ =F������k �޴T<f!����:�W��m�;E����������������������������������������������8 /4� ������ u<f!�:��o$�Q��9<�&ńR�������������������������������������������ފ## "������ܥ������������������������������()�\: ���������������������������������������]: �������������;J�����p�%;����������������������������������������������������� ���'���@k0Aߊ���%���}f���:Šk���@���'��� ���������������������������������������������S wA���������������������������������������?S������������������������������������������������������������Q�����������������������������������������������������������������������������������������������������������������������������������������������������������$���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}��������������������������������������������������������������������o����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_unmarkcurrentextension.png������������������������0000644�0001750�0000144�00000010236�15104114162�026124� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  8��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_��������������������������������������������������ֆf $A2_�����h�CX��������������jA:)X����ⵗ��������yO����������������U6 K. -O 5c��ݭ��}�� �2�#��������������}L ;f'�p�Ε�!De�����FJ %SWd?��������������� ,,p���������@�d�|��������hA zMU�t��1��������������� ��?����������������#F ����-��* ������^+C9 �ݱ����������� EO�&������������������z������(I�`��� �������  r(H���������������������;����������������������Pӄ: " ����� 1�vZBxZ 0�����������������������������������������q�����������������������������-|Y������%C� ����|(B��������������������������������������������������������������������������jS_��I�  pn %��ʞ�������ZB������������������� �������������������������2 8 ���!� @,J������* � � � � � � � ��b�����.}]ꙻt"�M� %e� � 1����fa.Q��������������������V���������� �'� 1^�� �Ҥ��� � �$ ������������9.����������� ��%�� �������:�� ,�* �#& ��5�������������� �v�������������������������� � ����%����(��������� �=������@�ַ�������������������������������� #E����?��� � �� � ������������������������������  3D�����C�ߥ��  �� � �� � � �������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i%2;������������ A8o���O>� ۉdF% *�������������������������������������������8 /4� ���������������^zz�^�������������d�������������������������������~���������������ފ## "������ܥ����������������������������ܑ�;�g��������;�;�������������������]: ����������������������������������������$o�:�����ܑ;�p��f�o$���������������������� ���'���@k0Aߊ���%���������������������#Č:��������f}������������������� ������-���@lf������������������������ɬې:����:}��������������������������� ������-���6���$��� ����������������������� ޏf���:::����f}����������������������������������� ������ ��������������������������:���ff���:f����f}�������������������������������������������������������������������������}:���ff����ff����f}������������������������������������������������������������������������}����������������������������������������������������Av����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_universalsingledirectsort.png���������������������0000644�0001750�0000144�00000001710�15104114162�026601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  *35��gIDATXGKHa? f EaAA y7 빬MEAPQ"++CuY0%y{kka̝7w.s 193f!t>hTL<IK{)=8IIKSpuzllX~ͼ2tW XR˴Yk0LQY6S%6nd6O p|.Ɵ6Wq3 OdS=-٭7/:p& fòĸ0n|<?`�J�t`0p`/Xu-?EsZ8o;悃`jF?wX>6%PfvlJ2` *ca F@j9eXj8zsjA0�.]EC{!\Ó꺳=0tS5*@ȕ璉ƎYӰ6WP1NRϽ9JI@Ri)Ks+(,g\%A=Π~jF5} VzPStr�>Ut5x _4Q,Ԃ@Q`!hk0X µ@+\njpU, pa~_ 7"E0c] U8 fujQm_ZS>;ڈ~X.,o.se{�S5vA7[ qgKSys<wX6wmϚ%(3=<(fh|)\Aܣ"|nKȏE!Ÿk.堃C ����IENDB`��������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_treeview.png��������������������������������������0000644�0001750�0000144�00000002365�15104114162�023125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڴWoTE͜ڔ6hoJڒ`$4`Ŀ'[}*#hAI@Bb(t-]vҽso.{إp_2˙7]~2!c?^>e-<R1߶CiX 3�/{q}_Z,\:eʏ t{4t�M(\=!BE۾on0awvӯzjwj@fPd�8V 0odPk@cYpd☼0 ]q %\d?pV`ɫg+ƎN2z<5Lq@(Gy.MOA{Ocsk OD"lE"Pppl|N~ ;K7uLΕݙ`5m�zOǻ%" _s#OξY<vyhO@˶v ;,›0Y3 SώiΞxO+0N x/-8$k!\kloa|Gm =0 &F@g+<LVdr|O%jEX l~U]TlDTv]_2=|,%K|ij)jy + 1$cELJ?v"]IK�&M'ͦe|̐it|#%5W,\<S]w¢ѪB0Vm#J{n+s8 7qe vj +Jգ;)=tsfaE*:SxE�0/4ZtG)rM[7W(%S!0�*kvFy_K˓$T=WPFuE|-8SfŤ�d.bkFR-8&# @ǁdŚ(K>AOFĴq]cPxJ2 (Eߒ{УDFe͌*圊џ/'յ$,"H# 'KsDF|2((2L OQjttq Oq/'5`*�FlDzHNH2:BJJQ5)<c!EwI.([S2{s³ٓTnL[ '5q[ nes X' ìJ mKddT^`�N@����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_transferright.png���������������������������������0000644�0001750�0000144�00000002327�15104114162�024153� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGW[lUΙٝm`i/G/ƄTKń/bB%HEb mjbMVx#VQϙѝuT3g͌p7h?~&+d2f!BN.}w6jm6oADА]`{shUPnY so4XWw|x&M|�\/VP ?}=n'KoZ7l6 !Va&R:k#! hX</{:="]Iʿ힕ɺUBO&<؀ɋ+9KKwB<z΋qLNtTq 4x0A34.hYH]Jk^ ZO̓J  Jɥd+aBVdɱ  0Mm\*=VzXUh:RT*Ck ISM:4N$-*-E:<^`;"j K -hזñ3ZбLe΍cN(!·of~v[W8 PGQ4ӊ4{q G5 .*I/穓oiaG`i y�w7Ak00lhCx\ r]hܦ.*< kaz?2ב>j ART~zhG;M*zW:IdIiJ;+-0c_F@D4x&7IBU"|hZ1\ADO$CF}q-w7wρb^&ƣG0<') CaoC_|c.|K(黁=ZXd;tR^RTF|vfZѳ!e!w5+n^G xX=Om=|" j 2۩Fz$d!.e6qYG>3~(Yv0k<8ph,: 鯄e� `c<\{%bttsx5qHxDx:(*(hKvƞ8~zZ]sK*+:8?,u'ga{vrz`l@6b ;?fX)upP,R+wY5q�`V����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_transferleft.png����������������������������������0000644�0001750�0000144�00000002246�15104114162�023770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��HIDATxW[lUefvEjфhܾ^0`4zAEI <Hz$Bk�"!D/>^4!h 苉Fvnw{sr90c `$.;0f-2 .:B[<e-lik:[@Jl pR0,Kn ˯im[�̢j $mJ# c=" A2 8}~-mf�Qo RD|ƙcȂiꅡ4-#p�Jtsʀde8hǢQҘ0 ktrFiC|ll2$M$\)H'�0dZ(z')']{�a܃'w57><:u Բ˧CJ !hF&Մ.߇e=5[TnQmN\)<Fu; *Lu2"Di@ְ/4:㓪LftyWkc<@N~(kҽ,eoI@<q&0G;ZQ�vaI<z|NPBh<{4^S`U@'` 51ۧ7V<:Aյ=f*30Ā PGpS-̳#WVĉO%$b'12v̭Onw? UpM9\ry�)y()=Hʍ̖(~? ~$ ^$ 7+iqG.k$d$bݜAȸ8ubj23- ]TU|dA(Gi3X>ى6="Co|{ng"rn�{׈Ɗ6^jQS*ik{"%/i(18z ٿ1>YU{,^l?8pd?}n;Mk'!9M}Ǐ-E/fsw@q|{|Y�OIq,dmڤ4i513+Qcf~ԶhDMjx_Ia&k7-`1 H|&w{+�dgI����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_togglefullscreenconsole.png�����������������������0000644�0001750�0000144�00000001410�15104114162�026210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sRGB����gAMA�� a��� pHYs����od���tEXtSoftware�paint.net 4.0.5e2e��yIDATXGjP%KVB v1z B2⩠ѡhh;eA I�lY:dih3C~G+Z |}>~::eK;= oIeYoL׳InyCP84�K(8~A̐T<p̣!4=F Е6xZ�5< @c*=4m(zKX1F34/Uԕ8i�H1zFж8jM@J@Qmk*wEGϒbyqy�?8/4k.'x=>�o51h|�NY"!''6,^V;m&ѐy[3O?K�H'W,2o5Ϫ$� &!;bCI@VFv2 ΄+se@zNV 3�jr1rY˽71SYH˕yKh�iqh-!K8PPC{ 1WZtP[B-\V{l6[oZ5,Z %.$]%47%EiyC<p;pk*� }g<4ݧVpZ}+UB׷����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_thumbnailsview.png��������������������������������0000644�0001750�0000144�00000002456�15104114162�024335� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼW;UcfCvE%(&aMW$$bbQ)RYHaEAZDXQb!>PL*mš Q-I9眙[ܻ{^w9#�BȞsL/A!]_. { c-m|KTRsWzN-߄V8&f�Qg;m!! fcِj�zG\(m=MLDxp{Fvl֕[ �D0XYY MTVT+Ţkh^8e 1^8oicUL=<PJ߅{܈~ǖؿ,x#]K_2p#=`q>bT�FBeL*kZK/#m:udQp3GAP1;'%n �%$5rs^ ΓES~J9FxC9?xФ|5(ZbʃtnntƷs$Hd`�ZQz \s;K~Y1&PF:Gy�o/bGJE ׾+&rJ <�^"v�T@|gɸn sրy!,V:g]�@2 q?f3 d}v@odS|; π\zKߟD,n;L?&紐.h,};<-0pՐW^ۆdR}b )>P焬�K+Mt3�'?X5 őj88AIJR3_귨}.=!?zLN~Xb`f=VdB oO<k'8~ߕ"�?k􎱙`&\\㙗eFSRQuKK"+G}WR> P̬^;d؇�VXc @w |Iܠ„`Iukb7#7ac0N|d=�@S\ҙ̚akthv,=�( Gvp—�qa[b`&l]ql@J;N �Tn͋E5#}F*-}�=̟WgB =7][ow}qLe*cr \G̿}akNo v/O {{Jyo ,, �j>)����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_testarchive.png�����������������������������������0000644�0001750�0000144�00000002574�15104114162�023616� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIMEg �� IDATXݗLUe?{νWB*t`I _5 "e9'jLt 0f\%s4p$L30,u$(s\lݹy|9/C ~d/uM,zPCa꛹5�/H7Ug8AWI/Oq =%;.כܗDdNW1gC ŸY;e bS)YH'`.HjhD)GBpӷגן|p@4L1L B34V4 t$`E\~ BeL|/V4!aeij$ʗڑvbmgً۰ u!ѥ3 zq5(C#u_4t7?lEH�ôX_nk.};$| ( ukϿ0ɽ99Pu5D$*)?|,߃ &n`g)�[@(ÉФ,&+Z>"g#O k R}jRCZ?{[qsOݻx9~XmEj,0`iyTlP]>JLF^q9ƭ!*@XNwre.f[b20LŲr*r6qG9Z?S+.#S7.`;w_taB,Km}9lLeR C4I*v{,9D;)p;{j*eTv%AIh8_IQf*a Tk ;qv 4\!!1!S 'zH9'nt#^+ٜ5%%�lNԅ2~8 nKe0"$X; WxXO[Y,uD}A3fPTC!`ʤ)#w~!YA NlFacF2t[K;!i㮹4hn癴O>Ϛ=y+tǏ&fL8!!Av4lFi;s۠MJg[KX@,Ǔbc)/^L3ڸK!1u{w0 եم~3km/&att,8_���.7Ёs ]He`;{fDSRѵu tP{H� Q_66y~'$u!qJ:pс"RJ)z@"����IENDB`������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_targetequalsource.png�����������������������������0000644�0001750�0000144�00000001620�15104114162�025023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME'��IDATXŗOhW%EHJ7X n4.,\HM7]IlCBR馛Bn B Y.f%"0=.My&is63;={]&:af`@T!0Ċ-,<9;kJg{6>fa*W~|0T|d#c@-2ΎQ+)ӋaoLEdAPJJA5%Od#z8L(@{6j]c+jݷp85RHjNeL:b$O>bD9iJVvM^:L^'KJ@u81�}ָT Ppp9><z�I3֫c%n~%=m_i@"7qOpYL4(&�Cnu=P{3dS,MȾvIl45|\XEEaBҭEo8mT@L'RukCMh7"gP^R..6Q$hʔX1籯gm|J#P$&FudͶ)p[:4sb`m1Vȏm4&=ފ[;gvc'j8=N3PmݲbMQ 俱w5y{E+nvˊ9ޚ@:]yln*W$y=-p($D+WVyU{ܡRW^GG!GP>4 x 8H]J����IENDB`����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_taboptions.png������������������������������������0000644�0001750�0000144�00000002311�15104114162�023444� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME38D��VIDATX[lUK۴-]X h݂R .HbpqmCK4CLT(ź-)bR4]. )bx$prN2̜HB<d޾{MU,3ˋlNj$<䋝t0 ?e߆.?SeS|z mdSu;,n߸rJ Ih"�!bcKl6a Ԫ 7GMq`B3SR*x p# . (S`|4! TcW) 40yϝ:4Mէ8.w}.!5�JTEA&7t8RcABoO>C]Jp;VVEO)C3Qeu8vR}\7ttuNpپ,_@o׮HS|.J>WTe 5r:abu[彖̒c)eт:c;% \I&!2gNapE%ھ8iM C:эi f(K DPῇG<~*@؎@ͷTz}>gVq_eM,n>ZдO'A@ LmB>DQN?Lov]s8UWWjU®倩N XT B PZZV b!pbNzIdsޯy~X,oг�^o>ߏn$1YphׇeO7<&LY>,w,ɲ~)ԐtOp 3�0hj@byt(esY(;54B$)iT" �8p?\T"igBG1i<6C[n-C"j@Ku˭6ŀG4˩$IjTk?�2k/[ЁM!.Mv\pZ)+\ !t�XGTh_9#����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_syncdirs.png��������������������������������������0000644�0001750�0000144�00000002720�15104114162�023124� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  8[?~e��oIDATXGWmlSU~ 2D$ M4#H1H DI?cLL41&H@]fh $ cLvVv>9,*'9}>9Ɖȷ;�0L6ao||[u^]ے&7m.ЍXjt;Ry6BM!; v9҇p986 n9 Ρ8 !EWӉ@l`8-٨Y240| DžKKjx$՞ uu,̙tV*f P:߃r̝qe4U1H1ڳ<޶pYe:V"Wn?fŹ09Xg[Y4M�M<W6q|m.)] V@8Lg"peS$)l!N0φԀ<5AͅL1v~WPA>X ܵs 56"9f79BzW.c1|N\'5%آĞ(`qccUaַ ߍ3B�ʹO߸p*kZ('Y/ؚQHLF\ٙDm\i` I'hS7I@ 8Dr*�q W!Qr FHẀҡ^XG"ol? ,xL)er#xÊhRBDsM˷EsIkFE|kVKP|`)U׷MW<p\"QNTVn"nyiі͖Ȥ3rq{+B =2ѫ΄[c "9rQKXֺ$U"`3+*JAj mD 9ރW/gb ~.e+\(SD�cҴzo=>@>FxHU;\,ZLJ|݇:e,\q}@HpPuB`lŴ" Y4,5h!Ś:sHg>+$Yk<ED%J"!rŮ?acF+6*RjHu 7L#5t>!ݻ81@6(g/|F E4ճ3(E_F.Zoһ͖/N6(]M8Mxs0ŔfƃԪclL\`חhK_H<|7]dsNfVܿi%)HFX$/YNq5 Tdի3K?<o©/ZVPiZҡ5cUcU'#6����IENDB`������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_syncchangedir.png���������������������������������0000644�0001750�0000144�00000001610�15104114162�024104� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D��PLTE���������������������������{�uLOyzz{{ z { | b }_~`de~fps*w�0~�5}�6�7�8�8�9:�;�<�=�>@QTs�s�s�t�t�t�t�u�v�y�zFzK{M|N|K~MSUVQW����������������!U[]>LrGrY��� tRNS� -@CM\o��IDAT8˅?kTAsfFDMDb`Z$F&`7 k-dqM*h!$۝;彙]XV3wgg)C8tTYg?NI/ή{dq;*V**qTD悅/P/q}=1!w`gO#wk>^9BHȣ(1୔gg�A-P(;6 W(3 օK( -uGm%`6qU_(-pM;kg?$A ޯ鍓JH#|˷@As~?XGVۓ9 =P+0a�dCUQU7A+ɤg?8Vjwɕ/-=����IENDB`������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_symlink.png���������������������������������������0000644�0001750�0000144�00000001721�15104114162�022754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXŗMk\Usν3I*riicM,"n܈ 7\bJ446i-}EML}̝vn̝|s?#9�Dnۈ⢈�AEp׀ D]s񏙭rVvvvƍ(�9Z>Fu?wO=ɷ뼹3XZzhՁĴ*1f*{{R*xܹQLhҢ`0077ﷶRA %LLP*>MZ4F3@Gwx~EE p({�! _<g燾G{ƀ5ڐ2sSy� w΍�hqM@ @Ezu(+L̀#2͜) NDAH4h�^v'%F a&sW@(9/g7p[-"x祫mn<5X'b@T0V-z #H'5:GD3ʇ>Z&ӵ4wSXE;ls>xy1TRx]eNx0 ]n�pcZ* hW_DApm[)~r`&L$N jx^fTa}\?N3&krC"Zt޷/=IZAh[XQ k{Kwa} jz)>fX-߼ۛT~fTzlb:\1ua#Nbӑsm`XkiӦ;Χw.C#BmZ#hz"0;f%^!B+;~c T_cV?87@qC  9`^C�peIf%����IENDB`�����������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_switchignorelist.png������������������������������0000644�0001750�0000144�00000002731�15104114162�024671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME /3q��fIDATXGV]lUO?lK[B-[`bBjը(1L OƄ'#VL $b@IQTʏn)-۲.t?vgvf<ζ4!Гٹs{wslIXZEqmY4硤@&\6:E||[k3 4UgO#] Y x)~m:J*IzBg}$( W&'*4pFlV! ;?pl“{e+AcDLT$$#q<Z}-$mvo©/xiNFU =mHȊ-3|0;S[ - A  ]OX5҄F[/=pK𮣿i(J,wbU�.T!/S:B)ضiٯ u8LEYV�-^Ok>7z%Xpv6r`1Dž=_�<ӴL4rk(gS`S ( -֭iqΐ`)cZkC/-X5F7.躎kރYZ >dZ?ENTBucXŃH$ħGӦP ނUw((eS@6g`*Df`�0lMXV#=H< m2�uc z~q<Xj}�_awX19zF[ڇ#߸7n mH]99 $!)O.a"XRT:)ƅepJ_LTԴL܈M#iDkLZ.oGu\nH_'m&'@ÒYe޺'ho8L"e"khhwlhחg9h/-SDb8eH ؾ}Jrű>#%oÎ;rk|===dH]. ' 0s&zKinJuuu>Jfрr-FSS<OP(H_;ENfOODsImj=qYn|*`\oiiO?!;ɯh<=sC}5 C:93xeK?^rJYls~/'_ Fdٜ"+r=6ƎU[pwU}DplݳgOfc=Sq\M~8a26SԞ )ߡoo봥IAg^R\eO?ӷ4DTXlZ\-rzO G;aS7q35:h,a9Ic -RD —N>9d#G&$����IENDB`���������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_srcopendrives.png���������������������������������0000644�0001750�0000144�00000003333�15104114162�024155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��}IDATxڴW[lU]g@޶!DMT%&~ Â"C#F!HbF&ÆZ,{>grKK&t}g̜}{u�ք}ia@a;SlX7n"K> %3n71L�0[cd B 1} ~N@!zKS0sqOb4mC2ad]ә-Il|%lnE0#t6@ɤ*8P:n۲P*#c;BHi_ە)ܽŮk4dGz븵[R%It-=Ǻ!dHJaWF=c3)!=&"`ӳӊQ]!! 5 >?1G |!f>Y`�J$�:94DiرF"@(= &=zsX&,/ҊDi?ZǞQ"o #"fA't|9 3Rhu�˯g꙯]dpHg^S FO@&ZEf{w<b;O =SNRRU "'WLH$.ǁGd<|u]Uԇf @@(mg)Y"8Ni )'n &RDYO<%9 }ZTUz97E*,q:苈*b9gK�CU${qE f PIJ/�Ph(/ siWǯog+fm6*YN*(RZg{lhAa࣡Ae�@4UY01-jg8 RLkٚfu뀈r456hHJ#̖ͅSaL % &NJ]TE%j5)媽y*C!aY>(�&K~WJEA݈BbrT뚩 +(>Pk 0%jSxR0ؓ)cKy4#l _U*r ٩޶F*-<OL ,5T?$ 6|OqP@.�ĤY]#N^4?2 Ax94ET�XY难+h$~�W.HĜDԚ0 E%[X]?O'& /WUMUW  t^33ByW'YxXllٌ?fW_A^%<ów4CF\T䪱@1fN& juLg0fKmt9j,=1\pY:P19,aT.|RږAE<mQ9{^P�T0mP1y`ÒjƇM<<g}=Ŗ޾s#a.MG�/Rn]p|Ӧ<"Z^sJ9Tj"B^>w|%Bv /]%+!+nGHlm9<#EE3f �i����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_sortbysize.png������������������������������������0000644�0001750�0000144�00000002001�15104114162�023473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME Յ��IDATXoTU߹3ZTPj,aHK K/B_ $  dY*h f%)-T(fIՙޙ5{09P//yNb%ToRg]I $=vt.87ddD턥;L&\rSg뚿uN$7@wYsz!">Zghm8%GݷlJl#B> g8>ۼ_ځxZјj [:p[$ KfZ-#J{ֺ&J {֚)h_!T%! YaOSExpԕ1_q6#AHC6<\O?1Yl zb ޛX1@%k5CM? 3Nk 4(`4J -ŏaߊEyX%}QX[CԞ/M`4+rb9AT>"sb[xN|ϴ$0jD(P(e|'sbq\Z1 AJkc*^g{8$ )H S)>wIJkbDZ koҲlM8FCiEǛR*eXz|7nsMo@Ұ%gg&l2UCVe8dNV qhz!w؂ř"iKAomK`,7G _ᣖ TZ\_` [A5<$~^p5p}GqHς$LJYnXk5J&i]@225VF_Dchx4/3oZ+ ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_sortbyname.png������������������������������������0000644�0001750�0000144�00000001552�15104114162�023453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME %bq]��IDATXŗ_HA?{wՃ?^"$"ɐ@„,: A"!@A!T ͇B)A2,S,Nnoo5o/ }7 Yc<T~4.`ls8idM@ߺ?E- ; 5qo<%V%>R%JJg^B϶1=V^@� fsd*QX t |!s']X 4y/'.n@2Y)jz>,�vog1ciO}ӈ %Ԗwsik0NfB�-Ta"'!L:R`9zS@)Nu�Ѐ$�fW~6`䱡bُ4�y X6ZS1uvX,L9TkdcU@40@Fyu#@ ,R�<V@o�dH#t; o p<c` u |H2/�<ƕ1_�iUiym<FvӰ҇@2V gG (Hs |bWt0 Lh@b `7)PL Jn�7L \M,` K܀Ptk~@snb ZkGlێs#0�2$55mt"r8SL;0K7 qR����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_sortbyext.png�������������������������������������0000644�0001750�0000144�00000001360�15104114162�023330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME :j|��}IDATXŗKTQ?羙EA("\$DD!.pB"p)EDJp% B-Y( A0 y?m8=ufp>!5g0W  iAY]Lc\t 3 X->Y]5SoΘY34qpV0_a=|Y6Z2_37?ǥA~z(P PP1ǍAJBK"g^=ϩ>>,k\%NE&,�o?gjز1#@wG9K�ǀ?d�f�N�동q1@%k =@X b{gX @_^F�`ٷ�/_\BZ vhrGf�ڑ@{Ǿy 791PCh 4�pSvۚR5=`Z4�66)�Y<U)P ܆ؑ^ * nR ёqX nGq$(Y`9V)�* +p0}-UF�Sbt)C7~pJHN'cp.X&op@Y����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_sortbydate.png������������������������������������0000644�0001750�0000144�00000001640�15104114162�023446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME *]��-IDATX_hU&"VAE4miERHQP k(y S!JHR *QDSFXMQv;ׇvfݵ`˽=s?+*wd\w( ;lbP|N &Pv Sama~a* w,;s{O8Q˕};7.-c .l~^LjwZ*twㇳ(Wӭw (F8]G_uwN!i –_uPMXƱQD!зk#6uS<n3l&ۃ:3QT/ :KL:2X +~GE�KsQ sJY\6)Rglv Ʊ jM1*٢wiZ uüԇONjI KfS IT6A `,gV^38s݇W@}V>sDYq+cOV@%Oȁ"}cV uBZ ij �P'H"ݔc<ZPO+@ԝ$soDҬ7,a3x2g[Q>*?iϮ @]ZρUpiՐ[ ) mJzcacTTwDbM.ȁ.!mN(jKP gX1@[t@)Եe`:./o�ʒF$:8>oeɌ6~17v�Wo 7jYk����IENDB`������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_sortbyattr.png������������������������������������0000644�0001750�0000144�00000001656�15104114162�023512� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME W��;IDATXŗOHUAsZ-hQTGBMK3E$H%ڻ\A\I %%TD"ȅaXBaYF{;-<o|jaܙ{sΜ33D$.}98Eʮj D6dU]|#'gr|llw$ &:ByjwNME3ߦ{ J)}B' @))k ,Ñf%~xt$l MncZ^B�NLP난b?pK@�ko1sqa6w/7T %-n|Kr ۂ~.@zJu@k GOB8dq LzIB?P{HE`|R$@HO@1s(0DYM& dX#l>X@D)P-z寫"ӘPcFX17@ Sg2f#.oD$l*R6ϛ@L:iˀn`D8\$9Q`K@Vsr_^j[iR0'ib@=Mi3@tfN &J(I_S#;m^ /A# x c@'p/riA\%"i$M(xQ/:c*ܷf L 'jKX\fN }-(� }_o?8ɧ@};ic@τݤi +Wx@JB w$!nbfK$vN+QAo[+_avp-k ,Qz~YwZsxf~/����IENDB`����������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_showtabslist.png����������������������������������0000644�0001750�0000144�00000001451�15104114162�024014� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a��� pHYs����od��IDATXG]HSa;;)iAfQAvc]y!M$dAtE FFDhu"R ѥ;Ύ9=sr.x=ϳ3$H_Ӯ^m=$s[7RpxtAVnzIay~5=[N`})m%B:?NM'"") e_}ԅ2~o§1Q GG]]?]7Y },α0Xd<o1˸d=UG'vՙX)W}Eʂ-ׄvж+S aqlxO#( ?hw`;gw >=m'de[PRs}vByfCq0x@s!tP#9V. w59mcLg HR7#i$.BYQ`2͘ QΤEB<ՂcŰe{YPr7Z)A3�xS z8còЮEf`Cius3%,񺴤U}׮*,=+; a2'CCP!$}pcrj+年4MDRai2pN\<_ I#X^;~u0�{Q?%;ĵSH}vQƃe�I - #9L iy����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_showsysfiles.png����������������������������������0000644�0001750�0000144�00000002662�15104114162�024035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��TIDATxWklTE޻Zh-J�*h,|AШ%bD4@"QBThA"EBki}vKwlw㙹nR4avν;|)fFS;jn _c᢭ǟ$>Y�4S%/mi_ƀ'K4&[ϽGWmÀ+w??͊*;B=1=-'4cpE[۸iA=&{ڈ#Вi ?D|5@Oc@@J![oDfc�HW =͡&f@&O;�TQx[p[hlEW%?cVрa1 f"|BO6a,{0U(T2)ʑ3SU-MD5$&\`z dpj珳] ׉6U0=6ޓ5)�p+Ӕsk=:N5@q x}CXy6F1$�[3)1HN/@(),ǾcFB [DS/ʫ!)k #lRW˿|"GPtIgLJۗ>B.i?{(,A+&K T+=H@ Q\30U3} bՃ[H0LT/EKRLW+ĮAA6|&Yz�Lpwx1Y)I;Q[%VTք#(�|O6wL|'wzQSEsŏr5/,EuMJ�crseЇ%sԾUdW*g8w/v`GEW?�Z dN/ihAW6' ׬GŸzL:DCt 1*$>-59իT‡ន)UWc=� Ǵӟj&q-Ct`KdoC?K]7[n~= x8b]+m%w>j&zS016CEbl@qp!Ŧg77PuMwm̾sYf ?IΝ`0b=uHY - ZSJLr�k)V?Cm3DJ,+y4ۋ{YmHT|^SS~zF%j<ʺ{+n@M+Bkn|LI\;&Fr|r^ok "[v6FtCet3#Y1R]l�d̷?'2iM�ѳS-MhD ?�E����IENDB`������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_showmainmenu.png����������������������������������0000644�0001750�0000144�00000001143�15104114162�023776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���s���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD�̿��YIDATHԱkA]j0 "h,XB+`'؈YC7cqIy_3|7{ ɐ0~!�A2dǪ5hgOsin ~\rM.\HH5͌ [,B6Z$C6(ù[DB 碩'*w}0w2Rn(=W#^ۅvMU*.(tը:nˆ#mZ``QὡLYQ4uE5х+DZOEβf}l,H'u3y#]7D +ra1!qg���%tEXtdate:create�2014-03-13T04:43:43+02:00K,���%tEXtdate:modify�2011-01-08T17:30:16+02:00���tEXtSoftware�Adobe ImageReadyqe<����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_showcmdlinehistory.png����������������������������0000644�0001750�0000144�00000002611�15104114162�025223� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ��IDATXGW[hWffggvvd5[m^(A7RJ ZЦE`i C-@`FPkQ#F&&$dwvfvgǏKp8s. oq8Im[0o|tgpyip4kǠ}eH\s`[&R]ag4_A*S*00ӽR%u!>遣>^)$Q@!XF RvLCou(A@~k`0[~*wBdD_cq+%jQ$nBH`?*PPd>J,݊`(){\qTGݺ(  ^d?6B0X.tYxhbƫb,HBCyي4}w&,�\u8mq BI5$ME&H8v U%i0.Iy"g %`w.-D"AEA_o/N ~;¥ G4"nO.�#DB 'T,_#5q;n4,IlWsщ$Vpk0Wt>6@) aJ ÓI:\Nś*"dk=y>,⩧DI8v&2!ǰlWsyC¢wᛖ?N7i&z85"Gw_<ec6d_D.tPV""I,&FБNQD ^޲+?< SX(Fp(dV&e};ׁ9TW# y:NȲ CO⵭^0Օ-D%:::H$< ܐ*aQYK|cWA0: ·*00ױo%U;[t cboVhgmp!MCǵ2gF#Z 8wO(ҭQt]J~]{>mhRwa ̋Y`j+ä;.*1 C_}$dOǠw, a)J*~e&T>=تʹ)+K"�ܣjqۏ#Ay⌕*v,os19' T$QVFޝߥZ!\B.ӒM)7BlĚc=  oz a૯/쀘fDvTav& Eق}mCŋZdGbt(p +Y?3A IȎͼmy8\5zHz΁^qehjjowep"����IENDB`�����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_showbuttonmenu.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024364� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME7ʕ��+IDATX  �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������� �����������������������������nnn����������������������TTT��������������������������������TTT������������������������������������������������^^^�����������������III������������^^^�������������������������������)))����)))���M<(�)����)�ɕ�)))����)))������� � ��***� �t� � ���������� � � ��{�=W�@ ���� ���������� � ��\p�?{� �GLN�� �B@B�� �:Lu� � ���� � � � ���������� ���� � �&).��M���^��"#"�� �;/��1� ���� ����rT���������������� ���� �ҏ��(j�}�.�(��~x��(| � �� � ���� �@@@�����??�����%M�۳q������ׂM� ���� � �,���0@���KJ�$�3�q��� � ���� ����������������������� �� ���� �&�y��� �ʺ� �8���w�H=�� � ���� �����������������'���h�� ���� �+++�222�B�� K���:��p�)�� ����������Z9������?��V������ �~�*�U�$���bbb������������������������(((�mmm�������������������������������������(((�mmm����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������������������������������������������������������������������������������������������������1�����������������������������1������������������������������������������������������1�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j g����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_shellexecute.png����������������������������������0000644�0001750�0000144�00000003366�15104114162�023767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME !&Va��IDATXGVilTU-3E(%H"$$V 1)5cbCTLHjфOKb\I@Eb LXLQQk)-]6<yev FOs:{s9^O_-Ce#f"T`Ν5;*=<lb_}ditբ$GB\v֒k0e8Kd8cdHuYZt7*M}jY> x%@!)z$Ud+JoX'qԧ*h_^ZU3múGxUlք/o`m=a1Iy2;3{Ix1LۃAj@3HN"\3M'Cc0F޽ ~×B{s:[XXȈg^vkL eب"ƴc�_X#](>/Ġ}g@nJlqQ,>)*! p]i%*~=&ibr,W8Dz�O6l$SU0/U#W" ڹsm{CDȑf1D*QLiСCHҨߎ�EssB1 PCʑzӦMغu1;O8"-l1aSR]G-ʝmC0tzfĢeݻEDMD+ Qb JV"s(㰲2]Yu B' umm$P$U/Cizg YVA_ӛ6玛G.f^FH?:Vgʏ؄/VtrjJk1Հ)(WgkA#WGV弰| 7dN7G iA #~{ߴĝ9�r "lB `$A ,EF Lh% yb3Q0p+fJ 5K8xEQDrvQ>dr�_dl}'|RP\Q_ss~PIsNyG%L̙�@ ZF97lpJf#wz�a+\tȫ9@7y-LyJ%*5#0N48k-BSBsdsV@1F3Jꘖނ>vAB3z8wpH2[r trG~D*ݫ2+"dv<@D0'OD43ޑ_yu—"Sz瀗<&e&\҇ Ϗhg:&ցt:#l#a N{?ɛed] y*<ϠIVg֣\Bb |W@lSsD>DJ"h)q8.mFD[ ehD xE$(0YGUAW�Nbڵ ʷ]U!y!cv_'w4g6fhCCLGbΝ8X~uυ>XAmvXKaTڤUtĈkD9K걤1Dz&-R..󜉃LvHy;2]1H{HH轀3ZF^<r^*IzK=G7QFdoK����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_settaboptionpathresets.png������������������������0000644�0001750�0000144�00000003321�15104114162�026102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME���^IDATX}pTswl$ D1H`A#Vvp1Sf[Ni(5 8ch�RJ "`[CiB@ Mv~q7]ʌu;ss?}>+R|Ɨ}+�2~ X�wR7pU" 3<2nARND�!7JNne>.orzW ؁  xi$w k �FkWDپ _ Q맥R4ߋ ('.H#c�d q=bw86s1ǐacOj:ޯQ3s2hK}eMI (%0 im]|v۲DG[ L˽|\kWN<Oaժw/l}97NMM-CC�L  7'L8 '?q } /zP4h~e5~:?�hFz<o?cYy� 0^Hnk&+@:W &@h"NGπR Sz( `9c!<ffM҅s9BzI*C^:= G Q*<^ *[Ϫ ^ 0E2#soʉHpp^Cϓ BQmex\ �eH �> L )h s] Ý~ݠOo3�:z':}6. rɂrggC:aYN0$`fؽTIB@9Ri=�E5n"#,n*$80@7H֡xѳhG?^SH!tBhwKkӴq,'vcFlVigϼ ƺQ#df_g/:k z?ʟ[aOm+@Pg<߹]z82[ؑ0mś�8t?#}Lُ¾^>M;<`5U=,VH�˶҈. |fdʓl3L%Xͫ�P-8r 4 2fMg# iG! DFz]hi=PmE 4eB]RwW\֤7x8hh4/#S&,b_Zwb9[L[Mӑd}Yl[&8 W7-VP(e �k6^{6"˂ǗcTז>V a 'ywc]Ď'勛׹`ą{Ag'R-BO]IԐ!+U`ŚR ;(-ZVlh}m iӮ0)ZkOnv�ԡ Tq6}Zܳ;9T\V .R?b|J_j'IKןgqtizLiX˅ ƕs1-P@~_t|5 |.פU>{8 ĂD8:x$j`"!^WXwK {/hUwB����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_settaboptionpathlocked.png������������������������0000644�0001750�0000144�00000002107�15104114162�026037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME8#s��IDATXOlTE?3onnwBST֪xJ x11jRI`<czу$ Bb`KPCK mvxm-dg~V%g>~pްrjޥttǛuW~L1�{߾߿O66F2|gW_>٫ Ny^qkTtƞu1  b,j &&pי TRJb� `l.8FmJƲ&jfc-! }g]*8_JSUڴhk ֘lj!1EWOӆ:>U.:,,y 8q^^<Ƶq|D I6%u$mţAk˺]K'εahLJgWh+䂢OtҲ/pEb�GXhh@_oDwYeL:ˉLLZvwl6*BE8F2Զn%^aw *L<Z #Օheߡ^\G h˭YG/"Ly. �M~6o.9HGH�:C]ncD H `5q tt0 0nDZ{-˗ \5Zrdzg3p6�>QWXK k<!B*\ah8�~5&-eHRY`LѴibh4]Gm[1-h/ |]t�AgHQ.H A:{,#0zVs4ʼMKSr: 7Ns�?C/H\4퓬3 Z!B28p S- mi13׸(`:k{IЄZsEl@.FT^`?q+u.����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_settaboptionnormal.png����������������������������0000644�0001750�0000144�00000001102�15104114162�025203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATx엿O@ǿvC;B*!KF  [10"$f(D !D;BD:UR@!?}~!~''}߻,9f&[���LQߵSOJӒ]E|rg~zC�ϫcFܧ!ĻLʮ(Pܷ sJ5MO@vI/cM'DLHL`im'CS `p3?Kx"H._ -9�eTŇn:?A';/skE~wxC ;S@Hu[T) jDi 4Txr2VgnvErHEͷ 1X%N҅{T*5""ڳ|F[ Dn M*ŕm𺨑GJT!tvBB A�UrCHA��z �Ooo#����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_settaboptiondirsinnewtab.png����������������������0000644�0001750�0000144�00000003011�15104114162�026405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME;X��IDATXylTE?޼R-[ ֳūH?P4Lh&P&jhP<- @rZjK[ڽ5񶥥5 $33B)lǹ�8 WnLĿ Hs$7?7v/ȋ䞅34DshN|&G~a魟Baz~dub屪!6(ue!]WDzW@X<O!'?yU}�3^ƔRycH\՚c sBW8 zPZR<b�̏v1 S~(%0 mٻ{Ws?\ d=gˈh-^U<b|_zӦDXn=>� |rlS/ssMۉ55sWa&yp#k7֒nZr5sV2v4TB$Ri:ۈDyƩHnHIc<*\ͦ˨?kN4PVrsbw ّP`zvJf\O#q P^pLzb8M1kL c_p??dbA5+(/P);ާR}(f=?a<,S' DB&ee5$ٷ ]p?tK,uGIԠ7o36tMǃO1)>iB](JBã0C7h^M=* ndŋp'?`y{k+] b !me`8h8(O\VQԵqy_ugQ1;7M珬N7 EKK0tں�Mض8{;ؖ s`T&-AQiJ a�įY}4ikm⭯0|**gZa g`�"cij=R=,Y/\=C<3CV8 nm g2)/4My+jU8{<'ES,̒(:.Є| R_NPvXqΪE%[(/v=ř:db8[:x-\{J@Hߍzh3|o:ڠWpIZv6i:Ґ1;Ҽϵ,.FtJF: </If=Ⳗ54�i *TάѺk^NgԂzqGmXʒBo| ?qah|,b-�>hG@A#yR <@! |󲾪c8 4*.r!*TY6@?FC?a@( 7ɓ-xR#FNp+ʉ{8Mo?6����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_setfileproperties.png�����������������������������0000644�0001750�0000144�00000002616�15104114162�025042� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME4+��IDATX͗}Lu?y^ȋbbě1a J\ͶreVm65G$2C]󥥀AK /pvm{vxԠwc;ʯUv]�󆺦0sm'[co{+uU*ee>Bcлyrp(FD-"8qQ/B6QZ'evo+))QϽnbC)-HϱVVz'Kh~4 0jD2 y0bFԘɽAV35.e2r 1u]kc#C`hSm~Dڬmaql({^|^S)RQ�nLZv p LK+5"�]=��ۯ-6gcwet��hJq&n`�ם΋ r_-�ȒLd=ebH�/IMS|ĝ&eӖbijv{v� _)<YZv-@{hkSYY @-e+StkzA=]V� %}>/LjC�ɓ'qr �R\\,GΜǪdGu]LfX/Ȭ'͒Cb [KvNu踌 `\=:lHrss !:&X"G*jFhmiT57z{1I"!)ZuO \'3g^�Wpk'&8~:;8KG~ 9)yz~)iU 4Lha YK�h�< 38Px4;d;h@ @(ТSEDB[֞`W4.|Y(o6[vCV<_+RlĔf&';nH\B<DN|;�k֬A$#.Fǖ,>^"#4i1/ał-ͼ.a,\ `� ]s{IiXV�Mf  f?P8otFˆ7 R Na7*{˦-gta3nǍMK'-kKcec UP1i om)OA"P WcܝJ;YEN(իt'w} 3ޑ�t}n ;G '�Q@]Hå6< 0zd'6����IENDB`������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathresets.png��������������������0000644�0001750�0000144�00000010236�15104114162�026761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME&+G3��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� �����������������������������������T†V����������������������=vO iP;� ����������iP;� ��������������iP;� �����������������RÊ[������������������ @kT> ���������kT>� �������������kT>� ���������������8 ��K������������������ � �������� ��� ���������� ��� ������������� ���� ������������������������� ����������������� ��������������������� �������������������������������������������������� ������������������ ���������������������� ������������������������������������������������������������������������������������������������������������������������������������������<U�� ������������ �������������� ������������ �����<T������������D�<5(� ����������<5(� ��������������<5(� ���������������������� ����wD�����UN8��� ����������UN8��� ��������������UN8��� �����������������������������  �UN9����������E������������������������������������������������������������������������������|G�������C�����������������������������������������������������������������������������������������������������������1��������������������������������������������������������������������������������������������������������������������������������������������������������������i������������db^j��������������������k���������� F��������������������������������������������������������(('&%#�����kif����tX[������9e������������������������\$g8��������������������(&&i��������./.��ڗpnlj����Д=/h���������ΔZ������������������8i!��������������������i��ڕ����pru`l&&$�i���j�������ڋ��S�2h��������������������і^����������������������������������}l"$����������������� �������������������#q��qaB����������������� ����������������� ������������������������������������Z�_3֏�'������������׍-��������������� *sCϒ=0a{����������� �@������������$������������-1g�����������������������ΙtB>��������������!3&����-�C"����Cu�!�������������������ٱ|��������!���0a��K@���5r�������������� ��b@t�Č�Ǫ�oP��������������������*1>��������f�'.3����������(����� ��������� �P4W�ҩ����������������������� ����������/"E������.8����� ��n��������Q5^���������������������+/9��� �������*.8�����������"O������ �����������������R5b�̉w���������������`H��������.������?љ���� �*�����������������Ӟ��{��������������.3:�����������,29����������0h���������������tP'�.�H������_V��������������������l.�������������������Y/������������������������������������G�_\�7���w����������������YV��� ����������������������������������������������������������������������������������7�i������������������������������������������������������������������������������������������������������������������������"��������������������a[J#$����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathlocked.png��������������������0000644�0001750�0000144�00000010236�15104114162�026715� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME&R��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� �����������������������������������T†V����������������������=vO iP;� ����������iP;� ��������������iP;� �����������������RÊ[������������������ @kT> ���������kT>� �������������kT>� ���������������8 ��K������������������ � �������� ��� ���������� ��� ������������� ���� ������������������������� ����������������� ��������������������� �������������������������������������������������� ������������������ ���������������������� ������������������������������������������������������������������������������������������������������������������������������������������<U�� ������������ �������������� ������������ �����<T������������D�<5(� ����������<5(� ��������������<5(� ���������������������� ����wD�����UN8��� ����������UN8��� ��������������UN8��� �����������������������������  �UN9����������E������������������������������������������������������������������������������|G�������C�����������������������������������������������������������������������������������������������������������1��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������i������������db^j������������������������������������������������������������������������������������������������(('&%#�����kif����������������������������������������������������������������������������������������&$#B����� � 467������������������������������������������������������������������������������������i��ڕ����pru`l&&$�i���j���������������������������������������������������������������������������������������������͐�������������������������������������������������������������������������������������������� ����������������� ��������������������������������������������������������������������������������������׍-��������������� *sC����������������������������������������������������������������������������-1g�����������������������ΙtB����������������������������������������������������������������������������������ٱ|��������!���0a�������������������������������������������������������������������������������������*1>��������f�'.3������������������������������������������������������������������������������������������ ����������/"E�������������������������������������������������������������������������������������+/9��� �������*.8��������������������������������������������������������������������������������������������`H��������.������������������������������������������������������������������������������������.3:�����������,29��������������������������������������������������������������������������������������Ҹ.�������������������������������������������������������������������������������������������������������'��� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-0L?����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionnormal.png������������������������0000644�0001750�0000144�00000010236�15104114162�026067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME&rs��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� �����������������������������������T†V����������������������=vO iP;� ����������iP;� ��������������iP;� �����������������RÊ[������������������ @kT> ���������kT>� �������������kT>� ���������������8 ��K������������������ � �������� ��� ���������� ��� ������������� ���� ������������������������� ����������������� ��������������������� �������������������������������������������������� ������������������ ���������������������� ������������������������������������������������������������������������������������������������������������������������������������������<U�� ������������ �������������� ������������ �����<T������������D�<5(� ����������<5(� ��������������<5(� ���������������������� ����wD�����UN8��� ����������UN8��� ��������������UN8��� �����������������������������  �UN9����������E������������������������������������������������������������������������������|G�������C�����������������������������������������������������������������������������������������������������������1�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������b-e����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_setalltabsoptiondirsinnewtab.png������������������0000644�0001750�0000144�00000010236�15104114162�027270� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME'fs��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� �����������������������������������T†V����������������������=vO iP;� ����������iP;� ��������������iP;� �����������������RÊ[������������������ @kT> ���������kT>� �������������kT>� ���������������8 ��K������������������ � �������� ��� ���������� ��� ������������� ���� ������������������������� ����������������� ��������������������� �������������������������������������������������� ������������������ ���������������������� ������������������������������������������������������������������������������������������������������������������������������������������<U�� ������������ �������������� ������������ �����<T������������D�<5(� ����������<5(� ��������������<5(� ���������������������� ����wD�����UN8��� ����������UN8��� ��������������UN8��� �����������������������������  �UN9����������E������������������������������������������������������������������������������|G�������C�����������������������������������������������������������������������������������������������������������1��������������������������������������������������������������������������������������������������������������������������������������������������������������i������������db^j������������������������������������������������������������������������������������������������(('&%#�����kif���������������������������E�7��@����������y������������������������(&&i��������./.��ڗpnlj�������������������G� dF0U�+6� �������Ы�z�h�������������������i��ڕ����pru`l&&$�i���j���������������G�NjJ��v������ �-R�sP�|dG{�g������������������������͐������������������=q�; NgHy����O�O����gHy� c?s�;���������������� ����������������� ����������������� �I3W���������������������I3W�������������׍��ʂ�$�W��������ʃ�%�X*sC������� �; �����������������������A!D��;��� ��������-1g�����������������������ΙtB������������������F�����������������M���������x������������������ٱ|��������!���0a�����������������������������������������������������������������������*1>��������f�'.3�������������������� ��}�����G�����p����� ���������������������� ����������/"E���������������2���������������� �� �����������������������+/9��� �������*.8������������������ ����������������������������������������������`H��������.�������������ֳ�)��N95����������� ����������ֳ��������������.3:�����������,29���������������������|?t��K'%���� ��������������|��������������l.�������������������Y/�����������������%E�<7�h�.������������ۻ���������������������'��� ������������������������������������������������������������ ��������� ������������������������������������������������������������������������������������������������������������������ ��������������������������������� 1����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_search.png����������������������������������������0000644�0001750�0000144�00000002556�15104114162�022542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڬW[oE>޵sBBx<FK)HH\ Ѧ*jHZԪT�$xB!!BsWDiZFE%$QVmc{w^{9gu7;t4wf=s73]ׁ�S=qLUL$!H@BO=SKijFs%I8tUU"B$,A4Yয়0ib񙖋"ruE*llnBpcx^`= H/49 L-UYy9DW |9r@ړ|W#033sss܁ޞo%39m�ϐ⻙Ɣ/WS#z%EUU!uDup$[$قw꠩ڏv[^|D;b(۸7Ђ)>~4?LcZ _njoy B,?XQhq#a f~ï`Xtb8e!s:w=p>M�Bxpm!yEf&çrdVs\06:TY,MrG8phRc OJx˄'=X鹣jS;[c(TRI=S F/_a _Ciޯ4-{4 nRz{Teutv WU_2p<Hj ])* N 5ME#Wʐeacm[ ]ALuź_|\nW`3Pp XyejQX& $(g7:=R!JAlz<SZ]{??7E)6Jյya,_"L'`> #oȇ7H3keh aI QWR/*fֱRBPZP8 ~ͬE~co6 s Os&nM0qONNvHW_~q=~cBy 4<אY___߷ l B۷Oe($h>eXM ڪ:'@ۆz3=$If K{YoC5+1%t`G#Qv GG }kYo› jtӴ8hq]j z?|tdz+[@IZް2J5HvڣQڭ,7}in3Wz 9(雎fdѾ4 �$|)����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_savetabs.png��������������������������������������0000644�0001750�0000144�00000010236�15104114162�023077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 9 M��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������� �+O;������������������������<U�� ���������������������������kH��<������������������������������ �G���<TĬ�������D�<5(�� ����������������������������3�n����������FB?�=�h#���>9)�r*Mh�wD��� �UN8��� ������������������������������� ��8<A�������������� ������� �UN9����� ������������������������������������� �� ����������������E@>� ����� ���������{G3���������������������������������������������79;�����������������������Ȍ[T�������������������������������������������������������������������>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������V�V1�����������������������������������������������������������������������������������������������������9����chl����9������������������������������������������������������������������������������������ ��� �� ����� ��������������������������������������������������������������������������������� � �� �� �������� ���������������������������������������������������������������������������������������������}J#��������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������ �������������������������������������������������������������������Vx{h����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_saveselectiontofile.png���������������������������0000644�0001750�0000144�00000004453�15104114162�025342� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ;/>��IDATXŗyǿ;3;̱3{RvXPDPRBX&5HV-6J&E$mrE`ًeٹvwyǎt]ƤO<y�A;.I<fW_W^1roz^&L6TP:_�75k1ZT?Pպ2:~{ �ih_\r-GU=w޿RGl85Y�>Z@o?iFkΝOW&>SnZնAQ B xƋw󹁳�֓6f �nKuz\9Y"0#Y?j 1t&/5J0fKz_UrL/)˛3;_<4.Ve%~#3ԃ#^ZM2%nݒݲx!w (Bj|?UUW� ݍ8p݋�dRnn�V??2C fCswfo<J٣0 mؖ}$c(O>P[!9Z@Z_goӤ\X'V-<8t @|ÐMw`;0�'bڴJ3 w( 7/\ ؂LхtK��5(%gsм f KqhL*ҮW;KW_6qk^!"{U3z`u 9ܫrO%_[ָ$d[rw* @U֚kk^]. d CW1{MG %P0C|SS's~3Uf_$NQj 7!j.58GP[:K9a]AU>H#Zd1Ws` \xt&9tB(@(d?UP5 JR8)*@> [yCQ `.1J�&a 7w%0z_Br+ P�@\Ĥ*�B�8 "0mS.Ux`-tW]L|#]u 7@o"KrLG.,S<Vt7`wԟI_[$TDN<Vn\}zw@9ԉ\1cCEݢp+'/o_-jtirQ'5==Z,<\pYi(wwh}UY P:Fvk/F7:>=t�(�ʗ䦲L6)+!I%lн5ƺ/_jΎkl5{||wBk7aGw~GdF 3 セ]d3F_FKAC (8x SuZ;ZX{,N63@SV>b�t%H_ _vUI&PñdRO?�ߺlXefg!.vC B cŲq_�)z6 [ЪU,dmܞ; �{#sÍUH @))l[`W6Pb"8lہșK9 x/�/(nph7hIםd4@tUx{γ�/mWa()}tW)ّRcX=9 oMPix#RE1E'D�:|i�L|?_Q mE~wZ]=k )33+1B4 ] 8x>&�2% G~0q8Mm;;6\ghu[�=z;=V3x$G؜F!!(]�gun�0zJ(MOt4/ēŚ&5Z z 0sV^&(L! 3zQPJ?∄pOms|[fBSTAf2|^!\P$@SVT4F!SGA'3A("U*�!1J/ ~?6Z\�c,kŠ�2ƭW��\ pV G0a.--����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_saveselection.png���������������������������������0000644�0001750�0000144�00000004357�15104114162�024142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ;! L9��|IDATX՗{pU<+>`A$EE҂TLGE:S@gӢ*EǙR "<yq={YkA[8p yDSV<]毚&ttAxfwRɞ+6A(pġ.>T M]t֕7p<  �LrO?ni/ F_bm˺lCN(?U5/Ѻw y̘ɷnIt5K\ dМP1oJ_{K$�SĂZ?> n\:Vע,P,wU�= 9ڧNsq}pWQkޅ)ǁ�j`Rsmf϶;zUq+`C Ef{Z_ƀT [ P @ckv~j2�$@pUnΨ2~KɯJkC Չc1U�dj �X�K~]ОLrpE[z4-T$= :ϱCoX'�hU )i"P膫e;HUyɣ+A729gveoݡO7[l�ȓ).V6z."St`ܷ=�v.y<JbmD-GvnU,awIbVqlӿ .m=[қR[-  / [sW�dQvlYjVHF1iR'ʫ' Fj^G'1[1x z9ذrJ>Ze rD.!0/;9==& �\=@{`@ JQ�¦Z%nj|ܴ #0(oBpƯ|5\X9<N*O@�@h\ D*D/qK%V9$0+ 3NrLy0j FA (n G@D e4 +/'\_nBM{ކ@pJ ` @E.NP<;�c�+4 nekE45jC-z=ReyBÈu#<ÆXfhpE8GEYd'KRP�t< Xd$X&Ё?bVrZWo~΀c{Fe4];/~Ľͯ#W4HJIA7WsLgi��ܣsX� nQo =և^Ztkedv 5�@ >9�*|� ,?%$(i<\V=rs٬@^b-|b7/Q !p\w& ;U@))9/ѯ5F:]. K iǢ�CKi8ܥ<`w,gO9Qwj=w6�=}|ޚ33x r/< `@"&�m?X8л ΞV/ XPly[0B{}9r &0::oّkuYw2* ;@8Di>Yu,ZXƮ(2FbC8'<ȕɠZlOfDZ?l1FUU{ '[%nP$vUvj8/Tb$PU L0w-/;j]Rvrj!bLJ\l@ϑ}wmlJ�s4gVf]Yzh7^jcg6. /A6$.<7W]υε_ /+m}PL$ ?)jΞ+)z;< vc8?,.{P4~_?mCk \rO#^F$gX 1:9N땃ڞRfH%G^D{gČHZc%Uh25[̬uܥhHm{cǁr�˚FhW׏'$�~��qD�1Kٳ[_(c7`ŗ`oesx2hI`￙-ڀOWX+.]sOx,zt,?!e$ /_;l ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_savefiledetailstofile.png�������������������������0000644�0001750�0000144�00000002575�15104114162�025645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a��� pHYs�� �� ���IDATXGWML\U߼aJ)icԖFkiMą ]ԕ+7\hL0q41M7*6-ZMF41QEf3`~{=( 2t}s=s<?VsYK64a@6rt?noA45h/: -k>1&]a޽بDѤl+y7W$(IܮJFt_(# %6Wtn# : IFߏ)84|1]rՌ;XlM$gMp1XlgȹT쿿K๎uՆ/!,;|\�|`Г1fpp on٨znE@t A4dưIP;D#碨Mf~~N(l'~ &1tkH)]/#9'4FHAPK*0T hl܊xKl .4>TsTcؾuyNb|: 2TD=M^YZfz. |0@$ ^^V$(TcRDC6ٔXQR0p;\2/*6a08u!;clFdTuTcQd5m.kCSlkUU4udف]-tro9 5x:N5D'+5=;5Y=)g(CC\Df䨋1`B" ǒ #FN#G>!8%Y2u31*I}|g`wK,  R)d SbAtbS䝼�Ɍ7_+ <YeW`9_= i6Z%Դ`!TVѐ YA59#wtmq[ŀ|u~©~@=!濆(^I)- gr類,ϧ5Lmե@ BfI:/ܐ߳H?Gβ ¹m{y;Lto _-J9/^CN'v=Y!N~ą1`\`o6K,\\2tRn[)"I9>œ_> Εj=aJ_tPrsQw)nrp2<NYPFT:PQ *2|^^xH2Zi`{bè|[Ԇ,eB!I29�Aҳ㡷= <L ޏW)��b=ьf����IENDB`�����������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_savefavoritetabs.png������������������������������0000644�0001750�0000144�00000010214�15104114162�024633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME /4��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1��a���������������������������� �kE7�����������������������������%��i�������<TĬ��������kH��<������������������������������ �G��(8@�������������������������C �� �����>9)�r*Mh�wD��� ���3�n����������FB?�=�h#�� � ���������������������!ߛ�&G�����1ڡ�!e�����  �UN9����� �������� ��8<A�������������� �������������������������&�=�����$Õ�w!������������������ ����������������E@>� ����ӣ{u�������������������ɇ-w *iE����� *P�x7yӉ�����������������������79;�����������������������������ߚ8*+��� �������(� E1E���d^���������>����������������������������� J:d !3�����������Z�����ݿ+˺ �������������������������������������������`<�����������݅���eF�������������� � �� � � � � �� � �� ������������������eD޵� &����� &��ݵeD������������������V�V1���������������������������������������7ym'K�������������� ��7ym��������������������9����chl����9����������������������58%�����������%�68a������������������ ��� �� ����� ������������������������A ���������� � �A����������������� � �� �� �������� ������������������� N��*n]����֒5'#� N���f�������������������������������}Jo�����������Lmgڿ����������)h&AS>V���������������/��������������������������������������������� ������*��������������/������������������������������������������ '3 ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_runterm.png���������������������������������������0000644�0001750�0000144�00000002720�15104114162�022762� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX]E?3sv/KقH*mIȊZ5jW`b|a !"?^@ ?\kBD(Bn-l*w3gf_s=wƔ_=s3y3sOvF&JFDO^B}iqם |ͺ߼uڑU$|"^CQklKя^epxhX{,IF.Zv|s??ܘxK.9:o@tBkcL/3\a=AXhnHT$ZLLI@ /mO"BWz?v.|=Fk @n!R(?F�5l4yXh q"1whm/Zq.ID:H Lq1"Y(욃>`9Kz&� $f`+ ̤WU+q$bL@ i`)`XvR=f/8h4kU:Kԗ�N1͛0hdfXBLiԫTiz>U1g-sxv0d |[oa6[/235E>ѐ6+1}ɥ9RE(j ZZ\} @DPIĘsāMח8,3CV_B00OsEG1`9WL6i!M= K81^_m;3k5 ;װyQJt,JkDDxDDeer~,} ^U�k-N�1 O _z!c7lcbE#14t%ʻ}lp+HĹ 1`M y&܋{S1]W~%,@X6۴'~]1_+ثP|lY�g-^X0Z#6WvHcAkݓֲHҮ Eh!HjWmW[sՆN?`=AJv DRPZ{~ wB_ĝy=_gNr4#ۯd &FYi=|0~ULM.5^K9$IZkyUɴ6]�ļ44$IrO<ss'rVڰ\^U}'L..eqqY8R@xG2O`߉簡^ qe0pωD&auwo]3<;Ͽ RB H !Z  ~{992}9uh궃߫_###k?'444G8tpjpU'PccMI_j K o\����IENDB`������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightthumbview.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -+e:��+IDATX  ���K������������������������������������������������2���������������������������������������������������� <��� �KL6��������������������������������������������������������������������������������������������������-�������n���������������������������������������������-����������������������������������������������X-����������"�������������������������������������������� ���������������������������������������������� ������������ � ����������������������������������������������������������������������������������������������������������>�>������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������� �X��������������������������">�9#�����������������������������!�5��������������������������� ��\@�����������������M�?' ������I-����������������������9����������������������������������ڜ���������-#d�����������������������������*������������������������������������ ��������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������+D�d�����������������������+D��������%����������������������&��������������������������������H4�K6�������������������������������@!�B"�������������������������������������������������������������������������������������������������������������������������������������������������˻���������������������5E�Vv��������������������������������#-����������������������������˺�`r�������������������\z������-5�����������������������%/��������������������������������������������:V����������������������������������������������������������������������� ������������������������������������������������������������������������������������������ �����������������������������������������������zf���������������fP������������������������� ���������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������� ������������������� ���������������������������������������������������������������������������������;K������������������;K����������������� �����������������������O������������������������������������������Yu�Yu���������������������������������������������'0��'0���������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������������������������5���������������������������������fP�������������������������������� ��������������������������������������������������������K��������������������������������Hq�����������������������������������������������������������������������������+�0��������������������������������������������������������o8Lj����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightsortbysize.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -3k��+IDATX  ������������������������������������������������������������������f�����������������������������������������������������������������������������������F���O��x�T����������������������������������������������������������������������������������������������������������C�: �QU�(��{�U���������������������f����������%��:��#������� ����-��D��������������������������C�:!�QkG�l�<+�L��{�U�����������������f�� ��`��/��������������������������������� ���~�������������������C�;"�Q`@�L��L�`@�;"�QC��������������������r��/���������������������������������������������������������G�;#�6R5v�z���������E.v�)1�-޽����������{��6������������� ��K��b��-������� �����M������������K�>%�I.W���������������<'W��)/�5ܽ�����(��� �������������b��=������1��2������M������������ ���z���D/����������D/���z����I��� �������������������������������������������{�������������������r�2������B�������������v�I�������������������������������a�O��4�������������� ����������������������������������������������������������������� ��� ��������������.��.�����(��D����������������������������������������������������������������������������0���&������������������������:��:���+��a�� ���������������������������������������������������������������U������������������������������������� ��P��j����������������������������������������������������������������������|��9�������������������������������������+��?�����������������������������������������������������������������������`��]��� ��,��(��!��������������������9��������������������������������������������������������������������������������?��?��������X��1���������������������������������������������������������������������������t�|�� ���������������������#��l���������������������������������������������������������������������������������������u����������������������������������������� ��������������������������������������������������������������������������x���5��/�� ��� ��]�����������������*�������������������������������������������������������������������������������8��8������������������������������]��������������������������������������������������������������������������������������������������������������w����������������������������������������������������������������������������7��'���� ����� ����=��:�������������������������������������������������������������������������������!��h�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;�������������������������������������������������������������������������������������������������������������� �������������������������������������������f���������������������������������������������������������R"����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightsortbyname.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -6vN��+IDATX  ������������������������������������������������������������������f�����������������������������������������������������������������������������������F�F�F��������������������M���������������������������������������������������������������������������������������C�: �QU�(��{�U������������������f��������������� ����������������������g���������������g���������������C�:!�QkH�H�kH�:!�QC���������������������������������������C���������������������������������������������������C�;"�Q`@�L��L�`@�;"�QC�������������������������������������K���������������������������������������������G�=%�SS6v�i�������i�S6v�=%�QE������������������������������������S���������������������������������������K�@&�L1W�������������L1W�B*�QI����������������������������������7��#����������������������������������� ���z���D/����������D/���z����F������������������������������������Y����������������������������������r�2������B�������������v�I��������������������������$���C������������=�a����������������������������������������������������������������������������������������^�����������������P�� �������������������������������������������������������������������������������������������4��������������� ��O����������������������������������������������������������������������������������������������]�����������������>��������������������������������������������������������������������������������������������������I�����������������X�����������������������������������������������������������������������������������������������B�����������������$������������������������������������������������������������������������������������������������������Z����������������������������������������������������������������������������������������������������������������#��-�������������������������������������������������������������������������������������������������������������������`�� ����������������������������������������������������������������������������������������������������������������� ��@��������������������������������������������������������������������������������������������������������������������P������������������������������������������������������������������������������������������������������������������������V���������������������������������������������������������������������������������������������������������������������/��%�������������������������������������������������������������������������������f�������������������������������������s���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;�������������������������������������������������������������������������������������������������������������� �������������������������������������������f���������������������������������������������������������?!{ϟ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightsortbyext.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024364� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -f*��+IDATX  ������������������������������������������������������������������f�����������������������������������������������������������������������������������F���O��x�T����������������������������������������������������������������������������������������������������������C�: �QU�(��{�U��������������������f���������������������������������������������������g�����������������������C�:!�QkH�H�kH�:!�QC����������������������������������������������������������������������������������������������C�;"�Q`@�L��L�`@�;"�QC��������������������������������������������������������������������������������������G�=%�SS6v�i�������i�S6v�=%�QE�������������������������������������������������������������������������������K�<$�E+W������������������,W�թ��y�N����f�������������������g������������������������������������������� ���ک���f�`�������F/�^`� ����I��� �����������������������������������������������������������������������r�2������B�������������v�I���������������������������������������������������������������������������������������������������������������������������������������������������g���������������������������g�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g�������������������������������g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;�������������������������������������������������������������������������������������������������������������� �������������������������������������������f���������������������������������������������������������ne$����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightsortbydate.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME ,,E ��+IDATX  ������������������������������������������������������������������f�����������������������������������������������������������������������������������F���O��x�T��������������������������������������������������������������������������������������������������������C�: �QU�(��{�U���������� ��������f��������������������� ����1��?������������������������������������C�:!�QkH�Z�T:�)2�-߾����������{�����3��������������������� ����%��<��#���������������������������C�;"�R`@�[���R8�)2�-߾������������3������������������������������������������6���!����������������G�;#�6R5v�z���������E.v�)1�-޽����~�����3����������������������������������������������1�(����������K�>%�I.W���������������<'W��)/�5ܽ�%�����3������������h�I��:������������������������C�������� ���z���D/����������D/���z����I���������������������������B��~��9�������������������)��%��������r�2������B�������������v�I����������������������������������������������`���+��1��������������6�D����������������������������������������������������������������������������������������4�������������������"���������������������������������������������������������������������������������������������,���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������� �����������������������������������������������������������������������������������������������������<���������������������������������������������������������������������������������������������������������������:��1�����������������;��������������������������������������������������������������������������������������?��;�������������������9���������������������������������������������������������������������������g������������������������������������f�����������������������������������������������������������������������������������������������������������������[�����������������������������������������������������������������������������������������������������������������b��!������������������������������������������������������������������������������������������������ ����6��:�������������������������������������������������������������������������������f���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;�������������������������������������������������������������������������������������������������������������� �������������������������������������������f��������������������������������������������������������� L}BN+����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightsortbyattr.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME ,-��+IDATX  ������������������������������������������������������������������f�����������������������������������������������������������������������������������F���O��x�T����������������������������������������������������������������������������������������������������������C�: �QU�(��{�U���������������������f���������w�u��$�������������������������������������������������������C�:!�QkH�H�kH�:!�QC��������������������������������#������������������#�������������������������������������C�;"�Q`@�L��L�`@�;"�QC��������������������������3������������������������3�������������������������������G�=%�SS6v�i�������i�S6v�=%�QE����������������������4��������������������������3���������������������������K�@&�L1W�������������L1W�B*�QI����������������!��������������������������"������������������������� ���z���D/����������D/���z����I��� ����������3������������������������������3������������������������r�2������B�������������v�I�������������������4������������S���|�������������4������������������������������������������������������������������������ �����������7�����������������!�����������������������������������������������������������������������4�������������#������ �������������������3�����������������������������������������������������������������������3�������������>������8�������������������4������������������������������������������������������������������������#�������������'������3�� �����������������������������������������������������������������������������������V����������������������������������������������4���������������������������������������������������������������������V��������������O�g�O������������������������������4����������������������������������������������������������&���0�������������������������������������������������������������������������������������������������������������V����������������������������������������������������������4������������������������������������������������������������V�������������I��P�������������������5��d��������������3�����������������������������������������������������)���-�����������D����������������������C����������������������������������������������������������������������V��������������� �������������������������������������������4���������������������������������������������������V�������������%������������������������������#�������������������3���������������������������������������������������+����������f���������������������������������c��c���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;�������������������������������������������������������������������������������������������������������������� �������������������������������������������f���������������������������������������������������������';t�����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightreverseorder.png�����������������������������0000644�0001750�0000144�00000010214�15104114162�025030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME # )��+IDATX  ������������������������������������������������������������������f���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������M������������������������S���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������F������������������������������������������������������������������������������������������������������������������������?���������o��������������������������������������������������������������������������������������������������������������;���������a��������������������������������������������������������������������������������������������������������������6���������Z��������������������������������������������������������������������������������������������������������������2���������R��������������������������������������������������������������������������������������������������������������.���������M����������������������������������������h�g��l���������h�g��l����������������������������������������}������)���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������f��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������6��D����������R��/�����������������������������������������������������������������������������������������������;��a����������� ��1��m�������������������������������������������������������������������������������������������� ��D�������c�����;��Z���������������������������������������������������������������������������������������������������� ��"��,��2���������� ������������������������������������������������������������������������������������������������U��4�������������������f��������������������������������������������������������������������������������������������d��&�������%�� ����`������������������������������������������������������������������������������������������������$�����(��n�����'�������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������l��������������?����(��N���������������������������������������������������������������������������������������������������3�����#��)��������������������������������������������������������������������������������������������������������������`�����������]�������������������������������������������������������������������������������������������f�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p.D����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightopendrives.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME # K��+IDATX  ���K��������������������������������������������4������ <����������������������������������������� KkH���:�����������������������������������������������-���������������������������������������������.��z&�����������������������������������"����~<��������������������������������������������������� ����� � � � � � � � � � ������������������������������������������������������������������ *��������)'&�>MV��)**��@MW��))'��X���������������������������������������������������������bD�b��k!�\�������������������6�������������� <��������������������������������tN����=�����������������������������������������������-���������������������������������������� �1��z&���������������� ��������������� ���~<������������������������������������������� ����� � � � � ������������������������������������������������������������ *��������)'&�>MV��L��&.5�¹��58������������������������������������������������4D������,V����к���:���������#������� ����l����� <���������������������sM����=�����������������������������������������������-������������������������ �0��z&���������������������������������� ���~<������������������������������ ������������������������������������������������������� *������Ǿ�������������������������������:;������������������������������������4D�����AJO�����������������������������������(����������������������������������������������������������������������888���������������������������������������������DMP����������������������������������������������������� ��������������������������������������������������������898������������������ �������������������������JNO�����������������������������������������������������~K@D^; Sv������������������������������������������������������������������������������� Sv�����������������������������������������������������������������������������������������������������������������������������5w��������������������������������������������������������8�5 ���������������������������������������������������������������������������ō;������������5 �����������������������������������������������������������Zg���������� .@ Sv�������� ���"$&�DCC������������������������������������������������������������������*��������� ��--0�� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������}����x"��ϒ�"'Y������ ����������������������������������������������������������������������� ����������������K� ���� ����� ����������Hq�����������������������������������������������������������������������������+�0��� �����������������������������������������ak#v����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightflatview.png���������������������������������0000644�0001750�0000144�00000010214�15104114162�024142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME "3+e��+IDATX  ܱi (����7l����������������������������������f������������������������������������������������������������ #�<K&DK��� ,�zF���|��������������������������������XX7k� �������������������������������������������������������$������0Pn{<xΉ����������������������������������� ���XZj-����������������Ѫ&���������'� �'��*�͎4n 5s͒����������������{����������-200�������������������������/f(���+Ze������� �ܳĂZ!��:ڑ�#L����XXn�������������������������866�871��f's| � #4��������� $R����������������������������������������������871iYl������~~W8:,5� 6�9&����+���������{����������������������������������866�.�����������||{u����������nst������������������XXn������������������������� � ���������������������������������������������������������PP������������������������������� ������������������������������`*�dn��������  �������������������g�hs�������������������������������������������������������������������{ۮe '�}  4qȖ����XXy{��������������������������������������������������������������������������������� !� �=H!?J����Ȗ�������������� ����������������������������������������������������������������� ��AM���������{���������������������������������������������������������������������~~}v�������������lst  ���� ���������XXn��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������z������ TUg%������������������������������������������� � ����������������������������XX0n�������� ��������������������������������������������������)E #�� ��������������������������������������abi����������������� ��� �����������������+6%3F#%�����������������������������{����������200�������������������������aby(z������������������ �������������������������������XX������������������������*")ac������������������ ��������������������������������������������������������������������������*"(de���������������� ����������������������������������{����������������������������������866� ���������������� ���������������������������������XXn����������������������sr������ ��� �����������0�����������������������  �������� �����������PP������������������������������������������������������������ ���+LJ�&+� ��ģx������������g�hs�����������������������������������������������������$F�:A�'���%�;~��� ���������������������������������������������������������������u  6 �$�������/.������������� ������������������������������������������������������������͹sx0Wh%Q��� � ����������������������������������������������������������������������������������������]кD�<(<x � o����������������������������������������������������������������������������������{����������E� ył�����������������������������������������������������������������������������������������������������������y��������������������������������������2��������������������������������������������������������������������������������������������f���������� ���� ������������Hq������������������������_C(k����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightequalleft.png��������������������������������0000644�0001750�0000144�00000002567�15104114162�024317� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxW[h\Ege79IvlR/61iE[D &,>c BU(&>AAE*bU%6ٴ$f9gefg$4eI%B CvVxvݤ.ƁPX+Ǟ|ygԋb!Ag߃ T| zqbS! nV�X :_�70WV%Nw#lL]}'y*`vv`�]6f)Cqe V=K� :`&}gR.�pgs^@zF2a` vυuau<5sr{�d]9WJ^.Ǹv'T{3nL8<`ۆjZ$jCk&)b3˳GyLOL o<.L tBJBk|4mX&>j$G:'NIܡQ0pؕz4* EKF (M@ʠ�n;\N[L H!�qeL"h0BKcP:!|a=2Ts#sTJG8j.Z@ r0$�{.j4NkN/ `n:}O@>6P x/^_�f&`19Ja2#g.@8CVaO`_Ǥ$tu&4i f@Ԍ'YlRJÔj՘ϢmS}L�zN61C5=Tr]Hl@a 1?+*gkzuvs"b`ښۅ!87T;0$>цU~Ӹ[7 X2Eyz/SUr/*ELl ŸN8_Loa@/& ?ߗ9xT Qp2\P,h*و +>:lL Nk{8_ dՌ96'BZMNu% 00P:`0x^-Izufɹԩ?X*So;eQ^@DQ"/_p5^89ܳ*|/PzSG,#Asʁyqg{Lծduq')D`RU0 1oDډ־{q쵉PI6Wu $iXQe#ETzn\��g����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightcolumnsview.png������������������������������0000644�0001750�0000144�00000010214�15104114162�024674� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME "&ώ��+IDATX  ������������������������������������������������������������������f���������������������������������������������������������������K������������������������������������������������2���������������������������������������������������� <��� �KL6��������������������������������������������������������������������������������������������������-�������n���������������������������������������������-����������������������������������������������X-����������"�������������������������������������������� ���������������������������������������������� ������������ � ����������������������������������������������������������������������������������������������������������>�>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#%%���������������������������������������6���������?>>������???�� ���,+*������������������������������������������������������������������������������������������������������������������������������������������������������/��.01��������������� ���������BCB�����AA@��������������������������������������������������������������������������6���������?>>������???�� ���0/.�������������������������������������������������������������������������������������������������������������������������������������������������������6��667��������������������GFE������EDC��������������������������������������������������������������������������6���������?>>������???�� ���532����������������������������������������������������������������������������������������������������������������������������������������������������<��<<?�������������������JJI������HHH��������������������������������������������������������������������������6���������?>>������???�� ���876������������������������������������������������������������������������������������������������������������������������������������������������������C�CCE������������������NMM������MLK��������������������������������� ���������������������������������������6���������?>>������???�� ���<;:����������������������������������������������������������������������������������������������������������������B�����������������fP�������zK�������������������������������������������������������f�f��������������������������������������������������������������������������6���������?>>������???�� �fGf����������������������������������������������������������������������������������������������������������������������������������������������������� {K���������������������������������������������������������������������������������������f�f��������������������������������������������������������������������������������������������������������������������������������������������������� +�����������������������������������������������5���������������������������������fP��������������������������������������������������������������������������������K��������������������������������Hq�����������������������������������������������������������������������������+�0������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y3ȻӼ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rightbriefview.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME "*u��+IDATX  ������������������������������������������������������������������f���������������������������������������������������������������K������������������������������������������������2���������������������������������������������������� <��� �KL6��������������������������������������������������������������������������������������������������-�������n���������������������������������������������-����������������������������������������������X-����������"�������������������������������������������� ���������������������������������������������� ������������ � ����������������������������������������������������������������������������������������������������������>�>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#%%����������onk��������.���CBA�yy�����nm�����B@@�����������������������������������������������������������������������������������������������������������������������������������������������������/��.01����������/��.01� ����������������������������������������������������������onk��������.���CBA�yy�����nm�����EED���������������������������������������������������������������������������������������������������������������������������������������������������������6��667����������6��667� �������� �� !����������������������������������������������onk��������.���CBA�yy�����nm�����JIG�����������������������������������������������������������������������������������������������������������������������������������������������������/��.01����������/��.01� �����������������������������������������������������������onk��������.���CBA�yy�����nm�����NLL�������������������������������������������������������������������������������������������������������������������������������������������������������C�CCE���������C�CCE���������(�(()����������������������������������� ����������onk��������.���CBA�yy�����nm�����RQP����������������������������������������������������������������������������������������������������������������O����������������fP�������������������/��.01����������/��.01� ��������������������������������������������������������������onk��������.���CBA�yy�����nm���uKt����������������������������������������������������������������������������������������������������������������������������������������������������� {K���������������������������������������������������������������������������������������f�f��������������������������������������������������������������������������������������������������������������������������������������������������� +�����������������������������������������������5���������������������������������fP��������������������������������������������������������������������������������K��������������������������������Hq�����������������������������������������������������������������������������+�0������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ I3f����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_reverseorder.png����������������������������������0000644�0001750�0000144�00000000710�15104114162�023772� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME$5;Q^��UIDATX;Ka,ZXD H$[XX%?_ba)VE/`6ga^f0/ |{͹#ǿD hq%4gM>sl5k7:& Г5 qpp1<BwuB,JuA6n"sΰ,ѕ&y;v;:{'(V/jzE΢ cjiK XEcJS -EK_*[J3QF9΄iXDŽMj U B7{E4mQ %lz<Kg(q6_fWcw !Fa����IENDB`��������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_restoreselection.png������������������������������0000644�0001750�0000144�00000004434�15104114162�024663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ��IDATXWkpUyWroronrDQ!UkZu EtD:VH;j* :#%Q G5K qs>{f9k뛵^Xx/HejܵS:5kL:uw2/xʅVx҇ۜnߺ% |ǯop�禹k]ڴ7"/|6.}:( ?մ ~]w y+ ]6Nr陶~ }6We $brT^WwzB"pj܂wC@ד߁Ot7qA7ikQ/Vʫ!玂yt.�q[CZ,HYPNHK;7s�ȺuB3˼=�"Pkeϥ~pj0zH+Pڔy9�hQ8/p3NOe)y* z�Dv":>Y9 t"O�Dӑ4 4`*+Ԅ@]7N灊i�2àIJ,#iko@QtDS<yS,EM|?\^,=^KZ�cA7Yg;2?}[= wאoò"E-eFBmATjfz�}.8'ߒx@�:}J|2mD,'>ڏ_Q>hRi`e쐻a)ݲ)o!}ŋ 2DB<G<a~K#hY˝,ʎ-e3VQ�K'lʚxCcku7z"ަJ=w":UTU8S"Nno\ |�\ϗygThSf&4U4(YfbGi\X'RDjo% Z 1o-UJ^Q@p<@8,X:ZA8;1u&8�Fes_ @D Eb�a פAR]@\v^q �FT©�  0M=[nZ0MͤZu^T]9sD"x ~)b6\87n#:EQ#&"/#U9:(3>Z_h^ɲV;".dӶ]0g-!G:h}xWnC ZK*Jڀ9G;GR�,. @*V\ߔ ${v'_X|kez3j4udžwG@,~9�*r�kB nBi�M`x 35tO9BA(qM 'S♧_ i :^_]j"78`%Dru( *dD6W8̬l( nh`ƭ\7W*x�(lQc�-Ѹާ'Uz+^ \L4/|hݰ=DF2GeSCG'JUenzXx.tÄaZvAc7{eL8U>^R0T;"9A-ѴO,dTQU{ +Ru!aKf-\"<s~C vwܽ_Nljv;95c.[r f |{6Ii�g4/'ԧ{e5ޘXV@<p\`ZCu. a8)om˟s�Tx{ e[ F44wO8;`S`_9A޲_uN&5BL̩u11Ĕ+]8P0^RE>=/�rc�Lcܩ,e`2^8~mkx̌&3%Th5'L5Ln@K>B@ ñE4TBy"صyW=Z$�e��؉�ʋ6޹`?SuoE8o3pi7"wɶuƃl긷�d(Ů/r,�>ߤJ\@;=ye3kqxm슲;*i)9='SKE[j{����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_restorefromtray.png�������������������������������0000644�0001750�0000144�00000002550�15104114162�024536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  a��IDATXŗklU>vD% DMI )0%Rc&ATFc5MD` RUnwv-'_vs?3B)p> ,NTԬ#X*k,KEXffEՐ[J_A6bTuXQ=ؽR@_͟@'_ t>k p<VT`0`~Q e3rގ�(i991 ~Qhdr0X}i0&%gSZʀJg&r;@тŝէ-Âg 6{rPeĮ4GVAtZLmF$`""¶h[(:!9_�hR@V|ǵTka90=1oڏD8 yE#DlZ:Z}և՟Ԥ]v*kl_> R"cXBe[|}]R݇V64Gت' laDe [9+7{@s8RF;Г1UK0wzK�n5e8Lw{z/N\[7bEahYaBm-l<:ڃsm .+C&cu? Kw ~EG}ahY7igߛ0bfZ[Z0 鿭#,֓2"1 ]pg : &g(}EK`OxYgsism6AP?` XSc&157>#@ol�^]{Pа,t Il8 ?7q<{ Qp+RcL(M̠#p0t:!ۢ%Z1gx\N&y%_04wr 9q򇎡2<9Mn5icҩ5h#0o<NĸwI0"6PA!5<e!c uM) `+P\_nb[15%rHsu�MJMt}�ABmݛDx'$6621\ΫF- י.J.3{\@2&eˊܢm脶aӲJ"l(]L8ξS l08Yt=+EHћjRh($�I$ڍ GfA>,C}�Iv (T21xUn����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_resavefavoritetabs.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME51F��+IDATX  �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������___L������������������������������������������������������������]]]�� ������������������������������K������������������������������������������������������������������������]��!�Y���������������������������������������������������������������������������������������������" ���GNP� ��������������������������������������������������������������������������������������� ��"����������������������������������������������������������������������������������������������]��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������W��� ������������������$��� ���������� ���������� �����������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|����^�����������������������������������?'�9%�������������������������%��i�������<TĬ�����kH��<�������������������������������������� �H�C+�������������������������C �� �����>9)�r*Mh�wD���=�y%����������������)�=�f#�� ���������������������!ߛ�&G�����1ڡ�!e�����  �UN9����� ��������y����''(��?MW��***��)`a���c�����������������������&�=�����$Õ�w!��������������� *��n|���������n{����� *����€KD����������������ɇ-w *iE����� *P�x7yӉ�����������������7E��~�'()�HVZ�}�*)*��HUZ��V\\�7F�������ߚ8*+��� �������(� E1E���d^����� ����x����w�������Q\]��� ���������� J:d !3�����������Z�����ݿ+˺ ���������H! ��������������������������������`<�����������݅���eF��������������������������� �������������eDЌ$8#K2����������� '��0tz������������� ��d#�[6��������������������������������������7ym'K�������������� ��7ym���������������� ����[6���������[6�� ������������������58%�����������%�68a�������������������g_Y�������������������������A ������� �A����������������� � �� ��GHJ� ���� � ������������������ N��`6`6�� N�������������� � ������� ����� � �� � ���������������k!hQ!hQk������������l i��U$��T�Ε����4���ij�����������3����������������������������%���������������3$ʿ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_renametab.png�������������������������������������0000644�0001750�0000144�00000001320�15104114162�023217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME,7C.ga��]IDATX=hA3{e7("Z`H4JxZjPJ! Zh>P0%ZX(* i0̳H.`7<f3"ERkP*p_ .><D<苻טFD<Jp{QLl\O�sޑĆځG[h]~%n䵾X}Oqk?rbz'ݸQ*ZKOaRz@] `.1n8p OC&RX[jdkbjJ}]@uyl> -")UJ`DbF+~@htx%yݰVd5Dp @!*c|uzaElnx@i 6tC �[j\aV�2yìUVd!fEJ",fU߷@ҳM*Zwmck~eovsˎçwߊձ\nc,GsJ1WXIWG3O.9ZqK]*OI^ h�O5jeF|a"EZw'{H(D����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_renameonly.png������������������������������������0000644�0001750�0000144�00000001530�15104114162�023435� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxWnP>:iTj@H$<VނѱD@BWPtT5Ms97NbǾnwkTJ* V|�nwEdge[yI3l26$=X*0'McVdVd,UUv\Ƹ {aPlpgnl.hV@Y6yXj=^\w<o`4w\_F0 loc¨PU <@A-(a 4MZ1[eR x~o d&)(q ~8_z?`8<% ._BLtIbr~ V$K`@jЈuSűSq# p&Q |XskǩQiZfIf\ !Ht(W@^Ȧ H`PF!&s ,�='Rj}x|/W4jm5^?Q sgEe t~sʰd:>$D A(8zvK(RXx>h/#Z;l4Oug><62Pf(nD̰f5yCc[q jr7mjR\ �.M Fa;㄀hz[DZ/%v -\g,ȎȾtlm 9)`_fWϿ0� S"N����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_renamenoask.png�����������������������������������0000644�0001750�0000144�00000003262�15104114162�023573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 5^*��?IDATXGWilTUf{3әttJ+P$ 0)K &$ K1D0Z$b"bhY - KWK;mt,}3=y 37 7w|[ Kpr^+cTu*˓'K҈!}~`α1�k_";>q(+k%Ate,wJѲGJ,Z@Z-Rz$qȯ^-O9u*7wamؓ‹p<b?�-(r8zs~x^G2*! 5еlYg_ݧo/|\~dV[<q [:󑒒 =`04lh (~w)�î3†ݒ�c Z]l/_�"Aal ͖ ]ZaqU4L Y`34ZFhV]e*)ygȤQfSC>p 8n2]u @jjSSo<a8`(riNFkf#~Aw23aX0" +4 f3d)Ǵ `NøꩿO R=GV>UF~˨6ǘ<i#`Ț&&.M% ϞD?Z1>*TBy@@ f Bot! !=Fؠ ֺps =Elj^S*t U<�k%4rbǴ܀fa 6kYY0 ZT ̨׋swMׯgZmypZk) :׏ Fp.YHgwFww7nwBbB4b4,/o3|&tܴpoI62t$4|=70t222Ӡ6:j?54hfMb{ AًF9.-っÀcUU%Ux{˜eC/6@;86'&A@D"#" rQ=00L؎?W.) NS 8/Dߚ 9 r55y,M{p`d ==]N6Wc)c 0KǼL=;N1o/+ ޽s%P.3@pZpG%tNgMf{N뙙z2F=ӱ0*& 686t o%&'@b@!V-[ {DAJ0۴uOm>V |w:nfk޽{rQ'ƍf(D^G#q<KfydSX6wv`Ot}ɀxo۴&n[O Y.hlT&U4M1"66P`h02 P>8+#pߏ!^ROe�=>6kh8-MpHwΤ |_/66{yZ7C3GΞlaQX]gg>�w(9~~����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_rename.png����������������������������������������0000644�0001750�0000144�00000002102�15104114162�022527� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 3%Z Q��IDATXGWOA~-, xD r2`I܈ƔV  h#G Fc ' z QQbl}owt: dvf{{ӖsO!ޱQ=X1ٰS O�Uq28!A3l<Ct(>ƂA<E?`vljD`+kok]RMz{;n<H$2VXޱЀ2=-/oWp|w!M~}}/|P^\v p�ve>5@ʼn<b!)okq!F׫ gL}6C#iuU3y,0OBzD[[5 xHE sMM sV`GU?{ Z5 +�B]`PraP͐3#`j&$`f3j[nV?!خөi4gfYgp#CuUU\߆>;Xeϓ @5P05U 0s6 -F$R�`sC0Dɓk-`4/)ApXOM3fШԗ  ı;D̕fԀ} F=="6&ٲA\|33dϬV+pJ�t4}h4JJ1X|<)v-wɘz :"G!'a\W,{0 0jH[DrH$v#rU_ A}=196  kp {ׯ*y hy g7!l�QFJo @H(ڏcmTp�( Bd/DBW7JN8e9M5C�pݽ-(k?3hf<=~=:>bl!>Dкf=NĻ\CoĖZe _7����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_reloadfavoritetabs.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME!·Y��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ �������������������������������������������������������������������������������������������������������������������?���f�!#������������������������������������������������������������������������������������<U�� ��������TM��#������������������������-�=��� �����<T�����������D� �A�����NI��݇��0&�.��MH�������������������������������������^w������ ����wD��� �2�A�zQ�pMo� � !�(m����S7G�a� � � � � � � � �1�G�L�1� �� �UN9� ���� ����H�U����hJ_���>��"�*�Ǥ�a��������������������������&�=�����$Õ�w!���������������+!l�W�y�����cKN�Z�#�������KD������������������������ɇ-w *iE����� *P�x7yӉ�������������������󋸂 .�3%W���� �E������������������������ߚ8*+��� �������(� E1E���d^���̷w���3X�5&�����u�������3������������������ J:d !3�����������Z�����ݿ+˺ ��������������������������-J� <8���G,��#t�`<�����������݅���eF�����������������������������VCB���� �tG~���������eD޵� &����� &��ݵeD��������������������������� ��J�Vt�4�Q� � �}�n_�u������������7ym������� ��7ym�������������������������"���g���ͺx�4�`�p�wh�y�����������������58%�����������%�68�����������������������޾�z FYA/��1-�t�Xy�4����y����������������������A ���������� � �A��������������������������Ͷu�4��'#����W�������͸v�v������������������������� N��`6`6�� N������������������������������������D|K�M�����������������������������������������L:h&j���)�����������)h&j>C�������������������������������������������������������������������������������������������3����������������������������%���������������3J0 $ ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_refresh.png���������������������������������������0000644�0001750�0000144�00000003750�15104114162�022730� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATXŗilT޷q ij,\5(%%QBZ〚㦊RRPFE,iIҪ qC M�c xggz7͹;w= 66O7.(;U8[9sX n#u13mǷ[SZ[[Č�5~0-ݰ<T>XtM#%Lp@`ʽ|s }?EAӢ߷xSt ~]U..eD$IK)s~3@ }Cn#e!�XƇE]70-m]=kad^@ q$ %A )$|t}p&_[7U8y^�e].jx:0+KrKdaX!P lWr$HlI0m3<B(Srʁx2xb2Z87<! �P/++z[r0ጁQ·H 檥C%ܧ2MF2c!I!+رeU ktSSw 8ܴ,eO�zϱ[C5݀||Mr\ mp%O5]̉hŲw`L Ty%WWV.~ڇh8( GP".>=6Yͬx)w|e"y`D<cCJB!DWPˁ:^X˽8-&Pg JXI4BX꾺/Uu7/$4�\� H&a9|A@?p&;LOfj{�XQ( �"1nL (6\G�5y8 ̨cV7~?\*?i  .Upfw;"Fلt5 M[}]XuA��UpN& {EޙI[M LջIp-%Bu@f>8S'<&"F: &�x\H"خBMb߉)ronmܸ(ۋo2'q>BI˝ vq3kwRgp͖:/177 @M 0f4Iv p*/>, N]YQUmk[c�O2idm�xmtF.i�_pjH$w0XBL }f7{G 9w> kʷ uGkª8eME"9.^%8c_GO, %F,F%Y"/uvj}#_ TGѴPw枹Ա /S֤w?ڌ""/Ep UhP{'dt!qvKA hX~ɚ.q nIoK[6<Wc1 B0Da1,& K1hpI* iX1jc^� �n&֑S:zb?_tbLۈ-r$L[B[5B�1d2Y gDϮ/0jOs�m?r?=tRwslo#|ous!0{!@2w$yv+>`{Cۉg:9@{@ݘ&n?s퍽ͅ{QZȒEJ)eii �cp$`6҆d2&cmf}_y5n̓@r{Q�8{s)*[ee5zQٗB 9*׈}8t\?Y 篆L*j~w;8�l"1XN~aAX`l#BL ?َ.S!F�=HA^UK /�x!Nѻ$k >_=ˆm2sv����IENDB`������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_quickview.png�������������������������������������0000644�0001750�0000144�00000002547�15104114162�023304� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��.IDATXGWoSU~ul"6 0M YDI ~�:&&MeV`6 Í溲u]n[݊>ٓ{{9=/ˎ4]J)Y-j}fYHTb&nysc]\f3Kojwr�V&b)ĩcJpVm=m-}`ϒy¾>zkPnR E9({;bCl <wah»2) A' }PS&Eu[ؙ|lܰ-Q@Z`ZJ32`XҌ 'YJ3 `蚞U+U%4$me >,Ԙ07oTs N|^XҌ4IQTJݍ_qr;&`"0dprlW:q fu XJٚ6 Á?zp}ԫyR7 i|dB3~IGGq6�Vlg)P x ]䯯D۰ J:G3fy ]=p9l=||<N0/u Se["xwbe^1|y.he ̌ 3pr?F)bܜ;tg]N3!$fy 9\t) =D(Pqw>Ηs hbF"JrIzAc"1$"Btk2; @! +w+M�z@D wnE$Iӌ_*y�Xz5c BqtOq^00 ,D 8e+y9l6~ 4n .I"ūbۍXL >/j"g <|ٗ^}5[(,ؽ$,. *t ->lX_UpX f.3b3:b³<8Kv#_n;p(ʍXUVd%e]s�hYm-w /`jS>w= ݽhY{BF۝~j*~ =|29`a!66_؃W G3ESÈ$Ƈa (l=UFWr~ZTLDc1d3(H”$ m8} {uM<$pr?F< ɲ;qb=2.H`�).~'YMfݸ ?KJ'b7+;"x����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_quicksearch.png�����������������������������������0000644�0001750�0000144�00000004440�15104114162�023571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:55389FE8107A11E380E4B57E517D28D6" xmpMM:DocumentID="xmp.did:55389FE9107A11E380E4B57E517D28D6"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:55389FE6107A11E380E4B57E517D28D6" stRef:documentID="xmp.did:55389FE7107A11E380E4B57E517D28D6"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>v��IDATxڼWklU٥ a%5((GIe_*BKL|5 A?b)<^}v[tC3{=~;e�%~�Dd0- :N<:wJ7ʦWڹ?n!an޾1.|V_Nz"?kN9d>o%Ylki ԯweۄ=G.l %&2IX:8&Ҏc>y[z]C T{tm%Zu֦“:pќըBmt)W fa#SL`Ee? 8'Z:$hE|{7IktRpr<" MR7 bKSx5ML{D0-U<[ $o8t MFB+=0-zN Q(qnc\L<4kLD$ $T*ȣk8qql运Fzc)]`L"d=Zf"<tW5V!qǤ q]p}+niŢGkrSm (<K$ER W2Ev}tg?:{>5QIh`i\;6+_vք H6*I 9?׍a|2lOeLWǗ86/l\N QXto?I\&c9]diG ͘GVF29n%SeVj."UiS }65'0.xV<SG9kl'<"_(Wh"2G|M;qw�k\ےG$Er~2[+IO`4RϭCu UXY\CLnP{j &\R8t.oҙ&=)ÇQ~ÀP&О"4}HI47/@NqPrP $p82+`?.36; _zr~P?trH_""CcفW}XXҖ$c( ZDL{'H|T<2a'd^M??Tq\%,;:}@}-ż&,;!:{>`ﶵFg_cֵzNvDל_G aW%A3Lf37g~ЩA#T 30qO`sQ _#:VN;@:lGf$\$󥬗|)"e ȕg<_ W?Va'ޡ%8Kfy>u/9}q*4l{H_ϩmoM0lmۥ$$ [Z %-.(1BNM+�ቕh����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_quickfilter.png�����������������������������������0000644�0001750�0000144�00000005530�15104114162�023612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:8B16AB16107C11E381D4891C0334723B" xmpMM:DocumentID="xmp.did:8B16AB17107C11E381D4891C0334723B"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:8B16AB14107C11E381D4891C0334723B" stRef:documentID="xmp.did:8B16AB15107C11E381D4891C0334723B"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>wV��IDATxڜW pTk7fC‚<@A^ili;cvƩ6lˌڱNf΀ia:-2eZ0@i;IL(!%l !!n{n b69LoƝgK!K|(T07z�C72pye}nT10y |>d0ii݄/H?1#) K`, lU2Spz>q_5<.}5!j!©(p8d"C%$SRΟ||)]GU19S;Oe{|D�I-\Ǻgނ˩ŕ)"�E(LJT=g"ǒPyI+k:X2Ʉ?N͕m%c7 chRH $td&&z"}!a noBR7!CU,;<iϦ!ERTJ]nPh_Ao2uQ 3-N4NKB8g8Ķ?]9"{*#A)Y0!f@7}u=7\]3/&;RM~hDM"^ʹ=fhCS'#6'D(-deZ<h3Pc0# _[//5f`(nb0n E ''t&;',dd fHhxGAĥCMOżb8j(qp"n#(O7O\SO`|sB$<U"_1]W~h_o?A:$<!h}-毨EAWP@ODߤB::}<!J!"Bڨ؎ǸyuŒ>U _%fQ�[č $j$/}Cl յ9C#&6Uϵس`wc뮺C(6|Ǟ|xKX<%sbb"$zSlB"wixRFy e89i, Gʚ gOQH=R9m$n,+˷Xg?".6~VU^]S F]Ɲ;q;.]SF\miHdGC3;K+ ®98G?j)߷k)nf= 5#m#|)f6"*m/5Va <B.uF JED>S!`QpQIEsm}P,ՏT c8ڰ79nr2p<?{R9u)\ E:eU?Wo[1<܏ Q�=>3H\Tޏhw8|2Hi@sCk>}*ܯP~{>K!gⵗ$Cd4 偽G$%Y݁ 2g?'7t <R_0fe͹-b~ϹdAv34 '\Lh*ma^/'3a_u3P=%p.uv↞y3 tݳ"'CtϖtMSE4VvljO=P9*ee) ʩQ;wnz9[:^nbD:R=g7O%3yBu_wJDF*[=0#�b揆t̓`Ѝ_ьF}kkS-C>҅+k[^?S 9Kvmxr<ځ'Ͼxu(dYpб}<32%^_E{Wp'VXd" 7zG"[Xk $kә2稚 Ҵ8O%6gcʌl�g$ ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_prevtab.png���������������������������������������0000644�0001750�0000144�00000002011�15104114162�022722� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME% ��IDATXMh\U}f&1 EQ6h)~ʹThmh҅ X(.Ah7Et D ֆ4Q "0Rkdq1/Mg,́=yWkikl��j)PxǓ >;!V%J)b?IesR7[y)_(+Oosrm<I޸̅ Xe}t^B!U@knnH.CD%xi_!� 'Жr2$ SV4DN >=ײ�1c]1YAr%h,>?gl&ډ1Y83_c @ #\p=HۍxpՁ vZ12pjb {N;*P{#[*¹5&H!DLߜaOr #h"V{?LC[R Awa2 T*6?_5`,ko~= suHy_ R|,UxU>L䪪E\ �l {w5/r5%Izd.wmC͕^ 1R.�2001#iHgȍaPq'![ �)exg&|!*7Hbqmdl/Xk/_be\hJ!&zG#Z[y Y`"R0׈ ?Q]{S.w$J07qJf{j*foDv�Ѯ%'J鑋|iHpjG)g>ST+@Ms VʋMq"Wxn ]s];����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_previousfavoritetabs.png��������������������������0000644�0001750�0000144�00000010236�15104114162�025555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME04��+IDATX  �������������������������� �������������������������������������������������������������������������������������������������������������������������B|��?��v����������������������������������������������������������������������������������������������������������2>w��,�F�����������������������������������������������������������������������������������������������������>w�BC�>���F-b�9(�E���������������������������������������������������������������������������������������������Az�BD�7 ������:"`� 0�?޾��������������������������������������������������������������������������������� F�=A�" �����������9$Z� 0�-޾�������������������������������������������������������������������������� J�>A�#"������������A$� �.9�)5�2ۻ�������������������������������������������������������������������������������^U�����������j� �����L��������������������������������������������������������������������������r�������!F����������������w���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8N:���������������������������_������������������������������������������������T†V����������������������/ZH ���������������������������VG8���������������������������������������������������ű=vRÊ[������������������ &D(��������������������������������������������������������������������������: �eM:�ª��������������������� �� ��������������������������������������������������������������������������^3 ���� �������������������������9� � � ��� �������������������������������������������������������������������������������� � �������������G�����������������������������������������������������������������������������������!�)�������������� ����������������������������������������������������������������������������������<U� ��" ���������������hB2� ���������������������%��i�������<TĬ�������D�<5(��P$�X0�������������������������������k�b?.���������������������^w������ ����wD��� �UN8� ��X0��������������������� � � � � �1�G�L�1� �� �UN9� ���� ������0����������������������� ��Z����������������&�=�����$Õ�w!���������������{G3��� S���������������������� ��a������������������ɇ-w *iE����� *P�x7yӉ����������������������� Ge02������������������������� ��������ߚ8*+��� �������(� E1E���d^����������+-3������������������������������� J:d !3�����������Z�����ݿ+˺ ���������������( �������������������������������`<�����������݅���eF����������������73������������������������eD޵� &����� &��ݵeD������������������� ������������������������p���������������7ym������� ��7ym�����������������/������������O+�V/�����������������������58%�����������%�68a�������������I��������������������������f�`4�����������������������A ���������� � �A���������������ˊ5W/���������������,�|D$��w��������������������� N��*n]����֒5'#� N���f������������D`D=X���������������������K,�������������������Lmgڿ����������)h&AS>V������������������,�����������������������������������������������������������������3����������������������������%���������������Bp����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_pastefromclipboard.png����������������������������0000644�0001750�0000144�00000003332�15104114162�025146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ��gIDATXGWklU.%}B " *JEQH!D&j$!Gh" $(hXb6 .-}iyv_;3۝޹|qHPYY%$$Ii,[S3p:pw% XȨ)6455-Gz0%ڣX7k BQ.S3u?Ey:Ȋ"H7o$T!&G=7ZL,1arkaÊa� 48~68alX%+@+O�ڹy1K d: *'"-H"#;~!K/Rt݋#0 " L@DĉejTD bh[?E"=fR YY!t:I0YI2rec-aғy)o{:U3 bU&=�d+#T?,QH__xMIwÀH-3Yҵph{^t\!}L8P]_9a6]d-6�ZűqrN+b7((3P7w_4 na]KS(nÝ,kj:P)䙁\Ea$+g9ZQ<0@$_U*GLPÇ,12^ft!H?cUE (0 JBQi5,1^goc׏ xrj6'UlA8PgӳWFI]\ܭ-@Y2 ;s MƤ^32jSr}�wF{ĊB$=&!U �R1;{%5+&aRJq'M+O 輚BM{.(T [OI<^MHl]9:i?drd,du;ނKb_tvxvj &oJd$rǢ]؅NF_"T*{7T ܩ*C'`;�NX]P9dF뙓)d|`'upF>eɩMA02f]A_@9hP 'NP2�@8!fT1^ު'~znobdwPusFD"2 HBn¾$u]sO9 mSI;Mޟǧ7%K'ܯu/)PeTQRD 3Z> +󳶀oI|Q툹r,-CAZ2 M%WQ T L֟6h=qsE<>VE+}X2kpy%p:pO3{nfN0N+IB?ZrL8ClJ6mﰫdC)]I @ GLwh F͐þo !=/L(|X {!)=f=-mYVJp<YvjBr_\NʖﻥJ+] (M^I|%$ipx"}ou QC>"ciӴo獭g{NmˈQ"|3+JKV����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_panelssplitterperpos.png��������������������������0000644�0001750�0000144�00000002236�15104114162�025572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME �)ϩm��+IDATXGWoTU{3 LL(%XMXL[ lqEl�qR[)(AˇM ICJ&2;wͼf4gڹQ}b0Fˆ9i' &Pa++e͏l-͔ZH [8>b#~%ףn-Ae({ę8r}7!$n!oqE ^Ƃؖ!, N|PT�-waq][\&đxJtcC]*>_1P;I<- iRLd UNq!KP&4O@j5Hj L d <-Giq⹖@),+ZHaHᤒ3'q%%h%FxvA+1Z 1`*/U$yrL1`JH -@ ]EgnrO!@83ɛG&b"P8Ӳ`IC7euNjHs8xwvH@÷ }X#<;o?^ⲧy,bw4HMqọE q{'0?*zlB9DC1`٧%\{=Dwy{ ^>A ]Uײ|JzgWݝN1Sa3 ޡr+ᥣc0CRw?{Wbn8 ujU$\.^p~?*Q6i,ݪjnc<Οpt78>`Vى .ߓ YMÞ}[_\GQ(1e1 xI|!0vpA*z#id}/&IJ؟ P 1xzf /n(~0&9(ټ7^g}"]+jMI,ҏK'=Q$a!Gu_#H9VϨWwdҟYc����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_packfiles.png�������������������������������������0000644�0001750�0000144�00000004071�15104114162�023230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���IDATXGW}l[W=?ĉ8qR;&mkbecĴ?ƆF(u$H4ݺ $c)clU]Hqlljǟ߹Iݮ:{9kLĕtPp^}&vn0^bmne9:y\ZK-zW |ʀOSnEWXi?~\|~JF@\[Py~GBm]Inۋwz `eUx ܤ.)Zwd!8m@\Eh/g\"#س^t۱zM7}屮K#k6n),a GWkeaHA<47G:ںSMO߄yh.-ڈ~6MeD!_@:=L:-XX,sS;_3[AU|x)鿛$1`]=zLyw`F7pNdQ B)GAgt-TWy~y2LF/3_%̚zQGѳ*&7ڈEt.2.dh'` ydyWj@ٺk7# ]L4}GƓ?ntNbǂ^r=(g¹;)~C3lύ^jX Mc9 9;8|xQl܎hkis FaWh`0q�`AKHx*Wd;oyй΃ǏO@W{�F ZXv0]ylxpX:@}v~~i]XF[KTM~^Wj~5SO*suaCd&CXT6oc\7޶GҀj=]!FDVLu{^~NJ:;@W^)9=?`&64/Gasώ`~fLձs7}8Ms|}!a4,(<PŹ5Se,DE8:p3l,Na +c0$ ' :ޟzV=3[tؤ.3y02\ .]0u%/RY(�,xs-h5Bc�WehH a?@f*9epx*j$Q-ѢJSC$J4L"L!#�sf&G03(Qc3H #5 YjU͗ !i) A)!oXq+cSD$2,\m솇Jc#NUhO[瀊(1E) K |vyT++S}xNVkP=V1,,"�Db*nHwJ1o?ˊ9NzTZe(%_B?Wn elW/곯U+^$ "Q3oZ5XLոj/V|R+pRj"b3JRkQ^OUOp_qT>ti0Jm#N"e?h;\?r˅qcÛ: _Z#h 5?zyx?pYv'y aא㑜L0:<:yv^OShQꜚo!(פ\/زuǖuV.w%“V#d�V^0)>N #If0>x"{٧^'mZTԃܡVJHӸ-ߌ>݅[kxZ&&qy O̾xsY,u#K 8"/ I- GBFѻÞ[bWй"V,0rvCHlI,JrM.ȥ8"r6jҹ{> & {Ʌ?I'Y:?DpԔ^����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_options.png���������������������������������������0000644�0001750�0000144�00000004473�15104114162�022770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڬW{PT]vYqQP*ъU#5&aҦ:1$&$?ӦM3Q' NA_a, b_| "bR^~}9X%(-?"s|,[9@1TsxK|1 /bCQ HS f5�qyi٧</|we2/91 D#ꓤ-Ve7tM^'Y=</uLO6)o5}?>/[]>x cƒ7a i-:iON\VR�}�ng6-˱V6wV̟a̩88�ŞB"/^\i!}Z:Qyb<�pϱcٳl,uN26 zN[ܐI)WF~iF2bF"~RDǖ|;Nvڹfd s %<˽;̨=ÌCd 4 ½1 g%[@.Ѿ0 Q{,l0C$C_xǥdTPEu5S?n72OL^FwT"Zh&�,3V?gY_܃,e {ǘbUKV_`ًgc+Id!& _Λ7sq=ΡN%zPaQOiM'I*(^ -FRtU+g~ )ˏ(cFWD[5c9@>Nc_IH$%AJ$SHOԍACUZHF8Uz۫Cy!G/''K6>KK}$AVOG7:@(j][*jh?Q^8k*c$9k~m4?;}іtrma'FI@h*4dU Q*G�ESSоauF򖠃1d"}! DH2 PX7y/`D".AD|=O4_ӼU6?g>?lj#x/rzG tXτnE=Ixbs?B(fXxb^U*JDmx? 9R??bń\mѠc5G\z Mr3JA}rAqLJe{ыpVÍ<5/qѵ䂍#ab cm^e-du!3NhieھnnPԃ~)u�s^!Ē_g+\`V*a{`k>"e7,�k.VD+ Ă#f& ,a{fb)ecc8r2o4 Wm|KaiͅSX3:ch5#Š &H_BF.)R;"z~V ɸ~ń/nx+VO%.j6*FXʬ2RGj 6FaNiPۛ?݈YU?Ej|igDA0ay0+l7_BJT$ E:6vr~EBl) >�AZۀ,B73Wmލ̟"02龔*^2Z|$efzrހ( 9�եA5} c)f}#]-^.>9G`xRC7P5Tnm_ǭOmr7:?3[BJmp] L'�O!8$7zvvޝ(O:)ǹCI1mEiى6嚖-Z HD%aP0K}|2 iuݏ;g_Z˒@o:ԟ#kU>$E{$T ֮̊AqNRf#e5KdT2$5'@I<[Y歚-, &]ڭO{kkQS_WƲbG}4ۀYC!7iB�tqJr\RzJ{1 ,4$F9]/-iΔ)B+ 1؞ZK)):.1T݋^`,O׸ͼ4lj ݭ;܇ g^QUP7z%F*%tetxYz{7tno/ "(x7ڌ@] UTc|s�0@B *2 0�{\����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_operationsviewer.png������������������������������0000644�0001750�0000144�00000003151�15104114162�024672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��0IDATXGW]UUzRfJb؃=H 7*3HPBPKbRPY &> B?HXdr{ާY{R }9wYk̬Y30}i4ˁfږ ʙAk'hKľaj۾6)cS \Mޡ{͖f~1 MS?86ԄsddH5O 4)ud84f,ml"2ޠ}ɡOG{f]OjGӝ?mVyQXƈֶ7(Fwx/zVA: :7PDuޥ Ewrg52]GfIcg.b $U*Fבh42Fa\yfUKA/ chll(�Qn;??Xb ĉ=:򜿦&/+yI,dtfsMbGSʄ>s3܁HHGF)ل<}.lI6cҕoReߞf Dqj%F-DTPZܘV8#KH7,90 Y4k1\Rhg9_:;#̟v?G9KiZ<L([L(9nkN"jjD֚ 'V,'Me;>#f(4 SGiRv0(RŨ1n.iҪ*} h2M/~{P UIEeCZNʽvyNgy]E<xCqiq_�?n |س4 .Av°+�4aUps@ 頫$Q5 hPNV0A`v8Rڒor f#`JTIaVʑESj$\21;u 0mp'`[,{%�mmU`7&[ 9X#(8cfC}dMF܆FAϒ67wږ*հ6)V󜓞T<rUC:bkB(@B :6Waev>v~"eaFxpx;$  *|bXrUרBs}ujH" VUaN҄9}6У+�\@~DZ]l tE<{8'ᛟcgOIlW<U,pH}1bH* b2e)J'8^uQ@fMK*) =.&SEe P2EdV_9G$m(!I@;e}61|;Ӌ|QwY0r9GbF9=ww&`TZ\,J#:]aӻ-:E'J>BJ!]eP+5ؾ l-}i:W~�{>`\[r9j..3hĂqzOpGAƵ*Pw}~" `����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_openvirtualfilesystemlist.png���������������������0000644�0001750�0000144�00000003224�15104114162�026637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��6IDATxڬW{PTUݻ oRDA#GtT4E665a3&^6L3Y) 9 R| 0Cey{]hae̷gϽ;{sAҧ}]N_E! 41/KֆN S<A(:s1g;�|u 1vIC""$WBzj6m�1,oB6=C/z\3~&r pީ/L됴{ @PGUUmdV�/iz'c<Qa8V FO1 0 Mo@asi��X? { 3xb^/zOd;+^r%ʛ= �)y›˾4[dG1A|dJQ NjP]OGwt¢CJJ�| ؂:>:Q+D_Q!i)_Zf &#(UtԜP sc\Ig(J@Ԇuxr0hiiR5�q˴{O}WܲR #y`q%Boݸw/qa`,zz z@0}(bF>0łr㑴G�'S WӂF{=oˮőUxko66[zxm)ҏELG L?H̎39س&vñ]md9%UjcnsJēoU2=fm?Ʋ.1qQaY%XDz>_l70ᛑΕܓXrRz{7P�}δO[)85۲uhՏ1".=dr)cuHhi_0]Y@𜋢t)oT6N=YI][v8k౏93Դ r&wbi¼RngB0o#N x[Mq2ؕ41mr7ׄ)NYMBCE펄C�gˍؼq5 NeD@ȳX5 /d7\nhH^ʪQ(Q�4ݳ)N"Kn@Bri]rx@Qόn8 ͽx b")!p:I0&sV2@$li+b�ĨAcDɯHN$+Gnabi),GtPbt"yҿK4 _Wʊ6608P7vB<{ڨ8]|q q,pf&֬ۀc'�БnUG 7gD3_Voe1hCsK;,ͭ!!υ%SD]ya2fSҾE88T&oۨI IԲ E~Kgse).YmE0h]6CYgq"7WcJ@gU}}t48z^>3gʎ.@ctwIOuEgIèWui`M`��ħ1&x����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_opendrivebyindex.png������������������������������0000644�0001750�0000144�00000010236�15104114162�024645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME )XB e��+IDATX  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������S�\�,�4������#�w��������@�����������������������������������������������������������������������������������������������������S���� ����������������������������������������������������������������������������������������������������������>������������0������������������������������������������������������������X�����������������������������������������������������������[Y�������������������������������������������������������������������������������***������������������J������Z����������-����������������������������������������a_]��������������������������T���������'ѷ���WGC C���H�����������������������������������������hec...������������������������Rl� �������������������������������J�������������������������hec444����������������������������������������������������������������������������������������mkh?==���;:7��������g�p0���>�I� ��[%�G�A�2����������sqpFFE���������� ��������������� ����� &��c� � [��?�H�������54sqp��������POM�������������������������������������"!��A� �V����4��Y�����������%�omj������a`^M������������������������������������������������������������������������������������������������sqpR��� M����������������������������������������������������������������������������������������JIG�M��� ���������ECA�����������������������������������������������������������������������������������������������������������������������������������������������������������������@=<������������������� ����������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������ŭ;���������������������������������������������������������������������������������������������������� ���������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ S|����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_opendirinnewtab.png�������������������������������0000644�0001750�0000144�00000002642�15104114162�024461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME(ZL��/IDATXklTE̜V mBRWn" QC K40Ma4Ac�k0�AU niin38 Q9yߚl m~` ͱDdۜo=pӇrDn* q0" ,K tq~: &v$]mPb ~x+ $r zPA}sx_|ώ ZYW!d䂈BFDH&0?W^w>~lD4:hIaD]Ɨ.[=u"=8Rd+PK-k̴Qh_::㜬<t$g z @Փ[ӮjDFXܻ)/^RYA& f$ZɺDPrk =K _5ιIXbw m~\ _B %PV6EbՌϼq�X[k(7E Xk1-ؿyB�d"(/!Dī5|!CP9dXuf{ijF[nUăCBc�KYTVp!H ֌ NtƋ/ey<WA@ʁҵL倲*v)5vmG ĭbD8[c_L506lxo䚬;J9`e2]7Ηe]ɹ+p/�#?$ԹUUbP!tnHӔHiKVmӂU%#�,S;}e 8( c19bjɇjRבJB2r3�^+4dҺXyo1`!g&BSo ;U�t;eMM_ܮ]}kH`\�"4G" 4 L t'>?C)=ݺliX BSlWmZ8;ԔH _3bLd2q`u!ch8 {2fg;4TƝe+O+9v\BV\`p(=}8m7h"PX�ګtXU$ z/h'*hr0馻bHr"OQhd*� d6ZC7=8|=7k 5#4ۇݶ����IENDB`����������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_openbar.png���������������������������������������0000644�0001750�0000144�00000001302�15104114162�022707� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��dIDATx엿kAǿ3{{lK$v   6NզIBIX ,,{w;9Y0~;{̱,P(y�8Xjq0j[eD_uޫq^L:-WUV zI4 s b# KovҵS=xlm &i6m6_YO?0;ssS:;w] '>_:acg/Vdb4@/Is?Kvt]`}ƈ6U�QZ?:g  +(1 /T�#>vmr�-!@/?w{rP�`/+o ~ H̤@ceD0A�A?~7ɽ(vѨ$PasG[ͮpƓ7yqq<9gO\9\@h N%wi{TQa٠,V3fFse&L1 0CO.% 6<mHJLll`VqrHGF* ,Vv-�ׁQ3����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_openarchive.png�����������������������������������0000644�0001750�0000144�00000004245�15104114162�023575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��GIDATxڜWil\W6؞8;nӤDPABcԖJ@lVJHmCRZLjhI7gyy\ǎ]tͻ~;=-v E[sCʂ1[O>?z?ૻ]chz\& ?“_߾w$1 S+#?dv�ht޽v9dbi9"|!Wφ:6qcZٺ{vѳB6JF/ "44?ғ�m1�C}ilu64|B+)t!Y]8kt qkZ%3PY (B `# a|5c:':6zġɞ]<9D."CfATXlpx; =`s3aff!ܰj H 8#̧Gi B8EU |+^>y"٣cɄ?7%^tӱK97L ?t|ƶRuhjDˌa>u-BT9ѷ(ӏPaJMvuoַ wC7l F*xsDoV(A˺Y`)huױ5pz(LQGl_x_yoS4)^<9ڎ5 Ճt ضhNJ`4U1IR/|4hD (~6þE^Tm@ J<Hy4fFlx L74xY=i{oY;s|&Q&K09Y `ca2?$\DS`2?fmaPW5_<V䬡^AI$Do3j۶bnN& / 9l[D(h^Dlܾ.@ATb"!YP׹|WkjV=+?PSt6|0;#޳vŕ70y(t޺7l Ld�l�knܡr-iקSϐk['=8a[Mk3Xh.ȑ‹7tr .PP bH"wt`YEY#:;'H$Qʗ*$0+Ok|4cTc(dwㇿ 1*�۬Y꺊<Ue$LD@, _FA+Ti7L5#pq8 Fu *4_15)Li#!*d~\( EEr-Blu#d2lnʳ$l҉ /qI}AMJmTN;9b,.X uz)$" oC3lH }g\ �rIx4 ĆZCQ,pCP4|BRc´Z(F)NJ4/�J)6/5j*RWQ9GP|^[m5ƲeLCGeDZ�1e�!FU|Xp:sƊ~ 0L% KL3J7`]Y4@#<ϛc;2pL.+ +`*yb@&eb97/\, f~EHKIEC"Q1W�02].V}^m͔Rup- \"M*Q[T\yvMkw6Zzkjh$Q\DWFD@;S:AGƣ5/ȩ v 3Qv)�̋MVGVˀt4JFj8B޴F V($J)+y,eĀȪ[C[HTU׵#V\FpQ <VYx?͖rO@޺~:×0q%dlW `) I] x2Ab9FOMj[�0zL0B&˼/f`ʚ)U\`�#/-Ks����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_open.png������������������������������������������0000644�0001750�0000144�00000003052�15104114162�022226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME � `> ��IDATXGW]lUfvvfm"HiF4A@&F T7%&_$ ICeRhP(t--ngvf<gv;ݿ!;s;� =ua4^9D2{_B+ŭ<elW5Kw|ܑ1wL ddIau9�sftm|VOČʖA#NS*RD}cSxyy XӦ~렑Ld@$5[F%Td9ڼ pzWUe@m#M˄ @Z][�HP`qJKZu͘LD �K0VX»Ha S/<N�W^(�fP[vJ3ݰu8Hb ŬgHӋ6 @Ud&z'\D"d+H܈FW0 9&k;kTͥFj[-B?+�> hCTjC|x*4WC`*q0?�:9W<J :xrmAiݏ> ;=jJiB&P~j^JܖPvAYa;Bw_ȣ<-HiB4p9d7""4>EQqcL"͸b4p)r,˚P,M  2%wB*] t- Ωr[vRi ̞<wMKߋj~jB@G1rCs"@seV�@IO}pTI{,pTK]$}G>d &Pʟ-H7~ !DJj| GfUKn EMB)3GD]>DNJ`\ύ1p3pzާA }<01p,%5)C/LжW&~QܻtJ=R"dnLDE/zOCt?A8SE<4'ο[й]4nrsRKP: X i%iC%":N�nOrryr.@ye JUWvܦ< Xкsg0M:ȯIs8|pUUBPpH7~@I2S3]�[0ۦg{ ֭C|lWv"lizPUxp �J*['�jJ687} p$cͱٖp 6{3rA|?jeU0=n<Jbϕa߂pjk@KU>MɷѲArvYli 1cT9{]rz\&Ϲ2 l8<ty����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_nexttab.png���������������������������������������0000644�0001750�0000144�00000001771�15104114162�022740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxW]HSa~smndPa aEXADuMMAFWQ%h%eY)TdTVhY<mlQx9?v{}7f&8q,UŰ:\LNOBUxx5mD# -wv=9® 0%Ӂf*N\z[.Y%Q}"%u9X]c5Ut(NnYNj ъ 8pϺUl˟�siF py�pX�y g4Z'Dj8.At/?!1L4GЦa6eo}2H>m<Zb] !CW9 7pYfS l "EUށLR|r Q^Skx*K1)= @6S3 T:W>([gȟU{OsnHC}c||t݀TF!~;LFJe$dcŜR>AKTV1!Xd::mR%IcQ*tA JgCYVoF]9=<X ?,)Zml䖥V6r̰~]K$"gДwC R#2)շwD- ;QM7^c^n._$ Eے5tA7L/ W/nFKSsSauD}GB ߒwX="4;Y`e9#1[[EKם�^|GfqqR$G[LZEZy-W yoZk̢)4qR9=P  G23a#mrťL�(\4l ` {?�-@KCF(����IENDB`�������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_nextfavoritetabs.png������������������������������0000644�0001750�0000144�00000010236�15104114162�024657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME/&~.��+IDATX  �����������������������������������������������������������������������������������������������������������������������������������������������������~,��������������${F�����������������������������������������������������������������������������������������������������������������������������������������������������bX0�������������������  @����������������������������������������������������������������������������@$���������������������� ��Z�������������������������������������������������������������������������� ����������������������� ��{Nc����������������������������������������������������������������������������(2������������������������� ���������������������������������������������������������������������������������?3��������������������������������������������������������������������������������������������������������( �������������������������������������������������������������������������������������������������������73��������������������������������������������������������������������������������������������� ��������������������������J-/�������������������������������������T†V������������������ ������������O+�V/�+� ~�dJ���������������������������������������������RÊ[������������I��������������������������f�`4�� �������������������������������������������: �eM:�ª��������������ˊ5W/���������������,�|D$��w�  ��������������������������������������������^3 ���� �����������ʴz ������������������y� �L& � ����������������������������������������������������������������F1eYN;�������������������������������������������������������������������������������������������� $�!+1�K������������� � �� ������������������������������������������������������������������������<U���g�������������������������������������������%��i�������<TĬ�������D�<5(�����ڲ������ ������ � ���������������������������������C �� �����>9)�r*Mh�wD��� �UN8�������������������������� � � �����������������������������!ߛ�&G�����1ڡ�!e�����  �UN9����� �������������������������������� � ��������������������������&�=�����$Õ�w!���������������{G3�����������C�������������������������ӣ{u������������������������������ɇ-w *iE����� *P�x7yӉ����������������������������������������������������������������������������ߚ8*+��� �������(� E1E���d^������������ ���������������������������������������� J:d !3�����������Z�����ݿ+˺ �����������M���������������������H�����r�2���`<�����������݅���eF�������������=��Zz�a�G������������_Y��^]��;<�������������eD޵� &����� &��ݵeD������������������D�;%�QE/Z����������������|�M�������������!V $<������������4��M"�������������������{�U�Ҧ�/`�������������к|�I�����������������58%�����������%�68���������������������������{�D�Ӡ�-b�������¿�c����������������������A ������� �A�������������������������������y��Ӟ�%����‰�q������������������������� N��`6`6�� N����������������������������������������I�H�B|����.������������������������������L:h&j���)�����������)h&j>C���������������������������������������������� ���������������������������������������3����������������������������%��������������� Z@����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_newtab.png����������������������������������������0000644�0001750�0000144�00000002164�15104114162�022550� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxWkhUf繻6oSLڂQACX4CP(?jEB1j(DUִ>HiUB)M7Itl=ܙ6ƅ s=={3 rpLBtt5AV/V.ƿ`$p<-ێXo6%߷mj@U¬x}Q[-^6 a;];q]pow̉NPO;E"Lv݀p_pɰp*g^n0pїZ 0cSI'!uS?(+α+̜F'm<fce&Naہ G]ZEMq<�uO}ZmKnG85ն<D2? m.x\.}<\hB:z ;M<R"[>g?=۳m*Kkv'J]h\hbjs xx5ZW3v Rݏ<6Cxdqڼ6tZJs\?O10V7B06 r)9K0e.W/+'# 63F]\)aiC+Nef{Jge55z蓑%Y2TdR'w{Kkė؏x= w͸'c@p0:EPEĚy!yshk%R)~⠥h{f7,dNJe۱>'&wR W *dL% T C6A畫VfYŠ;hɤLgG[�XV>ێβeh[iG, D>T iOƑIp?JF$jz?mf[g$7hcg>n؎XX XLXhz e[ $~/DIۭ$_D(! DXdJ?=ۙgL1sodJBR -�شWLB3����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_networkdisconnect.png�����������������������������0000644�0001750�0000144�00000003463�15104114162�025036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  ~R��IDATXGWyLWf�DԊPV`9@!T0j54m&=x&6V)56X "tKTvewfg7k]Ӿy|oPCV5O$[a@cW,\l^ݞUw\>?ql CC+G|=^pW<*;'%YD<xu-XWڴI@?l%舞څ�/p|0+:'U�e�b|[|ȏ5^e�2lP~2`'뫸m��*;R G8|)[w @aDA=Z${Sɺ+v>+< ̉(j_BB}S| ƽ�ҧGC@Ed\UeY�O/n9`hcCՓNɘHO|;/ꔯ9 P2a%'ʞ:S* B&Po/>ATP >W�K~a|2\ٰ9+O;4!!ӧOf)(a}z' Z;v3�)a?:)xQ[F𔦎xzY݁@e"c)cFb5x OBzT.,1gJrYYo uW�PrMMϭ(C^ 2}΁7ͨ*%?[E0V+:F˜ (v*\L)rYŰp^6|�Fy\T @wٷ uUm ;",N 0Lr&)�*VaoK=>|#9Ȫ)+/7I >`Ġ0x`2#3+ߜ :t#gWH"l�<S,Xv�?U._$JeuSs bJAX-,<P388 l 5 >)7Tg Ll1}' 𸞞gGPӒWΞEGYzyI�˺pkd;W �ޓ=f8Xt!x@ٹrԿw pJd! ⶓqCۛmbgxl]AmTR9!2Cn<DFA; JkT6bQQQ .ڛ­V;e [y!ozZC[i<qΛY~/qI0!1TWCHD$=(_XgThg_e[+Njnu*խQ6SZIpU=c*?{dg*`(=:߮]B2d-xgdNQP_W{Ѵ ~<O3(�j$<*Μ r2p_"׊I!OHNI:;"$5܆3{ .AR+|3(C IDžM"9t&2:jU)q)Q9Aבr-fLZCƂ_Fn3c ixy_EK>iXâTgu0RM7S{ ixZrVKEZs΁k^[ncaXX g 6|֨5Tܳj&p7?;p@Jpҧ뾂y X~jͭǚZZ*HM q/˭Ij����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_networkconnect.png��������������������������������0000644�0001750�0000144�00000003421�15104114162�024330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  Um��IDATXGWiLTW>͌VAB&" b1*EMI?-66QhjXMڤ4hBF "b2 o9ofd ;{w9=9RpqlYճFc Kbu)B~Ϛ ,6& Ce1o}aU2 Ȇiw|siA2ܾ�8~۳i24LEde CZGIɎSj]VxE .T5$)@ؼQz<X @-=9|6௪&cs=V6\�M>h4 r .0PDžڃehs@ND6נwȑ#mJ $QѯiHaדYŀ�у`K@91p}Jt% #{ nqG�̱ީ@`z#Abdiדra;*D &̄ 2U\^P; ؕ :0(k"aizG>&<hѷԫ $e(uj;dVbǮ7c-J;y/45=۴a fca i=ً}97+lhW&yxbR6<cxb@왐5=~1p =L fMnfTleY lj ~z+,bY9UF=6&6 c@C Y:TrbOLlbqfyr5˝lAA3:@F :N-VLN{CEO%_(&  V̀ y'� pq#g" !=>L7-F,\||& In#h-KOg}AAtwz ( 2/H 9 #Q%>s\ب0AmV fCM�ŀ^#ilm=7B PZBٵJv*hx|اyY?ZiZ& #uց�0\|#xBR %fC � [bSnjH]ֿcxdn^B>n1wXk(W_c<VP%XX8'!3-ljdڬ==1X�Zz`Bb t<MM>#a˒翳jG1Uy۷XU_�H- Δ^Eo΄ӥWaѼAz`wYD. ϻ1 -0ٿ٧؉[?BҙF|P"^Wz44}Zr3ހ"1X/ȃVèo] cCِKv-]j@кG-Ll3=rs0,"e E |cVsҚ]D?"9l 1Csx le` &b\ x@{Q*G [L=eg/ͦOMmvj<WgyNQΫzI7~YsNj \>PF~cu߾-z}-?iP(QˈFfTxҎ {V}*n]랜/8m dfU߿f(����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_multirename.png�����������������������������������0000644�0001750�0000144�00000003254�15104114162�023613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��NIDATxڴW{PTUݻwwYDS)W"S VȠQSR4tiPrDCG+ h(ij1*YhCT @;gw}Lo}�@:ZTT AX*͐`_&$9))&.>+&lZzۋ_697?T8o=!_+)_ok3 *pՁqG W,_+-Wg2&O <VWTHYi'Trtv!A$z{}^WEZdJ."BsKщ@,.Xp2M{=pH<lбFaֳ R vg6G0fw࡛X䨀!^Rhh {C# 0ki a+6 yEqbڗ@U&6`ÍL*/lc~e4J,<`cd$eaA.'"n Og :}| }<"iKv P#ly%h}F4~-}�{TWuaH^ FKF=#5˙^TPC_K&kȐN H ]oC .x<S@rS~ R)+"gLOs*Ia% I.xSAZLhCtV{I)(!5Ph|paS0-ȮǛ_ۺsB*I J Y0Pb)1qfԮ 7 :�i{"{HtT@acb1*+hΈU/O PϨ]ge;|xFz{ 25;Nߕ'�B =YbuPI%ם_ 5##%RAQ)-y^'Szʃ_JOz8K8k^A#Z._ٚ?NSXDi+IlE0^+,9x9NME7+DJûJzLl(@U?a$"Rȷq6Nhd֘8csX) (,MY;{!Gb(+?;&U5v=5bbbc0=fDF_2?K 'KMƙM-J LYr_*0>(;Cvl].P 8�OsZ46BYvb~Nt;D$o8!auL8o1p)2Da8 ~6FYCg% "y,ySG`op.C tgAg;w!<1c.;VENNs; /8z?Y^#z#d},ܮ'l6ϞF loEUe V_ w, ->#o(pG@H=m[݅>fFl!uh$~𨄸}ugmH;R@h0XgCbp� '����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_movetabright.png����������������������������������0000644�0001750�0000144�00000001761�15104114162�023765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D��PLTE������������������������������������������������������<U���������������?z=v������?@*_-\0_9=>~>??@ABBDEFFNUXZ[^_``beiipqsz{␨ϩ //44++$$((&&,,&&''**++//1122337799<<EEJJcczzԀ���tRNS�� $'./2BCNQSt@j��}IDAT8c`$� `507C� =uCS =YIf0`olA ՑRruy^+N-PG- (444,T-m Uy UbAlTm*?TACbb22HLlPst)POMC >sU j2PAfbNR0PM8< �(wi]n\[ UU`ڽrAJG67*(|ꅋ,Yx2t$Lъ0iE=B l@:{)00c^�X< N6CA 0k3KzE81@}7{vi/+1qk#Y0�حCt| b|xع8Y�8=��#"����IENDB`���������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_movetableft.png�����������������������������������0000644�0001750�0000144�00000001761�15104114162�023602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���D��PLTE������������������������������������������������������<U���������������?z=v������?@*_-\0_9=>~>??@ABBDEFFNUXZ[^_``beiipqsz{␨ϩ //44++$$((&&,,&&''**++//1122337799<<EEJJcczzԀ���tRNS�� $'./2BCNQSt@j��}IDAT8c`$� `ճ05T׳0C�sYIf0`ҏNpolARrn&Fuy^+NGR- (€8(M_5Z)*6F5C;8ک6$&&#`> i ^@X˷=)G&3 dh t;@CAyvLGʂݮ`_UU  ]Zxɒ%ΐWRRUPg)Z:{ҤHFq3ϛ1&/˖Gl <}3M: gH0Nޒ3f̜5c(`/=  ,@es" `bBE U\ XUL`e XD)``bgb HT��&k����IENDB`���������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_minimize.png��������������������������������������0000644�0001750�0000144�00000005330�15104114162�023107� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:C50A9D2DA74B11E19DCC9ADBD7E8B646" xmpMM:DocumentID="xmp.did:C50A9D2EA74B11E19DCC9ADBD7E8B646"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:C50A9D2BA74B11E19DCC9ADBD7E8B646" stRef:documentID="xmp.did:C50A9D2CA74B11E19DCC9ADBD7E8B646"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>t]��LIDATxڜW lUfXҢ(ᐂr.mQшbP@ @4Ġ(#[-H aQXBKKK^y٥ЦL;덂?ֱK =K4( a%Y97%f73F֪àu{xF*`-8%2Ch"2VUfaET ^\!?}b¤= @/j{,*zO3TW{,4 Y�?y N]h5/4!)!hwAоX>|’)T&cBX@bY:aNSL(NqS3Gœ5;/ ɇ@2P#&&\<4lN8YrIp9ctCz="ekyX% hY*�CsEVtr^o �y$`WHKR<p^ [)\҈0 Xؾ:=X đOdžM1w?WA@?ZҳgI2aH"`W@278.BD4X%-~\W4bag$xC,DIYrQ,aKۼ#Mφ2D\Yt7TJ'_] *Ų]$4F3)2y>=vċ? @Lr(̥lw69kbMZjdXCГi: 4,b(>zMMxoGU*+ Ԅwǖg%8Q#|yuvgF௚f3*0AgRz$=;9',l=u  ٧�ze/YX /f " ; Թ UD{ uxbЋ\9I\drә'' Eo-8qEЏl@5$9۬U!VDu6%X[lFeI*t+(yQx݃CzyVզ;";̲/:N\N,KQ# j,瑣uIK˨f0 $<}ªF`e't:O2X4ꀿxQ{+*;x8ܺ?Dd%Rvu^ p;y0q>0SDRͲY&l한E5}ʨ%i=$k/imc[̋~*b+x0wRS2衎, QОdnOT3JG_bW.4! FUиIR^}RDm740RSb  BPɇ 4=?O5 wЎe 8M6[je1tXpoyQ#[V~чvv6BŅ!wej4 :2 /|s=\da%d7C' nR .g`y{ۍ6@73?-ȠW% 9Pu]){Ra}nxO@PXyA¿}g _%8bcN^6i#R@mU"\z`d<.a͌i#SewH—[Ji4!yVdj h}~Ũu>LTҮAHmvj q.w~zhb|kMh72"x5Oͤ9O6[Ƣ bU>nYWnprs!]OF[V(&,ÏeƷa &+\}g5)Bn4HbT'Kz}W݌6EL}%f 0� F�����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markunmarkall.png���������������������������������0000644�0001750�0000144�00000010214�15104114162�024124� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME89J��+IDATX  ����������������������������������������������������������������������������8'A���� �'-*k K��ښ^������������������������������������ԃ^ i+{����������������������Յf aם.045���������lU�����������������������ӂ] 'G 5� w���������������������� ݈Aw⽷��"@F� �����19�޿L���������������ֆf $A2_����� h8X��������������j9 4��3� �ľ��������@G46!k������������U6  .R:k����R���1]�.������������������'o2]����ľ������ü� �Y������������Gp �����٦� @� <^; ��������hA  N 6��+�� KV�LY������������ �������������������#F ����-��* ������^+C9 �϶���DN�8@���������������������������z*0\������(_�ַ`���m������  r(H����������������������� �����������������������P�������� 1�vZ���xZ 1��������� ������ ���������������������������-|Y������%C� ����|(B���������  "���� "�������������������������������B&W ��"L�D&�N2V��ٝ����| �%  �����矁����������������������2 8 ���!� @,J������~$�5�����ۉb�����.}���t1$M��%e�㳆�Ky����<j "25369 ��� �,0��MV���������� �'� 1^�� �Ҥ���)K� �Ŀ����������AG���������� ��%�� �������:�� ,�* �#&���� ���������������ž�DP�Y�������������������� � ����%����(��������� KW�LY������������ ���������������������������� #E����?��� ����M0�&+����������������������"(���������������  3D�����C�ߥ�� �������������������� ��M��� 6J����� �:K�佩 {gh! ��������������� �����)������������������������ވ9J ����! .)��6��޾�W("o+%#������������k������������������������܇)4 !�����-~`l> \���&� �"�  �������������������������������ԃ +*2������� a&�� #5� �� ��������� + �����������������������~a>J��������H6���9%�����ܴ� *��������� +FG�×�������������������i%2;������������ A��$��,��������� �DP�X�������������������8 /4� ���������������^zz$����MY�KW������������������������������ފ"  "������ܥ����������#����M0�'-����������������������"(����������������]:  �&��������������������p ���������������������� ���������������� ������kg3X � �!v+��������������������ߊ�. � ��������������� �����������������������͐9 ,���������������������5!=�  � � ������������������������������������� ���������������������������� ������'fA#K$� �����������v������������������������������������������������������������������ ����޼曂��������������������������������������������������������������������������������A1,���K <%-����ο���D3#d vt����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markplus.png��������������������������������������0000644�0001750�0000144�00000004673�15104114162�023135� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 7%O,�� HIDATXŗ{pT?}?Ivy$ +PhejkKөbѱSԪj_cLvj@+ EDQbf_>WHpAL3{~g;sp3Y\fkN^mUDڋ95*eA2ѻbh dLCZCLYfw-_ JvS� 9yƂZ >}geS<�ז]q'S|m?.:wMfgfUd W,mQ{>و9Pwp7H \9d龪nx9ˠQh~kIh@:!/x2)䲌H_J~,hYRa- kWT*sU`L:.v =ϣ\6oxFׁ̝[[E6 FBN1_w?ºyjFIetW�ģ)]W�@tGq;X;:|u߾a*}kJnsU^Jmnj}@Đ!6Q]kfHu(b]k,TzG ^tΓ?іmJP5d@ *]$OtMPvntn!{) _DLFP5ed)2lk<lcw$)co{ftD"E1 Ou$^C &ɳf,ҳi\*Q5+?Ik8Ŷɞyn!C2Y1~VRV.F-^㗬vQ;!JR~(zuSWש7^J̘O55B>EAB!2B5)^GY$,Zݠ!IB.((BгFzu&t:`r "" fX Z0QDw5 5JDD $SuQ@>jg $ a"M'P4`F[d!r6xDžnAE0 D͠ǧhg``Q9!yYr鼢=˲jd=.KE&jk?C\s `Divm&沚Vj$%)J M0犀ڛ2PRD{'vhy^3:T_"ze[1WY5XMU>XShoU؀9aS& duÌ_Nm9!$:zxuog:VϪT8GyǦ,yb,0v;&t*KLɰoEyuŋM#8PœSgϲa8Itw2r? 0S#|d750Nb芾.Ӷ\KX&>4NUSrS셈F$X#@Nbcc~<S=WY;i2*@_9æw0%Һow56՘@nM` {,aWa۠usiakC"6jjgswigixhY<TM\wYt(5w-Յ`"=<3¼jt\UoVcG~]›'v^ޭ F"cC&~SՋ^]3g" 6f@$N<Ǖ3Fx.iҟS׌ {6 糸,JƁ;iS"70;zp]Ez43dW5!)|uҏ\XFkG@ԼQ�PQ(q;_~IG|ƔwCj6uy`Tie1P>Dž,o̮X@$H M $s((jwPnwEG>=ވfer4:E^RU%4CUǨpϠ-;Hob'_a(OӴ'J2r0\ϣlT )g+wv`n+LSL?8;᧔3/=ඃ;m�\qxd/3aw oU}tƶџ܉ɜe�v|z,�z:BN\-,�3L/)蠷kkNH _bki̬]R=3(g*t% pf&~AiwMf$fq%U�  R~����IENDB`���������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markminus.png�������������������������������������0000644�0001750�0000144�00000004626�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 6,S�� #IDATXŗyUǿ[fa 3XpAD"R%m)ѴTJ֦(.HlݬZH+5 Vсfͼyr}w;LMlHz;|9;y3-|z({$PSW+[毹'}&8>~ͤN B\ē ].}h^B}S�]`^Eb8n_{#/b偋lRI-{—ݲf]p(d_53[)։npdB5V7\W~w.;p Z‚TpQ' $vլWk1 ::A5 pE{4_Q<rBfKa%�Ⱥ j+B|DdDa{s˟I!%w Sd @ٍ y ;(nM/㧺<Z8�Q(hNtOW @&Y`7>�'˰^Dp6![\3L0ϭݔg4c (O1PS& O3Ӱ%p WL- `ٟm;?4δ`X=cE-YHTl0F<MW�=Q^O `�&:@zD+6,TQ\8u{߯q=0.dնBzCPDJS&@YX <y-P$z압LSa IPV!5T=)~Qky%>f;4rzg-jǫ쟇jTxr@r‚zz Tzۀ�+M 7q*HCE|g(\5&_'8<U  8(1_=ӐND02B(P H> Wȼn@ep+ m%b&($zσ3xpLPR<t˦gA$  2Mȫ` A]@h>޷afy :eJA(�NA&z|Rzz�4 neT4K&+ ]umDF1qp?3mH{-y$HEQT yl"3퀵P{6wfD'U{>Pτ~to+?Yljg@B.cr%d_'MJWi%Tv`R �,O @5-31xd֎/r<&2w|8�T~R�΀p*!-چs}?>|=:v3T jFGCe.sB8!.mWo8}mG~OҖɞuW^HQLaCn9=xpDwBf/8ax& #QDɁglR,<zw{ͼE 4S2OT?tp,vf; :hwIg9ȿԭoD�u[#,l[so<VO pl}`[h֜6Wmv@O{^c@�7,fVg}Cba4_=pBTXlYz=l>2A}տ64\n N0#i}ő*5O$13b"W^u˫jTAm 4@m T5;6~aͲ'7tOjb.n ˕^غ`zw �ئȒ'gnn±ZpC?5dV'p%H@a}/g'>�K 7,Nc)Е>k6 #I+9w0:cUu0T_ @'mk6Hu�ݥkF~Hb6,iovR[@@N@̓pr4,T( XCs7z$ʤ˟�9^_D_%,Ng@t,�QVE1dzTTvUS@8_?J$EARL7J-;5å,v2*WF JPA(Nb8::>#S0XK !AD{^H PTQ`84}k$8#+P]ٶj٥U[\bИHKks,Qn^ %!(R=<x-ԸaE1 els07@҃����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markmarkall.png�����������������������������������0000644�0001750�0000144�00000004250�15104114162�023564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME Y��5IDATX՗{T?湻3}PY5T(՚W񑶱jj},jFKlSU6XW6H�cv;ڝݙs{TA՞ܓ{|9P>\2Q{iOnߣM"އW~P躾eaMx#P |[u eUkB櫤{Khevٵ@|EG /er״|[2*ٿ&Tܿ'?>_5Dgpr#q l7P7+Xآпϯ z_7-;n#p5Z5Xl,X(͍a)_/ϓrpk5|Cd}XRv-iscXm @ŌN�(vLd$H3كT[?=zy޻*.An0<$2M;w@q�J@WSo7_N[_Be<GW_ w4ʁWSo�I��7$:97tRA}w5ힺk|͋A t\9co@y ~}?Ml % BfW@es%U_�T67x &{ �d[_J^+cCr'zu3nk~6p̓[37�C@Ʊ7|rz&0O(lNJH&pŴږA#P%xOKڰ5 s6 OB@gRJ,[%-aCZxlߊG{Ά9e5n<m7g/MLz.*H~i"dryEBK�Of:Fy*OQJ'0Ҕq,)2S%} |}.B"Z _נN2hQ4\͍+؄:F* pK)y2]x V`k2(<V0zCV}T꣥~ɪ7 NӮ0V C`B"?GN ��P@dbj:# Wjѫ pPS1v #]8Ҝw±g@Q6-@!>l 1`aF)c'Ѓa<s/mZFq4jhe@H 1G!T(@0'˘ErLi&Svy%߇.FP02ڷPjD)xt4:ax 4CCw^ Jq�{ eoO/CB*/{3Sv4=iEwG̽#V܁@_Cg](QL~Dڤ*5 C7SJ5(/zGi9H q.uN)5 N4-窮z:sRػz>Rn[xlt^,cuԴ<Lǩ@U~ag)KNl[ێ]9컇.lyYME,e?͹'>٥8JgcS8&QjS {nx)|Zg !4\<˞ӑBSϨh[De묦4nr6w?D@w+7{29~jY HdC&pŧ6D=>[j8iL!4Y}R)61\4\H34ϣB_]g<!�gEguB[A{kq׾8zD, TubեR\NU`v;3 UG44l=�LE>F4PU'"#>چm(n6SʎJi{\m lLj?:`z݉1fqmuX֯CxCAw2O{4`+m hl_ҦO+bv]L9 }~&mhNȺV͡@X?&@+7k7:ԙ@@%P$MC 4?F*|S[&fx"no'C6Dgƿ�oj79����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markinvert.png������������������������������������0000644�0001750�0000144�00000003774�15104114162�023462� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ;+K��IDATXWilT}۬xavMk�!B(a -ZB)jJT%aqi=MTHu7$iA) c{`Z`THGOޣ{>swBF;8($W7+۔HgW=v- 矈 ө䳉DgkP @{|káS؝eM@\p�gg:',_ָ+, ۮn.>v~�nBpvT-z쩄zOO 8*!+s֡jƍ޺ܲD� )0�!G:p[qyz 8 8 J ;�A z K\rBf�Y(fԑ.XY�dǺMMs* 9"2qckE Z1G 2@}fOzϹ>f<kdPNZlWTe yŎfGWk�R3ǝ�&W)֓/Pk@Ս5~~T('Tw8EfC43[%H�(nI۫If- uQrϳ-Zm^ He^oO@vP03Kk]r^ ( 6u5> \߃Tކ�"�xxQ 4kY U> =Сn[Ea9:E_gAduɺܣ_Ļ]&"!@ )ۛ_fGHmoF0 U\Vem, ᨖUasNLT#\/Cd@hQ#6Yߪ PV ;Փ!]�DOAj Ll3&444^F 37beM 砒:xU'l.*n@BgӐ.T' :@� "C2״�T7:xA\d̼S1@1 ݴGC R�KLPOIv�  qA P�L �8x> ӺYM/F`\QMy\rM%"e\Dp~97ȳ=#B\M6"I(*vA,aFh0;7bˏhIE7Bgoq=bƏ\-tvcklK(w tPper/z#EJfnqBIX}prwy g{oKiM?PtMs<Ѷtcck*H />'D @*})� @f�,�:\+D5P7fwOM2:gy}jI.@A35a_s5@ s\D\Ŭ扮C5 HЇK`ݺͿP= [=VR Bs-,sDX,Ŵ؍Y�uwBkT|�7�+ݗ~0 ތ[34)NXj/q;o;˥e~ўz^ �fmmmذaWuu:&} HXRhr$JY:h 6m\G@/ӽ]GopDg9Ki}7��:u%�{9 ·>+9% 䵈yka 'E PH f|F0 x:xT0iJSzӝ-#D̨Wj~STֶ6>yߙ>T)?޹19@�DưHb�Hݙq]CJxmƓsqh4?N�$b Z[#n}Ah)����IENDB`����doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markcurrentpath.png�������������������������������0000644�0001750�0000144�00000010236�15104114162�024501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  @`��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_���������������������������������������������������ֆhW߶(hB������������������jB'߶Wֆh���������������������������������������U6  .R:k����R���1]�.������������������'o2]��ޱ��Q���:k�.R ������������������������������������������� ,9$^; ������������hA /,9��� ���������������������������������������t�� ������ $?�rF ����������d= u #?������� ��t���������������������������������������������z������(I�`��� �������  r(H�������z����������������������������������������������������P�������� 1�vZ���xZ 1���������E}�����������������������������������������������������������-|Y������%C� ����|(B�������-|Z������������������������������������������������������������������jS������  pn %������c������������������������������������������������������������������������*H�(%?��������������������������������������������b�����.}]ꙻt"�M� %e� � 1����P���т/�<�$&/����f�������V���������� �'� 1^�� �Ҥ��� ��� #��� �� �꾚�b ��������������� ��%�� �������:�� ,�* �#& � ��������������� a�������������������������������� � ����%����(��������������������������������������������������������������� #E����?��� � �� ������������������������������������������  3D�����C�ߥ��  �� ��� �����������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs�����������������������������������}������������ڮn #������ d�o� �޴T !�� ��羸�;E���������������������������}����������������������������������������g�J���I�������ЛRe>*������ "��ÿ�|�����������������������������ܑ�;���g���������;�;������IP�f������������������()�\: �����������������������������g%p�f��f��J�;�������������������%�*:����������� ����������������������������������f���fې:�:���#ߊA0k���@���'��� ���������������������������������������������������������������������$&,������I������>zQ�������������������������������������f���ff��f}��� ���$���6���-������ ������������������������������������f���:f���::��::�:}������ ������ ��������������������������������������������}ې:���������f:��:f��:}������������������������������������������������������������}������������������������������������������������������������������������������������������������������������������������@\c“aF����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markcurrentnameext.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  ̌��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_���������������������������������������������������ֆhW߶(hB������������������jB'߶Wֆh���������������������������������������U6  .R:k����R���1]�.������������������'o2]��ޱ��Q���:k�.R ������������������������������������������� ,9$^; ������������hA /,9��� ���������������������������������������t�� ������ $?�rF ����������d= u #?������� ��t���������������������������������������������z������(I�`��� �������  r(H�������z����������������������������������������������������P�������� 1�vZ���xZ 1���������E}�����������������������������������������������������������-|Y������%C� ����|(B�������-|Z������������������������������������������������������������������jS������  pn %������c������������������������������������������������������������������������*H�(%?��������������������������������������������b�����.}]ꙻt"�M� %e� � 1����P���т/�<�$&/����f�������V���������� �'� 1^�� �Ҥ��� ��� #��� �� �꾚�b ��������������� ��%�� �������:�� ,�* �#& � ��������������� a�������������������������������� � ����%����(��������������������������������������������������������������� #E����?��� � �� ������������������������������������������  3D�����C�ߥ��  �� ��� �����������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i&;$ =F������k �޴T<f!����:�W��� F *��������������������������������������������RiDGK![9 Hf���:}���������������ފ## "������ܥ�������������������������������������ܑ�;�g��������;�;�������������������]: �������������;J�����p�%;����������������$o�:�����ܑ;�p��f�o$���������������������� ���'���@k0Aߊ���%���}f���::��������f}���������������������S wA�������������������������������������������������������o�:�����:�uI���������������������������������������� ������-���6���$��� ����}f���:f���:::����f}������������������������������������������������������������������������;�g��������gJ��:��Ŷf����Jg������������������������������������������������������������������������������������������������g�J���f|�o$���I�f���J�g����������������������������������������������������������}������������������������������������������������������������������������ȼPc(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markcurrentname.png�������������������������������0000644�0001750�0000144�00000010236�15104114162�024465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME /.��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_���������������������������������������������������ֆhW߶(hB������������������jB'߶Wֆh���������������������������������������U6  .R:k����R���1]�.������������������'o2]��ޱ��Q���:k�.R ������������������������������������������� ,9$^; ������������hA /,9��� ���������������������������������������t�� ������ $?�rF ����������d= u #?������� ��t���������������������������������������������z������(I�`��� �������  r(H�������z����������������������������������������������������P�������� 1�vZ���xZ 1���������E}�����������������������������������������������������������-|Y������%C� ����|(B�������-|Z������������������������������������������������������������������jS������  pn %������c������������������������������������������������������������������������*H�(%?��������������������������������������������b�����.}]ꙻt"�M� %e� � 1����P���т/�<�$&/����f�������V���������� �'� 1^�� �Ҥ��� ��� #��� �� �꾚�b ��������������� ��%�� �������:�� ,�* �#& � ��������������� a�������������������������������� � ����%����(��������������������������������������������������������������� #E����?��� � �� ������������������������������������������  3D�����C�ߥ��  �� ��� �����������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i&;$ =F������k �޴T<f!����:�W��m�;E����������������������������������������������8 /4� ������ u<f!�:��o$�Q��9<�&ńR�������������������������������������������ފ## "������ܥ������������������������������()�\: ���������������������������������������]: �������������;J�����p�%;����������������������������������������������������� ���'���@k0Aߊ���%���}f���:Šk���@���'��� ���������������������������������������������S wA���������������������������������������?S������������������������������������������������������������Q�����������������������������������������������������������������������������������������������������������������������������������������������������������$���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}��������������������������������������������������������������������Etkṉ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_markcurrentextension.png��������������������������0000644�0001750�0000144�00000010236�15104114162�025561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME )��+IDATX  ��������������������������������ԃ`Յh��������������������������Յhԃ`�������������������������������������������������������������������ӂ_߆Xɍ��� ����������������������� ݈ɍX߆ӂ_���������������������������������������������������ֆhW߶(hB������������������jB'߶Wֆh���������������������������������������U6  .R:k����R���1]�.������������������'o2]��ޱ��Q���:k�.R ������������������������������������������� ,9$^; ������������hA /,9��� ���������������������������������������t�� ������ $?�rF ����������d= u #?������� ��t���������������������������������������������z������(I�`��� �������  r(H�������z����������������������������������������������������P�������� 1�vZ���xZ 1���������E}�����������������������������������������������������������-|Y������%C� ����|(B�������-|Z������������������������������������������������������������������jS������  pn %������c������������������������������������������������������������������������*H�(%?��������������������������������������������b�����.}]ꙻt"�M� %e� � 1����P���т/�<�$&/����f�������V���������� �'� 1^�� �Ҥ��� ��� #��� �� �꾚�b ��������������� ��%�� �������:�� ,�* �#& � ��������������� a�������������������������������� � ����%����(��������������������������������������������������������������� #E����?��� � �� ������������������������������������������  3D�����C�ߥ��  �� ��� �����������������M��� 6J����� �:K�佩 ediA'/,   "�����������������)������������������������ވ9J ����! .)��6��ij�:$���������������������������������� ���������������������܇)3+%,���� vI4��9��"x$����������������������������������������������������ԃ +*2���������� %/�ք�������������������������������������������������������~`c5=��������y���N�������0;�Qπs������������������������������������������������������i%2;������������ A8o���O>� ۉdF% *�������������������������������������������8 /4� ���������������^zz�^�������������d�������������������������������~���������������ފ## "������ܥ����������������������������ܑ�;�g��������;�;�������������������]: ����������������������������������������$o�:�����ܑ;�p��f�o$���������������������� ���'���@k0Aߊ���%���������������������#Č:��������f}������������������� ������-���@lf������������������������ɬې:����:}��������������������������� ������-���6���$��� ����������������������� ޏf���:::����f}����������������������������������� ������ ��������������������������:���ff���:f����f}�������������������������������������������������������������������������}:���ff����ff����f}������������������������������������������������������������������������}����������������������������������������������������(K^c����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_makedir.png���������������������������������������0000644�0001750�0000144�00000003044�15104114162�022702� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxWklTUcm֦H[ ՘1BĈA@& ?0&!MPc0AAP Ev¶.m9}m%dr{o3Wm硐;`-nU PՋ֒˜,t6>,}VFqSgzd:zp?c(!EQ&1z GG'YlIwۄ5DՆo-u ] ==iSV*b@ Zuʍ{tU+C X@, D T2q@Fq S^2EFi 53(5mب65ht� j)0%n+?c9'd"‚ cAܵN2;&hD,C8 Ye+ 7-(Ao8zN=UB@9`K;Qe%(g, dsN-M�>"(ÿA㊞Psg#ۏ?2'Bh:z.�tRKRɑ8W l*5}K}A$! yrWbU(D9mF7 ]W<8GAE[`_?T+ƍf#mKjT_8B&NJb~6t1}@5{5;3 w/UUXw߾w-gfS}`1rb`t�/xn3(H=Dx2iipN%eKB:c(N1%ivZ'KtlyS\ȉ`emvh1Lu%*;;q`?ތV8ۇ~\c k֝l}jBۈ%7~k~.f~1EÅ=آqAW[?_ߍ'.Vz<'#BJ>JnXMu>yW'Z1ۆ=:D#rF}ۃ7wĝ -[i+alWk�yQ }wh͍h[d#QsB3IZ(l:^f);CM{Z;{n]&|ۄ]$~rr縺[hFՌ2BJ"rRsm7 K}v|FI߭:AmK1*ඟfqQ/�茛~=M- e1JA̔ IpYkyTt':C=ϟF vʖ�<4XO&s dAMY+l;:ٶ߱N=rsvH!IɔN[T}$<tljofogr"m$99@7ǿ �e/F@l����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_loadtabs.png��������������������������������������0000644�0001750�0000144�00000010236�15104114162�023060� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME �ki��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ��������������������������������������f������������Fq� ��������������������������������� �����������������������ҵ�����������������������U�� ��������������������������������������������������������QMJ�������������\[\��ϲ�Ty� ������������������������<U�� ��������������������������������kjk�4(#�Ʃ����<T�����������D�<5(�� �����������������������������CBC����������;9:�˕��>9)�r*Mh�wD��� �UN8��� ��������������������������������������������A@B�����������  �UN9����� ������������������������������������#������KJL����������������  ����������������!���������������������������������������\\\WWW����������������������������������������˝_X����������������������������������������������������������oE����������������������������������������y���������������������������������������������������������������������������������������������������$ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� a�����������������������������������������������n����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ɗ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_loadselectionfromfile.png�������������������������0000644�0001750�0000144�00000004442�15104114162�025642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 5& |��IDATXŗ{pT?ܻw&d !1P"bkqSS>qD,:֪T:v:-G뀔` "E $AMݻ{# ;̜ٽy<6>xP|+ L\Tqw*P]}C(l42rP5/P�셽=]6i[daBTH4.�[OV_=a8RX'N[yz� 2ݢ M3dx$wœ7-:ޢ`OySP6V*,]ZTsɎxB8བtsMڌ+Ǟ5,;PSR{OAQv}(H~=ɟJ*}ZLh` x)X>}fOZqEV-u'3m]eetk.\ "AQz6|?gCh/&v %, �0%?b%34Nl[7Nƹ;|CnZ.cvl{#F| ?t&>r+5hS跃%{j_O5]`^"1l=>/4 m&:`ŧ%Q2QX$Hoyپ+:"I[%ׁ`< ~Uyd 7M ᔮwW3?Xھ`%)-_dWvo@f<ܖxǟFV YD*D""쀭hnnzx0>t/J'12!32]ɏq`1G'+.h>{2-7\VQU*gIMZ[#=tυ]xgC@RE ̥Ol|0g$Ȇ[)l5?)੘Sw9� 2H5J32;p>XZ"G@ DA�~ jvT1, K!i'!ǶQ-,+) S~F-A@8\(DL`E1a$pFA(޶\߇R"$` l$X0S:� v\NGu#f&29+a>||UZ!xvjÖP^ps:NUuE%0:Ƒᯥs"[CISُOm3.-%pdoQuBqycǺg5Mڔ+k}UÙ.ri�*[tq/βIі|gxVΨdҡw h#)4 `:g255-juz0bCG{?*ZUʆkʺ%6!Lyq uD]TR5e}D0=vПo+*IFulQ` lW;Oi(g+S,B9S}=IsMI ɨƴ_MЁor9Y!B*(f.MuU`K`Fg3vpr57c&=y~ϛ] Yl˳ض1ffܽ8SgŀplU5y2͍eER}a3?Jpj3#Bo�!B �!lF~] )+ZqsdG@gJb' zIEҹ8^&BF*~7/dn:H{kBہ}?YX%|c}S O =252kdMmGM8] bTu!8#~ւm�1j5w.>7bZ@3 4'XPZ_�X;[2ckϣz}Bwp1퀤nETuSMƨ# hqd?Z5HIfe 5ضF`޷7Q;< 0y@LH.l i\"pw;^@HWW]vJRqVsر'c/q%/V/hM۲Fk4 $0mb3se�@81Tc�]WRm1^Tdخb����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_loadselectionfromclip.png�������������������������0000644�0001750�0000144�00000004436�15104114162�025655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME pR ��IDATXík]U̙Kiv(1P 61^Hb41V!F _Jj X ` JۙvfڙNg\m9g U+Yzo}߻WMJYk x wч �$@o[PJ d׮]Q0~mI/@kPMa(@}.D08:p.ᅔhĎ/oysd^R7:PA`u±>xua*=ŕwދH M 0?>*Uqc/<<,,ꍈ˘z7CC=Wor*^(;HVCT ֨0@6f͒^R]Cuf>l}Y|gmA{3eH3,4dj@S wHcppa}!L_~ ,Epg mOags5*-PA4xEOC8lǠW&e2ݫ`n{ <ʇw։ab)aV M#Õfj..4Q(7* PپO@�I0H0PRrmDq`ZdSuהP=Fg%c@rJ(dئD3}$�! }T1 8XsIdx�`_(3Exsv9 mFŚ(hAGy$\˞J&gAէBkta1"T<6I(Qh8B 87#D28P! 0$HqrFH;ueףG^c}T&xg,KIҖv1Q T0i\U29HW>r&*n| IWUp ,o7P kF䒕Ǟg|gt8eҲF{ޡ-cI*eM|oV[@0|zzI2()WMyɮހzXF~e^Dd b9!"T,]L�|$BH 3`Hug:6:*!3"igq*'P*D:5XK0a`qjP4AC5йn.R"$ ʂ؛h ;M eߏiz!јcA[JhjCt]cFğ ͠I:)7mc;NkpS]#dSՈ)Y,'A"w\K`RV'HN亍LO/”vIu>Eߩ[)|'LSȧ1l% DcId6jd:52Y=#d1d7+|{3<sQ܊|K:r.C&Nڤ4d׮G#D2EũFS6:4p |﹑$mJشgR4yWȒRhcE ފj4gQȺr|;Ϧ[7!Ak b E("X|'1�E&ΑKTЌ5{|Lj,OwzR HwerwOx&Zb�4+,fN{z i9-B$%%e[#Cs 0UDAЧ <5Gۆw'."HQRЧY!շD TE.IBim[wM2\8ō+۸(5BnX&WΟg֯~-tF4K8qTpmf{o8tp}kevWTY:R}Y,~r֗d+MMhW&yqP*2HI:mHoꮽEJ6<szG?Ŏ7PJji`T`[&N4<R&cG̉<9w01dpGfm<H!X=ö]%mh!܋bAH)4vԐ <kӔr%RXK\97Ϧ0\�teVB\kV[hult%ՎV0Ѹ^jE4p\g$ZSb>3� 4sok#h����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_loadlist.png��������������������������������������0000644�0001750�0000144�00000002521�15104114162�023100� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGWkLWfv]wYTvYHMR@QL4iڦYIƘ"6i&5GhUTԶy]WE1=gfgŲ~s=sw@U @?Pk:ʭ2Zk`gF $Jh`At]YBQ%zpiz.HY4>D >,Df T;Hԯ6�(p$LXjJ*"lG�d$IȰa7MYü߭$g;ؠ�S[%'UldD&@u!p-6ībT0mC-2ڶE<Ϙx$}Z$gy,\gxYhR<Xhb6o$'동ZU)elxp ?}IH}ʒ #Lo?z ?PnqݛIlv "aD#=)ȊA NCG{s"wx\lFAQ.F.a$,fɒo>4aި80&!Е�QqϾ1cH�IuFv322N6ģcnᄑ-%~80ܤI9w#(o %K̓aI3E׵:+! Pap]xƪo׹dTC<,c ,"kB<i)?aQ8C %%N<Qzu.8p١ |]oRp_˪%61 !n YP!J(Z>Dj zSV<tan#*xnU/N ^U4Ɋ`ziI.CZ Brăm`p= R,7:oe~֔}NN65/KXӑSTSջ^ǭ3_`3N̜lr(cPdO%dv m^Gn4 Z v i #9NK.Y AJ} 烳E�gc&Fm<,f"fi(6M9NNhK ?ݛMkL˝3(׏ BO#I6m|uzM<ރc$+ sH}!&`$Ƶ@ ؉C?ob7qA9YI!C1Iu_2 L����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_loadfavoritetabs.png������������������������������0000644�0001750�0000144�00000010214�15104114162�024614� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME%r��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<U�� �����������������������������������+�;�� �����<T�����������D�<5(� �����������������������������������������������������������������d���� � ����wD��� �UN8��� ��������������������������������������������������������������ߠ�1G�����1Ϣ�)m��  �UN9����� �������������������������������������������������������������������������,�B�����,�|$���������������!��������������������������������������������������������������������������ƒ+{3Mk>������ͳ>}Մ������������������� ����������������������������������������������������������ږ7)(��� �Hr�������� E������#h]�����������������������������������������������������������������  F:b !3�����������Z�����ݿ(˺�������������������������������������������������������������������������#4-����������������hD�������������������������������������������������������������������������hLܿ� &����� &��ۿhL�������������������������������������������������������������������������������@~w������� ��@~w�����������������������������������������������������������������������������������}+9%�����������%�},9������������������������������������������������������������������������������������� 3 ���������� � �3��������������������������������������������������������������������������������������I��^J^J��I���������������������������������������������������������������������������������������L:Z!z���5���������5Z!z>C�����������������������������������������������������������������������������������������!��� ���������������� �������������������y{43^����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftthumbview.png���������������������������������0000644�0001750�0000144�00000010214�15104114162�024150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME 9--C��+IDATX  ��h Bj� -�������������������������������������������������� 4�������������������������������������������������~JP��� -P. �������������������������������������������������>M������������������������������������������������|K��� �����������������������������������������������������������������������������������������������K ����������� � ����������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������� ������������&�&�������������������������������������������������fT���������������������������������������������������������������������������������������������������������������������������������++,�����������������������������������������������%�"e���������������������������7�Y&�����������������������������8'k�����������������ڕ�&������zL����������������������`*��������������������������������������������<��������������������������G!������������������������������������ ������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������� ������������������������������� ��������������������������������������������������(�أ�����������������������(�������> ��������������������? ��������������������������������+o�- ��������������������������������j7 �n9�����������������������������������������������������������������������������������������������������������������������������������������������̹���������������������� )�4G������Ƶ ����������������������$.�:K����������������������������:E��������������������ƻ�7J������KY�����������������������=O����������������������������������������������#4��������������������������$0�������������������������������������������������������������������������� ��������������������������������������������������f������a�������������������������������� ������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������������#-�����������������)5������������������������)5��������������������������������������������������Xr�����������������������������������������@O��@O���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������k���������������������������������n������������������������������������������������ ���������������������������������������������������������I������������������������������������������������������������������������������������+���������������������������������������������������������������������������������������������n4O6����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftsortbysize.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME 0�6:��+IDATX  ��f������������������������������������������������������������������������������������������������������������������������������������������������#Eh /ݻ}��������������������������������������������������������������������������������������������������������!Cf(/mD�(/!Cf�������������������������������������>������������������������A�����������������f����������!Cf* 1@+l��$Y�Ք�߽|�������������������������N��������������������������������������'������������������!Be*!19'Z�ߔ��ߔ�9'Z�*!1!Cf�����������������������N���������������������������������������&������������������(Or+$22 F���������2 F�+#1"Cf�������������s���1������������������C��� ������i�������������������������i+Qs& )4����������������������4��ۻ����p���)���������������)������������������������G������������� �����(`����������(`������ ,���������!�����������������������������������������O�������������������ҫ`�� ��'Qn�������������֮M����������������������������������y���������������������=�������������� ��"���� ���������������������������������� �������������������������M���M��������������������������������� ��������������������������������������� ���������������������������������� ���a���������z����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[���f��������������������������������������G���i�����������������������������������������������������������������������������!���8��������������������������������_�������������������������������������������������������������������������������������������=���!����������������������"������������������������������������������������������������������������������������������������a���������������������������������������������������������������������������������������1������3���������������������������������������������������������������������������������������������������������������������)���������B���������=�����������������������������������������������������������������������������������������������������^���^���������������������������������������������������������������������������������������������������������������������������������������������������O��������������������������������������������������������������������������I������[���A���,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\~f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֯Q���������� ��������������������������������������������������������������������������������(+Yo����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftsortbyname.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024321� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME /,hX��+IDATX  ��f������������������������������������������������������������������������������������������������������������������������������������������������#Eh /ݻ}������������������������������������������������������������������������������������������������!Cf(/mD�(/!Cf������������������q��������������������������������������������������������������������!Cf* 1@+l�ޒ�@+l�* 1!Cf�����������������������������������'���p��������������������������������������������������!Be*!19'Z�ߔ��ߔ�9'Z�*!1!Cf�������� ���������������������������}���������������������������������������������(Or+$22 F���������2 F�+#1"Cf��������������������������������� �����������������������������������������+Qs).4��������������.4�/&1%Ek���������������������������������\���;���������������������������������� �����(`����������(`������*�����������������������������������������������������������������������ҫ`�� ��'Qn�������������֮M������ ����������������������o�����������1���f����������������������������� ��"��+�������������������������������*��$���������������������������������������������������������������������� ���������������������������������������������������������������{�������������������������������������������������������������������������������������������������������������������������������������g���0���������������������������������������������������������������������������������������������������n������������������������������������������������������������������������������������������������������������������������������������<����������������������������������������������������������������������������������������������������������w�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g����������������������������������������u���������������������������������������\~f����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֯Q���������� ��������������������������������������������������������������������������������3 Nz����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftsortbyext.png���������������������������������0000644�0001750�0000144�00000010214�15104114162�024201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME /".u��+IDATX  ��f������������������������������������������������������������������������������������������������������������������������������������������������#Eh /ݻ}��������������������������������������������������������������������������������������������������������!Cf(/mD�(/!Cf���������������������������������������������������������������������������������������!Cf* 1@+l�ޒ�@+l�* 1!Cf������������������������������������������������������������������������������������������!Be*!19'Z�ߔ��ߔ�9'Z�*!1!Cf����������������������������������������������������������������������������������(Or+$22 F���������2 F�+#1"Cf����������������������������������������������������������������������������+Qs).4��������������.4�/&1%Ek���������������������������������������������������������������� �����(`����������(`������ ,��������������������������������������������������������������������������ҫ`�� ��'Qn�������������֮M���������������������������������������������������������������������������� ��"���� ���������������������������������� �������������������������������������������������������������������� �� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\~f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֯Q���������� ��������������������������������������������������������������������������������hD����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftsortbydate.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME /xc��+IDATX  ��f������������������������������������������������������������������������������������������������������������������������������������������������#Eh /ݻ}����������������������������������������������������������������������������������������������������!Cf(/mD�(/!Cf��������������o��g������������������������������7��������������������������������������!Cf* 1@+l�ޒ�@+l�* 1!Cf�����������������������������������������#���B���{�����������������������������������!Be*!19'Z�ߔ��ߔ�9'Z�*!1!Cf�������������������������������������������������������F������:������������������(Or+$22 F���������2 F�+#1"Cf�������������������������������������������������������������������������+Qs).4��������������.4�/&1%Ek��������������������������������<����������������������������������� �����(`����������(`������ ,�����������������������������������[���g�������������������D���>��������ҫ`�� ��'Qn�������������֮M������������������������������������������������H���Q���������������Y����� ��"���� ����������������������������������������������������������������������������������Q���������������:������ �� ���������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������1�������������������������������������������������������������������������������������������������������������������������d������������������������������������������������������������������������������������������������������������������a���R������������������������������������������������������������������������������������������������������� ���(���h���c�������������������������������������������������������������������������������������������������������������������������������������������i�������������������������������������������������������������������������������������������������������������������L������������������������������������������������������������������������������������������������������������������6�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g�����������������������������������������������������������������������������������������\~f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֯Q���������� ��������������������������������������������������������������������������������%: V8����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftsortbyattr.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME / lb��+IDATX  ��f������������������������������������������������������������������������������������������������������������������������������������������������#Eh /ݻ}��������������������������������������������������������������������������������������������������������!Cf(/mD�(/!Cf����������������������������������������������������������������������������������������������!Cf* 1@+l�ޒ�@+l�* 1!Cf��������������������������������;�������������������;�������������������������������������!Be*!19'Z�ߔ��ߔ�9'Z�*!1!Cf�������������������������U�������������������������U������������������������������(Or+$22 F���������2 F�+#1"Cf���������������������V���������������������������V��������������������������+Qs).4��������������.4�/&1%Ek����������������8���������������������������9������������������������� �����(`����������(`������ ,�������������U��������������������������������U������������������������ҫ`�� ��'Qn�������������֮M�����������������V��������������g�����������������V��������������������� ��"���� ���������������������������������� ������� ���6��������������������5�����������7�������������������� ��������������������������������������� �������V�����������������������������������������V�������������������������������������������������������������������������V�����������������������������������������V��������������������������������������������������������������������������3���������������������������������������4���"������������������������������������������������������������������4�������������������������������������������������V���������������������������������������������������������������������3���������������������������w�������������������V�������������������������������������������������������������������������������������������������������������������1���%����������������������������������������������������������3�����������������������������������������������������������V��������������������������������������������������������������4���������������M������������������Y�������������������V��������������������������������������������������������������������������������������������������������������.���(�������������������������������������������������3���������������������������������������������������������������V����������������������������������������������������4�����������������������������������������������������������������V����������������������������������������������������������������������������������������������������������������������������������������������\~f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֯Q���������� ��������������������������������������������������������������������������������5mv����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftreverseorder.png������������������������������0000644�0001750�0000144�00000010214�15104114162�024645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -��+IDATX  ��f����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.��k��������������������������E��T������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P��Pg��������������)��h����F��������������������������������������������������������������������������������������������������������������&��g����j�� ����������������������������������������������������������������������������������������������������������#��i�� ��j������������������������������������������������������������������������������������������������������������ ��j����b��������������������������������������������������������������������������������������������������������������l����\��'������������������������������������������������������������������������������������������������������������l����T��3����������������������h��1��������������R������2���������R����������������������������������������K������{�������������������}�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]������������������'���������������������������������������������������������������������������������������������������b���������������������Q���.���<���������������������������������������������������������������������������������������������r����������������j�������#���-����������������������������������������������������������������������������������������������)����������9���I���S���������������������������������������������������g�����������������������������������������������������W����������������������������������������������������������������������������������������������������������� ������?�����������������������������������������������������������������������������������������������������������������2���<����������{������A�������������������������������������������������������������������������������������������������������������������������$�����������������������������������������������������������!��h��1����s��!��h��1������2������������i������(���������������������������������������������������������������������������������������������������������������;���E�������������������������������������������������������������������������������������������������������������������[���������������8����������D�����������������������������������g�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PyfTF����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftopendrives.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  R��+IDATX  ��h Bj -��������������������������������������������2������~KP����������������������������������������� -o@,����#�����������������������������������������ff-����GK��� ����������������������������������������������J������������������������������������ �;��d"�������������������������������������������������������������������������� �������������������������������������������������������������������&/4����&.5�¹����8� �,����������������������������������������������������s Lg;)����A�������������������������/�������������~KP������������������������������������xF/�����%���������������������ff.������������������������GK��� �����������������������������������������J�������������������������������."�;��d"���������������������������������������������������������� � � � � ����� ������������������������������������������������������¸�� �¸�²��������� �,��������������������������������������������� (�������3�������#�����ι��:����β���:��� |�����~KP������������������������xE/�����%�ff-��������������������������������������������GK��� �������������������������������J����������������������������������."�;��d"������������������������������������� ������������� ��������������������������������������������������������������������������*('�'`a� �*������������������������������������ (�����m{����������������������������������� 4D��������������������������������������������~�')*������������������������������]]]����������������������������������������������r������������������������������������������������������������������������������y�()+�������������������������������\^]���������������������������������������������z������������������������������������� �������������#��� =^������������� ������������������������������������ ��������������!���������������������������Υ������������������������������ ��������������� ������������������������Rz����������������� ����������������������������������������������������������������������������������]!�X4�������������������������������������������������������������������������������������������X4�������������X4����������������������������������������������� =^�������������9<?�qpo����������������������������������������������������)������ ���������� ��KKP�� ������������������������������������������������������������������������������������������������������������������������������������������������������������ ����� � ���������������������������������������� /�������I�5P&9:@���������������������������������g�������� ���� ��������������I������������ ������ ���������������������������������������������������������������������������������������������������������������������������������������������I ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftflatview.png����������������������������������0000644�0001750�0000144�00000010214�15104114162�023757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME m3��+IDATX  g  �:%����������������������������������������������������������������������������������������������  � %-G)P����%��������������������������������mmm��������������������������������������������������������� ������;DJ�U����������������������������������� �������K���������������VTTT���������� �����P7B Q����������������mmm#����������� ���KROO�������������������������O[YYU����6<���� ����^;Au � �;@W�}Vj����mmm �����������������������! ��\ZZ�CAAQ[XXU��� !���������2�������������������������������������������DAAQV����::U  "9� �"�������������mmm#������������������������������&$$���\ZZ�L�� ��������%��������V?F�������������������mmm ������������������������544�544������������������������������������ ��������� ������������ ��������������������������������������������������������������b������������������������mmm6������������������������������������������������������������������������������h� M����mmm"������� ���������������������������������������������������������������������������� � � %+C&O�������������������������������������������������������������������������������==S��������'.����������mmm#���������������������������������������������������������������������$����������U<F ��������������mmm ������������������������������������������������������������������������� ����������������������������������������������������������������������f�����������������������������������������������������������������������>����������������������������f�������������������������������������������mmm ������ ����������������������������������������������������������� 3YZ�������������������������������������$���������������USS3���������������������� *5*���������������������������mmm#�������������$ROO�������������������������VTT �������������������������������������������������������������������������������><<��������������������������������������������������������������������������������������������?<<������������������������������������������������������mmm#������������������������������&$$���\ZZ����������������������������<X������������������������������mmm ������������������������544�544������������������������������������������������ ���������������������������������������������������������������-  1P]��mmm6����������������������������������������������������������������������������� �4?X� #i������������ ������������������������������������������������������������������������ � � ��������,3Q��������������������������������������������������������������������������������������1���� ������������������������������������������������������������������������������������������������O���� !-W ǹL�������������������������������������������������������������������������������������*�������������������������������������������������������������������������������������������������������L������������������������������ ���������������������������������������������������g������������������������������������������������!����������������������������������������Q؜ ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftequalright.png��������������������������������0000644�0001750�0000144�00000002624�15104114162�024311� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��6IDATxWMlE~?vN q#5+MB"�U8'Rnp $$@*T h(OQ8 jTSD6"BmBqgޝc'mJRB*/Ϯ}og9<K|XsG8pC>z[8OwͲ鳡=18ys,@^ha >Ϋ W#M@k ~v>00k 4軽le�!FsJh=Qc �ϔ=NZMS ƕԝ 7O G:6Ć@%|W X r]2)[`呉b "887N0Fbf7 swG5Ň'D.&+{$zSc ՁM&`ngTKUW/{ܱ\qQ|ee88Ǚ7s\1)?CH\&xJ\4q A\aaEˎdU" wA=2ù07FxɉO#@=_� QieIqQc vb S ` / Ö qCS͇AxtP�}ש'b::yuN3Qh] V9n{pC1n۲,V-MZ>3=/L!Y-r�w3{ W/ͬwE0O"*oo\ fbG );*XbF".kdn'XitT`%k֔3<�lm\bT,ȼICc= wKI9 `_0:005YIVZ$AiTO-Y'e #\ ,؍_$$wjv+e%-q3 R[) =m<}sLt6.шk;JݙT 3byV.[<\;v¯`iW@ ئWo4 ,'s=H^hBIJsyﵑItL+H0ZtF!إ2VB.fkIgEi@`uf-0T.d\h"|*h6; VCP`r($[l| 'C_qmM\84ihN)klaLׯOIMbCv(-@>R/Ȥ9Ԓٿm˦廟s.Y��8#����IENDB`������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftcolumnsview.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME *JV��+IDATX  ��f����������������������������������������������������������������������������������������������������������������������������h Bj� -�������������������������������������������������� 4�������������������������������������������������~JP��� -P. �������������������������������������������������>M������������������������������������������������|K��� �����������������������������������������������������������������������������������������������K ����������� � ����������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������� ������������&�&�������������������������������������������������fT�����������������������������������������������������������������������������������������������������������������������������������������������������++,������������������������������������������� �����������������������������������������������}}�����nm�������������������������������������������jhg������jih�����IHG����������������������������������������������������������������������������������������������������������������������������������������������������������������������������\]9�������oom�����llj�������������������������������xy�����nm�������������������������������������������jhg������jih�����OOM������������������������������������������������������������������������������������������������������������������������������������������������������ �� !����������������_`?������vus������srp��������������������������������� uu�����nm�������������������������������������������jhg������jih�����WVS�����������������������������������������������������������������������������������������������������������������������������������������sIP-�����������������������bb������������������������ {�L������������� pp�����nm�������������������������������������������jhg������jih�����]\[���������������������������������������������������������������������������������������������������������������������������������������sIP-����������������������dd��������������������� �{�L�������������lm�����nm�������������������������������������������jhg������jih�����dca����������������������������k���������GH���������������������������������������������������������������������������������������������������������������������������������������ff�������������������������������{�L����������������������������������������������������������������������jhg������jih�����kig�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ff������������������������������������������������������ |�L���������������������������������������������������������������������������������������������������������������������������������������������������������k���������������������������������n�������������������������������������������������������������������������������������������������������I���������������������������������������������������������������������������������������+����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<'����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_leftbriefview.png���������������������������������0000644�0001750�0000144�00000010214�15104114162�024120� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME 2��+IDATX  ��f����������������������������������������������������������������������������������������������������������������������������h Bj� -�������������������������������������������������� 4�������������������������������������������������~JP��� -P. �������������������������������������������������>M������������������������������������������������|K��� �����������������������������������������������������������������������������������������������K ����������� � ����������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������� ������������&�&�������������������������������������������������fT�����������������������������������������������������������������������������������������������������������������������������������������������������++,������������������������������������������ �����������������������������������������������}}�����nm�����CBA�yy�����nm�����onk�����������mlj����������������������������������������������������������������������������������������������������������������������������������������������������������������������]^1���������/��.01����������������������������������xy�����nm�����CBA�yy�����nm�����onk�����������ssp����������������������������������������������������������������������������������������������������������������������������������������������������� �� !���������� �� !�`a7��������6��667������������������������������������ uu�����nm�����CBA�yy�����nm�����onk�����������{zv�������������������������������������������������������������������������������������������������������������������������������������������������������������������������]^1���������/��.01������������������������������������xy�����nm�����CBA�yy�����nm�����onk�����������~����������������������������������������������������������������������������������������������������������������������������������������sIP-����������������������fe������������������� �{�L�������������lm�����nm�����CBA�yy�����nm�����onk���������������������������������������k���������PQ�������������������������������������������������������������������������������������������������������������������������������]^�����������������������{�L��������������������������������CBA�yy�����nm�����onk������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ff������������������������������������������������������ |�L���������������������������������������������������������������������������������������������������������������������������������������������������������k���������������������������������n�������������������������������������������������������������������������������������������������������I���������������������������������������������������������������������������������������+����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������)P'oŜ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_keyboard.png��������������������������������������0000644�0001750�0000144�00000002255�15104114162�023071� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��OIDATxW]lU>ݭbSR! ahHO D_J5'MlV5*M /$ ݔZԖ~.֍̙{sw2P1/M+X1PMVEzI1pG"Wvo?s_g�l~퇠W�<ա3N|uȯ `x`Gオ#!Ah<�~@Ϟ~29sRo`(,+j)C!ɰ MX4V7>߲(a篶$ů۔m2;0@3G&'3+pen@z.E s=!QBalIfkU`(3 cSE:;DŽ~KՕkfZ/赐+aHkV/,ȁf[1rO2&ʥdRz`&:MG'-$vC *5l;s}Z4)MIaYE;~/sBPZk(/Ԛ{%ώѓ[kSGh0#?эuvP@D uz,(A7|nhnfO$lBFKilܼ~ >c*'{:n1KbĊ;K}q9A m\GzSs\^oݪi{}7QCU23˷cK6kzƃqפ� * ts=XIʳT'tA69UICQ樓݆c"D3 >+Q޾Iv\W'OK@®6%:-mnYL{1w&%N]άfcv'Nx@6d%P2?�>KTdx<L c c <>>qO}g_$=׾OA  qx8v*XfՁ< nhg&4:{>Gik##߰c6Hd-}5 QE\fH>rGؗ*? �wKM&w(����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_horizontalfilepanels.png��������������������������0000644�0001750�0000144�00000001104�15104114162�025515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxjPƿss;CGBpQp\h u }Bs*EZ's2dd\%7K� 7bf@.Ers<򵗣~7 epd3j Jxgx{>#X1hpq4ڀjR sͧK(Xn'&г"rئʚ\:Z{O'ԤXڞj mc*�2�8a 7�Sȃmeҟ�4y`9�5\<.CQ& 'X7o뮐q d>"Vjoqu ~z՜OBnK pÅ.pC4ܰ~fL0Ɉ6ޖ2Wpqw|,c8՟jm @ٚ0\o?S-ݸidb��ʽ1b'����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_helpindex.png�������������������������������������0000644�0001750�0000144�00000004337�15104114162�023254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜWkpT>6!l@SGiJV?NXgl?iEe�M[#3t- I , lv7w{  !9s%ߺ%; Ig$�d\ё&?U^J7꿫ֵve+4{ 0ryē:&04:0zۋ'U�(OY^xXv vyZ!HD$ə8z%֗z~�h>-YPSX8q)D0aG=O UX^mUD/>Ǩ?46 �|-hXn=5h Y(yHE6ga r@'/⋳xo_Qƽ#yOX[Th"@(4KT:c�qg zV>@)aȲk'.1Tofg{7mX |`�CU#*2 K%,2d7>h >Ԍd:ɸ3NCY&�W۵ʖ7֨bQ}O 9Y u<Lw)@z%�Q2AuC<+QLz~:6ɆU3rMW)VI(y^ɰio,ܝE! LV~8:V↿=M<Ho(c̓ͨj;s 圽`8Uw*:hwbMX/PƆ ȚA6=:}Ͳ&8?%RɊbRM/(9x}8{É/CQY "֍%m`kgMUp9\"3U.hzˆNh~n.Q{cxvg/FBB%˅3�qFzms 򲥣.?4&UE?*j)?z4)pj*[ e B |}eb` @e:U0[4~%K2.pn$&[g/VɤȻ*xJR\Pxj6uFQ M-}cq['ݳ̽>Q-BOYcfu$դ)d*v�? ur`C:{4s.0n$4>4�THJx9Vd|ːӢa|!\n6�6PAn+R%�oq.lGwYYwo^c a\*VԌ0:GSGE\Sa͇D"C^$6G K+c?O$0M)I}j{ęB_ںWę�)A�RR!�,nLC.i\u*q!>y#HsNUf!Jw ӧva۲`x. |mi`>0L?>vS$!ei#.xΗOsW6ۛ*t&IN7һ ZHs$zeɶM4ջ55:-bT0\8f4/jlhWТܺ'Wj U.idFD=z+]m$;xQSu:< WG FI<_<L kZIѿ.2:|c4 d`GI/d #DݣtC. D$$>@Ą`aJVgAsmf<E'{m$#$Qs/Tn ODoONE).*Պ*V0!f4b#n Nxv*�#HB۾dz$k9$-UlPOS$%hqPV 'y$,?/t TPH&n_aBRIRgr=kL t~85Dh֠ק}zHOXt}}ȅLRWبV/zL8Zg+|&6O\9⭃٨<Ho~?JkE @^#$I)YhXsE7[qJs Jb1E�7pd����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_hardlink.png��������������������������������������0000644�0001750�0000144�00000002066�15104114162�023065� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGWKkQ>LtZ߱U jEPЊBk.҅uR;A-m҈X|!\Z)-A&wd&Lb̜{r=) <2wPr\X<ühtVU`@29~|ަ~ZCN1zx|-dETU5/#$577֖* �=w :~w`}~M---ԶsD |"NFQPbϮ][?$ B<ؼiD2IO ]D,`›iD"Q$wVA$ldؖb RWgJ[>KZ9EMK @?C`\j 7y�*~̮'K M~C %P.%YRXU `: VQ@.Chk u5D;a5RSӶI. lk*E4`9'X '$+PYnnms(Vu 9q=>PT-J7#V;ϛ`)vyKJ? :̘PCWӛ;hQW[|͈Fhr΄,LRZs3sVwzgdPA%t�p q5=": ~\H=\r\TN\;Qt섹lgdRka7�a{.�/Xc>k B(ë C!*:!Cżxr"kʗk%SϸbFq!j@^#{l)ʠYcۋ 7zK<b[ GlVěßLuI]0 w _umݩaMԲ`pb<U̩7S@X + JjEAV~?A>jX}RmdwM����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotopreventry.png���������������������������������0000644�0001750�0000144�00000003036�15104114162�024216� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a��� pHYs��. ��. ��IDATXGW[lTevp٥B &&!Xb UZn%&FcPJlk 6`|11јDpKzή͹,-_3! yZήV+"N 2s@LT*U,g]oL$ =Оk3 \Q:ve! v] (JFnlVT<QXXd腾:}Gnfh:fx<D"!<X,='q<ɓO�37j~_ }yJԹ 3D6"Z6n@$F}}=*LBWnºukР2iXa?XX֚ M|w \FFN3LHD:ú8c_aSGZF#30}:\9|> IGOݓWp1gmKe5J[D76s8eBGA9MAXv _S}S!L?tbTeU)vy5rF-`CS زS 3 4v{9>-<`g<@DqY~#LvSQQnyboRs_@ՎT, ¯).J>sŲDbBYƐ{6NDB@!Pǐm{Vⱶ#c+9u }wQydG1PQr�QqՁ�wgH!>QY9r)5 ԙf o6~&ܩd*;"hNi`JX'11n䔧E΂Rm@gѧM<kXU!QB/"OK=K؁*a-hmm{q*a�sd7c\]]{]HnD9 #kCkxkqU k)7!1z)MO5|~Ys_Ě-=h^Bcp䜤ۉBD .LvhQt=((*^bq62o"dP--NApSb&D!$@=Q�bOw%s](-Bo5a.[A#<XE#0Lݻw_l/"yOx/8f>EqR%ΚfT^܈[h9R3kWd}Jӵ)HN6zЙT<wvʸoTJ?JkOm?p&ƹ?/ ڦ΃:փT*)W,wLxԂlѣڦ}+WlZ1u ڲ;ӫMkSfڶ=MHS '-?SclRS,F:5]Z>xeN+Sry.˃`XDEb폎����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotonextentry.png���������������������������������0000644�0001750�0000144�00000003110�15104114162�024211� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a��� pHYs��.��.x_��IDATXGW]lU>3;?-ti0mHLOL0F!/T-CwKQR}�[ڵjD4BQ01&>)h ̎;wf;msι{V#h%u\leiNwL*\j_N(~M,5X^ d&''1K& y oLqSx\#]ibʢoݩ҇ àh4JXE""rAAyfƢ>;-}CKG7BoB!]* L ,nk[G6mFAڞ[6Xt tlZzr,K{vm1O--)\> A]6G@?b8d{&z"G)Ɉ4;4xNH?lƿ吣9Wg/8ʀ븲7,miG[f,_BݣdfL#DXD֊:C竑uvJE!p-ybW^gyA�#V,\@; AH40pS&RqrXh <㗫J;g\!{/o=pp`,T̚i\N :qj]89r"mqڹQ=*7@0_y�bŁO2w/Z=7+#Wk#$^FgG�D|tI7g a jqG iF'Ε�͑H:!bT1:.+7@ૢ,\n>r\K.7 l)C<۟ZN'n�:* D6͙{�ן?Xf1m[uULd9.5PGGYzIkV~GǒN#41[_O$tmsՁBE(g!Py:�;z;V(C-_Ch?ޙ%P=kQ(l($|ѻ֋' 6?(nB1My4&zWWeV5,'?a^WQ馭U, AVR_ENmDz{chG|NTϓ̍b�C\ڸ{Xeq>ƹ཈J UV>zmaq?f%~9oBd %7"J}0GЀ9_?BL:^)yD#4Q/|$k׊G XAdA2`L<7 4'E5<JKoD Z]2NK2bE5TR pʚI+[ =!Ck&:[Yc{m̠Mxm h>d9@nA*xrW <N8N]8}ga"{j*OShQ*!L< '.CTͤm?aQ2E+l5����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotolastfile.png����������������������������������0000644�0001750�0000144�00000014544�15104114162�023771� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��zTXtRaw profile type exif��xڭg$)s=A7D(15ݓQfmL\RM5V9og}imnx? lN>s{?(ueuYbtu-a0R8%̿\eva;pyvMnI;`/i>{%d_6rP %0 !Ds/[zV1㕿̯{X0rݍ^yp coA7or�~\Ϗy#6 6ۯ)@`^ry*k$&%gٹ|}ÀMBXw;c>?RpSCXP QDd)RRLRI}cr%J(HI%Rji׀KJM5Rkm5[4Mo7F}=v^zm 4(6 3NiYfm̊KVZyUWhm.dfXs7k05)Q`GY@^99VWgLgq r^{rbǼo'_`Λ> kS8]^ڀ1`ߝmA )t-дKFbNGju\:ŋm;3�R�2kV.6Z+ڡ\>ZƝ'ON&m2^%k�onm,v2};nNb);Jr =PF}~=W}Ao/$vV>m97I&a *&6KwD8',[5dL62".twkG(O/J0ms? 8Ϲ-"e>wdv3 ظ?jm/+ |S컍O Z!m39l|Y 9�CpCK/F(Ȟvbk%RQ~Y7ʖ]b'W<WW[̐f+�@j.":b%Z*FXƅm8jo4~a`4Hc)>HCD̨ l'iHL0Һ|ϼ9_AؿkϪ.~{Զē(J(ɡQi{ւЧSmy- '>{;k~::I[jՄs%*VUR:#~p<؞)8> aWy@j5> Se"cc?׭#{ n/c2Sغs*R׋tlNߨ?z YD݊:�,ƒr ޤRigK "`-+'svf?`)&:ZzӯRxf%;Kl A3&5wxh22r-I򟤾/UNj6u*귅3$jA@B*]в&b7y<ti:g ozkQ{6'cuR5~Rġ/)JwтӝLv65otK,]3 \vqAɎ*eNOY)|IGu"^E3'a4?vI6s$K5zЩHFnOC:zx!Vhy^ G JEրAG*%H'Avw1ùF= wBNkpm& n5me8Ww"UM 'ȈBʤlaɑs:_T~ClS'}W>~sKa^5̄w^#dcC< T̉Eru?ğ Ǭ8Z>-1+d&g^|u� 7 "砹(8ܤ+9ADTG3>eh?�)imn BB<zCr˻y v9"!e*bs93.]9l;Oze5uMHqAhAي.y Ԇ_9 Zq;m�}JR"=9 tpxyH~/M"l4JoɽՖW$!Rf7>ޅ՚|A |)N"$=)~wIʡX&}`Ci9"0v5e#nvG&Z[PW\BP>~<rd{Z5jƇ{VJ28-n���bKGD������ pHYs��.#��.#x?v���tIME040��+IDATX  ���������������������������������������������������������������������J���K������������v�P������������������������������������������������������������������������������������������� ��KUt���������oK��� ������������������������������������������������������������������������������������������������ '�e�������I3����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SQQ�����������������������������������������������;99��\ZZ������������ RPP�����������������������������U������������������������������������������������C@@��[YY������������������������C@@Q�����������������������������������������������CAA�����������������������������CAAQ������������������������������������������������������������������������L��� ���������������������������������������������������������������������������]ZZ�����������������������������������������������ZXX��������������������������������������KE>���������������������������������������������������������������������������������������������������������������������������N�K�����������������������G�]���r��������������������������������������������������������������� �A@�B �����������������`Y���������� �������������������������������������������~�r��������������������º~�r���������������������������������������������������q������������������q�����������������������������������������������������Š�q������������Š�q���������������������������������������������������Š�q��� �����Š�q�������������������������������������������������������������������������������������Š�q��:�Š�q������﫭����������;����������������������������������a__Q�������������������������������������������������������� ��������������������������������������������������������������������� ������������������������������������RA6(�����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotolastentry.png���������������������������������0000644�0001750�0000144�00000016052�15104114162�024207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz�� zTXtRaw profile type exif��xڭiF>Db9KRz{ "KB,.j.t58)׏z5ᄑ8 G/ܕk|z^>s=\ˊ?W,{{w-&`HG4 $kwO9]y]k{ꃗko8`190kEra%^YL)d%"Ixş O3+v'F޳{`źB0(aÛ_}+0)ڒ#�ar4QIb@O!dAÀW E(ঠ#w?c:V$n4ȊQO 54kѪ%I1iJ)'\˒c֜r%܊XK)`IZj]Ʒ#ZK]{깗^{gġ#<ʨ0eƩ3<ˬ-[qJ+jmqN;noVpqWsg0l `]9Wh`jL5ns̛9g nO}ڴH8c KpW_Ab(9Z+J-K ܫ汳m"yݳjnXZ΢})YKܣqdPm.W4o3ی U@n-;yǔ(-du_#144ajEWR9FIS'*vx9YZ(̢Wulz d=pmYi}k-_v=k+2W,b8kFGޭu]S ]*ndV�H+pfx tl[0 6p] v1O+',k^F qKP�XgzXL"ComA< 7h3UbﹹEp,v1bM%m|_|[#.ޭq}�f<b);aJ li6U&g RS_IQ6D#P!MV=?bi<Xnn7c+c&`t@B[5Y I)[jh>fL|9sahS7ۃŎͤk3Gh_9/ȹGzsuʟS/1ripHIwO`+C΋Ȝv]ͤi{rfRX P6ՃaFgRA*�hŒ|N\f-R~5ACNv4B6k~-aNr̊CGd4d Hkc1_6,QNb[dRc!X9MO+o:nz[Ú>aHnWt9VzgT_ >`4A˦!"wnq O$kDj#iZl yΌEaF+< o"6Eήِ}P05% <Fai#DL:Z?D徨ʞө,^)Es@f!Lz]%g+#WZ s1df AziOTܘkBM<+1Vŗ;'RYPA<И0ɟ*xŮW*88x M>b$:9@f39͘AF͘l;I>tg,=|^_seM'<,`Vbv~m[;4sŷm,W* "dNVX$QbK`n*]Nي}.uU<eyuTD7 Հ%V"So9<SjKRV!f6zAoCB{1".y!Dpi$/�+L X϶srRԛ0NAy"L -ZBM\TCsu<R0tv쇇YZ@Sj`tdi%kn-ǡ {ܕj߅p4Ulb.ByLm|}Զ\|R1UNP ֭/W r_hg :Q uϔ L&)H-']ďLVYF@,&ѱ1aOUrAe<{Rk9\ L@+=WTFO:[+uٷf:.:Ub?5>%z9̔@hZe 'K(\*et :-+u@61t´.͋6+Bg{4hPh#?<]+2BoQ$\Վ -ipIh"L;w( Jߑ[tyFKV [dT83XMp k]b$Buzhe `s5> @*"lab\KsV"P#" jh(,ؠr.sftԻ i\s4R~(eqWN|)m|Êl4a[\ oӣk4jzY*jۉӆAJLR;ɞE9L_@dmHM/'~ @~2[b z~8ai~tA rrdq2Ggl"~,*&!}~+[ wro;Io&eM:{&ed5T&h| Y�|Bv\oW_q ux&4G:2Dnx!ua1DKxf62ik!K0% Jts~n?&{&*%4���bKGD������ pHYs��.#��.#x?v���tIME03O��+IDATX  ���K����������������������������������������������������������������������O�=�������pP��� Kqqq���������������������������������������������������������[u�Ut���������o�����������XrK��� ��������������������������������������������������������������� '�e�������I3���}��~qa��������������������������������������������������������������������GB:�,(#�����������������ghf��>>>��������^^_�ddc�BBB���_^`�efd���*������������������������xh���������������������������������������Q�����������������vvh� ��������������������������������������������������������������������������������� ������������svy��>>>��������^^_�ddc�BBB���_^`�efd���*�����������������r����r~�������������� �������������������������������������\������������������������������������������������������������������������������������������������������������������������hhg��>>>��������^^_�ddc�BBB���_^`�efd��*��������������������������������������������������������������������S�������������������������������������������������������������������������������������������������������������������������������������������������������ijh��>>>��������^^_�ddc�BBB���_^`�efd���*���������������������������������������������������������������������������������������������U������������������������������������������������������� ������������������������������������������������������������������������������������������oi`��>>>��������^^_�ddc�BBB���_^`�bfd��*���������������������������������������������������������������������������������������^�������������������������������������������������������������������������������������������������������������������������������������������������ghf��>>>��������^^_�ddc�BBB���_^`�efd���*���������������������������������������������������������������������������������U������������������������������������������������������������������������������������������������������������������������������������������hgg��>>>��������^^_�ddc�BBB���_^`�efd��*����������������������������������������������������������������������T�,�����������������������q�����܈� ������������������������������������������������ Z�@B� �����������������`Y�������bjm�_y��������������������������������������>��AH���������������������&��YH����������������[�������������������������=r�Î\����������<p�r�2��y� ������������4�,�k������������������Au����������������Bu������� �V��U�AK� ��������}�@"&�$�"#"������������������������������������������������������� ��D��K�#$����}�:-U��������������ۼ G�����������������������������������������������������������%�ػD�Ǽ�H��׸�����������������!������������������������������������������������������������������������ ������ ����������������������������������� ��������������������������������������������������������������������������������������������������������������?����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotofirstfile.png���������������������������������0000644�0001750�0000144�00000015001�15104114162�024142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz�� WzTXtRaw profile type exif��xڭi# >7p9VifD22?_|D%Ք,Xcb_u=gx31\7s YN~Axn7rm{]4+k X,;'\ vU]E7kn&p3F|f~p}#BԷ>f(W!gqgztL?m~'g%GsŹW17nrx?_ �r\~-ŽSQ%ø�6 .9 �5NCx&3׋S*#! 654QO5 E$I"UI!$)Z9f)\rͭTr)V} Ts-سEӤƌֺ.=K 3␑FeѦa)3<ˬ-YqJ+j㖝veݞݨ ܍?HD9Bg :#@<++f" Rl3.a\vO^1n\B@Λ~jSnĮ*Ԝ@15HŢ-EZw$\DdlL=fʭ%;"w%kJLxvOSezɣ_^ZkW'}kF&*G%2Zޒinr$RMp]|rcva](k>Ơ'ݭ7s"$*6ޮ{WǶىEV)3j%]ۏI:P1h[C8{-)9"25٥m hlQt�h)cV �MX-m~Em*K6=FvA|+;LMwmd?-Ks\1On{3>H dXmMeh6m*& b:U*@t$# 5l4ثs$SE ;Q3k _ttɹSߒWͽh9[փ&n~ِzGWHu EE%v, 2Hsh>@y,5-{4܉�#+Ut!SNie6gT2&i#ln%vI:- l#kX4HQQ8R``pQƒӱ{JCQ PA+l*s ؁Ot$ѽKXh F$8ig YZ3bCz~R,OgnDC\L^  }ڙ/94[> 7\#+S/+ӳʮD㈉4;}A*(M`R R,ʇn mGO@=胇>Vr%fY#W'9\͘JC.=Q֮x ͚E5Qι(Eq#@*e]-%cY 8a!*=d0C/5'F ŮXI,/kPdpOV?7yZo01֟r`SUͤJ.2/G|ik .7 C ]2" BJTg\/r4"ESl4+{U63.]y}~a iAKOrDRz("+GJM5h;#==klLyLTjQrrD p^]06קh~(x`a7q {n 'x 8 >J!l.[ P݉ 9Ѧ7 4V.aIVCҭOO~o_\.qT@lH{4Pe5ЯgZ<${E4=Gz;0T p5~ q.~|#4T;Ί]S^TTM 6Fiv<fϗԉ,e* =}fg*t@82~sJGqȫQop;%}dalw`-Mrl{1t<+}i#@&`ߙ/0+0j5\Fg?pY"j.B6V骺n۪VxyLJ3&<eRY09F]Nv&q hr'$~;X ؀*O@k[4k.8I8E"s͙oA1'ŕӌzUo1kWJmQxaPvGu}ͷD@oV)eVߦ]1o]H}".}z=ݰ] /]���bKGD������ pHYs��.#��.#x?v���tIME0P2��+IDATX  �����������������������������������������������������������������������������F���O��x�T���������������������������������������������SQQ������������������������C�7�OU�(O�U�����������������������������������C�}� }�C����������������������C�~����~�C����������������������������������CAAQQG�9 �Q3v�i���������i�S6v�Q�U�������������������������������������L��� K�<$�E+W������������������L1W�Q�N�������������������������������]ZZ�����������ک���f�`�������F/�^`� ����I��� �������������������������������KE>�������������������������r�2������B�������������v�I���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ů;����������������������������������������������������������������������������SQQ����������������a__g����������������������������������������������������������������������������������������;99��\ZZ��������������������������������������������������������������������������������������������������������C@@��[YY��������������������������������������������������������������������������������������������������������CAA��YWW���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ZXX��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ő;����������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������� ������������������������������������������W!����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_gotofirstentry.png��������������������������������0000644�0001750�0000144�00000016156�15104114162�024400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz�� zTXtRaw profile type exif��xڭi >I\=fvь4cWܘ$"r?>_|$蒖[ΞOjI_{A(YT瑉~ /2ۅKG(?wΪgw=eܐM=Ki8JkoO9/V /|gh!'\&6 1(^[%Ho8H%U̸E$9nPYydW~5wLB`vhqF # q}X!z\`bh–\�ワPE-^$V B|!_b,!$�u, A5.I$ XwJc>B|TbӤTPWѤYVm]KEJ*Zr)Vz\KbRR[nZٓy34tQFm |f:,6KVZ*(ˮ~ڑ|ʩ77jFƕϨqNgbFb DX�tR9oЈjYw2!L;D=3v_9|߉"ݖ-cy#d =vek3rOƚWD֠{{~y~sܷ-eh+9x=WO64j:E ϵz;>Dc|PU!1_%<'gifSiOj+LW{Z;RmUM#X7yN\s>&]p}҃cٸGIQm֙Vz9+=\ hM6^}_Ψ +f*y9P9>Gf]-elh8C@P6xwQSt <vCgョ|<DǢ~iY Ue`GU!hW ]SQz+İeH4lM-8bl=s)V[eZR D|\:'%H;%[Rc>w x Po[։EŠ\Lp:T8ξ+ 4C8'C:Bc8eΌ(G:DL#) F}hqaY0sR#щ]j�tD`Yƴ(.~F lԩm DaDNuty<0iA(ul weDzf~]kég`<Ath:"~涸r?c V1`8< @T]2Rh^?b]US' 8 <3MR˙C}Id6H2*@wh,G�+FBXVpPhAx�D!ThqYhCK9E} kdž1=3_lC*$>+ԥQLܿLy=5dYDxW#XL(ںq pg{:CqlYP >rG*Rp^lT' S}ʑ<"cw 8f$9e>GLB&$EH' HO^XEf?~XIQ@M)6c sC_TdQc&#ouf^H|6 Cvk."OWPEor5Sˤ]�^7Q _nS1{L6jm ILL"աl2i|> "pK RvUID+__� ӉVrj,fy ~;|! xlDQ1Ro dt $q3մ-co AUR)$|MdK;LIʱ%~9H\lv[mkz دgH�;KL439Bg*/:ɖ5?c:˄obTp H%$S(u{kkR &ySw |ڭ䰴#MLtvw2b t}`]b\䐨z_֊P6uæ 2U7b-0[IQJz4t"/(ᖳYDFhC0 ˿c4 ~^a&d&c9khtPȺ'ՋcE/꽸{Rt^%cdn`;UU u?t>P+زi|D̦RTC,YCrrr/FIb.@:N"(z+Y5&h 6`Ґ:o$,--a FYpY{c7{8umeڃ6DhLA¶h? <-ڐd�OV@Z~>Ci)KȬs:Cm<_əWόZ3}& EM/$c҇z={l\<_x)IX^%f}nuH:/Y>3HR?&8;=)d%:ՂeW(+x,?|{2wjWp e?E9b R啷jQ D�~(+cC,\@ iqם6FY/;Ÿ+#fU?jb`qMcʹd(3sWy`G'C#{nAϴTG0$x0L`?hɆ$[^O׮<H@`T<B)1uSFq&Қ]VW\<6WJ+NN`jeGuwWGΙ"7!WA,u?\b~Ā>ncd$'ن6m}:j̖\ZYZQowr}znNS2h(&:N #z7iS(y/ZL-M`%zyzQ?9"Fw6���bKGD������ pHYs��.#��.#x?v���tIME/+b��+IDATX  ���K���������������������������������������������������������������������S�:�����������������pP��� Kqqq�������������������������������������������������������������¡��U�(�$3F�]Fe��������������XrK��� ���������������������������������������������������� �8%�kH�H�kH�L�� ��~qa����������������������������������������� �=&�_?�L�����L�`@�i�:�,�GB:�,(#���������������[�������������������������=r�Î\�������������<q�3+��Q3v�i���������i�S6v����yi����������������Au����������������Bu����������E+W������������������L1W��;�������������������������������������������������������ک���f�`�������F/�^`� ���{�Վ� ����������nM.�[7�svy��>>>��������^^_�ddc�BBB���NM�non��4�������������M���� �x�������������� ����������������������������������c���������������������������������������������������������������������������������������������������������������hhg��>>>��������^^_�ddc�BBB���_^`�efd��*���������������������������������������������������������������������R����������������������������������������������������������������������������������������������������������������������������������������������������ijh��>>>��������^^_�ddc�BBB���_^`�efd���*��������������������������������������������������������������������������������������������U���������������������������������������������������� ��������������������������������������������������������������������������������������������oi`��>>>��������^^_�ddc�BBB���_^`�bfd���*����������������������������������������������������������������������������������������]�����������������������������������������������������������������������������������������������������������������������������������������������ghf��>>>��������^^_�ddc�BBB���_^`�efd���*���������������������������������������������������������������������������������S����������������������������������������������������������������������������������������������������������������������������������������hgg��>>>��������^^_�ddc�BBB���_^`�efd���*�����������������������������������������������������������������������������V��������������������p���� ������������������������������������������������������������������������������u� ���������Xr������������������]]]��>>?��������fff�\\\�BBB���fff�^^^��+�������������������8W���ֽ����������������������������������������������������������������������Q���������������zi�����������������������������������������������������������������������������������������������������XQH�������������������������������������������������������������������������������������������������793� ������������􎎎 ����������������������������������������������������������E��������������G�����������������!����������������������������������������������������������������� ������������������������������������������������ ������������������������������������������������������������������������������������������������������������Ob%����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_focustreeview.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs��.#��.#x?v���tIME /]���+IDATX  K�������������������������������������������������������������������������������������������������������������KL6��������������������������R��fS��������������������������>�K5����������������������|K��n�������������������������2 p�)����������������������������2��(�V����������������������K �����"��������������������k���]@f��% ������������������������ ��]@f�� s��������������������� � �������������������d��Q5E����&�����������������������Q7E�˻�k� ��������������� ���7�\� %Y�6T������7@�D/�O3L��E�\^�������������������S9L�ʹ�K�І���������������������������/g�ΓZ�أ����� ������v���������������������������������� ���������&%%�����������2k����������#"��������������������������������^Z�� ����η;�;J�����������������������������A���()����s��������������d�����p� ����y�uj�����������������������������ϯ����������4n�����b�`� ����������������������� ��������� {�gRn�������������������������������4XJ�������������/���oVo�������������������o��������F�3���������������������������� ��������������������������rVt�r�t��������������������|A�����C��������������������������������������Т��������������������D�����������������������������S� �������������������������������������������d�ž���������������������������������������������������������|�����B�����������������������������������������Ŧ�ޫ������� %Y�6T������������������n�D��������ecb����������������������������������������������ޫ�/i��������ΓZ�أ��������� !S���������������������������������������������������������������ۍ�����T�2k������������җ\��H�����E����������������}������������������������������ ������������ �����G ������jed������������������������������������;BG�����_������������������4n�����љb�n�����������������������������������������������������ž�����ܢL����4j���������������/�������|�����D����������������}zy�������������������������������� ����������������������S����������gec�������������������������������������������������������������F�Қ��ћ���������������������D��������������������������������������������������������������������������������+Hh���h�����������������������������������������3n)������@����������������zyw�������������������������â�������� T�2P������������������@���������db`��������������������������������������������������������������/i���������ΓZ�ݨ������ Q�o�������������������������������������������������������������������������������܍���T�2l��������ׯ�����|�����D����������������}zy�����������������;BG�����_��� ��ܫ������������� �n�D���������gec�������������������������������������������������ž���������ۡJ������������������4o�����јb�������������������������������������������������������������������������������������4j���������������/���S�Q�����@����������������zyw��������������������������������� ��������������������������@���������db`����������������������������������������������������������C�Қ��ћ����������������������u�����������������������������������������������������{ +������������������������������������������������������������������������������������������������������������Ūz����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_focusswap.png�������������������������������������0000644�0001750�0000144�00000002002�15104114162�023271� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGW]HQv]4ܨ"$饌" _D z!"G"!衢,J%z2j ,Jgsfwuf68z=|sfCih2�lA!`* l{Jn,F3 괃 S:pW%w s[ֶ*+1xC<W`{3f>8.#XhıG6y e-Y_KPFHR=Ju#ӛ<zUK:x׀/9x>KIW`兞"[<G:ӊ íRߎTHA16YDvٳnTZTB;vxxR|;@U Hڷq1B(nT:@ C2D#jbOń񶙛k0 MoA+qJ#>!p2VҪo̸;Ҫh;jO̸* ND4|: 0FvZ@4iICu1 5b񴘾1>iX ]+*/iύWOѿ˚#|a6+%9+' 3H|7G 6cieuXrm9G' )/3kKq; 9se?P]K~h2vTmC1<Ltb~~ _*LJ_L_jh^9&\ P\\pENj` /PۺBv஽$Cww 74v!]=aog!ΙhOLg/ ðssko~8&.*1*Bk7*u ޢA-h~,̒^*./!zR9)ڷ+s]L'%_ "߭G% eP����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_focuscmdline.png����������������������������������0000644�0001750�0000144�00000001521�15104114162�023737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  :̓b��IDATXGV=hAnvo4 J ,QRi-X `PO!ѤQQ{QOlPI'D9er>f͛ޛKPj$q0yW�/qYaЄ(<Eunj 瀁ۉ>6�!@̓`w8ĀЃؖp]x5V/-� ')\n!8_BVBc5Ex~s1a �A(n֍ģ'PG '^L?~˲ !EoGEx698x"�е, ǟ.)xb�K/9PnW!3| > Mú^&7wÞj fF*UySE2p w"'fK,r'$~bYhZc8C^w4l^Go"ʳD[Ѹt6z9CCN,L1uMǀ\ 4t%_FJ(45 gYKbq8� �FJsk)W2B.<kр`b6`$9CGb* QO}pa/IMtun.՟WJ3]'GG@uض;;H͙{f{B f@vAvUW>5H,wZpvM`XoQ"k3p'[p}p(x-#@[>>aZ-mAO'u����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_flatviewsel.png�����������������������������������0000644�0001750�0000144�00000003473�15104114162�023621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���gAMA�� a��� pHYs�� �� ���IDATXGWklU>ݶ-l( cπP?5@hԈi? D^/~A"_HEQ[#"}u]vn;;swV/=gfΜzhE #1gNn$�"dz 6-fK ~X1ʎRj  C2Xe� Q ޶(aUx뎄 dRkhhA:e� @<?ŋ@#,%FH@}A' +^Coz9XӴnJB Ӂ^·cǏ7<lY^w3d{ czpy'v+ӽX}]f+5C@ 8k1Fvp={a{G}Igwk֧1tOt();d<R K= !v+oPHt, ;UEw͝pa%چx(k<ڈND- h@/ <}p\ I3 ӧVxG fh!,~pKFb~\"Aܺ2yE !h[r_& R�FT1à =C$:3pe@yZd÷6oq8j�D!X 8ss(6 4N{`NJ3gwB9a AgvuoOU\z;7ks\L!8 Uyd PE #Ĩ8\`{(=GIs6dmb!d;o[41(ݾh &*f2 i( iD#,56I$F >o率‚v`tgGKy$?fu!vzh9yt_@{M$͆ *"KUIɇ5B`6"ݻk333+5 rd8*ř [`0 yqq hP+fPEWhR&;Kai _d.,qslq[ht<% <v[ZXMV'n~\\4hdl! DZ1e5Qh\)u} 蚥8 Tق06y}rAY5uu4\d1$W:4 cE W;,B Ѐ܈LuYƒL,+KxL1@혾65]K49 $s?t[@b-FP[ -,�%A?2@G8% @W@RPE% !7[)/u>"25r'&,{^wQ]cZed$tȟf;fkiap8S/ǎ&\SJ^WZNWx 5HUK<;y$װaiZ%5u|]mp^Hbc(fKes*btvC>؝v)_{H˟%k3GT`WBz 4G+h-葳 cZ~+wʳt4ɽk4)" pk w{޷Gp5kCF ᳱc.|H?mu HN= 'Kbn'����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_flatview.png��������������������������������������0000644�0001750�0000144�00000003350�15104114162�023107� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ��uIDATXGW{LSWRJyd_Nf6dC 4sdY8qA|$?8b03 esA`JB}Җ>K>9wsǯpV& s6Y �z압U;iOMGJ]zzfØ-C9sc�5C ֆjaʼq?te}uӋLN�{* 089dY>nNN rSj�)a<h5h DXILSsk6&cpp.7j"UgϞ|oɒE(ٔ_QIiJN,ka[,wSz̧Kzm8V%_ 02c)ьc*;t:Z,zrHmc+'86RwDEO&N֜I[�!rT<S96HJJ7;q,)}czw*(B}99jF2K #_KG- 5I5hժUc @ UT4 X~t)H47qd7rׁfd$)6t"& M~vajF~ReEa qe+ %}1%%x_aaKXD0EDPP}rpѷfut'xLXNyI  A4B6_G*CםZj}aՉ2^)cEoB0 6M!!ɍ9g˽mG~|{:pdcl2!p`ov`2h;X'.koAaXxO'xM(d=+残6@y (@ω_Q @7/2[, xy4u[05# #7,nP :`,08x466v@ͅoǛ3`r:"M"!FCSZV;AkŬ"_7 mJF^Iδޥ{W?}Lj+icEQ.|3@뉰ިm%Zb'tM97y9BSC8VadZiIi]WWD W "(^C}aX2?<K~k47AMGdYY)%eef! |N$ C׏ 3 |H^[St "MCOoDh`*{{S8 ]1;H`"'$)? v8R:,DG qHqgN7u'!}lb>;_3mKJW3; Ӳ(u<INqXx]�囁dg)J%qz}ԡEqxOMl4Je"d APzr1l~zz8FKt5gr,N|'ڧr|4iv_#O+kٍ7µ Yyq&!046㕖=MDO !6Q엎J.ڥ6<}`N+*c?4wm28G etoL����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_filespliter.png�����������������������������������0000644�0001750�0000144�00000002543�15104114162�023613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME,,g^��IDATXŗKlU=:ӖP5ãmT6&Q4Yh  D]U a3 F" Æ )}B3~Lt:Nܻs `4c#o_K*MHhR$~j`ޗi@7sEA J188H:h4SvHXB a08;�b1|G)5Zk-˂c9%P6aJH&7xR/[}I&cXٜyyWz~QR}=[X{W,jVoN~ W .^ׇ-+w0�wٱޞ qg46@6go88y"Hv:^%Bߋ lb[[0F2y 5Jq,GPhFFFBnVLO7&4X V¶uJYw" -@kΝ;m]E1fln!H$vm#W^EursdM/fvu` aq7,Yӊl{Β 08Ww7o`uP3ckB3N<~?z׼NSqg bҪB)O6JZ, .zyA<bӹ?f|=bӱ z. yD6,ra,W EKXhCU?ʭ6|B!Ѕ/Ր K> %8'Nf҆cs]xPz\xn" d&a-VԬr8C|BmV�D@Q-(T-֠Tfw\)֨.lgdAZ303fBHYԕR3I8}&FbO4e^}=r&סBJ*:'q}łf|ߧJ= D"75Q}(d4v5faNlXLXZ:8FfkgU(G&qG;wѪJ<-q"r<RF8B )8wGhhh܃D>0хjXL*<˫z( D"RehN RJArA΅TD*?+Ԕ&o8(ǧU@ A?k< ,����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_fileproperties.png��������������������������������0000644�0001750�0000144�00000002515�15104114162�024324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGWLe{obGnP,VAP "r5KGsMGBp@@@)hwqA>><T l6T*uyEE% 66Vx RbTmHKQE<;@&H&VRZ+ͧI9o= x|TdN#cFF547t᤾3KP9.I,nPwhhZO%$hϔRpv`z'q ӫViKgu¥s>> 3Z~R):,sXyu$:E%%(ݹjRM>=,̄i/г&]j*W<>0 !!A(@Zj$MLE 8Sd0 Nh>Byk(=DüEASe{M\@i5s%.R _slϵ#VGa_w+x]8h4E?8Qs ||\G( Yj|9$ޕ;DSE1#͇|ZEZ4U#QQY; Eb(*~6,_xdLҗLL:U y?ã-HNN` Iz [2pC r\ZI&&"IRS$lESS3.w{mmB;tMĄ%/RhYw= Wp*^{u=֧iAxo߇̈4(;I(ћqB#֮Mz{{ D/^,]IIk8whM" %d[@/aQ=ak*t 2&ZP8]x(5v uKcǩ-VBهx&=mى^ӡYH{zсn'W<ȈEܴGE *EE_!#݃KbK!=}#bƈg>!Fv*l}eeW& vD|Z/qTpI]Okװ0bllO7{9solsrmF[n$y1(\|cnͯ^36e Hdl/<u2ϮUQgX[px_$,�"e dg8p8� w$`u����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_filelinker.png������������������������������������0000644�0001750�0000144�00000002553�15104114162�023416� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME/32Bh���iTXtComment�����Created with GIMPd.e��IDATXŗkhUs&{4J؛TOtk+ZCBZhbZ[ܦHE U[Cௐ&Mlv6&QZ|p`o"`5pcFN�5v㸪r/`(Ipj+�r\Zq#ǂQ@�r K! fٲ%�0#o}/ภ5dss2 %u+yfͻSx xW2upAY2%Gi �R% i,=|ytgoa(ݏTH Lsq",0M (E…zEi"UZHV pؗ(aʪGFJ(G7LWwfP 6Ǒ. *<.':e:KٱӃ8NwWpSmhh4Z�M3DC1T`vh(3G4EJ9|fJ=`x$]ץ.Ύ-<pmb̈́DK#P._J+hhh##q3[Qv_iY5Ȯ4L|EM 9 S �& !@*;o.2P(R )%@yQbN!~Pyys=2}! =t&ڶmf8ѓ +y\%NsZ�^Z 555!6` T$I|qq_mߚy.S醕:Rz]Ap8q/P(wCǀeM"@�4dx{q-=' ңl<'oOyx\& nhB Lw75qm<lojbo*QJNs|>O./7sul:pul]f:>Zm83kOHSZtݟ�Np�"pr0=N6E)iO%U.9?YFG{ C}$3h-V&2tR\/|}[ wٷy-n8Us$q?݊[݅^憾*`[oE0PU*]i {'=` 7L ??@.fG]s'\����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_fileassoc.png�������������������������������������0000644�0001750�0000144�00000004123�15104114162�023235� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜWpW{y HH)'f؎@vtc:"0REgZB,X[k X524RHHB# 4{ow߹/PmH`dw{w9�u> J)`z~nKeuW\3.j"2~}펧vd|߇?}}Y'Pj<�GpWaSMhPT;ɂPY0Y&LˆDpazʬ�u]448Z eVw((q>爘@ $Z"�}g |+uN>3�񞞼mM.Tp <JQz<ǣ1exؓ4/'oϹ=& ch(g @vg!_b]"nɳBߢf{- 1z�7=�Db -.0]#yw;qwr�mٌE.8:E�M~0* \ȥѸ9.&Ȭ402 L0n1|ʣ.u(am[aqA;reBv|qPR24h3'�t#[ "w6CBЍ=OCӾ!xdLIqOCi>� Bqt~c(|^i02cKwtl9 ϲDai<DK|a}5c"M 3daXD9cd2n٤C$`$cx# 'iܳ)4UMMZ7,lޤӰgqkڵ;3O*ft} ~My!e#H)++^І&IEˆNM!vM1|kMsF!0uAml/k{-Y'{kIr5f@B)Ŧ?N(Հ̖&|*5{%lجAM=ɼ޽G3: ~ =A>9BșYꑗ"{Fi(>q\+"i{3u 3eY@@ԫ IH dω^uUp$ =^/A˳"r{B5?W~La v1N(P>6n>EdK /�?5/`b sXc"BV/:o/"H20(nQ<IJt FǛw<'Ó@.iTݍY�J/ M@¹n[%_A22ƮxQ VCwjACXOzzzC{7|eϏ{&CO*8`SMqyؿozS|E7L娭Y+W`w^ŷax'$cҥ,VX;8|3!=-bhmGnjv#؟_@ 7p[t[~?8΄ƆgV G¶T*\)-WC]YfژHal<K|gwϡig\2\F6+{t ۾%PNuc$&R2z(j&+( == d!I`_z^gM׏ ~l(e\o ʖwxVtz2 U"x=//Sf9._c&YYTYy6:ߏ8s˖-+WZGGԮ[UU59sЈZ# PYY ex4̧,ʈQu}/ .GpqNvXlaQ*Z+**P@c2DH9ϵ7ս󯷏߇'yCU\~nْX"K9q`ofʭlqْI6KND9(~m<>swq+kCFcS.QR7ƘJFBEsIaͬ��xmNe����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_extractfiles.png����������������������������������0000644�0001750�0000144�00000004325�15104114162�023766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGW{~,++`)Pd1m$֭`Um5T*Ml6Hl%F( ٙݙ}<7;thMٜw{CORX~lE{S IſS?K*ssY:ff6| CϙZ- ˀDG_!&S(wv:Z 9/IT$ns^_'-g͞(b/$4xp;0j ~1dhv6 N(r tynF(1LgLk hRQ#?VHk~츷yDn6& n Lb3&}HtM粿KhNGF mE/TY]|+Bu 1=҉'kЎl[RPL&-xjSf 6w X�x?zOax爢B40Ζ-vވE?bsoat<VaQ5&$ A$MExVA ݅_^Ve4}Ü-*VL%;Q0ꮪf6݆H5NJ9c"Zaq+`7/ͰZR�Սsgm0 ;Yɰ[^-@}kU-.dG{6r.i^$0`!PQՀ$pBn)`v`"y{_L&$&JB[ ;6TĶhuz' \ bZ_ "gppd�[&O}(IK(5+fQ~@xoZm70ҙI&N'(ҨVSu@r՟'x jRIT<Va{'EѮF@]?^/kCh?@u5/d" 8;O0dOdg 3T]x J. 9h,[XMQD#4ұw7G~ӯi FZo5|sW`j G^h!ELײBd+1y4`na2#q$YUg8o_~;{zVvg4yNSbVsWa)A:Ѹd1:(RDbMiFG!=1Z-q#MIy5Bݻ-ѬFAÕQ2!51"B/`d?(_vp9 j S1::Lm{z[i3fE޴iDc) PȲLT@RQf-p/qC㹷L<eIR'êyh@5N!< V:CtP&"Yh6FץN8V-qm~ͫ"$3y$8/>"D(g(SNW*Ia:߅p@֌ ƓpMZnMe+/RT9#ධ9g5U/MaYzv2 9UCD ~-#a"AwoFoU5.<.+L;ɧo"` iVoD9fV}nCa n؜uMpz<|_ 7E7\L!p\E@ےe:*7`J ai*ے}8\C'Y B_a{\M`d㗓$wĄf3z8x9) OSܤ*sO]+Ǥ?t_hw 7*l%Cy\ON,cbH[c򡦮`*DfϨC^SBUIX,"ˤer^NSl/MTs񏅇5 RW\0k}FF ^VLT( jH%RN+@\@V{볢,J-$RPelW0!&eM(p##p}15bT�WEI-zu~ƪiNS-":GjWTD$*wV}eY1n�~eǫqq˽a� {����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_exitfromtray.png����������������������������������0000644�0001750�0000144�00000002546�15104114162�024031� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼWkU{#ͶALM_E B Q(,}_A|I@(Ňkj_TD 4iSLbSj3s;w7"f̽7;lGL_:C~K3r|Gvv~*azE* %$Mp*}kzm޹`Bn@7?edQУAg{ -ܘ2@׌5P*~f�rٔ(ujE�"0b�õqwiB+2kBXM d�Dmtg+�M#X+Zn!=9�7k@+3`�K)KQG밢$ Ij�~vF�||=F&@D7º�Ja{I(5@eeh4QgMD$]x7"ʡU@Rr%emGսHxu<ۋ9()T`Ӂ7G*Dt,EBV#r}%u/;9� N"3.9'VHS zWVsncb y5/n"4qyC3:h  ?zc=(mG�^6�YqOp?xKb T5)p&2d|$x6xbD7IrT}- \& NYXV , XSSPR.MO!3j>a7.D"[сq,lɦR!MCu<c Rm"pE'+8 yoɳ%� w?R!4�>Y0%x8WǺP2xȲqI*Ե8}>u(8ut|_IMi;@ԅ^Wf&&VP:[715-O=".Mm38{}wDk˜JȖIQKyv(byAfȅ6~\cr4#,KVtp zi@گ�u<xs3!/VfL&(*n֭r簋?Dk p 63Rȷ0M<q.̏&*SXs�EDo^&cFrÍh2zKm%#"2c΂ru"rn grŞwm/`o y;^Nd[ɨW](Y�r����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_exit.png������������������������������������������0000644�0001750�0000144�00000002546�15104114162�022245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼWkU{#ͶALM_E B Q(,}_A|I@(Ňkj_TD 4iSLbSj3s;w7"f̽7;lGL_:C~K3r|Gvv~*azE* %$Mp*}kzm޹`Bn@7?edQУAg{ -ܘ2@׌5P*~f�rٔ(ujE�"0b�õqwiB+2kBXM d�Dmtg+�M#X+Zn!=9�7k@+3`�K)KQG밢$ Ij�~vF�||=F&@D7º�Ja{I(5@eeh4QgMD$]x7"ʡU@Rr%emGսHxu<ۋ9()T`Ӂ7G*Dt,EBV#r}%u/;9� N"3.9'VHS zWVsncb y5/n"4qyC3:h  ?zc=(mG�^6�YqOp?xKb T5)p&2d|$x6xbD7IrT}- \& NYXV , XSSPR.MO!3j>a7.D"[сq,lɦR!MCu<c Rm"pE'+8 yoɳ%� w?R!4�>Y0%x8WǺP2xȲqI*Ե8}>u(8ut|_IMi;@ԅ^Wf&&VP:[715-O=".Mm38{}wDk˜JȖIQKyv(byAfȅ6~\cr4#,KVtp zi@گ�u<xs3!/VfL&(*n֭r簋?Dk p 63Rȷ0M<q.̏&*SXs�EDo^&cFrÍh2zKm%#"2c΂ru"rn grŞwm/`o y;^Nd[ɨW](Y�r����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_executescript.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024156� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME -Y2��+IDATX  �������������������������������|�v���������������������������������������������������������UT�����������������������������������{oRLj��������������������������������j@N'z������������������������������ sd6�����������������������������������������������cd2�[Z/�� �� ��G��� ��������������������������DM)��������������������� � �������������[Z/���c�������������������������������E&����������������9:�JL&�����������������榆eҾ��������������������������������`4���������������������������Z]0�]_2���[]-������ ����������������������������������C$�������������������������^^0�ZZ-���27�Z��,)������ŭ��������������������������������������7 ������������������������##�ss:�..����.1�(*������������������������������������������� 43������������������������� ������ ����������������������������������������������� �������������������������������������������������������������������������*����JJ%������������ ������������������������������������������������������� ���������� ���������66����� �� �##��������������������������������������������������`12�������������������� ��� ���C5�x���¾�����E�FN�����%b������������������: ������38����%%���� ��� ���-:�5Q������������ �߭�y����������������������2���=D!���''��� ����88�� �A���������� -�s�W����������������������� E ��� �S]/���������������������m3�!��� ������Q�ߞ����������������������������1������FR)���������������������%'�� ������ ��������������������������� ���������FR)�'-�ú����� �.5�:0���������� "���`y�������������������������Qq�����������������$�$6�\j��������������ҫ� ��������������������������������������������������������������������������������� ����������2 nя?n���������������������������������������������������"�,J7����������5���������޳�I������������������������������������������������������������K������������������Jr�ŢAM+����������������������������������������������W.���޹����&Vt������ߺ�Kq���5b% ����������������#�+� 8��8�3h����޺�bь������ͺwj�������������������������������������������������������&;� ��ܸ�x٤������������ ��������� ���������������������������������������������������������������� x*1i���۳�vڠ����������������������������������������������������������������������������������������g'~���ڳ�rW������������������������������������������������������������������������������������������������� ˋ3vΎ5E/V���!��� ����������������������������������������������������������������������������������������������k'8��냧l����������������������������������������������������������������������������������������������������( t��;yQ��������������������������������������������������������������������������������������������������������6% H;yM������������������������������������H3qp����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_exchange.png��������������������������������������0000644�0001750�0000144�00000002446�15104114162�023055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME ���iTXtComment�����Created with GIMPd.e��IDATXŗklU1;UB ؘ0*"G%b"`$@()0?(5$@yDWȳ-twnt89Q/O Yg[* )ḿu4nAb BHV9S<>bڳX~ ijqWTkyWFYBTFqt%BXƳ&eB{ӊQ,F@Tk҆eccZ蔁iU.Ӫ/ef)~"<!58rLz."e`-<lv^#2'm!Fϒ|qKɚðE0휒 )JIl>6ڈ9 %Հ AlYQZ(iQ=)':hw Rd*&)h1'ߋyt*.&?L}R]ĄKxo~k YIr_A 0jm(N%P.86\] rO$HOE<4V~g[f2ԀkCO*gE/h D%nO1 O@k n{LE6n6U#V:_a3** 5g[!҉EÃcM w,;;I׹IHZpo`ʲF~3Th[YE6@\ -$vǫ%yfֶX[J"K* bbHq9#(u,%]+߻~Њ+Žh%Ao ^~w+X0M_E󱭬ig}@"J(ʵı \8k߉CҝJS.ngӂb dYf$Q8[ۻr-=#L.~6n4Ao"қ7*óp~O e-4-Rߗ-yDgOÏߏe_K=ͩ8w^UK5r8,?>)<f79(Q^@ǼRɝTKb-%*"$m:JzGJ@ߙ$nzO�= ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_editpath.png��������������������������������������0000644�0001750�0000144�00000002304�15104114162�023066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 8[R|��QIDATXGV[kTW^2331Q|0FcAR`A4BDo"b  _BH4$Te[d΄aϚΞu=s?Iq Y9e|^-s 9gfRlex9p5kj;zn�e!ZR?KV8=`emt4ohU"DF@) ]Ο/!o߼'zDp>ܬS]) xG(/ tM>1�Z";3��.<NssӧmAőQ\S>=JA^Zaq<)sO ^Ĺ�ϔ]kIˏ berrR.^Uy!25P8|}0ɴa<o?W{D0QV\\ ="dnP7aYClbMU7[VogOP,,:(?=fd!|^W, Q3Y\W\.6J-ޡ8ךC n[M&�џ. 0|EvX贕ֻS!®{Q xorm@KXKkJ;mN?1q qʹJ3wj~ ٙH,]]+l @jsB=b �D=[ ,ʹeʨa : qGX\X+#c2zw`bC8 (}bk'\@`~ںEAL 5Zuld: nYӳS_EuLf): !A2X-CrDFfdӐVr#2J`ȪX@�<~<]'#KÏ!#a|Fz1WTᧇ>aott'۶b a f<67htKooO` QO�|+)i )hXEJiz�*ݔWW6ɽ1.dxv�4#-"e|V=t. i胖�s�V EcB<Q-QkT3kS4dmBzw® mUwB|iZaPhf<k{w�����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_editnew.png���������������������������������������0000644�0001750�0000144�00000003460�15104114162�022727� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 1y)d}��IDATXGWilTU޼YLt(*DQԠ҅Z D*Lj .7F"F#MiKYA@)@  Pf>sox>[[in{sw-7i(>\j(?l4BO. FcM8 (<Gc 1BKG曌:nJQQQ^ոRW;Tɓuwͣ>@4MZrgg;ݐ$ ^Oe׉D>S]}�YYYHJLit58 4,h -+WUGcW)(>q)!9 Q= A%*SmOcSiB* s}1-Tb[[+Z]C+$%&X 7�!2Y3a0DP^^G{$d @_f.'@J<m@Zk I"ObxrEEŠZH狭=vضF<YI_02[6v- j)Oi8;J71윹Ηkm-[fSSE(gΜ9Q~~-0A<Sj$cFC6#4;%IdTЂJ]5Vtӛ8ь׏wއ AW Z}~JՕA'@ p03/8آx}Nl۴=<̹AO+6@(ЇǾHH5ϳ�ɟj63vT@ee%wm0p(j:߾GM0?}+H;ufChu|k-)^CIB&cpw}×Cq帱8^wVsIdôG}}撕 p6Eb)رcmhM5%7kƍޮF;GB(^<}#L�Q+*j_4uP  RL&Q!txM mXRh-\M%ނ5>oa3bҗnc9>-E4VAg +0q?˰`Ghiwnxp)/G?]+HO(akF|-],hhsss9)χ--0-`}bsG5pz}Y?)Nس UHW*q$,fr>} dD ;Aɿى*q]B$\'r.͇t]&-*x/n7N7xosP) @?H M>żp>;@ #PՂ۬q #. AGIȟ.\!$<5c%''8\�q5ыmS>U>sJ ClL/]#X5744tׇd44kE/>1V2Q\"Q5UXK.&`ay„ Ms +&'WW(RxcolY&@ mDձ]8H=A0SV/$g,>ɍWGO%WAGpp!g':*Ǖ%QR!D9c<7#{6̷b|iN(nnƖC~ T~DX!L8BLb~wLHQ//J?%!.[rvf����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_editcomment.png�����������������������������������0000644�0001750�0000144�00000002241�15104114162�023574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��CIDATxWmlSU~67ltl&Lf|?DD*QBh4~#, 10cNLFbM)J˺i׮VҲ,Ϛ{<=$l2qSO~eUw$BPv% +ō//}nxƱ؂4ج]VRF5wt~-@^hdC+n#cM? V?$ Eċ::i`(?s":}5}Zr?fBD#l[`YU@\c<>8O=_yv Al~'H7WxDB349;`,`.8NpCZWmy۷=p3'%x*[D pЀVu}[,q<:eMl6NpCZ L'M%.3аwd}:-S3ႛ.H-XHr.9| (RЀ4 q7SΌ@94 ֌82?㞘sQ"�$Y6W$!KދQ|>C92kZ@, |R)�'-h&vy}Og߰?�8 hA3Ԙ74Sn+pcε4SoCj]ñwVܸ Ӝ7(}6J`{#ADP굯MKM&lbiqKoo;Qpk7Wc4Q\Q0pSUbwo{S4fu*=};D'zis]#w1@ڊffS+)lX ͧؐ4c@d'ޛ x(cfD2}KTF>葉/n <્qH[i8@^}W;bDg2rH˶5>3m}b3ͭ_øι[*78t!*cbŎsAwy.ol ]m/8}>{?@1ґQdENf�^hu&ɹu,͵�rḝ,����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_edit.png������������������������������������������0000644�0001750�0000144�00000002763�15104114162�022222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX]lWwlk;)%- mBR/A# j*ZT5)Uķ !J%ر "Niiݙ{xgctGGg?{*w' |ڿX@a<xuݞЄC4m/t�؎cw,={/%K{Hz b{'6v} H]"{o((HE[)7VJݾEZZ˶Є�$9vf@8vUk8v꾄p^8vXYI5�a`YZ]چA)(OQ۟/I*"P2U)0CPJUVT^"Py_9J)$m)K�qc S2HӸ(t:}GRBD"eW%`tcь @KK Zk&o v0b5ۊwYI5ZZZVW.+frg;[=tzzV߿ߵ,VJ!"<yr@۷o_rΥ3{yƮ;od?46[4@mmmu݂"RT`셂ثs ?S|pjUQ~s>p,uT555DdEvsL?FÛԗfr ?Õ˯q lΣ3j�˲=CggK2:.ul٭lzN,}C>K&j^vo>y>| =ϳ1ߎǗ#3<>L\ xJKes~߾}75"Rx܊Z2[ eף ln8T,F bbgӻGUږ5<i Vb17"ظO9o%U0&֬o|51c̜b6`k0O_CKo 9*k׳1Rg0 @SSST iHzݺMMMs2�9qG</~KRH'Y{b1\<8Ѻa&u )P " CnKKwHƉWa) ضM,cffH:*Ƙb2k} 1eπ1 ( APT̲,Rhq˲,ҚbAk5dٔ뺄a`Z/T1#cpR"lr>qO $,k尜v};1LMM%Z`i >55wNj.J)6ǒ3K@5r0 C{ӦM3� bkkncţ϶mc9̎\4C@pf|g[9SH(Xvn����IENDB`�������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_doanycmcommand.png��������������������������������0000644�0001750�0000144�00000010265�15104114162�024262� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME rg���iTXtComment�����Created with GIMPd.e��+IDATX  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������� ��� ��� ��� �������������������������������������������������������������������������������������<��e��������P����e��i������������"���� ��N����hL�� ������ӆ��Y��.��$�������� �����'��������������������>�������������� ��������������"�������������� ����A��0��%������ ��  ��*���������4��<����%����J���� ��-������?��[������������ U��0����!���� ��J�������������������K�������������H��"��,����8���������������� ������)����*���������(��������%�������������������� �������� ����� ����������� ������������������� ������������������������������������ ������������������������������ ������ ��� ��� ��� �� �������������� ������������������ ����������������������������������������������� ��� ��-����|��������������������������������������������������������� ��� ������������u��������"T��D)����,�������������������������������������������������������������� ��� ������������M��N����a�����2������������R��2���� ��������������������������������������������������������������������������������F�������d��q����������������������������������������������������������������������������������������J��������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#��$��&��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������������������������� ��=��J��������������������������`��ߜ���������������������������>������������������ ��� �� ��C������������������������������������������������������������������������������������������������� ������������������������������������������������������ �� ���������������������������������������������H����<����������������������������������������������Z���������������������������1��������������������� ����������� ����+��������������������@��]��Y������������������������������������������������������������������������������������������|��?���������������������������������������������������������������������+��������������������������d��0�����������������������������������������������������������������_��7���������� ��j����������������o��$������������������������������������������������������������t��"�����������������G����������������6�����������������������������������������������������������V��$����������M��q�����������������%��������������������������������������������� ������ ��������������Z��F��*������������Q��qP�����������������������������������������������������������������������������������������������������������������������������������`M8dFx����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_dirhotlist.png������������������������������������0000644�0001750�0000144�00000002771�15104114162�023461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxW[lU7{.b/hEI BLHD@|1F10h|ME_| &&DL0@ !h+(WKvwn2snip?;s4M<ȴ ߾tDn͢˘vΝ4�L8_{ږ5 0U\6l|>yWt~? wAO%qu1Xi4+`8c:{Za*Ns91 T{~?Y{gk1#-  2@g'�+"!j%YdbZJVL<ϐu�J}0'O8L5yY�wၻB@3 @?)* ZɊ2Oŀ/ 9p ȤRxPAcP9H߽/E qfTbH |$hZт1s>8Ԋfn .pjb*kZ敭ܔI2M\P_ŏ 8CГq`61$�dRbN/@(K:'dRiP5DAԶSDG E9ͭ&)޵F@x~.BXja{A1ff2Yyz5_GZ1)hlldNI*\ՋOoCY MrdF"geWƇt AaP DiY&0Q ӢWPP bSC7eODkmGVETRiN${j}Mfeu@0q>e@䶙RYH_YVJd{|sE�ǵa GfYLEknΡߤ;1v8"CޮF}#NzzZCUsh_/z7R:%W9mBMe wtWM4D}hysG™aDB(o߉kR~ jRJ <o@&)$:c]'[E/v|[ef2yiߴHב@%<5Vo0!Dc\6t0p@iw �5dKlj}2m<7n|/?#~+P\ W\^ �k"x誓S}eOo9_f5&g/k39Hax0"dc�@0}=vCf&B'ІEeova0ul+wG4TKfVyёbBlhi'|H G0r߿xיWk1gQ44."> \Ͽ|SZCl1<"y`:!!z}l~VI@p?Yt8L{w8U?.r{.> O�ݡ(����IENDB`�������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_dirhistory.png������������������������������������0000644�0001750�0000144�00000003324�15104114162�023467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME V��aIDATXGVklUff}l)',<J*-P"HAHo& ?ԠD  M6Ovmfvwsg41ci=_&n:+UIϻ/p1=q 3cPBOzXN:zߙ.Fi$`R$gshzB{yl�mXtu΋ZNy:-+O]7cH˪Pc}kp^ Hh>tum9/ C%:Awh% 3N%1 ސT$w\|U0EB#b@4g%#+ӀR-ȳˏsnHfW5%AaK:w8'RU7>80ͭ,P5XWdyL՝!PRN?}} I�$qC: d1Dܭt=^n6Xba$m`9)Iȝ7U. ⴸ9>iPx=QM%P5)1Ȣ o|06_ȴOJX҅8H+b2TZ3 lBǤ Tx<"*r,M&[^Evv6<C2Ҵ*bǺ憎s/څ AгT;d�$ruFE9* FNmrFlfwۇ褂Da}q�LddJ�OfuF*lgǀ/:XlmlU R ?Z0pp&E៘:l xPӈLw=<n7\Aշd2o,-AY0o n:(2w5w+H(Q`CDKD]G4"bojlt(_Vb5 ]n~xݽhZ}"&@P9*@X Zo߃B&E'PHm+?\eDC LpR/NsbӒT7גrCBSxAVTSGF~.歜aer3֦1[3(I y*KEL\ \$Q,��M;݅h8#"#j?C}3MD6q Ź)][܂ZvVbKrdg8+:u[@sXI5 :0, "8KhJXKuO~TWcfTl(HF,@ @i<6<6V?Kvfq<.tq+y=N3c" Tuʏ?|rL e h2fC4S'{'xc6FzoَtXY K/"02F.x [I 9%F$Tߘ4�dMk(3Ctxf w6D {V�JC׭YA{fӛ@=ϴ08sQ7(Tӡx%jV]#}VoΊGzyڍl:(=ԧk`#HxӺRP}!N{mh/Ľs|IY-/Kƨ }oV&ͽc5�$Ofp0=t781f1gSIDY''i gJTPk����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_deletesearches.png��������������������������������0000644�0001750�0000144�00000010214�15104114162�024243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  ��+IDATX  '���������������������������������������t+�5 �����������������]L ������������������������������������V9������������������������������������4�����������((�@E��� ������������������������������������� �w��������������������������������������%$��� � ������AF������������������������������������������ �' �������������������������������������#"�nm���� ������������������������������������������������C �C �����������������������������������������JI�������������������������������������������������������������������������������������� ���� ���� ��������������������������������������������������������������vwu���������� �32��������������������������������������������������������������������������� ��""�������������������������������������������������������<::��;<;�866��������55��������##�66���������������������������������������������������������!!����UU��������������������������������������������������������������LML��������CEC������ �>���������������������������������������������������������/]�������������� ���3��3���������u5 �����������������������������������V9������������������������������������4�����������((�@E�����������������4� �w��������������������������������������%$��� � ������AF����������rpo�  ����� �' �������������������������������������#"�nm���� �������������������������:�C �C �����������������������������������������JI�������;��l����������������������������qqn����� ���� ����Zg����������tv������������������������������������������� �32�������������������� � ���2������������877��SUS� �������������� ��""��������������������������U������������� ��� 55�����������##�55�����������������;��� ������������LML������#! �%SS� ����� ������������������g������������������vO�����������������BDB� ����~|x�%&'�>�����������������������������������������������������������aa_���������������������������������������������������������������������������%%#�����������tsq�����������������������������������������������������rpo�  ��������tsr�  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;��l����������������������n��������������#� �����������������������������������������Zg���������uw � ���2��a�����uw � ���2��ZQ������������������������������������������������������������������������������������������������������������������������������������������;��� ��������;��� ��������������������������������������������������������������� �����������������������������������������������������������{ ύJ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_delete.png����������������������������������������0000644�0001750�0000144�00000002467�15104114162�022540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڬWklUv-mVA�BR%`*bDS H h!1BVM!!Ll1ĶZˣЖ햾wwf<wvfnmdf޹;|30 0~XeD3�lHA`s7EFbû^q_@_7J^q^u`y5Nڨ?>ɳӔnn]v(Nف;qtœjSW@|(L*K+:&*. r]NhsǞt �HL9DE"y/eљE =>V<1lp4l,ʭ=}}.rH99A&Yc5%`DE1&1úO$�EN8|ДTCM< �pZ{st }#SqX1-_3oZKneY02JD$fE )C4�@;�sX0�<$l� k "Mj<9r&`nmm:Z3 (V?\Қ}1'2RN5Go*Fuycjr/]DTOkKȖ$99H$ʯ߇?v]#-^}_~e#ؖ.A<c^J#Te1x g^)~'Ew}К !I�T\R!׻(P\f7npUyS==n]G)ܻUخrB65~3BI;Y'׿u4 F8" 13\Z=<K[i*ġӦNv2n,K[b ECW+XCkxf99V)ei;bͦC Bec0Z<븊5z(4u\sRD`j6 {�6 HA[\1Ɲn%@3ewpj ]+)@(>+#ٵ?eED䨙`fሸ[tҲ a)Mu\Dםh s6}Xcw-YQ>imĉAtJp$#" 6�ZInͪǟ ,߳\6 ̺l ~Mo/Wv*,0?F$d>J@FII$ch�*VS1 !l<2;M/�zӣ&e&����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_debugshowcommandparameters.png��������������������0000644�0001750�0000144�00000003747�15104114162�026712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME �,Tg��tIDATXGW lS|m_ıY!U@x]AՄ[ŠimWTֵǦ S,4 yBBlDZ_wę9%#?9?M%ɬd2ē̖2&KWD^!?l&].\|SÙhah<x嫤~&Y,eٳi�Onxd2A1rGU>cds ~#q 8yadGEI(JZx#\9U vv_<r_D&3Z 4q$ 1kүbΜ{pЇ^g/\N;}p(-4xMj-XK:>GO+=K`tduޒGzi&7<RYE|<3ly0΁`3a!;[ [)PUu빑jmz݇))rRP_kyox7 (dgy _ P ?WpÉtJ\bZ}Fݵa< ׺ei a[M%ѽˡ�L0x">"o0p apD!(2R:((;zc8}PEQ{(\"YtRg~ ?z >J q:5 HЋJxAZٹp3 3Y,%bNq`K' NA _"Ƃ LD&>7bMO9nI:n`, &*^{4ih%`d)|z8Ջ: !dXϙjH}8\rNmͤdyn^Q�}tvK9s9H'qd2Gs4;Uf<NA ~5g1凤x~B,UT5p6%^2;nP|݇^oKGcWܸ̻+.6ЦY_Ŏgf.$WٿfQiTDZ_q_BTAHx(FB!pxiM&hԹDn$𻻾Ul;c1wEHz`_ nwh~bá~52e+ϰjJ3"5-pucYdrlGz>?tt5>Dn2&!5l>x+ sqcmђjF?d4ADz&U/d4Zűkdb@!.1c*^D`2U &nCEq sY_yNTi:M\d <H*Do2!tԿlg}c7=jOqWPBH9턊}TU}ZU>[WW2gۢ;w_K eŌSQOLEYaNRʝ{7+CWzp|ɲכJECTt:U{*™ꁎ/RH2,͜7Kԧ.yZV/"/Z0[ĮiBbL/1+&+'8d*:q HshS po2 c*JY1Y9TSfSщ5bJ [%¦ibet4ۥ7|vMw籝/ 9eZ6tz7~;aQb=W=& t,KxWx3&2/5Ǎ1ƒ{U/[eLVٸ rN9*ᒭsǾ$F/}_qd|= ����IENDB`�������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_cuttoclipboard.png��������������������������������0000644�0001750�0000144�00000003725�15104114162�024312� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  25��bIDATXGWilTUޛfiKvZ EE R%-%р(F_&Ml $F KDR-mbtxyo Àdn={YsTU]c۶hRe~a5.^%�{ͪUhSKD444!}Cdжzv,{j_"\5Mss P=iN" YФe|ؖ{E @nլL1 Ia⊒btuv̚= iG^ }z2`od ~46m Evc'B(TUQ3PPX޿m8 ܵ/q6LP9 34Pbvc,-QE`ٶ):]* H=YjB`޲ 3b03Ϣa`;RP]+uVin| DǒiNޠyK ֞ fA^~Q@fzĖF"^0upz2%) OUbv踾@feaАlII$ƞY}_K-[. 뿑y{p'lZuvm| w\!�{)pPj:qS7AqxJ/6drlnn} WTJPBZL̳l'5V߆Mw;_+O"_3E>+qI)pS JySꙘgb `Ӱvn$L Q1h([qn~+q^-�€eR!~v!(Q ,w</D"/afGo8,}*()I=TTHUA6 ./FM9~v?"帴E֕oFnl}Gst6T,& x[LVVIZij(Ly0q! SA hTf.<g,�J g�pQ|\|7$py{v!~;S;=FwkYI?QR d S4J>b+x?Lim~dll/NDz#}pǡj.<eq$IFBNtzknqH1E^ x Ʀ˳m#,bH Oxs.#Кp- Soi׽)c8~h?h1s`لoC"JX;2<QJz;�-5ùJ(@G7pcep.i̤DPWDn÷O֕!I? ㉫MvvR !,;#NQ.UEF&~a8gG?8"X3c;6 R_NOѶѽAT ݄u9k=.H` a~eKSŝ[qϖE<x׽ֳqsA(ֆAPtt?u]=?r|D_*HP&IS#?*E"'ׇ%. kXUB\7$ib(vv`# ]=KH{",yΉyjq9S3:QMZ( R{Lp'sCy9PJW\.�P'ic&l(1or`4sƍ,rE>/RbYaQ/%,azΤ砻, p"BX^ytr]\{ue4gNڽ%| \d]tƇFotbP)KÅbSh)!oj]$͛2K/"6/[i+����IENDB`�������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_countdircontent.png�������������������������������0000644�0001750�0000144�00000002555�15104114162�024516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxWnE=Ɍc`(BqA$ ,Y!YBql 1 $~�pȃ(=X.wDR~Tߺ=un0I6A~Wcqr'wn(w50*ALex@$\pS~kwc[_g#5U,\7Z=u.'yVȫ3x{ᐇC3`�" ;_!\X+oq t`$)U3yz.s&{H[@g:" I6uY A)l={{,n]2ΖS4)$ cH8&.\IEs}ȥUߧ$ ك ?9. NbZ/.FSSmRF3fq@$ d:Lt1ν |w$L-ȉЋϒMM?J D aN/G'U`> 38t<80hQ�he>%?�(Xӎ>ĔfW`Sj=쫨50[ox %r*m!+$.|g% 20@^g6H`_ u"97|PA3v~.\ÇsV!qz~ #aX�LN&pejBtwBDq- n C u�P{N 6~FH�vw1GR_A(("sߝ{ט<#H>ө~C8DTqҡ3#gHd;WBMzX LB E$z]P0e|q' ]ss8VJC$4qX^ %HƴKy XV4 @B+vHBJ|]<4A:ſ<(i) YMBGIN)+YHR"˜IEK/QED$$%/4H pfq%߳g.\5fb$'8T9 #q<ҙlaLuO“,m~w<9b9 HhJx{ ٟG8`WBU8D/BJAJxp{I!+UlY!0GʧG*,CFGTez�-ݧ7 lk$Q >Thvf }5zw<w ْ_yeV?A9HpK�?uv#����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copytoclipboard.png�������������������������������0000644�0001750�0000144�00000003350�15104114162�024463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME (Iǝ��uIDATXGW[lTU]ΝW[nAhH%($6 X D"`Ø$1|H"@!IH1菨v\̝LNt㜽Y{}pLu%M8uukkykMdޘhÀ[SUUEJ0hjj%a`в 0-oVq5VV T =2Kҽ&�tO^IT!&9Fک ;Ͼ0U] @€ Lj|j:;S/f͞ǶOO�_[͇l�Bm!0'>Y55%%5=#btٍCak~E"Y6NpJl�4cH0S 00o}Qӑj3l2\V6=j�É:zG13U\ci1nDg0E+bKl&f3vi. /J89c]7 F(Ef6NKbGFy~΢<[}ã:KE!*:{08CX ̫O2g6U ?z=*F(hn `/a&'B~/Hqshzik\D0vH5FW2<bteZq; Ar00eSH/ƩZz<g"lŀG6^YT ٟ; %OcIJ. ;]gN!#ugU2 `Ԁc3 = TN@ ^)ɶR;f¦χfRԖ`4G@Kz 1?[s-X,k#8x =΄b@�PHskkgԋQ!,_Z>nkQ*Ԁ�ld؈r^s܍gdN^X"'-v`(X>r1 \y(שIdJw=^\&tc?ވa"C7,JCVVlf>!K>ksa\꡵0>1^q36f[< 2M2!Ԉ{`ʝ8PVp(~lCe0xrKvCcw+BA0w �- S`NR,̇gE�Dڐ_huRƚ8 ,AV#;iRqRaߍ8bD͜Mn&1xSL\<^~�}O0ܐ_՚Īe/H@T<Jvw8l͢/*U.R2cܯp{?<r~)dAesv^âEK ,XbPaCH �U(BRn&:r 6*~6@˙ue\I{sϊ޵sJ0#_#&_2: Ȓ%,hI�mWu J b Sa(59BoiI)M k/]rEyQ>+q;/%Oq2gi&m_<3 U=6]O'OY̹x<?=ޑ-Q,'ɢ f_y`G*~^����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copysamepanel.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 2o��+IDATX  �������������������������������������������������������������������������������������������������������������������������������������i����������������������������������������������������������������������������sqv������������������������������������xvz��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j����������������������������������������������������������������������sqv.���������������������������������wuz�����������������������������������������������������������������������������-������������������������(((�������������þ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:��������)�xt������������������������������������ �M%�N)�������������������������������������������Q������������������������������������������������������������������������������������������������������������������������y���fv��������������������������������������2&����%%%����������������������������������������� �v�q�w��������������������������������������������'''��������������������������������������������������������������������������������������������������������������������������������������������� ��� ��������������������������������������������������������������������������������������� � ��� �� �qjb� �qib� �pib� � ������������!!!����������������������������������������������hfe���igf���������� � � � � � ������������������������������������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������8�������������������������������g4!�����^XWZ�������������������������������������������������������������������������������```������CCC�����������������������������������������'''���������������������������������������������������'''����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������锖���������������������������������������������������������������������  �����������sqv�������������������������������������������������������������D@F���������������������������������������������������������������������������������e��������������������������������������������������������������������������*--=NHN��������������������������������������������� ����������������������� RNHN��������������������������������������������+�����������������������������������������������������e|u|�������������������������������������������������������������������������������������������������������������������������������������������������}A\����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copypathoffilestoclip.png�������������������������0000644�0001750�0000144�00000010214�15104114162�025675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  +C��+IDATX  ���������������������������������������������������������������K���ZZ[Q�������������������������������������������������������������������������������������������������� KRRR�������L��� ��������������������������������������������������������������xE�K�������������9x�# ����������������Lj���������������`P��������������������������� �KQ\l���������������������������������������R]o��������������K��� ����������������������������(�ڲ��������=���������������������������������&N{������������������������������������������,����������������������������,�������������������������������������������������������[�������������������������������������������������������������������������������i�pb�d����������������������������������������������������������۲�����kM�h�`��������������������������������������������������������������������������� �;6�5n�����oR�k�_��������������������������������������������������������������������]]�ƀ�<,4�A,S�����������uN�l�^�����������������������������������������������������������ʌ�=)8�=(+���(�L� �����r�]������������������������������������������������������������� �A);���H�����jh����\����������������������������������������������������������������ͅ�?':��7��%�vV�oB������[���������������������������������������������������]G�������oC�jl�Z������������������������������������������������������������������������������f��������������Y�����������������������������������������������������������������������ɖ�k� � 3U��������������������������������������������������������������������ƪ������������������������������P7j�P7j�����ʝ��9j�S'������ �������������������������������������������������ǫ��������������������������������������������� ������ ������������������������������������������������������������������������������������)8�7������������������������������������������������������������������������ҩ�YSb�ykZ�<Sa�����\>�Ml��&�6&������������������������������������������������������������������������ٖ`�K}�}�C��� ������%.��������������������������������������������������������������������ֵ��ocS�+��4�� �j�[ �����'3����D3������������������������������������������������������������������ �������(�/#����� �������"&���������������������������������������������������������������������"��������������������� (�9#��������������������������������������������������������������������)MZ7�ʣ\WNd^=�Lr������ �����������������������������������������������������������������������$if�ڣ qy ?gTA  � ������ 5D�$��������������������������������������������������������������������������������������� ɴu ��������������������������������������������������������������������������� ��l�����������������������h@u�����������������������������������������������������������������������������������������������������������������;������������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������hG.����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copypathnosepoffilestoclip.png��������������������0000644�0001750�0000144�00000010214�15104114162�026742� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME 4;��+IDATX  ���������������������������������������������������������������K���ZZ[Q�������������������������������������������������������������������������������������������������� KRRR�������L��� ��������������������������������������������������������������xE�K�������������9x�# ����������������Lj���������������`P��������������������������� �KQ\l���������������������������������������R]o��������������K��� ����������������������������(�ڲ��������=���������������������������������&N{������������������������������������������,����������������������������,�������������������������������������������������������[�������������������������������������������������������������������������������i�pb�d����������������������������������������������������������۲�����kM�h�`��������������������������������������������������������������������������� �;6�5n�����oR�k�_��������������������������������������������������������������������]]�ƀ�<,4�A,S�����������uN�l�^�����������������������������������������������������������ʌ�=)8�=(+���(�L� �����r�]������������������������������������������������������������� �A);���H�����jh����\����������������������������������������������������������������ͅ�?':��7��%�vV�oB������[���������������������������������������������������]G�������oC�jl�Z������������������������������������������������������������������������������f��������������Y�����������������������������������������������������������������������ɖ�k� � 3U��������������������������������������������������������������������ƪ������������������������������P7j�P7j�����������������������������������������������������������������������������ǫ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ҩ�YSb�ykZ�<Sa�����\>�Ml������������������������������������������������������������������������������������ٖ`�K}�}�C��� �����������������������������������������������������������������������������������ֵ��ocS�+��4�� �j�[ ��������������������������������������������������������������������������������������%�������(�/������� � �������������������������������������������������������������������������������������"��������������������������������������������������������������������������������������������������)MZ7�ʣ\WNd^=�Lr��������������������������������������������������������������������������������������$if�ڣ qy ?gTA  � ������������������������������������������������������������������������������������������������������� ɴu ��������������������������������������������������������������������������� ��l�����������������������h@u�����������������������������������������������������������������������������������������������������������������;������������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������:ܸgl_����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copynoask.png�������������������������������������0000644�0001750�0000144�00000002771�15104114162�023302� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME "lVC��IDATXGW[hev&{K66\7Fbn%BE-->T|*^^ j ZDOZh iA؋XS l64gg/9L̤ ;Z|rukKک䲀"eX " X7vk., 7Rעo#sl`@Nqbqߡ 0} >&''Ez{/BSP)g G{yLbbbB!j%RA-rv; H83~&&,-J {Uds!'`6r} Sz:~{gғc`Urr:ki2qv̹�JBf,^jcY\'z=WfdGe}%ra:="¢>B7,Ër R&Xk{ܷƐ@k.d2 ߙCpPS=񇱡2Jd&x!p:6o>bH)@wO7i$!q\d6<CDj�c TrЗd20)JVR Bɦ:78פ?P[ Cp' |?^"P@Hiޝo#郒p$sJLCf!0#BB`aRQD agףt7Dr4w&4oEaf˨z(N�+TQNB(NbKoA٪�R wzHOrf*�܍PF e M74<VX"mBW^߬Z\;G( T?EMM Lzf^( 'Ht@Wqjkkt:gQG@ 7܋[ ըia[\t~NaP!P߸>Cee%l6:\@@X4Cw<AE d*BW/CFU 7\ڙ39بԓr)n[MK^_%Yo?�x!ʄǸ^ckF%B2IXSjc9@oĈ|-[ 0F `!b9vXe}6Ul։O>J_~>_lVd'SwcjϤ}x@!xa6=z�^/I~ʯ(_ܢHLj�k$͞\xod,,]wM@Q518_RX 1$G7nۼ-qWی擳x<:7:`(ȺW `JPdV0aD:Odr]l7^?" 8����IENDB`�������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copynetnamestoclip.png����������������������������0000644�0001750�0000144�00000003330�15104114162�025204� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXGW{PUEaQSQc&+iMi=LSUDIQ432kt%sƐVV.~w;L9߹9{? v}$I0h4PܹI3Rrhd6Mogdd0Υ<?fbl*Sȶ҈k+& w\ThZhu:!y4:i4ài_f#rpYBUtpǿx1a8)V=arv: @=n#pۯjo[Td Ʈ`=XK#cNՍBxxgh5Zv+Q>Uǽ,p)2bMG@htA F&#?DjnV(v=N%{&o|WU8S0(ĄGCbttU)6e| +lEM1=/H4Md24{WEEp08D+t[6 $٩�8ۥk`Y7":l[ RKW">n"N.G~-M> .RheNoԞgaɗ˲@dC@m?L Ӗ#*ᯊ *?tf էŪXZ|ՊAr6QI0:n,ލªs2"lwYKb[ɏo?n-Yxz=[%_>o`ՁH*xnۼW%2mC> c&2#>X0_J #gIm֗8:;՘o U@ğW|.|"zOЎH  ʮ^ v[sDdN@ zj̜=}a ;tC̐שfr.ͰkBPFBi 'I T[�g+-c'df]>>(}{Sܳl1>Cb@CQۊ| 7CAp"nSzgA(acGEZD G۞;d#bw6mT։9yH4T/(> �zE;w݉՟mZP}y{ijZ7{.@$�} wYг=dv"uF7]b ܾ ַnx zӤHWN~> %=kqã `t3=#-f0!mL}Hxvq@/ub_m4R1iB#r'Ǵ1Ci wB>Іw9�BaD82[ڬ:tWQ):=V gEޛbq(PvPx�w<UWz\d&cb>]F[ $P)ǎݗ+qb|}*J$:1ю8F�]P'"LYh�&ZIqxF27W)-ͷRL_89gVu 5crS@D�\8PZdҴaouJ~ zࣴ ~ t߇t0T*9Mm?!$$OVܥQ�4,[<:j!%x\����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copynamestoclip.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  +X֋��+IDATX  ���������������������������������������������������������������K���ZZ[Q�������������������������������������������������������������������������������������������������� KRRR�������L��� ��������������������������������������������������������������xE�K�������������9x�# ����������������Lj���������������`P��������������������������� �KQ\l���������������������������������������R]o��������������K��� ����������������������������(�ڲ��������=���������������������������������&N{������������������������������������������,����������������������������,�������������������������������������������������������[�������������������������������������������������������������������������������i�pb�d����������������������������������������������������������۲�����kM�h�`��������������������������������������������������������������������������� �;6�5n�����oR�k�_��������������������������������������������������������������������]]�ƀ�<,4�A,S�����������uN�l�^�����������������������������������������������������������ʌ�=)8�=(+���(�L� �����r�]������������������������������������������������������������� �A);���H�����jh����\����������������������������������������������������������������ͅ�?':��7��%�vV�oB������[���������������������������������������������������]G�������oC�jl�Z������������������������������������������������������������������������������f��������������Y�����������������������������������������������������������������������ɖ�k� � 3U����������������� � �����������������������������������������ƪ������������������������������P7j�P7j������������������������Ŗt�s� 2Q�vz�I$���������������������������������ǫ��������������������������������������������������������������"i�r�7��������������������������������������������������������������������������������������������������� �����������������������������������������������������������������������������������ع��ܸ�vw����������O@�C\�����z�PAP�����������������������������������������������������������������3VM�( �:X�qqS�%�����������K�I@ �›�u��B�M=$��������������������������������������������������������������e� �/�;����������������W�P�dY�H��:��������������������������������������������������������������������������������������������4�L?3���� 6�k-����������������������������������������������������������������������� ���������������������)/.�Ȧ�[�������������������������������������������������������������������������q�E!:�v��_[���eG�p_�����������������������������������������������������������������������*ED�>2�� �� ��-�Fus�F)-�i�J1�������������������������������� ɴu ���������������������������������������������������������������������� -�z� ��l���������������������������h@��������������������������������������������������������������������������������m����������������������������;������������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������9&����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copyfullnamestoclip.png���������������������������0000644�0001750�0000144�00000010214�15104114162�025357� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  @��+IDATX  ���������������������������������������������������������������K���ZZ[Q�������������������������������������������������������������������������������������������������� KRRR�������L��� ��������������������������������������������������������������xE�K�������������9x�# ����������������Lj���������������`P��������������������������� �KQ\l���������������������������������������R]o��������������K��� ����������������������������(�ڲ��������=���������������������������������&N{������������������������������������������,����������������������������,�������������������������������������������������������[�������������������������������������������������������������������������������i�pb�d����������������������������������������������������������۲�����kM�h�`��������������������������������������������������������������������������� �;6�5n�����oR�k�_��������������������������������������������������������������������]]�ƀ�<,4�A,S�����������uN�l�^�����������������������������������������������������������ʌ�=)8�=(+���(�L� �����r�]������������������������������������������������������������� �A);���H�����jh����\����������������������������������������������������������������ͅ�?':��7��%�vV�oB������[���������������������������������������������������]G�������oC�jl�Z������������������������������������������������������������������������������f��������������Y�����������������������������������������������������������������������ɖ�k� � 3U����������������� � �����������������������������������������ƪ��������ɜsnnĕg7/*@a{ƪSָl?��������������������������������������� ������ M�r�I$�������������������������������������������������������������������������)8�7������ �����������������������������������ҩ�YSb�ykZ�<Sa�����~G&�3]��&�6&�����ع��ܸ�vw����������O@�C\�����z�PAP�������������ٖ`�K}�}�C��� ������%.����3VM�( �:X�qqS�%�����������K�I@ �›�u��B�M=$���������ֵ��ocS�+��4���j�[ ����'3����D31� �/�;����������������W�X�dY�0O��:��������������� ������(�/#� � �������"&����������������������������4�L?3���� 6�k-���������������"����������������� (�9#��� ���������������������)/.�Ȧ�[��������������)MZ7�ʣ\WNd^=�Lr����� ������q�E!:�v��_[���eG�p_���������������$if�ڣ qy ?gTA  � ������ 5D�$��*ED�>2�� �� ��-�Fus�F)-�i�J1�������������������������������� ɴu ���������������������������������������������������������������������� -�z� ��l���������������������������h@��������������������������������������������������������������������������������m����������������������������;������������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������2E����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copyfiledetailstoclip.png�������������������������0000644�0001750�0000144�00000003653�15104114162�025667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME (^��8IDATXGW{T{g S#YY RjZ&6*lӦ5!&Y!&&Fi)MnEdCإbJD`" n1ݹwfIm^o4-ޭzyJip]P[[FTD[,p-:NKkk(UGo|rȮg?k`MXn-<* `'.Iq:�=hn a i682ڱATVVb/_7H 76mlxt+wG !0{O{0T8U5CC#~ 4+ec �xd-dI,JCf?^ Sf4Q^k!\3Ȁ�p,-x)'4I ϡ 79Mh-ռNiwb;5gj5I i;uOmNXXvˍr ZLdQbX> tx8R=)2? 6_z[Aww!}Ţ<첏 �HqF Ʃa^r'^X,\~HǟbKh;<'ٹVa[@¥_?{'MqO/py$N_dDOnń:gBێNT۬g�;Cx�qHpG]1i'νwƻpU\ՋZdLGR;%Q ��@@�Ȇ$ CG"T&aj#YÝ[6#i}7KU[f{�M'/%ELOo1Z|r ſ¯kvW 06ִz6f~- yy@7<.' /]o k5{fx\my zC2 Pp5m*1Sk38Ae9MbDiQx^l:ȹlYܻUUU 8ew&N`(h0 ]R?zbx6%ht| kVV}z ~ ?2#.`ӡXT\,ދR:zu$5pݙ 07ReKZa W0#\SY 0~Tl`ǭUdI[dNKaA's�%.,u~ڬZ pOǂ2aLh SS4q3ffIVeuA<$ M@9]f: mfen9N_hnYq``;((گtO–23h_˪iG � J.n.eM@,牉Bb@<hI9N04Q], Fq>B53`p4>ڛ\ϼpb}:7I}(YXE8ӏdMq)Ťr0jr[A rA~^pm0Z1 [_¤" ma,yYax@& R{g%0EE(-_kC)4ס\Gfw9YA"jߐҡGlp:DcyAfo=GqmdOU:eFBmM5ɑQ"ܶ㓟s?.kϵI%A"nỖrtS`uZE%7rF5 _,)H _0Ay$ȼ.R{M_O~偮+Pl,6<Z.)(պq 3<9&T isӧ2Bb {QRxf����IENDB`�������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copyalltabstoopposite.png�������������������������0000644�0001750�0000144�00000010236�15104114162�025732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME$1S��+IDATX  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������I�L���������������������������������������������������������L�I������������������������������������������������������C�E���������������������������������������������������������E�C���������������������������������������������C�X�e������������������d������V�����������<"��#��1$�se�y���������������������������������H�Q�z���C,���������������Ǩ�����[9X�='=��������������g���,�z�v�����������������������������������������������%�����zNy�������������������������������������������������������3D�qIe������������. ����$G�9%������������=(��"�� e��x�4����������������������������������ͼx�4kHT�ڬ�y�4����*M�(�*�z��L3 ��������ֳ������1"T��x�4�����������������������������������������������3K�G������������ ���9k�E�]�a�9k������� ��������G�K����3���������������������������������������������������͵t�4���������������������{������������������������b��������������������������������������������������������������������������������Ǘ����������Ǘ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������﨧�������������������������������������������������������������������������������������������������������������������������@�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� �����������������������������������T†V����������������������=vO iP;� ����������iP;� ��������������iP;� �����������������RÊ[������������������ @kT> ���������kT>� �������������kT>� ���������������8 ��K������������������ � �������� ��� ���������� ��� ������������� ���� ������������������������� ����������������� ��������������������� �������������������������������������������������� ������������������ ���������������������� ������������������������������������������������������������������������������������������������������������������������������������������<U�� ������������ �������������� ������������ �����<T������������D�<5(� ����������<5(� ��������������<5(� ���������������������� ����wD�����UN8��� ����������UN8��� ��������������UN8��� �����������������������������  �UN9����������E������������������������������������������������������������������������������|G�������C�����������������������������������������������������������������������������������������������������������1����������������������������������������������������������������������������������������������������������������������������������������D(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_copy.png������������������������������������������0000644�0001750�0000144�00000001323�15104114162�022236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��IDATX͗MkAxI~dA=-F'KтxWR-ţjU!I٤K^f<,;􁐙<�8�h1˅MY54fByv3/j(ES|>�O=t%ʩDF5ոaPV%{˫ p`iiIy "%" a0Y"*Y!"OXqBT*AeIe tС( Dsev`px(@&,T),+ L]LjH BSU(HR璂~9BxHZ_H"D0n~$?T), DM �c'a)iƘia IbJ{"~{b`{ fPi&"<|�i�Lp4D>.k*q`n9We7�;{7  I*c@O{a=?\I ڵJXup1 `6}9Y.W�& TD"i҇1!}�3?NP]zo.'[F񩤰nߵ1v0擕յiט{VT M����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_contextmenu.png�����������������������������������0000644�0001750�0000144�00000002562�15104114162�023643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڼWOUݙ/qⶀh %jI+6> AL47H�ϴ (B%6|-E؏;{Yr3;;w�wff,4ACM`PGO)A 2|ˏOjKp; ?b7ܓ$T5$^Q3͠nᡇ<״R�s�\s@&J#�Ѝ YwB(Ș$�JϿZ[H"N?xWAփ:AŦHZ3$ (8P&y V```.%T2_Y&t K3/x3? Bii pE{ޘttUr %ox9rM皤A.䐵a[ c)oA^OVP]S{8mx Kb+ pxCy҆!/be8s@bcΠEK 1|GGGrB!IHzX~{981^0mV]^*�g7d4HcyqhDȱU{G9?[ ȿmW"^|hni)H4êkW\v".t / &oǬԤxp-խԿ-\$P| CßFwyׅ0=5KWP$h X__ n ByǙNDϵԶ $`dD%Bb}*~T4@ԝs|>,DFkttmwaJuK/ ŋ\.]Yc^v惡Pve9:^j<2r*RRYw8VnUr�7n,蠆E8uwosqmQN.U!8 -Źs*5 [LJ.LhllL]]]2u.$:sDՋs:⛎=\ؠeehkk<@gg$&Yj͏<9]'h ]eD"d@ @umL&3AaiʤgS#K"ҵ<9s&g,ԑ9==cqyO-tk&"M2>%U=yoÞܷ2(:N/t = g\NG@T&jO`_?I}!H&sV(iMe#zm |#M%�xXo!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configtreeviewmenuscolors.png���������������������0000644�0001750�0000144�00000010214�15104114162�026575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME!FF��+IDATX  �����������������������������������������������������������������������������������������������������������m]KL����9-�3/+������\ZX���������������������������������������������������������������������������������������K��������� "$���<95��024�������������������������������������������������������������������������������������������������034����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����!�������������������������������������������������������������������������������������������� ���������� ����������������������������������� ;����������������������������������������������������������������������������������������������������yl[<����������������������������������������������������������������������������������������������������������������Koop�� ������������������������������������������������������������������������$"!�K�������������������a ����������������������������������������������������������������,-0�m���������������������������������������N��������������������������������������������������������������>0�Lg�5���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������+.7�������������������������������������������+.7������������������������������������}�<���ghk����������������������������������������������������������������������---�bb`�������F������5�o � �����������������������������<�'��8�5��+�q�IHI�������������������q@��uS2����������T��iF�������������������t�g�Jg�������������d��R�������������-"�D�0#������0#�D�=-���uH%�����������5�!���~���&�/�2�q�GK�4� ��������������.%�$�2$�������=,�B0���� ����������3� ��I��S��+� � �(����W�� =�:������������r7���- ��������+���K�������������#�mw��k��� ��C�7��� ��������v��j�,�����B�5&� ���i9�������#����<�����B�&P������� �2��C�����������K�٨N�.x �\C,����i8�F7+��������Z,�@0!��??(����������� �!���������������� R���������� �+'"� ������Uۙ�c�<J�� �͟�(V� � ��������� ������������� ��6/��rM.� �뾐�V(�J�B#��׉� ��O�$ � � �� ����/�� ��� ��������ƆRFz:����J;*���;k��1���1��E�����������@���� ��������"""ѕ�J9&� �� �A5&��2)�B$�����p�2�w�* r�� �� ������ 3����0,���������� ��������������,�����������Q ��� �� !�������R�������3���������a5���J�� � �f���r~�w � ��K��>��������������p��Ŀ����������$$%�n��///����I� ��2������ �7�_���o�,0�� ����5�:��#\]�������� ��w8����������O��@�×�����%t�۬�6X�������n2���������+�SV�� ����Y{j����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configtreeviewmenus.png���������������������������0000644�0001750�0000144�00000010214�15104114162�025353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME+A��+IDATX  �����������������������������������������������������������������������������������������������������������m]KL����9-�3/+������\ZX���������������������������������������������������������������������������������������K��������� "$���<95��024�������������������������������������������������������������������������������������������������034����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����!�������������������������������������������������������������������������������������������� ���������� ����������������������������������� ;����������������������������������������������������������������������������������������������������yl[<����������������������������������������������������������������������������������������������������������������Koop�� ������������������������������������������������������������������������$"!�K�������������������a ����������������������������������������������������������������,-0�m���������������������������������������N��������������������������������������������������������������>0�Lg�5���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������+.7�������������������������������������������+.7������������������������������������}�<���ghk����������������������������������������������������������������������---�bb`�������F������5�o � ���������������������������������������������������������000�IHI�������������������q@��uS2����������T��iF�������������������������������������������������������IKL��������������-"�D�0#������0#�D�=-���uH%���������������������������������������������������������������������.%�$�2$�������=,�B0���� �����������������������������������������������������������������r7���- ��������+���K�����������������������������������������������������������������W~�5&� ���j9�������$��l��<����������������������������������������������444������������� �\C,����i8�F7+��������Z,�@0!��??(�����;86������������������������������������������������������ �+'"� ������Uۙ�c�<J�� �͟�(V������������������������������������������000�TVU��������������� ��6/��rM.� �뾐�V(�J�B#��׉� ��SSS������������������������������������������WWX�������������ƆRF���J;*���4;k�m�2���1��#E�����������������������������������������������������"""ѕ�J9&� �� �A5&��2)�B$�����p�2�w�a����������������������������������������������������������� ���������6�������,����������������������������������������������������������������������a5���J�v� $"���f�ώ�1�r�~��� ��K������������������������������������������444���������������$$%�n��///����I� ��2������ �7�_��������������������������������������������������� ��w8����������O��@�×�����%t�۬�6X������������������������������������������������������K5 ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configtooltips.png��������������������������������0000644�0001750�0000144�00000010236�15104114162�024332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME52;��+IDATX  �����������������������������������������rq��������������}kR�������������������������������������������������������������������������L ��������������NnV�������������������������������������������������������������_  %8� �8��$��������������������b~kS�����������������������������������������������������N '9��>����������������������PoW������������������������������������������������������� %5� �4������������������������4���%5��˰��� ������������������������������������������������������q � � ���������������������� �� � �q������������������������������������������������������n������������������������������n������������������������������������������������������ ������������������������������������������������������������������������������������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4.������4/�����������������������������������������������������������������������������2,���/*�/*���2,���������������������������������������������������������������ʢ������������������������������ʢ������������������������������������������������������s����� ����������� ������ޘs���������������������������������������������������������q���� ����������� �����q������������������������������������������������������������Ļ��������������u����������������������������������������������������������������|eǽ���������������ȿy���������������������������������������������������F������{F���ɔ(+,B � ��������3���ԾoU7k������������������������������������������ED�����uP0�uP0�����C�����������������������������������������������������������E(P��-!������" ��=-���mL6����������9���U4#�������������������������������������������= �$�2$�������=,�B0����������������������������������������������������������������������~IC�- ��������+���L*����������� �� �����������������������������������������������B�5&� ���̶b����4J�#����t=������𵘋zP������������������������������������ �\C,����͸cֱ������>X�Z,�@0!��������K��� ������������������������������������������� � "������ $:U��<?�/:� �������5�������������������������������������������E� ��6�baS(��2��� �0�-����m#������������������������������������������3����B!/-�+� ���4�=m�2��� ��R�&+2��������������������������������������������DI7$� �� �A5&��2)�B$���� 2�U«��������������������������������������������������������������6�������$�+��������*''��›}m������������������������������������������������#>z .~JFB6B@���ػ� �1���� ���"�Ƭm���������������������������������������������������#��� F ��H�X(��2������ �Jw��������������������������������������������������������������3���3���3���3s-`=Rԓ?ԓ?6"Dv4���6������ ����������������������������������������a^tO2����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configtoolbars.png��������������������������������0000644�0001750�0000144�00000004257�15104114162�024310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��fIDATX͗{pTǿW6K$A�-q$hgdXZ-JY *([iaD bG 3< R((@汏9$K f~sssvt3LIw5kdfBO/]]U+ǧ;푷PM][nڝHQpF Pu'�E'{BSݰaz+ݮ]`ZkK)eOΙ=vy.5(3g͜Mr[bMn헢+3˿-�aʯG\b; %%֕v1͡o.2iY6ƌR;-(Lf$@"i7 z~vNGh Eͺ=޻{B; _kD륔/+Q/(!/MgsJ ʎ3,9f/6߄DB!a#J2Fa6OsP(uх:d/<q_ww-K5ǼAc:d ~{��X| .ľU-�p�/O?DBs竪ZcuU䛐kؤN*@ڗQGw�0|vsME}^uj eYP#G%lKB%h:{#8>'{D RH{j+䥓hmt;+)%"žYǗm}(wcSBwg ��4ű:fZ&QJ&>m6t]Gl=!D}لmC'-tJ ܬsL�%%%mO:t *Lřr�@EYssٲ l;d˙ ,SW0R_6D !t]c j]AEeHrqG}VFճ\ lW/7-.pr/��uu >HNREai5FJ- xNlC? prܸx5aH!:Vd<XLC}=絫W�@J(; Cwdh )m+&� 9@AZ3kJ9|#0Dܡ8]8||+} T K6ӄqB'!{<)]j/2m͙l"wwR1omň컜N~ן]Yۘ튞/7#HchZc�!83[W`;p?ۑ ܚ M�!Pql;b&/6حM ,ק2% '?56! o..m �`t_H$fe8\sOIr|i�_ն4qPD1j@F&Z9ACOCp/?`;̚HK>B % ӔAJ�@ROؐHX1uqo!Ћ3.`Dp Z?ōG 0PJWYIT/_ �SMQH0Rܶ?pG`9oILT_ mi6G1x=&;ͫ$!'ַњNTuG��HKk|Nmjb&��L?hiW��˶\s0MWc GF)-�rJc_7!΀qWa7Eɒ @/ҙ~ @z>_V4T75�!'XR5m{3s;n`9|Swp|UU!{TH"!W=|uxnnh,Y^UmbR*mj]ΛO+[`ljP.LH)*.4!6!1@J�RZ� ]pd cK(cLA啶|j}e foza%  bH~mu 9x"HH)O]dïY۾? i�AJ H J)�H )OBg��T%+a q[Cvm{vOwH{2O{doH�viK|����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configsearches.png��������������������������������0000644�0001750�0000144�00000010236�15104114162�024252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 5 !,��+IDATX  �����������������������wy{�����������������wy{������������������������������������������������� �JJI���������� ���������� �JJI���������� ����������������������������������������������������������������������������������������������������������������������B������� ���������������B������� �����������������������������������������������<<>hLML�>==� ���R�������������<<>hLML�>==� ���R�������������������������������������������������������������������������������������������������������������������������������������npq�M��������R����������oprN��������R������������������������������������������ Mfke� �����N��� ���������� Need� �����M��� ��������������������������������������������������tux��������������������������������������������������������������������lnk� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������I����������uwy�����������������������������������������������������hil�Q�����������o����������dfhI������������U������������������������������lnoQKIH� ������I���\����������Iccb� � �����QZ[^U����������������������oqtLCA?������������������������������ �998�QXY\Q������������������ L=;9���������������������������������������/..�L��� ����������������������x������ �W������������������������������������������������������������������A�� �uS2����������%� ����������������������������������������������������������������D(I��0#������0#��=-����tux���������������������������������������������������= �$�2$�������=,�B0�����mnk�������������������������������������������������������������~IC�- ��������+���ګ����������������������������������������������������������B�,!� ���J����$��]����������������������������������� �}\;�9,����5(��7���4'�vV8��IDDI������������������������������ �B>:� �@BB��U��<?�/:� �s*Z��������������9:9��9;;��000�����''(�������������������� ��6/��/�� �S(�J�B#��׉�]˂5~a������ � ��������������������{G4����B��[M;���;�m�2���1��ݒ���������^_^� � �����������������������CI7$� �� �A5&��2)�B$����C�2�`)β�������������� ������������������������6�������+����������������������������������������������ë#<3ݫ�"&$���A�(�2�M"� ��S��� 122:����������Ԩ������������������.���$���E ��H�X(��2������ �8J��� ���������������������������������������������������������������� ������E���E���E���En+Q3aԓ?ԓ?0 Kw4���$���������� ������������������������������ �����������ҽI����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configsavesettings.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME &i��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ZZZP��� MMN���������������������������������������������������������������������������������������������������K��� ����������������������������������������������������������������������--,��������������������������������������������������������������663��������663��������663��������663�������875�������������������������������������������� � ����� ������������������������������������������������LJI� �������������������������������������������������������#""������������������������������������������������������� ���� �����'(*����������������������������������������HFF� ����''&��\\[���������������������������������������������������������"##������CBC��HHH����������������������������������� �  ���� �����()+�� � � �  ���������������������������������������EDC� ����**)��XWU�������������������������������������������###��������CCC��HGH��������������������������������������� �  �� �����()*�� � � � ���������������������������������������������B@@� ����,+*��QSR����������������������������������������������#$#����������DEE��HGH���������������������������������� �  �� �����')*�� � �  � �m��/��������������/��������������������>==� ����/.,��MNJ���������kH��<������������������������������ �G�������������##"�������CDE��FGH�����������3�n����������FB?�=�h#�����������������'()�� �� � ������������ ��8<A�������������� ����������������//.��GHG����������������������� ����������������E@>� ���������������EDD��HGG���������������������79;�����������������������������������  � � ������������������������������������������������������������������������������������������������������������IIH��������IIH��������IIH��������� ������������������������������������������������������������������������������V�V1���������������������������� ����������������������������������������������������������9����chl����9���������YYY>��������������������������������������������������������������� ��� �� ����� ����������������������������������������������������������������������������� � �� �� �������� ���������������������������������������������������������������������������������������������3z*����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configsavepos.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024135� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs��.#��.#x?v���tIME1:��+IDATX  �������O����������������������������������������������������������������������������������������������~jVT������}L//%����������������������������������������������������������������������������������������������nZQ��� LykV����������������������������������������������������������������������������������������������������H=1�L��� �������k� �������������������������������������������������������������e��������������yZ� �������� � ����������������������������������������������������������8Zn�������������� � �y��������������������������������� � �������������������������������������������V9����������������������������������������������}������������������������������������������ �w�������������������������������������������F�������������������������������������������� �' ��������������������������������������������������������������������������������������C �C ���������������������z�I���������������������������������������������������������������������������������������������������������������***���������������������������������������������������www��spo������tvw������rpo������������������������������������������������������������������spo������������rpo�spo�qqq������������������������������������������ ���������������������������������������������������������������������������������������Z[[�����������������XWW������XWW������������������������������������������������������������������������XWW�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������o>A@� �z^X�<^�!�������������������������������������������������������������������������������Ģ���������������������������������������������R�kH��<������������������������������ �G���������������������������� � ��������3�n����������FB?�=�h#�����������������������������������������������4�� ��8<A�������������� �������������������������������������������������������������� ����������������E@>� �������;���������������������������� ��������� +����79;��������������������������wg������������������������������ w�30&�����������������>����������������������������������������������������������t �� �C������������������������������������������������������������������������#������������������� ��������������������������������������������������������������� ���������������V�V1���������������������������������������������������������������U/*#�2-&�������������9����chl����9���������������������������������������������=TfwlD��������(��� ��� �� ����� ��������������������������������������������������������������������� � �� �� �������� �����������������������������������������������������������������������������������������׸����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configplugins.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME f e��+IDATX  �����������������������������������|9L ��TAǴ�����������������������������������������������������������������������������������������������x7QЉBٸٷЊBi1)���������������������������������������������������������������������������������������������� (Pv���>��>��!B_�%���������������������������������������������������������������������������������������������� �*���� �� ��� ������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������ͳ�� h������\�Ծ������������������������������������������������������������������������������������������������  3χ@5���+��� ������������������������������������������������������������������������������������������������������������������������������Ā<�������������������������������������������Ά?������������������� � ������� &����������������� �φ=�1z���������������������������������� �1u�����������������������ێ�� �����ۉ�'Y����������������������֜}�hD �����������������������������������L�����������������������������O���������������������<���������������������������������������������������������������������������������������������������������������������������������������������� \�� $����������������������������������������������������������������������������������������������������� �$+�*A��ݚ������������������������������������������������������������������������������������������ӛ�쳱) B)a/3Bc��ڐ�������������������������������������������������������������������������������������h��������x%4������������������������������������������������Ȁ<�^�dM������������������������zO%Q`M1%L?��������������������������������������(w�٩�����,-�35���´�<I����������������E������d����������������������������������������F��������������:��ի3} ������D�:|G�uS2��������To�,�3�����������������������������������������������������&h���� ����D(P��-!������0#�D�=-���4���������������������������������������������������������������� P �$�2$�������=,�B0����������������������������������0�� ����������4��������� [�ׇ��- ��������+���7��6����������������������7��ί� �3+�3B����ܹ�w���B�5&� ���j+���Q��#����<�)"����������������D�̎�5In3z<����{��� �\C,����i"�E"������\��Z,�@0!��î!?*VD� ���������������Nm���������������������� �,!� � �#!�U��<?�/:� �熱eٱ�� ����������������������������������������� ��6/�C�r9� �Ӵ�V(�J�B#��׉�Xd ���������������������������������������������{GFay����I@@�[�k�;k��1���1��ܔ������������������������������������������������������Ѭ~�J7&� �� �A5&��2)�B$���<z12�m/�������������������������������������������������������$��������6�������4����������(�����������������������������������������������������L �b�� $"���f�ώ�1�r�~��;4 ��)����������������������������������������������!���+��� ���E ��H�X(��2������ �D}��������������������������������������������������������������������������E���E���E���Eo+U6\ԓ?ԓ?8$Aw5���1��������������������������������������������������������nQp����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_confighotkeys.png���������������������������������0000644�0001750�0000144�00000010236�15104114162�024143� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 5`��+IDATX  �������������������������������������������ht}:4:?r<CI������������������������������������������������������������������������������������������ht}R ����������������s�������������������������������T���AK������������������������������������������������eqzT �������������������������������������������� ����P����������������������������������������������� 霣�������������������������������������������������"B G�������������������������������������������� �ͮ�������������������������������������������������J�Y% �*X������������������������������������������������������������������������������������������'�U���f�7�����#ϊ�3x��zmeP��� ve[������������������������������������������������������\ �E�����ì��� ����, �r^R�n���Ue[�K��� ���������������������������������������������������������� �vH�Dy�h�Cv�����$ �x�-_����������������������������������������������1�h�G���������0�5B����������������������B7.�C6/��C6/�C6/��C6/�C6/��C6/�C6/��C6/�D6/�����������������! ������������������ ���������������������� �9������B �� �����������8�֘j�,r�������������������������������I�����R������������� ��� ���,���������������!�<.)����]MD����]MD����]MD����cRJ������� ������ =������ "��8����������������������� ���� ������� ������� ������������ Q�������� �����������,�����������RG@����������������������������ά�<ܭ� ���� H��h������� �����h��zld����������4)$�7,%��VG@������VG@������VG@������VG@������Lf�����ջ�F���� �� c�-^V������Z���������������� ���������c �������� �������� ����� �<<<������&:�2)$�����<<<��������������������������N� �uS2������� � ��������������� ������� ��������������������� �6��0#������0#��=-����oB����������QC<������QC;��������������������������1'�$�2$�������=,�B0���� ������������������ ��������������������������T���- ��������+���:����������������������������������������������5&� ���C������$����@ �������������������������"������������������������������� �\C,����� ������<��Z,�@0!������������������������������������������������������������������� �gϼ����Bb1|Aދc�<J�� �(Qؕ������������������������������������������������������������E� ��6�pv+S(��2��� �?o������������������������������������������������������������3����B!/-�+� ���4�=m�2��� ��r2����������������������������������������������������������������CI7$ ��0 ���2)�B$���<z1 ��+n�����������������������������������������������������������������������6�������4������������������������������������������������������������������������������ë'A.~I=2Lf"&$���A�(�2�M ��S�����������������������������������������������������������������������#��� ���E ��H�X(��2������ �8J������������������������������������������������������������������������������������3���3���3���3s-`=Rԓ?ԓ?8$Ax5���$��������������������������������������������������������������������������������������������������������������3���3������$����������������������������������������������������������������BȈ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configfoldertabs.png������������������������������0000644�0001750�0000144�00000010236�15104114162�024602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME&��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������������������������������������QP%����������������������������������������������������������������������������������������<U�� ���^ �^ �������������������������������� �����<T�����������D�/!� ��@.�������" ���P9�� �F@����������������������������������������������� ����wD��� �� �%�%�������>,�B0���� �����������������������������������������������������  �UN9����� �����8��, ��������+���������������������������������������������������������������������G.� ���⬋����Tut��$�( �5��Ά4D�����������������������������������������������������������������*!�aE*�����絣qީ����b\�Y+�A0��������������������������������������������������������������������������C�Ց���� 2N9�B�<K���Ҁ0{.o����������������������������������������������������������������1w���5��b�Zc=��,��� �6a���������������������������������������������������������������3����/u5=�+� ���3�<n�+��� ��v2����������������������������������������������������������������0v]F��1 ���2*�8%�� �9|1 ��.w������������������������������������������������������������������, ����6������9�����������������������������������������������������������������������������۟;eЋ64� � �H٢���wy�by4 ��S���������������������������������������������������������������������������#��� ���1w��!�}P��,�������9J������������������������������������������������������������������������������������3���3���3���3s-a>RэCэC8$Aw5���$��������������������������������������������������������������������������������������������������������������3���3������$����������������������������������������������������������������=�[v����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configfavoritetabs.png����������������������������0000644�0001750�0000144�00000010214�15104114162�025142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME ) ��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ������������������������������������������������������������������T†V����������������������=vO iP;� ���������������������������������������������������������������������������RÊ[������������������ eN:� ������������������������������������������������������������������������: �eM:�ª��������������������� � �������������������������������������������������������������������������^3 ���� ������������������������ ������������������������������������������������������������������������������������������������������������ ���������������������������������������������������������������������������������������������������������������ý�������?C8����������������������������������������������������������������������������������������<U�� ���uP0�uP0��������������������������-�=��� �����<T�����������D�"���-!������" ��=-���96(���������������������������������^w������ ����wD��� ��� �$�2$�������=,�B0���� �����������������������������!ߛ�&G�����1ڡ�!e�����  �UN9����� �������- ��������+������������������������������&�=�����$Õ�w!����������������� !�,!� ���ڴ����'Llt�$����|BD��������������������ɇ-w *iE����� *P�x7yӉ����������������� �\C,����êqɴ����"Hg�Z,�@0!���������ߚ8*+��� �������(� E1E���d^������� �#0�������.IU�c�<J�� �ҁ0{.o J:d !3�����������Z�����ݿ+˺ �������E� ��6�baS(��2��� �5~Ǒ5*����������������eF����������3����B!/-�+� ���4�=m�2��� ��r2���.Ќ1$8#K2������������ '��0tz���������������CI7$ ��0 ���2)�B$���<z1 ��+n����!V $<������������4��M"�����������������������6�������4������������������58%�����������%�68a����������������Ve~H4� � �f���r~�;4 ��S���������A ������� �A�����������������������†Vd��� ������I� ��2������ �iCd���� N��*n]����֒5'#� N���f������������������������������������3���3���3���3s-`=Rԓ?ԓ?8$Ax5���$��������L:h&j���)�����������)h&j>C��������������������������������������������������������������3���3������$���������������3���3�������������������������3���3������������molB����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configdirhotlist.png������������������������������0000644�0001750�0000144�00000010214�15104114162�024636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME-1y~��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������͔A�K�������������������������3lQ������������������������������������������������������������������������������ �K/h��������������������������їaL��� ���������������������������������������������������������������������������������׆���������������������^��Α9�����������������������������������������������3lP�������������������������������������������3k����������������������������������������������������ї_K��� ��������������������������������������������������������������������������������������������������%s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Α:���3lP��������������������������������������������4m���������������������������������������������јdK��� ������������������������������������/ �ً���������������������������������������� ��I�����������������������������������������0!������������������������������������������ "�������������������5i�������������������������������������������������������������������� ���������������� ,���������������������������������������������������������������������������������2D�G�M������V��������������������������������������������������������������������"�-���uS2�������W9�+�~=������������������������������������ %(������������������ � �1+�D�0#������0#�H?�=-���>������������������������������ �����������������+#�$�2$�������=,�B0��� ���������������������������#W�����ݨ� 2I�����������������<�u��.��������+���4���������������������� <������ ���������������B�5&�����h(�����;��#����a����������C� ���� ��4n$�������������� �\C,����i+�F0������H��Z,�@0!����������� 1������D�� 4�b]�������� �! � ��"�UԢ�c�<J�� ��D>�� ,Q�N6�����������\�����ݿ,˺!��� ���E� ��6��N� ��S(��2��� ����*�����������������hD������޾" H;� �8-%�-�A�%.��2���(��މ "-��������� '��ݿ-rd������������ BJ9' ��0 ���%&�A$�� �@+ ��+n ������X $<������������4��K6������������������ ���� �4����������������~,9%�����������%�},9�����������������‡Wd~H4� � �f��&�k�03  ��S������ 2 ������� �3����������������������†Vd��� ������I� ��2����iCd��� I��-pk����Ӑ4!#�I��������������������������������������3���3���3���3s-`=Rԓ?ԓ?8$At3���(���� N;Z!z���5���������5Z!z>C������������������������������������������������������������+���������� ������������!��� ���������������� ������������������������������������������������������������������������������������������������� ������������������������� ����������������������������������������������������������������������������������������������������������������������������������������������?P����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_configarchivers.png�������������������������������0000644�0001750�0000144�00000010214�15104114162�024437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME/59��+IDATX  ���������������������������������������`6 �uS�jT��������������h�Nu�����������������������������������������������������������tP  \(8Q !,:� �о�mD������d@WxQ#/D���ȯܤs���������������������������������������eqp .>!.A� �����!<��οi%e7E]V �����  �$<���o������������������i"gW?*8� ,������� � ���� ��������,� !���kޘ������� k!DXb �������� "� ����� � � ��������� �*���f�������&[ ����� +�:� 0������������ �6� $����� ��w?������� ?*�#E�'M� ��з���������������� �0�)J�� ��r������������� ���g��!,D���������������������������������������������  ��Խ�n7�����������������[e:JaBIg�����������������������)=�,=R�;Rv������������sP(-*#6Ig�Ø�հ��-Ba� ��������������� �.F^�1DY��Ш��#7V�K�������l!8Hd����� �7����������"�-AW� �������$A�ųf������� 9(#/���������������!,5�#4B�������#23�7Pa������������������� ������k �������� � ,����Oh������������gD��������������������)K�������� �Ĵ��U__��Ѿ���������&J������������������������������������ �� ��������� ���������������������������������� ��� ���� �$ ��$ ��� ��� ����������������������������������������� ��� ���� ��� ���� ����������������������������������������`�~������{�� � �� � �� �� �����������������������������������D<f��uS2�������i��S �������������������������������������������D(P��0!������0#�t�=-���W ������� ��������������������������������������= �$�2$�������=,�B0����������������������������������������������������������������~IC�- ��������+���Z���������������������������������������������������������B�,!� ���H����`��$��}������������������������������������������������������� �\C,����@�6"���m��Z,�@0!��������������������������������������������������� �����U�c�<J�� �������������������������������������E� ��6�#' C)�S(��2��� ��04�����������������������������3����B!/-�+� ���4�=m�2��� ���1//������������������������������CI7$� �� �A5&��2)�B$������2����������������������������������������������6��������������������������������������������������������������#>z .~JFB6B@���ػ� �1���� ����������������������������������������������������������#��� ���E ��H�X(��2������ �J{������������������������������������������������������������������������������3���3���3���3s-`=Rԓ?ԓ?7#Bv4���3��������� ���������������������������������������������������DJV����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_comparedirectories.png����������������������������0000644�0001750�0000144�00000010214�15104114162�025146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME -c��+IDATX  ���������������������������������������������������������������������������������������������������������������������������������K����������������������������������������������������������������������������������������������~JP�KL6�������������������������������������������v�P9�������������������������������������������|K��� ��n�������������������������������������J���p�������������������������������������K ��������"��������������������������������������"������������������������������������������ � �������������������������������������������� ����������������������������������������� ��������>�>���������������������������������������������������A�A���������������������������������������������������������������� ��!b��,� |��E�H��+**�����������������������������������+,,�����������������؍�-F� ��-� ��.C�ٸ��5���������������������������������������������������������0��ї� @��� ��؜��*e�������������� �<::� �������������������������������������� �-}�-��� �� ��w� 2��������������������������������������������������ҏ� � +�/�۱�*� ��2�$ � ۇ���'���������������������������������������������������8?���-�� ��" ��%3�����������������������������������������������������������������!�������� ����������� �,,*� ��������������������������������������O����$���.F��L�� �������������������������������������������������������5Y��\�׹�� ����!-�� J����������������������������������������������������������������������*��C�2x����͒������������������������������������������������*��� #A�);���"��%@� ����������������њ���5v�1�g���$P�'V� ����������������������4s�T�P�%��l�?�m�����������������r�� �����,A� �x������������������������Kg�����������@V�������������������5��ї� @�����؜��;v����������������������� �<::� ����������������������������� �<�f�%��� ��,�!9��� ����������������������������������������������������~��1�2�۩�*��� 5��r��S���������������������������������������������������6=�� �-�� ��� ��#2������������������������������������������������������������������!����� �� ����������������������� �,,*� �������������������������������� Y�� a�߼����.F�� V��� ������������������������������������������������������������� ;_�=a�Ѵ�� �� ��(��T������������������������������������������������������������������������֌�5,��I�!P�i�:� ��>y���������������������������������������������������������������������/��� -E�-=��� �"D������������������������������������������������������������������������������ �$P�չ� �'"9�����/��8]����������{ +�������������������������������������������������������������������������������������� TA���-�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ݝa����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_comparecontents.png�������������������������������0000644�0001750�0000144�00000002104�15104114162�024466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME34KT��IDATXíkU?;٬iRmb-j`ֶ>Ҧ5DD}C҂/}Ʀ" *Fm(&ii&&&3vw̰;ά�fs y-`Y/\3GPhѨnS h(4�[ ,x훑OaOf|Z<~ZPt�FѠuJ}TJneɽFN-�VQ G+-K*QZS.ܢs{nOLT BтQb9r $gLϞ}Հ0a�m;X Ş̰V U (H<n.2@WGJAnM h%e(`:Tviu[ZX{><;mkm7 /bC<uP-^8<xgv Z~r(H �Ƨ/ǘyAˍěGƝջ|`tƎL, 0647rqjX]. >\mGF9;od%mh x,ӱ&.UojF'go k@KHd'8=:))$ Qt5S(:R |v-"" s+=g!ݔ`ks2v]+F@v5Jоn6?9kZˏW\TP(ܰ"�DK9+^R'2Za;̘(ZK&?"+MyԊwܷ7_Y5"31|s/dzXqW8aN�ȕ78hÊ75b쯙Rߐ �|8ےO/ת u�u @9߸=v܆oTF(aiyRE`[oT+ j58Вo����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_columnsview.png�����������������������������������0000644�0001750�0000144�00000002013�15104114162�023634� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  K$���IDATX VKkAylv@D">.ͫDD!($/Mԃx/ #BL3]SU}U5cEQ$S,8wwܟ~[vEc:x,K(r)|+z ɠxAǶ)0�/Bi;rmjV\S1\?qe'}3�Q5]IB~��},h�wI/�<ҙ49c>)*$PlqzU,39}$ .ŸB٧)*[`pp,f)qPBTg5jχ:דBpݭ_M˛ѺC21T ēI)yH\N;*J9m@Hd}$ĄOr�?x0@Z�zv848@US>J.I8S9]]#`||B=}}'JEM³9wDJT[L؎|*942((e mfT"5I,BrBw樲MFo\OQW loPg_Up(pt`F|hIJs+2ceb4!V(3A)MA3BNaS׺ t[RG�M--ʀ .?&L( OEA,ŅQH;@ xPQ) ht- ,Q�m \tM2A*,H GQW0quvB#igxOrPk-zχ }"R ~J1A~~}=e,f^QoT)pmŕ>DI2nEdDL=UDTSS@l.6 uV.w D'0$ cѐSHM"p����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_cmdlineprev.png�����������������������������������0000644�0001750�0000144�00000003064�15104114162�023600� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 0#��IDATXGWkhWfg'3p7/cI;FIkE**ZmJ-}ZVALkK`Ka!PZkHbK0b-HFM6Q7l}̻>$M?=ps|9s$ 4 M<8^L1i~D.@z bY lyIhNzBK7F b~MwsX݃{Z{'Z\ "1)*bZ vBGMsnQC0,j aUϫ()C:տSDRb5]#\Bk-(ȌD { )i3v|"|6 >S34qK!g a E?2*fg", &8:.Eh2z�\ O<R|~u/qIR=; 8C6,F_0ޡ!=mDP+/FEa!J}<2,l9S EVDYS Sgk~; S14ä́ 8{8^޴Iٺ([ 2t71?= l]3^uj*TvUcWqO] de9 &\N':;:p\]mĪ5kDOof=1t-A4(bhZx`:ͤ1E(0Bxnwp._F,(] R ap*wʶ.!;b0p"d@3s?9^ NK0Q)^dw?g0L5a%v.݇Oh>̛ rlnhG-%䄀-*Sy J7(0@ ZRR4R>YS9 ά, !pMwHq~w3he$dR0aXU]nAKynd"xFޛP9 AEr,ǪgKiyٓ%|>tawm+ ;G1թbٰ8.\C\&U Y�"ʊ",b5";+ BI&7YLZyeeeHi^7Rc4>7n7D#I9 F4|pn?蔉QOgw6O$vivLs' /EoEc{"}ڢ7X4 g;I*ؼm?m3 G,hsQ͝.A!Vu&o+8D.IKL9iS,v @1)Hki)ډ`I [H֭[>D$zvIPX7t*DaBOڏ1'qI"܄qzNZߣIr,Ęω$6X>O7Xol~"|EQ7F5S9bF'چn;ū)ejGx$�Mw7q/HD"F 3ƪ[G KB3����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_cmdlinenext.png�����������������������������������0000644�0001750�0000144�00000003111�15104114162�023573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME -gbG��IDATXGWmlU=3;n[ZJ[AQBP$5bbILj4VBi( H)@ v[I-vRHM^{syX c Cvm']9Os JBg^~BQo0t Í`DB৽a~dx1dCazUiwB3UpHD$T]킐hm2+! xxi�Wi(P#Ӥ?a ; hv!?YŤPJs ƹ R$;3l08 t?|bt|Ay?!h} JfNBjQ: pGpJCSZ3[w3m1cT%7BnN &\.@ɣӱ䑄Ӫ=u*Sf]. }PEaa<zk׬Gq*ƩVih9LNo4Lj#kahjAfEBٓ?ߌ \o~EGzJ@$ǎz,]izzC0Ry\4a }!":v"h 2-bꮵRu:Dw"?$Y6WCSu(A]td3 @4"bG(0ժmHfT fp3Ǧ�t?5sBJbH|=A:p&ǔ] YS sWwMA^kA,| f@M@N|7hF1@ ` (- HYjA[݅}UWޟp;/IԞ+“%{5PsdH8ueo@ 0ҜXl!,*J?(~6W5A$8dzd% [W΄p\x޸'aO(H]UX8s'j4 ##=eYEELRɧR\ZZzi(ˣz* :K&0^@0sd9H`'pf?^țQgokgEeSB;c*0̻Iep{Jbi{jK9Nn̈́)5iqBF7G%-} D#Ip߳H# [ FN4]0nc6F.־iӦY" D@tKloBEKd4M4F~ɒD2)q$=ղwްV>yHr.sL c+rƮUfބ@w۽ 3a@ECǂla@s mCSvMvCr' c*v@TO S‹AX"ƃ=Dle ò3>hbu!`w����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_closetab.png��������������������������������������0000644�0001750�0000144�00000002212�15104114162�023056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��,IDATxWklSe~n^fBt(Ÿ$&$ß !hA LDe~(D͠[.Y/zz._5&9}{g6rX`� W;>TUQ~hZ$}Gh6Gж kQSP8VVzkC1=omj8c"8:6bPw`O7B㏑ظ…-x4Elen?GA�WB.kc �zF[sCEӑ@}dpIPr6$D落� lI^1r(~Zl"LYEy~>vI[ =qٕ5�), \@~2CUqG'7�gZ9Cَۛq(M iCQQx஗DK!`ZIΆu7 Ī]4aczGv}UxдN8*bSƜΒd8c՞gQ&|Ur:gx$Vag&x{sf1b~oo]]7`d<7:ڋmH| sx<#m()Fn QT?ކ@b�$ iÆ=t3QCٚzZdI&sj"s>x}�ulRb�'v<VOyIjn+W{;x~p֤t$GGU<5^w?I7 @ȼƅHKN"C>6l  RXwkijzW8O1M l ͛a]S=2lQ-`>Ch ](�K=%c"S`G�z/]F=죽�عvCU*)(tRP-};h3!$ZK^X* +1üp8�R"`݇[/;3G$QQP&|wb1̅CήũTgd2o=�$tQ{e����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_closeduplicatetabs.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME%5b��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?zL� ���������������������������������������������������T†V����������������������=vO iP;� ����iP;� �������������������������������������������������������RÊ[������������������ eN:� ����kT>� ����������������������������������������������������: �eM:�ª��������������������� � ������� ��O���������������������k�������������������������_2 ���� ������������������������ ������������ ��fff��������������������� ���������������������������������������������������� ����������� �� ]�������������������������'�̳�������3M�bu� ����������������������������������������~8�����������������������-}�'ǧ�HN�S� �������U�:#H��������������������<U�� ��������� ��fff��������������������� �,m�!�)x��������� 7>�*w��/Ei������D�<5(� ����<5(� ������������������� �/\�,v|��������������� � MW�ג�7u�[��� �UN8��� ��UN8��� ��������������������OU��������������������JO�Aų��� ������������������������������������ �ɸ�8v�÷�������������������������19�,�������{G3����������������������������������������������������������H7��5>� �����������������������������O4��������������������������������������������������������������������. ������������������������������������������������������������������������������������������������������������YA�����������������������������������������������������������������������������������������������3� ���������������������������������������������������������������������������������������������� �����������������������������������������������������������������������������������������������@"'���������y�������������������������������������������������������������������������; & � ������_{�����������������������������������������������������������������������������������^<Nh.����������Ҳ��������������������������������������������������������������������������������������� ��������� ������������������������������������������������������������������������������������������������������������������ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;Q����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_closealltabs.png����������������������������������0000644�0001750�0000144�00000002310�15104114162�023731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME=,��UIDATX[lTU}>sﴅBD DQHkj F LLH"(Ax0RQ {2N;3salg dd%>k0p3&-lA$Vvuy1u&艎UbrXP<[r`ݳ�O%eV<5 MrXw a6~}x~sY+%tlmut8+K_ ۵�@ݔ W0U5)ľCphc1!b& G/Y@R �.@)�%:XZڸX`Ŀa)J@Ť xUo1<i"mby@[ 㣴S;"]dh.\JO 05>O>]%}ԟ?ja=%4!i2wdѵ;-)Ko="9si*p$/>!u+MR^E`|}Ħ&Ϩ^+�W�~(3oB>GSlXh;ʌ/0m[d9 L̴7=6TuK jchp]'!㽰pH==X>_&[dQ;H|E ,8f*i^k0ףrlSC[C{)=]pLfD)Ii#|CLhܿ@ s^8{5К < \i_Ia/a^䯎'0AUg0LDd ٱH:AL/`Tbt$rܨ:Ȉ3 s&7B`IEodh=BpD>Ta)m47`e~z"�G@u`hщ;ñ5XƒaI,)J!'OxM@!h@o;28T;y ayX~emn .(Iyb^}Մ'*9݌zR]o9# ^nPD� 1ϔo&,Čig^ByMo 9 Ej����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_clearlogwindow.png��������������������������������0000644�0001750�0000144�00000004250�15104114162�024306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 9%^��5IDATXGWilT6/6M!@"H #4mBERHUUT*** "1Q4@@�l0Ͼ73ec豎{w;=@:o6ʤkИb8A#!_h/-w]o@z? X_cdõˇͱ#yhsH"Ж=?f}ME?a|,0x7txj50Kn &I�3P\KG.cZGE?q<g4y׭mVgǑBAk l{0zzhBYNZlYw_a~jEpf[/N5#|.-@<~_U2{a5 I5ِ03~Y pEbXo ekܮGܪ]5!qm5~?ܡ*J`spcbgpT^ lU@M&g=>uEc ld}UV:Z0D$$IOas0L8y -Y֋ND<\anlm �1{C@"KOE GJ_PP`&eӉKǑWd;d�TmQz;? �IH2H 3a@":�pĈ(FVS.YVn|ӳV]= $HDhs{Z$>IM{0㮔 ˁvc,.LX!|[Bn!9#(f'bX|;ˀ,gD:OLF۔l,׬=/ qcckK)ɻD^F(wAZfƑIy n[zU>\I_Y,9FKE0r0!Hx@- p@vtod޺<X&2n hO CQ,a Tv0�<4ӑ�ǫ-.W}hY wMВk)#blVa)&3 vP �:ZZZ =O{8OTuRUTQqH|/G Ќf, D{6�xՁ@`qê{xp2r$ζQ&ɂzM#rpi"Ecӓ4u}qȜ_7=g>\)�Œ X #Xi5P[Em/::!'90eaYy# ; *,4R+6e|T%#hs\y{߶[ѻTӄg[O2YDnvhaNCAY9؉;.nGvnֿ,_N)&Hd*\Ɇ"cg7#ٿF($RNmaOr&7ɴ4�Z%Vo `MY#%~Lq tPZXW`9Q4eBJ.&3E-d<AwJ7k,َ_uh pNG *p*D8e>E럴=\$�䠍'GԹ >Ʀ1�XB~ܓ|>끐cC腵HRy#N1Jsh1�"Bn~KMo^Hh\Ǟd�EH&3y#,}~e$-jOGʟ,.FQ>r~I@YE98 3N zC86~ oy *u M*^']%iA٘K69!I S&lL:\@ ܼ9f;C1'ߋ]Z֞ vS'n7r'xG}c48y]|Gs`~4Q33#e0TpfUa%MHSܤRLb@kYXdd:>#N ==����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_clearlogfile.png����������������������������������0000644�0001750�0000144�00000004012�15104114162�023712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME :'$϶��IDATXGV{l}srH2zcM #UVt1Ι fٌ#6üQBDb N#8@ҦіB o9|yGéa_QӴtڳæ@9>_owe.lMM㉺۹4 6 0l۶Ѳi l݌+a=8080oms?|w:wn$W 1ѥH|{/#uG]4'TdU/4ڜm͋Y>tL6!fGK~;H>&Dt#MF}祕| joƘA,o|?;/>= 2瞜 V*iߢPfH%[QV^ @ 4b1`x�ܓ3\_uA^iTZh _qM=<W`_qw>NMWr'�2Qӑhy�BÅضYȘM]GN@d. B#�:W/FKR)$I.-c0s,!C;&t$ѻ;ԀDش+IEmzwMH�3(|ϮÎo"T#q)[NY^I/r){W^t <O1DDGal\7{�5587 UT0-}G14%��5iW#I]B(},DSf/n77!Ȏ 8tVL t+xK+{ /w[iBuuu?~ߏ`a&7I5Qɡ04Egg'"o=p*h ЂjЊ}}}h;ԉ v䵀!LPpҀ6o)]R/X/neLrG A/z] ,^m RD, .gQ_d.M.PTe엔Νhx碹0'z\5LV@ F6 ?W0YWoGX%K]sEúuq<WDwvww #A9P8;gddI!+VE痙x^f-rF }24$ 4ÈTaXRtnZ-š5k>R… s{;T!Rzj\!y"d"i L> rc ?Io ^tAs{)̊QFM}Oȡ[/]VW\T֎v}(QVR:">JK"R B T͋Β,8r(D,gܘ|4EW>F EfR<?baȻ0邉xr8q2"&l߽|A*PX E7[je+)$4>Xz1*B1_|>̜6݄v='^Q! 0T2yqk ̕|߆B>,mfRb/U՗bڔIC#tܸEY4e C28 7\ɹsg 8U*=x'QXg3-@ӛ7-fa1cS 7-jmzA:PJ v/=$weيxsf{ nDIx%%Z(c@,z᭑{lŪ kID2֒ԒXrVa8E?3Y vST4n9xYl"I 4J4([HTʒA4͔~fO4{|U{|2L=^ le$'=ؙ*[F NO@=����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_checksumverify.png��������������������������������0000644�0001750�0000144�00000003661�15104114162�024322� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME!43g$r��>IDATXŗ{P]eHmZt3uH'&@6b'"7VM h05Z;IlufѦ$ê˲^L3|;9y}Rړ~BPPX)% IEQR౵!ZPX\!H�+s-^Wק(*$/'|.H[G0Kx8soC:a�\X B �4CF@QEQ4~<!Pe@#�PBU L֫Wi7fåKPUuH) }+\9ٙ-h`ۙ<y2\pe�Ok Kn)_*0�S?~VB&NHUiVT?$ȜoL׬MIM[:;EEEIAuu5u7nL3gew Γ(@6u0Wf;rtww?蘘*ȑ#dhn�_!F�3 t--M7iJ6YNdqqqɆ�no(p�B 軸.ǍM=RRU�  W'/Zܾ}ӧn&3;yDh} _: N֡?Fz{{�)3;g_̘1c1˷˷2v!/}jkuzcc_n7gt"`ʔI<|R:ƹE,>ʕy-W<7CǮ\_hnٿU^$NVm PKaT,4>sذ L&_�vv%E�E_Qqk>@@h^ V&yOs̙3q\? 0fmh}E BP`s)6Nd1_Ckƌw$>~*N`yB 7κAo=߻}6UQCppOIַ:rWuZGWܱ\gfVߙ[eigiEGW�рQJI [m=GEOeYaE5ٷ LsüB䗎5܊,"+OR>~Pl޶{ȥ-|V{7E)d8JU.@߼Bz:sMԙv*atyܔ !RKJddҸ8 <w1_i|#�%o$s>o߬I? ڌ &\MLLfquݬG7�\#Qؗy!p5`;.۹;i:Nikk[5x<�+ O%.+r ! e;o%$$qӃhd2 |i bhUM{W4VN/Y(b~*:䆇 x--`yL AS5yL d�MVAw^UUq:ݬކGlk#4<U6xCCؾi1:stơbEQ1 4ch4dhX|=EZ^žJ'/ʉfmޚZjk/aԔK-n--|>ח�PIǘA[[ee ɔ !B 0 B; -�dzX MhЬҎPM4dwu^ݲwD#jjm����IENDB`�������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_checksumcalc.png����������������������������������0000644�0001750�0000144�00000002450�15104114162�023713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxW]L[u?0BtM֢04m/64~L>*qh`o&&BLtI1ւ Ϲ vxå9ϕa?ED"{ up= R)̩Z[r/2(I>�dpFO8+(*3??wňHQ\k\UWW7�)T.SJ?)ŒP(�K^f߷n233hFGGA& "= O` (9333abbn6\<6+fxcSZZZ -R Lg3 #T3l*սJ.ލ -###?P!$Z>RݑZ-Z!ZuƏ;\[VT-fۆ\P_ڝپ')IF-,..Ғ`|WKՃ#K$^BuZd)n7 PPPfFd3fԿ�| � 0N6t>lRBԼcqKPz\. {bp@YYlۖvJhNMCC  �Byy9h;  R/m6 ܵHO<YC �aݪE* 222Z&()gz*??hEE,//sIb֖k=ֱ9_W R6 ~70tUlFy#EEzn<{:ƻ?X_�ŇFݻ),r;'� $(m-mDZ<ymh rrܣiaČϬsN o$�isF>RZRv0�Lmp#PRG1W,+zs0n=ӭxO;/|u%, �(v b^:1ENv#c/x?$҆.KKK  Xor҅�jyVinn.TV?9�؂|dc|Lpn61AFXb�|s'fc0ƙ'rhG8P*@!WD~i@@0Sqhf|DŃjz@lzJSU-V< Jk6@g_XcZ 0�-le,_����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_changedirtoroot.png�������������������������������0000644�0001750�0000144�00000002505�15104114162�024462� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME -��IDATXGVMh\U}$a2UҦ$ h(Q "JEt/ Aƍ` F."v!J%EklD;MĤLf&w{yo~&K0w=wsyou 4y 8\-41`(NᮻOq]`+s5v-̼HF|X \x$o7)ꝣz39\*�6rGN|mkl3@$J^<F&g.).:'}CsQfn_Vb.ۈ:B;C@WhJ\ԈՊC6 4'r0mv 0SA Ғ@3QZɇ2iÜJ<?:XD/|/ (`"wLܢig'  TV<znES@mKa)`7.]eJۓ_Eye]Ll0e ΰHWFAT؝p`v �{Bnr@ l(ր2L[<k {b8s.K(B:_Wp ۭ.dam+(-*\QCZ8SK~ d7ć?N M@FpVKjM:R&pcOJ'RW@y(7>Nn-Uk6S;/x7Xp4]l;c*;duu.;Z&w|i\bSۆ|c'Olw4EhW8& r(GbjoQ% =?kf13µט:%ѫ% #?Ru=l_$KYX^^ ָ H <<n! zzzJ! }^:O/j$Jּ7nWW$[B>׾r-h*aI2/rj NR!&ru*4QF;||Z Q0"ZAܨt_<+i̅v,DD"SL&Qyqq/B $^`ۙ (ёԁMF+#}B|mxMA{rjwooP.޲Y#ÚȈѯ1e^vw'w_/$����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_changedirtoparent.png�����������������������������0000644�0001750�0000144�00000002431�15104114162�024766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 42��IDATXGWkU>fhKR!XETԇoCPw|ZHEEɃFiЦ-nM4ٝ;33l:Cܝs9;?o18m+^oDQZB}; rC~Ɵ{C!{p~ (u j=elo6�"[Cũ'u_"�GQ�G`mMJ^I=>ɂ(}E+`p�,V~1!{y4o4oiJR+ +� "kS:xm/?9"΃I !I(Q39.TrUY�;? gGK6QHyuuRiMR0~K>R$  acw%S\`3V^ ):ÎKg]7BP�Qx9{F:�~J"@(jXH,$K\i#AdbrCa6 P@m(H�_Wܼ%cϿ3a? !BK_0{$0[Y� C^\O}B듲0r}-O>~#[x"g @d=xL.Č &'_@tXJ.9Ó v`k@ �;`aSd d]&%XNJ-IGe {@ :"@=OErߔklHѣ3O:_ȯ %~9.b\ Eػ uxn2āU.},eDf;,[+u`V6_WGdafFimaza7dbeEZپ 9j!9M�N0TMʹǾc ,/I�y\x8.Дwb� bLn3o/;6q"ED H bT$,޼"(xl)۶�pB pv '(b\ a(�`5f0Ʋ=,:�e޾B^.јvpQ]N]�847+<c9dkV$v'%U&u*#gA [Z/QęKbq@`PX{Kj=(}:����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_changedirtohome.png�������������������������������0000644�0001750�0000144�00000003471�15104114162�024432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxWilUfyKi&T'kX,P 0 $1*?_Fh FEV#.VEѴZ@@Wh>o}<w޼.hi a2sg=wι, W?X�}ehyT=^+@$c+MҺww>}O&]I�^{\=_p< x&=�]Qca 'z3uX\dXL%ېiEmY=2`Ђ?=?ӻE >8�q#l\GI/_s܀A+1Kʲ@fȏp�JΘCB@s>*DQKS�S_߄p[9%!V#vB3>IJSpbldEOFnFetߐ?47<M!ѓ+nkbVe!nIHǫHGBG㮇lQ8s!acTkOSh Lv<gZ[GŴ<$b>srD%ss'xѓIsUEŤ>&s@Kx<3f A$<`%- h<څœ>}':_25@.BX�/`jg'-0 ĎB!T @`t?]" H$Ѓ_ e6$,%JJ`uD{ &`:ϞFg٦X~n0~>WNzv;hy̹fTi]F$*a̩zH]75_ar?&Y^gt,I1)*h"nA.ǣ K  CH|dYaisg"?co:o J4WLpfF2d'ܰ%FBIH&H%SHӐ =0+֭BY}i2+@o* eA̢aY<ʱvRR{Pe2E#SƆmw!R+zٽ 嶕R5(]*Jv,ZCkY;IߠRz7 R#U;�RL�]DIgvON0|Һ�v3(8bB(ֆWe�)9o#'S|z},޿t[iG"ʊ(-tcTXz WfSXcwL~&`ҪUĀkk#v(A>oj  }&`ʵeڄJqJGC-!= "`bXĵ42e ;ok8kI->ÎhVHfZ -BQuȪJLcBJE> }cśF@~;'"% 4CѤZT45ESޫUu.OQPULBj91߄"+l)�󫖞΀bMkeL=PBm+t�&܂W=Y!�-EbEaeHl)8!/{XP1NDSa8h4sqWHiJGO??\<^8+RGa_jW}4gxSBF?sj: 5�@zeyc( 7>=fv7VoN#@p@\X36hчK\l%u98ܗp.(;7q�o.����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_changedir.png�������������������������������������0000644�0001750�0000144�00000002617�15104114162�023217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��1IDATxW[lTU]>f-5! !-j &~<B& JBPBj0&>QlCSqJ[ i; Ncf}νw3 {^{Sf&h*W?}U4 z51Iŷs+� n|ÛGX:d9`ʸk[~SGxN㽇ٶ>twC͡듧hd^#=%i`J.zSi1u6mۂ�E%8 0^ɀx;nu־K_89.qB4J Ĵ7;u#Av�J:Ә 3H5�QI.pwL~z-%Eb@x;B1<1!`+h, JlzC23!e1qofuTm"~ra@.*Gd*~\JzKĀ$B iC%TT@ca`Mf!�iRݺL P&!hsxbXb �Z$ AyAHKV!:tߜ✒ 1 +ܻ"2m5S!)X5WB?⹟b@} ӻOUy7_MNg =4iQlldNN@e=Nv ,<HSVbL~?ç9u@ ~# KRP|TXtFS#ر_nқt`ҧU%g򬑈)Yɜ&ᭈaשIx̙<+ymVP,Nw _ۏK~zWq 3IJUՂ&CRǘF>89K)lr վ6:k^ks?~Lb/b[5!Y'w&/pfzFN`{m\jCh8{»sħr͡}%t'->0؂gSX3^yr^=֟^�M6%_6Qy5 R9mJ\pę$6r*xu۽ukoڻ}M\\/--Ǥz|= dw|jnģTEvxUyR�+-a $�Ret,>t"~Ny`�8.CiFWRc)*P77ݻ(}y?4>Վ5frmi/ LM7}p3^ƱNS(.D}%tW�jMཌྷ����IENDB`�����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_calculatespace.png��������������������������������0000644�0001750�0000144�00000003622�15104114162�024241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��4IDATxWklWܙzįMb<0qMEmA  �!!U?ETTRQHHD) "+m;M'v1]{z_;;0vJ~=ڙ;ss&(v@Eb_фد ѥѸ$1~ 4s VvsMUP4Ճ^q33=wlQXwNa?cq�c; Z-pҤtBONT@UCmi�x?d}_] �;sZ9Vr0 y0(XyaGfWХ  A߶6Rz GG|W_kTiGTtDo08}l-ڈ2z$H=x ?NzERF~Xm=z4<}@0`:[\Ua(u|0y:r5XtC_￙vU߾=c-C0/>L:Cn|u2�'XeH 4يÖ.M<uGm鮦=⇯ .ha n-[*yB,ʡӮ{?$A8Иxc"{'6&ԍ=ʻ3*ߦd? DD42Fkǿu)BGA@,d;6ߍpRCN! H$Ʋ$>ʉӘFhp56t"*,ȰrCEQi[CWc().B!d ܧ6 B0XՊmOT OpEu1n*kB'P~<GFhs6$Z2|+-w"蘞e6riڲ~/  ݍO7{"Қh5�V+**Pr=R@TDG-ӋgrbصeeUj8?1_@%cs:*pa2MTW�Ƕ ~L"O}mmYB)n&G?QLSٛȁтNlj#,6/t~zK6ÔvMlpTқpU<YxX_"r.IZC/9y%fI 1#�n"X3Ո 6L[/S (6U!~t23N6/&NHGӴ?ٽK d̄iQCV\0014YtƿgK1Q%c:Qh &o8WO!CkRmSֱ_i- i{wa`Y,ۅEUMeS"jIqC,xiB^c2i`4"PO/p/=1u8{̨`>9t|0q sw@0\ΎvKmR˥IZ tPtR Mq7/AiS^5=|C-/ijtVŖJb!5e/Ҙ,JW)s4?&~WR7IR ˑ̥+#'_)&tLvp4WqSirabv WQȤ.s_:Vo<3BI3$'H6txF4KQ4`C082R<b\ٙ3W^yUy,Gb?$U$աꆚ{5-zEkr͔\Xtᗎqg ɂ Gz1HW"Bu}?.nL,_Uڞ3}qaw? �izìJP����IENDB`��������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_briefview.png�������������������������������������0000644�0001750�0000144�00000001500�15104114162�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME +#��IDATX VMkQfLE4(]EĝƸwQ +ąDVnDh~E]`:_ F4^Kwνwe�(TGqI+g PEuε$ISQ0RlWJn<~L$KeJOW(ndsHIljP* ĉA,&6 @ Z27<.lXdhnb͸C.= M '#[ti:6<v ͣ@Q >(~ M&qK wߗ#UyDq$ѷH\(FcK$}iB 2FaE{w2(98 C_ӳb<-�|ӲcUTiQW|  jNDİ`ㆶ`| Ї˲oθ肅$О .*$ 1- u]p֢dEY2�1 LKJ*(�j`po` PQQAT ;cr.ehEs|x%-]0\vTK˭t1U[x1AdJomQ`ZN|ڌpf.8Ip/yE5mTM5VUb\! wMrYV"����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_benchmark.png�������������������������������������0000644�0001750�0000144�00000010236�15104114162�023221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs��.#��.#x?v���tIME4 (��+IDATX  ��������������������<nli���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������VUS^]\4���� ������]_A��������������eca����������������������������������������������XXU�ZZY5~! �!!���������������������db_|����������������������������������ONM  6C@?������������201�TUR���*��������������������������� �� 4432����JJG�CDC�!!!������%'(���|}��sso�� !%{zw�������������������������&� 8987���EEE�EED������������'()���������kjk���¿����������������������������^_`J;<>x432��tts������������������___��gda���������������������������%%'  ��vvu������������������������xxw�������������������������������l+**��FDE������������������EDD��,++�s��������������������������\���<<<��+/0�=k���������������<<<����^���������������������� [��>>=�������sN������� ��jih�opr� ���>>=��� [����������������������; ��! ������� ��rO��� ��� ��MLK��&&$����� ��  �;����������������������������������� �s�R9�� � ��xxw��333��� � �������������������������������� ���334������*4�� O3��y��bbb�ONN�����������������������������������������������������)1��kF��[TS�vvv�������������� ��������������������������!!!��b`^�����������������������������������������������������������w&^�������������������� ���������������������������ea(��������������������������]���^���������������4 ��  �������������������������������������8!����շ�� �����������&,�������������������������������������mH�����+��%<�[:�=�4�� Ӣ����������������������?@Bm ������! ���������%��  �B)���/����xiUк������������������������������������())�B����kX����������B��������������������:;=W ��776�#""��������������������$$#�����),�ka����߿�������������������,-/_���� ������!!!����������$���κ���@~I����������������������� U���������������HU/����$@J�����������������������������������'ikn� �� ����������� �6A� ����t95@K���������������������������������������������dehoW � � ���������������� �Y�R>�����׮]Hĺ�����������������������������������������������������������STVLE /��������������m)l^�����'~y�������cެSr��������������������������������������������� ��������� ������������������hԼFT+���������������-��t&������������������������������������������������������������������������������)#��$5�����������������IJ�����������������������������������������������������������������������������������î˵�R����������������������������î������������������������������������������������������������������������������������������������������������������������������������`rA����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_addplugin.png�������������������������������������0000644�0001750�0000144�00000003577�15104114162�023250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��!IDATxڴWyle޻GKK ) P*=@ԤJ jDhb %  !r([\rv]vfRZc۝{7:'q{xVq}Nff,- Z46,!QJduY)_ :0[P<Q"p YsF<!}OF�<,` E<<HjdosD0釂/Т;.q˅@<@w6,xXҽIaT:C]բX[&WXlHC #_SC_WKaCKLyi]⧾*݊/"lM=2AZB2Cm̍ĥU eq6mG�Lỳ_Tµ))^Z:z"C,IRM޽�h$>]6 $ fHq*䵆;i))"ip; My�@ q圠QʯU�ͼ�` (TgS@7o�R2'[ߥK�T4 de ]Ϊ#u8C2?PB �3_dpeh=88Δ5^KeH!чSD e�,y{ޯ5W;k迋(\5q5:/͙<jyUbJ^@'< {[J}I$\ܨ4)j񴤜ySSKN*%u�X?Dx 3C"K,%SzI 6FT^_sD() ZWvj$})MWʰbôQo⫴a]ۈ+Kr$gb~[UZJQxMs˥Eۼʓrˋ8cMuh"X] Kobr  WTLyO7xmRdM'N,]VZ_ ir~\\NRϲc/ȏ /훗sFG9=&ePYҩS3^~X 2^ؚ]C<1c]KC, ֻ@ٲTtZD~))Q541SGqƉP\y]'$ސlbBP*_GF{-PAHNn;R7: ϓǔ* T+I]MAϡXʤ ^?}<umQ!KH9 JiHq^mH՝Utu 3PZ>bv6uRꭒهy+6C1Ţ(Ǿ铟;h^3k\ a/le�::5OsБ&5iO]S<ވRBI X1) 56Ds [ }`B SA*=KkZN5"�l2_c3߰l'z̮i ?3x"r(Y]1҆-ga6Y2m(-k&{SJՐC1~+ǤBU)t)컶^Ĩ!;I@h\:[ؒ Qɽhpț2.R{$+ 7ʤg^hr:`FI҆`} q-u :i)GAe} B!@a,AZu,TiZ+6aQ"Qsf_XU!U@ DvP\aXWt"ģk_Pz)v2Vη_�O<����IENDB`���������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_addpathtocmdline.png������������������������������0000644�0001750�0000144�00000010236�15104114162�024573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME :#C��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;�������������������������������������������������������������������������������������������������������������������������g�������$����������������������������������������������������������������������������ܑ�;���g���������;�;������IP�f�������������������������������������������������������������������������������g%p�f��f��J�;�������������������%�*:������������������������������������������������������������������������}f���fې:�:}�������������������������������������������������$&,��������������������������������������������������������������������������$&,����������������������������������������������IP�f�������������������������������������������������������������������������IP�f���������g��;�����;�;�����������%�*:��������������������������������������������������������������������}ې:���������f:��:f��:}�}}�������~�����������������������������������������������������������������������������������������������������������������������������ȕD�W��������������������������������������������������������������������������������������������������������������������k�e?_�����������������������������������������������������������������������������������������������������������������������������R: �����������Ɣl�Ɓ����K������������������������������������������������������� KP�����R_Rm����Ò?�d7}���� ~~��� ����W3{�ٖ�lEi�&�Mn����g\���������y���fv��������������������������������������2&������������ �aG(�<� ����c_��K���� �v�q�w���������������������������������������������������]Du͛ƀ�bEG����������uN�8}�n��������������������������������������������������������������K3ek�1"[�����,R�q�ȃ���� ����������������������������������������������������������~d �}�o�q� (�,M�t������ � ��� �� �qjb� �qib� �pib� � ���������������������������������������������<�b9~���� {gednlkhfe {������������������������������������9��������~~�����������������������������������ǁ��������� � �����������������������������������������������������������������������������������������������������!������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������aэ-����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_addpathandfilenametocmdline.png�������������������0000644�0001750�0000144�00000010236�15104114162�026757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 9D5��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~����������������������������������������������������������������������;�������������������������������������������������������������������������������������������������;�����������g��:��o$����������������������������������������������������������������������������������������������g�������$���������������$������������������������������������������������������������ܑ�;���g���������;�;������IP�f����������������������������������������ܑ�;�g��������;�;��������f���ff���::��::�::���������:ې:���:ې:���f}�f���fې:�:f���::��������f}���������������������������������������������$&,����������������������������������������������o�:�����:�uI�������������$&,����������������������������������������������IP�f�������������������������������������������g%p�::�:��p%g�������������f���:f���::��::�:f���::���ff���:f����f}�}ې:���������f:��:f��:f���::���ff����ff����f}�}}�������~�����������������������������������������������������������������������������������������������������������������������������ȕD�W��������������������������������������������������������������������������������������������������������������������k�e?_�����������������������������������������������������������������������������������������������������������������������������R: �����������Ɣl�Ɓ����K������������������������������������������������������� KP�����R_Rm����Ò?�d7}���� ~~��� ����W3{�ٖ�lEi�&�Mn����g\���������y���fv��������������������������������������2&������������ �aG(�<� ����c_��K���� �v�q�w���������������������������������������������������]Du͛ƀ�bEG����������uN�8}�n��������������������������������������������������������������K3ek�1"[�����,R�q�ȃ���� ����������������������������������������������������������~d �}�o�q� (�,M�t������ � ��� �� �qjb� �qib� �pib� � ���������������������������������������������<�b9~���� {gednlkhfe {������������������������������������9��������~~�����������������������������������ǁ��������� � �����������������������������������������������������������������������������������������������������!������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������hh����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_addnewsearch.png����������������������������������0000644�0001750�0000144�00000010214�15104114162�023713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��� pHYs�� �� ����tIME  (Hs��+IDATX  �����������������������wy{�����������������wy{���� �����������y������������������������������� �JJI���������� ���������� �GGF���N0U�+6� ������@ЫGz�h�������������������������������������������������l��sP��v������ �-R�sP�|dG{�g�����������������������B������� ����������������2gH�����O�����n���gHy�c?s�����������������������s�RRR�ihh�AA@���s��������������I3W���������������������I3W������������������������������������������������������ �0 ����������������������� ��;������������������������npq����������WX[R������������������F�����������������M���������x���������������������������� Mfke� �����N��� ���������� ���������������������������������������������������������������������������tux����� ��}�����G�����p����� ���������������������������������������lnk� ��������������������� �� ������������������������������������������������������������ 4�������������������������������������������������������������������6��95����������� ����������ֳ���������������������������������I����������npr# _���'%���� ��������������|����������������������hil�������������������������H�:���������������ۻ����������������������lnoQKIH� ������I���\����������H``_��������۾��������������������oqtLCA?������������������������� � ��� �"#��@UVXP������������������ L=;9���������������������������� ���� �545�J����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tux����������������������������������������������������������������������������������������������������mnk����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������IDDI����������������������������������������9:9��9;;��000�����''(��������������������9:9��9;;��000�����''(����������������������������������� � ������������������������ � ���������������������������������^_^� � �������������������������^_^� � ������������������������������������������ ��������������������������� ��������������������������������������������������������������������������������������  ;�������� ���������������  ;�������� ����������������������� ���������������������������������������������������� ��������������������������������������������������������������� ���������������������������������������������������� ����������������������������������������������髐����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_addfilenametocmdline.png��������������������������0000644�0001750�0000144�00000010236�15104114162�025417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME 89Ox��+IDATX  ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~����������������������������������������������������������������������;����������������������������������������������������������������������������������������������������������������g��:��o$�������������������������������������������������������������������������������������������������������������������������$���������������������������������������������������������������������������������������������������������������������������������������������������ܑ�;�g��������;�;��������}:���������:ې:���:ې:���f}�}f���::��������f}����������������������������������������������������������������������������������������������������o�:�����:�uI����������������������������������������������������������������������������������������������������������������g%p�::�:��p%g�������������������������������������������������������������������������������������������;�g��������gJ��:��Ŷf����Jg�����������������������������������������������������������������������������������������������������g�J���f|�o$���I�f���J�g�������}}�������~�����������������������������������������������������������������������������������������������������������������������������ȕD�W��������������������������������������������������������������������������������������������������������������������k�e?_�����������������������������������������������������������������������������������������������������������������������������R: �����������Ɣl�Ɓ����K������������������������������������������������������� KP�����R_Rm����Ò?�d7}���� ~~��� ����W3{�ٖ�lEi�&�Mn����g\���������y���fv��������������������������������������2&������������ �aG(�<� ����c_��K���� �v�q�w���������������������������������������������������]Du͛ƀ�bEG����������uN�8}�n��������������������������������������������������������������K3ek�1"[�����,R�q�ȃ���� ����������������������������������������������������������~d �}�o�q� (�,M�t������ � ��� �� �qjb� �qib� �pib� � ���������������������������������������������<�b9~���� {gednlkhfe {������������������������������������9��������~~�����������������������������������ǁ��������� � �����������������������������������������������������������������������������������������������������!������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������[U����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_activatetabbyindex.png����������������������������0000644�0001750�0000144�00000010236�15104114162�025141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME U ��+IDATX  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������S�\�,�4������#�w��������@�����������������������������������������������������������������������������������������������������S���� ����������������������������������������������������������������������������������������������������������>������������0������������������������������������������������������������X����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K�F��9�Z�����'�y�X�-�����������������������������������������������������������������������������������������������������)�����a�������)�����I�����������������������������������������?z�� ��������������������������������9����������������������������������J������������������������������N��������������������������������������������������������������������������������������������=vO iP;� �����������������������������������Wh����e� �O�[0��y�e5�J��(.'�������������������� eN:� �����������������������������������Q'����������(��7�����,���2&�U��a������������������ � �������������������������������������� � � � ������9����/���� ������������������������ ��������������������������������������y����������������z������������ ����������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D�<U�� ������������������������������������������ �����<TH�����������;]r�<5(�� ����������������������������������������������������������������������������������>9)�r������� �UN8��� �����������������������������������������������������������������������������������������  �UN9����� �����������������������������������������������������������������������������������������������������������������!��������������������������������������������������������������������������������������������������������������������������� �������������������������������������������������������������������������������������������������������������������������E�����������������������������������������������������������������������������������������������������|G�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� vTkf׋����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/cm_about.png�����������������������������������������0000644�0001750�0000144�00000004100�15104114162�022372� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜWmpT~&lB1| VacGRpTP~(R3gv:SeZ ũN @DA&!&ٻٽ=ݸ,rgN=9=9 S+ES(ϛֲ=! d{'k?kLwU]yRh aEs.UaX0MiaVP#jZt;/N�yC3. x=-k! 1k" Fr8yq?׍Ъ 5 *3q8.Ob"Î{Jڛpok-, =CqTF"'�P+v|-@CIo_@|:U ɂ[hXU膉 {:Q_ž>O#o>R Bןzl}=o׏}ǯV."CO>Ys) t(6EW$$tKu1Kw;;aYXGp(*V dOgt ZDc,9@Ƨ1LY-ZNuw'f˭jO? ,oPp>ca yӎطg5~H3^{쀊Lx0 ʿjdR>RΧ;wchLÿΏRVw|7^ qĦhk }erN9잎z6~ 5|>Ewm^TY?{&#GOcy JHG6�dO۶=6Ł$n{x3/Z/yuqk'8ÑHK6E]m�ea qYj*}2N]"zQH%Ja 0�E%Z~-Gkc>1˿~�<jkjR2qY)u+!=^sb)<֋2 !6PNU {Lez+/|L!v-{rn&(i!A¦\Hy6d j,'s{*p߯ΕUusNI:]7J b/F&I,LRQomn'眦eQ̚M�!JjӱX�,'a մ   *bt> cn֭#C: o02h<%~,I "%H^,$Tz1L!P9i}l4Bbt h NYIbZ4%n߄yI1̥6H|6pj9ͦAIO|Qe.^u1}n-83ng|>F/$5 6w!I*dΞTzI8oYgH$4L?C6ٶ#8ٚK\|F+ڙR}�~G.ŨBl|rο{%f<s5:))ێ&&|tS#tv/ u7C3g Cظ(ӂP]ЏG/]`$Fb 3`-ⴲf`Ӫ:6GHKGu)9E.Oj*x98хI20;yv-n⑌Lu}"U)'氦%P93Q$gSGgJ'8MƧ$cvn%$\(5 O˝΅<1LiPvsbi5v$fkPK 7Γ=Ifbcw~tĸy'im}e%QO:TIxGV;rR$[ C130C'o$Z</aB$<ڿ_J%Pᅛ'd879QjLjfY\!N&?zݤgdv?L G2j%^ŭJݏoJ d%='#\$74 # oDJH$ixuQQjb˕Wf! 0�<7L����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/choose-encoding.png����������������������������������0000644�0001750�0000144�00000001515�15104114162�023654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs����+��IDATX?H+YsEDC`}Ic|6U6R564ͺZZڮ`"D}vaY$"ȈO'E b-<yN40=0/l\J+ vJg2l6.0?/԰+t;#L YዡZ9_ضQJ 0 8>$&ZDGFF~ns{M<Q�0�gggoqڃP(:ָtx!ҫS)e[-t@kiR)r&J) py|jZ#p(,"quu&'''-@;VVVX,R988`rr^}msss�uabbe^A IV*}XuL�=XEXDD"q}R>ǫgq,bzz\.8>g`;wY*BBF_[!JEJjՓXY=,T0xj*ms{{#x ]]]loosss5twwN="D^k[a`Aڻ ; �?g DRe H$!b#߃w_�ֺBipq@)B|mmoqF|R.{d2_R6Mu7!;o}Yxx����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/32x32/actions/application-exit.png���������������������������������0000644�0001750�0000144�00000003230�15104114162�024056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���sBIT|d��� pHYs�� �� B(x��:IDATXMh\}η ƶƑT0&'Q0V`hM[ȦU7M'fM I?tQhCHƦ"""nbۖFo׽f43 =p7ͻ?̽ 5 \' D:~EѵY u]\Ƕ1 FJEw޻�Q]񕟲H"" C(JGH),bիW?ZyUQ 4M,BJ^+PJ0 ǡ\0M !D P*fn88XmH)ZwĴ8CXIJڡ7 #@T]\qض *Z*ض8Q/:3iaf p'H'Y`w /1! TG$4C-4quS'mn˲zI<tB$a`&BR/6i84ٜ&Y`/JzS2?vo1vd%nfaP OӓWXh2@255ۙpk/OvwA)OB<7�Oro6Gȑ#4} >ss?oz7oR8wwߵ1 Akt7(ƍT*fggq]wrmO33;}@K#v h )_08qaFGGrܽ{y}>}a4GOh`YmI(yzЛJٳgYYYAG*?I嗠¶4"R;`z۶assjcnmNL,-", (C6 h ,Bm"Ы~zz8i4j ůfLBxf@1rgxc?@oJ%ܺu ˲r:v"g?-/G3g0 ESMCy hX>K}"O}!w|ɱ1gk>p0 D@>zbҠ$ (Xag?g* < RJn7 CÁ�1 b&KKuj'=<;˽~'(W@i^1p;uhI3kyQ{.)~m--%.ׁ� ( ! Cb@TJS0Mˍj?GklZo �r!n'TU\%qx \t?Oŋ !{"C0 <kk-zɓ')Wʸ�(L4Jid>j՟�7_+eVq  AG27)%<|2vɡCh6wY2c<15Aa6Zi($_Zk@H;9�귔%8aZR+vY|@Z�C)*JnjV;Eq!R?9m~ѵ~AΓfBc;~�x7ݦ3cˍc\����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016442� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/places/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017711� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/places/folder.png��������������������������������������������0000644�0001750�0000144�00000001264�15104114162�021675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��{IDATHKTjaJ&}&]pCuEAE\MA�"H63Ķ1{Cե 7ܟӧօA'QD/h5Kts(y੝nwi"<")fkݱ%c!xvuw_-M||dݍI`Tng=I1'k\#\:QBQke&_up9>>El ׶ #O損'S p)%,)?01M:l42 s0N=D^@)cS :(:t`nJs-6Pf�)eG\:O2xbќqn+駏9NjWJIlĠ �y}�H6"hPl/.O)hiP9xl*7 PNSwv>Opv_["0�D5PaO5t(@Jf)$x֭DY [`/`UU¾/mسٵf19y>fzfUڬ;djeg].Wꗩ}r]w3u@\Qf?Nf?#V����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020456� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/x-office-spreadsheet.png���������������������������0000644�0001750�0000144�00000001425�15104114162�025173� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUMOQ=3-~@h;ӡ`4FJ\J \�FЄ Skt ˔tka'9y}s}Gw<EF1F BïT嚿bM%rH$8v];;;4N9<:s:23 1]i:n㪁gޜĐXzVKLq2BL&AHHu׈ YQ$kT5f>Gd4 BlhO|F~<%~9Zz V 5Z.a:x:O6Lz[x (j F\6Bz@`8n3lUfvʪUxsd;| cJ5GJ+fVbŦar\*'t T_Rޅ&(b8@̝w0U2)P"1ˡZ ]unPjSDP{[ ( Ew.snwwh''PVUU)͘ҴE6;i/H$ M%) ȁuxt4I)ܫ"ؠT5ϼ}}m*rQT^ZZB(8eE<o!tXyoDq<=F̞roZ/tE P%c(LS)f%Ea!\�~e <V-����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/x-office-presentation.png��������������������������0000644�0001750�0000144�00000001351�15104114162�025375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKݔMLSA}b&bL Ɗmz0\  W?qd  "=y -$61MK[^_-:x[L䤿dnvgfw ylBsBP]{bxx Wv&m Zĸu*nM+JqîH%�7Tu-6(Jo޾ ݎ8(@"@GF@,@Hkg#KAN8hwy|ϩt*�mmmQmҳYhz ӗ/N>^|JVWW’! 898HÁ ^ �O" v‘1OKL>~̇^[2!ƒ\.L";NxANNg_Td5V<w_E"KcXY#J{&͵1.c9U9B<BAZi<}c+˾?%dE-b {SSSbdefֳvX,fiZ}=4:k!J%TGcdz&6ۤîK X?2# /f7Eb̊ELP0#s̥\Nʼ)sl."̌|OHhȊ-_oHm����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/x-office-document.png������������������������������0000644�0001750�0000144�00000001254�15104114162�024502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��sIDATHKUKo@ V*qCጢP .\8R8Az  !%$~ĖdUOI_fwvvg}8Cc+Q,7υB ༈]B׃v mc`[Heq_YbGq Xe;oDihBn){h,6n*NG`s6Zb6_E 0NKJ"}UGr9T?bϠjA*mM_k&<z|nmB_ {ڝCm#&fR&Ehp.nֺ|o0OIB,Jk~C.ta: ©+\e}{<ue48t~.;{R} cT*F6>-y/r}|�^>{gmHt< �_#(aOPQRi[&d2YUSKNP׹w/~/ܑ;;H4MbC8#GG'>t[BIQ30jP)9C[xDxtنmWXR@X|MDt5Q$E|c߇2Uݑt&!T0"&;Aˤ/)rWxR<q_?L -^i����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/video-x-generic.png��������������������������������0000644�0001750�0000144�00000001512�15104114162�024150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUORQ QZ*--)m[-f{DڬZ3Pΰ~= ^=|<9^GBWWW4HQ"$$dɤ9Ae%IXf:"0j@` Tڦ>�H=6": } 3Dٜ3(bzzw!}x/G'[ۧ뀩YT>M۱NUY((>y+xn^k7D( X)ӍD"?1<fBʳP実~Lù 6+j /2 b} rti$./"3fg)Zlnnadd ɯFM)jKnw3}> !Rz^"\oxN hkG]=Z.l\3hoosuǮ{~& U Y nj:0h"v@QXut\e!œfm\V)Y,COQ[,UT~Morg;  zg-ʛj4uvvrfT&orKZ  QDmd|]zQ!8-7^-#\gҙ#]"x|?˒$?66OtEJ1i>Iދsbs[`eyOҴCׁ( Q䥂h,Hd>4ZY_ANSCP?dI����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000001373�15104114162�022667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTKQfVI\!Q21!$"W!(}+)z!| T04"amET`3;3tιwmS}3;{νsZJ"zzzJx6_ik]#<$ W,'uu s38K8;8W ʑ&D2�Dr~;i:7@W+]\'OM2o1�F4ⅫbrΑl!lMye&"T̀6H d4cS5@W")^ڋFyiYB1`Lwgc=Zʊ$FZ]Tf3! ʕb<wٌ;=%C*NE,:}}m8֊b(B҈W` N@ 466X8.pUs�fSQ/?h3%W }A@BP?,׃gnP[a*PIGFFdĄ?^vaDy0J&>GSQ6K-QficTUa:k>]Rnqy �BnXv5P{4<$c+aZKdMw;pD;}*+MNt99Ԣ'-/0 PM*!<_>����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-po.png��������������������������������������0000644�0001750�0000144�00000001730�15104114162�023032� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUMlUv8کi $R)^ZU5Q8 .cUW$"Nph~ U q ҴE)8vLgm޿Ǽu'+z >iv̛y3{Ce>�8I14:Na4 uPFx4Fj GHGϤIԁ_t<EtiA. fp]`z2LW,_ L\9i׾H0|U1^,Zx:-NdpJC<9֞܅;"DH3IAj=)ƆlL&#Pa˶!H">SC/"X^ b�GL`<.-0W`Z.)M0υnZ-TKI<+W!*K�PyQ<|n>M0ܼ4R}SYN$;2@k bL+OanB ;-m"N^ʕ եBdӨF00wI,Lφ#;d:,qӢ;Vg%.N9Vpu6'_+~<Wg_:<SKc*R kix{ dR 6<z\7w%+^k~OhDP_;C":p&q2kd!`uu50~ "t Zp!8ھz(-\X}ʶ,뤑} C--\4[hޯM`h۵ |t]gfU*_m `{ZE'/@'p>3|aⓚҩr ^;O@#2@r?ܕ$KSHRP,ܹ�!GF/QB�h>����IENDB`����������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-pascal.png����������������������������������0000644�0001750�0000144�00000001452�15104114162�023660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTMHTQ3 e kοHZ bm" 4VBQMDоQ+3UX -)(cƙyMv;V Wy߹wwϽះ r7@ W7 F^8d iT* 1I5v9-s(fQ^6).l輪Rx20@ 3< o %%òE4Mȁ"R/H9qrhLsb*I6 բ-fTbi'rO)ShN[]CtjmލT`l$TӌphY@E Loq3 hN_ :hgY#Wu5;p[z(^Y+ }=Xz:黏8}, w <[1d>š@*5`hA) $o{ںڹD.4;�bK::_^<tcd`δ"|N^u'tWTB^tT<'le 'moWCblxDiΑǯ_rTm߅7p`eehkhla~b_i9܆U֐wޗqiQR iB$a_2vqc8C(hlId*Lgcҗ^_1D"]Ry 8sH$H_b1OJ>1wMY)[i]4ir;`1EJ>Z`dt+ L! -_,2O����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-lua.png�������������������������������������0000644�0001750�0000144�00000001363�15104114162�023177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKݕKQǿI m!M ᤨ.&6SwC$o"b%(SvU v$5"؈00ޞsv޷={~<g;?Eh&}uu EV CIEF:EB˲s:PLq%Za \1+ۏ^\x$"ZF+'-|Zq?nZq d>We4~\n33rkWrڅ"~m -o[*iES崖&Ә7>zKqSsEXؐ7o`*66d44=TdCK?XxMĀju=קs3.1;LO}g46fEu8)k\ql^F P(0E#_ 19d+O vCChicl̃> ݹ�UUd%F1n-^8$q.1D"aDQ-bz]WU 0z{{|>tz<V~vK$:;ˊ׈pXnFe::"V a|qݕ0=FZ,@0AWWlzNϝ|CV UdnDgI II)~%k67݁ {? +6EL����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-log.png�������������������������������������0000644�0001750�0000144�00000001242�15104114162�023173� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��iIDATHKTn1M J n\ ACB^P(@HhKzibfnk ROg?H,YqVU[6*.6Y[ARHSz}JYM90U%j6K~Q1qXa 9#g߿ }DصR ;.$I%z}W,wN}rkQ  !\Hg<ÞTdU80CHG뷡XR,M:_kO9|Ru77qDYjG3G"t:",do?~%nѓzDFg,ZmǸC ϵ˝"I=PIE?>^>Y Cx7:u "d`O`|13@e[y.k`0`?صm;5&_07#qZ{(OON.O(k/I"T""I;x$ 7�o5 Ớ ~nĝ:?:8pUӎsPIS”�+&N+ vv^AW?ڊhSgww} pK~{[#�\V����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000001232�15104114162�023334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��aIDATHKՔkjAB@z-@D"A EBD Am AjI !/=9=sMn~}ٙ]⾔|N$  j5 p{{KJ%ϠjBB7. ~?N2灿GPשd2TلvMעLSX,^/YSEQ~N(FBmc+ &;ɀlb?@ �n09L&D.s?srvvF7`SH<H$Bd݇9`-@!pzzJۉD-j1d\o} 2Fn/X}G vzyyp8Lj Q;*pJ/J?<>>B0lR 4͖ͦ|*>b"m a{pww'''0 T*#Jါ+Zf˃FiZ9kǺDzD*җtmȍvZEv4V+ISU :^'>.O70JtJ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-x-generic.png���������������������������������0000644�0001750�0000144�00000001242�15104114162�024026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��iIDATHKTn1M J n\ ACB^P(@HhKzibfnk ROg?H,YqVU[6*.6Y[ARHSz}JYM90U%j6K~Q1qXa 9#g߿ }DصR ;.$I%z}W,wN}rkQ  !\Hg<ÞTdU80CHG뷡XR,M:_kO9|Ru77qDYjG3G"t:",do?~%nѓzDFg,ZmǸC ϵ˝"I=PIE?>^>Y Cx7:u "d`O`|13@e[y.k`0`?صm;5&_07#qZ{(OON.O(k/I"T""I;x$ 7�o5 Ớ ~nĝ:?:8pUӎsPIS”�+&N+ vv^AW?ڊhSgww} pK~{[#�\V����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/text-html.png��������������������������������������0000644�0001750�0000144�00000001554�15104114162�023117� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��3IDATHKݕ_HSQǿMOP'|'Azǂ^z!z$!2 S!8u{;n?wT߹s~eB:[t7`Eh$h4XWɌ6F6Nev�miM1G/8ӻ '?Oh`4@_�wLhuT݁o.H2d8i`l>^opU 5y?P]Yؚw?HN[Ȼ<<y?\uP_FQB)�seL.T dZlDMrZ h<`^fRȻX@cU)f# 1 Q! J <\!TNJMX!U L1 E]" .IN5vkcb֋g#?jԉtS5G2c JSD^K5шwN.`l·NjE{s�h`WNU`JtQ:1g2 $ZCx~xtk(" lbJo&%( yw~EQ rc[y'ov.Eۅ"q@GWW:;;qC[Ij*b:AM\1l(T&# OT9PFL<mU*Ʃ !u&G#bʪl\$eCH*$+b .Pʊ T � a>����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000001244�15104114162�024437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��kIDATHKՕoPUG0`AHHLUWFX:!10Ăؘ`cB R@-/Cb8>)E‘>_>~;[`Gx�8շSsz\` nyMBcyq7N:jZ`u}M3 p'+k2xh;M݀Tz2XLqn# ~2 6z[g0u]pP ʲ HLpϬfpAI^5x^lEd:p(@! 94DQ<,ix|<s.N}t!NR;^~x[;&X&^NA96^LwDzdGnN۱`@/{.k!"q,kG&v@iQx4YhH :qX9hDKd@SF$6J̀kmd@(1b5nj#mLf]PhfZMH 9{ 6`jl|p+%.FgL&ioXFLJ"g6{ۃ9H8ʯ\TZT3iR=A"Te@ZIH,Msl**i����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/image-x-generic.png��������������������������������0000644�0001750�0000144�00000001630�15104114162�024125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��_IDATHKTKhSA=/^EE)U(.JhQ,DqV,ŕMյk7E\(ҭ".N-TJJcӴiyjQ\y̽3sܹ3+H_FOw >tص,Ku`\UUܼuS(Cm[x=~ECa`x}~{:#%s nމH$U6eX#hmXοz.b"KȤ lZ)lþ.2IC |47`6*"yˆs#к f:3UMH'< Dt!׉1X@Z0BvF(d,rEF*v4=##Mf@$A5M*mc'͸3 &$)3Bd U'- S7@#ZY έ:hJ|^A}vo#3ڈ5fZ|DVjy /O`1OwߦE!ײ 3&j L7j8*sUT*UwMR]]q.Fݢw!!~|DA- Y#Q]!i" S-:J.H/+Ctzdq$)dL \ V݀5)p:g{;ތxdüwP*Ć&.g9niW<HߠmrO~1GaKxeSt\/< p<?p}*u+ ­J| ȶMZ&Y5"M7  .4fLb܆so Xj7%RL����IENDB`��������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/audio-x-generic.png��������������������������������0000644�0001750�0000144�00000001455�15104114162�024151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKTQ7~1~2(*:SRAХmt7jpӪm je&4e: כ͇=ΠVw8g== <44 ###!7R4I]}L i2Nf^^LdF3M9Q&@$O?K#޵S[ ᬮPTb-訫;5^Mdà$E;"+K-P[pw8OgD8d44T±A<{ KLe}TP,,.[]-Nt"CYr:5ҲDILerqZ(8y +aLs7Kkk+VVV.D:Rnmfg#v ?H$;ȁm@|rF'#ьj`kH;&b6̬MAQtäCuǖB]" eOƿ^~lplti~?24m7^bY06w!d}&6~8]b):h%|j<hW> ìE9s,^LOI%8pE׫Gp9Gw׼�0`ղP::W{n~3WpnuxdRz$3s A.#v0,5nP@8l5jMg(7(oAJ_pM 2����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-x-shellscript.png����������������������0000644�0001750�0000144�00000001312�15104114162�026263� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTKoRA`$6PHtW~F6j'&vYtQn؄`EҴ&P^9-IW%;3p)$r/>spbp>T*jdժZX|Ŧ];ux'v" 0 nar@eYd2J!<F$rv "l;qzzd25Br-Ԧha![KKFavlv3Ә cl:�~Fm�l>xNbjVT,!͢P(RHm0[϶J"X%62N(\x_bq&6l-4rx=~o2'#EȷQhQJ~.1Ilotb\X!;z˷[ sE i;۴RfO]*carrme'I iO`0(px3 M _^Rm�׋t:-> ڷX,&(8�_Y~~S.Y6M~vU"1@LMpZ4{mhIPJJrRT�sȄݕ �~2FSG����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-x-rpm.png������������������������������0000644�0001750�0000144�00000001554�15104114162�024535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��3IDATHKUMHTQ>fޓ5Mj!(jJ. vfX sQDn*ک" mh~6Piiӌ3vy͏3R>{ν߹{³W.p)` InnMvDLUsĥ HlBhDx|?d`ȷ*eY X-k`V' 7z]K$ao"Y)LT\EuMQ>Kkf@U34Dg55Ris�=hv{pe� ;CPKi-rHM,76hvZ\]VyAV| y&o1Ô&2j mD ||ն)<k|,*)N[7_ ӯ," Euc)2us @:sIh!94f,9n鈤AAI3-�ȱ4-fZ�+E;I%@Es Psj䶭壾 etO:EuecCLD[f (VF$)2?Ĕ=OΊjFgN]O_nV֮~K@оrx[v(IV~[L~9'l i׌N V-=|l{!/h% :P CY44zeWNMϰ!Ð 5C[)1y5RX7\$MJW FHD#`-HZIڔwބL]=NaCvƀ<7g}����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000002151�15104114162�026052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��pPLTE���6HxspyzfsU^~bl6Gtdrfp7Grbnltenoviouy���&3Ujo$.J������������-mp-��������������������������� mo ���������������������������������) ������������������������������������������������������������������������������6HxښÙBbĞŞůDaơǢǢmKfMhȤȥɥɦʵRkTmʨ˩˩^t}~ت̫̫ͬͭοoЖh{i{ͮίϰzŰm~oqrԼղѳѳҽ՝vwuwyЌt{˭}xy׿ؐŀȊݚªʘ̯߮Ξ���Oh���_tRNS�6 #2 $BR1( )7DaqTI<. +;L]rbRA0'FS^caWJ, !#"_Q��IIDAT(c`�03bgb&ϒ)ϖ̎.ϑ*ϕύ,ϓPPXT\RZV^aK(oh0 $T75wtvu Be'L5iӦϘ)!2k/X8%KƋ_bU׬]fxIR7m^e;vJ#A22vٻ/aYdqC=&*ΠtS*jHZϜӇKƛ7I;8:9ǻ{xx5  G."2*:F/6<@��jlIm����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-x-deb.png������������������������������0000644�0001750�0000144�00000001607�15104114162�024470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��NIDATHKTMHTQ>oq4ZT-" !E&P@DȠ "eDJjQD(զ4R Gqƙ{sλoɑ {=E0wm |ҴGy\Aá;0BZ$ץAR`]f3]n#]RQgNܘ)M`OSyb!0L61<JVIghf.iQ T5  k �,%m "7 N0Mgq-:n]!m.Ӯjvv'Tp{py|K N=HKе%0LmFVNv܎P &Y[>kBazH4eLM\G$M㘰Irf|i,ؔAI3.�FOr8mf\�D 'Q3В}hg7vom[󠯳pUZ-i/n-2SP͚;PL'>i0y_ቬtkʏЃFm#<_v9^3!;@#~�XIN T]..ۋހWcr}wLt`tʏ; 0etIOH=݁..pҪwʼnPC!>aoÌ�eu<rE}ݭS)>~gJ-#›j(dV6R<BM.Fl]IfПI|r�j0f$kA"MҦS?nFk ƀ�e0 &����IENDB`�������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-x-cd-image.png�������������������������0000644�0001750�0000144�00000001533�15104114162�025402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��"IDATHKUOPvmls H �Oe#ACLTxPD4FP رڮ?] Ó~ٹ=|ǽ瑈ty?^ sss~O\g?t00qK76;;.`${ b O{,>vلOOh.:xz\^>TJGiBvH~O\�6Зwq v]lUpȦHR##1}:Љ/v:.֗1TL@Nx$rEل[`Ri{ERwX_q_FǢ900] 2m4MrX_ىVw"=4Yj<LݞᎊQPpWVwKYYL  ӃPh۟P0^5՝%H$, UȀ˂aJ%d2p!JBWc7!H QJ"R87 >"Q]]*N#WHA  J1nVFje5ZPE,d7*Cn6|ϧ~"r2�(4 r" *DC7Äjvv696-,;IcsR{ juBM":ݴv.E'/SSK2fbBUM rFRy|Ѿ#㻮{m~]s_Vp;`X S ex aYm( K D :r6]o؃VX����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/mimetypes/application-pdf.png��������������������������������0000644�0001750�0000144�00000001721�15104114162�024237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKhQ=3|̧IS`QJAg Mm_A-ڍ W* .ԅ"҂BW VVlcLd2L2<{yi3z5/ν"W1&Q\\D~fS٬;['H}ʾ<}r2tmeYV.)ը$*pE$'&*TB!iH*@ y+(&,#/4Z[QN$0w~D!H')4eCQJ**گ_0~ܸ_s3z44b(Bn( •`8rH^'?@, Th�=u_Knv<zp[~^ܽ{Π |?:d2*ΫN@U G ch]](y�_&X<&.l5ܕRJ^*x_BjS �_>ãz H\}HϬpJ&p(z*¦g;Gϟ5|^ >ۖШ6"* JkB8nnDc3'O޽9sF:Z5\ATQO7|{ӃI-[}ZjՂ'G4e1 8^/5W Hbswك'Q :h•ߖ߿6nD-$FFeL>{INe6ݚ%\a6wljh-Rj/N :5PD)ǹ۷pJ$rL x!]+M>{4<cmh<=UWT:>.ݍѣ?428ͅI^ u94;9}ŏH⡣Ե$L n *dۿ ?6`G����IENDB`�����������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020066� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/emblem-unreadable.png��������������������������������0000644�0001750�0000144�00000002747�15104114162�024147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME (�ݺx��IDATHǽkUg̼sٝ4.4-[?fXQ(ZjHd`Q*"d} [ ~ RfiRwwgv^=}\D%#·s8<ρ8.lthUY*!U6B_6*aAP CB:,# v9o+1-HD M46&Ztua$Eɝ?O[{{]Rv`&8sWfhQ!n9S|9FSB^kuwsq+y|Gy*DaG1C\ ZP7 "~0*<~L$$ 9ა 0DuuZۢG Z8>5 N * rèMc2t]G-N'hy>@H`} i]O2\)*vù(Ӻr%ɥKfDH" 0F�Qs09)Kc[h: 3g|j\ALkPaBM72B4!Ϯ}E@/ǡV"P$ǣhc:I?VO)`p hFb&͑-@KgpĆAQx .q*`C?D}['{i95"?Ͼk0.'e[A`�4j�E Dﭥ9nw6<&X[AKb P3e*x قBChhm 1cRppXj57 6 +6x8\PL]o'bҤ/@�ӟXuh0G_ 7 8 ?9*]3g#1l??y3.!}v/B˘ R-lR ,S H(B 1~2Hr\~R_o@Z%8f إj2 7;Y@qLCHeqm\| ޥ$P+2!X3c0Ip@B4l= :ԗ`b%Y !M(.ѣ AKO`'oonv~ MlV vss-c]�s�F.V(h%dihĥPk4)(_+(lyG�QTSh1>h."!k|ۅNmˏ׹ a0(>p2?'O5YS Q$`$!Jެ*֪lS ���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000002206�15104114162�024607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE������---111111---������EGDLMJ���@A?QRO���JKHHHFDEC���?@>;;:463//.)))###(((---~~~%%%������FHDKMIPRNUWRZ\W^`\ac_^`[Y[WTVRPQMKLIAB?FGDYZV]^Z\^ZXZVTUQOQMJLH;<9?@>DEBHJFMNJQRNTVQVXTWYULNJHIF897<=;@B?DFB\]ZNOL@A>453<=:?A>BDAYZX?@=01/342785:;8IJGBCA9:8675++*./-120452786%&%()'+,*-.,ijh665 "#"%%$''&\][NNM/0/$%$ TTSFGF>>=))(!! 554<<<^^^���2q���-tRNS�!PRSOӹ<>?Nθ;#Vf���bKGD�H��� pHYs��v��v}Ղ���tIME (�ݺx��9IDAT(c`�LXXء\(,ǯo`hdlbjfn! ($ `071wpJ89{xzy{H@$Y| %T* J'%&%SReiY2d9y49DQqIiYppyEeUpui<\18M.?aɊp)SL6}̙3;fM:E *�S@ $SPBBUB*ʭT44<Bb(@S[0 .@��rqi:���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/emblem-cloud-pinned.png������������������������������0000644�0001750�0000144�00000002654�15104114162�024423� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��� pHYs����od���tEXtSoftware�www.inkscape.org<��9IDATHUKlTe>xM_ԂPV@qDCR WB+ &0&Q#4L$ĨPP+DЖ2ә;s\&bsms{a/q�Ri"�~[q8�R6_m/:@Ԇ6Z�Ѝ̴ѧ�׆` F摷ƛv<Ԣeuk!�)!]ܥG'O' ,݃5{7uлaKaO@Ne�*TbQ2˔pvI?:ɏ/▝떯ߔ tspA8\atsIpYGHMd>Ѡ.7od/ =Ge7b-^ysYk0K yaqygmrWۙU_0�@z ymϯoQG+p By24-$˴EYrU䭳ޠm/:4{{E O|r"W.avx殗u�j_V d8a][=E<K9_a89x.-jqf,:�.X 'bIo� ,]FC,6NW^*;YiKHuVCb?]:IeK>_ &B"�B M ፎOގBAmI9�$1U&uApr(!,�[X$ k hu]ˏJ![c�@-4Z6N"I)~%vK J�S{ 3V~� +Sjg5 d`˰mQnav"_\IO$3}r�qʜ`uVÐp�"_R\BzyƯɯo;*ٙ*yW> &d2B: Ө;Z[Ӯj370^W-f�/#4=z%1ؙn^@N\? bcc4uɆ "#l7a8ydIpt6wswF ӳ]MMT,'(3!8&A7`s&0ȸ[ḛ W ñUFp5\a,d"q:k9cAisP*.u7�HLG F` n'rdz|+]4$o6v,lhiF5�i�`; lf"5u)6OH?5wR+P7h^EQ �mt*g7yA`o#X #�"[@{6OL����IENDB`������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/emblem-cloud-online.png������������������������������0000644�0001750�0000144�00000001246�15104114162�024426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��� pHYs������k���tEXtSoftware�www.inkscape.org<��3IDATHOHTQƿsfޛT# #B,McZDZU ! "*hӦZ-*hUgZ֢M &@{yiFƌ;|~߽pj =9w;CN%v av.<yEPwg͢٦FYa,?5?_q@&lQsoNC\csϞ\v@oJhH5r\u([iT+saT[oYĊLx9�YzKgǜf(7^sľU?ԛ7ȮcdrvtnObRoVh@kU �;r]fB_޻$utIa%èg҅rB_#f"Fu'7aFO:S^F}-`=9ݏS6x~e>O+B@l@ zO| m?&UCx7X]$P&_|"9:IpbЊAS%2x,yV,2C@mEW>kԕ6����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/emblems/emblem-cloud-offline.png�����������������������������0000644�0001750�0000144�00000002607�15104114162�024566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��� pHYs����od���tEXtSoftware�www.inkscape.org<��IDATHT[lTU]y5`bhPJҴA,J H(@IÏ#H  *`0iiiK;δ3s9~N;}P\k "̢D�0r!ٞ]FY)Uc�V$'x>w^-ch_:d +*YҒ2aԙ�How{Wݿ65^oCUp'J-ۺiISYa u8<^΍iTHQܙȧL^tU{,~HT-$ R0bq1PJ!Gd5Fd/2d$g/>Nn;E^̹wUy}Yދ HLUՙ!*y酚$9pGP_� 4Mk,/Ad3 B < DAbK^оܸ@Lkb8`tZʳ*7,_Lec8tCޙ791rUL)Z1Z8=1QJg% :.G|ra�R'dK+(sT\5 ت=kԭ�_R֜j0!œbL͵mS3 U=8x]FGcwɎqUlc)ҝ0sh%$굆Q FFP߸oA9�i FF��jx3S$cqzuIINKO-7ȾqPy{��;S&I UDӚDE9 +ĪXxZ{ )"nv='�@LL7B²�Qd9W.P`p29*/��liL7OFC+ힶAHV>}gt_*Ec}`p{u:q�Z\ow`bRhV!ǚ51Q&> 4Z'>uh5٪e,0pv c XQD) ~<0�ro$K5m4D#GdD[SN'M.&0|!킡<ᴎ|#q35Us; ߻<;@}&ђ=|D &-ח1RFF@.tyZvݸۃ 1]Wڒ2Qk�HT70@ڽosFgRᴆ>AA )3ǒWe1F9�$YDOgpUCKpT-$���B&TXTVy����IENDB`�������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020627� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/submenuwithmissing.png����������������������������0000644�0001750�0000144�00000002372�15104114162�025305� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHǽ[lTU}Ιvڙ)@k/FPPD5bCFD0!>c%">Ar*P vJoBLKf:ml:?9^Ͽ:{ h5{I%X* SAE%VhS* O m{*Z ^(E1B} 1?/Tb-bP{VP<�Ͱ�ׇa?r6r^cbw!~բlҦ B qAxQߞA(Jcw@5tն1}0R"(ڟ l{8LcJ N" ^~tR n"EAQMtU73pծ�9Ybz;O@qy)4w�A} F(.A!AQVO# X L}8"1E'%o!w+) iA@wU%~6##?c/t ${3 i.D欚GΣ96>!LɈLBC[v�M'kb{Zl\ue.A-pJVxUHeB^?$dFSװ=<8|.?oX+ 5S9f9AP'8WXeĦqp|~D_Bq|WKZQ&3_]yY S 2)ܼ5 nzȠh@$d6ZS<*z*1v$srЄWtX|T~Y$]3[W7 M$)hsQ"f@j2_K^_KaT@5Evb++PHbn=$.z=!zN<#4u:GO'Ŕ�yq1RJ)kʶJCGeU)rU�,aGQx6lކRo(l噝ōYI< $Fj0ts? hB>+`}BGɝ;X0Tg^NsR7!}Sɞ=Ǖ!008[T:*xj8|-/L+}8e>IENy;sS&qѳ»x5+qW0%XL[<۪͝WryZ;})!&DwCgy8wI'8",KFqeEcd^ ) sKgY/sYP�KxF\x]_Y` +&e����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/submenufavtabs.png��������������������������������0000644�0001750�0000144�00000001635�15104114162�024367� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��wPLTE���6n[Z7nIH>yGF?|*[>o <S(W~"OwNx F}BOaeL`hM5S���������\"8{-T]QT������ϐ5ϐ4���~^)~\)؛?ח<I-���N]'P4��� P5[#}Ӄ݂܃݂ץeeJmnnWIyzdG`˃ZȰ|t74`8lev^at}[`\znRAkSL���g���4tRNS�%%$$==(~&3&%$ +SS![EE[w:���bKGD�H��� pHYs�� �� ����tIME5`W7���IDAT(c`> -YVHʒ *ackg�vNP gW7$F�_?0;G@`Gpr%#c+6.+>(B‰I"Bb@ q I(NNIMKMIA\FfVvVfrn^~^*ZcFYyEy&fxViihVcc��8! ���%tEXtdate:create�2016-01-30T19:53:01+03:00Ȇ���%tEXtdate:modify�2016-01-30T19:53:01+03:00ɕ>����IENDB`���������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/submenu.png���������������������������������������0000644�0001750�0000144�00000002124�15104114162�023012� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUYh\e=w}2餝YbbS-ۃ BEA'BI|oI"nmb'MLfL&l1͝x;i0'oߐH)0-|! LO%F^5�'&,m!b3d 0 d^U�Ɇg YP6xˠDM1׬ Kɟ)ڶ1$&V/G;Kp $mpP1^`'[ZǼݚ^*x:Ղj=[*RGV'$X p(ˆk9rA1z|CLH7HgǩYYWr<^ +ucY+и sY w!�Ctb6>)/4m,::[}_�!چӃ36sTPS)kryK|C^"ې5\fNm!X;j".D`n,G%7/x9#+7i,*a&fс4]ꅽi; )7[e"hj&;r21K13EH*F^rٞf)8f1$9F_[2-p5 =p~5CYZvkنJ =v}Pa }F{oShݎkTFg9q#73?{htV M;^6EeRGO RC ffC6ፔ!;5o9 ,._8rlY8k-0~7?H62b0ٳ MYvv_}[샽{[GEjݴː㼹4Rzťo};;2f߾AoI3͝a54'E[D.ȯ}CWc'|xkP pԙQW(k <?dniS"Gj'*ǦmCT }! : �ґ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/newadditionfavtabs.png����������������������������0000644�0001750�0000144�00000002000�15104114162�025201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE����  �a1R4 �$~&| �ou~{}~{jmfgjcύ~|~y}uwrtvq]_\������������������žy:z9֔SIdL݇_Q\دڣҮȐ䑓歯���Cmz���FtRNS�!3# TZGGonFj*'...15> -573*  ~>���bKGD�H��� pHYs�� �� ����tIME5`W7���IDAT(c``dbfa" @$X\J <<}dd ~P P Ȩ8U5D| $&%k@%a #3+;G(<"-vqIii @%t+*Q@XX&U%P@sK1P¤ %::A(aaiemmA;8:gWF8��jӃ���%tEXtdate:create�2016-01-30T19:53:01+03:00Ȇ���%tEXtdate:modify�2016-01-30T19:53:01+03:00ɕ>����IENDB`doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/newaddition.png�����������������������������������0000644�0001750�0000144�00000002340�15104114162�023641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��1PLTE���pqoefcUWSOO_OOOOjROgOOOO4e6a8`���o:]���Xw<Ut������Cg@B?������m6Z������')&(3>������������������������������������������������������������������mokgieЦ]_[XZVWYUVXTUWSXYRƺWd4e4eX|mү̹ܽ|m݉֊ԝ΋|錧s_a]ҝȚ}߆֎_ԑ̞;j҆ňֈՈևՇևՆՅ|ނԂԁԀԁԀԀ~ӊg~{zzyyyxxwwѐ٥ussrrqqppp}Ӊ׭Ԕlmkkkjjii���&M���AtRNS�W3fl; ^+:(Ψ]] Qdz7 !)/1234,&   2\���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��JIDAT(c`&`t''&t GgpbsYXY`.�~<| '@  KDFECALl\|BbRDG`J*gdfe $"E%"` $eU`{!�Qs\%j:SS[ZZ[[A@]=}&N4YRJ(!9e3Ϝ5{֜_ #+ZhK-_rkV]PZa͛lٲum;vSQUSJhh-mUJ6@nggkloCFJ��PNҘx���%tEXtdate:create�2014-09-13T10:26:26+03:00ț���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/dirhotlist/dirmissing.png������������������������������������0000644�0001750�0000144�00000002747�15104114162�023517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME (�ݺx��IDATHǽkUg̼sٝ4.4-[?fXQ(ZjHd`Q*"d} [ ~ RfiRwwgv^=}\D%#·s8<ρ8.lthUY*!U6B_6*aAP CB:,# v9o+1-HD M46&Ztua$Eɝ?O[{{]Rv`&8sWfhQ!n9S|9FSB^kuwsq+y|Gy*DaG1C\ ZP7 "~0*<~L$$ 9ა 0DuuZۢG Z8>5 N * rèMc2t]G-N'hy>@H`} i]O2\)*vù(Ӻr%ɥKfDH" 0F�Qs09)Kc[h: 3g|j\ALkPaBM72B4!Ϯ}E@/ǡV"P$ǣhc:I?VO)`p hFb&͑-@KgpĆAQx .q*`C?D}['{i95"?Ͼk0.'e[A`�4j�E Dﭥ9nw6<&X[AKb P3e*x قBChhm 1cRppXj57 6 +6x8\PL]o'bҤ/@�ӟXuh0G_ 7 8 ?9*]3g#1l??y3.!}v/B˘ R-lR ,S H(B 1~2Hr\~R_o@Z%8f إj2 7;Y@qLCHeqm\| ޥ$P+2!X3c0Ip@B4l= :ԗ`b%Y !M(.ѣ AKO`'oonv~ MlV vss-c]�s�F.V(h%dihĥPk4)(_+(lyG�QTSh1>h."!k|ۅNmˏ׹ a0(>p2?'O5YS Q$`$!Jެ*֪lS ���%tEXtdate:create�2014-09-13T10:26:26+03:00ț���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020064� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000003002�15104114162�023366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���MMMMMMMMMMMMMMMMMMMMMTTTMMMMMMMMMMMMPPPMMMMMMMMMNNNMMMMMMOOOMMMMMMMMMMMMMMMMMM���MMM���EEE[[[MMM������@@@TTTMMM���������666NNNmmnOOP������������***KKKQQRQQR���������IIIQQRPPR������������������GGGQQRPPQ������������������ DDDDDD(((OOPQQRQQS������������������999===���EEFfffQQSQQQ���������������������������>>?LLMzz{ttuQQQ���������������������AABSSSffgaaa������������������!!!:::������������������������rҧy雛ᐐل¯xxx\\\ڬ[[[qqrҎ]]^ppqrrsRRSQQR``annphhiqqqoooTTUkkl___eee~~SST���N,���tRNS�߉ x ph6_- i$ ` "+Zu,5W *4>W%/9DVv6'1;EPXNOX 0AGLICȶ6 -:@?6}p&23.)7J$! 3|}���bKGD�H���tIME (�ݺx��IDAT(c` 021bgc8i2'87ϔӦϘǏ*!0k_PPHYBd%K-[bբb 5kW.n Wl,)f޲ey>c]e`r{1K:|D&r+O8y30 5u M;{u`zF._u7n@%L-,oݾs>ie wptr~dSg_|u,eBB#"cb>$&%e32òsrs# KJ){T8T:VUGd7HÜܨndޑ`Rhj)ՕE2 u=w>%2MW؉?��kNp4���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000003035�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� B(x���tIME (�ݺx�� IDATHՕKl\q;w< qqT;qBSbHT@ BY@JIQ䬺 nB% B]QEgDű Qc3xa;Sos6΁iЮۀǀ @s8+^} ?s|=ADLjvtt']|+{7 n}Yթ)Xkȹ^eQNX$I3Ǐ}]n&#>ySOry 1Hq5J Kw}-Cvn}z߷ל4̂p\ 6Ul 4auROS傦3gl5)hA2cI!LMladoh7`hm<VZ+3XkPJ"$ ;:|ˡH,Z bHZu\v2m!t:BX0,pE|w 0=?%nL3Z ȉ?{iRjcm$I$;)+?vN^skٱ+ 43)i(oAfӸЇtu;vn߾7Yf6- !<$ �!. ZMi(ڨT*/,|bEXà.;X7WHZ;,|q\]Aj5?[G߆v9@_? dF30B"-p7sjڊB&y\($cm;+5Ś_nTVOE! Ð)|yMK!k֬|iĆ|{'}~/ m]<Ib7 Y4Grk*ػw/nzh|DQ $xF )%¦]KJE0 IDJM6~cV*89ry'loXlC &A={\[4::vs+V]8Ha,YɡC=sG�xȗ˗)o |@u K!v4wR.:p/\j_O/_E$< AB@y9(j<쁗^jZ�?9?6@`3&i5tE<?oV'j4B淊(@JT*y^pٳ###gffZWgi8 O���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000002520�15104114162�023157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���6g4e4e4e4e5e5f4e5e4e5f4e5e5e���������������������������������������4esqp~o}n|l{kyixhvfueudtcraq`p_ݖٮrm͚ܫoi˗ڨoiʔإmhȒ֣lgƎ՟kfŋӝjdÈњic…Ηgb͕fdccbbaaa```___^`~ʑe\rRRRZp^]]_{ȎdRSSĮ\\]yƋcɼZ[[\uÈaZZ~Y~[r†άX|Y}X|Y|n`RRSWzW{X{kfz^}}}vvvWyVyhazzztttnnnkkkSSTijjbRRTRSTQRS4c4d4e���]G���tRNS�}h53&1=3( /L���bKGD�H���tIME (�ݺx��uIDAT(c` dd@X@(!+'o`542F&2@ 3s 4`iEv` G[['g8�J%uxx%%||A~(F%Cu%#%"1qq I)iY9 B8(*.)-+KTT&UU7465w%:R {{k 'L4y Xb@-3 g͞3wHBf~Nvao#PbE.]|JĪեkk׭߰q-nIpn߱pnĞtСA\G: .^rN9{@r2\KW]a&~A!aQQ1q I)i��Eok���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000002412�15104114162�022743� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��RPLTE���.46.46.46/57068178067068057<AB068057/57.46/57.46/56/56/46���/46/46!%&���������.45.46 ���������!&'39:',-���������������������������oqorspqronomoqnyn7Ġ�vDkljoqm `yP npmbU]^LSS9<fnolmnlynhbUD7ν)2dmnklmk}WFO:ͼ(;KIMckmiwOGA/=B-7ejli Կ8qenlcjlbj2ijhikhnf4 oe4hifgjgJLHJKHIKGIJGfhdfheHJFHIFGIEefcefdGHEFHDFGDcdadecEGCEFCbc`bda2798<99<:5:;`a^`a`.46XEGE_`]``_[ZEHF]^\]`\AFH\]Z\^\INPTYYY[X39;=CB=BC4:;�������-tRNS� 7.E $&% ���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��BIDAT(c`3B s%8u@ a<F&0`jf෰wptrvquI{xzy $B<#"cb)iY9y ¢‒ҲʪZDm]}CcSsKk[{Gg]B&L<eԩSӧ@Hgl 3k.Bb9s _$X %K.] !|Upz \Bha#BbӺ[`6au;`.1q ={A`? #+WPT:x09 PUS@Z:x�/3>���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/drive-virtual.png������������������������������������0000644�0001750�0000144�00000002121�15104114162�023363� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKOUm,) o5BCIH802D adB.# % W)}}=mRՁ+zs=tFLNN~p{{QZZۙvwTx$WWW[XXhġiB!  IޞEfq}qqhgggv~~T4L|> h(FFF>U41$Lx^PP`}||$|阻L!p8,9Z)aXn )FE &cR#LCH$uii3E'+�bv 2r@& f1!x<>M <==鯮F;99bf KJJWWW%/%%-E'+PQQacw1'KF HOOTy򱤜S ׫q�7ŊQ^^<0L}T  �ە-^c;<>uBIIId6ÒW�Ё611!Ԉ</j墲2Y -RanT �HZ.: Ycc٦<OCoxiiL4E'H8hCCCWVfp,E\QTT$ũfpn===FJ)//xCY.֟jii:֜pMp8|/A7A=cX[[VUU} g! \x.ž/...+8_M x]wuu١{טLzxxxG{lmmƷhCCC :/`08~ȳ<*Y$H400,m B菉PHXħ<xfff !? vww ^555u0{7sssSHG-`'q<?T AVcN;6 d" d:[[[K2mccc./@F<hS?o����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000001504�15104114162�024732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��&PLTE���npknpknpknpknpknpknpk}UWSUWS���������������������������npk{}x}~{���=���tRNS�gvD0VV9 �C%���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���IDAT(c`*`BLqf)iT `G $Uʨj` M-T -5N86I@t@=y%Fh؄ (mjf@liemmnacRN.n^>~~0 JHA$CBBB#"Q1n@|"#$/KPHXDTL\BRRB\LTDXH �?@���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/drive-removable-media-usb.png������������������������0000755�0001750�0000144�00000002434�15104114162�025527� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���Ĺ������������sssttt���ˏͽ뻟riϿʲѽﳍ쾟Ҿ¢ӿorԿƤ׿~ʧΦʙ̡ӭձҬǔÉÈrrϖ���>vM���:tRNS�po88ed;tu���bKGD�H��� pHYs��a��a0U���tIME (�ݺx��IDAT(};@qmkͮRZG$MfzL(K/{ 5jTKu2lWb:NgÑxiQiw&4M.96"RSI!ؔڐ&!E�5)f떮*�/^*@4 uOOtH67}o 7B(m]2"C>~elȔ#OLNM#QBYg ٹEHA"rBsi � )0H&x"9Z@Og jbFEbVN^LOgKw[,Z)}bxg7鮇<q>8-wvtwUR`[u21c&MuLO���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000002253�15104114162�023336� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���npknpknpknpknpknpknpknpknpkgidfhdUWSUWSkliíjkhkli���wxuyzw������[\Zfgdjjhklilmjjkhfgdklinpk򃅀雝딖wyu~常䱱nolrsoprnmnkϸrspsuqɧ{|yܚmoj}~{ڷ{{yƹ��� {���(tRNS�gvD0VV9@7s���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��dIDAT(c`5�DYCSKt @S"o tY!&뛘A%V666v@pt2v2v5v366v[gb O? 0( ((8(($84Sd GgxeDDdx8GsEs%xbb# --#yAvkb 5! R "Vi0̬ܼ¢2DyEeUuMm]}CcSsZK+T/C+B[?HB@CcSN>cfs&jhBJHxnǔy$.\."b;D,]$! ,#$%lj+(*)3 �!p���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000001317�15104114162�023474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���npknpknpknpknpknpknpknpknpkgidfhdUWSUWSnpk؛ᔖwyu~ᱱȑ֔Ľ���B~���tRNS�gvD0VV9ˍs���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���IDAT(ϭ0�a nmiq/{O$,4B>Qv.2x*\UZBh Gwc:tDPC:"qJ:jY @ט3,,rlw87/|{oXLrz@(U* M���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/devices/camera-photo.png�������������������������������������0000644�0001750�0000144�00000001773�15104114162�023161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxb`G|Ϣ(wly k۶m̦nw/c'm͠m.[cwl�_zw֩OOz|wWߦ)7{: :ӟ02Fh=;`;UM1<2 .? Μ9Ms80??yann 8w, CCC` ؽ?099A+&>A_ftl55Uhii'133%妦TUبS~%MB__+({QXT$[) !#"RB{{B % e HJK(Ѫh2-<TӁ&%m6h=vڎ6QCc+10vV+::P]S*%<>|'Nr�IIV|k5HJIAA7ĉȣmNk~457BUTqך^eǺo22`\e?H}9tHJNB#ة܉W |eu8vPh(@IIO}7?[n{�|wGc-';U[PWWRkwkMRh #xa" ]nN~bzHMME-ةY !e~- x9m'qK< hly1ddedIShMf;~_nCvNq#O>n O<,>TC,ٳة>h)#!(A~% 33C.^܋b,я`8@ T|{ELD/pIFYA!]*V23 @']n.;R_niEP_/k�#dG l6%L@Ģ@,Ēdb <P3 Q�� ����IENDB`�����doublecmd-1.1.30/pixmaps/dctheme/24x24/apps/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017405� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/apps/utilities-terminal.png����������������������������������0000644�0001750�0000144�00000002231�15104114162�023735� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��� pHYs�� �� ����tIME (�ݺx��IDATHǵMh\Uwf24c+nJmBBPڢ7nMZ,mbЍ‚Fn 5+M&Mh4Lw9.|d&=wsK#w;N9fXZuXun#ІXUk0 /<�c̫{>JR!hCW*T bRv({#N{]#=<yFn*"�xГ >ҙjK& _| ;Dj *(AXq1T5գk8U ZTb(b`- >��v.J8 #GA"h.8qTB�ʵS`~LD%F'r@/ڠF|0ưsnƉx]BwWCZ@UY^?}>~n%QA8 )WpNin80"gOg2{+qki|JezR@UlST^;7Ďz93'/S,7AyՍC7?oLNMp[KtgsELyذM s0ϱss>Y}=6F_o&Hx0x3lS:m-*6齗Ϯ4vIpǛ*^GCYVr<Jђ�Ƙ5gm(M\Vũ#GF)KEʥ~AUݯvK˷b@Ugf:g~}tO4ZSn.hSw"rIU+sB!AY#"٦U�|!o0yc̪1f5H䭵ZeiN`i Q @(�k@abkֲo>E- d���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020102� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/zoom-out.png�����������������������������������������0000644�0001750�0000144�00000000717�15104114162�022406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���PLTE���������������������---,,,222!!!rrr|||pppzzz|||kkk~~~wwwyyy{{{|||~~~uuuuuud"���!tRNS�-..;=)���IDATN@�eKDMhSP6cuՏSh_v[W׉i6w#n5һ;ACĝ!>bQՠv%ѢD"ɢ!]AfػY3+q5*4 (tDd[\?Z "Pkq/ofe$l����IENDB`�������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/zoom-in.png������������������������������������������0000644�0001750�0000144�00000001037�15104114162�022201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���PLTE���������������������---,,,222!!!rrr|||pppzzz|||kkk~~~wwwyyy{{{|||~~~uuuuuuG���!tRNS�-..;=)���IDAT(ϭN@D_[D %vwqqdsCzJo2*,|?6 P=Z~*HhRSJ9 �@�z @rZ' %Ghdoҧ$B0@sFĶE2Cv"Pnr}ͥTs]�=+/|2ou1X+0\ YV!|H!����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000000617�15104114162�024654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Y ���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���!PLTE���4e4e4e���3d4e�1p4e���Wx���tRNS� {���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���BIDATc` H4"q:g( s pr9 .P3Ι3&p̄Ḱ$A ��3/q3���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000000615�15104114162�024502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Y ���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���!PLTE����1p���3d4e4e4e4e4e���U���tRNS� ̯Z���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���@IDATc` h@t@9.9s D T ,:gp`5 @d{�ݝa���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`�������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-restore.png�������������������������������������0000644�0001750�0000144�00000001540�15104114162�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��'IDATxڤl&kg۶mۮnm۶/m-b6㘛6 ;3+:s$+0 7[%N+>$K T@^fƹv=0%?ӴY+8*ŽБݖHSof"[Zjlm3+G%xT n7KC5z1$XU1Zm6NmF࠽w|\Pu} O<T(3齛SXyVYUlT iCN hpွI9:,yQY\ g\> f8l3&'Sm7b:Eaa Zc'5~L 6s0\N ^:*¶_u { q, 43K=${ #?hT}(V SNA5|jl׊zsom'.c'._m/V iۈsU/X2K]E/vgۿKy5Y4 v~/`2U_%6^%*α[b K5=6Bf4TE $Ng| ~֊;ńKP8@q18K"'4p)^#S> #8 @8HB_)WɍgVl8v*]( Bf<[wQ঑{΃Btـ#8\O]djy˳ h䯸?oݒuǁby՜e[Bx$_ (e.+EH&aLW2IsDJ@)PɝĎ/H5�{,\-����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-refresh.png�������������������������������������0000644�0001750�0000144�00000002535�15104114162�023223� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C��IDATHSkLW=. HPVj5Mc҇ljZ_}Ii4T[b[-`Mjlmb "HQB} qY=3`1IOd$=; ojcҿ{hw͝'Kw^(' XgY, (%~J,8jwS{VۘΩd1k;T~/ e~矙g[&;*(%0 {{00<W~sJA݌łko*PI[L 0t@��?AS\SwU<*tq7)�gB+ *v=! Lu% ZG /!׻,K|Nd*ѩ:~k5%8?v(N5w]C¡J QBIAQd 8d-<�^WRgQnFaXrOˡ򫗪j?/LSO1E`H<C촚9VB{yb}aZ'`W00) p3`SIP90/m"V~LɉW:2SX[U`qAl,=3+7rĩ3 B�_΅`g\ӒʆQ8g#>BG6W7l7"=�Iom2@@6,|Z;jͶh_dM$eEaW�I5"A4 (OE[wME}2wK*V_a:2sM'6-QA YZ'_+: s C0�AyI bC3]O]*ٰ3Ad^$uXkS$ᚣP]\I b1RiArkਏ ݥ#?/ )In q(! iЍk^,< L�Er!p2,cAm~f4=<3i>|?wܦ$^,EhFvB�sZ:]؃=G�}ZzsK/oGeش<}U1K߅ˍ�BQ!@UTW{�h�iP$K]87Fz<�軈D}ѵNc00�XS68\����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-fullscreen.png����������������������������������0000644�0001750�0000144�00000001473�15104114162�023727� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxbtek=rl$ ޭm۶mƶm۞vrd{㹉ڞfU=ofWwr1FEJS}fJ5A7DndT`�xw_Cm)m/p91Y`auHWFo~%mն(|v)Bg�fck3Joz5!�]F8x{W%#C; p <!Mϧۍn#Q2ѓ~rk2e5*qj`_R#[Mp0\fb'[=Rj- uδ3_νh""^Uֺ1nojW8P6ָ0V:mitV"Kߔr LwDHVVv>Q_Dd3mO(xN00?JZ3N%˞PySvUjx4^PjB(PXڇ TL08+D`_om@VCZߔeS-j\Ws͛x6} 'hZx$q72O2nH௜h`v]6u&/.IGp0_+ievL-wT Mֻ25RјdMFV:"kA9+,hUӡJmlܟj+9H''8a�/ 'x����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/view-file.png����������������������������������������0000644�0001750�0000144�00000002271�15104114162�022501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUkLU~h^r)\cՍ͍P8Eǘ1$hDC"?!YB4"!p\Bf6elH-J)B/9Ƕ'y~y{#!l`0ߏ@ pz<>o8;I$`Fý(^oN [fFH)V+ףlQnllt ti th~pFBMMM r96^X?Q@EAYiZ5M\RUP刀3PKK =Ckk+e h0iL&STΎVm$J.Cf<�o( ٘˵_ W +t`5j\|yyǘ/(:+y<FFy jƔnM7b gϪn{x89'UMq@ĉU󟨮T9j5>~ސc0Y]ȲɈ]'b1C"Wh* bV2νKvQYfggXDzΟ+gNBUz|L>1Gfz** m5JKa\6\s\ Iiʂ3 AA%qT.&v^a{~,-Pdb)&xĀy0`w/! cuՌlMJJ^P)<C*";'NLI&>^Ό 5_ڃܜ\v\ذYqӋ͈{ <OwE,$'%L=8"#@( +5w:F:PdWQQO;&}8rhh#8JCCCtB]pzd2\�< m~ F0[[[FG5T)PWWJdt} KW!KUR|`v.U]&2 N$mR 5R@JPTJ?C\D8eRR<HSӥ ) "Tf_}-ҵt+_R?UZ( hltY"Xs@{$wx� 㕵<@����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/system-search.png������������������������������������0000644�0001750�0000144�00000003146�15104114162�023403� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���HHHvxuoplpqmoqlmojz|xwxumollnkz|x|oqlmurth›npklnjrΎkmi|~zrqέʣ}ikffrςikfmojnrrlnjnpkxslniv͏ٶtqtsnlniąiqrurttaȄoqrqrlgietvqjlh\prlY̭hifUWSlnixxjkhfhdjlh}¾dfb]]]gielnimojkkkgieTVR���������������ccclmjhjfRTQ���������111ӿbbb������PPPkliXZW������ ʌ���������888hjg������������������������796_`^ijhWWW���������npkqrsξ閳җᨨmnkؖlmjқ^`]���*���tRNS�>:51voѦƫnzzPZlu^H:OebwbHU{~vbi.cad >W[H"L AtwF"8  !/- ѻ���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx��vIDAT(c` 21\eecGs/?M!aQ1q[RҷeDe khji#$L[XZYs@H8wrvqusvz}? 0(8$_DȨظ;I4̬ܼDaѓ%eOUV!ں/[Zm^w>z^d O<eꇏMGa1sY3g0yd,\xŋ.mPūVYn6oٺ w\e={?p#~?8�$ql'7:|3|P -Xc'O^>+'l��W˺_JF���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/process-stop.png�������������������������������������0000644�0001750�0000144�00000002533�15104114162�023254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE�����f����q����bbbv����qUUkkkgggfff}��z��x��hhhj]]w**v'' pCCoBB    }//~//#$'*'*<>"&:;PP#(QQ$)$(@AABLLMM),-1+/,1-1Y\Z\aa``,19<;>9<=D>C.3=A-305AD.4/528/50627<C0617=D=E17289?=DFH39HJ5;6<7==DGI5;=DMPEIFINQ8<:=>CAG:>;?GK;>=BILKMLN<?=A=AJN>B?CLOMPSV?C?DSTSUBEEHCFDFEGPRPSRTGISUSUTVijIKLNRTKMMOacbcOQNOSS\]]^ZZsttvii6;,4.64<܈rr㍐䎑낂냃땖떗퇇}}@FELEʼn���tRNS� %-/016@ABCMghqrrsttV\.��IDATxb X YQE-<v:vn7Sa&8#[7_i}jpqAaPf-kW-!jD}6/_Vm(g� QabUۮm۶yvΓٿ|B2$]:,dZh h4H4Zh&/>Lp8.i'|>V ^/% 8Mz8JN,jWӬV$A̠xy=;*B{3ut" O{ N"z�7,/Ώ+>,Ӑu츈, _"+&4 �RL`.LMԜ xzܱ}1(䒰vĉĹ✑GLF^5s r�ǪT0����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/object-rotate-right.png������������������������������0000644�0001750�0000144�00000002310�15104114162�024461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxڵTt$?cl~Akl۞XqҩضAQ33'[c g}>ԀG]l hjyؒDA]O\"@BV&ꡏM{pZ"!kf!+lT!aSD3'>|J(m1;J.k#롒<sP<˝@Qȴ7w"RL(bI5kHk90gBiR3hAVʠZk򭆒&Hy|rS""UY(V0]3Z@]dOxU-l Xf+`HmȱEyʾUU&6@ S)>sF`Nn�Kn0A55aeB*A')FAĦvDq+_z q{K  گB&y|XB@{<RD=g2:[R5iw)$s)6#DApƟʄJ8 ƌf(U:z%<J|$=JGm}4k[TAVU-6\qQLFl~=Hdl<�a2C *!Nߏls٘ECWj|7T xH f@U5NQ{~ ߬mA G+WD*2'CO?,C'#LEvS&!V_mGߎ;f{W7ElQN #G>**>7a+/;?&+9`|E6Qbմ+ZR09'ELෘit:XUqߤ"tR՞nVj MEVi?.0 agfY.ez̈El[ + qKP,su}i,wk"sǮo"A�{‰|2ip8dzoW҅ѵ{gA|3Ng rU乣$x^5bb=�"䨮;a%> rC%jͅ h Nbv@z] to8[e}xUm~!P4|E;O^F3GO2!(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/object-rotate-left.png�������������������������������0000644�0001750�0000144�00000002303�15104114162�024300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxڵU#Y\gٶ}3u^hlFx±/ea_^zɄn2!'PlۄؤB@wj^"``lL/#vk /;ƄsyB,knh,%2:0W+%o"(;.eDƫ(l2zU/4A Q,[u 5drHF1}"" Xz@&(nv0tBt"[žwtIC >UƷ}fq4NiyBŵڄꔽ Eg^KUI?e^ڴ6[d@\c5ur.#셠5auR݉"E;K&[۸&|V)-F0wAIL :D;ȗ?I>Jou ]x9zЦC)|?f(zāmk+2?F(OluXxPc1B^ EM j�cn'H)iEƒ/Юɮz& >Wb\\pװ&]INZ@XqofwܡȻT1BA@ILtւ«<L@*㉩%<^3Ӊ)? | |g!f alCY#d!2A�J1o' s#krbJ^ɃC|w\(dW-0Ayᠽy[wR}>Ys>`Kf"B2™]R!s]s$h@VAY~w:MqKϸTi4Wb?mTYXY'$B!B' mb!R)I^?t"m~dM;KU)2A ݡH8Z #FNM _Y| yguʁY5\d7!|u+c/ Hw?y܎֘Y"ROt̹Pe# B6b넔bIpOOB>j?$赔3m+}�!jWM՜YLuwsHmC. _1v]+3yn˲{mt"=v����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/object-flip-horizontal.png���������������������������0000644�0001750�0000144�00000001346�15104114162�025201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxbT|@4M,8z *7t}n A,g@̟z̐_8+k0( Q"-7-^RAu<C<w\{GHm tRv 9=/�C=?_X&9CZ)D߀�$ Ã=5sI: (�x&i,vɦB T*edD8Lh?f9BYߝP(�Ud@\?6X7\U(J fe4a(aWg`!N"k``ƞAoӮvEh~� ~yr$wS`zJiô~"2)~ ?t{ŋ ,j0: <  (6n;K^ Y&V5~suF[.uj$1uq9Rתn p{ v.o.kkxgEM~.+X }V{!]6os\D"#[!nNvv7lNG8F!,[O ˍ!Zlspvci}co]eo` ��1[*Q����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-time.png������������������������������������������0000644�0001750�0000144�00000003201�15104114162�022156� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��HIDATHKUOw>3We ЅAr+ (/&$j,A _ ZҤVSP[! ZM-Q%Ue/Lړ ;|wjkk!(ab||~|"TTT^(I@TgАp966VJJJȻMCZt޽ .\�A/^pP]S-Usssޖ-[ Fc@ f vttZ@4RyXwOPRR2~\.؞۸__9S^tS #lH�JO=mݵ{Wuu]ɴS;6%ƕ#V\)BN8-L좉Iy ~ZAEd|^qY|aA!|rϿFKsnݾuuu,AZmʙgoh^~ɲ bffffgaaaABR͡CBp%]w7nz8>>\X\fxd۷nC{k綷[Cy[ Yt:A ԁJQDOvl<Yhe55RqIj69}M=={yy JHW@׃** dy@6p`rG!)TRYY*^0S'''b6 99N5: B.;oܭIńEΝW fT^<K\� +`rZYidgeJmD3afYic%HLHNd >y @G@R- ĮN"ҲR,ZNv]T52UPQ''$g̴4V- >Ba9vNX7V% >M2v hzg x#6 1a1` . Vve7R%ߩ YTkoi `@evc(NKF2,,T[=V_֩ -= 1PDGn>*:(Hhtbފ|NS;gģpy p%<Kh_m6l^éW+ 0XZ]%4[}ȅVyf|%"i4[,ަ9Ҁ`4~#DU ĀF?\ vhX+¢hlhdw -..rf0�MX6 'w uqD\ߊ[gϞG,@6_ڙnU|ffdZ^oYicJ ##9Kb"G6v07;+` %Y>rGF,L߿GISSS232'$'Ek"j >bP]ʕ+<P VuǫP}_zru7o>=111RkwEs8VL`hkdjvYCSMf4)(iTJFUီ`gAF +�F vx>q����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-savepreset.png������������������������������������0000644�0001750�0000144�00000002122�15104114162�023402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUMh]E=&i 6i 7TcyVD+E@EV*m-Ej^Z6A FhZ6M{sfML|/֏739g]@fp+c 6$N@ >e.j}N@K`*L־ol~nxfg&ж634 g| o 3jZ\ (>(Üe'1] BXЫvV./37?gy b"aYh둏8흽hyc wKݬ=z-9R! .75H\Mll6Qn%Zab YG 7_dᵦ5%w44޾OM<rk, 0^{vjPY Tw-3E?_u~f&la|ꩮ;RI.oZo rmSoykM)QtJ >LpUv$H''F_q+`i{u:ؘ_e*\4g6k<0(~pΎ?gKYt .ܴjqkۄ8<e'ooKCleeGxKA17?[=8v܇38 w xVv@W灓xWcF7#r=ۙ!SDs4kYgߪ6ˮT#tdp5ah]rsx6 v զ : ><%<9^qgǜ>8KQ3|P#j N:-Wk1Ogf3ǧf12㯚Yyi=6f:qfܲ6"m,=C|eߜK+p \*gs=ͯk ΍9lKztԍsJ\m~am IUO'fv0W7p_3߶ҵW�n3|����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-rename.png����������������������������������������0000644�0001750�0000144�00000001254�15104114162�022475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��)IDATHoQ \(Sh(J(.Z4iFWnL?!&tODt1blvTcbcIlR*ϙqQiy$E_~ܓߢEQ|-~M(s4Dbn5*OnwVW؁:D>NJNs&@>+ }*,uUuFSX�0N g$f&/Tk=[Mm!c`HEKTZ`\r,8bsrl"پ,v3󚈈 [$̳ AXkOj## <vk288vXvή?tKպrۺOo 3*åh�1ήEj4Ȣѽe!l@M y}~[ji ֢WO&""vr[L hwpؼP{r~Xc ��/pc,吇1R?rEiH8 8lt\6b8(|I z&|]X쌙}y?_iVFm""")8 ?/@Z7����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-presets.png���������������������������������������0000644�0001750�0000144�00000001613�15104114162�022712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��RIDATHKUKHTQ6KKG-)"LT2HQk QAP R $IJ=0haI[Nwn2se�UU5@9H}p 1%a( ⧏VtYO٫/ ! 9\qDΘI1Hv6NgaՁ`nFD$Q2,3Rwe_hld:a&+ۆطZXʉo<Y14\R8.%/D DC*t,rZN7*٪:$* -K8 '}ؙ*ʊK0%(Ξa|1.Aa.!vy6HWGh)]{nmhVTCNdI2C3$n __e iBMImↃrPǾ<jЉF^̏{_"8WF/ŚXDir|)o(aCxpfqlЁL0;? _ɞ܊"RX65P$QtB.VP=e|64 ds;@[xCQT. Բsۜ r44iٹӷ?7#m!>!5ϠO6H#˛+DPrqzNVrfnSc="|.+�d2G=P oz5B!8rJh'Km*r AnUQ~(w1S{h}dtGaE8԰sh,AmDyAMXv`ר_6'kM&6?8s*x5e֒D/Y>E|A>|](]|3%oµ,����IENDB`���������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-plugin.png����������������������������������������0000644�0001750�0000144�00000002455�15104114162�022530� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUklU~u붸+! Y�SdƠ0$G&JH41!MHL4D0@DtS&8e0vc+cඖke9yo<sNdco.\Z?ivUA"<1<0һiˢD͌IIƧlª-l|(c^d-,p}/v;| %[a@2ʨ^@1+"8V28::~dč#.lomVift3)EҲWP2!b(m wky_h/\�EK5V6}q9cGcC:KW Ca&W�&+al(w`gv�0{ٸZLskHP\Yrvl+ё6+06A[5�<[rdQ {aB(>QmjEEphԗ\<y96nl9B|!UESGI%&?nD۾0٠m:ްsgU ndĄH x ,5U={Gǝw<2Kt4ܷ퇊%v. D&2?Ѷ ᪪t_/Z_'{Tمtqpjj2<K{n u5\!~Q쯰% ^ڗc)X$a&=s2.:# ,8BL"ܺwcm~w6X\䩢uV*1ׅ  w4{ m1cW$&;friʷ/W=Te:f#$ I.v(ojYbk4I2b'\zmSQCx|׎L6k Me4!xR@)B$O}r0sX Vy7T4hQ`'9b7[yTۍONM3 fk: IK�'oEr5?xA <tli$5iϸDtzwےjNh0ck3;p8У$Y|H8&mU[I^H\}Q:Ufy,񈘰[jc;MRhaQMbs ՝Vc}cmq8V_B?W*FbU9E #4q]'ٓjR[JnǹՌЅC"6M]r%8HS=seɹl"Љ^0P9����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-pathtools.png�������������������������������������0000644�0001750�0000144�00000002262�15104114162�023243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��yIDAT[le޶;C6AHs)!D pp7-DbDW((o\b@!0ZXm]ֵvc(F48G*w\XX/*(,Pd2韚om?7*vm,/+;8{,v@χ{՚Dsg Ǎ,޲ers#$ 1xi Z3 7\jq3rrroWܱ p{Sfҙ<b8|~?<:kx <@3db7رݍMܼ\ &~kw>M0qb( 8aic;޲vfhJ&@_XOvr zUoї,qQ7[#Xk)PRƦ&jjj*w \vWIE ({n+½VW;81Z<xhcqh-!ˤtX ]6.K^i<bEWtUly4{R 2`@Jcn9G[O}ų:3yS ýq"p` 1@4 B,^ñkq eT7N?e(0v;�4 {y9O,|$IkOgL;l7#"J; AC3s՚(Kk7gDRra3LmQUZjM7˫ɖP>uw',XNg2}kvHc1De XO<[V&tP�VaP3`Aj9ʁo[N�) bPgJg,T+(?%H` ^ڣ֍D Hk!*$((8~@q Thb 5u�9 hAѸ 1]4 <K?(&y4GN�diO8Q<H7a ]Fk5@,MlalNh_\xegQɲfzRaBD0KMU@ 2؋hq����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-filename.png��������������������������������������0000644�0001750�0000144�00000004626�15104114162�023014� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD����%~��� pHYs�� �� ����tIME]>�� #IDATH  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��!!�����������������������������������������������������������cc~&������));��ʼ��##/�!!'������������������������������������������������������������������������]]p�EET���������������������������������������������������������������������������ķ�22=�FFZ���������������������[[[�EEE��������gg���������������ee~AAA���...�������tt!���__x������666���QQQ�&&1���}}}������PPP�����������������������������������������������������sss�111�����������)))�������������������������������������������������������������������������������(((�UUU����������������������������������������������������������������������������������������������������������������������������������������������������������������'''�����DDD����������������������������������������������������;;;�����SSS����������������������������������������������EEE������������������555����������������������������������������������������� ��PPP�333�����nnn�������������� �000�����***�������������"""������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rG����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-extension.png�������������������������������������0000644�0001750�0000144�00000004626�15104114162�023250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD����%~��� pHYs�� �� ����tIME u<Y�� #IDATH  �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""� �����������������������������������������������������������������������BBB��!!!��������������������������������������������������������������444�+++������������������������������������������������������������������������zzz�QQQ�������������������������������������������������###������000��������������������´�� ������00<����������������+++����������������������++6����2� �������zz��EEE��%%%�������FFF�����������������������ZZn�������������99I�88E���777���[[r������99I������������������������������������������������������WWk�!!,�����Ƿ�����vv�""+������������������������������������������������������������������ �ccx���������#�@@N����������������������������������������������������������������������������������������������������������������������������������������������������������#�����vvT�������������������������������������������������nnL�����;;L�yy������������������������������������������������EEE�����������������hh~�((1�gg������������������������������������������������������������mm���<<J�,�����y����� ������������ �221�����$� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������c,b����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-editor.png����������������������������������������0000644�0001750�0000144�00000004626�15104114162�022522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD����%~��� pHYs�� �� ����tIME+�� #IDATH  �����{]^�����������������������������������̬n@�����������������������������������/~J������������������������������4 čWJ������������������������������������������������������������ ���P10hԖd"#�|��������������������������������������������� ��Q0]>���������������������������������������������������������������� ���c<� ፾*C�W������������������������������������������������������J����ӅLT�������������������������������������������������������*�~I���������������!+Q����������������������������������� �(eqi������������������������������ � � ���� �"jq������������������������������������������������������������DBB���� ��������������������������������������������������������v�B8M��XA{T)>������������������������������������������������E�7jm��� м�@pB4%��������������������������������������������E�7j[����y� �&�u����������������������������������������������w�7in����T���U�u5������������������������������� �E�*B;����Z���y�.44��������������������������������������������ځE�7iZ����t���`������������������������������ �������������� �!x�7in����T���I�,��R$�������������������������������� � ������������� �"I�1gj����u���]���� ������������������������������������������� �ˤ�LY�� ��o��G� ������������������������������������9�����������(d�ɘ���X�L&-�����������������������������������% c����������h �� �,������������������% ���������������� -Aӿ��������������8��!XRϮ|�����������������������������������+?����������������������������UH=%o\Hz���%���  �������������������������������������������������������������������������� ���������������������������������������������������������������o &����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-droppresets.png�����������������������������������0000644�0001750�0000144�00000001347�15104114162�023603� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKhQ=|m.l ]nm[uэWuqeMZ" n6 k&&3}3SS5K9}�D"1.@a >3_p/Ai~y~f>y\\7z\K˫[<p@F*iQo{Xs tN݅ل<%\:ixH]m?A5<�@& BԚ-ص,Qxԡ 3a:'2Q7>gUZrt:4:,D2 0E|Yn1{ pjIݰ\:�)Jp.&DtdyGd&w /׵(0TFz?er; #Ìԣ3I[ +-[5KXJ0v?NlDre`";p ieRxs(1dD*&Ŗ_#_mE 葶طT�&..طKēD5E~Zi9.U.LDWinSd`Yre͊/Hc jwj �t.$mu\D!q:[KG>7=uӞ""|H,itMߐ ٲpL> Y>/K'����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-deletepreset.png����������������������������������0000644�0001750�0000144�00000002135�15104114162�023712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��$IDATHKUMlUv׎cI41Ώ*hRR~([ "$HE!QJU/BRR(4P!M8MDjc']㛷(1%#|ޛ7]@(1=E# C?E|26 l1K%z3HںG |q18^om03+Ɛ}dڮL,p+ ^(Zu8̘I|25AƣLnmaT`V 2UEׄ=0܀3zH&G ĉ{XdT͞ph_WX<,,mAl J"'/W#\.b γ=`*,Ԁ6M [dUa"v\1cI֠W@ū+TA4un[&-ŶòN֋H>+}J*ϣ<8,50XNֶ`]HH(ʬ''9QW@Z,Uptp_ծe ַMTLB)uz|J[|WoHOC>cl%~7\.[6.˵q%\}c1ՉØ9O\*XV'uDj 5EΣsWqv'֊pm-߸q&f3'/E^| dqAUxn X#{uYg65±3黿:S$(KVm?"Vg A._t7U}ymoRU5F4Wh<>b^Rq~2E”=դt x[VU^`f+<*02w"<"!ŧH/M|"ytVUDof]^Pۨ Tȁ_ck/.}8?-gK*YI=Pw= c_^ɎW.3n*ܱW% 5F 0j][f/s?Wy?M����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-date.png������������������������������������������0000644�0001750�0000144�00000004626�15104114162�022151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD����%~��� pHYs�� �� ����tIME �� #IDATH  ������������������������*���������������������b0 㔍/����������������������������Z#I9���.,/.�w~8��������������Ÿ∨'�~���!# ݷ������������C�u$���� �[ �  ��������������� (��G"����^ �%��������������wo���~��s��������������������/�f���xa������������������������! � ����� ��������������������-�� ������������������������������������������������������������������������������������������������������������������������������������������������������������������&#"����������������������������������������������������������������������������������\]]���������?@@�)))�����������������������������������������===�<<<����������������������������������bab�CDC�����!!!�(()�CDC�������������������������������������������������TTR�QPP����������������������������������������656��� ������ �����������������������������������������"""����� ��������������������������������������� ��/0/���>?@�������������������������������������,--�����665�� ���������������������������������������! "�#"#���799�����420���������������������������������������������������� �����������������������������������������������������������#!!������������������������������������421���������������������nptS��������������������� ��� ���������������������:;<�������������������������������������������������������������������������CDE򽼻��������������������������������������������������������������������������������������������;&#s����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-counter.png���������������������������������������0000644�0001750�0000144�00000004626�15104114162�022713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD����%~��� pHYs�� �� ����tIMEc߀�� #IDATH  ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/// e�������������������������������������������������������������� &&&���(kkk)))����������������������������������� ��)��� ������������BDF��������������{{|�)((�sw{�c`[�...�aaa�lll���� ������,,+���..-�00/��0//�&&&���%%%�0//�����IJJ�[\[�)'$�IJJ�WWW������� ������GHM�))&���+**��������������������� ������������TTR���UTS�� ���vsh��� ������������� ��������� ���FDD������������������������������{{}� ����������������� ������������^^^���� �����������������������������VVV�@@@���������aab�XXY�����������������%%&�LLL��������������667������������������������""#������������,,-���������������������������������������������������������dde�����"""-����������������������������������������Q��� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Bj����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-config.png����������������������������������������0000644�0001750�0000144�00000003202�15104114162�022466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IIDATHKV{lTUsytl)h]K۱PPZѕmAw ? qH\kdHX%D#!к. 黝a`:sКj01&%_ss~s35~'ZxYyTCl`ƙ`Vo8Gwb$run5>xfLD}/xVFhkRbFñ-kT,߫�ej:z^+&jzMkT1·/L30^:ua}iBᰘɩ8@y5a :lޫx?[˘Y"s2Yש$c(">e7 ?X<zh߿986eo Z|uvXDgq#]D"fɸ@rxьZqH%S϶A8lNoFkcd ZQ9o`=vYD'ȫd#D,Mo-2rĩ*cay 2%2VFcg"bUP-^Sv|Ԋ%U Jj#WYvD߻}_.n&KQ<YŃ ]\$8nZ!R(Οg-&Y~ؾpADp#aDeYՖ! y;"6ܜ,8gC€%( C9xr_f$@טN3jN#En8M<gxX- GD(l+ =q+^D4SسlPTݲfn62 Y!۬@]Kg5!e=n9GNc7 c:H߶JpCm\<P,$;}՛|]mHDE2?w$^:^o_zp`!mY?׾ؽ{&{e׿y3'M8tcF ׃΁ͨ_kmG6^@J.˔0UDzm 8mچ]ijݣ6&M}RKS`(UBrbk ?dDj> nSCdնפ9'D"$QD!^TarTzp =,xw+'N} XhڲV^U*g 6=roސDk*#slVtYJHJې8kzU+GO[r//;;ف3Ɂώ>GSv?qD4~X+*%UoCs;ZPu铨?Ŵh+[&).T~'\:]OB&L_j#a}UtվrvUiqD]fP[ܑo{pL$E|BnZѴ]x_K,Z$4XvbH a##qy39;qV|J4aP-'!Ʈ=ۻuAWz9~筞)ioϲxAGG[+o_aB_ya3s1C>5., ).c����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/mr-clearfield.png������������������������������������0000644�0001750�0000144�00000000652�15104114162�023321� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��qIDATHKKN0<Zur@.P#D*6!@B$HY IN0l,=`ɟ&xpvK<` o,ۯՏ1ܗ'lcªE4GNvPB+mNfg}6-HDoع0gݠ\9&RSZp-6]$'_?usQ67@|+LhfQv<BΩ&HG FD=T碙ud/ w|(^ qRGUT:BRX.ٔLlMS&Mh5ȵXrkQ])LmAm-*"3E>cQ ` {h\����IENDB`��������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/media-skip-forward.png�������������������������������0000644�0001750�0000144�00000001533�15104114162�024277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE�������U�@�+�3�.�3�/265:: =< ? B > > E DQFREQ >FJQLPJQNSZMOPQSTUWXY [!\MX,h\Y.j,h!].k0o0oQQ1s3u6xTT4u6xV7|6z9}YL~NEEIJJMOQQQRTTUUVVVVXYZ^^_`abcceefgijos|}~쀶cK���tRNS�==>>KKMMMZZwxx���IDATxЃPkvڶma_v;t%8I^}n2C~ +1`u$ >>K<[?:֘Eof"/ߞ4B_Yj 'fBdӟuzwdԋuՕܬ6۔sA[^[,J#GG2{6ܐEi67%a bWQ #WKLaOK!T8NyR�AD����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/media-skip-backward.png������������������������������0000644�0001750�0000144�00000001323�15104114162�024406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxb!`H(J( mֈֶm۶ڶmhmۮ=gռ|ɟu fVsƼGW)eompG9 `֘5<b^RA/>:V/舨4+�qg;yj5Z*yILt]+ LrEfǞ�WSѡ(z3㕨 }T'5`Lup, (Zzz]BPpFB-1ZXW~7hF|uLɷ~ZS G--tN.fq7u۽7Wd:!u~V,biQ|mwk/t#SMJ4v_- ZZΊK%~K0&魀`M^p"KBH wlZ+\Jl3qA'mM>z 7ہ)ѲZH%vX dS~~8>;oauVIT߀`xpMnaOHI~Ƌ&9+*v@0=KNzmbŧ WU^G)vړxtݬ)G;6(��:mw����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/media-playback-start.png�����������������������������0000644�0001750�0000144�00000001700�15104114162�024604� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxb)VTWP${m6Ƕm$Yضض3U>w^ˊ�s}?^:+f_Ipe{Vc L[cgx/>{) slr{Lm}[Pu ǥ f`63`!@ۑnDR$x;dM0~72jvC$u#E YV6}tݰ7]Qnˤ̒$"Y1k3@BJ-J6euqŚ.O2ݖ dmD4 [H" Dmx&Jijù)G&p? Q uDx# 5"Z {axҷ#pAK o#@i:k( 5h 1 .a :xぼTT{Yvl�ii$R*(T`z AfoA\ jiL^m֟zRx+RH >"̏tW!F58B3uˎLIO!U­D(a^,J-W3/tW>3Yn2 1_ Np.K,\MAUo9*c\x)E ΎmTa<\]%@o(Zp)Qaآug'&ve +ۊ YbrĄk -`ׄiԒ&b $3d7>G%p*nyإIqfxPhDp&_ݤz|7Mªwi5;p]GW|n{GC#}+\Ebu����IENDB`����������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/media-playback-pause.png�����������������������������0000644�0001750�0000144�00000000673�15104114162�024574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHՔ1N@EDi8BASPsr!q3owgu+㻛t2ih:__,RX.[(\^zs(<Q W@f=�h-@c:6�)0ɖcu \0, Q}0a$[{ z.9)X^\K32MXd9C /9-ڎ]|mϘ:' TNɕ rn+#&*+rG%{jlr|Fd2’VVR1<z, <)%~^,_@d2vlm00GsmU/NoZn|u;i ɝ%j����IENDB`���������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/list-remove.png��������������������������������������0000644�0001750�0000144�00000000634�15104114162�023061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���EPLTE���4e4e啷۔ےڐڍينك}ן���ipF���tRNS�AC���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���1IDAT(c`ـ 0"I01;'7/(1FD��p?i���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`����������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/list-add.png�����������������������������������������0000644�0001750�0000144�00000001020�15104114162�022302� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���{PLTE���4e���������4e敷۔ےڐڍينك}ןqҥoҵn���We���tRNS� ;���bKGD�H��� pHYs�� �� B(x���tIME (�ݺx���lIDAT(c`+;+$80$;'Bv+7/'06VvQ1q I)iY9V 0hST*%e*$Xԁ"3  q@-��YhA���%tEXtdate:create�2012-12-16T09:30:47+03:00,���%tEXtdate:modify�2014-12-29T02:40:00+03:00!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/image-red-eye.png������������������������������������0000644�0001750�0000144�00000002354�15104114162�023226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxUSIm=m۶k6^k<ws+;N|k#2OUeVWu75W۵kW]$hLk֊+:::N_C=_|P{***:;;O,Ypf^w...yqYnS>ݔ*+Md?~MMM `$z}EKKSSSե 6TVVN^kkkCmm-Cr7?.DCC JyyF]n.KJPoJ+%\Ѹ;ɴLHZ HrA,-Ѽ -;Qף QQ܁=ztӥKJJ۫-*BN#ݏW>ū 8g?$ilXJKK5NOOp5u33 & {VToS3;l Tt-={zo(HIA4WSwk~{ڋ퉔TJWFss3dl}?%ry2 5޾/d2%0fȌ@rr2BiPK4'mV mfɩm3 Ixuࣁ!{e{:!Q@IR+gP.uBK`0kT2L/-=>x#7oUJ[ iSV D|j{8%زeKLr!&&rau^^8mѱx='o+)5 Ac"lݺ5cju DBψxő(Ph<&Ki&tX0|Uհi 7lBN�XVA.5t:ݝ?ϟ?5"޲m˴˞BCvr}e~c7sݺu")HDPP�.bToذg?v\7oyZZ#ɿo0Qäy&ڵko^ @-)}7V^%\sjP8gΜp9ѣBN1T1AQ>G$6r.[\%X'0,_flܸ{UY0rA߱ffm_">0׷3pNL����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/image-crop.png���������������������������������������0000644�0001750�0000144�00000001565�15104114162�022642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���������������������������������������������������������������������������h!i#n(e!l(^u2u1v2v4x4x5y5z6|8|8|9}9}:~<<~:<q/n.w8h,i,r5r5f+d*a)b)b*j0i$j%l%m'm'n(o)@z7t5g'DJƋL˕\ӦtԚ`֞eנg٣iڬ|ۥl۩v۪wۭ}۳ܨnܮ}ݫqݬxݮ~ޭz߰{߰Ⲁ⾐溌跄鸅Ɨ꺇ͦ뼉뾏쾋•”ĖĕÐƘǙǙ͠Œɛǔ˙˝ȕ̞͟ʗΠ̙ϠТΛҥԦў֩М���HtRNS�  $(,0 Ǻ��2IDATx}c1�S۶ζUͶyo^Խ8>#2KR*WK|u&$jm."T<JU4d3 T<,A-9-@0ǣH_wC)eBm=*7o83T'p6]T' ЇUt'FoͨZɇBRQʔP](ᨨR SccS }(==ݿ)4EbH(u(D,�Jg0.od �$$N|NH=^d����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/help-about.png���������������������������������������0000644�0001750�0000144�00000003036�15104114162�022652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD������C���tIME '7��IDATHǽ[LTG9sYPAxYT5F%41iҚ^^zmjbbڴ֗PҚ4i4FJED/ xaVhM~ɗy~3 BHIY x^�N�;"%Em{$Pn&FyU$VnGJ}"@VAh p2D//MX9?@Ye5w**~/AKf8K틝�GJzU2i_S*kgc6Bhh(@%yLNmjmőWi>ų드8aδ <l^R شuFv\`&|u7[)):v6B?ۺi6%URgCaLedT.3i1 K\nfRh'Ȳ7' ͙9gr C0t\HEOvyAZ,߇eXd*V 7`9,QZȀ"u!uװ{o4\MyաBSX˔خBe]+'zy� B&1=Nݥt]C)0iH<dc!N,4%!$UTUY<\ RD ]C)qm^Gޤ4�.PE˔X0tZo3%+u w�UQTMEhBS ]'ZoS|](*.` WpuPUMLi1ß:t4eխ躎eJLCGJ]&Or'T= RRd뚮ϘJk꠩4UATv?ǒ,nIlmP7pcGuщS->L)\8ZVLf /!y2Ѕ(%)i*^Q=S{kg..뒚;CjCqpٜjq_<?[~cϼxf88 -}D} 3~>>Pm;+zM}Css3|w<{:G4Lޅ P)=w$[B{~=K>u=m8 )|ߵ[ߕ , h`JL11=ˢwŏxxG*Gwk] ge{4%1?m=}1vc HFcq#}Ĕ1bl"!Evhw[cwۅv7.Xϑ@b1ގw?ğ#Kf���%tEXtdate:create�2017-05-21T13:49:39+03:00>M���%tEXtdate:modify�2005-11-10T13:39:18+03:00F?^���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000001664�15104114162�021646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש�� PLTE���<v<vUU�;vU"U"<u:uKK<u;qE|D{8t>r�>v =x;v;v�<veU;u9q�:vYvH;v3f�<vtIh9<u:sd7[)9u9rX(O;r;u=x>y:v������������������������������:s������������������������������������urvr:o5mpRZVyCdic#^YTP}l1f(a!\TO_эw@o4k-h'aS QVj՘QyAw;s4n,\W W V ^rנۥۣܠ}Ay:e\ \ ՁӀрy:sޢEr*`abaق᥇Jfeggf܃|8iklk߄t)oqmlfjmnl߄㩯څۃރ݃TY���FtRNS�ySk4D' sxLN   "# f��IDATxb3`db*ƎM͝S˛]\@? PHU\DT,(8$4,\\BYYJ:"2*:&6.^FVIB^!!1)9%5-=#SQ !_PXT\RW(+ohlԂJh,(v?53+Kmk>&T: = /KJo9PV1*`8z#QtǓlXFnmD֛rA"+v(BôlǶLw'2(�рSr����IENDB`����������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-top.png�������������������������������������������0000644�0001750�0000144�00000001647�15104114162�022025� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���:t:t:s:s;ul>j::tY)W%:sJH:s>w ?x :s;ulY:s;uVsD:ti=_,:sV'N;u;v=y������������������������������:s:s������������������������������������:s~N}}Phdy^Zoo4Ub!q{Pb#^[V r5jjk/f(d"bX W L̄s:n3l-k(`[ \ aӕLw@s9r3i"\ _ ` aoנڥ٢מx>s2]cdڂ؁Հyؠ|Cb^ cfh݃٢y>Z ejlڤi&agpℿۥagmqۦ\`fkۦπԀۂރ߃W(���:tRNS�yG$ S   "# j|��6IDATxb�#T X%lP�B 쬭 ,3۳L(N`espdgt+87/78@`�ppHhXxDd B\TL<:&6.>!1)1YBL.!)'- /(,*.))= CA�=jv2k۶қFn8H>-@&r_CZ|Wb8Bd#0r5i 5$7@ !H0¥NQU%5e fiC!GUi*����IENDB`�����������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-previous.png��������������������������������������0000644�0001750�0000144�00000002213�15104114162�023065� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��IPLTE���9s:t@�<uT%<u@���:tb4?w Ft�;uqE;v�<t~UA{ ;u:u=wc?v 9rD{:tI>v ;uT =u;wT :tI���7mBy <u3f����������,X<vS<v4�������������<:ruEA} ;s �����������������������7nf6<v�����������3eW%������������-YL<t����������������'N7n ����������������֟ԘڥюR٠:sxBxAם١ڣڤۦlkm1o4r9v>zD}G~IJ؟tUc#f(j-m2p6s:u=v?֚tu>Z^a!d%i+k,j(g#k)r6ՕqS UTWW Y [ \ Z ӄlNRW _ bdc_ ~aSW Z hkjgcca`݀ᄵ憴兯݃قoiۀu؁y���V���btRNS�Gk 0Lri  P  D$,@G:3=&-27= "*h- .���bKGD�H��FIDAT(c` `db*ƎE+/_r  ~Դt FIDT,3+;'7/@OB,!!%]S[WҚ&k0a0 )MSM1s9sfϝPR_`ً,]d U,^v 7k@5ut6oٺmw7iٻAK+#knv /op CQ~A!~&ڡaK#|#c|#õcà Ӷ3O762DvD#[[P0��Yfc^����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-next.png������������������������������������������0000644�0001750�0000144�00000002045�15104114162�022172� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���;u9rX);uf9<vUU�tJ;t@j�:u<w[;t7v�g=v 9rE|<tK:sV";uU";vJ;w��D}8n���������Z>w ,V���������������9s=wJ;t9���������������������������������k:8p����Z)3f�������N/]������������7n*R������������������:s٤ܩ՛ڥWҐۦڤڣ١{E|Ĝ٠J~I}GzDxBv>s:p6oqלxAv?u=p6m2j-f(Xx՗o4a!f'k-k.j+h'd"_xͅONORU X ^`a]w:u~TX \ ^ `_ GpW \ aegiYg~ԁ؂܃isiۃqrvz���~O���RtRNS�Lq 1MsmV  K& $,3:GE-27 "l* F���bKGD�H��5IDAT(c``d!̂C"DH('wG񣨍ظxA!dĤԴ,a$윜ܼ¢Q1DiYQyyEeUuMm]N\GR . 0qҤSJ"KL>cs+(Bŕz{_p%KUT5Z`,[BWOH] *hJk s3S;UV MQFNA.VnN = hyxy;Yxz@anjo`odJ Z&&ƚ �OY|����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-jump.png������������������������������������������0000644�0001750�0000144�00000002415�15104114162�022170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���:s:t=y<v;u=x>z<v:s:s<ve+k4<w:s:s;uPT!;u:sJt6Y"Ax Gl6N:sAz L>x:s:s;uJ;u:s:s=x:s:sX'^*:s:s;v:s;u;uA;u:s\+;u>z:s:s:sH}:s:s;uNR:s;uVY#:s:t`+:s:th5������������/]:tp>p?5j������������������)R:swG:t.[���������������������(O;t+V������������������������(P9r+V���&���ReshWLgvf+y }.Vdk~3d^ j%ehhV Pb#b:s_R NQtCp5f(R}IX_\fbmlPidZaV\S WTgh6���@p���xtRNS�{ƈ[f}4QI1YkdqWF &" 61 GA !$UP$h/ ���bKGD�H���tIME&(D��QIDAT(c`2`dbfaecD橨@ohljniAnkꖑ +(2*)OP 'O:u.LBO�0>cԙ`&PS5IXX20XYOySNo bZd,\hԩ .\howeSA`RWg'$߸{,__ %\<Wj'@`5CBaaQ1kc}!R> IQ)i22"2Y~9y)iE%)ɹ9~>:JRA:|Q(//eÀ��oN���%tEXtdate:create�2017-05-21T15:12:11+03:00fM?���%tEXtdate:modify�2006-03-22T23:03:38+03:00 * ���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-down.png������������������������������������������0000644�0001750�0000144�00000001661�15104114162�022166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���:u;u<w:u9rX)O;r:sd7[(9u<vtIi9<vUU�:vY{J<w3f�;v�<w^Y<v9q�>r�?w ?z ;v;qD{E~8t:uLO<u������������������9nW#Z$9q���������������������6m9p����������������������������������������������:sڥؠ֜ԖҒЍΈˀڦ~Jw@p6j.c$\d%}Ii-[~ڤ|Gv>o4i,b#V٢{Et<m2g*NأۨyAt:o1e"T S~~~w՚V}Fy?r3`X X W _rԐGt4]\ ] ^ `lӁ`^ abccdUeghWfHilJir9;uwx=���LtRNS�LNsx '4DSk  % !&*/4"#)��IDATxb>`F4 _?tаȨX$|#1$SR3P$aɍKdrXlI~E%eU0-\5u M-<x;:{{l0q)S+ z]\lm6ʌy}=O$^0L3rx2r.W6:<!A1 )Cc9^%Yc1 U;uôlǶLC?l4^><;3I!`P6����IENDB`�������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/go-bottom.png����������������������������������������0000644�0001750�0000144�00000001562�15104114162�022523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���:t;u;v:sV'M:th:^,:s;u|RtD:s;ugZ;v:s?x ?y :sIJ;uZ&\(<vr>s><w:t:s:s:t;t���������������:sڥؠ֜ԖҒЍΈˀڦ~Jw@p6j.c$\d%}Ii-[~ڤ|Gv>o4i,b#V٢{Et<m2g*NأۨyAt:o1e"T S~~~wR}Fy?r3`X X W [nш}Bt4]\ ] ^ bp_^ abcOp|9egh<mvu)il|+xuquxklWW}~~Ԁցقڂق؁ׁցQTZ [ ] ~Ҁр_?i���*tRNS�S $Gy Ҋ)e��IDATxc>`ԂF4 -m]=}C#-t cS3s K+X$mLl-1$]\P$avgr,~:A!al,0-zQ1qq IpySR323ҳx d !;JX8BTչbU5ub()U$-2-r(B ڦfI]Z`q5-{SN1}Ԅ)32Z@6s9sΞ53^K-Zы��JR@����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-undo.png����������������������������������������0000644�0001750�0000144�00000002144�15104114162�022501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���"��|z�Ġ�}yĠ�}y#�}y��θ(Խ$O������&4W���������,������������1μ"������������������< ���������������������¬A������������������� �o���������$$͸|f��������������B@q |y���ZYcb[Z 542120}q�mY����Ġ�G%+DNWN243G]\a<EDIL?,37D2J=4 (P¢  LG ���bJ���stRNS�dAПI é;2^ AϘXJNM R   !"ro#&)-q%2S$&?Qz|  1T6"!x���bKGD�H��� pHYs�� �� B(x��SIDAT(c` 3/).^ZV] ] I._\ju@a;&vN4yig">tViqql9s牣 I JK#$dd>WPTZ SQU+.VWWWZ,W.WFr0&fV6vu]S {G'gW7wO ]m@`PpohTwKxDdTtLl\|,ĤԴx0ULFfVvNn^~Ai *::EE&&E:r2 x��w] 2����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-select-all.png����������������������������������0000644�0001750�0000144�00000001241�15104114162�023556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���������������������������������ݫ٩תجށ߭������tRNS�$/5.���bKGD�H��IDAT(}mW0a,^Qe9`BgcpڎVm~h)K蘖5M-v=8,=:C8Bga W$K@,NX>Fs*8V`˒4MÜ(J>j�(_8!)eK Y+ėٚ ܐ*c.[k�JN4(p赔}u}Ӿ7 @˳(����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-redo.png����������������������������������������0000644�0001750�0000144�00000001572�15104114162�022471� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��ePLTE���NNNNN <NNNNN-uNNWNNN5Fs����N21������HM2������A,R I������������J*M*���������GgL?~������7nIKF;t(O �������3dIJI30,.DHKP03N4|0yr?<+z"|#}$whi?5wuvo@vtxk4zy7>>;jn=}"0+:+B���cq���LtRNS�  mIF "(D^ m QH#j6 oniLA���bKGD�H��� pHYs�� �� B(x��IDAT(ύS0 Ҧ؆w0\O3hY/{k( sfEP|t[A)"!vt/ŸpxdEcq%޼I:NY'#e.W..gm޶|w|ջQYU|gMm! �!ȜCSs J!@;PMĮMiT5z`PhHЇpxdt4#{ɩYs.,!-�qC_X\Z^Y][ؤĻ2sCUF|jE?r6C����IENDB`��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-paste.png���������������������������������������0000644�0001750�0000144�00000001647�15104114162�022657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���\\\�`@�ZWO^^]ZWPnEmEkCcT:cU;jClDkBoEnD�mDlD���nDlC�kB�lDlClClCkCiLddYddYddYddYddYddYddYddYddYddYddYddYddYddYddYddY\\\zzs{{u$~:tpdbbaccb~#ň&uqdkkj^^^rocć&lCƇ'ijdhidŇ&ņ&hjd릦Ň'Ć&⸸⯯߭ǵfhd1sobm5pnb,~"{"������-tRNS�9<]]Qp +?Tj~p\G4"g���bKGD�H��� pHYs�� �� ���'IDAT(c` uUUWO__O &e`Fܜ<|P&fV6v& fAG'gW0pqsrIxyO@  !$}|C 4 ]<<E"�#2*:&]<.>!16 Y"( T LHLE�_PXT&Q4%UdJyEoU5D~Mym]}OUcS3\B(|AHmM0Б (Ơ�2ȕWPTRVQUSh�(la,V����IENDB`�����������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-find.png����������������������������������������0000644�0001750�0000144�00000002472�15104114162�022460� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���z|xnpkkmiʣ}npknlniȄgietvq���hifUWSjkhtvrfhdlmj���������������?@>fhdzzxbd`VVV������������|~ykmhkkk���������ccclmjlmj퐒rsopqmnpkrtopromokǸoqlۗqwroĝqsoڋrs΍ţrqikff퓴tǁq{vͫ|ꙛĆʇΫ޴jĎ᤿ܳwyvy墾y҉lni閳x̗丸mnklmj���Q���CtRNS�:1o~0)5bj jbdVӝ&���bKGD�H��� pHYs�� �� B(x���tIME  :LX��QIDAT(c` 021332�3;Bή†BpC�pO4n`M@`!aQ:bcSRxxL/(CHWTVU %[Z[;:=}&N<ej4!f̜5{Ny,.J.Zd+VZfb0 K6nڼ%y;vJ-)8x(<DFȑG;~gϞSRVȨkhji70<%-Ҫ&fǬm.]rت98^rB�֬}o���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-11-16T13:03:58+03:00$:����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-find-replace.png��������������������������������0000644�0001750�0000144�00000002366�15104114162�024073� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��1PLTE������Ulnj���������������������������������������������������������������������������˯ȦҢԨȊѾ꛹ؐꌰ֗YФ׏}ϭq֢ҬjÇΙʣʢʪȍĒĤWwxuэҨثܚЖϪi~Q܇{̘ϒΦhTͫoVˡeUȟdTnY8SWPB9!^M/O}���mDx{v~|pT���*tRNS�% ) 5@BED?6 :���bKGD�H��� pHYs�� �� B(x���tIME 8!��wIDAT(c` 021k3 !$صtt !elbjfneieeeHhY;8:iYY9$\\n^>Z~@ @VPpHhXxDVTt!KlT">!1)9%5M+=( 5*K+;'7/@0:*%*]RUZV^Uהց<X\3(Q[眞 gjhs0e<F} =.Lu1Dih6}Ys4Ν7Er$,jZb-k֮s򃂻k7mܸET C|m۶m߱Sb׮ٳ%DJJ+(* )Kq").)(‰$N��p%���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2006-01-09T20:56:19+03:00>+����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-delete.png��������������������������������������0000644�0001750�0000144�00000002627�15104114162�023004� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE��� J IJhiewxursqxzw~}kmi{~yy{v厒Ĥʜάå玐ޞ̳ף릨¾葔𴴲툌ꩫޖԚӢ޼ۺ���ľࠡ������oqmwyt���������egcrtp��������������������������������������������� Jۜrz|wٽTN[j\djY+Q,RXXʞ(7̦ˇ���}���tRNS�𾝁΄ρùҼ #<)/1230,-*"`t���bKGD�H��� pHYs�� �� ���IDAT(c`�&Ė۶m;vl߾s Dy׮-}8p-v1%v:|1 8~N:z]`gN={?ąP@2\J\Eנ�*q$Xva`ﱱsprq  AE\BRJZFVN^AQIYEUM]*o`hdlbjfnaiwptrvqusJ]qHDTtLl\|BbR;)w݇Jgdfe<SXP|*QZV^`PQU]S Rӻ(?aIL6}ƌL=gy .EÇ=G,^(oVYv+׭_~Mq�) F@����IENDB`���������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-cut.png�����������������������������������������0000644�0001750�0000144�00000002225�15104114162�022327� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE�����  ��XU���� ��������� ������ ������ ������ ��������� ������������������������������������ђ⟟܌Ჳߘߒݝܱ֩ݰسok10:9!!%%))""## ���}oB0���gtRNS�<pځWՇ hDWVH %$ 976}}+.,0 { N���bKGD�H��� pHYs�� �� ��fIDAT(c` ә, $qfL6(=+!fq $xr@ ҲrPEe0!R][ˌ++e``lhCvDQM$TsKn ?{eZZe;Q="/j&LlĄ.8yiӕ0CEyFԙ9 sfk̝7\ u5U$qM -ҞhZpqzK,]XW&alɊ f+W/_f0_eaiz*{"5k]\=<׮q^ rY~F_?�?֯ s OH�qNINIMKI qėp�*d]����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/edit-copy.png����������������������������������������0000644�0001750�0000144�00000001656�15104114162�022515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��tPLTE���ɗʼn‰ው퉋񽾻Ϻ󉍇���tY���LtRNS�W~~~~~da Ɋ>���bKGD�H��� pHYs�� �� ���?IDAT(}iW@@1mբV]*-tR$qV Nݯws AΎNzK4-7C$IQTW7P=-8VSVxhૂQqfHVE` 8 ��A4E`hxdZ$RJ1 ;P @4Ehrjz< \w$ d,]b!,FhGӯons9n& $Js}#ۢ9+|Q2|`1;GI k=2d̑೮=P�kMmgeaZ,i?qX.ӿO^1����IENDB`����������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/draw-rectangle.png�����������������������������������0000644�0001750�0000144�00000000600�15104114162�023503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��GIDATHՕJAϮ(1dam|JB6>FJkk+l$!AXd[{>fg^bxx׀#m>['g#�6sy{z9 _}Fw)6@RgF|ZO@@h Y[�2 : `/eLLhH@h&%$%9ވ~%+^:@D9؁`j0f?:k Pov#27zh*L^AnJV5"�\4^>OHe+ʲgsj@2LԲ,[e9 ٻ~�OJ'vN����IENDB`��������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/draw-path.png����������������������������������������0000644�0001750�0000144�00000002337�15104114162�022504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxڭ[o͠Iz6$[۶ݮj۶m[k۶Nv7祛U;?8 ߦHY4B_Q-pEl|ߍG)dw.*z#UonS).])Ժ9ty !rpWQmyd x[&%8{U}SSb\ )1dcgE26@20XR3xpDsz~<wګٹ?vd *=!PG gkm J|JBFy5"wɿTarfwa<Ի}@`u竂I2ȩì0atRrklWtReʅC{4A TIj?w=REMÑ[:SMp�nqˮ>JA~<E9W�=ޞEAgi5htSn}EckGYw秮 ~&˾{Ky?o>ao.H#ی25_g7gYTk=~JWU0?g(? ;ӷa\.?/;XrRi~$,db08U@=Q:Lwd-$7P|;c7:m:p'Hhy0lSuj9L ?i<d2<7빷Y7:((h$9z#Cwyb'h),l,:m:֌yrZTǝÊ ֢!'^3{{S:60bYO=z\+,yTvP34jl3~C'D30LÙ\sc-+^s4H-qlQ70|<!T{np?ym{~N|z׏[OeHQy0G`koU5 s4Suwl-+?{�&Fԧf?;a\|tc)adlpCk:Z+QSXX;v 2p3s/}K4`R$``/n2oJ8# n/4|A!SHLodSha$64 \ w'' #P@!"j@K@����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/draw-freehand.png������������������������������������0000644�0001750�0000144�00000002454�15104114162�023324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxTs[$"Zf`mնmm۶mwm{g&ݩ޿ gKˆ{8!>J)8C^S css@diK6po)aP1{|?AF"YϠ)6j)v՞'|3 @yL a>payhh*֔\C u@%]z O*: gFg/_zky1q[v0T%0'rȷÁx54 : l0VfyoCM];lh"DB%ˍc: *,'@B86 ;U6Vv}ޅ xR30AHY(/LԀ~v5HXm{-@ m{*[RV`i' Pq>5Ǒ.Ƚ�B̦f.MxNc z֪!]71"G:9t@F!p|3Vj'0-۴dakV_f tn|f_m:&97X@9B0z1m"Ia#& ~87O JH1 R/$^I`ܟ:JS9@^Ueڭ%)2#d؛qg.])B H8 ˂\I ~FmoLq8f- <o.N?C1אzq8$#7�^oS4bB4|1QXA9LJTYyBU}4$AiF?څ,'Pv M͞-Z8&YtsAG@^_PZ'i9Pxz&if]UOf#}!rURq昰QgtaC3/>TÆ6{2V柙b}Cw迮.g/vAa?2u`7Ij/1}]_f-_[,Z=I[t?!j2 ׫K#_ /jhdN"r472o < M5-5SӺ1`�uOhlcf,ʙpe>鏽5ѬI~2#UPӌx3؂,61mHx'N5`!،Q����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/draw-ellipse.png�������������������������������������0000644�0001750�0000144�00000001547�15104114162�023207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��.IDATxbPPhZ9pIQ!ڶmm۶=1mս:{Jqo:u`p@y"'Twr?9c̊&yl[[O~0]-ynݾgrY,q߸_8R:q[]ҥZ(@^8|XVɡhSsAQu,IGCGQ4Čiݏ#dn!}m/ ֖ePUXwk.LҴ Pwe`[415[T{aŎ*hd#ssq5I]Qc ^l\}LI}R=[A6&DCv{%:·QR~#E4#& \rx>Ȉ!5gg?ׇ|PŞ4p:;߾xk5N=t@>i`Ka<>X 0k+FܨˢgMFNYؖL. 4' }JƌѿWz=i+sX$7ry߬EAYmݩ]n c1'Nj~ZXMTE%jlvI b|>)VCȥ 6iS;ò v\cCl_ޠ6 Fu[W'`^^|H1`| = ĂtլB숖沐9߬[ ARXNDsH H-H9 ))7;;[>--M7## AlH~�*ĮW����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-save.png������������������������������������0000644�0001750�0000144�00000001762�15104114162�023370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���lwMyAlWx}nTqBpbtSyInjZQygDx?r?jlW^|ym[~zdx\BnG}J?ltMMrplwlTw`}n[zr|mnpkxenpknpknpknpknpknpknpkgidfhdUWSUWS8guc;lG}tkJ^[SX`npkuylhTr{ruk`ʃPc؛b<mᔖgQ\^NPwyu~ᱱۑה���a-���7tRNS�;0[IYH ݮsӡviD0gVV9# ���bKGD�H��� pHYs�� �� B(x��PIDAT(c`́MҊU_@^HYBDTLABRQZFIBN^H*Z;9;()#I3{j uO/�Kx _/???sgg�s?@?MVo P0pmND$PwcL,PO.X5(Ꝙ D3lEwbbRyot /L X+7dn^vP+;4(o�0,(̀"bWRZf �Z^P ںƦ60IwtvuIL(:iq90IbfS�7NB ����IENDB`��������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-save-as.png���������������������������������0000644�0001750�0000144�00000001667�15104114162�023775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���lwMyAlWx}nTqBpbtSyInjZQygDx?r?jlW^|ym[~zdx\BnG}J?ltMMrplwlTw`}n[zr|mnpkxenpknpknpknpknpknpknpkgidfhdUWSUWS8guc;lG}tkJ^[SX`npkuylhTr{ruk`ʃPc؛b<mᔖgQ\^NPwyu~ᱱmtente���;Y}���7tRNS�;0[IYH ݮsӡviD0gVV9# ���bKGD�H��� pHYs�� �� B(x��EIDAT(}S0a{"nq$4uՉ(g &)E^{.wX+-22~̳sr'E2cfv U5ںzdVls tvA"hKm@ bqB * dx D``l81ޓ~sh�(X)O)_XQ|^'gl- :g�[bB�!:^ Q}0v#5Uh֢Z +|~I}{#>A꺞�Tdh,1&s�Gt Fe����IENDB`�������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-save-as-alt.png�����������������������������0000644�0001750�0000144�00000002333�15104114162�024542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHǵylEnj[P -M*6bE06!^(!5`*!rXJ0@BXDx"FbBBcw;BQb$|/<k-r*+~r|<..%v �!~ !IŊK0ڐӼ~'n@05{l2OD<G.QܵsdL1+T G.5.�g!tZ P__clEZRcpqyZKo6}l7{.*1k `E8K04w \�CZR#%?̘(ЦcLD6Êo5X|qŊG ,)}0h6Q{ ccGe\~+`�)~VC8_2 G`(m K՟.}Gu{ &t5l=RCcZG{`h SpKxow37ױgY:;ZYKʐla*iH8Ğv+ohvN_Kf:dL`/4dc=ZtQJM8 9#ӗ$ 0["s?qbaPQ'.6YXk)Sh1y?c˙\S-Aj>L381qʛ8pWU׃j^eb;Eǹ*p3p/IR mPsEĻnX?}G /UY\5]�(ɏO)%97Qf_ǟVq ?1P^^N{{{JOK8<QG�0<կ2oѧ|Ȓ9avp3,V(PJXŢrq�\ڳ^Ū}4]pArss~n cGy/Գ$&z4ϠI 9^)E(fI J>KfޛWƞݛ)c&>׋F`o8ꍬIIwWW"hѷeDgp&d#8S.-�{z$'%!oN>- ;o-,VmsʩnVDBBfR8δ��bV=n?�5O?0%wZk O6����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-save-alt.png��������������������������������0000644�0001750�0000144�00000001434�15104114162�024142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHǽ]kebI6j*V׭So B@B滑M h]$;/fvv` \+<ܝkfKx{ <8 @ �BX!0oncjlmm=7RY>}^~*<mЀJR.kspT7 ̌;lM! G tY} 1QU|)#"I {?H^fapy2NH^W/=Wg&sgUCU+j]fFU#/W6Zܻ TJ`F>^i[}}XTtjqwrpNQF8+5 k{f*@ >DpܽapƑ.@1*e3`$tTs՝JtLv<�R|iuIW_buu?Uyd�j~=ɪJY8O)˒>'TX}ր5xx|J7;tƛ*c".ֹ8#^=@M-QET el6k<jW/"I= ί~kuyi |>'ƒ(,m"B^z#dHVm?s4Mɲ~DǨd0h= bYFQ7/^dx'g0,.E>Ps�b)@8ߖ�eQ:S����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-properties.png������������������������������0000644�0001750�0000144�00000001450�15104114162�024620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���kli���������������������������������������������߶꭯QQQgggiiiVVVhhhjjjkkklll򮯭___xxxuuu���>���tRNS�b*6ACFE@7& XG���bKGD�H��� pHYs�� �� B(x���tIME  &.[���IDAT(ϝk[0qXv5 1]AɐH&QYݴ_syEmY򟖌R?`91v8@"@FRj�XE@TE�(^<>�l@wr"@ʨ+Q$�@yIrK!0$,\2.stW-�T!nn�䬇ǧEPUxO!>jW[66wv{fu0Y^���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-11-04T13:24:38+03:00c����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-page-setup.png������������������������������0000644�0001750�0000144�00000001724�15104114162�024502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATxb+)R0dQ^6㍹xmm۶9ͱX:7իq%_)/}[ꚾhƜ//\ l6fwE.UV˂ޥb_6=e9b`zzAP0r9Jsz<A)67=k<LMM d4zzbhh'hȦ2Ly ֆV^@*166Ɩ]\9e%-ؕ+Jèa]]]h4 -hhju8 (l| ^hnnf=>> - <>-59i0P~u30::((gg9Bvj"= "2illD{{;U�&''Wp>=x]qBE{lNU,z-0A9-?Y+;hZ8翋SGUGb /IA]]ZZZ Kخ܂,Ӿ Q-ǰ5E˶!AuYHVXፚ j188Ƞ$.H2l)࿃)OЧC,[3_@܅(JQn@u e*U Ps brjnDjE+>OkIbzbSs*tACC*++ A9888 µfj'潍-/!2_F$#ۆi"n݂d"(7OgM\jzJ(r7ݳD0B-ؔ bKqMFan u7N#Iw@dNDv^1=O|/y$ Auu⣿mL{^ZކNC ?t(' FFFRtN}k׮H$+f,1<<BYп�^RK����IENDB`��������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-open.png������������������������������������0000644�0001750�0000144�00000002332�15104114162�023365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���VXTWYUVXTWYUXZV^_\UUUUUUpppY[X[[[zzz{{{{{{\^[UUUZ\Yrrr]_[ooo[]YkkjZ\[@`�eee5f6g��aaa5e^^^7hZZZ9iUUU:kRRR:kMMM9iJJJ5gEEE^4dEEEM}4eBr3c���FFF6g/X���<<<9Z4d3c,U���������������������������������VXTUWSvvvܜ嬬柠ȦVYWċ6g8i7h9i7h5fusĿ潽k˩⎳ٖܪṹ`ҩ⒵۔ܣ޵Vz٨▸݋ٔܝڱLtޚݗ܍هםޕ֮Doߢܔےۏډ؆;iޕ܊؄~|Ӓpťtqτ՛<kp}ԏU~ٌ׎iAoQN4d���9U���KtRNS� ubP1 486( }���bKGD�H��� pHYs�� �� B(x��aIDAT(c` YXXY"` а~ADdHTXxxtPL,E C%DSSS32DbY)9޹yEP ⬒ҲʪꚚ:I)iL}CcSSSsKK jjmmI(wtvuwwwA@OOO"XR_)` ӦϘfVK͙;oXh:XBceVKh]~Hh[Zj6mN;w޳Kh;x08o�0<z dp"q)H(%H2 wpJ897wG3OT'��\o����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-new.png�������������������������������������0000644�0001750�0000144�00000002106�15104114162�023214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���OOpORO_O\OQOOOmnk���{ono~iӔ숊ﮯ���iNc���tRNS� ^+:(8a)���bKGD�H��� pHYs�� �� B(x���tIME "-��GIDAT(c` 021˜H@DTL"!,�R2rlP yE%%eU5u M-mN7TBQYIΞ*䠯PrTVq feJxyzyGDFEH2""! p K K 'gdf!Ix%e�'#K$%gd!I'E%UTdUV"II$m+/ihDJn--mihhiE̪jnihBHNkmGP]3e)S!I0D�!7��,[;5U���%tEXtdate:create�2017-05-21T13:49:35+03:00u9���%tEXtdate:modify�2005-10-08T22:34:45+04:00_����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/document-edit.png������������������������������������0000644�0001750�0000144�00000001731�15104114162�023353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���������������������U���   mg& UQ ###]"""HEZw]zvNkuNkvMlxOnc-`;n|ȼJKG%WFAt}MMMiBBB{VrxRnbFFFRRR`suA공{}ź\k<^ȎɎ)'ޓYV;! 999:::AAAHHHIIIQQQRRRWWWXXXZZZ[[[\\\^]Neeeggghhhiiiji]ÞͧݣOn���mtRNS�  !"#$%&)-//027899;?AABHJNOPQRSTXX]_bcdvxɗ�� IDATxcVqf XEҢvS͝n.1iU<&v͙*<7U<!՜₊P qe xQi./D</HE\ѷ,]<BU ,^..YQ7/".Y /,ˏ5AgI`4%(˗,Hʏ6qx$%YL% L1f`�A ͞o. &b, > eثAŤx968F:ʂ%xVgJ s18 �]: e����IENDB`���������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/copy-right-to-left.png�������������������������������0000644�0001750�0000144�00000001620�15104114162�024244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��WIDATHǵkU?3$= -v/!Ko4Z-md=-)+z?XbL[ b{+FqK 1vdgyxowJ|f}[GDx8QqU𥁁.%#"Gͷr`bbqpHou] զ抈v"B=/Tzb[&GDZtzrvɦ Zdrdzxp0J=}ȗ/*Z{rpx!y=(j"S}0[K}!j VK%ds9L @kͱq XwNNطfY,r'typ*.$p !6ҔAinW?+X^6Ğ"k݁R/ymRSSpJ bm.}ؽ@={]Z CX"S75Z;2^HYس]3.A\ w@ΩS <iB>s獈CGGCVW@OfF)R?П+9wTԔ!O&M6+ . -L"-�74hBΟoho=_{a}u`SDyu֚( A|w|7= !%#*@`QV X3fN-L@/0�d]Wt1dD -T7o켌]ky<P1Ԁڣ{pJe1aS'P:edP?(<H~Y$ /MwLXЊi�p,i*FZ8bw]BV." : g"Ma����IENDB`����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/copy-left-to-right.png�������������������������������0000644�0001750�0000144�00000001604�15104114162�024246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��KIDATHǵOhTG?3o{4"zPC^[JbYQ{qՓzz(A5v4zh'mnV}&q͛wf֚ԇ,=x׳gfU hv ccar~B `-+ɹ/^P YN ƝF+45ʕW#[gV֥RQ@kNC+V<k-_VUX#l"Q(٩NRŝ۶)Ǒv[Jp]A榦O9L `r~bQk}<adG,_f%ԁ˵]7;N0f4_qL[8LO*� rJ!v?O1֦.B›705332! ,Y|ZZ{{YwYy ?V HLl c6|slY2I[,D[V� #}ذ֬ar]]u 5:P*pne6)a&<ޝ>̓L_o} *Rzu>hlNGy6<ƞB)a=$Pe 8{zzGGfOx=9eYض]E2DJ)6`N�˸ oS >TRJa DJ$Bn,=TpNdx|ܩ n<]/ !*�4s0CB ž_'D%\WOV߼Ut0y*1g*@Map"STGq|f�2F`1/q%#XM)te����IENDB`����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_visithomepage.png���������������������������������0000644�0001750�0000144�00000001545�15104114162�024140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��,IDATHKU[HTQ]195&QR~ G9VXX}}C!1*BfT:!1+#'qƙs5 }ξ瞋 ٧8\A5 A ڃX8tw ^`Icv;vkQ1 TRFmָ}~1uHEEPmcOWwH9-"M6v\tXn»kXLybn#YI Mӓ89,. I!Koڻ"nG0o1`sCYdoAvY ^m̚dȴw}D=(=~%ÐvHɟ $fqU7i.dDA/]]e\@w]J>1GO!q)-@ޓOM Б9 d_3rpqMʜ8LDIa7ePYxՎg=dpBN!M2m{405 ?Ŷ8&(ryd" b_8>9K`߁$ũL$2͎$tJp G1I[d%j:lQr悽i W\-׍>`Q>=3sV>ot!I#[O,H APq lg-0~UUs{:cfB mp5i;uimFg^i]^=?!ݨ2哝M֏ŘfaNi,F}E1���@ t'����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_view.png������������������������������������������0000644�0001750�0000144�00000002137�15104114162�022244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��&IDATHǵUkL[e~z;=6`m@&"nqn&uDI5`b4F3LF/Ⲱal#Hlk1ʄ4#R:ZJS1?ɛr>>yo,{8aD"ƍPג@$]looͣ薛d"& ًt@ mϷ4E450'QQQZ`0{VT Yt{jlR�! p8S1P 5J A* RT-t=aie>dɅ|Bbf�<j~:n߹T'P(bv;(..R()SDoEm>8},JKqud q+v*K?uޞsd:= :EUU523vǀ,,C&c R@[W HDȐB+z>>pawUDSp>Bաj\Լ\XDJR!كF}j0<rƣu;3͊yyi ii:#BaZQQl(Rdw|=DNv6V+;RTv&X[]E+"Kn�sdH {077}yvnȔZ}6ߍ!?/21<q|*x^,//5(/-Wp: 8PEO�w;.Ⅾ/KHKA|+0<kׯ _#XF]%'mDB8x=>UV#E߱LQU0 0_w L5 ϪzrN4D-.]nI0Llj1ÇuNְ0,+#D qc:(g^hgI\r>:Q%"}>f%lQyMVu2>CF'.$i|۞{lY穧U2j hRx qel@|y7@_MM����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentpath.png�����������������������������0000644�0001750�0000144�00000003121�15104114162�025041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKSylTewvt[XJ[B!"l &F  QQ@�C (7V*"=v{>77D?OvƧTbf-halb8jz43Q9ߕ޲d?˭Coo3~ zi}5ZdwwѢqc!hVϋMe].{").bp'ܻӞs57ޙ Dͦձ`r۠!qݗ1[3mĂQܠ~".Hʄh201pO:)f0av LYFPoծ&:( vVU<բO|sH62 ]cG,6Na)k`[<}^'Mbv`<@ڱ^C_I!3&p6ùr'gp;9o L T^ЃKtdM6OU&^*I SM`*e#ز^J�MCrr #˚Nm0O�RQ"32/1dtRn`DwMҖ,Ðb`+W`Zu~Lc"7JMQ3H1cJw (un<̳ӌ|G/s z55 e?n4ٮ h#+\o|ET=ARҩ.fM6cAEqUJ*!0ٳ1{{Tv"˼)[MM{`MUĢk_*E9}3[d; Ɂ*Js(N4GIⵐ 1>ZUZ?"rW鮻_Ϊ x$B@<\g 7~�Ƒ � $hJvEl%h$)Q~{砆WL|2({0fB˹ӑK 37g: +㲙H;Ha-RU$)Hјʴp@*/K�h2JdUԦ())6VImNO,=+*-+ -VJ ;) FRoVoNA'͝;U NQ$ !t0l_1͸q�kd㞂[$~z+J,O2  y 6YEZ꬝Drar,_/I_mj¤gnOGqT8陙S_~@cQy/h j=>Ų7u9n;}C;q|޽g9ca GBm7^9 5PП')//|C'P׭Z;P{i!3Q=@Zd4e㕌{b_޴iӵkkvפH\qh2Yvv|h\#Y%ɣ݁Κ˗6L&p*++hv(FG}58c޷'՟T @De�/3JI ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentnameext.png��������������������������0000644�0001750�0000144�00000003013�15104114162�025546� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUylesv-]X)h!A`bDI0iBjIDc(HBP()A^{_s}~3[j(yoۅg bD:W1q'J9Ķjm$<61'GGy#1 zX?-X``iĘ~TIɾ:GbH}h::/ri T|d+[6Z _]:ݺ j΁i32&3dQcϮ!0vl d H#,)f߿<B7L;@~lpGdS"d C`,v,^P߳]Q�0d5wt.n6ͧs0f'вL7Ȅ txsVfpڝo Szutͦtc`(Gۢ~<zx bd7Xݞyn+.y="I�4 Z/!5Mt' \K7,\v(d|Zy셕9;5<ps,�+0c[)EߝKhP:R%@+2}Jlj0yfg64:9ylAݝzf!ɦ apl~EU=A׶V~ES1UbJ2.3r\4Sj}7H.2o[}�tzڧd !I]}aaff{g0a A%PUϹTL$ZHxDčj[ g/g- E$rT9x$; |K)!uQݿHaP �A54~@S@b|(e6W" FH^r9eP`zuN_K72 v I7Ea-ZY{ hp{$mxKi$ @T%Qo9.@<)A`e1!Ed.(41};q5d Jl06ig!&J(eͷ'3 c!'E)Ppe# @KN \,p]p5 B9H%񟆙M&>%)^ OA,Ƞ"B lF|QI7rB ˫_ZbͲU/MSjqwա32V @ZGl QjFԄF&50trf~EE 246qAoNtl|I r+x7�<C"8阻iEӈR2j@Y>-PmE(eD ZbhnnUUppacvd4u.Zh3liOf:\AUy Yk糽a˖-ៀ0EZ�wpta{EU"����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentname.png�����������������������������0000644�0001750�0000144�00000003022�15104114162�025025� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKT{lSe?{nv]ƶځh9EE`01Ę`Q'@b$C ഈQ`Ƞ&u}އw۩l%'߹{wD_YS%>~VG= O777Z y`l̞``Co_tN1}{óg r ۑυ-u+ +yȗ5]XО❚%[h0mӹ?_hl̴l5]jZ0 Hcʿ*6<@>S|ϯ IA5EoCFZ|ؐC9A}Ju3-@^rrL!PjõN-Z'C޶L@@[nY߻][�z0ţ Hu �8#NWNu*hM6jnE[0�u*�zK!c)6 *@vFj 4:#<dvgHn7+�4 :!fXu B7D>̧pudU)dZAC,Ӂ[Nsٽ뤑sSu" NP t5HV@vrTf&)i ](#$dĵ᩼sm޿ πRgP\w١[3)YA< ދ})iׇz˴wFDQR1ILD<IT`ق:0{Se+Aj!It7^|DEs e6ЫFAPFI H|$I b*$ѵH;'A1L+`EzCye*ZE0F΃$pIHMv)꽀+ > 4$hڥː>8 b2<@~`F= =MD"Fb$ `Dqc3vͪa*:?gm9L٠I=GIGn8L*-Iɨ8C/XU'I\$X#$Tzx>H X"Y13EL'LS+kEvOW-͗T5 )u~_,I" G.M ifz,)=1|0 +9r&l|pe+4-b%‚|u(Sʷ B:xSk4~c%#r!Re JѯmV.??ess3>S?|b ;pq|N roȩV9wZL<|KKK.=#h@wi(HT,xY?͇ rn7Fl~vK}CC#>Ϡ(ޟ8!1wPHTjuBL`2T9Cmcnd2TvZ3SVG"S hjjjlqe[nkܚ.�6@OR!EI7Իq/gH����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_unmarkcurrentextension.png������������������������0000644�0001750�0000144�00000003066�15104114162�026131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTklU>ܝ}vҖn[P(M#G5cIDF1F%DDh1&(FE XjZRXmWwfv\?=oy-`Ϋ"a`]f3[F f`1#䛸5PRlg'!'q 8˝޿Sϒ{fGnYpW& *+l 45Bu=r/^kOK+=>^MŸ}?<pk;4&ھKNpe y@m-Mu0\?="`Y ^?*:U^vjwI|PkgqE?3Ompl<+=;nZ� Pp,lبώ!W' C ɲ Jnl .Zl wWZ |U-T6cȀ/5~gձ(uXEKdv\Ty{0�x u_:WVNmgd 8�Ot|D!|b:م$ֿ7fkW.beĥ,6T ]SOlդ cdhMYȼdZ'.kos'+)h>w&vT7pWA:_ ^a-v6Kd&[6oiMgW\;JXekz6.Go6@*ULLzʷ{͆y1Nt#:)f%t,K"sff^eZdt ΃kUO7jn 3:XH!YLAfj8m?2; c9Cۚ;hgA 䇽T甩K$BTL&%qe<ǭhzN4!�UׁFz&~;*JB(+dsN,ExD7K>}g9QgyQnE.wx%kIH %1Nc iŜb f4́tՉMC�lq[Ɏd3 9D!N]l.'*JEռa/(xX7@n!p]p,Zy c̼{7>u_nL"(HY!N!4KEKMYL prP=K{MΣs+y'%+Z VDUCi- zONE^`e i~M]u5=ի5#JC;o1Ùxʙ __jz*r9-;C>I(-bˊZ&f@gZ^i_ gl,oXSs"*C_Y$j?iGkP(b =mraۡCںuk2i:}a,$˃7ܬ_^:(ǵSr%ZP/������IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_thumbnailsview.png��������������������������������0000644�0001750�0000144�00000001717�15104114162�024336� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU[hI=]=3QUwEQ`"Ȩ ⇰~* w7*"˒5 !DPbL2It=NofnݹϭV 7 1Nr =_O|) e6gg׾:- ҙV18 i@JG:e(4_W^ݡ8*dR #PX8In se;orDoiǃˁC]<̞p&q򮍫T g}xENBke</(e 98qi '!7mXXB̓"0Ot;^�:Қ6ip.*BM;8Gwyݨ^hӯ< N3)tiDBȜoJ#HkM~S:S/s$IbBLMp]6Q]9ANk+)<13@UYi?a :-ku׻:AN [hX.U!o^Ь1U;oOo=M48@^KMlX\[r*w!t!֝/ 7c}#43d ܻmaihaUf5ȠDnf½[+e=9])+"GQioI$t} Gvt(nSIӍ"#-6iU0Fdxilj#vJKPM)H&dZPˣG#W3ji+&7A%_Q[ڟtԜ,*O?TlĔc6E|A/ {CScz11xd!Sn^v $[xsmCJ0I$#RfXQ)l7�._����IENDB`�������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_testarchive.png�����������������������������������0000644�0001750�0000144�00000002272�15104114162�023613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUkL[e~NO-!07D ,2Lf^&Y1YCg`3l?6GbD8*3neRZ 9˶>ɓ|}=;}ӉjPF- @K|QCpmǞ8_;^ }VώF26Dhyb~w870w$4>|{V6ۋ>m6U߇EGK&H%iWX?'@Se%q*U͠3Gja]OCS=X'f5SVFA _dud "Q"BKvɪHD>TpzoS8E|)am ڌ$bFJl$\Ҥ5Xxr[?b;WaP\2 !A}OK$N +^}.s=P[L_N={*y;ےȕLk@.QQ ŭ b琯aQuq֘<55AK`*u^N|х9(8ٻ<GMa\f#.% ì KЉeI|lJ^ ^;U~>0Wn݅x d]xvd%!-/a~Q$#<GЋ,?*e1"իˬXsDn&LV0":hq `k'g!\(W#ʶc G v.+*K`AbiDc R1DH `9/⼷-:p=kݢ 4b…K M-L HIey#ؐ@RbbM'[N֧7P^)`h5yX]7"eo8߀59V -SQڃyd<,fA`1`EO9vb{a iZ*(,g \_StM͍&=PIV/!Hnr$�^S^/.Z+ agvo}!:>e=wc*Du1Pr@W"$4!O(Fep!턗莮`X m<y.җ㐾kfΜ]nڿ`Mbgn#zkHU#࡛\~ ?DSUR����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_targetequalsource.png�����������������������������0000644�0001750�0000144�00000001510�15104114162�025023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKHTQ:ޱ:AT` RA*+m $h-CBT+hA R+hQJA &rIe{sܹ#Xsku=#C9C<e#2e aߺHNyD窈!/coܾfyt[Juj/dVc_d XXC5gsTS=:|I@"c5U1/ <n rlx,'8G1◆[оzaK"7J]V^Rޕ_/ c*R25UO&.!+_9k]mNHDڮI Y&&N@ʫ�&!{;R/wbnFd X8{ld\"cDyI[K%Y\NY]*G /$ܮlZ;nC\@ҡD3Os?4b Y(}+cB sx,IQZ°1L~.�&lp.lّm@DnCi2@�"YuTK1"+X=fDE8 ͳ O{l8NAՊܨ�":i)L.S<~㾌Yuw|ތ7fZx,0)fx龍rsR}'b.j+$)=ӐIȌgÏr�J\*.����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_taboptions.png������������������������������������0000644�0001750�0000144�00000001604�15104114162�023452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��KIDATHKU[Ha~;MgbЅhYE#u[uDyStM!AY7!.3D,df+rA綿s[Zz~>x=|ϩlq̚Y >3sdaڻC2vKY7GX0Dd`c[n9|]+{6-VoHp>F2%Gn.^&<Yv0N9Yg&s$]Bh-6Hf IY2Ͼ-ZQYL8- -x€ASԑ[6LoGC*,dLŒѦ赀HΙp>(( wP徍)3x\EUavy[aorZh |?s~5.׻W0\P1Lea`;o۸HET b Z<% mMO^ȯ[)<sw(͈x92 =HZ uՐH wlYf?~+f^_wv;o&ݶ;VZ^d '3gXCOķVZZ@eI+h4>YM k'jI"#+TU##nnE1Zmֆڅuuv|6___0v9NȒ\[mV&_xʭ\]]ڼ y`F]@P5LIsK.[w<%TYuZL]s\prF"EGIgOq~up=J-�gDv&SD4TDr����IENDB`����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_syncdirs.png��������������������������������������0000644�0001750�0000144�00000002022�15104114162�023121� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKVkh[e~sIz[][9ѩ*juC&+m8_S?kAGJqR . L.[=MB;IͲ|D]ne"u�.Ń2L`uiU.vP&woLґQӈv J[̏ .lk9@.Tl["ߞ־Zަ=`ŕ-Ql+C1`c'~z> 9LAU}150+I4Mѕ uo-Yjr+Q̎բXJiaځJƒ~x>{9˝p_`Sre  3@1rwLn:?(紁$J /=@} ً3r)I/IA щ>ysL&#˳Zl{Fk" gU}KKI$PWImL=r:@kq{ˌ ';Cc˓tyDd_ʤ==aSBq.8vB!K/T"S[ < R%}DzGYzuf&q7T5m7^P6}>u["`|e#|>X!;jk^44M׆䳱Swj{+yS_t$F#h1e#HCd/XK&S twIG(S4M/[Sgh-`zt2t59&f2k r3c:+z'DD"EÏӛOFux{\ap&e9MGIrF.18"tR.sHLi`+0h[_?ZapCރ&5t} BN9!u`zS?*�ȇk} R,����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_symlink.png���������������������������������������0000644�0001750�0000144�00000001601�15104114162�022753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��HIDATHKUKTQ?ӧǬL ܸ tH"eTa+[\IWVR2 iZҦMDZD;6|5~޼ͨ{s{=Q4b؅x�0 annm7ʈ[XV+5U*\6GyH.|5DsDd2YF1&q81Mu}}$n AdAmӗ٥%1>>~t$+»ВI:"ؘ]\\##j- Or MBYRU MWĸ9طS <$' ټ$EwwwE:^TM؝w�L,ˢPR CzԃUIQ夋óTMg@8Wusx^ H?|xBW9J p8%;Z3㐯ӒN H3bQ3zJ�?KOI9�v΋G`UY_Qu:}3=uoљot *U*H KRAq?Ǔ*B Mʩ:pdP$p WB9G&2lb )Qk1d4a gmI^vxr(~tr?! ZR?HF(� %0M>o8X kͱ[a>Cl^۶{p}\<oQ\ܐe{,stA{ޢ[ڄG@y> tB rA|[I-)BD�%HQַ����IENDB`�������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_showtabslist.png����������������������������������0000644�0001750�0000144�00000001251�15104114162�024014� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���gAMA�� a��� pHYs����od��KIDATHKTKhQ=?iФ%~h j"J#n*q х 7*n\uQjP"& ZDpQp#MLFޙI(5MM<ܹ3`5n}A0WEB֎YSN;dvi@ܲZB1O:š>']=ɉS`w{pc <57w:s{9\'_.]e7f+;C=MO뢐ZO@uΘ;I8m2Śol/Dt '<G)YLjMb# *7QLJZ~2sgxRW;V Śmڌxt~wjQ۬ILe!JU;h51z8S=>Me9NFC~(E؃ހXT Q,Is63mr\D]g{Lk>LlKeXd`l[4M37+M'tCxwh!Ya;4>U-mp:թ-{Pq |3[pSӐDј5&۬byI-Dޘ+?^�ߚp3����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_showsysfiles.png����������������������������������0000644�0001750�0000144�00000002035�15104114162�024031� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU]lU~vY:Uc@M# )?*7$+.+.K$nGbAYL$nelvBYakf>9;}ҧ眷{SPH5߶LCA /;.yǺ8@E C/3pM z@Q& T0*@5M[(0ŏC o?G;v,3߼ֵx[9RҶ0Wƥf�M (P4>M1LQ-C+.[2ݬ\;h\Ki.4}ub*xT]U:i7kٕI0lƅqyHȄUD!e\eUO n%̑<< ZӜ܄t ^Wb*D>\CΏlx;LNYNK;WbObLMUy#\G.=ylG Ud6K).XfD\DQb5\"r}d;}Cp*IYd2Ph0rC\e*XV(RɾʋFGbt[L`$<&?ccFхg6mÍnn;7p@+]į#gSX^,7ucɵv2`NhTcN=j?N(DqM@+ Y^90RTԼ v~ԎulS1KnrB|3<Vrfбod .F Tý@A@  -RjL o|Ҳg74ٖsRkۗq)L6JHeA(=ۻGkcgX޼U{u|V|M(9TO=�kgh<Ev~n1pwohQ:XoK^הp x5xE5v(̆9o&!\I/;Pyg ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_settaboptionpathresets.png������������������������0000644�0001750�0000144�00000002104�15104114162�026102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=�� IDATHKTiL\U23tZ .bbR"i]J.-v1ԆTM1416 &(0J;hKdԱXCiM-Z*0tf]}o -11~/{9_N<ELٮt0ƒCgFQQjb w>h]Ѳ{:m$! zoxy?s뫿Iy2nC/ $ ӻx<ٵ9vdJ4q%Ğu r1Y808FAJKɆYM'+K!LE< tDxYxz9�)QBD)}FeK$e 9o_t 6Տ`IN+A"Xa&e4k;q؇ό;Kk:dҰb,+0=ܚcPClI"AvAtx,hɄ>ځzP{KSyg ˭2200=iFo]ELEdhnDYtoeg ~/:�w`(#k; $0Dl$:4E3w>R&,2}G~{Eo#.edװb++^W!5[F$E#bpdȯ�ٳp a@v67ᴡHao. AZ\4e[~S'l�1>DlZh1dfoC7.(/ޓ!U>|#߅kPX şCd)lG�}8=)72 (»;W<i"y$#8: (ZjD8Fmb'14uv҄uhهy.v"3M?zp'|O*B94Hcq7AGD&_W&XHnQDc;(D>2b@P*6c<]k3_B.QՁ5U VI?gjzugh Kw3?c�+ [>����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_settaboptionpathlocked.png������������������������0000644�0001750�0000144�00000001372�15104114162�026044� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKHTai 20\X( z"cm$Z*njQ AIARcm/ҍε{9硎 =|,B Id.s\j[5`k yG vyUbM71;'n|Ny@}q_Iy!p賓mn~FS")"r!G ~|hפN.vg]�J o;Ӵ\T? 9jQUsr⤀ʟ0ߥraҟc5 eENN-P^* =@!5 w c|D0M [CICgK pӂkFߣ^`n=C"&ZV$4=7ȹY _~l0P4QCoɶ~,Ïc,(W m F<pոarivc5Pɑ0hUs:Y*d^?Xܫzw@햞u R$6]xf`[A}umPT"V(5*AWrG ĉN,1aPDtj^6fݲ?3.g" '۞GD7ť>$')A]պ`mJ] +^8.}V3[MுϧNo'(wەT ' J>c����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_settaboptionnormal.png����������������������������0000644�0001750�0000144�00000000763�15104114162�025221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKc?�###M3@s "wA i0( LU|yְ0Jތ@wf%P[?0ٖ-Y` & a ? :(fCO!v,p1{jP <77)k9X$y.<�Dbz^ l,,, 3A,`97nV.(*#ԃATb&- daffI@=@?3ل,`SH!!!?Bl = ÚA7lP< :5x/v6uN1,I5Y ں埿 .ŀ &5`�"&xA�CHUB45A@s h:�Υ W*E����IENDB`�������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_settaboptiondirsinnewtab.png����������������������0000644�0001750�0000144�00000001666�15104114162�026425� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��}IDATHKKlG7΋G�"R "H*zB.H% āH E@  hiHı$klwfFH@Oo~3}3,Ks쿰J,٪=`>,~q 5ƻG6]&aY=1arێ;]yS&ۡG7;rWb;7GN<L@/C]VBDoww׸ɭfJ`0U &V`Q.2| $PbpmA]?f"Tb$ j&ʒk)Ǡ3v(%Zo^vU3cؼՇo=nԎ܇2mؼoy^(j%["GFY:= v C Dl1n5U \q)ԔY ciRյ=0Y( 5*0.fM[aG d$0DnF3 9yK1GpMд;w=Y`8{�U]ǡ*fg+M͢?$*Nwͦ{h)gy3owa K txMk!n#56S}^o ?\:�]Ӷ"o'c˒iDL#Rb{ : m"!\;SAi19ךpHz')W#52>:]' (j9Do*Rd_ 'HTRzHgѽeܵ SYcpfHEq6~ ~& %-=ʼn-?"T"4-F80KTuvEg ����IENDB`��������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_setfileproperties.png�����������������������������0000644�0001750�0000144�00000002031�15104114162�025033� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUmLW>۷4E�Qf2' QTHL-Kٗ!6Ә̘m?lkIhQᇟAF&%P(g眷-<=sϹ{o5@)D[6;ϩ`X̉aP0AtkbZ >v\b<3xWcACJ0”},P> 탚c'X,ºh oU4MAIhL@־@>^h%sie EaYA[ VV8]ev qo_ꠚp*9])3R: g;Rci6zD^CLG.vw . C }=r:Cv1l6z`.7G`=Œ-VlvGC#^>"}[bGVo&ZqђEnnnƴ=gYB Vb2looǿߒGUVly 1ln~ grf5P+w\8DV.Нq3g8`G>E l𡪪XY]#lc1L/HL*_6SiKFUx E%P\Zm.µ+ rde>q�pDV +WxǏ&ce+yhhv}aPP-8Gs8"[tׇmvd}Ot7;lK:κcWKEJ?(,_~S':fŪUs~=Z 0 !g<3ؽ{2no' 5TdCzc ʟ.񧕟h ,^/| IbP?=x.nlh2"sc>R:T`KwΚ(9B+xZdh0媜G])rbĹĉ|1xU|HtoG$WG S?vt0؃ e����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_search.png����������������������������������������0000644�0001750�0000144�00000001733�15104114162�022540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���������������������������������������������������[]_hilWX[oprXY\npqXY\oqtNORdfhUUXikmTUXlnoMNOTUXUVYWX[XY\XZ\YZ[YZ]Z[^Z\_[\_\\`\]`\]a\^`\_`]^a]_a^_b^ac__c_ac_bd`adabeaceadebcfcdgcegdegdehefgefifhjgikklolmommqmnqmoqnoqopropspqsprtqrtqruqstqsuqsvrsurtvssustvstwsuwtuxtvxuvyuwywy{z{}z{z}{|~{|~I>��� tRNS�� %'+?CH!/��uIDAT(c`@�$#H$؀ BAl1}Su88 4D(!okm) 93* 43BBPGOUPG_ !p6H( ݮ i*Q\UÅh VVaHQk´c'T"t0 ;KHY1A$%̛5E=b%v` Π9 \88Bkp%":xiqqEO/Nrs<#9hK;$fyjDǤ(MKIDM=,OF+.b$bsK bA,+#||4e#+�qr|VV"��F9kt>����IENDB`�������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_saveselectiontofile.png���������������������������0000644�0001750�0000144�00000003116�15104114162�025337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTilTU>-Kg:KiK[BUD]@@0FQ$j$@R#&Ƅ@@ZVXR:veڙLg뛷xL)X%KN]=}s*w)0.ecLX>ϱǀ]Wn2\J,9 +!!n5c;.o%8.SkpM{v 2?2D߸$=[ѣ{VBcd>AMw7AR}quM^]d2zK~e:^f<.Q;@BF:|"ACoU";ܫIZ#`IW`2,`||,t^V#m1&O=9s5wu:GHCJ{{G[@+-̡dy ՔR d9y [z[7 cLuyV2>)7(}BXQvQPz e[ywfgBAxXLΡ7\,{ p rMŸ \4D-aBC>­#CD'\jNU` e`�}u-;MrBme$QdSOVyW^ sYijЙSAN($ #Wm pyeu&!%IG8Y9)\q9z ¾fE HQ(X B6O0SK�dhB h.dhkuO)4V<BѶR ) ޙ((,ƠH BrHL3h&)�Y Ƞ]CZJC:|J?pV:B$>$@�0“\3%jvU'"OHhRDbb??BNpv)φ\K>\GqT*I C!\�Okf`\ <ozj]Si+\/.:7,bG]\-br 9 C[?Rj`S/&oɻ"#z '6siC|B\8wXp,E ˙ uځ)l62OS27E'8~u䋮jA^ =c܌cuMݻN*qɳ=DH ¼4 RgT: v�!SZ4% Ēb=((j, M' g,%˛"3S% 3_XiiK)b< _8(t} U- c_�W^̃7i02$$�4kЊϺc׍:_o/|-4$/HZm< Y 5a8P7(9;4L_nng5YnH%0%"Pq'@cS}pTּDĥLZ AoRYk\pet%����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_saveselection.png���������������������������������0000644�0001750�0000144�00000003100�15104114162�024125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKT{lSU}ֽ˜(/c >`Ԉ&B|C q:h2E1eln[vmۇ1/9|~}W}Q>Ǻy _6%˭<c)i? ř 2߁؈ÓKw1G.P2VԨɚo\n=j5-b<2ԷVZ_2ٗԚw:aZj**' ϫ˚zqNcu+i:.Z]O?( #d"5oscֈ&$iتՖkTX@ }X-#`tU&Y ЁÃY,<:�]<xͩwG+m%iFfEROO//2Javѣm~LJ#U97)sjS JS}bɮE96Y+O uـ$I\3j eۊW3_$;yi/p*8�e%ZJleUq>CAXd'O9^GuM=0:/!KA8tk17,SWUNN>'/=ݧC;/�Zg\0|.A8iL޼{WK<uG O3gTE1ZoJ CpvH,n4FAAP8A)2eܱsy7%GY�1�,$ *|Ҙl tT 8!�ѱX̴)48>3�BF'BI q|YCmm# q듛Qd[!>+A7$�@ylNp畑)!`DG +n,Ltx(J`ϡ }cg,fjTd٘w�)?&&q,t@p"(1)8|nnd߃5%nۭt;>24fKiCfb!fZq�RoPnVLp%Hq-owՙ-E|_ ￧rcq3CC[p(؇$ n~Xk)^_Θ;'޲LI1HLH\n!Ih0x1xܱ .xZSe$"I&g#:\ghB<:ꆍ> pOGHLn�|pg dY2PD ¾1 ;pu9v(OmuÖUS|u�ΧK4;3v:Q.!O_4-Y(�ZzMɜ+>DY'$~_yҐB-z~ʧ x4ʶ2ꈵ%* X~mط=?/p )"NVS9euHnW)Gg#!ʝXBD^?�6Dkh����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_runterm.png���������������������������������������0000644�0001750�0000144�00000001062�15104114162�022762� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUKK#A$e݃EB [.B~ �O!=xxӢsXA<>!OCqz&GGwUwЁQC 7}!'D*Ԁ=$;3dcqr%{>Hk SK% /:G_&hnUe>lnH¯%^]4NUŭ3Rpf|ۮ m2= L\ RJbF64LqjvVfF z@mb/ޚ`Q*P(3uul4d2PrD"AApb* HUr9aE1чQCށ]z\87\mξ8y0hǹ1w0Bxg�o 躞s*t?xҹ9&z~J_*H$ |F_#kt�SpK ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_reverseorder.png����������������������������������0000644�0001750�0000144�00000000557�15104114162�024005� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��6IDATHK픱.A@( BJ BP($J*VV��BABPpLlv7b4Nrrn{wgWLfX<vXaoZ`23x>!z4getW({xV.8,菱dxG(hnqq,+bLTT6?~gxٸCo6?1:z,΄CyQmQsؠ^{DYhnYhc=^ 6h+t|Ñ2 ޖ\E;ᗫFןJQ|b/?b����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_restoreselection.png������������������������������0000644�0001750�0000144�00000003141�15104114162�024657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��(IDATHKUilTU>o7ft/XZ B%Rƭ($Fchĸ5 @٣ J[ZYL;̛7oP?}s;+<_Yvu1Z1H-XjBGz L.\-?hw8VA5:{5|ϰo[OLL{ǜ>5 W4O5v *>Wg/[:guiѮJ%pNQHk82N)#o�ksD)ee9;4xf !^ω86I0؞_CevotUS,6fe7/1: cLy!ɝmAA$$@9,|%[bVNа,dVZ+lohp_.INQlV ۇx,,=zMHjuv7w,2� !vBd[|ߠdJp,aZ>0.cAȄ4;‡\N3mD0=�kNM 7o$ EA%W%ZkLKkw.'FW[Zg:[ kl$r S~몎S 3l/|m5 p8'"q{# {jyQ8ѓ$$&H .%ZL^r~@m! QV(eӊ�R\g,ʹ2F[BcFI.aW�>:| 'P$EEE.7CF w!u% W6A|2!${V$2rU�#Htt0:Cp[RP0 Ƃ9@ a7&ؒoȨ,,c I<6;P5t(&Fâm(1iS|h;CpLrYeY߻<L4fҨEfDzRR8g~i3/EvxOK+B55@( 1zu}ÈCn]˜msϧ& U<jZ{^PNB(ƃP? gxOϾ3Lsc]񓭃R_$Ir'h-u ߆wS/0öŘTg0DB!oxl;8`Ӏ>t~8w 0vV E.ܮ0N?໻mD8b(=6h_^dy' ) xv^{Sf8, zW$s/kyU#绸?U(x^|tY:{wLKWP�>r̷S17B<ӌSO.ӪqwfJs ` _s_4vPMO$K6x<ePԓT�?&t����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_restorefromtray.png�������������������������������0000644�0001750�0000144�00000001760�15104114162�024542� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKVmh[U~IZf*X7Q&ݠc2VfA29c:ؠu jQ:U&i&K5u{9y{{%R . pfm:s tU<L^>=9[}"~~86B0gKE+[܉u迢" %1&O|" ujIȕݝ,ƽ&`ܸ5jc>0YKn\/~Ci :yPsQ@MU/�>6;Ea6D:f!{C{acϨPH~ƝyS1tDpd/G 8.Zkm{Gd9N&1:t<;#uɜQizv>kn9OK]|C\{s[s9y"rk~01wUiW8*,_10:^X鴧YI{kݗ^β٧b]q!S: !șmI\gRZ)eoquW7L&!g@M9G4z?~O1TR$ԡ:Y :RXt Fg-BΡ"'"8m)- ~ML<]m%R8[w Zީ/mK|[rHz@-jR dF]P&'epnšq_2mJy2nhmy?:{_Tm8!CBPزOKJ%v/LS{,M?s0NPlO嶗dk+%]ՃlZa/۴64L?5WnKnN9{3 ,V c\1ܹkKCGc7mqysd((0]C@oY{~ x<3‹*[tu�܋ϿZ����IENDB`����������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_renametab.png�������������������������������������0000644�0001750�0000144�00000001114�15104114162�023222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHK1ha\HZ4I""N .:T-"*uq .ΊBqpPE9h%."n6FrK>]jK& dr;r5~Lj#f =:!VE\ugvgХ;'Ο:�3a0Y^[_-:E3 URݧnUy[ ̛&-da?x `lM ^mj#+JeջǶ q 0@a.p5 -ץPQkX;oY iL[v=:54͏}jԠ5}T>?Yт$hIcB߶myW�"^V1w{JSE>Gn wر|(jH\q+=~b\'UMC#{C:|i6Bra˻*Nt ϮMs>j]+G0xbQ Ovt{oCx����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_rename.png����������������������������������������0000644�0001750�0000144�00000001171�15104114162�022536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���PLTE���ꜜ��W���!tRNS�+MXn��IDAT(uMN0_b&?U ΚE *U))D{8Abyf<c>T[1Qŭbk+h3zd6.}~absu@I tzq]KԨS<b#s6HTԮB!0iV`l,5Vm1xrDVr 91qt "!L~|DJf/3-WFYDFJ=N.b !Xӝѧ&D,E})O~Z"p����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_refresh.png���������������������������������������0000644�0001750�0000144�00000002213�15104114162�022723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��RIDATHkPUƟ.rTB@1R'D.uƘbKEDvq4\,dY&@rL7iC0Xw|;s}^C]Aa 7J2~lv)YEA&UMeJ�S 䙈R,_r`qkV00c0J5`'J;'}İ~%߻PgIu9b/w/fEMǤz`7�.J{]M|Hw߶aF/5][P T yahCv�&7 $b]V:}`ΒUejx*52 ,ΤJaP LewoRaN' (€_kI TOξ6vmLnˑܳ]-�J9ӗM`V;� Bq#\) Bѳ5][S/eu#|j�3ؔi,ѽ@U3xT "{Hu Ŗg\df^=UD̸*nT=`zECG, yJ*1 �L$9]EM zAJhA ~"Q@ (/ŰF6~HD`NK"+U`zB,,s 蜩jkhZc�}ܚ!3{f9.J*H5-ă Tpz :4Lݶי]4fI,0 $�psRXټzp#̻ jn#Ž;׎ifφ[odn;$eq(�L�pRJꋴ/=:@M@`yF"~ģDYpUmIk$nC`_fUpǒpy?_ZWn?Tvӊqe0z!~=_Cm7 0aa?X`}aFWb.nxB<�?5u#&<Xж?zi,6DO v#t@`HE9Yqs91vͷ[E~o[h����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_quickview.png�������������������������������������0000644�0001750�0000144�00000001626�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��]IDATHKUmKSaܛ۴rK bثAAhѷчȊ>? Qjabi9_*gk+=lmg;Ϝti.v9}]sϽ_˼3UW\*Ƿjk 5 j_/ъ7_yzb?n"rX>8{ˍf;-EZ v NU8KLUup4%i Ĥi+0=&r73,[jz9W[w}2}T#` \,kBe JvY7^C!K@I$s²E $Ipx> 3*|}ёbw^@KGi?߅#'p m-ǰS1<< ("`30HĒ27:p�~�FPXY R2[Љd& *YZyEފ&a6`2ЬC&JL�EdJBsˬ! d!J){UQP~V؋''Op0)D>L,!@#EމqfAMHPFd9 o{a�՘G ;VucMva}(FJ Pz~Df^.Vڪpq:e}SC] XQ;<W'GII%ۚH(rߛ>z&[ 0E O`k9T|Vzp@0=fedP$.ĕ2;޷O>6vgڡhfZ.!2q=u;GwڿV7U_ze-FUc)#f2fs!L,H? tSZJ����IENDB`����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_prevtab.png���������������������������������������0000644�0001750�0000144�00000001432�15104114162�022732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU]HQ5WW5Ղ(ފlW ʰ졗"z A$"B(- RJB!ˍ"4J'qKww:wgFVu|>s==瞙ɲ =8.ꝯAZa*=( q6虘`W`ӥeV3'4]*ŪW ;?ƙ'd k˥nq4hwPY^,8YyYV87v_V'99,CG#tR֦('s l c3544=泵# OBD +T(Ǯ"w'DWEe9PH+4I0l-:KKKģfvfxᤸtfFQyCы>曝cRa͋ 8[pOkig䐵JepxT1Āh@S;4\mg>ܑ=؞iƮ!|B Өnށԧ2$x~퐓˿΂=Ta[vfm֎ֻA/ޓ)\/W/z.86!f#?2jJDa}7ڇx%]pgg�U@T$ o@.u+E=S%pmpnl )�qSjBc#re2/r ;@ٛ;xM%Z3tW؉D0NAj׌7ϛCob , q]^ ZGL� ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_packfiles.png�������������������������������������0000644�0001750�0000144�00000002425�15104114162�023233� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUkhe~/ߗkYoeti⺋ kӉC)MNJqe("S+*bխZMu4i4in7b7{ssy/ cmIš ZeWhy^/3o6Id5L$4!WnЗ鷟i%㿃?d56U6Eh.BƓG'n҅[| N I^Yzk9Jnn g% OmU K>eޱ?2#6bXfWrcoť$ɆɁ9I2+,81-=;ʿ X ŰgP}t"<O5p}vSŽ!2&Co{(7n9tnl~vRZI-qZOk8cu{+Wp13C*ejq/e"?-2YL c>Sg'Y0W8f;;m87MB PlZF &ЏMӲ@s{Gb0U I;"n}�#UCRl~Z.tF۰>MpҦs$#nlDpHe-}<DTN@yhXY��BjwAAe|UjG#(GN,Q(q] *#MQ @h�Y1LZނ|| c@rOaDȘJ "DeWGtqs3X4AJ pы" b ;S8b:A4eBKu:G.h mϳdȿOPF("3($Z.!z֪I%1 a3B�lTLD}Iras֢g?%6/Jg' bE#mnFhŨyFagJ禒ύda8㢓.\QveQ迮`?8ŐStT}W=mfJ-D\L6?<s9qHc# dJc!|j|vk&9VقrYz{LONcf>́O(Q AR"V5*޷LQ<4 .D21IR$WbPxWA$$x=jw_xo56,DH8B+�+}{����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_options.png���������������������������������������0000644�0001750�0000144�00000002721�15104114162�022764� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHVLg>Q*J(MbZkq ZeP'"ԓS"!,�9N)@:DVJX16i'BgxsɭCb t|.M"iÐRG-w74]S(_S09Ik<܁[j.զT : ➾b#raT}1N]rWQ9�vyZZJ#4BC:䬰,‰ق0ܮZU,^Eꖲǜ2[uF,6Xp˼ЍI"xC?&vD™ׂ#_*|Ћ9otX%":48Oz$Lp"!7oߟ3I?oyvʼn`FiA7A!z\`'^j//YFϛM oYPSOn/K4*霰Mk 60 6dV曕 }VN`3ǨHX8-ϼ蒮 ?<8E@1ŧ>O jR ~$K4S$f}˕]A*)2MIJpQ `vƣ`vK}vXq۠H�EBd 88W0v DP<RsCUFl.*V;aI9pT/Om7gzY7  H6�-$agpW'w[xk&5n $bGr-|o^""UkhM4~) Ja`"t1mawt(":a ϢHmx`1v@h6@-Рb1)aױl9_2tzW@ .>d~L8'(X"D) OQs@E]f UCkY&}ͻ w;@ 7!@8ʢ0Lf}P.2&QHD*䁁X UFJwdWl>noRr΅Pup H쯒DӀREvF bdB6 >o1F H?zJJ,P=Ɖ؟1{d)�^ &os�͗pswy:<xR?u axcKg5F:ZsHv$!qga uGQ5<U5C8 pl܅hbJ xlC*ɛ[!RYL &U~7@ܼ{BYd$CWO0Ruy|G(v[G#t̞pjR[*^Qfۖji?@+[qqޗxl|j����IENDB`�����������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_operationsviewer.png������������������������������0000644�0001750�0000144�00000001777�15104114162�024710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU]h\EIҮ?V[b!Rl) J}/o?|kJÂ}-El`Q4ll6{wfnnҤ?P?83g9s|8;**Rf<.3T4߉=xeF!Fd% VHDվ}t8l0+*?‰yܜ dP1ѳzr7tqw@)b8v '{ptXKrH9 Y7lv%8KB&FF(UJ:=QU~/#q<sL<IdcBH!A Nhbiٖ6n}�kqj ==c[`YThPD7*mhR5ԫؑ*Y3NBx4޽{tn`6K4Qh#F4_)<|w[@*cv\>I#>9Wt u*cvQ 5s&R$rJ+E|=70U׺spmyQԋ̌9/ /EY"KKKE3@Z ّY_E qݼO4LJ�2dѵƥ̓:;Eo]G.\U Ifnu/t܃O16v 0Q"D4 g|n4R^Ոf["tf%bTdWf04Zw#/\#D]$uc?%4hkiZf֌'ڗcC{d%^뺋잘Xf.~|x9VV @ 'SࣥX 2ӡ]e],Spe>򢙢ɓ< ̎$D-_Ƀo-KuRx,zː(Cfj8g����IENDB`�doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_openvirtualfilesystemlist.png���������������������0000644�0001750�0000144�00000002350�15104114162�026640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKVkLU~Z el0ZlƲĸ쿉&X2b&!1G)mXiRzo6{9{ēAv]P( 6Ȓy}ӎ_t:)ZQIC%{|^7O?3G޺ay=Ўd\ , Fh6|g(O5/j_[iõ,d(u;#�,B%l0Nd:n/L*3[hJ¡8dF{ih^s0HNKXBf_ < �w*) o0uE}e1:::ګvRJbZRd"*G)9aɑX,mG$/ICd3ETX3:`ͯ7WH{eR`U [g@1*ZUUJ ,[E&n@N.\9[{$+eb+EDPπd r)5?kį߀ֶV +a;1984.tvvv2ͣ :33wIU;..fn. �Ymǀ:l+x0g}Z.F+#t:96RDڌfJ2(,DDUz{^FFF^!ɘv^PnТv>r=Eظ; o!jM55y*6s3S^|Yn((=B< EqRԌ߃0//ܸ]ztNfB23*8RoFCuE#!*/ D3asunN_YV:ϲjT)PGMuX^uQSO/aJ2DDhI):,f *d.4O|w^Iݗ_0Np%Tj-f>{ȹ1$[{?.4LvI$V @MM'*j)(s_>ޘx!$G9}H}b9qul]NӓOx8ؓ w9ɓ,w?#`nYIf%d'&f X*n[N����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_opendirinnewtab.png�������������������������������0000644�0001750�0000144�00000001761�15104114162�024464� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKT]lSe~wYwve,4,8m8P.ĸoA ႫeL !Q 9آf-ݺt?x6ٍL O=C* >:;"@8GDt= ۥg%ܤ7NT=𿃞a2W1 m]O;WM7.Fs= υ<X }<r- YA6p"ZJ~D׋OR*EQDN"y25Z({S )$8.z=ޣ"dm'3< fe%bQoCˢ翽)WELY* !zG]ߗ~ ZCgޅ̬͋D<x s8pۆw]Pd޼.$ٛм.G .nLs vLv !X8-Q-I ;d C eѽf\/b5-b0vRAֵJR!di<E"Gᡣwp݉Aضm@wS}"ľMZX94w㢱b!Cm)|~c} ݌93xƚmY 9*E]?KQ)Z TNNirt :?ArLz\5_"xsi/_LG,S"0YA&C @q!4,|+q'G/%޺bd=:FORޝ01NEß/qEv8q2$~'lۮ* PBK ;T5"Rxk_M@t?I4*XO\L E"Nc2D<Mk$}䰛>)=X3CsU1����IENDB`���������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_nexttab.png���������������������������������������0000644�0001750�0000144�00000001376�15104114162�022743� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUMHTQ=gfG1H۴0(2D EFEZZDEASMmb4d{} Jf2w{Ϲ #`Byü5!n:׵ n,9Ey['6bw)}& gntoݵN gD\ާP&<G!6p׶=ִQ&=*T5n/x)+=`VU ܚyQq.>(`2'CZyn i8eYfM d^D:�E7 ˄xQQpI0 B5$A#alfȇ/iR)Kj lgyᒒ|hfg)WUtm( 2ڼ /yZj4 b*_a_ytY /r (5tgN+(XUND[-SZ .+Ctbx+sjA Uሯ@}^OܙQcw5xDVh~Z iweq} 2S3X'G<S/"X"hE> T(*ꀑ1p'}62b>?+*YA�(1?!kA]=lq⤝C\~b"c,No4ˀI%@%$ki�{.9����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_newtab.png����������������������������������������0000644�0001750�0000144�00000001376�15104114162�022556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKTKHTQ;o:2+\II8n"\&ڵpZԢA.e  6q|cf;3"tf"ǹ?$F|sw-dCQг!F 4o|Cf9>Wu1fYL9=DBAt˃/$'-oo5b& ˓%{ +B疋Yd9ՃdBqa#NCLEC''` lX31 @i=Wy$bFrގ.JxFK0=aẘt%$Epc(, ]@2*lfXaFfqw38P4b33۹ QH(Qy%Mbj#nLAB>)AwIs<yK#Xۮ{,a#Bvh̤e:VcJhl~ڇ귬i3EhhA&@U'Qq۽dRx`dᾇ8v/Bܜ|@v{f-E's$ǐpv6A=n8wM9,; ]QBm.J #8&tQ  Y#?�O7j0����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_multirename.png�����������������������������������0000644�0001750�0000144�00000002232�15104114162�023610� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��PLTE���������������������������������������������%q�&r�*t�+u�.w�/w�/x�0x�0y�<?Fh4i5i6q]Aqw{q~r{yfHzmU]&b+^#h4m;s3n2lmkmmÿooĿkɌpr{̎@jΙЇнŶъ˻֧׆ūٷtۢˮ`g{Tީ  ]b_xxywy/���tRNS� 17=BCNM��IDAT(c`tvt�'&`u = ! fv5 `pvPsq]Q 3H nO,`Un嚉;lk5\bnwO93n\m2on'ZY[]~ᴊ27HbrX zɳ6 Y1ҊKMvP H$1?RrRc~?qʈ$]n t>JY}`@G4o#$%K,ͬyHenڹ%H"Ww_۔ IbcaGz @�ڜ'Taz B8T% u{()۷ܻw[n6 Y$5Ah?\6pJ89!''/ d�Yoގ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_movetabright.png����������������������������������0000644�0001750�0000144�00000001317�15104114162�023764� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��hPLTE������������������������������������������������<U������������?z=v���?@*_9=>~>??@ABBDEFFNUZ^_`Ȃϩ 44$$&&++22337799<<JJzz4,���tRNS� '/2BCNQS h'���IDAT.a?$5Dc!MLz@B ++B2_?hyl:AR- XʓFr<Ϸӱ>CIAzW>X+B7,5k9(na'>h}Y݌0C^ lq?Y*7>m_KzTo˒o]2°I{T8rTD]s稘ZN:- /d므����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_movetableft.png�����������������������������������0000644�0001750�0000144�00000001326�15104114162�023601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש��hPLTE������������������������������������������������<U������������?z=v���?@*_9=>~>??@ABBDEFFNUZ^_`Ȃϩ 44$$&&++22337799<<JJzz4,���tRNS� '/2BCNQS h'��IDATM+DQs9wF313d!ełS75-m&jR6;/ɼvlњgRI˰DVoz攜IےdB7w\ج^g뚏lX&,QHP_ mB!hl4> rcd GkLv|2WNǙ ێ D ƾX) J.Sz^g4j�ջP[^Q0hp4L|7ď=? `hw>� ej\u;����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markunmarkall.png���������������������������������0000644�0001750�0000144�00000002653�15104114162�024136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��rIDATHŖyPSW("`Pve�AV &eqEkNhut(PEZE,0&XJUP#EDIIB@abo{s߻Gё9ùNdպԮD=4tA"eDjԴOìirm=46'͏2qKKͥ(c[-C;@3IA T_lS(`'4@GOfn}Pα4љh}js"pɀ69gJfgcI'qkއkVqle ҿ1=YCJ _[a 5SyU>MC']LRCm'ϿECGl&z l zuLC߈ƓL;iZw5ҔC(IѨvsٯ; p_KA$�XW7+v=EcatE ,nI�{?P)ïh$&on_^�Igc xv%d6q ݶ #V _ 4#0ͶAb(&aU 849PMӲu0@Vlk>9@^AK!ݹ]Eg,@Ǐܭ0vQXQ>\x/yAֲi<.d伴d:NX E,qݝ|\Pc֡O*P|�D2烸 PHMQ}IeDQp=Zq<l!d,H/A|aDBޛeNH6BZ@}9oGQ^ޞS} sĹ7cZ.ޡ}G?B^a1$%Wn@[PffV ;me/0VqSWXL陥/[ )`n,A4q& DQ4}"ǥ`TR~]`F<t[&de.hE1E.P4>j"gX>Ne6n.ܕh3jէd$7_:KklĕK%C,&&R46vk%^ +Ap ?}8HN.,ETj^ސr(ߑo2^DU٧QmswHRE(d$}wVS\Ȇx+/cךScA_bMSLN ęl4_{(4hRʋN74S=䲳 ȕ֌Eh\!U __gmݜ%,x&Q)O/?⺺*L{]=lhv_ ����IENDB`�������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markplus.png��������������������������������������0000644�0001750�0000144�00000002753�15104114162�023134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHŖyTiƿuo%GkN)-#C :q%dDd&ErPL~,Zv??3_|?~TS ݃W<]qy75^=h,q?p-nEֈHqkҚԹ6w!u gjɾc}mdO h9$/P2wBVw-SflpE{ypkbYQ47mǝlB Q8�-i<#xѹǭ ZލmKH?cg1B{Hqū whha x/dKt*'}Z?ZJH Y) F}[+:ww/CdG{ ~4?+&i3'�շ6PŔM7Cu`"u8=Mjۘ3!l½gY˔wC[<WU[b"N{b+jc,VEG55Z.uLܼh'#D[P@b^ Ю,2 6O[4Yi=eP()eHV:)t5$xoU(..Ds6q˖4GiY7O,χU^Y՝0%Jz4< epq `/$@ث^P-BTBU#`VWŮ@#ؼ`sh EnpN,-T_Cq+tfXAn#fL{)+Rot١)22k4؜1`J\Qk*!"^7hps[EGA·[ WR<?[\XͱF_BC__rA%Z #՘:Cf1'H0\Vc(uFixdl'G_7 ϱEIJebxGÆTKD ;[<OƼP~㬅=!Dԟԉ[И4AYlZYz;1~N?8X}��^.6g`N3w} Y7ză9P9>캵>Xz^2o9;Gȼ}^Ӫ6ɒ^2-c;$ED]snV=0(d[qFudNR1Etƙzm@0? ~oN{<807dfdoQ5FZlB{.Lĥ�!uGq_'>^ńo�AoީK?ںH 2̸1֤LǑ{WB7 iPj1܈H߲GD_jslNTp8gR0'"1an$&RЊ# ~/Q#"a_uVHS "G m$ E1M����IENDB`���������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markminus.png�������������������������������������0000644�0001750�0000144�00000003012�15104114162�023271� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHTyTyWJEhsi_QD(W,%`8IÙƘ&J%WAJ1e\܊"CڵK]gL:r2ryy|}{(3Ulkh>Ԡh% F*җJ2!JՇ9mִ_Xhǘw*:2k9V忌w=4B~X55Z:5 "g'ЛO#̒](r0E{|鋋?κhKGr_im>'W�tH Вx[Ơ`'+[k-*$pH ~*Yq&&E2%@sv^t4Ʃw44= t0Dr{XYTu$AZD'|T08 2XAA_=FM|+µI�w5] npƩJ jNOPE*e0hԎE4(va o2։B{0} B?@pHBOOi4'0fWbLs8n|DC A{$y'sa CcLR9xӶf!i[!- $A3sMކbU$ 43!jZRW]Y>ޜ�B|$OQw;ܝ,o\ٳ@^�.A<Izr`HxAx"?Z "g$61\vPvFf9gB9+S H7?I; QD<ȉڄ[2v7 ?gXV<PgwM;O ^| L"'X9[՞t\v'E>hӃ"n@~s.E9=wf;HR@k*=29oHL } >6 [{ГuP_7n볎G!bQߚd"%+X$YihO#o7dڙT3hNN2ǐ'2`U6 B?Nh;g呓^U0hZݧefW+47A5|<qq:jA*u%\o@rǎ-ahfnGY#>-,#. ~mapp|'*3$yE -OBZD|M&=}d_BsgoQo*DsB:jAKu \!*`6ިZκh9v.Wt/C,t{g]F3z㔴X-Ś/sD ; $+yFz=DCȆ p9/ +]QꟳkeT!6-q8ck} /k=Xj/nY/2$R7�T9G~?Ck}׸s-{Ypa3UL$#1ۖ!FZMlESd[]4䦐uA6Bv8cH����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markmarkall.png�����������������������������������0000644�0001750�0000144�00000002662�15104114162�023573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��yIDATHU LSgnmˊZj P^bL'N`(]U h8u` T| ((@y H|@ -XJ&Hdے$7ON&Ϡ>dd%#|8 12=/*V\YJt`h7#mYk_I OF.բx-rTUGQCV-FtWD\=>wd7Wmz粷- HRlK\=͒Dj;DSeGO@YmW+YnSt zPoJkZTGLe82[ : hmӑ OM,PnB- <L_J%vn<p5h3 B{S>ֆF:P2TWv"�4d|-41U<k,}k;HPW~mZ(�E2L>b|f^=:iSCA[]e#3g̞d! /@W,{nQO3o["מdwv:=_w# (+vRweA]fM54sM VYtX\s+ءUlOe_AzUڻ{@(:Xc ^3PВeq� T4FN5+BTxZ)ŋ1l8<K)hGWu*f-]Ǡ_�C̱ H_&TQ;? @=9h b�Ag SiD "þ,siY}Eki靴FYg>"".XZVijލ?yk4"A%IoUvL.ːq53Ēj2 gm=^(ΗvZh�C9&ĥ^d@ga bT 2\P@k GoVueXUq8 G~GzLTG̘ב:aB:mhp23(K?9X z..-mavȄGnd8ɦPy{4| hg*eoql-̓"n tg8bx| <wxAS$:>8θ9Xꎠ�m U:xɷ.<6kxJu~_#簏21z�yӀs(t>g>9dlA6um4s O5X5v؈l18nM<m]Ӗl#Jx;xcwFFx%q$;qa%l2<'2gRҩ����IENDB`������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markinvert.png������������������������������������0000644�0001750�0000144�00000002624�15104114162�023455� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��[IDATHViPSgMPPi5̰,YVEkFj Qku Q4.CQ)"H"-("B"!Y$DĘ(0V?9=}wG љ:ٻ"GQOWl'JQ-N`;S"nmU_<|"g$G0-eQ&Z)[pl2eug: Xxt~Gf*GI jtW}mg9V5!6DGv]YE6�Aw24'x--[cQ YE;k 08HvMM TB6(>`|x;Pɛro�hRLCz_OXAĴ] iSPtZ] 6yVW_4'h>y7mjmvmSPܦ/ >jAd<@][2i U'~@=x5rc!ƒ(GUo~ J7Zh]QYEU]b;$:eG^K[ =P䛽vz<ٟ"m/ ig nY"OYGQr>9Z[;P 0l6ѩW={y77B97Tߝm0tš^0ߏf Grn~h"@KV�s@0, eAC�jT|-1.hNp)dPN�J>s`>%v&CxuNEҟ0z)f0ړXTF"i}]G uDMo*Yg=("$:n}6?ܛ%KshT fT./:9x 06A6;̶ްn3ޒ0ie߷ 2]t7rA*U.G &b IƧ:L!VNjmmu~l.Y4 daA`1 g w+g7yV[Z}9u`u13jzA˼.<�H$AKKˀCU .[~(R%՟3|Oh'8jR - l6( c "Qq)OČ<�`ZdW%wռu@p"fonn`\nW~'kP t?/[<V_𵌌?!e"3CG;u$BY?m.tZa !̠qK'X[PG&զp$2MֶȏڎDŽBD"eG.~#OHBF,K����IENDB`������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markcurrentpath.png�������������������������������0000644�0001750�0000144�00000002705�15104114162�024505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHSiLTW'ZA6AXEkj(J-VMMQPM((")"PŶ"Ȧ38lR-}fcf}="hz/ww9kB{8.G.Iv8HN0G,='Epd^ ֶ+bΪ|&>=N:GMDk:t5r+F9SV$\Kt^/3yessϵ$oQY6{ 2mlٕ<c}"+@އo'[]m|�Re�.΄%Ѐڈy~A2 ,>ڡ#j`yG,fZ>?:ǡ5a9 (^%Wttn7xmx^C ؁CV?J.aȜq\'Rvfiaq+o`&-P}mq.E7&BbϺ|zp(zbCmN+I/>U$J^$9៳s Du9_\m'Yatܟ JM^=i@C$3^[y�c0S0dQI'\L1iL˶Aza)T#*4NՏ.8̌pAւ,_To@66p~$` Ѱh ԱJO@rߦН.hߍES:P%oX }79PPfz0fS5_ 4ٞzPSJJ`!)tjXQKt}WƸH;i;(o& P]h:D/8ĺUzzDr}\[K7ɴZ%/mki7%Jw= Z@uyM 7Iini[jJI+uQ[P i tXZZLcZQ@[6*\#aCSOфF`(�r~ꢜX~>"rD�U Z*ZKI<u�m'SOSPlM^NbBpg`V{thZ:HU|۰^j_MJJ(@1 n&R_Ptur`yiiiI5OQoOOOyq#;;4^/P?G|;hInAȽ-j___ڪ&PSƷpIz=U'2u=qMɠd@,4&mɨCt!DN^k4G}�4pbbH&*?1w\#}l6BUX3 ԩ^f./ǿ.=q����IENDB`�����������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markcurrentnameext.png����������������������������0000644�0001750�0000144�00000002606�15104114162�025212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��MIDATHœ LSg]D&(83=flcb8gfC63 7MyK[)`WLd<< B[ ( ࢲdNr?w;<uS ;9ζSq;$8nH^3M_5m?cìq: Ve|4U'e}pJYUӢ^b}1J :k\Qug/ma̞Ј5EzKM@KB+n|'y;T6,5QPf_fӂu.fIWgIrރpru (w90/]6Wn GmL +-UIf1 >s[B}+`Eo;[N_$@F-A%^7wmͶx.C3 ؍{FY?~XQ V@Y2},?gM+颗l뼓ʒ s 4AdgCAvxIP=j_uڢH} K&zH<.r>gdEMS\tTA UЧ{Qv 'AM $=b<3{9>KcDѶC<2YW˨J6}M0Syc$zMv7D#IS07ǣ'em %Y AE\ ce$P +`B@<�$CՔ�:Twè:jeo\~> WX4ir/D.sTW=,C^ ap%X0IfMy=F\uqK[юSB4jnm#-0(\`(ٌ=h8Llw]\rnLvmXMH/.Ϧd#t +|jVd_wP.tr>T-wh(2@WS_%bN)}52Nl6>qѳohE1Gb@5?T ze K?{ "!�\ KiuZ 1+46fJ<}G@[h*`)gJNj`堭Czu888NNN@ 0�ȦݯҊ>"c>tl'zJlP6WXSrZ]]utEP+ TNJ]|3d2PkkCEI!khZN!Ry@X<6$ JC<h222R)zD (tnppvFF/^ 0056s  'De����IENDB`��������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markcurrentname.png�������������������������������0000644�0001750�0000144�00000002634�15104114162�024472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��cIDATHŔ LSg SF50T,sfSsg$sqhC6 2)7ŕv-D^/ m链h{=ZF&K<ɽw}$ҫ4eq*G9{S7j nzD~)gY~K$隚Rmٗ9ISc 7ɋVZ}yC/>{� x]x։\.4#<NI7[СJpvA_(?O-is!}9[ƭ�@3@]8W y *K|aYCp1�8q_�TTw~`&c_�^ƜxMM�pB & I~~-šF�*Ȇ{f Zr`Pxx:Tyxo͢$ vM#^3��5=ZMP6d3[ JhѺ`9! ['0^}RD|踆 )Unمzq~d|N䄊=o.Ο@9n:XJ 䤾$q-[Y>L^FgM3s-샀vV\i/blUm)JG cu歠Ɋך }5cζyQgZYGsMO�k\ Xz�&�a `{�';w`g* й=�Xӧ1cp.;ynHܣAglx�ixuDu X*@g/anp$;jW* 5G*7cXOI�ZQu6 3-QS&Mk7c0Ta`o�]sr(ſ!m^vHE ťp$&$8Ԕ6eeZȠ� n %<]0If4ZȽQ؈D4nu(:p{9 ٮ9͇z3vk2rOE!rt'e3\]x\t&(ۉ1v<i$ _3u 8͠5Ab̩m 0tu~700luyHNk n$ "&-`1!bq(ZUYa04M75{vXno%6@b�`ۨ]zP31鉹 v�p!sg{=?$&Q%n'�0K{ J#JdfjֻFl}*pjJ0>>~MYYD ~xHԪ_s/yQAnP����IENDB`����������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_markcurrentextension.png��������������������������0000644�0001750�0000144�00000002650�15104114162�025564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��oIDATHS{LW//'LQ+8_Ty{9#7؈1'D9330MvȐ){ o<ZJ˳NFDyA-P}"[Dzܛ{~;s9 6Y-r<yT֡^8=i977 C{>V$&};g:#\cT |}ǹ;ˋ3')`_խ9E"7,ҏo�{Gԗ?FyÃd^|'@&80~tf\,'#6XKwkqܟ*gM$,DgVDnpEM asa³z]Anyrk2knJ̐xIJ7uct]?̽]rޑKdyH?;p鱹i~ qr׀A̖G_0Qvہpd:蹯^4o�Q <LҘJ?@^D )0M]:ЬI hQ]+I|/d \YuQ``Eq[O9E<HZsԛ/ %LPĻXeGn C wm&k6=l;';ARenr¬,Dm))H�ʃI6mPDR�{^ bZ.YЊ�=��0@�`AWj)C;o8'<ae�7.|u5̿Y|D*0%<? * d-4>[˔@II ߑk|3uAr(Wg~VD@r [�+LEǸ I^Vj4WW0ՕyL lqGFwuUh0ԵVa D`nR/GzȰܠVkU]J aIv{>AE$I4յJ@Z bJH1]5 Հ@jig O� =d*0U} �,XOet䮹WiV!025#!Lr(@SDnQFKr˓;663GGG,ѐ d!pu]'_pǤFШ|zCjB:0pb Kj$w>�Dlt3wJD<+.?sqqJ'AcYf:@WK;{*+)fbb6^UU5B+K)v 1}ObJu&s f%6�lp3TVTebj4!!!xpp0>̌^gXaj*`����IENDB`����������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_makedir.png���������������������������������������0000644�0001750�0000144�00000002033�15104114162�022701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUoSe~sNu]i&1Om,t1蕉xCB^y 1K.1Dv^@ K4(HՕh=mnew>}o>o⿆ _{Van[PTk}2HG]ٝGނx& Jg|b嶚|+N̎Cx&¦@jw |>vr,Y|]RLX6v$K@qBejKPJ.5�-^A7 3;RL+TL\Kϻ[v*RGTG@J(JKR:anS:Z9)'}&rwhYWh} OlK8/Zν_(_ PĢs0;I_SZ/4,8~H@nm*Ŭ*l\zk:9<ET_Te3]aN9m˩7~jgO 2.O"9H_3qT=U]I\7 H>CQ;nGd61ѭ͕GP򣮱f%~cl%eiyiJ_D!/q`/A)ٱOFIdyRZ+94 -GG1m@X֎/w+y4yCr/k-kXZ�/oJm=;ٝDX!.KPq2Vغ* 1k^^lO>k\`eΉMnO>tCa9x|h^F. Nq; M W>֙1L)J>^>eSVW'Or) Х]ΡEɮȮ` JOIj,k:JSGO6}GIкi{k~]5%3L^NyeW� @3o(/ /տ2Vdwc طe?l����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_loadselectionfromfile.png�������������������������0000644�0001750�0000144�00000003112�15104114162�025635� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUklTE>w{I_,>ZBP""H &`4&&  B00"m0FKilkۥm}8wPKN7ߙ9\_1m\]Tml(;-Lɳ~&X;/Մ 8>բMZ~yJgBkjUeFP=ߔZK/cy ϟ5رFh2< ? 9ݼüz*ޚM3ʭOpW]sQX;ρ\)5j$# }`L$Bq:EM2)K7r2j?3m,Uy OUif|*qNi�Ft77l伴a0%loJ8riHCiRXxirj3wIDӝh(E\Һ˻dF1u!ńZ^zfP^nDk!|Ϫ�κDQt%_T+":R6k#aK2mBk < xqZ]4\�K@!z0Z4DXp \L٬< CLn^Qğ]P4>ys]h:.lY1N�a^ebnh¤Wn_[,3.HON6)f~[ZuxNl{!>É%$I*֎k?)}砜�yn/a? Y,<h-$mY\V%,JS 5IR Nr0̐k)"i> ]{b@A ҧjeiHʐ 2޺ KP2qnx NJw!ǂ)afft zT]z�"FU+ <3"> 'l\z9x'ȹ^nb`$8HG[Cxlo2Sc~XG+60V!C9x%GaM�7$}9O͹ꈣ 欤w |'$%D ސpw%{xbƒTkyDBF*.Vl)? J%Md"9%֊a; �Sh(nirFR)17)?n-jtۅ+疮DF8 6v( $е&kftQ ً (H�0k hfG5Js l:@APPIJ(l޴-t)Ry  3"xZDAuDVhCrD΀(p@0`bzǎpL]m`>KMl/=hK~E/1=ELV͆іPY3N<_~๯N 7#A~PDس%،YP9�;cԀϙ>BMO_$#Hu4`-A:@X&}އJyABA⤣ٜ(ԢJs0ɑĉ Ltd&dҜo2�t����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_loadselectionfromclip.png�������������������������0000644�0001750�0000144�00000003075�15104114162�025655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHK[l\WsfΜxf<7!NiV*MbEjD Bx⢒D6H дv@:!ݸ;s=3gf΅}&NGy^kmߐ6ҫGk9UD_e0Y|w`߮M{N?~B<2t+t~:"̺lIJ3_L$M/`!|巿(&}ـ<V7p(0"RkjVi(Ap"mf(-NQ `¥M.Xm7 KpF|_8N`{~dKjUi\0%6{e`tsq*w\$Kz>Yғ4J%; Zp8Dǝ$ %<=LTLGB|* Xrš9x4, l{7< pzE^A~LK4I%m`UgɕeFQ.Łap'(q#A5· &''GZ*PÝ.AL>=};;eXo?Z2'fY/J!b@*#Q;%$}uge tʤZ鷹J:!7utL\#^$v5g5G_EPwg)fq`sg jJ]LG.R9CL+H$܉4D[bD 8A(Pd\mF)8UV+bԖR8ύ# q$tH?SCh01%TlW3&9BUeJ=e<,*|;j2õuG|E5!/|Ҹ(F]713V]/Y"uY<#E|[;(c7DDt!Ro/\wKƗA-j&l#=) gkR#8YV'ynav'�s?NpLAȡW?w -bvԧvFį"L/.W \bzbO> )Ė$ٖ.D=Nt#sgy7U$hhyI׉2ʬ4f^na}v1M ]pp}ob~w ۵՚ˏ-$ Jl=CX?o坿!PEh8u?uWDj$nvߟ&Б9lsn4#YGiU1nhL-H(PD ]B??(d# spp>csnr#¿|ƥ'<S(HJE^+d LVMkMp�Ųf)BnJ?{sEz0LAi*bz 3QrIq,[Q$P=y瓩<g~_| {Q:筝gl׎rpNK-|M/&{b����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_loadlist.png��������������������������������������0000644�0001750�0000144�00000001772�15104114162�023111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKVilLQ2(hGlD]iZQR h" j%ADH$~4bv:],QL̼yιo3o{Y=oHD5&W$o0(Նk}64x(Iu?d${ù' Mhp}2oN.Ǧ[P)`spb>Mljؐ{ƐPLhtC +)Arֳ۳_:|+`{3Ã3XrÓؾ tۙ,KmH:QޣPn]$<x;$۱=!JĐ_vH kG\y=:ĽN-" ť90 +LReX I)a񙗘!c{Ω/Fa (bGۖi Ӕ~R-~|ـv&,& V *x\5_<=|]ˋNʄ~ZK@zhወDpπeP1Ðxk}RGD >dB?[ aTlXkXҽ@KTZw8qk,zl /d}aF2 Yty> y96c\[w="e G,/�Pj{;|#ud7z<q�qâB6V{"iWT[/JI[{lc4B3jA6; T K#D)'<aU6(r>xy�~damztemp?x+qVs*Jo) )Ďvʒ`6T!2WPwQsv*L Pt۲|ms)Etjbt*F apfI憳,6 7gi|i_�rj;<&JB&FHN*�uJ2<����IENDB`������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_keyboard.png��������������������������������������0000644�0001750�0000144�00000001225�15104114162�023067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��\IDATHKc?pq&(M `Hr4N@,<P6+ 411Hrprܽyh w`Y�` ,ܸZe @s pYZXûݻs`M@ ܏@ ? &״( d"KH9cڼ8N&0#߿}cf`d$e %L@VZ&?~?}$c~ @ffmG.;#( @o<M>yFjfAClĂ+A?lL -xJa�],Eb缌vfxUyi =~ +eM"\E�r}6eK'[Qn fI%S0Pd!a$3 Þpdyt0@�D ߾  rbpr1=qD` :ͽ,2(і@@ *-Md?@ U{`N� [Q00��Fcq����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_horizontalfilepanels.png��������������������������0000644�0001750�0000144�00000000743�15104114162�025527� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUNP}j #?`]h.GhLL:P^RN{Oo`ܰBܳT}�ą,p|]},oAP|]^bA O :<C=ZymJaik ܹѽ~Fq'OUH WZ)ht=h4\)h.¶qZQt4U�DE `2Ӏ JBJ-p!=+!RjF ғ_S ZAiԄ IV`<%cLr ycH2$I6fJoHxd :L+ci~J0 =i5S3+Ƈc8HCOm2"9L@4L#bC�>� K4����IENDB`�����������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_helpindex.png�������������������������������������0000644�0001750�0000144�00000002744�15104114162�023256� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU[le>3;V^ X)!b!>x17y!TDM!R(ݲ޷{ϙ '2||mL sM~Z `]סizP^]]MIWS7?ΨխX^l=hz;p.k:T$Nj˙t\wO¾~v1#Li(ˠEiks0:܋\OeONW"UT}f=v)G9Gb%((e#sBBbE$((YoG㰋-kRpfajpo=[;;;նf|u5y8TAy�P!3q&W-Πtm^JJ.I E+vno!Ϣ&C7Ps bi TB6?iZ>Gb,ۓ+ ` Ài3BG s F(]I7%,!HeF0^bkؽkkKmT4 U? {ny .8EY%8"x=^sc.m={ L@@ixʂU܍KergdxlA9&ó( 2y,X>H>q4  -& p}&  Nl[ݐBI'"p+O0e038e&ENc=>< .X8V" _Sj2[*,0*xhFu0{N\^5><VLU8 Cl"eLhQ:p#%6aUSmf* D{1jyh7HEA &R\­'9c|\3UP;Ed=ޗC; #5yDbi<IqH܉V7S6eVAΦ3CWvȆfc+8mtl&x̐J #͍w[Kp"@֯ &Sm}&/uZ@Vi v3(ci) H:"4tn=QshJ.O7"(I"\+Uw<vVa${G.!q|mHdQ8wBj:6s97><.O pAijlM$ˁnk\Vp<xp6U/ {on-Dc+!S94Xv^~\.aË?aerJ*-V/_#U{UfgݭMbS_e~F5YFصbthBM"CldnF@F8p nY'},I|C�V2U'/����IENDB`����������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_hardlink.png��������������������������������������0000644�0001750�0000144�00000001530�15104114162�023062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUMOSAAcb0HX@$&0aA D !.?ӕMpI#nbBWTGZxZRݹs3sߴȠotvv6�< HRLfӄgؼj_G*/LLL<Œ^y:|Z* < GONC1"NBxCi}KC-(Cfjp2tF"iw7n) o^QxZ8'WVVԴiH$K&QRX,6ɧ`rҕFN]### |SJ"J*rzp\3**^oRաDL؝�fcz ( CڇA:#3 q5>3CiyǜL<z884UYޢv}-C::>To #7Lm9}]-ԲDz[\) cdd<zd8p!PãHЧ;!Qr;4tso\kty:M/I{%ū] oN 8NSe!zf1an7SHvE hw/O$r1ǂ�783[#9;3 G"AxFXֳףohsi"?8>yv/踀W!oq"XC_a|e7[ 2 oj+OAo2_d2&����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_focusswap.png�������������������������������������0000644�0001750�0000144�00000001551�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��0IDATHK]HQ;;jbJef䋐eh-P)AfJQ=H>K%RCbY'v|̮cXϝs9{܋]vVw &.L8@&~&x>^wz)NP:D(g Ţx%GmǙ84c*w;| /M+*G<,Ҍi.'Fb+fF ?ǩd;S@i`& p+mb6pf n$qrlbUgPv<ٛ醻"[냧n`7-Y Az8|v7uK˪b lJ =bmn#˳Uf;19C1[["] 0Ac\hw0LrG,Vzdv219e@t k9:7'M *HFXVz8JUC㤾<4tdý"l <p3WUBϡQ}LCe[;Ak^zn &*QUBl2G_%sVan04A� @^]7.Nf`rA/uDG>Bm%J6N$m?+Վa+pIiqM�*da~+ňĥ;xumE]DLJN8GIq?'pn+*=ApYy9Ң$<Eme~,G*M>2+ m^(mҶZ>/-@' [0USp)6pFI jDzZVDK J>����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_filespliter.png�����������������������������������0000644�0001750�0000144�00000001440�15104114162�023610� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKVMhA~X^'=x+A-D){XP)Gћ"(bQVEB b/Si٘Z5]7;ML|ۙ7v^63w3;Z -lK O0 GΊQC>l.O ȧ�JЄ(R@?}&l_ x´x_Pۦd;;;CMi8#Q] sֶi ޷WpqlO HM ºGQ l朝')u`? ~$)Tr(so19N6o tALPPyMn=56氖8JN O�f`wݽ=DLPJkcA +|q]{(t;v@bN x Xuۻv&EP1ƳWeX50Pm'( [ q+W75]rfY'+Ͳ_Ot&x)u_MW/V }:C%^稘%o. T'8-&$B >VU $0`aId|&21qLlDx)N a |IT { 57HJ(Ͳ1a[>[E]O4LZe>W/Mވb LܳFfkJD4|.T����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_fileproperties.png��������������������������������0000644�0001750�0000144�00000001563�15104114162�024330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��:IDATHKUKTA?K*$O/TX.-DPdO^jFPl~$T/naX{Ms]~,3oΜ3sf >a+++T|b{b^mmm]]]qJDҰ'mmX`XQ v`HMA1kr->BDbFJ (Yl&s<+i~~h||\Az$V 5fUUP][ š1#GBDсAr0( h +PWWwvABKG;D{ޮ)eXٰMrYi\6+h =L:젇ܦ@� UWNpv%>"c<h:pPM5آ P+oT)yph64 aʩU&[AQX+FC-D*�'dʤxD:L&F.-}dQQ#6;;;XTUGu ǧ`qT*P \zōفԸnTjc ZNVUM-//KUEh; / \ sX&Ghip4]SOBss3J1&$0b,L>t!M!H@6crblh|4cp8|Qz(L>|-=s'3G x&l%-Ϟ^% Џʏ_҉iwv��� }ǽL�����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_filelinker.png������������������������������������0000644�0001750�0000144�00000001443�15104114162�023415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKV]HTA=ׅ% (%!豷^h  5P5z"0Ҍ q շ D~brew̝vYg73w]C+DPmWp8 EϋPڏ8jn: 9mm jR[nIf}^ǵ]ś/s M[ph4dsqYڻ<"J3wp$/|* )&8F?*К2vi_ç˨kic ]8"m00 #+4:$m]Y>_ǻp5w\F8h'p@h쫘yHy 7AT=>r6VmèU<JNtD$RSShK(M>88NoiX,KJԖ+요lWϢoF[|t~*M>4T ɤcmZNLMMWXɎǛLڦibesn^mf)b%"5u;e5ӊX@r`E&,) t%smnŵ3?{toו\V=GI'i7~Lԩdrbv]Gy ֬~1d2 4 ]\l/{�uh}O?К`%mgq+ ڢd, Qm/P_4yXaW1sk vuWY' ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_fileassoc.png�������������������������������������0000644�0001750�0000144�00000002737�15104114162�023250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUkLu8W@`i)I2` B$mV_Z[_l}s5CPsms&sDR s8^sg9s=7IZ[זRU4͈,/\o]y&VA0 /sgIR$ҩ$2\ `۶ssљJɴ@/\Νhq:{+Ke۲ad1꧈APn<TV9k_}I,_^AC ΊdއeZhՊ[*:n?^Or$qF.YP?EUQV$ٓ:qE.1ʑsdBj;Ba:ԁd20P<ZI-bkC*B<M6|nla*nθK4I`L<CB6vhA:ht(/D61D#&b&Bs&ŀ @ z'?q4z.͋y, 3J&|㲜3MC0wEh l %#| 'o˄LBa镪Ph$"iBָ,D8lތMP!'Ǡ'JL@MAOB\D 52fN*v'K&G&'h4tE?$BMtR <(: x*!VSdO]@.!gTdn۶&lPtXhnQddM} XE j"GY]EKr"\rB4dc͟DY,@Y7CK!V5 ShLFAMŒboWt޽_l0MU0 Y>z U \3S8=dcx 9n]%Fv.<A(N~vv|k<$@Q8Zp9ӈF$3wppjgд#c`FG ()+V,qd#F9}u+7 ?D:llDF 0;;+߭o[L \L&׮^^uml،^GG&</ƚ7V;uQTK2HVR?XD4E,Ui{% Lap84VSӲ<]/^txŞ ůx<8YD3n;ZZV橩{zz3DrN~_]毫U 20>1Hx7u5oPYYD4,Z2{͌孛7 D-W^XbaۚAw6rldd{k=M3hU|Le#|' #;/C>C8+ C~Ob/jeUVZ����IENDB`���������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_extractfiles.png����������������������������������0000644�0001750�0000144�00000003047�15104114162�023770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUklUffwgwl_P 6!,(`ZDb*oD1"@`1 $T|�H%PcmwZ}mIH3sνwsI?ȷ] O*k2c_\6D 9Y.y;G. ΛVIX6{x#Y.ؿ% }{wA4} ϝʇ/Vgmp3+{Q|�L$ݔ#>V۷.g'K 3FO3;mjUbA4r¼a@fǯhwj]Vb~7wpނE+ JO-=m((B("U>eja <'ʕw#uPlɠF̩p@rEn*`Уb4|U.`4.[_ĜL@$(c# U.lF>H5$8 ^=@_T{IQHws` h%ΞY,f򾥦 /n3o1ΉhqǼJP%t kt6YeZHБ ^!!$+ \<5/#!p{\( Qd?jG5O{/rn_w{bFFi+(\9V캂sVr[2iEƍ8Ut>l`:glB k <#2NC$pu1zKTN ٸR5 S2u5BZC"ӥگ(E5DHR6!I FӃP,Dwޣqm2 \ HE)qg"!ED@#&<)#}] qH}mu`ٞEWE'OY "yC&QJ\FB[] Zp;ptBB,S,o<Ѽ) }>?bdQPs'&`R^yTŁfb3NS%OY A'-C[>ܩɨ:`HFj*H ^Z*=�k"v3҆XHEu\1`d R<{Dv$$NQ Y$bXx"znfBg > vq&`IjݙBkPQ/b6cQ0(pQvAYQdj4iXrNM9.f&pQEthkJZOlM(XVUs֯MR7NaĘp߭a^Ej*;+B|}[ɺɨӘōufoeLM~>+' I5H@nnp,;od̃٠� K;ó:mӫi[SS43҇c)(兯+vyϩy.A(C<2`a"3ɬ￙&'Ua׏4b c^f}�� ݁����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_exitfromtray.png����������������������������������0000644�0001750�0000144�00000002007�15104114162�024023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU]hU޹3M貱JiRbD(>E_"AjG"T,n6ښb$mlٝ{g&͌ ǝ||;nMLL8C >ӷ?~omѝgBZ }a dG}Q{eY[Vx[<;'֛̕ᯯ�m#!ȓȑ(82zUXu ~u�ɵր@ KЧA@a$p2Ǝ`Pa|X;Ƀ!I@ A2C ;Ů8Rh!Wk@X oAd{k;siRrdA$!7'%2ޜ7ϼ|dhuzvs,deEN$t *ܔ]{';16b.\%.b*v#EGy5DFFgpcb2p"WE,D,joy#G+,j<ԞYSdm-@zl/ttY܋\Yk91IPZ{ݸ rߗ~dW*\<u³{ G%ftsrj~_^{rp/a={ ?Ӎl:ZozM_G]9^zh`"]T=~:UĜ$fa(薄lhb;yϝfI`:d+V~U`dgt?6ЂiD@9DET@ViYŝg]M5s]|eS(ۆm|HT.e3x{~˂YbT%iw7eq{iX6Bggc[wl)v m ŭ0-9AN,6#����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_exit.png������������������������������������������0000644�0001750�0000144�00000002007�15104114162�022237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU]hU޹3M貱JiRbD(>E_"AjG"T,n6ښb$mlٝ{g&͌ ǝ||;nMLL8C >ӷ?~omѝgBZ }a dG}Q{eY[Vx[<;'֛̕ᯯ�m#!ȓȑ(82zUXu ~u�ɵր@ KЧA@a$p2Ǝ`Pa|X;Ƀ!I@ A2C ;Ů8Rh!Wk@X oAd{k;siRrdA$!7'%2ޜ7ϼ|dhuzvs,deEN$t *ܔ]{';16b.\%.b*v#EGy5DFFgpcb2p"WE,D,joy#G+,j<ԞYSdm-@zl/ttY܋\Yk91IPZ{ݸ rߗ~dW*\<u³{ G%ftsrj~_^{rp/a={ ?Ӎl:ZozM_G]9^zh`"]T=~:UĜ$fa(薄lhb;yϝfI`:d+V~U`dgt?6ЂiD@9DET@ViYŝg]M5s]|eS(ۆm|HT.e3x{~˂YbT%iw7eq{iX6Bggc[wl)v m ŭ0-9AN,6#����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_executescript.png���������������������������������0000644�0001750�0000144�00000002513�15104114162�024157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHǭyPe P]@Ѱ1fD%%pB4s̰ijH1X8@PX@[Kcr9vvA=j,M{~/x-r XUE|~ soِ/y%#DV ^ĒiOm~\\阚֏ <S01={BDh$]nj`gD)F󶄸0U'ljz"S$XZ%"6a0n$G;LʠG1J,[ JLI1<)ELBmEOaع+^EXvK�#*n>Ac3*u[4O~uv"5ǾjT5l}nF< r2.P܏m;?9EL6;;6Ox(VCEݳB)o^~PRr_'z5j?n(} SZuXji=Nk_".c7kƦ1- QQXJ~{c*q/1,'"ȑTD$#a=EktDڠ] Z_^AˠlBx%I_ sx٥)</O<�f:!?G3- GZ#٘-k ;S܅?GS~[#oC)04$A!?q b~_h Fk-0+g {58wP;pˡFh6&!j�d<L;TG&@:0} 6'OHJEØʀ -!n-{r!,ԞhITPɅ|سsad<8$AkcmjgG: ;hIj4SU! Q�G1;w܉_b0S7Ck9oq\_d:?/© T=.&0%<&$+e M[b5BLDGL!a!p"͐㾵xʺtyHnE<Wu^,l(lP#~K?=պO9 SpS cfvczk19e}C6_w1wACv"Gog%-t~Qd�1&̓y-ͿoC-J] 2&[Z=2Eo1&����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_exchange.png��������������������������������������0000644�0001750�0000144�00000002015�15104114162�023047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUkhTW>Fɖ&Qj >BSk|X)L)q!$XZH45 Ũ hj[*PҬ/4j6VLJKf_:s@)vgΜ93gYpτQHu) >hSF9Pt큯<Q񄾬uhfDqV~<!} R fDhYN*T5z+B?L(2ZJ1B1$CR^fQ)\υmpT:I| Gq6 } X2cR%`aۋGk�a5OI;gf uj>=×g0yk;e -걲j.2)NlfY>pPdIPI3G�7 'ﶣd|=kkqcԖWs󻳐 <b&e=?6<]:Q1P '|NJrc Sّ@5Wcs6&xEut�9Nc7PHٯj;6WҲO@q_:<۵(rf Z&߹Zt<FGUd+L-bKô<bi"JWIxsPfGhxm4bstMlM'O('?n*kat l=|-luިwE(0e bRUyܢAA;c7EdT{ 2M/Yp0Ѧ9.qQoNW$xvmtb{)2"f/*#>2cN<i*LJ"@ƣ=]HLK\Vp0jg(Y2;cjPB&I߃{.3�Ag×U@Fd%.����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_editcomment.png�����������������������������������0000644�0001750�0000144�00000001563�15104114162�023604� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��:IDATHKTmHSQ~ﶻOKZfTP *GE`E_P௠J(-1 qLvsNvw=ws*n=ܻs=yw|/d JpPC0 s3ySDM6N[+ܙ42- @*pB0`sՍpV<,E,18t93mT 9�Ǵ"Hp\ Z02=}ß/;S�ͥ=:Z9*ܥ #1 n@RPI#6g @PkKfPrpd gd-J NuCRBs|Wq�4F e?@AVBKP# N$P]%$'BSGpr$TP_)8Q! L^ H wrmw%$ML; c֏6AI/45*9w_}PSӼuI[w= њjg&Cb j8$gY:f'rRuU1Q8@*ҟMlST ;M݃-5OG\*vͼ7>p)Z2lJ@*S"H.4PxhK&�W|j{7/q <O-^cjZ>FG z:PVVmxzH<e G1R}A$ֳΤ;0( cD&C=,su˺>s:]cHM'eOln'C:ƒP T5�~z#]\����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_edit.png������������������������������������������0000644�0001750�0000144�00000002231�15104114162�022212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��`IDATHKTkLU~zo(MD0 .B4a%)CLc`C Fa&V6コs (8X昅t,d'y{yO^7dzZBj g_Ϋ7jRծh,�މx ?;u9B`gZ3#IrRV - #?GaNK/ VP+˷gdozu pbpI۠6cggqhӶ)qR5RRř>H B$p\B-¼E�q`P+d2Yf)X vdV`0P(6"wttZOzQD0wy .±xh4h4ҊAQBJkii)9އ)=GpٙQA[[ƤJ-DDV&ݧU(lwܨV 6eKe!ՁD:'J:p~!:pރfXD#Mղ7ˏ9Hw;{~x{+gzN}#K_.y{]II^F9}ekiN௅.+‹V>::NND$kE97�M\ǎы^i\n<[Kvah6UѨ%A"1a/07֏œWX`﷝ M "+(E$CCCRy>{ގ;+8a 3y?[ �SޫR%y^\\LQ}w#>kMf)5lN''"'gA tR(n\ ֈa4oJlF8�K+|> 9HP}}�4] E Հ *EG#9Fz퉋9II|2%41#KKKBCC敩in7 U^^ZZZj2`X,766*N[)[@fMxCc bl*7K7Td&&>qL`jM*2����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_dirhotlist.png������������������������������������0000644�0001750�0000144�00000002067�15104114162�023461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKT[k\U9s˵IN͵L Zi"`o }RKD *qLR0I&3mf&L&3utMKH~{}ַZk66614x]C C׹4 j(vȅ_qY,[h3A-Z !v;ɰ|S'(hv+/pX#!.s@J6€m]cEw7M jyPhLI[U:롹`m|e7Gri}ff0 swzVLGiJQJ='9C<Q˰|޶cz[2@B"ڮ6t@_eyСSXIipXS ų%79#u:e;SA@FlDpS(-QE]ɢ&GP; ݐ;ʘL,ؕKjm'V\)|ns"*"E4t<Ks:LUd#ף p|4| ɅN*AyrMp;юR!ƏLۖ EI\G[rUKAgt"uS@azοU1܄ٙۨ;DH/Ƶ_#2%~lb>x%%ג#(r =[t T�>7/ ѳ&m8}V&2=NZ`tq0||\W4|NL)9&g( xQ@/lMJ"t-8v4̑qj"zG8[Å7~fǧEvܟ rX3d l~*.kYd9f58йqF$+dlLyk^(`wgIG?qFR4y%�?~u@_~EU&!&HvyKVIZ\j)T|����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_countdircontent.png�������������������������������0000644�0001750�0000144�00000001736�15104114162�024520� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU;oA;;$()% =@  EBp@<D/(B$"BAAG/ؼ#>vo;BٟvwvvvvfvQJל*N6H6�?}.~*&Ϥ]LS;iaUЃRl<l4h|rꎜ}<Ǣq,OoH8l@[òcAشґR%t f"?$nQTQ:)mi4ຎH3Yx+ȩZ1b!*2D.Ȕ:7gx2&.$A(Wn[&#>tNk &&'dQ 2 W;A<߄^ 6, ىЇ"ma KcE5З_iHZ diTJ+JPQ>@Ä(Ό1j\?o&bg>ts_I6ץi# 90ĽrljLH% `m^oNQ&D47Yg+%Eh�Dxt? tDHD& #qoOܸxI;RG+[QW�}fF/!+XW[G^-7괐WF 2*I?�Q/|ip5|\N|Fd3 aں/ ='dZn!CT]5Ja''{`V pV-ߩL{;U4GoQ-: 'GgdĘ' %ԽUo,p(u-jud } XXH]/Tr|1E%qpܷuYQd\^_P _L'fKOJ:p%߂�. ]`WqP�ɞ@!zr����IENDB`����������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_copynamestoclip.png�������������������������������0000644�0001750�0000144�00000001663�15104114162�024506� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��zIDATHKU[lLAΞ=nA/. mP6XM˃T( oKS%i#[@qIDփH$ht.AZ{Ι33f#|˙.T3:;;bm(,,ipv5\W ̞eW4�wsWRS[xoHiǡ]tcWXL3;N QlNϷ*l ޢIw)<j  nb7\BVZ 0α9r GwcYS:&s(|'V&ms\ԥOKG|l~%7u4oA} &7RPI^$纺LU\\i+()`-|ocwҸ[Bg^APiJK̂2xiG<zfLĸ"k0rؒ:{nll�8i,p.`YxE};b'JӪ)td&FB Ȫ7o2.5DXJ?Ʊd|eOjEV9pLyg'T,@ϳl}[X݆G:pCbmJ2š]D? 4oM7Zd(%<dB 9D*Dۖ rdNE)m goD.ub ]htC&+(,qШBw6 pA.BL$ NT&t40(rÒ.4xj蚠G^&<>A0Dݠ>yq^Ee1üGz8_pa{m B Z&~&FںKKW ˲|d<JbPۓobL2 k?4'����IENDB`�����������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_copyfullnamestoclip.png���������������������������0000644�0001750�0000144�00000002023�15104114162�025360� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU_lElUH` (iAΦ-<�M|B hA,Hw'Dl쉇$`y;;~3vmӘK}73.###bmPRZ="ym%<[cMC=}SC(BHU19u C)4ơlOXTFػL~b{__F!kShJ %YѵȌchk-!<5$7o![�M<" p M8=;h:x&k�LtcD)pkCh1*e/*jEgf&|PfvQf;8;:/bX5'/ae47~Lq?}ߊW1"gl8 }2Iش*;kjjqDrdaw8*<}Q[656k|iMy\ow|xy {r+6!L{>pl~Z51c.1\q/[2D"~>nNÅ<zig8y0|YTmni|{\V_[#rm! +'̦"s>4!$Fbgt^T 8ML _(9oLxOI$t! 'ELIbqt]{*¡wJoe .4es%r|7YHt< dߢhTrMMMrEs|B>z!U)GDB DEaF"xTlȅBaJŰiSrΙ6̃M@f,y`Q9,8m3A?!3TUUA24ќ.|z@ok~Eatn߶-95 d2ZxC`&JׯM,X1;i"@Uܠa #!CV�7�\;D5����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_copy.png������������������������������������������0000644�0001750�0000144�00000001033�15104114162�022236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���PLTE������tRNS�+Miik{���IDATQN@_K11>z`DL@~���h �� w��(q�S�|(��P��gDP#�$ kD NE\"P$!z'T4IDP+!b?ƢlFD[j92. `/i�u֧.s4`s��Ҭh˩`����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_configtoolbars.png��������������������������������0000644�0001750�0000144�00000002527�15104114162�024310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUilUϼݙnavKZ V "0D 4H#Q#Ti9rlEi5i!!Bi 1;;;鶵}y58ceH$bUUuM[>6ðݷR&IW(u�5PE< Yr1QfG$IeK/'x.A&ݵp'wߧk>,+ P8,j] uF)>1&ѥWŝLKG9g7P{J0L "$%%7ol6|5ZQF_DsK$nPkcu`0�YӠk7xGr3~{G;(JHax ;6SJDehDsr X,HPAVG?чA9%7a+2ETap`07]ǁÑ%5|OQvN2qÅz0-(_u/O:9~)U0Ƀ! ֝ZitvyZoK7cDl8{Wvf /[j(bhXՉSicף|ltgFf[!%�u+Y )'7L3i |}|BxBvNYaPzFE#xd~H?Ft`dQ{u ]W. Ͽ(q_bOXTzC?1x?ލ ['7bx<.B+plOXVCwulQ5>x(@5 k~;;p#g]rυpF96iJ#Y}H{Yn'KXo*E]K 9n7WAUydB;6l>>+WA٭PZc ɉ݁ƶ{~?tjLl+=S:AdvrϽaL)%ȸQC T:aG3grۼPyG5,gSvHY^_(^JR=h|7*3 %Y/-jpU P=,`_H8 9Ú7xvr9i[SP/Y Фt�W(/ypISDR==`EA6᏶6X{$9Ƥ3 lI+ YTo .^ iYH ( Ae} \lbɣ2* T]鯣E _�ԗ[k����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_configdirhotlist.png������������������������������0000644�0001750�0000144�00000002443�15104114162�024645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHǽ]lUGm]B R4|H"c"1Cb !E$V^@!$R@L*@i[~l~̌,Rd=w9f?6<wD!4 wJXٖ3?݈&�Lc߃XB};/rdԻXF,E4AH潵󡳽zhj N�кX01:Cճ;@(䫚IA @Hq@r)AHJ>S, oqi"HĻGH9VH1QD@ģ<aCգ71DR"  ) 1�c<y i^p#RB -L RI `fAkᣀIEeߋ`f<BdɎ”P 0A?PGt4Ⱦe)7?}|@ܼ0$Fb }A,.'>= lR4ɁmDOH7:qaBf1oFqb0Q4t$;!ɜY=ˉAtFi i rσ)VĈp|kW%" `c>#@Msg},U_wxo22猿�iL>cB;i#BǕ1!=bW5d\4vI((l/" 3Gײ'aJ J_7+|i{$"PM+LV;?ig,ii鿊n"e1936ǐJGDzz]' ņՕ=}nunlN>h,?s^~tWd <91{}ǹw^ y€\bqs% -5"Uǁ7W?F{rڴ"3bFE7m0_{׺9po/v(`6f9l{ZGݻhQub;Læ03]G. Mc'-/�;Vݬ9L*!gmF,p!Gk{t}~|sƥw=Cr<nNyi/g{\%U6|l.KS+CW:z`pzSҳ.D;{ 䴦=.O!F����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_comparedirectories.png����������������������������0000644�0001750�0000144�00000002130�15104114162�025146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHK[LUƿeYV"@/*XFP1kHS>zi|@^Ĥ"E}i6iT!ڢJpA`?gfwRΞs9g>‡GeA4 @*X4o}OO<vѭP5UoZTK} Kc{M%Kš]V݂URU:+G]QnOKEr2;iITd&+Q_YQ|LO5uYζq6^ ;aN|r|r¤ȶV IB8 cr`zfΚ E(<1HEHy71{c`)#NcGG&f,c&B9ȢS4OǤAww7EddYa ]a|ɷQシ:_CǺ@> |�H7F(lB*?d'Wdș˳X H*N$)å3ߏwDKs3nm媭Ha!( Lrgd2WEgem å/H'HծWҡ@ll9ȗcflvl GF$ZUCi>m&֤Hn?+aIۋщF`)ct]X~2JCz1 46Cw6o %;A:1\EitqxV<PC"^yyBo9`H$z5 7Oo3 ßO"EFN+rFB4MϏx<&444rm+z57رغe3jj\.'7#X_ByžE,_+Envl=I뺑3G|k q\DȺX ZDslY/Ҭz /3xRYSNQGK"dzc}yXJ>̑gvQW(-$/IC!͑Hm#[eA `b2����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_comparecontents.png�������������������������������0000644�0001750�0000144�00000001604�15104114162�024474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��KIDATHKU]HSa~v8&YP]U$6fEtYvtQE.0 +!f!:M:>ٙۘs]9|9ѐX! Ex IV#Qdyk!E96oS @#Q_T5r,3hX͉zUTͣΣM =c)NBhHH�7D}V=-̕zP c P\`&7I;W$i4Y-6<X^H$DLpJ -K@" ~s!`F 'UuX#".~-ۚL$]IM/;8K]mr6[mn|c-J؃.Q.*ҭ5Bg,zjA4!V"=$8C Q3g<7۫ĠHApuԤg"΁DɣM)>6hnVRmW!Ueۚñ̹yiOlSvcQӔ,S!cfh~b0V#A~49KS;أ! 1#԰ 8YGkQU'v'Pw,校suwV9HC7Jqt@?sT8GD�E~Xb5P�Jա :j)WbBERos`:De\ ˋ(+mɄkjjNNҋS Ij JF\Xt.r!%84+kȔ�, TO iqk����IENDB`����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_columnsview.png�����������������������������������0000644�0001750�0000144�00000001433�15104114162�023643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKՕKhQ<&-%Xv iD[n|, /Dƪ1ZZn,.qյ[|;Ae!/l 6yΝsLPg̙ݙ;-6mry'rDRTtn# ֝i=.X"*U1Sf_}ϫ`,f ÇYTjRm!m8hբT[FMOӑj* Ebg t]˲Dlo p 2K_Ct.E3[1R+idxݟ=YYF'::8vDk0" hbQ$_ώjg`znމﰝ-EKxJ�@t0k*C4` H6Fp~ܚw"8~쨝-g"PDQ H`Lvm5nnV yW#ky' ;*D ܡGbSIβin;8ߜ1rdSOb>yD&.{F"W' |y<D0pꤝ-ޭ&LF[1.s0Mn0& ֊ zjS7؅PމȐ-UZhUP KJnWr4QQl;ܝ;c)gEjV=6ۨ7{gCo=]-\h /c1RŨ(>Vr �?"\2����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_closetab.png��������������������������������������0000644�0001750�0000144�00000001464�15104114162�023070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU[HTQ]wgƙ8NIb_RP1ȏe*'C@( 쁐AOCT( R!LgFΝǝyWeg{߻Q! dgHvYaЕG-P*Y9g-&9 yk$Hč"r5\?*1=x &/(go ['o"LgtR[#Mv'UzOzكQ}<zӬ#X!=<tJX$y}Bl(X64SEԤO"JڜPY߮grdFBx쎗X6aH>yF} Vu#MR;_$̥::bǜ7nv%*Z\.7<@PS-JjKCO~�HڬD: Xml(đ`5Pͥ8d9j]7g`n>`4Pb2 Sk' C#SU wgIl3^{ 7aڧ>u%9 _ioq3k@Y  9C^1we$̊ ,V1?Dq 2(N>X(4 /RbtzDnc=]߹D[`26iXVˤCkȫQgۙ:*7+RFC/RKK1Oּ. ;uB&|Zf:�~ZHt'����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_closealltabs.png����������������������������������0000644�0001750�0000144�00000001603�15104114162�023737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��JIDATHKU[HSakYE70KӠCA C=D C![Ce)"-(,Ф9sv3Rs]~|w#2aE=T;\dզˠMiT&ͤk<Ѳj=s~+ry<|{D-şš*>QSfUc]^4?Ƒ] F�u?>}IMhFg+j�N͍&XcUśѶmD'zdsRp#! U8u?bCm=eY'8ဥ!cP٨ dLPဌ S|-̪$r*la<y^E*gQovȹE *̎' .x- P=}$Izn]Ⱦvhݰ+bS_LJg{SFmXT@"3pnR ȶf@B!x-XQ8`6Ɗc[7?%>Lf ,&ùWlDѐ4cE!G".GKmy}b&\;ENW MUȥZ݈'o#ϩ=M1IZ|0q�ebR/\ٛ=]-qpYvhY[6XrYėOUAߘp\vFN(Nmjn>xFa??CLŖ#yI Xy| NڣV-ijlj1 Qƴ?_"a~ǟjcv\����IENDB`�����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_checksumverify.png��������������������������������0000644�0001750�0000144�00000002512�15104114162�024316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKUklTE>{`[bR H EQTH$ HA&!E04u%,ڇe>~܇3?%gg3ߙ3,Ad[#-׋b4Lw#\23|=v_[Wy"~D( \7]#ن'y1=~"PUUE$J0|R"h[Ȳ7;2<'d(J` < dDQZnnPj՚[fS x<cn6>}.GSb+wr͞K+>3*r5tD*ѨWkYݷ9!A.L#;}]x M>r PəĈ}4M/TT R/E,z!rn o t:Ml+i6+ MfSq$?p;T6BDzl}MCYL\q� 0P4sKz$I,I UCDH=xX{�aoV4 i؟k0Oey.QK)=XX5n|-\`Ted j^ZF~tdN<NG;QWXX(98jp8hEr[^Š.=1qS@ \83WhnnVoVlqfpXzzzn|vX 쇺6/+^XKP*upKps͕~3[:#{v =C9wU® 6T/,']H vϷ:* Kda|F >Jϩ͆@3Wt]Ց8+X?9Cvue !H֗.n Hh LpNIT̏Pɔ@Ъ{<凞f1fUdp,^Vܑp_+ > LI#$qonc[b]?<B!%h4moXYCbO``O h&ȣD @oD^B3{ٝ>cHl2P0P\d(BDG um-(42HJ2igbNrUD/ERXH$K/iT�BZE2pAyijsc5~Iɶx4Ud _,dǒ}>_6jnT[s dEJ擐b!9@�c�WL3_����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_checksumcalc.png����������������������������������0000644�0001750�0000144�00000002034�15104114162�023713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKU_h[enn&isڦ(:ЉSۓb;Q|R77 2Ata,llp֢k֖fM<'mWpw߹J]7`!Y*BY 6'nD$rXnAknsC/j$PX 4M"#ųgN{jp~2!BliqP,}8~'qK& J'HBX%<ϓX,VAqbQ(]TE -vsG8ycA].Y\\v[`$Iiz-}}L&S{'ہ-lV <\6TP MMMD8E1MX s7~Y bnannƻIiZ)YKFhڴg/PQT_ZZGh �EʃiufsT:twu&'' <!zR2LS9*0-ICDOIIɲxGV嫢q+E~U*:lzu5Ǯ|*[6}rRspl@4u T ַy|':m,YϬ!W$w>9:261oT[Tww,D])&3f|(W[S9OG{;vvB{0-hte׉$y,Y) /عݻ\l�Y^k}/uDR@z```ڳǕCZX<.ܺu3��MuccyZh#0\ex߾=8at:r!nX,ָ%UiԔxXo+=/\L<'* 1NbZAqQܡfsv)rD"}@@X\K@+*p49ufx0~"*?`5n"3TքZz1| 6}?-����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_calculatespace.png��������������������������������0000644�0001750�0000144�00000002516�15104114162�024244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKToTUL;C[M)b*Rq1hbэK 6*F61]˜Ԃ R ~0tf}zГ޹;}[f�Ԏ,D�7dyrCcD.s1#ޛ;2$3)|mm"&+תX,~߼YqNP`%&E ɮWl2ނT\FPoɶ;%PYpÛ/=8zБL^q  T03 \lBdHY A *P&#{"?<L8Uv&,m/w/"Hېd|Z\Q̙$ [nzm<a[Z=}x}C}%u.:CYAdN\Ѡ|83ҰW+=2ɲ$rڵe;< qZ~$8% uM3э/`CUب8(tg6Cy5jk¤ CfhvвT&ǍTn# Ô"jr׶L;p9P#M e䨋_u=#3.ڭ'Ld0X ­=(ΕTobR#$:/H4m~ʖ׍4BvL"8VlaYرA@!zH+4hLMH> E #ױ1ҍ*D&+]R!ՕFr+8[@s$IHF4S%WVrNJ}RZ%Ja(NM$NA9)w@YQ( $0u+%N6E;,"9΍2|of]N1]d\/' 騊Qz~K`Veܹo,^_ 馤'<ۛL0[Y%EوzR ; 5*:4'7qz gBNr]'O9}g [cz7_}NUSa;.\σK7|><}15O-4*bҏ_Oh,v OY$}iTc.)9k$υU4\<~&'">d2߿7-( X(Ջs?&f&fe~%X7gյ-zk+Џ깭83?y"ko&dA7_'/ ρ3Ge����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_briefview.png�������������������������������������0000644�0001750�0000144�00000001130�15104114162�023244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��IDATHKc5`bY902y,A.`dbd`o__[WЙSH|OF4� H* uLL ]b˧ {@b/10J yoU!Y 3Afs,W@f q,WQ][ܻ"()2plcì,aD2311L1ʃ̌t�b&>y "b@' 3 ĉl%Z IR@x3|,D.`+}�,,l ]P-0|G@P#Œʃj�j$3!՛۷`!r'g5T4;K0CyHv�{p6E@fff*(:ڈ|@  0|�XY5E"Y`@l.oYd~" 6V]ՀXUy�M 0@b_@�֔-IwF����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/cm_about.png�����������������������������������������0000644�0001750�0000144�00000002551�15104114162�022404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=��0IDATHKU]lU>;;3O[mKKKFшDR$7EH&A   h�!K@ҖΌYࣞݹswm/|]o(p8L0Jy2uN=q{${p$ot8H ȜuÄzÄl1)_~z+iEoH|'mU:;j:yv .Q7-M2"Y� }2. N^LŸ+`=Ѹ?O:av>g.̞,.a4s@s6GMz~yk>,ܘ˃wOpr78MK JUش>9-U8i$jcBGFGG /!%8'}g "К$:!Z%BhOd;>Ƃ1q 9?7@.}lʖ3ߴF> XIl'y{̖},d `�؁ $w2oBAߨw |,q*LpZn]ʌ]&!خbEö } 1e Du myȎ7?0 ?bjPV 1980&c<F�Xl1ɫŪ0S'[$d]' Xf`: 71+*iI8g15>DY6t뎱]RLO@Wl܆^CRk_C.\o@A-#L!8R!X FEQ [P\d|4LN堫Th9G7 s9(  sa?)?V?.㰑ƒtg9R#3c"A/B&S>.Dw&0g@o Ⅹh <,> VNV[U8u &HN0xfEWJzr𷆦T(ǮjZ9wk8B^vk;Jv02(f(h+�'bII^^ɋ9c@K\vF&J=WA\˕gl<9t+?M=;|O :6D+q&&s Ųq^PgjߨO` )_X(2˵G!{ˋ;ǿf%/L6Vo/ंhenۿ>-?(!063y����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/choose-encoding.png����������������������������������0000644�0001750�0000144�00000001371�15104114162�023656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���sBIT|d��� pHYs����+��IDATHNAwg!$(�h"B  O?Tt<�'^  "%4H 9E(B0+b4F&vfG|{RoA0ndƘ5A|h$§ qGD} ֺavPxr[#�Gժ{{{K=1 Ʋ,wpppP(~ �"EQ[8mn}NweY8taJ%WJ`DqV}}} 1p'pppmS.</>o !㠞fyyy(bool6տHDX]]e`` 𐉉 �Z7'PJaYO?䙙ߧX,!Z븠:hH)m K)$RYvww}?/";xNR1;;;rttDXZ"|'<czzafllD\!7 r۶i8}\__sqqє"(%S</&yZIj~$i _, upk9Rv*tuudp]t:Mgg'R[$$ZWϷsƧ"�?'�Zw@ĿRsk+|1�#b>͡q����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/24x24/actions/application-exit.png���������������������������������0000644�0001750�0000144�00000002472�15104114162�024067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ש���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���[]Yxzw ��--77����HH��������������Z\X_a]UWSXZVbd`proxyvsuq~~~uuulllfff```bbb킄zzzrrrjjjyyysssttt{{{ÛĤCB맧>>SS莎ꗗ잞۱!!UUrrMMLLOO鑑//77]]22..##!!xx1111TTد'&55CCDDGGJJ"!99efe𔕒ddc熈{{zxzwRTPŕjliDEB»ſ_a]WYUY[WZ\X���>���,tRNS�  $%C~ 砩���bKGD�H��� pHYs�� �� B(x��IDAT(c` YXX:o``126153dK;8:9{xr%}|CaNNQ hDLl\|oobX&❚ Kgdfe%E D% E%IAeUՒںz+Ʀֶ)DkJWhwOnRo_&O* 0Ȝ6g̤Y̝7P 2|g-\xeWIZѰ}ZurrP aY6mڬ P"(dmwܥ$ѽ{}<x"ؓ=vSϜ=w^]&qW^~͛7nք?x'O<y Z:/t_ڈĀ��M|����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016432� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020446� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000001177�15104114162�022661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��FIDAT8OTOHalF(R2:% dKv ̢K;-%$ Z "L`n3f{3=?}fAC-Ox<^0~(Fm iL;dsX^5[xM1 B!6!k>]T/>n8j{d(!1h~L\trɥϪC!tv(߶(I&CS & Ԓ#{Џc(T|skT&s':s]Tx? Q81S! ( OcW1t6,�BQDrOLob0҉뽨8pDASd*y!87#.U2FSBa˛( E%R mI >X e 0rLJd%ܼ5j)/q4ŵyn<ԒDޅ7⪁3_qɢL, a`n~^9eZ nYfp[-,GV#ǗTh8u[!08 C Z*;X�!B}"����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000001073�15104114162�023327� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8OT9*AVBH0V5h?TD1T0ꝝ7,.xnk/=;Ϣ;zf%n[RIjUnc0|D%vbt:D`ZVx<\.F#JXlZq, 1̼^/ǒS(|M{?Xdn6vD 8NH$h6X,0p\jl%_׫}r Nh  Vd2?tΥt(rrp8n{v8qrHx< J%8N^ZVI_fHBegYx<ۛ"FDdxVJ[29eG$I ^Rg_!T*OP(p]')V<+)rd}&!!^Hc:,᥁xlJPkz&L&~4Bvp x|����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000001154�15104114162�024427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��3IDAT8O͔n@{m:YVY"EH QS-CK@GC (,؞97^h0ҧ3>3͙z7+kԤ~<.[Qb4{zwf~t}y}^0!6Љc(|An?m'> /l<Ȅ&Di`s!(%Qh+76儗nh1DFN"-'hnd/DqA;,"xnb*wڍ`hd>m>\Q'BCO._;H;P=lHA|GrM| #|CwWa-CIrZCsT ;BZO<HUژ!{s0$ef"L՘:bEwc*$h f72aW j@],\j`>45呗Xq],- DT],T.ѨO:IY!vr 5C:%navU"9&?^05W����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000001634�15104114162�026047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��cIDAT8O[u9ҞWXi)ĬsYbv,Nc)81Q$-Y$[?L6o4.ٮzKph$ᵇB'Tpvylsy~?H׻?:u/M/y^g>_Qȭ v;}E-R&W"V+n:=w~+ 4ME0vw #->3Cz4H,Dqx&>_}sC?VԙFXeL)?*1['yu˽=+隱E"݊`={Ay&S;g/\Pֶ#,#Rp=Z}XXZPc3ώ{76ݠ eDRhwEX]WA9N?1@}GF76UJ<! 2T4ܛ^ho>fJ�"Jy0V-修M(2 We]f+[D46J*n^k�HEl~z˽y77e:7VsGQ*:5(l�C2 *ɹְ^YejME)u=9aA 뒰G? ؞PeZ&ns9]xBQ_J`jr"Z^y{|�YfD|'jv:܌2rgiѾٟ���HI'_ivȌG"ɑ51 xn)�ބ�ab|qwP2n|w)O̪U6Q0ohb96p[eE5ⶪe/pws'[j`j����IENDB`����������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020056� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000001404�15104114162�024576� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs����QA���tEXtSoftware�www.inkscape.org<��IDAT8MKTQ�5#.7B\>~@ E9em/Or.D]d2ܹ~)/\އpGM'pf/CVffff= XXXx}svsWZi  �� Xm0Мm777> /\Cҭ(2Q!a51JkR(PJa{e +Zc W:q2C_9DuN @LgOsjqp𛩩h @k-ZkI޽˫ikk;-JH)t?PI )%BHvwXYְ9dU !)LOLk:=hR&N5N�G %+B&FAb!P.HJ3:!R~p}uuFFG+FC!}),.~6RP(0: Nǩ�:6(U[sJq,Z8B)w#Eι^dX[[r\i–u<6Rmr?8oomm\;==8??~_//ro5����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/emblems/emblem-cloud-pinned.png������������������������������0000644�0001750�0000144�00000002173�15104114162�024407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8Mh\UyL&XLK:i1ETEׂFpJlu".TDtcW&HVN>&Lfy޼.BN7ps( !SqP>%j^S<&7�l淴F|ј\BT=>쉎.;SJ0ɘqڅs+-5 vG!=;|*zA]+*0661;<=s+?s)( !jD[Y"{XXç|-Q.}-Pk(#{+7^&v?>KIQtph5F|-%9){\u�H(MƠ]-oG\Gؓ`YcƠ#@TB~C(:8N\ ^ Prؾ3ߡ ^.sډOi=?JƉ W"IN$8fR?y/su۔U�Y&8�#Hwa,Emn�?ًRab ,CBdh8m3$afx!^ի_%PMJ(H B`{߉կEi'>y["B!o W(HY(}T,2aR9h&]ķb6.̎dk\)R֦@.,i1d8J\oIvbz+^&:SFO474H@D AHfaXZ-1H܁Kqqf'ŢmLN=怬H &TA" 7cXuS[ DfnК>! M"Q';aL7)tr|t:ODA"Ccv�h;jΘ09!`,� l(`n����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/emblems/emblem-cloud-online.png������������������������������0000644�0001750�0000144�00000001105�15104114162�024410� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs���v���vN{&���tEXtSoftware�www.inkscape.org<��IDAT8;Qsu&VAY1h Q,W,XXX X'5>mYL1Lfܙ=+aMN^8\ <GfE/ V+&x[mXn+]S͢44m=Z{L/Wk)RSի`�GdچO6VZE +zYGbvKaTa  =uY?,h�</\JwiRû| kCҼwFj| ~&80 :Ŷ-ra߿fwrY14. ֣c!^" �IO29!SazR4P"bR}M2!`M V:Im}\nmۯ9?H^Ŷ~Թ9ܻ# ! ɬAO\% oiC &R?8����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/emblems/emblem-cloud-offline.png�����������������������������0000644�0001750�0000144�00000002144�15104114162�024552� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8]LUo`%"y¢ۅfY b2ct Ĩ/LqfYY\ 8.lcHZh;ڷB'99s!fԷ p),DへMEpV1d38\Z,p L� F Z)f4<#{\U 1c˽.O_>t@_Apau kw;st߉BS5ȲEwʲ]Ͼb+c0�KkOݯP([UUAu9n"74}Ro+ oq麾%1<@'(q̆ b $ � &β- �zF!'{^W]aYSա�ZQqV �A"1LG}�dY'28 *pgy}M֬RNile&8o-<\pX6YKoЛ3�t?b"#/LYH@al&Lc>ӈ4O!o6~q �l95Z3Ơ#5hQIgZ,Ϻ:p׏I%�/ԾF.Nc*Rd6҃P<vvUUg?eYpYX� Kv !: e&MRJ�Sw46(Ϗ&}}CP8�LT<Qe<:a,X3�B p΅AH�7OU̅9?]_ct0lX!I5/L >yVˑm2d-Y2Z(&C8̈ `̘?u<2e 38ʃR Pdwn}}ڽG/._ȷ<kQ=Ӟ�)Ƨ}߅M+c�O  i<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020054� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/devices/camera-photo.png�������������������������������������0000644�0001750�0000144�00000001631�15104114162�023142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD�����NIDAT8͔OU?3;,˲T4t!`Sjڤ>aOIc(&(hʏB +wfvsJ_j<|{r'sl-`vz pmzG!ⅴPXnfK%@FG޾?TۤHLj(h4s,M ZO-`NZ|{#C5aL܍N-r^RPq B|'ˑ0쐦ju�uxYm<v\&#( dHM)�VVU667a/h64A๮KE!z+ hY__gffNG`g( `1kbrjupDQ$IZ!@͝m ?{_r&:X J|>00" 7ttRm38XeF/u]JP!Ji>RrvAJI5X ֤ eB\ZbQ'_ͷ \}vDVy~C/g-꿍Gp=WFq9jI16`x.NR^66k_Tr}|.e�te+VTk(&낅r ݼBEe=ޘ۷XY^TJ!BIV `O4hCNZmk5Fì>\*(8^,&,~S~rLbWV JH(΄xf9^^k saчoZ_ v/ o4Rj����IENDB`�������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020072� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/zoom-out.png�����������������������������������������0000644�0001750�0000144�00000001010�15104114162�022361� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT81k@rxiA*M "R'GGGM.P:Lj]T*6͐λN'ؤ5n}Ⴤ}C!?ީzex<^/W�4v:v}y 0On;`R.3a64lZf�]h4~>8<;m69Ec1Ld*`(T!%V!%zBcPVSd!c�v#SJq*H)=29bH9`ȄT*TFJ #K)vCqgoo meIZO `^#uATbZE:>DQU(b`J)URJ=g�ؿm�q/J9W[bl;O�oIFEZC����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/zoom-in.png������������������������������������������0000644�0001750�0000144�00000001201�15104114162�022162� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8͔1kPgE&%8Lcn]Bҡ?&CWI  .8F<Yn i1.swxK--u?V:ÝNg2~/8�l8??@S뺟Z֯r,^7=99y� Z- N<nc >uq4 gc"_]]1?{E"BR#�nooWt!U`"."yy(8<<dsss% 0n"BRA)ƃ^#"`@ɲ,9" PJaYV"жm C|g^8hme`Y)�~?,J!q?rbHc�Ar'L:R�h2̶ Ƙx pxgw3+Yf3X,涷km(Ðp8nVknwwն\2 Aw/_I=[����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000000472�15104114162�024643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD������ pHYs�� �� B(x���tIME  ���IDAT8ݓ=0 + 8G2u0!5w`)`ҕtIQDq>6뢹�]KSI, E&*r+<e-zֿFc1R$c�ۙCcֽ @2iYKAiQ{{r`W|=2s8e0eݘnӌmP?�H%E{����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000000461�15104114162�024471� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD������ pHYs�� �� B(x���tIME ���IDAT81 0?Ws#knΖLE!C 1zݤIiCQ H>=c)Dѐ(J@m?DV,3nv+!bPXS �6X,yHv�H?rF2GG�NP O\'WtF^rqSn;oN}3'����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-restore.png�������������������������������������0000644�0001750�0000144�00000001325�15104114162�023234� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭U_HQo64]=S@FH!Q/A AA KЃQ5VOHffn~PK{~߹s)F� (Xinhr~#\k֗έt׶>fU&kZ,=@tK(< nyvsX}y Mǵ#(V8cEN�KV$7J<$&T)P@Mp&9|@�[2= .,D U)-6x3HRwNx) \hT@pno-ڝ{ K.wLGW۩̠�4o,N&SVg5{omqJwq0K3@ N//=tyghûY0 0 *8B].ԕ uJA��T @"�kf*3ˬr(EFX�Lz4WZVQ3i!1T+Tӽ$�P4q.85d#FA18֏ XΆ~{EK`tÏ3C*Jʯ7 Y>[M/뜩SO\}C\>����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-refresh.png�������������������������������������0000644�0001750�0000144�00000002112�15104114162�023202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���sBIT|d��� pHYs��'��'MT��IDAT8kL\Es{,(R^TԈZkD1F5_L&5 6F X .bE ,.\].5~G7.Iɜ33gfH%5bϹtIY .Ư&?=]֋GzK[7NmokpZE^ f�RP�·~ot؇�\1}MXn�  �ndq4wq©-=c9F]mw>|#ꂼOg(YpU{$YCDZ*S, t^H2ƙ \8?h޿wx6{:yT4@)x,4OLҵ �`Ўmq.0L,X4 #a-08k78i!Pœ)O]alSPִ[O7-�C"LPM^yrG)xgtC&& )0W'׎9}(Ggt`-R |sDR V}mυ�>u9X̵ד} P`h_Z^W:F'n1[J2!;*<gF=ہ+i BlONO-bH)#Q\U-5{*=G}Ǥij*#P`iz M r{(:tm޺z{wvef eev)%c@tOJVCv=gEwV<hT̀Q�A**EBG/ |<@u{>8u,6?8}4c ig#1,S5Ʉ,/畃o~@Iqp[@` swolqմT"Eăe��rnLq 3��>'7-^:?v1EqHڿvb+����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-fullscreen.png����������������������������������0000644�0001750�0000144�00000001313�15104114162�023710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭T[HTQ];6^GwRjQFH̀VTTDe_~ #*> 쫢}5 Ic$#lFRg{= n8p8{Zg kb{dl٘27+lI m:ݛK OX7?bOM~br�cWD뛁Ij� (3.&'Kv>P38L8C =sX_75חN  f"`,(C]f(A{m5%8T9̢�+Mþ8՗>CQZ=+E( 7b`/0$3Ӂ@wzox"w20yJiR8ǶKv DOO('16Cҹ4(� pN,$VΖ]JcN.JA^ ])S*ۏ}_ s0/,?dmw]?5KavWU;=洇C,"7X51cHPlf<)zKMd�@:fsezgD1C㋪:Db?4)#M�@tʑT"@iVIg6.oXH$Zo18 ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/view-file.png����������������������������������������0000644�0001750�0000144�00000003322�15104114162�022467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME(+8+2��_IDAT8T���������������������������������������������������������������������������������������������������� 0������������g��������������������������������� �g������������������������������������������������������������������������������������������������������������������������������������������"""������������������������������������������������������������������������������������� ������������������������������������  �9:=�9:=��½��������������������������������������EEJ�����FJR�����������������������������������+,.�K�_I,�:-�4'�I=&�p�<?C�����������������������������������wS1������M>)���������������������������������������������������������������� � �������O7������������������������������98:��lL(��� ��2#� �����������������������������������pP(���bI'�$����WXV���������������������������������/.0������113��204��fJ�����������|���������������)'*� ��a`_8������� %%%EEEm����������������||{ ���������� ��� �����������������������������������������Wj/%����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/process-stop.png�������������������������������������0000644�0001750�0000144�00000002277�15104114162�023251� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8uKlTuwۙۙKKԈHA3R׺1>0$> *0j0NH42R@;;E ٝ||'?b+I$ g/G �iR2w+f$F웬BzRR"I½Fޟ1ܶlω<Ÿ^2"oKi9\ �Je"8];pzQ-=�9~zr u7_vf"!R!:pA䋤V޿v[BU'8GJ+--Kek']8E sQ¡cdWѾp=BeEjexf 2͚ t%ּ:A:Uxfrժ/;Rޞ] QA-zjz j Aإv*}m*޴-*Xupw%a(ܻA`_NP^|ڭo,c vQ ɩbnSON,v`42! ;:m$�n91YsXmKAy#L`*Q{^= Sɔ|F}>LaXeb (Ebu1 ()݉X~|bE9�휓ɠKpM=^ [.MtI4D=L%hR1{X$F-,> 74zp={�5?ORᦏ>Ď[$vc>[|v[(*Úg7FܿAspzT- W.sSgmpc>=>n+v5 P{'m&Cq#h|Eq)t)b/Ft['�Y晁lzjX(VC s0u` G[q& qk9K˪G!۴Ti! d6W*R0m?q+J/UqECXt']1 ^yx8uz.#5nye 9<'?ϑΤP"cZfn4A]-Gc%~p@[l@"k9ܧ|޿�Fu^L����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/object-rotate-right.png������������������������������0000644�0001750�0000144�00000002173�15104114162�024460� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8YL\eߝr:^+`%,i $M>.Iq5}Rc4jhbmS-&b)-PvZ``aΝ;wΤ?-ƉO^} U-\VS2Gf:z y &ư+)]ca u 8y=!^iOޑcm*Lff5h4 e8*5wխ-[Zc;[}z.cXd JBmi%X19:Ǿ[~Q\v \qUrf`E `L:T P)@A҆z]E ER/*+9Zwq�m+f9Q3[sB6pSsWN/ڟTwi , Kܮm<SX' {gy&?ܽi�x֩O2X[R`2QfxCkAϧ�ޝ虜Z:¾h e%[zyg@PAX`aF όyZZz"֩}`і9p&&>$*Р5yC7#U'Sovf&+D ɐ%&*Ew4¿Z\sA@�) PLI #&s,`�/f-eM8#r>-i|vCB@;^�p!RtnJeIVՑ漕H.VVf<#zdM:8g@bӊ`h11;GkM+yXPnP}=Q0kRbMBHH2l+Llj!C(f̷5+#1ngud4rMF˅D4KAh* xpPjHH{wg׏\�K@xkoyQz/GR@*EeU`g13Uo5[ 1j �Ư8ɭ%U7+dKB� t (*{ڟ'8/ i�eo䦖V,e! %ja0,-9:&>X &����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/object-rotate-left.png�������������������������������0000644�0001750�0000144�00000002156�15104114162�024276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8kL[e֞[ XF' mD ^1#]}0hf}æ.1se ,&1/p1nP.APhi9=~8=yϛ?zWU}6KҋO=e8 HhMյ53ْアnۗ(붧7R7vwQ֞{ +*HHFW&&/Xɑ _XYnEəm5*dP% I<oNV0t^4/\=2YhU0Z@U a.lpl#Zm 2w6yfSlOӞ?{}4Cf DeF(_nhl@�7km[˱%O_X[sM.)) Nxuzɮ=W]*YZWF/] F{ F4�@o<]Y9[jB3+g BD3ג;L6<DgqycEsIoq)< >BӜ־)a:µߞ?xH2dI$PTjD�c-Ր}ҳ鹭:!d�@4b6,tXB&^xwY?}B7ZY6�obLV[[ ,M{4qGֵ UsIEmFKmEiu"!*`y{keHup |Hr"/gv c WXѳrpfϰ ujF HVyk": ۣylеpB'6i3 D9b0 ( YR3diwhOG�EB/t̡Ԟ畄 )@BHI Sc]|}ɨ&�(�be &0xgX@H4Eq� oSzbY��Ի!�FӸnWkX.,!$Xcb};/ L܊����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/object-flip-horizontal.png���������������������������0000644�0001750�0000144�00000001603�15104114162�025165� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8ŔMhTWマy33IM$ bEIV*(.ĕ.lebd'\E( ,]*HďRSԴxsєU<s?F\oU ֋NB9{r,&+޼Y|ςW{²=J4i=slগ-~ T+),k �lBWc'�V-wsxx1Zj$rc#өWux``O%R+o.]jhg7>r6O/�\~4{o#4.0(b{=;K ]VZ7&w GH (0+[~}X=Noo4�EƊC};v�K5r= t'&&2 BE |!@P[ ;-XTjT!"QC2:b\!-c*c5L!MHf8[d҂cB&He>}899Y=K Ƅ\K˱j�:fB<vˢVM[OA Vv,dW萡HP[fdۓΟ[4L@ J)�0τ\}y_(`f*K3)wxOM*PVWk&�D:<i :A7[3zpi �p^<$bː_l˺l.=x|Ej{M}92^}PS����IENDB`�����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-time.png������������������������������������������0000644�0001750�0000144�00000003322�15104114162�022152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME(8s%��_IDAT8T�������������������������\;/d&M ������ڵ��b������������������������������������ lpF7 �������( �I.�ݤ�Wb�������������������������VU99 # �D�#� �����0����ɢS_����������������Ag++<31/2��g4� � ���*0)� ��D��M65/-�Э������������)EQA8�S�Z=�������������E��`;1hW8�������� ".V+$Z�3(���v����^[D�������H� �!��������S%1k8���"!�*(�kt�OM7���������� � � �,���� J�:*����42'�}Y�=A���������0�&����� ���������3/$�]�ADz������������������������� ��lkJ�������������������������� �pq�('�hhY���������������������� K�R-�����c����������������������������������������{�����(*!������ �������"%!�u� �ջs�������˲z�v��������������񼔨������������0 ;3{O-�_5� ������������m��T?����������������� ���1r� � ����������[Z����������������������7 _o A'��������ժ� �������������������������������������������������������������������������������������������������������������������������������������������������NRTA����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-savepreset.png������������������������������������0000644�0001750�0000144�00000003322�15104114162�023375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME)>��_IDAT8T�r68!��������������������������������g>�����p4T�����������tq������X ���� �&������ ������O� �������M����A��������������������@]���������AX������2S������� ����������������������������������������������������������������������������������������������������� ���������� ���� ������� ������������������������������������������������������������������������������������������������������������������������������������������������ ����������� �� �����������j?�������� ������������� ��� ����X8���������5"���������������� ���"��������������/#�����������-!��� ������������������������� ������������������ ��������������������Z�������������������� ������������������N8#����������������������������� ��X�0��hou�������"Z�������������������������� mWB�� � �������������� �������������������������������h?!���� ����������T������������������������������������������� ��������������������������������sl%����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-rename.png����������������������������������������0000644�0001750�0000144�00000003322�15104114162�022463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME) :��_IDAT8T�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2�A���������������������������������������������������������������������~�V3 �z�9��������������������������������������������������������������=1C3! ��'���������������������������������������������������~�M#@/ �������������������������r���������������������������M7P6' �����8������������������ �!������������������=%<. ����&��������������������Z8,5Y;, ��������������}�V1L2% ����6��������������������RF$!,&���0��22B1" ���5������������������������/H�.^%bF0# ��%��������������������������������3 �G ���/-���9����������������������������������������-�@�����$������������������������������������������������/L��1��������������������������������������������������������0 �C2���������������������������������������������������������������������P �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p~=����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-presets.png���������������������������������������0000644�0001750�0000144�00000003322�15104114162�022701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME)_=��_IDAT8T�����������������������������������������x5� ��������������������������������������������������������������������N�������������������������������������������������',1������������������������������������������������������ �����������������A�n'X�������������������� ���� � � �G 6IA+�v%�n�yju+���������� �!�S?aA���N_j �!\E.��  ���������������[3��72'���� � ��P\N�� ��������������������������� ��$����r;�HsX��������������������������ϳs 3@�S�� ?������������������G��������� ���<rղȹ���������S8,������������������������S�������� ��������������������i ��������������������������S������������������������������������ ������������������������������������������������������������������ �������������������� �����������������������������������������Y�d"����� ��� %"������������������������������������������ � ���������� ���������������������������������������������������������������������������������������������������������������������������������� ���� �����������������������������������������u� �������������������[������������������������������������)<��� ������������������������������:693x����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-plugin.png����������������������������������������0000644�0001750�0000144�00000003322�15104114162�022512� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME)!��_IDAT8T��������������������n�*"1o Γ/M��������������������������������������������������������� /n%8 �&@. .e����������������������������������������������������������������������������������������������������������������������������%h��� j�������������������������������������������������������������F�N�>�L����������������������������������������{.I,G�����������#><�F�1����������ͷS<ή���������������� 7v�[�����������կ�� +�ۀ�$����������8�ѭ���������������������������?�� �����������������������������������������������������%��������������������������������������������.tf�uʇ>fc5�������������������������^� :X������������:k��������������������� p��� 4%��ܸ���������������������������������������$( ��������"Rn�ū4͇@#x2x��������o$'������������������ ��1��+���� ��,;dR�&LC���� ���������E�ϕ �*YM �ϙv�-R ��������+(O)I.����l}Ag���������������uכ������ۥX$; ��������h������������������������������������������������������� �������  �@5<��������\** � ��� ����������������������ˆ��������� �������0(y���������������������������� ���������������������U5��� ������������������������������������L;72����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-pathtools.png�������������������������������������0000644�0001750�0000144�00000003322�15104114162�023231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME),T��_IDAT8T������������������������������������������������ruw[ �vurn����������������������������������������������������\\Z]��ba_muwz������������������������������������������������wz|AA>� �麺��������������������������������������������������S���ߛo��������������������������������������������������������� ��������������������������������������������������������������4��]`bB�ǑC+�����������"]6l����yO!EMM+���BCB,NNM����)%F����������%�r+wя0bF ������̒]"#$�����������8�>9X9*� �a�L�za;����߱�]N������������������6�((+����@��� %� ����������������������wf�4'"��*���61�������x�d 9����������g����aK�$^���=�������������7��,��Ň2������ ��%�J%���S�6N�~��������������������������A����������Yb:���>:���?��������������������������3�罬w�������09����������� �������������������������������Ʈ���� ���!�� ��������������������������������������������W}P6��������������������������������������������������� ������������������������������������������������������Ž������� ��:=�������������������������������������������������������������������������������������������������b��������\͆~����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-mrdroppresets.png���������������������������������0000644�0001750�0000144�00000003322�15104114162�024125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME*!ȹg��_IDAT8T6��������������������������������������������������:KA8 ����������������������������������� ��������� ������������������������������������ ����!!�[^a�� �������������������������������������������GJR��`di��� � ���������������������������������������������������SZ_��� ���������������������������������������������������oW9��������������������������������������-�1d�t������������������ ���������������������������������������� ������������������������� ������������������������������������������������������������� �������������������������������������������� ��������������������i�j<������������������������������������������������������������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������� ��������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������ ����������������������� �����������������������������������������������������������������������܆EpW����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-filename.png��������������������������������������0000644�0001750�0000144�00000003322�15104114162�022774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME)751_��_IDAT8T�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GG_���@@X����������������������������������������������������������RRc�������������������������������������������������������������"")�``v��������������������������������������������������������VVk���������tthhh�������������(�� �..<� ������������������###�������ttt�����������11?������hhh���~~~���������������������������������555�zzz����������jjj�������������������������������������������������������������yyy���������ggg��������������������������������������������������������������qqq���������������������������������������������������������������������ggg������������������������������������������EEE������mmm���������������������������������aaa��LLL�888� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ::e:����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-extension.png�������������������������������������0000644�0001750�0000144�00000003322�15104114162�023230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME*8<��_IDAT8T����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������kkk������]]]����������������������������������������������������lll�����������������������������������������������������������,,,�zzz��������������������������������������������vvv���������KK_�������������---�� �BBB�������������������qq������Ŷ�������������FFF������KK_���\\s������������������������������������������,,5�YYo����������PPb�������������������������������������������������������ZZo���������JJ]��������������������������������������������������������������~�������������������������������������������������������������������dd}�����t���������������������������������� �������vvU������RRd����������������������������������������}}j��((B�''3� �zz���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������i ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-editor.png����������������������������������������0000644�0001750�0000144�00000003322�15104114162�022502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME*"��_IDAT8T�����}1F�����������������������������ymB�����������������������������7WF+��������������������� ��nBˣ�]p��������������������������������������������������������ݎRo �������������������������������������� ��k@^�u������������������������������������������������#(����o>I(߇�y�������������������������������������������^6����������A.|J����������������������������������������������������5� 9;��������������������������������m������������������������´�&%*��6f$C 1�����������������������������������������%�*HP�Ѭ��ͶA'������������������������������������� /r��6�/�8&()���������������������y�)b��D��� e�J~������������������ ��������������������*c��F���:���������������������������������������K� 0s��F���t��B ������������������������������������> � Y��6����� ��������������������������������� �� /��Q�/������������������������������ �* ������������ל���J�-��������������������������������P����� BPc8Ѹ-�P������������������������  ����������n^PB6˝������������������������������������������������������������������ ������������������������������������������������? ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-deletepreset.png����������������������������������0000644�0001750�0000144�00000003322�15104114162�023701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME*-~L��_IDAT8T�r68!��������������������������������g>�����p4T�����������tq������X ���� �&������ ������O� �������M����A��������������������@]���������AX������2S������� ����������������������������������������������������������������������������������������������������� ���������� ���� ������� ����������������������������������������������������������������������������������������������������������������������������������������������� ����������� �� ��� ��m�����W~���������������� � � � ��� �� � ����陒��!6:���"9;�.�1!}����������������������� ������;G�!;Ayߛ����/#�����������-!��� ���#84��+�������������!NT�/������� ������������������ �������� x�69������������������������������� ��n������������4� � ���N8#������������������������������-�ԙ�,#(�$����������"Z�������������������������� �F+V#$$ ������h������ ��������������������������������������$3$)����Wq��������������������������������������������������������������������������j,f����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-date.png������������������������������������������0000644�0001750�0000144�00000003322�15104114162�022131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME*8��_IDAT8T���������������������jqv������������������������~����������������������������S�I��������������� �H��,�����������?x+� ����Q������������������S~�������������̯���7��ֽ� ��������������/g����4Q�������������/ ����������� ��������������������������� ������ ��/ ���������� ��� ��������������������������������������������������������������������� �� ������������������������������]UT��������sst���������������������������qpo����^__�A@@������������������������������� ���� ��� ��������������������������������101�llm������������������������������������������������������������������������������������������������������� +**�����������������)''����SQO ����������������������������������� ���������������������������������������������&%"�� �������������������������������������������������� ������������������ #��� ����������������������������������������������������������������������������������������������������������������������������\BUe����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-counter.png���������������������������������������0000644�0001750�0000144�00000003322�15104114162�022673� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME+V=M��_IDAT8T���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������000 ������������������������������'''���E�������������������� ����~~~F��� �jlt�BA<������ ��!! ��������,++�jig�MU\������� �����BA:���� ���������"" �CDC��=>>�����������112� �TOF��<<<�tsr�������������,*"������__^���ZYZ������nnm����������������� ���������kkm� �::;�����������������������������~������������������ �����������������������,,-�001�������������---R �����������������WWX���S�������������������������������&&&A ���������������������������������������h��� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������g ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-config.png����������������������������������������0000644�0001750�0000144�00000003322�15104114162�022461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME+L0��_IDAT8T����������������������������` ���ǐe����������������������������������������)[A��������� � ����B?~6�����������������������������^X3'@/ H���I6"C�J֍T��������������������UV@)�r<� ����� �S2���e8��ːa��������������� JH�����������������Ƭ>Ϸ�������������������P����������������������������n>$���������������B+J9'������ư!>V ����=. �p% ~J����%cG�������;cֱ���2Ul ��]=  ��������������ժ�������ç)Nj  ������������� � ����@+��]6��������d2 �Y�G�V٢�L�W��������$10! ���vG1'/ r![P�)Ȧ�Q��B�38� � !o7 ���������=)0,������(�2 � ��/0 ��������'����PH������IgP7������� J�&����� � � ��`<������� =����� � �G�Oe+� #��/�B��6s�=|u.���� )ٸ b �ü#/ ��Q� � D��zu"1 ݲ࿮���������-B ���0?|������e{j=ɔsڥJD*��G��� ������������������  G���.�#������ ��������d�Η3y������������������� !1zF������s'.Gҽ"(>"M�‚ ���������������������������������������������������|8 XК���  �����������������������������������������������F)��������� �����������l |����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/mr-clearfield.png������������������������������������0000644�0001750�0000144�00000003322�15104114162�023306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ���bKGD����%~��� pHYs����+���tIME+ܼ��_IDAT8T������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �� ������������������������������ �����7W������������������������ �����7W�������������������� �.�0/�/��ə����������������������.�0/�/�ɬ�� ��������������������������3�/��������������3�2 �����������������������������������4�3�������-����6�&�������9V�����������������������������/�@ �������/�K ������FU��������������������������������������7�'���������������,^��������������������������������������\����-�������������-^��������������������������������������������������������������������������������������������������������������������������6�&���������������+^�������������������������������������6�& �������� ��5�%�����������������������������������3�1��������.����7�'�������8V�������������������� �2�1��������.W��V����,�����2�0�ɬ�� ����������������������������EW����������U���E�����������������������������������������8X������������������������������8X����������������������������� �� ���������������������������������� �� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/media-skip-forward.png�������������������������������0000644�0001750�0000144�00000001561�15104114162�024270� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8SILSQ=[@@D E#QDM4DGhN7F&Ņ8ED*-(-S޻E1acz6oq9{_`iK- {`+Q*tW<w^K˜ViLgNw鈊f[Y]X:uUT5 sKYy2d4heVى++flD' �[s.r/$|+S,-^V v͍2_7|] {A 2�0`rԙiՖ8޴lAJ~Hǭr7[TRcrJag(MNJMO\se MNLHw}}QB2e*7پ=@0,pIq{ v,/w?6VJ\3@0K0�w[I$['ZRuH#�4zHjuٳd'{:#EBLUQ�t$ )ďesqD Nxc@$ *`6ݎ@[5=$eL9ĸ@Q >5?�c21ȱZ�T$L*3{scJ/U0l &hOK{P__ ''iGcjMz��$aA͝dž㍵h-s.s`a 4<{yR^@΀rS7U_jC3 y<g}C`͏|n:ZҥNXg7p@]@'����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/media-skip-backward.png������������������������������0000644�0001750�0000144�00000001517�15104114162�024403� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8SKlQJC5(mZӢBʔ6!X4"HHFDHHQtHB6{ϱ.wsаL5i3DHvt[½BFXZb,6_UQ?**Ž/u]x̵)/oNQESJOߔsݖhw"۪2+ڇi5�' jډzLwԦv.N=VTkk\,>v͒ٓo4��bAdŤ#;s?3[BLN4Y ק-FvX[�H2P Hp7d-wuw%3V O}TlgݮX(q" 1BoMھ;LjZ  4eN\J/ T5 kP"@Dxb!�I Lg-AFR0F%k��:�oۥ 46 0 Afٯ͝*cERS#$1o{ԝi' :,M@W`7OY GJIP Gj|q< qAw὏ꗧ~ C#?}?̝"qKV}i=jZc&Mӻʖ]) {ߕ[٢b8X ' ~T!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/media-playback-start.png�����������������������������0000644�0001750�0000144�00000001553�15104114162�024602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8OuRP0ɂ;\<ɦ, v`zEOzY=zǜ :A7(| ala;\Wy?�#yDx+;leL>+@Pp-toѕo1j'4AO$iZ/J2b :,N|U+Gs?}C^íP䮒9^<a8prjs}"/xz;b4`G!v;v5tܻ~ؚb@W<l}b\E &7gfDEJds7#`ȶh `qyX[ ;v!xsÞeWnq^$kT; ض6z{b "v5%ȅpOmukWDuQZ .˲P"XJzG;-`& Bc\lpP7.J¢'&gfr7S—(kE ZbJ�,|V+䝕2g wAc#eY ,-ԶT6lb7n]v]ꮋ<}!nfNfyz~ڧ7l5�-/`[w3k$<}wA#4}HeɉK uEꤗV*SKO/VomŒd6y[s[jzz;M����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/media-playback-pause.png�����������������������������0000644�0001750�0000144�00000000671�15104114162�024562� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��FIDAT8N0"HPP lwcd X02 Fxw`qWOv^�YLUpܖ�bzy}vr|ئGww3;-7xX5 _ %X8+qQX$�rxJ\ߡvyEt�% \!7A2K2̝\62*FX鐉NP&Y:rGʽ8唭)qY'?mzFF%. >Mc=3ԹA "9u},)����IENDB`�����������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/image-red-eye.png������������������������������������0000644�0001750�0000144�00000002233�15104114162�023212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��(IDAT8oU3wƯ4NƉiQUTP4 P7T�*b˂ kxj,*JH(M:ut<s=yxf.+ҧs9t]g/( b?΍O8ܫSSSG,˲[ozgg?pfffܹs-//}ԩR(4 4B1v7nqFf~~~quu˗/!0&fugoo۶)J N !޲,8A811Pվj/moo#$MS!MS|@)뺴Z-KOaF /.]tl>!<A CBi9sL۝@*�?~V}*ȸ ݼ&/$ ӶpNA`|?f�Ϟ=0�+c$IB<Rי&K\!&%t_w0KRVt:_u@LLL!!DHxk+˨vPJB)Q6oPu=V B0)� Bu]4M0 t))fsd�rY2lrY2~@) (<\.7t@q("c0$V$�S4ɛ&La$I (H)$I 3>e1%R�}˲p u] 4Mu zaHh^,ҫTX_[vG8q\__7 AEXÇ^9vؑ(hQT/ 0B_X;;7<~8w~?99~!x$%i9H D>P^c[[[YukT)mka\,JAdb!mƒ!4Mz^0GOI/I@JRlR))8L)ˑfܬ7<j9 gƋj'O.B$I�t]h\<- 8Df PgWO<8Nݲ}߿́G@x[;| c$~1D57-LGe ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/image-crop.png���������������������������������������0000644�0001750�0000144�00000001632�15104114162�022625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��'IDAT8Kh\UMn23IVPuҚRE%vS+tgv[Pq7.u.VQvb67IJ3&CNf{9.2y8|-?A[\<R( <'|&; y(6ş\;v=oԱۮ`]<Zɠ9[_tp� KWz<p7 ?^a74G=|^^m@n@x{'&Zd+Uds*x~$,Vj$ܢ5,9jqe}='Q 殽%Ubn*HfV8N;z!4o+gDQQ://K6qgsD q N<L,=KVNЏߨU.^BhdtGt T( `ܣèZC==uV R$QueƖ0=R3nzϥsc"Jbzqܖd嗟F $ЩWO+vZxZyMR߬eb#Ź+7hJU+hQJVJ )C$Jg 7nEw% .o*_H-4DHDk`2M?695pl߿ְfG/~ }:j˻+ y)cbkϾwu b @J0[~l*4?OTî�[nYI+( W>Oabat�����IENDB`������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/help-about.png���������������������������������������0000644�0001750�0000144�00000002132�15104114162�022636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE��� J J J J J J,T,T J J[z\{a~]|-U-UÔ#L!K"K$Nà!K-U/Wck"Ldq&O.U˦1X#L#M"L%Oe;`YxGiModXx Jl8`kKn2[YzFmCj'P-V4\:bKrMs6\%O4];cmTzV|l8^*S3[BiZ^`uj/X8`@gQvbcgj歼3\<dElRxȔekpsiIoborxŝrLret݋qy���,9@���,tRNS�(yxxxb ���bKGD�H���tIME '7��IDATc` 021031" sprqxx x`l&fV6lP]\=< 2 ;8xY{0 CB\#"E,1q I)ibP̬[ܼ"qҲʪںz E M-m]R'xO8i,ԫrSN:cY po*Ξ3w ))#<ϦxejHȤ-tD�V=o]���%tEXtdate:create�2017-05-21T13:59:14+03:00ܩl0���%tEXtdate:modify�2005-11-10T13:39:18+03:00F?^���tEXtSoftware�www.inkscape.org<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000001271�15104114162�021630� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭MHTQo3C-b)BHM{'E "6-"Z@]HZe2*%7=y.9Ǎ UURI�~;;9_`</m4C2.o3BˇcMv}pEKzN8X/MR]mY`<M/?]4>3|B"F&$١dyqDz %x7 5Aۙ(ZD[IlbUʨB 6a`U]UE_ :"\m4d A+a@,s00څZ3R1vQw ^,EJ*;6t(pw`q_fGa9shN;@67'3SOݴ.؇BRp��RSa Bn?slSP`!wݪ_T> )1_aZ�HIsl߰h'Ew$i ED�$҆2Ц� H!�~+fHE BDB�6�l|a d*3{1[p l^V�r�r'ťy0�8.>'천����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-top.png�������������������������������������������0000644�0001750�0000144�00000001416�15104114162�022007� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˝ohe?owE,]Ef03+(7E]] TD (z !mm̨wZsyGQp?& Z�\WgB\rRUtnfvs*ht@W'?Y8u,gK~j~33̴Μwí0H~c7sz ￐еb[]+{b]oqyts;s{v椱[i0W5+te67 y讀bwv[?/hgӻ/0=iZ޾$/Ámcnϵ7ov'[ӯIo b.Am|őӤZ=^Wl2Ye77;QʨCD:wFXCˊa0͙'nokmd p-�>a"</hX0^IP Ѿk?-7`P,h8Y$vnNᦎ �"Z90bQ[ >4TcS"R'"nV""] /f1Dʥo@$"Ŋ`9`l4%QJIO$ ⭑xQR*�T<61*`r *% 6яT����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-previous.png��������������������������������������0000644�0001750�0000144�00000001425�15104114162�023061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭Oh\UޤIئE-FJj`ą T]]Hq]iR"En 0uݨd.TDJiP4t︘78& wsw;pEUpك{" {c/{'ÃD+(<Nݷq+Wv[[<:!=eqC<6tW[ϰrD7;- >ݛG/fp bГ s]EX wZu:<~ﵟ_< (>5F Jԁ9`5ay"8tGFw_i^d3XLoOaaÈE0uEYL<Õ/_grHNnB)+u{�(4Xņ�XALKS#m~N7suC nx8kl+ARtXJ=\խH�pM<ٻnCG!s䙒F9'^4uyND(}jS>̦,?As8q8n(~�[˧όldj}{,T/*@\ *!"Wg?X|pn:n6RY�3—'#~*h){SLD8�_to]f9S &I1ڮvPhh ĪY}"b my)ѐ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-next.png������������������������������������������0000644�0001750�0000144�00000001356�15104114162�022166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭KhWgΗ|A|AQA .$IAFbW"VEqDh!BQ.DB>H4#H|46&1<E&:Fށ;s#Zr9 ,ʫ/4 hK;RQ8dO^fnakRqgϚ`nz6](򞡔шxRGF UϥC6˜;m@dۦn_[?X,jZicyަ'kxa'[VI}A**jIlLFL31IW/ ݃zk󮇴w?_DTBTB7q(_:akEt/iCp=WsəqT vA7(0�q+r0>9FpQLYTco$"Upݲ_ehgNI>όo~Ӟ8u[1kRr{=h$ܸ:Wg%ܹ}';al-@>S�E?v.4M •ͫ7j�~odR^N 7$S7U` m{֦wTa[km,"��0Idkli:�C#UK3Lv ^qʹg`b��3Ebn"����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-jump.png������������������������������������������0000644�0001750�0000144�00000001643�15104114162�022162� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��hPLTE���:s:s:s:t:t:s:s;sY$@x :t:s;u>vN:t:sL>v>wg/;t:s:t<u:s:s:sn7[#:t:t:s:s:s@x :s<v:s:s<v:s:s:s:s:s:s;t<t:s>u>v :sAy :s:sF|:s:s:s:sSl_zDJsSwt.g:sbtsz!hBqL\lkx(KjfdhYm`] _cpY W V lwDloRPOnV~OXNVUTQ_<t������=tRNS�A&1K]j s5g"P���bKGD�H���tIME&(D���IDATc` 021۲sp;8rq x]\=bB"^>~b0A [I)iY@9yJPpHh*LPMHh؆GDFE5@mLl\|6LPASRA ^ZzFfVvNN.YyH22.*.(.21BYIq9ZXXZZuF)( �Vc$ҒT���%tEXtdate:create�2017-05-21T15:11:31+03:00_A���%tEXtdate:modify�2006-03-22T23:03:38+03:00 * ���tEXtSoftware�www.inkscape.org<����IENDB`���������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-down.png������������������������������������������0000644�0001750�0000144�00000001267�15104114162�022160� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��~IDAT8˭]HTA3s-5R, %?`w |"Rz,爒Ƞ "MEL*WH/ڏ;sw삖;{fc頪Ŝ?`'hGKD0'""(l'% 3CAqB $444%d;ѭ_Ju9HT'ň 1İ:j6ck(.ڡ#Wj a!e9ZA8VbbZ"w;<ۙ0Lͦu˾LGG@�c@<a6`06257:.諾a6XYA%4L,cK(63?녥}6N0ޗ=upc6app1|)sqs=K oڳh/>09Z̥޾9GÝ{K}ZRzVR>Pv޼{Ng2:L9u2//o]dxťs?SM c�G�?u]4,*jٌ'/B�G��0W{A'˯BpXlmH\ ]yafxs.=2]nIXw�S7;.%8ل<͒P"6D����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/go-bottom.png����������������������������������������0000644�0001750�0000144�00000001361�15104114162�022510� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭]hTWsνfS1>(Z~|R*nY)D)>I1kJ*jg*E hAB7APF&`{QUާ޳S9Z;< SvG"Ӱo1J.|_0mo\+0Xjz_>'xgBEx& oߔ5az*)c"E+LUf}5~jkKMg0E}NRE%z.ȏ?<GkҚ ;-^wcw^2T1 'efvQ;?uG&a:qb46d'L2,).č#w{&yxGfli:|L s7s~4xl D _mi9P64,pq?5Gny}VcA}aSe̟i]8B_NF6Š3V_m6>㱯E� 0wَ2F$7;s=:L3 ʼ7"HF 冶;pAe]#kR'bL //�j� �W$ɛ$L2V0HA+hNYߜ*5l4ӚF:w^Z����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-undo.png����������������������������������������0000644�0001750�0000144�00000001143�15104114162�022467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE����}y|zl}y}yA}y~yūĠ��Ġ��˪]#Ġ�CC#Ġ�f¦æħĠ�Ġ�%1 son/2)/6i2@y, jvi oĩnimvȬ¢���6!E���'tRNS�Ϥ  20P"]iiE���bKGD�H��� pHYs�� �� B(x���IDATc` c 1c 2kcTWgfaeCc䂉qk730024777 [YY[[mlf9�0&;;u pusANQ1qO/od_/#w)i +`**)ci�U����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-select-all.png����������������������������������0000644�0001750�0000144�00000000654�15104114162�023555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���uPLTE���֩תثڭۮ������tRNS�5���bKGD�H���IDATӕa aE/RO7<bK:\"MCHRul`M cpZClėDRꜰ0K(ƘkY{KHc}¸hLpL!Z^Ӕw>y3aB e~æ�K~H5����IENDB`������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-redo.png����������������������������������������0000644�0001750�0000144�00000001133�15104114162�022452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���NNNNNNNNN INNEw�NN0U R NNN7N:NN#NZ,NNNNNNljksasgP$Fe$*u`& w4c1"##d$F���)���+tRNS�3CAF6J;+s0H^ j[ ���bKGD�H��� pHYs�� �� B(x���IDATc` h3bf"͌gaecA70D326C(?DL@JG"&dmciik3vptrvW6x =%4GHԖU0DU54 m�bpZF ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-paste.png���������������������������������������0000644�0001750�0000144�00000001217�15104114162�022640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���\\\__^lDmDlDkC�jB�mDlCjB�jB�oFjB�jB�nFnElCkCkClCkCjB�\\\lDkD\\[$~>pmd^^^|}~~{nld|@#ƈ'qod໻nmdŇ'fhdgid†(Ň&벴˹ֹ¾pmc#};sodjlh|={"���L���tRNS�d]d]���bKGD�H��� pHYs�� �� ����IDATc` 02#BEBRJZFFZJR "!+'Q-]=^>!M@`.HVf6vhN.hnH@A'/o4A_?�``PppYG삡a %;�f& z����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-find.png����������������������������������������0000644�0001750�0000144�00000001333�15104114162�022443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���stpmokˁЀщuvslnjlnj���ՁȦҢԨըȊҿꜺِˣ쎲آХ頾֥Éг͟ё߲֯㠺֗Ӊ~{܋πљУ���5Z���tRNS�Ы\1؉PT���bKGD�H��� pHYs�� �� ����tIME  :LX���IDATӕ0u+;PVJ>WH' 2M(HA @0]F!O$Si01KdsBd"(WziPllw`h6"8LgNfH>r.[ܯ+w܏ѣ(< 5WD=���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-11-16T13:03:58+03:00$:����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-find-replace.png��������������������������������0000644�0001750�0000144�00000001527�15104114162�024061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��APLTE���npmstpȧmokYUY������������ԧȊ꛹ِ˅썱ؗФꢿ߀Yˆлܔϭqёֻ榾ؗҬjљѕWϪiVȟdWjp[9«UʇLB&kW6���}{ꉋJ���tRNS�A\3DT���bKGD�H��� pHYs�� �� ����tIME 8!���IDATc` 0 11 1 1 KIJIIed*jBZZJPA]=}C#!c-mSm=fVBZ6PA;{!G'!gc6'T Nw-mO/Dԍ[IKK? 0H;8 *  ׎97ZK+&V;.>!1.JrJjbZzd?LP ̬LA��N+#W*���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2006-01-09T20:56:19+03:00>+����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-delete.png��������������������������������������0000644�0001750�0000144�00000001301�15104114162�022760� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��#PLTE��� J Ihienolmnkqrnopluvr{~yxyvɅąʜ⍎ޞ똙헙}~{ Jܜz|wٽN[jɜ,R+QXrmnj|���E$p\���9tRNS�g޼gɤE ���bKGD�H��� pHYs�� �� ����IDATӕE@@ >  B*L’|Ջ#0&IOmȑNXDdDQl>!KWl ͧ5ƭ ?}q'C1ImHerRh3uzdX6;@[(9xLdskx;Ke<xT= 63p ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-cut.png�����������������������������������������0000644�0001750�0000144�00000001555�15104114162�022324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���Џ/,JE    �##   !! ## ''"" Ъóɋٶ˵ߚ扉ó���J_���jtRNS�H՗}?9}3\}]\}zw3\C ���bKGD�H��� pHYs�� �� ����IDATc` 021(VdA6vN ̓$ț #$(+, '&$(_ )%]X$#l\qBʼe*ʨRSDsVUu6BZz}$!C#cS3 K+kC#;TӋۇ׏* g`OHLMfgdƓ�.1#=!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/edit-copy.png����������������������������������������0000644�0001750�0000144�00000001004�15104114162�022470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���ǚ򏐋ÌԘ���q���tRNS�OS}ЫP̣$ʩ���bKGD�H��� pHYs�� �� ����IDATӕY0(X&mv_6L9\ cT*by%"Ol4k9RcK_6B!ue떄Axmq0&ZO,wYgJ)_c [gX^x@<*/vk}����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/draw-rectangle.png�����������������������������������0000644�0001750�0000144�00000000666�15104114162�023507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��CIDAT81KAg/ ȑ++ ZX bbc0F*xY\ d>+gG 1ank0\wh<|y9mw[�ƴ8&FNQ'XP2Lƴ �9�HEEк Bb" PM]� ZS":ITc++z�aroABB *+]eBzܻP cZ�2l٪KQX-˯t(@+[�8H3*Yj.1Fݨ#?j *7Y7b^l[6Mӑ_Ā׀̉0����IENDB`��������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/draw-path.png����������������������������������������0000644�0001750�0000144�00000002276�15104114162�022476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��KIDAT8}mPTU˥mYP@`qAFJ% KUji3Y3:~qqԂQm)TJC^\[ޖi.^޽Oy e@P&Q~o<q[ZKf'pFgwzP -OVZ�\mk~ CBћ.蒋.G_�Nq>qTZ6o7l�iJRX|=蘐PLLpqQ8`m`ۗǏ-۹Pr]i>�ILLS:l IR!4edA_�'FC_lܔg J_zV澜'= $Y$ ޣ<({#vn!m\рfyaMKXԚ}r)xU#ؔ w{ܹnvc2r7Ӌd/}U& ,?w BZ&Y )*'¢f6EOgEFkg KsnngBfm {PZwu"3;k1Ci.�Ϸ¡t_yrw샖'Ї30 1ϘR�zܚ!{okee4∉ISNS LJ=0p�Ԩ8UbY-r99lZij $) ��~/F[5Wwu6<O4"m==6˲ 0<*a]+,-NaZ`E]qK/|ja[._5~ѻO:LHЄB c:e$��&WP2.nrDs.ql!؅ó�vƬU\sS Ί <8,ap X>-(WU;0L;3kUDMͅ[ #G7Q23߽gwj95G�RvɕyBj�{M�"0Q!IiLz3�@tdd^{UqSUJ@4o[�`<ë?מ93>_X;#V0~4?(>f9����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/draw-freehand.png������������������������������������0000644�0001750�0000144�00000002166�15104114162�023314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8[L\Es, ,X7eR hC4_LISbx75j&I6#^PE.% X. H {ΙAX) ~$&aCaiƭ7@mwx^RשׂĄy]%-*՜a^Ms8+ Ky{^w縊ez_,yGqPO2Zlf^@WdI pP z< �ĜWՓEɂ^B`cm?{Rih04 2ЉB`K�>1켯xDQj7MQ1t}'K}XIt) ,' Kj}Bdu.Z̴QV/+|N| ,9ݞ͓2_S8�*'>XF�@\ Wf }8IOlWB>UN6u[S@"`~%>6qQ='EkM&S$n ,}^66g&Ek4l-HM( S^eQ{_o*{;7LHηir6l\2=)L̬&qYy76ґKթKJ l*r*=YkL7wwEj8.|$EoεlɧwN!TAM0ekQ<]g)-huw?]nKS@@|x0YS$0EU娽�B  c##BzG1�jXdb*~m:N�p,dͦ�( #`4 ֳ3,qA{�8}PRzȦp»ò 3sGBO}�IZC"]ҨB`&ZRT=~a<`<quw"rK/*>`5[Zpp�|{Sroj*Tn228ap+,b Z2R-j7/ff�6j0����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/draw-ellipse.png�������������������������������������0000644�0001750�0000144�00000001603�15104114162�023170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��IDAT8oWƿ;3~$bP$ JZ"UJ] ¢UGj%VT] eg C*MU"D88vb{̽ h&4G6ӹι Hp*� Hg]lC-񊽱Ѩr.Sa_��FmX\.VbqFM^:s;Apd WpA� `L&KSL~זN>p`15j/QoVdoȝ֩=H躞:3 v@ j� `D<|jfate2ގd#C>2u- ){_ ]{<_x|UH� 'S~6}:� @(JU[VaU9ae 0)k'e%ؚE HPC##5S;: ţ,@}J$ \wd9UVIh[5 FvܡelaJl֜m.Ukͦ�j=Z%bJͬ1���|4%H;#AcEqB/6bƿz$8:ڽ&�ZrJO@�Y]9rqa(]z@X |Y/hg~pٱoO9|?`X1@I k|^q.8r3P4Oj>ϣ~�plgrj'?nnHϟ6ocibHyL �b錹z4-hfmV/,e����IENDB`�����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-save.png������������������������������������0000644�0001750�0000144�00000001403�15104114162�023350� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��bPLTE���lwMy8g8g8g=iJqXxzBpbѱhCnjZknpk8gfqsbpuJmAtDxQNj}npkkqnnⒷT}rukwyʏ=kXĘqsؕ˿ߒ;k?l֟Щҹê˨Ѩ���1 ���tRNS�|~o^~]/D���bKGD�H��� pHYs�� �� ����IDATc` 021 s rrq# KHJIɃ XPAQIYEUHM]CSIIIK,o dhdlbjfnCkic wrtrrrvrus zyz 9:;{ xjuA~>v0@];`P0`hiED# @ &LNH+ @�TPP�4r 8����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-save-as.png���������������������������������0000644�0001750�0000144�00000001322�15104114162�023751� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��;PLTE���lwMy8g8g8g=iJqXxzBpbѱhCnjZknpk8gfqsbpuJmAtDxQNj}npkkqnnⒷT}rukwyʏ=kXĘqsؕ˿ߒ;k?l𣤡���ﯰﷸ#}|���tRNS�|~o^~]/D���bKGD�H��� pHYs�� �� ����IDATc` 021 s rrq# KHJIɃ XPAQIYEUHM]CSIIIK,o dhdlbjfnCkic wrtrrrvrus zyz 9:;{ xjuA~>v0@];`P0`xD8 FFEGDDGEBS 5>-=*J@/�!((I v�i1 *����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-save-as-alt.png�����������������������������0000644�0001750�0000144�00000002056�15104114162�024534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭[lTU}tZjq[+ܪXB-1P#xIM@Q܌XS D!@4 h#I -LtS}e%+/[cZ3lh ˶`"K�!@ �Rg!HxMJSZZպ"@̍Y?X͹9V�ҳ"H WgNmۘB56obBRdmڎuNISͰÝ=wZ떍1H)Z#,A-x, 2 RZ?xT<<~a}l؄:P)EyY9J)ҸIɏ':X<SJJrGX&F ZkR!PZ&$&ʿaE3[@~ZHg.ӖZZ#@*C<q^4 غc!N%>U KPJM&PkR�i%qm2zi}3BIfLFZ�(<UFǶp-J~dy#){2D*oNYXS_+OE7k -q.U̟E݇~Nϔ8rmJ̵&eYk͜{.1{n5~nEޯ5çt{2C6$I {{yGG n[1hHC<l}{ +~' ZI?cNN0fY AJI%Je�maxl64cBr^ s/6T<0jR2" ˶ CmL&Oydۓ%l;Kz.9hll$8#Pj̟3bJϋR9=!0qp.D)%p"4P_?ipQ ,{Oı,+U;At`2</!W_.ޚ ;Ē=?uvxan;3uSE{цeΜfF俅Wfl.n����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-save-alt.png��������������������������������0000644�0001750�0000144�00000001273�15104114162�024133� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭MkW33-iM -Jk׭?C7n4J\R?#]p^Iwu.ffa3s}qfƇ,?L&KI3i' %p8Q?,//|bP:{|\c 8B8saPUzի R;3a8""ifFU%㍕if({D ("M7-Z;Ec9D|bk2U OOYUqĨ3 -MfZ�L i`m1h%ƙYP͐B[[Y0 ">4)lr\+ĺF4 Jźvb{ܾC !py!N/iʢI+{OKss̤)ǯ)4MiRTC3#T) !PM!<ӇZee�u]}yBJ꺊ޓH;Yҟf/\H,#s6JUW,@vBUVF>pxWpx #e0Lw㤼}Ved��$0B����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-properties.png������������������������������0000644�0001750�0000144�00000001065�15104114162�024612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���iiiXXXiifjjjYYYbbblllwwwȵ୭���#{���tRNS�VCh���bKGD�H��� pHYs�� �� ����tIME  &.[���IDATӕI0 @2 k $H9R7'˒4cb)@iri- AEhlKD$�$j)uP6ҦF*|N CebZ?_o< =���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-11-04T13:24:38+03:00c����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-page-setup.png������������������������������0000644�0001750�0000144�00000001650�15104114162�024470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��5IDAT8Oh\E?3fĮ Xi=K.!A/D!BQ"Vk/PxP%Ջݤݔ$v$n޼7bJ6g>3ߙS ]�ccc'&''/iHNMM=5==>`>OTՑRtGjF|>m[g>YM5Ƙۂ !ZT'xVՐRbY1AmۄaHXd``�cq p©񡋿LZAy!"1O #s!ޟy]SuaWWWonǑ v3_ĐNm(PJ!@J߆h;n|0ەxzlTPvϷšq/2X <>}BuU*C ),XdYK=\ץj8Zk2R)GqhPbssuwJiL�_J)E2d}}wR&2R <6EF5gP:T$ן;r,B}80TM61=o"sKש2O-VVV]_N(F%mLb49zS9>臨}K 1q<LP@G> A @K7#A3|q,_gyػA> ^m|GJ$@& 3:/vOs{9Ȥf8R͕J%S߿ͩ!2سhKx9đGs$nQ3<l6ۏy~pXW!]:����IENDB`����������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-open.png������������������������������������0000644�0001750�0000144�00000001620�15104114162�023354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��PLTE���VXTWYUVXTWYUY[WZ\X_a]UUUzzzyyy[\X[[[xxx[^ZUUUsss[]Ynnn]_[jjj[]Yeee[\Y___7g[[[4eVVV4fQQQ5fLLL5fHHH5gIII6fHHH6gEJQ5e2eVXTUWSŰܜн柠зWYUٳ@l8h7h6f5f5f4e꒵ەܹ祥6f똹ݕܸ7g雺ݚݖ܏ڋر䛛Ꮂي؅׃ց~yw{ӕۙ9hۂ}ԅ~UVK~���;x���-tRNS� ٞG.dW���bKGD�H��� pHYs�� �� B(x���IDATc` 021s8t y&fV6|AA;{sG' pu:{xzzyBuCBBBC!Q11>>qAĤ䔔ԴtiLFj&deA,XP. -7 E%0PZT,:eJ}RCcSsKk[{GGg*XP < jL<jґ)A�*YQAjx����IENDB`����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-new.png�������������������������������������0000644�0001750�0000144�00000001260�15104114162�023204� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���PLTE���6 F( < " " C$ ]6|rjiMj:hjNgkng@qrcFE𚖖w���[���tRNS�Ea 7\P%v9c(���bKGD�H��� pHYs�� �� ����tIME ",s���IDATc` 0C3 DP\ ddX9 J*j\PA/L$&o  ! [XZY Ab66v 0'AĜ1Q!B...H`u@AWTA^WdA$ J FJ��PY���%tEXtdate:create�2017-05-21T13:59:09+03:00q n���%tEXtdate:modify�2005-10-08T22:34:44+04:00#TM����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/document-edit.png������������������������������������0000644�0001750�0000144�00000001657�15104114162�023352� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��� pHYs�� M�� MέN���tEXtSoftware�www.inkscape.org<��<IDAT8]Le~6C[d,[S4ie!lDƄplq i23:6?tQuD /PmK>^c s~99'}6YF/\Hs<'-�,s@L|ƽ vin+OsKXSW3JG.$zg!*s/gK|{+KjhD\cVS7 p||[-w#]Ѽˍhُ Zpf9пr.L623tK]�RVX;U1K"L`Smg 7#=5MubhLo̧Nx:{wv8-^M3QX ںun7R;=T"i3q] ֫٬`ͥ1` j`^lf<l�[pU^ Ui` 񘡌olzrYg^rrx"^gha؝Ŵ)ʍПOʤKo~鑎Ig~v%Iz$Ie��{s`<u{=M=AgXe0 ɶmi 8PJqӶmrIܙ++'G:~M]frxj˲0 f( xW @@s?f* u+z}/:@<L4YUAPS ��UUW̓lʖJ>}q&t]�!fYV$IM&�}Jr,7 ����IENDB`���������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/copy-right-to-left.png�������������������������������0000644�0001750�0000144�00000001364�15104114162�024241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭MHTQ3of?Cn˜FAEFP[fZVժ7ffgYP-܄&UPP:Vkq;FA^ιywJDh=TZ"I;,f okإwdtry\L*b[&{Hh;wg^*.^;;::Zq}%{++ 00po͡l[X:hjIhop<�p8/JX6Ct6:{Q  �5e>˗P!p]mˊǖh3z r98X"fYsyCKKG (qj%6Jl\8x0amC2 +e3<<Lzz~.[[W^g꺱 A�<f" lTrqqT#;d Or ec 6>ӆiDZrss1Tyq h/x*f 2@-L0:E7J8 ԛu&H)Ny:#Z#i9@`2:[%"(l i@Ϊ6JLÛ@)VH6onF`sh [EFa);.r�cnbT2ڨd7 Q�Ŝ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/copy-left-to-right.png�������������������������������0000644�0001750�0000144�00000001335�15104114162�024237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭OHQ? A=b$4XpNᩋ(t(NM/"Ƀ'EجP ,Z;0.jo~oF(_7<xx_mmoe߼(jqxX%RܭQ<; Z[YFVePO\%K梨׻n0>>qQSTQ߇@Ԯ`HɡHqi� P_Ͻ)%%<j(*Js"x ]Z~ޞ"R74##X<nchv\^ͻR~=mM8M1MX[c@LڨdyA�d.ll=.-+eK(:zXvظry˂j.>~ )d;Bg0|\b�@m-2?6Ν~h---B)蟤 [MYo/ACLMx ]uk2ųB$_엫+]/BGJ&%RJ&ra@O?c;G@! 1<bїB42yāc`$ Jy&qW/TF">p�|bɾ. p8r;$c6B͹Z�CB0.^P����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/choose-encoding.png����������������������������������0000644�0001750�0000144�00000000747�15104114162�023654� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������� ��IDAT8˭@E<\Dh(6iq(td$Z @HabE/�Q 3iY &J#_q|1L @)@%Ý_1(c J) x>beynZ#햀J۶1`Ak}?ft:-Hh#m,KVvL u-dfn;ys`,\aX;KN Hmu4 L& CnG.�P,) G#MD`6"ra(2|,²,>zfC6%H`Y RVjR[rQ<.W?~g<uW5|˷ > PWt:OJo=dz/ZDg|9|+����IENDB`�������������������������doublecmd-1.1.30/pixmaps/dctheme/20x20/actions/application-exit.png���������������������������������0000644�0001750�0000144�00000002035�15104114162�024052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������W?���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<��LPLTE���[]Ymnkږ�� _a]UWSVXT\^Zdebhifhjgegcyyynnneee]]]YYY}uuulllddd```~~~hhhג>>vvvpppeeQQӢ<<aa짧00(("!~jj!!ee爈莎ꕕꖖ뚚dd^^iiHHJJLLMM荍66VV--%%nnss--66 QQyy%$$$88AA::<<==d_^IH55ooolk 䇈ňECsuqØac_ikhWYUXZVY[W���9���tRNS�"&:SM:I���bKGD�H��� pHYs�� �� B(x��IDATc` 0 C$3XPXJZFVN^AQIYEEU"o`hd 4153ג2c;8i:9{xzC}|͝CB8 Q1q I)PԴ̬ܼB.`QqIiYyEeUuMm7Tѯ;ǬI:M>cs_p%K- Xjoظi~mwܵ{'� "!8((DJ�]\y����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016444� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/places/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017713� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/places/folder.png��������������������������������������������0000644�0001750�0000144�00000000627�15104114162�021701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��^IDAT8͑jUA A1Z R V yA*䜝s=mlXݝ1bwڟ)K}G0_u'Wħ^//)=gWem"D335M<zfM}~ŶH"#sJ/PAUMm=w#l$j`4<wy, KT7(,1 yt Z60/ w  mbFznb%ւ;)jCeM 3=C�jMT39ݛ׼-A�;;cG9@ L@hǸB ����IENDB`���������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020460� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/x-office-spreadsheet.png���������������������������0000644�0001750�0000144�00000001101�15104114162�025164� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSMkQ=3HHDk7mL1n/D(覱*ح$`-mJPĵ 138fv8{=> r( *_ RXT"Ƕ1c}7j-\z!=w$ġgEt0L#~g%=~Mќ<N&+h\|7"G\miHh,pGҕ8>pݝolyT!^@'MPu9GD@ѓ"ll<NDU$wŐJˁ wj50TICS_UչY躎- p`-,q ]>iNrV`t3FJ GPRQ|VKFZ,lmo+vRyDbs `TB888qHdYd2̤Rj-!7%^ FQTGQB0j$Vp*Cz%����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/x-office-presentation.png��������������������������0000644�0001750�0000144�00000001036�15104114162�025377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OKAǿ٬ *h)$X?=kɥH\JAC"<Ak/E hiNCBb)FaM7ݐofv}H$ߕx<,pW*s$ À[QX4Q,467SFcߏr!* �d2 8* 8(g򚆡\.T mjvm3"a HB<.Lɗ/ ގb?kß$Ql#G/<DK8;>=�{Khjooei#[Ÿ/x98;.Qx0`0Wd^/Z)I=RV337麎ǁ HLcccӞƸW1XZB۩1[(_eˢTzi;PT[V'R [ 1PIf�SwL=����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/x-office-document.png������������������������������0000644�0001750�0000144�00000000710�15104114162�024500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OJQGm&W&wBB|h[� (T"2Ќw'9^!ιޙ@4 e/ MIV z}*$Vv!C5<t欃rَ͹#(_*"Es,'GqSM<<_)W(fځU*_|:?i({v=Zo1'% a-֫ۿ8:XFismE$8]6о݅mFE' l+^{}}}}瞬qp8̽c;{ƱdIյ=;h6$.}8juP01 C\\^<!fVbB ȤӲ v?RRR9='4L0Hl0�J%����IENDB`��������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/video-x-generic.png��������������������������������0000644�0001750�0000144�00000001142�15104114162�024151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��)IDAT8OkAǿ$KT,4^E D <EBsO,V-%m҃sRP!nS"nvfvS a&μ7o} rQ"^PԶU*aWJuUTk5 贮랷 P%$Ȳ,(, 5  ]ma@7z=4 dWݼ͢x Ϝ/0,KNo`%8d ^`q1 t@Pģ9/x hş4A~SS,tzd3PPj (ˢ>>>h6,>&Owj~6#x D&0z@6&s8"gx2 /aڦC)p($T|~ݖbs@ `PEL3~Ɒb1t]X6>=A;LdmNYj[4Wu}/P @UU_ wq+oSkB/+ F*b(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/unknown.png����������������������������������������0000644�0001750�0000144�00000001037�15104114162�022666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSKKQQf&.4DPԭP"]4,$;q?B]p."w qeK)vękzϽ茂 g{Εd\ZT*9AצӖJrmM g%TAo8[_@)5C D p!ôʘ]/#5gW5|XASU,O@U|9uS8$e91WzX(Dm ek#H((Z(!51Ar_Ǒjo T~:M$&"a}_Ӄthe 2;& f}th[$- S|x=R9T@-p^R1aYlmYܝ;T;`a-}#5ֶp {ܯϟ{V L"H`2v<Bp[Y.֋b} dU8J@D`' n*O~0�,%����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-po.png��������������������������������������0000644�0001750�0000144�00000001152�15104114162�023032� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��1IDAT8OkQǿv7쒶EBAP"%P'A͂'<!7XQ"Z#R5j)MC4?^v|{brW {%>4 sx/k1$( E2Hҧ9Q|Tj aaeW*XF;-'S8IwP~{ףEG(j.@~k!z kx9X <WxAp`HuDZ&|8;>[WNًy;d%bj, ڿmh *i"5C2Ο <~#gQSCfarҺ&stkZ0-o^@:b`tlE_Dn"@FZz#D,js KѺKb(dEJ 2]KLLMD>ymFD|} )/۩ݯV*;$M0i*-cۘWHFt' F����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-pascal.png����������������������������������0000644�0001750�0000144�00000000757�15104114162�023671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OJAƿKԜ!؉*X,4 J}D^DD v6A3]0VH/JŮi!@)@Iَ)VRsOlq{m^*6""ÝYds+%5D\P$<lBp[7WȄ&Sոv"2v]M.Ql6h!! wPM>_]_۱A &x(M4(7QVplGAɪsS(l.5q leG#>yȎ2"@s+SNݳsT*aM{ggGdž]``-8}!u 2,?Dr_$wb�r����IENDB`�����������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-lua.png�������������������������������������0000644�0001750�0000144�00000001063�15104114162�023176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OkAĴ9~ت-dHoER@"9 ѓG 86V#n1B+ɡ즋uvvf+"}`ywfwև 8d2J_VPXel KDˉV\Gi'ɼ1= x0]65KIC\ĸ V -!wLaXU ?d|zP?Nvׇ8$:;9)4[`qqM&WݩVx�>n պ4ONƘV3q)>õ=(˯J*s~(;JgsgzR.#KKW ﰸ# b;>M(tTe{~T*oXYyΓ|^+{ o4dhTlWbĵ0=(;ݓڶMS\BaGKer1al\ų6#vnUc����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-log.png�������������������������������������0000644�0001750�0000144�00000000772�15104114162�023204� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSMKA}3%D1DC!x Aփ ^d!?Ar/DTsI-^Taݝ-{AWݳNľv۞^iVs-.{ǁ!Z8q,!l|rf 5\Q*#5]@WS|u 2$rXhs5c-w-Ta>` k)9o"/;e-"BkჄ^hMiF9q]HQ9>6a0”(QV%,Aƒ2EEݥk <Eݓ v~C#6ܭ4S~|d i8..~Y9t =o}9i]'ƟK2UeIO1׳3Ͳ0`dv1$Ac55W�7wB,yF^KM����IENDB`������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-hash.png������������������������������������0000644�0001750�0000144�00000000745�15104114162�023346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OOAa )J΂l$_w`a,l]E)J"yp_=yg33 9$_p8DxR "ƯĹ*Zݎ+N|b)j5vKt~HD>N(Jfp\Z =c Bݮjh4seٳzM&Idd2, mqWQnՖx5)FA0D.h4ݳT4fj`0`0^FXV* j>JEFяsgEae],UH, g5Mz=q~C8M&J&d6nS^'Εef3Z.PLd3h?!.?x7pȭ˧\.bz~Z_9K*?c 5ٶL����IENDB`���������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-x-generic.png���������������������������������0000644�0001750�0000144�00000000772�15104114162�024037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSMKA}3%D1DC!x Aփ ^d!?Ar/DTsI-^Taݝ-{AWݳNľv۞^iVs-.{ǁ!Z8q,!l|rf 5\Q*#5]@WS|u 2$rXhs5c-w-Ta>` k)9o"/;e-"BkჄ^hMiF9q]HQ9>6a0”(QV%,Aƒ2EEݥk <Eݓ v~C#6ܭ4S~|d i8..~Y9t =o}9i]'ƟK2UeIO1׳3Ͳ0`dv1$Ac55W�7wB,yF^KM����IENDB`������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/text-html.png��������������������������������������0000644�0001750�0000144�00000001160�15104114162�023112� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��7IDAT8OMkQLfRIG,1 bm.R.޸*ŭ{ 2X`ZET֦i2ILjt#}res$|Xfggx*.77U`XND\(( wt0,#6]^KG\eѓ<.'hL 31r?yjҍ@x*&&dRXPTU;x ^ | @šO{,~+jA֤/IQ:JUeSY/b~ r6uṖa$WGhi n?^֣je#b &ϾnbǑ# Z"&h T#eIͦq?L6WUmAd9No8k N]U݈X}y1rHC Z#LޑvNpO�l7u^.,ZagZ-mxkVjj ;܁(AqVFk6̛'w^M gl����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/package-x-generic.png������������������������������0000644�0001750�0000144�00000000605�15104114162�024441� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��LIDAT8˥KJAv:L1@܉P.č7Apέ^ ŀկI SZ__w!�ofwZ %(xڧ.;[Q2lԸLJcG ies_,G8o+dԓa*u eDS=)xsF+ވqg'5 HƨV Qщv fWШ0|)v kZW<jkYLg3Eڜ_c!MhV˿/8n83)>;r> &o6#n3c����IENDB`���������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/image-x-generic.png��������������������������������0000644�0001750�0000144�00000001004�15104114162�024122� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OKQƿy$5,či`.T(.'7]piBP.Ji(FJBT !1$39wɦ|sϽsgHoV= _\M<C{ll ӿz%VD, $I*,ˈ)tuSAqu<:h32|1ˋY<ܔ|2#%Eb0`䴡a9dxfbCf T/3>=F&e)x7ռȑL $RJQ v㠚G*@*~P ]{Q %D4nՀݬU=Gf g}ȴn-|ٿ CImòlr*`ԸEDEǕe%(> G*3>ã 3 Z[3lAĀ3�z{����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/audio-x-generic.png��������������������������������0000644�0001750�0000144�00000001054�15104114162�024146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8Oo@ǿX(BIeAFЁl2E_Kg~ HTubVBHjDX(}]L9Or~w}�1s'e0|-pRʏ:Z r&I,!J I]ȹK~w d8KVR)D^ y9E r[F?~(CgIskX;cof Azs6jvK CxhW@0}L&7$@^VKyJ?d翴8h4X%t0Q̂^3QenXb 6^FOqug"|<)A4M<&hk>_+<V~{cc㙉*Ӹx13 }z=\^]5Cy_iSV;"}#{X8RAƵ1vhskR%U'oy2J˝o����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-x-shellscript.png����������������������0000644�0001750�0000144�00000000737�15104114162�026277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSKn0}q]Cc- c 9@p�s7 UǓyϓZcZi˥D_W}}PQ˲LC*Đ$ @ZLoI"-x,@9S()(̾^8L!|#~ .KXZn1>8Oƚͦ%9f-z%Z*8Yeh4X t&u]kmcKRZm"CLNX,8Na<Iy^6͌S4>Of Ҟ*8P&ƋlDLO% ^W>b8b07{B{!pMjC XzM.&/*S057Y!tj|7d�n:M����IENDB`���������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-x-rpm.png������������������������������0000644�0001750�0000144�00000001136�15104114162�024533� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��%IDAT8ORMhA~3I1ZKH/(7ZdK,zPDЂXQP*EE" BQm-&;3yiLO|̷͛ f.>RZgh ܲɪHmcƝǶW'VCwhiy4<h.ky(;t$U`hJYzl0G~՚y͉u*Ai"j`n0_ʲ'5%!${2F7ƑAe{U,D$2_ ${yJJ սܷ<YK3&4 c-BHb}-leOoU]Tjm]l~7gF?S-akYx3Z $&^=:%buޕl=M/N%]:qmrmUfV`{KN߂x AN!D]bnr Kpwh?XÆJ0yn/\WQpcR*_~f#8>t4561'd-a çv}몺5զ d`?]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-x-executable.png�����������������������0000644�0001750�0000144�00000000766�15104114162�026066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˵NaofMH(`; (h aH�7Mܰ`p.a4ހѕqB Q i e(.ffvY>ON!Y\ZYxz:IDd9gw=J"bi{vDҸ3>Lbd(T"/]{w]ItM31 ,;sDBO8=Xvf*�dk38F 7Pp4Vھ݉\3o"5 egWָ:o]\9P$flX>o,;3`2{50$Lj3 r |C|.[8<zxi7 H!PB+]1(y0;N4M`ꊷuc:wk ;^>_.R,LDRxFM����IENDB`����������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-x-deb.png������������������������������0000644�0001750�0000144�00000001117�15104114162�024466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8ORMHTQ6Ô? Et4h3M sUeEp T0 mp!&p(,21i{߻{=Uw9sϹ߻_0쥝*u&Yd{}%V@=+6rh6D6=H ' [I ߱]hu0GU#^5+%%Va—}`gbS!v1ﭔD 2l} me|*. 6tO'"y֥_֥qQc 1skk *]jzնP. L03;R.,P72Y\@5J=5:ѽ{u6qsD7}1KZC8R=簸 u]{HS eAHj[‰ ݻL<H̯WL`2]Nl_ŚүL?Rq Ǐ6_Ȏ^YQ2_Bw�~H V7����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-x-cd-image.png�������������������������0000644�0001750�0000144�00000001100�15104114162�025372� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8ON@?;v$ D)AJUŋ <bޠHVU״*JPS-v|ݱc.΢493猄Zr\<^*  Gc&)S͘&ea6v1^ %T*1d,.?WBh:G/E 2? Hl&:춷)d77 FV]hF.l:9S5I|Yw>AfTX( (Z.JkOdAp+D<:gQ*zFj4 EQX cBazd*5s]zՐE2!R aXx lwHD’4MDyT1cBŢ#*( t6x#='Sn=^w>k$qE$4F.><OOO999q/(8$IٲI?(WAQU5㲈W.. [BT r3zpZ"����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/mimetypes/application-pdf.png��������������������������������0000644�0001750�0000144�00000001072�15104114162�024240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OK#AƟ͇v6"Vj#HzEq R [- ,BH!JF,�9D!rő=d&{; YO8Ǽ;;ϳ3+@TՐۯRT$1|NQ:()4E&PE ]j%t ~!= tvvu2|Q ~*8UmV g`MHbYd77=:BJI&{6JI>ķrp![9IqNchj 1.z[[hLc41̠pz #X\įXl�ccJVij7N?<<@@J0dll tH*[$a x]\ CVE>6Ü@[_G:2*Z\سs S6xl1n,N~T ρA;1Gw]^օR-N >Y /8vo����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020070� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/emblem-unreadable.png��������������������������������0000644�0001750�0000144�00000001511�15104114162�024135� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���IDAT8eMlu�2M[ڭ%R>R?JB$c4c" 'OT151p(# XDB? ݝ]fwvgfjwyy5QةAH=fb2 ؈FGי7 EDtJ\.`ڂNmNXwoov`tT$6l@(ʪKJB['N\UW Â{,kVT/ uR}}Bq'a=O,ix5%vJ{Q=m|{9<Lb K׻[({ jHD5AQ^{B*KdF!u {2 :K}:tw:S{0w<Krp'֦my$3_~@kn _!8CG4M!X-ur`"h5x/ +:@��J;ynu0{�c$&1�𕛰,PadÓ=1~qbџ۳xQ|`Z vyfv?۟ w~{?Ncn}Q*I J=7QcPE %%Ǿ¹HQCpV ,,Iq|:4ʒ 7/U^NU\n!P$CV+",Bu) ٠wi3AA4! Pڀ,؀|_e Y:W:=4)����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/emblem-symbolic-link.png�����������������������������0000644�0001750�0000144�00000000723�15104114162�024613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���sBITO��� pHYs����:���tEXtSoftware�www.inkscape.org<���PLTE������������===_a^fgd  ! !! !!!###$$#'('))(..-000120231785786<=:>?<CDADEBDFBEEDGHFJLHLNJQSOTUQWXWWYUZ\W[]Yac_wxw e��� tRNS�Xopken���IDAT.a^ˉDʅ Wj�VU HV{ȤUmuX/Sw+YV|(INИlAr3/hK8?=%hAk@4f -q�$ZDK�?<Kr����IENDB`���������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/emblem-cloud-pinned.png������������������������������0000644�0001750�0000144�00000001560�15104114162�024420� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� n���tEXtSoftware�www.inkscape.org<��IDAT8m]h[u9IYڕ5IV-Ћ@Dz B@Ep~x"sCLf״49i4'997/'w � {¥6OYfUOe<31p_�@կ,,Al\YzFׂWp''95;?-U nv|qS]9/M{7 TM(- U,a#ӇOl]wt,7'H=V]rNjҌ'O=I<coMMvcte/Xci~"LGjm5T;GGsC*E&yݲM%@*cQ@j{k m‰Ԋ@6 tDJh8 yz5Lp 6"*Mvo t=:C[u FPZs3SoWK>Ь͵;̦ @mQg 斷@*/_M%X`uJqwފhRGN(J%;VTi\gcwb|s e6m R)no+m�qZkfҊrGZwX4|,Iqv} PN'v$4ݴ3p4ٛ6ƀMHRQҍOs뗨u4}C/ >E`FmʫeQھ!x_,}>oaC����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/emblem-cloud-online.png������������������������������0000644�0001750�0000144�00000000737�15104114162�024434� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs���^���^���tEXtSoftware�www.inkscape.org<��lIDAT8͑KBQϹOX`64D{TCPPKVs?ACCkTok"Gjj-%:}s|9�Rg5nfk3{^ $K-~9;(.Όߎ��OT=zQ2? b@4ה| �& qw%e{"G ("��SC[ynkjZ@A\Jv1f}bz7pe*PR9mw}W9k5_8 [�pS 4d#DE "ynI'O^=rÒ.0%=G7Z@sK0CUn O'cPl����IENDB`���������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/emblems/emblem-cloud-offline.png�����������������������������0000644�0001750�0000144�00000001523�15104114162�024564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� n���tEXtSoftware�www.inkscape.org<��IDAT8uS[HTQ]Lh:7QjJi>aRT@ #,z|>H * Ǥ2h|>dLFYkaʨYC!V��Gd;0Kǰ.gIpܘeKm�7꽍?ߋ`l]Kp,=9kSu0��Fd$91چs?b�� Q浙[nriݲԠNiu}F`hiE=2?B�.guU%l<[MhlrVˋqJ)�U0Z\tiˎ{_+.>AWNc RN\nj0 zJ~jF#!\}{Vt; L_2BAjLq&E=w |ō )0PB}(+:c3D4KQ�Mg<5=Є�9) \R:SYb�C@hB;<;%mFjDL+DhodnU�¯~//r[ O2&(�4zi~C5S̑l]0�g</m-eD7ߞW{nGZ �`]7NwJ+ Emz A/mzc ��Nfv} bmOJ1 d�|C[oD73HҜe8\=!E<4lnL;_c|F|˓q�f'"8hn*,>|����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/dirhotlist/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020631� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/dirhotlist/submenuwithmissing.png����������������������������0000644�0001750�0000144�00000001401�15104114162�025277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxYHTQ#PS9*c/F!TZBYj6ȔfwL+aLr 0%i\p&q\\ut\g$/.Qez:%djJs =,9N_)$Pƭ%]t5@~pbk~H6rWo/] s`0lW ViĬc ދ`*lozW-b<t jR|HxCOЀC b o-^xa%�yX]1\ rs< �sTUnX [+J3pe8Z>Pz.4TX]9lO4-r8\mX�g[.h x~rs%^, &biI0MEaY["VL *aݲD%݅*>oxu<\{ ƪ?9/ Ho ӨCn+OX/$X%Y|lB-< s=Wb;T#!0N@tJgbގ fV6G6fk!!'6+k@GN<C #B.y6݂- ٿ' I-!;Rb~!;lCbf\Eã4? *SF.ɂx":e&b'*MptF׿�*)ߑ&����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/dirhotlist/submenu.png���������������������������������������0000644�0001750�0000144�00000001476�15104114162�023025� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڄSKQ3$ZKZJ$؃PRу=T>EEA@RJER؋(HEUd]6ן(0gsa#5MCwK3 `BgқMcϊ\ H !0!@1AWrm�i}R2pVMEpUPE%1W Ji/`,to[ 1 4nӶD0}nNJL-jic`^ X=*(s >�,�.b@Q$U}М*~bs:f 9.* 3HrYǏAd֌>qPQy$9%I[4ɪ0ύ# ,w),"w)7Bs,8`Fz(1JID, ,�˽9#Fdz-lF>R'2>km<2@*4v!>ŨPŒi ,{SϹG.7^`uU oc}i)dCcfi$a*ufzC+I-rg!6.7rˊ*{X/Oɤܡ7 V v "m_2=өOyա^?<Ta3#�LeSUSJ}%fׅ'T%uU'uroV�E'h����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/dirhotlist/newaddition.png�����������������������������������0000644�0001750�0000144�00000001173�15104114162�023646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� B(x���tIME �UO-��IDAT8˥=hSaޖ{SI۴$ V\JEAM]AP['qpE.@%-A-Bh!?!!AŇ܍L&s5hkU_z>MP\g/[}C(˧=}$?�  il ci1 l22v\ޛ�Бl*gH֡(UmSk繼Pa3. rf_>cvMl/~p0Urs0~d4Ydi1S(e`6H<%A4jF')εbm;M  T -v[7H0t]|TtZ|}OT#[mm:%b@�VXF�"R AbH 0"duE\6%,V4_=EP ԅ0Z`={QmAP pkk/Ggs]�H"/�\7ᚩ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/dirhotlist/dirmissing.png������������������������������������0000644�0001750�0000144�00000001511�15104114162�023505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���IDAT8eMlu�2M[ڭ%R>R?JB$c4c" 'OT151p(# XDB? ݝ]fwvgfjwyy5QةAH=fb2 ؈FGי7 EDtJ\.`ڂNmNXwoov`tT$6l@(ʪKJB['N\UW Â{,kVT/ uR}}Bq'a=O,ix5%vJ{Q=m|{9<Lb K׻[({ jHD5AQ^{B*KdF!u {2 :K}:tw:S{0w<Krp'֦my$3_~@kn _!8CG4M!X-ur`"h5x/ +:@��J;ynu0{�c$&1�𕛰,PadÓ=1~qbџ۳xQ|`Z vyfv?۟ w~{?Ncn}Q*I J=7QcPE %%Ǿ¹HQCpV ,,Iq|:4ʒ 7/U^NU\n!P$CV+",Bu) ٠wi3AA4! Pڀ,؀|_e Y:W:=4)����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020066� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/network-wired.png������������������������������������0000644�0001750�0000144�00000001273�15104114162�023400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��� pHYs�� �� B(x���tIME/K��JIDAT8͒kpƟ蒬a`WuLOjềȆ C/ xqo<ҍR6 hꖮtKC3RePws{}.!"!dZ3}/}LQT,Z' !'G+1o{{K$!d"5!d<sK(#,3/Ş5 xNq xO$. Q7jn ڂid2p]qB!,,, O@y;]^^ HӠi~~$I4 '}t]l۷(U( A @6qp#Un=bsssa0 zkky<Mn�wvvnNNN* TUERq8.lƕbZnRtCE~ii)8,ˆ011۶FVIrXIT\E ǷZZ`koowcxx#ٶ0M3sn6-[J%_㴌_ ( /3����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/media-optical.png������������������������������������0000644�0001750�0000144�00000001643�15104114162�023310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIME55*})K��0IDAT8mO\ew8g@R(e. Mim5֔Ru+�[(ӈؤlبEع@$,`(0snJb˳xGpↆ/}@L_/NcD۷?xղfz^|21M_~y^.,,R)\\\ rXVCٙcN;v/﹑#@aH)i4"u'mV,hCÃǷ.//K9PP?G5Bt03yyҧw|v7Uq]]7hnn!NkkDJu&ՄO-..n@γJR sͬ/޸αR^&Oygt$3MS)0M! /<#}b1 8a@N?S)E躎mH)?�4Lq<! @H`hxJ)R:h;ץRꙮo]{[Ty>t: Оjgwog_$=D"vvwCRrJոi躎eZU/TZS!RŽ{ԏhBi =cXG+"@J ]7Fv)%GGGdYO޿;:P,XMێd2q0 ,L&#_g4Bhs$;;;Kڕi˲�'''W ʼne߰_Rt !Dd9 QnJ:����IENDB`���������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/media-floppy.png�������������������������������������0000644�0001750�0000144�00000001061�15104114162�023160� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��IDAT8A?34F,\#("Vbg(XɝXX\\an2"w!'/3Ã<u[T#bp*[ Jj8UAe^<{v 1AUFD89,�/lwa8dNd(Q$^r0`.Ϡ:H#+QLI y, L b+/Qשjk,K<gw=޷�8v~Oףl""cFEQ*~b ZueseYB PU CTN7$˲Y@eKfPU*֘/{?7Y MS:{4]2; ck3sucT~\nLL 0=#:gI[Q����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/media-flash.png��������������������������������������0000644�0001750�0000144�00000001137�15104114162�022750� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��IDAT8;kAn+((1 B,  {؋ 2? ,A`4FcA7K={7f<3s;Ngg怫 f6PD�\8Z[pũ9`6_>9ɱ8\y%KW.�t2cr33u�,#Mif8Jy.d8a<JZ@hPWm`7[A8 8GȯWju  wx}G IT*d#f�$"! ֐<$=3N[: QctpN? u|ob1S b#pm n>0!'`֋1 8ƞ$ۿ& ms<uY)'3cB޸+?Ĩ-oc}_h]Q,&h\' ص hwJONՅ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/drive-virtual.png������������������������������������0000644�0001750�0000144�00000001370�15104114162�023372� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��uIDATxڥSkZQ=>JF%ӤM8EBRCY fp-.R!L4`&&jb+m<sch ٬h4^xf2*uz||uyyF)zZ-6(nr/L;'n`TU- ^Zz7*xBp:t:dgggjfDdt HVףnCVwpx Iaa_V@araffXрTl6VAT(m\\,AabnnFrr*lde]K^<ݎJ@PHԟjRҠҹ=LNN\0?]o�@@n%2,,,l6sr,c~I]]^^vJ%)p8S{[\nP(|d2IJ$_描)9{b~~޺) ׳P`{{s$YD68 EκF7 F @p8`pxGBT*竤i8~',����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/drive-removable-media.png����������������������������0000644�0001750�0000144�00000000776�15104114162�024746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME �P���tEXtComment�Menu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG���IDAT8˭JP)b ! v/:7ҡ J3HY:y,p;H 7ws84eO/w䱵*>VKPJA+�ttwЩhQT{pBVnq8I�4 2?�)˲U!Dfw8_a7:{`YI8/޸7�۶QJ9�qP/ۛ!Q3GWGNP{Q����IENDB`��doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/drive-removable-media-usb.png������������������������0000755�0001750�0000144�00000001240�15104114162�025523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����:���tEXtSoftware�www.inkscape.org<��IDATxڕSn@})B*FH-'Ԋ_""q!JiHԞJ)R9Nų7z潙ٌJ%Uv$Ahhq"H@bAljŁp8<|oI912X.=TFHps&fBYqd{VʂR6Tpp>혘e##+s'u!3W_NO2b\t;(gcTm $܋4^"DD@\߇ܨАRpnv^#e`�nrY;Bчwһ@yBɭD'f@:0EyO>Z]#^E#-~jnVJ "~ Xa3szna[> F]5N~9Z^ wd2j5&7 I(f.em.Jo)"����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/drive-optical.png������������������������������������0000644�0001750�0000144�00000001320�15104114162�023332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ����tIMEsʥ���tEXtComment�Menu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG��IDAT8˝MkQ3fd`S,Eԍ(n "Z]H?ЂPDXhEADJhI&f!ЄŤ"=ù>{=R8ZQ(\) `-$w��j5 �A*2=L }ՌUI�AЃN,`߅�FH4TSUETQWDCFpˇ`0�`804 By^ 0!�.^Ib v OL&F!ݿ]č7jA@E?~DS!_YY9O^.a'u]�r/~]S�t:.E>!I߻gUqe/,oT7elnݾsk{nYݹW}-"[o?�'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/drive-harddisk.png�����������������������������������0000644�0001750�0000144�00000001133�15104114162�023472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME5|w���tEXtComment�Menu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG��PIDAT8˥Mn0@ &j$p7$ ސ'@,Al"(U{~3E6O'Zc9lU(ձL@Cf3�b�E�!}@ *H'D>�S=Ы TeYFu�LAEQ . �땪�0Ɛ)Ʉc@$ btk-�{vPv;mmKa<m[=㑪PUT$I8c97*"|2N#hLE ,ZKY�wj\2gzվ�U&l ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/devices/camera-photo.png�������������������������������������0000644�0001750�0000144�00000001364�15104114162�023157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD�����IDAT8ou?߻/ܝsQ괉*"ee a t XD*W $$h<8DN|w>}BL>ěoszlȯkџw{^۠V#*O'"X X IG:γZkNOh4hZdy n/e9UU+ܽAR,Z`@p15Iu�d2]gi0OQdY$gx4e:oyhm1Ȫ( ,#3=uш^G$1g,0<e9Y$ WlQ'k9s̼(d%Za@)EF,>Q=ᥛ[tx,KQJTBi5`u\j^DQ??`3UM~O@IO4[MƓ10~@S<af6qR>~CkE~q.5akgsrDpMy+X!HYXH�i\``g{0 g>+y5LfHӔÇ 7n�X, )(y啥ŗ_pIXkkcj`k.c6����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/apps/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017407� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/apps/utilities-terminal.png����������������������������������0000644�0001750�0000144�00000001234�15104114162�023741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME %F��)IDAT8}KTQ?w|3*dA W\E6jA`6JEb-%¢4P#+}_gF-s?{稡81Tbl9qgzǏMzN3uOޱ^,_7O[̦N?M$m=)/!"xqxIyAὣB?BDyYὔ@my uZ465$x%@lח 7 �8vD3 y9K!Im&J%x!ë7/Gam~A@m @)]�/yVˏP p�o'' ))W;E:KW/(x7>S:9.JqJBR((n Qo>B]#�p67mll4(!aFEkb'Z5hYY)hi 䗾_6d֕Q6 e5FX;$"עM����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/�����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020104� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/zoom-out.png�����������������������������������������0000644�0001750�0000144�00000000360�15104114162�022402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���?PLTE������tRNS� %֛���QIDATxu �:?kq~`r ȵI4\eK* i9%#՜C.u%"!yL~l :����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/zoom-in.png������������������������������������������0000644�0001750�0000144�00000000402�15104114162�022176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���EPLTE���G1���tRNS� %֛���]IDATxe EmG{ E?Gp|ܺeOp`7 Z_Q{980CX0kK8n" 7H �����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-sort-descending.png�����������������������������0000644�0001750�0000144�00000000536�15104114162�024656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������ pHYs�� �� B(x���tIMEk���IDAT8˝10*,˘ pwYk0!DVٸc0湴 ?iҼ{}eBm}�]Fv%�Sݤ*sQPٴT6-qQͯuPa^!spQ@ãs3MG2Nv;F�"\h{hF# vi e' P! �i$ uȵ98)Ĕ<,dW}�`ۺ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-sort-ascending.png������������������������������0000644�0001750�0000144�00000000540�15104114162�024501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������ pHYs�� �� B(x���tIME-8a���IDAT8c`%0I]$u5o?sˆKssX} gf07+f|0،v> ͙N ald̈́ a1gP;}_�v>X OϊpT뱆 -%J gfǠG%Z3c> 2aI$%8 ̎_d/D`Vfd ,aT;}_ztFr�VO[. ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-restore.png�������������������������������������0000644�0001750�0000144�00000001033�15104114162�023242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���PLTE���+U `@9.tcG^C`>0u5z/r4x"f<l<dA(n@<b?/x$l?0yA$ld8B+v0|2{46:=>+vC&o)p9D*r=2y5}#j='p(p?AIE<^7=>CCHHKMQRTVY`aadima-���AtRNS� %%0011<<BDRRt���IDATMU@�`wwwww"?|̀ar]g0 =G \M[,:es|խXEQZӛ,7xrg*@ 4UzB 3)H@�`dKcY+����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-refresh.png�������������������������������������0000644�0001750�0000144�00000001553�15104114162�023224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��"IDAT8mRMlTe={3m[ 3јF7`XDa M ta1L%47!«qВF;̴Yp=''\bfHe4jՄ'¸�.ؖp|t&E@O*}]gQ(V02v|g'-lzW6Ì�ĈdǂЉ  3EW Ŋ 5>.W f43=gOk40ĭCձž _M^l8l?3]X1/23ǕgƧg^hڷuS( wD-�HU/<A2e^ۏ^,}?,az �� ,Hc$Ugn�Sui&vn{'v>Eq4Akw_?߼''k'W%߼��[0j�>AX-/?ԩT=eYcJ奎Go��@W!'$�_ԓSln\{&?3 �D�V%r=?JeFmXv@x\qqah=Ѿ2;}З|9r-k5tT2>hMA҄�ǡ̖MD, z=*];[x 8wyIu�I1MN<-I7, #?[FՕD(̗ˣRmc�er-0{ W1oR ]!PՑl.Uvje����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-fullscreen.png����������������������������������0000644�0001750�0000144�00000001044�15104114162�023723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE���$mIii<K&s@@.t.!d$m@)r;5z1x(o6~.w>)uCb(p?B/x<?"l<*qB/y%o+v2{469:>Bg2|H3?*s2|6~=1w5|d-u;Ab?8GMiGK>CCDHHHJMNQV[`almxE���EtRNS�88CDGG^_kk ���IDATxu� �̶mvݱQ?XqSt )t}$:ۿ|[HjhFJ{XvL=<.EY\lXNC9Zci J|=ztdI&q m 0XT@Nc9(1dp����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/view-file.png����������������������������������������0000644�0001750�0000144�00000002174�15104114162�022505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  Œ��IDAT8/������������������������������������sqvU������������������������������������������������������������������������������������������������������������������)))����������������������������������)))������������������������������������������������������-7H� ���ʳ�stp\�����������������)))���'4H� ��#� �*K�mok1�������������������"+;��W= � ����,K�Ե�������������������)))����� � ����� ���������������������������������� ������������������������������ � �� �������������������NLM�ν� ������Բ��������\�����������2E\��� �а�"!#�����ٔ(������������������������lnjv������������ �+*+�������������������������������������������������������+*+�����������������������������������������������������������K����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/system-search.png������������������������������������0000644�0001750�0000144�00000001647�15104114162�023411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x���tIMElx��4IDAT8˥[hTwgn646>|P4B5M5TZ4DThk&/}/Hh@[d޷=9%Z 3Ïo>W~7ߊ*qBfyxE |ͲQE&NgRg2{v[c �;֦[aHR,(ĥ\6J>iTw=6DrQcJK6 hDčآŃCro::毫<MqIʥ"3d"rIP\fU[��,X6n0y}V34ݑApw־D$I v(x/7br]Hė4ʀ+m$y�Z$QO&ژ LhbN80@D<ޙw2>s79(" q�0ȭXt}rL&zee` DQJx+V5`rGArPpy<oy~p.NphśmV\VƋpȣ3TvޱJrU05,Y|ბ��cԮ�r?([ZQsgOS`]MNMJDkihXׇ%+]Nr_wVWWzz{=yH7N-Mpo>lxo#Eԉ}� 6.@o{`rO^Z&`l�Z[[[TCz ;fhO����IENDB`�����������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/process-stop.png�������������������������������������0000644�0001750�0000144�00000001572�15104114162�023260� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE����3�+++++$$I$y71}5/*.:)--9({7!0|6.. />*/->*5255,<*23+;+457*7+}6|6#/,-#/?,,.7#?$>34"9#:73E47UNWO_S`T%-{5%.(.;(-M0;0;TRVSuv;Z ;%?Ca8Q0I8R97:846%7"31C#3MD#2SHVGRFWG5A5A(2)3(/>D,1066;:9366:7;:;::IEJFJLJMdWeWA?A>agD@WW^]_\HCwMINJك{QJQKOG\N]Nga_U`UkWkW|}qZg쑈쒉q홅İ���DtRNS�**++,,--"��IDATJQo̱g)$0Vm%vmtem $hbJ0@:xs;=�[o �v]o0( A?C8l0f+*nSt*stܚϜ3.戫.$^péS0~.['V)L0D,@r=\%lb5,'HUmfG' BJ0[9"BZ\U,˴$ioxn!�c|„.����IENDB`��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/object-rotate-right.png������������������������������0000644�0001750�0000144�00000001214�15104114162�024465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��DPLTE����[ȟPKÞU—QŕUʗPǛUɖSØSSȗOƚUǚVǾۘVƝWʘTƘTșTƙWƙUɘUŘVřUśVǚXșUśYȚWțVǝZɛXǛYțXȚXDZ~ԙWǛYɲҚXǝ\ɵհ|ӚVǜXșUƝ\șVǙUƚYǝ\ɦjϙUǠaˤf͚VǛXȞ]ʟ^ʡcˤf͘TǙUǚVǛWțXȜZȡd˭tҙVƮwҚUǨlΙTǙUƜZȚWȦj̳՘SƬvѯzү{ӯ|Ұ}ӱԳմչغÙƠǠȠȡɣʤ˦̩ͪΫάѰ%d���StRNS� !"%%GNVVY[^agglrw{L"���IDATxcC~T&h:3B"^mR6S<Z]e$f![뛙nj�d5UvL$ \@'6SO*naodj. ֍Sb:iE T1ѐbA"F����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/object-rotate-left.png�������������������������������0000644�0001750�0000144�00000001041�15104114162�024300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxb�âQo&$۫ضĶScŶ6c-*m+z{Y?!8S*wIUP`m@;k.AEXg њ) fa zWJ@.\NVkY]d#[}c9.O�X_f Ǜ}!4q w!ź 927Q!iGNvOiB.4gi:?(+ =eA#^uz�GLMD@{xr-$؝_ %^U堋]l&хI<*RΛ7wóぺtuxW?̟=4'8Ҕ2?rMMigş: ?$z>83TV#i<DO{r{Dupf 5znq[^i 0|q`}3:M}~{Fh0KC����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/object-flip-horizontal.png���������������������������0000644�0001750�0000144�00000001037�15104114162�025200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˅NQƿ{)PQ!iZI]h%&>ĸ5 MH [\е*Y3teeZ9.Nqn|o3#6@ J1*T>snٸ 7?<.��� f�=X#�qe zӪ,߭pe�j3wֻ5s&"4^" &9XI+{S BWNR)~Ov}3,Z!�|2)wꟗ BR(Ӂ~ds ~|N@ -m8dnjb"gp)�z}ߙt# { UHdS{3t|+5 a�=pt8ƥ&Mfu:ՙtx(x?쵌L֓݇_VI%Fڇcc~xI LuPv{v{d(@O};*BM\;? Ӭ?a O����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-time.png������������������������������������������0000644�0001750�0000144�00000001677�15104114162�022177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OSMLWvfM0 R⠘E*Ej)jr璪RQslGnUIȖ8`7RqUETT v?~2JOڧ73̐D"A2$36<tZTU.L(5]]EO~N666X,ϰ a6IJϿ~'YPXfNs V.c =099 ZOVө'Udii ֵ۩hV:bDY8 |j5||ջ{J91"HL9bԔ (@x!zzRY1˭NOOϭ31g6 FtJɀ<\.AEX\XL&])744u^:Bڒ Y,P<;~x<L[͖=ߋF]cԍfjd~Y^YyA�^Ub4 R\5R"ʈ~ 龩 O"` N*4M3g0 vnB\23Q.JF Ybw nޟBI+3 &X=^ Ȁ!fdYNUU0{ z]SU~,& y*b=w?qn3,Vݸy!tZ(j4VU_",?/,D=J,Ez~ix<d- <.ޏ!ۍVPV<3uwawwL9"4e~g'p84d*TED<1fehb����IENDB`�����������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-savepreset.png������������������������������������0000644�0001750�0000144�00000001312�15104114162�023404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��lIDATxڔSKHTQAiS$-ܸVh*ja "j[+o$FȠDPVF(,{H5:s=m \|%/Xrcef@}@,RuO^!z>}.ߝ&2[e <i7NWJ}$x6/b^'\&[tqp}5H;h�nEOf+iLLiȤ*ŒɦɦSN LDnk@04-"]}65:A,!j[ȾQr<m|ա[\mFtA=2b7#پ {<Ym$"[vpI$v<mkj,E! K.$rVu^tk y? [`+o1^R^CPT %i8Ժ"&琝XRfMNzCStS +.ClY|/`�"IJ^yuz1i-X@2l# .M#>\fjkQ${.P4*Ph-Dzgyp(_ �TO7����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-rename.png����������������������������������������0000644�0001750�0000144�00000000715�15104114162�022500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<��JIDAT8c`zAe"E/W;> |Ka0XE\` s/vL Y x;h*0000\y_ 3Pe,50q5qUZ ?s½j$ƿVCw?3`wj>p/>5 hQbV{#c1NH6km-KppKpAC^%f _v軪(/7?gc5�j7UD4yؘ|`F go2&E#!$;�� ߁p�����IENDB`���������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-presets.png���������������������������������������0000644�0001750�0000144�00000001317�15104114162�022715� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��qIDATxڌSkAvv$T-BUh<TTEG{Q<H-*6ًz҃zd1F)=HR6m;;3ٍѦ=1;}{o5S ҤFi5 io8"J7w%)4, zƊ 篫r <x[(-*6U3|UZ H;WH%o&Q0v JA !jTwbH l1|[r TAl 񨋫\xEíGH+gG@i,@Ԇ׆ .py,T^8sb 8Kej LDemfb3N~/ݻ~LJ{1zoa?űQ&A6:h e4hz>wlؾLAZ2(2 ,.?Dj.оdf?Le 4^GF.�7g̓}Lc+*�xhwaj"C1?*%kzI@J%pY.*kJye߼4W$/C`[V":Itȕ*}>%)8VC: _xo�!w����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-plugin.png����������������������������������������0000644�0001750�0000144�00000001077�15104114162�022531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxKaǍ7`APmŔȒ".覫m.*),"ZZb !|{e7E?/[5BOg6/<ss޷ hZ5҃A~S-`yUs"{]`̎[ WX*a"sU܃ɪo_;.{ĔhHDž$tO ӺϨ ŻJ:6ArK 7k>w6&H)+ۧ`!Ow׬ٗEdîK/ZxJJr ^|e9X̀WOQx齐'o9CY\)VJPPqf5/eW%L&9wWĈ*_‡FI"پV#w)wu? a`5} cR/}j{1FTsEԠ!c[ b~" &1l j'Nd2gֈGZBʋV;w4$�&^����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-pathtools.png�������������������������������������0000644�0001750�0000144�00000001277�15104114162�023252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxOqYDzޣIAky[[l=RV[Ye5P479OEiNJd(x"w_iZcl>z?=�qbXjfs`2 F"~ơQb144 ΎN<0 z=KQTvzzmmm?a z=Oy@+"qrC\2B �p8000FU#*A%R& ?Ϟ6Z_o!t'`77&>ڷwQjdY2%zd7u\M @.~$:UKGTFf SSo?k=XZ )b.]mWz^uU$84[  I�8.L< ȅ]M$; r(s(&?!}c O|DC{ȲYNz+/T$#(켄F~SK@5i~HHZ/ Z$e0NeHc5}͟E{E $XZ*z%eV-HF KOIpp@uɄI 3gUj_Za?�`z����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-filename.png��������������������������������������0000644�0001750�0000144�00000000510�15104114162�023002� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxc`pBws_VV={^f@JJc,9ΧAbD õs0 ػw/X}SSS 2ɓ'wuuهx!!,~Mfl^xj!�شiܥ/_D"L:n�+$pUbbb /X?WO68VX/^ooowp"r��-PF����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-extension.png�������������������������������������0000644�0001750�0000144�00000000512�15104114162�023240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxc`pB�6իkii?{_`:;;s޽~BEEE`0j* ׂ7ʪWQ1 ΀ݻ_ Ojj߿⅖۷o1 ի R]v psbK׬Db � I̝{3?/}}[m� ּcvvٹXq]\|^^'qTW+*۷?ojItqx��ENFQ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-editor.png����������������������������������������0000644�0001750�0000144�00000001506�15104114162�022516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� IDATxUYOQҿ`^"FcL0Qq !h4"[wDHHLDc1cT "ۀ(t)҅vL_OGl/'9ߙLuE̽�%F! !M&6r*wTt,Kf<5?8 DxqI8ԵjTt,OwӰ3#q0;E&y|d#E@7ԉG1#wc~f"86BQn _""�6 m@'-aj;$ߨ`dVķYI ġ!nC~ OMYBra}RNR`DuNbU$"FlZlucz~<ƞZ[Ji$T0Ia;6G+ۇ dbBt$88Χ(j|#@~*O(Q3T.9*&[a#I \7_X� wm@]'L<݅. K#w]1Fqj|TavF3GDl52a+sb!hkV@w5Űe f* q9iZ= < sLvXK 6]O TNƑQ �:\Cƍ,b�VDa޴`MT8')/i%.QQ\k$zeymYw8%pZ39bZ+$|H,'E]`޳٪^vyI!(Y?),)**Mf\����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-droppresets.png�����������������������������������0000644�0001750�0000144�00000002434�15104114162�023603� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��"iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5.1 Windows" xmpMM:InstanceID="xmp.iid:F91A83F559AA11E2A9D5F406A6921C6B" xmpMM:DocumentID="xmp.did:F91A83F659AA11E2A9D5F406A6921C6B"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:F91A83F359AA11E2A9D5F406A6921C6B" stRef:documentID="xmp.did:F91A83F459AA11E2A9D5F406A6921C6B"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>7z��IDATxڌSJA=3Bb, ࣳQ`!(bchc`X &$qά1f…a=gk<aF6#bm_2[Ұ- XDPA]+Bp %0, T EnwŘ.T1ߑYDEĎ([%-p5�R0AW`ڭ-cCӀ 2K3dG㏵NhQ{1F􀱔/ 3 wJd h~ڑffK 2x 0٠+wEJTx#Ğp r@=!A>fX]LYW �7.'(>����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-deletepreset.png����������������������������������0000644�0001750�0000144�00000001233�15104114162�023712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��=IDATxڜSKTQs1D bZfF !Ed mta5!lD]ʙY[D0ѢMq}5"}6?q|�4Zc8ҕŅεXukL{;ɧ2Cf:�@%y&w_k]Ug& DNoT5&ljo G֨LzYH*0xBsXPAQ8tr`c9 UU-,b2o< Zv H8X(K[|(=7%ɰ )3p)1TX;=Xwl3Ʒxlܛ)P rHTJàB I6J^rr"ZA4&m؉XPٶouX`=wattYeє `ELQ ME "_)Bն=t# x7r5L^Je?V78gb jkн ֿ/bo4W˨t6csI!8uk n52o�څsV����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-date.png������������������������������������������0000644�0001750�0000144�00000001310�15104114162�022136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATx_HSQo ճ[ћDIt>dk,4kZeK?i hrsv};Hw%{s=?9G?:qo5/3҇[]ICSo7wŃV�8S3b*8-ͨPm߸pNw +=8{.s8 8 ;aͨ X/a|/~}DA"NP鶗fTA&n! X~'}O'Sl+HK3*bD 0b_&D6Y  1/ͨ�r< Dc4 WZAV -?!f^Q&yҌD x}>]`o%CRdW�Mf'bmm-ףֱpj+9%~�h333A܄͢UM~aqa ^9�mFfeJO!K�4ACCt:**N=~̺09�0dL&t: EQԝ=n7ff]HXZYa_ j G(Uqu-ȳ@1nߖXoph�hvݥo&4v~vOѷ-I:Dt?ufؾY!����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-counter.png���������������������������������������0000644�0001750�0000144�00000001004�15104114162�022700� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxKOPbEP#cىc5IB )je;OH[~W$qHR%r:w||+[,B/K8\m˲<*rD�FC0D49^ãQRPTyDu.oBiPlۂ6qqybfRt~I\n4BV9GL&c}|8>sGVf'V N[:DX pdk+wyEJe!E\quVWנ) C$<vs#D"XZRiR([N65M,$q}U kUM0LBN1WK 0eLFC:!暦X_Oncs1nx['/" V\bL O%����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-config.png����������������������������������������0000644�0001750�0000144�00000001337�15104114162�022477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxuS[Ha.誛. as! "A--ئ&y( u$R7ѹ_aӜln+I/BS{jxxϾiqEzb]R-\ArT}3lP꜐rP4 ArT"mh~GӍ\s N9Q ;:_9┣m?BngFE) m#mUV-'{96r"sM;Ʀ׵#KHy%HgCD<Ԃi4[EY9]M!iv<[?f M3);O;1 }7*,n} B1"\m:VcY ۑ8Gb^+U-K$rC?g~ƽP|Cc 3lbE/–#hN9}$%xܷ xa[Ek StI?i"˰S\텰@k<1FjFq [\it"<Иq)ں+" @A6xsT]7]bb>Æ7I "~G"-2"҂ ;UYp0n^g[ 4<R`EOlB¹03'o3%z;@����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/mr-clearfield.png������������������������������������0000644�0001750�0000144�00000000570�15104114162�023322� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����+���tEXtSoftware�www.inkscape.org<���IDAT8͒AJ@dʸ  bIBz<BSn/1iw$v4iзyox )2II>IVqUmc?!cCN!jo * 3taO!c" m Am;gh۵Ff/;5~A_.B+g"T(ίG/ɮm]K6 6s]}0| JۗxU >ooyB����IENDB`����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/media-skip-forward.png�������������������������������0000644�0001750�0000144�00000000752�15104114162�024303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���PLTE������3�3�109 <IP ?HK EO \ZMPQTUXY ZMV[!_#`,g2m,m(i<|H7x0s`QCFMOORSVVXZ\_ccegko:?}숼V���FtRNS�/0HHf '���IDATxڬă1�ῶmLjԞ'W y8G[w#z4OE(ܬiZ5Qn:?/>l=W5'&Y}Yjk.$2}C11H^I^2|� B����IENDB`����������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/media-skip-backward.png������������������������������0000644�0001750�0000144�00000000751�15104114162�024414� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���PLTE������3�1�,�19 <GN >GK EJVZMPQTUXY ZMV[!_#`,g2m(h*k;yF1s6wP`CFMOORRUVXZ\_ccegko:?}솻r���FtRNS�./HH%g���IDATxڬA�пmNt#n?SV~F`߶b \R?ҧ ,J/vˠ7ߞ^7MI:O=\!qgۆl\P ��3 3 ����IENDB`�����������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/media-playback-start.png�����������������������������0000644�0001750�0000144�00000001176�15104114162�024615� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��EIDATxb�n.?rC2z(oSNp4Nc`tNr�@Fm6m۶m۶m۶msUAm,ğ\'h\s؍ߝ#4bcq'Ѻ0Xܱ7WQ!0 lqXK@4ShG.oCU šCE0=BF6Ƃ >&"g2QWN/?a[e8{>(`GѲn'~'ڎ.;E{ynws^$̻ȡ 9h_CZ]{~�)]u8݀S- F]wUxD*pb^X6\u4_]5 hzTp`^T.ZYs0�h pmeAu{>;^-Э8Ӱ fVRkQ>|'u+vkae85p\'NiίNu(cz9O/NQLd,}g"v=el����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/media-playback-pause.png�����������������������������0000644�0001750�0000144�00000000417�15104114162�024572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���IDATx͉SraEZHl۶Ķm_Sw6s>:u\K? QUwk4!.L\X gy?kVrF-\X ŧ԰yKk\tJ55X A'TiόkBEϜ4X ~yG7ȱksHKlpMܒƽx#>koV����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/list-remove.png��������������������������������������0000644�0001750�0000144�00000000367�15104114162�023066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� B(x���tIME ;"�\���IDAT8푱 Pi:+#mF stԶ"DO!ʳ3w&H6暺�`<oFV i*ײ(}<G3a~ދ 38J G^m>?S-F����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/list-add.png�����������������������������������������0000644�0001750�0000144�00000000503�15104114162�022311� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� B(x���tIME �Dx���IDAT8͑``rҺ`6[;tqDdZ &g7Z,Vi1v`9=0+n/\ϵUR>.009xrbD["[-$mx\9Xw�V2@@PiAkeRjt&Rȿ&ROXNOӅ43kgO=TrK w����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/image-red-eye.png������������������������������������0000644�0001750�0000144�00000001352�15104114162�023225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8]Ok^U3ܛCҾMRi&P*] ~�ŕ.@++Ap!\r!BPtZi07sϙq!:00yfdyybf}9?@?k1ƿLJsuRuo :%"g3{_m KP'&&&><<|704FU)e>NyocѶmu0ֶ{u]7MUU!"! u]UTScPUT/.!P׵]wmRz1DZ]E66�)m7!\0Wp||<9",r}f FQMNRMOxy`>""ш 7昌sS=rNru;DSwDYqw9NX⯃FlWw? R*5ш_6١X@5R0U`-�?97T5T/2DzAzfjziJ)} ?N)y@-9P=sdf+JXNNN~sv]ץNaPƉK)G/S۶߈^)u3{YDn<i\m5w!`601_tW����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/image-crop.png���������������������������������������0000644�0001750�0000144�00000001212�15104114162�022631� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��QIDAT8˅KQ?gpnM-%7ш@ыhAABtY؍7uU BEAWaX(2 %ؔMSr[vg߇y<9@Jp@IJZNj]q2om^nu7?`6[&pn�V[_&f@JZNj[.)Vc-Z3=*O$M^"I#4. DL- {h`(]n!:$[Ձ<go S&dX'խ58"3Vg؎j�*Q5Bp$H%wP.|_#$:Fi?IMc3*gItNRJ{!Jv*SQvz֑{m׽a?Zhnh9XWF؈q58{|O"r>xS{Z&+E6+E&"su LHKYԥ>G?3~Ē�*� <gn`Yo닶:>?yH)Ff�@Y\fDiJo}H[va)eI zE����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/help-about.png���������������������������������������0000644�0001750�0000144�00000001644�15104114162�022657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��6IDAT8m[lTeZQN6NSMS.F-Ą+IL'Ai$A  G#ՠiZۂcb-P{ivCK엝W^YKSJqcok ��u@p~Dָq_PE�rWw>ξ'�B;tdz x;B-/=윊p=FO0�kJxƵO@m {<MJCozٳKf*f#N_bnF@p{OUQ}zf=?FJ)NPqܾ?]T/Miб�gs=G{_<nV.{MQb %+S?'PWUN�LKH^Ma[U>�0tr߇.R:˖0$i`Yi {FR<ځc[2<<ED C1Lb_E4Jc"L444@�]]˄ca,f 9ƙmAı-re!@܅e}.uahBs {H)mcҟGC^6E3 kWRKA"OKc8&eb&k̗ˁHF)*no"i7S?P) Dm)}D*w}7YykhlhlĕIl{e/i̿q7;nq]U i(x|]f|r)y7,SJ]وR8fLۊa����IENDB`��������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-up.png��������������������������������������������0000644�0001750�0000144�00000001147�15104114162�021644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��IDAT8OhAƿ73ٍzhLт@*ՊhDbE-rkJIbREOBM*^DPC)*4&Q!|ߛ!5ɛ|�fvn<IuL:.O <WLFfG ฼ʼns֖ǖ% Ep74HK: ]"GJ a2Wk =<؎Ql*eh :}6.N_ +XR"K(u@AVqE؟<oc݇b87PQT6@7DG5򠑌doLܱ@A‡׹-<d#$2ZC)^J9cCSnŞwባz,smpL snWeM[!e.zN& 0`ph@dM[/<�>~ԋ+U?cjJZۆ25|I=�/b�1� lܺ?n%&Fs'0۶К"����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-top.png�������������������������������������������0000644�0001750�0000144�00000001127�15104114162�022020� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��IDAT8OHTQygnl(* PrQ9DhQjm@A۴ M \ bI2L38q1Jd^ù{ipR1~�1tupz_?\.\3VffT"/ ̺n@CÇJ VJF} L p==89z?>B f{hu=m p=3xYY�R) 6>bdhE)kt;vL!"ЖD92J gS6çӝ=IW $AjB5*eX,V!AS y왚QB WX(5HIH��̌ bYX*R$L<k8)s7^ڕ`FԠ-rO׍~ Id&9F9Ci@\.]�lP`Ǝq˨fEf Q(69q$�!�+vxY3 mʽ쫄n����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-previous.png��������������������������������������0000644�0001750�0000144�00000001152�15104114162�023070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��!IDAT8OHqǿof~;RblB n["VLD"%t-z;$% n$W"KPl0wz{RJ7+[Z+a X&殅 e><smg1�ox acfRhsЪ*ȁSW iTXUՄ$\LSC};_PTXS� @J!/ 䯯ocf~{mqFwހ1tMW,QiPVPKPHѺ;6,L7J2p\rH. ;ru83j_.}eڄ퓭{zB/�@P ̯@ըZ"X-^#_ v�O5FvD ls Ĉ+oƍt}(0p16zrf̞+/fggߖWZ^:RöP2 x|Zm4t ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-next.png������������������������������������������0000644�0001750�0000144�00000001177�15104114162�022201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��6IDAT8KHTaFR^D hFh"[FBr6B+7(rEb>p-f)7",3x_3ԁ1|tSSRƣqwp5Xb55�<yiJj7_ CVL'#+[ٛ탁cT'xʇac8:?7 :x)J(�OCxw3691bQg@^g(QBBcٞ#4#VM՞ڧcw'#u5@[%Yvn4%eB-?F^wKԄDksWЫG}ǯZ4ҏ9'_w}#Y /OP)͕L1+l)Pe?􁧲,*H/f̃wV�Z][7P@i\/'n &W㲩D'=[(-uRW6Q2af1eĸyg4|p2[%IRN589Tbuzvj%(|6.6GB_NŢA nv����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-jump.png������������������������������������������0000644�0001750�0000144�00000001323�15104114162�022167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d���tEXtSoftware�www.inkscape.org<��eIDAT8}Ka\K iF&J -DDR˨m_("EH&- Di͌:_3iǬgs8JDQ \�( "tl}f�v%:UQN6nV$'>'{clf ѱ_3;ҺGUW0}[r)2E!pڷKL*1 jj7Ұ{՟|`ZpMC�,AHJl6{o@de&�\=AoTVUc X hcdc;g?K1Ȥsxn'WByrlSi.K2/�;xܘ[tl)s�grvl�R@f21GpY@Eǣ9Pv6VUk( x<x c@p | 9\Q:7r@ %cl(PJmY3/Hñu[^m"yWʛB�|!ʛ~ Fr0ɋ` g}yJ=<s:w- Jklz̄tl]NO~Mƻwpq~[ lD;O�n,ĸ;����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-down.png������������������������������������������0000644�0001750�0000144�00000001206�15104114162�022163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��=IDAT8MhAߙk`C"I"/*AU*<P!RS[rU-{UT͚ &7<0"Bj0{DsuIi"o]HvlG`*`2�wݨ�0Ɛy]B8sch?x)^Xʣnl�nPU`9$lH\6QR 27 9HEB-ы' "+IDQz9p5/t6U_K1"B[ME'DW\@{9h-G)ON|-r˱ŘHp/W�BeP}.D#Ga.4a ™K5Q!pM(O]p{9>mك١E&MADEt>S8�zVO޼)c>. Q51Qw&zgO/Dk00(nCȽ{[a~5鈴@bLQ= &$dY[AOXZloxz.Ҽ6�?_h��8|E�7sJ*h����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/go-bottom.png����������������������������������������0000644�0001750�0000144�00000001162�15104114162�022521� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��)IDAT8R;hSa=}$7R,DM:$EEv2%CE]zGKRQ mL>PK44BB5Z1MsԤb|9aDV Ne3{Z)mo>PBC(.=<Lnn�j؆+-=2SZG ~`�cE @�Ѯ=!Ds,$| |0]: T,򃐡@,II@�ʛ`%ܸzɦ|M1"Є9shXy|H新V|D^ba+.o'cʗAǺ,(i0C:cènVz3D5/`&60-KC #>HW.)$v\yAo|:~p_]n]8tisܱyO6V3?3`0DG{?WO8c[ K O-:e%Y$5Hf_p <{*w+XA{.U& *b����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-undo.png����������������������������������������0000644�0001750�0000144�00000001167�15104114162�022507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x��IDAT8˕Ohaǿ҈ABCxbDP];<x(nj"tXA4P,RZvh r\:<¥}oy~(:n5)ȢEڅlLA s<N#k'̀ T [Fn*�p._y(xAG}4VA(E /B_OA[Aʒ::g(6O쫼D2�(^ S RJ!k(`Ȏ]bHTeC^��u,|q_V`ng3B&@b]X"e(=Kvtlڪ@ hh1;0s�b3wB:r:j]ACM2((<o�҄ոQx7M yhۚXs#<a8j74D08,�j];|=;]ol뷦><Aui%+$����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-select-all.png����������������������������������0000644�0001750�0000144�00000000624�15104114162�023564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��KIDAT8=N@X  .   @I.A ډ)wQ52ͬ3߼7 I<> FZKlo hi1ZkjRY12i4MX,0p�/ DdqvX�D"$IJžc:KVi" wxS8*9Q18m6*N7qRlF�I�d2ٰEkWZh%{x.>+ml6[0."A%AP[dQQUl$Z-<@�!`fqF2t ����IENDB`������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-redo.png����������������������������������������0000644�0001750�0000144�00000001074�15104114162�022470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� B(x��IDAT8˝MkQ;_MBLcm6v*~Tc B8nD+p;~Vu)D RjMu!)bL&Md'Ag^ùnjnjQgk[7<~`�Mm.8q<LME^vx>'TpuXMUa?)}[PNeڧt5ɹ={V7c3Xu,O#� : 6ĥ,-(靳㓱tw$Z 4nUxEG:=x{ `@fM{Uv"3C0c\@nFȂTbTZL\>{tWwvYk-0U4lQ4l69n7J]HaN3E.En ͽZ65$ݖ/܏nխϯ;v?$#P6$E/K^5����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-paste.png���������������������������������������0000644�0001750�0000144�00000001036�15104114162�022651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ���IDAT8˕kSQ4$1Ԕ "\\jbpv!8EmA84K.8)RHB^olF91/m ~=?T*{ϝ~I\.ko�nΚ+*+v<� |`_)h/Y2g .9.Ҵ0f LD9̤γ׫VTS yf,y_ϲxAPTB"Jqm.f!1 ނD"03sl08[y=j(߼ )>\qKa{UEEȝ<9DAU21 (mnh>A_4!5纀VҨ)onP^CDz\Z14I3XpcZ7l/D#팦�$1fSU;`\13TKOxi����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-find.png����������������������������������������0000644�0001750�0000144�00000001151�15104114162�022453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���4g��� pHYs�� �� ����tIME %/��IDAT8˝MkQ;$MfJR ]hE Uw&o$ADtYwUM;AT(VP5G'M23EHIBRgw=G<yx1'w=@U&/ѻ#MߑN)\>vM;N!#Lv B]wf2f_K�дkw߾J9zjmŋi+dk&nߌĢ5(4]#Ns ^R>q>sƕ]$ ORpsӶQ %#6Ko�t Kz Xd4,U~_e% EJvK0n \$[5ܪ-]pi-Nlc5ߣ-F}=kr+Bt4M¹|'+7*|\YT[z,?",+| 0p8TNVdT앬/d�ߧ>xtXtk뗧d3 ;e+D, �X<j 3.����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-find-replace.png��������������������������������0000644�0001750�0000144�00000001410�15104114162�024062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIMEvh��IDAT8˭Ml a3H,VЉࠉ4q RIcKZAD"qD6уK}DHEb[nwg?];;i/Nɓ<y7Wbh4MhTz-?$kKe]KVԈS%U_w?j,a aYd+ԉ˥(cRU5o:H|J[]$t3l`}'ǎ6;{s;ǼlA6W uh 8�^o%osy,\j!pp$C<g-Ч�B!�Z)Cu~2@Š{R s`/Ri& àAcg >m9X�M(O=*|%~2]M:'7yeP*̙Sbr|N JgYtkikypO;o?E[v pXVcnyJ6>~O3ZTϑ{Inn>! /h2 0䛼YĂw;3ɐ ?xHa ? |`U}rb<.v>�he~gj6fyc9$Ir<21Hz ɐH$f(`O�(rB˹B SKiry νY����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-delete.png��������������������������������������0000644�0001750�0000144�00000001172�15104114162�023000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���!~��� pHYs�� �� ���IDAT8˥OqƟw-Z* nnP(8ijMM`RB4F7'u11d08rWzwrCQ|y>| ;YqڍL�hs(lEat 岵M�$A.f$I�By@f.Ql64�EQ ("INyΊт h4`j"úDnKL!Vg"gc8LY�d :~E @`P Z_4wqR\}T.)S{&Ъ MiZ7+˲QyGk~C^]7!Ztpi8#Hy~$6 #F ('t)m�G^(,+"}߱o_}�d$I{= XvT,>L q3s_^y)nr:]ͬ8 �+Ϟ:өٶQKKEǏ$d"ݧ( ^zCQtJ<I3D =β܆ ,e����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-cut.png�����������������������������������������0000644�0001750�0000144�00000001424�15104114162�022331� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ���IDAT8˅]HQǟsw}lhxUtaIWEd"hiXi}J$ 0m36c6uu_vMaZ? <}r�<mytϲ;ͭT^جF};S=ptūO!OWBO{sͦ퐈('`CKKOKCXt'˲Sq{(6 V]+8Hy=PRR@t��Xmch>G$d F`���Jiym7TDb$�[cc<d_`p k4܂,򻶖N92FBoE{1Pz=&e23s@ t !4P 3:~&$(EޭMfeTUG%Y:(VC*6T0AiM#:4Gzݗ:j0EEda�X,!RG|5�1nOF aw^$REȣ ꥂey=9iQɌ˔v,S İ 8AT2_b&i^+ɏ6|w6:0k0��0��ZK�9EAH*l7_$ST筢 :4<����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/edit-copy.png����������������������������������������0000644�0001750�0000144�00000000737�15104114162�022516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ���IDAT8˕KKQ#3cڀ ZuBEvDDD616e007itFGoy;$3,F(Ͻmwa(z&vj5B��Є'sj^wcfnyu$IBTGE@QNV9TlGr(( ,˞H$?dYv pP�Ršz-,EA08vaSiJ%K дc,61Ӷ(XY^ePT䮳6֣y�yrl;KUUn�(zi.y}*�($b�BY����IENDB`���������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/draw-rectangle.png�����������������������������������0000644�0001750�0000144�00000000507�15104114162�023513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˥JAEϬXo;+-l !`glUn!( w{q%S=9o33sh0蟂%dQ_oJof\<罴|3ʫJ>?1$@o3Chy~]-a�P5Tj7 Z`SPءAPD$:D\nw4@4D!aTNͱJF=B!1-UMڦ,{?ϷF����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/draw-path.png����������������������������������������0000644�0001750�0000144�00000001150�15104114162�022476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��/IDAT8˥MHQsIm MmM$ !3E6pAKi%A:.*76."sqoN af :{}˹爪?!@ūTHRt.~1:7GEJJsu|T%㟹ڢ4mgkۭ sX$K5Rv�Onbkn wi�@<Zly&lIpG^�Oa(bCUare[d mյ,"[f#@-4;NN'%WWmK|YPoUu\Mؖ;nd-j_z)\N)p J*뾧b�ua]} mKmKv9Τ~}^&цْڭJbf v_( `J1>OwФi 'S >vS 5%CM%�Rdחwb`pԏ*kS$y# ]NQPz 6{:O64tTD9vɎTR_woI|oڷ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/draw-freehand.png������������������������������������0000644�0001750�0000144�00000001364�15104114162�023325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˝]H[gϏciYa18F'8IIPQTt%QTwuYDWtcTC`M)e٨͌99xP^wIV+Jsc;# 'Q V64)Pл[r/dq3i=u[}Z]Us0''㏅A,TER[n;P/k jb(9MKk#T'^ERY@Ӹq6v+׬k8ڸ#T2cM맑Ox׮\(6oiqm4D:Y BS>~1I%lO$>"\a# W�=f %ųMjj_\xYew\[dM(sx�P% =+W-]}q߁]@7gU."�5RO~�u\0{O<(-y'I[!Y >*rfȖzƈuOȂ` 0nDQhAV H/乓SLt `Ꭳ72uV۳6:biK>�477vp`>`RG]MѓL}mǰ,;YyT1c^?k)+3!{̼J;!]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/draw-ellipse.png�������������������������������������0000644�0001750�0000144�00000000674�15104114162�023211� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˥AkQL%1iW݈]um𗴡ۺκ tu"!Ej::Q7E_Jj]^8{Jiuxezg)p N��J"v{mvx??("R괻�tJj=,l+I/d2Yܦ v �֌Ra'Mag[)K>w݇mH. xy+ohmI 0]2ۀ3F+"A0_`mhZLdE !opRZ.^^ fWa$ IWvQ-0S&"?Wyg`t�8ܞ~����IENDB`��������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-save.png������������������������������������0000644�0001750�0000144�00000001344�15104114162�023366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������C��� pHYs�� �� ���IDAT8˝MHTaL1͑QlQQ4&E.B(,V-*ETR( "((j["DETjܛN al6<=_'?[ظ3 T[&Ÿ?ͻϝ 4wt퍭Uk:#km'-Q7˺; <}۝;ƨf(ce#+s >b$y,%_FDDdsZzD/Hϫ/.wY%<r$�qDxX�BAA�(W'n۱wp=/x|vl_PPP#�wҘX̌M4єX�i^"2"0e1.XͻǪ Q_ͭ{h\Î�,4M9H*|!mkص)i8(m�41MCRO-hm �aPYYޚ <�۶qy!�<]s?D3<t:LAD0 !BPZeYWPJQ\\D0}�u5 5{>0DQ�,@.x]:R,Fs4_;3L"bm����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-save-as.png���������������������������������0000644�0001750�0000144�00000001267�15104114162�023773� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ���WIDAT8˝OHa?3skZH"4 iD!"Xy`a ! E E"fy(hYpna-y/χQu\8W @PLQeٖ[VZJ+A4vn~YЀ9qRwgx:{cqQ54~ɒBc>m  x"W%0<-=OJånrF$K`k`0,`(�#/~[��X1S0L[k:M txq$�I�ǎq!ϦR鮠5ŘvF~k@�wX] 26g�at]ǙWxvQF4VrʍD-�iD�u]=oz2@UUBH͖>W*" ?~2" 6/).f|| AASp8x>,�%[�4M#=Ϻ]W[~-j{hcc?{����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-save-as-alt.png�����������������������������0000644�0001750�0000144�00000001363�15104114162�024546� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxڌcZFmul96m۶m۶j۶mN򴙺%]�gWeìoG76wXlم~?~Tw$eΊYA^f 63+#z5z,V$ܳa-]&}WFiq yTn= Ù8zٴy 7lbCyV_͘Rv|&~؊3feGg{KWcv JPd󮃇{` b2̅+xݟyX7z[jh4<}ݩHSϿ-MI`50|0&w7˭ƈ\t\۽1E+d$Amu5-QfIyDZrrB?!# **I" "I^^IL<FA"2o*΢ Gi_=ex^^xFEa^>y9DA$$ZByIJ#; O>/RDp}~ 2yi-灋O裏v[ox.q/:Z* 刁og<rٙgyGy%5tzID{gk䉛jJsJL@֤Ee`ۊR<RC̔Ar0�$dfNR����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-save-alt.png��������������������������������0000644�0001750�0000144�00000001036�15104114162�024142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxڤþ[Q>ɵm۶wamjpmێs̊?\k%�PS]}YR\oM: ~002&E)d8 \^Ihu@A^>!yJ xfs4RG 䢯+)z& G-Ξ)K1.\8<qAn8r҉sRG dg ;'6zeԹ�7^9RG sGZvIz`,u@jr2 u@RB"j u@Bl*K˸q,,,`a~ & GXpQG DGF({=sr_<(cw"u@XH(32"%1 axN!y(@HPylTRY[D�߿?oCp@ ʾ_ZZ+b2@ᙉ" �^s|����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-properties.png������������������������������0000644�0001750�0000144�00000000720�15104114162�024621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME  +T��]IDAT8˭jP l"ނfuء-8(q%.]tiQpNDdМ)v1}qA�G%rE�"糈d0M3%�Q~¥Dz׍j5�z^u:JR r}Vv5Zk<C)R>�`:bfneYXVjWwpθX,<A$v{sN-fb1FA0$ C!Zm6& B\.|>RJ;pza4$h\..v-4))? ``0x}+ڶm1$����IENDB`������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-page-setup.png������������������������������0000644�0001750�0000144�00000001061�15104114162�024476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDATxڍlQ̶c{hmEm~Vl۵mzP|ߧ?a2ƌF## ^='cfǾٛZ-0<<<xg{CpT~m6\.}Z P6}):^W#?RR xvIᯃPHEhhhr<`K6放NZ!FOOOT6Ri(@A}{,EOq \U,f_t:!C⎇tM X;8(chV+6Ck9)87Ɲ>@8d%$3D{{;m#777x/ 1 I %X%h;<Quww#;;;[iAWEE"|T|@ڎ(s2ş! H xW15~ 쾈tUgz`އ%56A`@3 G�{Δ"3p8�.;f1s?娎1@����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-open.png������������������������������������0000644�0001750�0000144�00000001173�15104114162�023371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x��IDAT8KQ?}oIkRK?% rjХ7#M+hh!EB-siꛖ`p{9+CCCD͆."@Q""}ݸ\Uo/,-9s@D'&_Lslppp936&�N3cxhͳ nTUnH)[fz+D07f cd "BUU]keY"=va#AUM5s}Eιvp5bPRJc MZd;8bL; y/qk"K;ʢX JJ_(H `|LH)YJ pJ[GDY Nq)%SMPPXlb{ט dr4f4ScD$mφI1s̝lNVJa.X33؎l7zԝ, ܉wgm`^Z?q!SKwY^ZôldoKu2����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-new.png�������������������������������������0000644�0001750�0000144�00000000735�15104114162�023224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD���O4ױ ��� pHYs�� �� ����tIME&Ӷ)��jIDAT8˭OK[QsV$}%[\f qYE޲w#ĂM7*RJRJIZEbwDž&Tz63 s3R.kZ\go˟oϾdRIxS/Oh缠'+⮶23l6 !� "=c~!"f L&jǷ[SW{jky`1*F_^^o: L8 �n4Y:OPEi@дޛzƦ织'Z_YD)]Cu4<aklllpȷ5<"BE4IO0!ӏ{9x|ٰ3ݱrC$!q+=`{����IENDB`�����������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/document-edit.png������������������������������������0000644�0001750�0000144�00000001055�15104114162�023354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8˥;SQs!@F,"bsX-*쮍PBe!6 >YF[%"&DwcB^Mr.7N10 #"3c@/3c& n�ZQLsWpggwIj=9RӗH>6s,+L&rLge<"a֡Zu0D"UJEjڃ_6i�@dzHTMx[mi]oY!Dncإ�u] .KB;s(3R~8ήXh<Eq|$?ғ{Hiy UէB�P(s PPRʵnZ�TVo�+á,ř`R1)Xu1bD48N\‘xjṿy~cfn7�4H[cSQ1&u]oF^o�ؘtl}cs]����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/copy-right-to-left.png�������������������������������0000644�0001750�0000144�00000001104�15104114162�024243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� IDAT8˝?hSa%/X0!(Z\4b&J$έKY;thֶCEF IBb 4! Ϳ}U$ ^8ýW#'�^ƥZm&p||+Qн)xWNge⃢!硥RϺDjh  3zU-. ,;;Võ`O&^l&'TiYRN57>>T* ˒tJ-30< t:i-IBwӄp�͙~C DJ%I%ӁFU4AVK ED.e8:vMكvNN$44`b�a6XoҦ"6I(Jn#%22Jx\V7My+~OQ.qlB=BvwanOKKΑM҂wg=]O$܈ UeYܶ,&s{]o^!VVnb_!)x=4o ˵vpy.4����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/copy-left-to-right.png�������������������������������0000644�0001750�0000144�00000001104�15104114162�024243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� IDAT8˕?H[Q{}3Ig j2PTtQJSAwq)B"RPHT#q .v) lckRpsNCwg}4y0>Ӊj[RJ ~mjJGRK5\Yapa-ʵE݁"SS6 9@;WFoB mn6ttM1=WJ)%PWZۡ2xM9 G{<Ν!�$`6HAgg͢aA Aȵh!By.E<oBkptt 0Mp:�uK 8L}k,J�ð ہR2_fg0:#LNV�ZW�Njc1= Ԛ{Ӱ`YHYqV W ZK rNqm$#)H4K/-q< țknN⚀m|{Ÿn,P����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_workwithdirectoryhotlist.png����������������������0000644�0001750�0000144�00000002174�15104114162�026507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME )*{��IDAT8������������������������������������G$������%yE��������G�������������������������������������G����G��������G���3ҘCO������/i.������������������������GyE4���Д=/h���������ΔZ������� � x�[� }�Zx_!����ϒ;0e�ڋ��S� %���������������H�E�ǜ�l����%������� �������������V]�z�,j�Ol�j|�������FN�LQ� � ��V]�[p� �Ԫ����� ���������WA��uP0���w"��?�]��3i�y<�w~�\�Д>x�TA1� ��W3����N��7L�ȳ� &5�(�ƥ��w%��- ���+��-���!��W�� ��O(8W���I� �!�(���>i��,�첅�� E�)(�6�= �˳�S(��At� ��� '�D��涊z6�;�+��0�=m�� ��+�*�� "��7yS) ]����?\�3��>�������7y[�������0���OA���\xI~;AFw>,>|9������������������������3���3s-ԓ?J7Z>I���Z>I?E����4<JD����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_wipe.png������������������������������������������0000644�0001750�0000144�00000002174�15104114162�022241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  G��IDAT8��������@������������������������������������ omqA������������@igl����������������������������@�������� J�������������������������������� J������|qV����������������������������|qf������������������������������������������"?���������������b������������������������������������������������������,8D�������������������������������������������������������������D1����������������������������������������������������������������������������������������������������������*����� I��?��������������������������������������������������������������mnj`_bCCEAABDDEBAD����������������! " ! �������������������� �&%&�����,++�������������������,+-Y���  � g���������������drqu���$����gfiU����������������edg*edg� cbefehh~| ��������A����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_visithomepage.png���������������������������������0000644�0001750�0000144�00000001157�15104114162�024141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜS=hTAvySőzc! bR  B,$AH iD k€IZITPRD޽{l11vvf[6EZrE؎ !btAB'8$ W+^"aLTOZ$[G (d cGl;5y'kUasy?,:* +L<{<j#ġ=`jiAD$x'.gJUG&M[ .bN)t ?&8v :{.:y x}FZ5o7QkюjL EFx|E)Xe5Z1gNሩèՇu<y0ue~|Z4Bi�#u ,g!46Rapp]_@.6֚ܺ+тUmDqs\9"{m1?jc} I)M? 3+ؙU0�Wp����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_viewsearches.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  /aRa��IDAT8B����������� � {F���������������������V8�����������������y��������������������������������������������@����������������������������K$ �K$$���������������������������������������������������������wy{���yxv����P��������������������������������NNM���8��������y��� � �x-���++)�� D�V;�����������������y���LMM����#���%������������������@��o���=_�����Ƣ�RP�""!������������������������ B]��% ������]����yxv����P������ �������������NNM����MMK�������� ��������������0/.��0.-���9��� ������������554��NML��]^^�342��JG�پ� -� �����䭎����D-#�������W��lF�������689�011���ccb��vtr�������<�Y4��������Z\^���������+j *V����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_viewlogfile.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023611� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ,d��IDAT8����������������������������H��������Nrrp��������ax������������� ��5^�����â��Ivvt����QHD����������Ƹ�5c�\5������]�ﶘ������������������"������������ ������������������������������ ������������������Ax�@x������������� ������������������&ɗ�'ɗ����词�������ʛ� �π2�����������g���eJ��������� �z6��%���������oQ����m������*!!�+���� �������1c����0ɓ�s�������������j�$�;���e4����6ԡ����e|������� ���`4������������� �Z���sV�e�������������q������������������������}\����k������� �����������������������&\���?֝�i�������������y����������������������Jަ���� �|������� ������������������?��������������������������������������K5����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_viewhistoryprev.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  /ɀ��IDAT8����������������������������ö0�'�b��F���5�����������������*zG#���� �"� "�ɯ� � �����������������*������������������������d K��������������������������������^|J��������������������������������������������\xLw�b�U4 �tC���=���������������������������G�vNh�k���/S�0#� �d������������������������������� ����������������������������������������v�4jLb�������I!4������������������������������ͼy�4bLN�Ͳ�B�&���������������������������������ͺx�4@�� �����������������������Ͷt�4����������������������������������������� ����������������������jL?������������%���5���������������������#�����������������������.t F���ӍSz�����������������������������������������������"�������������-墙 ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_viewhistorynext.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  BL��IDAT8���5�>M^������������������������ʟ"� "�ɯ� � �� ����i և5������������������� �������������������������������������������������� K�d�������������������������������������������������|J�^�������������������������������������[����U4 �b�xL�i�������������������������������hj����k�vN�}���������������������������������������� �����������������������������������S4J�k���C7��.$�P��y�4��������������������������|P�͂�D���=��y�4�������������������>��x�4������������������������t�4�������������� ��������ĵ������� �����������������qL��%�����`O������������������������������������3.t F����ҌTz���������������������������������������������"����������������������������������������������������� Ր����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_viewhistory.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ��IDAT8�����������������ƱмZ������������������������������������������������+;H����6��rBPb��������(xTO���-:G�� ���ǩ�%� � �����n��O������������� �� �����O������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��������������������������������������� ���.����������������������������������������������������� �O��jO������������&�����`N������������������/Jm0�����<Z����Ϸ�����ᶓ������� �����������������%������������������������������.lc=K����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_view.png������������������������������������������0000644�0001750�0000144�00000002174�15104114162�022247� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  Œ��IDAT8/������������������������������������sqvU������������������������������������������������������������������������������������������������������������������)))����������������������������������)))������������������������������������������������������-7H� ���ʳ�stp\�����������������)))���'4H� ��#� �*K�mok1�������������������"+;��W= � ����,K�Ե�������������������)))����� � ����� ���������������������������������� ������������������������������ � �� �������������������NLM�ν� ������Բ��������\�����������2E\��� �а�"!#�����ٔ(������������������������lnjv������������ �+*+�������������������������������������������������������+*+�����������������������������������������������������������K����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentpath.png�����������������������������0000644�0001750�0000144�00000002174�15104114162�025052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �7FE��IDAT8������������[t;����N�����3i�������� -M*L�� �v:�������� J �4?*�����hL5���������و2��/��>��4/*��������������'xZۉ�� �!]�K4��AL�EV��������������������������-؇#"(V�Ͽ0/ ������G��#n%� :��ܺ� ��" ���������tKx�-G���6��#���������&�&����������+����,;?������)9��������� �2����! ��  ��� �" �����{��Y�ߺTTT 84+5/'ڷرٻ���*���```*YYYϰ�� �52(� A������  $ ���� E��� %H����&&&��������=Nl�7BP HA8�����������DDD㑙)M*Q�� �NE=$����������������  ���� ooo(޽S����Vy����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentnameext.png��������������������������0000644�0001750�0000144�00000002174�15104114162�025557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �F��IDAT8������������[t;����N�����3i�������� -M*L�� �v:�������� J �4?*�����hL5���������و2��/��>��4/*��������������'xZۉ�� �!]�K4��AL�EV��������������������������-؇#"(V�Ͽ0/ ������G��#n%� :��ܺ� ��" ���������tKx�-G���6��#���������&�&����������+����,;?������)9��������� �2����! ��  ���y9V ������� ������K�ڵ� ��  �6���������������������ۼZTE���ٶ KKK���������&<������ E�.;`� �ѿ������������������  �zs]��ppp���������������((('''ά'&$�������� ��������(���7�#T`peee9[[[0dx!]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentname.png�����������������������������0000644�0001750�0000144�00000002174�15104114162�025036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �-ˣj��IDAT8������������[t;����N�����3i�������� -M*L�� �v:�������� J �4?*�����hL5���������و2��/��>��4/*��������������'xZۉ�� �!]�K4��AL�EV��������������������������-؇#"(V�Ͽ0/ ������G��#n%� :��ܺ� ��" ���������tKx�-G���6��#���������&�&����������+����,;?������)9��������� �2����! ��  ���y9V ��h�8\��7��������*���ڵݷ߉Aق"������%���*������������������������ۼt4P{��������������������,���������� ܠ����6G�������������������������� �������������������"���:�������ڃܧ���������������������������������3���*��� ������������pp)} ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentextension.png������������������������0000644�0001750�0000144�00000002174�15104114162�026132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �e��IDAT8������������[t;����N�����3i�������� -M*L�� �v:�������� J �4?*�����hL5���������و2��/��>��4/*��������������'xZۉ�� �!]�K4��AL�EV��������������������������-؇#"(V�Ͽ0/ ������G��#n%� :��ܺ� ��" ���������tKx�-G���6��#���������&�&����������+����,;?������)9��������� �2����! ��  ���9�( j7K�ڳ��8\��7֯������������݉G[&N���  �6���������7I" � ,��]h|�Xg~3!  !***B�������� ",u-*���s� E�.;`� �ѿ�������������  �zs]��ppp������������\: L؆((('''ά'&$�������������������*���3((((((CCC���ś���EEEv'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_universalsingledirectsort.png���������������������0000644�0001750�0000144�00000002174�15104114162�026612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  #S ��IDAT8����������������������������������������������������������������������G����L������]�������o�������G����O���������������=�D��D����������"������D��D����������������*����&D����������������������&D���������������������������������������>���U��������������������������������������������������������a��������������������������������������������������������p��������������������������s���������J���������������������������������������������������������������������������������������������������������������������������������������G����I������������r�������G����������������g�����D��D����������������zD��D�������s���������"����&D����������`������������&D����m������������Q��������������������������������������������>������9������D�������������������/���w��������������������������������� �������������������p���������t��������������F�����������������������������������������������������������������������������ټn߲����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_treeview.png��������������������������������������0000644�0001750�0000144�00000000426�15104114162�023125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME %yO���IDAT8cd3 üc D�{cSA,0 9B@ޡ,/Y^UY*y_B EJaYphc~nPgp,_2000'ɀ DR`>qp'?QHi,0 (��9vy����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_transferright.png���������������������������������0000644�0001750�0000144�00000001166�15104114162�024157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��=IDAT8OSMhA}3ZE޴⩊*xRj1"҈T=xA<S?%5RT< FT^Mv b|f2+⃓ͶzXK }rw~GFCοTˮ�P&f`.ZWOISJ]K7^$2a9pF>BbJEͅ >J2 YzD,X<\.`}t\A4hE< Oc[.KY\\xCJ)XBvVҎRa&ѹ|Z3I:-2s�W~$m,#)`5?Ʊm?0KO4lOuctTsUgx1ifa&}gD-'89%&*\ X`ꔇO_Z$8B҃wHC�Z7o$A"2&B=aɝwsExvJ:tÓ3w AmrXOk /ɍT+YkϪ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_transferleft.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  l��IDAT8 {M���������������������������������������� MN7���������������������������������������xM� ����������������������������@��� | | |�������� ��� %�������������**+����������� � �a��R�������������� ����������������� �W��`@r��������������dcd����������������S��M4U� ����?����������������������T���Q7Z���jG�k|��������egh�����������������%����n����������������������hE�.��� �� ����x���������klk�����������������|R�V��������}�������������������������������|R�U���������������cef���������������������������yO������E��������������������������������q >����������������������������$����������������������������������������������������������䀖Z����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_togglefullscreenconsole.png�����������������������0000644�0001750�0000144�00000002174�15104114162�026224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  \V��IDAT8���������������������������hQQQ� ����M�����������������������c���������������������������W555 ���� ����������������������������� �������������������������������������������������o����������������������W����������������������������p���������������������������_���������������������p��������������������������_�����������������������������o����FFF����������U:::OOO�����������������������>!!!������������{FFF>>>:��������������������<<<���������� 33/E���������w444 �����������������������lll|w999��������������������������GGG�������������������������������������������� ��������������������������������������778 ý%������������������������������oI}œ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_thumbnailsview.png��������������������������������0000644�0001750�0000144�00000001133�15104114162�024330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜSMkA}==3n ^4ˆ.TP S^<x7#(<Qrxfٙ 5^wuu=OZ@NkACf'*r٩& '�[˓ D> Kt֤UQPt ,.JuWQd_7p~y^w͑_j-ى׏ V A5GXh# #oK0/A\@;<0Ơ:r Pnf*Wѡ <z{C͊uW} E\m cn><kwvz0` ov%,||^54Ng eEJ{K<Dն Ji n>} T5مgnݭWu6g6ZQ|N?kSM3@\cw[�1YE����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_testarchive.png�����������������������������������0000644�0001750�0000144�00000001214�15104114162�023610� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 6Ű(��IDAT8˝KHQF'g%BEQV "gA4)dh!"Z.ZHAOEW-ʆGLI: 9i1ùp9w8Aw!8{VgI 5QXTXkAddEt!繛e4`x fYx 3_{T Β  #D�amL_<IcfLfwHutH} eHEh]Fi0f�JQ`wmr sx&Mc7b z\62'O-O|㋳̺n&/iopo,f \y>Ͼ73Pu{B]gW7FS&8ކn *"? 340(;Z c<{э=C`aO4 kt:z D`�|C] m؊R |7&`VA$p;Osxi`<۶-P-`e/#KNC&*w@(����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_targetequalsource.png�����������������������������0000644�0001750�0000144�00000001044�15104114162�025027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME*;C4F��IDAT8˕jTAg\T1SnBSͺl7l_@DY  d4V�+kXxX{gk3G77kY� "X4@`Foiuu^59HS,7ΑfYĜY{�^19i=}%{l/bST{iV9J2àzi>}fK!s@Z_IYںūm�Y @e"ULPt~YݍNZyN< BSZ+[ !CU_7c|}'&8roRO?bO2 ކh˿ykq.э6FC_PSJ|Z:O$Icta3IJwgٞ;Hu+0l}9kN~0,zT����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_taboptions.png������������������������������������0000644�0001750�0000144�00000001202�15104114162�023446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME23��IDAT8ՓOHa?*mJK2 D&R?cg#B;v51-E7&R0ӊ%vt{zy}7PONiE-Vkd{@`z,V17SsAZQ$a"tod{^ ]8ͻl)񛴟hں @Eu1p)J�%UNlq(p8x]ȋmħe왒EUQng8mఁn0hJSvSvs"Na @CSYES^fA 2Q׳e1ekOqvt~J3N ASz~{[[a/�j{{;G) x &ZZFkR g)�.W+i�Z,KWuvvz<vvwhlh H09;3F@`8@<J&ggʿi&a.Tj<<"ȷ3rf`lVИW/y}q .����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_syncdirs.png��������������������������������������0000644�0001750�0000144�00000002174�15104114162�023133� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ��IDAT8ҘCO������/i.������������������������������������Д=/h���������ΔZ�������������������.h)�������ڋ��S�2h��������������������і^(әE3-g������� ������������������W���6���������������� ����������� ҘC������/h�f�ھ������������������������-�\�+�������ݾ�Za������������������������w�/q�і^���������������������������������������������������* �������������������������� �Ԫ���������e&H����������� �2j��� �#"����������ղ�������������� �����¼���:�x�G� � ���Za������������������������w� � �/h>���іB���������������������������������� ����������( #��������������������������+ � �������������kDp��������������������������� �� ����������јE� ����������������������������������;x5T����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_syncchangedir.png���������������������������������0000644�0001750�0000144�00000000644�15104114162�024116� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S���PLTE���������������uzz{{ { | | ~~ef1|�3{�78�8�8:�=�>�@�Ts�s�t�t�uExJ}LSVU�U3���tRNS�$346J���IDATW5͉0DAEH(?՛&4),MTM&sU=RJɋ"ei$0  qpQ`!0/Z\Ñ,<D G<p -<r5_L�"͚[C#yb$|Dί^/S6����IENDB`��������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_symlink.png���������������������������������������0000644�0001750�0000144�00000001165�15104114162�022762� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME o���IDAT8}kSQ{ν&@?:Hl"~.Ek nn P(4T:бh[!mGͽ8&)m^s#Ě["\s*5:>(U*/255.'U�g2R). 3Z5Z۸$B=8XT7lۮ r�9qsbm j`:`:ݾ#�5ȷ>z5j{]J`""$$S/Q@<sՍlءTcRQ(΅$|;�H߂'k?6Q3�h+ۻk�\=#o.>'dm'o=lpd{:Td֌{0=J8=TdP*FΡ"tn|Ù:S_QCo8F%9ˋ.s? A%h6_7Γ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_switchignorelist.png������������������������������0000644�0001750�0000144�00000002174�15104114162�024676� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  & o#��IDAT8����������������������������������������������������������������������������������������������������������������������������������ҘCO������/i.������������������������������������Д=/h���������ΔZ�������������������.h)�������ڋ��S�2h��������������������і^(әE3-g������� ������������������W���6������������������������������ ҘC���������� ���\�������������˦�����m�ܠ� �3%��ސ������� ���7�����4q�ئ�T{���������������� ����)�������ϡ����������������������$��4?����j� ����������� �������%QF�!��� !��������c]\�,/�{rp� �����(+,�'''� љ��� a���������������0�����������RQP������ ����������������������.����ﷷiۗ)�^v����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_srcopendrives.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  '2=��IDAT8X����������������������������{G[�����������������������������������������������������������������������������||G���������������������������������������������� ����������������������������'�������������������������������� ��������^>�>����������������������OX������ ����������������������� ����������� ������ �����������������?>>������ږ�j��������� �������D;<���������� �����g�������� ������������������`/���������������ٖ�j����������y-�9&����������������������hxA4xA4������ �&�yz��$� ����������������������������������� �� ��� �������������������������������n&j����������������������������������������������������������������������������������������� (Lu����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_sortbysize.png������������������������������������0000644�0001750�0000144�00000001035�15104114162�023505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME5?+���iTXtComment�����Created with GIMPd.e��IDAT8˽KTQϔ @( 䔫- ED KF)Ѱvw}3m!D\߹˸NgvX͌߉@e|v,Zu@QV,}!M^~JPUPJLzwp8d%j O1إTznlut9=?!bQX][|tz8ew0l Bv 5|S`Oʞ1a pK _ Zbgb3ɳI'q\# b: ϗ+BUXz |-nlzn(.-<&cY\knoXs&*W΋gI����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_sortbyname.png������������������������������������0000644�0001750�0000144�00000000742�15104114162�023457� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME36S���iTXtComment�����Created with GIMPd.e��FIDAT8˽+QU$E 4lemghvJ"+;iJdL"F$y=1󎔜yzίY{嚉`ESw<9 0r V5j9{Lq-ᵡmĴc1VM/; Gn {+'^t=/|ss X VXK97 V2D4b @?נ / PLE*+~�I  #�ހyш5~�}3%~�X�ChSW5NψEe׫�Uv8V= &����IENDB`������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_sortbyext.png�������������������������������������0000644�0001750�0000144�00000000661�15104114162�023337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME4+'���iTXtComment�����Created with GIMPd.e��IDAT8˵=/Q/iBK` بΈ%D�jC B|lUx<}-#-$+eV.:[VOW =+,^vY?%"R%_nTtr{>/?6M-c@BP2s6�͙9壅82tRLP)= lXLw-%+Jw `m߁:Ю 42\;9p~@ v^Q.8e�:@'%`4����IENDB`�������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_sortbydate.png������������������������������������0000644�0001750�0000144�00000000740�15104114162�023452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME5\G���iTXtComment�����Created with GIMPd.e��DIDAT8˵JQ?PDDUV|[K%`a4Xx-E+&xCVbD,#Q;wϜkٰt``˘;:kvZM^$`0w ew[JĻ:2\+ߊmhE6hWkG٪WjxƁX/W|1獬 0@5g(GcW؜88c�R_�Ru�Aٿm'`_# d�Bǎ(uO |Iql<[5BRLY(Y#aCw!%!hDGZm;h �w|����IENDB`��������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_sortbyattr.png������������������������������������0000644�0001750�0000144�00000001025�15104114162�023504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME5*&���iTXtComment�����Created with GIMPd.e��yIDAT8˽һkTQϺ! F$h 2(D(T"_(j+HT"Fs͍q3̜ iW\^kϺ}G'_ϬPvStfF:˷| yWE*THd^֐'{G-ત>\N:R .=;y.<W~̣1l_" YG1H u|%`'x3emj F ># {{Ng\C?̝G}YA"U Fzv_ W@ALcQ i)u<U^^č2>][6/X۹Ϸ[5~Ϧ bO����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_showtabslist.png����������������������������������0000644�0001750�0000144�00000000732�15104114162�024021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��� pHYs����od��|IDAT8O͒KA,.hC'A^tA'x2\!E@(]"RHA?.7Ys`6Й2* AH ƈZI% p)s˫Ymku q܁kj/!e1A / Rh`1|]vQ¸w:Lx(\ Ā4LN$ځ v_֮N~Q+jK}ޗ= A*`}SSAo\q~R^O{;S\l2ͭb&[[O'&GDd"ͧ!2,[m!lH.ջjZI졫ۇ^NofoK����IENDB`��������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_showsysfiles.png����������������������������������0000644�0001750�0000144�00000001447�15104114162�024041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڌSMOQ=ʹBH@D"`g4DF]%ƅ`KHхc‚"T@h-Hi m{(of̽s߹}"q"ik`b_/=co]&<93H0w@+cP[" wa0Xjn~UanT*͢uq];(&~dw(ݏm`v%isR?22$Z. -5ODW&!bu4loM�Y%Jc3pT2dbŔu]q2X:B uU=+>SOڸa͈%sc:Edx*J?DЇt4Zװ7 m[3~#:xxeG"0UJNn-A+`-0۽/l!B$g9EeL/*:41:\v ß֨ɥLuj.XS"˰>G<.b9#V5KN&}]1Q&ryȡ2D,s5(uЧ#gpv0?fim2iwl. x2|ꐷmiRfA=Fhf(Ţ!)d4žxqp)213uj9Le.gQRq(4ѸlCNC] p)q3i� ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_showmainmenu.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�024007� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  0tRY��IDAT8��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������? ���������������������������������������$�����������������������������������! ��������������qjf�����������|m��������������Gez��[^^���������������������������H*������������������������������������������������������������������������������������������3�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� x@����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_showcmdlinehistory.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025233� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  :5?S��IDAT8�����T\PF������������PT�����������������������������T\^}I}{T\������������������������J ��ZX ������� ����ɑX�[��������������������EEz ���t����2�������������������������������qq15oo�������������������������������� ������6A� ��������������������������������������t�������������������������������������DjVn�#,������Ѷ����������������������������������"� ���������J���������������������������������3������ ����������������"�����������������������������������������������)�����������������������������)�tB���������������������rQ�qnm����������������������s�)��������������������������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����������������������������)�����������������������������)����������������������������)�����������������������������������W G;����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_showbuttonmenu.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  `���IDAT8����������������������������������������������������������������������������������������������������������������������������������mmmO4������������������������������������������������������������������������������������ddd�������dcc�������� ����245�1������876� � �� %�#�$���  ��5$������^l�)��Ϋ�50�������784�?P�ƿ)�?c� �� �LV�/�� � �Ϩ�����99k�D��������0��*�n<�;�;��� ������|K �(�D�ߗ��F+�R������yyy����������yyy��������������������������������������������������������������������fff#��� ��������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Z ˬ ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_shellexecute.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  NN��IDAT8���������������������������������������|GS1!T0����������������������������ݫTE&�O� � � � � � ��^?�X�`B�KX,��U~cC������� �����������a.�?���?�?!�������������������������������������������������������BBD���������������������������������������������AAC���xB���������s������������������BBE���� � QD� QF�!QH���������������������OPR� ���G��˳������������������ �^^a��� � /�� �� ��������������������� ��������� � ����_/��)��������������  ��������������ݶ� �9+�/%���  ��������\\Y�������������/��:,�� �׮�+�1\�\����!���������������ĭ�%E�ة� F�&D�������� s >�����������h �c���IF� #� �����������$�������������������͌29xg�������������������������uPH(G����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_settaboptionpathresets.png������������������������0000644�0001750�0000144�00000001275�15104114162�026114� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME/8��JIDAT8˥MHTaꌙ&Z-* 1EaDBMAh26~ d"IɊ4P*!TrhI}o@6yx9JDX4+Ԋn󵧈94Z`X U:NֺO)p!g֎=ĺRK"P^ ^{ϫ^ka}Е~A= _�l`lߐDM2ey�Ѥ09E4@Y>?o7 ~ nCrWLRi\AZWBzQ< G>@`- ԓlq\ƋjMR-�E[x0dW_u4j&\'qK[o+ !d}ݹ@g�;K!H A՜Af-1>>d*f~>AF,ЂKa/~ö= 0ʼn@^[.^UQ 3 krԑ7$}b Py@'M΂" ^ڲ\ut(ߕzAD1(X >~3ߘ~A Q;R����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_settaboptionpathlocked.png������������������������0000644�0001750�0000144�00000001245�15104114162�026045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME+rT��2IDAT8˥KTQ?t8"j6:QH-&1VjEFT-lZ ᏌH$+ %$py{~[gy8%"lMbn~DZexZ U:iuR²Y;#)afZkR^ڻ'G}¨pl7g|Q s#�x"S?yynZn3>"!'pњ CT`gd"1≀^;7 C4f10SSLd(~%CS9C]ZBQӁF=hTxL!VS+5.B>iGE�xd2/vXZ0Rؗqv ^ DPx^R8Z8*\y§W8�Ԗ',^\wEjb0˞}vy�G!a~Õ#c,26:L0a Dlz" 9rq Qrfa^AD1(Oz_20!N����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_settaboptionnormal.png����������������������������0000644�0001750�0000144�00000000632�15104114162�025216� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��<IDATxԓJA܂+&E0X(6 "B&>!>B!B@"` 4VF\ݙ  baoaf!ː82 t 9WN;G"JmI)O`_Ta<V�wS_7uJd QD{;KySfũ�2D*Ӕ& 3^Cq}wO!v i_n7(0,JO=":WpqhI(akK,OP\CT);YV͋6y Jfw[H.dyĤ�{"%C����IENDB`������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_settaboptiondirsinnewtab.png����������������������0000644�0001750�0000144�00000001352�15104114162�026417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME /��wIDAT8œKHa4faQ"(8A nԮ]`-ZH!0qtFef5Fykka8ˁK,yM~V&5MD ]/i-/xdWTɒ\6%:B.U qlZ3lZ �#^7w4F28T`Xq.:@ sGq:bX;5VPrDh(`peP*0�2~]�O}-"i>0X> 2[9 wGp*9y܌u#L7-;q80\fS8Mbs&HٳzhT5 2JTsaan-i?ܼ-8aNe+8 𷃱ZH?q L 0p 7!k}5`,TF$baa9C:�) ̣ D#v*LWP P~@Q&p , ۲R,kloDx5;=+x,aI rNR,|m'Xx]&-QKAd^WaEH TP\ZFWӲ9C)4JIxüE2AWtBzf'7�t O����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_setfileproperties.png�����������������������������0000644�0001750�0000144�00000001311�15104114162�025035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME Tv��VIDAT8ˍMHTa;9#yDA gPAa5YE&@,jŠ ,uc dhqYys>Ppxw4%b "R])l66pH:_ll�X ?P1W\'zvW:PSY墀۶:6D ѦЀ'%4+>{hY M) ޭlkg"Q˳@b�&LzzyK5S-) oUqd7;uXu@]f&%O* XܕrK?Ĕg`{QS[Oͩ 5�|Z4�=)4INJAtPZqW/|R\tV Pc"2F$"~CIq8$+{ ɻ1MST�A-:82\MjfyO Wt:I;@ͧ2TF{(R(ZE *±L̆NU|*V!d Hlh y- }筥>+Q( Mac lRX;A?(7J����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionpathresets.png��������������������0000644�0001750�0000144�00000002174�15104114162�026767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  7@��IDAT8��������DH������������N|G��������DHhN;���hN;���hN;� �������I|G����bL8���bL8���bL8�����bK8��������� ��� ��� �������� �����D�������� ������������B��WJD0����JD0����JD0��� � � � ���B>,�W?�����������������������������������������������3�����������������������������������������������������������������������������db^j����ҘC�,�������-g��������GFC��i���j����*?&�T� &����������f6��������''&4�����������ݰu�Γ\�ΎU��������� �l���������������4P;�-ձ�S"�|B�����Έ1l���������YіB&*�# �ƨ�����YW�������ʎ��t�D�"K������??����gI�������X\b���������, �����������.g0u-��*�\�H��^U��u����uLP2���%*3��9��������������������J���CVVX����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionpathlocked.png��������������������0000644�0001750�0000144�00000002174�15104114162�026723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  1YA��IDAT8��������DH������������N|G��������DHhN;���hN;���hN;� �������I|G����bL8���bL8���bL8�����bK8��������� ��� ��� �������� �����D�������� ������������B��WJD0����JD0����JD0��� � � � ���B>,�W?�����������������������������������������������3���������������������������������������������������������������������������������������������db^j���������������������������������������������������������������������������������������������''&4��������������������������������������������� �l����������������������������������������������Έ1l���������Y�������������������������������������ʎ�ݦ^�Q>L�Γ�����������������������������������������������, ��������������������������������������������������^G�����������������������n����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_setalltabsoptionnormal.png������������������������0000644�0001750�0000144�00000002174�15104114162�026075� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME   ��IDAT8����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH������������N|G��������DHhN;���hN;���hN;� �������I|G����bL8���bL8���bL8�����bK8��������� ��� ��� �������� �����D�������� ������������B��WJD0����JD0����JD0��� � � � ���B>,�W?�����������������������������������������������3��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������slIy"����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_setalltabsoptiondirsinnewtab.png������������������0000644�0001750�0000144�00000002174�15104114162�027276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ,#g��IDAT8��������DH������������N|G��������DHhN;���hN;���hN;� �������I|G����bL8���bL8���bL8�����bK8��������� ��� ��� �������� �����D�������� ������������B��WJD0����JD0����JD0��� � � � ���B>,�W?�����������������������������������������������3�����������������������������������������������������������������������������db^j��������������������������������������������GFC��i���j������������`��h�����a�i��������''&4���������`��hA8��yRw�A8���h`��������� �l���� ����������h&����+���&���h�����Έ��������\�ww\������ʎ�ݦ^�Q>L�Γ�������������ۉ�������ۉ�����������, ��������������������x�������������^G�����������t�rU���S����t�r,c����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_search.png����������������������������������������0000644�0001750�0000144�00000001320�15104114162�022532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��rIDATx|SKOQf:Ӣ4ADMԍi 5.;\]hBHQ7ƸG/Rmu\}$b<;sr3³/Vj* L|C>Y` 0 x=^r\hxr.01#0iת@-xh4jf3}p^ܳ$Yz(u5lܑL Mޞdt[[?(_*~&0@*B&!b@$�ij$Xn`kfm E$Tn蘙ƕy@Qp(-q$QReaAtmu5L;bG%M,l}v E J%D"p?~b$pc7fX,}8Nl$6r1;;Y^*/Hh7cݺ5i{#b;@g767׫@]4W ӊHQFX@ex<.T+f~L'kof>�R\^ ׋ÃCsȳerv (VHry5ooM`Y+ˌ3;ӣ{? �X\?[����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_savetabs.png��������������������������������������0000644�0001750�0000144�00000002174�15104114162�023105� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ĘZ��IDAT8�������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ��������������������������������������D�� ����kH��;������������������ �FO��WJD0��� �������<�j����DB?�<�c$������������� ��6<@������ �����{F4������������������������D?=����������������������������� ��<:;���� ����������������������������� ��������������������������������������� �d$�T0�����������������������������������������A�xz���?� ���������������������������� �� ����� ������������������������ ������������X����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_saveselectiontofile.png���������������������������0000644�0001750�0000144�00000001631�15104114162�025341� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME #8* ��&IDAT8˥Kh\Uƿsνsܙt^&HKiJB)X)eV TVD| >4T몋PA0lc0HJIØL3}{4.\??";Guj #y JO}w<;2rc � �ͳA'}L3� Kw:N훮kϖ (�PivH?3=Z\;n TقX:kzCr֧K7+@3A5栱QoyҷoNfWñ1Jy2wݓᨅ0[u\}L2B3[=*�(R$<Za[Nng5?tX{}z{ ՜ t[d"J)M 'G*b$ oGջfZo ѻ#݇3<x ?oK�"1*w&~i UǃqH?ο <.p4��>Bٙr|;�X}?unPUJ՛+ahvq'� !UrQ`/,]tk7^[eF ڶ@P0`fAPжN3Y8@LݸJ7젙eI-s�. |Q,rQדE�(,ڳbĖ+ЧQ<>@H%+Av|8ۑ�:�.E`V]?@`fP9 U{5^k乔B *%Pʧ^2Y����IENDB`�������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_saveselection.png���������������������������������0000644�0001750�0000144�00000001640�15104114162�024136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME A��-IDAT8˥[hufgvv'۽ Im!bRI )F*>XxC}R0^hS/}(žԨIk&l6lfg!d۾ ~O80K~=n9'r#SLjKԱ ѾEf}+�LC{r �cnm zr /o{\8�U:㟻CQO,{̜^jص&$PvhܽV/gK)i@ j  r<1[}wQ[de,:.Pp"סiPtG~Q,O(�Qj} 6fTRa!o%fijމѷKW[9GFl�' L}\ A CXC\kFe̍ɘ^2 o}Lv MPtK.r˒o$ e,l1C'uD3ayb/MWe*ɳ`P |ŸJ܌˛!nYcʞDߎ<Ssf7Q/I5oZAS~Qn7V8t5=NtN0F7A�.h_zJ[JڕGϬd@ /~sw? �6 2�nbfbvm/mpş;Ca\л%t1.oZ<2 8h{]/2zO? V6/s����IENDB`������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_savefiledetailstofile.png�������������������������0000644�0001750�0000144�00000001102�15104114162�025632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��� pHYs�� �� ���IDAT8OœKTQƟsϽ\aT)HԦe( P"mL EM CʂڅQ-ۄNE0:Lc:{y;uDm]?89p.;F |-pg~x:>Aa6, |sXX\{f|X\vs s|aW ަT݋ſH}B0؁7/"H,lHIi4z|xG^ 7QpD6p'̤K&C[UEr>.or4S?Lia6ı2P*{\`V,V6 *3ppoM&U[,\gMv,}.KSl3a Ó%A)Mj+(Gz^㦨/U2qE~SO D}[=[t=T%5~I!~!Y%P= 5sj^f(%X z����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_savefavoritetabs.png������������������������������0000644�0001750�0000144�00000002216�15104114162�024642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME ��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ���������������� �� �� �� �� �� �� ��|F� ��� �����E �������]?5�����:�=;��'r��yG4� �.����� �����2��i�3~��B>,�W ����/"��� ��N=���� R�� )J�E7���� 3�  �� ��M~� ��� '�Z��$����<��զ#4"J*���Ȃ�0uo���@�n�6 �S"���/ok������0uk���� �I)ο��P+� ���Jw ��ݮ��9w����!< �� ������sXZ>*b)YF5=����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_runterm.png���������������������������������������0000644�0001750�0000144�00000000773�15104114162�022774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA��7���tEXtSoftware�Adobe ImageReadyqe<��IDAT8˥S=KAE@sv ib#RF< ),Ԁ v邠GLvy]\ Yfgw͛UL,}|t5;"${FL촑h1;-~?O[e}O/K^JvO75utlI.j{FhǗ'ۤ* m֡�jT`ǩoW*.t:jZ �P0th4ZR^wvE;_N6m$IzvCF1M Zt3G| �I@tFM-~"{de9}= �kZL2#0y4V<j{E %rF]l~լiꆶ����IENDB`�����doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightthumbview.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ",S��IDAT8 {M������������������2���������������������� MN7�������������������������������������������.� �������������'��������������������L&���I" �I"$������������������������������������������������������V������$?�>'� ������� �9������������ ��/Q�/Q�� ��������������������������3�3�����������������������������������+G�|�����,G����&������%������������������J:�L������������C%�E(�������������������������ͽ�����3D�Yt����������%/�������������������˹��!��!�˸�������������������������������!%����� ����������� ��f�������������fP������������;K� � �;K���������������������������������Ws�Ws�����������������$/��$/�����������//�CC�q >����������������4�������O�������II������$�����������������������������R��������<z���|�|�X�X�Xc����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightsortbysize.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024550� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME '.IO��IDAT8������������G�����v�����������f������������������������������������B�V�����fy��������������}�.��V�����t��z������D�ێ��ێD�������f��f� ��������������fJ�T�r�����r�T�J�����������������g��{����">�Nٿ �� ������Ŀ��>�����������K��"���B�����&���3B�j�D����3���&��f��f��f��f��y���� ���f������������������������@��������������������������������������������������������u��������������������������������������������������|��|�~��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//�CC�����������C���������������������������������//�II�:�:����������f���������������������������������������|�|���6D]����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightsortbyname.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ' =��IDAT8������������G�����v�����������f�������������������������������������B�B�����������f����������f��������f�����D�ێ��ێD�������f�������!���f��������fJ�T�r�����r�T�J���������������*��!�������������|~���������|}���������������!���L����������������&���3B�j�D����3���&��f�������������������f��������������������������������l���������������������������������������������������������n�����������������������������������������������g���������s��s�g������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//�CC�����������C���������������������������������//�II�:�:����������f���������������������������������������|�|���A\Vy����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightsortbyext.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ' PRH��IDAT8������������G�����v�����������f������������������������������������B�V�����fy���������������������������������g����D�T�f�f�T�D�������������������������������������J�P�r�������r�T�}��g��������������g������������G��29%�������������ι{�������������������������g���&��� B�̊[j����y�4�����@������������g������������������������������������@������������������������g�����������������������������������������������������������������������������������������������g������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//�CC�����������C���������������������������������//�II�:�:����������f���������������������������������������|�|���avo����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightsortbydate.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME (z��IDAT8������������G�����v�����������f������������������������������������B�V�����fy����������������������+����������D�ێ��ێD�������f����������������=���fJ�T�r�����r�T�J���������������i�q�������3�����|~���������|}��������������������������������&���3B�j�D����3���&��f��������g�}��������f������������������������@�������������������3�������������������������������������������������%�����������������������������������������g����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//�CC�����������C���������������������������������//�II�:�:����������f���������������������������������������|�|���Ύ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightsortbyattr.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024550� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME (u��IDAT8������������G�����v�����������f������������������������������������B�V�����fy����������������_�|�����������b�����D�T�f�f�T�D���������������*������������*����J�T�r�����r�T�J�����������,�����C�������*�����|~���������|}����������#��������#������&���3B�j�D����3���&��f�y�����������������y�������������������������@��*����������������������*�������������������������������+��������g��������+����������������������������������|�������������a��a�g��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//�CC�����������C���������������������������������//�II�:�:����������f���������������������������������������|�|���En =����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightreverseorder.png�����������������������������0000644�0001750�0000144�00000002174�15104114162�025042� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ;* ��IDAT8����������������������������������f�������������������������������i���S������������������������������������������������������������������6���B���������������������������������������������������� ��� ���l�����������������������������������������������������\���t�����������������������������������������������������f���������<������-���J������,�T�����,�T��%����Q�������N���������o���6���g�� �� ��>�� �� ��>�� ��������������������������������������f����������������������������������������������������������������������������i���S��4�����������������������������������������������-��.��&��;��������������������������������������������������9������7������������������������������������f������ �����������������������N���������N���������N��[����6�����������������6���g������6���g������6��>�� ��9�����������������������������������������������f��f��f����II���������������������������������������������������������"b$t����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightopendrives.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 3 Lq��IDAT8X������������������������/�� =��������������������Xa@�7����������������������}��6�������������������������������������������/����� r����۱4�������������'���\=�@����������������������O�������������������������������������������������������������'���/����������������� r���� ����� ��������^>������������������������5������ ������������������������������������ ������ ������ �����������&%%������ږ�j��������� �������)#$�����������������g�������� ������������������:���������������ٖ�j��������� �H�# �f�f����������������������������hxA4xA4������ � ����������������������������������������� � ����������//�CC�������������������������ږ�j/��������������//�II�:�:���������������������������������R��������<z���|�|�X�X�JP&C����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightflatview.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME ! Utf��IDAT8Д< 2@��.k������f���������������������������� 2@31@�"&F��ҕ@.k��������Z[j/�����Ζ������ ,��������������/100������2WXg�� � #?�1K� �� 4ʮ}�������������������2����� @������������%$$������΍<=/s#(3!���  ������WW����������glӧ� � �������������������������� �������3�'���B�(��������������������������������������3��3����������������������������6A �����|�������������m�mg����XYg2������-w����>?����������<���������f��������2100�200��5-4WXg������@�X_���ǂ�777�g��������f�f������������f(f2�����Z_��Y_����]a��6~�mmm4������������������������_ :~�:}��8|�������fWWij���������������������3z������������3��f��ik����II����������������͆�����������������B��������������1qX����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightequalleft.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME   Z��IDAT8���������������������������������������������������������������������������������͓. f�3m��������������������������������������������͓.0f+O� �������������������������������������������������"<Z�ص����������������������������������������������̐,#9T �������������������������������������������̑.'.���������������������������������������ˑ.$$ �������������������������2kO"!��� ������������������N���� ��� �� � �� ��յ����������������������������)=U�$�ؼ�1j4���������������������������������������������������������':M�">������������������������������������������������������=& ! 0�������*D�Bt\�������������������������+ge������������fۂ��������������������������������������������������������������������������������-6|����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightcolumnsview.png������������������������������0000644�0001750�0000144�00000002174�15104114162�024706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 0��IDAT8K���������������������2����������������������������KL6���������������������������������������������������������������������%�����������������������������G" �G"%�����������������������������������������������m�������������� �������������������%%&���������������6�����?>>�������0..��������������������������������������������������������������������������6�679�������GFE�������������������������������6�����?>>�������876�������������<�<=@�������JJI������������������������������6�����?>>�������<::�������������������������������������������������R�������������nO�����������G�GGI�������������������������w�w������������������������6�����?>>���������//�CC��������G���GGI�������������������������������//�II�:�:�� }�������������������������4���������fO�������|�|���@�d?m����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rightbriefview.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME .0b%e��IDAT8K���������������������2����������������������������KL6���������������������������������������������������������������������%�����������������������������G" �G"%�����������������������������������������������k��������������������������������������%%&����$$%�����{|��������������������������������������������������������������������{K�������������������y�����������������==;�yy�PR��DDB�����zK�������� �������������v����������������==;�vy�PR��HGF�������������������������������������������������f�f�����������nP�����������/�/13��ql�/�> <�����������������w�w�����������������==;����������//�CC�~�������������������������5���������P�������II������-����������������������������K��������Hq���|�|�X�X�Re,����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_reverseorder.png����������������������������������0000644�0001750�0000144�00000000412�15104114162�023775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIMEġE���IDAT8ұ q}o(o3d7<Fh�QJ[N_nCcTqKc5Ћ`-lF*` aJY5c )f]Ln"/Pi!L#l ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_restoreselection.png������������������������������0000644�0001750�0000144�00000001633�15104114162�024665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME "��(IDAT8˥KlTe63=3S3)(XL*bk Y(.ԅj0^ڨ[ZW^o &@RbSŔөs`f:]`2[}'} !KKzxe9;csELKydʾ �@*G \nz?PE�w6-mݶ;800^?wD�/t?S6G{egX8E-W ¥ ᘫ'o4& ESWQO5WLO'OIfA|mFJMN5fMkki\EZvqNԓ&~ a �wJHt,f G־Z4Ji'kJȡxuN-? �U-JO5 P}ECY2YmA,RZ2*,|$uMQX>5{EtL^Z]9aZo g%:UIz=A;?Pļ)&l;g{e`B.8WY ~:~/N3{LUo'Vn)B.lӕw#x^0]B]qlygw/ѽa7 hd~x] C02!  p�f;ZlإH'ZG{FzE*ʙ,DUo7LK"hNh !20>�S_Nӹ^̓ˎx]s����IENDB`�����������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_restorefromtray.png�������������������������������0000644�0001750�0000144�00000001243�15104114162�024540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME PU��0IDAT8˕OHTa{oL`6BAN + *KD4E!l B,% OBa4C|s[X(:Ё~r9RrizvTHyC_b[z]wzOKC72 ȋ2 ȍnpզKn)\9c?ɗ{gp`:D.b49{*ٙ]]χ8Djq﨡i;2 x| GjQ5`e0m YXXQRpM:M<KӤᚐ))\n~ƲVl;7+9O>uql y;+- bHbc"uxrfcbFbHeC YDm=c3L/B'K Mh2vCm:EY?˅#my,?M-'c&)q4 WڥGfBF*9A Bi+JGmA5]x:j Pi?Vѥ n����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_resavefavoritetabs.png����������������������������0000644�0001750�0000144�00000002216�15104114162�025171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME3n+��IDAT8��������������������������������������������������������������������������������������������FGH� �����������������������������������������������[�R�T\b����������������DH�����������U�����������������������DHhN;� �������#,1�����~qd����@hR< ������������������������8 ��J���� ���������������������������X1 ���������������� �� �� �� �� �� �� ��|F� ��� �����E �������]?5�����:�=;��'r��yG4� �.����� �����2��i�3~��B>,�W ����/"��� ��N=���� R�� )J�E7���� 3�  �� ��M~� ��� '�Z��$����<��զ#4"J*���Ȃ�0uo���@�n�6 �S"���/ok������0uk���� �I)ο��P+� ���Jw ��ݮ��9w����!< �� ������sXZ>*b)Y.Vc����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_renametab.png�������������������������������������0000644�0001750�0000144�00000000767�15104114162�023241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 3M%��IDAT8œka~EP Y܂ Rp1 -HB fAAi RvV'AdppqqQ4ɗsGDH=wϝcD)}I^%N iͭmՕ=@UYMUڧg�xۻɵ=DrZu~tcZ0wW߭i/QvмpZ0Cb_z�ܽ~WI Px8�"{@w/'̓c89p.gr0+�ځSް?wH$r�A,j٩>󇕡KLLg{g.sKo,Av}G9x[:7 @/Zmq<-����IENDB`���������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_renameonly.png������������������������������������0000644�0001750�0000144�00000002174�15104114162�023446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME   #��IDAT8�����������������������������������������������������������������������������������������vlf��������������������������������������������������3���3wkc���3���3��������������������${���������������x���������" ��yI���������������k�yI������������h�� ���������� ���������""�������F� ����b�� ���������������������� ��������� ������������������������������������������������������������������j/�����������������������������������������������������������������������������������������������������������%!�I����������� �) �@����������o=6������������������������/igN4������������������������������������������������pkh���������������������������������������������������3����������������������������������������������������������������������������������������������������K]DM����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_renamenoask.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023600� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  /3y��IDAT8����������xw{@��������xw{@��������yw{A������������������������������������������������)�����R�%b�����������??�÷.�=�EL����ݮ�� %����������������� �wuz�߻��G�s���Zo������T�OO������ /�� ��O����������������������� �������� ����� ݤ�V�������������xw{A�'+IH�������ݶ� �9+�/%������������������������� ������.�'� �� �׮��.g�������������~NN�����000�+�%&�ڳ�J�@j�!!!� ������������������̝��դ�K� )���������vuzba��/����Ц��1�F**��������������������de�������#d������������� � �b`e�����������uz�����|������������ ����������������������������������������� �����������xv{4����������������\���������������������������xv{����/55ڊC����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_rename.png����������������������������������������0000644�0001750�0000144�00000002174�15104114162�022544� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  .=U?��IDAT8����������xw{@��������xw{@��������yw{A����������������������������������������������������������� ����������������������??�÷.������������������������������������������������ �wuz�������������������������������������TxOO���������������������������������������������������� �������������������������������)))���������xw{A�'+IH����������)))������������������������������������������� ���������������������������)))�������������~uNNP����������)))��������������������� ������������������������������������������''(���������✛XX�usx�����������������������������������de����������������������� � �b`e�����������uz�����|������������ ����������������������������������������� �����������xv{4����������������\���������������������������xv{���� |yq����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_reloadfavoritetabs.png����������������������������0000644�0001750�0000144�00000002216�15104114162�025152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME-`|��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ���������������v�� � �� �� �� ��|F� ��� �����>"% ,��(� � � .���@�)F:��8��8U)>aD-��8����8� � �E�$m��G��,����"�58�'�ʀ�N���� R�� )J�E7���� 3�ع%F漅Á �-/�M* ��� '�Z��$��-3���!a� զГ����Ȃ�գ}.mZ�Wi'_� ���&"/ok������0uk����(4 ��}J4� ))�o5�����&l�2P_y4�������������J8Z>I���Z>I?E����Y =����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_refresh.png���������������������������������������0000644�0001750�0000144�00000001444�15104114162�022732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME&J!��IDAT8˥[HqoZ.78ٴ$ ,.B(Ԃ.((脆EQ!yᢠ.(Q0QZiWRRAV[͚m߿yHo{/_^~<)%3EMII"=&@L^MJ{b4uR袆xơF򵡘l)c@AN9iYSxﻋ_ 4`�u?� @5+yi[CskW`Cɐ`!.8� p=~spp'Yc.޵$ RšTp HH,I{c�>P[R:vjτpKo!(  G@'�?\|Ý0cdնv&Ӭ �$Lx<n� UabH[6Ƹ ε|e4C Bz^"U�t:=O)KLM H$ϳ.̋ HIF *8yG]w)q{Ѧ[0NЄ>< �$p im@64 UoK`P"nqKOaCR?@U9:y0L'" Rq XLƶ2:j .쨄mp&=V-Yv)|rI|dg%e.- ֟W����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_quickview.png�������������������������������������0000644�0001750�0000144�00000001254�15104114162�023302� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME()��9IDAT8˕MHawu5ص6,;BBtحC.:t cq@,@ ! $d-Wl;yfF~.'Q w ?F3piEy1QJԯD@8y�e]tNPwRIPaq=X�f P UIPi;)ξE!@}]=--7F`dYBkM.a _Z{7$(9xcNOTl`fltr{7& ζ%X:pǣDl`Л Yi@iȮ|j,60F J(MΎ!,5D,oM^oݱL(zC"�EX]ၶU?EK}dnf>2xd<B"#Q BM\=&M4ϥ2ʅHRyn"⫇ _h 98¹[D^S ZoiLZ 18:Da2A #7oJ=WVښYE����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_quicksearch.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  z��IDAT8������������������������������������ I�����������������������������������������������������������A��e����v�] ��������d������;��� {J��������������������M!� }��������ZE$��VE(�������������������������������������������������%�A-�#7�������������� ��P=*���� �� �/"��������������_G)������^@���������������������������ÈR����������ÉQ�����������������������j>���$ ���l@� ���������������dE)��������� �y@����r?� ������������������������������������R8#�������������������������������������������U/�/�����������������~~ ?������������������������������� ���#����������������������������������������������������������lNZA����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_quickfilter.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  2��IDAT8B8q7����������{F����NJ[.��#� ���������.V����������n��� �������؁M����������������łT�������1�� ��������������B �$�A*� ��� ���& �������������"M^F5F �������4 ��ιψVj����������ں /)! # ������� ��͸̉Wj����������������������!<xIKDF  �����͸ňVj���܋�,vA�����������Ĭ4&� % ���ҶƈUk���߄3*@��k2I�������������������!:|L�_��ŀF!���SPL���1����������������������������},rW%��648��4g4�����������������������{(0J� m�W)��\���������������������������";uI<k0���3��� ���������������������������ƭ,F'$�$��a4�����������������������������������������!kO�T+�'o4��������������������������������������������������3���������������������������vGcE����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_prevtab.png���������������������������������������0000644�0001750�0000144�00000001142�15104114162�022732� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME$ҙY��IDAT8œOHQ}qR'e4"Fʕ2XBDB p)Ÿj͢D-$8#P٢p(*p)ڼw[|.:9󔈰h6 $3t͒wN|_q7y&z ٴfF'ؿ>m]Qxal9ʙނ $xZqa*wV "-̥N@H&hXfk 9 --4Fh464a wn% ƉHT|ZXxPJ43XkbףL<R^G.n_>V jlS#[8dq8a?~ʇRZ<މQ*䬏e E_8U<zlݙ烪7䋪!w%bQJ=5 wOI"ݾ/|p-3;{+ʥ W,=b1}(ӱan x'j)(p4T:;oslGkQ����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_previousfavoritetabs.png��������������������������0000644�0001750�0000144�00000002174�15104114162�025563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  "^i��IDAT8������������3K�K����3�����������������������������������������������3H�78��78��H����3���������������������������������������3G�75���� �� ��*�fݼ��������������������������������K�eLS��������(S����t�����������������������������M��:81�����������(�������������N|G��������DH�GhS����t]��������������� ����I|G������:}���������������������8 �bK8�IJ���������ah������������������������{F��X1 �������������==�%.�&�$��� �� ��N�Qb�P�� �����D��J. ������ �����7��i�9~���B��W?:(�1 �" ��������ba���� R�� )J�E8�E�4W��2��������-�d~� ��� '�Z�� �{F4����scŚ{Г����Ȃ�ŘyHiQ  �����3�נ?{�C������@\���P&sZ1K � ������Jw ��ݮ��9w����������������hsXZ>b h���i(?����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_pastefromclipboard.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  $2n��IDAT8����������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� ]P��������vCPU^�� ��QPP�Q�����������}I+�����!�ї����ꮶ�^�~I���������������������*^ހKY��������������������O(�q�S�\7Xc�������K�s�]� � �����h;#�q�<#���������������`@p���p� ��T0�S��������������������������M5U�ҥ��b�����2�������Һ�p�����������J4]��a�_A��������������������������������L3a�z�lG���������������� ����������������������ӟ� =���S*�������A������������_V�������/�Q0����������������^ �=������������ � ����G�G�...�������������������� � �������������+��.�V�������� �`< ?����������������� �������Κf�����������#���������������������������������������������������������@=U����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_panelssplitterperpos.png��������������������������0000644�0001750�0000144�00000002174�15104114162�025577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  &ִ��IDAT8M������������������������JNMN7���������������z�M6���������������xM����� ������������}?�� ������������@�������I" �I"$������������������K# �K#$�������������������������������������***����������������***�����������������Z���������������Z����������������������~�\�oR2��������������oR2�\�~���������������������\F.���:}�����:}���\F.��������������{< �J?.��$ ����f�S7�����>$���L���H�v�#/,����������#0.���J�<��������333�B ����J����J����B �333����������������755�D��)�333�����333�)��D�755��������������������999�������������oC��333����������������������������333��������������###���������������������>������������������������������$���������������������������������������������������������Z{ >c*����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_packfiles.png�������������������������������������0000644�0001750�0000144�00000001403�15104114162�023230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8O]SKLQ={3@/H,q +5 cܩ DV~JTq,0H$*(P~V(^)i͝={)Ɯg3Ia A$pwb+8YX.<qY xҽ[rXPաk7Mqdqqx8A;<)IN"-y; L)yOK?/ALO&rad9 Vvb=u] YW:N$ڦ>D,x<  Ai;y"s$K0% wu3*k+ "琌%w U'pWp#țY@E-جv?#2f< RH|<6~ضPZ(6l aPVVN"4 &kqAiɱ7T4TbP&ueʓ \*lU#jL_FN&Gƺ̕( S1r8&{?e?2?fftd 1|*ÅT7kn൥B;7^ i=80G}5WYdCv<g2*Q) v:Zs`S /,ZCq m? WӨ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_options.png���������������������������������������0000644�0001750�0000144�00000001515�15104114162�022766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڌS]HSq}unMn:Q\9S3 , $z(z)Ȉ >5z2{H7CR3,?pι۽WR ;?BGhE:;k6ވpQ`sl͟D Kј"j]3\":50&_n?'QF�ZVLvsƢ bR^0(oRR 11*'&P#D녥N|f̞e'aڽE^cT%Cć)|!0qY$3OPk!}={<1L 9贺rBf %$f0 kڊӡPĖP9X H|ǭPnc1 \Yz3y-QB9O=j*p ʃʠFs�|R dG d;SCaj'݈(yk@0J$c".ZeD"Jt e"4iwp+/mʖMDCOE07?K J5&WΌ 1zޣR6uNk׻=tfQi8~17_ PNA( 0qBP%iXqTGɊ&e2"]DsW})鑕l7]9*ZYZifUTo%� "$!1����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_operationsviewer.png������������������������������0000644�0001750�0000144�00000001251�15104114162�024675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME�'(���iTXtComment�����Created with GIMPd.e�� IDAT8ˍKUQϾ Ek-u> Q"l$ ́9( Y%8u`h *jt{5>΍l^\nlWD�t( h9 nkC34P�W6�XU/Ĥ(!�ldj+[`<@]]ܾ0B\sj>T8vHNh9HMAНa<6 &wl2kL-cg,�8X)9O<魭1TSn>- А920(hmC(!emXn/!F+7o+Ā4/ׁ2 RլIɨ(S__"{C8@@)1DrXDUat؅AjwNͭo[%tet@� \5#z=Qm"bH\!,g' %;G1vT, GOu/O&W����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_openvirtualfilesystemlist.png���������������������0000644�0001750�0000144�00000001346�15104114162�026646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxtS]HQfgu@V, DZ{ȂՇYY6bz B ^B]"r!I(EA(?0L5|3w.;;̑8$ sp,d\:O0155Dߒ\!o}쬩<0 `5La~P6Wkv?1@9<2ވ+/ؿ+ò@ipSͩiHOu|b97W@۪, t|8_{-M)0U02eb&Zh*-@{7] (_RE,FhX@ ۀ3 y ^e#kCQ<yRAZ09rϨ{^REKj1Uذ� p:ۑpCpwmBaך.XP[6/7 "D{Grfg+, ( ՁiXd\P=@qQRv$ 9)Fo|` K;9.|Ů@>t:r>J=>2.}E8UUMܰ@%Ʌ{ꅒ ) } WIvoii#�(%����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_opendrivebyindex.png������������������������������0000644�0001750�0000144�00000002216�15104114162�024650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 'pXV��IDAT8��������������������������������������������������������������������������������������������������������@�����������������������������������^\�����.���������������������������������������A�m�����y�.�%����HGF����������������������I��7�������NML�����������������������]������� 0���_[Y��(%#�������������������������P'�P'�t�_� ���U������������������������������8n�����tH����IHF�U�� �DA@���������������������������������� �����������������������521� ����� �������������������������� ����� ������������������������������������� � �������������������������������������������?�������������������������������������������������#�����������������������������������������������������������������������������������������������������������������������~o����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_opendirinnewtab.png�������������������������������0000644�0001750�0000144�00000001267�15104114162�024467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME9H<��DIDAT8œMHa~7.̢0E&яT$-0ȨfQҍBe1D$!!V+i")XXI f1N-$Ш,={cX +wƀ:/imWWR-RAlX+KKNb?@dXcA^QR rF#H4\t3cp?A(ıFme@k$'%*0U,/ ʍ>NIpq{�rY%|/dl m@, 6ּ8IJ S˾Rz 1*d- F'FkaajPD\(Uxsa.4_Oۈ=h}F}Z_YX.7Y9灬Mس� ]ybʰEYD&4@Z0wb՗=VNgK\9lR8` X[͏%;Biyޢ1&-9l+T;=0;INy : &B={M>Js"3xۺP?iqQm@_6 i  _2\d����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_openbar.png���������������������������������������0000644�0001750�0000144�00000002174�15104114162�022723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ��IDAT8�������������������������������������������������������������������������������������������������������������������������������������������������������������.k���������������������. �V/���������������������������������������f:�p� �# �����������������������������������]D,�� ��hW/�������������������������������#������������������������������������������ �������������������������������������� ��������������5#���������������������4$�  �3%��cG/�����������������1i�����������������5&�nD���f�����������������������������������������������������������������������������������������������������������������������������3����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ϗxrfl����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_openarchive.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023600� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  7o��IDAT8������������k" ����k���4gk!������vf��������m$dl/ � ����f �� �������!& � � � ���f � ������ � -T�������03&:`������� �,� �ȥW5����i3Q��������� �.�e ����O��*�  ��Ƚ���)=H����������� C���� �,8��9P`������ݝ����=*w!A��� ��.�� ���0��vM������� �(,1� ����:0���� �-6A���������������� � �� ���� � ��������������������� ��� ������������������������������� ��������������������� ����������������������������oNH1$~�$�������������������������������pNI&+/.�������������������������������������������� ����������������������������L5S.����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_open.png������������������������������������������0000644�0001750�0000144�00000002174�15104114162�022236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  96;��IDAT8����-������������������������������~I�������������������������ֻ��EL����ݮ�~��������������������O'��j7�G�s��`ŕ���������������������.� :�� ��t������������������������)� �����G/ՕE������������������������ݶ� �9+�/%����������������������������%��; �� �׮�Rϊ����������������� �233�(�%&�ڳ�+�Rρ�����������������������������������Λ��դ�+z��������������������� � � � � � �ѣ��*�-5?� �������������������������������������� �� ������������������������������������������',/�����������������������������������������������������������������������������Q)��������������������������������������������������%?���������������������������������������������#�����������������������������������������������������_xg����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_nexttab.png���������������������������������������0000644�0001750�0000144�00000001137�15104114162�022740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxSKQ$hk$/(7PRJ%KKoQHHjDIS VMKJ-TEfuƈJ̾o2.c4Vv#{E۞uU )9g$cIT`vߧ�;A~3.C!S긮}ЁU=pB3v�6?3tn Fj:=KjwZvsSC4xW﫡>4e> 4}dCʲ_6=T2`-Ϝ HXs]̭NPήɣ# +{9'혈?}H8$·!8+x 귩NR\oOf騷`$<~`�^^TD�܀A/0Z/(8;@ c@[,Om`#b-crtAMlC Ɛ3P6NzƍT9U3Vnirv?�F<K����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_nextfavoritetabs.png������������������������������0000644�0001750�0000144�00000002174�15104114162�024665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ) ��IDAT8�������� {:;"������ �F�������������������������������� J)5%��������������������������������������6"3%" ��������������������������������������������������m������������������������������������2������ �0#0������������N|G����?E!V16����3��5$!�������� ����I|GP&sS06� ������������������8 �bK8�IJ���M ���� �$�������������{F��X1 ���������> K���������27�������������A�B?��,t��g9D���`�Rg��� � � � �7��W�9���B��WJD0������� �2݇����� R�� )J�E8�E�4WK*�81�����������r6�CS}� ��� '�D���K�eLS��������(S���� .3@&;*�� "��@֌���3G�75��! ����������x�4���q��'�� 8!������͹x�4��������x�4���Jw ��ݮ��9w����������������3K�K����3��������J8Z>I���Z>I?E����Lna����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_newtab.png����������������������������������������0000644�0001750�0000144�00000001131�15104114162�022545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxēMHTQfaސAa.ia)CAїE}vӪ [Jʽ"ieTLH1Pk߻)]8s?2ưYᱛ}i|8PBkU-Yk}G))c{ؼ!gIUРf NA[9x.Rμclj1:Ļjczo"M8R.&^EyqJG^0r`ZǸsIVڊ2|Srׇ00�[1-󳂬L6/Ck3tc>g_OQSMPnnD &sA�[ 쨓͇[ɌL<&l_- M:mC mB .3tSE-#E =$R4n"M~ٗrXBT|iWv=tQ81;|�,sd_+şR7. 0�cU����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_networkdisconnect.png�����������������������������0000644�0001750�0000144�00000002174�15104114162�025040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  73t1��IDAT8�����S�������������}hTT���������������������������� S����������歀iUT������������������������SSD7��������������.#�S�����������������������������������������6)��������������@���������������������������>iI�������������������_N<�������AbZH�r�n]M������I?8�������������������XVR�TNA������������SF4�������ÀJ4QE8BIL�:?7���I@9��������������/��+,,ƂK4IA5,=B�����������!�+.2���������āK4��D?31:��($�������E!��4�����������āK4���������a[J��i�!��������445�*,,~H4������� ��lJ���+�_J5�:�����+.1�������������������r`N���;3&�;#!#��4������������.7?A ���(#��:. ��$/� ޤj4������������������#�������:UI;�����6>��|F����������������HLs5����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_networkconnect.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024340� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  7#ie!��IDAT8�����S�������������}hTT���������������������������� S����������歀iUT������������������������SSD7��������������.#�S�����������������������������������������6)�������������������������������������������������������������������������������_N<�������@������t%�!(-����I?8��������������>iI��������Hϟ�����������SF4��d]H�r�n]L���^O>����I@9�����������������WVQ��TNA���������������E�e�PD7BIL!�:?7�������($������a[J� �d�ǃL4E@4+=B!� ./���������lJ�� �TA/�?K4!+�1;��|H4��� ������r`N���<;0>̜F���|I4�������������]SE��0@F!&-(h"H4�����������?������$�����FE=��6>"��������������������#�����������̉�<C@�����}I4���������������Re����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_multirename.png�����������������������������������0000644�0001750�0000144�00000001410�15104114162�023607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME*!NR��IDAT8ˍ[HTQ猤e9ZQ$5jì%*C& z) *JLQ,) 2hjdd)99g0LIDio[??WWe%m#^(R(GL6/i&Y4E{^5*:>�p%%%eyyM"c"3 KbMu&]a8�PZ?0@jj*+o[+A:Bk(ncu 7u0*`8�dgeq.\Ld<z9a~?&%US[+ ph(eD7I||\Tn}xJR}4bޣ#>>wʢ=LNe* @clv/䙋,urCa-njjkED$Ãt4JVbC"?C"T˃lD.KK~)۹W%/KNbDD<Z�@uus詗ʪ9V 9/CvmmOct }}<YE'a9X(;Aks;-ow^֬`m0e |%|X#X ֨ !+uY\;esT<g "6Rջ/$v2sC,!gb "d.'֬<w󯹈GCCW T4LJtV{.+ P@&7#N3mt����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_movetabright.png����������������������������������0000644�0001750�0000144�00000001062�15104114162�023763� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE���������������������������������<U������������?z=v?@*_9>~>??ABBDEFUZ^_ǎϫ 44$$&&++22337799<<JJzzd���tRNS� '/2BCNQ���IDATjP}5VXh?8iAh'jbx7Ǯ>1 O;ryU AŋZYE\ǟ]]o4.`ڨLQ-޼=fF?`niΨ�HAܘ嚣G^nVw]*?d^.)����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_movetableft.png�����������������������������������0000644�0001750�0000144�00000001055�15104114162�023602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE���������������������������������<U������������?z=v?@*_9>~>??ABBDEFUZ^_ǎϫ 44$$&&++22337799<<JJzzd���tRNS� '/2BCNQ���IDAT0�_ABpACqwpLpa,&3 ٨01́ʚ>&GYU|}\,1ű~^x,cҜX zXHr$j 6_ >XAOe�;r*F)!ĈC oD~k7i&-t����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_minimize.png��������������������������������������0000644�0001750�0000144�00000002174�15104114162�023116� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  !6��IDAT8��������������������?W��������KX��������������������uO����YF3������$ ��=?=����HP�����p2wml1vp��������������@ ����m]Q����|R�����<��'�����������������������m]R�<�����������������AWN��������:���������:�������Q(��F� �W|Y9�?z� ������������������ ��@{�|W7��W����fN5�J~�R���������8�����������eN6������� ���������������������������� ��������R�����3���������2����qR�v�10)�����|Q���������� �� �� ��������|Q������"v,s,sv���"������� ������j�}X6�����?w�|Q����� ����������?����{Z;������{Z;�h�>@=���������������#�����������9t F��������nj[z�������������������������������������"�������������������������������������L-#D&r����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markunmarkall.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIMEѷ8��IDAT8�����������������y�^‚, ������������ہa����RD~q}pM?������������{Q+O8eK7���k��������3^k'��0AJ\��������-h�>ej��������m�p��� AK@J� T��������(q-θ���%�l�h����!9P�� ;D :C� 9C 8A������������P7]� 44�3P]e � ��������������7D$N F!O>6_SA;  k0LN�֢�:K(׸���+KN�ج]��� ������� ���������� ����Ab�  ^f��������ӇӚc� MW���� �������������h � GP%zC q4qD L<mZlZI:j b������������-=5 �σR~*+�ܱ+��(�8H���������kD/�������fBR<Q;��������E ,4$��������N=q�xd����� ���������" �������- <.-& ��ҍ��������������������������������������������z#t;R��榍p`����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markplus.png��������������������������������������0000644�0001750�0000144�00000001644�15104114162�023134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 7ccs��1IDAT8˥Ileߙ6/c;qlƞ6B 8j*U,UġBNMT\XT4RN, TH *j)&d 2;x<ϡ$ 7$wz�g},.G\U+AµM:2<x `@(˕³#$�P#, Y˕^P ;� ژ-}_@M '<䍧b<ÝF4; N)͢V}x3euL¯HLTnٟ&x.?lWgSx8e۴4=="BbGW8Xh៣A6FΉر�p:GxsɆ?D:u7qw:#J\Cp �<,,!l8#J`H5@NԷ+p L&Ujm|7tdV'8-Ͱ+zYm[[�_Z4˻g%^pC\q}Vv?@MM5%o-=~܎]M_/$IR�ų^oy[CD y5ԓD篵iۿke\='o� xɼٙ.4ϭ,^_[^,q5hڳZR dY�xqeK<ciSo= PP?iox</Ce8  OL%zwfq0 P V9z cn`aWEf����IENDB`��������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markminus.png�������������������������������������0000644�0001750�0000144�00000001644�15104114162�023304� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 8 Y��1IDAT8˥[he7|3ݸ6{i VPCJDXD˓JAE/O@" QX*bK&q6n^ٙ!&oq#<#rk}zԍOPE#<@fݻ qk˱'> i�٥%}Kӕ;2�ĆhFNWbГwLgD۰fTHƷ^(z)>]ٙt:6T]릁+J(:R+Wkj=VtR  Fs+mb;{"m$<Z«ߐ.K)[N&N[� i+Kz>s4<w`PJOO��09˔JѰZD c% Pw&]ߊ 7l2c\H Z[^ (lOd&y-_qj]u6vmuiy~Fc7p 1N} 1sŹP)k/~kIx_jﶬ?{+IWo2*Ͷ?-R3ζQ޳<,̢j~QO3PhV[o[5k e  ^aM&9?.ļqW;cz,T~ Ao!l z.y@eҞ#:kNX$GwqHTa jn63"\x�8� �oX?63v侑zT3eO7g����IENDB`��������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markmarkall.png�����������������������������������0000644�0001750�0000144�00000001633�15104114162�023572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��=IDATxdSMlE}3Ďl6IUi+*TC )�9 TC/- V j*Q5HP@mU`봻z0bP'=ig{o7r>&~elmePy?8k݄-J dF"i:3&> <4@zyˬ ǃrxfazN(6f<I p}t”pPɠ6{LuzDF}D{ѱYaޱA2Vu +d;Y}z T61-=I$`BL4Zz-GA b&scf̌m54f=Bt@mh0)`'E#)0cc6,uadkGL@AI(Ѽu#"4"$#)@t8%@07p ݅ϊ6(FЮUѭG $S#HfNׇKͯ2VuoN؝1ڈ=wbnsS'rk#M@D NLXou+WDyf}t`3_Fc|:wEk-KC<y74K(:H;C)!7`Nv.J IQ7VNx02#_^4k.Sm fE3 uϓ GǍOcI_Zg⻶uΞޚN5; ޛx ` 0�?3����IENDB`�����������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markinvert.png������������������������������������0000644�0001750�0000144�00000001500�15104114162�023447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 81,,>��IDAT8˥S]HSa~Οg;nrFͬ4(n+ !".C!( *( *.Jc9<;;?_PEsSzMM*\Y?>4y-] jOk� �[R=-۽J��m,W[+kuN_ãh(~<r!,� atMBJmoNyYiأw% VO_A'XXG:ŏFQH5ġ*v蘝I?eϾ \QDON4xdFSWz|G Lrpɫ/.ϘZVs"�Ϧ=YU+ȼIEɯ(fcQ7 )#l-�D2ÄF:=\Q ,X X9P=Seuf$?%x~~j!eSdTF҉ eL(^cYGlurRJrb-YUrXÔ-;�0qݷ*X]Q H۷.I f-[C.ʟ/ s <yIE޵UaVef)T8as<[\x4$lcѠ!�. c]9~�$CC(//;e>l'8Mzn����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markcurrentpath.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �5" ��IDAT8������������[t;����N��ot���������������� /G=k�:��������E1U�G�-���������������� ��ц��/� :�=��  ���Κ��������������������'xZ����/�K^%A������wK�������������������%wF���[^���P>��������G��#n%� :�� �� E���Kx������6T��د���� ��Ȥ�����������+����(:���������U���������� �2���� �� ��� �" �����{��Y�ߺTTT 84+5/'ڷرٻ���*���```*YYYϰ�� �52(� A������  $ ���� E��� %H����&&&��������=Nl�7BP HA8�����������DDD㑙)M*Q�� �NE=$����������������  ���� ooo(޽S����JM+7����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markcurrentnameext.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �4G��IDAT8������������[t;����N��ot���������������� /G=k�:��������E1U�G�-���������������� ��ц��/� :�=��  ���Κ��������������������'xZ����/�K^%A������wK�������������������%wF���[^���P>��������G��#n%� :�� �� E���Kx������6T��د���� ��Ȥ�����������+����(:���������U���������� �2���� �� ���y9V ������� ������K�ڵ� ��  �6���������������������ۼZTE���ٶ KKK���������&<������ E�.;`� �ѿ������������������  �zs]��ppp���������������((('''ά'&$�������� ��������(���7�#T`peee9[[[0uUy'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markcurrentname.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �yir��IDAT8������������[t;����N��ot���������������� /G=k�:��������E1U�G�-���������������� ��ц��/� :�=��  ���Κ��������������������'xZ����/�K^%A������wK�������������������%wF���[^���P>��������G��#n%� :�� �� E���Kx������6T��د���� ��Ȥ�����������+����(:���������U���������� �2���� �� ���y9V ��h�8\��7��������*���ڵݷ߉Aق"������%���*������������������������ۼt4P{��������������������,���������� ܠ����6G�������������������������� �������������������"���:�������ڃܧ���������������������������������3���*��� ������������cny����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_markcurrentextension.png��������������������������0000644�0001750�0000144�00000002174�15104114162�025567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME �0g��IDAT8������������[t;����N��ot���������������� /G=k�:��������E1U�G�-���������������� ��ц��/� :�=��  ���Κ��������������������'xZ����/�K^%A������wK�������������������%wF���[^���P>��������G��#n%� :�� �� E���Kx������6T��د���� ��Ȥ�����������+����(:���������U���������� �2���� �� ���9�( j7K�ڳ��8\��7֯������������݉G[&N���  �6���������7I" � ,��]h|�Xg~3!  !***B�������� ",u-*���s� E�.;`� �ѿ�������������  �zs]��ppp������������\: L؆((('''ά'&$�������������������*���3((((((CCC���ś���EEEz[t 6����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_makedir.png���������������������������������������0000644�0001750�0000144�00000001404�15104114162�022704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڌR[HQ9gvli*Yj$bv B!!*1 z*#z(^CЃj!Hb.by52x# fQˁv<PvZ !&9Q׊Yj粺V wABl2@Ҝ"Cnr(f%D̮ƞ'AYݗr?Dt0EW- oV@k _+ fyG#.%2 asḠ&�D(㹽rGN*j5ǹ%{yF+[ΞNm"ўaL[_֏ yۑuԲU *v`6dX]GE}gu*rI]1<uݓ{C1"I7&ƐX;t'$(|hxON*o.5=܀#WEE<~v~?{8)i0Ŷ#zM&%PJuH֚#(¼Ҍ&#\۸(mEsФRkaV|j2**v+zwA]-'Oڰ{ x1Ao ~跘UKu GLs3xA�^ʃsnr:54us{ /<6d;O~ 0�0k6j����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_loadtabs.png��������������������������������������0000644�0001750�0000144�00000002174�15104114162�023066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  3"z��IDAT8�������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 �������������������������ۗf���� �Iq� � ����D�� �ͳ���������������r��B"B]FA.� ����NIG� �����_^_�NJI��3AC�,����+����CBC��������{F4������������$cc�� ��������~I?��������������������[[[SSS'<������������������������E.��������������������������������������������' ��������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Dm{{����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_loadselectionfromfile.png�������������������������0000644�0001750�0000144�00000001604�15104114162�025643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME #›��IDAT8˥]lSe=kC0&!`L挋h MШhDTb4$jLtިDh!Q#' 3cƲҎ==}(TyiS_b]1[_^>{L?eM e&[g[�*{aŇw%{L7� ^>+|4?[|!VX�@&.dm>pdD\7\<CIUV!)Rxoۙ]}υn,lu[c:szT=G&UNrksx{bZ2/+l$WQ"iPH��E*/=kB0_^W+Cúޣ%6i2 ԟcZQ;I�aDf|TI�Aҵ;-(5^>?v~q}ZXSn3dyKMpϿؕa4 kXP 6e"/ #TI޹s@ԙ P~;sK'�G{2}[F~S,)7gC/7@ùw<ֹLE٫DWZb%ùƛ۷m\9}ߖڒ @(t|@*�0u8wЋI6ګ7&S?eѪ9{7m2hS(OU�جً_tn|9 +-(E~z#٥�5 ǘU?>ʿ!nMW];v !E]PM����IENDB`����������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_loadselectionfromclip.png�������������������������0000644�0001750�0000144�00000001553�15104114162�025656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 9��IDAT8m]h[uHI~lĶvBz7˜n(ݍSȼPoU7ެW^^8o,::"RLAQ6iEXԶ49IN߫ݽ}>VUɽS�~"^kΝ~Ų,82!KEڻ=o/�P�|ߟ;v4wK_|7+C]ӥ/ɘO@,1tk<5@ʼnFGhc   :ó  B#tJEڵmd n q=Nc戥'T~2v$/@>^LP0̐esfk{Ub?گ G.2'ֱ<wgL*U5" q~ aF$"}(v>T[e:  o\m<VM" -cW.ܳX)OP8ҫpI3ѕQTnUJ]kk+gb i5!Cmrō-^ #iD(3d;?�f;Hnm=Y> =lVfo4 L‡H{ul7[n@~zf@W ]?K4nP/ybg+fMI@:zDZ+]/ #|,矙f^ P)����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_loadlist.png��������������������������������������0000644�0001750�0000144�00000001071�15104114162�023103� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���IDAT8Oc߶ @Qi6_3AbIWuP! ? ^6y3G >H$pl7�CbL@b`LPΝ;�4�b++ NZ| ,.`ea <( a31TDY3Y2ma`f0?C�F-z3|!dI {-O~2�?7Do4Ѐo߾f4Vc ÇX883L�TpqZ$A!F~�m{6c$`lWQ 4,Lf /M`g;i:SNg/]q?'oh2  *z L, @Oa]o_ht3 %XNj\Lz5t鿷E�-B"����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_loadfavoritetabs.png������������������������������0000644�0001750�0000144�00000002216�15104114162�024623� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME!N��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ���������������� �� �� �� �� �� �� ��|F� ��� �����D�� � � � � � � �F�Qb�H���B��WJD0��� � � � � � � �2��W�3���B>,�WE���������������m�> ����R�� �y����3����3������������������������ғ7*X|5 ��� '�D��׫�������������������������������$ё2#4"J*�� "��0uo����������������������������������� q��'�� 8!�����������������������������������Jw ��ݮ��9w�������������������������������������J8Z>I���Z>I?E����>ӻ*L����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftthumbview.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024162� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME #(��IDAT8> .��������������������� 4������������������� NQ.!���������������������>R���������������������x�����������������������������������@���,�,���������������������fb���������������������������������������%�%g��������6�_*� $������������0�0��� ��/. �/. �� ����������������������������������������������������������*�߱�����*�����> ������=!��������������������,#o�-&�����������p= �sB ������������������������ʹ������)�6F��²������",�>N�������������������� �� ������"'��"'������������.����������f������k����������%����������������������������������#-���������,5��Ʊ������,5�������������������������������Wr�������������;M��;M������������������������������K�������2����������������������������Æ����������=���������������������������:F)����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftsortbysize.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME $=��IDAT8��f��������*Rg����֮g����������������������������������������������'QgT4\�T4\�'Qg�������������������L������������D��������(QgR2U���R2U�(Qg������������������#������'�������,TfM0N����������N�в�Ԭ�������������:����������� β���������β� �����������W������������K������}��'QzS6?����د]�� ��0��������������������������/��������������<������������������ ����������������������������������������������������g������������W����������������������������������������������(������������������������������������������������������������������������������������������������������������������������������������������������������+Rf����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܽ]����������������������������������������@?i}����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftsortbyname.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME #/Z��IDAT8��f��������*Rg����֮g����������������������������������������������'QgT4\�T4\�'Qg���������������������:������������������(QgR2U���R2U�(Qg�����������������������������������,TfM0N����������N�в�Ԭ��������������8���������� β���������β� ������������������~��������������}��'QzS6?����د]�� ��0����������;����������������/��������������<�������������������������B����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������+Rf����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܽ]����������������������������������������%d^T����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftsortbyext.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME $~Z��IDAT8��f��������*Rg����֮g����������������������������������������������'QgT4\�T4\�'Qg���������������������������������������(QgR2U���R2U�(Qg������������������������������������,TfM0N����������N�в�Ԭ�������������������������� β���������β� �����������������������������ڸ]��QzS?����د]�� ��������������������������������/��������������<���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������+Rf����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܽ]����������������������������������������"~cZ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftsortbydate.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME $*e��IDAT8��f��������*Rg����֮g����������������������������������������������'QgT4\�T4\�'Qg������������������������������ ��������(QgR2U���R2U�(Qg����������������������� ���_�������,TfM0N����������N�в�Ԭ�������������R��������� β���������β� �����������������������������ڸ]��QzS?����د]�� �����������������D�������������/��������������<�������������������������������������������������������������������������������������z�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������+Rf����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܽ]����������������������������������������'i%CP����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftsortbyattr.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME $;g��IDAT8��f��������*Rg����֮g����������������������������������������������'QgT4\�T4\�'Qg�������������������0������������3��������(QgR2U���R2U�(Qg���������������G��������������F����,TgQ3N�������Q3N�,Tg�����������H��������������G���� β���������β� ������� ���;������������:��� ڸ]��QzS?����د]�� ������B��������������������A��/��������������<�����������G�����������������������G���������������������������������G�������)������3�������G�����������������������������������$������������������������������������������������������������������������������������������������������������������������������������������������������������+Rf����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ܽ]����������������������������������������<FfjS,����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftreverseorder.png������������������������������0000644�0001750�0000144�00000002174�15104114162�024657� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME :7ﻓ��IDAT8��f������������������������������������������������������������?��2��������������2��U�������������������������������������������� ��'��������������������������������������������L��k������6��P����������������������������������������������[��7��2��c���������������������������������������������� ��B����2������%��D�����@���q������@���q��������1������/��/������$����>������6���g������6���g��������f������������������������������������������������������������������������������������������������������������������+���������������������������������������������������J���L���?���c���������������������������������������������������`���������[�������������������g����������������������K���������U���K�����������w�����������m�������������������������������������>�� �� ���g������_��������� ������K�����������g������������������������������������������������������������������������������������������������b ##����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftopendrives.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 22j\��IDAT8 A5������������������������ 7�{G[��������������������5k:'�!����������������������7T'�FZ���[���������������������������������������� ���������||G����������������e7%�'���������ff'�����������M����������������������������������� ���������������������������������������������������������� ��������f9%�u'����������������������OX������ ����������������������� ������������ ������ �����������������?>>�������@��������� �������D;<���������� ���������� Qz�� ������������������`/�����"����������������R�������y-�9&��������������������������������� �&�yz��$� �����������������������������<������ �� ��� ������������������g 3Y @ 7������������������������������������g������=���������������������������:`%����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftflatview.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023771� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ,e��IDAT8X? '��5���������������������������������� '"+&��#*����4��������O��()),))T������ �����������������OQOO������+((S�� �%�-� ��<7Myh����������������������S�����&����������� ��=<;������ ?6E ��� ��������� ��� ����7H� � ��������nnn;��� � ��������������������� �������񾯱B��������f����������������������������={���������������������������� Q�����ٱg������������XXB����S��QOO����%&����������$Ng����������������SQOO�RPP� �PNN������"Kf��fXX����������������������8:���g]��������� ��=<;����������������������������൙gXXz������� ��������������������f��f��Å�������:������������������������<�������?������"BHDQ'����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftequalright.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  "|8��IDAT8�������������������������������������������������������������������������������������������������͓/���3mg������������������������������������������������ �1X�f͓.0�������������������������������������������������׳�";Y����������������������������������������������������!9S ̑,�����������������������������������������������&0̑.��������Ε2N���������������������!!� � ��5oN+;5����������������������������>��������+K��������� ��������#�����������Ԝ6)Gm�������������>���������������Զ+�#2?�'�������������������������������%C� ���������������������������������8�"�� �����������������������������^ڟ �*Ca� ��������������������������������9�����������Sש��������������������������������� ���������������������������������jJ>����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftcolumnsview.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 1! ��IDAT8 B� -���������������������� 4��������������������������� -P. ����������������������>M�������������������������p���������������������������������������������������+�+���������������������f^������������������������� }���������������������������������}~�nm�������������������jhg�������ONM������������������������������������������������������������������IP-���������``�������"��������� uv�nm�������������������jhg�������]\[�����IP-��������bc���������������� qq�nm�������������������jhg�������dba�����.������f���������GH����������������������������������������������������ff����������������������������������������������jhg�������pnl�������������������������ff�������������������������� }������������K���������2�����������������������������mƩ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_leftbriefview.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME .B��IDAT8 B� -���������������������� 4��������������������������� -P. ����������������������>M�������������������������m���������������������������������������������������+�+���������������������f^�������������������������{������������������������������������}~����|}�����!"$���������������������������������������������������������������������IP-���������`a������������������� uv���� tu�������������IP-��������]_�������������������xy����xy�������������.������f���������DF����������������������������������������������������]_���������� }����������������������xy������������������������J���������1��������������������������������������������������I���������������������������"V����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_keyboard.png��������������������������������������0000644�0001750�0000144�00000001002�15104114162�023062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxb?%w"l S1 Gv:7J3L jfddd`߆1m3 ?5312031mdHVff& o0012AB-,4P` @tnó/"<xɇ3h3)sڙ3>u'p`x/Cf?Õ{> q(2hŒFų"hOS53`|.P OF 41)3>}ÐðxN?7`bOu@W,ݴ!6ː3F#0P`8r"8ts#4�ղ03 .^ᅧ #RB׃ (]?0R �/Jst����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_horizontalfilepanels.png��������������������������0000644�0001750�0000144�00000000561�15104114162�025527� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڤNP *U%U)y+CqU"ULvvXTvz6?زt9t=.ھ76Bp8IzD>&ϋ*4d: 0]}pZe�AGj,[z�`4'xߟDP~9%wD7j,HfK4QYV漑6*}-6Y肄i[:C?{A8 2|? yTG/z=4��>rY����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_helpindex.png�������������������������������������0000644�0001750�0000144�00000001371�15104114162�023253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxdSMHTQ{ޝqJ„ZHQdAjF?-مEk"E *~b؀ӌ93doƙ:Z.s}ǪN.q'Wc 6vB6`S5�L ^O06+s@&oWO5!DX:0vp1@ }XHf h,ࢗoهw4`6?F^8RuIL%65lo@0 ^,*_3Sm\TF#1|i*83P=Kfh0);hRV[`P+$t!m'ƋOCz\0t %(~?yί6Gvm0",xM&y$dmJ* 0ăc@ MӐQ+ J GK:U 45_I>sqg?;yf塗4 &Lfg㙧xțdx. >983]a?tSryV쬯kw!;l "Ͽ^  Nj2Gׄ'F4˿@I CW&N^$Je^ �Z����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_hardlink.png��������������������������������������0000644�0001750�0000144�00000001145�15104114162�023066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME |K��IDAT8}kSQŴnB!6 EQ"AppOp"1 tRCAqJPQ4Iqx/iRS?8.;=bf־uѕ "/'3K'ժOFʕJi@{$`k{i�T"QVVh,(J{4p||JVK p�!�&'&XY]%q}a3/ =`:g:{ Ɓ�up*dE@QxHW}O K@q*B&7?xeN؍2N(9w=*PnΜ Ifn�ũ@29,~j<xo_i>pާMb;Mjoв.�UM3P$>Ugpٍ3M'7YF*pC& w_"6#4)ώ]4,/sϗ.� ixof)6S����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotopreventry.png���������������������������������0000644�0001750�0000144�00000001343�15104114162�024221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��� pHYs�� �� ���IDAT8OSMHA~MWCŃvC.!dn!fŠCf{Q퐸٭AZ u*®~73_H =<3;< |+躎Ȃs0d2O$6%魱͐v+nB]2b} |,8CڌބH,CYvv^d,j9=,DIPlg`f }71;3UPLL{6(#/x Q[BQ .rz EQuŕOЄ/ "CY1:XoE؝kg,+rPcqu VbX;7 T{i!vd+ygTLiTy:xp �j}ppߖ倾Ni\Kte΍So۪ Tjtw~iB5?JZ5^* 0Z-{Q8+|ozZq Tڻ;4t]BX u{$>U o_n5<o\�d/2BG^/;$4cx,ˉ(" &XC5W`T5Ax �v9����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotonextentry.png���������������������������������0000644�0001750�0000144�00000001354�15104114162�024225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��� pHYs�� �� ���IDAT8OS]HQ~ηcd7+;((.*VԍE?MP u7Q@ƾXXRSa]s9E"JIĔ}N眹.f=9{t:D$h$deh!Gi(~)ղ8%U¢rxWW;::U3\b @[,pnVgfaG訶0vy?&qpZ u0M0Z&ܰ[ƻ}[]ojnY@ӛQ|1cb7j!(nJA^ravyDውCe`.<Y@K8;m9ZBFc]Ǝ'�Y (LPXx¦eS<1c} "8;-o`f/ NVTV1yΞ,u茇o`kA)~x<0&W)$;Wz +=FK<Y1ᜯ}S{ }p^p>H+|^z{f!80׎1r8gzhWICC[SB NXh=)b/V uR,����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotolastfile.png����������������������������������0000644�0001750�0000144�00000005065�15104114162�023773� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��zTXtRaw profile type exif��xڭWi& )r$!㰾)6$FBU*h{p lK.qF%OȺ{/:d`RvcpWN}Ay[!vΣmo1^]va{Qۄ``Ad}qS;6J6[m])AL:5*|t9d,-JUy IDaEZvӲW)r# edO~z=FVO'Vy@321 8 ˼V0G,0۲(J/n"`&jX`[ Dρ G�9Hd'M`ZcYy#U�ld圂?Ep(SUA&Ƌw^ϜA |!rFC1Ŝ8 RRO!ŔRΰɚuƈ )h%XRj5XS͍4״ZlNT2u{ykC:#4AARs\xPCks5MщcG@<L@hHDnbf#+NllB׉uЃ _ ƿȱ/PkS BlgጩddxSROZ:!x%U( 9 Wr ȫ:bjZk[~AqdHZ} ޝ@`;:\V"E,]B�r$sBL8Q5jzs NR*چiؓ{Գd_!; QBas`g 84Ylh)8ʇITy!wuACߑa6׉d0}VoK{ҤnD2'l2vGb3&5HjNw|D=^z;qA]q;mч^kg+8 zڸ C1S˅08vnph1 @kfJG!+y|f7lG#yRn|]M#~y.ߑn+RG0ߞ~Vlڥ;f>:nQwP5jz4**q@㸧j:3FWٚи\eK=%ŊR{ yO5(v%x{#43ה JrP㤇ݽn-vu"S.tBmՀ~I@7VnUPKs;tznuE.:J _jֆCl y(cYMNsҡ+!zї~#j{0?c9c�zx<1~ lI���bKGD������ pHYs�� �� ����tIME,$ ��IDAT8�����������������������������M�O�����rP���������������������F�gG����������������������������������������ߙ������������������������������������������������������������������������������������������������������������������������������������������O���������������������������QOO�ORPP���������������S����������311������������������������������������������������������������������������������IC>����������������IC>���������������������������ކ�:3������:3��H�Ʋr;�����������������������jPS�������F1S�2��:������������������������W�d�75��! ������ӭ���x�4�s�����������������������_�a���������x�4����� ��������������νp2����u�4�������0��������������������������������������������������������rKM|Ag����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotolastentry.png���������������������������������0000644�0001750�0000144�00000005351�15104114162�024213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��OzTXtRaw profile type exif��xڭW[$ g$<;%Q9mwٞ  ^=?0BԜJJPBA_i3G><CM/w]Τ{+6{FxAckyFK?ךǺܐQw`Yp)#\Ww ~N/ 4UZ4iީCweQ. I-V)2$ K)" snyq 2a3’x |Z{֓ z1ohQ7�-->q?�+@0>n0vh%r/ұQ%gG(C|"+ *4g ܀�JrI&G8kY|*'J6E* !?28TcLQc%V$SJvU 5j֢5K95\r-\!K*Zr)VYbuDbKM[ncO]{CFq#2 *fi̳̺%+ҕWYEP_F?Hm9}Qìقv3 Ɓn@hޘL!Fnc #*"Cɸ䫣$^쾐6nn܆@ݔ~ؙ?(>\9!RB1V7?{$y+ڳw4+99CvRP$-d/_UJ$/ʫ&k~_f& MZ xr5>!ifdr͚>m㉡:jL>?kKZ>Us{<j<ZzV<yITw,;yN5j$6 |7=ǙگMOgL4!h]i& \c XZ|oaE~~o,0kJ]J3 W?2(p@17 +#"+ك�l\jKKovE\% 2Yd+ٴr{4s=觚ZȓD@ dGOp|WMtn<(y_J,!m<G߹fkT{躎zYҏ&;{{ hz8@5d}Pq:wE;t#f t,l\2RȶX/{Ct{eXR҃`Qh!wtˀGW2z .V'-tI2W~cX^P7똔* فr!?WnNF=0 -)Wz㣳:p4˒oDirm`մ*f8~ݜTOGac_4m7_ d/ʺLf-* o9 `1ZSq�i~Po&] 0委Zm0[|\u#*4Z v._Ȟ2ٽc[1/DA{=I ֡lrG!ZfM, Y3[hȚ+S&4>[>r;7m UǬdžEgHn6h}WB?q &L���bKGD������ pHYs�� �� ����tIME-��IDAT8���������������������������S�:�������F�gG�Vq�����kkh���lkh������ߙ�����,Kk����������������������������\k���"8R�LEA������~|�??@�?@B�|�@A@�������������~m�������������������������������� �����~|�??@�?@B�|�@A@�������������r��� �������������������������������������~|�??@�?@B�|�@A@������������������������������������������� ������~|���~|�l�d�:3�����:3��"z�FI�x��'E����������]�eLS��������(S����K�NFC������Ǒ]�������������D�`�75��! ������ӭ���a�ѿ�~���;p������������������m���������h=�T���?�������������������������������#����������������������������������)����������������������]Zr?����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotofirstfile.png���������������������������������0000644�0001750�0000144�00000005111�15104114162�024147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��zTXtRaw profile type exif��xڭWkr,*f HBójv0˟Ny4-AϿ.]Дq ٿUG>E/?~`RVe >>%ҏLD߯9Z] 4ĵ5;àaKrw~ w7 +FFL' MQ6jxpBX,x! MtxHp{F3wBS& F?ola.Kh/A[7 >s7a MskS_. [H'D3*@BRD"FDw[V^%ABP'  5iV5Ƙs%I ISL)dd!k9-cZdJ% ZRJ Ukj4ا-rV:wk=ܭAVr# q2)3LqUvhƷRWڔ!3zi8O04_L!ܥ7FT(^tQaGŕƿQ]c7C?֯LnV^zA9)2ՠ@x -ЩX_ .eWp6u$1B5ᴯU53g~u*U$ `߯ ɕ@^d?¹ O |]cr}anʆ5)_�j(͆QK{ ̚Ϙ. Y}'+n�ހ״c̘L7=MPOWҍQh}.iFzB}/CDg3Խ8Rɏ,!Ogi/$]7G]C `Ja>E*Ht6mCABGi"7J;U/~rFrI?.)6.`Rj1n.J_vx?g2R86RC~&/!Eؒ3#D�ٶ8ψW,Dbe}e2x 6<LEȿUz^1Im11_ Kc*8,1=C},_,eǰJn ~m0�U=MݯBs^8r5|[su4dJ|ŏHmmTmb| nX!-o5�qplmYt0 J p+q'4(t(K_kuSMշg M'"[;G /|ϐ޷}@oߒnR+lp+9 th�ewOܢˢK:ġilz(]Z}v%zaD6Q|g`c qlۚ=w=8b"jӵbg2[7kOÙ e���bKGD������ pHYs�� �� ����tIME, ��IDAT8O������������PNNTH����u�����������������B�B������������������Y�T�f�f�T�E�������������������������X �T�r�����r�T�K���������������������IC>�z�|~�9%����������}�����������B�j�D����3���&��������������������������� ������������������������������������������������������������������������������󮰰 ������������������������IC>����������QOO>���������������������������F��������������������������������������S������������������������������������������������������������������������������������������������������������������������������������������������������C���������������������������������������"�������������������������{ri����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_gotofirstentry.png��������������������������������0000644�0001750�0000144�00000005431�15104114162�024376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��zTXtRaw profile type exif��xڭWY$)s㰚 pGVVMuYgoBHzOK>RtQ4'XBEϴyF>>CK/Ό3-+3ɷnn՞~hE'k<՘t:[ QgY¡ 9 7 b(pTiѤscAq~ePBgqr09:-[:e<䷇;?91"d]!lh/�-M�/2'Vߎ&?` ·_cD-0D,kJ9d�Tay 0`d d{c#$H#XM bGcDIHuSLRҴs*kTѤY9f)kιZBaTRJسFWbuD-4nIKM[nإ=G2БGu܌Sf:,.pmKVZ*?�52ƒԖ5<U݊l̀Xu#�Bcm| 0R66|u�adы?![܆_@.pjcW vp3o2"% E`E癞+WWnܛ7͈#D*PN}SxLy.Ti<=s}t`YQO.R+sQR7�WNBSB`С֣nm4;fsf[G@QIn{چqM{+�\\z$T2+#e '헎dte#8!<9]SZjܹm}< )9^ ~,ZRx1(գndrîwy@-iiHiTj3vG(v1h\50W @5T �) c)=i4E �T]+ G8z~=zg+Mu▂]xC툎@n|sQ81s XD uu Q"ۉ"ay_l2mg?nk RSy wDk>(;Ӝ(G[ }Yҿ5id^v*54}[.Գ-<";oWWĿn=5(L(wz>a6a*? E3YoྰlAqoAٷ=ܯ m52�2oyhykhNN=6áT#-4t-ngoi$k.*U_ihdſm>܀7)هy֡4g)_ Y@XLo:iو=%O_le5.*BqbgAoEMXĔY|*W_l0#Pk1#gZ%ڠ!Hr.cC7VFn~wp;Ť~Zvkb?jZtDX8pv+}%cW#!L3M@p{<D-AD;ܰ5cڛ1ƴ|(~oUy^_RIr"7Vǻ<ˏ g0Fߝݟ ":6 fa���bKGD������ pHYs�� �� ����tIME-3��IDAT8������������������������s�����#�������$C�������������� ^�Y�����of����������WrO��Ǒ]�����������������E�S�f�����T�E�j�����;p������������^�T�r�������r�T�}�"8�LEA��_:�(�g2�rA�)�K�|~���������|}�&r���loq�����������u1�[j����z�� � �����~|�??@�?@B�|�@A@������������ ������������������������������������~|�??@�?@B�|�@A@����������������������������������������������� ������~|�??@�?@B�|�@A@�������������y���������Xr����������������������������@\~���NFC���������{zy���~|��������������v��ѿ���������������������������d�����������?���������������������L� C���������#������������������������������������������������������(�|����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_focustreeview.png���������������������������������0000644�0001750�0000144�00000005475�15104114162�024176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��zTXtRaw profile type exif��xڭWk#-) 7oRݳ3_ĺ )Sr?^_Iv1撳'Xgx悏1hO|~!}Yc`6O~(_:ZCךǺ3ܐQw`Yq ~s\!oz(b.԰ c:F$:3,Tq_apĝ&3G%<'�Q ,`ܟZ{(XWЋhyC ez} fշEK-~K=,8;A)!2)�М8R!%P"s6 lR3P>3 )\V PMbJ)'IJ.s9%%I"UY&*Z*L%)ZJgjX]!Qk-rA{K^z4xđF2tQgqLe-^q,]ej 5zrB "{gLژ1F�#m6f"L|u!8^ؽk|'osr&΄AD'+i6K s[=*gm0=S :Jq>qGn!a,!&#gdo|mIs-VCL̤[*]):;gd&h$:e6mQU}V 94PPLr`EO U&玸uI =JCiϴYz%{ ?QL{J*Ez= :7K:jL,U'7GP"KzDW* !x SX0ZGꫣc* z1ZWuq ~2RIwH 5ᴗѱuO`)}<P.2z 0^~1j¯t`|4Q?q_0aCF@qQl70YS(6|%=dQVa2 xBI!"}xi|v2BG009 eC} B;Ui荇>N"A>de'B?Yᾙa almύ/`Y]SE_CQD2%٥yOp6dTtܓU#9Y}lHU7*O>_|�Z}KiGe$aϾNs./@ ϟ 0jŮ룆1n56vz-q l :u䰀lm/272 &4J9yBc^/ݤr!|\'ގNr7} -aX?],VeGOfMg}yͣҦO܊.uo^Ў띇e[yk Q*zFrm@B;gNe}T y9@˷Go$7n X{ 3Ui-"95SPcsݏVuU(Pz63 E8p6â϶;@J:w_:o#.xG xs';u$Xfv -ӭך[lstt`~&VPnʮ"o/ ~5ddUK���bKGD������ pHYs��.#��.#x?v���tIME ۺ��IDAT8 | M���������������������������������������� MN7���������������������f�O����e�N������xM� ����������������%�����e���������g�8�@���J�h�£�ӛ��.i����� �J��������������B��є�/i��ϒ:�ѕ>�@�������rs��k������������ ���F���2l�����ѕ[���x�����rrq���5����������������BA@�������������������-�����������������������������������wus���5�����������������V�К�������U���������DBA�O�A�����������������L���������{zw���:�������������������/j��^�b�Ѳ�����������j�����������������F���2l�����ѕ[���w�����wwv���������������EED�EED�����������������h�������...�������������������npo�����+������������������V�ћ�����S���������������������������� p5����� ���� �����������~8͢����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_focusswap.png�������������������������������������0000644�0001750�0000144�00000001022�15104114162�023276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8O=HAߝݝCI<Sz #(+ \-6RHA+.BHNmlBb% fwo~ݨY^vofg'6�t<q+1.=tx9=O0،a|}8׶1MΕ1ׂ[AzQDgJ:IMz櫭!B' aS' DrD\ǢP.NǢP.\82ۇr*2u( apʔ|_{mß1Q^ \Ϡv/1r#1/QrLjQ]/mF*h)F9nAߤb�?\|=^(3, M w1.3[+3q[YѥoAIYmuw t %.ξwHJ0̻#�r7O ny����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_focuscmdline.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023750� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  0ۤ��IDAT8������������L��O�����s�P���������������������������������������������F�gG���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������M��:81������������Ƴs�;�����������������������������:jPS�F1S�����F1S�iPS��:�����������������������������������3G�75��! ����������x�4����������������������������������ݼ� *�f������x�4�����������������������������������������������3K�K����3����������������������������������������)������������#�����������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)���������������������������������������������������Nq؞����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_flatviewsel.png�����������������������������������0000644�0001750�0000144�00000001057�15104114162�023621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE���������\\\ױ3z�6~�6A8|�9~�:}�:~�<�@�A�B�FN�_ ~��������ǝFǟHǡJȞHɢJʥM̨PͬSղRصSٲTڸTݺT޸R޹S3 ބ|ۀ܂ރ߅��?g���tRNS�3:e䫹&���IDAT]:Ba@yq_gkh"M{yx7f$A[zY&V iZ,Ws<9j|y:LNˏc^DzffZ* åsܟH�|,B|cA*6V*yҴ\EHcDl}�,Aׂ8�O*F>����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_flatview.png��������������������������������������0000644�0001750�0000144�00000001044�15104114162�023111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������(-S��PLTE���f������k\\\ժ>ױǢDYʤKǢK3z�6~�6A8|�9~�:}�:~�<�@�A�B�FN�_ ~��������HŝGϦNϨQѩQҭUӱXն\ۻ\߿]^_݃߅ݕ���tRNS�#3:;Ne���IDAT]k7aA$rPoT&W|ȴZ{}D<YDiz?_amGxL6\ݧLJ0}4&5UU=77!xZ8ʶ šd 5}HʱsxpQŝ;|i\X '{ J`-9oy!k����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_filespliter.png�����������������������������������0000644�0001750�0000144�00000001244�15104114162�023614� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME7,=Qc���iTXtComment�����Created with GIMPd.e��IDAT8˝?hSQ$/{77T,J)"Z EA:\MZN:):HJ)*Ԅ fpJ٥`b}ihho9{w"vղ2/*h{KvCyɹKA~܊ƭzSPV4 ֧'Ɏ%?zZ3N$'Ɏ -#lLayP:H#d|6Nh]in53'X~ s�}\C?W..:ԽZՙV0L#(?0];[ }w_Q` RT63RN'i̇/8<ŠN�by*J) @l޽t!ЭԓD"K?WN3 k$/JRvMfCz1} >_&_(#_(qd1G*輡�, WuUʕ);P8ئDBr;+�Q�q]~n5fd����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_fileproperties.png��������������������������������0000644�0001750�0000144�00000001334�15104114162�024326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��~IDATxڌRKa~a0uvSsPY̑s.M/B" "$b%sM$4ڦ-f_}sU4YTz I`I ,c8hJ\/G#a_7ɒ"]_~D`pz\~V%30(2T.*P_8\#<Z1\+`0kmi 8,3$IbL?i*J%x;:puh 1zwةHɢ'7xo>#큯' 9"XYJR__lrqvvp>*_ m C8>sp57#WۍY:Rߟ\'PcP244hy6xuy+122%:{<AB5 | )psV*p8ӡso.=xvwKB. o- -S2Ӊo++B9w[r>.,<K2ʋcqrMTq&C: lVkkm3Kj)T(~MF$7nۉ #>ږ1S囧'0v|f*&NFy|]Vm0/� ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_filelinker.png������������������������������������0000644�0001750�0000144�00000001150�15104114162�023412� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME6f��IDAT8˕=hSQ}}EQIAJAQ2dAQH+X7 P:HkMdSY'41]< j9+FDD"]]Z2x::]a:@V!< 8 P%iO`OsUfY-<PUHġ/r@ߧ2H,#ɉǘТF8�sW91�}UqxSFy&ݍض=֧nVٶ-'\<Q0̐?* Zҳ[ܕg8O=^G9HʑHuH^j*>`٤1\yi"(R2̈́ 8C5 Jrkgp]F(V�qfq�O6Ű,kIxrzat5H mAW-@6ɵ|_n8Ӏ .����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_fileassoc.png�������������������������������������0000644�0001750�0000144�00000001556�15104114162�023250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxlS[KTQ9gtF(]&2/"$(, c2D쵇(Ѝ *Ê r|b Aq93gڧ -wַaBe lv/cOm6>3L>u0:IDžgOI4:#c#?n@:{cc.,sK9ӵvUng GgG1X�VJC5U'%i5Z cb䔐F\" Ղ+N9ǖJЮ\`,ρ<lhWb *aUU0 =&87ip j% &Slv-VBr |>y7:'!f$shnnMMKSh]!Ł@ROC'$N7_ `S&IzзFM^ ƶEA( Cw< c{u5jj<$ˆ?Y ߼Exv.WKJw~?DOw7@"5m3xTn|N J^ ǏV+7 BWt]sjW J4g8Սd2i FqtX{#ɩ)knwر ׇIMSG֭[ ty4~Bჩu|c6/쟍7d9%fáHxTU磣nY=E-b/_ ~ RB !o/�q:����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_extractfiles.png����������������������������������0000644�0001750�0000144�00000001476�15104114162�023776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��IDAT8OmHSQΦkΦD!"^>D/AQPGE4\Yr6m^4vo,K9;y8C]75;k(#=^+eeP&w:;qFlmW4hG/ psoio8b5qkjf$h A3<­󘙖lk V-[apb*8x,bRVQϠ||G뉎ʜfWf*4E7'4V#0.e{2A]n e6:M}@f RTcgGᰣyN6.j D Ha+Z |(R)1�ց`O'a3}]If)'G[P g$#o1%ёxo7Jx--ImC88"b4z` ?<AlXD04[ {H4 |r72tzQăEd6 O$ѐ"8C+m7eXR5^7. %5nd͊"OP&pLĔc(GQ-d gI_/@0&T\oĐ�eXfGj*ozݯ Ix7.wy!r|0C|(.CiVvuUՋپwJT9u~EH$u#�|&[bE����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_exitfromtray.png����������������������������������0000644�0001750�0000144�00000001405�15104114162�024026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜSMHQ{EFE.v tEm EQ l@Grk% "#*ZQT{oͽs;w^3a9[wcip0ZѰ~3Ay5RU{WK踥U~IItrw;CLHDo,R [`+#%0] -Avavz /(FZW2^R!S3}*XQ0 ca4Af<;9H d�销QL4->ग़ lnP 萛S$݌E E{"ب$&^bn�a]0ќiI)(6 14 h GEYT+|.ϝYuSCI'MsK dV!1B!B+P]b(55ap#w,V#OY^C2bb]QQCjPM#,+NFt LAF#$*8EaiSKk !. \Ec`~XuTF&#�b)iU@^el:j@oDγeG^C"', d,N.#Hs- r]5֗y"X"CqiMr#�� d����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_exit.png������������������������������������������0000644�0001750�0000144�00000001405�15104114162�022242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜSMHQ{EFE.v tEm EQ l@Grk% "#*ZQT{oͽs;w^3a9[wcip0ZѰ~3Ay5RU{WK踥U~IItrw;CLHDo,R [`+#%0] -Avavz /(FZW2^R!S3}*XQ0 ca4Af<;9H d�销QL4->ग़ lnP 萛S$݌E E{"ب$&^bn�a]0ќiI)(6 14 h GEYT+|.ϝYuSCI'MsK dV!1B!B+P]b(55ap#w,V#OY^C2bb]QQCjPM#,+NFt LAF#$*8EaiSKk !. \Ec`~XuTF&#�b)iU@^el:j@oDγeG^C"', d,N.#Hs- r]5֗y"X"CqiMr#�� d����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_executescript.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024164� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  d؊��IDAT8���������������������������������������������������������������������������������~,��������������$�������������������������bX0���������33�~�������  @������������@$����9:����������=>�PS*�������Z����������� V<<��}��}##=>t���3���3��������(2������������ �]�䟲���%/R����������?3�������kH�EL����ݮ�~��������( ��������HH#�� �(��G�s��`ŕ��������73�-1�LL&��!!�� � /�� ��t����������� ����Z����� � �����G/ՕE��� �������������  � �9+����I��������������������������FV�=�4 �� �׮�Rϊ :QK���������3�86�ٮ�{^ԑ���D`D=X�����������������e�`���l]�������������,����������������������������͌29xd��������������yA|9����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_exchange.png��������������������������������������0000644�0001750�0000144�00000001221�15104114162�023047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME1*..��IDAT8˕;hTA;n6dAI A0F&BY6hea:" FE Z؈7RM ш 1 &K,Ό}C,03s93"UxQL82gb8I!fasf|Byݝ8AEkHͅGÍ*kCnk*a":"t@TeUem9;@ӷ%)V~bldmdC4 V&؛@jup}D~}&a"X T%(pw.iK2lRBRL]7B�Ie~r]=kR\<ٕd=½WYV~翸Rnh^J>~̹pSQ<S\}<ΗxG` UvVRTE88nMj||߯@锗Z͒.*(ND~u$B=˼3Fzd#mjKrdMH孹 :l�O����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_editpath.png��������������������������������������0000644�0001750�0000144�00000002174�15104114162�023077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  '|��IDAT8)�����������������������������������������������������)��Q�qnm����������������������������������������������s�������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)�����������������������������������������������������)�����)�������������������������������������������������������� {M����������������������������������������M[=������������������������������������������@�ZM�I" �I"$��������������������������������������������������������x�]���������d`]�����������7��476���������������������������������m�e���������hd`������������������C�����/33��������������������������������������������������e�p���������gec������������������F�����)+-��������������������������������������q >������������������������������������������µv M����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_editnew.png���������������������������������������0000644�0001750�0000144�00000002174�15104114162�022734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  +0��IDAT8�������������������������������������������������������������������������Ġ�D������E������E������E������E������E<`�������������f���5H����5H����5H����5H����5H���������������������������w�����w�����w�����w�����w�����Y�������]��������'K����������˹�_�@To�������������L������0�����������������`������������������������������������آK�`���֭���4���������������������������آK�_�࿢��֬����4q�����������������������آK�^�༢��֬�1�xv{����������������������Í6�^�۹�����{�`�a�j����������������7����A&��6w���h`��������������� ����� �&����+���&���h���������������q�C� -���4w�p7�����p7�4w���������������������s�ۉ�։�}D�� ����������������������������������9����x�������������\��������������������������������t�r t����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_editcomment.png�����������������������������������0000644�0001750�0000144�00000001267�15104114162�023607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��YIDATxڌmHQy~*"!pdDѢ>!BFAF(,65Շ m)<"=\sHGU0&LIAUO$ne!aCV р3'iNvl$O6eW1JU+\kp77 |Z-up]zi5ְf%:ͫd*S)5ְf#gPʔEʧqiX TD#Oqd 32ìÄT< `3gumvhp;DTyqg kaVv'3vURG΀R<L6sjFCGO_/Ε r |#$QSU\i-?Ɲ& .>uiiC˱6Ujst3Hp7f3;7 ފ= 6!'n Lh;w< <[PYiPwyڼp:{}}A n] ~|{g UQQ*D/X#Zx'T9=[� Be����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_edit.png������������������������������������������0000644�0001750�0000144�00000002174�15104114162�022222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  2C��IDAT8�������������������������������������������������������������������������Ġ�D������E������E������E������E������E<`�������������f���5H����5H����5H����5H����5H���������������������������w�����w�����w�����w�����w�����Y�������]��������'K����������˹�_�@To�������������L������0�����������������`������������������������������������آK�`���֭���4���������������������������آK�_�࿢��֬����4q�����������������������آK�^�༢��֬�1�xv{����������������������Í6�^�۹��ի�o����������������������������7���ԭ��6���������������������������$��$�D�999�������������������������q�C� -�3�---�������������������������������������������������������������������������������������������������������������\���������������������������������������������������Z蘹����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_doanycmcommand.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024266� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  .A*��IDAT8��������� �� ������������������������������������������������������������������������������������w?����� �����K��������s��d��"������������s���;��^���������������������3�� ����#��/������������-��"�� ��"�������������������D��':��WC��������������������������� ���������R���������Y�������,����������&�������������Q���'���%����������������������������������������������������������>����+�� ������� ���������������������������������������������������������������4/��)����������2��D��������������������������� ���������������������������������������:��������������������������������������������������������������������������������n��(����g����������+������������������������ ��r��@����� ��*j������������L9>����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_dirhotlist.png������������������������������������0000644�0001750�0000144�00000001476�15104114162�023466� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڄSKQ3$ZKZJ$؃PRу=T>EEA@RJER؋(HEUd]6ן(0gsa#5MCwK3 `BgқMcϊ\ H !0!@1AWrm�i}R2pVMEpUPE%1W Ji/`,to[ 1 4nӶD0}nNJL-jic`^ X=*(s >�,�.b@Q$U}М*~bs:f 9.* 3HrYǏAd֌>qPQy$9%I[4ɪ0ύ# ,w),"w)7Bs,8`Fz(1JID, ,�˽9#Fdz-lF>R'2>km<2@*4v!>ŨPŒi ,{SϹG.7^`uU oc}i)dCcfi$a*ufzC+I-rg!6.7rˊ*{X/Oɤܡ7 V v "m_2=өOyա^?<Ta3#�LeSUSJ}%fׅ'T%uU'uroV�E'h����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_dirhistory.png������������������������������������0000644�0001750�0000144�00000002174�15104114162�023475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  * M��IDAT8�����������������������������T\PF������������PT����������������������������T\ J�Lf������ ���]ҘCO������! - ��ZX ������� ����ɑX�O/h���������ΔZ-��Ez ���t����2���ϒ;`aqq15oo����������� � ��ߐ�ݏ� ������6A� ���������������������������t�����ҘC���������������T�Vq��#,������Ѷ��C���������������)�� ��������������4q���������ʶ~�ʇ���������&*:����)���������3/���������������Hа��4?��� �������������������������������� !��������������������������������������јE� ����������������������������������2l������0��������������������������������������������������������������������������������������������������������������������������Ϧ!?&?`^����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_deletesearches.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024255� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  1){��IDAT8B����������!��gg���gg���������������������V8��������������4����gg������������������������������������������i��gg����gg�����������������������q |�������������������������������wy{���yxv����P��������������������������������NNM���8��������y��!��gg����x-���++)�� D�V;�������������i4����gg���]^^���aa_�����������������i��gg���o��������K$ �K$$�������������������$��ff� }��|{z������������wy{���yxv����P�����������������NNM����MMK�����������4�����0/.��&$#���9�?�������]^^���aa_��]^^������#�����������������uwy�����\F��+���������������������������|{z�����3�vt{����������������������������������������,JMx����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_delete.png����������������������������������������0000644�0001750�0000144�00000002174�15104114162�022537� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 3":��IDAT8����-�����������������}I���������������������$ ������������������������������������O'�r�S�[5Ya�KY������������������ � � � �������@%�]6X'���������������������������������f:"�v��S�S�������������������������������S0�S0�����������������������������������������������������2���������������������������������������������������������������������������������������������������������������M63i������������ �������������������� �,?<�����hL5�������������������������������4/*����"�h������������������������������AL�EV������������������������������������������������������Q)���������������������5?��" ����������%?�������������������+�h�I������Lr�������#��������������������������������������������������OV8����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_debugshowcommandparameters.png��������������������0000644�0001750�0000144�00000002174�15104114162�026707� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  6��IDAT8��������G$�����������&����������������������GyE�������������yE4����F �26;y���]gq���3����Eq С�hlp��������G����yEG����IEp�������������Q�4������������������������ۤ��'�bmV�;,�C\k�0;>�$�4����������������������������� ���3*��5L�;6�!���t:g��������"�������� ������� �Ҝ���� e��������l����G���� ���������������������������������������,�����������fhid� +1�#�9E��ֹ��������������������������R]i����_jl����q�4�����������������������mqt�!m^hq増�����Q�������������������������GG���3��������G8l����EqSW\hlp���3������������G����yE4���������������&�����&�&�yE������������G����yE4�����������������������������������������������G����yE4�����������������������������������������������yE4�����������������������l����G����l���������������3���������������������������������,������������������ Mwcu����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_cuttoclipboard.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024313� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  # ^]��IDAT8����������������������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� �-����~��"��ˡvCyG��A ���B ���@ ���e�f�>�<��!�� ��� ,�ө� ,������;#��/g�������K��??��;=������h;#�q�<�1~���������~���69� �69�׫�T0�S��??���`@p���#������L����;=�X�Ժ�������������M5U�ҥ�H���� ��69��Ժ�p�����������J4]��� ������׫�9;�j�ik������������������3a�z�N?�~��69�� ����������������������ӟ� ���������׫�9;�kS������������_V�������"�^;��A ��??��� ����33����33�{4�_\�����,*�*&!��K�%��� �344�R�344�F�344�#���ܿ�3.� ��������0�������fH- 2��������������� � � ����������������������#����������������������������������������������D.$����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_countdircontent.png�������������������������������0000644�0001750�0000144�00000001157�15104114162�024517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜSkAfgf7mDsl= ѓw/ēdEڊDkAۚl̎ov4 =d_7]駦L 1F_\FvdC<y͊2;>vwk->�}^Ŋ#4BA�/!,Xpҥt\qcTy/7)-!tfqN"(p~m\C&^ 2 PF0&*LT`GO| |3 \Q! ?捆4YA+ !BiqyS 48BY£3jtDmܩBǥ2$ψoQ# '4wpSmjb^јIa'w@T!Bj%�35F0D &V.!6Roh}F۷SQMI.5Ǟ~+.V,WZ+ۇ|mtN?Gd��;bH]5����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copytoclipboard.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  0[��IDAT8����������������������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� -����������e?����� �9!��~I����������������������w�r��>����i��������������O(�q�S�TX��l������������ � � �����h;#�q�<#�j���������������� � � ��T0�S�������`@p���#������������������U�Ժ��������������M5U�ҥ�H������������ �����Һ�p�����������J4]��� ���������� ����������������������L3a�zן�?����������� ����������������������ӟ� ���������������A������������_V�������"�^;�������Q)����������������������{4� �����F�&���% ��������������6 #��ܿ�7.� ��������0�������fH- 2��������������� � � ����������������������#����������������������������������������������E�i!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copysamepanel.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024135� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ).4��IDAT8O0������������������������������������row������������.wuz�������������������������������������,��������������������������������������������������������������������������������Q/��������������������������������������������(((�-wuz�������������������������������������T��������9π���'�vs���������������������)�d1�������������������Q�qnm����������������������s��xG-��������������������������������������������������������������������������������qnm�����qnm�����qnm�����qnm��������������������������)�s��B���������s��B�s��B�)����� �����������_-~@?;9<������������������1 ������������ �G&>k:!�����������������������������Ӗ/����������������������������� � �b`e����qpu�����������|������������ ����������������������������������������� �����������xv{4����������������\���������������������������xv{����HR����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copypathoffilestoclip.png�������������������������0000644�0001750�0000144�00000002174�15104114162�025707� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  , m~l��IDAT8����������������������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� ������������vCPU^�� ��QPP����� �9!���������������!�Ԏ��Z�ꮶ���>����i�����������������a�c�� �������������������$�RI�C/��n�Yr�j�����������������}$�:3�������D,J�~Ǭ�D -���� !����������қ���������0��Z�����������������?�x��� ��{ W����������������������?)R��sU������������������q������.�jS�����������������������������������������������������m��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4���?Zo#����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copypathnosepoffilestoclip.png��������������������0000644�0001750�0000144�00000002174�15104114162�026754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  +,5Op��IDAT8����������������������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� ������������vCPU^�� ��QPP����� �9!���������������!�Ԏ��Z�ꮶ���>����i�����������������a�c�� �������������������$�RI�C/��n�Yr�j�����������������}$�:3�������D,J�~Ǭ�D -���� !����������қ���������0��Z�����������������?�x��� ��{ W����������������������?)R��sU������������������q������.�jS�����������������������������������������������������������m�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������4���.6Wm����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copynoask.png�������������������������������������0000644�0001750�0000144�00000002174�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME /ZZ��IDAT8O0����������������������������= l��������.wuz�����������������������������Ü�EL����ݮ�~����������������������������G�s��`ŕ�������������Q/������������8�1A�� �� ������������(((�-wuz�������������ԑA� ����J�T����������������������������ݶ� �9+�/%���������������'''������������ _�'� �� �׮�,�&��������������������)))�����)))��%E�ة�J� 7V�ݠ����������'''���������������� �դ�!o�%/����������������������)))�����l��1�***�������������&&'���������������l��&������������� ��������������)))�����)))�������������������Ӗ/����������������������������� � �b`e����qpu�����������|������������ ����������������������������������������� �����������xv{4����������������\���������������������������xv{����08KKY����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copynamestoclip.png�������������������������������0000644�0001750�0000144�00000001272�15104114162�024504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME :$pCl��GIDAT8ˍOHTQ;qD[ AEXQRXB"Y  R`-D Ma2$kc脐iwi1Zu=?O|EJsJZ<S^'j ]q];#PJ3[p*Ҧ_lŴ (NPLR&IYDچ&5amA@S98%ek!V g#LOo(YC=½CSgim8ϥtVAt &guqf%G使lfY׹PzYq A6 ,�OG:s/Jh}L[iA#!BI#o`L ?7E6}^Uf5"k|[K.-ČA)X_\(vo9iZace%Q|[+e|0J;' r4VwXAy2x*EE(eA)9c,JY :F!;`39,ZYP83 <[O+ ,A<d@W>Ȃd?h95hڈ?Tق Rh*O 8YN����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copyfullnamestoclip.png���������������������������0000644�0001750�0000144�00000001355�15104114162�025371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME �e��zIDAT8ˍKla[;MG+!XH(VDZLb# RE%$.BHDHJ4$b%B[( 5X͌3wL[aNrV'{<g>E}ϙ)pa粄[3b FU0r#fdo c붔@>=Sjt5JM[h\K lF"'^+26WLC#{y9z{7kVZ}=gƭFm ^zGGyW~kg|σyM._ظuzeӠ9_@魔^L�'Y>wCUD\&*XUȘؽ%Bը L8qRlϦˆa $߆xS^ˤ@! D1 H!"bUtsTl&Y` H$83kk ,8ǒ%KUlo ! hޱcЁ0sk<tx [[[WgyCCwN@(fz(b ---3"R0|"آ/2}Nhm Azhfv?CkLZ"Q!`t8+2����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copyfiledetailstoclip.png�������������������������0000644�0001750�0000144�00000002174�15104114162�025670� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  81b;��IDAT8����������������������������W��������tttX������������������������zG�O,j�MJG�� ��������Ԗ� ������������OLVd� �tb�^ �������� �MVd�O�������������!�ї��a�P�V��>����i��! �����]q��C/��n�Yr�g�_�������" TLE�����~�E� �������vWJ�l�^�������������қ���������0��\������������T��7 ������2J�1* ��h,������������������N7���L6�L6�?)R��y����������������� ����0,����������������������H" �H"#������������������������������������������������}~~��rtu�����������������������������������$##����������������������������������������dec�����srr�������������������������������6��������6���������������������# ���������������y^O4�������������������B9t����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copyalltabstoopposite.png�������������������������0000644�0001750�0000144�00000002174�15104114162�025740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  0��IDAT8�������������I�������������������������������������I������������������C�������������������������������������C���������H�T3����D-��������Ǩ�[9X�@'<�������l���������H�U8���� ������ %�<��������������������E�T���3*M�[9l��"F�9l����3���3TE���������������������3������������E��E����������������3�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH���V� � ������N|G��������DHhN;���hN;���hN;� �������I|G����bL8���bL8���bL8�����bK8��������� ��� ��� �������� �����D�������� ������������B��WJD0����JD0����JD0��� � � � ���B>,�W?��������������������������������������������K"h@+P����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_copy.png������������������������������������������0000644�0001750�0000144�00000002174�15104114162�022247� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME .-��IDAT8O0������������������������������������row������������.wuz�������������������������������������,��������������������������������������������������������������������������������Q/��������������������������������������������(((�-wuz�������������������������������������T����������������������������������������������������������������'''�������������������������������)))����������������������������)))������������������������������������������'''���������������������������)))�����������������������������)))��������������������� ������������&&'���������������������������''(������������ ��������������)))���������������������������Ӗ/����������������������������� � �b`e����qpu�����������|������������ ����������������������������������������� �����������xv{4����������������\���������������������������xv{����BYJ=5����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_contextmenu.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  z-��IDAT8]w������������m����������������������������p���������� �]r������������������������������������������������������������������������������_w������������ �6�����������������1�Ki\�������������#� ������������������ �O�$������������������������� !��������>>>���>?A��==<�9:<��������������������������������������������������������}{�=>>�����IJK�|{z�>>=��EFG������������������������������������������������������������������������������������������������344����������222�������������������������������������kkk����kkk����������������������������������������������������������������� �������������������������������������������0����������������������������������������������������������)w����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configtreeviewmenuscolors.png���������������������0000644�0001750�0000144�00000002174�15104114162�026607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME #-bN��IDAT8����������������������������������������ppq���������������������������������������QE8�������VL?�ID>������������������������������������������������������������������������������������������������Kap��������������������������������K���������l[IK�������������������������������������������K����������Uv�������Ҹ�������������<7"�f���������#"!��������� �ָ�>��cV'��& &������i5����������������S�fN0�W��mO1�� ��ֺ�R�!� � ������������E�y�- ���+��B�p�N��\�T�(;����:� !� ��e-�-��`I0�3��3���0��1��(��g�L�u�E�)(�6�Į� �S(�'���U�4��^���P�*�]]]���?�:�m����$�������� ��*75�?;�B$�w��D�¦�iC��*���"� ޺��-� �f��r~�}%������̥��+L���#��������������)����i)c**@����QώR�֢C���y�>p����C8Z����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configtreeviewmenus.png���������������������������0000644�0001750�0000144�00000002174�15104114162�025365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME $2��IDAT8����������������������������������������ppq���������������������������������������QE8�������VL?�ID>������������������������������������������������������������������������������������������������Kap��������������������������������K���������l[IK�������������������������������������������K������������������������������@*�X5���������#"!�����������uP0��PC3��PC3�PC3������������S�cJ1� ��mO1�����H2����������������������E�y�- ���+��> �')F�����������������:�0 !� ��e-��5�bI0� ��������������+++�\\\�������)(�B8#��$�w!���22�t����������\\\�����*�]]]���?�:�m����³���������222����������� ��*75�?;�B$�w��?�a������������������? 9�&� U�ѻ� � ����G�����������������#��������������)����i)c**@����Qd�������������������!����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configtooltips.png��������������������������������0000644�0001750�0000144�00000002216�15104114162�024335� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME�C~��IDAT8������������C������cu`G������������Z'+�U7�����������[r\B�����������4�� $6�L*�����������������5���������!+�!+� ������������� �!+�����������-���������������������-�������� ��� ��� ������������ ���� ������������������,'���,'�����������������uP0�������9/�9/��� ��������CaG.�mO1��  ������������¹}�/I- �� �+��g<�&+/���������f_\C,���t? &Ji[C_bA"� �ջ����|2�����)(�B8#�0]So���2�~�� ���������{G4����c�5&k�m����� ��������������?z���?\�3��wd�2�$���������������#Cʽ~JFxѻ� � ����>��~#���������������������3����s-| P����Qd����������������x8.g?����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configtoolbars.png��������������������������������0000644�0001750�0000144�00000001651�15104114162�024307� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 8"8��6IDAT8]KL\uƿcysA`fISWJҍU6TkfHCb X4L\4]u 4)e3pI9INöFF/4͇>8*^RjzF1ӖmۋWǮ p�({~�+hX`Zp;b1pK 4 V.WǮ J)b1<XZŅiPxjT=T %vx_mwuuy8p!ZGZ1�9_i YQ@vmU<{&bhǛP D?��Gf \bcd2� ?{' �ΞI9vv.C22DD'xkwv4*[KtM.7!Mz3xpi@Jb ӄ7nP�&"#N !r: ԰F&ux [wjlcFurpX,-]+lm:-B2kPhoG21Dq2:VJ-/_8ToSSά  e/{*BU*pMr8RO=RBo=~7W$1]p f~mmeYK/<o{ɏ@ǝ0*@kP�mʥ_\wgZ<ss'aD^"-W!>rH D IAŘ4;�DS=5DPsB����IENDB`���������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configsearches.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024260� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME -�}d5��IDAT8��������wy{��������wy{�������������������###�������������$$$�����������������������4�;<;�866�������������<=<� ��4������������uxyQ���򫯮V����gijU���R����QLML����Uwy{� �CEC����Q���������������������������������������� =��aa_�,-+��������������vxz��շ�gd]��22 �2����//1)rtwB�WC.� ��W3����*�kji�  ��������@��- ���+��˜�''�������%O�.M_� ��F� ӫ��`I0�g����������������)(�B8#��E�So���25��<����������:V6� "� ��(3������ (V� � ��%#%����*��*75�?;�B$�w�̦Z4������234A �ӣ�=S��A�>�M���������#��������������)����l*^%'E����Nh�������������������ҀC����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configsavesettings.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  [%7��IDAT8����������������������������������������������FFG���������������������������������������������W�����������������������&%$���������431����431�� �`_^�`_^� ���������������� ���������������������6�~��������<s���=��2 ������ ���kH��;������������������ �F��������,--���<������<�������������� ��6<@������ ����������������!"!�BBB�r����������D?=���������������..0�FEE���� ��<:;���� �����������RRP������ ������������������������� ��� �d$�T0���������������ZZZ�������������������A�xz�hor��?����������������������������� �� ����� ������������������������ ������������ /w����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configsavepos.png���������������������������������0000644�0001750�0000144�00000002216�15104114162�024140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs��.#��.#x?v���tIME1��IDAT8�O�����������������������������������������������OjeM���������������������������O���� �� � � � � ����������*z�������������� � ��*$������ ��V8������������������y����� ������������������������@������ ����������K$ �I������|C�����������Wst���������������������Bi�C��V�5������� �kH��;�������������� �F����ԡ� � �+S��<�j������DB?�<�c$����������'�� ��6<@������ �����?~����������5�W��������5����qc���������������Yj{Y�s�� �d$�T0���������������������������s������A�xz��?� ���������������������������� �� ��� ��������������������������� �����������@:E����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configplugins.png���������������������������������0000644�0001750�0000144�00000002216�15104114162�024141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME  :b ��IDAT8��������������φ< O����1z���������������������������������������͂8͂8���������������������������������������������ζ����������������������������������φ= O������ #� �$$ڜ(�1zP����������������O'_m���������ڕ�����'Yl�����ΌxO������������������������������ݟ����������b����9����������������������٠B �]i��=z����������́: -�������Cfjg�uP0����\�� �� ���2g`�$F?--nf���������BbI19��mO1� �A�Qq��������������������������]yΞ- ���+��$�� ��7�Γ� $����`\u� ��F�#�Q�bI0� �/p����<O��� z����)(�B8#�)��(o����F���������������{G4b{���T�;k������������������������;^���?\�3��uI2�٢����������������������LB���\xI~;ABܞC���3���#��������������������������s-| P������������������������oW-׿Gg����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_confighotkeys.png���������������������������������0000644�0001750�0000144�00000002174�15104114162�024151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  '��IDAT8�����������������������������������������������������̀ �����������������������������������������������������B�/����Q�����������������������������N�����L /��e��������������Juh`4������������������������4@�ֹ(O�����������������������������Od�*^������ �� �OPMB��������������������������������+�����$�� ���������`,�������Z��Rm� �\���������uP0��XI@��XI@��eWN� �#��$&'���XD.� ��W3����K�������iYO�������U ��- ���+��4��kZo��dWO�������_\C,���H�� 5�bA"� �͹�����������.&#����)(�B8#�9%� {�����J���]PG������J6"D � $� ��(3������+�� ����  ��*75�?;�B$�w��T����������������0���ANkxѻ� � ����$b4��������������������������������������3����s-| P����F=��������������������e����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configfoldertabs.png������������������������������0000644�0001750�0000144�00000002216�15104114162�024605� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME"" s��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ����������������������������������������������� ������������UT&�����������������������������BD(���!�" � ��]U,��������������������� �����F; ����ѫ���������������������������Z>���F5kM���3���3���3���3���3���3���3���3���31w�H3�kUҕX/�#�� a���������������������������������fߋ)ArV������������������������������������N]�Kܣ��9~ �������������������������������������������������\���\`=эCw5��������������������������������=Ʉ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configfavoritetabs.png����������������������������0000644�0001750�0000144�00000002216�15104114162�025151� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME ��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DH��������������������������N|G��������DHhN;� ������������������� ����I|G����hO<�������������������������8 �bK8�IJ������� ���������������������������X1 ���������������� �� �� �� �� �� �� ��|F� ��� �����D���� � � � � �F�Qb�H���B��W0%���+��� � � �2��W�3���B>,�W��3/!�� ���M�> ���� R�� )J�E7���� 3��_I���=;TLғ7_ғ7E �F1�=]G�*��#4"J*�� "��0uo���� �O(�*1�#�2ƈ[10!q��'�� 8!�������L4�j� �<{1�Jw ��ݮ��9w��������������������3���3`=Rԓ?x5J8Z>I���Z>I?E����G'Fj����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configdirhotlist.png������������������������������0000644�0001750�0000144�00000002144�15104114162�024645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���gAMA�� a��IDAT8ҘC������G������������������-g��������Д=/h���������ΔZ��������������������.h�������ڋ��S�2h���������������������і^әE5-g������� �������������������#q���������������������������������Y��&ҘC����������������� �#O������ �������јcQ�����������������3%��ߑ���76� �'����5r������������Nd�˶�7?����B����X-� ��� �\����]΢o2j���O&���J����U�� �v�����9�2��6��M}� ���� &�]�緋"@w �ա�Z���� �ܸ��� ���թ�ٷ'kl %056<�]!%Z;ѽ573K�����WF���+?;&��;Z^J8 o<03/XA- ��ݮ��9w��������,_ +IW~Gu�T6��%;sYZ>*b)��������������o71#!$���������������)������c8����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_configarchivers.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024451� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME1:=w��IDAT8������������k" ����k���4gk!������vf��������m$dl/ � ����f �� �������!& � � � ���f � ������ � -T�������03&:`������� �,� �ȥW5����i3Q��������� �.�e ����O��*�  ��Ƚ���)=H����������� C��}l��M�,8��9P`������ݝ����虡 �6�uP0����#7�µ���� &��~~����B[I0� ?��mO1���"�6q��� �-6A���������~IC- ���+��x��� � �������_ ��x�>��`I0�8� �� ������������)(�B8#�#��o���������������{G4����c�k�0#�m���� ����������?z��*75�?;�B$�w��K�����������������#C���3xI~;ABܞCpNz���1����������������������������������3����o+!$J����QC�������������������cliM����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_comparedirectories.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025160� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME !:w��IDAT8 zi������������������ ���������������������$ \5%� ������������������9$����������������. �s  �� ��������������) �����������������$�� �?���� ��%F�n�~=�h$��������� �}����u�=����%������-..�B ����� � U� ������������������$��'���?������������������e��' ��O� 7�����������������(=��� K��N����,-,�.-,�������������������9�� �V� ��������z��'��5u������������������� ����ۼ�I�����������������������������Y�!�� �&>�Y���A���� �� �����������������������������������������W� ���)�U����������������������-�#� $�"Ϲ��� ������ ������������������������������������������������������Q ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_comparecontents.png�������������������������������0000644�0001750�0000144�00000001147�15104114162�024500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME4p��IDAT8}=hSQsjj-AkE."N j2AtS]5"Pɦt*S0)*DAAlSHCJ{?w;u˟ަ#�J}.&F p(~zSْtIYްdyÒ%""g""VْH4PZ23vkK4l7#”h L][*&R�{!""jMVkR˯mʾy_4=JȝA<*DzTi $O^W̎nCm2 ǩ:hMIv (`4'^&qrT j ])&N/2l \[m N ryUAskj8}4=qOw}0yK!CG+;sXfb> ыH5)gKuK0n4�1D-T>����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_columnsview.png�����������������������������������0000644�0001750�0000144�00000001113�15104114162�023640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜSNP=o E֭ 貁T^vH(BYQR$BYPZ!~GL !Q6;ӲhfF߹q|v<1bRMLÀ O8m.#C>/R7_J<7b%rSHJBcE*όMc_wޢݾ!~F9{mfETt[[D$*^)B:zt׃a~P2C$U;<<u 'sjL&zTL0=58u)[@‹=ucL_]yW+Fţ3Mѓ﫛NGu]v{]gXߧ.6PT8Wppw cS%'0-'Gz.z킛dgsxbgy&0yh+Wɝ/@֪FK3:Ez$O�d;����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_cmdlineprev.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023605� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  � [g��IDAT8�����������������������������T\PF������������PT����������������������������T\ J�Lf������ ���]������������3}�̓�����J ��ZX ������� ����ɑX����������3}����������>;Ƶ{{Žų[P>�����3}���3}���������qq15oo��������̓�4������̓�4�������� ������6A� ���������������̓�4���������������t������������������������3�����������Ӡ3bVn&�#,������Ѷ�����������������������������"� ���������J���������������������������������3������ ����������������"�������)���������������������������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)���������������������������������������������������Dy����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_cmdlinenext.png�����������������������������������0000644�0001750�0000144�00000002174�15104114162�023607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  �:‘��IDAT8�����T\PF������������PT�����������������������������T\^}I}{T\������������������������J ��ZX ������� ����ɑX�[����3}�̓���������EEz ���t����2����������nZ����̓����������qq15oo��������3}���3}��������� ������6A� ������������̓�4������̓�4����������t����������������͒��̓�4�����������Ӡ3bVn&�#,������Ѷ�������������3���������������"� ���������J��������������������������������3������ ����������������"�������������������������������)���������������������������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)��������������������������������������������������� KI{����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_closetab.png��������������������������������������0000644�0001750�0000144�00000001122�15104114162�023061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxSKkSA<nKE0jA*JP[M7FAZSre.J GiFMZh j(H{͜!=39T bι\HIyHq ,$Mދ]!~ E6v�WxᴳnL2tiw6GzLmʞ7!6U(GZ@7e;$Zb N%`8՚#[[,ZԿM*mc2u$LzpIzvO(N@6D1,+ D6ϗ\wLF lj{dF/䎏�R }N͍*b;3ps7l79�\GJuߚ̓@,;k!`[_@x@!O %%^o@KxR +E'8QN,,;›#Wc+-T?}7WuJ7~`�ÃF����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_closeduplicatetabs.png����������������������������0000644�0001750�0000144�00000002174�15104114162�025147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  c@��IDAT8������������������������������������������������������������������������������������������������������������������������������������������DH����������������������I|G��������DHhN;� ���hN;� ����� ����I|G����hO<����hR;����������8 �bK8�IJ������� ����� �X�������������n��X1 �����������������������y���������������� ����D�� ����>�������������������B��WJD0��� ��JD0�������������A�����_:N�;WE��������Oݰ�I�"+*������$����3��������������������������������J34/*�������������������������������������������AL�EV�����������������������������������������������K4/ ���������������������������������������������������������������������������������������E1S������Lr������������������������������������������������������������P<|~U����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_closealltabs.png����������������������������������0000644�0001750�0000144�00000001174�15104114162�023744� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME+@�� IDAT8œKQs{_gf \*q#h A\jQcWK)- J $T4ma9fpƜE.:pq8N(΁#ΈlNPJ:R"aS<:ubCt-sPż˾=yjXگ<end[r2-,Gq&:;,Bs]@xh+X̮$3K2qagBS^ \uuk <MQG׉ģ ‰g90p:rQT\!JbKtt&~I (=a$5ICE9޿A9 _>`5GSz?-"McObbVyb).ں4R: 6;�M3}:ZE(Csѫ~+j.VwR*>3lG}L-^uЗǓ8@` \ `:<,o[F����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_clearlogwindow.png��������������������������������0000644�0001750�0000144�00000002174�15104114162�024315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ]9��IDAT8�����T\PF������������PT����������������������������T\ J�Lf������ ���^�#�������$J ��ZX ������� ����ɑX� Z�����������KEEz ���t����2��'� ������F&�  @����Si ��47�ʿJ��w~9�;)�G`����� �x������� ������6A� �����������{F4wD4������t���������� �������������DjVn�#,������Ѷ��������������������"� ���������m���������������������3 owD*������'-0�������3i��������+ �����������.���"?<�����hL5���� ������������s�4/*�������I����������������������������AL�EV�����������ˊ5W/���������������,��������D`D=X�����������������o٥�Y�" ��������������,�������������������������������>,r) B������LrQ3`qQ>����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_clearlogfile.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME +,SV{��IDAT8����������������������������������������M6h����3iax�������������������������E; "+*������QHD�������������� "/*����"�h������������NEB��z��AL�EV��������������������������������������Ax�@x����y����������������&ɗ������[t��%#!�Z�һ�������Lr�������g���eJ�o�������������Uj�(<9��4�������������oQ����_w�������!$������������������1c����0ɓ�s�������������j���������������������6ԡ����e|������� ���������������������� �Z���sV�e�������������q�������������������������}\����k������� �����������������������&\���?֝�i�������������y����������������������Jަ���� �|������� ������������������?��������������������������������������ء Qn0����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_checksumverify.png��������������������������������0000644�0001750�0000144�00000001377�15104114162�024330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME 6rt��IDAT8u_HQ?7يf6=DXX"Az 2)(z(R>H1W|1)If:ͦK&{9JD8ERc?4�q]@,@4Rs� K'�Ph@gYQz^́(y #_Xj2e v$}R*DyđmvX~MtFБCvU'yVRw̍s* 𴽽 IUJ�ZωR Z4Kuƌ S51t>q¸EuN8ptvIh4J,#4 Bb_VVFӓHPXIa;?D"C 6RWzǁKYrmBM8[0`oHA%l�ܞ;V! ݈'+Hٽ'Edo2 +¾!ۺЧz>'9Bi2)ZPF;;['+p{=)JTsr <|0Ѭ$)5ޟr|ȝ,gjcM)4.L x]|}_GR t%ҕ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_checksumcalc.png����������������������������������0000644�0001750�0000144�00000001132�15104114162�023713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxb?,Xd`|lqVB\L:L�jLssse/b�Hl]i@&V޿YVF7 Ξg`afF1DJJ PcEcx5{RL`[ `(lmm;MKKARLS _~JN{UĂ@=g1\�f͘Gnܸs3&fSHjY'\RL?r/]s/jƦֳ̄_cG \Q�sOf+ûw^<6,-h ÇO|򲺪(̝EBL^TTw o߾eXha[]� (yvݺ: <cx ;>tfނkAa1z`T6g2X 0 F|aFT4Ç.\2WRR" 0@�e *)f����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_changedirtoroot.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  $0��IDAT8�����������������������������������������������������������������ҘCO������/i.������������������������������������Д=/h���������ΔZ�������������������.h)�������ڋ��S�2h��������������������і^(әE3-g������� ������������������W���6������������������������������ ҘC�����������������\��������������јc���������������3%��ސ������� �(������4q��������������������� ����)�����������#������������������"�fа��4?��� ���������HGF������������������ ������� !��������69X��(%$��������������������� љ��������W�',������������������������IHF�������������������������HGG� ������������521������������������������������������������������������������������ ���������������������������DԋN����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_changedirtoparent.png�����������������������������0000644�0001750�0000144�00000002174�15104114162�024776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  ��IDAT8ҘC������/i������������������������������������Д=/i��������ΓZ����������.hP���������������ۍ�����T�2k������������җ\O���������������������� ������������ ������������������������������3r�����іa�����������������������4s�xf��������`D�  �l��������������������������������"Kp����������ݵ�`I��a'���������������������8�#Kr���������������ẓ���������� ����������������Қ?�ї���������������������#Io�����ỗ�?uc�����������b)���#Kr���������������J����������������������������������������� ����������������������������� ����������������������������������������������� ����������������������������������������b,�����������������������������������������������,������������������������������������������$&����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_changedirtohome.png�������������������������������0000644�0001750�0000144�00000002174�15104114162�024435� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME &ܹ��IDAT8ҘB:������/i.������������������������������������Д=/g���������Ε\�������������T,e������E�2h������sg� ����N@Q 4����������������� �c�62�(�����JK+���������� �������� ���� ��* ԚD��������� � ���&3=�+,�FR;�epL��$`�Q���������������':*��4C>����()������5r�����������Y�����}�չ���)����������*�����%$�ڦ�Yϡ���!������cR�`�"����:�i8ҘD�0fl�������7M�S!�� �������s��ߵ���� �S�����@����G �0h>zY(0��2����\���������� ��������� �������������� \R<� ���������������������������������������߽p1�����������������t������������������������������#�����������������������������ݚ;>p<v����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_changedir.png�������������������������������������0000644�0001750�0000144�00000002174�15104114162�023221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME (��IDAT8ҘC������G������������������-g��������Д=/h���������ΔZ��������������������.h�������ڋ��S�2h���������������������і^әE5-g������� �������������������#q�����������������������������������Z��&ҘC����������������� �#Q������������їbQ���������������!3&����-�C"����Cu�!����5r�������������� ��b@t�Č�Ǫ�oP���(����� ��������� �P4W�ҩ�����.8����� ��n��������Q5^��>���"O������ �����������������R5b�؞Wљ���� ��������������������Ӟ�����/zY)0����.` �H������_V��������i�������� ��� ��� ��� ��� ���!���3���3���3G���A|����!���������������������������������������������J��A|����!���������������������������������������������������3������������������#=G����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_calculatespace.png��������������������������������0000644�0001750�0000144�00000001516�15104114162�024245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڤSIhA}]==3c2YL4J\P- bDD%AŋAAAQpd,3ʟvD=_*& g'#dppͿ2B[sANK߿ e`(Xs,zܯNs T<K_jǬe2!Y˂!8؃GSU 8Ԫ͐LЖ=h< M#0tmÚP{/f" BcMEm.Y�Pǀ3pХI"Y81|:<$m]M5 #A[X}9VPPX:ظ>A=:ɉ`0!5@- iS !#6p04jB+k$C}8<&Q ^7tAg #dVT2lbhKs䈪(Zk,|1yk!4AOoT�5P"M傛+Bn&6l_3g3OXz۩DcK3\Ov8 T DB_-\<Ү:}7bxÖ\U/Q\EK<Bf˫'SgFSud}]KIJ+bnWr ʛ##]QK(6A@>UZS�#+㛟����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_briefview.png�������������������������������������0000644�0001750�0000144�00000001064�15104114162�023254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڜMOAƟَ)=�VD`\RZĘ1&~� 7@^ě_^ݗ5FLf>3;x*ےJ! h W>Iwϖ _R<\thա}fI~B{_E2׭Je J&W17{rY'aTD{0# =Sd6q@D!J /PU`aΧ!Va^ՊMP>%\0 ꆔRh79M"%8ڎVmۇ{Xz uHBQJ4_;;m\4 <Z.< <^^&G:˺Dqs<};›&LNNzyuMoc촰'f01~4S��/+l?����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_benchmark.png�������������������������������������0000644�0001750�0000144�00000002216�15104114162�023224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs��.#��.#x?v���tIME;؄��IDAT8����������������������������������������������������������������������������������������������������������:98gec; p��� ���������ZXU}��������������� ����������|b\ZW�����������3~� �;98�"��*+,���� `^[�������͂}4  �lŝ� ���&)+�� �� ������������h�=;9��vQ��  ��a_]�sqq�@<;���t������������  �!��p� V8�Y|��eq}� �� �������������� ��145�,5���Wc�������� ��@���������� �;<<���(2�� ����<���4����������������� � ���۷��������������������%*�󯰁 L��������457^ !"� ���,% ����� !�#C<�����������))+T �������7r����������������!,QB8��U�0����������������������������������������]�������EK����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_addplugin.png�������������������������������������0000644�0001750�0000144�00000001366�15104114162�023246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxڌR]HTA޻.涮>"..T AXD=AQ-aKj?P ZQl/HH?, v@3ߟ;=w̜}3 ƧjYE.|[d%j6 x+8_ &[%H|zaρWLcu-<:3Zoh1 |IFd:BEDK׵hXy &W& P?t6#_( w<vVt~ 4Z*;PV"P]]&9*éF�< AQ2HdtHW]tJj/F@RB_ʣBV$2o?@AS7C!�ׁ%�@`doG`/n K$B՜1lM0S2xo'x46^!+w_U~=,KZT:S̿�;YYz:^+W=,Rw.Y.t4IJBcz;Ӑ}Tmo^(Pg=f(ѩBJ4XF[ð.XmGZTq dE*/%DOAC/�s3:fC`l %)dNṐ45Zbj•t%E\2o�;8����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_addpathtocmdline.png������������������������������0000644�0001750�0000144�00000002174�15104114162�024601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME  m��IDAT8�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������!�����������������������������������������������������������$��������������������������/������������3�����������������H�������������������������������������������������������� ��������������������������������#����������������������������������G��������������������������������������������������������J��������������������4������������/���������������������"����������������������������������������������������������������������������������������)���������������������������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)���������������������������������������������������XRA����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_addpathandfilenametocmdline.png�������������������0000644�0001750�0000144�00000002174�15104114162�026765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME 34LV��IDAT8�������������������������������������������������������������������������������������������������������������������������������������������������������������!���������������������������������������������������������$����������������!�����������������������/������3����������H������������������������������������������������������ ������������������������������������������#����������������������G����������������������G������G��������������������������J����������������������J������J����4������/��������������"���������������������������"������������������������������������������������������������������������)���������������������������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)���������������������������������������������������Hր2����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_addnewsearch.png����������������������������������0000644�0001750�0000144�00000002174�15104114162�023725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME   $^��IDAT8��������wy{��������wy{�������a�i������������������������� �8&��6w���h`����������4�;<;�866�������������&����+���&���h����uxyQ�������������4w�3�����p7�x�Љ�����tuxEFE�������<�."����}D�� �����������������&�����x�������������������aa_��� ������rvxz�������d�"d�����]^C�rpo�  ����d��dkji�  ����W�������������������������������������������������������������������44������������������ � ���2������������� � ���2������������������������?��� ���������?��� ����#��������������������������������#����������������������]I����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_addfilenametocmdline.png��������������������������0000644�0001750�0000144�00000002174�15104114162�025425� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��� pHYs�� �� ����tIME . XB��IDAT8����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\����������������������������������������������������$������������#��������������������������������������������������������������������������������������������������������3������������2��������������������������������������������������O���������������������������������������������������������������������������)���������������������������������������������)�tB�����rQ�qnm��������������������������������������s�)����������������������������������������������������������������������qnm�����qnm�����qnm�����qnm�����qnm���������������������)���������������������������������������������)������������)���������������������������������������������������GlF-����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_activatetabbyindex.png����������������������������0000644�0001750�0000144�00000002216�15104114162�025144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME !��IDAT8��������������������������������������������������������������������������������������������������������@������������������������������������������������������.���������G�������������������������L�� ���������x�HR��������H���������������������G >�f/j����������HnQ?� �����������������D/U�����5 ���hO<��������������������'D'�G'�3�޽a�8����� ���������������������e�����X ������������������������������������������ ������� ����������������������������������������JD0��� ���������������������������������������B>,�WE����������������������������������������������3���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hё ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/cm_about.png�����������������������������������������0000644�0001750�0000144�00000001374�15104114162�022410� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���tEXtSoftware�Adobe ImageReadyqe<��IDATxdSMHTQ޽gԑƬleH !r#P۴( 讠](V(ȍpQFRVPRZ8:<a;|{5sJzmp]璯iZJJo}3Kmдƺr)C0#'&"\ƶ^XoU[WjKx7ln9%,D}^$Na5pt~ x6$[6DIJ™|O3w\د8(HggI1ϸi 0Ppz�.$hg;7uX/c>eC4P]i,dHU׳?ÔZ#p\0x*aIBsqƙ|-Xl-Twj@sK_P&s;6YWM;cZ4͕-@`:{ )<;J mUGmG"HPg9ZQzBS YئOT@smpʶ̪d$[xv/ gwɞK QLEFx5So<:<O73=uq E&ǔL\a/}芍?ƮEȪOok`3-�_MF_FC7;ƼSA y1,�SdĹq����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/choose-encoding.png����������������������������������0000644�0001750�0000144�00000000622�15104114162�023656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs����+��4IDAT8R@}VM:I84Wl@Le'$XW"]HmFDv;h ̛yvY �`9q&p|� 8ض]�y/c2I7RUuUŤo잘A)~\8rs HiφE4(p]y eYJ16́4 cT��˲p>q\ж�_a PU �!c=,D`ir^o'B8qX 8/Y ģKnw����IENDB`��������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/16x16/actions/application-exit.png���������������������������������0000644�0001750�0000144�00000001372�15104114162�024067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x��IDAT8uOhIz{ a/EAѫhPê( ,.WEP/DP$jwB&l@gd:=?z~_=2I~P"b,ϳgΟ0IC\&"f8IӔ ΣBkR f3iA$ ijpΡ@)1c/hmYW�|0 raع[kADы<ؾvNk-ιNnA),!j"_3:mZkOe^t  .߻eO:mTG6x;Xn4>Mі֚nޤs'?Ct>($}}Rt گ[X](`sZqLѠ5?"XDP| o^bXD! .MuJe6JV`r77ܰ,.,Rj!l~\D$//񺺞~a`hbb ˗XֿץZ6>c0QzS†> ϣ&jYٻw@`�xGV%Y\`Mxs-곀|mk,+#Za7u9 ?=]�e����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016614� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/mimetypes/�������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020630� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/mimetypes/unknown.png��������������������������������������0000644�0001750�0000144�00000005132�15104114162�023036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a�� !IDATx^SIAAa<OD-|!_]*Wg,K鲺 B ;+0$ t$ϓ>---$f $4>X__ߐ}$ “Q.Ill,477Cuuu^FQ%ے IJJ3޼@�r-�BHPL�>!o@p�,HE� dؚH3ި-S|.[�RlMRgS|.CH�(i2* 8R�# 8d94Z� ss0=3 S(ۋ. 8djXSSFYYQk ?3&6&!%9 ++ػATTA]]]G"{m�EzC0\ eRR"|q0CB|<ۻw�=z.]2>> OuBaMyDD*'a�Ya N'4|A~C8N¿?Q;jFI[ c(_>;fg߳|B޽kzx[zbl6�8)jL6"055CC#?AfBZHg{C#0[�]/RSPR| lc/P I3g{b~ :lP `|bZZ_ϩEJg}ikCzXzMMDF\�?UWe1(+-bwˑl덆]] J@"�JE͛An'RR +Fll \Z+yV2*s֗:Y7 /Vfe{J|�&a' }Ytvfddm�PFےk5`@-/;/hڨ*Xؖ qqO==,lX|Uc[◄I\ Pl?RepOJ�y#L1-#՜@*r�3,1!N9#~vhyg2i�9Sr y4ǣ4X?<�gpIKu@^\,S?CEoo:PJ'(O�.ڪ+p2TWN::Ps'O~,@H)zGG-qBY8񓧬qTZZJ|!ǰJ5#60fSVv`^|.[OXY]f%|u;J|B&I φM?5߉u10*d Q]:/=[J|#s�&|-m~oҳOT>-�/yX|񢛕7Zv2 T짟jNNN^�F|=zi7D̂B�{p*V䳔dhVo%;MpBIe+_;bTDΑQVXAޞ* =~ aݾ_\~VaC$''m>!x1\?m+<P4* Zk%&%!�Vۇzʠ""d~>%>B�Z=m!oB&vX,Q UB�Nk!dP|sgMS* :|.-'"B @I`8B��e)�9�F9r.gI7***BޑWgKWX�\eG:ZZZƍAן09�.U>cqQ_xރEW?/B{/WK|.D?gt> ޡN:VB>\}?J `;?R/ai |-�>i�k6> PH5I %aǵtcQB&�) R^ZQ:P:s�{TS.A&F@S/^󐕕 }hu'ze<!$ܹQYYkqeID+mnn7o{ B='(-[�Rx&i%d9\|NHe 82pJȅ�OJF # 8d9�u$ eQ"C-�+oIk!(DaWs}u$Zl0XfϮֲmN3%***/jkkLí[y<qqqۗ@A05У8+ h@fP,E VP"h,QZ ]n{A)OOO/||w]Y*IIrRVE�)�caXU|V@ԔTKKKIIrmĬ)1[K$D"H$� Np=pT����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/mimetypes/text-x-hash.png����������������������������������0000644�0001750�0000144�00000005361�15104114162�023515� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a�� IDATx^hGS4l1- @P`/AlQ D {cbAgEc;GHfw?.3;g;[p6ī)RRRrrrĕ3Mrrr^nnn?QMA |Mϟ£%%Kd.\`미x5JP5�V*ʚXZ�@Hߡ,k2( Y Fj!Eu ?8Q{B�G�U p��)|gP!x鼶m۲ >s [|R|=իK.D�Nk׮_�nf̘<y*U$\ruUME%>>\/zH- 6_+YXvߟmذA 5AazvBCC;92dIIIEFlȑ,;;[xcuJ>~,X cCA`n�hǏcڷoÐTF>|5j$ ufPycMcoBH5kӦ ;z(+Wo߾ݻ£�'fiӦСCB ❍7֧Ov=yBR�.4iŽ;Ƣ80Dp41@Aׯϻ*Uq>}ćO>@UR�.֭N8j֬)<`zbϟ?E~ Z5ؑ#GXtt$㤧׺O3*n\T^%x(1@A>|5h@x;>:V@˖-֌R9Lڷooj&|O޹sGxSV->ʨ\X ^|S@;Ec҄ǹHY2ex˗//ϐݨL PRJݻw:q^xϟ? u*su g)<y"ZQXZ� $$mٲKc~�iX^��"ncTܿ/%gff 3 mCY 8P|+ܼy=Dh\ ի2oqߙ׶�(V[d =zڵk|=V `ѢElʔ)c/CJ+) 6sL6w\팃Ç"{@% 2qDS"8<;v, �@K.]7$%%qe2cĈhRaa 2@Uh\ [vN @ EfÆ3"ؿ?6mZCZ�X%J13�ѣ۾}W' Y|[PT07o>�I;vit0k,6gqe?@al\"{̟?M4I=aT86�Nʏcƌ9*sv/6õ4j(�*wɓ'0[tvA3qcX=d0*򱼛"< !&/Te.�ɧp_tIx 7ݻ q�2fРA<;xͦXwHM2ɮ]XNG~d3$꟧a-l8gP⑂K+{&�A 9Գgτ08a͛ 3] [.55Ux o֬X2U +{6l(<6A GBfw˓M齇 [�>3wRTZ'W(c�8YAQZ5LA٠*sK�H3{Ԯ]H8(epu>)G:uo&߰ݱd9},x<Qa�5Q-Ӹqc>/Wɯ_xGwf�*Ud ;mrr2Ƀt*PR6>~Zl) s->TXƞ tNPDO졘䑱e1�-ٞgjՊ/␇{b}wF1�V&O*)P]@BB={C111|'OXX( �6mďay|CGz]�v.^X\ӽ 92'&&& WZ͉ Ia`\\+Vpl )l…lݺu£8zm6Q -�gO>T�PeQ ;ȶE?蕓QB&�#_ 8"{ Ŝ &&Z_c�ώgΝE!JHHÜZ1yFUD*!C? @A�b�Dk %�C*�WӤ̷F Y /TeN(ʲV1Q]E �R|o.(8iRU `ADuǴ�"###탙q`J�+V,/Cq5u/L3٪F٣> uEGGeff.lٲ;wV"Ϟ=Y;''KDDRSS+fj,$**SY`+M�!4j?[2Jj"ѮU3CV6O|TqLW"Q-()}PM�%�|o gzzdEk1AHVVV�|v兇|ӧ( BP( `�e����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/mimetypes/package-x-generic.png����������������������������0000644�0001750�0000144�00000006714�15104114162�024620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a�� IDATx^]Fmޯ T<@P!D_�!(B"@*6jKJ(H ^BPUP<�^) -M܏wx{;;o3s{ZFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF !/^WdB�xr/-?֒[>a]fkB;v6vlopv!"q8w!07at_G>x;W�˅?}rKm+-uQ&r=j8ZD4V=S76߸r5l{YP?~ܻgiypk!S _yky!2&_FU^Nemڃ@x'o.R=b~葞QG?|m"Y6�,߽P4lanG~p:|YHVk8M<(m v* /4ѰkB*�;B` Y¤EGnlwŅU8�cnb%~-l Zmw_?v"*�m"@ʈ ΀jWzxۅ$в]B*4 xL:>X?[nr1 Z0ب>9 \k  RϜ;"Q ޺f?d$GƨgYO%<G4MۿeyT(�?gR0۳= C+ .B ao/nv@ w@Mm,@Q"tqy=t3UYk/åO70=RsvoٷWe�v\Z][~G5:WrA("ʆ`&m}�;l9ja4�ΈSEmc9_8{AԔ+�lqjiPQT'-dr)%ɞxƺotw:W?xNk V?ɌkyGs{kɇ͙R�7kw.d!�q ((v{=g󳼙R)�<^?> v y|ptN9C+`4DIJpɯ7z`8qJ�2v2셴z{ה�M- R&[>dö72% �8 {ˇa}h#ۗ�1xL[4֥'179<abUy,)[Xl-/!i<̽o:z[`0�NM|ʡcK|)tgc--~hgkK>s_HI{v[TQgQU./XN>}%Teƶv}忽8ԩ_t&R3#m=(;btiq6Q5f{uvuSy]j5ƴH6S:EOXӀ*Ww2)<h P. [(s�h hvomII }TAo2@`L8A<r[" QE-�F6[�(XԉB /Q�TUI' jI1?t&-9�H0I:S \I_(? WrG}P-`eK,Рy}ݺʿߨy5\Pa !IxY9 }`l߷]kp&~}7ޜ&p 2�an<a wYh4ގY.7m,9_Kz(h˓w"uf0u,Il)d2P#(TC" UhbHH('ʢV@572eL+`@7bHTϖ<|%ABqvH$�amC)U` _tN �M/Vf! Iu(U2�a(0^GĝgZ؀gK!D PSF/tavU2�V!jjѰҁFKzՔaá\[A% 58,0:�.dgFݵ5\"y`%nx@ɕ0 %XdR W5،-2PE&Ih Ğ@u� `�R�Q*ATn@udR�|@5cbWO^h�lP@5--<d/)BQA ѸO +2)d)ا@5E*[ WSF40#fS3ɥJ5WnTR�Iùm,$ ʬj� u"9B20<D �Kx-?P-粥af\w Tْg�6qÂ]jN3 ֲOLQ̃K�MhxDuBcj:EY2, O$EԮ5VPc~L i�P,0:Ł1cBd�p0aYC6eHtBk>-�ƒ `$'ԧP/Ll$Ai�v`R!6p\憼(t>k )T+E},!#6\;?W�4Am)'b�D.f*�`F b/"dSa"H@cpVlFI"Q*hP�wd&(Bƫ"ʊۈ:_)N!Wq.1PAc@9�p;;L "s՜}3W�K|#:QE~W �T$" ')v-N@Uėd4nUPaVit/|TZYUynA-*�£Z0\nTD^j9H4�;x% l!&OP6jNe�\c4@2 cbJ �<(8^3c4w,b(ghĔ�! ݜAd0TOl'0X.;� %p�b4gC&1Q=|"S#4c42&*�Pl 9v FukmЏ )}w'_~޹4[ z[^7x�qw�~7w0l{׍t﷡ӏ�� ("?~t:�fS.�L�K`�P4P?`� �o�|!z0�0 �( �t z �O^(Y�`0P_� R�@1L�K/LT�2w##TYYs/7����IENDB`����������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/mimetypes/application-x-executable.png���������������������0000644�0001750�0000144�00000021756�15104114162�026240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a��#IDATxi$you};{;.OQD"N ,P1"A 2`I.) ?(,#ǎmާD{pwgw:󡺺x][oUޣnmmݶvnmmB 첉'<6=y.ە ]]'ޟ} i}nWk$ɓғMwҕzK@ "KЍ$^yO?{y� T�ZZy[@3B~sjVugV"Sή^xY{9|`H`o*? t܈iZBV[<wvsahXh=FH+-E�A߶i%{n#YHp3 �s}nkىYõ5NOq@?v-B�^{:yg7Ѓ@`?71; 2-N_a__m&77 nF<6z�0-3gX\MD"'$`Y:[c{>|f#.;ci!s# .\8~0r%D�=meYd_D$<ؤb *. LnB,~-i?hoi´,½'ه,s|jt$*/Ͱ`p8.>q w ڌζ^`Մ̃wGȩ&s3pF'@;~瀿/)QlaZ++̯$yAgf27usF&@ûb +LlՀ/vՙ.O`Z sk<tA9d& Jiqf| N^M3xUMbZB$LS+<t j$ ^?%ԻC�wBÓ_{ pʰd 'y<]7 ϔzT6Ļܵ�r,SY(U.\ycn`Hxa řb9"lQ̍ 춖&&-~�%"(?<ħ>~ÒF!@O ݀0M\!x8NZ^O!A F?;qydE�zir4T* .rZ\.`yG@H =1 t; t/(nJog+=epiq<}<Oh3ק ^&@E 3$3DBԢ=ՙUt �Wh {EHW P|Q )9n8" Qy"ȥ%`q5+BTq.__/}Pt< "/zLf9{�1QQRYb,x,H3|=OF� =]<l>]78sqKk Z2חYB�> f}Q {{�_x�uu6mn)L01ZBÈ`aa9I"P HWk{z6Ӥe&~,=] nJ<ZO>f=T@+z~:l.^&n2ca9 p�S9fy..] {M�C]xf|9WVwR<ˉw۲O* QN:ZG{NF/ n /|>{x?+EBzl׮<k T�8x56FSrhôHr<{i$حës |rn__fVE@8 ݤ:*|Go|ݹ]W؎\} ً3ʹp½l= t%W1  (0,28NkG'_]R&@ t6 ~6XۻEl{jx@FP =�UP9]U sZ"c'qdz 0߅i:g/͒SPfލl7a`$IE#4])dd[oa0~e~|u` �K'e/:g.ΐWTʹS;Wx,7G�&( Fo8hi2 j %<Q=J<-JAܥEۘ6idl^--3vW6GSSChX'<x`||nA9{q|A  ?U~`/�.__ftb޽Ky!hH|C\Z)NIˎD$=:̱: O8{$$oʟ}X$7a۩�UW :&fQ jMr)x \{)4H._ƈgOŁ<؇a$INfx. u#Q0G*#`ll`PA˞?:1R֗kʹp`_a0:1e9w1gw$IoVV2i2<NEks@Xh5-4\Hދ2Wܥ"a;W󠔗W*)M8}a&O G N�JK/<D�tfP Z)4{02󖇃&@`JenV⻧.()P=4ZVQa drzUt�c�U^Wtl) 2T?hNâ5ɹ?voL= !\L 9@wWOʽr^ѸRFX^Kc9BӵLss!_-[�zyEeMtI|6-r秉%rIŝ$IG嶺B|u(P(hM̳ Ur x덷l[[A�=ݼyEetbU}G�hW`̲ՙr8p=F$LN_ZMs,f 8a #ݷs6M=9Tr)^)w xY]ysW芹򹏬jt>t7-. i Ƕ,&&8}a C7+BH›/As/?sB6 '/}bW/WGՌ` xmoRvel*VPvvsp_w@Oyiqjləb]\E;N+HM}<"FC@�]:Q5U 3^-sM7x냏+v藍}\]4} hksh$P[4]4d'J, cuhmj@,qSNF2kST>G@ Gm][PXy昙x <F%xnۚ\4]75׍"x>{4+h91υsNIPol l<V.l p b旒.=R,IR9{tf/pzGcd{&\!Enu8U;3K l 膱㍵ZZ&[TyAcC/>~" aZa}=m<x�ண/>?M"HE*$)aYs䗿GWW//pnnm 6wzN1Lwsu1;2ıR˲X,8z�mMRr0quku˹+%p/]v!e ]2L2錓-`5}ejf esۀ+0~e~jh7X'Hb QE; ܽbj.fr[}J9|+(E {tp-@UF=k$ w >:=bz!^Yru9K8N^O(qc(׹Tw_H:c2̅ҰF伴NX"#a^&e !o>Xך 05٨#32F/Ajp~Cr]Nx�X,ez>F_O;$Ja&+Ih% :?`,ټO Wu\r6㘆` eo׺&/syfLt+PBVɻ -�w#_ɻݍ5.͑LYeiXB.z.2(Jo;hurD( y>stVL 2 yMKkvԀjmZΫx<]li87>BG 旒ǓKYlŕݝ-47^Ra9 =>WP)D*(Yc:`$0ɧRJwg+mM['U; ?5I6Ծftw%PWRD#ݝ0B�ӫYw&!_fzҎM 8srKWx4tVg.Z[(/kv:hmn,z|pIުf0 M= :eڅr׌-69'eYYv!JACUumypA}҃?Ik{BZ?;Dz/PwW{d<__ R[>lAp`k57|pK3k֚FʇE΃䱇\c 5.|r}4D#iOۺ.4~  yTMS0x~1bfNmEIVV45 +ky{}j.j,}D)s#^<)䬂eSrV>N$Kw襷snY^Iϫ2BHzX%šu]7HRX[sN[f'�A}wG".W3@C4$aqp0;\%swS+$R9;]NX(+<p&śCC:2ׯزsփu b_a׾UtH.i?|/HC) BQ4w -,s,ǓMRv /p7M "}�t&Z إ½u. L]=iRhm6<o1}Cwu\ٷ˄6B8aƚ_Ω{ ʍޞoqTX\!j*ԭ$WƊ]={"Ln _ ]'L0w}#Vt5D2/)?PոLkKJ6ba.^,:Sz0,q%( �ݻd&e|:8e_2 N2{oDwrh~[JG�)0M%,]$aY}A|EH>{'=@O_ ɦiއW00 O—3pF1櫪Nbm~AD h:99 )d СԲ/Fx˚9*vmm]N)DyqI , OuiU7%/s�mxCH9Yf~"t"X޸c I-�/MUn3:ز?ihj "O]gs,|L*%%Zab|p2%r?ƨՔrcߖ};v%Q"41 U"QZ:7<Qx[N7M{<J/&| @oG=?Sl >MՉw|᷄U"fE{GO�p9TN\\Ne-&3@�F]Pfuf<v1b?_- #iCH5X6vֱ@Q4b,5+|lNb*W.U|~|]zSMrF&XfvʹۻkQ/aeD##Ŷad Sr-M|Sub >ޫbCIIgqf.`wSw{0j/ˈD"�FpڌSnNNsy �Ucum]$�@%eRiPckkA”<RT� X,e)]4#|}πL�L%gu ^/9zzx֫C14/XYa�$PUT*CAs9BHq�[aa.ɿ Hɧʷi^0 +jeuo{�Pi4䕳spC'H x/-4={�"T4ap-P ƚS$ID$K9Iv/A +zs'O^QYޣC쩧n5 <HoO7BA�/@WN"Vz[iu+cD,;+ryðc~N)Ro~ Uv [�ĉ/'B;߿߻pօD1\gtw/6_L" .Ir|i;U,r-DV�ߺkFKcߵu |Z 4 Uiim&$;+XF$ IK?$" ٜJ!;oNNٲoڲ_ WKwO\;ܰ1pCy#*̿E:m-d2 LCjRc4-컒^j -Nt ʗz99e{~_P K?!z%pma5�/X1 ?0(:-r4U!ʭ}_ccEyD+e9ŕK~|M_CuaIH ]_8CUhomAQ(,=v 6i-?Dep<>ɤR ^-+7~/q"l  IY 2R/!]7(Er4=HR$84, L>b?d <qW;U)B|%·2 i[fA0@")d9i?&AG[+I'$>j:r@6J/ 36zL&~>z7߰1k%`z[phQAeri#Yyȧ$!uEhokUR5zzhF]B5QJuNP B8gN"Q4f~[FT`K`>n_U r!?4rBS(htb ]]}446)P�475N,qtsk3%LN}ӟRz?l+?zI%LrCG~!Rhkô :;{hjj_MDWd2UTGg/Ox=lcT!m˕AQF:#Kt&Jg{eEssKmwH$ NCPTxWYC#Zwg~/W[S$,`B-UEəG>)IWT:;�D|֖6Zڽq-BAfim f&g?ϨNzz  ZeUB!obs ;IIuE�*twUpr OE (mN!Y˫Q|f~JPț<$IZQ :'}SIm]]/ )&l/X/=_PZ=O\=�~0QÅ*FbḿᣟHaM tu$ȤN3@0˙$sl dl3oV^]`p/ ĺʠXys`ߑOD"aM)*mI iTUw0\Օ˴| ~bmϾ 鄬bNɶ�aia-⍨F|ߪZ03o ;`$L.'7T dbWil�PT/~|u?\8Z<oZvEz`زY@ fle#8$U@Qrr!l3IKKz .{*&Vپap7^4`V>rCl^$5f0M]3" 4>!f�m^+hjVwH$:d+Av$u, dsW7[/cowvl-5VTZ(߿2 rz:Js| [oqt/۶�wv_5Fle}GDCj1tvWUN͹oEzl>^o}6b:떮zle"蠪$32d եk{qaio{�@^-w?D t2kS?toBZز]ߔm5*QVv MS Յ<D,0c+3߿8ƫN #Bzl6+,^Zu)qۻZ!ˉ;Cm*Rk]J۷̶�NV૥^]oCJ۶ݶpgnӫ�*{=mjP+j!Nz۫uzWҶv�nջZd^VŽ&]5ZAXZ㠻m/ojak]eY5@|WgF#@5E=J*|yommݶ  O~p7����IENDB`������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/actions/���������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020254� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/actions/view-sort-descending.png���������������������������0000644�0001750�0000144�00000005402�15104114162�025023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a��� pHYs��v��vx���tEXtSoftware�www.inkscape.org<�� IDATxpTǿfCݤBaZ[4P`Rc? 7-ɎQNTMvS`*N)&]Ѷc5(MX!v{o;sνλ}        |Ҡr$YVёRiE ~F�|�|�| j̭N[N)m�Son!{tGx.�'h@jǏGT96~�_Dj;鑿T�טbMJB}l�~ExVl9[NR��&\-}C/q%+7Q\�zOOPCOJs*± u/&A\d ŕ wg?<$�\dMJ 8~ gk-~R ?BGl;Jw  v8Ϧ~qP8:�bOJ8RE�(u @ʟO۟I8i�f>ޠT�tn-Wv!5@-%J%u;^%Md1J63pY)̜J%]鿷W:eZҹ3^Eg)[� O A b!�|�|NŜ xT�#9"�#9"�#9"�#9"�#9"�#9"�#9"� !Za~ l7hk:�>@v{:Ľ0跭‡QTvV0(3}ċ�L/3 n/Gx*9(rD7lw <[@'�fhUoKgjSP7` Jc΅L/љ{0 ʒ1w5)ěݮ 8 U&|7L�a0^Qτ _秨쐓)L3-~M+7x]Lx�3m4϶x&%L)#SX;d+]0F7NTC�w3 dsS}*MVגɮd� ^<2]z{~~j 7( ^ �Ӓ~5yNU-LK7Bw2:]1n�Y0}-Jx&w1? U@/T Q"pj`bO`[SĝXxAAX{d =~[pWb%$�Dgmy1 ZYg\`fO l$nL1&0IG[\*R�U*K 4j+*A_~IcLﯭ&~d%{L]c}eyFV)�ynAeXlŖW pSz74MI3a{f~-8\@){3Zc1` 3 dܸ)#V{T٫cTo<tAtc6��b LN=DEö_5 љO ,�hA| UL�.ò-7q"|&<TTO1:k'R0/x+&8N2YOg50uBlMF#Ʃ}^ے0/G`|)d4|3=jVvMFæժT %]X( fG�DTV'cw0q+*D`Ǔ;@XT&l8\b#�^$_ �Y1/G|d4r]/ar@7'Ыj:-f:X; "nc-�lf^ʘhos:AQ3ozU'1ڒjLt"(nXV7(K'^W|ȼZ3D`fg+OI>xk,Ulu2nJbm$px%E1 dz3ay^1.$got;Y@Ae7Z;n;Fz|@� >0BUЎt4SYÀwa๾bdMG3j 0]`uzXQt4Sq Ufb/? At LiofU1z[N>f7S{lZ)]S遇�wKzSh#�xiG#QFExɂLnϾsΙْ]Ol,hy} gCoj<@0c++%ʵ{�L5D�߯ZՌ�Xfӵkp؊'otĉ~//ɳ^0.�+`�ZcYE-@;^JxKGB�[02yy�!Pf~"s r͆@/fջUl?@[I[ 2aB5ְZz ,?znq`xM<nv6JF_ iA NˌMCsHU d鷃ZR86SK`B.pOaH�xj3}Y(g}SMq1�;+aGAAAAAAA4<I'����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/actions/view-sort-ascending.png����������������������������0000644�0001750�0000144�00000005366�15104114162�024664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a��� pHYs��v��vx���tEXtSoftware�www.inkscape.org<�� IDATxklgȫr !4Vji*hEQ]ہ,<"  j(G!BHxt]KRdnQ+"읅BfC%Νs~Rss;s        0 7:kE3kB@IԨ1f00�f�fK!zky7s :pG:!L\�_ruo+?۴aټ*r>G�R}C¤[�ML7t6=P>f6.kt?(+ܯI!^k<� <AUN1zE^Ě(8˪U <5 tF~.`&e}bL�@ �8b󓽅y=;:(Y2)tTS)~fiƯyS:f4s�tfטxL6bOHe�ԂK݉؏g)Q�+tc'=2+ pXǭ=#Z[g|T&=5)H)bw�0ECW 5)�}~ESjlLS  @OD)sɤ3M35t`PW^ҖPK�Kj9Y94k,"�l/�q;}o+L-N7�#Z8g^Vp헧묍/,\B݈�n=8eAt8N1?|Q˸OYB/OS&&^L�T??p)F O`:3Q"P cdADODjpF]zz U^vQ&|Jox;p@ODZݑsXZҵ*%3W&L�S-?Sb@e(<[qp햽Yо}zݷ&ȫZl&-fSZO?vjIl~1@X0}!:j.imE,˅g= M~Sz.W3p?`F4vm˅LJЦ]𜝵"ʟ~߯ϷOMіPq6P+ OׂT+ 紥92qLJhKsߖQ! >5()mi ҭoS*PqE&'BY.<Π+܎Š+ :ռd ӷ8Le?WX%B1fʫ|B1?Db&̷bwNOe~hs}+V �`cbk 6Ʀ5Ow~ؙ1$3CuZ9fXV bd*EFh \= ʇEj-mf#�Xp_U(9 fT:+c1ҷNL>/іxAd8 ;@w5�VٯS�w*z+RaX->\|!ƱHit18T6ՋNd5�*y4̔+z1򱶬'}t�5l!ED�[c�/(Fe_T;.̔ Ѝr,v;nLf )e+DsI[ܼńDWJ}rdָ4T'c xU2k|-GO娦}DЭ_qh)zVO<<9$RfG,T;9ߧ*(s?7-e`<`/w�(�068~tFOk잍G|bj֍◱-ƭAu?R%z0YdVھm~ .u'ݑTAg@o_c [DZWU@ 1a:+^]U@g67wZelwR4�[◱?Q@w<Kf\n\ /cQ ­݉NMz�@Okl A-L016�@O7 ^ b˜@%fjm8��tǛeBX-1"(cEOkv1%��Ǟg2X/S<5Q?P'n$o@@q՛<ܢWٵt#8"#8"#8"@><k\U25֥lE\I(@.�= NGD+(. wAx.w2  >3,uUw3 %ZLZ"|�5[+CWeQv `m&qwOra a[>i�g�0i..3_̌vɪ]<�z_a&-~D�l> `a=) w2{`]`(3\˅Mvfs~qm (7< iJH2p=G]}-~_P.q7h;NA�Ī~P&fWsw~Q vވj'~Q"/ZwT&_ulΌVHF`Ӱj3|C@        L2xAS����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/dctheme/128x128/actions/go-up.png������������������������������������������0000644�0001750�0000144�00000016152�15104114162�022016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���sBIT|d��� pHYs��'_��'_j���tEXtSoftware�www.inkscape.org<��� tEXtTitle�Go Up.C���tEXtAuthor�Jakub Steiner/���!tEXtSource�http://jimmac.musichall.czif^���XtEXtCopyright�CC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/��IDATx{p}?]H<IHHHJ@ITtM[xvNŧ(:uWWK.v|Ϗ8eٱY�%:z$x.v陝],vAj1=3=^= ******⦅ʁ+x+{,uSNhB@^2W}_UXJt?SG!�bNlĿ{ue2W�ϰOĽx+h ӄQS?�[77d2�{6XVW�r]x`-S4ֵкg_G)p_GSn7=�+ڕ԰敜p@D^lYoz qSGD�<~ 6mp[�ڰ3\tqxSW#M{6q'_MZWmz2}K֞w};nק%{?-Miz6#c~�3|9ƒ#Lڼͭ;9 es^![/ d~;a!k1B1V6@$Ɩ|4Rض>;eJ�ǰn 7�Z7 &1@gdꢑ+F&/Ro~XMm[9y 2=]Vv|ME |?oK4�pb'# +XU5%h[;~"}N�O'> )@M-+8nIN)#$4~[M4XBss#;!"~2g-*n <KCc6�M \"kg<vĭk[!a`@\#8-Ϸ\,{ny1{=�L'cPa f)N޲K,na<5•� "M_3eM{>O=p"@&L"x$k6mC6nѳnzZe[]M_yH-~DMC9`m)ĊP:<7W -("\ˊ䈓ĒoܥNzߧni`b_mkn}DA81|3D{#43 j+h_O"VNӝ=;:@Ų$@S�CO԰}3#)xsnइ5 o7QJ!`GSo ˎ�]O?UY;ٰj3�W'/֥=A#~2ʺM\{ M[׳&^8 |^{`ѿ"aYޣ5�>Qvv`2uW~HVeܣf>EJjd CglIJi=*ap <ֹ?쵥y Ų!?!v`&?$5! ml+lم%1oWG�4(Ŷ{쯟;eAǨK�r;{xd'D, h�ɗ ML0e;�18rqnɊuփ7νϢX$=@ȽO`ǹ̳[< }Mxҋ�Ĭ8USc6k'�ďh\'?ˊ&�΍Iw4FsA<V]6 of;;>oKP>M�'#[�2ϻ_ k4Q)`1`4ښzZ׷s[RᡎycWNJF`^xF> {�H]blHAE2h%.[7& '=|c_E{@%BE)IG{�2Sv)g̉�(lep4<VÚ08<�M߾7A�+Ŋh]a@U7^$*ҽ3g,.�;ͭv&{=KvC@eV>5�6mᱮO!(;C'~ յ!^9}p?ulAQQ螈8o4=I"^ _ru2G\Kβ=䤇JxyP11@ӉO @]MO<ZVE?˙)fh7_[P }lp�jh%Km οE6dogwl~TϫTt'7{[:X* M2G ah,kVZw!%%xd%C `,j8'x.�3q2 aa8]mq �IQXᧇNzC xd%EY  }ǃ<p޸S 2=_[i �l6eYjP<v/16VJ-bſl~�(8ueSh_�mo+b/�;xa[,Xe#@]S�lࣿ,'[:s5FǗDB<BNzxׇذKH7Ŀweπ|<h_ pmLa3ͳa WzK%nB#е(` `meq3"[ڷsv$Tkebba s4v XX?8E6lקy]Fh)LX D)۝=6..+Hg~-륇tutŮ?\8�=OVmw053;C?#kgs"&s.RǯI%f @ gV6TsNzw;;Ձ>uj!vX2,,e#t dS5"t]\MMW`q8B\-<~߈6N&f\k!{!q Ʀ&:%"z߿؛^#�QG*�︛}Z;ýL5r}O+mj>)s+(L_\Z cߍ Rd ʠ=G"%Bdzhyazć㌗ ߙ�7l_|xW_etj3a;0:NDkA|B,-}gA)2jD'u!Zf>Oشzt3cS\$bݿp/3 {c L?*C|?odƻFG@aֳr,FpC|qeAQiR4qkhwP V#e'ucbrF s;E%@ӱA H"KittN rfu0>GnQR4|kRxn89-uqOGFkP^[0/=\߸K,nmفS�:SV]a,zJ܅wK>y(>l_]G\x ~=k`D hP`=lIf$әqf)|i&C>n!g} {L6ݱ>K(H,  ~ ~;8/Y= clfn/AC2V«@9uoG dji{SC D :ܳkX}b6�=DV}�#2p鱐@j=$^% 9ĽN0!an~=hkTnz䧇1#=ߛ\Z)(-au$ض}|'ęrx/>5Lxh$ǝ蝀yLD<`y1M>N:7t3#~�/&h DNyY;"=,vd@I н7�XzO<%j( E_VrC~}^ܱAg qQLe3J/\g�dpo*Gk. rufz(-`XwڥJlb3WJ= P?EV4G5nd]F㇇{ ˲}ݢ 2<qFᝣMR6bw[UJ@)2*ɍe'haZRWx wIJi;УVPs!&3t"uog%�]OG,x jV ~rrS3̔|K_a,}1iGh{1xf ;KobzhXbqkmxT: {1-@њ]=R_y-Z%k;+OxOVl(׷+G u1"KKIʫpwo^ubqdz1'wozݝ s|{}_hN( ן-/W�CĘ쥂8Np-y [Zov ZZK{A: ԑgAk›o./LjO_J2{`f?j~Hg] -.mR@o "`("m99Pw%03]R7FMZ2Mg6F[`)"j V;mw#  Jˍ3W|G'T]ɠ>(I7vRDߟg{Kۂ so*v? ^Z;=麅 LgƼc3?ۯaP<7Iށ~@T9}%Fž:LtiSDS"l_ʨ ԲSԋjK&@`ح4/"N̎6L! /{NTo9 �΀0\ \K]brfsayQM`H8SSp@(d tL@@)�Z�gg|5://h7_A"L@�yÂNr=597}0f8qO ר@T$>V$op"( 8B3 TYg Bе*�&I#WGȪtP#ݲ JɛrWr<$Xxx�g0+|{njN !r ^8"F @@'` ɋ `|0`J谹~ Kr2e'd[1|֦, BiKj勊'R43v27Y]A(M _ {sN4]1a,P&_`z/. qw$Py<&�@23#A9>lXJ C)O(ba$6a9~'0 Xo !(!Fb+=p%FFٽR.'Ty{(4D-Ƈbp) |sx?&Dćʶ�I[X]301_2]iòAfr&�暀+g"X uN#'Kh$<T>H"$pj\]P9s)K̑*joHۍ^F$.<觅;ˊ;+qcrM2f 4*ja^8Q;*S>ۍK lu?_r,5L(. #)[δ_1{`^wc.2$IALYRB,�;k5Ѳwooi *D#^ZVsTF[NdK3J�sѰX'h+O9h-6T {8ZWɌ;5ei/`BgQ,-$B%E PHȳ ߯Snv x__Zo '垯 oQ0 S&AVGi)0 lKJR ,Ĺ P6pQ+VדS=1qLSy"(b\l �Qnu2 sޣq|z[nf EⅬk!(ls`kPBHA) & ZWpMxK:3w y.-9V@3$CM8gԴ3 >2JmΛ !@H>gvbD$ػwt'X_�9kEi22܅̛/v;/.<*~ %:M~&vk7~?";BЪv^X(]8?Qx`Bo$X IE%'BPF5\.gO_-Y휱bnlΟQ{(xo冝TEP+9[`W(KZX RrE> V.TWLۂ G8|Ma\,Mm |1J!+ޟ  XTP &Laf{Xp)`m1)6yQ}!S_ E>51ŚB/Z> %\ }6_/DŐ,ϗFJ$|.VQOm~@oq%(,,˭qs1QMa#Bq$̬_Mχr g\k! QqeC% >m\E<"P PF1YhφJ`******2C砦����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/cursors/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015746� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/cursors/ArrowMove.cur������������������������������������������������������0000644�0001750�0000144�00000004276�15104114162�020413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@��������������������������������r����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�>� ?�?�������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/cursors/ArrowLink.cur������������������������������������������������������0000644�0001750�0000144�00000004276�15104114162�020402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@�������������������������������]���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????�?�?�?�?~?>?�? >�?�<�?�������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pixmaps/cursors/ArrowCopy.cur������������������������������������������������������0000644�0001750�0000144�00000004276�15104114162�020417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������(��� ���@����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~�>� ?�?�������?��?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/pinyin.tbl�������������������������������������������������������������������������0000644�0001750�0000144�00000121514�15104114162�014602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D+�������� ��� ������*������������ ��� ����� ��� �� � ��g�� �������� � � ���Fe!��� � ��-�������,0�����cc��� ������ ��������� ������������ � �����������'��������� ��� � �� � ��������� ������ ��������Q� �� �� ����� ���� �� �� ������� ���� � ����� ��� ��#�� � ������ ��������������'�� ���C��� � ����*���� � �&����������������� �� ��� ����*�d����h�C���CC��� ���������������� ���Qc��GE���3� ������S��������C������������������ ���� ������ � �� ������ ������� �� ��� �� ��� ����� � �� ��������C��� ���*�C� ���� ��� ����� � �d������������� �� ��� ��� ���*������ ���3q�����C���� � � �� ���� ��� ��cR����������� ��C �� ��������� �� �C������� ���*�� � �� ��� ��� �� ������ ��� ���������*��T� � ��������������� ������8���#�� �������� � ����c�C������ � ����g�S����� ���G ����� ���**�����2������ ��������c ��#C����C��Q�� ��������� ��� � � � ��������� ����� ��� ��C� �����* ����*� � �T ������ � �� �*������� ��c�� �� � ��� ���������� �. �� ������ � � � ��$������*# ��� ��� � ����� �������������� �� ���� ������ �� ��� ��� � ������� �3�� �� � ������* ��C��� �� �� ��� ���� ���C ���� � �� ��� ����� � ��� ��� �� �� � � ��� � ������� �� �� ��� ��� �� � �� ������ � ��� ��� ���� �� ����� � � ���� ����� ������������� �� ������ ��� ������� ������� � ����� ����� � �� � ��������� � ���� � � ���� ����� � �����c� � ���� �� �� �� ����� � ��c�� �� ���������� ��,3D � ��� ��� ��j���� ��D ����T � ���� �C�� ���� � �� ��C� � ��� � �� ���� � �� ����� �� � � � ������ ����� � � � � � � ���� � � � ��� � ��� �� ��� � �� �� �� � � � ���� ����7� � � ��� ��*C���*� � ��� ��� � ������ ���������������� �4������� ������c� ��� � � � �������C ����� ���g � ���� �*��/� ����/�����C�����������C��L ���C�l�g���+ �� ������ ��!�� ���� �� �� �� �� � �����a�7�� �� �����������Sc �� ��������c��� � ��� �*���� ��, �����Q���� ���H�cc�c!��� �����G���l������ �� �7���� ��G �� �� �S�� �������8���� �� ���� �8 ������ ���� �� ����� �� ���8 �� ������G�����h�����7��� ��D����� � ��������� ������ ��� ��������� ���� � ��������Q�CC�-����� �$+J����������� ������ ��g�� ������������� �� � ��� ��g1��h� �h������ ����������������� �%���(���� ���� �� ���� ���� ���� ��� ��� �� � �������3�����������*��� ������:�%���� ������� � ���� �� ����*����� ���J��� �������� ����d ����T���d������7C���%��� ���� ��1������� ���*�� �� ����� �� ������� � ���D���N����� ������(�� � �C����D.� ���c��Lc ��C� ������ ��� � � ����a������!� ��� ����� ������ � ������������������������� �S� ������ �� �g�c� ���� ��G ��������� � �� �������� � ��� ��C� �� ��C ����� ������c���C��� ����� ����� ����� �����D�� ��(������*��� �����������������]����C � ��������� �����( ��� � ��� �� � � � ����������� ������ �� ������C ��� �� ������ �N� ������������� ������� �� ��������� ����� ���r �������������� �*������* ��������� ���( � ������� � �*��Y��������������� ��1� � � ������� �K���� �� �� � � � ��  �� ������� ������������j��� �� � ������ ������ � � � ���� �� �� ��� �������������������� ��������% ����� �������������������*� � � � � ���*� � �������� ������%*��Q� � �� �c������ ������� �D�� � � �� �� ��*��%��� ���� ��������� ������� � �Nd� ��������C ������� � ����j�� ��� ����  � ����� ���� ������� ���������������� ����� ��� �c��� � ��� � �T�� �� �� ���D� ���� ��*�� ������� ������c����� ���C������������ �!� �� ���� ���� � ������� �������� � � � ����� � �� � ����� ��������������+���� ���� �� ����D'� ������ �������� ���7���������� � ���������G7��������� �G�� ��G�� ���� �*�� ��* ��� �S�� ���������b����R��� � ��� ����� ������� �� ������ �������� ���& ��H���� �h�� �� ��*����������7����������������Y� � ���������� �� �� ������� � �����C ������ �� ���� � �� � ����� ���� h� � ��%����jR������ ��� � ���� �c� ���� ���������n ������������������ �� ��S����� ���� � �� ��� ������������ ���� �� �*��� ����� � � �h�� � ����������$���C ������ ��N����� �� ���� �� �!�� �� ����� � ��������� ���4���������� � ��! �� �q ����j� �8 ������ ���������� ��-�� ��� ��G� �T��� � ������� �����*� ��� � ����������� ����� � ������ ������� ���������� �� �����N���#��� ��� ����� �� ��� � �N ���( � � ��S �� � � � ��M�������� ���� �����N� �� �������.�� ��������� ����������������� �� ��������������� ����������*����b���G���� � � ���� �� �� � ���� ����� ������ ��T�� ��� ������ �S����� �� � ������������� ���������� �**�7��S��� ���� ����� ��� ��� ���� �� ������� �� ���������� �� �7n ����� � ���� ����� �������� �e ���S� � ��� � �� � � � �S��T���� �%��'���������������� �E ��������� ����� ������ �� ���� ��*j��� � ����� ����� ��� ������� �� �������b ���� ������ �����S � � ����� ��*� � ����8������ ��������� ����7 � � �8� ���� �� � �� � � �C����� � � � ������������ ���j�C�������$������d����K �� �� � ���� ���� �j������� ���� ������2 �a ���+��������� ������ � � ������ ��CC����C������ ��C�� �� �� � � �*���*G� �� �S�������8 �� �������� � ����� � � � ��(� ��� ������� ������� ���h��� ��� ���� ���������� ������� �� ���� ������������������������ ������ ����� �����������������j����q ��� ����� ������������� � ����q � ���� ��� �����C��� ���� ��� �� �� ���� ��������� �������� ������� �� ��� ������ ������������������ � ������ �� ��� �������� ������ ��] � � ����� � �*� � �� � ������ ������� ��q� � � � � ����� �������� ������ �����*��������������������� �����J��� ����� ��� �*���8 ��� �*�*����� ������ � ���g*� �g� � � ��� � �������������������������������B4 ������� ������ ������� ���C�� ���� ������ ����� ��� � � �����@����������C��� �� � ���*���� ���� �������1��� � �������� ��� ����S �3��q���j������� �� �������� ���� �����j������T�*� ��#����� ������������������������ ��������� � � ��� �4��� ��� ��h����� ���� ��������� �������� ������� ���� ���*� ���34j�� ���H�������� ������ ���� � ����� ��������� ������� � � ������ �� �� �������� ��7 � � �8��*������������r� ��� ������������������������������������ ��� ��hEd��� �� �����N��c� ���� � ��������� �� ���� ������� ����� �c�������� ����� � ������� ������ ���� �� � ���*� ���� ����� ��� � ����� �c����������� ��� �� ���C8��������� ����� � ����� � � ��� ������������ ��� ����� �c ���� �� �� �� � �� �� ������ � ��* �  �����#��� � ��� � ��h� � ����� � ��� �� �� �GGG��� ����� �� ������� ��� � �� � � ������� � �� �� ���������3� �� ���� ������������� �����������g7��#R' ������ � �������� ����X������� ����G�� ���d���������� �S��������� � �� �����������������3��� � � ����� ��*����� �� ����� ���� ����� ���Q��D� � � � ��� ������g� �������C� �#�c���������g������� � ��N� �� �d� � � �� ��W� �� �� ��������������+ �� � ������ ��j� �*� �cR� ����� ����J��j��Y� �� ��� �������� � � ��� ��� ���� �����C����� ���������� ������� ��� �� ��.3D ����� �� ����� ��� ��� � ����G�d �c������ �K* ��� ����c�� ��������(������ ��+� � � �� � � �� �����d��*������� ����� ��� �����C������N��e����  ������� � �%����J���� ��hN���������������� ���������c� ������#�� ���� � � �������N �*���!�� �� ��m�C � �Lc+� ���� � �� ��� ������������������ ��� � ��d��� �� ����C��j����� � ����1W ��� �� ������ �����*� �� ���*f��� ��� �� � ����� �� ������� �����J � � �� ���� � ��T�� �cl��� �� � ��� � ���C� � � ��c���� � � ��C ��l�� � � � �����*���� ���������� � ��h�� �c��� � �� �������� �� �����$��� �*�*���� � �� ��A�A����� �/��� �� ��$ ���������� �� ���� �� ���� � ��� ��� ���� ��Y������������* ������C�7��,����� � �� ���� � ����� �� ���������� ��� � � ���� �������� ���4���� ���� � �T������� � �����G�� ������������� ��������� ��� �� ���������$ ���������� �� ������� �  � �� �������������� ��� ���c�������������� ������$ ������� � ������������ � ���d��� ��������� � � ������ �� � � ���� � �������� ��� �� ���� ����� ������������ �� ������ ��� �� ������ ��� �� � ����������������� �CC��#�h���������� �f������� � �J ���C�*��� � � � � ���� ���SS�������� �' � ���C�������7�������� �����bT�� ������,k���� � ��� ��� �� � ����� ��������d������� �7 �� � ������������D��� ��� ����C������� � � ������N�� ��cR���� � �G� �8������$ �� ��������� ������������G��N����D�C�� ��� ��D ���� ��S���f���� ��� � �����S���� �� ���, �����C ���� �cg ��� ���������J������ � �� �����Y��� �� ������ ���� �4� ������� � ����-����� � ���������� �����C�4 � ������ �� � ���� �3 ���� �� ������!��������� ���� �� �� �h���� �� �,N���� ���h����� � �������� � � �T � ��� �c� ������D������ � �����G�������������*��r� ���f � �S���������� �� ��C � ��C �+�C% � ������������� ��������� ������������������ ��H�S���� ����C������� ���� � � �����J � � ��h� � ����� �c8����$ �*��d��� � � � ����� �,��������� �7�� � ������� ��C�� � ��� � �������� �� �� ����� ���������� �������� ����g������D� ��G�#�� ��������� �j��� ����G ����������C��� ������� ���� ��C, ��C�������� � � � � ��� �������� � ��������� �� �������E�Y������ ���������� ���� � �����J� ���� � ��qb � �� �������C��2��� � ���������� �� � � �����q �� ���������� ������ ���� ����� � � ��S ������� � �� ��� ����� �����j�N��� �D�� � ������ ���� � �� � �� � ��� �����,��� � ����� �� ��# ����� � � ��� � ��j������C � �������� �� � �C � ��� � �� � ���� ��������(���� �� ���� � � ����*���� � � � ������������7�*�����8������������������ ��C�������� �J� �g��� �� �� ����������� �����*� ��4S��� �������� ���� �h���� � ��� � ������q��++8������ ��������� � � �� ���������� ���� � ��� ������ � ������� ������ �����h ���l ����� ���� � ���S� � � ����������2�������������� ����� �������C���� ���GE���� ������Y����� �1�����77���� ���� �J�� ��� � �� ���& ������� �������������7����D��� �� � �]����������� � ���� � ����� �� ����L#���������� �* ���$ ������� ������ ����C�h��� ������ ��� �� �� ��� �����l �� ��� ��P ���������C8 �� �����q���� �� � � �!�� � �� �� ����8��� ��* ��������� ������ �� � �* � �������h � ����� � ���� �� ��$�������# �� �� ���� ����� �� � � � �n�� �� ���� ���N�#�����4 ��� ��� ����� � � ������� �����������7����� �� �����*� ������( ��D������� �� ��� ��������8�� �� � � � ������n���� ����*� ����������� ����� ���� �m���������� �������������������� � � ����( �� �������� � ��� ������ �� �� � �������� ��������� ��* ��� ������� ���C��� �� �h� �� ������� �'���� �� ��� ��� ��� ���� � �� ����������Q������������������ ��������8� �������� ����Gl��� ��� � � ���������� � ���� �� ������� ���� ����� � � � � ��c ���� ��� ���T���� �� � � ����� �� � �����C��h ��c ��� �C������C �� ����j �� ��� ������ ������ ��� ��C�����8h��T���������� ����� ��� � ���������� ����� ����� � ��� �m���S�� �c� �]��h� ������ ����� ��� �� ��*�j������� �� ��� ���� � ��� ���C�������* � a�������� ����� � � � ��� ������������ � � ������� ����� �C������l ���� �� �� � � �J�� �� ����� � �����J�n � ������� ������� �� � ���� ������ � ��� ������� �������� ��� �Y�����������G��� ��� ���+ �� �' ��������������� ������ �C� �� ������������ ������ ��*��� �������7���� �� �� ���������� � �������� �� ��� �������� �3�������� � ������*�*�� ����� � ��� � ������C� ������8��C���*��������8�� ��� ������ ���� � �����q���� � �� ���Y ��� ����7���� �� �������� �������%�(������8�������� �,8����� �8��C ��� �c�� �������� �H�� � � ���� �������������� ����*� �� ������ � �� � � � ����� ������C,��� �7������� ���� ��3� ��� � ��� � ��� �l � � � � �8�� ����� �� �� �� �� �� � �������������� � ����������� ���������� ����������������� �� � �� �� � ����'�� ��#�� �������� � ����� � �� ��T���� � �*�� � � ���� � � ������� ��� �� ������K������ ������ ��g����� ��� �� ��� �#f��4� �������� ��� ���� �� ��������� ������M � ���j ����� ��� �������� � � �� ���� �����7 ���� ��� ���������� ����*� ���� ���� ���� ����������� � � � �������� ���� ��T8 �qb���� �� ��h��������N � �.G� �� ���� ��� ��-kl ������� �� ����� ����# ���� � ������ �- ��* ������� ������������ ���� ����4J � �� ���� �� � � � � ��������� ����+������������ ���������� � ��������� � ��� ��� � � � ��������c �� �� � �7������� ����� ������ �������� ��� ��� � ������� � ������ ��# ������������� �������� �� �� �� � ���#� ������ ��� ����* � �S��� � ���(�� �������� � �*���� �� � � �� ������� ���h������ ���� ��J���� �� ��� ������ � � � �� �� ����(����H��� �������������������� ������ ������ ������������� ��� ��� �������������������������� �������� ��Y���������� ��� �� �� ������ � ������ ���� ���� ��� � �C����C �� ����3� � �� �������� �� ���� � �� ���� � � �����pf*���D����� � ��� �����. ����� � ����� �������� ��������� � �� �� ������� ���� �7������ �� ���� ����� ������ ��������� �� �!�� ��� ����������C��� �������� � ��� �� ������ ��� ���.�������� ���������� � � ������ � �� � ���������������� � ���� �� ���� ���� �� ����������� � � �������������B�� ��� ���� �� � � ����������������������� ���� ��� ����� ������ � ������ ������������������ ��� �������c� �� � � �� ���� ��C��� � ���� ����������� � ��( ��� �� � � �� ��������� � �#� � ���� �����������  ��� �D�� �� � � ����� �� ��� ��qb����C �� ��� � � ���� ��� �� �� � �S ������ ��� �' ����� ������� � ����� ��� ���� ��g ��j�cR ���( � � ������ � ��� �� ���� ���������� ��  ���� �g ���� ���* ������( � �� � �g �� �� � � �' � �� �� � �GE*�� �������� �� ���� ����d�$ �����+g�� �� ��� � �� ��� ��� � ������������ ��� ��J�������� �� ����� �� ������� � ��� � �� ���g���� �� g����� ������� � ��+� ����� �4��� �� ���� �'���� �� ���� ���� ���C� � �� ��J� ��� ������ ������������ ��� ����A����� ����������� ����� ��h�� ���� ����� � �������!� � � ���� ��� ������ � �� ���� �� ����S�� � � ����� ���(h� � ���(�� �������! � ��� ����� ��� � � �� � ����� � � � ���� ����� ������� ����#j����C�������� ���� ��������� � ����������J���l ��� ��������� � �� ��� �c�������������3T� ������� ���� ������� ��c��� ��� ���T� ���� �����������Y�����C�� � �� ���� ���� ����� � ��������� ��� ���Sh��� ���������� ��X� � �� �������� �������*�� � �� ����� ����� ��� ������� J� ����� �*g�'���� � � �� �T �� ���������� ���� ��T�� ���������J���� � ���� �C�7 ���� ��� ����� ���������K �������� �� ��� ���� � ����� ���8������������ ��� ��K � � ��� ������� �� ������������ �+�� �� � ���� ����J��� �� ��� ������ � � ������� ����� � ��� ����������C� ���������� �� �����c����� ������ ���� ���� �� ���� ��������� �� � ����� ��� ����� � �������*�� � � �� ��4����������C�� ��� ������ �@ ������ �D���S� �� � ��*��� ��� �C�7������ ���� ����������3��� ���q � ��� ����������� ��� ��� ������������������ �������� � � �� ���D���S����� �T������ ���� ��� �C ������� ������ �� ���� � � �� ���S ��� ���������� � � �������� ��� ��� � �������� ��������������� � � ���� � ��� � ����� ���� �� ����� �������� �������������cj������� ������ �� �� ��N��� �����Cc�Y ��� ������� ��� �� � �� � ����� �� �������� ����� ��� ����������� ���� ���� � � ���� � � ���� ����� ����� � � � �� �� ������������������ ��C����� ����� ����� ��� �������� �������� �������������Q ��� ��� � ���8 ���g � �����  � ��� �����G�� �� ����� ���� �� � �C� ������������������ �� ���8 �� ������M� � � ��c���������������C��C ����� � ��������� � ��� ���� �������� � ��� �*�C� � ���������C ����� �� ��'����7�������������� ������� ����7�c ����C���������������� ����� �J� �� � �� � ��� �c ���� �Y����������*����� �*� ��� �������������� � � ��qj�  ��P����3� ��� ������� � ��� ��� � � � ���c �� � � � � � � ���� �� � ������������������������ ������������ ���� � �����G� � � � ���� ����� �� �� ���������� ����� ����� �C� �� � � �� �*7��������� �� �� �����c�� �� ��� � ��� ��� ��� ��qj� �������������������������� �� ������� ������ � �� ��� ������������ ���� � �� ���� ��� � � � �� �� � � �� ��� �8�������1� �8������������8���+�� �������� � ������������������ �� � ��1����� ������ �D��D��� �������������� �(� ����������� � � � ����������N�D ��������#�# � ��� � � ��� �� ��� � � ��� ���������������������� ��� � �����T�� ��� �� � ������������� �� � � �� �� � � ������ �������� �������������� � �� ���'����������������������� ������ ����������� � ��������������������f���C������ ���� ��� ����� �� � � ���� ������C ���������gC��� ���� � � ��� ����� �� ������ � ���� �c� ���*JC8����������� � � �Cc � ���� ��jE��� ��� �!D�C�� ��������� �ND�� ��������������� �� �� ������� ���� ��������� � ���� �������� �� ��C � �� ����� ���� ��g��� ���������� ��� ��� ��� � ��������N7����� � �� ��� ��� ����G� �G� �� ������ �DJ��� �������� ���� � ���� ����������(������������������� �� �� �������� �(� ���� ��� ����� �. ����� ��������� ����4���� �� � � �� � ���� � � ���������� �!�� � ����� � ��������� ����������������� �G �X �������� ����� ������C ������#������ ���������� ��� ��� � ���� ���*�� �N������������ ������� ��r����� ��* � ��C ���� � � ������� � ����C��� ��D�� ���� �� ����C ������� ���������� ���� ����#� �4�� �*���� �2����CE���8 �� ��� ������ ����������������� ��� � �������� � �-b� �� �������� ��3�� �� �� �� � � � ������������ � ��7 ���� �C� � � �� �N �������� ������ ��� ������ ����j�� �QT��� ���!����J � ��������������� �� ������*�CE�����T �� ������������� ���*�� ��������� ��� ��h � ���J����!� �� � ����������r��* �������*���� ��� ���j���Q ����� ���� ���������� � ��� � ���������� �N � ���( � ���� ���J����� ���������� � ���� ���� ��� ��� ������� �����Y���������� �� � �� �� �� �f ��C�� �C��E � ������J �� ���� �* �� � ������� ��������7�� � ���� � ���� ��j������� �� �C����  � ��� �� ��� �����*�� ���C� � ����� �2���� ����� ������ ������l7�� �7� ���� ���� ��7��������� �C� �� � ���� � ���T����� �����S �h�����������7�C���CE���������� �8 � ��� � � �C ���� ��� ���� �� � � �����3 ��������� ����7� �SC� ���� ��T��*� ��� �7��� � �� ��� ������� �  ��� ����� ���� �h � ��� � ��f�� ��� � � � �� � � � � ���� ���� � ���� �� ���������� ����H ������ ������� ������ �����H� ������ �������������� ����Q�7*(����� ��������� ������������� �� � ����'���������3� ������ ��� ������� ���� � � �8�*��� ������ � �� ����� ��� ����%�����S���� � ����� ���������� � ���� � k ��� � ���� ������������������ ������D������� � � ��� �� �� ������N��� ������1��C����� � � ����� !1� ����� �� ������� ���� �����3������ � ���������� �������� ��D���*��C � ���� ������ � �' � ��� � ���� �� ��������*�� ���� ���� � � ��8 ��N�C������ ��d� ���*C�� ���� ��� �S�� ���� � ����� ��� �� � � � � �� ��� ���C � � ����NN' ��������� �� �S�������� �� � ��� ��� ����  ������������������������c ������� �T����� � �� ����(� �� �������� �h��������������� ����C����������# �� ��J �������� �������� � ��� � �� � ���G��� ��� ������� � � � � ��� ��� ������ �c��' ��!�� �1*�� ��������� �8������4��(�C �����7�������� �c����� ��� � � � ��� �������� ����� �J �� ��������� � ��Y������ ��dT� �����d������ � �� ��� �C� ��� ����������� � � ���� �� � � � ���� � �� ��� ������� ����� � ����� ���B �� �� �� � ��D� ��� ��� � � ������ �� �� �� ��� ����D���� ��� ������* ����������� � �������� �� �������� �$������ ����������� ���������������������������h�� �� �� ������ ���$������#�������������#������� ������C �� �������# �� � ���� ���� �� ������� �������� �������� �3�3������ � ����������������� ����� �������� � �C ��������d��������� ������������������� �����C� ��d���� �� ���C������ ������ �8�� � � ��� � ��J � �C��S�� ��# � �C�������� ��� � �� ������S����������� � � �L����������������C�!� �� ���� �� ���� �4����������� ������������� ���� � ���������� �� ��� ���� ������ ������S������������$ � ���� ������������������C �������� �3�������� ������ ������ ���� ������������� ��� �������� � � �� � ���� �� �����'��� ��� �� �� �� �������������������� ������� � �� ������ �������������������� ���� � �� ���� �� ����* ���� �������������������������� �� ����� ��� � �����G�� ��� ������������ ��������� � ������ ��� � ���� ���� ��!����� ��������"�������� ���������� ����������������������� ����� �� ������G�� � ���� ��� ���� �������� ���������"����������������� � �������1��G����C*���� ��� �#���� �����D�� � �*�� ���#��#�CE� ��4������ ��G�� ��������� � ��� �� �����*j��*��� � ��� ��� ��C� �S�� ��� �� ��� ������ � � �c� �����C �� �� ��� �� �*�� �*� �� � � �� ������C�*������������������� �� ��������C� ������� ��� �C�� � ������ � ���D�� ���N�� ������C��C� � � ����*� ��������� ����� ��4� � ��,����� � ���� ������*�C� �* ����������� ��� �� � �� � ���� �� � ���������C'k� ��������� ���#��� �� �������' �� ����� ��������F����$ ������� � �� � ������ ����1�����. ��� ����� ��������� �� ��� �� ��c'������7�N�7��� � ������ ��� ��� ��� ��� ���� �� �� � � � �C'k������ ���� � ������ ������ ��� � ��� ������ ����� �7���N �� ������� � ��8��������������C��������� ���������4� ������� �������� ��� ����C� � �C����W����4�� ���� � ��� �� ����k����� ������������ ���3���������� ���� ��� ���J�� ��� ��� ����� ���������������������������7��� ���d����� ������������d �C� �����7� � ���� ������ ��� ��� � ��������� �F�� ��h���������8�� ������������J� � ���� ��� ���� ���� � � �� ����� ��7��� � �� ����* ����������J� ������ ������ ����� ���� ����� ����JJ������� �� ���������������� �� ��� ��c �� �� � �C�����C �(��C ���������� ��� �D������������C����� � ������� ���� � � �� ��F����W � �!������� �� �����#���� �� ���������� ���/ �� �� �� ����3 � �,!���c� � � ��� �� ��������� �C� �  � �'� ����������� ������ ������� �J�����3������ ���*�# �Q�N� ���������������� ��������� ��� ��������� � � ��c�������� ����� �#j3����b�Ci���������� �1� ������ ��� ��� � ����� � �� �T�� ���� �H� ��� � � � �3������� ���4� � �fb�� �� � ��� �������� �� �������S ���N8����Y � � ��*������� ��C����� 7� �C ����� ��C� �� �� ����� ������� �N ��7 ����� � �� � ��� � ������ �a ��g���������1�C �� �� �������� � � ���� � ������������ �� � ��������W�� �� �C������� ���������� �� �������8 � �� �� ���D �Q����� ���� � �c� �� � �Y4�����#����d������� � ������ ������ �� � �������� ���C���� ��� � � ��� ����� �� ������ ���� ��� ��� ��J� ��� ��� ��� �� ��h�� ���� �� �����������* �� �� ���* ������ ��T������ � ��� � ��� ��q*� ���8��P*����������� ������� �� � ���� � � � �� ��� ���� ��� �� � �� �� � ��*�� ����� ���� �� ��� ��� � ������� ������� ���� ��� ���������� ��� ����������� ������ �� ���� ��1 ��������� � �� ���� ������ ��� �����b������ ��� ��������� ��7 �� � ��� �������� ��� � � ��� �� ���D�� ��1� � ���� ��� ��� ���� � � ���� ������������� � ��� � ������ ��� �� ����� � ��� ��C� �b � �� �� ������ �� ���� ��CC ��� � � �C � ���h ������ � ������  � �����Y��� �������� ��� � � ��� ����� �� ����%����������� �� �d���� �� ������ ��h������� ����������� � � � ������ � � ���� � �� �d�������%� ��� ������h��� ������4k�������g���� ����� �������$ ������ � � �� � � � �d������ �� ��������������������� �� ��C� �4� �����D�E����3�� ����D��� ����������� �������� ������� ��� ������� �� � � �C(�� ������*�� ����� ��� ���� �������C�� �� � ���� � ������ ����� ��� � ���������� � ���S��� � ������������ � ��� �� ���� � �� � ���� ���������� � �� ��������� � � � � �h��� � �!� ������������� ��* �$ ���� � � � �����G��*������ ������� �������� �������g� ����������� �"��q  ���S� � � �k�����h� � � ��� ���������� �� ��� � � ������� � ����*��q�� ����������7��h���������� � ���� ����� ��(�������8�� �������� ��������� �� � �����  ���� ��"� � �� � � �������G��� ������ ��� �C �������+��������� � � � ��W �������1�cj� ���� � ���8�������������� � ��G  ��� � �������� �������� ���� �C������������� �G� ������� ��� �� ��� ���� ���������� ���� ��������3�� ����������*c���c�T3�� ������������ �H������ ����������� �����h�� �����������(����J����C����� � ������ �� ���� �� ������ ���������� �� ��� ����� ��������� ���������H�� �������� �����C ����� �� �� � ����� ���������� �����7���� ��������S� ������ ����j����� ������ ��� ��� � ��������� � ���������� ���������� � ��� � ����� ����a ��D�� �� �� �*���������������������� �������*�� ������������C� �� �� �!����������� ��� ���� ��� �� ���T���L ��� �� ��� � ������� ����� ����� ��� �� ���� ����� ��* ������� ���� �*� ���� ������������ ���C�� ��*� ������ ���� ��B� �� � � ������� � ���� �� �� � ���� �� ����������M��E���+ ������ ��������� ��� � �� ���� �� � ��� ����� ��� �N�������� ������� ���� �*�� ���R ���� �(T�� ������ ��������� ����� ��%��� � ���7� ��� �S����������� �������C�*������X���� ����� ���������� ��41�� � ���� �� ���� �� ���������������� ��� � �� ���������Q��� ������ ���� � � �� � � �� � ��J��������c����� �� �����������$� ���� ������G�������*���� � ���������������� �� �� � ��� �c ���� � �� �T�� ������� �������G �� ��������� ���S��3 �� ����� �8�� � � � ���� �� ���� ��� ������ ��������� � ������ � � ������ � � � ������ � ��Q ���� ������ �c��������������� ���������* ���� � ������ ���� �S��� � ����D ������ ���C�����*����GG������������G� ��� ���������� �!����������������%�� � ��84� �� �����D������� � � ��H��� ��� � ��� � �� ���� ��� ��� ����!������ �� � ����� ��� �� ��� ����� ���� �*���� ����� ��!����� � �������� � ���C� ���#������������ � �*������� � �� ���� ����� ����8���� �� ������ ���� �������� � ��� ���� ���� ������cj ��� ��������� �� ���� �� �� ����� � � � �� ����#���� ���� ������������D� ���� � ������� �� ������������� ����� � �� ����� � � � �� ����� ��� � � � � � � ��� ��� ���C*� � � �� ��* ��� � �* � ��8 � � ��� � �� ��� � ���� � ����� ��� �� ����� � � � ��������� ������� ��� ���������� � �*���D���� ���� ������D����� �D�� ����� � ����C��� ������C���D����������#��������������������  �� ������ �����h�������*� �� � �* ����������C�� �� � ����+� ����7���CC���/������� �%���� � ������������ �� �� �� �� �GE��GE��� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014541� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/���������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015330� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libssh2/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016676� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libssh2/build.bat����������������������������������������������������0000644�0001750�0000144�00000000176�15104114162�020471� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rem Build libssh2 library mkdir release copy NUL release\version.inc make dll WITH_WINCNG=1 LDFLAGS+=" -static -shared" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libssh2/Makefile.mbedTLS���������������������������������������������0000644�0001750�0000144�00000020222�15104114162�021625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################### # ## Makefile for building libssh2 (Win32 version - gnu make) ## Use: make -f GNUmakefile [help|all|clean|dev|devclean|dist|distclean|dll|objclean] ## ## Hacked by: Guenter Knauf, Alexander Koblov # ######################################################################### # Edit the path below to point to the base of your Zlib sources. ifndef ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.11 endif # Edit the path below to point to the base of your Libgcrypt package. ifndef MBEDTLS_PATH MBEDTLS_PATH = ../../mbedtls-2.16.1 endif # Edit the path below to point to your Distribution folder. ifndef DISTDIR DISTDIR = libssh2-$(LIBSSH2_VERSION_STR)-bin-$(ARCH) endif DISTARC = $(DISTDIR).zip # Edit the path below to point to your Development folder. ifndef DEVLDIR DEVLDIR = libssh2-$(LIBSSH2_VERSION_STR)-dev-$(ARCH) endif DEVLARC = $(DEVLDIR).zip # Project root PROOT = .. # Edit the vars below to change target settings. TARGET = libssh2 WWWURL = https://www.libssh2.org/ DESCR = libssh2 $(LIBSSH2_VERSION_STR) #STACK = 64000 # must be equal to DEBUG or NDEBUG ifndef DB DB = NDEBUG # DB = DEBUG endif # Optimization: -O<n> or debugging: -g ifeq ($(DB),NDEBUG) OPT = -O2 OBJDIR = release else OPT = -g OPT += -DLIBSSH2DEBUG OBJDIR = debug endif # Here you can find a native Win32 binary of the original awk: # http://www.gknw.net/development/prgtools/awk-20100523.zip AWK = awk ZIP = zip -qzr9 # Platform-dependent helper tool macros ifeq ($(findstring /sh,$(SHELL)),/sh) DEL = rm -f $1 RMDIR = rm -fr $1 MKDIR = mkdir -p $1 COPY = -cp -afv $1 $2 #COPYR = -cp -afr $1/* $2 COPYR = -rsync -aC $1/* $2 TOUCH = touch $1 CAT = cat ECHONL = echo "" DL = ' else ifeq "$(OS)" "Windows_NT" DEL = -del 2>NUL /q /f $(subst /,\,$1) RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) else DEL = -del 2>NUL $(subst /,\,$1) RMDIR = -deltree 2>NUL /y $(subst /,\,$1) endif MKDIR = -md 2>NUL $(subst /,\,$1) COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, CAT = type ECHONL = $(ComSpec) /c echo. endif # The following line defines your compiler. CC = $(CROSSPREFIX)gcc # Set environment var ARCH to your architecture to override autodetection. ifndef ARCH ifeq ($(findstring gcc,$(CC)),gcc) ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) ARCH = w64 else ARCH = w32 endif else ARCH = w32 endif endif # Include the version info retrieved from libssh2.h #-include $(OBJDIR)/version.inc # Global compiler flags CFLAGS = $(OPT) -D$(DB) -DLIBSSH2_WIN32 # -DHAVE_CONFIG_H LD = $(CROSSPREFIX)gcc RC = $(CROSSPREFIX)windres LDFLAGS += -s -shared -Wl,--output-def,$(TARGET).def,--out-implib,$(TARGET)dll.a -static-libgcc AR = $(CROSSPREFIX)ar ARFLAGS = -cq LIBEXT = a RANLIB = $(CROSSPREFIX)ranlib LDLIBS += -lws2_32 RCFLAGS = -I. -I $(PROOT)/include -O coff CFLAGS += -fno-strict-aliasing -DLIBSSH2_MBEDTLS CFLAGS += -Wall # -pedantic ifeq ($(ARCH),w64) CFLAGS += -m64 -D_AMD64_ LDFLAGS += -m64 RCFLAGS += -F pe-x86-64 else CFLAGS += -m32 LDFLAGS += -m32 RCFLAGS += -F pe-i386 endif INCLUDES = -I$(PROOT)/win32 -I$(PROOT)/include ifndef MBEDTLS_INCLUDE ifeq "$(wildcard $(MBEDTLS_PATH)/include)" "$(MBEDTLS_PATH)/include" MBEDTLS_INCLUDE = $(MBEDTLS_PATH)/include endif endif ifneq "$(wildcard $(MBEDTLS_INCLUDE)/mbedtls/platform.h)" "$(MBEDTLS_INCLUDE)/mbedtls/platform.h" $(error Invalid MBEDTLS_PATH: $(MBEDTLS_PATH)) endif INCLUDES += -I"$(MBEDTLS_INCLUDE)" ifndef LIBGCRYPT_LIBPATH ifeq "$(wildcard $(MBEDTLS_PATH)/library)" "$(MBEDTLS_PATH)/library" LIBGCRYPT_LIBPATH = $(MBEDTLS_PATH)/library endif endif LIBGCRYPT_LIBS_STAT = mbedtls mbedcrypto LDLIBS += $(patsubst %,$(LIBGCRYPT_LIBPATH)/lib%.$(LIBEXT), $(LIBGCRYPT_LIBS_STAT)) ifdef WITH_ZLIB CFLAGS += -DLIBSSH2_HAVE_ZLIB INCLUDES += -I$(ZLIB_PATH) ifdef LINK_ZLIB_STATIC LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT) else LDLIBS += $(ZLIB_PATH)/libz.dll.$(LIBEXT) endif endif CFLAGS += $(INCLUDES) vpath %.c $(PROOT)/src # include Makefile.inc to get CSOURCES define include $(PROOT)/Makefile.mbedTLS.inc include $(PROOT)/Makefile.inc OBJECTS := $(patsubst %.c,%.o,$(CSOURCES)) OBJS := $(addprefix $(OBJDIR)/,$(OBJECTS)) OBJL = $(OBJS) $(OBJDIR)/$(TARGET).res all: lib dll dll: prebuild $(TARGET).dll lib: prebuild $(TARGET).$(LIBEXT) prebuild: $(OBJDIR) #$(OBJDIR)/version.inc # libssh2_config.h test: all $(MAKE) -C test -f GNUmakefile $(OBJDIR)/%.o: %.c # @echo Compiling $< $(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/version.inc: $(PROOT)/get_ver.awk $(PROOT)/include/libssh2.h $(OBJDIR) @echo Creating $@ @$(AWK) -f $^ > $@ dist: all $(DISTDIR) $(DISTDIR)/readme.txt @$(call MKDIR, $(DISTDIR)/bin) @$(call COPY, $(PROOT)/AUTHORS, $(DISTDIR)) @$(call COPY, $(PROOT)/COPYING, $(DISTDIR)) @$(call COPY, $(PROOT)/INSTALL, $(DISTDIR)) @$(call COPY, $(PROOT)/README, $(DISTDIR)) @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DISTDIR)) @$(call COPY, $(TARGET).dll, $(DISTDIR)/bin) @echo Creating $(DISTARC) @$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt dev: all $(DEVLDIR) $(DEVLDIR)/readme.txt @$(call MKDIR, $(DEVLDIR)/bin) @$(call MKDIR, $(DEVLDIR)/include) @$(call MKDIR, $(DEVLDIR)/win32) @$(call COPY, $(PROOT)/AUTHORS, $(DEVLDIR)) @$(call COPY, $(PROOT)/COPYING, $(DEVLDIR)) @$(call COPY, $(PROOT)/INSTALL, $(DEVLDIR)) @$(call COPY, $(PROOT)/README, $(DEVLDIR)) @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DEVLDIR)) @$(call COPY, $(TARGET).dll, $(DEVLDIR)/bin) @$(call COPY, $(PROOT)/include/*.h, $(DEVLDIR)/include) @$(call COPY, libssh2_config.h, $(DEVLDIR)/include) @$(call COPY, *.$(LIBEXT), $(DEVLDIR)/win32) @echo Creating $(DEVLARC) @$(ZIP) $(DEVLARC) $(DEVLDIR)/* < $(DEVLDIR)/readme.txt distclean vclean: clean $(call RMDIR, $(DISTDIR)) $(call DEL, $(DISTARC)) devclean: clean $(call RMDIR, $(DEVLDIR)) $(call DEL, $(DEVLARC)) objclean: all $(call RMDIR, $(OBJDIR)) testclean: clean $(MAKE) -C test -f GNUmakefile clean clean: # $(call DEL, libssh2_config.h) $(call DEL, $(TARGET).dll $(TARGET).def $(TARGET).$(LIBEXT) $(TARGET)dll.$(LIBEXT)) $(call RMDIR, $(OBJDIR)) $(OBJDIR): @$(call MKDIR, $@) $(DISTDIR): @$(call MKDIR, $@) $(DEVLDIR): @$(call MKDIR, $@) $(TARGET).$(LIBEXT): $(OBJS) @echo Creating $@ @$(call DEL, $@) @$(AR) $(ARFLAGS) $@ $^ ifdef RANLIB @$(RANLIB) $@ endif $(TARGET).dll $(TARGET)dll.a: $(OBJL) @echo Linking $@ @$(call DEL, $@) @$(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS) $(OBJDIR)/%.res: %.rc @echo Creating $@ @$(RC) $(RCFLAGS) -i $< -o $@ $(DISTDIR)/readme.txt: GNUmakefile @echo Creating $@ @echo $(DL)This is a binary distribution for Win32 platform.$(DL) > $@ @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ @echo $(DL)Please download the complete libssh package for$(DL) >> $@ @echo $(DL)any further documentation:$(DL) >> $@ @echo $(DL)$(WWWURL)$(DL) >> $@ $(DEVLDIR)/readme.txt: GNUmakefile @echo Creating $@ @echo $(DL)This is a development distribution for Win32 platform.$(DL) > $@ @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ @echo $(DL)Please download the complete libssh package for$(DL) >> $@ @echo $(DL)any further documentation:$(DL) >> $@ @echo $(DL)$(WWWURL)$(DL) >> $@ help: $(OBJDIR)/version.inc @echo $(DL)===========================================================$(DL) @echo $(DL)mbedTLS path = $(MBEDTLS_PATH)$(DL) @echo $(DL)Zlib path = $(ZLIB_PATH)$(DL) @echo $(DL)===========================================================$(DL) @echo $(DL)libssh $(LIBSSH2_VERSION_STR) - available targets are:$(DL) @echo $(DL)$(MAKE) all$(DL) @echo $(DL)$(MAKE) dll$(DL) @echo $(DL)$(MAKE) lib$(DL) @echo $(DL)$(MAKE) clean$(DL) @echo $(DL)$(MAKE) dev$(DL) @echo $(DL)$(MAKE) devclean$(DL) @echo $(DL)$(MAKE) dist$(DL) @echo $(DL)$(MAKE) distclean$(DL) @echo $(DL)$(MAKE) objclean$(DL) @echo $(DL)$(MAKE) test$(DL) @echo $(DL)===========================================================$(DL) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libssh2/Makefile.libgcrypt�������������������������������������������0000644�0001750�0000144�00000020736�15104114162�022344� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################### # ## Makefile for building libssh2 (Win32 version - gnu make) ## Use: make -f GNUmakefile [help|all|clean|dev|devclean|dist|distclean|dll|objclean] ## ## Hacked by: Guenter Knauf, Alexander Koblov # ######################################################################### # Edit the path below to point to the base of your Zlib sources. ifndef ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.8 endif # Edit the path below to point to the base of your Libgcrypt package. ifndef LIBGCRYPT_PATH LIBGCRYPT_PATH = ../../libgcrypt-1.7.8 endif # Edit the path below to point to your Distribution folder. ifndef DISTDIR DISTDIR = libssh2-$(LIBSSH2_VERSION_STR)-bin-$(ARCH) endif DISTARC = $(DISTDIR).zip # Edit the path below to point to your Development folder. ifndef DEVLDIR DEVLDIR = libssh2-$(LIBSSH2_VERSION_STR)-dev-$(ARCH) endif DEVLARC = $(DEVLDIR).zip # Project root PROOT = .. # Edit the vars below to change target settings. TARGET = libssh2 WWWURL = https://www.libssh2.org/ DESCR = libssh2 $(LIBSSH2_VERSION_STR) #STACK = 64000 # must be equal to DEBUG or NDEBUG ifndef DB DB = NDEBUG # DB = DEBUG endif # Optimization: -O<n> or debugging: -g ifeq ($(DB),NDEBUG) OPT = -O2 OBJDIR = release else OPT = -g OPT += -DLIBSSH2DEBUG OBJDIR = debug endif # Here you can find a native Win32 binary of the original awk: # http://www.gknw.net/development/prgtools/awk-20100523.zip AWK = awk ZIP = zip -qzr9 # Platform-dependent helper tool macros ifeq ($(findstring /sh,$(SHELL)),/sh) DEL = rm -f $1 RMDIR = rm -fr $1 MKDIR = mkdir -p $1 COPY = -cp -afv $1 $2 #COPYR = -cp -afr $1/* $2 COPYR = -rsync -aC $1/* $2 TOUCH = touch $1 CAT = cat ECHONL = echo "" DL = ' else ifeq "$(OS)" "Windows_NT" DEL = -del 2>NUL /q /f $(subst /,\,$1) RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) else DEL = -del 2>NUL $(subst /,\,$1) RMDIR = -deltree 2>NUL /y $(subst /,\,$1) endif MKDIR = -md 2>NUL $(subst /,\,$1) COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, CAT = type ECHONL = $(ComSpec) /c echo. endif # The following line defines your compiler. CC = $(CROSSPREFIX)gcc # Set environment var ARCH to your architecture to override autodetection. ifndef ARCH ifeq ($(findstring gcc,$(CC)),gcc) ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) ARCH = w64 else ARCH = w32 endif else ARCH = w32 endif endif # Include the version info retrieved from libssh2.h #-include $(OBJDIR)/version.inc # Global compiler flags CFLAGS = $(OPT) -D$(DB) -DLIBSSH2_WIN32 # -DHAVE_CONFIG_H LD = $(CROSSPREFIX)gcc RC = $(CROSSPREFIX)windres LDFLAGS += -s -shared -Wl,--output-def,$(TARGET).def,--out-implib,$(TARGET)dll.a -static-libgcc AR = $(CROSSPREFIX)ar ARFLAGS = -cq LIBEXT = a RANLIB = $(CROSSPREFIX)ranlib LDLIBS += -lws2_32 RCFLAGS = -I. -I $(PROOT)/include -O coff CFLAGS += -fno-strict-aliasing -DLIBSSH2_LIBGCRYPT CFLAGS += -Wall # -pedantic ifeq ($(ARCH),w64) CFLAGS += -m64 -D_AMD64_ LDFLAGS += -m64 RCFLAGS += -F pe-x86-64 else CFLAGS += -m32 LDFLAGS += -m32 RCFLAGS += -F pe-i386 endif INCLUDES = -I$(PROOT)/win32 -I$(PROOT)/include ifndef LIBGCRYPT_INCLUDE ifeq "$(wildcard $(LIBGCRYPT_PATH)/include)" "$(LIBGCRYPT_PATH)/include" LIBGCRYPT_INCLUDE = $(LIBGCRYPT_PATH)/include endif endif ifneq "$(wildcard $(LIBGCRYPT_INCLUDE)/gcrypt.h)" "$(LIBGCRYPT_INCLUDE)/gcrypt.h" $(error Invalid LIBGCRYPT_PATH: $(LIBGCRYPT_PATH)) endif ifneq "$(wildcard $(LIBGCRYPT_INCLUDE)/gpg-error.h)" "$(LIBGCRYPT_INCLUDE)/gpg-error.h" $(error Invalid LIBGCRYPT_PATH: $(LIBGCRYPT_PATH)) endif INCLUDES += -I"$(LIBGCRYPT_INCLUDE)" ifndef LIBGCRYPT_LIBPATH LIBGCRYPT_LIBS_STAT = gcrypt gpg-error ifeq "$(wildcard $(LIBGCRYPT_PATH)/lib)" "$(LIBGCRYPT_PATH)/lib" LIBGCRYPT_LIBPATH = $(LIBGCRYPT_PATH)/lib LIBGCRYPT_LIBS_DYN = gcrypt.dll gpg-error.dll endif endif ifdef LINK_LIBGCRYPT_STATIC LDLIBS += $(patsubst %,$(LIBGCRYPT_LIBPATH)/lib%.$(LIBEXT), $(LIBGCRYPT_LIBS_STAT)) else LDLIBS += $(patsubst %,$(LIBGCRYPT_LIBPATH)/lib%.$(LIBEXT), $(LIBGCRYPT_LIBS_DYN)) endif ifdef WITH_ZLIB CFLAGS += -DLIBSSH2_HAVE_ZLIB INCLUDES += -I$(ZLIB_PATH) ifdef LINK_ZLIB_STATIC LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT) else LDLIBS += $(ZLIB_PATH)/libz.dll.$(LIBEXT) endif endif CFLAGS += $(INCLUDES) vpath %.c $(PROOT)/src # include Makefile.inc to get CSOURCES define include $(PROOT)/Makefile.libgcrypt.inc include $(PROOT)/Makefile.inc OBJECTS := $(patsubst %.c,%.o,$(CSOURCES)) OBJS := $(addprefix $(OBJDIR)/,$(OBJECTS)) OBJL = $(OBJS) $(OBJDIR)/$(TARGET).res all: lib dll dll: prebuild $(TARGET).dll lib: prebuild $(TARGET).$(LIBEXT) prebuild: $(OBJDIR) #$(OBJDIR)/version.inc # libssh2_config.h test: all $(MAKE) -C test -f GNUmakefile $(OBJDIR)/%.o: %.c # @echo Compiling $< $(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/version.inc: $(PROOT)/get_ver.awk $(PROOT)/include/libssh2.h $(OBJDIR) @echo Creating $@ @$(AWK) -f $^ > $@ dist: all $(DISTDIR) $(DISTDIR)/readme.txt @$(call MKDIR, $(DISTDIR)/bin) @$(call COPY, $(PROOT)/AUTHORS, $(DISTDIR)) @$(call COPY, $(PROOT)/COPYING, $(DISTDIR)) @$(call COPY, $(PROOT)/INSTALL, $(DISTDIR)) @$(call COPY, $(PROOT)/README, $(DISTDIR)) @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DISTDIR)) @$(call COPY, $(TARGET).dll, $(DISTDIR)/bin) @echo Creating $(DISTARC) @$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt dev: all $(DEVLDIR) $(DEVLDIR)/readme.txt @$(call MKDIR, $(DEVLDIR)/bin) @$(call MKDIR, $(DEVLDIR)/include) @$(call MKDIR, $(DEVLDIR)/win32) @$(call COPY, $(PROOT)/AUTHORS, $(DEVLDIR)) @$(call COPY, $(PROOT)/COPYING, $(DEVLDIR)) @$(call COPY, $(PROOT)/INSTALL, $(DEVLDIR)) @$(call COPY, $(PROOT)/README, $(DEVLDIR)) @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DEVLDIR)) @$(call COPY, $(TARGET).dll, $(DEVLDIR)/bin) @$(call COPY, $(PROOT)/include/*.h, $(DEVLDIR)/include) @$(call COPY, libssh2_config.h, $(DEVLDIR)/include) @$(call COPY, *.$(LIBEXT), $(DEVLDIR)/win32) @echo Creating $(DEVLARC) @$(ZIP) $(DEVLARC) $(DEVLDIR)/* < $(DEVLDIR)/readme.txt distclean vclean: clean $(call RMDIR, $(DISTDIR)) $(call DEL, $(DISTARC)) devclean: clean $(call RMDIR, $(DEVLDIR)) $(call DEL, $(DEVLARC)) objclean: all $(call RMDIR, $(OBJDIR)) testclean: clean $(MAKE) -C test -f GNUmakefile clean clean: # $(call DEL, libssh2_config.h) $(call DEL, $(TARGET).dll $(TARGET).def $(TARGET).$(LIBEXT) $(TARGET)dll.$(LIBEXT)) $(call RMDIR, $(OBJDIR)) $(OBJDIR): @$(call MKDIR, $@) $(DISTDIR): @$(call MKDIR, $@) $(DEVLDIR): @$(call MKDIR, $@) $(TARGET).$(LIBEXT): $(OBJS) @echo Creating $@ @$(call DEL, $@) @$(AR) $(ARFLAGS) $@ $^ ifdef RANLIB @$(RANLIB) $@ endif $(TARGET).dll $(TARGET)dll.a: $(OBJL) @echo Linking $@ @$(call DEL, $@) @$(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS) $(OBJDIR)/%.res: %.rc @echo Creating $@ @$(RC) $(RCFLAGS) -i $< -o $@ $(DISTDIR)/readme.txt: GNUmakefile @echo Creating $@ @echo $(DL)This is a binary distribution for Win32 platform.$(DL) > $@ @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ @echo $(DL)Please download the complete libssh package for$(DL) >> $@ @echo $(DL)any further documentation:$(DL) >> $@ @echo $(DL)$(WWWURL)$(DL) >> $@ $(DEVLDIR)/readme.txt: GNUmakefile @echo Creating $@ @echo $(DL)This is a development distribution for Win32 platform.$(DL) > $@ @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ @echo $(DL)Please download the complete libssh package for$(DL) >> $@ @echo $(DL)any further documentation:$(DL) >> $@ @echo $(DL)$(WWWURL)$(DL) >> $@ help: $(OBJDIR)/version.inc @echo $(DL)===========================================================$(DL) @echo $(DL)Libgcrypt path = $(LIBGCRYPT_PATH)$(DL) @echo $(DL)Zlib path = $(ZLIB_PATH)$(DL) @echo $(DL)===========================================================$(DL) @echo $(DL)libssh $(LIBSSH2_VERSION_STR) - available targets are:$(DL) @echo $(DL)$(MAKE) all$(DL) @echo $(DL)$(MAKE) dll$(DL) @echo $(DL)$(MAKE) lib$(DL) @echo $(DL)$(MAKE) clean$(DL) @echo $(DL)$(MAKE) dev$(DL) @echo $(DL)$(MAKE) devclean$(DL) @echo $(DL)$(MAKE) dist$(DL) @echo $(DL)$(MAKE) distclean$(DL) @echo $(DL)$(MAKE) objclean$(DL) @echo $(DL)$(MAKE) test$(DL) @echo $(DL)===========================================================$(DL) ����������������������������������doublecmd-1.1.30/libraries/src/libpcre2/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017032� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libpcre2/build.bat���������������������������������������������������0000644�0001750�0000144�00000000164�15104114162�020622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rem Build libpcre2 library cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON -DPCRE2_NEWLINE=CRLF mingw32-make ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/��������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016514� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/readme.txt����������������������������������������������������0000644�0001750�0000144�00000000133�15104114162�020507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libbzip2 https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz Version 1.0.8 (13/07/2019) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/libbz2.vcxproj������������������������������������������������0000644�0001750�0000144�00000034227�15104114162�021325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Debug|x64"> <Configuration>Debug</Configuration> <Platform>x64</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|x64"> <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <SccProjectName /> <SccLocalPath /> <ProjectGuid>{7DF02769-ED34-4895-8ED7-2604BCC641B7}</ProjectGuid> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v110_xp</PlatformToolset> <UseOfMfc>false</UseOfMfc> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v110_xp</PlatformToolset> <UseOfMfc>false</UseOfMfc> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v110_xp</PlatformToolset> <UseOfMfc>false</UseOfMfc> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v110_xp</PlatformToolset> <UseOfMfc>false</UseOfMfc> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" /> </ImportGroup> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <OutDir>..\..\bin\i386-win32\</OutDir> <IntDir>..\..\bin\i386-win32\</IntDir> <LinkIncremental>false</LinkIncremental> <TargetName>bz2</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <LinkIncremental>false</LinkIncremental> <OutDir>..\..\bin\x86_64-win64\</OutDir> <IntDir>..\..\bin\x86_64-win64\</IntDir> <TargetName>bz2</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <OutDir>..\..\bin\i386-win32\</OutDir> <IntDir>..\..\bin\i386-win32\</IntDir> <LinkIncremental>true</LinkIncremental> <TargetName>bz2</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LinkIncremental>true</LinkIncremental> <OutDir>..\..\bin\x86_64-win64\</OutDir> <IntDir>..\..\bin\x86_64-win64\</IntDir> <TargetName>bz2</TargetName> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <InlineFunctionExpansion>Default</InlineFunctionExpansion> <StringPooling>true</StringPooling> <FunctionLevelLinking>true</FunctionLevelLinking> <Optimization>MaxSpeed</Optimization> <SuppressStartupBanner>true</SuppressStartupBanner> <WarningLevel>Level3</WarningLevel> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AssemblerListingLocation>..\..\bin\i386-win32\</AssemblerListingLocation> <PrecompiledHeaderOutputFile>..\..\bin\i386-win32\libbz2.pch</PrecompiledHeaderOutputFile> <ObjectFileName>..\..\bin\i386-win32\</ObjectFileName> <ProgramDataBaseFileName>..\..\bin\i386-win32\</ProgramDataBaseFileName> </ClCompile> <Midl> <SuppressStartupBanner>true</SuppressStartupBanner> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <TypeLibraryName>..\..\bin\i386-win32\libbz2.tlb</TypeLibraryName> <MkTypLibCompatible>true</MkTypLibCompatible> <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors> <TargetEnvironment>Win32</TargetEnvironment> </Midl> <ResourceCompile> <Culture>0x0411</Culture> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ResourceCompile> <Bscmake> <SuppressStartupBanner>true</SuppressStartupBanner> <OutputFile>..\..\bin\i386-win32\libbz2.bsc</OutputFile> </Bscmake> <Link> <SuppressStartupBanner>true</SuppressStartupBanner> <LinkDLL>true</LinkDLL> <SubSystem>Windows</SubSystem> <OutputFile>..\..\bin\i386-win32\bz2.dll</OutputFile> <ImportLibrary>..\..\bin\i386-win32\libbz2.lib</ImportLibrary> <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <ModuleDefinitionFile>.\libbz2.def</ModuleDefinitionFile> <Version> </Version> <MinimumRequiredVersion>5.01</MinimumRequiredVersion> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <InlineFunctionExpansion>Default</InlineFunctionExpansion> <StringPooling>true</StringPooling> <FunctionLevelLinking>true</FunctionLevelLinking> <Optimization>MaxSpeed</Optimization> <SuppressStartupBanner>true</SuppressStartupBanner> <WarningLevel>Level3</WarningLevel> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AssemblerListingLocation>..\..\bin\x86_64-win64\</AssemblerListingLocation> <PrecompiledHeaderOutputFile>..\..\bin\x86_64-win64\libbz2.pch</PrecompiledHeaderOutputFile> <ObjectFileName>..\..\bin\x86_64-win64\</ObjectFileName> <ProgramDataBaseFileName>..\..\bin\x86_64-win64\</ProgramDataBaseFileName> </ClCompile> <Midl> <SuppressStartupBanner>true</SuppressStartupBanner> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <TypeLibraryName>..\..\bin\x86_64-win64\libbz2.tlb</TypeLibraryName> <MkTypLibCompatible>true</MkTypLibCompatible> <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors> </Midl> <ResourceCompile> <Culture>0x0411</Culture> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ResourceCompile> <Bscmake> <SuppressStartupBanner>true</SuppressStartupBanner> <OutputFile>..\..\bin\x86_64-win64\libbz2.bsc</OutputFile> </Bscmake> <Link> <SuppressStartupBanner>true</SuppressStartupBanner> <LinkDLL>true</LinkDLL> <SubSystem>Windows</SubSystem> <OutputFile>..\..\bin\x86_64-win64\bz2.dll</OutputFile> <ImportLibrary>..\..\bin\x86_64-win64\libbz2.lib</ImportLibrary> <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <ModuleDefinitionFile>.\libbz2.def</ModuleDefinitionFile> <Version> </Version> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <InlineFunctionExpansion>Default</InlineFunctionExpansion> <FunctionLevelLinking>false</FunctionLevelLinking> <Optimization>Disabled</Optimization> <SuppressStartupBanner>true</SuppressStartupBanner> <WarningLevel>Level3</WarningLevel> <MinimalRebuild>true</MinimalRebuild> <DebugInformationFormat>EditAndContinue</DebugInformationFormat> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AssemblerListingLocation>..\..\bin\i386-win32\</AssemblerListingLocation> <PrecompiledHeaderOutputFile>..\..\bin\i386-win32\libbz2.pch</PrecompiledHeaderOutputFile> <ObjectFileName>..\..\bin\i386-win32\</ObjectFileName> <ProgramDataBaseFileName>..\..\bin\i386-win32\</ProgramDataBaseFileName> </ClCompile> <Midl> <SuppressStartupBanner>true</SuppressStartupBanner> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <TypeLibraryName>..\..\bin\i386-win32\libbz2.tlb</TypeLibraryName> <MkTypLibCompatible>true</MkTypLibCompatible> <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors> <TargetEnvironment>Win32</TargetEnvironment> </Midl> <ResourceCompile> <Culture>0x0411</Culture> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ResourceCompile> <Bscmake> <SuppressStartupBanner>true</SuppressStartupBanner> <OutputFile>..\..\bin\i386-win32\libbz2.bsc</OutputFile> </Bscmake> <Link> <SuppressStartupBanner>true</SuppressStartupBanner> <LinkDLL>true</LinkDLL> <GenerateDebugInformation>true</GenerateDebugInformation> <SubSystem>Windows</SubSystem> <OutputFile>..\..\bin\i386-win32\bz2.dll</OutputFile> <ImportLibrary>..\..\bin\i386-win32\libbz2.lib</ImportLibrary> <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <ModuleDefinitionFile>.\libbz2.def</ModuleDefinitionFile> <Version> </Version> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <InlineFunctionExpansion>Default</InlineFunctionExpansion> <FunctionLevelLinking>false</FunctionLevelLinking> <Optimization>Disabled</Optimization> <SuppressStartupBanner>true</SuppressStartupBanner> <WarningLevel>Level3</WarningLevel> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AssemblerListingLocation>..\..\bin\x86_64-win64\</AssemblerListingLocation> <PrecompiledHeaderOutputFile>..\..\bin\x86_64-win64\libbz2.pch</PrecompiledHeaderOutputFile> <ObjectFileName>..\..\bin\x86_64-win64\</ObjectFileName> <ProgramDataBaseFileName>..\..\bin\x86_64-win64\</ProgramDataBaseFileName> </ClCompile> <Midl> <SuppressStartupBanner>true</SuppressStartupBanner> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <TypeLibraryName>..\..\bin\x86_64-win64\libbz2.tlb</TypeLibraryName> <MkTypLibCompatible>true</MkTypLibCompatible> <RedirectOutputAndErrors>NUL</RedirectOutputAndErrors> </Midl> <ResourceCompile> <Culture>0x0411</Culture> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ResourceCompile> <Bscmake> <SuppressStartupBanner>true</SuppressStartupBanner> <OutputFile>..\..\bin\x86_64-win64\libbz2.bsc</OutputFile> </Bscmake> <Link> <SuppressStartupBanner>true</SuppressStartupBanner> <LinkDLL>true</LinkDLL> <GenerateDebugInformation>true</GenerateDebugInformation> <SubSystem>Windows</SubSystem> <OutputFile>..\..\bin\x86_64-win64\bz2.dll</OutputFile> <ImportLibrary>..\..\bin\x86_64-win64\libbz2.lib</ImportLibrary> <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <ModuleDefinitionFile>.\libbz2.def</ModuleDefinitionFile> <Version> </Version> </Link> </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="blocksort.c" /> <ClCompile Include="bzlib.c" /> <ClCompile Include="compress.c" /> <ClCompile Include="crctable.c" /> <ClCompile Include="decompress.c" /> <ClCompile Include="error.c" /> <ClCompile Include="huffman.c" /> <ClCompile Include="randtable.c" /> </ItemGroup> <ItemGroup> <ClInclude Include="bzlib.h" /> <ClInclude Include="bzlib_private.h" /> </ItemGroup> <ItemGroup> <CustomBuild Include="libbz2.def" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/libbz2.def����������������������������������������������������0000644�0001750�0000144�00000000273�15104114162�020362� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������EXPORTS BZ2_bzCompressInit BZ2_bzCompress BZ2_bzCompressEnd BZ2_bzDecompressInit BZ2_bzDecompress BZ2_bzDecompressEnd BZ2_bzBuffToBuffCompress BZ2_bzBuffToBuffDecompress �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/error.c�������������������������������������������������������0000644�0001750�0000144�00000004325�15104114162�020015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "bzlib.h" #include <windows.h> void bz_internal_error ( int errcode ) { char error[2048]; wsprintf(error, "libbzip2: internal error number %d.\n" "This is a bug in libbzip2, %s.\n" "Please report it to: bzip2-devel@sourceware.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" "quality software. Thanks.\n\n", errcode, BZ2_bzlibVersion() ); MessageBox(0, error, "Double Commander", MB_OK | MB_ICONERROR); if (errcode == 1007) { wsprintf(error, "*** A special note about internal error number 1007 ***\n" "\n" "Experience suggests that a common cause of i.e. 1007\n" "is unreliable memory or other hardware. The 1007 assertion\n" "just happens to cross-check the results of huge numbers of\n" "memory reads/writes, and so acts (unintendedly) as a stress\n" "test of your memory system.\n" "\n" "I suggest the following: try compressing the file again,\n" "possibly monitoring progress in detail with the -vv flag.\n" "\n" "* If the error cannot be reproduced, and/or happens at different\n" " points in compression, you may have a flaky memory system.\n" " Try a memory-test program. I have used Memtest86\n" " (www.memtest86.com). At the time of writing it is free (GPLd).\n" " Memtest86 tests memory much more thorougly than your BIOSs\n" " power-on test, and may find failures that the BIOS doesn't.\n" "\n" "* If the error can be repeatably reproduced, this is a bug in\n" " bzip2, and I would very much like to hear about it. Please\n" " let me know, and, ideally, save a copy of the file causing the\n" " problem -- without which I will be unable to investigate it.\n" "\n" ); MessageBox(0, error, "Double Commander", MB_OK | MB_ICONERROR); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/libraries/src/libbz2/Makefile������������������������������������������������������0000644�0001750�0000144�00000001250�15104114162�020152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This Makefile builds a shared version of the library libbz2.dll CC=gcc LDFLAGS=-Wl,--enable-stdcall-fixup -Wl,--strip-all CFLAGS=-Wall -Winline -O2 -D_FILE_OFFSET_BITS=64 -DBZ_NO_STDIO # Determine output directory ARCH=$(shell $(LD) --print-output-format) ifeq ($(ARCH), pei-i386) OUTPUT=..\..\bin\i386-win32 else ifeq ($(ARCH), pei-x86-64) OUTPUT=..\..\bin\x86_64-win64 endif OBJS= blocksort.o \ huffman.o \ crctable.o \ randtable.o \ compress.o \ decompress.o \ bzlib.o \ error.o all: $(OBJS) $(CC) -shared -static $(LDFLAGS) -o $(OUTPUT)\bz2.dll $(OBJS) libbz2.def clean: $(RM) -f $(OBJS) $(OUTPUT)\bz2.dll ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/��������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014350� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015122� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.zh_TW.po�������������������������������������������������0000644�0001750�0000144�00000112257�15104114162�021261� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: 0.9.27 beta\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2011-10-17 14:44+0800\n" "Last-Translator: Lance <l381@ms5.hinet.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: TAIWAN\n" "X-Poedit-SourceCharset: utf-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, fuzzy,badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "瀏覽 %s%s%s 不是可執行程式." #: lclstrconsts.hhshelpbrowsernotfound #, fuzzy,badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "瀏覽 %s%s%s 未找到." #: lclstrconsts.hhshelperrorwhileexecuting #, fuzzy,badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "當執行 %s%s%s 時發生錯誤:%s%s " #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "無法找到 HTML 瀏覽器" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, fuzzy,badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "幫助資料庫 %s%s%s 無法找到檔案 %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "瀏覽框裏的巨集 %s 將被 URL 所替代." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "幫助" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "未找到資源 %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D陰影" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D光線" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "控制點不能把自己設為父節點" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "作用中邊線" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "作用中標題" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "所有檔案 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "程式工作區" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "桌面" #: lclstrconsts.rsbackward msgid "Backward" msgstr "後退" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "黑白位圖" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "黑色" #: lclstrconsts.rsblank msgid "Blank" msgstr "空白" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "藍色" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "按鈕表面" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "按鈕高亮" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "按鈕陰影" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "按鈕文字" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "計算機" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "取消" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "無法聚焦" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas 不允許畫圖" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "標題文字" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "大小寫敏感" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "光標" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "自定義..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "預設值" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "權限 用戶 群組 大小 日期 時間" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "刪除記錄?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "刪除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "目錄 &D" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "同樣的圖示格式." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "編輯" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "尋找整個檔案" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "錯誤" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "在 %s %s地址 %s%s 框架 %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "儲存位圖時出錯。" #: lclstrconsts.rsexception msgid "Exception" msgstr "異常" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "目錄必須存在" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "目錄 \"%s\" 不存在." #: lclstrconsts.rsfdfilealreadyexists #, fuzzy,badformat msgid "The file \"%s\" already exists. Overwrite ?" msgstr "檔案 \"%s\" 已經存在.%s替換嗎?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "檔案必須存在" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "檔案 \"%s\" 不存在." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "檔案 \"%s\" 為只讀." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "檔案為只讀" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "另存為" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "打開檔案" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "覆蓋檔案?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "路徑不存在" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "路徑 \"%s\" 不存在." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "選擇目錄" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(未找到檔案: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "檔案資訊" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "尋找" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "尋找更多" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "第一個" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols 不能 >= ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows 不能 >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "向前" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "紫紅" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags 打開 GDK 跟蹤/調試訊息." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags 關閉 GDK 跟蹤/調試訊息." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings 使 Gtk+/GDK 產生的警告和錯誤終止應用程式。" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "作用中標題顏色漸變" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "非作用中標題顏色漸變" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "灰色" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "灰色文字" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "綠色" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "網格索引越界。" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex 不能比之前的目錄項目的 GroupIndex 少" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "過濾器:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "歷史:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname 按照 Xt 轉換規則, 一個程式的類別是第一個字母大寫的程式名稱。比如,gimp 的類別是 \"Gimp\"。如果指定了 --class,程式的類別會被設為 \"classname\"。" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 打開 Gtk+ 跟蹤/調試資訊." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d 連接到指定的 X 伺服器,其中 \"h\"是主機名,\"s\"是伺服器編號(通常是0),\"d\" 是顯示編號(一般省略)。如果沒有指定 --display ,將會使用 DISPLAY 環境變量。" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module 啟動時載入指定模組" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags 關閉 Gtk+ 跟蹤/調試訊息." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient 不要為形式上的窗體設定臨時順序" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm 禁止使用 X 共享延伸記憶體。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "幫助" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: 已經註冊" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "未找到幫助內容" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "未找到幫助資料庫" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "幫助錯誤" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "未找到幫助上下文 %s." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, fuzzy,badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "沒有找到 %s 的幫助內容在資料庫 %s%s%s 中." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, fuzzy,badformat #| msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "幫助資料庫 %s%s%s 未找到瀏覽器可以閱讀幫助頁 %s 的類型" #: lclstrconsts.rshelphelpdatabasenotfound #, fuzzy,badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "未找到幫助資料庫 %s%s%s" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "關鍵字 %s%s%s 未找到幫助." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "關鍵字 %s 的幫助在資料庫 %s%s%s 中沒有找到." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, fuzzy,badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "幫助節點 %s%s%s 沒有幫助資料庫" #: lclstrconsts.rshelpnohelpfoundforsource #, fuzzy,badformat msgid "No help found for line %d, column %d of %s." msgstr "沒有找到 %s 的行 %d, 列 %d 的 %s 的相關幫助." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "沒有有效的幫助節點" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "未找到幫助" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: 沒有註冊" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "幫助選擇器錯誤" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, fuzzy,badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "幫助類型 %s%s%s 沒有檢視器" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "幫助檢視器錯誤" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "未找到幫助檢視器" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "高亮" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "高亮文字" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX 圖示資源" #: lclstrconsts.rsicon msgid "Icon" msgstr "圖示" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "圖示圖像不能為空" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "圖示圖像必須有相同的格式" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "不能改變圖示圖像的格式" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "圖示圖像必須有同樣的大小" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "不能改變圖示圖像的大小" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "圖示有不正確的圖像" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非作用中邊框" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非作用中標題" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非作用中標題" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s 索引 %d 超出範圍 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "單元格索引超過範圍[列=%d 行=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "資訊底色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "資訊文字" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "插入" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "無效日期: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "無效日期: %s。 必須在 %s 和 %s 之間" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "無效窗體流對象" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "無效屬性值" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "無效流格式" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s 已經與 %s 相關聯" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "橙" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "list 索引超過限制 (%d)" #: lclstrconsts.rsmacosmenuhide msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "中止" #: lclstrconsts.rsmball msgid "&All" msgstr "所有 &A" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "關閉 &C" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "幫助 &H" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "忽略 &I" #: lclstrconsts.rsmbno msgid "&No" msgstr "否 &N" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "全部選否" #: lclstrconsts.rsmbok msgid "&OK" msgstr "確定 &O" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "打開 &O" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "重試 &R" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "儲存 &S" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "解開/不鎖定 &U" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "是 &Y" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "全部選是 &A" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "中灰色" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "目錄欄" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "目錄" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "目錄高亮" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "目錄文字" #: lclstrconsts.rsmodified msgid " modified " msgstr "已更改" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "錢青色" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "確認" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "自定義" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "錯誤" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "資訊" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "深藍色" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "下一個" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "無" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "不是有效的網格檔案" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "沒有視窗部件集合對象,請檢查單元 \"interfaces\" 是否已添加到程式的uses語句中。" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "橄欖色" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "選擇日期" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "位圖" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "便攜黑白位圖" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "便攜灰度位圖" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "便攜網絡圖片(PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "便攜位圖" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "張貼" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "優先" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "屬性 %s 不存在" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "紫色" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "處理更新時候不能儲存圖片" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "紅色" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "更新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "替換" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "替換所有" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "未找到資源 %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "滾動欄" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "滾動欄屬性超出範圍" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "選擇顏色" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "選擇字體" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "銀色" #: lclstrconsts.rssize msgid " size " msgstr "大小" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "天藍色" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "青色" #: lclstrconsts.rstext msgid "Text" msgstr "文字" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "無法裝載預設值字體" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知錯誤, 請報告這個錯誤" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "未知圖形檔案副檔名" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "未支援的圖檔格式" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "未支援的剪貼格式: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "白色" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "僅整個單詞" #: lclstrconsts.rswin32error msgid "Error:" msgstr "錯誤:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "視窗" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "視窗框架" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "視窗文字" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "黃色" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "不能聚焦於無法聚焦或者不可見的視窗" #: lclstrconsts.scannotsetdesigntimeppi msgid "Cannot set design time PPI." msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "重複的目錄" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "無效的建立動作" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "無效列舉行為" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "無效的註冊行為" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "無效的取消註冊行為" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "\"%s\" 指定的字符集無效!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "無效圖像大小" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "無效 ImageList 索引" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "目錄索引超過範圍" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem 為 nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "子目錄不在目錄中" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "下" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "左" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "右" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "上" #: lclstrconsts.snotimers msgid "No timers available" msgstr "無有效計時器" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "錯誤的標識符類型:期望 %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "無效的浮點數:%s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "無效的整數:%s" #: lclstrconsts.sparlocinfo #, fuzzy,badformat #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(在 %d,%d, 流偏移 %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "未結束的字節值" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "未結束的字符串" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "錯誤的標識符:期望 %s 但是找到了 %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "錯誤的標識符類型:期望 %s 但是找到了 %s" #: lclstrconsts.sshellctrlsbytes msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.zh_CN.po�������������������������������������������������0000644�0001750�0000144�00000112534�15104114162�021225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: X-1.9\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: 郑建平@夏宗萍 aka robsean <robsean@126.com>\n" "Language-Team: \n" "Language: zh_CN\n" "X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "浏览器\"%s\"不是可执行程序." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "浏览器\"%s\"未找到." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "当执行\"%s\":%s%s时发生错误" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "不能找到一个HTML浏览器." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "没有HTML浏览器找到.%s请定义一个在 工具->选项->帮助->帮助选项" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "浏览框里的宏 %s 将被URL所替代." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "帮助" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "资源%s未找到" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D阴影" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D光线" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "活动边线" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "活动标题" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "所有文件 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "应用程序工作区" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "桌面" #: lclstrconsts.rsbackward msgid "Backward" msgstr "后退" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "位图" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "黑色" #: lclstrconsts.rsblank msgid "Blank" msgstr "空白" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "蓝色" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "按钮表面" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "按钮高亮" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "按钮阴影" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "按钮文本" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "取消" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "无法聚焦" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas不允许画图" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "标题文本" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "区分大小写" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "光标" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "自定义..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "默认" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "权限 用户 组 大小 日期 时间" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "删除记?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "删除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "目录(&D)" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "复制" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "粘贴" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "编辑" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "错误" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "保存位图时错误." #: lclstrconsts.rsexception msgid "Exception" msgstr "异常" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "目录必须存在" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "目录\"%s\"不存在." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "文件\"%s\"已经存在.覆盖?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "文件必须存在" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "文件\"%s\"不存在." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "文件\"%s\"不可写." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "文件不可写" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Save file as" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Open existing file" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "覆盖文件?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "路径必须存在" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "路径\"%s\"不存在." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Select Directory" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(文件未找到:\"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "文件信息" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(过滤器)" #: lclstrconsts.rsfind msgid "Find" msgstr "Find" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "查找更多" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "第一个" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols不能>ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows不能> RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "窗体" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "窗体流\"%s\"错误:%s" #: lclstrconsts.rsforward msgid "Forward" msgstr "向前" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "紫红色" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags 打开GDK 跟踪/调试信息." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags 关闭GDK跟踪/调试信息." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "图形交换格式" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings 由Gtk+/GDK 产生的警告和错误终止应用程序." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "灰色" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "灰色文本" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "绿色" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "网格文件不存在" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "网格索引越界." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "过滤器:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "历史:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 打开Gtk+跟踪/调试信息." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module 启动时加载指定模块." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags 关闭Gtk+跟踪/调试信息." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm 禁止使用 X共享内存扩展。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "帮助" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s:已经注册" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "帮助错误" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "帮助上下文%s未找到." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "帮助关键字\"%s\"未找到" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "帮助关键字\"%s\"未找到在数据库\"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "没有帮助找到对于这个主题(topic)" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: 没有注册" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "帮助选择器错误" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "帮助查看器错误" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "高亮" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "高亮文本" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X 图标" #: lclstrconsts.rsicon msgid "Icon" msgstr "图标" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "图标图像不能为空" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "图标图像必须有相同的格式" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "不能改变图标图像的格式" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "图标图像必须有相同的大小" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "不能改变图标图像的大小" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "图标没有当前的图像" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非活动边框" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非活动标题" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非活动标题" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s索引%d超出范围0..%d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "单元格索引超过范围[列=%d 行=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "info底色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "info文本" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "插入" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "无效日期: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "无效日期:%s.必须在%s和%s之间" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "无效窗体对象流" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "无效属性值" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "无效流格式" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s已经与%s相关联" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG(联合图片专家组)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "最后(Last)" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "橙色" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "列表索引超过限制 (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "褐红" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "放弃" #: lclstrconsts.rsmball msgid "&All" msgstr "所有(&A)" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "关闭(&C)" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "帮助(&H)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "忽略(&I)" #: lclstrconsts.rsmbno msgid "&No" msgstr "否(&N)" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "没有所有(No to all)" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "打开(&O)" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "重试(&R)" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "保存(&S)" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "解锁(&U)" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "是(&Y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "全部选是(&A)" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "中灰色" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "菜单条" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "菜单" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "菜单高亮" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "菜单文本" #: lclstrconsts.rsmodified msgid " modified " msgstr " 已修改" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "钱绿色" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "认证" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "确认" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "自定义" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "错误" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "信息" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "深蓝色" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "下一个" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "None" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "不是有效的网格文件" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "没有widgetset 合对象,请检查单元\"interfaces\"是否已添加到程序uses语句(clause)." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "橄榄绿色" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Select a date" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "像素图" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "便携式位图" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "便携式灰度位图" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "便携式网络图形(PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "便携式像素图" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "提交" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "优先" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "属性%s不存在" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "紫色" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn 或 -button color,设置默认button颜色." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg 或 -foreground color,设置默认foreground颜色." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name,设置应用名称." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title,设置应用标题." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "更新时候不能保存图片" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "红色" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "刷新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Replace" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "替换所有" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "资源%s未找到" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "滚动条" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "滚动条属性超出范围" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Select color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Select a font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "银白色" #: lclstrconsts.rssize msgid " size " msgstr " 大小" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "天蓝色" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "蓝绿色" #: lclstrconsts.rstext msgid "Text" msgstr "文本" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "标记图像文件格式" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "面板" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "一个项目(items)树" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "不能加载默认字体" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知错误,请报告这个错误" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "未知图片文件后缀" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "未知图片格式" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "不支持位图格式." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "不支持剪贴板格式: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "警告:这里有%d 剩余的信息在队列中!我将释放它们" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "警告:这里有%d 剩余的TimerInfo结构 在队列中!我将释放它们" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "警告:这里有%d剩余的未移除的LM_PAINT/LM_GtkPAINT信息链接." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "白色" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "仅整个单词" #: lclstrconsts.rswin32error msgid "Error:" msgstr "错误:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "窗口" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "窗口框架(Frame)" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "窗口文本" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "黄色" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "无效动作创建" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "无效动作详表(enumeration)" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "无效动作注册" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "无效动作未注册" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "无效图像的大小" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "无效图像列表索引" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "菜单索引超出范围" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem是nil(空)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BackSpace(退格)" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Delete(删除)" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "下" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End(结束)" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter(回车)" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "用户主目录" #: lclstrconsts.smkcins msgid "Ins" msgstr "Insert(插入)" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "左" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PageDown(下一页)" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PageUp(上一页)" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "右" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "空格" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "上" #: lclstrconsts.snotimers msgid "No timers available" msgstr "无有效计时器" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "无效的浮点数: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "无效的整数数: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s字节" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "无效路径名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "无效路径名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "名称" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "所选择项目在硬盘中不存在:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr " 大小" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "类型" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.uk.po����������������������������������������������������0000644�0001750�0000144�00000150035�15104114162�020641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Olexandr Pylypchuk <pilipchukap@rambler.ru>, 2016, 2017. # admin <lxlalexlxl@ukr.net>, 2017, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: lazaruside\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2020-06-10 21:40+0200\n" "Last-Translator: lxlalexlxl <lxlalexlxl@ukr.net>\n" "Language-Team: Ukrainian <kde-i18n-doc@kde.org>\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 2.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Оглядач \"%s\" не є виконуваним." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Оглядач \"%s\" не знайдено." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Помилка при виконанні \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Не вдається знайти браузер HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Оглядач HTML не знайдено.%sЗадайте його в меню Засоби -> Параметри -> Довідка -> Параметри довідки" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "У базі даних довідки \"%s\" не вдалось знайти файл \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрос %s в BrowserParams буде замінений на URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Допомога" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Мета" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невідомий" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурс %s не знайдено" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Об'ємна тінь" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Об'ємне світло" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Елемент управління не може бути сам собі предком" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Активні межі" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Активні заголовки" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Всі файли (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Робоча область програми" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Колір морської хвилі" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Клас %s не може мати предком %s." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Робочий стіл" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Навпаки" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Піктограмки" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чорний" #: lclstrconsts.rsblank msgid "Blank" msgstr "Порожній" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Синій" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Вигляд кнопки" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Підсвітка кнопки" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Тінь кнопки" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Текст кнопки" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятор" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не можу сфокусуватися" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Полотно не підтримує малювання" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Текст заголовка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Врахування регістру" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Елемент управління класу '%s' не може мати нащадком елемент класу '%s'" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Елемент керування '%s' не має предком форми або фрейма" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' не є предком '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовий" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Власний..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "За замовчуванням" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "дозволи користувач група розмір дата час" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Видалити запис?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Видалити" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Напрямок" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Копіювати" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Вставити" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Дублювати формат іконок." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Редагувати" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Шукати по усьому файлу" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Помилка створення контексту пристроїв для %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Сталась помилка в %s за %s адресою %s%s Вікно %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Помилка збереження растрового зображення." #: lclstrconsts.rsexception msgid "Exception" msgstr "Виняток" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Тека повинна існувати" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Теки \"%s\" не існує." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Такий файл \"%s\" вже існує. Переписати його ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл має існувати" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не існує." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" не може бути записаний." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл тільки для читання" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Зберегти файл як" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Відкрити наявний файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перезаписати файл ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Шлях має існувати" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Шлях \"%s\" не існує." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Виберіть каталог" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(файл не знайдено: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Інформація про файл" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(фільтр)" #: lclstrconsts.rsfind msgid "Find" msgstr "Знайти" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Знайти ще" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Перший" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols не може бути > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows не може бути > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Ресурс форми %s не знайдено. Для форм без ресурсів повинен бути використаний конструктор CreateNew. Дивіться глобальну змінну RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Помилка потоків форм \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Вперед" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Фуксія" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ввімкнути вказані зневаджувальні повідомлення GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Вимкнути вказані зневаджувальні повідомлення GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Формат обміну графічними даними" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Попередження і помилки програми, згенеровані Gtk+/GDK, зупинятимуть програму." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Заголовок активного градієнта" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Заголовок неактивного градієнта" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Графічний" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Сірий" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Сірий текст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Пастельно-зелений" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Файл сітки не існує" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Неможливо вставити в сітку рядки, якщо вона не має стовпчиків" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Неможливо вставити в сітку стовпчики, якщо вона не має рядків" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Індекс сітки поза межею допустимих значень." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не може бути менше GroupIndex для попереднього елемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фільтр:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Історія:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Відповідно до домовленостей Xt, класом програми є її назва з великої літери. Наприклад, назвою класу для gimp є \"Gimp\". Якщо вказано --class, клас програми буде встановлено в \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ввімкнути вказані зневаджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Зв'язатись із вказаним X-сервером, де \"h\" - назва хоста, \"s\" - номер сервера (звичайно 0) і \"d\" - номер дисплея (звичайно нехтують). Якщо --display не вказаний, використовується змінна оточення DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module модуль Завантажити вказаний модуль при запуску." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name ім'япрог Встановити ім'я програми в \"progname\". Якщо не вказано, ім'я програми буде встановлено в ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Вимкнути вказані зневаджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Не встановлювати тимчасовий порядок модальних форм" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Заборонити використання спільних розширень Х-пам'яті." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Виклик XSynchronize (display, True) після встановлення з'єднання з X-сервером. Це полегшує зневадження помилок протоколу X через те, що буферування запитів X буде вимкнено і помилки X будуть одержані одразу після обробки X-сервером запиту протоколу, який викликав цю помилку." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Довідка" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Вже зареєстрований" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Для цієї теми була знайдена доідкова база даних, але тема не знайдена" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Для цієї теми не встановлена довідкова база даних" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Помилка довідки" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Контекст довідки %s не знайдено" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Контекст довідки %s не знайдено в базі \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "База даних довідки \"%s\" не знайшла програму перегляду для сторінки довідки типу %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Базу даних довідки \"%s\" не знайдено" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Довідку щодо директиви \"%s\" не знайдено." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Довідку щодо директиви \"%s\" не знайдено в базі \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ключове слово довідки \"%s\" не знайдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ключове слово довідки \"%s\" не знайдено в базі даних \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Вузол довідки \"%s\" не має відповідної бази даних" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Не знайдено довідки для рядка %d, колонки %d з %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Відсутні записи довідки на цю тему" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Для цієї теми не знайдено довідки" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Не зареєстрований" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Помилка відбірника довідки" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Відсутня програма для перегляду типу довідки типу \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Помилка переглядача довідки" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Для цього типу довідки не знайдено переглядача" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Підсвічений" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Підсвічений текст" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Гаряче світло" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Значок Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Іконка" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Зображення іконки не може бути порожнім" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Зображення іконки має бути того самого формату" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Не вдалося змінити формат зображення іконки" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Зображення іконки має бути того самого розміру" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Не вдалося змінити розмір іконки" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Іконка не має поточного зображення" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Межа неактивного вікна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Індекс %d поза діапазоном 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Індекс поза діапазоном Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон повідомлення" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Текст повідомлення" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Вставка" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Неправильна дата : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Неправильна дата: %s. Має бути між %s та %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "неправильний потік об'єкта Форми" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Неправильне значення властивості" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Неправильний формат потоку" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s вже зіставлено з %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Остання" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелений" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Індекс списку поза діапазоном (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Формат файла:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Приховати %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Приховати решту" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Вийти з %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Служби" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Показати все" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Коричнево-малиновий" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Перервати" #: lclstrconsts.rsmball msgid "&All" msgstr "&Всі" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрити" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Довідка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Знехтувати" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ні" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ні для всіх" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&ОК" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Відкрити" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Повтор" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Зберегти" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Розблокувати" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Так" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Так для &Всіх" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Світло-сірий" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панель меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Підсічене меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Текст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " змінений " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Сиво-зелений" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Ідентифікація" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Підтвердження" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Спеціальний" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Відомості" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Попередження" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Темно-синій" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Наступний" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Жоден" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Неправильний файл сітки" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Об'єкт не є widgetset. Перевірте, чи був доданий модуль \"interfaces\" до програмних частин uses." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Оливковий" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Виберіть дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Растрове зображення" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Чорно-біле зображення (PBM)" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Напівтонове зображення (PGM)" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Переносна мережева графіка (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Кольорове зображення (PPM)" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Відправити" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sНатисніть Гаразд, щоб знехтувати з ризиком втрати даних.%sНатисніть Припинити, щоб знищити програму." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Попередній" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Запитувати при заміні" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Властивості %s не існує" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Пурпуровий" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, вимикає повністю точну рамку вікна під X11. Ця функція реалізована для інтерфейсів Qt, Qt5 та Gtk2 та використовується здебільшого GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (лише під X11), запуск під зневаджувачем може спричинити неявний -nograb, використайте -dograb щоб перевизначити. Потрібен QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, задає бекенд, який буде використовуватись для екранних віджетів та QPixmaps. Доступні опції: native, raster та opengl. OpenGL все ще нестабільний." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, вказує Qt щоб він ніколи не захоплював мишку чи клавіатуру. Потрібен QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, виставляє напрямок макету програми на Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, відновлює програму з попереднього сеансу." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style або -style=style, задає стиль ГІК програми. Можливі значення: motif, windows, та platinum. Якщо ви зібрали Qt з додатковими стилями або маєте додаткові стилі як плагіни, вони будуть доступні для опцій командного рядка -style. ПРИМІТКА: Не всі стилі доступні на всіх платформах. Якщо параметр style не існує Qt запустить програму з типовим стилем (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet або -stylesheet=stylesheet, задає програмі список стилів. Значення повинне бути шляхом до файлу що містить список стилів. Note: Відносні URL у файлі списку стилів сприймаються відносно шляху до файлу списку стилів." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (лише під X11), перемикає в синхронний режим зневадження." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, друкує в кінці зневаджувальне повідомлення про кількість не знищених віджетів та максимальну кількість віджетів, що існували в той же час." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg or -background color, задає типовий колір фону та палітру програми (обчислюються світлі на темні відтінки)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn або -button color, задає типовий колір кнопок." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, змушує програму встановити карту приватних кольорів на 8-бітний дисплей." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, задає дисплей Іксів (типовим є $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg або -foreground color, задає типовий колір переднього плану." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn або -font font, визначає шрифт для програми. Шрифт повинен бути вказаний використовуючи X-логічний опис шрифту." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, задає клієнтську геометрію першого показаного вікна." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, задає сервер методу вводу (аналогічно до задання змінної оточення XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, визначає як ввід вставляється в заданий віджет, наприклад onTheSpot вносить ввід прямо в віджет, тоді як overTheSpot робить так, що ввід з'являється в вікні, що плаває над віджетом і не вставляється поки редагування не завершено." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, задає назву програми." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, обмежує кількість кольорів, розміщних в кольоровому кубі на 8-бітному дисплеї, якщо програма використовує специфікацію кольору QApplication::ManyColor. Якщо кількість рівна 216 тоді використовується кольоровий куб 6x6x6 (тобто 6 рівнів червоного, 6 зеленого, та 6 синього); для інших значень використовується куб приблизно пропорційний до 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, задає заголовок програми." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, змушує програму використовувати TrueColor visual на 8-бітному дисплеї." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Команда Endupdate, хоча ніякого оновлення не проводиться" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Неможливо зберегти зображення під час оновлення" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Неможливо почати оновлення під час оновлення полотна" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Червоний" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Оновити" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Замінити" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Замінити все" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ресурс %s не знайдено" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Смуга прокрутки" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Властивості смуги прокручування виходять поза діапазон" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Вибрати колір" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Вибрати шрифт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Срібний" #: lclstrconsts.rssize msgid " size " msgstr " розмір " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Небесно-синій" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Управління з вкладками" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Синьо-зелений" #: lclstrconsts.rstext msgid "Text" msgstr "Текст" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Вбудований URL доступний лише для читання. Змініть натомість BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Тегований формат файлу зображення" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Панель" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Ручка для контролю розмірів двох частин області" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Дерево елементів" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Не можу завантажити шрифт за замовчуванням" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Невідома помилка, повідомте розробників" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Невідоме розширення файлу зображення" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Невідомий формат зображення" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Непідтримуваний тип растрового малюнка." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Непідтримуваний формат буфера обміну: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених контекстів пристроїв, список див. нижче:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених GDIObject, список див. нижче:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: В черзі залишилось %d повідомлень! Я їх видаляю" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: Залишилось %d структур TimerInfo, я їх видаляю" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " УВАГА: Знайдено %s не видалених LM_PAINT/LM_GtkPAINT посилань на повідомлення." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Білий" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Тільки цілі слова" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Помилка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Попередження:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Вікно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Межі вікна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Текст вікна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жовтий" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Не можна дати фокус вимкненому або невидимому вікну" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Дублювати меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Неправильне створення дії" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Неправильне перерахування дій" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Неправильна реєстрація дії" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Скасування реєстрації хибної дії" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Хибний розмір зображення" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Хибний індекс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Поточний текст не відповідає заданій масці." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Індекс меню поза діапазоном" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem вказує на nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Підменю не в меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Вниз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Вліво" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Вправо" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Пробіл" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вгору" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Немає доступних таймерів" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Елемент керування \"%s\" не має батьківського вікна." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Хибний тип маркера: очікується %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Хибне число з рухомою комою: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Хибне ціле число: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, зміщення потоку %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Значення байта незавершене" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершений рядок" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Хибний символ маркера: очікувався %s, але знайдено %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Хибний тип маркера: очікувався %s, але знайдено %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s байтів" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Хибний шлях:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Хибний відносний шлях:\n" "\"%s\"\n" "відносно кореневого шляху:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Хибний шлях:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s кБ" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s МБ" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Назва" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Вибраний елемент відсутній на диску:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Розмір" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Тип" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.tr.po����������������������������������������������������0000644�0001750�0000144�00000131711�15104114162�020647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Onur ERÇELEN <onur2x@gmail.com>\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2019-07-19 00:36+0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Language: tr\n" "X-Generator: Poedit 2.2.3\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "\"%s\" tarayıcısı çalıştırılabilir değil." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "\"%s\" tarayıcısı bulunamadı." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "\"%s\" çalıştırılırken hata:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML tarayıcı bulunamıyor." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML Tarayıcı bulunamadı.%sLütfen Araçlar -> Seçenekler -> Yardım -> Yardım Seçenekleri içinde bir tane tanımlayın" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "\"%s\" yardım veritabanı, \"%s\" dosyasını bulamadı." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "BrowserParams içindeki %s betiği(makro) URL ile değiştirilecek." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Yardım" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Üstkarakter" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Süper" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Bilinmeyen" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "%s adlı kaynak bulunamadı" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Koyu Gölge" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Light" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Bir denetim, kendi kendini üstdenetim(parent) olarak gösteremez" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Etkin Kenarlık" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Etkin Başlık" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Tüm dosyalar (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Uygulama Çalışma Alanı" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Su Rengi" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "%s sınıfında ata olarak %s olamaz." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Masaüstü" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Geriye doğru" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap resimleri" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Siyah" #: lclstrconsts.rsblank msgid "Blank" msgstr "Boş" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Mavi" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Düğme Yüzü" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Düğme Vurgusu" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Dürme Gölgesi" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Düğme Metni" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Hesap makinesi" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "İptal" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Odaklanamıyor" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Tuval(canvas) çizmeye izin vermiyor" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Başlık Metni" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Büyük/küçük harfe duyarlı" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "'%s' sınıfının kontrolünü çocuk olarak '%s' sınıfının kontrolüne sahip olamaz" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "'%s' kontrolü bir üst pencereye ya da çerçeveye sahip değil" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s', '%s' nin atası değil" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krem" #: lclstrconsts.rscursor msgid "Cursor" msgstr "İmleç" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Özel ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Varsayılan" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "kullanıcı grup boyut tarih zaman izinleri" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Kayıt silinsin mi?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Sil" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Yön" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Dizin" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopyala" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Yapıştır" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Tekrarlanan simge biçimi." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Düzenle" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Tüm dosyada ara" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Hata" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "%s için aygıt bağlamı oluşturulurken hata.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s @ %s içinde hata oluştu. Adres %s%s Çerçeve %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Bitmap verisini kaydederken hata." #: lclstrconsts.rsexception msgid "Exception" msgstr "İstisna" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Dizin var olmak zorunda" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "\"%s\" dizini mevcut değil." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "\"%s\" adlı dosya zaten var. Üzerine yazılsın mı?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Dosya var olmak zorunda" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "\"%s\" dosyası mevcut değil." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "\"%s\" dosyası yazılabilir değil." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Dosya yazılabilir değil" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Dosyayı farklı kaydet" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Var olan bir dosyayı aç" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Dosyanın üzerine yazılsın mı?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Yol var olmak zorunda" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "\"%s\" yolu mevcut değil." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Dizin seç" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(dosya bulunamadı: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dosya bilgisi" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(süzgeç)" #: lclstrconsts.rsfind msgid "Find" msgstr "Ara" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Daha fazla ara" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "İlk" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "Sabit sütun, sütün sayısından büyük olamaz" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "Sabit satır, satır sayısından büyük olamaz" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Form kaynağı %s bulunamadı. Kaynak dosyası olmayan formlar için CreateNew constructor mutlaka kullanılmalı. RequireDerivedFormResource adlı global değişkene bakın." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Form akışı \"%s\" hatası: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "İleriye doğru" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags GDK'ya özgü izleme/hata ayıklama iletilerini açar." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "-gdk-no-debug flags GDK'ya özgü izleme/hata ayıklama iletilerini kapatır." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Grafik Değişim Biçimi" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Gtk+/GDK tarafından üretilen hatalar ve uyarılar uygulamayı sonlandıracak." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Graident Etkin Başlık" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Graident pasif Başlık" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gri" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Gri Metin" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Yeşil" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Izgara dosyası mevcut değil" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Izgarada sütun yokken satır eklenemiyor" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Izgarada satır yokken sütün eklenemiyor" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Izgara tanımlayıcısı sınırın dışında." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex değeri, önceki menü bileşeninin GroupIndex değerinden az olamaz" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Süzgeç:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Geçmiş:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class sınıfadı Bir programın sınıfı büyük harfle başlayan program adıyla aynı ise, Xt geleneklerini izler. Örneğin, gimp için sınıf adı \"Gimp\". Eğer --class belirtilmişse, program sınıfı \"sınıfadı\" olacak şekilde ayarlanacaktır." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Gtk+'a özgü izleme/hata ayıklama iletilerini açar." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Belirtilen X sunucusuna bağlanır, \"h\" bilgisayar adı, \"s\" sunucu numarası (genellikle 0), ve \"d\" ekran numarasıdır (genellikle yazılmaz). Eğer --display belirtilmezse, DISPLAY ortam değişkeni kullanılır." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modül Belirtilen modülü başlangıçta yükler." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programadı Program adını \"programadı\" şeklinde ayarla. Belirtilmezse, program adı ParamStrUTF8(0) olarak ayarlanacak." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Gtk+'a özgü izleme/hata ayıklama iletilerini kapatır." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient modal pencereler için transient sıralama seçeneğini ayarlama" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm X paylaşımlı bellek genişletmesini kullanmayı kapatır." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Xserver bağlantısı sağlandıktan sonra XSynchronize (display, True) işlevini çağırır. Bu X protokol hatalarını ayıklamayı kolaylaştırır, çünkü X istek tamponlama kapalı olacaktır ve X hataları hata oluşturan protokol isteği X sunucu tarafından işlendikten hemen sonra alınacaktır." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Yardım" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Zaten kaydedilmiş" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Bu konu için bir yardım veritabanı bulundu, fakat konu bulunamadı" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Bu konu için bir yardım veritabanı yüklü değil" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Yardım hatası" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "%s yardım bağlamı bulunamadı." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "%s yardım bağlamı, \"%s\" veritabanı içinde bulunamadı." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Yardım Veritabanı \"%s\", \"%s\" türündeki yardım sayfası için bir görüntüleyici bulamadı" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Yardım Veritabanı \"%s\" bulunamadı" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Direktif \"%s\" için yardım bulunamadı." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Direktif \"%s\" için yardım, \"%s\" Veritabanında bulunamadı." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Yardım anahtar sözcüğü \"%s\" bulunamadı." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Yardım anahtar sözcüğü \"%s\", \"%s\" veritabanı içinde bulunamadı." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Yardım düğümü \"%s\" Yardım Veritabanına sahip değil" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format, fuzzy, badformat msgid "No help found for line %d, column %d of %s." msgstr "%s satırı için yardım bulunamadı,%s sütunu %d." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Bu konu için kullanılabilir yardım girdisi yok" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Bu konu için yardım bulunamadı" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Kaydedilmemiş" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Yardım Seçici Hatası" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "\"%s\" yardım türü için bir görüntüleyici yok" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Yardım Görüntüleyici Hatası" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Bu türdeki yardım içeriği için görüntüleyici bulunamadı" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Vurgulu" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Vurgulu Metin" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hot Light" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X Simgesi" #: lclstrconsts.rsicon msgid "Icon" msgstr "Simge" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Simge imajı boş olamaz" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Simge imajı aynı biçimde olmak zorunda" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Simge imajının biçimi değiştirilemiyor" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Simge imajı aynı boyutta olmak zorunda" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Simge imajının boyutu değiştirilemiyor" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Simgeye imaj atanmamış" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Etkin Olmayan Kenarlık" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Etkin Olmayan Başlık" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Etkin Olmayan Başlık" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Dizin %d sınırların dışında 0.. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Tanımlayıcı sınırın dışında Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Bilgi Arka Planı" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Bilgi Metni" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Ekle" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Geçersiz tarih : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Geçersiz tarih : %s. %s ve %s arasında olmalı" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "geçersiz Form nesnesi akışı" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Geçersiz özellik değeri" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Geçersiz akış biçimi" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s, zaten %s ile birleştirilmiş durumda" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Son" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limon" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Liste tanımlayıcısı sınırları aşıyor (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kestane Rengi" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "İptal" #: lclstrconsts.rsmball msgid "&All" msgstr "Tümü" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "İptal" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Kapat" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Yardım" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "Yoksay" #: lclstrconsts.rsmbno msgid "&No" msgstr "Hayır" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Tümüne hayır" #: lclstrconsts.rsmbok msgid "&OK" msgstr "Tamam" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Aç" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Tek&rar dene" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Kaydet" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Kilit çöz" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Evet" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Tümüne evet" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Orta Gri" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menü Çubuğu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menü Vurgusu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menü Metni" #: lclstrconsts.rsmodified msgid " modified " msgstr " değiştirilmiş " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Para yeşili" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Doğrulama" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Onaylama" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Özel" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Hata" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Bilgi" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Dikkat" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Deniz Mavisi" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Sonraki" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Yok" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Geçerli bir ızgara dosyası değil" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Parçacık nesnesi yok. Lütfen \"interfaces\" biriminin programın uses bölümüne eklenip eklenmediğini denetleyin." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Zeytin Yeşili" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Bir tarih seç" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Taşınabilir BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Taşınabilir GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Taşınabilir Ağ Grafiği" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Taşınabilir PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Gönder" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sYok saymak için OK düğmesine basın ve veri bozulmasını göze alın.%sProgramı sonlandırmak için Sonlandır düğmesine basın." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Önceki" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Değiştirirken sor" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "%s özelliği mevcut değil" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Mor" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (yalnızca X11), hata ayıklayıcı altında çalışma -nograb seçeneğini etkinleştirebilir, bunu geçersiz kılmak için -dograb kullan. QT_DEBUG gerektirir." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem parametre, ekranda görünen parçacıklar(widgets) ve QPixmap'lar için kullanılcak arka ucu ayarlar. Kullanılabilir seçenekler: native, raster ve opengl. OpenGL hala kararsızdır." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, Qt'ye fare ya da klavye girdilerini asla yakalamamasını söyler. QT_DEBUG gerektirir." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, uygulamanın diziliş yönünü Qt::RightToLeft olarak ayarlar." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session oturum, uygulamayı önceki bir oturumdan geri yükler." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stil ya da -style=stil, uygulamanın GUI stilini ayarlar. Olası değerler motif, windows ve platinum'dur. Eğer Qt'yi ek stillerle derlediyseniz ya da eklenti(plugin) şeklinde ek stiller var ise bunlar -style komut satırı seçeneği ile kullanılabilir durumdadır. NOT: Tüm stiller tüm platformlarda kullanılabilir değildir. Eğer stil parametresi yoksa Qt varsayılan stil ile (windows) bir uygulama başlatır." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stil sayfası ya da -stylesheet=stil sayfası, Uygulamanın stil sayfasını ayarlar. Değer, stil sayfasını barındıran bir dosya yolu olmalıdır. Not: Stil sayfası içindeki göreli URL'ler, stil sayfası dosyasının yoluna göredir." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (sadece X11'de), hata ayıklama için eşzamanlı(senkronize) kipe geçer." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, en sonda, yok edilmemiş parçacıkların sayısı ve aynı anda var olabilecek parçacık sayısı hakkında hata ayıklama iletisi yazdırır." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg ya da -background renk, bir uygulama paleti ve varsayılan arka plan rengini ayarlar (açık ve koyu gölgelikler hesaplanır)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ya da -button renk, varsayılan düğme rengini ayarlar." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, uygulamanın 8-bit ekranda özel renk haritası yüklemesine neden olur." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display ekran, X ekranını ayarlar (varsayılan $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ya da -foreground renk, varsayılan ön plan rengini ayarlar." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn ya da -font yazıtipi, uygulama yazıtipini belirler. Yazıtipi, X mantıksal yazıtipi tanımlaması şeklinde belirlenmelidir." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometri, gösterilen ilk pencerenin istemci geometrisini ayarlar." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, giriş metodu sunucusunu ayarlar (XMODIFIERS ortam değişkeni ayarına eşittir)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, belirlenmiş parçacığa(widget) girişin nasıl ekleneceğini tanımlar, ör. onTheSpot girişin doğrudan parçacık içinde görünmesini sağlar, overTheSpot ise girişin parçacık üzerinde konumlanan bir kutu içinde görünmesini sağlar ve düzenleme tamamlanıncaya kadar eklenmez." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name ad, uygulama adını ayarlar." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols sayı, Eğer uygulama QApplication::ManyColor renk tanımlamasını kullanıyorsa, 8-bit ekranda renk küpü içindeki ayrılmış renk sayısını sınırlandırır. Eğer sayı 216 ise 6x6x6 renk küpü kullanılır (ör: kırmızı 6 seviye, yeşil 6 seviye, ve mavi 6 seviye); diğer değerler için, aşağı yukarı 2x3x1'e orantılı bir küp kullanılır." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title başlık, Uygulama başlığını ayarlar." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, uygulamayı 8-bit ekranda Gerçek Renk(TrueColor) kullanmaya zorlar." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Güncelleme devam ederken bitiş tarihi" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Güncelleme yapılıyorken görüntü kaydedilemiyor" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Sadece tuval(canvas) güncellemesi işlemdeyken tümünü güncelle işlemi başlayamıyor" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Kırmızı" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Yenile" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Değiştir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Tümünü değiştir" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "%s adlı kaynak bulunamadı" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "ScrollBar" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "ScrollBar özelliği sınırın dışında" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Renk seç" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Yazıtipi seç" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Gümüş" #: lclstrconsts.rssize msgid " size " msgstr " boyut " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Gök Mavisi" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Sekme içeren kontrol" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Turkuaz" #: lclstrconsts.rstext msgid "Text" msgstr "Metin" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Gömülü URL salt okunur. Bunu yerine BaseURL'i değiştirin." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Etiketlenmiş Görüntü Dosyası Formatı" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Bir alanın iki parçasına ne kadar yer verileceğini denetleyen bir tutamak" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Öğe ağacı" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Varsayılan yazıtipi yüklenemiyor" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Bilinmeyen hata, lütfen bu hatayı bildirin" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Bilinmeyen resim genişletmesi" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Bilinmeyen resim biçimi" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Desteklenmeyen bitmap biçimi." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Desteklenmeyen pano biçimi: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " DİKKAT: %d adet serbest bırakılmamış DC var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " DİKKAT: %d adet serbest bırakılmamış GDIObject var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " DİKKAT: Kuyrukta %d adet mesaj kaldı! Onları serbest bırakacağım" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " DİKKAT: %d adet TimerInfo yapısı kaldı, onları serbest bırakacağım" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " DİKKAT: %s adet kaldırılmamış LM_PAINT/LM_GtkPAINT mesaj bağlantısı kaldı." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Beyaz" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Yalnızca tam sözcükler" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Hata:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Dikkat:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Pencere" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Pencere Çerçevesi" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Pencere Metni" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Sarı" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Etkisizleştirilmiş ya da görünmez pencerelere odaklanılamaz" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Birbirinin aynı menüler" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Geçersiz eylem yaratma" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Geçersiz eylem sayımı" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Geçersiz eylem kaydetme" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Geçersiz eylem kaydı silme" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Geçersiz görüntü boyutu" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Geçersiz ImageList tanımlayıcısı" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Mevcut metin belirtilen maskeye uymuyor." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menü tanımlayıcısı sınırın dışında" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Alt-menü, menü içinde değil" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Aşağı" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Sona git" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Başa git" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Sol" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Sağ" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Boşluk" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Sekme" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Yukarı" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Kullanılabilir zamanlayıcı yok" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "\"%s\" Kontrolü bir üst pencereye sahip değil." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Yanlış işaret(token) türü: %s beklendi" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Geçersiz kayar nokta değeri: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Geçersiz tamsayı değeri: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (%d,%d konumunda,%d ofset akışı)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Sonlandırılmamış byte değeri" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sonlandırılmamış dizge(string)" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Yanlış işaret(token) sembolü: %s beklendi fakat %s bulundu" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Yanlış işaret(token) türü: %s beklendi fakat %s bulundu" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s byte" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Geçersiz yol:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Geçersiz göreli yol:\n" "\"%s\"\n" "kökyol ile ilişkili:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Geçersiz yol:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Ad" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Seçili öğe diskte mevcut değil:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Boyut" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tip" �������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.sl.po����������������������������������������������������0000644�0001750�0000144�00000133404�15104114162�020641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovenian translations for double-commander lclstrconsts. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # This file is distributed under the same license as the double-commander package. # # Matej Urbančič <mateju@src.gnome.org>, 2011–2023. # msgid "" msgstr "" "Project-Id-Version: double-commander-lclstrconsts master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2023-09-12 14:59+0200\n" "Last-Translator: Matej Urbančič <mateju@src.gnome.org>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 3.3.2\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Brskalnik »%s« ni izvedljiv." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Brskalnika »%s« ni mogoče najti." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Napaka med zaganjanjem »%s«:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Ni mogoče najti brskalnika HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "" "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> " "Help Options" msgstr "" "Ni mogoče najti brskalnika HTML. %s Program je treba določiti med Orodji -> " "Možnosti -> Pomoč -> Možnosti pomoči" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Podatkovni zbirki »%s« manjka datoteka »%s«." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v predmetu BrowserParams bo zamenjan z naslovom URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Ukaz" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Pomoč" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznano" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Vira %s ni mogoče najti" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D temna senca" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D svetla senca" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Nadzorni predmet ne more biti sam sebi nadrejen" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Dejaven okvir" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Dejaven naslov" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Vse datoteke (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Delovna površina programa" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Vodna" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Razredu %s predmet %s ne more biti nadrejen." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Namizje" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Nazaj" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Slike" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Črna" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prazno" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Modra" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Neizbran gumb" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Poudarjen gumb" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Senca gumba" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Besedilo gumba" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Računalo" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Ni mogoče postaviti v žarišče" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Na platno ni mogoče risati" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Besedilo naslova" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Razlikovanje velikosti črk" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" "Predmet razreda »%s« ne more imet hkrati tudi podrejenega predmeta razreda " "»%s«." #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Nadzorno okno »%s« je brez nadrejenega okna" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "Predmet »%s« ni nadrejen »%s«" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kremasta" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kazalka" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Po meri ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Privzeto" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "dovoljenja uporabnik skupina velikost datum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Ali naj se vpis izbriše?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Izbriši" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Smer" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Mapa" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopiraj" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Prilepi" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Podvojen zapis ikone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Uredi" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Preišči celotno datoteko" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Napaka" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Napaka med ustvarjanjem vsebine naprave za %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Prišlo je do napake v %s pri %s na naslovu %s%s v okvirju %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Napaka med shranjevanjem bitne slike." #: lclstrconsts.rsexception msgid "Exception" msgstr "Izjema" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Mapa mora obstajati" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Mapa »%s« ne obstaja!" #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Datoteka »%s« že obstaja. Ali naj bo prepisana?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Datoteka mora obstajati" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Datoteka »%s« ne obstaja." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Datoteka »%s« ni zapisljiva." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Datoteka ni zapisljiva" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Shrani datoteko kot" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Odpri obstoječo datoteko" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Ali naj bo datoteka prepisana?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Pot mora obstajati" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Pot »%s« ne obstaja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Izbor mape" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(datoteke ni mogoče najti: »%s«)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Podrobnosti datoteke" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filter)" #: lclstrconsts.rsfind msgid "Find" msgstr "Najdi" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Najdi več" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Prvi" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "Stalno število stolpcev ne more bi > števca stolpcev" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "Stalno število vrstic ne more bi > števca vrstic" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Obrazec" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "" "Form resource %s not found. For resourceless forms CreateNew constructor " "must be used. See the global variable RequireDerivedFormResource." msgstr "" "Vira obrazca %s ni mogoče najti. Za obrazce brez virov je treba ustvariti " "posebne predmete. Oglejte si možnosti splošne spremenljivke " "RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Napaka pretakanja obrazca »%s«: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Posreduj" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuksija" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" "--gdk-debug flags Prikaži posebna sporočila sledenja in razhroščevanja " "GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" "--gdk-no-debug flags Skrij posebna sporočila sledenja in razhroščevanja GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Slikovni zapis GIF" #: lclstrconsts.rsgoptionfatalwarnings msgid "" "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt " "the application." msgstr "" "--g-fatal-warnings Opozorila in napake s strani Gtk+/GDK zaustavijo " "delovanje programa." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Preliv naziva dejavnega okna" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Preliv naziva nedejavnega okna" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Siva" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Sivo besedilo" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zelena" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Datoteka mreže ne obstaja." #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Stolpcev ni mogoče vstaviti v mrežo, če ni nobenega stolpca." #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Stolpcev ni mogoče vstaviti v mrežo, če ni nobene vrstice.." #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Določilo mreže je izven veljavnega obsega." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" "Vrednost predmeta GroupIndex ne more biti manjše od predhodne vrednosti " "istega predmeta" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Zgodovina:" #: lclstrconsts.rsgtkoptionclass msgid "" "--class classname Following Xt conventions, the class of a program is " "the program name with the initial character capitalized. For example, the " "classname for gimp is \"Gimp\". If --class is specified, the class of the " "program will be set to \"classname\"." msgstr "" "--class ImeRazreda Po določilih Xt je razred programa ime programa z " "veliko začetnico. \"Gimp\" (pisan z veliko) je na primer ime razreda " "programa gimp. Če je navedena zastavica --class, bo razred programa " "nastavljen na \"Imerazreda\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" "--gtk-debug zastavice Omogoči posebna sporočila sledenja in " "razhroščevanja Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "" "--display h:s:d Connect to the specified X server, where \"h\" is the " "hostname, \"s\" is the server number (usually 0), and \"d\" is the display " "number (typically omitted). If --display is not specified, the DISPLAY " "environment variable is used." msgstr "" "--display h:s:d Povezava z določenim strežnikom X, kjer je \"h\" ime " "gostitelja, \"s\" številka strežnika (običajno 0) in \"d\" številka zaslona " "(ta je običajno izpuščena). Če zastavica --display ni določena, je " "uporabljena spremenljivka okolja DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modul Naloži določen modul ob zagonu." #: lclstrconsts.rsgtkoptionname msgid "" "--name programe Set program name to \"progname\". If not specified, " "program name will be set to ParamStrUTF8(0)." msgstr "" "--name imeprograma Nastavi ime programa na \"imeprograma\". V kolikor " "to ime ni navedeno, je ime določeno kot ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" "--gtk-no-debug flags Onemogoči posebna sporočila sledenja in razhroščevanja " "Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" "--lcl-no-transient : ne nastavi razvrstitve pogovornih oken modalnih obrazcev" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" "--no-xshm Onemogoči uporabo razširitve souporabe pomnilnika X." #: lclstrconsts.rsgtkoptionsync msgid "" "--sync Call XSynchronize (display, True) after the Xserver " "connection has been established. This makes debugging X protocol errors " "easier, because X request buffering will be disabled and X errors will be " "received immediately after the protocol request that generated the error has " "been processed by the X server." msgstr "" "--sync Zastavica izvede priklic programa XSynchronize " "(zaslon, PRAV) po vzpostavitvi povezave s strežnikom Xserver. S tem postane " "razhroščevanje protokolov X enostavnejše, saj je medpomnjenje zahtev " "strežnika X onemogočeno. Napake strežnika X so prejete ob dogodku ali " "zahtevi protokola, ki je napako sprožilo." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Pomoč" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: že vpisano" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Najdena je dokumentacija pomoči, ne pa tudi pomoč za iskano vsebino" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Za to vsebino ni nameščene dokumentacije" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Napaka prikazovanja pomoči" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Pomoči vsebine %s ni mogoče najti." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Pomoči vsebine %s v podatkovni zbirki »%s« ni mogoče najti." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "" "Podatkovni zbirki »%s« ni mogoče pripisati pregledovalnika za pomoč vrste %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Podatkovne zbirke pomoči »%s« ni mogoče najti" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Datoteke pomoči za »%s« ni mogoče najti." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Datoteke pomoči za »%s« ni mogoče najti v podatkovni zbirki »%s«." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ključne besede pomoči »%s« ni mogoče najti." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ključne besede pomoči »%s« v podatkovni zbirki »%s« ni mogoče najti." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Vozlišče pomoči »%s« je brez pripadajoče podatkovne zbirke pomoči" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Pomoči za vrsto %d in stolpec %d od %s ni mogoče najti." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Za to vsebino pomoč ni na voljo." #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ni pomoči za to vrsto vsebine" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: ni vpisano" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Napaka izbirnika pomoči" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Ni pregledovalnika za vrsto pomoči »%s«." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Napaka pregledovalnika pomoči" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Ni ustreznega pregledovalnika za to vrsto vsebine pomoči" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Poudarjeno" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Poudarjeno besedilo" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Vroča svetloba" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ikona Mac OS" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Vrednost slike ikone ne more biti prazna" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Ikona mora biti v enakem zapisu" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Ni mogoče spremeniti zapisa ikone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Ikona mora biti enako velikost" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Ni mogoče spremeniti velikosti ikone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nima trenutne slike" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Nedejaven okvir" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Nedejaven napis" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Nedejaven napis" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s. Določilo %d je izven veljavnih meja 0 - %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Kazalo je izven obsega celice [Stolpec=%d Vrstica=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Ozadje okna podrobnosti" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Besedilo podrobnosti" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Vstavi" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Neveljaven datum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neveljaven datum: %s. Vrednost mora biti med %s in %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Neveljaven pretok obrazca predmeta" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neveljavna vrednost lastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neveljaven zapis pretoka" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "Pripona %s je že programsko povezana z programom %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Slikovni zapis JPEG" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Zadnji" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Rumeno-zelena" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Določilo seznama presega dovoljene meje (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Zapis datoteke:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Skrij %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Skrij ostalo" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Končaj %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Storitve" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Pokaži vse" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kostanjeva" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Prekini" #: lclstrconsts.rsmball msgid "&All" msgstr "&Vse" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zapri" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Pomo&č" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Prezri" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ne za vse" #: lclstrconsts.rsmbok msgid "&OK" msgstr "V &redu" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Odpri" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Poskusi &znova" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Shrani" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Odkleni" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Da" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Da za &vse" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Svetlosiva" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menijska vrstica" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Meni" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Poudarek v meniju" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Besedilo menija" #: lclstrconsts.rsmodified msgid " modified " msgstr " spremenjeno" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Zelena" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Overitev" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potrditev" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Po meri" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Napaka" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Podrobnosti" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Opozorilo" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Mornarsko modra" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Naslednji" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Brez" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Neveljavna datoteka mreže" #: lclstrconsts.rsnowidgetset msgid "" "No widgetset object. Please check if the unit \"interfaces\" was added to " "the programs uses clause." msgstr "" "Ni naveden predmet nabora gradnikov. Preveriti je treba ali so enote " "\"vmesnikov\" dodane zahtevam programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivna" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Izbor datuma" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Sličica" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Po" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the " "program." msgstr "" "%s%sPritisnite gumb V redu, če želite napako prezreti in posledično morda " "izgubiti podatke..%sPritisnite gumb Prekliči za uničenje programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Pred" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Opozori ob zamenjavi" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Lastnost %s ne obstaja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Škrlatna" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "" "-disableaccurateframe, disables fully accurate window frame under X11. This " "feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by " "GetWindowRect()." msgstr "" "-disableaccurateframe, onemogoči poln okvir okna v sistemu X11. Možnost je " "skladna z vmesniki Qt, Qt5 in Gtk2 in v uporabi predvsem z atributom " "GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "" "-dograb (only under X11), running under a debugger can cause an implicit -" "nograb, use -dograb to override. Need QT_DEBUG." msgstr "" "-dograb : (le v okolju X11), zagon z razhroščevanjem lahko povroči izrecno " "uporabo atributa -nograb. Z uporabo -dograb se možnost prepiše. Možnost " "zahteva nameščen paket QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "" "-graphicssystem param, sets the backend to be used for on-screen widgets and " "QPixmaps. Available options are native, raster and opengl. OpenGL is still " "unstable." msgstr "" "-graphicssystem parameter : nastavi ozadnji program za uporabo z zaslonskimi " "gradniki in predmeti QPixmaps. Na voljo so možnosti native (programsko), " "raster (rastersko) in opengl (OpenGL). OpenGL je še vedno v razvoju in ni " "povsem stabilen." #: lclstrconsts.rsqtoptionnograb msgid "" "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need " "QT_DEBUG." msgstr "" "-nograb : pove Qt, da ne sme prevzeti nadzora nad miško ali tipkovnico; " "zahteva QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" "-reverse : nastavi usmerjenost pisave programa na obratno vrednost Qt::" "RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session <seja> : obnovi program predhodne seje." #: lclstrconsts.rsqtoptionstyle msgid "" "-style style or -style=style, sets the application GUI style. Possible " "values are motif, windows, and platinum. If you compiled Qt with additional " "styles or have additional styles as plugins these will be available to the -" "style command line option. NOTE: Not all styles are available on all " "platforms. If style param does not exist Qt will start an application with " "default common style (windows)." msgstr "" "-style <slog> ali -style=<slog> nastavi slog uporabniškega vmesnika " "programa. Mogoče vrednosti so motif, windows in platinum. Pri izgradnji s Qt " "so na voljo tudi drugi slogi ali slogi kot vstavki. OPOMBA: vsi slogi niso " "na voljo v vseh okoljih. Kadar parametri sloga niso poseben določeni, se " "program zažene v slogu oken (Windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "" "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style " "Sheet. The value must be a path to a file that contains the Style Sheet. " "Note: Relative URLs in the Style Sheet file are relative to the Style Sheet " "file's path." msgstr "" "-stylesheet <slogovna predloga> ali pa -stylesheet=<slogovna predloga> : " "nastavi slogovno predlogo programa. Vrednost mora biti pot do datoteke s " "predlogo. Opomba: relativni naslovi URL v datoteki predloge so relativni na " "pot datoteke predloge." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (le pod X11) : preklopi na usklajevalni način za razhroščevanje." #: lclstrconsts.rsqtoptionwidgetcount msgid "" "-widgetcount, prints debug message at the end about number of widgets left " "undestroyed and maximum number of widgets existed at the same time." msgstr "" "-widgetcount : na koncu odvoda izpiše sporočilo razhroščevanja o številu " "neuničenih gradnikov in največje število sočasno zagnanih gradnikov." #: lclstrconsts.rsqtoptionx11bgcolor msgid "" "-bg or -background color, sets the default background color and an " "application palette (light and dark shades are calculated)." msgstr "" "-bg ali -background <barva> : nastavi privzeto barvo ozadja in paleto " "programa (na osnovi barve so preračunane svetlejšie in temnejši odtenki)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ali -button <barva> : nastavi privzeto barvno gumba." #: lclstrconsts.rsqtoptionx11cmap msgid "" "-cmap, causes the application to install a private color map on an 8-bit " "display." msgstr "-cmap : vsili namestitev zasebne barvne palete na 8-bitnih zaslonih." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display <zaslon> : nastavi zaslon X (default is $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ali -foreground <barva> : nastavi privzeto barvo pisave." #: lclstrconsts.rsqtoptionx11font msgid "" "-fn or -font font, defines the application font. The font should be " "specified using an X logical font description." msgstr "" "-fn ali -font <pisava> : določa pisavo programa. Ta mora biti naveden kot " "logični opis pisave za X." #: lclstrconsts.rsqtoptionx11geometry msgid "" "-geometry geometry, sets the client geometry of the first window that is " "shown." msgstr "" "-geometry <geometrija> : nastavi geometrijo okna odjemalca prvega " "prikazanega okna." #: lclstrconsts.rsqtoptionx11im msgid "" "-im, sets the input method server (equivalent to setting the XMODIFIERS " "environment variable)." msgstr "" "-im : nastavi strežnik načina vhoda (možnost je enaka nastavitve okoljske " "spremenljivke XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "" "-inputstyle, defines how the input is inserted into the given widget, e.g. " "onTheSpot makes the input appear directly in the widget, while overTheSpot " "makes the input appear in a box floating over the widget and is not inserted " "until the editing is done." msgstr "" "-inputstyle Določa kako naj se obravnavajo programski vhodi v podan " "gradnik. Na primer gradnik onTheSpot omogoča vhod prikazan neposredno v " "gradniku, medtem ko omogoča gradnik overTheSpot prikaz vhoda v polju, ki " "plava nad gradnikom in ni vstavljen, dokler urejanje ni končano." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name <ime> : nastavi ime programa." #: lclstrconsts.rsqtoptionx11ncols msgid "" "-ncols count, limits the number of colors allocated in the color cube on an " "8-bit display, if the application is using the QApplication::ManyColor color " "specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 " "levels of red, 6 of green, and 6 of blue); for other values, a cube " "approximately proportional to a 2x3x1 cube is used." msgstr "" "-ncols <števec> : omeji število barv, ki so dodeljene barvni kocki 8-bitnega " "zaslona, kadar program uporablja določilo QApplication::ManyColor. Če je " "števec enak 216, je uporabljena barvna kocka 6x6x6 (to je 6 ravni rdeče, 6 " "zelene in 6 modre); za druge vrednosti je uporabljena kocka približnih " "vrednosti razmerja 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title <naziv> : nastavi naziv programa" #: lclstrconsts.rsqtoptionx11visual msgid "" "-visual TrueColor, forces the application to use a TrueColor visual on an 8-" "bit display." msgstr "" "-visual <TrueColor> : vsili uporabo predočenja TrueColor tudi na 8-bitnih " "zaslonih." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" "Prejeta je zahteva konca posodobitve, čeprav posodobitev sploh ni zagnana" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Ni mogoče shraniti slike med izvajanjem posodabljanja" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" "Ni mogoče začeti posodabljanja vseh predmetov, ko je v teku posodabljanje " "platna. " #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rdeča" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Osveži" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Zamenjaj" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Zamenjaj vse" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Vira %s ni mogoče najti" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Drsnik" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Lastnost drsnika je izven dovoljenega območja" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Izbor barve" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Izbor pisave" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Srebrna" #: lclstrconsts.rssize msgid " size " msgstr " velikost" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Nebesno modra" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Upravljanje z zavihki" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Modrozelena" #: lclstrconsts.rstext msgid "Text" msgstr "Besedilo" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" "Vstavljeni naslov URL je le za branje. Spremeniti je mogoče osnovni BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Pult" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Oprijemalnik za nadzor velikosti dveh delov površine" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Drevesna zgradba predmetov" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Ni mogoče naložiti privzete pisave" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Prišlo je do neznane napake. Pošljite sporočilo." #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznana pripona slike" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Neznan zapis slike" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodprt zapis bitne slike" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nepodprta oblika odložišča: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" " Opozorilo: obstaja %d neobjavljenih primerkov programa DCs; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" " Opozorilo: obstaja %d neobjavljenih predmetov GDIObjects; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" " Opozorilo: obstaja %d preostalih sporočil v vrsti, ki bodo nemudoma " "sproščena" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Opozorilo: obstaja %d predmetov TimerInfo, ki bodo nemudoma sproščeni" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid "" " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" " Opozorilo: obstaja %s neodstranjenih povezav sporočil LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bela" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Le cele besede" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Napaka:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Opozorilo:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Okvir okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Besedilo okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Rumena" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Onemogočenega ali nevidnega okna ni mogoče postaviti v žarišče" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Podvojen meni" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neveljavno ustvarjanje dejanja" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neveljavno oštevilčenje dejanja" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neveljaven vpis dejanja" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neveljavno izpisovanje dejanja" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neveljavna velikost slike" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neveljavno kazalo seznama slik" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Trenutno besedilo ni skladno z določeno masko." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Kazalo menija je izven veljavnega obsega" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Predmet menija je prazno polje" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podrejeni meni ni meni" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Povratnica" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Navzdol" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Domov" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Levo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "Stran dol" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "Stran gor" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Desno" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Preslednica" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Gor" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Na voljo ni nobenega časomera." #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Nadzorno okno »%s« je brez nadrejenega okna." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Neveljavno število s plavajočo vejico: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Neveljavna celoštevilčna vrednost: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (pri %d,%d, zamik pretoka %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nekončana bitna vrednost" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nekončan niz" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Napačen simbol žetona: pričakovan je %s, prejet pa %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s; vrnjena pa je %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bajtov" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neveljavno ime poti:\n" "»%s«" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Vpisana je neveljavna relativna pot:\n" "»%s«\n" "glede na korensko pot:\n" "»%s«" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neveljavno ime poti:\n" "»%s«" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Ime" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Izbran predmet se ne konča na disku:\n" "»%s«" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Velikost" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Vrsta" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.sk.po����������������������������������������������������0000644�0001750�0000144�00000130626�15104114162�020643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: lclstrconsts\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-02-02 16:22+0100\n" "PO-Revision-Date: 2022-01-07 16:00+0100\n" "Last-Translator: Slavo Gbúr <slavusec@azet.sk>\n" "Language-Team: Slovenský <sk@li.org>\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Poedit 3.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Prehliadač \"%s\" nie je spustiteľný." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Prehliadač \"%s\" nenájdený." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Chyba pri vykonávaní \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nie je možné nájsť prehliadač HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML prehliadač nebol nájdený.%sProsím zadajte jeden v Nástroje -> Možnosti -> Pomoc -> Možnosti pomoci" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Databáza pomoci \"%s\" nemohla nájsť súbor \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v BrowserParams bude nahradené URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznáme" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tmavo tieňová" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D svetlá" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Ovládací prvok nemôže mať sám seba za rodiča" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktívny okraj" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktívny názov" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Všetky súbory (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Pracovné prostredie aplikácie" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Vodná" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Trieda %s nemôže mať %s ako rodiča." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Pracovná plocha" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Spätný" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmapy" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Čierna" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prázdne" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Modrá" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Povrch tlačítka" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Zvýraznenie tlačítka" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Tieň tlačítka" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Text tlačítka" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulačka" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nemožno zamerať" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Plátno nedovoľuje kreslenie" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Text názvu" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Rozlišovať veľké a malé písmo" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Prvok triedy '%s' nemôže mať prvok triedy '%s' ako dieťa" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Ovládací prvok '%s' nemá nadradený formulár ani rámec" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "\"%s\" nie je predchodcom \"%s\"" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krémová" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Vlastná ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predvolené" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "povolenia používateľ skupina veľkosť dátum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Zmazať záznam?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Zmazať" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Zložka" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "A&dresár" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopírovať" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Prilepiť" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zdvojený formát ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Upraviť" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Hľadať celý súbor" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Chyba vytvárania kontextu zariadenie pre %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Chyba pri ukladaní bitmapy." #: lclstrconsts.rsexception msgid "Exception" msgstr "Výnimka" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Adresár musí existovať" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Adresár \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Súbor \"%s\" už existuje. Prepísať?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Súbor musí existovať" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Súbor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Súbor \"%s\" nie je zapisovateľný." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Súbor nie je zapisovateľný" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Uložiť súbor ako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otvoriť existujúci súbor" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Prepísať súbor?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Cesta musí existovať" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Výber adresára" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(súbor nenájdený: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informácie o súbore" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filter)" #: lclstrconsts.rsfind msgid "Find" msgstr "Hľadať" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Hľadať ďalej" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Prvý" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols nemôže byť > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows nemôže byť > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulár" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Zdroj formuláru %s nenájdený. Pre formuláre bez zdroja musí byť použitý konštruktor CreateNew. Pozrite sa na globálnu premennú RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Chyba streamovania formulára \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Vpred" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Zapnúť špecifické GDK stopovanie/sledovacie správy GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Vypnúť špecifické GDK stopovanie/sledovacie správy GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Varovania a chyby generované Gtk+/GDK ukončí aplikáciu." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient aktívneho názvu" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient neaktívneho názvu" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Sivá" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Sivý text" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zelená" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Mriežkový súbor neexistuje" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Nie je možné vložiť riadky do mriežky, keď nemá žiadne stĺpce" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Nie je možné vložiť stĺpce do mriežky, keď nemá žiadne riadky" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index mriežky mimo rozsahu." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nemmôže byť menší ako GroupIndex predchádzajúcej položky menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "História:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Nasledujúce Xt konvencie, trieda programu je názov programu s prvým veľkým písmenom. Napríklad, classname pre gimp je \"Gimp\". Pokiaľ špecifikujeme --class, trieda programu bude \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gdk-debug flags Zapnúť špecifické GDK stopovanie/sledovacie správy GDK." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Pripojiť k zadanému X serveru, kde \"h\" je meno hosťa, \"s\" je číslo serveru (väčšinou 0), a \"d\" je číslo displeja (väčšinou sa nezadáva). Pokiaľ nezadáme --display , použije sa obsah premennej DISPLAY z prostredia." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Načítať zadaný modul pri štarte." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Nastavit programové meno na \"progname\". Pokiaľ nie je zadané, použije sa ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gdk-no-debug flags Vypnúť špecifické GDK stopovanie/sledovacie správy GDK." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Nenastavovať prechodné poradie pre modálne formuláre" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Zakázať použitie rozšírenia X Shared Memory." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Volať XSynchronize (displej, True) po stabilizácií pripojenia k X Serveru. Toto robíá ladenie chyb X protokolu jednodušie, protože cacheování X žiadostí bude vypnutéo a chyby X budú doručené okamžite po žiadosti, ktorá vyvolala chybu." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Pomoc" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Už je registrovaný" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Databáza pre téma bola nájdená, ale téma sa nenašlo" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Databáza pomoci nenájdená" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Chyba pomoci" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Kontextová pomoc %s nenájdená." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Kontextová pomoc %s nenájdená v databáze \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Databáza pomoci \"%s\" nenašla zobrazovač pre stránku pomocníka typu %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Databáza pomoci \"%s\" nenájdená" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Pomoc pre direktívu \"%s\" sa nenašla." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Nápoveda pre direktivu \"%s\" nenájdená v databázi \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Kľúčové slovo pomoci \"%s\" nenájdené." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Kľúčové slovo pomoci \"%s\" nenájdené v databáze \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Uzol pomocníka \"%s\" nemá databázu pomocníka" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nenájdený pomocník pre riadok %d, stĺpec %d %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nie sú dostupné žiadne uzly pomoci pre toto téma" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Pre toto téma nebola nájdená pomoc" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Neregistrovaný" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba selektora pomoci" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Nie je zobrazovač pre pomoc typu \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba zobrazovača pomoci" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nenašiel sa zobrazovač pre tento typ obsahu pomoci" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Zvýraznenie" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Zvýraznený text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hot Light" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X Iikony" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Obrázok ikony nemôže byť prázdny" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Obrázok ikony musí mať rovnaký formát" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nemožno zmeniť formát obrázka ikony" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Obrázok ikony musí mať rovnakú veľkosť" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nemožno zmeniť veľkosť obrázka ikony" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nemá aktuálny obrázok" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Neaktívny okraj" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Neaktívny názov" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Neaktívny názov" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d presahuje hranicu 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index mimo rozsahu Bunka[Stl=%d Ria=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informačné pozadie" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informačný text" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Vložiť" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Neplatný dátum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neplatný dátum: %s. Musí byť medzi %s a %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "neplatný prúd objektu Form" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neplatná hodnota vlastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neplatný formát streamu" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s už je priradený k %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Posledný" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citrusová" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Index zoznamu prekračuje hranice (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Formát súboru:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Skryť %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Skryť ostatných" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Skončiť %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Služby" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Zobraziť všetko" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Gaštanová" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Prerušiť" #: lclstrconsts.rsmball msgid "&All" msgstr "&Všetko" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zatvoriť" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Pomoc" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorovať" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nie" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nie pre všetky" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Otvoriť" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opakovať" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Uložiť" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Odomknúť" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "Án&o" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Áno pre &všetky" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Stredne sivá" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Hlavná ponuka" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Ponuka" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Zvýraznenie ponuky" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Text ponuky" #: lclstrconsts.rsmodified msgid " modified " msgstr " zmenené " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Peňažne zelená" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autentifikácia" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potvrdenie" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Vlastné" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informácia" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Upozornenie" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Námornícka modrá" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Ďalší" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Žiadne" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Neplatný súbor mriežky" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Neexistuje objekt widgetsetu. Prosím skontrolujte, či je jednotka \"interfaces\" pridaná do klauzuly uses programu." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivová" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Výber dátumu" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Prenosná BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Prenosná GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Prenosná PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Odoslať (pošta)" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sStlačte tlačítko OK, ak chcete ignorovať a riskovať poškodenie dát.%sStlačte tlačítko Prerušiť, ak chcete ukončiť program." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Pred" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Opýtať sa pred nahradením" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Vlastnosť %s neexistuje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Fialová" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, deaktivuje úplne presný rám okna pod X11. Táto funkcia je implementovaná pre rozhrania Qt, Qt5 a Gtk2 a väčšinou ju používa GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (iba pod X11), beh v debuggeru môže vyústiť v implicitní --nograb, použite -dograb k prepisu. Potrebujete QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, nastaví backend k použitiu pre widgety a QPixmaps na obrazovke. Dostupné voľby sú natíve, raster a opengl. OpenGL je stále nestabilný." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb hovorí Qt že nemá nikdy zabierať klávesnicu a myš. Potrebujete QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, nastavuje smer rozloženia aplikácie na Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, obnoví aplikáciu zo skoršej relácie." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style alebo -style=style - nastavuje GUI štýl aplikácie. Možné hodnoty sú motif, windows a platinum. Pokiaľ ste kompilovali Qt s pridanými štýlmi alebo máte pridané štýly ako pluginy, potom budú tiež dostupné ako voľba pre tento parameter. POZOR: Nie všetky štýly sú dostupné na všetkývhh platformách - pokiaľ štýl neexistuje, Qt spustí aplikáciu s vlastným východzím štýlom (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet alebo -stylesheet=stylesheet - nastavuje štýl aplikácie. Hodnota musí byť cesta k súboru obsahujúcemu Style Sheet. POZOR: Relatívne cesty v URL v súbore sú relatívne voči ceste k súboru." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (iba pod X11) - prepína do synchronného režimu pre ladenie." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount - vypíše na konci ladiacej správu o počte nezrušených widgetů a o maximálnom počte widgetů existujúcich súčasne." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg alebo -background color - nastavuje východziu farbu pozadia a paletu aplikácie (svetlé a tmavé tiene sú dopočítané)" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn nebo -button color - nastavuje východziu farbu tlačítok." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap - spôsobuje, že si aplikácia nainštaluje súkromú causemapu farieb na 8-mi bitovom displeji." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display - nastavuje X display (východzí je $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg nebo -foreground color - nastavuje východziu farbu popredia." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn alebo -font font - definuje písmo aplikácie. Písmo by malo byť špecifikované X logickým popisom písma." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry - nastavuje klientelskú geometriu prvého zobrazeného okna." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im - nastavuje server metódy vstupu (ekvivalent nastavenia premenného prostredia XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definuje, ako je vložená vstup do daného widgetu, napr. onTheSpot sa objaví vstup priamo vo widgete, zatiaľ čo v overTheSpot sa zobrazí vstup v poly nad widgetom a nie je vložený pokiaľ nie je editácia hotová." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, nastavuje názov aplikácie." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count - obmedzuje počet farieb alokovaných vo farebnej kocke na 8-mi bitovom displeji pokiaľ aplikácia využíva špecifikáciu QApplication::ManyColor . Pokiaľ je počet farieb 216, potom je použitá kocka 6x6x6 farieb (6 stupňov červenej, 6 zelenej a 6 modrej); pre ostatné prípady je použitá kocka zhruba v pomere 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titul, nastavte titulok aplikácie." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor - vynútí použiť vzhľad TrueColor na 8-mi bitovom displeji." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Koniec aktualizácie, ale aktualizácia nie je vykonávaná" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nemožno uložiť obrázok počas aktualizácie" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nemožno začať aktualizáciu všetkého, počas aktualizácie len plátna" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Červená" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Obnoviť" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Nahradiť" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Nahradiť všetko" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "ScrollBar" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Vlastnosť ScrollBar mimo rozsahu" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Výber farby" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Výber fontu" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Strieborná" #: lclstrconsts.rssize msgid " size " msgstr " veľkosť " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Nebesky modrá" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Ovládací prvok s panelmi" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Hlboká zelenomodrá" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Vstavaná adresa URL je len na čítanie. Namiesto toho zmeňte BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Označkovať obrazový formát súboru" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Rukoväť k ovládania miesta, ktoré zaberajú dva časti oblasti" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Strom položiek" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nemožno načítať predvolené písmo" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Neznáma chyba, prosím ohláste túto chybu" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznáma prípona obrázku" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Neznámy obrázkový formát" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodporovaný formát bitmapy." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UPOZORNENIE: Existuje %d neuvoľnených DCs, detailný výpis nasleduje:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UPOZORNENIE: Existuje %d neuvoľnených GDIObjects, detailný výpis nasleduje:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UPOZORNENIE: Vo fronte ostáva %d správ! Uvoľním ich" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UPOZORNENIE: Ostáva %d štruktúr TimerInfo, uvoľním ich" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UPOZORNENIE: Ostáva %s neodstránených odkazov správ LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Biela" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Len celé slová" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Chyba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Upozornenie:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Ramček okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Text okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Žltá" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nemôžem zamerať vypnuté alebo neviditeľné okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikovaná ponuka" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neplatné akcia vytvorenia" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neplatné akcia vymenovania" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neplatné akcia registrácie" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neplatné akcia odregistrovania" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neplatná veľkosť obrázku" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neplatný index ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Súčasný text nezodpovedá špecifikovanej maske." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index menu mimo rozsahu" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem je nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu nie je v menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Dole" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Vľavo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Vpravo" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Space" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Hore" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nie sú dostupné žiadne časovače" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Ovládací prvok \"%s\" nemá nadradené okno." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Zlý typ tokenu: očakávaný %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Neplatné číslo s pohyblivou rádovou čiarkou: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (at %d,%d, stream offset %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Neukončená bytová hodnota" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený reťazec" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Zlý symbol tokenu: očakávaný bol %s, ale nájdený bol %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Zlý typ tokenu: očakávaný bol %s , ale nájdený bol %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bytov" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neplatný názov cesty:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Neplatný relatívny názov cesty:\n" "\"%s\"\n" "vzhľadom na koreňovú cestu:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neplatný názov cesty:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Názov" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Vybraná položka neexistuje na disku:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Veľkosť" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Typ" ����������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.ru.po����������������������������������������������������0000644�0001750�0000144�00000151024�15104114162�020647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Maxim Ganetsky <maxkill@mail.ru>\n" "Project-Id-Version: lazaruside\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2020-06-01 01:26+0300\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Language: ru\n" "X-Generator: Poedit 2.2.1\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Браузер \"%s\" не является исполнимым файлом." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Браузер \"%s\" не найден." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Ошибка при исполнении \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Невозможно найти браузер HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Браузер HTML не найден.%sЗадайте его в меню Сервис -> Параметры -> Параметры справки" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "База данных справки \"%s\" не смогла найти файл \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрос %s в BrowserParams будет заменён на URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Справка" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Неизвестная" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурс %s не найден" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Затенённая часть объекта 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Освещённая часть объекта 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Элемент управления не может быть родителем сам себе" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Граница активного окна" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Заголовок активного окна" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Все файлы (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Рабочая область приложения" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Морской волны" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Класс %s не может иметь %s в качестве родителя." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Рабочий стол" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Назад" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Точечные рисунки" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чёрный" #: lclstrconsts.rsblank msgid "Blank" msgstr "Пустой" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Синий" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Лицевая часть кнопки" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Освещаемая сторона кнопки" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Затенённая сторона кнопки" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Текст кнопки" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятор" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Отмена" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не могу принять фокус" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Канва не поддерживает рисования" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Текст заголовка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "С учётом регистра" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Элемент управления класса '%s' не может иметь дочерний элемент управления класса '%s'" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Элемент управления '%s' не имеет родительской формы или фрейма" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' не является родителем '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовый" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Пользовательский ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "По умолчанию" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "права пользователь группа размер дата время" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Удалить запись?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Удалить" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Направление" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Копировать" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Вставить" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Формат значков дублируется." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Редактировать" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Во всём файле" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Ошибка" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Ошибка создания контекста устройства для %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Произошла ошибка в %s по %s адресу %s%s фрейм %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Ошибка при сохранении точечного рисунка (bitmap)." #: lclstrconsts.rsexception msgid "Exception" msgstr "Исключение" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Каталог должен существовать" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Каталог \"%s\" не существует." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Файл \"%s\" уже существует. Перезаписать?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл должен существовать" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не существует" #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" не доступен для записи." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл не доступен для записи" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Сохранить файл как" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Открыть существующий файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перезаписать файл?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Путь должен существовать" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Путь \"%s\" не существует." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Выберите каталог" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(файл не найден: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Сведения о файле" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(фильтр)" #: lclstrconsts.rsfind msgid "Find" msgstr "Найти" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Найти далее" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Первая" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "Значение FixedCols не может превышать ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "Значение FixedRows не может превышать RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Ресурс формы %s не найден. Для форм без ресурсов следует использовать конструктор CreateNew. Обратите внимание на глобальную переменную RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Ошибка потоков \"%s\" форм: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Вперёд" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Розовый" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Включить указанные отладочные сообщения GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Выключить указанные отладочные сообщения GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Формат Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Замечания и ошибки, выдаваемые Gtk+/GDK, остановят приложение." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Градиент активного заголовка" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Градиент неактивного заголовка" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Графические файлы" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Тёмно-серый" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Серый текст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Тёмно-зелёный" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Файл Grid не существует" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Невозможно вставить строки, если отсутствуют столбцы" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Невозможно вставить столбцы, если отсутствуют строки" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Индекс Grid вне диапазона допустимых значений." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не может быть меньше GroupIndex для предыдущего элемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фильтр:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "История:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Следуя соглашениям Xt, класс программы - это имя программы с прописным первым символом. Например, имя класса для gimp - \"Gimp\". Если задан --class, класс программы будет установлен в \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Включить указанные отладочные сообщения Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Связаться с указанным сервером X, где \"h\" - имя хост-машины, \"s\" - номер сервера (обычно 0), и \"d\" - номер дисплея (обычно опускается). Если не задан --display, используется переменная окружения DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module модуль Загрузить указанный модуль при запуске." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name имяпрог Установить имя программы в \"имяпрог\". Если не задано, имя программы будет установлено в ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Выключить указанные отладочные сообщения Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Не устанавливать временный порядок модальных форм" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Запрет использования расширений X по разделяемой памяти." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Вызвать XSynchronize (display, True) после установления соединения с сервером X. Это облегчает отладку ошибок протокола X, так как запросы буферизации X будут отключены, и ошибки X будут получаться сразу после обработки сервером X запроса протокола, который вызвал ошибку." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Справка" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: уже зарегистрирован" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "База данных справки была найдена для данной темы, но не содержит её" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "База данных справки для данной темы не установлена" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Ошибка справки" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Контекст справки %s не найден." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Контекст справки %s не найден в базе данных \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "База данных справки \"%s\" не нашла программу просмотра для страницы справки типа %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "База данных справки \"%s\" не найдена" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Справка для директивы \"%s\" не найдена." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Справка для директивы \"%s\" в базе данных \"%s\" не найдена." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ключевое слово справки \"%s\" не найдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ключевое слово справки \"%s\" не найдено в базе данных \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Элемент справки \"%s\" не имеет соответствующей базы данных" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Не найдено справки для строки %d, столбца %d из %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Доступные элементы справки для данной темы отсутствуют" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Справка для данной темы не найдена" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Не зарегистрирован" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Ошибка переключателя справки" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Отсутствует программа просмотра для типа справки \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Ошибка программы просмотра справки" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Программа просмотра справки для данного типа её содержимого не найдена" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Выделенное" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Текст выделенного" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Выделение" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Значок Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Значок" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Изображение значка не может быть пустым" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Изображение значка должно иметь тот же формат" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Невозможно изменить формат изображения значка" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Изображение значка должно иметь тот же размер" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Невозможно изменить размер изображения значка" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Значок не имеет текущего изображения" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Граница неактивного окна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Заголовок неактивного окна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Заголовок неактивного окна" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Индекс %d вне диапазона 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Индекс вне диапазона Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон сообщения" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Текст сообщения" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Вставить" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Неверная дата: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Неверная дата: %s. Должна быть между %s and %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "неправильный поток объекта формы" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Неправильное значение свойства" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Неправильный формат потока" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s уже сопоставлено с %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Последняя" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелёный" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Индекс списка вне диапазона (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Формат файла:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Скрыть %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Скрыть остальные" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Завершить %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Службы" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Показать все" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Малиновый" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Прервать" #: lclstrconsts.rsmball msgid "&All" msgstr "&Все" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Отмена" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрыть" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Справка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Пропустить" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Нет" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Нет для всех" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&ОК" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Открыть" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Повтор" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Сохранить" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Разблокировать" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Да" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Да для &всех" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Серый" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панель меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Выделенный пункт меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Текст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " изменён " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Светло-зелёный" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Проверка подлинности" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Подтверждение" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Пользовательский" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Ошибка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Сведения" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Предупреждение" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Тёмно-синий" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Следующая" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Нет" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Неверный файл Grid" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Отсутствует объект библиотеки виджетов. Проверьте, что модуль \"interfaces\" был добавлен в выражение Uses программы." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Оливковый" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Выберите дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Отправить" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sНажмите 'OK', чтобы игнорировать и подвергнуться риску повреждения данных.%sНажмите 'Прервать' для закрытия программы." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Предыдущая" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Спрашивать при &замене" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Свойство %s не существует" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Лиловый" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, отключает определение точных границ окна в X11. Эта возможность реализована для интерфейсов Qt, Qt5 и Gtk2 и используется преимущественно GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (только в X11), запуск в отладчике может повлечь неявный -nograb, используйте -dograb для отмены. Требуется QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, устанавливает используемый механизм отрисовки экранных виджетов и QPixmaps. Доступные варианты: native, raster и opengl. OpenGL всё ещё нестабилен." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, запрещает Qt захват мыши или клавиатуры. Требует QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, устанавливает направление размещения виджетов приложения в Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, восстанавливает приложение из более ранней сессии." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style или -style=style, устанавливает стиль виджетов интерфейса приложения. Возможные значения: motif, windows, и platinum. Если Qt собран с дополнительными стилями или они имеются в виде модулей, эти стили будут доступны в команде -style. ПРИМЕЧАНИЕ: не все стили доступны на всех платформах. Если стиль отсутствует, Qt запустит приложение со стилем по умолчанию (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet или -stylesheet=stylesheet, устанавливает таблицу стилей приложения (Style Sheet). Значение должно являться путём к файлу с таблицей стилей. Примечание: относительные URL'ы в таблице стилей даются относительно пути к файлу таблицы стилей." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (только в X11), устанавливает синхронный режим отладки." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, выводит отладочное сообщение в конце о количестве неуничтоженных, а также максимальном количестве существовавших в один момент времени виджетов." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg или -background color, устанавливает цвет фона по умолчанию и палитру приложения (вычисляются светлые и тёмные оттенки)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn или -button color, устанавливает цвет кнопки по умолчанию." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, вызывает установку собственной цветовой карты приложением на 8-разрядном дисплее." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, устанавливает дисплей X (по умолчанию - $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg или -foreground color, устанавливает цвет текста по умолчанию." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn или -font font, задаёт шрифт приложения. Он должен быть указан с использованием логического описания шрифтов X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, устанавливает клиентскую геометрию первого показанного окна." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, устанавливает сервер методов ввода (эквивалентно установке значения переменной окружения XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, задаёт, как вводимая информация вносится в данный виджет. Например, onTheSpot приводит к прямому появлению вводимой информации в виджете, тогда как overTheSpot вызывает появление информации в поле, находящемся над виджетом, и не вставляется до окончания редактирования." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, устанавливает имя приложения." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, ограничивает число цветов в цветовом кубе 8-разрядного дисплея, если приложение использует перечень цветов QApplication::ManyColor. Если количество равно 216, используется цветовой куб 6x6x6 (то есть, 6 уровней красного, 6 зелёного и 6 синего); для других значений используется куб, примерно пропорциональный кубу 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, устанавливает заголовок приложения." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, вынуждает приложение использовать TrueColor на 8-разрядном дисплее." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Команда Endupdate, хотя обновления не производилось" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Невозможно сохранить изображение во время обновления" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Невозможно начать обновление всех во время обновления канвы" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Красный" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Обновить" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Заменить" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Заменить всё" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ресурс %s не найден" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Полоса прокрутки" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "свойство ScrollBar вне диапазона" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Выбрать цвет" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Выбрать шрифт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Серебристый" #: lclstrconsts.rssize msgid " size " msgstr " размер " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Голубой" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Элемент управления со вкладками" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Бирюзовый" #: lclstrconsts.rstext msgid "Text" msgstr "Текст" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Встроенный URL доступен только для чтения. Вместо него следует изменять BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Формат Tagged Image File" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Панель" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Захват для управления соотношением размеров двух областей" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Дерево элементов" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Невозможно загрузить шрифт по умолчанию" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Неизвестная ошибка, сообщите о ней разработчикам" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Неизвестное расширение файла изображения" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Неизвестный формат изображения" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Неподдерживаемый тип точечного рисунка." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Неподдерживаемый формат буфера обмена: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ВНИМАНИЕ: Найдено %d неосвобождённых контекстов устройств, список см. ниже:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ВНИМАНИЕ: Найдено %d неосвобождённых GDIObject, список см. ниже:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ВНИМАНИЕ: В очереди осталось %d сообщений! Они будут удалены" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ВНИМАНИЕ: Осталось %d структур TimerInfo, они будут освобождены" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ВНИМАНИЕ: Найдено %s неудалённых ссылок на сообщение LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Белый" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Только целые слова" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Ошибка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Предупреждение:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Окно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Граница окна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Текст окна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жёлтый" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Невозможно перевести фокус в отключённое или невидимое окно" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Дублирующиеся меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Неверное создание действия" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Неверное перечисление действий" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Неверная регистрация действия" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Неверная разрегистрация действия" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Неверный размер рисунка" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Неверный индекс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Текущий текст не соответствует заданной маске." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Индекс меню вне диапазона" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem указывает на нуль" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Подменю не в меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Забой" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Вниз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Ввод" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Влево" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Вправо" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Пробел" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Таб" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вверх" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Таймеры недоступны" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Элемент управления \"%s\" не имеет родительского окна." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Неверный тип лексемы: ожидался %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Неверное число с плавающей точкой: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Неверное целое число: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, смещение потока %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Незавершённое значение байта" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершённая строка" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Неверный символ лексемы: ожидался %s, но найден %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Неверный тип лексемы: ожидался %s, но найден %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s байт" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Некорректный путь:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Некорректный путь:\n" "\"%s\"\n" "относительно корневого:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Некорректный путь:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s кБ" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s МБ" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Имя" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Выбранный элемент отсутствует на диске:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Размер" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Тип" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.ro.po����������������������������������������������������0000644�0001750�0000144�00000114533�15104114162�020645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Maximilian Machedon <maximilian.machedon@gmail.com>, 2017. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-12-25 21:16Z\n" "PO-Revision-Date: 2015-04-12 14:55-0700\n" "Last-Translator: Maximilian Machedon <maximilian.machedon@gmail.com>\n" "Language-Team: Maximilian Machedon\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);;\n" "X-Generator: Virtaal 0.7.1\n" "X-Native-Language: Română\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, fuzzy,badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Browser-ul %s%s%s nu este executabil." #: lclstrconsts.hhshelpbrowsernotfound #, fuzzy,badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Browser-ul %s%s%s nu a fost găsit." #: lclstrconsts.hhshelperrorwhileexecuting #, fuzzy,badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Eroare în cursul execuției %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nu s-a putut găsi un browser HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nu a fost găsit nici un browser HTML.%sTe rugăm să definești unul în Unlete -> Opțiuni -> Ajutor -> Opțiuni ajutor" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, fuzzy,badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Baza de date pentru ajutor %s%s%s nu a putut găsi fișierul %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Macroul %s din BrowserParams va fi înlocuit cu URL-ul." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ajutor" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Necunoscut" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resursa %s nu a fost găsită" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Umbră întunecată 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D luminos" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un element control nu se poate avea ca părinte pe sine însuși" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Margine activă" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Legendă activă" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Toate fișierele (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Spațiul de lucru aplicație" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsascannothaveasparent msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Desktop" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Înapoi" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Negru" #: lclstrconsts.rsblank msgid "Blank" msgstr "Gol" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Albastru" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Față buton" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Evidențiere buton" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Umbră buton" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Text buton" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Revocare" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nu s-a putut focaliza" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Pânza nu permite desenare" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Text legendă" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensibil la litere mari și mici" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Elementrul control din clasa '%s' nu poate avea drept copil un element control din clasa '%s'" #: lclstrconsts.rscontrolhasnoparentformorframe msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Elementul control '%s' nu are fereastră părinte" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' nu este un părinte al '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crem" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizat..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Implicit" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permisiuni utilizator grup mărime dată timp" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Șterge înregistrarea?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Șterge" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direcție" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Director" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Format de pictogramă duplicat." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editează" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Caută în întregul fișier" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Eroare" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Eroare la crearea contextului dispozitiv pentru %s.%s" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "A apărut o eroare în %s la %sadresa %s%s cadrul %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Eroare la salvarea bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepție" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Directorul trebuie să existe" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Directorul \"%s\" nu există." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Fișierul \"%s\" există deja. Suprascriu?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Fișierul trebuie să existe" #: lclstrconsts.rsfdfilenotexist #, fuzzy,badformat msgid "The file \"%s\" does not exist." msgstr "Fișierul \"s\" nu există." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Fișierul \"%s\" nu poate fi scris." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Fișierul nu poate fi scris" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salvează fișierul ca" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Deschide fișier existent" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Suprascrie fișierul?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Calea trebuie să existe" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Calea \"%s\" nu există." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selectează directorul" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(fișier negăsit: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informații fișier" #: lclstrconsts.rsfilter #, fuzzy msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtru)" #: lclstrconsts.rsfind msgid "Find" msgstr "Găsește" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Găsește mai mult" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primul" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols nu poate fi >= ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows nu poate fi >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formular" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Resursa formular %s nu a fost găsită. Pentru formulare fără resurse trebuie folosit constructorul CreateNew. Vezi variabila globală RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Flux formular \"%s\" eroare: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Înainte" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fucsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Pornește mesaje GDK de trace/debug specificate." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Oprește mesaje GDK de trace/debug specificate." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Avertismentele și erorile generate de Gtk+/GDK vor opri aplicația." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafic" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gri" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Text gri" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index grilă în afara intervalului." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nu poate fi mai mic decât GroupIndex al unui meniu anterior" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtru:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Istoric:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ajutor" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Deja înregistrat" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "O bază de date ajutor a fost găsită pentru acest subiect, dar subiectul nu a fost găsit" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Nu există nici o bază de date ajutor pentru acest subiect" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Eroare ajutor" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Contextul ajutor %s nu a fost găsit." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, fuzzy,badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Contextul ajutor %s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, fuzzy,badformat #| msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Baza de date ajutor %s%s%s nu a găsit un vizualizator pentru o pagină ajutor de tipul %s" #: lclstrconsts.rshelphelpdatabasenotfound #, fuzzy,badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Baza de date ajutor %s%s%s nu a fost găsită" #: lclstrconsts.rshelphelpfordirectivenotfound #, fuzzy,badformat #| msgid "Help for directive %s%s%s not found." msgid "Help for directive \"%s\" not found." msgstr "Ajutorul pentru directiva %s%s%s nu a fost găsit." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, fuzzy,badformat #| msgid "Help for directive %s%s%s not found in Database %s%s%s." msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ajutorul pentru directiva %s%s%s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Cuvântul cheie ajutor %s%s%s nu a fost găsit." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Cuvântul cheie ajutor %s%s%s nu a fost găsit în baza de date %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, fuzzy,badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Nodul ajutor %s%s%s nu are o bază de date ajutor" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nu s-a găsit ajutor pentru linia %d, coloana %d din %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nu sunt înregistrări ajutor disponibile pentru acest subiect." #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nu s-a găsit ajutor pentru acest subiect" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Nu este înregistrat" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Eroare selector ajutor" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, fuzzy,badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Nu există un vizualizator pentru tipul ajutor %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Eroare vizualizator ajutor" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nu s-a găsit nici un vizualizator pentru acest tip de conținut ajutor" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Evidențiere" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Text evidențiere" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Lumină fierbinte" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Pictogramă Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Pictogramă" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Imaginea pictogramă nu poate fi goală" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Imaginea pictogramă trebuie să abiă același format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nu se poate schimba formatul imaginii pictogramă" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Imaginea pictogramă trebuie să aibă aceeași dimensiune" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nu se poate schimba mărimea imaginii pictogramă" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Pictograma nu are o imagine în prezent" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Margine inactivă" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Legendă inactivă" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Legendă inactivă" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indice %d în afara intervalului 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indice în afara intervalului Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fundal info" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Info text" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserează" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Dată invalidă : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Dată invalidă: %s. Trebuie să fie între %s și %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valoare invalidă a proprietății" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Format flux invalid" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s este deja asociat cu %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ultimul" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Verde gălbui" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Indicele listei depășește intervalul (%d)" #: lclstrconsts.rsmacosmenuhide msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maro" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abandonează" #: lclstrconsts.rsmball msgid "&All" msgstr "To&ate" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Revocare" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "În&chide" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Ajutor (&h)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignoră" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nu" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nu la toate" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Deschide (&o)" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Reîncearcă" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salvează" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Descuie (&u)" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "Da (&y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Da la to&ate" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gri mediu" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Bară de meniu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Meniu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Evidențiere meniu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Text meniu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificat " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dolar" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autentificare" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmare" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Particularizat" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Eroare" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informație" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avertisment" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Bleumarin" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Următorul" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nimic" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Nu este un fișier grilă valid" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Verde oliv" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selectează o dată" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable Network Graphic" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Întreabă la înlocuire" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Proprietatea %s nu există" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Violet" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nu se poate salva imaginea cât timp are loc o actualizare" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nu se poate începe actualizarea a tot când are loc o actualizare doar a pânzei" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Roșu" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Reîmprospătare" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Înlocuire" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Înlocuire tot" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resursa %s nu a fost găsită" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selectează culoare" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selectează un font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Arginitiu" #: lclstrconsts.rssize msgid " size " msgstr "" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azuriu" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Albastru verzui" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panou" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Eroare necunoscută, vă rugăm să raportați acest bug" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensie imagine necunoscută" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Format imagine necunoscut" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Format clipboard nesuportat: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Alb" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Eroare:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Avertisment:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Fereastră" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Cadru fereastră" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Text fereastră" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Galben" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nu se poate focaliza o fereastră invizibilă sau inactivă" #: lclstrconsts.scannotsetdesigntimeppi msgid "Cannot set design time PPI." msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Meniuri duplicate" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creere acțiune invalidă" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerare acțiune invalidă" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Înregistrare actiune invalidă" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Dezînregistrare acțiune invalidă" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Mărime imagine invalidă" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Index ImageList invalid" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Textul curent nu se potrivește cu masca specificată." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index meniu în afara intervalului" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem este nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-meniul nu este în meniu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Jos" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Sfârșit" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Acasă" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Stânga" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Dreapta" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spațiu" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Sus" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Număr în virgulă mobilă invalid: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Număr întreg invalid: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valoare byte neterminată" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Șir neterminat" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.pt_BR.po�������������������������������������������������0000644�0001750�0000144�00000131656�15104114162�021240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Marcelo B Paula\n" "Language-Team: \n" "Language: pt_BR\n" "X-Generator: Poedit 1.8.13\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Navegador \"%s\" não é executável" #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Navegador \"%s\" não encontrado" #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Erro ao executar \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossível encontrar um navegador \"HTML\"." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nenhum navegador HTML encontrado.%sFavor definir um em Ferramentas -> Opções -> Ajuda -> Opções de Ajuda" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "O banco de dados de ajuda \"%s\" não pode encontrar o arquivo \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A macro %s em \"BrowseParams\" será substituída pela URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecido" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Sombra escura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luz 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Um controle não pode ter ele mesmo como pai" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borda ativa" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Rótulo ativo" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Todos os arquivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espaço de trabalho aplicação" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Ciano" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Classe %s não pode ter %s como pai." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Área de trabalho" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Preto" #: lclstrconsts.rsblank msgid "Blank" msgstr "Em Branco" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face botão" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Destaque botão" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra botão" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto botão" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossível focar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas não permite desenho" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto rótulo" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Diferenciar maiúsc./minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle de classe '%s' não pode ter controle de classe '%s' como filho" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Controle '%s' não tem formulário pai ou quadro" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' não é um descendente de '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Padrão" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissões grupo usuário, tamanho, data, hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Excluir registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Excluir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direção" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Diretório" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Copiar" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Colar" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato ícone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Localizar em todo o arquivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erro" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Erro na criação do dispositivo de contexto para %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Erro ocorrido em %s no %sEndereço %s%s Quadro %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erro ao salvar \"bitmap\"." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exceção" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Diretório deve existir" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "O diretório \"%s\" não existe." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "O arquivo \"%s\" já existe. Sobrescrever?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Arquivo deve existir" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "O arquivo \"%s\" não existe." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "O arquivo \"%s\" não é gravável." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Arquivo não é gravável" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salvar arquivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir arquivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescrever arquivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Caminho deve existir" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "O caminho \"%s\" não existe." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecionar Diretório" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(arquivo não encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informação arquivo" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.rsfind msgid "Find" msgstr "Localizar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Localizar mais" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primeiro" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "\"FixedCols\" não pode ser > \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "\"FixedRows\" não pode ser > \"RowCount\"" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulário" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Recurso formulário %s não encontrado. Para formulários sem recursos o construtor CreateNew deve ser usado. Veja a variável global RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Fluxo formulário \"%s\" com erro: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adiante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Lilás" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Desativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatar-warnings Avisos e erros gerados por Gkt+/GDK interromperá a aplicação." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Rótulo ativo gradiente" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Rótulo inativo gradiente" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Gráfico" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Cinza" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto cinza" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Arquivo da grade não existe" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Impossível inserir linhas na grade quando não há nenhuma coluna" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Impossível inserir colunas na grade quando não há nenhuma linha" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice grade fora de faixa." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" não pode ser menor que um \"GroupIndex\" anterior dos itens de menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histórico:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguindo convenções Xt, a classe do programa é o nome do programa com o caractere inicial em maiúsculo. Por exemplo, o nome de classe para gimp é \"Gimp\". Se \"--class\" for especificado, a classe do programa será definida para \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta com o servidor X especificado, onde \"h\" é o nome do servidor, \"s\" é o número do servidor (normalmente 0), e \"d\" é o número da tela (tipicamente omitido). Se \"--display\" não for especificado, a variável de ambiente \"DISPLAY\" é usada." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module módulo Carregar o módulo especificado na inicialização." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name nomeprograma Define nome do programa para \"nomeprograma\". Se não especificado, nome do programa será definido para \"ParamStrUTF8(0)\"." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Desativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Não defina ordenação transiente para formulários modais" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desativa uso da Extensão Compartilhada de Memória do X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chama XSynchronize (display, True) após ser estabelecida a conexão com Xserver. Isto torna fácil a depuração de erros de protocolo do X, porque as solicitações de armazenamento do X serão desativadas e erros do X serão recebidos imediatamente, após as solicitações de protocolo que geraram os erros, tenham sido processadas pelo servidor X." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ajuda" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: já registrado" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Um banco de dados de ajuda foi encontrado, mas este tópico não foi encontrado" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Não há nenhum banco de dados de ajuda instalado para este tópico" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erro na ajuda" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Ajuda contextual %s não encontrada." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Ajuda contextual %s não encontrada no banco de dados \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Banco de dados ajuda \"%s\" não encontra visualizador para página de ajuda do tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Banco de dados de ajuda \"%s\" não encontrado" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Ajuda para diretiva \"%s\" não encontrada." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ajuda para diretiva \"%s\" não encontrada no banco de dados \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Palavra-chave de ajuda \"%s\" não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Palavra-chave de ajuda \"%s\" não encontrada no banco de dados \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Nó de ajuda \"%s\" não tem banco de dados ajuda" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nenhuma ajuda encontrada para a linha %d, coluna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nenhuma entrada de ajuda disponível para este tópico" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nenhuma ajuda encontrada para este tópico" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: não registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erro no seletor de ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Não há visualizador para tipo ajuda \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erro no visualizador de ajuda" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nenhum visualizador foi encontrado para este tipo de conteúdo de ajuda" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Destaque" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Destaque texto" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz quente" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ícone Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ícone" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Imagem ícone não pode estar vazia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Imagem ícone deve ter o mesmo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossível alterar formato da imagem do ícone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Imagem ícone deve ter o mesmo tamanho" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossível alterar tamanho da imagem do ícone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ícone não tem imagem atual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borda inativa" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Rótulo inativo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Rótulo inativo" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %d fora dos limites 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fora de faixa Célula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Plano de fundo informações" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texto informações" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserir" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Data Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data Inválida: %s. Deve estar entre %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "fluxo de objeto de Formulário inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propriedade inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato fluxo inválido" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s já está associado com %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "\"Joint Picture Expert Group\"" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limão" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Índice lista excede o limite (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Formato do arquivo:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Ocultar %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Ocultar outros" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Encerrar %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Serviços" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Exibir tudo" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrom" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Todos" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fechar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Não" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Não para todos" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Tentar novamente" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salvar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Destravar" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sim" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sim para &todos" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Cinza médio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Destaque menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dinheiro" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticação" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmação" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erro" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informação" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Aviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul marinho" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Próximo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nenhum" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Não é um arquivo de grade válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nenhum objeto \"widgetset\". Favor verificar se a unidade \"interfaces\" foi adicionada à cláusula \"uses\" do programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecionar uma data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "\"Pixmap\"" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "\"BitMap\" portátil" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "\"GrayMap\" portátil" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Gráfico Rede Portátil (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "\"PixMap\" portátil" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Postar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sPressione OK para ignorar com risco de corrupção de dados.%sPressione Abortar para encerrar o programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Perguntar antes de substituir" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Propriedade %s inexistente" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Roxo" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, desabilita quadro de janela totalmente preciso sob X11. Essa característica está implementada para interfaces Qt, Qt5 e Gtk2 e usada principalmente por GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (apenas sob X11), executando sob um depurador pode causar um -nograb implícito, use -dograb para subrepor. Necessita QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "parâmetro -graphicssystem, define a retaguarda para ser usada com \"widgest\" de tela e QPixmaps. Opções disponíveis são: \"native\",\"raster\" e \"opengl\". OpenGL ainda está instável." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, diz ao QT para nunca capturar o mouse ou teclado. Necessário QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, define a direção do \"layout\" da aplicação para Qt::RightToLeft (Direita para esquerda)." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessão, restaura a aplicação de uma sessão anterior." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style estilo ou -style=estilo, define o estilo do GUI da aplicação. Valores possíveis são \"motif\", \"windows\" e \"platinum\". Se você compilou o QT com estilos adicionais ou tem \"plugins\" de estilo adicionais, estes estarão disponíveis para a opção em linha do comando -style. NOTA: Nem todos os estilos estão disponíveis em todas plataformas. Se o parâmetro estilo não existir, QT iniciará a aplicação com um estilo comum padrão (\"windows\")." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet folha-de-estilo ou -stylesheet=folha-de-estilo, define a Folha de Estilo da aplicação. O valor deve ser um caminho para o arquivo que contenha a folha de estilo. Nota: URLs relativas no arquivo de folha de estilo, são relativas para o caminho do arquivo de folha de estilo." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (apenas sob X11), alterna para o modo síncrono para depuração." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, imprime mensagem de depuração no final sobre o número de \"widgets\" que sobraram sem ser destruídos e o número máximo de \"widgets\" co-existentes ao mesmo tempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg ou -background color, define a cor de fundo padrão e a paleta da aplicação (sombreamento claro e escuro são calculados)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ou -button color, define a cor padrão de botões." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, provoca a instalação de um mapa de cores reservado em uma tela de 8-bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display tela, define a tela do X (padrão é $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ou -foreground color, define a cor padrão do primeiro plano." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn ou -font fonte, define a fonte da aplicação. A fonte deve ser informada usando uma descrição lógica de fonte X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, define a geometria do cliente da primeira janela a ser mostrada." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, define o servidor de métodos de entrada (equivale a configurar a variável de ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, define como as entradas são inseridas em um dado \"widget\", ex. \"onTheSpot\" faz a entrada aparecer diretamente no \"widget\", ao passo que \"overTheSpot\" faz a entrada aparecer em uma caixa flutuante sobre o \"widget\" e não é inserido até o término da edição." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, define o nome da aplicação." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols contador, limita o número de cores alocadas no cubo de cores de uma tela 8-bits, se a aplicação estiver usando a especificação QApplication::ManyColor. Se o contador for 216 então um cubo de cor de 6x6x6 é usado (ou seja 6 níveis de vermelho, 6 de verde e 6 de azul); para outros valores, um cubo aproximadamente de 2x3x1 será usado." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title título, define o título da aplicação." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, força a aplicação a usar um visual TrueColor em uma tela de 8-bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "\"Endupdate\" sem nenhuma atualização em andamento" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossível salvar imagem durante atualização" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossível iniciar \"atualizar tudo\" durante atualização \"somente canvas\"" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Vermelho" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substituir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substituir todos" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de rolagem" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriedade da Barra de rolagem fora de faixa" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selecionar cor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecionar uma fonte" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Prata" #: lclstrconsts.rssize msgid " size " msgstr " tamanho " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Um controle com tabulações" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Verde musgo" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "A URL embutida é apenas leitura. Altere a URL base em vez disso." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato Arquivo Imagem \"Tagged\"" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Painel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Um pegador para controlar quanto tamanho dar a duas partes de uma área" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Uma árvore de itens" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossível carregar fonte padrão" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erro desconhecido, favor relatar esta falha" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensão da imagem desconhecida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato imagem desconhecido" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato \"bitmap\" não suportado." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Formato aréa de transferência não suportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVISO: Há %d \"DCs\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: Há %d \"GDIObjects\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVISO: Há %d mensagens restantes na fila! Liberando." #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: Há %d estruturas \"TimerInfo\" restantes. Liberando" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVISO: Há %s, vínculos de mensagem \"LM_PAINT/LM_GtkPAINT\" não removidos, restantes." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Branco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Somente palavras inteiras" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erro:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Aviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Janela" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Quadro janela" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto janela" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarelo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossível focar uma janela inativa ou invisível" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Criação de ação inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeração de ação inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de ação inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de ação inválida" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamanho de imagem inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice \"ImageList\" inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "O texto atual não coincide com a máscara especificada." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice Menu fora de faixa" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" é nulo (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu não está no menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abaixo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerda" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Direita" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espaço" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Acima" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nenhum temporizador disponível" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Controle \"%s\" não tem janela pai." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Tipo sílaba incorreta: %s esperado" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Número de ponto flutuante inválido: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Número inteiro inválido: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "(em %d,%d, deslocamento fluxo %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor \"byte\" em aberto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sequência de caracteres em aberto" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Tipo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bytes" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nome de caminho inválido:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Nome de caminho relativo inválido:\n" "\"%s\"\n" "em relação ao caminho raiz:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nome de caminho inválido:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nome" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "O item selecionado não existe no disco:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Tamanho" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tipo" ����������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.pt.po����������������������������������������������������0000644�0001750�0000144�00000132610�15104114162�020644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Marcelo B Paula\n" "Language-Team: \n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Navegador \"%s\" não é executável." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Navegador \"%s\" não encontrado." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Erro ao executar \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossível encontrar um navegador HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nenhum navegador HTML encontrado.%sPor favor, defina um em Ferramentas -> Opções -> Ajuda -> Opções de ajuda" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "A base de dados de ajuda \"%s\" não pôde encontrar o ficheiro \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A macro %s em \"BrowseParams\" será substituída pela URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecido" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Sombra escura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luz 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Um controle não pode ter ele mesmo como pai" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borda Ativa" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Rótulo Ativo" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Todos os arquivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espaço de trabalho Aplicação" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Ciano" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Área de trabalho" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Preto" #: lclstrconsts.rsblank msgid "Blank" msgstr "Em Branco" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face Botão" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Realce Botão" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra Botão" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto Botão" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossível focar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas não permite desenho" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto Rótulo" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Diferenciar maiúsc./minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle de classe '%s' não pode ter controle de classe '%s' como filho" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' não é um descendente de '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Padrão" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissões grupo usuário, tamanho, data, hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Excluir registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Excluir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direção" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Diretório" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Copiar" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Colar" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato ícone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Localizar em todo o arquivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erro" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Erro na criação do dispositivo de contexto para %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Erro ocorrido em %s no %sEndereço %s%s Quadro %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erro ao salvar \"bitmap\"." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exceção" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Diretório deve existir" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "O diretório \"%s\" não existe." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "O arquivo \"%s\" já existe. Sobrescrever?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Arquivo deve existir" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "O arquivo \"%s\" não existe." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "O arquivo \"%s\" não é gravável." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Arquivo não é gravável" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salvar arquivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir arquivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescrever arquivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Caminho deve existir" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "O caminho \"%s\" não existe." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecionar Diretório" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(arquivo não encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informação arquivo" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.rsfind msgid "Find" msgstr "Localizar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Localizar mais" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primeiro" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "\"FixedCols\" não pode ser >= \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "\"FixedRows\" não pode ser >= \"RowCount\"" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulário" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Recurso formulário %s não encontrado. Para formulários sem recursos o construtor CreateNew deve ser usado. Veja a variável global RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Fluxo formulário \"%s\" com erro: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adiante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Lilás" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Desativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatar-warnings Avisos e erros gerados por Gkt+/GDK interromperá a aplicação." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Rótulo Gradiente Ativo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Rótulo Gradiente Inativo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Gráfico" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Cinza" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto Cinza" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "O ficheiro de grelha não existe" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Impossível inserir linhas numa grelha sem colunas" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Impossível inserir colunas numa grelha sem linhas" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice grade fora de faixa." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" não pode ser menor que um \"GroupIndex\" anterior dos itens de menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histórico:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguindo convenções Xt, a classe do programa é o nome do programa com o caractere inicial em maiúsculo. Por exemplo, o nome de classe para gimp é \"Gimp\". Se \"--class\" for especificado, a classe do programa será definida para \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta com o servidor X especificado, onde \"h\" é o nome do servidor, \"s\" é o número do servidor (normalmente 0), e \"d\" é o número da tela (tipicamente omitido). Se \"--display\" não for especificado, a variável de ambiente \"DISPLAY\" é usada." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module módulo Carregar o módulo especificado na inicialização." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name nomeprograma Define nome do programa para \"nomeprograma\". Se não especificado, nome do programa será definido para \"ParamStrUTF8(0)\"." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Desativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Não defina ordenação transiente para formulários modais" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desativa uso da Extensão Compartilhada de Memória do X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chama XSynchronize (display, True) após ser estabelecida a conexão com Xserver. Isto torna fácil a depuração de erros de protocolo do X, porque as solicitações de armazenamento do X serão desativadas e erros do X serão recebidos imediatamente, após as solicitações de protocolo que geraram os erros, tenham sido processadas pelo servidor X." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ajuda" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: já registrado" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Um banco de dados de ajuda foi encontrado, mas este tópico não foi encontrado" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Não há nenhum banco de dados de ajuda instalado para este tópico" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erro na ajuda" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Ajuda contextual %s não encontrada." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Ajuda contextual %s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy, badformat #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Banco de dados Ajuda %s%s%s não encontra visualizador para página de ajuda do tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Banco de dados de ajuda %s%s%s não encontrado" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help for directive %s%s%s not found." msgid "Help for directive \"%s\" not found." msgstr "Ajuda para diretiva %s%s%s não encontrada." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help for directive %s%s%s not found in Database %s%s%s." msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ajuda para diretiva %s%s%s não encontrada no Banco de Dados %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Palavra-chave Ajuda %s%s%s não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Palavra-chave Ajuda %s%s%s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Nó ajuda %s%s%s não tem banco de dados ajuda" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nenhuma ajuda encontrada para a linha %d, coluna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nenhuma entrada de ajuda disponível para este tópico" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nenhuma ajuda encontrada para este tópico" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: não registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erro no seletor de ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy, badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Não ha visualizador para tipo ajuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erro no visualizador de ajuda" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nenhum visualizador foi encontrado para este tipo de conteúdo de ajuda" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Realçar" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texto realçado" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz Quente" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ícone Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ícone" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Imagem ícone não pode estar vazia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Imagem ícone deve ter o mesmo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossível alterar formato da imagem do ícone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Imagem ícone deve ter o mesmo tamanho" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossível alterar tamanho da imagem do ícone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ícone não tem imagem atual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borda Inativa" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %d fora dos limites 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fora de faixa Célula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informações plano de fundo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informações Texto" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserir" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Data Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data Inválida: %s. Deve estar entre %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "fluxo de objeto de Formulário inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propriedade inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato fluxo inválido" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s já está associado com %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "\"Joint Picture Expert Group\"" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limão" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Índice lista excede o limite (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrom" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Todos" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fechar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Não" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Não para todos" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Tentar novamente" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salvar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Destravar" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sim" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sim para &todos" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Cinza Médio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Realce Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dinheiro" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticação" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmação" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erro" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informação" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Aviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul marinho" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Próximo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nenhum" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Não é um arquivo de grade válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nenhum objeto \"widgetset\". Favor verificar se a unidade \"interfaces\" foi adicionada à cláusula \"uses\" do programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecionar uma data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "\"Pixmap\"" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "\"BitMap\" portátil" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "\"GrayMap\" portátil" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Gráfico Rede Portátil (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "\"PixMap\" portátil" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Postar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Perguntar antes de substituir" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Propriedade %s inexistente" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Roxo" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (apenas sob X11), executando sob um depurador pode causar um -nograb implícito, use -dograb para subrepor. Necessita QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "parâmetro -graphicssystem, define a retaguarda para ser usada com \"widgest\" de tela e QPixmaps. Opções disponíveis são: \"native\",\"raster\" e \"opengl\". OpenGL ainda está instável." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, diz ao QT para nunca capturar o mouse ou teclado. Necessário QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, define a direção do \"layout\" da aplicação para Qt::RightToLeft (Direita para esquerda)." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessão, restaura a aplicação de uma sessão anterior." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style estilo ou -style=estilo, define o estilo do GUI da aplicação. Valores possíveis são \"motif\", \"windows\" e \"platinum\". Se você compilou o QT com estilos adicionais ou tem \"plugins\" de estilo adicionais, estes estarão disponíveis para a opção em linha do comando -style. NOTA: Nem todos os estilos estão disponíveis em todas plataformas. Se o parâmetro estilo não existir, QT iniciará a aplicação com um estilo comum padrão (\"windows\")." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet folha-de-estilo ou -stylesheet=folha-de-estilo, define a Folha de Estilo da aplicação. O valor deve ser um caminho para o arquivo que contenha a folha de estilo. Nota: URLs relativas no arquivo de folha de estilo, são relativas para o caminho do arquivo de folha de estilo." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (apenas sob X11), alterna para o modo síncrono para depuração." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, imprime mensagem de depuração no final sobre o número de \"widgets\" que sobraram sem ser destruídos e o número máximo de \"widgets\" co-existentes ao mesmo tempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg ou -background color, define a cor de fundo padrão e a paleta da aplicação (sombreamento claro e escuro são calculados)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ou -button color, define a cor padrão de botões." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, provoca a instalação de um mapa de cores reservado em uma tela de 8-bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display tela, define a tela do X (padrão é $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ou -foreground color, define a cor padrão do primeiro plano." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn ou -font fonte, define a fonte da aplicação. A fonte deve ser informada usando uma descrição lógica de fonte X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, define a geometria do cliente da primeira janela a ser mostrada." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, define o servidor de métodos de entrada (equivale a configurar a variável de ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, define como as entradas são inseridas em um dado \"widget\", ex. \"onTheSpot\" faz a entrada aparecer diretamente no \"widget\", ao passo que \"overTheSpot\" faz a entrada aparecer em uma caixa flutuante sobre o \"widget\" e não é inserido até o término da edição." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, define o nome da aplicação." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols contador, limita o número de cores alocadas no cubo de cores de uma tela 8-bits, se a aplicação estiver usando a especificação QApplication::ManyColor. Se o contador for 216 então um cubo de cor de 6x6x6 é usado (ou seja 6 níveis de vermelho, 6 de verde e 6 de azul); para outros valores, um cubo aproximadamente de 2x3x1 será usado." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title título, define o título da aplicação." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, força a aplicação a usar um visual TrueColor em uma tela de 8-bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "\"Endupdate\" sem nenhuma atualização em andamento" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossível salvar imagem durante atualização" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossível iniciar \"atualizar tudo\" durante atualização \"somente canvas\"" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Vermelho" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substituir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substituir todos" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de rolagem" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriedade da Barra de rolagem fora de faixa" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selecionar cor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecionar uma fonte" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Prata" #: lclstrconsts.rssize msgid " size " msgstr " tamanho " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul Celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Um controle com tabulações" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Verde Musgo" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato Arquivo Imagem \"Tagged\"" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Painel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Um pegador para controlar quanto tamanho dar a duas partes de uma área" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Uma árvore de itens" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossível carregar fonte padrão" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erro desconhecido, favor relatar esta falha" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensão da imagem desconhecida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato imagem desconhecido" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato \"bitmap\" não suportado." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Formato aréa de transferência não suportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVISO: Há %d \"DCs\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: Há %d \"GDIObjects\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVISO: Há %d mensagens restantes na fila! Liberando." #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: Há %d estruturas \"TimerInfo\" restantes. Liberando" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVISO: Há %s, vínculos de mensagem \"LM_PAINT/LM_GtkPAINT\" não removidos, restantes." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Branco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Somente palavras inteiras" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erro:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Aviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Janela" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Quadro Janela" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto Janela" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarelo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossível focar uma janela inativa ou invisível" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Criação de ação inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeração de ação inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de ação inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de ação inválida" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamanho de imagem inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice \"ImageList\" inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "O texto atuak não coincide com a máscara especificada." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice Menu fora de faixa" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" é nulo (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu não está no menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abaixo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerda" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Direita" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espaço" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Acima" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nenhum temporizador disponível" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "O controlo \"%s\" não tem janela-mãe" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Tipo sílaba incorreta: %s esperado" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Número de ponto flutuante inválido: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Número inteiro inválido: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "(em %d,%d, deslocamento fluxo %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor \"byte\" em aberto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sequência de caracteres em aberto" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Tipo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bytes" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Caminho inválido:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Caminho relativo inválido:\n" "\"%s\"\n" "em relação à raiz:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Caminho inválido:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nome" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "O item selecionado não existe no disco:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Tamanho" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tipo" ������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.pot������������������������������������������������������0000644�0001750�0000144�00000101152�15104114162�020403� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "" #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "" #: lclstrconsts.rsmball msgid "&All" msgstr "" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "" #: lclstrconsts.rsmbno msgid "&No" msgstr "" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "" #: lclstrconsts.rsmbok msgid "&OK" msgstr "" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr "" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr "" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.pl.po����������������������������������������������������0000644�0001750�0000144�00000132200�15104114162�020627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Sławomir Niedziela <slniedz@poczta.onet.pl>\n" "PO-Revision-Date: 2018-12-25 15:44+0100\n" "Project-Id-Version: lclstrconsts\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "POT-Creation-Date: \n" "MIME-Version: 1.0\n" "Language: pl_PL\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Przeglądarka \"%s\" nie jest plikiem wykonywalnym." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Nie znaleziono przeglądarki \"%s\"." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Błąd podczas wykonywania \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nie można znaleźć przeglądarki HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nie znaleziono przeglądarki HTML.%sUstaw ją w menu: Narzędzia -> Opcje -> Pomoc -> Opcje pomocy" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Baza danych pomocy \"%s\" nie można znaleźć pliku \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s w przeglądarce BrowserParams zostanie zastąpione przez URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Komend (cmd)" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Nieznany" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Ciemno Szary 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Jasny 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Kontrolka nie może być sama swoim rodzicem" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktywne obramowanie" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktywny nagłówek" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Wszystkie pliki (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Obszar roboczy Aplikacji" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Błękitny" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Klasa %s nie może mieć %s jako elementu nadrzędnego." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Pulpit" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Wstecz" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmapa" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Czarny" #: lclstrconsts.rsblank msgid "Blank" msgstr "Pusty" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Niebieski" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Powierzchnia przycisku" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Podświetlenie przycisku" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Cień przycisku" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Tekst przycisku" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nie można ustawić aktywności" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas nie pozwala na rysowanie" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Tekst podpisu" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Uwzględnij wielkość liter" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Kontrola klasy '%s' nie może mieć kontroli nad klasą '%s' jako potomek" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Kontrolka '%s' nie ma formatki nadrzędnej lub ramki" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' nie jest elementem nadrzędnym dla '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kremowy" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Inny..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Domyślny" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "uprawnienia użytkownik grupa rozmiar data czas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Usunąć rekord?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Usuń" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Kierunek" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Folder" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopiuj" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Wklej" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zduplikowany format ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Edycja" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Przeszukuj cały plik" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Błąd" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Błąd przy tworzeniu \"device context\" dla %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Błąd w %s przy %sAdres %s%s Ramka %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Błąd podczas zapisu bitmapy." #: lclstrconsts.rsexception msgid "Exception" msgstr "Wyjątek" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Katalog musi istnieć" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Katalog \"%s\" nie istnieje." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Plik \"%s\" już istnieje. Nadpisać ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Plik musi istnieć" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Plik \"%s\" nie istnieje." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Plik \"%s\" nie jest zapisywalny." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Plik nie jest zapisywalny" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Zapisz plik jako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otwórz istniejący plik" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Chcesz nadpisać plik?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Ścieżka musi istnieć" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Ścieżka \"%s\" nie istnieje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Wybierz katalog" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(nie znaleziono pliku: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacja o pliku" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtr)" #: lclstrconsts.rsfind msgid "Find" msgstr "Znajdź" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Znajdź następny" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Pierwszy" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols nie może być > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows nie może być > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formatka" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Nie znaleziono zasobu %s. Dla formularzy bez zasobów należy użyć konstruktora CreateNew. Zobacz zmienną globalną RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Błąd przy zapisie formularza do strumienia \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Do przodu" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuksja" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Włącz specificzne dla GDK komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Wyłącz specificzne dla GDK komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format (format GIF)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Ostrzerzenia i błędy Gtk+/GDK zatrzymają aplikację." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient Aktywnego Nagłówka" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient Nieaktywnego Nagłówka" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Szary" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Szary tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zielony" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Plik siatki nie istnieje" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Nie można wstawić wierszy do siatki gdy nie ma kolumn" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Nie można wstawić kolumn do siatki gdy nie ma wierszy" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indeks siatki poza zakresem." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nie może być mniejsza niż poprzednia pozycja menu GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtr:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Zgodnie z konwencją Xt klasę programu tworzy jego nazwa z pierwszą wielką literą. Np. nazwą klasy dla programu gimp jest \"Gimp\". Jeśli --class jest podane, klasa programu będzie ustawiona na \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Włącz specyficzne dla Gtk+ komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Połącz z podanym serwerem X; \"h\" jest nazwą hosta, \"s\" jest numerem serwera (zwykle 0), a \"d\" jest numerem ekranu (zwykle pomijanym). Jeśli --display nie jest podany, będzie użyta zmienna środowiska DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Ładuje podany moduł przy starcie." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Ustawia nazwę programu na \"progname\". Jeśli nie zostanie określony, nazwa programu zostanie ustawiona na ParamStrUTF8 (0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Wyłącz specyficzne dla Gtk+ komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Nie ustawiaj nietrwałej kolejności dla modalnych formularzy" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Wyłącz używanie X Shared Memory Extension." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Wywołaj XSynchronize (display, True) Po połączeniu z serwerem X. To ułatwia odpluskwianie protokołu X, ponieważ buforowanie żądań X będzie wyłączone i błędy X będą odbierane natychmiast po przetworzeniu przez serwer X żądania, które spowodowało błąd." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Pomoc" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: jest już zarejestrowany" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Znaleziono bazę danych pomocy dla tego tematu, ale ten temat nie został znaleziony" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Nie ma zainstalowanej bazy danych pomocy dla tego tematu" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Błąd Pomocy" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Nie znaleziono kontekstu Pomocy %s." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Nie znaleziono kontekstu Pomocy %s w bazie danych \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Baza danych Pomocy \"%s\" nie znalazła przeglądarki dla strony pomocy typu %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Nie znaleziono bazy danych Pomocy \"%s\" " #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Nie znaleziono pomocy dla dyrektywy \"%s\"." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Nie znaleziono pomocy dla dyrektywy \"%s\" w bazie danych \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Nie znaleziono pomocy dla słowa kluczowego \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Nie znaleziono pomocy dla słowa kluczowego \"%s\" w bazie danych \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Węzeł pomocy \"%s\" nie ma bazy danych pomocy" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nie znaleziono pomocy dla wiersza nr %d, i kolumny nr %d z %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Brak dostępnych wpisów pomocy dla tego tematu" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nie znaleziono pomocy dla tego tematu" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: nie jest zarejestrowany" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Błąd selektora pomocy" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Brak przeglądarki dla pomocy typu \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Błąd przeglądarki pomocy" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nie znaleziono przeglądarki dla tego typu treści pomocy" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Podświetlenie" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Podświetlenie tekstu" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Ciepłe światło" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ikona systemu Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Obraz ikony nie może być pusty" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Obraz ikony musi mieć ten sam format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nie można zmienić formatu obrazu ikony" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Obraz ikony musi mieć ten sam rozmiar" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nie można zmienić rozmiaru obrazu ikony" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nie ma bieżącego obrazu" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Nieaktywne obramowanie" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Nieaktywny napis" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Nieaktywny napis" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d przekracza zakres 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks poza zakresem Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Tło info" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Tekst Info" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Wstaw" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Niepoprawna data: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Niepoprawna data: %s. Musi być z zakresu od %s do %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "błędny strumień obiektu formularza" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Błędna wartość właściwości" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Błędny format strumienia" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s jest już skojarzony z %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group (format JPEG)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ostatni" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Jasnozielony" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Indeks listy poza zakresem (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Bordowy" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Porzuć" #: lclstrconsts.rsmball msgid "&All" msgstr "&Wszystkie" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Z&amknij" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "P&omoc" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Zignoruj" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nie" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nie na wszystkie" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Otwórz" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Ponów próbę" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Zachowaj" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Odblokuj" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Tak" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Tak na &wszystkie" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Średni szary" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Pasek Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Podświetlenie Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Tekst Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " zmodyfikowany " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Zieleń pieniądza" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Poświadczenie" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potwierdzenie" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Własny" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Błąd" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informacja" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Ostrzeżenie" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Granatowy" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Następny" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Brak" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Nieprawidłowy plik siatki" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Brak obiektu zestawu widgetów. Proszę sprawdzić, czy moduł \"interfaces\" został dodany do klauzuli uses programu." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliwkowy" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Wybierz datę" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Opublikuj" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sKliknij OK aby ignorować i zaryzykować utratę danych. %sKliknij Porzuć aby zakończyć program." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Poprzedni" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Zapytaj przed zastąpieniem" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Właściwość %s nie istnieje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Fioletowy" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (tylko pod X11), działając pod debuggerem może spowodować niejawny -nograb, użyj -dograb, aby nadpisać. Potrzebujesz QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, ustawia backend do wykorzystania dla widgetów ekranowych i QPixmaps. Dostępne opcje to natywne, rastrowe i otwarte. OpenGL jest nadal niestabilny." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, określa Qt, że nigdy nie może przechwycić myszy ani klawiatury. Potrzebne jest QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, ustawia kierunek układu aplikacji na Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-sesja sesji, przywraca aplikację z wcześniejszej sesji." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style lub -style = style, ustawia styl GUI aplikacji. Możliwe wartości to: motif, windows i platinium. Jeśli skompilowałeś Qt z dodatkowymi stylami lub masz dodatkowe style jako wtyczki, będą one dostępne dla opcji wiersza poleceń -style. UWAGA: Nie wszystkie style są dostępne na wszystkich platformach. Jeśli styl nie istnieje, Qt uruchomi aplikację z domyślnym wspólnym stylem (Windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet lub -stylesheet stylesheet, ustawia arkusz stylu aplikacji. Wartość musi być ścieżką do pliku zawierającego Arkusz Stylów *(Style Sheet). Uwaga: Względne adresy URL w pliku Arkusza Stylów (Style Sheet) odnoszą się do ścieżki pliku Arkusza Stylów (Style Sheet)." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (tylko pod X11), przełącza się w tryb synchroniczny dla debugowania." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, wyświetla komunikat debugowania na zakończenie programu o liczbie niezestryfikowanych widżetów i maksymalnej liczbie widżetów w tym samym czasie." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg lub -background, ustawia domyślny kolor tła i paletę aplikacji (jasne i ciemne odcienie są obliczane)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn lub -przycisk koloru, ustawia domyślny kolor przycisku." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap powoduje, że aplikacja instaluje prywatną mapę kolorów na 8-bitowym wyświetlaczu." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, ustawia wyświetlacz X (domyślnie $ DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg lub -foreground color, ustawia domyślny kolor pierwszego planu." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn lub -font font, określa czcionkę aplikacji. Czcionkę należy określić przy użyciu logicznego opisu czcionki X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, ustawia geometrię klienta pierwszego wyświetlonego okna." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, ustawia serwer metody wprowadzania danych (równoważny ustawieniu zmiennej środowiskowej XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, określa sposób wstawiania danych wejściowych do podanego widżetu, np. onTheSpot powoduje, że dane wejściowe pojawiają się bezpośrednio w widgecie, podczas gdy overTheSpot powoduje, że dane wejściowe pojawiają się w polu unoszącym się nad widżetem i nie są wstawiane, dopóki edycja nie zostanie zakończona." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nazwa, ustawia nazwę aplikacji." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, ogranicza liczbę kolorów przydzielonych w kostce kolorów na 8-bitowym wyświetlaczu, jeśli aplikacja używa specyfikacji koloru QApplication::ManyColor. Jeśli liczba wynosi 216, to używana jest sześcianu koloru 6x6x6 (tj. 6 poziomów czerwieni, 6 zieleni i 6 niebieskich); dla innych wartości używany jest sześcian w przybliżeniu proporcjonalny do kostki 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, ustawia tytuł aplikacji." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, wymusza na aplikacji użycie obrazu TrueColor na 8-bitowym wyświetlaczu." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate, gdy aktualizacja nie jest w toku" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nie można zapisać obrazu podczas trwającej aktualizacji" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nie można rozpocząć aktualizacji wszystkiego podczas trwania aktualizacji obszaru" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Czerwony" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Odśwież" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Zamień" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Zamień wszystko" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Pasek przewijania (ScrollBar)" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Właściwość paska przewijania (ScrollBar) poza zakresem" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Wybierz kolor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Wybierz czcionkę" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Srebrny" #: lclstrconsts.rssize msgid " size " msgstr " rozmiar " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Błękit nieba" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Kontrolka z zakładkami" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Morski" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format (TIFF)" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Uchwyt do kontrolowania, jaki rozmiar dają dwie części tego obszaru" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Drzewo pozycji" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nie można załadować domyślnej czcionki" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Nieznany błąd, proszę go zgłosić" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Nieznane rozszerzenie pliku obrazka" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Nieznany format pliku obrazka" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nieobsługiwany format bitmapy." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nieobsługiwany format schowka: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UWAGA: Pozostały %d niezwolnione DC, szczegółowy zrzut poniżej:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UWAGA: Pozostało %d niezwolnionych GDIObject, szczegółowy zrzut poniżej:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UWAGA: Pozostało %d komunikatów w kolejce! Zostaną usunięte" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UWAGA: Pozostało %d struktur TimerInfo zostaną usunięte" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UWAGA: Pozostały %s nieusunięte dowiązania do LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Biały" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Tylko całe słowa" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Błąd:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Ostrzeżenie:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Ramka Okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Tekst Okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Żółty" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nie można ustawić aktywności na niedostępnym lub niewidocznym oknie" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Zdublowane menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Błędne tworzenie akcji" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Błędna enumeracja akcji" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Błędna rejestracja akcji" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Błędne wyrejestrowanie akcji" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Błędny rozmiar obrazka" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Błędny indeks ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Bieżący tekst nie pasuje do podanej maski." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indeks menu poza zakresem" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Element menu ma wartość nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu nie jest w menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "W dół" #: lclstrconsts.smkcend #, fuzzy msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Klawisz End przenosi do najbliższego końca" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome #, fuzzy msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Klawisz Home przenosi do najbliższego początku." #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins (wstaw)" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "W lewo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn (strona w dół)" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp (strona w górę)" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "W prawo" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spacja" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab (tabulator)" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "W górę" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Brak dostępnych timerów" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Kontrola \"%s\" nie ma okna nadrzędnego." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Nieprawidłowy typ tokenu: oczekiwano %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Nieprawidłowa liczba zmiennoprzecinkowa: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Nieprawidłowa liczba całkowita:%s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (w %d,%d, przesunięcie strumienia %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Niezakończona wartość bajtu" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Niezakończony łańcuch napisowy" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Nieprawidłowy symbol tokenu: spodziewano się %s lecz znaleziono %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Nieprawidłowy typ tokenu: spodziewano się %s lecz znaleziono %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bajtów" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nieprawidłowa ścieżka (lokalizacja):\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Nieprawidłowa ścieżka (lokalizacja) relatywna:\n" "\"%s\"\n" "w odniesieniu do ścieżki (lokalizacji) gółwnej\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nieprawidłowa ścieżka (lokalizacja):\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nazwa" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Zaznaczona pozycja nie instnieje na dysku:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Rozmiar" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Typ" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.pb.po����������������������������������������������������0000644�0001750�0000144�00000125350�15104114162�020625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Marcelo Borges de Paula\n" "Language-Team: \n" #: lclstrconsts.hhshelpbrowsernotexecutable #, fuzzy,badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Navegador %s%s%s não é executável" #: lclstrconsts.hhshelpbrowsernotfound #, fuzzy,badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Navegador %s%s%s não encontrado" #: lclstrconsts.hhshelperrorwhileexecuting #, fuzzy,badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Erro ao executar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossível encontrar um navegador \"HTML\"." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, fuzzy,badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "O banco de dados de ajuda %s%s%s não pôde encontrar o arquivo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A macro %s em \"BrowseParams\" será substituída pela URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecido" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Sombra escura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luz 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Um controle não pode ter ele mesmo como pai" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borda Ativa" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Rótulo Ativo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Todos os arquivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espaço de trabalho Aplicação" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Ciano" #: lclstrconsts.rsascannothaveasparent msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Área de trabalho" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Preto" #: lclstrconsts.rsblank msgid "Blank" msgstr "Em Branco" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face Botão" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Realce Botão" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra Botão" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto Botão" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossível focar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas não permite desenho" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto Rótulo" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Diferenciar maiúsc./minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle de classe '%s' não pode ter controle de classe '%s' como filho" #: lclstrconsts.rscontrolhasnoparentformorframe msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Controle '%s' não possui janela pai" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Padrão" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissões grupo usuário, tamanho, data, hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Excluir registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Excluir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direção" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Diretório" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato ícone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Localizar em todo o arquivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erro" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Erro na criação do dispositivo de contexto para %s.%s" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Erro ocorrido em %s no %sEndereço %s%s Quadro %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erro ao salvar \"bitmap\"." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exceção" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Diretório deve existir" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "O diretório \"%s\" não existe." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "O arquivo \"%s\" já existe. Sobrescrever?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Arquivo deve existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "O arquivo \"%s\" não existe." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "O arquivo \"%s\" não é gravável." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Arquivo não é gravável" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salvar arquivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir arquivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescrever arquivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Caminho deve existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "O caminho \"%s\" não existe." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecionar Diretório" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(arquivo não encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informação arquivo" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "Localizar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Localizar mais" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primeiro" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "\"FixedCols\" não pode ser >= \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "\"FixedRows\" não pode ser >= \"RowCount\"" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulário" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Fluxo formulário \"%s\" com erro: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adiante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Lilás" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Desativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatar-warnings Avisos e erros gerados por Gkt+/GDK interromperá a aplicação." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Rótulo Gradiente Ativo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Rótulo Gradiente Inativo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Gráfico" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Cinza" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto Cinza" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice grade fora de faixa." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" não pode ser menor que um \"GroupIndex\" anterior dos itens de menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histórico:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguindo convenções Xt, a classe do programa é o nome do programa com o caractere inicial em maiúsculo. Por exemplo, o nome de classe para gimp é \"Gimp\". Se \"--class\" for especificado, a classe do programa será definida para \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta com o servidor X especificado, onde \"h\" é o nome do servidor, \"s\" é o número do servidor (normalmente 0), e \"d\" é o número da tela (tipicamente omitido). Se \"--display\" não for especificado, a variável de ambiente \"DISPLAY\" é usada." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module módulo Carregar o módulo especificado na inicialização." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name nomeprograma Define nome do programa para \"nomeprograma\". Se não especificado, nome do programa será definido para \"ParamStrUTF8(0)\"." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Desativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Não defina ordenação transiente para formulários modais" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desativa uso da Extensão Compartilhada de Memória do X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chama XSynchronize (display, True) após ser estabelecida a conexão com Xserver. Isto torna fácil a depuração de erros de protocolo do X, porque as solicitações de armazenamento do X serão desativadas e erros do X serão recebidos imediatamente, após as solicitações de protocolo que geraram os erros, tenham sido processadas pelo servidor X." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ajuda" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: já registrado" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Ajuda contextual não encontrada" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Banco de dados de ajuda não encontrado" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erro na ajuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Ajuda contextual %s não encontrada." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, fuzzy,badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Ajuda contextual %s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, fuzzy,badformat #| msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Banco de dados Ajuda %s%s%s não encontra visualizador para página de ajuda do tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound #, fuzzy,badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Banco de dados de ajuda %s%s%s não encontrado" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Palavra-chave Ajuda %s%s%s não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Palavra-chave Ajuda %s%s%s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, fuzzy,badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Nó ajuda %s%s%s não tem banco de dados ajuda" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nenhuma ajuda encontrada para a linha %d, coluna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nenhum nó de ajuda disponível" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Ajuda não encontrada" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: não registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erro no seletor de ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, fuzzy,badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Não ha visualizador para tipo ajuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erro no visualizador de ajuda" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visualizador de ajuda não encontrado" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Realçar" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texto realçado" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz Quente" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Recurso de ícone OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ícone" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Imagem ícone não pode estar vazia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Imagem ícone deve ter o mesmo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossível alterar formato da imagem do ícone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Imagem ícone deve ter o mesmo tamanho" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossível alterar tamanho da imagem do ícone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ícone não tem imagem atual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borda Inativa" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsindexoutofbounds #, fuzzy,badformat msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %s fora dos limites 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fora de faixa Célula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informações plano de fundo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informações Texto" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserir" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Data Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data Inválida: %s. Deve estar entre %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "fluxo de objeto de Formulário inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propriedade inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato fluxo inválido" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s já está associado com %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "\"Joint Picture Expert Group\"" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limão" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Índice lista excede o limite (%d)" #: lclstrconsts.rsmacosmenuhide msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrom" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Todos" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fechar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Não" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Não para todos" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Tentar novamente" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salvar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Destravar" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sim" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sim para &todos" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Cinza Médio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Realce Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dinheiro" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticação" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmação" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erro" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informação" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Aviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul marinho" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Próximo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nenhum" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Não é um arquivo de grade válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nenhum objeto \"widgetset\". Favor verificar se a unidade \"interfaces\" foi adicionada à cláusula \"uses\" do programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecionar uma data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "\"Pixmap\"" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "\"BitMap\" portátil" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "\"GrayMap\" portátil" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Gráfico Rede Portátil (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "\"PixMap\" portátil" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Postar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Propriedade %s inexistente" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Roxo" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (apenas sob X11), executando sob um depurador pode causar um -nograb implícito, use -dograb para subrepor. Necessita QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "parâmetro -graphicssystem, define a retaguarda para ser usada com \"widgest\" de tela e QPixmaps. Opções disponíveis são: \"native\",\"raster\" e \"opengl\". OpenGL ainda está instável." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, diz ao QT para nunca capturar o mouse ou teclado. Necessário QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, define a direção do \"layout\" da aplicação para Qt::RightToLeft (Direita para esquerda)." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessão, restaura a aplicação de uma sessão anterior." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style estilo ou -style=estilo, define o estilo do GUI da aplicação. Valores possíveis são \"motif\", \"windows\" e \"platinum\". Se você compilou o QT com estilos adicionais ou tem \"plugins\" de estilo adicionais, estes estarão disponíveis para a opção em linha do comando -style. NOTA: Nem todos os estilos estão disponíveis em todas plataformas. Se o parâmetro estilo não existir, QT iniciará a aplicação com um estilo comum padrão (\"windows\")." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet folha-de-estilo ou -stylesheet=folha-de-estilo, define a Folha de Estilo da aplicação. O valor deve ser um caminho para o arquivo que contenha a folha de estilo. Nota: URLs relativas no arquivo de folha de estilo, são relativas para o caminho do arquivo de folha de estilo." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (apenas sob X11), alterna para o modo síncrono para depuração." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, imprime mensagem de depuração no final sobre o número de \"widgets\" que sobraram sem ser destruídos e o número máximo de \"widgets\" co-existentes ao mesmo tempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg ou -background color, define a cor de fundo padrão e a paleta da aplicação (sombreamento claro e escuro são calculados)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ou -button color, define a cor padrão de botões." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, provoca a instalação de um mapa de cores reservado em uma tela de 8-bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display tela, define a tela do X (padrão é $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ou -foreground color, define a cor padrão do primeiro plano." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn ou -font fonte, define a fonte da aplicação. A fonte deve ser informada usando uma descrição lógica de fonte X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, define a geometria do cliente da primeira janela a ser mostrada." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, define o servidor de métodos de entrada (equivale a configurar a variável de ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, define como as entradas são inseridas em um dado \"widget\", ex. \"onTheSpot\" faz a entrada aparecer diretamente no \"widget\", ao passo que \"overTheSpot\" faz a entrada aparecer em uma caixa flutuante sobre o \"widget\" e não é inserido até o término da edição." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, define o nome da aplicação." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols contador, limita o número de cores alocadas no cubo de cores de uma tela 8-bits, se a aplicação estiver usando a especificação QApplication::ManyColor. Se o contador for 216 então um cubo de cor de 6x6x6 é usado (ou seja 6 níveis de vermelho, 6 de verde e 6 de azul); para outros valores, um cubo aproximadamente de 2x3x1 será usado." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title título, define o título da aplicação." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, força a aplicação a usar um visual TrueColor em uma tela de 8-bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "\"Endupdate\" sem nenhuma atualização em andamento" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossível salvar imagem durante atualização" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossível iniciar \"atualizar tudo\" durante atualização \"somente canvas\"" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Vermelho" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substituir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substituir todos" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de rolagem" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriedade da Barra de rolagem fora de faixa" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selecionar cor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecionar uma fonte" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Prata" #: lclstrconsts.rssize msgid " size " msgstr " tamanho " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul Celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Verde Musgo" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato Arquivo Imagem \"Tagged\"" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossível carregar fonte padrão" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erro desconhecido, favor relatar esta falha" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensão da imagem desconhecida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato imagem desconhecido" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato \"bitmap\" não suportado." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato aréa de transferência não suportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVISO: Há %d \"DCs\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: Há %d \"GDIObjects\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVISO: Há %d mensagens restantes na fila! Liberando." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: Há %d estruturas \"TimerInfo\" restantes. Liberando" #: lclstrconsts.rswarningunremovedpaintmessages #, fuzzy,badformat msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVISO: Há %d, vínculos de mensagem \"LM_PAINT/LM_GtkPAINT\" não removidos, restantes." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Branco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Somente palavras inteiras" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erro:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Aviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Janela" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Quadro Janela" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto Janela" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarelo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossível focar uma janela inativa ou invisível" #: lclstrconsts.scannotsetdesigntimeppi msgid "Cannot set design time PPI." msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Criação de ação inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeração de ação inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de ação inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de ação inválida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "O conjunto de caracteres na máscara \"%s\" não é válido!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamanho de imagem inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice \"ImageList\" inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice Menu fora de faixa" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" é nulo (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu não está no menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abaixo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerda" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Direita" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espaço" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Acima" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nenhum temporizador disponível" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo sílaba incorreta: %s esperado" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Número de ponto flutuante inválido: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Número inteiro inválido: %s" #: lclstrconsts.sparlocinfo #, fuzzy,badformat #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(em %s,%s, deslocamento fluxo %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor \"byte\" em aberto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sequência de caracteres em aberto" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sshellctrlsbytes msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.no.po����������������������������������������������������0000644�0001750�0000144�00000116617�15104114162�020646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: FreewareTips <http://home.c2i.net/freewaretips/>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Leser %s%s%s ikke kjørbar." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Leser %s%s%s ikke funnet." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format, fuzzy, badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Feil ved kjøring av %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Ikke istand til å finne en HTML-leser." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format, fuzzy, badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Hjelp-databasen %s%s%s var ikke istand til å finne fil %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makroen %s i BrowserParams blir erstattet av URL-en." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Hjelp" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ukjent" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resurs %s ikke funnet" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "En kontroll kan ikke ha seg selv som overordnet" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Alle filer (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Bakover" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bilder (bmp)" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Blank" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Avbryt" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kan ikke fokusere" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Kanvas tillater ikke tegning" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Skill mellom store/små bokstaver" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "tillatelse brukergruppe størrelse dato tid" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Retning" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Mappe" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Feil" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Feil ved opprettelse av enhetskontekst for %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Feil forekom i %s ved %sadresse %s%s ramme %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Feil ved lagring av bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Unntagelse" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Mappe må eksistere" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Mappen \"%s\" eksisterer ikke." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Filen \"%s\" eksisterer allerede. Overskrive ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Fil må eksistere" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Filen \"%s\" eksisterer ikke." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Filen \"%s\" er ikke skrivbar." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Fil er ikke skrivbar" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Lagre fil som" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Åpne eksisterende fil" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Overskrive fil ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Bane må eksistere" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Banen \"%s\" eksisterer ikke." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Velg mappe" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(fil ikke funnet: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Fil-informasjon" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "Finn" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Finn mer" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols kan ikke være >= ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows kan ikke være >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Form streaming \"%s\" feil: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Fram" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Sett på spesifikke GDK trace/debug meldinger." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Slå av spesifikke GDK trace/debug meldinger." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Advarsler og feil generert av Gtk+/GDK vil stoppe programmet." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Rutenettindeks utenfor område." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex kan ikke være mindre enn et forutgående menyelements GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historikk:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Ifølge Xt konvensjoner, er klassen til et program, programnavnet med stor forbokstav. For eksempel, klassenavnet gimp er \"Gimp\". Hvis --klasse er spesifisert, vil klassen til programmet bli satt til \"klassenavn\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Sett på spesifikke Gtk+ trace/debug meldinger." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Koble til den spesifiserte X serveren, hvor \"h\" er vertsnavnet, \"s\" er servernummeret (vanligvis 0), og \"d\" er visningsnummeret (typisk utelatt). Hvis --visning ikke er spesifisert, brukes DISPLAY miljø-variablen." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Last spesifiserte modul ved oppstart." #: lclstrconsts.rsgtkoptionname #, fuzzy #| msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStr(0)." msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Sett programnavn til \"prognavn\". Hvis ikke spesifisert, vil programnavn bli satt til ParamStr(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Slå av spesifikke Gtk+ trace/debug meldinger." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Ikke sett transient rekkefølge for modale formularer" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Deaktiver bruk av X Shared Memory utvidelsen." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kall opp XSynchronize (display, True) etter at Xserver-forbindelsen er etablert. Dette gjør feilsøking av X protokoll lettere, fordi X forespørsel buffering blir deaktivert og X feil blir mottatt umiddelbart etter at protokoll-forespørselen som genererte feilen, har blitt behandlet av X serveren." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Hjelp" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Allerede registrert" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Hjelp kontekst ikke funnet" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Hjelp-database ikke funnet" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hjelp-feil" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Hjelp-kontekst %s ikke funnet." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Hjelp-kontekst %s ikke funnet i database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy, badformat #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Hjelp-database %s%s%s fant ingen viser for en hjelpeside av type %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Hjelp-database %s%s%s ikke funnet" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Hjelp-nøkkelord %s%s%s ikke funnet." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Hjelp-nøkkelord %s%s%s ikke funnet i database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Hjelpnode %s%s%s har ingen Hjelp-database" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Ingen hjelp funnet for linje %d, kolonne %d av %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Ingen hjelp-noder tilgjengelig" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Hjelp ikke funnet" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Ikke registrert" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hjelp-selektor-feil" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy, badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Det er ingen viser for hjelpetype %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hjelpeviser-feil" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Hjelp-viser ikke funnet" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format, fuzzy #| msgid "%s Index %d out of bounds 0-%d" msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d utenfor område 0-%d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks utenfor område Celle[Kol=%d Rekke=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Ugyldig dato : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ugyldig dato: %s. Må være mellom %s og %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "ugyldig formularobjekt-stream" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ugyldig egenskapsverdi" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Ugyldig stream format" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s er allerede assosiert med %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Liste-indeks overskrider grenser (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Avbryt" #: lclstrconsts.rsmball msgid "&All" msgstr "&Alle" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Avbryt" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Lukk" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Hjelp" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nei" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nei til alt" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Prøv igjen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja til &alt" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Meny" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " endret" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bekreftelse" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Egen" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Feil" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informasjon" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Advarsel" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Neste" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Ikke en gyldig rutenettfil" #: lclstrconsts.rsnowidgetset #, fuzzy #| msgid "No widgetset object. Plz check if the unit \"interfaces\" was added to the programs uses clause." msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Ingen widgetset-objekt. Sjekk om enheten \"interfaces\" ble lagt til programmets bruksklausul." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Velg en dato" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Før" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Egenskap %s eksisterer ikke" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Erstatt" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Erstatt alle" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resurs %s ikke funnet" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "ScrollBar-egenskap utenfor område" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Velg farge" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Velg skrift" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " størrelse" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Ikke istand til å laste standard skrift" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Ukjent feil, vennligst rapporter denne feil" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ukjent bilde-endelse" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Ikke støttet bitmap-format." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Ikke støttet utklippstavleformat: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ADVARSEL: Det er %d ikke-frigitte DCs, her er detaljer:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ADVARSEL: Det er %d ikke-frigitte GDIObjekter, her er detaljer:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ADVARSEL: Det er %d meldinger igjen i køen! De blir frigitt" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ADVARSEL: Det er %d TimerInfo-strukturer igjen, De blir frigitt" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ADVARSEL: Det er %s ikke-fjernede LM_PAINT/LM_GtkPAINT meldingslenker igjen." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Bare hele ord" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Feil:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Advarsel:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kan ikke fokusere et deaktivert eller usynlig vindu" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikate menyer" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ugyldig handlings-opprettelse" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ugyldig handlings-nummerering" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ugyldig handlings-registrering" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ugyldig handlings-avregistrering" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ugyldig bildestørrelse" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ugyldig bildeliste-indeks" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menyindeks utenfor område" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menyelement er nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Undermeny er ikke i meny" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Ned" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Venstre" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Høyre" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Opp" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Ingen timere tilgjengelig" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" �����������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.nl.po����������������������������������������������������0000644�0001750�0000144�00000130706�15104114162�020636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2017-07-16 00:52+0100\n" "Last-Translator: BigChimp <nowhere@example.com>\n" "Language-Team: LazPaint\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format, fuzzy #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Browser \"%s\" niet uitvoerbaar" #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format, fuzzy #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Browser \"%s\" niet gevonden" #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format, fuzzy #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Fout tijdens uitvoeren van \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Geen HTML browser kunnen vinden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Geen HTML browser gevonden.%sDefinieer deze alstublieft via Hulpmiddelen -> Opties -> Help -> Help Opties" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format, fuzzy #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "De help database \"%s\" heeft bestand \"%s\" niet kunnen vinden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "De macro %s in BrowserParams zal worden vervangen door de URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Onbekend" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resource %s is niet gevonden" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Donkere Schaduw" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Een control kan niet zijn eigen ouder zijn" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Actieve Rand" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Actieve Titel" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Alle bestanden (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Applicatie-werkruimte" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Klasse %s kan niet %s als ouder hebben." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Bureaublad" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Achteruit" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Zwart" #: lclstrconsts.rsblank msgid "Blank" msgstr "Spatie" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blauw" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Knopvoorgrond" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Knop Highlight" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Knop Schaduw" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Knoptekst" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Rekenmachine" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Annuleren" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kan geen focus geven" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Er kan op het canvas niet getekend worden" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Bijschrifttekst" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Hoofdletter gevoelig" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Control van klasse '%s' kan control van klasse '%s' niet als kind hebben" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Control '%s' heeft geen ouder-form of frame" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' is geen ouder van '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Cream" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Aangepast ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Standaard" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissies gebruiker groep grootte datum tijd" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Record verwijderen?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Verwijder" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Richting" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Map" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopiëren" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Plakken" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicaat icoonformaat." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Bewerken" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Doorzoek gehele bestand" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fout" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Fout tijdens het maken van een DC voor %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Er is een fout opgetreden in %s op %sAdres %s%s Frame %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Fout tijdens opslaan van bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Fout" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Directory moet bestaan" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "De map \"%s\" bestaat niet." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Het bestand \"%s\" bestaat al. Overschrijven?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Bestand moet bestaan" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Het bestand \"%s\" bestaat niet." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Het bestand \"%s\" kan niet geschreven worden." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Kan bestand niet schrijven" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Bestand opslaan als" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Open een bestaand bestand" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Bestand overschrijven?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Het pad moet bestaan" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Het pad \"%s\" bestaat niet." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Kies map" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(bestand niet gevonden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Bestandsinformatie" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filter)" #: lclstrconsts.rsfind msgid "Find" msgstr "Zoek" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Zoek meer" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Eerste" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols kan niet > ColCount zijn" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows kan niet > RowCount zijn" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulier" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Formulier resource %s niet gevonden. De CreateNew constructor moet gebruikt worden voor resourceloze formulieren. Zie de globale variable RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "\"%s\" fout: %s bij het streamen van form." #: lclstrconsts.rsforward msgid "Forward" msgstr "Vooruit" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Zet bepaalde GDK trace/debug berichten aan." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Zet bepaalde GDK trace/debug berichten uit." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings De applicatie stopt bij waarschuwingen en fouten gegenereerd door GtK+/GDK." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Verloop Actief Bijschrift" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Verloop Inactief Bijschrift" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Afbeelding" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grijs" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Grijze Tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Groen" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Rooster bestand bestaat niet" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Kan geen rijen invoegen als het rooster geen kolommen heeft" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Kan geen kolommen invoegen als het rooster geen rijen heeft" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Rooster index buiten bereik" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "De GroupIndex kan niet minder zijn dan de GroupIndex van een vorig item." #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historie:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class klassenaam Volgens de Xt conventies, is de klasse van een programma de naam van dat programma met de eerste letter als kapitaal. Bijv. the klassenaam voor gimp is \"Gimp\". Als de --class optie is meegegeven, wordt de klasse van het programma gezet op \"klassenaam\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Zet bepaalde GtK+ trace/debug berichten aan." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Start het programma op de genoemde X server, waarbij \"h\" de hostnaam is, \"s\" het nummer van de server (meestal 0), en \"d\" is het display nummer (vaak weggelaten). Als --display niet is meegegeven, wordt de DISPLAY omgevings variabele gebruikt." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Laad de betreffende module tijdens het starten." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Zet programmanaam op \"progname\". Als niet gespecificeerd zal programmanaam gezet worden op ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Zet bepaalde GtK+ trace/debug berichten uit." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Zet geen overdraagbare volgorde voor modale schermen" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Maak geen gebruik van de X Shared Memory Extensie." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Roep XSynchronize (display, True) aan na verbinding met de Xserver. Dit maakt het debuggen van X protocol fouten eenvoudiger, doordat X aanvraag buffering uitstaat en X fouten direct ontvangen worden nadat de aanvraag door de Xserver is behandeld." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Help" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Al vastgelegd" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Helpdatabase gevonden voor dit onderwerp, maar het onderwerp is niet gevonden" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Geen helpdatabase geïnstalleerd voor dit onderwerp" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Help Fout" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Help context %s niet gevonden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Help context %s niet gevonden in Database \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Help Database \"%s\" heeft geen viewer gevonden voor help pagina van type %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Help Database \"%s\" niet gevonden" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Help voor directive \"%s\" niet gevonden." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Help voor directive \"%s\" niet gevonden in Database \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Help sleutelwoord \"%s\" niet gevonden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Help sleutelwoord \"%s\" niet gevonden in Database \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Help node \"%s\" heeft geen Help Database" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Geen help gevonden voor regel %d, kolom %d van %s. " #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Geen help nodes beschikbaar voor dit onder" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Help niet gevonden voor dit onderwerp" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Niet vastgelegd" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Help Selectie fout" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Er is geen viewer voor help type \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Help Viewer Fout" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Geen viewer gevonden voor dit type helpinhoud" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Highlight" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Highlight Tekst" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hot Light" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X Icoon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Icoonafbeelding mag niet leeg zijn" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Icoonafbeelding moet hetzelfde formaat hebben" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kan formaat van icoonafbeelding niet aanpassen" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Icoonafbeelding moet dezelfde afmeting hebben" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kan afmetingen van icoonafbeelding niet aanpassen" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Icoon heeft geen huidige afbeelding" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inactieve Rand" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inactieve Titel" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inactieve Titel" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d valt buiten de grenzen 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index buiten de grenzen Cell[Col=%d Ro=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Info Achtergrond" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Info Tekst" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Invoegen" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Ongeldige datum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ongeldige datum: %s. Datum moet liggen tussen %s en %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Ongeldige form objectstream" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ongeldige eigenschap waarde" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Omgeldig stream format" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s is al verbonden met %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Laatste" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limoen" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Lijst index overschreidt grenzen (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kastanje" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Afbreken" #: lclstrconsts.rsmball msgid "&All" msgstr "&Alles" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuleer" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Sluiten" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Help" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Negeer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nee" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nee op alles" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Openen" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opnieuw" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Opslaan" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Ontgrendelen" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja op &Alles" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Middel Grijs" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menubalk" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu Highlight" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menutekst" #: lclstrconsts.rsmodified msgid " modified " msgstr " gewijzigd " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Geld Groen" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Authenticatie" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bevestiging" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Eigen" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fout" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informatie" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Waarschuwing" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marineblauw" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Volgende" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Geen" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Geen geldig grid bestand" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Geen widgetset object. Controleer of the unit \"interface\" is toegevoegd aan de \"uses\" van het programma." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olijfgroen" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Kies een datum" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Versturen" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sKlik OK to om te negeren en riskeer data corruptie.%sKlik Afbreken om het programma te beëindigen." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorige" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Vraag bij vervangen" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Eigenschap %s bestaat niet" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Paars" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (alleen onder X11), in een debugger runnen kan een impliciete -nograb veroorzaken, gebruik -dograb om op te heffen. Vereist QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem parameter, bepaalt de backend voor schermwidgets en QPixmaps. Beschikbare opties: native, raster, opengl. OpenGL is nog onstabiel." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, meldt Qt dat Qt toetsenbord of muis nooit moet overnemen. Vereist QT_DEBUG" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, zet de applicatie layoutrichting op Qt::RightToLeft" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, zet de applicatie terug vanuit een eerdere sessie." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style of -style=style, zet de applicatie GUI stijl. Mogelijke waarden: motif, windows en platinum. Als je Qt compileerde met aanvullende stijlen of aanvullende stijlplugins hebt, zijn deze beschikbaar voor de -style commandoregeloptie. NB: Niet alle stijlen zijn beschikbaar op alle platformen. Als de stijlparameter niet bestaat, start Qt een applicatie met de standaard algemene stijl (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet of -stylesheet=stylesheet, bepaalt de Style Sheet van de applicatie. De waarde moet een pad naar een bestand zijn dat de Style Sheet bevat. NB: relatieve URLs in het Style Sheet bestand zijn relatief m.b.t. het pad van het Style Sheet-bestand." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (alleen onder X11), schakelt naar synchrone modus voor debuggen." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, print debugbericht aan het einde over het aantal onvernietigde widgets en maximumaantal widgets tezelfder tijd." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg of -background color, stelt standaard achtergrondkleur in en een applicatiepalet (lichte en donkere tinten worden berekend)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn of -button color, bepaalt standaard knopkleur." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, zorgt ervoor dat de toepassing een privé-kleurenschema op een 8-bit weergave gebruikt." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, bepaalt X display (standaard $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg of -foreground color, bepaalt standaard voorgrondkleur." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn of -font font, bepaalt het applicatielettertype. Het lettertype moet gespecificeerd worden middels een X logical font description." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, bepaalt de client geometrie van het eerste getoonde venster." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, bepaalt de inputserver (equivalent aan instellen van de XMODIFIERS omgevingsvariabele)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, bepaalt hoe de input ingevoegd wordt in het gegeven widget, bijv. onTheSpot toont input direct in het widget, terwijl overTheSpot input toont in een rechthoek zwevend boven het widget, die pas ingevoegd wordt wanneer invoer voltooid is." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, stelt applicatienaam in." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, beperkt het aantal kleuren toegewezen aan de color cube (kleurenkubus) van een 8-bit scherm, als de applicatie de QApplication::ManyColor kleurenspecificatie gebruikt. Als count 216 is, wordt een 6x6x6 kubus gebruikt (d.w.z. 6 roodniveaus, 6 groen, 6 blauw); voor andere waarden wordt een kubus ongeveer proportioneel aan een 2x3x1 kubus gebruikt." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, stelt applicatietitel in." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, dwingt de applicatie om een TrueColor uiterlijk op een 8-bits weergave te gebruiken." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate zolang er geen update gaande is" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kan afbeelding niet opslaan terwijl update loopt" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kan update niet beginnen omdat een alleen canvas update loopt" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rood" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Verversen" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Vervang" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Vervang alles" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resource %s is niet gevonden" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Schuifbalk" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Schuifbalk eigenschap buiten bereik" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Kies een kleur" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Kies een font" #: lclstrconsts.rssilvercolorcaption #, fuzzy msgid "Silver" msgstr "Zilver" #: lclstrconsts.rssize msgid " size " msgstr " afmeting " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Hemelsblauw" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Een controlmet Tabs" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Blauwachtig groen (teal)" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Paneel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Een grijper om te bepalen hoeveel ruimte te geven aan twee delen van een oppervlakte" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Een boomstructuur van items" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kan het standaard font niet laden" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Onbekende Fout, rapporteer alstublieft deze fout" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Onbekende extensie voor plaatje" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Onbekend afbeeldingformaat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Niet ondersteund bitmap formaat." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Niet ondersteund klembord formaat: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " WAARSCHUWING: Er zijn nog %d DCs niet vrijgegeven, een gedetailleerde dump volgt:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " WAARSCHUWING: Er zijn nog %d GDIObject niet vrijgegeven, een gedetailleerde dump volgt:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " WAARSCHUWING: Er staan nog %d berichten in de queue! Deze worden nu vrijgegeven" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " WAARSCHUWING: Er zijn %d TimerInfo structuren overgebleven. Deze worden nu vrijgegeven" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " WAARSCHUWING: Er zijn %s LM_PAINT/LM_GtkPAINT berichten niet verwijderd." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Wit" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Alleen hele woorden" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fout:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Waarschuwing:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Venster" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Vensterrand" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Venstertekst" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Geel" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kan geen focus geven aan een onzichtbaar of disabled venster" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Dubbele menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ongeldige aktie aangemaakt" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ongeldige aktie opsomming" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ongeldige aktie registratie" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ongeldige aktie de-registratie" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ongeldig formaat voor afbeelding " #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ongeldige index van ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "De huidige tekst komt niet overeen met het gespecificeerde masker." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index van menu buiten de grenzen" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem is nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu niet in menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Bksp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Neer" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Eind" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Links" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Rechts" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Space" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Omhoog" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Geen timers beschikbaar" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Control \"%s\" heeft geen ouder-venster." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Verkeerd tokentype: %s verwacht" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Ongeldig drijvende komma-getal: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Ongeldige geheel getal: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (bij %d,%d, stream offset %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Niet-afgesloten bytewaarde" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Niet-afgesloten string" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Verkeerd tokensymbool: %s verwacht maar %s gevonden" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Verkeerd tokentype: %s verwacht maar %s gevonden" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bytes" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Ongeldige mapnaam:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Ongeldige relatieve mapnaam:\n" "\"%s\"\n" "in relatie tot rootmap:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Ongeldige mapnaam:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Naam" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Het geselecteerde item bestaat niet of schijf:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Grootte" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Type" ����������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.lt.po����������������������������������������������������0000644�0001750�0000144�00000132545�15104114162�020647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Valdas Jankunas <zmuogs@gmail.com>, 2017. msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2017-07-07 22:36+0200\n" "Project-Id-Version: lclstrconsts\n" "Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n" "X-Generator: Lokalize 2.0\n" "MIME-Version: 1.0\n" "Last-Translator: Valdas Jankunas <zmuogs@gmail.com>\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "POT-Creation-Date: \n" "Language: lt\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Naršyklė „%s“ nėra vykdomasis failas." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Naršyklė „%s“ nerasta." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Įvyko klaida vykdant „%s“:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepavyko rasti HTML naršyklės." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nerasta HTML Naršyklė.%sJą galima nustatyti „Aplinka -> Aplinkos parinktys -> Žinynas -> Žinyno parinktys“" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Žinyno duomenų bazė „%s“ nerado failo „%s“." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makrokomanda %s naršyklės parametruose bus pakeista URL reikšme." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Vald" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Žinynas" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Lyg2" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Nežinomas" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resursas %s nerastas" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tamsumos šešėlis" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D šviesuma" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Valdiklio tėvas negali būti pats valdiklis" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktyvus rėmelis" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktyvi antraštė" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Visi failai (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Programos darbo laukas" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Žydra" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Klasė „%s“ negali turėti „%s“ kaip tėvo." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Darbalaukis" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atgal" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Rastriniai paveikslai" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Juoda" #: lclstrconsts.rsblank msgid "Blank" msgstr "Tuščias" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Mėlyna" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Mygtuko paviršius" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Mygtuko paryškinimas" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Mygtuko šešėlis" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Mygtuko tekstas" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Skaičiuotuvas" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Atsisakyti" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Negalima sufokusuoti" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Į „Canvas“ negalima piešti" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Antraštės tekstas" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Skirti raidžių lygį" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "„%s“ klasės valdiklis negali būti „%s“ klasės valdiklio tėvas" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Valdiklis „%s“ neturi tėvinės formos ar kadro" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "„%s“ nėra „%s“ tėvas" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kreminė" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Žymeklis" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Naudotojo…" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Numatytasis" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "leidimai naudotojas grupė dydis data laikas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Ištrinti įrašą?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Šalinti" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Kryptis" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Aplankas" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopijuoti" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Įdėti" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Piktogramos formatai dubliuojasi." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Redaguoti" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Ieškoti visame faile" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Klaida" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Įvyko klaida kuriant įrenginio kontekstą, skirtą %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s įvyko klaida:%sadresas %s%s, kadras %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Įrašant rastrinį paveikslą įvyko klaida." #: lclstrconsts.rsexception msgid "Exception" msgstr "Išimtinė situacija" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Aplankas turi egzistuoti" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Aplankas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Failas „%s“ jau yra. Perrašyti?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Failas turi egzistuoti" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Failas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Failas „%s“ nėra skirtas rašymui." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Failas nėra skirtas rašymui" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Įrašyti failą kaip" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Atverti egzistuojanti failą" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Perrašyti failą?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Kelias turi egzistuoti" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Kelias „%s“ neegzistuoja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Pasirinkite katalogą" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(failas nerastas: „%s“)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacija apie failą" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtras)" #: lclstrconsts.rsfind msgid "Find" msgstr "Ieškoti" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Ieškoti toliau" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Pirmasis" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "Fiksuotų stulpelių negali būti daugiau nei stulpelių skaičius" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "Fiksuotų eilučių negali būti daugiau nei eilučių skaičius" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Forma" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Nepavyko rasti formos ištekliaus „%s“. Formoms be išteklių turi būti naudojamas „CreateNew“ konstruktorius. Žvilktelėkite į globalų kintamąjį „RequireDerivedFormResource“." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Formą siunčiant srautu „%s“ įvyko klaida: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Pirmyn" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Šviesi purpurinė" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug žymės Įjungti specialius GDK sekimo/derinimo pranešimus." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug žymės Išjungti specialius GDK sekimo/derinimo pranešimus." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Įspėjimai ir klaidos, sugeneruotos GTK+ ar GDK, nutrauks programos darbą." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Aktyvios antraštės gradientas" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Neaktyvios antraštės gradientas" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafinis" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Pilka" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Neveiksnus tekstas" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Žalia" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Lentelės failas neegzistuoja" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Neimanoma lentelėn įterpti eilučių kai ji neturi stulpelių" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Neimanoma lentelėn įterpti stulpelių kai ji neturi eilučių" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Tinklelio indeksas peržengia ribas." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "„GroupIndex“ negali būti mažesnis už ankstesnių menių punktų „GroupIndex“" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtras:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Istorija:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class klasės_pavadinimas Pagal Xt susitarimą, programos klasė yra programos pavadinimas, kuriame pirmoji raidė yra didžioji. Pavyzdžiui: GIMP programos klasė yra „Gimp“. Jei --class nurodytas, tai klasės pavadinimas bus priskirtas „klasės_pavadinimas“." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug žymės Įjungti specialius GTK+ sekimo/derinimo pranešimus." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Prisijungti prie nurodyto X serverio, čia „h“ yra hostname, „s“ - serverio numeris (paprastai 0), ir „d“ - ekrano numeris (dažniausia praleidžiamas). Jei --display nenurodytas, tada naudojamas aplinkos kintamasis DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulis Paleidimo metu įkelti nurodytą modulį." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programa Programos pavadinimą nustatyti į „programa“. Jei nenurodyta, tai programos pavadinimas bus nustatytas į ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug žymės Išjungti specialius GTK+ sekimo/derinimo pranešimus." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Modalinėms formoms nesudaryti pereinamosios tvarkos" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Nenaudoti „X Shared Memory“ plėtinio." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kai XServer ryšys sukurtas, vykdyti „XSynchronize (display, True)“. Tai palengvins X protokolo klaidų derinimą, nes bus išjungtas X kreipinių buferis ir X serveriui apdorojant protokolo kreipinį įvykusi klaida bus gauta iškart." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Žinynas" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: jau yra registruotas" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Šiai temai rasta žinyno duomenų bazė, tačiau pačios temos rasti nepavyko" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Šiai temai nėra įdiegtos žinyno duomenų bazės" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Žinyno klaida" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Žinyno turinys %s nerastas." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Žinyno turinys „%s“ duomenų bazėje „%s“ nerastas." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Žinyno duomenų bazė „%s“ nerado žiūryklės „%s“ tipo žinyno lapui." #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Žinyno duomenų bazė „%s“ nerasta." #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Žinyne nėra informacijos apie direktyvą „%s“." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Informacijos apie direktyvą „%s“ duomenų bazėje „%s“ nerasta." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Žinyno raktažodis „%s“ nerastas." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Žinyno raktažodis „%s“ duomenų bazėje „%s“ nerastas." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Žinyno mazgas „%s“ neturi žinyno duomenų bazės." #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Žinyne nėra duomenų eilutei %d, stulpeliui %d šio %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Žinyne nėra įrašų šia tema" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Žinyne nėra informacijos šia tema" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: neregistruotas" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Žinyno parinkiklio klaida" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Nerasta žiūryklė „%s“ žinyno tipui." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Žinyno žiūryklės klaida" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nepavyko rasti žiūryklės šio tipo žinyno turiniui" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Paryškinimas" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Paryškintas tekstas" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Indikatorius" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "OSX piktogramos piktograma" #: lclstrconsts.rsicon msgid "Icon" msgstr "Piktograma" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Piktogramos paveikslas turi būti netuščias" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Piktogramos paveikslas turi būti to paties formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Negalima pakeisti piktogramos paveikslo formato" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Piktogramos paveikslas turi būti to paties dydžio" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Negalima pakeisti piktogramos paveikslo dydžio" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Piktograma neturi veikiamojo paveikslėlio" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Neaktyvus rėmelis" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Neaktyvi antraštė" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Neaktyvi antraštė" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indeksas %d peržengia ribas 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Langelio [stulpelis = %d, eilutė = %d] indeksas peržengia ribas" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fonas informacijai" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informacijos tekstas" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Įterpti" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Netinkama data: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Netinkama data: %s. Ji turi būti tarp %s ir %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "netinkamas formos objekto srautas" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Netinkama savybės reikšmė" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Netinkamas srauto formatas" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s jau yra susietas su %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Paskutinysis" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Gelsvai žalsva" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Sąrašo indeksas peržengė ribas (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kaštoninė" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Nutraukti" #: lclstrconsts.rsmball msgid "&All" msgstr "&Visi" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Atsisakyti" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Užverti" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Žin&ynas" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignoruoti" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Visada ne" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Gerai" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "At&verti" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Ka&rtoti" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Į&rašyti" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Atsklęsti" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Taip" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Vis&ada taip" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Vidutiniškai pilka" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Meniu juosta" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Meniu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Paryškintas meniu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menu tekstas" #: lclstrconsts.rsmodified msgid " modified " msgstr " pakeista " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Žalsva" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Tapatumo nustatymas" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Patvirtinimas" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Naudotojo" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Klaida" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informacija" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Įspėjimas" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Tamsiai mėlyna" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Kitas" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Joks" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Netinkamas tinklelio failas" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Ne valdiklio objektas. Patikrinkite ar modulis „interfaces“ įtrauktas į programos naudojamų modulių sąrašą." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Alyvų spalva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Pasirinkite datą" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GreyMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Išsiųsti" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sSpustelėjus „Tinka“ bus tęsiama, tačiau iškils sugadintų duomenų rizika.%sSpustelėjus „Nutraukti“ programas darbas bus nutrauktas." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Ankstesnis" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Keičiant klausti patvirtinimo" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Savybė %s neegzistuoja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpurinė" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (tik su X11), derinant programą gali būti besąlygiškai nustatomas -nograb. Naudokite -dograb kad tą panaikintumėte. Reikia QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem parametras, nustato galinę sistemą, kuri bus naudojama ekrane rodomiems valdikliams ir QPixmaps. Galimi variantai yra „native“, „raster“ and „opengl“. OpenGL dar nestabilus." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, nurodo Qt, kad jis niekada neturi savintis palės ar klaviatūros. Reikia QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, nustato programos išdėstymo kryptį Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sesija, atkuria programą iš ankstesnės sesijos." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stilius arba -style=stilius, nustato programos grafinės sąsajos stilių. Galimos reikšmės: „motif“, „windows“ ir „platinum“. Jeigu turite sukompiliuotą Qt su papildomais stiliais arba turite įdiegtų papildomų stilių kaip įskiepių, juos taip pat galima naudoti „-style“ komandinės eilutės parametre. PASTABA: Ne visi stiliai yra galimi visose platformose. Jeigu stiliaus parametras neegzistuoja, Qt paleis programą naudodamas numatytąjį stilių („windows“)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stiliaus_lapas arba -stylesheet=stiliaus_lapas, nustato programos stiliaus lapą. Reikšmė turi būti kelias iki failo, kuriame yra stiliaus lapas. Pastaba: santykiniai URL stiliaus lapo faile turi būti santykiniai stiliaus lapo failo keliui." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (tiktai su X11), perjungia į sinchronizuotą veikseną derinimui." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, pabaigoje atspausdina derinimo žinutę, pasakančią kiek valdiklių yra likusių nesunaikintų ir kiek daugiausiai valdiklių egzistavo vienu metu." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg arba -background spalva, nustato numatytąją fono spalvą ir programos paletę (šviesusis ir tamsusis atspalviai yra apskaičiuojami)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn arba -button spalva, nustato numatytąją mygtukų spalvą." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, priverčia programą įdiegti privatų spalvų atvaizdį 8 bitų monitoriuje." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display monitorius, nustato X monitorių (numatytasis yra $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg arba -foreground spalva, nustato numatytąją priekinio plano spalvą." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn arba -font šriftas, nurodo programos šriftą. Šriftas turi būti nurodomas naudojantis X loginiu šrifto deskriptoriumi." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometrija, nustato pirmojo parodomo lango geometriją." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, nustato įvesties metodo serverį (tas pats, kas nustatyti XMODIFIERS aplinkos kintamąjįi)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, nurodo kaip įvestis yra įterpiama į duotąjį valdiklį, pvz. „onTheSpot“ padaro taip, kad įvestis atsirastų tiesiai valdiklyje, o „overTheSpot“ padaro taip, kad įvestis atsiranda langelyje esančiame virš valdiklio ir įteriamas tik tada, kai redagavimas baigiamas." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name pavadinimas, nustato programos pavadinimą." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols skaičius, riboja spalvų skaičių, paskirtų spalvų kube 8 bitų monitoriuje, jeigu programa naudoja QApplication::ManyColor spalvų specifikaciją. Jeigu skaičius yra 216 tada yra naudojamas 6x6x6 spalvų kubas (t. y. 6 raudonos lygiai, 6 žalios lygiai ir 6 mėlynos lygiai); kitoms reikšmėms yra naudojamas kubas, apytiksliai proporcingas 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title antraštė, nustato programos antraštę." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, priverčia programą naudoti TrueColor vaizdą 8 bitų monitoriuje." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "„Endupdate“, tačiau niekas neatnaujinama" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Neįmanoma įrašyti paveikslo kol jis atnaujinamas" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Visko atnaujinti negalima kai atnaujinamas tik „Canvas“" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Raudona" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atnaujinti" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Pakeisti" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Pakeisti visus" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resursas %s nerastas" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Slinkties juosta" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Savybės „ScrollBar“ vertė peržengia ribas" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Pasirinkite spalvą" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Pasirinkite šriftą" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Sidabrinė" #: lclstrconsts.rssize msgid " size " msgstr " dydis " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Dangaus žydrumo" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Valdiklis su ąselėmis" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Tamsiai žydra" #: lclstrconsts.rstext msgid "Text" msgstr "Tekstas" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "„Tagged Image File Format“" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Skydas" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Rankenėlė, kuria galima keisti dviejų srities dalių dydžius" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Elementų medis" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nepavyko įkelti numatyto šrifto" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Nežinoma klaida, prašau praneškite kūrėjams apie šią klaidą" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Nežinomas paveikslo plėtinys" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Nežinomas paveikslo formatas" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepalaikomas rastrinio paveikslo formatas." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nepalaikomas iškarpinės formatas: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Įspėjimas: liko %d neatlaisvinti „DC“, išsamiau:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Įspėjimas: liko %d neatlaisvinti „GDIObject“, išsamiau:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Įspėjimas: eilėje dar yra %d pranešimai, jie bus sunaikinti." #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Įspėjimas: dar liko %d „TimerInfo“ struktūrų, jos bus sunaikintos." #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " Įspėjimas: liko %s nepašalintos nuorodos į LM_PAINT/LM_GtkPAINT pranešimus." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Balta" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Tik ištisų žodžių" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Klaida:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Įspėjimas:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Langas" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Lango rėmelis" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Lango tekstas" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Geltona" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Negalima sufokusuoti neveiksnaus ar nematomo lango" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Meniu dubliuojasi" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Netinkamas veiksmo kūrimas" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Netinkamas veiksmo išvardijimas" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Netinkamas veiksmo registravimas" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Netinakamas veiksmo išregistravimas" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Netinkamas paveikslo dydis" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Netinkamas „ImageList“ indeksas" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Dabartinis tekstas nedera prie nurodytos kaukės." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Meniu indeksas peržengia ribas" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "„MenuItem“ reikšmė yra nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submeniu nėra įdėtas į menių" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Grįž" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Vald+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Šal" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Žemyn" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Pab" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Įvesti" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Gr" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Prad" #: lclstrconsts.smkcins msgid "Ins" msgstr "Įterpti" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Kairėn" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "Psl. žemyn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "Psl. aukštyn" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Dešinėn" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Lyg2+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Tarpas" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Aukštyn" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nėra laikmačių" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Valdiklis „\"%s“ neturi tėvinės formos." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Klaidingas leksemos tipas: tikėtasi %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Netinkamas slankaus kablelio skaičius: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Netinkamas sveikasis skaičius: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (ties %d,%d, srauto poslinkis: %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nepabaigta bitų vertė" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nepabaigta eilutė" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Klaidingas leksemos simbolis: tikėtasi %s, tačiau rasta %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Klaidingas leksemos tipas: tikėtasi %s, tačiau rasta %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s baitų" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Klaidingas kelio pavadinimas:\n" "„%s“\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Klaidingas snatykinio kelio pavadinimas:\n" "„%s“\n" "šakninio kelio atžvilgiu:\n" "„%s“\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Klaidingas kelio pavadinimas:\n" "„%s“\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Pavadinimas" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Parinktojo elemento diske nėra;\n" "„%s“\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Dydis" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tipas" �����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.ko.po����������������������������������������������������0000644�0001750�0000144�00000135236�15104114162�020641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Lazarus LCL - Korean\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: VenusGirl: https://venusgirls.tistory.com/\n" "Language-Team: 비너스걸: https://venusgirls.tistory.com/\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국어\n" "X-Generator: Poedit 3.4.2\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "\"%s\" 브라우저를 실행할 수 없습니다." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "\"%s\" 브라우저를 찾을 수 없습니다." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "\"%s\"을(를) 실행하는 동안 오류 발생: %s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML 브라우저를 찾을 수 없습니다." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML 브라우저를 찾을 수 없습니다.%s도구 -> 옵션 -> 도움말 -> 도움말 -> 도움말 옵션에서 하나를 정의하십시오" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "도움말 데이터베이스 \"%s\"가 \"%s\" 파일을 찾을 수 없습니다." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "BrowserParams의 매크로 %s가 URL로 대체됩니다." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "도움말" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "메타" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "수퍼" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "알 수 없음" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "%s 리소스를 찾을 수 없습니다" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D 어두운 음영" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D 밝은" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "컨트롤은 부모가 될 수 없습니다" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr " 활성 테두리" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "활성 캡션" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "모든 파일 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "응용 프로그램 작업 공간" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "아쿠아" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "%s 클래스는 %s을(를) 상위로 가질 수 없습니다." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "바탕 화면" #: lclstrconsts.rsbackward msgid "Backward" msgstr "뒤로" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "비트맵" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "검정" #: lclstrconsts.rsblank msgid "Blank" msgstr "공백" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "파랑" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "버튼 표면" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "버튼 강조" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "버튼 음영" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "버튼 텍스트" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "계산기" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "취소" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "초점을 맞출 수 없음" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "캔버스는 그리기를 허용하지 않습니다" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "캡션 텍스트" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "대소문자 구분" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "클래스 '%s'의 제어는 하위 클래스 '%s'의 제어를 가질 수 없습니다" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "'%s' 컨트롤에 상위 형식 또는 프레임이 없습니다" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s'는 '%s'의 상위가 아닙니다" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "크림색" #: lclstrconsts.rscursor msgid "Cursor" msgstr "커서" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "사용자 지정..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "기본값" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "권한 사용자 그룹 크기 날짜 시간" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "레코드를 삭제하시겠습니까?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "삭제" #: lclstrconsts.rsdirection msgid "Direction" msgstr "방향" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "디렉터리(&D)" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "복사" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "붙여넣기" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "중복 아이콘 형식입니다." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "편집" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "전체 파일 검색" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "오류" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "%s.%s에 대한 장치 컨텍스트를 생성하는 중 오류가 발생했습니다" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s주소 %s 프레임 %s에서 %s에서 오류가 발생했습니다" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "비트맵을 저장하는 동안 오류가 발생했습니다." #: lclstrconsts.rsexception msgid "Exception" msgstr "예외" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "디렉터리가 존재해야 합니다" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "%s 디렉터리가 존재하지 않습니다." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "\"%s\" 파일이 이미 있습니다. 덮어쓰시겠습니까?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "파일이 존재해야 합니다" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "\"%s\"파일이 존재하지 않습니다." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "\"%s\" 파일을 쓸 수 없습니다." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "파일을 쓸 수 없습니다" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "다른 이름으로 저장" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "기존 파일 열기" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "파일을 덮어쓰시겠습니까 ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "경로가 존재해야 합니다" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "\"%s\" 경로가 존재하지 않습니다." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "디렉터리 선택" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(파일을 찾을 수 없음: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "파일 정보" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(필터)" #: lclstrconsts.rsfind msgid "Find" msgstr "찾기" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "더 찾기" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "첫 번째" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols는 > ColCount일 수 없습니다" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows는 > RowCount일 수 없습니다" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "양식" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "%s 양식 리소스를 찾을 수 없습니다. 리소스가 없는 양식의 경우 CreateNew computer를 사용해야 합니다. 전역 변수 RequireDerivedFormResource를 참조하십시오." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "양식 스트리밍 \"%s\" 오류: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "앞으로" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "자홍색" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags 특정 GDK 추적/디버그 메시지를 켭니다." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags 특정 GDK 추적/디버그 메시지를 끕니다." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "그래픽 교환 형식" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Gtk+/GDK에서 발생한 경고 및 오류는 응용 프로그램을 중지합니다." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "그라디언트 활성 캡션" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "그라디언트 비활성 캡션" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "그래픽" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "회색" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "회색 텍스트" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "녹색" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "격자 파일이 없습니다" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "열이 없을 때는 격자에 행을 삽입할 수 없습니다" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "행이 없을 때는 격자에 열을 삽입할 수 없습니다" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "격자 인덱스가 범위를 벗어났습니다." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex는 이전 메뉴 항목의 GroupIndex보다 작을 수 없습니다" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "필터:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "기록:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Xt 규칙에 따라 프로그램의 클래스는 초기 문자가 대문자로 표시된 프로그램 이름입니다. 예를 들어 gimp의 클래스 이름은 \"Gimp\"입니다. --class를 지정하면 프로그램의 클래스가 \"classname\"으로 설정됩니다." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 특정 Gtk+ 추적/디버그 메시지를 켭니다." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d 지정한 X 서버에 연결합니다. 여기서 \"h\"는 호스트 이름, \"s\"는 서버 번호 (보통 0), \"d\"는 디스플레이 번호 (일반적으로 생략)입니다. --display를 지정하지 않은 경우 DISPLAY 환경 변수가 사용됩니다." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module 시동 시 지정된 모듈을 로드합니다." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe 프로그램 이름을 \"progname\"으로 설정합니다. 지정하지 않으면 프로그램 이름이 ParamStrUTF8(0)으로 설정됩니다." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags 특정 Gtk+ 추적/디버그 메시지를 끕니다." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "-lcl-no-transient 모달 양식에 대해 일시적 순서를 설정하지 않습니다" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm X 공유 메모리 확장 기능을 사용하지 않도록 설정합니다." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync X서버 연결 후 X동기화 (display, True)를 호출합니다. 이렇게 하면 X프로토콜 오류 디버깅이 쉬워지는데, X서버에서 오류를 발생시킨 프로토콜 요청이 처리된 후 바로 X프로토콜 버퍼링이 비활성화되고 X 오류가 수신되기 때문입니다." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "도움말" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: 이미 등록되어 있습니다" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "이 주제에 대한 도움말 데이터베이스를 찾았지만 이 항목을 찾을 수 없습니다" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "이 주제에 대해 설치된 도움말 데이터베이스가 없습니다" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "도움말 오류" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "도움말 컨텍스트 %s을(를) 찾을 수 없습니다." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "도움말 컨텍스트 %s을(를) 데이터베이스 \"%s\"에서 찾을 수 없습니다." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "도움말 데이터베이스 \"%s\"에서 %s 유형의 도움말 페이지에 대한 뷰어를 찾지 못했습니다" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "도움말 데이터베이스 \"%s\"를 찾을 수 없습니다" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "지시어 \"%s\"에 대한 도움말을 찾을 수 없습니다." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "\"%s\" 데이터베이스에서 지시어 \"%s\"에 대한 도움말을 찾을 수 없습니다." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "도움말 키워드 \"%s\"를 찾을 수 없습니다." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "도움말 키워드 \"%s\"를 \"%s\" 데이터베이스에서 찾을 수 없습니다." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "도움말 노드 \"%s\"에 도움말 데이터베이스가 없습니다" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "%s의 줄 %d, 열 %d에 대한 도움말을 찾을 수 없습니다." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "이 주제에 사용할 수 있는 도움말 항목이 없습니다" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "이 주제에 대한 도움말을 찾을 수 없습니다" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: 등록되지 않음" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "도움말 선택 오류" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "도움말 유형 \"%s\"에 대한 뷰어가 없습니다" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "도움말 뷰어 오류" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "이 유형의 도움말 내용에 대한 뷰어를 찾을 수 없습니다" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "강조" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "강조 텍스트" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "강한 조명" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X 아이콘" #: lclstrconsts.rsicon msgid "Icon" msgstr "아이콘" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "아이콘 이미지는 비워 둘 수 없습니다" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "아이콘 이미지의 형식이 동일해야 합니다" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "아이콘 이미지의 형식을 변경할 수 없습니다" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "아이콘 이미지의 크기가 같아야 합니다" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "아이콘 이미지의 크기를 변경할 수 없습니다" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "아이콘에 현재 이미지가 없습니다" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "비활성 테두리" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "비활성 캡션" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "비활성 캡션" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s 인덱스 %d가 범위를 벗어남 0 ..%d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "범위를 벗어난 셀 색인[열=%d 행=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "정보 배경" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "정보 텍스트" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "삽입" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "잘못된 날짜: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "잘못된 날짜: %s. %s에서 %s 사이여야 합니다" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "잘못된 양식 개체 스트림" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "잘못된 속성 값" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "잘못된 스트림 형식" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s이(가) %s과(와) 이미 연결되어 있습니다" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "공동 사진 전문가 그룹" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "마지막" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "라임색" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "목록 인덱스가 범위를 초과합니다 (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "파일 형식:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "%s 숨기기" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "다른 숨기기" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "%s 종료" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "서비스" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "모두 표시" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "적갈색" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "중단" #: lclstrconsts.rsmball msgid "&All" msgstr "모두(&A)" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "취소" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "닫기(&C)" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "도움말(&H)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "무시(&I)" #: lclstrconsts.rsmbno msgid "&No" msgstr "아니오(&N)" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "모두 아니오" #: lclstrconsts.rsmbok msgid "&OK" msgstr "확인(&O)" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "열기(&O)" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "재시도(&R)" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "저장(&S)" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "잠금 해제(&U)" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "예(&Y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "모두 예(&A)" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "중간 회색" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "메뉴 막대" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "메뉴" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "메뉴 강조" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "메뉴 텍스트" #: lclstrconsts.rsmodified msgid " modified " msgstr " 수정 날짜 " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "연두색" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "인증" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "확인" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "사용자 설정" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "오류" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "정보" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "경고" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "네이비색" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "다음" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "없음" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "유효한 격자 파일이 아닙니다" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "위젯 세트 객체가 없습니다. 프로그램 사용 절에 \"인터페이스\" 단위가 추가되었는지 확인하십시오." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "올리브색" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "날짜 선택" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "픽스맵" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "포터블 비트맵" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "포터블 그레이맵" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "포터블 네트워크 그래픽" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "포터블 픽스맵" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "게시" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%s확인을 누르면 무시되고 데이터가 손상될 위험이 있습니다.%s중단을 누르면 프로그램이 종료됩니다." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "이전" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "교체 시 알림 표시" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "%s 속성이 존재하지 않습니다" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "보라색" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe은 X11에서 완전히 정확한 창 프레임을 비활성화합니다. 이 기능은 Qt, Qt5 및 Gtk2 인터페이스에 구현되어 있으며 주로 GetWindowRect()에서 사용됩니다." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (only under X11), 디버거에서 실행하면 암묵적인 -nograb이 발생할 수 있습니다, -dograb을 사용하여 재정의합니다. QT_DEBUG가 필요합니다." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, 화면 위젯 및 QPixmaps에 사용할 백엔드를 설정합니다. 사용 가능한 옵션은 native, raster 및 opengl입니다. OpenGL은 여전히 불안정합니다." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, Qt에게 절대로 마우스나 키보드를 잡으면 안 된다고 합니다. QT_DEBUG가 필요합니다." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, 응용 프로그램의 레이아웃 방향을 Qt::RightToLeft로 설정합니다." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, 이전 세션에서 응용 프로그램을 복원합니다." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style 또는 -style=style, 응용 프로그램 GUI 스타일을 설정합니다. 가능한 값은 motif, windows 및 platinum입니다. 추가 스타일로 Qt를 컴파일했거나 플러그인으로 추가 스타일이 있는 경우 -style 명령줄 옵션을 사용할 수 있습니다. 참고: 모든 스타일을 모든 플랫폼에서 사용할 수 있는 것은 아닙니다. 스타일 매개 변수가 존재하지 않는 경우 Qt는 기본 공통 스타일 (window)로 응용 프로그램을 시작합니다." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet 또는 -stylesheet=stylesheet, 응용 프로그램 스타일 시트를 설정합니다. 값은 스타일 시트를 포함하는 파일의 경로여야 합니다. 참고: 스타일 시트 파일의 상대 URL은 스타일 시트 파일의 경로와 상대적입니다." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (only under X11) 디버깅을 위해 동기화 모드로 전환됩니다." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, 마지막에 파괴되지 않은 상태로 남아있는 위젯의 수와 최대 위젯의 수가 동시에 존재하는 것에 대한 디버그 메시지를 출력합니다." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg 또는 -background color, 기본 배경색과 응용 프로그램 팔레트 (밝은 음영과 어두운 음영이 계산됨)를 설정합니다." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn 또는 -button color, 기본 버튼 색상을 설정합니다." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, 응용 프로그램이 8비트 디스플레이에 개인 컬러 맵을 설치합니다." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, X 디스플레이를 설정합니다 (기본값은 $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg 또는 -foreground color, 기본 전경색을 설정합니다." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn 또는 -font font, 응용 프로그램 글꼴을 정의합니다. X logical font description을 사용하여 글꼴을 지정해야 합니다." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "geometry geometry, 표시된 첫 번째 창의 클라이언트 기하학을 설정합니다." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, 서버 입력 방식 설벙 (XMODIFIERS 환경 변수를 설정하는 것과 같음)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, 주어진 위젯에 어떻게 입력될 것인지 정의, 예를들어, onTheSpot은 입력이 위젯에 바로 나타나게 함, 반면에 overTheSpot은 위젯 위에 떠서 입력이 나타나게 하고 편집이 끝날 때까지 삽입되지 아니함." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, 응용 프로그램 이름을 설정합니다." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, 응용 프로그램이 QApplication::ManyColor 색상 사양을 사용하는 경우 8비트 디스플레이의 색상 큐브에 할당된 색상 수를 제한합니다. 카운트가 216인 경우 6x6x6 색상 큐브 (예: 빨간색 6단계, 녹색 6단계, 파란색 6단계)가 사용되며 다른 값의 경우 2x3x1 큐브에 대략 비례하는 큐브가 사용됩니다." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, 응용 프로그램 제목을 설정합니다." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, 응용 프로그램이 8비트 디스플레이에서 TrueColor 시각을 사용하도록 강제합니다." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "진행 중인 업데이트가 없는 동안 업데이트 종료" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "업데이트가 진행되는 동안 이미지를 저장할 수 없습니다" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "캔버스만 업데이트가 진행 중인 경우 모두 업데이트를 시작할 수 없습니다" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "빨강" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "새로 고침" #: lclstrconsts.rsreplace msgid "Replace" msgstr "바꾸기" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "모두 바꾸기" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "%s 리소스를 찾을 수 없습니다" #: lclstrconsts.rsscrollbarcolorcaption msgid "스크롤 막대" msgstr "스크롤 막대" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "ScrollBar 속성이 범위를 벗어남" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "색상 선택" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "글꼴 선택" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "은색" #: lclstrconsts.rssize msgid " size " msgstr " 크기 " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "하늘색" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "탭이 있는 컨트롤" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "청록색" #: lclstrconsts.rstext msgid "Text" msgstr "텍스트" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "내장된 URL은 읽기만 가능합니다. 대신 BaseURL을 변경하십시오." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "태그가 지정된 이미지 파일 형식" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "패널" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "영역의 두 부분에 어느 정도 크기를 부여할지 제어하는 그립" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "항목의 트리" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "기본 글꼴을 불러올 수 없습니다" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "알 수 없는 오류, 이 버그를 보고하십시오" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "알 수 없는 사진 확장자" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "알 수 없는 사진 형식" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "지원되지 않는 비트맵 형식입니다." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "지원되지 않는 클립보드 포맷: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " 경고: %d 출시되지 않은 DC가 있습니다. 상세한 덤프는 다음과 같음:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " 경고: %d 출시되지 않은 GDIObject가 있습니다. 상세한 덤프는 다음과 같음:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " 경고: 대기열에 %d 메시지가 남아 있습니다! 해제하겠습니다" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " 경고: %d TimerInfo 구조가 남아 있습니다. 해제하겠습니다" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " 경고: 경고: %s 제거되지 않은 LM_PAINT/LM_GtkPAINT 메시지 링크가 남아 있습니다." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "흰색" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "전체 단어만" #: lclstrconsts.rswin32error msgid "Error:" msgstr "오류:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "경고:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "창" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "창 테두리" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "창 텍스트" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "노랑" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "비활성화되거나 보이지 않는 창에 초점을 맞출 수 없습니다" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "중복 메뉴" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "잘못된 동작 생성" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "잘못된 동작 열거" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "잘못된 동작 등록" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "잘못된 동작 등록 취소" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "잘못된 이미지 크기" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "잘못된 ImageList 인덱스" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "현재 텍스트가 지정한 마스크와 일치하지 않습니다." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "메뉴 인덱스가 범위를 벗어남" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "메뉴 항목이 nil입니다" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "하위 메뉴가 메뉴에 없습니다" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "↓" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "←" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "메타+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "→" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Space" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "→" #: lclstrconsts.snotimers msgid "No timers available" msgstr "타이머 사용할 수 없음" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "\"%s\" 컨트롤에 상위 창이 없습니다." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "잘못된 토큰 형태: %s 기대됨" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "잘못된 부동소수점 수: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "잘못된 정수값: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (%d에, %d, 스트림 오프셋 %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "종결되지 않은 바이트값" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "종결되지 않은 문자열" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "잘못된 토큰 심벌: %s를 기대했으나 %s 발견됨" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "잘못된 토큰 유형: %s를 기대했으나 %s가 발견됨" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s 바이트" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "잘못된 경로 이름:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" "잘못된 상대 경로 이름:\n" "\"%s\"\n" "루트 경로와 관련하여:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "잘못된 경로 이름:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "이름" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" "선택한 항목이 디스크에 없습니다:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "크기" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "유형" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.ja.po����������������������������������������������������0000644�0001750�0000144�00000142374�15104114162�020623� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Haruyuki Fujimaki<fujimaki_haruyuki@yahoo.co.jp>, from 1.8RC1\n" "Language-Team: Japanese Lazarus ML\n" "X-Generator: Poedit 1.5.7\n" "Language: ja\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "ブラウザ \"%s\"が起動できません。" #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "ブラウザ \"%s\"が見つかりません。" #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "\"%s\"を実行中のエラー:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML ブラウザを見つけることができません。" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML ブラウザが見つかりません。%sツール → オプション → ヘルプ → ヘルプオプション でブラウザを設定してください。" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "ヘルプデータベース \"%s\"は\"%s\"を見つけることができませんでした。" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "BrowserParams のマクロ %s は URL によって置き換えられます。" #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "不明" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "リソース %s が見つかりません" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3 次元要素の暗い影の色" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3 次元要素の明るい色" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "自身を親コントロールとすることはできません" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "アクティブウィンドウの境界色" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "アクティブタイトルバーの色" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "すべてのファイル (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "アプリケーションの作業領域色" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "水色" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "クラス%sは%sを親にできません" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "デスクトップの背景色" #: lclstrconsts.rsbackward msgid "Backward" msgstr "後方へ" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "ビットマップファイル" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "黒色" #: lclstrconsts.rsblank msgid "Blank" msgstr "空欄" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "青色" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "ボタン面の色" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "ボタンの強調表示色" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "ボタンの影の色" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "ボタンの文字色" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "電卓" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "キャンセル" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "フォーカスを設定できません" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "キャンバスに描画が許可されていません" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "アクティブタイトルバーの文字色" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "大文字小文字を区別" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "コントロールクラス '%s' はコントロールクラス '%s' を子とすることはできません" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "コントロール'%s'は親フォームもしくは親フレームを持ちません" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' は '%s' の親ではありません" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "クリーム色" #: lclstrconsts.rscursor msgid "Cursor" msgstr "カーソルファイル" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "カスタム色" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "デフォルト色" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "パーミッション ユーザ グループ サイズ 日付 時間" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "レコードを削除しますか?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "削除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "ディレクトリ(&D)" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "コピー" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "貼り付け" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "アイコンの形式が重複しています。" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "編集" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "ファイル全体を検索" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "エラー" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "%s.%s のデバイスコンテキスト生成中のエラー" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "フレーム %4:s %1:sアドレス %2:s%3:s の %0:s においてエラーが発生しました" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "ビットマップ保存中にエラーが発生しました。" #: lclstrconsts.rsexception msgid "Exception" msgstr "例外" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "ディレクトリの所在不明" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "ディレクトリ\"%s\"が存在しません。" #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "ファイル\"%s\"は既に存在しています。上書きしますか?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "ファイルの所在不明" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "ファイル\"%s\"が存在しません。" #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "ファイル\"%s\"は書き込みできません。" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "書き込み不可ファイル" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "ファイルに名前を付けて保存" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "ファイルを開く" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "ファイルを上書きしますか?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "パスの所在不明" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "パス\"%s\"が存在しません。" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "ディレクトリの選択" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(ファイルが見つかりません \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "ファイル情報" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(フィルタ)" #: lclstrconsts.rsfind msgid "Find" msgstr "検索" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "次の検索" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "最初へ" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols は ColCountより大きくはできません" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows は RowCountより大きくはできません" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "フォームの背景色" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "フォームリソース %s が見つかりません。リソース無しフォームにするには CreateNew コンストラクタを使用しなければなりません。グローバル変数 RequireDerivedFormResource を参照してください。" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "フォームストリーム \"%s\" エラー:%s" #: lclstrconsts.rsforward msgid "Forward" msgstr "前方へ" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "赤紫色" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags GDK 固有のトレース/デバッグメッセージを有効にします。" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags GDK 固有のトレース/デバッグメッセージを無効にします。" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "GIF ファイル" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Gtk+/GDK による警告またはエラーが発生した場合、アプリケーションを停止させます。" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "アクティブタイトルバーのグラデーション色" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "非アクティブタイトルバーのグラデーション色" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "画像ファイル" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "灰色" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "淡色文字" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "緑色" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "グリッドファイルが存在しません" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "列を持たない場合、行をグリッドに挿入できません" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "行を持たない場合、列をグリッドに挿入できません" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "グリッドインデックスが範囲外です" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "グループインデックスは前にあるメニューアイテムのグループインデックスより小さい値にすることはできません" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "フィルタ:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "履歴:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class クラス名 Xt 規約に従い、プログラム上におけるクラスは頭文字を大文字にした名前になります。例えば、クラス名 gimp は \"Gimp\" となります。--class が指定された場合、プログラムにはそのクラス名のクラスが設定されます。" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Gtk+ 固有のトレース/デバッグメッセージを有効にします。" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d 指定された X サーバに接続します。\"h\" はホスト名、\"s\" はサーバ番号(通常は 0)、\"d\" はディスプレイ番号(大抵省略)です。--display が指定されない場合は、環境変数 DISPLAY が使用されます。" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module モジュール 起動時に指定したモジュールを読み込みます。" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name プログラム名 プログラム名を設定します。指定されなかった場合は、プログラム名には ParamStrUTF8(0) が設定されます。" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Gtk+ 固有のトレース/デバッグメッセージを無効にします。" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient モーダルフォームにおいて一時ウィンドウを使用しません" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm X 共有メモリ拡張の使用を無効にします。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync X サーバの接続を確立した後、「XSynchronize (display, True)」を呼び出します。これは X プロトコルエラーのデバッグを容易にできるようにします。なぜなら、X リクエストバッファリングは無効であり、X サーバで稼動しているところより生成されたエラーをエラープロトコル要求されてすぐに受け取るからです。" #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Help" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s は既に登録されています" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "このトピックスに対するヘルプデータベースは見つかりましたが、このトピックスは見つかりませんでした" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "このトピックスに対するヘルプデータベースがインストールされていません" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "ヘルプエラー" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "ヘルプコンテキスト %s が見つかりません" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "ヘルプコンテキスト %s をデータベース\"%s\"から見つけることができませんでした。" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "ヘルプデータベース\"%s\"のヘルプページタイプ %s に対するビューアが見つかりません" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "ヘルプデータベース\"%s\"が見つかりません" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "ヘルプの\"%s\"指令が見つかりません。" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "ヘルプの\"%s\"指令をデータベース\"%s\"から見つけることができませんでした。" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "ヘルプキーワード\"%s\"が見つかりません。" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "ヘルプキーワード\"%s\"をデータベース\"%s\"から見つけることができませんでした。" #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "ヘルプノード\"%s\"にヘルプデータベースはありません" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format, fuzzy, badformat msgid "No help found for line %d, column %d of %s." msgstr "%sの行 %d、列 %d のヘルプが見つかりませんでした。" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "このトピックスで利用できるヘルプエントリがありません" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "このトピックのヘルプが見つかりません。" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s は登録されていません" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "ヘルプセレクタエラー" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "ヘルプタイプ\"%s\"に対するビューアがありません" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "ヘルプビューアエラー" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "このヘルプコンテンツタイプに対応するビューアが見つかりません。" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "選択した文字の背景色" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "選択した文字の色" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "選択項目の背景色" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X アイコンファイル" #: lclstrconsts.rsicon msgid "Icon" msgstr "アイコンファイル" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "アイコンイメージは空にできません" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "アイコンイメージは同じ形式でなければなりません" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "アイコンのイメージ形式が変更できません" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "アイコンイメージは同じサイズでなければなりません" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "アイコンのサイズが変更できません" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "このアイコンはカレントイメージを持っていません" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非アクティブウィンドウの境界色" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非アクティブタイトルバーの色" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非アクティブタイトルバーの文字色" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s インデックスが %d、インデックス範囲外(0 .. %d)です" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "セルインデックスが範囲を超えています [Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "ツールチップの背景色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "ツールチップの文字色" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "挿入" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "無効な日付:%s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "無効な日付:%s。%s と %s の間でなければなりません" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "フォームオブジェクトストリームが無効です" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "無効なプロパティ値" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "無効なストリーム形式" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s は既に %s と関連付けられています" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG ファイル" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "最後へ" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "黄緑色" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "リストインデックスが範囲外です (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "栗色" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "中止" #: lclstrconsts.rsmball msgid "&All" msgstr "すべて(&A)" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "キャンセル" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "閉じる(&C)" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "ヘルプ(&H)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "無視(&I)" #: lclstrconsts.rsmbno msgid "&No" msgstr "いいえ(&N)" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "すべて いいえ" #: lclstrconsts.rsmbok msgid "&OK" msgstr "OK(&O)" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "開く(&O)" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "再試行(&R)" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "保存(&S)" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "ロック解除(&U)" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "はい(&Y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "すべて はい(&A)" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "中位の灰色" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "メニューバーの色" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "メニューの背景色" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "選択メニューの背景色" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "メニューの文字色" #: lclstrconsts.rsmodified msgid " modified " msgstr " 修正済み " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "マネーグリーン" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "認証" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "確認" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "カスタム" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "エラー" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "情報" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "濃紺色" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "次へ" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "色なし" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "有効なグリッド用ファイルではありません" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "ウィジェットセットオブジェクトではありません。ユニット \"interfaces\" が uses 節に追加されているか確認してください。" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "黄緑色" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "日付の選択" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "XPM ファイル" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "PBM ファイル" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "PGM ファイル" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG ファイル" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PNM ファイル" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "レコードの登録" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%s無視してデータの破損のリスクを受け入れるのでしたらOKを押して下さい。%sプログラムを強制停止する場合は中止をクリックしてください。" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "前へ" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "置換を確認" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "プロパティ %s が存在しません" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "紫色" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (X11 のみ) デバッガの動作下では暗黙的に -nograb が使われるので、-dograb で上書きします。QT_DEBUG が必要です。" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem パラメータ オンスクリーンウィジェットと QPixmaps で使われるバックエンドの設定をします。有効なオプションは native、raster、opengl です。OpenGL はまだ不安定版です。" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb マウスやキーボードに関することを捕捉しなくていいよう Qt に伝えます。QT_DEBUG が必要です。" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse アプリケーションのレイアウト方向を Qt::RightToLeft (右横書き) に設定します。" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session セッション セッションは早い順にアプリケーションへ戻されます。" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style スタイル または -style=スタイル アプリケーション GUI を設定します。設定できる値は motif、windows、platinum です。Qt で追加されたスタイルをコンパイルしたもしくはその他の追加スタイルがある場合、それらプラグインを -style コマンドラインオプションとして利用できます。注:すべてのスタイルがあらゆるプラットフォームで利用できるわけではありません。スタイルの値が存在しない場合、Qt はデフォルトの共通スタイル(windows)でアプリケーションを起動します。" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet スタイルシート または -stylesheet=スタイルシート アプリケーションのスタイルシートを設定します。設定する値は、スタイルシートを含むファイルパスである必要があります。注:スタイルシートのファイルが相対 URL にある場合は、相対パスにしてください。" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (X11 のみ) デバッグを同期モードに切り替えます。" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount 破棄されずに残っているウィジェット数とその時に存在しているウィジェットの最大数を終了時にデバッグメッセージへ表示させます。" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg または -background 色 デフォルトの背景色とアプリケーションパレットを設定します(陰の濃淡は計算で決定されます)。" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn または -button 色 デフォルトのボタンの色を設定します。" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap 8 ビットディスプレイにおいてプライベートカラーマップをインストールしアプリケーションを起動します。" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display ディスプレイ X ディスプレイを設定します(デフォルトは $DISPLAY)。" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg または -foreground 色 デフォルトの前景色を設定します。" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn または -font フォント アプリケーションのフォントを定義します。フォントの指定は X 論理フォント記述子を推奨します。" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry ジオメトリ 最初に表示される幾何学的情報ウィンドウの設定をします。" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im インプットメソッドサーバを設定します(環境変数 XMODIFIERS を設定することと同等のことです)。." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle ウィジェットに対して挿入される入力方法を定義します。例えば、onTheSpot はウィジェットに直接入力され、overTheSpot は入力ボックスを通じて入力され決定されるまではウィジェットに入力されません。" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name 名前 アプリケーション名を設定します。" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols 数 アプリケーションで QApplication::ManyColor の色指定を使っている場合、8 ビットディスプレイにおける割り当てられるカラー数を制限します。指定した値が 216 の場合、18 ビットカラー空間(RGB が各 6 ビットの色空間)が使われます。他の値の場合、RGB が 2-3-1 に概ね比例した色空間が使われます。" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title タイトル アプリケーションタイトルを設定します。" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor 8 ビットディスプレイでトゥルーカラー表示するようアプリケーションに強制します。" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "更新処理中でないのに更新終了をしました" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "更新処理中にイメージの保存はできません" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "キャンバスのみの更新処理を行っているときは全体の更新を行うことはできません" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "赤色" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "更新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "置換" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "すべて置換" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "リソース %s が見つかりません" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "スクロールバーの色" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "スクロールバーの値の範囲外" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "色の選択" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "フォントの選択" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "銀色" #: lclstrconsts.rssize msgid " size " msgstr " サイズ " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "空色" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "タブ付きコントロール" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "暗青緑色" #: lclstrconsts.rstext msgid "Text" msgstr "テキスト" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF ファイル" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "パネル" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "2 つの領域サイズを変更することができるグリップ" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "アイテムのツリー" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "デフォルトフォントを読み込むことができません" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知のエラーです、このバグを報告してください" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "不明な画像拡張子" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "不明な画像フォーマット" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "サポートされていないビットマップ形式です。" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "サポートしていないクリップボード形式:%s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "警告:解放されていないデバイスコンテキストが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "警告:解放されてない GDI オブジェクトが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "警告:キューに %d 個のメッセージが残っています!それらを解放します" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "警告:%d 個のタイマー情報が残っています!それらを解放します" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "警告:LM_PAINT/LM_GtkPAINT メッセージリンクが %s 個削除されずに残っています。" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "白色" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "完全一致のみ" #: lclstrconsts.rswin32error msgid "Error:" msgstr "エラー:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "ウィンドウの背景色" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "ウィンドウの境界色" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "ウィンドウ内の文字色" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "黄色" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "無効または不可視ウィンドウにフォーカスはできません" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "メニューが重複しています" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "無効なアクション生成" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "アクション一覧が無効です" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "アクション登録が無効です" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "アクション登録解除が無効です" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "無効なイメージサイズ" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "無効なイメージリストインデックス" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "現在のテキストは指定されているマスクに合致しません。" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "メニューインデックスが範囲外です" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "メニューアイテムは nil です" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "サブメニューがメニューにありません" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "↓" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "←" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "→" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Space" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "↑" #: lclstrconsts.snotimers msgid "No timers available" msgstr "利用できるタイマーがありません" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "コントロール\"%s\"は親ウィンドウを持ちません。" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "正しくないトークンタイプ:%sではありません" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "無効な浮動小数点数値:%s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "無効な整数値:%s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (位置 %d,%d、ストリームオフセット %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "バイトデータが終端していません" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "文字列が終端していません" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "正しくないトークンシンボル:\"%s\"があるべきところに\"%s\"があります" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "正しくないトークンタイプ:\"%s\"があるべきところに\"%s\"があります" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s バイト" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "無効な相対パス名:\n" "\"%s\"\n" "以下のルートパスとの相互関係:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "名前" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "選択された項目は以下のディスク上に存在しません:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "サイズ" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "型" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.it.po����������������������������������������������������0000644�0001750�0000144�00000127574�15104114162�020652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Giuliano Colla <giuliano.colla@fastwebnet.it>, 2014. msgid "" msgstr "" "Project-Id-Version: 0.9.2\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2014-11-10 17:47+0200\n" "Last-Translator: Giuliano Colla <giuliano.colla@fastwebnet.it>\n" "Language-Team: Lazarus\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Virtaal 0.6.1\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Il browser \"%s\" non è eseguibile." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Il browser \"%s\" non c'è." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Errore eseguendo \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossibile trovare un browser HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nessun Browser HTML trovato.%sDefinirne uno in Strumenti->Opzioni->Aiuto->Opzioni aiuto" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "L'archivio dell'help \"%s\" non trova il file \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s nei parametri del browser sarà sostituita dall'URL" #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Aiuto" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Maiusc" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Sconosciuto" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Risorsa %s non trovata" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Ombra scura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luce 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un controllo non può essere padre di se stesso" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bordo attivo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Titolo attivo" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Tutti i file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Spazio di lavoro dell'applicazione" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Acqua" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Scrivania" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Indietro" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Nero" #: lclstrconsts.rsblank msgid "Blank" msgstr "Vuoto" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blu" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Superfice pulsante" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Evidenziatura pulsante" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Ombra pulsante" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Testo pulsante" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calcolatore" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancella" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossibile dare il focus" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Il canvas non permette il disegno" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Testo del titolo" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Differenzia maiuscolo e minuscolo" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Un controllo di classe '%s' non può avere figli di classe '%s'" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' non è genitore di '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscursor msgid "Cursor" msgstr "cursore" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizzato ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Standard" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permessi utente gruppo ampiezza data ora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Eliminare un record?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Elimina" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direzione" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Cartella" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Formato icona duplicato." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Modifica" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Ricerca tutto il file" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Errore" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Errore nella creazione del contesto dispositivo per %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Errore in %s a %sIndirizzo %s%s Frame %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Errore salvando il bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Eccezione" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "La cartella deve esistere" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "La cartella \"%s\" non esiste." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Il file \"%s\" esiste già. Sostituirlo?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Il file deve esistere" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Il file \"%s\" non esiste." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Il file \"%s\" non è scrivibile." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Il file non è scrivibile" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salva con nome" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Apri file esistenti" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sovrascrivere il file?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Il percorso deve esistere" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Il percorso \"%s\" non esiste." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selezionare una cartella" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(file non trovato \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informazioni sul file" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.rsfind msgid "Find" msgstr "Trova" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Trova successivo" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primo" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCol non può essere > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows non può essere > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Risorsa %s del form non trovata. I form senza risorse devono essere creati con il costruttore CreateNew. Vedere variabile globale RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Streaming del form \"%s\" errore: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Avanti" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fucsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug-flags Abilita specifici messaggi di trace/debug GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Disabilita messaggi specifici di trace/debug di GDK" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Formato di scambio grafico" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Avvertimenti ed errori generati da Gtk+/GDK bloccheranno l'applicazione." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Barra titolo attiva con gradiente" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Barra titolo inattiva con gradiente" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafica" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grigio" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "testo grigio" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Il file della griglia non esiste" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Non si possono inserire righe in una grigli che non ha nessuna riga" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Non si possono inserire colonne in una griglia che non ha nessuna riga" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indice della griglia fuori dai limiti." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex non può essere minore del GroupIndex di un elemento menu precedente" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Cronologia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class nomeclasse Seguendo le convenzioni Xt, la classe di un programma è il nome del programma con il carattere iniziale maiuscolo. Per esempio il nome della classe per gimp è \"Gimp\". Se --class viene specificata, la classe del programma verrà impostata a \"nomeclasse\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Abilita messaggi specifici di trace/debug Gtk+" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Connessione al server X specificato da \"h\" per il nome host, \"s\" per il numero di server (solitamente 0) e \"d\" per il numero di schermo (normalmente viene omesso). Se --display non è specificato verrà utilizzata la variabile di ambiente DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module-module Carica il modulo specificato alla partenza." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Imposta il nome del programma a \"progname\". Se non specificato, il nome del programma sarà impostato a ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug-flags Disabilita messaggi specifici di trace/debug Gtk+" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Non impostare l'ordine transiente per form modali" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Disabilita l'uso dell'estensione della memoria condivisa di X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chiama XSynchronize (display, True) appena viene stabilita la connessione al server X. Ciò semplifica la correzione degli errori di protocollo X dato che la richiesta di bufferizzazione di X sarà disabilitata e quindi gli errori di X verranno ricevuti subito dopo che la richiesta di protocollo che ha generato l'errore è stata processata dal server X." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Aiuto" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Già registrato" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Trovato un archivio di aiuto sull'argomento, ma argomento non trovato" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Non è installato un archivio di aiuto per questo argomento" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Errore nell'Help" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Aiuto su %s non trovato." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Aiuto su %s non trovato nell'archivio \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "L'archivio Help \"%s\" non trova un visualizzatore per le pagine di aiuto di tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Archivio Help \"%s\" non trovato" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Aiuto per la direttiva \"%s\" non trovato." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Aiuto per la direttiva \"%s\" non trovato nel Database \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Aiuto sulla parola chiave \"%s\" non trovato." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Aiuto sulla parola chiave \"%s\" non trovato nell'archivio \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Il nodo di aiuto \"%s\" non ha un Database di aiuto" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nessun aiuto trovato per la linea %d, colonna %d di %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nessun aiuto disponibile" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Aiuto non trovato" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Non registrato" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Errore nella selezione dell'Help" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Nessun visualizzatore per aiuto di tipo \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Errore nel visualizzatore dell'Help" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Visualizzatore per questo tipo di aiuto non trovato" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Evidenziare" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Evidenzia testo" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luce calda" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Icona Mac OS" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "L'immagine dell'icona non può essere vuota" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "L'immagine dell'icona deve avere lo stesso formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossibile cambiare il formato dell'immagine dell'icona" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "L'immaigne dell'icona deve avere le stesse dimensioni" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossibile cambiare il formato dell'immagine dell'icona" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icona non ha nessuna immagine corrente" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bordo inattivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Caption inattiva" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Caption inattiva" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indice %d fuori dai limiti 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indice fuori dall'intervallo Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informazioni sfondo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informazioni testo" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserimento" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Data non valida: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data non valida: %s. Deve essere tra %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Stream form oggetto non valido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valore proprietà non valido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato stream non valido" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s è già associato con %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ultimo" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Verde brillante" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Indice della lista fuori dai limiti (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrone" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Blocca" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tutti" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annulla" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Chiudi" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Aiuto" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignora" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a tutto" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Apri" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Riprova" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salva" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Sblocca" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Si" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Si a &All" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Grigio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Evidenzia menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Testo menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificato " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde moneta" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticazione" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Conferma" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizza" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Errore" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informazioni" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Attenzione" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Blu oltremare" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Successivo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Niente" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Non è un file griglia valido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nessun oggetto del widgetset. Verifica che la unit \"interfaces\" sia nella clausola uses del programma." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Verde oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Seleziona una data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "BitMap portabile" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "GrayMap portabile" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PixMap portabile" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Precedente" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Chiedi prima di sostituire" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "La proprietà %s non esiste" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Viola" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (solo sotto X11): l'esecuzione sotto un debugger può causare un -nograb implicito: usare -dograb per forzare l'opzione. Richiede QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, imposta il backend per usare widget su schermo e QPixmaps. Opzioni: native, raster e opengl. OpenGL è ancora instabile (0.9.30)" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, impedisce a QT di catturare mouse e/o tastiera. Richiede QT_DEBUG" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse: imposta la direzione di disposizione del programma a Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, recupera una precedente sessione dello stesso programma." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stile oppure -style=stile, imposta lo stile GUI dell'applicazione.Valori ammessi sono motif, windows, platinum. Se avete compilato QT con stili aggiuntivi o con stili come plugin, potrete usarli con questa opzione. NOTA: non tutti gli stili sono disponibili su tutte le piattaforme. Se l'opzione non è presente, Qt lancerà l'applicazione con lo stile di default." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet oppure -stylesheet=stylesheet, imposta lo stylesheet dell'applicazione. L'opzione deve contenere il cammino a un file che contiene uno stylesheet. Nota: Eventuali URL relative nello Style Sheet sono relative al path in cui si trova il suo file." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (solo sotto X11), commuta in modo sincrono per il debugging" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, stampa messaggi finali di debug sul numero di widget non distrutti e sul massimo numero di widget esistiti contemporaneamente." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg oppure --background colore, imposta il colore di sfondo di default e la tavolozza di un'applicazione (sono calcolate le ombre chiare e scure)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn oppure -button colore, imposta il colore di default dei pulsanti" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, il programma installerà una mappa colori privata su un display a 8 bit." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, impost lo schermo X (il default è $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg oppure -foreground colore, imposta il colore di default per il testo e la grafica." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn oppure -font nomefont, definice il font usato da un'applicazione. Per il font dovrebbe essere usata una descrizione logica X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, imposta la geometria della prima finestra che viene mostrata." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, imposta il metodo di input del server (equivale a impostare la variabile ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definisce come l'input è inserito nel dato widget, es. onTheSpot fa apparire il testo direttamente nel widget, mentre overTheSpot lo mette in un box sopra il widget, e non è imnserito finché l'editing non finisce." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, imposta il nome dell'applicazione." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols numero, limita il numero di colori allocati sul cubo colore di un display a 8 bit, se il programma usa le specifiche colore QApplication::ManyColor. Se il numero è 216, viene usato un cubo colore 6x6x6 (6 livelli di rosso, 6 di verde e 6 di blu). Per altri valori, si usa un cubo approssimativamente proporzionale a 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titolo, imposta il titolo di un programma" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, forza il programma a usare una visualizzazione TrueColor su un display a 8 bit." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate mentre non ci sono refresh" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossibile salvare l'immagine durante un refresh" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossibile iniziare il refresh di tutto se è in corso quello del canvas" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rosso" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Aggiorna" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Sostituisci" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Sostituisci tutto" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Risorsa %s non trovata" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra di scorrimento" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Proprietà della ScrollBar fuori dai limiti" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selezionare un colore" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selezionare un font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Argento" #: lclstrconsts.rssize msgid " size " msgstr " ampiezza " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Blu cielo" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Un controllo con linguette" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Ocra" #: lclstrconsts.rstext msgid "Text" msgstr "Testo" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato del file immagine marcato" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Pannello" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Un aggancio per controllare le dimensioni di due parti di un'area" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Un albero di voci" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossibile caricare il font predefinito" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Errore sconosciuto. Per favore, riporta questo errore al team di sviluppo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Estensione immagine sconosciuta" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato immagine sconosciuto" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato bitmap non supportato." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Formato degli appunti non supportato %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Attenzione: ci sono %d DC non rilasciati, ecco i dettagli:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Attenzione: ci sono %d GDIObjects non rilasciati, ecco i dettagli:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Attenzione: ci sono %d messaggi ancora in coda! Li sto liberando" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Attenzione: sono rimaste %d strutture TimerInfo, le sto liberando " #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " Attenzione: restano %s link a messaggi LM_GtkPAINT da rimuovere." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bianco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Solo parole intere" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Errore:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Attenzione:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Finestra" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Frame della finestra" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Testo della finestra" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Giallo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossibile dare il focus a finestre disabilitate o invisibili" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menu dupicati" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creazione azione non valida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerazione azione non valida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registrazione azione non valida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Deregistrazione azione non valida" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Grandezza immagine non valida" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Indice ImageList non valido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Il testo corrente non si adatta alla maschera specificata." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indice del menu fuori range" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem è nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Il sottomenu non è nel menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Canc" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Giù" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fine" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Invio" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Sinistra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Windows" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PagGiù" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PagSu" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Destra" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Maiusc+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spazio" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Su" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nessun timer disponibile" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Il controllo \"%s\" non ha una finestra genitore." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Tipo token errato: era atteso %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Numero in virgola mobile non valido: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Numero intero non valido: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (a %d %d, offset nello stream %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valore byte non determinato" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "String non determinata" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Simbolo token errato: atteso %s, trovato %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Tipo token errato: atteso %s, trovato %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.id.po����������������������������������������������������0000644�0001750�0000144�00000116501�15104114162�020616� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Lazarus LCL v1.x\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-01-30 02:21+0700\n" "Last-Translator: Zaenal Mutaqin <ade999@gmail.com>\n" "Language-Team: Zaenal Mutaqin <ade999@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Country: INDONESIA\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Browser %s%s%s bukan eksekutabel." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Browser %s%s%s tidak ditemukan." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format, fuzzy, badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Kesalahan saat mengeksekusi %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Tidak bisa menemukan HTML browser" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format, fuzzy, badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Database bantuan %s%s%s tidak bisa menemukan file %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s dalam BrowserParams akan diganti dengan URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Panduan" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Tidak dikenal" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Sumber %s tidak ditemukan" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Kontrol tidak bisa menjadikan dirinya sebagai induk" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Semua file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Mundur" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Kosong" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulator" #: lclstrconsts.rscancelrecordhint #, fuzzy msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Batal" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Tidak bisa memfokuskan" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Kanvas tidak membolehkan penggambaran" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensitif huruf" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "ukuran waktu tanggal perijinan grup pemakai " #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Arah" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Direktori" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror #, fuzzy msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Salah" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Kesalahan pembuatan konteks device untuk %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Kesalahan terjadi dalam %s at %sAlamat %s%s Frame %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Kesalahan ketika menyimpan bitmap" #: lclstrconsts.rsexception msgid "Exception" msgstr "Kekecualian" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Direktori harus ada" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Directori \"%s\" tidak ada." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "File \"%s\" sudah ada. Timpa saja ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "File harus ada" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "File \"%s\" tidak ada." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "File \"%s\" tidak bisa ditulisi." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "File tidak bisa ditulisi" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Simpan file sebagai" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Buka file yang ada" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Timpa file ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Path harus ada" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Path \"%s\" tidak ada." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Pilih Direktori" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(file tidak ditemukan: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informasi file" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "Cari" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Cari lagi" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols tidak bisa >= ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows tidak bisa >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Pengaliran form \"%s\" salah: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Maju" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Hidupkan pesan khusus GDK trace/debug." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Matikan pesan khusus GDK trace/debug." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Peringatan dan kesalahan dihasilkan oleh Gtk+/GDK akan menghentikan aplikasi." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indeks grid di luar jangkauan" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex tidak bisa kurang dari item GroupIndex menu sebelumnya" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histori:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Mengikuti konvensi Xt, class dari sebuah program dalam nama program dengan inisial karakter dibesarkan. Sebagai contoh, classname untuk gimp adalah \"Gimp\". Jika --class ditetapkan, class dari program akan di set ke \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Hidupkan pesan khusus Gtk+ trace/debug." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Sambungkan ke X server tertentu, dimana \"h\" adalah nama host, \"s\" adalah nomor server (biasanya 0), dan \"d\" adalah nomor layar (biasanya diabaikan). Jika --display tidak ditetapkan, variabel lingkungan DISPLAY yang digunakan." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Ambil modul yang ditetapkan saat startup." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Matikan pesan khusus Gtk+ trace/debug." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Jangan set urutan sementara untuk form modal" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Matikan penggunaan X Shared Memory Extension." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Panggil XSynchronize (layar, Benar) setelah sambungan Xserver terlaksana. Ini membuat debugging kesalahan protokol X lebih mudah, karena permintaan penyanggaan X akan dimatikan dan kesalahan X akan diterima segera setelah permintaan protokol yang kesalahannya telah dibuat sudah diproses oleh X server." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Panduan" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Sudah teregistrasi" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Konteks Bantuan tidak ditemukan" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Database Bantuan tidak ditemukan" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Bantuan Salah" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Konteks Bantuan %s tidak ditemukan." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Konteks Bantuan %s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy, badformat #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Database Bantuan %s%s%s tidak ditemukan peninjau untuk halaman bantuan dari tipe %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Database Bantuan %s%s%s tidak ditemukan" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Node Bantuan %s%s%s tidak mempunyai Database Bantuan" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Tidak ada bantuan ditemukan untuk baris %d, column %d of %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Node bantuan tidak tersedia" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Bantuan tidak ditemukan" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Tidak teregistrasi" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Selektor Bantuan Salah" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy, badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Tidak ada peninjau untuk tipe bantuan %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Peninjau Bantuan Salah" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Peninjau Bantuian tidak ditemukan" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d di luar jangkauan 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks Diluar jangkauan Cell[Kolom=%d Baris=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Tanggal tidak benar : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Tanggal tidak benar: %s. Harus ada diantara %s dan %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Aliran Objek Form tidak benar" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Nilai properti tidak benar" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Format stream tidak benar" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s sudah dikaitkan dengan %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Indeks List melebihi jangkauan (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Batal" #: lclstrconsts.rsmball msgid "&All" msgstr "&Semua" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Batal" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Tutup" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Panduan" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Abaikan" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Tidak" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Tidak untuk semua" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Coba lagi" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ya" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ya untuk &Semua" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " diubah " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Konfirmasi" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Kustom" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Salah" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informasi" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Peringatan" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Berikutnya" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Bukan file grid yang benar" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Objek widgetset todal ada. Tolong periksa apakah unit \"interfaces\" sudah ditambahkan ke klausul uses program." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Pilih tanggal" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Sebelumnya" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Properti %s tidak ada" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Ganti" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Ganti semua" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Sumber %s tidak ditemukan" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Properti ScrollBar diluar jangkauan" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Pilih warna" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Pilih font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " ukuran " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Teks" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Tidak bisa mengambil font default" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Kesalahan Tidak Dikenal, silahkan laporkan bug ini" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ekstensi gambar tidak dikenal" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format bitmap tidak didukung." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Format clipboard tidak didukung: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " PERINGATAN: Ada %d DCs tidak dilepas, dump detil sebagai berikut:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " PERINGATAN: Ada %d GDIObjects tidak dilepas, detil dump sebagai berikut:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " PERINGATAN: Ada %d pesan tersisa dalam antrian! Saya akan membebaskannya" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " PERINGATAN: Ada %d struktur TimerInfo tersisa, Saya akan membebaskannya" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " PERINGATAN: ada %s tersisa link pesan LM_PAINT/LM_GtkPAINT tidak dihapus." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Hanya seluruh kata" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Kesalahan:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Peringatan:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Tidak bisa memberikan fokus ke jendela yang dimatikan atau tidak nampak" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikasi menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Pembuatan action tidak benar" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerasi action tidak benar" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registrasi action tidak benar" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Pembatalan registrasi action tidak benar" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ukuran gambar tidak benar" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Indeks ImageList tidak benar" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indeks Menu diluar jangkauan" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem kosong" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-menu tidak dalam menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Turun" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Left" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Right" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Up" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Tidak tersedia timer" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.hu.po����������������������������������������������������0000644�0001750�0000144�00000132450�15104114162�020637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Péter Gábor <ptrg@freemail.hu>\n" "Language-Team: Magyar (Hungarian)\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.7.1\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "A böngésző nem futtatható: \"%s\"" #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "A böngésző nem található: \"%s\"" #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Hiba a végrehajtás közben: \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nem található HTML böngésző." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Nincs HTML böngésző. %s Meg kell adni egyet: Eszközök -> Beállítások -> Súgó -> Súgó beállítások" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "A(z) \"%s\" súgóadatbázishoz hiányzik a \"%s\" fájl." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A(z) %s makrót az URL helyettesíti a BrowserParams-ban." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Súgó" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ismeretlen" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Az erőforrás nem található: %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D sötét árnyék" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D megvilágítás" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "A vezérlő nem lehet saját szülője" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktív keret" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktív cím" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Minden fájl (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Alkalmazás munkaterülete" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Világoskék" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "A(z) %s osztály szülője nem lehet %s." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Asztal" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Vissza" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitképek" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Fekete" #: lclstrconsts.rsblank msgid "Blank" msgstr "Üres" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Kék" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Gomb felszíne" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Gomg megvilágítva" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Gomb árnyéka" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Gomb felirata" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Számológép" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nem lehet fókuszálni" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "A vászonra nem lehet rajzolni" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Felirat szövege" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Kis-/nagybetűre érzékeny" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "'%s' osztályú vezérlőnek nem lehet gyermeke egy '%s' osztályú vezérlő" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "A(z) '%s' vezérlőnek nincs szülő kerete vagy form-ja" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' nem szülője ennek: '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krém" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Egyéni ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Alapértelmezett" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "engedélyek felhasználó csoport méret dátum idő" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Rekord törlése?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Törlés" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Irány" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Könyvtár" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Másolás" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Beillesztés" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Kettős ikonformátum" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Szerkesztés" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Keresés az egész fájlban" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Hiba" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Hiba az eszköz-környezet létrhozásakor a(z) %s.%s számára" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Hiba történt ebben: %s%sCím: %s%s Keret: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Hiba a bitkép mentése közben." #: lclstrconsts.rsexception msgid "Exception" msgstr "Kivétel" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "A könyvtárnak léteznie kell" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "A(z) \"%s\" könyvtár nem létezik." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "A(z) \"%s\" fájl már létezik. Felülírható?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "A fájlnak léteznie kell" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "A(z) \"%s\" fájl nem létezik." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "A(z) \"%s\" fájl nem írható." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "A fájl nem írható" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Fájl mentése másként" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Létező fájl megnyitása" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Felülírható a fájl?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Az útvonalnak léteznie kell" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "A(z) \"%s\" útvonal nem létezik." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Könyvtár kiválasztása" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(a fájl nem található: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Fájlinformáció" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(szűrő)" #: lclstrconsts.rsfind msgid "Find" msgstr "Keresés" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Következő keresése" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Első" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols nem lehet > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows nem lehet > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Az űrlap forrása (%s) nem található. Forrásfájl nélküli űrlapok létrehozásához a CreateNew constructor használata szükséges. Lásd a globális RequireDerivedFormResource változót." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Form adatfolyam \"%s\" hiba: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Előre" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fukszia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug jelzők Bekapcsolja a megadott GDK nyomkövetési/hibakeresési üzeneteket." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug jelzők Kikapcsolja a megadott GDK nyomkövetési/hibakeresési üzeneteket." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings A Gtk+/GDK által generált figyelmeztetések és hibák leállítják az alkalmazást." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Aktív gradiens cím" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Inaktív gradiens cím" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Szürke" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Szürke szöveg" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zöld" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "A táblafájl nem létezik" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Nem szúrhatók be sorok a rácsba ha nincsenek oszlopok" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Nem szúrhatók be oszlopok a rácsba ha nincsenek sorok" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "A táblaindex kilóg a lehetséges tartományból" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nem lehet kisebb, mint egy előző menü elem GroupIndex-e" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Szűrő:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Előzmények:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class osztálynév Az Xt szabályok követése, a program osztálya a program neve nagy kezdőbetűvel. Például a gimp osztályneve \"Gimp\". Ha a --class meg van adva akkor a program osztályneveként az \"osztálynév\" lesz beállítva." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug jelzők Bekapcsolja a megadott Gtk+ nyomkövetési/hibakeresési üzeneteket." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Kapcsolódás az adott X kiszolgálóhoz, ahol \"h\" az állomásnév, \"s\" a kiszolgáló száma (általában 0), és \"d\" a megjelenítő száma (általában elhagyható). Ha a --display nincs megadva akkor a DISPLAY környezeti változó értéke lesz használva." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modul Betölti a megadott modult induláskor." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name prognév Beállítja a program nevét a \"prognév\" értékére. Ha nincs megadva, a program neve a ParamStrUTF8(0) értékére lesz beállítva." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug jelzők Kikapcsolja a megadott Gtk+ nyomkövetési/hibakeresési üzeneteket." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Nem lesz beállítva ideiglenes sorrend a modal form-ok számára" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Letiltja az X Shared Memory Extension használatát." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync XSynchronize (display, True) hívás a sikeres XServer csatlakozás után. Ez könnyebbé teszi a hibakeresést az X protokoll hibák esetén, mivel az X kérések pufferelése ki lesz kapcsolva és az X hibák azonnal fogadva lesznek az X kiszolgáló által feldolgozott, hibát okozó protokoll-kérések után." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Súgó" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Már regisztrálva van" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Van súgóadatbázis ehhez a témakörhöz, de ez a témakör nem található." #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Nincs súgóadatbázis telepítve ehhez a témakörhöz" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Súgó hiba" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "A(z) %s súgó témakör nem található" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "A(z) %s súgó témakör nem található a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "A(z) \"%s\" súgó adatbázis nem talált megjelenítőt a(z) %s típusú súgó oldalhoz" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "A(z) \"%s\" súgó adatbázis nem található" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Nem található súgó a(z) \"%s\" direktívához." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Nem található súgó a(z) \"%s\" direktívához a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "A(z) \"%s\" súgó kulcsszó nem található." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "A(z) \"%s\" súgó kulcsszó nem található a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "A(z) \"%s\" elemhez nincs súgó adatbázis" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nem található súgó a %d. sorhoz, %d. oszlophoz ebben: %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nincs elérhető súgóbejegyzés ehhez a témához" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nincs súgó ehhez a témához" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Nincs regisztrálva" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Súgó kiválasztó hiba" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Nincs megjelenítő a(z) \"%s\" típusú súgóhoz." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Súgó megjelenítő hiba" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nincs megjelenítő az ilyen típusú súgótartalomhoz" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Kiemelés" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Szöveg kiemelése" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Meleg Fény" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X ikon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Az ikon képe nem lehet üres" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Az ikon képének azonos formátumúnak kell lennie" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Az ikon képének formátumát nem lehet meváltoztatni" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Az ikon képének azonos méretűnek kell lennie" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Az ikon képének méretét nem lehet megváltoztatni" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Az ikon képe jelenleg üres" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktív keret" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktív cím" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktív cím" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "A(z) %s %d Index a 0 .. %d tartományon kívül esik" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Az index a tartományon kívül esik Cella[Oszlop=%d Sor=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Infó háttér" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Infó szöveg" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Beszúrás" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Hibás dátum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Hibás dátum: %s. %s és %s között kell lennie." #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "érvénytelen Form objektum adatfolyam" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Érvénytelen tulajdonság érték" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Érvénytelen stream formátum" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s már hozzá van rendelve ehhez: %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Utolsó" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Élénkzöld" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "A lista indexe a határon kívül esik (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "%s elrejtése" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Többi elrejtése" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "%s befejezése" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Szolgáltatások" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Összes megjelenítése" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Gesztenyebarna" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Megszakítás" #: lclstrconsts.rsmball msgid "&All" msgstr "&Mind" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Be&zárás" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Súgó" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "Ki&hagyás" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nem" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nem, mindre" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Ok" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Megnyitás" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Új&ra" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Menté&s" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Feloldás" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Igen" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Igen, mindre" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Középszürke" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menüsáv" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menü kiemelése" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menü szövege" #: lclstrconsts.rsmodified msgid " modified " msgstr " módosítva" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Pénzzöld" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Hitelesítés" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Jóváhagyás" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Egyedi" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Hiba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Információ" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Figyelmeztetés" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Tengerkék" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Következő" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Semmi" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Érvénytelen táblafájl" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nincs widgetset objektum. Ellenőrizze, hogy az \"interfaces\" unit hozzá lett-e adva a program uses részéhez." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olívazöld" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Dátum kiválasztása" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Küldés" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sAz OK-t választva figyelmen kívül hagyja és adatsérülést kockáztat. %sA Megszakítás gombbal bezárja a programot." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Előző" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Kérdés felülírásnál" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "A tulajdonság nem létezik: %s" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Lila" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (csak X11 alatt), a hibakeresőben történő futtatás akaratlan \"-nograb\"-ot okozhat, a -dograb használata ezt bírálja felül. QT_DEBUG szükséges hozzá." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, megadja a háttérfolyamatot a vezérlőelemek és a QPixmap-ok megjelenítéséhez. Elérhető lehetőségek: native, raster, opengl. Az OpenGL még nem stabil." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, utasítja a Qt rendszert, hogy ne sajátítsa ki az egeret vagy a billentyűzetet. QT_DEBUG szükséges hozzá." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, beállítja az alkalmazás elrendezési irányát a Qt::RightToLeft értékre." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session munkamenet, visszaállítja az alkalmazást egy korábbi munkamenetből." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stílus vagy -style=stílus, megadja az alkalmazás grafikus felületének stílusát. Az elérhető értékek: motif, windows, és platinum. Ha a Qt további stílusokkal lett fordítva vagy bővítményként elérhetők további stílusok akkor azok is használhatók a -style parancssori paraméterben. MEGJEGYZÉS: Nem minden stílus érhető el minden platformon. Ha megadott stílus nem létezik akkor a Qt az alapértelmezett stílussal (windows) indítja az alkalmazást." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stíluslap vagy -stylesheet=stíluslap, megadja az alkalmazás stíluslapját. Az érték egy stíluslapot tartalmazó fájl útvonala kell legyen. Megjegyzés: A relatív URL-ek a stíluslap fájlban a stíluslap fájlútvonalához képest lesznek értelmezve." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (csak X11 alatt), szinkronmódba kapcsol a hibakereséshez." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, hibakeresési üzeneteket jelenít meg befejezéskor a megmaradt vezérlőelemek és az egy időben létezett legtöbb vezérlőkelem számáról." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg vagy -background szín, beállítja az alkalmazás alapértelmezett háttérszínét és színkészletét (a világos és sötét árnyalatok számított értékek)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn vagy -button szín, beállítja a gombok alapértelmezett színét." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, egyéni színösszeállítás használatára kényszeríti az alkalmazást 8-bites megjelenítőn." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display megjelenítő, beállítja az X megjelenítőt (alapértelmezett a $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg vagy -foreground szín, beállítja az alapértelmezett előtérszínt." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn vagy -font betűtípus, beállítja az alkalmazás betűtípusát, A betűtípust az X logikai betűtípus leírás használatával kell megadni." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry elhelyezés, megadja az elsőként megjelenő ablak elhelyezkedését." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, beállítja a beviteli mód kiszolgálóját (ugyanúgy mint az XMODIFIERS környezeti változó beállítása)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, meghatározza a bevitel beszúrásának módját az adott vezérlőelembe, pl. onTheSpot hatására a bevitel közvetlenül a vezérlőelemben jelenik meg, az overTheSpot hatására pedig a bevitel egy lebegő dobozban jelenik meg a vezérlőelem fölött és csak a szerkesztés befejezésekor lesz beszúrva." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name név, beállítja az alkalmazás nevét." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols szám, korlátozza a színek számát a színkockában 8-bites megjelenítőn, ha az alkalmazás használja a QApplication::ManyColor színleírást. Ha a szám 216 akkor egy 6x6x6-os színkocka lesz használva (6 piros, 6 zöld és 6 kék szinttel); más értékek esetén egy körülbelül 2x3x1 arányú kocka lesz." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title cím, beállítja az alkalmazás címét." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, az alkalmazást TrueColor megjelenítés használatára kényszeríti 8-bites megjelenítőn." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate esemény miközben nincs frissítés folyamatban" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "A kép mentése nem lehetséges frissítés közben" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nem frissíthető az összes amíg egy rajzvászon frissítése folyik" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Piros" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Frissítés" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Csere" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Összes cseréje" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Az erőforrás nem található: %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Görgetősáv" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "ScrollBar tulajdonság a tartományon kívül esik" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Szín kiválasztása" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Betűtípus kiválasztása" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Ezüst" #: lclstrconsts.rssize msgid " size " msgstr " méret " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Égszín kék" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Egy vezérlő fülekkel" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Kékeszöld" #: lclstrconsts.rstext msgid "Text" msgstr "Szöveg" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "A beépített URL csak olvasható. Változtassa meg inkább a BaseURL értékét." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Egy fogantyú, amivel egy terület két részre osztásának arányát lehet állítani" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Egy fa elemekkel" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nem lehet betölteni az alapértelmezett betűtípust" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Ismeretlen hiba, kérem jelentse" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ismeretlen kép kiterjesztés" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Ismeretlen képformátum" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nem támogatott bitkép-formátum" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nem támogatott vágólap-formátum: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " FIGYELMEZTETÉS: %d nem felszabadított DC van, részletes memóriakép következik:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " FIGYELMEZTETÉS: %d nem felszabadított GDIObject van, részletes memóriakép következik:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " FIGYELMEZTETÉS: %d üzenet maradt a sorban! Fel lesznek szabadítva" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " FIGYELMEZTETÉS: %d TimerInfo struktúra maradt, fel lesznek szabadítva" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " FIGYELMEZTETÉS: %s el nem távolított LM_PAINT/LM_GtkPAINT üzenet hivatkozás maradt." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Fehér" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Csak egész szavak" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Hiba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Figyelmeztetés:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Ablak" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Ablakkeret" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Ablak szövege" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Sárga" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nem lehet letiltott vagy láthatatlan ablakot előtérbe hozni" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Ismétlődő menük" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Érvénytelen művelet létrehozás" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Érvénytelen művelet felsorolás" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Érvénytelen művelet regisztrálás" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Érvénytelen művelet kiregisztrálás" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Érvénytelen képméret" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Érvénytelen ImageList index" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "A jelenlegi szöveg nem illeszkedik a megadott mintára." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menü index a tartományon kívül esik" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem értéke nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Az almenü nincs a menüben" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Le" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Balra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Jobbra" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Szóköz" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Fel" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nincsenek elérhető időzítők" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "A(z) '%s' vezérlőnek nincs szülő ablaka." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Rossz vezérjel típus: %s az elvárt" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Érvénytelen lebegőpontos szám: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Érvénytelen egész szám: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (itt: %d,%d, az adatfolyamban itt: %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Lezáratlan byte érték" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Lezáratlan karakterlánc" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Rossz vezérjel szimbólum: %s az elvárt, de %s található" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Rossz vezérjel típus: %s az elvárt, de %s található" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bájt" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Érvénytelen útvonal:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Érvénytelen relatív útvonal:\n" "\"%s\"\n" "az alapkönyvtárhoz viszonyítva:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Érvénytelen útvonal:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Név" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "A kiválasztott elem nem létezik a lemezen:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Méret" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Típus" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.he.po����������������������������������������������������0000644�0001750�0000144�00000135147�15104114162�020625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: shulamy <shulamy@regba.org.il>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "דפדפן %s%s%s אינו קובץ ריצה." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "דפדפן %s%s%s לא נמצא." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format, fuzzy, badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "שגיאה בזמן הרצת %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "לא יכול למצוא דפדפן HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format, fuzzy, badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "בסיס הנתונים של העזרה לא יכול למצוא את הקובץ %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "המאקרו %s ב BrowserParams יוחלף ב URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "מקש אלט" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "מקש קונטרול" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "עזרה" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "מקש הזז" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "לא ידוע" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format, fuzzy, badformat msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "משאב s% לא נמצא" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "צל כהה תלת ממדי" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "אור תלת ממדי" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "פקד לא יכול לקבל את עצמו בתור הורה" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "גבול פעיל" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "כותרת פעילה" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "כל הקבצים (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "שטח עבודה של היישום" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "מימי" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "שולחן עבודה" #: lclstrconsts.rsbackward msgid "Backward" msgstr "אחורה" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "מפת סיביות" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "שחור" #: lclstrconsts.rsblank msgid "Blank" msgstr "תו רווח" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "כחול" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "פאה תחתונה" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "הדגשה תחתית" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "צל תחתון" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "טקסט תחתון" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "מחשבון" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "ביטול" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "לא יכול להתמקד" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "קנווס לא מאפשר שרטוט" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "טקס כותרת" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "רגיש לריישיות" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format, fuzzy, badformat msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "פקד של המחלקה '%s' לא יכול לקבל פקד של מחלקה s% בתור בן" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "קרמי" #: lclstrconsts.rscursor msgid "Cursor" msgstr "סמן" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "מותאם אישית ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "ברירת מחדל" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "הרשאות משתמש קבוצה גודל תאריך שעה" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "למחוק רשומה ?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "מחק" #: lclstrconsts.rsdirection msgid "Direction" msgstr "כיוון" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "תיקייה" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "פומט צלמית כפול" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "ערוך" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "חפש בכל הקובץ" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "שגיאה" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "שגיאה ביצירת הקשר התקן עבור %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format, fuzzy, badformat msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "שגיאה אירעה ב s% בכתובת %s%s מסגרת s%" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "שגיאה בשמירת מפת סיביות." #: lclstrconsts.rsexception msgid "Exception" msgstr "חריגה" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "התיקייה חייבת להיות קיימת" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "התיקייה \"%s\" לא קיימת." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "הקובץ \"%s\" כבר קיים, לדרוס?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "הקובץ חייב להיות קיים" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "הקובץ \"%s\" לא קיים." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "לא ניתן לכתוב לקובץ \"%s\" ." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "לא ניתן לכתוב לקובץ" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "שמור קובץ בשם" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "פתח קובץ קיים" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "האם לדרוס את הקובץ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "הנתיב חייב להיות קיים" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "הנתיב \"%s\" לא קיים." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "בחר תיקייה" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(קובץ לא נמצא: \"%s\" )" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "מידע קובץ" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "מצא" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "מצא עוד" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "ראשון" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols can't be >= ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows can't be >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "טופס" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "זרימת טופס \"%s\" שגיאה: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "קדימה" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "פוקסיה" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "הפעל הודעות GDK trace/debug מסוימות . gdk-debug flags--" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "הפעל הודעות GDK trace/debug מסוימות . gdk-debug flags--" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "פורמט להחלפת גרפיקה" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "אזהרות ושגיאות שנוצרו ע\"י Gtk+/GDK יעצרו את היישום. g-fatal-warnings--" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "כותרת מדורגת פעילה" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "כותרת מדורגת לא פעילה" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "גרפי" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "אפור" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "טקסט אפור" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "ירוק" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "אינדקס הרשת מחוץ לתחום" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "אינדקס הקבוצה לא יכול להיות קטן מאינדקס הקבוצה של פריט התפריט הקודם" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "מסנן:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "היסטוריה:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "לפי הסכמות Xt, שם המחלקה של התוכנית הוא השם של התוכנית עם התוים הראשונים רישיים. לדוגמה, שם המחלקה של ג'ימפ הוא \"Gimp\". אם class classname-- מצויין, שם המחלקה של התוכנית ייקבע ל \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "הפעל הודעות Gtk+ trace/debug מסוימות . gtk-debug flags--" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "התחבר לשרת X מסוים. כאשר \"h\" הוא שם המחשב המארח, \"s\" הוא מספר השרת (בדרך כלל 0), \"d הוא מספר הצג (בדרך כלל מושמט). אם display-- לא מופיע, משתנה הסביבה DISPLAY קובע את הצג. display h:s:d--" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "טען את המודולים המסוימים בזמן האיתחול gtk-module module--" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "קובע את שם התוכנית ל \"progname\". אם לא מצויין, שם התוכנית ייקבע ל (ParamStrUTF8(0. פרמטר name programe--" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "נטרל הודעות Gtk+ trace/debug מסוימות . gtk-no-debug flags--" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "אל תקבע סדר אקראי עבור טפסים מודאליים lcl-no-transient--" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "מנטרל את הרחבת הזיכרון המשותף של השרת. no-xshm--" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "קורא ל XSynchronize (display, True) אחרי בוסס הקשר עם שרת X . זה עושה את ניםוי השגיאות של פרוטוקול X ליותר קל, כי דרישות החציצה של X יבוטלו והשגיאות של X יתקבלו מיד אחרי דרישות הפרוטוקול אשר יוצרות את השגיאה יבוצעו ע\"י השרת. sync--" #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "עזרה" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "כבר רשום %s:" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "עזרה תלויית הקשר לא נמצאה" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "בסיס נתוני העזרה לא נמצא" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "שגיאת עזרה" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "עזרה תלויית הקשר %s לא נמצאה." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "עזרה תלויית הקשר %s לא נמצאה בבסיס הנתונים %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy, badformat #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "בסיס הנתונים של העזרה %s%s%s לא מצא תוכנה להצגת דף עזרה מסוג %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "בסיס הנתונים של העזרה %s%s%s לא נמצא " #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "מלת מפתח לעזרה %s%s%s לא נמצאה. " #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "מלת מפתח לעזרה %s%s%s לא נמצאה בבסיס הנתונים %s%s%s. " #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "לצומת העזרה %s%s% אין בסיס נתונים" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "לא נמצאה עזרה לשורה %d, עמודה %d, של %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "אין צומת עזרה זמינה" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "עזרה לא נמצאה" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "לא רשום %s:" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "שגיאת בורר העזרה" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy, badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "אין תוכנה להצגת עזרה מסוג %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "שגיאת מציג העזרה" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "לא נמצא מציג לעזרה" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "הדגשה" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "הדגשת טקסט" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "לבן חם" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "צלמית של OSX של מקינטוש" #: lclstrconsts.rsicon msgid "Icon" msgstr "צלמית" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "דמות הצלמית אינה יכולה להיות ריקה" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "דמות הצלמית חייבת להיות באותו פורמט" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "לא יכול לשנות פורמט של דמות הצלמית" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "דמות הצלמית חייבת להיות באותו גודל" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "לא יכול לשנות גודל של דמות הצלמית" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "לצלמית אין דמות נוכחית" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "גבול לא פעיל" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "כותרת לא פעילה" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "כותרת לא פעילה" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format, fuzzy, badformat msgid "%s Index %d out of bounds 0 .. %d" msgstr "אינדקס d% מחוץ לתחום 0 .. d%" #: lclstrconsts.rsindexoutofrange #, object-pascal-format, fuzzy, badformat msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "אידקס מחוץ לתחום תא [ עמודה=d% שורה=d% ]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "רקע המידע" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "טקסט המידע" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "הכנס" #: lclstrconsts.rsinvaliddate #, object-pascal-format, fuzzy, badformat msgid "Invalid Date : %s" msgstr "תאריך לא חוקי: s%" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format, fuzzy, badformat msgid "Invalid Date: %s. Must be between %s and %s" msgstr "תאריך לא חוקי: s% חייב להיות בין s% ל s%" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "זרם עצם טופס לא חוקי" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "ערך תכונה לא חוקי" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "פורמט זרימה לא חוקי" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format, fuzzy, badformat msgid "%s is already associated with %s" msgstr "כבר משוייך ל s%" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "אחרון" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "לימוני" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format, fuzzy, badformat msgid "List index exceeds bounds (%d)" msgstr "אינדקס הרשימה עובר את הגבול" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "ערמוני" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "צא" #: lclstrconsts.rsmball msgid "&All" msgstr "הכל" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "ביטול" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "סגור" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "עזרה" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "התעלם" #: lclstrconsts.rsmbno msgid "&No" msgstr "לא " #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "לא להכל" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "פתח" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "נסה שוב" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "שמור" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "שחרר נעילה" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "כן" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "כן להכל" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "אפור בינוני" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "לוח התפריט" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "תפריט" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "הדגשת תפריט" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "טקסט התפריט" #: lclstrconsts.rsmodified msgid " modified " msgstr "השתנה" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "ירוק של שטרות כסף" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "אימות" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "וידוא" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "משתמש" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "שגיאה" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "מידע" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "אזהרה" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "חיל הים" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "הבא" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "ללא" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "לא קובץ רשת חוקי" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "אין עצם של ערכת עצמים. בדוק אם היחידה \"interfaces\" הוספה לתוכנית בסעיף \"משתמש ב\"" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "זית" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "בחר תאריך" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "מפת פיקסלים" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "מפת סיביות ברת ניידות" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "מפת רמות אפור ברת ניידות" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "גרפיקת ברת ניידות ברשת " #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "מפת פיקסלים ברת ניידות" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "אחרי" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "קודם" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format, fuzzy, badformat msgid "Property %s does not exist" msgstr "התכונה s% לא קיימת" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "סגול" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "(פועל רק תחת X11) ריצה תחת מנפה שגיאות יכולה לגרום ל nograb- משתמע. השתמש ב dograb-- כדי לנטרל זאת. QT_DEBUG נדרש. dograb-" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "קובע את שיישמש ל עצמים \"על המסך\" ול QPixmaps. האפשרויות הן native, raster , opengl. כאשר OpenGL עדיין אינו יציב. graphicssystem param-" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "אומר ל Qt שלא יחטוף לעולם את העכבר או את לוח המקשים. QT_DEBUG נדרש. nograb-" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "קובע את כיווניות Qt::RightToLeft ליישום. reverse-" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "משחזר את היישום מההפעלה המסוימת. session session-" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "קובע את עיצוב ה GUI של היישום. ערכים אפשריים הם motif, windows, platinum. אם הידרת את Qt עם עיצובים נוספים או יש לך עיצובים נוספים כתוספים הם יהיו זמינים גם כן.הערה: לא כל העיצובים זמינים בכל הפלטפורמות. אם לא קיים פרמטר עיצוב Qt יתחיל את היישום עם ( windows ) ברירת המחדל המצויה. style style or -style=style--" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "קובע את גיליון העיצוב של היישום. הערך חייב להיות נתיב לקובץ המכיל את גיליון העיצוב.הערה: URL יחסיים בגיליון העיצוב הם יחסיים לנתיב הקובץ של גיליון העיצובים. stylesheet stylesheet or -stylesheet=stylesheet" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "(פועל רק תחת X11) עובר למצב סינכרוני עבור ניפוי שגיאות. sync-" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "מדפיס הודעת ניפוי שגיאות בסיום על עצמים שלא נהרסו ומספר מקסימלי של עצמים שהיו קיימים בו זמנית. widgetcount-" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "קובע את ברירת המחדל של צבע הרקע ואת לוח הצבעים של היישום (צללים בהירים וכהים מחושבים). bg or -background color-" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "קובע את ברירת המחדל של הלחצנים. btn or -button color-" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "גורם ליישום להתקין מפת צבעים פרטית על צג 8 ביטים. cmap-" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "קובע את צג ה X ליישום ( $DISPLAY הוא ברירת המחדל ). display display-" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "קובע את ברירת המחדל של צבע החזית. fg or -foreground color-" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "מגדיר את גופן היישום. הגופן צריך להיות מצויין ע\"י שימוש ב תאור גופן X לוגי. fn or -font font-" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "קובע את גיאומטריית הלקוח עבור החלון הראשון שנראה. geometry geometry-" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "קובע את שרת ה input method (שווה ערך לקביעת XMODIFIERS - משתנה הסביבה ). im- " #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "מגדיר איך תופיעה ההקלדה שמכניסים לעצם נתון, למשל onTheSpot גורם לה להופיע ישירות בעצם, כש overTheSpot גורם לה להופיע בתיבה שמרחפת מעל העצם ולא מוכנסת עד שהעריכה נגמרת. inputstyle-" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "קובע את שם היישום. name name-" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "מגביל את מספר הצבעים המוקצים בקוביית הצבעים של צג 8 ביטים, אם היישום משתמש במפרט הצבעים של QApplication::ManyColor. אם המספר הוא 216 אז משתמשים בקוביה של 6*6*6 (כלומר 6 רמות של אדום, 6 של ירוק ו 6 של כחול); עבור ערכים אחרים, משתמשים בקוביה בערך ביחסים של 1*3*2. ncols count-" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "קובע את כותרת היישום. title title-" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "כופה על היישום להשתמש ב TrueColor visual על צג של 8 ביטים. visual TrueColor-" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "סיים עידכון כאשר אין עדכון בתהליך" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "לא יכול לשמור את הדמות כאשר עידכון בתהליך" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "אי אפשר לעדכן הכל כאשר עדכון קנווס בלבד בעיצומו" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "אדום" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "רענן" #: lclstrconsts.rsreplace msgid "Replace" msgstr "החלף" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "החלף הכל" #: lclstrconsts.rsresourcenotfound #, object-pascal-format, fuzzy, badformat msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "משאב s% לא נמצא" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "פס גלילה" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "תכונת פס גלילה מחוץ לתחום" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "בחר צבע" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "בחר גופן" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "כסף" #: lclstrconsts.rssize msgid " size " msgstr "גודל" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "כחול שמיים" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "כחלחל ירקרק" #: lclstrconsts.rstext msgid "Text" msgstr "טקסט" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "פורמט מתוייג של קובץ דמות" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "לא יכול לטעון את גופן ברירת המחדל" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "שגיאה לא ידועה, אנא דווח על הבאג" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "סיומת לא מוכרת של תמונה" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "פורמט לא מוכר של תמונה" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "פורמט מפת סיביות לא נתמך." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format, fuzzy, badformat msgid "Unsupported clipboard format: %s" msgstr "פורמט לוח זמני לא נתמך" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "אזהרה: יש DCs שלא שוחררו, הטלה מפורטת להלן:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "אזהרה: יש GDIObjects שלא שוחררו, הטלה מפורטת להלן:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "אזהרה: יש הודעות שנשארו בתור! אני אשחרר אותן" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "אזהרה: נשארו מבני TimerInfo, אני אשחרר אותם" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format, fuzzy, badformat msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "אזהרה: נשארו קישורים להודעות LM_PAINT/LM_GtkPAINT שלא הוסרו." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "לבן" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "רק מלה שלמה" #: lclstrconsts.rswin32error msgid "Error:" msgstr "שגיאה:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "אזהרה:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "חלון" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "מסגרת החלון" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "טקסט החלון" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "צהוב" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "לא יכול להתמקד בחלון מנוטרל או בלתי נראה" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "תפריטים כפולים" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "יצירת פעולה לא חוקית" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "ספירת פעולה לא חוקית" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "רישום פעולה לא חוקי" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "ביטול רישום פעולה לא חוקי" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "גודל דמות לא חוקי" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "אינדקס לא חוקי של ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "אינדקס התפריט מחוץ לתחום" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "פריט התפריט הוא \"כלום\"" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "תת התפריט לא בתפריט" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "מקש Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "מקש חזור" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "מקש Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr " מקש Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "למטה" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "מקש סיום" #: lclstrconsts.smkcenter msgid "Enter" msgstr "מקש אנטר" #: lclstrconsts.smkcesc msgid "Esc" msgstr "מקש בטל" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "מקש התחלה (בית)" #: lclstrconsts.smkcins msgid "Ins" msgstr "מקש Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "שמאל" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "מקש Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "מקש דף למטה" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "מקש דף למעלה" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "ימין" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "מקש Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "מקש רווח" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "מקש טאב" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "למעלה" #: lclstrconsts.snotimers msgid "No timers available" msgstr "אין קוצב זמן זמין" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "סוג token שגוי: %s צפוי" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "מספר נקודה צפה לא חוקי: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "מספר שלם לא חוקי %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "ערך בית לא גמור" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "מחרוזת לא גמורה" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "סוג token שגוי: %s צפוי אבל %s נמצא" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "סוג token שגוי: %s צפוי אבל %s נמצא" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.fr.po����������������������������������������������������0000644�0001750�0000144�00000133052�15104114162�020631� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Vasseur Gilles <gillesvasseur58@gmail.com>\n" "Language-Team: http://lazarus.developpez.com/\n" "PO-Revision-Date: 2021-11-25 13:55+0100\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "MIME-Version: 1.0\n" "POT-Creation-Date: \n" "Project-Id-Version: \n" "Language: fr\n" "X-Generator: Poedit 3.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Navigateur \"%s\" non exécutable." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Navigateur \"%s\" non trouvé." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Erreur pendant l'exécution de \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossible de trouver un navigateur HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Aucun navigateur HTML n'a été trouvé.%sDéfinissez-en un dans Outils -> Options -> Aide -> Options de l'aide" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "La base de données d'aide \"%s\" ne trouve pas le fichier \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s dans \"BrowserParams\" sera remplacée par l'URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Commande" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Aide" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Maj" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Inconnu" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s introuvable" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Ombre foncée 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Clair 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un contrôle ne peut pas être son propre parent" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bord actif" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Étiquette active" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Tous les fichiers (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espace d'application" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "La classe \"%s\" ne peut pas avoir \"%s\" comme parent." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Bureau" #: lclstrconsts.rsbackward msgid "Backward" msgstr "En arrière" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Images" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Noir" #: lclstrconsts.rsblank msgid "Blank" msgstr "Blanc" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Bleu" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face de bouton" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Bouton sélectionné" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Ombre de bouton" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texte de bouton" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculatrice" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Abandonner" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossible de focaliser" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Dessin sur le canevas non autorisé" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Barre de titre" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Respecter la casse" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Le contrôle de la classe \"%s\" ne peut pas contenir un contrôle de la classe \"%s\" comme enfant" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Le contrôle \"%s\" n'a pas de fenêtre ou de cadre parent" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "\"%s\" n'est pas un parent de \"%s\"" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crème" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Curseur" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personnalisé..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Par défaut" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissions utilisateur groupe taille date heure" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Voulez-vous supprimer l'enregistrement ?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Supprimer" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direction" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Répertoire" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Copier" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Coller" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Dupliquer le format d'icône." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Éditer" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Chercher dans tout le fichier" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erreur" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Erreur en créant le contexte de dispositif pour %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Une erreur s'est produite dans %s à %sl'adresse %s%s page %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erreur en sauvegardant l'image." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exception" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Le répertoire doit exister" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Le répertoire \"%s\" n'existe pas." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Le fichier \"%s\" existe déjà. Faut-il l'écraser ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Le fichier doit exister" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Le fichier \"%s\" n'existe pas." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Le fichier \"%s\" est en lecture seule." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Fichier protégé en écriture" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Enregistrer le fichier sous" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Ouvrir un fichier existant" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Voulez-vous écraser le fichier ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Le chemin doit exister" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Le répertoire \"%s\" n'existe pas." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Choisir un répertoire" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(Fichier \"%s\" non trouvé)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informations du fichier" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtre)" #: lclstrconsts.rsfind msgid "Find" msgstr "Chercher" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Chercher encore" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Premier" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "\"FixedCols\" ne peut pas être > \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "\"FixedRows\" ne peut pas être > \"RowCount\"" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Fiche" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Ressource de fiche %s introuvable. Pour les fiches sans ressources, le constructeur \"CreateNew\" doit être utilisé. Voir la variable globale \"RequireDerivedFormResource\"." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Dans le flux de fiche \"%s\" : erreur %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "En avant" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Activer les messages spécifiques GDK+ trace/débogage." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Arrêter les messages spécifiques GDK+ trace/débogage." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Format d'échange graphique (GIF)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Les avertissements et les erreurs produits par Gtk+/GDK stopperont l'application." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Couleur droite d'un dégradé (actif)" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Couleur gauche d'un dégradé (inactif)" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Graphique" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gris" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texte estompé" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Vert" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Le fichier grille n'existe pas" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Impossible d'ajouter des lignes à une grille sans colonnes" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Impossible d'ajouter des colonnes à une grille sans lignes" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index de grille hors limites." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" ne peut pas être inférieur au \"GroupIndex\" d'un élément de menu précédent" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtre :" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historique :" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Suivant les conventions Xt, la classe d'un programme est le nom du programme avec le caractère initial en majuscule. Par exemple, le nom de classe pour gimp est \"Gimp\". Si --class est indiquée, la classe du programme sera réglée sur \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Activer les messages spécifiques Gtk+ trace/débogage." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Se connecter au serveur X, où \"h\" est le nom d'hôte, \"s\" est le numéro du serveur (habituellement 0), et \"d\" est le numéro d'affichage (en général omis). Si --display n'est pas indiqué, la variable d'environnement DISPLAY est employée." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Charger le module indiqué au démarrage." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programme Définir le nom du programme à \"progname\". Si non spécifié, le nom du programme sera fixé à ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Arrêter les messages spécifiques Gtk+ trace/débogage." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Ne pas établir d'ordre transitoire pour les fiches modales" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Désactiver l'utilisation de la mémoire étendue partagée par X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Appeler \"XSynchronize(display, True)\" après que la connexion au serveur X a été établie. Le débogage des erreurs du protocole X sera ainsi plus facile parce que les demandes de buffer par X seront désactivées et que les erreurs de X seront reçues immédiatement après que la requête du protocole qui aura produit l'erreur aura été traitée par le serveur X." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Aide" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s : déjà enregistré" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Une base de données d'aide a été trouvée, mais ce sujet est introuvable" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Aucune base de données installée pour ce sujet" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erreur d'aide" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Contexte d'aide %s introuvable." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Contexte d'aide %s introuvable dans la base de données \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "La base de données d'aide \"%s\" n'a pas trouvé de visionneuse pour une page d'aide du type %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Base de données d'aide \"%s\" introuvable" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Aide pour la directive \"%s\" introuvable." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Aide pour la directive \"%s\" introuvable dans la base de données \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Mot-clé d'aide \"%s\" introuvable." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Mot-clé d'aide \"%s\" introuvable dans la base de données \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Le nœud d'aide \"%s\" n'a aucune base de données" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Aucune aide trouvée pour la ligne %d, colonne %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Aucune entrée d'aide disponible pour ce sujet" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Aucune aide disponible pour ce sujet" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s : non enregistré" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erreur de sélecteur d'aide" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Il n'y a aucune visionneuse pour ce type d'aide \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erreur de visionneuse d'aide" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Aucune visionneuse d'aide disponible pour ce type de contenu" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Sélectionné" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texte sélectionné" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Spot" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ressource d'icône OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icône" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "L'image d'icône ne peut pas être vide" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "L'image d'icône doit avoir le même format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossible de modifier le format d'image de l'icône" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "L'image d'icône doit avoir la même taille" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossible de modifier la taille d'image de l'icône" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icône n'a pas d'image en cours" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bord inactif" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Légende inactive" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Légende inactive" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d hors des limites 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index hors limites Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fond d'information" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texte d'information" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insérer" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Date incorrecte : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Date incorrecte : %s. Doit être entre %s et %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "flux de fiche incorrect" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valeur de propriété incorrecte" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Format de flux incorrect" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s est déjà associé à %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Dernier" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Vert citron" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Index de liste hors limites (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Format de fichier :" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Masquer %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Masquer les autres" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Quitter %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Services" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Tout afficher" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marron" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Arrêter" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tout" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuler" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fermer" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Aide" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Non" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Non pour tout" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Ouvrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Réessayer" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Sauver" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Libérer" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Oui" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Oui à &tous" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gris moyen" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barre de menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu sélectionné" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texte de menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modifié " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Vert menthe" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Authentification" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmation" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personnalisé" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erreur" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Information" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avertissement" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Bleu marine" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Suivant" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Aucun" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "N'est pas un fichier de grille correct" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Aucun objet \"widgetset\". Vérifiez si l'unité \"interfaces\" est ajoutée à la clause uses des programmes." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Vert olive" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Choisir une date" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Poster" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sAppuyez sur \"OK\" pour ignorer et risquer une corruption des données.%sAppuyez sur \"Abandonner\" pour fermer le programme." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Précédent" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Confirmer les remplacements" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "La propriété %s n'existe pas" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Violet" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, désactive le cadre de fenêtre précis sous X11. Cette fonctionnalité est implémentée pour les interfaces Qt, Qt5 et Gtk2 et utilisée principalement par GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (seulement sous X11), l'exécution avec un débogueur peut provoquer un -nograb implicite ; utilisez -dograb pour le contraire. Besoin de QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param détermine l'arrière-plan à utiliser pour les objets graphiques et les QPixmaps. Les options possibles sont 'native', 'raster' et 'opengl'. OpenGL est encore instable." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb dit à Qt qu'il ne doit jamais s'emparer de la souris ou du clavier. Besoin de QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse fixe la direction de mise en page à Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session rétablit l'application à partir d'une session plus ancienne." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style ou -style=style détermine le style GUI. Les valeurs possibles sont 'motif', 'windows' et 'platinum'. Si vous avez compilé Qt avec d'autres styles ou si vous disposez d'autres style en tant que plugins, ces styles seront disponibles grâce à l'option de commande en ligne -style. N.B. : Tous les styles ne sont pas disponibles sur toutes les plates-formes. Si le style en paramètre fourni n'existe pas, Qt démarrera l'application avec le style par défaut ('windows')." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet ou -stylesheet=stylesheet détermine la feuille de style de l'application. La valeur associée doit être le chemin vers un fichier qui contient la feuille de style. N.B. : Les URLs relatives dans la feuille de style sont relatives au chemin du fichier de la feuille de style." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (seulement avec X11), bascule en mode synchronisé pour le débogage." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount écrit un message de débogage indiquant le nombre d'objets graphiques non détruits et le nombre maximum d'objets graphiques qui ont pu exister au même moment." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg or -background color détermine la couleur par défaut du fond et une palette pour l'application (la lumière et les ombres sont calculées)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn or -button color détermine la couleur par défaut des boutons." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap fait que l'application installera une table de correspondance des couleurs particulières pour un écran 8 bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display détermine l'affichage pour X (par défaut $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg or -foreground color détermine la couleur d'avant-plan." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn or -font font définit la police de caractères de l'application. Cette police doit être spécifiée en utilisant une description de police logique pour X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry définit la géométrie de client de la première fenêtre qui s'affiche." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im définit le serveur de méthode d'entrée (équivalent à définir la variable d'environnement XMODIFIERS)" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle définit la façon dont l'entrée est insérée dans l'objet graphique donné, par exemple OnTheSpot fait apparaître l'entrée directement dans l'objet graphique, tandis que OverTheSpot fait apparaître l'entrée dans une fenêtre flottant sur l'objet graphique et n'est pas inséré jusqu’à ce que l’édition soit terminée." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nom définit le nom de l'application." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count limite le nombre de couleurs allouées pour le cube de couleurs d'un écran 8bits, si l'application utilise la spécification de couleur QApplication::ManyColor. Si 'count' vaut 216 alors le cube de couleurs a 6x6x6 est utilisé (c'est-à-dire 6 niveaux de rouge, 6 de vert et 6 de bleu). Pour les autres valeurs, un cube approximativement proportionnel à un cube 2x3x1 est utilisé." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title définit le titre de l'application." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor force l'application à utiliser un TrueColor sur un écran 8 bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "\"EndUpdate\" alors qu'aucune mise à jour n'est en cours" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossible d'enregistrer l'image alors que la mise à jour est en cours" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossible de tout mettre à jour pendant la mise à jour du \"canvas\"" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rouge" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Rafraîchir" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Remplacer" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Remplacer tous" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s introuvable" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barre de défilement" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriété ScrollBar hors limites" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Choisir une couleur" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Choisir une police" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Argent" #: lclstrconsts.rssize msgid " size " msgstr " taille " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Bleu ciel" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Un contrôle avec des onglets" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Sarcelle" #: lclstrconsts.rstext msgid "Text" msgstr "Texte" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "L'URL intégrée est en lecture seule. Changez BaseURL à la place." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panneau" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Une poignée pour contrôler la dimension des deux parties d'une surface" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Un arbre d'éléments" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossible de charger la police par défaut" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erreur inconnue, veuillez rapporter ce bogue" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Type d'image inconnu" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Format d'image inconnu" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format de bitmap non supporté." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Format %s de presse-papier non supporté" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ATTENTION : Il y a %d DCs non libres, en voici le détail :" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ATTENTION : Il y a %d GDIObjects non libérés, en voici le détail :" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ATTENTION : Il y a %d messages en file d'attente ! Ils seront supprimés" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ATTENTION : Il reste %d structures TimerInfo ; elles seront supprimées" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ATTENTION : Il y a %s liens de message LM_PAINT/LM_GtkPAINT non supprimés." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Blanc" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Mots entiers seulement" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erreur :" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Attention :" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Fenêtre" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Tour de fenêtre" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texte de fenêtre" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Jaune" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossible de focaliser une fenêtre invisible ou désactivée" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Doublon de menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Création d'action incorrecte" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Énumération d'action incorrecte" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Référencement d'action incorrecte" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Déréférencement d'action incorrecte" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Taille d'image incorrecte" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Index de liste d'images incorrect" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Le texte actuel ne correspond pas au masque spécifié." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index de menu hors limites" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" n'est pas assigné (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Le sous-menu n'est pas dans le menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "RetArr" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Suppr" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Bas" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fin" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Entrée" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Échap" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Maison" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Gauche" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgBas" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgHaut" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Droite" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Maj+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espace" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Haut" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Aucun temporisateur disponible (\"timer\")" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Le contrôle \"%s\" n'a pas de fenêtre parent." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Mauvais type d'identificateur : %s attendu" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Nombre à virgule flottante incorrect : %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Nombre entier incorrect : %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (à %d,%d - offset flux %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valeur d'octet non terminée" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Chaîne non terminée" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Mauvais symbole d'identificateur : %s attendu mais %s trouvé" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Mauvais type d'identificateur : %s attendu mais %s trouvé" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s octets" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nom de chemin incorrect :\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Nom de chemin relatif incorrect :\n" "\"%s\"\n" "en relation avec le chemin de la racine :\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nom de chemin incorrect :\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nom" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "L'élément choisi n'existe pas sur le disque :\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Taille" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Type" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.fi.po����������������������������������������������������0000644�0001750�0000144�00000127222�15104114162�020622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Juha Manninen <juha.manninen@phnet.fi>\n" "Language-Team: \n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Selain \"%s\" ei ole suoritettava ohjelma." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Selainta \"%s\" ei löydy." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Virhe suoritettaessa \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML selainta ei löydy." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML selainta ei löydy.%sMäärittele se kohdassa Työkalut -> Asetukset -> Ohje -> Ohjeen asetukset" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Avustetietokannasta \"%s\" ei löydy tiedostoa \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s BrowserParams:issa korvataan URL:lla." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Apu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Tuntematon" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resurssia %s ei löydy" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tumma varjo" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D valoisa" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Kontrolli ei voi olla itsensä emo" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktiivinen reuna" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktiivinen otsikko" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Kaikki tiedostot (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Sovelluksen työtila" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Luokalla %s ei voi olla %s kantaluokkana." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Työpöytä" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Taaksepäin" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bittikartat" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Musta" #: lclstrconsts.rsblank msgid "Blank" msgstr "Tyhjä" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Sininen" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Napin pinta" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Napin korostus" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Napin varjostus" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Napin teksti" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Laskin" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Peruuta" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Ei voi fokusoida" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas ei salli piirtämistä" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Otsikkoteksti" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sama kirjainkoko" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Luokan '%s' kontrollin lapsi ei voi olla luokan '%s' kontrolli" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Kontrolli '%s':lla ei ole emolomaketta tai -kehystä." #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' ei ole '%s':n emo" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kerma" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kursori" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Mukautetut ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Oletus" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "oikeudet käyttäjä ryhmä koko päivä aika" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Poista tietue?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Poista" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Suunta" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Hakemisto" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopioi" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Liitä" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Samanlaisen kuvakemuodot." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Muokkaa" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Etsi koko tiedostosta" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Virhe" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Virhe luotaessa laiteympäristöä: %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Virhe tapahtui %s:ssa %sosoitteessa %s%s kehyksessä %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Virhe talletettaessa bittikarttaa." #: lclstrconsts.rsexception msgid "Exception" msgstr "Poikkeus" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Hakemiston pitää olla olemassa" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Hakemistoa \"%s\" ei ole olemassa." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Tiedosto \"%s\" on jo olemassa. Kirjoitetaanko yli?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Tiedoston pitää olla olemassa" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Tiedostoa \"%s\" ei ole olemassa." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Tiedostoon \"%s\" ei voi kirjoittaa." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Tiedostoon ei voi kirjoittaa" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Tallenna tiedosto nimellä" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Avaa tiedosto" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Tallennetaanko tiedoston päälle ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Polun pitää olla olemassa" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Polkua \"%s\" ei ole olemassa." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Valitse hakemisto" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(tiedostoa ei löytynyt: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Tiedoston tietoja" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(suodatin)" #: lclstrconsts.rsfind msgid "Find" msgstr "Etsi" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Etsi lisää" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Ensimmäinen" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols ei voi olla > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows ei voi olla > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Lomake" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Lomakkeen resurssia %s ei löydy. Tällaisen lomakkeen kanssa pitää käyttää CreateNew constructoria. Katso globaali muuttuja RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Lomakkeen talletusvuossa \"%s\" virhe: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Eteenpäin" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug liput Näytä tietyt GDK trace/debug viestit." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug liput Älä näytä tiettyjä GDK trace/debug viestejä." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Gtk+/GDK:n tuottamat varoitukset ja virheet pysäyttävät sovelluksen." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradientti aktiivinen otsikko" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradientti ei-aktiivinen otsikko" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafiikka" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Harmaa" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Harmaa teksti" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Vihreä" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Taulukon tiedostoa ei ole" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Taulukon rivin lisäys ei onnistu, koska siinä ei ole sarakkeita" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Taulukon sarakkeen lisäys ei onnistu, koska siinä ei ole rivejä" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Taulukon osoitin sallitun alueen ulkopuolella." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex ei voi olla pienempi kuin edellisen valikon GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Suodatus:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Xt tavan mukaan ohjelman luokka on ohjelman nimi ensimmäinen kirjain suurena. Esimerkiksi gimp luokan nimi on \"Gimp\". Jos --class on määritelty, ohjelman luokka saa arvon \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Salli tietyt Gtk+ jäljitys/debuggaus viestit." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Kytkeydy tiettyyn X palvelimeen, missä \"h\" on host-nimi, \"s\" on palvelimen numero (yleensä 0), ja \"d\" on näytön numero (yleensä ei määritelty). Jos --display ei ole määritelty, käytetään DISPLAY ympäristömuuttujaa." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Lataa määritelty moduuli käynnistyksessä." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Aseta ohjelman nimeksi \"progname\". Jos ei määritelty, ohjelman nimeksi tulee ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Estä tietyt Gtk+ jäljitys/debuggaus viestit." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Älä aseta tilapäistä järjestystä modaaleille lomakkeille" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Ota pois käytöstä X Jeatun Muistin Laajennus." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kutsu XSynchronize (näyttö, True) kun Xserver yhteys on muodostettu. Näin X protokollan virheiden debuggaus helpottuu, koska X kutsuja ei puskuroida ja X virheet saadaan välittömästi kun X palvelin on käsitellyt virheen aiheuttaneen protokollakutsun." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Apu" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Jo rekisteröity" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Ohjetietokanta tälle aiheelle löytyi, mutta aihetta ei" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Ohjetietokantaa tälle aiheelle ei ole asennettu" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Ohjeen virhe" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Ohjeen viittausta %s ei löydy." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Ohjeen viittausta %s ei löydy tietokannasta \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Ohjetietokanta \"%s\" ei löytänyt katseluohjelmaa %s tyyppiselle ohjesivulle" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Ohjetietokantaa \"%s\" ei löydy" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Ohjetta aiheelle \"%s\" ei löydy." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ohjetta aiheelle \"%s\" ei löydy tietokannasta \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ohjeen avainsanaa \"%s\" ei löydy." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ohjeen avainsanaa \"%s\" ei löydy tietokannasta \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Ohjeen solmulla \"%s\" ei ole tietokantaa" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Riville %d, sarakkeelle %d %s:ssa ei löydy ohjetta." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Tälle aiheelle ei ole ohjeita" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Tälle aiheelle ei löydy ohjetta" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Ei rekisteröity" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Ohjeen valitsijan virhe" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Ohjeen tyypille \"%s\" ei ole katseluohjelmaa" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Ohjeen katseluohjelman virhe" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Ei löytänyt katseluohjelmaa tämän tyyppiselle ohjeen sisällölle" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Korosta" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Korosta teksti" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Kuuma kevyt" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X kuvake" #: lclstrconsts.rsicon msgid "Icon" msgstr "Kuvake" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Kuvakkeen kuva ei saa olla tyhjä" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Kuvakkeen kuvalla pitää olla sama formaatti" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kuvakkeen formaatin muuttaminen ei onnistu" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Kuvakkeen kuvalla pitää olla sama koko" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kuvakkeen koon muuttaminen ei onnistu" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Kuvakkeella ei nyt ole kuvaa" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Passiivine reuna" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Passiivine otsikko" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Passiivine otsikko" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s osoitin %d ulkona rajoista 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Osoitin ulkona rajoista Solu[sarake=%d Rivi=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Tieto tausta" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Tieto teksti" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Lisää" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Kelvoton päivämäärä: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Kelvoton päivämäärä: %s. Pitää olla välillä %s and %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Kelvoton lomakkeen objektin vuo" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Kelvoton ominaisuuden arvo" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Kelvoton vuon muoto" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s on jo yhdistetty %s:hen" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Viimeinen" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limetti" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Luettelon osoitin ylittää rajat (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Keskeytä" #: lclstrconsts.rsmball msgid "&All" msgstr "Kaikki" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Peru" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Sulje" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ohje" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "Ohita" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ei" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ei kaikkiin" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Avaa" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Uudelleen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Tallenna" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Pura Lukitus" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Kyllä" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Kyllä, kaikki" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Puoliharmaa" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Valikkopalkki" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Valikko" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Valikon korostus" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Valikon teksti" #: lclstrconsts.rsmodified msgid " modified " msgstr " muokattu " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Rahan vihreä" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Todennus" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Vahvistus" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Mukautettu" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Virhe" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informaatio" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Varoitus" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Laivaston sininen" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Seuraava" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ei mitään" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Kelvoton taulukkotiedosto" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Ei widgetset objektia. Tarkista onko käännösyksikkö \"interfaces\" lisätty ohjelman uses-lauseeseen." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliivi" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Valitse päivä" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Siirrettävä bittikartta" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Siirrettävä harmaakartta" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Siirrettävä verkkografiikka" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Siirrettävä PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Edellinen" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Kysy korvattaessa" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Ominaisuutta %s ei ole" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purppura" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (vain X11:ssa), ajettaessa debuggerin alla voi lisätä itsestään -nograb, käytä -dograb kumotaksesi sen. Tarvitsee QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem parametri, asettaa backendin ruudulla olevien kontrollien ja QPixmaps:n käyttöön. Sallittuja asetuksia ovat natiivi, rasteri and opengl. OpenGL ei ole vielä vakaa." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, kertoo Qt:le ettei se saa koskaan ottaa hiirtä tai näppäimistöä haltuunsa. Tarvitsee QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, asettaa ohjelman asetelman suunnaksi Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessio, palauttaa ohjelman aiemmasta sessiosta." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style tyyli tai -style=tyyli, asettaa ohjelman käyttöliittymän tyylin. Mahdollisia arvoja ovat motif, windows, ja platinum. Jos QT käännettiin lisätyylien kanssa tai sillä tyyli-plugineja, ne ovat käytettävissä -style komentorivioption kanssa. Huom. Kaikki tyylit eivät ole tajolla kaikilla alustoilla. Jos tyyli-parametria ei ole QT käynnistää ohjelman yleisellä oletustyylillä (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet tyylisivu tai -stylesheet=tyylisivu, asettaa ohjelman tyylisivun. Arvon pitää olla polku tiedostoon, missä tyylisivu on. Huom. Suhteelliset URL:t tyylisivussa ovat suhteessa tiedoston polkuun." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (vain X11), kytkee päällä synkronisen virheenjäljitystilan." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, tulostaa lopuksi debug-viestin tuhoamattomien kontrollien määrästä ja suurimmasta kontrollien määrästä sillä hetkellä." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg tai -background väri, asettaa taustan oletusvärin ja ohjelman paletin (vaaleat ja tummat sävyt lasketaan)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn tai -button väri, asettaa nappien oletusvärin." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, saa ohjelman asentamaan paikallisen värikartan 8-bittiselle näytölle." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display näyttö, asettaa X näytön (oletus on $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg or -foreground väri, asettaa oletusvärin." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn tai -font kirjasin, määrittelee ohjelman kirjasimen. Kirjasin pitäisi antaa X:n loogisena kirjasin-määrityksenä." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, asettaa asiakkaan geometrian ensimmäiselle näkyvälle ikkunalle." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, asettaa syöttömetodin palvelimen (sama kuin XMODIFIERS ympäristömuuttujan asettaminen)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, määrittelee miten syöte tulee tietylle kontrollille, esim. onTheSpot saa syötteen näkymään suoraan kontrollissa, kun taas overTheSpot saa syötteen näkymään kontrollin päällä leijuvassa laatikossa ja kontrolli saa sen vasta kun muokkaus loppuu." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nimi, asettaa ohjelman nimen." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols määrä, rajoittaa värien määrää värikuutiossa 8-bittisessä näytössä, jos ohjelma käyttää QApplication::ManyColor värimääritystä. Jos määrä on 216, käytetään 6x6x6 värikuutiota (siis 6 punaisen, 6 vihreän ja 6 sinisen sävyä); muille arvoille käytetään kuutiota sunnilleen 2x3x1 suhteella." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title otsikko, asettaa ohjelman otsikon." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, pakottaa ohjelman käyttämään TrueColor näkymää 8-bittisessä näytössä." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate vaikka päivitys ei ollut käynnissä" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kuvan tallennus ei onnistu kun päivitys on käynnissä" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Ei voi aloittaa kaikkien päivitystä kun canvas päivitys on käynnissä" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Punainen" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Virkistä" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Etsi ja korvaa" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Korvaa kaikki" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resurssia %s ei löydy" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Vierintäpalkki" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Vierintäpalkin ominaisuus sallitun alueen ulkopuolella" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Valitse väri" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Valitse fontti" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Hopea" #: lclstrconsts.rssize msgid " size " msgstr " koko " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Taivaan sininen" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Kontrolli välilehtien kanssa" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Sinivihreä" #: lclstrconsts.rstext msgid "Text" msgstr "Teksti" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Sisäistä URL:a voi vain lukea. Muuta sen sijaan BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Paneeli" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Kahva millä säädetään alueen kahden osan koko" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Puumuoto" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Oletuskirjasimen lataus ei onnistu" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Tuntematon virhe, raportoi se" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Tuntematon kuvan pääte" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Tuntematon kuvan formaatti" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Bittikartan formaattia ei tueta." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Leikepöydän formaattia %s ei tueta." #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "VAROITUS: On %d julkaisematonta DC:ta, tarkempi tuloste seuraa:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "VAROITUS: On %d julkaisematonta GDIObjects:ia, tarkempi tuloste seuraa:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "VAROITUS: Jonoon on jäänyt %d viestiä! Ne vapautetaan" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "VAROITUS: On jäänyt %d TimerInfo tietuetta! Ne vapautetaan" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "VAROITUS: On jäänyt %s LM_PAINT/LM_GtkPAINT viestiä poistamatta." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Valkoinen" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Etsi vain kokonaisia sanoja" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Virhe:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Varoitus:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Ikkuna" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Ikkunan kehys" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Ikkunan teksti" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Keltainen" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Ei voi fokusoida estettyä tai näkymätöntä ikkunaa" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Samanlaiset valikot" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Kelvoton toiminnon luonti" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Kelvoton toiminnon luettelointi" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Kelvoton toiminnon rekisteröinti" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Kelvoton toiminnon rekisteröinnin purku" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Kelvoton kuvan koko" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Kelvoton ImageList osoitin" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Nykyinen teksti ei täsmää annetun maskin kanssa." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Valikon osoitin sallitun alueen ulkopuolella" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem on nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Alivalikko ei ole valikossa" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Alas" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Loppuun" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Koti" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Vasen" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Oikea" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "Välilyönti" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Ylös" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Ei ajastimia saatavilla" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Kontrollilla \"%s\" ei ole emo-ikkunaa." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Väärä token tyyppi: odotettiin %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Kelvoton liukuluku: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Kelvoton kokonaisluku: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (kohdassa %d,%d, vuon siirros %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Päättämätön tavun arvo" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Päättämätön teksti" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Väärä token symboli: odotettiin %s mutta saatiin %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Väärä token tyyppi: odotettiin %s mutta saatiin %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s tavua" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Kelvoton polku:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Kelvoton suhteellinen polku:\n" "\"%s\"\n" "suhteessa juuripolkuun:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Kelvoton polku:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nimi" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Valittua kohtaa ei ole levyllä:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Koko" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tyyppi" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.es.po����������������������������������������������������0000644�0001750�0000144�00000132761�15104114162�020637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Alonso Cárdenas <acardenas@bsd-peru.org>\n" "PO-Revision-Date: 2018-09-19 13:52-0500\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: lcl\n" "POT-Creation-Date: \n" "MIME-Version: 1.0\n" "Language: es\n" "X-Generator: Poedit 2.1.1\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Navegador \"%s\" no ejecutable." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Navegador \"%s\" no encontrado." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Error al ejecutar \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "No se pudo encontrar un visor HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "No encontrado un Navegador HTML.%sPor favor definir uno en Herramientas -> Opciones -> Ayuda -> Opciones de ayuda" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "La base de datos de la ayuda \"%s\" no pudo encontrar el archivo \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s en BrowserParams será reemplazada por la URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ayuda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconocido" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s no encontrado" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Sombra Oscura" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Iluminado" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un control no puede tenerse a si mismo como padre" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borde Activo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Título activo" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Todos los archivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espacio de trabajo de la Aplicación" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Agua" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Clase %s no pude tener a %s como padre" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Escritorio" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Hacia atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Negro" #: lclstrconsts.rsblank msgid "Blank" msgstr "En blaco" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Frente del Botón" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Resaltado del Botón" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra del Botón" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto del Botón" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "No se puede establecer el foco" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "El lienzo no permite dibujar" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto de la leyenda" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensible a mayúsculas/minúsculas" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "El control de clase '%s' no puede tener al control de clase '%s' como hijo" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Control '%s' no tiene un formulario o frame padre" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "'%s' no es un padre de '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predeterminado" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permisos usuario grupo tamaño fecha hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "¿Borrar registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Suprimir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Dirección" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Directorio" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Copiar" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Pegar" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato de icono." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Buscar en todo el archivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Error" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Error creando contexto de dispositivo para %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Ocurrió un error en %s en %s Dirección %s%s Marco %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Error al salvar el bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepción" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "El directorio debe de existir" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "El directorio \"%s\" no existe." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "El archivo \"%s\" ya existe. ¿Sobreescribir?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "El archivo debe existir" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "No existe el archivo \"%s\"" #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "No se puede escribir en el archivo \"%s\"" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "El archivo no se puede escribir" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Guardar archivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir un archivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "¿Sobreescribir archivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "La ruta debe existir" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "No existe la ruta \"%s\"" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Seleccionar Directorio" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(archivo no encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Información de archivo" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtro)" #: lclstrconsts.rsfind msgid "Find" msgstr "Buscar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Buscar más" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primero" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols no puede ser > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows no puede ser > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulario" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Recurso del formulario %s no encontrado. Para formularios sin recursos se debe utilizar el constructor CreateNew. Ver la variable global RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Flujo de Formulario \"%s\" error: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adelante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fucsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug-flags Activa los mensajes de traza/depurado específicos de GDK" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug-flags Desactiva los mensajes de traza/depurado específicos de GDK" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Formato de Intercambio de Gráficos" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Las alertas y errores generados por Gtk+/GDK interrumpirán la aplicación" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradiente de la Leyenda Activa" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradiente de la Leyenda Inactiva" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Gráfico" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gris" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto Gris" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Fichero rejilla no existe" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "No se pueden insertar filas en la rejilla cuando ésta no tiene columnas" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "No se pueden insertar columnas en la rejilla cuando ésta no tiene filas" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice de la rejilla de datos fuera de rango." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex no puede ser menor que un elemento de menú anterior de GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historial:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class nombre de clase Siguiendo las convenciones Xt, la clase de un programa es el nombre del programa con el caracter inicial en mayúsculas. Por ejemplo, el nombre de clase para gimp es \"Gimp\". Si se especifica --class, la clase del programá se establecerá a \"nombre de clase\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug-flags Activa los mensajes de traza/depurado específicos de Gtk+" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta al servidor X especificado, donde \"h\" es el nombre del host, \"s\" el número de servidor (normalmente 0), y \"d\" el número de display (normalmente omitido). Si no se especifica --display, se usará el variable de entorno DISPLAY" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulo Carga el módulo especificado en al inicio." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "-name progname Establece el nombre del programa en \"progname\". Si no se especifica el nombre del programa se establecerá en ParamStrUTF8 (0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug-flags Desactiva los mensajes de traza/depurado específicos de Gtk+" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient No establecer el orden transitorio para los formularios modales." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desactivar el uso de Extensión de Memoria Compartida de X" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Llama a XSynchronize (display, True) después que se haya establecido la conexión el servidor X. Esto hace más fácil depurar los errores de protocolo de X, porque se desactivará la solicitud de buffer y los errores de X serán recibidos inmediatamente después que el protocolo que generó el error haya sido procesado por el servidor X." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ayuda" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Ya está registrado" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Se ha encontrado una base de datos de ayuda sobre éste tópico, pero este tópico en concreto no se ha encontrado" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Base de datos de ayuda no instalada para este tópico" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Error de la ayuda" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Contexto de ayuda %s no encontrado." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Contexto de ayuda %s no encontrado en la base de datos \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "La base de datos de ayuda \"%s\" no encontró un visor para el tipo de página de ayuda %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Base de datos de ayuda \"%s\" no encotrada" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgctxt "lclstrconsts.rshelphelpfordirectivenotfound" msgid "Help for directive \"%s\" not found." msgstr "Ayuda para directiva \"%s\" no encontrada." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ayuda para directiva \"%s\" no encontrada en la base de datos \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Clave de ayuda \"%s\" no encontrada" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Clave de ayuda \"%s\" no encontrada en la Base de Datos \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "El nodo de ayuda \"%s\" no tiene Base de Datos de ayuda" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "No se ha encontrado ayuda para la línea %d, columna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "No hay nodos de ayuda disponibles" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ayuda no encontrada para éste tópico" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: No registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector de ayuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "No hay visor de ayuda para el tipo de ayuda \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Error en el visor de ayuda" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Visor de ayuda no encontrado" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Resaltar" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Resaltar texto" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz Intensa" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Icono Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icono" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "La imagen del Icono no puede estar vacía" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "La imagen del Icono debe tener el mismo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "No se puede cambiar el formato del icono imagen" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "La imagen del Icono debe tener el mismo tamaño" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "No se puede cambiar el tamaño del icono" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "El Icono no tiene imagen actual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borde Inactivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Leyenda Inactiva" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Leyenda Inactiva" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %d fuera de límites 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice Fuera de rango Celda[Col=%d Línea=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fondo Informativo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texto Informativo" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insertar" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Fecha Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Fecha Inválida: %s. Debe estar entre %s y %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Flujo de objeto formulario inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propiedad inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato de flujo inválido" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s ya está asociado con %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lima" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "El índice de lista excede los límites (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrón" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Todo" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Cerrar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "A&yuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a todo" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Aceptar" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Reintentar" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Guardar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Desbloquear" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sí" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sí a &Todo" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gris medio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra de Menú" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menú" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menú Resaltado" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto de Menú" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde Billete" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticación" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmación" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Error" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Información" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Advertencia" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul Marino" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Siguiente" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ninguno" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "No es un archivo de rejilla de datos válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "No existe un objeto widgetset. Por favor, compruebe que la unidad \"interfaces\" ha sido añadida a la cláusula uses del programa" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Seleccione una fecha" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Enviar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sPresionar OK para ignorar y arriesgarse a una corrupción de datos.%sPresionar Abortar para detener el programa" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Preguntar al sustituir" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "La propiedad %s no existe" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Púrpura" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (sólo bajo X11), ejecutándose bajo un depurador puede provocar un -nograb implícito, usar -dograb para reemplazar. Necesita QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem parámetro, establece el backend que se utilizará para los widgets en pantalla y QPixmaps. Las opciones disponibles son native, raster y opengl. OpenGL es todavía inestable." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, le dice a Qt que debe ignorar al ratón o al teclado. Necesita QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, establece la dirección del diseño de la aplicación a Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sesión, restaura la aplicación desde una sesión anterior." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style estilo o -style=estilo, establece el estilo de GUI de la aplicación. Los valores posibles son motif, windows, y platinum. Si compiló Qt con estilos adicionales o tiene estilos adicionales como plugins, estos estarán disponibles con la opción de línea de comando -style. NOTA: No todos los estilos están disponibles en todas las plataformas. Si el parámetro de estilo no existe Qt iniciará la aplicación con el estilo común por defecto (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet hoja de estilo o -stylesheet=hoja de estilo, establece una hoja de estilo para la aplicación. El valor debe ser una ruta a un archivo que contenga la hoja de estilo. Nota: Las URLs relativas en el archivo de la hoja de estilo son relativas a la ruta del archivo de la hoja de estilo. " #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (solo bajo X11), cambia al modo síncrono para la depuración." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, imprime un mensaje de depuración al final sobre el número de widgets que se dejaron sin destruir y el número máximo de widgets existentes al mismo tiempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg o -background color, establece el color de fondo predeterminado y una paleta para la aplicación (los tonos claros y oscuros son calculados)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn o -button color, establece el color predeterminado del botón." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, hace a la aplicación instalar un mapa de color privado en una pantalla de 8 bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display pantalla, establece la pantalla X (por defecto es $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg o -foreground color, establece el color predeterminado de las aplicaciones en primer plano." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn o -font fuente, define la fuente de la aplicación. La fuente debe ser especificada usando una XLFD (X logical font description)." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometría, establece la geometría del cliente de la primera ventana que se muestra." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, establece el servidor de métodos de entrada (equivalente a establecer la variable de entorno XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, define como la entrada es insertada en el widget dado, ejem. onTheSpot hace que la entrada aparezca directamente en el widget, mientras overTheSpot hace que la entrada aparezca en un recuadro flotando sobre el widget y no es insertada hasta que la edición está hecha." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nombre, establece el nombre de la aplicación." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols recuento, limita el número de colores asignados en el cubo de color en una pantalla de 8 bits, si la aplicación está usando la especificación de color QApplication::ManyColor. Si el recuento es 216 entonces se usa un cubo de color 6x6x6 (es decir 6 niveles de rojo, 6 de verde, y 6 de azul); para otros valores, se usa un cubo aproximadamente proporcional a un cubo 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title título, establece el título de la aplicación." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, fuerza la aplicación para usar una representación visual de color verdadero en una pantalla de 8 bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Fin de la actualización mientras no haya ninguna actualización en curso" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "No se puede guardar la imagen mientras la actualizacion esta en curso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "No puede comenzar la actualización de todo cuando sólo el lienzo se está actualizando" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rojo" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Refrescar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Reemplazar" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Reemplazar todo" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s no encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de Desplazamiento" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propiedad ScrollBar fuera de rango" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Seleccione color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Seleccione una fuente" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Plateado" #: lclstrconsts.rssize msgid " size " msgstr " tamaño " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul Celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Un control con pestañas" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Turquesa" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "La URL incorporada es de solo lectura. Cambie el BaseURL en su lugar." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato de Archivo de Imagen Etiquetado" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Un agarre para controlar cuanto tamaño para dar dos partes de un área" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Un árbol de items" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "No se ha podido cargar la fuente predeterminada" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Error desconocido. Por favor, informe de este fallo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensión de imagen no válida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato de imagen desconocida" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato de mapa de bits no soportado" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Formato de portapapeles no soportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ADVERTENCIA: Hay %d DCs sin liberar, lo siguiente es un volcado detallado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ADVERTENCIA: Hay %d GDIObjects sin liberar, lo siguiente es un volcado detallado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ADVERTENCIA: ¡Quedan %d mensajes pendientes en la cola! Se liberarán" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ADVERTENCIA: Quedan %d estructuras TimerInfo. Se liberarán." #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ADVERTENCIA: Hay %s mensajes de enlaces LM_PAINT/LM_GtkPAINT sin eliminar" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Blanco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Sólo palabras completas" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Error:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Advertencia:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Ventana" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Marco de Ventana" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto de Ventana" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarillo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "No se puede establecer el foco en una ventana desactivada o invisible" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menús" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creación de una acción inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeración de una acción inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de una acción inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Anulación del registro de una acción inválida" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamaño de imagen inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice de ImageList Inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "El texto actual no coincide con la máscara especificada." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice de menú fuera de rango" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem es nulo" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-menu no está en el menú" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Retroceso" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Supr" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abajo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fin" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Inicio" #: lclstrconsts.smkcins msgid "Ins" msgstr "Insert" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Izquierdo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "AvPág" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "RePág" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Derecha" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espacio" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulador" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Arriba" #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hay temporizadores disponibles" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "El Control \"%s\" no tiene ventana padre." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Tipo de token incorrecto: Se esperaba %s " #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Número de coma flotante no válido : %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Número entero no válido: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (en %d,%d, flujo de desplazamiento %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor byte no finalizado" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Cadena de texto no finalizada" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo de token incorrecto: Se esperaba %s pero se encontro %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Tipo de token incorrecto: Se esperaba %s pero se encontro %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bytes" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nombre de ruta no válida:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Ruta relativa no válida:\n" "\"%s\"\n" "en relación a la ruta raíz:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nombre de ruta no válida:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nombre" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "El elemento seleccionado no existe en el disco:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Tamaño" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tipo" ���������������doublecmd-1.1.30/language/lcl/lclstrconsts.de.po����������������������������������������������������0000644�0001750�0000144�00000122462�15104114162�020615� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2018-07-30 13:15+0200\n" "Last-Translator: Swen Heinig <swen@heinig.email>\n" "Language-Team: Deutsch <lazarus@miraclec.com>\n" "MIME-Version: 1.0\n" "X-Poedit-SourceCharset: utf-8\n" "Language: de_DE\n" "X-Generator: Poedit 2.1.1\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Browser \"%s\" nicht ausführbar." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Browser \"%s\" nicht gefunden." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Fehler beim Ausführen von \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Kann den HTML-Browser nicht finden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Kein HTML-Browser gefunden.%sBitte legen Sie einen fest unter Werkzeuge -> Einstellungen -> Hilfe -> Hilfeeinstellungen" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Die Hilfedatenbank \"%s\" konnte die Datei \"%s\" nicht finden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Das Makro %s in BrowserParams wird durch den URL ersetzt." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Strg" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Hilfe" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Umsch" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Unbekannt" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s nicht gefunden" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Dunkl. 3D-Schatten" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D-Licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Ein Control kann nicht sein eigener Vorfahr sein" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktiver Rand" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktive Titelleiste" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Alle Dateien (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Arbeitsbereich" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aquamarin" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Desktop" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Rückwärts" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Schwarz" #: lclstrconsts.rsblank msgid "Blank" msgstr "Leer" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blau" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Schalterfläche" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Schalter-Hervorheb." #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Schalter-Schatten" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Schalter-Text" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Rechner" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kann nicht fokussieren" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas erlaubt kein Zeichnen" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Titelleistentext" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Schreibweisenabhängig" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Cremefarbig" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Zeiger" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Eigene ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Voreingestellt" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "Genehmigung User GruppeGröße DatumZeit" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Datensatz löschen?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Löschen" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Richtung" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Verzeichnis" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopieren" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Einfügen" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Doppeltes Icon-Format" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Bearbeiten" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Gesamte Datei durchsuchen" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fehler" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Fehler beim Erzeugen des Gerätekontexts für %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fehler aufgetreten in %s bei %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Fehler beim Speichern der Bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exception" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Verzeichnis muß vorhanden sein" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Das Verzeichnis \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Die Datei \"%s\" ist bereits vorhanden. Überschreiben?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Datei muß vorhanden sein" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Die Datei \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Die Datei \"%s\" ist schreibgeschützt." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Datei ist nicht beschreibbar" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Datei sichern als" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Vorhandene Datei öffnen" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Datei überschreiben?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Pfad muß angelegt sein" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Der Pfad \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Verzeichnis auswählen" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(Datei nicht gefunden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dateiinformation" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filter)" #: lclstrconsts.rsfind msgid "Find" msgstr "Suchen" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Weitersuchen" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Erster" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols kann nicht größer ColCount sein" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows kann nicht größer RowCount sein" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Die Formular-Ressource %s wurde nicht gefunden. Für Formulare ohne Ressourcen muss der Constructor CreateNew verwendet werden. Siehe die globale Variable \"RequireDerivedFormResource\"." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Form-Streaming \"%s\" Fehler: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Vorwärts" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpur" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Besondere GDK-Trace/Debug-Meldungen anschalten." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Besondere GDK-Trace/Debug-Meldungen abschalten." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Von Gtk+/GDK generierte Warnungen und Fehler halten das Programm an." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient der aktiven Titelleiste" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient der inaktiven Titelleiste" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grau" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Ausgegrauter Text" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Grün" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Kann keine Zeilen in ein Grid einfügen, wenn es keine Spalten hat." #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Kann keine Spalten in ein Grid einfügen, wenn es keine Zeilen hat" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Gitterindex außerhalb des Bereichs." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex darf nicht kleiner als der GroupIndex eines vorherigen Menüeintrags sein" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Verlauf:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Den Xt-Konventionen folgend, entspricht der Klassenname dem Programmnamen mit dem ersten Buchstaben in Großschreibung. Beispielsweise ist der Klassenname von gimp \"Gimp\". Wenn --class angegeben ist, wird die Klasse des Programme auf \"classname\" gesetzt." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Anschalten spezifischer Trace-/Debug-Meldungen des Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Anbinden an den angegebenen X-Server wobei \"h\" für den Hostnamen steht, \"s\" die Nummer des Server ist (normalerweise 0) und \"d\" die Nummer des Displays (typischerweise weggelassen). Ist --display nicht angegeben, gilt der Wert der Umgebungsvariable DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Das abgegebene Modul beim Starten laden." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Setzen des Programmnamens auf \"progname\". Ist nichts angegeben, wird der Name auf ParamStrUTF8(0) gesetzt." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Besondere Gtk+-Trace-/Debug-Meldungen abschalten." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Transiente Reihenfolge für modale Formulare nicht setzen." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Abschalten der Verwendung der Shared-Memory-Erweiterung von X" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Aufruf von XSynchronize (Display, True) nachdem die XServer-Verbindung zustandegekommen ist. Dies erleichtert das Debugging des X-Protokolls, weil die X-Anfragepufferung abgeschaltet ist und X-Fehler sofort ankommen, nachdem die Anfrage, die den Fehler erzeugt hat, beim X-Server angekommen ist." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Hilfe" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Bereits registriert" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Eine Hilfe-Datenbank wurde für dieses Thema gefunden, aber dieses Thema wurde nicht gefunden" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Es ist keine Hilfedatenbank installiert" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hilfefehler" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Hilfekontext %s nicht gefunden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Hilfekontext %s nicht in der Datenbank \"%s\" gefunden." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Die Hilfedatenbank \"%s\" fand keinen Betrachter für eine Hilfeseite des Typs %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Hilfedatenbank \"%s\" nicht gefunden" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Hilfe für Direktive \"%s\" nicht gefunden." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Hilfe für Direktive \"%s\" nicht in Datenbank \"%s\" gefunden." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Hilfeschlüsselwort \"%s\" nicht gefunden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Hilfeschlüsselwort \"%s\" nicht in der Datenbank \"%s\" gefunden." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Hilfeknoten \"%s\" besitzt keine Hilfedatenbank" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Keine Hilfe für Zeile %d, Spalte %d von %s gefunden." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Keine Hilfeeinträge verfügbar" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Hilfe für dieses Thema nicht gefunden" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Nicht registriert" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hilfeauswahlfehler" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Es gibt keinen Viewer für den Hilfetyp \"%s\"." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hilfebetrachterfehler" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Hilfebetrachter nicht gefunden" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Hervorhebung" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Hervorgehob. Text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Kräftig hervorgehoben" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "OSX-Icon-Ressource" #: lclstrconsts.rsicon msgid "Icon" msgstr "Symbol" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Icon-Bild darf nicht leer sein" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Icon-Bild muß das gleiche Format haben" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kann Format des Icon-Bilds nicht ändern" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Icon-Bild muß die gleiche Größe haben" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kann Größe des Icon-Bilds nicht ädnern" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Icon besitzt kein gültiges Bild" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktiver Rand" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktive Titelleiste" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktive Titelleiste" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d außerhalb des Bereichs 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index außerhalb des Bereichs Zelle[Spalte=%d Reihe=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Info-Hintergrund" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Infotext" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Einfg" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Ungültiges Datum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ungültiges Datum: %s. Es muß zwischen %s und %s sein" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "ungültiger Formularobjekt-Stream" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ungültiger Eigenschaftenwert" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Ungültiges Streamformat" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s ist bereits mit %s verbunden" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Jpint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Letzter" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Hellgrün" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Listenindex überschreitet Grenzen (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kastanienbraun" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abbruch" #: lclstrconsts.rsmball msgid "&All" msgstr "&Alle" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Schließen" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Hilfe" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Übergehen" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nein" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Immer Nein" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Ok" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Öffnen" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Wiederholen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Speichern" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Freigeben" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "&Alles bestätigen" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Mittelgrau" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menübalken" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menühervorhebung" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menütext" #: lclstrconsts.rsmodified msgid " modified " msgstr " geändert " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "\"Geldgrün\"" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Authentifikation" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bestätigung" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Spezial" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fehler" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Information" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Warnung" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marineblau" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Nächster" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Keine" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Keine gültige Grid-Datei" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Kein Widgetset-Objekt. Bitte überprüfen Sie, ob die Unit \"Interfaces\" in der Uses-Anweisung des Programms enthalten ist." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliv" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Datum auswählen" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable Bitmap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable Graymap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG-Grafik" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable Pixmap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Übertragen" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorher" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Beim Ersetzen nachfragen" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Eigenschaft %s fehlt" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpur" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, setzt die Anwendungs-Layoutausrichtung auf Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, stellt die Anwendung aus einer früheren Sitzung wieder her." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (nur unter X11), wechselt zum synchronen Modus für das Debuggen." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg oder -foreground color, setzt die Vorgabe-Vordergrundfarbe." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, setzt den Anwendungsnamen." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, setzt den Anwendungstitel." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate wenn kein Update läuft" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kann Bild während des Updates nicht sichern" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kann nicht mit dem kompletten Aktualisieren beginnen wenn ein Canvas-Update durchgeführt wird" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rot" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Auffrischen" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Ersetzen" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Alle ersetzen" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s nicht gefunden" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Scrollbalken" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Scrollbar-Eigenschaft außerhalb des Bereichs" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Farbe auswählen" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Schriftart auswählen" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Silber" #: lclstrconsts.rssize msgid " size " msgstr " Größe " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Himmelblau" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Türkis" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kann Default-Schriftart nicht laden" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Unbekannter Fehler, bitte melden Sie diesen Bug." #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Unbekannte Bilddateiendung" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Unbekanntes Bildformat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nicht unterstütztes Bitmap-Format" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nicht unterstütztes Clipboard-Format: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "WARNUNG: Es gibt %d nicht freigegebene DCs. Es folgt ein detaillierter Dump:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "WARNUNG: Es gibt %d nicht freigegebene GDI-Objekte. Es folgt ein detaillierter Dump:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "WARNUNG: Es sind %d Meldungen in der Queue übrig. Sie werden freigegeben" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "WARNUNG: Es sind %d Timerinfo-Strukturen übrig, sie werden freigegeben" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "WARNUNG: Es sind %s nicht entfernte LM_PAINT/LM_GtkPAINT-Meldungs-Links übrig." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Weiß" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Nur ganze Worte" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fehler:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Warnung:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Fenster" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Fensterrahmen" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Fenstertext" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Gelb" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kann abgeschaltetes oder unsichtbares Fenster nicht fokussieren" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Doppelte Menüs" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ungültige Action-Erzeugung" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ungültige Action-Numerierung" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ungültige Action-Registrierung" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ungültige Action-Registierungsaufhebung" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ungültige Bildgröße" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ungültiger Bildlistenindex" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Der aktuelle Text stimmt nicht mit der angegebenen Maske überein." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menüindex außerhalb des Bereichs" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menüeintrag ist NIL" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Untermenü ist nicht im Menü" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Rück" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Strg+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Entf" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Hinunter" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Ende" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Pos1" #: lclstrconsts.smkcins msgid "Ins" msgstr "Einfg" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Links" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "Bild ↓" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "Bild ↑" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Rechts" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Umsch+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Leer" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Hoch" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Keine Timer verfügbar" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Falscher Token-Typ: %s erwartet" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Ungültige Gleitkommazahl: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Ungültiger Integerzahl: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (bei %d,%d, Stream-Offset %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nicht abgeschlossener Byte-Wert" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nicht abgeschlossene Zeichenkette " #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Falscher Token: %s erwartet, %s gefunden" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Falscher Token-Typ: %s erwartet, %s gefunden" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s Bytes" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Ungültiger Pfadname:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Ungültiger Pfadname:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Name" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Größe" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Typ" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.da.po����������������������������������������������������0000644�0001750�0000144�00000124052�15104114162�020606� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, fuzzy,badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Browser %s%s%s kan ikke åbnes." #: lclstrconsts.hhshelpbrowsernotfound #, fuzzy,badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Browser %s%s%s kan ikke findes." #: lclstrconsts.hhshelperrorwhileexecuting #, fuzzy,badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Fejl under udførsel %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Kan ikke finde en HTML-browser." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, fuzzy,badformat msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Ingen HTML-browser fundet. Definer venligst en under Værktøjer -> Indstillinger -> Hjælp -> Hjælp - indstillinger" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, fuzzy,badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Hjælpedatabasen %s%s%s kunne ikke finde filen %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makroen %s i BrowserParams vil blive erstattet med URL'en." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Hjælp" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ukendt" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s ikke fundet" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Mørk 3D-skygge" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Lys 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "En kontrol kan ikke have sig selv som overordnet" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktiv kant" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktiv titelliste" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Alle filer (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Arbejdsområde" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Akvamarin" #: lclstrconsts.rsascannothaveasparent msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Skrivebord" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Tilbage" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Sort" #: lclstrconsts.rsblank msgid "Blank" msgstr "Tomt" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blå" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Knapflade" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Knap fremhævet" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Knapskygge" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Knaptekst" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Regnemaskine" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kan ikke fokusere" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Lærred tillader ikke tegning" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Titellistetekst" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Forskel på store og små bogstaver" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Kontrol over class '%s' kan ikke have kontrol over class '%s', da den er underordnet" #: lclstrconsts.rscontrolhasnoparentformorframe msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Kontrol '%s' har ikke et overordnet vindue" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' er ikke overordnet for '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme-farvet" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Markør" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Brugerdefineret ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Standard" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "tilladelser brugergruppe størrelse dato tid" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Slet optegnelse" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Slet" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Retning" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Mappe" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Dobbelt ikon-format" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Redigere" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Søg hele filen" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fejl" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Kunne ikke oprette kontekst for enhed %s.%s" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fejl i %s på %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Kunne ikke gemme bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Undtagelse" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Mappen skal eksistere" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Mappen \"%s\" findes ikke." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Filen \"%s\" findes allerede. Skal den overskrives ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Filen skal eksistere" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Filen \"%s\" findes ikke." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Filen \"%s\" er skrivebeskyttet." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Filen er skrivebeskyttet" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Gem som" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Åbn eksisterende fil" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Overskriv fil ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Stien skal eksistere" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Stien \"%s\" findes ikke." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Slet mappe" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(fil ikke fundet: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Filinformation" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "Søg" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Søg igen" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Første" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols kan ikke være >=ColCount" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows kan ikke være >=RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Formressourcen %s kan ikke findes. Til ressourceløse forms skal CreateNew constructor anvendes. Se den globale variable RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Form-streaming \"%s\" fejl: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Frem" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpur" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Tænd for særlig GDK trace/debug meddelelser." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Sluk for særlig GDK trace/debug meddelelser." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "GIF (Graphics Interchange Format)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Advarsler og fejl genereret af Gtk+/GDK vil standse programmet" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient af den aktive titelliste" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient af den inaktive titelliste" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grå" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Grå tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Grøn" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Mønsterindeks uden for interval" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex må ikke være mindre end forrige menus GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historik:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Ifølge Xt-konventionerne, er et programs class dets navn med det første tegn med stort. F.eks. er class-navnet for gimp: \"Gimp\". Hvis --class er specificeret, bliver programmets class til \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Tænd for særlig Gtk+ trace/debug meddelelser." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Forbind til den valgte X server, hvor \"h\" er værtsnavnet, \"s\" er serveres nummer (normalt 0), og \"d\" er displayets nummer (typisk udeladt). Hvis --display ikke er specificeret, bliver DISPLAY miljøvariablen anvendt." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Indlæs det specificerede modul ved start." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Indstil programmets navn til \"progname\". Hvis ikke specificeret, bliver programmets navn sat til ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Sluk for særlig Gtk+ trace/debug meddelelser." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Indstil ikke midlertidig rækkefølge for modalformer" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Deaktiver brugen af X Delt Memory-udvidelse." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kald XSynchronize (display, True) efter Xserver-forbindelsen er etableret. Det gør det nemmere at fejlfinde X protokolfejl, fordi X forespørgsels-buffering bliver deaktiveret og X fejl bliver modtaget umiddelbart efter protokolanmodningen, som genererede fejlen, er blevet behandlet af X serveren." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Hjælp" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Allerede registreret" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Der blev fundet en hjælpedatabase til emnet, men emnet blev ikke fundet" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Der er ingen hjælpedatabase installeret til emnet" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hjælpefejl" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Hjælpekontekst %s ikke fundet." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, fuzzy,badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Hjælpekontekst %s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, fuzzy,badformat #| msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Hjælpedatabase %s%s%s fandt ikke en fremviser til en hjælpeside af typen %s" #: lclstrconsts.rshelphelpdatabasenotfound #, fuzzy,badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Hjælpedatabase %s%s%s ikke fundet" #: lclstrconsts.rshelphelpfordirectivenotfound #, fuzzy,badformat #| msgid "Help for directive %s%s%s not found." msgid "Help for directive \"%s\" not found." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, fuzzy,badformat #| msgid "Help for directive %s%s%s not found in Database %s%s%s." msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet i database %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Søgeord %s%s%s ikke fundet." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, fuzzy,badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Søgeord %s%s%s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, fuzzy,badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "Hjælpeknude %s%s%s har ingen hjælpedatabase tillknyttet" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Ingen hjælp til linje %d, kolonne %d af %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Ingen opslag tilgængelige for emnet" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ingen hjælp fundet for emnet" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Ikke registreret" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hjælpeudvælgerfejl" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, fuzzy,badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Der er ingen fremviser for hjælpetype %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hjælpefremviserfejl" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Der blev ikke fundet en fremviser til denne type af hjælpeindhold" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Fremhævelse" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Fremhæv tekst" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Kraftigt fremhævet" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS ikon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Ikonbillede kan ikke være tomt" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Ikonbillede skal have samme format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kan ikke ændre ikonbilledets format" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Ikonbillede skal have samme størrelse" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kan ikke ændre ikonbilledets størrelse" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikon har intet gyldigt billede" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktiv kant" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktiv titelliste" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktiv titelliste" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d udenfor intervallet 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks udenfor celleintervallet [Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Baggrundsinformation" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informationstekst" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Indsæt" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Ugyldig dato : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ugyldig dato: %s. Skal være mellem %s og %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "ugyldigt formularobjekt-Stream " #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ugyldig egenskabsværdi" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Ugyldigt streamformat" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s er allerede associeret med %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG (Joint Picture Expert Group)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Sidste" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limegrøn" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Listeindekset overskrider grænser (%d)" #: lclstrconsts.rsmacosmenuhide msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Rødbrun" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Afbryd" #: lclstrconsts.rsmball msgid "&All" msgstr "%Alle" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Luk" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Hjælp" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nej" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nej til alt" #: lclstrconsts.rsmbok msgid "&OK" msgstr "" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Åbn" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Forsøg igen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Gem" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Lås op" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja til alt" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Mellemgrå" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menubar" #: lclstrconsts.rsmenucolorcaption #, fuzzy msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu fremhævet" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menutekst" #: lclstrconsts.rsmodified msgid " modified " msgstr " ændret" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Pengegrøn" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Godkendelse" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bekræftelse" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Brugerdef." #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fejl" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Advarsel" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marineblå" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Næste" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ingen" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Ikke en gyldig mønsterfil" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Intet widgetset-objekt. Kontroller venligst om enheden \"interfaces\" blev tilføjet til programmerne brugerbetingelser." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivengrøn" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Vælg en dato" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Tilbage" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Prompt, hvis flyttes" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Egenskab %s findes ikke" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpur" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (kun under X11), kørt under en debugger kan det forårsage en implicit -nograb. Brug -dograb for at tilsidesætte. Skal bruge QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, indstiller backenden til at blive brugt til widgets og QPixmaps på skærmen. Tilgængelige muligheder er lokale, raster og OpenGL. OpenGL er stadig ustabil." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, fortæller Qt at det aldrig skal gribe musen eller tastaturet. Skal bruge QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, indstiller programmets layoutretning for Qt::HøjreTilVenstre. " #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, genopretter programmet fra en tidligere session." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style eller-style=style, indstiller programmets brugergrænsefladestil. Mulige værdier er motiv, vinduer og platin. Hvis du har kompileret Qt med yderligere stilarter eller har yderligere stilarter plugins, vil disse være til rådighed for -style kommandolinjeindstillingen. BEMÆRK: Ikke alle stilarter er tilgængelige på alle platforme. Hvis style param ikke eksisterer, vil Qt starte et program med standardstil (Windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet eller-stylesheet=stylesheet, indstiller programmets stilart. Værdien skal være en sti til en fil, der indeholder stilarten. Bemærk: Relative URL'er i stilart-filen er relative i forhold til stilart-filens sti." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (kun under X11), skifter til synkronoserngstilstand for fejlsøgning." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, udskriver fejlsøgningsmeddelelse i slutningen om antallet af ikke-ødelagte widgets og det maksimale antal widgets, som eksisterede på samme tid." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg eller-background color, indstiller standardbaggrundsfarven og et programs farvepalette (lyse og mørke nuancer bliver beregnet)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn eller -button color, indstiller knappers standardfarve." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, får programmet til at installere et privat farveskema på en 8-bit skærm." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, indstiller X skærmen (standard er $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg eller -foreground color, indstiller forgrundens standardfarver." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn eller -font font, definerer programmets skrifttype. Skrifttypen defineres med en X logisk skrifttype-beskrivelse." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, indstiller geometrien af det første vindue, som vises på klienten." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, indstiller input-metoden på serveren (svarer til indstilling af XMODIFIERS miljøvariablen)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definerer, hvordan input indsættes i den givne widget, fx onTheSpo" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, indstiller programmets navn." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, begrænser antallet af farver tildelt i farveterningen på en 8-bit skærm, hvis programmet bruger QApplication::ManyColor farvespecifikation. Hvis count er 216 så anvendes en 6x6x6 farveterning (dvs. 6 niveauer af rød, 6 grønne og 6 blå); for andre værdier, anvendes en terning omtrent proportional med en 2x3x1 terning." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, indstiller programmets titel." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, tvinger programmet til at bruge en visuel TrueColor på en 8-bit skærm." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Afslut opdatering, når ingen opdatering er i gang " #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kan ikke gemme billede, mens opdatering er i gang." #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kan ikke begynde 'opdater alt', mens 'opdater kun mønster' er i gang" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rød" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Genindlæs" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Erstat" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Erstat alt" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s ikke fundet" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Rullebjælke" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Rullebarens egenskaber er uden for intervallet" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Vælg farve" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Vælg en skrifttype" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Sølv" #: lclstrconsts.rssize msgid " size " msgstr " størrelse " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Himmelblå" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "En kontrol med tabulator" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Blågrøn" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF (Tagged Image File Format)" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "En greb til at styre, hvor store de to dele af et område skal være" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "En træstruktur af elementer" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kunne ikke indlæse skrifttypen" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Ukendt fejl, rapporter venligst fejlen" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ukendt filendelse på billedet" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Ukendt billedformat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Ikke-understøttet bitmapformat." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Ikke-understøttet udklipsholder-format: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ADVARSEL: Der er %d ikke-frigivne DC'er, et detaljeret dump følger:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ADVARSEL: Der er %d ikke-frigivne GDI-objekter, et detaljeret dump følger:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ADVARSEL: Der er stadig %d meddelelser i køen! De frigives nu" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ADVARSEL: Der er stadig %d TimerInfo strukturer. De frigives nu" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ADVARSEL: Der er stadig %s LM_PAINT/LM_GtkPAINT meddelelser tilbage." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Hvid" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Kun hele ord" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fejl:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Advarsel:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Vindue" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Vinduesramme" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Vinduestekst" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Gul" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kan ikke fokusere på et deaktiveret eller usynligt vindue" #: lclstrconsts.scannotsetdesigntimeppi msgid "Cannot set design time PPI." msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Dublet-menuer" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ugyldig aktion oprettelse" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ugyldig aktion nummerering" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ugyldig aktion registrering" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ugyldig aktion afregistrering" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Tegnsettet i mønster \"%s\" er ikke gyldigt!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ugyldig billedstørrelse" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ugyldig billedliste-indeks" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Den aktuelle tekst matcher ikke den valgte maske." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menuindekset er uden for intervallet" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menuelementet er NIL" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Undermenu er ikke i menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Ned" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Venstre" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Højre" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "Mellemrum" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Op" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Ingen timer til rådighed" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Forkert symboltype: %s var forventet" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ugyldigt kommatal: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ugyldigt heltal: %s" #: lclstrconsts.sparlocinfo #, fuzzy,badformat #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (ved %d,%d, stream offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Uafsluttet byte-værdi" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Uafsluttet streng" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Forkert symbol: %s var forventet, men %s blev fundet" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Forkert symboltype: %s var forventet, men %s blev fundet" #: lclstrconsts.sshellctrlsbytes msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.cs.po����������������������������������������������������0000644�0001750�0000144�00000130567�15104114162�020637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Lazarus LCL\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2018-11-13 10:36+0100\n" "Last-Translator: Chronos <robie@centrum.cz>\n" "Language-Team: Czech <vaclav@valicek.name>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "X-Generator: Poedit 2.2\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Poedit-SourceCharset: UTF-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Prohlížeč \"%s\" není spustitelný." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Prohlížeč \"%s\" nenalezen." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Chyba během spouštění \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepodařilo se nalézt HTML prohlížeč." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML prohlížeč nenalezen%sProsím nastav jeden v Nástroje -> Volby -> Nápověda -> Volby Nápovědy" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Databáze nápovědy \"%s\" nemůže najít soubor \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v BrowserParams bude nahrazeno URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Nápověda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznámé" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenalezen" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tmavě stínová" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D světlo" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Prvek nemůže mít sebe jako rodiče" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktivní okraj" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktivní titulek" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Všechny soubory (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Pracovní prostředí aplikace" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Vodní" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Třída %s nemůže mít jako rodiče %s." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Plocha" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Nazpět" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitové mapy" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Černá" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prázdné" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Modrá" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Povrch tlačítka" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Zvýraznění tlačítka" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Stín tlačítka" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Text tlačítka" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulačka" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nelze zaměřit" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Plátno neumožňuje kreslení" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Text titulku" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Rozlišovat velká/malá" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Prvek třídy '%s' nemůže mít prvek třídy '%s' jako dítě" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Prvek '%s' nemá rodičovský formulář nebo rámec" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "\"%s\" není předchůdcem \"%s\"" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krémová" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Ukazatel" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Vlastní..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Výchozí" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "oprávnění uživatel skupina velikost datum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Smazat záznam?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Smazat" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Adresář" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Adresář" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Kopírovat" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Vložit" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicitní formát ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Upravit" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Prohledat celý soubor" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Chyba vytváření kontextu zařízení %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Chyba během ukládání bitmapy." #: lclstrconsts.rsexception msgid "Exception" msgstr "Vyjímka" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Adresář musí existovat" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Adresář \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Soubor \"%s\" již existuje. Přepsat ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Soubor musí existovat" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Soubor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Soubor \"%s\" není zapisovatelný." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Soubor není zapisovatelný" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Uložit soubor jako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otevřít existující soubor" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Přepsat soubor?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Cesta musí existovat" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Vybrat adresář" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(soubor nenalezen: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informace o souboru" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtr)" #: lclstrconsts.rsfind msgid "Find" msgstr "Najít" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Najít další" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "První" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols nemůže být > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows nemůže být > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulář" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Zdroj formuláře %s nenalezen. Pro formuláře bez zdroje musí být použit konstruktor CreateNew. Podívejte se na globální proměnnou RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Chyba zřetězení \"%s\" chyba: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Vpřed" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuksiová" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Zapnout specifické ladící/sledovací zprávy GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Vypnout specifické ladící/sledovací zprávy GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Varování a chyby generované Gtk+/GDK ukončí aplikaci." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient Aktivního popisku" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient Neaktivního Popisku" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Šedá" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Šedý text" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zelená" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Soubor mřížky neexistuje" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Nelze vložit řádky do mřížky, když nemá sloupce" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Nelze vložit sloupce do mřížky, když nemá řádky" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index mřížky mimo rozsah." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nemůže být menší než předchozí GroupIndex položky nabídky" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtr:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historie:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Následujíce Xt konvence, třída programu je název programu s prvním písmenkem velkým. Například, \"classname\" pro gimp je \"Gimp\". Pokud specifikujeme parametr --class, třída programu bude \"classname\"" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Zapnout specifické ladící/sledovací zprávy Gtk+" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Připojit k zadanému X serveru, kde \"h\" je jméno hosta, \"s\" je číslo serveru (většinou 0), a \"d\" je číslo displeje (většinou se nezadává). Pokud nezadáme --display, použije se obsah proměnné DISPLAY z prostředí." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Načíst zadaný modul při startu." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Nastaví jméno programu na \"progname\". Pokud se nezadá, použije se ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Vypnout zadané ladící/sledovací zprávy Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Nenastavovat přechodné pořadí pro modální formuláře." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Vypnout použití rozšíření X Shared Memory Extension." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Volat XSynchronize (displej, True) po stabilizaci připojení k X Serveru. Toto dělá ladění chyb X protokolu jednodušší, protože kešování X žádostí bude vypnuto a chyby X budou doručeny okamžitě po žádosti, která vyvolala chybu." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Nápověda" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: Již zaregistrováno" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Databáze pro téma nalezena ale téma v databázi ne" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Databáze nápovědy nenalezena" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Chyba nápovědy" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Kontext nápovědy %s nenalezen." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Kontext nápovědy %s nenalezen v databázi \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "Databáze nápovědy \"%s\" nenalezla prohlížeč pro stránku nápovědy typu %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Databáze nápovědy \"%s\" nenalezena" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Nápověda pro direktivu \"%s\" nenalezena" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Nápověda pro direktivu \"%s\" nenalezena v databázi \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Klíčové slovo \"%s\" nenalezeno." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Klíčové slovo \"%s\" nebylo nalezeno v Databázi \"%s\"" #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Uzel nápovědy \"%s\" nemá Databázi nápovědy" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Nápověda nenalezena pro řádek %d, sloupce %d pro %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Uzly nápovědy nejsou dostupné" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nápověda pro téma nenalezena" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: Neregistrováno" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba výběru nápovědy" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Pro typ \"%s\" není prohlížeč" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba prohlížeče nápovědy" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Prohlížeč nápovědy nenalezen pro tento typ" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Zvýraznění" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Zvýrazněný text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hot Light" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Zdroj ikony OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Obrázek ikony nemůže být prázdný" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Obrázek ikony musí mít stejný formát" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nelze změnit formát obrázku ikony" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Obrázek ikony musí mít stejnou velikost" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nelze změnit velikost obrázku ikony" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nemá aktuálně obrázek" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Neaktivní okraj" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Neaktivní titulek" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Neaktivní titulek" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d mimo rozsahy 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index mimo rozsah Buňka[Sloupec=%d Řádek=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informační pozadí" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informační text" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Vložit" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Neplatný Datum: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neplatný datum: %s. Musí být mezi %s a %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "neplatný proud objektu formuláře" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neplatná hodnota vlastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neplatný formát proudu" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s již je přidružen k %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Poslední" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citrusová" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Index seznamu překročil meze (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kaštanová" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Přerušit" #: lclstrconsts.rsmball msgid "&All" msgstr "&Všechno" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zavřít" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Nápověda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorovat" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ne všem" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Otevřít" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Znovu" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Uložit" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Udemknout" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ano" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ano &všem" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Středně šedá" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Lišta nabídky" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Nabídka" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Zvýraznění nabídky" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Text nabídky" #: lclstrconsts.rsmodified msgid " modified " msgstr " upravený" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Peněžní zelená" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autentizace" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potvrzení" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Volitelné" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informace" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Varování" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Námořnická modř" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Další" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Žádné" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Žádný platný soubor mřížky" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Žádný objekt widgetsetu. Prosíme zkontrolujte, zda jednotka \"interfaces\" byla přidána do sekce uses programu." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivová" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Vybrat datum" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmapa" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Přenosná BitMapa" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Přenositelná MapaŠedi" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Přenositelná PixMapa" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Odeslat" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sStiskněte OK pro ignorování a riskování poškození dat.%sStiskněte Přerušit pro zabití programu." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Předchozí" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Dotázat se před nahrazením" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Vlastnost %s neexistuje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Fialová" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (pouze pod X11), běh v ladiče může vyústit v implicitní --nograb, použijte -dograb k přepisu. Potřebujete QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, nastaví backend k použití pro widgety a QPixmaps na obrazovce. Dostupné volby jsou native, raster a opengl. OpenGL je stále nestabilní." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb říká Qt že nemá nikdy zabírat klávesnici a myš. Potřebujete QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, nastavuje směr rozložení aplikace na Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session - obnovuje aplikaci z dřívějšího sezení" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style nebo -style=style - nastavuje GUI styl aplikace. Možné hodnoty jsou motif, windows a platinum. Pokud jste kompiloval Qt s přidanými styly nebo máte přidané styly jako pluginy, potom budou též dostupné jako volba pro tento parametr. POZOR: Ne všechny styly jsou dostupné na všech platformách - pokud styl neexistuje, Qt spustí aplikaci s vlastním výchozím stylem (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet nebo -stylesheet=stylesheet - nastavuje styl aplikace. Hodnota musí být cesta k souboru obsahujícímu Style Sheet. POZOR: Relativní cesty v URL v souboru jsou relativní vůči cestě k souboru." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (pouze pod X11) - přepíná do synchronního režimu pro ladění." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount - vypíše na konci ladící zprávu o počtu nezrušených widgetů a o maximálním počtu widgetů existujícím současně." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg nebo -background color - nastavuje výchozí barvu pozadí a paletu aplikace (světlé a tmavé stíny jsou dopočítány)" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn nebo -button color - nastavuje výchozí barvu tlačítek." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap - způsobuje, že si aplikace nainstaluje soukromou mapu barev na 8-mi bitovém displeji." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display - nastavuje X display (výchozí je $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg nebo -foreground color - nastavuje výchozí barvu popředí." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn nebo -font font - definuje písmo aplikace. Písmo by mělo být určenon X logickým popisem písma." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry - nastavuje klientskou geometrii prvního zobrazeného okna." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im - nastavuje server metody vstupu (ekvivalent nastavení proměnné prostředí XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle - definuje jakten NVIDIA Shield zamlouvat. Brzo o něm \"uslyšíte\" i v našem pořadu. Nedávno tam vyšel Portal, teď legenda je vstup vkládán do daného widgetu, například onTheSpot způsobuje, že se vstup objevuje přímo ve widgetu, zatímco overTheSpot způsobuje, že se vstup objeví v rámu plovoucím nad widgetem a je vložen až po dokončení editace." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name - nastavuje jméno aplikace" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count - omezuje počet barev alokovaných v barevné krychli na 8-mi bitovém displeji pokud aplikace využívá specifikaci QApplication::ManyColor . Pokud je počet barev 216, pak je použita krychle 6x6x6 barev (6 stupňů červené, 6 zelené a 6 modré); pro ostatní případy je použita krychle zhruba v poměru 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titulek, nastavuje titulek aplikace" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor - donutí použít vzhled TrueColor na 8-mi bitovém displeji." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Konec aktualizace zatímco žádná aktualizace nebyla v běhu" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nelze uložit obrázek zatímco běží aktualizace" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nelze začít vše aktualizovat, když se aktualizuje plátno" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Červená" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Obnovit" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Nahradit" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Nahradit vše" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenalezen" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Posuvník" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Vlastnost posuvníku mimo rozsah" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Zvolte barvu" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Zvolte písmo" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Stříbrná" #: lclstrconsts.rssize msgid " size " msgstr " velikost " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Nebeská modrá" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Ovládací prvek s panely" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Hluboká zelenomodrá" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Vestavěné URL je pouze pro čtení. Místo toho změnte BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Označkovaný obrazový formát souboru" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Rukojeť k ovládání místa, které zabírají dvě části oblasti" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Strom položek" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nelze načíst výchozí písmo" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Neznámá chyba, prosím nahlašte tuto chybu" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznámá přípona obrázku" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Neznámý formát obrázku" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodporovaný formát bitmapy." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "VAROVÁNÍ: Existuje %d neuvolněných DC, následuje podrobný popis:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "VAROVÁNÍ: Existuje %d neuvolněných GDIObjects, následuje podrobný popis:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " VAROVÁNÍ: Ve frontě zbývá %d zpráv! Vyprázdním je." #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "VAROVÁNÍ: Zbývá %d TimerInfo struktur, Uvolním je" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "VAROVÁNÍ: Zbývá %s neodstraněných LM_PAINT/LM_GtkPAINT odkazů zpráv." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bílá" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Pouze celá slova" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Chyba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Varování:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Rámeček okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Text okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Žlutá" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nelze zaktivnit zakázané nebo neviditelné okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Zdvojit nabídku" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neplatná vytvářecí akce" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neplatná výčtová akce" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neplatná registrační akce" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neplatná odregistrační akce" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neplatná velikost obrázku" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neplatný index ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Současný text neodpovídá specifikované masce" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index nabídky mimo rozsah" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Položka nabídky je nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podnabídka není v nabídce" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Smazat" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Dolů" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Konec" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Domů" #: lclstrconsts.smkcins msgid "Ins" msgstr "Vložit" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Doleva" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Doprava" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Mezerník" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Nahoru" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nedostupné žádné časovače" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Prvek \"%s\" nemá rodičovské okno." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Nesprávný typ symbolu: očekáváno %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Neplatné desetinné číslo: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (u %d,%d, posun proudu %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nepřerušená bajtová hodnoty" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený řetězec" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Nesprávný symbol: Očekáváno %s, ale nalezeno %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Nesprávný typ symbolu: Očekáváno %s, ale nalezeno %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s bajtů" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neplatná cesta:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format, fuzzy #| msgid "" #| "Invalid relative pathname:\n" #| "\"%s\"\n" #| "in relation to rootpath:\n" #| "\"%s\"\n" msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Neplatná relativní cesta:\n" "\"%s\"\n" "v relaci k kořenové cestě:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format, fuzzy #| msgid "" #| "Invalid pathname:\n" #| "\"%s\"\n" msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Neplatná cesta:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Jméno" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format, fuzzy #| msgid "" #| "The selected item does not exist on disk:\n" #| "\"%s\"\n" msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "Vybraná položka neexistuje na disku:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Velikost" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Typ" �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.co.po����������������������������������������������������0000644�0001750�0000144�00000136046�15104114162�020631� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: LCL in Corsican\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Language-Team: Patriccollu di Santa Maria è Sichè\n" "X-Generator: Poedit 3.0\n" "Last-Translator: Patriccollu di Santa Maria è Sichè <https://github.com/Patriccollu/Lingua_Corsa-Infurmatica/#readme>\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: co\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "U navigatore « %s » ùn hè micca un schedariu d’esecuzione." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "U navigatore « %s » ùn si trova micca." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Sbagliu à l'esecuzione di « %s » :%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impussibule di truvà un navigatore HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Ùn si pò truvà alcunu navigatore HTML.%sCi vole à definiscene unu in Attrezzi -> Ozzioni -> Aiutu -> Ozzioni d’aiutu" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "A basa di dati d’aiutu « %s » ùn trova micca u schedariu « %s »." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A prucedura %s in BrowserParams serà rimpiazzata da l’indirizzu." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Aiutu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Maiusc" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Scunnisciutu" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Risorsa %s micca trova" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Umbria scura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Chjara 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un cuntrollu ùn pò micca esse u so propiu genitore" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bordu attivu" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Legenda attiva" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Tutti i schedarii (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Spaziu di travagliu di l'appiecazione" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Turchinu verde" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "A classa %s ùn pò micca avè %s cum’è genitore." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Scagnu" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Nanzu" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Fiure" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Neru" #: lclstrconsts.rsblank msgid "Blank" msgstr "Biancu" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Turchinu" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Faccia di buttone" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Sopralineamentu di buttone" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Umbria di buttone" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Testu di buttone" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculatrice" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Abbandunà" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Ùn si pò mette in evidenza" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "L’abbozzu ùn permette micca u disegnu" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Testu di a legenda" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sfarenzià maiuscule è minuscule" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "U cuntrollu di a classa « %s » ùn pò micca avè u cuntrollu di a classa « %s » cum’è zitellu" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "U cuntrollu « %s » ùn hà micca di furmulariu o di quadru genitore" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "« %s » ùn hè micca un genitore di « %s »" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursore" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Persunalizatu…" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predefinitu" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permessi utilizatore gruppu dimensione data ora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Vulete squassà l’arregistramentu ?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Squassà" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direzzione" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Cartulare" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Cupià" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Incullà" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicà u furmatu d’icona." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Mudificà" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Circà in u schedariu sanu" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Sbagliu" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Sbagliu à a creazione di u cuntestu di l’apparechju per %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Un sbagliu hè accadutu in %s à %sl’indirizzu %s%s sequenza %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Sbagliu à l’arregistramentu di a fiura." #: lclstrconsts.rsexception msgid "Exception" msgstr "Eccezzione" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "U cartulare deve esiste" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "U cartulare « %s » ùn esiste micca." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "U schedariu « %s » esiste dighjà. Vulete rimpiazzallu ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "U schedariu deve esiste" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "U schedariu « %s » ùn esiste micca." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Ùn si pò micca scrive in u schedariu « %s »." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Ùn si pò micca scrive in u schedariu" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Arregistrà u schedariu cù u nome" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Apre un schedariu esistente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Vulete rimpiazzà u schedariu ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "U chjassu deve esiste" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "U chjassu « %s » ùn esiste micca." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selezziunà un cartulare" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(u schedariu ùn esiste micca : « %s »)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Infurmazione di u schedariu" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(filtru)" #: lclstrconsts.rsfind msgid "Find" msgstr "Circà" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Circà torna" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primu" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "« FixedCols » ùn pò micca esse superiore à « ColCount »" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "« FixedRows » ùn pò micca esse superiore à « RowCount »" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulariu" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Risorsa di furmulariu %s micca trova. U custruttore « CreateNew » deve esse impiegatu per i furmularii senza risorsa. Fighjate a variabile glubale « RequireDerivedFormResource »." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Sbagliu in u flussu di furmulariu « %s » : %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Dopu" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Rusulatu" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Attiveghja i messaghji particulari di traccia/spannatura GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Disattiveghja i messaghji particulari di traccia/spannatura GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Furmatu di scambiu graficu (GIF)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings L’avertimenti è i sbaglii ingenerati da Gtk+/GDK pianteranu l’appiecazione." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Legenda attiva sgradata" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Legenda inattiva sgradata" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Graficu" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grisgiu" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Testu svanitu" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "U schedariu di quadrittera ùn esiste micca" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Ùn si pò framette di linea in una quadrittera chì ùn hà nisuna culonna" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Ùn si pò framette di culonna in una quadrittera chì ùn hà nisuna linea" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indice di quadrittera fora di e confine." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "« GroupIndex » ùn pò micca esse inferiore à quellu d’un elementu di u listinu precedente" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtru :" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Cronolugia :" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class nome di classa Secondu à e cunvenzioni Xt, a classa d’un prugramma hè u nome di u prugramma cù u primu caratteru in lettera maiuscula. Per indettu, u nome di classa di gimp hè « Gimp ». S’è --class hè specificatu, a classa di u prugramma serà definita à « nome di classa »." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Attiveghja i messaghji particulari di traccia/spannatura Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display o:s:a Cunnettesi à u servitore X specificatu induve « o » hè u nome di l’ospite, « s » hè u numeru di servitore (di regula : 0), è « a » hè u numeru d’affissera (di regula, omessu). S’è --display ùn hè micca specificatu, a variabile d’ambiente DISPLAY serà impiegata." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulu Caricheghja à l’avviu u modulu specificatu." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name prugramma Definisce u nome di prugramma à « prugramma ». S’è ùn hè micca specificatu, u nome di prugramma serà definitu à ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Disattiveghja i messaghji particulari di traccia/spannatura Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Ùn micca definisce d’ordine transitoriu per i furmularii mudale" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Disattivà l’impiegu di l’estensione di a memoria X scumparta." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chjama « XSynchronize (display, True) » dopu chì a cunnessione Xserver sia stabilita. A spannatura di u protocollu X serà più faciule, perchè e richieste di « buffer »seranu disattivate è i sbaglii di X seranu ricevuti subitu dopu chì a richiesta di protocollu chì hà ingeneratu u sbagliu serà stata trattata da u servitore X." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Aiutu" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s : dighjà arregistratu" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Una basa di dati hè stata trova per st’articulu, ma quessu ùn si trova micca" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Ùn ci hè alcuna basa di dati installata per st’articulu" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Sbagliu d’aiutu" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Ùn si pò truvà u cuntestu d’aiutu %s." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Ùn si pò truvà u cuntestu d’aiutu %s in a basa di dati « %s »." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "A basa di dati d’aiutu « %s » ùn hà micca trovu un’affissadore per una pagina d’aiutu di tipu %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "Ùn si pò truvà a basa di dati d’aiutu « %s »" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Ùn si pò truvà un aiutu per a direttiva « %s »." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Ùn si pò truvà un aiutu per a direttiva « %s » in a basa di dati « %s »." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ùn si pò truvà a parolla chjave d’aiutu « %s »." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ùn si pò truvà a parolla chjave d’aiutu « %s » in a basa di dati « %s »." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "U nodu d’aiutu « %s » ùn hà micca di basa di dati d’aiutu" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Ùn si trova alcunu aiutu per a linea %d, culonna %d di %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Ùn ci hè alcuna rubrica d’aiutu per st’articulu" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ùn ci hè alcunu aiutu per st’articulu" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s : micca arregistratu" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Sbagliu di selettore d’aiutu" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Ùn ci hè alcunu affissadore per u tipu d’aiutu « %s »" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Sbagliu di l’affissadore d’aiutu" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Ùn ci hè alcunu affissadore per stu tipu di cuntenutu d’aiutu" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Sopralineà" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Sopralineà u testu" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luce calda" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Icona Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "A fiura di l'icona ùn pò micca esse viota" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "A fiura di l'icona deve avè u listessu furmatu" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Ùn si pò cambià u furmatu di a fiura di l’icona" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "A fiura di l'icona deve avè a listessa dimensione" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Ùn si pò cambià a dimensione di a fiura di l’icona" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L’icona ùn hà micca di fiura à st’ora" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bordu inattivu" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Legenda inattiva" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Legenda inattiva" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indice %d fora di e confine 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indice fora di a seria Cellula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Infurmazione di u sfondu" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Infurmazione di u testu" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Framette" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Data inaccettevule : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data inaccettevule : %s. Deve esse trà %s è %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Flussu d’oggettu di furmulariu inaccettevule" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valore di pruprietà inaccettevule" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Furmatu di flussu inaccettevule" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s hè dighjà assuciatu à %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Gruppu d’esperti di fiura ghjunta" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ultimu" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limone verde" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Indice di lista fora di e cunfine (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Furmatu di schedariu :" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Piattà %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Piattà l’altri" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Esce %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Servizii" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Tuttu affissà" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Cerriu" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Interrompe" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tuttu" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Abbandunà" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Chjode" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Ai&utu" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignurà" #: lclstrconsts.rsmbno msgid "&No" msgstr "I&nnò" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Innò per tutti" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Vai" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Apre" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Torna" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Arregistrà" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Spalancà" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Iè" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Iè per &tutti" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Grisgiu medianu" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra di listinu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Listinu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Sopralineamentu di listinu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Testu di listinu" #: lclstrconsts.rsmodified msgid " modified " msgstr " mudificatu " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde buttiglia" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticazione" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Cunfirmazione" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Persunalizatu" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Sbagliu" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Infurmazione" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avertimentu" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Turchinu marinu" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Seguente" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nisuna" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Ùn hè micca un schedariu di quadrittera accettevule" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nisunu oggettu « widgetset ». Ci vole à verificà s’è l’unità « interfaces » hè stata aghjunta à a clausa « uses » di u prugramma." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Verde aliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selezziunà una data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "BitMap purtavule" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "GrayMap purtavule" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Graficu di reta purtavule" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PixMap purtavule" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Impustà" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sAppughjate nant’à « Vai » per ignurà è risicà un’alterazione di i dati.%sAppughjate nant’à « Interrompe » per tumbà u prugramma." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Precedente" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Dumandà per rimpiazzà" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "A pruprietà %s ùn esiste micca" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpura" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, disattiveghja u quadru assai precisu di a finestra sottu X11. Sta funzione hè messa in ballu per l’interfaccie Qt, Qt5 è Gtk2, è impiegata soprattuttu da GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (solu sottu X11), funziunà sottu à un « debugger » pò cagiunà un -nograb implicitu, impiegate -dograb per sfurzà l’ozzione. Richiede QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, definisce u terminale à impiegà per l’oggetti grafichi è QPixmaps. L’ozzioni dispunibule sò « native », « raster » è « opengl ». OpenGL hè ancu instabile." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, dice à Qt chì ùn ci vole mai à impussessassi di u topu o di a tastera. Richiede QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, definisce a direzzione di l’accunciamentu di l’appiecazione à Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessione, ristura l’appiecazione à una sessione più anziana." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stilu o -style=stilu, definisce u stilu GUI di l’appiecazione. I valori pussibule sò « motif », « windows » è « platinum ». S’è vo avete cumpilatu Qt cù stili addiziunali o avete qualchì stilu definitu cum’è modulu d’estensione, quelli stili seranu dispunibule cù l’ozzione di linea di cumanda « -style ». Nota : Tuti sti stili ùn sò micca dispunibule nant’à tutte e piattaforme. S’è u stilu pruvistu cum’è parametru ùn esiste micca, Qt lancierà l’appiecazione cù u stilu predefinitu « windows »." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet fogliu_di_stilu o -stylesheet=fogliu_di_stilu, definisce u fogliu di stilu di l’appiecazione. U valore deve esse un chjassu ver di un schedariu chì cuntene u fogliu di stilu. Nota : L’indirizzi relativi in u schedariu di fogliu di stilu sò relativi secondu à u chjassu di u schedariu di fogliu di stilu." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (solu sottu X11), bilanceghja ver di u modu sincrunizatu per a spannatura." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, stampa messaghji di spannatura à a fine nant’à u numeru d’oggetti grafichi chì ùn sò micca stati distrutti è u numeru massimu d’oggetti grafichi chì anu esistati à u listessu tempu." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg culore o -background culore, definisce u culore predefinitu di u sfondu è una tavuletta per l’appiecazione (l’umbrie chjare è scure sò calculate)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn culore o -button culore, definisce u culore predefinitu di i buttoni." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, dumanda à l’appiecazione d’installà una tavula di currispundenza di i culori nant’à un affissera 8-bit." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display affissera, definisce l’affissera di X ($DISPLAY hè predefinitu)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg culore o -foreground culore, definisce u culore predefinitu di primu pianu." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn grafia o -font grafia, definisce a grafia di l’appiecazione. A grafia deve esse specificata impieghendu una discrizzione logica di grafia X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, definisce a geometria di a prima finestra chì ghjunghje." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, definisce u servitore di metoda d’entrata (uguale à definisce a variabile d’ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definisce cumu l’entrata hè framessa in l’oggettu graficu, per indettu « onTheSpot » face affacà l’entrata direttamente in l’oggettu graficu, invece chì « overTheSpot » face affacalla in una scatula undighjendu sopra l’oggettu graficu è ùn hè micca framessa fin’tantu chì a mudificazione ùn hè micca compia." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, definisce u nome di l’appiecazione." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols numeru, limiteghja u numeru di culori attribuiti à u cubu di culori nant’à un screnu 8-bit, s’è l’appiecazione impiegheghja a specificazione di culore QApplication::ManyColor. S’è u numeru hè 216, tandu un cubu di culore 6x6x6 hè impiegatu (i.e. 6 livelli di rossu, 6 di verde è 6 di turchinu) ; per d’altri valori, s’impiegherà un cubu più o menu prupurziunale à un cubu 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titulu, definisce u titulu di l’appiecazione." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, sfurza l’appiecazione à impiegà un visuale TrueColor nant’à un screnu 8-bit." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "« Endupdate » bench’è ùn fussi alcunu rinnovu in corsu" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Ùn si pò micca arregistrà a fiura quandu un rinnovu hè in corsu" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Ùn si pò micca principià à tuttu mudificà quandu ci hè un rinnovu in corsu d’un abbozzu" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rossu" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Attualizà" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Rimpiazzà" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Tuttu rimpiazzà" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Risorsa %s micca trova" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra di sfilarata" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "A pruprietà di a barra di sfilarata hè fora di e cunfine" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selezziunà un culore" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selezziunà una grafia" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Argentu" #: lclstrconsts.rssize msgid " size " msgstr " dimensione " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Celu turchinu" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Un cuntrollu cù l’unghjette" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Smeraldu" #: lclstrconsts.rstext msgid "Text" msgstr "Testu" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "L’indirizzu integratu hè solu di lettura. Cambiate piuttostu « BaseURL »." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Furmatu etichettatu di schedariu di fiura" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Pannellu" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Una manata per cuntrollà a dimensione di e duie parti di un’area" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Un arburu d’elementi" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impussibule di caricà a grafia predefinita" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Sbagliu scunnisciutu, ci vole à fà un raportu di penseru à l’assistenza" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Estensione di fiura scunnisciuta" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Furmatu di fiura scunnisciutu" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Furmatu di fiura bitmap inaccettevule." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Furmatu di preme’papei inaccettevule : %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVERTIMENTU : Ci hè %d DC micca rilasciati, eccu i detaglii :" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVERTIMENTU : Ci hè %d GDIObjects micca rilasciati, eccu i detaglii :" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVERTIMENTU : Ci hè %d messaghji sempre in fila d’attesa ! Seranu squassati" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVERTIMENTU : E %d strutture chì fermanu seranu squassate" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVERTIMENTU : Ci hè %s liami di messaghju LM_PAINT/LM_GtkPAINT micca squassati." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Biancu" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Solu e parolle sane" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Sbagliu :" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Avertimentu :" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Finestra" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Quadru di finestra" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Testu di finestra" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Ghjallu" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Ùn si pò micca mette in evidenza una finestra disattivata o invisibile" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duppione di listini" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creazione d’azzione inaccettevule" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerazione d’azzione inaccettevule" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Inscrizzione d’azzione inaccettevule" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Disinscrizzione d’azzione inaccettevule" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Dimensione di fiura inaccettevule" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Indice « ImageList » inaccettevule" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "U testu attuale ùn currisponde micca à a maschera specificata." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indice di listinu fora di e confine" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "« MenuItem » hè nullu" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "U sotulistinu ùn hè micca in u listinu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "RetArr" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Suppr" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Ghjò" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fine" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Entrée" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Scap" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Accolta" #: lclstrconsts.smkcins msgid "Ins" msgstr "Fram" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Manca" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgGhjò" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgSù" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Diritta" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Maiusc+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spaziu" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Unghjetta" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Sù" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nisuna minuteria dispunibule" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "U cuntrollu « %s » ùn hà micca di finestra genitore." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Tipu gattivu di fiscia : %s aspettatu" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Numeru à virgula undighjante inaccettevule : %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Numeru interu inaccettevule : %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (à %d,%d, staccamentu in u flussu %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valore indeterminatu d’ottettu" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Catena indeterminata" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Simbulu gattivu di fiscia : %s aspettatu ma %s trovu" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Tipu gattivu di fiscia : %s aspettatu ma %s trovu" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s ottetti" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nome di chjassu inaccettevule :\n" "« %s »" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" "Nome di chjassu relativu inaccettevule :\n" "« %s »\n" "in raportu cù u chjassu di radica :\n" "« %s »" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" "Nome di chjassu inaccettevule :\n" "« %s »" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s Ko" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s Mo" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Nome" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" "L’elementu selezziunatu ùn esiste micca nant’à u discu :\n" "« %s »" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Dimensione" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Tipu" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.ca.po����������������������������������������������������0000644�0001750�0000144�00000117623�15104114162�020613� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2008-11-26 11:49+0100\n" "Last-Translator: Antoni Clavell <antoni@clavell.org>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "Navegador %s%s%s no executable." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format, fuzzy, badformat #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "Navegador %s%s%s no trobat." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format, fuzzy, badformat #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Error en executar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "No puc trobar un navegador HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format, fuzzy, badformat #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "La base de dades de l'ajuda %s%s%s no ha pogut trobar el fitxer %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s en BrowserParams (paràmetres navegador) serà substituïda per la URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Majúsc." #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconegut" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurs %s no trobat" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Un control no pot cridar-se a ell mateix" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Tots els fitxers (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Enrere" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Mapes de bits" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "En blanc" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint #, fuzzy msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancel·la" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "No es pot focalitzar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "El marc no permet el dibuix" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensible a majúsc-minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permisos usuari grup mida dia hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Esborra" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direcció" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Directori" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror #, fuzzy msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Error" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Error en crear dispositiu de context per a %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Error ocorregut en %s a l'%sAdreça %s%s Estructura %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Error en desar el mapa de bits" #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepció" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Cal que el directori existeixi" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "El directori \"%s\" no existeix." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "El fitxer \"%s\" ja existeix. El sobrescric ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "El fitxer ha d'existir" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "El fitxer \"%s\" no existeix." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "El fitxer \"%s\" no és d'escriptura." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "No es pot escriure aquest fitxer" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Anomena i desa el fitxer" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Obre fitxer existent" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescric el fitxer?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "El camí ha d'existir" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "El camí \"%s\" no existeix." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecciona directori" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(fitxer no trobat: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informació del fitxer" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "Busca" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Busca més" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig #, fuzzy #| msgid "FixedCols can't be >= ColCount" msgid "FixedCols can't be > ColCount" msgstr "FixedCols (columnes fixades) no poden ser>= ColCount (recompte de columnes)" #: lclstrconsts.rsfixedrowstoobig #, fuzzy #| msgid "FixedRows can't be >= RowCount" msgid "FixedRows can't be > RowCount" msgstr "FixedRows (files fixades) no poden ser >= RowCount (recompte de files)" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Formació del corrent \"%s\" amb error: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Endavant" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Engega missatges específics de GDK de traça/depuració." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Tanca els missatges específics GDK de traça/depuració." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Els errors i advertències generats per Gtk+/GDK aturaran l'aplicació." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índex de la graella fora de rang" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex no pot ser menor que un ítem de menú GroupIndex anterior." #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtre:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historial:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguint les convencions Xt, la classe d'un programa és el nom del programa amb el caràcter inicial en majúscula. Per exemple, el nom de classe (classname) per al gimp és \"Gimp\". Si --class s'especifica, la classe del programa serà posada com \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Mostra missatges Gtk+ específics de traça/depuració." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Connecta al servidor X especificat, on \"h\" és el nom del host, \"s\" és el número del servidor (usualment 0), i \"d\" és el número a mostrar (típicament omès). Si --display no s'ha especificat,s'usarà l'entorn variable DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Carrega el mòdul especificat a l'engegar." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Posa el nom del programa a \"progname\". Si no s'ha especificat, el nom serà posat a ParamStr(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Tanca els missatges Gtk+ específics de traça/depuració." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient No posis ordre transient per a formes modals." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desactiva l'ús de l'extensió X de memòria compartida." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Crida XSynchronize (display, True) un cop la connexió al Xserver ha estat establerta. Això facilita que la depuració d'errors del protocol X sigui més senzilla, perquè la demanda de memòria cau X serà desactivad i els errors X seran rebuts immediatament després que la demanda del protocol que ha generat l'error ha estat processat pel servidor X." #: lclstrconsts.rshelp #, fuzzy msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Ajuda" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format, fuzzy, badformat msgid "%s: Already registered" msgstr "Ja enregistrat" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "No trobo ajuda contextual" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Base de dades de l'ajuda no trobada" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Error d'ajuda" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Context d'ajuda %s no trobat." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "Context d'ajuda %s no trobat en la base de dades %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format, fuzzy, badformat #| msgid "Help Database \"%s\" did not found a viewer for a help page of type %s" msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "La base de dades de l'ajuda %s%s%s no ha trobat un visor per una pàgina d'ajuda del tipus %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "Base de dades de l'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "Paraula clau d'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Paraula clau d'ajuda %s%s%s no trobada en la base de dades %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format, fuzzy, badformat #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "El node d'ajuda %s%s%s no té base de dades d'ajuda" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "No s'ha trobat cap ajuda per a la línia %d, columna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "No hi ha nodes d'ajuda disponibles" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Ajuda no trobada" #: lclstrconsts.rshelpnotregistered #, object-pascal-format, fuzzy, badformat msgid "%s: Not registered" msgstr "No enregistrat" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector d'ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format, fuzzy, badformat #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "No hi ha cap visor per al tipus d'ajuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Error del visor d'ajuda" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visor d'ajuda no trobat" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s índex %d fora de límits 0-%d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índex fora de rang Cel·lal[Col=%d Fila=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insereix" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Data no vàlida: %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data no vàlida: %s. Cal que estigui entre %s i %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Corrent d'objecte de forma no vàlid" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de la propietat no vàlid" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Corrent amb format invàlid" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s ja està associat amb %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "L'índex de la llista excedeix els límits (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Cancel·la" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tot" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancel·la" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Tan&ca" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignora" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a tot" #: lclstrconsts.rsmbok msgid "&OK" msgstr "D'&acord" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Torna-ho a provar" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sí" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sí a &tot" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menú" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificat " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmació" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalitza" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Error" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informació" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avís" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Pròxim" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Fitxer de graella no vàlid" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "No hi és com a objecte o dispositiu. Sisplau, comproveu si la unitat \"interfaces\" (interfícies) fou afegida a la clàusula d'usos del programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecciona una data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Mapa de píxels" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Previ" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "La propietat %s no existeix" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substitueix" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substitueix-ho tot" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurs %s no trobat" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propietat de la barra de desplaçament fora de mida" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Tria color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecciona tipus de lletra" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " mida " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "No puc carregar la font per defecte" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Error desconegut. Sisplau reporteu-lo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensió d'imatge desconeguda" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format de mapa de bits no suportat" #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Format del portaretalls no suportat: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Avís: hi ha %d DCs no llançats, tot seguit es mostra informació detallada:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Avís: Hi ha %d Objectes-GDI no llançats, tot seguit es mostra informació detallada:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Avís: Hi ha %d missatges perduts a la cua!, els allibero" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Avís: s'han perdut %d estructures TimerInfo, les allibero" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "Avís: S'han deixat %s enllaços a missatge LM_PAINT/LM_GtkPAINT, sense eliminar" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Només mots sencers" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Error:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Avís:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "No puc accedir a una finestra invisible o tancada" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menús duplicats" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creació d'acció no vàlida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeració d'acció no vàlida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Enregistrament d'acció no vàlid" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Acció de desenregistrar invàlida" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Mida de la imatge no vàlida" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índex de llista d'imatges no vàlid" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índex de menú fora de rang" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "L'opció no hi és al menú" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "El submenú no és al menú" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Avall" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fi" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Inici" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Dreta" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Amunt" #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hi ha rellotges disponibles" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "" #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "" "The selected item does not exist on disk:\n" "\"%s\"" msgstr "" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "" �������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/lclstrconsts.be.po����������������������������������������������������0000644�0001750�0000144�00000146147�15104114162�020621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Crowdin-Project: b5aaebc75354984d7cee90405a1f6642\n" "X-Crowdin-Project-ID: 7\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /l10n_Translation/language/lcl/lclstrconsts.po\n" "X-Crowdin-File-ID: 3346\n" "Project-Id-Version: b5aaebc75354984d7cee90405a1f6642\n" "Language-Team: Belarusian\n" "Language: be_BY\n" "PO-Revision-Date: 2022-09-27 11:46\n" #: lclstrconsts.hhshelpbrowsernotexecutable #, object-pascal-format msgid "Browser \"%s\" not executable." msgstr "Браўзер \"%s\" не ёсць выканальным файлам." #: lclstrconsts.hhshelpbrowsernotfound #, object-pascal-format msgid "Browser \"%s\" not found." msgstr "Браўзер \"%s\" не знойдзены." #: lclstrconsts.hhshelperrorwhileexecuting #, object-pascal-format msgid "Error while executing \"%s\":%s%s" msgstr "Памылка падчас выканання \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Не ўдалося знайсці HTML-браўзер." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone #, object-pascal-format msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTML-браўзер не знойдзены. %sПазначце яго ў Інструменты -> Параметры -> Даведка -> Параметры даведкі" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #, object-pascal-format msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "Базе даных даведкі \"%s\" не ўдалося знайсці файл \"%s\"." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl #, object-pascal-format msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрас %s у BrowserParams заменіцца URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_help msgctxt "lclstrconsts.ifsvk_help" msgid "Help" msgstr "Даведка" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невядома" #: lclstrconsts.lislclresourcesnotfound #, object-pascal-format msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Рэсурс %s не знойдзены" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D-цень" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D-святло" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Элемент кіравання не можа быць бацькоўскім самому сабе" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Рамка актыўнага акна" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Загаловак актыўнага акна" #: lclstrconsts.rsallfiles #, object-pascal-format msgid "All files (%s)|%s|%s" msgstr "Усе файлы (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Працоўная прастора праграмы" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Аква" #: lclstrconsts.rsascannothaveasparent #, object-pascal-format msgid "Class %s cannot have %s as parent." msgstr "Клас %s не можа мець %s у якасці бацькоўскага." #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Працоўны стол" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Назад" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Растравая выява" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чорны" #: lclstrconsts.rsblank msgid "Blank" msgstr "Пуста" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Сіні" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Выгляд кнопкі" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Падсвятленне кнопкі" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Цень кнопкі" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Тэкст кнопкі" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятар" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Скасаваць" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не можа быць у фокусе" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "На палатне нельга маляваць" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Тэкст загалоўка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Зважаць на рэгістр" #: lclstrconsts.rscontrolclasscantcontainchildclass #, object-pascal-format msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Элемент кіравання класам \"%s\" не можа кіраваць класам \"%s\" як даччыным" #: lclstrconsts.rscontrolhasnoparentformorframe #, object-pascal-format msgid "Control '%s' has no parent form or frame" msgstr "Элемент кіравання \"%s\" не мае бацькоўскай формы або фрэйма" #: lclstrconsts.rscontrolisnotaparent #, object-pascal-format msgid "'%s' is not a parent of '%s'" msgstr "\"%s\" не бацькоўскі для \"%s\"" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Крэмавы" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Адвольны..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Прадвызначана" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "правы доступу карыстальнік група памер дата час" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Выдаліць запіс?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Выдаліць" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Кірунак" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocopy msgid "Copy" msgstr "Капіяваць" #: lclstrconsts.rsdopaste msgid "Paste" msgstr "Уставіць" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Дубляванне фармату значкоў." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Рэдагаваць" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Пошук ва ўсім файле" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Памылка" #: lclstrconsts.rserrorcreatingdevicecontext #, object-pascal-format msgid "Error creating device context for %s.%s" msgstr "Не ўдалося стварыць кантэкст прылады для %s.%s" #: lclstrconsts.rserroroccurredinataddressframe #, object-pascal-format msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Адбылася памылка ў %s па %sадрасе %s%s фрэйм %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Не ўдалося захаваць растравую выяву." #: lclstrconsts.rsexception msgid "Exception" msgstr "Выключэнне" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Каталог павінен існаваць" #: lclstrconsts.rsfddirectorynotexist #, object-pascal-format msgid "The directory \"%s\" does not exist." msgstr "Каталог \"%s\" не існуе." #: lclstrconsts.rsfdfilealreadyexists #, object-pascal-format msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Файл \"%s\" ужо існуе. Перазапісаць ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл павінен існаваць" #: lclstrconsts.rsfdfilenotexist #, object-pascal-format msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не існуе." #: lclstrconsts.rsfdfilereadonly #, object-pascal-format msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" недаступны для запісу." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл недаступны для запісу" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Захаваць файл як" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Адкрыць існы файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перазапісаць файл ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Шлях павінен існаваць" #: lclstrconsts.rsfdpathnoexist #, object-pascal-format msgid "The path \"%s\" does not exist." msgstr "Шлях \"%s\" не існуе." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Абраць каталог" #: lclstrconsts.rsfileinfofilenotfound #, object-pascal-format msgid "(file not found: \"%s\")" msgstr "(файл не знойдзены: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Звесткі пра файл" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(фільтр)" #: lclstrconsts.rsfind msgid "Find" msgstr "Пошук" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Знайсці яшчэ" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Першы" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols не можа быць > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows не можа быць > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew #, object-pascal-format msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Рэсурс формы %s не знойдзены. Для формаў без рэсурсаў трэба выкарыстоўваць канструктар CreateNew. Глядзіце глабальную зменную RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror #, object-pascal-format msgid "Form streaming \"%s\" error: %s" msgstr "Памылка струменяў \"%s\" формаў: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Наперад" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Фуксія" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags уключыць вызначаныя адладачныя паведамленні GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags адключыць вызначаныя адладачныя паведамленні GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Фармат Graphics Interchange" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings папярэджанні і памылкі Gtk+/GDK спыняць праграму." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Градыент актыўнага загалоўка" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Градыент неактыўнага загалоўка" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Графіка" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Шэры" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Шэры тэкст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Зялёны" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "Файл сеткі не існуе" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "Немагчыма ўставіць радкі, калі няма слупкоў" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "Немагчыма ўставіць слупкі, калі няма радкоў" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Індэкс сеткі па-за дыяпазонам значэнняў." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не можа быць меншы за GroupIndex папярэдняга элемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фільтр:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Гісторыя:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Згодна з пагадненнямі Xt, клас праграмы - гэта назва праграмы з вялікай літары ў пачатку. Напрыклад, назва класа для gimp - \"Gimp\". Калі пазначана --class, клас праграмы будзе вызначаны ў \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags уключыць вызначаныя адладачныя паведамленні Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d падлучыцца да пазначанага X-сервера, дзе \"h\" - гэта назва хоста, \"s\" - нумар сервера (звычайна 0), а \"d\" - нумар дысплэя (звычайна апускаецца). Калі --display не пазначана, выкарыстоўваецца зменная асяроддзя DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module загрузіць пазначаны модуль падчас запуску." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe вызначыць назву праграмы ў \"progname\". Калі не вызначана, назва праграмы будзе вызначаная ў ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags адключыць вызначаныя адладачныя паведамленні Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient не вызначаць пераходны парадак для мадальных формаў" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm адключыць выкарыстанне X-пашырэнняў у агульнай памяці." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync выклікаць XSynchronize (display, True) пасля падлучэння да X-сервера. Гэта палягчае адладжванне памылак пратакола X, бо буферызацыя запытаў X будзе адключаная, а памылкі X будуць атрымлівацца адразу пасля таго, як запыт пратакола, які згенераваў памылку, будзе апрацаваны X-серверам." #: lclstrconsts.rshelp msgctxt "lclstrconsts.rshelp" msgid "Help" msgstr "Даведка" #: lclstrconsts.rshelpalreadyregistered #, object-pascal-format msgid "%s: Already registered" msgstr "%s: ужо зарэгістравана" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "База даных даведкі была знойдзеная для гэтай тэмы, але не змяшчае яе" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Для гэтай тэмы не ўсталявана базы даных даведкі" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Памылка даведкі" #: lclstrconsts.rshelphelpcontextnotfound #, object-pascal-format msgid "Help context %s not found." msgstr "Кантэкст даведкі %s не знойдзены." #: lclstrconsts.rshelphelpcontextnotfoundindatabase #, object-pascal-format msgid "Help context %s not found in Database \"%s\"." msgstr "Кантэкст даведкі %s не знойдзены ў базе даных \"%s\"." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype #, object-pascal-format msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "База даных даведкі \"%s\" не знайшла праграму для прагляду старонак тыпу %s" #: lclstrconsts.rshelphelpdatabasenotfound #, object-pascal-format msgid "Help Database \"%s\" not found" msgstr "База даных даведкі \"%s\" не знойдзеная" #: lclstrconsts.rshelphelpfordirectivenotfound #, object-pascal-format msgid "Help for directive \"%s\" not found." msgstr "Даведка для дырэктывы \"%s\" не знойдзеная." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #, object-pascal-format msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Даведка для дырэктывы \"%s\" не знойдзеная ў базе даных \"%s\"." #: lclstrconsts.rshelphelpkeywordnotfound #, object-pascal-format msgid "Help keyword \"%s\" not found." msgstr "Ключавое слова даведкі \"%s\" не знойдзена." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #, object-pascal-format msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "Ключавое слова даведкі \"%s\" не знойдзена ў базе даных \"%s\"." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #, object-pascal-format msgid "Help node \"%s\" has no Help Database" msgstr "Элемент даведкі \"%s\" не мае базы даных даведкі" #: lclstrconsts.rshelpnohelpfoundforsource #, object-pascal-format msgid "No help found for line %d, column %d of %s." msgstr "Не знойдзена даведкі для радка %d, слупка %d з %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Для гэтай тэмы няма даведачных запісаў" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Для гэтай тэмы не знойдзена даведкі" #: lclstrconsts.rshelpnotregistered #, object-pascal-format msgid "%s: Not registered" msgstr "%s: не зарэгістравана" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Памылка сродку выбару даведкі" #: lclstrconsts.rshelpthereisnoviewerforhelptype #, object-pascal-format msgid "There is no viewer for help type \"%s\"" msgstr "Няма праграмы для прагляду даведкі тыпу \"%s\"" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Памылка сродку прагляду даведкі" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Не знойдзена праграмы для прагляду змесціва даведкі для гэтай тэмы" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Падсвятленне" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Падсвятленне тэксту" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Падсвятленне" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Значок Mac OS X" #: lclstrconsts.rsicon msgid "Icon" msgstr "Значок" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Выява значка не можа быць пустой" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Выява значка мусіць мець такі самы фармат" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Немагчыма змяніць фармат выявы" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Выява значка мусіць мець такі самы памер" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Немагчыма змяніць памер выявы" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Значок не мае бягучай выявы" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Рамка неактыўнага акна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Загаловак неактыўнага акна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Загаловак неактыўнага акна" #: lclstrconsts.rsindexoutofbounds #, object-pascal-format msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Індэкс %d па-за дыяпазонам 0 .. %d" #: lclstrconsts.rsindexoutofrange #, object-pascal-format msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Індэкс па-за дыяпазонам Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон звестак" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Тэкст звестак" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate #, object-pascal-format msgid "Invalid Date : %s" msgstr "Хібная дата : %s" #: lclstrconsts.rsinvaliddaterangehint #, object-pascal-format msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Хібная дата: %s. Мусіць быць паміж %s і %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "хібны струмень аб'екта формы" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Хібнае значэнне ўласцівасці" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Хібны фармат струменя" #: lclstrconsts.rsisalreadyassociatedwith #, object-pascal-format msgid "%s is already associated with %s" msgstr "%s ужо асацыюецца з %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Апошняя" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Лаймавы" #: lclstrconsts.rslistindexexceedsbounds #, object-pascal-format msgid "List index exceeds bounds (%d)" msgstr "Індэкс спіса па-за дыяпазонам (%d)" #: lclstrconsts.rsmacosfileformat msgid "File Format:" msgstr "Фармат файла:" #: lclstrconsts.rsmacosmenuhide #, object-pascal-format msgid "Hide %s" msgstr "Схаваць %s" #: lclstrconsts.rsmacosmenuhideothers msgid "Hide Others" msgstr "Схаваць іншыя" #: lclstrconsts.rsmacosmenuquit #, object-pascal-format msgid "Quit %s" msgstr "Выйсці з %s" #: lclstrconsts.rsmacosmenuservices msgid "Services" msgstr "Службы" #: lclstrconsts.rsmacosmenushowall msgid "Show All" msgstr "Паказаць усё" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Барвовы" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Скасаванне" #: lclstrconsts.rsmball msgid "&All" msgstr "&Усе" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Скасаваць" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрыць" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Даведка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Не зважаць" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Не" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Не для ўсіх" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Добра" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Адкрыць" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Паўтарыць" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Захаваць" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Разблакаваць" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Так" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Так для &ўсіх" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Сярэдне шэры" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панэль меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Падсвятленне меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Тэкст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " зменена " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Зялёных грошай" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Аўтэнтыфікацыя" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Пацвярджэнне" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Адвольны" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Памылка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Інфармацыя" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Папярэджанне" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Цёмна-сіні" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Далей" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Няма" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Непрыдатны файл сеткі" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Няма аб'екта віджэтаў. Пераканайцеся, што модуль \"інтэрфейсы\" быў дададзены ў \"uses\"." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Аліўкавы" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Абраць дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Малюнак" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Адправіць" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpressaborttok #, object-pascal-format msgid "%s%sPress OK to ignore and risk data corruption.%sPress Abort to kill the program." msgstr "%s%sНацісніце \"Добра\", каб праігнараваць і пайсці на рызыку пашкоджання даных.%sНацісніце \"Перарваць\", каб забіць працэс праграмы." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Папярэдняя" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Пытацца пацвярджэння пры замене" #: lclstrconsts.rspropertydoesnotexist #, object-pascal-format msgid "Property %s does not exist" msgstr "Уласцівасць %s не існуе" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Фіялетавы" #: lclstrconsts.rsqtoptiondisableaccurateframe msgid "-disableaccurateframe, disables fully accurate window frame under X11. This feature is implemented for Qt, Qt5 and Gtk2 interfaces and used mostly by GetWindowRect()." msgstr "-disableaccurateframe, адключае дакладнае вызначэнне рамкі акна ў X11. Гэтая функцыя рэалізаваная для інтэрфейсаў Qt, Qt5 і Gtk2 і выкарыстоўваецца ў асноўным GetWindowRect()." #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (толькі ў X11), запуск у сродку адладжвання можа выклікаць няяўны -nograb, выкарыстоўвайце -dograb для перавызначэння. Патрэбны QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, вызначае рухавік, які будзе выкарыстоўвацца для рэндэрынгу віджэтаў і QPixmaps. Даступныя варыянты: уласны, растравы і opengl. OpenGL па-ранейшаму нестабільны." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, забараняе Qt захопліваць мыш або клавіятуру. Патрэбны QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, вызначае кірунак размяшчэння віджэтаў праграмы ў Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, аднаўляе праграму з папярэдняга сеанса." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style або -style=style, вызначае стыль графічнага інтэрфейсу праграмы. Магчымыя значэнні: motif, windows, і platinum. Калі вы скампілявалі Qt з дадатковымі стылямі або маеце дадатковыя стылі, дададзеныя як ўбудовы, яны будуць даступныя для параметра загаднага радка \"-style\". УВАГА: не ўсе стылі даступныя на ўсіх платформах. Калі параметр стылю не існуе, Qt запусціць з прадвызначаным стылем (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet або -stylesheet=stylesheet, вызначае табліцу стыляў праграму. Значэнне павінна быць шляхам да файла, які змяшчае табліцу стыляў. Заўвага: адносныя URL-адрасы ў файле табліцы стыляў адносяцца да шляху да файла табліцы стыляў." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (толькі ў X11), пераключае ў сінхронны рэжым для адладжвання." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, выводзіць адладачнае паведамленне пра колькасць віджэтаў, якія засталіся не знішчанымі, і максімальную колькасць віджэтаў, якія існавалі адначасова." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg або -background color, вызначае прадвызначаны колер фону і палітру праграмы (разлічваюцца светлыя і цёмныя адценні)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn або -button color, вызначае прадвызначаны колер кнопкі." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, прымушае праграму ўсталяваць асабістую\n" "мапу колераў на 8-бітавым дысплэі." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, вызначае дысплэй для X-сервера (прадвызначана - $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg або -foreground color, вызначае прадвызначаны колер тэксту." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn або -font font, вызначае шрыфт праграмы. Шрыфт павінен быць вызначаны з дапамогай лагічнага апісання шрыфта X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, вызначае геаметрыю кліента першага акна, якое паказваецца." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, вызначае сервер метаду ўводу (адпавядае наладжванню зменнай асяроддзя XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, вызначае, як увод устаўляецца ў дадзены віджэт. Напрыклад, onTheSpot прымушае ўвод з'яўляцца непасрэдна ў віджэце, у той час як overTheSpot выводўіць увод у полі, якое плавае над віджэтам, і не ўстаўляецца, пакуль не будзе завершана рэдагаванне." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, вызначае назву праграмы." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, абмяжоўвае колькасць колераў, адведзеных у колеравым кубе на 8-бітавым дысплэі, калі праграма выкарыстоўвае спецыфікацыю колеру QApplication::ManyColor. Калі колькасць роўная 216, то выкарыстоўваецца колеравы куб 6x6x6 (г.зн. 6 узроўняў чырвонага, 6 зялёнага і 6 сіняга); для іншых значэнняў выкарыстоўваецца куб, прыблізна прапарцыйны кубу 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, вызначае загаловак праграмы." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, прымушае праграму выкарыстоўваць TrueColor на 8-бітавым дысплэі." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate, хоць абнаўленне не выконваецца" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Немагчыма захаваць выяву падчас абнаўлення" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Немагчыма пачаць абнаўленне ўсяго, калі выконваецца абнаўленне палатна" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Чырвоны" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Абнавіць" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Замяніць" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Замяніць усё" #: lclstrconsts.rsresourcenotfound #, object-pascal-format msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Рэсурс %s не знойдзены" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Паласа пракручвання" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Значэнне ўласцівасці паласы пракручвання знаходзіцца па-за межамі дыяпазону" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Абярыце колер" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Абраць шрыфт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Срэбны" #: lclstrconsts.rssize msgid " size " msgstr " памер " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Нябесна-сіні" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Элемент кіравання з укладкамі" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Сіне-зялёны" #: lclstrconsts.rstext msgid "Text" msgstr "Тэкст" #: lclstrconsts.rsthebuiltinurlisreadonlychangethebaseurlinstead msgid "The built-in URL is read only. Change the BaseURL instead." msgstr "Убудаваны URL-адрас даступны толькі для чытання. Замест яго змяніце BaseURL." #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Фармат Tagged Image File" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Панэль" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Ручка для кіравання памерам дзвюх частак вобласці" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Дрэва элементаў" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Не ўдалося загрузіць прадвызначаны шрыфт" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Невядомая памылка, адпраўце справаздачу пра хібу" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Невядомае пашырэнне выявы" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Невядомы фармат выявы" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Фармат растравай выявы не падтрымліваецца." #: lclstrconsts.rsunsupportedclipboardformat #, object-pascal-format msgid "Unsupported clipboard format: %s" msgstr "Фармат буфера абмену не падтрымліваецца: %s" #: lclstrconsts.rswarningunreleaseddcsdump #, object-pascal-format msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " УВАГА: знойдзена %d нерэлізаваных кантэкстаў прылады, падрабязныя звесткі ніжэй:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump #, object-pascal-format msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: знойдзена %d нерэлізаваных GDIObjects, падрабязныя звесткі ніжэй:" #: lclstrconsts.rswarningunreleasedmessagesinqueue #, object-pascal-format msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: у чарзе засталося %d паведамленняў! Яны будуць выдаленыя" #: lclstrconsts.rswarningunreleasedtimerinfos #, object-pascal-format msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: засталося %d структур TimerInfo, яны будуць вызваленыя" #: lclstrconsts.rswarningunremovedpaintmessages #, object-pascal-format msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " УВАГА: знойдзена %s невыдаленых спасылак LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Белы" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Толькі цэлыя словы" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Памылка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Увага:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Акно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Рамка акна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Тэкст акна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жоўты" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Немагчыма сфакусавацца на адключаным або нябачным акне" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Паўторныя меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Хібнае стварэнне дзеяння" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Хібнае пералічванне дзеянняў" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Хібная рэгістрацыя дзеяння" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Хібнае скасаванне рэгістрацыі дзеяння" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Хібны памер выявы" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Хібны індэкс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Бягучы тэкст не адпавядае вызначанай масцы." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Індэкс меню знаходзіцца па-за межамі дыяпазону" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem паказвае на нуль" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Падменю не ў меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt +" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Backspace" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl +" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Уніз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Увод" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Хатні каталог" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Улева" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta +" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Управа" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift +" #: lclstrconsts.smkcspace msgid "Space" msgstr "Прагал" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Уверх" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Няма даступных таймераў" #: lclstrconsts.sparentrequired #, object-pascal-format msgid "Control \"%s\" has no parent window." msgstr "Элемент кіравання \"%s\" не мае бацькоўскага акна." #: lclstrconsts.sparexpected #, object-pascal-format msgid "Wrong token type: %s expected" msgstr "Няправільны тып токена: чакаўся %s" #: lclstrconsts.sparinvalidfloat #, object-pascal-format msgid "Invalid floating point number: %s" msgstr "Хібны лік са зменнай кропкай: %s" #: lclstrconsts.sparinvalidinteger #, object-pascal-format msgid "Invalid integer number: %s" msgstr "Хібны цэлы лік: %s" #: lclstrconsts.sparlocinfo #, object-pascal-format msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, зрух струменя %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Незавершанае значэнне байта" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершаны радок" #: lclstrconsts.sparwrongtokensymbol #, object-pascal-format msgid "Wrong token symbol: %s expected but %s found" msgstr "Няправільны сімвал токена: чакаўся %s, а знойдзены %s" #: lclstrconsts.sparwrongtokentype #, object-pascal-format msgid "Wrong token type: %s expected but %s found" msgstr "Няправільны тып токена: чакаўся %s, а знойдзены %s" #: lclstrconsts.sshellctrlsbytes #, object-pascal-format msgid "%s bytes" msgstr "%s байтаў" #: lclstrconsts.sshellctrlsinvalidpath #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "Invalid pathname:\n" "\"%s\"" msgstr "Хібны шлях:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidpathrelative #, object-pascal-format msgid "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"" msgstr "Хібны шлях:\n" "\"%s\"\n" "адносна каранёвага:\n" "\"%s\"" #: lclstrconsts.sshellctrlsinvalidroot #, object-pascal-format msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "Invalid pathname:\n" "\"%s\"" msgstr "Хібны шлях:\n" "\"%s\"" #: lclstrconsts.sshellctrlskb #, object-pascal-format msgid "%s kB" msgstr "%s кБ" #: lclstrconsts.sshellctrlsmb #, object-pascal-format msgid "%s MB" msgstr "%s МБ" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "Назва" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists #, object-pascal-format msgid "The selected item does not exist on disk:\n" "\"%s\"" msgstr "Абраны элемент не існуе на дыску:\n" "\"%s\"" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "Памер" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "Тып" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/lcl/README.txt������������������������������������������������������������0000644�0001750�0000144�00000000445�15104114162�016623� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Language files in this directory are part of Lazarus. This directory synchronized with current Lazarus version. If you want to translate it then send translation to Lazarus project. https://www.lazarus-ide.org https://gitlab.com/freepascal.org/lazarus/lazarus/-/tree/main/lcl/languages ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.zh_TW.po��������������������������������������������������������0000644�0001750�0000144�00001325740�15104114162�017714� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-04-04 19:07+0800\n" "Last-Translator: Kne luo\n" "Language-Team: \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 繁體中文\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "正在比較... %d%% (按下 ESC 鍵可取消)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "左邊: 刪除 %d個檔案" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "右邊: 刪除 %d個檔案" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "找到檔案:%d(相同:%d,不同:%d,僅左側有:%d,僅右側有:%d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "左邊到右邊:複製 %d 個檔案,合計大小:%s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "右邊到左邊:複製 %d 個檔案,合計大小:%s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "選擇範本..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "檢查可用空間 (&H)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "複製屬性 (&Y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "複製擁有者 (&W)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "複製權限(&P)" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "複製日期/時間 (&A)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "修正連結 (&K)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "丟棄唯讀屬性 (&G)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "排除空白資料夾 (&X)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "允許連結 (&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "預留空間 (&R)" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "寫入時複製" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "校驗(&V)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "當不能設定檔案時間、屬性及其它項目時要如何處理" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "使用檔案範本" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "當資料夾存在時 (&E)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "當檔案存在時 (&F)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "當不能設定檔案內容時 (&N)" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<沒有範本>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "複製到剪貼簿" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "構建" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "提交" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "首頁:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "修訂" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "重置 (&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "選擇屬性" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "封存 (&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "壓縮 (&M)" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "資料夾 (&D)" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "加密 (&E)" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "隱藏 (&H)" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "唯讀 (&N)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "疏鬆 (&P)" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "符號連結 (&S)" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "系統 (&Y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "暫存 (&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 屬性" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "一般屬性" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "當成文字檔 (&X):" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "基準測試" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "基準測試數據大小:%d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "杂凑" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "時間 (毫秒)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "速度 (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "計算校驗碼..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "任務完成後打開校驗碼檔案" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "為每個檔案建立單獨的驗證碼檔案 (&R)" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "儲存驗證碼檔案到 (&S):" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "校驗驗證碼..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "編碼" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "加入 (&D)" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "連線 (&O)" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "連線管理" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "連線到:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "加入佇列 (&D)" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "選項 (&P)" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "將目前設定儲存為預設值 (&V)" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "複製檔案" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新增佇列" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "佇列 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "佇列 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "佇列 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "佇列 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "佇列 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "儲存描述" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "檔案/資料夾註解" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "編輯註解 (&D):" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "編碼 (&E):" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "自動比較" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "二進制模式" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "複製區塊至右邊" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "複製區塊至右邊" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "複製區塊至左邊" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "複製區塊至左邊" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "全選 (&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "復原" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "復原" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "離開 (&X)" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "尋找 (&F)" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "尋找" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "找下一個" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "找下一個" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "找上一個" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "找上一個" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "取代 (&R)" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "取代" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "第一個不同點" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "第一個不同點" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "跳轉到指定行..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "跳轉到指定行" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "忽略大小寫" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "忽略空白" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "同步捲動" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "最後一個不同點" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "最後一個不同點" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "註明不同點" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "下一個不同點" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "下一個不同點" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "開啟左邊檔案..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "開啟右邊檔案..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "繪製背景色彩" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "上一個不同點" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "上一個不同點" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "重新載入 (&R)" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "重新載入" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "儲存" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "儲存" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "另存新檔..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "另存新檔..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "儲存左邊檔案" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "儲存左邊檔案" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "左邊檔案另存新檔..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "左邊檔案另存新檔..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "儲存右邊檔案" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "儲存右邊檔案" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "右邊檔案另存新檔..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "右邊檔案另存新檔..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "比較" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "編碼" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "編碼" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "比較檔案" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左邊 (&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右邊 (&R)" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "動作 (&A)" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "選項 (&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "新增新的快速鍵序列" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "從序列移除最後的快速鍵" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "從剩餘可用按鍵清單中選擇快速鍵" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "僅用於這些控制項" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "參數(每行一個)(&P)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "快速鍵:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "關於" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "設置 (&C)" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "設置" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "複製" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "剪下" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "刪除" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "尋找 (&F)" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "尋找" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "找下一個" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "找下一個" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "找上一個" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "跳轉到指定行..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "貼上" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "取代 (&R)" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "取代" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "全選 (&A)" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "全選" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "復原" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "復原" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "關閉" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "離開" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "新增 (&N)" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "新增" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "開啟 (&O)" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "開啟" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "重新載入" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "儲存" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "另存新檔 (&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "另存新檔" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "編輯器" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "開啟為" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "儲存為" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "語法高亮 (&S)" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "換行符號" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "多行範式 (&M)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大小寫視為相異 (&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "從目前位置找起 (&E)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "規則運算式 (&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "僅選擇文字 (&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "僅完整單字 (&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "選項" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "取代 (&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "搜尋 (&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "方向" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "對當前所有對象執行此操作(&A)" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "解壓縮檔案" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "解壓時包含完整的路徑名稱 (&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "將每個壓縮檔解壓到不同的子資料夾 (名稱用壓縮檔名稱) (&S)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "覆寫已存在檔案 (&V)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "解壓路徑 (&D):" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "解壓檔案遮罩 (&E):" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "加密檔案的密碼 (&P):" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "等待..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "檔案名稱:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "從:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "關閉時暫存檔會被刪除!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "移到面板 (&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "檢視全部 (&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "現正操作:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "從:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "到:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "內容" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "允許將檔案作為程式執行 (&E)" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文字:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "包含:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "建立時間:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "執行:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路徑:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "群組 (&G)" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "訪問時間:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "修改時間:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "狀態修改時間:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進制:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "擁有者 (&W)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "符號連結:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "類別:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "名稱" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "值" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "內容" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "關閉" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "終止" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "解鎖" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "全部解鎖" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "解鎖" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "檔案權柄" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "行程 ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "可執行檔案路徑" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "取消 (&A)" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "關閉 (&C)" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "關閉" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "熱鍵設置" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "傳送到清單列表 (&L)" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "取消搜尋,關閉並釋放內存" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "取消並關閉所有其他「搜尋檔案」行程,並釋放內存" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "移到檔案 (&G)" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "尋找數據" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "最近搜尋 (&L)" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "新的搜尋 (&N)" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "新建搜尋(清除過濾器)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "轉到 <高級> 頁面" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "轉到 <載入/儲存> 頁面" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "切換到下一頁(&T)" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "轉到 <插件> 頁面" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "切換到上一頁(&P)" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "轉到 <結果> 頁面" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "轉到 <標準> 頁面" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "開始 (&S)" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "檢視 (&V)" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "載入 (&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "儲存 (&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "儲存並保存\"開始位置\" (&V)" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "當載入範本時將會還原為目前設置的\"開始位置\"。如果你要固定搜尋一個特定的資料夾時就使用它" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "使用範本" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "尋找檔案" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "大小寫視為相異 (&I)" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "開始日期 (&D):" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "結束日期 (&E):" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "最小容量 (&I):" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "最大容量 (&Z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "在壓縮档案中搜寻(&A)" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "在檔案中尋找文字 (&T)" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "允許符號連結 (&Y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "尋找不包含這些文字的檔案 (&O)" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "不早於 (&O):" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "打開的分頁" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "搜尋部分檔名名 (&H)" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "規則運算式 (&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "取代文字 (&P)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "選取的資料夾及檔案 (&F)" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "規則運算式 (&U)" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "開始時間 (&T):" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "結束時間 (&M):" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "使用搜尋插件 (&U):" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "相同的内容" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "相同的杂凑" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "相同的名称" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "查找重复的档案 (&P)" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "相同的容量" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "十六進制 (&M)" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "輸入想要排除搜尋的資料夾名稱 (分隔符號\";\")" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "輸入想要排除搜尋的檔案名稱 (分隔符號\";\")" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "輸入檔案名稱 (分隔符號\";\")" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "插件" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "欄位" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "操作符" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "值" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "資料夾" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "檔案" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "尋找數據" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "屬性 (&B)" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "編碼 (&G):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "排除子目錄 (&X)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "排除檔案 (&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "檔案遮罩 (&F)" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "開始位置 (&D)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "搜尋子目錄 (&B):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "歷史搜尋 (&P):" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "操作(&A)" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "取消並關閉所有其他,並釋放內存" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "在新分頁中打開" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "選項" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "從清單移除" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "結果 (R)" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "顯示找到的全部項目" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "在編輯器中開啟" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "在檢視器顯示" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "檢視 (&V)" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "進階" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "載入/儲存" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "結果" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "標準" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "尋找 (&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "尋找" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "向後 (&B)" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "大小寫視為相異 (&A)" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "規則運算式 (&R)" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "十六進制" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "網域:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "密碼:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "使用者名稱:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "匿名連接" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "以用戶身份連結" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "建立硬式連結" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "連結目標 (&D)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "連結名稱 (&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "全部導入!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "導入所選" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "請選擇希望導入的項目" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "單擊子選單時, 將選擇整個選單" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "按住 CTRL 鍵並點擊條目可進行多項選擇" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "合併器" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "另存新檔..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "項目" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "檔案名稱 (&F)" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下移 (&W)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下移" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "刪除" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "上移 (&U)" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "上移" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "關於 (&A)" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "按索引激活分頁" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "加入檔案名稱到指令行" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "新建搜尋實例..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "加入路徑和檔案名稱到指令行" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "複製路徑到指令行" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "添加插件" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "基準測試(&B)" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "簡要" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "簡要檢視" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "計算佔用空間 (&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "變更資料夾" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "切換到個人資料夾" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "回到上一層資料夾" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "變更到根資料夾" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "計算驗證碼... (&S)" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "校驗驗證碼... (&V)" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "清除記錄檔案" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "清除記錄視窗" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "關閉所有分頁 (&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "關閉重復分頁" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "關閉分頁 (&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "下一個指令" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "將歷史記錄中的下一個指令設置到指令行" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "上一個指令" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "將歷史記錄中的上一個指令設置到指令行" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "完整" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "欄位檢視" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "比較檔案內容 (&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "比較資料夾" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "比較資料夾" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "壓縮檔案配置" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "常用資料夾清單配置" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "「我的最愛」配置" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "資料夾分頁配置" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "熱鍵配置" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "插件配置" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "儲存位置" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "儲存設定" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "搜尋配置" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "工具列..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "工具提示配置" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "樹形檢視選單配置" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "樹形檢視選單顏色配置" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "顯示內文選單" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "複製" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "將所有分頁複製到對側" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "複製所有顯示的欄 (&C)" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "複製包含完整路徑的檔案名稱" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "複製檔案名稱到剪貼簿 (&F)" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "使用網路路徑複製名稱" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "無需確認複製檔案" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "複製所選文件的不含路徑結束分隔符的完整路徑" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "複製所選文件的完整路徑" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "複製到同面板下" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "複製 (&C)" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "顯示佔用空間 (&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "剪下 (&T)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "顯示指令參數" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "取消並關閉所有「搜尋」,並釋放內存" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "資料夾歷史記錄" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "常用資料夾清單 (&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "執行内部指令 (&I)..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "選擇任意指令並執行" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "編輯" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "編輯註解... (&M)" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "編輯新檔案" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "變更路徑" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "交換面板 (&P)" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "執行指令碼" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "解壓縮檔案... (&E)" #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "檔案關聯設置 (&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "合併檔案... (&B)" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "顯示檔案內容 (&F)" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "分割檔案... (&I)" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "平面檢視 (&F)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "平面檢視 (&F),僅被選中時" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "切換到指令行" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "交換焦點" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "左右側切換" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "聚焦到樹形檢視" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "切換當前文件清單和樹形檢視(如果已啓用)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "將指標放在第一個資料夾或檔案上" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "移到清單中第一個檔案" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "移到清單中最後一個檔案" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "建立硬式連結... (&H)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "內容 (&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "水平面板模式 (&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "鍵盤配置 (&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左面板 &= 右面板" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "開啟左面板磁碟清單" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "從「我的最愛」載入分頁" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "載入清單" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "從剪貼簿載入所選項目 (&B)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "從檔案載入所選項目 (&L)..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "从档案载入分頁 (&L)" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "建立資料夾" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "選擇所有相同副檔名 (&X)" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "反向選擇 (&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "全選 (&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "取消所選群組... (&U)" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "選擇群組 (&G)" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "取消全選 (&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "最小化視窗" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "多重命名工具 (&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "連接網路... (&C)" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "中斷連接網路 (&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "快速連接網路 (&Q)..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "新增分頁 (&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "载入清單中的下一个「我的最愛」分頁" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "切換到下一個分頁 (&T)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "開啟" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "嘗試開啟壓縮檔" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "開啟 bar 檔案" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "在新分頁開啟資料夾 (&F)" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "開啟虛擬檔案系統清單 (&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "操作檢視器 (&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "選項... (&O)" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "壓縮檔案... (&P)" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "設置分隔位置" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "貼上 (&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "载入清單中的上一个「我的最愛」分頁" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "切換到上一個分頁 (&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "快速篩選" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "快速搜尋" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "快速檢視面板 (&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "重新整理 (&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "重新載入上次加載的「我的最愛」分頁" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "移動" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "移動/重新命名時無需確認" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "重新命名" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "重新命名分頁 (&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "重新儲存上次加載的「我的最愛」分頁" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "回復所選項目 (&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "反向排序 (&V)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "右面板 &= 左面板" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "開啟右面板磁碟清單" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "開啟終端機 (&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "将当前分页保存到新的「我的最愛」分页" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "儲存所選項目 (&V)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "儲存所選項目到檔案... (&E)" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "保存分頁到档案 (&S)" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "搜尋... (&S)" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "將所有分頁設置為在新分頁中開啓資料夾的鎖定狀態" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "將所有分頁設置為正常狀態" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "將所有分頁設置為鎖定狀態" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "將所有分頁設置為允許變更資料夾的鎖定狀態" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "變更檔案屬性... (&A)" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "鎖定並可在新分頁開啟資料夾 (&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "普通 (&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "鎖定 (&L)" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "鎖定並允許在目前分頁變更資料夾 (&D)" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "開啟" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "使用系統預設的檔案關聯開啟" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "顯示底部選單" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "顯示指令行歷史記錄" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "選單" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "顯示/隱藏系統檔案 (&H)" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "依屬性排序 (&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "依日期排序 (&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "依副檔名排序 (&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "依檔名排序 (&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "依大小排序 (&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "啟用/停用不顯示在忽略清單下所設定的檔案或資料夾" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "建立符號連結... (&L)" #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "同步資料夾" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "目標面板 &= 來源面板" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "測試壓縮檔 (&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "縮圖" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "縮圖檢視" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "傳送指標行上的資料夾到左視窗" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "傳送指標行上的資料夾到右視窗" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "樹形檢視面板 (&T)" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "取消選擇所有相同副檔名 (&T)" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "檢視" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "顯示路徑歷史記錄" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "移到下一個歷史記錄" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "移到上一個歷史記錄" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "檢視記錄檔案" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "檢視當前搜尋實例" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "參觀 Double Commander 網站 (&V)" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "抹除檔案" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "離開" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "資料夾" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "終端機" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用資料夾清單" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "在左面板顯示右面板目前的資料夾" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "移到個人資料夾" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "移到根資料夾" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "回到上一層資料夾" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用資料夾清單" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "在右面板顯示左面板目前的資料夾" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "路徑" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "複製..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "建立連結..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "清除" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隱藏" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "全選" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移動..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "建立符號連結..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "分頁選項" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "還原" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "開始" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "取消" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "指令 (&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "設置 (&O)" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "我的最愛" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "檔案 (&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "標記 (&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "網路" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "顯示 (&S)" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "分頁選項 (&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "分頁 (&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "編輯" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "熱鍵" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "說明 (&H)" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "定義... (&D)" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "大小寫視為相異" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "輸入遮罩" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "選擇預先定義好的類型 (&R) :" #: tfrmmkdir.caption msgid "Create new directory" msgstr "建立新資料夾" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "輸入新資料夾名稱 (&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "新的大小" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "高 :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG 壓縮品質" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "寬 :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高度" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "寬度" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "副檔名" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "清除" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "清除" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "關閉 (&C)" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "設定檔" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "計數器" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "計數器" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "日期" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "日期" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "刪除" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "副檔名" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "副檔名" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "編輯 (&E)" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "插件" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "插件" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "重新命名" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "全部重置 (A)" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "儲存 (S)" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "另存新檔 (A)..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "時間" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "時間" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "多重命名工具" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "大小寫視為相異" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "記錄結果(&L)" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "使用規則運算式 (&X)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "使用替代 (&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "計數器" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "尋找 && 取代" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "名稱遮罩" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "預先配置" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "副檔名 (&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "尋找 (&F)" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "間隔 (&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "檔案名稱 (&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "取代 (&P)" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "初始編號 (&T)" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "寬度 (&W)" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "動作" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "編輯 (&E)" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "舊檔名" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "新檔名" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "檔案路徑" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "請選擇一個應用程式" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "自訂指令" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "儲存檔案關聯" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "設置所選擇的應用程式為預設動作" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "檔案類型已開啟: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "多重檔案名稱" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "多重網址" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "單一檔案名稱" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "單一網址" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "套用 (&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "說明 (&H)" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "選項" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "請選擇一個子頁面,這個頁面不包含任何設定。" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "複製" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "刪除 (&E)" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "其他..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "選項:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "格式分析模式:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "啟用 (&N)" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "除錯模式 (&B)" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "顯示終端機輸出結果 (&H)" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "加入壓縮檔 (&I):" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "壓縮器 (&H):" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "刪除:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "描述 (&S):" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "副檔名 (&X):" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "解壓縮 (&T):" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "解壓縮但不含路徑:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID 位置 :" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID 搜尋範圍:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "清單 (&L):" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "壓縮工具:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "清單完成 (可選) (&F):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "清單格式 (&M):" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "清單開始 (可選) (&G):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "密碼詢問字串:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "建立自解壓縮檔:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "測試:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "自動設置 (&U)" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "額外" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "一般" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "當大小,日期或屬性改變時更新 (&S)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "在下列路徑及子資料夾時停用更新 (&P):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "當檔案建立,刪除或重新命名時更新 (&F)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "當應用程式在背景模式下執行時停用更新 (&B)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "停用自動更新" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "更新檔案清單" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "總是顯示通知區域圖示 (&W)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "自動隱蔵未掛載的裝置 (&H)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "當最小化時顯示通知區域圖示 (&V)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "僅允許同時間執行一個 DC 程式 (&L)" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "你可以在這裡輸入一個或多個磁碟及掛載位置 (分隔符號\";\")" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "磁碟黑名單 (&B) " #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "使用漸層指示器 (&G)" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "二進制模式" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "文字:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "指示器背景色彩 (&D):" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "指示器前景色彩 (&I):" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "修改時間:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "修改時間:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "依欄寬裁剪文字 (&T)" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "水平列 (&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "垂直列 (&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "自動填滿欄位 (&U)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "顯示格線" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "自動大小欄位" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "自動大小欄位 (&Z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "指令行歷史記錄 (&M)" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "資料夾歷史記錄 (&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "檔案遮罩歷史記錄 (&F)" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "資料夾分頁" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "儲存設置 (&V)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "搜尋/取代歷史記錄 (&H)" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "資料夾" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "設定檔案儲存位置" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "在離開程式時儲存" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "在指令行設置" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "程式資料夾 (可攜版) (&R)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "個人資料夾 (&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "新增" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "儲存為" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "儲存" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允許顏色覆蓋" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "一般" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "指標外框" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "背景色彩:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景色彩2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "設置檔案系統欄位 (&F):" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "指標行背景色彩:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "指標行文字色彩:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "字型:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "大小:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "文字色彩:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "標記行色彩:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "新增欄位" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "名稱:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "路徑:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption #, fuzzy #| msgid "Show confirmation dialog after drop" msgid "&Show confirmation dialog after drop" msgstr "顯示確認對話盒在拖曳操作後 (&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption #, fuzzy #| msgid "Show file system" msgid "Show &file system" msgstr "顯示檔案系統 (&F)" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption #, fuzzy #| msgid "Show free space" msgid "Show fr&ee space" msgstr "顯示可用空間 (&E)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy #| msgid "Show label" msgid "Show &label" msgstr "顯示標籤 (&L)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "磁碟清單" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "背景色彩 (&K)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "背景色彩 (&K)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "儲存" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "元件屬性" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "前景色彩 (&R)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "前景色彩 (&R)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "文字遮罩 (&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "使用通用格式設定值 (&G)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "使用本處格式設定值 (&L)" #: tfrmoptionseditorcolors.textboldcheckbox.caption #, fuzzy #| msgid "Bold" msgid "&Bold" msgstr "粗體 (&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textboldradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textboldradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption #, fuzzy #| msgid "Italic" msgid "&Italic" msgstr "斜體 (&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textitalicradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textitalicradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "刪除線 (&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption #, fuzzy #| msgid "Underline" msgid "&Underline" msgstr "底線 (&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textunderlineradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "「我的最愛」分页清單(可通过拖曳重新排序)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "剪下" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "貼上" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "新增" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "新增 (&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "下移 (&D)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "編輯" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "移除 (&V)" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "移除 (&M)" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "重新命名 (&E)" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "上移 (&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "動作" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "副檔名" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "檔案類型" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "圖示" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "動作:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "指令 (&C):" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "參數 (&S):" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始路徑 (&H):" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "編輯" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "在編輯器開啟" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "從命令行取得輸出" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "開啟" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "使用終端機執行" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "檢視" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "在檢視器開啟" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "圖示" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "顯示確認視窗在:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "複製操作 (&Y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "刪除操作 (&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "刪除到資源回收筒 (與 Shift 鍵同按為徹底刪除) (&T)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "刪除到資源回收筒操作 (&E)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "丟棄唯讀屬性(&R)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "移動操作 (&M)" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "處理檔案/資料夾的註解 (&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "重新命名檔案名稱時不包含副檔名 (&F)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "顯示分頁選擇面板在複製/移動對話盒 (&W)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "略過操作有錯誤的檔案並將錯誤寫到記錄視窗 (&K)" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "執行操作" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "使用者介面" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "檔案操作的緩衝區大小 (單位: KB) (&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "顯示操作處理進度在 (&I):" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "檔案抹除次數: (&N)" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允許顏色覆蓋" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "使用框架指標 (&F)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "使用反白選取 (&S)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "指標外框" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgid "Bac&kground:" msgstr "背景色彩 (&K):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "背景色彩2 (&R):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "指標行背景色彩 (&U):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "指標行文字色彩 (&X):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "非現用面板的亮度級別 (&B):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "標記色彩 (&M):" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "文字色彩 (&E):" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "搜尋部分檔名 (&S)" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "檔案搜尋" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "使用記憶體映射搜尋檔案中的文字 (&X)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "使用檔案串流搜尋檔案中的文字 (&U)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "預設值 (&F)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "格式" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption #, fuzzy msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "排序" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption #, fuzzy #| msgid "Case sensitivity:" msgid "Case s&ensitivity:" msgstr "區分大小寫 (&E):" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "格式不正確" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "日期及時間格式 (&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "檔案大小格式 (&Z):" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "&Insert new files" msgid "&Insert new files:" msgstr "插入新檔案 (&I):" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "排序資料夾 (&R):" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "排序方式 (&S):" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "移動更新檔案 (&M):" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "說明 (&H)" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "不要載入檔案清單直到分頁已可用 (&N)" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "顯示方括號在資料夾項目的兩端 (&H)" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "高亮顯示新檔及更新檔案 (&G)" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "載入檔案清單在獨立的執行緒 (&F)" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "載入檔案清單後再讀取圖示 (&T)" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "顯示系統及隱藏檔案 (&Y)" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "當按下 <空白鍵> 選擇檔案後, 移動到下一個檔案 (就像按下 <INSERT>) (&W)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "刪除 (&E)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "範本..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "檔案類型色彩 (可用拖曳排序)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "類別屬性 (&T):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "類別色彩 (&L):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "類別遮罩 (&M):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "類別名稱 (&N):" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "字型" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy #| msgid "Add hotkey" msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "新增熱鍵 (&H)" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "複製" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "刪除" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy #| msgid "Delete hotkey" msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "刪除熱鍵 (&D)" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "編輯熱鍵 (&E)" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "篩選 (&F):" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "類別 (&A):" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "指令 (&M):" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "快速鍵檔案 (&S):" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "指令" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "指令" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "熱鍵" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "描述" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "熱鍵" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "參數" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "在下列路徑及子資料夾時停用 (&P):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "在選單項目顯示圖示 (&M)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "顯示覆蓋圖示,例如捷徑 (&V)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "停用特定的圖示" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "圖示大小" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "顯示圖示在檔案名稱左邊" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "全部 (&L)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "所有已關聯的檔案 + 執行檔/捷徑 (較慢) (&E)" #: tfrmoptionsicons.rbiconsshownone.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "不顯示圖示 (&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "僅標準圖示 (&S)" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "加入已選取項目的名稱 (&D)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "加入已選取項目的完整路徑名稱 (&F)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "忽略/不顯示下列的檔案及資料夾 (&I):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "儲存位置 (&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "使用左鍵及右鍵變更資料夾 (類似 Lynx 操作) (&F)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "輸入焦點" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+L&etters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+字母 (&E):" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Le&tters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+字母 (&T):" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "字母 (&L):" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "平面按鈕 (&F)" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "平面介面 (&N)" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "顯示可用空間指示器在磁碟標籤 (&E)" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "顯示記錄視窗 (&G)" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "顯示操作面板在背景模式" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "顯示處理進度在選單列" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "顯示指令行 (&I)" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "顯示當前資料夾 (&Y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "顯示磁碟按鈕 (&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "顯示可用空間標籤 (&P)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption #, fuzzy #| msgid "Show d&rives list button" msgid "Show drives list bu&tton" msgstr "顯示碟磁清單按鈕 (&T)" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "顯示功能鍵按鈕 (&K)" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "顯示主要選單 (&M)" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "顯示工具列 (&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "顯示簡短的可用空間標籤 (&L)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "顯示狀態列 (&S)" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "顯示欄位名稱 (&H)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "顯示資料夾分頁 (&W)" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "顯示終端機視窗 (&R)" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "顯示兩個磁碟按鈕列 (&X)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " 畫面佈置 " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "壓縮/解壓縮 (&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "複製/移動/建立硬式連結/建立符號連結 (&Y)" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "建立/刪除資料夾 (&T)" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "記錄錯誤 (&E)" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "建立記錄檔案 (&R):" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "記錄資訊 (&I)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "記錄操作成功 (&S)" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "檔案系統插件 (&F)" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "檔案操作記錄檔案" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "操作記錄" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "操作狀態" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "移除已不存在檔案的縮圖快取 (&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "當切換磁碟時總是移到根目錄 (&G)" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "顯示警告訊息 (&W)" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "儲存縮圖快取 (&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "縮圖" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "像素" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "縮圖大小 (&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgctxt "TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION" msgid "&Selection by mouse" msgstr "使用滑鼠選取項目 (&S)" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "開啟..." #: tfrmoptionsmouse.gbscrolling.caption msgctxt "TFRMOPTIONSMOUSE.GBSCROLLING.CAPTION" msgid "Scrolling" msgstr "滾輪" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "選取項目" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION" msgid "&Mode:" msgstr "模式 (&M):" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION" msgid "&Line by line" msgstr "一次捲動行數 (&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION" msgid "Line by line &with cursor movement" msgstr "一次捲動一行 + 指標行跟隨移動 (&W)" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION" msgid "&Page by page" msgstr "一次捲動一頁 (&P)" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "加入 (&D)" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "設置 (&F)" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "啟用 (&N)" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "調整 (&T)" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "描述" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "搜尋插件可允許使用其他替代搜尋演算法或外部工具搜尋 (像 \"locate\" 等)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "壓縮插件用於支援特定壓縮格式的處理" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "內容插件可允許在檔案清單顯示 MP3 標籤或圖片屬性等延伸的檔案詳細資料, 或是在搜尋和多重命名工具中使用" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "檔案系統插件可允許存取一些作業系統上罕見的檔案系統, 或是像 Palm/PocketPC 等外部裝置" #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "檢視器插件可允許顯示圖片,試算表,資料庫等檔案格式在檢視器" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "啟動" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "檔案名稱" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "開頭 (名稱開頭必需符合第一個輸入的字元) (&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "結尾 (名稱結尾必需符合最後輸入的字元) (&D)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "選項" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "精準名稱比對" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "區分大小寫" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "搜尋下列項目" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "點擊分頁後立即啟動該分頁 (&P)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "總是顯示分頁 (&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "關閉所有分頁時需確認 (&F)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "限制分頁標題長度為 (&L):" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "顯示星號在鎖定的分頁 (&W)" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "允許分頁多行顯示 (&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Up 開啟新分頁時切換到該分頁 (&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "開啟新分頁於目前分頁旁邊 (&N)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "顯示分頁關閉按鈕 (&B)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "資料夾分頁" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "字元" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "分頁位置 (&B):" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "資料夾分頁標題擴展設置" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "指令:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "參數:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "指令:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "參數:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "指令:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "參數:" #: tfrmoptionstoolbarbase.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "複製按鈕 (&L)" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionstoolbarbase.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "編輯熱鍵 (&K)" #: tfrmoptionstoolbarbase.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "插入新按鈕 (&I)" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "其它..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "移除熱鍵 (&Y)" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平面按鈕 (&F)" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "輸入指令參數 (每指令一行)" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "外觀" #: tfrmoptionstoolbarbase.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "工具列大小 (&B):" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "指令 (&D):" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "參數 (&S):" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "熱鍵:" #: tfrmoptionstoolbarbase.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "圖示 (&N):" #: tfrmoptionstoolbarbase.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "圖示大小 (&Z):" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "指令 (&M):" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "參數 (&P):" #: tfrmoptionstoolbarbase.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始路徑 (&H):" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "工具提示 (&T):" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "按鈕類型" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "圖示" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "在執行程式後保持終端機視窗開啟 (&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "使用終端機執行 (&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "使用外部程式 (&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "額外參數 (&D)" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "執行程式路徑 (&P)" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "複製" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "刪除 (&E)" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "範本..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "其他..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "顯示工具提示" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "類別提示 (&H):" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "類別遮罩 (&M):" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "指標行背景色彩:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "閱讀模式欄位數量 (&N)" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "設置 (&F)" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "壓縮檔案" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "替每個選取的檔案/資料夾建立各自的壓縮檔案 (&R)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "建立自解壓檔案 (&X)" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "加密 (&Y)" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "移動到壓縮檔 (&V)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "分片壓縮 (&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "先用 TAR 打包檔案 (&U)" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "包含路徑名稱 (僅遞迴) (&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "壓縮到這個檔案:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "壓縮程式" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "解壓所有檔案並執行 (&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解壓縮並執行 (&U)" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "壓縮檔案內容" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "屬性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "壓縮率:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日期:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "方式:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "原始大小:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "檔案:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "壓縮大小:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "壓縮者:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "時間:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "關閉篩選面板" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "輸入要搜尋或篩選的文字" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "大小寫視為相異" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "資料夾" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "檔案" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "比對開頭" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "比對結尾" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "篩選" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "切換搜尋或篩選" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "插件" #: tfrmsearchplugin.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "欄位" #: tfrmsearchplugin.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "操作符" #: tfrmsearchplugin.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "值" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "套用 (&A)" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "範本..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "範本..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消 (C)" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "確定 (O)" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消 (C)" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "確定 (O)" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "選擇要插入的字元: (&S)" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmsetfileproperties.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "變更屬性" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "封存" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "建立時間:" #: tfrmsetfileproperties.chkhidden.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "隱藏" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "訪問時間:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "修改時間:" #: tfrmsetfileproperties.chkreadonly.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "唯讀" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "包含子資料夾" #: tfrmsetfileproperties.chksystem.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "系統" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "時間戳記內容" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色欄位代表不可改變的數值)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文字:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色欄位代表不可改變的數值)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進制:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消 (C)" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "確定 (O)" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "分割" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "分割檔大小及數量" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "目標資料夾 (&T)" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "分割檔數量 (&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "構建" #: tfrmstartingsplash.lblcommit.caption #, fuzzy msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "提交" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "修訂" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "建立符號連結" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "連結目標 (&D)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "連結名稱 (&L)" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "關閉" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "範本..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "同步" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "同步資料夾" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "名稱" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "名稱" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "同步" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "樹形檢視選單" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "樹形檢視選單配置" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "樹形檢視選單顏色配置" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "增加" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "變更 (&H)" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "預設值 (&F)" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "移除 (&R)" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "調整插件" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "依內容檢測壓縮類型 (&T)" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "可以刪除檔案 (&L)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "支持加密 (&N)" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "顯示為普通檔案 (隱藏壓縮器圖示) (&W)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "支持在記憶體進行壓縮 (&K)" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify existing archives" msgid "Can &modify existing archives" msgstr "可以修改已存在的壓縮檔 (&M)" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "壓縮檔可包含複數檔案 (&A)" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "可以建立新壓縮檔 (&V)" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "支持選項對話盒 (&U)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "允許在壓縮檔搜尋文字 (&G)" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "描述 (&D):" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "檢測字串 (&E):" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "副檔名 (&E):" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "旗標:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "名稱 (&N):" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "插件 (&P):" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "插件 (&P):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "關於檢視器..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "顯示關於訊息" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "複製檔案" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "複製檔案" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "複製到剪貼簿" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "刪除檔案" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "刪除檔案" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "離開 (&X)" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "尋找" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "找下一個" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "找上一個" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "全螢幕" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "跳轉到指定行..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "跳轉到指定行" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "下一個 (&N)" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "載入下一個檔案" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "上一個 (&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "載入上一個檔案" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "水平翻轉" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "移動檔案" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "移動檔案" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "預覽" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "重新載入" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "重新載入目前檔案" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "旋轉180度" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "旋轉180度" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "旋轉270度" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "旋轉270度" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "旋轉90度" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "旋轉90度" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "儲存" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "另存新檔..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "另存新檔..." #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "截圖" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "全選" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "顯示為二進制 (&B)" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "顯示為閱讀模式 (&O)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "顯示為十六進制 (&H)" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "顯示為文字 (&T)" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "顯示為自動換行文字 (&W)" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "圖像" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "延展" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "延展圖片" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "復原" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "復原" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "放大" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "縮小" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint #, fuzzy msgid "Crop" msgstr "裁剪" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "全螢幕" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "高亮" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "繪圖" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "紅眼" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "調整大小" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "投影片放映" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "檢視器" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "圖片(&I)" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "鉛筆" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption #, fuzzy msgid "Rotate" msgstr "旋轉" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "截圖" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "檢視 (&V)" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "開始 (&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "檔案操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "新增佇列" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "佇列" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "佇列 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "佇列 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "佇列 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "佇列 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "佇列 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "允許連結 (&L)" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "當資料夾存在時 (&E)" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "取消 (&C)" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "確定 (&O)" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "參數:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "設置 (&F)" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "加密 (&Y)" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "複製日期/時間 (&A)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "執行在背景模式 (單獨連接)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "當檔案存在時" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "高度" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "寬度" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "取消快速篩選" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "取消目前操作" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "剪貼簿沒有包含任何可用的工具列資料。" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "屬性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日期" #: ulng.rscolext msgid "Ext" msgstr "副檔名" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名稱" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "大小" #: ulng.rsconfcolalign msgid "Align" msgstr "對齊" #: ulng.rsconfcolcaption msgid "Caption" msgstr "標題" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "刪除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "欄位內容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移動" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "寬度" #: ulng.rsconfcustheader msgid "Customize column" msgstr "自訂欄位" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "複製 (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "編碼" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "放棄 (&O)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全部 (&L)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "增加 (&P)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "取消 (&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "繼續 (&C)" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "複製進去 (&I)" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "全部複製進去 (&A)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "離開程式 (&X)" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "忽略全部 (&G)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "否 (&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "無 (&E)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "確定 (&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "覆蓋 (&O)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "覆蓋全部 (&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "覆蓋全部舊檔 (&D)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "重新命名 (&E)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "回復 (&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "重試 (&T)" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "略過 (&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "略過全部 (&K)" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "是 (&Y)" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "複製檔案" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "移動檔案" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "暫停 (&S)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "開始 (&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "佇列" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "速度 %s/秒" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "速度 %s/秒, 剩餘時間 %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "磁碟可用空間指示器" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<沒有標籤>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<沒有媒體>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander 內部編輯器。" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "跳轉到指定行" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "跳轉到指定行" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "檔案名稱:" #: ulng.rseditnewopen msgid "Open file" msgstr "開啟檔案" #: ulng.rseditsearchback msgid "&Backward" msgstr "前一個(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "搜尋" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "下一個 (&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "取代" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "詢問;覆蓋;複製進去;略過" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "詢問;覆蓋;覆蓋舊檔;略過" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "詢問;不要設置;忽略錯誤" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "篩選" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "定義範本" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s 級" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全部 (不限層次)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "僅目前資料夾" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "資料夾 %s 不存在!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "找到: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "儲存搜尋範本" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "範本名稱:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "已掃描: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "掃描" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "尋找檔案" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "開始" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "編輯器字型 (&E)" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "記錄器字型 (&L)" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "主要字型 (&F)" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "樹形檢視選單字體" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "檢視器字型 (&V)" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "檢視器閱讀模式字型 (&B)" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "可用 %s,容量 %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s 可用" #: ulng.rsfuncatime msgid "Access date/time" msgstr "存取日期/時間" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "屬性" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "註解" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "壓縮大小" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "建立日期/時間" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "副檔名" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "群組" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "連結" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "修改日期/時間" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "名稱" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "名稱但不含副檔名" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "擁有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "路徑" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "大小" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "類型" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "建立硬式連結發生錯誤。" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "複製/移動對話盒" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "比對器" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "編輯器" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "尋找檔案" #: ulng.rshotkeycategorymain msgid "Main" msgstr "主視窗" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "多重命名工具" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "同步資料夾" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "檢視器" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "取消選擇遮罩" #: ulng.rsmarkplus msgid "Select mask" msgstr "選擇遮罩" #: ulng.rsmaskinput msgid "Input mask:" msgstr "輸入遮罩" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "設置自訂欄位" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "服務" #: ulng.rsmenumacosshare msgid "Share..." msgstr "共享..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "動作" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "編輯" #: ulng.rsmnueject msgid "Eject" msgstr "退出" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "解壓縮到此處..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "映射網路磁碟..." #: ulng.rsmnumount msgid "Mount" msgstr "掛載" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "新增" #: ulng.rsmnunomedia msgid "No media available" msgstr "沒有可用的媒體" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "開啟" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "開啟方式" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "其它..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "壓縮此處..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "還原" #: ulng.rsmnusortby msgid "Sort by" msgstr "排序方式" #: ulng.rsmnuumount msgid "Unmount" msgstr "卸載" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "檢視" #: ulng.rsmsgaccount msgid "Account:" msgstr "帳戶:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "壓縮器命令行的額外參數" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "你不能複製/移動檔案【%s】到相同目錄" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "無法刪除資料夾【%s】" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "變更目錄到資料夾【%s】失敗!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "你確定要關閉所有非現用的分頁嗎?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "這個分頁【%s】已鎖定! 仍要關閉嗎?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "你確定要退出嗎?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "你確定要複製這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "你確定要複製所選擇的【%s】嗎?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "你確定要刪除這個部份複製的檔案嗎?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾到資源回收筒嗎?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "你確定要刪除所選擇的【%s】嗎?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "你確定要刪除所選擇的【%s】到資源回收筒嗎?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "無法刪除【%s】到資源回收筒! 要直接刪除嗎?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "磁碟不存在" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "輸入檔案副檔名:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "輸入名稱:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "壓縮檔資料 CRC 錯誤" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "資料損壞" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "無法連接到伺服器:【%s】" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "無法複製檔案 %s 到 %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "目標已存在名稱為【%s】的資料夾。" #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "日期 %s 不被支援" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "資料夾 %s 已存在!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "使用者中止執行" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "關閉檔案發生錯誤" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "無法建立檔案" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "壓縮檔裡沒有檔案" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "無法打開已存在的檔案" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "讀取檔案發生錯誤" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "寫入檔案發生錯誤" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "無法建立資料夾 %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "無效的連結" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "未找到檔案" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "記憶體不足" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "不支持的功能!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "內文選單指令發生錯誤" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "載入設置時發生錯誤" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "規則運算式語法錯誤!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "無法重新命名檔案 %s 為 %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "無法儲存檔案關聯!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "無法儲存檔案" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "無法替【%s】設置屬性" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "無法替【%s】設置日期/時間" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "無法替【%s】設置擁有者/群組" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "緩沖區太小" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "要壓縮的檔案太多" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "未知的壓縮格式" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "檔案 %s 已變更, 是否要儲存?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "檔案 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "檔案操作啟動" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "部份檔案操作尚未完成。關閉 Double Commander 可能會使資料遺失。" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "檔案 %s 是唯讀檔。仍要刪除嗎?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "這個檔案【%s】的容量對於目標檔案系統來說太大!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "資料夾 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "你確定要允許符號連結【%s】嗎?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "加入所選資料夾:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "加入當前資料夾:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "常用資料夾清單配置" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall #, fuzzy msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "全部導入!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel #, fuzzy msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "導入所選" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "路徑" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand #, fuzzy msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "指令:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "名稱:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "指令行發生錯誤" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "無效的檔案名稱" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "無效的設定檔格式" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無效的路徑" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "路徑 %s 包含禁用字元 " #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "這不是可用的插件!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "這個插件是替 TotalDouble Commander 的 %s 所建立。%s不能正常運作在 Double Commander 的 %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "無效的引用" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "無效的選擇" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "載入檔案清單..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "複製檔案 %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "刪除檔案 %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "錯誤:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "解壓縮檔案 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "資訊: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "建立連結 %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "建立資料夾 %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "移動檔案 %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "壓縮檔案 %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "移除資料夾 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "建立符號連結 %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "測試檔案完整性 %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "主要密碼" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "請輸入主要密碼:" #: ulng.rsmsgnewfile msgid "New file" msgstr "新增檔案" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "將解壓縮下一個分卷檔" #: ulng.rsmsgnofiles msgid "No files" msgstr "沒有檔案" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "尚未選擇檔案" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "目標磁碟沒有足夠的可用空間, 仍要繼續嗎?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "目標磁碟沒有足夠的可用空間, 是否要重試?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "無法刪除檔案 %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "未實現" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "密碼:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "密碼不相同!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "請輸入密碼:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "密碼 (防火牆):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "請再次輸入密碼來驗證" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "移除【%s】(&D)" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "預先配置檔【%s】已存在。是否要覆蓋?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "你確定要重新命名/移動這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "你確定要重新命名/移動所選擇的【%s】嗎?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "請重新啟動 Double Commander 以套用變更" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "選擇: %s / %sB | 檔案: %d / %d | 資料夾: %d / %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "請僅選擇驗證碼檔案!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "請選擇下一個分卷檔位置" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "設置磁碟標籤" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "特殊資料夾" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "重新命名分頁" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "新的分頁名稱:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "目標路徑:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "選擇了太多檔案。" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl #, fuzzy msgid "URL:" msgstr "網址:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "使用者名稱:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "使用者名稱 (防火牆):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "磁碟標籤:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "請輸入磁碟大小:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "你確定要抹除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "你確定要抹除所選擇的【%s】嗎?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "計數器" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "日期" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "副檔名" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "名稱" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "不變更;大寫;小寫;首字大寫;每個單字首字大寫;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "多重命名工具" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "位置 x 的字元" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "從 x 到 y 位置的字元" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "計數器" #: ulng.rsmulrenmaskday msgid "Day" msgstr "日" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "日 (2位數)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "每週日數 (縮寫, 例: \"mon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "每週日數 (整字, 例: \"monday\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "副檔名" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "小時" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "小時 (2位數)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "分" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "分 (2位數)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "月" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "月 (2位數)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "月份名稱 (縮寫, 例: \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "月份名稱 (整字, 例: \"january\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "名稱" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "秒" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "秒 (2位數)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "年 (2位數)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "年 (4位數)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "插件" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "時間" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "圖像" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "應用程式 (*.app)|*.app|所有檔案 (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "網路" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "其他" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "系統" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "已放棄" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "正在計算驗證碼" #: ulng.rsopercalculatingchecksumin #, object-pascal-format, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "正在【%s】計算驗證碼" #: ulng.rsopercalculatingchecksumof #, object-pascal-format, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "正在計算【%s】的驗證碼" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "正在計算" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "正在計算【%s】" #: ulng.rsopercombining msgid "Joining" msgstr "正在合併" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "正在【%s】合併檔案到【%s】" #: ulng.rsopercopying msgid "Copying" msgstr "正在複製" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "正在從【%s】複製到【%s】" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "正在複製【%s】到【%s】" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "正在建立資料夾" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "正在建立資料夾【%s】" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "正在刪除" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "正在【%s】刪除" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "正在刪除【%s】" #: ulng.rsoperexecuting msgid "Executing" msgstr "正在執行" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "正在執行【%s】" #: ulng.rsoperextracting msgid "Extracting" msgstr "正在解壓縮" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "正在從【%s】解壓縮到【%s】" #: ulng.rsoperfinished msgid "Finished" msgstr "已完成" #: ulng.rsoperlisting msgid "Listing" msgstr "正在列表" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "正在列表【%s】" #: ulng.rsopermoving msgid "Moving" msgstr "正在移動" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "正在從【%s】移動到【%s】" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "正在移動【%s】到【%s】" #: ulng.rsopernotstarted msgid "Not started" msgstr "尚未開始" #: ulng.rsoperpacking msgid "Packing" msgstr "正在壓縮" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "正在從【%s】壓縮到【%s】" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "正在壓縮【%s】到【%s】" #: ulng.rsoperpaused msgid "Paused" msgstr "已暫停" #: ulng.rsoperpausing msgid "Pausing" msgstr "正在暫停" #: ulng.rsoperrunning msgid "Running" msgstr "正在執行" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "正在設置內容" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "正在【%s】設置內容" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "正在設置【%s】的內容" #: ulng.rsopersplitting msgid "Splitting" msgstr "正在分離" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "正在分離【%s】到【%s】" #: ulng.rsoperstarting msgid "Starting" msgstr "正在開始" #: ulng.rsoperstopped msgid "Stopped" msgstr "已停止" #: ulng.rsoperstopping msgid "Stopping" msgstr "正在停止" #: ulng.rsopertesting msgid "Testing" msgstr "正在測試" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "正在【%s】測試" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "正在測試【%s】" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "正在校驗驗證碼" #: ulng.rsoperverifyingchecksumin #, object-pascal-format, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "正在【%s】校驗驗證碼" #: ulng.rsoperverifyingchecksumof #, object-pascal-format, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "正在校驗【%s】的驗證碼" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "正在等待存取來源檔案" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "正在等待使用者回應" #: ulng.rsoperwiping msgid "Wiping" msgstr "正在抹除" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "正在【%s】抹除" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "正在抹除【%s】" #: ulng.rsoperworking msgid "Working" msgstr "正在處理" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "壓縮類型名稱:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "【%s】插件關聯:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "第一個;最後一個;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "輸入副檔名" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "分離視窗;最小化分離視窗;操作面板" #: ulng.rsoptfilesizefloat msgid "float" msgstr "浮動" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "快速鍵 %s 將登錄給 cm_Delete 使用,它會視這個設定的狀態而執行相反的刪除動作。" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "替 %s 加入熱鍵" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "加入快速鍵" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "無法設置快速鍵" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "變更快速鍵" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "指令" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "cm_Delete 的快速鍵 %s 已有覆蓋此設定的參數。你要變更這個參數以使用這個通用設定嗎?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "cm_Delete 的快速鍵 %s 需要變更參數來符合快速鍵 %s。你要變更它嗎?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "描述" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "替 %s 編輯熱鍵" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "修正參數" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "熱鍵" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "熱鍵" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<無>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "參數" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "設置快速鍵以刪除檔案" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "要讓這個設定利用快速鍵 %s 執行運作, 快速鍵 %s 必需分配給 cm_Delete, 但是它已經分配給 %s 使用。你要變更它嗎?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "cm_Delete 的快速鍵 %s 是序列快速鍵, 所以無法判斷要將哪個熱鍵用來分配使用。這個設定可能無法正常運作。" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "快速鍵已使用" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "快速鍵 %s 已被使用。" #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "你要將它變更給 %s 使用嗎?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "已被 %s 使用在 %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "已使用在這個指令但使用不同的參數" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "壓縮工具" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "自動更新" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "行為" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "簡要" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "顏色" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "欄位" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "設定檔" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "自訂欄位" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "常用資料夾清單" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "常用資料夾清單擴展" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "拖曳" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "磁碟清單按鈕" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "「我的最愛」分頁" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "檔案關聯設置" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "檔案關聯" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "新增" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "檔案操作" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "檔案面板" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "檔案搜尋" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "檔案檢視" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "檔案檢視擴展" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "檔案類型" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "資料夾分頁" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "資料夾分頁擴展" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "字型" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "語法高亮" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "熱鍵" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "圖示" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "忽略清單" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "按鍵" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "語言" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "佈置" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "記錄" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "雜項" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "滑鼠" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "多重命名工具" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "插件" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "快速搜尋/篩選" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "終端機" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "工具列" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "工具列擴展" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "工具列中間" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "工具" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "提示工具" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "樹形檢視選單" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "樹形檢視選單顏色" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "無;指令行;快速搜尋;快速篩選" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左鍵;右鍵;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "位於檔案清單頂端;位於資料夾後面 (若資料夾排序在檔案前);位於排序位置;位於檔案清單底部" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "插件 %s 已經分配給下列副檔名:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "停用" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "啟用 (&N)" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "啟動" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "描述" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "檔案名稱" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名稱" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "登錄對象" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "大小寫視為相異 (&S);大小寫視為相同 (&I)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "檔案 (&F);資料夾 (&R);檔案及資料夾 (&N)" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "當不在焦點時隱藏篩選面板 (&H)" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "不區分大小寫;根據區域設定 (aAbBcC);先大寫再小寫 (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "依名稱排序並優先顯示;依類似檔案排序並優先顯示;依類似檔案排序" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "依字母順序排序, 考慮重音;依自然順序排序, 考慮字母和數字" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "頂端;底部;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "分隔線 (&E);內部指令 (&R);外部指令 (&X);選單 (&U)" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "類別名稱 (&N):" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "不要改變位置;使用和插入新檔案同樣的設定;移到排序位置" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "檔案: %d, 資料夾: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "無法變更【%s】的存取權限" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "無法變更【%s】的擁有者" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "檔案" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "資料夾" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "命名管道" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "特殊區塊裝置" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "特殊字元裝置" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "符號連結" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "未知類型" #: ulng.rssearchresult msgid "Search result" msgstr "搜尋結果" #: ulng.rssearchstatus msgid "SEARCH" msgstr "搜尋" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<未命名範本>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "選擇資料夾" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "顯示 %s 的說明 (&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "全部" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "指令" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "檔案" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "檔案: %d, 資料夾: %d, 大小: %s (%s 位元組)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "無法建立目標資料夾!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "無效的檔案大小格式!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "無法分割這個檔案!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "分割數量大於 100! 是否要繼續?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "選擇資料夾:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "建立符號連結發生錯誤。" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "預設文字" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "純文字" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "天" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "小時" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "分" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "月" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "秒" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "週" #: ulng.rstimeunityear msgid "Year(s)" msgstr "年" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "比對器" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "編輯器" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "開啟比對器發生錯誤" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "開啟編輯器發生錯誤" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "開啟終端機發生錯誤" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "開啟檢視器發生錯誤" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "終端機" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "檢視器" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "請回報這個錯誤到問題追蹤系統並包含你對下面這個檔案所進行的操作描述:%s請按下 %s 繼續或 %s 放棄這個程式。" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "網路" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander 內部檢視器" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "正在編碼" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "新的大小" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "沒有找到 %s!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������������������������������doublecmd-1.1.30/language/doublecmd.zh_CN.po��������������������������������������������������������0000644�0001750�0000144�00001351373�15104114162�017663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-04-05 22:00+0800\n" "Last-Translator: iYoung <iyoung@126.com>\n" "Language-Team: Chinese <iyoung@126.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 简体中文\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "正在比较... %d%%(按下 ESC 键可取消)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "左侧: 删除%d个文件" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "右侧:删除 %d 个文件" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "找到文件:%d(相同:%d,不同:%d,仅左侧有:%d,仅右侧有:%d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "左侧到右侧:复制 %d 个文件,合计大小:%s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "右侧到左侧:复制 %d 个文件,合计大小:%s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "选择模板..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "检查可用空间(&H)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "复制属性(&Y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "复制所有者信息(&W)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "复制权限(&P)" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "复制日期/时间(&A)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "修正链接(&K)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "去除只读标志(&G)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "排除空文件夹(&X)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "使用链接指向的目标文件(&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "预留空间(&R)" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "写入时复制" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "校验(&V)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "无法完成文件时间、属性等设置时需执行的操作" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "使用文件模板" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "文件夹已存在时(&E)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "文件已存在时(&F)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "无法设置属性时" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<无模板>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "关闭(&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "复制到剪贴板" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "关于" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "构建" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "提交" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "主页:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "修订" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "取消(&C)" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "重置(&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "选择属性" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "压缩文件(&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "已压缩(&M)" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "文件夹(&D)" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "已加密(&E)" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "隐藏(&H)" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "只读(&N)" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "稀疏(&P)" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "固定" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "符号链接(&S)" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "系统(&Y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "临时(&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 属性" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "常规属性" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "位:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "组" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "其他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "所有者" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "执行" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "可读取" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "以文本形式(&X):" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "可写入" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "基准测试" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "基准测试数据大小:%d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "哈希算法" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "时间(毫秒)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "速度(MB/秒)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "计算校验码..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "任务完成后打开校验码文件" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "为每个文件分别创建 MD5/SHA1 文件(&R)" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "保存校验码文件为(&S):" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "验证校验码..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "编码" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "添加(&D)" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "连接(&O)" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "编辑(&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "连接管理器" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "连接到:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "添加到队列(&D)" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "选项(&P)" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "保存为默认选项(&V)" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "复制文件" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新队列" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "队列 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "队列 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "队列 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "队列 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "队列 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "保存说明" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "文件/文件夹注释" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "编辑注释(&D):" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "编码(&E):" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "自动比较" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "二进制模式" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "复制右侧的块" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "复制右侧的块" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "复制左侧的块" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "复制左侧的块" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "复制" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "剪切" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "删除" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "粘贴" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "选择全部(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "撤销" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "撤销" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "退出(&X)" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "查找(&F)" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "查找" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "查找下一个" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "查找下一个" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "查找上一个" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "查找上一个" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "替换(&R)" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "替换" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "第一处差异" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "第一处差异" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "跳转到指定行..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "跳转到行" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "忽略大小写" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "忽略空格" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "持续滚动" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "最后一处差异" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "最后一处差异" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "差异行" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "下一处差异" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "下一处差异" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "打开左侧..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "打开右侧..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "使用背景颜色" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "上一处差异" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "上一处差异" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "重新加载(&R)" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "重新加载" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "保存" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "保存" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "另存为..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "另存为..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "保存左侧" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "保存左侧" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "左侧另存为..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "左侧另存为..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "保存右侧" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "保存右侧" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "右侧另存为..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "右侧另存为..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "比较" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "比较" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "编码" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "编码" #: tfrmdiffer.caption msgid "Compare files" msgstr "比较文件" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左侧(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右侧(&R)" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "操作(&A)" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "编码(&C)" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "文件(&F)" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "选项(&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "添加新的快捷键到序列" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "从序列中删除上一个快捷键" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "从剩余可用按键列表中选择快捷键" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "仅限于此类控件" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "参数(每行一个)(&P)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "快捷键:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "关于" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "配置(&C)" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "配置" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "复制" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪切" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "剪切" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "删除" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "查找(&F)" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "查找" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "查找下一个" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "查找下一个" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "查找上一个" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "跳转到指定行..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "粘贴" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "粘贴" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "替换(&R)" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "替换" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "取消(&A)" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "全选" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "撤销" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "撤销" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "关闭" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "退出(&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "退出" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "新建(&N)" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "新建" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "打开(&O)" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "打开" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "重新加载" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "保存" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "另存为(&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "另存为" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "编辑器" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "帮助(&H)" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "编码(&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "打开为" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "另存为" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "文件(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "语法高亮" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "行末" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消(&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "多行模式(&M)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "区分大小写(&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "从插入处搜索(&C)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "正则表达式(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "仅选择文本(&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "整字匹配(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "选项" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "替换为(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "搜索(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "方向" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "对当前所有对象执行此操作(&A)" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "解压缩文件" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "如果与文件一起存储, 则解压缩路径名(&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "将每个文件解压到单独的子文件夹(名称采用压缩文件文件名)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "覆盖现有文件(&O)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "解压到文件夹(&D):" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "解压缩与文件掩码匹配的文件(&E)" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "加密文件的密码(&P):" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "请稍候..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "文件名:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "从:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "当临时文件可以被删除时请点击关闭!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "到面板(&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "查看全部(&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "当前操作:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "从:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "到:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "属性" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "固定" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "允许将文件作为程序执行(&E)" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "位数:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "组" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "文本:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "包含:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "创建时间:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "执行" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "执行:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "文件名" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "文件名" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路径:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "组(&G)" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "访问时间:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "修改时间:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "状态更改时间:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "八进制:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "所有者(&W)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "可读取" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "符号链接:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "类型:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "可写入" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "名称" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "数值" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "属性" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "关闭" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "终止" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "解锁" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "全部解锁" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "解锁" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "文件句柄" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "进程 ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "可执行文件路径" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "取消(&A)" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "关闭(&C)" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "关闭(&C)" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "热键配置" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "编辑(&E)" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "发送到列表框(&L)" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "取消搜索,关闭并释放内存" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "取消并关闭所有其他 <查找文件> 进程,并释放内存" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "跳转到文件(&G)" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "查找数据" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "上次搜索(&L)" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "新建搜索(&N)" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "新建搜索(清除过滤器)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "转到 <高级> 页面" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "转到 <载入/保存> 页面" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "切换到下一页(&T)" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "转到 <插件> 页面" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "切换到前一页(&P)" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "转到 <结果> 页面" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "转到 <标准> 页面" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "开始(&S)" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "查看(&V)" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "添加(&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "删除(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "载入(&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "保存(&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "保存到 <开始文件夹> " #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "如果保存到 <开始文件夹>,将在截入模板时恢复。如果您希望修复搜索到某一文件夹,请使用此选项。 " #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "使用模板" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "查找文件" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "区分大小写(&I)" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "启始日期(&D):" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "结束日期(&E):" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "最小(&I):" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "最大(&Z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "在压缩文件中搜索(&A)" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "查找文本(&T)" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "追踪符号链接(&Y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "查找不包含该文本的文件(&O)" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "不早于(&O):" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "打开的标签" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "搜索文件名的一部分(&H)" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "正则表达式(&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "替换为(&P)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "选定的文件夹和文件(&F)" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "正则表达式(&E)" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "启始时间(&T):" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "结束时间:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "使用搜索插件(&U):" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "相同的内容" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "相同的哈希值" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "相同的名称" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "查找重复文件(&P):" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "相同大小" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "十六进制" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "输入应从搜索中排除的文件夹名称,以分号 (;) 分隔" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "输入应从搜索中排除的文件名,以分号 (;) 分隔" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "输入以分号 (;) 分隔的文件名," #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "插件" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "字段" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "操作符" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "数值" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "文件夹" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "文件" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "查找数据" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "属性(&B)" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "编码(&G):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "排除子文件夹(&X)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "排除文件(&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "文件掩码(&F)" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "启动文件夹(&D)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "搜索子文件夹(&B):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "之前的搜索(&P):" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "操作(&A)" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "取消并关闭其他搜索进程,并释放内存" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "在新标签中打开" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "选项" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "从列表中移除" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "结果(&R)" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "显示所有找到的项目" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "在编辑器中打开" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "在查看器中显示" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "视图(&V)" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "高级" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "载入/保存" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "结果" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "标准" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "查找(&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "查找" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "向后(&B)" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "区分大小写(&A)" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "正则表达式(&R)" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "十六进制" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "域名:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "密码:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "用户名:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "匿名连接" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "以用户身份连接:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "创建硬链接" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "链接将指向的目标(&D)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "链接名称(&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "全部导入!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "导入所选" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "请选择希望导入的项目" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "单击子菜单时, 将选择整个菜单" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "按住 CTRL 键并点击条目可进行多项选择" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "" #: tfrmlinker.caption msgid "Linker" msgstr "链接程序" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "保存到..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "项目" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "文件名(&F)" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "下移(&W)" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "下移" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "移除(&R)" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "删除" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "上移(&U)" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "上移" #: tfrmmain.actabout.caption msgid "&About" msgstr "关于(&A)" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "按索引激活标签" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "添加文件名到命令行" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "新建搜索实例..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "添加路径和文件名到命令行" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "复制路径到命令行" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "添加插件" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "基准测试(&B)" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "列表视图" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "列表视图" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "计算占用空间(&O)..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "更改文件夹" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "切换到主文件夹" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "切换到上层文件夹" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "切换到根文件夹" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "计算校验码(&S)..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "验证校验码(&V)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "清除日志文件" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "清除日志窗口" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "关闭所有标签(&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "关闭重复标签" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "关闭标签(&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "下一命令行" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "将命令行设置为历史记录中的下一个命令" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "前一命令行" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "将命令行设置为历史记录中的前一个命令" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "详细信息" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "详细信息列视图" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "比较内容(&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "比较文件夹" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "比较文件夹" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "压缩程序配置" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "常用文件夹列表配置" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "收藏夹标签配置" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "文件夹标签配置" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "热键配置" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "插件配置" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "保存位置" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "保存设置" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "搜索配置" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "工具栏..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "工具提示配置" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "树状视图菜单配置" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "树状视图菜单颜色配置" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "显示右键菜单" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "复制" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "将所有标签复制到对面窗口" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "复制所有显示的列(&C)" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "复制包含完整路径的文件名(&P)" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "复制文件名到剪贴板(&F)" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "使用网络路径复制名称" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "复制文件时不需要确认" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "复制所选文件的不含路径结束分隔符的完整路径" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "复制所选文件的完整路径" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "复制到同一面板" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "复制(&C)" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "显示文件夹占用空间(&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "剪切(&T)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "显示命令参数" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "取消并关闭所有搜索并释放内存" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "文件夹历史记录" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "常用文件夹列表(&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "执行内部命令(&I)..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "选择任何命令并执行" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "编辑" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "编辑注释(&C)..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "编辑新文件" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "编辑文件列表上方的路径字段" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "交换面板(&P)" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "执行脚本" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "退出(&X)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "解压缩文件(&E)..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "文件关联配置(&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "合并文件..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "显示文件属性(&F)" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "分割文件(&I)..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "平面视图(&F)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "平面视图(&F),仅被选中时" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "聚集到命令行" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "交换焦点" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "在左侧和右侧文件列表之间切换" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "聚集到树状视图" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "切换当前文件列表和树状视图(如果已启用)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "将光标放在第一个文件夹或文件上" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "将光标置于列表中的第一个文件" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "将光标放在最后一个文件夹或文件上" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "将光标置于列表中的最后一个文件" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "将光标放在下一个文件夹或文件上" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "将光标放在上一个文件夹或文件上" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "创建硬链接(&H)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "内容(&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "水平面板模式(&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "热键列表(&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "左侧面板列表视图" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "左侧面板详细信息视图" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左侧 = 右侧(&=)" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "左侧面板平面视图(&F)" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "打开左侧驱动器列表" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "左侧面板反向排序" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "左侧面板按属性排序(&A)" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "左侧面板按日期排序(&D)" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "左侧面板按扩展名排序(&E)" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "左侧面板按名称排序(&N)" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "左侧面板按大小排序(&S)" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "左侧面板缩略图视图" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "从收藏夹标签加载标签" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "载入列表" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "从指定的文本文件加载文件/文件夹列表" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "从剪贴板加载选择项(&B)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "从文件加载选择(&L)" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "从文件加载标签(&L)" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "创建文件夹(&D)" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "选择所有扩展名相同的文件" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "选择所有文件名相同的文件" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "选择所有文件名和扩展名相同文件" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "选择所有路径相同的文件" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "反向选择(&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "选择全部(&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "取消选择一组文件(&U)" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "选择一组文件(&G)" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "全部不选(&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "最小化窗口" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "将当前选项卡向左移动" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "将当前选项卡向右移动" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "批量重命名工具(&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "网络连接(&C)..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "断开网络连接(&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "网络快速链接(&Q)..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "新建标签(&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "加载列表中的下一个收藏标签" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "切换到下一标签(&T)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "打开" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "尝试打开压缩文件" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "打开工具栏文件" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "在新标签打开文件夹(&F)" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "按索引打开驱动器" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "打开虚拟文件系统 (VFS) 列表(&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "操作查看器(&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "选项(&O)..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "压缩文件(&P)..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "设置分隔符位置" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "粘贴(&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "加载列表中的上一个收藏标签" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "切换到上一标签(&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "快速过滤器" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "快速搜索" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "快速查看面板(&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "刷新(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "重新加载上次加载的收藏夹标签" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "移动" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "移动/重命名文件而不要求确认" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "重命名" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "重命名标签(&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "重新保存上次载入的收藏夹标签" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "恢复选择(&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "反向排序(&V)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "右侧面板列表视图" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "右侧面板详细信息视图" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "右侧 = 左侧(&=)" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "右侧面板平面视图(&F)" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "打开右侧驱动器列表" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "右侧面板反向排序" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "右侧面板按属性排序(&A)" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "右侧面板按日期排序(&D)" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "右侧面板按扩展名排序(&E)" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "右侧面板按名称排序(&N)" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "右侧面板按大小排序(&S)" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "右侧面板缩略图视图" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "运行终端(&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "将当前标签保存到新的收藏夹标签" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "保存选择(&V)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "保存选择到文件(&E)..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "保存标签到文件(&S)" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "搜索(&S)" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "将所有标签设置为在新标签中打开文件夹的锁定状态" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "将所有标签设置为正常状态" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "将所有标签设置为锁定状态" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "将所有标签设置为允许更改文件夹的锁定状态" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "更改属性(&A)..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "锁定,并在新标签中打开文件夹(&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "正常(&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "锁定(&L)" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "锁定,但允许更改文件夹(&D)" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "打开" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "使用系统关联打开" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "显示按钮菜单" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "显示命令行历史记录" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "菜单" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "显示隐藏/系统文件(&H)" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "按属性排序(&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "按日期排序(&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "按扩展名排序(&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "按文件名排序(&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "按大小排序(&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "打开驱动器列表" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "启用/禁用忽略列表文件以不显示文件名" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "创建符号链接(&L)..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "同步导航" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "两个面板中的同步目录更改" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "同步文件夹(&C)..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "目标 = 来源(&=)" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "测试压缩文件(&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "缩略图" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "缩略图视图" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "切换全屏模式控制台" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "将光标下文件夹传送到左侧窗口" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "将光标下文件夹传送到右侧窗口" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "树状视图面板(&T)" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "根据参数进行排序" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "取消选择所有扩展名相同的文件" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "取消选择所有文件名相同的文件" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "取消选择所有扩展名和文件名相同的文件" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "取消选择所有路径相同的文件" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "查看" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "显示活动视图的访问路径历史记录" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "跳转到历史记录中的下一个条目" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "跳转到历史记录中的前一个条目" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "查看日志文件" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "查看当前搜索实例" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "访问 Double Commander 网站" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "擦除" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "使用常用文件名列表和参数" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "退出" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "文件夹" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "终端" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用文件夹列表" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "在左侧面板中显示右侧面板的当前文件夹" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "转到用户主文件夹" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "转到根文件夹" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr "" #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "转到父文件夹" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用文件夹列表" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "在右侧面板中显示左侧面板当前文件夹" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "路径" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "复制..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "创建链接..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "清除" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隐藏" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "选择全部" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移动..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "创建符号链接" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "标签选项" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "退出(&X)" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "还原" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "开始" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "取消" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "命令(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "配置(&O)" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "收藏夹(&A)" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "文件(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "标记(&M)" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "网络(&N)" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "显示(&S)" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "标签选项(&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "标签(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "剪切" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "编辑" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "粘贴" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "取消" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "选择内部命令" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "传统排序" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "传统排序" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "默认选择所有类别" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "选择:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "类别(&C):" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "命令名称(&N):" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "过滤器(&F):" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "提示:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "热键:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "类别" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "帮助" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "提示" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "热键" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "添加(&A)" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "帮助(&H)" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "定义(&D)..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "区分大小写" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "忽略重音和连字" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "属性(&B)" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "输入掩码:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "或选择预定义的选择类型(&R):" #: tfrmmkdir.caption msgid "Create new directory" msgstr "创建新文件夹" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "扩展语法(&E)" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "输入新的文件夹名(&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "" #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "新尺寸" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "高度:" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG 文件压缩品质" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "宽度:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高度" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "宽度" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "扩展名" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "文件名" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "清除" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "清除" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "关闭(&C)" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "配置" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "计数器" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "计数器" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "日期" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "日期" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "删除" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "下拉预设列表" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "编辑名称..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "编辑当前的新名称..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "扩展名" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "扩展名" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "编辑(&E)" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "调用相对路径菜单" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "加载上次预设" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "从文件加载名称..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "按名称或索引加载预设" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "加载预设 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "加载预设 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "加载预设 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "加载预设 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "加载预设 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "加载预设 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "加载预设 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "加载预设 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "加载预设 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "文件名" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "文件名" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "插件" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "插件" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "重命名(&R)" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "重命名" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "全部重置(A)" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "保存(S)" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "另存为(A)..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "显示预设菜单" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "排序(S)" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "时间" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "时间" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "查看重命名日志文件" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "批量重命名" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "区分大小写" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "记录结果(&L)" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "附加" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "正则表达式(&R)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "使用替换(&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "计数器" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "查找与替换" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "掩码" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "预设" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "扩展名(&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "查找(&F)..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "间隔(&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "文件名(&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "替换(&P)..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "起始编号(&T)" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "宽度(&W)" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "操作" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "编辑(&E)" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "旧文件名" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "新文件名" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "文件路径" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "在关闭编辑器后,点击 <确定> 按钮以加载更改后的名称!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "选择应用程序" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "自定义命令" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "保存关联" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "将选定的应用程序设置为默认操作" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "要打开的文件类型:%s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "多个文件名" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "多个 URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "单一文件名" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "单一 URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "应用(&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "帮助(&H)" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "选项" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "请选择其中一个子页面, 此页面不包含任何设置。" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "添加(&D)" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "应用(&P)" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "复制" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "删除(&E)" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "其他(&E)..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "重命名(&R)" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "与 cm_OpenArchive 一起使用的 ID 通过检测其内容而不是通过文件扩展名来识别存档:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "选项:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "格式解析模式:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "已启用(&N)" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "调试模式(&B)" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "显示控制台输出(&H)" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "使用不含扩展名的压缩文件名称作为列表" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix 文件属性(&X)" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix 路径分隔符 \"/\"(&U)" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows 文件属性(&F)" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows 路径分隔符 \"\\\"(&M)" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "添加(&I):" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "压缩程序(&H):" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "删除(&L):" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "描述(&S):" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "扩展名(&X):" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "解压缩(&T):" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "忽略路径解压缩(&W):" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID 位置(&S):" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID 查找范围(&K):" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "列表(&L):" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "压缩文件(&V):" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "列表完成(可选)(&F):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "列表格式(&M):" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "列表开始(可选)(&G):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "密码查询字符串(&Q):" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "创建自解压压缩文件(&G):" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "测试(&T):" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "自动配置(&U)" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "全部禁用" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "放弃修改" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "全部启用" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "导出..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "导入..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "压缩文件排序" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "附加" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "常规" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "当大小、日期或属性修改时(&S)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "以下路径及其子文件夹(&P):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "当文件创建、删除或重命名时刷新(&C)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "程序在后台运行时(&B)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "禁用自动刷新" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "刷新文件列表" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "总是显示托盘图标(&W)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "自动隐藏未安装的设备(&H)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "最小化到系统托盘图标(&V)" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "一次只允许一个 DC 副本" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "在此处您可以输入一个或多个驱动器或挂载点,用 \";\" 分隔。" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "驱动黑名单(&B)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "列宽" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "显示文件扩展名" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "对齐(用制表符)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "直接位于文件名后" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "自动" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "固定列数" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "固定列宽" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "使用渐变指示器(&G)" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "二进制模式" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "文本:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "背景色 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "指示器背面颜色(&D):" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "指示器前端颜色(&I):" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "指标阈值颜色(&T)" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "修改时间:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "修改时间:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "成功:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "按值对齐列标题(&L)" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "按列宽裁剪文本(&T)" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "文本显示不全时,扩展单元格宽度(&E)" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "水平行(&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "垂直列(&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "自动填充列(&U)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "显示网格" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "自动调整列宽" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "自动宽度的列(&Z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "应用(&P)" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "命令行历史记录(&M)" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "文件夹历史记录(&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "文件掩码历史记录(&F)" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "文件夹标签" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "保存配置(&V)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "搜索/替换历史记录(&H)" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "主窗口状态" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "文件夹" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "配置文件位置" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "退出时保存" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "左侧文件夹树排序设置" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "进入配置页面时树状视图状态" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "命令行设置" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "高亮设置" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "图标主题:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "缩略图缓存:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "程序文件夹(便携版)(&R)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "用户主文件夹(&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "应用修改到全部列" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "" #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "转到设置默认值" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "新建" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "下一个" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "上一个" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "重命名" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "重置为默认值" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "另存为" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "保存" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允许覆盖颜色" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "点击更改某些内容时,将更改全部列" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "常规" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "光标边框" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "使用窗体光标" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "使用非活动选择区域颜色" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "使用反向选择" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "为此视图使用自定义字体和颜色" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "背景色:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景色 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "列视图(&C)" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[当前列名称]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "光标颜色:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "光标文本:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "(&F)文件系统:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "字体:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "大小:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "文本颜色:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "反色光标颜色:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非活动标记颜色:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "标记颜色:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "以下为预览效果。您可以移动光标并选择文件以立即获得各种设置的实际外观。" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "列设置:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "添加列" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "比较后窗体面板位置:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "添加活动窗体文件夹(&A)" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "添加活动和非活动窗体文件夹(&D)" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "添加将浏览到的文件夹(&W)" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "添加所选条目的副本" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "添加当前选定的或活动窗体的当前文件夹(&S)" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "添加分隔符" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "添加子菜单" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "添加将输入的文件夹" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "全部折叠" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "折叠项目" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "剪切选定项" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "全部删除!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "删除所选项目" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "删除子菜单及其所有元素" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "只删除子菜单,但保留其元素" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "展开项目" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "聚集到文件夹树窗口" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "转到第一项" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "转到最后一项" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "转到下一项" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "转到前一项" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "插入活动窗体的文件夹(&A)" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "插入活动及非活动窗体的文件夹" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "添加将浏览到的文件夹(&W)" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "插入所选条目的副本" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "插入当前选定的或活动窗体的当前文件夹(&S)" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "插入分隔符" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "插入子菜单" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "插入将输入的文件夹" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "移至下一个" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "移至上一个" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "打开所有分支" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "粘贴剪切的内容" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "在路径中搜索并替换" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "同时在路径和目标中搜索并替换" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "在目标路径中搜索并替换(&T)" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "调整路径" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "调整目标路径" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "添加(&D)..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "备份(&K)..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "删除(&L)..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "导出(&X)..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "导入(&R)..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "插入(&I)..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "杂项(&M)..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "某些功能需选择适当的路径" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "某些功能需选择适当的目标" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "排序(&S)..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "添加文件夹时,同时添加目标(&W)" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "总是展开树状列表(&Y)" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "仅显示有效的环境变量(&V)" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "弹出菜单中同时显示路径" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "名称,a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "名称,a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "常用文件夹列表(可通过拖放重新排序)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "其他选项" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "名称:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "路径:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "目标(&T):" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...仅选择当前级别的项目(&V)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "扫描所有常用文件夹路径以验证其是否实际存在(&H)" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "扫描所有常用文件夹路径及目标以验证其是否实际存在(&S)" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "到常用文件夹列表文件 (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "到 TC 的 “wincmd.ini” 文件(保留现有文件)(&K)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(删除现有文件)(&E)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "转到 TC 配置相关信息(&C)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "转到 TC 配置相关信息(&C)" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "常用目录测试菜单" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "从常用文件夹列表文件 (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "从 TC 的 \"&wincmd.ini\" 文件" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "导航(&N)..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "还原常用文件夹列表备份(&R)" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "保存常用文件夹列表备份(&S)" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "搜索并替换(&R)..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...一切,从 A 到 Z !" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...仅限单个项目组(&G)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...所选子菜单的内容,不含子项目(&C)" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...所选子菜单的内容和所有子项目(&A)" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "测试结果菜单(&G)" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "调整路径(&P)" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "调整目标路径(&T)" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "从主面板添加" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "将当前设置应用到常用文件夹列表" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "源" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "目标" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "路径" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "添加路径时设置路径的方法:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgid "Do this for paths of:" msgstr "对以下路径执行此操作:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "相对路径:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "从所有支持的格式中选择,每次均询问使用何种格式" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "保存 Unicode 文本时,请将其保存为 UTF8 格式(否则为 UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "拖放文本时,自动生成文件名(否则会提示用户)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "拖放完成后显示确认对话框(&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "将文本拖放到面板中时:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "将最需要的格式放在列表顶部(使用拖放):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(如果最需要的格式不存在,将会选取第二种等格式)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(将不会与某些源程序一起工作,因此有问题时请尝试取消选勾选)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "显示文件系统(&F)" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "显示可用空间(&E)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "显示卷标(&L)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "驱动器列表" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "自动缩进" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "当使用 <Enter> 键创建新行时,允许缩进插入符号,前导行的前导空白量相同" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "右边距:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "插入符号越过行尾" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "允许插入符号进入行尾位置以外的空白区域" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "显示特殊字符" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "显示空格和表格的特殊字符" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "智能制表符" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "使用 <Tab> 键时,插入符号将转到上一行的下一个非空格字符" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "制表键块缩进" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "当激活 <Tab> 和 <Shift+Tab> 键充当块缩进时,选择文本时取消缩进" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "使用空格代替制表符" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "将制表符转换为指定数量的空格字符(进入时)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "删除尾随空格" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "自动删除尾随空格(仅适用于已编辑的行)" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "请注意:<智能制表符> 选项优先于要执行的制表" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "内部编辑器选项" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "制表符宽度:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "请注意:<智能制表符> 选项优先于要执行的制表" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "背景(&K)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "背景(&K)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "重置" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "保存" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "元素属性" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "前景(&R)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "前景(&R)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "文本标记(&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "使用(并编辑)全局方案设置(&G)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "使用本地方案设置(&L)" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "粗体(&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "反转(&V)" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "关(&F)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "开(&N)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "斜体(&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "反转(&V)" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "关(&F)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "开(&N)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "删除线(&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "反转(&V)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "关(&F)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "开(&N)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "下划线(&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "反转(&V)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "关(&F)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "开(&N)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "添加..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "删除..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "导入/导出" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "插入..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "重命名" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "排序..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "无" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "总是展开文件夹树" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "左侧" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "右侧" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "收藏夹标签列表(可通过拖放重新排序)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "其他选项" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "还原所选条目的位置:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "现有标签可保留:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "保存文件夹历史记录:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "将保存在左侧的标签恢复到:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "将保存在右侧的标签恢复到:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "分隔符" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "添加分隔符" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "子菜单" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "添加子菜单" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "全部折叠" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...仅选择当前级别的项目" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "剪切" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "删除全部!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "子菜单及其所有元素" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "仅子菜单,保留元素" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "选定的项目" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "删除选定的项目" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "将选择导出到传统的 .tab 文件" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "收藏夹测试菜单" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "根据默认设置导入传统的 .tab 文件" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "在选定位置导入传统的 .tab 文件" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "在选定位置导入传统的 .tab 文件" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "在子菜单选定位置导入传统的 .tab 文件" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "插入分隔符" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "插入子菜单" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "打开所有分支" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "粘贴" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "重命名" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...全部,从 A 到 Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...仅限单个项目组" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "仅对单个项目组进行排序" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...所选子菜单内容,不含子项" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...所选子菜单内容和所有子项" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "测试结果菜单" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "添加" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "添加" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "添加(&D)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "克隆(&L)" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "选择内部命令" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "下移(&D)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "编辑(&T)" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "插入" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "插入(&I)" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "移除(&V)" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "移除(&M)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "移除(&R)" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "重命名(&E)" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "变量提醒助手" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "上移(&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "命令的起始路径。切勿引用此字符串。" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "操作名称。它永远不会传递给系统,它只是由您选择并供您的助记名称" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "传递给命令的参数。带空格的长文件名应该在两端使用双引号(手动输入)。" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "要执行的命令。切勿引用此字符串。" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "动作描述" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "操作" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "扩展名" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "可通过拖放进行排序" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "文件类型" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "图标" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "操作可通过拖放进行排序" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "扩展名可通过拖放进行排序" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "文件类型可通过拖放进行排序" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "动作名称(&N):" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "命令:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "参数(&S):" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "开始路径(&H):" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "自定义..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "自定义" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "编辑" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "编辑器中编辑" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "编辑器..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "从命令行获得输出" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "在内部编辑器中打开" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "在内部查看器中打开" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "打开" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "打开方式..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "在终端运行" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "查看" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "在查看器中打开" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "查看方式..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "点击我更改图标!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "将当前设置应用于所有当前配置的文件名和路径" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "通过系统外壳执行" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "扩展右键菜单" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "文件关联配置" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "尚未包括在内时,可添加选择到文件关联" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "访问文件关联时,如果尚未包含在已配置的文件类型中,则提供添加当前所选文件的功能" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "通过终端执行并关闭" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "通过终端执行并保持打开状态" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "命令" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "图标" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "起始路径" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "扩展选项项目:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "路径" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "为图标,命令,和起始路径添加元素时设置路径的方法:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgid "Do this for files and path for:" msgstr "对文件和路径执行此操作" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "相对路径:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "显示确认窗口:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "复制操作(&Y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "删除操作(&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "删除文件到回收站(&T)(按下 Shift 键切换此设置)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "删除回收站操作(&E)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "移除只读标志(&R)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "移动操作(&M)" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "处理文件/文件夹的注释(&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "重命名时仅选择文件名(不包含扩展名)(&F)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "在复制/移动对话框显示标签选择面板(&W)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "忽略文件操作错误,并记录到日志窗口(&K)" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "测试存档操作" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "验证校验码操作" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "执行操作" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "用户界面" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "文件操作缓冲区大小(单位:KB)(&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "哈希计算缓冲区大小(单位:KB)(&H):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "初始操作进度显示在(&I)" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "文件重复时自动重命名样式:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "擦除次数(&N):" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "重置为 DC 默认值" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允许叠加着色" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "使用窗体光标(&F)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "使用非活动选择区域颜色" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "使用反向选择(&S)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "光标边框" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "背景(&K):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "背景 2(&R):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "光标颜色(&U):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "光标文本(&X):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "非活动光标颜色:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非活动标记颜色:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "非活动面板的亮度级别(&B):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "标记颜色(&M):" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "文本颜色:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "以下为预览效果。您可以移动光标、选择文件以立即获得各种设置的实际外观。" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "文本颜色(&E):" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "启动文件搜索时,清除文件掩码过滤器" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "搜索文件名的一部分(&S)" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "在 <查找文件> 中显示菜单栏" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "搜索文件中的文本" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "文件搜索" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "<新建搜索> 按钮的当前过滤器:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "默认搜索模板:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "使用内存映像搜索文件中的文本(&X)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "使用流搜索文件中的文本(&U)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "默认(&F)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "正在格式化" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "使用的个性化缩写:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "正在排序" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "字节(&B):" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "区分大小写(&E):" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "格式错误" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "日期时间格式(&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "文件大小格式(&Z):" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "页脚格式(&F):" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "吉字节(&G):" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "头部格式(&H):" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "千字节(&K):" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "兆字节(&Y):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "插入新文件(&I):" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "操作大小格式(&P):" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "文件夹排序(&R):" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "排序方法(&S):" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "太字节(&T):" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "移动更新的文件(&M):" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "添加(&A)" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "帮助(&H)" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "双击文件视图的空白区域时,启用变更到父文件夹(&P)" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "标签激活前不要加载文件列表(&N)" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "文件夹名前后显示方括号" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "高亮显示新建和更新的文件(&G)" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "双击文件名时启用就地重命名" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "在单独的线程中加载文件列表" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "显示文件列表后再加载图标(&T)" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "显示隐藏/系统文件(&Y)" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "使用空格键选择文件时, 自动移动到下一文件(相当于插入键)(&W)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "标记文件时使用 Windows 样式过滤器(\"*.*\" 同时选择没有扩展名的文件等。)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "每次在掩码输入对话框中使用独立的属性过滤器" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "正在标记/取消标记条目" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "要使用的默认属性掩码值:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "添加(&D)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "应用(&P)" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "删除(&E)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "模板..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "文件类型颜色(拖动可排序)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "分类属性(&T):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "类别颜色(&L):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "类别掩码(&M):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "类别名称(&N):" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "字体" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "添加热键(&H)" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "复制" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "删除" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "删除热键(&D)" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "编辑热键(&E)" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "下一类别" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "弹出文件关联菜单" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "上一类别" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "重命名" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "还原 DC 默认值" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "立即保存" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "按命令名称排序" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "按热键排序(分组)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "按热键排序(每行一个)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "过滤器(&F)" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "类别(&A):" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "命令(&M):" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "快捷键文件(&S):" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "排序(&R):" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "类别" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "命令" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "排序" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "命令" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "热键" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "描述" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "热键" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "参数" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "控件" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "对于以下路径及其子文件夹(&P):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "显示菜单中操作的图标(&M)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "在按钮上显示图标" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "显示叠加图标,比如链接(&V)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "淡化隐藏文件(较慢)(&D)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "禁用特殊图标" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "图标大小(&S)" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "图标主题" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "显示图标" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "在文件名左侧显示图标" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "磁盘面板:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "文件面板:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "全部(&A)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "所有关联 + EXE/LNK(慢)(&E)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "无图标(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "仅标准图标(&S)" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "添加选定的文件名(&D)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "添加选定的带有完整路径的文件名(&F)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "某些功能选择适当的路径" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "忽略(不显示)以下文件和文件夹(&I):" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "保存在(&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "左、右箭头更改文件夹(类似 Lynx 运动)(&F)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "键盘输入" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+字母(&E):" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+字母(&T):" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "字母(&L):" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "扁平按钮(&F)" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "扁平界面(&N)" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "在驱动器标签上显示可用空间指示器(&E)" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "显示日志窗口(&G)" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "在后台显示操作面板" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "在菜单栏中显示常见进度" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "显示命令行(&I)" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "显示当前文件夹(&Y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "显示驱动器栏(&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "显示可用空间标签(&P)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "显示驱动器列表按钮(&T)" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "显示功能键按钮(&K)" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "显示主菜单(&M)" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "显示工具栏(&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "显示简短的可用空间标签" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "显示状态栏(&S)" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "显示标签标题(&H)" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "显示文件夹标签(&W)" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "显示终端窗口(&R)" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "显示两个驱动按钮栏" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "显示中间工具栏" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " 屏幕布局 " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "某些功能选择可适当的路径" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "查看日志文件内容" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "日志文件名中包含日期" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "压缩/解压缩(&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "外部命令行执行" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "复制/移动/创建链接或符号链接(&Y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "创建/删除文件夹(&T)" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "记录错误(&E)" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "创建日志文件(&R):" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "最大日志文件数" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "记录信息消息(&I)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "启动/关机" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "记录成功的操作(&S)" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "文件系统插件(&F)" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "文件操作日志文件" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "记录操作" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "操作状态" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr "" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当的路径" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当的路径" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当的路径" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "删除不再存在的文件的缩略图(&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "查看配置文件内容" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "创建新文件的编码:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "更换驱动器时,总是转到根文件夹(&G)" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "在主窗口标题栏中显示当前目录(&C)" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "显示启动画面(&s)" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "显示所有警告信息(仅含 <确定> 按钮)(&W)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "在缓存中保存缩略图(&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "缩略图" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "文件注释 (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "向 TC 导出/导入:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "默认单字节文本编码" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "默认编码:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "配置文件:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC 可执行文件:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "工具栏输出路径:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "像素" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "缩略图大小(&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "用鼠标选择(&S)" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "文本光标不再跟随鼠标光标" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "通过点击图标(&K)" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "打开方式..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "滚动" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "选择" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "模式(&M):" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "双击" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "逐行(&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "光标逐行移动(&W)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "逐页(&P)" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "单击(打开文件和文件夹)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "单击(打开文件夹,双击打开文件)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "查看日志文件内容" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "每天用单独的目录" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "带有完整路径的日志文件名" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "在顶部显示菜单栏 " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "重命名日志" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "替换无效的文件名字符(&B)" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "追加到同一个重命名日志文件中" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "每个预设" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "退出并修改预设" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "启动时预设" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "添加(&D)" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "配置(&F)" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "启用(&N)" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "移除(&R)" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "调整(&T)" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "描述" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "搜索插件允许使用替代搜索算法或外部工具(如:\"locate\" 等)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "将当前设置应用于所有当前配置的插件" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "添加新插件时,自动进入调整窗口" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "配置:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "要使用的 Lua 库文件:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "相对路径:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "添加新插件时的插件文件名样式:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "压缩程序插件用于处理压缩文件(&E)" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "内容插件可以显示文件扩展信息,例如:mp3 标签或图片属性,或者在搜索和重命名工具中使用" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "文件系统插件允许访问操作系统或 Palm/PocketPC 等外部设备中无法访问的磁盘。" #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "查看器插件允许查看图片、电子表格、数据库等 (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "活动" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "插件" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "适用于" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "文件名" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "开始(名称必须以输入第一个字符开头)(&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "结尾(匹配句点号的前一字母)(&D)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "选项" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "精确名称匹配" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "搜索大小写" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "搜索项目" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "解锁标签时保留重新命名的名称" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "点击标签后激活目标面板(&P)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "仅有一个标签时也显示标签标题(&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "程序关闭时关闭重复标签" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "关闭所有标签时需确认(&F)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "关闭锁定的标签时需确认" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "标签标题长度限制(&L):" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "锁定的标签前显示星号 *(&W)" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "多行标签(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up 前台打开新标签" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "在当前标签旁打开新标签" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "尽可能重复使用现有标签" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "显示标签关闭按钮(&B)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "始终在标签标题中显示驱动器符" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "文件夹标签标题" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "字符" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "双击标签时执行的操作:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "标签位置(&B):" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "无" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "左侧" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "右侧" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "重新保存后转到收藏夹标签配置 " #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "保存新标签后转到收藏夹标签配置" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "启用收藏夹标签扩展选项(恢复时选择目标窗口等)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "默认扩展设置,用于保存新的收藏夹标签:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "文件夹标签标题扩展设置" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "恢复标签时,需保留的现有标签:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "保存在左侧的标签将恢复为:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "保存在右侧的标签将恢复为:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "保留收藏夹标签的文件夹历史记录:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "新的收藏夹标签保存在菜单中的默认位置:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{命令} 通常应该在此出现,以反映在终端中运行的命令" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{命令} 通常应该在此出现,以反映在终端中运行的命令" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "仅在终端运行的命令:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "在终端中运行后关闭的命令:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "在终端中运行并保持打开的命令:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "命令:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "参数:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "命令:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "参数:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "命令:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "参数:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "克隆按钮(&L)" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "编辑热键(&K)" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "插入新的按钮(&I)" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "选择" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr "" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "其他..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "移除热键(&Y)" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "建议" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "包含 DC 根据按钮类型、命令和参数建议的工具提示" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "扁平按钮" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "使用命令报告错误" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "显示提示(&W)" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "输入命令参数,每个命令参数单独一行。按 F1 查看参数帮助。" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "外观" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "工具栏大小(&B):" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "命令(&D):" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "参数(&S):" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "帮助" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "热键:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "图标(&N):" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "图标大小(&Z):" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "命令(&M):" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "参数(&P):" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "开始路径(&S)" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "风格" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "工具提示(&T):" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "添加带有所有 DC 命令的工具栏" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "用于外部命令" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "用于内部命令" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "用于分隔符" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "用于子工具栏" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "备份..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "导出..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "当前工具栏..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "到工具栏文件 (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "到 TC .BAR 文件(保留现有文件)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "到 TC .BAR 文件(删除现有文件)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(保留现有文件)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(删除现有文件)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "顶部工具栏..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "保存工具栏备份" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "到工具栏文件 (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "到 TC .BAR 文件(保留现有文件)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "到 TC .BAR 文件(删除现有文件)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(保留现有文件)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "到 TC 的 \"wincmd.ini\" 文件(删除现有文件)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "作为最后的元素" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "导入..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "恢复工具栏备份" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "从工具栏文件 (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "从单个 TC .BAR 文件" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "从 TC 的 \"wincmd.ini\" 文件" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "添加到当前工具栏" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "添加新的工具栏到当前工具栏" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "添加新的工具栏到顶部工具栏" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "添加到顶部工具栏" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "替换顶部工具栏" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "搜索并替换..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "在所有上述中..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "在所有命令中..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "在所有图标名称中..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "在所有参数中..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "在所有的开始路径..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "在当前选择之后" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "作为第一个元素" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "作为最后一个元素" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "在当前选择之前" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "分隔线" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "空间" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "按钮类型" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "将当前设置应用于所有配置的文件名和路径" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "命令" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "图标" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "起始路径" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "路径" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "对文件和路径执行此操作:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "相对路径:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "为图标,命令,和起始路径添加元素时设置路径的方法:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当的路径" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "程序执行后保持终端窗口打开(&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "在终端执行(&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "使用外部程序(&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "其他参数(&D)" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "程序执行路径(&P)" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "添加(&D)" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "应用(&P)" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "复制(&Y)" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "删除" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "模板..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "重命名(&R)" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "其他(&E)..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "所选文件类型的工具提示配置:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "有关工具提示的常规选项:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "在文件面板中显示文件提示(&S)" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "分类提示(&H):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "类别掩码(&M):" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "工具提示隐藏延时:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "工具提示显示模式:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "文件类型(&F):" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "放弃修改" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "导出..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "导入..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "工具提示文件类型排序" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "双击文件面板顶部的工具栏" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "使用菜单和内部命令" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "双击文件夹树选择并退出" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "使用菜单和内部命令" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "双击标签(如果已配置)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "使用键盘快捷键时,它将退出并返回当前选择的窗口" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "在文件夹树中单击鼠标选择并退出" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "将其用于命令行历史记录" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "将其用于文件夹历史记录" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "将其用于查看历史记录(访问活动视图的路径)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "选择行为:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "树状视图菜单相关选项:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "何处使用树状视图菜单:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*注意:关于区分大小写、忽略重音等选项,会根据使用情况和会话中的每个环境单独保存和恢复。" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "使用常用文件夹列表:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "使用收藏夹标签:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "使用历史记录:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "使用和显示选择项目的键盘快捷键" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "字体" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "布局和颜色选项:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "背景颜色:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "光标颜色:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "找到文本的颜色:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "光标下的找到的文本:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "普通文本颜色:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "光标下的普通文本:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "树状视图菜单预览:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "辅助文字颜色:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "光标下的辅助文本:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "快捷键颜色:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "光标下的快捷键:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "不可选择文本颜色:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "光标下的不可选文本:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "更改左侧的颜色,您会在此处见到树状视图菜单类似此样本的预览效果。" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "书籍查看器中的列数" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "配置(&F)" #: tfrmpackdlg.caption msgid "Pack files" msgstr "压缩文件" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "为选择的每个文件/文件夹创建单独的压缩文件(&R)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "创建自解压文件(&X)" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "加密(&Y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "移动到文件包(&O)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "多卷压缩(&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "首先加入 TAR 压缩文件" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "同时压缩路径名(只能递归)(&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "压缩到文件:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "压缩程序" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "全部解压缩并执行(&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解压缩并执行(&U)" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "压缩文件属性" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "属性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "压缩率:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日期:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "模式:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "原始大小:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "文件:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "压缩后大小:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "压缩程序:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "时间:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "打印配置" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "边距(毫米)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "底部(&B)" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "左侧(&L)" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "(&R)右侧" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "(&T)顶部" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "关闭过滤器面板" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "输入要搜索或过滤的文本" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "区分大小写" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "文件夹" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "个文件" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "匹配开始" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "匹配结束" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "过滤器" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "在搜索或筛选之间切换" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "较多规则(&M)" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "较少规则(&E)" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "使用内容插件,并结合使用(&C):" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "插件" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "字段" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "操作符" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "值" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "与(全部匹配)(&A)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "或(任意匹配)(&O)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "应用(&A)" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "取消(&C)" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "模板..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "模板..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "选择重复文件" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "不选择每个组中的至少一个文件(&L):" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "按名称/扩展名删除选择(&R):" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "按名称/扩展名选择(&A):" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消(C)" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "确定(O)" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "分隔线(&A)" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "统计" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "结果:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "(&S)选择要插入的目录(您可以选择多个)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "结束(&D)" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "开始(&R)" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消(C)" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "确定(O)" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "首先统计" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "最后统计" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "范围说明" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "结果:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "选择要插入的字符(&S):" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[(&F)首先:最后]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[首先,(&L)长度]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "结束(&D)" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "开始(&R)" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "结束(&E)" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "开始(&T)" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "更改属性" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "固定" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "存档" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "创建时间:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "隐藏" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "访问时间:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "修改时间:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "只读" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "包括子文件夹" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "系统" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "时间戳记属性" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "位数:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "组" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色字段意味着不变的值)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文本:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "执行" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色字段意味着不变的值)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "八进制:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "可读取" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "可写入" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "排序(S)" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "取消(C)" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "确定(O)" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "任意排序" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "拖放元素以对它们进行排序" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当的路径" #: tfrmsplitter.caption msgid "Splitter" msgstr "分割程序" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "需要一个 CRC32 验证文件" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "文件大小" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "将文件拆分到文件夹:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "部分数量(&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "字节(&B)" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "吉字节(&G)" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "千字节(&K)" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "兆字节(&M)" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "构建" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "提交" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "操作系统" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "平台" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "修订版本" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "小部件集版本" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "创建符号链接" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "尽可能使用相对路径(&R)" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "链接将指向的目标(&D)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "链接名(&L)" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "两边都删除" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- 删除左边" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> 删除右边" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "删除选择" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "选择复制方向(默认方向)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "选择复制方向 ->(从左到右)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "反转复制方向" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "选择复制方向 <- (从右到左)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "选择删除<-> (两边都有)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "选择删除方向 <- (左)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "选择删除方向 ->(右)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "关闭" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "比较" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "模板..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "同步" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "同步文件夹" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "非对称" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "按内容" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "忽略日期" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "仅选定" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "子文件夹" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "显示:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "名称" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "名称" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(在主窗口中)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "比较" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "查看左侧" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "查看右侧" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "重复文件" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "单独文件" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "请按 <比较> 开始" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "同步" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "确认覆盖" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "树状视图菜单" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "选择常用文件夹:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "搜索时区分大小写" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "完全折叠" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "完全展开" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "搜索时忽略重音和连字" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "搜索时不区分大小写 " #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "搜索时区别重音和连字" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "不显示分支内容, 因为要搜索的字符串在分支名称中找到" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "如果要搜索的字符串在分支名称中找到, 则即使元素不匹配也显示整个分支" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "关闭树状视图菜单" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "树状视图菜单配置" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "树状视图菜单颜色配置" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "新增(&D)" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "更改(&H)" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "默认(&F)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "某些功能可选择适当路径" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "移除(&R)" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "调整插件" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "按内容检测压缩文件类型(&T)" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "可删除文件(&L)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "支持加密(&N)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "显示为普通文件(隐藏压缩程序图标)(&W)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "支持在内存中压缩(&K)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "允许修改现有压缩文件" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "压缩文件可包含多个文件(&A)" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "创建新的压缩文件(&V)" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "支持选项对话框(&U)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "允许在压缩文件中搜索文本(&G)" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "描述(&D):" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "检测字符串(&E):" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "扩展名(&E):" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "标志:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "名称(&N):" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "插件(&P):" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "插件(&P):" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "关于查看器" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "显示关于消息" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "自动重新加载" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "更改编码" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "复制文件" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "复制文件" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "复制到剪贴板" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "复制到剪贴板格式化" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "删除文件" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "删除文件" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "退出(&X)" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "查找" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "查找下一个" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "查找上一个" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "全屏显示" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "跳转到指定行..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "跳转到行" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "居中" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "下一个(&N)" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "加载下一个文件" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "前一个(&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "加载上一个文件" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "水平镜像" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "镜像" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "垂直镜像" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "移动文件" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "移动文件" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "预览" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "(&R)打印" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "打印设置(&S)" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "重新加载" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "重新加载当前文件" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "旋转 180 度" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "旋转 -90 度" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "旋转 +90 度" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "保存" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "另存为..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "将文件另存为..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "截图" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "延迟 3 秒" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "延迟 5 秒" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "全选" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "二进制方式显示(&B)" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "书籍形式显示(&O)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "十进制方式显示(&D)" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "十六进制方式显示(&H)" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "文本方式显示(&T)" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "换行文本方式显示(&W)" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "显示文本光标(&U)" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "图形" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "拉伸" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "拉伸图像" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "拉伸时仅放大" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "撤销" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "撤销" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "缩放" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "放大" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "放大" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "缩小" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "缩小" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "裁剪" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "全屏显示" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "导出帧" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "高亮" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "下一帧" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "画图" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "上一帧" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "红眼" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "调整大小" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "幻灯片播放" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "查看器" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "椭圆" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "编码(&C)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "文件(&F)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "图片(&I)" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "画笔" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "矩形" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "旋转" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "截图" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "视图(&V)" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "开始(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "停止(&T)" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "文件操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "总是置顶" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "使用拖放在队列之间进行移动操作(&U)" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "新队列" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "在独立窗口中显示" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "放到队列最前端" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "放到队列最后面" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "队列" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "队列溢出" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "队列 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "队列 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "队列 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "队列 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "队列 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "独立窗口显示" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "全部暂停(&P)" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "使用链接指向的目标文件(&L)" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "文件夹已存在时(&E)" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "文件存在时" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "文件存在时" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "取消(&C)" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "确定(&O)" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "命令行" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "参数:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "开始路径" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "配置(&F)" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "加密(&Y)" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "文件存在时" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "复制日期/时间(&A)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "在后台工作(单独连接)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "文件存在时" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "您需要提供管理员权限" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "复制这个对象:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "创建这个对象:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "删除这个对象:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "获取此对象的属性:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "创建此硬链接:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "打开这个对象:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "重命名这个对象:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "设置此对象的属性:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "创建此符号链接:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "获取日期" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "高度" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "宽度" #: uexifreader.rsmake msgid "Manufacturer" msgstr "制造商" #: uexifreader.rsmodel msgid "Camera model" msgstr "相机型号" #: uexifreader.rsorientation msgid "Orientation" msgstr "方向" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "无法找到此文件,并有助于验证文件的最终组合:\n" "%s\n" "\n" "您准备好了吗?准备好后请按 <确定> 按钮,\n" "或按 <取消> 按钮。" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "取消快速过滤器" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "取消当前操作" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "输入带有扩展名的文件名,用于拖放文本" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "要导入的文本格式" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "损坏:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "常规:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "缺失:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "读取错误:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "成功:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "输入校验码并选择算法:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "验证校验码" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "合计:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "是否希望清除此新搜索过滤器?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "剪贴板未包含任何有效的工具栏数据。" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "全部;活动面板;左侧面板;右侧面板;文件操作;配置;网络;杂项;并行端口;打印;标记;安全;剪贴板;FTP;导航;帮助;窗口;命令行;工具;视图;用户;标签;排序;日志" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "传统分类; A-Z 排序" #: ulng.rscolattr msgid "Attr" msgstr "属性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日期" #: ulng.rscolext msgid "Ext" msgstr "扩展名" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名称" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "大小" #: ulng.rsconfcolalign msgid "Align" msgstr "对齐" #: ulng.rsconfcolcaption msgid "Caption" msgstr "标题" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "删除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "字段内容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移动" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "宽度" #: ulng.rsconfcustheader msgid "Customize column" msgstr "自定义列" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "配置文件关联" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "确认命令行和参数" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "复制 (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "自动;启用;禁用" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "导入的 DC 工具栏" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "导入的 TC 工具栏" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_删除的文本" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_删除的 HTML 文本" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_删除的富文本" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_删除的简单文本" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_删除的Unicode UTF16 文本" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_删除的Unicode UTF8 文本" #: ulng.rsdiffadds msgid " Adds: " msgstr " 地址:" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "比较..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " 删除:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "这两个文件是相同的!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " 匹配:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " 修改:" #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "编码" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "行尾" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "文本是相同的,但使用了以下选项:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "文本相同,但文件不匹配!\n" "发现以下差异:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "终止(&O)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全部(&L)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "附加(&P)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "自动重命名源文件(&U)" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "自动重命名目标文件(&U)" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "取消(&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "比较文件内容(&B)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "继续(&C)" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "合并(&M)" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "全部合并(&G)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "退出程序(&X)" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "忽略(&N)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "全部忽略(&G)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "否(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "无(&E)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "确定(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "其他(&H)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "覆盖(&R)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "全部覆盖(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "覆盖所有较大的文件(&L)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "覆盖所有较早的文件(&D)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "覆盖所有较小的文件(&M)" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "重命名(&E)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "恢复(&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "重试(&T)" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "以管理员身份(&M)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "跳过(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "全部跳过(&K)" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "解锁(&U)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "是(&Y)" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "复制文件" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "移动文件" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "暂停(&S)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "开始(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "队列" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "速度 %s/秒" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "速度 %s/秒,剩余时间 %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "富文本格式;HTML 格式;Unicode 格式;简单文本格式" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "驱动器可用空间指示器" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<无标签>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<无媒体>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander 内部编辑器。" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "跳转到行:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "跳转到行" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "文件名:" #: ulng.rseditnewopen msgid "Open file" msgstr "打开文件" #: ulng.rseditsearchback msgid "&Backward" msgstr "后退(&B)" #: ulng.rseditsearchcaption msgid "Search" msgstr "搜索" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "前进(&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "替换" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "使用外部编辑器" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "使用内部编辑器" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "通过系统外壳执行" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "通过终端执行并关闭" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "通过终端执行并保持打开状态" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "行 %s 中找不到 \"]\"" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "在命令 \"%s\" 前没有定义扩展名。它将被忽略。" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "左侧;右侧;活动;非活动;全部;无" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "否;是" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "从 DC 导出" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "询问;覆盖;跳过" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "询问;合并;跳过" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "询问;覆盖;覆盖旧的;跳过" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "询问;不再设置;忽略错误" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "任何文件" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "压缩程序配置文件" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC 工具提示文件" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "常用文件夹列表文件" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "可执行文件" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".INI 配置文件" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "传统 DC .tab 文件" #: ulng.rsfilterlibraries msgid "Library files" msgstr "库文件" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "插件文件" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "程序和库" #: ulng.rsfilterstatus msgid "FILTER" msgstr "过滤器" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC 工具栏文件" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC 工具栏文件" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml 配置文件" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "定义模板" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s 级" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全部(不限深度)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "仅当前文件夹" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "文件夹 %s 不存在!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "找到:%d 个" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "保存搜索模板" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "模板名称:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "已扫描:%d 个" #: ulng.rsfindscanning msgid "Scanning" msgstr "正在扫描" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "查找文件" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "扫描时间:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "开始于" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "控制台字体(&C)" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "编辑器字体(&E)" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "定义按钮字体" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "日志字体(&L)" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "主要字体(&F)" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "路径字体" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "搜索结果字体" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "状态栏字体" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "树视图菜单字体" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "查看器字体(&V)" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "查看器和书籍字体" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "可用 %s ,总共 %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s 可用" #: ulng.rsfuncatime msgid "Access date/time" msgstr "访问日期/时间" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "属性" #: ulng.rsfunccomment msgid "Comment" msgstr "注释" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "压缩后大小" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "创建日期/时间" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "扩展名" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "组" #: ulng.rsfunchtime msgid "Change date/time" msgstr "更改日期/时间" #: ulng.rsfunclinkto msgid "Link to" msgstr "链接到" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "修改日期/时间" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "名称" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "不带扩展名的名称" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "所有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "路径" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "大小" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "原路径" #: ulng.rsfunctype msgid "Type" msgstr "类型" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "创建硬链接出现错误." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "无;名称,a-z;名称,z-a;扩展名,a-z;扩展名,z-a;大小 9-0;大小 0-9;日期 9-0;日期 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "警告!在还原 .hotlist 备份文件时,将以导入的列表替换清除现有列表。\n" "\n" "确实要继续吗?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "复制/移动对话框" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "比较程序" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "编辑注释对话框" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "编辑器" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "查找文件" #: ulng.rshotkeycategorymain msgid "Main" msgstr "主要" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "批量重命名" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "文件夹同步" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "查看器" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "已存在具有该名称的安装程序。\n" "是否要覆盖它?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "确定要还原默认值吗?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "确实要删除安装程序 \"%s\" 吗?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "%s 的副本" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "输入新的名称" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "必须至少保留一个快捷键文件。" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "新名称" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" 安装程序已被修改。\n" "需要立即保存吗?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "没有带回车键的快捷键" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "按命令名称;按快捷键(分组);按快捷键(每行一个)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "无法找到引用默认工具栏的文件" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "<查找文件> 窗口列表" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "不选择掩码" #: ulng.rsmarkplus msgid "Select mask" msgstr "选择掩码" #: ulng.rsmaskinput msgid "Input mask:" msgstr "输入掩码:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "具有该名称的详细信息视图已经存在。" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "要更改当前编辑的详细信息视图,请保存、复制或删除当前编辑的视图" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "配置自定义列" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "输入新的自定义列名称" #: ulng.rsmenumacosservices msgid "Services" msgstr "服务" #: ulng.rsmenumacosshare msgid "Share..." msgstr "共享..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "操作" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<默认>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "八进制" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "创建快捷方式..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "断开网络驱动器连接..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "编辑" #: ulng.rsmnueject msgid "Eject" msgstr "弹出" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "解压缩到此处..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "映射网络驱动器..." #: ulng.rsmnumount msgid "Mount" msgstr "挂载" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "新建" #: ulng.rsmnunomedia msgid "No media available" msgstr "没有可用的媒体" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "打开" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "打开方式" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "其他..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "压缩此处..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "还原" #: ulng.rsmnusortby msgid "Sort by" msgstr "排序方式" #: ulng.rsmnuumount msgid "Unmount" msgstr "卸载" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "查看" #: ulng.rsmsgaccount msgid "Account:" msgstr "帐户:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "所有 Double Commander 内部命令" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "说明:%s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "压缩程序命令行其他参数:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "是否要将引号括起来?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "结果文件的 CRC32 错误:\n" "\"%s\"\n" "\n" "是否保留造成损坏的文件?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "确定要取消此操作吗?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "您不能将文件 \"%s\" 复制/移动到它自身!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "无法复制特殊文件 %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "无法删除文件夹 %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "无法覆盖使用不是文件夹的 \"%s\" 覆盖文件夹 \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "将当前目录更改为 \"%s\" 失败!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "确定要移除所有非活动标签吗?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "此标签页 (%s) 已锁定!仍要关闭吗?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "确认参数" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "您确定要退出吗?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "文件 %s 已经更改。需要向后复制吗?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "无法向后复制 - 是否要保留更改的文件?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "确定要复制 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "确定要复制选中的 \"%s\" 吗?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "<创建新的文件类型 \"%s 文件\"" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "输入保存 DC 工具栏文件的位置和文件" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "自定义操作" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "删除部分复制的文件?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "确定婪删除 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "确定要删除 %d 个选中的文件/文件夹到回收站吗?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "确定要删除选中的 \"%s\" 吗?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "确定要删除选中的文件 \"%s\" 到回收站吗?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "无法删除 \"%s\" 到回收站!直接删除?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "无效的磁盘" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "输入自定义操作名称:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "输入文件扩展名:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "输入名称:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "输入为扩展名 \"%s\" 创建的新文件类型名称" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "压缩文件数据 CRC 错误" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "数据损坏" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "无法连接到服务器:\"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "无法将文件 %s 复制到 %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "无法移动文件夹 %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "无法移动文件 %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "已经有一个名为 \"%s\" 的文件夹。" #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "不支持日期 %s" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "文件夹 %s 已存在!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "用户中止功能" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "关闭文件出错。" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "无法创建文件" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "压缩文件中没有文件" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "无法打开已存在的文件" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "读取文件出错" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "写入文件出错" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "无法创建文件夹 %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "无效链接" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "未找到文件" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "内存不足" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "不支持的功能!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "右键菜单命令出错" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "加载配置时出错" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "正则表达式语法错误!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "无法将文件 %s 重命名为 %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "无法保存关联!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "无法保存文件" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "无法设置 \"%s\" 的属性" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "无法设置 \"%s\" 的日期/时间" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "无法设置 \"%s\" 的所有者/组" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "无法设置 \"%s\" 的权限" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "无法为 \"%s\" 设置扩展属性" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "缓冲区太小" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "要压缩的文件太多" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "压缩文件格式未知" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "可执行文件:%s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "退出状态" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "您确定要删除收藏夹标签的所有条目吗?(此操作无法撤消!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "在此拖动其他条目" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "请输入新的收藏夹标签条目的名称:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "正在保存新的收藏夹标签条目" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "成功导出的收藏夹标签数量:%d / %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "默认扩展设置,用于保存新的收藏夹标签的文件夹历史记录:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "成功导入的文件数量:%d / %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "传统标签已导入" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "选择要导入的 .tab 文件(当前可能不止一个!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "最近的收藏夹标签修改已保存。您希望在继续之前保存它们吗?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "保留收藏夹标签文件夹历史记录:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "子菜单名称" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "这将加载收藏夹标签:\"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "将当前标签保存在现有的收藏夹标签条目上" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "文件 %s 已修改,是否保存?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s 字节,%s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "覆盖:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "文件 %s 已存在,是否覆盖?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "用文件:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "找不到文件 \"%s\" 。" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "文件操作活动" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "某些文件操作尚未完成。关闭 Double Commander 可能会导致数据丢失。" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "目标名称长度 (%d) 超过 %d 个字符!\n" "%s\n" "大多数程序将无法使用这么长的名称访问文件/文件夹!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "文件 %s 被标记为只读/隐藏/系统属性。删除它吗?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "您确定要重新加载当前文件并丢失所做更改吗?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr " \"%s\" 的文件大小对于目标文件系统来说太大了!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "文件夹 %s 已存在,覆盖吗?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "使用符号链接“%s”指向的目标文件吗?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "选择要导入的文本格式" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "添加 %d 个选定文件夹" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "添加所选文件夹:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "添加当前文件夹:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "执行命令" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "常用文件夹列表配置" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "您确定要删除常用文件夹列表中的所有条目吗?(此操作无法撤销!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "这将执行以下命令:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "这是名为的常用文件夹" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "这会将活动窗体更改为以下路径:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "且非活动窗体将更改为以下路径:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "备份条目时出错..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "导出条目时出错..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "全部导出!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "导出常用文件夹列表 - 选择要导出的项" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "导出所选" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "全部导入!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "导入常用文件夹列表 - 选择要导入的项" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "导入所选" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "路径(&P):" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "定位要导入的 \".hotlist\" 文件" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "常用文件夹名称" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "新条目数量:%d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "没有选择导出!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "常用文件夹路径" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "重新添加选定的文件夹:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "重新添加当前文件夹:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "输入要恢复的常用文件夹列表的位置和文件名" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "命令:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(子菜单结束)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "菜单名称(&N):" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "名称(&N):" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(分隔器)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "子菜单名称" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "常用文件夹目标" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "确定是否要在更改文件夹后按指定顺序对活动窗体进行排序" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "确定是否要在更改文件夹后按指定顺序对非活动窗体进行排序" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "某些功能可选择适当的相对、绝对路径、Windows 特殊文件夹,等等。" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "保存的条目总数:%d\n" "\n" "备份文件名:%s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "导出的条目总数:" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "您想要删除子菜单 [%s] 内的所有元素吗?\n" "回答 <否> 将只删除菜单分隔符,但会保留子菜单内的元素。" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "输入希望保存常用文件夹列表的位置和文件名" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "文件的结果文件长度不正确: \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "请插入下一个磁盘或类似东西。\n" "\n" "它允许编写入这个文件:\n" "\"%s\"\n" "\n" "还要写入的字节数:%d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "命令行存在错误" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "文件名无效" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "配置文件格式无效" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "无效的十六进制数:\"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "路径无效" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "路径 %s 包含禁止的字符。" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "这不是一个有效的插件!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "这个插件是为 Double Commander %s.%s 设计。它不能用于 Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "无效引用" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "无效选择。" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "正在加载文件列表..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "定位 TC 配置文件 (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "定位 TC 可执行文件 (totalcmd.exe 或 totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "复制文件 %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "删除文件 %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "错误:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "外部启动" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "外部结果" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "解压缩文件 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "信息:" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "创建硬链接 %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "创建文件夹 %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "移动文件 %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "压缩到文件 %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "程序关闭" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "程序启动" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "移除文件夹 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "创建符号链接 %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "测试文件完整性 %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "擦除文件 %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "擦除文件夹 %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "主密码" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "请输入主密码:" #: ulng.rsmsgnewfile msgid "New file" msgstr "新建文件" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "将解压缩下一卷" #: ulng.rsmsgnofiles msgid "No files" msgstr "没有文件" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "没有选择文件。" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "目标磁盘空间不足,继续?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "目标磁盘空间不足,重试?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "无法删除文件 %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "未实现。" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "目标不存在!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "无法完成操作,因为该文件在另一个程序中打开:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "以下为预览效果。您可以移动光标并选择文件以立即获得各种设置的实际外观。" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "密码:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "密码不一致!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "请输入密码:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "密码(防火墙):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "请重新输入密码以进行验证:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "删除 %s(&D)" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "\"%s\" 已存在。覆盖吗?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "您确定要删除预设 \"%s\" 吗?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "执行命令出现问题 (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "删除文本的文件名:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "请确认此文件可用。重试?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "为此收藏夹标签输入新的友好名称" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "为此菜单输入新名称" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "重命名/移动 %d 个选中的文件/文件夹吗?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "重命名/移动所选的 \"%s\" 吗?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "您希望替换此文本吗?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "请重启 Double Commander,使修改生效" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "错误:加载 Lua 库文件\"%s\"时出现问题" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "选择要添加扩展名 \"%s\" 的文件类型" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "已选择:%s / %s,%d / %d 个文件,%d / %d 个文件夹" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "选择可执行文件" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "只能选择校验码文件!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "选择下一卷位置" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "设置卷标" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "特殊文件夹" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "从活动窗体添加路径" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "从非活动窗体添加路径" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "浏览并使用所选路径" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "使用环境变量..。" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "转到 Double Commander 特殊路径..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "转到环境变量..。" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "转到其他 Windows 特殊文件夹..。" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "转到 Windows 特殊文件夹 (TC)..。" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "相对于常用文件夹路径" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "使用绝对路径" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "相对于 Double Commander 特殊路径..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "相对于环境变量..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "相对于 Windows 特殊文件夹 (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "相对于其他 Windows 特殊文件夹..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "使用 Double Commander 特殊路径.." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "使用常用文件夹路径" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "使用其他 Windows 特殊文件夹..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "使用 Windows 特殊文件夹 (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "此标签 (%s) 已被锁定!在另一个标签中打开文件夹?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "重命名标签" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "新建标签名称:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "目标路径:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "错误!找不到 TC 配置文件:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "错误!找不到 TC 配置可执行文件:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "错误!TC 仍在运行,执行此操作应该关闭它。\n" "按 <确定> 按钮关闭并或按 <取消> 按钮取消。" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "错误!无法找到想要的 TC 工具栏输出文件夹:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "输入要保存的 TC 工具栏文件的位置和文件名" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "内置终端窗口被禁用。是否启用?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "警告:终止进程可能会导致意外结果,包括数据丢失和系统不稳定。终止前,该进程将无法保存其状态或数据。您确定要终止该进程吗?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "您想测试选定的档案吗" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" 现已在剪贴板中" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "选定文件的扩展名不在任何可识别的文件类型中" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "找到要导入的 \".toolbar\" 文件" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "找到要导入的 \".BAR\" 文件" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "输入要恢复的工具栏的位置和文件名" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "已保存!\n" "工具栏文件名:%s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "选择了太多文件" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "未确定" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "错误:意外的树状视图菜单用法!" #: ulng.rsmsgurl msgid "URL:" msgstr "网址:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<无扩展名>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<无文件名>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "用户名:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "用户名(防火墙):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "验证:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "您希望验证所选的校验码吗?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "目标文件已损坏,校验码不匹配!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "卷标:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "请输入分卷大小:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "是否要配置 Lua 库位置?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "擦除 %d 个选择的文件/文件夹?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "擦除选中的文件 \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "使用" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "密码错误!\n" "请重新输入!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "自动重命名为 \"name (1).ext\"、\"name (2).ext\" 等等吗?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "计数器" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "日期" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "预设名称" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "定义变量名" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "定义变量值" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "输入变量名" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "输入变量 \"%s\" 的值" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "忽略,只需另存为[最后一个];提示用户确认我们是否保存;自动保存" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "扩展名" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "名称" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "不修改;大写;小写;首字大写;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[最后使用]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "[最后一个] 预设下的最后一个蒙版;最后预设;新建fresh masks" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "批量重命名" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "位于 x 处的字符" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "从位置 x 到 y 的字符" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "完成日期" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "完成时间" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "计数器" #: ulng.rsmulrenmaskday msgid "Day" msgstr "日期" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "日期(二位数字)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "星期几(缩写,例如:\"mon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "星期几(完整,例如:\"monday\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "扩展名" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "带路径和扩展名的完整文件名" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "完整的文件名,从 pos x 到 y 的字符" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "时" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "时(二位数字)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "分" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "分(二位数字)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "月份" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "月份(二位数字" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "月份名(缩写,例如:\"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "月份名(完整,例如:\"january\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "名称" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "父文件夹" #: ulng.rsmulrenmasksec msgid "Second" msgstr "秒" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "秒(二位数字)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "动态变量" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "年(二位数字)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "年(四位数字)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "插件" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "将预设另存为" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "预设名称已存在。覆盖吗?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "输入新的预设名称" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" 预设已被修改.\n" "你想现在保存吗?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "排序预设" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "时间" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "警告,重名!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "文件包含错误的行数:%d, 应该是 %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "保留;清除;提示" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "无内部等效命令" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "抱歉,尚无 <查找文件> 窗口..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "抱歉, 无其他 <查找文件> 窗口可关闭并从内存中释放..。" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "开发" #: ulng.rsopenwitheducation msgid "Education" msgstr "教育" #: ulng.rsopenwithgames msgid "Games" msgstr "游戏" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "图形" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "应用程序 (*.app)|*.app|所有文件 (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "多媒体" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "网络(&N)" #: ulng.rsopenwithoffice msgid "Office" msgstr "办公" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "其他" #: ulng.rsopenwithscience msgid "Science" msgstr "科学" #: ulng.rsopenwithsettings msgid "Settings" msgstr "设置" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "系统" #: ulng.rsopenwithutility msgid "Accessories" msgstr "配件" #: ulng.rsoperaborted msgid "Aborted" msgstr "已终止" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "正在计算校验码" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "正在 \"%s\" 中计算校验码" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "正在计算 \"%s\" 的检验和" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "正在计算" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "正在计算 \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "正在合并" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "正在 \"%s\" 中合并文件到 \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "正在复制" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 复制到 \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "正在复制 \"%s\" 到 \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "正在创建文件夹" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "正在创建文件夹 \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "正在删除" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "正在 \"%s\" 中删除" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "正在删除 \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "正在执行" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "正在执行 \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "正在解压缩" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 解压缩到 \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "已结束" #: ulng.rsoperlisting msgid "Listing" msgstr "列表" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "正在列表 \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "正在移动" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 移动到 \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 移动到 \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "未开始" #: ulng.rsoperpacking msgid "Packing" msgstr "正在压缩" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "正在从 \"%s\" 压缩到 \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 压缩到 \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "已暂停" #: ulng.rsoperpausing msgid "Pausing" msgstr "暂停中" #: ulng.rsoperrunning msgid "Running" msgstr "运行中" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "设置属性" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "正在 \"%s\" 中设置属性" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "正在设置 \"%s\" 的属性" #: ulng.rsopersplitting msgid "Splitting" msgstr "正在分割" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "正在将 \"%s\" 分割为 \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "正在开始" #: ulng.rsoperstopped msgid "Stopped" msgstr "已停止" #: ulng.rsoperstopping msgid "Stopping" msgstr "正在停止" #: ulng.rsopertesting msgid "Testing" msgstr "测试" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "正在 \"%s\" 中测试" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "正在测试 \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "正在验证校验码" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "正在验证 \"%s\" 中的校验码" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "正在验证 \"%s\" 的校验码" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "等待访问文件源" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "等待用户响应" #: ulng.rsoperwiping msgid "Wiping" msgstr "正在擦除" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "正在擦除 \"%s\" 中内容" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "正在擦除 \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "正在工作" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "添加到开头(&B);添加到最后;智能添加" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "正在添加新的工具提示文件类型" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "要更改当前编辑的压缩文件配置,请选择 <应用> 或 <删除> 当前编辑项" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "模式相关,附加命令" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "如果非空则添加" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "压缩文件(长文件名)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "选择压缩程序文件" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "压缩文件(短文件名)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "更改压缩程序列表编码" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "您确定要删除:\"%s\" 吗?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "导出的压缩程序配置" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "错误级别" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "导出压缩程序配置" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "已完成将 %d 个元素导出到文件 \"%s\"。" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "请选择希望导出的文件" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "文件列表(长文件名)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "文件列表(短文件名)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "导入压缩程序配置" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "已成功导入 %d 项(来自文件“%s”)" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "请选择要导入压缩程序配置的文件" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "请选择您希望导入的文件" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "仅使用文件名(不含路径)" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "仅使用路径(不含文件名)" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "压缩程序(长文件名)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "压缩程序(短文件名)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "引用全部名称" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "引用带有空格的名称" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "要处理的单个文件名" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "目标子文件夹" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "使用 ANSI 编码" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "使用 UTF8 编码" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "请输入保存压缩程序配置的位置和文件名" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "压缩文件类型名称:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "与 \"%s\" 关联的插件:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "首先;最后;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "经典,传统排序;字母顺序(但语言仍然优先)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "全部展开;全部折叠" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "左侧为活动窗体面板,右侧为非活动面板(传统);左侧窗体面板在左侧,右侧在右边" #: ulng.rsoptenterext msgid "Enter extension" msgstr "输入扩展名" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "在开始处添加;在末尾处添加;按字母顺序排序" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "独立窗口;最小化独立窗口;操作面板" #: ulng.rsoptfilesizefloat msgid "float" msgstr "动态" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "cm_Delete 的快捷键 %s 将被注册,因此可用于反转此设置。" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "为 %s 添加热键" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "添加快捷键" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "无法设置快捷键" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "更改快捷键" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "命令" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "cm_Delete 的快捷键 %s 有一个覆盖此设置的参数。需要更改此参数来使用全局设置吗?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "cm_Delete 的快捷键 %s 需要将参数更改为与快捷键 %s 相匹配。需要更改吗?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "描述" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "编辑 %s 的热键" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "修复参数" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "热键" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "热键" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<无>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "参数" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "设置删除文件的快捷键" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "要使用快捷键 %s, 必须将快捷键 %s 分配给 cm_Delete,但它已分配给 %s。是否要更改它?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "cm_Delete 的快捷键 %s 是一个序列快捷键, 不能为其分配带有 Shift 的热键。此设置可能不起作用" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "快捷键已使用" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "快捷键 %s 已被使用。" #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "是否将其更改为 %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "用于 %s(在 %s 中)" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "用于此命令但具有不同的参数" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "压缩文件" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "自动刷新" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "行为" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "列表" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "颜色" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "列" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "配置" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "自定义列" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "常用文件夹列表" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "常用文件夹列表扩展" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "拖放" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "驱动器列表按钮" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "收藏夹标签" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "文件关联扩展" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "文件关联" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "新建" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "文件操作" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "文件面板" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "文件搜索" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "文件视图" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "文件视图扩展" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "文件类型" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "文件夹标签" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "文件夹标签扩展" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "字体" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "文本高亮" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "热键" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "图标" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "忽略列表" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "按键" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "语言" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "布局" #: ulng.rsoptionseditorlog msgid "Log" msgstr "日志" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "杂项" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "鼠标" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "批量重命名" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "选项已在 \"%s\" 中更改\n" "\n" "是否保存修改?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "插件" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "快速搜索/过滤器" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "终端" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "工具栏" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "工具栏扩展" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "工具栏中间" #: ulng.rsoptionseditortools msgid "Tools" msgstr "工具" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "工具提示" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "树状视图菜单" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "树状视图菜单颜色" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "无;命令行;快速搜索;快速过滤器" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左侧按钮;右侧按钮;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "在文件列表顶部;在文件夹之后(如果文件夹在文件前排序);在排序位置;在文件列表底部" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "个性化动态;个性化字节;个性化千字节;个性化兆字节;个性化吉字节;个性化太字节" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "插件 %s 已分配给以下扩展名:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "禁用(&I)" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "启用(&N)" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "活动" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "描述" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "文件名" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "按扩展名" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "按插件" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名称" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "仅当按扩展显示插件时,才可以对 WCX 插件进行排序!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "适用于" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "选择 Lua 库文件" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "正在重命名工具提示文件类型" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "区分(&S);不区分(&I)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "文件(&F);文件夹(&R);文件和文件夹(&N)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "未聚焦时隐藏过滤器面板(&H);为下一会话保留设置修改" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "不区分大小写;根据区域设置 (aAbBcC);先大写然后小写 (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "按名称排序,首先显示;像文件一样排序且首先显示;像文件一样排序" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "按字母顺序:考虑重音;按字母顺序:考虑特殊字符;按自然顺序排序:考虑字母和数字;按自然顺序排序:考虑特殊字符" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "顶部;底部;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "分隔符(&E);内部命令(&R);外部命令(&X);菜单(&U)" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "要更改文件类型工具提示配置,请选择 <应用> 或 <删除> 当前编辑项" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "工具提示文件类型名称:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" 已经存在!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "您确定要删除:\"%s\" 吗?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "导出的工具提示文件类型配置" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "导出工具提示文件类型配置" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "已完成将 %d 个元素导出到文件 \"%s\"。" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "请选择您希望导出的文件" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "导入工具提供文件类型配置" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "已成功导入 %d 项(来自文件“%s”)" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "请选择要导入工具提供配置的文件" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "请选择您希望导入的文件" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "请输入保存工具提示文件类型配置的位置和文件名" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "工具提示文件类型名称" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC 传统方式 - 副本 (x) 文件名.扩展名;窗口 - 文件名 (x).扩展名;其他 - 文件名 (x).扩展名" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "不更改位置;使用与新文件相同的设置;要排序位置" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "完整的绝对路径;相对于 %COMMANDER_PATH% 的路径;相对于以下内容" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "包含(大写)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "包含" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "(大写)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "找不到字段 \"%s\"!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "不包含(大写)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "不包含" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "非(大写)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "找不到插件 \"%s\"!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "正则表达式" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "单位 \"%s\" 未找到(字段 \"%s\")!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "文件:%d 个,文件夹:%d 个" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "无法更改 \"%s\" 的访问权限" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "无法更改 \"%s\" 的所有者" #: ulng.rspropsfile msgid "File" msgstr "文件" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "文件夹" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "命名管道" #: ulng.rspropssocket msgid "Socket" msgstr "套接字" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "特殊块设备" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "特殊字符设备" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "符号链接" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "未知类型" #: ulng.rssearchresult msgid "Search result" msgstr "搜索结果" #: ulng.rssearchstatus msgid "SEARCH" msgstr "搜索" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<未命名模板>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "使用 DSX 插件的文件搜索已经在进行中。\n" "我们需要在它完成之后才能开始一个新的项目。" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "使用 WDX 插件的文件搜索已经在进行中。\n" "我们需要在它完成之后才能开始一个新的项目。" #: ulng.rsselectdir msgid "Select a directory" msgstr "选择文件夹" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "最新;最旧;最大;最小;小组第一;小组最后" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "选择窗口" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "显示 %s 的帮助(&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "全部" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "类别" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "列" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "命令" #: ulng.rssimpleworderror msgid "Error" msgstr "错误" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "失败!" #: ulng.rssimplewordfalse msgid "False" msgstr "假" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "文件名" #: ulng.rssimplewordfiles msgid "files" msgstr "个文件" #: ulng.rssimplewordletter msgid "Letter" msgstr "字母" #: ulng.rssimplewordparameter msgid "Param" msgstr "参数" #: ulng.rssimplewordresult msgid "Result" msgstr "结果" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "成功!" #: ulng.rssimplewordtrue msgid "True" msgstr "真" #: ulng.rssimplewordvariable msgid "Variable" msgstr "变量" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "工作文件夹" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "字节" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "吉字节" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "千字节" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "兆字节" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "太字节" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "文件: %d 个,文件夹:%d 个, 大小:%s(%s 字节)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "无法创建目标文件夹!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "无效的文件大小格式!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "无法分割文件!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "部件数量超过100个!继续吗?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "自动;1457664B - 3.5\" 高密度 1.44M;1213952B - 5.25\" 高密度 1.2M;730112B - 3.5\" 双密度 720K;362496B - 5.25\" 双密度 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "选中的文件夹:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "仅预览" #: ulng.rsstrpreviewothers msgid "Others" msgstr "其他" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "边注" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "平坦" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "限定" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "简单" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "很好" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "非常好" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "特别好" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "从文件夹历史记录中选择文件夹" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "选择收藏夹标签:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "从命令行历史记录中选择命令" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "从主菜单中选择操作" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "从主工具栏中选择操作" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "从常用文件夹列表中选择文件夹" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "从文件查看历史记录中选择文件夹" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "选择您的文件或文件夹" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "创建符号链接出现错误." #: ulng.rssyndefaulttext msgid "Default text" msgstr "默认文本" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "纯文本" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "什么都不做;关闭标签;访问收藏夹标签;标签弹出菜单" #: ulng.rstimeunitday msgid "Day(s)" msgstr "天" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "小时" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "分钟" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "月" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "秒" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "周" #: ulng.rstimeunityear msgid "Year(s)" msgstr "年" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "重命名收藏夹标签" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "重命名收藏夹标签子菜单" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "比较程序" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "编辑器" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "打开比较程序时出错" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "打开编辑器时出错" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "打开终端时出错" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "打开查看器时出错" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "终端" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "系统默认值;1秒;2秒;3秒;5秒;10秒;30秒;1分钟;从不隐藏" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "结合 DC 和系统工具提示,DC 优先(传统);结合 DC 和系统工具提示,系统优先;尽可能显示 DC 工具提示,不显示系统;仅显示 DC 工具提示;仅显示系统工具提示" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "查看器" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "请向错误跟踪器报告此错误,并说明您正在执行的操作和以下文件:%s按 %s 继续或者 %s 中止程序。" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "两个面板,从活动到非活动" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "两个面板,从左到右" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "面板路径" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "用括号括起每个名称或者你希望的内容" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "仅文件名,无扩展名" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "完整的文件名(路径+文件名)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "帮助使用 \"%\" 变量" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "将请求用户输入具有默认建议值的参数" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "面板路径的最后一个目录" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "文件路径的最后一个目录" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "左侧面板" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "文件名列表的临时文件名" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "完整文件名的文件名列表的临时文件名(路径+文件名)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "列表中的文件名以带有 BOM 的 UTF-16 编码" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "列表中的文件名以带有 BOM 的 UTF-16 编码,在双引号内" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "列表中的文件名以 UTF-8 编码" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "列表中的文件名以 UTF-8 编码,在双引号内" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "相对路径文件名列表的临时文件名" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "仅文件扩展名" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "仅文件名" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "其他可能的例子" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "路径,不带结束分隔符" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "从此处到行末,百分比变量指示器是 \"#\" 符号" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "返回百分号" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "从此处到行末,百分比变量指标返回 \"%\" 符号" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "将每个名称加上 \"-a \" 或者您希望的" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[提示用户输入参数;建议使用默认值]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "具有相对路径的文件名" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "右侧面板" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "右侧面板中第二个选定文件的完整路径" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "执行前显示命令" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[简单消息]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "将显示一条简单消息" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "活动面板(来源)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "非活动面板(目标)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "文件名将从这里引用(默认)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "命令将在终端完成, 结束时保持打开" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "路径将具有结束分隔符" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "文件名不会从这里引用" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "命令将在终端完成,结束后关闭" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "路径不带结束分隔符(默认值)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "网络" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "回收站" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander 内部查看器。" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "质量差" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "编码" #: ulng.rsviewimagetype msgid "Image Type" msgstr "图像类型" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "新尺寸" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "未找到 %s!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "笔;矩形;椭圆形" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "使用外部查看器" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "使用内部查看器" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "替换次数:%d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "没有发生替换。" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "没有名为 \"%s\" 的安装程序" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.uk.po�����������������������������������������������������������0000644�0001750�0000144�00001575372�15104114162�017310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2015-08-25 23:33+0200\n" "Last-Translator: masterok <m_shein@ukr.net>\n" "Language-Team: UA\n" "Language: UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Українська мова\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Порівняння... %d%% (ESC щоб скасувати)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Справа: Видалити %d файл(и) " #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Знайдено файлів: %d (Однакових: %d, Різних: %d, Унікальних зліва: %d, Унікальних справа: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Справа на ліво: Копіювати %d файлів, загальним розміром: %d байт" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Зліва на право: Копіювати %d файлів, загальним розміром: %d байт" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Вибрати шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Перевірити вільне міс&це" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Копі&ювати атрибути" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Копіювати &власника" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Копіювати &права" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Копіювати &дату/час" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Правил&ьні посилання" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Скинути позначку \"Л&ише читання\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Викл&ючити порожні каталоги" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Перейти за поси&ланнями" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Зарезервувати &місце" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Перевірити після &завершення" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Що робити, якщо неможливо встановити час файла, атрибути, тощо." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Використати файл шаблону" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Якщо &каталог існує" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Якщо &файл існує" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Коли не можливо встановити в&ластивості" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<немає шаблону>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Копіювати в буфер" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Збірка" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашня сторінка:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Ревізія:" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Версія" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Скинути" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Вибрати атрибути" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Архівний" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Стиснути&й" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Каталог" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "За&шифрований" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "При&хований" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Лише &читання" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Розрід&жений" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Симв. посилання" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&Системний" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Тимчасовий" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Атрибути NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Основні атрибути" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконання" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Як те&кст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Тест продуктивності" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Обсяг даних тесту: %d Мб" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Хеш-функція" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Час (мс)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Швидкість (Мб/с)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Розрахувати контрольну суму..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Відкрити файл контрольної суми після розрахунку" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Для кожного файлу ство&рити свій контрольний файл" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Зберегти файл(и) контрольних сум &як:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Перевірка контрольної суми..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Кодування" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Додати" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "З'&єднати" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Редагувати" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Диспетчер з'єднань" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "З'єднатися з:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Додати в &чергу" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Налашт&увати" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Зберегти ці налаштування як &типові" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Копіювати файл(и)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Нова черга" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Черга 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Черга 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Черга 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Черга 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Черга 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Зберегти опис" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Коментар файлу/теки" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Ре&дагувати коментар для:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Кодування:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Авто порівняння" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Двійковий режим" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Скасувати" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Копіювати блок вправо" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Копіювати блок вправо" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Копіювати блок вліво" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Копіювати блок вліво" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторити" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Повторити" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Виділити в&се" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Вернути" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Вернути" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ви&хід" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "З&найти" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Знайти" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Знайти наступний" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Знайти наступний" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Знайти попереднє" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Знайти попереднє" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Замінити" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Замінити" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Перша відмінність" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Перша відмінність" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Перехід до рядка" #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Перехід до рядка" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ігнорувати регістр" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ігнорувати пробіли" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Одночасне прокручування" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Остання відмінність" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Остання відмінність" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Відмінності в рядку" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Наступна відмінність" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Наступна відмінність" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Відкрити зліва..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Відкрити справа..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Зафарбовувати фон" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Попередня відмінність" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Попередня відмінність" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Пере&завантажити" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Перезавантажити" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Зберегти" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Зберегти" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Зберегти як..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Зберегти як..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Зберегти лівий" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Зберегти лівий" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Зберегти лівий як..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Зберегти лівий як..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Зберегти правий" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Зберегти правий" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Зберегти правий як..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Зберегти правий як..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Порівняти" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Порівняти" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Кодування" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Кодування" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Порівняти файли" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "З&ліва" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Сп&рава" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Дії" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Р&едагувати" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Кодування" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Налаштування" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Додати новий ярлик в послідовність" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Видалити останній ярлик з послідовності" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Виберіть зі списку вільних доступних клавіш" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Тільки для цих елементів керування" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Параметри (кожен в окремому рядку):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Ярлики:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Про програму..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Налаштування" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Конфігурація" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Копіювати" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Вирізати" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Видалити" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "З&найти" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Знайти" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Знайти наступний" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Знайти наступний" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Знайти попереднє" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Перехід до рядка" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Вставити" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторити" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Повторити" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Замінити" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Замінити" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Виділити &все" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Виділити &усе" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Вернути" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Вернути" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Закрити" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Вихід" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Створити" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Створити" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Відкрити" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Відкрити" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Перезавантажити" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Збере&гти" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Зберегти" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Зберегти &як.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Зберегти як" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Редактор" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Довід&ка" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Редагувати" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодування" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Відкрити як" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Зберегти як" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "&Підсвітка синтаксису" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Кінець рядка" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Скасувати" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Чутливість до регістру" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Шукати від &курсора" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регулярні вирази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Лише виділений &текст" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Лише слова &повністю" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Опції" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Замінити на:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "З&найти:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Напрямок" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Розпакувати файли" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Роз&пакувати шляхи якщо такі є з файлами" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Розпакувати кожен архів в &окремий каталог (з іменем архіву)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Замінювати існуючі файли" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "В катало&г:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Розпакувати файли по мас&ці:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Пароль для за&шифрованих файлів:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Почекайте..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ім'я файлу:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "З" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Натисніть \"Закрити\", коли тимчасовий файл може бути видалений!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На панель" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Переглянути &все" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Поточна операція:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "З" #: tfrmfileop.lblto.caption msgid "To:" msgstr "В" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Властивості" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "&Дозволити виконувати як програму" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "У вигляді тексту:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Містить:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Створений:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконати" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Запуск:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Шлях:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Гру&па" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Останній доступ:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Остання зміна:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Остання зміна статусу:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Вісімковий" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Власни&к" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Розмір:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. посилання для:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Значення" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Властивості" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Закрити" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Завершити" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Розблокувати" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Розблокувати все" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Розблокувати" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Дескриптор файлу" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ІД процеса" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Виконуваний файл" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Ск&асувати" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Зупинити пошук або закрити вікно" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Закрити" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Налаштування гарячих клавіш" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Р&едагувати" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Фай&ли на панель" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Зупинити пошук і закрити вікно" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Зупинити і закрити всі інші вікна \"Пошук файлів\"" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Пере&йти до файлу" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Пошук даних з текстом" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "Останній пошу&к" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Н&овий пошук" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Новий пошук (очистити фільтри)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Перейти до вкладки \"Розширений\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Перейти до вкладки \"Завантажити/Зберегти\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Перейти &на наступну вкладку" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Перейти до вкладки \"Плагіни\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Перейти н&а попередню вкладку" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Перейти до вкладки \"Результати\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Перейти до вкладки \"Стандартний\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Старт" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Перегляд" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Додати" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Довід&ка" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Збере&гти" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Заван&тажити" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Збере&гти" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "З&берегти з \"Починати з каталога\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Якщо шлях запуску збережено, то його буде відновлено при завантаженні шаблону. Використовуйте його, якщо ви хочете виправити пошук в певному каталозі." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Використати шаблон" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Пошук файлів" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "З врахуванням регістру" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Дата в&ід:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Дата д&о:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Розмір &від:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Розмір &до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Шукати в ар&хівах" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Шукати текст у файлі" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Пере&йти за посиланнями" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Шукати файли, що &НЕ містять текст" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Н&е старші ніж:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "У відкритих вкладках" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Шукати по &частині імені файла" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регулярні вирази" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "За&мінити на" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Вибрані &файли і каталоги" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Р&егулярний вираз" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Час від:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ча&с до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Використовувати пошуковий п&лагін" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Шістнадцяткове" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Введіть імена каталогів, які повинні бути виключені з пошуку, через \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Введіть імена файлів, які повинні бути виключені з пошуку, через \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Введіть імена файлів, через \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагін" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Оператор" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Значення" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файли" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Пошук даних з текстом" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Атри&бути" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Кодуванн&я:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Пр&опустити підкаталоги" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Проп&устити файли" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "По &масці файлу" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Шукати в &каталозі:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Шукати в під&каталогах:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Попередні пошуки:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Дія" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Зупинити і закрити всі інші вікна" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Відкрити в новій вкладці(ках)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Налаштування" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Видалити зі списку" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Результат" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Показати все знайдене" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Показати в редакторі" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Перегляд" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Перегляд" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Розширені" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Завантажити/Зберегти" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Результати" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Стандартні" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Знайти" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Знайти" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "З урахуванням рег&істру" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Регулярні вирази" #: tfrmfindview.chkhex.caption #, fuzzy msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Шістнадцяткове" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Пароль:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Ім'я користувача:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Створити жорстке посилання" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "О&б’єкт на який вказуватиме посилання" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ім'я п&осилання" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Імпортувати все!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Імпортувати виділене" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Виділіть елементи для імпотру" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "При клацанні на підменю, буде обрано все меню" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "При утриманні CTRL можна вибирати кілька елементів" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Компонувальник" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Зберегти до..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Елемент" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Ім'&я файлу" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "В&низ" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Вниз" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Вид&алити" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Видалити" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Вгор&у" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Вгору" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Пр&о програму" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Активувати вкладку за індексом" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Додати ім'я файлу в командний рядок" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Новий екземпляр пошуку..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Додати шлях і ім'я файлу в командний рядок" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Копіювати шлях в командний рядок" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Додати плагін" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Тест продуктивності" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Короткий" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Cтислий вигляд" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Розрахувати зайнятий об'&єм" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Змінити каталог" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Перейти в домашній каталог" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Перейти в батьківський каталог" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Перейти в кореневий каталог" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Розрахувати контрольну суму..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Перевірити контрол&ьну суму..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очистити файл звіту" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очистити вікно звіту" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "За&акрити всі вкладки" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Закрити &дублікати вкладок" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Закрити вкладку" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Наступний командний рядок" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Встановіть командному рядку наступну команду з історії" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Попередній командний рядок" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Встановіть командному рядку попередню команду з історії" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Повний" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Набір колонок" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Порівняти за &вмістом" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Порівняти файли у каталогах" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Порівняти файли у каталогах" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Налаштування архіваторів" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Налаштування обраних каталогів" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Налаштування вибраних вкладок" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Налаштування вкладок папок" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Налаштування гарячих клавіш" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Налаштування плагінів" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Зберегти позицію" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "З&берігти налаштування" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Налаштування пошуку" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Панель інструментів..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Налаштування спливаючих підказок" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Налаштування деревовидного меню" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Налаштування кольорів деревовидного меню" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показати контекстне меню" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Копіювати" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Скопіювати всі вкладки на протилежну панель" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Копіювати в&сі показані колонки" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Копіювати ім'я файла(ів) разом з повним шля&хом" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Копіювати ім'я файла(ів) в &буфер" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Копіювати в буфер імена з UNC-шляхом" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Копіювати файли без запиту підтвердження" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Копіювати повний шлях виділеного файлу(ів) без кінцевого роздільник каталогів" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Копіювати повний шлях виділеного файлу(ів)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Копіювати в ту ж панель" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Копіювати" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Показати зайнятий простір" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Ви&різати" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Показати параметри команди" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Зупинити і закрити всі вікна" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Історія каталогів" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Особистий спис&ок каталогів" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Вибрати будь-яку команду і виконати її" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Редагувати" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Редагувати &коментар..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Редагувати новий файл" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Редагувати шлях в заголовку списку" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Поміняти панелі місцями" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Виконати скрипт" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Розпак&увати файли..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Асоціаці&ї з файлами..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Ск&леїти файли..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Властивост&і файлу" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Ро&зрізати файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Плоский вигл&яд" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Перейти в командний рядок" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Змінити фокус" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Переключитися на іншу файлову панель" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Перейти в дерево каталогів" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Переключитися між списком файлів і деревом (якщо включено)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Помістити курсор на перший у списку файл" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Помістити курсор на останній у списку файл" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Створити &жорстке посилання..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Довідка" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Горизонтальне розміщення панелей" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Гарячі &клавіші" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Короткий вид в лівій панелі" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Докладний вид в лівій панелі" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ліва &= Права" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Показати всі фа&йли без підкаталогів в лівій панелі" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Відкрити список дисків зліва" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Зве&рнути порядок в лівій панелі" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Сортувати по &атрибутам в лівій панелі" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Сортувати за &датою в лівій панелі" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Сортувати по &розширенню в лівій панелі" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Сортувати по &імені в лівій панелі" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Сортувати за &розміром в лівій панелі" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Перегляд ескізів в лівій панелі" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Завантажити вкладки з обраних вкладок" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Завантажити виділенння з б&уферу" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Завантажити виділенння з ф&айлу..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Завантажити вкладки &з файлу" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Створити ката&лог" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Виділити всі з такими ж роз&ширеннями" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Виділити всі файли з поточного імені" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Виділити всі файли з поточного імені і розширенню" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Виділити все з цим шляхом" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Інверсія виділення" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Виділити все" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Зняти виділення з г&рупи..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Виділити &групу..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Зняти виділення з у&сіх" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Згорнути" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "&Мультиперейменування" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "З'&єднання з мережею..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Розірвати з'є&днання" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Н&ове з'єднання..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Н&ова вкладка" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Завантажити наступні у списку обрані вкладки" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Перейти до нас&тупної вкладки" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Відкрити" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Спробувати відкрити архів" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Відкрити bar файл" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Відкрити теку у новій вклад&ці" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Відкрити диск за індексом" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Відкрити сп&исок VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Показати операції з &файлами" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Основні..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "У&пакувати файли..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Встановити позицію роздільника" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Вставити" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Завантажити попередні в списку обрані вкладки" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Перейти до &попередньої вкладки" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Швидкий фільтр" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Швидкий пошук" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Панель швидкого перегляду" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Оновити" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Перезавантажити останні завантажені обрані вкладки" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Перемістити" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Перемістити/Перейменувати файли без запиту підтвердження" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Перейменувати" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Перей&менувати вкладку" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Перезберегти останні завантажені обрані вкладки" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Ві&дновити виділення" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "О&бернений порядок" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Короткий вид в правій панелі" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Докладний вид в правій панелі" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Права &= Ліва" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Показати всі фа&йли без підкаталогів в правій панелі" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Відкрити список дисків справа" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Зверну&ти порядок в правій панелі" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Сортувати по &атрибутам в правій панелі" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Сортувати за &датою в правій панелі" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Сортувати по &розширенню в правій панелі" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Сортувати по &імені в правій панелі" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Сортувати за &розміром в правій панелі" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Перегляд ескізів у правій панелі" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Запуск &терміналу" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Зберегти поточні як нові обрані вкладки" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Зберегти виділенння" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Зберегти виділення у фай&л..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Зберегти вкладки &до файлу" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "По&шук..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Заблокувати всі вкладки і відкривати каталоги в нових" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Зробити все вкладки звичайними" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Заблокувати всі вкладки" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Заблокувати всі вкладки з можливістю зміни каталогу" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Змінити &атрибути..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Забло&кувати і відкривати каталоги у нових вкладках" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Звичай&но" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Заб&локувати" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Заблоку&вати, але дозволити зміну каталогу" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Відкрити" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Відкрийте за допомогою системи асоціацій" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показати меню кнопки" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Історія командного рядка" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Меню" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Показувати при&ховані/системні файли" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Сортувати за &атрибутами" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Сортувати за &датою" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Сортувати за роз&ширенням" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Сортувати за &ім’ям" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Сортувати за роз&міром" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Відкрити список дисків" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Включити/виключити чорний список файлів, щоб не показувати імена файлів" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Створити &символічне посилання..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Синхронізація тек..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Ціль &= Джерелу" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Перевіри&ти архів(и)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Мініатюри" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Перегляд мініатюр" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Перейти до повноекранного режиму консолі" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Відкрити каталог під курсором на лівій панелі" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Відкрити каталог під курсором на правій панелі" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Дерево каталогів" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Сортування за параметрами" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Зняти виділення з усіх з таким &же розширенням" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Зняти виділення з поточного імені" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Зняти виділення з поточного імені і розширенню" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Зняти все виділення з цим шляхом" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Перегляд" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показати історію відвіданих шляхів для активної панелі" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Перейти до наступного запису в історії" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Перейти до попереднього запису в історії" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Переглянути вміст файлу протоколу" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Список запущених вікон пошуку" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Відвідати домашн&ю сторінку Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Очистити" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Робота з обраними каталогами та параметрами" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Вихід" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Каталог" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Термінал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Показати поточний каталог правої панелі в лівій панелі" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Перейти в домашній каталог" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Перейти в кореневий каталог" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Перейти у каталог вище" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Показати поточний каталог лівої панелі в правій панелі" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Шлях" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Копіювати..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Створити посилання..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Очистити" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Сховати" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Виділити все" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Перемістити..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Створити символічне посилання..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Налаштування вкладки" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Відновити" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Старт" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Команди" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Налаштування" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Вибране" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файли" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Дов&ідка" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Виділення" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Мережа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Ви&гляд" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Налаштування" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Вкладк&и" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Редагувати" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Виберіть внутрішню команду" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Спадщина впорядковано" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Спадщина впорядковано" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Вибрати всі категорії за замовчуванням" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Виділена:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Категорії:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Кома&нда:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Фільтр:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Підказка:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Гаряча клавіша:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Категорії" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Довідка" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Підказка" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Гаряча клавіша" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Додати" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "Довід&ка" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Ви&значити..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Чутливість до регістру" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ігнорувати акценти і лігатури" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Атри&бути:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Вкажіть маску (роздільник - ';'):" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Або вибе&ріть тип виділення за шаблоном:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Створити новий каталог" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Введіть &ім'я каталогу:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Новий розмір" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Висота :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Якість стиснення в Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Висота" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Розширення" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Ім’я" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Очистити" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Очистити" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Закрити" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Конфігурація" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Лічильник" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Лічильник" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Видалити" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Редагувати імена..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Розширення" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Розширення" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Р&едагувати" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Завантажити імена з файлу..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Ім’я" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Ім’я" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Перейменувати" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Відновити все" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Зберегти" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Зберегти як.." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Сортувати" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Час" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Час" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Групове перейменування" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Чутливість до регістру" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Ввімкн&ено" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Регулярні вира&зи" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Використов&увати заміну" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Лічильник" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Знайти &та замінити" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Шаблони" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Розшир&ення" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Зна&йти..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Інтервал" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "І&м'я файлу" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Заміни&ти..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Поча&ткове значення" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Ширина" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Дії" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Р&едагувати" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Старе ім’я файла" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Нове ім’я файла" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Шлях до файла" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Натисніть \"ОК\" після закриття редактора, щоб завантажити змінені імена!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Вибір програми" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Власна команда" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Зберегти асоціації" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Встановити обрану програму як типову дію" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Відкривати тип файлу: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Кілька імен файлів" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Кілька посилань" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Одиночне ім’я" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Одиночне посилання" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Застосувати" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "С&касувати" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Довідка" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Налаштування" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Будь ласка, виберіть підсторінку, ця сторінка не містить налаштувань." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Копіювати" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Ви&далити" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Інші..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Пе&рейменувати" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID, сигнатура, використовується з cm_OpenArchive для розпізнавання архіву без урахування розширення файлу:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Налаштування:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Синтаксичний аналіз:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Ввімкне&но" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Ре&жим налагодження" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Показати вивід на консол&ь" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Використовувати ім'я архіву без розширення як список" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix-&атрибути файлів" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix-роздільник шлях&у \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows-атри&бути файлів" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows-роздільни&к шляху \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Додат&и:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ар&хіватор:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Видалити:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Опи&с:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Роз&ширення:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Розпакува&ти:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Розпакувати без шляхів:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Позиція ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Діапазон пошуку ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Спис&ок:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Архіватори:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Кіне&ць списку (за бажанням)" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Форма&т списку:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "По&чаток списку (за бажанням)" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Рядок запиту пароля:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Створити саморозпаковуваний архів:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Перевірити:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Автоналашт&ування" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Заборонити все" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Відмінити зміни" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Дозволити всі" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Імпортувати..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Сортувати архіватори" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Додатково" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Основні" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "&Також оновлювати при зміні розміру, дати чи атрибутів" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для наступних шляхів і їх підкаталогів:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "&Оновлювати при створенні, копіюванні чи видаленні файлів" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Не реагувати на зміни якщо вікно у &фоні" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Відключити автооновлення" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Оновлення списку файлів" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Завжди показувати іконку в тре&ї" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Автоматично при&ховувати відмонтовані пристрої" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Перемістити іконку в системний трей при згортанні" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Н&е запускати більше однієї копії DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Тут ви можете ввести один або декілька дисків, розділених \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Чорний список дискі&в" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Розмір колонок" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показувати розширення файлів" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "вирівнян&о (по Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "одразу після &імені файлу" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Автоматично" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Стала кількість колонок" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Стала ширниа колонок" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Використовувати &градієнтну заливку індикатора" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Двійковий режим" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "У вигляді тексту:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Колір віл&ьного місця:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Колір заповненн&я:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Змінений:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Змінений:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Успішно:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Обр&ізати текст до ширини колонки" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Роз&ширити ширину осередку, якщо текст не вміщується в колонці" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Горизонтальні лінії" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Вертикальні лінії" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Розтягуват&и колонки на ширину панелі" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Показати сітку" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Автоматична зміна розмірів колонок" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Пристосовув&ати розмір:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Редаг&увати" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "І&сторія командного рядка" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Історія катало&гів" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Історія масок &файлів" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Вкладки тек" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "З&берегти налаштування" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Іст&орія пошуку/заміни" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Стан головного вікна" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Розміщення файлів конфігурації" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Зберігати при виході" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Сортіування конфігурації в лівому дереві" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Стан дерева при відкритті вікна налаштувань" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Встановити в командному рядку" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Файли підсвічування:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Теми значків:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Кеш ескізів:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Каталог п&рограми (для переносної версії)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Домашній каталог корист&увача" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Застосувати зміни до всіх колонках" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Ви&далити кнопку" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Перейти до замовчуванням" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Створити" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Далі" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Назад" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Відновити значення за замовчуванням" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Зберегти як" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Зберегти" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Дозволити виділення кольором" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Змінювати для всіх колонок" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Основні" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Межі курсору" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Використовувати курсор-рамку" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Виділення в неактивній панелі" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Використовувати інверсне виділення" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Використовувати для користувача шрифт і колір" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Фон 1:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "На&лаштувати колонки для файлової системи:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Ім'я поточної колонки]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Колір курсора" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Текст &під курсором" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Шрифт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Розмір:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Колір тексту:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивний курсор:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивне виділення:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Виділення" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Нижче попередній перегляд. Ви можете переміщати курсор і вибрати файли, щоб отримати фактичний вигляд різних налаштувань." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Налаштування колонки:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Додати колонку" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Позиція панелі після порівняння:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Додати каталог &активної вкладки" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Додати каталоги активної &і неактивної вкладок" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Діалог вибору &каталогу" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Додати копію виділеного елемента" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Додати &виділені або каталог під курсором в активній вкладці" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Додати роздільник" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Додати підміню" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Додати теку яку я введу" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Згорнути все" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Згорнути елемент" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Вирізати виділені" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Видалити все!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Видалити виділений елемент" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Видалити підміню і всі його елементи" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Видалити підміню, але залишити все його елементи" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Розгорнути елемент" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Фокус на дерево елементів" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Перейти до першого елементу" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Перейти до останнього елемента" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Перейти до наступного елементу" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Перейти до попереднього елемента" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Вставити каталог &активної вкладки" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Вставити каталоги активної &і неактивної вкладок" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Діалог вибору &каталогу" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Вставити копію виділеного елемента" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Вставити &виділені або каталог під курсором в активній вкладці" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Вставити роздільник" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Вставити підміню" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Вставити теку яку я введу" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Перемістити вниз" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Перемістити вгору" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Відкрити всі гілки" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Вставити вирізане" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Знайти і замінити в &дорозі" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "&Знайти і замінити в дорозі і цільовому шляху" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Знайти і замінити в &цільовому шляху" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Змінити шлях" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Змінити цільової шлях" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Додати..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Резервн копіювання..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Видалити..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Експортувати..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Імпорт..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Вставити..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Різне..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Кілька функцій для вибору відповідного шляху" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Кілька функцій для вибору відповідного місця призначення" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Сортувати..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Додаючи каталог, додавати каталог призначення" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Завжди розгортати дерево" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Показувати лише дійсні змінні оточення" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "У спливаючому вікні показувати шлях" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Ім’я, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Ім’я, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Вибрані теки (можна сортувати перетягуванням)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Інші налаштування" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Ім'я:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Шлях:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Призначення:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...поточний рівень виділених елементів" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Перевірити чи дійсні шляхи в обраних теках" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Перевірити чи існують шляхи в обраних каталогах і призначеннях" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "у файл Обрані теки ((.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "у файл \"wincmd.ini\" від TC (лишити існуючий)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "у файл \"wincmd.ini\" від TC (видалити існуючий)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Перейти до налаштувань данних пов’язаних з ТС" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Перейти до налаштувань данних пов’язаних з ТС" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "з файлу Обрані теки (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "з файла \"wincmd.ini\" від TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Навігація ..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Відновити з резервної копії Обрані теки" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Зберегти резевну копію Обраних тек" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Пошук і заміна..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...все, від А до Я!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...тільки одну групу елементів" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...вміст підменю виділено, без підрівнів" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...вміст підменю виділено разом з підрівнями" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Перевірити меню" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Змінити шлях" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Змінити &цільової шлях" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Додавання з головної панелі:" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Застосуйте поточні налаштування до списку гарячих списків" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Джерело" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Ціль" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Шляхи" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Спосіб встановлення шляхів при їх додаванні:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Зробіть це для шляхів:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "З усіх підтримуваних форматів, запитати, який з них щоразу використовувати" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "При збереженні тексту Unicode, збережіть його у форматі UTF8 (інакше буде UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "При перетягуванні тексті, давати ім’я автоматично (інакше питати користувача)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Показувати діалог підтвердження при перетягуванні" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При перетя&гуванні текста в панелі:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Помістіть найбільш бажаний формат на початку списку (використовуйте перетя&гування):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(якщо найбільш бажаного немає, брати другий і так далі)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(якщо з деякими додатками не працює, зніміть галочку)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Показувати &файлову систему" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Показувати вільн&е місце" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Показувати &мітки" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Список дисків" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Автоматичний відступ" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "При натисканні клавіші Enter новий рядок буде створена з тим же відступом, що і у попередньої" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Прокручувати за кінець рядка" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Дозволяє переміщати каретку в порожній простір за межею кінця рядка" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Показувати спеціальні символи" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Пробіли і табуляції будуть позначатися спеціальними символами" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "\"Розумні\" табуляції" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Натискання клавіші Tab будуть переміщати каретку до позиції під таким непробельний символом попереднього рядка" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tab змінює відступ блоків" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Натискання клавіш Tab і Shift + Tab відповідно збільшують і зменшують відступ виділеного тексту" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Використовувати пробіли замість символів табуляції" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Конвертувати символи табуляції в задану кількість пробілів (при введенні)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Видаляти кінцеві прогалини" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Автоматичне видалення кінцевих пробілів, застосовується тільки до редагованим рядках" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Зверніть увагу, опція \"Розумні табуляції\" має перевагу над заданим значенням" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Опції вбудованого редактора" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Ширина табуляції:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Зверніть увагу, опція \"Розумні табуляції\" має перевагу над заданим значенням" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Фон" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Фон" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Скинути" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Зберегти" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Атрибути елементу" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Передній план" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Передній план" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Текстова мітка" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Використати (і редагувати) глобальні налаштування схеми" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Використати локальні параметри схеми" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Жирний" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Italic" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Закреслений" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Підкреслений" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Додати..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Видалити..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Імпорт/Експорт" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Вставити..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Сортувати..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Немає" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Завжди розгортати дерево" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ні" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Ліворуч" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Праворуч" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Список обраних вкладок (сортуйте перетягуванням)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Інші налаштування" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Що відновити для обраної записи:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Зберігати існуючі вкладки:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Зберігати історію каталогів:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Збережені зліва вкладки будуть відновлені:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Збережені справа вкладки будуть відновлені:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "роздільник" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Додати роздільник" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "підменю" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додати підменю" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Згорнути все" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...поточний рівень виділених елементів" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Вирізати" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "видалити все!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "підменю і всі його елементи" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "тільки підменю без елементів" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "виділений елемент" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Видалити виділений елемент" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Експортувати обране в TAB-файл(и)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Улюблена таблицяТестМеню" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Імпортувати TAB-файл(и) з настройками за замовчуванням" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Імпортувати TAB-файл(и) в обрану позицію" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Імпортувати TAB-файл(и) в обрану позицію" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Імпортувати TAB-файл(и) в підміню в обраній позиції" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Вставити роздільник" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Вставити підміню" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Відкрити всі гілки" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Вставити" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, від А до Я!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...тільки одну групу елементів" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортувати тількиодну групу елементів" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...вміст підменю виділено, без підрівнів" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...вміст підменю виділено разом з підрівнями" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Перевірити меню" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Додати" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Додати" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "К&лонувати" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Виберіть внутрішню команду" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "В&низ" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Редагувати" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Вставити" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Вставит&и" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Видалити" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "В&идалити" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Вид&алити" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пере&йменувати" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Помічник зі змінними" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Вгор&у" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Шлях запуску команди. Не використовуйте лапки." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Назва дії. Воно ніколи не передається в систему, це просто вибране вами мнемонічне ім'я, для вас" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Параметри, що передаються команді. Файл з пробілами має бути укладена в лапки (вручну)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Команда для виконання. Не використовуйте лапки." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Опис дії" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Дії" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Розширення" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Можуть бути відсортовані перетягуванням" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Типи файлів" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Іконка" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Дії можуть бути відсортовані перетягуванням" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Розширення можуть бути відсортовані перетягуванням" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Типи файлів можуть бути відсортовані перетягуванням" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Дія:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Команда:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметр&и:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Шля&х запуску:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Користувача з..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Користувача" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Редагувати" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Відкрити у редакторі" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Редагувати за допомогою..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Отримати вивід команди" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Відкрити у вбудованому редакторі" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Відкрити у вбудованому переглядачі" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Відкрити" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Відкрити з допомогою..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустити у терміналі" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Перегляд" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Відкрити у переглядачі" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Переглянути за допомогою..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Натисніть тут для зміни значка" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Застосовуйте поточні налаштування до всіх поточних налаштованих назв файлів і шляхів" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Виконати через оболонку" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Розширене контекстне меню" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Налаштувати файлові асоціації" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Пропонувати додати в файлові асоціації файл під курсором (якщо ще не включений)" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "При відкритті налаштувань файлових асоціацій буде запропоновано додати тип з розширенням файлу під курсором (якщо воно не знайдено в уже існуючих типах)" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Виконати через термінал і закрити" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Виконати через термінал і лишити відкритим" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Команди" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Іконки" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Початкові шляхи" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Додаткові пункти:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Шляхи" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Спосіб встановлення шляхів додавання елементів для значків, команд і початкових шляхів:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Зробіть це для файлів і шляху до:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Показувати вікно підтвердження для:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Операції &копіювання" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Операції &видалення" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "F8/Del - видалення в Кошик (з Shift - на&завжди)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Операції видалення до к&ошика" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "С&кинути прапорець \"Лише читання\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Операції &переміщення" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "О&працьовувати коментарі з файлами/каталогами" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "П&ри перейменуванні виділяти лише ім'я файлу (без розширення)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Показу&вати панель вибору вкладок при перейменування/переміщенні" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Пропус&кати помилки при файлових операціях і заносити їх у звіт" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Перевірка контрольних сум" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Виконання операцій" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Інтерфейс користувача" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Розмір &буфера для операцій з файлами (в КB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Розмір буфера для обчислення &хеша (КB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Показати прогрес &операцій спочатку в" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Стиль автопереіменування співпадаючих імен:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Кіл-&ть проходів стирання:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Скинути на замовчування DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Дозволити виділення кольором" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Використовувати курсор-&рамку" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Курсор в неактивній панелі" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "В&икористовувати інверсне виділення" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Межі курсору" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Фон:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Фон &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Колір к&урсора" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Текст під курсоро&м" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивний курсор:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивне виділення:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "Рівень &яскравості неактивної панелі" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Ко&лір виділення:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Колір тексту:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Нижче знаходиться попередній перегляд. Ви можете переміщати курсор і вибирати файли, щоб отримати повне уявлення про обраних налаштуваннях." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Колір &тексту:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "При запуску пошуку очистити фільтр маски файлу" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Шукати по частині імені файла" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Показати меню вікна в \"Пошук файлів\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Пошук тексту у файлах" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Пошук файлів" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Поточні фільтри після натискання \"Новий пошук\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Типовий шаблон для пошуку:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Використати відображенн&я в пам'ять при пошуку тексту у файлах" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Використати п&отік при пошуку тексту в файлах" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Типовий" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Форматування" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Призначені для користувача скорочення:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Сортування" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Байт:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&Чутливість до регістру:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgctxt "TFRMOPTIONSFILESVIEWS.lblDateTimeExample.CAPTION" msgid "Incorrect format" msgstr "Неправильний формат" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Формат &дати і часу:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "&Формат розміру файла:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гігабайт:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Кілобайт" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Мегабайт:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Вставити нов&і файли:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Файлові операції:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Со&ртування каталогів:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Метод сортування:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Тераба&йт:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Перемістити оновлені фай&ли:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Додати" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "До&відка" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Дозволити перехід в батьківський каталог подвійним клацанням по вільному місцю в файлової панелі" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Не зава&нтажувати список файлів доки вкладка не активна" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Показувати квадратні ду&жки навколо каталогів" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Виділяти но&ві та оновлені файли" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Увімкнути &оперативне переіменування при подвійному клацанні на імені" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Завантажувати список &файлів в окремому потоці" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Завантажувати іконки після сп&иску" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Показувати системні та п&риховані файли" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При виділенні файлів пр&обілом переміщувати курсор на наступний файл (як в <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Фільтр для файлів в стилі Windows (\"*.*\" Виділяє також файли без розширення і т.д.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Кожен раз показувати у вікні введення незалежний фільтр маски атрибутів" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Виділення/скасування виділення" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Маска атрибута за замовчуванням:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Видалити" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Кольори за &типом файлу (сортувати перетягуванням)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Атрибути категорії:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Колір категорії:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска категорії:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Назва категорії:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Шрифти" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Додати &гар.кл." #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Копіювати" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Видалити" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Видалити гар.кл." #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Редагувати гар.кл." #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Наступна категорія" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Меню дій для набору" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Попередня категорія" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Відновити настройки DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Зберегти зараз" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "За ім'ям команди" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "По гарячих клавішах (групувати)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "По гарячих клавішах (одна на рядок)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Фільтр" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "К&атегорії:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ко&манди:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Ярлики:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Порядок &сортування:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Категорії" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Команди" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Порядок сортування" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Команди" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Гарячі клавіші" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Опис" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Гаряча клавіша" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Параметри" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для наступних шляхів і їх підкаталогів:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Показувати іконки для дій в &меню" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Показувати значки на кнопках" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Показувати оверле&йні &іконки (наприклад для ярликів)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Затін&ювати значки прихованих файлів (повільніше)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Вимкнути спеціальні іконки" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Розмір іконок" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Тема значків" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Показувати значки" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Показ іконок зв’язаних з типом файлу " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Панель дисків:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Панель файлів:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Усі" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Усі асоційовані + &EXE/LNK (повільно)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Без іконок" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Лише &стандартні іконки" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "До&дати виділені імена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Додати виділені імена з &повними шляхами" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ігнорувати (не показувати) такі файли і папки:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Зберегти в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Зміна каталогу с&трілками Вліво, Вправо (Навігація в стилі Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Введення" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+Літ&ери:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Лі&тери:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Літери:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Пло&скі кнопки" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Плоский і&нтерфейс" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Показувати індикатор вільного місця на пан&елі дисків" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Показувати &вікно звіту" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Показувати панель операцій у фоні" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Показувати загальний прогрес в рядку меню" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Показувати &командний рядок" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Показувати по&точний каталог" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Показувати кнопки &дисків" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Показувати індикатор вільного міс&ця" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Показувати кнопки мен&ю дисків" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Показувати кнопки &функціональних клавіш" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Показувати &головне меню" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Показувати &панель кнопок" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Короткий індикатор ві&льного місця" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Показувати рядок стану" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Показувати &заголовки табуляторів" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Показувати вкл&адки" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Показувати вікно терм&іналу" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Показувати д&ві панелі кнопок дисків (фіксована довжина, над файловими панелями)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Компоненти основного вікна " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Переглянути вміст звіту" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Додавати дату до імені звіту" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Запак&увати/Розпакувати" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Виконання зовнішньої команди" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Копі&ювання/Переміщення/Створення посилань" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Створення/Видалення ка&талогів" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Звіт &помилок" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Створити файл звіту:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Звіт &інформаційних повідомлень" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Пуск/Завершення роботи" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Звіт про ус&пішні операції" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Плагіни &файлової системи" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Звіт про операції з файлами" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Підзвітні дії" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Статус операції" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Видалити мініат&юри для не існуючих файлів" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Переглянути вміст звіту" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Створювати нові з кодуванням:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Завжди переходити в &корінь диску при зміні дисків" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Показу&вати попередження (лише кнопка \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Зберігати мініат&юри в кеші" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Мініатюри" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Коментарі до файлів (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Стосовно імпорту/експорту ТС:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Кодування за замовчуванням:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Файл налаштувань:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Виконуваний файл ТС:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Шлях до теки з панелями інструментів:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "пікселів" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Розмір мініа&тюр:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Виділе&ння мишкою" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Текстовий курсор не слідкує за курсором миші" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Клацан&ням по значку" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Відкрити з допомогою..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Прокрутка" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Виділення" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Ре&жим:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Подвійним клацанням" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Через ряд&ків" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Р&ядок за рядком з рухом курсора" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Посторінково" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Одним клацанням" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Одним клацанням відкривати папки і подвійним файли" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Переглянути вміст звіту" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Додати" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Налашту&вати" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Увімкнути" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Вид&алити" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Пара&метри" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Опис" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "По&шукові плагіни дозволяють використовувати альтернативні алгоритми пошуку або зовнішні засоби (такі як \"locate\", та інші)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Застосувати налаштування до всіх вже доданим плагинам" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "При додаванні нового плагіна автоматично відкривати вікно налаштувань" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Загальні налаштування:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Ім'я файла плагіна при додаванні:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Ар&хіваторні плагіни дозволяють працювати з архівами" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "&Інформаційні плагіни дозволяють відображати розширені відомості про файли, такі як mp3 теги або атрибути зображення, або використовувати їх для пошуку або у інструменті масового перейменування." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Плагіни &файлових систем дозволяють звертатися до дисків, недоступних з ОС або до зовнішніх пристроїв, напр. Palm/PocketPC, тощо." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "&Плагіни перегляду дозволяють відобразити різні формати файлів, такі як: зображення, бази даних, таблиці та інші у Переглядачі (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Активний" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагін" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "По&чаток (ім'я має починатись з набраних символів)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Кі&нець (останні символи до набраної крапки '.' повинні співпадати)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Налаштування" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Точне співпадіння імені" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Регістр при пошуку" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Критерії пошуку" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Зберегти змінений ім'я при розблокуванні вкладки" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Робити &панель активною при клацанні по одній з її вкладок" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Показувати заголовок вкладки, нав&іть якщо вона одна" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Закрити дублікати вкладок при закритті програми" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Підтверд&жувати закриття всіх вкладок" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Підтверджувати закриття заблокованих вкладок" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Обмежити розмір заголовка вкладки до" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Показувати заблоковані вкладки зі знаком зірочки *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Розміщати вкладки в декі&лька рядів" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up відкриває нову вкладку на передньому плані" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Відкривати &нову вкладку поряд з поточною" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "По можливості використовувати існуючі вкладки" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Показувати кнопку закриття &вкладки" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Завжди показувати букву диска в заголовку вкладки" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Заголовки вкладок" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "символів" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Дія подвійного клацання по вкладці:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Поло&ження вкладок" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Немає" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ні" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Ліворуч" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Праворуч" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Перейти до улюбленої вкладки Конфігурація після збереження" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Перейти до улюбленої вкладки Конфігурація після збереження нової" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Увімкнути додаткові опції \"Улюблені вкладки\" (вибір панелі при відновленні і т.д.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Додаткові налаштування за умовчанням під час збереження нових улюблених вкладок:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Додаткові параметри обраних вкладок" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Зберегти існуючі вкладки при відновленні:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Збережені зліва вкладки будуть відновлені:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Збережені справа вкладки будуть відновлені:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Зберігати історію каталогів для улюблених вкладок:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Положення за умовчанням у меню під час збереження нових улюблених вкладок:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Шаблон {command} позначає команду, запуск якої буде проведений в терміналі" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Шаблон {command} позначає команду, запуск якої буде проведений в терміналі" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Команда запуску терміналу:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Команда для запуску команд в терміналі (вікно буде закрито):" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Команда для запуску команд в терміналі (вікно залишиться відкритим):" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Параметри:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Параметри:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Параметри:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "К&лонувати кнопку" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "Ви&далити кнопку" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Реда&гувати" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "В&ставити нову кнопку" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Виділення" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Інше..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Видалит&и гар.кл." #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Пропозиції" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC буде пропонувати підказки на основі типу кнопки, команди і параметрів" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "П&ласкі кнопки" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Звітувати про помилки з командами" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Введіть параметри команди, кожен в окремому рядку. Натисніть F1, щоб отримати довідку по параметрах." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Вигляд кнопок" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "Розмір п&анелі:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Коман&да:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметр&и:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Довідка" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Гаряча клавіша:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Іко&нка:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Р&озмір іконки:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Коман&да:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Параметри:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Шля&х запуску:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "Під&казка:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Додати панель інструментів зі всіма командами DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для зовнішньої команди" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для внутрішньої команди" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для роздільника" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для підпанелі інструментів" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Резервне копіювання..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Поточна панель інстументів..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Головна панель інструментів..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Зберегти резервну копію Панелі інструментів" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Імпортувати..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Відновити з резервної копії Панелі інструментів" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "з файлу Панель інструментів (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "з одного файлу ТС .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "з файлу \"wincmd.ini\" від ТС..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Знайти і замінити..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "в усіх усіх вищезгаданих..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "у всіх командах..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "у всіх іменах іконок..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "у всіх параметрах..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "у всіх шляхах запуску..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Тип кнопки" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Застосовуйте поточні налаштування до всіх налаштованих імен файлів і шляхів" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Команди" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Іконки" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Початкові шляхи" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Шляхи" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Зробіть це для файлів і шляхів для:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Спосіб встановлення шляхів додавання елементів для значків, команд і початкових шляхів:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Тримати ві&кно терміналу відкритим після виконання програми" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Виконати у т&ерміналі" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Використовувати &зовнішню програму" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Додатков&і параметри" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Шлях до зовнішньої програми" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "До&дати" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Копіювати" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Видалити" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Пе&рейменувати" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Інші..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Параметри підкладки для виборного типу файлів:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Параметри підкладки для виборного типу файлів:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Показати спливаючі підказки" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "&Підказка категорії:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска категорії:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Приховати підказку через:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Режим використання:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Типи &файлів:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Відмінити зміни" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Імпортувати..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Сортувати типи файлів" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Подвійне клацання по верхній смузі файлової панелі" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "За допомогою меню і внутрішньої команди" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Подвійне клацання по вибраному в дереві і вихід" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "За допомогою меню і внутрішньої команди" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Подвійне клацання по вкладці" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Якщо використовується комбінація клавіш - вибір і закриття вікна" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Клік миші по обраному в дереві і вихід" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Використовувати історію командного рядка" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Використовувати історію каталогів" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Використовувати історію перегляду (відвідані каталоги)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Поведінка при виборі:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Налаштування деревовидного меню:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Де використовувати деревоподібна меню:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "* ПРИМІТКА: Стан таких опцій, як чутливість до регістру і ігнорування акцентів, зберігається для наступних викликів меню." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "З обраними каталогами:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "З улюбленими вкладками:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "З історією:" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Використовувати і показувати поєднання клавіш для вибору пунктів" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Налаштування кольору та макет:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Фон:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Колір курсора" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Знайдений текст:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Знайдений текст під курсором:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Нормальний текст:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Нормальний текст під курсором:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Попередній перегляд:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Додатковий текст:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Додатковий текст під курсором:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Гаряча клавіша:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Гаряча клавіша під курсором:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Невибраний колір тексту:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Неможливо вибрати під курсором:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Змініть кольору зліва, і ви побачите, як буде виглядати ваше деревоподібна меню." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "К-сть колонок у переглядачі к&ниг" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Налаштувати" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Упакування файлів" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Окремі архіви для кожн&ого вибраного файлу/каталогу" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Створити само&розпаковуваний архів" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифрувати" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Перем&істити в архів" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Багатото&мний архів" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Сперш&у помістити в TAR архів" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Зберігати шляхи" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Ім'я архіву:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Пакувальник" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Розпакувати все і виконати" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Розпакувати і виконати" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Властивості стисненого файлу" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Атрибути:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Коефіцієнт стиснення:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Метод:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Оригінальний розмір:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Розмір стисненого:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Пакувальник:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Час:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Закрити панель фільтрів" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Введіть текст для пошуку чи фільтрації" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Чутливість до регістру" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Каталоги" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Файли" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Початок співпадіння" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Кінець співпадіння" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Фільтр" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Перемикання між режимами пошуку або фільтра" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Д&одати правила" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "П&рибрати правила" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Використати контент-плагіни, комбінуючи з:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагін" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Оператор" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Значення" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (всі правила)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (будь-яке правило)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Застосувати" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Скасувати" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Скасувати" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Гаразд" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Скасувати" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Гаразд" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Виберіть &символи для вставки:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Змінити атрибути" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Архівний" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Створений:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Прихований" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Доступний:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Змінений:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Лише читання" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Рекурсивно" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Системний" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Властивості мітки часу" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сірі поля змінити неможливо)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконання" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сірі поля змінити неможливо)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Вісімковий" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Сортувати" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Скасувати" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Гаразд" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Розбивка" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Створити файл контрольної суми" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Розмір і кількість частин" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Катал&ог призначення" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Кількіст&ь частин" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Байт" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гігабайти" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Кілобайти" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабайти" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Збірка" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Операційна система" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Ревізія:" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Версія" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Версія додатків" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Створити симв. посилання" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Відносний шлях якщо можливо" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Місце, на яке вказуватиме посилання" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ім'я поси&лання" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Щоб зняти позначку копіювання/видалення" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Відзначити для копіювання (напрямок за замовчуванням)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Відмітити для копіювання -> (зліва направо)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Змінити напрямок копіювання" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Відзначити для копіювання <- (справа наліво)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Відмітити для видалення -> (праворуч)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Закрити" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Порівняти" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Синхронізація" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Синхронізувати теки" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "асиметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "за змістом" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ігнорувати дату" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "лише виділене" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Підтеки" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Показати:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Розмір" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Розмір" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(в основному вікні)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Порівняти" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Вид зліва" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Вид справа" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "дублікати" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "<=>" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "унікальні" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Для запуску натисніть \"Порівняти\" " #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Синхронізація" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Підтвердження перезапису" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Деревоподібне меню" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Виберіть ваш обраний каталог:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Пошук чутливий до регістру" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Згорнути все" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Розгорнути все" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Ігнорувати акценти і лігатури" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Пошук нечутливий до регістру" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Пошук з акцентами і лигатурами" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Якщо рядок знайдено в імені гілки, то чи не показувати вміст гілки" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Якщо рядок знайдено в імені гілки, то показати всю гілку, навіть якщо елементи не відповідають" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Закрити деревоподібне меню" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Налаштувати деревоподібне меню" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Налаштувати кольори деревовидного меню" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Д&одати новий" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "З&мінити" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Типовий" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Вида&лити" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Параметри плагіну" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Визнача&ти тип архіву за вмістом" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Може вида&ляти файли" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Підтримує &шифрування" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Показувати як нормальні фа&йли (сховати іконку архіву)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Підтриму&є стиснення в пам'яті" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Може з&мінювати існуючі архіви" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Архів може містити декілька файлів" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Може створювати нові архі&ви" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Підтримує діалогове вікно з налашт&уваннями" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Дозволити шукати текст у архі&вах" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Оп&ис:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Визна&чення рядка:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Розширення:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Позначки:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "І&м'я" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Плагін:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Плагін:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Про переглядач..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Відображає інформаційне повідомлення" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Змінити кодування" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Копіювати файл" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Копіювати файл" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "&Копіювати в буфер" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Копіювати в буфер з &форматуванням" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Видалити файл" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Видалити файл" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Ви&хід" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Знайти" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Знайти наступний" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Знайти попереднє" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "На весь екран" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Перехід до рядка" #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Перехід до рядка" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "По центру вікна" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "На&ступний" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Завантажити наступний" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Попередній" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Завантажити попередній" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Відобразити по горизонталі" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Дзеркально" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Відбити по вертикалі" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Перемістити файл" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Перемістити файл" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Попередній перегляд" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перезавантажити" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перезавантажити поточний файл" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Повернути на 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Повернути на 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Повернути на 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Повернути на 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Повернути на 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Повернути на 90" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Зберегти" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Зберегти як..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Зберегти як..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Скріншот" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Затримка 3 секунди" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Затримка 5 секунд" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Виділити &усе" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Показати як &двійковий" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Показати в режимі \"&Книга\" (текст з колонками)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Показати в д&есятковому вигляді" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Показати як &шістнадцятковий" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Показати як &текст" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Показати як текст з &розривами рядків" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графіка" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Розтягнути" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Розтягнути зображення" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Тільки великі в розмір вікна" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Вернути" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Вернути" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Збільшення" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Збільшити" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Збільшити" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Зменшити" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Зменшити" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Обрізати" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "На весь екран" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Редагувати" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Малювати" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Червоні очі" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Змінити розмір" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Слайд-шоу" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Переглядач" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Редагування" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Код&ування" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Малюнок" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Ручка" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Обертати" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Скріншот" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Перегляд" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Старт" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "С&топ" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Операції з файлами" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Поверх всіх вікон" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Для переміщення операцій між чергами використовуйте перетягування" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Нова черга" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Показати в окремому вікні" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Перемістити в початок черги" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Перемістити в кінець черги" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Черга" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Позачергово" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Черга 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Черга 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Черга 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Черга 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Черга 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Показати в окремому вікні" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Пауза для всіх" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Перейти за поси&ланнями" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Якщо &каталог існує" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Якщо файл існує" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Якщо файл існує" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Скасувати" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Гаразд" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Параметри:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Налашту&вати" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифрувати" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Якщо файл існує" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Копіювати &дату/час" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Працювати у фоні (окреме з’єднання)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Якщо файл існує" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Дата зйомки" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Висота" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Ширина" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Виробник" #: uexifreader.rsmodel msgid "Camera model" msgstr "Модель камери" #: uexifreader.rsorientation msgid "Orientation" msgstr "Орієнтація" #: ulng.msgtrytolocatecrcfile #, object-pascal-format, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Цей файл не може бути знайдений проте може допомогти, щоб перевірити остаточну комбінацію файлів:\n" "%s\n" "\n" "Чи не могли б ви зробити його доступним і натиснути \"Гаразд \", коли будете готові, \n" "або натиснути \"Скасувати \", щоб продовжити без нього? " #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<Папка>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<Посилання>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Скасувати швидкий фільтр" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Скасувати поточну операцію" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Введіть ім’я файла з розширенням для перетягнутого тексту" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Формат тексту до імпорту" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Пошкоджені:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Загальні:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Відсутні:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Помилок читання:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Успішно:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Введіть контрольну суму і виберіть алгоритм:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Перевірити контрольну суму" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Всього:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Хочете очистити фільтри для цього нового пошуку?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Буфер обміну не містить допустимих даних панелі інструментів." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Все;Активна панель;Ліва панель;Права панель;Файлові операції;Конфігурація;Мережа;Різне;Паралельний порт;Принтер;Відмітки;Безпека;Буфер обміну;FTP;Навігація;Довідка;Вікно;Командний рядок;Інструменти;Вигляд;Користувач;Вкладки;Сортування;Звіт" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Класичне сортування;А-Я сортування" #: ulng.rscolattr msgid "Attr" msgstr "Атриб" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Розш" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ім'я" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Розмір" #: ulng.rsconfcolalign msgid "Align" msgstr "Вирівн" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Заголовок" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Видалити" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Вміст поля даних" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Перемістити" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Налаштування колонки" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Налаштування асоціацій з файлами" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Підтвердження командного рядка і параметрів" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Копіювати (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Імпортована панель інструментів DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Імпортована панель інструментів ТC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "Б" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "Гб" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "Кб" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "Мб" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "Тб" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr "Додано:" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Видалено:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Ці два файли ідентичні!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Співпадінь:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Змінено:" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Кодування" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "П&ерервати" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "В&се" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Додати" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Авто-перейменування вихідних файлів" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Скасувати" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Порівняти" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Продов&жити" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Об'єднати в" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Об'&єднати у всі" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "В&ихід з програми" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Нехтувати" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Пропуст&ити все" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ні" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Жодного" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&ОК" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Ін&ший" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Перезаписати" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Пере&записати все" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Перезаписати всі &великі" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Замінити всі ста&рі" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Перезаписати всі &маленькі" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Пере&йменувати" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Підсумок" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Повтор&ити" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "як &Адміністратор" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Пр&опустити" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Проп&устити все" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Розблокувати" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Так" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Копіювання файлу(ів)" #: ulng.rsdlgmv msgctxt "ulng.rsdlgmv" msgid "Move file(s)" msgstr "Переміщення файлу(ів)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Пау&за" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Старт" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Черга" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Швидкість %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Швидкість %s/с, залишилось часу %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Формат RTF;Формат HTML;Текст в Unicode;Простий текст" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Керування індикатором вільного місця" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<немає мітки>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<немає носія>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Внутрішній редактор Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Перейти до рядка:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Перехід до рядка" #: ulng.rseditnewfile msgid "new.txt" msgstr "Новий.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ім'я файлу:" #: ulng.rseditnewopen msgid "Open file" msgstr "Відкрити файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Назад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Пошук" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Вперед" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замінити" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "із зовнішнім редактором" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "з внутрішнім редактором" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Виконати через оболонку" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Виконати через термінал і закрити" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Виконати через термінал і лишити відкритим" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Не вказано розширення до команди \"%s\". Буде проігноровано." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Зліва;Справа;Активний;Неактивний;Обидва;Немає" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Немає;Так" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Експортувати_з_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Запитувати;Перезаписувати;Пропускати" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Запитати;Замінити;Копіювати в; Пропустити" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Запитати;Замінити;Замінити старі;Пропустити" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Запитати;Не встановлювати більше;Ігнорувати помилки" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Всі файли" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Налаштування архіваторів" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Підказки DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Вибрані каталоги" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "EXE-файли" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "INI-файли" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "TAB-файли" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Файли плагінів" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Фільтр" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Панелі інструментів TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Панелі інструментів DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "XML-Файли" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Визначення шаблону" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s рівень(і)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Всюди (необмежена глибина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Тільки поточному каталогозі" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Каталог %s не існує!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Знайдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Зберегти шаблон пошуку" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ім'я шаблону" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Проглянуто: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Сканування" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Пошук файлів" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Час сканування: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Починати з" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Шрифт &консолі" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Шрифт &редактора" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Шрифт &логу" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Основний &шрифт" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Поточний &шлях" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Шрифт &переглядача" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Шрифт переглядача &книг" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Вільно %s з %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s вільно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/Час доступу" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Атрибути" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Коментар" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Стиснутий розмір" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/Час створення" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Розширення" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Група" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Зміна дати/часу" #: ulng.rsfunclinkto msgid "Link to" msgstr "Посилання на" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/Час зміни" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ім'я" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ім’я без розширення" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Власник" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Шлях" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Розмір" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Тип" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Помилка створення жорсткого посилання." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "немає;Ім'я, а-я;Ім'я, я-а;Тип, а-я;Тип, я-а;Розмір 9-0;Розмір 0-9;Дата 9-0;Дата 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Увага! При відновленні файлу .hotlist з резервної копії, буде стерто існуючий список.\n" "\n" "Ви впевнені, що хочете продовжити?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Вікно Копіювання/Переміщення" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Порівнювач" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Діалог редагування коментаря" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Редактор" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Пошук файлів" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основний" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Групове перейменування" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Синхронізація каталогів" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Переглядач" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Файл з такою назвою вже існує.\n" "Хочете переписати його?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Ви впевнені, що хочете відновити значення за замовчуванням?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Ви впевнені, що хочете видалити набір \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Копія %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Введіть нове ім'я" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Ви повинні зберегти принаймні один файл гарячих клавіш." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Нове ім'я" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Файл \"%s\" був змінений.\n" "Хочете зберегти його зараз?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Не застосовувати \"Enter\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "На ім'я команди;По гарячих клавішах (групов.);По гарячих клавішах (по одній)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Не вдається знати файл типової панелі інструментів" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "Г" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "К" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "М" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "Т" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "Б" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Список вікон \"Пошук файлів\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Маска зняття вибору" #: ulng.rsmarkplus msgid "Select mask" msgstr "Маска вибору" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Вкажіть маску (роздільник - ';'):" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Набір колонок з таким іменем вже існує." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Для зміни поточного редагування набору колонок, або збереження, копійювання чи видалення одного" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Налаштувати набір колонок" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Введіть нове ім’я набору колонок" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команди" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<За замовчуванням>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Восьмирічний" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Створити ярлик..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Відключити мережевий диск..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Редагувати" #: ulng.rsmnueject msgid "Eject" msgstr "Витягнути" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Розпакувати тут..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Підключити мережевий диск..." #: ulng.rsmnumount msgid "Mount" msgstr "Монтувати" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Створити" #: ulng.rsmnunomedia msgid "No media available" msgstr "Немає доступних носіїв" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Відкрити" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Відкрити з допомогою..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Інше..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Упакувати тут..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Відновити" #: ulng.rsmnusortby msgid "Sort by" msgstr "Сортувати за" #: ulng.rsmnuumount msgid "Unmount" msgstr "Розмонтувати" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Перегляд" #: ulng.rsmsgaccount msgid "Account:" msgstr "Обліковий запис:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Всі внутрішні команди Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Опис: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Додаткові параметри для командного рядка архіватора:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Хочете взяти в лапки?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Не збігається контрольна сума для файлу:\n" "\"%s\"\n" "\n" "Бажаєте зберегти пошкоджений файл в будь-якому разі?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ви не можете скопіювати/перемістити файл \"%s\" в самого себе!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Не вдається видалити каталог %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Неможливо перезаписати каталог \"%s\" файлом, не є каталогом \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Перехід в каталог [%s] не вдався!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Видалити всі неактивні вкладки?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Закладка (%s) заблокована. Закрити?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Підтвердження параметра" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ви впевнені, що хочете вийти?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Файл %s змінений. Бажаєте скопіювати його назад?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Не вдалося скопіювати назад - бажаєте зберегти змінений файл?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Копіювати %d обраних файлів/каталогів?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Копіювати виділене \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Створення нового типу файла \"%s files\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Введіть розташування і ім'я файлу, куди зберегти файл панелі інструментів" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Дії користувача" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Видалити частково скопійований файл?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Видалити %d обраних файлів/каталогів?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Видалити %d обраних файлів/каталогів у смітник?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Видалити вибрані \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Видалити вибрані \"%s\" в смітник" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Неможливо видалити \"%s\" у смітник! Видалити назавжди?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск не доступний" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Введіть ім’я дії користувача:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Введіть розширення файла:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Введіть ім'я:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Введіть ім'я нового типу файла, щоб створити розширення для \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Контрольна сума не співпадає, архів пошкоджено." #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Дані пошкоджено" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Неможливо з'єднатися з серевером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Помилка при копіюванні файлу %s в %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Там вже існує каталог з ім'ям \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Дата %s не підтримується" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Каталог %s існує!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Припинено користувачем" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Не можу закрити файл" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Не можу створити файл" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "В архіві немає більше файлів" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Не можу відкрити існуючий файл" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Помилка читання з файлу" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Помилка запису в файл" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Не можу створити каталог %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Некоректне посилання" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Файли не знайдено" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостатньо пам'яті" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Функція не підтримується!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Помилка в команді контекстного меню" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Помилка при завантаженні конфігурації" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Синтаксична помилка в регулярному виразі!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Неможливо перейменувати файл з %s в %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Не вдається зберегти асоціацію!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Неможливо зберегти файл" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Неможливо встановити атрибути для \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Неможливо встановити дату/час для \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Не вдається встановити права/групу для \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Не вдається встановити права для \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буфер переповнено" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Надто багато файлів для запакування" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Архів пошкоджено або має невідомий формат" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Шлях: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Код виходу:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Ви впевнені, що хочете видалити всі ваші обрані вкладки? (Не можна буде скасувати!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Перетягніть сюди інші записи" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Введіть ім'я нових обраних вкладок:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Збереження нових обраних вкладок" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Кількість успішно експортованих обраних вкладок: %d з %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Зберігати історію каталогів для нових обраних вкладок:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Кількість успішно імпортованих файлів: %d з %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Імпортовані вкладки" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Виділіть TAB-файл(и) для імпорту (можна більше одного за раз!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Остання зміна обраних вкладок ще не збережено. Хочете зберегти їх перед тим як продовжити?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Зберігати історію каталогів для обраних вкладок:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Назва підменю" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Будуть завантажені обрані вкладки: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Зберегти поточні вкладки поверх існуючих обраних вкладок" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Файл %s змінено, зберегти?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Перезаписати:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Файл %s існує, перезаписати?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "З файлу:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Не знайдено файл \"%s\"." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Активні операції з файлами" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Деякі операції з файлами ще не завершені. Закриття Double Commander може призвести до втрати даних." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Довжина цільового шляху (%d) перевищує %d символів!\n" "%s\n" "Більшість програм не зможуть звернутися до файлу/каталогу з таким довгим ім'ям!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Файл %s помічений як доступний лише для читання. Видалити?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" "Все внесені зміни будуть втрачені!\n" "Продовжити?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Розмір файлу \"%s\" є занадто великим для цільової файлової системи!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Тека %s існує, перезаписати?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Прямувати за посиланням \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Виберіть текстовий формат для імпорту" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Додати %d виділених тек" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Додати виділений каталог:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Додати поточний каталог:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Виконати каманду" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Налаштування обраних каталогів" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Ви впевнені, що хочете видалити всі записи зі списку Обраних каталогів? (Шляху назад не буде!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Це виконає наступну команду:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Це Вибраний каталог по імені" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Це змінить активну панель на наступний шлях:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "І змінить неактивну панель на наступний шлях:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Помилка резервного копіювання..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Помилка експорту об’єктів..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Експортувати все!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Експорт обраних каталогів - Виділіть об’єкти для експорту" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Експотрувати виділене" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Імпортувати все!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Імпорт обраних каталогів - Виділіть об’єкти для експорту" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Імпортувати виділене" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Шлях" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Знайдіть файл \".hotlist\" для імпорту" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ім’я обраних каталогів" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Кількість нових елементів: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Нічого не вибрано для експорта!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Шлях до Обраних каталогів" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Передодати обраний каталог:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Передодати поточний каталог:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Введіть розташування і ім'я файлу Обраних каталогів для відновлення" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Команди:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(кінець підменю)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Назва меню:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Назва:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(роздільник)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Назва підменю" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Обрані каталоги у призначенні" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Визначте, як має бути відсортована активна панель після зміни каталога " #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Визначте, як має бути відсортована НЕактивна панель після зміни каталога " #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Деякі функції, щоб вибрати відповідний шлях - відносний, абсолютний, спеціальні папки Windows, тощо." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Всього об’єктів збережено: %d\n" "\n" "Ім’я резервного файла: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всього записів експортовано:" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Ви хочете видалити всі елементи всередині підменю [%s]?\n" "Відповідь НІ видалить тільки роздільники і залишить елементи всередині підменю." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Введіть розташування і ім’я файла, куди зберегти файл Обраних каталогів" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Невірна довжина файла : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Будь ласка, вставте наступний диск чи щось подібне.\n" "\n" "Це дозволить запис цього файла:\n" "\"%s\"\n" "\n" "Кількість вільних байт для запису:%d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Помилка в командному рядку" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Некоректне ім’я файла" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неправильний формат файла конфігурації" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Неприпустиме шістнадцяткове число: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некоректний шлях" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Шлях %s містить недопустимі символи." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Цей плагін недопустимий!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Цей плагін створений для Double Commander %s. %s не може працювати з Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Недопустиме значення в лапках" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Некоректне виділення." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Завантаження списку файлів..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Знайдіть файл конфігурації TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Знадіть виконуваний файл ТС (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Копіювання файлу %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Видалення файлу %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Помилка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Зовнішній запуск" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Зовнішній результат" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Розпакування файлу %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Інформація: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Створення посилання %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Створення каталогу %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Переміщення файлу %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Упакування в файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Завершення програми" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Запуск програми" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Видалення каталогу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Виконано: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Створення символьного посилання %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Перевірка цілістності файлу %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Знищення файлу %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Знищення каталогу %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Суперпароль" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Будь ласка, введіть суперпароль:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Новий файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Наступний том буде розпаковано" #: ulng.rsmsgnofiles msgid "No files" msgstr "Файли відсутні" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Немає виділених файлів." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостатньо місця на отримувачі. Продовжити?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостатньо місця на отримувачі. Повторити?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Не можу стерти файл %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Не реалізовано" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Об'єкт не існує!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Дія не може бути виконано, так як цей файл відкритий в іншій програмі:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Нижче попередній перегляд. Ви можете переміщати курсор і вибрати файли, щоб отримати фактичний вигляд різних налаштувань." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Пароль:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Паролі відрізняються!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Будь ласка, введіть пароль:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Пароль (Фаєрвол):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Будь ласка, ще раз введіть пароль для перевірки:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Видалити %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" вже існує. Перезаписати?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Проблема виконання команди (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "ІД процесу: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Ім’я файла для перетягнутого тексту:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Будь ласка, переконайтеся у доступності файла. Спробувати ще раз?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Введіть нове ім'я для цих обраних вкладок" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Введіть нове ім'я для цього меню" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Перейменувати/перемістити %d вибраних файлів/каталогів?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Перейменувати/перемістити вибраний \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Замінити цей текст?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Будь ласка, перезапустіть Double Commander для того щоб зміни вступили в дію" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Виберіть тип файлу до якого треба додати розширення \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Виділено: %s з %s, файлів: %d з %d, папок: %d з %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Виберіть виконуваний файл" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Виберіть лише файли контрольних сум!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Вкажіть шлях до наступного тому" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Встановити мітку диску" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Спеціальні теки" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Додати шлях від активного фрейма" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Додати шлях від неактивного фрейма" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Перейти і використати обраний шлях" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Використовуйте змінну оточення..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Перейти до спеціальної теки DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Перейти в змінну оточення..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "пеерйти у інші спеціальні папки Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Перейти у спеціальні теки Windows (ТС)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Зробити відносним до шляху з обраних каталогів" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Зробити шлях відносним" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Зробити відносний шлях до спеціальної папки DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Зробити відносний шлях до змінної оточення..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Зробити відносний шлях до спеціальної теки (ТС)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Зробити відносний шлях до спеціальної теки Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Використовувати спеціальні шляхи DC..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Використовувати шлях з обраних каталогів" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Використовувати іншу спеціальну папку Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Використовувати спеціальну теку Windows (ТС)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Вкладка (%s) заблокована! Відкрити каталог в іншій вкладці?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Перейменування вкладки" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Нове ім’я вкладки" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Шлях призначення:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Помилка! Відсутній файл конфігурації ТС:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Помилка! Відсутній виконуваний файл ТС:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Помилка! ТС має бути закритий для цієї операції.\n" "Закрийте його і натисніть Гаразд або натисніть Скасувати." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Помилка! Відсутня необхідна тека для Панелі інструментів ТС:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Введіть розташування і ім'я файлу, куди зберегти файл панелі інструментів ТС" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "УВАГА! Завершення процесу може привести до небажаних результатів, в тому числі до втрати даних або до нестабільної роботи системи. Ви дійсно хочете завершити процес?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" тепер в буфері обміну" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Розширення вибраного файлу немає у визнаних типах файлів" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Знайдіть файл \".toolbar\" для імпорту" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Знайдіть файл \".BAR\" для імпорту" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Введіть розташування і ім'я файла Панелі інструментів для відновлення" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Збережено!\n" "Назва панелі інструментів: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Виділено надто багато файлів." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Невизначений" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ПОМИЛКА: Несподівана використання деревоподібного меню!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<БЕЗ ТИПУ>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<БЕЗ ІМЕНІ>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Ім'я користувача:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Ім'я користувача (Фаєрвол):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "ПЕРЕВІРКА:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Перевірити вибрані контрольні суми?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Цільовий файл пошкоджений, не збігається контрольна сума!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Мітка диску:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Будь ласка, введіть розмір тому:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Стерти %d обраних файлів/каталогів?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Стерти обраний \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "з" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Неправильний пароль!\n" "Будь ласка, спробуйте ще раз!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Автоматично перейменовувати в \"name (1).ext\", \"name (2).ext\" і т.д.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Лічильник" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Дата" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Розширення" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Ім'я" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без змін;ПРОПИСНІ;рядкові;З Прописної;Кожне Слово З Прописної;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Групове перейменування" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Символ на позиції x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Символи між позиціями x і y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Лічильник" #: ulng.rsmulrenmaskday msgid "Day" msgstr "День" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "День (2 цифри)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "День тижня (коротко, \"mon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "День тижня (довге, \"monday\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Розширення" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Година" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Години (2 цифри)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Хвилина" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Хвилини (2 цифри)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Місяць" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Місяць (2 цифри)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Назва місяця (коротко, \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Назва місяця (довга, \"грудень\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Ім'я" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Секунда" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Секунди (2 цифри)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Рік (2 цифри)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Рік (4 цифри)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Плагіни" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Час" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Увага, однакові імена!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "У файлі міститься невірне кількість рядків: %d, має бути: %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Зберегти;Очистити;Запитати" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Немає еквівалентної внутрішньої команди" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Вибачте, немає вікон \"Пошук файлів\"..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Вибачте, немає інших вікон \"Пошук файлів\"..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Розробка" #: ulng.rsopenwitheducation msgid "Education" msgstr "Освіта" #: ulng.rsopenwithgames msgid "Games" msgstr "Ігри" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Графіка" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Мультимедіа" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Мережа" #: ulng.rsopenwithoffice msgid "Office" msgstr "Офіс" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Інші" #: ulng.rsopenwithscience msgid "Science" msgstr "Наука" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Налаштування" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Системний" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Інструменти" #: ulng.rsoperaborted msgid "Aborted" msgstr "Перервано" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Розрахунок контрольної суми" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Розрахунок контрольної суми в \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Розрахунок контрольної суми \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Підрахунок" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Розрахунок \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "З’єднання" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Додавання файлів in \"%s\" to \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копіювання" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Копіювання з \"%s\" до \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Копіювання \"%s\" до \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Створення каталогу" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Створення каталогу \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Видалення" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Видалення в \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Видалення \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Розпакування" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Виконання \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Розпакування" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Видобування з \"%s\" до \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Створення списку" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Складання списку \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Переміщення" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Переміщення з \"%s\" до \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Переміщення \"%s\" до \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упакування" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Упакування з \"%s\" до \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Упакування \"%s\" до \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Призупинено" #: ulng.rsoperpausing msgid "Pausing" msgstr "Призупинення" #: ulng.rsoperrunning msgid "Running" msgstr "Виконується" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Встановлення властивостей" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Встановлення властивостей в \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Встановлення властивостей на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Розрізання" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Розрізання \"%s\" до \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Запускається" #: ulng.rsoperstopped msgid "Stopped" msgstr "Зупинено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Зупиняється" #: ulng.rsopertesting msgid "Testing" msgstr "Тестування" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Тестування в \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Тестування \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Перевірка контрольної суми" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Перевірка контрольної суми в \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Перевірка контрольної суми \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Очікування доступу до джерела" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Очікування відповіді від користувача" #: ulng.rsoperwiping msgid "Wiping" msgstr "Стирання" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Стирання в \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Стирання \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Опрацювання" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Додати на початку;Додати в кінці;Розумне додавання" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Додавання нового типу файлів" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Для зміни редагованих налаштувань архиватора натисніть \"Застосувати\" або \"Видалити\" для видалення" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Залежить від режиму, доповнення команд" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Якщо не порожня" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Довге ім'я архіву" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Вибрати виконуваний файл" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Коротке ім'я архіву" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Перевизначити кодування виведення" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Ви впевнені, що хочете видалити: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Експортовані настройки архіватора" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "<Код завершення>" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Параметри експорту архиватора" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Експорт завершено: %d в файл \"%s\"." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Виберіть архіватор(и) для експорту" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Список з довгими іменами файлів" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Список з короткими іменами файлів" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Імпорт налаштувань архиватора" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Імпорт завершено: %d з файлу \"%s\"." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Виберіть файл для імпорту налаштувань архиватора(ів)" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Виберіть архіватор(и) для імпорту" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Використовувати тільки ім'я, без шляху" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Використовувати тільки шлях, без імені" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Довге ім'я архиватора" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Коротке ім'я архиватора" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Брати в лапки всі імена" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Брати в лапки імена з пробілами" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Имя одного файла для обработки" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Цільова піддиректорія архіву" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Використовувати кодування ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Використовувати кодування UTF-8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Вкажіть місце і ім'я файлу для збереження налаштувань архиватора (ів)" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Тип архіву:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Асоціювати плагін \"%s\" з:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Першої колонки;Останньої колонки;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Класичне типове сортування;У алфавітному порядку (мова в першу чергу)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Розгорнути все;Згорнути все" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Активна панель зліва, неактивна панель зправа (класично);Ліва панель - зліва, права зправа" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Введіть розширення" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Додати в початок;Додати в кінець;За алфавітом" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "в окремому вікні; мінімізувати в окремому вікні; панель операції" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Плаваючий" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Буде зареєстровано гар.клавішу %s для cm_Delete , таким чином вона буде використана для реверсінгу налаштування." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Додати гар.кл. для %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Додати гар.клавішу" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Не можливо встановити ярлик" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Змінити ярлик" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Команди" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Ярлик %s для cm_Delete має параметр, який перекриває ці налаштування. Змінити цей параметр, щоб використовувати глобальні налаштування?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Параметр ярлика %s для cm_Delete повинен бути змінений відповідно до контекстного %s. Змінити його?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Опис" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Змінити гар.клавішу для %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Зафіксувати параметр" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Гаряча клавіша" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Гарячі клавіші" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<немає>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Параметри" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Встановити ярлик для видалення файлу" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Для цього налаштування роботи з ярликом %s, ярлику %s повинен бути присвоєний cm_Delete, але це вже присвоєно для %s. Змінити це?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Ярлик %s для cm_Delete є ярликом послідовності для якого не може бути призначена гар.кл. з інв. Shift. Цей параметр не буде працювати." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Гаряча клавіша вже використовується" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy, badformat #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Гаряча клавіша %s вже використовується для %s." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Змінити на %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "використовується для %s в %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "використовувати для цієї команди, але з різними параметрами" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Архіватори" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Автооновлення" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Поведінка" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Короткий" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Кольори" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Колонки" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Конфігурація" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Набір колонок" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Каталог Hotlist Extra" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Перетягування" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Кнопки дисків" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Улюблені вкладки" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Додаткові асоціації файлу" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Асоціації з файлами" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Створити" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Операції з файлами" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Файлові панелі" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Пошук файлів" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Перегляд файлів" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Список файлів (додатково)" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Типи файлів" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Вкладки тек" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Вкладки тек (додатково)" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифти" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Підсвітка" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Гарячі клавіші" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Іконки" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Чорний список" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавіатура" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Мова" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Вигляд вікна" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Звіт" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Різне" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Миша" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Групове перейменування" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Опції \"%s\" змінені.\n" "\n" "Хочете зберегти зміни?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Плагіни" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Швидкий пошук/фільтр" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Термінал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Панель інструментів" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Панель інструментів Extra" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Інструменти" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Підказки" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Деревоподібне меню" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Кольори деревовидного меню" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Немає;Командний рядок;Швидкий пошук;Швидкий фільтр" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ліва кнопка;Права кнопка;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "з початку списку файлів; після каталогів (якщо каталоги сортуються перед файлами); за сортуванням; в кінці списку файлів" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "плаваючий (призначений для користувача);байти (призначений для користувача);кілобайти (призначений для користувача);мегабайти (призначений для користувача);гігабайти (призначений для користувача);терабайти (призначений для користувача)" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Плагін %s вже призначено для наступних розширень:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Вимкнути" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Увімкнути" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Активний" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Опис" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ім'я файлу" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Розширення" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Плагіни" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ім'я" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Сортування WCX-плагінів можлива тільки при показі плагінів по розширенню!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Асоціації з" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Перейменування типу файлів" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Чутливий;&Не чутливий" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файли;&Каталоги;Файли &і каталоги" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Приховати панель фільтру якщо не у фокусі; Зберігайте налаштування модифікацій до наступної сесії" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "не чутливі до регістру; залежно від налаштувань локалі (aAbBcC); спочатку верхній а потім нижній регістр (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "сортувати по імені і показувати першими; сортувати як файли і показувати першими; сортувати як файли" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "За абеткою, з урахуванням наголосів; Природне сортування: по алфавіту і цифрах" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Зверху;Знизу" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Роздільник;&Внутрішні команди;&Зовнішні команди;&Меню" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Щоб змінити налаштування спливаючих підказок ЗАСТОСУВАТИ або ПРИБЕРІТЬ поточні зміни" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Назва категорії:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" вже існує!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Ви впевнені, що хочете видалити: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Експортовані настройки підказок" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Експорт налаштувань підказок" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Експорт завершено: %d в файл \"%s\"." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Виберіть тип(и) файлів для експорту" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Імпорт налаштувань підказок" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Імпорт завершено: %d з файлу \"%s\"." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Виберіть файл для імпорту налаштувань підказок" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Виберіть тип(и) файлів для імпорту" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Вкажіть місце і ім'я файлу для збереження налаштувань підказок" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Ім'я" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Класичний DC - Copy (x) filename.ext;Windows - filename (x).ext;Інший - filename(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не змінювати положення; використовувати ті ж налаштування, як для нових файлів; сортувати по позиції" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "З повним абсолютним шляхом;З шляхом щодо %COMMANDER_PATH%;З шляхом щодо зазначеного" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "містить (з урахуванням регістру)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "містить" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(з урахуванням регістру)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "<=>" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Поле \"%s\" не знайдено!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!містить (з урахуванням регістру)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!містить" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(з урахуванням регістру)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!рег. вираз." #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Плагін \"%s\" не знайден!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "рег. вираз." #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Значення \"%s\" поля \"%s\" не знайдено!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Файлів: %d, папок: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Не можу змінити права доступу для \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Не можу змінити власника для \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Каталог" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Іменований канал" #: ulng.rspropssocket msgid "Socket" msgstr "Сокет" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Особливий блочний пристрій" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Особливий символьний пристрій" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Символьне посилання" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Невідомий тип" #: ulng.rssearchresult msgid "Search result" msgstr "Результати пошуку" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Пошук" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<безіменний шаблон>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Пошук файлів з DSX-плагіном вже запущений.\n" "Необхідно завершити його, перш ніж почати новий." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Пошук файлів з WDX-плагіном вже запущений.\n" "Необхідно завершити його, перш ніж почати новий." #: ulng.rsselectdir msgid "Select a directory" msgstr "Виберіть каталог" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Виберіть вікно" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Пока&зати довідку для %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Всім" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Категорії" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Колонка" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Команди" #: ulng.rssimpleworderror msgid "Error" msgstr "Помилка" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Не вдалося!" #: ulng.rssimplewordfalse msgid "False" msgstr "Немає" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Ім’я" #: ulng.rssimplewordfiles msgid "files" msgstr "файли" #: ulng.rssimplewordletter msgid "Letter" msgstr "Літера" #: ulng.rssimplewordparameter msgid "Param" msgstr "Параметр" #: ulng.rssimplewordresult msgid "Result" msgstr "Результат" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Успішно!" #: ulng.rssimplewordtrue msgid "True" msgstr "Так" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "РобТека" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Байти" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гігабайти" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Кілобайти" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабайти" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабайти" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлів: %d, Каталогів: %d, Розмір: %s (%s байт)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Не можу створити каталог призначення!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Невірний формат розміру файла!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Не можу розрізати файл!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Кількість частин більше 100! Продовжити?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Автоматично;1457664B - 3.5\" Висока щільність 1,44М;1213952В - 5,25\" Висока щільність 1,2М;730112В - 3,5\"Подвійна щільність 720К;362496В - 5,25\" Двомісна щільність 360К;98078KB - ZIP 100МБ;650МБ - CD 650МБ;700МБ - CD 700МБ;4482МБ - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Виберіть каталог:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Тільки перегляд" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Інші" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Примітка" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Плоский" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Обмежений" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Простий" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Неймовірне" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Чудове" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Приголомшливе" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Виберіть каталог з історії каталогів" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Виберіть обрані вкладки:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Виберіть команду з історії командного рядка" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Выберите действие из главного меню" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Виберіть дію з панелі інструментів" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Виберіть каталог з обраних каталогів:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Виберіть каталог з історії переглянутих файлів" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Виберіть ваш файл або каталог" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Помилка створення симв. посилання." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Типовий текст" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Простий текст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Нічого не робити;Закрити вкладку;Доступ до обраним вкладках;Меню вкладок" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Днів" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Годин(а)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Хвилин(а)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Місяців" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунд(а)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Тижнів" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Років" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Перейменувати вибрані вкладки" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Перейменувати підменю обраних вкладок" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Порівнювач" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Редактор" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Помилка відкриття порівнювача" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Помилка відкриття редактора" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Помилка відкриття терміналу" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Помилка відкриття переглядача" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Термінал" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Значення з системи;1 сек;2 сек;3 сек;5 сек;10 сек;30 сек;1 хв;Ніколи не приховувати" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Об'єднати підказку DC і системну, спочатку з DC;Об'єднати підказку DC і системну, спочатку системна;Показати підказку DC, якщо можливо, і системну, якщо немає;Показати тільки підказку DC;Показати лише системну підказку" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Переглядач" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "При помилці зверніться до розробників. У листі опишіть помилку, вкажіть при яких діях вона виникла і вкладіть цей файл:%s. Натисніть %s щоб продовжити чи %s щоб перервати роботу." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Обидві панелі, з активної в неактивну" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Обидві панелі, з лівої в праву" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Шлях до панелі" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Заключіть кожне ім’я у дужки чи у щось інше" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Тільки ім’я, без розширення" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Повне ім'я файлу (шлях + ім'я файлу)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Допомога зі змінними \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Буде пропонувати користувачу ввести необхідне значення параметра (типово)" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Ліва панель" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Тимчасове ім'я списку імен файлів" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Тимчасове ім'я списку повних імен файлів (шлях + ім'я файлу)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Список в UTF-16LE з BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Список в UTF-16LE з BOM, імена укладені в лапки" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Список в UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Список в UTF-8, імена укладені в лапки" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Тимчасове ім'я списку імен файлів з відносними шляхами" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Тільки розширення файлу" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Тільки ім’я файлу" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Інший приклад можливостей" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Шлях з роздільником в кінці" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Звідси і до кінця рядка, індикатор відсотків змінної знак - \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Повернути знак відсотків" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Звідси до кінця рядка, індикатор відсотків змінної повертається знак - \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Попередньо очікуйте кожне ім’я з \"-a \" чи чого хочете" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Запитувати користувача;Пропонувати типове значення]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Ім’я файлу з відносним шляхом" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Права панель" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Повний шлях другого вибраного файлу в правій панелі" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Показати команду до виконання" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Просте повідомлення]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Покаже просте повідомлення" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Активна панель (джерело)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Неактивна панель (ціль)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Імена файлів будуть братися у лапки тут (типово)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Команда буде виконана в терміналі, залишаючись відкритою в кінці" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Шлях буде завершуватися роздільником" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Імена файлів не будуть братися тут у лапки" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Команда буде виконана в терміналі, закритому в кінці" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Шлях не буде завершуватися роздільником (типово)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мережа" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Внутрішній переглядач Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Некоректна якість" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Кодування" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Тип файлу" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Новий розмір" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s не знайдено!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Олівець;Прямокутник;Еліпс" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "у зовнішньому переглядачі" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "у внутрішньому переглядачі" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Кількість замін: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Заміна не відбулася." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.tr.po�����������������������������������������������������������0000644�0001750�0000144�00001266114�15104114162�017305� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2013-08-27 11:34+0100\n" "Last-Translator: Ahmet Çağlar <ahmetcaglar111@hotmail.com>\n" "Language-Team: \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Türk\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Boş alanı kontrol edin" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Doğru bağlantılar" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Salt okunur özniteliğini kaldır" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Bağlantıları İzle" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Dizin mevcutsa" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Dosya mevcutsa" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Kapat" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Panoya kopyala" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Yapı" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal Editor" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Ana Sayfa" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Gözden geçir" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption #, fuzzy #| msgid "Version %s" msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Çeviri Çağlar" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&İptal" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Baştaki konumuna getir" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Özelliklerini seçin" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Kayıtlar" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Sıkıştırılmış" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Dizin" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Şifreli" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Gizli" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Salt okunur" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Seyrek" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Sembolik link" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistem" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Geçici" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS öznitelikleri" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Genel öznitelikler" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption #, fuzzy #| msgid "Gruppe" msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Sahip" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Çalıştır" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Oku" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Metin olarak:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Yaz" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Sağlama toplamı hesapla..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Her dosya için ayrı bir sağlama toplamı dosyası oluştur" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Sağlama toplamı dosya(lar)ını kaydet:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Sağlama toplamı doğrula..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kodlama" #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ekle" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Bağlan" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Sil" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Düzenle" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Bağlantı Yöneticisi" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Bağlantıla:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Seçenekler" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Bu seçenekleri varsayılan olarak kaydet" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Dosya(lar)Kopyala" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Dosya/klasör açıklaması" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Açıklamayı düzenle:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kodlama:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Otomatik karşılaştır" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "İkili mod" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "İptal" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "İptal" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Bloğu sağa kopyala" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Bloğu sağa kopyala" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Bloğu sola kopyala" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Bloğu sola kopyala" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Yinele" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Yinele" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Tümünü &Seç" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Geri Al" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Geri Al" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ç&ıkış" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Bul" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Değiştir" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Değiştir" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "İlk fark" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "İlk fark" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Büyük-küçük harf ayrımı yapma" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Boşlukları yoksay" #: tfrmdiffer.actkeepscrolling.caption #, fuzzy #| msgid "Keep Scrolling\"Kaydırma tutma" msgid "Keep Scrolling" msgstr "Kaydırma devam" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Son Fark" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Son Fark" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Satır farklılıkları" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Sonraki Fark" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Sonraki Fark" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Sol Açık..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Sağ Açık..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Arkaplan Rengi" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Önceki Fark" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Önceki Fark" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Güncelle" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Güncelle" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Kaydet" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Kaydet" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Farklı Kaydet ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Farklı Kaydet ..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Sol Kaydet" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sol Kaydet" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sol olarak kaydet..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sol olarak kaydet..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sağ Kaydet" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sağ Kaydet" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sağ olarak kaydet..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sağ olarak kaydet..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Karşılaştır" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Karşılaştır" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kodlama" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kodlama" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Dosyaları karşılaştır" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "Sol" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "Sağ" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Eylemler" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Düzenle" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kodlama" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Dosya" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Seçenekler" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&İptal" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Hakkında" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Yapılandır" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Yapılandırma" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopyala" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Kes" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "&Sil" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Bul" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Bul" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Yapıştır" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Yenile" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Yenile" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Değiştir" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Değiştir" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Hepsini Seç" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Tümünü Seç" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Geri A" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Geri al" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Kapat" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Çıkış" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Çıkış F10" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Yeni" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Yeni" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Açık" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Açık" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Güncelle" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Kaydet" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Kaydet" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Farklı &Kaydet..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Farklı Kaydet..." #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Düzenleyici" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Düzenle" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodlama" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Olarak aç..." #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Farklı Kaydet..." #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Dosya" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Sözdizimi vurgulama" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "İptal" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Büyük/küçük harf duyarlılığı" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgid "S&earch from caret" msgstr "Şapka &imi ara" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Kısaltılmış metin karekterleri" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Sadece &seçili metin" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Sadece tüm kelimeler" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Seçenek" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&İle değiştirin:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Bulmaya çalış:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Yön" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Dosya(ları) aç" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Eğer dosyalar kaydedilmişse sıkıştırılmış yol adlarını aç" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Her bir arşivi ayrı bir alt dizine aç(arşiv adıyla)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Varolan dosya(ların) üzerine yaz" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Sıkıştırılmış dosya(ları) dizine aç:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "Dosya maskesi eşleşen dosyaları ayıkla:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Şifrelenmiş Dosya için şifre" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Bekle..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Dosya Adı:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Kaynak:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Geçici dosyayı(TEMP)silmek için Kapat'ı tıklatın!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Tarafından:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Sonra:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Özellikleri" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID(yürütme Grup kimliği kurun) bir dosya/klasör verilen dosya izinleri özel bir türüdür." #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID (Kullanıcı Kimliği ayarlayın) bir dosyaya verilen dosya izinleri özel bir türü" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Sahibi" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Diğer" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Metin" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Oluşturulan:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Çalıştır" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Dosya adı" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Dosya adı" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Yol:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Grup" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Son erişim" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Son değişiklik:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Son durum değişikliği:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Sekizli:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Sahibi" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Okuma" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Boyutu:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sembolik link için:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Yaz" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Adı" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Değer" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikleri" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Özellikleri" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Kapat" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "İptal" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Kapat" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Kapat" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Düzenle" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "&Liste kutusunu besle" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Dosya'ya git" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Veri Bul" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Yeni arama" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Başlat" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Göster" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ekle" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Kaydet" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Sil" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Yükle" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Kaydet" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Dosyaları bul" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Büyük/küçük harf duyarlı" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Tarihinden itibaren:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Bitiş tarihi:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Büyüklükleri:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "En büyük dosya boyutu" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Dosyadaki metni bul" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Metin içermeyen dosyaları bul" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Daha eski değil:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Dosya adının bir kısmını ara" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Kısaltılmış metin karekterleri" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Metni Değiştir" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Yeni Tarih:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Eski Tarih:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Arama eklentisi kullan" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Eklenti" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Değer" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Veri Bul" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kodlama:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Dosya Maskesi" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Directory" msgid "Start in &directory" msgstr "DoubleCommander dizininde ara" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Alt dizinleri ara" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Önceki arama(lar)" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Listeden kaldır" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Bulunan tüm öğeleri göster" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Görüntüleyicide göster" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Göster" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Gelişmiş" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Yükle/Kaydet" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Sonuçlar" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standart" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Bul" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Bul" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Büyük/küçük harf duyarlı" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Kısaltılmış metin karekterleri" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Şifre" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Kullanıcı adı:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Sabit bağlantı oluştur" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Mevcut hedef (nereye bağlantı noktası)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Bağlantı adı" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Bağlayıcı" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Kaydedin..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Öğe" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Dosya Adı" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Aşağı" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Aşağı" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Kaldır" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "&Sil" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Yukarı" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Yukarı" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Hakkında" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dosya adını komut satırına ekle" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Yolu ve dosya adını komut satırına ekle" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Komut satırına yolu kopyala" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Kullanılan alanı hesapla" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Dizin Değiştir" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Ana dizini değiştir" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Kök dizini Değiştir" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Sağlama toplamı hesapla..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Sağlama toplamı doğrula..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Boş günlük dosyası" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Günlüğü Temizle penceresi" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Içeriğine göre karşılaştır" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Bağlam menüsünü göster" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy F5" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopyala F5" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Dosya ad(ları) tam yolu ile kopyala" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Dosya ad(ları) Panoya Kopyala" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Onay istemeden dosya(ları) kopyala" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Aynı panele kopyala" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopyala" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Kullanılan alanı göster" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "K&es" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete F8" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Sil F8" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Dizin geçmişi" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Sık Kullanılanlar &klasörü" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit F4" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Düzenle F4" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Açıklamayı D&üzenle" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Yeni dosya Düzenle" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Dosya listesi üzerinde Yol alanını düzenle" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Panoları &Değiştir" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ç&ıkış" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Dosyaları Ayıkla" #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Dosya &ilişkileri" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Dosya(ları) birleştir" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Dosya Özelliklerini &Göster" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Dosyayı Parçala" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Komut satırında odakla" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Listedeki ilk öğeye ekleme noktasını(imleç) ayarla" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Listedeki son madde için imleci ayarlayın" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Sabit bağlantı oluştur" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&İçindekiler" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Panoları yatay bölme modu" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Klavye" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Sol &= Sağ" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Sol sürücü listesini aç" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Panoya &Yükle öğesini seç" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Dosya Yükle öğesini seç" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Yeni Dizin F7" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Ayni uzantıya &sahip olanların tümünü seç" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Seçimi tersine çevir" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Tümünü Seç" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Gruptan& seçimi kaldır" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Grup seç" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Tüm Seçimi Kaldır" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Pencereyi simge durumuna küçült" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Çoklu ¥iden adlandırma aracı" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Ağ &Bağlantısı..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Ağ &Bağlantısını kes" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hızlı &Ağ Bağlantısı..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Yeni Sekme" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Sonraki &Sekmeye Geç" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Açık" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Arşivi açmak için tekrar dene" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Dosya Çubuğu Aç" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Klasörü &Yeni Sekmede Aç" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Sanal Dosya Sistemi &listesi(VFS) aç" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "İşlemleri & Görüntüle" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Seçenekler..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Sıkıştırılmış Dosya(lar)" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Parçalamanın konumunu ayarla" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Yapıştır" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Bir önceki &sekmeye geç" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hızlı süzgeç" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hızlı ara" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hızlı Görünüm paneli" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Yenile" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move F6" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Taşı F6" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Dosya(ları) onay istemeden Yeniden adlandır/ Taşı" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Sekmeyi &Yeniden Adlandır" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Seçimi geri yükle" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Te&rs Sırala" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Sağ &= Sol" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Sağ sürücü listesini aç" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Komut istemi penceresini aç" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Seçimi &Kaydet" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Seçimi dosyaya &Kaydet" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Araştır" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Öznitelikleri &Değiştir" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Kilitli Dizinleri &Yeni Sekmede Aç" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Kilitli" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Kilitli, ancak &izin verilenler değiştirilebilir" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Açık" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Düğme menüsünü göster" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Komut satırı geçmişi göster" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu F9" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü F9" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Gizli/sistem &dosyalarını göster" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Özniteliklerine &Göre Sırala" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Tarihine &Göre Sırala" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Uzantısına &Göre Sırala" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Adına &Göre Sırala" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Boyutuna &Göre Sırala" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Etkinleştirme/devre dışı bırakma yoksayma listesi dosyaları için dosya adları" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Simgesel bağlantı &Oluştur" #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Hedef &= Kaynak" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Arşivi(leri)Test Et" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Sol penceredeki seçilen klasörü taşı" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "sağ penceredeki seçilen klasörü taşı" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Ayni uzantılı olanların tümünün seçimini kaldır" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption #, fuzzy #| msgid "View F3" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Göster F3" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Ziyaret edilen yolun etkin görüntüsünün geçmişini göster\"" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Git sonraki giriş tarihi" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Git önceki giriş tarihi" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Temizle" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit F10" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Çıkış F10" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Dizin" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "&Sil" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal F9" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Komut İstemi F9" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Önemli liste Dizini" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Sol paneldeki sağ panelin geçerli dizini göster" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Dizinin Başına Git" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Kök Dizinine Git" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ana dizinine git" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Önemli Liste Dizini" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Sağ paneldeki sol panelin geçerli dizini göster" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Yol" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "İptal" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopyala..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Bağlantı oluştur" #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Temizle" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Gizle" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Hepsini Seç" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Taşı..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Sembolik bağ oluştur" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Sekme seçenekleri" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Çıkış" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Eski haline getir" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Başlat" #: tfrmmain.mnualloperstop.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Bitiş" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Komutlar" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Yapılandır" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Dosyalar" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&İşaretle" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Ağ" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Görünüm" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Seçenekler" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Sekmeler" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Düzenle" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "İptal" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Kısayol tuşu" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ekle" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Yardım" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "Tanımla..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Make girişi:" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "Veya önceden tanımlanmış seçenek türünü seçin:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Yeni dizin oluştur" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Yeni klasör için ad girin" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Yeni Boyut" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Yükseklik :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG sıkıştırma kalitesi" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Genişlik:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Yükseklik" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Genişlik" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Uzantı" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Temizle" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Temizle" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Kapat" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Yapılandırma" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Sayaç" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Sayaç" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Tarih" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Tarih" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Sil F8" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Uzantı" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Uzantı" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Düzenle" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Tümünü geri yükle" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Kaydet" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Farklı Kaydet..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Tarih" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Tarih" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Çoklu yeniden adlandırma" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Etkinleştir" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Kısaltılmış metin karekterleri" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Yerine Kullan" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Sayaç" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Bul ve Yerine Koy" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Ön ayarlı" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Uzantı" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Bul..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Aralık" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Dosya &Adı" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Değiştir..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Başlangıç ​​Numarası" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Genişlik" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Eylemler" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Düzenle" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Eski dosya adı" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Yeni dosya adı" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Dosya Yolu" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Uygula" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Yardım" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Uygula" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopyala" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Sil" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Diğer..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Seçenekler:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Format ayrıştırma modu:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Sil:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Yol olmadan Çıkart:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "(ID)Kimlik konumu" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "KİMLİK(ID):" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID Kimlik arama aralığı (isteğe bağlı)" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Sıkıştır:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Şifre sorgu dizgisi:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Kendiliğinden açılan arşiv oluştur(Sfx):" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Deneme:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Ek" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Genel" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Gerektiğinde &Boyut,Tarih veya özniteliklerini değiştir" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Aşağıdaki &yolları ve alt dizinleri için:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Güncellemeleri arka planda yap" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Otomatik yenilemeyi devre dışı bırak" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Dosya listesini yenile" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Küçültüldüğünde simgeyi sistem tepsisine taşı" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "İkili mod" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Metin" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Değişiklik yap" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Değişiklik yap" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Uygula" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "&Düzenle" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Klasör sekmeleri" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Yapılandırma dosyasının konumu" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Çıkışta Kaydet" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Komut satırında ayarla" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Yeni" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Farklı Kaydet..." #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Kaydet" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Fazla renge izin ver" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Genel" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Gösterge sınırı" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Arka plan:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Arka plan 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Gösterge rengi:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Metin İmleci:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Yazı karakteri:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Boyut:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Metin rengi" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "İşaret rengi:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Sütun Ekle" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "İsim:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Yol:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Kaydet" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgctxt "tfrmoptionseditorcolors.textboldcheckbox.caption" msgid "&Bold" msgstr "&Kalın" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgctxt "tfrmoptionseditorcolors.textitaliccheckbox.caption" msgid "&Italic" msgstr "&Yatık" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgctxt "tfrmoptionseditorcolors.textunderlinecheckbox.caption" msgid "&Underline" msgstr "&Alt çizgi" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Hayır" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Kes" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Yapıştır" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Ekle" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Ekle" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Aşağı" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Düzenle" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Yeniden Adlandır" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Yukarı" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Eylemler" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Uzantıları" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Dosya türü" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Simge" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Eylem:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Komut" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Değişkenler:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Düzenle" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Düzenleyici´de aç" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Çıkış komutu Alın" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Açık" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Konsol penceresinde çalıştırın" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View F3" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Göster F3" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Görüntüleyicide açık" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Simge" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Fazla renge izin ver" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Gösterge sınırı" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Dosya ara" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Varsayılan" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Sınıflandır" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Ekle" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Yardım" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "Uygula" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "&Sil" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Şablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Sınıf maskesi" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Sınıf adı" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Yazı tipleri" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopyala" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Sil" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Kısayol tuşları" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Kısayol tuşu" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Değişkenler" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "tfrmoptionsicons.cbiconsexclude.caption" msgid "For the following &paths and their subdirectories:" msgstr "Aşağıdaki &yolları ve alt dizinleri için:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr "Dosya adının solundaki simgeleri göster" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Tümü" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Tüm ilişkili+&exe/LNK(yavaş)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "&Simge yok" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Seçilen isimler ile &tam yolu ekle" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Aşağıdaki dosya ve klasörleri Yoksay (görmezden gel):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "&Kaydet:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Panel işlemlerini arka planda göster" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Genel ilerlemeyi menü çubuğunda göster" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Göster &sürücü düğmeleri" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show tool&bar" msgstr "Düğme çubuğunu &göster" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Durum çubuğunu &göster" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Klasör sekmelerini göster" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr "Ekran düzeni" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "" #: tfrmoptionslog.cblogdelete.caption msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Günlük &hataları" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Günlük &başarılı işlemler" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Günlük dosyası İşlemi" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Birlikte aç..." #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Kaydırma" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Yapılandırma" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Etkinleştir" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Kaldır" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Ayarla" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya Adı" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Alternatif arama algoritmaları kullanmak için arama eklentilerine veya harici araçlara izin ver(\"yerini belirle\",vb.gibi)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya adı" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Arşivler ile çalışmak için sıkıştırma eklentileri kullanılabilir." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya adı" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "İçerik eklentilerine izin ver, genişletilmiş dosya ayrıntıları gibi mp3 etiketleri veya resim özniteliklerini dosya listelerinde görüntülemek için veya onları aramada kullan ve çoklu-yeniden adlandırma aracı" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya adı" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Dosya sistemi eklentileri işletim sistemi tarafından ulaşılmaz disklere veya allow one to displaygibi harici cihazlara erişim sağlar" #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya adı" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Görüntüleyici eklentilerine izin ver, dosya tipleri,resimler,elektronik tablolar, veritabanları vb. gibi.gösterilmesini sağlar(F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya adı" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&Başlangıç (Adı ilk yazdığınız karakterle başlamalıdır)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Bitiş (Noktadan önceki son karakter ile . uyumlu olmalıdır)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Hedef &paneli etkinleştir onun sekmelerinden birisini tıklayarak" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Sadece bir sekme olduğunda da sekme başlığı göster" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "tfrmoptionstabs.cbtabslimitoption.caption" msgid "&Limit tab title length to" msgstr "&Sekme başlık(alınlık) uzunluğunu sınırla" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Kilitli sekmeleri &yıldız işareti * ile göster" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Çoklu satır sekmeleri" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up ön planda yeni sekmede açar" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Geçerli sekmenin yanında yeni bir sekme ekle" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Klasör sekmeleri başlıkları" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "karakterler" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Hayır" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Komut:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Değişkenler:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Komut:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Değişkenler:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Komut:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Değişkenler:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "" #: tfrmoptionstoolbarbase.btndeletebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbarbase.btninsertbutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Yeni düğme ekle" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgctxt "tfrmoptionstoolbarbase.btnopencmddlg.caption" msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbarbase.btnstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.caption" msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.hint" msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgctxt "tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption" msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgctxt "tfrmoptionstoolbarbase.cbshowcaptions.caption" msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgctxt "tfrmoptionstoolbarbase.edtinternalparameters.hint" msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbarbase.gbgroupbox.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Görünüm" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbarbase.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Değişkenler:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbarbase.lblhotkey.caption msgctxt "tfrmoptionstoolbarbase.lblhotkey.caption" msgid "Hot key:" msgstr "" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbarbase.lblinternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Değişkenler" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Araç İpucu" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgctxt "tfrmoptionstoolbarbase.miaddallcmds.caption" msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgctxt "tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption" msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgctxt "tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption" msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgctxt "tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption" msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgctxt "tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption" msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrent.caption" msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttop.caption msgctxt "tfrmoptionstoolbarbase.miexporttop.caption" msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptobackup.caption" msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbarbase.miimportbackup.caption msgctxt "tfrmoptionstoolbarbase.miimportbackup.caption" msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbar.caption" msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbar.caption" msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgctxt "tfrmoptionstoolbarbase.miimporttcini.caption" msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgctxt "tfrmoptionstoolbarbase.misrcrplallofall.caption" msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgctxt "tfrmoptionstoolbarbase.misrcrplcommands.caption" msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgctxt "tfrmoptionstoolbarbase.misrcrpliconnames.caption" msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgctxt "tfrmoptionstoolbarbase.misrcrplparameters.caption" msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgctxt "tfrmoptionstoolbarbase.misrcrplstartpath.caption" msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgctxt "tfrmoptionstoolbarbase.rgtoolitemtype.caption" msgid "Button type" msgstr "" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Simge" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Uygula" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopyala" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Sil" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Şablon..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Diğer..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Araç İpucu'nu göster (Not sözleri)" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Sınıf ipucu:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Sınıf maskesi" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Gösterge rengi:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Yapılandır" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Sıkıştırılmış dosyalar" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Ayrı arşiv oluştur, &Bir seçili dosya/dizin başına" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Kendi kendine &açılan arşiv oluştur(SFX)" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Şifrele&mek" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "&Arşive taşı" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Çoklu disk arşivi" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "İlk TAR arşivi yerleştir" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ayrıca sıkıştırılmış yol adları (sadece özyineleme)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Dosya;Sıkıştırma dosya(lar)ına " #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Sıkıştırıcı" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Kapat" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Tümünü aç ve yürüt" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Aç ve yürüt" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Sıkıştırılmış dosyanın Özellikleri" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Öznitelikleri:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Sıkıştırma oranı:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Tarihi:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Yöntemi:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Orijinal boyutu" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Dosya:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Sıkıştırılmış boyutu:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Sıkıştırıcı:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Zaman:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Süzgeç" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Eklenti" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Değer" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&İptal" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Şablon..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Şablon..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "İptal" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "TAMAM" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "İptal" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "TAMAM" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Öznitelikleri Değiştir" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arşiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Oluşturulan:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Gizli" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Giriş:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Değişiklik yap" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Salt okunur" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Özyinelemeli" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Zaman Damgası özellikleri(geçerli tarih ve saat, ayarlı değerleri)" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikler" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikler" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption #, fuzzy #| msgid "(gray field means unchanged value)\"" msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gri alan değiştirilmemiş değer anlamına gelir)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Sahibi" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Metin gösterimi" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Yürüt" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy #| msgid "(gray field means unchanged value)\"" msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gri alan değiştirilmemiş değer anlamına gelir)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Sekizli:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Okuma" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Yazma" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "İptal" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "TAMAM" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Ayırıcı" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Boyut ve parça sayıları" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Hedef dizin" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Parça sayısı" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption #, fuzzy #| msgid "Gigabytes" msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "Gigabayt" #: tfrmsplitter.rbtnkilob.caption #, fuzzy #| msgid "Kilobytes" msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "Kilobayt" #: tfrmsplitter.rbtnmegab.caption #, fuzzy #| msgid "Megabytes" msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "Megabayt" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Yapı" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal Editor" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Gözden geçir" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption #, fuzzy #| msgid "Version %s" msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Çeviri Çağlar" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Sembolik bağlantı oluştur" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Mevcut hedef;bağlantı noktası ile gösterilen" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Bağlantı adı" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Kapat" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Karşılaştır" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Şablon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Adı" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Boyutu" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Tarih" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Tarih" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Boyutu" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Adı" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Karşılaştır" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Yeni ekle" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Değiştir" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Varsayılan" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "TAMAM" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Kaldır" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Ayarlama eklentisi" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content\"" msgid "De&tect archive type by content" msgstr "Arşiv türü içeriğini algıla" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Dosyaları silebilirsiniz" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Şifrelemeyexisting archives tfrmtweakplugin.cbpk_existing archive" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgctxt "tfrmtweakplugin.cbpk_caps_hide.caption" msgid "Sho&w as normal files (hide packer icon)" msgstr "Normal dosyalar olarak göster(Sıkıştırıcı simgesini gizle)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Sho&w as normal files (hide packer icon)" msgctxt "tfrmtweakplugin.cbpk_caps_mempack.caption" msgid "Supports pac&king in memory" msgstr "Normal dosyalar olarak göster(Sıkıştırıcı simgesini gizle)" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Supports pac&king in memory" msgid "Can &modify existing archives" msgstr "Bellek içi sıkıştırmayı destekler" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Can &modify exisiting archives" msgid "&Archive can contain multiple files" msgstr "Var olan arşivi değiştirebilirsiniz" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "&Archive can contain multiple files" msgid "Can create new archi&ves" msgstr "Arşiv birden fazla dosya içerebilir" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Can create new archi&ves" msgid "S&upports the options dialogbox" msgstr "Yeni arşivler oluşturabilirsiniz" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "S&upports the options dialogbox" msgid "Allow searchin&g for text in archives" msgstr "Seçenekler iletişim kutusunu destekler" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Allow searchin&g for text in archives" msgid "&Description:" msgstr "Metin arşivlerinde arama izni verir" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "&Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "D&etect string:" msgstr "Tanım:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "Dizi algıla:" #: tfrmtweakplugin.lblflags.caption #, fuzzy #| msgid "&Extension:Flags:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "Flags:" msgstr "Uzantı:Etiketler" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Adı:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Eklenti" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Eklenti" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Görüntüleyici Hakkında" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Panoya kopyala" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Çıkış" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Bul" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Tam Ekran" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Sonraki" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Önceki" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Yansıt(Aynala)" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Önizleme" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Güncelle" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgctxt "tfrmviewer.actrotate180.caption" msgid "+ 180" msgstr "" #: tfrmviewer.actrotate180.hint msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180 degrees" msgstr "" #: tfrmviewer.actrotate270.caption msgctxt "tfrmviewer.actrotate270.caption" msgid "- 90" msgstr "" #: tfrmviewer.actrotate270.hint msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate -90 degrees" msgstr "" #: tfrmviewer.actrotate90.caption msgctxt "tfrmviewer.actrotate90.caption" msgid "+ 90" msgstr "" #: tfrmviewer.actrotate90.hint msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate +90 degrees" msgstr "" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Kaydet" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Farklı Kaydet ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Ekran görüntüsü" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Tümünü Seç" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Ikili olarak göster&Bin dosyaları[0,1]" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Kitap olarak &göster" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "&Hex olarak göster(onaltılı sayı sistemi)" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Metin olarak &göster" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Kaydırma metin &olarak göster" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Teknik çizim" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Çek-Düzelt" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Geri Al" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Geri al" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Yakınlaştır" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Uzaklaştır" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Kırp" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Tam Ekran" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Vurgula" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Boya" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Kırmızı göz" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Yeniden boyutlandır" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Resimleri otomatik olarak sırayla göster(Slayt Gösterisi)" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Göster" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Düzenle" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodlama" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Dosya" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Resim" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Kalem" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Döndür" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Ekran görüntüsü" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Göster" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Başlat" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Dosya işlemleri" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "İptal" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "İptal" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Bağlantıları İzle" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Dizin mevcutsa" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&İptal" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Değişkenler:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Yapılandırma" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Şifrele&mek" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Dosya mevcutsa" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Yükseklik" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Genişlik" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Öznitelik" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Tarih" #: ulng.rscolext msgid "Ext" msgstr "Dahili" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Adı" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Boyutu" #: ulng.rsconfcolalign msgid "Align" msgstr "Hizala" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Altbaşlık" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "&Sil" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Alan içeriği" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Taşı" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Genişlik" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Sütunları Özelleştir" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopyala (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kodlama" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Iptal &et" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tümü" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Ekle" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&İptal" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "İçine &koplaya" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Hepsini içine &kopyala" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Hayır" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Hiçbiri" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&TAMAM" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Üzerine yaz" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Tüm dosyaların &üzerine yaz" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Yeniden Adlandır" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Yeniden dene" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Atla" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Tümünü &Atla" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Evet" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Dosya(ları) Kopyala" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Dosya(ları) Taşı" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Duraklat" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Başlat" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Hız %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Hız %s/s, kalan süre %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander İç metin editörü" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "Yeni.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Dosyaadı:" #: ulng.rseditnewopen msgid "Open file" msgstr "Dosya aç" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Geri" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Ara" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&İleri" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Değiştir" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Süzgeç" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Şablonu tanımla" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s Seviye(ler)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Tüm (sınırsız derinlik)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Yalnızca geçerli dizin" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Dizin %s mevcut değil!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Bulundu: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Arama Şablonunu Kaydet" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Şablon adı" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Taranan: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Tara" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Dosyaları bul" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Başlayın" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "%s %s içermez" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s boş" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Tarih/saat Erişimi" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Öznitelikleri" #: ulng.rsfunccomment msgid "Comment" msgstr "Açıklama" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Tarih/saat oluştur" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Uzantı" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Bağlantı" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Tarih/saat Son değiştirilme tarihi" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Adı" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Adı, uzantısı hariç" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Sahibi" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Yol" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Boyut" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Türü" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Sabit bağlantı oluşturma hatası." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Karşılaştır" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Düzenleyici" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Dosyaları bul" #: ulng.rshotkeycategorymain msgid "Main" msgstr "" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Çoklu yeniden adlandırma" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Göster" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maske seçimini kaldır" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maske seç" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Make girişi:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Özel sütunları yapılandır" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Eylemler" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Düzenle" #: ulng.rsmnueject msgid "Eject" msgstr "Çıkar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Monte et" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Yeni" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kullanılabilir ortam yok" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Açık" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Birlikte aç..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Eski haline getir" #: ulng.rsmnusortby msgid "Sort by" msgstr "Şuna Göre Sırala" #: ulng.rsmnuumount msgid "Unmount" msgstr "Kaldır" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Göster" #: ulng.rsmsgaccount msgid "Account:" msgstr "Hesap:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Arşiv komut satırı için ek değişkenler:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format, fuzzy #| msgid "You can not copy/move a file \"%s\"to itself!\"" msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Dosyayı \"kendisine!\" kopyalayamaz/taşıyamazsınız\"%s\"" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Dizin değişikliği [%s]başarısız oldu!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Tüm etkin olmayan sekmeler kaldırılsın mı?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Bu sekme (%s) kilitli! Yine de kapatılsın mı?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Çıkmak istediğinizden emin misiniz?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Seçilen %d dosyalar/dizinleri kopyala?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopyalanacakları\"%s\"seç?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Seçili %d dosyaları/dizinleri sil ?" #: ulng.rsmsgdelfldrt #, object-pascal-format, fuzzy #| msgid "Delete %d selected files/directories into trash can?\"" msgid "Delete %d selected files/directories into trash can?" msgstr "seçilen %d dosyaları/dizinleri çöp kutusuna at?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Seçilenleri sil \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Seçilenleri sil\"%s\" çöp kutusuna at?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Çöp kutusuna\"%s\" atılamıyor! Doğrudan sil?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Sürücü kullanılamıyo" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Dosya uzantısını girin:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Adını girin:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Arşiv verisinde CRC hatası" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Veri kötü" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Sunucuya bağlanamıyor \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Dosya %s kopyalanamıyor %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format, fuzzy msgid "There already exists a directory named \"%s\"." msgstr "Orada zaten o adda bir dizin var \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Tarih %s desteklenmiyor" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Dizin %s zaten var!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "İşlev kullanıcı tarafından iptal edildi" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Dosya kapatma hatası" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Dosya oluşturulamıyor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Daha fazla arşiv dosyası yok" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Varolan dosyayı açamıyor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Dosya okuma hatası" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Dosya yazma hatası" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Dizin oluşturulamıyor %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Geçersiz bağlantı" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Dosya bulunamadı" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Yeterli bellek yok" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "İşlev desteklenmiyor!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntax(Sözdizim)-normal ifadede hata!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Dosya yeniden %s adlandırılamıyor %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Dosya kaydedilemiyor" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Öznitelikleri ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Tarih/saat ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Arabellek çok küçük" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Sıkıştırma için dosya miktarı çok fazla " #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arşiv biçimi bilinmiyor" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Dosya %s değişikliğini,kaydet?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Dosya %s zaten var üzerine yazılsın mı?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Dosya işlemleri etkin" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Bazı dosya işlemleri henüz bitmiş değil .Double Commander´ın kapatılması veri kaybına neden olabilir!" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Dosya %s salt okunur olarak işaretlenmiş. Silinsin mi?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Dosya boyutu \"%s\" hedef dosya sistemi için çok büyük!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Klasör %s zaten var, üzerine yazılsın mı?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Sembolik bağlantıyı izle\"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Yol" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand #, fuzzy msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Komut:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Adı:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Geçersiz dosya adı" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Geçersiz seçim." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Dosya listesi yükleniyor..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Dosyayı kopyala %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Dosya Sil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Hata:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Dosya ayıkla %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Bilgi" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Bağlantı oluştur %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Dizin oluştur %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Dosyayı Taşı %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Doyayı Sıkıştır %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Dizini Kaldır %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Bitmiş:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Sembolik bağlantı oluştur %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Dosya bütünlüğünü sına %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Ana şifre" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Lütfen ana şifreyi girin:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Yeni dosya" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Bir Sonraki birim açılmamış" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Dosya seçilmedi." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Hedef sürücüde yeterli boşluk yok.Yine de devam edilsin mi?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Hedef sürücüde yeterli boşluk yok. Yeniden Dene?" #: ulng.rsmsgnotdelete #, object-pascal-format, fuzzy msgid "Can not delete file %s" msgstr "Dosya silinemiyor %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Uygulanmamış." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Şifre" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Lütfen şifreyi girin.:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Şifre (Güvenlik Duvarı):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Sil %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Ön ayar \"%s\" zaten var.Üzerine yazılsın mı?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Seçilen %d dosya(ları)/Dizinleri/Yeniden adlandır?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Seçilenleri Taşı/Yeniden adlandır\"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Lütfen,değişiklikleri uygulamak için Double Commander´ı yeniden başlatın" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Lütfen yalnızca sağlama toplamı dosyaları seçin!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Lütfen bir sonraki parçanın konumunu belirtin" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Birim kümesi etiketi" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Sekmeyi yeniden adlandır" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Yni sekme adı" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Hedef yol" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Çok fazla dosya seçili." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Kullanıcı adı:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Kullanıcı adı (Güvenlik duvarı):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Birim etiketi:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Lütfen birimin boyutu girin:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Tam sil %d Seçilen dosya/dizinler?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Tam silme Seçili \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Sayaç" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Tarih" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Uzantı" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Adı" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Değişiklik yok;TÜMÜ BÜYÜK HARF;tümü küçük harf;İlk karakter büyük harfle;Her kelimeyi büyük harflerle" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Çoklu yeniden adlandırma" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Karakter konumu x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Karakter konumu x ile y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Yöntem sayma" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Gün" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Gün (2 basamaklı)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Haftanın günü (kısa, Örneğin, \"Prtesi\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Haftanın günü (uzun, Örneğin, \"Pazartesi\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Uzantı" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Saat" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Saat (2 basamaklı)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Dakika" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Dakika (2 basamaklı)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Ay" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Ay (2 basamaklı)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Ay Adı (kısa, Örneğin, \"Şbat\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Ay Adı (Uzun, Örneğin, \"Şubat\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Adı" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Saniye " #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Saniye (2 basamaklı)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Yıl (2 basamaklı)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Yıl (4 basamaklı)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Eklentiler" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Tarih" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Teknik çizim" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Ağ" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Diğer" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "İptal edildi" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Hesaplama" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sil" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "Bitmiş" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "Başlatılmadı" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Duraklatıldı" #: ulng.rsoperpausing msgid "Pausing" msgstr "Duraklat" #: ulng.rsoperrunning msgid "Running" msgstr "Çalışıyor" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "Başlangıç" #: ulng.rsoperstopped msgid "Stopped" msgstr "Durmuş" #: ulng.rsoperstopping msgid "Stopping" msgstr "Durdur" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Dosya kaynağına erişim için bekleniyor" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Kullanıcı yanıtı bekleniyor" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "" #: ulng.rsoperworking msgid "Working" msgstr "" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arşiv tipi adı:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Eklentiyi ilişkilendir \"%s\" ile:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "İlk; Son;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Uzantıyı gir" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizefloat msgid "float" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Kısayol tuşu" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Kısayol tuşları" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Değişkenler" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Kısayol kullanımı" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Kısayol %s zaten kullanılıyor." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Bunu değiştir %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format, fuzzy, badformat #| msgid "used by" msgid "used for %s in %s" msgstr "tarafından kullanılan" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Sıkıştır" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Otomatik Yenileme" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Davranış" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Renkler" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Sütunlar" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Yapılandırma" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Önemli Liste Dizini" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Dosya ilişkileri" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Yeni" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Dosya işlemleri" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Dosya penceresi" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Dosya ara" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Dosya türleri" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Klasör sekmeleri" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Yazı tipleri" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Kısayol tuşları" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Simge" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Yoksayma listesi" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "lisan " #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Düzen" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Günlük" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Çeşitli" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Çoklu yeniden adlandırma" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Eklentiler" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hızlı arama/süzgeç" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Komut İstemi F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Araçlar" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Araç ipuçları" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Sol düğme;Sağ düğme;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Eklenti %s aşağıdaki uzantıya zaten atanmış :" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Devre dışı" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Etkinleştir" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Etkin" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Dosya adı" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Adı" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Kayıtlı" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod #, fuzzy #| msgid "\"Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetik,sıralamayı hesaba katma;Doğal sıralama: alfabetik ve numaraları" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Üst;Alt;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Sınıf adı" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Erişim haklarını değiştirmek mümkün değil \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Sahibini değiştiremezsiniz \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Dosya" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dizin" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Adı konmuş iletişim kanalı" #: ulng.rspropssocket msgid "Socket" msgstr "Terminal adresleme yapısı" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Özel blok aygıtları" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Özel karakter çevre birimi" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Sembolik bağlantı" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Bilinmeyen tür" #: ulng.rssearchresult msgid "Search result" msgstr "Arama sonucu" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Ara" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Bir dizin seçin" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tüm" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes #, fuzzy #| msgid "bayt" msgid "Bytes" msgstr "bayt" #: ulng.rssizeunitgbytes #, fuzzy #| msgid "Gigabayt" msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabayt" #: ulng.rssizeunitkbytes #, fuzzy #| msgid "Kilobayt" msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobayt" #: ulng.rssizeunitmbytes #, fuzzy #| msgid "Megabayt" msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabayt" #: ulng.rssizeunittbytes #, fuzzy #| msgid "Terabayt" msgid "Terabytes" msgstr "Terabayt" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Dosya: %d, endeks : %d, Boyut: %s (%s bayt)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Hedef dizini oluşturulamadı" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Yanlış dosya boyutu biçimi!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Dosya parçalanması yapılamıyor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Parçaların sayısı, 100 'den fazla! Devam edilsin mi?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Dizin Seç:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Sembolik bağ oluşturma hatası." #: ulng.rssyndefaulttext msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Gün(ler)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "saat(ler)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Dakika (lar)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Ay(lar)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Saniye (ler)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Hafta(lar)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Yıl(lar)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Karşılaştır" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Araç Düzenleyicisi" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Komut İstemi F9" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Göster" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Bu hatayı düzeltebilmemiz için lütfen bu hatayı bildirin Ne yaptığınızın bir açıklaması ve aşağıdaki dosya: %sdevam etmek için %sbasın %s ,iptal etmek için programı tıklayın" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Ağ" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander dahili Görüntüleyici" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodlama" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Yeni Boyut" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s bulunamadı!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.sr@latin.po�����������������������������������������������������0000644�0001750�0000144�00001326145�15104114162�020435� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2015-01-06 17:20+0100\n" "Last-Translator: Саша Петровић <salepetronije@gmail.com>\n" "Language-Team: srpski <xfce4@xfce4.org>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" "X-Language: sr_RS\n" "X-Native-Language: srpski\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Upoređujem... %d%% (ESC za otkazivanje)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Pronađeno je datoteka: %d (istovetnih: %d, različitih: %d, jedinstvenih levo: %d, jedinstvenih desno: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Sa leva na desno: Umnoži %d datoteka, ukupne veličine %d bajta" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Sa desna na levo: Umnoži %d datoteka, ukupne veličine %d bajta" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Izaberite obrazac..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "P&roveri slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Umnoži& svojstva" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Umnoži v&lasništvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Umnoži v&reme i datum" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Ispravi v&eze" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Poništi osobinu samo za &čitanje" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "I&zuzmi prazne fascikle" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&ledi veze" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Čuvaj slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Šta činiti kada se ne mogu podesiti vreme, svojstva, itd." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Koristi obrazac datoteke" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Kada &fascikla postoji" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Kada &datoteka postoji" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Kada se ne& mogu postaviti osobine" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nema obrasca>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Umnoži u ostavu isečaka" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Izgrađen" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Početna stranica:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Prepravka" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Izdanje" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Poništi" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Izaberite svojstva" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Ostava" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Sa&žmano" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Fascikla" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Šifrovano" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skriveno" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Samo za &čitanje" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "P&roređeno" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Simbolička veza" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Privremeno" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Svojstva NTFS " #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Opšta svojstva" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostalo" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Kao t&ekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Izračunaj zbirnu proveru" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Obrazuj posebnu datoteku zbirne provere za svaku datoteku" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Sačuvaj zbirnu(e) proveru(e) u:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Zbirna provera..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Šifrovanje" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "D&odaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otk&aži" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Po&veži se" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Upravnik veza" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Poveži se na:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Dodaj u zakazano" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Mogućnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sačuvaj ove mogućnosti kao podrazumevane" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Umnoži datoteku(e)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Sačuvaj opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Napomena datoteke/fascikle" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Uredi& napomenu za:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Šifrovanje:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samostalno upoređivanje" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binarno" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Umnoži skup desno" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Umnoži skup desno" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Umnoži skup levo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Umnoži skup levo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Nalepi" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Ponovi" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Označi &sve" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Izlaz" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "Pronađi&" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Pronađi" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Nađi sledeće" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Nađi sledeće" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Zameni" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Zameni" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Idi na liniju" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Zanemari veličinu slova" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Zanemari praznine" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Nastavi klizanje" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Razlika linija" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Sledeća razlika" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Sledeća razlika" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otvori levo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otvori desno..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Oboji pozadinu" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Učitaj ponovo" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ponovo učitaj" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Sačuvaj kao..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Sačuvaj kao..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Sačuvaj levo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sačuvaj levo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sačuvaj levo kao..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sačuvaj levo kao..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sačuvaj desno" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sačuvaj desno" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sačuvaj desno kao..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sačuvaj desno kao..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Uporedi" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Uporedi" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Šifrovanje" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Šifrovanje" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Uporedi datoteke" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Radnje" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Ši&frovanje" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Mogućnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj novu prečicu nizu" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Odustani" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Ukloni poslednju prečicu iz niza" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Samo za sledeća poklapanja" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Odrednice (svaka u posebnoj liniji):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Prečice:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O radnji" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Postavke" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Postavke" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Umnoži" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Iseci" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Pronađi" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Pronađi" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Nađi sledeće" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Nađi sledeće" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Zameni" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Zameni" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Označi &sve" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Označi sve" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zatvori" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Izađi" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Napusti" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otvori" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Otvori" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Učitaj ponovo" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Sačuvaj" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Sačuvaj &kao..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Sačuvaj kao" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Uređivač" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Po&moć" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Ši&frovanje" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otvori kao" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Sačuvaj kao" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Isticanje sintakse" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Završetak linije" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&U redu" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "O&setljivo na veličinu slova" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Traži od umetnutog znaka" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regularni izrazi" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Samo označeni tekst&" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Samo cele reči" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "&Mogućnosti" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Zameni sa:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Traži:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Raspakuj datoteke" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Raspakuj imena putanje ako su sačuvana u datotekama" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Raspakuj svaku od arhiva u &posebnu podfasciklu (po imenima arhiva)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "P&repiši postojeće datoteke" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "U &fasciklu:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Izvuci datoteke na osnovu poklapanja:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Lozinka za šifrovane datoteke:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Sačekajte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ime datoteke:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na „Zatvori“ ako se privremena datoteka ne može izbrisati. " #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Na površ" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Pregledaj sve" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "&Trenutna radnja:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ka:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Sadrži:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Napravljeno:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Putanja:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Udruženje" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Poslednji pristup:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Poslednja izmena:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Poslednja izmena stanja:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlasnik&" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitanje" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Veza ka:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Vrednost" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Prikljuci" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zatvori" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Otkaži" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Zatvori" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Zatvori" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Uredi&" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Dovod &spisku" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Idi na datoteku" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Pronađi podatke" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Poslednja pretraga" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nova pretraga" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Početak" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Pregled" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Sačuvaj" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "U&čitaj" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Sačuvaj&" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sačuvaj kao „Početak u fascikli“" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ako se sačuva, „Početak u fascikli“ će biti povraćen prilikom učitavanja obrasca. Upotrebite to ako želite da primenite pretragu na određenu fasciklu" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Koristi obrazac" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Pronađi datoteke" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "O&setljivo na veličinu slova" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Od &datuma:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Do &datuma:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Od &veličine:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Do &veličine:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Pronađi &tekst u datoteci" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Prati &simboličke veze" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Pronađi datoteke koje ne& sadrže tekst" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ne& starije od:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Traži& po delu imena datoteke" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Zameni& sa" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Označenim fasciklama i &datotekama" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Od &vremena:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Do vre&mena:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Koristi priključak za pretragu:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Unesite imena fascikli koje bi trebalo da budu isključene iz pretrage odvojene znakom „;“" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Unesite imena datoteka koje bi trebalo da budu isključene iz pretrage odvojene znakom „;“" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Unesite imena datoteka razdvojena znakom „;“" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Priključak" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Vrednost" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Fascikle" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Datoteke" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Pronađi podatke" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Odrednice&" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Šifrovanje:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "I&zuzmi podfascikle" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Izuzmi datoteke" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Maska datoteke" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Počni u &fascikli" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "traži u &podfasciklama:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Prethodne pretrage:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Mogućnosti" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Ukloni sa spiska" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Prikaži sve pronađene stavke" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Prikaži u pregledniku" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Pregled" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Napredno" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Učitaj/Sačuvaj" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Prikljuci" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Izlazi" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Obično" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Pronađi&" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Pronađi" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "O&setljivo na veličinu slova" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regularni izrazi" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Lozinka:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Korisničko ime:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Napravi čvrstu vezu" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će veza biti usmerena" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Uvezi sve!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Uvezi izabrano" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Izaberite stavke koje želite da uvezete" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Klikom na podizbornik će se izabrati ceo izbornik" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Držite KTRL i kliknite na stavke radi izbora više njih" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Usmerivač" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Sačuvaj u..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Stavka" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Ime datoteke" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dole&" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dole" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Obriši" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&gore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Gore" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&O programu" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dodaj ime datoteke u naredbenu liniju" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Dodaj putanju i ime datoteke u naredbenu liniju" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Umnoži putanju u naredbenu liniju" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Sažeto" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Sažeti pregled" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Izračunaj zauzeće prostora" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Promeni fasciklu" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Pređi na domaću fasciklu" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Pređi u roditeljsku fasciklu" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Pređi u korenu fasciklu" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Računanje zbirne& provere..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Provera zbira..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Očisti datoteku dnevnika" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Očisti prozor dnevnika" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Zatvori &sve kartice" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Zatvori karticu" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Sledeća naredbena linija" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Postavi sledeću naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Prethodna naredbena linija" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Postavi prethodnu naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Potpuno" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Pregled u vidu stubaca" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Uporedi po &sadržaju" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Uporedi fascikle" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Uporedi fascikle" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska fascikli" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Prikaži priručni izbornik" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Umnoži" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Umnoži sve prikazane &stupce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Umnoži potpunu putanju sa imenima datoteka" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Umnoži imena datoteka u ostavu isečaka" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Umnoži datoteke bez pitanja za potvrdu" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Umnoži u istu površ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Umnoži" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Prikaži zauzeće memorije" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Iseci" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Istorija fascikle" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Brzi spisak &fascikli" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Uredi &napomenu..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Uredi novu datoteku" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Uredi polje putanje iznad spiska" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zameni površi" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Napusti" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Izvuci datoteke..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Pridruživanje &datoteka..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Spoji datoteke..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Prikaži svojstva &datoteka" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Podeli& datoteku..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Ravan prikaz" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Žiža na naredbenu liniju" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi pokazivač na prvu datoteku spiska" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi pokazivač na poslednju datoteku spiska" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Napravi &čvrstu vezu..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Sadržaj" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vodoravan prikaz površi" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatura" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levo &= Desno" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otvori spisak levog uređaja" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Učitaj sadržaj ostave isečaka" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Učitaj izbor iz datoteke..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Učitaj kartice iz datoteke" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Napravi &fasciklu" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Označi sve sa istim nastavkom&" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Obrni izbor" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Označi sve" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Poništi izbor &skupa..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Izaberi &skup..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Odznači sve" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Umanji prozor" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Pribor za masovno &preimenovanje" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Uspostavi mrežnu &vezu..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Prekini mrežnu &vezu" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Brza mrežna veza..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Novi list" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Pređi na &sledeći list" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Pokušaj da otvoriš skladište" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otvori datoteku sa trake" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otvori &fasciklu u novom listu" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otvori &VFS spisak" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Preglednik &napretka radnji" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Mogućnosti..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Skladišti datoteke..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Podesite položaj deobe" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Prilepi" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Pređi na &prethodni list" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Brzi propusnik" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Brza pretraga" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Površ za brzi pregled" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Osveži" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Premesti" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Premeštaj i preimenuj datoteke bez pitanja za potvrdu" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Preimenuj list" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Povrati izbor" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Obrnuti redosled" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Desno &= levo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvori spisak desnog uređaja" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Pokreni u &terminalu" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Sačuvaj izbor" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sačuvaj &izbor u datoteku..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Sačuvaj kartice u datoteku" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Traži..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Promeni &svojstva..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zaključano sa fasciklama otvorenim u novom &listu" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Obično" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zaključano" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zaključeno sa dozvolom izmene &fascikli" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otvori koristeći pridruživanje datoteka" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Prikaži izbornik dugmeta" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "prikaži istoriju naredbi" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Izbornik" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Prikazuj &skrivene i sistemske datoteke" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Poređaj po &svojstvima" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Poređaj po &datumu" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Poređaj po &nastavku" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Poređaj po &imenu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Poređaj po &veličini" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Omogući/onemogući prikaz zanemarenih datoteka sa spiska" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Napravi simboličku &vezu..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Uskladi fascikle..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cilj &= izvor" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Proveri skladište" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Umanjene sličice" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pregled umanjenih sličica" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Premesti fasciklu pod pokazivačem na levi prozor" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Premesti fasciklu pod pokazivačem na desni prozor" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odznači sve sa istim nastavkom&" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Pregled" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Prikaži istoriju posećenih putanja pod ovakvim pregledom" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Idi na sledeću stavku istorije" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Idi na prethodnu stavku istorije" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Posetite Veb stranicu Double Commander-a" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Briši potpuno" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Izlaz" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Fascikla" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Prikaži trenutnu fasciklu sa desne površi na levu površ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Idi u domaću fasciklu" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Idi u korenu fasciklu" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Idi u roditeljsku fasciklu" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Prikaži trenutnu fasciklu sa leve površi na desnu površ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Putanja" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Umnožavanje..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Stvaranje veze..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Očisti" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Sakrij" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Premesti..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Stvaranje simboličke veze..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Mogućnosti lista" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Izlaz&" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Povrati" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Početak" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Naredbe" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Postavke" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Datoteke&" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomoć&" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Oznaka&" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Mreža" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Prikaži&" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Mogućnosti" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Listovi&" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&U redu" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoć" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Prečica" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoć" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Opiši&..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Osetljivo na veličinu slova" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Unesi masku:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ili& odaberi predodređenu vrstu izbora:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Napravi novu fasciklu" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Unesite& ime nove fascikle:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nova veličina" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Visina :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kakvoća sažmanosti JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Širina :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Visina" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Očisti" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Očisti" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "Zatvori&" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Postavke" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Izbriši" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Uredi&" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Prikljuci" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Prikljuci" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Pre&imenuj" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Poništi sve" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Sačuvaj kao..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Razvrstavanje" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Vreme" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Vreme" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Osetljivo na veličinu slova" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Omogući&" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regularni izrazi" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Koristi& zamenu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Nađi i zameni" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Obrasci" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Nastavci&" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Pronađi&..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Međuvreme" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Ime datoteke" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Zameni&..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Početni broj" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Širina&" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Radnje" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Uredi&" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Staro ime datoteke" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo ime datoteke" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Putanja datoteke" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Izaberite program" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Prilagođena naredba" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Sačuvaj pridruživanje" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Postavi izabrani program kao podrazumevani program" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Vrsta datoteke koja će biti otvorena: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Višestruka imena datoteka" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Višestruke adrese" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jedno ime datoteke" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jedna adresa" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Primeni&" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Pomoć" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Izaberite jednu podstranicu, ova stranica ne sadrži ni jednu postavku." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Dodaj&" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Umnoži" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Izbriši&" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Ostalo..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Preimenuj&" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Mogućnosti:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Način rada raščlanjivanja oblika:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Omogućen&" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Način otklanjanja& grešaka" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Prikazuj& izlaz iz konzole" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Dodajem&:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Program za sažimanje:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Izbriši:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Opis&:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Nastavci&:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Izdvoji&:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Izdvoji bez putanje:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Položaj LB:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "LB:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Opseg traženja LB:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Listaj&:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Programi za sažimanje:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Listanje i dovršavanje& (mogućnost):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Oblik& listanja:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Početak listanja& (mogućnost):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Niska upita lozinke:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Obrazuj samoizdvajajuće skladište:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Proba:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Samostalno& podesi" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Dodatno" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Opšte" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Prilikom izmena &veličine, datuma ili svojstava" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sledeće putanje& i njene podfascikle:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Prilikom stvaranja datoteka, brisanja ili preimenovanja" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Kada je program u pozadini&" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Onemogući samostalno osvežavanje" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Osveži spisak datoteka" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Uvek prikazuj ikonu u obaveštajnoj oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Samostalno skrivaj& otkačene uređaje" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Prilikom umanjenja premesti ikonu u obaveštajnu oblast" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Dozvoli samo jedan primerak DN u isto vreme" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ovde možete uneti jedan ili veše uređaja ili tačaka kačenja odvajajući ih znacima „;“" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Crni spisak uređaja" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Koristi ukazivač sa prelivom" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binarno" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Pozadinska boja &ukazivača:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Čeona boja &ukazivača:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Izmenjeno:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Izmenjeno:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Uspeh:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Opseci tekst na širinu stupca" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Vodoravne& linije" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Uspravne& linije" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Samostalno& popuni stupce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Prikazuj mrežu" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Samostalno uklopi veličinu stubaca" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Samostalno uklopi veličinu stupca:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Uredi&" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Istorija naredbi&" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Istorija fascikli&" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Istorija maski datoteka&" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Kartice datoteka" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sačuvaj& postavke" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Istorija pretrage& i zamene" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Fascikle" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Putanja datoteka postavki" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Sačuvaj po izlazu" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Uključi naredbenu liniju" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Fascikla programa& (prenosno izdanje)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Domaća fascikla korisnika&" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Sačuvaj kao" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Opšte" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Pozadina:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadina 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "&Columns view:" msgstr "Podesi stupce za sistem datoteka:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Boja pokazivača:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Pokazivač teksta:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Slovni lik:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veličina:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Boja teksta:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Boja označavanja:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj stubac" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Dodaj umnožak označene stavke" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Dodaj razdvajač" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Dodaj fasciklu za kucanje" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Ubaci fasciklu za kucanje" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Dodavanje..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Ostava..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Brisanje..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Izvoz..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Uvoz..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Umetanje..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Razno..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Neke radnje za odabir odgovarajućeg cilja" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Prilikom dodavanja fascikle, dodaj i cilj" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Uvek širi stablo fascikli" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy, badformat #| msgid "Show only valid environment variables" msgid "Show only &valid environment variables" msgstr "Prikazuj samo ispravne %env_var%" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Pri iskačućim prozorima prikaži [i putanju]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Brzi spisak fascikli (preurediti prevlačenjem i spuštanjem)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Putanja:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "Cilj:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...trenutni stupanj stavki koje su samo označene" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih fascikli radi utvrđivanja koje stvarno postoje" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih fascikli i ciljeva radi utvrđivanja koji stvarno postoje" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "u datoteku spiska brzih fascikli (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Izbornik probe spiska brzih fascikli" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "iz datoteke brzog spiska fascikli (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "iz „wincmd.ini“ TC-a" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Povrati spisak brzih fascikli iz ostave" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Sačuvaj u ostavu trenutni spisak brzih fascikli" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...sve, od A do Š!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...pojedinačni skup stavki isključivo" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Proveri izlazni izbornik" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Dodatak iz glavne površi:" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Prikazuj& prozorče potvrde posle otpuštanja" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Prikazuj sistem datoteka" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Prikazuj slobodan& prostor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Prikaži natpis&" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Spisak uređaja" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Vrati na podrazumevano" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Svojstva stavke" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Oznaka tekstom&" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Koristi (i uredi) opšte& postavke sheme" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Koristi mesne& postavke sheme" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Podebljan" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Uključi" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Iskošeno" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Uključi" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Pre&crtaj" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "U&ključi" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podv&učeno" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "U&ključi" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Dodavanje..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Brisanje..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Umetanje..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Uvek širi stablo fascikli" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "razdvajač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podizbornik" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Dodaj podizbornik" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...trenutni stupanj stavki koje su samo označene" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Iseci" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "obriši sve!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podizbornik i svi njegovi činioce" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "samo podizbornik, ali zadrži činioce" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "označena stavka" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...sve, od A do Š!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Razvrstaj pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Proveri izlazni izbornik" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Dodaj&" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Dole" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Uredi" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Pre&imenuj" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Gore" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Radnje" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Nastavci" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Vrste datoteka" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikonica" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Radnja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Naredba:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvori u uređivaču" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Dobavi izlaz iz naredbe" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otvori" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Pokreni u terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Pregled" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvori u pregledniku" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikonice" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Prikazuj prozor potvrde za:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Umnoži& postupak" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Izbriši& postupak" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Premesti u smeće (dugme shift poništava ovu postavku)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Radnja slanja u smeće" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Poništi oznaku samo za čitanje" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Radnja premeštanja&" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Obrađuj napomene sa datotekama i fasciklama" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Označi ime datoteke& bez nastavka prilikom preimenovanja" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Prikazuj karticu površi odabira u prozoru za umnožavanje premeštanje" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Zanemari greške radnji nad datotekama i upisuj ih u prozoru dnevnika" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Izvršavanje radnji" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Korisničko sučelje" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Veličina ostave za radnje nad datotekama (u KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Prikazuj početni napredak radnji u" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Broj prolaza potpunog brisanja:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Koristi trepćući pokazivač" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Koristi obrnuti odabir" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "P&ozadina:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "P&ozadina 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Boja pokazivača&:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Pokazivač teksta&:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Osvetljenje neradne kartice" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Boja označavanja&:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Boja teksta&" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Pretraga& po delu imena datoteke" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Pretraga datoteka" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Koristi kartu memorije za pretrage po tekstovima" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Koristi tok za pretrage po tekstovima" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Podrazumevano" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Oblikujem" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ređanje" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Osetljivo na &veličinu slova" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Neispravan oblik" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Oblik datuma i vremena:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Oblik veličine& datoteka:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Umetni& nove datoteke:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Raspored fascikli:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Način raspoređivanja:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Premesti osvežene datoteke:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoć" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Nemoj da učitavaš spisak datoteka dok se kartica ne pokrene" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Prikazuj& uglaste zagrade oko fascikli" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Istakni& nove i osvežene datoteke" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogući &preimenovanje na mestu pri dvokliku na ime" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Učitaj spisak &datoteka u posebnom procesu" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Učitavaj ikone nakon& spiska datoteka" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Prikaži sistemske i skrivene datoteke" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Prilikom odabira datoteka pomoću <SPACEBAR>, pređi na sledeću datoteku ( kao i sa <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Obriši" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Boje vrsta datoteka (rasporedite ih povlačenjem i &spuštanjem)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Svojstva& vrste:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Boja vrste&:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Maska vrste&:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Ime &vrste:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Slovni likovi" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Dodaj prečicu&" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Umnoži" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Obriši" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Izbriši& prečicu" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Uredi& prečicu" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Propusnik&" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Vrste&:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Naredbe&:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Datoteke prečica&:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Naredba" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Naredba" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Prečice" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Prečica" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Odrednice" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sledeće &putanje i njihove podfascikle:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Prikazuj ikonice radnji u izbornicima&" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Prikazuj preklapajuće& ikonice, npr. za veze" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Onemogući naročite ikonice" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Veličina ikonica" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Prikazuj ikonice levo od imena datoteka" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Sve&" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Sve povezane + &EXE/LNK (sporo)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez& ikonica" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Samo &uobičajene ikonice" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Dodaj& označena imena" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Dodaj označena imena sa &potpunim putanjama" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Zanemari& (ne prikazuj) sledeće datoteke i fascikle:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Sačuvaj u:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Leva& i desna strelica menja fasciklu (kretanje kao u Linksu)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Kucanje" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Menja+slova&:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ktrl+menja+slova:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Slova:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ravno &sučelje" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Prikazuj ukazivač slobodnog prostora na natpisu uređaja" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Prikazuj prozor dnevnika&" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Prikazuj površ radnje iz pozadine" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Prikazuj uobičajeni napredak u traci izbornika" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Prikazuj naredbenu liniju&" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Prikazuj trenutnu fasciklu" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Prikazuj dugmiće uređaja&" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Prikazuj natpis slobodnog prostora&" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Prikazuj dugme spiska uređaja" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Prikazuj dugmiće radnji" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Prikazuj glavni& izbornik" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Prikazuj traku dugmadi" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Prikazuj natpis malog slobodnog prostora" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Prikazuj traku stanja&" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Prikazuj& zaglavlje kartice za zaustavljanje" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Prikazuj kartice fascikle" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Prikazuj prozor terminala&" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Prikazuj dve trake dugmadi uređaja (stalne širine, iznad prozora)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Raspored na ekranu" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Sažmi/izvuci" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Umnoži/premesti/napravi vezu/simboličku vezu" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Napravi/Izbriši fascikle" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Dnevnik grešaka" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Napravi& datoteku dnevnika:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Unosi u dnevnik poruke podataka&" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Unosi u dnevnik uspešne& radnje" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Priključci &sistema datoteka" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Datoteka dnevnika radnji nad datotekama" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Upisuj radnje u dnevnik" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stanje radnje" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Ukloni umanjene sličice nepostojećih datoteka" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Uvek idi u& koren uređaja prilikom menjanja uređaja" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Prikazuj poruke upozorenja (samo dugme „U redu“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Čuvaj umanjene sličice u ostavi" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Umanjene sličice" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "tačke" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "H" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Veličina &umanjenih sličica:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Odabir mišem" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otvori sa" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Klizanje" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Izbor" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Način:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linija po linija" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linija po linija &sa pomeranjem pokazivača" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stranica po stranica" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "D&odaj" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Podesi&" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Omogući" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Lickaj" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Opis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Priključci &pretrage omogućuju zamenske algoritme pretrage, ili spoljne alate (kao što je „locate“, itd.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Priključci za sažimanje se upotrebljavaju za rad sa arhivama" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radni" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Priključci za sadržaje se upotrebljavaju za proširenje prikaza pojedinosti datoteka kao što su mp3 oznake ili svojstva slika u spiskovima datoteka, ili se koriste u priključcima pretrage i alatima za višestruko preimanovanje" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Priključci sistema datoteka& omogućavaju pristup radnjama sa diskovima koje nisu dostupne iz operativnog sistema ili spoljnjim uređajima ko što su Palm i džepni računar." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Priključci za pregled omogućavaju prikaz oblika datoteka kao što su slike, tabele, baze podataka itd. u pregledniku (F3, Ktrl+Ku)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Počinje sa (ime mora da počinje prvim otkucanim znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Završava se sa (poslednji znak pre otkucane tačke . mora da se poklapa)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Potpuno slaganje imena" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Veličina slova pretrage" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Traži ove stavke" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Pokreni ciljnu površ& pri kliku na jednu od njenih kartica" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Prikaži i zaglavlje kartice kada se prikazuje samo jedna kartica" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Potvrdi zatvaranje svih kartica" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ograniči dužinu naslova kartice na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Prikazuj zaključane kartice &sa znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Kartice na višestrukim linijama" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ktrl+&gore otvara novu karticu u pozadini" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otvori novu karticu pored trenutnr kartice" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Prikazuj dugme za zatvaranje &kartice" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Zaglavlje kartice fascikli" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znaci" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Položaj kartica&" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Odrednice:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Odrednice:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbruntermparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Odrednice:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Dugme potpuno istih umnožaka" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi &prečicu" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Unesi novo dugme" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Drugo..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Ukloni &prečicu" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Unesite odrednice naredbe, svaku u posebnoj liniji. Pritisnite F1 za pregled pomoći za odrednice." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Prikaz" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Veličina &trake:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "&Naredba:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Prečica:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Ikonica&:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veličina& ikonice:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Naredba&:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Odrednice&:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Napomena:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta dugmeta" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikonice" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Zadržavaj otvorenim prozor terminala posle izvršenja programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Izvrši u terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Koristi spoljni program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatne odrednice" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Putanja programa za izvršenje" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Umnoži" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Izbriši&" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Preimenuj&" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Ostalo..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Prikaži napomenu" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Vrsta napomene&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Vrsta maske&:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Boja pokazivača:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Broj stubaca u pregledniku knjiga" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Podesi" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Sažmi datoteke" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Napravi odvojene skladišta, svako posebno za odabranu datoteku i fasciklu" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Napravi samoizdvajajuće skladište" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Šifruj" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Premesti& u skladište" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Višestruko skladište diskova" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Prvo smesti& u TAR skladište" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Takođe sažmi& i imena putanje (samo rekurzivno)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Sažmi datoteku(e) u datoteku:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Sažimalac" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Izdvoji &sve i izvrši" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Izdvoji i izvrši" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Svojstva sažmane datoteke" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Svojstva:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Stupanj sažimanja:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Način:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Izvorna veličina:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datoteka:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Veličina sažmane datoteke:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Sažimalac:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Vreme:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "H" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zatvori površ propusnika" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Unesite tekst ili uslov pretrage" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Osetljivo na veličinu slova" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Fascikle" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Datoteke" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Početak poklapanja" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Završetak poklapanja" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Uslov" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Zamena pretrage i uslova" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Priključak" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Vrednost" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Primeni&" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&U redu" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Izaberite znakove za unos:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Izmeni svojstva" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Skladište" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Napravljeno:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skriveno" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Pristupano:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Izmenjeno:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Samo za čitanje" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Uključujući podfascikle" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Svojstva vremenske oznake" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Razvrstavanje" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Delilac" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Veličina i broj delova" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Ciljna fascikla&" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Broje delova" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabajta" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobajta" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabajta" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Izgrađen" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativni sistem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Prepravka" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Izdanje" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Napravi simboličku vezu" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će ukazivati veza" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zatvori" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Uporedi" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklađene fascikle" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "nesimetrično" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "po sadržaju" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "zanemari datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "samo odabrano" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podfascikle" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Prikazuj:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(u glavnom prozoru)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Uporedi" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "blizanci" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "pojedinačni" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Molim, pritisnite „Uporedi“ za početak" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potvrdi prepisivanje" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Dodaj novo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Izmeni" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Podrazumevano" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Ukloni&" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Priključak za lickanje" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Prepoznaj vrstu skladišta po sadržaju" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Nisam uspeo da &izbrišem datoteke" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podržava &šifrovanje" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Prikazuj& kao obične datoteke (sakrij ikonicu sažimanja)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podržava &sažimanje u memoriji" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Nisam uspeo da izmenim postojeća skladišta" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Skladište može da sadrži višestruke datoteke" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Nisam uspeo da napravim nova skladišta&" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podržava& prozor za prikaz mogućnosti" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Omogućava pretragu& teksta u skladištima" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Opis&:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Prepoznaj& nisku:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Nastavci&:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Oznake:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Ime&:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O pregledniku..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Prikazuje poruku o programu" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Umnoži datoteku" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Umnoži datoteku" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Umnoži u ostavu isečaka" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Izlaz&" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Pronađi" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Nađi sledeće" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Preko celog ekrana" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Idi na liniju" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Sledeća" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Učitaj sledeću datoteku" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Prethodna" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Učitaj prethodnu datoteku" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Premesti datoteku" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Premesti datoteku" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Pregled" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Učitaj ponovo" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ponovo učitaj trenutnu datoteku" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Obrni za 180" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Obrni za 180" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Obrni za 270" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Obrni za 270" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Obrni za 90" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Obrni za 90" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Sačuvaj kao..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Sačuvaj datoteku kao..." #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Slika ekrana" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Označi sve" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Prikaži binarno&" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Prikaži kao knjigu&" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Prikaži heksadecimalno&" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Prikaži kao &tekst" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Prikaži kao &uvučen tekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Priključci" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Razvuci" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Razvuci sliku" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Poništi" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Vrati" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Udalji" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Opseci" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Preko celog ekrana" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Oboji" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Crvene oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Promeni veličinu" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Pokretne slike" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Preglednik" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Šifrovanje" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Slika" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Olovka" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Obrni" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Slika ekrana" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Pregled" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Prikljuci" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Početak&" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Radnje nad datotekama" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Zakazano" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&ledi veze" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Kada &fascikla postoji" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Kada datoteka postoji" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&U redu" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Odrednice:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Podesi&" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Šifruj" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Umnoži v&reme i datum" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Radi u pozadini (posebna veza)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Visina" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Širina" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Nisam uspeo da pronađem datoteku i da pomognem pri proveri konačnog sklopa datoteka:\n" "%s\n" "\n" "Da li možete da omogućite to i pritisnite „U redu“ kada bude spremno,\n" "ili pritisnite „OTKAŽI“ za nastavak bez toga?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Otkaži brzi uslov" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Otkaži trenutnu radnju" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Oštećeno:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Opšte:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Nedostaje:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Greška čitanja:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Uspeh:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Unesi zbir za proveru i izaberi algoritam:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Proveri zbir" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Ukupno:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Ostava isečaka ne sadrži ispravne podatke trake alata." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Svojstvo" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Nastavak" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ime" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Veličina" #: ulng.rsconfcolalign msgid "Align" msgstr "Podvuci" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Naslov" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Izbriši" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Sadržaj polja" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Premesti" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Širina" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prilagodi kolonu" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Umnoži (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Šifrovanje" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Prekini" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Sve" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Nastavi" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Samostalno preimenuj izvorne datoteke" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Otkaži" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Nastavi" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Umnoži &u" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Umnoži u &sve" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Napusti& program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Zanemari& sve" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ništa" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&U redu" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "drugo&" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepiši" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepiši &sve" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepiši sve &veće" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepiši sve &starije" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepiši sve &Manje" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "P&reimenuj" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Nastavi" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Po&novo pokušaj" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Preskoči" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Preskoči& sve" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Da" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Umnoži datoteku(e)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Premesti datoteku(e)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Zastanak&" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Početak&" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Zakazano" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Brzina %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Brzina %s/s, preostalo vreme %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazivač slobodnog mesta na uređajima" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez oznake>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nema uređaja>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Unutrašnji uređivač Double Commander-a." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Idi na liniju:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Idi na liniju" #: ulng.rseditnewfile msgid "new.txt" msgstr "novi.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ime datoteke:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otvori datoteku" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Unazad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Traži" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Unapred" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zameni" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Pitaj;Prepiši;Umnoži;Preskoči" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Pitaj;Prepiši;Prepiši starije;Preskoči" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Pitaj;Ne postavljaj više;Zanemari greške" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Uslov" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Odredi obrazac" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s stupanj(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "sve (neograničena dubina)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "samo trenutnu fasciklu" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Fascikla %s ne postoji. " #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Pronašao sam: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Sačuvaj obrazac pretrage" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ime obrasca:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pregledano je: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Pregledam" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Počni sa" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Slovni lik uređivača" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Slovni lik dnevnika&" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Glavni slovni lik&" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Slovni lik preglednika&" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Slovni lik preglednika& knjiga" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "Slobodno je %s od %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s je slobodno" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum i vreme pristupa" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Svojstva" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Napomena" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Veličina skladišta" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum i vreme nastanka" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Nastavak" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Udruženje" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Veza do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum i vreme izmene" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ime" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ime bez nastavka" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlasnik" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Putanja" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Veličina" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Vrsta" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Desila se greška pri stvaranju čvrste veze" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Upozorenje: Pri vraćanju datoteke .hotlist iz ostave, trenutni spisak će biti izbrisan i zamenjen uvezenim.\n" "\n" "Da li sigurno želite da nastavite?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Prozorče umnožavanja i premeštanja" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Program za razlike" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Uredite napomenu" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Uređivač" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Glavni" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Odznači masku" #: ulng.rsmarkplus msgid "Select mask" msgstr "Označi masku" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Unesi masku:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Podesite prilagođene stupce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Radnje" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Uredi" #: ulng.rsmnueject msgid "Eject" msgstr "Izbaci" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Prikači" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nova" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nema dostupnih uređaja" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvori" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otvori sa" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Drugo..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Povrati" #: ulng.rsmnusortby msgid "Sort by" msgstr "Razvrstaj po" #: ulng.rsmnuumount msgid "Unmount" msgstr "Otkači" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Prikaži" #: ulng.rsmsgaccount msgid "Account:" msgstr "Nalog:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatne odrednice za naredbenu liniju programa sažimanja:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Izlazna datoteka CRC32 je neispravna:\n" "„%s“\n" "\n" "Da li želite da zadržite neispravnu datoteku?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ne možete umnožavati i premeštati u samu datoteku „%s“!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Ne možete izbrisati %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Nisam uspeo da pređem na fasciklu [%s]." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Da li da uklonim sve kartice koje se ne koriste?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Kartica (%s) je zaključana. Da li da je uprkos tome zatvorim?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite napustiti program?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Da li da umnožim %d odabranih datoteka/fascikli?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Da umnožim odabrano „%s“?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Da li da izbrišem delimično umnoženu datoteku ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Da li da izbrišem %d odabranih datoteka/fascikli?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Da li da premestim %d odabrane datoteke/fascikle u smeće?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Da li da izbrišem odabrani „%s“?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Da li da premestim odabrano „%s“ u smeće?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nisam uspeo da premestim „%s“ u smeće. Da li da ga izbrišem?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nije dostupan" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Unesite nastavak datoteke:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Unesite ime:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Desila se CRC greška u podacima skladišta" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Podaci su oštećeni" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nisam uspeo da se povežem sa služiteljem „%s“" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nisam uspeo da umnožim datoteku %s u %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Datoteka pod imenom „%s“ već postoji." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s nije podržan" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Fascikla %s već postoji." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Korisnik je prekinuo tekuću radnju" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Desila se greška pri zatvaranju datoteke" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nisam uspeo da obrazujem datoteku" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nema više datoteka u arhivi" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nisam uspeo da otvorim postojeću datoteku" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Desila se greška pri čitanju datoteke" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Desila se greška pri upisu u datoteku" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Nisam uspeo da obrazujem fasciklu %s." #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Veza nije ispravna" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nisam pronašao datoteke" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nema dovoljno memorije" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Radnja nije podržana." #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Desila se greška u priručnom izborniku" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Desila se greška prilikom učitavanja postavki" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Postoji sintaksna greška u regularnom izrazu" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nisam uspeo da promenim naziv datoteke %s u %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nisam uspeo da sačuvam pridruživanje datoteka programima." #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nisam uspeo da sačuvam datoteku" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nisam uspeo da postavim svojstva datoteci „%s“" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nisam uspeo da postavim datum i vreme datoteci „%s“" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nisam uspeo da postavim vlasnika/udruženje datoteci %s“" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Prihvatna memorija je premala" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Previše datoteka je izabrano za sažimanje" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Nije poznat oblik željene datoteke za sažimanje" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Datoteka %s je izmenjena. Da li da je sačuvam?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajta, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Datoteka %s već postoji, da li da je prepišem?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Datotekom:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Nisam uspeo da pronađem datoteku „%s“." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "U pogonu je radnja nad datotekama" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Neke radnje nad datotekama nisu dovršene. Zatvaranje Double Commander-a može dovesti do gubljenja podataka." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Datoteka %s je samo za čitanje. Da li da je izbrišem?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Datoteka veličine „%s“ je prevelika za odredišni sistem datoteka." #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Datoteka %s postoji. Da li da je prepišem?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Da li da pratim simboličku vezu „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Dodaj %d označenih fascikli" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj označenu fasciklu: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj trenutnu fasciklu: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Naredba za izvršenje" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska fascikli" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Da li ste sigurni da želite ukloniti sve unose iz brzog spiska fascikli? (Opoziv ove radnje je nemoguć!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ovo će izvršiti sledeću naredbu:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ovo je imenovano kao brza fascikla." #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Ovo će izmeniti radni okvir na sledeću putanju:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "I neradni okvir će se izmeniti na sledeću putanju:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Desila se greška prilikom smeštaja stavki u ostavu..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Desila se greška prilikom izvoza stavki..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Izvezi sve!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Izvezi brzi spisak fascikli - Izaberite stavke koje želite da izvezete" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Izvezi odabrane" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Uvezi sve!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Uvezi brzi spisak fascikli - Izaberite stavke koje želite da uvezete" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Uvezi izabrano" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Putanja" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Pronađite datoteku „.hotlist“ za uvoz" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ime brze fascikle" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Broj novih stavki: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nema ničeg za izvoz!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Putanja brze fascikle" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ponovno dodaj izabranu fasciklu: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ponovo dodaj trenutnu fasciklu: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Unesite putanju i ime datoteke brzog spiska fascikli za oporavak" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Naredba:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(kraj podizbornika)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Naziv izbornika:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Ime:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(razdvajač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cilj podizbornika" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Određuje da li želite da razvrstate radni okvir određenim redosledom posle izmene fascikle" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Određuje da li želite da ne razvrstavate radni okvir određenim redosledom posle izmene fascikle" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Neke radnje za izbor određene putanje odnosne, apsolutne, naročite fascikle Vindouza, itd." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Ukupan broj sačuvanih stavki: %d\n" "\n" "Ime ostave: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Ukupna broj izvezenih stavki: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Da li želite da izbrišete sve činioce podizbornika [%s]?\n" "Odgovorom NE ćete izbrisati samo ograničenje izbornika, ali će se zadržati činilac unutar podizbornika." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Unesite putanju i ime mesta za čuvanje datoteke brzog spiska fascikli" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Netačna je izlazna dužina datoteke : „%s“" #: ulng.rsmsginsertnextdisk #, object-pascal-format, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Molim, ubacite sledeći disk ili nešto slično.\n" "\n" "To će vam omogućiti da upišete sledeću datoteku:\n" "„%s“\n" "\n" "Broj bajta preostao za upis: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Greška u naredbenoj liniji" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neispravan naziv datoteke" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neispravan oblik u datoteci podešavanja" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neispravna putanja" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Putanja %s sadrži nedozvoljene znakove" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ovo nije ispravan priključak." #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ovaj priključak je napisan za Double Commander %s.%sNe može da radi sa Double Commander-om %s." #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neispravan navod" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neispravan izbor." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Učitavam spisak datoteka..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Umnoži datoteku %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Obriši datoteku %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Greška: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Raspakujem datoteku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podaci: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Napravi fasciklu %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Premesti datoteku %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Putanja do datoteke %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Ukloni fasciklu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Urađeno: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Proveri ispravnost datoteke %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Izbriši potpuno datoteku %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Izbriši potpuno fasciklu %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Glavna lozinka" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Unesite ponovo glavnu lozinku:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nova datoteka" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Sledeći sadržaj će biti izdvojen" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nema datoteka" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nije izabrana nijedna datoteka." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nema dovoljno mesta u odredištu. Da li da nastavim?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nema dovoljno slobodnog mesta na odredišnom uređaju. Da li da pokušam ponovo?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nisam uspeo da izbrišem datoteku %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nije primenjeno." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Lozinka:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Lozinke se razlikuju!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Unesite vašu lozinku:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Lozinka (vatreni zid):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Unesite ponovo lozinku za sistem provere:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Obriši %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Datoteka „%s“ već postoji. Da je prepišem?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Molim, pobrinite se da ova datoteka bude dostupna. Pokušati ponovo?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Preimenuj/premesti %d označenih datoteka/fascikli?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Preimenuj/premesti označeno „%s“?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Molim, ponovo pokrenite Double Commander-a da bi se primenile izmene" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Označeno: %s od %s, datoteka: %d od %d, fascikli: %d od %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Molim, odaberite samo datoteke za proveru zbira." #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Izaberite položaj sledećeg sadržaja/uređaja" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Postavi oznaku uređaju" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Naročite fascikle" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodajte putanju radnom okviru" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodajte putanju iz neradnog okvira" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Pregledaj i koristi odabranu putanju" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Koristi promenljive okruženja..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Idi na naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Idi na promenljivu okruženja..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Idi na drugu naročitu fasciklu Windows-a..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Idi na naročitu fasciklu Windows-a (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Učini putanju apsolutnom" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Učini odnosnom na naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Učini odnosnom na promenljivu okruženja..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Učini odnosnom na naročitu faciklu Windows-a (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Učini odnosnom na drugu naročitu fasciklu Windows-a..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Koristi naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Koristi drugu naročitu putanju Windows-a..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Koristi naročitu fasciklu Windows-a (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Preimenuj karticu" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novi naziv kartice:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Putanja do odredišta:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Previše datoteka je odabrano." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Neodređeno" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "Adresa:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Korisničko ime:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "korisničko ime (vatreni zid):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Oznaka uređaja:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Unesite veličinu uređaja:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Da li da potpuno izbrišem %d označenih datoteka/fascikli?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Da li da potpuno izbrišem odabrano „%s“?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Brojač" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Nastavak" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Ime" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez izmena;VELIKA SLOVA;mala slova;Prvi znak veliki;Prvi Znak Svake Reči Veliki;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "znak na položaju x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "znaci od položaja x do položaja y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Brojač" #: ulng.rsmulrenmaskday msgid "Day" msgstr "dan" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "dan (2 cifre)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "dan u nedelji (kratko, npr. „pon“)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "dan u nedelji (potpuno, npr. „ponedeljak“)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Nastavak" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "čas" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Čas (2 znaka)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minut" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minut (2 znaka)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mesec" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mesec (2 znaka)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Ime meseca (kratko, npr., „jan“)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Ime meseca (puno, npr., „januar“)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Ime" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekund" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekund (2 znaka)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Godina (2 znaka)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Godina (4 znaka)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Prikljuci" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Vreme" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Mreža" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Ostalo" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Obustavljeno" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavam zbirnu proveru" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Računam zbirnu proveru u „%s“" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Računam zbirnu proveru „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Računam" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Računam „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Spajam" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spajam datoteke iz „%s“ na „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Umnožavam" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Umnožavam iz „%s“ u „%s“ " #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Umnožavam „%s“ na „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Stvaram fasciklu" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Stvaram fasciklu „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brišem" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Brišem iz „%s“" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Brišem „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvršavam" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Izvršavam „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Izdvajam" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Izdvajam iz „%s“ u „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Gotovo" #: ulng.rsoperlisting msgid "Listing" msgstr "Listam" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Listam „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Premeštam" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Premeštam iz „%s“ u „%s“" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Premeštam „%s“ na „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nije pokrenuto" #: ulng.rsoperpacking msgid "Packing" msgstr "Sažimam" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Sažimam iz „%s“ u „%s“" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Sažimam „%s“ u „%s“" #: ulng.rsoperpaused msgid "Paused" msgstr "Zastanak" #: ulng.rsoperpausing msgid "Pausing" msgstr "Zastanak" #: ulng.rsoperrunning msgid "Running" msgstr "Pokrenuto" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Postavljam svojstva" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Postavljam svojstva u „%s“" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Postavljam svojstva datoteci „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Deljenje" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Delim „%s“ na „%s“" #: ulng.rsoperstarting msgid "Starting" msgstr "Pokrećem" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zaustavljeno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Prekidam" #: ulng.rsopertesting msgid "Testing" msgstr "Probanje" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Probam u „%s“" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Probam „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Proveravam zbir" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Proveravam zbir u „%s“" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Proveravam zbir „%s“" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čekam na pristup izvornoj datoteci" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čekam na odziv korisnika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Brisanje" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Brisanje u „%s“" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Brisanje „%s“" #: ulng.rsoperworking msgid "Working" msgstr "Rad" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Naziv vrste skladišta:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Pridruži priključak „%s“ sa:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Prvi;poslednji;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Unesite nastavak" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Odvojen prozor;umanjen odvojen prozor;površ radnji" #: ulng.rsoptfilesizefloat msgid "float" msgstr "pokretna tačka" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Prečica %s za „cm_Delete“ će biti prijavljena, tako da može biti korišćena za vraćanje ove postavke." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Dodaj prečicu za %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj prečicu" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nisam uspeo da postavim prečicu" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Izmeni prečicu" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Naredba" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format, fuzzy, badformat msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Prečica za „cm_Delete“ ima odrednicu koja zaobilazi ove postavke. Da li želite da izmenite odrednicu i koristite opšte postavke?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Prečici %s za „cm_Delete“ treba da se promeni odrednica d bi se slagala sa prečicom %s. Da li želite da je promenite?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Uredi prečicu za %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ispravi odrednicu" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Prečica" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Prečice" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ništa>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Odrednice" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Postavi prečicu za brisanje datoteke" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format, fuzzy, badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Da bi ove postavke radile sa prečicom %s, prečica mora da bude dodeljena „cm_Delete“, ali je već dodeljena za %s. Da li želite da je promenite?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Prečica %s za „cm_Delete“ je niz za koji dugme Šift ne može biti dodeljeno. Najverovatnije neće raditi." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Prečica je u upotrebi" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Prečica %s već postoji." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Da li je dodeliti %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "koristi se za %s u %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "koristi za ovu naredbu sa drugačijim odrednicama" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Programi za sažimanje" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Samoosvežavanje" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Ponašanje" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Sažeto" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Boje" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Stupci" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Postavke" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Prilagođene boje" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Prevuci i spusti" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Dugme za spisak uređaja" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Pridruživanje datoteka" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Novo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Radnje nad datotekama" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Površi datoteka" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Pretraga datoteka" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Pregledi datoteka" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Vrste datoteka" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Kartice datoteka" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Slovni likovi" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Isticanje" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Prečice" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikonice" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Zanemari spisak" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasteri" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jezik" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Raspored" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Dnevnik" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Razno" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Miš" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Priključci" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Brza pretraga/uslov" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Traka alata" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Alatke" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Napomene" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ništa;Naredbena linija;Brza pretraga;Brzi uslov" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Levo dugme;Desno dugme;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na vrhu spiska datoteka:posle fascikli (ako se fascikle prikazuju pre datoteka); na određenom položaju;na dnu spiska datoteka" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Priključak %s je već dodeljen sledećim nastavcima:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Onemogući" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Omogući" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Radni" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Opis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ime datoteke" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ime" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Prijavljen za" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Osetljivo;&Neosetljivo" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Datoteke;&Fascikle;Datoteke i fascikle" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skriva površ uslova kada on nije u žiži" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "neosetljivo na veličinu slova;prema postavkama lokaliteta (aAbBvV);prvo velika, pa mala slova (ABVabv)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "rasporedi po imenu i prikaži prvu;rasporedi kao datoteke i prikaži prvu;rasporedi kao datoteke" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Azbučno, vodeći računa o akcentima;Prirodan raspored: azbučno i brojevno" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Vrh;Dno" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Razdvajač&;&unutrašnja naredba;&Spoljna naredba;Izbornik&" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Vrsta imena&:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne menjaj položaj;koristi iste postavke za nove datoteke;na položaju po rasporedu" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Datoteka: %d, fascikli: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nisam uspeo da promenim prava pristupa za „%s“" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nisam uspeo da promenim vlasnika „%s“" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datoteka" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Fascikla" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Imenovana cev" #: ulng.rspropssocket msgid "Socket" msgstr "Utičnica" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Naročiti blok uređaj" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Naročiti znakovni uređaj" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Simbolička veza" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Nepoznata vrsta" #: ulng.rssearchresult msgid "Search result" msgstr "Izlazi pretrage" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Traži" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<neimenovani obrazac>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izaberite fasciklu" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Prikaži pomoć za %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Sve" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Naredba" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "Datoteke" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtova" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajta" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajta" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajta" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajta" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Datoteka: %d, Fascikli: %d, Veličina: %s (%s bajta)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nisam uspeo da napravim ciljnu fasciklu." #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Oblik veličine datoteke nije ispravan." #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nisam uspeo da podelim datoteku." #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Broj delova je više od 100! Da li da nastavim?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Izaberite fasciklu:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Greška prilikom stvaranja simboličke veze." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Podrazumevani tekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Običan tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dan(i)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Sat(i)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(i)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mesec(i)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunda (e)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Nedelja(e)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Godina(e)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Razlika" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Uređivač" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Desila se greška pri otvaranju programa za razlike" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Desila se greška pri otvaranju urednika" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Desila se greška pri otvaranju terminala" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Desila se greška pri otvaranju preglednika" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prijavite grešku bubolovcu sa opisom radnje koju ste primenjivali na sledeću datoteku: %s. Pritisnite %s za nastavak ili %s za izlazak iz programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Mreža" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Unutrašnji preglednik Double Commander-a." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Šifrovanje" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova veličina" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "Nisam uspeo da pronađem %s." #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.sr.po�����������������������������������������������������������0000644�0001750�0000144�00001611524�15104114162�017303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-06-28 17:25+0200\n" "Last-Translator: Саша Петровић <salepetronije@gmail.com>\n" "Language-Team: српски <xfce4@xfce4.org>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 3.2.2\n" "X-Language: sr_RS\n" "X-Source-Language: C\n" "X-Native-Language: српски\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Упоређујем... %d%% (ЕСЦ за отказивање)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Лево: обриши %d датотеку(е)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Десно: обриши %d датотеку(е)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Пронађено је датотека: %d (истоветних: %d, различитих: %d, јединствених лево: %d, јединствених десно: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Са лева на десно: Умножи %d датотека, укупне величине: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Са десна на лево: Умножи %d датотека, укупне величине: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Изаберите образац..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "П&ровери слободан простор" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Умножи& својства" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Умножи в&ласништво" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Умножи &овлашћења" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Умножи в&реме и датум" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Исправи в&езе" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Поништи особину само за &читање" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "И&зузми празне фасцикле" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "С&леди везе" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Чувај слободан простор" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Умножи при писању" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Провери" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Шта чинити када се не могу подесити време, својства, итд." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Користи образац датотеке" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Када &фасцикла постоји" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Када &датотека постоји" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Када се не& могу поставити особине" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<нема обрасца>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Умножи у оставу исечака" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Изграђен" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Отпреми" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Слободни Паскал" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Почетна страница:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Лазарус" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преправка" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Издање" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Поништи" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Изаберите својства" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Остава" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Са&жмано" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Фасцикла" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Шифровано" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Скривено" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Само за &читање" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "П&роређено" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Симболичка веза" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "С&истем" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Привремено" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Својства НТФС" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Општа својства" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Остало" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Читај" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Као т&екст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Пиши" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Опити" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Величина података опита: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Збир" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Време (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Брзина (MB/s)" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Израчунај збирну проверу..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Отвори датотеку збирне провере након завршетка задатка" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Образуј посебну датотеку збирне провере за сваку датотеку" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Сачувај збирну(е) проверу(е) у:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Потврди исправност збирне провере..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Шифровање" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Д&одај" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "По&вежи се" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Управник веза" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Повежи се на:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Додај у заказано" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Могућности" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Сачувај ове могућности као подразумеване" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Умножи датотеку(е)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ново заказивање" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Заказано 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Заказано 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Заказано 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Заказано 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Заказано 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Сачувај опис" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Напомена датотеке/фасцикле" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Уреди& напомену за:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Шифровање:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Самостално упоређивање" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Бинарно" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Откажи" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Умножи скуп десно" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Умножи скуп десно" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Умножи скуп лево" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Умножи скуп лево" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Налепи" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Понови" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Понови" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Означи &све" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Поништи" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Поништи" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Излаз" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "Пронађи&" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Пронађи" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Нађи следеће" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Нађи следеће" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Нађи претходно" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Нађи претходно" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Замени" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Замени" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Прва разлика" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Прва разлика" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Иди на линију..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Иди на линију" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Занемари величину слова" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Занемари празнине" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Настави клизање" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Последња разлика" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Последња разлика" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Разлика линија" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Следећа разлика" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Следећа разлика" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Отвори лево..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Отвори десно..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Обоји позадину" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Претходна разлика" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Претходна разлика" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Учитај поново" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Поново учитај" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Сачувај" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Сачувај" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Сачувај као..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Сачувај као..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Сачувај лево" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Сачувај лево" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Сачувај лево као..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Сачувај лево као..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Сачувај десно" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Сачувај десно" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Сачувај десно као..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Сачувај десно као..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Упореди" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Упореди" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Шифровање" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Шифровање" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Упореди датотеке" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Лево" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Десно" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Радње" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Ши&фровање" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Могућности" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Додај нову пречицу низу" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Одустани" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Уклони последњу пречицу из низа" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Одреди пречицу из списка преосталих доступних дугмади" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Само за следећа поклапања" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Одреднице (свака у посебној линији):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Пречице:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "О радњи" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Поставке" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Поставке" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Умножи" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Исеци" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Обриши" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Обриши" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Пронађи" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Пронађи" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Нађи следеће" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Нађи следеће" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Нађи претходно" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Иди на линију..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Мек (ЦР)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Мек (ЦР)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Вундоуз (ЦРЛФ)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Вундоуз (ЦРЛФ)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Уникс (ЛФ)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Уникс (ЛФ)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Прилепи" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Прилепи" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Понови" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Понови" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Замени" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Замени" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Означи &све" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Означи све" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Опозови" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Опозови" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Затвори" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Изађи" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Напусти" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Ново" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Ново" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Отвори" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Отвори" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Учитај поново" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Сачувај" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Сачувај" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Сачувај &као..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Сачувај као" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Уређивач" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "По&моћ" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Ши&фровање" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Отвори као" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Сачувај као" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Истицање синтаксе" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Завршетак линије" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&У реду" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Вишелинијски образац" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "О&сетљиво на величину слова" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Тражи од показивача" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регуларни изрази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Само означено писмо&" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Само целе речи" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "&Могућности" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Замени са:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Тражи:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Смер" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Учини то свим тренутним предметима" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Распакуј датотеке" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Распакуј имена путање ако су сачувана у датотекама" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Распакуј сваку од архива у &посебну подфасциклу (по именима архива)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "П&репиши постојеће датотеке" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "У &фасциклу:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Извуци датотеке на основу поклапања:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Лозинка за шифроване датотеке:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Сачекајте..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Име датотеке:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Кликните на затвори ако се привремена датотека не може избрисати!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На површ" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Прегледај све" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "&Тренутна радња:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ка:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Својства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Дозволи &извршавање датотеке као програма" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Писмо:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Садржи:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Направљено:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Изврши:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путања:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Удружење" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Последњи приступ:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Последња измена:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Последња измена стања:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Октално:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Власник&" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читање" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Величина:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Веза ка:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Врста:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Писање" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Вредност" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Прикљуци" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Својства" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Затвори" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Окончај" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Откључај" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Откључај све" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Откључај" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Руковање датотеком" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ЛБ процеса" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Путања извршне датотеке" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Откажи" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Затвори" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Затвори" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Поставке пречица" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Уреди&" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Довод &списку" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Откажи претрагу, затвори и ослободи из памети" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "За све остале „пронађи датотеке“, откажи, затвори и ослободи из памети" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Иди на датотеку" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Пронађи податке" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Последња претрага" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Нова претрага" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Нова претрага (очисти услове)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Иди на страницу „Напредно“" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Иди на страницу „Учитај/Сачувај“" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Пређи на следећу страницу" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Иди на страницу „Прикључци“" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Пређи на &Претходну страницу" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Иди на страницу „Налази“" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Иди на страницу „Уобичајено“" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Почетак" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Преглед" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Додај&" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Помоћ" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Сачувај" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "У&читај" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Сачувај&" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Сачувај као „Почетак у фасцикли“" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ако се сачува, „Почетак у фасцикли“ ће бити повраћен приликом учитавања обрасца. Употребите то ако желите да примените претрагу на одређену фасциклу" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Користи образац" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Пронађи датотеке" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "О&сетљиво на величину слова" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Од &датума:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "До &датума:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Од &величине:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "До &величине:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Тражи у &складиштима" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Пронађи &писмо у датотеци" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Прати &симболичке везе" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Пронађи датотеке које не& садрже писмо" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Не& старије од:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Уредов ХМЛ" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Отвори листове" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Тражи& по делу имена датотеке" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регуларни израз" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Замени& са" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Означеним фасциклама и &датотекама" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Регуларни израз" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Од &времена:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "До вре&мена:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Користи прикључак за претрагу:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "истог садржаја" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "истог збира" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "истог имена" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Нађи истоветне двоструке датотеке:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "исте величине" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Шеснаестоцифр&ени" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Унесите имена фасцикли које би требало да буду искључене из претраге одвојене знаком „;“" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Унесите имена датотека које би требало да буду искључене из претраге одвојене знаком „;“" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Унесите имена датотека раздвојена знаком „;“" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Прикључак" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Поље" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Множилац" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Вредност" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Фасцикле" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Датотеке" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Пронађи податке" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Својства&" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Шифровање:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "И&зузми подфасцикле" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Изузми датотеке" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Маска датотеке" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Почни у &фасцикли" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Тражи у &подфасциклама:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Претходне претраге:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Дејство" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "За све остале, откажи, затвори и ослободи из памети" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Отвори у новом листу(вима)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Могућности" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Уклони са списка" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Налази" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Прикажи све пронађене ставке" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Прикажи у уреднику" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Прикажи у прегледнику" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Преглед" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Напредно" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Учитај/Сачувај" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Прикљуци" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Излази" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Обично" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Пронађи&" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Пронађи" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&Уназад" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "О&сетљиво на величину слова" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Регуларни изрази" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Шеснаестоцифрени" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Област:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Лозинка:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Корисничко име:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Повежи се безимено" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Повежи се као корисник:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Направи чврсту везу" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Одредиште на које ће веза бити усмерена" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име &везе" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Увези све!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Увези изабрано" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Изаберите ставке које желите да увезете" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Кликом на подизборник ће се изабрати цео изборник" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Држите КТРЛ и кликните на ставке ради избора више њих" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Усмеривач" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Сачувај у..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Ставка" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Име датотеке" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Доле&" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Доле" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Уклони" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Обриши" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&горе" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Горе" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&О програму" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Укључи лист по показивачу" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Додај име датотеке у наредбену линију" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Нови примерак претраге..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Додај путању и име датотеке у наредбену линију" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Умножи путању у наредбену линију" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Додај прикључак" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Опит" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Сажети преглед" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Сажети преглед" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Израчунај заузеће простора" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Промени фасциклу" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Пређи на домаћу фасциклу" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Пређи у родитељску фасциклу" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Пређи у корену фасциклу" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Рачунање збирне& провере..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Провера збира..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очисти датотеку дневника" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очисти прозор дневника" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Затвори &све листове" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Затвори двоструке листове" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Затвори лист" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Следећа наредбена линија" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Постави следећу наредбу из историје у наредбену линију" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Претходна наредбена линија" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Постави претходну наредбу из историје у наредбену линију" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Потпуно" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Преглед у виду стубаца" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Упореди по &садржају" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Упореди фасцикле" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Упореди фасцикле" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Поставке програма сажимања" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Поставке брзог списка фасцикли" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Поставке омиљених листова" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Поставке листова фасцикли" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Поставке пречица дугмади" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Поставке прикључака" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Сачувај положај" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Сачувај поставке" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Поставке претрага" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Алатница..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Поставке напомена" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Поставке изборника гранања" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Поставке боја изборника гранања" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Прикажи приручни изборник" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Умножи" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Умножи све листове на супротну страну" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Умножи све приказане &ступце" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Умножи потпуну путању са именима датотека" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Умножи имена датотека у оставу исечака" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Умножи имена путањом УНЦ" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Умножи датотеке без питања за потврду" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Умножи пуну путању одабране(их) датотеке(а) без раздвајача завршне фасцикле" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Умножи пуну путању означене(их) датотеке(а)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Умножи у исту површ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Умножи" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Прикажи заузеће меморије" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Исеци" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Прикажи одреднице наредбе" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "За све претраге, откажи, затвори и ослободи из памети" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Историја фасцикле" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Брзи списак &фасцикли" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Изврши &унутрашњу наредбу..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Означи било коју наредбу и изврши је" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Уреди" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Уреди &напомену..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Уреди нову датотеку" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Уреди поље путање изнад списка" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Замени површи" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Изврши скрипта" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Напусти" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Извуци датотеке..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Поставке придруживања &датотека" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Споји датотеке..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Прикажи својства &датотека" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Подели& датотеку..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Раван приказ" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Раван приказ, само означених" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Жижа на наредбену линију" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Замени жижу" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Пређи између левог и десног списка датотека" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Жижа на приказ гранања" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Пребацуј између тренутног списка датотека и приказа гранањем (уколико је омогућено)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Смести показивач на списак датотека или датотеку" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Постави показивач на прву датотеку списка" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Смести показивач на последњу фасциклу или датотеку" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Постави показивач на последњу датотеку списка" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Смести показивач на следећу фасциклу или датотеку" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Смести показивач на претходну фасциклу или датотеку" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Направи &чврсту везу..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Садржај" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Водораван приказ површи" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Пречице" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Сажети приказ на левој површи" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Приказ стубцима на левој површи" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Лево &= Десно" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Раван приказ на левој површи" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Отвори списак левог уређаја" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Обр&ни распоред на левој површи" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Поређај леву површ по &својствима" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Поређај леву површ по &времену" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Поређај леву површ по &наставку" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Поређај леву површ по &имену" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Поређај леву површ по &величини" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Приказ сличицама на левој површи" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Учитај листове из омиљених листова" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Учитај списак" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Учитај списак датотека/фасцикли из одређене писмене датотеке" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Учитај садржај оставе исечака" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Учитај избор из датотеке..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Учитај листове из датотеке" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Направи &фасциклу" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Означи све са истим наставком&" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Означи све датотеке истим именом" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Означи све датотеке истим именом и наставком" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Означи све у истој путањи" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Обрни избор" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Означи све" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Поништи избор &скупа..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Изабери &скуп..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Одзначи све" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Умањи прозор" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Премести тренутни лист на лево" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Премести тренутни лист на десно" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Прибор за масовно &преименовање" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Успостави мрежну &везу..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Прекини мрежну &везу" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Мрежа и &Брзо повезивање..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Нови лист" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Учитај следеће омиљене листове у листу" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Пређи на &следећи лист" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Отвори" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Покушај да отвориш складиште" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Отвори датотеку са траке" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Отвори &фасциклу у новом листу" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Отвори уређај по списку" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Отвори списак &мрежних система датотека" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Прегледник &напретка радњи" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Могућности..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Сажми датотеке..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Подесите положај деобе" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Прилепи" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Учитај претходне омиљене листове у списак" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Пређи на &претходни лист" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Брзи пропусник" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Брза претрага" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Површ за брзи преглед" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Освежи" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Поново учитај последње учитане омиљене листове" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Премести" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Премештај и преименуј датотеке без питања за потврду" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Преименуј" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Преименуј лист" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Поново сачувај последње учитане омиљене листове" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Поврати избор" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Обрнути редослед" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Сажети приказ на десној површи" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Приказ ступцима на десној површи" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Десно &= лево" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Раван приказ на десној површи" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Отвори списак десног уређаја" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Об&рни распоред на десној површи" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Поређај десну површ по &својствима" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Поређај десну површ по &времену" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Поређај десну површ по &наставку" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Поређај десну површ по &имену" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Поређај десну површ по &величини" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Приказ сличицама на десној површи" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Покрени у &терминалу" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Сачувај тренутне листове у нове омиљене листове" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Сачувај избор" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Сачувај &избор у датотеку..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Сачувај листове у датотеку" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Тражи..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Сви листови закључани са отвореним фасциклама у нове листове" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Постави све листове у обично стање" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Постави све листове у закључане" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Све закључане листове са измењеним фасциклама омогући" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Промени &својства..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Закључано са фасциклама отвореним у новом &листу" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обично" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Закључано" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Закључено са дозволом измене &фасцикли" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Отвори" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Отвори користећи придруживање датотека" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Прикажи изборник дугмета" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Прикажи историју наредби" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Изборник" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Приказуј &скривене и системске датотеке" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Поређај по &својствима" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Поређај по &датуму" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Поређај по &наставку" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Поређај по &имену" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Поређај по &величини" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Отвори списак уређаја" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Омогући/онемогући приказ занемарених датотека са списка" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Направи симболичку &везу..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Усклађено навођење" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Усклађена измена фасцикли у оба листа" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Усклади фасцикле..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Циљ &= извор" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Провери складиште" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Умањене сличице" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Преглед умањених сличица" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Прекидач пуног приказа концоле" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Премести фасциклу под показивачем на леви прозор" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Премести фасциклу под показивачем на десни прозор" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Површ приказана гранањем" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Распореди по одредницама" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Одзначи све са истим наставком&" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Одзначи све датотеке са истим именом" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Одзначи све датотеке са истим именом и наставком" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Одзначи све у истој путањи" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Преглед" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Прикажи историју посећених путања под оваквим прегледом" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Иди на следећу ставку историје" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Иди на претходну ставку историје" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Прегледај датотеку дневника" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Прегледај тренутне примерке претраге" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Посетите Веб страницу Двоструког наредника" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Бриши потпуно" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Рад са брзим списком фасцикли и одредница" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Излаз" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Фасцикла" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Прикажи тренутну фасциклу са десне површи на леву површ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Иди у домаћу фасциклу" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Иди у корену фасциклу" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Иди у родитељску фасциклу" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Прикажи тренутну фасциклу са леве површи на десну површ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Путања" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Умножавање..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Стварање везе..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Очисти" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Сакриј" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Означи све" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Премести..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Стварање симболичке везе..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Могућности листа" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Излаз&" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Поврати" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Почетак" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Наредбе" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Поставке" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Омиљено" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Датотеке&" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помоћ&" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Ознака&" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Мрежа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Прикажи&" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Могућности листа" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Листови&" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "ЦД" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Уреди" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Прилепи" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&У реду" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Означите своју унутрашњу наредбу" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Разврстано обичајно" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Разврстано обичајно" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Означи све врсте подразумевано" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Избор:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Врсте:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Име& наредбе:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Услов:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Наговештај:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Пречица:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "име_цм" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Врста" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помоћ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Наговештај" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Пречица" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Додај&" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Помоћ" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Опиши&..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Осетљиво на величину слова" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Занемари нагласке и сливена слова" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Осо&бине:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Унеси маску:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Или& одабери предодређену врсту избора:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Направи нову фасциклу" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Проширена синтакса" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Унесите& име нове фасцикле:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Нова величина" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Висина :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Каквоћа сажманости ЈПГ" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Висина" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Наставак" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Име датотеке" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Очисти" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Очисти" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "Затвори&" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Поставке" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Бројач" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Бројач" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Датум" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Датум" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Избриши" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Падајући списак" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Уреди имена..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Уреди тренутно ново име..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Наставак" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Наставак" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Уреди&" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Позови изборник односне путање" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Учитај скорашњи образац" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Учитај имена из датотеке..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Учитај образац по имену или списку" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Учитај образац 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Учитај образац 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Учитај образац 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Учитај образац 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Учитај образац 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Учитај образац 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Учитај образац 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Учитај образац 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Учитај образац 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Име датотеке" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Име датотеке" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Прикљуци" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Прикљуци" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Пре&именуј" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Преименуј" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Поништи све" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Сачувај" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Сачувај као..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Прикажи изборник обрасца" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Разврставање" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Време" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Време" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Прегледај дневник преименовања датотеке" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Вишеструко преименовање" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Осетљиво на величину слова" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "&Заведи налаз у дневник" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Настави" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Замени само једном по датотеци" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Регуларни изрази" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Користи& замену" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Бројач" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Нађи и замени" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Обрасци" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Наставци&" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Пронађи&..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Међувреме" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Име датотеке" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Замени&..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Почетни број" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Ширина&" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Радње" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Уреди&" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Старо име датотеке" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Ново име датотеке" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Путања датотеке" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Кликните у реду када будете затворили уредника и учитали измењена имена!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Изаберите програм" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Прилагођена наредба" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Сачувај придруживање" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Постави изабрани програм као подразумевани програм" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Врста датотеке која ће бити отворена: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Вишеструка имена датотека" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Вишеструке адресе" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Једно име датотеке" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Једна адреса" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Примени&" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Помоћ" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Могућности" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Изаберите једну подстраницу, ова страница не садржи ни једну поставку." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Додај&" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Умножи" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Избриши&" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Остало..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Преименуј&" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ЛБ-ови употребљени са цм_ОтвориСкладиште за препознавање складишта препознавањем његовог садржаја и не преко наставка датотеке:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Могућности:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Начин рада рашчлањивања облика:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Омогућен&" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Начин отклањања& грешака" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Приказуј& излаз из конзоле" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Користи име складишта без наставка као списак" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Особине униксове датотеке" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Раздвајач путање &уникса „/“" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Особине датотека Виндоуза" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Раздвајач& путање Виндоуза „\\“" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Додајем&:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Програм за сажимање:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Избриши:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Опис&:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Наставци&:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Издвоји&:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Издвоји без путање:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Положај ЛБ:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ЛБ:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Опсег тражења ЛБ:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Листај&:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Програми за сажимање:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Листање и довршавање& (могућност):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Облик& листања:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Почетак листања& (могућност):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Ниска упита лозинке:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Образуј самоиздвајајуће складиште:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Проба:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Самостално& подеси" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Онемогући све" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Одбаци промене" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Омогући све" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Поређај сажимаоце" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Додатно" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Опште" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Приликом измена &величине, датума или својстава" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следеће путање& и њене подфасцикле:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Приликом стварања датотека, брисања или преименовања" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Када је програм у позадини&" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Онемогући самостално освежавање" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Освежи списак датотека" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Увек приказуј икону у обавештајној области" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Самостално скривај& откачене уређаје" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Приликом умањења премести икону у обавештајну област" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Дозволи само један примерак ДН у исто време" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Овде можете унети један или веше уређаја или тачака качења одвајајући их знацима „;“." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Црни списак уређаја" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Величина стубца" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Прикажи наставке датотека" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "пора&внато (помоћу размака)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "непо&средно након имена датотеке" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Самостално" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Неизменљив број стубаца" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Неизменљива ширина стубаца" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Користи указивач са преливом" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Бинарно" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Писмо:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Позадина 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Позадинска боја &указивача:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Чеона боја &указивача:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Измењено:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Измењено:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Успех:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Опсеци писмо на ширину ступца" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Прошири величину ћелија уколико писмо не стаје у стубац" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Водоравне& линије" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Усправне& линије" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Самостално& попуни ступце" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Приказуј мрежу" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Самостално уклопи величину стубаца" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Самостално уклопи величину ступца:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Уреди&" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Историја наредби&" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Историја фасцикли&" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Историја маски датотека&" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Листови датотека" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Сачувај& поставке" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Историја претраге& и замене" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Стање главног прозора" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Фасцикле" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Путања датотека поставки" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Сачувај по излазу" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Распоред распореда поставки у левом гранању" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Стање гранања при уласку у страници поставки" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Укључи наредбену линију" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Истицања:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Тема сличица:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Захват умањених сличица:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Фасцикла програма& (преносно издање)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Домаћа фасцикла корисника&" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Примени измене на све стубце" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Иди на постављање подразумеваног" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Ново" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Следеће" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Претходно" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Врати на подразумевано" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Сачувај као" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Сачувај" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Приликом кликтања ради измена нечега, измени за све стубце" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Опште" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Оквир показивача" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Користи оквирног показивача" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Користи неупотребљиву боју за избор" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Користи обрнути одабир" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Користи произвољни словолик и боју за овај приказ" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Позадина:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Позадина 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "&Приказ стубцима:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Име тренутног стубца]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Боја показивача:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Показивач писма:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Склоп датотека:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Словни лик:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Величина:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Боја писма:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Боја мирујућег показивача:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Боја мирујуће ознаке:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Боја означавања:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Испод је преглед. Можете померати показивач и одабрати датотеке ради тренутног прегледа изгледа разних поставки." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Поставке стубца:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Додај стубац" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Положај оквира површи након поређења:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Додај фасциклу дејственог оквира" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Додај &фасцикле дејствених и мирујућих оквира" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Додај фасциклу за преглед" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Додај умножак означене ставке" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Додај тренутно &означене или дејствене фасцикле дејственом оквиру" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Додај раздвајач" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Додај подизборник" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Додај фасциклу за куцање" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Скупи све" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Склопи ставку" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Исеци одабир ставки" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Обриши све!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Обришите означену ставку" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Обриши подизборник и све његове чиниоце" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Избриши само подизборник али задржи ставке" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Простри ставку" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Жижа на прозор гранања" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Иди на прву ставку" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Иди на последњу ставку" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Иди на следећу ставку" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Иди на претходну ставку" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Уметни фасциклу &дејственог оквира" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Уметни &фасцикле дејственог и мирујућих оквира" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Уметни фасциклу за преглед" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Уметни умножак означене ставке" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Уметни тренутно означену или мирујућу фасциклу дејственог оквира" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Уметни раздвајач" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Уметни подизборник" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Уметни фасциклу за куцање" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Премести на следеће" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Премести на претходно" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Отвори све гране" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Налепи што је исечено" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Тражи и замени у &путањи" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Тражи и замени у и путањи и у циљу" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Тражи и замени у путањи &циља" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Налицкај путању" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Налицкај циљну путању" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Додавање..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Остава..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Брисање..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Извоз..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Увоз..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Уметање..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Разно..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Неке радње за одабир одговарајућег циља" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Разврставање..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Приликом додавања фасцикле, додај и циљ" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Увек шири стабло фасцикли" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Приказуј само &исправне променљиве окружења" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "При искачућим прозорима прикажи [и путању]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Име, а-ш" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Име, а-ш" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Брзи списак фасцикли (преуредити превлачењем и спуштањем)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Остале могућности" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Име:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Путања:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "Циљ:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...тренутни ступањ ставки које су само означене" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Претражи све путање брзих фасцикли ради утврђивања које стварно постоје" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Претражи све путање брзих фасцикли и циљева ради утврђивања који стварно постоје" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "у датотеку списка брзих фасцикли (брзи списак)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Иди на &подешавање података односних на ТК" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Иди на &подешавање података односних на ТК" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Изборник пробе списка брзих фасцикли" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "из датотеке брзог списка фасцикли (брзи списак)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "из „wincmd.ini“ ТЦ-а" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Крмани..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Поврати списак брзих фасцикли из оставе" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Сачувај у оставу тренутни списак брзих фасцикли" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Нађи и &замени..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...све, од А до Ш!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...појединачни скуп ставки искључиво" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...садржај означеног подизборника, без поднивоа" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...садржај означеног подизборника и све његове поднивое" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Провери излазни изборник" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Налицкај &путању" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Налицкај &циљну путању" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Додатак из главне површи" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Примени тренутне поставке на брзе фасцикле" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Извора" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Циља" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Путање" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Начин за постављање путања приликом њиховог додавања:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Учини ово за путање од:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путања да буде у односу на:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Од свих подржаних облика, питај који да се користи сваком приликом" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Приликом чувања уникодног писма, сачувај га у облику УТФ8 (иначе ће бити УТФ16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Приликом спуштања писма, образуј самостално име датотеке (иначе ће се постављати упит кориснику)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Приказуј& прозорче потврде после отпуштања" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Приликом превлачења и спуштања писма у површима:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Смести најпожељнији облик на врху списка (користи превлачење и спуштање):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(уколико најпожељнији облик није присутан, преузеће се наредни и тако даље)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(неће радити за неке изворне програме, зато покушајте да одзначите ако буде потешкоћа)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Приказуј систем датотека" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Приказуј слободан& простор" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Прикажи натпис&" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Списак уређаја" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Самостално увлачење" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Омогућава увлачење показивача, када се нова линија образује помоћу <Унеси>, са истом величином белог простора као у претходној линији" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Десни обод:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Показивач прелази крај линије" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Омогућава показивачу да иде у празан простор иза положаја конца линије" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Приказуј нарочите знаке" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Приказуј нарочите знаке размака и празнина" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Паметне празнине" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Приликом употребе дугмета <Размак> (tab), показивач ће ићи на следећи знак без размака претходне линије" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Празнина увлачи блокове" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Када дејствују <Таб> и <Шифт+Таб> као увлакачи блокова, не увлачи када је писмо означено" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Користи размаке уместо знакова празнине" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Претвара знакове празнине у одређени број знакова размака (приликом уноса)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Избриши завршне размаке" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Сам избриши завршне размаке, то се односи само на уређиване линије" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Обратите пажњу да могућност „паметних празнина“ заузима предност над размицањем које ће бити извршено" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Могућности унутрашњег уређивача" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Увлачење блока:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Ширина празнине:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Обратите пажњу да могућност „паметних листова“ заузима предност над размицањем које ће бити извршено" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Позадина" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Позадина" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Врати на подразумевано" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Сачувај" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Својства ставке" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Сучеље&" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Сучеље&" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Ознака писмом&" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Користи (и уреди) опште& поставке схеме" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Користи месне& поставке схеме" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Подебљан" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Укључи" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Искошено" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Укључи" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Пре&цртај" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "У&кључи" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Подв&учено" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "У&кључи" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Додај..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "_Избриши..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Увоз/извоз" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Уметни..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Разврстај..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Ниједан" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Увек шири гране" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Лево" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Десно" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Омиљени списак листова (преуреди превлачењем и спуштањем)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Остале могућности" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Шта повратити где за изабрану ставку:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Постојећи листови за чување:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Сачувај повест фасцикле:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Листови сачувани лево да буду повраћени у:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Листови сачувани десно да буду повраћени у:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "раздвајач" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Додај раздвајач" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "подизборник" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додај подизборник" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Скупи све" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...тренутни ступањ ставке(и) које су само означене" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Исеци" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "обриши све!!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "подизборник и све његове чиниоце" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "само подизборник, али задржи чиниоце" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "означена ставка" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Обриши означену ставку" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Извези одабир у обичајну датотеку(е) .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "ИзборникПробеОмиљенихЛистова" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Увези обичајну(е) датотеку .tab по подразумеваним поставкама" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Увези обичајну датотеку(е) .tab на означени положај" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Увези обичајну датотеку(е) .tab на означени положај" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Увези обичајну датотеку(е) .tab на означени положај у подизборник" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Уметни раздвајач" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Уметни подизборник" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Отвори све гране" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Налепи" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...све, од А до Ш!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...само појединачни скуп ставке(и)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Разврстај појединачни скуп ставке(и) искључиво" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...садржај означеног подизборника, без поднивоа" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...садржај означеног(их) подизборника и све његове поднивое" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Провери излазни изборник" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Додај" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Додај&" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Додај" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "У&двостручи" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Означите своју унутрашњу наредбу" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Доле" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Уреди" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Уметни" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "&Уметни" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пре&именуј" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Помоћник променљивог подсетника" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Горе" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Почетна путања наредбе. Никада не стављајте наводнике овој ниски." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Име овог дејства. Никада се не отпрема систему, то је само памтљиво име које сте одабрали, за себе" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Одредница за отпремање наредби. Дуго име датотеке са размацима треба да буде под наводницима (ручним уносом)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Наредба за извршавање. Никада не стављајте наводнике овој ниски." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Опис дејства" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Радње" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Наставци" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Може бити преуређено превлачењем и спуштањем" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Врсте датотека" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Сличица" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Дејства могу бити преуређена превлачењем и спуштањем" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Наставци могу бити преуређени превлачењем и спуштањем" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Врсте датотеке могу бити преуређене превлачењем и спуштањем" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Радња:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Наредба:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Одредницe&:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Почетна &путања:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Произвољна ширина..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Произвољно" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Уреди" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Отвори у уређивачу" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Уреди помоћу..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Добави излаз из наредбе" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Отвори у унутрашњем уреднику" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Отвори у спољњем прегледнику" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Отвори" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Отвори помоћу..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Покрени у терминалу" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Преглед" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Отвори у прегледнику" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Прегледај помоћу..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Кликни ме ради промене сличице!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Примени тренутне поставке на сва тренутно подешена имена датотека и путање" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Подразумевана приручна дејства (прегледај/уреди)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Изврши кроз љуску" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Проширени приручни изборник" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Поставке придруживања датотека" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Понуди додавање избора придруживању датотека ако ли већ није додато" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Приликом приступа придруживању датотека, понуди додавање тренутно означене датотеке ако ли већ није укључено у подешеној врсти датотека" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Изврши у терминалу и затвори" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Изврши у терминалу и остави отвореним" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Наредбе" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Сличице" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Покретачке путање" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Ставке проширених могућности:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Путање" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Начин за додавање путања приликом додавања чиниоца сличицама, наредбе и покретачке путање:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Учините ово за датотеке и путање за:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путања да буде у односу на:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Приказуј прозор потврде за:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Умножи& поступак" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Избриши& поступак" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Премести у смеће (дугме схифт поништава ову поставку)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Радња слања у смеће" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Поништи ознаку само за читање" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Радња премештања&" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Обрађуј напомене са датотекама и фасциклама" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Означи име датотеке& без наставка приликом преименовања" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Прика&зуј лист површи одабира у прозору за умножавање премештање" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Занемари грешке радњи над датотекама и уписуј их у прозору дневника" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Провери радњу складишта" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Провери радњу збирне провере" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Извршавање радњи" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Корисничко сучеље" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Величина оставе за радње над датотекама (у KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Величина међуспремника за рачунање &збира (у КБ)" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Приказуј почетни напредак радњи у" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Удвостручено име начина преименовања:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Број пролаза потпуног брисања:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Врати на подразумевано ДК" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Користи трепћући показивач" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Користи неупотребљену боју за избор" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Користи обрнути одабир" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Оквир показивача" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "П&озадина:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "П&озадина 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Боја показивача&:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Показивач писма&:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Боја мирујућег показивача:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Боја мирујуће ознаке:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Осветљење нерадног листа" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Боја означавања&:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Боја писма:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Испод је преглед. Можете померати показивач, изабрати датотеку и задобити тренутни изглед разних поставки." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Боја писма:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Приликом покретања претраге, очисти услов маске датотеке" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Претрага& по делу имена датотеке" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Приказуј траку изборника у „Тражи датотеке“" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Претрага писма у датотекама" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Претрага датотека" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Тренутни услов са дугметом „Нова претрага“:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Образац подразумеване претраге:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Користи карту меморије за претраге по писмима" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Користи ток за претраге по писмима" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Подразумевано" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Обликујем" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Личне скраћенице за употребу:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ређање" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Бајта:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Осетљиво на &величину слова:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неисправан облик" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Облик датума и времена:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Облик величине& датотека:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "&Облик подножја:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гигабајта:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "&Облик заглавља:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Килобајта:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Мега&бајта:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Уметни& нове датотеке:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Облик величине дејства&:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Распоред фасцикли:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Начин распоређивања:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Терабајта:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Премести освежене датотеке:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Додај&" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Помоћ" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Омогући прелаз у &родитељску фасциклу приликом двоклика на празан део приказа датотеке" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Немој да учитаваш списак датотека док се лист не покрене" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Приказуј& угласте заграде око фасцикли" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Истакни& нове и освежене датотеке" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Омогући &преименовање на месту при двоклику на име" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Учитај списак &датотека у посебном процесу" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Учитавај иконе након& списка датотека" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Прикажи системске и скривене датотеке" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Приликом одабира датотека помоћу <SPACEBAR>, пређи на следећу датотеку ( као и са <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Услов на Виндоузов начин приликом означавања датотека („*.*“ такође означава датотеке без наставка, итд.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Користи независан услов својства у прозору уноса маске сваки пут" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Означавање/одзначавање ставки" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Подразумеване вредности маске својстава за коришћење:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Додај" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Обриши" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Образац..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Боје врста датотека (распоредите их повлачењем и &спуштањем)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Својства& врсте:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Боја врсте&:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Маска врсте&:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Име &врсте:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Словни ликови" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Додај пречицу&" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Умножи" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Обриши" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Избриши& пречицу" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Уреди& пречицу" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Следећа врста" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Учини искакање изборника односног на датотеку" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Претходна врста" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Поврати на подразумеване вредности ДН" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Сачувај сада" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Распореди по наредбеном имену" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Распореди по пречицама (груписане)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Распореди по пречицама (један по реду)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Пропусник&" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Врсте&:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Наредбе&:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Датотеке пречица&:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Распо&реди по:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Врсте" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Наредба" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Распоред" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Наредба" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Пречице" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Опис" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Пречица" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Одреднице" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Управљачи" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следеће &путање и њихове подфасцикле:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Приказуј сличице дејстава у изборницима&" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Приказуј сличице на дугмадима" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Приказуј преклапајуће& сличице, нпр. за везе" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Замућене скривене датотеке (спорије)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Онемогући нарочите сличице" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Величина сличице " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Тема сличица" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Приказуј сличицу" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Приказуј сличице лево од имена датотека " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Површ диска:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Површ датотеке:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Све&" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Све повезане + &EXE/LNK (споро)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Без& сличица" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Само &уобичајене сличице" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Додај& означена имена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Додај означена имена са &потпуним путањама" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Занемари& (не приказуј) следеће датотеке и фасцикле:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Сачувај у:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Лева& и десна стрелица мења фасциклу (кретање као у Линксу)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Куцање" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Мења+слова&:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ктрл+мења+слова:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Слова:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Равна& дугмад" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Равно &сучеље" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Приказуј указивач слободног простора на натпису уређаја" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Приказуј прозор дневника&" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Приказуј површ радње из позадине" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Приказуј уобичајени напредак у траци изборника" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Приказуј наредбену линију&" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Приказуј тренутну фасциклу" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Приказуј дугмиће уређаја&" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Приказуј натпис слободног простора&" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Приказуј дугме списка уређаја" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Приказуј дугмиће радњи" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Приказуј главни& изборник" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Приказуј траку &прибора" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Приказуј натпис малог слободног простора" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Приказуј траку стања&" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Приказуј& заглавље листа за заустављање" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Приказуј листове фасцикле" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Приказуј прозор терминала&" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Приказуј две траке дугмади уређаја (сталне ширине, изнад прозора)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Приказуј средишњу тракуприбора" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Распоред на заслону " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Прегледај садржај дневника датотеке" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Обухвати приказ датума у имену датотеке" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Сажми/извуци" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Извршавање спољње наредбене линије" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Умножи/премести/направи везу/симболичку везу" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Направи/Избриши фасцикле" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Дневник грешака" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Направи& датотеку дневника:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Највећи број датотека дневника" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Уноси у дневник поруке података&" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Укључи/искључи" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Уноси у дневник успешне& радње" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Прикључци &система датотека" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Датотека дневника радњи над датотекама" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Уписуј радње у дневник" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Стање радње" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Уклони умањене сличице непостојећих датотека" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Прегледај садржај поставки датотеке" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Образуј нову са кодирањем:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Увек иди у& корен уређаја приликом мењања уређаја" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Прикажи &тренутну фасциклу у наслову главног прозора" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Прикажи поздравни заслон" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Приказуј поруке упозорења (само дугме „У реду“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Чувај умањене сличице у остави" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Умањене сличице" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Напомене датотеке (опис)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "У односу на извоз/увоз у ТЦ:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Подразумевано кодовање писма једним бајтом:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Подразумевано кодирање:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Датотека поставки:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Извршна ТЦ-а:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Излазна путања траке прибора:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "тачке" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "Х" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Величина &умањених сличица:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Одабир мишем" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Показивач писања не прати више показивач миша" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Кликом на сличицу" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Отвори са" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Клизање" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Избор" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Начин:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Двоклик" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Линија по линија" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Линија по линија &са померањем показивача" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Страница по страница" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Једноклик (отвара датотеке и фасцикле)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Једноклик (отвара фасцикле, двоклик за датотеке)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Прегледај дневник садржаја датотеке" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Појединачне фасцикле дневно" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Заведи у дневник имена датотека са пуном путањом" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Приказуј траку изборника на врху " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Дневник преименовања" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Замени знак појединачног имена датотеке п&омоћу" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Настави у самом дневнику преименовања датотеке" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "По обрасцу" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Изађи са измењеним обрасцем" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Образац при покретању" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Д&одај" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Подеси&" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Омогући" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Уклони&" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Лицкај" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Опис" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Радно" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављено за" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Прикључци &претраге омогућују заменске алгоритме претраге, или спољне алате (као што је „locate“, итд.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Дејствени" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављен за" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Примени тренутне поставке на све подешене прикључке" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Приликом додавања новог прикључка, самостално иди у прозор лицкања" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Подешавање:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Датотека књижнице Луе за коришћење:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путања да буде у односу на:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Начин именовања датотеке прикључка приликом додавања новог прикључка:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Прикључци за сажимање се употребљавају за рад са архивама" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Дејствени" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављен за" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Прикључци за садржаје се употребљавају за проширење приказа појединости датотека као што су мп3 ознаке или својства слика у списковима датотека, или се користе у прикључцима претраге и алатима за вишеструко преимановање" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Дејствени" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављен за" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Прикључци система датотека& омогућавају приступ радњама са дисковима које нису доступне из оперативног система или спољњим уређајима ко што су Палм и џепни рачунар." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Дејсвено" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављен за" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Прикључци за преглед омогућавају приказ облика датотека као што су слике, табеле, базе података итд. у прегледнику (Ф3, Ктрл+Ку)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Радни" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Пријављен за" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Име датотеке" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Почиње са (име мора да почиње првим откуцаним знаком)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Завршава се са (последњи знак пре откуцане тачке . мора да се поклапа)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Могућности" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Потпуно слагање имена" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Величина слова претраге" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Тражи ове ставке" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Задржи преименовано име приликом откључавања листа" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Покрени циљну површ& при клику на једну од њених листова" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Прикажи и заглавље листа када се приказује само један лист" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Затвори удвостручене листове приликом затварања програма" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Потврди затварање свих листова" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Потврди затварање закључаних листова" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ограничи дужину наслова листа на" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Приказуј закључане листове &са знаком *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Листови на вишеструким линијама" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ктрл+&горе отвара нови лист у позадини" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Отвори нови лист поред тренутног листа" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Поново употребљавај постојећи лист када је могуће" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Приказуј дугме за затварање &листа" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Увек приказуј име уређаја у наслову листа" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Заглавље листа фасцикли" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "знака" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Дејство приликом двоклика на лист:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Положај лист&ова" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Ниједно" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Лево" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Десно" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Иди на поставке омиљених листова након поновног чувања" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Иди на поставке омиљених листова након чувања новог" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Омогући додатне могућности омиљених листова (изаберите циљну страну приликом повраћаја, итд.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Подразумеване додатне поставке прилиом чувања нових омиљених листова:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Додатна заглавља листова фасцикли" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Приликом повраћаја листа, постојећи листови за чување:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Листови сачувани лево ће бити повраћени у:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Листови сачувани десно ће бити повраћени у:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Чувај повест чуваних фасцикли са омиљеним листовима:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Подразумевани положај у изборнику приликом чувања нових омиљених листова:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} би обично требало да буде присутна овде ради дочаравања наредбе за покретање у терминалу" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} би обично требала да буде присутна овде ради дочаравања наредбе за извршавање у терминалу" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Наредба за извршавање само у терминалу:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Наредба за извршавање наредбе у терминалу и затварање након:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Наредба за извршавање наредбе у терминалу и остајање отвореним:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Одреднице:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Одреднице:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Одреднице:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Дугме потпуно истих умножака" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Уреди &пречицу" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Унеси ново дугме" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Изабери" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Друго..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Уклони &пречицу" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Предложи" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Нека ДЦ предлаже напомене засноване на врсти дугмади, наредби и одредницама" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Равна& дугмад" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Извештај о грешкама са наредбом" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "При&казуј натписе" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Унесите одреднице наредбе, сваку у посебној линији. Притисните Ф1 за преглед помоћи за одреднице." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Приказ" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Величина &траке:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "&Наредба:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Одредницe&:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помоћ" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Пречица:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Сличица&:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Величина& сличице:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Наредба&:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Одреднице&:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Почетна &путања:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Начин:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Напомена:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Додај траку прибора СВИМ наредбама ДЦ-а" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "спољње наредбе" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "унутрашње наредбе" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "раздвајача" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "за траке подприбора" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Остава..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Тренутна трака прибора..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "датотеци траке прибора (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "датотеци ТЦ .БАР (задржи постојећу)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "датотеци ТЦ .БАР (избриши постојећу)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Вршна трака прибора..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Сачувај залишну траку прибора" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у датотеку траке прибора (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у датотеку ТЦ .БАР (задржи постојећу)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у датотеку ТЦ .БАР (избриши постојећу)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "тик након тренутног избора" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "као први чинилац" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "као последњи чинилац" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "тик пре тренутног избора" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Поврати залишну траку прибора" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "додај тренутној траци прибора" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "за додавање нове траке прибора тренутној траци прибора" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "за додавање нове траке прибора вршној траци прибора" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "за додавање вршној траци прибора" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "за замену вршне траке прибора" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "из датотеке траке прибора (toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "за додавање тренутној траци прибора" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "за додавање нове траке прибора тренутној траци прибора" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "за додавање нове траке прибора вршној траци прибора" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "за додавање вршној траци прибора" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "за замену вршне траке прибора" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "из јединствене датотеке ТЦ .БАР" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "за додавање тренутној траци прибора" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "за додавање нове траке прибора тренутној траци прибора" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "за додавање нове траке прибора вршној траци прибора" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "за додавање вршној траци прибора" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "за замену вршне траке прибора" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "из „wincmd.ini“ из ТЦ-а..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "за додавање тренутној траци прибора" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "за додавање нове траке прибора тренутној траци прибора" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "за додавање нове траке прибора вршној траци прибора" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "за додавање вршној траци прибора" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "за замену вршне траке прибора" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "тик након тренутног избора" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "као први чинилац" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "као последњи чинилац" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "тик пре тренутног избора" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Тражи и замени..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "тик након тренутног избора" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "као први чинилац" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "као последњи чинилац" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "тик пре тренутног избора" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "у сваком изнад..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "у све наредбе..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "у сва имена сличица..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "у све одреднице..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "у све покретачке путање..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "тик након тренутног избора" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "као први чинилац" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "као последњи чинилац" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "тик пре тренутног избора" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Раздвајач" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Размак" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Врста дугмета" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Примени тренутне поставке на сва тренутно подешена имена датотека и путање" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Наредбе" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Сличице" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Покретачке путање" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Путање" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Учини ово за све датотеке и путање за:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путања да буде у односу на:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Начин за додавање путања приликом додавања чиниоца сличицама, наредбе и покретачке путање:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Задржавај отвореним прозор терминала после извршења програма" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Изврши у терминалу" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Користи спољни програм" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Додатне одреднице" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Путања програма за извршење" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Додај" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Примени&" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Умножи" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Избриши&" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Образац..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Преименуј&" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Остало..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Поставке напомена за изабране врсте датотека:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Општа својства напомена:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "&Прикажи напомену за датотеке у површи датотека" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Врста напомене&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Врста маске&:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Трајање скривања напомене:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Начин приказа напомене:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Врсте &датотека:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Одбаци измене" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Распореди врсте напомена датотека" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Двокликом на вршну траку површи датотека" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Са изборником и унутрашњом наредбом" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Двоклик на избор гранања и излаз" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Са изборником и унутрашњом наредбом" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Помоћу двоклика на лист (уколико је подешен за то)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Приликом коришћења пречице дугмади, изаћи ће из прозора враћајући тренутни избор" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Једноклик средњим дугметом у гранање изабира и излази" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Користи га за повест наредбене линије" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Користи га за повест фасцикле" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Користи га за преглед повести (посећене путање за дејствени преглед)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Понашање у односу на избор:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Односне могућности на преглед грана изборника:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Где употребити преглед изборника гранањем:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*ПРИМЕДБА: Однос према могућностима као у случају осетљивости, занемаривање нагласака или не, су сачуване и повраћене појединачно за сваки однос од употребе и седнице до осталих." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Са брзим списком фасцикли:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Са омиљеним листовима:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Са повешћу:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Користи и приказуј пречице дугмади за означавање ставки" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Словолик" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Могућности распореда и боја:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Боја позадине:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Боја показивача:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Нашао сам боју писма:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Нашао сам боју писма под показивачем:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Обична боја писма:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Обично писмо под показивачем:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Приказ прегледа изборника гранања:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Друга боја писма:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Друга боја писма под показивачем:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Боја пречице:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Пречица под показивачем:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Боја неозначивог писма:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Неозначиво под показивачем:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Промените боју на лево и видећете овде приказ како изгледају Ваши изборници гранања на овом узорку." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Број стубаца у прегледнику књига" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Подеси" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Сажми датотеке" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Направи одвојене складишта, свако посебно за одабрану датотеку и фасциклу" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Направи самоиздвајајуће складиште" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифруј" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Премести& у складиште" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Вишеструко складиште дискова" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Прво смести& у ТАР складиште" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Такође сажми& и имена путање (само рекурзивно)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Сажми датотеку(е) у датотеку:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Сажималац" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Издвоји &све и изврши" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Издвоји и изврши" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Својства сажмане датотеке" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Својства:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Ступањ сажимања:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Датум:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Начин:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Изворна величина:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Датотека:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Величина сажмане датотеке:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Сажималац:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Време:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Поставке штампања" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Ободи (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Дно:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Лево:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Деснo:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Вршно:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "Х" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Затвори површ пропусника" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Унесите писмо или услов претраге" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Аа" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Осетљиво на величину слова" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "Д" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Фасцикле" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Ф" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Датотеке" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Почетак поклапања" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Завршетак поклапања" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Услов" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Замена претраге и услова" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Још правила" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "М&ање правила" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Користи прикључке &садржаја, усклади са:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Прикључак" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Поље" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Множилац" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Вредност" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&И (сви се поклапају)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&ИЛИ (било који се поклапа)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Примени&" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Образац..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Образац..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&У реду" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Означите удвостручене датотеке" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Остави најмање једну датотеку у свакој групи неозначеном:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Уклони означено по имену/наставку:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Означи по &имену/наставку:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Откажи" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "У реду" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Раз&двајач" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Броји од" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Налаз:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Означи фасцикле за уметање (можете означити више од једне)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Крај&" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Почетак&" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Откажи" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "У реду" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Броји од почетка" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Броји од завршетка" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Опис опсега" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Налаз:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Изаберите знакове за унос:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&почетни:завршни]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[почетни,&дужина]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Крај&" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Почетак&" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "Крај&" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "Почетак&" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Измени својства" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Складиште" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Направљено:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Скривено" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Приступано:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Измењено:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Само за читање" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Укључујући подфасцикле" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Систем" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Својства временске ознаке" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сива поља означавају неизмењене вредности)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Писмо:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сива поља означавају неизмењене вредности)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Октално:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читај" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Пиши" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Разврстај" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Откажи" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "У реду" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Превуци и спусти чиниоце ради њиховог распоређивања" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Делилац" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Захтева датотеку оверавања ЦРЦ32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Величина и број делова" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Подели датотеку у фасцикли:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Броје делова" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Бајтова" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гигабајта" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Килобајта" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабајта" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Изграђен" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Отпреми" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Слободни Паскал" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Лазарус" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Оперативни систем" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преправка" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Издање" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Направи симболичку везу" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Користи &односну путању када је могуће" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Одредиште на које ће указивати веза" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име &везе" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Избриши на обе стране" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Обриши лево" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Обриши десно" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Уклони означено" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Означи за умножавање (подразумевани смер)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Означи за умножавање -> (са лева на десно)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Обрни смер умножавања" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Означи за умножавање <- (са десна на лево)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Означи за брисање <-> (обоје)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Означи за брисање <- (лево)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Означи за брисање -> (десно)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Затвори" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Упореди" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Образац..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Усклади" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Усклађене фасцикле" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "несиметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "по садржају" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "занемари датум" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "само одабрано" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Подфасцикле" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Приказуј:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Величина" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Датум" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Датум" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Величина" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(у главном прозору)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Упореди" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Приказ лево" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Приказ десно" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "удвостручења" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "појединачни" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Молим, притисните „Упореди“ за почетак" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Усклади" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Потврди преписивање" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Изборник прегледа гранања" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Означи своју брзу фасциклу:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Претражи са осетљивошћу величине слова" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Потпуно скупи" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Потпуно прошири" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Претражи занемарујући нагласке и сливена слова" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Претрага без осетљивости величине слова" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Претрага је строга у односу на нагласке и сливена слова" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Затвори изборник гранања" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Поставке изборника гранања" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Поставке боја изборника гранања" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Додај ново" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Измени" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Подразумевано" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Уклони&" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Прикључак за лицкање" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Препознај врсту складишта по садржају" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Нисам успео да &избришем датотеке" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Подржава &шифровање" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Приказуј& као обичне датотеке (сакриј сличицу сажимања)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Подржава &сажимање у меморији" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Нисам успео да изменим постојећа складишта" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Складиште може да садржи вишеструке датотеке" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Нисам успео да направим нова складишта&" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Подржава& прозор за приказ могућности" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Омогућава претрагу& писма у складиштима" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Опис&:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Препознај& ниску:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Наставци&:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Ознаке:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Име&:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Прикључак:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Прикључак:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "О прегледнику..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Приказује поруку о програму" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Самостално поново учитај" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Промени кодирање" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Умножи датотеку" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Умножи датотеку" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Умножи у оставу исечака" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Умножи у обликоване исечке" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Избриши датотеку" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Избриши датотеку" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Излаз" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Пронађи" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Нађи следеће" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Нађи претходно" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Преко целог заслона" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Иди на линију..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Иди на линију" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Усредишти" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Следећа" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Учитај следећу датотеку" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Претходна" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Учитај претходну датотеку" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Пресликај водоравно" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Пресликај" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Пресликај усправно" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Премести датотеку" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Премести датотеку" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Преглед" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Ш&тампај..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Поставке& штампања..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Учитај поново" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Поново учитај тренутну датотеку" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Обрни за 180 степени" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Обрни за -90 степени" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Обрни +90 степени" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Сачувај" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Сачувај као..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Сачувај датотеку као..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Слика заслона" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Одгоди 3 секунде" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Одгоди 5 секунди" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Означи све" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Прикажи бинарно&" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Прикажи као књигу&" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Приказуј као &декадно" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Прикажи хексадецимално&" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Прикажи као &писмо" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Прикажи као &увучено писмо" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Приказуј писмо и по&казивач" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Цртежи" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Офис ХМЛ (само писмо)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Прикључци" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Приказуј прозирност&" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Развуци" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Развуци слику" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Развуци само велике" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Опозови" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Врати" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Преламај писмо" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Увећање" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Приближи" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Приближи" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Удаљи" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Удаљи" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Опсеци" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Преко целог заслона" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Извези оквир" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Истицање" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Следећи оквир" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Обоји" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Претходни овкир" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Црвене очи" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Промени величину" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Покретне слике" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Прегледник" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Лиска" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Шифровање" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Слика" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Писаљка" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Четвороугао" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Обрни" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Слика заслона" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Прикљуци" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Почетак" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "С&тани" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Дејства над датотекама" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Увек на врху" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Користи „превуци и спусти“ ради премештања дејства између заказаних" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Откажи" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Откажи" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ново заказивање" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Приказуј у откаченом прозору" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Постави прво у заказаном" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Постави последње у заказаном" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Заказано" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Није заказано" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Заказано 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Заказано 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Заказано 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Заказано 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Заказано 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Приказуј у откаченом прозору" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Застани са свим" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "С&леди везе" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Када &фасцикла постоји" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Када датотека постоји" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Одустани" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&У реду" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Наредбена линија:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Одреднице:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Почетна путања:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Подеси&" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифруј" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Умножи в&реме и датум" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Ради у позадини (посебна веза)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Морате доставити овлашћења руковаоца" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "ради умножавања овог предмета:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "ради стварања предмета:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "ради брисања предмета:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "ради добављања својстава предмета:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "ради стварања ове чврсте везе:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "ради отварања овог предмета:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "ради преименовања овог предмета:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "ради постављања својстава овом предмету:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "ради стварања симболичке везе:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Датум настанка" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Висина" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Ширина" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Произвођач" #: uexifreader.rsmodel msgid "Camera model" msgstr "Модел камере" #: uexifreader.rsorientation msgid "Orientation" msgstr "Усмерење" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Нисам успео да пронађем датотеку и да помогнем при провери коначног склопа датотека:\n" "%s\n" "\n" "Да ли можете да омогућите то и притисните „У реду“ када буде спремно,\n" "или притисните „ОТКАЖИ“ за наставак без тога?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Откажи брзи услов" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Откажи тренутну радњу" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Унесите име датотеке, са наставком, за лепљење писма" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Облик писма за увоз" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Оштећено:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Опште:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Недостаје:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Грешка читања:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Успех:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Унеси збир за проверу и изабери алгоритам:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Провери збир" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Укупно:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Да ли желите да очистите услове ове претраге?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Остава исечака не садржи исправне податке траке алата." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Све;Дејствујућа површ;Лева површ;Десна површ;Дејства над датотекама;Поставке;Мрежа;Разно;Паралелни прикључак;Штампа;Ознака;Безбедност;Исечци;ФТП;Навођење;Помоћ;Прозор;Наредбена линија;Прибор;Приказ;Корисник;Листови;Распоред;Дневник" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Обичајно разврстано;од А-Ш" #: ulng.rscolattr msgid "Attr" msgstr "Својство" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Датум" #: ulng.rscolext msgid "Ext" msgstr "Наставак" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Име" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Величина" #: ulng.rsconfcolalign msgid "Align" msgstr "Подвуци" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Наслов" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Избриши" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Садржај поља" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Премести" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Прилагоди колону" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Подесите придруживање датотека" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Потврдите наредбену линију и одреднице" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Умножи (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Тамни начин рада" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Самостално;Омогућено;Онемогућено" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Увезена је трака прибора ДЦ-а" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Увезена је трака прибора ДЦ-а" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "ГБ" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_НалепљеноПисмо" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_НалепљеноПисмоХТМЛ" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_НалепљеноПисмоБогато" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_НалепљеноПисмоЈедноставно" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_НалепљеноПисмоУникодУТФ16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_НалепљеноПисмоУникодУТФ8" #: ulng.rsdiffadds msgid " Adds: " msgstr " Додаци: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Упоређујем..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Брисања: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Две датотеке су исте!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Поклапања: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Измене: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Шифровање" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Завршеци-линија" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Писма су иста, али следеће могућности су употребљене:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Писма су једнака, али датотеке се не поклапају!\n" "Следеће разлике су пронађене:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Прекини" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Све" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Настави" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Самостално преименуј изворне датотеке" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Сам преименуј циљне& датотеке" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Откажи" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Упореди &по садржају" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Настави" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Стопи" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "&Стопи све" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Напусти& програм" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Занемари&" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Занемари& све" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Не" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ништа" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&У реду" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Остало&" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Препиши" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Препиши &све" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Препиши све &веће" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Препиши све &старије" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Препиши све &Мање" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "П&реименуј" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Настави" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "По&ново покушај" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Као ру&ковалац" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Прескочи" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Прескочи& све" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Откључај&" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Умножи датотеку(е)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Премести датотеку(е)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Застанак&" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Почетак&" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Заказано" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Брзина %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Брзина %s/s, преостало време %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Богати облик писма;Облик ХТМЛ;Облик уникод;Облик једноставног писма" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Указивач слободног места на уређајима" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<без ознаке>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<нема уређаја>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Унутрашњи уређивач Двоструког наредника." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Иди на линију:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Иди на линију" #: ulng.rseditnewfile msgid "new.txt" msgstr "нови.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Име датотеке:" #: ulng.rseditnewopen msgid "Open file" msgstr "Отвори датотеку" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Уназад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Тражи" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Унапред" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замени" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "спољним уређивачем" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "унутрашњим уређивачем" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Изврши кроз љуску" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Изврши у терминалу и затвори" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Изврши у терминалу и остави отвореним" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "„]“ нисам пронашао у линији %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Није одређен наставак пре наредбе„%s“. Биће занемарен." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Лево;Десно;Дејствено;Мирујуће;Ништа" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Не;Да" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Извезено_из_ДК" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Питај;Препиши;Прескочи" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Питај;Споји;Прескочи" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Питај;Препиши;Препиши старије;Прескочи" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Питај;Не постављај више;Занемари грешке" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Било које датотеке" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Датотеке поставке сажимача" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Датотеке напомена ДК-а" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Фасцикла брзих датотека" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Извршне датотеке" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Датотеке поставки .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Старе датотеке ДC .tab" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Датотеке књижница" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Датотеке прикључака" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Програми и књижнице" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Услов" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Датотеке траке прибора ТК-а" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Датотеке траке прибора ДК-а" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Датотеке поставки .xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Одреди образац" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s ступањ(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "све (неограничена дубина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само тренутну фасциклу" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Фасцикла %s не постоји!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Пронашао сам: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сачувај образац претраге" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Име обрасца:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Прегледано је: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Прегледам" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Нађи датотеке" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Време претраге: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Почни са" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Словолик &конзоле" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Словни лик уређивача" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Словолик дугмади дејстава" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Словни лик дневника&" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Главни словни лик&" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Словолик путање" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Словолик налаза претраге" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Словолик траке стања" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Словолик изборника прегледа гранањем" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Словни лик прегледника&" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Словни лик прегледника& књига" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s од %s је слободно" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s је слободно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Датум и време приступа" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Својства" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Напомена" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Величина складишта" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Датум и време настанка" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Наставак" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Удружење" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Промени датум/време" #: ulng.rsfunclinkto msgid "Link to" msgstr "Веза до" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Датум и време измене" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Име" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Име без наставка" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Власник" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Путања" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Величина" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Изворна путања" #: ulng.rsfunctype msgid "Type" msgstr "Врста" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Десила се грешка при стварању чврсте везе." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "ништа;име;а-ш;ш-а;Споља, а-ш;Споља, ш-а;Величина 9-0;Величина 0-9;Датум 9-0;Датум 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Упозорење: При враћању датотеке .hotlist из оставе, тренутни списак ће бити избрисан и замењен увезеним.\n" "\n" "Да ли сигурно желите да наставите?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Прозорче умножавања и премештања" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Упореди" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Уредите напомену" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Уређивач" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Пронађи датотеке" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Главни" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Вишеструко преименовање" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Усклади фасцикле" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Прегледник" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Поставке са тим именом већ постоје.\n" "Да ли желите да их избришете?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Да ли сте сигурни да желите повратити подразумевано?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Да ли сте сигурни да желите да избришете поставку „%s“?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Умножак %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Унесите своје ново име" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Морате задржати најмање једну датотеку пречице." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Ново име" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Поставка „%s“ је измењена.\n" "Да ли желите да је сачувате сада?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Нема пречице са „ЕНТЕР“" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "По имену наредбе;По пречици дугмади (груписано);По пречици дугмади (један по реду)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Нисам успео да пронађем упут ка датотеци подразумеване траке" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "Г" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "К" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "М" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "Т" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "Б" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Списак прозора „пронађи датотеке“" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Одзначи маску" #: ulng.rsmarkplus msgid "Select mask" msgstr "Означи маску" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Унеси маску:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Преглед стубаца са таквим именом већ постоји." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Ради промене тренутног уређивачког прегледа стубаца, или САЧУВАЈ, УМНОЖИ или ОБРИШИ тренутног уређујућег" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Подесите прилагођене ступце" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Унесите ново произвољно име стубца" #: ulng.rsmenumacosservices msgid "Services" msgstr "Услуге" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Радње" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Default>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Октални" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Направи пречицу..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Одспоји мрежно складиште..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Уреди" #: ulng.rsmnueject msgid "Eject" msgstr "Избаци" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Извуци овде..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Забележи мрежно складиште..." #: ulng.rsmnumount msgid "Mount" msgstr "Прикачи" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Нова" #: ulng.rsmnunomedia msgid "No media available" msgstr "Нема доступних уређаја" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Отвори" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Отвори са" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Друго..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Сажми овде..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Поврати" #: ulng.rsmnusortby msgid "Sort by" msgstr "Разврстај по" #: ulng.rsmnuumount msgid "Unmount" msgstr "Откачи" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Прикажи" #: ulng.rsmsgaccount msgid "Account:" msgstr "Налог:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Све унутрашње наредбе Двоструког командира" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Опис: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Додатне одреднице за наредбену линију програма сажимања:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Да ли желите обухватити наводницима?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Излазна датотека CRC32 је неисправна:\n" "„%s“\n" "\n" "Да ли желите да задржите неисправну датотеку?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Да ли сте сигурни да желите отказати ову обраду?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Не можете умножавати и премештати у саму датотеку „%s“!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Нисам успео да умножим нарочиту датотеку %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Не можете избрисати %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Нисам успео да препишем фасциклу „%s“ са нефасциклом „%s“" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Нисам успео да пређем са тренутне фасцикле на „%s“!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Да ли да уклоним све листове које се не користе?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Овај лист (%s) је закључан. Да ли да је упркос томе затворим?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Потврда одреднице" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Да ли сте сигурни да желите напустити програм?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Датотека %s је измењена. Да ли желите да је умножите натраг?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Нисам успео да је умножим натраг - да ли желите да задржите измењену датотеку?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Да ли да умножим %d одабраних датотека/фасцикли?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Да умножим одабрано „%s“?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Направи нову датотеку врсте „датотека %s“ >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Унесите положај и име датотеке где сачувати датотеку траке прибора ДК-а" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Произвољно дејство" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Да ли да избришем делимично умножену датотеку ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Да ли да избришем %d одабраних датотека/фасцикли?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Да ли да преместим %d одабране датотеке/фасцикле у смеће?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Да ли да избришем одабрани „%s“?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Да ли да преместим одабрано „%s“ у смеће?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Нисам успео да преместим „%s“ у смеће. Да ли да га избришем?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск није доступан" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Унесите име произвољног дејства:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Унесите наставак датотеке:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Унесите име:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Унесите име нове врсте датотека за стварање наставка „%s“" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Десила се ЦРЦ грешка у подацима складишта" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Подаци су оштећени" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Нисам успео да се повежем са служитељем „%s“" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Нисам успео да умножим датотеку %s у %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Нисам успео да преместим фасциклу %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Нисам успео да преместим датотеку %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Датотека под именом „%s“ већ постоји." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Датум %s није подржан" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Фасцикла %s већ постоји!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Корисник је прекинуо текућу радњу" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Десила се грешка при затварању датотеке" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Нисам успео да образујем датотеку" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Нема више датотека у архиви" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Нисам успео да отворим постојећу датотеку" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Десила се грешка при читању датотеке" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Десила се грешка при упису у датотеку" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Нисам успео да образујем фасциклу %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Веза није исправна" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Нисам пронашао датотеке" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Нема довољно меморије" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Дејство није подржано!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Десила се грешка у приручном изборнику" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Десила се грешка приликом учитавања поставки" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Постоји синтаксна грешка у заменском изразу!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Нисам успео да променим назив датотеке %s у %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Нисам успео да сачувам придруживање датотека програмима!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Нисам успео да сачувам датотеку" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Нисам успео да поставим својства датотеци „%s“" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Нисам успео да поставим датум и време датотеци „%s“" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Нисам успео да поставим власника/удружење датотеци %s“" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Нисам успео да поставим овлашћења за „%s“" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Нисам успео да поставим проширена својства за „%s“" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Прихватна меморија је премала" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Превише датотека је изабрано за сажимање" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Није познат облик жељене датотеке за сажимање" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Извршна: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Стање излаза:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Да ли сте сигурни да желите уклонити све ставке из својих омиљених листова? (Опозив ове радње је немогућ!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Превуци овде остале ставке" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Унесите име ове нове ставке омиљених листова:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Чувам нову ставку омиљених листова" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Број омиљених листова успешно изведених: %d од %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Подразумеване додатне поставке за чување повести фасцикле за нови омиљени лист:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Број датотеке(а) успешно извезене(их): %d од %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Стари листови су увезени" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Означи датотеку .tab за увоз (може бити више њих одједном!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Измена последњег омиљеног листа још увек није сачувана. Да ли желите да је сачувате пре наставка?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Чувај повест фасцикле са омиљеним листовима:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Име подизборника" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Ово ће учитати омиљени лист: „%s“" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Сачувај тренутне листове преко постојећих ставки омиљених листова" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Датотека %s је измењена. Да ли да је сачувам?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s бајта, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Препиши:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Датотека %s већ постоји, да ли да је препишем?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Датотеком:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Нисам успео да пронађем датотеку „%s“." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "У погону је радња над датотекама" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Неке радње над датотекама нису довршене. Затварање Двоструког наредника може довести до губљења података." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Дужина циљног имена (%d) је више од %d знакова!\n" "%s\n" "Већина програма неће моћи да приступи датотеци/фасцикли са толико дугачким именом!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Датотека %s је означена само за читање/скривена/системска. Да ли да је избришем?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Да ли сте сигурни да желите поново учитати тренутну датотеку и одбацити измене?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Датотека величине „%s“ је превелика за одредишни склоп датотека!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Датотека %s постоји, да ли да их стопим?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Да ли да пратим симболичку везу „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Изаберите облик писма за увоз" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Додај %d означених фасцикли" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Додај означену фасциклу: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Додај тренутну фасциклу: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Наредба за извршење" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "цм_нешто" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Поставке брзог списка фасцикли" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Да ли сте сигурни да желите уклонити све уносе из брзог списка фасцикли? (Опозив ове радње је немогућ!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ово ће извршити следећу наредбу:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ово је именовано као брза фасцикла " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Ово ће изменити дејствени оквир на следећу путању:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "И нерадни оквир ће се изменити на следећу путању:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Десила се грешка приликом смештаја ставки у оставу..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Десила се грешка приликом извоза ставки..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Извези све!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Извези брзи списак фасцикли - Изаберите ставке које желите да извезете" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Извези одабране" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Увези све!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Увези брзи списак фасцикли - Изаберите ставке које желите да увезете" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Увези изабрано" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Путања:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Пронађите датотеку „.hotlist“ за увоз" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Име брзе фасцикле" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Број нових ставки: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Нема ничег за извоз!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Путања брзе фасцикле" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Поновно додај изабрану фасциклу: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Поново додај тренутну фасциклу: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Унесите путању и име датотеке брзог списка фасцикли за опоравак" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Наредба:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(крај подизборника)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Назив изборника:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Име:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(раздвајач)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Име подизборника" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Циљ подизборника" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Одређује да ли желите да разврстате радни оквир одређеним редоследом после измене фасцикле" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Одређује да ли желите да не разврставате дејствени оквир одређеним редоследом после измене фасцикле" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Неке радње за избор одређене путање односне, апсолутне, нарочите фасцикле Виндоуза, итд." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Укупан број сачуваних ставки: %d\n" "\n" "Име оставе: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Укупна број извезених ставки: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Да ли желите да избришете све чиниоце подизборника [%s]?\n" "Одговором НЕ ћете избрисати само раздвајач изборника, али ће се задржати чинилац унутар подизборника." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Унесите путању и име места за чување датотеке брзог списка фасцикли" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Нетачна је излазна дужина датотеке : „%s“" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Молим, убаците следећи диск или нешто слично.\n" "\n" "То ће вам омогућити да упишете следећу датотеку:\n" "„%s“\n" "\n" "Број бајта преостао за упис: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Грешка у наредбеној линији" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Неисправан назив датотеке" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неисправан облик у датотеци подешавања" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Хексадецимални број је неисправан: „%s“" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Неисправна путања" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Путања %s садржи недозвољене знакове." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ово није исправан прикључак!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Овај прикључак је написан за Двоструког наредника %s.%sНе може да ради са Двоструким наредником %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неисправан навод" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Неисправан избор." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Учитавам списак датотека..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Пронађи положај датотеке поставки ТЦ-а (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Пронађи извршну датотеку ТЦ-а (totalcmd.exe или totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Умножи датотеку %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Обриши датотеку %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Грешка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Покрени спољње" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Налаз спољње" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Распакујем датотеку %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Подаци: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Направи везу %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Направи фасциклу %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Премести датотеку %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Путања до датотеке %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Програмирај искључивање" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Програмирај покретање" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Уклони фасциклу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Урађено: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Направи везу %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Провери исправност датотеке %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Избриши потпуно датотеку %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Избриши потпуно фасциклу %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Главна лозинка" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Унесите поново главну лозинку:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Нова датотека" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Следећи садржај ће бити издвојен" #: ulng.rsmsgnofiles msgid "No files" msgstr "Нема датотека" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Није изабрана ниједна датотека." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Нема довољно места у одредишту. Да ли да наставим?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Нема довољно слободног места на одредишном уређају. Да ли да покушам поново?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Нисам успео да избришем датотеку %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Није примењено." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Предмет не постоји!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Дејство не може бити довршено јер је датотека отворена у другом програму:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Испод је преглед. Можете померати показивач и одабрати датотеке ради тренутног прегледа изгледа разних поставки." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Лозинка:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Лозинке се разликују!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Унесите вашу лозинку:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Лозинка (ватрени зид):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Унесите поново лозинку за систем провере:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Обриши %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Датотека „%s“ већ постоји. Да је препишем?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Да ли сте сигурни да желите избрисати претпоставку „%s“?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Десио се проблем при извршењу наредбе (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "ЛиБ: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Датотека за лепљење писма:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Молим, побрините се да ова датотека буде доступна. Покушати поново?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Унесите ново пригодно име за ове омиљене листове" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Унесите ново име за овај изборник" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Преименуј/премести %d означених датотека/фасцикли?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Преименуј/премести означено „%s“?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Да ли желите да замените ово писмо?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Молим, поново покрените Двоструког наредника да би се примениле измене" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ГРЕШКА: Десила се грешка учитавања датотеке књижнице Луа „%s“" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Означите којој врсти датотека додати наставак „%s“" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Означено: %s од %s, датотека: %d од %d, фасцикли: %d од %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Изаберите извршну датотеку за" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Молим, одаберите само датотеке за проверу збира!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Изаберите положај следећег садржаја/уређаја" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Постави ознаку уређају" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Нарочите фасцикле" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Додајте путању дејственом оквиру" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Додајте путању из мирујућег оквира" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Прегледај и користи одабрану путању" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Користи променљиве окружења..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Иди на нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Иди на променљиву окружења..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Иди на другу нарочиту фасциклу Виндоуза..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Иди на нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Начини односним на путању брзe фасциклe" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Учини путању потпуном" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Учини односном на нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Учини односном на променљиву окружења..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Учини односном на нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Учини односном на другу нарочиту фасциклу Виндоуза..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Користи нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Користи путању брзе фасцикле" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Користи другу нарочиту путању Виндоуза..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Користи нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Овај лист (%s) је закључан! Да ли отворити фасциклу у другом листу?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Преименуј лист" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Нови назив листа:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Путања до одредишта:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Грешка! Нисам успео да пронађем датотеку поставки ТЦ-а:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Грешка! Нисам успео да пронађем извршну датотеку поставки ТЦ-а:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Грешка! ТК још увек дејствује иако би требало да буде затворен после ове радње.\n" "Затворите га и притисните У РЕДУ или притисните ОТКАЖИ за отказивање." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Грешка! Нисам успео да пронађем жељену излазну фасциклу траке прибора ТЦ-а:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Унесите положај и име датотеке где сачувати датотеку траке прибора ТЦ-а" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Уграђени прозор терминала је онемогућен. Да ли желите да га омогућите?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "Упозорење: Окончавање процеса може довести до нежељених исхода укључујући губитак података и нестабилност система. Процесу неће бити омогућено да сачува своје стање или податке пре окончања процеса. Да ли сте сигурни да желите окончати процес?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Да ли желите опробати означена складишта?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "„%s“ је сада у остави исечака" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Проширење означене датотеке није међу препознатим врстама датотека" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Пронађи датотеку „.toolbar“ за увоз" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Пронађи датотеку „.BAR“ за увоз" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Унесите положај и име датотеке траке прибора за повраћај" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Сачувано!\n" "Име датотеке траке прибора је: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Превише датотека је одабрано." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Неодређено" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ГРЕШКА: Неочекивана употреба изборника прегледа гранањем!" #: ulng.rsmsgurl msgid "URL:" msgstr "Адреса:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<NO EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<NO NAME>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Корисничко име:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Корисничко име (ватрени зид):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "ПРОВЕРАВАЊЕ:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Да ли желите да проверите означене збирне провере?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Циљна датотека је покварена, збирна провера се не подудара!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Ознака уређаја:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Унесите величину уређаја:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Да ли желите да подесите положај књижнице Луа?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Да ли да потпуно избришем %d означених датотека/фасцикли?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Да ли да потпуно избришем одабрано „%s“?" #: ulng.rsmsgwithactionwith #, fuzzy msgid "with" msgstr "ширина" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Лозинка је погрешна!\n" "Молим, покушајте поново!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Да ли самопреименовати у „име (1).нст“ „име (2).нст“ итд.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Бројач" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Датум" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Име обрасца" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Одреди име променљиве" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Одреди вредност променљиве" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Унесите име променљиве" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Унесите вредност променљивој „%s“" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Занемари, само сачувај као [Last One];Упитај корисника да потврди да ли ће сачувати;Сачувај самостално" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Наставак" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Име" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без измена;ВЕЛИКА СЛОВА;мала слова;Први знак велики;Први Знак Сваке Речи Велики;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[последње употребљено]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Последња маска под претпоставком [Last One];Последња претпоставка;Нове свеже маске" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Вишеструко преименовање" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Знак на положају x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Знаци од положаја x до положаја y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Потпуни датум" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Потпуно време" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Бројач" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Дан" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Дан (2 цифре)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Дан у недељи (кратко, нпр. „пон“)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Дан у недељи (потпуно, нпр. „понедељак“)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Наставак" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Потпуно име датотеке са путањом и наставком" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Потпуно име датотеке, знак од положаја х до у" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "ГУИД" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Час" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Час (2 знака)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Минут" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Минут (2 знака)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Месец" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Месец (2 знака)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Име месеца (кратко, нпр., „јан“)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Име месеца (пуно, нпр., „јануар“)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Име" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Родитељска(е) фасцикла(е)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Секунд" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Секунд (2 знака)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Променљиво у ходу" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Година (2 знака)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Година (4 знака)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Прикљуци" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Сачувај претпоставку као" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Име претпоставке већ постоји. Да ли га преписати?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Унесите ново име претпоставке" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Претпоставка „%s“ је измењена.\n" "Да ли желите да је сачувате сада?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Распоред претпоставки" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Време" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Упозорење, имена су удвостручена!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Датотека садржи погрешан број линија: %d, треба да буду %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "_Задржи;Очисти;Питај" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Нема унутрашње одговарајуће наредбе" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Нажалост, још увек нема прозора „Пронађи датотеке“..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Нажалост, нема другог прозора „Пронађи датотеке“ за затварање и ослобађање из памети..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Развој" #: ulng.rsopenwitheducation msgid "Education" msgstr "Образовање" #: ulng.rsopenwithgames msgid "Games" msgstr "Игре" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Цртежи" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Мултимедија" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsopenwithoffice msgid "Office" msgstr "Уред" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Разно" #: ulng.rsopenwithscience msgid "Science" msgstr "Наука" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Поставке" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Склоп" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Прибор" #: ulng.rsoperaborted msgid "Aborted" msgstr "Обустављено" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Израчунавам збирну проверу" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Рачунам збирну проверу у „%s“" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Рачунам збирну проверу „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Рачунам" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Рачунам „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Спајам" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Спајам датотеке из „%s“ на „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Умножавам" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Умножавам из „%s“ у „%s“" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Умножавам „%s“ на „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Стварам фасциклу" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Стварам фасциклу „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Бришем" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Бришем из „%s“" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Бришем „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Извршавам" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Извршавам „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Издвајам" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Издвајам из „%s“ у „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Готово" #: ulng.rsoperlisting msgid "Listing" msgstr "Листам" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Листам „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Премештам" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Премештам из „%s“ у „%s“" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Премештам „%s“ на „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Није покренуто" #: ulng.rsoperpacking msgid "Packing" msgstr "Сажимам" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Сажимам из „%s“ у „%s“" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Сажимам „%s“ у „%s“" #: ulng.rsoperpaused msgid "Paused" msgstr "Застанак" #: ulng.rsoperpausing msgid "Pausing" msgstr "Застанак" #: ulng.rsoperrunning msgid "Running" msgstr "Покренуто" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Постављам својства" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Постављам својства у „%s“" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Постављам својства датотеци „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Дељење" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Делим „%s“ на „%s“" #: ulng.rsoperstarting msgid "Starting" msgstr "Покрећем" #: ulng.rsoperstopped msgid "Stopped" msgstr "Заустављено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Прекидам" #: ulng.rsopertesting msgid "Testing" msgstr "Пробање" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Пробам у „%s“" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Пробам „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверавам збир" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Проверавам збир у „%s“" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Проверавам збир „%s“" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Чекам на приступ изворној датотеци" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Чекам на одзив корисника" #: ulng.rsoperwiping msgid "Wiping" msgstr "Брисање" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Брисање у „%s“" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Брисање „%s“" #: ulng.rsoperworking msgid "Working" msgstr "Рад" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Додај на &почетак;На крај;Паметно додавање" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Додај нову врсту напомена" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Измени тренутне поставке уређивања складишта, или ПРИМЕНИ или ОБРИШИ тренутне" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Зависи од начина рада, додатна наредба" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Додај уколико није празно" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Датотека складишта (дугачко име)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Изаберите извршну датотеку сажимача" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Датотека складишта (кратко име)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Измени шифровање списка сажимача" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Да ли сте сигурни да желите избрисати: „%s“?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Извези поставке сажимача" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "ступањгрешке" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Извези поставке сажимача" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Извоз %d чинилаца у датотеку „%s“ је завршен." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Изаберите ону(е) коју(е) желите извести" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Списак датотека (дугачка имена)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Списак датотека (кратка имена)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Увези поставке сажимача" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Извоз %d чинилаца из датотеке „%s“ је завршен." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Изаберите датотеку за извоз поставке(и) сажимача" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Изаберите ону(е) коју(е) желите извести" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Само име, без путање" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Користи само путању, без имена" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Програм сажимача (дугачко име)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Програм сажимача (кратко име)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Наведите сва имена" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Наведите имена са размацима" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Једно име датотеке за обраду" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Циљна подфасцикла" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Користи шифровање АНСИ" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Користи шифровање УТФ8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Унесите положај и име датотеке где сачувати поставке сажимача" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Назив врсте складишта:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Придружи прикључак „%s“ са:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Први;последњи;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Уобичајен, стари распоред;Азбучни распоред (али језик првенствено)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Потпуно прошири;Потпуно скупи" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Дејствени оквир лево, мирујући десно (уобичајено);Лева оквирна површ на лево, десна на десно" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Унесите наставак" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Додај на почетак;Додај на концу;Азбучни распоред" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "одвојен прозор;умањен одвојен прозор;површ радњи" #: ulng.rsoptfilesizefloat msgid "float" msgstr "покретна тачка" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Пречица %s за „cm_Delete“ ће бити пријављена, тако да може бити коришћена за враћање ове поставке." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Додај пречицу за %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Додај пречицу" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Нисам успео да поставим пречицу" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Измени пречицу" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Наредба" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Пречица %s има одредницу која заобилази ове поставке. Да ли желите да измените одредницу и користите опште поставке?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Пречици %s за „cm_Delete“ треба да се промени одредница д би се слагала са пречицом %s. Да ли желите да је промените?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Опис" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Уреди пречицу за %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Исправи одредницу" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Пречица" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Пречице" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ништа>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Одреднице" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Постави пречицу за брисање датотеке" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Да би ове поставке радиле са пречицом %s, пречица %s мора да буде додељена „cm_Delete“, али је већ додељена за %s. Да ли желите да је промените?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Пречица %s за „cm_Delete“ је низ за који дугме Шифт не може бити додељено. Највероватније неће радити." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Пречица је у употреби" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Пречица %s већ постоји." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Да ли је доделити %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "користи се за %s у %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "користи за ову наредбу са другачијим одредницама" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Програми за сажимање" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Самоосвежавање" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Понашање" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Сажето" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Боје" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Ступци" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Поставке" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Прилагођене боје" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Додатни врући списак фасцикли" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Превуци и спусти" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Дугме за списак уређаја" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Омиљени листови" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Додатно придруживање датотека" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Придруживање датотека" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Нови" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Радње над датотекама" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Површи датотека" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Претрага датотека" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Прегледи датотека" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Додатни преглед датотека" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Врсте датотека" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Листови датотека" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Додатни листови датотека" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Словни ликови" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Истицање" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Пречице" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Сличице" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Занемари списак" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Тастери" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Језик" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Распоред" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Дневник" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Разно" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Миш" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Вишеструко преименовање" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Могућности су измењене у „%s“\n" "\n" "Да ли желите сачувати измене?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Прикључци" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Брза претрага/услов" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Трака алата" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Додатна трака прибора" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Средишња трака прибора" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Алатке" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Напомене" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Изборник прегледа гранањем" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Боје изборника гранања" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ништа;Наредбена линија;Брза претрага;Брзи услов" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Лево дугме;Десно дугме;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "на врху списка датотека:после фасцикли (ако се фасцикле приказују пре датотека); на одређеном положају;на дну списка датотека" #: ulng.rsoptpersonalizedfilesizeformat #, fuzzy msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Произвољни децимални број;Произвољни бајт;Произвољни килобајт;Произвољни мегабајт;Произвољни гигабајт;Произвољни терабајт" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Прикључак %s је већ додељен следећим наставцима:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "О&немогући" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Омогући" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Радни" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Опис" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Име датотеке" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "По наставку" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "По прикључку" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Име" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Распоређивање прикључака ВЦХ-а је могуће једино при приказу прикључака по наставку!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Пријављен за" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Одаберите датотеку књижнице Луа" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Преименовање врсте датотеке напомене" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Осетљиво;&Неосетљиво" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Датотеке;&Фасцикле;Датотеке и фасцикле" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Сакриј површ услова када он није у жижи;Чувај поставке измена за следећу седницу" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "неосетљиво на величину слова;према поставкама локалитета (аАбБвВ);прво велика, па мала слова (АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "распореди по имену и прикажи прву;распореди као датотеке и прикажи прву;распореди као датотеке" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Азбучно, водећи рачуна о нагласцима;Азбучно са разврставањем по нарочитим знаковима;Природан распоред: азбучно и бројевно;Природно са разврставањем по нарочитим знаковима" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Врх;Дно;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Раздвајач&;&унутрашња наредба;&Спољна наредба;Изборник&" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Ради измене поставки врсте датотеке напомене, или ПРИМЕНИ или ИЗБРИШИ тренутно уређивану" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Врста имена&:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "„%s“ већ постоји!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Да ли сте сигурни да желите избрисати: „%s“?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Поставке врсте датотеке напомена су извезене" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Извези поставке врсте датотеке напомене" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Извоз %d чинилаца у датотеку „%s“ је завршен." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Изаберите ону(е) коју(е) желите извести" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Увези поставке врсте датотеке напомене" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Извоз %d чинилаца из датотеке „%s“ је завршен." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Изаберите датотеку за увоз поставке(и) врсте датотеке напомене" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Изаберите ону(е) коју(е) желите увести" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Унесите положај и врсту датотеке где сачувати поставке врсте датотеке напомене" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Име врсте датотеке напомене" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "ДК обичајно - Умножи (х) имедатотеке.нст;Виндоуз - имедатотеке (х).нст;Остало имедатотеке(х).нст" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не мењај положај;користи исте поставке за нове датотеке;на положају по распореду" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "При довршавању укупне путање;Путања односна на %COMMANDER_PATH%;Односна на следећу" #: ulng.rspluginsearchcontainscasesenstive #, fuzzy msgid "contains(case)" msgstr "садржи(величина)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "садржи" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(величина)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Нисам пронашао поље „%s“!" #: ulng.rspluginsearchnotcontainscasesenstive #, fuzzy msgid "!contains(case)" msgstr "!садржи(величина)" #: ulng.rspluginsearchnotcontainsnotcase #, fuzzy msgid "!contains" msgstr "!садржи" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(садржи)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!регуларанизраз" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Нисам пронашао прикључак „%s“!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "регуларанизраз" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Нисам пронашао јединицу „%s“ на пољу „%s“!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Датотека: %d, фасцикли: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Нисам успео да променим права приступа за „%s“" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Нисам успео да променим власника „%s“" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Датотека" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Фасцикла" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Именована цев" #: ulng.rspropssocket msgid "Socket" msgstr "Утичница" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Нарочити блок уређај" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Нарочити знаковни уређај" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Симболичка веза" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Непозната врста" #: ulng.rssearchresult msgid "Search result" msgstr "Излази претраге" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Тражи" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<неименовани образац>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Претрага датотека коришћењем прикључка ДСХ је већ у току.\n" "Треба нам да се обрада заврши пре покретања нове." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Претрага датотека коришћењем прикључка ВДХ је већ у обради.\n" "Треба нам да се обрада заврши пре покретања нове." #: ulng.rsselectdir msgid "Select a directory" msgstr "Изаберите фасциклу" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Најновија;Најстарија;Највећа;Најмања;Прва у групи;Последња у групи" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Изаберите себи прозор" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Прикажи помоћ за %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Све" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Врста" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Стубац" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Наредба" #: ulng.rssimpleworderror msgid "Error" msgstr "Грешка" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Неуспех!" #: ulng.rssimplewordfalse msgid "False" msgstr "Нетачно" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Име датотеке" #: ulng.rssimplewordfiles msgid "files" msgstr "датотеке" #: ulng.rssimplewordletter msgid "Letter" msgstr "Слово" #: ulng.rssimplewordparameter msgid "Param" msgstr "Одредница" #: ulng.rssimplewordresult msgid "Result" msgstr "Налаз" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Успех!" #: ulng.rssimplewordtrue msgid "True" msgstr "Тачно" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Променљива" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Радна фасцикла" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Бајтова" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гигабајта" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Килобајта" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабајта" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабајта" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Датотека: %d, Фасцикли: %d, Величина: %s (%s бајта)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Нисам успео да направим циљну фасциклу!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Облик величине датотеке није исправан!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Нисам успео да поделим датотеку!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Број делова је више од 100! Да ли да наставим?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Самостално;1457664B - 3.5\" висока густина 1.44M;1213952B - 5.25\" висока густина 1.2M;730112B - 3.5\" двострука густина 720K;362496B - 5.25\" двострука густина 360K;98078KB - ЗИП 100MB;650MB - ЦД 650MB;700MB - ЦД 700MB;4482MB - ДВД+Р" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Изаберите фасциклу:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Само преглед" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Остало" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "ОУ" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Бочна белешка" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Равна" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Ограничена" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Једноставна" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Велика" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Превелика" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Огромна" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Изаберите своју фасциклу из повести фасцикле" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Изаберите своје омиљене листове:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Изаберите своју наредбу из повести наредбене линије" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Изаберите себи дејство из главног изборника" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Изаберите себи дејство из траке главног прибора" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Изаберите себи фасциклу из брзе фасцикле:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Изаберите себи фасциклу из повести прегледа датотека" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Изаберите себи датотеку или фасциклу" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Грешка приликом стварања симболичке везе." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Подразумевано писмо" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Обично писмо" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Не чини ништа;Затвори лист;Приступи омиљеним листовима;Искочи изборником листова" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Дан(и)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Сат(и)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Минут(и)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Месец(и)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунда (е)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Недеља(е)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Година(е)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Преименуј омиљене листове" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Преименуј подименик омиљених листова" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Упореди" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Уређивач" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Десила се грешка при отварању програма за разлике" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Десила се грешка при отварању уредника" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Десила се грешка при отварању терминала" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Десила се грешка при отварању прегледника" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Подразумевано на систему;1 сек;2 сек;3 сек;5 сек;10 сек;30 сек;1 мин;Никад не скривај" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Упоредо користи ДК-ове и системске напомене, ДК-ове прво (обичајно);Упоредо користи ДК-ове и системске напомене, системске прво;Приказуј ДК-ове напомене кад је могуће и системске када није;Приказуј само системске напомене" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Прегледник" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Пријавите грешку буболовцу са описом радње коју сте примењивали на следећу датотеку: %s. Притисните %s за наставак или %s за излазак из програма." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Обе површи, од дејствене ка мирујућој" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Обе површи, са леве на десну" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Путања површи" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Ставите свако име међу наводнике или како желите" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Само име датотеке, без наставка" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Потпуно име датотеке (путања+име датотеке)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Помоћ са променљивом „%“" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Захтеваће од корисника да унесе одредницу са подразумеваном предложеном вредношћу" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Последња фасцикла путање површи" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Последња фасцикла путање датотеке" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Лева површ" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Привремено име датотеке списка имена датотека" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Привремено име датотеке списка потпуних имена датотека (путања+име датотеке)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Имена датотека у списку у УТФ-16 са БОМ" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Имена датотека у списку у УТФ-16 са БОМ, унутар двоструких наводника" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Имена датотека у списку у УТФ-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Имена датотека у списку у УТФ-8, унутар двоструких наводника" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Привремена имена датотека списка имена датотека са односном путањом" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Само наставци датотеке" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Само име датотеке" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Други примери могућег" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Путања, без завршног раздвајача" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Одавде до краја линије, указивач постотка-променљиве је знак „#“" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Врати знак постотка" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Одавде до краја линије, указивач постотка-променљиве је поново знак „%“" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Претпостави свако име са „-а“ или произвољно" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Упитај корисника за одредницу;Предложена је подразумевана вредност]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Име датотеке са односном путањом" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Десна површ" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Пуна путања друге избрисане датотеке у десној површи" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Приказуј наредбу пре извршења" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Једноставна порука]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Приказаће једноставну поруку" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Дејствена површ (извор)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Мирујућа површ (циљ)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Имена ће бити наведена одавде (подразумевано)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Наредба ће бити извршена у терминалу, остајући отворен на концу" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Путање ће имати завршне раздвајаче" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Имена неће бити навођена одавде" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Наредба ће бити извршена у терминалу, затварајући га на концу" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Путање неће имати завршни раздвајач (подразумевано)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Корпа смећа" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Унутрашњи прегледник Двоструког наредника." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Лоша каквоћа" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Шифровање" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Врста слике" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Нова величина" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "Нисам успео да пронађем %s!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Писаљка;Четвороугао;Лист" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "са спољним прегледником" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "са унутрашњим прегледником" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Број замена: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Није било замене." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Нисам нашао поставку названу „%s“" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.sl.po�����������������������������������������������������������0000644�0001750�0000144�00001377042�15104114162�017301� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovenian translations for double-commander. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # This file is distributed under the same license as the double-commander package. # # Matej Urbančič <mateju@src.gnome.org>, 2011–2023. msgid "" msgstr "" "Project-Id-Version: double-commander master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-08-29 21:01+0200\n" "Last-Translator: Matej Urbančič <mateju@src.gnome.org>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 3.0.1\n" "X-Native-Language: Slovenščina\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Poteka primerjava ... %d%% (s tipko ESC se opravilo prekliče)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Levo: izbriši %d datotek" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Desno: izbriši %d datotek" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Število najdenih datotek: %d (Enakih: %d, Različnih: %d, Različnih na levi: %d, Različnih na desni: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Z leve na desno: kopiraj %d datotek skupne velikosti %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Z desne na levo: kopiraj %d datotek skupne velikosti %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Izbor predloge ..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Preveri &zasedenost prostora" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Kopiraj atribute" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiraj &lastništvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopiraj &dovoljenja" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopiraj &datum in čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Popravi &povezave" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Izpusti zastavico le za branje" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Ne &upoštevaj praznih map" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Sledi &povezavam" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Zadrži prostor" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Kopiraj ob zapisovanju" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Preveri" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Kaj storiti, ko ni mogoče nastaviti časa datoteke, atributov ..." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Uporabi predlogo datotek" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Če mapa že obstaja" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Če datoteka &že obstaja" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ko &lastnosti ni mogoče nastaviti" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<brez predloge>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Zapri" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiraj v odložišče" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Datum izgradnje" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Uveljavi" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Spletna stran:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Predelava" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Različica" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Prekliči" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "V &redu" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Ponastavi" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Izbor atributov" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Arhiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "&Stisnjeno" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Mapa" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Šifrirano" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Skrito" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Le za &branje" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Redko" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Lepljivo" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Simbolna povezava" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "S&istem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Začasno" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributi NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Splošni atributi" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Biti:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Drugo" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Lastnik" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Izvajanje" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Branje" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Kot &besedilo:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Pisanje" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Primerjalni preizkus" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Velikost podatkov za preizkus: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Nadzorna vsota" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Čas (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Hitrost (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Izračunaj nadzorne vsote ..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Po koncu izračunavanja odpri datoteko nadzorne vsote" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Za vsako datoteko &ustvari ločeno datoteko nadzorne vsote" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Shrani datoteke z nadzornimi &vsotami v:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Preveri nadzo&rno vsoto ..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Nabor znakov" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Povezava" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "&Izbriši" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "&Uredi" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Upravljalnik povezav" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Povezava s strežnikom:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Dodaj v vrsto" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Možnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Shrani trenutne možnosti kot privzete" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Kopiraj datoteke" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova čakalna vrsta" # xxx #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Vrsta 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Vrsta 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Vrsta 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Vrsta 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Vrsta 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Shrani opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Opomba datoteke ali mape" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Uredi opombo za:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "&Kodni nabor:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samodejna primerjava" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Dvojiški način" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Prekliči" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Prekliči" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Kopiraj blok na desno" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiraj blok na desno" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Kopiraj blok na levo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiraj blok na levo" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Kopiraj" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Izreži" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Izbriši" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Prilepi" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Ponovno uveljavi" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Ponovno uveljavi dejanje" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Izberi &vse" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Razveljavi" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Razveljavi dejanje" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Končaj" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Najdi" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Najdi" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Iskanje naprej" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Najdi naslednje" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Iskanje nazaj" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Najdi predhodno" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Zamenjaj" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Zamenjaj" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Skoči v vrstico ..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Skoči v vrstico" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Prezri velikost črk" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Prezri prazne" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Nadaljuj z drsenjem" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Zadnja razlika" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Zadnja razlika" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Vrstične razlike" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Naslednja razlika" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Naslednja razlika" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Odpri levo ..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Odpri desno ..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Obarvaj ozadje" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Predhodna razlika" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Predhodna razlika" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Ponovno naloži" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Ponovno naloži" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Shrani" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Shrani" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Shrani kot ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Shrani kot ..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Shrani levo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Shrani levo" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Shrani levo kot ..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Shrani levo kot ..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Shrani desno" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Shrani desno" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Shrani desno kot ..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Shrani desno kot ..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Primerjava" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Primerjava" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Nabor znakov" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Nabor znakov" #: tfrmdiffer.caption msgid "Compare files" msgstr "Primerjava datotek" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Dejanja" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Datoteka" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Možnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj novo tipkovno bližnjico v zaporedje" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Odstrani zadnjo tipkovno bližnjico iz zaporedja" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Izbor tipkovne bližnjice iz seznama preostalih neuporabljenih tipk" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Le za navedene tipke" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (vsak ločeno v svoji vrstici):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Tipkovne bližnjice:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O programu" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Nastavitve" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Nastavitve" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Izreži" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Najdi" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Najdi" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Najdi naslednje" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Najdi naslednje" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Najdi predhodno" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Skoči v vrstico ..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ponovno uveljavi" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Zamenjaj" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Zamenjaj" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Izberi &vse" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Izberi vse" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Razveljavi" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Razveljavi" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Zapri" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Končaj" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Nova datoteka" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Odpri" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Odpri" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Ponovno naloži" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Shrani" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Shrani" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Shrani &kot ..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Shrani kot" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Urejevalnik" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "Pomo&č" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Odpri kot" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Shrani kot ..." #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Poudarjanje skladnje" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Zapis konca vrstice" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Večvrstični vzorec" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Upoštevanje &velikosti črk" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Išči od &kazalke naprej" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Logični izraz" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Le izbrano &besedilo" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Le &cele besede" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Možnost" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "Zamenjaj &z:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Poišči:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Smer" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Ponovi za &vse trenutne predmete" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Odpakiranje datotek" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Odpakiraj poti datotek, če to se shranjene v arhivu" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Odpakiraj vsak arhiv v &ločeno podrejeno mapo (z imenom vsakega arhiva)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Prepiši obstoječe datoteke" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "V &mapo:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Odpakiraj datoteke z masko:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Geslo šifriranih datotek:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Počakaj ..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ime datoteke:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "Iz:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na gumb za zapiranje, ko se začasno datoteko lahko izbriše!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Na &okno" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Poglej &vse" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Trenutno opravilo:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "V:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Lastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Dovoli izvajanje datote&ke kot programa" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "&Po strukturi map" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biti:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostalo" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Črkovno:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Vsebuje:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Ustvarjeno:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvajanje" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Izvedi:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pot:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Zadnji dostop:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Spremenjeno:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Stanje je spremenjeno:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Povezave:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Vrste predstavne vsebine:" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Osmiško:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "&Lastnik" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Branje" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Velikost na disku:" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Simbolna povezava na:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Vrednost" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Atributi" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Vstavki" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Lastnosti" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zapri" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Vsili končanje" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Odkleni" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Odkleni vse" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Odkleni" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Ročnik datoteke" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ID opravila" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Pot do izvedljive datoteke" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "&Prekliči" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Prekliči iskanje in zapri okno" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "Nastavitev hitrih tipk" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Uredi" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Izpiši v &seznam" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Prekliči iskanje, zapri okno in sprosti pomnilnik" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Za vsa ostala iskanja, prekliči iskanje, zapri in sprosti pomnilnik." #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Skoči na datoteko" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Najdi podatke" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Zadnje iskanje" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Novo iskanje" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Novo iskanje (počisti filtre)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Skoči na stran »Napredno«" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Skoči na stran »Nalaganje/Shranjevanje«" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Skoči na &naslednjo stran" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Skoči na stran »Vstavkov«" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Skoči na &predhodno stran" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Skoči na stran »Rezultatov«" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Skoči na stran »Osnovno«" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Začni" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Pogled" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Dodaj" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Shrani" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Naloži" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Shrani" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sh&rani z možnostjo »Začni v mapi«" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "V kolikor je možnost »Začni v mapi« shranjena, bo mesto obnovljeno med nalaganjem predloge. Možnost je uporabna pri iskanju v določeni mapi." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Uporabi predlogo" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Najdi datoteke" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Upoštevaj &velikost črk" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Od datuma:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "&Do datuma:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Od velikosti:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "&Do velikosti:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Omogoči iskanje v &arhivih" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Najdi &besedilo" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Sledi &simbolnim povezavam" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Najdi datoteke, ki &ne vsebujejo besedila" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ni &starejše kot:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Pisarna &XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Odprti zavihki" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Poišči &del imena datoteke" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "&Logični izraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "&Zamenjaj besedilo z" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Izbrane datoteke in mape" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Logični izraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Od časa:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&Do časa:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Uporabi vstavek &iskanja:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "po vsebini" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "po iskalnem nizu" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "po imenu" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Poišči &podvojene datoteke:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "Arhivirana velikost:po velikosti" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Šestnajstiško" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Vpis imen map, ki naj ne bodo upoštevana v iskanju. Imena morajo biti ločena s podpičjem » ; «." #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Vpis imen datotek, ki naj ne bodo upoštevana v iskanju. Imena morajo biti ločena s podpičjem » ; «." #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Vpis imen datotek, ločenih s podpičjem » ; «" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Vstavek" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Polje" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Vrednost" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mape" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Datoteke" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Najdi podatke" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "&Atributi" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "&Kodiranje:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Ne upoštevaj &podmap:" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Ne upoštevaj &datotek" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Poišči datoteke z &masko:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Začni v &mapi" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Poišči tudi po &podrejenih mapah:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Shranjena iskanja:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Dejanje" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Za vsa ostala prekliči iskanje, zapri in sprosti pomnilnik" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Odpri v novem zavihku" #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odstrani s seznama" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Rezultat" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Pokaži vse najdene predmete" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Pokaži v urejevalniku" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Pokaži v pregledovalniku" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "&Pogled" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Napredno" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Naloži/Shrani" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Vstavki" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Rezultati" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Običajno" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Najdi" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Najdi" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&V obratni smeri" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Upoštevaj &velikost črk" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Logični izrazi" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Šestnajstiško" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Domena:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Geslo:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Uporabniško ime:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Poveži brezimno" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Poveži kot uporabnik:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Ustvarjanje trde povezave" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "&Cilj, na katerega po kazala povezava" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "Ime &povezave" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Uvozi vse!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Uvozi izbrano" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Izberite vnose, ki jih želite uvoziti" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "S klikom na podrejeni meni bo izbran celoten meni" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "S klikom ob sočasno pritisnjeni tipki CTRL je mogoče izbrati več poljubnih predmetov" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Povezovalnik" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Shrani v ..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Predmet" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "&Ime datoteke" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "&Dol" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Navzdol" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Odstrani" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "&Gor" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Navzgor" #: tfrmmain.actabout.caption msgid "&About" msgstr "&O programu" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Omogoči zavihek po indeksu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Doda ime datoteke v ukazno vrstico" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Novo iskanje ..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Doda pot in ime datoteke v ukazno vrstico" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopira pot v ukazno vrstico" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Dodaj vstavek" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Primerjalni preizkus" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Datotečni pogled" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Datotečni pogled" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Preračunaj &zasedenost prostora" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zamenjaj mapo" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Pojdi v osebno mapo" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Zamenjaj mapo v nadrejeno" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Zamenjaj mapo v korensko" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Izračunaj &nadzorno vsoto ..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "Preveri nadzo&rne vsote ..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Počisti dnevniško datoteko" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Počisti dnevniško okno" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Zapri &vse zavihke" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zapri podvojene zavihke" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Zapri zavihek" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Naslednji ukaz" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Izberi naslednji ukaz v zgodovini izvedenih ukazov." #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Predhodni ukaz" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Izberi predhodni ukaz v zgodovini izvedenih ukazov." #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Podrobni pogled" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Stolpčni pogled" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Primerjaj po &vsebini" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Primerjaj mapi" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Primerjava map" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Nastavitve pakirnikov" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Možnosti seznama hitrih map" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Možnosti priljubljenih zavihkov" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Možnosti zavihkov map" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Nastavitev hitrih tipk" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Nastavitev vstavkov" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Shrani položaj" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Shrani nastavitve" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Nastavitev iskanja" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Orodna vrstica ..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Nastavitev orodnih namigov" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Nastavljanje menija drevesnega pogleda" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Nastavljanje barv menija drevesnega pogleda" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Pokaži vsebinski meni" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopiraj vse zavihke na nasprotno okno" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiraj vse prikazane &stolpce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiraj imena datotek s polno &potjo" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiraj i&mena datotek v odložišče" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopiraj imena s potjo UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiraj datoteke brez zahteve po potrditvi" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiraj polno pot izbranih datotek brez ločilnika konca mape" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiraj imena datotek s polno &potjo" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiraj v isto okno" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiraj" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Pokaži &zasedenost prostora" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "I&zreži" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Pokaži parametre ukaza" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Za vsa iskanja prekliči iskanje, zapri in sprosti pomnilnik" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Zgodovina mape" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Seznam &hitrih map" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Izvedi ¬ranji ukaz" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Izbor kateregakoli ukaza za izvajanje" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Uredi &opombe datotek ..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Uredi novo datoteko" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Uredi polje poti nad seznamom datotek" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zamenjaj &okni" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Izvedi skript" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Odpa&kiraj datoteke ..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Možnosti datotečnih &vezi" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Zdr&uži razdeljeno datoteko ..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Pokaži &lastnosti datoteke" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Raz&deli datoteko ..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Ploski pogled" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Ploski pogled, le izbrano" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Postavi ukazno vrstico v žarišče" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Preklopi žarišče" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Preklopi med levim in desnim datotečnim oknom" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Žarišči okno drevesnega prikaza" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Preklopi med trenutnim seznamom datotek in drevesnim pogledom (če je omogočeno)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Postavi kazalko na prvo mapo ali datoteko" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi kazalko na prvo datoteko seznama" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Postavi kazalko na zadnjo mapo ali datoteko" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi kazalko na zadnjo datoteko seznama" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Postavi kazalko na naslednjo mapo ali datoteko" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Postavi kazalko na predhodno mapo ali datoteko" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Ustvari &trdo povezavo ..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Kazalo pomoči" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Vodo&ravna postavitev oken" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tipkovne bližnjice" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Datotečni pogled v levem oknu" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Stolpčni pogled v levem oknu" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levo &= Desno" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Ploski pogled v levem oknu" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Odpri seznam levega pogona" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "O&brnjen vrstni red v levem oknu" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Razvrsti levo okno po &atributih" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Razvrsti levo okno po &datumu" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Razvrsti levo okno po &priponi" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Razvrsti levo okno po &imenu" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Razvrsti levo okno po &velikosti" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Pogled sličic v levem oknu" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Naloži zavihke iz seznama priljubljenih" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Naloži seznam" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Naloži seznam datotek/map iz posebne besedilne datoteke" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Naloži izbor iz o&dložišča" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Naloži izbor iz datoteke ..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Naloži nastavitve zavihkov iz datoteke" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Ustvari &mapo" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Izberi vse datoteke z &enako pripono" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Izberi vse datoteke z enakim imenom" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Izberi vse datoteke z enakim imenom in pripono" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Izberi vse datoteke na isti poti" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Obrni iz&bor" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Izberi &vse" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Počisti i&zbor po meri ..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Izberi po meri ..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Počisti &izbor" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Skrči okno" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Premakne trenutni zavihek v levo" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Premakne trenutni zavihek v desno" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Napredno &preimenovanje" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Omrežna &povezava ..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Prekini omrežno povezavo" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Hitra povezava z omrežjem ..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Ustvari nov &zavihek" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Naloži naslednji priljubljen zavihek na seznamu" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Preklopi na &naslednji zavihek" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Poskusi odpreti arhiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Odpri datoteko orodne vrstice" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "O&dpri mapo v novem zavihku" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Odpri seznam pogona po določilu" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Odpri seznam &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Pre&gledovalnik opravil" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Možnosti ..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Zapakira&j datoteke ..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Določi položaj razdelilnika" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Prilepi" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Naloži predhodni priljubljen zavihek na seznamu" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Preklopi na &predhodni zavihek" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hitri filter" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Hitro iskanje" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Okno &hitrega predogleda" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Osveži" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Ponovno naloži zadnji naložen priljubljen zavihek" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Premakni" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Premakni/Preimenuj datoteke brez zahteve po potrditvi" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Pr&eimenuj zavihek" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Ponovno shrani zadnji naložen priljubljen zavihek" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Obnovi zapomnjen izbor" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&brni razvrstitev" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Datotečni pogled v desnem oknu" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Stolpčni pogled v desnem oknu" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Desno &= Levo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Ploski pogled v desnem oknu" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Odpri seznam desnega pogona" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "O&brnjen vrstni red v desnem oknu" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Razvrsti desno okno po &atributih" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Razvrsti desno okno po &datumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Razvrsti desno okno po &priponi" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Razvrsti desno okno po &imenu" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Razvrsti desno okno po &velikosti" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Pogled sličic v desnem oknu" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Zaženi &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Shrani trenutne zavihke med priljubljene" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Shrani vse prikazane &stolpce v datoteko" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Zapomni si izb&or" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Shrani &izbor v datoteko ..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Shrani nastavitve &zavihkov v datoteko" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "I&skanje ..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Nastavi vse zavihke kot zaklenjene z možnostjo odpiranja map v novih zavihkih" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Nastavi vse zavihke kot običajne" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Nastavi vse zavihke kot zaklenjene" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Nastavi vse zavihke kot zaklenjene z možnostjo spreminjanja map" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Spremeni &atribute ..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zaklenjen zavihek z možnostjo o&dpiranja map v novih zavihkih" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Običajen zavihek" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zaklenjen zavihek" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Zaklenjen zavihek z možnostjo &spreminjanja map" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Odpri z uporabo sistemskih programskih vezi" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Pokaži meni gumbov" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Pokaži zgodovino ukazne vrstice" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Meni" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Pokaži &skrite in sistemske datoteke" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Razvrsti po &atributih" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Razvrsti po &datumu" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Razvrsti po &priponi" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Razvrsti po &imenu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Razvrsti po &velikosti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Odpri seznam pogona" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Omogoči/Onemogoči seznam prezrtih datotek pri prikazovanju" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Ustvari &simbolno povezavo ..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Usklajeno upravljanje" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Usklajeno spreminjanje map v obeh oknih" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "&Uskladi mape ..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Izenači z &dejavnim zavihkom" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Preizkusi &celovitost arhivov" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Pogled sličic" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pogled sličic" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Preklopi celozaslonski način konzole" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Odpri označeno mapo desnega okna v levem oknu" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Odpri označeno mapo levega okna v desnem oknu" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Drevesni pogled" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Razvrsti glede na parametre" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odstrani izbor vse&h datotek z enako pripono" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Odstrani izbor vseh datotek z enakim imenom" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Odstrani izbor vseh datotek z enakim imenom in pripono" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Odstrani izbor vseh datotek na isti poti" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Pokaži zgodovino obiskanih poti dejavnega pogleda" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Pojdi na naslednji vnos zgodovine" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Pojdi na predhodni vnos zgodovine" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Preglej vsebino datoteke dnevnika" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Pogled trenutno dejavnih iskanj" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Spletna stran programa" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Neobnovljivo izbriši" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Delo z vročimi mapami in parametri ukazov" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Končaj" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Nova mapa" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Odpri Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Pokaži trenutno mapo desnega okna v levem oknu" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Pojdi v osebno mapo" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Pojdi v korensko mapo" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Pojdi v mapo višje" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Pokaži trenutno mapo levega okna v desnem oknu" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Pot" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiraj ..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Ustvari povezavo ..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Počisti" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skrij" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Premakni ..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Ustvari simbolno povezavo ..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti zavihkov" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Obnovi" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Začni" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Ukazi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Nastavitve" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Priljubljeno" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Datoteke" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Izbor" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "Omrežje" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Pokaži" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "Možnosti &zavihka" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Zavihki" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Izbor notranjega ukaza" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Nerazvrščeno" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Nerazvrščeno" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Privzeto izberi vse kategorije" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Izbor:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorije:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Ime ukaza:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Namig:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Hitra tipka:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_ime" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategorija" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoč" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Namig" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Hitra tipka" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "Dod&aj" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Določi ..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Upoštevaj velikost črk" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Prezri naglase in vezave znakov" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "&Atributi" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Maska izbire:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Shranjene maske izbire:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Ustvarjanje nove mape" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Razširjena skladnja" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Ime &nove mape:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nova velikost" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Višina :" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kakovost stiskanja zapisa JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Širina :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Višina" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Pripona" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Počisti" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Počisti" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Zapri" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "&Nastavitve" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Števec" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Števec" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Izbriši" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Spustni seznam shranjenih vnosov" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Uredi imena ..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Uredi trenutna nova imena ..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Pripona" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Pripona" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Urejevalnik" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Zaženi meni relativnih poti" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Naloži zadnjo predlogo" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Naloži imena iz datoteke ..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Naloži shranjeno po imenu oziroma določilu" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Naloži predlogo 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Naloži predlogo 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Naloži predlogo 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Naloži predlogo 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Naloži predlogo 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Naloži predlogo 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Naloži predlogo 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Naloži predlogo 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Naloži predlogo 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Vstavki" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Vstavki" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Ponastavi &vse" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Shrani" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Shrani kot ..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Pokaži meni prednastavitev" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Razvrsti" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Preglej vsebino datoteke preimenovalnika" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Napredno &preimenovanje" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Razlikovanje velikosti črk" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "&Rezultat beleženja" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Pripni" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Zamenjaj le enkrat na datoteko" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "Logični &izrazi" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Uporabi &zamenjave" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Števec" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Najdi in zamenjaj" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Shranjena preimenovanja" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Pripona" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Najdi ..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Razmik" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Ime &datoteke" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Zamenjaj ..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Začetna vrednost" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Širina" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Dejanja" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Urejevalnik" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Staro ime datoteke" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Novo ime datoteke" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Pot datoteke" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Po zapiranju urejevalnika je treba potrditi nalaganje spremenenjih imen!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Izbor programa" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Ukaz po meri" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Shrani programsko vez" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastavi izbrani program za privzeto dejanje" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Vrsta datoteke za odpiranje: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Imena več datotek" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Več naslovov URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Ime ene datoteke" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "En naslov URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Uveljavi" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Pomo&č" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Možnosti" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Nastavitve sklopa so urejene na straneh podrejenih kategorij." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Ko&piraj" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Izbriši" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "D&rugo ..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID, uporabljen z ukazom cm_OpenArchive za prepoznavanje vrste arhiva po vsebini in ne po priponi datoteke:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Možnosti:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Način razčlenjevanja oblike:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "O&mogočeno" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Način &razhroščevanja" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Pokaži &odvod konzole" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Za seznam uporabi ime arhiva brez pripone" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Datotečni atributi &Unix" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Ločilnik v naslovu poti &Unix » / «" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Datotečni atributi &Windows" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Ločilnik v naslovu poti &Windows » \\ «" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Doda&janje:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Pak&irnik:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Izbriši:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "&Opis:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Pripona:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Raz&širi:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Odpakiraj &brez navedbe poti:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Položaj &ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID &obsega iskanja:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Seznam:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "&Pakirniki:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Konec seznama (izbirno):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "&Oblika seznama:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "&Začetek seznama (izbirno):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Niz &poizvedbe gesla:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Ustvari arhiv za &samodejno odpakiranje:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Preizkus:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Samodejna nastavitev" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Onemogoči vse" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Zavrzi spremembe" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Omogoči vse" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Razvrsti pakirnike" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Dodatno" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Splošno" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "če se spremenijo &velikost, datum ali atributi" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "za navedene &poti in podrejene mape:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "ko je datoteka &ustvarjena, izbrisana ali preimenovana" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "če je program zagnan v &ozadju" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Onemogoči samodejno osveževanje:" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Osveži seznam datotek:" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Vedno &pokaži ikono v sistemski vrstici" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Samodejno &skrij odklopljene naprave" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Pri skrčenju okna programa pokaži ikono v sistemski vrstici" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Dovoli le &en zagnan primerek programa" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Več pogonov ali priklopnih točk je mogoča vpisati ločeno s podpičjem » ; «." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Črni seznam &pogonov" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Velikost stolpcev" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Izpis pripon datotek" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&Poravnano (v stolpcu)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&Neposredno za imenom datoteke" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Samodejno" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Določeno število stolpcev" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Določena širina stolpcev" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Uporabi &prelivni kazalnik" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Dvojiški način" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Bralni način" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Slikovni način" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Besedilni način" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Dodano:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Ozadje:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Besedilo:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Kategorija:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Izbrisano:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Napaka:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Ozadje 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Ozadje 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Barva &ozadja" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Barva &pisave kazalnika:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "Barva nevarne &zasedenosti prostora:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Podrobnosti:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Levo:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Spremenjeno:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Spremenjeno:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Desno:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Uspešno zaključeno:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Neznano:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Stanje" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Naslovi stolpcev se poravnajo po &vrednostih" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Okrajšaj besedilo na širino stolpca" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Razširi celico, če je besedila preveč za stolpec" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Vodoravne črte" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Navpične črte" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Samodejno &zapolni stolpce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Izris mreže okna" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Samodejno prilagajanje velikosti stolpcev" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Samodejno prilagodi &velikost:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "zgodovino &ukazne vrstice" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "zgodovino &map" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "zgodovino mask &imen datotek" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "zavihke map" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "&nastavitve" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "zgodovino iskanj in zamenjav" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "stanje glavnega okna" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mape" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Privzeto mesto nastavitvenih datotek je:" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Pred končanjem programa shrani:" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Razvrščanje razdelkov nastavitev v drevesnem pogledu na levi:" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Stanje drevesa med odpiranjem strani nastavitev" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Nastavi v ukazni vrstici" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Poudarjalniki:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Tema ikone:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Predpomnilnik sličic:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "mapa &programa (prenosna različica)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "osebna mapa &uporabnika" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Nastavi kot privzeto" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Naslednja" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Predhodna" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Shrani kot" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Shrani" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Dovoli nadbarvo" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "S klikanjem za spreminjanje česarkoli, se to odrazi na vseh stolpcih" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Splošno" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir kazalke" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Kazalka ima obrobo" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Barva izbire nedejavnega okno:" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Uporabi &obrnjen izbor" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Uporabi barvo in pisavo po meri za ta pogled" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Ozadje:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Ozadje 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "&Stolpčni pogled" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Trenutno ime stolpca]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Barva kazalke:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Besedilo kazalke:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Datotečni sistem:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Pisava:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Barva besedila:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Barva nedejavne kazalke" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Barva nedejavnega označevalnika" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Barva oznake:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se pokažejo različne prilagoditve nastavitev." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Nastavitve stolpca:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Dodaj stolpec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Položaj pladnja po primerjavi" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Dodaj mapo iz &dejavnega okna" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Dodaj &mapi iz dejavnega in nedejavnega okna" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Dodaj ročno &izbrano mapo" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Dodaj kopijo izbranega vnosa" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Dodaj trenutno &izbrane ali dejavne mape dejavnega okna" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Dodaj ločilnik" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Dodaj podrejeni meni" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Dodaj mapo z vpisom imena" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Zloži vse veje" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Zloži predmet" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Izreži izbor vnosov" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Izbriši vse!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Izbriši izbran predmet" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Izbriši podrejeni meni in vse njegove predmete" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Izbriši podrejeni meni, vendar ohrani njegove predmete" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Razširi predmet" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Žarišči okno drevesnega prikaza" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Skoči na prvi predmet" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Skoči na zadnji predmet" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Skoči na naslednji predmet" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Skoči na predhodni predmet" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Vstavi mapo &dejavnega okna" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Vstavi &mapi dejavnega in nedejavnega okna" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Vstavi mapo po izbiri" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Vstavi kopijo izbranega vnosa" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Vstavi trenutno &izbrane ali dejavne mape dejavnega okna" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Vstavi ločilnik" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Vstavi podrejeni meni" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Vstavi mapo z vpisom imena" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Premakni na naslednje" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Premakni na predhodno" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Odpri vse veje" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Prilapi izrezano" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Poišči in zamenjaj na poti" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Poišči in zamenjaj na poti in na ciljni poti" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Poišči in zamenjaj na &ciljni poti" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Prilagodi pot" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Prilagodi ciljno pot" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Dodaj ..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Varnostna kopija" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Izbriši ..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Izvozi ..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Uvozi ..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Vstavi ..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Drugo ..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Nekatere funkcije za izbor ustreznega cilja" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Razvrsti ..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Med dodajanjem mape dodaj tudi cilj" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "&Vedno pokaži razširjeno" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Pokaži le &veljavne spremenljivke okolja" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "V &pojavnem oknu (pokaže tudi pot)" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Ime, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Ime, a–z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Seznam hitrih map (razvrščanje z vlečenjem)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Druge možnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Pot:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "&Cilj:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "... le trenutno &raven izbranih predmetov" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Preveri vse poti &hitrih map in potrdi tiste, ki zares obstajajo" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "&Preveri vse poti in cilje hitrih map ter potrdi tiste, ki zares obstajajo" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "v datoteko seznama &hitrih map (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (&ohrani obstoječe)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (&izbriši obstoječe)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Skoči na &podrobnosti o nastavitvah programa TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Skok na &podrobnosti o nastavitvah programa TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Preizkusni meni hitrih map" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "iz datoteke seznama &hitrih map (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "iz datoteke »&wincmd.ini« programa TotalCommander." #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Prebrskaj ..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Obnovi varnostno kopijo seznama hitrih map" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Shrani varnostno kopijo seznama hitrih map" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Poišči in &zamenjaj ..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "... vse od A do &Ž!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "... le &eno skupino predmetov" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "... &le vsebino izbranega podrejenega menija brez podravni" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "... vsebino izbranega podrejenega menija in &vse podravni" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Preizkus &menija" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Prilagodi &pot" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Prilagodi &ciljno pot" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Dodajanje iz glavnega okna" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Uveljavi trenutne spremembe v hitri seznam mape" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Vir" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Cilj" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Poti" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Način nastavljanja poti ob dodajanju:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Uveljavi za poti:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pot naj bo relativna na:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Vedno vprašaj, kateri zapis naj bo uporabljen" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Med shranjevanjem besedila v naboru Unikod, shrani kot UTF8 (sicer bo uporabljen UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Med vlečenjem besedila samodejno ustvari ime datoteke (sicer se bo pojavilo vnosno polje)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Pokaži &potrditveno okno po spuščanju datotek" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Med vlečenjem besedila v okna:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Najustreznejši zapis postavi na vrh seznama (razvrščanje z vlečenjem):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(Če najustreznejši ni na voljo, bo uporabljen zapis na drugem mestu)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(lahko ne deluje z nekaterimi izvornimi programi)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Pokaži &datotečni sistem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Pokaži &zasedenost prostora" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Pokaži &oznako" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Seznam pogonov" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Omogoči samodejno zamikanje" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Omogoča zamik kazalke za vnos besedila na enako število preslednih mest, kot je v predhodni vrstici, ko je nova vrstica ustvarjena z <Enter>." #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Desni rob:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Dovoli prehod kazalke za konec vrstice" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Dovoli postavitev kazalke v prazno polje za mestom konca vrstice." #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Pokaži posebne znake" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Pokaže znake za presledke in tabulatorje." #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Pametni tabulatorji" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Pri uporabi tipke <Tab> se kazalka pomakne na naslednji nepresledni znak predhodne vrstice." #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tipka Tab zamakne besedilo" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "S pritiskom tipke <Tab> oziroma <Shift+Tab> se izbrano besedilo zamakne ali primakne." #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Namesto tabulatorjev uporabi presledne znake" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Vnos tabulatorja se samodejno zamenja v določeno število preslednih znakov (takoj ob pritisku tipke)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Izbriši prazne presledke na koncu vrstice" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Ob urejanju posamezne vrstice se presledki na koncu te vrstice se samodejno izbrišejo." #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Možnost »Pametni tabulatorji« se izvede prednostno pred zamikanjem besedila." #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti notranjega urejevalnika" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Zamik besedila:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Širina tabulatorja:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Upoštevajte, da je možnost »pametnih tabulatorjev« uvedena prednostno pred zamikanjem" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "O&zadje" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "O&zadje" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Ponastavi" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Shrani" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributi predmeta" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Pi&sava" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Pi&sava" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Označba besedila" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Uporabi (in uredi) nastavitve &splošne sheme" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Uporabi nastavitve &krajevne sheme" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Krepko" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Ležeče" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Prečrtano" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podčrtano" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Dodaj ..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Izbriši ..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Uvoz / Izvoz" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Vstavi ..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Razvrsti ..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "brez" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Vedno pokaži razširjeno" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Leva" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Desna" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Seznam priljubljenih zavihkov (razvrstitev je mogoča z miško)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Druge možnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Kaj obnoviti in kje za izbran vnos:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Ohrani zavihke:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Shrani zgodovino mape:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Zavihki, shranjeni na levi, bodo obnovljeni na:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Zavihki, shranjeni na desni, bodo obnovljeni na:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "ločilnik vnosov" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Dodaj ločilnik" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podrejeni meni" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Dodaj podrejeni meni" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Zloži vse veje" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "... le trenutno raven izbranih predmetov" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "vse predmete!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podrejeni meni in vse njegove predmete" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "le podrejeni meni, vendar ohrani predmete" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "izbrane predmete" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Izbriši izbrane predmete" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Izvozi izbor v datoteko *.tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Preizkusni meni priljubljenih zavihkov" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Uvozi shranjeno datoteko *.tab glede na privzete nastavitve" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto v podrejenem meniju" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Vstavi ločilnik" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Vstavi podrejeni meni" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Odpri vse veje" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "... vse od A do Ž!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "... le eno skupino predmetov" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Razvrsti le eno skupino predmetov" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "... le vsebino izbranega podrejenega menija brez podravni" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "... vsebino izbranega podrejenega menija in vse podravni" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Preizkus menija" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "&Kloniraj" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Izbor notranjega ukaza" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Dol" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "&Uredi" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Vstavi" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "&Vstavi" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "O&dstrani" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "&Odstrani" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Preimenuj" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Pomočnik spremenljivega opomnika" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Gor" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Začetna pot ukaza. Ta niz ne sme biti zapisan v navednicah." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Ime opravila. Niz ni sistemska vrednost, zato je lahko poljuben." #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parametri za ukaz. Daljše ime datoteke, ki vključuje presledke, mora biti zapisano v navednicah (ročni vpis)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Začetna pot ukaza. Ta niz ne sme biti zapisan v navednicah." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Opis dejanja" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Dejanja" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Razširitve" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Dovoljeno je razvrščanje z &vlečenjem" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Vrste datotek" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Opravila je mogoče razvrstiti z vlečenjem" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Razširitve je mogoče razvrstiti z vlečenjem" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Vrste datotek je mogoče razvrščati z vlečenjem" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "&Ime dejanja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začetna &pot:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Po meri ..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Po meri" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Odpri v urejevalniku" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Uredi s programom ..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Pridobi odvod ukaza" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Odpri v notranjem urejevalniku" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Odpri v notranjem pregledovalniku" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Odpri s programom …" #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Zaženi v terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Odpri v pregledovalniku" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Poglej s programom ..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klik za zamenjavo ikone." #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Uveljavi trenutne nastavitve za vse nastavljena imena datotek in poti" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Privzeta dejanja (Pogled / Urejanje)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Izvedi prek lupine" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Pokaži razširjen vsebinski meni" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Nastavitve datotečnih vezi" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Prikaži možnost dodajanja izbrane datoteke med programske vezi" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Ob dostopu do programskih vezi z datotekami naj se pokaže tudi pogovorno okno za dodajanje izbrane vrste datoteke med zbrane nastavitve vezi" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Izvedi v terminalu in končaj" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Izvedi v terminalu in pusti terminal odprt" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Ukazi" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "ikone" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "začetne poti" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Možnosti v vsebinskem meniju" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Poti" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Način nastavljanja poti pri dodajanju predmetov za ikone, ukaze in začetne poti:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Določevanje poti uveljavi za datoteke in za:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pot naj bo relativna na:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Potrditveno okno se pokaže za:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "opravila &kopiranja" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "opravila &brisanja" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Izbriši v &smeti (s sočasnim pritiskom dvigalke se izbriše trajno)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "opravila brisanja v smeti" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Odstrani &zastavico le za branje" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "opravila &premikanja" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Obravnavaj opombe skupaj z datotekami in mapami" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Med preimenovanjem izberi le &ime datoteke brez pripone" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Pokaži polje izbire &zavihka v pogovornem oknu kopiranja in premikanja" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "&Preskoči napake datotečnih opravil in jih zapiši v dnevnik" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Preizkusi delovanje arhiva" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "preverjanje opravil nadzornih vsot" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Izvajanje opravil" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Uporabniški vmesnik" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Velikost &medpomnilnika opravila (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Velikost &medpomnilnika za izračun nadzorne vsote (v KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Pokaži splošni napredek &dejavnosti v" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Slog samodejnega preimenovanja podvojenih datotek:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Število prehodov &neobnovljivega brisanja:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Ponastavi na privzete vrednosti" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Dovoli nadbarvo" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Uporabi kazalko &okvirja" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Uporabi barvo in pisavo za nedejavno okno" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Uporabi &obrnjen izbor" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Okvir kazalke" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Trenutna pot" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "O&zadje:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "&Drugo o&zadje:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Barva &kazalke:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Besedilo ka&zalke:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Barva nedejavne kazalke:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Označeno besedilo:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "Raven &svetlosti nedejavnega okna:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Barva &oznake:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Ozadje:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Barva besedila:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Barva nedejavnega ozadja:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Barva besedila nedejavnega okna:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se pokažejo različne prilagoditve nastavitev." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "Barva &besedila:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Med zagonom iskalnika datotek počisti predhodno masko iskanja" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Išči del imena datoteke" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Pokaži menijsko vrstico v oknu »iskanja datotek«" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Iskanje besedila v datotekah" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Iskanje datotek" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Trenutni filtri gumba »Novo iskanje«:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Privzeta predloga iskanja:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Uporabi preslikavo pomnilnika za iskanje &besedila v datotekah" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Uporabi pretok za iskanje besedila v datotekah" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Pri&vzeto" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Oblikovanje" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Poosebljena okrajšava za uporabo:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Razvrščanje" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Bajti" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Razlikovanje velikosti &črk:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Napačen zapis" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Zapis datuma in časa:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Zapis velikosti datoteke:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Zapis &noge:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabajt:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Zapis &glave:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobajt:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Megabajt:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Vstavi nove datoteke:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Zapis velikosti &opravila:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Razvrščanje map:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Način razvrščanja:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabajt:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Premakni posodobljene datoteke:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Dodaj" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Pomo&č" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Omogoči prehod v &nadrejeno mapo, kadar je izveden dvojni klik na praznem delu okna" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Ne naloži seznama datotek, dokler zavihek ni dejaven" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "&Izpiši oglate oklepaje okoli imena mape" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "&Poudari nove in posodobljene datoteke" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogoči hitro &preimenovanje z dvoklikom na ime datoteke" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "Naloži &seznam datotek ločeno" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "Naloži ikone &po seznamu datotek" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Pokaži skrite in &sistemske datoteke" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Med izbiranjem datotek s preslednico se premakni na naslednjo datoteko v seznamu (kot z vstavljalko)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filter v slogu sistema Windows za označevanje datotek (»*.*« izbere tudi datoteke brez pripone ...)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "V vpisnem pogovornem oknu vsakič uporabi neodvisen filter atributa v maski" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "Označevanje/Odstranjevanje oznak vnosov" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "Privzeta maska atributa za uporabo:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Izbriši" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Predloga ..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Obarvanje različnih skupin datotek (razvrščanje z vlečenjem)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "&Atributi kategorije:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "&Barva kategorije:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "&Maska kategorije:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "&Ime kategorije:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Pisave" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "&Dodaj hitro tipko" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "&Izbriši hitro tipko" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Uredi &hitro tipko" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Naslednja kategorija" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Pojavno okno naj bo z vrsto datoteke povezan meni" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Predhodna kategorija" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Ponastavi na privzete vrednosti" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Shrani zdaj" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Razvrsti po imenu ukaza" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Razvrsti po hitrih tipkah (skupinjeno)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Razvrsti po hitrih tipkah (ena na vrstico)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "&Kategorije:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "&Ukazi:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Datoteke &tipkovnih bližnjic:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Način &razvrščanja:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorije" #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "Ukaz" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Način razvrščanja" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Ukaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Hitre tipke" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Hitra tipka" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Tipke" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za navedene &poti in podrejene mape:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Pokaži ikone za dejanja v &meniju" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Na gumbih naj se izrisujejo ikone." #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Pokaži prekrivne i&kone za npr. povezave" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Zamegljene skrite datoteke (počasneje)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Onemogoči posebne ikone" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "Velikost ikon" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Tema ikon" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Pokaži ikone" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "Pokaži ikone na levi strani imena datoteke" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Okno nosilca:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Okno datoteke:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Vse" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Vse programske vezi in &EXE/LNK (počasneje)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "Brez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Le &običajne ikone" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "&Dodaj izbrana imena" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Doda izbrana imena s polno &potjo" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Prezri in ne pokaži naslednjih datotek in map:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Shrani v:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Tipki levo in desno zamenjata mapo (način Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Dejanja pritiskov tipk na tipkovnici" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+Č&rke:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Čr&ke:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Črke:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Ploski gumbi" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "&Ploski vmesnik" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Pokaži vrstico &zasedenosti prostora" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Pokaži okno &dnevniškega izpisa" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Pokaži okno opravil, zagnanih v ozadju" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Pokaži splošni napredek dejavnosti v menijski vrstici" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Pokaži &ukazno vrstico" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Pokaži &trenutno mapo" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Pokaže gumbe &pogonov" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Pokaži vrednost &zasedenosti prostora" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Pokaži gumb seznama &pogonov" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Pokaži &funkcijske gumbe" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Pokaži &glavni meni" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Pokaži &orodno vrstico" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Pokaži kratko oznako &zasedenosti prostora" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Pokaži vrstico &stanja" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Pokaži glave &stolpcev" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Pokaži z&avihke map" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Pokaži okno &terminala" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Pokaži dve orodni vrstici gumbov pogonov (&določene širine nad okni)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Pokaži srednjo orodno vrstico" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr "Zaslonska razporeditev" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Preglej vsebino datoteke dnevnika" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Vključi datum v ime dnevniške datoteke" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "&Zapakiranje / Odpakiranje" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Zunanje izvajanje ukazne vrstice" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Ko&piranje / Premikanje / Ustvarjanje navadnih in simbolnih povezav" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Brisanje" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Us&tvarnje / Brisanje map" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Beleži &napake opravil" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "Ustvari &dnevniško datoteko:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Največji števec dnevniške datoteke" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "&Beleži sporočila podrobnosti" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Zagon / Izklop programa" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Beleži &uspešno končana opravila" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "&Uporabo sistemsko-datotečnih vstavkov" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Dnevniška datoteka datotečnih opravil" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Beleži opravila" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stanje opravila" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Odstrani sličice neobstoječih datotek" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Preglej vsebino datoteke nastavitevdnevnika" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Ustvari novo besedilno datoteko z naborom:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Med zamenjavo pogona vedno odpri &korensko mapo" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Pokaži trenutno mapo v naslovni vrstici glavnega okna" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Pokaži &pojavni zaslon" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Pokaži &opozorila (okna, ki imajo le gumb »V redu«)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Shrani sličice v predpomnilnik" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Sličice" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Opombe k datoteki (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TC izvoz in uvoz:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Privzeti nabor eno-bitnega kodiranja:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Privzeti nabor:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Nastavitvena datoteka:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Izvedljiva datoteka TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Odvodna pot orodne vrstice:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "točke" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Velikost sličic:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Izbiranje datotek z miško" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Besedilna kazalka ne sledi več kazalki miške" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "S klikom na &ikono" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Odpri s programom" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Drsenje" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Izbor" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Način:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dvojni klik" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Vrstica po vrstico" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Premik kazalke &vrstico po vrstico" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stran po stran" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Enojni klik (odpre datoteko in mapo)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Enojni klik (odpre mapo, dvojni klik datoteko)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Preglej vsebino datoteke dnevnika" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Posamične mape na dan" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Beleži imena datotek s celotno potjo" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Pokaži menijsko vrstico na vrhu " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Preimenuj dnevnik" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Zamenjaj neveljavne znake v imenu datoteke &z znakom" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Pripni v isto datoteko beleženja preimenovanja" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Po shranjenem preimenovanju" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Končaj s spremenjenimi nastavitvami" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Nastavitev ob zagonu preimenovanja" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Nastavitve" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Omogoči" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Odstrani" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Prilagodi" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Opis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Vstavki &iskalnikov omogočajo uporabo dodatnih načinov iskanja oziroma uporabo zunanjih orodij (ukaz »locate« in podobno)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Uveljavi trenutne nastavitve za vse nameščene vstavke" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Ob dodajanju novega vstavka, samodejno skoči v okno nastavitev" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Nastavitve:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Datoteka knjižnice Lua za uporabo:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pot naj bo relativna na:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Slog imena datotek vstavka ob dodajanju novega:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Vstavki &pakirnikov so uporabljeni za delo z arhivi." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Vsebinski &vstavki omogočajo prikaz podrobnosti datotek, kot so oznake mp3, atributi slik in seznami datotek, ter uporabo podatkov oznak za iskanje, preimenovanje in drugo." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Sistemsko-datotečni vstavki omogočajo dostop do naprav, kot so dlančniki in PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Vstavki &pregledovalnikov omogočajo prikaz različnih datotek dokumentov, kot so slike, preglednice, podatkovne zbirke in podobno (F3, Ctrl+Q)." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Dejavno" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "na &začetku (ime se mora začeti s prvim vpisanim znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "na &koncu (ime se mora končati s prvim vpisanim znakom pred piko (.) in pripono)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Natančno ujemanje imena datoteke:" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Upoštevanje velikosti črk med iskanjem je:" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Iskanje predmetov" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Ohrani preimenovano ime ob odklepanju zavihka" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "S klikom na zavihek, se okno postavi v &žarišče" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "Pokaži &glavo zavihka tudi, ko je odprt le en zavihek" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zapri podvojene zavihke ob končanju programa" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "&Potrdi zapiranje vseh zavihkov" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potrdi zapiranje zaklenjenih zavihkov" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Omeji dolžino naslova zavihka na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Zaklenjene zavihke označi z zvezdico *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "&Zavihki so lahko v več vrsticah" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Tipki CTRL+↑ odpreta nov zavihek v ospredju" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Odpri &nov zavihek ob trenutno dejavnem" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Uporabi obstoječi zavihek, ko je le mogoče" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Gumb za &zapiranje zavihka je vedno viden" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vedno pokaži črko pogona v nazivu zavihka" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Glave zavihkov map" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "znakov" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Dejanja ob dvojnem kliku na zavihek:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Položaj &zavihkov" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "brez" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Leva" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Desna" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Po ponovnem shranjevanju skoči na nastavitve priljubljenih zavihkov" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Po prvem shranjevanju skoči na nastavitve priljubljenih zavihkov" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Omogoči dodatne možnosti priljubljenih zavihkov (izbor ciljne strani ob obnovitvi ...)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Privzete dodatne nastavitve shranjevanja zavihkov:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Glave zavihkov map" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Ob obnavljanju zavihkov obdrži tudi:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Zavihki, shranjeni na levi, bodo obnovljeni na:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Zavihki, shranjeni na desni, bodo obnovljeni na:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "S priljubljenimi zavihki se shranjuje tudi zgodovina map:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Privzet položaj v meniju med shranjevanjem:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} bi moral biti izpisan na tem mestu za ukaz, ki bo zagnan v terminalu" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} bi moral biti izpisan na tem mestu za ukaz, ki bo zagnan v terminalu" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Ukaz za zagon terminala:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Ukaz za zagon zaključenega ukaza v terminalu" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Ukaz za zagon ukaza v oknu terminala, ki naj ostane odprto" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Gumb za &kloniranje" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Uredi hitro &tipko" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "&Vstavi nov gumb" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Izbor" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Drugo ..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Odstrani &hitre tipke" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Predlagaj" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Naj program ponudi orodni namig na osnovi vrste gumba, ukaza in parametra" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Ploski gumbi" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Pokaži napake ukazov" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "&Pokaži naslove" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Vnos parametrov ukaza, ki so podani vsak v svoji vrstici. Pritisnite tipko F1 za več pomoči o parametrih." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Videz" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Velikost orodne &vrstice:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "&Ukaz:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Pomoč" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Hitra tipka:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Iko&na:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veli&kost ikone:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Ukaz:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Začetna &pot:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Slog:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Orodni namig:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodaj orodno vrstico z VSEMI ukazi DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "za zunanji ukaz" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "za notranji ukaz" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "za ločilnik" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "za podrejeno orodno vrstico" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Varnostna kopija ..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Trenutna orodna vrstica ..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (izbriši obstoječe)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Vrhnja orodna vrstica ..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Shrani varnostno kopijo orodne vrstice" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko »wincmd.ini« programa TotalCommander (izbriši obstoječe) " #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovi varnostno kopijo orodne vrstice" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "iz datoteke orodne vrstice (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "iz ene datoteke TC.BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "iz datoteke »wincmd.ini« programa TotalCommander ..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Poišči in zamenjaj ..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "v vseh od vseh zgoraj ..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "v vseh ukazih ..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "v vseh imenih ikon ..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "v vseh parametrih ..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "v vseh začetnih poteh ..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Ločilnik" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Presledek" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta gumba" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Uveljavi trenutne nastavitve za vse datoteke in vpisane poti" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "ukaze" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "ikone" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "začetne poti" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Poti" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Uveljavi za datoteke in poti za:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pot naj bo relativna na:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Način določevanja poti pri dodajanju predmetov za ikone, ukaze in začetne poti:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Po koncu izvajanja programa ohrani okno terminala &odprto" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Izvedi v &terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Uporabi &zunanji program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatni parametri:" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Pot do programa za zagon:" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Ko&piraj" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Izbriši" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Predloga ..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "D&rugo ..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Nastavitev orodnih namigov za izbrano vrsto datoteke:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Splošne možnosti orodnih namigov" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Pokaži orodne &namige za datoteke v oknu" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "&Namig kategorije:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorije:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Časovni zamik skrivanja namiga:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Način prikazovanja orodnih namigov:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Vrste datotek:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Zavrzi spremembe" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Razvrsti vrste datotek orodnih namigov" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "z dvojnim klikom na vrstico na vrhu datotečnega okna" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "za notranji ukaz" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Z izvedbo dvojnega klika miške v izboru drevesa zapre pogled" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "za notranji ukaz" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "z dvojnim klikom na zavihe (če je tako nastavljeno)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Z uporabo tipkovne bližnjice zapre okno in se vrne na trenutno izbiro" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Z izvedbo enojnega klika miške v izboru drevesa zapre pogled" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "za prikaz zgodovine ukazne vrstice" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "za prikaz zgodovine map" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "za prikaz zgodovine pogleda (obiskane poti dejavnega okna)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Obnašanje glede na izbor" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Možnosti menija drevesnega pogleda" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Kje uporabiti menije drevesnega pogleda:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "* OPOMBA: Možnosti, kot so upoštevanje velikosti črk, izpuščanje znakov preglasov in podobno, so shranjene in naložene posamično za vsako rabo oziroma sejo." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Z vročimi mapami:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "S priljubljenimi zavihki:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Z zgodovino:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Uporabi in pokaži tipkovno bližnjico za izbor predmetov" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Pisava" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Razporeditev in možnosti barv:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Barva ozadja:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Barva kazalke:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Barva najdenega besedila:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Barva najdenega besedila pod kazalko:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Običajna barva besedila:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Običajna barva ozadja besedila:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Predogled menija drevesnega pogleda:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Drugotna barva besedila:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Drugotna barva ozadja besedila:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Barva bližnjice:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Bližnjica pod kazalko:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Barva pisave neizberljivega predmeta:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Barva neizberljivega predmeta" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "S spreminjanjem barve na levi si je mogoče ogledati, kako bo drevesni pogled menija videti." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Možnosti notranjega pregledovalnika" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Število stolpcev v bralnem pregledovalniku" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "&Nastavitve" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Pakiranje datotek" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Ustvari ločen arhiv za vsako izbrano datoteko / mapo" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Ustvari arhiv za samodejno odpakiranje" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Arhiv &šifriraj" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Datoteke pre&makni v arhiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Ustvari arhiv v več &delih" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Pred pakiranjem &vstavi še v arhiv TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Zapakiraj tudi imena &poti (le pri več ravneh map)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Zapakiraj datoteke v arhiv:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakirnik" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Odpakiraj &vse in izvedi" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Odpakiraj &in izvedi" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Lastnosti arhiva" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributi:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Raven stiskanja:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Način:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Izvorna velikost:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datoteka:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Arhivirana velikost:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakirnik:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Nastavitve tiskanja" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Robovi (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Spodaj:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Levo:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Desno:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Zgoraj:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zapri okno filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Vnos besedila za iskanje ali filtriranje" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Razlikuj velikosti črk" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Mape" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "D" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Datoteke" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Poišči na začetku imena" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Poišči na koncu imena" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Preklop med iskalnim in filtrirnim načinom" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Več pravil" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Man%j pravil" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Uporabi &vsebinske vstavke združeno z:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Vstavek" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Polje" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Vrednost" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (vsi zadetki)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (vsi zadetki)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Uveljavi" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Prekliči" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Predloga ..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Predloga ..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "V &redu" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Izberi podvojene datoteke" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Pusti neizbrano vsaj eno datoteko v vsaki skupini:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Odstrani izbor po imenu/razširitvi:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Izberi po &imenu/razširitvi:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Prekliči" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "V &redu" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "&Ločilnik" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Štej od" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Rezultat:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Izbor map za vstavljanje (izbrati je dovoljeno več kot eno)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Konec" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Začetek" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Prekliči" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "V &redu" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Štej najprej od" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Štej zadnje od" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Opis obsega" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Rezultat:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Izbor znakov za &vstavljanje:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Prve:Zadnje]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Prve,&Dolžina]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Konec" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Začetek" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "&Konec" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "&Začetek" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Spreminjanje atributov" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Arhiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Ustvarjeno:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Skrita datoteka" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Zadnji dostop:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Spremenjeno:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Le za branje" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Vključi podrejene mape" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Sistemska datoteka" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Časovni podatki datotek in map" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributi" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributi" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biti:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(Sivo polje pomeni nespremenjeno vrednost)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Črkovno:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvedi" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(sivo polje pomeni nespremenjeno vrednost)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmiško:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Preberi" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapiši" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Razvrsti" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "V &redu" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Z vlečenjem lahko razvrstite predmete" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmsplitter.caption msgid "Splitter" msgstr "Razdelilnik" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Ustvari overitveno datoteko CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B – 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Velikost in število delov" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Razdeli datoteko v mapo:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Število delov" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajti" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabajti" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobajti" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabajti" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Izgradnja" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Uveljavi" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operacijski sistem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Okolje" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Predelava" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Različica" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Različica gradnika" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Ustvarjanje simbolne povezave" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Uporabi relativno pot, ko je to mogoče" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Pot povezave:" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &povezave:" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Izbriši na obeh straneh" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "← Izbriši na levi" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "→ Izbriši na desni" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Odstrani izbor" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Izberi za kopiranje (privzeta smer)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Izberi za kopiranje → (z leve na desno)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Obrni smer kopiranja" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Izberi za kopiranje ← (z desne na levo)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Izberi za brisanje ←→ (obe smeri)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Izberi za brisanje ← (levo)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Izberi za brisanje → (desno)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zapri" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjaj" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Predloga ..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklajevanje map" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "Nesimetrično" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "Po vsebini" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "Prezri datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "Le izbrano mapo" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Upoštevaj podmape" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Pokaži:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(v glavnem oknu)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjaj" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Poglej na levi" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Poglej na desni" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "podvojene" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "posamezne" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Pritisnite gumb »Primerjaj« za začetek" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potrdi prepisovanje" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Meni drevesnega pogleda" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Izbor vroče mape:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Iskanje upošteva velikosti črk" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Zloži vse ravni" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Razširi vse ravni" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Iskanje ne upošteva naglasov in vezav znakov" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Iskanje ne upošteva velikosti črk" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Iskanje upošteva naglase in vezave znakov" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Ne pokaži vsebine veje »le zato«, ker je iskalni niz najden v imenu veje" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Če je iskalni niz najden v imenu veje, pokaži celotno vejo tudi, če predneti niso skladni" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Zapri meni drevesnega pogleda" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Nastavljanje menija drevesnega pogleda" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Nastavljanje barv menija drevesnega pogleda" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Dodaj n&ovo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "S&premeni" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Pri&vzeto" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Prilagodi vstavek" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Določi vrsto arhiva po &vsebini" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Dovoljeno je &izbrisati datoteke" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podpira &šifriranje" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Pokaži kot &običajne datoteke (skrij ikono arhiva)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podpira pakiranje datotek v &pomnilniku" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Dovoljeno je &spreminjati obstoječe arhive" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Arhiv lahko vsebuje &več datotek" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Dovoljeno je ustvariti nove ar&hive" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podpira &pogovorno okno možnosti" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Dovoli iskanje &besedila v arhivih" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "&Opis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Zaznava &nizov:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "&Pripona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Zastavice:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Ime:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "&Vstavek:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Vstavek:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "O pregledovalniku ..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Prikaže pogovorno okno podrobnosti" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Samodejno ponovno naloži" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Spremeni nabor" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Kopiraj datoteko" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiranje datoteke" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiranje v odložišče" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopiranje oblikovanega besedila v odložišče" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Izbriši datoteko" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Brisanje datoteke" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Najdi" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Najdi naslednje" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Najdi predhodne" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Celozaslonski način" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Skoči v vrstico ..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Skoči v vrstico" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Sredina" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "&Naslednji" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Naloži naslednjo datoteko" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "&Predhodna" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Naloži predhodno datoteko" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Zrcali vodoravno" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Zrcaljenje" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Zrcali navpično" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Premakni datoteko" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Premakni datoteko" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Predogled" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "&Natisni ..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Nastavitev &tiskanja ..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Ponovno naloži" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ponovno naloži trenutno datoteko" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Zavrti za 180 stopinj" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "–90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Zavrti za 90 stopinj v desno" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Zavrti za 90 stopinj v levo" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Shrani" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Shrani kot ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Shrani datoteko kot ..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Zaslonska slika" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Zamakni za 3 sekunde" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Zamakni za 5 sekund" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Pokaži &dvojiško" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Pokaži v &bralnem pogledu" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Pokaži &desetiško" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Pokaži &šestnajstiško" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Pokaži kot &besedilo" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Pokaži kot besedilo v &prelomu" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Pokaži &kazalko besedila" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Koda" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafični prikaz" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Dokument XML (le besedilo)" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Vstavki" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Pokaži &prosojnost" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Raztegni" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Raztegni sliko" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Raztegni le velike" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Razveljavi" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Razveljavi" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Prelomi besedilo" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Približanje" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Približaj" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Približaj" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Oddalji" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Oddalji" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Obreži" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Celozaslonski način" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Izvozi okno" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Poudari" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Naslednje okno" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Risanje" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Predhodno okno" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rdeče oči" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Spremeni velikost" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Predstavitev" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Pregledovalnik" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Elipsa" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Slika" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Pisalo" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Pravokotnik" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Zavrti" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Zaslonski posnetek" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Pogled" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Vstavki" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Začni" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Za&ustavi" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Datotečna opravila" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vedno na vrhu" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Uporabi »vlečenje« za premikanje opravil v vrsti" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Prekliči" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Prekliči" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova čakalna vrsta" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Pokaži v ločenem oknu" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Postavi na začetek vrste" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Postavi na konec vrste" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Vrsta" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Izven vrste" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Vrsta 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Vrsta 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Vrsta 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Vrsta 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Vrsta 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Pokaži v ločenem oknu" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Zaustavi vse" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Sledi &povezavam" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Če &mapa že obstaja" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Če datoteka obstaja" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Če datoteka obstaja" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Prekliči" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "V &redu" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Ukazna vrstica:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametri:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Začetna pot:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Nastavitve" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Šifriranje" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Če datoteka obstaja" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Kopiraj &datum in čas" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Pošlji v ozadje (ločena povezava)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Če datoteka že obstaja," #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Zagotoviti je treba skrbniška dovoljenja" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "za kopiranje predmeta:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "za ustvarjanje tega predmeta:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "za brisanje tega predmeta:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "za pridobivanje atributov tega predmeta:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "za ustvarjanje trde povezave:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "za odpiranje predmeta:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "za preimenovanje predmeta:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "za določitev atributov za ta predmet:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "za ustvarjanje simbolne povezave:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Datum posnetka" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Višina" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Širina" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Proizvajalec" #: uexifreader.rsmodel msgid "Camera model" msgstr "Model fotoaparata" #: uexifreader.rsorientation msgid "Orientation" msgstr "Usmerjenost" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Datoteke ni mogoče najti, zato ni mogoče overiti končne kombinacije datotek:\n" "%s\n" "\n" "Omogočite dostop do datoteke in pritisnite gumb »V redu«,\n" "ali pa pritisnite »Prekliči« in nadaljujte opravilo brez nje?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<MAPA>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Prekliči hitri filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Prekliči trenutno opravilo" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Vpis imena datoteke s pripono za spuščeno besedilo." #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Vrsta zapisa za uvoz" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Okvarjeno:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Splošno:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Manjkajoče:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Napaka branj:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Uspešno zaključeno:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Vnos nadzorne vsote in izbira algoritma:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Preverjanje nadzornih vsot" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Skupaj:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Ali želite počistiti filtre pred novim iskanjem?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "V odložišču ni veljavnih podatkov orodne vrstice." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Vse;Dejavno okno;Levo okno;Desno okno;Datotečna opravila;Nastavitve;Omrežje;Razno;Paralelna vrata;Tisk;Označevanje;Varnost;Odložišče;FTP;Navigacija;Pomoč;Okno;Ukazna vrstica;Orodja;Pogled;Uporabnik;Zavihki;Razvrščanje;Beleženje" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Opuščeno razvrščanje;Abecedno razvrščanje" #: ulng.rscolattr msgid "Attr" msgstr "Atrib" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Pri" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ime" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Velikost" #: ulng.rsconfcolalign msgid "Align" msgstr "Poravnava" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Naslov" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Izbriši" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Vsebina stolpca" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Premakni" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Širina" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prilagodi stolpec" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Nastavi programsko vez" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potrjevanje ukazne vrstice in parametrov" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopiraj (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Temna tema" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Samodejno;Omogočeno;Onemogočeno" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Uvožena orodna vrstica DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Uvožena orodna vrstica TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Spuščeno besedilo" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_Spuščena koda HTML" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Spuščeno oblikovano besedilo" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Spuščeno neoblikovano besedilo" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Spuščeno besedilo UTF16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_Spuščeno besedilo UTF8" #: ulng.rsdiffadds msgid " Adds: " msgstr " Dodano: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Poteka primerjava ..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Za izbris: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Datoteki sta enaki!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Število razlik: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Spremenjeno: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Nabor znakov" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Konci vrstic" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Besedilo je enako, a so u porabljene navedene možnosti:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Besedilo je enako, vendar pa datoteki nista skladni!\n" "Zaznane so naslednje razlike:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Prekini" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Vse" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Pripni" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Samodejno preimenuj izvorne datoteke" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Samodejno preimenuj &ciljne datoteke" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Prekliči" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Primerjaj po &vsebini" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Nadaljuj" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Kopiraj &v" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Kopiraj v &vse" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Končaj program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Pre&zri" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Izberi &vse" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Brez" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&V redu" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Drugo" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepiši" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepiši &vse" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepiši vse &večje" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepiši vse &starejše" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepiši vse &manjše" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Preimenuj" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Nadaljuj" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Poskusi &znova" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Kot &skrbnik" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Preskoči" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Pres&koči vse" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Odkleni" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Da" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiraj datoteke" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Premakni datoteke" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Pre&mor" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Začni" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "V vrsto" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Hitrost %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Pri hitrosti %s/s bo opravilo trajalo še %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "obogateno besedilo;zapis HTML;zapis v naboru Unikod;običajno besedilo" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Kazalnik zasedenosti prostora na pogonu" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<brez oznake>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<ni nosilca>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Urejevalnik besedila programa Double Commander" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Skoči v vrstico:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Skoči v vrstico" #: ulng.rseditnewfile msgid "new.txt" msgstr "nova_datoteka.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ime datoteke:" #: ulng.rseditnewopen msgid "Open file" msgstr "Odpri datoteko" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Nazaj" #: ulng.rseditsearchcaption msgid "Search" msgstr "Poišči" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Naprej" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zamenjaj" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "z zunanjim urejevalnikom" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "z notranjim urejevalnikom" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Izvedi prek lupine" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Izvedi v terminalu in zapri okno" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Izvedi v terminalu in pusti okno odprto" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "V vrstici %s ni znaka »]«" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Ni določene razširitve pred ukazom »%s«, zato bo ta prezrt." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "levo;desno;dejavno;nedejavno;oboje;brez" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Da;Ne" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Izvozi iz DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Vprašaj;Prepiši;Preskoči" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "vprašaj;združi;preskoči" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Vprašaj;Prepiši;Prepiši starejše;Preskoči" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "vprašaj;ne nastavljaj več;prezri napake" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Katerekoli datoteke" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Nastavitvene datoteke pakirnika" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Datoteke orodnih namigov DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Datoteke hitrih map" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Izvedljive datoteke" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Nastavitvene datoteke .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Opuščeni datptele .tab DC" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Knjižnične datoteke" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Datoteke vstavkov" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programi in knjižnice" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Filter" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Datoteke orodne vrstice TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Datoteke orodne vrstice DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Nastavitvene datoteke .xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Določitev predloge" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "do %s. ravni map" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "vse ravni (neomejena globina)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "le trenutno raven" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Mapa %s ne obstaja!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Najdeno: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Shrani predlogo iskanja" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ime predloge:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Preiskano: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Preiskovanje" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Iskanje datotek" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Čas preiskovanja:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začni pri" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "&Pisava konzole" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Pisava &urejevalnika" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Pisava funkcijskih tipk" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Pisava &dnevnika" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Glavna pisava" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Pisava poti" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Pisava rezultatov iskanja" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "PIsava vrstice stanja" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Pisava menija drevesnega pogleda" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Pisava &pregledovalnika" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Pisava &bralnega pregledovalnika" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s od %s prostora" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "Prosto %s" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum in čas zadnjega dostopa" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributi" #: ulng.rsfunccomment msgid "Comment" msgstr "Opomba" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Stisnjena velikost" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum in čas ustvarjanja" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Pripona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Spremeni čas in datum" #: ulng.rsfunclinkto msgid "Link to" msgstr "Povezava do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum in čas spremembe" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ime" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ime brez pripone" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Lastnik" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pot" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Velikost" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Izvorna pot" #: ulng.rsfunctype msgid "Type" msgstr "Vrsta" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Napaka med ustvarjanjem trde povezave." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "brez;ime, a–z;ime, z–a;pripona, a–z;pripona, z–a;velikost 9–0;velikost 0–9;datum 9–0;datum 0–9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Opozorilo! Med obnavljanjem datoteke varnostne kopije vročih map *.hotlist se starejša različica izbriše, zamenja pa jo uvožena.\n" "\n" "Ali ste prepričani, da želite nadaljevati?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Pogovorno okno kopiranja in premikanja" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Primerjalnik" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Uredi pogovorno okno opombe" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Urejevalnik" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Najdi datoteke" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Glavno" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Orodje za napredno preimenovanje" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Usklajevanje map" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Pregledovalnik" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Namestitev s tem imenom že obstaja.\n" "Ali jo želite prepisati?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Ali ste prepričani, da želite obnoviti privzeto?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Ali ste prepričani, da želite izbrisati namestitev »%s«?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopija %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Vpis novega imena" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Ohraniti je treba vsak eno datoteko tipkovne bližnjice." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Novo ime" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Nastavitev »%s« je spremenjena.\n" "Ali želite spremembe shraniti?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Ni tipkovne bližnjice s tipko »ENTER«" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "po imenu ukaza;po tipkovni bližnjici (skupinjeno);po tipkovni bližnjici (ena na vrstico)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Ni mogoče najti sklica na privzeto datoteko orodne vrstice" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Seznam oken dejavnih iskanj" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska odstranitve izbire" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska izbire" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maska izbire:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Stolpčni pogled s tem imenom že obstaja" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Za spreminjanje trenutnega pogleda urejanja stolpcev, kopirajte, shranite ali pa izbrišite trenutne" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Nastavitve stolpcev po meri" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Vpis novega imena stolpca po meri" #: ulng.rsmenumacosservices msgid "Services" msgstr "Storitve" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Dejanja" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Privzeto>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Osmiško" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Ustvari tipkovno bližnjico ..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odklopi omrežno pogon ..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Uredi" #: ulng.rsmnueject msgid "Eject" msgstr "Izvrzi" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Odpakiraj v to mapo ..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Preslikaj omrežni pogon ..." #: ulng.rsmnumount msgid "Mount" msgstr "Priklopi" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Novo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nosilec ni na voljo" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Odpri" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Odpri s programom" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Drugo ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Zapakiraj datoteke v to mapo ..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Obnovi" #: ulng.rsmnusortby msgid "Sort by" msgstr "Razvrsti po" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odklopi" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Poglej" #: ulng.rsmsgaccount msgid "Account:" msgstr "Račun:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Vsi notranji ukazi programa DC" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Opis: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatni parametri arhiva v ukazni vrstici:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Ali želite niz zapreti z oklepajem?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Napaka nadzorne vsote CRC32 za datoteko:\n" "»%s«\n" "\n" "Ali želite obdržati okvarjeno datoteko?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Ali ste prepričani, da želite preklicati to opravilo?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Datoteke »%s« ni mogoče kopirati oziroma premakniti samo vase!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Ni mogoče kopirati posebne datoteke %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Ni mogoče izbrisati mape %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Mape »%s« ni mogoče prepisati s predmetom »%s«, ki ni mapa!" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Skok iz trenutne mape v »%s« je spodletel!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Ali želite odstraniti vse nedejavne zavihke?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Zavihek (%s) je zaklenjen! Ali ga želite vseeno zapreti?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Potrditev parametra" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Ukaza ni mogoče najti! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ali ste prepričani, da želite končati?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Datoteka %s je spremenjena. Ali želite kopirati vsebino nazaj?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Ni mogoče kopirati nazaj – ali želite ohraniti spremenjeno datoteko?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Ali želite kopirati %d izbranih datotek ali map?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Ali želite »%s« kopirati v:" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Ustvari novo vrsto »datotek %s« >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani datoteka orodne vrstice DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Dejanje po meri" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Ali želite delno kopirano datoteko izbrisati?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Ali želite izbrisati izbrane predmete (%d predmetov)?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Ali želite izbrane predmete premakniti v smeti (%d predmetov)?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Ali želite izbrisati »%s«?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Ali želite »%s« premakniti v smeti?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Predmeta »%s« ni mogoče premakniti v smeti. Ali ga želite izbrisati trajno?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk ni na voljo" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Vpis imena dejanja po meri:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Vpis pripone datoteke:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Vnos imena:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Vpis imena nove vrste datotek za razširitev »%s«" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Napaka CRC v podatkih arhiva" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Slabi podatki" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Ni se mogoče povezati s strežnikom: »%s«" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Ni mogoče kopirati datoteke %s v %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Ni mogoče premakniti mape %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Ni mogoče premakakniti datoteke %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Mapa z imenom »%s« že obstaja." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s ni podprt!" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Mapa %s že obstaja!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Ukaz je prekinjen na zahtevo uporabnika" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Napaka med zapiranjem datoteke" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Ni mogoče ustvariti datoteke" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V arhivu ni več datotek" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Ni mogoče odpreti obstoječe datoteke" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Napaka med branjem iz datoteke" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Napaka med pisanjem v datoteko" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Ni mogoče ustvariti mape %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Neveljavna povezava" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ni najdenih datotek" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ni dovolj pomnilnika" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcija ni podprta!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Napaka v ukazu vsebinskega menija" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Napaka med nalaganjem nastavitev" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Napaka skladnje logičnega izraza!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Ni mogoče preimenovati datoteke %s v %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Vezi ni mogoče shraniti!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Ni mogoče shraniti datoteke" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Ni mogoče določiti atributov za »%s«" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Datuma in časa za datoteko »%s« ni mogoče določiti." #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Ni mogoče določiti lastništva in skupine za »%s«" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Ni mogoče nastaviti dovoljenj za »%s«" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Ni mogoče določiti razširjenih atributov za »%s«" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Medpomnilnik je premajhen" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Izbranih je preveč datotek za pakiranje" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Vrsta arhiva ni znana" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Izvedljiva datoteka: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Stanje izhoda:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Ali ste prepričani, da želite odstraniti vse vnose priljubljenih zavihkov (dejanja ni mogoče povrniti)?" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Sem povlecite druge vrednosti" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Vnos imena novega priljubljenega predmeta" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Shranjevanje novega priljubljenega zavihka" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Uspešno izvoženi priljubljeni zavihki: %d na %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Privzete dodatne nastavitve za shranjevanje zgodovine za nove priljubljene zavihke:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Uspešno uvožene datoteke: %d na %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Opuščeni zavihki so uvoženi" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Izbor datotek .tab za uvoz (izbrati je dovoljeno več kot eno!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Zadnje spremembe priljubljenih zavihkov še niso shranjene. Ali jih želite shraniti pred nadaljevanjem?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Shranjuj zgodovino mape s priljubljenimi zavihki:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ime podrejenega menija" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Naloženi bodo priljubljeni zavihki: »%s«" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Shrani trenutne zavihke preko obstoječih priljubljenih zavihkov" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Datoteka %s je spremenjena. Ali želite spremembe shraniti?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajtov, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Datoteka %s že obstaja. Ali naj bo prepisana?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Z datoteko:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Datoteke »%s« ni mogoče najti." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Zaznana so dejavna datotečna opravila" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Nekatera opravila datotek še niso končana. S predčasnim končanjem programa lahko pride do izgube podatkov." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Dolžina imena cilja (%d) znaša več kot %d znakov!\n" "%s\n" "Mnogi programi imajo lahko težave s tako dolgimi imeni datotek in map!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Datoteka %s je označena skrita, sistemska ali le za branje. Ali jo želite vseeno izbrisati?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Ali ste prepričani, da želite obnoviti trenutno datoteko in prepisati spremembe?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Datoteka velikosti »%s« je prevelika za ciljni datotečni sistem!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Mapa %s že obstaja. Ali želite datoteke združiti v to mapo?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Ali želite slediti simbolni povezavi »%s«?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Izbor vrste zapisa za uvoz" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Dodaj %d izbranih map" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj izbrano mapo:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj trenutno mapo:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Izvedi ukaz" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_nek_ukaz" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Nastavitev seznama hitrih map" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Ali ste prepričani, da želite odstraniti vse vnose seznama hitrih map (dejanja ni mogoče povrniti)?" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Izveden bo naslednji ukaz:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "To je hitra mapa z imenom " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "S tem bo spremenjeno dejavno okna na pot:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Nedejavno okno sledi naslednji poti:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Napaka ustvarjanja varnostne kopije vnosov ..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Napaka med izvažanjem vnosov ..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Izvozi vse!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Izvozi seznam hitrih map – izbor vnosov za izvoz" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Izvozi izbrano" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Uvozi vse!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Uvoz seznama hitrih map – izbor vnosov za uvoz" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Uvozi izbrano" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Pot" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Najdi datoteko ».hotlist« za uvoz" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ime vroče mape" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Število novih vnosov: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "In izbranih predmetov za izvoz!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Pot do vroče mape" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ponovno dodaj izbrano mapo:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ponovno dodaj trenutno mapo:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Vpis mesta in imena datoteke seznama hitrih map za obnovitev" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Ukaz:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(konec podrejenega menija)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Ime &menija:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Ime:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(ločilnik)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ime podrejenega menija" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cilj vroče mape" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Določilo, ali naj bo dejavno okno razvrščeno na trenuten način tudi po zamenjavi mape" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Določilo, ali naj bo nedejavno okno razvrščeno na trenuten način tudi po zamenjavi mape" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Nekatere funkcije za izbor ustrezne poti; relativne, absolutne, posebne mape ..." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Skupno shranjenih vnosov: %d\n" "\n" "Ime datoteke varnostne kopije: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Število izvoženih vnosov:" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Ali ste želeli izbrisati vse predmete znotraj podrejenega menija [%s]?\n" "Če izberete NE, bodo izbrisani le ločilniki menija, predmeti pa bodo ohranjeni." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani seznam hitrih map" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Nepravilni podatki dolžine datoteke za: »%s«" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Vstavite naslednji disk, ključ oziroma drug pogon.\n" "\n" "S tem omogočite zapis datoteke:\n" "»%s«\n" "\n" "Zapisati je treba še: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Napaka v ukazni vrstici" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neveljavno ime datoteke" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neveljaven zapis nastavitvene datoteke" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Neveljavno šestnajstiško število: »%s«" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neveljavna pot" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Pot %s vsebuje nedovoljene znake." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ta vrsta vstavka ni podprta!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ta vstavek je izgrajen za različico %s.%s. Z različico %s ne deluje." #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neveljavno navajanje" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neveljaven izbor datotek" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Nalaganje seznama datotek ..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Najdi nastavitveno datoteko programa TotalCommander (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Določi pot do izvedljive datoteke TC (totalcmd.exe ali totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopiraj datoteko %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Izbriši datoteko %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Napaka: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Zaženi zunanji program" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Zunanji rezultati" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Razširi datoteko %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podrobnosti: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Ustvari povezavo %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Ustvari mapo %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Premakni datoteko %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Zapakiraj v datoteko %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Izklop programa" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Zagon programa" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Odstrani mapo %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Končano: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Ustvari simbolno povezavo %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Preizkusi celovitost datoteke %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Varno izbriši %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Neobnovljivo izbriši mapo %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Glavno geslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Vnesite glavno geslo:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nova datoteka" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Odpakiran bo naslednji del arhiva" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ni datotek" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ni izbranih datotek." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Ni dovolj prostora na ciljnem pogonu. Ali želite opravilo vseeno nadaljevati?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Ni dovolj prostora na ciljnem pogonu. Ali želite ponoven izračun razpoložljivega prostora?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Ni mogoče izbrisati datoteke %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ni podprto." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Predmet ne obstaja!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Opravila ni mogoče končati, ker je datoteka odprta v drugem programu:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se pokažejo različne prilagoditve nastavitev." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Geslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Gesli sta različni!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Vnesite geslo:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Geslo (požarni zid):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Ponovno vnesite geslo za overitev:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Izbriši %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Shranjen predmet »%s« že obstaja. Ali ga želite prepisati?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Ali ste prepričani, da želite izbrisati predlogo »%s«?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Napaka izvajanja ukaza (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "Neznan program (PID %d)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Ime datoteke za spuščeno besedilo:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Ta datoteka mora biti na voljo. Ali želite poskusiti znova?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Vnos imena novega priljubljenega predmeta" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Vnos imena tega meni" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Ali želite izbrane predmete preimenovati / premakniti (%d predmetov)?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Ali želite predmet »%s« preimenovati / premakniti?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Ali želite zamenjati to besedilo?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Za uveljavitev sprememb je treba program ponovno zagnati." #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "NAPAKA: Prišlo je do napake med nalaganjem datoteke knjižnice Lua »%s«" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Izberite vrsto datoteke za dodajanje razširitve »%s«" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Izbrano: %s od %s, datoteke: %d od %d, mape: %d od %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Izbor izvedljive datoteke za" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Izbrati je treba le datoteko nadzorne vsote!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Izberite mesto za naslednji del arhiva" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Določi oznako dela arhiva" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Posebne mape" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodaj pot iz dejavnega okna" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodaj pot iz nedejavnega okna" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Prebrskaj in uporabi izbrano pot" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Uporabi okoljske spremenljivke" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Programska pot DC ..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Pot do okoljske spremenljivke ..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Uporabi drugo posebno mapo Windows ..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Uporabi posebno mapo Windows ..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Pokaži kot relativno pot do vroče mape ..." #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Uporabi pot kot absolutno pot" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Pokaži kot relativno pot do posebne poti DC ..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Pokaži kot relativno pot do okoljske spremenljivke ..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Pokaži kot relativno pot do posebne mape Windows (TC) ..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Pokaži kot relativno pot do posebne mape Windows ..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Uporabi posebno pot ..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Uporabi pot do vroče mape" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Uporabi drugo posebno mapo Windows ..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Uporabi posebno mapo Windows ..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Zavihek (%s) je zaklenjen! Ali želite odpreti mapo v novem zavihku?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Preimenuj zavihek" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novo ime zavihka:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ciljna pot:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Napaka: ni mogoče najti nastavitvene datoteke programa Total Commander:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Napaka: ni mogoče najti zagonljive datoteke programa Total Commander:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Napaka: program Total Commander je zagnan, kar pa za to dejanje ne sme biti.\n" "Zaprite program ali prekličite opravilo." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Napaka! Ni mogoče najti želene odvodne mape orodne vrstice TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani datoteka orodne vrstice DC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Vgrajeno okno terminala je onemogočeno. Ali ga želite omogočiti?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "OPOZORILO: Prekinitev opravila lahko povzroči neželene učinke, vključno z izgubo podatkov in nestabilnostjo sistema. Opravilu ne bo dana možnost shranjevanja stanja delovanja ali podatkov. Ali ste prepričani, da želite opravilo končati?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Ali želite preveriti celovitost izbranih arhivov?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "Datoteka »%s« je kopirana v odložišče" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Razširitev te datoteke ni med znanimi vrstami datotek" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Najdi datoteko »*.toolbars« za uvoz" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Najdi datoteko »*.bar« za uvoz" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Vpišite mesto in ime datoteke orodne vrstice za obnovitev" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Shranjeno!\n" "Ime orodne vrstice: %s'" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Izbranih je preveč datotek." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Nedoločeno" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "NAPAKA: nepričakovana raba menija drevesnega pogleda!" #: ulng.rsmsgurl msgid "URL:" msgstr "Naslov URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<brez pripone>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<brez imena>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Uporabniško ime:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Uporabniško ime (požarni zid):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "OVERITEV:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Ali želite overiti izbrane nadzorne vsote?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Ciljna datoteka je okvarjena, nadzorni vsoti nista skladni!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Oznaka dela arhiva:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Velikost dela arhiva:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Ali želite nastaviti pot do knjižnice Lua?" # This should be multiple plural !!!! #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Ali želite datoteke oziroma mape neobnovljivo izbrisati (%d)?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Ali želite »%s« neobnovljivo izbrisati?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "z" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Napačno geslo!\n" "Poskusite znova." #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Ali želite predmete samodejno preimenovati v »ime (1).pri«, »ime (2).pri« ... ?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Števec" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Ime shranjenega preimenovanja" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Določilo imena datoteke" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Določi vrednost spremenljivke." #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Vpis imena spremenljivke" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Vpišite vrednost za spremenljivko »%s«" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Prezri, le shrani nazadnje uporabljeno;Zahtevaj potrditev uporabnika;Samodejno shrani" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Pripona" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Ime" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Brez spremembe;VELIKE ČRKE;male črke;Prva črka je velika;Prva Črka Vsake Besede Je Velika;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Nazadnje uporabljeno]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Zadnje uporabljena maska;Nazadnje nastavljena maska;Prazno polje maske" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Orodje za napredno preimenovanje" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Znak na mestu x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Znaki med mestoma x in y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Celoten zapis datuma" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Celoten zapis časa" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Števec" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dan" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Dan (2 števki)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Dan v tednu (kratko, npr.: »pon«)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Dan v tednu (dolgo, npr.: »ponedeljek«)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Pripona" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Dopolni ime z vpisom poti in pripone" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Polno ime datoteke, znak od mesta x do y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Ure" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Ure (2 števki)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minute" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minute (2 števki)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mesec" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mesec (2 števki)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Ime meseca (kratko, npr.: »jan«)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Ime meseca (dolgo, npr.: »januar«)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Ime" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Nadrejene mape" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Ssekunde" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekunde (2 števki)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Hitra spremenljivka" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Leto (2 števki)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Leto (4 števke)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Vstavki" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Shrani predlogo kot ..." #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Predloga že obstaja. Ali jo želite prepisati?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Vpis novega imena predloge" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Predloga »%s« je spremenjena.\n" "Ali želite spremembe shraniti?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Predloge razvrščanja" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Čas" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Opozorilo, imena so podvojena!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Datoteka vsebuje napačno število vrstic; zaznana vrednost je %d, pričakovana pa %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "ohrani;počisti;vprašaj" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Ni ustreznega notranjega ukaza" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Ni še začetega okna »iskanja datotek« ..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Ni še drugih oken »iskanja datotek« za zapiranje in sproščanje pomnilnika ..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Razvoj" #: ulng.rsopenwitheducation msgid "Education" msgstr "Izobraževanje" #: ulng.rsopenwithgames msgid "Games" msgstr "Igre" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafične vsebine" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Predstavne vsebine" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Omrežje" #: ulng.rsopenwithoffice msgid "Office" msgstr "Pisarna" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Drugo" #: ulng.rsopenwithscience msgid "Science" msgstr "Znanost" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Nastavitve" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Dodatki" #: ulng.rsoperaborted msgid "Aborted" msgstr "Preklicano" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavanje nadzorne vsote" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Izračunavanje nadzorne vsote v »%s«" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Izračunavanje nadzorne vsote »%s«" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Preračunavanje" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Preračunavanje »%s«" #: ulng.rsopercombining msgid "Joining" msgstr "Združevanje" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Združevanje datotek iz »%s« v »%s«" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiranje" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiranje iz »%s« v »%s«" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiranje »%s« v »%s«" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Ustvarjanje mape" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Ustvarjanje mape »%s«" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Brisanje" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Brisanje v »%s«" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Brisanje »%s«" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvajanje" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Izvajanje »%s«" #: ulng.rsoperextracting msgid "Extracting" msgstr "Poteka odpakiranje" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Odpakitanje iz »%s« v »%s«" #: ulng.rsoperfinished msgid "Finished" msgstr "Končano" #: ulng.rsoperlisting msgid "Listing" msgstr "Izpisovanje" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Izpisovanje seznama »%s«" #: ulng.rsopermoving msgid "Moving" msgstr "Premikanje" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Premikanje iz »%s« v »%s«" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Premikanje »%s« v »%s«" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ni začeto" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakiranje" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakiranje iz »%s« v »%s«" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Pakiranje »%s« v »%s«" #: ulng.rsoperpaused msgid "Paused" msgstr "V premoru" #: ulng.rsoperpausing msgid "Pausing" msgstr "V premoru" #: ulng.rsoperrunning msgid "Running" msgstr "Zagnano" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavljanje lastnosti" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Nastavljanje lastnosti v »%s«" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Nastavljanje lastnosti »%s«" #: ulng.rsopersplitting msgid "Splitting" msgstr "Razdeljevanje" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Razdeljevanje »%s« v »%s«" #: ulng.rsoperstarting msgid "Starting" msgstr "Začenjanje" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zaustavljeno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zaustavljanje" #: ulng.rsopertesting msgid "Testing" msgstr "Preizkušanje" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Preizkušanje v »%s«" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Preizkušanje »%s«" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Preverjanje nadzorne vsote" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Preverjanje nadzorne vsote »%s«" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Preverjanje nadzorne vsote »%s«" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čakanje na dostop do vira datoteke." #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čakanje na odziv uporabnika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Neobnovljivo brisanje" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Neobnovljivo brisanje v »%s«" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Neobnovljivo brisanje »%s«" #: ulng.rsoperworking msgid "Working" msgstr "Izvajanje opravila" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Dodaj na &začetek;Dodaj na konec;Pametno dodajanje" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Dodajanje novega orodnega namiga vrste datoteke" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Za spreminjanje trenutnih nastavitev urejanja arhivov je treba trenutno najprej uveljaviti ali izbrisati" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Odvisno od načina, dodaten ukaz" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Dodaj, če polje ni prazno" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Datoteka arhiva (dolgo ime)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Izbor izvedljive datoteke pakirnika" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Datoteka arhiva (kratko ime)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Spremeni kodni nabor seznama pakirnika" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Ali ste prepričani, da želite izbrisati: »%s«?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Izvožene nastavitve pakirnika" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "raven napake" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Izvozi nastavitve pakirnika" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Izvoz %d predmetov v datoteko »%s« je končan." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Izberite vnose, ki jih želite uvoziti" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Seznam datotek (dolga imena)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Seznam datotek (kratka imena)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Uvozi nastavitve pakirnika" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Uvoz %d predmetov iz datoteke »%s« je končan." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Izbor datoteke za uvoz nastavitev arhivirnika" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Izberite vnose, ki jih želite uvoziti" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Uporabi le ime, brez poti" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Uporabi le pot, brez imena" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Program za arhiviranje (dolgo ime)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Ime programa arhiva (kratno ime)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Postavi vsa imena v navednice" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Postavi imena s presledki v navednice" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Ime ene datoteke za obdelavo" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Ciljna podmapa" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Uporabi kodiranje ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Uporabi kodiranje UTF8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Vpis mesta in imena datoteke, kamor naj se shranijo nastavitve pakirnika" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Ime vrste arhiva:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Vzpostavi programsko vez vstavka »%s« z:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "prvega stolpca;zadnjega stolpca;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "običajno, privzet način;abecedno (razdelek »Jezik« je vedno na vrhu)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Razpni vse ravni;Zloži vse ravni" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Dejavno okno na levi, nedejavno na desni (opuščeno);Levo okno na levi, desno na desni" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Vnos pripone" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "dodaj na začetek;dodaj na konec;abecedno razvrščanje" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "ločenem oknu;skrčenem ločenem oknu;oknu opravil" #: ulng.rsoptfilesizefloat msgid "float" msgstr "plavajoče" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Bližnjica %s za ukaz cm_Delete bo vpisana, zato jo bo mogoče uporabiti za povrnitev te nastavitve." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Dodaj hitro tipko za %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj bližnjico" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Ni mogoče nastaviti tipkovne bližnjice" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Spremeni tipkovno bližnjico" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Ukaz" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Tipkovna bližnjica %s za ukaz cm_Delete ima določen parametre, ki prekliče nastavitev. Ali želite spremeniti ta parameter za uporabo splošnih nastavitev?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Tipkovna bližnjica %s za cm_Delete mora imeti parameter spremenjen tako, da ustreza tipkovni bližnjici %s. Ali jo želite spremeniti?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Uredi hitro tipko za %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Popravi parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Hitra tipka" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Hitre tipke" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<brez>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Dodaj bližnjico za brisanje datotek" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Za povezavo te možnosti s tipkovno bližnjico %s mora biti bližnjica %s določena za cm_Delete, a je povezana z %s. Ali želite bližnjico spremeniti?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Tipkovna bližnjica %s za cm_Delete je tipkovna bližnjica zaporedja ukazov za katerega obratnega ukaza ni mogoče določiti. Nastavitev najverjetneje ne bo delovala." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Tipkovna bližnjica v uporabi" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Tipkovna bližnjica %s je že v uporabi." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Ali želite predmet zamenjati z %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "uporabljeno za %s v %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "uporabljeno za ta ukaz, vendar z drugačnimi parametri" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Pakirniki" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Samodejno osveževanje" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Obnašanje" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Datotečni pogled" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Barve" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Stolpci" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Nastavitve" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Stolpci po meri" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Dodatni seznam hitrih map" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Povleci in spusti" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Gumb seznama pogonov" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Priljubljeni zavihki" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Dodatne programske vezi" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Programske vezi" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Novo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Datotečna opravila" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Okna datotek" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Iskanje datotek" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Pogled datotek" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Dodatni pogledi datotek" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Vrste datotek" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Zavihki map" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Zavihki map" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Pisave" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Poudarjalniki" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Hitre tipke" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikone" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Seznam prezrtih datotek in map" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tipke" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Jezik" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Razporeditev" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Dnevniki" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Različne možnosti" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Miška" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Napredno preimenovanje" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Spremenjene so možnosti »%s«\n" "\n" "Ali želite shraniti spremembe?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Vstavki" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Hitro iskanje/Filtriranje" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Orodna vrstica" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Dodatna orodna vrstica" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Sredinska orodna vrstica" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Orodja" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Orodni namigi" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Meni drevesnega pogleda" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Barve menija drevesnega pogleda" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Brez;Ukazna vrstica;Hitro iskanje;Hitri filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "z desnim gumbom;z levim gumbom;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na vrhu seznama datotek;za mapami (če so mape razvrščene pred datotekami);na mestu razvrščanja;na dnu seznama datotek" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "prirejeno plavajoče;prirejeni bajt;prirejeni kilobajt;prirejeni megabajt;prirejeni gigabajt;prirejeni terabajt" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Vstavek %s je že vezan na naslednje pripone datotek:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "&Onemogoči" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Omogoči" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Dejavno" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Opis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ime datoteke" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "po priponi" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "po vstavku" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ime" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Razvrščanje vstavkov WCX je mogoče le pri razvrstitvi po priponi!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Vpisano za" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Izbor knjižnične datoteke Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Preimenovanje vrste datotek orodnih namigov" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&občutljivo;&neobčutljivo" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Datoteke;&Mape;Datoteke &in Mape" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skrij okno filtra, kadar ni v žarišču;Nadaljuj s shranjevanjem sprememb za naslednjo sejo" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "ne upošteva velikosti črk;upošteva glede na jezikovno nastavitev sistema (aAbBcC);najprej velike, nato male črke (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "razvrsti po imenu in najprej pokaži; razvrsti kot datoteke in najprej pokaži; razvrsti kot datoteke" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "abecedno, upoštevajoč znakovne naglase;abecedno, upoštevajoč posebne znake;naravno, številčno in abecedno;naravno z razvrščanjem posebnih znakov" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "zgoraj;spodaj;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Ločilnik;&Notranji ukaz;&Zunanji ukaz;&Meni" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Za spreminjanje nastavitev orodnih namigov vrste datotek, uveljavite ali pa izbrišite trenutne" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Ime vrste datoteke orodnih namigov:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "Predmet »%s« že obstaja!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Ali ste prepričani, da želite izbrisati »%s«?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Izvožena datoteka nastavitev orodnih namigov" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Izvozi datoteko nastavitev orodnih namigov" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Izvoz %d predmetov v datoteko »%s« je končan." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Izberite vnose, ki jih želite izvoziti" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Uvozi datoteko nastavitev orodnih namigov" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Uvoz %d predmetov iz datoteke »%s« je končan." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Izbor datoteke za uvoz nastavitev orodnih namigov vrste datoteke" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Izberite vnose, ki jih želite uvoziti" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani datoteka nastavitev orodnih namigov" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Ime vrste datoteke orodnega namiga" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "opuščen slog DC – Kopija (x) ime_datoteke.pri;slog Windows – ime datoteke (x).pri;skrčen slog – ime_datoteke(x).pri" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne spremeni mesta;uporabi enake nastavitve kot za nove datoteke;na razvrščeno mesto" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "z absolutno potjo;s potjo glede na %COMMANDER_PATH%;s potjo glede na" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "vsebuje (znak)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "vsebuje" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "= (znak)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Polja »%s« ni mogoče najti!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!vsebuje (znak)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!vsebuje" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(znak)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!logični izraz" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Vstavka »%s« ni mogoče najti!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "logični izraz" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Enote »%s« za polje »%s« ni mogoče najti!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Datoteke: %d; Mape: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Ni mogoče spremeniti dovoljenj dostopa za »%s«" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Lastnika »%s« ni mogoče spremeniti." #: ulng.rspropsfile msgid "File" msgstr "Datoteka" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mapa" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Več vrst" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Imenovan cevovod" #: ulng.rspropssocket msgid "Socket" msgstr "Vtič" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Posebna bločna naprava" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Posebna znakovna naprava" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Simbolna povezava" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "neznana vrsta" #: ulng.rssearchresult msgid "Search result" msgstr "Rezultati iskanja" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Iskanje" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<neimenovana predloga>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Iskanje datotek z uporabo vstavka DSX je že v teku.\n" "Pred začetkom zagona novega iskanja mora biti predhodno končano." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Iskanje datotek z uporabo vstavka WDX je že v teku.\n" "Pred začetkom zagona novega iskanja mora biti predhodno končano." #: ulng.rsselectdir msgid "Select a directory" msgstr "Izbor mape" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "najnovejše;najstarejše;največje;najmanjše;prvi v skupini;zadnji v skupini" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Izbor okna" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Pokaži pomoč za %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Vse" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorija" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Stolpec" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Ukaz" #: ulng.rssimpleworderror msgid "Error" msgstr "Napaka" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Opravilo je spodletelo!" #: ulng.rssimplewordfalse msgid "False" msgstr "Napak" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Ime datoteke" #: ulng.rssimplewordfiles msgid "files" msgstr "datoteke" #: ulng.rssimplewordletter msgid "Letter" msgstr "Pismo" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametri" #: ulng.rssimplewordresult msgid "Result" msgstr "Rezultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Uspešno zaključeno!" #: ulng.rssimplewordtrue msgid "True" msgstr "Prav" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Spremenljivka" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Delovna mapa" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajti" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabajti" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobajti" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabajti" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajti" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Datoteke: %d, Mape: %d, Velikost: %s (%s bajtov)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Ciljne mape ni mogoče ustvariti!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nepravilen zapis velikosti datoteke!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Ni mogoče razdeliti datoteke!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Število delov presega vrednost 100! Ali želite opravilo vseeno izvesti?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Samodejno;1457664B – 3.5\" Visoke gostote 1.44M;1213952B – 5.25\" Visoke gostote 1.2M;730112B – 3.5\" Dvojne gostote 720K;362496B – 5.25\" Dvojne gostote 360K;98078KB – ZIP 100MB;650MB – CD 650MB;700MB – CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Izbor mape:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Le predogled" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Ostalo" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Opomba:" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Ploski" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Omejeno" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Enostavno" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Izjemen" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Čudovit" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Velikanski" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Izbor mape iz zgodovine obiskanih map" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Izbor priljubljenih zavihkov:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Izbor ukaza iz zgodovine uporabljenih ukazov" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Izbor dejanj iz glavnega menija" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Izbor dejanj iz glavne orodne vrstice" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Izbor mape izmed vročih map" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Izbor mape iz zgodovine datotečnega pogleda" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Izbor datoteke ali mape" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Napaka med ustvarjanjem simbolne povezave." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Privzeto besedilo" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Golo besedilo" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "ne naredi ničesar;zapri zavihek;dostopi do priljubljenih zavihkov;pokaži pojavni meni zavihkov" #: ulng.rstimeunitday msgid "Day(s)" msgstr "dni" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "ure" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "minute" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "meseci" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "sekunde" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "tedni" #: ulng.rstimeunityear msgid "Year(s)" msgstr "leta" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Preimenuj priljubljene zavihke" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Preimenuj priljubljene zavihke" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Primerjalnik" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Urejevalnik" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Napaka med odpiranjem primerjalnika" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Napaka odpiranja urejevalnika" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Napaka odpiranja terminala" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Napaka odpiranja pregledovalnika" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Sistemsko privzeto;1 sek;2 sek;3 sek;5 sek;10 sek;30 sek;1 min;Nikoli ne skrij" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Združi sistemske namige in namige DC, najprej namigi DC (opuščeno);Združi sistemske namige in namige DC, najprej sistemski namigi;Pokaži namige DC, kadar je to mogoče, in sistemske, kadar ni;Pokaži samo namige DC;Pokaži samo sistemske namige" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Pregledovalnik" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Pošljite poročilo napake s podrobnim opisom in datoteko: %s. Pritisnite %s za nadaljevanje ali pa %s za končanje programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Obe okni, od dejavne proti nedejavni" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Obe okni, z leve proti desni" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pot okna" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Z oklepajem označite vsako ime, ki ga želite" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Le ime datoteke brez pripone" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Polno ime datoteke (pot in ime)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Pomoč z uporabo spremenljivk »%«" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Zahteva od uporabnika vpis parametra s predlagano privzeto vrednostjo" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Zadnja mapa poti okna" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Zadnja mapa poti datoteke" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Levo okno" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Začasno ime datoteke seznama imen datotek" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Začasno ime datoteke popolnega seznama imen datotek (pot in ime datoteke)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Imena datotek v seznamu v UTF16 z BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Imena datotek v seznamu v UTF16 z BOM znotraj dvojnih narekovajev" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Imena datotek v seznamu v UTF8 " #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Imena datotek v seznamu v UTF8 z BOM znotraj dvojnih narekovajev" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Začasno ime datoteke seznama imen datotek z relativno potjo" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Le pripona datoteke" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Le ime datoteke" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Drug primer možnosti" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Pot brez končnega ločilnika" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Od kazalke do konca vrstice je določilnik spremenljivke odstotka znak » # «" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Vrne znak za odstotek" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Od kazalke do konca vrstice je določilnik spremenljivke odstotka spet znak » % «" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Dodaj predpono »-a« vsakemu imenu oziroma karkoli drugega" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Zahtevaj uporabniške parametre;Predlagaj privzete vrednosti]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Ime datoteke z relativno potjo" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Desno okno" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Polna pot druge izbrane datoteke v desnem oknu" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Pokaži ukaz pred zagonom" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Enostavno sporočilo]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Prikazano bo enostavno sporočilo" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Dejavno okno (vir)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Nedejavno okno (cilj)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Imena datotek bodo navedena od tu (privzeto)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Ukazi bodo izvršeni v terminalu, ki bo po izvajanju ostal odprt" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Poti bodo zapisane s končnim ločilnikom (privzeto)" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Imena datotek ne bodo navedena od tu" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Ukazi bodo izvršeni v terminalu, ki bo po izvajanju končan" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Poti bodo zapisane brez končnega ločilnika (privzeto)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Omrežje" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Smetnjak" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Pregledovalnik programa Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Slaba kakovost" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Nabor znakov" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Vrsta slike" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova velikost" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s ni mogoče najti!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "PIsalo;Pravokotnik;Elipsa" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "z zunanjim pregledovalnikom" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "z notranjim pregledovalnikom" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Število zamenjav: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Zamenjava ni bila izvršena." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Ni nastavitve z imenom »%s«" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.sk.po�����������������������������������������������������������0000644�0001750�0000144�00001445305�15104114162�017276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-03-29 01:55+0200\n" "Last-Translator: Jozef Gaal <preklady@mayday.sk>\n" "Language-Team: Jozef Gaál <preklady@mayday.sk>\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Slovenčina\n" "X-Generator: Poedit 3.2.2\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porovnávam... %d%% (ESC pre zrušenie)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Vľavo: Vymazať %d súbor(y)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Vpravo: Vymazať %d súbor(y)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Nájdené súbory: %d (Rovnaké: %d, Rôzne: %d, Jedinečné vľavo: %d, Jedinečné vpravo: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Zľava doprava: Kopírovať %d súborov, celková veľkosť: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Sprava doľava: Kopírovať %d súborov, celková veľkosť: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vybrať šablónu..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Skontrolovať voľné miesto" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopírovať atribút&y" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopírovať vlastníctvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopírovať &povolenia" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopírov&ať dátum/čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Opraviť od&kazy" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Zrušiť značku \"iba na čítanie\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Vynechať prázdne priečinky" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Nas&ledovať odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Vyh&radený priestor" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Kopírovanie pri zápise" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Overiť" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Čo urobiť, ak nemôžem nastaviť súboru čas, atribúty a pod." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Použiť šablónu súboru" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Ak priečinok &existuje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Ak súbor existuje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ak sa nedá nastaviť vlastnosť" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<žiadna šablóna>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopírovať do schránky" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Commit" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domovská stránka:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revízia" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Verzia" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Zvoľte atribúty" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archivovať" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Komprimovaný" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Priečinok" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Šifrovaný" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skrytý" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Len na čítanie" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Riedky" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pripnuté" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolický odkaz" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystémový" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Dočasné" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS atribúty" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Všeobecné atribúty" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Ako te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Referenčná veľkosť dát: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Čas (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Rýchlosť (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Výpočet kontrolného súčtu..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Otvoriť súbor s kontrolným súčtom po dokončení" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Vytvoriť samostatný kontrolný súčet pre každý súbor" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Uložiť súbor(y) s kontrolným súčtom do:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Overiť kontrolný súčet..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kódovanie" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Pri&dať" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Prip&ojiť" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Vymazať" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Správca pripojení" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Pripojiť k:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Pri&dať do fronty" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Voľby" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Uložiť tieto &voľby ako predvolené" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopírovať súbor(y)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Uložiť popis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentár k súboru/priečinku" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Upraviť komentár pre:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kódovani&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automaticky porovnať" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binárny mód" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Zrušiť" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Zrušiť" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopírovať blok vpravo" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopírovať blok vpravo" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopírovať blok vľavo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopírovať blok vľavo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovať" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Opakovať" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vybr&ať všetko" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Späť" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Späť" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Koniec" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Hľadať" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Hľadať" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Nájsť predchádzajúce" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Nájsť predchádzajúce" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Nahradiť" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Nahradiť" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Prvý rozdiel" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Prvý rozdiel" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Prejsť na riadok..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Prejsť na riadok" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorovať veľkosť písmien" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorovať prázdne znaky" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Skrolovať bez prerušenia" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Posledný rozdiel" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Posledný rozdiel" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Rozdiely riadkov" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Ďalší rozdiel" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Ďalší rozdiel" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otvoriť ľavý..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otvoriť pravý..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Vyfarbiť pozadie" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Predchádzajúci rozdiel" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Predchádzajúci rozdiel" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Obnoviť" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Obnoviť" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Uložiť" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Uložiť" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Uložiť ako..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Uložiť ako..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Uložiť ľavý" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Uložiť ľavý" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Uložiť ľavý ako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Uložiť ľavý ako..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Uložiť pravý" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Uložiť pravý" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Uložiť pravý ako..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Uložiť pravý ako..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnať" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Porovnať" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódovanie" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódovanie" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Porovnať súbory" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Vľavo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Vpravo" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akcie" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kódovanie" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Súbor" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Nastavenia" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Pridať novú skratku k sekvencii" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Odstrániť poslednú skratku zo sekvencie" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Vyberte skratku zo zoznamu zostávajúcich voľných dostupných klávesov" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Iba pre toto riadenie" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (každý v samostatnom riadku):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Klávesové skratky:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "O programe" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Nastavenie" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Nastavenie" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopírovať" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Vystrihnúť" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Vymazať" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Hľadať" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Hľadať" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Nájsť predchádzajúce" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Prejsť na riadok..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Vložiť" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovať" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Opakovať" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Nahradiť" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Nahradiť" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Vybrať &Všetko" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Vybrať všetko" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Späť" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Späť" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Zavrieť" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Koniec" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Koniec" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nový" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nový" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otvoriť" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Otvoriť" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Obnoviť" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Uložiť" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Uložiť" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Uložiť &ako.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Uložiť ako" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editovať" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dovanie" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otvoriť ako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Uložiť ako" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Súbor" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Zvýrazňovanie syntaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Koniec riadku" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Viacriadkový vzor" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Rozlišovať veľkosť" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Hľadať od &striešky" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulárne výrazy" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Len vybraný &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Len celé slová" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Voľba" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Nahradiť s:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Vyhľadať:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Vykonať toto pre &všetky súčasné objekty" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Rozbaliť súbory" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozbaliť aj s cestou, ak je uložená" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Rozbaliť do oddelených po&dzložiek (podľa názvu archívu)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Prepísať existujúce súbory" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Do priečinka:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Rozbaliť súbory zodpovedajúce maske súboru:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Heslo pre šifrované súbory:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Čakajte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Názov súboru:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Od:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na Zavrieť, keď dočasné súbory môžu byť vymazané!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Na panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Pohľad všetko" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuálna operácia:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Od:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Do:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pripnuté" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Povoliť spustenie súboru ako program" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bity:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Vytvorený:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Vykonať:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Skupina" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Posledný prístup:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Posledná zmena:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Posledná zmena stavu:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkové:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlastník" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veľkosť:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink na:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Názov" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Hodnota" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zavrieť" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Ukončiť" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Odomknúť" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Odomknúť všetko" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Odomknúť" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Súborový Handle" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ID procesu" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Cesta spustenia" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Zrušiť" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Zavrieť" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Zavrieť" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Nastavenie klávesových skratiek" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Upraviť" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "&Výsledok do okna" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Zrušiť hľadanie, zavrieť a uvoľniť pamäť" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Pre všetky ostatné „Nájdené súbory“, zrušiť, zatvoriť a uvoľniť pamäť" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Ísť na súbor" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Vyhľadávať v obsahu" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Posledné vyhľadávanie" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nové hľadanie" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nové hľadanie (vyčistiť filtre)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Ísť na stránku \"Pokročilé\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Ísť na stránku \"Načítať/Uložiť\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Prepnúť na ďalšiu stránku" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Ísť na stránku \"Moduly\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Prepnúť na predošlú stránku" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Ísť na stránku \"Výsledky\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Ísť na stránku \"Štandardné\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Spustiť" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Zobrazenie" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Uložiť" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazať" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Načítať" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Uložiť" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Uložiť s \"Začať v priečinku\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ak je uložené, potom \"Začať v priečinku\" bude obnovené pri nahrávaní šablóny. Použito to pri nastavení vyhľadávania v určenom priečinku" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Použiť šablónu" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Hľadať súbory" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Rozl&išovať veľkosť" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Dátum od:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dátum do:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Veľkosť od:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Veľkosť do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Hľadať v archívoch" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Vyhľadať &text" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Nasledovať symbolické odkazy" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Hľadať súbory NE&obsahujúce text" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nie staršie ako:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Office XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Otvorené karty" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Hľadať časť názvu súboru" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulárny výraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Nahradiť výrazom" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Vybrané priečinky a súbory" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Reg&ulárny výraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Čas od:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Čas do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Po&užiť vyhľadávací zásuvný modul:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "s rovnakým obsahom" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "s rovnakou hash sumou" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "s rovnakým názvom" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Nájsť duplicitné súbory:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "s rovnakou veľkosťou" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadeci&málne" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Zadajte mená priečinkov, ktoré by mali byť vynechané z vyhľadávania, oddelené \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Zadajte mená súborov, ktoré by mali byť vynechané z vyhľadávania, oddelené \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Zadajte mená súborov oddelené \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Hodnota" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Priečinky" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Súbory" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Vyhľadávať v obsahu" #: tfrmfinddlg.lblattributes.caption msgctxt "tfrmfinddlg.lblattributes.caption" msgid "Attri&butes" msgstr "Atribúty" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kódovanie:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "V&ynechať podpriečinky" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Vynechať súbory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Súborová maska" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Začať v priečinku" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Prehľadať po&dpriečinky:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Predchádzajúce hľadania:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Akcia" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Pre všetky ostatné, zrušiť, zatvoriť a uvoľniť pamäť" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Otvoriť na novej karte(ách)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odobrať zo zoznamu" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "Výsledok" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Ukázať všetky nájdené položky" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Zobraziť v editore" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zobraziť v prehliadači" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Zobrazenie" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Rozšírené" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Načítať/Uložiť" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Výsledky" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Normálne" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Hľadať" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Hľadať" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&Dozadu" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Rozlišovať veľkosť" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regulárne výrazy" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadecimálne" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Doména:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Heslo:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Meno používateľa:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Pripojiť anonymne" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Pripojiť ako používateľ:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Vytvoriť hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cieľ (kam bude odkaz smerovať)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importovať všetko!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Import vybraný" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Vyberte položky, ktoré chcete importovať" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Po kliknutí na podponuku sa vyberie celá ponuka" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Podržte kláves CTRL a kliknite na položky, ak chcete vybrať viacero položiek" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Prepájač" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Uložiť do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Položka" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Názov súboru" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dole" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dole" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Vymazať" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Hore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Hore" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "O programe" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktivovať kartu podľa indexu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Pridať názov súboru do príkazového riadku" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nové okno vyhľadávania..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Uložiť cestu a názov súboru do príkazového riadku" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopírovať cestu do príkazového riadku" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Pridať zásuvný modul" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Benchmark" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Jednoduché zobrazenie" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Jednoduché zobrazenie" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Vypočítať &obsadené miesto" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zmeniť priečinok" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Zmeniť priečinok na domovský" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Ísť do nadradeného priečinka" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Ísť do koreňového priečinka" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Vypočítať kontrolný súčet..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Overiť kontrolný súčet..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Vymazať log súbor" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Vymazať okno logu" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Zatvoriť všetky karty" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zatvoriť zdvojené karty" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Zavrieť kartu" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Nasledujúci príkazový riadok" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Nastaviť príkazový riadok na nasledujúci príkaz v histórii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Predchádzajúci príkazový riadok" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nastaviť príkazový riadok na predchádzajúci príkaz v histórii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Plné" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Stĺpcový pohľad" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porovnať po&dľa obsahu" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Porovnať priečinky" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Porovnať priečinky" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Nastavenie archivátorov" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Nastavenie Rýchlych priečinkov" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Nastavenie obľúbených kariet" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Nastavenie kariet priečinkov" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Nastavenie klávesových skratiek" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Nastavenie doplnkov" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Uložiť pozíciu" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Uložiť nastavenia" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Nastavenie vyhľadávania" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Panel nástrojov..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Konfigurácia pomoci" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Nastavenie ponuky stromového zobrazenia" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Nastavenie farby ponuky stromového zobrazenia" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Zobraziť kontextové menu" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopírovať všetky karty na protiľahlú stranu" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopírovať všetky zobrazené &stĺpce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopírovať mená, vrátane cesty, do schránky" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopírovať mená súborov do schránky" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopírovať názvy s UNC cestou" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopírovať súbory bez potvrdzovania" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopírovať úplnú cestu k vybraným súborom bez koncového oddeľovača priečinkov" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopírovať celú cestu k vybranému súboru(om)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopírovať do rovnakého panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopírovať" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Zo&braziť obsadené miesto" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Vys&trihnúť" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Zobraziť parametre príkazu" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Pre všetky vyhľadania, zrušiť, zatvoriť a uvoľniť pamäť" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "História priečinkov" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Rýchle priečinky" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Vykonať &interný príkaz..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Vybrať hociktorý príkaz a vykonať ho" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Upraviť" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Upraviť ko&mentár..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editovať nový súbor" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Upraviť cestu nad zoznamom súborov" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zameniť &panely" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Spustiť skript" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ukončiť" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Rozbaliť súbory..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Konfigurácia priradenia súborov" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Spojiť súbory..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Zobraziť vlastnosti súboru" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Rozdeliť súbor..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Ploché zobrazenie" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Ploché zobrazenie, iba vybrané" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Aktivovať príkazový riadok" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Vymeniť zameranie" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Prepnúť medzi ľavý a pravým zoznamom súborov" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Zamerať sa na stromové zobrazenie" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Prepnúť medzi aktuálnym zoznamom súborov a stromovým zobrazením (ak je povolené)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Umiestniť kurzor na prvý priečinok alebo súbor" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umiestniť kurzor na prvý súbor zoznamu" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Umiestniť kurzor na posledný priečinok alebo súbor" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umiestniť kurzor na posledný súbor zoznamu" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Umiestniť kurzor na ďalší priečinok alebo súbor" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Umiestniť kurzor na predošlý priečinok alebo súbor" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Vytvoriť &HardLink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Obsah" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Režim s horizontálnymi panelmi" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Klávesové skratky" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Jednoduché zobrazenie na ľavom paneli" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Stĺpcové zobrazenie na ľavom paneli" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ľavý &= Pravý" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Ploché zobrazenie na ľavom paneli" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otvoriť ľavý zoznam diskov" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Obrátiť poradie na ľavom paneli" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Zoradiť ľavý panel podľa &atribútov" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Zoradiť ľavý panel podľa &dátumu" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Zoradiť ľavý panel podľa &prípony" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Zoradiť ľavý panel podľa &názvu" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Zoradiť ľavý panel podľa &veľkosti" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Náhľadové zobrazenie na ľavom paneli" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Načítať karty z obľúbených kariet" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Načítať zoznam" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Načítať zoznam súborov/priečinkov zo zadaného textového súboru" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Nahrať vý&ber zo schránky" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Nahrať výber zo súboru..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Načítať karty zo súboru" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Vytvoriť priečinok" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Vybrať všetko s rovnakou príponou" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Odznačiť všetky súbory s rovnakým názvom" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Odznačiť všetky súbory s rovnakým názvom a príponou" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Odznačiť všetky na rovnakej ceste" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Obrátiť výber" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Vybrať všetko" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Zrušiť výber sk&upiny..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Vybrať skupinu..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Odznačiť všetko" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizovať okno" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Presun aktuálnej karty doľava" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Presun aktuálnej karty doprava" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Hromadné premenovanie" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Sieťové pripojenie..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Odpojiť sieťový priečinok" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Rýchle sieťové pripojenie..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Nová karta" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Načítať nasledujúce obľúbené karty v zozname" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Prepnúť na ďalšiu kartu" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otvoriť" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Zkúsiť otvoriť archív" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otvoriť súbor lišty" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otvoriť priečinok v novej karte" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Otvoriť disk podľa indexu" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otvoriť VFS zoznam" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Konzola operácií" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Nastavenia..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Komprimovať súbory..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Nastaviť pozíciu deliacej čiary" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Vložiť" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Načítať predchádzajúce obľúbené karty v zozname" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Prepnúť na predošlú kartu" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Rýchly filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Rýchle hľadanie" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panel rýchleho náhľadu" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Obnoviť" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Znovunačítať posledné otvorené obľúbené karty" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Presunúť" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Presunúť/premenovať súbory bez potvrdzovania" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Premenovať" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Preme&novať kartu" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Znovuuložiť na posledné otvorené obľúbené karty" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Obnoviť výbe&r" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Obrátiť poradie" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Jednoduché zobrazenie na pravom paneli" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Stĺpcové zobrazenie na pravom paneli" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Pravý &= Ľavý" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Ploché zobrazenie na pravom paneli" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvoriť pravý zoznam diskov" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Obrátiť poradie na pravom paneli" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Zoradiť pravý panel podľa &atribútov" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Zoradiť pravý panel podľa &dátumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Zoradiť pravý panel podľa &prípony" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Zoradiť pravý panel podľa &názvu" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Zoradiť pravý panel podľa &veľkosti" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Náhľadové zobrazenie na pravom paneli" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Spustiť terminál" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Uložiť aktuálne karty do nových obľúbených kariet" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Uložiť výber" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Uložiť výber do &súboru..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Uložiť karty do súboru" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Hľadať..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Všetky karty sú zamknuté s priečinkami otváranými na nových kartách" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Nastaviť všetky karty na normálne" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Nastaviť všetky karty na zamknuté" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Všetky karty zamknuté s povolením zmeny priečinka" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Zmena &atribútov..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Uzamknuté; priečinky otvárať v nových kartách" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normálne" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Uzamknuté" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Uzamknuté s povolenou zmenou priečinka" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Otvoriť" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otvor použité systémové asociácie" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Zobraziť menu tlačidiel" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Zobraziť históriu príkazového riadku" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Zobraziť skryté/systémové súbory" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Zoradiť podľa &atribútov" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Zoradiť podľa &dátumu" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Zoradiť podľa &prípony" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Zoradiť podľa &názvu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Zoradiť podľa &veľkosti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Otvoriť zoznam diskov" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Povoliť/zakázať zoznam súborov, ktoré sa nemajú zobrazovať" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Vytvoriť Symbolický odkaz..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Synchronizovaná navigácia" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Synchrónna zmena priečinka v oboch paneloch" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Syn&chronizovať priečinky..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cieľ &= Zdroj" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Testovať archív(y)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Náhľady" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pohľad s náhľadmi" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Prepínanie konzoly v režime celej obrazovky" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Preniesť priečinok pod kurzorom do ľavého okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Preniesť priečinok pod kurzorom do pravého okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Panel stromového zobrazenia" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Zoradiť podľa parametrov" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odznačiť VŠETKY súbory s rovnakou príponou" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Odznačiť VŠETKY súbory s rovnakým názvom" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Odznačiť VŠETKY súbory s rovnakým názvom a príponou" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Odznačiť VŠETKY na rovnakej ceste" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Zobrazenie" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zobraziť históriu navštívených ciest" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ísť na nasledujúcu položku v histórii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ísť na predchádzajúcu položku v histórii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Zobraziť súbor záznamu" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Zobraziť aktuálne okná vyhľadávania" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Navštíviť stránku Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Bezpečne odstrániť" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Pracovať s Rýchlymi priečinkami a parametrami" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Koniec" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Priečinok" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Rýchle priečinky" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Zobraziť aktuálny priečinok pravého panelu v ľavom panely" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Ísť do domovského priečinka" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ísť do koreňového priečinka" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ísť do nadradeného priečinka" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Rýchle priečinky" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Zobraziť aktuálny priečinok ľavého panelu v pravom panely" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cesta" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Zrušiť" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopírovať..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Vytvoriť odkaz..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Vyčistiť" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skryť" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vybrať všetko" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Presunúť..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Vytvoriť symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti kariet" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Obnoviť" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Štart" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Príkazy" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Konfigurácia" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Obľúbené" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Súbory" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Označiť" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Sieť" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Zobraziť" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Nastavenia kariet" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Karty" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Upraviť" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Vyberte svoj interný príkaz" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Staré zoradenie" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Staré zoradenie" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Označiť ako predvolené všetky kategórie" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Výber:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Kategórie:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Názov príkazu:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Pomôcka:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Klávesová skratka:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategória" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoc" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Pomôcka" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Klávesa" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definovať..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Rozlišovať veľkosť písmen" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorovať diakritiku a ligatúry" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Atribúty:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Vstupná maska:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Alebo zvoľte preddefinovaný typ výbe&ru:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvoriť nový priečinok" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Rozšírená syntax" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Zadajte nový názov priečinka:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nová veľkosť" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Výška:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kvalita JPG kompresie" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Šírka:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Výška" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šírka" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Prípona" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Názov súboru" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Vyčistiť" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Vyčistiť" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Zavrieť" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Nastavenie" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dátum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dátum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Vymazať" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Rozbaľovacia ponuka zoznamu predvolieb" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Upraviť názvy..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Upraviť aktuálne nové názvy..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Prípona" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Prípona" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Upraviť" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Vyvolať ponuku relatívnej cesty" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Načítať poslednú predvoľbu" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Načítať názvy zo súboru..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Načítať predvoľbu podľa názvu alebo indexu" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Načítať predvoľbu 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Načítať predvoľbu 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Načítať predvoľbu 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Načítať predvoľbu 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Načítať predvoľbu 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Načítať predvoľbu 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Načítať predvoľbu 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Načítať predvoľbu 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Načítať predvoľbu 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Názov súboru" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Názov súboru" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "P&remenovať" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Premenovať" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Obnoviť všetko" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Uložiť" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Uložiť ako.." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Zobraziť ponuku predvolieb" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Zoradiť" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Zobraziť súbor záznamu premenovaní" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Hromadné premenovanie" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Rozlišovať veľkosť písmen" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Výsledok záznamu" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Pripnúť" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Nahradiť len raz na súbor" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulárne výrazy" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Po&užiť substitúciu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhľadať && Nahradiť" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predvoľby" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Prípona" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Hľadať..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Názov súboru" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Nahradiť..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Číslovať od" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Šírka" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Akcie" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Upraviť" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Staré meno súboru" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nové meno súboru" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Cesta k súboru" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Po zatvorení editora kliknite na OK, aby ste načítali zmenené názvy!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Vybrať aplikáciu" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Vlastný príkaz" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Ulož asociácie" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastaviť vybranú aplikáciu ako štandardnú akciu" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Typ súboru na otvorenie: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Viacnásobné mená súboru" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Viacnásobné URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jednoduché meno súboru" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jedna URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Použiť" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Prosím, vyberte jednu z podstránok, táto stránka neobsahuje žiadne nastavenia." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Pridať" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopírovať" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Vymazať" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Ostatné..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Premenovať" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID sa používa spolu s cm_OpenArchive na rozpoznanie archívu na základe zistenia jeho obsahu, a nie prostredníctvom prípony súboru:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Nastavenia:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Mód kontroly formátu:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Povolené" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Režim ladenia" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Ukázať výstup konzoly" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Použiť názov archívu bez prípony ako zoznam" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unixové atribúty súboru" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Oddeľovač cesty &Unix „/“" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windowsové atribúty súboru" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Oddeľovač cesty Wi&ndows „/“" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Pridať:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Archivátor:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Vymazať:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Popis:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Prípona:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Rozbaliť:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Rozbaliť bez cesty:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Pozícia ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Rozsah hľadania ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Zoznam:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archivátory:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Päta výpisu (nepovinné)" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&mát zoznamu:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Hlavička výpisu (nepovinné)" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Výzva pre zadanie hesla:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Vytvoriť samorozbalovací archív:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Skúška:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&utokonfigurovať" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Zakázať všetky" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Zrušiť úpravy" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Povoliť všetky" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportovať..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importovať..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Zoradiť archivátory" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Rozšírené" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Hlavné" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Pri zmene &veľkosti, dátumu alebo atribútov" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pre nasledujúce cesty a &podpriečinky:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Pri vy&tvorení, zmazaní alebo premenovaní súborov" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Pokiaľ je aplikácia na pozadí" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Zakázať automatické obnovovanie" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Obnoviť zoznam súborov" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Vždy zobraziť ikonu v systémovej lište" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automaticky skryť odpojené disky" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Minimalizovať do oznamovacej oblasti (System Tray)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Povoliť beh iba jednej verzie DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Tu môžeš zadať 1 alebo viac diskov alebo prípojných bodov oddelených \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Zoznam zakázaných diskov" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Veľkosť stĺpcov" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Zobraziť prípony súborov" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "zarovnané (s kartou)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "hneď po názve súboru" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automaticky" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Pevný počet stĺpcov" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Pevná šírka stĺpcov" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Použiť Indikátor &Gradientu" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binárny mód" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Text:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Pozadie 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Indikátor Zadnej Farby:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indikátor Prednej Farby:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Upravený:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Upravený:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Úspech:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Orezať text na šírku stĺpca" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Rozšíriť šírku bunky, ak sa text nezmestí do stĺpca" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Horizontálne čiary" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Vertikálne čiary" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "A&utomaticky vyplniť stĺpce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Zobraz mriežku" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatická veľkosť stĺpcov" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Automatická veľkosť stĺpca:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "História príkazového riadku" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "História priečinkov" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "História použitých masiek" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Karty priečinkov" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Uložiť nastavenie" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "História vyhľadávania/nahrádzania" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Stav hlavného okna" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Priečinky" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Umiestnenie konfiguračných súborov" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Uložiť pri ukončení" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Zoradiť poradie konfigurácie v ľavom strome" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Stav stromu pri vstupe na stránku konfigurácie" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Nastaviť v príkazovom riadku" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Zvýrazňovače:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Témy ikon:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Medzi-pamäť náhľadov:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Priečinok p&rogramu (prenosná verzia)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Domovský priečinok používateľa" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Použiť zmenu na všetky stĺpce" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Vymazať" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Nastaviť predvolené" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nový" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Ďalšia" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Predchádzajúca" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Obnoviť na predvolené" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Uložiť ako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Uložiť" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Po kliknutí na tlačidlo niečo zmeniť, zmeniť pre všetky stĺpce" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Hlavné" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Orámovanie kurzora" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Použiť orámovanie kurzora" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Použiť farby neaktívneho výberu" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Použiť obrátený výber" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Na toto zobrazenie použiť vlastné písmo a farbu" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Pozadie:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadie 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "Zobrazenie stĺpcov:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuálny názov stĺpca]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Farba kurzora:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text kurzora:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Súborový systém:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Písmo:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veľkosť:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Farba textu:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farba neaktívneho kurzora:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farba vyznačenia neaktívneho výberu:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Farba vyznačenia:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Nižšie je ukážka. Posunutím kurzora a výberom súborov môžete okamžite získať skutočný vzhľad a dojem z rôznych nastavení." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Nastavenia pre stĺpec:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Pridať stĺpec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Poloha panelu okna po porovnaní:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Pridať priečinok aktívneho okna" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Pridať &priečinky aktívnych && neaktívnych rámov" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Pridať priečinok, do ktorého prejdem" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Pridajte kópiu vybratej položky" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Pridať aktuálne &vybrané alebo aktívne priečinky aktívneho rámca" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Pridať oddeľovač" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Pridať podponuku" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Pridať priečinok, ktorý napíšem" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Zbaliť všetko" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Zbaliť položku" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Vystrihnúť výber položiek" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Vymazať všetko!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Vymazať označenú položku" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Vymazať podponuku a všetky jej položky" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Vymazať iba podponuku, ale ponechať jej položky" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Rozbaliť položku" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Zamerať sa na stromové zobrazenie" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Ísť na prvú položku" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Ísť na poslednú položku" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Ísť na ďalšiu položku" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Ísť na predchádzajúcu položku" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Vložiť priečinok &aktívneho rámu" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Vložiť &priečinky aktívnych && neaktívnych rámcov" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Vložiť priečinok, do ktorého prejdem" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Vložiť kópiu vybraného záznamu" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Vložiť aktuálne vybrané alebo aktívne priečinky aktívneho rámca" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Vložiť oddelovač" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Vložiť podponuku" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Vložiť priečinok, ktorý napíšem" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Presun na ďalšie" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Presun na predchádzajúce" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Otvoriť všetky vetvy" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Vložiť, čo bolo vystrihnuté" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Hľadať a nahradiť v &ceste" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Hľadať a nahradiť aj v &ceste aj v cieli" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Hľadať a nahradiť v &cieľovej ceste" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Cesta vylepšenia" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Cieľová cesta vylepšenia" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Pridať..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Zálohovanie..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Vymazať..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "E&xportovanie..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Impo&rtovanie..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Vložiť..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Rôzne..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Niektoré funkcie na výber vhodného cieľa" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Zoradiť..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Pri pridávaní priečinku pridať aj cieľ" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Vždy rozbaliť strom" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Zobraziť len platné premenné prostredia" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Vo vyskakovacom okne, zobraziť [tiež cestu]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Názov, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Názov, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Rýchle priečinky (zmeniť poradia pomocou ťahať && pustiť" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Ďalšie možnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Meno:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Cesta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "&Cieľ:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...aktuálna úroveň iba &vybratých položiek" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Skenovať všetky cesty rýchlych priečinkov na overenie tých, ktoré skutočne existujú" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Skenovať všetky cesty rýchlych priečinkov && cieľov na overenie tých, ktoré skutočne existujú" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "do súboru Rýchleho priečinka (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "do \"wincmd.ini\" programu TC (&ponechať existujúce)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "do \"wincmd.ini\" programu TC (&vymazať existujúce)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Prejsť na informácie súvisiace s TC nastaveniami" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Prejsť na informácie súvisiace s TC nastaveniami" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "zo súboru Rýchleho priečinka (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "z \"wincmd.ini\" programu TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navigovať..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Obnoviť a zálohovať Rýchle priečinky" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Uložiť a zálohovať aktuálne Rýchle priečinky" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Vyhľadať a nahradiť..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...všetko, od A po &Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...iba jedna skupina položiek" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&obsah vybratých podponúk, žiadne podúrovne" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...obsah vybratých podponúk and &všetkých podúrovní" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Test výslednej ponuky" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Cesta vylepšenia" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Cieľová cesta vylepšenia" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Pridanie z hlavného panela" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Použiť súčasné nastavenia na Rýchle priečinky" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Zdroj" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Cieľ" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Cesty" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Spôsob nastavenia ciest pri ich pridávaní:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Urobiť to pre cesty:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta relatívna k:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Zakaždým sa opýtať, ktorý zo všetkých podporovaných formátov použiť" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Pri ukladaní textu Unicode, uložiť ho vo formáte UTF8 (inak bude UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Pri pustení textu automaticky vygenerovať názov súboru (v opačnom prípade vyzvať používateľa)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Zobraziť potvrdzovacie okno po vložení" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Pri ťahaní && púšťaní textu do panelov:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Najžiadanejší formát umiestnite na začiatok zoznamu (použite funkciu ťahaj && pusť):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(ak nie je prítomný najžiadanejší, vyberie sa druhý a tak ďalej)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(nebude fungovať s niektorými zdrojovými aplikáciami, preto skúste odznačiť, ak je problém)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Zobraziť súborový systém" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Zobraziť voľný pri&estor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Zobraziť &popis" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Zoznam diskov" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Automatické odsadenie" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Umožňuje odsadiť striešku, keď sa nový riadok vytvorí pomocou <Enter>, s rovnakým množstvom úvodnej bielej medzery ako v predchádzajúcom riadku" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Pravý okraj:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Znak striešky za koncom riadka" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Umožňuje presunúť znak striešky do prázdneho priestoru za pozíciu konca riadku" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Zobraziť špeciálne znaky" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Zobraziť špeciálne znaky pre medzery a tabulátory" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Inteligentné karty" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Pri použití klávesu <Tab> prejde kurzor na nasledujúci znak predchádzajúceho riadku, ktorý nie je medzera" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Bloky zarážok tabulátora" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Keď je aktívne <Tab> a <Shift+Tab>, fungujú ako blokové odsadenie, po výbere textu sa odstráni odsadenie" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Namiesto tabulátorov použiť medzery" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Previesť ZZZznaky tabulátora na zadaný počet znakov medzery (pri zadávaní)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Odstrániť koncové medzery" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatické mazanie koncových medzier, toto platí iba pre upravené riadky" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Upozorňujeme, že možnosť \"Inteligentné karty\" má prednosť pred tabelovaním, ktorá sa má vykonať" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti interného editora" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Odsadenie bloku:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Šírka karty:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Upozorňujeme, že možnosť \"Inteligentné karty\" má prednosť pred tabelovaním, ktorá sa má vykonať" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Pozadie" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Pozadie" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Obnoviť" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Uložiť" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atribúty prvku" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Pop&redie" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Pop&redie" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Textová značka" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Použiť (a upraviť) &globálnu schému nastavení" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Použiť miestnu schému nastavení" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Tučné" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "In&vertovať" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Vypnúť" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Zapnúť" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kurzíva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "In&vertovať" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Vypnúť" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Zapnúť" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Pre&škrtnuté" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "In&vertovať" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Vypnúť" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Zapnúť" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podčiarkuté" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Pre&vrátiť" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Vyp" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Zap" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Pridať..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Vymazať..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importovanie/Exportovanie" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Vložiť..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Zoradiť..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Žiadne" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Vždy rozbaliť strom" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Vľavo" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Vpravo" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Zoznam obľúbených kariet (ťahaním a pustením zmeníte poradie)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Ďalšie možnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Čo a kam obnoviť pre vybratú položku:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Ponechať existujúce karty:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Ukladať históriu priečinka:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Karty uložené vľavo sa obnovia do:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Karty uložené vpravo sa obnovia do:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "oddeľovač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Pridať oddeľovač" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podponuka" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Pridať podponuku" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Zbaliť všetko" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...aktuálna úroveň iba vybratých položiek" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Vystrihnúť" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "vymazať všetko!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podponuku a všetky jej položky" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "iba podponuku, ale ponechať jej položky" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "označená položka" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Vymazať označenú položku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportovať výber do starších súborov .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "ObľúbenéKartyTestovaciaPonuka" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importovať staršie súbory .tab podľa predvoleného nastavenia" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovať staršie súbory .tab na vybranú pozíciu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovať staršie súbory .tab na vybranú pozíciu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importovať staršie súbory .tab na vybranú pozíciu v podponuke" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Vložiť oddelovač" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Vložiť podponuku" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otvoriť všetky vetvy" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Vložiť" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...všetko, od A po &Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...iba jedna skupina položiek" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Triediť len jednu skupinu položiek" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...obsah vybratých podponúk, žiadne podúrovne" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...obsah vybratých podponúk and všetkých podúrovní" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testovať výslednú ponuku" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Pridať" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Pridať" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Pri&dať" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klonovať" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Vyberte svoj interný príkaz" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Dole" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Upraviť" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Vložiť" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Vložiť" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Odstrániť" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Odstrániť" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Pr&emenovať" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Pomocník variabilného pripomienkovača" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Hore" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Počiatočná cesta príkazu. Tento reťazec nikdy neuvádzajte v úvodzovkách." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Názov akcie. Nikdy sa neodovzdáva systému, je to len mnemotechnický názov, ktorý ste si vybrali pre seba" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter, ktorý sa má odovzdať príkazu. Dlhý názov súboru s medzerami by mal byť uvedený v úvodzovkách (ručné zadanie)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Príkaz na vykonanie. Tento reťazec nikdy neuvádzajte v úvodzovkách." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Popis akcie" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Akcie" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Prípony" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Môže byť zoradené pomocou funkcie ťahať a pustiť" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Typy súborov" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Akcie môžu byť zoradené pomocou funkcie ťahať a pustiť" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Prípony môžu byť zoradené pomocou funkcie ťahať a pustiť" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Typy súborov môžu byť zoradené pomocou funkcie ťahať a pustiť" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Akcia:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Príkaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Vlastné s..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Vlastné" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Upraviť" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvoriť v editore" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Upraviť s..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Získať výstup z príkazu" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Otvoriť v internom editore" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Otvoriť v internom zobrazovači" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otvoriť" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Otvoriť s..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Spustiť v terminále" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Zobrazenie" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvoriť v prehliadači" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Zobraziť s..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Kliknite pre zmenu ikony!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Použiť aktuálne nastavenia na všetky aktuálne nakonfigurované názvy súborov a ciest" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Predvolené kontextové akcie (Zobraziť/Upraviť)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Spustiť cez shell" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Rozšírené kontextové menu" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfigurácia priradenia súborov" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Ponuka na pridanie výberu do asociácie súborov, ak ešte nie je zahrnutá" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Pri prístupe k asociácii súborov ponúknuť pridanie aktuálne vybraného súboru, ak ešte nie je zahrnutý v nakonfigurovanom type súboru" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Spustiť v termináli a zavrieť" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Spustiť v termináli a nechať otvorené" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Príkazy" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Počiatočné cesty" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Položky rozšírených možností:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Cesty" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Spôsob nastavenia ciest pri pridávaní prvkov pre ikony, príkazy a počiatočné cesty:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Vykonať toto pre súbory a cestu pre:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta relatívna k:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Zobraziť okno potvrdenia pre:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operácie kopírovania" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operácie zmazania" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Vymazať do koša (klávesa Shift ruší toto nastavenie)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operácie vyhodenia do koša" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Zrušiť označenie\"len na čítanie\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operácie presunu" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Spracovať komentáre s priečinkami/súbormi" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Vybrať meno súboru bez prípony, pri premenovaní" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Zobraziť výber karty v dialógu kopírovať/presunúť" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Preskočiť chyby súborových operácií a ich zapísať do okna záznamov" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Operácia testovania archívu" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Overiť fungovanie kontrolného súčtu" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Vykonávanie operácií" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Používateľské rozhranie" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Veľkosť zásobníka pre súborové operácie (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Veľkosť vyrovnávacej pamäte pre výpočet &hashu (v KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Ukázať postup operácií &inicializovaný v" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Štýl automatického premenovania duplicitných názvov:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Počet prechodov bezpečného vymazania:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Obnoviť DC na predvolené" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Použiť ohraničený kurzor" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Použiť farbu neaktívneho výberu" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Použiť inverzný výber" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Orámovanie kurzora" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Pozadie:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Pozadie 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Farba kurzora:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Text kurzora:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farba neaktívneho kurzora:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farba vyznačenia neaktívneho výberu:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "Úroveň jasu neaktívneho panela" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Farba označenia:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Farba textu:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Nižšie je ukážka. Posunutím kurzora a výberom súbora môžete okamžite získať skutočný vzhľad a pocit z rôznych nastavení." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Farba textu:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Pri spustení vyhľadávania súborov vymazať filter masky súborov" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Hľadať časť mena súboru" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Zobraziť ponukový panel v \"Hľadať súbory\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Vyhľadávanie textu v súboroch" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Hľadanie súborov" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Aktuálne filtre s tlačidlom \"Nové vyhľadávanie\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Predvolená vyhľadávacia šablóna:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Použiť mapovanie pamäte pre hľadanie textu v súboroch" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Po&užiť stream pre hľadanie textu v súboroch" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Predvolené" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formátovanie" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Použiť vlastné skratky:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Triedenie" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Rozlišovanie veľkosti písmen:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nesprávny formát" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Formát &dátumu a času:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formát veľkosti súboru:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Formát pätičky:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Formát záhlavia:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megab&yte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Vlož&iť nové súbory:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Formát veľkosti operácie:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Triedenie priečinkov:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Metóda triedenia:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Presunúť aktualizované súbory:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Povoliť zmenu na nadradený priečinok, pri dvojitom kliknutí na prázdnu časť súborového zobrazenia" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Nenačítať zoznam súborov pokiaľ karta je aktivovaná" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Zobraziť názvy priečinkov v hranatých zátvorkách" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Zvýraznenie nových a aktualizovaných súborov" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Povolenie premenovania na mieste pri dvojitom kliknutí na názov" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Nahrať zoznam súborov v samostatnom vlákne" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Nahrať ikony po zozname súborov" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Zobraziť skryté/systémové súbory" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Pri výbere medzerníkom sa posúvať dole na ďalší súbor, (ako klávesou <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filter v štýle Windows pri označovaní súborov (\"*.*\" vyberie aj súbory bez prípony atď.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Použiť zakaždým nezávislý atribútový filter v dialógovom okne pre zadávanie masky" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Označenie/Odznačenie položiek" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Predvolená hodnota atribútu masky, ktorá sa má použiť:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Pri&dať" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Vymazať" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablóna..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Farby typu súborov (zoradiť pomocou Ťahať&&Pustiť)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Atribúty kategórií:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Farba kategórie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategórie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Názov kategórie:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Písma" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Pridať klávesovú skratku" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopírovať" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Vymazať" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Vymazať klávesovú skratku" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Upraviť klávesovú skratku" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Ďalšia kategória" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Vytvorte vyskakovacie menu súvisiace so súbormi" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Predchádzajúca kategória" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Obnoviť DC na predvolené" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Uložiť teraz" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Zoradiť podľa názvu príkazu" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Zoradiť podľa klávesových skratiek (zoskupené)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Zoradiť podľa klávesových skratiek (jedna na riadok)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "K&ategórie:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Príkazy:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Súbory klávesových skratiek:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Poradie:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategórie" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Príkaz" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Poradie" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Príkaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Klávesové skratky" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Popis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Klávesa" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Ovládanie" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pre nasledujúce cesty a &podpriečinky:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Zobraziť ikony akcií v &ponuke" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Zobraziť ikony na tlačidlách" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Zobraziť prekryté i&kony, napr. pre odkazy" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Stlmené skryté súbory (pomalšie)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Zakázať špeciálne ikony" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Veľkosť ikony " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Téma ikon" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Zobraziť ikony" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Zobraziť ikony vľavo od názvu súboru " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Panel diskov:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Panel súborov:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Všetko" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Všetky asociácie + &EXE/LNK (pomalé)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "L&en štandardné ikony" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Prid&ať vybrané názvy" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Pridať vybrané názvy s celou cestou" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorovať (nezobrazovať) nasledujúce súbory a priečinky:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "Uložiť do:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Ľavá, pravá šípka zmení priečinok (pohyby ako v Lynx-e)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Písanie" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Al&t+Písmená:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+Písmená:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "Písmená:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Ploché tlačidlá" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ploché rozhranie" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Zobraziť &indikátor voľného miesta na disku" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Zobraziť okno záznamu" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Zobraziť panel operácií na pozadí" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Zobraziť celkový postup v lište menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Zobraziť príkazový ria&dok" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Zobraziť aktuáln&y priečinok" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Zobraziť &tlačidlá diskov" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Zobraziť údaj o voľnom mieste" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Zobraziť &tlačidlo zoznamu diskov" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Zobraziť &funkčné tlačidlá" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Zobraziť hlavné menu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Zobraziť &tlačidlovú lištu" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Zobraziť skrátený štítok voľného priestoru" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Zobraziť &stavový riadok" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Zobraziť &tabstop hlavičku" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Zobraziť &karty" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Zobraziť okno terminálu" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zobraziť dve tlačidlové panely diskov (pevná šírka, nad oknami so súbormi)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Zobraziť stredný panel nástrojov" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Vzhľad obrazovky " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Zobraziť obsah súboru záznamu" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Zahrnúť dátum do názvu súboru záznamu" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Zbaliť/Rozbaliť" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Spustenie externého príkazového riadku" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopírovať/Presunúť/Vytvoriť odkaz/symbolický odkaz" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Vymazať" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Vytvoriť/Vymazať priečinky" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Zaznamenávať &chyby" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Vytvoriť súbor záznamu:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Maximálny počet súborov záznamu" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Zaznamenávať informačné správy" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Spustiť/Vypnúť" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Zaznamenávať &dokončené operácie" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Doplnky súborového systému" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Súbor záznamu súborových operácií" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Zaznamenávať operácie" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Stav operácie" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Odobrať náhľady pre už neexistujúce súbory" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Zobraziť obsah konfiguračného súboru" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Vytvoriť nový s kódovaním:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Vždy isť na koreňový priečinok pri zmene diskov" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Zobraziť &aktuálny priečinok v hlavnom paneli okna" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Zobraziť &úvodnú obrazovku" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Zobraziť varovné správy (len tlačidlo \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Uložiť náhľady do cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Náhľady" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Komentáre súboru (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Týkajúce sa TC exportu/importu:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Predvolené jednobajtové kódovanie textu:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Predvolené kódovanie:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfiguračný súbor:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Spustiteľný súbor TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Výstupná cesta panela nástrojov:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixely" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Veľkosť náhľadu:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Výber myšou" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Textový kurzor už nesleduje kurzor myši" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Kliknutím na ikonu" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otvoriť s" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Skrolovanie" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Výber" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Režim:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dvojitý klik" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Riadok po riadku" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Riadok po riadku s posunom kurzora" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Stránka po stránke" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Jeden klik (otvára súbory a priečinky)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Jeden klik (otvára priečinky, dvojitý klik pre súbory)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Zobraziť obsah súboru záznamu" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Jednotlivé priečinky za deň" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Zaznamenávať názvy súborov s úplnou cestou" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Zobraziť ponukový panel na vrchu " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Premenovať záznam" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Nahradiť neplatný znak názvu súboru znakom" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Pripojiť do toho istého súboru záznamu premenovania" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Podľa predvoľby" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Ukončiť s upravenou predvoľbou" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Prevoľba pri spustení" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Pri&dať" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Konfigurovať" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Povoliť" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Vylepšenie" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Popis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Vyhľadávacie zásuvné moduly umožňujú použitie pri hľadaní alternatívnych vyhľadávacích algoritmov alebo externých nástrojov (napr. \"nájsť \", atď.)." #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Použiť aktuálne nastavenia na všetky aktuálne nakonfigurované zásuvné moduly" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Pri pridávaní nového doplnku automaticky prejsť do okna vylepšení" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Nastavenie:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Súbor knižnice Lua, ktorý sa má použiť:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta relatívna k:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Štýl názvu súboru zásuvného modulu pri pridávaní nového zásuvného modulu:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Komprimačné zásuvné moduly pre prácu s archívmi" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Obsahové zásuvné moduly umožňujú zobraziť rozšírené informácie ako sú mp3 značky alebo atribúty obrázkov v zozname súborov, alebo ich používať na vyhľadávanie a \"multi-premenovanie\"" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Zásuvné moduly súborových systémov umožnia prístup k bežne nedostupným médiám ako sú napr. externé zariadenia (Palm/PocketPC)." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Zobrazovacie zásuvné moduly umožňujú zobrazenie súborov ako sú obrázky, tabuľky, databázy a pod. v Prehliadači (F3, Ctrl+Q)." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Začiatok (meno musí začínať zadaným znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Koniec (posledný znak pred bodkou . musí zodpovedať zadanému)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Nastavenia" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Presná zhoda názvu" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Vyhľadávanie podľa veľkosti písmen" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Vyhľadávanie týchto položiek" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Ponechať premenovaný názov pri odomykaní karty" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktivovať cieľový &panel pri kliknutí na jeho ľubovolnú kartu" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Zobraziť hlavičku karty, aj keď existuje len jedna" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zatvoriť zdvojené karty pri zatváraní aplikácie" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Potvrdiť zatvorenie všetkých kariet" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potvrdzovať zatvorenie zamknutých kariet" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Obmedzená dĺžka názvu karty na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Zobraziť uzamknuté karty so znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Karty na viac riadkov" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Hore otvorí novú kartu na popredí" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otvárať &nové karty vedľa aktuálnej karty" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Znovu-použiť existujúce karty, ak je to možné" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Na kartách zobraziť tlačidlo zavrieť" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vždy zobraziť písmeno jednotky v názve karty" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Hlavičky kariet" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znakov" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Akcia, ktorá sa má uskutočniť po dvojkliku na kartu:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Umiestnenie karty" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Žiadne" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Vľavo" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Vpravo" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Prechod na konfiguráciu obľúbených kariet po opätovnom uložení" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Prechod na konfiguráciu obľúbených kariet po uložení novej" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Povoliť pokročilé možnosti obľúbených kariet (výber cieľovej strany pri obnovení atď.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Predvolené dodatočné nastavenia pri ukladaní nových obľúbených kariet:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Pokročilé nastavenia záhlavia záložiek priečinkov" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Pri obnove karty zachovať existujúce karty:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Karty uložené vľavo sa obnovia do:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Karty uložené vpravo sa obnovia do:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Ukladať históriu priečinkov pomocou obľúbených kariet:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Predvolená pozícia v ponuke pri ukladaní nových obľúbených kariet:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Za normálnych okolností by tu mal byť príkaz {command}, ktorý odráža príkaz, ktorý sa má spustiť v termináli" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Za normálnych okolností by tu mal byť príkaz {command}, ktorý odráža príkaz, ktorý sa má spustiť v termináli" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Príkaz iba pre spustenie terminálu:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Príkaz pre spustenie príkazu v termináli a potom ho zatvoriť:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Príkaz pre spustenie príkazu v termináli a ponechať ho otvorený:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "&Príkaz:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "&Príkaz:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "&Príkaz:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "Klonovať tlačidlo" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "Vymazať" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Upraviť klávesovú skratku" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Vložiť nové tlačidlo" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Vybrať" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Iné ..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "V&ymazať klávesovú skratku" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Navrhnúť" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Nech DC navrhne pomoc na základe typu tlačidla, príkazu a parametrov" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ploché tlačidlá" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Hlásenie chýb pomocou príkazov" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Zobraziť popisky" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Zadajte parametre príkazu, každý v samostatnom riadku. Stlačte F1 na zobrazenie pomoci k parametrom." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Vzhľad" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "Veľkosť lišty:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Príkaz:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoc" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Klávesová skratka:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Ikona:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Veľkosť ikony:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Príkaz:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Štýl:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "Pomôcka:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Pridať panel nástrojov so všetkými príkazmi DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pre externý príkaz" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pre interný príkaz" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pre oddeľovač" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pre panel pomocných nástrojov" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Zálohovanie..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportovať..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuálny panel nástrojov..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "pre pridanie do horného panela nástrojov" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do súboru TC .BAR (ponechať existujúce)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do súboru TC .BAR (vymazať existujúce)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" programu TC (ponechať existujúce)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" programu TC (vymazať existujúce)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Horný panel..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Uložiť zálohu panela nástrojov" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do súboru panela nástrojov (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do súboru TC .BAR (ponechať existujúce)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do súboru TC .BAR (vymazať existujúce)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" programu TC (ponechať existujúce)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" programu TC (vymazať existujúce)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "hneď za aktuálny výber" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "ako prvý element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "ako posledný element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "hneď pred aktuálny výber" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importovať..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnoviť zálohu panela nástrojov" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "pre pridanie do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pre pridanie do nového panela do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pre pridanie do nového panela do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "pre pridanie do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "pre nahradenie horného panela nástrojov" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "zo súboru panela nástrojov (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pre pridanie do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pre pridanie do nového panela do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pre pridanie do nového panela do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pre pridanie do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pre nahradenie horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z jedného súboru TC .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pre pridanie do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pre pridanie do nového panela do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pre pridanie do nového panela do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pre pridanie do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pre nahradenie horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z \"wincmd.ini\" programu TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "pre pridanie do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pre pridanie do nového panela do aktuálneho panela nástrojov" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pre pridanie do nového panela do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "pre pridanie do horného panela nástrojov" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "pre nahradenie horného panela nástrojov" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "hneď za aktuálny výber" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "ako prvý element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "ako posledný element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "hneď pred aktuálny výber" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Hľadať a nahradiť..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "hneď za aktuálny výber" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "ako prvý element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "ako posledný element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "hneď pred aktuálny výber" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "vo všetkých hore uvedených..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "vo všetkých príkazoch..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "vo všetkých názvoch ikon..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "vo všetkých parametroch..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "vo všetkých počiatočných cestách..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "hneď za aktuálny výber" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "ako prvý element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "ako posledný element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "hneď pred aktuálny výber" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Oddeľovač" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Miesto" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačidla" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Použiť súčasné nastavenia na všetky nakonfigurované názvy súborov a cesty" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Príkazy" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Počiatočné cesty" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Cesty" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Urobiť to pre súbory a cesty pre:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta relatívna k:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Spôsob nastavenia ciest pri pridávaní prvkov pre ikony, príkazy a počiatočné cesty:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Ponechať okno terminálu otvorené po spustení programu" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Spustiť v t&ermináli" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Po&užiť externý program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Ďalšie parametre" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Cesta k programu na spustenie" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Pri&dať" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopírovať" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Vymazať" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablóna..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Premenovať" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Ostatné..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Konfigurácia pomoci pre vybraný typ súboru:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Všeobecné možnosti týkajúce pomoci:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Zobraziť bublinovú pomoc v paneli súborov" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Tipy pre kategóriu:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategórie:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Oneskorenie skrytia pomoci:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Režim zobrazovania pomoci:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Typy súborov:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Zrušiť úpravy" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportovať..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importovať..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Triedenie typov súborov s pomocou" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Dvojitým kliknutím na lištu v hornej časti panela súborov" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "S ponukou a interný príkazom" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dvojklikom v strome vyberte a ukončite" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "S ponukou a interný príkazom" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Dvojklikom na kartu (ak je nakonfigurované)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Pri použití klávesovej skratky sa okno ukončí a vráti sa aktuálna voľba" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Jedným kliknutím myši v strome vybrať a ukončiť" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Použiť toto pre históriu príkazového riadku" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Použiť toto pre históriu priečinkov" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Použiť toto pre históriu zobrazení (navštívené cesty pre aktívne zobrazenie)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Správanie v súvislosti s výberom:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Súvisiace možnosti ponuky stromového zobrazenia:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Kde použiť ponuky stromového zobrazenia:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*POZNÁMKA: Pokiaľ ide o možnosti, ako je citlivosť na veľké a malé písmená, ignorovanie diakritiky, tieto sa ukladajú a obnovujú individuálne pre každý kontext z použitia a relácie do druhej." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "S priečinkom Rýchlych priečinkov:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "S obľúbenými kartami:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "S históriou:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Použiť a zobraziť klávesovú skratku na výber položiek" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Písmo" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Rozmiestnenie a možnosti farieb:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Farba pozadia:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Farba kurzoru:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Farba nájdeného textu:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Nájdený text pod kurzorom:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Farba normálneho textu:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normálny text pod kurzorom:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Náhľad ponuky stromového zobrazenia:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Farba druhotného textu:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Druhotný text pod kurzorom:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Farba klávesovej skraty:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Odkaz pod kurzorom:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Farba textu neoznačiteľných:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Nevyznačiteľné pod kurzorom:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Zmeňte farbu na ľavej strane a uvidíte tu náhľad toho, ako budú vyzerať vaše ponuky v zobrazení stromu s touto vzorkou." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Počet stĺpcov v prehliadači kníh" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Konfigurovať" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Komprimovať súbory" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Vytvoriť &samostatné archívne súbory pre každý vybratý súbor/priečinok" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbaľovací archív" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Za&šifrovať" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Pre&sunúť do archívu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Viaczväzkový archív" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Najskôr vložiť do TAR archívu" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Kom&primovať s cestou (only recursed)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Komprimovať súbor(y) do súboru:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Komprimátor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zavrieť" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Rozbaliť &Všetko a spustiť" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Rozbaliť a spustiť" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Vlastnosti komprimovaného súboru" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atribúty:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Kompresný pomer:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dátum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metóda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Pôvodná veľkosť:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Súbor:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Skomprimovaná veľkosť:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Komprimátor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Nastavenie tlače" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Okraje (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Dole:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Ľavý:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Pravý:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Hore:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zavrieť panel filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Zadajte text na vyhľadanie alebo filtrovanie" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Rozlišovať veľkosť písmen" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Priečinky" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Súbory" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Zhoda Začiatok" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Zhoda Koniec" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Prepnúť medzi vyhľadávaním a filtrom" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Viac pravidiel" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Menej pravidiel" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Použiť obsahové moduly v kombinácii s:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Hodnota" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&A (všetky vyhovujúce)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&ALEBO (akékoľvek vyhovujúce)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Použiť" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Šablóna..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Šablóna..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Vybrať duplicitné súbory" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Nechajte aspoň jeden nevybraný súbor v každej skupine:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Odstrániť výber podľa názvu/prípony:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Vybrať podľa &názvu/prípony:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušiť" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Oddelovač" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Počítať od" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Výsledok:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Vyberte priečinky, ktoré chcete vložiť (môžete vybrať viac ako jeden)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Koniec" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Začiatok" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušiť" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Počítať prvé od" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Počítať posledné od" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Popis rozsahu" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Výsledok:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vyberte znaky na vloženie:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Prvé:Posledné]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Prvý,&Dĺžka]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Koniec" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Začiatok" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "&Koniec" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "&Začiatok" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Nastaviť atribúty" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pripnuté" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archív" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Vytvorený:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skrytý" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Naposledy otvorený:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Upravený:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Len na čítanie" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Vrátane podpriečinkov" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Systémový" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Časová značka" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(sivé pole znamená nezmenenú hodnotu)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Textovo:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustenie" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(sivé pole znamená nezmenenú hodnotu)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkové:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Zoradiť" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušiť" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Ťahaním a púšťaním prvkov ich môžete zoradiť" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Delenie súborov" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Vyžadovať overovací súbor CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Veľkosť a počet častí" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Rozdeliť súbor do priečinka:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Počet častí" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajtov" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "GB" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "KB" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "MB" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Odovzdať" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operačný systém" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revízia" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Verzia" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Vytvoriť symbolický odkaz" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Použiť relatívnu cestu, ak je to možné" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Cieľ (kde odkaz bude smerovať)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Vymazať na oboch stranách" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Vymazať vľavo" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Vymazať vpravo" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Odstrániť výber" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Vybrať na kopírovanie (predvolený smer)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Vybrať pre kopírovanie -> (zľava doprava)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Opačný smer kopírovania" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Vybrať pre kopírovanie <- (sprava doľava)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Vybrať pre vymazanie <-> (obe)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgctxt "tfrmsyncdirsdlg.actselectdeleteleft.caption" msgid "Select for deleting <- (left)" msgstr "Vybrať pre vymazanie <- (vľavo)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Vybrať pre vymazanie -> (vpravo)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Zavrieť" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Porovnať" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Šablóna..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizovať" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizovať priečinky" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymetrické" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "podľa obsahu" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorovať dátum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "iba vybrané" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podpriečinky" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Zobraziť:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Názov" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Názov" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(v hlavnom okne)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Porovnať" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Zobraziť ľavé" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Zobraziť pravé" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplikáty" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "jednotlivé" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Prosím, stlačte \"Porovnať\" pre spustenie" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchronizovať" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potvrdiť prepísanie" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Ponuka stromového zobrazenia" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Vyberte váš rýchly priečinok:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Vyhľadávanie rozlišuje veľkosť písmen" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Plné zbalenie" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Plné rozbalenie" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Vyhľadávanie ignoruje diakritiku a ligatúry" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Vyhľadávanie nerozlišuje veľkosť písmen" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Vyhľadávanie je striktné, pokiaľ ide o diakritiku a ligatúry" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Nezobrazovať obsah vetvy \"len\" preto, že hľadaný reťazec sa nachádza v názve vetvy" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Ak sa hľadaný reťazec nachádza v názve vetvy, zobraziť celú vetvu, aj keď sa prvky nezhodujú" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Zavrieť ponuku stromového zobrazenia" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Nastavenie ponuky stromového zobrazenia" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Nastavenie farby ponuky stromového zobrazenia" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Pridať nový" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Zmeniť" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Predvolené" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Niektoré funkcie na výber vhodnej cesty" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Odst&rániť" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Vylepšovací zásuvný modul" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tekovať typ archívu podľa obsahu" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Môžete mazať súbory" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podporuje šifrovanie" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Zobraziť ako normálne súbory (skryť ikonu archivátora)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podporuje archivovanie v pamäti" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Môžu byť zmenené existujúce archívy" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Archív môže obsahovať viac súborov" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Môžu sa vytvárať nové archívy" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podporuje dialógové okno s nastavením" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Povoliť vyhľadávanie textu v archívoch" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Popis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Detegovať reťazec:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Prípona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Vlajky:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Názov:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Zásuvný modul:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Zásuvný modul:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O prehliadači..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zobraziť About správu" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Automaticky znovunačítať" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Zmeniť kódovanie" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Skopírovať Súbor" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopírovať súbor" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopírovať do schránky" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopírovať do schránky s formátovaním" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Vymazať Súbor" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Vymazať Súbor" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Koniec" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Hľadať" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Nájsť predchádzajúce" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Prejsť na riadok..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Prejsť na riadok" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Centrovať" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Další" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Načítať Nasledujúci Súbor" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Predchádzajúci" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Načítať Predchádzajúci Súbor" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Zrkadliť horizontálne" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Zrkadliť vertikálne" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Presunúť Súbor" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Presunúť súbor" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Náhľad" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "&Tlačiť..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Nastavenie tlače..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Obnoviť" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Znova načítať aktuálny súbor" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Otočiť o 180°" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Otočiť o -90°" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Otočiť o +90°" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Uložiť" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Uložiť ako.." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Ulož Súbor Ako ..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Snímok obrazovky" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Oneskorenie 3 sekundy" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Oneskorenie 5 sekúnd" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Vybrať všetko" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Zobraziť &binárne" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Zobraziť ako knihu" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Zobraziť ako &Dec" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Zobraziť &hexadecimálne" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Zobraziť ako &Text" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Zobraziť &ako zalamovaný text" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Zobraziť textový kurzor" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (iba text)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Zobraziť priehľadnosť" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Natiahnuť" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Natiahnuť obrázok" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Natiahnuť iba veľké" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Späť" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Zpäť" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Zalomiť text" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Priblíženie" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Priblížiť" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Priblížiť" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Oddialiť" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Oddialiť" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Orezať" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Exportovať panel" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýrazniť" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Ďalší panel" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Farba" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Predchádzajúci panel" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Zmeniť veľkosť" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Prezentácia" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Prehliadač" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Elipsa" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dovanie" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Súbor" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Obrázok" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Pero" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Obdl" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Otočiť" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Snímok obrazovky" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Zobrazenie" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Štart" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Zastaviť" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Súborové operácie" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vždy na vrchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Pomocou funkcie \"drag &&drop\" môžete presúvať operácie medzi frontami" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Zobraziť v odpojenom okne" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Zaradiť ako prvé do poradia" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Zaradiť ako posledné do poradia" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Rad" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Mimo poradia" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Zobraziť v odpojenom okne" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pozastaviť všetko" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Nas&ledovať odkazy" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Ak priečinok &existuje" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Príkazový riadok:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametre:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Počiatočná cesta:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Konfigurovať" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Za&šifrovať" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopírov&ať dátum/čas" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Pracovať na pozadí (oddelené spojenie)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ak súbor existuje" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Potrebujete povolenia administrátora" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "na skopírovanie tohto objektu:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "na vytvorenie tohto objektu:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "na vymazanie tohto objektu:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "na získanie atribútov tohto objektu:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "na vytvorenie tohto hardlinku:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "na otvorenie tohto objektu:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "na premenovanie tohto objektu:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "na nastavenie atribútov pre tento objekt:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "na vytvorenie tohto symbolického odkazu:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Dátum vytvorenia" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Výška" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Šírka" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Výrobca" #: uexifreader.rsmodel msgid "Camera model" msgstr "Model fotoaparátu" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientácia" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Tento súbor nie je možné nájsť a mohol by pomôcť overiť konečnú kombináciu súborov:\n" "%s\n" "\n" "Mohli by ste ho sprístupniť a stlačiť tlačidlo \"OK\", keď to bude pripravené\n" "alebo stlačte \"ZRUŠIŤ\" a budete pokračovať bez neho?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Zrušiť Rýchly filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Prerušiť Prebiehajúcu Operáciu" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Zadajte názov súboru s príponou pre vysunutý text" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formát textu na importovanie" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Poškodené:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Všeobecné:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Chýba:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Chyba čítania:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Úspech:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Vložte kontrolný súčet a vyberte algoritmus:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Overiť kontrolný súčet" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Celkom:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Chcete vymazať filtre pre toto nové vyhľadávanie?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schránka neobsahuje žiadne platné údaje panelu nástrojov." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Všetko;Aktívny panel;Ľavý panel;Pravý panel;Operácie so súbormi;Konfigurácia;Sieť;Rôzne;Paralelný port;Tlač;Označiť;Zabezpečenie;Schránka;FTP;Navigácia;Pomoc;Okno;Príkazový riadok;Nástroje;Zobraziť;Používateľ;Karty;Triedenie;Denník" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Staršie triedenie;triedenie od A do Z" #: ulng.rscolattr msgid "Attr" msgstr "Atr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dátum" #: ulng.rscolext msgid "Ext" msgstr "Prípona" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Meno" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Veľkosť" #: ulng.rsconfcolalign msgid "Align" msgstr "Zarovnať" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nadpis" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Vymazať" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Detaily položky" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Presunúť" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Šírka" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prispôsobiť stĺpec" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Nastaviť priradenie súborov" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potvrdzovanie príkazového riadku a parametrov" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopírovanie (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Tmavý režim" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Automaticky;Povolené;Zakázané" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importovaný DC panel nástrojov" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importovaný TC panel nástrojov" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Pridá: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Porovnávam..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Odstráni: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Vybrané dva súbory sú rovnaké!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Zhoduje sa: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Upraví: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kódovanie" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Ukončenia riadkov" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Text je rovnaký, ale sú použité tieto možnosti:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Text je rovnaký, ale súbory sa nezhodujú!\n" "Boli zistené tieto rozdiely:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Pr&erušiť" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Všetko" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Pripojiť" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomaticky premenovať zdrojové súbory" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Automaticky premenovať cieľové súbory" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Zrušiť" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Porovnať podľa &obsahu" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Pokračovať" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Zlúčiť" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Zlúčiť všetko" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Ukončiť program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "&Ignorovať" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignorovať všetko" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nie" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Nie je" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Iné" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepísať" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepísať &Všetko" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepísať všetko väčšie" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepísať Všetko Staršie" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepísať všetko menšie" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Pr&emenovať" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Obnoviť" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Znovu" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Ako adminstrátor" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Pre&skočiť" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Pres&kočiť Všetko" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Odomknúť" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Áno" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopírovať súbor(y)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Presunúť súbor(y)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauza" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Štart" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Rad" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Rýchlosť %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Rýchlosť %s/s, zostávajúci čas %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Formát rozšíreného textu;HTML formát;Unicode formát;Formát jednoduchého textu" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indikátor Voľného Miesta na Disku" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez označenia>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<žiadne médium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interný editor Double Commanderu." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ísť na riadok:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Prejsť na riadok" #: ulng.rseditnewfile msgid "new.txt" msgstr "nový.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Meno súboru:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otvoriť súbor" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vzad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Hľadanie" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "V&pred" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Nahradiť" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "s externým editorom" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "s interným editorom" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Spustiť cez shell" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Spustiť v termináli a zavrieť" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Spustiť v termináli a nechať otvorené" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" nebola nájdená v riadku %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Pred príkazom \"%s\" nie je definované žiadne rozšírenie. Bude ignorované." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Ľava;Prava;Aktívnych;Neaktívnych;Oboch;Žiadnej" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nie;Áno" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportované_z_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Opýtať sa;Prepísať;Preskočiť" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Opýtať sa;Zlúčiť;Preskočiť" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Opýtať sa;Prepísať;Prepísať staršie;Preskočiť" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Opýtať sa;Už nenastavovať;Ignorovať chyby" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Akékoľvek súbory" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Konfiguračné súbory archivátora" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Súbory pomoci DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Súbory rýchlych priečinkov" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Spustiteľné súbory" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Konfiguračné súbory .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Staršie súbory DC .tab" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Súbory knižnice" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Súbory modulu" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programy a knižnice" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Filter" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Súbory panela nástrojov TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Súbory panela nástrojov DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Konfiguračné súbory .xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definovať šablónu" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s úrovní" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "všetko (nelimitovaná hĺbka)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "len aktuálny priečinok" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Priečinok %s neexistuje!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Nájdené: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Uložiť vyhľadávaciu šablónu" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Názov šablóny:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Prehľadané: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Prehľadávam" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Hľadať súbory" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Čas skenovania: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začať v" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Písmo &terminálu" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Písmo editora" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Písmo funkčných tlačidiel" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Písmo záznamu" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Hlavné písmo" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Písmo cesty" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Písmo výsledkov vyhľadávania" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Písmo stavového riadku" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Písmo stromového zobrazenia" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Písmo prehliadača" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Písmo prehliadača kníh" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Voľných %s z %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "Voľné miesto %s" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Dátum/čas posledného prístupu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atribúty" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Komentár" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Skomprimovaná veľkosť" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Dátum/čas vytvoeenia" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Prípona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Zmeniť dátum/čas" #: ulng.rsfunclinkto msgid "Link to" msgstr "Odkaz na" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Dátum/čas zmeny" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Meno" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Meno bez prípony" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlastník" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cesta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Veľkosť" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Pôvodná cesta" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Chyba pri vytváraní hardlinku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "žiadne;Názov, a-z;Názov, z-a;Príp., a-z;Príp., z-a;Veľkosť 9-0;Veľkosť 0-9;Dátum 9-0;Dátum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Varovanie! Pri obnove záložného súboru .hotlist sa vymaže existujúci zoznam, ktorý sa nahradí importovaným.\n" "\n" "Ste si istí, že chcete pokračovať?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Dialód kopírovania/presunu" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Porovnávač" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Upraviť dialógové okno komentára" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Hľadať súbory" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hlavný" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Hromadné premenovanie" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synchronizovať priečinky" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Prehliadač" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Nastavenie s týmto názvom už existuje.\n" "Chcete ho prepísať?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Naozaj chcete obnoviť predvolené nastavenie?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Naozaj chcete vymazať nastavenie \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kópia %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Zadajte váš nový názov" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Musíte ponechať aspoň jeden súbor skratiek." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nový názov" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" nastavenie bola upravené.\n" "Chcete ho teraz uložiť?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Žiadna skratka pomocou \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Podľa názvu príkazu;Podľa kláv. skratky (zoskupené);Podľa kláv. skratky (po riadkoch)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Nie je možné nájsť odkaz na predvolený bar súbor" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Zoznam okien \"Nájsť súbory\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska zrušenia výberu" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska výberu" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Vstupná maska:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Zobrazenie stĺpcov s týmto názvom už existuje." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Ak chcete zmeniť aktuálne zobrazenie upravovaných stĺpcov, ULOŽTE, SKOPÍRUJTE alebo VYMAŽTE aktuálny upravovaný stĺpec" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Konfigurovať vlastné stĺpce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Zadajte názov nového vlastného stĺpca" #: ulng.rsmenumacosservices msgid "Services" msgstr "Služby" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akcie" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Predvolené>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Osmičkové" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Vytvoriť odkaz..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odpojiť sieťový priečinok..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Upraviť" #: ulng.rsmnueject msgid "Eject" msgstr "Vysunúť" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Rozbaliť sem..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Namapovať sieťovú jednotku..." #: ulng.rsmnumount msgid "Mount" msgstr "Pripojiť" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nový" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nie je dostupné žiadne médium" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvoriť" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otvoriť s" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Iné ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Zbaliť sem..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Obnoviť" #: ulng.rsmnusortby msgid "Sort by" msgstr "Zoradiť podľa" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odpojiť" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Zobraziť" #: ulng.rsmsgaccount msgid "Account:" msgstr "Účet:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Všetky interné príkazy Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Popis: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ďalšie parametre pre príkazový riadok archivátora:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Chcete uzavrieť medzi úvodzovky?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Zlé CRC32 pre výsledný súbor:\n" "\"%s\"\n" "\n" "Chcete si aj tak ponechať výsledný poškodený súbor?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Ste si istí, že chcete túto operáciu zrušiť?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nedá sa kopírovať/presunúť súbor \"%s\" sám na seba!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Nedá sa kopírovať špeciálny súbor %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Nemôžem vymazať priečinok %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Nedá sa prepísať priečinok \"%s\" s ne-priečinkom \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Zmena priečinka na [%s] zlyhala!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Odstrániť všetky neaktívne karty?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Karta (%s) je uzamknutá! Aj tak zavrieť?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Potvrdenie parametra" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Skutočne chcete skončiť?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Súbor %s sa zmenil. Chcete ho skopírovať späť?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Nepodarilo sa skopírovať späť - chcete ponechať zmenený súbor?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopírovať %d vybraných súborov/zložek?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopírovať vybrané \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Vytvoriť nový typ súboru \"%s files\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Zadajte umiestnenie a názov súboru, kam uložiť súbor panela DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Vlastná akcia" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Vymazať čiastočne skopírovaný súbor?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Vymazať %d vybrané súbory / priečinky?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Vymazať %d vybraných súborov/priečinkov do koša?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Vymazať vybrané \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Presunúť vybrané \"%s\" do koša?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nedá sa vymazať do koša! Vymazať priamo?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nie je dostupný" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Zadajte vlastný názov akcie:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Zadať príponu súboru:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Zadajte názov:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Zadajte názov nového typu súboru pre vytvorenie prípony \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC chyba (kontrolný súčet nesúhlasí)" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dáta sú zlé" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nedá sa spojiť so serverom: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nedá sa kopírovať súbor %s do %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Nedá sa presunúť priečinok %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Nedá sa presunúť súbor %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Už existuje priečinok s menom \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Dátum %s nie je podporovaný" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Priečinok %s existuje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Operácia prerušená používateľom" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Chyba pri uzatváraní súboru" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nedá sa vytvoriť súbor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V archíve nie sú žiadne ďalšie súbory" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nedá sa otvoriť existujúci súbor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Chyba pri čítaní súboru" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Chyba pri zápise do súboru" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Nedá sa vytvoriť priečinok %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Neplatný odkaz" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Neboli nájdené žiadne súbory" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nedostatok pamäti" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcia nie je podporovaná!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Chyba v príkaze kontextového menu" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Chyba pri načítavaní konfigurácie" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaktická chyba v regulárnom výraze!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nedá sa premenovať súbor %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nedá sa uložiť priradenie súboru!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Súbor sa nedá uložiť" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nedajú sa nastaviť atribúty pre \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nedá sa nastaviť dátum/čas pre \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nemôžem nastaviť majiteľa/skupinu pre \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Nedajú sa nastaviť povolenia pre \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Nedajú sa nastaviť rozšírené atribúty pre \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer je príliš malý" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Príliš mnoho súborov pre kompresiu" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Neznámy formát archívu" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Spustiteľný súbor: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Stav ukončenia:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Ste si istí, že chcete odstrániť všetky položky zoznamu Obľúbených kariet? (Túto akciu nie je možné vrátiť späť!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Potiahnite sem ďalšie položky" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Zadajte názov tejto novej Obľúbenej karty:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Uloženie novej položky Obľúbené karty" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Počet úspešne exportovaných obľúbených kariet: %d z %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Predvolené dodatočné nastavenie pre uloženie histórie priečinkov pre nové obľúbené karty:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Počet úspešne importovaných súborov: %d z %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Staršie karty boli importované" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Vyberte súbor(y) .tab, ktoré chcete importovať (môže ich byť viac ako jeden!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Posledná úprava obľúbených kariet je ešte uložená. Chcete ju pred pokračovaním uložiť?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Ukladať históriu priečinkov pomocou obľúbených kariet:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Názov podponuky" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Týmto sa načítajú obľúbené karty: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Uloženie aktuálnych kariet na existujúcu položku Obľúbené karty" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Súbor %s bol zmenený, uložiť?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajtov, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepísať:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Súbor %s existuje, prepísať?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "So súborom:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Súbor \"%s\" nebol nájdený." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Sú aktívne súborové operácie" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Niektoré súborové operácie ešte neboli dokončené. Ukončenie Double Commanderu môže spôsobiť stratu dát." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Dĺžka cieľového názvu (%d) je viac ako %d znakov!\n" "%s\n" "Väčšina programov nebude môcť pristupovať k súboru/priečinku s takým dlhým názvom!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Súbor %s označený ako iba na čítanie/skrytý/systémový! Vymazať ho?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Ste si istí, že chcete znovu načítať aktuálny súbor a stratiť zmeny?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Veľkosť \"%s\" je príliš veľká pro cieľový súborový systém!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Priečinok %s existuje, prepísať?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Nasledovať symbolický odkaz \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Formát textu na importovanie" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Pridať %d vybraných priečinkov" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Pridať vybraný priečinok: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Pridať aktuálny priečinok: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Vykonať príkaz" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Nastavenie Rýchlych priečinkov" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Ste si istí, že chcete odstrániť všetky položky zoznamu Rýchlych priečinkov? (Túto akciu nie je možné vrátiť späť!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Tým sa vykoná nasledujúci príkaz:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Toto je rýchly priečinok s názvom " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Týmto sa aktívny rám zmení na nasledujúcu cestu:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "A neaktívny rám sa zmení na nasledujúcu cestu:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Chyba pri zálohovaní záznamov..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Chyba pri exporte záznamov..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportovať všetko!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportovať zoznam rýchlych priečinkov - Vyberte položky, ktoré chcete exportovať" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportovať vyznačené" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importovať všetko!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importovať zoznam rýchlych priečinkov - Vyberte položky, ktoré chcete importovať" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Import vybraný" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Cesta:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Nájsť \".hotlist\" súbor na importovanie" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Názov rýchleho priečinka" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Počet nových záznamov: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nič nebolo vybrané na exportovanie!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Cesta rýchleho priečinka" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Znovu pridať vybraný priečinok: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Znovu pridať aktuálny priečinok: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Zadajte umiestnenie a názov súboru priečinku Rýchleho priečinka, ktorý chcete obnoviť" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Príkaz:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(koniec podponuky)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Názov ponuky:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Meno:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(oddelovač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Názov podponuky" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cieľ Rýchleho priečinka" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Určite, či sa má aktívny rám po zmene priečinku zoradiť v určenom poradí" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Určite, či chcete, aby sa neaktívny rám po zmene priečinka zoradil v určenom poradí" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Niektoré funkcie na výber vhodnej cesty relatívnej, absolútnej, špeciálnych priečinkov okien atď." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Celkový počet uložených záznamov: %d\n" "\n" "Názov záložného súboru: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Celkový počet exportovaných položiek: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Chcete odstrániť všetky prvky vo vnútri podponuky [%s]?\n" "Odpoveďou NIE sa vymažú len ohraničenia menu, ale prvok vnútri podponuky zostane zachovaný." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Zadajte umiestnenie a názov súboru pre uloženie súboru Rýchleho priečinka" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Nesprávna výsledná dĺžka súboru pre súbor : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Vložte prosím ďalší disk alebo niečo podobné.\n" "\n" "Je to preto, aby sa umožnil zápis tohto súboru:\n" "\"%s\"\n" "\n" "Počet bajtov, ktoré je ešte potrebné zapísať: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Chyba v príkazovom riadku" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neplatné meno súboru" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Nesprávny formát konfiguračného súboru" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Neplatné hexadecimálne číslo: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Nesprávna cesta" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Cesta %s obsahuje zakázané znaky." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Toto nie je platný zásuvný modul!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Tento zásuvný modul je vytvorený pre Double Commander pre %s.%s Nemôže fungovať s Double Commander pre %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Nesprávne úvodzovky" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neplatný výber." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Nahrávam zoznam súborov..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Vyhľadať konfiguračný súbor TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Vyhľadať spustiteľný súbor TC (totalcmd.exe alebo totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopírovať súbor %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Odstrániť súbor %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Chyba: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Spustiť externý" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Výsledok externý" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Rozbaliť súbor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Vytvoriť odkaz %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Vytvoriť priečinok %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Presunúť súbor %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Komprimovať do súboru %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Vypnutie programu" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Štart programu" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Odstrániť priečinok %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Vytvoriť symlink %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testovať integritu súboru %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Bezpečne vymazať súbor %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Bezpečne vymazať priečinok %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hlavné heslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prosím, zadajte hlavné heslo:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nový súbor" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ďalší zväzok bude rozbalený" #: ulng.rsmsgnofiles msgid "No files" msgstr "Žiadne súbory" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nie sú vybrané žiadne súbory." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nie je dostatok voľného miesta na cieľovom disku! Pokračovať?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nie je dostatok voľného miesta na cieľovom disku! Opakovať?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nedá sa vymazať súbor %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nie je zavedené." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objekt neexistuje!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Akciu nemožno dokončiť, pretože súbor je otvorený v inom programe:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Nižšie je ukážka. Posunutím kurzora a výberom súborov môžete okamžite získať skutočný vzhľad a dojem z rôznych nastavení." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Heslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Heslá sú rozdielne!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Prosím, zadejte heslo:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Heslo (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prosím, znova zadajte heslo na kontrolu:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Vymazať %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predvoľba \"%s\" už existuje. Nahradiť?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Naozaj chcete odstrániť nastavenie \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problém s vykonaním príkazu (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Názov súboru pre vysadený text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Prosím, sprístupnite tento súbor. Opakovať pokus?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Zadajte nový názov pre túto Obľúbenú kartu" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Zadajte nový názov pre túto ponuku" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Premenovať/presunúť %d vybraných súborov/zložek?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Premenovať/presunúť vybrané \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Chcete nahradiť tento text?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Prosím, na uplatnenie zmien reštartujte program" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "CHYBA: Problém s načítaním súboru knižnice Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Vyberte, ku ktorému typu súboru sa má pridať prípona \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Vybrané: %s z %s, súbory: %d z %d, priečinky: %d of %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Vybrať spustiteľný súbor pre" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Prosím, vyberte iba súbory s kontrolným súčtom!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prosím, vyberte umiestnenie ďalšieho zväzku" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Nastaviť názov zväzku" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Špeciálne priečinky" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Pridať cestu z aktívneho okna" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Pridať cestu z neaktívneho okna" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Prehľadávať a použiť vybranú cestu" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Použiť premennú prostredia..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Prejsť na špeciálnu cestu Double Commander-a..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Prejsť na premennú prostredia..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Prejsť na špeciálny priečinok Windowsu..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Prejsť na špeciálny priečinok Windowsu (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Urobiť relatívnu cestu k rýchlemu priečinku" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Urobiť cestu absolútnou" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Urobiť relatívnu k špeciálnej ceste Double Commandera..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Urobiť relatívnu k premennej prostredia..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Urobiť relatívnou k špeciálnemu priečinku systému Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Urobiť relatívnou k inému špeciálnemu priečinku systému Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Použiť špeciálnu cestu Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Použiť cestu rýchleho priečinka" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Použiť iný špeciálny priečinok Windowsu..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Použiť špeciálny priečinok Windowsu (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Táto karta (%s) je uzamknutá! Otvoriť priečinok na inej karte?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Premenovať kartu" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nové meno karty:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cieľová cesta:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Chyba! Nie je možné nájsť konfiguračný súbor TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Chyba! Nie je možné nájsť spustiteľný súbor konfigurácie TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Chyba! TC je stále spustený, ale pre túto operáciu by mal byť zatvorený.\n" "Zatvorte ho a stlačte tlačidlo OK alebo stlačte tlačidlo ZRUŠIŤ na prerušenie." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Chyba! Nie je možné nájsť požadovaný výstupný priečinok panela nástrojov TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Zadajte umiestnenie a názov súboru pre uloženie súboru TC panela" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Vstavané okno terminálu je vypnuté. Chcete ho povoliť?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "UPOZORNENIE: Ukončenie procesu môže spôsobiť nežiaduce výsledky vrátane straty údajov a nestability systému. Proces pred ukončením nedostane možnosť uložiť svoj stav alebo údaje. Ste si istí, že chcete proces ukončiť?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Chcete otestovať vybrané archívy?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" je teraz v schránke" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Prípona vybraného súboru nepatrí medzi rozpoznané typy súborov" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Vyhľadať súbor „.toolbar“, ktorý chcete importovať" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Vyhľadať súbor „.BAR“, ktorý chcete importovať" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Zadajte umiestnenie a názov panela, ktorý chcete obnoviť" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Uložené!\n" "Názov súboru panela nástrojov: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Bolo vybraných príliš veľa súborov." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Neurčené" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "CHYBA: Neočakávané použitie ponuky Stromové zobrazenie!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<NO EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<NO NAME>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Meno používateľa:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Meno používateľa (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "OVERENIE:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Chcete overiť vybrané kontrolné súčty?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Cieľový súbor je poškodený, kontrolný súčet sa nezhoduje!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Názov zväzku:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prosím, zadajte veľkosť zväzku:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Chcete nakonfigurovať umiestnenie knižnice Lua?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Bezpečne odstrániť %d vybraných súborov/priečinkov?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Bezpečne odstrániť vybrané \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "s" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Nesprávne heslo!\n" "Prosím skúste to znova!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automaticky premenovať na \"nazov (1).ext\", \"nazov (2).ext\" atď.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Počítadlo" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dátum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Názov predvoľby" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Definovať názov premennej" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Definovať hodnotu premennej" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Zadať názov premennej" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Zadať hodnotu pre premennú \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Ignorovať, iba uložiť ako [Posledný]; Vyzvať používateľa, aby potvrdil, či uložiť; Uložiť automaticky" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Prípona" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Meno" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez zmeny;VEĽKÉ;malé;Prvý znak veľkým;Prvý Znak Každého Slova Veľkým;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Posledné použité]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Posledné masky pod predvoľbou [Posledná];Posledná predvoľba;Nové čerstvé masky" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Hromadné premenovanie" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Znak na pozícii x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Znaky od pozície x do y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Úplný dátum" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Úplný čas" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Počítadlo" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Deň" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Deň (2 číslice)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Deň týždňa (skrátene, t.j. \"pon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Deň týždňa (celý, t.j. \"pondelok\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Prípona" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Úplný názov súboru s cestou a príponou" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Dokončiť názov súboru, znak z pozície x do y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hodina" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Hodina (2 číslice)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minúta" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minúta (2 číslice)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mesiac" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mesiac (2 číslice)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Meno mesiaca (krátko, t.j. \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Meno mesiaca (celé, t.j. \"január\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Meno" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Nadradený priečinok(e)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekunda" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekundy (2 číslice)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Premenná za behu" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Rok (2 číslice)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Rok (4 číslice)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Zásuvné moduly" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Uložiť predvoľbu ako" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Názov predvoľby už existuje. Nahradiť?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Zadajte názov novej predvoľby" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" predvoľba bola upravená.\n" "Chcete ju teraz uložiť?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Zoradenie predvolieb" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Čas" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Varovanie, duplicitné názvy!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Súbor obsahuje nesprávny počet riadkov: %d, malo by byť %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Ponechať;Vyčistiť;Opýtať sa" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Žiadny ekvivalentný interný príkaz" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Ľutujeme, zatiaľ žiadne okno „Nájsť súbory“..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Je mi ľúto, ale žiadne iné okno \"Nájsť súbory\", ktoré by sa dalo zavrieť a uvoľniť z pamäte..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Vývoj" #: ulng.rsopenwitheducation msgid "Education" msgstr "Vzdelávanie" #: ulng.rsopenwithgames msgid "Games" msgstr "Hry" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimédiá" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Sieť" #: ulng.rsopenwithoffice msgid "Office" msgstr "Kancelára" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Ostatné" #: ulng.rsopenwithscience msgid "Science" msgstr "Veda" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Nastavenia" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Systém" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Príslušenstvo" #: ulng.rsoperaborted msgid "Aborted" msgstr "Prerušené" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Počítam kontrolný súčet" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Počítam kontrolný súčet v \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Počítam kontrolný súčet \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Počíta sa" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Počíta sa \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Pripájam sa" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Pripájam súbory v \"%s\" do \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopírujem" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírujem z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírujem \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváram priečinok" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Vytváram priečinok \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Vymazávanie" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Mazanie v \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Mazanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Vykonávam" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Vykonávam \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbaľujem" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Rozbaľujem z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Ukončené" #: ulng.rsoperlisting msgid "Listing" msgstr "Výpis" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Výpis \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Presúvam" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Presúvam z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Presúvam \"%s\" na \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nespustené" #: ulng.rsoperpacking msgid "Packing" msgstr "Komprimuje sa" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Komprimuje sa z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Komprimuje sa \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pozastavené" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pozastavuje sa" #: ulng.rsoperrunning msgid "Running" msgstr "Beží" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavuje sa vlastníctvo" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Nastavuje sa vlastníctvo v \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Nastavuje sa vlastníctvo \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Delím" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Delím \"%s\" na \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Spúšťam" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zastavené" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zastavujem" #: ulng.rsopertesting msgid "Testing" msgstr "Testovanie" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Testovanie v \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Testovanie \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Overovanie kontrolného súčtu" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Overovanie kontrolného súčtu v \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Overovanie kontrolného súčtu \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čaká sa na prístup k zdroju súbora" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čaká sa na reakciu používateľa" #: ulng.rsoperwiping msgid "Wiping" msgstr "Bezpečné mazanie" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Bezpečné mazanie v \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Bezpečné mazanie \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Pracuje sa" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Pridať na začiatku;Pridať na konci;Inteligentné pridanie" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Pridanie nového typu súboru pomoci" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Ak chcete zmeniť aktuálnu konfiguráciu archívu na úpravu, použite možnosť VYKONAŤ alebo VYMAZAŤ aktuálne upravovaného" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Závisí od režimu, dodatočný príkaz" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Pridať ak nie je prázdne" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Súbor archívu (dlhý názov)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Vybrať spustiteľný súbor archivátora" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Súbor archívu (krátky názov)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Zmeniť kódovanie zoznamu archivátorov" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Naozaj chcete vymazať: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Exportované nastavenie archivátora" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "úroveň chyby" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Exportovať nastavenie archivátora" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportovanie %d prvkov zo súboru \"%s\" bolo dokončené." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Vyberte ten (tie), ktoré chcete exportovať" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Zoznam súborov (dlhé názvy)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Zoznam súborov (krátke názvy)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importovať nastavenie archivátora" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importovanie %d prvkov zo súboru \"%s\" bolo dokončené." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Vyberte súbor na import konfigurácie archivátora" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Vyberte ten (tie), ktoré chcete importovať" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Použiť iba názov, bez cesty" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Použiť iba cestu, bez názvu" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Program archívu (dlhý názov)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Program archívu (krátky názov)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Citovať všetky názvy" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Citovať názvy s medzerami" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Názov jedného súboru na spracovanie" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Cieľový podpriečinok" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Použiť ANSI kódovanie" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Použiť UTF8 kódovanie" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Zadajte umiestnenie a názov súboru pre uloženie konfigurácie archivátora" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Názov typu archívu:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Asociovať zásuvný modul \"%s\" s:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Prvý;Posledný;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klasické, staršie poradie;Abecedné poradie (ale jazyk stále na prvom mieste)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Plné rozbalenie;Plné zbalenie" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktívny panel okna vľavo, neaktívny vpravo (staršie);Ľavý panel okna vľavo, pravý vpravo" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Zadajte príponu" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Pridať na začiatok;Pridať na koniec;Abecedné zoradenie" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "oddelenom okne;minimalizovanom oddelenom okne;panely operácií" #: ulng.rsoptfilesizefloat msgid "float" msgstr "pohyblivý" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Skratka %s pre cm_Delete bude zaregistrovaná, takže môže byť použitá na vrátenie tohto nastavenia." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Pridať skratku pre %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Pridať skratku" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nemôžem zmeniť skratku" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Zmeniť skratku" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Príkaz" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Skratka %s pre cm_Delete má parameter, ktorý prepíše toto nastavenie. Chceš tento parameter na použitie s globálnym nastavením?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Skratka %s pre cm_Delete musí mať parameter zmenený, aby súhlasil so skratkou %s. Chceš ho zmeniť?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Popis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Zmeniť skratku pre %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Opraviť parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Klávesa" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Klávesové skratky" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<žiadne>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Nastaviť skratku pre vymazanie súboru" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Aby toto nastavenie fungovalo so skratkou %s, musí byť skratka %s priradená k cm_Delete, ale už je priradená k %s. Chcete to zmeniť?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Skratka %s pre cm_Delete je postupnosť skratiek, pre ktorú klávesa so spätným Shiftom nemôže byť priradená. Toto nastavenie nemusí fungovať." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Klávesa sa už používa" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Klávesová skratka %s sa už používa." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Zmeniť na %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "použité pre %s v %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "použité pre tento príkaz, ale s inými parametrami" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archivátory" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatická obnova" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Správanie" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Jednoduché zobrazenie" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farby" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Stĺpce" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Nastavenie" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Vlastné stĺpce" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Rýchle priečinky" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Pokročilé Rýchle priečinky" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Ťahať & pustiť" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tlačidlo zoznamu diskov" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Obľúbené karty" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Pokročilé Asociácie súborov" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asociácie súborov" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nový" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Súborové operácie" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panely súborov" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Vyhľadávanie súborov" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Náhľad súborov" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Pokročilé zobrazenie súborov" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy súborov" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Karty priečinkov" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Pokročilé nastavenia pre Karty priečinkov" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Písma" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Zvýrazňovače" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Klávesové skratky" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Zoznam ignorovaných" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klávesy" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jazyk" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Rozmiestnenie" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Záznam" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Rôzne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Myš" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Hromadné premenovanie" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Nastavenia sa zmenili v \"%s\"\n" "\n" "Chcete uložiť zmeny?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Zásuvné moduly" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Rýchle hľadanie/filter" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Panel nástrojov" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Pokročilý panel nástrojov" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Stredný Panel nástrojov" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Nástroje" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Bublinová pomoc" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Ponuka stromového zobrazenia" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Farby ponuky v stromovom zobrazení" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Žiadny;Príkaz;Rýchle hľadanie;Rýchly filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ľavé tlačidlo;Pravé tlačidlo;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na vrch zoznamu súborov;Po priečinkoch (ak sú priečinky zoradené pred súbormi);Na vytriedenej pozícii;na spodku zoznamu súborov" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Personalizovaný pohyblivý;Personalizovaný bajt;Personalizovaný kilobaj;Personalizovaný megabajt;Personalizovaný gigabajt;Personalizovaný terabajt" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Zásuvný modul %s je už priradený nasledujúcim príponám:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Zakázať" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Povoliť" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktívne" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Popis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Názov súboru" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Podľa prípony" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Podľa modulu" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Meno" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Triedenie zásuvných modulov WCX je možné len pri zobrazovaní zásuvných modulov podľa prípon!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrované pre" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Vyberte súbor knižnice Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Premenovanie typu súboru s pomocou" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Brať do úvahy;&Nebrať do úvahy" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Súbory;Priečinky;Súbory a Priečinky" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Skryť filter panelu, keď nie je aktívny;Ponechať zmeny uloženia nastavení pre ďalšiu reláciu" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nerozlišovať veľkosť písmen;Podľa miestneho nastavenia (aAbBcC);Najprv veľké, potom malé písmená (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "triediť podľa mena a zobraziť ako prvé;triediť ako súbory a zobraziť ako prvé;triediť ako súbory" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Abecedne, s ohľadom na diakritiku;Abecedne s radením špeciálnych znakov;Prirodzené triedenie: abecedne a číselne;Prirodzené s radením špeciálnych znakov" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Hore;Dole;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Odd&eľovač;Vnúto&rný príkaz;E&xterný príkaz;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Ak chcete zmeniť konfiguráciu typu súboru pomoci, aktuálnu úpravu POUŽITE alebo VYMAŽTE" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Názov typu súboru pomoci:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" už existuje!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Naozaj chcete vymazať: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Exportovaná konfigurácia typu súboru s pomocou" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Exportovať konfiguráciu typu súboru s pomocou" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportovanie %d prvkov zo súboru \"%s\" bolo dokončené." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Vyberte ten (tie), ktoré chcete exportovať" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importovať konfiguráciu typu súboru s pomocou" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importovanie %d prvkov zo súboru \"%s\" bolo dokončené." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Vyberte súbor na import konfigurácie typu súboru s pomocou" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Vyberte ten (tie), ktoré chcete importovať" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Zadajte umiestnenie a názov súboru pre uloženie konfigurácie súboru bublinkovej pomoci" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Názov typu súboru s pomocou" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC staršia verzia - Kopírovať (x) nazovsuboru.ext;Windows - nazovsuboru (x).ext;Iné - nazovsuboru(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "nemeniť pozíciu;použiť rovnaké nastavenia ako pre nové súbory;Na triedenú pozíciu" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "S úplnou absolútnou cestou;Cesta relatívna k %COMMANDER_PATH%;Relatívna k nasledujúcej" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "obsahuje(rozlišovanie veľkosti písmen)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "obsahuje" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(rozlišovanie veľkých a malých písmen)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Pole \"%s\" nebolo nájdené!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!contains(rozlišovanie veľkých a malých písmen)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!obsahuje" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(rozlišovanie veľkých a malých písmen)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Zásuvný modul \"%s\" nebol nájdený!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Jednotka \"%s\" nebola nájdená pre pole \"%s\" !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Súbory: %d, priečinky: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nedajú sa zmeniť prístupové práva pre \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nedá sa zmeniť vlastník pre \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Súbor" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Priečinok" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Pomenovaná rúra" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Špeciálne blokové zariadenie" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Špeciálne znakové zariadenie" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Zástupca" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Neznámy typ" #: ulng.rssearchresult msgid "Search result" msgstr "Výsledok hľadania" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Hľadanie" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<šablóna bez názvu>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Vyhľadávanie súborov pomocou zásuvného modulu DSX už prebieha.\n" "Pred spustením nového vyhľadávania musíme toto vyhľadávanie dokončiť." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Vyhľadávanie súborov pomocou zásuvného modulu WDX už prebieha.\n" "Pred spustením nového vyhľadávania musíme toto vyhľadávanie dokončiť." #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrať priečinok" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Najnovší;Najstarší;Najväčší;Najmenší;Prvý v skupine;Posledný v skupine" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Vyberte svoje okno" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Ukáže &sa pomoc pre %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Všetko" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategória" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Stĺpec" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Príkaz" #: ulng.rssimpleworderror msgid "Error" msgstr "Chyba" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Zlyhalo!" #: ulng.rssimplewordfalse msgid "False" msgstr "Nepravda" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Názov súboru" #: ulng.rssimplewordfiles msgid "files" msgstr "súbory" #: ulng.rssimplewordletter msgid "Letter" msgstr "Letter" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parameter" #: ulng.rssimplewordresult msgid "Result" msgstr "Výsledok" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Úspech!" #: ulng.rssimplewordtrue msgid "True" msgstr "Pravda" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Premenná" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Pracovný priečinok" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtov" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajtov" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajtov" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajtov" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajtov" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Súborov: %d, Zložiek: %d, Veľkosť: %s (%s bajtov)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nedá sa vytvoriť cieľový priečinok!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nesprávný formát veľkosti súboru!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nedá sa rozdeliť súbor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Počet častí je väčší ako 100! Pokračovať?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatické;1457664B - 3.5\" Vysoká hustota 1.44M;1213952B - 5.25\" Vysoká hustota 1.2M;730112B - 3.5\" Dvojitá hustota 720K;362496B - 5.25\" Dvojitá hustota 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Zvoľte priečinok:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Iba náhľad" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Iné" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Poznámka" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Ploché" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Obmedzené" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Jednoduché" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Vynimočný" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Zázračný" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Úžasný" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Vyberte váš priečinok z histórie priečinkov" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Vyberte vaše obľúbené karty:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Vyberte svoj príkaz z Histórie príkazového riadku" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Vyberte svoju akciu z hlavnej ponuky" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Vyberte si akciu z lišty Hlavných nástrojov" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Vyberte váš priečinok z Rýchlych priečinkov:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Vyberte svoj priečinok z histórie zobrazenia súborov" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Vyberte váš súbor alebo váš priečinok" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Chyba pri vytváraní zástupcu." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Predvolený text" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Čistý text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nespraviť nič;Zavrieť kartu;Prístup k obľúbeným kartám;Vyskakovacia ponuka kariet" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dní" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hodina(hodiny,hodín)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minúta(ty,t)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mesiac(e,ov)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunda(sekundy,sekúnd)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Týždeň(e,ov)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok(y,ov)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Premenovať obľúbené karty" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Podponuka Premenovať obľúbené karty" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Porovnávač" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Chyba otvorenia iných" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Chyba otvorenia editora" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Chyba otvorenia terminálu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Chyba otvorenia prehliadača" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Predvolené systémom;1 sek;2 sek;3 sek;5 sek;10 sek;30 sek;1 min;Nikdy neskryť" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Kombinovať DC a systémovú pomoc, najprv DC (staršie);Kombinovať DC a systémovú pomoc, najprv systémovú;Zobraziť pomoc DC, keď je to možné, a systémovú, keď nie;Zobraziť len pomoc DC;Zobraziť len systémovú pomoc" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Prehliadač" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prosím, založte do bug trackeru správu o tejto chybe s popisom, čo ste robili a s nasledujúcim súborom:%sStlačte %s pre pokračovanie alebo %s pre ukončenie programu." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Oba panely, z aktívneho do neaktívneho" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Oba panely, zľava doprava" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Cesta panela" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Každý názov uzavrite do zátvoriek alebo do toho, čo chcete" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Iba názov súboru, bez prípony" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Úplný názov súboru (cesta+názov súboru)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Pomoc s premennými \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Požiada používateľa o zadanie parametra s predvolenou navrhovanou hodnotou" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Posledný priečinok cesty k panelu" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Posledný priečinok cesty k súboru" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Ľavý panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Dočasný názov súboru zoznamu názvov súborov" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Dočasné pomenovanie zoznamu úplných názvov súborov (cesta+názov súboru)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Názvy súborov v zozname v UTF-16 s BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Názvy súborov v zozname v UTF-16 s BOM, v dvojitých úvodzovkách" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Názvy súborov v zozname v UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Názvy súborov v zozname v UTF-8, v dvojitých úvodzovkách" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Dočasné pomenovanie zoznamu názvov súborov s relatívnou cestou" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Iba príponu súboru" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Iba názov súboru" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Ďalší príklad toho, čo je možné" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Cesta bez koncového oddeľovača" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Odtiaľto až po koniec riadku je ukazovateľ percentuálnej premennej znak \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Vráti znak percenta" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Odtiaľto až po koniec riadku je ukazovateľ percentuálnej premennej znovu znakom \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Pred každý názov pridať \"-a \" alebo čo chcete" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Vyzvať používateľa na zadanie parametra;Navrhnutá predvolená hodnota]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Názov súboru s relatívnou cestou" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Pravý panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Úplná cesta k druhému vybranému súboru v pravom paneli" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Zobraziť príkaz pred vykonaním" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Jednoduchá správa]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Zobrazí jednoduchú správu" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktívny panel (zdroj)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Neaktívny panel (cieľ)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Názvy súborov sa budú odtiaľto citovať (predvolené)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Príkaz sa vykoná v termináli, ktorý zostane otvorený po ukončení" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Cesty budú mať koncový oddeľovač" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Názvy súborov sa nebudú odtiaľto citovať" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Príkaz sa vykoná v termináli, na konci sa zavrie" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Cesty nebudú mať koncové oddeľovače (predvolené)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Sieť" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Kôš" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interný prehliadač Double Commandera." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Zlá kvalita" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódovanie" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Typ obrázku" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nová veľkosť" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nebol nájdený!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Pero;Obdĺžnik;Elipsa" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "s externým prehliadačom" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "s interným prehliadačom" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Počet nahradení: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Žiadne nahradenie nebolo vykonané." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Žiadne nastavenie s názvom \"%s\"" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.ru.po�����������������������������������������������������������0000644�0001750�0000144�00001611421�15104114162�017301� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "POT-Creation-Date: 2023-12-31 21:15+0300\n" "PO-Revision-Date: 2024-01-05 00:03+0300\n" "Last-Translator: Alexander Koblov <alexx2000@mail.ru>\n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Русский\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Сравнение... %d%% (ESC для отмены)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Слева: Удалить файлы (%d шт.)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Справа: Удалить файлы (%d шт.)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Найдено файлов: %d (Одинаковых: %d, Различных: %d, Уникальных слева: %d, Уникальных справа: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Слева направо: Копируется файлов: %d, общий размер: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Справа налево: Копируется файлов: %d, общий размер: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Выбрать шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Проверять свобо&дное место" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Копировать атрибуты" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "К&опировать владельца" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Копировать права доступа" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Копировать дат&у/время" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Исп&равлять ссылки" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "С&бросить флаг \"Только для чтения\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Исключить пустые каталоги" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "С&ледовать ссылкам" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Р&езервировать место" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Копирование при записи" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Проверить после &завершения" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Что делать, когда не удаётся установить время файла, его атрибуты и т.д." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Использовать шаблон" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Если к&аталог существует" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Если &файл существует" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Если &нельзя устан. свойство" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<нет шаблона>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Копировать" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Сборка" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Фиксация" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашняя страница:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Ревизия" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Версия" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Сбросить" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Выбрать атрибуты" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Архивный" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "С&жатый" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Каталог" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Зашифрованный" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ск&рытый" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "&Только для чтения" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Разрежённ&ый" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закре&пляющий бит" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Ссы&лка" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "С&истемный" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Временны&й" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Атрибуты NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Основные атрибуты" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Как т&екст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Тест производительности" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Объём данных теста: %d Мб" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Хеш-функция" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Время (мс)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Скорость (Мб/с)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Посчитать контрольные суммы..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Открыть файл контрольной суммы после расчёта" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Д&ля каждого файла создать отдельный файл контрольной суммы" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "&Формат файла" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Сохранить файл(ы) контрольных сумм как:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Проверить контрольные суммы..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Кодировка" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Со&единиться" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Изменить" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Сетевые соединения" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Соединиться с:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&В очередь" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "О&пции" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Со&хранить по умолчанию" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Копировать файл(ы)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Новая очередь" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Очередь 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Очередь 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Очередь 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Очередь 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Очередь 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Сохранить описание" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Комментарий к файлу/папке" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Правка комментария к:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Кодировка:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "О программе" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Сравнить автоматически" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Бинарный режим" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Отмена" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Копировать блок направо" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Копировать блок направо" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Копировать блок налево" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Копировать блок налево" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "В&ырезать" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "&Вставить" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторить" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Повторить" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Выделить в&сё" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отменить" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Отменить" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Выход" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Найти..." #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Найти" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Найти далее" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Найти далее" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Найти предыдущее" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Найти предыдущее" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Заменить..." #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Заменить" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Первое отличие" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Первое отличие" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Перейти к строке..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Переход к строке" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Не учитывать регистр" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Не учитывать пробелы" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Синхронная прокрутка" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Последнее отличие" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Последнее отличие" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Разница строк" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Следующее отличие" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Следующее отличие" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Открыть слева..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Открыть справа..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Подсвечивать фон" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Предыдущее отличие" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Предыдущее отличие" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "П&ерезагрузить" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Перезагрузить" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Сохранить" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Сохранить" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Сохранить как..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Сохранить как..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Сохранить слева" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Сохранить слева" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Сохранить слева как..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Сохранить слева как..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Сохранить справа" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Сохранить справа" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Сохранить справа как..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Сохранить справа как..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Сравнить" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Сравнить" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Кодировка" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Кодировка" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Сравнить файлы" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "С&лева" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "С&права" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "Действия" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Настройки" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Добавить новое сочетание клавиш" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Удалить последнее сочетание клавиш из списка" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Выберите из списка оставшихся свободных доступных клавиш" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Только для этих элементов интерфейса" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Параметры (каждый в отдельной строке)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Сочетание клавиш:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "О программе..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Настройки" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Настройки" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Копировать" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "&Вырезать" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Вырезать" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Удалить" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Найти..." #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Найти" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Найти далее" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Найти далее" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Найти предыдущее" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Перейти к строке..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вст&авить" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Вставить" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "&Повторить" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Повторить" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Заменить..." #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Заменить" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "В&ыделить всё" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Выделить всё" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "&Отменить" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Отменить" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Закрыть" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Выход" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Создать" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Создать" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Открыть" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Открыть" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Перезагрузить" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Со&хранить" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Сохранить" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Сохранить &как..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Сохранить как..." #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Редактор" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Открыть как" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Сохранить как" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Подсветка &синтаксиса" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Конец строки" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "Многострочный &шаблон" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Учитывать регистр" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Искать от &курсора" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регулярные выражения" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "В в&ыделенном тексте" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Только слово &целиком" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Опции" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Заменить:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Н&айти:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Направление" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Выполнить для &всех текущих объектов" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Распаковать файлы" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Учитывать подкаталоги" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Распаковать каждый &архив в отдельный каталог (с именем архива)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Заменять существующие файлы" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "В &каталог:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Распаковать файлы по маске:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Пароль для зашифрованных файлов:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Подождите..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Имя файла:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Нажмите \"Закрыть\", когда временный файл можно будет удалить!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На панель" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Показать все" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Текущая операция:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "в:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закрепляющий бит" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "&Разрешить исполнять как программу" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "&Рекурсивно" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Содержит:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Создан:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Запуск:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путь:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Группа" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Доступ:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Изменён:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Статус:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Ссылки:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "MIME-тип:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Восьмеричный:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Владелец" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "На диске:" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. ссылка:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Имя" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Значение" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Плагины" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Закрыть" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Завершить" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Разблокировать" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Разблокировать все" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Разблокировать" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Дескриптор файла" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ИД процесса" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Исполняемый файл" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Отмена" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Остановить поиск или закрыть окно" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Закрыть" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Настройка горячих клавиш" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Пр&авка" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Фай&лы на панель" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Остановить поиск и закрыть окно" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Остановить и закрыть все другие окна \"Поиск файлов\"" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Пере&йти к файлу" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "С текстом" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Предыдущий поиск" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Н&овый поиск" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Новый поиск (очистить фильтры)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Перейти к вкладке \"Расширенный\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Перейти к вкладке \"Загрузить/Сохранить\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Перейти &на следующую вкладку" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Перейти к вкладке \"Плагины\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Перейти н&а предыдущую вкладку" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Перейти к вкладке \"Результаты\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Перейти к вкладке \"Стандартный\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Старт" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "П&росмотр" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавить" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Сохранить" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "З&агрузить" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Со&хранить" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Сох&ранить с \"Начинать с каталога\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "При нажатии сохраняется значение \"Начинать с каталога\". Используйте, если хотите начинать поиск только с определенного каталога" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Использовать шаблон" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Поиск файлов" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "С &учётом регистра" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Дата от:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Да&та до:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Р&азмер от:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Раз&мер до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Искать в ар&хивах" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Искать в файле &текст" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "С&ледовать ссылкам" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Файлы, &НЕ содержащие этот текст" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Н&е старше:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Офи&сные XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "В открытых вкладках" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Поис&к по части имени" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регулярное выражение" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "З&аменить текст" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Выделенные файлы и каталоги" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Регулярное &выражение" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Время от:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "В&ремя до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Использовать поисковый плагин:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "по содержимому" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "по хешу" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "по имени" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Поиск дубликатов:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "по размеру" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "&Шестнадцатеричное" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Перечислите через \";\" имена каталогов, которые должны быть исключены из поиска" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Перечислите через \";\" имена файлов, которые должны быть исключены из поиска" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Введите имя файла или несколько имён, разделяя символом \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагин" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Оператор" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Значение" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файлы" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "С текстом" #: tfrmfinddlg.lblattributes.caption msgctxt "tfrmfinddlg.lblattributes.caption" msgid "Attri&butes" msgstr "Атри&буты" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Ко&дировка:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Искл&ючить подкаталоги" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Исключить файлы:" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Искать &файлы:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Н&ачинать с каталога:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Глубина вло&женности подкаталогов:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Сохранённые &шаблоны поиска:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Действие" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Остановить и закрыть все другие окна" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Открыть в новой вкладке(ах)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Настройки" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Убрать из списка" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Результат" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Показать все найденные" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Правка" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Просмотр" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Вид" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Расширенный" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Шаблоны поиска" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Плагины" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Результаты" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Стандартный" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Найти" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Найти" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&Назад" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "С учётом &регистра" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Регулярные выражения" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Шестнадцатеричное" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Домен:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Пароль:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Имя пользователя:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Подключиться анонимно" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Подключиться как пользователь:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Создать жёсткую ссылку" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "На &что указывает" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Имя ссылки" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Импортировать все" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Импортировать выделенный" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Выделите записи для импорта" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "При выборе подменю будет выделено всё подменю" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Зажав клавишу Ctrl можно выделить сразу несколько записей" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Сборка" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Сохранить как..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Выделенный" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Имя &файла" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Вниз" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Вниз" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Уда&лить" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Удалить" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Вв&ерх" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Вверх" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&О программе..." #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Активировать вкладку по индексу" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Добавить имя файла в командную строку" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Новый экземпляр поиска..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Добавить путь и имя файла в командную строку" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Копировать путь в командную строку" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Добавить плагин" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Тест производительности" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Краткий" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Краткий вид" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Подсчитать &занимаемое место..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Сменить каталог" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Перейти в домашний каталог" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Перейти в родительский каталог" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Перейти в корневой каталог" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Посчитать &контрольные суммы..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Проверить ко&нтрольные суммы..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очистить файл протокола" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очистить окно протокола" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Закрыть &все вкладки" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Закрыть &дубликаты вкладок" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Закрыть вкладку" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Следующая командная строка" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Выбрать следующую команду в истории командной строки" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Предыдущая командная строка" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Выбрать предыдущую команду в истории командной строки" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Подробный" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Подробный вид" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Сравнить п&о содержимому" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Сравнить &каталоги" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Сравнить каталоги" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Настройка архиваторов" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Настройка избранных каталогов" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Настройка избранных вкладок" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Настройка вкладок папок" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Настройка горячих клавиш" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Настройка плагинов" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Сохранить позицию" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Со&хранить настройки" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Настройка поиска" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Панель инструментов..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Настройка всплывающих подсказок" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Настройка древовидного меню" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Настройка цветов древовидного меню" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показать контекстное меню" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Копировать" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Скопировать все вкладки на противоположную панель" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Копировать &содержимое всех колонок" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Копировать по&лные имена файлов" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Копировать имена фа&йлов в буфер" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Копировать в буфер имена с UNC-путём" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Копировать файлы без запроса подтверждения" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Копировать полный путь выделенного файла(ов) без конечного разделителя каталогов" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Копировать полный путь выделенного файла(ов)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Копировать в ту же панель" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Копировать" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Показать размеры все&х папок" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Вырезать" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Показать параметры команды" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Остановить и закрыть все окна" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "История каталогов" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Избранные каталоги" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Выполнить внутреннюю &команду..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Выбрать любую команду и выполнить её" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Правка" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Редактировать ко&мментарий..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Создать новый текстовый файл или открыть существующий" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Редактировать путь в заголовке панели" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "П&оменять панели местами" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Выполнить скрипт" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Р&аспаковать..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Настройка файловых &ассоциаций" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Объединить &файлы..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "С&войства файла..." #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Разрезать файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Показать все фа&йлы без подкаталогов" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "Показать все фа&йлы без подкаталогов (только в выделенном)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Перейти к командной строке" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Переключить фокус" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Переключиться на другую файловую панель" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Перейти в дерево каталогов" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Переключиться между списком файлов и деревом (если включено)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Поместить курсор на первую папку или файл в списке" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Поместить курсор на первый файл в списке" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Поместить курсор на последнюю папку или файл в списке" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Поместить курсор на последний файл в списке" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Поместить курсор на следующую папку или файл" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Поместить курсор на предыдущую папку или файл" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Создать &жёсткую ссылку..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Содержание" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Панели одна над другой" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Горячие клавиши" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Краткий вид в левой панели" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Подробный вид в левой панели" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Левая &= Правая" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Показать все фа&йлы без подкаталогов в левой панели" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Открыть список дисков слева" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Обра&тить порядок в левой панели" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Сортировать по &атрибутам в левой панели" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Сортировать по &дате в левой панели" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Сортировать по &расширению в левой панели" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Сортировать по &имени в левой панели" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Сортировать по &размеру в левой панели" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Просмотр эскизов в левой панели" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Загрузить вкладки из избранных вкладок" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Загрузить список" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Загрузить список файлов/папок из указанного текстового файла" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Загрузить выделение из &буфера" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Загрузить выделение из &файла..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Загрузить вкладки из файла" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Создать &каталог" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Выделить файлы по рас&ширению" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Выделить все файлы по текущему имени" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Выделить все файлы по текущему имени и расширению" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Выделить все с этим путём" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Инвертировать выделение" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Выделить все" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Снять выделение с группы..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Выделить &группу..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "С&нять выделение со всех" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Свернуть окно" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Переместить текущую вкладку влево" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Переместить текущую вкладку вправо" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Групповое &переименование" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Соединиться с сервером..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Ра&зорвать соединение" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Новое соединение..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Н&овая вкладка" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Загрузить следующие в списке избранные вкладки" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Переключиться на &следующую вкладку" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Открыть" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Попробовать открыть архив" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Открыть BAR-файл" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Открыть пап&ку в новой вкладке" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Открыть диск по индексу" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Откр&ыть список VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Фа&йловые операции" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Параметры..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Упаковать..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Установить позицию разделителя" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Вставить" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Загрузить предыдущие в списке избранные вкладки" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Переключиться на &предыдущую вкладку" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Быстрый фильтр" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Быстрый поиск" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Быстрый просмотр" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Обновить" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Перезагрузить последние загруженные избранные вкладки" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Переместить" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Переместить файлы без запроса подтверждения" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Переименовать" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Переи&меновать вкладку" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Пересохранить последние загруженные избранные вкладки" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Восс&тановить выделение" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Обра&тный порядок" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Краткий вид в правой панели" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Подробный вид в правой панели" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Правая &= Левая" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Показать все фа&йлы без подкаталогов в правой панели" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Открыть список дисков справа" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Обра&тить порядок в правой панели" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Сортировать по &атрибутам в правой панели" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Сортировать по &дате в правой панели" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Сортировать по &расширению в правой панели" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Сортировать по &имени в правой панели" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Сортировать по &размеру в правой панели" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Просмотр эскизов в правой панели" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Пуск &терминала" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Сохранить текущие как новые избранные вкладки" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Сохранить содержимое всех колонок в файл" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "С&охранить выделение" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Со&хранить выделение в файл..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Сохранить вкладки в файл" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Поиск..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Заблокировать все вкладки и открывать каталоги в новых" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Сделать все вкладки обычными" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Заблокировать все вкладки" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Заблокировать все вкладки с возможностью смены каталога" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Изменить атри&буты" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Заблокировать и открывать каталоги в &новых вкладках" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обычная вкладка" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Заблокировать вкладку" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Заблокировать с возможностью &смены каталога" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Открыть" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Открыть, используя системные ассоциации" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показать панель инструментов" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "История командной строки" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Меню" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "По&казать скрытые/системные файлы" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "Показать список вкладок" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "Показать список всех открытых вкладок" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Сортировать по &атрибутам" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Сортировать по &дате" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Сортировать по рас&ширению" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Сортировать по &имени" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Сортировать по &размеру" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Открыть список дисков" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Функция исключения имён файлов: вкл/выкл" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Создать символ&ьную ссылку..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Синхронная навигация" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Синхронная смена каталогов в панелях" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "&Синхронизировать каталоги..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Получатель &= Источнику" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Про&тестировать архив(ы)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Эскизы" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Просмотр эскизов" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Переключить окно консоли в режим полного экрана" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Открыть каталог под курсором на левой панели" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Открыть каталог под курсором на правой панели" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Дерево каталогов" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Сортировка по параметрам" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Снять выделение по расши&рению" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Снять выделение по текущему имени" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Снять выделение по текущему имени и расширению" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Снять всё выделение с этим путём" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Просмотр" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показать историю каталогов для активной вкладки" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Перейти к следующей записи истории" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Перейти к предыдущей записи истории" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Просмотреть файл протокола" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Список запущенных окон поиска" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Посетить сайт Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Стереть (Wipe)" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Работа с избранными каталогами и параметрами" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Выход" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Каталог" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Открыть в левой панели текущий каталог правой" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Перейти в домашний каталог" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Перейти в корневой каталог" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Перейти в родительский каталог" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Открыть в правой панели текущий каталог левой" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Путь" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Копировать..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Создать &ссылку..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Очистить" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Скрыть" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Выделить &всё" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Переместить..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Создать символьную сс&ылку..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Опции вкладки" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Восстановить" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Старт" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Отмена" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Команды" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Настройки" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Избранное" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файлы" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Выделение" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Сеть" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Ви&д" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Опции вкладки" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Вк&ладки" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "cd" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "В&ырезать" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Изменить" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "&Вставить" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&ОК" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Выберите внутреннюю команду" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "По умолчанию выбрать все категории" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Выделенная:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Категории:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Кома&нда:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Фильтр:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Подсказка:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Горячая клавиша:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Категория" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помощь" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Подсказка" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Горячая клавиша" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавить" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "Помощ&ь" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Шаблон..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Учитывать регистр" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Игнорировать акценты и лигатуры" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Атри&буты:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Укажите маску файлов:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Или выберите тип файлов по шаблону:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Создать новый каталог" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Расширенный синтаксис" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Введите имя каталога:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Новый размер" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Высота:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Качество сжатия JPEG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Высота" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Расширение" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Имя файла" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Очистить" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Очистить" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Закрыть" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Настройки" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Счётчик" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Счётчик" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Удалить" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Раскрыть список шаблонов" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Редактировать имена..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Редактировать текущие новые имена..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Расширение" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Расширение" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Пр&авка" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Вызвать меню относительного пути" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Загрузить последний шаблон" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Загрузить имена из файла..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Загрузить шаблон по имени или индексу" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Загрузить шаблон 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Загрузить шаблон 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Загрузить шаблон 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Загрузить шаблон 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Загрузить шаблон 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Загрузить шаблон 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Загрузить шаблон 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Загрузить шаблон 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Загрузить шаблон 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Имя файла" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Имя файла" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Плагины" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Плагины" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Переименовать" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Переименовать" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "&Восстановить всё" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Сохранить" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Сохранить как..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Показать меню шаблонов" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Сортировать" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Время" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Время" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Просмотреть файл протокола переименования" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Групповое переименование" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "А≠а" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Учитывать регистр" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Протоко&л" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Добавить" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Заменять только первое вхождение" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Регулярные выражения" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Под&становка" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Счётчик" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Найти и заменить" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Шаблоны" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Рас&ширение" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Найти..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Интервал" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "И&мя файла" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Заменит&ь..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "На&ч. знач." #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Ши&рина" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Действия" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Пр&авка" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Старое имя" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Новое имя" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Путь файла" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Нажмите \"OK\" по закрытии редактора, чтобы загрузить изменённые имена!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Выбор приложения" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Пользовательская команда" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Сохранить ассоциацию" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Установить как приложение по умолчанию" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Тип открываемого файла: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Список файлов" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Список URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Один файл" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Один URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Применить" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Помо&щь" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Настройки" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Выберите одну из подстраниц, эта страница не содержит никаких настроек." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "&Копировать" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Удалить" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Дру&гое..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "П&ереименовать" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID, сигнатура, используется с cm_OpenArchive для распознавания архива без учёта расширения файла:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Настройки:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Режим разбора формата:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Вкл&ючить" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Ре&жим отладки" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Показывать консольны&й вывод" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Использовать имя архива без расширения как список" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix-&атрибуты файлов" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix-разделитель пут&и \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows-атри&буты файлов" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows-разделител&ь пути \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "До&бавить:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ар&хиватор:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Уда&лить:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Оп&исание:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Рас&ширение:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "И&звлечь:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Распаковать не у&читывая пути:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Сме&щение ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Диапа&зон поиска ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Список:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Архиватор&ы:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Коне&ц списка (необязательный):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Фор&мат списка:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "На&чало списка (необязательный):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Строка запроса парол&я:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Создать са&мораспаковывающийся архив:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Про&верить:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "&Автонастройка" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Запретить все" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Отменить изменения" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Разрешить все" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Сортировать архиваторы" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Дополнительные" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Основные" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "При изменении &размера, даты или атрибутов" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Для следующих каталогов и их подкаталогов:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "При &создании, удалении и переименовании файлов" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Не реаг&ировать на изменения, если окно DC неактивно" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Отключить автообновление" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Обновлять список файлов" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Вс&егда показывать значок в трее" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "С&крывать отмонтированные устройства" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "С&ворачивать в системный трей" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Не запускать более одной копии DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Укажите диски или точки монтирования, перечислив через \";\"" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Чёрный список дисков" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Размер колонок" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показывать расширения файлов" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&Выровненными (по Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&Сразу после имени" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Автоматически" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Фиксированное число колонок" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Фиксированная ширина колонок" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Использовать &градиентный индикатор" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Бинарный режим" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Режим \"Книга\"" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Режим изображения" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Текстовый режим" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Добавлено:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Фон:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Текст:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Категория:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Удалено:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Ошибка:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Фон 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Цвет фона &индикатора:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Цвет индикатора:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgctxt "tfrmoptionscolors.lblindthresholdcolor.caption" msgid "Indicator &Threshold Color:" msgstr "Цвет &предела индикатора:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Информационное сообщение:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Слева:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Изменено:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Изменено:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Справа:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Успешная операция:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Неизвестно:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Состояние" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "&Выравнивать заголовки как значения" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Обр&езать текст по ширине колонки" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Рас&ширить ширину ячейки, если текст не умещается в колонке" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Горизонтальные линии" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Вертикальные линии" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "&Растягивать колонки на всю ширину панели" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Показывать сетку" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Автоматически изменять размер колонок" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "И&зменять размер колонки:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Р&едактировать" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Историю командной строки" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "И&сторию каталогов" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Историю &масок файлов" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Вкладки каталогов" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Со&хранять конфигурацию" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Истори&ю поиска/замены" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Состояние главного окна" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Расположение файлов конфигурации" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Сохранять при выходе" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Сортировка дерева разделов настроек (слева)" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Состояние дерева при открытии окна настроек" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Задано через командную строку" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Файлы подсветки:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Темы значков:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Кэш эскизов:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "&Каталог программы (портативная версия)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "&Домашний каталог пользователя" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Удалить" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Перейти к умолчаниям" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Создать" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Далее" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Назад" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Сохранить как" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Сохранить" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Разрешить наложение цвета" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Изменять для всех колонок" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Основные" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Рамка вокруг курсора" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Курсор-рамка" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Курсор в неактивной панели" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Инверсное выделение" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Изменить шрифт и цвет для этого набора" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Фон 1:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "&Набор колонок:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Имя текущей колонки]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Курсор:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Текст под курсором:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Файловая система:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Шрифт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Размер:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Текст:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивный курсор:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивное выделение:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Выделение:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Предварительный просмотр, можно перемещать курсор и выбирать файлы, получив полное представление о выбранных настройках:" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Настройки колонки:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Добавить колонку" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Позиция панели после сравнения:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Добавить каталог &активной вкладки" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Добавить каталоги активной &и неактивной вкладок" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Диалог выбора &каталога" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Добавить копию выделенной записи" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Добавить &выделенные или каталог под курсором в активной вкладке" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Добавить разделитель" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Добавить подменю" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Добавить вручную" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Свернуть все" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Свернуть ветку" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Вырезать выделенные" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Удалить всё!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Удалить выделенное" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Удалить подменю и всё его содержимое" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Удалить подменю, но оставить его содержимое" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Развернуть ветку" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Фокус на дерево" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Перейти к первому пункту" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Перейти к последнему пункту" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Перейти к следующему пункту" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Перейти к предыдущему пункту" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Вставить каталог &активной вкладки" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Вставить каталоги активной &и неактивной вкладок" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Диалог выбора &каталога" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Вставить копию выделенной записи" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Вставить &выделенные или каталог под курсором в активной вкладке" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Вставить разделитель" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Вставить подменю" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Вставить вручную" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Переместить вниз" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Переместить вверх" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Развернуть все ветки" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Вставить вырезанное" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Найти и заменить в &пути" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "&Найти и заменить в пути и целевом пути" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Найти и заменить в &целевом пути" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Изменить путь" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Изменить целевой путь" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Добавить..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Ре&зервирование..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Удалить..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Экспорт..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Импорт..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Вставить..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Разное..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Некоторые функции для выбора целевого пути" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Сортировать..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "При добавлении также добавить и це&левой путь" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Все&гда разворачивать дерево" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Показывать только приемлемые п&еременные окружения" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Показывать в меню так&же и [путь]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Имя, а-я" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Имя, а-я" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Избранные каталоги (сортируйте перетаскиванием)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Другие настройки" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Имя:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Путь:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "&Целевой путь:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...только текущий &уровень выделенного" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Проверить &существование всех путей" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Проверить существование &всех путей и целевых путей" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "в файл &избранных каталогов (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "в файл \"wincmd.ini\" TC (&оставить существующие)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "в файл \"wincmd.ini\" TC (&удалить существующие)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Перейти к &настройкам, связанным с TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Перейти к &настройкам, связанным с TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "из файла &избранных каталогов (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "из &файла \"wincmd.ini\" TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Навигация..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Восстановить из резервной копии" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Сохранить резервную копию" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Найти и &заменить..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...все, от А до &Я!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...только записи &одной группы" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&содержимое выделенного(ых) подменю, но не подуровни" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...содержимое выделенного(ых) подменю и &все подуровни" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Проверить полученное &меню" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Изменить &путь" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Изменить &целевой путь" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Добавление из главной панели" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Применить настройки ко всем избранным каталогам" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Путь" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Целевой путь" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Пути" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Способ установки пути при добавлении:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Применить для:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путь:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Предлагать все поддерживаемые форматы, спрашивать каждый раз" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "При сохранении текста в Unicode использовать UTF-8 (иначе будет UTF-16 LE)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Генерировать имя файла автоматически (иначе будет спрашивать)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "По&казать диалог подтверждения при перетаскивании" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При перетаскивании текста в панель:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Расположите форматы в порядке убывания предпочтения (используйте перетаскивание):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(если наиболее предпочтительный не поддерживается, будет взят второй и так далее)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(не будет работать с некоторыми приложениями, попробуйте отключить, если есть проблемы)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Тип &файловой системы" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "&Свободное место" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "&Метка" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Список дисков" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Автоматический отступ" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "При нажатии клавиши Enter новая строка будет создана с тем же отступом, что и у предыдущей" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "Групповая отмена" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "Все непрерывные однотипные изменения будут обрабатываться за один вызов вместо отмены/повтора каждого" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Правая граница:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Прокручивать за конец строки" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Позволяет перемещать каретку в пустое пространство за пределом конца строки" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Показывать специальные символы" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Пробелы и табуляции будут обозначаться специальными символами" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "\"Умные\" табуляции" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Нажатия клавиши Tab будут перемещать каретку к позиции под следующим непробельным символом предыдущей строки" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tab меняет отступ блоков" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Нажатия клавиш Tab и Shift+Tab соответственно увеличивают и уменьшают отступ выделенного текста" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Использовать пробелы вместо символов табуляции" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Конвертировать символы табуляции в заданное количество пробелов (при вводе)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Удалять концевые пробелы" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Автоматическое удаление концевых пробелов, применяется только к редактируемым строкам" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Обратите внимание, опция \"Умные табуляции\" имеет преимущество над заданным значением" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Опции встроенного редактора" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Отступ блока:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Ширина табуляции:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Обратите внимание, опция \"Умные табуляции\" имеет преимущество над заданным значением" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Сбросить" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Сохранить" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Атрибуты элементов" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Цвет текста" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Цвет текста" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "О&тметка" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Использовать (и менять) &глобальную схему" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Использовать &локальную схему" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Жирный" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "К&урсив" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Зачёркнутый" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "По&дчёркнутый" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Добавить..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Удалить..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Импорт/Экспорт" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Вставить..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Сортировать..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Нет" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Всегда разворачивать дерево" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Нет" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Список избранных вкладок (сортируйте перетаскиванием)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Другие настройки" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Что восстановить для выбранной записи:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Сохранять существующие вкладки:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Сохранять историю каталогов:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Сохранённые слева вкладки будут восстановлены:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Сохранённые справа вкладки будут восстановлены:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "разделитель" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Добавить разделитель" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "подменю" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Добавить подменю" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Свернуть все" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...только текущий уровень выделенного" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Вырезать" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Удалить всё!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Удалить подменю и всё его содержимое" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Удалить подменю, но оставить его содержимое" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "Удалить выделенное" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Удалить выделенное" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Экспортировать выбранное в TAB-файл(ы)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Импортировать TAB-файл(ы) с настройками по умолчанию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Импортировать TAB-файл(ы) в выбранную позицию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Импортировать TAB-файл(ы) в выбранную позицию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Импортировать TAB-файл(ы) в подменю в выбранной позиции" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Вставить разделитель" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Вставить подменю" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Развернуть все ветки" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Вставить" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, от А до Я!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...только записи одной группы" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортировать только записи одной группы" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...содержимое выделенного(ых) подменю, но не подуровни" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...содержимое выделенного(ых) подменю и все подуровни" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Проверить полученное меню" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Добавить" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Добавить" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "&Клонировать" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Выберите внутреннюю команду" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Вниз" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "&Изменить" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Вставить" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Вставит&ь" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Удалить" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Уд&алить" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Уда&лить" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пе&реименовать" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Помощник с переменными" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Вв&ерх" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Путь запуска команды. Не используйте кавычки." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Название действия. Оно никогда не передаётся в систему, это просто выбранное вами мнемоническое имя, для вас" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Параметры, передаваемые команде. Имя файла с пробелами должно быть заключено в кавычки (вручную)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Команда для выполнения. Не используйте кавычки." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Описание действия" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Действия" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Расширения" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Типы файлов" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Значок" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Действия могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Расширения могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Типы файлов могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "&Название:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Пара&метры:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Путь &запуска:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Пользовательское с..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Пользовательское" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Редактировать" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Открыть в редакторе" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Редактировать с помощью..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Получить вывод команды" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Открыть во встроенном редакторе" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Открыть во встроенном просмотрщике" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Открыть" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Открыть с помощью..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустить в терминале" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Просмотреть" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Открыть в просмотрщике" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Просмотреть с помощью..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Нажмите здесь для смены значка" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Применить настройки ко всем именам файлов и путям" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Контекстные действия по умолчанию (просмотр/редактирование)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Запустить с помощью оболочки" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Расширенное контекстное меню" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Настройки файловых ассоциаций" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Предлагать добавить в файловые ассоциации файл под курсором (если ещё не включен)" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "При открытии настроек файловых ассоциаций будет предложено добавить тип с расширением файла под курсором (если оно не найдено в уже существующих типах)" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Запустить в терминале и закрыть" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Запустить в терминале и оставить открытым" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Команды" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Значки" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Пути запуска" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Дополнительные пункты:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Пути" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Способ установки пути при добавлении значков, команд и путей запуска:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Применить для:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путь:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Показывать окно подтверждения для следующих операций:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "&Копирование" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Удаление" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Удаление в Корзину (с Shift - око&нчательно)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "У&даление в корзину" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Сбросить флаг \"Только для чтения\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "П&еремещение" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "О&брабатывать комментарии с файлами/папками" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "П&ри переименовании выделять только имя файла, без расширения" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Показ&ывать панель выбора вкладок в диалоге копирования/перемещения" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Выводить сообщения об о&шибках файловых операций только в окно протокола" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Тестирование архива" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Проверка контрольных сумм" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Выполнение операций" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Пользовательский интерфейс" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Ра&змер буфера для файловых операций (Кб):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Размер буфера для вычисления &хеша (Кб):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Показат&ь прогресс операций в" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Стиль автопереименования совпадающих имён:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Число перезаписе&й при стирании (Wipe):" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Сбросить на умолчания DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Разрешить наложение цвета" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "К&урсор-рамка" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Курсор в неактивной панели" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Инверсное в&ыделение" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Рамка вокруг курсора" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Текущий путь" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Фон 1:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Фо&н 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Курсор:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Т&екст под курсором:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивный курсор:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивное выделение:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "Уровень &яркости неактивной панели:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Выделение:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Фон:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Текст:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Фон (неактивная):" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Текст (неактивная):" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Предварительный просмотр, можно перемещать курсор и выбирать файлы, получив полное представление о выбранных настройках:" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "&Текст:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "При запуске поиска очистить фильтр маски файла" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "По&иск по части имени" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Показать меню окна в \"Поиск файлов\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Поиск текста в файлах" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Поиск файлов" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Текущие фильтры после нажатия \"Новый поиск\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Шаблон поиска по умолчанию:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Использовать отобра&жение в память" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Испо&льзовать поток" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "По умолчани&ю" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Форматирование" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Пользовательские сокращения:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Сортировка" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Байт:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&Чувствительность к регистру:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неверный формат" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Формат &даты и времени:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Формат &размера файла:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Строка состоян&ия:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гигабайт:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Информа&ция о диске:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Килобайт:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Мегабайт:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Вставлять новые файлы:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Файловые операции:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Со&ртировка каталогов:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Метод &сортировки:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Тераба&йт:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "П&еремещать изменённые файлы:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Добавить" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Помощ&ь" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Разрешить переход в родительский каталог двойным щелчком по свободному месту в файловой панели" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Не загружать список файлов, пока вкладка не будет активирована" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Показывать &квадратные скобки вокруг имён папок" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "По&дсвечивать новые и изменённые файлы" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Разрешить переименование при щелчке по &имени файла под курсором" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Загру&жать список файлов в отдельном потоке" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "За&гружать значки после списка файлов" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Показывать систе&мные и скрытые файлы" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При в&ыделении файлов пробелом перемещать курсор на следующий файл" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Фильтр для файлов в стиле Windows (\"*.*\" выделяет также файлы без расширения и т.д.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Использовать в диалоге выбора маски независимый фильтр атрибутов" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Выделение/снятие выделения" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Маска атрибута по умолчанию:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Удалить" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Цвета по типу (сортировка перетаскиванием)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Атрибуты:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Цвет:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Имя:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Шрифты" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "&Добавить" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "&Копировать" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Удалить" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Удалить" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Изменить" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Следующая категория" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Меню действий для набора" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Предыдущая категория" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Восстановить настройки DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Сохранить сейчас" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "По имени команды" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "По горячим клавишам (группировать)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "По горячим клавишам (одна на строку)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Фильтр" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "К&атегории:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ко&манды:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Набор горячих клавиш:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Порядок &сортировки:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Категории" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Команда" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Порядок сортировки" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Команда" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Горячие клавиши" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Описание" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Горячая клавиша" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Параметры" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Элементы интерфейса" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для следующих &каталогов и их подкаталогов:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Показывать значки для &команд в меню" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Показывать значки на кнопках" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Показывать &оверлейные значки (например, для ярлыков)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Затен&ять значки скрытых файлов (медленнее)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Отключить загрузку специальных значков" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Размер значков " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Тема значков" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Показывать значки" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Показ значков, связанных с типом файлов " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Панель дисков:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Панель файлов:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Все" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Вс&е ассоциированные + EXE/LNK (медленно)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Не показывать значки" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Только &стандартные" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Добавить все выделенные" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "До&бавить все выделенные с путями" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Исключить (не показывать) следующие файлы и каталоги:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Сохранить в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "П&равая и левая стрелки меняют каталог (Lynx-поведение)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Ввод" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+Б&уква:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Бу&ква:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Буквы:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "П&лоские кнопки" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Плоский инт&ерфейс" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "&Индикатор свободного места на диске" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Окно протокола" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Панель фонов&ых операций" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Об&щий прогресс в меню" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Ко&мандная строка" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Тек&ущий путь" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Кнопки &дисков" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Строка сво&бодного места на диске" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "К&нопка списка дисков" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Кнопки &функциональных клавиш" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "&Главное меню" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "П&анель инструментов" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "К&ратко" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Строка состо&яния" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Заголовки табуляторов" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "В&кладки каталогов" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Окно термина&ла" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Д&ве панели кнопок дисков (над файловыми панелями)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Центральная панель" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Компоненты основного окна " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Просмотреть содержимое файла протокола" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Добавлять дату в имя файла протокола" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Уп&аковка / Распаковка" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Выполнение внешней команды" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Копирование / Перемещение / Создание ссылок" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Удаление" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Со&здание / Удаление каталогов" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "О&шибки" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Соз&дать файл протокола:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Максимальное количество файлов протокола" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Информационные сообщения" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Запуск / завершение" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "У&спешные операции" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "П&лагины файловой системы" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Отчёт о файловых операциях" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Протоколируемые действия" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Протоколировать операции со статусом" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Удалить эскизы для отсутствующих файлов" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Просмотреть содержимое файла настроек" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Создавать новые с кодировкой:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "При смене диска всегда пере&ходить в корневой каталог" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Показывать &текущий каталог в заголовке окна" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Показывать заставку при &запуске" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "По&казывать некритические сообщения об ошибках (с одной кнопкой \"ОК\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Сохранять эскизы в кэш" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Эскизы" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Комментарии к файлам (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Импортирование из TC и экспортирование:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "Однобайтовая кодировка текста по умолчанию:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Кодировка по умолчанию:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Файл настроек:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Исполняемый файл TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Каталог с панелями инструментов:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "пикселей" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Размер эскизов:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Выделение с помощью мыши" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Текстовый курсор не следует за курсором мыши" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Щелч&ком по значку" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Открытие файлов и запуск программ" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Прокрутка" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Выделение" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Р&ежим:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Двойным щелчком" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "По&строчно" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Построчно с &движением курсора" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Пост&ранично" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Одним щелчком" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Одним щелчком открывать папки и двойным файлы" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Просмотреть содержимое файла протокола" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Отдельные каталоги на каждый день" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Записывать имена файлов с полным путём" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Показать меню окна" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Протокол переименования" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Заменять &недопустимые в имени файла символом" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Добавить в тот же файл протокола переименования" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "На каждый шаблон" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Выход с изменённым шаблоном" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Шаблон при запуске" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Настроить" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Включить" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Уда&лить" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Параметр&ы" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Описание" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Поз&воляют использовать в поиске альтернативные алгоритмы или внешние инструменты (например \"locate\", и т.п.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Применить настройки ко всем уже добавленным плагинам" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "При добавлении нового плагина автоматически открывать окно настроек" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Общие настройки:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Библиотека Lua:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путь:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Имя файла плагина при добавлении:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Позволяют р&аботать с архивами" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Позвол&яют использовать расширенные сведения о файлах (теги mp3, атрибуты изображений и т.д.) в панелях или при поиске/переименовании" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Позволя&ют обращаться к дискам, недоступным из ОС или к внешним устройствам, типа Palm/PocketPC, и т.д." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Позволяют ото&бражать во внутреннем просмотрщике (F3, Ctrl+Q) файлы различных форматов, таких как рисунки, таблицы, базы данных и т.д." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Состояние" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Плагин" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Имя файла" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Начало (имя должно начинаться с набранных символов)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Конец (последние символы до набранной точки \".\" должны совпадать)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Настройки" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Точное соответствие имени" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Регистр поиска" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Искать" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Сохранять изменённое имя при разблокировании вкладки" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Делат&ь панель активной при щелчке по одной из её вкладок" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Показ&ывать заголовок вкладки, даже если она одна" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Закрыть дубликаты вкладок при закрытии приложения" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "По&дтверждать закрытие всех вкладок" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Подтверждать закрытие заблокированных вкладок" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Ог&раничить размер заголовка до" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Отмечать за&блокированные вкладки звёздочкой *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Размещать вкладки в несколько рядов" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+вверх делает &новую вкладку активной" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "От&крывать новую вкладку рядом с текущей" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "По возможности использовать существующие вкладки" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Кнопка &закрытия вкладки" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Всегда показывать букву диска в заголовке вкладки" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "За&головки вкладок" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "символов" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Действие двойного щелчка по вкладке:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Положение &вкладок:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Нет" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Нет" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Перейти к настройкам избранных вкладок после пересохранения" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Перейти к настройкам избранных вкладок после сохранения новых" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Включить дополнительные параметры избранных вкладок (выбор панели при восстановлении и т.д.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Дополнительные настройки по умолчанию для новых избранных вкладок:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Дополнительные параметры избранных вкладок" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "При восстановлении сохранить существующие вкладки:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Сохранённые слева вкладки будут восстановлены:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Сохранённые справа вкладки будут восстановлены:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Сохранять историю каталогов для избранных вкладок:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Позиция в меню по умолчанию при сохранении новых избранных вкладок:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Шаблон {command} обозначает команду, запуск которой будет произведён в терминале" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "Шаблон {command} обозначает команду, запуск которой будет произведён в терминале" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Команда запуска терминала:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Команда для запуска команд в терминале (окно будет закрыто):" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Команда для запуска команд в терминале (окно останется открытым):" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "Дублиро&вать" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Удалить" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "&Изменить" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Добавить" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Выбрать" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Другое..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Удалит&ь" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Подсказка" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Всплывающая подсказка на основе типа, команды и параметров кнопки" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Плоские кнопки" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Сообщить об ошибках с командами" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Показывать надписи" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Параметры команды, каждый на отдельной строке. F1 - помощь." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Вид кнопок" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "Р&азмер панели:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Команда:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметры:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помощь" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Горячая клавиша:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "&Файл значка:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ра&змер значков:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Кома&нда:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Пара&метры:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "П&уть запуска:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Стиль:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "Подс&казка:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Добавить панель со ВСЕМИ командами DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "внешнюю команду" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "внутреннюю команду" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "разделитель" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "меню" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Резервирование..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущая панель инструментов..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл панели инструментов (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" TC (оставить существующий)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" TC (удалить существующий)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Наивысшая панель инструментов..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Сохранить резервную копию" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл панели инструментов (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" TC (оставить существующий)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" TC (удалить существующий)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "после выбранного" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "в начало" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "в конец" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "перед выбранным" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Восстановить из резервной копии" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "из файла панели инструментов (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "из одного файла TC .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "из файла \"wincmd.ini\" TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "после выбранного" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "в начало" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "в конец" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "перед выбранным" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Найти и заменить..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "после выбранного" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "в начало" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "в конец" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "перед выбранным" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "во всём вышеперечисленном..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "во всех командах..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "во всех файлах значка..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "во всех параметрах..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "во всех путях запуска..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "после выбранного" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "в начало" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "в конец" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "перед выбранным" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Разделитель" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Пробел" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Тип кнопки" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Применить настройки ко всем именам файлов и путям" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Команды" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Значки" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Пути запуска" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Пути" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Применить для:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Путь:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Способ установки пути при добавлении значков, команд и путей запуска:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Не закрывать окно терминала после запуска программы" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Запускать в терминале" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Использовать внешнюю программу" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "&Дополнительные параметры" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "П&уть к программе" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "&Копировать" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Удалить" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "П&ереименовать" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Дру&гое..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Параметры подсказки для выбранного типа файлов:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Общие параметры подсказок:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Показывать всплывающие подсказки в файловой панели" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Под&сказка:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Скрыть подсказку через:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Режим использования:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Типы &файлов:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Отменить изменения" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Сортировать типы файлов" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Двойной щелчок по панели текущего пути" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "С помощью меню и внутренней команды" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Двойной щелчок по выбранному в дереве и выход" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "С помощью меню и внутренней команды" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Двойной щелчок по вкладке (если включено)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Если используется комбинация клавиш - выбор и закрытие окна" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Щелчок мыши по выбранному в дереве и выход" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "История командной строки" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "История каталогов" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "История просмотра (посещённые каталоги)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Поведение при выборе:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Настройки древовидного меню:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Где использовать древовидное меню:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*ПРИМЕЧАНИЕ: Состояние таких опций, как чувствительность к регистру и игнорирование акцентов, сохраняется для последующих вызовов меню." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Избранные каталоги:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Избранные вкладки:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "История:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Использовать и показывать сочетания клавиш для выбора пунктов" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Шрифт" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Настройки цвета и макет:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Фон:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Курсор:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Найденный текст:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Найденный текст под курсором:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Нормальный текст:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Нормальный текст под курсором:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Предварительный просмотр:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Дополнительный текст:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Дополнительный текст под курсором:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Горячая клавиша:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Горячая клавиша под курсором:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Невыделяемый текст:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Невыделяемый текст под курсором:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Измените цвета слева, и вы увидите, как будет выглядеть ваше древовидное меню." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Опции встроенной программы просмотра" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Количество колонок в режиме \"Книга\"" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Настроить" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Упаковка файлов" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Отде&льные архивы для кажд&ого выбранного файла/каталога" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Само&распаковывающийся архив" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифровать" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "У&далить исходные файлы после упаковки" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Многотомный архив" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Пр&едварительно упаковать в TAR архив" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Сохранять пути" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Имя архива:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Архиватор" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Выполнить, распаковав все" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Р&аспаковать и выполнить" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Свойства упакованного файла" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Атрибуты:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Коэффициент сжатия:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Метод:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Исходный размер:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Размер после сжатия:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Архиватор:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Время:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Параметры печати" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Поля (мм)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Нижнее:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Левое:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Правое:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Верхнее:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Закрыть панель фильтра" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Текст для поиска или для фильтрации" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Аа" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Учитывать регистр" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "К" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Каталоги" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Ф" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Файлы" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Совпадает с началом" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Совпадает с концом" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Фильтр" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Поиск или фильтр" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Добавить правило" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Удалить правило" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Использовать контентные плагины, объединять с:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагин" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Оператор" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Значение" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "И (все правила)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "ИЛИ (любое правило)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Применить" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&ОК" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Выделение дубликатов" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Оставить &невыделенным хотя бы один файл в каждой группе:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Снять выделение по имени/расширению:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Выделить по &имени/расширению:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "&Разделитель" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Считать от" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Результат:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Выберите каталоги для вставки (можно более одного)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&конца" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&начала" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Первый с" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Последний с" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Диапазон" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Результат:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Выделите символы для вставки:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Первый:Последний]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Первый,&Длина]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&конца" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&начала" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "кон&ца" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "начал&а" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Изменить атрибуты" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закрепляющий бит" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Архивный" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Создан:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Скрытый" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Открыт:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Изменён:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Только для чтения" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Рекурсивно" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Системный" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Дата и время" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(серое поле означает неизменяемое значение)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(серое поле означает неизменяемое значение)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Восьмеричный:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Сортировать" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Можно сортировать перетаскиванием" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Разбиение" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Создать файл контрольной суммы" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Размер и количество частей" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Разбить файл в &каталог:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Ко&личество частей" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Байт" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гигабайт" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "К&илобайт" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабайт" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Сборка" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Фиксация" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Операционная система" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Ревизия" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Версия" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Библиотека виджетов" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Создать символьную ссылку" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Относительный путь, если возможно" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&На что указывает" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Имя ссылки" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Удалить с обеих сторон" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Удалить слева" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Удалить справа" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Снять метку копирования/удаления" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Отметить для копирования (направление по умолчанию)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Отметить для копирования -> (слева направо)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Поменять направление копирования" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Отметить для копирования <- (справа налево)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Отметить для удаления <-> (оба)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgctxt "tfrmsyncdirsdlg.actselectdeleteleft.caption" msgid "Select for deleting <- (left)" msgstr "Отметить для удаления <- (слева)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Отметить для удаления -> (справа)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Закрыть" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "&Сравнить" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Синхронизировать" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Синхронизация каталогов" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&асимметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "по сод&ержимому" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "&игнорировать дату" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "&Выделенные" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "с &подкаталогами" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Показывать:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Имя" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Имя" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(в главном окне)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Сравнить" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Внутренний просмотр слева" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Внутренний просмотр справа" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "&дубликаты" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "&уникальные" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Чтобы начать, нажмите \"Сравнить\"" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Синхронизировать" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Подтвердить замену" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Древовидное меню" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Выберите ваш избранный каталог:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Поиск чувствителен к регистру" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Свернуть все" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Развернуть все" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Игнорировать акценты и лигатуры" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Поиск не чувствителен к регистру" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Поиск с акцентами и лигатурами" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Если строка найдена только в имени ветки, то не показывать её" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Если строка найдена только в имени ветки, то показать ветку и всё её содержимое" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Закрыть древовидное меню" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Настроить древовидное меню" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Настроить цвета древовидного меню" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Добавить" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Изменить" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "По умол&чанию" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Удалить" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Настройка плагина" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Определяет тип ар&хива по содержимому" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Мо&жет удалять из архива" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Поддерживает &шифрование" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Пока&зывать как нормальные файлы (скрывать значок архива)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Поддерживает упа&ковку в памяти" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Может &модифицировать архивы" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Архив может содержать несколько файлов" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Может &создавать архивы" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Им&еет диалог настроек" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Поз&воляет искать текст в архивах" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Опис&ание:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Дете&кт-строка:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Расширение:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Флаги:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Имя:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Плагин:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Плагин:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "О просмотрщике..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Показывает сообщение о..." #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Автообновление" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Сменить кодировку" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Копировать файл" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Копировать файл" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "&Копировать в буфер" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Копировать в буфер с &форматированием" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Удалить файл" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Удалить файл" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Выход" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Найти" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Найти далее" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Найти предыдущее" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Развернуть на весь экран" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Перейти к строке..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Переход к строке" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "По центру окна" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Следующий" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Загрузить следующий файл" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Предыдущий" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Загрузить предыдущий файл" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Отразить по горизонтали" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Зеркально" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Отразить по вертикали" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Переместить файл" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Переместить файл" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Предварительный просмотр" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Пе&чать..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Парам&етры печати..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перезагрузить" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перезагрузить текущий файл" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Повернуть на 180°" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Повернуть на 180 градусов" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Повернуть на 270°" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Повернуть на -90 градусов" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Повернуть на 90°" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Повернуть на +90 градусов" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Сохранить" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Сохранить как..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Сохранить файл как..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Скриншот" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Задержка 3 секунды" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Задержка 5 секунд" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Выделить &всё" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Показать в &двоичном виде" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Показать в режиме \"&Книга\" (текст с колонками)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Показать в д&есятеричном виде" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Показать в &шестнадцатеричном виде" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Показать как &текст" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Показать как текст с &разрывами строк" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Показывать текстовый к&урсор" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Код" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "&Графика" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Офи&сные XML (только текст)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Плагины" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Показывать прозра&чность" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "В размер окна" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Все изображения в размер окна" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Только большие в размер окна" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Отменить" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Отменить" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Переносить строки" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Увеличение" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Увеличить" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Увеличить" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Уменьшить" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Уменьшить" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Обрезать" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Развернуть на весь экран" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Экспорт кадра" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Выделение" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Следующий кадр" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Рисование" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Предыдущий кадр" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Красные глаза" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Изменить размер" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Слайд шоу" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Программа просмотра" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Окружность" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Изоб&ражение" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Карандаш" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Прямоугольник" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Повернуть" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Скриншот" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Вид" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Плагины" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Старт" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "С&топ" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Файловые операции" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Поверх всех окон" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Для перемещения операций между очередями используйте перетаскивание" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Отмена" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Отмена" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Новая очередь" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Показать в отдельном окне" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Переместить в начало очереди" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Переместить в конец очереди" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Очередь" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Вне очереди" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Очередь 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Очередь 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Очередь 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Очередь 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Очередь 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Показать в отдельном окне" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Пауза для всех" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "С&ледовать ссылкам" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Если к&аталог существует" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Если файл существует" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Если файл существует" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "О&тмена" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&ОК" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Командная строка:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Параметры:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Путь запуска:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Настроить" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Шифровать" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Если файл существует" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Копировать дат&у/время" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Работать в фоне (отдельное соединение)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Если файл существует" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Нужно обладать правами администратора" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "для копирования этого объекта:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "для создания этого объекта:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "для удаления этого объекта:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "для получения атрибутов этого объекта:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "для создания этой жёсткой ссылки:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "для открытия этого объекта:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "для переименования этого объекта:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "для установки атрибутов этого объекта:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "для создания этой символьной ссылки:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Дата съёмки" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Высота" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Ширина" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Производитель" #: uexifreader.rsmodel msgid "Camera model" msgstr "Модель камеры" #: uexifreader.rsorientation msgid "Orientation" msgstr "Ориентация" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Файл с контрольной суммой помогает проверить объединение файлов, но не был найден:\n" "%s\n" "\n" "Вы можете сделать его доступным и нажать \"OK\", когда будете готовы,\n" "или нажать \"ОТМЕНА\", чтобы продолжить объединение без него." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<Папка>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<Ссылка>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Отменить быстрый фильтр" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Отменить текущую операцию" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Введите имя файла, с расширением" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Формат текста для импорта" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Ошибка:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Отчёт:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Не найдено:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Ошибка чтения:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Успешно:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Введите контрольную сумму и выберите алгоритм:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Проверка контрольной суммы" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Всего:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Хотите очистить фильтры для нового поиска?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Буфер обмена не содержит данных панели инструментов" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Все;Активная панель;Левая панель;Правая панель;Файловые операции;Настройка;Сеть;Разное;Параллельный порт;Печать;Выделение;Безопасность;Буфер обмена;FTP;Навигация;Помощь;Окно;Командная строка;Инструменты;Вид;Пользователь;Вкладки;Сортировка;Протокол" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "По умолчанию;По алфавиту" #: ulng.rscolattr msgid "Attr" msgstr "Атриб" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Тип" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Имя" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Размер" #: ulng.rsconfcolalign msgid "Align" msgstr "Выравн." #: ulng.rsconfcolcaption msgid "Caption" msgstr "Заголовок" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Удалить" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Содержимое поля данных" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Переместить" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Настроить колонку" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Настроить файловые ассоциации" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Подтверждение командной строки и параметров" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Копия (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Тёмный режим" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Авто;Включён;Отключён" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Импортированная панель инструментов DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Импортированная панель инструментов TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "Б" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "Гб" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "Кб" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "Мб" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "Тб" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Добавлено: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Сравнение..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Удалено: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Эти два файла идентичны!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Совпало: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Изменено: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Кодировка" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Концы строк" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Текст идентичный, но использованы следующие опции:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Текст идентичный, но файлы не совпадают!\n" "Найдены следующие различия:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Пр&ервать" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Все" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Дописать" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Автоматич&ески переименовывать копируемые файлы" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Автоматически переименовывать имеющиеся фай&лы" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "О&тмена" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Сравнить" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Продолжить" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Объединить" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Объ&единить (для всех)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Выйти из программы" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Игнорировать" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "И&гнорировать все" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Нет" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ни одного" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Друго&е" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Заменить" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Заменить &все" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Заменить &большие" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Заменить более &старые" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Заменить &меньшие" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Пере&именовать" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "П&родолжить" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Пов&торить" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Как &Администратор" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Пр&опустить" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Проп&устить все" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Разблокировать" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Копировать файл(ы)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Переместить файл(ы)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Па&уза" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Старт" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Очередь" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Скорость %s/с" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Скорость %s/с, осталось времени %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Формат RTF;Формат HTML;Текст в Unicode;Простой текст" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Индикатор свободного места" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<нет метки>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<нет носителя>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Встроенный редактор Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Перейти к строке:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Переход к строке" #: ulng.rseditnewfile msgid "new.txt" msgstr "новый.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Имя файла:" #: ulng.rseditnewopen msgid "Open file" msgstr "Открыть файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Назад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Найти..." #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Вперед" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Заменить" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "во внешнем редакторе" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "во встроенном редакторе" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Запустить с помощью оболочки" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Запустить в терминале и закрыть" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Запустить в терминале и оставить открытым" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" не найдена в строке %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Не указано расширение до команды \"%s\". Будет проигнорирована." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Слева;Справа;В активной;В неактивной;В обеих;Нет" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Нет;Да" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Экспортировано_из_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Спрашивать;Перезаписывать;Пропускать" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Спрашивать;Объединять;Пропускать" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Спрашивать;Перезаписывать;Перезаписывать более старые;Пропускать" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Спрашивать;Никогда не устанавливать;Игнорировать" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Все файлы" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Настройки архиваторов" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Подсказки DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Избранные каталоги" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "EXE-файлы" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "INI-файлы" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "TAB-файлы" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Файлы библиотек" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Файлы плагинов" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Программы и библиотеки" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ФИЛЬТР" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Панели инструментов TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Панели инструментов DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "XML-Файлы" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Задать шаблон" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "число уровней: %s" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "все (неограниченная)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "только текущий каталог" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Каталог %s не существует!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Найдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сохранить шаблон поиска" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Имя шаблона:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Просмотрено: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Сканирование" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Поиск файлов" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Время сканирования: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Начинать у" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "&Консоль" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "&Редактор" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Функциональные клавиши" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Протоко&л" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "О&сновной" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Текущий &путь" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Результаты поиска" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Строка состояния" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Древовидное меню" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Прос&мотрщик" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Просмотрщик в режиме \"&Книга\"" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s из %s свободно" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s свободно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/время последнего доступа" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Атрибуты" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Комментарий" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Сжатый размер" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/время создания" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Расширение" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Группа" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Дата/время изменения" #: ulng.rsfunclinkto msgid "Link to" msgstr "Ссылка на" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/время модификации" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Имя" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Имя без расширения" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Владелец" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Путь" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Размер" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Исходный путь" #: ulng.rsfunctype msgid "Type" msgstr "Тип" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Ошибка создания жёсткой ссылки." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "нет;Имя, а-я;Имя, я-а;Тип, а-я;Тип, я-а;Размер 9-0;Размер 0-9;Дата 9-0;Дата 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Внимание! Восстановление из резервной копии очистит существующий список избранных каталогов и заменит его импортированным.\n" "\n" "Вы уверены, что хотите продолжить?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Диалог копирования/перемещения" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Поиск различий" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Диалог редактирования комментария" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Редактор" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Поиск файлов" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основные" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Групповое переименование" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Синхронизация каталогов" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Внутренняя программа просмотра" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Файл с таким именем уже существует.\n" "Хотите переписать его?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Вы уверены, что хотите восстановить значения по умолчанию?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Вы уверены, что хотите удалить набор \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Копия %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Введите новое имя" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Вы должны сохранить по крайней мере один файл горячих клавиш." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Новое имя" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Файл \"%s\" был изменён.\n" "Хотите сохранить его сейчас?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Не использовать \"Enter\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "По имени команды;По горячим клавишам (группир.);По горячим клавишам (по одной)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Не удалось найти ссылку на файл панели инструментов по умолчанию" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "Г" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "К" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "М" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "Т" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "Б" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Список окон \"Поиск файлов\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Снять выделение по маске" #: ulng.rsmarkplus msgid "Select mask" msgstr "Выделить по маске" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Укажите маску файлов (разделитель - \";\"):" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Набор колонок с таким именем уже существует." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Изменить либо СОХРАНИТЬ, КОПИРОВАТЬ или УДАЛИТЬ текущий набор колонок" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Настроить наборы колонок" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Введите имя нового набора колонок" #: ulng.rsmenumacosservices msgid "Services" msgstr "Службы" #: ulng.rsmenumacosshare msgid "Share..." msgstr "Поделиться..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команды" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<По умолчанию>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Восьмеричный" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Создать ярлык..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Отключить сетевой диск..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Редактировать" #: ulng.rsmnueject msgid "Eject" msgstr "Извлечь" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Распаковать здесь..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Подключить сетевой диск..." #: ulng.rsmnumount msgid "Mount" msgstr "Смонтировать" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Создать" #: ulng.rsmnunomedia msgid "No media available" msgstr "Устройство недоступно" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Открыть" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Открыть с помощью" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Другое..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Упаковать здесь..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Восстановить" #: ulng.rsmnusortby msgid "Sort by" msgstr "Упор&ядочить по" #: ulng.rsmnuumount msgid "Unmount" msgstr "Отмонтировать" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Просмотреть" #: ulng.rsmsgaccount msgid "Account:" msgstr "Учётная запись:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Все внутренние команды Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Описание: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Дополнительные параметры командной строки архиватора:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Хотите взять в кавычки?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Неверная контрольная сумма файла назначения:\n" "\"%s\"\n" "\n" "Хотите оставить повреждённый файл?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Вы действительно хотите отменить операцию?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Нельзя скопировать/переместить файл \"%s\" сам в себя!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Не удалось скопировать специальный файл %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Не удалось удалить каталог %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" "Невозможно перезаписать каталог \"%s\"\n" "файлом \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Переход в каталог \"%s\" не удался!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Закрыть все неактивные вкладки?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Вкладка (%s) заблокирована! Закрыть?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Подтверждение параметра" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Команда не найдена! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Вы уверены, что хотите выйти?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Файл %s изменён. Хотите скопировать его обратно?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Не удалось скопировать обратно: хотите сохранить изменённый файл?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Копировать выбранные файлы/каталоги (%d шт.)?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Копировать выбранный \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Создать новый тип файла \"файлы %s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Укажите место и имя файла для сохранения файла панели инструментов DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Пользовательское действие" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Удалить частично скопированный файл?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Удалить выбранные файлы/каталоги (%d шт.)?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Удалить выбранные файлы/каталоги (%d шт.) в корзину?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Удалить \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Удалить выбранный \"%s\" в корзину?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Не удалось удалить \"%s\" в корзину! Удалить совсем?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск недоступен" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Введите имя пользовательского действия:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Введите расширение:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Введите имя:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Введите имя нового типа файлов для расширения \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Контрольная сумма не совпадает, архив повреждён." #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Данные повреждены" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Не удалось соединиться с сервером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Не удалось скопировать файл из %s в %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Не удалось переместить каталог %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Не удалось переместить файл %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Уже существует каталог с именем \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Дата %s не поддерживается" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Каталог %s существует!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Прервано пользователем." #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Ошибка закрытия файла" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Не удалось создать файл" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "В архиве нет больше файлов" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Не удалось открыть существующий файл" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Ошибка чтения из файла" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Ошибка записи в файл" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Не удалось создать каталог %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Некорректная ссылка" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Файлы не найдены" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостаточно памяти" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Функция не поддерживается!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Ошибка в команде контекстного меню" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Ошибка при загрузке конфигурации" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Ошибка синтаксиса в регулярном выражении!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Не удалось переименовать файл %s в %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Не удалось сохранить ассоциацию!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Не удалось сохранить файл" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Не удалось установить атрибуты для \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Не удалось установить дату/время для \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Не удалось установить владельца/группу для \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Не удалось установить права доступа для \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Не удалось установить расширенные атрибуты для \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буфер слишком маленький" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Слишком много файлов" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Архив повреждён или имеет неизвестный формат." #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Путь: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Код выхода:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Вы уверены, что хотите удалить все ваши избранные вкладки? (Нельзя будет отменить!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Перетащите сюда другие записи" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Введите имя новых избранных вкладок:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Сохранение новых избранных вкладок" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Количество успешно экспортированных избранных вкладок: %d из %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Сохранять историю каталогов для новых избранных вкладок:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Количество успешно импортированных файлов: %d из %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Импортированные вкладки" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Выделите TAB-файл(ы) для импорта (можно больше одного за раз!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Последнее изменение избранных вкладок ещё не сохранено. Хотите сохранить их перед тем как продолжить?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Сохранять историю каталогов для избранных вкладок:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Подменю" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Будут загружены избранные вкладки: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Сохранить текущие вкладки поверх существующих избранных вкладок" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Файл %s изменён, сохранить?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Заменить:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Файл %s существует, переписать?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "файлом:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Файл \"%s\" не найден." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Активные файловые операции" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Некоторые операции ещё не завершены. Закрытие Double Commander может привести к потере данных." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Длина целевого пути (%d) превышает %d символов!\n" "%s\n" "Большинство программ не смогут обратиться к файлу/каталогу с таким длинным именем!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "" "Файл %s\n" "помечен как доступный только для чтения/скрытый/системный. Удалить?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" "Все внесённые изменения будут потеряны!\n" "Продолжить?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Размер файла \"%s\" слишком большой для файловой системы получателя!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Каталог %s существует, объединить?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Следовать ссылке \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Выберите формат текста для импорта" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Добавить %d выделенных каталога(ов)" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Добавить выделенный: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Добавить текущий: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Выполнить команду" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_something" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Настройка избранных каталогов" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Вы уверены, что хотите удалить все ваши избранные каталоги? (Нельзя будет отменить!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Это запустит следующую команду:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Избранный каталог по имени " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Изменит путь активной панели на следующий:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "И путь неактивной панели на:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Ошибка создания резервной копии..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Ошибка экспорта объектов..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Экспортировать все" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Экспорт избранных каталогов - Выделите объекты, которые хотите экспортировать" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Только выделенные" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Импортировать все" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Импорт избранных каталогов - Выделите объекты, которые хотите импортировать" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Только выделенные" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Пут&ь:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Укажите файл \".hotlist\" для импорта" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Имя записи" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Число новых записей: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ничего не выбрано для экспорта!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Путь избранного каталога" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Снова добавить выбранный: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Снова добавить текущий: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Укажите место и имя файла избранных каталогов для восстановления" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Команда:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(конец подменю)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Имя &меню:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "И&мя:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(разделитель)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Подменю" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Путь избранного целевого каталога" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Задаёт порядок сортировки в активной панели после смены каталога" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Задаёт порядок сортировки в неактивной панели после смены каталога" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Некоторые функции для выбора пути - относительный, абсолютный, спец. папки Windows, и т.д." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Всего объектов сохранено: %d\n" "\n" "Резервная копия: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всего объектов экспортировано: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Хотите удалить всё содержимое подменю [%s]?\n" "Ответ НЕТ удалит только разделители меню, оставив содержимое." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Укажите место и имя для сохранения файла избранных каталогов" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Неверная длина файла назначения для файла : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Пожалуйста, вставьте следующий диск или другой носитель.\n" "\n" "Это позволит записать файл:\n" "\"%s\"\n" "\n" "Число оставшихся для записи байт: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Ошибка в командной строке" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Некорректное имя файла" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неверный формат файла конфигурации" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Недопустимое шестнадцатеричное число: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некорректный путь" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Путь %s содержит запрещённые символы" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Этот файл не является корректным плагином!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Этот плагин собран для Double Commander для %s.%sОн не может работать с Double Commander для %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неправильное использование кавычек" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Некорректное выделение." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Загрузка списка файлов..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Укажите файл конфигурации TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Укажите исполняемый файл TC (totalcmd.exe или totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Копирование файла %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Удаление файла %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Ошибка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Запуск внешней команды" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Результат внешней команды" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Распаковка файла %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Информация: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Создание ссылки %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Создание каталога %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Перемещение файла %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Упаковка в файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Завершение программы" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Запуск программы" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Удаление каталога %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Выполнено: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Создание символьной ссылки %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Проверка целостности файла %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Стирание файла %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Стирание каталога %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Главный пароль:" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Введите главный пароль:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Новый файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Следующий том будет распакован" #: ulng.rsmsgnofiles msgid "No files" msgstr "Нет файлов" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Нет выделенных файлов." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостаточно места на получателе. Продолжить?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостаточно места на получателе. Повторить?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Не удалось удалить файл %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Не реализовано." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Объект не существует!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Действие не может быть выполнено, так как этот файл открыт в другой программе:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Предварительный просмотр, можно перемещать курсор и выбирать файлы, получив полное представление о выбранных настройках:" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Пароль:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Пароли отличаются!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Введите пароль:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Пароль (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Повторите ввод пароля:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Удалить %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" существует. Перезаписать?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Вы уверены, что хотите удалить шаблон \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Проблема выполнения команды (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "ИД процесса: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Имя файла для перетаскиваемого текста:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Пожалуйста, сделайте этот файл доступным. Повторить?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Введите новое имя для этих избранных вкладок" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Введите новое имя для этого меню" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Переименовать/переместить %d выбранных файлов/каталогов?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Переименовать/переместить выбранный \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Заменить этот текст?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Перезапустите Double Commander для применения изменений" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ОШИБКА: Проблема с загрузкой библиотеки Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Выберите тип файла для добавления расширения \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Выделено: %s из %s, файлов: %d из %d, каталогов: %d из %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Выберите исполняемый файл" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Пожалуйста, выберите только файлы контрольных сумм!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Укажите путь к следующему тому" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Изменение метки диска" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Специальные каталоги" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Добавить путь из активной панели" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Добавить путь из неактивной панели" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Диалог выбора каталога" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Использовать переменную окружения..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Каталог Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Переменная окружения..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Другая специальная папка Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Специальная папка Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Сделать относительным к пути из избранных каталогов" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Сделать путь абсолютным" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Сделать относительным к спец. папке DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Сделать относительным к переменной окружения..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Сделать относительным к спец. папке Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Сделать относительным к другой спец. папке Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Использовать специальные пути DC..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Использовать путь из избранных каталогов" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Использовать другую специальную папку Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Использовать специальную папку Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Вкладка (%s) заблокирована! Открыть каталог в другой вкладке?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Переименовать вкладку" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Новое имя вкладки:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Целевой путь:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Ошибка! Не удалось найти файл конфигурации TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Ошибка! Не удалось найти исполняемый файл TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Ошибка! TC всё ещё запущен, но для этой операции он должен быть закрыт.\n" "Закройте его и нажмите OK или нажмите ОТМЕНА для прекращения." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Ошибка! Не удалось найти каталог с панелями инструментов TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Укажите место и имя для сохранения файла панели инструментов TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Окно терминала отключено. Хотите его включить?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "ВНИМАНИЕ! Завершение процесса может привести к нежелательным результатам, в том числе к потере данных или к нестабильной работе системы. Вы действительно хотите завершить процесс?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Протестировать выбранные архивы?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "В буфер обмена скопировано: \"%s\"" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Расширение выделенного файла отсутствует в каких-либо типах файлов" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Укажите файл \".toolbar\" для импорта" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Укажите файл \".BAR\" для импорта" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Укажите место и имя файла панели инструментов для восстановления" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Сохранено!\n" "Имя файла панели инструментов: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Выделено слишком много файлов" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Неопределённый" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ОШИБКА: Неожиданное использование древовидного меню!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<БЕЗ ТИПА>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<БЕЗ ИМЕНИ>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Имя пользователя:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Имя пользователя (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "ПРОВЕРКА:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Проверить выбранные контрольные суммы?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Целевой файл повреждён, не совпадает контрольная сумма!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Метка диска:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Введите размер тома:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Хотите настроить расположение библиотеки Lua?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Стереть %d выбранных файлов/каталогов?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Стереть выбранный \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "с" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Неверный пароль!\n" "Пожалуйста, попробуйте ещё раз!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Автоматически переименовывать в \"имя (1).тип\", \"имя (2).тип\" и т.д.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Счётчик" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Дата" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Название шаблона" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Имя переменной" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Значение переменной" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Введите имя переменной" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Введите значение переменной \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Игнорировать, просто сохранить как [последний];Запросить подтверждение сохранения;Сохранить автоматически" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Расширение" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Имя" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без изменений;ПРОПИСНЫЕ;строчные;С прописной;Каждое Слово С Прописной;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Последние использованные]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Последние значения;Последний шаблон;Значения по умолчанию" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Групповое переименование" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Символ с позиции x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Символы с позиции x по y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Дата полностью" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Время полностью" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Счётчик" #: ulng.rsmulrenmaskday msgid "Day" msgstr "День" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "День (2 цифры)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "День недели (краткий, т.е., \"Пн\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "День недели (полный, т.е., \"понедельник\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Расширение" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Полное имя файла с путём и расширением" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Полное имя файла, символы с позиции x по y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Час" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Час (2 цифры)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Минута" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Минута (2 цифры)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Месяц" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Месяц (2 цифры)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Название месяца (краткое, т.е., \"янв\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Название месяца (полное, т.е., \"Январь\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Имя" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Родительская папка(и)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Секунда" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Секунда (2 цифры)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Переменная на лету" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Год (2 цифры)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Год (4 цифры)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Плагины" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Сохранить шаблон как" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Шаблон с таким именем уже существует. Переписать?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Введите новое имя шаблона" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Шаблон \"%s\" был изменён.\n" "Хотите сохранить его сейчас?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Сортировка шаблонов" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Время" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Внимание, одинаковые имена!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "В файле содержится неверное количество строк: %d, должно быть: %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Сохранить;Очистить;Спросить" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Нет эквивалентной внутренней команды" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Извините, нет окон \"Поиск файлов\"..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Извините, нет других окон \"Поиск файлов\"..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Разработка" #: ulng.rsopenwitheducation msgid "Education" msgstr "Образование" #: ulng.rsopenwithgames msgid "Games" msgstr "Игры" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Графика" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "Приложения (*.app)|*.app|Все файлы (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Мультимедиа" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Сеть" #: ulng.rsopenwithoffice msgid "Office" msgstr "Офис" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Другое" #: ulng.rsopenwithscience msgid "Science" msgstr "Наука" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Настройки" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Система" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Инструменты" #: ulng.rsoperaborted msgid "Aborted" msgstr "Прервано" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Вычисление контрольной суммы" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Подсчёт" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Вычисление \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Объединение" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Объединение файлов \"%s\" в \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копирование" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Копирование из \"%s\" в \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Копирование \"%s\" в \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Создание каталога" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Создание каталога \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Удаление" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Удаление в \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Удаление \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Выполнение" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Выполнение \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Распаковка" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Распаковка из \"%s\" в \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Список" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Список \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Перемещение" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Перемещение из \"%s\" в \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Перемещение \"%s\" в \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упаковка" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Упаковка из \"%s\" в \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Упаковка \"%s\" в \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "На паузе" #: ulng.rsoperpausing msgid "Pausing" msgstr "Установка на паузу" #: ulng.rsoperrunning msgid "Running" msgstr "Выполняется" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Установка свойства" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Установка свойства в \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Установка свойства на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Разрезание" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Разрезание \"%s\" в \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Запускается" #: ulng.rsoperstopped msgid "Stopped" msgstr "Остановлено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Останавливается" #: ulng.rsopertesting msgid "Testing" msgstr "Проверка" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Проверка в \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Проверка \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверка контрольной суммы" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Проверка контрольной суммы в \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Проверка контрольной суммы из \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Ожидание ответа источника" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Ожидание ответа от пользователя" #: ulng.rsoperwiping msgid "Wiping" msgstr "Стирание" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Стирание в \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Стирание \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Работа" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Добавить в &начало;Добавить в конец;\"Умное\" добавление" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Добавление нового типа файлов" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Для изменения редактируемых настроек архиватора нажмите \"Применить\" или \"Удалить\" для удаления" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Зависит от режима, дополнение команд" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Если не пустая" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Длинное имя архива" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Выбрать исполняемый файл" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Короткое имя архива" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Переопределить кодировку вывода" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Вы уверены, что хотите удалить: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Экспортированные настройки архиватора" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "<код завершения>" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Экспорт настроек архиватора" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Экспортирование завершено: %d в файл \"%s\"." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Выберите архиватор(ы) для экспорта" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Список с длинными именами файлов" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Список с короткими именами файлов" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Импорт настроек архиватора" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Импортирование завершено: %d из файла \"%s\"." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Выберите файл для импорта настроек архиватора(ов)" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Выберите архиватор(ы) для импорта" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Использовать только имя, без пути" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Использовать только путь, без имени" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Длинное имя архиватора" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Короткое имя архиватора" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Заключать в кавычки все имена" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Заключать в кавычки имена с пробелами" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Имя одного файла для обработки" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Целевая поддиректория архива" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Использовать кодировку ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Использовать кодировку UTF-8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Укажите место и имя файла для сохранения настроек архиватора(ов)" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Имя типа архива:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Связать плагин \"%s\" с расширением:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Первой;Последней;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Классическая (по умолчанию);В алфавитном порядке (но язык первый)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Развернуть всё;Свернуть всё" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Активная панель слева, неактивная справа;Левая панель слева, правая справа" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Введите расширение" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Добавить в начало;Добавить в конец;По алфавиту" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "отдельное окно;свёрнутое отдельное окно;панель операций" #: ulng.rsoptfilesizefloat msgid "float" msgstr "плавающий" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Сочетание %s для cm_Delete будет зарегистрировано, поэтому оно может быть использовано обратным этой настройке." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Добавить горячую клавишу для %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Добавить сочетание" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Не удалось установить клавиатурное сочетание" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Изменить сочетание" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Команда" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Сочетание %s для cm_Delete имеет параметр, который перекрывает эту настройку. Хотите изменить этот параметр для использования глобально?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Сочетание %s для cm_Delete нуждается в изменении параметра для соответствия сочетанию %s. Хотите изменить это?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Описание" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Изменить горячую клавишу для %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Исправить параметр" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Горячая клавиша" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Горячие клавиши" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<нет>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Параметры" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Установить сочетание для удаления файла" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Чтобы эта настройка работала с сочетанием %s, сочетание %s должно быть назначено на cm_Delete, но оно уже назначено на %s. Хотите изменить это?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Сочетание %s для cm_Delete - это сочетание клавиш, для которого не может быть назначена реверсивная клавиша Shift. Эта настройка может не работать." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Горячая клавиша уже используется" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Горячая клавиша %s уже используется." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Изменить на %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "уже используется для %s в %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "уже используется для этой команды, но с другими параметрами" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Архиваторы" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Автообновление" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Поведение" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Краткий" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Цвета" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Колонки" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Конфигурация" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Наборы колонок" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Избранные каталоги (дополнительно)" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Перетаскивание" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Kнопка списка дисков" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Избранные вкладки" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Файловые ассоциации (дополнительно)" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Файловые ассоциации" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Новый" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Файловые операции" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Файловые панели" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Поиск файлов" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Список файлов" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Список файлов (дополнительно)" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Типы файлов" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Вкладки каталогов" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Вкладки каталогов (дополнительно)" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифты" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Подсветка" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Горячие клавиши" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Значки" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Список исключений" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавиши" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Язык" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Вид окна" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Протокол" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Разное" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Мышь" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Групповое переименование" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Опции \"%s\" изменены.\n" "\n" "Хотите сохранить изменения?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Плагины" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Быстрый поиск/фильтр" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Панель инструментов" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Панель инструментов (дополнительно)" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Центральная панель" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Инструменты" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Подсказки" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Древовидное меню" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Цвета древовидного меню" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Нет;Командная строка;Быстрый поиск;Быстрый фильтр" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Левая кнопка;Правая кнопка;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "вверху списка файлов;после каталогов (если каталоги отсортированы перед файлами);в отсортированной позиции;внизу списка файлов" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "плавающий (пользовательский);байты (пользовательский);килобайты (пользовательский);мегабайты (пользовательский);гигабайты (пользовательский);терабайты (пользовательский)" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Плагин %s уже назначен для следующих расширений:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "От&ключить" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Включить" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Состояние" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Описание" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Имя файла" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Расширения" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Плагины" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Имя" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Сортировка WCX-плагинов возможна только при показе плагинов по расширению!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Ассоциация" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Выберите библиотеку Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Переименование типа файлов" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Чувствителен;Н&е чувствителен" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файлы;Катало&ги;Ф&айлы и каталоги" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ск&рывать панель фильтра, когда она не в фокусе;Сохранять настройки, изменённые через панель фильтра" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "не чувствителен к регистру;соответственно локальным установкам (аАбБгГ);сначала верхний регистр, потом нижний (АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "сортировать по имени и показывать первыми;сортировать как файлы и показывать первыми;сортировать как файлы" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Алфавитная, с учётом особенностей языка;Алфавитная с сортировкой спецсимволов;Естественная сортировка: алфавитно-числовая;Естественная с сортировкой спецсимволов" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Вверху;Внизу;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Разд&елитель;Внутрення&я команда;Вне&шняя команда;Мен&ю" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Чтобы изменить настройки всплывающих подсказок ПРИМЕНИТЕ или УДАЛИТЕ текущие изменения" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Имя:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" уже существует!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Вы уверены, что хотите удалить: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Экспортированные настройки подсказок" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Экспорт настроек подсказок" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Экспортирование завершено: %d в файл \"%s\"." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Выберите тип(ы) файлов для экспорта" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Импорт настроек подсказок" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Импортирование завершено: %d из файла \"%s\"." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Выберите файл для импорта настроек подсказок" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Выберите тип(ы) файлов для импорта" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Укажите место и имя файла для сохранения настроек подсказок" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Имя" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Штатный - Копия (x) имяфайла.тип;Windows - имяфайла (x).тип;Другой - имяфайла(x).тип" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не менять позицию;использовать то же, что и для новых файлов;в отсортированной позиции" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "С полным абсолютным путём;С путём относительно %COMMANDER_PATH%;С путём относительно указанного" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "содержит(с учётом регистра)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "содержит" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(с учётом регистра)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Поле \"%s\" не найдено!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!содержит(с учётом регистра)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!содержит" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(с учётом регистра)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!рег. выраж." #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Плагин \"%s\" не найден!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "рег. выраж." #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Значение \"%s\" поля \"%s\" не найдено!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Файлов: %d, папок: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Не удалось изменить права доступа для \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Не удалось изменить владельца для \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Каталог" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Несколько типов" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Именованный канал" #: ulng.rspropssocket msgid "Socket" msgstr "Сокет" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Особое блочное устройство" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Особое символьное устройство" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Символьная ссылка" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Неизвестный тип" #: ulng.rssearchresult msgid "Search result" msgstr "Результаты поиска" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ПОИСК" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<безымянный шаблон>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Поиск файлов с DSX-плагином уже запущен.\n" "Необходимо завершить его, прежде чем начать новый." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Поиск файлов с WDX-плагином уже запущен.\n" "Необходимо завершить его, прежде чем начать новый." #: ulng.rsselectdir msgid "Select a directory" msgstr "Выберите каталог" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Самый новый;Самый старый;Самый большой;Самый маленький;Первый в группе;Последний в группе" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Выберите окно" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Показат&ь %s в справке" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Все" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Категория" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Колонка" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Команда" #: ulng.rssimpleworderror msgid "Error" msgstr "Ошибка" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Не удалось!" #: ulng.rssimplewordfalse msgid "False" msgstr "Нет" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Имя файла" #: ulng.rssimplewordfiles msgid "files" msgstr "файлы" #: ulng.rssimplewordletter msgid "Letter" msgstr "Буква" #: ulng.rssimplewordparameter msgid "Param" msgstr "Параметры" #: ulng.rssimplewordresult msgid "Result" msgstr "Результат" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Успешно!" #: ulng.rssimplewordtrue msgid "True" msgstr "Да" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Переменная" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Рабочий каталог" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Байт" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гигабайт" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Килобайт" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабайт" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабайт" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлов: %d, Каталогов: %d, Размер: %s (%s байт)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Не удалось создать каталог назначения!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Неправильный формат размера файла!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Невозможно разрезать файл!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Количество частей больше 100! Продолжить?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Автоматически;1457664 B - 3.5\" High Density 1.44 M;1213952 B - 5.25\" High Density 1.2 M;730112 B - 3.5\" Double Density 720 K;362496 B - 5.25\" Double Density 360 K;98078 KB - ZIP 100 MB;650 MB - CD 650 MB;700 MB - CD 700 MB;4482 MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Выберите каталог:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Только просмотр" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Другие" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Примечание" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Плоский" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Ограниченный" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Простой" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Невероятное" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Чудесное" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Потрясающее" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Выберите каталог из истории каталогов" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Выберите избранные вкладки:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Выберите команду из истории командной строки" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Выберите действие из главного меню" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Выберите действие из панели инструментов" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Выберите каталог из избранных каталогов:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Выберите каталог из истории просмотренных файлов" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Выберите ваш файл или каталог" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Ошибка создания символьной ссылки." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Текст по умолчанию" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Простой текст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ничего не делать;Закрыть вкладку;Доступ к избранным вкладкам;Меню вкладок" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Дня (дней)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Часа(ов)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Минуты (минут)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Месяца(ев)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунды (секунд)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Недели (недель)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Года (лет)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Переименовать избранные вкладки" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Переименовать подменю избранных вкладок" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Поиск различий" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Редактор" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Ошибка открытия программы сравнения" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Ошибка открытия редактора" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Ошибка открытия терминала" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Ошибка открытия программы просмотра" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Значение из системы;1 сек;2 сек;3 сек;5 сек;10 сек;30 сек;1 мин;Никогда не скрывать" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Объединить подсказку DC и системную, сначала из DC;Объединить подсказку DC и системную, сначала системная;Показать подсказку DC, если возможно, и системную, если нет;Показать только подсказку DC;Показать только системную подсказку" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Просмотр" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Пожалуйста, сообщите о данной ошибке на баг-трекер с описанием ваших действий и файлом:%sНажмите %s для продолжения работы или %s для выхода из программы." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Обе панели, из активной в неактивную" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Обе панели, слева направо" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Путь панели" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Заключить каждое имя в квадратные скобки или то, что вы хотите" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Только имя файла, без расширения" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Полное имя файла (путь + имя файла)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Помощь с переменными \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Запрос ввода параметра со значением по умолчанию" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Последняя папка в пути панели" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Последняя папка в пути файла" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Левая панель" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Временный файл со списком имён файлов" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Временный файл со списком полных имён файлов (путь+имя файла)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Список в UTF-16LE с BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Список в UTF-16LE с BOM, имена заключены в кавычки" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Список в UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Список в UTF-8, имена заключены в кавычки" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Временный файл со списком имён файлов с относительным путем" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Только расширение файла" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Только имя файла" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Прочие возможные примеры" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Путь без разделителя в конце" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Отсюда и до конца строки указателем переменной с процентами будет знак \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Возвращает знак процента" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Отсюда и до конца строки указателем переменной с процентами снова будет знак \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Добавить перед каждым именем \"-a \" или то, что вы хотите" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Запрос;Значение по умолчанию]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Имя файла с относительным путем" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Правая панель" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Полный путь второго выбранного файла в правой панели" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "До выполнения показать команду" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Простое сообщение]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Будет показано простое сообщение" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Активная панель (источник)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Неактивная панель (назначение)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Имена файлов будут взяты в кавычки (по умолчанию)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Команда будет выполнена в терминале, терминал останется открытым" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Пути с разделителем в конце" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Имена файлов не будут взяты в кавычки" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Команда будет выполнена в терминале, после этого терминал будет закрыт" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Пути без разделителя в конце (по умолчанию)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Сеть" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Корзина" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Внутренняя программа просмотра Double Commander" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Некорректное качество" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Кодировка" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Тип файла" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Новый размер" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s не найден!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Карандаш;Прямоугольник;Эллипс" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "во внешнем просмотрщике" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "во встроенном просмотрщике" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Число замен: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Замена не состоялась." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Набор \"%s\" не существует" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.ro.po�����������������������������������������������������������0000644�0001750�0000144�00001322360�15104114162�017274� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Maximilian Machedon <maximilian.machedon@gmail.com>, 2017. msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2015-12-01 15:48+0300\n" "Last-Translator: Maximilian Machedon <maximilian.machedon@gmail.com>\n" "Language-Team: Maximilian Machedon\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);;\n" "X-Generator: Virtaal 0.7.1\n" "X-Native-Language: Română\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Se compară... %d%% (ESC pentru a renunța)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fișiere găsite: %d (Identice: %d, Diferite: %d, Unice la stânga: %d, Unice la dreapta: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "De la Dreapta la Stânga: Copiază %d fișiere, dimensiune totală: %d octeți" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "De la Stânga la Dreapta: Copiază %d fișiere, mărime totală: %d octeți" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Alege șablon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Verifică spațiul liber (&h)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copiază atribute (&y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiază posesor (&w)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copiază &permisiunile" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiază d&ată/timp" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corectează legături (&k)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Elimină eticheta doar citire (&g)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xclude directoarele goale" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Urmărește &legăturile" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervă spațiu" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Verifică" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Ce să fac când nu se pot seta numele de fișier, atributele, etc." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Utilizează șablon" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Când dir&ectorul există" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Când &fișierul există" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Când &nu se poate seta proprietate" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<niciun șablon>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiază în clipboard" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Generează" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Pagină de pornire:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revizie" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versiune" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Resetează" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Alege atribute" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arhivează" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimat" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Director" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Criptat (&e)" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ascuns (&h)" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Doar citire (&n)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Dis&persat" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Legătură &simbolică" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistem (&y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporar" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atribute NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atribute generale" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altele" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Ca te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calculează suma de control..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Deschide fișierul sumă de control după ce se termină activitatea" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&reează sume de control separate pentru fiecare fișier" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Salvează fișierul/fișierele sumă de control în:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifică sumă de control..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codificare" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onectează" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestionar de conexiune" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Conectează la:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&daugă în Coadă" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pțiuni" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sal&vează aceste opțiuni ca implicite" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiază fișier(e)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Coadă nouă" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Coada 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Coada 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Coada 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Coada 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Coada 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Salvează descrierea" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentariu fișier/dosar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditează comentariu pentru:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codificar&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Auto compară" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Mod Binar" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Renunță" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiază Bloc la Dreapta" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiază Bloc la Dreapta" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiază Bloc la Stânga" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiază Bloc la Stânga" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refă" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Refă" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selectează to&ate" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Anulează" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Anulează" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "Găsește (&f)" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Găsește" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Găsește următorul" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Găsește următorul" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "Înlocui&re" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Înlocuire" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prima Diferență" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prima Diferență" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Mergi la Linia..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Mergi la Linia" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignoră majusculele" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignoră spații goale" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Păstrează Derularea" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Ultima Diferență" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Ultimele Diferențe" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferențe de Linie" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Următoarea Diferență" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Următoarea Diferență" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Deschide la Stânga..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Deschide la Dreapta..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pictează Fundalul" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Diferența Precedentă" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferența Precedentă" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Reîncarcă" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Reîncarcă" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Salvează" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Salvează" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Salvează ca..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Salvează ca..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Salvează la Stânga" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Salvează la Stânga" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Salvează la Stânga Ca..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Salvează la Stânga Ca..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Salvează la Dreapta" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Salvează la Dreapta" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Salvează la Dreapta Ca..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Salvează la Dreapta Ca..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Compară" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Compară" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificare" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificare" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Compară fișierele" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Stânga (&l)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "D&reapta" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acțiuni" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opțiuni" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Adaugă scurtătură nouă secvenței" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Înlătură ultima scurtătură din secvență" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Doar pentru aceste controale" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (fiecare pe un rând separat):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Scurtături:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Despre" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configurare" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configurare" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiază" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Tăiere" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Șterge" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "Găsește (&f)" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Găsește" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Găsește următorul" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Găsește următorul" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Mergi la Linia..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Lipește" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refă ultima acțiune" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Refă ultima acțiune" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "Înlocui&re" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Înlocuire" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "SelectareTo&ate" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Selectează toate" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Anulează" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Anulează" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Închide" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ieșire" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nou" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nou" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Deschide (&o)" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Deschide" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Reîncarcă" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Salvează" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Salvare C&a.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Salvează Ca" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Deschide ca" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Salvează ca" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Evidențiere sintaxă" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Sfârșit de linie" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Revo&care" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensibil la m&ajuscule" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Caută d&e la cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expresii ®ulate" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Doar &textul selectat" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Numai cuvinte întregi (&w)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opțiuni" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Înlocui&re cu:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Caută (&s) după:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direcție" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Despachetează fișiere" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Despachetează n&umele de căi dacă sunt stocate cu fișierele" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Despachetează fiecare arhivă într-un subdosar &separat (nume de arhivă)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Suprascrie fișierele existente (&v)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Spre &dosarul:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extrage fișierele ce se potrivesc măștii de fișier:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Parolă pentru fișiere criptate:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Se așteaptă..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nume fișier:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Din:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Apăsați Închide când fișierele temporare pot fi șterse!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "La panou (&t)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vizualizează toate" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operațiunea curentă:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Din:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "La:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietăți" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altul" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conține:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Creat:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cale:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grup" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Ultima accesare:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Ultima modificare:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Ultima schimbare de status:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Proprietar (&w)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mărime:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Legătură simbolică la:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nume" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valoare" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Module" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietăți" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Închide" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Revoc&are" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "În&chide" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Închide" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Editează" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Aprovizionează caseta cu &liste" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Du-te la fișier (&g)" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Găsește Date" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "U<ima căutare" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Căutare &nouă" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Pornește (&s)" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Vizualizare" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adaugă" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Încarcă (&o)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "S&alvează" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sal&vează cu \"Pornește în director\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Dacă e salvat atunci \"Pornește în director\" va fi restaurat când se încarcă șablonul. Utilizați dacă doriți să fixați căutarea la un director anume" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Utilizează șablonul" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Găsește fișiere" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensibili&tate la majuscule" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data de la:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Data (&e) până la:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Măr&ime de la:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Mărime (&z) până la:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Găsește &text în fișier" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Urmează legăturile simbolice (&y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Găsește fișierele care NU c&onțin textul" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nu mai vechi (&o) decât:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Caută după o parte din numele fișierului (&h)" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expresii ®ulate" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Înlocuiește (&p) cu" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Directoarele și &fișierele selectate" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Expresie regulată" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Timp de la:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ti&mp până la:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utilizează pluginul căutare:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Introduceți numele de directoare ce ar trebui excluse de la căutare separate cu \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Introduceți numele de directoare ce ar trebui excluse de la căutare separate cu \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introduceți numele de fișiere separate cu \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Modul" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valoare" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Directoare" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Fișiere" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Găsește Date" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&bute" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codificare (&g):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xclude subdirectoarele" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Exclude fișierele" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Mască &fișier" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Pornește în &dosarul" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Caută su&bdosarele:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Căutări &precedente:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opțiuni" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Înlătură din listă" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Arată toate elementele găsite" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Arată în Vizualizator" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Vizualizează" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avansat" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Încarcă/Salvează" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Module" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Rezultate" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Găsește (&f)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Caută" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensibilitate la m&ajuscule" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expresii ®ulate" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Parolă:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nume utilizator:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Creează legătură dură" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinația spre care va duce legătura" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nume &legătură" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importă toate!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importă selectate" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Selectați elementele pe care doriți să le importați" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Când faceți click într-un sub-meniu, se va selecta întregul meniu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Țineți apăsat CTRL și faceți click pentru a selecta multiple elemente" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Legător" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Salvează în..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nume &fișier" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "În jos (&w)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "În jos" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Ște&rge" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Şterge" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "În s&us" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "În sus" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Despre (&a)" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Adaugă numele de fișiere liniei de comandă" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Adaugă cale și nume de fișier liniei de comandă" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiază calea la linia de comandă" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Pe scurt" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vizualizare pe Scurt" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calculează spațiul &ocupat" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Schimbă directorul" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Schimbă directorul la acasă" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Schimbă Directorul la Părinte" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Schimbă directorul la rădăcină" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calculează &suma de control..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verificare sumă de control..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Curăță fișierul jurnal" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Golește fereastra de jurnal" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Închide to&ate Filele" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "În&chide fila" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Următoarea Linie de Comandă" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Setează linia de comandă la comanda următoare în istoric" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Linia de Comandă Precedentă" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Setează linia de comandă la comanda precedentă în istoric" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Plin" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vizualizare Coloane" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Compară după &Conținut" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "&Compară Dosare" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Compară Dosarele" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Arată meniul contextual" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiază" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copiază toate &coloanele afișate" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Co&piază numele de fișier(e) cu căi complete" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiază numele de &fișier(e) în Clipboard" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiază fișierele fără a cere confirmarea" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiază în același panou" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiază" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Afișează Spațiu Ocupat (&w)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Taie" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Istoricul dosarelor" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Listă dosare (&h)" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editează" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editează Co&mentariu..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editează un fișier nou" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editează calea deasupra fișierului listă" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Comută &Panourile" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "D&ezarhivare fișiere..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Configurarea &asocierilor de fișiere..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binare Fișiere..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Arată Proprietățile &Fișierului" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Desparte F&ișierul..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vizualizare plată (&f)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Evidențiază linia de comandă" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Pune cursorul pe primul fișier din listă" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Pune cursorul pe ultimul fișier din listă" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Creează Legătură (&h) Dură..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Conținut" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Mod Panou Orizontal (&h)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Tastatură (&k)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Stânga &= Dreapta" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Deschide lista discului din stânga" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Încarcă Selecția din Clip&board" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Încarcă Se&lecția din Fișier..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Încarcă fi&le din fișier" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Creează &dosar" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selectează Toate cu aceeași E&xtensie" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inversare Selecție" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selectează Toate" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Deselectează un Gr&up..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Selectează un &Grup..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Deselectează Tot&ul" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizează fereastra" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Unealtă &Redenumire Multiplă" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Conexiune Rețea..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Deconectare Rețea" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Conexiunea Rapidă (&q) Rețea..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Filă &Nouă" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Schimbă la Fila Urmă&toare" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Deschide" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Încearcă deschiderea arhivei" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Deschide fișier bară" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Deschide Dosarul într-o &Filă Nouă" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Deschide Listă &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vizualizator de Operații" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opțiuni..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Îm&pachetează Fișierele..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Determină poziția separatorului" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Li&pește" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Comută la Fila &precedentă" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtru rapid" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Căutare rapidă" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panou Vizualizare Rapidă (&q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Reîmprospătează" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mută" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mută/Redenumește fișierele fără a cere confirmare" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Redenumește" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Redenumește Fila" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurează Selecția" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "In&versează Ordinea" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Dreapta &= Stânga" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Deschide lista discului din dreapta" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Rulează &Terminalul" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sal&vează Selecția" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Salvează S&elecția în Fișierul..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Salvează file în fișier" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Caută (&s)..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Schimbă &Atributele..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloca&t cu Dosarele Deschise în File Noi" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&locat" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Blocat cu Schimbările &Dosarului Permise" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Deschide" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Deschide utilizând asocierile de sistem" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Arată meniul butonului" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Arată istoricul liniei de comandă" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Meniu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Arată Fișierele (&h) Ascunse/Sistem" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortează după &Atribute" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sortează după &Dată" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortează după &Extensie" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortează după &Nume" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "&Sortează după Mărime" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Activează/dezactivează ca fișierul conținând lista de ignorați să arate numele de fișier" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Creează &Legătură Simbolică..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Se sincronizează dosarele..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Țintă &= Sursă" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Testează Arhivă/Arhive" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturi" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vizualizare în miniatură" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Comută modul ecran complet al consolei" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferă dosarul de sub cursor spre fereastra din stânga" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferă dosarul de sub cursor spre fereastra din dreapta" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselectează Toate cu Aceeași Ex&tensie" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Vizualizează" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Arată istoricul căilor vizitate pentru zona activă" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Du-te la următoarea intrare în istoric" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Du-te la intrarea precedentă în istoric" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Vizitați Situl Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Ștergere definitivă" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ieșire" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Dosar" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Listă dosare" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Arată dosarul curent pentru panoul din dreapta în panoul din stânga" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Mergi la dosarul acasă" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Mergi în dosarul rădăcină" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Mergi în dosarul părinte" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Listă dosare" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Arată dosarul curent pentru panoul din stânga în panoul din dreapta" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cale" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiază..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Creează o legătură..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Golește" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ascunde" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selectează Toate" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mută..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Creează legătură simbolică..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opțiuni filă" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaurează" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Pornește" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comenzi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfigurare" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Fișiere" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marchează" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rețea" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Arată (&s)" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opțiuni tab" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "File (&t)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editează" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Revo&care" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ajutor" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Tastă rapidă" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adaugă" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definește..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Sensibil la Majuscule" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Introduceți masca:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Sau selectează tip selecție p&redefinit:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Creează dosar nou" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Introduceți numele noului dosar:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Dimensiune nouă" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Înălțime :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Calitatea compresiei JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Lățime :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Înălțime" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Lățime" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extensie" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Golește" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Golește" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "În&chide" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configurație" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Contor" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Contor" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dată" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dată" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Șterge" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extensie" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extensie" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Editează" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Module" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Module" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Redenumește" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Redenumește" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Resetează toate" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Salvează" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Salvare Ca.." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Sortează" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Timpu" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Timpu" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "RedenumireMultiplă" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Sensibil la Majuscule" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Activare (&b)" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpresii regulate" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Utilizează substituție" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Contor" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Găsește și Înlocuiește" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Mască" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Presetări" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extensie" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Găsește (&f)..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Numele Fișierului" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Înlocuiește (&p)..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Numărul de s&tart" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Lățime (&w)" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Actiuni" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Editează" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Vechiul Nume de Fișier" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Noul Nume de Fișier" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Calea Fișierului" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Alege o aplicație" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comandă personalizată" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Salvează asociere" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Setează aplicația selectată ca acțiune implicită" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipul de fișier ce va fi deschis: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Multiple nume de fișier" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI-uri Multiple" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nume de fișier unic" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI Singular" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplică" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Ajutor" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opțiuni" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Selectați una din subpagini, această pagină nu conține setări." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copiază" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Șt&erge" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Altele..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Redenumește" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opțiuni:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formatează modul analiză:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Activat (&n)" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Mod depanare (&b)" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Arată ieșire consolă (&h)" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Se adaugă (&i):" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ar&hivator:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Ștergere:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "De&scriere:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "E&xtensie:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Ex&trage:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extrage fără cale:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Poziție ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Rază de căutare ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Listă:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Arhivatoare:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Finalizarea listării (opțional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&matul listării:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Pornirea listării (&g opțional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Șir de interogare parolă:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Creează o arhivă cu extracție autonomă:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Test:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Configurare A&utomată" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adițional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Când mărimea, data sau atributele se &schimbă" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pentru căile următoare și subdosarele lor:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Când &fișierele sunt create, șterse sau redenumite" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Când aplicația e în fundal (&b)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Dezactivează auto-împrospătarea" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Împrospătează lista de fișiere" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Arată întotdeauna iconița de notificare (&w)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Ascunde automat dispozitivele demontate (&h)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mută iconița în zona de notificare când se minimizează (&v)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Permite o singură copie DC &la un moment dat" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aici puteți introduce unul sau mai multe dispozitive sau puncte de montare, separate prin \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Dispozitive interzise (&b)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Mărimea coloanelor" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Arată extensiile fișierelor" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "aliniate (&g cu Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "imediat după numele fișie&rului" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Numărul coloanelor fixe" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Lățimea coloanelor fixe" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utilizează Indicator colorat &gradat" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Mod Binar" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Text:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Fundal 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Culoarea de fundal a in&dicatorului:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Culoarea de prim plan a &Indicatorului:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Succes:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Taie &textul la mărimea coloanei" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linii orizontale (&h)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linii &verticale" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Umple a&utomat coloanele" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Arată grila" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Mărime automată coloane" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Mărime automată coloană (&z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Istoricul liniei de co&mandă" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Istoricul &dosarului" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Istoricul măștii &fișierului" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Filele dosarelor" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sal&vează configurația" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Istoricul (&h) Caută/Înlocuiește" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Dosare" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Locația fișierelor de configurare" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Salvați la ieșire" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Ordinea de sortare a ordinii de configurare în arborele stâng" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Setează în linia de comandă" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Dosarul p&rogramului (versiunea portabilă)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Dosarul acasă al &utilizatorului" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nou" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Salvează ca" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Salvează" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permite Supraculoare" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generale" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Margine cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fundal:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fundal 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Con&figurează afișarea pe coloane:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Culoare cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text cursor:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Mărime:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Culoare text:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Culoare marcaj:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Adaugă o coloană" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Poziția panoului cadru după comparare:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Adaugă o copie a elementului selectat" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Adaugă un separator" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Adaugă dosarul pe care îl voi tasta" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Restrânge toate" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Șterge elementul selectat" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Inserează dosarul pe care îl voi tasta" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Deschide toate ramurile" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Adaugă..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Copie de rezervă..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Șterge..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportă..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importă..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Inserează..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Diverse..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Unele funcții pentru a selecta ținta potrivită" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Sortează..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Când se adaugă un dosar, adaugă și ținta" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Extinde întotdeauna arborele" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Arată numai variabilele de mediu valide" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Arată [și calea] în popup" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nume, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nume, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista de dosare (reordonează cu glisare și fixare)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Alte opțiuni" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nume:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Cale:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Țintă:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...numai nivelul curent al intrării/intrărilor selectat(e)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Scanează toată calea dosarului pentru a le valida pe cele care chiar există" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Scanează toată calea dosarului și a țintei pentru a le valida pe cele care chiar există" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "către o un fișier listare dosar (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Mergi la configurarea informațiilor legate de TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Mergi la configurarea informațiilor legate de TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "dintr-un fișier listare dosar (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "din \"wincmd.ini\" al TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Restaurează o copie de rezervă a listării dosarului" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Salvează o copie de rezervă a listării dosarului curentă" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Caută și înlocuiește..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...totul, de la A la Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...numai un grup de elemente" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...conținutul submeniului/submeniurilor selectate, fără sub-nivel" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...conținutul submeniului/submeniurilor și tuturor sub-nivelurilor" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Testează meniul ce rezultă" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Adăugare din cadrul principal:" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Dintre toate formatele acceptate, întreabă de fiecare dată care să fie folosit" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Când se salvează text Unicode, salvează-l în format UTF8 (altfel va fi UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Când se glisează și fixează text, generează automat un nume de fișier (altfel utilizatorul va fi întrebat)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Arată fereastra de confirmare după renunțare" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Când se glisează și fixează text în cadre:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plasează formatul cel mai dorit în capul listei (folosește glisare și fixare):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(dacă cel mai dorit nu este prezent, îl vom folosi pe cel de-al doilea și așa mai departe)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(nu va funcționa cu unele aplicații sură, așa că încercați să debifați dacă apar probleme)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Arată sistem de &fișiere" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Arată spațiu lib&er" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Arată etichetă (&l)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Listă dispozitive" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Fundal (&k)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Fundal (&k)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Resetează" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Salvează" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atribute Element" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "P&rim plan" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "P&rim plan" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marcaj &text" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Utilizează (și editează) schemă de setări &globală" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Utilizează schemă de setări &locală" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Îngroșat (&b)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Curs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Tăiat (&s)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "S&ubliniere" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Por&nit" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Adaugă..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Șterge..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Inserează..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortează..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Extinde întotdeauna arborele" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nu" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Alte opțiuni" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-meniu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Adaugă sub-meniu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Restrânge toate" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...numai nivelul curent al intrării/intrărilor selectat(e)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Taie" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "șterge toate!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-meniul și toate elementele sale" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "doar sub-meniul dar păstrează elementele" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "elementul selectat" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Șterge elementul selectat" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Deschide toate ramurile" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Lipește" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...totul, de la A la Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...numai un grup de elemente" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortează un singur grup de elemente" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...conținutul submeniului/submeniurilor selectate, fără sub-nivel" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...conținutul submeniului/submeniurilor și tuturor sub-nivelurilor" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testează meniul ce rezultă" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Adaugă" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Adaugă" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "În jos (&d)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Editează" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Înlătură (&v)" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Înlătură (&m)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&edenumește" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "În s&us" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Actiuni" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensii" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipuri de fișier" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Iconiță" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Numele acțiunii:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Comandă:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametri(&s):" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Cale de pornire (&h):" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editează" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Deschis în Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ia rezultatul comenzii" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Deschide" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Rulează în terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Vizualizează" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Deschide în Vizualizator" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Iconițe" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Arată fereastra de confirmare pentru:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operație de copiere (&y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operație de ștergere (&d)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Ș&terge la coș (Tasta Shift inversează această setare)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operație de șt&ergere la coș" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Elimină eticheta doar citi&re" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operație de &mutare" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Procesează comentariile cu fișiere/dosare" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Selectează numele de &fișier fără extensie la redenumire" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Arată panoul de selecție al filei în fereastra de dialog (&w)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Sari peste erorile din operațiile cu fișiere și scrie-le în fereastra jurnal (&k)" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Operații în executare" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfața cu utilizatorul" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Mărime tampon pentru operațiile cu fișiere (în K&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Afișează progresul operațiilor &inițial în" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Stilul de auto-redenumire a numelor duplicate:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Număr de treceri pentru ștergere definitivă:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permite Supraculoare" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Utilizează Cursor Cadru (&f)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Utilizează &Selecție Inversată" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Margine cursor" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fundal (&k):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Fundal 2 (&k):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Culoare C&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xt Cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Nivelul de strălucire al panoului inactiv (&b)" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Culoare &Marcaj:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Culoare text:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Culoare T&ext:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Caută (&s) după parte din numele fișierului" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Căutare de fișiere" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Utilizează maparea memoriei pentru căutarea te&xtului în fișiere" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Utilizează fluxarea pentru căutarea textului în fișiere" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Implicit (&f)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatare" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Sortare" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensibilitate majuscule:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorect" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Format &dată și timp:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format mărime fișier (&z):" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Inserează fișiere noi:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "So&rtarea dosarelor:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Metodă &sortare:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Mută fișierele actualizate:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Adaugă" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Nu încărca lista de fișiere până când o filă este activă" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Arată paranteze pătrate în jurul dosarelor (&h)" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Evidențiază fișiere noi și actualizate (&g)" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Activează &redenumirea când se face click de două ori pe un nume" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Încarcă lista de &fișiere într-un fir de execuție separat" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Încarcă iconițele după lis&ta de fișiere" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Arată fișierele ascunse și de sistem (&y)" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Când (&w) se selectează fișiere cu <SPACEBAR>, mergi în jos la următorul fișier (ca și cu <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Șt&erge" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Șablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Culori tipuri de fișiere (sortează după trage și plasează)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tribute categorie:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Cu&loare categorie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Mască categorie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nume categorie:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Fonturi" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Adaugă tastă rapidă (&h)" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copiază" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Șterge" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Șterge tastă rapi&dă" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Editează tastă rapidă" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtru" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorii:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&menzi:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fișiere &scurtătură:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Comandă" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comandă" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Taste rapide" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descriere" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Tastă rapidă" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pentru căile următoare și subdirectoarele lor:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Arată iconițe pentru acțiuni în &meniuri" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Arată iconițe suprapuse, de exemplu pentru legături (&v)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Dezactivează iconițele speciale" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Mărime iconiță " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Arată iconițe la dreapta numelui de fișier " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Toate (&l)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Toate asociate + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Fără ico&nițe" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Doar iconițe &standard" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "A&daugă numele selectate" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Adaugă numele selectate cu calea completă (&f)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoră (nu arăta) fișierele și dosarele următoare:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Salvează în:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Săgețile Stânga, Dreapta schimbă dosarul (&f mișcare ca în Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tastare" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+Lit&ere:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Li&tere:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Litere:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Butoane plate (&f)" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "I&nterfață plată" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Afișează indicatorul de spațiu lib&er în eticheta discului" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Afișează fereastra jurnalului (&g)" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Afișează panoul de operații în fundal" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Afișează progresul bara de meniuri" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Arată l&inia de comandă" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Arată dosarul curent (&y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Arată butoanele &discului" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Arată eticheta s&pațiului liber" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Arată bu&tonul listei cu dispozitive" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Arată butoanele funcției cheie (&k)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Afișează &meniul principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Arată &bara de unelte" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Afișează eticheta spațiului &liber" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Arată bara de &stare" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Arată antetul tabstop (&h)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Arată filele dosarelor (&w)" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Arată fereastra te&rminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Arată barele cu butoane de două discuri (lățime fi&xă, deasupra ferestrelor de fișiere)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Aranjament ecran " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Îm&pachetează/Despachetează" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Copiază/Mută/Creează legătură/legătură simbolică (&y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Creează/Ș&terge dosarele" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Jurnalizează &erorile" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&reează un fișier jurnal:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Jurnalizează mesajele de &informare" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Jurnalizează operațiile cu &succes" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Module sistem de &fișiere" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Jurnalul operațiilor cu fișiere" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Jurnalizează operații" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Starea operației" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Ște&rge miniaturile pentru fișierele inexistente" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Mer&gi întotdeauna la rădăcina discului când schimbi dispozitivele" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Arată mesaje de avertizare (&w doar butonul \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Salvează miniaturile în cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturi" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixeli" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Dimensiune minia&tură:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selecție cu mausul" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Deschide cu" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Derulare" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecție" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Mod:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linie cu linie" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linie cu linie cu mișcarea cursorului (&w)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagină cu pagină" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Con&figurează" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Activare (&n)" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Ște&rge" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Ajus&tare" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descriere" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Modulele de căutare permit utilizarea algoritmilor alternativi sau a uneltelor externe (&h precum \"locate\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Module pack&er sunt utilizate pentru a lucra cu arhivele" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Modulele de conținut permit afișarea extinsă a detaliilor fișierelor, precum etichete mp3 sau atributele ima&ginii în listele de fișiere, sau utilizarea lor în căutare sau în unealta de redenumire multiplă" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Modulele pentru fișiere&le de sistem permit accesul la discurile inaccesibile prin sistemul de operare sau la dispozitive externe precum Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Modulele de vizualizare (&w) permit afișarea formatelor de fișier cum ar fi imagini, foi de calcul, baze de date etc. în Vizualizator (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activ" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Modul" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nume fișier" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Început (numele tre&buie să înceapă cu primul caracter introdus)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Sfârșit (ultimul caracter înainte de punct . trebuie să coinci&dă)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opțiuni" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Potrivire exactă de nume" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Căutare" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Caută după aceste elemente" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activează &panoul țintă când se face clic pe una din filele sale" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Arată antetul filei când există o &singură filă" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firmă închiderea tuturor filelor" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitează mărimea titlului filei la" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Arată (&w) filele blocate cu asterisc *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "File pe mai multe linii (&t)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up deschide o filă nouă în prim plan" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Deschide o filă &nouă în fila curentă" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Arată &butonul închiderii filei" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Antetele filelor dosarului" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caractere" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Poziția filelor (&b)" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nu" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Comandă:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Comandă:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Comandă:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Buton de c&lonare" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editează tastă rapidă (&k)" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserează un buton nou" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Altul..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Înlătură tastă rapidă (&y)" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Butoane plate (&f)" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Introduceți parametri de comandă, fiecare pe o linie separată. Apăsați F1 pentru a primi ajutor la parametri." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Aspect" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensiune &bară:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "Coman&dă:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametri(&s):" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajutor" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Tastă rapidă:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&niță:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Mărime iconiță (&z):" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mandă:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Cale de pornire (&h):" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Indiciu (&t):" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Copie de rezervă..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Caută și înlocuiește..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tip de buton" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Iconițe" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Păstrează fereastra terminal deschisă după execuția programului (&k)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Execută în terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Utilizează un program extern" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parametri a&diționali" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Calea spre &programul de executat" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "A&plică" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copiază" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Șt&erge" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Șablon..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Redenumește" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Altele..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Arată (&s) indiciu pentru fișierele din panoul de fișiere" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Indiciu categorie (&h):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Mască categorie:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Culoare cursor:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Număr de coloane în vizualizatorul de cărți" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurează" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Împachetează fișiere" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "C&reează arhive separate, una per fișierul/dosarul selectat" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Creează o arhivă cu e&xtracție autonomă" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Criptează (&y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mută în arhi&vă" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Arhivă &multi disc" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "P&une mai întâi în arhiva TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Îm&pachetează și numele căii (doar recursiv)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Împachetează fișierul/fișierele în fișierul:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Programe de împachetat" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Despachetează to&ate și execută" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Despachetează și exec&ută" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Proprietățile fișierului împachetat" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atribute:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Rată de compresie:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dată:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metodă:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Dimensiunea originală:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fișier:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Mărime împachetată:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Programe de împachetat:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Timp:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Închide filtrul panoului" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Introduceți textul de căutat sau filtrul" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensibil la Majuscule" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Dosare" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fișiere" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Potrivește inceputul" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Potrivește sfârșitul" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtru" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Comută între căutare și filtru" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Modul" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valoare" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Aplică" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "Revo&care" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Șablon..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Șablon..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Revocare" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Revocare" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selectați caracterele pentru inserție:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Schimbă atributele" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arhivă" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creat:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Ascuns" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Accesat:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Doar citire" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Include subdosarele" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Proprietăți timestamp" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(câmpul gri semnifică valori neschimbate)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altele" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(un câmp gri înseamnă valoare neschimbată)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Sortează" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Revocare" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Separator" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Mărime și număr de părți" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Țin&tă dosar" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Număr de părți" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Octeți (&b)" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigaocteți" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kiloocteți" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megaocteți" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Generează" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revizie" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versiune" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Creează legătură simbolică" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinația spre care va duce legătura" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nume &legătură" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Închide" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Compară" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Șablon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizează" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizează dosarele" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asimetric" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "după conținut" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignoră data" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "doar selectate" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Subdosare" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Arată:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nume" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Mărime" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dată" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dată" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Mărime" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nume" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(în fereastra principală)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Compară" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicate" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "singure" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Apăsați \"Compară\" pentru a începe" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Sincronizează" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmă suprascrierile" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&daugă nou" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Sc&himbă" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Implicit (&f)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Modul de ajustare" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tectează tipul arhivei după conținut" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Se pot ș&terge dosarele" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Suportă criptare (&n)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Arată ca fișiere normale (arată iconița programului de împachetat (&w)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Suportă împachetarea în memorie (&k)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Poate &modifica arhivele existente" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Arhiva poate conține fișiere multiple" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Poate crea arhi&ve noi" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&uportă fereastra cu opțiuni" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permite căutarea după text în arhive (&g)" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descriere:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etectează șir:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensie:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Fanioane:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nume:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Modul (&p):" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Modul (&p):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Despre Vizualizator..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Afișează mesajul despre" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiază fișier" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiază fișier" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copiază în Clipboard" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Șterge fișierul" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Șterge fișierul" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Găsește" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Găsește următorul" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Ecran complet" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Mergi la Linia..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Mergi la Linia" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Î&nainte" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Încarcă Fișierul Următor" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Precedent" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Încarcă Fișierul Precedent" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Oglindă" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mută fișier" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mută fișier" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Previzualizează" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Reîncarcă" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Reîncarcă fișierul curent" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Rotește cu 180 de grade" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Rotește cu -90 de grade" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Rotește cu +90 de grade" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Salvează" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Salvează ca..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Salvare Fișier Ca..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Captură ecran" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Selectează toate" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Arată ca &Bin" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Arată ca și Carte (&o)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Arată ca &Dec" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Arată ca &Hex" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Arată ca &Text" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Arată ca text &Wrap" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafică" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Module" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Extinde" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Extinde Imaginea" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Anulează" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Anulează" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Mărește" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Mărește" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Micșorează" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Micșorează" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Decupează" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ecran complet" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidențiază" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Desenează" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ochi roșii" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionează" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Prezentare" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Vizualizator" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagine" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Stilou" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rotește" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captură ecran" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vizualizează" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Module" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Pornește (&s)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operații cu fișiere" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Renunță" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Renunță" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Coadă nouă" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Coadă" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Coada 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Coada 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Coada 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Coada 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Coada 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Urmărește &legăturile" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Când dir&ectorul există" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Când fișierul există" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Revo&care" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametri:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Con&figurează" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Criptează (&y)" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiază d&ată/timp" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Lucrează în fundal (conexiune separată)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Înălțime" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Lățime" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Anulează Filtrul Rapid" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Anulează Operațiunea Curentă" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Deteriorat:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "General:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Lipsă:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Eroare de citire:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Succes:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Introduceți suma de control și selectați algoritmul:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifică sumă de control" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Clipboard-ul nu conține date valide." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dată" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nume" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Mărime" #: ulng.rsconfcolalign msgid "Align" msgstr "Aliniază" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Legendă" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Șterge" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Conținutul câmpului" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mută" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Lățime" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizează coloană" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copiază (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codificare" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Renunță (&b)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Toate (&l)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Adaugă (&p)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto redenumește fișierele sursă" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Revo&care" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuă" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Co&mbină" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Co&mbină toate" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Părăsește programul (&x)" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnoră toate" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nu" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Niciuna (&e)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Altele (&h)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Suprascrie (&o)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Suprascrie To&ate" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Suprascrie Toate Mai Mari (&l)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Suprascrie Toate Mai Vechi (&d)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Suprascrie Toate Mai &Mici" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "R&edenumește" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Reia" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Reîncearcă (&t)" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Sari" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Sari peste toate (&k)" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "Da (&y)" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiază fișier(e)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mută fișier(e)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauză (&s)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Pornește (&s)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Coadă" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Viteză %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Viteză %s/s, timp rămas %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicator de Spațiu Liber pe Disc" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<fără etichetă>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<fără disc>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editorul Intern al Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Mergi la linia:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Mergi la Linia" #: ulng.rseditnewfile msgid "new.txt" msgstr "nou.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Numele fișierului:" #: ulng.rseditnewopen msgid "Open file" msgstr "Deschide fișierul" #: ulng.rseditsearchback msgid "&Backward" msgstr "Înapoi (&b)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Caută" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Înainte (&f)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Înlocuiește" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Întreabă;Combină;Sari" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Întreabă;Suprascrie;Suprascrie mai vechi;Sari" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Întreabă;Nu mai seta;Ignoră erorile" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definește șablonull" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nivel(uri)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "toate (adâncime nelimitată)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "numai dosarul curent" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Dosarul %s nu există!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Găsit: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Salvează șablonul căutării" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Numele șablonului:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Scanat: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Se scanează" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Găsește fișiere" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Începi la" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Fontul &consolei" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Font &editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Font jurna&l" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Fontul principal" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Font &vizualizator" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Font Vizualizator de Carte (&b)" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "Liber %s din %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s liberi" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Accesează dată/timp" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atribute" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentariu" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Mărime comprimată" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/timpul creării" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extensie" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Leagă la" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/timpul modificării" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nume" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nume fișier fără extensie" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietar" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cale" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Mărime" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tip" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Eroare la crearea legăturii dure." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Fereastră de Copiere/Mutare" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Comparator" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Găsește fișiere" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "RedenumireMultiplă" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Vizualizator" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deselectează masca" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selectează masca" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Introduceți masca:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurează coloane personalizate" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actiuni" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editează" #: ulng.rsmnueject msgid "Eject" msgstr "Scoate" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Montează" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nou" #: ulng.rsmnunomedia msgid "No media available" msgstr "Niciun dispozitiv disponibil" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Deschide" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Deschide cu" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Altul..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaurează" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortează după" #: ulng.rsmnuumount msgid "Unmount" msgstr "Demontează" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vizualizează" #: ulng.rsmsgaccount msgid "Account:" msgstr "Cont:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parametri adiționali pentru linia de comandă a arhivatorului:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nu puteți copia/muta un fișier \"%s\" la sine însuși!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Nu se poate șterge dosarul %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ChDir la [%s] a eșuat!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Se înlătură toate filele inactive?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Această filă (%s) este blocată! Se închide oricum?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sigur doriți să închideți?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Se copiază %d fișiere/dosare selectate?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Se copiază selecția \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Se șterge fișierul copiat parțial?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Se șterge %d fișiere/dosare selectate?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Mutați %d fișiere/dosare selectate la gunoi?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Se șterge selecția \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Se mută selecția \"%s\" la gunoi?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nu s-a putut muta \"%s\" la gunoi! Ștergeți dosarul?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Discul nu este disponibil" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduceți extensia fișierului:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduceți numele:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Eroare CRC în arhivarea datelor" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Date corupte" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nu s-a putut efectua conexiunea la server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nu s-a putut copia fișierul %s la %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Există deja un dosar cu numele de \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Data %s nu este admisă" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Dosarul %s există deja!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funcția abandonată de utilizatoru" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Eroare la închiderea fișierului" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Eroare la crearea fisierului" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nici un alt fișier în arhivă" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nu se poate deschide un fișier existent" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Eroare la citirea din fișier" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Eroare la scrierea fișierului" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Dosarul %s nu a putut fi creat!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Legătură nevalidă" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nici un fișier găsit" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memorie insuficientă" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funcție neadmisă!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Eroare la comanda din meniul contextul" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Eroare la încărcarea configurației" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Eroare de sintaxă în expresia regulă!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nu s-a putut redenumi fișierul %s în %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nu se poate salva asocierea!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nu am putut salva fișierul" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nu am putut seta atributele pentru \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nu am putut seta data/timpul pentru \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nu am putut seta proprietarul/grupul pentru \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Memoria tampon este prea mică" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Prea multe fișiere de împachetat" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format necunoscut de arhivă" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Fișierul %s a fost modificat, doriți salvarea lui?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s octeți, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Suprascrie:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Fișierul %s există, se suprascrie?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Cu fișierul:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Fișierul \"%s\" nu a fost găsit." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operațiile cu fișiere active" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Câteva operații cu fișierele nu au fost finalizate. Închiderea Double Commander ar putea duce la pierderea datelor." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Fișierul %s e marcat ca doar citibil/ascuns/sistem. Se șterge?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Mărimea lui \"%s\" este prea mare pentru sistemul de fișiere destinație!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Dosarul %s există, se combină?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Urmează legătura simbolică \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importă toate!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importă selectate" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Cale" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comandă:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Nume:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Eroare în linia de comandă" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nume de fișier nevalid" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format sau fișier de configurare nevalid" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Cale nevalidă" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Calea %s conține caracter interzise." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Acesta nu este un modul valid!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Acest modul este construit pentru Double Commander pentru %s.%sNu poate funcționa cu Double Commander pentru %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Citare nevalidă" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selecția nu este validă." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Se încarcă lista de fișiere..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copiază fișierul %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Șterge fișierul %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Eroare: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Dezarhivare fișierul %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informații: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Creează legătura %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Creează dosarul %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Mută fișierul %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Împachetează în fișierul %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Elimină dosarul %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Gata: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Creează legătura simbolică %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testează integritatea fișierului %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Șterge definitiv fișierul %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Șterge definitiv dosarul %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Parolă" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Introduceți parola:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Fișier nou" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Următorul volum va fi despachetat" #: ulng.rsmsgnofiles msgid "No files" msgstr "Niciun fișier" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Niciun fișier selectat." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nu există spațiu suficient pe dispozitivul țintă, continuați?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nu există spațiu suficient pe dispozitivul țintă, reîncercați?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nu poate fi șters fișierul %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nu este implementat." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Parolă:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Parolele sunt diferite!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Introduceți parola:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Parolă (Paravan de protecție):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Reintroduceți parola pentru verificare:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Șterge (&d) %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Fișierul predefinit \"%s\" există deja. Suprascrieți?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Se redenumesc/mută %d fișiere/dosare selectate?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Se redenumește/mută \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Reporniți Double Commander pentru a aplica modificările" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selectate: %s din %s, fișiere: %d din %d, dosare: %d din %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Vă rugăm să selectați doar fișierele sumă de control!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Selectați locația volumului următor" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definește eticheta volumului" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Redenumește fila" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Noul nume al filei:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Calea țintei:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Prea multe fișiere selectate." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nume utilizator:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nume utilizator (Paravan de protecție):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Eticheta volumului:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Introduceți dimensiunea volumului:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Se șterg definitiv %d fișiere/dosare selectate?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Se șterge definitiv selecția \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Contor" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dată" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extensie" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nume" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nicio schimbare: MAJUSCULE;minuscule;Majuscule primul char; Primul char din fiecare cuvânt Majusculă" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "RedenumireMultiplă" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Caracter la poziția x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caractere de la poziția x la y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Countor" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Zi" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Zi (2 cifre)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Zi a săptămânii (scurt, ex., \"mar\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Zi a săptămânii (lung, ex., \"marți\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extensie" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Oră" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Oră (2 cifre)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minute" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minute (2 cifre)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Lună" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Lună (2 cifre)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Mule lună (scurt, ex., \"ian\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nume lună (lung, ex., \"ianuarie\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nume" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Secundă" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Secundă (2 cifre)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "An (2 cifre)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "An (4 cifre)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Module" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Timpu" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafică" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Rețea" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Altele" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Anulat" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Se calculează suma de control" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Se calculează suma de control în \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Se calculează suma de control a \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Se calculează" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Se calculează \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Se îmbină" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Se îmbină fișierele \"%s\" la \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Se copiază" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Se copiază de la \"%s\" la \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Se copiază \"%s\" la \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Se creează dosarul" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Se creează dosarul \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Se șterge" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Se șterge în \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Se șterge \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Se execută" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Se execută \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Se extrage" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Se extrage din \"%s\" la \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminat" #: ulng.rsoperlisting msgid "Listing" msgstr "Se listează" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Se listează \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Se mută" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Se mută de la \"%s\" la \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Se mută \"%s\" la \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nu a început" #: ulng.rsoperpacking msgid "Packing" msgstr "Se împachetează" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Se împachetează de la \"%s\" la \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Se împachetează \"%s\" la \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pauzat" #: ulng.rsoperpausing msgid "Pausing" msgstr "Se pauzează" #: ulng.rsoperrunning msgid "Running" msgstr "În execuţie" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Se setează proprietatea" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Se setează proprietatea în \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Se setează proprietatea lui \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Se separă" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Se separă \"%s\" la \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Se pornește" #: ulng.rsoperstopped msgid "Stopped" msgstr "Oprit" #: ulng.rsoperstopping msgid "Stopping" msgstr "Se oprește" #: ulng.rsopertesting msgid "Testing" msgstr "Se testează" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Se testează în \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Se testează \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Se verifică suma de control" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Se verifică suma de control în \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Se verifică suma de control a lui \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Se așteaptă permisiunea de a accesa sursa fișierului" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Se așteaptă răspunsul utilizatorului" #: ulng.rsoperwiping msgid "Wiping" msgstr "Se curăță" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Se curăță în \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Se curăță \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Se lucrează" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Numele tipului de arhivă:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Asociază modulul \"%s\" cu:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primul;Ultimul;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduceți extensia fișierului" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "separă fereastra;minimizează fereastra separată;panou de operații" #: ulng.rsoptfilesizefloat msgid "float" msgstr "float" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Scurtătura %s pentru cm_Delete va fi înregistrată, pentru a putea fi inversată această setare." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Adaugă tastă rapidă pentru %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Adaugă scurtătură" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nu se poate seta scurtătura" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Schimbă scurtătura" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comandă" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Scurtătura %s pentru cm_Delete are un parametru ce suprascrie această setare. Doriți să schimbați acest parametru ca să utilizeze setarea globală?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Scurtătura %s pentru cm_Delete necesită schimbarea unui parametru pentru a se potrivi cu scurtătura %s. Doriți să o schimbați?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descriere" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Editează tastă rapidă pentru %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Repară parametru" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Taste rapide" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Taste rapide" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<niciuna>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Setează scurtătura la fișierul șters" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pentru ca această setare să funcționeze cu scurtătura %s, scurtătura %s trebuie atribuită la cm_Delete dar e deja atribuită lui %s. Doriți să o schimbați?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Scurtătura %s pentru cm_Delete este o scurtătură secvențială pentru care o tastă rapidă cu Shift inversat nu poate fi atribuită. Această setare ar putea să nu funcționeze." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Scurtătură în uz" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Scurtătura %s este deja folosită." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "O schimbați la %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "utilizat pentru %s în %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "utilizat pentru această comandă dar cu parametri diferiți" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Arhivatoare" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Reîmprospătează automat" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamente" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Pe scurt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Culori" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Coloane" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configurație" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Coloane personalizate" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Listă dosare" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Trage și mută" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Butonul listei cu dispozitive" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asocieri de fișier" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nou" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operații cu fișiere" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panouri fișiere" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Căutare de fișiere" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vedere fișiere" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipuri de fișier" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Filele dosarelor" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fonturi" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Evidențiatoare" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Taste rapide" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Iconițe" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Listă de ignorate" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taste" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Limbă" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Aranjament" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Jurnal" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Diverse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Maus" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "RedenumireMultiplă" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Module" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Căutare/filtru rapid" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Bară de unelte" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Unelte" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Trucuri" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nimic;Linie de Comandă;Căutare Rapidă;Filtrare Rapidă" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Buton stânga;Buton Dreapta" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "în vârful listei de fișiere;după dosare (dacă acestea sunt sortate înaintea fișierelor);la poziția sortată;la baza listei de fișiere" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Modului %s este deja atribuit următoarelor extensii:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Dezactivează" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Activare (&n)" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Activ" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descriere" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nume fișier" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nume" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Înregistrat pentru" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensibil;&Insensibil" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fișiere;Dosa&re;Fișiere și Dosare (&n)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ascunde (&h) panoul cu filtre când nu este activ;Continuă salvarea modificărilor setării pentru sesiunea următoare" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "cu majuscule semnificative;potrivit setărilor locale (aAbBcC);mai întâi cu majuscule apoi cu minuscule (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortează după nume și arată primul;sortează ca fișiere și arată primul;sortează ca fișiere" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetic, cu accente;Sortare naturală;alfabetic și după număr" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Vârf;Bază;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparator;Comandă inte&rnă;Comandă e&xternă;Meni&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Nume categorie:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "nu schimba poziția;utilizează aceleași setări ca pentru fișierele noi;la poziția sortată" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Fișiere: %d, dosare: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nu se pot schimba drepturile de acces pentru \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nu se poate schimba proprietarul lui \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fișier" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dosar" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Tub denumit" #: ulng.rspropssocket msgid "Socket" msgstr "Soclu" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispozitiv bloc special" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispozitiv caracter special" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Legătură simbolică" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tip necunoscut" #: ulng.rssearchresult msgid "Search result" msgstr "Rezultate căutare" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Caută" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selectați un director" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Arată (&s) ajutorul pentru %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Toate" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comandă" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "Fișiere" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Octeți" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigaocteți" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kiloocteți" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megaocteți" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Teraocteți" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fișiere: %d, Dosare: %d, Mărime: %s (%s octeți)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nu s-a putut crea directorul țintă!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formatul mărimii fișierului este greșit!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nu s-a putut separa fișierul!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Numărul de părți e mai mare de 100! Continuați?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Selectați directorul:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Eroare la crearea legăturii simbolice." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Text implicit" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Text simplu" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Zi(le)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Oră/Ore" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(e)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Lună/Luni" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Secundă/Secunde" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Săptămână/Săptămâni" #: ulng.rstimeunityear msgid "Year(s)" msgstr "An(i)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Diferențiator" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Eroare la deschiderea diferențiatorului" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Eroare la deschiderea editorului" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Eroare la deschiderea terminalului" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Eroare la deschiderea vizualizatorului" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Vizualizator" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Vă rugăm raportați această eroare la sistemul de urmărire a defecțiunilor cu o descriere a ceea ce făceați și a fișierelor implicate:%sApăsați %s pentru a continua sau %s pentru a părăsi programul." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rețea" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Vizualizatorul Intern al Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificare" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Dimensiune nouă" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nu a fost găsit!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.pt_BR.po��������������������������������������������������������0000644�0001750�0000144�00001367134�15104114162�017672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2017-02-20 23:52-0300\n" "Last-Translator: José Carlos Taveira <taveirajc@gmail.com>\n" "Language-Team: José Carlos Taveira <taveirajc@gmail.com>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.8.12\n" "X-Native-Language: Português do Brasil\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparando... %d%% (ESC para cancelar)." #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Direito: Excluir %d arquivo(s)." #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Arquivos encontrados: %d (Idênticos: %d, Diferentes: %d, Único esquerda: %d, Único direita: %d " #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Equerda para Direita: Copiar %d arquivos, tam total: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Direita para Esquerda: Copiar %d arquivos, tam total: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Escolher modelo..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Verificar espaço livre" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Cop&iar atributos" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiar &propriedade" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copiar &permissões" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiar d&ata/hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corrigir lin&ks" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Flag atributo somente leit&ura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xcluir pastas vazias" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&eguir links" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espaço" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "O que fazer quando não conseguir definir hora, atributos, etc. do arquivo." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usar modelo de arquivo." #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando a pa&sta existe." #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quando o &arquivo existe." #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quando não conseguir definir propriedade." #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sem modelos>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiar para a área de transferência." #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Construir" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Página Web:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisão" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reiniciar" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Escolher atributos" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arquivo" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimido" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Pasta" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Criptografado" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Oculto" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Somente &leitura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Es&parso" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Espesso" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Link &simbólica" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporário" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributos NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributos gerais" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Como te&xto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calcular checksum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Abrir arq checksum após trabalho concluído." #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&riar arquivo checksum separado para cada arquivo." #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Gra&var arquivos checksum em:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verificar checksum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codificar" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onectar" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Excluir" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gerenciador de conexão" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Conectar a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&dicionar à fila" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pções" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sal&var estas opções como default." #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiar arquivo(s)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Salvar descrição" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentário do arquivo/pasta." #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditar comentário de:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codificando:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Comparar automaticamente." #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Modo binário" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Excluir" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Refazer" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecion&ar Todos" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Localizar" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Localizar" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Localizar próxim" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Localizar próxim" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "Substitui&r" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Substituir" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Vá para linha" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorar maiúsculas" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorar espaços" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Continuar deslocamento" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferenças de linha" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Abrir esquerdo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Abrir direito..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pintar fundo" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Recarregar" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recarregar" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Salvar" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Salvar" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Salvar como..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Salvar como..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Salvar esquerdo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Salvar esquerdo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Salvar esquerdo como..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Salvar esquerdo como..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Salvar direito" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Salvar direito" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Salvar direito como..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Salvar direito como...." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparar arquivos" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Esquerdo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Direito" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Ações" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Arquivo" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opções" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Adicionar novo atalho à sequência." #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Remover último atalho da sequência." #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Só para estes controles." #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parâmetros (cada um numa linha separada)." #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Atalhos:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Sobre" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuração" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configuração" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Excluir" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Excluir" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Localizar" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Localizar" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Localizar próxim" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Localizar próxim" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "Substitui&r" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Substituir" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecion&ar todos" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Selecionar todos" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Fechar" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Sair" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Abrir" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Abrir" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Recarregar" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Salvar" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Salvar" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Sal&var como..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Salvar como" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Abrir como" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Salvar como" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Arquivo" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Realçar sintaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fim de linha" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensível a maiúsculas" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Localizar a partir do cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expressões ®ulares" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Só &texto selecionado" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Só &palavras completas" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opção" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Substitui&r com" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Proc&urar por:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direção" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Descomprimir arquivos" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimir nomes de caminho se armazenados com os arquivos." #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimir cada arquivo para pastas &separadas (nome do arquivo)." #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Subs&tituir arquivos existentes." #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Para a &pasta:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extrair arquivos com esta máscara:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Senha de arquivos criptografados:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Aguarde..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nome de arquivo:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clique em Fechar quando o arquivo temporário puder ser apagado!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Para o painel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Ver tudo" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operação atual:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Para:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Espesso" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contém:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Criado:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nome de arquivo" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nome de arquivo" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Caminho:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Último acesso:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Última modificação:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Última alteração de estado:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propr&ietário" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamanho" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link simbólica para:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valor" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Suplementos" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Fechar" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption #, fuzzy #| msgid "actCancel" msgid "C&ancel" msgstr "actCancel" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "" #: tfrmfinddlg.actclose.caption #, fuzzy #| msgid "actClose" msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "actClose" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption #, fuzzy #| msgid "actEdit" msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "actEdit" #: tfrmfinddlg.actfeedtolistbox.caption #, fuzzy #| msgid "actFeedToListbox" msgid "Feed to &listbox" msgstr "actFeedToListbox" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption #, fuzzy #| msgid "actGoToFile" msgid "&Go to file" msgstr "actGoToFile" #: tfrmfinddlg.actintellifocus.caption #, fuzzy #| msgid "actIntelliFocus" msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "actIntelliFocus" #: tfrmfinddlg.actlastsearch.caption #, fuzzy #| msgid "actLastSearch" msgid "&Last search" msgstr "actLastSearch" #: tfrmfinddlg.actnewsearch.caption #, fuzzy #| msgid "actNewSearch" msgid "&New search" msgstr "actNewSearch" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption #, fuzzy #| msgid "actPageAdvanced" msgid "Go to page \"Advanced\"" msgstr "actPageAdvanced" #: tfrmfinddlg.actpageloadsave.caption #, fuzzy #| msgid "actPageLoadSave" msgid "Go to page \"Load/Save\"" msgstr "actPageLoadSave" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption #, fuzzy #| msgid "actPagePlugins" msgid "Go to page \"Plugins\"" msgstr "actPagePlugins" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption #, fuzzy #| msgid "actPageResults" msgid "Go to page \"Results\"" msgstr "actPageResults" #: tfrmfinddlg.actpagestandard.caption #, fuzzy #| msgid "actPageStandard" msgid "Go to page \"Standard\"" msgstr "actPageStandard" #: tfrmfinddlg.actstart.caption #, fuzzy #| msgid "actStart" msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "actStart" #: tfrmfinddlg.actview.caption #, fuzzy #| msgid "actView" msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "actView" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Salvar" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Excluir" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Carregar" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Sal&var" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "S&alvar com \"Iniciar na pasta\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Se salvado, então \"Iniciar na pasta\" será restaurado ao carregar o modelo. Use se quer fixar a procura numa determinada pasta." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usar modelo" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Localizar arquivos." #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sen&sível a maiúsculas." #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data desde:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Da&ta até:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Ta&manho desde:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Tam&anho até:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Pesquisar em arquivos." #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Localizar &texto num arquivo." #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Seguir Links &Simbólicos" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Localizar arquivos S&EM o texto." #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Mais recentes q&ue:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Procurar parte do nome de arquivo." #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressão ®ular" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Su&bstituir por" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Pastas e &arquivos selecionados." #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Expressão regular" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Hora desde:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H&ora até:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Usar plugin de procura" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Introduza os nomes das pastas a excluir da procura separados por \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Introduza os nomes dos arquivos a excluir da procura, separados por \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introduza os nomes de arquivos separados por \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Suplemento" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Pastas" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Arquivos" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Localizar Dados" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&butos" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Co&dificar" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xcluir subpastas" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excluir arquivos" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Máscara de &arquivo" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Iniciar na &pasta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Procurar em su&bpastas" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Procurar &anterior" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Abrir em Nova(s) Guia(s)" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opções" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Remover da lista" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostrar todos os itens encontrados." #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Mostrar no Editor." #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostrar no visualizador." #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avançado" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carregar/Salvar" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Suplementos" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultados" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Padrão" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Localizar" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Localizar" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensível a m&aiúsculas" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expressões ®ulares" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Senha:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nome de usuário" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Criar link físico." #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para onde o link irá apontar." #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome do &Link" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importar todos!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importar selecionado" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Selecionar as entradas que você quer importar." #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Ao clicar no submenu, será selecionado todo o menu." #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Segure CTRL e clique nas entradas para selecionar várias." #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Ligador " #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Salvar para..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Item" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nome de &arquivo" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "A&baixo" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Abaixo" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Remover" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Excluir" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "A&cima" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Acima" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Sobre" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Adicionar nome de arquivo à linha de comandos." #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Adicionar caminho e nome de arquivo à linha de comandos." #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiar caminho para a linha de comandos." #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Visão resumida" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Visão Resumida" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcular Espaço &Ocupado" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Alterar pasta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Trocar pasta para raiz" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Alterar pasta para pasta-mãe." #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Alterar pasta para raíz." #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcular check&sum..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verificar checksum..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Limpar arquivo de log." #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Limpar janela de log." #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Fech&ar todas as Guias." #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Fechar Guias Duplicatas." #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Fe&char Guia" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Linha de comandos seguinte." #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Definir linha de comandos para o comando seguinte do histórico." #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Linha de comandos anterior." #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Definir linha de comandos para o comando anterior do histórico." #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Visão de colunas." #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "&Comparar por conteúdos." #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Comparar pastas." #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparar pastas." #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuração da pasta Hotlist." #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Configuração das Guias de Favoritos" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Configuração das Guias de Pastas." #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Barra de Ferramentas" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostrar menu de contexto." #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Copiar todas guias para lado oposto." #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copiar todas &colunas mostradas." #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copiar nomes de arquivos com caminho com&pleto." #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiar nomes de &arquivos para a área de transferência." #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiar arquivos sem pedir confirmação." #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Copiar caminho completo do(s) arquivo(s) selecionado(s) sem guia de pasta." #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copiar caminho completo do(s) arquivo(s) selecionado(s)." #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiar para o mesmo painel." #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiar" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostrar espaço oc&upado." #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Cor&tar" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Mostrar Parâmetros de Comandos." #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Excluir" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Histórico da pasta" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Pasta Hotlist" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Selecionar qualquer comando e executá-lo." #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editar" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editar c&omentário." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editar novo arquivo." #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editar campo de caminho acima da lista de arquivos." #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Trocar &painéis" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extrair arquivos..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Configuração de &Associações de arquivos." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binar Arquivos..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostrar Propriedades de &Arquivo" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividir Arquivo..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Visão &Plana" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Foco na linha de comandos." #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar cursor no primeiro arquivo da lista." #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar cursor no último arquivo da lista." #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Criar li&gação física." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Conteúdo" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Modo Painéis &horizontais." #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Teclado" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Visão resumida no painel esquerdo." #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Visão de colunas no painel esquerdo." #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Esquerdo &= Direito" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Visão plana no painel esquerdo." #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Abrir lista esquerda de unidades." #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "In&verter ordem no painel esquerdo." #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Ordenar painel esquerdo por atributos." #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Ordenar painel esquerdo por &Data\"" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Ordenar painal esquerdo por &Extensão." #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Ordenar painal esquerdo por &Nome." #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Ordenar painal esquerdo por &Tamanho." #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Visão miniaturas no painel esquerdo." #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Carregar guias da Guia Favoritos." #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carregar seleção da área de transferência." #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carregar se&leção de arquivo." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Carregar guias de Arquivo." #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Criar &Pasta" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selecionar todos com a mesma e&xtensão." #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverter seleção" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecionar tudo" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Remover seleção de um grupo" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Selecionar um &grupo" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Rem&over todas as seleções" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizar janela" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Ferramenta Multirenomear" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Conectar a &rede" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Descone&ctar da rede" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Conexão &rápida a rede" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nova Guia" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Carregar a próxima Guia Favoritos na lista." #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Mudar para a guia seguinte." #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tentar abrir arquivo" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Abrir arquivo barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Abrir &pasta em nova guia" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Abrir lista do SVF" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualizador de operações" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opções..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Comprimir arquivos" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Definir posição do divisor" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Co&lar" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Carregar Guia de Favoritos Anteror na lista." #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Mudar para o se¶dor anterior." #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rápido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Procura rápida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Painel de visualização rápida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Atualizar" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Recarregar a última guia Favoritos carregada." #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mover" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mover/Renomear arquivos sem pedir confirmação." #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renomear" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Renomear Guia" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Resalvar nas últimas guias Favoritos carregadas." #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "R&estaurar seleção" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Inverter ordem" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Visão resumida do painel direito." #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Visão colunas no painel direito." #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Direito &= Esquerdo." #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Visão plana no painel direito." #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Abrir lista direita de unidades." #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Inverter ordem no painel direito." #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Ordenar painel direito por &Atributos." #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Ordenar painel direito por &Data." #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Ordenar painel direito por &Extensão." #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Ordenar painel direito por &Nome." #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Ordenar painel direito por &Tamanho." #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Visão miniatura no painel direito" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Executar &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Salvar guias atuais para uma nova guia Favoritos." #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Gra&var seleção" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Salvar s&eleção para arquivo..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Salvar guias para arquivo" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Localizar..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Todas as guias Bloqueadas com Dir Aberto em Novas guias." #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Definir todas as guias como Normal." #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Definir todas as guias como Bloqueadas." #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Todas guias bloqueadas com Alterações de Dir Permitidas." #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Alterar &atributos" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueado com pastas abertas em novos guias." #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Bloqueado" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueado com alterações de &pastas permitidas." #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Abrir usando associações do sistema." #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostrar menu de botões" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostrar histórico da linha de comandos." #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostrar arquivos &ocultos/de sistema." #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordenar por &atributos" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ordenar por &data" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordenar por &extensão" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordenar por &nome" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordenar por &tamanho" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Abrir lista de drives" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Ativar/Desativar mostrar nomes de arquivos na lista de ignorados." #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Criar &Link simbólico..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Sincronizar pastas..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destino &= Origem" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Arquivo(s) de &teste" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visão Miniaturas" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Alternar para modo console em tela cheia" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferir a pasta sob o cursor para a janela esquerda." #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferir a pasta sob o cursor para a janela direita." #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Painel Visão de Árvore" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Ordenar de acordo com os parâmetros" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Remover seleção de todos com a mesma extensão." #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Ver" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostrar histórico de caminhos visitados na visão ativa." #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ir para a entrada seguinte no histórico." #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ir para a entrada anterior no histórico." #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Ver arquivo de log" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visitar o website do Double Commander." #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Limpar" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Trabalhar com Pasta Hotlist e parâmetros." #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Sair" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Pasta" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Excluir" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Pasta Hotlist" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostrar a pasta atual do painel direito no painel esquerdo." #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Ir para a pasta home." #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Ir para a pasta raíz." #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Ir para a pasta mãe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Pasta Hotlist" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostrar a pasta atual do painel esquerdo no painel direito." #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Caminho" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiar..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Criar link..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Limpar" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ocultar" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecionar tudo" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mover..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Criar ligação simbólica..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opções da Guia" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaurar" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Iniciar" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandos" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguração" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favoritos" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Arquivos" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marcar" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rede" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Mos&trar" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opções" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Guias" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Excluir" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Selecione seu comando interno." #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Legado ordenado" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Legado ordenado" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Selecionar todas categorias por padrão." #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Seleção" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Categorias" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Nome do comando:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtro:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Dica" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Atalho" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Categoria" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ajuda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Dicas" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Atalho" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ou seleciona&r tipo de seleção predefinido." #: tfrmmkdir.caption msgid "Create new directory" msgstr "Criar nova pasta" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Introduza o nome da nova pasta" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Novo tamanho" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altura:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualidade de compressão jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Largura:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "NOme arquivo" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Limpar" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Limpar" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Fechar" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configuração" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Excluir" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Editar" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "NOme arquivo" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "NOme arquivo" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Suplementos" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Suplementos" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Ren&omear" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Renomear" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Repor tudo" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Salvar" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Salvar como..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Ordenar" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Multirenomear" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "A&tivar" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpressões regulares" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usar substituição" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Localizar && substituir" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Máscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predefinições" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extensão" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Localizar" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervalo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nome de arquivo" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Su&bstituir" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Número Inicial" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Largura" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Ações" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Editar" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Nome de arquivo antigo." #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo nome de arquivo." #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Caminho de arquivo" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Escolha uma aplicação." #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personlizado." #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Salvar associação." #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Definir aplicação selecionada como ação predefinida" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipo de arquivo a abrir: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Múltiplos nomes de arquivo." #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiplos URIs" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome de arquivo único." #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI único" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplicar" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Ajuda" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Favor selecionar uma das subpáginas. Esta página não contém definições." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Exc&luir" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Outro..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opções:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formatar modo de análise:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "A&tivo" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Modo Dep&uração" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Mostrar saída do co&nsole." #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "A ad&icionar" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ar&quivador:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Excluir:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "De&scrição:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "E&xtensão:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Ex&trair:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extrair sem caminho:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Posição da ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Intervalo de procura de ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Arquivadores:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Final da lista (opcional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&mato da lista:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Iní&cio da lista (opcional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Cadeia de consulta da palavra passe:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Criar arquivo de extração automática:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Teste:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Autoconfigurar" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Geral" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quando tamanho, data ou atributo&s mudam." #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e suas sub&pastas:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quando &arquivos são criados, apagados ou renomeados." #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quando a aplicação está em 2º &plano." #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Desativar atualização automática" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Atualizar lista de arquivos." #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mos&trar sempre ícone no tabuleiro." #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Ocultar automaticamente os dispositivos não montados." #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mo&ver ícone para o tabuleiro de sistema ao minimizar." #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Permitir só uma instância do DC de cada vez." #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aqui você pode digitar um ou mais dispositivos ou pontos de montagem, separados por \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Lista &negra de drives:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Tamanho das colunas." #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Mostrar extensões dos arquivos." #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "alin&hado (com Tab)." #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "di&retamente após nome do arquivo." #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Contagem de colunas fixas:" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Largura de colunas fixas:" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usar indicador &gradiente." #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Modo binário" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Texto:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Fundo 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Cor de fundo do in&dicador:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Cor 1º plano do &indicador:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Sucesso" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Cortar &texto pela largura da coluna." #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linhas &horizontais" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linhas &verticais." #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Preencher automaticamente colunas." #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostrar grade." #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Tamanho de coluna automático." #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Tamanho de c&oluna automático:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Histórico da linha de co&mandos." #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Histórico de &pastas." #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Histórico de máscaras de &arquivos." #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Guia de pastas." #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Gra&var configuração." #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Histórico de Locali&zar/Substituir." #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Pastas" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Localização dos arquivos de configuração." #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Salvar ao sair." #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Ordem de classificação da ordem de configuração no painel esquerdo." #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Definir na linha de comandos" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Pasta do p&rograma (versão portátil)." #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Pasta home do &usuário" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas." #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas." #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas." #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas." #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Todos" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Aplicar modificações para todas colunas." #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Excluir" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Ir para definição padrão." #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Próximo" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Anterior" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Redefinir para padrão." #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Salvar como" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Salvar" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta." #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Ao clicar para alterar algo, altere para todas as colunas." #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Geral" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Usar Moldura Cursor." #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Usar Seleção de Cor Inativa." #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Usar Seleção Invertida." #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Usar fonte e cor customizada para esta visão." #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fundo:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fundo 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Con&figurar visão colunas:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Nome da Coluna Atual]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cor do cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Texto do cursor:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Fonte:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Tamanho:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Cor do texto:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Cor do Cursor Inativa:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Cor da Marca Inativa:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Cor de marca:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma pré-visualização. Você pode mover o cursor e selecionar arquivos para obter imediatamente uma aparência real das várias configurações." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Definições para coluna." #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Adicionar coluna." #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posição do painel do quadro após a comparação:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Adicionar uma cópia da entrada selecionada" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Adicionar um guia" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Adicionar pasta. Eu irei digitar" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Expandir tudo" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Excluir item selecionado" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Inserir pasta. Eu irei digitar" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todos os ramos" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Adicionar..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Excluir..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportar..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importar..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Inserir..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Miscelâneo..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Algumas funções para selecionar o destino apropriado." #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Ordenar..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Ao adicionar pasta, adicionar também destino." #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Sempre expandir a árvore." #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Mostrar somente variáveis de ambiente válidas." #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "No popup, mostrar [caminho também]." #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nome, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nome, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Pasta Hotlist (reordenar por arrastar e soltar)." #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Outras opções" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nome:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Caminho:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Destino:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...nível atual somente dos itens selecionados." #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Verificar o caminho de todos os hotdir para validar os que realmente existem." #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Analisar todo o caminho do hotdir e destino para validar os que realmente existem." #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "Para um arquivo da pasta Hotlist (.hotlist)." #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter o existente)." #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "para um \"wincmd.ini\" do TC (excluir o existente)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Vá para configurar as informações relacionadas ao TC." #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Vá para configurar as informações relacionadas ao TC." #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "de um arquivo da pasta Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "do \"wincmd.ini\" do TC." #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Restaurar um backup da pasta Hotlist." #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Salvar um backup da atual pasta Hotlist." #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Pesquisar e trocar..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...tudo, de A a Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...um único grupo de item (s)." #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...conteúdo do submenu(s) selecionado e nenhum subnível." #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...conteúdo do submenu(s) selecionado e todos subníveis." #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Teste o menu resultante" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Adição do painel principal" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "De todos os formatos suortado. Perguntar qual usar sempre." #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Ao salvar texto Unicode, salvá-lo no formato UTF8 (será UTF16 caso contrário)." #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Ao largar o texto, gere o nome do arquivo automaticamente (caso contrário, o usuário será alertado)." #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Mo&strar diálogo de confirmação após largar." #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Quando arrastar e soltar texto nos painéis:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Coloque o formato mais desejado no topo da lista (use arrastar e soltar)." #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(Se o mais desejado não estiver presente, tomaremos o segundo e assim por diante)." #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(Não funcionará com algum aplicativo de origem, então tente desmarcar se problema)." #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostrar sistema de &arquivos." #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostrar &espaço livre." #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostrar rótu&lo." #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista de unidades." #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Caret passado final da linha." #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Mostrar caracteres epeciais." #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opções do editor interno." #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Reiniciar" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Salvar" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributos de elemento" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de &texto" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usar (e editar) definições de esquema &globais." #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usar definições de esquema &locais" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Negrito" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Itálico" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Rasurado" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Sublinhado" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Li&gar" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Adicionar..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Excluir..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importar/Exportar" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Inserir..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Ordenar..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Nenhum" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Sempre expandir árvore" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Esquerda" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Direita" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lista de Guias Favoritas (reordenar por arrastar e soltar)." #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Outras opções" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "O que restaurar e onde para a entrada selecionada:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Manter guias existentes:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Salvar histórico de pastas:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Abas salvas na esquerda são para serem restauradas em:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Abas salvas na direita são para serem restauradas em:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "um guia" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Adicionar guia" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Adicionar sub-menu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Expandir tudo" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... nível atual somente de itens selecionados" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "excluir todos" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menu e todos seus elemento.s" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Apenas sub-menu, mas manter os elementos." #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "item selecionado." #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Excluir item selecionado." #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportar seleção para arquivos .tab legado." #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavoriteTabsTestMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importar arquivo(s) .tab legado de acordo com a configuração padrão." #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar arquivo(s) .tab legado(s) na posição selecionada." #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar arquivo(s) .tab legado(s) na posição selecionada." #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importar arquivo(s) .tab legado(s) na posição selecionada em um sub-menu" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Inserir guia" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Inserir sub-menu" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todos os ramos" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Colar" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...tudo. De A a Z" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...somente grupo simples de itens" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortear somente grupo simples de itens." #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...conteúdo do sub-menu selecionado, no sub-nível." #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "... conteúdo do(s) submenu(s) selecionado(s) e todos os subníveis." #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testar menus resultantes" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Adicionar" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Adicionar" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Clone" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Selecione seu comando interno." #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "A&baixo" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Editar" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Inserir" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Inserir" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Remo&ver" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Re&mover" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Remover" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&enomear" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "A&cima" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Caminho inicial do comando. Nunca citar esta seqüência." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nome da ação. Nunca é passado para o sistema, é apenas um nome mnemônico escolhido por você, para você." #: tfrmoptionsfileassoc.edtparams.hint #, fuzzy #| msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parâmetro para passar para o comando. Nome de arquivo longo com espaços deve ser citado." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Comando a ser executado. O nome de arquivo longo com espaço deve ser citado." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Descrição da ação:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Ações" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensões" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Pode ser ordenado com arrastar e soltar" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipos de arquivo" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ícone" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Ações podem ser ordenadas com arrastar e soltar" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Extensões podem ser ordenadas com arrastar e soltar" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Tipos de arquivos podem ser sorteados por arrastar e soltar." #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Nome ação:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Comando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Customizar com..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Personalizar" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir no editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Editar com" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obter saída do comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Abrir no Editor Interno." #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Abrir na Visão Interna" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Abrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Abrir com" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executar no terminal." #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Ver" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir no visualizador" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Ver com..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Clicar para alterar o ícone!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Executar via shell." #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Menu de contexto estendido." #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Configuração de associação de arquivo." #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Oferecer para adicionar seleção a associação de arquivo quando não estiver incluído." #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Ao acessar a associação de arquivo, ofereça para adicionar o arquivo selecionado atual se não já estiver incluído em um tipo de arquivo configurado." #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Executar via terminal e fechar." #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Executar via terminal e manter aberto." #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ícones" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Opções estendidas dos itens:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostrar diálogo de confirmação para:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operação Cop&iar." #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operação &Excluir." #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Exluir para a lixeira(a tecla Shift reverte esta definição)." #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operação excluir para lixeira" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Soltar flag somente leitura." #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operação &Mover." #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Comentários do processo com arquivos/pastas" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Selecionar nome de &arquivo sem extensão ao renomear." #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mos&trar painel de seleção de guia no diálogo Copiar/Mover." #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Saltar erros de &operações de arquivos e escrevê-los no log." #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Executando operações." #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interface do usuário." #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamanho do buffer para operações de arquivos (em KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Tamanho do buffer para cálculo do hash (em KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostrar progresso da operação &inicialmente em" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Renoeação automática do estilo para nome duplicado." #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de passagens de limpeza." #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Reiniciar DC para padrão." #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta." #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Use &Frame Cursor" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Usar Cor Selecionada Inativa." #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sar seleção invertida." #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "F&undo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Fu&ndo 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Cor do c&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xto do cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Cor do Cursor Inativo:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Cor da Marca Inativa:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Nível de &brilho do painel inativo." #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Cor da &marca:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Cor do texto:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma pré-visualização. Você pode mover o cursor, selecionar o arquivo e obter imediatamente uma aparência real das várias configurações." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Cor do t&exto:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.cbpartialnamesearch.caption" msgid "&Search for part of file name" msgstr "&Procurar parte do nome do arquivo" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.dbtextsearch.caption" msgid "Text search in files" msgstr "Pesquisar texto em arquivos." #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Localizar arquivo" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption" msgid "Default search template:" msgstr "Pesquisar modelo padrão:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Usar mapa de memória para procura de te&xto em arquivos." #: tfrmoptionsfilesearch.rbusestreaminsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusestreaminsearch.caption" msgid "&Use stream for search text in files" msgstr "&Usar stream para procurar texto em arquivos." #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Prede&finição" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatação" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordenando" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensibilidade a maiúsculas:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato incorreto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato de &data e hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato do ta&manho de arquivo:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "&Insert new files" msgid "&Insert new files:" msgstr "&Inserir novos arquivos:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Ordenando pastas:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Método de &ordenação:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "&Move updated files" msgid "&Move updated files:" msgstr "&Mover arquivos atualizados:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Não carregar lista de arquivos até um guia estar ativo." #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mostrar pastas entre parênteses retos." #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Rea&lçar arquivos novos e atualizados." #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Ativar inplace e renomear ao clicar duas vezes em um nome." #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Carregar lista de &arquivos em linha separada." #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Carregar ícones depois da lis&ta de arquivos." #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostrar arquivos ocultos e de s&istema." #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Ao selecionar arquivos com a <BARRA DE ESPAÇO>, mover para o próximo arquivo (tal como com <INSERT>)." #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Excluir" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Cores de tipos de arquivos (ordenar com arrastar e largar)." #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributos de categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Cor da cate&goria:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara de categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nome de categoria:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Tipos de letra." #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Adicionar atal&ho" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Excluir" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Excluir atalho" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Editar atalho" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorias:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&mandos:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Arquivo&s de atalho:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Commando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Commando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Atalhos" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descrição" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Atalho" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parâmetros" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e sub&pastas:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostrar ícones para ações nos &menus." #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostrar ícones sobrepostos, i.e. para links." #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Desativar ícones especiais." #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Tamanho do ícone." #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Mostrar ícones à esquerda do nome de arquivo." #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "T&udo" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Todos os associados + &EXE/LNK (lento)." #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Sem íco&nes." #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Só ícone&s padrão." #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "A&dicionar nomes selecionados." #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Adicionar nomes selecionados com caminho completo." #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar caminho correto." #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorar /não mostrar) os arquivos e pastas seguintes:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Salvar em:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Setas es&querda e direita mudam a pasta (movimento tipo Lynx)." #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Digitando" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+L&etters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+L&etras" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Le&tters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Le&tras" #: tfrmoptionskeyboard.lblnomodifier.caption #, fuzzy #| msgid "&Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Letras" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Botões p&lanos." #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ambiente pla&no." #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostrar &espaço livre no rótulo da unidade." #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostrar &janela de log." #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostrar painel de operações em 2º plano." #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostrar progresso comum na barra de menu." #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostrar l&inha de comandos." #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostrar pasta at&ual." #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostrar botões de uni&dade." #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostrar rótulo de es&paço livre." #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostrar bo&tão da lista de unidades." #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostrar botões de teclas de função." #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostrar &menu principal." #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Mostrar barra de &botões." #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostrar rótulo curto de espaço &livre." #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostrar barra de e&stado." #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostrar cabeçalho de tabulação." #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "M&ostrar guias de pasta." #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostrar janela de te&rminal." #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostrar duas barras de botões de unidade (largura fi&xa, acima das janelas de arquivos)." #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Disposição da tela." #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Ver conteúdo do arquivo de log." #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Incluir data no arquivo de log" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Com&primir/Descomprimir." #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Linha de execução de comando interno." #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&iar/Mover/Criar ligação/Ligação simbólica." #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Excluir." #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Criar/Excluir pas&tas." #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Log de &erros." #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&riar um arquivo de log:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Logde mensagens &informativas." #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Iniciar/Desligar." #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Log de operações com &sucesso." #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Plugins do sistema de &arquivos." #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Arquivo de log de operações de arquivos." #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Log de operações." #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estado da operação." #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado " #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado " #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Remover miniaturas de arquivos que já não existem." #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Ver conteúdo do arquivo de log." #: tfrmoptionsmisc.chkdesccreateunicode.caption msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ir sempre para a raíz da unidade ao mudar de unidades." #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostrar mensagens de a&viso (Só botão \"OK\")." #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Salvar miniaturas em memória." #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Quanto à exportação / importação de TC:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Arquivo de configuração:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC executável:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Caminho de saída da barra de ferramentas:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Tamanho da miniatura:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Seleção com o mouse." #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Abrir com" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Deslocar" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Seleção" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linha a linha:" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linha a linha com movimento do cursor." #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Página a página." #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Ver conteúdo do arquivo de log." #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Con&figurar" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "A&tivar" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Remover" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "A&finar" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descrição" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Suplementos de procura permitem usar algoritmos alternativos ou ferramentas externas (Como \"locate\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Supl&ementos de compressão são usados para trabalhar com arquivos." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Suplementos de conteúdo permitem mostrar detalhes do arquivo, como etiquetas mp3 ou atributos de imagens na lista de arquivos ou usá-los nas ferramentas Procura e Multirenomear" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Suplementos do sistema de arquivos permitem o acesso a unidades inacessíveis pelo sistema operativo ou a dispositivos externos como o Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Suplementos de &visualização permitem mostrar formatos de arquivos como imagens, folhas de cálculo, bases de dados, etc. no visualizador (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ativo" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de arquivo" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Início (o nome tem de começar com o primeiro caracter digitado)." #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Final (o último caracter antes do ponto tem de coinci&dir)." #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Correspondência exata do nome." #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Sensibilidade a maiúsculas." #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Procurar por estes itens." #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Manter nome renomeado quando desbloquando uma guia." #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Ativar &painel destino ao clicar numa de suas Guias." #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Mo&strar cabeçalho do guia mesmo que só haja uma." #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Fechar guias duplicatas quando fechando aplicação." #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firma fechar todas as guias." #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Confirma fechar guias bloqueadas." #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitar comprimento do título do guia a " #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostrar guias blo&queados com um asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Guias em múl&tiplas linhas." #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up abre o novo guia em 1º plano." #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Abrir &novos guias ao lado do guia atual." #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Reusar guia existente quando possível" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostrar &botão para fechar o guia." #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Mostrar sempre a letra do drive no título da guia." #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Cabeçalhos dos guias de pastas." #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caracteres." #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Ação a ser executada quando der dois cliques na guia." #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posição dos s&eparadores" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Nenhum" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Esquerda" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Direita" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Ir para a Configuração de Guias Favoritos depois de salvar." #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Ir para a Configuração de Guias Favoritos depois de salvar uma nova." #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Ativar as opções extras de Favoritos (selecione o lado de destino quando restaurar, etc.)." #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Configurações extras padrão ao salvar novas guias favoritas:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Cabeçalho extra em guias de pastas." #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Ao restaurar a guia, manter as guias existentes:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Guias do lado esquerdo salvas, serão restauradas para:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Guias do lado direito salvas, serão restauradas para:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Manter salvo histórico de pasta com Guia Favoritos" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Posição default no menu quando salvando uma nova Guia Favoritos:" #: tfrmoptionsterminal.edrunintermcloseparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} deve normalmente estar presente aqui para refletir o comando a ser executado no terminal." #: tfrmoptionsterminal.edrunintermstayopenparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} deve normalmente estar presente aqui para refletir o comando a ser executado no terminal." #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Comando para executar somente no terminal:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Comando para executar um comando no terminal e fechar após o comando:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Comando para executar um comando no terminal e continuar aberto:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parâmetros" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parâmetros:" #: tfrmoptionsterminal.lbruntermcmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbruntermparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parâmetros" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botão" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Excluir" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editar atal&ho" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserir novo botão" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Selecionar" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Outro..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Remo&ver atalho" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugestão" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "O DC sugere a dica de ferramenta com base no tipo de botão, comando e parâmetros" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botões p&lanos." #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Relatório de erros com comandos." #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Introduzir parâmetros de comandos, cada um em sua linha. Prima F1 para ajuda dos parâmetros." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Aparência" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Tamanho da &barra:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "Coman&do:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajuda" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Atalho:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Íco&ne:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamanho do í&cone:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parâmetros:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Su&gestão:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Adicionar barra de ferramentas com TODOS COMANDOS DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "por um comando externo" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "por um comando interno" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "de uma guia" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "de uma sub-barra de ferramenta" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Backup" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra Ferramenta atual..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um arquivo de barra de ferramenta (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um arquivo TC .BAR (manter o existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um arquivo TC .BAR (excluir o existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter o existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (excluir o existente)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de Ferramenta no Topo..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Salvar um backup da Barra de Ferramentas" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um arquivo de Barra de Ferramentas (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um arquivo TC .BAR (manter o existente)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um arquivo TC .BAR (excluir o existente)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter o existente)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (excluir o existente)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "Logo após a seleção atual" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "Antes da seleção atual" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restaurar um backup da Barra de Ferramentas" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar na barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "De um arquivo da barra de ferramentas (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "A partir de um único arquivo TC .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "Para substituir a barra de ferramentas superior" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "De \"wincmd.ini \" do TC ..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "Adicionar à barra de ferramentas atual." #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas atual." #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Adicionar uma nova barra de ferramentas à barra de ferramentas superior." #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "Adicionar à barra de ferramentas superior." #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "substituir a barra de ferramentas superior." #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a seleção atual." #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento." #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "antes da seleção atual." #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Encontrar e substituir..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "lgo após a seleção atual" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "como primeiro elemento." #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "após a seleção atual" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "em todos os acima ..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "em todos os comandos..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "Em todos os nomes de ícones ..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "em todos parâmetros..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "em todos caminhos iniciais..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "logo após a seleção atual" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "como primeiro elemento" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "como último elemento." #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "antes da seleção atual." #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botão:" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ícones" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Manter a janela do terminal aberta após executar um programa." #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Executar no terminal." #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usar programa externo." #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parâmetros a&dicionais." #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Caminho do &programa a executar." #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Excluir" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Outro..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "&Mostrar dicas para arquivos no painel de arquivo." #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Palpite da cate&goria:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara da categoria:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Número colunas do livro" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimir arquivos" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Criar arquivos separados, um por cada arquivo/pasta selecionado" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Criar arquivo de extração automática" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mo&ver para arquivo" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Arquivo de discos &múltiplos" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Pôr no arq&uivo TAR primeiro" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Com&primir também nomes de caminhos (só recursivo)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimir arquivo(s) para o arquivo:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimir todos e execut&ar" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimir e exec&utar" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propriedades do arquivo comprimido" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributos:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Taxa de compressão:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Método:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Tamanho original:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Arquivo:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tamanho comprimido:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Hora:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Fechar painel de filtragem" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Introduza o texto de filtragem ou filtre por" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensível a maiúsculas" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Pastas" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Arquivos" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Comparar início" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Comparar final" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Alternar entre localizar e procurar" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Mais regras" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "M&enos regras" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Usar &pliugins de conteúdo: combina com:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Suplemento" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption #, fuzzy #| msgid "&E (any match)" msgid "&AND (all match)" msgstr "&E (qualquer combinação)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OU (qualquer combinação)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Aplicar" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Modelo..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Modelo..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecionar os caracteres a inserir:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Alterar atributos" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Espesso" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arquivo" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Criado:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Acessado:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Só de leitura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Incluindo subpastas" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propriedades de selo temporal" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Ordenar" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar caminho apropriado." #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisor" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Requer um verificação CRC32 de arquivo." #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Tamanho e nº. de partes" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Pas&ta destino" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Número de partes" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Construção" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Sistema Operacional" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plataforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisão" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Criar ligação simbólica" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para o qual a ligação aponta" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome da &ligação" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Fechar" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Modelo..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizar pastas" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "assimétrico" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "por conteúdo" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorar data" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "somente selecionado" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Subpastas" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mostrar:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(na janela principal)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Visão esquerda" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Visão direita" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicatas" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "simples" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Favor pressionar \"Comparar\" para iniciar" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmar substituições" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&dicionar novo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Al&terar" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Prede&finição" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para selecionar o caminho apropriado." #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Suplemento de afinação" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tetar tipo de arquivo por conteúdo" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Pode Excluir Ar&quivos" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Suporta e&ncriptação" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mo&strar como arquivos normais (ocultar ícone do compressor)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Suporta co&mpressão em memória" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Pode modificar arquivos existentes" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "O &arquivo pode conter múltiplos arquivos" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Pode criar novos arqui&vos" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&uporta diálogo de opções" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permitir procurar texto nos ar&quivos" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descrição:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etetar cadeia:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensão:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Bandeiras:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nome:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Su&plemento:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Su&plemento:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Sobre o visualizador..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra a mensagem Sobre" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiar arquivo" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiar arquivo" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copiar para a área de transferência" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Excluir arquivo" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Excluir arquivo" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Sair" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Localizar" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Localizar próxim" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Tela Cheia" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Vá para linha" #: tfrmviewer.actimagecenter.caption #, fuzzy msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Centro" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Se&guinte" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Carregar o arquivo seguinte" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "A&nterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carregar o arquivo anterior" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Espelho" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mover arquivo" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mover arquivo" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Pré-visualizar" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recarregar" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recarregar o arquivo atual" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Girar 180º" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Girar 180º" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Girar 270º" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Girar 270º" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Girar 90º" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Girar 90º" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Salvar" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Salvar como..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Salvar arquivo como..." #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Captura de ecrã" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Selecionar tudo" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Mostrar com &binário" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Mostrar como &livro" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Mostrar com &hexadecimal" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Mostrar como &texto" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Mostrar como texto aj&ustado" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Suplementos" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Esticar" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Esticar a imagem" #: tfrmviewer.actstretchonlylarge.caption #, fuzzy msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Esticar apenas grande." #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Reduzir" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Cortar" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ecrã completo" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Pintar" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Olhos vermelhos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizador" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&arquivo" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagem" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Caneta" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rodar" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura de ecrã" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Suplementos" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Iniciar" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operações de arquivos" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Fila" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&eguir links" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando a pa&sta existe." #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quando o arquivo existir" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o arquivo existir" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parâmetros" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Con&figurar" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o arquivo existir" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiar d&ata/hora" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Trabalhar em 2º plano (ligação separada)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o arquivo existir" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Altura" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Largura" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Este arquivo não pode ser encontrado e pode ajudar a validar a combinação final de arquivos:\n" "%s\n" "\n" "Você poderia disponibilizá-lo e pressionar \"OK\" quando pronto,\n" "ou pressionar \"CANCELAR\" para contnuar sem ele?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancelar filtro rápido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancelar operação atual" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Digite o nome do arquivo, com extensão, para o texto descartado" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Texto formatado para importar" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Quebrado:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Geral:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Perdido:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Erro de leitura:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Sucesso" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Digite checksum e selecione algoritmo:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verificar checksum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "A área de transferência não contém dados de barra de ferrramentas válidos" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Todos, Painel Ativo, Painel Esquerdo, Painel Direito, Operações de Arquivo, Configuração, Rede, Diversos, Porta Paralela, Impressão, Marca, Segurança, Área de Transferência, FTP, Navegação, Ajuda, Janela, Linha de Comando, Ferramentas, Vista, Usuário, Ordenação; Registro" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Legado classificado; A-Z classificado" #: ulng.rscolattr msgid "Attr" msgstr "Atr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nome" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Tamanho" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinhar" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Legenda" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Excluir" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Conteúdo do campo" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mover" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Largura" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizar coluna" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Configurar associação de arquivo" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Confirmando linha de comando e parâmetros" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barra de Ferramentas DC importada" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barra de Ferramentas DC importada" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Texto Descartado" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_HTML texto Descartado" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Richtext texto Descartado" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Simples texto Descartado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_UnicodeUTF16 texto Descartado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_UnicodeUTF8 texto Descartado" #: ulng.rsdiffadds msgid " Adds: " msgstr "Acrescentar: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Excluidos: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Os dois arquivos são idênticos" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Correspondentes: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modificados: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codificar" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Ab&ortar" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "T&udo" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Jun&tar" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Auto renomer arquivos fonte" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancelar" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuar" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Cop&iar para" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Copi&ar todos para" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Sair do programa" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorar todos" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Não" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "N&enhum" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Ou&tros" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "S&ubstituir" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Su&bstituir todos" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Substituir Todos &Maiores" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Subs&tituir mais antigos" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Substituir Todos &Menores" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "R&enomear" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Recomeçar" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Repe&tir" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Saltar" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Sa<ar todos" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "S&im" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiar arquivo(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mover arquivo(s)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Iniciar" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Fila" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Velocidade %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Velocidade %s/s, falta %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espaço livre na unidade." #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sem rótulo>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sem mídia>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno do Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Vá para linha:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Vá para linha" #: ulng.rseditnewfile msgid "new.txt" msgstr "novo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nome de arquivo:" #: ulng.rseditnewopen msgid "Open file" msgstr "Abrir arquivo" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Recuar" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Localizar" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Avançar" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Substituir" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "com editor externo." #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "com editor" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Executar via shell." #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Executar via terminal e fechar." #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Executar via terminal e manter aberto." #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Esquerda;Direita;Ativo;Inativo:Ambos;Nenhum" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Não;Sim" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportado do DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Perguntar;Substituir;Copiar para;Saltar" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Perguntar;Substituir;Substituir mais antigos;Saltar" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Perguntar;Não definir mais;Ignorar erros" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definir modelo" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s níveis" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "todos (profundidade ilimitada)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "só pasta atual" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "A pasta %s não existe!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Encontrados: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Salvar modelo de procura" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nome do modelo:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pesquisado: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "A pesquisar" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Localizar arquivos" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Tempo da varredra: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Iniciar em" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "&Fonte do console" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Letra do &editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Fonte do log" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Letra do programa" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Letra do visuali&zador" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Letra do vis&ualizador de livro" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "Livres %s de %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s livres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Aceder a data/hora" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributos" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentário" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tamanho comprimido" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/hora de criação" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extensão" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Alterar data/hora" #: ulng.rsfunclinkto msgid "Link to" msgstr "conectar a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/hora de modificação" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nome" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nome sem extensão" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietário" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Caminho" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Tamanho" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Erro ao criar ligação física" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "nenhum;Nome, a-z;Nome, z-a;Ext, a-z;Ext, z-a;Tam 9-0;Tam 0-9;Data 9-0;Data 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Aviso! Ao restaurar um backup do arquivo .hotlist, Isso irá apagar a lista existente para substituir pelo importado.\n" "\n" "Tem certeza que quer continuar?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Copiar/Mover diálogo" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Editar Diálogo de Comentário" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Localizar arquivos" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Multirenomear" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Não é possível encontrar referência ao arquivo de barra de ferramentas padrão" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Remover seleção da máscara" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selecionar máscara" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Máscara de entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Já existe uma visão de colunas com esse nome." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Para alterar a visualização atual das colunas de edição, SAVLVA, COPIA ou APAGUE" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurar colunas personalizadas" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Digite nome das novas colunas personalizadas" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ações" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Desconectado do Drive de Rede" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editar" #: ulng.rsmnueject msgid "Eject" msgstr "Ejetar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Extrair aqui..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Mapa do Drive de Rede" #: ulng.rsmnumount msgid "Mount" msgstr "Montar" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Novo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nenhuma mídia disponível" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Abrir" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Abrir com" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Outro..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Compacte aqui..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaurar" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordenar por" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmontar" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Ver" #: ulng.rsmsgaccount msgid "Account:" msgstr "Conta:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parâmetros adicionais da linha de comandos do arquivador:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "CRC32 incorreto para o arquivo resultante: \n" "\"%s\"\n" "\n" "Você deseja manter o arquivo corrompido resultante de qualquer maneira?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Não pode copiar/mover um arquivo \"%s\" para si próprio!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Impossível Excluir a pasta %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ChDir para [%s] falhou!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Remover as guias inativas?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Esta guia (%s) está bloqueado! Fechar mesmo assim?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Tem a certeza que quer desistir?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "O arquivo %s foi alterado. Deseja copiá-lo de volta?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Não foi possível copiar de volta. Você deseja manter o arquivo alterado?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Copiar %d arquivos/pastas selecionados?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" selecionados?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Criar um novo tipo de arquivo \"%s arquivos\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Digite a localização e o nome do arquivo onde salvar um arquivo da barra de ferramentas DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Ação customizada" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Excluir o arquivo parcialmente copiado?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Excluir %d arquivos/pastas selecionados?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Excluir %d arquivos/pastas selecionados para a lata de lixo?" #: ulng.rsmsgdelsel #, object-pascal-format, fuzzy, badformat msgid "Delete selected \"%s\"?" msgstr "Excluir %d arquivos/pastas selecionados?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Excluir \"%s\" selecionados para a lata de lixo?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossível Excluir \"%s\" para o lixo! Excluir diretamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "O disco não está disponível" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Digite nome da ação customizada" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduza a extensão do arquivo:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduza o nome" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Digite o nome do novo tipo de arquivo a ser criado para a extensão \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Erro CRC nos dados arquivados" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Os dados estão corrompidos" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Impossível conectar ao servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Impossível copiar o arquivo %s para %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Já existe uma pasta chamada \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Data %s não é suportada" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "A pasta %s já existe!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funçção abortada pelo usuário" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Erro ao fechar o arquivo" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossível criar o arquivo" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Não há mais arquivos no arquivo" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossível abrir arquivo existente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Erro ao ler o arquivo" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Erro ao escrever o arquivo" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Impossível criar a pasta %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Link inválido" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Arquivos não encontrados." #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memória insuficiente." #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Função não suportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Erro no comando do menu contextual." #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Erro ao carregar a configuração." #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Erro de sintaxe na expressão regular!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Impossível renomear o arquivo %s para %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Impossível salvar associação!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossível Salvar o arquivo." #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Impossível definir atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Impossível definir data/hora para \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Impossível definir proprietário/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Não foi possível definir permissões para \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer muito pequeno." #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Muitos arquivos para empacotar." #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato de arquivo desconhecido." #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Tem certeza de que deseja remover todas as entradas de suas guias favoritas? (Não há \"undo\" para esta ação!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Arraste aqui outras entradas." #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Insira um nome para esta entrada de Tabs Favoritos." #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Salvando uma nova entrada Tabs Favoritos." #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Número de Guias Favoritos exportada com sucesso: %d em %d." #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Configuração adicional padrão para salvar o histórico de pastas para novas guias favoritas:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Número de arquivo(s) importados com sucesso: %d em %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Guias legadas importadas" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Selecione o(s) arquivo(s) .tab para importar (pode ser mais que um ao mesmo tempo)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "A última modificação das Guias Gavoritos foi salva. Deseja salvá-las antes de continuar?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Manter salvo o histórico de pastas com Guias Favoritos" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nome submenu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Isto irá carregar Guias Favoritos: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Salvar as guias atuais sobre a entrada existente de Guias Favoritos" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "O arquivo %s foi alterado! Salvar?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobreescrever:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "O arquivo %s já existe! Substituir?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Com arquivo:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Arquivo \"%s\" não encontrado" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operações de arquivo ativas" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algumas operações de arquivo por terminar. Fechar o Double Commander pode resultar em perda de dados." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "O arquivo %s é somente leitura. Quer apagá-lo?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "O tamanho de \"%s\" é muito grande para o sistema de arquivos destino!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "A pasta %s já existe! Substituir?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Seguir ligação simbólica \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Selecione o formato do texto a importar" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Adicionar %d pastas selecionadas" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Adicionar pasta selecionada: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Adicionar pasta atual: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Executar comando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuração da Pasta Hotlist" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Tem a certeza de que pretende remover todas as entradas da sua Pasta Hotlist?(não existe \"desfazer\" para esta ação!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Isto irá executar o seguinte comando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Esta é uma pasta chamada " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Isto irá modificar moldura ativa para o seguinte caminho:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Uma moldura inativa será alterada para o seguinte caminho:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Erro ao backupear entradas..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Erro ao exportar entradas..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportar tudo!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportar Pasta Hotlist - Selecione as entradas que você quer exportar." #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportar selecionado" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importar tudo!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importar Pasta Hotlist - Selecione as entradas que você quer exportar." #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importar selecionado" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Caminho" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Localizar \".hotlist\" arquivo para importar" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nome do Hotdir" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Número de novas entradas: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nada selecionado para exportar!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Caminho do HotDir" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Readicionar pasta selecionada: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Readicionar pasta atual: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Digite a localização do nome do arquivo da pasta Hotlist para restaurar." #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fim do submenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Nome do menu:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Nome:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separador)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nome submenu" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Destino HotDir" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Determine se você deseja que o quadro ativo seja classificado em uma ordem especificada após alterar o diretório" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Determine se você deseja que o quadro não ativo seja classificado em uma ordem especificada após alterar o diretório" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Algumas funções para selecionar caminho adequado relativo, absoluto, janelas pastas especiais, etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format, fuzzy, badformat msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Total de entradas salvas:% d\n" "\n" "Nome do arquivo de backup:% s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Total de entradas exportadas: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Deseja excluir todos os elementos dentro do submenu [%s]?\n" "A resposta NÃO irá apagar apenas os delimitadores de menu, mas manterá o elemento dentro do submenu." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Insira a localização eo nome do arquivo onde salvar um arquivo na pasta HotList" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Comprimento de arquivo resultante incorreto para arquivo: \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Por favor, insira o próximo disco ou algo similar.\n" "\n" "É para permitir escrever este arquivo: \n" "\"%s\"\n" "\n" "Número de bytes ainda a escrever:%d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Erro na linha de comandos" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nome de arquivo inválido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato do arquivo de configuração inválido" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Caminho inválido" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "O caminho %s contém caracteres proibidos." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Este não é um suplemento válido!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Este suplemento é feito para o Double Commander para %s. %s não pode trabalhar com o Double Commander para %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Aspas inválidas" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Seleção inválida." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Carregando a lista de arquivos..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Localizar o arquivo de configuração do TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Localizar arquivo executável TC (totalcmd.exe ou totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copiar arquivo %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Excluir arquivo %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Erro:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Carregar externo" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Resultado externo" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Extrair arquivo %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informação:" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Criar ligação %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Criar pasta %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Mover arquivo %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Comprimir para arquivo %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Remover pasta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Feito:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Criar ligação simbólica %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testar integridade do arquivo %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Limpar arquivo %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Limpar pasta %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Senha Mestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Por favor introduza senha mestra:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Novo arquivo" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "O próximo volume será descomprimido" #: ulng.rsmsgnofiles msgid "No files" msgstr "Sem arquivos" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Sem arquivos selecionados" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Não há espaço suficiente no destino! Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Não há espaço suficiente no destino! Tentar novamente?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Impossível Excluir o arquivo %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Não implementado." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma pré-visualização. Você pode mover o cursor e selecionar arquivos para obter imediatamente uma aparência real das várias configurações." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Senha:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "As senhas são diferentes!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Por favor introduza a senha:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Senha (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Por favor reintroduza a senha para verificação:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Excluir %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predefinição \"%s\" já existe! Substituir?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problema ao executar comando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Nome do arquivo para o texto descartado:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Por favor, disponibilize este arquivo. Repetir?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Digite um novo nome amigável para esta Guia Favoritos" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Digite novo nome para este menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Renomear/Mover %d arquivos/pastas selecionados?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Renomear/Mover \"%s\" selecionados?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Por favor reinicie o Double Commander para aplicar as alterações" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Selecione o tipo de arquivo para adicionar a extensão \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selecionados: %s de %s, arquivos: %d de %d, pastas: %d de %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Selecionar arquivo executável para" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Por favor, selecione só arquivos checksum" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Por favor, selecione a localização do próximo volume" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definir rótulo do volume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Pastas Especiais" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Adicionar caminho para a moldura ativa" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Adicionar caminho para a moldura inativa" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Navegar e usar caminho selecionado." #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Usar variável de ambiente..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Vá para caminho especial do Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Vá para variável de ambiente..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Vá para pasta especial do Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Vá para pasta especial (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Fazer caminho relativo para hotdir" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Tornar caminho absoluto" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Tornar relativo o caminho especial para Double Commander" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Tornar relativa a variável de ambiente..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Tornar relativo a pasta especial do Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Tornar relativo a outra pasta especial do Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Usar caminho especial do Double Commander" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Usar caminho hotdir" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Usar outra pasta especial do Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Use a pasta especial do Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Esta guia (%s) está bloqueada! Abrir pasta em outra guia?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renomear guia" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novo nome da guia:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Caminho destino:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Erro! Não é possível encontrar o arquivo de configuração do TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Erro! Não é possível encontrar o executável de configuração do TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Erro! TC ainda está em execução, mas deve ser fechado para esta operação.\n" "Feche-o e pressione OK ou pressione CANCELAR para cancelar." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Erro! Não é possível encontrar a pasta de saída desejada da barra de ferramentas TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Digite a localização e o nome do arquivo onde salvar um arquivo da barra de ferramentas do TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" está agora na àrea de Transferência" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Extensão do arquivo selecionado não está em nenhum tipo de arquivo reconhecido" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Localizar o arquivo \".toolbar\" para importar" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Localizar o arquivo \".BAR\" para importar" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Digite localização e nome arquivo da Barra Ferramenta para restaurar" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Salvo!\n" "Nome arq Barra Ferramenta: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Muitos arquivos selecionados." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Indeterminado:" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SEM EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<SEM NOME>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nome de usuário" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nome de usuário (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Rótulo do volume:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Por favor, introduza o tamanho do volume:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Limpar %d arquivos/pastas selecionados?" #: ulng.rsmsgwipesel #, object-pascal-format, fuzzy, badformat msgid "Wipe selected \"%s\"?" msgstr "Limpar \"s\" selecionados?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "largura" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Data" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extensão" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nome" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sem alteração;MAIÚSCULAS;minúsculas;Primeira maiúscula;Primeira De Todas As Palavras Maiúscula;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Multirenomear" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Caracter na posição x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caracteres desde a posição x até y." #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dia" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Dia (2 dígitos)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Dia da semana (curto, ex. \"seg\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Dia da semana (longo, ex. \"segunda\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extensão" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hora" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Hora (2 dígitos)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuto" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuto (2 dígitos)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mês" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mês (2 dígitos)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nome do mês (curto, ex. \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nome do mês (longo, ex. \"janeiro\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nome" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Segundo" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Segundo (2 dígitos)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Ano (2 dígitos)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Ano (4 dígitos)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Suplementos" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Hora" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Gráficos" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Rede" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Outro" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistema" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abortado" #: ulng.rsopercalculatingchecksum #, fuzzy msgctxt "ulng.rsopercalculatingchecksum" msgid "Calculating checksum" msgstr "Calculando a checksum" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Calculando a checksum em \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format, fuzzy msgctxt "ulng.rsopercalculatingchecksumof" msgid "Calculating checksum of \"%s\"" msgstr "Calculando a checksum de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calculando" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Calculando \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Juntando" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Juntando arquivos em \"%s\" para \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copiando" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Copiando de \"%s\" para \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "copiar \"%s\" para \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Criando pasta" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Criando pasta \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Excluindo" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Excluindo em \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Excluindo \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Executando" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Executando \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extraindo" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Extraindo de \"%s\" para \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminado" #: ulng.rsoperlisting msgid "Listing" msgstr "Listando" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Listando \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Movendo" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Movendo de \"%s\" para \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Movendo \"%s\" para \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Não iniciado" #: ulng.rsoperpacking msgid "Packing" msgstr "Comprimindo" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Comprimindo de \"%s\" para \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Comprimindo \"%s\" para \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausado" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausando" #: ulng.rsoperrunning msgid "Running" msgstr "Executando" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Definir propriedade" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Definir propriedade em \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Definir propriedade de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dividindo" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Dividindo \"%s\" para \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Iniciando" #: ulng.rsoperstopped msgid "Stopped" msgstr "Parado" #: ulng.rsoperstopping msgid "Stopping" msgstr "Parando" #: ulng.rsopertesting msgid "Testing" msgstr "Testando" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Testando em \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Testando \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verificando checksum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Verificando checksum em \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format, fuzzy msgctxt "ulng.rsoperverifyingchecksumof" msgid "Verifying checksum of \"%s\"" msgstr "Verificando checksum de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Aguardando acesso à origem do arquivo" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Aguardando resposta do usuário" #: ulng.rsoperwiping msgid "Wiping" msgstr "Limpando" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Limpando em \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Limpando \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Trabalhando" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Adicionar no início; Adicionar no final; Smart adicionar" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nome do tipo de arquivo:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associar suplemento \"%s\" com:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primeiro;Último;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Clássico, ordem do legado;Ordem alfabética (mas a idioma primeiro.)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Painel de quadro ativo à esquerda, inativo à direita (legado).; Painel de quadro esquerdo à esquerda, direito à direita." #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduza extensão" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Adicionar no início;Adicionar no final;Ordenação alfabética" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "janela separada;janela separada minimizada;painel de operações" #: ulng.rsoptfilesizefloat msgid "float" msgstr "flutuante" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Atalho %s para cm_Delete será registado, pelo que poderá ser usado para reverter esta definição." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Adicionar atalho para %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Adicionar atalho" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossível definir atalho" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Alterar atalho" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Commando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Atalho %s para cm_Delete tem um parâmetro que se sobrepõe a esta definição. Quer alterar o parâmetro para usar a definição global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Atalho %s para cm_Delete tem de ter um parâmetro alterado para corresponder ao atalho %s. Quer alterá-lo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descrição" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Editar atalho para %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fixar parâmetro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Atalho" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Atalhos" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<nenhum>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parâmetros" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Definir atalho para Excluir arquivo" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Para esta definição funcionar com o atalho %s, o atalho %s tem de ser atribuído a cm_Delete, mas já está atribuído a %s. Quer alterá-lo?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Atalho %s para cm_Delete é uma sequência para a qual uma tecla de atalho com Shift revertido não pode ser atribuída. Esta definição pode não funcionar." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Atalho em uso" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Atalho %s já está em uso." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Alterar para %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "usado para %s em %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usado por este comando mas com parâmetros diferentes" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Arquivadores" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Atualizar automaticamente" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamentos" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Resumida" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Cores" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Colunas" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuração" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Personalizar colunas" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Lista de pastas" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Arrastar & Largar" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Botão da lista de unidades" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Guia Favoritos" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Associação de arquivo extra" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associações de arquivos" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Novo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operações de arquivos" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Painéis de arquivos." #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Localizar arquivo" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visões de arquivos." #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipos de arquivos." #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Guia de pastas." #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Guia extra de pasta." #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Tipos de letra." #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Realces" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Atalhos" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ícones" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorar lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Teclas" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposição" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Vários" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mouse" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Multirenomear" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Suplementos" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Procura/Filtragem rápida" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra de ferramentas" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Ferramentas" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Sugestões" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nenhuma;Linha de comandos;Procura rápida;Filtragem rápida" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botão esquerdo;Botão direito;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "no cimo da lista de arquivos;após as pastas (se as pastas estão ordenadas antes dos arquivos);na posiçõ ordenada;no final da lista de arquivos" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "O suplemento %s já está atribuído às seguintes extensões:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Desativar" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "A&tivar" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Ativo" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descrição" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nome de arquivo" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nome" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registado para" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensível;&Insensível" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Arquivos;Pa&stas;arquivos e &pastas" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ocultar painel de filtra&gem quando não estiver em foco.;Manter salvo modificações dos parâmetros da da próxima seção." #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "não sensível a maiúsculas;de acordo com definições regionais (aAbBcC);primeiro maiśculas, depois minúsculas (ABCabc)." #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordenar por nome e mostrar primeiro;ordenar como arquivos e mostrar primeiro;ordenar como arquivos" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabétca, considerando acentos;Ordem natural;alfabética e números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Topo;Inferior;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comando inte&rno;Comando e&xterno;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Nome da categoria:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC legacy - Copiar (x) nome_de_arquivo.ext; Windows - nome_de_arquivo (x).ext; Outro - nome_do_arquivo (x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "não alterar posição;usar a definição para novos arquivos;para a posição ordenada" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Arquivos: %d, pastas: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Impossível alterar direitos de acesso a \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Impossível alterar proprietário de \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "arquivo" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Pasta" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Linha nomeada" #: ulng.rspropssocket msgid "Socket" msgstr "Tomada" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo de bloqueio especial" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispositivo de carácter especial" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Ligação simbólica" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo desconhecido" #: ulng.rssearchresult msgid "Search result" msgstr "Resultado da procura" #: ulng.rssearchstatus msgid "SEARCH" msgstr "PESQUISAR" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modelo sem nome>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecione uma pasta" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Mo&strar ajuda para %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tudo" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Categoria" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Coluna" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Commando" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "NOme arquivo" #: ulng.rssimplewordfiles msgid "files" msgstr "arquivos" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultado" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Pasta de trabalho" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Arquivos: %d, pastas: %d, tamanho: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossível criar pasta destino!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formato de tamanho de arquivo incorreto!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossível dividir o arquivo!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "O número de partes é superior a 100! Continuar?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Pasta selecionada:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Erro ao criar ligação simbólica" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texto predefinido" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texto simples" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Não faça nada: guia Fechar; guia Acesso Favorito; menu pop-up de Guias" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dia(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mês(Meses)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segundo(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Ano(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Renomear Guia Favoritos" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Renomear sub-menu da guia Favoritos" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Erro ao abrir Diferenciar" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Erro ao abrir o editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Erro ao abrir o terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Erro ao abrir o visualizador" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Por favor reporte este erro no rastreio de erros com uma descrição do que estava a fazer e o arquivo seguinte: %sPrima %s para continuar ou %s para abortar o programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Ambos paineis. Do ativo para o inativo" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Ambos paineis, da esquerda para direita" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Caminho do painel" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Coloque cada nome entre parênteses ou o que você quiser" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Somente nome arquivo. Sem extensão" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Nome arquivo completo (caminho+nome)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Ajuda com \"%\" variáveis" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Solicitará ao usuário que insira um parâmetro com um valor sugerido padrão" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Painel esquerdo" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Nome de arquivo temporário da lista de nomes de arquivos" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Nome de arquivo temporário da lista de nomes de arquivos com caminho relativo" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Nome de arquivo temporário da lista de nomes de arquivos com caminhos relativos" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Somente extensão de arquivo" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Somente nome de arquivo" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Outro exemplo do que é possível" #: ulng.rsvarpath #, fuzzy #| msgid "Path, with ending delimiter" msgid "Path, without ending delimiter" msgstr "Caminho com delimitador no final" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Daqui até o final da linha, o indicador de porcentagem é o sinal \"# \"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Retornar o sinal de porcentagem." #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Daqui até o final da linha, o indicador de porcentagem está de volta com o sinal \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Preencha cada nome com \"- a \" ou o que você quiser" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Prompt de usuário para param; Valor padrão proposto]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nome de arquivo com caminho relativo" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Painel direito" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Caminho completo do segundo arquivo selecionado no painel direito" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Mostrar comando antes de executar" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Simples mensagem]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Será mostrada uma simples mensagem" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Painel ativo (fonte)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Painel inativo (destino)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Os nomes de arquivo serão citados a partir daqui (padrão)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "O comando será executado no terminal e permanecendo aberto no final" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Caminhos terão delimitador final" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Os nomes de arquivo não serão citados aqui" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "O comando será executado no terminal e fechado no final" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Caminhos não terão delimitador final (padrão)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rede" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualizador interno do Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Qualidade Ruim" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "A codificar" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Tipo de Imagem" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Novo tamanho" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s não encontrado!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "com visualizador externo." #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "com visualizador interno." #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Número de substituições: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Não houve substituição." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.pt.po�����������������������������������������������������������0000644�0001750�0000144�00001410445�15104114162�017301� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Pedro Albuquerque <palbuquerque73@gmail.com>, 2017. msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-07-12 08:49+0100\n" "Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n" "Language-Team: Português <>\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.6\n" "X-Native-Language: Português\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "A comparar - %d%% (ESC para cancelar)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Direita: eliminar %d ficheiro(s)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Encontrados: %d (iguais: %d, diferentes: %d, únicos esquerdos: %d, únicos direitos: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Esquerda->direita: copiar %d ficheiros, tamanho: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Direita->esquerda: copiar %d ficheiros, tamanho: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Escolher modelo..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Verificar espaço livre" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Cop&iar atributos" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiar &propriedade" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copiar &permissões" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiar d&ata/hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corrigir li&gações" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Lar&gar atributo Só de leitura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xcluir pastas vazias" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Seguir &ligações" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espaço" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Verificar" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "O que fazer quando não conseguir definir hora, atributos, etc. do ficheiro" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usar modelo de ficheiro" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando a pasta &existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quando o &ficheiro existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quando &não conseguir definir propriedade" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sem modelos>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiar para área de transferência" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Versão" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Submeter" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Página web:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisão" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Repor" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Escolher atributos" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arquivo" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimido" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Pasta" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Encriptado" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Oculto" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Só de &leitura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Es&parso" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Ligação &simbólica" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporário" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributos NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributos gerais" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Dono" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Como te&xto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calcular checksum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Abrir ficheiro checksum após terminar a tarefa" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&riar ficheiro checksum separado para cada ficheiro" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Gravar ficheiro&s checksum em:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verificar checksum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codificar" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "L&igar" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestor de ligações" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Ligar a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&dicionar à fila" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pções" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Gra&var estas opções como predefinição" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiar ficheiro(s)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Gravar descrição" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentário do ficheiro/pasta" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditar comentário de:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "A co&dificar:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Comparar automaticamente" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Modo binário" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Refazer" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Seleccion&ar tudo" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Localizar" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Localizar" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Localizar seguinte" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Localizar seguinte" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Localizar anterior" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Localizar anterior" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "Substitui&r" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Substituir" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Ir para linha" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorar maiúsculas" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorar espaços" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Continuar rolamento" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferenças de linha" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Abrir esquerdo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Abrir direito..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pintar fundo" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Recarregar" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recarregar" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Gravar" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Gravar" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Gravar como..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Gravar como..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Gravar esquerdo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Gravar esquerdo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Gravar esquerdo como..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Gravar esquerdo como..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Gravar direito" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Gravar direito" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Gravar direito como..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Gravar direito como...." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparar ficheiros" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Esquerdo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Di&reito" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acções" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opções" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Adicionar novo atalho à sequência" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Remover último atalho da sequência" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Seleccione o atalho da lista de teclas ainda disponíveis" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Só para estes controlos" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parâmetros (cada numa linha separada):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Atalhos:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Sobre" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuração" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configuração" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Eliminar" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Localizar" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Localizar" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Localizar seguinte" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Localizar seguinte" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Localizar anterior" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "Substitui&r" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Substituir" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Seleccion&ar tudo" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Seleccionar tudo" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Fechar" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Sair" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Abrir" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Abrir" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Recarregar" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Gravar" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Gr&avar como..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Gravar como" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Abrir como" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Gravar como" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Realçar sintaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fim de linha" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Aceitar" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensível a m&aiúsculas" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Localizar do cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expressões ®ulares" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Só &texto seleccionado" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Só &palavras completas" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opção" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Substitui&r com" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Proc&urar por:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direcção" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Descomprimir ficheiros" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimir nomes de caminho se armazenados com os ficheiros" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimir cada arquivo para pastas &separadas (nome do arquivo)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Sobrescre&ver ficheiros existentes" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Para a &pasta:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extrair ficheiros com esta máscara:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Senha de ficheiros encri&ptados:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Aguarde..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nome de ficheiro:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clique em Fechar quando o ficheiro temporário puder ser apagado!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Para o painel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Ver tudo" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operação actual" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Para:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Permitir &Executar ficheiro como programa" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Dono" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Dono" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contém:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Criado:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Executar:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Caminho:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Último acesso:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Última modificação:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Última alteração de estado:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Dono" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamanho:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Ligação simbólica a:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valor" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Extensões" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Fechar" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "C&ancelar" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Cancelar procura e fechar janela" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Fe&char" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuração de atalhos" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmfinddlg.actfeedtolistbox.caption msgctxt "tfrmfinddlg.actfeedtolistbox.caption" msgid "Feed to &listbox" msgstr "Enviar à &lista" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Cancelar procura, fechar e libertar memória" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Para todos os \"Localizar ficheiros\", cancelar, fechar e libertar memória" #: tfrmfinddlg.actgotofile.caption msgctxt "tfrmfinddlg.actgotofile.caption" msgid "&Go to file" msgstr "&Ir para ficheiro" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Localizar dados" #: tfrmfinddlg.actlastsearch.caption msgctxt "tfrmfinddlg.actlastsearch.caption" msgid "&Last search" msgstr "Ú<ima procura" #: tfrmfinddlg.actnewsearch.caption msgctxt "tfrmfinddlg.actnewsearch.caption" msgid "&New search" msgstr "&Nova procura" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nova procura (limpar filtros)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Ir para a página \"Avançado\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Ir para a página \"Carregar/Gravar\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Mudar para a página seguin&te" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Ir para a página \"Extensões\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Mudar para a &página anterior" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Ir para a página \"Resultados\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Ir para a página \"Padrão\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Iniciar" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Carregar" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Gr&avar" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Gra&var com \"Iniciar na pasta\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Se gravado então \"Iniciar na pasta\" será restaurado ao carregar o modelo. Use se quer fixar a procura numa determinada pasta" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usar modelo" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Localizar ficheiros" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensível a ma&iúsculas" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data de:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Da&ta até:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Ta&manho de:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Tam&anho até:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Procurar em &arquivos" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Localizar &texto num ficheiro" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Seguir s&imbólicas" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Localizar ficheiros S&EM o texto" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Mais recentes q&ue:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Separadores abertos" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Procurar parte do nome de ficheiro" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressão ®ular" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Substituir &por" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Pastas e &ficheiros seleccionados" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Expressão regular" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Hora de:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H&ora até:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Usar extensão de procura:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Insira os nomes das pastas a excluir da procura separados por \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Insira os nomes dos ficheiros a excluir da procura separados por \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Insira os nomes de ficheiros separados por \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Extensão" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Pastas" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Ficheiros" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Localizar dados" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&butos" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Co&dificar" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xcluir sub-pastas" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excluir ficheiros" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Máscara" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Iniciar na &pasta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Procurar em su&b-pastas:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Procuras &prévias" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Acção" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Para todos os outros, cancelar, fechar e libertar memória" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Abrir em novo separador" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opções" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Remover da lista" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Resultado" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostrar todos os itens" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Mostrar no editor" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostrar no visualizador" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avançado" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carregar/Gravar" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Extensões" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultados" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Padrão" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Localizar" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Localizar" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensível a m&aiúsculas" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expressões ®ulares" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Senha:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Utilizador:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Criar ligação física" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para onde a ligação aponta" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome da &ligação" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importar tudo!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importar selecção" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Seleccione as entradas a importar" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Ao clicar num sub-menu, selecciona todo o menu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Prima Ctrl e clique para seleccionar múltiplas entradas" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Ligador" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Gravar em..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Item" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nome de &ficheiro" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "A&baixo" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Abaixo" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Remover" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Eliminar" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "A&cima" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Acima" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Sobre" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Adicionar nome de ficheiro à linha de comandos" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nova instância de procura..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Adicionar caminho e nome de ficheiro à linha de comandos" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiar caminho para a linha de comandos" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Vista breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vista breve" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcular espaço &ocupado" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Alterar pasta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Alterar pasta para home" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Alterar pasta para pasta-mãe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Alterar pasta para raiz" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcular check&sum" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verificar checksum" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Limpar diário" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Limpar janela de diário" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Fech&ar todos os separadores" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Fechar separadores duplicados" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Fe&char separador" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Linha de comandos seguinte" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Definir linha de comandos para o comando seguinte do histórico" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Linha de comandos anterior" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Definir linha de comandos para o comando anterior do histórico" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vista de colunas" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "&Comparar por conteúdos" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Comparar pastas" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparar pastas" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuração da lista de pastas" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Configuração de separadores favoritos" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Configuração de separadores de pastas" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuração de atalhos" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Gravar definições" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Configuração de procuras" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Barra de ferramentas..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Configuração do menu da árvore" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Configuração de cores do menu da árvore" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostrar menu contextual" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Copiar todos os separadores para o lado oposto" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copiar todas as &colunas mostradas" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copiar nomes de ficheiros com caminho com&pleto" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiar nomes de &ficheiros para a área de transferência" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Copiar nomes com caminho UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiar ficheiros sem pedir confirmação" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Copiar caminho completo dos ficheiros seleccionados sem separador de pasta final" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copiar caminho completo dos ficheiros seleccionados" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiar para o mesmo painel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiar" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostrar espaço oc&upado" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Cor&tar" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Mostrar parâmetros de comando" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Para todas as procuras, cancelar, fechar e libertar memória" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Histórico da pasta" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Lista da pasta" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Seleccione qualquer comando e execute-o" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editar" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editar co&mentário..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editar novo ficheiro" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editar campo de caminho acima da lista de ficheiros" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Trocar &painéis" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Executar script" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extrair ficheiros..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "&Associações de ficheiros..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binar ficheiros..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostrar propriedades de &ficheiro" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividir ficheiro" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vista &plana" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Foco na linha de comandos" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Trocar foco" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Trocar entre a lista esquerda e direita" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar cursor no primeiro ficheiro da lista" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar cursor no último ficheiro da lista" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Criar li&gação física" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Conteúdo" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Modo Painéis &horizontais" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Teclado" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Vista breve no painel esquerdo" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Vista de colunas no painel esquedo" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Esquerdo &= Direito" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Vista &plana no painel esquerdo" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Abrir lista esquerda de unidades" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Orden in&versa no painel esquerdo" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Ordenar painel esquerdo por &atributos" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Ordenar painel esquerdo por &data" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Ordenar painel esquerdo por &extensão" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Ordenar painel esquerdo por &nome" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Ordenar painel esquerdo por &tamanho" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vista de miniaturas no painel esquerdo" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Carregar separadores dos favoritos" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carregar selecção da área de transferência" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carregar se&lecção de ficheiro..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Carregar &separadores de ficheiro" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Criar &pasta" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Seleccionar todos com a mesma e&xtensão" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Seleccionar todos com o mesmo nome" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Seleccionar todos com o mesmo nome e extensão" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Seleccionar todos no mesmo caminho" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverter selecção" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Seleccionar tudo" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Remover selecção de grupo..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Seleccionar &grupo" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Rem&over todas as selecções" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizar janela" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Ferramenta Multi-renomear" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Li&gar a rede..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Desligar de rede" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Ligação &rápida a rede..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Novo separador" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Carregar os favoritos seguintes na lista" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Mudar para o separador seguin&te" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tentar abrir arquivo" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Abrir ficheiro barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Abrir &pasta em novo separador" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Abrir lista do S&VF" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualizador de operações" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opções..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Comprimir ficheiros" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Definir posição do divisor" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Co&lar" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Carregar os favoritos anteriores na lista" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Mudar para o se¶dor anterior" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rápido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Procura rápida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Painel &Vista rápida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Actualizar" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Recarregar os últimos favoritos carregados" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mover" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mover/Renomear ficheiros sem pedir confirmação" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renomear" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Renomear separador" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Regravar os últimos favoritos carregados" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurar selecção" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Ordem in&versa" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Vista breve no painel direito" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Vista de colunas no painel direito" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Direito &= Esquerdo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Vista &plana no painel direito" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Abrir lista direita de unidades" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Ordem in&versa no painel direito" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Ordenar painel direito por &atributos" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Ordenar painel direito por &data" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Ordenar painel direito por &extensão" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Ordenar painel direito por &nome" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Ordenar painel direito por &tamanho" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vista de miniaturas no painel direito" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Executar &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Gravar separadores actuais como novos favoritos" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Gra&var selecção" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Gravar s&elecção para ficheiro..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Gravar &separadores em ficheiro" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Procurar..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Todos os separadores bloqueados com pasta aberta em novos separadores" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Definir todos os separadores como Normal" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Definir todos os separadores como Bloqueado" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Todos os separadores bloqueados com alterações a pasta permitidas" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Alterar &atributos" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueado com pastas aber&tas em novos separadores" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&loqueado" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueado com alterações de pastas permiti&das" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Abrir usando associações do sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostrar menu de botões" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostrar histórico da linha de comandos" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostrar fic&heiros ocultos/de sistema" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordenar por &atributos" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ordenar por &data" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordenar por &extensão" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordenar por &nome" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordenar por &tamanho" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Abrir lista de unidades" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Activar/Desactivar exibição de nomes na lista de ignorados" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Criar &ligação simbólica..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Sincronizar pastas..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destino &= Origem" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Arquivo(s) de &teste" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vista Miniaturas" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Alternar modo de ecrã completo" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferir a pasta sob o cursor para a janela esquerda" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferir a pasta sob o cursor para a janela direita" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Vis&ta em árvore" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Ordenar de acordo com os parâmetros" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "De-seleccionar todos com a mesma ex&tensão" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "De-seleccionar todos com o mesmo nome" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "De-seleccionar todos com o mesmo nome e extensão" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "De-seleccionar todos no mesmo caminho" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Ver" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostrar histórico de caminhos visitados na vista activa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ir para a entrada seguinte no histórico" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ir para a entrada anterior no histórico" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Ver diário" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Ver instâncias actuais de procura" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visitar a página web do Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Limpar" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Trabalhar com a lista de pastas e parâmetros" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Sair" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Pasta" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Lista de pastas" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostrar a pasta actual do painel direito no painel esquerdo" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Ir para a pasta home" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Ir para a pasta raiz" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Ir para a pasta-mãe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Lista de pastas" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostrar a pasta actual do painel esquerdo no painel direito" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Caminho" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiar..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Criar ligação..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Limpar" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ocultar" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar tudo" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mover..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Criar ligação simbólica..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opções do separador" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaurar" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Iniciar" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandos" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguração" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favoritos" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Ficheiros" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marcar" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rede" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Mo&strar" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opções do separador" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Separadores" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Aceitar" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Seleccione o seu comando interno" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Ordem de idade" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Ordem de idade" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Escolher todas as categorias por predefinição" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Selecção:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Categorias:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Nome do comando:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtro:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Dica:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Atalho:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Categoria" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ajuda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Dica" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Atalho" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Sensível a maiúsculas" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorar acentos e ligações" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Atri&butos:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Máscara de entrada:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ou selecciona&r tipo predefinido:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Criar nova pasta" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Insira o nome da nova pasta:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Novo tamanho" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altura:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualidade de compressão jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Largura:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Nome de ficheiro" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Limpar" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Limpar" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "Fe&char" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configuração" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Eliminar" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Lista de pré-definições" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Editar nomes..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extensão" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Editar" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Carregar nomes de ficheiro..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Nome de ficheiro" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Nome de ficheiro" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Extensões" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Extensões" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Renomear" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Repor tudo" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Gravar" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Gravar como..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Ordenar" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Multi-renomear" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Sensível a maiúsculas" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Ac&tivar" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpressões regulares" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usar substituição" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Localizar && substituir" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Máscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predefinições" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extensão" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Localizar" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervalo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nome de ficheiro" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Su&bstituir..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Número inicial" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Largura" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Acções" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Editar" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Nome antigo de ficheiro" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo nome de ficheiro" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Caminho de ficheiro" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Clique Aceitar quando fechar o editor para carregar os nomes alterados!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Escolha uma aplicação" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personalizado" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Gravar associação" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Definir aplicação seleccionada como acção predefinida" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipo de ficheiro a abrir: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Múltiplos nomes de ficheiro" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiplos URIs" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome de ficheiro único" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI único" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplicar" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Ajuda" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Por favor seleccione uma das sub-páginas, esta página não contém definições." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Eliminar" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Outro..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.btnarchivertesthelper.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opções:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formatar modo de análise:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Ac&tivo" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Modo Dep&uração" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Mostrar saída da co&nsola" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "A ad&icionar:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ar&quivador:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Eliminar:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "De&scrição:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "E&xtensão:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Ex&trair:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extrair sem caminho:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Posição da ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Intervalo de procura de ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Arquivadores:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Final da lista (opcional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&mato da lista:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Iní&cio da lista (opcional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Cadeia de consulta da palavra passe:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Criar arquivo de extracção automática:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Teste:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&uto-configurar" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Geral" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quando tamanho, data ou atributo&s mudem" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e suas sub-&pastas:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quando &ficheiros sejam criados, eliminados ou renomeados" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quando a aplicação está em 2º &plano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Desactivar actualização automática" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Actualizar lista de ficheiros" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mos&trar sempre ícone de tabuleiro" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Ocultar automaticamente dispositivos não montados" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mo&ver ícone para o tabuleiro de sistema ao minimizar" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Permitir só uma instância do DC de cada vez" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aqui pode inserir um ou mais dispositivos ou pontos de montagem, separados por \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Lista &negra de dispositivos" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Tamanho das colunas" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Mostrar extensões de ficheiro" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Alin&hada (com Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Após o nome de fichei&ro" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automático" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Total de colunas fixas" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Largura fixa" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usar indicador de &gradiente" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Modo binário" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Texto:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Fundo 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Cor de fun&do:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Cor de &1º plano:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Sucesso:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Cortar &texto na largura da coluna" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Estender largura da célula se o texto não couber na coluna" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linhas &horizontais" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linhas &verticais" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Preencher automaticamente colunas" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostrar grelha" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Tamanho de coluna automático" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Tamanho de c&oluna automático:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Histórico da linha de co&mandos" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Histórico de &pastas" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Histórico de máscaras de &ficheiros" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Separadores de pastas" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Gra&var configuração" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "&Histórico de Localizar/Substituir" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Pastas" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Localização dos ficheiros de configuração" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Gravar ao sair" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Ordem da configuração na árvore esquerda" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Definir na linha de comandos" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Temas de ícones:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Memória de miniaturas:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Pasta do p&rograma (versão portátil)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Pasta home do &utilizador" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Aplicar alteração a todas as colunas" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Eliminar" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Predefinições" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Seguinte" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Anterior" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Repor predefinição" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Gravar como" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Gravar" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Ao clicar para alterar algo, alterar em todas as colunas" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Geral" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Usar cursor vazio" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Usar cor de selecção inactiva" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Usar selecção invertida" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Usar letra e cor personalizadas nesta vista" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fundo:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fundo 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Con&figurar vista de colunas:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Nome actual de coluna]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cor do cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Texto do cursor:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Letra:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Tamanho:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Cor do texto:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Cor do cursor inactivo:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Cor de marca inactiva:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Cor de marca:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma antevisão. Mova o cursor e seleccione ficheiros para ver imediatamente o aspecto das várias definições." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Definições da coluna:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Adicionar coluna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posição do painel após a comparação:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Adicionar pasta da moldura &activa" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "A&dicionar pastas das molduras activas && inactivas" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Adicionar pasta para onde vou na&vegar" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Adicionar uma cópia da entrada seleccionada" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Adicionar &selecção actual ou pastas activas da moldura activa" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Adicionar um separador" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Adicionar um sub-menu" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Adicionar a pasta que vou digitar" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Colapsar tudo" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Colapsar item" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Cortar selecção de entradas" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Eliminar tudo!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Eliminar o item seleccionado" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Eliminar sub-menu e todos os seus elementos" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Eliminar sub-menu mas manter os elementos" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Expandir item" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Focar janela da árvore" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Ir para o 1º item" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Ir para o último item" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Ir para o item seguinte" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Ir para o item anterior" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Inserir pasta da moldura &activa" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Inserir pastas &das molduras activa && inactiva" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Inserir pasta para onde vou na&vegar" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Inserir cópia da entrada seleccionada" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Inserir pastas &selecção actual ou pastas activas da moldura activa" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Inserir um separador" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Inserir sub-menu" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Inserir a pasta que vou digitar" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Mover para seguinte" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Mover para anterior" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todos os ramos" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Colar o que foi cortado" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "&Procurar && substituir no caminho" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Procurar && substituir no caminho e no destino" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Procurar && substituir no caminho des&tino" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Afinar caminho" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Afinar caminho destino" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Adicionar..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Segurança..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Eliminar..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportar..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importar..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Inserir..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Diversos..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Algumas funções para escolher o destino apropriado" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Ordenar..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Ao adicionar a pasta, adicionar também o destino" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Expandir sempre a árvore" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Mostrar só variáveis de ambiente válidas" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "No balão, mostrar [o caminho]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nome, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nome, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista de pastas (ordenar com arrastar/largar)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Outras opções" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nome:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Caminho:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Destino:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...só nível actual de itens seleccionados" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Analisar todos os caminhos de pastas para validar os que realmente existem" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Analisar todos os caminhos e destinos de pastas para validar os que realmente existem" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "para um ficheiro de lista de pastas (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "to a \"wincmd.ini\" of TC (keep existing)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "num \"wincmd.ini\" de TC (eliminar existente)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Ir para a informação de configuração TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Ir para a informação de configuração TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Menu de teste HotDir" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "de um ficheiro de lista de pastas (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "de \"wincmd.ini\" de TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navegar..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Restaurar uma segurança de uma lista de pastas" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Gravar uma segurança da actual lista de pastas" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Localizar e substituir..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...tudo, de A a Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "... só um único grupo de itens!" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...conteúdo do sub-menu seleccionado, sem sub-níveis" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...conteúdo do sub-menu seleccionado, com sub-níveis" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Testar menu resultante" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Afinar camin&ho" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Afinar caminho des&tino" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Adição do painel principal:" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Caminhos" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Caminho para relativizar:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Entre todos os formatos suportados, perguntar sempre qual usar" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Ao gravar texto Unicode, gravar em formato UTF8 (senão grava em formato UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Ao largar texto, gerar nome de ficheiro automaticamente (senão pede ao utilizador)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Mo&strar diálogo de confirmação após largar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Ao arrastar e largar texto nos painéis:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Pôr o formato mais desejado no topo da lista (usar arrastar/largar):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(se o mais desejado não existir, será usado o segundo e assim por diante)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(não funcionará com algumas aplicações fonte, tente desmarcar se tiver problemas)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostrar sistema de &ficheiros" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostrar &espaço livre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostrar rótu&lo" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista de unidades" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Permite avançar o cursor quando a nova linha é criada com <Enter>, com o mesmo espaço precedente que a linha anterior" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Cursor após o fim da linha" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Permite ao cursor ir para espaços vazios além da posição de fim-de-linha" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Mostrar caracteres especiais" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opções internas do editor" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Repor" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Gravar" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributos de elemento" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de &texto" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usar (e editar) definições de esquema &globais" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usar definições de esquema &locais" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Negrito" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Itálico" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Rasurado" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Sublinhado" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Li&gar" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Adicionar..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Eliminar..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importar/Exportar" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Inserir..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Ordenar..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Nada" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Expandir sempre a árvore" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Esquerda" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Direita" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lista de separadores favoritos (ordenar com arrastar/largar)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Outras opções" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "O que restaurar onde na entrada seleccionada:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Separadores existentes a manter:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Gravar histórico da pasta:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Separadores gravados à esquerda a restaurar:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Separadores gravados à direita a restaurar:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "um separador" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Adicionar separador" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Adicionar sub-menu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Colapsar tudo" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...só o nível actual de itens seleccionado" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "eliminar tudo!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menu e todos os elementos" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "só sub-menu, manter elementos" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "item seleccionado" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Eliminar o item seleccionado" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportar selecção para ficheiro(s) .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Menu de tese de favoritos" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importar ficheiro(s) .tab de acordo com a predefinição" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar ficheiro(s) .tab na posição seleccionada" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar ficheiro(s) .tab na posição seleccionada" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importar ficheiro(s) .tab na posição seleccionada num sub-menu" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Inserir separador" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Inserir sub-menu" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todos os ramos" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Colar" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...tudo, de A a Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "... só um único grupo de itens!" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ordenar só grupo único de itens" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...conteúdo do sub-menu seleccionado, sem sub-níveis" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...conteúdo do sub-menu seleccionado, com sub-níveis" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testar menu resultante" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Adicionar" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Adicionar" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Clonar" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Seleccione o seu comando interno" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "A&baixo" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Editar" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Inserir" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Inserir" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Remo&ver" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Re&mover" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Remover" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&enomear" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Ajudante de lembrete de variáveis" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "A&cima" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Caminho inicial do comando. Não usar aspas nesta cadeia." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nome da acção. Nunca é passado ao sistema, é só uma mnemónica escolhida por si e para si" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parâmetro a passar ao comando. Usar aspas em nomes de ficheiro longos e com espaços (inseridos manualmente)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Comando a executar. Nunca pôr entre aspas." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Descrição da acção:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Acções" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensões" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Pode ordenar com arrastar/largar" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipos de ficheiro" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ícone" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Pode ordenar acções com arrastar/largar" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Pode ordenar extensões com arrastar/largar" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Pode ordenar tipos de ficheiro com arrastar/largar" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Nome:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Comando" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Personalizado com..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Personalizado" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir no editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Editar com..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obter saída do comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Abrir no editor interno" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Abrir no visualizador interno" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Abrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Abrir com..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executar no terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Ver" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir no visualizador" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Ver com..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Clique para alterar o ícone!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Aplicar as definições actuais a todos os ficheiros e caminhos configurados" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Acções contextuais pré-definidas (Ver/Editar)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Executar numa shell" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Menu contextual estendido" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Configuração de associações de ficheiros" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Sugerir a adição da associação do ficheiro quando ainda não estiver incluída" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Ao aceder a associações de ficheiros, sugerir a adição do ficheiro actual se ainda não estiver incluído num tipo configurado" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Executar no terminal e fechar" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Executar no terminal e manter aberto" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Comandos" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ícones" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Caminhos iniciais" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Itens de opções estendidas:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Caminhos" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Como definir caminhos ao adicionar elementos para ícones, comandos e caminhos iniciais:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Fazer isto para ficheiros e caminho para:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Caminho para relativizar:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostrar diálogo de confirmação para:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operação Cop&iar" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operação &Eliminar" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" "Eliminar para a reciclagem (\n" "Shift rever&te esta definição)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operação &Eliminar para o lixo" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "La&rgar marca Só de leitura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operação &Mover" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Comentários do processo com ficheiros/pastas" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Seleccionar nome de &ficheiro sem extensão ao renomear" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mos&trar painel de selecção de separador no diálogo Copiar/Mover" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Saltar erros de &operações de ficheiros e escrevê-los no diário" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Operação Testar arquivo" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Operação Verificar checksum" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "A executar as operações" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Ambiente do utilizador" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamanho do &buffer para operações de ficheiros (em KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Tamanho do buffer para cálculo de &hash (em KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostrar progresso da operação &inicialmente em" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Estilo de renomeação automática de duplicados:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de passagens de limpeza:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Repor predefinição do DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Usar &cursor vazio" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Usar cor de selecção inactiva" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sar selecção invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "F&undo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Fu&ndo 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Cor do c&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xto do cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Cor do cursor inactivo:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Cor de marca inactiva:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Nível de &brilho do painel inactivo" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Cor da &marca:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Cor do texto:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma antevisão. Pode mover o cursor, seleccionar ficheiros e ver imediatamente o aspecto das várias definições." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Cor do t&exto" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Ao lançar uma procura de ficheiros, limpar o filtro de máscaras" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgctxt "tfrmoptionsfilesearch.cbpartialnamesearch.caption" msgid "&Search for part of file name" msgstr "&Procurar parte do nome do ficheiro" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Mostrar barra de menu no \"Localizar ficheiros\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgctxt "tfrmoptionsfilesearch.dbtextsearch.caption" msgid "Text search in files" msgstr "Procurar texto em ficheiros" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Procurar ficheiro" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Filtros actuais com botão \"Nova procura\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgctxt "tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption" msgid "Default search template:" msgstr "Modelo de procura predefinido:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgctxt "tfrmoptionsfilesearch.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Usar mapa de memória para procurar te&xto em ficheiros" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgctxt "tfrmoptionsfilesearch.rbusestreaminsearch.caption" msgid "&Use stream for search text in files" msgstr "&Usar corrente para procurar texto em ficheiros" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Prede&finição" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatação" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Abreviaturas personalizadas a usar:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordem" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensibilidade a maiúsculas:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato incorrecto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato de &data e hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato do ta&manho de ficheiro:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "&Formato do rodapé:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Formato do cabeçal&ho:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megab&yte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Inserir novos ficheiros:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Formato do tamanho da o&peração:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "A o&rdenar pastas:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Método de &ordenação" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Mover ficheiros actualizados:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Permitir alterar para &pasta-mãe com duplo clique em área vazia da vista de ficheiro" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Não carregar lista de ficheiros até um separador estar activo" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mostrar pastas entre parênteses rectos" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Rea&lçar ficheiros novos e actualizados" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Permitir &renomear no local com duplo clique num nome" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Carregar lista de &ficheiros em linha separada" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Carregar ícones depois da lis&ta de ficheiros" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostrar ficheiros ocultos e de s&istema" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Ao seleccionar ficheiros com a <BARRA DE ESPAÇO>, mover para o próximo ficheiro (tal como com <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filtro estilo Windows ao marcar ficheiros (\"*.*\" também selecciona ficheiros sem extensão, etc.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Usar filtro de atributo independente no diálogo de entrada da máscara" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Marcar/Desmarcar entradas" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Valor predefinido de máscara de atributo:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Eliminar" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Cores de tipos de ficheiros (ordenar com arrastar && largar)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributos de categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Cor de cate&goria" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara de categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nome de categoria:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Letras" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Adicionar atal&ho" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Eliminar" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Eliminar atalho" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Editar atalho" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Categoria seguinte" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Fazer balão do menu relacionado com o ficheiro" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Categoria anterior" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Repor predefinição do DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Gravar agora" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Ordenar por nome do comando" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Ordenar por atalhos (agrupado)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Ordenar por atalhos (um por linha)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorias:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&mandos:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Ficheiro&s de atalho:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "O&rdem:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Categorias" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Ordem" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Atalhos" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descrição" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Atalho" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parâmetros" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Controlos" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e sub-&pastas:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostrar ícones para ações nos &menus" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Mostrar ícones nos botões" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "M&ostrar ícones sobrepostos, i.e. para ligações" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Ficheiros ocultos sombreados (lento)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Desactivar ícones especiais" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Tamanho do ícone" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Tema de ícones" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Mostrar ícones" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Mostrar ícones à esquerda do nome de ficheiro" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Painel de discos:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Painel de ficheiros:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "T&udo" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Todos os associados + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Sem íco&nes" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Só ícone&s padrão" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "A&dicionar nomes seleccionados" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Adicionar n&omes seleccionados com caminho completo" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorar (não mostrar) os ficheiros e pastas seguintes:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Gravar em:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Setas es&querda e direita mudam a pasta (movimento tipo Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Dactilografia" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+L&etras:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Le&tras:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Letras:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Botões p&lanos" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ambiente pla&no" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostrar &espaço livre no rótulo da unidade" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostrar &janela de diário" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostrar painel de operações em 2º plano" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostrar progresso comum na barra de menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostrar l&inha de comandos" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostrar pasta act&ual" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostrar botões de uni&dade" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostrar rótulo de es&paço livre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostrar bo&tão da lista de unidades" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostrar botões de teclas de função" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostrar &menu principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Mostrar &barra de ferramentas" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostrar rótulo curto de espaço &livre" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostrar barra de e&stado" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostrar cabeçalho de tabulação" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "M&ostrar separadores de pasta" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostrar janela de te&rminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostrar duas barras de botões de unidade (largura fi&xa, acima das janelas de ficheiros)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Mostrar barra de ferramentas média" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Disposição do ecrã" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Ver conteúdo do diário" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Incluir data no nome do diário" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Com&primir/Descomprimir" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Execução externa da linha de comandos" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&iar/Mover/Criar ligação/Ligação simbólica" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Criar/Eliminar pas&tas" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Diário de &erros" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&riar um ficheiro de diário:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Máximo de ficheiros de diário" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Diário de mensagens &informativas" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Iniciar/Encerrar" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Registar operações com &sucesso" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Extensões do sistema de &ficheiros" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Diário de operações de ficheiros" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registar operações" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estado da operação" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Remover miniaturas de ficheiros que já não existem" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Ver conteúdo do ficheiro de configuração" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgid "Create new with the encoding:" msgstr "Criar novo com codificação:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ir sempre para a rai&z da unidade ao mudar de unidades" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Mostrar pasta actual na barra de título da janela principal" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Mostrar ecrã de abertura" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostrar mensagens de a&viso (só botão \"Aceitar\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Gravar miniaturas em memória" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Comentários (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "De exportação/importação TC:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "Co&dificação single-byte pré-definida:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "Codificação predefinida:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Ficheiro de configuração:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Executável TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Caminho de saída da barra:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Tamanho da miniatura:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selecção com o rato" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "O cursor de texto já não segue o cursor do rato" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Ao &clicar no ícone" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Abrir com" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rolar" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecção" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Duplo clique" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linha a linha" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linha a linha com mo&vimento do cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Página a página" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Clique único (abre ficheiros e pastas)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Clique único (abre pastas, duplo clique para ficheiros)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Ver conteúdo do diário" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Pastas individuais por dia" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Registar ficheiros com o caminho completo" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Mostrar barra de menu ao cimo " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Diário de renomeações" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Substituir carácter &inválido no nome por" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Anexar no mesmo diário de renomeações" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Por pré-definição" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Sair com a pré-definição modificada" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Pré-definir ao iniciar" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Con&figurar" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Ac&tivar" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Remover" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "A&finar" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descrição" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "E&xtensões de procura permitem usar algoritmos alternativos ou ferramentas externas (como \"locate\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Aplicar as definições actuais a todas as extensões configuradas" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Ao adicionar extensões, abrir a janela de configurações" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Configuração:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Biblioteca Lua a usar:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Caminho para relativizar:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Estilo do nome da extensão ao adicionar nova:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "&Extensões de compressão são usadas para trabalhar com arquivos" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Extensões de conteúdo permitem mostrar detalhes do ficheiro, como etiquetas mp3 ou atributos de imagens na lista de ficheiros ou usá-los nas ferramentas Procura e Multi-renomear" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Extensões do sistema de ficheiros permitem gerir unidades inacessíveis pelo sistema operativo ou a dispositivos externos como o Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Extensões de &visualização permitem mostrar formatos de ficheiros como imagens, folhas de cálculo, bases de dados, etc. no visualizador (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Extensão" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registado para" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Iniciar (o nome tem de começar com o primeiro carácter digitado)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Finalizar (o último carácter antes do ponto tem de coincidir)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Correspondência exacta do nome" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Sensível a maiúsculas" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Procurar por estes itens" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Manter novo nome ao desbloquear separador" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activar &painel destino ao clicar num dos seus separadores" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Mo&strar cabeçalho do separador mesmo que só haja um" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Fechar separadores duplicados ao sair do programa" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firmar fecho de todos os separadores" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Con&firmar fecho de separadores bloqueados" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitar comprimento do nome do separador a " #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostrar separadores blo&queados com um asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Separadores em múl&tiplas linhas" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Acima abre o novo separador em 1º plano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Abrir &novos separadores ao lado do separador actual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Reutilizar separador existente" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostrar &botão de fecho do separador" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Mostrar sempre letra da unidade no título" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Cabeçalhos dos separadores de pastas" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caracteres" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Acção do duplo clique num separador:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posição dos s&eparadores" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Nada" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Esquerda" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Direita" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Abrir configuração de separadores favorita após gravar" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Abrir configuração de separadores favorita após gravar uma nova" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Activar opções extra nos separadores favoritos (escolher lado ao restaurar, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Definições extra predefinidas ao gravar novos favoritos:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Pasta de separadores" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Ao restaurar, separadores existentes a manter:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Separadores gravados à esquerda restauram-se para:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Separadores gravados à direita restauram-se para:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Manter histórico de pastas com separadores favoritos:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Posição no menu ao gravar novos separadores favoritos:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{comando} deveria estar aqui presente para reflectir o comando a executar no terminal" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{comando} deveria estar aqui presente para reflectir o comando a executar no terminal" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Comando para executar no terminal:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Comando para executar um comando no terminal e fechar a seguir:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Comando para executar um comando no terminal e ficar aberto:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parâmetros:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parâmetros:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parâmetros:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botão" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Eliminar" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editar atal&ho" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserir novo botão" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Seleccionar" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Outro..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Remo&ver atalho" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugerir" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Deixar o DC sugerir a dica baseado no tipo de botão, comando e parâmetros" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botões p&lanos" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Reportar erros com comandos" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "M&ostrar legendas" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Inserir parâmetros de comandos, cada um em sua linha. Prima F1 para ajuda dos parâmetros" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Aparência" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Tamanho da &barra:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "Coman&do:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajuda" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Atalho:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Íco&ne" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamanho do í&cone:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parâmetros:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Estilo:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Su&gestão:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Adicionar barra com TODOS os comandos" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "para um comando externo" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "para um comando interno" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "para um separador" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "para uma sub-barra" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Seguranças..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra actual..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um ficheiro .BAR do TC (manter existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um ficheiro .BAR do TC (eliminar existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (eliminar existente)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de topo..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Gravar segurança da barra" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "para um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "para um ficheiro .BAR do TC (manter existente)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "para um ficheiro .BAR do TC (eliminar existente)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "para um \"wincmd.ini\" do TC (manter existente)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "para um \"wincmd.ini\" do TC (eliminar existente)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restaurar uma segurança da barra" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "de um ficheiro de barra (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "de um ficheiro TC .BAR único" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "de \"wincmd.ini\" do TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "para adicionar à barra actual" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "para adicionar a uma nova barra da barra actual" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "para adicionar a uma nova barra da barra de topo" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "para adicionar à barra de topo" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "para substituir a barra de topo" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Procurar e substituir..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "em todos dos acima..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "em todos os comandos..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "em todos os nomes de ícones..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "em odos os parâmetros..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "em todos os caminhos iniciais..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "logo após a selecção actual" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "como 1º elemento" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "logo antes da selecção actual" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Separador" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Espaço" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botão" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Aplicar definições actuais a todos os ficheiros e caminhos configurados" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Comandos" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ícones" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Caminhos iniciais" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Caminhos" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Fazer isto para ficheiros e caminhos para:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Caminho para relativizar:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Como definir caminhos ao adicionar elementos para ícones, comandos e caminhos iniciais:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Manter a janela do terminal aberta após executar o programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Executar no terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usar programa externo" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parâmetros a&dicionais" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Caminho do &programa a executar" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Eliminar" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Renomear" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Outro..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Configuração da dica para o tipo de ficheiro seleccionado:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Opções gerais sobre dicas:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostrar sugestão para ficheiros no painel" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Dica da cate&goria:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara da categoria:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Atraso para ocultar a dica:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Modo de mostrar a dica:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Tipos de &ficheiro:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Descartar modificações" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Ordenar tipos de ficheiro de dicas" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Com duplo clique na barra ao cimo do painel de ficheiros" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Com o menu e comando interno" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Duplo clique na árvore selecciona e sai" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Com o menu e comando interno" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Com duplo clique num separador (se configurado para tal)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Ao usar o atalho de teclado, sai da janela devolvendo a escolha actual" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Clique único na árvore selecciona e sai" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Usar para histórico da linha de comandos" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Usar para histórico de Dir" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Usar para histórico de vistas (caminhos visitados na vista actual)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Comportamento relativo à selecção:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Opções relativas a menus da árvore:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Onde usar menus da árvore:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*NOTA: em relação a opções como a sensibilidade a maiúsculas, ignorar ou não os acentos, estas são gravadas e restauradas individualmente para cada contexto de uma utilização e sessão para outra." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Com a lista de pastas quentes:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Com separadores favoritos:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Com histórico:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Usar e mostrar atalho de teclado para escolher itens" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Letra" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Opções de disposição e cores:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Cor de fundo:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Cor do cursor:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Cor do texto encontrado:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Texto encontrado sob o cursor:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Cor do texto normal:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Texto normal sob o cursor:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Antevisão do menu da árvore:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Cor de texto secundário:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Texto secundário sob o cursor:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Cor do atalho:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Atalho sob o cursor:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Cor de texto não seleccionável:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Texto não seleccionável sob o cursor:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Altere uma cor à esquerda e verá uma antevisão dos menus de árvore neste exemplo." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Nº de colunas do livro" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimir ficheiros" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Criar arquivos separados, um por cada ficheiro/pasta seleccionado" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Criar arquivo de extracção automática" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mo&ver para arquivo" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Arquivo de discos &múltiplos" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Pôr no arq&uivo TAR primeiro" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Com&primir também nomes de caminhos (só recursivo)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimir ficheiro(s) no ficheiro:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fe&char" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimir todos e execut&ar" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimir e exec&utar" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propriedades do ficheiro comprimido" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributos:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Taxa de compressão:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Método:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Tamanho original:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Ficheiro:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tamanho comprimido:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Hora:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Configuração da impressão" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Margens (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Inferior:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Esquerda:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Direita:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Superior:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Fechar painel de filtragem" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Insira o texto de filtragem ou filtre por" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensível a maiúsculas" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "P" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Pastas" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Ficheiros" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Comparar início" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Comparar final" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Alternar entre procurar e filtrar" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Mais regras" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "M&enos regras" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Usar extensões de &conteúdo, combinar com:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Extensão" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&E (tudo verdadeiro)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OU (qualquer verdadeiro)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Aplicar" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Modelo..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Modelo..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Aceitar" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Seleccionar duplicados" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Deixar pelo menos um ficheiro por seleccionar em cada grupo:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Remover selecção por nome/extensão:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Seleccionar por nome/extensão:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceitar" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Sep&arador" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Contar de" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Resultado:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Seleccionar as pastas a inserir (podem ser várias)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "O &fim" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "O p&rincípio" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceitar" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Contar primeiro de" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Contar último de" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Descrição do intervalo" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Resultado:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleccionar os caracteres a inserir:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Primeiro:´+Último]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Primeiro,&Tamanho]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "O &fim" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "O p&rincípio" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "O f&im" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "O &princípio" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Alterar atributos" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arquivo" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Criado:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Acedido:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Só de leitura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Incluindo sub-pastas" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propriedades do carimbo" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Ordenar" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceitar" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Arraste e largue elementos para ordenar" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Algumas funções para escolher o caminho apropriado" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisor" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Requerer um ficheiro de verificação CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Tamanho e nº. de partes" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Dividir ficheiro para pasta:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Número de partes" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Compilação" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Submeter" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Sistema operativo" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plataforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisão" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Criar ligação simbólica" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Usar caminho relativo onde possível" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para o qual a ligação aponta" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome da &ligação" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Eliminar nos dois lados" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Eliminar esquerdo" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Eliminar direito" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Remover selecção" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Selecionar para copiar (direcção pré-definida)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Selecionar para copiar -> (esquerda para direita)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Inverter direcção da cópia" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Selecionar para copiar <- (direita para esquerda)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Seleccionar para eliminar <-> (ambos)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Seleccionar para eliminar <-> (esquerda)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Seleccionar para eliminar <-> (direita)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Fechar" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Modelo..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizar pastas" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "assimétrico" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "por conteúdo" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorar data" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "só seleccionados" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Sub-pastas" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mostrar:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(na janela principal)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Ver esquerdo" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Ver direito" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicados" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "únicos" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Clique em \"Comparar\" para iniciar" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmar sobrescrição" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Menu de árvore" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Seleccione a sua pasta quente:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Procurar por maiúsculas" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Colapso total" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Expansão total" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Procura ignorando acentos e ligações" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Procura ignorando maiúsculas" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Procurar exactamente por acentos e ligações" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Não mostrar conteúdo do ramo \"só\" porque a cadeia procurada se encontra no nome do ramo" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Se a cadeia procurada se encontrar num nome de ramo, mostrar todo o ramo, mesmo que os elementos não correspondam" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Fechar menu da árvore" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Configuração do menu da árvore" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Configuração das cores do menu da árvore" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&dicionar novo " #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Al&terar" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Prede&finição" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Funções para seleccionar o caminho correcto" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Extensão de afinação" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tectar tipo de arquivo por conteúdo" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Pode eliminar fi&cheiros" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Suporta e&ncriptação" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mo&strar como ficheiros normais (ocultar ícone do compressor)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Suporta co&mpressão em memória" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Pode modificar arquivos existentes" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "O &arquivo pode conter múltiplos ficheiros" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Pode criar novos arqui&vos" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&uporta diálogo de opções" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permitir procurar texto nos ar&quivos" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descrição:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etectar cadeia:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensão:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Bandeiras:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nome:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "E&xtensão:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Ex&tensão:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Acerca do visualizador..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra a mensagem Sobre" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Recarregar automaticamente" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Alterar codificação" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiar ficheiro" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiar ficheiro" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copiar para a memória" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Copiar formatado para a memória" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Eliminar ficheiro" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Eliminar ficheiro" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Sair" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Localizar" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Localizar seguinte" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Localizar anterior" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Ecrã completo" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir para linha..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Ir para linha" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Centrar" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Segui&nte" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Carregar o ficheiro seguinte" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "A&nterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carregar o ficheiro anterior" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Espelhar na horizontal" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Espelhar" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Espelhar na vertical" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mover ficheiro" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mover ficheiro" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Antever" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Imp&rimir..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Configurar impre&ssora..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recarregar" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recarregar o ficheiro actual" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Rodar 180 graus" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Rodar -90 graus" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Rodar 90 graus" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Gravar" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Gravar como..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Gravar ficheiro como..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Captura de ecrã" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Atrasar 3 seg" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Atrasar 5 seg" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Seleccionar tudo" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Mostrar como &bin" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Mostrar como livr&o" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Mostrar como &dec" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Mostrar como &hex" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Mostrar como &texto" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Mostrar como texto aj&ustado" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Mostrar c&ursor de texto" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (só texto)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Extensões" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Mostrar transparênc&ia" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Esticar" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Esticar a imagem" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Esticar só grandes" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "Cortar te&xto" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Ampliação" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Reduzir" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Reduzir" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Recortar" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ecrã completo" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Exportar quadro" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Quadro seguinte" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Pintar" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Quadro anterior" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Olhos vermelhos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizador" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Sobre" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Elipse" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagem" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Caneta" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Rect" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rodar" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura de ecrã" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Extensões" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Iniciar" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Parar" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operações de ficheiros" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Sempre no topo" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Usar arrastar e largar para mover operações entre filas" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Mostrar em janela separada" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Pôr primeiro na fila" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Pôr último na fila" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Fila" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fora da fila" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Mostrar em janela separada" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pausar tudo" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Seguir &ligações" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando a pasta &existe" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quando o ficheiro existe" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Aceitar" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Linha de comandos:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parâmetros:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Caminho inicial:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Con&figurar" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiar d&ata/hora" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Trabalhar em 2º plano (ligação separada)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Tem de fornecer permissão de administrador" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "para copiar este objecto:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "para criar este objecto:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "para eliminar este objecto:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "para obter os atributos deste objecto:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "para criar esta ligação física:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "para abrir este objecto:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "para renomear este objecto:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "para definir atributos deste objecto:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "para criar esta ligação simbólica:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Data" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Altura" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Largura" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabricante" #: uexifreader.rsmodel msgid "Camera model" msgstr "Modelo da câmara" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientação" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Impossível encontrar o ficheiro que poderia ajudar a validar a combinação final:\n" "%s\n" "\n" "Pode disponibilizá-lo e clicar em \"Aceitar\", por favor?\n" "Ou clique em \"Cancelar\" para continuar." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LIG>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancelar filtro rápido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancelar operação actual" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Insira o nome do ficheiro com extensão, para texto largado" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formato de teto a importar" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Qebrado:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Geral:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Em falta:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Erro de leitura:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Sucesso:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Insira a checksum e escolha o algoritmo:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verificar checksum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Quer limpar os filtros para esta nova procura?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Área de transferência sem dados de barra de ferramentas válidos." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Tudo;Painel activo;Painel esquerdo;Painel direito;Operações de ficheiro;Configuração;Rede;Diversos;Porta paralela;Imprimir;Marcar;Segurança;Área de transferência;FTP;Navegação;Ajuda;Janela;Linha de comandos;Ferramentas;Ver;Utilizador;Separadores;Ordenar;Diário" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ordem antiga;A -> Z" #: ulng.rscolattr msgid "Attr" msgstr "Atr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nome" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Tamanho" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinhar" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Legenda" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Eliminar" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Conteúdo do campo" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mover" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Largura" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizar coluna" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Configurar associação de ficheiro" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "A comfirmar comando e parâmetros" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Auto;Activo;Inactivo" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barra DC importada" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barra TC importada" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_TextoLargado" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_TextoHTMLLargado" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_RichTextLargado" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_TextoSimplesLargado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_TextoUTF16Largado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_TextoUTF8Largado" #: ulng.rsdiffadds msgid " Adds: " msgstr "Adiciona: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "A comparar..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Elimina: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Os ficheiros são idênticos!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Compara: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modifica: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codificação" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Fins-de-linha" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "O texto é idêntico, mas são usadas as seguintes opções:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "O texto é idêntico, mas os ficheiros não correspondem!\n" "Foram encontradas as seguintes diferenças:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Ab&ortar" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "T&udo" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Jun&tar" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto-renomear ficheiros fonte" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Renomear automaticamente os fic&heiros-destino" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancelar" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "C&omparar por conteúdo" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuar" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Unir" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "U&nir todos" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Sair do programa" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&norar" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorar todos" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Não" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "N&enhum" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Aceitar" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Outro" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "S&obrescrever" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "&Sobrescrever todos" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Sobrescrever os &maiores" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sobrescrever mais an&tigos" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Sobrescrever m&enores" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "R&enomear" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Recomeçar" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Repe&tir" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Como ad&ministrador" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Saltar" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Sa<ar todos" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Desblo&quear" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "S&im" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiar ficheiro(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mover ficheiro(s)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Iniciar" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Fila" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Velocidade %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Velocidade %s/s, falta %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text Format;Formato HTML;Formato Unicode;Formato de texto simples" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espaço livre na unidade" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sem rótulo>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sem suporte>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno do Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ir para linha:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Ir para linha" #: ulng.rseditnewfile msgid "new.txt" msgstr "novo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nome de ficheiro:" #: ulng.rseditnewopen msgid "Open file" msgstr "Abrir ficheiro" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Recuar" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Procurar" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Avançar" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Substituir" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "com editor externo" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "com editor interno" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Executar via shell" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Executar via terminal e fechar" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Executar via terminal e manter aberto" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" não encontrado na linha %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Nenhuma extensão definida antes do comando \"%s\". Será ignorada." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Esquerdo;Direito;Activo;Inactivo;Ambos;Nenhum" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Não;Sim" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportado_Do_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Perguntar;Sobrescrever;Saltar" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Perguntar;Unir;Saltar" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Perguntar;Sobrescrever;Sobrescrever mais antigos;Saltar" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Perguntar;Não definir mais;Ignorar erros" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Quaisquer ficheiros" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Ficheiros de configuração do arquivador" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Ficheiros de dicas do DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Ficheiros da lista de pastas" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Ficheiros executáveis" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Ficheiros de configuração .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Ficheiros .tab antigos do DC" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Bibliotecas" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Extensões" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programas e bibliotecas" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definir modelo" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nível(is)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "todos (profundidade ilimitada)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "só pasta actual" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "A pasta %s não existe!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Encontrados: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Gravar modelo de procura" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nome do modelo:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pesquisado: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "A pesquisar" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Localizar ficheiros" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Hora da digitalização: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Iniciar em" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Letra da &consola" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Letra do &editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Letra do &diário" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Letra do programa" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Letra do caminho" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Letra do visuali&zador" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Letra do livro do vis&ualizador" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "Livres %s de %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s livres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Aceder a data/hora" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributos" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentário" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tamanho comprimido" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/hora de criação" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extensão" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Alterar data/hora" #: ulng.rsfunclinkto msgid "Link to" msgstr "Ligar a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/hora de modificação" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nome" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nome sem extensão" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietário" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Caminho" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Tamanho" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Erro ao criar ligação física" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "Nenhuma;Nome, a-z;Nome, z-a;Ext, a-z;Ext, z-a;Tam 9-0;Tam 0-9;Data 9-0;Data 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Aviso! Ao restaurar uma segurança .hotlist, a lista existente será apagada pela importada.\n" "\n" "Tem a certeza que quer continuar?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Diálogo Copiar/Mover" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Diálogo Editar comentário" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Localizar ficheiros" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Multi-renomear" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Já existe uma configuração com esse nome.\n" "Deseja sobrescrevê-la?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Tem a certeza de que deseja repor a predefinição?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Tem a certeza de que deseja apagar a configuração \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Cópia de %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Insira o seu novo nome" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Tem de ter pelo menos um ficheiro de atalhos." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Novo nome" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "A configuração \"%s\" foi modificada.\n" "Deseja gravá-la agora?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Sem atalho com \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Por nome de comando;Por tecla de atalho (agrupado);Por tecla de atalho (um por linha)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Impossível encontrar referências ao ficheiro predefinido" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Lista de janelas \"Localizar ficheiros\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Desseleccionar máscara" #: ulng.rsmarkplus msgid "Select mask" msgstr "Seleccionar máscara" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Máscara de entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Já existe uma vista em colunas com esse nome." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Para alterar edição da vista em colunas actual, GRAVE, COPIE ou ELIMINE a edição actual" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurar colunas personalizadas" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Insira o novo nome das colunas" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acções" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Desligar unidade de rede..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editar" #: ulng.rsmnueject msgid "Eject" msgstr "Ejectar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Extrair aqui..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Mapear unidade de rede..." #: ulng.rsmnumount msgid "Mount" msgstr "Montar" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Novo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Sem suporte disponível" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Abrir" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Abrir com" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Outro..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Comprimir aqui..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaurar" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordenar por" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmontar" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Ver" #: ulng.rsmsgaccount msgid "Account:" msgstr "Conta:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Todos os comandos internos do Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parâmetros adicionais da linha de comandos do arquivador:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Deseja pôr entre aspas?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "CRC32 errado no ficheiro resultante:\n" "\"%s\"\n" "\n" "Quer manter o ficheiro resultante corrompido?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Não pode copiar/mover um ficheiro \"%s\" para si próprio!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Impossível eliminar a pasta %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Impossível sobrescrever a pasta \"%s\" com a não-pasta \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ChDir para [%s] falhou!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Remover os separadores inactivos?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Este separador (%s) está bloqueado! Fechar mesmo assim?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Confirmação do parâmetro" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Tem a certeza que quer sair?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "O ficheiro %s foi alterado. Quer repor a cópia anterior?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Impossível repor a cópia anterior - quer manter o ficheiro alterado?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Copiar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" seleccionados?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Criar novo tipo de ficheiro \"ficheiros %s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Insira caminho e nome do ficheiro para gravar a barra do DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Acção personalizada" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Eliminar o ficheiro parcialmente copiado?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Eliminar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Eliminar %d ficheiros/pastas seleccionados para o lixo?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Eliminar \"%s\" seleccionado?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Eliminar \"%s\" seleccionados para o lixo?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossível mover \"%s\" para o lixo! Eliminar directamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "O disco não está disponível" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Insira o nome da acção:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Insira a extensão do ficheiro:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Insira o nome:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Insira o nome do novo tipo de ficheiro para a extensão \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Erro CRC nos dados arquivados" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Os dados estão mal" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Impossível ligar ao servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Impossível copiar o ficheiro %s para %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Já existe uma pasta chamada \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Data %s não é suportada" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "A pasta %s já existe!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Função abortada pelo utilizador" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Erro ao fechar o ficheiro" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossível criar o ficheiro" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Não há mais ficheiros no arquivo" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossível abrir ficheiro existente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Erro ao ler o ficheiro" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Erro ao escrever o ficheiro" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Impossível criar a pasta %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ligação inválida" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ficheiros não encontrados" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memória insuficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Função não suportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Erro no comando do menu contextual" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Erro ao carregar a configuração" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Erro de sintaxe na expressão regular!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Impossível renomear o ficheiro %s para %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Impossível gravar associação!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossível gravar o ficheiro" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Impossível definir atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Impossível definir data/hora para \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Impossível definir proprietário/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Impossível definir permissões para \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer demasiado pequeno" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Demasiados ficheiros para empacotar" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato de arquivo desconhecido" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Tem a certeza qie quer remover todas as entradas dos seus separadores favoritos? Não poderá desfazer a acção!" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Arraste para aqui outras entradas" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Insira um nome para esta entrada" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "A gravar a nova entrada nos favoritos" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Nº de separadores favoritos exportados com êxito: %d de %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Predefinição extra para gravar histórico nos novos separadores favoritos:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Número de ficheiros importados com êxito: %d de %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Separadores antigos importados" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Escolha o ficheiro .tab a importar (podem ser vários em simultâneo)!" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "A última modificação aos favoritos ainda não foi gravada. Quer gravá-la antes de continuar?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Continuar a gravar o histórico com os favoritos:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nome do sub-menu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Assim vai carregar o favorito: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Gravar separadores actuais sobre uma entrada de favoritos existente" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "O ficheiro %s foi alterado! Gravar?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobrescrever:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "O ficheiro %s já existe! Sobrescrever?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Pelo ficheiro:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Ficheiro \"%s\" não encontrado" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operações de ficheiro activas" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Há algumas operações de ficheiro por terminar. Fechar o Double Commander pode resultar em perda de dados." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "O tamanho no nome destino (%d) tem mais de %d caracteres!\n" "%s\n" "A maioria dos programas não poderá aceder a ficheiros/pastas com nomes tao grandes!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "O ficheiro %s é só de leitura(oculto/de sistema. Eliminá-lo?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "O tamanho de \"%s\" é demasiado grande para o sistema de ficheiros destino!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "A pasta %s já existe! Unir?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Seguir ligação simbólica \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Seleccione o formato de texto a importar" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Adicionar %d pastas seleccionadas" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Adicionar pasta seleccionada: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Adicionar pasta atual: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Comando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_algo" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuração da lista de pastas" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Tem a certeza que quer remover todas as entradas da sua lista de pastas? Não poderá desfazer a acção!" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Assim vai executar o seguinte comando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Esta é a pasta chamada " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Assim vai alterar o painel activo para o seguinte caminho:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "E o painel inactivo mudará para o seguinte caminho:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Erro na segurança das entradas..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Erro ao exportar entradas..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportar tudo!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportar lista de pastas - escolha as entradas que quer exportar" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportar escolhidas" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importar tudo!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importar lista de pastas - escolha as entradas que quer importar" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importar escolhidas" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Caminho" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Localizar ficheiro .hotlist a importar" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Noma da lista" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Nº de novas entradas : %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nada escolhido para exportar!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Caminho da lista" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Adicionar de novo a pasta escolhida: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Adicionar de novo a pasta actual: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Insira a localização e nome da lista de pastas a restaurar" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fim do sub-menu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Nome do menu:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Nome:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separador)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nome do sub-menu" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Alvo da lista de pastas" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Determine se quer que o painel activo seja ordenado de forma especificada após alterar a pasta" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Determine se quer que o painel inactivo seja ordenado de forma especificada após alterar a pasta" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Algumas funções para seleccionar caminho relativo, absoluto, pastas especiais, etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Nº de entradas gravadas: %d\n" "\n" "Nome da segurança: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Nº de entradas exportadas: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Quer eliminar todos os elementos do sub-menu [%s]?\n" "Responder NÃO elimina só os delimitadores de menu e mantém os elementos no sub-menu." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Insira a localização e nome da lista de pastas a gravar" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Tamanho do ficheiro \"%s\" resultante incorrecto" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Por favor, insira o volume seguinte.\n" "\n" "É para permitir escrever este ficheiro:\n" "\"%s\"\n" "\n" "Nº de bytes ainda por escrever: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Erro na linha de comandos" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nome de ficheiro inválido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato do ficheiro de configuração inválido" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Caminho inválido" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "O caminho %s contém caracteres proibidos." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Esta não é uma extensão válida!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Esta extensão é feita para o Double Commander para %s.%s, não pode trabalhar com o Double Commander para %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Aspas inválidas" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selecção inválida." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "A carregar lista de ficheiros..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Localizar ficheiro do TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Localizar executável do TC (totalcmd.exe ou totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copiar ficheiro %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Eliminar ficheiro %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Erro: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Iniciar externo" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Resultado externo" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Extrair ficheiro %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informação:" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Criar ligação %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Criar pasta %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Mover ficheiro %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Comprimir para ficheiro %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Remover pasta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Feito:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Criar ligação simbólica %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testar integridade do ficheiro %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Limpar ficheiro %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Limpar pasta %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Senha mestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Por favor insira a senha mestra:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Novo ficheiro" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "O próximo volume será descomprimido" #: ulng.rsmsgnofiles msgid "No files" msgstr "Sem ficheiros" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Sem ficheiros seleccionados" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Não há espaço suficiente no destino! Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Não há espaço suficiente no destino! Tentar novamente?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Impossível eliminar o ficheiro %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Não implementado." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "O objecto não existe!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Abaixo está uma antevisão. Mova o cursor e seleccione ficheiros para ver imediatament o aspecto das várias definições." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Senha:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "As senhas são diferentes!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Por favor, insira a senha:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Senha (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Por favor reinsira a senha para verificação:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Eliminar %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predefinição \"%s\" já existe! Substituir?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problema ao executar o comando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Nome de ficheiro para o texto:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Por favor, disponibilize este ficheiro. Tentar novamente?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Insira novo nome amigável para estes favoritos" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Insira novo nome para este menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Renomear/Mover %d ficheiros/pastas seleccionados?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Renomear/Mover \"%s\" seleccionados?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Por favor, reinicie o Double Commander para aplicar as alterações" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Seleccione a que tipo de ficheiro adicionar a extensão \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Seleccionados: %s de %s, ficheiros: %d de %d, pastas: %d de %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Seleccione executável para" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Por favor, seleccione só ficheiros checksum" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Por favor, seleccione a localização do próximo volume" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definir rótulo do volume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Pastas especiais" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Adicionar caminho do painel activo" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Adicionar caminho do painel inactivo" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Procurar e usar caminho seleccionado" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Usar variável de ambiente..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ir para caminho especial do Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ir para variável de ambiente..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ir para outra pasta especial do Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ir para pasta especial do Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Tornar relativa ao caminho da lista" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Tornar caminho absoluto" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Tornar relativo ao caminho especial do Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Tornar relativo a variável de ambiente..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Tornar relativo a pasta especial do Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Tornar relativo a outra pasta especial do Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Usar caminho especial do Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Usar caminho da lista" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Usar outra pasta especial do Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Usar pasta especial do Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Este separador (%s) está bloqueado! Abrir pasta noutro separador?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renomear separador" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novo nome do separador:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Caminho destino:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Erro! impossível modificar a pasta de configuração do TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Erro! impossível encontrar o executável de configuração do TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Erro! O TC ainda está em execução mas tem de ser fechado para esta operação.\n" "Feche-o e clique em Aceitar ou clique em Cancelar." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Erro! impossível encontrar a pasta de saída da barra do TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Insira localização e nome do ficheiro onde gravar a barra do TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" está agora na área de transferência" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "A extensão do ficheiro seleccionado não é de tipo reconhecido" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Localize o ficheiro \".toolbar\" a importar" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Localize o ficheiro \".BAR\" a importar" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Insira localização e nome do ficheiro a restaurar" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Gravado!\n" "Nome do ficheiro: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Demasiados ficheiros seleccionados." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Indeterminado" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ERRO: utilização de menu de árvore inesperada!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SEM EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr ">SEM NOME>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Utilizador:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Utilizador (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Rótulo do volume:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Por favor, insira o tamanho do volume:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Limpar %d ficheiros/pastas seleccionados?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Limpar \"%s\" seleccionados?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "com" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Renomear automaticamente \"nome (1).ext\", \"nome (2).ext\" etc.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Data" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extensão" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nome" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sem alteração;MAIÚSCULAS;minúsculas;Primeira maiúscula;Primeira De Todas As Palavras Maiúscula;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Multi-renomear" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Carácter na posição x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caracteres desde a posição x até y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dia" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Dia (2 dígitos)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Dia da semana (curto, ex. \"Seg\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Dia da semana (longo, ex. \"Segunda\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extensão" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hora" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Hora (2 dígitos)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuto" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuto (2 dígitos)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mês" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mês (2 dígitos)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nome do mês (curto, ex. \"Jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nome do mês (longo, ex. \"Janeiro\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nome" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Segundo" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Segundo (2 dígitos)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Ano (2 dígitos)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Ano (4 dígitos)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Extensões" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Hora" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Aviso, nomes duplicados!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Nº de linhas errado no ficheiro: %d, deveria ser %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Manter;Limpar;Perguntar" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Sem comando interno equivalente" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Desculpe, ainda não há \"Localizar ficheiros\"..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Desculpe, não há mais \"Localizar ficheiros\" para fechar e libertar memória..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Gráficos" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Rede" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Outro" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistema" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abortado" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "A calcular a checksum" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "A calcular a checksum em \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "A calcular a checksum de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "A calcular" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "A calcular \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "A juntar" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "A juntar ficheiros em \"%s\" para \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "A copiar" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "A copiar de \"%s\" para \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "copiar \"%s\" para \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "A criar pasta" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "A criar pasta \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "A eliminar" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "A eliminar em \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Eliminar \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "A executar" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "A executar \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "A extrair" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "A extrair de \"%s\" para \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminado" #: ulng.rsoperlisting msgid "Listing" msgstr "A listar" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "A listar \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "A mover" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "A mover de \"%s\" para \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "A mover \"%s\" para \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Não iniciado" #: ulng.rsoperpacking msgid "Packing" msgstr "A comprimir" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "A comprimir de \"%s\" para \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "A comprimir \"%s\" para \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausado" #: ulng.rsoperpausing msgid "Pausing" msgstr "A pausar" #: ulng.rsoperrunning msgid "Running" msgstr "A executar" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Definir propriedade" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Definir propriedade em \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Definir propriedade de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "A dividir" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "A dividir \"%s\" para \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "A iniciar" #: ulng.rsoperstopped msgid "Stopped" msgstr "Parado" #: ulng.rsoperstopping msgid "Stopping" msgstr "A parar" #: ulng.rsopertesting msgid "Testing" msgstr "A testar" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "A testar em \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "A testar \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "A verificar a checksum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "A verificar a checksum em \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "A verificar a checksum de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "A aguardar acesso à origem do ficheiro" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "A aguardar resposta do utilizador" #: ulng.rsoperwiping msgid "Wiping" msgstr "A limpar" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "A limpar em \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "A limpar \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "A trabalhar" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Adicionar no início;Adicionar no fim;Adicionar inteligente" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nome do tipo de arquivo:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associar suplemento \"%s\" com:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primeiro;Último;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Clássica, ordem antiga;Ordem alfabética (idioma sempre primeiro)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Painel activo à esquerda, inactivo à direita (antigo);Painel esquerdo à esquerda, direito à direita" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Insira extensão" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Adicionar no início;Adicionar no fim;ordem alfabética" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Janela separada;Janela separada minimizada;Painel de operações" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Flutuante" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Atalho %s para cm_Delete será registado, pelo que poderá ser usado para reverter esta definição." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Adicionar atalho para %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Adicionar atalho" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossível definir atalho" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Alterar atalho" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Atalho %s para cm_Delete tem um parâmetro que se sobrepõe a esta definição. Quer alterar o parâmetro para usar a definição global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Atalho %s para cm_Delete tem de ter um parâmetro alterado para corresponder ao atalho %s. Quer alterá-lo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descrição" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Editar atalho para %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fixar parâmetro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Atalho" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Atalhos" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<nenhum>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parâmetros" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Definir atalho para eliminar ficheiro" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Para esta definição funcionar com o atalho %s, o atalho %s tem de ser atribuído a cm_Delete, mas já está atribuído a %s. Quer alterá-lo?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Atalho %s para cm_Delete é uma sequência para a qual uma tecla de atalho com Shift revertido não pode ser atribuída. Esta definição pode não funcionar." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Atalho em uso" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Atalho %s já está em uso." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Alterar para %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "usado para %s em %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usado por este comando mas com parâmetros diferentes" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Arquivadores" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Actualizar automaticamente" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamentos" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Cores" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Colunas" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuração" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Personalizar colunas" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Lista de pastas" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Arrastar & Largar" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Botão da lista de unidades" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Separadores favoritos" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Associações extra de ficheiros" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associações de ficheiros" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Novo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operações de ficheiros" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Painéis de ficheiros" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Procurar ficheiro" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vistas de ficheiros" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipos de ficheiros" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Separadores de pastas" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Separadores extra de pastas" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Letras" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Realces" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Atalhos" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ícones" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Lista Ignorar" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Teclas" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposição" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Diário" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Vários" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Rato" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Multi-renomear" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "As opções em \"%s\" foram alteradas.\n" "\n" "Deseja gravar as alterações?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Extensões" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Procura/Filtragem rápida" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra de ferramentas" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Ferramentas" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Sugestões" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Menu de árvore" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Cores do menu de árvore" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nenhuma;Linha de comandos;Procura rápida;Filtragem rápida" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botão esquerdo;Botão direito;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "Ao cimo da lista de ficheiros;Após as pastas (se as pastas estão ordenadas antes dos ficheiros);Na posição ordenada;No final da lista de ficheiros" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "A extensão %s já está atribuída às seguintes extensões:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Desactivar" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Ac&tivar" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Activo" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descrição" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nome de ficheiro" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nome" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registado para" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensível;&Insensível" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Ficheiros;Pa&stas;Ficheiros e &pastas" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ocultar painel de filtra&gem quando sem foco;Manter modificações de definições para a sessão seguinte" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Não sensível a maiúsculas;De acordo com definições regionais (aAbBcC);Primeiro maiúsculas, depois minúsculas (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Ordenar por nome e mostrar o primeiro;Ordenar como ficheiros e mostrar o primeiro;Ordenar como ficheiros" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabética, considerando acentos;Ordem natural;Alfabética e números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Cimo;Fundo;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comando inte&rno;Comando e&xterno;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Nome da categoria:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC clássico - Copiar (x) nome_fich.ext;Windows - nome_fich (x).ext;Outros - nome_fich(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "Não alterar posição;Usar a definição para novos ficheiros;Para a posição ordenada" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Ficheiros: %d, pastas: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Impossível alterar direitos de acesso a \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Impossível alterar proprietário de \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Ficheiro" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Pasta" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Linha nomeada" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo de bloqueio especial" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispositivo de carácter especial" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Ligação simbólica" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo desconhecido" #: ulng.rssearchresult msgid "Search result" msgstr "Resultado da procura" #: ulng.rssearchstatus msgid "SEARCH" msgstr "PROCURAR" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modelo sem nome>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Já está em curso uma procura de ficheiro com a extensão DSX.\n" "Temos de deixar terminar essa antes de iniciar outra nova." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Já está em curso uma procura de ficheiro com a extensão WDX.\n" "Temos de deixar terminar essa antes de iniciar outra nova." #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleccione uma pasta" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Seleccione a sua janela" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Mo&strar ajuda para %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tudo" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Categoria" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Coluna" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comando" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Nome de ficheiro" #: ulng.rssimplewordfiles msgid "files" msgstr "ficheiros" #: ulng.rssimplewordletter msgid "Letter" msgstr "Carta" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultado" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Pasta" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Ficheiros: %d, pastas: %d, tamanho: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossível criar pasta destino!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formato de tamanho de ficheiro incorrecto!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossível dividir o ficheiro!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "O número de partes é superior a 100! Continuar?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automático;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Pasta seleccionada:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Só antevisão" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Outros" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Nota lateral" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Plano" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Limitado" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Simples" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabuloso" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Maravilhoso" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Tremendo" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Escolha a sua pasta do histórico de pastas" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Escolha os seus separadores favoritos:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Escolha o seu comando do histórico de comandos" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Escolha a sua acção do menu principal" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Escolha a sua acção da barra de ferramentas" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Escolha a sua pasta da pasta quente:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Escolha a sua pasta do histórico de ficheiros" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Escolha o seu ficheiro ou pasta" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Erro ao criar ligação simbólica" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texto predefinido" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texto simples" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Não fazer nada;Fechar separador;Aceder aos favoritos;Menu contextual" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dia(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mês(es)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segundo(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Ano(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Renomear favoritos" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Sub-menu Renomear favoritos" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Erro ao abrir Diferenciar" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Erro ao abrir o editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Erro ao abrir o terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Erro ao abrir o visualizador" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Por favor reporte este erro no rastreio de erros com uma descrição do que estava a fazer e o ficheiro seguinte: %sPrima %s para continuar ou %s para abortar o programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Ambos os painéis, activo -> inactivo" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Ambos os painéis, esquerda -> direita" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Caminho do painel" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Cada nome entre parênteses ou o que quiser" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Só nome, sem extensão" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Nome completo (caminho e nome)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Ajuda com variáveis \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Pede ao utilizador que insira um parâmetro com um valor predefinido sugerido" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Painel esquerdo" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Nome ou lista de nomes de ficheiro temporários" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Nome ou lista de nomes completos de ficheiro temporários (caminho+nome)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Ficheiros na lista em UTF-16 com BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Ficheiros na lista em UTF-16 com BOM, entre aspas" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Ficheiros na lista em UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Ficheiros na lista em UTF-8, entre aspas" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Nome ou lista de nomes de ficheiro temporários com caminho relativo" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Só extensão de ficheiro" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Só nome de ficheiro" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Outro exemplo do que é possível" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Caminho, com delimitador final" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Daqui até ao fim da linha, o indicador de variável percentagem é o sinal \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Devolver o sinal percentagem" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Daqui até ao fim da linha, o indicador de variável percentagem é de novo o sinal \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Prefixar cada nome com \"-a\" ou o que quiser" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Pedir parâmetro;Valor predefinido proposto]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nome de ficheiro com caminho relativo" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Painel direito" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Caminho completo do 2º ficheiro seleccionado no painel direito" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Mostrar comando antes de executar" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Mensagem simples]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Mostra uma mensagem simples" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Painel activo (fonte)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Painel inactivo (destino)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Nomes de ficheiros entre aspas (predefinição)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Comando executado no terminal, fica aberto quando terminar" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Caminhos terão delimitador final" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Nomes de ficheiro sem aspas a partir daqui" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Comando executado no terminal, fechado quando terminar" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Caminhos não terão delimitador final (predefinição)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rede" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualizador interno do Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Má qualidade" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificação" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Tipo de imagem" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Novo tamanho" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s não encontrado!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "com visualizador externo" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "com visualizador interno" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Nº de substituição: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Não houve substituição." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.pot�������������������������������������������������������������0000644�0001750�0000144�00001146707�15104114162�017052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Full Name <email@address>\n" "Language-Team: Language <email@address>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: English\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "" #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.caption msgid "Compare files" msgstr "" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "" #: tfrmfileop.lblto.caption msgid "To:" msgstr "" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmhardlink.caption msgid "Create hard link" msgstr "" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "" #: tfrmlinker.caption msgid "Linker" msgstr "" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "" #: tfrmmain.actabout.caption msgid "&About" msgstr "" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "" #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "" #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "" #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr "" #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "" #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "" #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "" #: tfrmmain.mimove.caption msgid "Move..." msgstr "" #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.caption msgid "Create new directory" msgstr "" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "" #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "" #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "" #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "" #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "" #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr "" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "" #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "" #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "" #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "" #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "" #: tfrmpackdlg.caption msgid "Pack files" msgstr "" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "" #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "" #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgid "Splitter" msgstr "" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "" #: ulng.rscolext msgid "Ext" msgstr "" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "" #: ulng.rsconfcolalign msgid "Align" msgstr "" #: ulng.rsconfcolcaption msgid "Caption" msgstr "" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "" #: ulng.rsconfcustheader msgid "Customize column" msgstr "" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "" #: ulng.rseditnewfilename msgid "Filename:" msgstr "" #: ulng.rseditnewopen msgid "Open file" msgstr "" #: ulng.rseditsearchback msgid "&Backward" msgstr "" #: ulng.rseditsearchcaption msgid "Search" msgstr "" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "" #: ulng.rsfindscanning msgid "Scanning" msgstr "" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "" #: ulng.rsfuncatime msgid "Access date/time" msgstr "" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "" #: ulng.rsfunccomment msgid "Comment" msgstr "" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "" #: ulng.rshotkeycategorymain msgid "Main" msgstr "" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "" #: ulng.rsmarkplus msgid "Select mask" msgstr "" #: ulng.rsmaskinput msgid "Input mask:" msgstr "" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "" #: ulng.rsmnueject msgid "Eject" msgstr "" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "" #: ulng.rsmnunomedia msgid "No media available" msgstr "" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "" #: ulng.rsmnuumount msgid "Unmount" msgstr "" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "" #: ulng.rsmsgaccount msgid "Account:" msgstr "" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "" #: ulng.rsmsgentername msgid "Enter name:" msgstr "" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "" #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "" #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "" #: ulng.rsmsglogerror msgid "Error: " msgstr "" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "" #: ulng.rsmsgloginfo msgid "Info: " msgstr "" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "" #: ulng.rsmulrenmaskday msgid "Day" msgstr "" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgid "Deleting" msgstr "" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "" #: ulng.rsoperpausing msgid "Pausing" msgstr "" #: ulng.rsoperrunning msgid "Running" msgstr "" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "" #: ulng.rsoperstopped msgid "Stopped" msgstr "" #: ulng.rsoperstopping msgid "Stopping" msgstr "" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "" #: ulng.rsoperworking msgid "Working" msgstr "" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizefloat msgid "float" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "" #: ulng.rsoptionseditorlog msgid "Log" msgstr "" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgid "Tools" msgstr "" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgid "File" msgstr "" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "" #: ulng.rspropssocket msgid "Socket" msgstr "" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "" #: ulng.rssearchresult msgid "Search result" msgstr "" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "" #: ulng.rssyndefaulttext msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgid "Day(s)" msgstr "" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "" #: ulng.rstimeunityear msgid "Year(s)" msgstr "" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ���������������������������������������������������������doublecmd-1.1.30/language/doublecmd.pl.po�����������������������������������������������������������0000644�0001750�0000144�00001405064�15104114162�017272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2024-02-06 18:30+0000\n" "Last-Translator: Andrzej Kamiński <endriusk@interia.pl> and Maciej Bojakowski <maciejbojakowski@gmail.com>\n" "Language-Team: \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Polski (Polska)\n" "X-Generator: Poedit 3.0.1\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porównywanie... %d%% (Esc, aby anulować)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Lewy: Usuń %d plik(ów)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Prawy: Usuń %d plik(ów)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Znaleziono plików: %d (Identyczne: %d, Różniące się: %d, Unikalne z lewej: %d, Unikalne z prawej: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Z lewej do prawej: Kopiowanie %d plików, całkowity rozmiar: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Z prawej do lewej: Kopiowanie %d plików, całkowity rozmiar: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Wybierz szablon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Sprawdź wolne miejsce" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopiuj &atrybuty" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiuj &własność" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopiuj &uprawnienia" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopiuj &datę/czas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Popraw &linki" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Usuń &flagę \"Tylko do odczytu\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Wyklucz puste katalogi" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Śledź linki" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Za&rezerwuj miejsce" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Kopiuj przy zapisie" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Weryfikuj" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Co zrobić, gdy nie można ustawić czasu pliku, atrybutów, itp." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Użyj pliku szablonu" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Gdy &katalog istnieje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Gdy &plik istnieje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Gdy &nie można ustawić właściwości" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<brak szablonu>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiuj do schowka" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "O programie" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Kompilacja" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Zatwierdzenie" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Strona domowa:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Wydanie" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Wersja" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Resetuj" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Wybierz atrybuty" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Archiwum" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Sko&mpresowany" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Katalog" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Zaszyfrowany" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Ukryty" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Tylko do &odczytu" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Rzadki" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Przypięty" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Link &symboliczny" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "S&ystemowy" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Tymczasowy" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atrybuty NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atrybuty ogólne" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Bity:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Grupa" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Inne" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Właściciel" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Wykonaj" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Odczyt" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Jako &tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Zapis" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Test wydajności" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Wielkość danych testu wydajności: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Czas (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Szybkość (MB/s)" #: tfrmchecksumcalc.caption msgid "Calculate checksum..." msgstr "Oblicz sumę kontrolną..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Otwórz plik sumy kontrolnej po zakończeniu pracy" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Dla każdego pliku utwó&rz oddzielny plik sumy kontrolnej" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "&Format pliku" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Zapi&sz plik(i) sumy kontrolnej do:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "tfrmchecksumverify.btnclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmchecksumverify.caption msgid "Verify checksum..." msgstr "Sprawdź sumę kontrolną..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kodowanie" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "tfrmconnectionmanager.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "P&ołącz" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "&Usuń" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "&Edytuj" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Menedżer połączeń" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Połącz z:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Dodaj do kolejki" #: tfrmcopydlg.btncancel.caption msgctxt "tfrmcopydlg.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Opcje>>" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Zapisz te opcje jako domyślne" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Kopiuj plik(i)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nowa kolejka" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kolejka 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kolejka 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kolejka 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kolejka 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kolejka 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Zapisz opis" #: tfrmdescredit.btncancel.caption msgctxt "tfrmdescredit.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmdescredit.btnok.caption msgctxt "tfrmdescredit.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentarz do pliku/katalogu" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&dytuj komentarz dla:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "Kodowani&e:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "tfrmdiffer.actabout.caption" msgid "About" msgstr "O programie" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Porównaj automatycznie" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Tryb binarny" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmdiffer.actcancelcompare.hint msgctxt "tfrmdiffer.actcancelcompare.hint" msgid "Cancel" msgstr "Anuluj" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Kopiuj blok na prawo" #: tfrmdiffer.actcopylefttoright.hint msgctxt "tfrmdiffer.actcopylefttoright.hint" msgid "Copy Block Right" msgstr "Kopiuj blok na prawo" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Kopiuj blok na lewo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "tfrmdiffer.actcopyrighttoleft.hint" msgid "Copy Block Left" msgstr "Kopiuj blok na lewo" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Wytnij" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Usuń" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Wklej" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Wykonaj ponownie" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Wykonaj ponownie" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Zaznacz &wszystko" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Cofnij" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Cofnij" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Zakończ" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Znajdź" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Znajdź" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Znajdź następny" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Znajdź następny" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Znajdź poprzedni" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Znajdź poprzedni" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Zamień" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Zamień" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Pierwsza różnica" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Pierwsza różnica" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Przejdź do wiersza..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Przejdź do wiersza" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignoruj wielkość liter" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignoruj puste" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Zachowaj przewijanie" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Ostatnia różnica" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Ostatnia różnica" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Różnice między wierszami" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Następna różnica" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Następna różnica" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otwórz lewy..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otwórz prawy..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Maluj tło" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Poprzednia różnica" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Poprzednia różnica" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Załaduj ponownie" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Załaduj ponownie" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Zapisz" #: tfrmdiffer.actsave.hint msgctxt "tfrmdiffer.actsave.hint" msgid "Save" msgstr "Zapisz" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Zapisz jako..." #: tfrmdiffer.actsaveas.hint msgctxt "tfrmdiffer.actsaveas.hint" msgid "Save as..." msgstr "Zapisz jako..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Zapisz lewy" #: tfrmdiffer.actsaveleft.hint msgctxt "tfrmdiffer.actsaveleft.hint" msgid "Save Left" msgstr "Zapisz lewy" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Zapisz lewy jako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "tfrmdiffer.actsaveleftas.hint" msgid "Save Left As..." msgstr "Zapisz lewy jako..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Zapisz prawy" #: tfrmdiffer.actsaveright.hint msgctxt "tfrmdiffer.actsaveright.hint" msgid "Save Right" msgstr "Zapisz prawy" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Zapisz prawy jako..." #: tfrmdiffer.actsaverightas.hint msgctxt "tfrmdiffer.actsaverightas.hint" msgid "Save Right As..." msgstr "Zapisz prawy jako..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Porównaj" #: tfrmdiffer.actstartcompare.hint msgctxt "tfrmdiffer.actstartcompare.hint" msgid "Compare" msgstr "Porównaj" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Kodowanie" #: tfrmdiffer.btnrightencoding.hint msgctxt "tfrmdiffer.btnrightencoding.hint" msgid "Encoding" msgstr "Kodowanie" #: tfrmdiffer.caption msgid "Compare files" msgstr "Porównaj pliki" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Lewy" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Prawy" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akcje" #: tfrmdiffer.mnuedit.caption msgctxt "tfrmdiffer.mnuedit.caption" msgid "&Edit" msgstr "&Edycja" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Kodowanie" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Plik" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Opcje" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj nowy skrót do sekwencji" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Usuń ostatni skrót z sekwencji" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Wybierz klawisz skrótu z listy pozostałych dostępnych" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Tylko dla tych kontrolek" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametry (każdy w osobnym wierszu):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Skróty:" #: tfrmeditor.actabout.caption msgctxt "tfrmeditor.actabout.caption" msgid "About" msgstr "O programie" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "O programie" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Konfiguracja" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Konfiguracja" #: tfrmeditor.acteditcopy.caption msgctxt "tfrmeditor.acteditcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopiuj" #: tfrmeditor.acteditcut.caption msgctxt "tfrmeditor.acteditcut.caption" msgid "Cut" msgstr "Wytnij" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Wytnij" #: tfrmeditor.acteditdelete.caption msgctxt "tfrmeditor.acteditdelete.caption" msgid "Delete" msgstr "Usuń" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Usuń" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Znajdź" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Znajdź" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Znajdź następny" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Znajdź następny" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Znajdź poprzedni" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Przejdź do wiersza..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "tfrmeditor.acteditpaste.caption" msgid "Paste" msgstr "Wklej" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Wklej" #: tfrmeditor.acteditredo.caption msgctxt "tfrmeditor.acteditredo.caption" msgid "Redo" msgstr "Wykonaj ponownie" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Wykonaj ponownie" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Zamień" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Zamień" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Zaznacz &wszystko" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmeditor.acteditundo.caption msgctxt "tfrmeditor.acteditundo.caption" msgid "Undo" msgstr "Cofnij" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Cofnij" #: tfrmeditor.actfileclose.caption msgctxt "tfrmeditor.actfileclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Zamknij" #: tfrmeditor.actfileexit.caption msgctxt "tfrmeditor.actfileexit.caption" msgid "E&xit" msgstr "&Zakończ" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Zakończ" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Nowy" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nowy" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otwórz" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Otwórz" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Załaduj ponownie" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Zapisz" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Zapisz" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Zapisz j&ako..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Zapisz jako" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Edytor" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmeditor.miedit.caption msgctxt "tfrmeditor.miedit.caption" msgid "&Edit" msgstr "&Edycja" #: tfrmeditor.miencoding.caption msgctxt "tfrmeditor.miencoding.caption" msgid "En&coding" msgstr "&Kodowanie" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otwórz jako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Zapisz jako" #: tfrmeditor.mifile.caption msgctxt "tfrmeditor.mifile.caption" msgid "&File" msgstr "&Plik" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Podświetlanie &składni" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Koniec wiersza" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Wzorzec wielowierszowy" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "&Uwzględniaj wielkość liter" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "&Szukaj od kursora" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "Wyrażenia ®ularne" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Tylko zaznaczony &tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Tylko &całe wyrazy" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Opcje" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Zamień na:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "Wy&szukaj:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Kierunek" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Wykonaj dla &wszystkich obiektów bieżących" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Rozpakuj pliki" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozpakuj z podkatalogami" #: tfrmextractdlg.cbfilemask.text msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Rozpakuj każde archiwum do &oddzielnego podkatalogu (z nazwą archiwum)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Nadpisz istniejące pliki" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Do &katalogu:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Wyodrębnij pliki pasujące do maski pliku:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Hasło do zaszyfrowanych plików:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "tfrmfileexecuteyourself.btnclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Czekaj..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nazwa pliku:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "Z:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknij przycisk Zamknij, gdy plik tymczasowy może zostać usunięty!" #: tfrmfileop.btncancel.caption msgctxt "tfrmfileop.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Do panelu" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Wyświetl wszystko" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Bieżąca operacja:" #: tfrmfileop.lblfrom.caption msgctxt "tfrmfileop.lblfrom.caption" msgid "From:" msgstr "Z:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "DO:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Właściwości" #: tfrmfileproperties.cbsgid.caption msgctxt "tfrmfileproperties.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "tfrmfileproperties.cbsticky.caption" msgid "Sticky" msgstr "Przyklejony" #: tfrmfileproperties.cbsuid.caption msgctxt "tfrmfileproperties.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Zezwalaj na &wykonywanie pliku jako programu" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "&Cykliczne" #: tfrmfileproperties.dividerbevel3.caption msgctxt "tfrmfileproperties.dividerbevel3.caption" msgid "Owner" msgstr "Właściciel" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "tfrmfileproperties.lblattrbitsstr.caption" msgid "Bits:" msgstr "Bity:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "tfrmfileproperties.lblattrgroupstr.caption" msgid "Group" msgstr "Grupa" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "tfrmfileproperties.lblattrotherstr.caption" msgid "Other" msgstr "Inne" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "tfrmfileproperties.lblattrownerstr.caption" msgid "Owner" msgstr "Właściciel" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Zawartość:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Utworzony:" #: tfrmfileproperties.lblexec.caption msgctxt "tfrmfileproperties.lblexec.caption" msgid "Execute" msgstr "Wykonawczy" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Wykonaj:" #: tfrmfileproperties.lblfile.caption msgctxt "tfrmfileproperties.lblfile.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmfileproperties.lblfilename.caption msgctxt "tfrmfileproperties.lblfilename.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ścieżka:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Grupa" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Ostatnio używany:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Ostatnio zmieniony:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Ostatnia zmiana statusu:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Łącza:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Typ nośnika:" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Ósemkowo:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "&Właściciel" #: tfrmfileproperties.lblread.caption msgctxt "tfrmfileproperties.lblread.caption" msgid "Read" msgstr "Odczyt" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Rozmiar na dysku:" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Rozmiar:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link symboliczny do:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "tfrmfileproperties.lblwrite.caption" msgid "Write" msgstr "Zapis" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nazwa" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Wartość" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Atrybuty" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Wtyczki" #: tfrmfileproperties.tsproperties.caption msgctxt "tfrmfileproperties.tsproperties.caption" msgid "Properties" msgstr "Właściwości" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zamknij" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Zakończ" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Odblokuj" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Odblokuj wszystko" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Odblokuj" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Dojście do pliku" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Identyfikator procesu" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Ścieżka pliku wykonywalnego" #: tfrmfinddlg.actcancel.caption msgid "C&ancel" msgstr "&Anuluj" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Anuluj wyszukiwanie i zamknij okno" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Konfiguracja skrótów klawiszowych" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Edycja" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Podaj do &pola listy" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Anuluj wyszukiwanie, zamknij i zwolnij z pamięci" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Dla wszystkich innych \"Znajdź pliki\", anuluj, zamknij i zwolnij z pamięci" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Przejdź do pliku" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Znajdź dane" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Ostatnie wyszukiwanie" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nowe wyszukiwanie" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nowe wyszukiwanie (wyczyść filtry)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Przejdź do strony \"Zaawansowane\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Przejdź do strony \"Wczytaj/Zapisz\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Przełącz do Nas&tępnej strony" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Przejdź do strony \"Wtyczki\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Przełącz do &Poprzedniej strony" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Przejdź do strony \"Wyniki\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Przejdź do strony \"Standard\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Rozpocznij" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Widok" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Dodaj" #: tfrmfinddlg.btnattrshelp.caption msgctxt "tfrmfinddlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "tfrmfinddlg.btnsavetemplate.caption" msgid "&Save" msgstr "&Zapisz" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "tfrmfinddlg.btnsearchdelete.caption" msgid "&Delete" msgstr "&Usuń" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Wczytaj" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Z&apisz" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Za&pisz z \"Rozpocznij w katalogu\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Jeśli zostanie zapisany jako \"Rozpocznij w katalogu\" zostanie przywrócony podczas ładowania szablonu. Użyj go, jeśli chcesz naprawić wyszukiwanie do określonego katalogu." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Użyj szblonu" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Znajdź pliki" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Uwz&ględniaj wielkość liter" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Od daty:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Do d&aty:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "W&ielkość od:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Wi&elkość do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Wyszukaj w &archiwach" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Znajdź &tekst w pliku" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Śledź dowiązania s&ymboliczne" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Znajdź pliki &Nie zawierające tekstu" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nie &starsze niż:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Offi&ce XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Otwarte zakładki" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "&Wyszukaj część nazwy pliku" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "Wyrażenie ®ularne" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "&Zamień na" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Wybrane katalogi i &pliki" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Wyrażenie regularne" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Czas od:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "C&zas do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Użyj wtyczki wyszukiwania:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "identyczna zawartość" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "identyczny hash" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "identyczna nazwa" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Znajdź zdu&plikowane pliki:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "identyczny rozmiar" #: tfrmfinddlg.chkhex.caption msgid "Hexadeci&mal" msgstr "Szesnastkowo" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Wprowadź nazwy katalogów oddzielone \";\", które powinny zostać wykluczone z wyszukiwania" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Wprowadź nazwy plików oddzielone \";\", które powinny zostać wykluczone z wyszukiwania oddzielone" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Wprowadź nazwy plików oddzielone \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Wtyczka" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Wartość" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Katalogi" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Pliki" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Znajdź dane" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atry&buty" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "&Kodowanie:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "W&yklucz podkatalogi" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Wyklucz pliki" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Maska &pliku" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Rozpocznij w &katalogu" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Szukaj w po&dkatalogach:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Poprzednie wyszukiwanie:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Akcja" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Dla wszystkich innych, anuluj, zamknij i zwolnij z pamięci" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Otwórz w nowej zakładce(zakładkach)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opcje" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Usuń z listy" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "Wyni&k" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Pokaż wszystkie znalezione elementy" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Pokaż w edytorze" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Pokaż w przeglądarce" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Widok" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Zaawansowane" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Wczytaj/Zapisz" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Wtyczki" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Wyniki" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standardowe" #: tfrmfindview.btnclose.caption msgctxt "tfrmfindview.btnclose.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmfindview.btnfind.caption msgctxt "tfrmfindview.btnfind.caption" msgid "&Find" msgstr "&Znajdź" #: tfrmfindview.caption msgctxt "tfrmfindview.caption" msgid "Find" msgstr "Znajdź" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&Wstecz" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "&Uwzględniaj wielkość liter" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Wyrażenia ®ularne" #: tfrmfindview.chkhex.caption msgid "Hexadecimal" msgstr "Szesnastkowo" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Domena:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Hasło:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nazwa użytkownika:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Połącz anonimowo" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Połącz jako użytkownik:" #: tfrmhardlink.btncancel.caption msgctxt "tfrmhardlink.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmhardlink.btnok.caption msgctxt "tfrmhardlink.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Utwórz twardy link" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "Miejsce &docelowe, które będzie wskazywał link" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "Nazwa &linku" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importuj wszystko!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importuj wybrane" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Wybierz wpisy, które chcesz zaimportować" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Kliknięcie podmenu spowoduje zaznaczenie całego menu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Przytrzymaj klawisz Ctrl i kliknij wpisy, aby wybrać wiele z nich" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Linkowanie" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Zapisz do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "Nazwa &pliku" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "W &dół" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "W dół" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Usuń" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Usuń" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "W &górę" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "W górę" #: tfrmmain.actabout.caption msgid "&About" msgstr "&O programie" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktywuj zakładkę według indeksu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dodaj nazwę pliku do wiersza poleceń" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nowe wystąpienie wyszukiwania..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Dodaj ścieżkę i nazwę pliku do wiersza poleceń" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiuj ścieżkę do wiersza poleceń" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Dodaj wtyczkę" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Test wydajności" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Krótki" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Krótki widok" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Oblicz zaj&mowane miejsce" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zmień katalog" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Zmień katalog na domowy" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Zmień katalog na nadrzędny" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Zmień katalog na główny" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Oblicz &sumę kontrolną..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "&Sprawdź sumę kontrolną..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Wyczyść plik dziennika" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Wyczyść okno dziennika" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Zamknij &wszystkie zakładki" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zamknij zduplikowane zakładki" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Zamknij zakładkę" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Następny wiersz poleceń" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Ustaw wiersz poleceń do następnego polecenia w historii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Poprzedni wiersz poleceń" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Ustaw wiersz poleceń do poprzedniego polecenia w historii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Pełny" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Widok kolumn" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porównaj wg &zawartości" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Porównaj katalogi" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Porównaj katalogi" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Konfiguracja archiwizatorów" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguracja ulubionych katalogów" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Konfiguracja ulubionych zakładek" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Konfiguracja zakładek folderów" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Konfiguracja skrótów klawiszowych" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Konfiguracja wtyczek" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Zapisz pozycję" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Zapisz ustawienia" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Konfiguracja wyszukiwań" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Pasek narzędzi..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Konfiguracja etykietek podpowiedzi" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Konfiguracja menu widoku drzewa" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Konfiguracja kolorów menu widoku drzewa" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Pokaż menu kontekstowe" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopiuj wszystkie zakładki na przeciwną stronę" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiuj wszystkie wyświetlone &kolumny" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiuj nazwę pliku(ów) z pełną &ścieżką" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiuj &nazwę(y) pliku(ów) do schowka" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopiuj nazwy ze ścieżką UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiuj pliki bez pytania o potwierdzenie" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiuj pełną scieżkę wybranego pliku(ów) bez końcowego separatora katalogu" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiuj pełną ścieżkę wybranego pliku(ów)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiuj do tego samego panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiuj" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Po&każ zajęte miejsce" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Wytnij" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Pokaż parametry polecenia" #: tfrmmain.actdelete.caption msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Usuń" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Dla wszystkich wyszukiwań, anuluj, zamknij i zwolnij pamięć" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Historia katalogów" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Ulubione katalogi" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Wykonaj polecenie &wewnętrzne..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Wybierz dowolne polecenie i wykonaj je" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Edytuj" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Edytuj k&omentarz..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Edytuj nowy plik" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Edytuj pole ścieżki nad listą plików" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zamień &panele" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Wykonaj skrypt" #: tfrmmain.actexit.caption msgctxt "tfrmmain.actexit.caption" msgid "E&xit" msgstr "&Zakończ" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Rozpakuj pliki..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Konfiguracja &skojarzeń plików" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "P&ołącz pliki..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Pokaż właściwości &pliku" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Po&dziel plik..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Widok pł&aski (bez podkatalogów)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "Widok pła&ski, tylko zaznaczone" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Przejdź do lini poleceń" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Zamień koncentrację" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Przełącz pomiędzy listą plików po lewej i prawej" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Koncentracja na widoku drzewa" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Przełącz między bieżącą listą plików, a widokiem drzewa (jeśli włączone)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Umieść kursor na pierwszym folderze lub pliku" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umieść kursor na pierwszym pliku listy" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Umieść kursor na ostatnim folderze lub pliku" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umieść kursor na ostatnim pliku listy" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Umieść kursor na następnym folderze lub pliku" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Umieść kursor na poprzednim folderze lub pliku" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Utwórz &twardy link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Zawartość" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Tryb &paneli poziomych" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Skróty &klawiaturowe" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Krótki widok w lewym panelu" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Widok kolumn w lewym panelu" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Lewa &= Prawa" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Pła&ski widok w lewym panelu" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otwórz listę dysków z lewej" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "&Odwrotna kolejność w lewym panelu" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Sortuj lewy panel wg &Atrybutów" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Sortuj lewy panel wg &Daty" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Sortuj lewy panel wg Rozsz&erzenia" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Sortuj lewy panel wg &Nazwy" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Sortuj lewy panel wg &Rozmiaru" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Widok miniatur w lewym panelu" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Załaduj zakładki z ulubionych zakładek" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Wczytaj listę" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Wczytaj listę plików/folderów z określonego pliku tekstowego" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Wczytaj zaznaczenie ze s&chowka" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Wczytaj zaznaczenie z &pliku..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Wczytaj zakładki z p&liku" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Utwórz &katalog" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Zaznacz wszystkie z takim samym &rozszerzeniem" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Zaznacz wszystkie pliki z taką samą nazwą" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Zaznacz wszystkie pliki z taką samą nazwą i rozszerzeniem" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Zaznacz wszystkie z taką samą ścieżką" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Odwróć zaznaczenie" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Zaznacz wszystko" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Odznacz gr&upę..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Zaznacz &grupę..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Odznacz wszystko" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizuj okno" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Przenieś bieżącą kartę do lewej" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Przenieś bieżącą kartę do prawej" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Narzędzie do wielokrotnej &zmiany nazwy" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Połą&czenie sieciowe..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Rozłącz sieć" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Szybkie połączenie sieciowe..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nowa zakładka" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Wczytaj następne ulubione zakładki z listy" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Przełącz do nas&tępnej zakładki" #: tfrmmain.actopen.caption msgctxt "tfrmmain.actopen.caption" msgid "Open" msgstr "Otwórz" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Otwórz archiwum" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otwórz plik paska" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otwórz &katalog w nowej zakładce" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Otwórz dysk według indeksu" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Otwórz listę &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Podgląd operacji" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opcje..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "S&pakuj pliki..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Ustaw położenie rozdzielacza" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Wklej" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Wczytaj poprzednie ulubione zakładki z listy" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Przełącz do &poprzedniej zakładki" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Szybki filtr" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Szybkie wyszukiwanie" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panel &szybkiego podglądu" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Odśwież" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Załaduj ponownie ostatnio wczytane ulubione zakładki" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Przenieś" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Przenieś/Zmień nazwy plików bez pytania o potwierdzenie" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Zmień &nazwę zakładki" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Zapisz w ostatnio załadowanych ulubionych zakładkach" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "P&rzywróć zaznaczenie" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Od&wrotny porządek" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Krótki widok w prawym panelu" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Widok kolumn w prawym panelu" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Prawy &= Lewy" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Płaski widok w prawym panelu" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otwórz listę dysków z prawej" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Od&wróć kolejność w prawym panelu" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Sortuj prawy panel wg &Atrybutów" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Sortuj prawy panel wg &Daty" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Sortuj prawy panel wg Rozsz&erzenia" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Sortuj prawy panel wg &Nazwy" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Sortuj prawy panel wg &Rozmiaru" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Widok miniatur w prawym panelu" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Uruchom &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Zapisz bieżące zakładki do nowych ulubionych zakładek" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Zapisz wszystkie wyświetlone kolumny do pliku" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Zapisz zaznaczenie" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Zapisz zaznacz&enie do pliku..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Zapi&sz zakładki do pliku" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Znajdź..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Wszystkie zakładki zablokowane z możliwością otwierania katalogów w nowych zakładkach" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Ustaw wszystkie zakładki jako normalne" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Ustaw wszystkie zakładki jako zablokowane" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Wszystkie zakładki zablokowane z możliwością zmiany katalogu" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Zmień &atrybuty..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zablokowana z możliwością &otwierania katalogów w nowych zakładkach" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normalna" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zablokowana" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Zablokowana z możliwością zmiany &katalogu" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Otwórz" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otwórz używając skojarzeń systemowych" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Pokaż menu przycisku" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Pokaż historię wiersza poleceń" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Pokaż pliki &ukryte/systemowe" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "Pokaż listę zakładek" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "Pokaż listę wszystkich otwartych zakładek" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortuj wg &Atrybutów" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sortuj wg &Daty" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortuj wg &Rozszerzenia" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortuj wg &Nazwy" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Sortuj wg &Wielkości" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Otwórz listę dysków" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Włącz/Wyłącz plik listy ignorowanych, aby nie pokazywać nazw plików" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Utwórz link &symboliczny..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Nawigacja synchroniczna" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Synchroniczna zmiana katalogu w obu panelach" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Syn&chronizuj katalogi..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Docelowy &= Źródłowy" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Testuj archiwum(a)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatury" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Widok miniatur" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Przełącz tryb pełnoekranowy konsoli" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Przenieś katalog pod kursorem do lewego okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Przenieś katalog pod kursorem do prawego okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Panel widoku &drzewa" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Sortuj według parametrów" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odznacz wszystkie z takim samym rozszerzeniem" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Odznacz wszystkie pliki z taką samą nazwą" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Odznacz wszystkie pliki z taką samą nazwą i rozszerzeniem" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Odznacz wszystkie z taką samą ścieżką" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Podgląd" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Pokaż historię odwiedzanych ścieżek dla aktywnego widoku" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Przejdź do następnego wpisu w historii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Przejdź do poprzedniego wpisu w historii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Wyświetl plik dziennika" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Wyświetl wystąpienia bieżącego wyszukiwania" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Odwiedź &stronę Double Commandera" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Wyczyść" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Praca z ulubionymi katalogami i parametrami" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Zakończ" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Katalog" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Usuń" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "tfrmmain.btnleftdirectoryhotlist.caption" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Ulubione katalogi" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Pokaż bieżący katalog prawego panelu w lewym panelu" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Przejdź do katalogu domowego" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Przejdź do katalogu głównego" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Przejdź do katalogu nadrzędnego" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "tfrmmain.btnrightdirectoryhotlist.caption" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Ulubione katalogi" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Pokaż bieżący katalog lewego panelu w prawym panelu" #: tfrmmain.btnrighthome.caption msgctxt "tfrmmain.btnrighthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "tfrmmain.btnrightroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "tfrmmain.btnrightup.caption" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Ścieżka" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "tfrmmain.micancel.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiuj..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Utwórz link..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Wyczyść" #: tfrmmain.milogcopy.caption msgctxt "tfrmmain.milogcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ukryj" #: tfrmmain.milogselectall.caption msgctxt "tfrmmain.milogselectall.caption" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Przenieś..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Utwórz link symboliczny..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opcje zakładek" #: tfrmmain.mitrayiconexit.caption msgctxt "tfrmmain.mitrayiconexit.caption" msgid "E&xit" msgstr "&Zakończ" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Przywróć" #: tfrmmain.mnualloperpause.caption msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgid "Start" msgstr "Rozpocznij" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "Pole&cenia" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Konfiguracja" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "&Ulubione" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Pliki" #: tfrmmain.mnuhelp.caption msgctxt "tfrmmain.mnuhelp.caption" msgid "&Help" msgstr "P&omoc" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Zaz&nacz" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "&Sieć" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Widok" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "&Opcje zakładki" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Zakła&dki" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "tfrmmain.tbcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.tbcut.caption msgctxt "tfrmmain.tbcut.caption" msgid "Cut" msgstr "Wytnij" #: tfrmmain.tbdelete.caption msgctxt "tfrmmain.tbdelete.caption" msgid "Delete" msgstr "Usuń" #: tfrmmain.tbedit.caption msgctxt "tfrmmain.tbedit.caption" msgid "Edit" msgstr "Edytuj" #: tfrmmain.tbpaste.caption msgctxt "tfrmmain.tbpaste.caption" msgid "Paste" msgstr "Wstaw" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Wybierz swoje wewnętrzne polecenie" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Starsza wersja posortowania" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Starsza wersja posortowania" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Wybierz wszystkie kategorie z domyślnych" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Zaznaczenie:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorie:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Nazwa polecenia:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtr:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Wskazówka:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Klawisz skrótu:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategoria" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoc" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Wskazówka" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Klawisz skrótu" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Dod&aj" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmmaskinputdlg.btncancel.caption msgctxt "tfrmmaskinputdlg.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definiuj..." #: tfrmmaskinputdlg.btnok.caption msgctxt "tfrmmaskinputdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Uwzględniaj wielkość liter" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignoruj akcenty i ligatury" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Atry&buty:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Maska wprowadzania:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Lub wybierz wstępnie zdefiniowany typ zaznaczenia:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Utwórz nowy katalog" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Rozszerzona składnia" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Podaj nazwę nowego katalogu:" #: tfrmmodview.btnpath1.caption msgctxt "tfrmmodview.btnpath1.caption" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "tfrmmodview.btnpath2.caption" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "tfrmmodview.btnpath3.caption" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "tfrmmodview.btnpath4.caption" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "tfrmmodview.btnpath5.caption" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nowy rozmiar" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Wysokość :" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Jakośc kompresji do jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Szerokość :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Wysokość" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Szerokość" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Rozszerzenie" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Nazwa pliku" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Wyczyść" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Wyczyść" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Zamknij" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Konfiguracja" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Licznik" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Licznik" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Usuń" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Lista rozwijana ustawień wstępnych" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Edytuj nazwy..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Edytuj bieżące nowe nazwy ..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Rozszerzenie" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Rozszerzenie" #: tfrmmultirename.actinvokeeditor.caption msgid "Edit&or" msgstr "&Edytuj" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Wywołaj menu ścieżki względnej" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Załaduj ostatnie ustawienie wstępne" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Wczytaj nazwy z pliku..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Załaduj ustawienie wstępne według nazwy lub indeksu" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Załaduj ustawienie wstępne 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Załaduj ustawienie wstępne 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Załaduj ustawienie wstępne 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Załaduj ustawienie wstępne 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Załaduj ustawienie wstępne 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Załaduj ustawienie wstępne 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Załaduj ustawienie wstępne 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Załaduj ustawienie wstępne 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Załaduj ustawienie wstępne 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Nazwa pliku" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Nazwa pliku" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Wtyczki" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Wtyczki" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Zmień &nazwę" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmmultirename.actresetall.caption msgid "Reset &All" msgstr "Resetuj wszystko" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Zapisz" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Zapisz jako..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Pokaż menu ustawień wstępnych" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Sortuj" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Czas" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Czas" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Wyświetl plik dziennika zmiany nazwy" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Wielokrotna zmiana nazwy" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Uwzględniaj wielkość liter" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "&Rejestruj wynik" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Dołącz" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Zastąp tylko pierwsze wystąpienie w pliku" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "Wyrażenia ®ularne" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Użyj podstawienia" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "tfrmmultirename.edinterval.text" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "tfrmmultirename.edpoc.text" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Licznik" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Znajdź i zamień" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Ustawienia wstępne" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Rozszerzenie" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Znajdź..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Krok co" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nazwa pliku" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Za&mień..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "S&tartuj od" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Cyfr" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Akcje" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Edytuj" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Poprzednia nazwa pliku" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nowa nazwa pliku" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Ścieżka pliku" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Kliknij przycisk OK po zamknięciu edytora, aby załadować zmienione nazwy!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Wybierz aplikację" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Polecenie niestandardowe" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Zapisz skojarzenie" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Ustaw wybraną aplikację jako domyślną akcję" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Typ pliku do otwarcia: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Wiele nazw plików" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Wiele identyfikatorów URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Pojedyncza nazwa pliku" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Pojedynczy identyfikator URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Zastosuj" #: tfrmoptions.btncancel.caption msgctxt "tfrmoptions.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmoptions.btnok.caption msgctxt "tfrmoptions.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opcje" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Wybierz jedną z podstron, ta strona nie zawiera żadnych ustawień." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Zastosuj" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "&Kopiuj" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Usuń" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "&Inne..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Zmień &nazwę" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsarchivers.bvlarchiverids.caption msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Identyfikatory używane z cm_OpenArchive do rozpoznawania archiwum poprzez wykrywanie jego zawartości, a nie przez rozszerzenie pliku:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgid "Options:" msgstr "Opcje:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgid "Format parsing mode:" msgstr "Tryb analizowania formatu:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgid "E&nabled" msgstr "&Włączone" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Tryb de&bugowania" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgid "S&how console output" msgstr "P&okaż dane wyjściowe konsoli" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Użyj nazwy archiwum bez rozszerzenia jako listy" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Atrybuty plików systemu UNI&X" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Ogranicznik ścieżki systemu &UNIX \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Atrybuty &plików systemu Windows" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "O&granicznik ścieżki systemu Windows \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgid "Add&ing:" msgstr "&Dodawanie:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgid "Arc&hiver:" msgstr "Arc&hiwizator:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Usuń:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgid "De&scription:" msgstr "Opi&s:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgid "E&xtension:" msgstr "&Rozszerzenie:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgid "Ex&tract:" msgstr "&Wypakuj:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Wypakuj &bez ścieżki:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "P&ołożenie ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Zakres wyszu&kiwania ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archi&wizatory:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgid "Listing &finish (optional):" msgstr "&Zakończenie listy (opcjonalnie):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgid "Listing for&mat:" msgstr "&Format listy:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgid "Listin&g start (optional):" msgstr "Początek &listy (opcjonalnie):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Ciąg kwe&rendy hasła:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Utwórz archiwum &samorozpakowujące:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Tes&tuj:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Automatyczna konfiguracja" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Wyłącz wszystkie" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Odrzuć modyfikacje" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Włącz wszystkie" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Eksportuj..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importuj..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Sortuj archiwa" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Dodatkowe" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Ogólne" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Gdy &rozmiar, data lub atrybuty uległy zmianie" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Dla następujących ś&cieżek i ich podkatalogów:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Gdy &pliki zostały utworzone, usunięte lub zmieniono ich nazwę" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Gdy aplikacja działa w &tle" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Wyłącz automatyczne odświeżanie" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Odśwież listę plików" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Za&wsze pokazuj ikonę w zasobniku" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automatycznie &ukryj odmontowane urządzenia" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "&Przenieś ikonę do zasobnika systemowego po zminimalizowaniu" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Pozwó&l uruchomić tylko 1 kopię Double Commandera na raz" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Tutaj można wpisać jeden lub więcej dysków oraz punktów montowania, oddzielonych znakiem \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Czarna lista napędów" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Rozmiar kolumn" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Pokaż rozszerzenia plików" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&wyrównane (w osobnej kolumnie)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&bezpośrednio po nazwie pliku" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automatycznie" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Stała liczba kolumn" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Stała szerokość kolumn" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Użyj &gradientu kolorów wskaźnika" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Tryb binarny" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Tryb książki" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Tryb obrazu" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Tryb tekstowy" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Dodane:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Tło:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Kategoria:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Usunięte:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Błąd:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Tło 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Tło 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Kolor &tła wskaźnika:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Kolor &wskaźnika:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "Kolor &progu wskaźnika:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Informacje:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Z lewej:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Zmodyfikowane:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Zmodyfikowane:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Z prawej:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Powodzenie:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Nierównoważne:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Status" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Wyrównanie tytułów kolumn &według wartości" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Przytnij &tekst do szerokości kolumny" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Rozszerz szerokość komórki, jeśli tekst nie pasuje do kolumny" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linie &poziome" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linie p&ionowe" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "&Automatycznie wypełniaj kolumny" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Pokaż siatkę" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Autorozmiar kolumn" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Automatyczny ro&zmiar kolumn:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Z&astosuj" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "&Edytuj" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Historię &wiersza poleceń" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "Historię &katalogów" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Historię &masek plików" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Zakładki katalogów" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "K&onfigurację" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Historię &znajdź/zamień" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Stan okna głównego" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Katalogi" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Lokalizacja plików konfiguracyjnych" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Zapisz przy wyjściu" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Porządek sortowania kolejności konfiguracji w lewym drzewie" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Stan drzewa podczas przechodzenia na stronę konfiguracji" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Ustaw w wierszu poleceń" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Wyróżnienia:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Motywy ikon:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Pamięć podręczna miniatur:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Katalog &programu (wersja przenośna)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Katalog domowy &użytkownika" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Zastosuj modyfikację do wszystkich kolumn" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Usuń" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Przejdź do ustawień domyślnych" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nowy" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Następny" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Poprzedni" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Przywróć domyślne" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Zapisz jako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Zapisz" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Zezwól na nakładanie kolorów" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Po kliknięciu zmiany, zmień dla wszystkich kolumn" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Ogólne" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Obramowanie kursora" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Użyj ramki kursora" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Użyj nieaktywnego koloru zaznaczenia" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Użyj zaznaczenia odwróconego" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Użyj niestandardowej czcionki i koloru dla tego widoku" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Tło:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Tło 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Widok &kolumn:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Bieżąca nazwa kolumny]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Kolor kursora:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Kolor tekstu pod kursorem:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "System &plików:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Czcionka:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Rozmiar:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Kolor tekstu:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Kolor nieaktywnego kursora:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Kolor nieaktywnego zaznacz.:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Kolor zaznaczenia:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Poniżej znajduje się podgląd. Możesz przesunąć kursor i wybrać pliki, aby natychmiast uzyskać rzeczywisty wygląd różnych ustawień." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Ustawienia dla kolumn:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Dodaj kolumnę" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Położenie ramki panelu po porównaniu:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Dodaj katalog &aktywnej ramki" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Dodaj &katalogi aktywnych i nieaktywnych ramek" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Dodaj katalog, który będę &przeglądać" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Dodaj kopię wybranego wpisu" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Dodaj aktualnie &wybrane lub aktywne katalogi aktywnej ramki" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Dodaj separator" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Dodaj podmenu" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Dodaj katalog, który wpiszę" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Zwiń wszystko" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Zwiń element" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Wytnij zaznaczenie wpisów" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Usuń wszystko!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Usuń wybrany element" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Usuń podmenu i wszystkie jego elementy" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Usuń tylko podmenu, ale zachowaj elementy" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Rozwiń element" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Ustaw okno widoku drzewa" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Przejdź do pierwszego elementu" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Przejdź do ostatniego elementu" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Przejdź do następnego elementu" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Przejdź do poprzedniego elementu" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Wstaw katalog &aktywnej ramki" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Wstaw &katalogi aktywnych i nieaktywnych ramek" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Wstaw katalog, który bedę &przegladał" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Wstaw kopię wybranego wpisu" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Wstaw aktualnie &wybrane lub aktywne katalogi aktywnej ramki" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Wstaw separator" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Wstaw podmenu" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Wstaw katalog, który wpiszę" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Przejdź do następnego" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Przejdź do poprzedniego" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Otwórz wszystkie gałęzie" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Wklej to, co zostało wycięte" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Znajdź i zamień w ś&cieżce" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Znajdź i zamień w obu ścieżkach i celu" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Znajdź i zamień w ścieżce &docelowej" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Dostosuj ścieżkę" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Dostosuj ścieżkę docelową" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Dodaj..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Kopia zapasowa..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Usuń..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Eksportuj..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Importuj..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Wstaw..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Różne..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Niektóre funkcje do wyboru odpowiedniego celu" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Sortuj..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Po&dczas dodawania katalogu, dodaj także element docelowy" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "&Zawsze rozwijaj drzewo" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Pokaż tylko &prawidłowe zmienne środowiskowe" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Pokaż w &wyskakującym oknie [również ścieżkę]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nazwa, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Nazwa, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista ulubionych katalogów (zmień kolejność przez przeciągnij i upuść)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Inne opcje" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Nazwa:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Ścieżka:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "&Cel:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...obecny &poziom tylko wybranego elementu(ów)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Skanuj ścieżkę wszystkich &ulubionych katalogów, aby zweryfikować te, które faktycznie istnieją" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "&Skanuj ścieżkę i cel wszystkich ulubionych katalogów, aby zweryfikować te, które faktycznie istnieją" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "do pliku &ulubionych katalogów (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "do \"wincmd.ini\" TC (&zachowaj istniejące)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "do \"wincmd.ini\" TC (&usuń istniejące)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Przejdź do &konfiguracji TC i powiązanej z nią informacji" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Przejdź do &konfiguracji TC i powiązanej z nią informacji" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Menu testowe ulubionych katalogów" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "z pliku &ulubionych katalogów (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "z \"wincmd.ini\" TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Przejdź..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "P&rzywróć kopię zapasową ulubionego katalogu" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Zapisz kopię zapasową bieżącego ulubionego katalogu" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Znajdź i &zamień..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...wszystko od A do &Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...tylko pojedyncza &grupa elementów" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&zawartość wybranego podmenu, bez podpoziomu" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...zawartość wybranego podmenu i &wszystkich podpoziomów" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Menu &wynikowe testu" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Dostosuj ś&cieżkę" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Dostosuj ścieżkę &docelową" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Dodatek z panelu głównego" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Zastosuj bieżące ustawienia do ulubionych katalogów" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Źródłowych" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Docelowych" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Ścieżki" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Sposób ustawiania ścieżek podczas ich dodawania:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Zrób to dla ścieżek:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Ścieżka względna do:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Dla wszystkich obsługiwanych formatów pytaj, których użyć za każdym razem" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Podczas zapisywania tekstu Unicode, zapisz go w formacie UTF8 (w przeciwnym razie będzie UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Podczas upuszczania tekstu, automatycznie generuj nazwę pliku (w przeciwnym razie będzie monitował użytkownika)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Pokaż okno dialogowe potwierdzenia po upuszczeniu" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Podczas przeciągania i upuszczania tekstu do paneli:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Umieść najbardziej pożądany format na górze listy (użyj przeciągnij i upuść):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(jeśli najbardziej pożądany nie jest obecny, bierzemy drugi i tak dalej)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(jeśli nie będzie działać z jakąś aplikacją źródłową i wystąpi problem, spróbuj odznaczyć)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Pokaż system &plików" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Pokaż &wolne miejsce" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Pokaż &etykietę" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista napędów" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Tryb automatycznego wcięcia" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Pozwala na wcięcie kursora, gdy nowy wiersz jest tworzony z <Enter>, z taką samą ilością odstępów wiodących jak w poprzednim wierszu" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "Cofnij grupowanie" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "Wszystkie ciągłe zmiany tego samego typu będą przetwarzane w jednym wywołaniu, zamiast cofać/ponawiać każdą z nich" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Prawy margines:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Wstaw kursor na końcu wiersza" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Pozwala kursorowi przejść do pustej przestrzeni poza pozycją końca wiersza" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Pokaż znaki specjalne" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Pokazuje znaki specjalne dla spacji i tabulacji" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Inteligentne tabulatory" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Podczas korzystania z klawisza <Tab>, karetka przejdzie do następnego znaku innego niż spacja z poprzedniego wiersza" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tabulatory blokują wcięcia" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Gdy aktywne, <Tab> i <Shift+Tab> działają jako wcięcia blokowe, brak wcięcia po zaznaczeniu tekstu" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Używaj spacji zamiast znaków tabulacji" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Konwertuje znaki tabulacji na określoną liczbę znaków spacji (podczas wprowadzania)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Usuń spacje końcowe" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatycznie usuwaj spacje końcowe, dotyczy to tylko edytowanych wierszy" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Zwróć uwagę, że opcja \"Inteligentne tabulatory\" ma pierwszeństwo wykonania przed tabulacją" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opcje edytora wewnętrznego" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Wcięcie bloku:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Szerokość tabulatora:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Zwróć uwagę, że opcja \"Inteligentny tabulator\" ma pierwszeństwo wykonania przed tabulacją" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Tło" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Tło" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Resetuj" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Zapisz" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atrybuty elementu" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Kolor pierwszego planu" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "&Kolor pierwszego planu" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Zaznaczony &tekst" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Użyj (i edytuj) ustawienia &globalnego schematu kolorów" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Użyj ustawień &lokalnego schematu kolorów" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Pogrubienie" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Odwróć" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "W&yłącz" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Włącz" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kursywa" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Odwróć" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "W&yłącz" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Włącz" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "P&rzekreślenie" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Odwróć" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "W&yłcz" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Włącz" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podkreślenie" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Odwróć" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "W&ył" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Włącz" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Dodaj..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Usuń..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importuj/Eksportuj" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Wstaw..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Sortuj..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Brak" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Zawsze rozwiń drzewo" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Lewa" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Prawa" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lista ulubionych zakładek (zmień kolejność przez \"przeciągnij i upuść\")" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Inne opcje" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Co i gdzie przywrócić dla wybranego wpisu:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Istniejące zakładki do zachowania:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Zapisz historię katalogów:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Zakładki zapisane po lewej stronie będą przywrócone do:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Zakładki zapisane po prawej stronie będą przywrócone do:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Dodaj separator" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podmenu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Dodaj podmenu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Zwiń wszystko" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...tylko bieżący poziom wybranego elementu(ów)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Wytnij" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "usuń wszystko!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podmenu i wszystkie jego elementy" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "tylko podmenu, ale zachowaj jego elementy" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "wybrany element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Usuń wybrany element" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Eksportuj zaznaczenie do starszej wersji pliku(ów) .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Menu testowe ulubionych zakładek" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importuj starszą wersję pliku(ów) .tab zgodnie z ustawieniem domyślnym" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Importuj starszą wersję pliku(ów) .tab w wybranej pozycji" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importuj starszą wersję pliku(ów) .tab w wybranej pozycji" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importuj starszą wersję pliku(ów) .tab w wybranej pozycji podmenu" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Wstaw separator" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Wstaw podmenu" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Otwórz wszystkie gałęzie" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Wklej" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...wszystko od A do Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...tylko pojedyncza grupa elementu(ów)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Sortuj tylko pojedynczą grupę elementu(ów)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...zawartość wybranego podmenu, bez podpoziomu" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...zawartość wybranego podmenu i wszystkich podpoziomów" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Testuj menu wynikowe" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "D&odaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klonuj" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Wybierz swoje wewnętrzne polecenie" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "W &dół" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "&Edytuj" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Wstaw" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "&Wstaw" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Usu&ń" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "U&suń" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Usuń" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Zmień &nazwę" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Pomocnik przypomnienia zmiennej" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "W &górę" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Początek ścieżki polecenia. Nigdy nie cytuj tego ciągu." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nazwa akcji. Nigdy nie jest przekazywana do systemu, jest to tylko nazwa mnemoniczna wybrana przez Ciebie dla Ciebie" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parametr do przekazania do polecenia. Długa nazwa pliku ze spacjami powinna być w cudzysłowiu." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Polecenie do wykonania. Długa nazwa pliku ze spacją powinna być w cudzysłowiu." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Opis akcji:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Akcje" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Rozszerzenia" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Można sortować metodą przeciągnij i upuść" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Typy plików" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Akcje mogą być sortowane metodą przeciągnij i upuść" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Rozszerzenia mogą być sortowane metodą przeciągnij i upuść" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Typy plików mogą być sortowane metodą przeciągnij i upuść" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "&Nazwa akcji:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Pole&cenie:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parametry:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ścieżka poc&zątkowa:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Niestandardowe z..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Niestandardowe" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Edytuj" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Otwórz w edytorze" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Edytuj za pomocą..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Pobierz dane wyjściowe polecenia" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Otwórz w edytorze wewnętrznym" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Otwórz w przeglądarce wewnętrznej" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otwórz" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Otwórz za pomocą..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Uruchom w terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Wyświetl" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Otwórz w przeglądarce" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Wyświetl za pomocą..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Kliknij, aby zmienić ikonę!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Zastosuj bieżące ustawienia do wszystkich aktualnie skonfigurowanych nazw plików i ścieżek" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Domyślne operacje kontekstowe (Widok/Edycja)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Wykonaj przez Shell" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Rozszerzone menu kontekstowe" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfiguracja skojarzeń plików" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Zaproponuj dodanie zaznaczenia do skojarzenia pliku, gdy nie jest już uwzględnione" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Podczas uzyskiwania dostępu do skojarzenia pliku, zaproponuj dodanie aktualnie zaznaczonego pliku, jeśli nie został już uwzględniony w skonfigurowanym typie pliku" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Uruchom przez terminal i zamknij" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Uruchom przez terminal i pozostaw otwarty" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Polecenia" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Ścieżki początkowe" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Rozszerzone opcje elementów:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Ścieżki" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Sposób ustawiania ścieżek podczas dodawania elementów do ikon, poleceń i ścieżek początkowych:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Zrób to dla plików i ścieżki:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Ścieżka względna do:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Pokaż okno potwierdzenia dla:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operacja &kopiowania" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operacja &usuwania" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "U&suń do kosza (z klawiszem Shift usuwa bezpowrotnie)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operacja usuwania do &kosza" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "&Zdejmij flagę \"Tylko do odczytu\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operacja &przenoszenia" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Przetwarzaj komentarze do plików/folderów" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Wybierz tylko nazwę &pliku podczas zmiany nazwy (bez rozszerzenia)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "&Pokaż pasek postępu podczas kopiowania/przenoszenia" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "P&omiń błędy operacji na plikach i zapisz je w oknie dziennika" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Testuj archiwum operacji" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Weryfikuj sumę kontrolną operacji" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Wykonywanie operacji" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfejs użytkownika" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Rozmiar &bufora dla operacji na plikach (w KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Rozmiar bufora dla obliczania &hash (w KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Pokaż postęp operacji po&czątkowo w" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Styl automatycznej zmiany zduplikowanej nazwy:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Liczba przebiegów wymazywania:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Przywróć domyślne ustawienia DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Zezwól na nakładanie kolorów" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Użyj kursora jako &ramki" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Użyj koloru nieaktywnego zaznaczenia" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "&Użyj zaznaczenia odwróconego" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Obramowanie kursora" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Bieżąca ścieżka" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "&Tło:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Tł&o 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Kolor k&ursora:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "&Tekst pod kursorem:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Kolor nieaktywnego kursora:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Kolor nieaktywnego zaznacz.:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "Poziom &jasności nieaktywnego panelu:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Kolor &zaznaczenia:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Tło" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Kolor tekstu:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Nieaktywne tło:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Kolor nieaktywnego tekstu:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Poniżej znajduje się podgląd. Możesz przesunąć kursor, wybrać plik i natychmiast uzyskać rzeczywisty wygląd różnych ustawień." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "Kolor t&ekstu:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Podczas uruchamiania wyszukiwania plików, wyczyść filtr maski pliku" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Wy&szukaj część nazwy pliku" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Pokaż pasek menu w \"Znajdź pliki\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Wyszukiwanie tekstu w plikach" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Wyszukiwanie plików" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Bieżące filtry z przyciskiem \"Nowe wyszukiwanie\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Domyślny szablon wyszukiwania:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Użyj mapowania pamięci do wyszukiwania tekstu w plikach" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Użyj strumienia do wyszukiwania tekstu w plikach" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Domyślnie" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatowanie" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Spersonalizowane skróty do użycia:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Sortowanie" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Bajtów:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Uwzględnianie wi&elkości liter:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nieprawidłowy format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Format &daty i godziny:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format &rozmiaru pliku:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Format &stopki:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabajtów:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Format &nagłówka:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobajtów:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Megabajtów:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Wstaw nowe pliki:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Format rozmiaru o&peracji:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "&Sortowanie katalogów:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metoda sortowania:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabajtów:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Przenieś zaktualizowane pliki:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Dodaj" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Włącz zmienianie do &folderu nadrzędnego, po dwukrotnym kliknięciu pustej części widoku plików" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Nie ładuj listy plików, dopóki karta nie zostanie uaktywniona" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Pokaż nawiasy &kwadratowe [] wokół katalogów" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Wy&różnij nowe i zaktualizowane pliki" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Włącz &zmianę nazwy w miejscu, po dwukrotnym kliknięciu nazwy" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "Wczytaj &listę plików w oddzielnym wątku" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "Wczytaj &ikony po liście plików" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Pokaż pliki &ukryte/systemowe" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Podczas &wybierania, klawisz <Spacja> przenosi w dół do następnego pliku (tak jak <Insert>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filtr stylu Windows podczas zaznaczania plików (\"*.*\" wybiera również pliki bez rozszerzenia, itp.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Użyj za każdym razem w oknie wprowadzania maski, niezależnego filtru atrybutów " #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "Zaznaczenie/Odznaczenie wpisów" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "Domyślna wartość maski atrybutu do użycia:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Zastosuj" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Usuń" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Szablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Kolor typu plików (sortuj przez \"przeciągnij i upuść\")" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&trybuty kategorii:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Ko&lor kategorii:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "&Maska kategorii:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "&Nazwa kategorii:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Czcionki" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "&Dodaj klawisz skrótu" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopiuj" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "&Usuń klawisz skrótu" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Edytuj klawisz skrótu" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Następna kategoria" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Utwórz menu podręczne związane z plikiem" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Poprzednia kategoria" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Przywróć domyślne ustawienia DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Zapisz teraz" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Sortuj według nazwy polecenia" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Sortuj według skrótów klawiszowych (pogrupowane)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Sortuj według skrótów klawiszowych (jeden na wiersz)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filtr" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "K&ategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "&Polecenia:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Pliki &skrótów:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Kolejność so&rtowania:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorie" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Polecenie" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Kolejność sortowania" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Polecenie" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Skróty klawiszowe" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Klawisz skrótu" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametry" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Sterowanie" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "tfrmoptionsicons.cbiconsexclude.caption" msgid "For the following &paths and their subdirectories:" msgstr "Dla następujących ś&cieżek i ich podkatalogów:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Pokaż ikony dla działań w &menu" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Pokaż ikony na przyciskach" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Pokaż &nakładki ikon, np. dla łączy" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Bledsze ikony plików &ukrytych (wolniej)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Wyłącz specjalne ikony" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "Rozmiar ikon" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Motyw ikon" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Pokaż ikony" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "Wyświetlanie ikon po lewej stronie nazwy pliku" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Panel dysków:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Panel plików:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Wszystkie skojarzone" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Wszystkie skojarzone + &EXE/LNK (powoli)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "&Bez ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Tylko &standardowe ikony" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "&Dodaj wybrane nazwy" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Dodaj wybrane nazwy z &pełną ścieżką" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoruj (nie pokazuj) następujące pliki i katalogi:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Zapisz w:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Strzałki w &lewo i prawo zmieniają katalog (poruszanie się jak w Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Pisanie" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+Lit&ery:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Li&tery:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Litery:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Płaskie przyciski" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Płaski interfe&js" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Pokaż wskaźnik wolneg&o miejsca na etykiecie dysku" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Pokaż okno dzie&nnika" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Pokaż panel operacji w tle" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Pokaż postęp ogólny w pasku menu" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Pokaż &wiersz poleceń" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Pokaż nazwę bieżącego katalog&u" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Pokaż przyciski &dysków" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Pokaż etykietę wolnego &miejsca" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Pokaż przycisk &listy dysków" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Pokaż przyciski klawis&zy funkcyjnych" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Pokaż &główne menu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Pokaż pasek prz&ycisków" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Pokaż krótką &etykietę wolnego miejsca" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Pokaż pasek &stanu" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Pokaż nagłówki &kolumn" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Pokaż zakładki &folderów" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Pokaż okno &terminalu" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Pokaż dwa paski napędów (st&ałej szerokości, powyżej okien z plikami)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Pokaż środkowy pasek narzędzi" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr "Układ ekranu" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Pokaż zawartość pliku dziennika" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Dołącz datę w nazwie pliku dziennika" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "&Spakuj/Rozpakuj" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Wykonaj wiersz polecenia zewnętrznego" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "&Kopiuj/Przenieś/Utwórz link/dowiązanie symboliczne" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Usuń" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "U&twórz/Usuń katalogi" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Rejestruj &błędy" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "Utwó&rz plik dziennika:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Maksymalna liczba plików dziennika" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "Rejestruj komunikaty &informacyjne" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Uruchom/zamknij" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Rejestruj operacje zakończone &powodzeniem" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "Wtyczki systemu p&lików" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Plik dziennika operacji" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Operacje dziennika" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stan operacji" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Usuń miniatury dla nieistniejących plików" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Wyświetl zawartość pliku dziennika" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Utwórz nowy z kodowaniem:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Zawsze &idź do katalogu głównego dysku podczas zmiany dysków" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Pokaż &bieżący katalog na pasku tytułu okna głównego" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Pokaż ekran &powitalny" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Pokaż komunikaty &ostrzegawcze (tylko przycisk \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Zapisz miniatury w pamięci podręcznej" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniatury" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Komentarze plików (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Zakres eksportu/importu TC:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Domyślne jednobajtowe kodowanie tekstu:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Kodowanie domyślne:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Plik konfiguracji:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Plik wykonywalny TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ścieżka wyjściowa paska narzędzi:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pikseli" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "x" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Rozmiar miniatur:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Zaznaczanie za pomocą myszy" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Kursor tekstowy przestaje podążać za kursorem myszy" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Przez &kliknięcie na ikonę" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otwórz z ..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Przewijanie" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Zaznaczenie" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Tryb:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Podwójne kliknięcie" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Wiersz po wierszu" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Wiersz po wierszu &z ruchem kursora" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Strona po stronie" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Pojedyncze kliknięcie (otwiera pliki i foldery)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Pojedyncze kliknięcie (otwiera foldery, podwójne kliknięcie dla plików)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Pokaż zawartość pliku dziennika" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Poszczególne katalogi dzienne" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Nazwy plików dziennika z pełną ścieżką" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Pokaż pasek menu na górze " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Zmień nazwę dziennika" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Zastąp nieprawidłowy znak nazwy pliku &przez" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Dołącz zmianę nazwy w tym samym pliku dziennika" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Na ustawienie wstępne" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Zakończ ze zmodyfikowanym ustawieniem wstępnym" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Ustawienie wstępne przy uruchamianiu" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Konfiguruj" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Włącz" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Usuń" #: tfrmoptionspluginsbase.btntweakplugin.caption msgid "&Tweak" msgstr "D&ostosuj" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Opis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Wtyczki &wyszukiwania pozwalają na użycie alternatywnych algorytmów wyszukiwania lub narzędzi zewnętrznych (takich jak \"zlokalizuj\", itp.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Zastosuj bieżące ustawienia do wszystkich aktualnie skonfigurowanych wtyczek" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Podczas dodawania nowej wtyczki, automatycznie przejdź do okna ustawień" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Konfiguracja:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Plik biblioteki Lua do użycia:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Ścieżka względna do:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Styl nazwy pliku wtyczki podczas dodawania nowej wtyczki:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgid "Pack&er plugins are used to work with archives" msgstr "Wtyczki &pakera używane są do pracy z archiwami." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionspluginswdx.lblplugindescription.caption msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Wtyczki &zawartości pozwalają wyświetlać dodatkowe informacje o pliku, jak np. tagi mp3 lub atrybuty obrazu na liście plików, oraz mogą być używane w narzędziach wyszukiwania i wielokrotnej zmiany nazwy." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionspluginswfx.lblplugindescription.caption msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Wtyczki systemu pli&ków umożliwiają dostęp do dysków niedostępnych dla systemu operacyjnego lub urządzeń zewnętrznych, np. Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionspluginswlx.lblplugindescription.caption msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Wtyczki przeglądarki (&Listera) umożliwiają wyświetlanie plików, takich jak obrazy, arkusze kalkulacyjne, bazy danych itp. w Listerze (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktywna" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "Po&czątek (nazwa musi rozpoczynać się od pierwszego wpisanego znaku)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "K&oniec (ostatni znak przed wpisaną kropką . musi pasować)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opcje" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Dokładne dopasowywanie nazwy" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Wyszukaj wielkość liter" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Wyszukaj elementy" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Zachowaj zmienioną nazwę podczas odblokowywania zakładki" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktywuj &panel docelowy po kliknięciu na jego zakładki" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "&Pokaż nazwę zakładki nawet, gdy jest tylko jedna zakładka" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zamknij zduplikowane zakładki podczas zamykania aplikacji" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Po&twierdź zamknięcie wszystkich zakładek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potwierdź zamknięcie zablokowanych zakładek" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Ogranicz długość nazwy zakładki do:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Oznacz zablokowane zakładki za pomocą g&wiazdki *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "&Zakładki w wielu rzędach" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up otwiera nową zakładkę w tle" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Otwórz &nową zakładkę obok obecnie aktywnej" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Użyj ponownie istniejącej zakładki, jeśli to możliwe" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Pokaż przycisk zamknięcia za&kładki" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Zawsze pokaż literę dysku w nazwie zakładki" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Nagłówki zakładek folderów" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "znaków" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Akcja do wykonania po dwukrotnym kliknięciu zakładki:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Położenie &zakładek" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "Brak" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Nie" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Lewy" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Prawy" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Przejdź do ustawień ulubionych zakładek po ponownym zapisaniu" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Przejdź do ustawień ulubionych zakładek po zapisaniu nowej" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Włącz dodatkowe opcje ulubionych zakładek (wybierz stronę docelową podczas przywracania, itp.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Domyślne dodatkowe ustawienia podczas zapisywania nowych ulubionych zakładek:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Dodatkowe nagłówki zakładek folderów" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Podczas przywracania zakładki, zachowaj istniejące zakładki:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Zakładki zapisane po lewej zostaną przywrócone do:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Zakładki zapisane po prawej zostaną przywrócone do:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Zachowaj zapisaną historię katalogów w ulubionych zakładkach:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Domyślne położenie w menu podczas zapisywania nowych ulubionych zakładek:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} powinno być obecne tutaj, aby odzwierciedlić polecenie do uruchomienia w terminalu" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} powinno być obecne tutaj, aby odzwierciedlić polecenie do uruchomienia w terminalu" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Polecenie tylko do uruchomienia terminalu:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Polecenie do uruchomienia polecenia w terminalu i zamknięciu po:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Polecenie do uruchomienia polecenia w terminalu i pozostawienia otwartym:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Polecenie:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Polecenie:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Polecenie:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "K&lonuj przycisk" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Usuń" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "&Edytuj klawisz skrótu" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "&Wstaw nowy przycisk" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Wybierz" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Inne..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Usuń klawisz &skrótu" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Sugeruj" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Niech DC sugeruje podpowiedź na podstawie typu przycisku, polecenia i parametrów" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Płaskie przyciski" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Raportuj błędy z poleceń" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "P&okaż etykiety" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Wprowadź parametry polecenia, każde w osobnym wierszu. Naciśnij F1, aby wyświetlić pomoc dotyczącą parametrów." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Wygląd" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "&Rozmiar paska:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Pole&cenie:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Para&metry:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Pomoc" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Klawisz skrótu:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "&Ikona:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Ro&zmiar ikon:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Po&lecenie:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametry:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Ścieżk&a początkowa:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Styl:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "E&tykietka podpowiedzi:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodaj pasek narzędzi ze WSZYSTKIMI poleceniami DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "dla polecenia zewnętrznego" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "dla polecenia wewnętrznego" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "dla separatora" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "dla paska narzędzi podrzędnych" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Kopia zapasowa..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Eksportuj..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Bieżący pasek narzędzi..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "do pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "do pliku .BAR TC (zachowaj istniejący)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "do pliku .BAR TC (wymaż istniejący)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (zachowaj istniejący)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (wymaż istniejący)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Górny pasek narzędzi..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Zapisz kopię zapasową paska narzędzi" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do pliku .BAR TC (zachowaj istniejący)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do pliku .BAR TC (wymaż istniejący)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (zachowaj istniejący)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (wymaż istniejący)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importuj..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Przywróć kopię zapasową paska narzędzi" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "aby dodać nowy pasek narzędzi do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "aby dodać nowy pasek narzędzi do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "z pliku paska narzędzi (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "aby dodać nowy pasek narzędzi do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "aby dodać nowy pasek narzędzi do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z pojedynczego pliku .BAR TC" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "aby dodać nowy pasek narzędzi do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "aby dodać nowy pasek narzędzi do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z \"wincmd.ini\" TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "aby dodać do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "aby dodać nowy pasek narzędzi do bieżącego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "aby dodać nowy pasek narzędzi do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "aby dodać do górnego paska narzędzi" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "aby zastąpić górny pasek narzędzi" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Znajdź i zamień..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "we wszystkich powyższych..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "we wszystkich poleceniach..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "we wszystkich nazwach ikon..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "we wszystkich parametrach..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "we wszystkich ścieżkach początkowych..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "po bieżącym zaznaczeniu" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako pierwszy element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako ostatni element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "przed bieżącym zaznaczeniem" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Separator" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Spacja" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Typ przycisku" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Zastosuj bieżące ustawienia do wszystkich skonfigurowanych nazw plików i ścieżek" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Polecenia" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Ścieżki początkowe" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Ścieżki" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Zrób to dla plików i ścieżek dla:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Ścieżka względna do:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Sposób ustawiania ścieżek podczas dodawania elementów do ikon, poleceń i ścieżek początkowych:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Zachowaj otwarte okno terminalu po wykonaniu programu" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Wykonaj w terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Użyj programu zewnętrznego" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatkowe parametry" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Ścieżka do uruchomienia &programu" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Zastosuj" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "&Kopiuj" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Usuń" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Szablon..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Zmień &nazwę" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "&Inne..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Konfiguracja etykietki podpowiedzi dla wybranego typu pliku:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Ogólne opcje dotyczące etykietek podpowiedzi:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "&Pokaż etykietki podpowiedzi dla plików w panelu plików" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "&Wskazówka kategorii:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorii:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Opóźnienie ukrywania podpowiedzi:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Tryb wyświetlania podpowiedzi:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Typy &plików:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Odrzuć zmiany" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Eksportuj..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importuj..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Sortuj typy plików etykietek podpowiedzi" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Z dwukrotnym kliknięciem na pasku u góry panelu plików" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Z menu i poleceniem wewnętrznym" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Podwójne kliknięcie myszy w drzewie, spowoduje zachowanie \"wybierz i wyjdź\"" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "Z menu i poleceniem wewnętrznym" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Z dwukrotnym kliknięciem na karcie (jeśli jest skonfigurowana dla niego)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Użycie skrótu klawiaturowego, spowoduje wyjście z okna zwracając bieżący wybór" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Pojedyncze kliknięcie myszy w drzewie, spowoduje zachowanie \"wybierz i wyjdź\"" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Użyj do historii wiersza poleceń" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Użyj do historii katalogów" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Użyj do wyświetlenia historii (Odwiedzone ścieżki dla aktywnego widoku)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Zachowanie dotyczące wyboru:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Opcje związane z menu widoku drzewa:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Gdzie można używać menu widoku drzewa:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*UWAGA: Jeśli chodzi o opcje, takie jak uwzględnianie wielkości liter, ignorowanie akcentów lub nie, są one zapisywane i przywracane indywidualnie, dla każdego kontekstu z użycia i sesji do innych." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Z ulubionymi katalogami:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Z ulubionymi zakładkami:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Z historią:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Użyj i wyświetl skrót klawiaturowy dla wybranych elementów" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Czcionka" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Opcje układu i kolorów:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Kolor tła:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Kolor kursora:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Kolor znalezionego tekstu:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Znaleziony tekst pod kursorem:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Kolor zwykłego tekstu:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Zwykły tekst pod kursorem:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Podgląd menu widoku drzewa:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Kolor drugiego tekstu:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Kolor drugiego tekstu pod kursorem:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Kolor skrótu:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Skrót pod kursorem:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Kolor niewybranego tekstu:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Niewybrane pod kursorem:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Zmień kolor po lewej, a zobaczysz tutaj podgląd tego, jak Twój widok drzewa będzie wyglądał z tym przykładem." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Opcje przeglądarki wewnętrznej" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Liczba kolumn w podglądzie książki" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "&Konfiguruj" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Spakuj pliki" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Utwórz oddzielne archiwa, po jednym dla każdego zaznaczonego pliku/katalogu" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Utwórz samo&rozpakowujące się archiwum" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Szyfruj" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "&Przenieś do archiwum" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archiwum &wieloczęściowe" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Najpierw &umieść w archiwum TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Spakuj także ścieżki dostępu (tylko dla podkatalogów)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Spakuj plik(i) do pliku:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Paker" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Rozpakuj &wszystkie i uruchom" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Rozpakuj i uruchom" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Właściwości spakowanego pliku" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atrybuty:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Stopień kompresji:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metoda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Rozmiar oryginalny:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Plik:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Rozmiar po spakowaniu:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Paker:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Czas:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Konfiguracja drukowania" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Marginesy (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Dolny:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Lewy:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Prawy:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Górny:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zamknij panel filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Wpisz tekst do wyszukania lub filtrowania" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Uwzględniaj wielkość liter" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "K" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Katalogi" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "P" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Pliki" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Dopasuj początek" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Dopasuj koniec" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filtr" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Przełączanie między wyszukiwaniem lub filtrowaniem" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Więcej reguł" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "&Mniej reguł" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Użyj wtyczek &zawartości, w połączeniu z:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Wtyczka" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Wartość" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&ORAZ (wszystkie dopasowane)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&LUB (dowolne dopasowanie)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Zastosuj" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Szablon..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Szablon..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Wybierz zduplikowane pliki" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Pozostaw co najmniej jeden plik w każdej grupie niezaznaczony:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Usuń zaznaczenie według nazwy/rozszerzenia:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Wybierz według &nazwy/rozszerzenia:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Sep&arator" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Zlicz od" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Wynik:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Wybierz katalogi do wstawienia (możesz wybrać więcej niż jeden)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Koniec" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Początek" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Zlicz pierwsze od" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Zlicz ostatnie od" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Opis zakresu" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Wynik:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Wybierz znaki do wstawienia:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Pierwszy:Ostatni]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Pierwszy,&Długość]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&Koniec" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&Początek" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "Koni&ec" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "P&oczątek" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Zmień atrybuty" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Przyklejony" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Archiwizowany" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Utworzony:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Ukryty" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Dostępny:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Zmodyfikowany:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Tylko do odczytu" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Z podkatalogami" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Systemowy" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Właściwości sygnatury czasowej" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atrybuty" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atrybuty" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bity:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupa" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szare pole oznacza niezmienioną wartość)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Inne" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Właściciel" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Wykonywalny" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(szare pole oznacza niezmienioną wartość)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ósemkowo:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Odczyt" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapis" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Sortuj" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Anuluj" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Przeciągnij i upuść elementy, aby je posortować" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmsplitter.caption msgid "Splitter" msgstr "Rozdzielacz" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Wymagaj pliku weryfikacyjnego CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Rozmiar i liczba części" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Podziel plik do katalogu:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Liczba części" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajty" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabajty" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobajty" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabajty" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Kompilacja" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Zatwierdzenie" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "System operacyjny" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Wydanie" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Wersja" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Wersja zastawu widżetów" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Utwórz link symboliczny" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Jeśli to możliwe, użyj ścieżki &względnej" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Miejsce &docelowe, które będzie wskazywał link" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nazwa &linku" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Usuń po obu stronach" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Usuń lewy" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Usuń prawy" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Usuń zaznaczenie" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Wybierz do kopiowania (domyślny kierunek)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Wybierz do kopiowania -> (z lewej na prawą)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Odwróć kierunek kopiowania" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Wybierz do kopiowania <- (z prawej na lewą)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Wybierz do usunięcia <-> (oba)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Wybierz do usunięcia <- (z lewej)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Wybierz do usunięcia -> (z prawej)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Zamknij" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Porównaj" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Szablon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizuj" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizuj katalogi" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "Asymetrycznie" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "Wg zawartości" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "Ignoruj datę" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "Tylko zaznaczone" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podkatalogi" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Pokaż:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Nazwa" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Rozmiar" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Rozmiar" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Nazwa" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(w głównym oknie)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Porównaj" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Podgląd lewego" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Podgląd prawego" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "podwójne" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "pojedyncze" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Naciśnij przycisk \"Porównaj\", aby rozpocząć" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synchronizuj" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potwierdź nadpisanie" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Widok drzewa" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Wybierz swój ulubiony katalog:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Wyszukiwanie uwzględnia wielkość liter" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Zwiń wszystko" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Rozwiń wszystko" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Wyszukiwanie ignoruje akcenty i ligatury" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Wyszukiwanie nie uwzględnia wielkości liter" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Wyszukiwanie ściśle dotyczy akcentów i ligatur" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Nie pokazuj zawartości gałęzi, \"tylko dlatego\", że wyszukiwany ciąg znajduje się w nazwie gałęzi" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Jeżeli poszukiwany ciąg znajduje się w nazwie gałęzi, pokaż całą gałąź, nawet jeśli elementy nie pasują do siebie" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Zamknij widok drzewa" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Konfiguracja widoku drzewa" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Konfiguracja kolorów widoku drzewa" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Dodaj nowy" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Zmień" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Domyślny" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Usuń" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Ustawienia wtyczki" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Wykryj typ archiwum wg zawartości" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Możliwość &usunięcia pliku z archiwum" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Wsparcie &szyfrowania" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Pokazuj jako zwykły plik (nie pokazuj ikony archiwum)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Wsparcie pakowania w pamięci" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Pozwól na &modyfikację archiwum" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Archiwum może zawierać kilka plików" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Może tworzyć nowe archi&wum" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Z oknem dialogowym" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Pozwala przeszukiwać archiwa" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "&Opis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "&Wykryj łańcuch (string):" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "&Rozszerzenie:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flagi:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Nazwa:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "&Wtyczka:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Wtyczka:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "O listerze..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Wyświetla komunikat \"O...\"" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Automatyczne ponowne załadowanie" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Zmień kodowanie" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Kopiuj plik" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiuj plik" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiuj do schowka" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopiuj do schowka sformatowane" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Usuń plik" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Usuń plik" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "Za&kończ" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Znajdź" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Znajdź następny" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Znajdź poprzedni" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Pełny ekran" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Przejdź do wiersza..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Przejdź do wiersza" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Wyśrodkuj" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "&Następny" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Wczytaj następny plik" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "&Poprzedni" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Wczytaj poprzedni plik" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Lustro w poziomie" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Lustro" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Lustro w pionie" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Przenieś plik" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Przenieś plik" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Podgląd" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "D&rukuj..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "&Ustawienia wydruku..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Wczytaj ponownie" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Wczytaj ponownie bieżący plik" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "Obróć o 180°" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Obróć o 180°" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "Obróć o 270°" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Obróć o 270°" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "Obróć o 90°" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Obróć o 90°" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Zapisz" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Zapisz jako..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Zapisz plik jako..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Zrzut ekranu" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Opóźnienie 3 sek" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Opóźnienie 5 sek" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Pokaż w widoku &binarnym" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Pokaż jako &książkę" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Pokaż w zapisie &dziesiętnym" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Pokaż w zapisie &szesnastkowym" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Pokaż jako &tekst" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Tekst z &zawijaniem wierszy" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Pokaż k&ursor tekstowy" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Kod" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (tylko tekst)" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Wtyczki" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Pokaż przezrocz&ystość" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Rozciągnij" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Rozciągnij obrazek" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Rozciągnij tylko duże" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Cofnij" #: tfrmviewer.actundo.hint msgctxt "tfrmviewer.actundo.hint" msgid "Undo" msgstr "Cofnij" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Zawijaj tekst" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Powiększenia" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Powiększ" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Powiększ" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zmniejsz" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Zmniejsz" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Przytnij" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Pełny ekran" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Eksportuj ramkę" #: tfrmviewer.btnhightlight.hint msgid "Highlight" msgstr "Wyróżnij" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Następna ramka" #: tfrmviewer.btnpaint.hint msgid "Paint" msgstr "Maluj" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Poprzednia ramka" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Czerwone oczy" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Zmień rozmiar" #: tfrmviewer.btnslideshow.caption msgid "Slide Show" msgstr "Pokaz slajdów" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Lister" #: tfrmviewer.miabout.caption msgctxt "tfrmviewer.miabout.caption" msgid "About" msgstr "O programie" #: tfrmviewer.miedit.caption msgctxt "tfrmviewer.miedit.caption" msgid "&Edit" msgstr "&Edytuj" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Elipsa" #: tfrmviewer.miencoding.caption msgctxt "tfrmviewer.miencoding.caption" msgid "En&coding" msgstr "&Kodowanie" #: tfrmviewer.mifile.caption msgctxt "tfrmviewer.mifile.caption" msgid "&File" msgstr "&Plik" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Obraz" #: tfrmviewer.mipen.caption msgid "Pen" msgstr "Ołówek" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Prostokąt" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Obróć" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Zrzut ekranu" #: tfrmviewer.miview.caption msgctxt "tfrmviewer.miview.caption" msgid "&View" msgstr "&Podgląd" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Wtyczki" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Rozpocznij" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Zatrzymaj" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operacje na plikach" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Zawsze na wierzchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Użyj metody \"przeciągnij i upuść\", aby przenieść operacje między kolejkami" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nowa kolejka" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Pokaż w oddzielnym oknie" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Umieść na początku kolejki" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Umieść na końcu kolejki" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Kolejka" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Usuń z kolejki" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kolejka 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kolejka 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kolejka 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kolejka 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kolejka 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Pokaż w oddzielnym oknie" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Wstrzymaj wszystko" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Ś&ledź linki" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Gdy &katalog istnieje" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Gdy plik istnieje" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Gdy plik istnieje" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Anuluj" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Wiersz polecenia:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametry:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Ścieżka początkowa:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Konfiguruj" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Szyfruj" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Gdy plik istnieje" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopiuj datę/czas" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Praca w tle (oddzielne połączenie)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "twfxplugincopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Gdy plik istnieje" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Musisz podać uprawnienia administratora," #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "aby skopiować ten obiekt:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "aby utworzyć ten obiekt:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "aby usunąć ten obiekt:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "aby uzyskać atrybuty tego obiektu:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "aby utworzyć ten twardy link:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "aby otworzyć ten obiekt:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "aby zmienić nazwę tego obiektu:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "aby ustawić atrybuty tego obiektu:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "aby utworzyć ten link symboliczny:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Data wykonania" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Wysokość" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Szerokość" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Producent" #: uexifreader.rsmodel msgid "Camera model" msgstr "Model aparatu" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientacja" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Nie można odnaleźć tego pliku i pomóc w zweryfikowaniu ostatecznej kombinacji plików:\n" "%s\n" "\n" "Czy możesz go udostępnić i nacisnąć \"OK\", gdy będzie gotowy,\n" "lub naciśnij \"Anuluj\", aby kontynuować bez niego?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<lnk>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Anuluj szybki filtr" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Anuluj bieżącą operację" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Wprowadź nazwę pliku z rozszerzeniem, dla upuszczonego tekstu" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Format tekstu do importu" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Uszkodzone:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Ogólne:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Brakujące:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Błąd odczytu:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Pomyślne:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Wprowadź sumę kontrolną i wybierz algorytm:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Sprawdź sumę kontrolną" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Ogółem:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Czy chcesz wyczyścić filtry dla tego nowego wyszukiwania?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schowek nie zawiera żadnych ważnych danych paska narzędzi" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Wszystko;Aktywny Panel;Lewy Panel;Prawy Panel;Opercje na pliku;Konfiguracja;Sieć;Różne;Port równoległy;Drukuj;Zaznacz;Bezpieczeństwo;Schowek;FTP;Nawigacja;Pomoc;Okno;Linia poleceń;Narzędzia;Widok;Użytkownik;Zakładki;Sortowanie;Dziennik" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Posortowane starsze;Posortowane A-Z" #: ulng.rscolattr msgid "Attr" msgstr "Atryb." #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Roz." #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nazwa" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Wielkość" #: ulng.rsconfcolalign msgid "Align" msgstr "Wyrównywanie" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nagłówek" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Usuń" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Pola danych" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Przenieś" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Szerokość" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Dostosuj kolumny" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Konfiguruj skojarzenia plików" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potwierdzenie wiersza poleceń i parametrów" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopiuj (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Tryb ciemny" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Automatycznie;Włączony;Wyłączony" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Zaimportowany pasek narzędzi DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Zaimportowany pasek narzędi TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_UpuszczonyTekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_UpuszczonytekstHTML" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_UpuszczonyRTF" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Upuszczonyprostytekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_UpuszczonytekstUnicodeUTF16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_UpuszczonytekstUnicodeUTF8" #: ulng.rsdiffadds msgid " Adds: " msgstr "Dodanych:" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Porównywanie..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Usuniętych:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Dwa pliki są identyczne!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Pasujące:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Zmodyfikowane:" #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kodowanie" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Zakończenia wierszy" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Tekst jest identyczny, ale używane są następujące opcje:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Tekst jest identyczny, ale pliki są niezgodne!\n" "Znaleziono następujące różnice:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "P&rzerwij" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Wszystkie" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Dołącz" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomatyczna zmiana nazwy plików źródłowych" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "A&utomatyczna zmiana nazwy plików docelowych" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Anuluj" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Porównaj &wg zawartości" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Kontynuuj" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Dołącz" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Dołą&cz wszystkie" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Z&akończ program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&noruj" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnoruj wszystkie" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nie" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Żad&en" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Więcej &opcji>>" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Zastąp" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Zastąp wszys&tkie" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Zastąp wszystkie &większe" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Zastąp wszystkie &starsze" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Zastąp wszystkie &mniejsze" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Zmień &nazwę" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Wznów" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Po&nów" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Jako &Administrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Pomiń" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Po&miń wszystkie" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Odblokuj" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Tak" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiuj plik(i)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Przenieś plik(i)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "W&strzymaj" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Rozpocznij" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kolejka" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Prędkość: %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Prędkość: %s/s, pozostały czas: %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Format RTF;Format HTML;Format Unicode;Format tekstowy" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Wskaźnik wolnego miejsca na dysku" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<brak etykiety>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<brak nośnika>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Wewnętrzny edytor Double Commandera." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Przejdź do wiersza:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Przejdź do wiersza" #: ulng.rseditnewfile msgid "new.txt" msgstr "nowy.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nazwa pliku:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otwórz plik" #: ulng.rseditsearchback msgid "&Backward" msgstr "Do &tyłu" #: ulng.rseditsearchcaption msgid "Search" msgstr "Wyszukaj" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Do &przodu" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zamień" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "w zewnętrznym edytorze" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "w wewnętrznym edytorze" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Uruchom przez shell" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Uruchom przez terminal i zamknij" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Uruchom przez terminal i pozostaw otwarty" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" nie znaleziono w wierszu %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Nie zdefiniowano rozszerzenia przed poleceniem \"%s\". Zostanie zignorowane." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Lewa;Prawa;Aktywna;Nieaktywna;Obie;Żadna" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nie;Tak" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Wyeksportowane_z_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Zapytaj;Nadpisz;Pomiń" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Zapytaj;Dołącz;Pomiń" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Zapytaj;Nadpisz;Nadpisz starsze;Pomiń" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Zapytaj;Nie ustawiaj więcej;Ignoruj błędy" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Wszystkie pliki" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Pliki konfiguracyjne archiwizatora" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Pliki etykietek podpowiedzi DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Pliki ulubionych katalogów" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Pliki wykonywalne" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Pliki konfiguracyjne .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Starsze pliki DC .tab" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Pliki bibliotek" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Pliki wtyczek" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programy i biblioteki" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTR" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Pliki paska narzędzi TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Pliki paska narzędzi DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Pliki konfiguracyjne .xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Zdefiniuj szablon" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s poziom(y)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "wszędzie (nieograniczona głębokość)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "tylko aktualny katalog" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Katalog %s nie istnieje!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Znaleziono: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Zapisz szablon wyszukiwania" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nazwa szablonu:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Przeskanowano: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanowanie" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Znajdź pliki" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Czas skanowania:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Rozpocznij od" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Czcionka &konsoli" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Czcionka &edytora" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Czcionka przycisków funkcyjnych" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Czcionka &logów" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Czcionka główna" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Czcionka ścieżki" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Czcionka wyników wyszukiwania" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Czcionka paska stanu" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Czcionka menu widoku drzewa" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Czcionka &podglądu" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Czcionka przeglądarki &książek" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Wolne %s z %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s wolnych" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/czas dostępu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atrybuty" #: ulng.rsfunccomment msgid "Comment" msgstr "Komentarz" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Rozmiar skompresowany" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/czas utworzenia" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Rozszerzenie" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupa" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Zmień datę/czas" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/czas modyfikacji" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nazwa" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nazwa bez rozszerzenia" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Właściciel" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ścieżka" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Wielkość" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Oryginalna ścieżka" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Błąd podczas tworzenia twardego linku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "brak;Nazwa, a-z;Nazwa, z-a;Roz., a-z;Roz., z-a;Wielkość 9-0;Wielkość 0-9;Data 9-0;Data 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Ostrzeżenie! Przywrócenie pliku kopii zapasowej .hotlist, spowoduje usunięcie istniejącej listy i zastąpienie jej przez zaimportowaną.\n" "\n" "Czy na pewno chcesz kontynuować?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Okno dialogowe kopiuj/przenieś" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Różnice" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Okno dialogowe edycji komentarza" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Edytor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Znajdź pliki" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Główny" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Wielokrotna zmiana nazwy" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synchronizuj katalogi" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Lister" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Konfiguracja o tej nazwie już istnieje.\n" "Czy chcesz ją nadpisać?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Czy na pewno chcesz przywrócić domyślną?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Czy na pewno chcesz usunąć konfigurację \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopia z %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Wprowadź nową nazwę" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Należy zachować co najmniej jeden plik skrótu." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nowa nazwa" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Konfiguracja \"%s\" została zmodyfikowana.\n" "Czy chcesz ją teraz zapisać?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Brak skrótu z \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Wg nazwy polecenia;Wg klawisza skrótu (pogrupowane);Wg klawisza skrótu (po jednym w wierszu)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Nie można znaleźć odniesienia do domyślnego pliku bar" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Lista okien \"Znajdź pliki\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska odznaczania" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska zaznaczania" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maska wejściowa:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Widok kolumn o tej nazwie już istnieje." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Aby zmienić bieżącą edycję widoku kolmun, albo ZAPISAĆ, SKOPIOWAĆ lub USUNĄĆ obecną edycję" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Konfiguruj niestandardowe kolumny" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Wpisz nową nazwę kolumny niestandardowej" #: ulng.rsmenumacosservices msgid "Services" msgstr "Usługi" #: ulng.rsmenumacosshare msgid "Share..." msgstr "Udostępnij..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Działania" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Domyślnie>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Ósemkowo" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Utwórz skrót..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odłącz dysk sieciowy..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Edytuj" #: ulng.rsmnueject msgid "Eject" msgstr "Wysuń" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Wypakuj tutaj..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Mapuj dysk sieciowy..." #: ulng.rsmnumount msgid "Mount" msgstr "Zamontuj" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nowy" #: ulng.rsmnunomedia msgid "No media available" msgstr "Brak dostępnego nośnika" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otwórz" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otwórz z ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Inne..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Spakuj tutaj..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Przywróć" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortuj wg" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odmontuj" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Podgląd" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Wszystkie komendy wewnętrzne Double Commandera" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Opis: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatkowe parametry wiersza poleceń archiwizatora:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Czy chcesz, aby ująć między cudzysłowami?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Nieprawidłowy CRC32 dla pliku wynikowego:\n" "\"%s\"\n" "\n" "Czy mimo to chcesz zachować uszkodzony plik wynikowy?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Czy na pewno chcesz anulować tę operację?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nie można skopiować/przenieść pliku \"%s\" do niego samego!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Nie można skopiować pliku specjalnego %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Nie mogę usunąć katalogu %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Nie można nadpisać katalogu \"%s\" nie-katalogiem \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Zmiana bieżącego katalogu na \"%s\" nie powiodła się!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Usunąć nieaktywne zakładki?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Zakładka (%s) jest zablokowana! Zamknąć mimo to?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Potwierdzenie parametru" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Nie znaleziono polecenia! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Czy na pewno chcesz zakończyć?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Plik %s został zmieniony. Czy chcesz skopiować go wstecz?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Nie można skopiować wstecz - czy chcesz zachować zmieniony plik?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Skopiować %d wybranych plików/katalogów?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Skopiować wybrane \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Utwórz nowy typ pliku \"%s plików\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Podaj położenie i nazwę pliku do zapisania plików Paska Narzędzi DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Niestandardowa akcja" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Usunąć częściowo skopiowany plik?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Czy na pewno chcesz usunąć %d zaznaczonych plików/katalogów?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Czy na pewno chcesz usunąć do kosza %d zaznaczonych plików/katalogów?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Czy na pewno chcesz usunąć zaznaczony \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Czy na pewno chcesz usunąć zaznaczony \"%s\" do kosza?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nie można usunąć \"%s\" do kosza! Usunąć bezpośrednio?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Dysk jest niedostępny." #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Podaj nazwę niestandardowej akcji:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Podaj rozszerzenie:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Podaj nazwę:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Wprowadź nazwę nowego typu pliku, aby utworzyć rozszerzenie \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Błąd CRC w archiwum danych" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dane są nieprawidłowe" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nie można połączyć z serwerem: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nie można skopiować pliku %s do %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Nie można przenieść katalogu %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Nie można przenieść pliku %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Katalog o nazwie \"%s\" już istnieje." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Data %s nie jest obsługiwana" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Katalog %s już istnieje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Przerwane przez użytkownika." #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Błąd zamknięcia pliku" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nie można utworzyć pliku" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nie ma więcej plików w archiwum" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nie można otworzyć pliku" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Błąd odczytu z pliku" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Błąd zapisu do pliku" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Nie można utworzyć katalogu %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Błędny link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nie znaleziono plików" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Za mało pamięci" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcja nie jest obsługiwana!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Błąd w poleceniu menu kontekstowego" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Błąd podczas ładowania konfiguracji" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Błąd składni w wyrażeniu regularnym!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nie można zmienić nazwy pliku %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nie można zapisać powiązania!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nie można zapisać pliku" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nie można ustawić atrybutów dla \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nie można ustawić daty/czasu dla \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nie można ustawić właściciela/grupy dla \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Nie można ustawić uprawnień dla \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Nie można ustawić atrybutów rozszerzonych dla \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Za mały bufor" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Zbyt wiele plików do spakowania" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Nieznany format archiwum" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Plik wykonywalny: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Stan zakończenia:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Czy na pewno chcesz usunąć wszystkie wpisy z Twoich Ulubionych Zakładek? (Nie jest możliwe \"cofnięcie\" operacji do tej akcji!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Przeciągnij tutaj inne wpisy" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Podaj nazwę dla tego wpisu ulubionych zakładek:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Zapisywanie nowych wpisów ulubionych zakładek" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Liczba ulubionych zakładek wyeksportowanych pomyślnie: %d z %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Domyślne dodatkowe ustawienie do zapisywania historii katalogów dla nowych ulubionych zakładek:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Liczba plików zaimportowanych pomyślnie: %d z %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Starsze zakładki zaimportowane" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Wybierz plik(i) .tab do zaimportowania (może być więcej niż jeden!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Ostatnia modyfikacja zakładek została już zapisana. Czy chcesz je zapisać przed kontynuowaniem?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Zachowaj zapisaną historię katalogów w ulubionych zakładkach:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nazwa podmenu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Spowoduje to załadowanie Ulubionych Zakładek: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Zapisz bieżące zakładki na istniejącym wpisie ulubionych zakładek" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Plik %s został zmieniony, czy zapisać?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajtów, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Zastąp:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Plik o nazwie %s istnieje, czy zastąpić?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Plikiem:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Plik \"%s\" nie został znaleziony." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktywne operacje na plikach" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Niektóre operacje na plikach nie zostały zakończone. Zamknięcie Double Commandera może spowodować utratę danych." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Długość nazwy docelowej (%d) jest większa niż %d znaków!\n" "%s\n" "Większość programów nie będzie mogła uzyskać dostępu do pliku/katalogu z długą nazwą!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Plik %s jest oznaczony jako tylko do odczytu/ukryty/systemowy. Usunąć mimo to?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Czy na pewno chcesz ponownie załadować bieżący plik i utracić zmiany?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Rozmiar pliku \"%s\" jest zbyt duży dla docelowego systemu plików!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Katalog o nazwie %s istnieje, czy dołączyć?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Iść za linkiem \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Wybierz format tekstu do zaimportowania" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Dodaj %d wybranych katalogów" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj wybrany katalog:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj bieżący katalog:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Wykonaj polecenie" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguracja ulubionych katalogów" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Czy na pewno chcesz usunąć wszystkie wpisy z listy ulubionych katalogów? (Tej operacji nie można \"cofnąć\"!" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Spowoduje to wykonanie następujacego polecenia:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "To jest ulubiony folder o nazwie " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Spowoduje to zmianę aktywnej ramki do następującej ścieżki" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "I zmień nieaktywne ramki dla następującej ścieżki:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Błąd tworzenia kopii zapasowej wpisów..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Błąd eksportowania wpisów..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Eksportuj wszystko!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksportuj ulubione katalogi - wybierz pozycje które chcesz eksportować" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Eksportuj wybrane" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importuj wszystko!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importuj ulubione katalogi - Wybierz pozycje, które chcesz importować" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importuj wybrane" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Ś&cieżka" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Znajdź plik \".hotlist\" do zaimportowania" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nazwa ulubionego katalogu" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Liczba nowych wpisów: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nie wybrano nic do eksportu!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Ścieżka ulubionego katalogu" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Dodaj ponownie wybrany katalog: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Dodaj ponownie bieżący katalog: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Wprowadź lokalizację i nazwę pliku ulubionych katalogów do przywrócenia" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Polecenie:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(koniec podmenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "&Nazwa menu:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Nazwa:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separator)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nazwa podmenu" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Docelowy ulubiony katalog" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Ustal jeśli chcesz, aby w aktywnej ramce były sortowane w określonej kolejności po zmianie katalogu" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Ustal jeśli chcesz, aby w nie aktywnej ramce były sortowane w określonej kolejności po zmianie katalogu" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Niektóre funkcje do wyboru odpowiedniej ścieżki względnej, bezwzględnej, specjalnych folderów systemu Windows, itp." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Liczba zapisanych wpisów: %d\n" "\n" "Nazwa pliku kopii zapasowej: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Liczba wyeksportowanych wpisów: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Czy chcesz usunąć wszystkie elementy wewnątrz podmenu [%s]?\n" "Odpowiedź NIE usunie tylko ograniczniki menu, ale pozostawi element wewnątrz podmenu." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Wprowadź lokalizację i nazwę pliku, w którym zapisać plik ulubionych katalogów" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Nieprawidłowa wynikowa długość pliku dla pliku : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Włoż następny dysk lub coś podobnego.\n" "\n" "Pozwoli to na zapisanie tego pliku:\n" "\"%s\"\n" "\n" "Liczba bajtów pozostałych do zapisania: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Błąd w wierszu poleceń" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nieprawidłowa nazwa pliku" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Nieprawidłowy format pliku konfiguracyjnego" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Nieprawidłowa liczba szesnastkowa: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Nieprawidłowa ścieżka" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Ścieżka %s zawiera niedozwolone znaki." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "To nie jest prawidłowa wtyczka!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ta wtyczka jest zbudowana dla Double Commander %s.%sNie będzie działać z Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Nieprawidłowe cytowanie" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Nieprawidłowy wybór." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Wczytywanie listy plików..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Zlokalizuj plik konfiguracyjny TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Zlokalizuj plik wykonywalny TC (totalcmd.exe lub totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopiowanie pliku %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Kasowanie pliku %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Błąd: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Uruchom zewnętrzny" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Wynik zewnętrzny" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Rozpakowywanie pliku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informacja: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Tworzenie twardego linku %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Tworzenie katalogu %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Przenoszenie pliku %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Archiwizowanie do pliku %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Zamykanie programu" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Uruchamianie programu" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Usunięcie katalogu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Wykonano: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Tworzenie linku symbolicznego %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testowanie integralności pliku %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Wyczyść plik %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Wyczyść katalog %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hasło główne" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Wprowadź hasło główne:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nowy plik" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Kolejny wolumin zostanie rozpakowany" #: ulng.rsmsgnofiles msgid "No files" msgstr "Brak plików" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Brak wybranych plików." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Brak miejsca na dysku. Kontynuować?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Brak miejsca na dysku. Ponowić próbę?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Pliku %s nie można skasować" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nie zaimplementowano." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Obiekt nie istnieje!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Nie można ukończyć akcji, ponieważ plik jest otwarty w innym programie:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Poniżej znajduje się podgląd. Możesz przesuwać kursor i wybierać pliki, aby natychmiast uzyskać rzeczywisty wygląd różnych ustawień." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Hasło:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Hasła są różne!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Wprowadź hasło:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Hasło (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Podaj ponownie hasło dla weryfikacji:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Usuń %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Wzorzec \"%s\" już istnieje. Zastąpić?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Czy na pewno chcesz usunąć ustawienie wstępne \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problem z wykonaniem polecenia (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Nazwa pliku dla przeciągniętego tekstu:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Udostępnij ten plik. Ponowić próbę?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Podaj nową przyjazną nazwę dla tych Ulubionych Zakładek" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Podaj nową nazwę dla tego menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Zmienić nazwę/przenieść %d wybranych plików/katalogów?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Zmienić nazwę/przenieść wybrany \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Czy chcesz zamienić ten tekst?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Proszę ponownie uruchomić Double Commandera, aby zastosować zmiany." #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "BŁĄD: Problem z ładowaniem pliku biblioteki Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Wybierz, aby dodać rozszerzenie typu pliku \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Wybrane: %s z %s, plików: %d z %d, katalogów: %d z %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Wybierz plik wykonywalny dla" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Proszę wybrać tylko sumy kontrolne plików!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Wybierz lokalizację kolejnego woluminu" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Ustaw etykietę woluminu" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Specjalne katalogi" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodaj ścieżkę z aktywnej ramki" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodaj ścieżkę z nieaktywnej ramki" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Przeglądaj i użyj wybranej ścieżki" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Użyj zmiennej środowiskowej..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Idź do specjalnej ścieżki Double Commandera..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Idź do zmiennej środowiskowej ..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Idź do innego specjalnego folderu Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Idź do specjalnego folderu Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Utwórz względną do ścieżki ulubionego katalogu" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Utwórz ścieżkę bezwzględną" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Utwórz względną do specjalnej ścieżki Double Commandera..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Utwórz względną do zmiennej środowiskowej..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Utwórz względną do specjalnego folderu Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Utwórz względną do innego folderu specjalnego Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Użyj specjalnej scieżki Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Użyj scieżki ulubionego katalogu" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Użyj innego specjalnego folderu Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Użyj specjalnego folderu Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Ta zakładka (%s) jest zablokowana! Otworzyć katalog w innej zakładce?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Zmień nazwę zakładki" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nazwa nowej zakładki:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ścieżka docelowa:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Błąd! Nie można znaleźć pliku konfiguracji TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Błąd! Nie można znaleźć konfiguracji pliku wykonywalnego TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Błąd! TC jest nadal uruchomiony, a powinien być zamknięty dla tej operacji.\n" "Zamknij go i naciśnij przycisk OK lub naciśnij przycisk ANULUJ, aby przerwać." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Błąd! Nie można znaleźć żądanego folderu wyjściowego paska narzędzi TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Wprowadź lokalizację i nazwę pliku, w którym chcesz zapisać plik paska narzędzi TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Wbudowane okno terminalu jest wyłączone. Czy chcesz je włączyć?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "OSTRZEŻENIE: Zakończenie procesu może spowodować niepożądane skutki, w tym utratę danych i niestabilność systemu. Proces nie będzie miał szansy, aby zapisać jego stan lub dane, zanim zostanie zakończony. Czy na pewno chcesz zakończyć proces?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Czy chcesz przetestować wybrane archiwa?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" jest teraz w schowku" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Rozszerzenie wybranego pliku nie znajduje się w rozpoznawanych typach plików" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Zlokalizuj plik \".toolbar\" do zaimportowania" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Zlokalizuj plik \".BAR\" do zaimportowania" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Wprowadź położenie i nazwę paska narzędzi do przywrócenia" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Zapisano!\n" "Nazwa paska narzędzi: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Wybrano zbyt wiele plików." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Nieokreślony" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "BŁĄD: Nieoczekiwane użycie menu widoku drzewa!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<BRAK ROZ.>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<BRAK NAZWY>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nazwa użytkownika:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nazwa użytkownika (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "WERYFIKACJA:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Czy chcesz zweryfikować wybrane sumy kontrolne?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Plik docelowy jest uszkodzony, niezgodność sumy kontrolnej!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etykieta woluminu:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Proszę wpisać rozmiar części:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Czy chcesz skonfigurować lokalizację biblioteki Lua?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Wyczyścić %d wybranych plików/katalogów?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Wyczyścić \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "z" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Nieprawidłowe hasło!\n" "Spróbuj ponownie!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Zmienić automatycznie nazwy na \"nazwa (1).roz\", \"nazwa (2).roz\" itp.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Licznik" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Data" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Nazwa ustawienia wstępnego" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Zdefiniuj nazwę zmiennej" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Zdefiniuj wartość zmiennej" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Wprowadź nazwę zmiennej" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Wprowadź wartość dla zmiennej \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Zignoruj, po prostu zapisz jako [Ostatnie];Monituj użytkownika o potwierdzenie, jeśli to zapiszemy;Zapisz automatycznie" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Rozszerzenie" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nazwa" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez zmian;WIELKIMI ZNAKAMI;małymi znakami;Pierwsza wielka;Pierwszy Znak Każdego Słowa Wielki;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "Ostatnio używane" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Ostatnie maski poniżej [Ostatniego] ustawienia wstępnego;Ostatnie ustawienie wstępne;Nowe świeże maski" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Wielokrotna zmiana nazwy" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Znak na pozycji x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Znaki na pozycjach od x do y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Data ukończenia" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Czas zakończenia" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Licznik" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dzień" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Dzień (2 cyfry)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Dzień tygodnia (krótki, np. \"pon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Dzień tygodnia (długi, np. \"poniedziałek\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Rozszerzenie" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Pełna nazwa pliku ze ścieżką i rozszerzeniem" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Pełna nazwa pliku, znak od pozycji x do y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "Identyfikator GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Godzina" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Godzina (2 cyfry)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuta" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuty (2 cyfry)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Miesiąc" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Miesiąc (2 cyfry)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nazwa miesiąca (krótka, np. \"sty\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nazwa miesiąca (długa, np. \"styczeń\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nazwa" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Folder(y) nadrzędne" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekunda" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekundy (2 cyfry)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Zmienna w locie" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Rok (2 cyfry)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Rok (4 cyfry)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Wtyczki" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Zapisz ustawienie wstępne jako" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Nazwa ustawienia wstępnego już istnieje. Zastąpić?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Wprowadź nową nazwę ustawienia wstępnego" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Ustawienie wstępne \"%s\" zostało zmodyfikowane.\n" "Czy chcesz je teraz zapisać?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Ustawienia wstępne sortowania" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Czas" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Ostrzeżenie, zduplikowane nazwy!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Plik zawiera błędną liczbę wierszy: %d, powinno być %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Zachowaj;Wyczyść;Pytaj" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Brak równoważnego wewnętrznego polecenia" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Przepraszamy, brak okna \"Znajdź pliki\"..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Przepraszamy, brak innych okien \"Znajdź pliki\" do zamknięcia i zwolnienia z pamięci" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Rozwój" #: ulng.rsopenwitheducation msgid "Education" msgstr "Nauka" #: ulng.rsopenwithgames msgid "Games" msgstr "Gry" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Sieć" #: ulng.rsopenwithoffice msgid "Office" msgstr "Biuro" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Pozostałe" #: ulng.rsopenwithscience msgid "Science" msgstr "Nauka" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Ustawienia" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Akcesoria" #: ulng.rsoperaborted msgid "Aborted" msgstr "Przerwane" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Obliczanie sumy kontrolnej" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Obliczanie sumy kontrolnej dla \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Obliczanie sumy kontrolnej z \"%s\"" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Obliczanie" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Obliczanie \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Łączenie" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Łączenie plików w \"%s\" do \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiowanie" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiowanie z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiowanie \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Tworzenie katalogu" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Tworzenie katalogu \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Usuwanie" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Usuwanie w \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Usuwanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Wykonywanie" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Wykonywanie \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Wyodrębnianie" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Wyodrębnianie z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Zakończony" #: ulng.rsoperlisting msgid "Listing" msgstr "Lista" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Lista \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Przenoszenie" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Przenoszenie z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Przenoszenie \"%s\" do \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nie uruchomiony" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakowanie" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakowanie z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Pakowanie \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Wstrzymane" #: ulng.rsoperpausing msgid "Pausing" msgstr "Wstrzymywanie" #: ulng.rsoperrunning msgid "Running" msgstr "Uruchomione" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Ustawianie właściwości" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Ustawianie właściwości w \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Ustawianie właściwości \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dzielenie" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Dzielenie \"%s\" do \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Uruchamianie" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zatrzymane" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zatrzymywanie" #: ulng.rsopertesting msgid "Testing" msgstr "Testowanie" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Testowanie w \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Testowanie \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Weryfikowanie sumy kontrolnej" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Weryfikowanie sumy kontrolnej w \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Weryfikowanie sumy kontrolnej z \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Oczekiwanie na dostęp do źródłowego pliku" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Oczekiwanie na odpowiedź użytkownika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Czyszczenie" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Czyszczenie w \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Czyszczenie \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Pracuje" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Dodaj na &początku;Dodaj na końcu;Inteligentne dodawanie" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Dodawanie nowego typu pliku etykietek podpowiedzi" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Aby zmienić aktualną konfigurację archiwum, ZASTOSUJ lub USUŃ bieżącą edycję" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Zależnie od trybu, dodatkowe polecenie" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Dodaj, jeśli nie jest puste" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Plik archiwum (długa nazwa)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Wybierz plik wykonywalny archiwizatora" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Plik archiwum (krótka nazwa)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Zmień kodowanie listy archiwów" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Czy na pewno chcesz usunąć: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Eksportowana konfiguracja archiwizatora" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "poziom błędu" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Eksportuj konfigurację archiwizatora" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport %d elementów do pliku \"%s\" zakończony." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Wybierz te, które chcesz wyeksportować" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Lista plików (długie nazwy)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Lista plików (krótkie nazwy)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importuj konfigurację archiwizatora" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import %d elementów z pliku \"%s\" zakończony." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Wybierz plik do importowania konfiguracji archiwizatora" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Wybierz te, które chcesz zaimportować" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Używaj tylko nazwy, bez ścieżki" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Używaj tylko ścieżki, bez nazwy" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Program archiwum (długa nazwa)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Program archiwum (krótka nazwa)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Cytuj wszystkie nazwy" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Cytuj nazwy ze spacjami" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Nazwa pojedynczego pliku do przetworzenia" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Docelowy podkatalog" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Użyj kodowania ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Użyj kodowania UTF8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Podaj lokalizację i nazwę pliku, do zapisania konfiguracji archiwizatora" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nazwa rodzaju archiwum:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Skojarz wtyczkę \"%s\" z:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Pierwszej;Ostatniej;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klasyczny, starszy porządek;Kolejność alfabetyczna (ale wciąż pierwszy język)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Pełne rozwinięcie;Pełne zwinięcie" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Ramka aktywnego panelu po lewej, nieaktywnego po prawej (starsze);Lewa ramka panelu po lewej, prawa po prawej" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Wpisz rozszerzenie" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Dodaj na początku;Dodaj na końcu;Sortowanie alfabetyczne" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "oddzielnym oknie;zminimalizowanym oddzielnym oknie;panelu operacji" #: ulng.rsoptfilesizefloat msgid "float" msgstr "dynamicznie" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Skrót %s do cm_Delete zostanie dodany, a więc może zostać używany do odwracania tego ustawienia." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Dodaj klawisz skrótu dla %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj skrót" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nie można ustawić skrótu" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Zmień skrót" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Polecenia" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Skrót %s do cm_Delete ma parametr, który zastępuje to ustawienie. Czy chcesz zmienić ten parametr, aby używać ustawienia globalnego?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Skrót %s do cm_Delete musi mieć parametr zmieniajacy trafność skrótu %s. Czy chcesz zmienić?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Edytuj skrót klawiszowy do %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Popraw parametr" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Skrót klawiszowy" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Skróty klawiszowe" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<brak>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametry" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Ustaw skrót do usunięcia pliku" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Dla tego ustawienia do pracy ze skrótem %s, skrót %s musi być przypisany do cm_Delete ale jest już przypisany do %s. Czy chcesz to zmienić?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Skrót %s dla cm_Delete to skrót sekwencji, dla którego nie można przypisać skrót klawiszowy z odwróconym Shift. To ustawienie może nie działać." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Skrót jest używany" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Skrót %s jest już używany." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Zmienić na %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "używany przez %s w %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "używany dla tego polecenia ale z różnymi parametrami" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Archiwizatory" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Automatyczne odświeżanie" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Zachowanie" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Krótki" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Kolory" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Kolumny" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Konfiguracja" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Niestandardowe kolumny" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Ulubione katalogi" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Dodatkowe ulubione katalogi" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Przeciągnij i upuść" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Przycisk listy dysków" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Ulubione zakładki" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Dodatkowe skojarzenia plików" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Skojarzenia plików" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nowy" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operacje na plikach" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Panele plików" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Wyszukiwanie pliku" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Widoki plików" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Dodatkowe widoki plików" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy plików" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Zakładki katalogów" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Dodatkowe zakładki folderów" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Czcionki" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Wyróżnienia" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Skróty klawiszowe" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Lista ignorowanych" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klawisze" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Język" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Układ" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Dziennik" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Różne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mysz" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Wielokrotna zmiana nazwy" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Opcje zostały zmienione w \"%s\"\n" "\n" "Czy chcesz zapisać modyfikacje?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Wtyczki" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Szybkie wyszukiwanie/filtrowanie" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Pasek narzędzi" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Dodatkowy pasek narzędzi" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Środkowy pasek narzędzi" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Narzędzia" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Etykietki podpowiedzi" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Menu widoku drzewa" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Kolory menu widoku drzewa" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Brak;Wiersz poleceń;Szybkie wyszukiwanie;Szybki filtr" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Lewy przycisk myszy;Prawy przycisk myszy;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na górze listy plików;po katalogach (jeśli katalogi są sortowane przed plikami);w posortowanej pozycji;na dole listy plików" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Spersonalizowany dynamiczny;Spersonalizowany bajt;Spersonalizowany kilobajt;Spersonalizowany megabajt;Spersonalizowany gigabajt;Spersonalizowany terabajt" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Wtyczka %s jest już przypisana do następujących rozszerzeń:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "W&yłącz" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Włącz" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktywna" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Opis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nazwa pliku" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Wg rozszerzenia" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Wg wtyczki" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nazwa" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Sortowanie wtyczek WCX jest możliwe tylko przy wyświetlaniu wtyczek wg rozszerzenia!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Zarejestrowany dla" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Wybierz plik biblioteki Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Zmienianie nazwy pliku etykietek podpowiedzi" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Uwzględniaj;&Nie uwzględniaj" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Pliki;&Katalogi;Pliki &i katalogi" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ukryj panel filtru gdy brak pasujących;Zachowaj zapisane ustawienia zmian dla następnej sesji" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nie uwzględniaj wielkości liter;zgodnie z ustawieniami regionalnymi (aAbBcC);napierw wielkie, a następnie małe litery (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortuj według nazwy i pokaż pierwsze;sortuj jak pliki i pokaż pierwsze;sortuj jak pliki" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetycznie, uwzględniając akcenty;Alfabetyczne sortowanie ze znakami specjalnymi;Naturalne sortowanie: alfabetycznie i liczbowo;Naturalne sortowanie ze znakami specjalnymi" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "U góry;Na dole;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparator;Polecenie &wewnętrzne;Polecenie &zewnętrzne;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Aby zmienić aktualną konfigurację etykietek podpowiedzi, ZASTOSUJ lub USUŃ bieżącą edycję" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Nazwa pliku etykietek podpowiedzi:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" już istnieje!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Czy na pewno chcesz usunąć: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Wyeksportowany plik konfiguracji etykietek podpowiedzi" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Eksportuj plik konfiguracji etykietek podpowiedzi" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksportowanie %d elementów do pliku \"%s\" zostało ukończone." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Wybierz te, które chcesz wyeksportować" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importuj plik konfiguracji etykietek podpowiedzi" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importowanie %d elementów z pliku \"%s\" zostało ukończone." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Wybierz plik, aby zaimportować konfigurację etykietek podpowiedzi" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Wybierz te, które chcesz zaimportować" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Wprowadź lokalizację i nazwę pliku do zapisania konfiguracji etykietek podpowiedzi" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Nazwa pliku etykietek podpowiedzi" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Starsza wersja DC - Kopiuj (x) nazwapliku.roz;Windows - nazwapliku (x).roz;Inne - nazwapliku(x).roz" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "nie zmieniaj pozycji;użyj tego samego ustawienia dla nowych plików;do posortowanej pozycji" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Z pełną ścieżką bezwzględną;Ścieżka względna do %COMMANDER_PATH%;Względem następujących" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "zawiera(z uwzględnieniem wielkości liter)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "zawiera" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(z uwzględnieniem wielkości liter)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Nie znaleziono pola \"%s\" !" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!zawiera(z uwzględnieniem wielkości liter)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!zawiera" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(z uwzględnieniem wielkości liter)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!wyrażenia regularne" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Nie znaleziono wtyczki \"%s\" !" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "wyrażenia regularne" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Jednostka \"%s\" nie została znaleziona dla pola \"%s\" !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Pliki: %d, foldery: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nie można zmienić praw dostępu dla \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nie można zmienić właściciela dla \"%s\"" #: ulng.rspropsfile msgid "File" msgstr "Plik" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Katalog" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Wiele typów" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nazwany strumień" #: ulng.rspropssocket msgid "Socket" msgstr "Gniazdo" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Specjalne urządzenie blokowe" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Specjalne urządzenie wirtualne" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Link symboliczny" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Nieznany typ" #: ulng.rssearchresult msgid "Search result" msgstr "Wynik wyszukiwania" #: ulng.rssearchstatus msgid "SEARCH" msgstr "WYSZUKAJ" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<nienazwany szablon>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Przeszukanie pliku za pomocą wtyczki DSX jest już w toku.\n" "Przed uruchomieniem nowego musisz zamknąć bieżące." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Przeszukanie pliku za pomocą wtyczki WDX jest już w toku.\n" "Przed uruchomieniem nowego musisz zamknąć bieżące." #: ulng.rsselectdir msgid "Select a directory" msgstr "Wybierz katalog" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Najnowszy;Najstarszy;Największy;Najmniejszy;Pierwszy w grupie;Ostatni w grupie" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Wybierz okno" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Pokaż pomoc dla %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Wszystko" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategoria" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolumna" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Polecenie" #: ulng.rssimpleworderror msgid "Error" msgstr "Błąd" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Niepowodzenie!" #: ulng.rssimplewordfalse msgid "False" msgstr "Fałsz" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Nazwa pliku" #: ulng.rssimplewordfiles msgid "files" msgstr "pliki" #: ulng.rssimplewordletter msgid "Letter" msgstr "Litera" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametr" #: ulng.rssimplewordresult msgid "Result" msgstr "Wynik" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Powodzenie!" #: ulng.rssimplewordtrue msgid "True" msgstr "Prawda" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Zmienna" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Folder roboczy" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajty" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabajty" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobajty" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabajty" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajty" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Plików: %d, Katalogów: %d, Rozmiar: %s (%s bajtów)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nie można utworzyć katalogu docelowego!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nieprawidłowy format wielkości pliku!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Pliku nie da się podzielić!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Liczba części jest większa niż 100! Czy chcesz kontynuować?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatycznie;1457664B - 3.5\" Wysoka gęstość 1.44M;1213952B - 5.25\" Wysoka gęstość 1.2M;730112B - 3.5\" Podwójna gęstość 720K;362496B - 5.25\" Podwójna gęstość 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Wybierz katalog:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Tylko podgląd" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Inne" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Na marginesie" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Płaski" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Ograniczony" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Prosty" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fantastyczny" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Cudowny" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Ogromny" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Wybierz katalog z historii katalogów" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Wybierz ulubione zakładki" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Wybierz polecenie z historii listy poleceń" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Wybierz czynność z głównego menu" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Wybierz czynność z głównego paska narzędzi" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Wybierz katalog z ulubionego katalogu:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Wybierz katalog z pliku widoku historii" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Wybierz plik lub katalog" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Błąd przy tworzeniu linku symbolicznego." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Domyślny tekst" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Zwykły tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nie rób nic;Zamknij zakładkę;Dostęp do ulubionych zakładek;Menu kontekstowe zakładek" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Dzień (dni)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Godzin(y)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(y)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Miesiąc(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(y)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Tydzień (tygodnie)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok (Lata)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Zmień nazwę ulubionych zakładek" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Zmień nazwę podmenu ulubionych zakładek" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Różnice" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Edytor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Błąd przy otwieraniu porównywania" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Błąd przy otwieraniu edytora" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Błąd przy otwieraniu terminalu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Błąd przy otwieraniu podglądu" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Domyślne ustawienia systemu;1 s;2 s;3 s;5 s;10 s;30 s;1 min;Nigdy nie ukrywaj" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Połącz etykietki podpowiedzi DC i systemowych, najpierw DC (starsza wersja);Połącz etykietki podpowiedzi DC i systemowych, najpierw systemowe;Pokaż etykietki podpowiedzi DC, o ile to możliwe, a gdy nie systemowych;Pokaż tylko etykietki podpowiedzi DC;Pokaż tylko etykietki podpowiedzi systemowych" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Lister" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Zgłoś ten błąd do narzędzia śledzenia błędów wraz z opisem wcześniejszych działań i następującym plikiem:%sNaciśnij %s, aby kontynuować lub %s, aby przerwać działanie programu." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Oba panele, z aktywnego do nieaktywnego" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Oba panele, od lewej do prawej" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Ścieżka panelu" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Każdą nazwę należy ująć w nawiasach lub w czym chcesz" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Tylko nazwa pliku, bez rozszerzenia" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Pełna nazwa pliku (ścieżka+nazwa pliku)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Pomoc ze zmiennymi \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Poprosi użytkownika o podanie parametru z domyślną sugerowaną wartością" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Ostatni katalog ścieżki panelu" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Ostatni katalog ścieżki pliku" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Lewy panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Tymczasowa nazwa pliku listy nazw plików" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Tymczasowa nazwa pliku listy pełnych nazw plików (ścieżka+nazwa pliku)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Nazwy plików na liście w UTF-16 z BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Nazwy plików na liście w UTF-16 z BOM, wewnątrz cudzysłowów" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Nazwy plików na liście w UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Nazwy plików na liście w UTF-8, wewnatrz cudzysłowów" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Tymczasowy nazwa pliku listy nazw plików ze ścieżką względną" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Tylko rozszerzenie pliku" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Tylko nazwa pliku" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Inny przykład tego, co jest możliwe" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Ścieżka z końcowym separatorem" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Od tego miejsca do końca linii wskaźnik zmiennej procentowej jest znakiem \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Zwraca znak procentu" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Od tego miejsca do końca wiersza wskaźnik zmiennej procentowej powraca do znaku \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Poprzedź każdą nazwę \"-a \" lub czym chcesz" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Pytaj użytkownika o parametr;Proponuj wartość domyślną]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nazwa pliku ze ścieżką względną" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Prawy panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Pełna ścieżka drugiego wybranego pliku w prawym panelu" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Pokaż poprzednio wykonane polecenie" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Prosta wiadomość]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Spowoduje wyświetlenie prostego komunikatu" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktywny panel (źródło)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Nieaktywny panel (cel)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Nazwy plików będą podane tutaj (domyślnie)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Polecenie zostanie wykonane w terminalu, który następnie pozostanie otwarty" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Ścieżki będą miały ogranicznik końcowy" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Nazwy plików nie będą tutaj podane" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Polecenie zostanie wykonane w terminalu, który następnie zostanie zamknięty" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Ścieżki nie będą miały ogranicznika końcowego (domyślnie)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Sieć" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Kosz" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Wewnętrzna przeglądarka Double Commandera." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Zła jakość" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodowanie" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Typ obrazu" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nowy rozmiar" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nie znaleziono!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Ołówek;Prostokąt;Elipsa" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "z zewnętrzną przeglądarką" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "z wewnętrzną przeglądarką" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Liczba zamian: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nie było zamian." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Brak konfiguracji o nazwie \"%s\"" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.nn.po�����������������������������������������������������������0000644�0001750�0000144�00001405560�15104114162�017273� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Jostein Skjelstad <askjelstad@mac.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2020-06-09 14:37+0200\n" "Last-Translator: Jostein Skjelstad <jskjelstad@icloud.com>\n" "Language-Team: Norsk (nynorsk) <askjelstad@mac.com>\n" "Language: nn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Norsk-nn\n" "X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Samanliknar... %d%% (ESC for å avbryta)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Høgre: Slett %d file(r)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Filer funne: %d (Identiske: %d, Ulike: %d, Unike venstre: %d, Unike høgre: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Venstre til høgre: Kopiér %d fil(er), totalt: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Høgre til venstre: Kopiér %d fil(er), totalt: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vél mal..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Kontrollér ledig plass" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Kopiér attributt" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "&Kopiér eigarskap" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "&Kopiér skrive/leserettar" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Kopiér dato/tid" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "&Korrigér linkar" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "&Fjern skrivesperre" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Utelat tomme mapper" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Følg linkar" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservér plass" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Verifisér" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Kva når tid, attributt, mm. på fila ikkje kan innstillast." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Bruk filmal" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "&Når mappa finst frå før" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "&Når fila finst frå før" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "&Når eigenskapar ikkje kan innstillast" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<utan mal>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiér til utklipp" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Bygg" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Nettside:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisjon" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versjon" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Nullstill" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Vél attributt" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arkiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "&Komprimert" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mappe" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Kryptert" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skjult" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "&Skrivesperra" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Glissen" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolsk link" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&System" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Mellombels" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-attributt" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Generelle attributt" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigar" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utføra" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lesa" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "&Som tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriva" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Testprogram" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Testprogram data storleik: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Tid (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Fart (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Kontrollsummér..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Opn kontrollsumfil etter at jobb er utført" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Opprett separat kontrollsumfil for kvar fil" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Lagr kontrollsum-fil(er) som:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifisér kontrollsum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kodar" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Legg til" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Kopl opp" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Slett" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Koplingsadministrator" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Kopla til:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Sett i kø" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Innstillingar" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Lagr innstillingane som standard" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiér fil(er)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Lagr omtale" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Fil/mappe-kommmentar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Redigér kommentar for:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Koding:" #: tfrmdescredit.lblfilename.caption #, fuzzy msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samanlikn automatisk" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "&Binær modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Avbryt" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Avbryt" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiér blokk mot &høgre" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiér blokk mot &høgre" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiér blokk mot &venstre" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiér blokk mot &venstre" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lim inn" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Gjenta" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Gjenta" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Markér alt" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Angr" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Angr" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Avslutt" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Finn" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Finn" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Finn neste" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Finn forrige" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Erstatt" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Erstatt" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "&Første skilnad" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Første skilnad" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorér skilnad på STORE og små bokstavar" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorér blanke" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Felles rulling" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "&Siste skilnad" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "&Siste skilnad" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Linjeskilnader" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "&Neste skilnad" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "&Neste skilnad" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Opn venstre..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Opn høgre..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Farg bakgrunnen" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "&Forrige skilnad" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "&Forrige skilnad" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Gjeninnles" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Gjeninnles" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Lagr" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Lagr " #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Lagr som..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Lagr som" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Lagr venstre" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Lagr venstre" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Lagr venstre som..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Lagr venstre som..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Lagr høgre" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Lagr høgre" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Lagr høgre som..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Lagr høgre som..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Samanlikn" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Samanlikn" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kodar" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kodar" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Samanlikn innhald" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Venstre" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Høgre" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Handlingar" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Kodar" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Innstillingar" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Legg til ny snarveg til sekvens" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Fjern siste snarveg frå sekvens" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Vél snarveg frå lista over ledige tastar" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Bare for desse styringselementa" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (kvar i eiga linje):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Snarvegar:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Om" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Oppsett" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Oppsett" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "K&opiér" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopiér" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Klipp ut" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Slett" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Finn" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Finn" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Finn neste" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lim inn" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Lim inn" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Gjenta" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Gjenta" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Erstatt" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Erstatt" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Markér alle" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Markér alt" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Angr" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Angr" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Lukk" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ut" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Ny" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Ny" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Opn" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Opn" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Gjeninnles" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Lagr" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Lagr " #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "&Lagr som..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Lagr som" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodar" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Opn som" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Lagr som" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fil" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Framhev syntaks" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Linjeavslutning" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Skilje mellom STORE og små bokstavar" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Søk frå skrivemerket" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulære uttrykk" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "&Bare markert tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Bare heile ord" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Val" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Erstatt med:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Søk etter:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Retning" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Pakk ut filer" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Pakk ut stinamn dersom lagra med fil(er)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "&Pakk ut kvart arkiv til separat mappe (med namn som arkivet)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Overskriv eksisterande filer" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "&Til mappa:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Fil(er) som skal pakkast ut:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Passord for krypterte filer:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Vent.." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Filnamn:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Frå:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klikk på Lukk når mellombels fil kan slettast!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Til panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vis alle" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Pågåande handling:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Frå:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Til:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenskapar" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "&Tillat utføring av fila som program" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Eigar" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Anna" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigar" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Inneheld:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Oppretta:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utfør" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Utfør:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Filnamn" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Filnamn" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Plassering:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppe" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Sist opna:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Sist endra:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Attributt endra:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Eigar" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesa" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Storleik:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink til:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Filtype:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Namn" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Verdi" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributt" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenskapar" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Lukk" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Avslutt" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Lås opp" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Lås opp alle" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Lås opp" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Prosess-ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Utførbar sti" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Avbryt" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Avbryt søk og lukk vindu" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Lukk" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Sett opp hurtigtastar" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Redigér" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "&Kopiér til listeboks" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Avbryt søk, lukk og fjern frå minne" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "For alle andre \"Finn filer\", avbryt. lukk og fjern frå minne" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Gå til fil" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Finn filinnhald" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Siste søk" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nytt søk" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nytt søk (slett forrige)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Gå til side \"Avansert\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Gå til side \"Opn/Lagr\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "&Til neste side" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Gå til side \"Plugins\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "&Til forrige side" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Gå til side \"Resultat\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Gå til side \"Standard\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Lagr" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Slett" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Hent" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Lagr" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "&Lagr med \"Start i mappe\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Når det blir lagra med \"Start i mappe\" vil avgrensninga bli gjendanna ved innlesing av mal. Bruk dersom du vil avgrensa søket til ei bestemt mappe" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Bruk mal" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Finn filer" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "&Skill mellom STORE og små bokstavar" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Frå dato:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "&Til dato:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Filstorleik frå:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "&Filstorleik til:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "&Søk i pakka filer" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Finn tekst" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "&Følg symbolske linkar" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "&Finn filer, som IKKJE inneheld teksten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "&Ikkje eldre enn:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Opn faner" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "&Søk etter del av filnamn" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulært uttrykk" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "&Erstatt med" #: tfrmfinddlg.cbselectedfiles.caption #, fuzzy #| msgid "Selected directories and &files" msgid "Selected directories and files" msgstr "&Søk bare i valde mapper/filer" #: tfrmfinddlg.cbtextregexp.caption #, fuzzy #| msgid "Regular &expression" msgid "Reg&ular expression" msgstr "&Regulært uttrykk" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Frå tid:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&Til tid:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Bruk søke-plugin:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption #, fuzzy #| msgid "Hexadecimal" msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Heksadesimal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Tast inn mappenamn som skal utelatast i søket, skilte med \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Tast inn filnamn som skal utelatast i søket, skilte med \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Tast inn filnamn, skilte med \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Verdi" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Filer" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Finn data" #: tfrmfinddlg.lblattributes.caption msgctxt "tfrmfinddlg.lblattributes.caption" msgid "Attri&butes" msgstr "&Attributt" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Koding:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "&Utelat undermapper" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Utelat filer" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Søk etter" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "&Start i mappe" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "&Søk i undermapper:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Tidligare søk:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Handling" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "For alle andre: avbryt, lukk og fjern frå minne" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Opn i ny fane" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Val" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Fjern frå liste" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Resultat" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Vis alle funn" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Vis i editor" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Vis i Framvisar" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avansert" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Opn/lagr" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultat" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Finn" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Finn" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "&STORE og små bokstavar" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regulære uttrykk" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Passord:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Brukarnamn:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Opprett hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Målet, som linken skal peika på" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Namn på linken" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importér alle!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importér valde" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Vél dei oppføringane du vil importera" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Klikk på ein undermeny vil velja heile menyen" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Hald CTRL nede og klikk på postane for å velja fleire" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Slå saman filer" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Slå saman til..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Filnamnet" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Ned" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Ned" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Slett" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Opp" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Opp" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Om" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktivér fane ved indeksnr" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Legg til filnamn til kommandolinje" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nytt søk..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Legg til sti og filnamn til kommandolinje" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiér sti til kommandolinje" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Testprogram" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "&Kompakt visning" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kompakt visning" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "&Rekn ut brukt plass" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Bytt mappe" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Gå til home-mappa" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Gå til overmappe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gå til rot-mappa" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Kontrollsummér..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verifisér kontrollsum (frå kontrollsumfil)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Tøm loggfil" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Tøm loggvindauge" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "&Lukk alle fanene" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Lukk dupliserte faner" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Lukk fane" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Neste kommandolinje" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Hent neste kommando frå historikk til kommandolinje" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Forrige kommandolinje" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Hent forrige kommando frå historikk til kommandolinje" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "&Kolonnevisning" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolonnevisning" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "&Samanlikn innhald" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "&Samanlikn mappene" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "&Samanlikn mappene" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Sett opp pakkeprogram" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Sett opp favorittmapper" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Sett opp favorittfaner" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Sett opp faner" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Sett opp hurtigtastar" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Sett opp pluginar" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Lagr posisjon" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Lagr oppsett" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Sett opp søk" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Verktøylinje..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Sett opp hint" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Sett opp tre-visning" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Sett opp fargar på tre-visning" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Vis kontekstmeny" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiér" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopiér alle fanene til motsett side" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "&Kopiér alle viste kolonnar" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "&Kopiér filnamn + sti til Utklipp" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopiér filnamn til Utklipp" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopiér namn med UNC-sti" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiér filer utan stadfesting" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiér komplette sti(er) for vald(e) fil(er) utan avsluttande mappe-separator" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiér komplette sti(er) for vald(e) fil(er)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiér til same panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiér til Utklipp" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Vis brukt plass" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Klipp ut" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Vis kommandoparametre" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "For alle søk, avbryt, lukk og fjern frå minne" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Mappehistorikk" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Favorittmapper" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Vél ein kommando og utfør han" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Redigér" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "&Redigér filkommentar..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Redigér ny fil" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Redigér stifeltet over fillista" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Bytt om panela" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Utfør script" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Pakk ut filer..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "&Sett opp assosiering" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Slå saman filer..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "&Vis eigenskapar" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Del opp fil..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Flat visning" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus på kommandolinja" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Bytt fokus" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Bytt mellom venstre og høgre fil-liste" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Fokus på tre-visning" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Veksl mellom vist filliste og trevisning (om innstilt)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Plasser markøren på første fil på lista" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Plasser markøren på siste fil på lista" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Opprett hardlink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Innhald" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horisontal visning" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatur" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Kompakt visning i venstre panel" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Kolonnevisning i venstre panel" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Venstre &= Høgre" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Flat visning i venstre panel" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Opn venstre drevliste" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "&Omvendt rekkefølgje i venstre panel" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "&Sortér venstre panel etter eigenskapar" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "&Sortér venstre panel etter dato" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "&Sortér venstre panel etter filending" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "&Sortér venstre panel etter namn" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "&Sortér venstre panel etter storleik" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vis miniatyrar i venstre panel" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Hent fane frå favorittfane" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "&Hent markering frå Utklipp" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Hent markering frå fil..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Hent faner frå fil" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "&Ny mappe" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "&Markér alle av same type" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Markér alle filer med same namn" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Markér alle filer med same namn og type" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Markér alle i same sti" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Invertér markering" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Markér alle" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Innskrenk markéring..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Utvid markéring..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Avmarkér alle" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimér vindauge" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi &Rename Tool" msgid "Multi-&Rename Tool" msgstr "&Multi-omdøyping" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Kopl til nettverk..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Kopl frå nettverk" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Hurtig nettverkstilkopling..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Ny fane" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Les inn neste favorittfane i lista" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "&Bytt til neste fane" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Opn" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Prøv å opna arkiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Opn panelfil" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "&Opn mappe i ny fane" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Opn drev ved indeksnr" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "&Andre filsystem (VFS)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vis handlingar" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Alle oppsett..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Pakk filer..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Flytt midtsprosse" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Lim inn" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Les inn forrige favorittfane i lista" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "&Bytt til forrige fane" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hurtigfilter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hurtigsøking" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hurtigvisning" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Oppdatér" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Gjeninnles siste brukte favorittfaner" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Flytt" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Flytt/omdøyp filer utan stadfesting" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Omdøyp" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Omdøyp fane" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Lagr siste favorittfane" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Gjenopprett markering" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Omvendt sortering" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Kompakt visning i høgre panel" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Kolonnevisning i høgre panel" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Høgre &= venstre" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Flat visning i høgre panel" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Opn høgre drevliste" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "&Omvendt sortering i høgre panel" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "&Sortér høgre panel etter eigenskapar" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "&Sortér høgre panel etter dato" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "&Sortér høgre panel etter filending" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "&Sortér høgre panel etter namn" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "&Sortér høgre panel etter storleik" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vis miniatyrar i høgre panel" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "&Terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Lagr aktiv fane som ny favorittfane" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Lagr markering" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "&Lagr markering i fil..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Lagr faner som fil" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Søk..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle fanene låste. Mappe opna i ny fane" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Gjer alle fanene ulåste" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Gjer alle fanene låste" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle fanene låste. Tillat endring av mappe" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "&Endr attributt..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "&Lås fane med mapper. Opna i ny fane" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Lås fane" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "&Lås fane, men tillat mappebytting" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Opn" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Bruk systemassosiasjonar til å opna (eksterne program)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Vis knappemeny" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Vis kommandolinjehistorikk" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Meny" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "&Vis skjulte/system-filer" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "&Sortering etter attributt" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "&Sortering etter dato" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "&Sortering etter type" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "&Sortering etter namn" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "&Sortering etter storleik" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Opn drevliste" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Vis/ikkje vis filnamn som står i ignorér-lista" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "&Opprett symbolsk link..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "&Synkronisér mapper..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Mål &= kjelde" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Kontrollér arkiv" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatyrar" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vis miniatyrar" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Bytt mellem filvindauge og terminalvindauge i fullskjerm" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Flytt mappe under markøren til venstre vindauge" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Flytt mappe under markøren til høgre vindauge" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Trevisningspanel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Sortér etter parametre" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "&Avmarkér alle av same type" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Avmarkér alle filer med same namn" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Avmarkér alle filer med same namn og type" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Avmarkér alle i same sti" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Vis" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Vis historikken for brukte stiar i aktiv visning" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gå til neste oppføring i historikk" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gå til forrige oppføring i historikk" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Vis loggfil" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Vis gjeldande søk" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Double Commanders nettside" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Sikker sletting" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Arbeid med favorittmapper og parametre" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ut" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Ny mappe" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favorittmapper" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Vis mappa frå høgre panel i venstre panel" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Gå til home-mappa" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Gå til rot" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Gå til overmappe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favorittmapper" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Vis mappa frå venstre panel i høgre panel" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Sti" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Avbryt" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiér..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Opprett link..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Tøm" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skjul" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Markér alt" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Flytt..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Opprett symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Faneinnstillingar" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Gjenopprett" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Kommandoar" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Oppsett" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "&Favorittar" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Filer" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markér" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "&Nettverk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Vis" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Faneinnstillingar" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Faner" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Redigér" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Sett inn" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Vél din interne kommando" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Tradisjonell sortering" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Tradisjonell sortering" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Vél alle kategorier som standard" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Val:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategoriar:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Kommando:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Hint:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Hurtigtast:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategori" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hjelp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Hint" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Hurtigtast" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definér..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Skill store/små" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorér aksentar og ligaturar" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "&Attributt:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Inndata-maske:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Eller vél fast definisjon:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Opprett ny mappe" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Nytt mappenamn:" #: tfrmmodview.btnpath1.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Ny storleik" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Høgd:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-komprimeringskvalitet" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Breidd:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Høyde" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Breidd" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption #, fuzzy msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actanynamemask.caption #, fuzzy msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Filnamn" #: tfrmmultirename.actclearextmask.caption #, fuzzy msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclearnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclose.caption #, fuzzy msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Lukk" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "" #: tfrmmultirename.actctrextmask.caption #, fuzzy msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Definer teljar [C]" #: tfrmmultirename.actctrnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Definer teljar [C]" #: tfrmmultirename.actdateextmask.caption #, fuzzy msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdatenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdeletepreset.caption #, fuzzy msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Slett" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption #, fuzzy msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actextnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actinvokeeditor.caption msgid "Edit&or" msgstr "" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption #, fuzzy msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Filnamn" #: tfrmmultirename.actnamenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Filnamn" #: tfrmmultirename.actplgnextmask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmmultirename.actplgnnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmmultirename.actrename.caption #, fuzzy msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Omdøyp" #: tfrmmultirename.actrenamepreset.caption #, fuzzy msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Omdøyp" #: tfrmmultirename.actresetall.caption msgid "Reset &All" msgstr "" #: tfrmmultirename.actsavepreset.caption #, fuzzy msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Lagr" #: tfrmmultirename.actsavepresetas.caption #, fuzzy msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Lagr &som..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption #, fuzzy #| msgid "MultiRename" msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Multi-omdøyping" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Skill store/små" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "&Aktivér logging" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulære uttrykk" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Bruk substitutt" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Definer teljar [C]" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Søk && erstatt" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Omdøypingsmaske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Forinnstillingar" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Filtype" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Finn..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervall" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Filnamn" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Erstatt med..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Start ved" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Breidd" #: tfrmmultirename.miactions.caption #, fuzzy msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Handlingar" #: tfrmmultirename.mieditor.caption #, fuzzy msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Editor" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Gammalt namn" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nytt namn" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Plassering" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Klikk OK for å lasta endra namn, etter at du har stengt editor!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Opn med" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Brukardefinert kommando" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Lagr assosiasjon" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Bruk alltid det valde programmet til å opna denne filtypen" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Filtype som skal opnast: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Fleire filnamn" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Fleire URI'er" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkelt filnamn" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkelt URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Utfør" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Val" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Gå til ei av undersidene. Ingen innstillingar her." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "&Kopiér" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "&Andre..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Omdøyp" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Kjennemerke som cm_OpenArchive kan bruka for å gjenkjenna arkiv, utan å bruka fil-ending:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Innstillingar:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formatanalyse-modus:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "&Aktivert" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "&Feilrettings-modus" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "&Vis terminalvindaugets ut-data" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Bruk arkivnamnet utan ending som liste" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "&Unix-filattributt" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "&Unix sti-skiljeteikn \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "&Windows-filattributt" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows sti-skiljeteikn \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "&Legg til:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "&Pakkeprogram:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Slett:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "&Omtale:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Filending:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "&Pakk ut:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "&Pakk ut utan sti:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "&ID Posisjon:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "&ID søke-intervall:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&List opp:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "&Pakkeprogram:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Opplistings-avslutning (valfritt):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "&Opplistings-format:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "&Opplistings-start (valfritt):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "&Passord-spørsmål:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "&Lag sjølvutpakkande arkiv:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "&Test:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Auto-oppsett" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Slå av alt" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Forkast endringane" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Slå på alt" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Sortér pakkeprogram" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Ekstra" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Generelt" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "&Når storleik, dato/tid eller attributt blir endra" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&For følgjande stiar og undermappene deira:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "&Når filer blir oppretta, sletta eller omdøypte" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "&Når Double Commander er i bakgrunnen" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Slå av automatisk oppdatering" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Oppdater fillista" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "&Vis alltid ikon i systempanel" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Skjul automatisk drev som ikkje lenger er monterte" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "&Flytt ikon til systempanel når minimert" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Tillat bare ein kopi av Double Commander om gongen" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Her kan du tasta inn eit eller fleire drev eller \"mount-points\", skilde med \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Utesteng fylgjande drev" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Kolonnestorleik" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Vis filendingar" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&justert (med tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&rett etter filnamn" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Fast antal kolonnar" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Fast kolonnebreidd" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "&Flytande fargeovergangar" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "&Binær modus" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Bakgrunn &2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Farge for ledig plass:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Farge for brukt plass:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Endra:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Endra:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Vellukka:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "&Kutt tekst til kolonnebreidd" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Utvid cellebreidd dersom tekst ikkje får plass i kolonne" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Horisontale linjer" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Vertikale linjer" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "&Auto-fyll kolonner" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Vis rutenett" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Innstill kolonnebreidd automatisk" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "&Innstill kolonnebreidd automatisk:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Kommandolinjehistorikk" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "&Mappehistorikk" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "&Søkefilter-historikk" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Fane" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "&Oppsett" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "&Søk/erstatt-historikk" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Vindaugeposisjon" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Plassering av oppsettsfiler" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Lagr ved avslutning" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sorteringsrekkefølge i Oppsett" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Trevisning i Oppsett" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Oppgje i kommandolinje" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Framhevarar:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Ikontema:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Minne for miniatyrar:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "&Programmappe (transportabel versjon)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "&Brukarmappe" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Utfør endringar på alle kolonnar" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Slett" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Gå til standardoppsett" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Ny" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Neste" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Forrige" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Omdøyp" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Lagr som" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Lagr" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillat fargeoverlapping" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Endr alle kolonnane når det blir klikka for å endra" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generelt" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Markeringsramme" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Vis markering som ramme" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Bruk invertert fargeval for inaktiv" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Bruk invertert val" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Bruk brukarvalde skrifttypar og fargar i denne visninga" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "&Bakgrunn:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Bakgrunn &2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "&Kolonnevisningsoppsett:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuelt kolonnenamn]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "&Markørfarge:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Skrifttype:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Storleik:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "&Skriftfarge:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktiv markørfarge:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Valt inaktiv farge:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "&Valt farge:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Førehandsvising. Du kan flytta markøren og markera filer for straks å få eit inntrykk av dei ulike innstillingane." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Innstillingar for kolonne:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Legg til kolonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posisjonen til rammepanel etter samanlikning:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "&Legg til mappa som er i aktiv ramme" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "&Legg til mappene som er i aktive og inaktive rammer" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "&Legg til mappa som eg går til" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Legg til ein kopi av valt element" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "&Legg til valde eller aktive mapper i aktiv ramme" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Legg til delelinje" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Legg til undermeny" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Legg til mappe eg tastar inn" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Lukk alle" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Lukk denne" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Klipp ut valde element" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Slett alle!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Slett valde element" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Slett undermenyen og alle element i han" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Slett undermenyen, men ikkje elementa i han" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Utvid element" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Fokusér tre-vindauge" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Gå til første element" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Gå til siste element" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Gå til neste element" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Gå til forrige element" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "&Sett inn mappa til aktiv ramme" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "&Sett inn mappene til aktive og inaktive rammer" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "&Sett inn mappa eg vil gå til" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Sett inn ein kopi av vald element" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "&Sett inn valde eller aktive mapper som tilhøyrer aktiv ramme" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Sett inn delelinje" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Sett inn undermeny" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Sett inn mappe som eg tastar inn" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Flytt til neste" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Flytt til forrige" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Opn alle greiner" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Lim inn utklipt" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "&Søk og erstatt i sti" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "&Søk og erstatt i både sti og mål" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "&Søk og erstatt i målsti" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Tilpass sti" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Tilpass målsti" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Legg til..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Slett..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Eksportér..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Importér..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Sett inn..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Ymse..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Nokre funksjonar til å velja egna mål" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Sortering..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Legg også til mål når mappe blir lagt til" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "&Utvid alltid treet" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "&Vis bare gyldige miljøvariablar" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "&Vis i sprettopp [også sti]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Namn, a-å" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Namn, a-å" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Favorittmappe (bruk dra && slepp til å bytta om på rekkefølgja)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andre innstillingar" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Namn:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Plassering:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "&Mål:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...bare det aktuelle ni&vået av valde element" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "&Les alle favorittmappers sti for å validera dei som reelt finst" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "&Les alle favorittmappers sti && mål for å validera dei som reelt finst" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "&til favorittmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "&til \"wincmd.ini\" i TC (bevar eksisterande)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "&til \"wincmd.ini\" i TC (Slettar eksisterande)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "&Gå til sett opp TC-relatert informasjon" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "&Gå til sett opp TC-relatert informasjon" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Favorittmappe-testmeny" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "&frå favorittmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "&frå \"wincmd.ini\" i TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navigér..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Gjenopprett favorittmappe frå ein backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Lagr backup av eksisterande favorittmappe" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "&Søk og erstatt..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...&alt, frå A til Å!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...&bare ei gruppe av objekt" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&innhald av undermeny(er) vald, ingen undernivå" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...&innhald av undermeny(er) vald og alle undernivå" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "&Meny av testresultat" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "&Tilpass sti" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "&Tilpass målsti" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Tillegging frå hovudpanel" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnamn med relativ sti:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Frå alle understøtta format. Spør kvar gong kva for eit som skal brukast" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Når Unicode-tekst skal lagrast, lagr i UTF8-format (elles blir det UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Når tekst blir droppa, generér filnamn automatisk (elles blir brukaren spurt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Stadfesting etter dra && slepp" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Når dra && slepp blir brukt:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plassér det mest sannsynlege formatet i toppen av lista (bruk dra && slepp):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(dersom det mest sannsynlege ikkje er tilstades, blir det nestmestsannsynlege tatt osv.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(virker ikkje med alle kjeldeprogram. Prøv å løysa problemet ved å fjerna markering)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "&Vis filsystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "&Vis ledig plass" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "&Vis drevnamn" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drev-valknapp" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Auto-innrykk" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Tillat innrykk når ny linje er danna med <Enter>, med samme venstremarg som føregåande linje" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Tillat skrivemerket bak linjeslutt" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Tillat at skrivemerket går i blankfeltet etter linjeslutt" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Vis spesialteikn" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Vis spesialteikn for ordskilje og tabulator" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Smarte tabulatorar" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "<Tab>-tasten vil flytta skrivemerket til neste teikn på forrige linje" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Blokk-innrykk med tab-tasten" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Dersom aktivert, vil <Tab> og <Shift+Tab> fungera som blokk-innrykk, tilbakerykk dersom tekst er vald" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Bruk blanke i staden for tab-teikn" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Gjer tab-teikn om til eit spesifisert antall blanke (under innskriving)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Slett etterhengande blanke" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatisk slett etterhengande blanke. Gjeld bare redigerte linjer" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Legg merke til at \"Smart tab\"-tilvalet har forrang foran pågående tabulering" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Innstillingar (Intern editor, F4)" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tab-breidd:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Legg merke til at \"Smart tab\" tilvalet har forrang foran pågåande tabulering" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Bakgrunn:" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Bakgrunn:" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Nullstill" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Lagr" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementets utsjånad" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Framgrunn" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Framgrunn" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekstmarkering" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "&Bruk (og redigér) global markéring/farge" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "&Bruk lokal markéring/farge" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Feit" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Kursiv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Gjennomstreka" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Understreka" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Legg til..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Slett..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Import/eksport" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Sett inn..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Omdøyp" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Ingen" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Utvid alltid tre" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nei" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Venstre" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Høyre" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Favorittfaner (redigér med dra && slepp)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andre innstillingar" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Gjenopprett slik:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Eksisterande faner som skal behaldast:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Lagr mappehistorikken:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Fane lagra til venstre skal gjenopprettast til:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Fane lagra til høgre skal gjenopprettast til:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "ei delelinje" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Legg inn skiljestrek" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "ein undermeny" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Legg til ein undermeny" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Lukk alle" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...bare det aktuelle nivå av valde element" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Klipp ut" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "slett alle!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "undermeny og alle element i han" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "bare undermeny, men behald elementa" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "valde element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Slett valde element" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Eksportér valde til klassisk(e) .tab fil(er)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Favorittfanes testmeny" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importér klassisk(e) .tab fil(er), med standardinnstillingar" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importér klassisk(e) .tab fil(er) til vald posisjon" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importér klassisk(e) .tab fil(er) til vald posisjon" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importér klassisk(e) .tab fil(er) til vald posisjon i ein undermeny" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Sett inn delelinje" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Sett inn undermeny" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Opn alle greiner" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Lim inn" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Omdøyp" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...alt, frå A til Å!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...bare ei gruppe av element" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortér bare ei gruppe av element" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...innhald av undermeny(er) vald, ingen undernivå" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...innhald av undermeny(er) vald og alle undernivå" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Meny av testresultat" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Legg til" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Legg til" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "&Klon" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Vél din interne kommando" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Ned" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "&Redigér" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Sett inn" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "&Sett inn" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Omdøyp" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Opp" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Kommandoen skal starta i denne stien. Sett han aldri i hermeteikn." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Namn på handling. Namnet blir ikkje brukt av systemet; det er bare for deg, brukaren" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter til kommandoen. Lange filnamn med blanke bør setjast i hermeteikn (manuelt)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Kommandoen for å starta handling. Sett han aldri i hermeteikn." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Om handling" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Handlingar" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Filendingar" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kan arrangerast med dra & slepp" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Filkategoriar" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Handlingar kan arrangerast med dra & slepp" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Filendingar kan arrangerast med dra & slepp" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Filtypar kan arrangerast med dra & slepp" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "&Namn på handling:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parametre:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Brukerdefinert med..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Brukardefinert" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Redigér" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Opn i Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Redigér med..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ta utdata frå kommando-prompt" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Opn i intern editor" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Opn i intern framviser" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Opn" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Opn med..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Køyr i Terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Vis" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Opn i Framviser" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Vis med..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klikk på meg for å endra ikon!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Utfør i eit skall" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Utvida kontekstmeny" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Oppsett av filassosiering" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Foreslå å leggja valet til som filassosiering, dersom ikkje allereide inkludert" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Når filassosiering blir opna, foreslå å leggja aktuell vald fil til, dersom ho ikkje alt er inkludert i ein konfigurert filtype" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Utfør i terminal og lukk" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Utfør i Terminal, som forblir open" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikon" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Fleire innstillingar:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnamn med relativ sti:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Be om stadfesting ved:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "&Kopiering" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Sletting" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&Slett-F8 slettar til Papirkorg (Skift+F8/Skift+Delete slettar direkte)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "&Sletting til Papirkorg" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Fjern skrivesperre" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Flytting" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "&Kopiér kommentarar saman med filer/mapper" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "&Vél filnamn utan ending ved omdøyping" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "&Vis valboks for faner i kopiér/flytt-dialog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "&Ignorér feil ved operasjonar, men skriv dei i logg-vindauge" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Verifiséring av kontrollsum-operasjon" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Utfør handlingar" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Brukargrensesnitt" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Bufferstorleik for filhandlingar (i KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Bufferstorleik for &hashutrekning (i KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "&Vis framdrift for handlingane i" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Prinsipp for auto-omdøyping av dublettar:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "&Antall overskrivingar ved sikker sletting:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Tilbakestill til DC-standard" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillat fargeoverlapping" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "&Markér med ramme" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Bruk invertert fargeval for inaktiv" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "&Bruk invertert val" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Rammefarge" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Bakgrunn:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Bakgrunn &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Markørfarge:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "&Markørskrift:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farge på inaktiv markør:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farge på inaktiv markéring:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "&Lysstyrke i det inaktive vindauget" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Markeringsfarge:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "&Skriftfarge:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Førehandsvising. Du kan flytta markøren og markera filer for straks å få inntrykk av innstillingane." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "&Skriftfarge:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Slett filter før nytt filsøk" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Søk etter del av filnamn" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Vis menylinje i \"Finn filer\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Tekstsøk i filer" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Filsøk" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Gjeldande filter med \"Nytt søk\" -knapp:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standard søkemal:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "&Bruk minnemapping for tekstsøk i filer (kravstor)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Bruk stream for tekstsøk i filer (treg)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatering" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Eigne forkortingar i bruk:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Sortering" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&STORE og små bokstavar:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Ukorrekt format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Dato- og tidsformat:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "&Vis filstorleik i:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Megabyte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Sett inn nye filer:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Operasjonsstorleik format:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "&Sortér mapper:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Sorteringsmetode:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Flytt endra filer:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "&Tillat flytting til overliggjande mappe når det blir dobbelklikka på ein tom del av filvisning" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Ikkje les inn filliste før fane er aktivert" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "&Vis hakeparentesar [ ] omkring mappenamn" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "&Framhev nye og endra filer" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "&Tillat direkte omdøyping ved dobbeltklikk på namn" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "&Les filliste inn i separat tråd" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "&Ikon inn etter filliste" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "&Vis skjulte/system-filer" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Når valt med <ordskiljar>, flytt ned til neste fil (som med <insert>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Windows-type filter ved markering av filer (\"*.*\" markerer også filer utan filending mv )" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Bruk eit fritt attributt-filter i maske-dialogen kvar gong" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Markerer/avmarkerer element" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Standard attributt-maske-verdi som skal brukast:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Slett" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Mal..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Farging av filkategoriar (arrangér med dra && slepp)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Kategori-attributt:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Katergori-farge:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Katergori-filter:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Kategori-namn:" #: tfrmoptionsfonts.hint #, fuzzy msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Fontar" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "&Legg til hurtigtast" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopiér" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Slett hurtigtast" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Redigér hurtigtast" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Neste kategori" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Gjer filmenyen sprettopp" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Forrige kategori" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Omdøyp" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Gjenopprett DC-standard" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Lagr nå" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Sortér etter kommandonamn" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Sortér etter hurtigtast (gruppert)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Sortér etter hurtigtast (éin pr rad)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "&Kategoriar:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "&Kommandoar:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Fil for hurtigtastar:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "&Sorteringsrekkefølgje:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategoriar" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Kommando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Sorteringsrekkefølgje" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Kommando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Hurtigtastar" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Omtale" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Hurtigtast" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&For fylgjande stiar og undermappene deira:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "&Vis ikon ut for punkt i hovudmenyen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Vis ikon på knappar" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Vis overlegg på ikon, (f.eks. piler ved linkar)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Dimm skjulte/system-filer (treg)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Slå av spesielle ikon" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Ikonstorleik " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Ikontema" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Vis ikon" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Vis ikon til venstre for filnamnet " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Drevpanel:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Filpanel:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Alle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "&Alle assosierte filer inkl. EXE/LNK (treg)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Ingen ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Bare standardikon" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Legg til valde namn" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "&Legg til valde namn med heile stien" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorér (ikkje vis) fylgjande filer og mapper:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Lagr i:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Venstre- og høgrepil bytter mellom mapper" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tasting" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "&Alt+bokstavar:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+bokstavar:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Bokstavar:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Flate ikon" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "&Flate funksjonstastar" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "&Vis stolpe for brukt/ledig plass på drev" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "&Vis logg-vindauge" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Vis &handlingsvindauge i bakgrunn" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Vis framdrift i menylin&je" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "&Vis kommandolinje" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "&Vis aktuell sti" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "&Vis drev-knappar" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "&Vis tal for ledig plass" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "&Vis drev-valknapp" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "&Vis knapprad for funksjonstastar" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "&Vis hovudmeny" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "&Vis verktøylinje" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "&Vis tal for ledig plass (kompakt visning)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "&Vis statuslinje" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Vis filtabellhovud" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "&Vis faner" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "&Vis terminalvindauge" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "&Vis to knapprader for drev (fast breidd, over filvindauge)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Skjermoppsett" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Vis innhaldet i loggfila" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Ta med dato i loggfil-namn" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Pakking/Utpakking" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Utføring av ekstern kommandolinje" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Kopiering/Flytting/Oppretting av link && symlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Slett" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Oppretting/sletting av mapper" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "&Logg feil" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Opprett loggfil i:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Logg informasjonsmeldingar" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Starting/nedstenging" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "&Logg vellukka operasjonar" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Filsystem-plugins" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Loggfil for filoperasjoner" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Logg fylgjande operasjonar" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Operasjonsstatus" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Fjern miniatyrbilde for sletta filer" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Vis innhaldet i oppsettsfil" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Ny, med koding:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Gå alltid til toppnivået ved bytte av drev" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "&Vis åtvaringar (med bare \"OK\"-knapp)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Lagr miniatyrbilde i cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatyrar" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Filkommentar (descript.ion" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "For TC-eksport/-import:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Standardkoding:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Oppsettsfil:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC exe-fil:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Sti til verktøylinjas ut-data:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixlar" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Breidd x høgd:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Val med mus" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Skrivemerket følgjer ikkje lenger musepila" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "&Ved klikk på ikon" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Opn med" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rulling med musehjul" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Val" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Tilstand:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dobbelklikk" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Antall linje(r) om gongen" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "&Linje for linje, markøren følgjer med" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Ei side om gongen" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Enkelklikk (opnar filer og mapper)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Enkelklikk (opnar mapper; dobbelklikk for filer)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Vis innhaldet i loggfila" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Sett opp" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Slå på" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Tilpass" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Omtale" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "namn:" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "&Søke-plugins brukar alternative søkealgoritmer eller eksterne verktøy (som \"locate\", o.l.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnamn" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Sett desse settingane på alle gjeldande oppsette plugins" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Gå direkte til tilpassingsvindauget når ny plugin blir lagt til" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Oppsett:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnamn med relativ sti:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Plugin filnamn-stil når ny plugin blir lagt til:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "&Pakke-plugins kan opna arkivtyper som ikkje er støtta av Double Commander internt" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnamn" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "&Innhalds-plugins kan visa utvida fildetaljar t.d. mp3-tags eller fotoopplysningar i fillister. Kan brukast i søking og multi-omdøyping" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnamn" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "&Filsystem-plugins gir tilgang til diskar som er utilgjengelege for operativsystemet eller til eksterne einingar som Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnamn" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "&Liste-plugins kan visa dataformat som f.eks. bilete, rekneark, databasar ol. i Vis (F3, Ctrl+Q)." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnamn" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Start (namn må starta med første inntasta bokstav)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Ende (siste bokstav før eit inntasta punktum må vera lik)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Val" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Eksakt namne-likskap" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "STORE og små bokstavar" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Søk etter desse elementa" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Behold omdøypt namn når fana blir låst opp" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "&Aktivér fil&panel ved klikk på fane" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Vis fane, også når det bare er ei enkel fane" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Lukk like faner når programmet avsluttar" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Stadfest lukking av alle faner" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Stadfest lukking av låst fane" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Avgrens fanetitlar til" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "&Markér låste faner med stjerne *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Tillat vising av faner på fleire linjer" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "&Ctrl+Opp opnar ny fane i framgrunnen" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "&Opn ny fane ved sida av aktiv fane" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Gjenbruk eksisterande fane om mogleg" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "&Vis lukk-knapp på fane" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vis alltid drevbokstav i fanetittel" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Faner" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "teikn" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Handling, når det blir dobbeltklikka på ei fane:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "&Faneposisjon" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Ingen" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nei" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Venstre" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Høgre" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Gå til oppsett av favorittfane, etter lagring (igjen)" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Gå til oppsett av favorittfane, etter lagring av ny fane" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Aktivér ekstra-oppsett for favorittfane (vél side for gjenoppretting etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Ekstra standardoppsett når ny favorittfane blir lagra:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Ekstra for fane" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Når fane blir gjenoppretta, bevar eksisterande fane i:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Fane lagra til venstre skal gjenopprettast til:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Faner lagra til høgre skal gjenopprettast til:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Hald fram med å lagra mappehistorikken med favorittfane:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardplassering i meny når ny favorittfane blir lagra:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} skal normalt visa her for å reflektera kommandoen som skal utførast i Terminal" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} skal normalt visa her for å reflektera kommandoen som skal utførast i Terminal" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Innstilling for utføring av kommando og deretter ingen handling:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Innstilling for utføring av kommando i terminal, som deretter blir lukka:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Innstilling for utføring av kommando i terminal, som forblir open:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.btnclonebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "&Klon knapp" #: tfrmoptionstoolbarbase.btndeletebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Slett" #: tfrmoptionstoolbarbase.btnedithotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "&Rediger hurtigtast" #: tfrmoptionstoolbarbase.btninsertbutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Sett inn ny knapp" #: tfrmoptionstoolbarbase.btnopencmddlg.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopencmddlg.caption" msgid "Select" msgstr "Markér" #: tfrmoptionstoolbarbase.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Andre..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "&Fjern hurtigtast" #: tfrmoptionstoolbarbase.btnstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.caption" msgid "Suggest" msgstr "Foreslå" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.hint" msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Få DC til å foreslå hint basert på knapptype, kommando eller parametre" #: tfrmoptionstoolbarbase.cbflatbuttons.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Flate ikon" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption" msgid "Report errors with commands" msgstr "Rapportér feil i kommandolinje" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.edtinternalparameters.hint" msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Inntast kommandoparametre, bare éin pr. linje. Trykk F1 for meir hjelp til parametre." #: tfrmoptionstoolbarbase.gbgroupbox.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Utsjånad" #: tfrmoptionstoolbarbase.lblbarsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "&Storleik på verktøylinje:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "&Kommando:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hjelp" #: tfrmoptionstoolbarbase.lblhotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhotkey.caption" msgid "Hot key:" msgstr "Hurtigtast:" #: tfrmoptionstoolbarbase.lbliconfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "&Ikon:" #: tfrmoptionstoolbarbase.lbliconsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "&Storleik på ikon:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Kommando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Hint:" #: tfrmoptionstoolbarbase.miaddallcmds.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddallcmds.caption" msgid "Add toolbar with ALL DC commands" msgstr "Legg til verktøylinje med ALLE DC-kommandoar" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption" msgid "for an external command" msgstr "for ein ekstern kommando" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption" msgid "for an internal command" msgstr "for ein intern kommando" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption" msgid "for a separator" msgstr "for ei delelinje" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption" msgid "for a sub-tool bar" msgstr "for ei under-verktøylinje" #: tfrmoptionstoolbarbase.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbarbase.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstoolbarbase.miexportcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrent.caption" msgid "Current toolbar..." msgstr "Aktuell verktøylinje..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til ei TC .BAR-fil (bevar eksisterande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til ei TC .BAR-fil (Slettar eksisterande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til ei \"wincmd.ini\" i TC (bevar eksisterande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til ei \"wincmd.ini\" i TC (Slettar eksisterande)" #: tfrmoptionstoolbarbase.miexporttop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttop.caption" msgid "Top toolbar..." msgstr "Øvste verktøylinje..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptobackup.caption" msgid "Save a backup of Toolbar" msgstr "Lagr ein backup av verktøylinja" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til ei TC .BAR-fil (bevar eksisterande)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til ei TC .BAR-fil (Slettar eksisterande)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til ei \"wincmd.ini\" i TC (bevar eksisterande)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til ei \"wincmd.ini\" i TC (Slettar eksisterande)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle val" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle val" #: tfrmoptionstoolbarbase.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstoolbarbase.miimportbackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackup.caption" msgid "Restore a backup of Toolbar" msgstr "Gjenopprett verktøylinja frå ein backup" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "for å leggja til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å leggja til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å leggja til ei ny verktøylinje til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "for å leggja til til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatta øvste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbar.caption" msgid "from a Toolbar File (.toolbar)" msgstr "frå ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for å leggja til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å leggja til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å leggja til ei ny verktøylinje til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for å leggja til til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatta øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbar.caption" msgid "from a single TC .BAR file" msgstr "frå ei enkelt TC .BAR-fil" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for å leggja til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å leggja til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å leggja til ei ny verktøylinje til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for å leggja til til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatta øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcini.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcini.caption" msgid "from \"wincmd.ini\" of TC..." msgstr "frå \"wincmd.ini\" i TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "for å leggja til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å leggja til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å leggja til ei ny verktøylinje til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "for å leggja til til øvste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatta øvste verktøylinje" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle val" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle val" #: tfrmoptionstoolbarbase.misearchandreplace.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Søk og erstatt..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle val" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle val" #: tfrmoptionstoolbarbase.misrcrplallofall.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplallofall.caption" msgid "in all of all the above..." msgstr "i alle ovanfor nemnte..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplcommands.caption" msgid "in all commands..." msgstr "i alle kommandoar..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrpliconnames.caption" msgid "in all icon names..." msgstr "i alle ikonnamn..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplparameters.caption" msgid "in all parameters..." msgstr "i alle parametre..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplstartpath.caption" msgid "in all start path..." msgstr "i alle startstiar..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle val" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle val" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.rgtoolitemtype.caption" msgid "Button type" msgstr "Knapptype" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikon" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnamn med relativ sti:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Hald terminalvindauget ope etter at program er utført" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Utfør i terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Bruk eksternt program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "&Ekstra parametre" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Sti til det eksterne programmet" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "&Kopiér" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Mal..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Omdøyp" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "&Andre..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Konfigurér hint for vald filtype:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Felles val for hint:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "&Vis hint for filer i filvindauge" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "&Kategori-hint:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Katergori-filter:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Skjul hint etter:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Hint-vising:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Filtyper:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Forkast endringar" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Sortér hint filtyper" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Med dobbelklikk på filpanelhovudet" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Med menyen og intern kommando" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dobbelklikk i treet, markér og gå ut" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Med menyen og intern kommando" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Med dobbelklikk på ei fane (dersom innstilt)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Når hurtigtast blir brukt, vil han gå ut av vindauget og returnera gjeldande val" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Klikk i treet, markér og gå ut" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Bruk for kommandolinje-historie" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Bruk for Dir-historie" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Bruk for visnings-historie (besøkte stiar for aktivt vindauge)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Oppførsel for val:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Oppsett av trevisning:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Kor skal trevisning brukast:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*NB: Ved val som STORE/små-skilje, aksentignorering eller ikkje, blir desse lagra og gjenoppretta individuelt for kvar samanheng frå ein bruksomgang til ein annan." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Med mappefavorittliste:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Med favorittfaner:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Med historie:" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Bruk og vis hurtigtast for val av element" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Val av oppsett og fargar:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Bakgrunnsfarge:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Markørfarge:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Farge på funnen tekst:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Funnen tekst under markør:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Farge på normal tekst:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normal tekst under markør:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Førehandsvis trevisning :" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Farge på sekundærtekst:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Sekundærtekst under markør:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Farge på snarveg:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Snarveg under markør:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Farge på ikkje-valbar tekst:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Ikkje-valbar tekst under markør:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Bytt farge til venstre og du vil få førehandsvising av trevisning her." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Antall spalter i bokvisning" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Sett opp" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Pakk filer" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Lag separate arkiv, eitt for kvar valt fil/mappe" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "&Lag sjølvutpakkande arkiv" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Kryptér" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "&Flytt til arkiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Fordel arkiv over fleire diskar" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "&Pakk som TAR først" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Pakk også sti (bare rekursivt)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Pakk fil(er) i arkivet:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakkeprogram" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Pakk ut alle og utfør" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Pakk ut og utfør" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Eigenskapar for pakka fil" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributt:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimeringsgrad:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dato:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Opprinneleg storleik:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fil:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Pakka storleik:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakkeprogram:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tid:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Lukk filterpanel" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Tast inn teksten, som det skal søkjast eller filtrerast etter" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Skilnad på STORE og små bokstavar" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mapper" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Filer" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Samanlikn starten" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Samanlikn slutten" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Bytt mellem søking og filtrering" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Fleire reglar" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "&Færre reglar" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "&Bruk innhalds-plugin. Kombinér med:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Verdi" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (alle operatorer er sanne el. falske)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (minst éin operator er sann el. falsk)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Utfør" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Mal..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Mal..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselectpathrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselecttextrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Vél bokstavane som skal setjast inn:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Endre attributt" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arkiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Oppretta:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skjult" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Opna:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Endra:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Skrivesperra" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Ta med filer i &undermapper" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Endra dato/tid" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Endra attributt" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributt" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(grått felt betyr uendra)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Anna" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigar" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utføra" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(grått felt betyr uendra)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesa" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriva" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsortanything.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stiar" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Del opp fil" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Krev ei CRC32 verifikasjonsfil" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1,44 MB - 3,5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Storleik og antall delar" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Del opp fil til mappe:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Antall delar" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Byte" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabyte" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobyte" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabyte" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Bygg" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativsystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plattform" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisjon" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versjon" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Opprett symbolsk link" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Bruk relativ sti om mogleg" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Målet, som linken skal peika på" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Namn på linken" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Fjern markerte" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Markér for kopiering (i forvald retning)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Markér for kopiering -> ( venstre til høgre)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Snu kopieringsretning" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Markér for kopiering <- ( høgre til venstre )" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Markér for sletting -> (høgre)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Lukk" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "&Samanlikn" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Mal..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "S&ynkronisér" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synkronisér mapper" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&Asymmetrisk" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "etter innhald" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorér dato" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "bare valde" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Undermapper" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Vis:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Namn" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Storleik" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Storleik" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Namn" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(i hovudvindauget)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "&Samanlikn" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vis venstre" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vis høgre" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "dublettar" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "unike" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klikk \"Samanlikn\" for å starta" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "S&ynkronisér" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Stadfest overskriving" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Trevisning" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Vél din favorittmappe:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Søk med skilje mellom STORE og små" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Full sammenfolding" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Full utfolding" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Søk ignorerer aksentar og ligaturar" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Søk skil ikkje mellom STORE og små" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Søk tek omsyn til aksentar og ligaturar" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Ikkje vis greininnhald bare fordi søkt tekst blir funne i greinnamnet" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Dersom søkt tekst blir funne i eit greinnamn, vis heile greina sjølv om element ikkje stemmer" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Lukk trevisning" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Innstilling av tre-visning" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Innstilling av fargar på tre-visning" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Legg til nytt" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Tilpass/endr" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Nokre funksjonar til å velja egna sti" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Fjern" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Tilpass plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Fastslå arkivtype ut frå innhald" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "&Kan sletta filer" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "&Støttar kryptering" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "&Vis som normale filer (skjul pakke-ikon)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "&Støttar komprimering i minnet" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "&Kan endra eksisterande arkiv" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Arkiv kan innehalda fleire filer" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "&Kan oppretta nye arkiv" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Støttar val-dialogboksen" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "&Tillat tekstsøking i arkiv" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Omtale:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "&Oppdag streng:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Ending:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flagg:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Namn:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Om Framvisaren..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Vis \"Om\"-dialogen" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Endr koding" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopiér fil" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiér fil" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopiér til Utklipp" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopiér til Utklipp formatert" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Slett fil" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Slett fil" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Avslutt" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Finn" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Heile skjermen" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Midtstill" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Neste" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Les inn neste fil" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Forrige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Les inn forrige fil" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Spegelvend horisontalt" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Spegelvend" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Spegelvend vertikalt" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Flytt fil" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Flytt fil" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Førehandsvis" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Gjeninnles" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Gjeninnles aktuell fil" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Rotér 180 grader" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Rotér -90 grader" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Rotér +90 grader" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Lagr" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Lagr &som..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Lagr fila som..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Skjermdump" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Forseink 3 sek" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Forseink 5 sek" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Vél alt" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "&Vis binært" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "&Vis som bok" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "&Vis desimalt" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "&Vis heksadesimalt" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "&Vis som tekst" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "&Vis som bretta tekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafikk" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Strekk" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strekk bilde" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Strekk bare store" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Angr" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Angr" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom inn" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Zoom inn" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom ut" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Zoom ut" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beskjær" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Heile skjermen" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Framhev" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Mal" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Raude auge" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Tilpass storleik" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Lysbilde" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Framvisar" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Koding" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Bilde" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Stift" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Rotér" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Skjermdump" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visning" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Pluginar" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Stopp" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Filhandlingar" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "&Alltid øvst" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Bruk \"dra && slepp\" for å flytte handlingar mellom køane" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eige vindauge" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Sett først i køen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Sett sist i køen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Kø" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fjern frå køen" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eige vindauge" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Sett alt på pause" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Følg linkar" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "&Når mappa finst frå før" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finst" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finst" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametre:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Sett opp" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Kryptér" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finst" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Kopiér dato/tid" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Til &bakgrunn" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Når fila finst" #: uaccentsutils.rsstraccents #, fuzzy msgctxt "uaccentsutils.rsstraccents" msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped #, fuzzy msgctxt "uaccentsutils.rsstraccentsstripped" msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Dato tatt" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Høgd" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Breidd" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabrikant" #: uexifreader.rsmodel msgid "Camera model" msgstr "Kameramodell" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientering" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Finn ikkje fila, men ho kan trengast for å validere den endelege kombinasjonen av filer:\n" "%s\n" "\n" "Gjer fila tilgjengeleg og klikk \"OK\" når du er klar,\n" "eller klikk \"Avbryt\" for å halda fram utan fila." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annullér hurtigfilter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annullér aktuell handling" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Tast inn filnamn med filending for den 'droppa' teksten" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Tekstformat som skal importerast" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Skadd:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Generelt:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Manglar:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Lesefeil:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Vellukka:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Tast inn kontrollsum og vél algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifisér kontrollsum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Vil du sletta filter før dette nye søket?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Utklipp inneheld ingen gyldige data for verktøyslinja." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;Aktivt panel;Venstre panel;Høgre panel;Filhandlingar;Konfigurasjon;Nettverk;Ymse;Parallellport;Print;Merke;Sikkerhet;Utklipp;FTP;Navigasjon;Hjelp;Window;Kommandolinje;Verktøy;Vis;Brukar;Fane;Sortering;Logg" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Tradisjonell sortering;A-Å sortering" #: ulng.rscolattr msgid "Attr" msgstr "Attributt" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dato" #: ulng.rscolext msgid "Ext" msgstr "Ending" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Namn" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Storleik" #: ulng.rsconfcolalign msgid "Align" msgstr "Justering" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Tittel" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Slett" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feltinnhald" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Flytt" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Breidd" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Tilpass kolonne" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Sett filassosiasjon" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Stadfestar kommandolinje og parametre" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopiér (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importert DC-verktøylinje" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importert DC-verktøylinje" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppaTekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppetHTML" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppaRTF" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppaTXT" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppaUTF16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppaUTF8" #: ulng.rsdiffadds msgid " Adds: " msgstr " Legg til: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Slettar: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Dei to filene er identiske!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Matcher: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Endrar: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kodar" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Avbryt" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Alle assosierte filer" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Legg til" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Auto-omdøyp kildefiler" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Avbryt" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "&Samanlikn innhald" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Gå vidare" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Kopiér inn i" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "&Kopiér alle inn i" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Avslutt program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "&Ignorér" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "&Ignorér alle" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nei" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ingen" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Andre" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Overskriv" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "&Overskriv alle" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "&Overskriv alle større" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "&Overskriv alle eldre" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "&Overskriv alle mindre" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Omdøyp" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Gjenoppta" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Prøv på nytt" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "&Som administrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Hopp over" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "&Hopp over alle" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Lås opp" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiér fil(er)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Flytt fil(er)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "&Pause" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Start" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kø" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Fart %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Fart %s/s, gjenståande tid %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indikator for brukt/ledig plass" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<utan drev-etikett>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<utan medium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commanders interne editor." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gå til linje:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gå til linje" #: ulng.rseditnewfile msgid "new.txt" msgstr "ny.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Filnamn:" #: ulng.rseditnewopen msgid "Open file" msgstr "Opn fil" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Bakover" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Søk" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Framover" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Erstatt" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "med ekstern editor" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "med intern editor" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Utfør i eit skall" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Utfør i terminal og lukk" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Utfør i terminal, som forblir open" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" ikkje funne i linje %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Ingen filending definert før kommando \"%s\", som blir ignorert." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Venstre;Høgre;Aktivt;Inaktivt;Begge;Ingen" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nei;Ja" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Eksportert_frå_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Spør;Overskriv;Hopp over" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Spør brukar;Kopiér inn i alle filer;Hopp over alle filer" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Spør brukar;Overskriv alle filer;Overskriv alle eldre filer;Hopp over alle filer" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Spør brukar;Unnlat innstilling;Ignorér feil" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Allslags filer" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Lagr oppsettsfiler" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC-hint-filer" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Favorittmappe-filer" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Utførbare filer" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini-oppsettsfiler" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Tradisjonell(e) .tab-fil(er)" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC-verktøyrad-filer" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC-verktøyrad-filer" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml-oppsettsfiler" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definér mal" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nivå" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "alle (uavgrensa djup)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "bare aktuell mappe" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Mappa %s finst ikkje!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Funne: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Lagr søk som mal" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Namn på mal:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Gjennomsøkt: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanner" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Finn filer" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Gjennomsøkingstid: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Start ved" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "" #: ulng.rsfontusageviewerbook #, fuzzy msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "&Skrifttype i Bokvisar" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s av %s ledig" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s ledig" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Opna dato/tid" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributt" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Kommentar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimert storleik" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Oppretta dato/tid" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Ending" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Endr dato/tid" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link til" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Endret dato/tid" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Namn" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Namn utan filending" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Eigar" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Sti" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Storleik" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Klarte ikkje oppretta hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "ingen;Namn, a-z;Namn, z-a;Ext, a-z;Ext, z-a;Storleik 9-0;Storleik 0-9;Dato 9-0;Dato 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Åtvaring! Dersom ei .hotlist-fil blir gjenoppretta, blir den eksisterande lista overskrive av den importerte fila.\n" "\n" "Vil du gå vidare?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopierings-/flyttingsdialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Samanlikningsprogram" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Redigér kommentar-dialog" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Finn filer" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hovudvindauget" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synkronisér mapper" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Framvisar" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Et oppsett med dette namnet finst frå før.\n" "Vil du overskriva det?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Er du sikker på at du vil gjenoppretta standard?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Er du sikker på at du vil sletta oppsett \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopi av %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Tast inn nytt namn" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Du må bevara minst ei hurtigtastfil." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nytt namn" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" oppsett har blitt endra.\n" "Vil du lagra det nå?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Ingen hurtigtast med \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Etter kommandonamn;Etter hurtigtast(gruppert);Etter hurtigtast(ein pr rad)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan ikkje finna referanse til standard verktøylinjefil" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Liste med \"Søk...\"-vindauge" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Innskrenk val" #: ulng.rsmarkplus msgid "Select mask" msgstr "Utvid val" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Oppgje filtype:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "En kolonnevisning med det namnet finst allereide." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "For å endra den aktuelle redigeringa av kolonneoppsettet, skal den aktuelle anten LAGRAST, KOPIERAST eller SLETTAST" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Innstillingar for kolonnar" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Tast inn nytt brukarvalt kolonnenamn" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Handlingar" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Oktal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Opprett snarveg..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "&Fjern nettverksdrev..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Redigér" #: ulng.rsmnueject msgid "Eject" msgstr "Skubb ut" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Pakk ut her..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Opprett nett&verksdrev..." #: ulng.rsmnumount msgid "Mount" msgstr "Montér" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Ny" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kan ikkje finna mediet" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Opn" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Opn med" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Pakk her..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Gjenopprett" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortér etter" #: ulng.rsmnuumount msgid "Unmount" msgstr "Avmontér" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vis" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Alle Double Commanders interne kommandoar" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Omtale: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ekstra parametre til pakkeprograms kommandolinje:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Vil du omslutta med hermeteikn?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Feil i CRC32 for fil:\n" "\"%s\"\n" "\n" "Vil du ta vare på den skadde fila?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Du kan ikkje kopiera/flytta fila \"%s\" til seg sjølv!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Kan ikkje sletta mappa %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kan ikkje overskriva mappa \"%s\" med \"%s\", som ikkje er ei mappe" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Endring av aktuell mappe til \"%s\" feila!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Lukk alle inaktive faner?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Fana (%s) er låst! Lukk likevel?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Stadfesting av parameter" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Er du sikker på at du vil avslutta?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Fila %s er endra. Ønskjer du å kopiera ho tilbake?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Kunne ikkje kopiera tilbake - vil du behalda den endra fila?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopiér %d valde filer/mapper til?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopiér \"%s\" til?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Opprett ein ny filtype \"%s-filer\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Tast inn plassering og filnamn der DC verktøylinjefila skal lagrast" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Brukardefinert handling" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Slett den delvist kopierte fila ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Er du sikker på, at du vil sletta dei %d valde filene/mappene?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Vil du flytta desse %d objekta til Papirkorga?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Er du sikker på, at du vil sletta den valde fila \"%s\" ?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Vil du flytta \"%s\" til Papirkorga?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan ikkje flytta \"%s\" til Papirkorg! Slett direkte?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Drevet er ikkje tilgjengelig" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Tast inn inn brukarvalt namn på handlinga:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Tast inn inn filending:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Tast inn namn:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Tast inn namnet på den nye filtypen som skal ha filendinga \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-feil i arkivdata" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datafeil" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Kan ikkje kopla til server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Kan ikkje kopiera fil %s til %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Det finst allereide mappe med namnet \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datoen %s er ikkje støtta" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Feil: Mappa \"%s\" eksisterer allereide! Oppgje eit anna namn.!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Avbrote av brukar" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Klarte ikkje lukka fil" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan ikkje oppretta fil" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Ikkje fleire filer i arkivet" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan ikkje opna eksisterande fil" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Klarte ikkje lesa fil" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Klarte ikkje skriva til fil" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Kan ikkje oppretta mappe %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ugyldig link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ingen filer funne" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ikkje nok minne" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funksjonen ikkje støtta!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Feil i kontekstmenyens kommando" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Feil ved innlesing av oppsett" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaksfeil i regulært uttrykk!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Kan ikkje omdøypa fil %s til %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan ikkje lagra assosiasjonen!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan ikkje lagra fil" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Kan ikkje innstilla attributt for \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Kan ikkje innstilla dato/tid for \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Kan ikkje oppretta eigar/gruppe for \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Kan ikkje innstilla skrive/leserettar for \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Bufferen er for liten" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "For mange filer å pakka" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arkivformat ukjent" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Utførbar: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Utgangs-status:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerna alle postar i favorittmappelista di? (Kan ikkje angrast!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Dra andre oppføringar hit" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Tast namn til denne nye favorittfana:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Lagrar namnet på ny favorittfane" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Antall korrekt eksporterte favorittfaner: %d av %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Skal historikken for ny favorittfane lagrast som ei ekstra standardinnstilling:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Antall korrekt importerte fil(er): %d av %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Klassiske faner importerte" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Vél .tab file(r) til import (kan vera fleire på ein gong!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Endringar på favorittfana er ikkje lagra enno. Vil du lagra dei før du held fram?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Hald fram med å lagra mappehistorikken med favorittfaner:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Undermeny-namn" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dette vil lesa inn favorittfaner: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Lagr aktiv fane og overskriv eksisterande favorittfane" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Fil %s er endra, vil du lagra?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overskriv:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Fil %s finst, vil du overskriva?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Med fil:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Fila \"\"%s\" ikkje funne." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive filhandlingar" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Uavslutta filhandlingar. Blir Double Commander lukka, kan det føra til tap av data." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Målnamnet er lenger (%d) enn %d teikn!\n" "%s\n" "Dei fleste program vil ikkje handtera ei fil/mappe med så langt namn!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Fila %s er markert som skrivesperra. Vil du sletta ho?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Er du sikker på at du vil henta fila på nytt og mista endringane?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Fila \"%s\" er for stor for målsystemet!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Mappa %s eksisterer. Vil du kopiera inn i?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Følg symlink \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Vél tekstformatet som skal importerast" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Legg til %d valde mapper" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Legg til valde mapper: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Legg til aktuell mappe: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Utfør kommando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Oppsett av favorittmapper" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerna alle postar i favorittmappelista di? (Kan ikkje angrast!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dette utfører fylgjande kommando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Det er namnet på favorittmappa " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dette flyttar aktiv ramme til følgjande sti:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Og inaktiv ramme blir endra til følgjande sti:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Backup av oppføringane var mislukka..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Eksport av oppføringane var mislukka..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Eksportér alle!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksportér favorittmappe - Vél dei oppføringane som du vil eksportera" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Eksportér valde" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importér alle!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importér favorittmappe - Vél dei oppføringane som du vil importera" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importér valde" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Plassering:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Finn \".hotlist\" fila, som skal importerast" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Favorittmappas namn" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Antall nye postar: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ikkje noko vald for eksport!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Favorittmappas sti" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Legg til vald mappe igjen: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Legg til aktuell mappe igjen: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Tast inn plassering og filnamn på favorittmappa som skal gjenopprettast" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Kommando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(enden av undermeny)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "&Menynamn:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Namn:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(delestrek)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Undermeny-namn" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Favorittmappas mål" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Bestem om du vil ha aktiv ramme sortert i ein bestemt rekkefølgje etter endring av mappe" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Bestem om du vil ha inaktiv ramme sortert i ein bestemt rekkefølgje etter endring av mappe" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Nokre funksjonar til å velja egna sti - relative, absolutte, spesielle windowsmapper ol." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Samla antall lagra oppføringar: %d\n" "\n" "Backuppens filnamn: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Samla antall eksporterte oppføringar: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Vil du sletta alle element i undermeny [%s]?\n" "Eit NEI-svar vil bare sletta menyskiljeteikn, men vil bevara element inne i undermenyen." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Tast inn plassering og filnamn der favorittmappe skal lagrast" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Ugyldig fillengd for fil : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Sett inn neste disk e.l.\n" "\n" "Trengst for å fullføra skriving av denne fila:\n" "\"%s\"\n" "\n" "Antall byte som gjenstår å skriva: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Feil i kommandolinje" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ugyldig filnamn" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ugyldig format på oppsettsfila" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Ugyldig heksadesimalt tall: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ugyldig sti" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Stien %s inneheld ikkje-tillatne teikn." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dette er ikkje ein gyldig plugin!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Denne plugin er laga til Double Commander for %s.%s Han virkar ikkje saman med Double Commander for %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ugyldig sitering" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ugyldig val." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Les inn filliste..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Finn TC-oppsettsfiler (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Finn TC-exe fila (totalcmd.exe eller totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopiér fil %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Slett fil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Feil: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Start ekstern" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Eksternt resultat" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Pakk ut fil %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Opprett link %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Opprett mappe %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Flytt fil %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Pakk til fil %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Programlukking" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Program-start" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Fjern mappe %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Ferdig: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Opprett symlink %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Kontroller filintegritet %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Sikker sletting av fil %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Sikker sletting av mappe %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hovudpassord" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Tast inn hovudpassordet:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Ny fil" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Neste volum blir pakka ut" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ingen filer" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ingen filer valde." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" "Ikkje nok ledig plass på måldrevet.\n" "Vil du halda fram?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ikkje nok ledig plass på måldrevet.\n" "Vil du prøva på nytt?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Kan ikkje sletta fil %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ikkje mogleg." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objektet eksisterer ikkje!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Kan ikkje fullførast fordi fila er open i eit anna program:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Førehandsvisning nedanfor. Du kan markera filer for straks å få eit inntrykk av innstillingane." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Passord:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Passorda er ikkje like!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Tast inn passordet:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Passord (brannmur):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "For kontroll av passordet, tast det inn på nytt:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Fjern %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Forinnstilling \"%s\" finst allereie. Overskriv?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problem med utføring av kommando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Filnamn for droppa tekst:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Gjer fila tilgjengeleg. Vil du prøva på nytt?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Tast inn nytt namn for denne favorittfana" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Tast inn nytt namn for denne menyen" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Omdøypa/flytta %d valde filer/mapper?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Omdøyp/flytt \"%s\" til?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Vil du erstatta denne teksten?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Start Double Commander på nytt for å ta i bruk endringane" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Vél kva for filtype filendinga \"%s\" skal leggjast til" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Markert: %s av %s, filer: %d av %d, mapper: %d av %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Vél exe-fil til" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Vél bare kontrollsumfiler!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Vél plassering av neste volum" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Oppgje volum-etikett" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Spesialmapper" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Legg til sti frå aktiv ramme" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Legg til sti frå inaktiv ramme" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Gå til og bruk valde sti" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Bruk miljøvariabel..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gå til Double Commanders spesialsti..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gå til miljøvariabel..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gå til ei anna spesial Windowsmappe..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gå til spesial Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Gjer relativ til favorittmappas sti" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Gjer stien absolutt" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Gjer relativ til spesial Double Commander sti..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Gjer relativ til miljøvariabel..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Gjer relativ til spesial Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Gjer relativ til anna spesial Windowsmappe..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Bruk Double Commanders spesialsti..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Bruk favorittmappas sti" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Bruk anna spesial Windowsmappe..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Bruk spesial Windowsmappe (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Fana (%s) er låst! Vil du opna mappa i ei anna fane?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Omdøyp fane" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nytt namn:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Sti:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Feil! Kan ikkje finna TC-konfigurasjonsfila:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Feil! Kan ikkje finna TC-konfigurasjons EXE-fil:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Feil! TC køyrer framleis, men burde vore lukka i samband med denne handlinga.\n" "Lukk TC og trykk OK eller trykk Avbryt for å avbryta." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Feil! Kan ikkje finna utdatamappe for ynskt TC-verktøyrad:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Tast inn plassering og filnamn der TC-verktøylinjefila skal lagrast" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "ÅTVARING: Avslutting av ein prosess kan gje uønska resultat, inkludert datatap og ustabilt system. Prosessen får ikkje høve til å lagra tilstand eller data før han avsluttar. Er du sikker på at du vil avslutta prosessen?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" er nå i Utklipp" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Den valde fila har ukjent ending" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Finn \".toolbar\"-fil, som skal importerast" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Finn \".BAR\"-fil, som skal importerast" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Tast inn plassering og filnamn for verktøylinja som skal gjenopprettast" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Lagra!\n" "Verktøylinjas filnamn: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Du har vald for mange filer." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Ikkje fastslått" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "FEIL: Uventa bruk av trevisning!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<utan ending>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<UTAN NAMN>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Brukarnamn:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Brukarnamn (brannmur):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFISERING:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Vil du verifisera valde kontrollsummar?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Målfil øydelagt, kontrollsum sum stemmer ikkje!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Volum-etikett:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Tast inn volum-storleik:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Sikker sletting av %d valde filer/mapper?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Sikker sletting av \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "med" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Feil passord!\n" "Prøv ein gong til!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automatisk omdøyping til \"namn (1).ext\", \"namn (2).ext\" osb.?" #: ulng.rsmulrencounter #, fuzzy msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Definer teljar [C]" #: ulng.rsmulrendate #, fuzzy msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dato" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension #, fuzzy msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Ending" #: ulng.rsmulrenfilename #, fuzzy msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Namn" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Uendra;STORE;små;Første stor;Første I Kvart Ord Stor;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter #, fuzzy msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Definer teljar [C]" #: ulng.rsmulrenmaskday msgid "Day" msgstr "" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension #, fuzzy msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Ending" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "" #: ulng.rsmulrenmaskname #, fuzzy msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Namn" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "" #: ulng.rsmulrenplugins #, fuzzy msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Pluginar" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Åtvaring! like namn!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Fil inneheld feil antal linjer: %d, skal vera %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Bevar;Stryk;Spør" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Ingen intern likeverdig kommando" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Orsak, ikkje noko \"Søk...\"-vindauge ennå..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Orsak, ikkje noko anna \"Søk...\"-vindauge å lukka og fjerna frå minne..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Utvikling" #: ulng.rsopenwitheducation msgid "Education" msgstr "Opplæring" #: ulng.rsopenwithgames msgid "Games" msgstr "Spel" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafikk" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Nettverk" #: ulng.rsopenwithoffice msgid "Office" msgstr "Kontor" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Anna" #: ulng.rsopenwithscience msgid "Science" msgstr "Forskning" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Oppsett" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Tilbehør" #: ulng.rsoperaborted msgid "Aborted" msgstr "Avbrote" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Opprettar kontrollsumfil" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Opprettar kontrollsumfil i \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Opprettar kontrollsumfil av \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Reknar" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Reknar \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Slår saman" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Slår saman filer i \"%s\" til \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopierer" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopierer frå \"%s\" til \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopierer \"%s\" til \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Opprettar mappe" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Opprettar mappe \"\"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Slettar" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Slettar i \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Slettar \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Utfører" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Utfører \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Pakkar ut" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Pakkar ut frå \"%s\" til \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Avslutta" #: ulng.rsoperlisting msgid "Listing" msgstr "Opplistar" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Opplistar \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Flyttar" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Flyttar frå \"%s\" til\"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Flyttar \"%s\" til \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ikkje starta" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakkar" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakkar frå \"%s\" til \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Pakkar \"%s\" til \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Har pause" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperrunning msgid "Running" msgstr "Køyrer" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Innstiller eigenskap" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Innstiller eigenskap i \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Innstiller eigenskap av \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Deler opp" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Deler opp \"%s\" til \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Startar" #: ulng.rsoperstopped msgid "Stopped" msgstr "Stoppa" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stoppar" #: ulng.rsopertesting msgid "Testing" msgstr "Kontrollerer" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Kontrollerer i \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Kontrollerer \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verifiserer kontrollsum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Verifiserer kontrollsum i \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Verifiserer kontrollsum av \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Ventar på tilgang til filkjelde" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Ventar på brukarrespons" #: ulng.rsoperwiping msgid "Wiping" msgstr "Slettar (fullstendig)" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Slettar (fullstendig) i \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Slettar (fullstendig) \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Arbeider" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "&Legg til i starten;Legg til i slutten;Legg til smart" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Legg til nytt hint for filtype" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Modusavhengig tilleggskommando" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Legg til om der er innhald" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Arkivfil (langt namn)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Vél pakkeprogram" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Arkivfil (kort namn)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Endre koding i pakkeliste" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på at du vil sletta: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Eksportert pakkeprogram-oppsett" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Eksportér pakkeprogram-oppsett" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport av %d element til fil \"%s\" fullført." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Vél dei som du vil eksportera" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Fil-liste (lange namn)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Fil-liste (korte namn)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importér pakkeprogram-oppsett" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import av %d element frå fil \"%s\" fullført." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Vél fil for å importera pakkeprogram-oppsett frå" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Vél dei som du vil importera" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Bruk bare namn, utan sti" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Bruk bare sti, utan namn" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Pakkeprogram (langt namn)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Pakkeprogram (kort namn)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Alle namn i hermeteikn" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Namn med blanke i hermeteikn" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Eitt filnamn som skal prosesserast" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Til undermappe" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Bruk ANSI-koding" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Bruk UTF8-koding" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Tast plassering og filnamn der pakkeprogram-oppsett skal lagreast" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arkivtype-namn:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Assosier plugin \"%s\" med:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Først;Sist;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Tradisjonelt;Alfabetisk (men med språkval øvst)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Full utfolding;Full samanfolding" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivt vindauge til venstre, inaktivt vindauge til høgre (tradisjonelt); Venstre vindauge til venstre, høgre til høgre" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Tast inn filending" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Legg til i starten;Legg til i slutten;Alfabetisk sortering" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "eige vindauge;minimert eige vindauge;handlingspanel" #: ulng.rsoptfilesizefloat msgid "float" msgstr "flytande" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Snarvegen %s for cm_Delete vil bli registrert så han kan brukast til å angra denne innstillinga." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Legg til hurtigtast for %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Legg til hurtigtast" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Klarer ikkje leggja til hurtigtast" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Endr hurtigtast" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Kommando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Snarvegen %s for cm_Delete har ein parameter som overstyrer denne innstillinga. Vil du endra denne til å bruka dei globale innstillingane?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Snarvegen %s for cm_Delete treng endring av ein parameter for å passa til snarvegen %s. Vil du endra parameteren?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Omtale" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Redigér hurtigtast for %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Korrigér parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Hurtigtast" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Hurtigtastar" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<tom>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Innstill snarveg for å sletta fil" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "For at denne innstillinga skal kunne fungera med snarvegen %s, skal snarvegen %s tildelast til cm_Delete. Men han er allereie tildelt til %s. Vil du endra det?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Snarvegen %s for cm_Delete er ein sekvens-snarveg som det ikkje kan tildelast ein snarveg med omvendt Shift for. Denne innstillinga vil difor kanskje ikkje fungera." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Hurtigtast i bruk" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy, badformat msgid "Shortcut %s is already used." msgstr "Hurtigtast %s er allereide i bruk til %s." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Endr han til %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "brukt av %s i %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "brukt til denne kommandoen, men med andre parametre" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Pakkeprogram" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Oppfrisk automatisk" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Eigenskap" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kompakt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Fargar" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Kolonnar" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Oppsett" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Brukardefinerte kolonnar" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Favorittmapper" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Dra & slepp" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drev-valknapp" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favorittfane" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Filassosiasjoner - ekstra" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Filassosiasjoner" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Ny" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Filhandlingar" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Filvindauge" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Filsøk" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visning" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Visning - ekstra" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Filkategoriar" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Fane" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Fane - ekstra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fontar" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Framhevarar" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Hurtigtastar" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikon" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorér-liste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tastar" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Språk" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Utsjånad" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Loggfil" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Ymse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mus" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Innstillingar er endra i \"%s\"\n" "\n" "Vil du lagra endringar?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Pluginar" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hurtig søking/filtrering" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Verktøylinje" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Verktøy" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Hint" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Trevisning" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Fargar for trevisning" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ingen;Kommandolinje;Hurtig-søking;Hurtig-filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bruk venstre knapp;Bruk høgre knapp;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "øvst i fillista; etter mapper (dersom mapper er sorterte før filer);på sortert plass ;nedst i fillista" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Personalisert dynamisk;Personalisert byte;Personalisert kilobyte;Personalisert megabyte;Personalisert gigabyte;Personalisert terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s er allereide tildelt fylgjande filtyper:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "&Slå av" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Slå på" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Omtale" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Filnamn" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Etter filending" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Etter plugin" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Namn" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Sortering av WCX-pluginar er bare mogleg når pluginar blir viste etter filending!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Assosiér med" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Omdøyp filtype-hint" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Skill;&Ikkje skill" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Filer;&Mapper;Filer &og mapper" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skjul filterpanel når ufokusert;Ta vare på oppsett til neste økt" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "ikkje skill;bruk lokale innstillingar (aA-bB-cC);først STORE så små bokstavar (ABC-abc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortér etter namn og vis først;sortér som filer og vis først;sortér som filer" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetisk, inklusive teikn med aksentar;Naturleg sortering: Alfabetisk og numerisk" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Oppe;Nede;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "D&elestrek;&Intern kommando;&Ekstern kommando;&Meny" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "For å endra oppsett av filtype-hint, anten APPLY eller DELETE gjeldande redigering" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Filtype-hint namn:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" finst allereide!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på at du vil sletta: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Eksportert oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Eksportér oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport av %d element til fil \"%s\" fullført." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Vél dei som du vil eksportera" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importér oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import av %d element frå fil \"%s\" fullført." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Vél fil for å importera oppsett for filtype-hint frå" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Vél dei som du vil importera" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Tast plassering og filnamn der oppsett for filtype-hint skal lagrast" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Vis hint for filer i filvindauge" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Tradisjonell DC - Kopi (x) filnamn.ext;Windows - filnamn (x).ext;Andre - filnamn(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "bevar plassering;bruk same plassering som for nye filer;til sortert plassering" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Med komplett absolutt sti;Sti relativ til %COMMANDER_PATH%;Relativ til fylgjande" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "inneheld" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Felt \"\"%s\" ikkje funne!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Plugin \"%s\" ikkje funne!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Eining \"%s\" ikkje funne for felt \"%s\"!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Filer: %d, mapper: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Kan ikkje endra tilgang for \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Kan ikkje endra eigar for \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fil" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Ny mappe" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Namngitt røyr (pipe)" #: ulng.rspropssocket msgid "Socket" msgstr "Sokkel" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Spesiell blokk-eining" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Spesiell teikn-eining" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolsk link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ukjent type" #: ulng.rssearchresult msgid "Search result" msgstr "Søkeresultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "SØK" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<mal utan namn>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Eit filsøk som bruker DSX plugin er allereide i gong.\n" "Dette må fullførast før eit nytt kan startast." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Eit filsøk som bruker WDX plugin er allereide i gong.\n" "Dette må fullførast før eit nytt kan startast." #: ulng.rsselectdir msgid "Select a directory" msgstr "Vél ei mappe" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Vél ditt vindauge" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Vis hjelp for %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategori" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolonne" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Kommando" #: ulng.rssimpleworderror msgid "Error" msgstr "Feil" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Feila!" #: ulng.rssimplewordfalse msgid "False" msgstr "Falsk" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Filnamn" #: ulng.rssimplewordfiles msgid "files" msgstr "filer" #: ulng.rssimplewordletter msgid "Letter" msgstr "Bokstav" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Vellukka!" #: ulng.rssimplewordtrue msgid "True" msgstr "Sann" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbeidsmappe" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" "Antall fil(er): %d og mappe(r): %d\n" "Storleik: %s (= %s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Klarte ikkje oppretta mål-mappe!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Ukorrekt filstorleik-format!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan ikkje dela opp fil!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Meir enn 100 delar! Vil du halda fram?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatisk;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Vél mappe:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Førehandsvis her" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Andre" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Sidenote" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Flat" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Avgrensa" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Enkel" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fantastisk" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Imponerande" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Strålande" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Vél mappe frå Dir-historien" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Vél dine favorittfaner:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Vél kommando frå kommandolinjehistorien" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Vél handling frå hovudmenyen" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Vél handling frå Verktøylinja" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Vél mappe frå favorittmappe:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Vél mappe frå filvisningshistoria" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Vél fil eller mappe" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Klarte ikkje oppretta symlink." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Rein tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ingen handling;Lukk fane;Opn favorittfane;Opn menyen Faner" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dag(ar)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Time(r)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minutt" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Månad(er)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Veke(r)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "År" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Omdøyp favorittfane" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Omdøyp favorittfanes undermeny" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Samanlikningsprogram" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Feil ved opning av samanlikningsprogram" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Feil ved opning av Editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Feil ved opning av Terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Feil ved opning av Framvisar" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Bruk systeminnstilling;1 sekund;2 sekund;3 sekund;5 sekund;10 sekund;30 sekund;1 minutt;Aldri skjul" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Kombinér DC- og system-hint, DC først (tradisjonelt);Kombinér DC- og system-hint, system først;Vis DC-hint om mogleg og system dersom ikkje;Vis bare DC-hint;Vis bare system-hint" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Framvisar" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapportér gjerne denne feilen til \"bug-tracker\" med ein omtale av kva du gjorde, og følgjande fil: %s Trykk %s for å halda fram eller %s for å avbryta programmet." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Begge panel, frå aktivt til inaktivt" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Begge panel, frå venstre til høgre" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Panelets sti" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Omslutt kvart filnamn med parentesar e.l." #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Bare filnamn, ingen filending" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Komplett filnamn (sti+filnamn)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hjelp med \"%\" variablar" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Be brukaren om å tasta inn ein parameter med ein foreslått standardverdi" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Venstre panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Mellombels filnamn frå liste med filnamn" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Mellombels filnamn frå liste med komplette filnamn (sti+filnamn)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Filnamn i lista i UTF-16 med BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Filnamn i lista i UTF-16 med BOM, inne i hermeteikn" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Filnamn i lista i UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Filnamn i lista i UTF-8, inne i hermeteikn" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Mellombels filnamn frå liste med filnamn med relativ sti" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Bare filendingar" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Bare filnamn" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Andre døme på kva som er mogleg" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Sti, utan skiljeteikn på slutten" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Frå her til enden av linja, prosent-indikatoren er \"#\"-teiknet" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Returnér prosentteikn" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Frå her til enden av linja: prosent-indikatoren er bak \"%\"-teiknet" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Sett \"-a\" eller noko anna framfor kvart namn" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Spør brukar etter parametre;Standardverdi foreslått]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Filnamn med relativ sti" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Høgre panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Komplett sti til den 2. valde fil i høgre panel" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Vis kommandoen før utføring" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Enkel melding]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Viser ei enkel melding" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktivt panel (kjelde)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktivt panel (mål)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Filnamn vil bli siterte frå her (standard)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Kommandoar vil bli utførte i terminal, terminal forblir open" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Stiar får eit skiljeteikn på slutten" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Filnamn vil ikkje bli siterte frå her" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Kommandoar vil bli utførte i terminal, terminal blir deretter lukka" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Stiar får ikkje skiljeteikn på slutten (standard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Nettverk" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commanders interne framviser." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Dårleg kvalitet" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodar" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Bildetype" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Ny storleik" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s ikkje funne!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Penn;Ramme;Ellipse" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "med ekstern framvisar" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "med intern framvisar" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Antal bytta ut: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Ingen utbytting er utført." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.nl.po�����������������������������������������������������������0000644�0001750�0000144�00001374556�15104114162�017303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2022-02-18 21:01+0100\n" "Last-Translator: Pjotr <pjotrvertaalt@gmail.com>\n" "Language-Team: Dutch\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Nederlands\n" "X-Generator: Poedit 2.3\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergelijken... %d%% (ESC om te annuleren)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Links: verwijder %d bestand(en)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Rechts: verwijder %d bestand(en)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Gevonden bestanden: %d (Identiek: %d, Verschillend: %d, Uniek links: %d, Uniek rechts: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Links naar rechts: kopieer %d bestanden, totale grootte: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Rechts naar links: kopieer %d bestanden, totale grootte: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Kies sjabloon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Controleer vrije ruimte" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopieer attributen" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopieer eigendom" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopieer rechten" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopieer datum/tijd" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corrigeer koppelingen" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Laat alleen-lezen-vlag vallen" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Lege mappen uitsluiten" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Volg koppelingen" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserveer ruimte" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Kopiëren bij schrijven" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Verifiëren" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Wat te doen bij niet kunnen instellen bestandstijd, attributen, enz." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Gebruik bestandsjabloon" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Als map bestaat" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Als bestand bestaat" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Wanneer eigenschap niet ingesteld kan worden" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<geen sjabloon>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "Sluiten" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopieer naar klembord" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "Over" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Bouwsel" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Invoeren" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Thuispagina:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Revisie" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versie" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Annuleren" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&Oké" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Terugzetten" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Kies attributen" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "A&rchiefbestand" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Gecomprimeerd" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Map" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Ver&sleuteld" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Verborgen" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Alleen-&lezen" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Verspreid" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Kleverig" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolische koppeling" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "Systeem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Tijdelijk" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-attributen" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Algemene attributen" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Groep" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Overig" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Eigenaar" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Uitvoeren" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Lezen" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Als te&kst:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Schrijven" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Ijkpunt" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Gegevensgrootte ijkpunt: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Tijd (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Snelheid (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Bereken checksum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Open checksum-bestand nadat de taak voltooid is" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Maak aparte checksum aan voor elk bestand" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Sla checksumbestand(en) op in:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Verifieer checksum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codering" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "&Toevoegen" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Verbinden" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "Ver&wijderen" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "&Bewerken" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Verbindingsbeheerder" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Verbind met:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Voeg toe aan wachtrij" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Opties" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sla deze opties op als standaard" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Kopieer bestand(en)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nieuwe wachtrij" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Wachtrij 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Wachtrij 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Wachtrij 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Wachtrij 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Wachtrij 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Beschrijving opslaan" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Commentaar bij bestand/map" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Bewerk commentaar voor:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "&Codering:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automatisch vergelijken" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binaire modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Annuleren" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annuleren" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Kopieer rechterblok" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopieer rechterblok" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Kopieer linkerblok" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopieer linkerblok" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Kopiëren" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Knippen" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Verwijderen" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Plakken" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Opnieuw uitvoeren" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Opnieuw uitvoeren" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecteer &alles" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Ongedaan maken" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Ongedaan maken" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Af&sluiten" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Zoeken" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Zoeken" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Zoek volgende" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Zoek volgende" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Zoek vorige" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Zoek vorige" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "Vervangen" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Vervangen" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Eerste verschil" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Eerste verschil" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Ga naar regel..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Ga naar regel" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Negeer hoofdletters/kleine letters" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Negeer spaties" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Blijf schuiven" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Laatste verschil" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Laatste verschil" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Regelverschillen" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Volgende verschil" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Volgende verschil" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Open links..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Open rechts..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Schilder achtergrond" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Vorige verschil" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Vorige verschil" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "Herladen" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Herladen" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Opslaan" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Opslaan" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "OPslaan als..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Opslaan als..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Opslaan links" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Opslaan links" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Sla links op als..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sla links op als..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Opslaan rechts" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Opslaan rechts" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Sla rechts op als..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sla rechts op als..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Vergelijken" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Vergelijken" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Codering" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codering" #: tfrmdiffer.caption msgid "Compare files" msgstr "Vergelijk bestanden" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acties" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "Codering" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Bestand" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Opties" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Voeg nieuwe sneltoets toe aan volgorde" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Verwijder laatste sneltoets uit volgorde" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Kies sneltoets uit de lijst van overgebleven beschikbare toetsen" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Alleen voor deze bedieningen" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parameters (elk op een aparte regel):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Sneltoetsen:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Over" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "Instellingen" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Instellingen" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiëren" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopiëren" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Knippen" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Knippen" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Verwijderen" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Verwijderen" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Zoeken" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Zoeken" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Zoek volgende" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Zoek volgende" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Zoek vorige" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Ga naar regel..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "MAC (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Plakken" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Plakken" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Herongedaan maken" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Opnieuw uitvoeren" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "Vervangen" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Vervangen" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecteer &alles" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Selecteer alles" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Ongedaan maken" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Ongedaan maken" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Sluiten" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Af&sluiten" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Afsluiten" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Nieuw" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nieuw" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Openen" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Openen" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Herladen" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "Opslaan" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Opslaan" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Opslaan &als..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Opslaan als" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Bewerker" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "&Hulp" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Codering" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Openen als" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Opslaan als" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Bestand" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Opmaakmarkering" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Einde van regel" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Annuleren" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Oké" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Hoofdlettergevoeligheid" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Zoek vanaf dakje ^" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Reguliere uitdrukkingen" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Alleen geselecteerde tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Alleen hele woorden" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Optie" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Vervang door:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Zoek naar:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Richting" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Doe dit voor &alle huidige objecten" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Bestanden uitpakken" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Pak bestandpadnamen uit indien opgeslagen met bestanden" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Pak elk archiefbestand uit in &aparte submap (naam van het archiefbestand)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Overschrijf bestaande bestanden" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Naar de map:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Pak bestanden uit die overeenkomen met bestandmasker:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Wachtwoord voor versleutelde bestanden:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluiten" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Wacht..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Bestandsnaam:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "Van:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klik op Sluiten als tijdelijk bestand verwijderd kan worden." #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Naar paneel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Toon alles" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Huidige bewerking:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Van:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Naar:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Eigenschappen" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Klevend" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Sta toe dat bestand wordt uitgevoerd als programma" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groep" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ander" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Bevat:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Gemaakt:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Uitvoeren" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Uitvoeren:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pad:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "Groep" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Laatst benaderd:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Laatste wijziging:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Laatste statuswijziging:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Octaal:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "Eigenaar" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lezen" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Grootte:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symbolische koppeling naar:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Soort:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijven" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Naam" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Waarde" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Attributen" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Invoegtoepassing" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschappen" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Sluiten" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Beëindigen" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Ontsluiten" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Alles ontsluiten" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Ontsluiten" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Pad van uitvoerbaar bestand" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "&Annuleren" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Breek zoekopdracht af en sluit venster" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "Sluiten" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Instellingen van sneltoetsen" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Bewerken" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Voeg toe aan &lijstvenster" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Breek zoekopdracht af, sluit en verwijder uit geheugen" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Voor alle andere bestandzoekopdrachten: breek af, sluit en verwijder uit geheugen" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Ga naar bestand" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Zoek gegevens" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Laatste zoekopdracht" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nieuwe zoekopdracht" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nieuwe zoekopdracht (maak filters leeg)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Ga naar pagina 'Geavanceerd'" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Ga naar pagina 'Laden/opslaan'" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Schakel over naar volgende pagina" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Ga naar pagina 'Invoegtoepassingen'" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Schakel over naar vorige pagina" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Ga naar pagina 'Resultaten'" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Ga naar pagina 'Standaard'" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Starten" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Tonen" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Toevoegen" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hulp" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Opslaan" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Verwijderen" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Laden" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Op&slaan" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Opslaan met 'Beginnen in map'" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Indien opgeslagen dan zal 'Begin in map' worden hersteld bij het laden van de sjabloon. Gebruik dit als u de zoekopdracht wilt vastknopen aan een bepaalde map" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Gebruik sjabloon" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Zoek bestanden" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Hoofdlettergevoelig" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Datum vanaf:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Datum tot:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Bestandgrootte vanaf:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Bestandgrootte tot:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Zoek in archiefbestanden" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Zoek tekst in bestand" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Volg symbolische koppelingen" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Vind bestanden die NIET de tekst bevatten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Niet ouder dan:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Offi&ce XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Geopende tabbladen" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Zoek naar deel van bestandsnaam" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "Reguliere uitdrukking" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Vervang door" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Gekozen mappen en bestanden" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Reguliere uitdrukking" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Tijd vanaf:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Tijd tot:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Gebruik invoegsel voor zoeken:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "dezelfde inhoud" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "dezelfde hash" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "zelfde naam" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Zoek dubbele bestanden:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "zelfde maat" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadecimaal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Geef mapnamen in die uitgesloten zijn van zoekopdrachten, gescheiden door puntkomma" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Geef bestandnamen in die uitgesloten zijn van zoekopdrachten, gescheiden door puntkomma" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Geef bestandnamen in gescheiden door puntkomma" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Invoegsel" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Veld" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Uitvoerder" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Waarde" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mappen" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Bestanden" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Zoek gegevens" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attributen" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Codering:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Sluit submappen uit" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Sluit bestanden uit" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Bestandmasker" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Begin in map" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Doorzoek submappen:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Vorige zoekopdrachten:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "Actie" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Voor alle andere: breek af, sluit en verwijder uit geheugen" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Open in nieuw(e) tabblad(en)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opties" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Verwijder uit lijst" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "Resultaat" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Toon alle gevonden elementen" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Toon in bewerker" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Toon in kijker" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Tonen" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Geavanceerd" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Laden/Opslaan" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Invoegsels" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultaten" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standaard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Zoeken" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Zoeken" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "Achteruit" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Hoofdlettergevoelig" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Reguliere uitdrukkingen" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadecimaal" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Domein:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Wachtwoord:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Gebruikersnaam:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Anoniem verbinden" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Verbinden als gebruiker:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Maak harde koppeling" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "&Bestemming waar de koppeling naar zal verwijzen" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "&Naam van koppeling" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importeer alles!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importeer geselecteerde" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Kies de elementen die u wilt invoeren" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Bij klikken op een submenu, selecteert dit het hele menu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Houd CTRL ingedrukt en klik op elementen om er meerdere te kiezen" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Koppelaar" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Opslaan in..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "&Bestandsnaam" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "Om&laag" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Omlaag" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Verwijderen" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Verwijderen" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "&Omhoog" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Omhoog" #: tfrmmain.actabout.caption msgid "&About" msgstr "Over" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Activeer tab per index" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Voeg bestandsnaam toe aan opdrachtregel" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nieuwe zoekinstantie..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Voeg pad en bestandsnaam toe aan opdrachtregel" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopieer pad naar opdrachtregel" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Invoegsel toevoegen" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "Prestatievergelijking" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Korte weergave" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Korte weergave" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Bereken in gebruik zijnde ruimte" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Wijzig map" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Wijzig map naar uw persoonlijke map" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Wijzig map naar bovenliggende map" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Wijzig map naar root" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Bereken checksum..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "Verifieer checksum..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Maak logboekbestand leeg" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Maak logboekvenster leeg" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Sluit alle tabbladen" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Sluit dubbele tabbladen" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Sluit tabblad" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Volgende opdrachtregel" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Stel opdrachtregel in op de volgende opdracht in de geschiedenis" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Vorige opdrachtregel" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Stel opdrachtregel in op de vorige opdracht in de geschiedenis" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Volledig" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolommenoverzicht" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Vergelijk op inhoud" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Vergelijk mappen" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Vergelijk mappen" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Instellingen van archiveringsprogramma's" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Instellingen van lijst met mapfavorieten" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Instelling van favoriete tabbladen" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Instellingen van maptabbladen" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Instellingen van sneltoetsen" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Instellingen van invoegtoepassingen" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Positie opslaan" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Sla instellingen op" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Instellingen van zoekopdrachten" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Werkbalk..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Instellingen van zweeftips" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Instellingen van boomstructuurmenu" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Instellingen van kleuren van boomstructuurmenu" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Toon contextmenu" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopiëren" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopieer alle tabbladen naar de andere kant" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopieer alle getoonde kolommen" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopieer bestandna(a)m(en) met volledig pad" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopieer bestandna(a)m(en) naar klembord" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopieer namen met UNC-pad" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopieer bestanden zonder om bevestiging te vragen" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopieer volledige pad van gekozen bestand(en) zonder afsluitende dir separator" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopieer volledig pad van gekozen bestand(en)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopieer naar zelfde paneel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopiëren" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Toon in gebruik zijnde ruimte" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Knippen" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Toon parameters voor opdrachtregel" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Verwijderen" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Voor alle zoektochten: breek af, sluit en verwijder uit geheugen" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Mapgeschiedenis" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Favorietenlijst voor mappen" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Interne opdracht uitvoeren..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Kies een opdracht en voer die uit" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Bewerken" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Bewerk commentaar..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Bewerk nieuw bestand" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Bewerk padveld boven bestandenlijst" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Wissel panelen om" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Script uitvoeren" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Af&sluiten" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Bestanden uitpakken..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Instelling van bestandassociaties" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Combineer bestanden..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Toon bestandeigenschappen" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Splits bestand..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Vlakke weergave" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Vlakke weergave, alleen gekozen" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Stel scherp op opdrachtregel" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Scherpstelling omwisselen" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Schakel tussen linker- en rechterbestandenlijst" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Scherpstellen op boomstructuurweergave" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Schakel tussen huidige bestandenlijst en boomstructuurweergave (indien ingeschakeld)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Plaats muispijl op eerste map of bestand" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Plaats aanwijzer op eerste bestand in lijst" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Plaats muispijl op laatste map of bestand" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Plaats aanwijzer op laatste bestand in lijst" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Plaats de cursor op de volgende map of bestand" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Plaats de cursor op de vorige map of bestand" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Maak harde koppeling..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Inhoud" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horizontale paneelmodus" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Toetsenbord" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Korte weergave op linkerpaneel" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Kolomweergave op linkerpaneel" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Links &= Rechts" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Platte weergave op linkerpaneel" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Open schijvenlijst links" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Draai volgorde op linkerpaneel om" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Rangschik linkerpaneel op attributen" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Rangschik linkerpaneel op datum" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Rangschik linkerpaneel op achtervoegsel" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Rangschik linkerpaneel op naam" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Rangschik linkerpaneel op grootte" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Miniatuurweergave op linkerpaneel" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Laad tabbladen van favoriete tabbladen" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Lijst laden" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Laad lijst van bestanden/mappen vanuit het opgegeven tekstbestand" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Laad selectie van klembord" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Laad selectie vanuit bestand..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Laad tabbladen vanuit bestand" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Maak map" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Kies alles met hetzelfde achtervoegsel" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Kies alle bestanden met dezelfde naam" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Kies alle bestanden met zelfde naam en achtervoegsel" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Kies alles in hetzelfde pad" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Draai selectie om" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecteer alles" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Deselecteer een groep..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Selecteer een groep..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Deselecteer alles" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimaliseer venster" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Verplaats huidige tabblad naar links" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Verplaats huidige tabblad naar rechts" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Gereedschap voor meervoudig hernoemen" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Netwerk &verbinden..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Netwerk verbreken" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Netwerk snel verbinden..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nieuw tabblad" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Laad de volgende favoriete tabbladen in de lijst" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Spring naar volgende tabblad" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Openen" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Probeer archiefbestand te openen" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Open balkbestand" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Open map in een nieuw tabblad" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Schijf openen per index" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Open VFS-lijst" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Bewerkingenkijker" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opties..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Bestanden &inpakken..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Stel splitserpositie in" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Plakken" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Laad de vorige favoriete tabbladen in de lijst" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Schakel naar vorige tabblad" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Snelfilter" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Snel zoeken" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Snel overzicht-paneel" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Verversen" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Herlaad de laatst geladen favoriete tabbladen" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Verplaatsen" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Verplaats/hernoem bestanden zonder te vragen om bevestiging" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Hernoemen" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Hernoemen-tabblad" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Sla opnieuw op, op de laatst geladen favoriete tabbladen" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Herstel selectie" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Keer volgorde om" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Korte weergave op rechterpaneel" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Kolomweergave op rechterpaneel" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Rechts &= Links" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Platte weergave op rechterpaneel" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Open rechter-schijvenlijst" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Draai volgorde op rechterpaneel om" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Rangschik rechterpaneel op attributen" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Rangschik rechterpaneel op datum" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Rangschik rechterpaneel op achtervoegsel" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Rangschik rechterpaneel op naam" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Rangschik rechterpaneel op grootte" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Miniaturenweergave op rechterpaneel" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Start terminalvenster" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Sla huidige tabbladen op naar nieuwe favoriete tabbladen" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sla selectie op" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sla selectie op in bestand..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Sla tabbladen op in bestand" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Zoeken..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle tabbladen vergrendeld met map geopend in nieuwe tabbladen" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Zet alle tabbladen terug op normaal" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Zet alle tabbladen op vergrendeld" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle tabbladen vergrendeld met mapwijzigingen toegestaan" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Wijzig attributen..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Vergrendeld met mappen geopend in nieuwe tabbladen" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normaal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Vergrendeld" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Vergrendeld, maar mapwijzigingen zijn toegestaan" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Openen" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Openen met gebruik van systeemassociaties" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Toon knoppenmenu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Toon opdrachtregelgeschiedenis" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Toon verborgen-/systeembestanden" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Rangschik op attributen" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sorteer op datum" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sorteer op achtervoegsel" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sorteer op naam" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Sorteer op grootte" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Open schijvenlijst" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "In-/uitschakelen negeer-lijstbestand (om geen bestandnamen te tonen)" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Maak symbolische koppeling..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Synchrone navigatie" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Synchrone mapverandering in beide panelen" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Synchroniseer mappen..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Doel is bron" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Archiefbestand(en) beproeven" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturen" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Miniaturenoverzicht" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Schakel de schermvullende modus om voor het terminalvenster" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Verplaats map onder aanwijzer naar linkervenster" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Verplaats map onder aanwijzer naar rechtervenster" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Boomstructuurpaneel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Rangschik op parameters" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselecteer alles met hetzelfde achtervoegsel" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Deselecteer alle bestanden met dezelfde naam" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Deselecteer alle bestanden met zelfde naam en achtervoegsel" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Deselecteer alles in hetzelfde pad" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Tonen" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Toon geschiedenis van bezochte paden voor actief beeld" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ga naar volgend element in geschiedenis" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ga naar vorig element in geschiedenis" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Toon logboekbestand" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Toon de huidige zoektochten" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Bezoek de website van Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Wissen" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Werk met een lijst van favoriete mappen en parameters" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Afsluiten" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Map" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Verwijderen" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminalvenster" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Lijst met favoriete mappen" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Toon huidige map van rechterpaneel in linkerpaneel" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Ga naar persoonlijke map" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ga naar rootmap" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ga naar bovenliggende map" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Lijst met favoriete mappen" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Toon huidige map van linkerpaneel in rechterpaneel" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Pad" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annuleren" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiëren..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Maak koppeling..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Leegmaken" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiëren" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Verbergen" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Verplaatsen..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Maak symbolische koppeling..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opties voor tabbladen" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Af&sluiten" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Herstellen" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Beginnen" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Annuleren" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Opdrachten" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Instellingen" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favorieten" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Bestanden" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hulp" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markeren" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "Netwerk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Tonen" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "Opties voor tabbladen" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Tabbladen" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiëren" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Knippen" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Verwijderen" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Bewerken" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Plakken" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Kies uw interne opdracht" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Ouderwets gerangschikt" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Ouderwets gerangschikt" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Kies standaard alle categorieën" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Selectie:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Categorieën:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Opdrachtnaam:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Wenk:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Sneltoets:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Categorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hulp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Wenk" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Sneltoets" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Toevoegen" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Hulp" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Definiëren..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Hoofdlettergevoelig" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Negeer accenten en verbindingstekens" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Attributen:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Invoermasker:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Of kies een voorgedefinieerde keuzesoort:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Maak nieuwe map" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Geef nieuwe mapnaam:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nieuwe grootte" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Hoogte:" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kwaliteit van compressie naar JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Breedte:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Hoogte" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Breedte" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Achtervoegsel" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Bestandsnaam" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Leegmaken" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Leegmaken" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Sluiten" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Instellingen" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Teller" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Teller" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Verwijderen" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Bewerk namen..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Huidige nieuwe namen bewerken..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Achtervoegsel" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Achtervoegsel" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Bewerken" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Relatief padmenu oproepen" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Laad laatste voorinstelling" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Laad namen vanuit bestand..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Voorinstelling laden op naam of index" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Laad voorinstelling 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Laad voorinstelling 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Laad voorinstelling 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Laad voorinstelling 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Laad voorinstelling 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Laad voorinstelling 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Laad voorinstelling 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Laad voorinstelling 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Laad voorinstelling 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Bestandsnaam" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Bestandsnaam" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Invoegsels" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Invoegsels" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Hernoemen" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Hernoemen" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Zet alles terug op standaardwaarden" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Opslaan" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Opslaan als..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Toon voorkeursinstellingen menu" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Rangschikken" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Tijd" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Tijd" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Toon hernoem logbestand" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Meervoudig hernoemen" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Hoofdlettergevoelig" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "&Log resultaat" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Toevoegen" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "&Reguliere uitdrukkingen" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Gebruik vervanging" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Teller" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Zoek en vervang" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Masker" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Voorinstellingen" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Achtervoegsel" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Zoeken..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Tussenpoze" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Bestandsnaam" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Vervangen..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Aanvangsgetal" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "Breedte" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Acties" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Bewerken" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Oude bestandsnaam" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nieuwe bestandsnaam" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Bestandpad" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Klik op Oké wanneer u de bewerker hebt gesloten, om de gewijzigde namen te laden." #: tfrmopenwith.caption msgid "Choose an application" msgstr "Kies een toepassing" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Aangepaste opdracht" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Sla associatie op" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Stel gekozen toepassingen in als standaardactie" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Bestandsoort om te openen: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Meerdere bestandnamen" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Meerdere URI's" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkele bestandsnaam" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkele URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Toepassen" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Hulp" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opties" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Kies a.u.b. een van de subpagina's, want deze pagina bevat geen instellingen." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Toevoegen" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Toepassen" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopiëren" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Verwijderen" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Overig..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Hernoemen" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opties:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Soortbepalingsmodus:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Ingeschakeld" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Foutopsporingsmodus" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Toon uitvoer van terminal" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Gebruik archiefnaam zonder achtervoegsel als lijst" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix-bestandattributen" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "&Unixpad scheidingsteken '/'" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows-bestandattributen" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windowspad scheidingsteken '\\'" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Toevoegen:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hiveringsprogramma:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Verwijderen:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Omschrijving:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Achtervoegsel:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Uitpakken:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Uitpakken zonder pad:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID-positie:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID-zoekbereik:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lijst:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archiveringsprogramma's:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Lijsteinde (optioneel):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Lijstopmaak:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Lijstbegin (optioneel):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Wachtwoordvraag tekenreeks:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Maak zelfuitpakkend archiefbestand:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Uitproberen:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Automatisch instellen" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Alles uitschakelen" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Wijzigen verwerpen" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Alles inschakelen" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exporteren..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importeren..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Archiveringsprogramma's sorteren" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Extra" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Algemeen" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Als grootte, datum of attributen wijzigen" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Voor de volgende paden en hun submappen:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Als bestanden worden gemaakt, verwijderd of hernoemd" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Als toepassing op de achtergrond is" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Schakel automatisch verversen uit" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Ververs bestandenlijst" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Toon systeemvakpictogram altijd" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automatisch verbergen niet-aangekoppelde apparaten" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Verplaats pictogram naar systeemvak indien geminimaliseerd" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Slechts één actief exemplaar van Double Commander toestaan" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Hier kunt u een of meer schijven of koppelpunten opgeven, gescheiden door puntkomma." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Zwarte lijst voor schijven" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Kolomgrootte" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Toon bestandachtervoegsels" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "uitgelijnd (met tabblad)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "direct na bestandsnaam" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Vast aantal kolommen" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Vaste kolombreedte" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Gebruik hellingshoekindicator" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binaire modus" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Achtergrond 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicator achtergrondkleur:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indicator voorgrondkleur:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Gewijzigd:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Gewijzigd:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Geslaagd:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Kap tekst af op kolombreedte" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Vergroot celbreedte indien tekst niet in kolom past" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Horizontale regels" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Verticale regels" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Automatisch invullen kolommen" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Toon raster" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Auto-grootte kolommen" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Automatische grootte kolom:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Toepassen" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Bewerken" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Opdrachtregelgeschiedenis" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "Mapgeschiedenis" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Bestandmaskergeschiedenis" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Maptabbladen" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Instellingen opslaan" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Geschiedenis van zoeken en vervangen" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Status van hoofdvenster" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mappen" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Locatie van instellingbestanden" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Opslaan bij afsluiten" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Rangschikvolgorde van instellingenvolgorde in linkerboom" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Instellen op opdrachtregel" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Markeerders:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Pictogramthema's:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Tijdelijke opslag van miniaturen:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Programmamap (overdraagbare versie)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Persoonlijke map van gebruiker" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Pas wijziging toe op alle kolommen" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "Ver&wijderen" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Ga naar ingestelde standaard" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Nieuw" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Volgende" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Vorige" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Hernoemen" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Terugzetten op standaard" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Opslaan als" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Opslaan" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Overkleur toestaan" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Bij klikken om iets te veranderen, verander dat voor alle kolommen" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Algemeen" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Rand van aanwijzer" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Gebruik randaanwijzer" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Gebruik kleur voor inactieve selectie" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Gebruik omgedraaide selectie" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Gebruik aangepast lettertype en kleur voor deze weergave" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Achtergrond:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Achtergrond 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Kolomweergave:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Huidige kolomnaam]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Aanwijzerkleur:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Aanwijzertekst:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "Bestandssysteem:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Lettertype:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Grootte:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Tekstkleur:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inactieve aanwijzerkleur:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inactieve markeerkleur:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Markeerkleur:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Hieronder staat een voorbeeldweergave. U kunt de aanwijzer verplaatsen en bestanden kiezen om direct een actueel beeld te krijgen van het effect van de diverse instellingen." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Kolominstellingen:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Voeg kolom toe" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Plaats van omlijstingspaneel na de vergelijking:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Voeg map toe van huidige omlijsting" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Voeg mappen toe van de huidige en inactieve omlijstingen" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Voeg map toe waarnaar ik zal bladeren" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Voeg een kopie van het geselecteerde element toe" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Voeg huidige gekozen of actieve mapppen toe van de actieve omlijsting" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Voeg een scheidingsteken toe" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Voeg een submenu toe" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Voeg map toe die ik zal intikken" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Klap alles in" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Klap element in" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Kap keuze van elementen af" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Verwijder alles." #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Verwijder geselecteerd element" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Verwijder submenu en al zijn elementen" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Verwijder alleen het submenu maar behoud zijn elementen" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Element uitklappen" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Venster met boomstructuur scherpstellen" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Ga naar eerste element" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Ga naar laatste element" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Ga naar volgende element" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Ga naar vorige element" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Voeg map van de actieve omlijsting in" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Voeg mappen in van de actieve en inactieve omlijstingen" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Voeg map in waarnaar ik zal bladeren" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Voeg een kopie in van het gekozen element" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Voeg huidige gekozen of actieve mappen in van actieve omlijsting" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Voeg een scheidingsteken in" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Voeg een submenu in" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Voeg map in die ik zal intikken" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Verplaats naar volgende" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Verplaats naar vorige" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Open alle takken" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Plak wat werd geknipt" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Zoek en vervang in pad" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Zoek en vervang in zowel pad als doel" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Zoek en vervang in doelpad" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Pad bijstellen" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Doelpad bijstellen" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Toevoegen..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Reservekopie..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Verwijderen..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exporteren..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importeren..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Invoegen..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Diversen..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Enkele functies om geschikt doel te kiezen" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Rangschikken..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Voeg ook het doel toe bij het toevoegen van een map" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Altijd boomstructuur uitklappen" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Toon alleen geldige omgevingsvariabelen" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Toon [ook pad] in opduikvenster" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Naam, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Naam, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lijst met favoriete mappen (verander rangschikking door slepen en neerzetten)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andere opties" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Naam:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Pad:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "Doel:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...alleen huidige niveau van geselecteerde element(en)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Doorzoek pad van mapfavorieten om diegene te valideren die daadwerkelijk bestaan" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Doorzoek het pad en doel van de mapfavorieten om diegene te valideren die daadwerkelijk bestaan" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "naar een mapfavorietenbestand (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "naar een 'wincmd.ini' van TC (behoud bestaande)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "naar een 'wincmd.ini' van TC (wis bestaande)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Ga naar instellen van TC-gerelateerde info" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Ga naar instellen van TC-gerelateerde info" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "FavMapProefMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "vanuit een mapfavorietenbestand (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "van 'wincmd.ini' van TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "Navigeren..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Herstel een reservekopie van mapfavorietenlijst" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Sla een reservekopie op van huidige mapfavorietenlijst" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Zoeken en vervangen..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...alles, van A tot Z." #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...alleen een enkele elementengroep" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...inhoud van gekozen submenu('s), geen niveau lager" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...inhoud van gekozen submenu('s) en alle lagere niveaus" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Probeer resulterend menu uit" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Pad bijstellen" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Doelpad bijstellen" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Toevoeging van hoofdpaneel" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Pas huidige instellingen toe op lijst met favoriete mappen" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Bron" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Doel" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Paden" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Manier om paden in te stellen bij het toevoegen:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Doe dit voor paden van:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pad moet relatief zijn tot:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Van alle ondersteunde bestandtypen, vraag elke keer welke te gebruiken" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Bij opslaan Unicode-tekst, sla dit op in UTF8-opmaak (anders UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Bij verslepen van tekst, genereer bestandsnaam automatisch (anders vragen aan gebruiker)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Toon bevestigingsvenster na verslepen" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Bij verslepen van tekst in panelen:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plaats het meest gewenste bestandtype bovenaan de lijst (gebruik slepen en neerzetten):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(als de meest gewenste niet aanwezig is, nemen we de tweede enz.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(zal met sommige brontoepassingen niet werken. Dus probeer bij probleem uit te vinken)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Toon bestandssysteem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Toon vrije ruimte" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Toon etiket" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Schijvenlijst" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Automatisch inspringen" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Rechterkantlijn:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Dakje voorbij einde van regel" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Toon bijzondere tekens" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Toont speciale tekens voor spaties en tabellen" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Slimme tabbladen" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Als u de <Tab> -toets gebruikt, gaat de cursor naar het volgende niet-spatie-teken van de vorige regel" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tab laat blokken inspringen" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Gebruik spaties in plaats van tabtekens" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Converteert tabtekens naar een opgegeven aantal spaties (bij het invoeren)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Verwijder spaties op regeleinden" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatisch achterliggende spaties verwijderen, dit is alleen van toepassing op bewerkte regels" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opties voor interne bewerker" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tabbreedte:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Achtergrond" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Achtergrond" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Terugzetten op standaard" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Opslaan" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementattributen" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Voorgrond" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Voorgrond" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekstmarkering" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Gebruik (en bewerk) globale schema-instellingen" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Gebruik lokale schema-instellingen" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Vet" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Omdraaien" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Uit" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Aan" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Schuin" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Omdraaien" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Uit" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Aan" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Doorgestreept" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Omdraaien" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Uit" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Aan" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Onderstrepen" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Omdraaien" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Uit" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Aan" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Toevoegen..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Verwijderen..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importeren/exporteren" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Invoegen..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Hernoemen" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Rangschikken..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Geen" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Altijd boomstructuur uitklappen" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nee" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Links" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Rechts" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lijst met favoriete tabbladen (verander rangschikking door slepen en neerzetten)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Andere opties" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Wat waar te herstellen voor het gekozen element:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Te behouden bestaande tabbladen:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Sla mapgeschiedenis op:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Links opgeslagen tabbladen zullen worden hersteld naar:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Rechts opgeslagen tabbladen zullen worden hersteld naar:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "een scheidingsteken" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Voeg scheidingsteken toe" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "submenu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Voeg een submenu toe" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Klap alles in" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...alleen huidige niveau van geselecteerde element(en)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Knippen" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "verwijder alles." #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "submenu en al zijn elementen" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "alleen submenu maar behoud de elementen" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "geselecteerd element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Verwijder geselecteerd element" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exporteer selectie naar ouderwetse .tab-bestand(en)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavTabsProefMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importeer ouderwetse .tab-bestand(en) overeenkomstig de standaardinstelling" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Importeer ouderwetse .tab-bestanden op de gekozen positie" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importeer ouderwetse .tab-bestanden op gekozen positie" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importeer ouderwetse .tab-bestanden op gekozen positie in een submenu" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Voeg scheidingsteken toe" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Voeg submenu toe" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Open alle vertakkingen" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Plakken" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Hernoemen" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...alles, van A tot Z." #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...alleen een enkele elementengroep" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Rangschik alleen een enkele elementengroep" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...inhoud van gekozen submenu('s), geen niveau lager" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...inhoud van gekozen submenu('s) en alle lagere niveaus" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Probeer resulterend menu uit" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Toevoegen" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "Toe&voegen" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Toevoegen" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klonen" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Kies uw interne opdracht" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Omlaag" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Bewerken" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Invoegen" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Invoegen" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Verwijderen" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "Verwijderen" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Ver&wijderen" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Hernoemen" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Omhoog" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Beginpad van de opdracht. Zet deze tekenreeks nimmer tussen aanhalingstekens." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Naam van de actie. Niet voor het systeem, alleen voor u" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter om mee te geven aan de opdracht. Let op juiste omgang met spaties in bestandnamen." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Opdracht om uit te voeren. Gebruik geen aanhalingstekens." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Actiebeschrijving" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Acties" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Achtervoegsels" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kan worden geselecteerd door slepen en neerzetten" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Bestandtypes" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Pictogram" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Bestandtypes kunnen worden gerangschikt door slepen en neerzetten" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Achtervoegsels kunnen worden gerangschikt door slepen en neerzetten" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Bestandtypes kunnen worden gerangschikt door slepen en neerzetten" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "Actienaam:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Opdracht:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parameters:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Beginpad:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Aangepast met..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Aangepast" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Bewerken" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Openen in bewerker" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Bewerken met..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Verkrijg uitvoer van opdracht" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Open in interne bewerker" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Open in interne kijker" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Openen" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Openen met..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Voer uit in terminalvenster" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Tonen" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Open in kijker" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Bekijken met..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klik op mij om pictogram te veranderen." #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Pas huidige instellingen toe op alle huidige ingestelde bestandsnamen en paden" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Voer uit via shell" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Uitgebreid contextmenu" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Instelling van bestandassociatie" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Bied aan om selectie toe te voegen aan bestandassociatie wanneer niet reeds opgenomen" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Bij het benaderen van bestandassociatie, bied aan om selectie toe te voegen aan bestandassociatie wanneer niet reeds opgenomen als ingestelde bestandssoort" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Uitvoeren via terminal en sluiten" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Voer uit via terminal en blijf geopend" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Opdrachten" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Pictogrammen" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Beginpaden" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Onderdelen voor uitgebreide opties:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Paden" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Manier om paden in te stellen bij het toevoegen van elementen voor pictogrammen, opdrachten en beginpaden:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Doe dit voor bestanden en pad voor:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pad dient relatief te zijn tot:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Toon bevestigingsvenster voor:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopieerbewerking" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Verwijderbewerking" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Verwijder naar prullenbak (Shift keert deze instelling om)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Bewerking inzake verwijdering naar prullenbak" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Laat alleen-lezen-vlag vallen" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Verplaatsbewerking" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Verwerk commentaren met bestanden/mappen" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Selecteer alleen de bestandsnaam met hernoemen (niet het achtervoegsel)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Toon tabbladselectiepaneel in kopieer/verplaats-dialoogvenster" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Sla fouten bij bestandbewerkingen over en schrijf deze in het logboekvenster" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Werking van archiefbestand beproeven" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Verifieer checksumbewerking" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Uitvoeren van bewerkingen" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Gebruikersschil" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Buffergrootte voor bestandbewerkingen (in KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Buffergrootte voor hashberekening (in KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Toon voortgang van bewerkingen in het begin in" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Gedupliceerde naam in 'automatisch hernoemen'-stijl:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Aantal wissingen:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Zet terug op standaardinstellingen van DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Overkleur toestaan" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Gebruik vensterlijst-aanwijzer" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Gebruik kleur voor inactieve selectie" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Gebruik omgedraaide selectie" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Rand van aanwijzer" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Achtergrond:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Achtergrond 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Kleur van aanwijzer:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Aanwijzer tekst:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Inactieve aanwijzerkleur:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Inactieve markeerkleur:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "&Helderheidsniveau van inactieve paneel" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Markeerkleur:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Tekstkleur:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Onderstaand is een voorbeeldweergave. U kunt alvast de aanwijzer bewegen of een bestand kiezen om te kijken of het u bevalt." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "Tekstkleur:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Maak bestandmaskerfilter leeg bij starten van bestandzoekopdracht" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Zoek naar deel van bestandsnaam" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Toon menubalk in 'Bestanden zoeken'" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Tekstzoekopdracht in bestanden" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Bestandzoekopdracht" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Huidige filters met knop 'Nieuwe zoekopdracht':" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standaardzoeksjabloon:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Gebruik geheugenmapping voor zoeken tekst in bestanden" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Gebruik stream voor zoeken tekst in bestanden" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Standaard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatteren" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Aangepaste afkortingen om te gebruiken:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Rangschikken" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Hoofdlettergevoeligheid:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Onjuiste opmaak" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Opmaak van datum en tijd:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Opmaak van bestandgrootte:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Opmaak van &voettekst:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Opmaak van &kop:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megabyte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Voeg nieuwe bestanden in:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Rangschikken van mappen:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Rangschikmethode:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Verplaats bijgewerkte bestanden:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Toevoegen" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hulp" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Schakel het wijzigen naar de bovenliggende map in wanneer u dubbelklikt op een leeg gedeelte van de bestandsweergave" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Laad bestand niet totdat een tabblad is geactiveerd" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Toon vierkante haakjes rond mappen" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Laat nieuwe en bijgewerkte bestanden oplichten" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Schakel hernoemen in bij twee maal klikken op een naam" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Laad bestandenlijst in aparte draad" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Laad pictogrammen na bestanden lijst" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Toon systeem- en verborgen bestanden" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Bij selecteren bestanden met <SPATIEBALK>, ga naar beneden naar volgend bestand (zoals bij <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Windowsachtig filter bij markeren van bestanden ('*.*' selecteert ook bestanden zonder achtervoegsel, enz.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Gebruik elke keer een onafhankelijk attribuutfilter in het dialoogvenster voor maskerinvoer" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Markeren/Ontmarkeren van elementen" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Standaard te gebruiken attribuutmaskerwaarde:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Toevoegen" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Toepassen" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Verwijderen" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Sjabloon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Bestandsoortkleuren (sorteer door slepen en neerzetten)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Categorie-attributen:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Categoriekleur:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Categoriemasker:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Categorienaam:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Lettertypes" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Voeg sneltoets toe" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopiëren" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Verwijderen" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Verwijder sneltoets" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Bewerk sneltoets" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Volgende categorie" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Laat het bestandgerelateerde menu opduiken" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Vorige categorie" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Hernoemen" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Herstel de standaardinstellingen van Double Commander" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Nu opslaan" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Rangschikken op opdrachtnaam" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Rangschikken op sneltoetsen (gegroepeerd)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Rangschikken op sneltoetsen (één per rij)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "Categorieën:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "Opdrachten:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "&Sneltoetsbestanden:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Rangschikvolgorde:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Categorieën" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Opdracht" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Rangschikvolgorde" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Opdracht" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Sneltoetsen" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Beschrijving" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Sneltoets" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parameters" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Knoppen" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Voor de volgende paden en hun submappen:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Toon pictogrammen voor acties in menu's" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Toon pictogrammen op knoppen" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Toon opplakpictogrammen, bijv. voor koppelingen" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Gedimde verborgen bestanden (langzamer)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Schakel speciale pictogrammen uit" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " Pictogramgrootte " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Pictogramthema" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Toon pictogrammen" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr " Toon pictogrammen links van de bestandsnaam " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Schijfpaneel:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Bestandenpaneel:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Alles" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Alle geassocieerde + &EXE/LNK (langzaam)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "&Geen pictogrammen" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Alleen standaardpictogrammen" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "Voeg geselecteerde namen toe" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Voeg geselecteerde namen toe met volledig pad" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Negeer (toon niet) de volgende bestanden en mappen:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Opslaan in:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Linker-, rechterpijlen wijzigen map (Lynx-achtige verplaatsing)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tikken" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Al&t+Letters:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+Letters:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Letters:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Platte knoppen" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Platte bedieningsschil" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Toon vrije ruimte-indicator op schijfetiket" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Toon logboekvenster" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Toon bewerkingspaneel op achtergrond" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Toon algemene voortgang in menubalk" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Toon opdrachtregel" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Toon huidige map" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Toon &schijfknoppen" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Toon vrije ruimte-etiket" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Toon schijvenlijstknop" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Toon &functietoetsknoppen" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Toon hoofdmenu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Toon werkbalk" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Toon kort vrije ruimte-etiket" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Toon statusbalk" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Toon &tabstop-kop" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Toon map-tabbladen" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Toon terminalvenster" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Toon twee schijfknoppenbalken (vaste breedte, boven bestandenvensters)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Toon middelste werkbalk" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " Schermvormgeving " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Toon inhoud van logboekbestand" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Neem datum op in naam van logboekbestand" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "Inpakken/uitpakken" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Externe uitvoering van opdrachtregel" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Kopieer/Verplaats/Maak koppeling/symbolische koppeling" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Verwijderen" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Maak/verwijder mappen" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Leg fouten vast in logboek" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "Maak een logboekbestand:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Maximaal aantal logboekbestanden" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "Leg informatieve berichten vast in logboek" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Starten/afsluiten" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Leg gelukte bewerkingen vast in logboek" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "Invoegtoepassingen voor bestandssysteem" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Logboekbestand voor bestandbewerking" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Bewerkingen vastleggen in logboek" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Bewerkingsstatus" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Verwijder miniaturen van niet langer bestaande bestanden" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Toon inhoud van instellingenbestand" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Maak nieuwe met de codering:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ga altijd naar de root van een schijf bij verandering van schijven" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Toon huidige map in de titelbalk van het hoofdvenster" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Toon waarschuwingen (alleen 'Oké'-knop)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "Sla miniaturen op in tijdelijke opslag" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturen" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Bestandcommentaren (beschrij.ving)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Betreffende TC-export/-import:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Standaardcodering:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Instellingenbestand:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC-uitvoerbaar:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Uitvoerpad van werkbalk:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "beeldpunten" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Miniatuurgrootte:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selectie door muis" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "De tekstaanwijzer volgt niet langer de muispijl" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Door te klikken op pictogram" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Open met" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Schuiven" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selectie" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Modus:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dubbelklikken" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Regel voor regel" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Regel voor regel met aanwijzerbeweging" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagina voor pagina" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Enkele klik (opent bestanden en mappen)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Enkele klik (opent mappen, dubbelklik voor bestanden)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Toon inhoud van logboekbestand" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Individuele mappen per dag" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Log bestandsnamen met volledig pad" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Toon menubalk bovenaan " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Hernoem log" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Vervang ongeldig teken voor bestandsnaam door" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Voeg toe in hetzelfde logboekbestand voor hernoemen" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Sluit af met gewijzigde voorinstelling" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Vooraf ingesteld bij starten" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Toevoegen" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Instellen" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Inschakelen" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Verwijderen" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Aanpassen" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Beschrijving" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Invoegsels voor zoeken stellen u in staat om alternatieve zoekalgorithmes of externe gereedschappen (zoals 'locate', etc.) te gebruiken." #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Pas huidige instellingen toe op alle thans ingestelde invoegsels" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Bij het toevoegen van een nieuw invoegsel automatisch naar het instellingenvenster gaan" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Instellingen:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Lua-bibliotheekbestand om te gebruiken:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pad dient relatief te zijn tot:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Naamgevingsstijl voor invoegsels bij toevoegen van een nieuw invoegsel:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Invoegtoepassingen voor inpakken worden gebruikt om te werken met archiefbestanden" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Invoegsels voor inhoud stellen u in staat om uitgebreide bestanddetails weer te geven, zoals mp3-etiketten of afbeeldingsattributen in bestandlijsten, of gebruik ze in het zoek- en hernoemgereedschap" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Bestandssysteem-invoegsels geven u toegang tot schijven die niet benaderbaar zijn door het besturingssysteem of tot externe apparaten zoals Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Kijker-invoegsels laten bestandssoorten zoals plaatjes, rekenbladen, gegevensbanken enz. zien in Kijker (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actief" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Invoegsel" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "Beginnend met (naam moet beginnen met eerst getypte teken)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "Eindigend op (laatste teken voor een getypte punt . moet overeenkomen)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opties" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Exacte naamovereenkomst" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Zoek hoofdletters/kleine letters" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Zoek naar deze elementen" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Behoud hernoemde naam bij ontgrendelen van een tabblad" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activeer doelpaneel bij klikken op een van zijn tabbladen" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "Toon kop van tabblad ook als er slechts één tabblad is" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Sluit dubbele tabbladen bij het sluiten van de toepassing" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Bevestig sluiten alle tabbladen" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Bevestig het sluiten van vergrendelde tabbladen" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Beperk de titellengte van een tabblad tot" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Toon beveiligde tabbladen met een sterretje *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "&Tabbladen op meerdere regels" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up opent nieuw tabblad op de voorgrond" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Open nieuwe tabbladen in de buurt van huidige tabblad" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Hergebruik bestaand tabblad wanneer mogelijk" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Toon sluitknop voor tabblad" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Toon altijd de schijfletter in de tabbladtitel" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Tabbladkoppen voor mappen" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "tekens" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Actie om te doen bij het dubbelklikken op een tabblad:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Positie van tabbladen" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "Geen" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Nee" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Links" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Rechts" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Ga naar instellingen voor favoriete tabbladen na opslaan" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Ga naar instellingen voor favoriete tabbladen na opslaan van een nieuwe" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Schakel extra opties in voor favoriete tabbladen (kies doelkant bij herstellen enz.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Standaard extra instellingen bij opslaan van nieuwe favoriete tabbladen:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Map tabbladkoppen extra" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Bij herstellen van tabblad, te behouden bestaande tabbladen:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Links opgeslagen tabbladen zullen worden hersteld naar:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Rechts opgeslagen tabbladen zullen worden hersteld naar:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Behoud mapopslaggeschiedenis bij favoriete tabbladen:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standaardpositie in menu bij opslaan van een nieuw favoriet tabblad:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zou hier normaal gesproken aanwezig moeten zijn om het commando weer te geven dat in de terminal moet worden uitgevoerd" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zou hier normaal gesproken aanwezig moeten zijn om het commando weer te geven dat in de terminal moet worden uitgevoerd" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Opdracht voor alleen draaien van terminalvenster:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Opdracht voor uitvoeren van een opdracht in de terminal en daarna sluiten:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Opdracht voor uitvoeren van een opdracht in de terminal en blijf geopend:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Opdracht:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Parameters:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Opdracht:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Parameters:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Opdracht:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Parameters:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Kloonknop" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Ver&wijderen" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Bewerk sneltoets" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "Voeg nieuwe knop in" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Kiezen" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Anders..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Verwijder sneltoets" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Suggereren" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Laat DC de zweeftip voorstellen gebaseerd op knopsoort, opdracht en parameters" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "Platte knoppen" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapporteer fouten bij opdrachten" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Toon bijschriften" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Geef opdrachtparameters, elk in een afzonderlijke regel. Tik op F1 om hulptekst bij de parameters te tonen." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Uiterlijk" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "&Balkgrootte:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Opdracht:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parameters:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Hulp" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Sneltoets:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Pictogram:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Pictogramgrootte:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Opdracht:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parameters:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "&Beginpad:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Stijl:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Knopinfo:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Voeg werkbalk toe met alle DC-opdrachten" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "voor een externe opdracht" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "voor een interne opdracht" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "voor een scheidingsteken" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "voor een sub-werkbalk" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Reservekopie..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exporteren..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Huidige werkbalk..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "aan een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR-bestand (behoud bestaande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR-bestand (wis bestaande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "naar een 'wincmd.ini' van TC (behoud bestaande)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "naar een 'wincmd.ini' van TC (wis bestaande)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Bovenste werkbalk..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Sla een reservekopie op van de werkbalk" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "aan een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR-bestand (behoud bestaande)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR-bestand (wis bestaande)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "naar een 'wincmd.ini' van TC (behoud bestaande)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "naar een 'wincmd.ini' van TC (wis bestaande)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importeren..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Herstel een reservekopie van werkbalk" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "voeg toe aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "van een werkbalkbestand (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "van een enkel TC .BAR-bestand" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "van 'wincmd.ini' van TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "voeg toe aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan huidige werkbalk" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe werkbalk aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "toe te voegen aan bovenste werkbalk" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "om bovenste werkbalk te vervangen" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Zoeken en vervangen..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "in alle bovenstaande..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "in alle opdrachten..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "in alle pictogramnamen..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "in alle parameters..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "in alle beginpaden..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "net voor huidige selectie" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Scheidingsteken" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Spatie" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Knopsoort" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Pas de huidige instellingen toe op alle geconfigureerde bestandsnamen en paden" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Opdrachten" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Pictogrammen" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Beginpaden" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Paden" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Doe dit voor bestanden en paden voor:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pad moet relatief zijn tot:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Manier om paden in te stellen bij het toevoegen van elementen voor pictogrammen, opdrachten en beginpaden:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Houd terminalvenster open na uitvoering programma" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Uitvoeren in terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Gebruik extern programma" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Extra parameters" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Pad naar uit te voeren programma" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Toevoegen" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Toepassen" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopiëren" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Verwijderen" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Sjabloon..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Hernoemen" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Overig..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Zweeftipinstelling voor gekozen bestandtype:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Algemene opties inzake zweeftips:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Toon zweeftip voor bestanden in het bestandenpaneel" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Categoriewenk:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Categoriemasker:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Verbergvertraging voor zweeftip:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Vertoningsmodus voor zweeftip:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Bestandtypen:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Wijzigingen wegwerpen" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exporteren..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importeren..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Rangschik zweeftip-bestandtypen" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Met dubbelklikken op de balk bovenin een bestandenpaneel" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Met het menu en interne opdracht" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dubbelklikken in boom kiezen en sluiten" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "Met het menu en interne opdracht" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Met dubbelklikken op een tabblad (indien daarvoor ingesteld)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Bij het gebruik van de sneltoets, zal hij het venster met de huidige keuze sluiten" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Enkelklik in boom kiezen en sluiten" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Gebruik het voor opdrachtregelgeschiedenis" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Gebruik het voor de mapgeschiedenis" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Gebruik het voor de bezichtigingsgeschiedenis (bezochte paden voor actief beeld)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Gedrag inzake selectie:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Opties inzake boomstructuurmenu:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Waar boomstructuurmenu's te gebruiken:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Bij lijst met favoriete mappen:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Bij favoriete tabbladen:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Bij geschiedenis:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Gebruik en toon sneltoets voor kiezen van elementen" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Lettertype" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Opties voor vormgeving en kleuren:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Achtergrond 2:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Aanwijzerkleur:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Tekstkleur zoekresultaat:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Gevonden tekst onder aanwijzer:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Normale tekstkleur:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normale tekst onder aanwijzer:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Voorbeeldweergave van boomstructuurmenu:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Secundaire tekstkleur:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Secundaire tekst onder aanwijzer:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Kleur van sneltoets:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Sneltoets onder aanwijzer:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Kleur van niet-selecteerbare tekst:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Niet-selecteerbaar onder aanwijzer:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Verander kleur links en u ziet hier een vooruitblik van hoe uw boomstructuurmenu's er uit zullen gaan zien." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Aantal kolommen in boekkijker" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "Instellen" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Bestanden inpakken" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Maak aparte archiefbestanden, één per geselecteerd bestand/map" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Maak zelfuitpakkend archiefbestand" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Versleutelen" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Verplaatsen naar archiefbestand" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Meerdere schijven archiefbestand" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Plaats eerst in TAR-archiefbestand" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ook padnamen toevoegen (alleen recursief)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Inpakken bestand(en) naar bestand:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Inpakker" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Sluiten" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Alles uitpakken en uitvoeren" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Uitpakken en uitvoeren" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Eigenschappen van ingepakt bestand" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributen:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Compressiefactor:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Methode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Oorspronkelijke grootte:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Bestand:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Ingepakte grootte:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Inpakker:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tijd:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Print configuratie" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Kantlijnen (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "Onderkant:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "Links:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "Rechts:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "Bovenkant:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Sluit filterpaneel" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Geef zoektekst of filter op" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Hoofdlettergevoelig" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Mappen" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Bestanden" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Overeenkomend met begin" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Overeenkomend met einde" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Schakel tussen zoeken of filteren" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Meer regels" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Minder regels" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Gebruik inhoud-invoegsels, combineer met:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Invoegsel" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Veld" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Uitvoerder" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Waarde" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&EN (alle overeenkomsten)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OF (elke overeenkomst)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Toepassen" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Annuleren" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Sjabloon..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Sjabloon..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Oké" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Selecteer dubbele bestanden" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Laat ten minste één bestand in elke groep ongeselecteerd:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Selectie verwijderen op naam/achtervoegsel:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Selecteer op &naam/achtervoegsel:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuleren" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Oké" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Scheidingsteken" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Tel vanaf" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Resultaat:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Selecteer de mappen die u wilt invoegen (u kunt er meer dan één selecteren)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Het einde" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Het begin" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuleren" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Oké" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Tel eerst vanaf" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Tel als laatste vanaf" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Bereikbeschrijving" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Resultaat:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecteer de in te voegen tekens:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Eerste:Laatste]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Eerste,&Lengte]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Het einde" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Het begin" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "Het &einde" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "Het begin" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Wijzig attributen" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Klevend" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Archiefbestand" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Gemaakt:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Verborgen" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Benaderd:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Gewijzigd:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Alleen-lezen" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Inclusief submappen" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Systeem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Tijdstempel-eigenschappen" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributen" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributen" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groep" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(grijs veld betekent ongewijzigde waarde)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Overig" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Uitvoeren" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(grijs veld betekent ongewijzigde waarde)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octaal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lezen" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijven" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Sorteren" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuleren" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Oké" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Sleep elementen en zet ze neer om ze te sorteren" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmsplitter.caption msgid "Splitter" msgstr "Splitser" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Vereis een CRC32-verificatiebestand" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Grootte en aantal van onderdelen" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Splits het bestand naar map:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Aantal onderdelen" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Bouwsel" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Invoeren" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Besturingssysteem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platform" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisie" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Versie" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleren" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Maak symbolische koppeling" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Gebruik relatief pad wanneer mogelijk" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Bestemming waar de koppeling naar zal verwijzen" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Koppelingsnaam" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Verwijderen op beide kanten" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Links verwijderen" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Rechts verwijderen" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Selectie verwijderen" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Selecteer voor kopiëren (standaardrichting)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Selecteer voor kopiëren -> (links naar rechts)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Draai kopieerrichting om" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Selecteer voor kopiëren <- (rechts naar links)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Selecteer voor verwijderen <-> (beide)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Selecteer voor verwijderen <- (links)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Selecteer voor verwijderen -> (rechts)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Sluiten" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Vergelijken" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Sjabloon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchroniseren" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchroniseer mappen" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymmetrisch" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "op inhoud" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "negeer datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "alleen geselecteerde" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Submappen" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Toon:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Naam" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Grootte" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Grootte" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Naam" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(in hoofdvenster)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Vergelijken" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Toon links" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Toon rechts" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicaten" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "enkelen" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Druk a.u.b. op 'Vergelijken' om te beginnen" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synchroniseren" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Bevestig overschrijven" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Boomstructuurmenu" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Kies uw favoriete map:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Zoekopdracht is hoofdlettergevoelig" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Volledig inklappen" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Volledig uitklappen" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Negeer accenten en verbindingstekens bij doorzoeking" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Zoekopdracht is niet hoofdlettergevoelig" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Zoekopdracht is strikt inzake accenten en verbindingstekens" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Sluit boomstructuurmenu" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Instellingen van boomstructuurmenu" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Instellingen van de kleuren van boomstructuurmenu" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Voeg nieuw toe" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleren" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Wijzigen" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Standaard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Oké" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Enkele functies om geschikt pad te selecteren" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Verwijderen" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Pas invoegsel aan" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Bespeur archieftype door inhoud" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Kan bestanden verwijderen" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Ondersteunt versleuteling" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Toon als normale bestanden (verberg inpakpictogram)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Ondersteunt inpakken in geheugen" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Kan bestaande archiefbestanden aanpassen" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Archiefbestand kan meerdere bestanden bevatten" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Kan nieuwe archiefbestanden aanmaken" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Ondersteunt het opties-dialoogvenster" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Tekst zoeken in archiefbestanden toestaan" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "Omschrijving:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Detecteer tekenreeks:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "Achtervoegsel:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Vlaggen:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "Naam:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "Invoegsel:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Invoegsel:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "Over Kijker..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Toont het Over-bericht" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Automatisch herladen" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Codering veranderen" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Kopieer bestand" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopieer bestand" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopieer naar klembord" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopieer geformatteerd naar klembord" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Verwijder bestand" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Verwijder bestand" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "Af&sluiten" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Zoeken" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Zoek volgende" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Zoek vorige" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Volledig scherm" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Ga naar regel..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Ga naar regel" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Centreren" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "Volgende" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Laad volgende bestand" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "Vorige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Laad vorige bestand" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Spiegel horizontaal" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Spiegelen" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Spiegel verticaal" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Verplaats bestand" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Verplaats bestand" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Voorbeeldweergave" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Afdrukken..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Afdrukinstellingen..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Herladen" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Herlaad huidige bestand" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Draai 180 graden" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Draai -90 graden" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Draai +90 graden" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Opslaan" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Opslaan als..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Sla bestand op als..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Schermafdruk" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Vertraging 3 sec" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Vertraging 5 sec" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Toon als &binair" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Toon als boek" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Toon als dec" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Toon als &hex" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Toon als &tekst" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Toon als inpaktekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Toon tekstaanwijzer" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Afbeeldingen" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Invoegtoepassingen" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Uitrekken" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Rek afbeelding uit" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Rek alleen grote uit" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Ongedaan maken" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Ongedaan maken" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Vergroten/verkleinen" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Vergroten" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Vergroten" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Verkleinen" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Verkleinen" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Bijsnijden" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Volledig scherm" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Omlijsting exporteren" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Oplichten" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Volgende omlijsting" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Schilderen" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Vorige omlijsting" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rode ogen" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Herschalen" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diavoorstelling" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Kijker" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Ovaal" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Codering" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "Bestand" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Afbeelding" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Pen" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Draaien" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Schermafdruk" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Tonen" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Invoegtoepassing" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Starten" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Stoppen" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Bestandbewerkingen" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Altijd bovenaan" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annuleren" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annuleren" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nieuwe wachtrij" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Toon in losgemaakt venster" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Zet als eerste in wachtrij" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Zet als laatste in wachtrij" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Wachtrij" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Buiten de wachtrij" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Wachtrij 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Wachtrij 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Wachtrij 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Wachtrij 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Wachtrij 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Toon in losgemaakt venster" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Pauzeer alles" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Volg koppelingen" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Als map bestaat" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Als bestand bestaat" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Als bestand bestaat" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Annuleren" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Oké" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Opdrachtregel:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parameters:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Beginpad:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Instellen" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Versleutelen" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Als bestand bestaat" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Kopieer datum/tijd" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Werk op de achtergrond (aparte verbinding)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Als bestand bestaat" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "U moet beheerdersrechten geven" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "om dit object te kopiëren:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "om dit object te maken:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "om dit object te verwijderen:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "om attributen van dit object te krijgen:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "om deze harde koppeling te maken:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "om dit object te openen:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "om dit object te hernoemen:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "om attributen van dit object in te stellen:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "om deze symbolische link te maken:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Datum genomen" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Hoogte" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Breedte" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabrikant" #: uexifreader.rsmodel msgid "Camera model" msgstr "Cameramodel" #: uexifreader.rsorientation msgid "Orientation" msgstr "Oriëntatie" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annuleer snelfilter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuleer huidige bewerking" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Geef bestandsnaam in, met achtervoegsel, voor versleepte tekst" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Te importeren tekstopmaak" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Defect:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Algemeen:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Onbrekend:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Leesfout:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Geslaagd:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Geef controlesom in en kies algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifieer controlesom" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Totaal:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Wilt u de filters wissen voor deze nieuwe zoekopdracht?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Plakbord bevat geen geldige werkbalkgegevens." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;Actief paneel;Linkerpaneel;Rechterpaneel;Bestandbewerkingen;Instellingen;Netwerk;Diversen;Parallelle poort;Afdrukken;Markeren;Veiligheid;Klembord;FTP;Navigatie;Help;Venster;Opdrachtregel;Gereedschap;Tonen;Gebruiker;Tabbladen;Rangschikking;Logboek" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ouderwets gerangschikt;A-Z gerangschikt" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Naam" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Grootte" #: ulng.rsconfcolalign msgid "Align" msgstr "Uitlijnen" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Titel" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Verwijderen" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Veldinhoud" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Verplaatsen" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Breedte" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Aanpassen kolom" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Stel bestandassociatie in" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Opdrachtregel en parameters bevestigen" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopieer (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Geïmporteerde DC-werkbalk" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Geïmporteerde DC-werkbalk" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "VersleepteTekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "VersleepteHTMLtekst" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "VersleepteRichText" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "VersleepteSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "VersleepteUnicodeUTF16tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "VersleepteUnicodeUTF8tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr " Voegt toe: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Bezig met vergelijken..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Verwijdert: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "De twee bestanden zijn hetzelfde." #: ulng.rsdiffmatches msgid " Matches: " msgstr " Overeenkomend: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Wijzigt: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codering" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Regeleinden" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "De tekst is identiek, maar er worden de volgende opties gebruikt:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "De tekst is identiek, maar de bestanden verschillen.\n" "Er werden de volgende verschillen gevonden:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Afbreken" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Alles" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Toevoegen" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Auto-hernoem bronbestanden" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "A&utomatisch doelbestanden hernoemen" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annuleren" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Vergelijken op inhoud" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Doorgaan" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Kopieer in" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Alles samenvoegen" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Beëindig programma" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Negeren" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Negeer alles" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nee" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Geen" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Oké" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Overige" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Overschrijven" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Overschrijf &alles" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Overschrijf alle grotere" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Overschrijf alle oudere" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Overschrijf alle kleinere" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Hernoemen" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Hervatten" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Opnieuw" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Als beheerder" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Overslaan" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Alles overslaan" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Ontgrendelen" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopieer bestand(en)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Verplaats bestand(en)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Pauzeren" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Starten" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Wachtrij" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Snelheid %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Snelheid %s/s, tijd te gaan %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Vrije schijfruimte-indicator" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<geen etiket>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<geen media>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interne bewerker van Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ga naar regel:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Ga naar regel" #: ulng.rseditnewfile msgid "new.txt" msgstr "nieuwe.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Bestandsnaam:" #: ulng.rseditnewopen msgid "Open file" msgstr "Open bestand" #: ulng.rseditsearchback msgid "&Backward" msgstr "Achterwaarts" #: ulng.rseditsearchcaption msgid "Search" msgstr "Zoeken" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Voorwaarts" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Vervangen" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "met externe bewerker" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "met interne bewerker" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Uitvoeren via schil" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Uitvoeren via terminal en sluiten" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Uitvoeren via terminal en blijf open" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" niet gevonden in regel %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Geen achtervoegsel gedefinieerd voor opdracht '%s'. Het wordt genegeerd." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Links;Rechts;Actief;Inactief;Beide;Geen" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nee;Ja" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Geëxporteerd vanuit DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Vragen;Overschrijven;Overslaan" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Vragen;Samenvoegen;Overslaan" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Vragen;Overschrijven;Oudere overschrijven;Overslaan" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Vragen;Niet meer instellen;Fouten negeren" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Alle bestanden" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Archiveringsprogramma's configuratie bestanden" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC knopinfo bestanden" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Uitvoerbare bestanden" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini Config-bestanden" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Legacy DC .tab-bestanden" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Bibliotheekbestanden" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Plugin-bestanden" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programma's en bibliotheken" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC Toolbar-bestanden" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC Toolbar-bestanden" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml Config-bestanden" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definieer sjabloon" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s niveau(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "alles (onbeperkte diepte)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "alleen huidige map" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Map %s bestaat niet." #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Gevonden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Opslaan zoeksjabloon" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Sjabloonnaam:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Doorzocht: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Doorzoeken" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Zoek bestanden" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Tijd van doorzoeking: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Begin op" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Lettertype voor terminalvenster" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Lettertype voor bewerker" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Functie knoppen lettertype" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Logboeklettertype" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Standaardlettertype" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Lettertype voor pad" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Zoekresultaten lettertype" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Lettertype voor boomstructuur menu" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Lettertype voor bestandsweergave" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Bestandsweergave-lettertype" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s van %s vrij" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s vrij" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Toegang datum/tijd" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributen" #: ulng.rsfunccomment msgid "Comment" msgstr "Commentaar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Gecomprimeerde grootte" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Aanmaak datum/tijd" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Achtervoegsel" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Groep" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Verander datum/tijd" #: ulng.rsfunclinkto msgid "Link to" msgstr "Koppel naar" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Wijziging datum/tijd" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Naam" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Naam zonder achtervoegsel" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Eigenaar" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pad" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Grootte" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Soort" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Fout bij maken harde koppeling." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "geen;Naam, a-z;Naam, z-a;Ext, a-z;Ext, z-a;Grootte 9-0;Grootte 0-9;Datum 9-0;Datum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Waarschuwing: bij het herstellen van een .hotlist reservekopiebestand, zal de bestaande lijst worden vervangen door de geïmporteerde.\n" "\n" "Weet u zeker dat u wilt doorgaan?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopieer/Verplaats-dialoog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Verschil" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Bewerk commentaardialoog" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Bewerker" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Zoek bestanden" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hoofd" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Meervoudig hernoemen" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Mappen synchroniseren" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Kijker" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Een opstelling met die naam bestaat reeds.\n" "Wilt u hem overschrijven?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Weet u zeker dat u de standaardinstellingen wilt terugzetten?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Weet u zeker dat u opstelling '%s' wilt wissen?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopie van %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Voer de nieuwe naam in" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "U dient tenminste één sneltoetsbestand te behouden." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nieuwe naam" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "'%s' opstelling is gewijzigd.\n" "Wilt u deze nu opslaan?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Geen sneltoets met 'ENTER'" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Op opdrachtnaam;Op sneltoets (gegroepeerd);Op sneltoets (één per rij)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan verwijzing naar standaardbalkbestand niet vinden" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Lijst van vensters voor zoeken van bestanden" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deselectie masker" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selectie masker" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Invoer masker:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Er bestaat reeds een kolomweergave met die naam." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configureer aangepaste kolommen" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Geef nieuwe aangepaste kolommennaam" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acties" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standaard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octaal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Snelkoppeling maken ..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Verbreek verbinding met netwerkschijf..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Bewerken" #: ulng.rsmnueject msgid "Eject" msgstr "Uitwerpen" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Pak hier uit..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Breng netwerkschijf in kaart..." #: ulng.rsmnumount msgid "Mount" msgstr "Aankoppelen" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nieuw" #: ulng.rsmnunomedia msgid "No media available" msgstr "Geen media beschikbaar" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Openen" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Open met" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Overig..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Pak hier in..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Herstellen" #: ulng.rsmnusortby msgid "Sort by" msgstr "Rangschik op" #: ulng.rsmnuumount msgid "Unmount" msgstr "Ontkoppelen" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Overzicht" #: ulng.rsmsgaccount msgid "Account:" msgstr "Account:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Alle interne opdrachten van Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Beschrijving: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Extra parameters voor archiveer-opdrachtregel:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Wilt u het tussen aanhalingstekens zetten?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Slechte CRC32 voor resulterend bestand:\n" "\"%s\"\n" "\n" "Wilt u het corrupte resulterende bestand toch behouden?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "U kunt bestand '%s' niet kopiëren of verplaatsen naar zichzelf." #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Kan speciaal bestand %s niet kopiëren" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Kan directory %s niet verwijderen" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kan map '%s' niet overschrijven met niet-map '%s'" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Wijzigen huidige map naar '%s' is mislukt." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle niet-actieve tabbladen verwijderen?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Dit tabblad (%s) is vergrendeld. Toch sluiten?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Bevestiging van parameter" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Weet u zeker dat u wilt afsluiten?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Het bestand %s is veranderd. Wilt u het achterwaarts kopiëren?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Kon niet achterwaarts kopiëren - wilt u het gewijzigde bestand behouden?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopieer %d geselecteerde bestanden/mappen?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopieer geselecteerde '%s'?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Maak een nieuwe bestandsoort'%s bestanden' >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Geef locatie en bestandsnaam in waar een DC-werkbalkbestand op te slaan" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Aangepaste actie" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Verwijder het gedeeltelijk gekopieerde bestand?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Verwijder %d geselecteerde bestanden/mappen?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Verwijder %d geselecteerde bestanden/mappen naar prullenbak?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Verwijder geselecteerde '%s'?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Verwijder geselecteerde '%s' naar prullenbak?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan '%s' niet verwijderen naar prullenbak. Onherroepelijk verwijderen?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Schijf is niet beschikbaar" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Geef naam van aangepaste actie:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Geef bestandachtervoegsel in:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Geef naam:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Geef naam van nieuwe bestandsoort in om te maken voor achtervoegsel '%s'" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-fout in archiefbestandgegevens" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Gegevens zijn niet goed" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Kan niet verbinden met server: '%s'" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Kan bestand %s niet kopiëren naar %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Kan directory %s niet verplaatsen" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Kan bestand %s niet verplaatsen" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Er is al een map genaamd '%s'." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s wordt niet ondersteund" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Map %s bestaat al." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Functie afgebroken door gebruiker" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Fout bij sluiten bestand" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan bestand niet aanmaken" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Geen bestanden meer in archiefbestand" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan bestaand bestand niet openen" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Fout bij lezen van bestand" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Fout bij schrijven naar bestand" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Kan map %s niet aanmaken." #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ongeldige koppeling" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Geen bestanden gevonden" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Niet genoeg geheugen" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Functie niet ondersteund." #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fout in contextmenu opdracht" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fout bij laden instellingen" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Zinsbouwfout in reguliere uitdrukking." #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Kan bestand %s niet hernoemen naar %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan associatie niet opslaan." #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan bestand niet opslaan" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Kan attributen voor '%s' niet instellen" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Kan datum/tijd voor '%s' niet instellen" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Kan eigenaar/groep voor '%s' niet instellen" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Kan rechten voor '%s'niet instellen" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer te klein" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Te veel bestanden om in te pakken" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Archiefbestandsoort onbekend" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Uitvoerbaar bestand: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Afsluitstatus:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Weet u zeker dat u alle elementen wilt verwijderen uit uw favoriete tabbladen? Dit kan niet ongedaan worden gemaakt." #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Sleep andere elementen hierheen" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Geef een naam voor dit element in favoriete tabbladen:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Een nieuw element voor favoriete tabbladen opslaan" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Aantal met succes geëxporteerde favoriete tabbladen: %d op %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Aantal met succes geïmporteerde bestanden: %d op %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Geïmporteerde ouderwetse tabbladen" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Kies .tab-bestand(en) om te importeren (kunnen er meer dan één zijn)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "De laatste wijzigingen van de favoriete tabbladen zijn nog niet opgeslagen. Wilt u die opslaan alvorens door te gaan?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Behoud mapopslaggeschiedenis bij favoriete tabbladen:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Submenunaam" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dit zal de favoriete tabbladen laden: '%s'" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Bestand %s gewijzigd, opslaan?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overschrijven:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Bestand %s bestaat reeds, overschrijven?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Met bestand:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Bestand '%s' niet gevonden." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Bestandbewerkingen actief" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Sommige bestandbewerkingen zijn nog niet voltooid. Afsluiten van Double Commander kan gegevensverlies veroorzaken." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "De lengte van de doelnaam (%d) is meer dan %d tekens.\n" "%s\n" "De meeste programma's kunnen niet overweg met een bestand of map met zulk een lange naam." #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Bestand %s is gemarkeerd als alleen-lezen/verborgen/systeem. Verwijderen?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Weet u zeker dat u het huidige bestand opnieuw wilt laden en de wijzigingen wilt verliezen?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "De bestandsomvang van '%s' is te groot voor doelbestandssysteem." #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Map %s bestaat al, overschrijven?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Volg symbolische koppeling '%s'?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Selecteer de te importeren tekstsoort" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Voeg %d geselecteerde mappen toe" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Voeg geselecteerde map toe: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Voeg huidige map toe: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Doe opdracht" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_iets" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Instellingen van lijst van favoriete mappen" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Weet u zeker dat u alle elementen in uw lijst van favoriete mappen wil verwijderen? Dit is onherroepelijk." #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dit zal de volgende opdracht uitvoeren:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Dit is favoriete map genaamd " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dit zal het actieve venster wijzigen naar het volgende pad:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "En inactieve venster wilde wijzigen naar het volgende pad:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Fout bij reservekopie maken van elementen..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Fout bij exporteren elementen..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exporteer alles." #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exporteer lijst van favoriete mappen - Selecteer de te exporteren elementen" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exporteer geselecteerde" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importeer alles." #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importeer lijst van favoriete mappen - Selecteer de te importeren elementen" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importeer geselecteerde" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Pad:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Localiseer te importeren '.hotlist'-bestand" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Naam van favoriete map" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Aantal nieuwe elementen: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Niets gekozen om te exporteren." #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Pad van favoriete map" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Opnieuw toevoegen geselecteerde map: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Opnieuw toevoegen huidige map: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Geef locatie en bestand van lijst met favoriete mappen om te herstellen" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Opdracht:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(einde submenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Menunaam:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Naam:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(scheidingsteken)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Submenunaam" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Doel van favoriete map" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Bepaal of u wilt dat het actieve venster gesorteerd wordt op een opgegeven manier na wijziging map" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Bepaal of u wilt dat het niet-actieve venster gesorteerd wordt op een opgegeven manier na wijziging map" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Enkele functies om geschikte pad te selecteren, relatief, absoluut, vensters speciale mappen, etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Aantal alle opgeslagen elementen: %d\n" "\n" "Naam reservekopie: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Totaal elementen geëxporteerd: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Wilt u alle elementen in het submenu [%s] verwijderen?\n" "Als u NEE antwoordt, worden alleen menuscheidingstekens verwijderd, maar blijft het element in het submenu." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Geef locatie en bestandsnaam in waarin een lijstbestand met favoriete mappen opgeslagen moet worden" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Onjuist resultaat bestandlengte voor bestand: '%s'" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Voer a.u.b. volgende schijf (of vergelijkbaar) in.\n" "Opdat dit bestand kan worden geschreven:\n" "'%s'\n" "\n" "Aantal nog te schrijven bytes: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fout in opdrachtregel" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ongeldige bestandsnaam" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ongeldige bestandsoort van configuratiebestand" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Ongeldig hexadecimaal getal: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ongeldig pad" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Pad %s bevat verboden tekens." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dit is geen geldig invoegsel." #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dit invoegsel is gemaakt voor Double Commander voor %s.%sHet werkt niet met Double Commander voor %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ongeldig gebruik van aanhalingstekens" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ongeldige selectie." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Laden bestandenlijst..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Lokaliseer TC-configuratiebestand (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Lokaliseer TC-uitvoerbaar bestand (totalcmd.exe of totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopieer bestand %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Verwijder bestand %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fout: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Start extern" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Resultaat extern" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Uitpakken bestand %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Maak koppeling %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Maak map %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Verplaats bestand %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Inpakken naar bestand %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Afsluiten van programma" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Starten van programma" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Verwijder map %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Klaar: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Maak symbolische koppeling %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Beproef bestandsintegriteit %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Wis bestand %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Wis map %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hoofdwachtwoord" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Geef a.u.b. het hoofdwachtwoord in:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nieuw bestand" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "De volgende schijf zal worden uitgepakt" #: ulng.rsmsgnofiles msgid "No files" msgstr "Geen bestanden" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Geen bestanden geselecteerd." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Niet genoeg vrije ruimte op doelschijf, doorgaan?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Niet genoeg vrije ruimte op doelschijf, opnieuw proberen?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Kan bestand %s niet verwijderen" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Niet verwezenlijkt." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Object bestaat niet." #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "De actie kan niet worden voltooid omdat het bestand geopend is in een ander programma:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Onderstaand is een voorbeeldweergave. U kunt de aanwijzer bewegen en bestanden kiezen om direct een idee te krijgen van hoe het werkt en eruit ziet." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Wachtwoord:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Wachtwoorden zijn verschillend." #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Geef a.u.b. het wachtwoord in:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Wachtwoord (firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Geef a.u.b. het wachtwoord opnieuw in voor verificatie:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Verwijder %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voorinstelling '%s' bestaat reeds. Overschrijven?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Weet u zeker dat u de voorinstelling \"%s\" wilt verwijderen?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Probleem bij uitvoeren van opdracht (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Bestandsnaam voor versleepte tekst:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Maak dit bestand a.u.b. beschikbaar. Opnieuw proberen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Geef nieuwe vriendelijke naam voor deze favoriete tabbladen" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Geef nieuwe naam voor dit menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Verplaats/hernoem %d geselecteerde bestanden/mappen?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Verplaats/hernoem geselecteerde '%s'?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Wilt u deze tekst vervangen?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Herstart a.u.b. Double Commander om wijzigingen door te voeren" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "FOUT: probleem bij het laden van Lua-bibliotheekbestand \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Kies de bestandsoort om het achtervoegsel '%s' aan toe te voegen" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Geselecteerd: %s van %s, bestanden: %d van %d, mappen: %d van %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Kies uitvoerbaar bestand voor" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Kies a.u.b. alleen controlesombestanden." #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Kies a.u.b. locatie van volgende schijf" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Stel schijfetiket in" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Speciale mappen" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Voeg pad van actieve omlijsting toe" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Voeg pad van actieve omlijsting toe" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Verken en gebruik geselecteerde pad" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Gebruik omgevingsvariabele..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ga naar speciaal pad van Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ga naar omgevingsvariabele..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ga naar andere speciale map van Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ga naar speciale map van Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Maak relatief t.o.v. pad van favoriete mappen" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Maak pad absoluut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Maak relatief naar speciaal pad van Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Maak relatief naar omgevingsvariabele..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Maak relatief naar speciale map van Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Maak relatief naar andere speciale map van Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Gebruik speciaal pad van Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Gebruik pad van favoriete mappen" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Gebruik andere speciale map van Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Gebruik speciale map van Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Dit tabblad (%s) is vergrendeld. Map openen in ander tabblad?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Hernoem tabblad" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nieuwe tabbladnaam:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Doelpad:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Fout. Kan het TC-configuratiebestand niet vinden:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Fout. Kan het uitvoerbare TC-configuratiebestand niet vinden:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Fout. TC draait nog maar moet gesloten worden voor deze bewerking.\n" "Sluit TC en druk op Oké of op Annuleren om af te breken." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format, fuzzy, badformat msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Fout. Kan de gewenste TC-werkbalkdoelmap %s niet vinden:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Geef locatie en bestandsnaam in waarin een TC-werkbalkbestand opgeslagen moet worden" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Ingebouwde terminalvenster uitgeschakeld. Wilt u het inschakelen?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "WAARSCHUWING: het beëindigen van een proces kan ongewenste resultaten veroorzaken, waaronder gegevensverlies en systeeminstabiliteit. Het proces krijgt niet de kans om de status of gegevens op te slaan voordat het wordt beëindigd. Weet u zeker dat u het proces wilt beëindigen?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Wilt u het gekozen archiefbestand uitproberen?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "'%s' staat nu op het klembord" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Achtervoegsel van gekozen bestand is geen herkende bestandsoort" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Localiseer '.toolbar'-bestand om te importeren" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Localiseer '.BAR'-bestand om te importeren" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Geef locatie en bestandsnaam in van te herstellen werkbalk" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Opgeslagen.\n" "Werkbalkbestandsnaam: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Teveel bestanden geselecteerd." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Onbepaald" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "Fout: onverwacht gebruik van boomstructuurmenu." #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<GEEN EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<GEEN NAAM>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Gebruikersnaam:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Gebruikersnaam (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFICATIE:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Wilt u de gekozen checksums verifiëren?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Het doelbestand is corrupt: controlesom komt niet overeen." #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Schijfetiket:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Geef a.u.b. schijfgrootte op:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Wilt u de locatie van de Lua-bibliotheek configureren?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Wis %d geselecteerde bestanden/mappen?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Wis geselecteerde '%s'?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "met" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Verkeerd wachtwoord.\n" "Probeer a.u.b. opnieuw." #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automatisch hernoemen naar 'naam (1).ext', 'naam (2).ext' enz.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Teller" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Naam van voorinstelling" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Definieer de variabelenaam" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Definieer variabele waarde" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Enter variable name" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Voer een waarde in voor variabele \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Negeren, gewoon opslaan als de [Laatste];Vraag de gebruiker om te bevestigen of we het opslaan;Automatisch opslaan" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Achtervoegsel" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Naam" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Geen wijziging;HOOFDLETTERS;kleine letters;Eerste letter hoofdletter;Ieder Woord Begint Met Hoofdletter;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[De laatst gebruikte]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Meervoudig hernoemen" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Teken op positie x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Tekens van positie x tot y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Volledige datum" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Volledige tijd" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Teller" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dag" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Dag (twee cijfers)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Weekdag (kort, bijv. 'ma')" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Weekdag (lang, bijv. 'maandag')" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Achtervoegsel" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Volledige bestandsnaam met pad en achtervoegsel" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Volledige bestandsnaam, teken van pos x tot y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Uur" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Uur (twee cijfers)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuut" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuut (twee cijfers)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Maand" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Maand (twee cijfers)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Maandnaam (kort, bijv. 'jan')" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Maandnaam (lang, bijv. 'januari')" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Naam" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Moedermap(pen)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Seconde" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Seconden (twee cijfers)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Jaar (twee cijfers)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Jaar (vier cijfers)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Invoegtoepassingen" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Voorinstelling opslaan als" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Vooraf ingestelde naam bestaat al. Overschrijven?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Voer een nieuwe voorinstellingsnaam in" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Voorinstelling \"%s\" is gewijzigd.\n" "Wilt u deze nu opslaan?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Voorinstellingen sorteren" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Tijd" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Waarschuwing: dubbele namen." #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Bestand bevat verkeerde aantal regels: is %d, zou %d moeten zijn." #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Behouden;Wissen;Vragen" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Geen interne equivalente opdracht" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Helaas, nog geen venster voor 'Bestanden zoeken'..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Sorry, geen ander venster 'Bestanden zoeken' om te sluiten en vrij te maken uit het geheugen ..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Ontwikkeling" #: ulng.rsopenwitheducation msgid "Education" msgstr "Onderwijs" #: ulng.rsopenwithgames msgid "Games" msgstr "Spelletjes" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Afbeeldingen" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Netwerk" #: ulng.rsopenwithoffice msgid "Office" msgstr "Kantoor" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Overig" #: ulng.rsopenwithscience msgid "Science" msgstr "Wetenschap" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Instellingen" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Systeem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Hulpmiddelen" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afgebroken" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Berekenen checksum" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Bezig met berekenen checksum in '%s'" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Bezig met berekenen checksum van '%s'" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Berekenen" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Bezig met berekenen '%s'" #: ulng.rsopercombining msgid "Joining" msgstr "Samenvoegen" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Bezig met samenvoegen bestanden in '%s' naar '%s'" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiëren" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Bezig met kopiëren van '%s' naar '%s'" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Bezig met kopiëren '%s' naar '%s'" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Bezig met maken van map" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Bezig met maken van map '%s'" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Verwijderen" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Bezig met verwijderen in '%s'" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Bezig met verwijderen van '%s'" #: ulng.rsoperexecuting msgid "Executing" msgstr "Uitvoeren" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Bezig met uitvoeren '%s'" #: ulng.rsoperextracting msgid "Extracting" msgstr "Uitpakken" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Bezig met uitpakken van '%s' naar '%s'" #: ulng.rsoperfinished msgid "Finished" msgstr "Klaar" #: ulng.rsoperlisting msgid "Listing" msgstr "Lijst maken" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Bezig met lijst maken van '%s'" #: ulng.rsopermoving msgid "Moving" msgstr "Verplaatsen" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Bezig met verplaatsen van '%s' naar '%s'" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Bezig met verplaatsen van '%s' naar '%s'" #: ulng.rsopernotstarted msgid "Not started" msgstr "Niet gestart" #: ulng.rsoperpacking msgid "Packing" msgstr "Inpakken" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Bezig met inpakken van '%s' naar '%s'" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Bezig met inpakken van '%s' naar '%s'" #: ulng.rsoperpaused msgid "Paused" msgstr "Gepauzeerd" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pauzeren" #: ulng.rsoperrunning msgid "Running" msgstr "Bezig" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Instelling eigenschappen" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Instellen eigenschappen in '%s'" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Instellen eigenschappen van '%s'" #: ulng.rsopersplitting msgid "Splitting" msgstr "Splitsen" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "'%s' splitsen in '%s'" #: ulng.rsoperstarting msgid "Starting" msgstr "Starten" #: ulng.rsoperstopped msgid "Stopped" msgstr "Gestopt" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stoppen" #: ulng.rsopertesting msgid "Testing" msgstr "Beproeven" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Bezig met uitproberen in '%s'" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Bezig met uitproberen van '%s'" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verifiëren van checksum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Bezig met verifiëren checksum in '%s'" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Bezig met verifiëren checksum van '%s'" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Wachtend op toegang tot bestandsbron" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Wachtend op reactie van gebruiker" #: ulng.rsoperwiping msgid "Wiping" msgstr "Wissen" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Bezig met wissen in '%s'" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Bezig met wissen van '%s'" #: ulng.rsoperworking msgid "Working" msgstr "Bezig" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Voeg toe aan begin;Voeg toe aan einde;Slim toevoegen" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Nieuw tooltip-bestandstype toevoegen" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Om de huidige bewerkingsarchief-configuratie te wijzigen, kunt u de huidige bewerkingsarchief-configuratie TOEPASSEN of VERWIJDEREN" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Modusafhankelijk, extra commando" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Voeg toe als het niet leeg is" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Archiefbestand (lange naam)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Kies ingsprogramma" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Archiefbestand (korte naam)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Pas archiverings code aan" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Weet u zeker dat u '%s' wilt verwijderen?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Exporteer archiveringsprogramma configuratie" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Exporteer archiveringsprogramma configuratie" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exporteren van%d elementen naar bestand \"%s\" voltooid." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Selecteer degene(n) die u wilt exporteren" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Bestandslijst (lange namen)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Bestandslijst (korte namen)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importeer archiveringsprogramma configuratie" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importeren van%d elementen uit bestand \"%s\" voltooid." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Selecteer het bestand om de archiverconfiguratie(s) te importeren" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Selecteer degene(n) die u wilt importeren" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Gebruik alleen de naam, zonder pad" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Gebruik alleen pad, zonder naam" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Archiefprogramma (lange naam)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Archiefprogramma (korte naam)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Citeer alle namen" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Citeer namen met spaties" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Eén bestandsnaam om te verwerken" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Doel-submap" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Gebruik ANSI-codering" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Gebruik UTF8-codering" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Voer de locatie en bestandsnaam in waar u de archiveringsconfiguratie wilt opslaan" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Archiefbestandtype naam:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associeer invoegsel '%s' met:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Eerst;Laatst;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassiek;Ouderwetse volgorde;Alfabetische volgorde (maar taal toch eerst)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Volledig uitvouwen;Volledig samenvouwen" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Actieve omlijstingspaneel op links, inactieve op rechts (ouderwets);Linker omlijstingspaneel op links, rechter op rechts" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Geef achtervoegsel in" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Voeg toe bij begin;Voeg toe aan einde;Alfabetisch rangschikken" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "apart venster;geminimaliseerd apart venster;bewerkingenpaneel" #: ulng.rsoptfilesizefloat msgid "float" msgstr "drijvend" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Sneltoets %s voor cm_Delete zal geregistreerd worden, zodat het gebruikt kan worden om deze instelling om te keren." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Voeg toe sneltoets voor %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Voeg sneltoets toe" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kan sneltoets niet instellen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Wijzig sneltoets" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Opdracht" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Sneltoets %s voor cm_Delete heeft een parameter die deze instelling passeert. Wilt u deze parameter wijzigen en de globale instelling gebruiken?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Sneltoets %s voor cm_Delete heeft een gewijzigde parameter nodig om met sneltoets %s overeen te komen. Wilt u dit wijzigen?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beschrijving" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Bewerk sneltoets voor %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Repareer parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Sneltoets" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Sneltoetsen" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<geen>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parameters" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Instellen sneltoets om bestand te verwijderen" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Om met deze instelling te werken %s, sneltoets %s moet worden toegewezen aan cm_Delete, maar die is reeds toegewezen aan %s. Wilt u dit wijzigen?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Sneltoets %s voor cm_Delete is een volgordesneltoets waarvoor een sneltoets met omkeer Shift niet toegewezen kan worden. Deze instelling zal misschien niet werken." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Sneltoets is in gebruik" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Sneltoets %s wordt reeds gebruikt." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Dit wijzigen naar %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "gebruikt voor %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "gebruikt voor deze opdrachtregel maar met verschillende parameters" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Archiveringsprogramma's" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Auto-ververs" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Gedrag" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Kort" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Kleuren" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Kolommen" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Instellingen" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Aangepaste kolommen" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Lijst met favoriete mappen" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Slepen en neerzetten" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Schijflijstknop" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favoriete tabbladen" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Bestandassociaties extra" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Bestandassociaties" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nieuw" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Bestandbewerkingen" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Bestandpanelen" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Bestandzoekopdracht" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Bestandweergaven" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Bestandweergaven extra" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Bestandsoorten" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Maptabbladen" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Maptabbladen extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Lettertypes" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Markeerders" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Sneltoetsen" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Pictogrammen" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Negeerlijst" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Sleutels" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Taal" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Vormgeving" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Logboek" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Diversen" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Muis" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Meervoudig hernoemen" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Er zijn opties veranderd in '%s'.\n" "\n" "Wilt u de wijzigingen opslaan?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Invoegtoepassingen" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Snelzoeken/filter" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminalvenster" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Werkbalk" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Werkbalk extra" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Werkbalk midden" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Gereedschappen" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Tooltips" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Boomstructuurmenu" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Kleuren van boomstructuurmenu" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Geen;Opdrachtregel;Snelzoeken;Snelfilter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Linkerknop;Rechterknop;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "bovenaan bestandslijst;na onderverdeling (indien mappen zijn gesorteerd voor bestanden;op gesorteerde positie;onderaan bestandslijst" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Invoegsel %s is reeds toegewezen aan de volgende achtervoegsels:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Uitschakelen" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Inschakelen" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actief" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Beschrijving" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Bestandsnaam" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Op achtervoegsel" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Op invoegsel" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Naam" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Het sorteren van WCX-invoegsels is alleen mogelijk wanneer invoegsels worden weergegeven op achtervoegsel." #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Geregistreerd voor" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Selecteer Lua-bibliotheekbestand" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Naam van zweeftip-bestandstype wijzigen" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Gevoelig;&Ongevoelig" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Bestanden;Mappen;Bestanden en mappen" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Filterpaneel verbergen wanneer niet gefocust; Bewaar instellingswijzigingen voor de volgende sessie" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "niet hoofdlettergevoelig;overeenkomstig lokale instellingen (aAbBcC);eerst hoofdletters dan kleine letters (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sorteer op naam en toon eerste;rangschik als bestanden en toon eerste;rangschik als bestanden" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetisch, rekening houdend met accenten; Alfabetisch met sortering van speciale tekens; Natuurlijke sortering: alfabetisch en cijfers; Natuurlijk met sortering van speciale tekens" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Boven;Onder;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Scheidingsteken;Interne opdracht;Externe opdracht;Menu" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Tooltip-bestandstype naam:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "'%s' bestaat reeds." #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Weet u zeker dat u '%s' wilt verwijderen?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Geëxporteerde zweeftip-bestandstype configuratie" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Configuratie van zweeftip-bestandstype exporteren" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exporteren van %d elementen naar bestand '%s' voltooid." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Selecteer degene(n) die u wilt exporteren" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Configuratie van zweeftip-bestandstype importeren" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importeren van %d elementen uit bestand '%s' voltooid." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Selecteer het bestand om de zweeftip-bestandstype configuratie te importeren" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Selecteer degene(n) die u wilt importeren" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Voer de locatie en bestandsnaam in waarin de configuratie van het zweeftip-bestandstype moet worden opgeslagen" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Zweeftip-bestandstype naam" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC ouderwets - Kopieer (x) bestandsnaam.ext;Windows - bestandsnaam (x).ext;Ander - bestandsnaam (x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "wijzig plaats niet;gebruik dezelfde instelling als voor nieuwe bestanden;op gerangschikte plaats" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Met volledig absoluut pad;Pad relatief ten opzichte van %COMMANDER_PATH%;Relatief ten opzichte van het volgende" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "bevat (hoofdlettergevoelig)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "bevat" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Veld '%s' niet gevonden." #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Invoegsel '%s' niet gevonden." #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Bestanden: %d, mappen: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Kan toegangsrechten voor '%s' niet wijzigen" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Kan eigenaar van '%s' niet wijzigen" #: ulng.rspropsfile msgid "File" msgstr "Bestand" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Map" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "" #: ulng.rspropssocket msgid "Socket" msgstr "" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciaal blokapparaat" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciaal tekenapparaat" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolische koppeling" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Onbekend type" #: ulng.rssearchresult msgid "Search result" msgstr "Zoekresultaat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ZOEKEN" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<naamloze sjabloon>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Er wordt al een bestand gezocht met de DSX-invoegtoepassing.\n" "We hebben deze nodig voordat we een nieuwe starten." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Er wordt al een bestand gezocht met de WDX-invoegtoepassing.\n" "We hebben deze nodig voordat we een nieuwe starten." #: ulng.rsselectdir msgid "Select a directory" msgstr "Kies een map" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Kies uw venster" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Toon hulp voor %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alles" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Categorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolom" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Opdracht" #: ulng.rssimpleworderror msgid "Error" msgstr "Fout" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Mislukt." #: ulng.rssimplewordfalse msgid "False" msgstr "Verkeerd" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Bestandsnaam" #: ulng.rssimplewordfiles msgid "files" msgstr "bestanden" #: ulng.rssimplewordletter msgid "Letter" msgstr "Letter" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Result" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Succes." #: ulng.rssimplewordtrue msgid "True" msgstr "Waar" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Variabele" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "WerkMap" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Bestanden: %d, Mappen: %d, Grootte: %s (%s, bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kan doelmap niet maken." #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Onjuiste bestandsgrootte-opmaak." #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan bestand niet opsplitsen." #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Het aantal delen is meer dan 100. Doorgaan?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Kies map:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Alleen voorbeeldweergave" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Overige" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Kanttekening" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Plat" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Beperkt" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Eenvoudig" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Geweldig" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Wonderbaarlijk" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Supergeweldig" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Kies uw map vanuit de mapgeschiedenis" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Kies uw favoriete tabbladen:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Kies uw opdracht vanuit de opdrachtregelgeschiedenis" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Kies uw actie vanuit het hoofdmenu" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Kies uw actie vanuit de hoofdwerkbalk" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Kies uw map vanuit de mapfavorieten:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Kies uw map vanuit de bestandbezichtigingsgeschiedenis" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Kies uw bestand of map" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Fout bij maken symbolische koppeling." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Standaardtekst" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Platte tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Doe niets;Sluit tabblad;Benader favoriete tabbladen;Opduikmenu voor tabbladen" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Dag(en)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "U(u)r(en)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minu(u)t(en)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Maand(en)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Seconde(n)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "We(e)k(en)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Ja(a)r(en)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Hernoem favoriete tabbladen" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Hernoem het submenu van de favoriete tabbladen" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Verschil" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Bewerker" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fout bij openen verschil" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fout bij openen bewerker" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fout bij openen terminalvenster" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fout bij openen kijker" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminalvenster" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Kijker" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapporteer deze fout a.u.b. aan de bugtracker met een omschrijving van wat u aan het doen was en het volgende bestand: %s Druk op %s om door te gaan of op %s om het programma af te breken." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Beide panelen, van actief naar inactief" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Beide panelen, van links naar rechts" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pad van paneel" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Zet elke naam tussen haakjes, of wat u wilt" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Alleen bestandsnaam, geen achtervoegsel" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Volledige bestandsnaam (pad+bestandsnaam)" #: ulng.rsvarhelpwith #, fuzzy msgid "Help with \"%\" variables" msgstr "Hulp voor '%' variabelen" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Zal gebruiker vragen om een parameter in te voeren met een voorgestelde standaardwaarde" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Laatste map van werkbalkpad" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Laatste map van bestandpad" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Linkerpaneel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Tijdelijke bestandsnaam van lijst met bestandsnamen" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Tijdelijke bestandsnaam van lijst van volledige bestandsnamen (pad+bestandsnaam)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Bestandsnamen in lijst in UTF-16 met BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Bestandsnamen in lijst in UTF-16 met BOM, tussen dubbele aanhalingstekens" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Bestandsnamen in lijst in UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Bestandsnamen in lijst in UTF-8, tussen dubbele aanhalingstekens" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Tijdelijke bestandsnaam van lijst van bestandsnamen met relatief pad" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Aleen bestandachtervoegsel" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Alleen bestandsnaam" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Ander voorbeeld want wat er mogelijk is" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Pad zonder eindebegrenzer" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Vanaf hier tot aan het einde van de regel is de procent-variabele indicator het \"#\" -teken" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Vanaf hier tot het einde van de regel is de procent-variabele indicator terug het \"%\" -teken" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Geef elke naam het voorvoegsel '-a' (of wat u wilt)" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Vraag gebruiker om param;Standaardwaarde voorgesteld]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Bestandsnaam met relatief pad" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Rechterpaneel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Volledige pad van tweede gekozen bestand in rechterpaneel" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Toon opdracht voor uitvoering" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Simpele boodschap]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Zal een eenvoudige boodschap tonen" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Actief paneel (bron)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inactief paneel (doel)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Vanaf hier zullen bestandnamen tussen aanhalingstekens worden gezet (standaard)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Opdracht zal worden uitgevoerd in de terminal, die daarna open zal blijven" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Paden zullen een eindebegrenzer hebben" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Vanaf hier zullen bestandnamen niet tussen aanhalingstekens worden gezet" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Opdracht zal worden uitgevoerd in de terminal, die daarna gesloten zal worden" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Paden zullen geen eindebegrenzer hebben (standaard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Netwerk" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Prullenbak" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Ingebouwde kijker van Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Slechte kwaliteit" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codering" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Afbeeldingsoort" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nieuwe grootte" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s niet gevonden." #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "met externe kijker" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "met interne kijker" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Aantal vervangingen: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Er vond geen vervanging plaats." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.nb.po�����������������������������������������������������������0000644�0001750�0000144�00001405602�15104114162�017254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Jostein Skjelstad <askjelstad@mac.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2020-06-09 14:40+0200\n" "Last-Translator: Jostein Skjelstad <jskjelstad@icloud.com>\n" "Language-Team: Norsk (bokmål) <askjelstad@mac.com>\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Norsk-nb\n" "X-Generator: Poedit 2.3\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Sammenlikner... %d%% (ESC for å avbryte)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Høyre: Slett %d file(r)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Filer funnet: %d (Identiske: %d, Ulike: %d, Unike venstre: %d, Unike høyre: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Venstre til høyre: Kopiér %d fil(er), totalt: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Høyre til venstre: Kopiér %d fil(er), totalt: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Velg mal..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Kontrollér ledig plass" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Kopiér attributt" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "&Kopiér eierskap" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "&Kopiér tillatelser" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Kopiér dato/tid" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "&Korrigér linker" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "&Fjern skrivesperre" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Utelat tomme mapper" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Følg linker" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservér plass" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Verifisér" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Hva når tid, attributt, mm. på fila ikke kan innstilles." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Bruk filmal" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "&Når mappa finnes fra før" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "&Når fila finnes fra før" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "&Når egenskaper ikke kan innstilles" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<uten mal>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiér til utklipp" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Bygg" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Nettside:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisjon" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versjon" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Nullstill" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Velg attributt" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arkiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "&Komprimert" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mappe" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Kryptert" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skjult" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "&Skrivesperret" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Glissen" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolsk link" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&System" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Midlertidig" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-attributt" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Generelle attributt" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eier" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utføre" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lese" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "&Som tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Skrive" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Testprogram" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Testprogram data størrelse: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Tid (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Fart (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Kontrollsummér..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Åpn kontrollsumfil etter at jobb er utført" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Opprett separat kontrollsumfil for hver fil" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Lagr kontrollsum-fil(er) som:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifisér kontrollsum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Koder" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Legg til" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Kopl opp" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Slett" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Koplingsmanager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Kople til:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Sett i kø" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Innstillinger" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Lagr innstillingene som standard" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiér fil(er)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Lagr beskrivelse" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Fil/mappe-kommmentar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Redigér kommentar for:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Koding:" #: tfrmdescredit.lblfilename.caption #, fuzzy msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Sammenlikn automatisk" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "&Binær modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Avbryt" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Avbryt" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiér blokk mot &høyre" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiér blokk mot &høyre" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiér blokk mot &venstre" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiér blokk mot &venstre" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lim inn" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Gjenta" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Gjenta" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Markér alt" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Angr" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Angr" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Avslutt" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Finn" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Finn" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Finn neste" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Finn forrige" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Erstatt" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Erstatt" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Første forskjell" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Første forskjell" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorér forskjell på STORE og små bokstaver" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorér blanke" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Felles rulling" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "S&iste forskjell" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "S&iste forskjell" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Linjeforskjeller" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "&Neste forskjell" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "&Neste forskjell" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Åpn venstre..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Åpn høyre..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Farg bakgrunnen" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "&Forrige forskjell" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "&Forrige forskjell" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Gjeninnles" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Gjeninnles" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Lagr" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Lagr " #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Lagr som..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Lagr som" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Lagr venstre" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Lagr venstre" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Lagr venstre som..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Lagr venstre som..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Lagr høyre" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Lagr høyre" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Lagr høyre som..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Lagr høyre som..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "&Sammenlikn" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "&Sammenlikn" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Koder" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Koder" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Sammenlikn innhold" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Venstre" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Høyre" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Handlinger" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Koder" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Innstillinger" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Legg til ny snarveg til sekvens" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Fjern siste snarveg fra sekvens" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Velg snarveg fra lista over ledige taster" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Bare for disse styringselementene" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (hver i egen linje):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Snarveger:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Om" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Oppsett" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Oppsett" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "K&opiér" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopiér" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Klipp ut" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Slett" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Finn" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Finn" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Finn neste" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lim inn" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Lim inn" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Gjenta" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Gjenta" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Erstatt" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Erstatt" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Markér alle" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Markér alt" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Angr" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Angr" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Lukk" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ut" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Ny" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Ny" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Åpn" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Åpn" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Gjeninnles" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Lagr" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Lagr " #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "&Lagr som..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Lagr som" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Koder" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Åpn som" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Lagr som" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fil" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Framhev syntaks" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Linjeavslutning" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Skille mellom STORE og små bokstaver" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Søk fra skrivemerket" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulære uttrykk" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "&Bare markert tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Bare hele ord" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Valg" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Erstatt med:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Søk etter:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Retning" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Pakk ut filer" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Pakk ut stinavn dersom lagret med fil(er)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "&Pakk ut hvert arkiv til separat mappe (med navn som arkivet)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Overskriv eksisterende filer" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "&Til mappa:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Fil(er) som skal pakkes ut:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Passord for krypterte filer:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Vent.." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Filnavn:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Fra:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klikk på Lukk når midlertidig fil kan slettes!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Til panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vis alle" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Pågående handling:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Fra:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Til:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Egenskaper" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "&Tillat utføring av fila som program" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Eier" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Annet" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eier" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Inneholder:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Opprettet:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utfør" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Utfør:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Plassering:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppe" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Sist åpnet:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Sist endret:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Attributt endret:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Eier" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lese" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Størrelse:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink til:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Filtype:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Navn" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Verdi" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributt" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Egenskaper" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Lukk" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Avslutt" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Lås opp" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Lås opp alle" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Lås opp" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Prosess-ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Utførbar sti" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Avbryt" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Avbryt søk og lukk vindu" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "&Lukk" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Sett opp hurtigtaster" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Redigér" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "&Kopiér til listeboks" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Avbryt søk, lukk og fjern fra minne" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "For alle andre \"Søk...\", avbryt. lukk og fjern fra minne" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Gå til fil" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Finn filinnhold" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Siste søk" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nytt søk" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nytt søk (slett forrige)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Gå til side \"Avansert\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Gå til side \"Åpn/Lagr\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "&Til neste side" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Gå til side \"Plugins\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "&Til forrige side" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Gå til side \"Resultat\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Gå til side \"Standard\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Lagr" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Slett" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Hent" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Lagr" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "&Lagr med \"Start i mappe\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Når det blir lagret med \"Start i mappe\" vil avgrensningen bli gjendannet ved innlesing av mal. Brukes hvis du vil avgrense søket til ei bestemt mappe" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Bruk mal" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Finn filer" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "&Skill mellom STORE og små bokstaver" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Fra dato:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "&Til dato:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Filstørrelse fra:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "&Filstørrelse til:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "&Søk i pakkede filer" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Finn tekst" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "&Følg symbolske linker" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "&Finn filer som IKKE inneholder tekst" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "&Ikke eldre enn:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Åpn faner" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "&Søk etter del av filnavn" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulært uttrykk" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "&Erstatt med" #: tfrmfinddlg.cbselectedfiles.caption #, fuzzy #| msgid "Selected directories and &files" msgid "Selected directories and files" msgstr "&Søk bare i valgte mapper/filer" #: tfrmfinddlg.cbtextregexp.caption #, fuzzy #| msgid "Regular &expression" msgid "Reg&ular expression" msgstr "&Regulært uttrykk" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Fra tid:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&Til tid:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Bruk søke-plugin:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption #, fuzzy #| msgid "Hexadecimal" msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Heksadesimal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Tast inn mappenavn som skal utelates i søket, skilt med \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Tast inn filnavn som skal utelates i søket, skilt med \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Tast inn filnavn, skilt med \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Verdi" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Filer" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Finn data" #: tfrmfinddlg.lblattributes.caption msgctxt "tfrmfinddlg.lblattributes.caption" msgid "Attri&butes" msgstr "&Attributt" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Koding:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "&Utelat undermapper" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Utelat filer" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Søk etter" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "&Start i mappe" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "&Søk i undermapper:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Tidligere søk:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Handling" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "For alle andre: avbryt, lukk og fjern fra minne" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Åpn i ny fane" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Valg" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Fjern fra liste" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Resultat" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Vis alle funn" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Vis i editor" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Vis i framviser" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avansert" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Åpn/lagr" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultat" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Finn" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Finn" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "&STORE og små bokstaver" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regulære uttrykk" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Passord:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Brukernavn:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Opprett hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Målet, som linken skal peke på" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Navn på linken" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importér alle!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importér valgte" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Velg de oppføringene du vil importere" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Klikk på en undermeny vil velge hele menyen" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Hold CTRL nede og klikk på oppføringene for å velge flere" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Slå sammen filer" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Slå sammen til..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Filnavnet" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Ned" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Ned" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Slett" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Opp" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Opp" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Om" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktivér fane ved indeksnr" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Legg til filnavn til kommandolinje" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nytt søk..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Legg til sti og filnavn til kommandolinje" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiér sti til kommandolinje" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Testprogram" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "&Kompakt visning" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kompakt visning" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "&Regn ut brukt plass" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Skift mappe" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Gå til home-mappa" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Gå til overmappe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gå til rot-mappa" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Kontrollsummér..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verifisér kontrollsum (fra kontrollsumfil)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Tøm loggfil" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Tøm loggvindu" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "&Lukk alle fanene" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Lukk dupliserte faner" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Lukk fane" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Neste kommandolinje" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Hent neste kommando fra historikk til kommandolinje" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Forrige kommandolinje" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Hent forrige kommando fra historikk til kommandolinje" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "&Kolonnevisning" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolonnevisning" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "&Sammenlikn innhold" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "&Sammenlikn mappene" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "&Sammenlikn mappene" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Sett opp pakkeprogrammer" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Sett opp favorittmapper" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Sett opp favorittfaner" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Sett opp faner" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Sett opp hurtigtaster" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Sett opp pluginer" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Lagr posisjon" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Lagr oppsett" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Sett opp søk" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Verktøylinje..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Sett opp hint" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Sett opp tre-visning" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Sett opp farger på tre-visning" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Vis kontekstmeny" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiér" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopiér alle fanene til motsatt side" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "&Kopiér alle viste kolonner" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "&Kopiér filnavn + sti til Utklipp" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopiér filnavn til Utklipp" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopiér navn med UNC-sti" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiér filer uten stadfesting" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiér komplette sti(er) for valgt(e) fil(er) uten avsluttende mappe-separator" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiér komplette sti(er) for valgt(e) fil(er)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiér til samme panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiér til Utklipp" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Vis brukt plass" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Klipp ut" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Vis kommandoparametre" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "For alle søk, avbryt, lukk og fjern fra minne" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Mappehistorikk" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Favorittmapper" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Velg en kommando og utfør den" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Redigér" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "&Redigér filkommentar..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Redigér ny fil" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Redigér stifeltet over fillista" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Bytt om panelene" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Utfør script" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Pakk ut filer..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "&Sett opp assosiering" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Slå sammen filer..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "&Vis egenskaper" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Del opp fil..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Flat visning" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus på kommandolinja" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Bytt fokus" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Skift mellom venstre og høyre fil-liste" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Fokus på tre-visning" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Veksl mellom vist filliste og trevisning (om innstilt)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Plasser markøren på første fil på lista" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Plasser markøren på siste fil på lista" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Opprett hardlink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Innhold" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horisontal visning" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatur" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Kort visning i venstre panel" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Kolonnevisning i venstre panel" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "&Venstre = Høyre" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Flat visning i venstre panel" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Åpn venstre drevliste" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "&Omvendt rekkefølge i venstre panel" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "&Sortér venstre panel etter egenskaper" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "&Sortér venstre panel etter dato" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "&Sortér venstre panel etter filending" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "&Sortér venstre panel etter navn" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "&Sortér venstre panel etter størrelse" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vis miniatyrer i venstre panel" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Hent fane fra favorittfane" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Hent markering fra &Utklipp" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Hent markering fra fil..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Hent faner fra fil" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Ny mappe" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Markér alle av samme &type" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Markér alle filer med samme navn" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Markér alle filer med samme navn og type" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Markér alle i samme sti" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Invertér markering" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Markér alle" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Innskrenk markéring..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Utvid markéring..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Avmarkér alle" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimér vindu" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi &Rename Tool" msgid "Multi-&Rename Tool" msgstr "&Multi-omdøping" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Kopl til nettverk..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Kopl fra nettverk" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Hurtig nettverkstilkopling..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Ny fane" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Les inn neste favorittfane i lista" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "&Skift til neste fane" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Åpn" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Prøv å åpne arkiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Åpn panelfil" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "&Åpn mappe i ny fane" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Åpn drev ved indeksnr" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "&Andre filsystem (VFS)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vis handlinger" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Alle oppsett..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Pakk filer..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Flytt midtsprosse" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Lim inn" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Les inn forrige favorittfane i lista" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "&Skift til forrige fane" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hurtigfilter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hurtigsøking" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hurtigvisning" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Oppdatér" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Gjeninnles siste brukte favorittfaner" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Flytt" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Flytt/omdøp filer uten stadfesting" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Omdøp" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Omdøp fane" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Lagr siste favorittfane" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Gjenopprett markering" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Omvendt sortering" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Kort visning i høyre panel" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Kolonnevisning i høyre panel" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Høyre &= venstre" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Flat visning i høyre panel" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Åpn høyre drevliste" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "&Omvendt sortering i høyre panel" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "&Sortér høyre panel etter egenskaper" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "&Sortér høyre panel etter dato" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "&Sortér høyre panel etter filending" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "&Sortér høyre panel etter navn" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "&Sortér høyre panel etter størrelse" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vis miniatyrer i høyre panel" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "&Terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Lagr aktiv fane som ny favorittfane" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Lagr markering" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "&Lagr markering i fil..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Lagr faner som fil" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Søk..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle fanene låste. Mappe åpnet i ny fane" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Gjør alle fanene ulåste" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Gjør alle fanene låste" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle fanene låste. Tillat endring av mappe" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "&Endr attributt..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "&Lås fane med mapper. Åpnet i ny fane" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Lås fane" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "&Lås fane, men tillat mappeskift" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Åpn" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Bruk systemassosiasjoner til å åpne (eksterne program)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Vis knappemeny" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Vis kommandolinjehistorikk" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Meny" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "&Vis skjulte/system-filer" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "&Sortering etter attributt" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "&Sortering etter dato" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "&Sortering etter type" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "&Sortering etter navn" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "&Sortering etter størrelse" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Åpn drevliste" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Vis/ikke vis filnavn som står i ignorér-lista" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "&Opprett symbolsk link..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "&Synkronisér mapper..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Mål &= kilde" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Kontrollér arkiv" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatyrer" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vis miniatyrer" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Skift mellem filvindu og terminalvindu i fullskjerm" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Flytt mappe under markøren til venstre vindu" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Flytt mappe under markøren til høyre vindu" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Trevisningspanel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Sortér etter parametre" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "&Avmarkér alle av samme type" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Avmarkér alle filer med samme navn" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Avmarkér alle filer med samme navn og type" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Avmarkér alle i samme sti" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Vis" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Vis historikken for brukte stier i aktiv visning" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gå til neste oppføring i historikk" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gå til forrige oppføring i historikk" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Vis loggfil" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Vis gjeldende søk" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Double Commanders nettside" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Sikker sletting" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Arbeid med favorittmapper og parametre" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ut" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Ny mappe" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favorittmapper" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Vis mappa fra høyre panel i dette panelet" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Gå til home-mappa" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Gå til rot" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Gå til overmappe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favorittmapper" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Vis mappa fra venstre panel i høyre panel" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Sti" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Avbryt" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiér..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Opprett link..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Tøm" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skjul" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Markér alt" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Flytt..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Opprett symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Faneinnstillinger" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Avslutt" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Gjenopprett" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Kommandoer" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Oppsett" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favo&ritter" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Filer" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hjelp" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markér" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Nettverk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Vis" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Faneinnstillinger" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Faner" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiér" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Klipp ut" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Slett" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Redigér" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Sett inn" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Velg din interne kommando" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Tradisjonell sortering" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Tradisjonell sortering" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Velg alle kategorier som standard" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Valg:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorier:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Kommando:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Hint:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Hurtigtast:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategori" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hjelp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Hint" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Hurtigtast" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definér..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Skill store/små" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorér aksenter og ligaturer" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "&Attributt:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Inndata-maske:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Eller velg fast definisjon:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Opprett ny mappe" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Nytt mappenavn:" #: tfrmmodview.btnpath1.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption #, fuzzy msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Ny størrelse" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Høyde:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-komprimeringskvalitet" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Bredde:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Høyde" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Bredde" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption #, fuzzy msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actanynamemask.caption #, fuzzy msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actclearextmask.caption #, fuzzy msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclearnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclose.caption #, fuzzy msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Lukk" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "" #: tfrmmultirename.actctrextmask.caption #, fuzzy msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Definer teller [C]" #: tfrmmultirename.actctrnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Definer teller [C]" #: tfrmmultirename.actdateextmask.caption #, fuzzy msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdatenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdeletepreset.caption #, fuzzy msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Slett" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption #, fuzzy msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actextnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Ending" #: tfrmmultirename.actinvokeeditor.caption msgid "Edit&or" msgstr "" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption #, fuzzy msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actnamenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actplgnextmask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmmultirename.actplgnnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmmultirename.actrename.caption #, fuzzy msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Omdøp" #: tfrmmultirename.actrenamepreset.caption #, fuzzy msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Omdøp" #: tfrmmultirename.actresetall.caption msgid "Reset &All" msgstr "" #: tfrmmultirename.actsavepreset.caption #, fuzzy msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Lagr" #: tfrmmultirename.actsavepresetas.caption #, fuzzy msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Lagr &som..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption #, fuzzy #| msgid "MultiRename" msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Multi-omdøping" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Skill store/små" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "&Aktivér logging" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulære uttrykk" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Bruk substitutt" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Definer teller [C]" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Søk && erstatt" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Omdøpingsmaske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Forinnstillinger" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Filtype" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Finn..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervall" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Filnavn" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Erstatt med..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Start ved" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Bredde" #: tfrmmultirename.miactions.caption #, fuzzy msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Handlinger" #: tfrmmultirename.mieditor.caption #, fuzzy msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Editor" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Gammelt navn" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nytt navn" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Plassering" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Klikk OK for å laste endret navn, etter at du har stengt editor!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Åpn med" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Brukerdefinert kommando" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Lagr assosiasjon" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Bruk alltid det valgte programmet til å åpne denne type fil" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Filtype som skal åpnes: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Flere filnavn" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Flere URI'er" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkelt filnavn" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkelt URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Utfør" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Valg" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Velg ei av undersidene. Denne sida inneholder ingen innstillinger." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "&Kopiér" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "&Andre..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Omdøp" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Kjennemerke som cm_OpenArchive kan bruke for å gjenkjenne arkiv, uten å bruke fil-ending:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Innstillinger:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formatanalyse-modus:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "&Aktivert" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "&Feilrettings-modus" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "&Vis terminalvinduets ut-data" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Bruk arkivnavnet uten ending som liste" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "&Unix-filattributter" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "&Unix sti-skilletegn \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "&Windows-filattributt" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "&Windows sti-skilletegn \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "&Legg til:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "&Pakkeprogram:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Slett:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "&Omtale:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Filending:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "&Pakk ut:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "&Pakk ut uten sti:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "&ID Posisjon:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "&ID søke-intervall:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&List opp:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "&Pakkeprogram:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Opplistings-avslutning (valgfritt):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "&Opplistings-format:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "&Opplistings-start (valgfritt):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "&Passord-spørsmål:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "&Lag selvutpakkende arkiv:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "&Test:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Auto-oppsett" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Slå av alt" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Forkast endringene" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Slå på alt" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Sortér pakkeprogram" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Ekstra" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Generelt" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "&Når størrelse, dato/tid eller attributt blir endret" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&For følgende stier og deres undermapper:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "&Når filer blir opprettet, slettet eller omdøpte" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "&Når Double Commander er i bakgrunnen" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Slå av automatisk oppdatering" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Oppdater fillista" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "&Vis alltid ikon i systempanel" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Skjul automatisk drev som ikke lenger er montert" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "&Flytt ikon til systempanel når minimert" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Tillat bare en kopi av Double Commander om gangen" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Her kan du taste inn et eller flere drev eller \"mount-points\", adskilte med \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Utesteng følgende drev" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Kolonnestørrelse" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Vis filendinger" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&justert (med tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&rett etter filnavn" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Fast antall kolonner" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Fast kolonnebredde" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "&Flytende fargeoverganger" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "&Binær modus" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Bakgrunn &2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Farge for ledig plass:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Farge for brukt plass:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Endret:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Endret:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Vellykket:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "&Kutt tekst til kolonnebredde" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Utvid cellebredde dersom tekst ikke får plass i kolonne" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Horisontale linjer" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Vertikale linjer" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "&Auto-fyll kolonner" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Vis rutenett" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Innstill kolonnebredde automatisk" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "&Innstill kolonnebredde automatisk:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Kommandolinjehistorikk" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "&Mappehistorikk" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "&Søkefilter-historikk" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Fane" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "&Oppsett" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "&Søk/erstatt-historikk" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Vinduposisjon" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Plassering av oppsettsfiler" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Lagr ved avslutning" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sorteringsrekkefølge i Oppsett" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Trevisning i Oppsett" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Oppgi i kommandolinje" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Framhevere:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Ikontema:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Minne for miniatyrer:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "&Programmappe (transportabel versjon)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "&Brukermappe" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Utfør endringer på alle kolonner" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Slett" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Gå til standardoppsett" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Ny" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Neste" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Forrige" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Omdøp" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Tilbakestill til standard" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Lagr som" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Lagr" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillat fargeoverlapping" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Endr alle kolonner når det blir klikket for å endre" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generelt" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Markeringsramme" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Vis markering som ramme" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Bruk invertert fargevalg for inaktiv" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Bruk invertert valg" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Bruk brukervalgte skrifttyper og farger i denne visningen" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "&Bakgrunn:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Bakgrunn &2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "&Kolonnevisningsoppsett:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuelt kolonnenavn]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "&Markørfarge:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Skrifttype:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Størrelse:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "&Skriftfarge:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktiv markørfarge:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Valgt inaktiv farge:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "&Valgt farge:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Forhåndsvising nedenfor. Du kan flytte markøren og markere filer for straks å få et inntrykk av de ulike innstillingene." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Innstillinger for kolonne:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Legg til kolonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posisjonen til rammepanel etter sammenlikning:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "&Legg til mappa som er i aktiv ramme" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "&Legg til mappene som er i aktive og inaktive rammer" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "&Legg til mappa som jeg går til" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Legg til en kopi av valgt element" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "&Legg til valgte eller aktive mapper i aktiv ramme" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Legg til delelinje" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Legg til undermeny" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Legg til mappe jeg taster inn" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Lukk alle" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Lukk denne" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Klipp ut valgte element" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Slett alle!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Slett valgte element" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Slett undermeny og alle element i den" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Slett undermeny, men ikke elementene i den" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Utvid element" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Fokusér tre-vindu" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Gå til første element" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Gå til siste element" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Gå til neste element" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Gå til forrige element" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "&Sett inn mappa til aktiv ramme" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "&Sett inn mappene til aktive og inaktive rammer" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "&Sett inn mappa jeg vil gå til" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Sett inn en kopi av valgt element" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "&Sett inn valgte eller aktive mapper som tilhører aktiv ramme" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Sett inn delelinje" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Sett inn undermeny" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Sett inn mappe som jeg taster inn" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Flytt til neste" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Flytt til forrige" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Åpn alle greiner" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Lim inn utklipt" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "&Søk og erstatt i sti" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "&Søk og erstatt i både sti og mål" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "&Søk og erstatt i målsti" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Tilpass sti" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Tilpass målsti" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Legg til..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Slett..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Eksportér..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Importér..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Sett inn..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Ymse..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Noen funksjoner til å velge egnet mål" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Sortering..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Legg også til mål når mappe blir lagt til" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "&Utvid alltid treet" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "&Vis bare gyldige miljøvariabler" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "&Vis i sprettopp [også sti]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Navn, a-å" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Navn, a-å" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Favorittmappe (bruk dra && slipp til å bytte om på rekkefølgen)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andre innstillinger" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Navn:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Plassering:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "&Mål:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...bare det aktuelle nivå av valgte element" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "&Les alle favorittmappers sti for å validere dem som reelt fins" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "&Les alle favorittmappers sti && mål for å validere dem som reelt fins" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "&til favorittmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "&til \"wincmd.ini\" i TC (bevar eksisterende)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "&til \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "&Gå til konfigurér TC-relatert informasjon" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "&Gå til konfigurér TC-relatert informasjon" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Favorittmappe-testmeny" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "&fra favorittmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "&fra \"wincmd.ini\" i TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navigér..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Gjenopprett favorittmappe fra en backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Lagr backup av eksisterende favorittmappe" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "&Søk og erstatt..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...&alt, fra A til Å!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...&bare ei gruppe av objekt" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&innhold av undermeny(er) valgt, ingen undernivå" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...&innhold av undermeny(er) valgt og alle undernivå" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "&Meny av testresultat" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "&Tilpass sti" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "&Tilpass målsti" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Tillegging fra hovedpanel" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnavn med relativ sti:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Fra alle understøttede format. Spør hver gang hva for et som skal brukes" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Når Unicode-tekst skal lagres, lagr i UTF8-format (ellers blir det UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Når tekst blir droppet, generér filnavn automatisk (ellers blir brukeren spurt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Stadfesting etter dra && slipp" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Når dra && slipp blir brukt:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plassér det mest sannsynlige formatet i toppen av lista (bruk dra && slipp):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(dersom det mest sannsynlige ikke er til stede, blir det nestmestsannsynlige tatt osv.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(virker ikke med alle kildeprogram. Prøv å løse problemet ved å fjerne markering)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "&Vis filsystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "&Vis ledig plass" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "&Vis drevnavn" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drev-valgknapp" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Auto-innrykk" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Tillat innrykk når ny linje er dannet med <Enter>, med samme venstremarg som foregående linje" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Tillat skrivemerket bak linjeslutt" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Tillat at skrivemerket går i blankfeltet etter linjeslutt" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Vis spesialtegn" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Vis spesialtegn for ordskille og tabulator" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Smarte tabulatorer" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "<Tab>-tasten vil flytte skrivemerket til neste tegn på forrige linje" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Blokk-innrykk med tab-tasten" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Dersom aktivert, vil <Tab> og <Shift+Tab> fungere som blokk-innrykk, tilbakerykk dersom tekst er valgt" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Bruk blanke i stedet for tab-tegn" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Gjør tab-tegn om til et spesifisert antall blanke (under innskriving)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Slett etterhengende blanke" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatisk slett etterhengende blanke. Gjelder bare redigerte linjer" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Legg merke til at \"Smart tab\"-tilvalget har forrang foran pågående tabulering" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Innstillinger (Intern editor, F4)" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tab-bredde:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Legg merke til at \"Smart tab\" tilvalget har forrang foran pågående tabulering" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Bakgrunn:" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Bakgrunn:" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Nullstill" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Lagr" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementets utseende" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Framgrunn" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Framgrunn" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekstmarkering" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "&Bruk (og redigér) global markéring/farge" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "&Bruk lokal markéring/farge" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Feit" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Kursiv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Gjennomstreket" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Understreket" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Invertert" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Av" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&På" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Legg til..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Slett..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Import/eksport" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Sett inn..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Omdøp" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Ingen" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Utvid alltid tre" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nei" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Venstre" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Høyre" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Favorittfaner (redigér med dra && slipp)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andre innstillinger" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Gjenopprett slik:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Eksisterende faner som skal beholdes:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Lagr mappehistorikken:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Fane lagret til venstre skal gjenopprettes til:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Fane lagret til høyre skal gjenopprettes til:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "en delelinje" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Legg inn skillestrek" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "en undermeny" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Legg til en undermeny" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Lukk alle" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...bare det aktuelle nivå av valgte element" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Klipp ut" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "slett alle!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "undermeny og alle dens element" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "bare undermeny, men behold elementene" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "valgte element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Slett valgte element" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Eksportér valgte til klassisk(e) .tab fil(er)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Favorittfanes testmeny" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importér klassisk(e) .tab fil(er), med standardinnstillinger" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importér klassisk(e) .tab fil(er) til valgt posisjon" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importér klassisk(e) .tab fil(er) til valgt posisjon" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importér klassisk(e) .tab fil(er) til valgt posisjon i en undermeny" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Sett inn delelinje" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Sett inn undermeny" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Åpn alle greiner" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Lim inn" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Omdøp" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...alt, fra A til Å!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...bare ei gruppe av element" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortér bare ei gruppe av element" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...innhold av undermeny(er) valgt, ingen undernivå" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...innhold av undermeny(er) valgt og alle undernivå" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Meny av testresultat" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Legg til" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Legg til" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "&Klon" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Velg din interne kommando" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Ned" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "&Redigér" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Sett inn" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "&Sett inn" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Omdøp" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Miljøvariabel-hjelp" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Opp" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Kommandoen skal starte i denne stien. Sett den aldri i hermetegn." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Navn på handlingen. Navnet brukes ikke av systemet; det er bare for identifisering" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter til kommandoen. Lange filnavn med blanke bør settes i hermetegn (manuelt)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Kommando for å starte handling. Sett den aldri i hermetegn." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Om handling" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Handlinger" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Filendinger" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kan arrangeres med dra & slipp" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Filkategorier" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Handlinger kan arrangeres med dra & slipp" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Filendinger kan arrangeres med dra & slipp" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Filtyper kan arrangeres med dra & slipp" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "&Navn på handling:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parametre:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Brukerdefinert med..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Brukerdefinert" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Redigér" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Åpn i Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Redigér med..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ta utdata fra kommando-prompt" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Åpn i intern editor" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Åpn i intern framviser" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Åpn" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Åpn med..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Kjør i Terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Vis" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Åpn i Framviser" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Vis med..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klikk på meg for å endre ikon!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Utfør i et skall" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Utvidet kontekstmeny" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Oppsett av filassosiering" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Foreslå å legge valget til som filassosiering, dersom ikke allerede inkludert" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Når filassosiering blir åpnet, foreslå å legge aktuell valgt fil til dersom den ikke alt er inkludert i en konfigurert filtype" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Utfør i terminal og lukk" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Utfør i terminal, som forblir åpen" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikon" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Flere innstillinger:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnavn med relativ sti:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Be om stadfesting ved:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "&Kopiering" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Sletting" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&Slett-F8 sletter til Papirkorg (Skift+F8/Skift+Delete sletter direkte)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "&Sletting til Papirkorg" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Fjern skrivesperre" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Flytting" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "&Kopiér kommentarer sammen med filer/mapper" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "&Velg filnavn uten ending ved omdøping" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "&Vis valgboks for faner i kopiér/flytt-dialog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "&Ignorér feil ved operasjoner, men skriv dem i logg-vindu" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Verifiséring av kontrollsum-operasjon" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Utfør handlinger" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Brukergrensesnitt" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Bufferstørrelse for filhandlinger (i KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "&Bufferstørrelse for hashutregning (i KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "&Vis framdrift for handlingene i" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Prinsipp for auto-omdøping av dubletter:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "&Antall overskrivinger ved sikker sletting:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Tilbakestill til DC-standard" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillat fargeoverlapping" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "&Markér med ramme" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Bruk invertert fargevalg for inaktiv" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "&Bruk invertert valg" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Rammefarge" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Bakgrunn:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Bakgrunn &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Markørfarge:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "&Markørskrift:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farge på inaktiv markør:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farge på inaktiv markéring:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "&Lysstyrke i det inaktive vinduet" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Markeringsfarge:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "&Skriftfarge:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Forhåndsvising. Du kan flytte markøren og markere filer for straks å få inntrykk av innstillingene." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "&Skriftfarge:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Slett filter før nytt filsøk" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Søk etter del av filnavn" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Vis menylinje i \"Søk...\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Tekstsøk i filer" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Filsøk" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Gjeldende filter med \"Nytt søk\" -knapp:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standard søkemal:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "&Bruk minnemapping for tekstsøk i filer (kravstor)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Bruk stream for tekstsøk i filer (treg)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatering" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Egne forkortelser i bruk:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Sortering" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&STORE og små bokstaver:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Ukorrekt format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Dato- og tidsformat:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "&Vis filstørrelse i:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Megabyte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Sett inn nye filer:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Operasjonsstørrelse format:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "&Sortér mapper:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Sorteringsmetode:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Flytt endrede filer:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Legg til" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hjelp" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "&Tillat flytt til overliggende mappe når det blir dobbelklikket på en tom del av filvisning" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Ikke les inn filliste før fane er aktivert" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "&Vis hakeparenteser [ ] omkring mappenavn" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "&Framhev nye og endrede filer" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "&Tillat direkte omdøping ved dobbeltklikk på navn" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "&Les filliste inn i separat tråd" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "&Ikon inn etter filliste" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "&Vis skjulte/system-filer" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Når valgt med <ordskiller>, flytt ned til neste fil (som med <insert>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Windows-type filter ved markering av filer (\"*.*\" markerer også filer uten filending mv )" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Bruk et fritt attributt-filter i maske-dialogen hver gang" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Markerer/avmarkerer element" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Standard attributt-maske-verdi som skal brukes:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Slett" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Mal..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Farging av filkategorier (arrangér med dra && slipp)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Kategori-attributt:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Katergori-farge:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Katergori-filter:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Kategori-navn:" #: tfrmoptionsfonts.hint #, fuzzy msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Fonter" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "&Legg til hurtigtast" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopiér" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Slett hurtigtast" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Redigér hurtigtast" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Neste kategori" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Gjør filmenyen sprettopp" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Forrige kategori" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Omdøp" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Gjenopprett DC-standard" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Lagr nå" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Sortér etter kommandonavn" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Sortér etter hurtigtast (gruppert)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Sortér etter hurtigtast (én pr rad)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "&Kategorier:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "&Kommandoer:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Fil for hurtigtaster:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "&Sorteringsrekkefølge:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorier" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Kommando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Sorteringsrekkefølge" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Kommando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Hurtigtaster" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Omtale" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Hurtigtast" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&For følgende stier og deres undermapper:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "&Vis ikon ut for punkt i hovedmenyen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Vis ikon på knapper" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Vis overlegg på ikoner, (f.eks. piler ved linker)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Dimm skjulte/system-filer (treg)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Slå av spesielle ikon" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Ikonstørrelse " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Ikontema" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Vis ikon" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Vis ikon til venstre for filnavnet " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Drevpanel:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Filpanel:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Alle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "&Alle assosierte filer inkl. EXE/LNK (treg)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Ingen ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Bare standardikon" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Legg til valgte navn" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "&Legg til valgte navn med hele stien" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorér (ikke vis) følgende filer og mapper:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Lagr i:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Venstre- og høyrepil skifter mellom mapper" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tasting" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "&Alt+bokstaver:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+bokstaver:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Bokstaver:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Flate ikon" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "&Flate funksjonstaster" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "&Vis stolpe for brukt/ledig plass på drev" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "&Vis logg-vindu" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Vis &handlingsvindu i bakgrunn" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Vis framdrift i menylin&je" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "&Vis kommandolinje" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "&Vis aktuell sti" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "&Vis drev-knapper" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "&Vis tall for ledig plass" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "&Vis drev-valgknapp" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "&Vis knapprad for funksjonstaster" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "&Vis hovedmeny" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "&Vis verktøylinje" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "&Vis tall for ledig plass (kompakt visning)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "&Vis statuslinje" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Vis filtabellhode" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "&Vis faner" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "&Vis terminalvindu" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "&Vis to knapprader for drev (fast bredde, over filvindu)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Skjermoppsett" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Vis innholdet i loggfila" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Ta med dato i loggfil-navn" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Pakking/Utpakking" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Utføring av ekstern kommandolinje" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Kopiering/Flytting/Oppretting av link && symlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Sletting" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Oppretting/sletting av mapper" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "&Logg feil" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Opprett loggfil i:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Logg informasjonsmeldinger" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Starting/nedstenging" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "&Logg velykkede operasjoner" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Filsystem-plugins" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Loggfil for filoperasjoner" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Logg følgende operasjoner" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Operasjonsstatus" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Fjern miniatyrbilder for slettede filer" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Vis innholdet i oppsettsfil" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Ny, med koding:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Gå alltid til toppnivået ved skifte av drev" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "&Vis advarsler (med bare \"OK\"-knapp)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Lagr miniatyrbilder i cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatyrer" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Filkommentar (descript.ion" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "For TC-eksport/-import:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Standardkoding:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurasjonsfil:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC exe-fil:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Sti til verktøylinjens ut-data:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixler" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bredde x høyde:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Valg med mus" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Skrivemerket følger ikke lenger musepila" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "&Ved klikk på ikon" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Åpn med" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rulling med musehjul" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Valg" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Tilstand:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dobbelklikk" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Antall linje(r) om gangen" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "&Linje for linje, markøren følger med" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Ei side om gangen" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Enkelklikk (åpner filer og mapper)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Enkelklikk (åpner mapper; dobbelklikk for filer)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Vis innholdet i loggfila" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Sett opp" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Slå på" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Fjern" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Tilpass" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Omtale" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "navn:" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "&Søke-plugins bruker alternative søkealgoritmer eller eksterne verktøy (som \"locate\", o.l.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Sett disse settingene på alle gjeldende oppsatte plugins" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Gå direkte til tilpassingsvinduet når ny plugin blir lagt til" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Oppsett:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnavn med relativ sti:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Plugin filnavn-stil når ny plugin blir lagt til:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "&Pakke-plugins kan åpne arkivtyper som ikke er støttet av Double Commander internt" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "navn:" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "&Innholds-plugins kan vise utvidede fildetaljer f.eks. mp3-tags eller fotoopplysninger i fillister. Kan brukes i søking og multi-omdøping" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "&Filsystem-plugins gir tilgang til disker som er utilgjengelige for operativsystemet eller til eksterne enheter som Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "&Liste-plugins kan vise dataformat som f.eks. bilder, regneark, databaser ol. i Vis (F3, Ctrl+Q)." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Assosiér med" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Start (navn må starte med første inntastede bokstav)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Ende (siste bokstav før et inntastet punktum må være lik)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Valg" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Eksakt navnelikhet" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "STORE og små bokstaver" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Søk etter disse elementene" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Behold omdøpt navn når fana blir låst opp" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "&Aktivér fil&panel ved klikk på fane" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Vis fane, også når det bare er ei enkel fane" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Lukk like faner, når programmet avslutter" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Stadfest lukking av alle faner" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Stadfest lukking av låst fane" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Avgrens fanetitler til" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "&Markér låste faner med stjerne *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Tillat vising av faner på flere linjer" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "&Ctrl+Opp åpner ny fane i framgrunnen" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "&Åpn ny fane ved sida av aktiv fane" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Gjenbruk eksisterende fane om mulig" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "&Vis lukk-knapp på fane" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vis alltid drevbokstav i fanetittel" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Faner" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "tegn" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Handling, når det blir dobbeltklikket på ei fane:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "&Faneposisjon" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Ingen" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nei" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Venstre" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Høyre" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Gå til innstilling av favorittfane, etter lagring (igjen)" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Gå til innstilling av favorittfane, etter lagring av ny fane" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Aktivér ekstra innstillinger for favorittfane (velg side for gjenoppretting etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Ekstra standardinnstillinger når ny favorittfane blir lagret:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Ekstra for fane" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Når fane blir gjenopprettet, bevar eksisterende fane i:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Fane lagret til venstre skal gjenopprettes til:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Faner lagret til høyre skal gjenopprettes til:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Fortsett med å lagre mappehistorikken med favorittfane:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardplassering i meny når ny favorittfane blir lagret:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} skal normalt vise her for å reflektere kommandoen som skal utføres i terminal" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} skal normalt vise her for å reflektere kommandoen som skal utføres i terminal" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Innstilling for utføring av kommando og deretter ingen handling:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Innstilling for utføring av kommando i terminal, som deretter blir lukket:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Innstilling for utføring av kommando i terminal, som forblir åpen:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.btnclonebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "&Klon knapp" #: tfrmoptionstoolbarbase.btndeletebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Slett" #: tfrmoptionstoolbarbase.btnedithotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "&Rediger hurtigtast" #: tfrmoptionstoolbarbase.btninsertbutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Sett inn ny knapp" #: tfrmoptionstoolbarbase.btnopencmddlg.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopencmddlg.caption" msgid "Select" msgstr "Markér" #: tfrmoptionstoolbarbase.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Andre..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "&Fjern hurtigtast" #: tfrmoptionstoolbarbase.btnstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.caption" msgid "Suggest" msgstr "Foreslå" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.hint" msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Få DC til å foreslå hint basert på knapptype, kommando eller parametre" #: tfrmoptionstoolbarbase.cbflatbuttons.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Flate ikon" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption" msgid "Report errors with commands" msgstr "Rapportér feil i kommandolinje" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.edtinternalparameters.hint" msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Inntast kommandoparametre, bare én pr. linje. Trykk F1 for mer hjelp til parametre." #: tfrmoptionstoolbarbase.gbgroupbox.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Utseende" #: tfrmoptionstoolbarbase.lblbarsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "&Størrelse på verktøylinje:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "&Kommando:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hjelp" #: tfrmoptionstoolbarbase.lblhotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhotkey.caption" msgid "Hot key:" msgstr "Hurtigtast:" #: tfrmoptionstoolbarbase.lbliconfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "&Ikon:" #: tfrmoptionstoolbarbase.lbliconsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "&Størrelse på ikon:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Kommando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Hint:" #: tfrmoptionstoolbarbase.miaddallcmds.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddallcmds.caption" msgid "Add toolbar with ALL DC commands" msgstr "Legg til verktøylinje med ALLE DC-kommandoer" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption" msgid "for an external command" msgstr "for en ekstern kommando" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption" msgid "for an internal command" msgstr "for en intern kommando" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption" msgid "for a separator" msgstr "for en delelinje" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption" msgid "for a sub-tool bar" msgstr "for en under-verktøylinje" #: tfrmoptionstoolbarbase.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbarbase.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstoolbarbase.miexportcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrent.caption" msgid "Current toolbar..." msgstr "Aktuell verktøylinje..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til ei TC .BAR-fil (bevar eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til ei TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til ei \"wincmd.ini\" i TC (bevar eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til ei \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexporttop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttop.caption" msgid "Top toolbar..." msgstr "Øverste verktøylinje..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptobackup.caption" msgid "Save a backup of Toolbar" msgstr "Lagr en backup av verktøylinja" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til ei TC .BAR-fil (bevar eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til ei TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til ei \"wincmd.ini\" i TC (bevar eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til ei \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle valg" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle valg" #: tfrmoptionstoolbarbase.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstoolbarbase.miimportbackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackup.caption" msgid "Restore a backup of Toolbar" msgstr "Gjenopprett verktøylinja fra en backup" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "for å legge til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å legge til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å legge til ei ny verktøylinje til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "for å legge til til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatte øverste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbar.caption" msgid "from a Toolbar File (.toolbar)" msgstr "fra ei verktøylinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for å legge til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å legge til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å legge til ei ny verktøylinje til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for å legge til til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatte øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbar.caption" msgid "from a single TC .BAR file" msgstr "fra ei enkelt TC .BAR-fil" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for å legge til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å legge til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å legge til ei ny verktøylinje til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for å legge til til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatte øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcini.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcini.caption" msgid "from \"wincmd.ini\" of TC..." msgstr "fra \"wincmd.ini\" i TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "for å legge til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for å legge til ei ny verktøylinje til aktuell verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for å legge til ei ny verktøylinje til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "for å legge til til øverste verktøylinje" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "for å erstatte øverste verktøylinje" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle valg" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle valg" #: tfrmoptionstoolbarbase.misearchandreplace.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Søk og erstatt..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle valg" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle valg" #: tfrmoptionstoolbarbase.misrcrplallofall.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplallofall.caption" msgid "in all of all the above..." msgstr "i alle ovenfor nevnte..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplcommands.caption" msgid "in all commands..." msgstr "i alle kommandoer..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrpliconnames.caption" msgid "in all icon names..." msgstr "i alle ikonnavn..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplparameters.caption" msgid "in all parameters..." msgstr "i alle parametre..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplstartpath.caption" msgid "in all start path..." msgstr "i alle startstier..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "rett etter aktuelle valg" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "som siste element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "rett før aktuelle valg" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.rgtoolitemtype.caption" msgid "Button type" msgstr "Knapptype" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikon" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Filnavn med relativ sti:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Behold terminalvindu åpent etter utføring av program" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Utfør i terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Bruk eksternt program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "&Ekstra parametre" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Sti til det eksterne programmet" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Legg til" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Utfør" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "&Kopiér" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Slett" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Mal..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Omdøp" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "&Andre..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Konfigurér hint for valgt filtype:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Felles valg for hint:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "&Vis hint for filer i filvindu" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "&Kategori-hint:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Katergori-filter:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Skjul hint etter:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Hint-vising:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Filtyper:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Forkast endringer" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Sortér hint filtyper" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Med dobbelklikk på filpanelhodet" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Med menyen og intern kommando" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dobbelklikk i treet, markér og gå ut" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Med menyen og intern kommando" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Med dobbelklikk på ei fane (dersom innstilt)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Når hurtigtast blir brukt, vil den gå ut av vinduet og returnere gjeldende valg" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Klikk i treet, markér og gå ut" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Bruk for kommandolinje-historie" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Bruk for Dir-historie" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Bruk for visnings-historie (besøkte stier for aktivt vindu)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Oppførsel for valg:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Oppsett av trevisning:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Hvor skal trevisning brukes:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*NB: Ved valg som STORE/små-skille, aksentignorering eller ikke, blir disse lagret og gjenopprettet individuelt for hver sammenheng fra en bruksomgang til en annen." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Med mappefavorittliste:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Med favorittfaner:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Med historie:" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Bruk og vis hurtigtast for valg av element" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Valg av oppsett og farger:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Bakgrunnsfarge:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Markørfarge:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Farge på funnet tekst:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Funnet tekst under markør:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Farge på normal tekst:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normal tekst under markør:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Forhåndsvis trevisning :" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Farge på sekundærtekst:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Sekundærtekst under markør:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Farge på snarveg:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Snarveg under markør:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Farge på ikke-valgbar tekst:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Ikke-valgbar tekst under markør:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Skift farge til venstre og du vil få forhåndsvising av trevisning her." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Antall spalter i bokvisning" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Sett opp" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Pakk filer" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Lag separate arkiv, ett for hver fil/mappe" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "&Lag selvutpakkende arkiv" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Kryptér" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "&Flytt til arkiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Fordel arkiv over flere disker" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "&Pakk som TAR først" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Pakk også sti (bare rekursivt)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Pakk fil(er) i arkivet:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakkeprogram" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Lukk" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Pakk ut alle og utfør" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Pakk ut og utfør" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Egenskaper for pakket fil" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributt:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimeringsgrad:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dato:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Opprinnelig størrelse:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fil:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Pakket størrelse:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakkeprogram:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tid:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Lukk filterpanel" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Tast inn teksten, som det skal søkes eller filtreres etter" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Forskjell på STORE og små bokstaver" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mapper" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Filer" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Sammenlikn starten" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Sammenlikn slutten" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Skift mellem søking og filtrering" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Flere regler" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "&Færre regler" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "&Bruk innholds-plugin. Kombinér med:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Verdi" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (alle operatorer er sanne el. falske)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (minst én operator er sann el. falsk)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Utfør" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Mal..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Mal..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselectpathrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmselecttextrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Velg bokstavene som skal settes inn:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Endre attributt" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arkiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Opprettet:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skjult" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Åpnet:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Endret:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Skrivesperret" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Ta med filer i &undermapper" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Endre dato/tid" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Endre attributt" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributter" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(grått felt betyr uendret)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Annet" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eier" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Utføre" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(grått felt betyr uendret)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lese" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skrive" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsortanything.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Aktuelle stier" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Del opp fil" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Krev ei CRC32 verifikasjonsfil" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1,44 MB - 3,5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Størrelse og antall deler" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Del opp fil til mappe:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Antall deler" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Byte" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabyte" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobyte" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabyte" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Bygg" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativsystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plattform" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisjon" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versjon" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Opprett symbolsk link" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Bruk relativ sti om mulig" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Målet, som linken skal peke på" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Navn på linken" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Fjern markerte" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Markér for kopiering (i forvalgt retning)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Markér for kopiering -> ( venstre til høyre)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Snu kopieringsretning" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Markér for kopiering <- ( høyre til venstre )" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Markér for sletting -> (høyre)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Lukk" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "&Sammenlikn" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Mal..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "S&ynkronisér" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synkronisér mapper" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&Asymmetrisk" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "etter innhold" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorér dato" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "bare valgte" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Undermapper" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Vis:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(i hovedvindu)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "&Sammenlikn" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vis venstre" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vis høyre" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "dubletter" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "unike" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klikk \"Sammenlikn\" for å starte" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "S&ynkronisér" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Stadfest overskriving" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Trevisning" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Velg din favorittmappe:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Søk med skille mellom STORE og små" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Full sammenfolding" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Full utfolding" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Søk ignorerer aksenter og ligaturer" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Søk skiller ikke mellom STORE og små" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Søk tar hensyn til aksenter og ligaturer" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Ikke vis greininnhold \"just\" fordi søkt tekst blir funnet i greinnavnet" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Dersom søkt tekst blir funnet i et greinnavn, vis hele greina selv om element ikke stemmer" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Lukk trevisning" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Innstilling av tre-visning" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Innstilling av farger på tre-visning" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Legg til nytt" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Avbryt" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Tilpass/endr" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Noen funksjoner til å velge egnet sti" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Fjern" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Tilpass plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Fastslå arkivtype ut fra innhold" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "&Kan slette filer" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "&Støtter kryptering" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "&Vis som normale filer (skjul pakke-ikon)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "&Støtter komprimering i minnet" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "&Kan endre eksisterende arkiv" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Arkiv kan inneholde flere filer" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "&Kan opprette nye arkiv" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Støtter valg-dialogboksen" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "&Tillat tekstsøking i arkiv" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Omtale:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "&Oppdag streng:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Ending:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flagg:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Navn:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Om framviseren..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Vis \"Om\" dialogen" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Endre koding" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopiér fil" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiér fil" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopiér til Utklipp" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopiér til Utklipp formatert" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Slett fil" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Slett fil" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Avslutt" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Finn" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Finn neste" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Finn forrige" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Hele skjermen" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Midtstill" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Neste" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Les inn neste fil" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Forrige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Les inn forrige fil" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Speilvend horisontalt" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Speilvend" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Speilvend vertikalt" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Flytt fil" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Flytt fil" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Forhåndsvis" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Gjeninnles" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Gjeninnles aktuell fil" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Rotér 180 grader" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Rotér -90 grader" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Rotér +90 grader" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Lagr" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Lagr &som..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Lagr fila som..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Skjermdump" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Forsink 3 sek" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Forsink 5 sek" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Velg alt" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "&Vis binært" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "&Vis som bok" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "&Vis desimalt" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "&Vis heksadesimalt" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "&Vis som tekst" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "&Vis som brettet tekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafikk" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Strekk" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strekk bilde" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Strekk bare store" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Angr" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Angr" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom inn" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Zoom inn" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom ut" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Zoom ut" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beskjær" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Hele skjermen" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Framhev" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Mal" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Røde øyne" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Tilpass størrelse" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Lysbilder" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Framviser" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Redigér" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Koder" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Bilde" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Stift" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Rotér" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Skjermdump" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visning" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Pluginer" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Stopp" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Filhandlinger" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "&Alltid øverst" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Bruk \"dra && slipp\" for å flytte handlinger mellom køene" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Avbryt" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eget vindu" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Sett først i køen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Sett sist i køen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Kø" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fjern fra køen" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eget vindu" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Sett alt på pause" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Følg linker" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "&Når mappa finnes fra før" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finnes" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finnes" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Avbryt" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametre:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Sett opp" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Kryptér" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Når fila finnes" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Kopiér dato/tid" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Til &bakgrunn" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Når fila finnes" #: uaccentsutils.rsstraccents #, fuzzy msgctxt "uaccentsutils.rsstraccents" msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped #, fuzzy msgctxt "uaccentsutils.rsstraccentsstripped" msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Dato tatt" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Høyde" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Bredde" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabrikant" #: uexifreader.rsmodel msgid "Camera model" msgstr "Kameramodell" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientering" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Fila ikke funnet. Den kunne hjulpet til med å validere endelig filkombinasjon for:\n" "%s\n" "\n" "Kan du gjøre fila tilgjengelig og klikke \"OK\",\n" "eller klikk \"AVBRYT\" for å gå videre uten fila?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annullér hurtigfilter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annullér aktuell handling" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Tast inn filnavn med filending for den 'droppede' teksten" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Tekstformat som skal importeres" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Skadd:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Generelt:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Mangler:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Lesefeil:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Vellykket:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Tast inn kontrollsum og velg algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifisér kontrollsum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Vil du slette filter før dette nye søket?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Utklipp inneholder ingen gyldige data for verktøylinja." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;Aktivt vindu;Venstre vindu;Høyre vindu;Filhandlinger;Konfigurasjon;Nettverk;Ymse;Parallellport;Print;Merke;Sikkerhet;Utklipp;FTP;Navigasjon;Hjelp;Window;Kommandolinje;Verktøy;Vis;Bruker;Fane;Sortering;Logg" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Tradisjonell sortering;A-Å sortering" #: ulng.rscolattr msgid "Attr" msgstr "Attributt" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dato" #: ulng.rscolext msgid "Ext" msgstr "Ending" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Navn" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Størrelse" #: ulng.rsconfcolalign msgid "Align" msgstr "Justering" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Tittel" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Slett" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feltinnhold" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Flytt" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Bredde" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Tilpass kolonne" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Innstill filassosiasjon" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Stadfester kommandolinje og parametre" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopiér (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importert DC-verktøylinje" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importert DC-verktøylinje" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppetTekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppetHTML" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppetRTF" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppetTXT" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppetUTF16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppetUTF8" #: ulng.rsdiffadds msgid " Adds: " msgstr " Legger til: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Sletter: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "De to filene er identiske!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Matcher: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Endrer: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Avbryt" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Alle assosierte filer" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Legg til" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Auto-omdøp kildefiler" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Avbryt" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "&Sammenlikn innhold" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Fortsett" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Kopiér inn i" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "&Kopiér alle inn i" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Avslutt program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "&Ignorér" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "&Ignorér alle" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nei" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ingen" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Andre" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Overskriv" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "&Overskriv alle" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "&Overskriv alle større" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "&Overskriv alle eldre" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "&Overskriv alle mindre" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Omdøp" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Gjenoppta" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Prøv på nytt" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "&Som administrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Hopp over" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "&Hopp over alle" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Lås opp" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiér fil(er)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Flytt fil(er)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "&Pause" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Start" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kø" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Fart %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Fart %s/s, gjenstående tid %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indikator for brukt/ledig plass" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<uten drev-etikett>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<uten medium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commanders interne editor." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gå til linje:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gå til linje" #: ulng.rseditnewfile msgid "new.txt" msgstr "ny.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Filnavn:" #: ulng.rseditnewopen msgid "Open file" msgstr "Åpn fil" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Bakover" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Søk" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Framover" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Erstatt" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "med ekstern editor" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "med intern editor" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Utfør i et skall" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Utfør i terminal og lukk" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Utfør i terminal, som forblir åpen" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" ikke funnet i linje %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Ingen filending definert før kommando \"%s\", som blir ignorert." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Venstre;Høyre;Aktivt;Inaktivt;Begge;Ingen" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nei;Ja" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Eksportert_fra_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Spør;Overskriv;Hopp over" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Spør bruker;Kopiér inn i alle filer;Hopp over alle filer" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Spør bruker;Overskriv alle filer;Overskriv alle eldre filer;Hopp over alle filer" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Spør bruker;Unnlat innstilling;Ignorér feil" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Allslags filer" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Lagr oppsettsfiler" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC-hint-filer" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Favorittmappe-filer" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Utførbare filer" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini-oppsettsfiler" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Tradisjonell(e) .tab-fil(er)" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC-verktøyrad-filer" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC-verktøyrad-filer" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml-oppsettsfiler" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definér mal" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nivå" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "alle (uavgrenset dybde)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "bare aktuell mappe" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Mappa %s finnes ikke!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Funnet: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Lagr søk som mal" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Navn på mal:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Gjennomsøkt: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanner" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Finn filer" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Gjennomsøkingstid: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Start ved" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "" #: ulng.rsfontusageviewerbook #, fuzzy msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "&Skrifttype i Bokviser" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s av %s ledig" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s ledig" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Åpnet dato/tid" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributt" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Kommentar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimert størrelse" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Opprettet dato/tid" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Ending" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Endr dato/tid" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link til" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Endret dato/tid" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Navn" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Navn uten filending" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Eier" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Sti" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Størrelse" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Klarte ikke opprette hard link." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "ingen;Navn, a-z;Navn, z-a;Ext, a-z;Ext, z-a;Størrelse 9-0;Størrelse 0-9;Dato 9-0;Dato 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Advarsel! Dersom ei .hotlist-fil blir gjenopprettet, blir den eksisterende lista overskrevet av den importerte fila.\n" "\n" "Vil du fortsette?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopierings-/flyttingsdialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Sammenlikningsprogram" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Redigér kommentar-dialog" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Finn filer" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hovedvindu" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synkronisér mapper" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Framviser" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Et oppsett med dette navnet fins fra før.\n" "Vil du overskrive det?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Er du sikker på at du vil gjenopprette standard?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Er du sikker på at du vil slette oppsett \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopi av %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Tast inn nytt navn" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Du må bevare minst ei hurtigtastfil." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nytt navn" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" oppsett har blitt endret.\n" "Vil du lagre det nå?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Ingen hurtigtast med \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Etter kommandonavn;Etter hurtigtast(gruppert);Etter hurtigtast(en pr rad" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan ikke finne referanse til standard verktøylinjefil" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Liste med \"Søk...\" vinduer" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Innskrenk valg" #: ulng.rsmarkplus msgid "Select mask" msgstr "Utvid valg" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Oppgi filtype:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "En kolonnevisning med det navnet fins allerede." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "For å endre den aktuelle redigeringen av kolonneoppsettet, skal den aktuelle enten LAGRES, KOPIERES eller SLETTES" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Innstillinger for kolonner" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Tast inn nytt brukervalgt kolonnenavn" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Handlinger" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Oktal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Opprett snarveg..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "&Fjern nettverksdrev..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Redigér" #: ulng.rsmnueject msgid "Eject" msgstr "Skubb ut" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Pakk ut her..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Opprett nett&verksdrev..." #: ulng.rsmnumount msgid "Mount" msgstr "Montér" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Ny" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kan ikke finne mediet" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Åpn" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Åpn med" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Pakk her..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Gjenopprett" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortér etter" #: ulng.rsmnuumount msgid "Unmount" msgstr "Avmontér" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vis" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Alle Double Commanders interne kommandoer" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Omtale: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ekstra parametre til pakkeprograms kommandolinje:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Vil du omslutte med hermetegn?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Feil i CRC32 for fil:\n" "\"%s\"\n" "\n" "Vil du ta vare på den skadde fila?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Du kan ikke kopiere/flytte fila \"%s\" til seg selv!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Kan ikke slette mappa %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kan ikke overskrive mappa \"%s\" med \"%s\", som ikke er mappe" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Endring av aktuell mappe til \"%s\" feilet!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Lukk alle inaktive faner?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Fana (%s) er låst! Lukk likevel?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Stadfesting av parameter" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Er du sikker på at du vil avslutte?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Fila %s er endret. Ønsker du å kopiere den tilbake?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Kunne ikke kopiere tilbake - vil du beholde den endrede fila?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopiér %d valgte filer/mapper til?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopiér \"%s\" til?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Opprett en ny filtype \"%s-filer\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Tast inn plassering og filnavn der DC verktøylinjefila skal lagres" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Brukerdefinert handling" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Slett den delvist kopierte fila ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Er du sikker på, at du vil slette de %d valgte filene/mappene?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Vil du flytte disse %d elementene til Papirkorga?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Er du sikker på, at du vil slette den valgte fila \"%s\" ?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Vil du flytte \"%s\" til Papirkorga?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan ikke flytte \"%s\" til Papirkorg! Slett direkte?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Drevet er ikke tilgjengelig" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Tast inn inn brukervalgt navn på handlingen:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Tast inn inn filending:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Tast inn navn:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Tast inn navnet på den nye filtypen for å danne filendinga \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-feil i arkivdata" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datafeil" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Kan ikke kople til server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Kan ikke kopiere fil %s til %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Det finst allerede mappe med navnet \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datoen %s er ikke støttet" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Feil: Mappa \"%s\" eksisterer allerede! Oppgi et annet navn.!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Avbrutt av bruker" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Klarte ikke lukke fila" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan ikke opprette fil" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Ikke flere filer i arkivet" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan ikke åpne eksisterende fil" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Klarte ikke lese fil" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Klarte ikke skrive til fil" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Kan ikke opprette mappe %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ugyldig link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ingen filer funnet" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ikke nok minne" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funksjonen ikke støttet!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Feil i kontekstmenyens kommando" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Feil ved innlesing av konfigurasjonen" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaksfeil i regulært uttrykk!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Kan ikke omdøpe fil %s til %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan ikke lagret assosiasjonen!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan ikke lagre fil" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Kan ikke innstille attributt for \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Kan ikke innstille dato/tid for \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Kan ikke opprette eier/gruppe for \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Kan ikke innstille tillatelser for \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Bufferen er for liten" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "For mange filer å pakke" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arkivformat ukjent" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Utførbar: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Utgangs-status:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerne alle postene på din favorittfane? (Handlingen kan ikke angres!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Dra andre oppføringer hit" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Tast navn til denne nye favorittfana:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Lagrer navnet på ny favorittfane" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Antall korrekt eksporterte favorittfaner: %d av %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Skal historikken for ny favorittfane lagres som en ekstra standardinnstilling:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Antall korrekt importerte fil(er): %d av %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Klassiske faner importerte" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Velg .tab file(r) til import (kan være flere på en gang!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Endringer på favorittfana er ikke lagret ennå. Vil du lagre dem før du fortsetter?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Fortsett med å lagre mappehistorikken med favorittfane:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Undermeny-navn" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dette vil lese inn favorittfaner: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Lagr aktiv fane og overskriv eksisterende favorittfane" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Fil %s er endret, vil du lagre?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overskriv:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Fil %s finnes, vil du overskrive?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Med fil:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Fila \"\"%s\" ikke funnet." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive filhandlinger" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Uavsluttede filhandlinger. Blir Double Commander lukket, kan data gå tapt." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Målnavnet er lenger (%d) enn %d tegn!\n" "%s\n" "De fleste program vil ikke håndtere ei fil/mappe med så langt navn!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Fila %s er markert som skrivesperret. Vil du slette den?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Er du sikker på at du vil hente fila på nytt og miste endringene?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Fila \"%s\" er for stor for målsystemet!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Mappa %s eksisterer. Vil du kopiere inn i?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Følg symlink \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Velg tekstformatet som skal importeres" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Legg til %d valgte mapper" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Legg til valgte mapper: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Legg til aktuell mappe: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Utfør kommando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Oppsett av favorittmapper" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerne alle postene i din favorittmappe? (Handlingen kan ikke angres!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dette utfører følgende kommando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Dette er navnet på favorittmappa " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dette endrer det aktive vinduet til følgende sti:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Og det inaktive vindu blir endret til følgende sti:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Backup av oppføringene var mislykket..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Eksport av oppføringene var mislykket.." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Eksportér alle!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksportér favorittmappe - Velg de oppføringene som du vil eksportere" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Eksport valgte" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importér alle!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importér favorittmappe - Velg de oppføringene som du vil importere" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importér valgte" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Plassering:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Finn \".hotlist\"-fila som skal importeres" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Favorittmappas navn" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Antall nye poster: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ikke noe valgt for eksport!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Favorittmappas sti" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Legg til valgt mappe igjen: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Legg til aktuell mappe igjen: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Tast inn plassering og filnavn på favorittmappa som skal gjenopprettes" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Kommando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(enden av undermeny)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "&Menynavn:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Navn:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(delestrek)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Undermeny-navn" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Favorittmappas mål" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Bestem om du vil ha aktiv ramme sortert i en bestemt rekkefølge etter endring av mappe" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Bestem om du vil ha inaktiv ramme sortert i en bestemt rekkefølge etter endring av mappe" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Noen funksjoner til å velge egnet sti - relative, absolutte, spesielle windowsmapper ol." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Samlet antall lagrede oppføringer: %d\n" "\n" "Backuppens filnavn: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Samlet antall eksporterte oppføringer: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Vil du slette alle element i undermeny [%s]?\n" "Et NEI-svar vil bare slette menyskilletegn, men vil bevare element inne i undermenyen." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Tast inn plassering og filnavn der favorittmappe skal lagres" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Ugyldig fillengde for fil : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Sett inn neste disk e.l.\n" "\n" "Trengs for å fullføre skriving av denne fila:\n" "\"%s\"\n" "\n" "Antall byte som gjenstår å skrive: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Feil i kommandolinje" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ugyldig filnavn" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ugyldig format på oppsettsfila" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Ugyldig heksadesimalt tall: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ugyldig sti" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Stien %s inneholder ikke-tillatte tegn." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dette er ikke en gyldig plugin!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Denne plugin er laget til Double Commander for %s.%s Den virker ikke sammen med Double Commander for %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ugyldig sitering" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ugyldig valg." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Les inn filliste..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Finn TC-oppsettsfiler (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Finn TC-exe fila (totalcmd.exe eller totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopiér fil %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Slett fil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Feil: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Start ekstern" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Eksternt resultat" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Pakk ut fil %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Opprett link %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Opprett mappe %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Flytt fil %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Pakk til fil %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Programlukking" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Program-start" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Fjern mappe %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Ferdig: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Opprett symlink %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Kontroller filintegritet %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Sikker sletting av fil %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Sikker sletting av mappe %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hovedpassord" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Tast inn hovedpassordet:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Ny fil" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Neste volum blir pakket ut" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ingen filer" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ingen filer valgte." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" "Ikke nok ledig plass på måldrevet.\n" "Vil du fortsette?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ikke nok ledig plass på måldrevet.\n" "Vil du prøve igjen?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Kan ikke slette fil %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ikke mulig." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objektet eksisterer ikke!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Kan ikke fullføres fordi fila er åpen i et annet program:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Forhåndsvising nedenfor. Du kan flytte markøren og markere filer for straks å få et inntrykk av innstillingene." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Passord:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Passordene er ikke like!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Tast inn passordet:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Tilgangskode (brannmur):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "For kontroll av tilgangskoden, tast den inn igjen:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Fjern %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "Forinnstilling \"%s\" finnes allerede.\n" "Vil du overskrive?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problem med å utføre kommando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Filnavn for droppet tekst:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Gjør fila tilgjengelig. Vil du prøve igjen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Tast inn nytt navn for denne favorittfana" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Tast inn nytt navn for denne menyen" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Omdøpe/flytte %d valgte filer/mapper?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Omdøp/flytt \"%s\" til?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Vil du erstatta denne teksten?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Start Double Commander på nytt for å ta i bruk endringene" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Velg hvilken filtype filendinga \"%s\" skal legges til" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Markert: %s av %s, filer: %d av %d, mapper: %d av %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Velg exe-fil til" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Velg bare kontrollsumfiler!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Velg plassering av neste volum" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Oppgi volum-etikett" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Spesial-mapper" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Legg til sti fra aktiv ramme" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Legg til sti fra inaktiv ramme" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Gå til og bruk valgte sti" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Bruk miljøvariabel..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gå til Double Commanders spesial-sti..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gå til miljøvariabel..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gå til annen spesial Windowsmappe..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gå til spesial Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Gjør relativ til favorittmappas sti" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Gjør stien absolutt" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Gjør relativ til spesial Double Commander sti..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Gjør relativ til miljøvariabel..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Gjør relativ til spesial Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Gjør relativ til annen spesial Windowsmappe..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Bruk Double Commanders spesial-sti..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Bruk favorittmappas sti" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Bruk annen spesial Windowsmappe..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Bruk spesial Windowsmappe (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Fana (%s) er låst! Vil du åpne mappa i ei anna fane?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Omdøp fane" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nytt navn:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Sti:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Feil! Kan ikke finne TC-oppsettsfila:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Feil! Kan ikke finne TC-oppsettings EXE-fil:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Feil! TC kjører fortsatt, men burde vært lukket i samband med denne handlingen.\n" "Lukk TC og trykk OK eller trykk Avbryt for å avbryte." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Feil! Kan ikke finne ønsket TC-verktøylinjes utdatamappe:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Tast inn plassering og filnavn der TC-verktøylinjefila skal lagres" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "ADVARSEL: Avslutning av en prosess kan gi uønsket resultat, inkludert datatap og ustabilt system. Prosessen får ikke anledning til å lagre tilstand eller data før den avslutter. Er du sikker på at du vil avslutte prosessen?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" er nå i Utklipp" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Den valgte fila har ukjent ending" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Finn \".toolbar\" fil, som skal importeres" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Finn \".BAR\" fil, som skal importeres" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Tast inn plassering og filnavn for verktøylinja som skal gjenopprettes" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Lagret!\n" "Verktøylinjas filnavn: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Du har valgt for mange filer." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Ikke fastslått" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "FEIL: Uventet bruk av trevisning!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<uten ending>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<UTEN NAVN>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Brukernavn:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Brukernavn (brannmur):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFISERING:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Vil du verifisere valgte kontrollsummer?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Målfil ødelagt, kontrollsum sum stemmer ikke!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Volum-etikett:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Tast inn volum-størrelse:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Sikker sletting av %d valgte filer/mapper?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Sikker sletting av \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "med" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Feil passord!\n" "Prøv en gang til!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automatisk omdøping til \"navn (1).ext\", \"navn (2).ext\" osv.?" #: ulng.rsmulrencounter #, fuzzy msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Definer teller [C]" #: ulng.rsmulrendate #, fuzzy msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dato" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension #, fuzzy msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Ending" #: ulng.rsmulrenfilename #, fuzzy msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Navn" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Uendret;STORE;små;Første stor;Første I Hvert Ord Stor;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter #, fuzzy msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Definer teller [C]" #: ulng.rsmulrenmaskday msgid "Day" msgstr "" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension #, fuzzy msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Ending" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "" #: ulng.rsmulrenmaskname #, fuzzy msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Navn" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "" #: ulng.rsmulrenplugins #, fuzzy msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Pluginer" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Advarsel, like navn!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Fil inneholder feil antall linjer: %d, skal være %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Bevar;Stryk;Spør" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Ingen intern likeverdig kommando" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Beklager, ikke noe \"Søk...\"-vindu ennå..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Beklager, ikke noe annet \"Søk...\"-vindu å lukke og fjerne fra minne..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Utvikling" #: ulng.rsopenwitheducation msgid "Education" msgstr "Opplæring" #: ulng.rsopenwithgames msgid "Games" msgstr "Spill" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafikk" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Nettverk" #: ulng.rsopenwithoffice msgid "Office" msgstr "Kontor" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Annet" #: ulng.rsopenwithscience msgid "Science" msgstr "Forskning" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Oppsett" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Tilbehør" #: ulng.rsoperaborted msgid "Aborted" msgstr "Avbrutt" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Oppretter kontrollsumfil" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Oppretter kontrollsumfil i \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Oppretter kontrollsumfil av \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Beregner" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Beregner \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Slår sammen" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Slår sammen filer i \"%s\" til \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopierer" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopierer fra \"%s\" til \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopierer \"%s\" til \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Oppretter mappe" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Oppretter mappe \"\"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sletter" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Sletter i \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Sletter \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Utfører" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Utfører \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Pakker ut" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Pakker ut fra \"%s\" til \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Avsluttet" #: ulng.rsoperlisting msgid "Listing" msgstr "Opplister" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Opplister \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Flytter" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Flytter fra \"%s\" til\"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Flytter \"%s\" til \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ikke startet" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakker" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakker fra \"%s\" til \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Pakker \"%s\" til \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Har pause" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperrunning msgid "Running" msgstr "Kjører" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Innstiller egenskap" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Innstiller egenskap i \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Innstiller egenskap av \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Deler opp" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Deler opp \"%s\" til \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Starter" #: ulng.rsoperstopped msgid "Stopped" msgstr "Stoppet" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stopper" #: ulng.rsopertesting msgid "Testing" msgstr "Kontrollerer" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Kontrollerer i \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Kontrollerer \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Verifiserer kontrollsum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Verifiserer kontrollsum i \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Verifiserer kontrollsum av \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Venter på tilgang til filkilde" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Venter på brukerrespons" #: ulng.rsoperwiping msgid "Wiping" msgstr "Sletter (fullstendig)" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Sletter (fullstendig) i \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Sletter (fullstendig) \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Arbeider" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "&Legg til i starten;Legg til i slutten;Legg til smart" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Legg til nytt hint for filtype" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Modusavhengig tilleggskommando" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Legg til hvis der er innhold" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Arkivfil (langt navn)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Velg pakkeprogram" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Arkivfil (kort navn)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Endre koding i pakkeliste" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på at du vil slette: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Eksportert pakkeprogram-oppsett" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Eksportér pakkeprogram-oppsett" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport av %d element til fil \"%s\" fullført." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Velg de som du vil eksportere" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Fil-liste (lange navn)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Fil-liste (korte navn)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importér pakkeprogram-oppsett" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import av %d element fra fil \"%s\" fullført." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Velg fil for å importere pakkeprogram-oppsett fra" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Velg de som du vil importere" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Bruk bare navn, uten sti" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Bruk bare sti, uten navn" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Pakkeprogram (langt navn)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Pakkeprogram (kort navn)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Alle navn i hermetegn" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Navn med blanke i hermetegn" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Eitt filnavn som skal prosesseres" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Til undermappe" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Bruk ANSI-koding" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Bruk UTF8-koding" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Tast plassering og filnavn der pakkeprogram-oppsett skal lagres" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arkivtype-navn:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Assosier plugin \"%s\" med:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Først;Sist;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Tradisjonelt;Alfabetisk (men med språkvalg øverst)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Full utfolding;Full sammenfolding" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivt vindu til venstre, inaktivt vindu til høyre (tradisjonelt); Venstre vindu til venstre, høyre til høyre" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Tast inn filending" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Legg til i starten;Legg til i slutten;Alfabetisk sortering" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "eget vindu;minimert eget vindu;handlingspanel" #: ulng.rsoptfilesizefloat msgid "float" msgstr "flytende" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Snarvegen %s for cm_Delete vil bli registrert, så den kan brukes til å angre denne innstillingen." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Legg til hurtigtast for %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Legg til hurtigtast" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Klarer ikke legge til hurtigtast" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Endre hurtigtast" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Kommando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Snarvegen %s for cm_Delete har en parameter som overstyrer denne innstillingen. Vil du endre denne til å bruke de globale innstillingene?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Snarvegen %s for cm_Delete trenger endring av en parameter for å matche snarvegen %s. Vil du endre parameteren?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Omtale" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Redigér hurtigtast for %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Korrigér parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Hurtigtast" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Hurtigtaster" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<tom>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Innstill snarveg for å slette fil" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "For at denne innstillingen skal kunne virke med snarvegen %s, skal snarvegen %s tildeles til cm_Delete. Men den er allerede tildelt til %s. Vil du endre det?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Snarvegen %s for cm_Delete er en sekvens-snarveg som det ikke kan tildeles en snarveg med omvendt Shift for. Denne innstilling vil derfor kanskje ikke virke." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Hurtigtast i bruk" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy, badformat msgid "Shortcut %s is already used." msgstr "Hurtigtast %s er allerede i bruk til %s." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Endre den til %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "brukt av %s i %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "brukt til denne kommandoen, men med andre parametre" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Pakkeprogram" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Oppfrisk automatisk" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Egenskap" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kompakt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farger" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Kolonner" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Oppsett" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Brukerdefinerte kolonner" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Favorittmapper" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Dra & slipp" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drev-valgknapp" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favorittfane" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Filassosiasjoner - ekstra" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Filassosiasjoner" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Ny" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Filhandlinger" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Filvindu" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Filsøk" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visning" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Visning - ekstra" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Filkategorier" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Fane" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Fane - ekstra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fonter" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Framhevere" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Hurtigtaster" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikon" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorér-liste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taster" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Språk" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Utseende" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Loggfil" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Ymse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mus" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Innstillinger er endret i \"%s\"\n" "\n" "Vil du lagre endringer?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Pluginer" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hurtig søking/filtrering" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Verktøylinje" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Verktøy" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Hint" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Trevisning" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Farger for trevisning" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ingen;Kommandolinje;Hurtig-søking;Hurtig-filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bruk venstre knapp;Bruk høyre knapp;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "øverst i fillista; etter mapper (dersom mapper er sorterte før filer);på sortert plass ;nederst i fillista" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Personalisert dynamisk;Personalisert byte;Personalisert kilobyte;Personalisert megabyte;Personalisert gigabyte;Personalisert terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s er allerede tildelt følgende filtyper:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "&Slå av" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Slå på" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Omtale" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Filnavn" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Etter filending" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Etter plugin" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Navn" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Sortering av WCX-pluginer er bare mulig når pluginer blir vist etter filending!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Assosiér med" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Omdøp filtype-hint" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Skille;&Ikke skille" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Filer;&Mapper;Filer &og mapper" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skjul filterpanel når ufokusert;Ta vare på oppsett til neste økt" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "ikke skill;bruk lokale innstillinger (aA-bB-cC);først STORE så små bokstaver (ABC-abc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortér etter navn og vis først;sortér som filer og vis først;sortér som filer" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetisk, inklusive tegn med aksenter;Naturlig sortering: Alfabetisk og numerisk" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Oppe;Nede;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "D&elestrek;&Intern kommando;&Ekstern kommando;&Meny" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "For å endre oppsett av filtype-hint, enten APPLY eller DELETE gjeldende redigering" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Filtype-hint navn:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" finnes allerede!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på at du vil slette: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Eksportert oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Eksportér oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksport av %d element til fil \"%s\" fullført." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Velg de som du vil eksportere" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importér oppsett for filtype-hint" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import av %d element fra fil \"%s\" fullført." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Velg fil for å importere oppsett for filtype-hint fra" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Velg de som du vil importere" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Tast plassering og filnavn der oppsett for filtype-hint skal lagres" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Vis hint for filer i filvindu" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Tradisjonell DC - Kopi (x) filnavn.ext;Windows - filnavn (x).ext;Andre - filnavn(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "bevar plassering;bruk samme plassering som for nye filer;til sortert plassering" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Med komplett absolutt sti;Sti relativ til %COMMANDER_PATH%;Relativ til følgende" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "inneholder" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Felt \"\"%s\" ikke funnet!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Plugin \"%s\" ikke funnet!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Enhet \"%s\" ikke funnet for felt \"%s\"!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Filer: %d, mapper: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Kan ikke endre tilgang for \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Kan ikke endre eier for \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fil" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Ny mappe" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Navngitt rør (pipe)" #: ulng.rspropssocket msgid "Socket" msgstr "Sokkel" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Spesiell blokk-enhet" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Spesiell tegn-enhet" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolsk link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ukjent type" #: ulng.rssearchresult msgid "Search result" msgstr "Søkeresultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "SØK" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<mal uten navn>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Et filsøk som bruker DSX plugin er allerede i gang.\n" "Dette må fullføres før et nytt kan startes." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Et filsøk som bruker WDX plugin er allerede i gang.\n" "Dette må fullføres før et nytt kan startes." #: ulng.rsselectdir msgid "Select a directory" msgstr "Velg ei mappe" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Velg ditt vindu" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Vis hjelp for %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategori" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolonne" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Kommando" #: ulng.rssimpleworderror msgid "Error" msgstr "Feil" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Feilet!" #: ulng.rssimplewordfalse msgid "False" msgstr "Falsk" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Filnavn" #: ulng.rssimplewordfiles msgid "files" msgstr "filer" #: ulng.rssimplewordletter msgid "Letter" msgstr "Bokstav" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Vellykket!" #: ulng.rssimplewordtrue msgid "True" msgstr "Sann" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbeidsmappe" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" "Antall fil(er): %d og mappe(r): %d\n" "Størrelse: %s (= %s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Klarte ikke opprette mål-mappe!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Ukorrekt filstørrelse-format!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan ikke dele opp fil!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Mer enn 100 deler! Vil du fortsette?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatisk;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Velg mappe:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Forhåndsvis her" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Andre" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Sidenote" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Flat" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Begrenset" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Enkel" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fantastisk" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Imponerende" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Strålende" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Velg mappe fra Dir-historien" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Velg dine favorittfaner:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Velg kommando fra kommandolinjehistorien" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Velg handling fra hovedmenyen" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Velg handling fra Verktøylinja" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Velg mappe fra favorittmappe:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Velg mappe fra filvisningshistorien" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Velg fil eller mappe" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Klarte ikke opprette symlink." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Ren tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ingen handling;Lukk fane;Åpn favorittfane;Åpn menyen Faner" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dag(er)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Time(r)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minutt(er)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Måned(er)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Uke(r)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "År" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Omdøp favorittfane" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Omdøp favorittfanes undermeny" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Sammenlikningsprogram" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Feil ved åpning av sammenlikningsprogram" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Feil ved åpning av Editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Feil ved åpning av Terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Feil ved åpning av Framviser" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Bruk systeminnstilling;1 sekund;2 sekund;3 sekund;5 sekund;10 sekund;30 sekund;1 minutt;Aldri skjul" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Kombinér DC- og system-hint, DC først (tradisjonelt);Kombinér DC- og system-hint, system først;Vis DC-hint om mulig og system dersom ikke;Vis bare DC-hint;Vis bare system-hint" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Framviser" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapportér vennligst denne feilen i \"bug-tracker\" med en beskrivelse av hva du gjorde, og følgende fil: %s Trykk %s for å fortsette eller %s for å avbryte programmet." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Begge panel, fra aktivt til inaktivt" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Begge panel, fra venstre til høyre" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Panelets sti" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Omslutt hvert filnavn med parenteser e.l." #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Bare filnavn, ingen filending" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Komplett filnavn (sti+filnavn)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hjelp med \"%\" variabler" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Be brukeren om å inntaste en parameter med en foreslått standardverdi" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Venstre panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Midlertidig filnavn fra liste med filnavn" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Midlertidig filnavn fra liste med komplette filnavn (sti+filnavn)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Filnavn i lista i UTF-16 med BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Filnavn i lista i UTF-16 med BOM, inne i hermetegn" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Filnavn i lista i UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Filnavn i lista i UTF-8, inne i hermetegn" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Midlertidig filnavn fra liste med filnavn med relativ sti" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Bare filendinger" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Bare filnavn" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Andre eksempler på hva som er mulig" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Sti, uten skilletegn på slutten" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Fra her til enden av linja, prosent-indikatoren er \"#\"-tegnet" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Returner prosenttegn" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Fra her til enden av linja: prosent-indikatoren er bak \"%\"-tegnet" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Sett \"-a\" eller noe annet framfor hvert navn" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Spør bruker for parametre;Standardverdi foreslått]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Filnavn med relativ sti" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Høyre panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Komplett sti til den 2. valgte fil i høyre panel" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Vis kommandoen før utføring" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Enkel melding]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Viser en enkel melding" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktivt panel (kilde)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktivt panel (mål)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Filnavn vil bli siterte fra her (standard)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Kommandoer vil bli utførte i terminal, som forblir åpen" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Stier får et skilletegn på slutten" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Filnavn vil ikke bli siterte fra her" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Kommandoer vil bli utført i terminal, som deretter lukkes" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Stier får et skilletegn på slutten (standard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Nettverk" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commanders interne framviser." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Dårlig kvalitet" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Bildetype" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Ny størrelse" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s ikke funnet!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Penn;Ramme;Ellipse" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "med ekstern framviser" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "med intern framviser" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Antall skiftet ut: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Ingen utskifting er utført." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.ko.po�����������������������������������������������������������0000644�0001750�0000144�00001413746�15104114162�017276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2025-03-24 01:21+0900\n" "Last-Translator: VenusGirl: venusgirl@outlook.com/\n" "Language-Team: 비너스걸: https://venusgirls.tistory.com/\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국어\n" "X-Generator: Poedit 3.5\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "비교 중... %d%% (취소하려면 ESC)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "왼쪽: %d개 파일 삭제" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "오른쪽: %d개 파일 삭제" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "찾은 파일: %d (동일: %d, 다름: %d, 고유 왼쪽: %d, 고유 오른쪽: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "왼쪽에서 오른쪽: %d개 파일 복사, 전체 용량: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "오른쪽에서 왼쪽: %d개 파일 복사, 전체 용량: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "템플릿 선택..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "여유 공간 확인(&H)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "속성 복사(&Y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "소유권 복사(&W)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "권한 복사(&P)" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "날짜/시간 복사(&A)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "올바른 링크(&K)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "읽기 전용 플래그 삭제(&G)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "빈 디렉터리 제외(&X)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "링크 따라가기(&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "예비 공간(&R)" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "쓰기 시 복사" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "검증(&V)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "파일 시간, 속성 등을 설정할 수 없는 경우 수행할 작업" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "템플릿 파일 사용" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "디렉터리가 존재하는 경우(&E)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "파일이 존재하는 경우(&F)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "속성을 설정할 수 없는 경우(&N)" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<템플릿 없음>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "닫기(&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "클립보드로 복사" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "Double Commander 정보 - 한국어 번역: 비너스걸" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "빌드" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "커밋" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "홈페이지:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "리비전" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "버전" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "재설정(&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "속성 선택" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "보관(&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "압축(&M)" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "디렉터리(&D)" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "암호화(&E)" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "숨김(&H)" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "읽기 전용(&N)" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "희소성(&P)" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "스티커" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "심링크(&S)" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "시스템(&Y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "임시(&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 속성" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "일반 속성" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "비트:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "그룹" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "기타" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "소유자" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "실행" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "읽기" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "텍스트로(&X):" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "쓰기" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "벤치마크" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "벤치마크 데이터 크기: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "해시" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "시간 (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "속도 (MB/초)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "체크섬 계산..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "작업 완료 후 체크섬 파일 열기" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "각 파일에 대해 별도의 체크섬 파일 생성(&R)" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "파일 형식(&F)" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "체크섬 파일 저장 위치(&S):" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "체크섬 검증..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "인코딩" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "추가(&D)" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "연결(&O)" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "삭제(&D)" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "편집(&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "연결 관리자" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "연결:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "대기열에 추가(&D)" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "옵션(&P)" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "이러한 옵션을 기본값으로 저장(&V)" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "파일 복사" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "새 대기열" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "대기열 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "대기열 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "대기열 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "대기열 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "대기열 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "설명 저장" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "파일/폴더 주석" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "주석 편집(&D):" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "인코딩(&E):" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "제품 정보" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "자동 비교" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "바이너리 모드" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "취소" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "취소" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "블럭 오른쪽 복사" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "블럭 오른쪽 복사" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "블럭 왼쪽 복사" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "블럭 왼쪽 복사" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "복사" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "잘라내기" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "삭제" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "붙여넣기" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "다시 실행" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "다시 실행" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "모두 선택(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "실행 취소" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "실행 취소" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "종료(&X)" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "찾기(&F)" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "찾기" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "다음 찾기" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "다음 찾기" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "이전 찾기" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "이전 찾기" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "바꾸기(&R)" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "바꾸기" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "첫 번째 차이점" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "첫 번째 차이점" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "줄로 가기..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "줄로 가기" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "대소문자 무시" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "공백 무시" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "스크롤 유지" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "마지막 차이점" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "마지막 차이점" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "줄 차이점" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "다음 차이점" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "다음 차이점" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "왼쪽 열기..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "오른쪽 열기..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "백그라운드 칠하기" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "이전 차이점" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "이전 차이점" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "다시 불러오기(&R)" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "다시 불러오기" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "저장" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "저장" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "다음으로 저장..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "다음으로 저장..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "왼쪽 저장" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "왼쪽 저장" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "왼쪽을 다음으로 저장..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "왼쪽을 다음으로 저장..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "오른쪽 저장" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "오른쪽 저장" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "오른쪽을 다음으로 저장..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "오른쪽을 다음으로 저장..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "비교" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "비교" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "인코딩" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "인코딩" #: tfrmdiffer.caption msgid "Compare files" msgstr "파일 비교" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "왼쪽(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "오른쪽(&R)" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "동작(&A)" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "인코딩(&C)" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "파일(&F)" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "옵션(&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "시퀀스에 새 바로 가기 추가" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "시퀀스에서 마지막 바로 가기 제거" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "사용 가능한 나머지 키 목록에서 바로 가기 선택" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "이러한 제어에만" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "매개변수 (각각 별도의 행에 있음)(&P):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "바로 가기:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "제품 정보" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "제품 정보" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "구성(&C)" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "구성" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "복사" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "잘라내기" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "삭제" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "찾기(&F)" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "찾기" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "다음 찾기" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "다음 찾기" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "이전 찾기" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "줄로 가기..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "붙여넣기" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "다시 실행" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "다시 실행" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "바꾸기(&R)" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "바꾸기" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "모두 선택(&A)" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "모두 선택" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "실행 취소" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "실행 취소" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "닫기" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "종료" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "새로 만들기(&N)" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "새로 만들기" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "열기(&O)" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "열기" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "다시 불러오기" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "저장(&S)" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "저장" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "다른 이름으로 저장(&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "다음으로 저장" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "편집기" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "도움말(&H)" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "인코딩(&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "다음으로 열기" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "다음으로 저장" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "파일(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "구문 강조" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "줄의 끝" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "다중 줄 패턴(&M)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "대소문자 구분(&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "캐럿에서 검색(&E)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "정규식(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "선택한 텍스트만(&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "완전한 단어만(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "옵션" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "바꿀 내용(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "검색 대상(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "방향" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "모든 현재 개체에 대해 이 작업 수행(&A)" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "파일 압축 풀기" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "파일과 함께 저장된 경우 경로 이름 압축 풀기(&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "각 압축파일의 압축을 별도의 하위 디렉터리 (압축파일 이름)에 풀기(&S)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "기존파일 덮어쓰기(&V)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "디렉터리로(&D):" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "파일 마스크와 일치하는 파일 추출(&E):" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "암호화된 파일의 암호(&P):" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "기다려 주세요..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "파일 이름:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "대상:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "임시 파일을 삭제할 수 있을 때 닫기를 클릭하세요!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "패널로(&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "모두 보기(&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "현재 작업:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "압축 대상:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "압축 위치:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "등록 정보" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "스티커" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "프로그램으로 파일 실행 허용(&E)" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "재귀적(&R)" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "비트:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "그룹" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "다른" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "텍스트:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "포함:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "생성 날짜:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "실행" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "실행:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "파일 이름" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "파일 이름" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "경로:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "그룹(&G)" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "액세스 날짜:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "수정 날짜:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "상태가 변경됨:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "링크:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "미디어 유형:" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "8진수:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "소유자(&W)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "읽기" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "디스크의 크기:" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "크기:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "심볼 링크:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "유형:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "이름" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "값" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "속성" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "속성" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "닫기" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "종료하기" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "잠금 해제" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "모두 잠금 해제" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "잠금 해제" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "파일 처리" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "프로세스 ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "실행 파일 경로" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "취소(&A)" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "검색 취소 및 창 닫기" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "단축키 구성" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "편집(&E)" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "목록 상자에 피드(&L)" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "검색 취소, 닫기 및 메모리 비우기" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "다른 모든 \"파일 찾기\"의 경우 취소, 닫기 및 메모리 비우기" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "파일로 가기(&G)" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "데이터 찾기" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "마지막 검색(&L)" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "새 검색(&N)" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "새 검색 (필터 지우기)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "\"고급\" 페이지로 가기" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "\"불러오기/저장\" 페이지로 가기" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "다음 페이지로 전환(&T)" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "\"플러그인\" 페이지로 가기" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "이전 페이지로 전환(&P)" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "\"결과\" 페이지로 가기" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "\"기본\" 페이지로 가기" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "시작(&S)" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "보기(&V)" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "추가(&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "저장(&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "불러오기(&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "저장(&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "\"디렉터리에서 시작\"으로 저장(&V)" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "저장하면 템플릿을 불러올 때 \"디렉터리에서 시작\"이 복원됩니다. 특정 디렉토리로 검색을 수정하려는 경우 사용하세요" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "템플릿 사용" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "파일 찾기" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "대소문자 구분(&I)" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "다음 날짜 이후(&D):" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "다음 날짜 이전(&E):" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "다음 크기 이상(&I):" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "다음 크기 이하(&Z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "압축파일에서 찾기(&A)" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "파일에서 텍스트 찾기(&T)" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "심볼릭 링크 따라가기(&Y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "텍스트를 포함하지 않는 파일 찾기(&O)" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "다음 이내(&O):" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Office XML(&C)" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "열려있는 탭" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "파일 이름의 일부로 검색(&H)" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "정규식(&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "바꾸기(&P)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "선택한 디렉터리 및 파일(&F)" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "정규식(&U)" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "다음 시간 이후(&T):" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "다음 시간 이전(&M):" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "검색 플러그인 사용(&U):" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "동일 내용" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "동일 해시값" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "동일 이름" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "중복 파일 찾기(&P):" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "동일 크기" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "16진수(&M)" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "검색에서 제외할 디렉터리 이름을 \";\"로 구분하여 입력" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "검색에서 제외할 파일 이름을 \";\"로 구분하여 입력" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "파일 이름을 \";\"로 구분하여 입력" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "플러그인" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "필드" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "연산자" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "값" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "디렉터리" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "파일" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "데이터 찾기" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "속성(&B)" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "인코딩(&G):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "하위 디렉터리 제외(&X)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "파일 제외(&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "파일 마스크(&F)" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "디렉터리에서 시작(&D)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "하위 디렉터리에서 검색(&B):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "이전 검색(&P):" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "동작(&A)" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "다른 모든 항목은 취소, 닫기 및 메모리 비우기" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "새 탭에서 열기" #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "옵션" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "목록에서 제거" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "결과(&R)" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "찾은 모든 항목 표시" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "편집기에 표시" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "뷰어에 표시" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "보기(&V)" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "고급" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "불러오기/저장" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "결과" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "기본" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "찾기(&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "찾기" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "뒤로 가기(&B)" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "대소문자 구분(&A)" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "정규식(&R)" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "16진수" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "도메인:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "암호:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "사용자 이름:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "익명으로 연결" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "사용자로 연결:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "하드 링크 만들기" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "링크가 가리키는 대상(&D)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "링크 이름(&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "모두 가져옵니다!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "선택 가져오기" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "가져올 항목 선택" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "하위 메뉴를 클릭하면 전체 메뉴를 선택" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "여러 항목을 선택하려면 Ctrl 키를 누른 상태에서 항목을 클릭" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "링커" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "저장할 위치..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "항목" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "파일 이름(&F)" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "아래로(&W)" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "아래로" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "제거(&R)" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "삭제" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "위로(&U)" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "위로" #: tfrmmain.actabout.caption msgid "&About" msgstr "제품 정보(&A)" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "인덱스별 탭 활성화" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "명령줄에 파일 이름 추가" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "새 검색 인스턴스..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "명령줄에 경로 및 파일 이름 추가" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "명령줄에 경로 복사" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "플러그인 추가" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "벤치마크(&B)" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "간단히 보기" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "간단히 보기" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "점유된 공간 계산(&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "디렉터리 변경" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "디렉터리를 홈으로 변경" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "디렉터리를 부모로 변경" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "디렉터리를 루트로 변경" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "체크섬 계산(&S)..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "체크섬 검증(&V)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "로그 파일 지우기" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "로그 창 지우기" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "모든 탭 닫기(&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "중복 탭 닫기" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "탭 닫기(&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "다음 명령줄" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "기록에서 명령줄을 다음 명령으로 설정" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "이전 명령줄" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "기록에서 명령줄을 이전 명령으로 설정" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "자세히" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "열 보기" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "내용별 비교(&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "디렉터리 비교" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "디렉터리 비교" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "압축기 구성" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "디렉터리 주요 목록 구성" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "즐겨찾기 탭 구성" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "폴더 탭 구성" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "단축키 구성" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "플러그인 구성" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "위치 저장" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "설정 저장" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "검색 구성" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "도구 모음..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "도구 설명 구성" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "트리 보기 메뉴 구성" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "트리 보기 메뉴 색상 구성" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "상황에 맞는 메뉴 표시" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "모든 탭을 반대편으로 복사" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "표시된 모든 열 복사(&C)" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "전체 경로 포함해 파일 이름 복사(&P)" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "파일 이름을 클립보드에 복사(&F)" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "UNC 경로로 이름 복사" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "확인 요청 없이 파일 복사" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "끝 디렉터리 구분자 없이 선택한 파일의 전체 경로 복사" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "선택한 파일의 전체 경로 복사" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "동일한 패널로 복사" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "복사(&C)" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "점유된 공간 표시(&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "잘라내기(&T)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "명령 매개변수 표시" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "모든 검색에 대해 취소, 닫기 및 메모리 비우기" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "디렉터리 이력" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "디렉터리 주요 목록(&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "내부 명령 실행(&I)..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "임의의 명령을 선택하고 실행" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "편집" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "주석 편집(&M)..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "새 파일 편집" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "파일 목록 위의 경로 필드 편집" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "패널 교환(&P)" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "스크립트 실행" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "종료(&E)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "압축 추출(&E)..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "파일 연결 구성(&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "파일 결합(&B)..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "파일 속성 표시(&F)" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "파일 분할(&I)..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "평면 보기(&F)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "평면 보기, 선택된 항목만(&F)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "명령줄 초점" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "초점 교환" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "왼쪽 및 오른쪽 파일 목록 간 전환" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "트리 보기에 초점" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "현재 파일 목록 및 트리 보기 간 전환 (활성화된 경우)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "첫 번째 폴더 또는 파일에 커서 배치" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "목록의 첫 번째 파일에 커서 배치" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "마지막 폴더 또는 파일에 커서 배치" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "목록의 마지막 파일에 커서 배치" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "다음 폴더 또는 파일에 커서 배치" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "이전 폴더 또는 파일에 커서 배치" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "하드 링크 만들기(&H)..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "내용(&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "수평 패널 모드(&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "키보드(&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "왼쪽 패널의 간단히 보기" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "왼쪽 패널의 열 보기" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "왼쪽 = 오른쪽(&=)" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "왼쪽 패널의 평면 보기(&F)" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "왼쪽 드라이브 목록 열기" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "왼쪽 패널의 역순(&V)" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "속성별로 왼쪽 패널 정렬(&A)" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "날짜별로 왼쪽 패널 정렬(&D)" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "확장자별로 왼쪽 패널 정렬(&E)" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "이름별로 왼쪽 패널 정렬(&N)" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "크기별로 왼쪽 패널 정렬(&S)" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "왼쪽 패널의 썸네일 보기" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "즐겨찾기 탭에서 탭 불러오기" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "목록 불러오기" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "지정된 텍스트 파일에서 파일/폴더 목록 불러오기" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "클립보드에서 선택 항목 불러오기(&B)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "파일에서 선택 항목 불러오기(&L)..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "파일에서 탭 불러오기(&L)" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "디렉터리 만들기(&D)" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "동일한 확장자 모두 선택(&X)" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "이름이 같은 모든 파일 선택" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "이름과 확장자가 같은 모든 파일 선택" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "동일한 경로에서 모두 선택" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "선택 반전(&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "모두 선택(&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "그룹 선택 해제(&U)..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "그룹 선택(&G)..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "모두 선택 해제(&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "창 최소화" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "현재 탭을 왼쪽으로 이동" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "현재 탭을 오른쪽으로 이동" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "다중 이름 바꾸기 도구(&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "네트워크 연결(&C)..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "네트워크 연결 끊기(&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "네트워크 빠른 연결(&Q)..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "새 탭(&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "목록에서 다음 즐겨찾기 탭 불러오기" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "다음 탭으로 전환(&T)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "열기" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "압축파일 열기 시도" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "표시줄 파일 열기" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "새 탭에 폴더 열기(&F)" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "인덱스로 드라이브 열기" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "가상 파일 시스템 목록 열기(&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "작업 뷰어(&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "옵션(&O)..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "파일 압축(&P)..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "분할 위치 설정" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "붙여넣기(&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "목록에서 이전 즐겨찾기 탭 불러오기" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "이전 탭으로 전환(&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "빠른 필터" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "빠른 검색" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "빠른 보기 패널(&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "새로 고침(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "마지막으로 불러온 즐겨찾기 탭 다시 불러오기" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "이동" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "확인 요청 없이 파일 이동/이름 바꾸기" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "이름 바꾸기" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "탭 이름 바꾸기(&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "마지막으로 불러온 즐겨찾기 탭에 저장" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "선택 항목 복원(&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "순서 반전(&V)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "오른쪽 패널의 간단히 보기" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "오른쪽 패널의 열 보기" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "오른쪽 = 왼쪽(&=)" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "오른쪽 패널의 평면 보기(&F)" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "오른쪽 드라이브 목록 열기" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "오른쪽 패널의 역순(&V)" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "속성별로 오른쪽 패널 정렬(&A)" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "날짜별로 오른쪽 패널 정렬(&D)" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "확장자별로 오른쪽 패널 정렬(&E)" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "이름별로 오른쪽 패널 정렬(&N)" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "크기별로 오른쪽 패널 정렬(&S)" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "오른쪽 패널의 썸네일 보기" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "터미널 실행(&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "현재 탭을 새 즐겨찾기에 저장" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "표시된 모든 열을 파일에 저장" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "선택 항목 저장(&V)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "선택 항목을 파일에 저장(&E)..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "파일에 탭 저장(&S)" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "검색(&S)..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "디렉터리로 잠긴 모든 탭을 새 탭에서 열기" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "모든 탭을 일반으로 설정" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "모든 탭을 잠김으로 설정" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "디렉터리 변경 허용으로 모든 탭이 잠김" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "속성 변경(&A)..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "새 탭에서 디렉터리를 열면 잠김(&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "일반(&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "잠김(&L)" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "디렉터리 변경 허용으로 잠김(&D)" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "열기" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "시스템 연결을 사용하여 열기" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "버튼 메뉴 표시" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "명령줄 기록 표시" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "메뉴" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "숨김/시스템 파일 표시(&H)" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "탭 목록 표시" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "열려 있는 모든 탭 목록 표시" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "속성별 정렬(&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "날짜별 정렬(&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "확장자별 정렬(&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "이름별 정렬(&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "크기별 정렬(&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "드라이브 목록 열기" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "파일 이름을 표시하지 않도록 무시 목록 파일 사용/사용 안 함" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "심볼릭 링크 만들기(&L)..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "동기식 탐색" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "두 패널 모두에서 동기식 디렉터리 변경" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "디렉터리 동기화(&C)..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "대상 = 원본(&=)" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "압축파일 테스트(&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "썸네일" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "썸네일 보기" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "전체 화면 모드 콘솔 전환" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "커서 아래의 디렉터리를 왼쪽 창으로 전송" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "커서 아래의 디렉터리를 오른쪽 창으로 전송" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "트리 보기 패널(&T)" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "매개변수에 따라 정렬" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "동일한 확장자 모두 선택 취소(&T)" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "이름이 같은 모든 파일 선택 취소" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "이름과 확장자가 같은 모든 파일 선택 취소" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "동일한 경로에서 모두 선택 취소" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "보기" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "활성 보기를 위해 방문한 경로 기록 표시" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "기록의 다음 항목으로 가기" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "기록의 이전 항목으로 가기" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "로그 파일 보기" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "현재 검색 인스턴스 보기" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Double Commander 웹사이트 방문(&V)" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "영구 삭제" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "디렉터리 주요 목록 및 매개변수로 작업" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "종료" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "디렉터리" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "터미널" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "디렉터리 주요 목록" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "왼쪽 패널에 오른쪽 패널의 현재 디렉터리 표시" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "홈 디렉터리로 가기" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "루트 디렉터리로 가기" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "상위 디렉터리로 가기" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "디렉터리 주요 목록" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "오른쪽 패널에 왼쪽 패널의 현재 디렉터리 표시" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "경로" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "복사..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "링크 만들기..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "지우기" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "숨기기" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "모두 선택" #: tfrmmain.mimove.caption msgid "Move..." msgstr "이동..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "심링크 만들기..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "탭 옵션" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "복원" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "시작" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "명령(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "구성(&O)" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "즐겨찾기(&A)" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "파일(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "선택(&M)" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "네트워크(&N)" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "표시(&S)" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "탭 옵션(&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "탭(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "편집" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "내부 명령 선택" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "레거시 정렬" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "레거시 정렬" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "기본적으로 모든 범주 선택" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "선택:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "범주(&C):" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "명령 이름(&N):" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "필터(&F):" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "힌트:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "단축키:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "범주" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "도움말" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "힌트" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "단축키" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "추가(&A)" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "정의(&D)..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "대소문자 구분" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "억양 및 합자 무시" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "속성(&B):" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "입력 마스크:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "또는 미리 정의된 선택 유형을 선택(&R):" #: tfrmmkdir.caption msgid "Create new directory" msgstr "새 디렉터리 만들기" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "확장된 구문(&E)" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "새 디렉터리 이름 입력(&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "새 크기" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "높이 :" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Jpg에 대한 압축 품질" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "너비 :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "높이" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "너비" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "확장자" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "파일 이름" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "지우기" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "지우기" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "닫기(&C)" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "구성(&G)" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "카운터" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "카운터" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "날짜" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "날짜" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "삭제" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "드롭 다운 사전 설정 목록" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "이름 편집..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "현재 새 이름 편집..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "확장자" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "확장자" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "편집(&E)" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "상대 경로 호출 메뉴" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "마지막 사전 설정 불러오기" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "파일에서 이름 불러오기..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "이름 또는 인덱스로 사전 설정 불러오기" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "사전 설정 1 불러오기" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "사전 설정 2 불러오기" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "사전 설정 3 불러오기" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "사전 설정 4 불러오기" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "사전 설정 5 불러오기" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "사전 설정 6 불러오기" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "사전 설정 7 불러오기" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "사전 설정 8 불러오기" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "사전 설정 9 불러오기" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "파일 이름" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "파일 이름" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "플러그인" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "플러그인" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "이름 바꾸기(&R)" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "이름 바꾸기" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "모두 재설정(&A)" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "저장" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "다음으로 저장..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "사전 설정 메뉴 표시" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "정렬" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "시간" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "시간" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "이름 바꾸기 로그 파일 보기" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "다중 이름 바꾸기 도구" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "대소문자 구분" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "로그 결과(&L)" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "추가하기" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "파일당 한 번만 바꾸기" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "정규식(&X)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "대체 사용(&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "카운터" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "찾기 및 바꾸기" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "마스크" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "사전 설정" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "확장자(&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "찾기(&F)..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "간격(&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "파일 이름(&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "바꾸기(&P)..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "시작 번호(&T)" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "너비(&W)" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "동작" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "편집기" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "이전 파일 이름" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "새 파일 이름" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "파일 경로" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "편집기를 닫은 후 확인을 클릭하여 변경된 이름을 불러옵니다!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "응용 프로그램 선택" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "사용자 지정 명령" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "연결 저장" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "선택한 응용 프로그램을 기본 작업으로 설정" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "열린 파일 종류: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "다중 파일 이름" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "다중 URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "단일 파일 이름" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "단일 URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "적용(&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "도움말(&H)" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "옵션" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "하위 페이지 중 하나를 선택하세요. 이 페이지에는 설정이 없습니다." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "추가(&D)" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "적용(&P)" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "복사" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "삭제(&E)" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "기타(&E)..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "이름 바꾸기(&R)" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID는 파일 확장자가 아닌 내용을 감지하여 압축파일를 인식하기 위해 cm_OpenArchive와 함께 사용됩니다:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "옵션:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "형식 구문 분석 모드:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "사용함(&N)" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "디버그 모드(&B)" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "콘솔 출력 표시(&H)" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "확장자가 없는 압축파일 이름을 목록으로 사용" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix 파일 속성(&X)" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix 경로 구분 기호 \"/\"(&U)" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows 파일 속성(&F)" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows 경로 구분 기호 \"/\"(&M)" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "추가(&I):" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "압축기(&H):" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "삭제(&L):" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "설명(&S):" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "확장자(&X):" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "추출(&T):" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "경로 없이 추출(&W):" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID 위치(&V):" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID 탐색 범위(&K):" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "목록(&L):" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "압축기(&V):" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "목록화 완료 (선택사항)(&F):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "목록화 형식(&M):" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "목록화 시작 (선택사항)(&G):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "암호 쿼리 문자열(&Q):" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "자동 추출 압축파일 만들기(&G):" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "테스트(&T):" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "자동 구성(&U)" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "모두 사용 안 함" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "수정 사항 폐기" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "모두 사용" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "내보내기..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "가져오기..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "압축기 정렬" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "부가 기능" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "일반" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "크기, 날짜 또는 속성이 변경될 때(&S)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "다음 경로 및 해당 하위 디렉터리에 대해(&P):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "파일이 생성, 삭제, 이름이 변경될 때(&F)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "응용 프로그램이 백그라운드에 있을 때(&B)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "자동 새로 고침 사용 안 함" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "파일 목록 새로 고침" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "트레이 아이콘 항상 표시(&W)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "마운트되지 않은 장치 자동 숨기기(&H)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "최소화 시 아이콘을 시스템 트레이로 이동(&V)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "tfrmoptionsbehavior.cbonlyonce.caption" msgid "A&llow only one copy of DC at a time" msgstr "한 번에 하나의 DC 사본만 허용(&L)" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "여기서 \";\"로 구분된 하나 이상의 드라이브 또는 마운트 지점을 입력할 수 있습니다." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "드라이브 블랙리스트(&B)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "열 크기" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "파일 확장자 표시" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "정렬 (탭 포함)(&G)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "파일 이름 바로 뒤에(&R)" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "자동" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "고정된 열 수" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "고정된 열 너비" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "그라디언트 표시기 사용(&G)" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "바이너리 모드" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "책 모드" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "이미지 모드" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "텍스트 모드" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "추가됨:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "배경:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "텍스트:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "범주:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "삭제됨:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "오류:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "배경 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "배경 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "표시기 배경색(&D):" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "표시기 전경색(&I):" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "표시기 임계값 색상(&T):" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "정보:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "왼쪽:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "수정 날짜:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "수정 날짜:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "오른쪽:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "성공:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "알 수 없음:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "상태" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "값과 같은 열 제목 정렬" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "열 너비에 맞게 텍스트 잘라내기(&T)" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "텍스트가 열에 맞지 않는 경우 셀 너비 늘리기(&E)" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "수평줄(&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "수직줄(&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "열 자동 채우기(&U)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "격자 표시" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "열 크기 자동 조정" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "열 크기 자동 조정(&Z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "적용(&P)" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "명령줄 기록(&M)" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "디렉터리 기록(&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "파일 마스크 기록(&F)" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "폴더 탭" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "구성 저장(&V)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "검색/바꾸기 기록(&H)" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "기본 창 상태" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "디렉터리" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "구성 파일의 위치" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "종료 시 저장" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "왼쪽 트리에서 구성 순서의 정렬 순서" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "구성 페이지에서 입력할 때의 트리 상태" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "명령줄에서 설정" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "강조:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "아이콘 테마:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "썸네일 캐시:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "프로그램 디렉터리 (포터블 버전)(&R)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "사용자 홈 디렉터리(&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모두" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "모두" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "모든 열에 수정 적용" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "기본값 설정으로 가기" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "새로 만들기" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "다음" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "이전" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "기본값으로 재설정" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "다음으로 저장" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "저장" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "과장 색상 허용" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "무언가를 변경하려면 클릭할 때 모든 열에 대해 변경" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "일반" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "커서 테두리" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "프레임 커서 사용" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "비활성 선택 색상 사용" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "반전 선택 사용" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "이 보기에 사용자 지정 글꼴 및 색상 사용" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "배경:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "배경 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "열 보기(&C):" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[현재 열 이름]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "커서 색상:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "커서 텍스트:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "파일 시스템(&F)" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "글꼴:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "크기:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "텍스트 색상:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "비활성 커서 색상:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "비활성 마크 색상:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "마크 색상:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "아래는 미리보기입니다. 커서를 이동하고 파일을 선택하면 다양한 설정의 실제 모양과 느낌을 바로 확인할 수 있습니다." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "열에 대한 설정:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "열 추가" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "비교 후 프레임 패널의 위치:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "활성 프레임의 디렉터리 추가(&A)" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "활성 및 비활성 프레임의 디렉터리 추가(&D)" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "찾아볼 디렉터리 추가(&W)" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "선택한 항목의 복사본 추가" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "선택한 현재 또는 활성 프레임의 디렉터리 추가(&S)" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "구분자 추가" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "하위 메뉴 추가" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "입력할 디렉터리 추가" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "모두 접기" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "항목 접기" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "항목 선택 잘라내기" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "모두 삭제!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "선택된 항목 삭제" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "하위 메뉴 및 모든 요소 삭제" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "하위 메뉴만 삭제하고 요소 유지" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "항목 확장" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "트리 창 초점" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "첫 번째 항목으로 가기" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "마지막 항목으로 가기" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "다음 항목으로 가기" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "이전 항목으로 가기" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "활성 프레임의 디렉터리 삽입(&A)" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "활성 및 비활성 프레임의 디렉터리 삽입(&D)" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "찾아볼 디렉터리 추가(&W)" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "선택한 항목의 복사본 삽입" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "선택한 현재 또는 활성 프레임의 활성 디렉터리 삽입(&S)" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "구분자 삽입" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "하위 메뉴 삽입" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "입력할 디렉터리 삽입" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "다음으로 이동" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "이전으로 이동" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "모든 분기점 열기" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "잘라낸 것 붙여넣기" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "경로에서 검색 및 바꾸기(&P)" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "경로 및 대상 모두에서 검색 및 바꾸기" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "대상 경로에서 검색 및 바꾸기(&T)" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "경로 조정" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "대상 경로 조정" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "추가(&D)..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "백업(&K)..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "삭제(&L)..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "내보내기(&X)..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "가져오기(&R)..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "삽입(&I)..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "기타 사항(&M)..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로 선택 기능" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "적절한 대상을 선택하기 위한 일부 함수" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "정렬(&S)..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "디렉터리를 추가할 때 대상도 추가(&W)" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "항상 트리 확장(&Y)" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "유효한 환경 변수만 표시(&V)" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "팝업에서 [경로] 보이기(&U)" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "이름, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "이름, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "디렉터리 주요 목록 (끌어서 놓기로 재정렬)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "기타 옵션" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "이름:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "경로:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "대상(&T):" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr ".....선택된 항목의 현재 수준만(&V)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "모든 주요 디렉터리 경로를 검색하여 실제로 존재하는 경로 검증(&H)" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "모든 주요 디렉터리 경로 및 대상을 검색하여 실제로 존재하는 경로 검증(&S)" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "디렉터리 주요 목록 파일 (.hotlist)로(&H)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "TC의 \"wincmd.ini\"에 (기존 유지)(&K)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "TC의 \"wincmd.ini\"에 (기존 지우기)(&E)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "TC 관련 정보 구성으로 가기(&C)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "TC 관련 정보 구성으로 가기(&C)" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "디렉터리 주요 목록 파일 (.hotlist)에서(&H)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "TC의 \"wincmd.ini\"에서(&W)" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "탐색(&N)..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "디렉터리 주요 목록 백업 복원(&R)" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "현재 디렉터리 주요 목록 백업 저장(&S)" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "검색 및 바꾸기(&R)..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...A에서 Z까지 모두!(&Z)" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...단일 그룹 항목만(&G)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...선택한 하위 메뉴의 내용, 하위 수준 없음(&C)" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...선택한 하위 메뉴 및 모든 하위 수준의 내용(&A)" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "테스트 결과 메뉴(&G)" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "경로 조정(&P)" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "대성 경로 조정(&T)" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "기본 패널에서 추가" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "디렉터리 주요 목록에 현재 설정 적용" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "원본" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "대상" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "경로" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "경로를 추가할 때 경로를 설정하는 방법:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "다음 경로에 대해 이 작업 수행:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "상대 경로:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "지원되는 모든 형식 중에서 매번 사용할 형식 묻기" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "유니코드 텍스트를 저장할 때 UTF8 형식으로 저장 (그렇지 않으면 UTF16이 됨)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "텍스트를 삭제할 때 파일 이름을 자동으로 생성 (그렇지 않으면 사용자에게 알림이 표시됨)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "드롭 후 확인 대화 상자 표시(&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "패널에 텍스트를 끌어다 놓을 때:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "원하는 형식을 목록 맨 위에 배치 (끌어서 놓기 사용):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(가장 원하는 항목이 없는 경우, 두 번째 항목으로 변경)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(일부 원본 응용 프로그램에서는 작동하지 않으므로 문제가 있는 경우 선택 취소.)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "파일 시스템 표시(&F)" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "남은 공간 표시(&E)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "레이블 표시(&L)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "드라이브 목록" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "자동 들여쓰기" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "<Enter>로 새 줄을 만들 때 이전 줄과 같은 양의 선행 공백을 사용하여 캐럿을 들여쓰기할 수 있습니다" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "그룹 실행 취소" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "동일한 유형의 모든 연속 변경 사항은 각각 실행 취소/재실행하지 않고 한 번의 호출로 처리됩니다" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "오른쪽 여백:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "줄 끝을 지나서 캐럿" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "줄 끝 위치 너머 빈 공간으로 캐럿 이동 허용" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "특수 문자 표시" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "공백 및 표에 특수 문자 표시" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "스마트 탭" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "<Tab> 키를 사용할 경우 캐럿은 이전 줄의 공백이 아닌 다음 문자로 가기" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "탭 들여쓰기 블록" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "<Tab> 및 <Shift+Tab>이 활성 상태일 때 블록 들여쓰기 역할을 하고 텍스트를 선택하면 들여쓰기를 취소합니다" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "탭 문자 대신 공백 사용" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "탭 문자를 지정된 수의 공백 문자로 변환합니다 (입력 시)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "후행 공백 삭제" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "후행 공백 자동 삭제는 편집한 줄에만 적용됩니다" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "\"스마트 탭\" 옵션이 수행될 표보다 우선한다는 점에 유의하세요" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "내부 편집기 옵션" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "블록 들여쓰기:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "탭 너비:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "\"스마트 탭\" 옵션이 수행될 표보다 우선한다는 점에 유의하세요" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "배경(&K)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "배경(&K)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "재설정" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "저장" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "요소 속성" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "전경(&R)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "전경(&R)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "텍스트 마크(&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "전역 구성표 설정 사용 (및 편집)(&G)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "로컬 구성표 설정 사용(&L)" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "굵게(&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전(&V)" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "끄기(&F)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "켜기(&N)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "기울임꼴(&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전(&V)" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "끄기(&F)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "켜기(&N)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "취소선(&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전(&V)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "끄기(&F)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "켜기(&N)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "밑줄(&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "반전(&V)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "끄기(&F)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "켜기(&N)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "추가..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "삭제..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "가져오기/내보내기" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "삽입..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "정렬..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "없음" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "항상 트리 확장" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "아니오" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "왼쪽" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "오른쪽" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "즐겨찾기 탭 목록 (끌어서 놓기로 재정렬)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "기타 옵션" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "선택한 항목에 대해 복원할 위치:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "유지하려는 기존 탭:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "디렉터리 기록 저장:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "복원할 왼쪽에 저장된 탭:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "복원할 오른쪽에 저장된 탭:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "구분자" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "구분자 추가" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "하위 메뉴" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "하위 메뉴 추가" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "모두 접기" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...선택한 항목의 현재 수준만" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "모두 삭제!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "하위 메뉴 및 모든 요소" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "하위 메뉴만 있지만 요소는 유지" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "선택된 항목" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "선택된 항목 삭제" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "선택 항목을 레거시 .tab 파일로 내보내기" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavoriteTabsTestMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "기본 설정에 따라 legacy.tab 파일 가져오기" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "선택한 위치에서 레거시 .tab 파일 가져오기" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "선택한 위치에서 레거시 .tab 파일 가져오기" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "하위 메뉴에 있는 선택된 위치에 legacy.tab 파일 가져오기" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "구분자 삽입" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "하위 메뉴 삽입" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "모든 분기점 열기" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...A 에서 Z까지 모두!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...단일 항목 그룹만" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "단일 항목 그룹만 정렬" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...선택한 하위 메뉴의 내용, 하위 수준 없음" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...선택한 하위 메뉴 및 모든 하위 수준의 내용" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "테스트 결과 메뉴" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "추가" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "추가" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "추가(&A)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "복제(&L)" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "내부 명령 선택" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "아래로(&D)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "편집" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "삽입" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "삽입(&I)" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "제거(&V)" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "제거(&M)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "제거(&R)" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "이름 바꾸기(&E)" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "변수 알림 도우미" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "위로(&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "명령의 시작 경로입니다. 이 문자열을 인용하지 마세요." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "작업의 이름입니다. 시스템으로 전달되지 않으며, 사용자가 직접 선택한 니모닉 이름일 뿐입니다" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "명령에 전달할 매개 변수입니다. 공백이 있는 긴 파일 이름을 따옴표로 나타내야 합니다 (수동으로 입력)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "실행할 명령입니다. 이 문자열을 인용하지 마세요." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "동작 설명" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "동작" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "확장자" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "끌어서 놓기로 정렬 가능" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "파일 유형" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "아이콘" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "끌어서 놓기로 작업 정렬할 수 있습니다" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "끌어서 놓기로 확장자 정렬할 수 있습니다" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "끌어서 놓기로 파일 유형을 정렬할 수 있습니다" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "동작 이름(&N):" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "명령:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "매개변수(&S):" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "시작 경로(&H):" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "다음으로 사용자 지정..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "사용자 지정" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "편집" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "편집기에서 열기" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "다음으로 편집..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "명령에서 출력 가져오기" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "내부 편집기에서 열기" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "내부 뷰어에서 열기" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "열기" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "다음으로 열기..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "터미널에서 실행" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "보기" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "뷰어에서 열기" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "다음으로 보기..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "아이콘을 변경하려면 클릭하세요!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "현재 구성된 모든 파일 이름과 경로에 현재 설정 적용" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "기본 컨텍스트 작업 (보기/편집)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "셸을 통해 실행" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "확장된 상황에 맞는 메뉴" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "파일 연결 구성" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "아직 포함되지 않은 경우 파일 연결에 선택 항목 추가 제안" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "파일 연결에 액세스할 때 구성된 파일 유형에 아직 포함되지 않은 경우 현재 선택한 파일을 추가하겠다고 제안합니다" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "터미널을 통해 실행하고 닫기" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "터미널을 통해 실행하고 열려 있는 상태 유지" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "명령" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "아이콘" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "시작 경로" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "확장 옵션 항목:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "경로" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "아이콘, 명령 및 시작 경로에 대한 요소를 추가할 때 경로를 설정하는 방법:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "파일 및 경로에 대해 이 작업을 수행:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "상대 경로:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "다음에 대한 확인 창 표시:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "복사 작업(&Y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "삭제 작업(&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "휴지통으로 삭제 (Shift 키는 이 설정이 반전됨)(&T)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "휴지통으로 삭제(&E)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "읽기 전용 플래그 삭제(&R)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "이동 작업(&M)" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "파일/폴더로 주석 처리(&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "이름을 바꿀 때 확장자 없이 파일 이름 선택(&F)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "복사/이동 대화상자에 탭 선택 패널 표시(&W)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "파일 작업 오류를 건너뛰고 로그 창에 기록(&K)" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "압축파일 작업 테스트" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "체크섬 작업 검증" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "작업 실행" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "사용자 인터페이스" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "파일 작업을 위한 버퍼 크기 (KB)(&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "해시 계산을 위한 버퍼 크기 (KB)(&H):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "초기에 작업 진행률 표시(&I)" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "중복된 이름 자동 이름 바꾸기 스타일:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "영구 삭제 통과 횟수(&N):" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "DC 기본값으로 재설정" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "과장된 색 허용" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "프레임 커서 사용(&F)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "비활성 선택 색상 사용" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "반전 선택 사용(&S)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "커서 테두리" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "현재 경로" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "배경(&K):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "배경 2(&R):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "커서 색상(&U):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "커서 텍스트(&X):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "비활성 커서 색상:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "비활성 마크 색상:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "비활성 패널의 밝기 수준(&B):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "마크 색상(&M):" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "배경:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "텍스트 색상:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "비활성 배경:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "비활성 텍스트 색상:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "아래는 미리보기입니다. 커서를 이동하고 파일을 선택하면 다양한 설정의 실제 모양과 느낌을 바로 확인할 수 있습니다." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "텍스트 색상(&E):" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "파일 검색을 시작할 때 파일 마스크 필터 지우기" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "파일 이름의 일부 검색(&S)" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "\"파일 찾기\"에서 메뉴 표시줄 표시" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "파일에서 텍스트 검색" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "파일 검색" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "\"새 검색\" 버튼이 있는 현재 필터:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "기본 검색 템플릿:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "파일의 검색 텍스트에 메모리 매핑 사용(&X)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "파일의 검색 텍스트에 스트림 사용(&U)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "기본값(&F)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "형식 지정" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "사용할 개인화된 약어:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "정렬" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "바이트(&B):" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "대소문자 구별(&E):" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "잘못된 형식" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "날짜 및 시간 형식(&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "파일 크기 형식(&Z):" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "바닥글 형식(&F):" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "기가바이트(&G):" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "머리글 형식(&H):" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "킬로바이트(&K):" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "메가바이크(&Y):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "새 파일 삽입(&I)" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "작업 크기 형식(&P):" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "디렉터리 정렬(&R):" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "정렬 방법(&S):" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "테라바이트(&T)" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "업데이트된 파일 이동(&M)" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "추가(&A)" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "도움말(&H)" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "파일 보기의 빈 부분을 두 번 클릭할 때 상위 폴더로 변경 사용(&P)" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "탭이 활성화될 때까지 파일 목록 로드 안 함(&N)" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "디렉터리 주변에 대괄호 표시(&H)" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "새 파일 및 업데이트된 파일 강조 표시(&G)" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "이름을 두 번 클릭할 때 제자리에서 이름 바꾸기 사용(&R)" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "별도의 스레드에 파일 목록 불러오기(&F)" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "파일 목록 뒤에 아이콘 불러오기(&T)" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "시스템, 숨김 파일 표시(&Y)" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "<SPACEBAR>로 파일을 선택할 때는 다음 파일로 이동 (<INSERT>처럼)(&W)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "파일을 표시할 때 Windows 스타일 필터 (\"*.*\"는 확장자가 없는 파일도 선택 가능 등)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "매번 마스크 입력 대화 상자에서 독립 속성 필터 사용" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "항목 표시/표시 안 함" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "사용할 기본 특성 마스크 값:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "추가(&D)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "적용(&P)" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "삭제(&D)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "템플릿..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "파일 유형 색상 (끌어서 놓기로 정렬)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "범주 속성(&T):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "범주 색상(&L):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "범주 마스크(&M):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "범주 이름(&N):" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "글꼴" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "단축키 추가(&H)" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "단축키 삭제(&D)" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "단축키 편집(&E)" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "다음 범주" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "팝업을 파일 관련 메뉴로 설정" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "이전 범주" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "DC 기본값 복원" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "지금 저장" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "명령 이르별 정렬" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "단축키별로 정렬 (그룹화)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "단축별로 정렬 (행당 1개)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "필터(&F)" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "범주(&A):" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "명령(&M):" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "바로 가기 파일(&S):" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "정렬 순서(&R):" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "범주" #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "명령" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "정렬 순서" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "명령" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "단축키" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "설명" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "단축키" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "매개변수" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "제어" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "다음 경로와 그 하위 디렉터리의 경우(&P):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "메뉴에 작업 아이콘 표시(&M)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "버튼에 아이콘 표시" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "오버레이 아이콘 표시 (예: 링크)(&v)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "숨김 파일 흐리게 표시 (느림)(&D)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "특수 아이콘 사용 안 함" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " 아이콘 크기 " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "아이콘 테마" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "아이콘 표시" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr " 파일 이름 왼쪽에 아이콘 표시 " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "디스크 패널:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "파일 패널:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "모두(&L)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "모든 연결 + EXE/LNK (느림)(&E)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "아이콘 없음(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "기본 아이콘만(&S)" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "선택한 이름 추가(&D)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "전체 경로로 선택한 이름 추가(&F)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "다음 파일 및 폴더는 무시 (표시하지 않음)(&I):" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "저장 위치(&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "왼쪽, 오른쪽 화살표로 디렉터리 변경 (Lynx 같은 움직임)(&F)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "입력" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+문자(&E)" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+문자(&T)" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "문자(&L)" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "평면 버튼(&F)" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "평면 인터페이스(&N)" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "드라이브 레이블에 빈 공간 표시기 표시(&E)" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "로그 창 표시(&G)" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "작업 패널을 백그라운드로 표시" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "메뉴 표시줄에 공통 진행 상황 표시" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "명령줄 표시(&I)" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "현재 디렉터리 표시(&Y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "드라이브 버튼 표시(&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "여유 공간 레이블 표시(&P)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "드라이브 목록 버튼 표시(&T)" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "기능 키 버튼 표시(&K)" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "기본 메뉴 표시(&M)" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "도구 모음 표시(&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "짧은 여유 공간 레이블 표시(&L)" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "상태 표시줄 표시(&S)" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "탭위치 머리글 표시(&H)" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "폴더탭 표시(&W)" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "터미널 창 표시(&R)" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "두 개의 드라이브 버튼 표시줄 (고정 너비, 파일 창 위) 표시(&X)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "가운데 도구 모음 표시" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " 화면 배치 " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "로그 파일 내용 보기" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "로그 파일 이름에 날짜 포함" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "압축/압축 풀기(&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "외부 명령줄 실행" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "복사/이동/링크 만들기/심링크(&Y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "디렉터리 만들기/삭제(&T)" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "오류 로그(&E)" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "로그 파일 만들기(&R):" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "최대 로그 파일 수" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "로그 정보 메시지(&I)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "시작/종료" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "작업 성공 로그(&S)" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "파일 시스템 플러그인(&F)" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "파일 작업 로그 파일" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "로그 작업" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "작업 상태" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "더 이상 존재하지 않는 파일 썸네일 제거(&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "구성 파일 내용 보기" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "인코딩을 사용하여 새로 만들기:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "드라이브를 변경할 때는 항상 드라이브의 루트로 가기(&G)" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "기본 창 제목 표시줄에 현재 디렉터리 표시" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "시작 화면 표시(&S)" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "경고 메시지 표시 ('확인' 버튼만)(&W)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "캐시에 썸네일 저장(&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "썸네일" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "파일 주석 (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TC 내보내기/가져오기 관련:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "기본 단일 바이트 텍스트 인코딩(&D):" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "기본 인코딩:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "구성 파일:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC 실행:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "도구 모음 출력 경로:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "픽셀" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "썸네일 크기(&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "마우스로 선택(&S)" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "텍스트 커서가 더 이상 마우스 커서를 따르지 않음" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "아이콘을 클릭하여 선택(&K)" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "다음으로 열기" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "스크롤" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "선택" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "모드(&M):" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "두 번 클릭" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "한 줄씩(&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "커서 이동으로 한 줄씩(&W)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "한 페이지씩(&P)" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "한 번 클릭 (파일 및 폴더 열기)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "한 번 클릭 (폴더 열기, 파일은 두 번 클릭)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "로그 파일 내용 보기" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "일일 개별 디렉터리" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "전체 경로가 포함된 로그 파일 이름" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "맨 위에 메뉴 표시줄 표시 " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "로그 이름 바꾸기" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "잘못된 파일 이름 문자 바꾸기(&Y)" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "동일한 이름 바꾸기 로그 파일에 추가" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "사전 설정당" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "수정된 사전 설정으로 종료" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "실행 시 사전 설정" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "추가(&D)" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "구성(&F)" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "사용함(&N)" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "제거(&R)" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "조정(&T)" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "설명" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록됨" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "검색 플러그인을 사용하면 대체 검색 알고리즘이나 외부 도구 (예: \"locate\" 등)를 사용할 수 있습니다(&H)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록됨" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "현재 구성된 모든 플러그인에 현재 설정 적용" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "새 플러그인을 추가할 때 자동으로 조정 창으로 가기" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "구성:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "사용할 Lua 라이브러리 파일:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "상대 경로:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "새 플러그인을 추가할 때 플러그인 파일 이름 스타일:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "압축 플러그인은 압축파일 작업에 사용됩니다(&E)" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록됨" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "컨텐츠 플러그인을 사용하면 파일 목록에 mp3 태그 또는 이미지 속성과 같은 확장 파일 세부 정보를 표시하거나 검색 및 다중 이름 지정 도구에 사용할 수 있습니다(&G)" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "파일 시스템 플러그인을 사용하면 운영 체제에서 액세스할 수 없는 디스크나 스마트폰과 같은 외부 장치에 액세스할 수 있습니다(&L)." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "뷰어 플러그인을 사용하면 이미지, 스프레드시트, 데이터베이스 등의 파일 형식을 뷰어에서 표시할 수 있습니다 (F3, Ctrl+Q)(&W)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "활성" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "플러그인" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "등록됨" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "파일 이름" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "시작 (이름은 첫 번째 입력 문자로 시작해야 합니다)(&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "끝 (입력한 점 . 앞의 마지막 문자가 일치해야 합니다)(&D)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "옵션" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "정확한 이름 일치" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "검색 조건" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "이러한 항목 검색" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "탭 잠금 해제 시 변경된 이름 유지" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "탭 중 하나를 클릭할 때 대상 패널 활성화(&P)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "탭이 하나뿐인 경우에도 탭 머리글 표시(&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "응용 프로그램을 닫을 때 중복 탭 닫기" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "모든 탭 닫기 확인(&F)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "잠긴 탭 닫기 확인" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "탭 제목 길이 제한" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "별표 * 로 잠긴 탭 표시(&W)" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "여러 줄의 탭(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Up으로 새 탭 열기(&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "현재 탭 근처에 새 탭 열기(&N)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "가능한 경우 기존 탭 재사용" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "탭 닫기 버튼 표시(&B)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "항상 탭 제목에 드라이브 문자 표시" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "폴더 탭 머리글" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "문자" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "탭을 두 번 클릭할 때 수행할 작업:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "탭 위치(&B)" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "없음" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "아니오" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "왼쪽 화살표 키" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "오른쪽 화살표 키" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "다시 저장 후 즐겨찾기 탭 구성으로 가기" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "새 탭을 저장한 후 즐겨찾기 탭 구성으로 가기" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "즐겨찾기 탭 추가 옵션 사용 (복원 시 대상 측 선택 등)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "새 즐겨찾기 탭을 저장할 때 기본 추가 기능 설정:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "폴더 탭 머리글 추가 기능" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "탭을 복원할 때 유지할 기존 탭:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "왼쪽에 저장된 탭은 다음과 같이 복원:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "오른쪽에 저장된 탭은 다음과 같이 복원:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "즐겨찾기 탭을 사용하여 디렉터리 기록 저장:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "새 즐겨찾기 탭을 저장할 때 메뉴의 기본 위치:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "터미널에서 실행할 명령을 반영하려면 일반적으로 {command}이(가) 있어야 합니다" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "터미널에서 실행할 명령을 반영하려면 일반적으로 {command}이(가) 있어야 합니다" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "터미널만 실행하는 명령:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "터미널에서 명령을 실행하고 다음 이후에 닫기 위한 명령:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "터미널에서 명령을 실행하고 열려 있는 상태를 유지하기 위한 명령:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "명령:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "명령:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "명령:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "매개변수:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "버튼 복제(&L)" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "단축키 편집(&K)" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "새 버튼 삽입(&I)" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "선택" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "기타..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "단축키 제거(&Y)" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "제안" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "버튼 유형, 명령 및 매개 변수에 따라 DC에서 도구 설명을 제안하도록 합니다" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "평면 버튼(&F)" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "명령으로 오류 보고" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "제목 표시(&W)" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "명령 매개변수를 각각 별도의 줄에 입력합니다. 매개변수에 대한 도움말을 보려면 F1 키를 누릅니다." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "모양" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "표시줄 크기(&B):" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "명령(&D):" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "매개변수(&S):" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "도움말" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "단축키:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "아이콘(&N):" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "아이콘 크기(&Z):" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "명령(&M):" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "매개변수(&P):" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "시작 경로(&H):" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "스타일:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "도구 설명(&T):" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "모든 DC 명령이 포함된 도구 모음 추가" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "외부 명령" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "내부 명령" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "구분자" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "하위 도구 모음" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "백업..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "내보내기..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "현재 도구 모음..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "도구 모음 파일 (.toolbar)로" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "TC의 .BAR 파일로 (기존 유지)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "TC의 .BAR 파일로 (기존 지우기)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC의 \"wincmd.ini\"로 (기존 유지)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC의 \"wincmd.ini\"로 (기존 지우기)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "상단 도구 모음..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "도구 모음의 백업 저장" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "도구 모음 파일 (.toolbar)로" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC의 .BAR 파일로 (기존 유지)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC의 .BAR 파일로 (기존 지우기)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC의 \"wincmd.ini\"로 (기존 유지)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC의 \"wincmd.ini\"로 (기존 지우기)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫 번째 요소로" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "현재 선택 바로 앞" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "가져오기..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "도구 모음의 백업 복원" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "새 도구 모음을 현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "상단 도구 모음에 새 도구 모음을 추가" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "상단 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "상단 도구 모음 바꾸기" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "도구 모음 파일 (.toolbar)에서" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "새 도구 모음을 현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "상단 도구 모음에 새 도구 모음을 추가" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "상단 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "상단 도구 모음 바꾸기" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "단일 TC.BAR 파일에서" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "새 도구 모음을 현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "상단 도구 모음에 새 도구 모음을 추가" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "상단 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "상단 도구 모음 바꾸기" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC의 \"wincmd.ini\"에서..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "새 도구 모음을 현재 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "상단 도구 모음에 새 도구 모음을 추가" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "상단 도구 모음에 추가" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "상단 도구 모음 바꾸기" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫 번째 요소로" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "현재 선택 바로 앞" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "검색 및 바꾸기..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "첫 번째 요소로" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "마지막 요소로" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "현재 선택 바로 앞" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "위의 모든 것에서..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "모든 명령에서..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "모든 아이콘 이름에서..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "모든 매개변수에서..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "모든 시작 경로에서..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "첫 번째 요소로" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "마지막 요소로" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "현재 선택 바로 뒤" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "구분자" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "공백" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "버튼 유형" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "구성된 모든 파일 이름 및 경로에 현재 설정 적용" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "명령" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "아이콘" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "시작 경로" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "경로" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "파일 및 경로에 대해 다음 작업 수행:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "상대 경로:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "아이콘, 명령 및 시작 경로에 대한 요소를 추가할 때 경로를 설정하는 방법:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "프로그램 실행 후 터미널 창을 열어두기(&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "터미널에서 실행(&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "외부 프로그램 사용(&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "추가 매개 변수(&D)" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "실행할 프로그램 경로(&P)" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "추가(&D)" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "적용(&P)" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "복사(&Y)" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "삭제" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "템플릿..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "이름 바꾸기(&R)" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "기타(&E)..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "선택한 파일 유형에 대한 도구 설명 구성:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "도구 설명에 대한 일반 옵션:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "파일 패널에 파일에 대한 도구 설명 표시(&S)" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "범주 힌트(&H):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "범주 마스크(&M):" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "도구 설명 숨김 지연:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "도구 설명 표시 모드:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "파일 유형(&F):" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "수정사항 폐기" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "내보내기..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "가져오기..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "도구 설명 파일 유형 정렬" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "파일 패널 위에 있는 막대를 두 번 클릭하면" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "메뉴 및 내부 명령 사용" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "트리 선택 후 종료 시 두 번 클릭" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "메뉴 및 내부 명령 사용" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "탭을 두 번 클릭 (구성된 경우)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "키보드 단축키를 사용하면 현재 선택 항목을 반환하는 창을 종료" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "마우스 클릭 한 번으로 트리 선택 후 종료" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "명령줄 기록에 사용" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "디렉터리 기록에 사용" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "보기 기록 (활성 보기의 방문 경로)에 사용" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "선택과 관련된 동작:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "트리 보기 메뉴 관련 옵션:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "트리 보기 메뉴 사용 위치:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*참고: 대소문자 구분, 억양 무시 또는 무시와 같은 옵션과 관련하여, 이러한 옵션은 사용 및 세션에서 다른 컨텍스트마다 개별적으로 저장 및 복원됩니다." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "디렉터리 주요 목록 사용:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "즐겨찾기 탭 포함:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "기록:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "항목 선택을 위한 키보드 바로 가기 사용 및 표시" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "글꼴" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "레이아웃 및 색상 옵션:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "배경 색상:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "커서 색상:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "찾은 텍스트 색상:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "커서 아래 찾은 텍스트:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "일반 텍스트 색상:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "커서 아래 일반 텍스트:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "트리 보기 메뉴 미리보기:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "보조 텍스트 색상:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "커서 아래 보조 텍스트:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "바로 가기 색상:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "커서 아래 바로 가기:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "선택할 수 없는 텍스트 색상:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "커서 아래 선택할 수 없는 텍스트:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "왼쪽의 색상을 변경하면 이 샘플을 사용하여 트리 보기 메뉴가 어떻게 표시되는지 미리 볼 수 있습니다." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "내부 뷰어 옵션" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "책 뷰어에서 열의 수(&N)" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "구성(&F)" #: tfrmpackdlg.caption msgid "Pack files" msgstr "파일 압축" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "선택한 파일/디렉터리당 하나씩 별도의 압축파일 만들기(&R)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "자동 추출 압축파일 만들기(&X)" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "암호화(&Y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "압축파일로 이동(&V)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "다중 디스크 압축파일(&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "먼저 TAR 압축파일에 넣기(&U)" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "경로 이름도 압축 (재귀적으로만)(&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "파일에 파일 압축:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "압축기" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "모두 압축을 풀고 실행(&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "압축을 풀고 실행(&U)" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "압축 파일의 속성" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "속성:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "압축율:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "날짜:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "방법:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "원본 크기:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "파일:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "압축 크기:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "압축기:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "시간:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "인쇄 구성" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "여백 (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "하단(&B):" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "왼쪽(&L):" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "오른쪽(&R):" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "상단(&T):" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "필터 패널 닫기" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "검색 또는 필터링할 텍스트 입력" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "대소문자 구분" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "디렉터리" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "파일" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "일치 시작" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "일치 끝" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "필터" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "검색 또는 필터 간 전환" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "더 많은 규칙(&M)" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "더 적은 규칙(&E)" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "콘텐츠 플러그인을 사용하여 다음과 결합(&C):" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "플러그인" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "필드" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "연산자" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "값" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "AND (모두 일치) (&A)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "OR (하나라도 일치) (&O)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "적용(&A)" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "템플릿..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "템플릿..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "중복 파일 선택" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "각 그룹에서 하나 이상의 파일을 선택하지 않은 상태로 두기(&L):" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "이름/확장자로 선택 항목 제거(&R):" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "이름/확장자로로 선택(&N):" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "구분자(&A)" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "다음에서 카운트" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "결과:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "삽입할 디렉터리 선택 (둘 이상 선택 가능)(&S)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "끝(&D)" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "시작(&R)" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "첫 번째부터 계산" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "마지막부터 계산" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "범위 설명" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "결과:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "삽입할 문자를 선택(&S)" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[첫 번째:마지막(&F)]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[첫 번째,길이(&L)]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "끝(&D)" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "시작(&R)" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "끝(&E)" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "시작(&T)" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "속성 변경" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "스티커" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "보관" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "생성 날짜:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "숨김" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "엑세스 날짜:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "수정 날짜:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "읽기 전용" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "하위 폴더 포함" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "시스템" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "타임스탬프 속성" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "속성" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "속성" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "비트:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "그룹" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(회색 필드는 변경되지 않은 값을 의미)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "기타" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "텍스트:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "실행" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(회색 필드는 변경되지 않은 값을 의미)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8진수:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "읽기" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "정렬(&S)" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "취소(&C)" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "요소를 끌어서 놓기로 정렬" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmsplitter.caption msgid "Splitter" msgstr "분할기" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "CRC32 검증 파일 필요" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "부분의 크기 및 개수" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "파일을 디렉터리로 분할:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "부분 갯수(&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "바이트(&B)" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "기가바이트(&G)" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "킬로바이트(&K)" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "메가바이트(&M)" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "빌드" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "커밋" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "운영 체제" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "플랫폼" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "리비전" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "버전" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "심볼 링크 만들기" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "가능한 경우 상대 경로 사용(&R)" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "링크가 가리키는 대상(&D)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "링크 이름(&L)" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "양쪽 모두 삭제" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- 왼쪽 삭제" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> 오른쪽 삭제" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "선택 제거" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "복사할 경우 선택 (기본 방향)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "복사할 경우 선택 -> (왼쪽에서 오른쪽)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "역 복사 방향" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "복사할 경우 선택 <-> (오른쪽에서 왼쪽)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "삭제할 경우 선택 <-> (둘 다)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "삭제할 경우 선택 <- (왼쪽)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "삭제할 경우 선택 -> (오른쪽)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "닫기" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "비교" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "템플릿..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "동기화" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "디렉터리 동기화" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "비대칭" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "내용별" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "날짜 무시" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "선택된 것만" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "하위 디렉터리" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "표시:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "이름" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "크기" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "날짜" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "날짜" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "크기" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "이름" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(기본 창에서)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "비교" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "왼쪽 보기" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "오른쪽 보기" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "중복" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "단일" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "시작하려면 \"비교\"를 누르세요" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "동기화" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "덮어쓰기 확인" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "트리 보기 메뉴" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "주요 디렉터리 선택:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "검색은 대소문자 구분" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "전체 접기" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "전체 확장" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "억양 및 연결을 무시하는 검색" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "검색은 대소문자를 구분하지 않음" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "억양 및 합자에 대한 검색은 엄격함" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "검색된 문자열이 분기 이름에 있으므로 분기 내용을 \"그냥\" 표시하지 않음" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "검색된 문자열이 분기 이름에서 발견되면 요소가 일치하지 않더라도 분기 전체를 표시" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "트리 보기 메뉴 닫기" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "트리 보기 메뉴 구성" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "트리 보기 메뉴 색상 구성" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "새로 추가(&D)" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "변경(&H)" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "기본값(&F)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "적절한 경로를 선택하기 위한 몇 가지 기능" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "제거(&R)" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "플러그인 조정" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "내용별로 압축파일 유형 감지(&T)" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "파일 삭제 가능(&L)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "암호화 지원(&N)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "일반 파일로 표시 (압축파일 아이콘 감추기)(&W)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "메모리에서 압축 지원(&K)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "기존 압축파일 수정 가능(&M)" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "압축파일에 여러 파일을 포함할 수 있음(&A)" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "새 압축파일 만들기 가능(&V)" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "옵션 대화상자 지원(&U)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "압축파일에서 텍스트 검색 허용(&G)" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "설명(&D):" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "문자열 감지(&E):" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "확장자(&E):" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "플래그:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "이름(&N):" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "플러그인(&P):" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "플러그인(&P):" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "뷰어 정보..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "정보 메시지 표시" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "자동 다시 불러오기" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "인코딩 변경" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "파일 복사" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "파일 복사" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "클립보드로 복사" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "형식이 지정된 클립보드에 복사" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "파일 삭제" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "파일 삭제" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "찾기" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "다음 찾기" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "이전 찾기" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "전체 화면" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "줄로 가기..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "줄로 가기" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "가운데" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "다음(&N)" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "다음 파일 불러오기" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "이전(&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "이전 파일 불러오기" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "가로로 반전" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "반전" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "세로로 반전" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "파일 이동" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "파일 이동" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "미리보기" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "인쇄(&R)..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "인쇄 설정(&S)" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "다시 불러오기" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "현재 파일 다시 불러오기" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "180도 회전" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "-90도 회전" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "+90도 회전" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "저장" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "다음으로 저장..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "파일로 저장..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "스크린샷" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "3초 지연" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "5초 지연" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "모두 선택" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "바이너리로 표시(&B)" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "책으로 표시(&o)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "10진수로 표시(&D)" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "16진수로 표시(&H)" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "텍스트로 표시(&T)" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "줄 바꿈 텍스트로 표시(&W)" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "텍스트 커서 표시(&U)" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "코드" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "그래픽" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (텍스트 전용)" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "플러그인" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "투명도 표시(&Y)" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "늘이기" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "이미지 늘이기" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "크게만 늘이기" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "실행 취소" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "실행 취소" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "텍스트 줄 바꿈(&W)" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "확대/축소" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "확대" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "확대" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "축소" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "축소" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "자르기" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "전체 화면" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "프레임 내보내기" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "강조" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "다음 프레임" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "색칠" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "이전 프레임" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "적목 현상" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "크기 변경" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "슬라이드쇼" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "뷰어" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "제품 정보" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "타원" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "인코딩(&C)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "파일(&F)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "이미지(&I)" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "펜" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "직사각형" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "회전" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "스크린샷" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "보기(&V)" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "시작(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "중지(&T)" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "파일 작업" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "항상 맨 위에" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "\"끌어서 놓기\"를 사용하여 대기열 간에 작업 이동(&U)" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "취소" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "취소" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "새 대기열" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "분리창에 표시" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "대기열에 첫 번째 놓기" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "대기열에 마지막 넣기" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "대기열" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "대기열에서 벗어남" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "대기열 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "대기열 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "대기열 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "대기열 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "대기열 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "분리창에 표시" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "모두 일시 중지(&P)" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "링크 따라가기(&L)" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "디렉터리가 존재하는 경우(&E)" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "파일이 존재하는 경우" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "파일이 존재하는 경우" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "취소(&C)" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "확인(&O)" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "명령줄:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "매개변수:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "시작 경로:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "구성(&F)" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "암호화(&Y)" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "파일이 존재하는 경우" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "날짜/시간 복사(&A)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "백그라운드에서 작업 (별도 연결)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "파일이 존재하는 경우" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "관리자 권한을 제공해야 합니다" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "이 개체를 복사하려면:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "이 개체를 만들려면:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "이 개체를 삭제하려면:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "이 개체의 속성을 가져오려면:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "이 하드 링크를 만들려면:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "이 개체를 열려면:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "이 개체의 이름을 변경하려면:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "이 개체의 속성을 설정하려면:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "이 기호 링크를 만들려면:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "찍은 날짜" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "높이" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "너비" #: uexifreader.rsmake msgid "Manufacturer" msgstr "제조업체" #: uexifreader.rsmodel msgid "Camera model" msgstr "카메라 모델" #: uexifreader.rsorientation msgid "Orientation" msgstr "방향" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "이 파일을 찾을 수 없으며 최종 파일 조합의 유효성을 검사하는 데 도움이 될 수 있습니다:\n" "%s\n" "\n" "가능하게 해주시고 준비되면 \"확인\"를 눌러주시고,\n" "아니면 \"취소\"를 눌러 계속하시겠습니까?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<디렉터리>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<링크>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "빠른 필터 취소" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "현재 작업 취소" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "삭제된 텍스트에 대한 파일 이름 입력 (확장자 포함)" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "가져올 텍스트 형식" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "깨짐:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "일반:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "누락:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "읽기 오류:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "성공:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "체크섬을 입력하고 알고리즘 선택:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "체크섬 검증" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "전체:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "이 새 검색을 위해 필터를 지우시겠습니까?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "클립보드에 유효한 도구 모음 데이터가 없습니다." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "전체;활성 패널;왼쪽 패널;오른쪽 패널;파일 작업;구성;네트워크;기타 사항;병렬 포트;인쇄;마크;보안;클립보드;FTP;탐색;도움말;창;명령줄;도구;보기;사용자;탭;정렬;로그" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "레거시 정렬, A-Z 정렬" #: ulng.rscolattr msgid "Attr" msgstr "속성" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "날짜" #: ulng.rscolext msgid "Ext" msgstr "확장자" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "이름" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "크기" #: ulng.rsconfcolalign msgid "Align" msgstr "정렬" #: ulng.rsconfcolcaption msgid "Caption" msgstr "제목" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "삭제" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "필드 내용" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "이동" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "너비" #: ulng.rsconfcustheader msgid "Customize column" msgstr "사용자 지정 열" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "파일 연결 구성" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "명령줄 및 매개변수 확인" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "복사 (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "어두운 모드" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "자동;사용함;사용 안 함" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "가져온 DC 도구 모음" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "가져온 TC 도구 모음" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " 추가: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "비교..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " 삭제: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "두 파일은 동일합니다!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " 일치: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " 수정: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "인코딩" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "줄 끝" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "텍스트는 동일하지만 다음 옵션이 사용됩니다:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "텍스트는 동일하지만 파일이 일치하지 않습니다!\n" "다음과 같은 차이점이 발견되었습니다:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "중단(&O)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "모두(&L)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "추가하기(&P)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "원본 파일 이름 자동 바꾸기(&U)" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "대상 파일의 자동 이름 바꾸기(&G)" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "취소(&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "내용별 비교(&B)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "계속(&C)" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "병합(&M)" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "모두 병합(&G)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "프로그램 종료(&X)" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "무시(&N)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "모두 무시(&G)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "아니오(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "없음(&E)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "확인(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "기타(&H)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "덮어쓰기(&O)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "모두 덮어쓰기(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "큰 것 모두 덮어쓰기(&L)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "오래된 것 덮어쓰기(&D)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "작은 것 모두 덮어쓰기(&M)" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "이름 바꾸기(&E)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "재개(&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "재시도(&T)" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "관리자로(&M)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "건너뛰기(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "모두 건너뛰기(&K)" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "잠금 해제(&U)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "예(&Y)" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "파일 복사" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "파일 이동" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "일시 중지(&S)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "시작(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "대기열" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "속도 %s/초" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "속도 %s/초, 남은 시간 %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "리치 텍스트 형식;HTML 형식;유니코드 형식;간단한 텍스트 형식" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "드라이브 여유 공간 표시기" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<레이블 없음>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<미디어 없음>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander의 내부 편집기입니다." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "줄로 이동:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "줄로 가기" #: ulng.rseditnewfile msgid "new.txt" msgstr "새로 만들기.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "파일 이름:" #: ulng.rseditnewopen msgid "Open file" msgstr "파일 열기" #: ulng.rseditsearchback msgid "&Backward" msgstr "뒤로(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "검색" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "앞으로(&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "바꾸기" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "외부 편집기로" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "내부 편집기로" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "셸을 통해 실행" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "터미널을 통해 실행하고 닫기" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "터미널을 통해 실행하고 열려 있는 상태 유지" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\"가 %s 행에 없습니다" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "\"%s\" 명령 이전에 정의된 확장자가 없습니다. 무시됩니다." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "왼쪽;오른쪽;활성;비활성;양쪽;없음" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "아니오;예" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exported_from_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "묻기; 덮어쓰기; 건너뛰기" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "묻기;병합;건너뛰기" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "묻기;덮어쓰기;오래된 것 덮어쓰기;건너뛰기" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "묻기;더 이상 설정하지 않음;오류 무시" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "모든 파일" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "압축기 구성 파일" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC 도구 설명 파일" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "디렉터리 주요 목록 파일" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "실행 파일" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini 구성 파일" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "레거시 DC .tab 파일" #: ulng.rsfilterlibraries msgid "Library files" msgstr "라이브러리 파일" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "플러그인 파일" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "프로그램 및 라이브러리" #: ulng.rsfilterstatus msgid "FILTER" msgstr "필터" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC 도구 모음 파일" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC 도구 모음 파일" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml 구성 파일" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "템플릿 정의" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s 수준" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "모두 (무제한 깊이)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "현재 디렉터리만" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "%s 디렉터리가 존재하지 않습니다!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "찾음: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "검색 템플릿 저장" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "템플릿 이름:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "검색: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "검색" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "파일 찾기" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "검색 시간: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "시작점" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "콘솔 글꼴(&C)" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "편집기 글꼴(&E)" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "기능 버튼 글꼴" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "로그 글꼴(&L)" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "기본 글꼴(&F)" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "경로 글꼴" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "검색 결과 글꼴" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "상태 표시줄 글꼴" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "트리 보기 메뉴 글꼴" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "뷰어 글꼴(&V)" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "책 뷰어 글꼴(&B)" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s / %s 남음" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s 남음" #: ulng.rsfuncatime msgid "Access date/time" msgstr "엑세스 날짜/시간" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "속성" #: ulng.rsfunccomment msgid "Comment" msgstr "주석" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "압축된 크기" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "날짜/시간 생성" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "확장자" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "그룹" #: ulng.rsfunchtime msgid "Change date/time" msgstr "날짜/시간 변경" #: ulng.rsfunclinkto msgid "Link to" msgstr "링크" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "수정한 날짜/시간" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "이르" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "확장자 없는 이름" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "소유자" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "경로" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "크기" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "원본 경로" #: ulng.rsfunctype msgid "Type" msgstr "유형" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "하드 링크 만들기 오류입니다." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "없음;파일, a-z;파일, z-a;확장자, a-z;확장자, z-a;크기 9-0;크기 0-9;날짜 9-0;날짜 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "경고! .hotlist 백업 파일을 복원할 때 가져온 파일로 대체할 기존 목록이 지워집니다.\n" "\n" "계속하시겠습니까?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "복사/이동 대화상자" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "차이" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "주석 대화상자 편집" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "편집기" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "파일 찾기" #: ulng.rshotkeycategorymain msgid "Main" msgstr "기본" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "다중 이름 바꾸기 도구" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "디렉터리 동기화" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "뷰어" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "해당 이름을 가진 설정이 이미 있습니다.\n" "덮어쓰시겠습니까?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "기본값을 복원하시겠습니까?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "\"%s\" 설정을 지우시겠습니까?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "%s의 사본" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "새 이름 입력" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "하나 이상의 바로 가기 파일을 유지해야 합니다." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "새 이름" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" 설정이 수정되었습니다.\n" "지금 저장하시겠습니까?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "\"ENTER\"로 바로 가기 없음" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "명령 이름별;바로 가기 키별 (그룹화);바로 가기 키별 (행당 1개)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "기본 막대 파일에 대한 참조를 찾을 수 없습니다" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "\"파일 찾기\" 창 목록" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "마스크 선택 취소" #: ulng.rsmarkplus msgid "Select mask" msgstr "마스크 선택" #: ulng.rsmaskinput msgid "Input mask:" msgstr "입력 마스크:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "해당 이름의 열 보기가 이미 존재합니다." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "현재 편집 열 보기를 변경하려면 현재 편집 열 보기를 저장, 복사 또는 삭제합니다" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "사용자 지정 열 구성" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "새 사용자 지정 열 이름 입력" #: ulng.rsmenumacosservices msgid "Services" msgstr "서비스" #: ulng.rsmenumacosshare msgid "Share..." msgstr "공유..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "동작" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<기본값>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "8진수" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "바로 가기 만들기..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "네트워크 드라이브 연결 끊기..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "편집" #: ulng.rsmnueject msgid "Eject" msgstr "꺼내기" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "여기에 추출..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "네트워크 드라이브 맵..." #: ulng.rsmnumount msgid "Mount" msgstr "마운트" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "새로 만들기" #: ulng.rsmnunomedia msgid "No media available" msgstr "사용 가능한 미디어 없음" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "열기" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "다음으로 열기" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "기타..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "여기에 압축..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "복원" #: ulng.rsmnusortby msgid "Sort by" msgstr "정렬 기준" #: ulng.rsmnuumount msgid "Unmount" msgstr "마운트 해제" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "보기" #: ulng.rsmsgaccount msgid "Account:" msgstr "계정:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "모든 Double Commander 내부 명령 이름; 기준" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "설명: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "압축기 명령줄에 대한 추가 매개변수:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "따옴표로 묶으시겠습니까?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "결과 파일에 대한 잘못된 CRC32:\n" "\"%s\"\n" "\n" "결과적으로 손상된 파일을 유지하시겠습니까?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "이 작업을 취소하시겠습니까?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "\"%s\" 파일을 자신에게 복사/이동할 수 없습니다!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "특수 파일 %s을(를) 복사할 수 없습니다" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "%s 디렉터리를 삭제할 수 없습니다" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "디렉터리 \"%s\"를 디렉터리가 아닌 \"%s\"로 덮어쓸 수 없습니다" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "현재 디렉터리를 \"%s\"(으)로 변경하지 못했습니다!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "비활성 탭을 모두 제거하시겠습니까?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "이 탭 (%s)이(가) 잠겼습니다! 어쨌든 닫으시겠습니까?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "매개변수의 확인" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "명령을 찾을 수 없습니다! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "정말 그만두시겠습니까?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "%s 파일이 변경되었습니다. 뒤로 복사하시겠습니까?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "뒤로 복사할 수 없습니다. 변경된 파일을 유지하시겠습니까?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "선택한 파일/디렉터리 %d을(를) 복사하시겠습니까?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "선택한 \"%s\"를 복사하시겠습니까?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< 새 파일 형식 \"%s 파일\" 만들기\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "DC 도구 모음 파일을 저장할 위치 및 파일 이름 입력" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "사용자 지정 동작" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "부분적으로 복사한 파일을 삭제하시겠습니까?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "선택한 파일/디렉터리 %d을(를) 삭제하시겠습니까?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "선택한 파일/디렉터리 %d을(를) 휴지통에 삭제하시겠습니까?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "선택한 \"%s\"를 삭제하시겠습니까?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "선택한 \"%s\"를 휴지통에 삭제하시겠습니까?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\"을(를) 휴지통에 삭제할 수 없습니다! 직접 삭제하시겠습니까?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "디스크를 사용할 수 없습니다" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "사용자 지정 작업 이름 입력:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "파일 확장자 입력:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "이름 입력:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "확장자 \"%s\"로 만들 새 파일 유형의 이름을 입력합니다." #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "압축 데이터에 CRC 오류" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "데이터 불량" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "서버에 연결할 수 없습니다: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "파일 %s를 %s로 복사할 수 없습니다" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "%s 디렉터리를 이동할 수 없습니다" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "%s 파일을 이동할 수 없습니다" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "\"%s\"이라는 이름의 디렉터리가 이미 있습니다." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "%s 날짜는 지원되지 않습니다" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "%s 디렉터리가 있습니다!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "사용자에 의해 기능이 중단됨" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "파일 닫기 오류입니다" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "파일을 만들 수 없습니다" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "압축파일에 파일이 더 이상 없습니다" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "기존 파일을 열 수 없습니다" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "파일에서 읽기 오류" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "파일에 쓰기 오류" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "%s 디렉터리를 만들 수 없습니다!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "잘못된 링크" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "파일을 찾을 수 없습니다" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "메모리가 부족합니다" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "기능이 지원되지 않습니다!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "상황에 맞는 메뉴 명령 오류" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "구성 로드 시 오류 발생" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "정규식에 구문 오류가 있습니다!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "%s 파일의 이름을 %s로 바꿀 수 없음" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "연결을 저장할 수 없습니다!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "파일을 저장할 수 없습니다" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "\"%s\"에 대한 속성을 설정할 수 없습니다" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "\"%s\"에 대한 날짜/시간을 설정할 수 없습니다" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "\"%s\"에 대한 소유자/그룹을 설정할 수 없습니다" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "\"%s\"에 대한 사용 권한을 설정할 수 없습니다" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "\"%s\"에 대한 확장 속성을 설정할 수 없습니다" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "버퍼가 너무 작습니다" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "압축할 파일이 너무 많습니다" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "압축파일 형식을 알 수 없습니다" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "실행 파일: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "종료 상태:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "즐겨찾기 탭의 모든 항목을 제거하시겠습니까? (이 작업에는 '실행 취소'가 없습니다!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "다른 항목 여기로 끌어오기" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "이 새 즐겨찾기 탭 항목의 이름 입력:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "새 즐겨찾기 탭 목록 저장" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "성공적으로 내보낸 즐겨찾기 탭 수: %d / %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "새 즐겨찾기 탭에 대한 디렉터리 기록 저장에 대한 기본 추가 설정:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "성공적으로 가져온 파일 수: %d / %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "가져온 레거시 탭" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "가져올 .tab 파일을 선택합니다 (한 번에 둘 이상일 수 있습니다!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "마지막 즐겨찾기 탭 수정이 저장되었습니다. 계속하기 전에 저장하시겠습니까?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "즐겨찾기 탭을 사용하여 디렉터리 기록 저장:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "하위 메뉴 이름" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "즐겨찾기 탭이 로드됩니다: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "기존 즐겨찾기 탭 항목보다 현재 탭 저장" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "%s 파일이 변경되었습니다. 저장하시겠습니까?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s 바이트, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "덮어쓰기:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "%s 파일이 있습니다. 덮어쓰시겠습니까?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "원본 파일:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "\"%s\" 파일을 찾을 수 없습니다." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "파일 작업 활성화" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "일부 파일 작업이 아직 완료되지 않았습니다. Double Command를 닫으면 데이터가 손실될 수 있습니다." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "대상 이름 길이 (%d)가 %d자를 초과합니다!\n" "%s\n" "대부분의 프로그램은 이렇게 긴 이름을 가진 파일/디렉터리에 액세스할 수 없습니다!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "%s 파일이 읽기 전용/숨김/시스템으로 표시됩니다. 삭제하시겠습니까?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "현재 파일을 다시 불러오고 변경 내용을 삭제하시겠습니까?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "\"%s\" 파일 크기가 대상 파일 시스템에 너무 큽니다!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "%s 폴더가 있습니다. 병합하시겠습니까?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "\"%s\" 심링크를 따르시겠습니까?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "가져올 텍스트 형식 선택" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "%d 선택된 디렉터리 추가" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "선택한 디렉터리 추가: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "현재 디렉터리 추가: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "명령 실행" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "디렉터리 주요 목록 구성" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "디렉터리 주요 목록의 모든 항목을 제거하시겠습니까? (이 작업에는 \"실행 취소\"가 없습니다!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "그러면 다음 명령이 실행됩니다:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "이것은 주요 디렉터리 이름입니다 " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "이렇게 하면 활성 프레임이 다음 경로로 변경됩니다:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "비활성 프레임은 다음 경로로 변경됩니다:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "항목 백업 중 오류 발생..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "항목을 내보내는 중 오류 발생..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "모두 내보내기!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "디렉터리 주요 목록 내보내기 - 내보낼 항목 선택" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "선택한 항목 내보내기" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "모두 가져오기!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "디렉터리 주요 목록 가져오기 - 가져올 항목 선택" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "선택한 가져오기" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "경로(&P):" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "가져올 \".hotlist\" 파일 찾기" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "주요 디렉터리 이름" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "새 항목 수: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "내보낼 항목이 선택되지 않았습니다!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "주요 디렉터리 경로" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "선택한 디렉터리 다시 추가: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "현재 디렉터리 다시 추가: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "복원할 디렉터리 주요 목록의 위치 및 파일 이름 입력" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "명령:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(하위 메뉴의 끝)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "메뉴 이름(&N):" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "이름(&N):" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(구분자)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "하위 메뉴 이름" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "주요 디렉터리 대상" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "디렉터리 변경 후 활성 프레임을 지정된 순서로 정렬할지 여부 결정" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "디렉터리 변경 후 활성화되지 않은 프레임을 지정된 순서로 정렬할지 여부 결정" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "상대 경로, 절대 경로, Windows 특수 폴더 등 적절한 경로를 선택하는 일부 기능" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "저장된 전체 항목: %d\n" "\n" "백업 파일 이름: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "내보낸 전체 항목: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "하위 메뉴 [%s]의 모든 요소를 삭제하시겠습니까?\n" "아니오로 응답하면 메뉴 구분 기호만 삭제되지만 요소는 하위 메뉴 내에 유지됩니다." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "디렉터리 주요 목록 파일을 저장할 위치 및 파일 이름 입력" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "파일에 대한 잘못된 결과 파일 길이: \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "다음 디스크 또는 이와 유사한 것을 삽입하세요.\n" "\n" "이 파일 쓰기를 허용하기 위한 것입니다:\n" "\"%s\"\n" "\n" "아직 쓸 바이트 수: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "명령줄 오류" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "잘못된 파일 이름" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "잘못된 구성 파일 형식" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "잘못된 16진수: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "잘못된 경로" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "%s 경로에 금지된 문자가 있습니다." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "유효한 플러그인이 아닙니다!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "이 플러그인은 %s.%s용 Double Commander용으로 제작되었습니다. %s용 Double Commander에서는 작동할 수 없습니다!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "잘못된 인용" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "잘못된 선택입니다." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "파일 목록을 불러오는 중..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Locate TC 구성 파일 (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Locate TC 실행 파일 (totalcmd.exe 또는 totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "%s 파일 복사" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "%s 파일 삭제" #: ulng.rsmsglogerror msgid "Error: " msgstr "오류: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "외부 실행" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "외부 결과" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "%s 파일 추출" #: ulng.rsmsgloginfo msgid "Info: " msgstr "정보: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "%s 링크 생성" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "%s 디렉터리 만들기" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "%s 파일 이동" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "%s 파일로 압축" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "프로그램 종료" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "프로그램 시작" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "%s 디렉터리 제거" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "완료: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "%s 심링크 만들기" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "%s 파일 무결성 테스트" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "%s 파일 영구 삭제" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "%s 폴더 영구 삭제" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "마스터 암호" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "마스터 암호를 입력하세요:" #: ulng.rsmsgnewfile msgid "New file" msgstr "새 파일" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "다음 볼륨의 압축이 풀립니다" #: ulng.rsmsgnofiles msgid "No files" msgstr "파일 없음" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "선택한 파일이 없습니다." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "대상 드라이브에 여유 공간이 부족합니다. 계속하시겠습니까?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "대상 드라이브에 여유 공간이 부족합니다. 다시 시도하시겠습니까?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "%s 파일을 삭제할 수 없습니다" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "구현되지 않았습니다." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "개체가 존재하지 않습니다!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "파일이 다른 프로그램에 열려 있으므로 작업을 완료할 수 없습니다:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "아래는 미리보기입니다. 커서를 이동하고 파일을 선택하면 다양한 설정의 실제 모양과 느낌을 바로 확인할 수 있습니다." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "암호:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "암호가 다릅니다!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "암호를 입력하세요:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "암호 (방화벽):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "검증을 위해 암호를 다시 입력하세요:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "%s 삭제(&D)" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "사전 설정된 \"%s\"가 이미 있습니다. 덮어쓰시겠습니까?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "사전 설정된 \"%s\"를 삭제하시겠습니까?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "명령 실행 중 문제 발생 (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "삭제된 텍스트의 파일 이름:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "이 파일을 사용할 수 있도록 설정하십시오. 다시 시도하시겠습니까?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "즐겨찾기 탭의 새 이름 입력" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "이 메뉴의 새 이름 입력" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "%d 선택한 파일/디렉터리의 이름을 바꾸거나 이동하시겠습니까?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "선택한 \"%s\"의 이름을 바꾸거나 이동하시겠습니까?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "이 텍스트를 바꾸시겠습니까?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "변경 사항을 적용하려면 Double Commander를 다시 시작하세요" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "오류: Lua 라이브러리 파일 \"%s\"를 로드하는 동안 문제 발생" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "확장자 \"%s\"를 추가할 파일 유형을 선택합니다" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "선택: %s/%s, 파일: %d/%d, 폴더: %d/%d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "실행할 파일 선택" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "체크섬 파일만 선택하세요!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "다음 볼륨의 위치를 선택하세요" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "볼륨 레이블 설정" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "특수 디렉터리" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "활성 프레임에서 경로 추가" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "비활성 프레임에서 경로 추가" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "선택한 경로 찾아보기 및 사용" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "환경 변수 사용..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Double Commander 특수 경로로 가기..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "환경 변수로 가기..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "다른 Windows 특수 폴더로 가기..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Windows 특수 폴더 (TC)로 가기..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "주요 디렉터리 경로를 상대 경로로 만들기" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "절대 경로 만들기" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Double Commander 특수 경로에 상대 경로 만들기..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "환경 변수를 기준으로 만들기..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Windows 특수 폴더 (TC)를 기준으로 만들기..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "다른 Windows 특수 폴더와 비교하여 만들기..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Double Commander 특수 경로 사용..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "주요 디렉터리 경로 사용" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "다른 Windows 특수 폴더 사용..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windows 특수 폴더 (TC) 사용..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "이 탭 (%s)이 잠겨 있습니다! 다른 탭에서 디렉터리를 여시겠습니까?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "탭 이름 바꾸기" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "새 탭 이름:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "지정할 경로:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "오류! TC 구성 파일을 찾을 수 없습니다:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "오류! TC 구성 실행 파일을 찾을 수 없습니다:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "오류! TC는 아직 실행 중이지만 이 작업을 위해 닫아야 합니다.\n" "닫고 확인를 누르거나 취소를 눌러 중단합니다." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "오류! 원하는 TC 도구 모음 출력 폴더를 찾을 수 없습니다:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "TC 도구모음 파일을 저장할 위치와 파일 이름 입력" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "내장 터미널 창이 비활성화되었습니다. 활성화하시겠습니까?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "경고: 프로세스를 종료하면 데이터 손실 및 시스템 불안정을 포함한 원하지 않는 결과가 발생할 수 있습니다. 프로세스가 종료되기 전에 상태 또는 데이터를 저장할 수 있는 기회가 주어지지 않습니다. 프로세스를 종료하시겠습니까?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "선택한 압축파일를 테스트하시겠습니까?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\"이(가) 클립보드에 있습니다" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "선택한 파일의 확장자가 인식된 파일 유형에 없습니다" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "가져올 \".toolbar\" 파일 찾기" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "가져올 \".BAR\" 파일 찾기" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "복원할 도구 모음의 위치 및 파일 이름 입력" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "저장되었습니다!\n" "도구 모음 파일 이름: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "너무 많은 파일이 선택되었습니다." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "미확인" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "오류: 예기치 않은 트리 보기 메뉴 사용!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<확장자 없음>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<이름 없음>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "사용자 이름:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "사용자 이름 (방화벽):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "검증:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "선택한 체크섬을 확인하시겠습니까?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "대상 파일이 손상되었습니다. 체크섬이 일치하지 않습니다!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "볼률 레이블:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "볼륨 크기를 입력하세요:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Lua 라이브러리 위치를 구성하시겠습니까?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "선택한 파일/디렉터리 %d을(를) 영구 삭제하시겠습니까?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "선택한 \"%s\"을(를) 영구 삭제하시겠습니까?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "함께" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "암호가 잘못되었습니다!\n" "다시 시도해 주세요!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "\"이름 (1.ext)\", \"이름 (2.ext)\" 등으로 자동 이름을 바꾸시겠습니까?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "카운터" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "날짜" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "사전 설정 이름" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "변수 이름 정의" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "변수값 정의" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "변수 이름 입력" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "변수 \"%s\" 값 입력" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "무시하고 [마지막 한 개]로 저장;저장 여부 확인을 위해 사용자 프롬프트;자동으로 저장" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "확장자" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "이름" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "변경 없음;대문자;소문자;첫 번째 문자 대문자;모든 단어의 첫 번째는 대문자;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[마지막 사용]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "[마지막 한 개] 사전 설정 아래의 마지막 마스크;마지막 사전 설정;새로운 새 마스크" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "다중 이름 바꾸기 도구" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "위치 x의 문자" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "위치 x부터 y까지의 문자" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "완료 날짜" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "완료 시간" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "카운터" #: ulng.rsmulrenmaskday msgid "Day" msgstr "일자" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "일자 ( 2자리)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "요일 (짧게,예,\"월\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "요일 (길게, 예, \"월요일\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "확장자" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "경로 및 확장자가 있는 완전한 파일 이름" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "전체 파일 이름, x에서 y까지의 문자" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "시간" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "시간 ( 2자리)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "분" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "분 (2자리)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "월" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "월 (2자리)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "월 이름 (짧게, 예, \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "월 이름 (길게, 예, \"january\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "이름" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "상위 폴더" #: ulng.rsmulrenmasksec msgid "Second" msgstr "초" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "초 (2자리)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "즉석에서 변수 지정" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "년 (2자리)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "년 (4자리)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "플러그인" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "사전 설정을 다음과 같이 저장" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "사전 설정된 이름이 이미 있습니다. 덮어쓰시겠습니까?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "사전 설정된 새 이름 입력" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" 사전 설정이 수정되었습니다.\n" "지금 저장하시겠습니까?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "사전 설정 정렬" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "시간" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "경고, 중복 이름!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "파일에 잘못된 줄 수가 있습니다: %d는 %d가 되어야 합니다!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "유지;삭제;물어보기" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "내부에 해당하는 명령이 없습니다" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "죄송합니다. 아직 \"파일 찾기\" 창이 없습니다..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "죄송합니다, 다른 \"파일 찾기\" 창을 닫고 메모리를 비울 수 없습니다..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "개발" #: ulng.rsopenwitheducation msgid "Education" msgstr "교육" #: ulng.rsopenwithgames msgid "Games" msgstr "게임" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "그래픽" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "응용 프로그램 (*.app)|*.app|모든 파일 (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "멀티미디어" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "네트워크" #: ulng.rsopenwithoffice msgid "Office" msgstr "사무" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "기타" #: ulng.rsopenwithscience msgid "Science" msgstr "과학" #: ulng.rsopenwithsettings msgid "Settings" msgstr "설정" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "시스템" #: ulng.rsopenwithutility msgid "Accessories" msgstr "악세사리" #: ulng.rsoperaborted msgid "Aborted" msgstr "중단됨" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "체크섬 계산" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "\"%s\"에서 체크섬 계산 중" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "\"%s\"의 체크섬 계산 중" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "계산 중" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "\"%s\" 계산 중" #: ulng.rsopercombining msgid "Joining" msgstr "결합" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "\"%s\"에 있는 파일을 \"%s\"에 결합" #: ulng.rsopercopying msgid "Copying" msgstr "복사" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 복사" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "\"%s\"를 \"%s\"로 복사" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "디렉터리 만들기" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "\"%s\" 디렉터리를 만드는 중" #: ulng.rsoperdeleting msgid "Deleting" msgstr "삭제 중" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "\"%s\"에서 삭제" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "\"%s\" 삭제" #: ulng.rsoperexecuting msgid "Executing" msgstr "실행" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "\"%s\" 실행" #: ulng.rsoperextracting msgid "Extracting" msgstr "추출" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 추출" #: ulng.rsoperfinished msgid "Finished" msgstr "완료됨" #: ulng.rsoperlisting msgid "Listing" msgstr "목록 생성" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "\"%s\" 목록 생성" #: ulng.rsopermoving msgid "Moving" msgstr "이동" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 이동" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "\"%s\"를 \"%s\"로 이동" #: ulng.rsopernotstarted msgid "Not started" msgstr "시작되지 않음" #: ulng.rsoperpacking msgid "Packing" msgstr "압축" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "\"%s\"에서 \"%s\"로 압축" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "\"%s\"를 \"%s\"로 압축" #: ulng.rsoperpaused msgid "Paused" msgstr "일시중지됨" #: ulng.rsoperpausing msgid "Pausing" msgstr "일시중지" #: ulng.rsoperrunning msgid "Running" msgstr "실행" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "속성 설정" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "\"%s\"에 속성 설정" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "\"%s\"의 속성 설정" #: ulng.rsopersplitting msgid "Splitting" msgstr "분할" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "\"%s\"를 \"%s\"로 분할 중" #: ulng.rsoperstarting msgid "Starting" msgstr "시작" #: ulng.rsoperstopped msgid "Stopped" msgstr "중지됨" #: ulng.rsoperstopping msgid "Stopping" msgstr "중지 중" #: ulng.rsopertesting msgid "Testing" msgstr "테스트" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "\"%s\"에서 테스트" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "\"%s\" 테스트" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "체크섬 검증" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "\"%s\"에서 체크섬 검증 중" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "\"%s\"의 체크섬 검증 중" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "파일 소스에 대한 액세스 대기 중" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "사용자 응답 대기 중" #: ulng.rsoperwiping msgid "Wiping" msgstr "영구 삭제" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "\"%s\"에 영구 삭제 중" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "\"%s\" 영구 삭제 중" #: ulng.rsoperworking msgid "Working" msgstr "작업" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "시작에 추가;끝에 추가;스마트 추가(&B)" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "새 도구 설명 파일 유형 추가" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "현재 편집 압축파일 구성을 변경하려면 현재 편집을 적용하거나 삭제하세요" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "모드 종속, 추가 명령" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "비어 있지 않은 경우 추가" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "압축 파일 (긴 이름)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "압축기 실행 파일 선택" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "압축파일 파일 (짧은 이름)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "압축기 목록 인코딩 변경" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "정말 삭제하시겠습니까: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "내보낸 압축기 구성" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "errorlevel" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "압축기 구성 내보내기" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d 요소를 \"%s\" 파일로 내보내기가 완료되었습니다." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "내보낼 항목을 선택합니다" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "파일 목록 (긴 이름)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "파일 목록 (짧은 이름)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "압축기 구성 가져오기" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d 요소를 \"%s\" 파일에서 가져오기가 완료되었습니다." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "압축기 구성을 가져올 파일 선택" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "가져올 항목을 선택하세요" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "경로 없이 이름만 사용" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "이름 없이 경로만 사용" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "압축 프로그램 ( 이름)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "압축 프로그램 (짧은 이름)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "모든 이름 따옴표" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "공백이 있는 이름 따옴표" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "처리할 단일 파일 이름" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "대상 하위 디렉터리" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "ANSI 인코딩 사용" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "UTF8 인코딩 사용" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "압축기 구성을 저장할 위치 및 파일 이름 입력" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "압축파일 유형 이름:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "\"%s\" 플러그인 연결:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "첫 번째;마지막;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "클래식, 레거시 순서;알파벳 순서 (하지만 여전히 언어가 먼저)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "전체 확장;전체 축소" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "왼쪽은 활성 프레임 패널, 오른쪽은 비활성 (레거시), 왼쪽은 왼쪽 프레임 패널, 오른쪽은 오른쪽 프레임 패널" #: ulng.rsoptenterext msgid "Enter extension" msgstr "확장자 입력" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "시작에 추가;마지막에 추가;알파벳순 정렬" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "별도 창, 최소화된 별도 창, 작업 패널" #: ulng.rsoptfilesizefloat msgid "float" msgstr "부동" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "cm_Delete의 바로 가기 %s이(가) 등록되므로 이 설정을 되돌리는 데 사용할 수 있습니다." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "%s에 대한 단축키 추가" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "바로 가기 추가" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "바로 가기를 설정할 수 없음" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "바로 가기 변경" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "명령" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "cm_Delete의 바로 가기 %s에 이 설정을 재정의하는 매개 변수가 있습니다. 전역 설정을 사용하려면 이 매개 변수를 변경하시겠습니까?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "cm_Delete의 바로 가기 %s에 대해 바로 가기 %s와 일치하도록 매개 변수를 변경해야 합니다. 변경하시겠습니까?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "설명" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "%s에 대한 단축키 편집" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "매개변수 수정" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "단축키" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "단축키" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<없음>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "매개변수" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "파일 삭제 바로 가기 설정" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "이 설정이 %s 단축키로 작동하려면 단축키 %s을(를) cm_Delete에 할당해야 하지만 이미 %s에 할당되어 있습니다. 변경하시겠습니까?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "cm_Delete의 바로 가기 %s은 Shift가 반대인 단축키를 할당할 수 없는 시퀀스 단축키입니다. 이 설정이 작동하지 않을 수 있습니다." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "사용 중인 바로 가기" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "바로 가기 %s이(가) 이미 사용되고 있습니다." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "%s로 변경하시겠습니까?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "%s가 %s에 사용됨" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "이 명령에 사용되지만 매개 변수가 다른 경우" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "압축기" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "자동 새로 고침" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "동작" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "간단히" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "색상" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "열" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "구성" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "사용자 지정 열" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "디렉터리 주요 목록" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "디렉터리 주요 목록 추가 기능" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "끌어서 놓기" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "드라이브 목록 버튼" #: ulng.rsoptionseditorfavoritetabs msgctxt "ulng.rsoptionseditorfavoritetabs" msgid "Favorite Tabs" msgstr "즐겨찾기 탭" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "파일 연결 추가 기능" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "파일 연결" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "새로 만들기" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "파일 작업" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "파일 패널" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "파일 검색" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "파일 보기" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "파일 보기 추가 기능" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "파일 유형" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "폴더 탭" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "폴더 탭 추가 기능" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "글꼴" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "강조" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "단축키" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "아이콘" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "무시 목록" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "키" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "언어" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "배치" #: ulng.rsoptionseditorlog msgid "Log" msgstr "로그" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "기타 설정" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "마우스" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "다중 이름 바꾸기 도구" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "\"%s\"에서 옵션이 변경되었습니다.\n" "\n" "수정 사항을 저장하시겠습니까?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "플러그인" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "빠른 검색/필터" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "터미널" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "도구 모음" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "도구 모음 추가 기능" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "가운데 도구 모음" #: ulng.rsoptionseditortools msgid "Tools" msgstr "도구" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "도구 설명" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "트리 보기 메뉴" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "트리 보기 메뉴 색상" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "없음;명령줄;빠른 검색;빠른 필터" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "왼쪽 버튼;오른쪽 버튼;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "파일 목록의 맨 위에;디렉터리 뒤에 (파일 앞에 디렉터리가 정렬된 경우);정렬된 위치에;파일 목록의 맨 아래에" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "맞춤형 부동;맞춤형 바이트;맞춤형 킬로바이트;맞춤형 메가바이트;맞춤형 기가바이트;맞춤형 테라바이트" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "다음 확장자에 대해 %s 플러그인이 이미 할당되었습니다:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "사용 안 함(&I)" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "사용함(&N)" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "활성" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "설명" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "파일 이름" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "확장자별" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "플러그인별" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "이름" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "확장자별로 플러그인을 표시할 때만 WCX 플러그인을 정렬할 수 있습니다!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "등록됨" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Lua 라이브러리 파일 선택" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "도구 설명 파일 유형 이름 바꾸기" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "대소문자 구분(&S);대소문자 구분 안 함(&I)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "파일(&F);디렉터리(&R);파일 및 디렉터리(&N)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "초점이 맞지 않을 때는 필터 패널 숨기기(&H);다음 세션의 설정 수정사항 저장" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "대소문자를 구분하지 않음;로컬 설정에 따라 (aAbBcC);처음에는 대문자와 소문자 (Abcabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "이름으로 정렬하고 먼저 표시;파일처럼 정렬하고 먼저 표시;파일처럼 정렬" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "억양을 고려한 알파벳순;특수문자 포함 알파벳순;자연 정렬: 알파벳 및 숫자;특수문자 포함 자연 정렬" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "맨 위;맨 아래;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "구분자(&E);내부 명령(&R);외부 명령(&X);메뉴(&U)" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "파일 형식 도구 설명 구성을 변경하려면 현재 편집 중 하나를 적용하거나 삭제합니다" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "도구 설명 파일 형식 이름:(&N):" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\"이(가) 이미 존재합니다!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "정말 삭제하시겠습니까: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "내보낸 도구 설명 파일 형식 구성" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "도구 설명 파일 형식 구성 내보내기" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d 요소를 \"%s\" 파일로 내보내기가 완료되었습니다." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "내보낼 항목을 선택하세요" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "도구 설명 파일 형식 구성 가져오기" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d 요소를 \"%s\" 파일에서 가져오기가 완료되었습니다." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "도구 설명 파일 형식 구성을 가져올 파일을 선택합니다" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "가져올 항목을 선택하세요" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "도구 설명 파일 형식 구성을 저장할 위치 및 파일 이름 입력" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "도구 설명 파일 유형 이름" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC 레거시 - 복사 (x) 파일 이름.확장자;Windows - 파일 이름 (x).확장자;기타 - 파일 이름(x).확장자" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "위치 변경 안 함;새 파일과 동일한 설정 사용;정렬된 위치로" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "완전한 절대 경로;%COMMANDER_PATH%에 대한 경로;다음에 대한 상대 경로" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "contains(case)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "contains" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(case)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "\"%s\" 필드를 찾을 수 없습니다!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!contains(case)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!contains" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(case)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "\"%s\" 플러그인을 찾을 수 없습니다!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "정규식" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "\"%s\" 필드에 대한 단위 \"%s\"를 찾을 수 없습니다 !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "파일: %d개, 폴더:%d개" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "\"%s\"에 대한 액세스 권한을 변경할 수 없음" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "\"%s\"에 대한 소유자를 변경할 수 없음" #: ulng.rspropsfile msgid "File" msgstr "파일" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "디렉터리" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "여러 유형" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "이름 지정된 파이프" #: ulng.rspropssocket msgid "Socket" msgstr "소켓" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "특수 블록 장치" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "특수 문자 장치" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "심볼 링크" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "알 수 없는 유형" #: ulng.rssearchresult msgid "Search result" msgstr "검색 결과" #: ulng.rssearchstatus msgid "SEARCH" msgstr "검색" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<이름없는 템플릿>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "DSX 플러그인을 사용한 파일 검색이 이미 진행 중입니다.\n" "새로운 것을 시작하기 전에 완료해야 합니다." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "WDX 플러그인을 사용한 파일 검색이 이미 진행 중입니다.\n" "새로운 것을 시작하기 전에 완료해야 합니다." #: ulng.rsselectdir msgid "Select a directory" msgstr "디렉터리 선택" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "최신;가장 오래된;가장 큰;가장 작은;그룹 내 첫 번째;그룹 내 마지막" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "창 선택" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "%s 도움말 표시(&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "모두" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "범주" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "열" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "명령" #: ulng.rssimpleworderror msgid "Error" msgstr "오류" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "실패!" #: ulng.rssimplewordfalse msgid "False" msgstr "False" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "파일 이름" #: ulng.rssimplewordfiles msgid "files" msgstr "파일" #: ulng.rssimplewordletter msgid "Letter" msgstr "문자" #: ulng.rssimplewordparameter msgid "Param" msgstr "매개변수" #: ulng.rssimplewordresult msgid "Result" msgstr "결과" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "성공!" #: ulng.rssimplewordtrue msgid "True" msgstr "True" #: ulng.rssimplewordvariable msgid "Variable" msgstr "변수" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "작업 디렉터리" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "바이트" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "기가바이트" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "킬로바이트" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "메가바이트" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "테라바이트" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "파일: %d개, 디렉터리: %d, 크기: %s (%s 바이트)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "대상 디렉터리를 만들 수 없습니다!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "파일 크기 형식이 잘못되었습니다!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "파일을 분할할 수 없습니다!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "부분 수가 100개가 넘습니다! 계속하시겠습니까?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "자동;1457664B - 3.5\" 고밀도 1.44M;1213952B - 5.25\" 고밀도 1.2M;730112B - 3.5\" 2배 밀도 720K;362496B - 5.25\" 2배 밀도 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "디렉터리 선택:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "미리보기" #: ulng.rsstrpreviewothers msgid "Others" msgstr "기타" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "참고 사항" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "평면" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "제한" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "단순" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabulous-멋진 VenusGirl" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Marvelous-놀라운 VenusGirl" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Tremendous-엄청난 VenusGirl" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "디렉터리 기록에서 디렉터리 선택" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "즐겨찾기 탭 선택:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "명령줄 기록에서 명령 선택" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "기본 메뉴에서 작업 선택" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "기본 도구 모음에서 작업 선택" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "주요 디렉터리에서 디렉터리 선택:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "파일 보기 기록에서 디렉터리 선택" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "파일 또는 디렉터리 선택" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "심볼 링크를 만드는 동안 오류가 발생했습니다." #: ulng.rssyndefaulttext msgid "Default text" msgstr "기본 텍스트" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "일반 텍스트" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "아무것도 하지 않음;탭 닫기;즐겨찾기 탭 액세스;탭 팝업 메뉴" #: ulng.rstimeunitday msgid "Day(s)" msgstr "일" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "시" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "분" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "월" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "초" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "주" #: ulng.rstimeunityear msgid "Year(s)" msgstr "년" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "즐겨찾기 탭 이름 바꾸기" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "즐겨찾기 탭 하위 메뉴 이름 바꾸기" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "차이" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "편집기" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "차이점 열기 오류" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "편집기 열기 오류" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "터미널 열기 오류" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "뷰어 열기 오류" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "터미널" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "시스템 기본값;1초;2초;3초;5초;10초;30초;1분;숨기지 않음" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "DC와 시스템 도구 설명 결합;DC 먼저 (레거시);DC와 시스템 도구 설명 결합;시스템 우선;가능하면 DC 도구 설명 표시, 가능하지 않으면 시스템 표시;DC 도구 설명만 표시;시스템 도구 설명만 표시" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "뷰어" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "수행한 작업에 대한 설명과 다음 파일을 첨부하여 버그 추적기에 이 오류를 보고해 주세요:%s계속하려면 %s를 프로그램을 중단하려면 %s을 누르세요." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "양쪽 패널, 활성에서 비활성으로" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "양쪽 패널, 왼쪽에서 오른쪽으로" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "패널의 경로" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "각 이름을 괄호 안에 넣거나 원하는 이름으로 묶습니다" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "파일 이름만, 확장자 없음" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "완전한 파일 이름 (경로+파일 이름)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "\"%\" 변수에 대한 도움말" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "사용자에게 기본 제안 값으로 매개 변수 입력을 요청합니다" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "패널 경로의 마지막 디렉터리" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "파일 경로의 마지막 디렉터리" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "왼쪽 패널" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "파일 이름 목록의 임시 파일 이름" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "완전한 파일 이름 (경로+파일 이름) 목록의 임시 파일 이름" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "BOM이 포함된 UTF-16 목록의 파일 이름" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "큰따옴표 안에 BOM이 포함된 UTF-16 형식의 목록 내 파일 이름" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "목록의 파일 이름이 UTF-8로 되어 있음" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "목록의 파일 이름이 큰따옴표 안에 있는 UTF-8 형식의 파일 이름" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "상대 경로를 가진 파일 이름 목록의 임시 파일 이름" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "파일 확장자만" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "파일 이름만" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "가능한 다른 예" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "경로, 종료 구분 기호 없음" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "여기서부터 줄 끝까지의 퍼센트 변수 표시기는 \"#\" 기호입니다" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "퍼센트 기호로 돌아가기" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "여기에서 줄 끝까지 퍼센트 변수 표시기는 다시 \"%\" 기호로 되돌아 갑니다" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "각 이름 앞에 \"-a\" 또는 원하는 이름을 붙입니다" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[매개 변수에 대한 사용자 알림 표시, 기본값 제안]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "상대 경로가 있는 파일 이름" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "오른쪽 패널" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "오른쪽 패널에서 두 번째로 선택한 파일의 전체 경로" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "이전 실행 명령 표시" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[간단한 메시지]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "간단한 메시지를 표시합니다" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "활성 패널 (원본)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "비활성 패널 (대상)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "파일 이름은 여기에서 따옴표로 표시됩니다 (기본값)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "명령은 터미널에서 수행되며 마지막에 열린 상태로 유지됩니다." #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "경로에 끝 구분 기호가 있을 것입니다" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "여기서는 파일 이름을 따옴표로 붙이지 않습니다" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "명령은 터미널에서 수행되며 마지막에 닫힙니다." #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "경로에는 끝 구분 기호가 없습니다 (기본값)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "네트워크" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "휴지통" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander의 내부 뷰어입니다." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "나쁜 품질" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "인코딩" #: ulng.rsviewimagetype msgid "Image Type" msgstr "이미지 유형" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "새 크기" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s을(를) 찾을 수 없습니다!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "펜;직사각형;타원" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "외장 뷰어로" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "내장 뷰어로" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "교체 횟수: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "교체가 이루어지지 않았습니다." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "\"%s\"라는 이름의 설정 없음" ��������������������������doublecmd-1.1.30/language/doublecmd.ja.po�����������������������������������������������������������0000644�0001750�0000144�00001512214�15104114162�017245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2021-01-23 07:54+0900\n" "Last-Translator: Kazunari Sekigawa <kazunari.sekigawa@gmail.com>\n" "Language-Team: Language <email@address>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 日本語\n" "Language: ja\n" "X-Generator: Poedit 2.4.2\n" "X-Poedit-Bookmarks: 1146,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "比較しています… %d (ESCでキャンセル)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "左: %d個のファイルを削除" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "右:%d 個のファイルを削除" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "ファイルが見つかりました: 合計%d項目  (同一:%d 異なる:%d 左側だけに存在:%d,右側だけに存在:%d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "左から右へ: %d 個のファイルをコピー,合計サイズ: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "右から左へ: %d 個のファイルをコピー,合計サイズ: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "テンプレートを選択…" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "空き領域を確認(&h)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "属性をコピー(&y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "所有権をコピー(&w)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "ファイル権限をコピー(&p)" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "日付/時間をコピー(&a)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "リンクを修正(&k)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "読み取り専用フラッグをドロップ(&g)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "空のディレクトリを除外(&x)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "リンクを辿る(&l)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "スペースを確保(&R)" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "確認(&V)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "ファイルの時間,属性などを設定できない場合どうするか." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "テンプレートを使用" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "ディレクトリが存在する場合(&e)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "ファイルが存在する場合(&f)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "属性を設定できない場合(&n)" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<テンプレートが存在しない>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "クリップボードにコピー" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "ビルド" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "フリーPascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "ホームページ:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "リビジョン" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "バージョン" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "リセット(&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "属性を選択" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "アーカイブ(&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "圧縮(&m)" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "ディレクトリ(&D)" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "暗号化済み(&E)" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "非表示(&H)" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "読み取り専用(&n)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "スパース・ファイル(&p)" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUIDアクセス権" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "シンボリックリンク(&S)" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "システム(&y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "テンポラリ(&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 属性" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "一般的な属性" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "読み込み" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "テキストとして(&x)" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "ベンチマーク" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "ベンチマーク データサイズ: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "ハッシュ" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "時間(ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "スピード(MB/s)" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "チェックサムを計算…" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "作業完了後にチェックサムファイルを開く" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "ファイルごとに個別のチェックサム ファイルを作成(&r)" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "チェックサム ファイルを保存(&S):" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "チェックサムを確認…" #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "エンコード" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "接続(&o)" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "接続マネージャ" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "接続先:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "キューに追加(&d)" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "オプション(&p)" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "これらのオプションを規定値として保存(&v)" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "ファイルのコピー" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新しいキュー" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "キュー1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "キュー2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "キュー3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "キュー4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "キュー5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "説明を保存" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "ファイル/フォルダのコメント" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "コメントを編集(&d):" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "エンコード(&E)" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "自動比較" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "バイナリ モード" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "キャンセル" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "ブロックを右にコピー" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "ブロックを右にコピー" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "ブロックを左にコピー" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "ブロックを左にコピー" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "やり直し" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "やり直し" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "すべて選択(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "元に戻す" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "元に戻す" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "検索(&F)" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "検索" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "次を検索" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "次を検索" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "前を検索" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "前を検索" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "置換(&R)" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "置換" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "最初の違い" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "最初の違い" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "指定行へ移動…" #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "指定行へ移動" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "大文字小文字を区別しない" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "空白を無視" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "スクロールし続ける" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "最後の違い" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "最後の違い" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "行の違い" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "次の違い" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "次の違い" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "左を開く…" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "右を開く…" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "背景を塗りつぶす" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "前の相違点" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "前の相違点" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "再読み込み(&R)" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "再読み込み" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "保存" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "保存" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "名前を付けて保存…" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "名前を付けて保存…" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "左を保存" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "左を保存" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "名前を付けて左を保存…" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "名前を付けて左を保存…" #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "右を保存" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "右を保存" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "名前を付けて右を保存…" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "名前を付けて右を保存…" #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "比較" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "エンコード" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "エンコード" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "ファイルを比較" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右(&R)" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "アクション(&A)" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "オプション(&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "新しいショートカットをシーケンスに追加" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "シーケンスから最後のショートカットを削除" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "残りの未使用キーのリストからショートカットを選択" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "これらのコントロールの場合のみ" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "パラメータ(1行に1項目)(&P)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "ショートカット:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "本製品について" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "設定(&C)" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "設定" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "コピー" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "切り取り" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "削除" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "検索(&F)" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "検索" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "次を検索" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "次を検索" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "前を検索" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "指定行へ移動…" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "貼り付け" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "やり直し" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "やり直し" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "置換(&R)" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "置換" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "すべて選択(&A)" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "すべて選択" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "元に戻す" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "元に戻す" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "閉じる" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "終了" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "新規(&N)" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "新規" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "開く(&O)" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "開く" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "再ロード" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "保存" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "名前を付けて保存(&A)…" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "名前を付けて保存" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "エディタ" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "名前を付けて開く" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "名前を付けて保存" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "構文のハイライト表示" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "行の末尾" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK(&O)" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大文字小文字を区別(&a)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "カレットの範囲から検索(&e)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "正規表現(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "選択した テキストのみ(&t)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "単語のみ(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "オプション" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "置換後の文字列(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "検索する文字列(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "方向" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "ファイルを解凍" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "ファイルに格納されている場合は,パス名を解凍(&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "各アーカイブを個別のサブディレクトリ (アーカイブの名前) に解凍(&s)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "既存のファイルを上書き(&v)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "保存・移動先ディレクトリ(&d):" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "ファイル マスクに一致するファイルを抽出(&E):" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "ファイル暗号化のためのパスワード(&P):" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "待つ…" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "ファイル名:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "From :" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "一時ファイルを削除することができるときに閉じるをクリック!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "パネルに(&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "全てを見る(&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "現在の操作:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "From :" #: tfrmfileop.lblto.caption msgid "To:" msgstr "To:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUIDアクセス権" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "ファイルをプログラムとして実行許可" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "テキスト:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "含む:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "作成済み:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "実行:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "パス:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "グループ(&G)" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "最終アクセス:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "最終変更:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "最終ステータス変更:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進法:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "所有者(&w)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "読み込み" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "サイズ:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "シンボリックリンク先:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "タイプ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "名前" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "値" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "閉じる" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "終了する" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "アンロックする" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "全てをアンロックする" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "アンロックする" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "ファイル・ハンドル" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "プロセスID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "実行パス" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "キャンセル(&a)" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "検索を終了してウィンドウを閉じる" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "ホットキーの設定" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "編集(&E)" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "リストボックスへ送付(&l)" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "検索をキャンセル,閉じてメモリから解放" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "他の全ての「ファイルを検索」について,キャンセル,閉じてメモリから解放" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "ファイルに移動(&G)" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "データを検索" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "最後の検索(&L)" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "新しい検索(&N)" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "新規検索(フィルターをクリア)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "「詳細設定」のページへ" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "「読み込み/保存」のページへ" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "次のページに切り替える(&t)" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "「プラグイン」のページへ" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "前のページに切り替える(&P)" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "「結果」のページへ" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "「標準」のページへ" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "開始(&S)" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "表示(&V)" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "追加(&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "ロード(&o)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "セーブ(&a)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "開始ディレクトリにセーブ(&v)" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "保存された場合は, テンプレートをロードするとき”開始ディレクトリ”を復元します.特定のディレクトリに検索先を固定したい場合これを使います" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "テンプレートを使用" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "ファイルの検索" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "大文字と小文字を区別(&i)" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "開始日付(&D):" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "終了日付(&e):" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "下限サイズ(&i):" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "上限サイズ(&z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "アーカイブ中を探索(&a)" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "ファイル内のテキストを検索(&t)" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "シンボリックリンクを辿る(&y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "指定したテキストを含まないファイルを検索(&O)" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "これより古くない(&o):" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "開いているタブ" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "ファイル名の一部を検索(&h)" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "正規表現(&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "置き換え(&p)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "選択したディレクトリとファイル(&f)" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "正規表現(&e)" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "開始時間(&T):" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "終了時間(&m)" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "検索プラグインを使用(&U):" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "同じコンテンツ" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "同じハッシュ" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "同じ名前" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "重複したファイルを探す(&p):" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "同じサイズ" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "16進数(&m)" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "検索対象から除外すべきディレクトリ名を”;”で区切って入力" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "検索対象から除外すべきファイル名を”;”で区切って入力" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "ファイル名を”;”で区切って入力" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "プラグイン" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "フィールド" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "演算子" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "値" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "ディレクトリ" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "ファイル" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "データを検索" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "属性(&b)" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "エンコーディング(&g):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "除外するディレクトリ(&x)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "除外するファイル(&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "ファイルマスク(&F)" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "開始するディレクトリ(&d)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "検索するサブディレクトリ(&b):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "以前の検索(&P):" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "アクション(&A)" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "他の全てについて,キャンセル,閉じてメモリから解放" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "新しいタブで開く" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "オプション" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "リストから削除" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "結果(&R)" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "見つかったすべての項目を表示" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "エディタに表示" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "ビューアで表示" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "表示(&V)" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "上級" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "ロード/保存" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "プラグイン" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "結果" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "標準" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "検索(&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "検索" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "大文字と小文字を区別(&a)" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "正規表現(&R)" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "16 進 数" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "ドメイン:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "パスワード:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "ユーザ名:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "匿名で接続する" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "ユーザーとして接続:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "ハードリンクを作成" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "リンクが指し示す目標(&D)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "リンク名(&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "全てをインポート!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "選択したものをインポート" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "インポートしたいエントリーを選択" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "サブメニューをクリックすると,全体メニューを選択します" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "複数のものを選択するには,Ctrlキーを押したままエントリーをクリックします" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "…" #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "リンカー" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "保存先…" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "アイテム" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "ファイル名(&F)" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下へ(&w)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下へ" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "削除(&R)" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "削除" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "上へ(&)U" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "上へ" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "本製品について(&A)" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "インデックスでタブをアクティブ化" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "コマンドラインにファイル名を追加" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "新規検索インスタンス…" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "コマンドラインにパスとファイル名を追加" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "コマンドラインにパスをコピー" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "プラグインの追加" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "ベンチマーク(&B)" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "概要表示" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "概要表示" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "占有スペースを計算(&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "ディレクトリを変更" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "ホームディレクトリに移動" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "親ディレクトリに移動" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "ルートディレクトリに移動" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "チェックサムを計算(&s)…" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "チェックサムを確認(&V)…" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "ログファイルをクリア" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "ログウィンドウをクリア" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "すべてのタブを閉じる(&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "重複したタブを閉じる" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "タブを閉じる(&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "次のコマンドライン" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "履歴中の次のコマンドにコマンドラインを移動" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "前のコマンドライン" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "履歴中の前のコマンドにコマンドラインを移動" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "詳細" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "詳細表示" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "内容で比較(&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "ディレクトリを比較" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "ディレクトリを比較" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "アーカイバの構成" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」の構成" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "お気に入りタブの構成" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "フォルダー タブの構成" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "ホットキーの設定" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "プラグインの構成" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "位置を保存" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "設定を保存する" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "検索の設定" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "ツールバー…" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "ツールチップの構成" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "ツリー表示のメニューの構成" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "ツリー表示メニューの色の構成" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "コンテキストメニューを表示" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "コピー" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "全てのタブを反対側にコピー" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "全ての表示されているカラムをコピー(&c)" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "ファイル名(複数可)をフルパスでクリップボードにコピー(&P)" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "ファイル名(複数可)をクリップボードにコピー(&F)" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "UNCパスで名前をコピー" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "確認を求めずにファイルをコピー" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "選択したファイル(複数可)のフルパスを末尾のディレクトリ・セパレータなしでコピー" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "選択したファイル(複数可)のフルパスをコピー" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "同じパネルにコピー" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "コピー" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "占有スペースを表示(&w)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "切り取り(&t)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "コマンドのパラメータを表示" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "全ての検索について,キャンセル,閉じてメモリから解放" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "ディレクトリ履歴" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "ディレクトリ・ホットリスト(&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "任意のコマンドを選択し,それを実行します" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "編集" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "コメントを編集(&m)…" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "新しいファイルを編集" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "ファイルリストのパスフィールドを編集" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "パネルの交換(&P)" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "スクリプトを実行" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "ファイルを解凍・抽出(&E)…" #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "ファイルの関連づけの設定(&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "ファイルの結合(&b)…" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "ファイル属性の表示(&F)" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "ファイルの分割(&i)…" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "フラットビュー(&F)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&フラット ビュー,選択のみ(&F)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "コマンドラインにフォーカス" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "フォーカスの入れ替え" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "左右のファイル・リストの切り替え" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "ツリー ビューにフォーカス" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "現在のファイルリストとツリービューを切り替え (有効な場合)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "最初のフォルダまたはファイルにカーソルを置く" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "リストの最初のファイルにカーソルを置く" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "最後のフォルダまたはファイルにカーソルを置く" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "リストの最後のファイルにカーソルを置く" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "次のフォルダまたはファイルにカーソルを置く" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "前のフォルダまたはファイルにカーソルを置く" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "ハードリンクを作成(&H)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "内容(&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "水平パネル モード(&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "キーボード(&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "左側パネルの簡易表示" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "左側パネルのカラム表示" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左 <= 右" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "左側パネルのフラット表示(&F)" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "左側のドライブリストを開く" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "左側パネルの表示を逆転(&v)" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "左側パネルを属性でソート(&A)" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "左側パネルを日付でソート(&D)" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "左側パネルを拡張子でソート(&E)" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "左側パネルをファイル名でソート(&N)" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "左側パネルをサイズでソート(&S)" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "左側パネルのサムネール表示" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "お気に入りのタブからタブをロード" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "クリップボードから選択した項目を開く(&b)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "ファイルから選択した項目を開く(&L)…" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "ファイルからタブを読み込む(&L)" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "ディレクトリを作成(&D)" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "同じ拡張子の項目を全て選択(&x)" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "同じ名前を持つすべてのファイルを選択" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "同じ名前と拡張子を持つすべてのファイルを選択" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "同じパス内のすべてを選択" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "選択を反転(&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "全て選択(&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "グループの選択を解除(&u)" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "グループを選択(&G)" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "全ての選択を解除(&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "ウィンドウを最小化" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "複数リネーム・ツール(&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "ネットワーク接続(&C)…" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "ネットワーク切断(&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "ネットワークへの(お急ぎ)接続(&Q)…" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "新しいタブ(&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "リストから次のお気に入りタブを読み込む" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "次のタブに切り替え(&t)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "開く" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "アーカイブファイルを試しで開く" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "メニューバーファイルを開く" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "新しいタブでフォルダを開く(&F)" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "インデックスでドライブを開く" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "仮想ファイルシステム(VFS)リストを開く(&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "オペレーション・ビューア(&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "オプション(&O)…" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "ファイルを圧縮(&P)…" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "分割位置を設定" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "貼り付け(&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "リストから前のお気に入りタブを読み込む" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "前のタブに切り替え(&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "クイックフィルタ" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "クイック検索" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "クイック ビュー パネル(&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "リフレッシュ(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "最後に読み込まれたお気に入りタブを再読み込み" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "移動/変名" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "確認を求めることがなくファイルを移動/名前変更" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "名前の変更" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "タブの名前を変更(&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "最後に読み込まれたお気に入りタブに再保存" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "選択を元に戻す(&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "順序を逆転(&v)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "右側パネルの簡易表示" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "右側パネルのカラム表示" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "左 => 右" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "右側パネルのフラット表示(&F)" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "右側のドライブリストを開く" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "右側パネルの表示を逆転(&v)" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "右側パネルを属性でソート(&A)" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "右側パネルを日付でソート(&D)" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "右側パネルを拡張子でソート(&E)" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "右側パネルをファイル名でソート(&N)" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "右側パネルをサイズでソート(&S)" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "右側パネルのサムネール表示" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "端末をこのディレクトリで実行(&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "現在のタブを新しいお気に入りタブに保存" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "選択し項目を保存(&v)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "選択した項目をファイルに保存(&e)…" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "タブをファイルに保存(&S)" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "検索(&S)…" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "全てのタブをロックしディレクトリの変更は新しいタブで開く" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "全てのタブを通常状態にする" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "全てのタブをロック状態にする" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "全てのタブをロックするがディレクトリの移動を許可する" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "属性の変更(&A)…" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "ロック済み:ディレクトリの変更は新しいタブで(&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "通常(&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "ロック済み(&L)" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "ロック済み:ディレクトリの変更は同じタブで(&D)" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "開く" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "システムの関連付けを使用して開く" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "ボタンのメニューを表示" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "コマンドラインヒストリを表示" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "メニュー" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "システムファイルの表示/非表示(&H)" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "属性でソート(&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "日付でソート(&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "拡張子でソート(&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "名前でソート(&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "サイズでソート(&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "ドライブリストを開く" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "ファイル名を表示しないための「ファイル無視リスト」の有効化/無効化" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "シンボリックリンクを作成(&L)…" #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "ディレクトリの同期…" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "ターゲット <= ソース" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "アーカイブをテスト(&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "サムネイル" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "サムネイル表示" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "フルスクリーンモード・コンソールをトグル" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "左のウィンドウにカーソルの下のディレクトリを転送" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "右のウィンドウにカーソルの下のディレクトリを転送" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "ツリー表示パネル(&T)" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "パラメータに従ってソート" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "同じ拡張子の項目を全て選択解除(&t)" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "同じ名前を持つすべてのファイルの選択を解除" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "同じ名前と拡張子を持つすべてのファイルの選択を解除" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "同じパス内のすべての選択を解除" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "表示" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "訪問済みのパスの履歴をアクティブ・ビューとして表示" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "履歴内の次のエントリへ移動" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "履歴内の前のエントリへ移動" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "ログファイルの表示" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "現在の検索インスタンスを表示" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "ダブル・コマンダーのウェブサイトを訪問" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "完全削除(抹殺)" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "ディレクトリ・ホットリストとパラメータを使用" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "終了" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "ディレクトリの作成" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "端末" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "右側のパネルの現在のディレクトリを左側のパネルに表示" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "ホームディレクトリに移動" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "ルート ディレクトリに移動" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "親ディレクトリに移動" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "左側のパネルの現在のディレクトリを右側のパネルに表示" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "パス" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "左右パネルサイズ比 20:80(&2)" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "左右パネルサイズ比 30:70(&3)" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "左右パネルサイズ比 40:60(&4)" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "左右パネルサイズ比 50:50(&5)" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "左右パネルサイズ比 60:40(&6)" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "左右パネルサイズ比 70:30(&7)" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "左右パネルサイズ比 80:20(&8)" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "コピー…" #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "リンクを作成…" #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "クリア" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隠す" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "すべて選択" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移動…" #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "シンボリック リンクを作成…" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "タブのオプション" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "復元" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "開始" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "コマンド(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "構成設定(&o)" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "お気に入り" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "ファイル(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "マーク(&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "ネットワーク(&N)" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "表示(&S)" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "タブのオプション(&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "タブ(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "編集" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "OK(&O)" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "内部コマンドを選択" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "レガシーソート" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "レガシーソート" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "デフォルトではすべてのカテゴリを選択" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "選択:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "カテゴリー(&C):" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "コマンド名(&n):" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "フィルター(&F):" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "ヒント:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "ホットキー:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "カテゴリ" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "ヘルプ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "ヒント" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "ホットキー" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "追加(&A)" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "定義(&D)…" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "大文字/小文字を区別" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "アクセントと合字を無視します" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "属性(&b):" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "入力マスク:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "既定の選択タイプを選定(&r)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "ディレクトリを新規作成" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "新規ディレクトリの名前を入力(&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "新しいサイズ" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "高さ:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPEGの圧縮品質" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "幅:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "高さ" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "幅" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "拡張子" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "ファイル名" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "クリア" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "クリア" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "閉じる(&C)" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "設定" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "カウンタ" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "カウンタ" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "日付" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "日付" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "削除" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "ドロップダウンプリセットリスト" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "名前を編集…" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "現在の新しい名前を編集…" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "拡張子" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "拡張子" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "編集(&E)" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "相対パスメニューを呼び出す" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "最後のプリセットをロード" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "名前をファイルからロード…" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "名前またはインデックスでプリセットをロード" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "プリセット1をロード" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "プリセット2をロード" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "プリセット3 をロード" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "プリセット4をロード" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "プリセット5をロード" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "プリセット6をロード" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "プリセット7をロード" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "プリセット8をロード" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "プリセット9をロード" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "ファイル名" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "ファイル名" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "名前の変更" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "全てリセット(a)" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "保存(S)" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "名前を付けて保存(A)…" #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "プリセットメニューを表示" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "ソート" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "時間" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "時間" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "名前変更ログ ファイルの表示" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "複数リネーム" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "大文字/小文字を区別" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "ログ結果(&L)" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "追加" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "正規表現(&x)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "置き換え(&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "カウンタ" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "検索と置換" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "マスク" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "プリセット" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "拡張子(&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "検索(&F)…" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "間隔(&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "ファイル名(&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "置き換え(&p)…" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "開始番号(&t)" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "幅(&W)" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "アクション" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "編集(&E)" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "古いファイル名" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "新しいファイル名" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "ファイルのパス" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "エディタを閉じたとき変更した名前をロードするには,OKをクリック!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "アプリケーションを選択" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "カスタム コマンド" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "関連付けを保存" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "選択したアプリケーションを既定のアクションとして設定" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "開くべきファイルの種類: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "複数のファイル名" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "複数の URL" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "1 つのファイル名" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "1つののURI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "適用(&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "ヘルプ" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "オプション" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "サブページの 1 つを選択してください.このページには,何も含まれていません." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "コピー" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "削除(&e)" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "その他..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ファイル拡張子ではなく,その内容を検出することによってアーカイブを認識するために,IDはcm_OpenArchiveと一緒に使用されました:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "オプション:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "フォーマットの構文解析モード:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "有効(&n)" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "デバッグモード(&b)" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "コンソール出力を表示(&h)" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "拡張子のないアーカイブ名をリストとして使用" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "UNIXファイル属性(&x)" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix パス区切り文字 “/“(&U)" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windowsファイルの属性" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windowsパスの区切り文字 \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "追加(&i):" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "アーカイブ作成ツール(&h):" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "削除:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "説明(&s):" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "拡張子(&x):" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "抽出(&t):" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "パスを付けずに抽出:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "IDの位置:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "IDの探査レンジ:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "リスト(&L):" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "アーカイーバ:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "リスト表示 終了(オプション)(&f):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "リスト表示 フォーマット(&m):" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "リスト表示 開始(オプション)(&g):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "パスワード質問文字列:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "自己解凍型のアーカイブを作成:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "テスト:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "自動構成(&u)" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "すべてを無効にする" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "変更を破棄する" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "すべてを有効にする" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "アーカイブを並べ替える" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "追加" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "一般" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "サイズ,日付,属性が変更されたとき(&s)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "以下のパスとそのサブディレクトリについて(&p):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "ファイルが新規作成,削除,改名されたとき(&f)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "アプリケーションがバックグラウンドで動作しているとき(&b)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "自動更新を無効化" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "ファイル リストを更新" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "常にトレイアイコンを表示(&w)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "アンマウントされているデバイスを自動的に非表示(&h)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "最小化時にアイコンをシステムトレイに移動(&v)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "同時に起動できるダブル・コマンダーの数を1つに限定(&l)" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "“;”で区切ることで,複数のドライブやマウントポイントを入力可能." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "ドライブのブラックリスト(&b)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "カラムサイズ" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "ファイル拡張子を表示" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "整列させて(Tabで)(&g)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "ファイル名の直後に(&d)" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "自動" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "カラム数を固定" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "カラムの幅を固定" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "グラデーション インジケータを使用(&G)" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "バイナリ モード" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "テキスト:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "背景2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "背景色のインジケータ(&d):" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "前景色のインジケータ(&I):" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "修正済み:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "修正済み:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "成功:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "カラムの幅で文字列を切断(&t)" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "テキストが列に合わない場合はセルの幅を広げる(&E)" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "水平ライン(&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "垂直ライン(&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "カラムを自動的に埋める(&u)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "グリッドを表示" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "カラムのサイズを自動調整" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "カラムのサイズを自動調整(&z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "コマンドラインの履歴(&m)" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "ディレクトリ履歴(&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "ファイルマスクの履歴(&F)" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "フォルダのタブ" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "設定を保存(&v)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "検索と置換の履歴(&h)" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "メイン ウィンドウの状態" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "ディレクトリ" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "設定ファイルの保存場所" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "終了時に保存" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "←左側ツリー中での構成設定要素の並べ替え順序" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "コンフィギュレーション ページに入るときのツリー状態" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "コマンドラインで設定" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "強調表示:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "アイコンテーマ:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "サムネイル キャッシュ:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "プログラムディレクトリ (ポータブル版)(&r)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "ユーザのホームディレクトリ(&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "…" #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "デフォルトの設定に進みます" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "新規" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "次へ" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "前へ" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "名前を付けて保存" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "保存" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "強調を許可" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "何かを変更するにはクリックすると,すべてのカラムを変更" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "一般" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "カーソルの境界" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "枠型カーソルを使用" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "非アクティブの選択色を使用" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "反転選択を使用" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "このビューにはカスタム・フォントと色を使用" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "背景:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "列ビュー(&C):" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[現在のカラム名]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "カーソルの色:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "カーソルの文字:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "ファイル システム(&F):" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "フォント:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "サイズ:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "テキストの色:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "非アクティブカーソルの色:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非アクティブマークの色:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "マークした項目の色:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "下に示すのはプレビューです.カーソルを動かしファイルを選択すれば,様々な設定のルック&フィールが直ちに分かります." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "カラムの設定:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "カラムを追加" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "比較した後のフレーム パネルの位置:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "アクティブフレームのディレクトリを追加する(&a)" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "アクティブ・非アクティブなフレームのディレクトリを追加する(&d)" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "ブラウズするディレクトリを追加(&w)" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "選択した項目のコピーを追加" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "アクティブフレームの現在の選択されたディレクトリまたはアクティブなディレクトリを追加する(&s)" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "セパレータを追加" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "サブメニューを追加する" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "指定するディレクトリを追加" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "すべて折畳む" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "アイテムの折りたたみ" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "エントリの選択部分を切り取る" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "すべてを削除!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "選択した項目の削除" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "サブメニューとそのすべての要素を削除する" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "サブメニューのみを削除し,要素を保持する" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "アイテムの展開" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "ツリー ウィンドウにフォーカス" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "最初の項目へ移動" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "最後の項目へ移動" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "次の項目に移動" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "前の項目に移動" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "アクティブフレームのディレクトリを追加(&a)" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "アクティブ・非アクティブなフレームのディレクトリを追加(&d)" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "ブラウズするディレクトリを追加(&w)" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "選択したエントリのコピーを挿入" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "アクティブフレームの現在選択されているまたはアクティブなディレクトリを挿入" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "区切りを挿入" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "サブメニューを挿入" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "タイプするディレクトリを挿入" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "次に移動" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "前に移動" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "全てのブランチを開く" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "切り取ったものを貼り付け" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "パス中で検索・置換(&p)" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "パスとターゲットの両方で検索・置換" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "ターゲットパス中で検索・置換(&t)" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "パスを微調整" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "ターゲット パスを微調整" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "追加…" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "バックアップ…" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "削除…" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "エクスポート…" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "インポート…" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "挿入…" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgctxt "tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption" msgid "&Miscellaneous..." msgstr "その他…" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの関数" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "適切なターゲットを選択するいくつかの関数" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "ソート…" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "ディレクトを追加する場合,ターゲットも追加" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "ツリーを常に展開" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "有効な環境変数のみを表示" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "ポップアップで表示 [パスも]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "名前,a ~ z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "名前,a ~ z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "「ディレクトリ・ホットリスト」(ドラッグ&ドロップで並べ替え)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "その他のオプション" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "名前:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "パス:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "ターゲット:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "…選択されている要素の現在のレベルのみ" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "実際に存在する全てのホルダーのパスをスキャンして認証" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "実際に存在する全てのホルダーのパスとターゲットをスキャンして認証" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "ディレクトリ ホットリストのファイル (.hotlist) に" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "トータル・コマンダーTC の”wincmd.ini”ファイルへ (既存のものは維持)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "トータル・コマンダーTC の”wincmd.ini”ファイルへ (既存のものは削除)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "TC関連情報の構成に移動" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "TC関連情報の構成に移動" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "ホットディレクトリのテストメニュー" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "ディレクトリ ホットリストのファイル (.hotlist) から" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "トータル・コマンダーTC の”wincmd.ini”から(&w)" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "ナビゲート(&N)…" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」のバックアップを復元" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "現在の「ディレクトリ・ホットリスト」のバックアップを作成" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "検索と置換…" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "…全て,A~Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "…項目の1グループのみ" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "…選択されたサブメニューの内容(サブレベルではない)" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "…選択されたサブメニューと全てのサブレベルの内容" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "結果のメニューをテスト" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "パスを微調整(&p)" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "ターゲット パスを微調整(&t)" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "メインパネルからの追加" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "現在の設定をディレクトリホットリストに適用する" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "ソース" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "ターゲット" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "パス" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "パスを追加するときにパスを設定する方法:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "次のパスに対してこれを行います:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "これに対する相対的パス:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "全てのサポートされているフォーマットから,毎回使用するものを尋ねる" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Unicode テキストを保存するとき UTF8 形式で保存(さもなくば,UTF16形式)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "テキストをドロップするときファイル名を自動的に生成 (さもなくば,ユーザーに操作を要求)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "ドロップした後,確認ダイアログボックスを表示(&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "パネルにテキストをドラッグ&&ドロップしたとき:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "リストの最初に最も必要な書式を配置 (ドラッグ&&ドロップを利用して)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(もし最も必要なものがなければ,2番目を選択.以下同様)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(ソースアプリケーションでは動作しない可能性がある.もし問題がある場合はチェックを外してみる.)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "ファイルシステムを表示" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "空きスペースを表示(&e)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "ラベルを表示(&l)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "ドライブリスト" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "自動インデント" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Enterで新しい行が作成されたとき,前の行と同じ行頭の空白文字数分だけキャレットをインデントする" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "右マージン:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "キャレットが行末を通過する" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "キャレットが行末位置を越えて空きスペースに入ることを可能にする" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "特殊文字を表示" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "スペースと表の特殊文字を表示" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "スマートタブ" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "<Tab>キーを使用すると,キャレットは前の行の次の非スペース文字に移動します" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "タブインデントブロック" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "アクティブな<Tab>および<Shift + Tab>がブロックインデントとして機能する場合,テキストが選択されている場合はインデントを解除" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "タブ文字の代わりにスペースを使用" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "タブ文字を指定した数の空白文字に変換します (入力時)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "末尾のスペースを削除する" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "末尾のスペースを自動削除しますが,これは編集された行にのみ適用されます" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "「スマートタブ」オプションは,テーブル化の実行よりも優先されることに注意してください" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "内部エディターのオプション" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "タブ幅:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "「スマートタブ」オプションは,テーブル化の実行よりも優先されることに注意してください" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "背景(&k)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "背景" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "リセット" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "保存" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "要素の属性" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "前景(&r)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "前景(&r)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "テキスト マーク(&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "グローバル設定の使用(と編集)(&g)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "ローカルスキーム設定の使用(&l)" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "太字(&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "イタリック(&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "取り消し線(&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "下線(&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "追加…" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "削除…" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "インポート / エクスポート" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "挿入…" #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "ソート…" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "なし" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "ツリーを常に展開" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "いいえ" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "左" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "右" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "お気に入りタブ リスト (ドラッグ&ドロップで並び替え)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "その他のオプション" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "選択したエントリーに対して何をどこに復元するか:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "キープする既存のタブ:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "ディレクトリの訪問履歴を保存:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "左で保存したタブの復元先:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "右で保存したタブの復元先:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "セパレータ" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "セパレータを追加" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "サブメニュー" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "サブメニューを追加" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "すべて折畳む" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "…選択されている要素の現在のレベルのみ" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "切り取り" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "すべてを削除!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "サブメニューとすべての要素" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "サブメニューのみ(要素は維持)" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "選択した項目" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "選択した項目の削除" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "選択した項目をレガシーな.tabファイル(複数可)にエクスポート" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "お気に入りのタブ テストメニュー" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "デフォルトの設定に従ってレガシー.tabファイル(複数可)をインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "レガシー.tabファイル(複数可)を選択した位置にインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "レガシー.tabファイル(複数可)を選択した位置にインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "レガシー.tabファイル(複数可)をサブメニューの選択した位置にインポート" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "セパレーターを挿入" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "サブメニューを挿入" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "全てのブランチを開く" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "貼り付け" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "…全て,A~Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "…項目の1グループのみ" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "項目の1グループのみをソート" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "…選択されたサブメニューの内容(サブレベルではない)" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "…選択されたサブメニューと全てのサブレベルの内容" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "結果のメニューをテスト" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "追加" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "追加(&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "複製" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "内部コマンドを選択" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "Do&wn" msgstr "下へ(&D)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "編集" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "挿入" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "挿入" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "削除(&v)" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "削除(&m)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "名前の変更(&e)" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "変数リマインダーヘルパー" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "上へ(&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "コマンドの開始パス(この文字列は引用符で囲まない)" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "アクションの名称(これはシステムに渡されるものではなく,あなたのための記憶を助けるためのものです)" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "コマンドに渡すパラメータ. スペースを含む長いファイル名は引用符で囲むこと(手入力)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "実行するコマンド(この文字列は引用符で囲まない)." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "アクションの説明" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "アクション" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "拡張子" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "ドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "ファイルの種類" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "アイコン" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "アクションはドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "拡張子はドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "ファイルの種類はドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action &name:" msgstr "アクションの名称:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "パラメータ(&s):" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始パス(&h)" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "カスタム…" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "カスタム" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "編集" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "エディタで開く" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "編集…" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "コマンドの出力を取得" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "内部エディタで開く" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "内部ビューアで開く" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "開く" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "開く…" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "端末内で実行" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "見る" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "ビューアで開く" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "表示する…" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "クリックしてアイコンを変更!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "現在の設定を全ての現在構成されているファイル名とパスに適用する" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "シェル経由で実行" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "拡張コンテキストメニュー" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "ファイルの関連付けの設定" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "選択した項目をファイルの関連づけに追加することを提案する(未登録の場合)" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "ファイルの関連付けにアクセスする場合,もしどの設定済みのファイルタイプに属していないなら,現在選択されているファイルを追加することを提案する" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "端末内で実行した後クローズ" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "端末内で実行した後開いたままにする" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "コマンド" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "アイコン" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "開始パス" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "拡張オプション項目:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "パス" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "アイコン,コマンド,開始パスの要素を追加する際のパスの設定方法:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "ファイルとパスに対して,次の操作を行います:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "これに対する相対的パス:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "確認ウィンドウの表示:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "「コピー」操作(&y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "「削除」操作(&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "リサイクル箱へ削除(Shiftキーでこの設定を戻す)(&t)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "「ゴミ箱へ削除」の操作(&e)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "読み取り専用フラグをドロップ(&r)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "「移動」操作(&M)" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "ファイル/フォルダのコメントを処理(&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "名前を変更するとき,拡張子を除いてファイル名を選択(&f)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "コピー/移動ダイアログボックスにタブ選定パネルを表示(&w)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "ファイル操作エラーはスキップして,そのエラーをログウィンドウに書く(&k)" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "チェックサム操作の確認" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "操作を実行中" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "ユーザインタフェース" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "ファイル操作用のバッファー サイズ(KB単位)(&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "ハッシュ値の計算のためのバッファサイズ(KB単位)(&h):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "操作の進行状況を最初ここに表示(&i)" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "重複した名前を自動的に変更するスタイル:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "完全削除(抹殺)の実行回数(&N):" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "DCのデフォルトにリセット" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "強調を許可" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "枠型カーソル(&F)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "非アクティブの選択色を使用" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "反転選択を使用(&s)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "カーソルの境界" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "背景(&k)" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "背景2(&r):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "カーソルの色(&u):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "カーソルのテキスト(&x):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "非アクティブカーソルの色:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非アクティブマークの色:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "アクティブでないパネルの明るさのレベル(&B)" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "マーカーの色(&M):" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "テキストの色:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "プレビューが下に表示されます.カーソルを動かしたりファイルを選択したりすると,実際のルック&フィールが直ちに分かります." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "テキストの色(&e):" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "ファイル検索を起動する際,ファイルマスクフィルタをクリア" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "ファイル名の一部を検索(&S)" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "「ファイルの検索」にメニューバーを表示" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "ファイル中の文字列検索" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "ファイル検索" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "現在のフィルタに「新規検索」ボタンをつける:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "デフォルトの検索テンプレート:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "ファイル中のテキスト検索にメモリマッピングを使って実行(&x)" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "ファイル中のテキスト検索をストリームを使って実行(&U)" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "デフォルト(&f)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "フォーマット中" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "使用するパーソナライズされた略語:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "ソート中" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "バイト(&B):" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "大文字と小文字を区別(&e)" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "正しくないフォーマット" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "日付と時刻のフォーマット(&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "ファイルサイズのフォーマット(&z):" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "ギガバイト(&G):" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "キロバイト(&K):" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "メガバイト(&y):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "新しいファイルの挿入(&I):" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "オペレーションサイズフォーマット:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "ディレクトリをソート中(&r):" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "ソート方法(&S):" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "テラバイト(&T):" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "更新されたファイルを移動(&M):" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "追加(&A)" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "ファイルリストの余白部分にダブルクリックした際に親フォルダへ遷移するか(&p)" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "タブが有効になるまではファイルリストをロードしない(&n)" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "ディレクトリ名を[角かっこ]で囲んで表示(&n)" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "新規ファイルと更新されたファイルをハイライト(&g)" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "名前を2回クリックしたら(ダブルクリックではない),その場所での名前の編集を可能にする(&r)" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "別のスレッドでファイルリストをロード(&f)" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "ファイルリストの後でアイコンをロード(&t)" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "システムファイルと隠しファイルを表示(&y)" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "<SPACE BAR>でファイルを検索するとき下のファイルに移動(<INSERT>と同様)(&W)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "ファイル作成時にWindowsスタイルのフィルタを使用(「*.*」で拡張子なしのファイルを選択,等)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "マスク入力ダイアログで毎回独立した属性フィルターを使用" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "エントリーのマーク/マーク解除" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "デフォルトで使用する属性マスクの値:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "削除(&e)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "テンプレート…" #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "ファイルの種類の色(ドラッグ&&ドロップでソート)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "カテゴリーの属性(&t):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "カテゴリーの色(&l):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "カテゴリーのマスク(&m):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "カテゴリーの名前(&n):" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "フォント" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "ホットキーを追加(&h)" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "コピー" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "削除" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "ホットキーを削除(&D)" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "ホットキーを編集(&E)" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "次のカテゴリ" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "ファイル関連のメニューにポップアップを作成" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "前のカテゴリ" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "DoubleCommanderのデフォルトを復元" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "今すぐ保存" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "コマンド名でソート" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "ホットキーでソート(グループ化して)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "ホットキーで並べ替え(1行に1つ)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "フィルタ(&F)" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "カテゴリー(&a):" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "コマンド(&m):" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "ショートカットファイル(&S):" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "順序をソート(&r):" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "カテゴリー" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "コマンド" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "順序をソート" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "コマンド" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "ホットキー" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "説明" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "ホットキー" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "パラメータ" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "コントロール" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "以下のパスとそのサブディレクトリに対して(&p):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "メニューにアクションのアイコンを表示(&m)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "ボタン上にアイコンを表示" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "オーバーレイアイコンの表示(例:リンクに対して)(&v)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "隠しファイルを淡色表示(低速)(&D)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "特別なアイコンを無効化" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " アイコンサイズ " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "アイコンテーマ" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "アイコンを表示" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " ファイル名の左にアイコンを表示 " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "ディスクパネル:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "ファイルパネル:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "全て(&l)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "全ての関連づけられた項目と実行/リンク(動作が遅くなります)(&E)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "アイコンを表示しない(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "標準のアイコンのみ(&s)" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "選択した名前を追加(&d)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "選択した名前をフルパスで追加(&f)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "以下のファイルとフォルダを無視(表示しない)(&I):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "指定先に保存(&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "左右の矢印キーでディレクトリの変更(Lynxのような動き)(&f)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "入力中" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+文字(&e):" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+文字(&t):" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "文字(&L):" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "平らなボタン(&F)" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "平らなインターフェース(&n)" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "ドライブラベルの上に空き領域インジケータを表示(&e)" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "ログウィンドウを表示" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "バックグランド動作のパネルを表示" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "メニューバーに共通の進捗状況を表示" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "コマンドラインを表示(&i)" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "現在のディレクトリを表示(&y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "ドライブボタンを表示(&d)" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "空き領域のラベルを表示(&p)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "ドライブリストのボタンを表示(&t)" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "機能キーボタンを表示(&k)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "メインメニューを表示(&m)" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "ツールバーを表示(&b)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "空き領域のラベルを短く表示(&l)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "ステータスバーの表示(&s)" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "タブストップのヘッダを表示(&h)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "フォルダのタブを表示(&w)" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "端末のウィンドウを表示(&r)" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "ドライブボタンバーを2つ表示(等幅でファイルウィンドウの上)(&x)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "中央ツールバーを表示" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " 画面レイアウト " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "ログファイルの内容を表示" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "ログファイル名に日付を含める" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "圧縮/展開(&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "外部コマンドラインの実行" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "リンク/シンボリックリンクのコピー/移動/作成(&y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "ディレクトリの作成/削除(&t)" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "エラーメッセージをログファイルに記録(&e)" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "ログファイルを作成(&r):" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "ログ ファイルの最大数" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "情報メッセージをログファイルに記録(&i)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "起動/シャットダウン" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "成功した操作をログファイルに記録(&s)" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "ファイルシステムのプラグイン(&F)" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "ファイル操作のログファイル" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "操作をログファイルに記録" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "操作の状態" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "存在しなくなったファイルのサムネールを削除(&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "設定ファイルの内容を表示" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "このエンコーディングで新規作成:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "ドライブを変更する場合は必ずドライブのルートに移動(&g)" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "ワーニングメッセージを表示(”OK”ボタンだけの提供)(&w)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "キャッシュにあるサムネールを保存(&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "サムネイル" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "ファイルコメント(説明" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TCのエクスポート/インポートについて:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "デフォルトのエンコーディング:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "設定ファイル:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TCの実行ファイル:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "ツールバー出力パス:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "ピクセル" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "サムネイルサイズ(&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "マウスによる選択(&S)" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "テキスト カーソルがマウス カーソルの後に続かなくなりました" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "アイコンをクリックにより(&k)" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "ファイルを開くアプリケーション" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "スクロール中" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "選択" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "モード(&M):" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "ダブルクリック" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "行ごと(&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "カーソルを動かしながら行ごと(&w)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "1ページごと(&P)" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "シングルクリックでファイルとフォルダを開く" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "シングルクリックでフォルダを開く(ダブルクリックでファイル)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "ログファイルの内容を表示" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "一日毎に個別のディレクトリ" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "完全パスを持つログ ファイル名" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "メニュー バーを上に表示 " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "ログの名前を変更" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "無効なファイル名文字をこの文字で置き換える (&y)" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "改名した同じログ ファイルに追加する" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "プリセットごと" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "変更されたプリセットで終了" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "起動時のプリセット" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "構成(&f)" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "有効(&n)" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "削除(&R)" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "微調整(&T)" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "説明" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "検索プラグインは,代替検索アルゴリズムや外部ツール(例えば”locate”等)の利用を可能にします(&h)." #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "現在の設定を現在構成されている全てのプラグインに適用する" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "新しいプラグインを追加するときは,自動的に微調整ウィンドウに移動" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "構成:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "使用する Lua ライブラリ ファイル:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "これに対する相対的パス:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "新しいプラグインを追加するときのプラグインファイル名のスタイル:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "圧縮プラグインはアーカイブの操作に使われます(&e)" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "コンテンツ・プラグインは,ファイルリストにおいて,MP3のタグのようなファイルの拡張情報や画像属性の表示を可能にします.またこれは,検索と複数リネームツールで使用します(&g)" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "ファイルシステム・プラグインは,OSによってアクセスを禁止されているディスクやPalm/PocketPCのような外部デバイスへのアクセスを可能にします(&l)." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "ビューア・プラグインは,ビューアの中で,画像,スプレッドシート,データベース等のフォーマットを表示します(&w).(F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "有効" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "登録済み" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "ファイル名" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "開始文字(名前は最初に入力した文字で始まらなくてはなりません)(&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "終了文字(入力したドット.の直前の文字に一致しなくてはなりません)(&d)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "オプション" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "完全な名前の一致" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "検索ケース" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "これらの項目を検索" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "タブのロックを解除するとき変更した名前をそのままにする" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "タブの1つをクリックしたらターゲットパネルをアクティブにする(&p)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "タブが1つしかなくてもタブヘッダを表示する(&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "アプリケーションを閉じる際,重複したタブを閉じる" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "全てのタブを閉じてもよいか確認(&f)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "ロックしたタブを閉じる際,確認する" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "タブに表示するタイトルをこの長さに制限する(&L)" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "ロックされたタブにはアスタリスク(*)を表示(&w)" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "タブを複数行に並べる(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+UP 新しいタブをフォアグランドに開く(&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "新しいタブを現在のタブの近くに開く(&n)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "可能であれば既存のタブを再利用する" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "タブの「閉じる」ボタンを表示(&b)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "タブのタイトルにドライブ文字を常に表示" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "タブヘッダのフォルダ" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "文字" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "タブをダブルクリックした際実行するアクション:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "タブの位置(&b)" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "なし" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "いいえ" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "左" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "右" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "再保存の後お気に入りのタブの設定に移動" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "新しい設定を保存した後お気に入りのタブの設定に移動" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "お気に入りのタブの追加オプションを有効にします(復元の際ターゲットにする側の選定等)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "新しいお気に入りのタブを保存する際のデフォルトの追加設定:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "フォルダータブヘッダーの追加" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "タブを復元する際維持する既存のタブ:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "左側で保存したタブの復元先:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "右側で保存したタブの復元先:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "お気に入りのタブのディレクトリ履歴を保存し続ける:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "新しいお気に入りタブを保存する際のメニュー中のデフォルトの位置:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "端末中で実行されるコマンドを反映するため,通常 {command} がこの位置になくてはなりません" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "端末中で実行されるコマンドを反映するため,通常 {command} がこの位置になくてはなりません" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "端末を実行するだけのコマンド:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "端末でコマンドを実行し,実行後は端末を閉じるためのコマンド:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "端末でコマンドを実行し,実行後も端末を開いたままにするコマンド:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "パラメータ:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "パラメータ:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "パラメータ:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "ボタンを複製(&l)" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "ホットキーを編集(&k)" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "新しいボタンを挿入(&I)" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "選択" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "その他…" #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "ホットキーを削除(&y)" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "提案" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "ボタンの種類,コマンド,パラメータに基づいてDCにツールチップを提案させる" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平らなボタン(&F)" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "コマンドのエラーを報告" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "キャプションを表示(&w)" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "コマンドのパラメータを1行に1項目入力.F1キーを押してパラメータについてのヘルプを参照." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "外観" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "バーのサイズ(&B):" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "コマンド(&d):" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "パラメータ(&s):" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "ヘルプ" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "ホットキー:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "アイコン(&n):" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "アイコンのサイズ(&s)" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "コマンド(&m)" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "パラメータ(&P)" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始パス(&h)" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "スタイル:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "ツールのヒント(&T):" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "全てのDCコマンドを含むツールバーを追加する" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "外部コマンドを" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "内部コマンドを" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "区切りを" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "サブツールバーを" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "バックアップ…" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "現在のツールバー…" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "トータル・コマンダーTCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "トータル・コマンダーTCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "トータル・コマンダーTCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "トータル・コマンダーTCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "トップツールバー…" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "ツールバーのバックアップを保存" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "トータル・コマンダーTCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "トータル・コマンダーTCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "トータル・コマンダーTCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "トータル・コマンダーTCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "ツールバーのバックアップから復元" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)から" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "トータル・コマンダーTCの.BARファイル(1つ)から" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "トータル・コマンダーTC の”wincmd.ini”から…" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "検索と置換…" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "上にある全ての項目の全てで…" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "全てのコマンドで…" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "全てのアイコン名で…" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "全てのパラメータで…" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "全ての開始パスで…" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "区切り" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "スペース" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "ボタンタイプ" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "現在の設定を全ての構成されているファイル名とパスに適用する" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "コマンド" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "アイコン" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "開始パス" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "パス" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "ファイルとパスに対して,次の操作を行います:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "これに対する相対的パス:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "アイコン,コマンド,開始パスの要素を追加する際のパスの設定方法:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "プログラムの実行後も端末のウィンドウを開いたままにする(&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "端末内で実行(&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "使用する外部プログラム(&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "追加のパラメータ(&d)" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "実行するプログラムへのパス(&P)" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "コピー" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "削除(&e)" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "テンプレート…" #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "その他..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "選択したファイルタイプのツールチップ設定:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "ツールチップに関する一般的なオプション:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "ファイルパネル内のファイルに対してツールチップを表示します(&S)" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "カテゴリーのヒント(&h):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "カテゴリーのマスク(&m):" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "ツールチップ隠蔽遅延:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "ツールチップ表示モード:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "ファイルの種類(&F):" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "変更を破棄する" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "ツールヒント ファイルの種類の並べ替え" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "ファイルパネルの上のバーをダブルクリックして" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "メニューと内部コマンド付きで" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "ツリー選択でダブルクリックして終了" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "メニューと内部コマンド付きで" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "タブをクリックして(そのように構成されていれば)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "キーボードショートカットを使っている場合,現在の選択を返してそのウィンドウを閉じる" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "ツリー選択でシングルクリックして終了" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "コマンド ライン ヒストリに使用" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "ディレクトリの訪問履歴に使用" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "内容閲覧履歴に使用" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "選択に関係する挙動:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "ツリー表示メニューに関係するオプション:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "ツリー表示メニューをどこで使用するか:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*注:大文字小文字の区別,アクセントを無視する・無視しないと入ったオプションは,使用される文脈毎,ならびにセッション毎に個別に保存されまた復元されます." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "ディレクトリ・ホットリストと共に:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "お気に入りとタブと共に:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "履歴と共に:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "…" #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "項目の選択のため,キーボードショートカットを使用・表示する" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "フォント" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "レイアウトと色のオプション:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "背景色:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "カーソルの色:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "見つかったテキストの色:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "カーソルが被った見つかったテキスト:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "通常のテキストの色:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "カーソルが被った通常のテキスト:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "ツリー表示メニューのプレビュー:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "第二のテキストの色:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "カーソルが被った第二のテキスト:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "ショートカットの色:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "カーソルが被ったショートカット:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "選択不可能なテキストの色:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "カーソルが被った選択不可能要素:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "左側の色を変更すると,ツリー表示メニューがこのサンプルでどのように見えるかをこの場所でプレビューとして見ることができます." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "ブックビューアのカラム数(&N)" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "構成(&f)" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "ファイルを圧縮" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "アーカイブを個別に作成(選択されたファイル/ディレクトリに1個ずつ)(&r)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "自己解凍式のアーカイブを作成(&x)" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "暗号化(&y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "アーカイブに移動(&v)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "複数ディスクのアーカイブ(&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "最初にTARアーカイブに入れる(&u)" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "パス名も含める(再帰的)(&p)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "ファイル(複数可)をこのファイルに詰める:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "圧縮ツール" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "全てを解凍して実行(&a)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解凍して実行(&U)" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "圧縮ファイルの属性" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "属性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "圧縮比:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日付:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "圧縮方法:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "元のサイズ:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "ファイル:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "圧縮後のサイズ:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "圧縮ツール:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "時間:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "印刷設定" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "マージン (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "ボトム(&B):" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "左(&L):" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "右(&R):" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "トップ(&T):" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "フィルターパネルを閉じる" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "検索する/フィルタに使う文字列を入力" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "大文字と小文字を区別" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "ディレクトリ" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "ファイル" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "最初にマッチ" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "最後にマッチ" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "フィルタ" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "検索とフィルターを入れ替え" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "ルールの追加(&M)" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "ルールの削減(&e)" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "コンテンツプラグインを使用.組み合わせ(&c):" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "プラグイン" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "フィールド" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "演算子" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "値" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "AND (完全一致)(&A)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "OR (部分一致)(&O)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "適用(&A)" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "テンプレート…" #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "テンプレート…" #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "OK(&O)" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "重複ファイルの選択" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "各グループの少なくとも 1 つのファイルを選択解除したままにする(&L)" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "名前/拡張子により選択を削除(&R):" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "名前/拡張子で選択(&n):" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "キャンセル(C)" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK(O)" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "区切り(&a)" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "カウントの対象" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "結果:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "挿入するディレクトリを選択 (複数選択可能)(&S)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "終了(&d)" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "開始(&r)" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "キャンセル(C)" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK(O)" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "最初のカウントの対象" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "最後のカウントの対象" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "範囲の説明" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "結果:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "挿入する文字を選択(&S):" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[最初,最後](&F)" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[最初,長さ](&L)" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "終了(&d)" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "開始(&r)" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "終了(&e)" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "開始(&t)" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "属性の変更" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "アーカイブ" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "作成済み:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "非表示" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "アクセス済み:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "修正済み:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "読み取り専用" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "サブディレクトリを含めて" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "システム" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "タイムスタンプの属性" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(値に変更がない場合,フィールドは灰色で表示)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "テキスト:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行権" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(値に変更がない場合,フィールドは灰色で表示)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進数:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "読み取り" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "ソート(&S)" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "キャンセル(C)" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK(O)" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "要素をドラッグ アンド ドロップして並べ替える" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "ファイルの分割" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "CRC32の検証ファイルが必要" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "分割のサイズと個数" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "ファイルをディレクトに分割:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "分割数(&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "バイト(&B)" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "ギガバイト(&G)" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "キロバイト(&K)" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "メガバイト(&M)" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "ビルド" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "フリーPascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "オペレーティングシステム" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "プラットフォーム" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "リビジョン" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "バージョン" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "ウィジエットバージョン" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "シンボリックリンクを作成" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "可能な場合は相対パスを使用" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "リンクが指し示す目標(&D)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "リンク名(&L)" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "両側で削除" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- 左を削除" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> 右を削除" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "選択を削除" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "コピー対象として選択 (既定の方向)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "コピー対象として選択 -> (左から右)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "コピー方向を逆転" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "コピー対象として選択 <-(右から左)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "削除対象として選択 <-> (両方)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "削除対象として選択 <- (左)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "削除対象として選択 -> (右)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "閉じる" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "テンプレート…" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "同期" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "ディレクトリの同期" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "非対称" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "内容で" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "日付を無視" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "選択項目のみ" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "サブディレクトリ" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "表示:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "名前" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "サイズ" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "日付" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "日付" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "サイズ" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "名前" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(メインウィンドウで)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "左の項目を表示" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "右の項目を表示" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "重複" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "単独" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "\"比較\"ボタンを押して開始" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "同期" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "上書きを確認" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "ツリー表示メニュー" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "ホットのディレクトリの選択:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "検索は大文字小文字を区別する" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "すべて折りたたむ" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "すべて展開する" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "検索はアクセントや合字を無視する" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "検索は大文字小文字を区別しない" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "検索はアクセントや合字を厳密に扱う" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "検索した文字列がブランチ名に見つかった場合は,分岐の内容を表示しない" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "検索文字列が分岐名に見つかった場合,要素が一致しなくても分岐全体を表示する" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "ツリー表示メニューを閉じる" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "ツリー表示のメニューの構成" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "ツリー表示メニューの色の構成" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "新規追加(&d)" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "変更(&h)" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "デフォルト(&f)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "微調整用プラグイン" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "内容からアーカイブの種類を検出(&t)" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "ファイルの削除が可能(&l)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "暗号化をサポート(&n)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "通常のファイルとして表示(圧縮ツールのアイコンを隠す)(&w)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "メモリー中での圧縮をサポート(&k)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "存在するアーカイブの修正が可能(&m)" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "アーカイブは複数のファイルを含むことが可能(&A)" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "新しいアーカイブの作成が可能(&v)" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "オプションダイアログをサポート(&u)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "アーカイブ中の文字列検索を許可(&g)" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "説明(&D):" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "検出する文字列(&e):" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "拡張子(&E)" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "フラグ:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "名前(&N):" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "プラグイン(&P):" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "プラグイン(&P):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "ビューアについて…" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "「この製品について」メッセージを表示" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "自動リロード" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "エンコードの変更" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "ファイルをコピー" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "ファイルをコピー" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "クリップボードにコピー" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "クリップボードにフォーマット付きでコピー" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "ファイルを削除" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "ファイルを削除" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "終了(&x)" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "検索" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "次を検索" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "前を検索" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "全画面" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "指定行へ移動…" #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "指定行へ移動" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "センター" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "次(&N)" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "次のファイルをロード" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "前(&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "前のファイルをロード" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "左右反転" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "ミラーリング" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "上下反転" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "ファイルを移動" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "ファイルを移動" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "プレビュー" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "印刷(&r)…" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "印刷の設定(&s)…" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "再ロード" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "現在のファイルを再ロード" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "180°回転" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "180°回転" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "270°回転" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "-90°回転" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "90°回転" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "+90°回転" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "保存" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "名前を付けて保存…" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "名前を付けてファイルを保存…" #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "スクリーンショット" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "3秒遅延" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "5秒遅延" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "全て選択" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "バイナリーとして表示(&B)" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "ブックとして表示(&o)" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "十進数として表示(&D)" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "16進数として表示(&H)" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "テキストとして表示(&T)" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "ラップテキストとして表示(&W)" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "テキストカーソルを表示(&u)" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "グラフィックス" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "引き延ばし" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "画像を引き伸ばし" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "引き延ばしだけ" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "元に戻す" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "元に戻す" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "ズーム" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "ズームイン" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "ズームイン" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "ズームアウト" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "ズームアウト" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "トリミングする" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "全画面" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "フレームのエクスポート" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "強調表示" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "次のフレーム" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "塗りつぶし" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "前のフレーム" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "赤目補正" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "サイズ変更" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "スライドショー" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "ビューア" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "楕円" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "画像(&I)" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "ペン" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "矩形" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "回転" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "スクリーンショット" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "表示(&V)" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "プラグイン" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "開始(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "停止(&t)" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "ファイル操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "常に最前面" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "「ドラッグ &ドロップ」を使用してキュー間で操作を移動(&U)" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "キャンセル" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "キャンセル" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "新しいキュー" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "分離したウィンドウで表示" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "キューの先頭に置く" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "キューに最後に置く" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "キュー" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "キューから" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "キュー1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "キュー2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "キュー3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "キュー4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "キュー5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "分離したウィンドウで表示" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "すべて一時停止(&P)" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "リンクを辿る(&l)" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "ディレクトリが存在する場合(&e)" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "ファイルが存在する場合" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "キャンセル(&C)" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "OK(&O)" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "コマンドライン:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "パラメータ:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "開始パス:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "構成(&f)" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "暗号化(&y)" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "日付/時間をコピー(&a)" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "バックグラウンドで動作(別の接続)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "管理者権限を与える必要があります" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "このオブジェクトを作成する:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "このオブジェクトを削除する:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "このオブジェクトの属性を取得する:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "このハード リンクを作成する:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "このオブジェクトを開く:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "このオブジェクトの名前を変更する:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "このオブジェクトの属性を設定する:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "このシンボリックリンクを作成する:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "取得日" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "高さ" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "幅" #: uexifreader.rsmake msgid "Manufacturer" msgstr "メーカー" #: uexifreader.rsmodel msgid "Camera model" msgstr "カメラモデル" #: uexifreader.rsorientation msgid "Orientation" msgstr "方向" # 元の英語の品質悪い. #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "このファイル(ファイルの最終的な組み合わせの検証に役立ちます)が見つかりません.\n" "%s\n" "\n" "これファイルが利用可能になり,準備ができたら”OK”を押す.\n" "そうでない場合は,”キャンセル”を押して継続する." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "クイックフィルタをキャンセル" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "現在の操作をキャンセル" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "ドロップされたテキストについて,拡張子付きでファイル名を入力してください" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "インポートするテキスト形式" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "破損:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "一般:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "紛失:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "読み取りエラー:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "成功:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "チェックサムを入力し,アルゴリズムを選択:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "チェックサムを確認" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "合計:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "この新規検索のフィルタをクリアしますか?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "クリップボードには,有効なツールバーのデータが含まれていません." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "全て;アクティブパネル;左パネル;右パネル;ファイル操作;設定;ネットワーク;その他;パラレル・ポート;印刷;マーク;セキュリティ;クリップボード;FTP;ナビゲーション;ヘルプ;ウィンドウ;コマンドライン;ツール;ユーザ;タブ;ソーティング;ログ" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "レガシーな順のソート;A-Z順のソート" #: ulng.rscolattr msgid "Attr" msgstr "属性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日付" #: ulng.rscolext msgid "Ext" msgstr "拡張子" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名前" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "サイズ" #: ulng.rsconfcolalign msgid "Align" msgstr "整列" #: ulng.rsconfcolcaption msgid "Caption" msgstr "キャプション" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "削除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "フィールドの内容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移動" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "幅" #: ulng.rsconfcustheader msgid "Customize column" msgstr "カラムをカスタマイズ" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "ファイルの関連づけを設定" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "コマンドラインとパラメータを確認中" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "コピー(%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "インポートされたDCのツールバー" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "インポートされたTCのツールバー" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " 追加: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " 削除: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "2つのファイルは同じものです!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " 一致: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " 変更: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "エンコード" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "中止(&o)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全て(&l)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "追加(&p)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "ソースファイルの名前を自動修正(&u)" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "ターゲットファイルの自動リネーム(&u)" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "キャンセル(&C)" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "内容で比較(&b)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "継続(&C)" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "マージ(&M)" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "全てマージ(&g)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "プログラムの終了(&x)" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "無視(&n)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "全て無視(&g)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "いいえ(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "無し(&e)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "OK(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "その他(&h)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "上書き(&O)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "全て上書き(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "全ての大きい項目を上書き(&L)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "全ての古い項目を上書き(&d)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "全ての小さい項目を上書き(&m)" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "名前の変更(&e)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "再開(&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "再試行(&t)" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "管理者として(&m)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "スキップ(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "全てスキップ(&k)" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "アンロック(&U)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "はい(&Y)" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "ファイルのコピー" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "ファイルの移動" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "一時停止(&s)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "開始(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "キュー" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "スピード %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "スピード %s/s,残り時間 %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "リッチテキストフォーマット;HTMLフォーマット;Unicodeフォーマット;テキストフォーマット" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "ドライブの空き容量インジケータ" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<ラベル無し>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<メディア無し>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "ダブル・コマンダーの内部エディタ." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "指定行へ移動:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "指定行へ移動" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "ファイル名:" #: ulng.rseditnewopen msgid "Open file" msgstr "ファイルを開く" #: ulng.rseditsearchback msgid "&Backward" msgstr "後方へ(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "検索" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "前方へ(&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "置換" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "外部エディタを使用" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "内部エディタを使用" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "シェル内で実行" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "端末内で実行した後クローズ" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "端末内で実行した後開いたままにする" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "“]”が行%sに見つかりません" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "コマンド \"%s\" の前に拡張子が定義されていません.無視されます." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "左;右;アクティブ;非アクティブ;両方;なし" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "いいえ;はい" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "DCからエクスポート済み" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "尋ねる;上書き;スキップ" # どの文脈か不明 #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "尋ねる;マージ;スキップ" # どの文脈か不明 #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "尋ねる;上書き;古い項目を上書き;スキップ" # どの文脈か不明 #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "尋ねる;これ以上設定しない;エラーを無視" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "任意のファイル" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "アーカイブ構成ファイル" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC ツールヒント ファイル" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "ディレクトリホットリストファイル" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "実行可能ファイル" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini構成ファイル" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "レガシー DC .tab ファイル" #: ulng.rsfilterlibraries msgid "Library files" msgstr "ライブラリ ファイル" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "プラグインファイル" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "フィルター" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC ツールバー ファイル" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC ツールバー ファイル" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml構成ファイル" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "テンプレートを定義" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s レベル(複数可)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全て(深さは無制限)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "現在のディレクトリのみ" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "ディレクトリ%sは存在しません!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "見つかった項目数:%d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "検索テンプレートを保存" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "テンプレート名:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "スキャンした項目数:%d" #: ulng.rsfindscanning msgid "Scanning" msgstr "スキャン中" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "ファイルの検索" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "スキャンの時刻: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "開始時刻" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "コンソール・フォント(&C)" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "エディタのフォント(&E)" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "機能ボタンフォント" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "ログのフォント(&L)" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "メインフォント(&f)" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "パスのフォント" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "検索結果のフォント" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "ツリー ビュー メニューのフォント" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "ビューアのフォント(&V)" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "ブックビューアのフォント(&B)" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "空き領域 %s (%s 中)" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s の空き領域" #: ulng.rsfuncatime msgid "Access date/time" msgstr "アクセス 日付/時間" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "属性" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "コメント" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "圧縮されたサイズ" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "作成 日付/時間" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "拡張子" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "グループ" #: ulng.rsfunchtime msgid "Change date/time" msgstr "日付/時間を変更" #: ulng.rsfunclinkto msgid "Link to" msgstr "リンク先" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "修正 日付/時間" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "ファイル名" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "拡張子なしのファイル名" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "所有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "パス" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "サイズ" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "種類" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "ハードリンク作成時エラーが発生しました." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "なし;名前(昇順);名前(降順);拡張子(昇順);拡張子(降順);サイズ(降順);サイズ(昇順);日付(降順);日付(昇順)" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "警告! .hotlistバックアップファイルを復元する場合,既存のリストは,インポートされたもので置換されるため消去されます.\n" "\n" "このまま進めてよろしいですか?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "コピー/移動ダイアログ" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "差分検出" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "コメントダイアログの編集" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "エディタ" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "ファイルの検索" #: ulng.rshotkeycategorymain msgid "Main" msgstr "メイン" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "複数リネーム" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "ディレクトリの同期" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "ビューア" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "その名前のセットアップは既に存在します.\n" "上書きしますか?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "本当にデフォルトを復元しますか?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "本当に設定<%s>を消去しますか?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "<%s>のコピー" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "あなたの新しい名前を入力" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "少なくとも1つのショートカットファイルを維持しなくてはなりません." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "新しい名前" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "<%s>セットアップファイルが変更されました.\n" "今すぐそれを保存しますか?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "\"ENTER\"に対するショートカットはありません" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "コマンド名;ショートカットキー(グループ化して);ショートカット(1行に1つ)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "デフォルトのバーファイルへの参照を見つけることができません" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "”ファイル検索”ウィンドウのリスト" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "選択解除マスク" #: ulng.rsmarkplus msgid "Select mask" msgstr "選択マスク" #: ulng.rsmaskinput msgid "Input mask:" msgstr "入力マスク:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "その名前のカラムビューは既に存在します." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "現在編集中のカラムビューを変更するためには,保存,コピーまたは削除します" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "カスタム列の構成" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "新しいカスタムカラム名を入力" #: ulng.rsmenumacosservices msgid "Services" msgstr "サービス" #: ulng.rsmenumacosshare msgid "Share..." msgstr "共有..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "アクション" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<デフォルト>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "8 進 数" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "ショートカットを作成…" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "ネットワークドライブの切断…" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "編集" #: ulng.rsmnueject msgid "Eject" msgstr "取り出し" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "ここに抽出…" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "ネットワークドライブの割り当て…" #: ulng.rsmnumount msgid "Mount" msgstr "マウント" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "新規" #: ulng.rsmnunomedia msgid "No media available" msgstr "利用可能なメディアがありません" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "開く" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "ファイルを開くアプリケーション" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "その他…" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "ここでパック…" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "復元" #: ulng.rsmnusortby msgid "Sort by" msgstr "ソートのキー" #: ulng.rsmnuumount msgid "Unmount" msgstr "アンマウント" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "ビュー" #: ulng.rsmsgaccount msgid "Account:" msgstr "アカウント:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "すべてのダブルコマンダー内部コマンド" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "説明: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "アーカイバコマンドライン用の追加パラメータ:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "引用符の中に囲みますか?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "下記結果ファイルのCRC32が正しくありません:\n" "<%s>\n" "\n" "それを承知で,この破壊した結果ファイルを保持しますか?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "ファイル<%s>をそれ自身にコピー/移動することはできません!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "指定されたファイル%sをコピーできません" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "ディレクトリ<%s>を削除できません" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "ディレクトリ<%s>をディレクトリでない<%s>で上書きすることはできません" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ディレクトリ<%s>への移動ができません!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "全てのアクティブでないタブを削除しますか?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "この<%s>タブはロックされています.それも,閉じるしますか?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "パラメータの確認" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "終了してもよろしいですか?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "ファイル %s は変更されました.過去に遡ってコピーしますか?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "過去へのコピーができませんでした.変更したファイルを維持しますか?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリをコピーしますか?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "選択した<%s>をコピーしますか?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "<新しいファイルタイプ ”%s ファイル”>" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "DC ツールバー ファイルを保存する場所とファイル名を入力" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "カスタムアクション" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "部分的にコピーされたファイルを削除しますか?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリを削除しますか?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "選択した %d 個のファイル/ディレクトリをごみ箱に入れて削除しますか?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "選択された<%s>を削除しますか?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "選択した<%s>をゴミ箱に入れて削除しますか?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "<%s>をゴミ箱に入れて削除することができません.直接削除しますか?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "ディスクが利用できません" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "カスタムアクション名を入力:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "ファイルの拡張子を入力:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "ファイルの種類名を入力:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "拡張子<%s>のための新しいファイルタイプ名を入力" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "アーカイブ ・ データの CRC エラー" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "データが不良" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "サーバー<%s>に接続できません." #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "ファイル<%s>を<%s>にコピーできません" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "ファイル %sを移動できません" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "<%s>という名前のディレクトが既に存在します." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "日付<%s>はサポートされていません" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "ディレクトリ<%s>が存在します!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "関数がユーザーによって中止されました" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "ファイルを閉じる際のエラー" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "ファイルを作成できません" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "これ以上のファイルがアーカイブには存在しません" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "既存のファイルを開くことができません" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "ファイルからの読み取り中のエラー" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "ファイルへの書き込み中のエラー" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "ディレクトリ<%s>を作成できません!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "無効なリンク" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "ファイルが見つかりません" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "メモリが不足です" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "サポートされていない関数!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "コンテキストメニューのコマンドでのエラー" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "構成の読み込み時のエラー" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "正規表現での構文エラー!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "ファイル名<%s>を<%s>に変更できません" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "ファイルの関連付けを保存できません!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "ファイルを保存できません" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "<%s>の属性を設定出来ません." #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "<%s>の日付/時刻を設定出来ません." #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "<%s>の所有者/グループを設定出来ません." #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "<%s>のファイル権限が設定できません" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "バッファが小さすぎます" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "圧縮するファイルが多すぎます" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "アーカイブのフォーマットが不明です" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "実行可能: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "終了ステータス:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "お気に入りのタブから全てのエントリを本当に削除していいですか?(これは「やり直し」の効かない操作です!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "ここに他のエントリをドラッグ" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "このお気に入りのタブ・エントリの名前を入力:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "新しいお気に入りのタブのエントリを保存中" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "正常にエクスポートされたお気に入りのタブの数: %d個(%d中)" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "デフォルトの追加設定(新しいお気に入りのタブのディレクトリ履歴の保存):" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "正常にインポートされたファイルの数:%d個(%d個中)" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "インポートされたレガシーなタブ" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "インポートする.tabファイル(複数可)を選択します(一度に複数かもしれません!)" # 英語がおかしい. # have not been saved yet. #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "お気に入りのタブへの最終変更がまだ保存されていません.続行する前に保存しますか?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "お気に入りのタブのディレクトリ履歴を必ず保存:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "サブメニューの名前" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "お気に入りのタブをロード:<%s>" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "既存のお気に入りのタブのエントリに現在のタブを保存" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "ファイル<%s>は変更されました.保存しますか?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s バイト, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "上書き:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "ファイル<%s>が存在します.上書きしますか?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "ファイル:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "ファイル<%s>が見つかりません." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "ファイル操作を実行中です" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "まだ幾つかのファイル操作が終了していません.この状態でダブル・コマンダーを終了すると,データを失う可能性があります." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "ターゲット名の長さ (%d) は %d 文字以上です!\n" "%s\n" "ほとんどのプログラムはこのような長い名前のファイル/ディレクトリにアクセスすることができますされません!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "ファイル %s は読み取り専用/非表示/システムとしてマークされます.それでも削除しますか?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "現在のファイルを再ロードすることで加えた変更を失ってもよいですか?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "ファイル<%s>のサイズは,送り先のファイルシステムには大きすぎます!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "フォルダ<%s>が存在します.マージしますか?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "シンボリックリンク<%s>を辿りますか?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "インポートするファイルフォーマットを選択" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "選択した %d 個のディレクトリを追加" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "選択したディレクトリを追加: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "現在のディレクトリを追加: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "コマンドを実行" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」の構成" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "本当に,「ディレクトリ・ホットリスト」の全部の要素を削除しますか?(これは「やり直し」の効かない操作です!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "これは右のコマンド実行します:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "これは「ホットディレクトリ」として名前が記録されています " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "アクティブフレームをこのパスに変更します:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "また,非アクティブフレームをこのパスに変更します:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "項目のバックアップ中のエラー…" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "項目のエクスポート中のエラー…" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "全てをエクスポート!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "「ディレクトリ・ホットリスト」のエクスポート - エクスポートしたい項目を選択して下さい" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "選択した項目をエクスポート" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "全てをインポート!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "「ディレクトリ・ホットリスト」のインポート - インポートしたい項目を選択して下さい" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "選択した項目をインポート" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "パス(&P):" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "インポートする<.hotlist>ファイルの場所を指定" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "ホットディレクトリ名" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "新しい項目数:%d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "エクスポートする項目が何も選択されていません!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "ホットディレクトリのパス" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "選択したディレクトリを再度追加: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "現在のディレクトリを再度追加: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "復元する「ディレクトリ・ホットリスト」の場所とファイル名を入力して下さい" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "コマンド:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(サブメニューの終了)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "メニューの名前:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "名前:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(区切り)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "サブメニューの名前" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "ホットディレクトリのターゲット" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "ディレクトリの変更後,アクティブフレームが指定された順序で並べ替えられる必要があれば指定" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "ディレクトリの変更後,非アクティブフレームが指定された順序で並べ替えられる必要があれば指定" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "相対パス,絶対パス,Windowsの特別フォルダ等を適切に選択する関数." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "保存された項目の合計: %d 個\n" "\n" "バックアップファイル名: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "エクスポートされた項目の合計: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "サブメニュー<%s>中の全ての項目を削除しますか?\n" "答えが「いいえ」の場合,メニューの区切りだけが消され,サブメニュー中の項目はそのまま残ります." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "「ディレクトリ・ホットリスト」ファイルを保存する場所とファイル名を入力して下さい" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "結果であるファイルの長さが正しくありません: <%s>" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "次のディスクまたは何か同様のものを挿入して下さい.\n" "\n" "次のファイルを書き込むためのものです:\n" "<%s>\n" "残りの書き込みサイズ:<%d>バイト" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "コマンドラインでのエラー" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "無効なファイル名" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "設定ファイルのフォーマットが無効" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "無効な 16 進数: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無効なパス" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "パス<%s>には認められていない文字が含まれています." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "これは有効なプラグインではありません!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "このプラグインはダブル・コマンダー<%s.%s>のためのにビルドされており,<%s>では動作しません!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "無効な呼び出し" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "無効な選択." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "ファイルリストを読み込み中…" #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "トータル・コマンダーTCの設定ファイル(wincmd.ini)の場所を指定" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TCの実行ファイル (totalcmd.exe or totalcmd64.exe)の場所を指定" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "ファイル<%s>をコピー" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "ファイル<%s>を削除" #: ulng.rsmsglogerror msgid "Error: " msgstr "エラー: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "外部コマンドを起動" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "外部コマンドの結果" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "ファイル<%s>を抽出" #: ulng.rsmsgloginfo msgid "Info: " msgstr "情報: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "リンク<%s>を作成" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "ディレクトリ<%s>を作成" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "ファイル<%s>を移動" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "ファイル<%s>に圧縮" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "プログラムのシャットダウン" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "プログラムの開始" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "ディレクトリ<%s>を削除" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完了: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "シンボリックリンク<%s>を作成" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "ファイル<%s>の完全性をテスト" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "ファイル<%s>を完全消去(抹殺)" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "ディレクトリ<%s>を完全消去(抹殺)" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "マスターパスワード" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "マスターパスワードを入力して下さい:" #: ulng.rsmsgnewfile msgid "New file" msgstr "新しいファイル" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "次のボリュームを解凍します" #: ulng.rsmsgnofiles msgid "No files" msgstr "ファイルがありません" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "ファイルが選択されていません." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "ターゲットドライブには十分な空きスペースがありません.継続しますか?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "ターゲットドライブには十分な空きスペースがありません.もう一度やりますか?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "ファイル<%s>を削除できません" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "機能は提供されていません." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "オブジェクトが存在しません!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "ファイルが別のプログラムで開かれているため,アクションを完了できません:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "下に示すのはプレビューです.カーソルを動かしファイルを選択すれば,様々な設定のルック&フィールが直ちに分かります." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "パスワード:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "パスワードが一致しません!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "パスワードを入力して下さい:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "パスワード(ファイアウォール用):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "確認のためパスワードを再度入力して下さい:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "<%s>を削除(&D)" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "プリセット<%s>が既に存在します.上書きしますか?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "プリセット \"%s\" を削除してもよいですか?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "コマンド<%s>を実行中の問題" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "ドロップした文字列に対するファイル名:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "このファイルを使用可能にして下さい.もう一度やりますか?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "このお気に入りのタブの分かりやすい名前を入力" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "このメニューの新しい名前を入力" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリの名前を変更/移動しますか?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "選択した<%s>の名前を変更/移動しますか?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "このテキストを置き換えますか?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "諸々の変更を有効にするため,ダブル・コマンダーを再起動して下さい" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "エラー: Lua ライブラリ ファイル \"%s\" の読み込み中に問題が発生" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "ファイルの拡張子<%s>をどのファイルタイプに追加するか選択" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "選択済みファイル:%sバイト(%sバイト中)ファイル個数:%d個(%d個中)ディレクトリ個数:%d個(%d個中)" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "実行するファイルを選択" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "チェックサムファイルだけを選択して下さい!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "次のボリュームの場所を選択して下さい" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "ボリュームラベルをセット" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "特別なディレクトリ" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "アクティブフレームからパスを追加" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "非アクティブフレームからパスを追加" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "選択したパスを参照して使用" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "環境変数を使用…" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "ダブル・コマンダー専用のパスへ移動…" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "環境変数を取得…" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "その他のWindowsの特別なフォルダに移動…" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Windowsの特別なフォルダ(TC)に移動…" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "ホットディレクトリパスに対して相対にする" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "パスを絶対パスにする" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "ダブル・コマンダーの特別パスに対しての相対パスにする…" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "環境変数に対しての相対パスにする…" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "ウィンドウズの特別なフォルダ(TC)に対する相対パスにする…" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "その他のWindowsの特別なフォルダに対する相対パスにする…" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "ダブル・コマンダーの特別パスを使用…" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "ホットディレクトリパスを使用します" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "その他のWindowsの特別なフォルダを使用する…" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windowsの特別なフォルダ(TC)を使用する…" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "このタブ<%s>はロックされています! 他のタブで開きますか?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "タブの名前を変更" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "新しいタブの名前:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "ターゲットのパス:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "エラー!:TCの設定ファイルが見つかりません:\n" "<%s>" # どの実行ファイルのこと? #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "エラー!:TCの設定実行ファイルが見つかりません:\n" "%s" # なぜ,TCの実行が関係するのか不明. # TCの文字列を全部取り込んでいる? #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "エラー!:TCはまだ動作していますが,この操作のために終了する必要があります.\n" "閉じてOKを押すか,キャンセルを押して中止." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "エラー!:お望みのTCツールバー出力フォルダが見つかりません:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "トータル・コマンダーTCツールバーファイルを保存する場所とファイル名を入力して下さい" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "警告: プロセスを終了すると,データの損失やシステムの不安定化など,望ましくない結果が生じる可能性があります.プロセスは,終了する前に状態またはデータを保存する機会を与えられません.プロセスを終了しますか?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "<”%s”>が現在クリップボードにあります" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "選択したファイルの拡張子は認識可能なファイルタイプにありません" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "インポートすべき<.toolbar>ファイルの場所を指定して下さい" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "インポートすべき<.BAR>ファイルの場所を指定して下さい" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "復元するツールバーの場所とファイル名を入力して下さい" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "ツールバーを保存しました.\n" "ファイル名: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "選択されたファイル名が多すぎます." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "特定不能" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "エラー:予期しないツリー表示メニューの使用方法!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<拡張子無し>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<名前無し>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "ユーザ名:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "ユーザ名(ファイアウォール用):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "検証:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "選択したチェックサムを確認しますか?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "ターゲット ファイルが壊れています.チェックサムの不一致です!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "ボリュームラベル:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "ボリュームサイズを入力して下さい:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Lua ライブラリの場所を設定しますか?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリを完全削除(抹殺)しますか?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "選択した<%s>を完全削除(抹殺)しますか?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "with" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "間違ったパスワードです!\n" "もう一度お試しください!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "「名前(1).拡張子」「名前(2).拡張子」などに自動に名前を変更しますか?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "カウンタ" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "日付" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "プリセット名" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "変数名の定義" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "変数値の定義" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "変数名を入力" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "変数\"%s\" の値を入力" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "無視して[最後の1つ]として保存;保存するかどうかをユーザーに確認;自動的に保存" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "拡張子" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "ファイル名" # 文脈不明 #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "変更無し;大文字;小文字;最初だけ大文字;各単語の先頭を大文字;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[最後に使用]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "[最後の1つ]のプリセットの下の最後のマスク;最後のプリセット;新しいマスク" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "複数リネーム" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "位置xの文字" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "位置xからyの文字" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "完了日" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "完了時間" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "カウンタ" #: ulng.rsmulrenmaskday msgid "Day" msgstr "日" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "日(2桁)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "曜日(短縮形 例:”mon”)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "曜日(完全形 例:”monday”)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "拡張子" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "パスと拡張子を持つ完全なファイル名" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "完全なファイル名,pos x から y までの文字" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "時間" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "時間(2桁)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "分" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "分(2桁)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "月" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "月(2桁)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "月の名前(短縮形 例:”jan”)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "月の名前(完全形 例:”january”)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "ファイル名" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "親フォルダ" #: ulng.rsmulrenmasksec msgid "Second" msgstr "秒" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "秒(2桁)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "実行段階での変数" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "年(2桁)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "年(4桁)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "プラグイン" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "プリセットを別名で保存" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "プリセット名は既に存在します.上書きしますか?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "新しいプリセット名を入力" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "「%s」プリセットが変更済みです.\n" "今すぐ保存しますか?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "プリセットの並べ替え" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "時間" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "警告,重複した名前!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "ファイルに含まれる行数が正しくありません:%dは%dでなくてはなりません!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "維持;クリア;プロンプト" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "内部コマンドに等価なものは存在しません" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "”ファイル検索\"ウィンドウがまだありません…" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "閉じてメモリから解放すべき他の\"ファイル検索\"ウィンドはありません…" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "開発" #: ulng.rsopenwitheducation msgid "Education" msgstr "教育" #: ulng.rsopenwithgames msgid "Games" msgstr "ゲーム" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "グラフィックス" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "アプリ (*.app)|*.app|すべてのファイル (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "マルチ メディア" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "ネットワーク(&N)" #: ulng.rsopenwithoffice msgid "Office" msgstr "オフィス" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "その他" #: ulng.rsopenwithscience msgid "Science" msgstr "科学" #: ulng.rsopenwithsettings msgid "Settings" msgstr "設定" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "システム" #: ulng.rsopenwithutility msgid "Accessories" msgstr "アクセサリー" #: ulng.rsoperaborted msgid "Aborted" msgstr "中止しました" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "チェックサムを計算中" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "<%s>でチェックサムを計算中" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "<%s>のチェックサムを計算中" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "計算中" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "<%s>を計算中" #: ulng.rsopercombining msgid "Joining" msgstr "結合中" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "<%s>にあるファイルを<%s>に結合中" #: ulng.rsopercopying msgid "Copying" msgstr "コピー中" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "<%s>から<%s>にコピー中" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "<%s>を<%s>にコピー中" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "ディレクトリを作成中" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "ディレクトリ<%s>を作成中" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "削除中" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "<%s>で削除中" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "<%s>を削除中" #: ulng.rsoperexecuting msgid "Executing" msgstr "実行中" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "<%s>を実行中" #: ulng.rsoperextracting msgid "Extracting" msgstr "抽出中" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に抽出中" #: ulng.rsoperfinished msgid "Finished" msgstr "完了" #: ulng.rsoperlisting msgid "Listing" msgstr "リスト中" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "<%s>をリスト中" #: ulng.rsopermoving msgid "Moving" msgstr "移動中" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に移動中" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "<%s>を<%s>に移動中" #: ulng.rsopernotstarted msgid "Not started" msgstr "開始していません" #: ulng.rsoperpacking msgid "Packing" msgstr "圧縮中" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に圧縮中" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "<%s>を<%s>に圧縮中" #: ulng.rsoperpaused msgid "Paused" msgstr "一時停止" #: ulng.rsoperpausing msgid "Pausing" msgstr "一時停止中" #: ulng.rsoperrunning msgid "Running" msgstr "実行中" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "属性を設定中" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "<%s>で属性を設定中" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "<%s>の属性を設定中" #: ulng.rsopersplitting msgid "Splitting" msgstr "分割中" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "<%s>を<%s>に分割中" #: ulng.rsoperstarting msgid "Starting" msgstr "開始中" #: ulng.rsoperstopped msgid "Stopped" msgstr "停止済み" #: ulng.rsoperstopping msgid "Stopping" msgstr "停止中" #: ulng.rsopertesting msgid "Testing" msgstr "テスト中" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "<%s>でテスト中" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "<%s>をテスト中" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "チェックサムを検証中" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "<%s>でチェックサムを検証中" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "<%s>のチェックサムを検証中" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "ファイルソースへのアクセスを待機中" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "ユーザの応答を待機中" #: ulng.rsoperwiping msgid "Wiping" msgstr "完全削除(抹殺)中" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "<%s>で完全削除(抹殺)中" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "<%s>を完全削除(抹殺)中" #: ulng.rsoperworking msgid "Working" msgstr "動作中" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "最初に追加;最後に追加;賢く追加" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "新規ファイルタイプのヒントを追加" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "現在編集中のアーカイブ構成を変更するには,[適用] または [削除] をクリックします" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "モード依存,追加コマンド" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "空でない場合は追加" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "アーカイブ ファイル (長い名前)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "アーカイバ実行プログラムの選択" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "アーカイブ ファイル (短い名前)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "アーカイブ・リスト・エンコードの変更" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "\"%s\" を本当に削除してもよいですか?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "エクスポートされたアーカイバ構成" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "エラーレベル" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "アーカイ構成のエクスポート" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d要素のファイル”%s”へのエクスポートが完了しました." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "エクスポートする項目を選択します" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "ファイルリスト (長い名前)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "ファイルリスト (短い名前)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "アーカイバ構成のインポート" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d要素のファイル”%s”からのインポートが完了しました." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "アーカイバ構成をインポートするファイルを選択" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "インポートするファイルを選択します" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "パス名なしでファイル名だけを使用" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "ファイル名なしでパス名だけを使用" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "アーカイブプログラム(長い名前)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "アーカイブプログラム(短い名前)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "すべての名前を引用" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "スペース付きで名前を引用" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "処理する単一のファイル名" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "ターゲットサブディレコリー" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "ANSI エンコードを使用" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "UTF8 エンコードを使用" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "アーカイバの設定を保存する場所とファイル名を入力" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "アーカイブのタイプ名:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "プラグイン<%s>を右に関連づけ:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "最初;最後;" # 「アルファベット順(言語最初)」を選んでも,言語は最後になる.恐らく,ソートのキーの間違い. #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "クラッシックな順番;レガシーな順番;アルファベットの順番" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "完全に展開する;完全に折りたたむ" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "アクティブパネルを左に,非アクティブパネルを右に(レガシーな仕様);左のパネルを左に,右のパネルを右に" #: ulng.rsoptenterext msgid "Enter extension" msgstr "拡張子を入力" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "最初に追加;最後に追加;アルファベット順にソート" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "独立ウィンドウ;最小化した独立ウインドウ;操作パネル" #: ulng.rsoptfilesizefloat msgid "float" msgstr "小数" # 元の英語の質が悪い. #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "ショートカット<%s>をcm_Delete用に登録しようとしています.この設定を逆にするために使用できます." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "<%s>のホットキーを追加" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "ショートカットを追加" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "ショートカットを設定できません" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "ショートカットを変更" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "コマンド" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "ショートカット<%s>(cm_Delete用)には,この設定に優先するパラメータがあります.グローバル設定を使うため,このパラメータを変更しますか?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "ショートカット<%s>(cm_Delete用)は,ショートカット<%s>に一致するよう変更すべきパラメータがあります.その変更をしますか?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "説明" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "<%s>のホットキーを編集" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "パラメータを修正/確定して下さい" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "ホットキー" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "ホットキー" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<無し>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "パラメータ" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "ファイル削除のショートカットを設定" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "この設定をショートカット<%s>で使えるようにするためには,ショートカット<%s>を(cm_Delete)にアサインする必要がありますが,既に<%s>アサインされています.これを変更しますか?" # resersed Shiftって何? #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "ショートカット<%s>(cm_Delete用)は,シーケンスショートカットであり逆Shiftのホットキーはアサインできません.この設定は恐らく動作しません." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "ショートカットは使用中です" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "ショートカット<%s>は既に使用中です." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "変更して<%s>にしますか?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "<%s>で<%s>のために使用中です" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "このコマンドのために別のパラメータで使用中" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "アーカイーバ" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "自動更新" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "システム全体の挙動" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "概要表示" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "色彩設定" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "詳細表示" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "設定" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "詳細表示のカスタム設定" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "ディレクトリホットリスト追加" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "ドラッグ&ドロップ" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "ドライブリストボタン" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "お気に入りのタブ" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "ファイルの関連づけ(追加)" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "ファイルの関連づけ" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "新規" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "ファイル操作" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "ファイルパネル" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "ファイル検索" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "ファイルビュー" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "ファイルビューの追加" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "ファイルタイプ" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "フォルダのタブ" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "フォルダー タブの追加" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "フォント" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "強調表示" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "ホットキー" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "アイコン" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "無視するリスト" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "キー設定" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "表示言語" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "レイアウト" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "ログ" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "その他" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "マウス" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "複数リネーム" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "“%s” でオプションが変更されました.\n" "\n" "変更を保存しますか?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "プラグイン" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "クイック検索/フィルタ" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "端末" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "ツールバー" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "ツールバーの追加" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "ツールバー中央" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "ツール" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "ツールのヒント" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "ツリー表示メニュー" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "ツリー表示メニューの色" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "無し;コマンドライン;クイック検索;クイックフィルター" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左ボタン;右ボタン;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "ファイルリストの先頭;ディレクトリの後(ディレクトリがファイルの前にソートされている場合);ソートされた位置;ファイルリストの末尾" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "パーソナライズされた 実数;バイト;キロバイト;メガバイト;ギガバイト;テラバイト" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "プラグイン<%s>は既に右の拡張子にアサインされています:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "無効にする" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "有効(&n)" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "有効" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "説明" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "ファイル名" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "拡張子により" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "プラグインにより" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名前" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "WCXプラグインのソートは,プラグインを拡張子で表示する場合にのみ可能!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "登録済み" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "ツールヒント ファイルの種類の名前を変更" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "影響される;影響されない(&S)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "ファイル;ディレクトリ;ファイルとディレクトリ(&F)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "フォーカスが外れたらフィルターパネルを隠す(&H);次のセッションのため設定の変更を保存" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "大文字小文字の区別なし;ロケールの設定による(aAbBcC);最初に大文字次に小文字(ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "名前でソートして常に最初に表示;ファイルと同一視してソートし最初に表示;ファイルと区別せずソート" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "アクセントを考慮の上アルファベット順;特殊文字のソート付きアルファベット順;自然なソート;アルファベット・数字の順;特殊文字のソート付き自然なソート" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "上部;下部;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "区切り;内部コマンド;外部コマンド;メニュー(&e)" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "ファイル タイプ ツールヒントの設定を変更するには,[適用] または [削除] をクリックします" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "カテゴリーの名前(&n):" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "「%s」はすでに存在します!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "\"%s\" を本当に削除してもよいですか?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "エクスポートされたツールヒント ファイル タイプの構成" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "ツールヒント ファイル タイプの構成をエクスポート" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d要素のファイル”%s”へのエクスポートが完了しました." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "エクスポートする項目を選択します" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "ツールヒント ファイル タイプの構成をインポート" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d要素のファイル”%s”からのインポートが完了しました." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "ツールヒント ファイル タイプの構成をインポートするファイルを選択" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "インポートするファイルを選択します" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "ツールヒントファイルタイプの設定を保存する場所とファイル名を入力" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "ツールヒント ファイルの種類名" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DCレガシー: Copy (x) ファイル名.拡張子;Windows: ファイル名 (x).拡張子;その他: ファイル名(x).拡張子" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "位置を変えない;新しいファイルには同じ設定を使う;ソートした位置へ" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "完全な絶対パス;%COMMANDER_PATH%への相対パス;以下に対する相対パス" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "含む(大文字小文字区別)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "含む" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "等しい(大文字小文字を区別)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "フィールド \"%s\" が見つかりません!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "含まない(大文字小文字区別)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "含まない" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "不一致(大文字小文字区別)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "正規表現に一致しない" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "プラグイン\"%s\"が見つかりません!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "正規表現" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "ユニット \"%s\" がフィールド “%s”用に見つかりません!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "ファイル:%d,フォルダ:%d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "<%s>のアクセス権限の変更ができません." #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "<%s>の所有権の変更ができません." #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "ファイル" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "ディレクトリ" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "名前付きパイプ" #: ulng.rspropssocket msgid "Socket" msgstr "ソケット" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "スペシャル・ブロック・デバイス" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "スペシャル・キャラクタ・デバイス" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "シンボリックリンク" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "不明なタイプ" #: ulng.rssearchresult msgid "Search result" msgstr "検索結果" #: ulng.rssearchstatus msgid "SEARCH" msgstr "検索" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<名前のないテンプレート>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "DSXプラグインを使用したファイル検索が既に動いています.\n" "新しいものを起動するためには既に動いているものが終了する必要があります." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "WDXプラグインを使用したファイル検索が既に動いています.\n" "新しいものを起動するためには既に動いているものが終了する必要があります." #: ulng.rsselectdir msgid "Select a directory" msgstr "ディレクトリを1つ選択して下さい" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "最新;最古;最大;最小;グループの最初;グループの最後" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "ウィンドウを選択" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "<%s>のヘルプを表示(&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "全て" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "カテゴリ" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "カラム" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "コマンド" #: ulng.rssimpleworderror msgid "Error" msgstr "エラー" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "失敗しました!" #: ulng.rssimplewordfalse msgid "False" msgstr "無効" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "ファイル名" #: ulng.rssimplewordfiles msgid "files" msgstr "ファイル" #: ulng.rssimplewordletter msgid "Letter" msgstr "文字" #: ulng.rssimplewordparameter msgid "Param" msgstr "パラメータ" #: ulng.rssimplewordresult msgid "Result" msgstr "結果" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "成功!" #: ulng.rssimplewordtrue msgid "True" msgstr "真" #: ulng.rssimplewordvariable msgid "Variable" msgstr "変数" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "作業ディレクトリ" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "バイト" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gバイト" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kバイト" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Mバイト" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Tバイト" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "ファイル:%d,ディレクトリ:%d,サイズ:%s (%s バイト)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "ターゲットディレクトリを作成できません!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "正しくないファイルサイズのフォーマットです!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "ファイルを分割できません!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "パーツの数が100を超えます!続けますか?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "自動;1457664B - 3.5”高密度1.44M;1213952B - 5.25”高密度1.2M;730112B - 3.5”倍密度720K;362496B - 5.25”倍密度360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "ディレクトリを選択:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "プレビューだけ" #: ulng.rsstrpreviewothers msgid "Others" msgstr "その他" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "備考" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "平らな表示" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "限定的" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "単純" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "すばらしい" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "驚異的" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "途方もない" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "ディレクトリ訪問履歴からディレクトリを選択" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "お気に入りタブを選択:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "コマンドライン履歴からコマンドを選択" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "メインメニューからアクションを選択" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "メインツールバーからアクションを選択" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "ホットディレクトリからディレクトリを選択:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "ファイル表示履歴からディレクトリを選択" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "ファイルまたはディレクトリを選択" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "シンボリックリンクの作成中のエラー." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "デフォルトの文字列" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "プレーンテキスト" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "何もしない;タブを閉じる;お気に入りのタブにアクセス;タブのポップアップメニュー" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "日" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "時" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "分" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "月" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "秒" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "週" #: ulng.rstimeunityear msgid "Year(s)" msgstr "年" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "お気に入りのタブの名前を変更" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "お気に入りのタブのサブメニューの名前を変更" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "差分検出ツール" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "エディタ" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "エラー:差分検出ツールの開始" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "エラー:エディタの開始" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "エラー:端末の開始" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "エラー:ビューアの開始" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "端末" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "システムのデフォルト;1 秒;2 秒;3 秒;5 秒;10 秒;30 秒;1 分;隠さない" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "DC とシステムのツールチップを組み合わせる.DC が最初(レガシー);DCとシステムのツールチップを組み合わせる.システムを最初;可能な場合は DC ツールチップを表示し,相でない場合はシステム;DC ツールチップのみを表示;システム ツールヒントのみを表示" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "ビューア" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "このエラーを「何をしている時に起きたかを書いて」次の<%s>ファイルと一緒に,バグ追跡システムに報告して下さい.<%s>を押して継続;または,<%s>を押してプログラムを終了." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "左右両パネル(アクティブから非アクティブへ)" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "左右両パネル(左から右へ)" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "パネルのパス" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "名前または何をしたいかを括弧で囲みます" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "拡張子なしでファイル名のみ" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "完全なファイル名(パス+ファイル名)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "変数<”%”>のヘルプ" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "デフォルトの推奨値つきでパラメータを入力するようユーザに求めます" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "パネルのパスの最後のディレクトリ" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "ファイルのパスの最後のディレクトリ" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "左パネル" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "ファイル名のリストを保存する一時ファイル名" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "完全なファイル名(パス+ファイル名)のリストを保存する一時ファイル名" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "リスト中のファイル名はBOM付きUTF-16 エンコーディング" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "リスト中のファイル名はBOM付きUTF-16エンコーディング(二重引用符の中)" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "リスト中のファイル名はUTF-8エンコーディング" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "リスト中のファイル名はUTF-8エンコーディング(二重引用符の中)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "相対パスでのファイル名のリストを保存する一時ファイル名" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "ファイル拡張子のみ" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "ファイル名のみ" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "何が可能かを示す他の例" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "パス(行末の区切り文字無し)" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "この位置から行末まで(パーセント変数インジケータは”#”)" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "パーセント記号を返します" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "この位置から行末まで(パーセント変数インジケータは”%”)" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "名前のの前に “-a” またはしたいことを付加" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[パラメータの入力を求める;デフォルトの値を提案する]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "相対パスでのファイル名" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "右パネル" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "右パネル中で2番目に選択されたファイルのフルパス" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "実行前にコマンドを表示" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[簡単なメッセージ]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "簡単なメッセージが表示されます" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "アクティブパネル(ソース)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "非アクティブパネル(ターゲット)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "ファイル名はここから引用されます(デフォルト)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "コマンドは端末で実行され,終了後も端末は開いたままです" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "パスには行末の区切り文字がつきます" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "ファイル名はここから引用されることはありません" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "コマンドは端末で実行され,終了後に端末は閉じます" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "パスには行末の区切り文字がつきません(デフォルト)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "ネットワーク" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "ダブル・コマンダーの内部ビューア." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "劣悪な品質" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "エンコード" #: ulng.rsviewimagetype msgid "Image Type" msgstr "画像タイプ" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "新しいサイズ" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "<%s>はありません!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "ペン;矩形;楕円" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "外部ビューアで" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "内部ビューアで" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "置換の回数:%d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "置換は起こりませんでした." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.it.po�����������������������������������������������������������0000644�0001750�0000144�00001305572�15104114162�017276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2013-11-03 13:34+0100\n" "Last-Translator: Krypton <krypton873@gmail.com>\n" "Language-Team: Krypton <krypton873@gmail.com>\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Italiano\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Scegli modello..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Contro&lla spazio libero" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Cop&ia attributi" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copia p&roprietà" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copia d&ata/ora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Lin&k valido" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Elimina attri&buto di sola lettura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&scludi cartelle vuote" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Se&gui i link" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Riserva spazio" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Cosa fare quando non è possibile impostare data, attributi, etc. del file?" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usa il modello del file" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando le cartelle esistono" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quando i file esistono" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quando &non è possibile impostare proprietà" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nessun modello>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copia negli appunti" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Home Page:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisione" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versione" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Seleziona gli attributi" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archivio" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mpresso" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Cartella" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Codificato" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Nascosto" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Sola le&ttura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "S&parse" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Link simbolico" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporaneo" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Attributi NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Attributi generali" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Come te&sto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calcola Checksum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&rea un file di Checksum separato per ogni file" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Salva file di Checksum in:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifica Checksum..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codifica" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ag&giungi" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onnetti" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestore connessioni" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Connetti a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&ggiungi alla coda" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pzioni" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sa&lva opzioni come predefinite" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copia il(i) file" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nuova coda" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Coda 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Coda 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Coda 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Coda 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Coda 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Commenta file/cartella" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "M&odifica commento per:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Codifica:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Confronto Automatico" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Modalità binaria" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annulla" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copia blocco a destra" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copia blocco a destra" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copia blocco a sinistra" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copia blocco a sinistra" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ripristina" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Ripristina" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selezion&a Tutto" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annulla" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Annulla" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Es&ci" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Cerca" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Cerca" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Trova prossimo" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Trova prossimo" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Sostituisci" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Sostituisci" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prima differenza" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prima differenza" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignora maiusc./minusc." #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignora Spazi" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Mantenere scorrimento" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Ultima differenza" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Ultima differenza" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Differenze della linea" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Prossima differenza" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Prossima differenza" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Apri sinistra..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Apri destra..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Colora sfondo" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Differenza precedente" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Differenza precedente" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Ricarica" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ricarica" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Salva" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Salva" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Salva come..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Salva come..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Salva a sinistra" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Salva a sinistra" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Salva a sinistra come..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Salva a sinistra come..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Salva a destra" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Salva a destra" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Salva a destra come..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Salva a destra come..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Confronta" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Confronta" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codifica" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codifica" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Confronta file" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Sinistra" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Destra" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Azioni" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Co&difica" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opzioni" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Aggiungi nuovo collegamento alla sequenza" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Rimuovi l'ultimo collegamento dalla sequenza" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Solo per questi controlli" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (ognuno in una linea separata):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Collegamenti:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Info" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configurazione" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configurazione" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Taglia" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Elimina" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Trova" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Cerca" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Trova prossimo" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Trova prossimo" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Incolla" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ripristina" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ripristina" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Sostituisci" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Sostituisci" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selezion&a Tutto" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Seleziona Tutto" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annulla" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Annulla" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Chiudi" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Esci" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Exit" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nuovo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nuovo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Apri" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Apri" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Ricarica" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Salva" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Sal&va Come.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Salva come" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Modifica" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ai&uto" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codifica" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Apri come" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Salva come" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Evidenziazione sintassi" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fine linea" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Annulla" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Distringui m&aiusc./minusc." #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Cerca da ^" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Espressioni &Regolari" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Seleziona solo &testo" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Solo parole in&tere" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opzione" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Sostituisci con:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Ri&cerca per:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direzione" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Decomprimi file" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Estrai i nomi di percorso se salvati con i file" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Estrai ogni archivio in una cartella &separata (nome dell'archivio)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "S&ovrascrivi file esistenti" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Alla &cartella:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Estrai file corrispondenti al filtro file:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Password per il file codificato:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Attendere..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nome file:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Da:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clicca su chiudi quando il file temporaneo può essere cancellato!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Al pannello" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Visualizza tutto" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operazione corrente" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Da:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "A:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietà" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Testo:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Creato:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Percorso:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppo" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Ultimo accesso:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Ultima modifica:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Ultimo cambio di stato:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ottale:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Proprietario" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Dimensione:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link simbolico a:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valore" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Plugin" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietà" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Chiudi" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "A&nnulla" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Chiudi" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Chiudi" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Modifica" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Feed to &listbox" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Vai al file" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Cerca Data" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Ultima ricerca" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nuova ricerca" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Avvia" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Mostra" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Aggiungi" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "C&arica" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "S&alva" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sa&lva con \"Start in directory\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Se salvato allora \"Start in directory\" sarà ripristinato al caricamento del modello. Usalo se vuoi effettuare una ricerca su una cartella specifica" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usa modello" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Trova file" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Dist&ingui maiusc./minusc." #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data da:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dat&a a:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "D&imensione da:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Di&mensione a:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Cerca &testo in file" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Segui link s&imbolico" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Trova file che N&ON contengono il testo" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Non &più vecchio di:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "&Cerca usando parte del nome del file" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Espressioni &Regolari" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "So&stituisci con" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Cartelle e &file selezionati" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Data/&Ora da:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Data/O&ra a:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utilizza plugin per le ricerche:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Inserisci i nomi delle cartelle che devono essere escluse dalla ricerca, separati con \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Inserisci i nomi di file che devono essere esclusi dalla ricerca, separati con \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Inserisci i nomi di file separati con \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valore" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Cartelle" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "File" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Cerca Data" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Attri&buti" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codi&fica:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&scludi sottocartelle" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Escludi file" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Filtro file" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Avvio nella &cartella" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Trova so&ttocartelle:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Ricerche &precedenti:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opzioni" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Rimuovi dalla lista" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Visualizza tutti gli elementi trovati" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostra nel visualizzatore" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Visualizza" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanzate" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carica/Salva" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugin" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Risultati" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Cerca" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Cerca" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "D&istingui maiusc./minusc." #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Espressioni &Regolari" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Password:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nome utente:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Crea un Hard Link" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinazione a cui punta il collegamento" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome del co&llegamento" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Salva in..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Elemento" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Nome file" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Giù" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Giù" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Elimina" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Elimina" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Su" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Su" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Info" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Aggiungi nome file nella linea di comando" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Aggiungi percorso e nome file nella linea di comando" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copia percorso completo nella linea di comando" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Visualizzazione breve" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcola spazio &occupato" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Cambia cartella" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Vai alla cartella superiore" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Vai alla cartella radice" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcola Check&sum..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Verifica Chec&ksum..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Pulisci il file di registro operazioni" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Pulisci la finestra di registro operazioni" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Chiudi &tutte le schede" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Chiudi la scheda" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Prossima riga di comando" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Scrivi nella riga di comando il prossimo comando della cronologia" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Riga di comando precedente" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Scrivi nella riga di comando il precedente comando della cronologia" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "VIsta colonne" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Confronta per &contenuto" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Confronta cartelle" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Confronta cartelle" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostra menu contestuale" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copia il nome del file con il &percorso completo" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copia nome(i) di file negli appunti" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copia file senza chiedere conferme" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copia nello stesso pannello" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copia" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Most&ra spazio occupato" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Taglia" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Cronologia cartelle" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Cartelle pre&ferite" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Modifica" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Modifica co&mmento..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Modifica nuovo file" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Modifica campo percorso precedente nella lista file" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Scambia &pannelli" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Es&ci" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Estrai file..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "&Associazioni file..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Unisci file..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostra proprietà &file" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividi file..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Attiva linea di comando" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Posiziona cursore sul primo file in lista" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Posiziona cursore sull'ultimo file in lista" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Crea &Hard Link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Contenuti" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Modalità &pannelli &orizzontali" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastiera" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Sinistra &= Destra" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Apri lista unità di sinistra" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carica selezione dagli a&ppunti" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carica selezione da &file..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Crea cartella" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Seleziona tutti i file con la stessa e&stensione" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverti selezione" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Seleziona tutto" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Deseleziona un gr&uppo..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Seleziona un &gruppo..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Deseleziona tutto" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizza finestra" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Strumento Multi-&Rinomina" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connetti alla Rete..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Disconnetti dalla Rete" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connessione &rapida alla rete..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nuova scheda" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Vai alla scheda &successiva" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Apri" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tenta di aprire l'archivio" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Apri barra file" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Apri car&tella in una nuova scheda" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Apri lista &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualizzatore operazioni" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opzioni..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Comprimi file..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Imposta la posizione del divisore" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Inc&olla" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Vai alla scheda &precedente" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rapido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Ricerca rapida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Pannello di visualizzazione &rapida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Aggiorna" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Sposta" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Sposta/rinomina i file senza chiedere conferma" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Rinomina" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Ri&nomina scheda" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Ripristina selezione" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "In&verti ordine" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Destra &= Sinistra" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Apri lista unità di destra" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Avvia &terminale" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sal&va selezione" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Salva s&elezione su file..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Ricerca..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Cambia &attributi..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloccato con cartelle aperte in &nuove schede" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normale" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Bloccato" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloccato con modifiche alla &cartella consentite" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Apri" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Apri usando le associazioni di file di sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Visualizza pulsante menu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Visualizza cronologia della linea di comando" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostra file &nascosti/di sistema" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordina per &attributi" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ordina per da&ta" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordina per &estensione" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordina per &nome" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordina per &dimensione" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Attiva/disattiva la lista dei file da ignorare" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Crea &Link Simbolico..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destinazione &= Sorgente" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Verifica archivio(i)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Anteprime" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visualizza anteprime" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Trasferisci cartella evidenziata dal cursore nella finestra di sinistra" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Trasferisci cartella evidenziata dal cursore nella finestra di destra" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deseleziona i file con la stessa estensione" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Visualizza" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostra cronologia dei percorsi visitati per la vista attiva" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Vai alla prossima voce nella cronologia" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Vai alla voce precedente nella cronologia" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visita il sito di Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Cancellazione sicura" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Esci" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Cartella" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminale" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Cartelle preferite" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostra la cartella corrente del pannello di destra in quello di sinistra" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Vai alla cartella home" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Vai alla cartella radice" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Vai alla cartella superiore" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Cartelle Preferite" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostra la cartella corrente del pannello di sinistra nel pannello di destra" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Percorso" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copia..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Crea collegamento..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Pulisci" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Nascondi" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Seleziona tutto" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Sposta..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Crea un collegamento simbolico (simlink)" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Pannello Opzioni" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Esci" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Ripristina" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Avvio" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfigurazione" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&File" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Selezione" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rete" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Visualizza" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opzioni" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Pannelli" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Modifica" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Annulla" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Scorciatoia" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Aggiungi" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Aiuto" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definire..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Distingui maiusc./minusc." #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Filtro di input:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&O seleziona il tipo predefinito:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nuova cartella" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Inserisci un nuovo nome di cartella:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nuova Dimensione" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altezza :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualità compressione Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Larghezza :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altezza" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Larghezza" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Estensione" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Pulisci" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Pulisci" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Chiudi" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configurazione" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Contatore" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Contatore" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Elimina" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Estensione" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Estensione" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Modifica" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Plugin" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Plugin" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Rinomina" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Rinomina" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Reimposta tutto" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Salva" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Salva Come.." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Ora" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Ora" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Strumento Multi-Rinomina" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Distingui maiusc./minusc." #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "A&bilita" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&spressioni Regolari" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usa la sostituzione" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Contatore" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Trova && Sostituisci" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Filtro" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Preset" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Estensione" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Trova..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervallo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nome file" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Sostituisci" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Numero di p&artenza" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Larghezza" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Azioni" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Modifica" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Vecchio nome del file" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Nuovo nome del file" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Percorso del file" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Scegli un'applicazione" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personalizzato" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Salva associazione" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Setta l'applicazione selezionata come azione predefinita" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipo di file da aprire: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Nomi di file multipli" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI multipli" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome di file singolo" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI singolo" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Applica" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Ai&uto" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opzioni" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Si prega si selezionare una delle sotto pagine, questa pagina non contiene alcuna impostazione" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copia" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "E&limina" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Altro..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Rinomina" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opzioni:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Modalità di Format parsing:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "A&bilita" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "De&bug mode" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "M&ostra output della console" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Agg&iungi:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hiviatore:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Elimina:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "De&scrizione:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "E&stensione:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Es&trai:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Estrai senza percorso:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Posizione ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID Seek Range:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archiviatori:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Elencazione &finita (opzionale):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&mato lista:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Avvio elencazione (opzionale):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Password query string" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Crea archivio autoestraente:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Test:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Config.a&utomatica" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Addizionale" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Generale" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quando dimen&sione, data o attributi cambiano" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per i seguenti &percorsi e relative sottocartelle:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quando i file sono &creati, eliminati o rinominati" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quando l'applicazione è in secondo &piano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Disabilita auto-aggiornamento" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Aggiorna lista file" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Tray icon sempre &visibile " #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Nascondi automaticamente i dispositivi smontati" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Sposta icone nella s&ystem tray quando minimizzato" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "C&onsenti solo una copia di DC in esecuzione" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Qui puoi inserire una o più unità o punti di mount, separati da \";\"" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Lista &nera delle unità" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa &indicatore gradiente" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Modalità binaria" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Testo:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicat.color.s&fondo:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indicat.color.Primo&Piano:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificato:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificato:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Taglia &testo alla larghezza colonna" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linee &orizzontali" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linee &verticali" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&uto-riempimento colonna" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostra griglia" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Auto-ridimensionamento colonne" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Dimen&sione automatica colonna" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Cronologia linea di co&mando" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Cronologia &cartelle" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "&Cronologia filtri file" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Schede" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sal&va configurazione" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Cronologia Trov&a/Sostituisci" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Cartelle" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Posizione file di configurazione" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Salva all'uscita" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Imposta sulla linea di comando" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Cartella p&rogramma (versione portabile)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Cartella home dell'&utente" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nuovo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Salva come" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Salva" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Consentire sovrapposizione colori" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generale" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordo cursore" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Sfondo:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Sfondo 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "&Columns view:" msgstr "Con&figura colone per file system:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Colore cursore:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Colore testo:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Dimensione:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Colore testo:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Colore selezione:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Aggiungi colonna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nome:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Percorso:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Mostra finestra di conferma dopo il rilascio dell'oggetto" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostra &file system" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostra spazio lib&ero" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostra &etichetta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista unità" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "S&fondo" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "S&fondo" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Salva" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Attributi degli elementi" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "P&rimo piano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "P&rimo piano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Selezione-testo" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usa (e modifica) schemi di impostazione &globale" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usa schemi di impostazione &locale" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Grassetto" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Corsivo" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Cancellare" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Sottolinea" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "O&n" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Taglia" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Incolla" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Aggiungi" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Aggiungi" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Giù" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Modifica" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Rinomina" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Su" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Azioni" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Estensioni" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipi di file" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Azione:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Comando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Percor&so di avvio" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Modifica" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Apri nell'Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Prendi l'output dal comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Apri" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Esegui in nel terminale" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Visualizza" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Apri nel visualizzatore" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Icone" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostra finestra di conferma per:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operazione di cop&ia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operazione di &eliminazione" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Elimina dal cestino (il tasto shift inverte questa impostazione)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operazione di e&liminazione dal cestino" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Rimuovi proprietà sola lettura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operazione di s&postamento" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Processa commenti con file/cartelle" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Seleziona solo il nome del &file quando si rinomina (non l'estensione)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostr&a pannello di selezione nella finestra di dialogo copia/sposta" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "S&alta operazioni sui file con errori e riportali nella finestra di registro operazioni" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Esecuzione di operazioni" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfaccia utente" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Dimensione del &Buffer per operazioni sui file (in kB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostra &inizialmente il progresso delle operazioni in:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Numero passaggi di cancellazione sicura" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Consentire sovrapposizione colori" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Usa il cursore &Frame" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sa selezione invertita" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Bordo cursore" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Sfo&ndo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Sfon&do 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "C&olore Cursore:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&sto Cursore:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Livello di &luminosità del pannello inattivo" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Selezione colore:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Colore t&esto:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Cerca parte del nome del file" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Cerca file" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Usa mappatura della memoria per la ricerca di te&sto nei file" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Usa stream per la ricerca di testo nei file" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Prede&finito" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formattazione" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordinamento" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Di&stingui maiusc./minusc.:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato non corretto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato &data e ora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato della dimen&sione file" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Inserisci nuovi file:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "O&rdinamento cartelle:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metodo di ordinamento:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Sposta file aggiornati:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Aggiungi" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Aiuto" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "No&n caricare la lista di file finché una scheda viene attivata" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "&Mostra parentesi quadre attorno alle cartelle" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Evi&denzia i file nuovi/aggiornati" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Carica lista &file in un processo separato" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Carica le icone &dopo la lista file" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostra file nascosti/di s&istema" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Quando si selezionano file con <SPAZIO>, il cursore viene spostato sul file successivo (come <INS>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Elimina" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modello..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Colore dei tipi di file (ordina con drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "&Attributi categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Co&lore categoria:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Filtro categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nome categoria:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Font" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "&Aggiungi scorciatoia" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Elimina" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Elimina scorciatoia" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Modifica scorciatoia" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&mandi:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Scorciatoia file:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Scorciatoie" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descrizione" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Scorciatoia" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per i seguenti &percorsi e le relative sottocartelle:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostra icone per le azioni nei &menu" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostra i&cone sostitutive, ad es. per i collegamenti" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Disabilita icone speciali" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Dimen&sione Icona " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Mostra icone alla sinistra del nome file " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Tutto" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Tutti gli associati + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&No icone" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "S&olo icone predefinite" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Aggiungi nomi selezionati" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Aggiungi nomi selezionati con percorso co&mpleto" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignora (non mostrare) i seguenti file e cartelle:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Salva in:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Le frecce sinistra e destra cambiano cartella (movimenti stile Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Digitazione" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+L&ettere:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Le&ttere:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Lettere:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Pulsanti &piatti" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "I&nterfaccia piatta" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostra indicatore spazio lib&ero sull'etichetta unità" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostra finestra di registro operazioni" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostra pannello di registro operazioni in secondo piano" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostra progressi comuni nella barra menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostra &linea di comando" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostra &cartella corrente" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostra pulsanti uni&tà" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostra etichetta s&pazio libero" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostra pulsan&te lista unità" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostra i tasti &funzione" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostra &menu principale" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Mostra barra &pulsanti" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostra &etichetta breve di spazio libero" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostra barra di &stato" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostra le intestazioni delle schede" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Mostra le schede" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostra finestra te&rminale" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostra due barre pulsanti di unità (larghezza fi&ssa, sopra le finestre file)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Disposizione schermo" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Comprimi/decomprimi" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&ia/Sposta/Crea collegamento/simlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Cre&a/Elimina cartelle" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Registra &errori" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Crea file di registro:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Registra messaggi di &informazione" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Registra &operazioni eseguite con successo" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Plugin del &File system" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "File di registro operazioni" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registro operazioni" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stato operazioni" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Rimuovi anteprime per file non più esistenti" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Vai sempre alla radice quando si cambia unità" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostra messaggi di avvertimento (solo pulsante \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Salva anteprime in cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Anteprime" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Dimensione anteprime:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selezione da mouse" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Apri con..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Scorrimento" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selezione" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linea per linea" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linea per linea &con movimento del cursore" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagina per pagina" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Ag&giungi" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Con&figura" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "A&bilita" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Elimina" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Tweak" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descrizione" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "I plugin di ricer&ca consentono di usare algoritmi di ricerca alternativi o strumenti esterni (come \"locate\", ecc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "I plugin dei compr&essori sono usati per aprire archivi non supportati internamente da Double Commander." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "I plu&gin di contenuto permettono di visualizzare dettagli estesi sui file come tag mp3 o attributi di immagine nella lista file, o di usarli negli strumenti di ricerca e nello strumento Multi-Rinomina." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "I plugin del Fi&le system permettono l'accesso a dischi altrimenti inaccessibili dal sistema operativo o a dispositivi esterni come Palm/PockePC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "I plugin del visualizzatore consentono di aprire formati di file come immagini, fogli elettronici, database ecc. in Visualizza/Mostra (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Attiva" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nome file" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Iniziale (il nome deve iniziare con il primo carattere digitato)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nale (l'ultimo carattere digitato prima del punto . deve corrispondere)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opzioni" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Corrispondenza esatta del nome" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Ricerca maiusc./minusc." #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Cerca questi elementi" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Attiva &pannello destinazione quando clicchi su una delle sue schede" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Mostra l'intestazione della scheda anche quando ce n'è una sola" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Conferma chiusura di tutte le schede" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limita lunghezza titolo della scheda a" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostra schede bloccate con asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Schede su più linee" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Su apre nuova scheda in secondo piano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Apri &nuove schede accanto alla corrente" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostra tasto di chiusura sulle s&chede" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Intestazioni delle schede" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caratteri " #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posizione sche&de" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Clo&na pulsante" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Modifica scorciato&ia" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserisci nuovo tasto" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Altro" #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Rimuovi scorciato&ia" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Pulsanti &piatti" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Inserisci parametri di comando, ognuno in una linea separata. Premi F1 per visualizzare l'aiuto sui parametri" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Aspetto" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensione ba&rra" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "Coman&do" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Scorciatoia:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&na:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Dimensione ic&ona:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Percor&so di avvio" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Tooltip:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo di pulsante" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Icone" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Lascia la finestra del terminale aperta dopo l'esecuzione di un programma" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Esegui nel terminale" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usa programma esterno" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parametri &addizionali" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Percorso del programma da eseguire" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Aggiungi" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copia" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Elimina" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modello..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Rinomina" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Altro..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostra Tooltip" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Suggerimento categoria:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Filtro categoria:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Colore cursore:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Numero di colonne del visualizzatore book" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configura" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimi file" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Crea archivi separati, uno per ogni file/cartella" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crea archivio &autoestraente" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "C&ripta" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Sp&osta nell'archivio" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Multiple disk archive" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "In&serisci prima in archivio TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Comprimi anche i nomi di percorso (solo ricorsivamente)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimi i file nell'archivio:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressore" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Decomprimi tutto ed esegui" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Estrai ed esegui" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Proprietà dell'archivio" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributi:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tasso di compressione:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metodo:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Dimensione originale:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "File:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Dimensione dell'archivio:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressore:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Data/ora:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Chiudi il pannello filtro" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Inserisci il testo da cercare o filtra per" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Distingui maiusc./minusc." #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Cartelle" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "File" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Corrispondenza all'inizio" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Corrispondenza alla fine" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Passare alla ricerca o al filtro" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valore" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Applica" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Annulla" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Modello..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Modello..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annulla" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annulla" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleziona caratteri da inserire:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Cambia attributi" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archivio" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creato:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Nascosto" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Accesso:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificato:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Sola lettura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Inclusione sottocartelle" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Proprietà timestamp" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(un campo grigio significa valore immutato)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Testo:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(un campo grigio significa valore immutato)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ottale:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annulla" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisore" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Dimensione e numero parti" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Cartella &destinazione" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Numero parti" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabyte" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobyte" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabyte" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisione" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versione" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Crea link simbolico" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinazione alla quale punterà il collegamento" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome co&llegamento" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Chiudi" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Confronta" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Modello..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Dimensione" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Dimensione" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Confronta" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&ggiungi nuovo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "C&ambia" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Prede&finito" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Elimina" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "&Tweak plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Indivi&dua il tipo di archivio dal contenuto" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Possibilità di e&liminare i file" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Supporta la c&odifica" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostr&a come file normali (nascondi icona archivi)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Supporta la gestione di arc&hivi in memoria" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Puoi &modificare l'archivio esistente" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "L'&archivio può contenere file multipli" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Puoi creare nuovi archi&vi" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&upporta finestre di dialogo con opzioni" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Consenti ricer&ca testi negli archivi" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descrizione:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Ril&eva stringa:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Estensione:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flag:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nome:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Info visualizzatore..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra il messagio Info" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copia File" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copia File" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copia negli appunti" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Elimina File" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Elimina File" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Esci" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Cerca" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Trova prossimo" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Schermo intero" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Successivo" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Carica File Successivo" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Precedente" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carica file Precedente" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Specchia" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Sposta File" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Sposta File" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Anteprima" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Ricarica" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ricarica file corrente" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Ruota 180°" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Ruota 180°" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Ruota 270°" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Ruota 270°" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Ruota 90°" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Ruota 90°" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Salva" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Salva come..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Salva file come..." #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Cattura schermata" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Seleziona tutto" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Mostra come file &binario" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Mostra come \"&Book\"" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Mostra in &esadecimale" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Mostra come &testo" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Mostra con &ritorno a capo" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafica" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Plugin" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Stira" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Stira immagine" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Annulla" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Annulla" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom -" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Ritaglia" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Schermo intero" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidenzia" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colora" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Occhi Rossi" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Ridimensiona" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diapositive" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizzatore" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codifica" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Immagine" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Penna" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Ruota" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Cattura schermata" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visualizza" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Plugin" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Avvio" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operazioni sui file" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annulla" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annulla" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nuova coda" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Coda" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Coda 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Coda 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Coda 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Coda 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Coda 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Se&gui i link" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quando le cartelle esistono" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quando i file esistono" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando i file esistono" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Annulla" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametri:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Con&figura" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "C&ripta" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando il file esiste" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copia d&ata/ora" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Lavora in secondo piano (connesione separata)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando il file esiste" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Altezza" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Larghezza" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annulla filtro rapido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cannulla operazione corrente" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Inserisci il CheckSum e seleziona l'algoritmo" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifica CheckSum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Gli appunti non contengono nessuna barra strumenti valida" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Estensione" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nome" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Dimensione" #: ulng.rsconfcolalign msgid "Align" msgstr "Allinea" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Etichetta" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Elimina" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenuto campi" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Sposta" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Larghezza" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizza colonna" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codifica" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Abband&ona" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tutto" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "A&ggiungi" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annulla" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continua" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Copia &in" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Copia in &tutto" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "E&sci dal programma" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnora tutti" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "N&essuno" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Alt&ro" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Sovrascrivi" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sovrascrivi &tutti" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Sovrascrivi tutti i più &grandi" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sovrascrivi tutti i &vecchi" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Sovrascrivi tutti i più &piccoli" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Rinomina" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Riprendi" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Ri&tenta" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Sa<a" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Salta t&utti" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Si" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copia file" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Sposta file" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Avvio" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Coda" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Velocità %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Velocità %s/s, tempo rimanente %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicatore di spazio libero sull'unità" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<nessuna etichetta>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nessun media>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno di Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "nuovo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nome file:" #: ulng.rseditnewopen msgid "Open file" msgstr "Apri file" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Indietro" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Ricerca" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Avanti" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Sostituisci" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Chiedi;Sovrascrivi;Copia su;Salta" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Chiedi;Sovrascrivi vecchi;Copia su;Salta" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Chiedi;Non impostare più;Ignora errori" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definisci modello" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s livello(i)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "tutto (profondità illimitata)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "solo cartella corrente" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "La cartella %s non esiste!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Trovato: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Salva modello di ricerca" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nome modello:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Analizzato: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Analisi in corso" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Trova file" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Inizio a" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Font &editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "&Registra font" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Font principale" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "&Visualizzatore font" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Visualizzatore &Book Font" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "%s liberi su %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s liberi" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/ora accesso" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributi" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Commento" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Dimensione compressa" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/ora creazione" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Estensione" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Collegamento a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/ora modifica" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nome" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nome senza estensione" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietario" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Percorso" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Dimensione" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Errore nella creazione dell'hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Dialogo copia/sposta" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differenze" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Modifica" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Trova file" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principale" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Strumento Multi-Rinomina" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualizzatore" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Filtro di deselezione" #: ulng.rsmarkplus msgid "Select mask" msgstr "Filtro di selezione" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Filtro di input:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configura colonne personalizzate" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Azioni" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Modifica" #: ulng.rsmnueject msgid "Eject" msgstr "Espelli" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Monta" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nuovo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nessuna unità disponibile" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Apri" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Apri con..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Altro" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Ripristina" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordina per" #: ulng.rsmnuumount msgid "Unmount" msgstr "Smonta" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vista" #: ulng.rsmsgaccount msgid "Account:" msgstr "Account:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parametri addizionali per compressore da linea di comando:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Non è possibile copiare/spostare il file \"%s\" su sé stesso!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Impossibile eliminare cartella %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ChDir a [%s] fallito!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Rimuovere tutte le schede inattive?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Questa scheda (%s) è bloccata! Chiudere ugualmente?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sei sicuro di voler uscire?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Copia %d file/cartelle selezionati?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Eliminanare il file parzialmente copiato ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Elimina %d file/cartelle selezionati?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Spostare %d file/cartelle selezionati nel cestino?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Eliminare \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Spostare \"%s\" nel cestino?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossibile spostare \"%s\" nel cestino! Eliminare definitivamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disco non disponibile" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Inserire estensione file:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Inserire nome:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Errore CRC nell'archivio" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dati corrotti" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Impossibile connettersi al server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Impossibile copiare il file %s verso %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "La cartella col nome \"%s\" è già presente." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "La data %s non è supportata" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "La cartella %s esiste già!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funzione annullata dall'utente" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Errore nella chiusura del file" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossibile creare file" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Non ci sono più file nell'archivio" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossibile aprire il file esistente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Errore nella lettura file" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Errore di scrittura su file" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Impossibile creare cartella %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Collegamento non valido" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "File non trovato" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memoria insufficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funzione non supportata!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Errore nel comando del menu contestuale" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Errore durante il caricamento della configurazione" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Errore sintattico nell'espressione regolare!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Impossibile rinominare il file %s in %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Non posso salvare l'associazione!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossibile salvare il file" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Impossibile impostare gli attributi per \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Impossibile impostare data/ora per \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Impossibile impostare proprietario/gruppo per \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer troppo piccolo" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Troppi file da comprimere" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato dell'archivio sconosciuto" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Il file %s è stato modificato, salvarlo?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s byte, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sovrascrivi:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Il file %s esiste, sovrascriverlo?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con il file:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "File \"%s\" non trovato." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operazioni sul file in corso" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Alcune operazioni sui file non sono terminate. Chiudendo Double Commander alcuni dati potrebbero andare perduti." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Il file %s è in sola lettura. Eliminarlo ugualmente?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La dimensione del file \"%s\" è eccessiva per il file system di destinazione!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "La cartella %s esiste, sovrascriverla?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Segui collegamento simbolico \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath #, fuzzy #| msgid "Path" msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Percorso" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand #, fuzzy msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename #, fuzzy #| msgid "Name:" msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Nome:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Errore nella linea di comando" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nome file non valido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato non valido del file di configurazione" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Percorso non valido" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Il percorso %s contiene caratteri non consentiti." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Non c'è un plugin valido!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Questo plugin è stato fatto per Double Commander: %s.%s. Non può funzionare con Double Commander per %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Quoting non valido" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selezione non valida." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Carica lista..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copia file %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Elimina file %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Errore:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Estrai file %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Crea collegamento %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Crea cartella %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Sposta file %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Comprimi file %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Rimuovere cartella %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fatto:" #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Crea link simbolico %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Test integrità file %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Password principale" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prego inserire password principale:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nuovo file" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Il prossimo volume verrà decompresso" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nessun file" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nessun file selezionato." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Non c'è abbastanza spazio sull'unità di destinazione. Continuare?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Non c'è abbastanza spazio sull'unità di destinazione. Riprovare?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Non è possibile eliminare il file %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Non implementato." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Password:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Le password sono differenti!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Si prega di inserire la password:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Password (Firewall) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prego reinserire la password per verifica:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Elimina %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" già presente. Sovrascrivere?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Rinominare/spostare %d file/cartelle selezionati?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Rinomina/sposta selezione \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Prego, riavviare Double Commander per applicare le modifiche" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selezione: %s di %s, file: %d di %d, cartelle: %d di %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Prego, selezionare solo i file per il Checksum!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prego selezionare la posizione del prossimo volume" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Imposta etichetta volume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Rinomina scheda" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nuovo nome di scheda:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Percorso destinazione:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Troppi file selezionati." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nome utente:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nome utente (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etichetta volume:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prego inserire la dimensione del volume:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Avviare la cancellazione sicura per i file/cartelle %d selezionati?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Eseguire la cancellazione sicura per la selezione \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Contatore" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Data" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Estensione" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nome" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nessuna modifica;MAIUSCOLE;minuscole;Primo carattere maiusc.;Primo caratt. di ogni parola maiusc.;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Strumento Multi-Rinomina" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Carattere alla posizione x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caratteri dalla posizione x a y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Contatore" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Giorno" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Giorno (2 cifre)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Giorno della settimana(corto, es: \"lun\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Giorno della settimana(lungo, es: \"lunedì\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Estensione" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Ora" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Ora (2 cifre)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuto" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuto (2 cifre)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mese" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mese (2 cifre)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nome mese(corto, es : \"gen\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nome del mese(lungo, es : \"gennaio\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nome" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Secondi" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Secondi (2 cifre)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Anni (2 cifre)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Anni (4 cifre)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Plugin" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Ora" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafica" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Rete" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Altro" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistema" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Annullato" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Calcolo del Checksum" #: ulng.rsopercalculatingchecksumin #, object-pascal-format, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Calcolo del Checksum in \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Calcolo del Checksum di \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calcolo in corso..." #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Calcolo di \"%s\" in corso " #: ulng.rsopercombining msgid "Joining" msgstr "Unione" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Unisci file in \"%s\" su \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copia" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creazione cartella" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Creazione cartella \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Eliminazione" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Eliminazione in \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Eliminazione di \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Esecuzione" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Esecuzione di \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Estrazione" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Estrazione da \"%s\" a \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminato" #: ulng.rsoperlisting msgid "Listing" msgstr "Elencazione" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Elencazione di \"%s\" in corso" #: ulng.rsopermoving msgid "Moving" msgstr "Spostamento" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Spostamento da \"%s\" a \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Spostamento di \"%s\" a \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Non avviato" #: ulng.rsoperpacking msgid "Packing" msgstr "Compressione" #: ulng.rsoperpackingfromto #, object-pascal-format, fuzzy #| msgid "Compressione da \"%s\" a \"%s\"" msgid "Packing from \"%s\" to \"%s\"" msgstr "Compressione da \"%s\" a \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Compressione da \"%s\" a \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "In attesa" #: ulng.rsoperpausing msgid "Pausing" msgstr "Metti in attesa" #: ulng.rsoperrunning msgid "Running" msgstr "Caricamento in corso" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Imposta proprietà" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Imposta proprietà in \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Imposta proprietà di \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Divisione" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Divisione da \"%s\" a \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Avviamento" #: ulng.rsoperstopped msgid "Stopped" msgstr "Fermato" #: ulng.rsoperstopping msgid "Stopping" msgstr "Annulla" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Verifica del Checksum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Verifica del Checksum in \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verifica del Checksum di \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Attendere per accesso al file sorgente" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Attendi per risposta utente" #: ulng.rsoperwiping msgid "Wiping" msgstr "Cancellazione sicura" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Cancellazione sicura in \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Cancellazione sicura \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Funzionamento" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Tipo archivio:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associa plugin \"%s\" con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primo;Ultimo;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Inserire estensione" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "finestra separata;minimizza finestra separata;pannello operazioni" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Dinamico (decimale)" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "La scorciatoia %s per cm_Delete verrà registrata, può essere usata per invertire questo settaggio." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Aggiungi scorciatoia per %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Aggiungi scorciatoia" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossibile impostare scorciatoia" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Cambia scorciatoia" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "La scorciatoia %s per cm_Delete ha un parametro che scavalca questa impostazione. Vuoi cambiare questo parametro per usare l'impostazione globale?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "La scorciatoia %s per cm_Delete necessita di avere un parametro modificato che corrisponda alla scorciatoia %s. Vuoi modificarlo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descrizione" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Modifica la scorciatoia per %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fissa parametro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Scorciatoia" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Scorciatoie" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<nessuno>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Setta scorciatoie per cancellare file" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Perché questo settaggio funzioni con la scorciatoia %s, la scorciatoia %s deve essere assegnata a cm_Delete ma è già assegnata a %s. Vuoi modificare ciò?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "La scorciatoia %s per cm_Delete è una scorciatoia sequenziale per cui una scorciatoia con lo Shift premuto non può essere assegnata. Questa impostazione potrebbe non funzionare." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Scorciatoia in uso" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "La scorciatoia %s è già usata." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Modificare esso in %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "usato per %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "Usato per questo comando ma con differenti parametri" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archiviatori" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Auto-aggiornamento" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamenti" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Colori" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Colonne" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configurazione" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Colonne personalizzate" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Cartelle Preferite" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag && drop" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Pulsante lista unità" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associazioni file" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nuovo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operazioni sui file" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Pannello file" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Cerca file" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visualizzazioni file" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipi di file" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Schede" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Font" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Evidenziazioni" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Scorciatoie" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icone" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignora lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasti" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Lingua" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposizione" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Registro operazioni" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Altro" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mouse" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Strumento Multi-Rinomina" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugin" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Ricerca Rapida/Filtro" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminale" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra strumenti" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Strumenti" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Tooltip" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nessuno;Linea di comando;Ricerca veloce;Filtro veloce" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Tasto sinistro;Tasto destro;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "In alto alla lista file;dopo le cartelle (se le cartelle sono ordinate prima dei file);in posizione ordinata;In fondo alla lista file" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Il plugin %s è già assegnato alle seguenti estensioni:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Disabilita" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "A&bilita" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Attiva" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descrizione" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nome file" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nome" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrato per" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Distingui maiusc./minusc.;&Nessuna distinzione maiusc./minusc." #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&File;Cartelle;File &e cartelle" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Nascondi pannello filtro quando selezionato" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nessuna distinzione maiusc./minusc.;in accordo alle impostazioni locali (aAbBcC);prima maiuscole poi minuscole (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordina per nome e mostra prima;ordina come i file e mostra prima;ordina come file" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetico, considera accenti;Ordinamento naturale: alfabetico e numeri" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Inizio;Fine;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparatore;comando inte&rno;comando e&sterno;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Nome categoria:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "non cambiare posizione;usa le stesse impostazioni per i nuovi file;alla posizione ordinata" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "File: %d, cartelle %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Impossibile modificare i permessi per \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Impossibile modificare il proprietario per \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "File" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Cartella" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nome pipe" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo speciale a blocchi" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispositivo speciale a caratteri" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Collegamento simbolico" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo sconosciuto" #: ulng.rssearchresult msgid "Search result" msgstr "Risultati di ricerca" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Ricerca" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modello senza nome>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleziona cartella" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Mostra aiuto per %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tutto" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comando" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "File" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Byte" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabyte" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobyte" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabyte" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabyte" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "File: %d, Cartella: %d, Dimensione: %s (%s byte)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossibile creare la cartella destinazione!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Errore nel formato della dimensione!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossibile dividere il file!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Il numero di parti è superiore a 100! Continuare?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Seleziona cartella:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Errore nella creazione del collegamento simbolico." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Testo predefinito" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Testo non formattato" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Giorno(i)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Ora(e)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(i)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mese(i)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Secondo(i)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Settimana(e)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Anno(i)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differenze" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Modifica" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Errore nell'apertura" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Errore apertura editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Errore apertura terminale" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Errore apertura visualizzatore" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminale" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualizza" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Si prega di riportare questo errore sul bug tracker con una descrizione di cosa è stato fatto e allegando il seguente file:%sPremere %s per continuare ad usare il programma oppure %s per chiuderlo." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rete" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualizzatore interno di Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codifica" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nuova Dimensione" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s non trovato!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.hu.po�����������������������������������������������������������0000644�0001750�0000144�00001452726�15104114162�017302� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2023-10-10 00:00+0200\n" "Last-Translator: Mihaly Nyilas <dr.dabzse@gmail.com>\n" "Language-Team: dabzse.net | nyilas.dev <dr.dabzse@gmail.com>\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.3.2\n" "X-Native-Language: Magyar\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Összehasonlítás.... %d%% (ESC a kilépéshez)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Balról: %d fájl törlése" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Jobbról: %d fájl törlése" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "%d fájl található: (%d azonos, %d különböző, %d csak a bal oldalon, %d csak a jobb oldalon)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Balról jobbra: %d fájl másolása %s méretben (%s bájt)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Jobbról balra: %d fájl másolása %s méretben (%s bájt)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Sablon kiválasztása..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Szabad &terület ellenőrzése" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Attribútumok másolása" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "&Tulajdonos másolása" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "&Jogosultságok másolása" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Dátum/Idő másolása" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Helyes lin&kek" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Írásvédelmi attribútum elhagyása" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Üres &mappák kizárása" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Linkek követése" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Hely &tartalékolása" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Másolás íráskor" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "E&llenőrzés" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Mit tegyen, ha nem bírja beállítani a fájl idejét, attribútumait stb." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Fájl-sablon használata" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Ha a &könyvtár létezik" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Ha a &fájl létezik" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ha &nem bírja beállítani a tulajdonságokat" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nincs sablon>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Másolás a vágólapra" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Kiadás" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Kommit" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Honlap:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revízió" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Verzió" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Visszaállít" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Attribútumok kiválasztása" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archívum" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Tö&mörített" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Könyvtár" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Titkosított" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Rejtett" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Csak &olvasható" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Ritka" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Szimbolikus hivatkozás" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&Rendszer" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Ideiglenes" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS attribútumok" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Általános attribútumok" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "&Szövegként:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Teljesítménymérés" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Teljesítménymérés adatmérete: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Idő(ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Sebesség (MB/mp)" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Ellenőrző összeg számítása..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Az ellenőrzőösszeg-fájl megnyitása amikor kész" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Külön MD5/SHA1 készítése fájlonként" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Ellenőrzőösszeg(ek) mentése ide:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Ellenőrző összeg vizsgálata..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kódolás" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Hozzáadás" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Mégsem" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Csatlakozás" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Szerkesztés" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Csatlakozás kezelő" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Csatlakozás ide:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Feladatlistához adni" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Beállítások" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Ezen beállítások az alapértelmezettek" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Fájl(ok) másolása" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Új feladatlista" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "1. feladat" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "2. feladat" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "3. feladat" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "4. feladat" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "5. feladat" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Leírás mentése" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Fájl/Könyvtár megjegyzés" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Megjegyzés szerkesztése:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Kódolás:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automatikus összehasonlítás" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Bináris mód" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Mégsem" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Jobbra másolás" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Jobbra másolás" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Balra másolás" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Balra másolás" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ismét" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Ismét" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Mind kiválasztása" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Visszavonás" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Visszavonás" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Keresés" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Keresés" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Következő keresése" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Következő keresése" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Előző keresése" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Előző keresése" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Helyettesítés" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Csere" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Első eltérés" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Első eltérés" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Sorra ugrás..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Sorra ugrás" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Betűméret figyelmen kívül hagyása" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Üres helyek figyelmen kívül hagyása" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Görgetés egyszerre" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Utolsó eltérés" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Utolsó különbség" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Sor különbségek" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Következő eltérés" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Következő eltérés" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Bal oldali megnyitása..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Jobb oldali megnyitása..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Háttér befestése" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Előző eltérés" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Előző eltérés" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Új&ratölt" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Újratölt" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Mentés" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Mentés" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Mentés másként..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Mentés másként..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Bal oldali mentése" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Bal oldali mentése" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Bal oldali mentése másként..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Bal oldali mentése másként..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Jobb oldali mentése" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Jobb oldali mentése" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Jobb oldali mentése másként..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Jobb oldali mentése másként..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Összehasonlítás" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Összehasonlítás" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódolás" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódolás" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Fájlok összehasonlítása" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Bal" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Jobb" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Műveletek" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Sz&erkesztés" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Kódolás" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Beállítások" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Új gyorsbillentyű hozzáadása a sorozathoz" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Utolsó gyorsbillentyű eltávolítása a sorozatból" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Válassz egy gyorsbillentyűt a fennmaradó szabad billentyűkből" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Csak ezekhez a vezérlésekhez" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Paraméterek (mind külön sorban):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Gyorsbillentyűk:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Névjegy" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Konfiguráció" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Beállítások" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Másolás" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Kivágás" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Törlés" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Keresés" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Keresés" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Következő keresése" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Következő keresése" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Előző keresése" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Sorra ugrás..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Beillesztés" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ismét" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ismét" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Helyettesítés" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Csere" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Összes kiválasztás&a" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Összes kijelölése" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Visszavonás" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Visszavonás" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Bezárás" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Kilépés" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "Ú&j" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Új" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Megnyitás" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Megnyitás" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Újratölt" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Mentés" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Men&tés másként..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Mentés másként" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Szerkesztő" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dolás" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Megnyitás mint" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Mentés mint" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Szintaxis kiemelés" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Sor vége" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Mégsem" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Többsoros minta" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Betűméret számít" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Keresés a &kurzor pozíciótól" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Reguláris kifejezések" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Csak a kijelölt szöve&gben" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Csak az &egész szavak" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opciók" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Helyettesítés ezzel:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Keresés:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Irány" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "&Minden elem esetén ugyanígy járjunk el" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Fájlok kibontása" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Ú&tvonalak kibontása ha a fájlnév tartalmazza" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Minden archívum kibontása külön &alkönyvtárakba (archívnév)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Létező fájlok &felülírása" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Fájl kicsomagolása ide:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Kibontandó fájlok keresőmaszkja:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Jelszó a titkosított fájl(ok)hoz:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Várjon..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Fájl neve:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Innen:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kattintson a Bezárás gombra, ha az ideiglenes fájl törölhető!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&A műveleti panelre" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Mind megtekintése" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Jelenlegi művelet:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Innen:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ide:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Tulajdonságok" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "A fájl futtatásának &engedélyezése" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "&Rekurzív" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Szöveges megfelelő:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Tartalmazza:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Létrehozva:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Futtatás:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Fájlnév" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Útvonal:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Csoport" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Utolsó hozzáférés:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Utolsó módosítás:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Legutóbbi állapotváltozás:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Linkek:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Média típusa:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktális:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Tulajdonos" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Hely a lemezen:" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Méret:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Szimbolikus hivatkozás:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Típus:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Név" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Érték" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Beépülők" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Tulajdonságok" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Bezárás" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Leállítás" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Feloldás" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Mindet feloldja" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Feloldás" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Kezelő azonosító (file handle)" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Folyamat azonosító" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Futtatható fájl útvonala" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Mégsem" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Bezárás" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Bezárás" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Gyorsbillentyűk beállítása" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Szerkesztés" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "&Ablakba" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Keresés leállítása, bezárás és a memória felszabadítása" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Minden más fájl keresés leállítása, bezárás és a memória felszabadítása" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Ugrás fájlhoz" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Adat keresése" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Utolsó keresés" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Ú&j keresés" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Új keresés (szűrők törlése)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Ugrás a \"Haladó\" keresőre" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Ugrás a \"Betölt/Ment\" fülre" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Váltás a &következő lapra" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Ugrás a \"Beépülők\"-re" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Váltás az &előző lapra" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Ugrás az \"Eredmények\"-re" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Ugrás az \"Alap\" keresőre" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Indítás" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Megtekintés" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Be&töltés" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "M&entés" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Me&ntés a kezdő mappával együtt" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ha ezt a lehetőséget választod, akkor a keresés kiinduló mappája is visszaállításra kerül a sablon betöltésekor. Egy adott mappában történő keresés elmentésére használható" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Sablon használata" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Fájlok keresése" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "&Betűméret számít" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Dátumtól:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dá&tumig:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Fájlmérettől:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Fá&jlméretig:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "&Archívumban keres" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Keresés fájlban" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "&Szimbolikus hivatkozás követése" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "A szöveget &NEM tartalmazó fájlok keresése" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nem régebbi mint:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Offi&ce XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Megnyitott fülek" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Keresés fájlnév &részletre" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Reguláris kifejezések" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Szöveg &helyettesítése" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Kiválasztott mappák és &fájlok" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Reg&uláris kifejezés" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Időtől:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "I&dőig:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Kereső &beépülő használata:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "tartalom egyezik" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "hash egyezik" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "név egyezik" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "&Azonos fájlok keresése:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "méret egyezik" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadeci&mális" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Írd be a keresésből kizárandó mappák nevét pontosvesszővel (\";\") elválasztva" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Írd be a keresésből kizárandó fájlok nevét pontosvesszővel (\";\") elválasztva" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Írd be a fájlok nevét pontosvesszővel (\";\") elválasztva" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Beépülő" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Mező" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Érték" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mappák" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Fájlok" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Adat keresése" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Attri&bútumok" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Kódolás:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Keresésből ki&zárt almappák" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Fájlok kizárása" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Fájl maszk" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Keresés in&dítása itt" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Keresés az &alkönyvtárakban:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Előző keresések:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Akciók" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Az többi leállítása, bezárása és a memória felszabadítása" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Megnyitás új fülön" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opciók" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Eltávolítás a listáról" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "E&redmények" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Minden megtalált elem megjelenítése" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Szerkesztőben mutat" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Megjelenítés a nézőkében" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Nézet" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Haladó" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Betölt/Ment" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Beépülők" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Eredmények" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Alap" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Keresés" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Keresés" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "&Visszafelé" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Be&tűméret számít" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Reguláris kifejezések" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadecimális" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Tartomány:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Jelszó:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Felhasználónév:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Névtelen csatlakozás" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Csatlakozás a következő felhasználóként:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Hardlink készítése" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cél, amire a hivatkozás mutatni fog" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Hivatkozás neve" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Mind importálása!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Kiválasztott importálása" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Válaszd ki az importálandó elemeket" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Almenüre kattintva a teljes menü kijelölése" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "A CTRL lenyomásával több elem kijelölhető" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Fájlegyesítő" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Mentés másként..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Tétel" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Fájl neve" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Le" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Le" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Törlés" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Fel" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Fel" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Névjegy" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Fül aktiválása pozíció szerint" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Fájlnév hozzáadása a parancssorhoz" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "&Újabb keresés..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Útvonal és fájlnév hozzáadása a parancssorhoz" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Útvonal másolása parancssorba" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Beépülő hozzáadása" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Teljesítménymérés" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Áttekintő nézet" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Áttekintő nézet" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Elf&oglalt terület számítása" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Könyvtár cseréje" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Főkönyvtárba váltás" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Szülő könyvtárra cserél" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gyökér könyvtárra cserél" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Ellenőrző összeg számítása..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Ellenőrző összeg &vizsgálata..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Naplófájl űrítése" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Naplóablak űrítése" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Ö&sszes fül bezárása" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Kettőzött fülek bezárása" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Fül bezárása" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Következő parancssor" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Parancssor beállítása a következő parancsra az előzményekből" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Előző parancssor" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Parancssor beállítása a előző parancsra az előzményekből" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Teljes" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Oszlopnézet" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Összehasonlítás &tartalom alapján" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Mappák összehasonlítása" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Mappák összehasonlítása" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Tömörítőprogramok beállítása" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Kedvenc könyvtárak beállítása" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Kedvenc fülek beállítása" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "A mappafülek beállításai" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Gyorsbillentyűk beállítása" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Beépülők beállítása" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Pozíció mentése" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Beállítások mentése" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "A keresések konfigurálása" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Eszköztár..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Buboréktippek konfigurálása" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Fa elrendezésű menü beállítása" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Fa elrendezésű menü színeinek beállítása" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Helyi menü megjelenítése" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Másolás" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "A fülek másolása a túloldalra" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Minden látható oszlop más&olása" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Fájlnevek másolása &teljes elérési úttal" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Fájlnevek másolása a &vágólapra" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Fájlnevek másolása UNC útvonallal" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Megerősítés nélküli másolás" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kijelölt fájlnevek másolása teljes elérési úttal, a végén mappa elválasztó nélkül" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kijelölt fájlnevek másolása teljes elérési úttal" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Másolás ugyanarra a panelre" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Másolás" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Elfoglalt &terület megjelenítése" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Kivágás" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Parancs paraméterek megjelenítése" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Minden más keresés leállítása, bezárás és a memória felszabadítása" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Könyvtár előzmények" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Ke&dvenc könyvtárak" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "&Belső parancs végrehajtása..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Válassz egy parancsot és futtasd" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Szerkeszt" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Megjegyzés s&zerkesztése..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Új fájl szerkesztése" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Útvonalmező szerkesztése a fájl felett" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Panelek &cseréje" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Szkript futtatása" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Fájlok &kibontása..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Fájl&társítások beállítása" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Fájlegyesítés..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "&Fájl tulajdonságainak megjelenítése" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Fájl szele&telése..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Lapos nézet" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Lapos nézet, csak a kijelöltek" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Parancssorra fókuszálás" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Fókusz váltása" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Váltás bal és jobb oldali fájl lista között" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Fa elrendezésre fókuszálás" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Váltás a jelenlegi fájl lista és a fa elrendezésű nézet közt (ha engedélyezett)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Vidd a kurzort az első mappára vagy fájlra" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Vidd a kurzort az első fájlra" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Vidd a kurzort az utolsó mappára vagy fájlra" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Vidd a kurzort az utolsó fájlra" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Vidd a kurzort a következő mappára vagy fájlra" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Vidd a kurzort az előző mappára vagy fájlra" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Hivatkozás létrehozása..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Tartalomjegyzék" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vízszintes elrendezés" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Billentyűzet" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Áttekintő nézet a bal panelben" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Oszlopos nézet a bal panelben" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Bal &= Jobb" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Lapos nézet a bal panelben" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Bal oldali meghajtólista megnyitása" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Ki&jelölés megfordítása a bal panelben" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Bal panel rendezése &attribútum szerint" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Bal panel rendezése &dátum szerint" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Bal panel rendezése &kiterjesztés szerint" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Bal panel rendezése &név szerint" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Bal panel rendezése &méret szerint" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Miniatűrök mutatása a bal panelben" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Kedvenc fülek betöltése" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Lista betöltése" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Fájlok/mappák betöltése listát tartalmazó szövegfájlból" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Kiválasztás betöltése a &vágólapról" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Kiválasztás betöltése &fájlból..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Fülek betöltése fájlból" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Új könyvtár" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Minden &azonos kiterjesztésű kijelölése" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Összes azonos nevű fájl kijelölése" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Összes azonos nevű és kiterjesztésű fájl kijelölése" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Az összes kijelölése az útvonalon" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Kijelölés meg&fordítása" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Minden kiválasztása" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Csoportos kijelölés megszüntetése..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Csoport &kijelölése..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Összes kijelölés me&gszüntetése" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Kis méret" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Az aktuális fül mozgatása balra" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Az aktuális fül mozgatása jobbra" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Csopo&rtos átnevező" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Hálózati &csatlakozás..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Hálózat &szétkapcsolása" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hálózati &gyors csatlakozás..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Új &fül" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Következő Kedvenc fülek betöltése a listába" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Váltás a &következő fülre" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Archívum megnyitásának kísérlete" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Sávfájl megnyitása" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "&Mappa megnyitása új fülön" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Meghajtó megnyitása index alapján" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "&VFR lista megnyitása" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Műveleti panel" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Á<alános beállítások..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Fájlok &tömörítése..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Elválasztó pozíciójának beállítás" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Beillesztés" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Előző Kedvenc fülek betöltése a listába" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Váltás az &előző fülre" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Gyors szűrő" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Gyorskeresés" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Gyorsnézőke panel" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Frissítés" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "A legutóbbi Kedvenc fülek újratöltése" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Áthely/Átnev" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Fájlok mozgatása/átnevezése megerősítő kérdés nélkül" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Átnevezés" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Fül át&nevezése" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "A legutóbb betöltött Kedvenc fülek felülírása" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Kijelölt &visszaállítása" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "For&dított sorrend" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Áttekintő nézet a jobb panelben" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Oszlopos nézet a jobb panelben" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Jobb &= Bal" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Sima nézet a jobb panelben" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Jobb oldali meghajtólista megnyitása" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Ki&jelölés megfordítása a jobb panelben" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Jobb panel rendezése &attribútum szerint" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Jobb panel rendezése &dátum szerint" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Jobb panel rendezése &kiterjesztés szerint" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Jobb panel rendezése &név szerint" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Jobb panel rendezése &méret szerint" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Miniatűrök mutatása a jobb panelben" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "&Terminál futtatása" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Jelenlegi fülek mentése új Kedvenc fülekként" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Megjelenített oszlopok mentése fájlba" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Kiválasztott men&tése" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Kiválasztott m&entése fájlba..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Fülek mentése fájlba" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Keresés..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Minden fül zárolása - könyvtárváltás új fülön" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Minden fül feloldása" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Minden fül zárolása" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Minden fül zárolása a könyvtárváltás engedélyezésével" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "&Attribútumok cseréje..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zárolva, könyvtárváltás ú&j fülön" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Rendes" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zárolt" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zárolva, könyvár&váltás engedélyezve" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Megnyitás a rendszer által társítottal" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Gyorsgomb menü megjelenítése" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Parancssori előzmények megjelenítése" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Rejtett/Rendszer fájlok &megjelenítése" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Rendezés &attribútumok szerint" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Rendezés &dátum szerint" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Rendezés &kiterjesztés szerint" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Rendezés &név szerint" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Rendezés &méret szerint" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Meghajtólista megnyitása" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Kihagyási lista engedélyezése/kikapcsolása, hogy nem mutatja fájlneveket" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "&Szimbolikus hivatkozás készítése.." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Szinkron navigáció" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Szinkron könyvtár váltás mindkét panelen" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Könyvtárak &szinkronizálása..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cél &= Forrás" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "A&rchívum(ok) tesztelése" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatűrök" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Bélyegkép-nézet" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Teljes képernyős konzol" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Kurzor alatti mappa küldése a bal ablakba" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Kurzor alatti mappa küldése a jobb ablakba" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Fa elrendezésű panel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Paraméterek szerinti rendezés" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Összes azonos kiterjesztésű kijelölésének megszüntetése" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Összes azonos nevű kijelölésének megszüntetése" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Összes azonos nevű és kiterjesztésű kijelölésének megszüntetése" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Azonos útvonalú fájlok kijelölésének megszüntetése" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Nézőke" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Aktív nézet előzményeinek megtekintése" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ugrás a következő előzményre" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Előző előzményre ugrik" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Naplófájl megtekintése" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Legutóbbi keresési &eredmények" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Látogassa meg a Double Commander honlapját" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Megsemmisítés" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Műveletek a Kedvenc könyvtárakkal és paraméterekkel" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Kilépés" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Könyvtár" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "A jelenlegi jobb oldali könyvtár megtekintése a bal ablakban" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Ugrás a saját mappába" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Ugrás a gyökérkönyvtárba" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Ugrás a szülőkönyvtárba" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "A jelenlegi bal oldali könyvtár megtekintése a jobb ablakban" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Útvonal" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Másolás..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Hivatkozás készítése..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Törlés" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Elrejtés" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Összes kijelölése" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Áthelyezés..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Szimbolikus hivatkozás készítése..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Fül beállítások" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Visszaállítás" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Indítás" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Parancsok" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Beállítások" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "&Kedvencek" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Fájlok" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Megjelölés" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "&Hálózat" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Nézet" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Fül beállítások" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Fü&lek" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Szerkesztés" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Válassz belső a belső parancsok közül" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Régebbi elrendezés" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Régebbi elrendezés" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Alapértelmezetten minden kategória kiválasztása" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Kiválasztás:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategóriák:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Parancs &neve:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Szűrő:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Tipp:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Gyorsbillentyű:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategória" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Súgó" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Tipp" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Gyorsbillentyű" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Súgó" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Meghatároz..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Kis-/nagybetűre érzékeny" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ékezetek és ikerbetűk figyelmen kívül hagyása" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Attri&bútumok:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Maszk bevitele:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&vagy válassz előre meghatározott kiválasztási típust:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Új könyvtár létrehozása" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Bővített szintaxis" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Add meg az új könyvtár nevét:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Új méret" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Magasság:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-be való sűrítés minősége" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Szélesség:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Magasság" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Szélesség" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Kiterjesztés" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Fájlnév" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Törlés" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Törlés" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Bezárás" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "&Beállítások" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Számláló" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Számláló" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dátum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dátum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Törlés" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "A mentett beállítások listája..." #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Nevek szerkesztése..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Jelenlegi új nevek szerkesztése..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Kiterjesztés" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Kiterjesztés" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Szerkesztő" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Relatív útvonal menü megnyitása" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Utolsó mentett beállítás betöltése" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Nevek betöltése fájlból..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Mentett beállítás betöltése név vagy sorszám szerint" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "1. beállítás betöltése" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "2. beállítás betöltése" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "3. beállítás betöltése" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "4. beállítás betöltése" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "5. beállítás betöltése" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "6. beállítás betöltése" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "7. beállítás betöltése" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "8. beállítás betöltése" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "9. beállítás betöltése" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Fájlnév" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Fájlnév" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Beépülők" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Beépülők" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Át&nevezés" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "&Alaphelyzetbe mind" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Mentés" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Mentés másként..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Mentett beállítások menüje" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Rendezés" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Idő" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Idő" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Átnevezési napló megtekintése" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Csoportos átnevező" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Kis-/nagybetűre érzékeny" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Eredmény nap&lózása" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Hozzáfűz" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Csak egyszer cserélje fájlonként" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguláris kifejezések" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Helyettesítések használata" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Számláló" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Keresés && Csere" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maszk" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Mentett beállítások" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Kiterjesztés" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Keresés..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervallum" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Fájl &neve" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Csere..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Kezdőszám" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Szélesség" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Műveletek" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Szerkesztő" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Fájl régi neve" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Fájl új neve" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Fájl útvonala" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Kattints az OK gombra a szerkesztő bezárása után, hogy a megváltozott nevek betöltődjenek!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Alkalmazás kiválasztása" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Egyéni parancs" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Társítások mentése" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Kiválasztott alkalmazások az alapértelmezettek" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Megnyitandó fájltípus: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Összetett fájl nevek" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Összetett URI-k" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Egyetlen fájlnév" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Egyszerű URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Alkalmaz" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Súgó" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Beállítások" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Kérlek, válassz egyet az alábbi oldalak közül, ez az oldal nem tartalmaz beállításokat." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Hozzáadás" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "M&ásolás" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Törlés" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Egyéb..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Át&nevezés" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Az azonosítókat (ID) a cm_OpenArchive parancs használja a tömörített fájlok azonosítására tartalom szerint, a kiterjesztésük helyett:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opciók:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formátum értelmezési mód:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "E&ngedélyezve" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "&Hibakereső mód" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Konzol kimenet megjelenítése" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Kiterjesztés nélküli archívumneveket listaként használja" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Uni&x fájl attribútumok" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "&Unix útvonal elválasztó \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows &fájl attribútumok" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "&Windows útvonal elválasztó \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Hozzá&adás:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hiváló:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Törlés:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Leírá&s:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Kiterjesztés:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "&Kicsomagolás:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Útvonal nélküli kibontás:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID p&ozíció:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID &keresési tartomány:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archi&válók:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Listázás &befejezve (választható):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Listázási for&mátum:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Listázás &kezdése (választható):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Jelszókérő szöveg::" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Önkicsomagoló archívum létrehozása:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Próba:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&utomatikus beállítás" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Mind letiltása" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Módosítások elvetése" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Mind engedélyezése" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportálás..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importálás..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Archiválók rendezése" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "További" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Általános" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Méret, dátum vagy attribútum változása esetén is" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "A következő útvonalakhoz és az alma&ppáikhoz:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Frissítés fájlok létrehozása, törlése és átnevezése esetén" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Amikor az alkalmazás a &háttérben fut" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Auto-frissítés kikapcsolása" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Fájl lista frissítése" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mindig mutatja a tálca ikont" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Nem csatlakoztatott eszközök automatikus elrejtése" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "&Ikon tálcára minimalizálása" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Cs&ak 1 DC futhat" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Megadhatsz egy vagy több meghajtót vagy csatolási pontot, pontosvesszővel (\";\") elválasztva." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Meghajtó &feketelista" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Oszlopméret" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Fájl kiterjesztésének megjelenítése" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "i&gazított (füllel)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "közvetlen a &fájlnév után" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automatikus" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Rögzített oszlop számozással" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Rögzített oszlop hosszúsággal" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Szín&átmenetes kijelző" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Bináris mód" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Könyv mód" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Kép mód" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Szöveg mód" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Hozzáadva:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Háttér:" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Szöveges megfelelő:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Kategória:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Törölve:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Hiba:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Háttér 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Háttér 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Mutató háttér szí&ne:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Mutató &előtér szí&ne:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "In&dikátor színe:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Információ:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Bal:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Módosítva:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Módosítva:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Jobb:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Sikeres:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Ismeretlen:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Állapot" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Oszlopcímek igazítása az értékekhez" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Szöveg &vágása az oszlop szélességéhez" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Az oszlopszél&esség növelése, ha a szöveg nem fér bele" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Vízszintes vonalak" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Függőleges vonalak" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Automatikus oszlop kitöltés" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Rácsok megjelenítése" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatikus oszlopméret" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Automatikus os&zlopméret:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Parancssori előz&mények" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "&Könyvtár előzmények" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "&Fájl maszk előzmények" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Mappafülek" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "B&eállítások mentése" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Keresés/Csere előzmé&nyek" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Főablak állapota" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mappák" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Konfigurációs állományok helye" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Mentés kilépéskor" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "A bal oldali beállításfa rendezési elve" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "A fa állapota a konfigurációs panel megnyitásakor" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Állítsa be a parancssorra" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Kiemelők:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Ikon témák:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Bélyegképek gyorsítótára:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "P&rogram könyvtár (hordozható változat)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Felhasználó &saját könyvtára" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Módosítás mentése az összes oszlophoz" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Alapértelmezett beállításokhoz ugrik" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Új" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Következő" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Előző" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Visszaállítás" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Mentés mint" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Mentés" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Átszínezés engedélyezése" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Ha kattintasz, hogy módosíts valamit, az módosítsa az összes oszlopot" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Általános" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Kurzor szegélye" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Keret színének használata" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Inaktív kiválasztási szín használata" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Fordított kijelölés használata" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Egyedi betűtípus és szín használata" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Háttér 1:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Háttér 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "&Oszlop nézet:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Jelenlegi oszlop neve]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Kurzorszín:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Kurzor szöveg:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Fájlrendszer:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Betűtípus:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Méret:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Szöveg színe:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktív kurzor színe:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inaktív jelölő színe:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Jelölő színe:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Alább egy előnézet látható. Mozgathatod a kurzort és kijelölhetsz fájlokat a változtatások azonnali kipróbálása érdekében." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Oszlop beállítása:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Oszlop hozzáadása" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "A panelek elhelyezkedése az összehasonlítást követően:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Az &aktív panel mappájának hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Az aktív és &inaktív panelek jelenlegi mappáinak hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Mappa ta&llózása, majd hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "A kijelölt elem másolatának hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "A jelenlegi &kijelölt vagy aktív mappák hozzáadása az aktív panelről" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Elválasztó hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Almenü hozzáadása" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Kézzel beírt mappa hozzáadása" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Teljes összcsukás" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Összecsukás" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Kijelölt bejegyzések kivágása" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Mind törlése!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Kiválasztott elem törlése" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Almenü és minden elemének törlése" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Az almenü törlése az elemek megtartásával" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Elem kinyitása" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Fa elrendezésű ablakra fókuszálás" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Ugrás az első elemre" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Ugrás az utolsó elemre" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Ugrás a következő elemre" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Ugrás az előző elemre" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Az &aktív panel mappájának beszúrása" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Az aktív és inaktív panelek jelenlegi &mappáinak beszúrása" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Mappa ta&llózása, majd beszúrása" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "A kijelölt elem másolatának beszúrása" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "A jelenlegi &kijelölt vagy aktív mappák beszúrása az aktív panelről" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Elválasztó beszúrása" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Almenü hozzáadása" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Kézzel beírt mappa beszúrása" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Ugrás a következőre" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Ugrás az előzőre" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Összes ág kinyitása" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "A kivágott bejegyzések beillesztése" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Útvonal keresése && cseréje" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Útvonal és cél keresése && cseréje" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Cél útvonal keresése && cseréje" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Útvonal szerkesztése" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Cél útvonal szerkesztése" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Hozzáad..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Bi&ztonsági mentés..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Törlés..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportálás..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importálás..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Beszúrás..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "E&gyebek..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Néhány hasznos művelet a megfelelő célpont beállításához" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Rendezés..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Cél útvonal hozzáadása a mappával együtt" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Mindig bontsa ki a fa nézetet" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Csak az érvényes környezeti &változókat mutassa" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Útvonal is látszik a &felugró menüben" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Név, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Név, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Kedvenc könyvtárak listája (átrendezhető \"húzd és ejtsd\" művelettel)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "További opciók" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Név:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Útvonal:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Cél útvonal:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...csak a kijelölt elemek aktuális &szintjén" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "&Kedvenc könyvtárak átfésülése majd a létezők érvényesítése" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Kedvenc könyvtárak és &Cél könyvtáraik átfésülése majd a létezők érvényesítése" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "Kedvenc könyvtárak fájlba (.&hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "TC \"wincmd.ini\" fájlba (létező &megtartása)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "TC \"wincmd.ini\" fájlba (létező &törlése)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Ugrás a T&C-re vonatkozó beállításokhoz" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Ugrás a T&C-re vonatkozó beállításokhoz" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "Kedvenc könyvtárak fájlból (.&hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "TC \"&wincmd.ini\"-ből" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navigálás..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Hely&reállítás biztonsági mentésből" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Bizton&sági mentés készítése" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Keresés és csere..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "Mindent, A-tól &Z-ig!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...csak elemek egy &csoportját" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...a kijelölt &almenü(k) tartalmát, azok almenüit nem" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...a kijelölt almenü(k) tartalmát, azok &minden almenüjével" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Kapott menü tesztelése" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "&Útvonal szerkesztése" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "&Cél útvonal szerkesztése" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "A fő panelről történő hozzáadás esetén" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Jelenlegi beállítás alkalmazása a Kedvenc könyvtárakra" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Forrás" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Cél" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Útvonalak" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Útvonalkezelés módja új elem hozzáadásakor:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Alkalmazás ezekre az útvonalakra:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Relatív útvonal ettől:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Az ismert formátumokból - mindig kérdezzen rá, melyikből" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Unicode szöveg mentése UTF8 formátumban (UTF16 helyett)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Szöveg ejtésekor a fájlnév automatikus létrehozása (máskülönben a felhasználótól kéri)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Megerő&sítő ablak megjelenítése \"ejtés\" után" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Ha szöveget húzol (\"húzd és ejtsd\") a panelekre:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Húzd a legkívánatosabb formátumot előre \"húzd és ejtsd\" művelettel:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(ha a legkívánatosabb nem elérhető, megpróbáljuk a másodikkal, harmadikkal stb.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(esetleg egyes forrás alkalmazásokkal nem működik, távolítsd el a jelölőt, ha problémás)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "&Fájlrendszer megjelenítése" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Szabad t&erület megjelenítése" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Címke megje&lenítése" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Meghajtólista" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Automatikus behúzás" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Behúzza a kurzort új sor <Enter> hozzáadása esetén , éppen akkora mértékben, amekkora az előző sorban szerepelt" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Jobb margó:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Sorvége mögé pozícionálás" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Engedélyezi a kurzor pozícionálását a sorvége mögé is" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Speciális karaktekek megjelenítése" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "TAB és szóköz karakterek speciális megjelenítése" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Okos tabulátor" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "TAB használata esetén a kurzor az előző sor első nem üres karakterének oszlopába ugrik" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tömbösített behúzás" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Ekkor a TAB és <Shift + TAB> a kijelölt szövegrész beljebb- vagy kijjebb húzását eredményezi" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Szóköz használata behúzáshoz TAB helyett" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "A TAB karaktereket a megadott számú szóközre alakítja (gépelés közben)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Sorvégi szóközök törlése" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "A sorvégi szóközök automatikus törlése - csak a szerkesztett sorokra vonatkozik" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Vigyázat, az \"Okos tabulátor\" opció felülbírálja ezt a beállítást!" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Belső szerkesztő beállításai" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Blokk behúzás::" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tabulátor szélesség:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Vigyázat, az \"Okos tabulátor\" opció felülbírálja ezt a beállítást!" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Hát&tér" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Hát&tér" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Visszaállítás" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Mentés" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elem attribútumai" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Előté&r" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Előté&r" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "S&zöveg-megjelölés" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "&Globalis vázlat használata (és módosítása)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "He&lyi vázlat használata" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Félkövér" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Dőlt" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Á&thúzott" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Aláhúzott" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Be" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Hozzáad..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Törlés..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importálás/Exportálás" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Beszúrás..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Rendezés..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Semmi" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Mindig kibontott fa" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nem" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Bal" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Jobb" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Kedvenc fülek listája (átrendezhető \"húzd és ejtsd\" művelettel)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "További opciók" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Mit és hova állítsunk vissza a kijelölt elem esetén:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Létező fülek megtartása:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Mappaelőzmények mentése:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Bal oldali mentett fülek visszaállítási helye:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Jobb oldali mentett fülek visszaállítási helye:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "Elválasztó" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Elválasztó hozzáadása" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "Almenü" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Almenü hozzáadása" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Teljes összcsukás" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...csak a kijelölt elemek aktuális szintjén" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Kivágás" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "mind törlése!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Almenüt és minden elemét" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Csak az almenüt, de az elemeket megtartod" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "A kijelölt elemet" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Kiválasztott elem törlése" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "A kijelöltek exportálása régi .tab fájl(ok)ba" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavoriteTabsTestMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Régi .tab fájl(ok) importálása alapértelmezett beállítással" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Régi .tab fájl(ok) importálása a kijelölt pozícióra" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Régi .tab fájl(ok) importálása a kijelölt pozícióra" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Régi .tab fájl(ok) importálása az menü kijelölt pozíciójára" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Elválasztó beszúrása" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Almenü hozzáadása" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Összes ág kinyitása" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Beillesztés" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "mindent, A-től Z-ig!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...csak elemek egy csoportját" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Csak elemek egy csoportjának rendezése" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...a kijelölt almenü(k) tartalmát, azok almenüit nem" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...a kijelölt almenü(k) tartalmát, azok minden almenüjével" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Kapott menü tesztelése" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Hozzáadás" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Hozzáadás" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klónozás" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Válassz belső a belső parancsok közül" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Le" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Szerkesztés" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Beszúrás" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Beszúrás" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Át&nevezés" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Változók súgója" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Fel" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Parancs indító útvonala. Ne tedd idézőjelbe!" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "A művelet neve. Nem kerül továbbításra a rendszer számára, ez csupán egy tetszőleges név a könnyebb megjegyezhetőség miatt" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "A parancs számára átadandó paraméter. A szóközt tartalmazó hosszú fájlneveket idézőjelbe kell tenni (kézzel beírva)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Futtatandó parancs. Ne tedd idézőjelbe!" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Művelet leírása" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Műveletek" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Kiterjesztések" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "\"Húzd és ejtsd\" módszerrel átrendezhető" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Fájltípusok" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "A műveletek \"húzd és ejtsd\" módszerrel átrendezhetők" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "A kiterjesztések \"húzd és ejtsd\" módszerrel átrendezhetők" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "A fájltípusok \"húzd és ejtsd\" módszerrel átrendezhetők" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Művelet neve:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Parancs:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Para&méterek:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Indítási útvonal:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Egyéni ezzel..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Egyéni" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Szerkesztés" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Megnyitás szerkesztőben" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Módosítás ezzel..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Parancs kimenetének kérése" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Megnyitás belső szerkesztőben" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Megnyitás belső nézőkében" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Megnyitás" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Megnyitás ezzel..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Futtatás terminálban" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Nézőke" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Megnyitás nézőkében" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Nézet ezzel..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Kattintson ide az ikon cseréléséhez!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Jelenlegi beállítás alkalmazása minden most konfigurált fájlnévre és útvonalra" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Alapértelmezett környezeti műveletek (Megtekintés/Szerkesztés)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Futtatás rendszerhélyban" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Kibővített helyi menü" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Fájltársítási beállítások" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "A fájltársításokhoz történő hozzáadás felajánlása, ha még nem társított" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "A Fájltársítások megnyitásakor felajánlja az addig ismeretlen kiterjesztésű fájlok felvételét meglévő vagy új csoportba" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Futtatás terminálban és bezárás" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Futtatás terminálban és nyitva tartás" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Parancsok" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikonok" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Indítási útvonalak" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Elemek kibővített opciói:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Útvonalak" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Útvonalkezelés módja új ikon, parancs vagy kezdőútvonal hozzáadásakor:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Alkalmazás ezekre a fájlokra és útvonalakra:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Relatív útvonal ettől:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Megerősítő ablak megjelenítése:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "&Másolás művelet" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Törlés művelet" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&F8/Del gomb a Kukába helyez (Shifttel együtt töröl)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Törlés a &kukába művelet" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Írásvédelmi attribútum elhagyása" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Mo&zgatás művelet" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Fájl/Könyvtár megjegyzések &feldolgozása" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Csak a &fájlnév kiválasztása átnevezés előtt (a kiterjesztést nem)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Fül kiválasztási panel megjelenítése a másol/áthelyez párbeszédablakban" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Fájlműveleti hibá&k átugrása és írja naplóablakba" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Archívum vizsgálata" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Ellenőrző összeg vizsgálata folyamatban" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Műveletek futtatása" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Felhasználói felület" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Pufferméret fájlműveletekhez (kB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "&Hash számítás puffermérete (kB-ban):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Folyamatban lévő művelete&k megjelenítése" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Létező fájl esetén az automatikus átnevezés stílusa:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "&Hányszoros legyen a végleges törlés??" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Visszaállítás DC alapértelmezettre" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Átszínezés engedélyezése" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Kurz&orkeret használata" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Inaktív kiválasztási színt használja" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Fordított kijelölé&s használata" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Kurzor szegélye" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Jelenlegi útvonal" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Hát&tér 1:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Hátté&r 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "K&urzor színe:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Kurzor s&zöveg:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktív kurzor színe:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inaktív jelölő színe:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "I&naktív panel fényereje:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Jelölő színe:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Háttér:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Szöveg színe:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Inaktív háttér:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Inaktív szövegszín:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Alább egy előnézet látható. Mozgathatod a kurzort és kijelölhetsz fájlokat a változtatások azonnali kipróbálása érdekében." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Szövegszín:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "A keresési szűrő törlése új keresőablak megnyitásakor" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Kere&sés fájlnév részletre" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Menü sáv megjelenítése a fájl kereső ablakban" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Szöveg keresése a fájlokban" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Fájl keresés" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Az \"Új keresés\" gomb aktuális szűrője:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Alapértelmezett keresési sablon:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Memória térképezés has&ználata fájlokban történő kereséskor" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Memóriafolyam haszná&lata fájlokban történő kereséskor" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "A&lapértelmezett" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatálás" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Egyedi rövidítések:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Rendezés" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Bájt:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Kis-nagyb&etű érzékenység:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Hibás formátum" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Dátum és idő formátum:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Fá&jlméret formátum:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "&Lábléc formátum:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabájt:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "&Fejléc formátum:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobájt:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Megabájt:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Új fájl&ok beszúrása:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Műveletek méretformátuma:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Mappák &rendezése:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Rendezé&si módszer:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabájt:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Frissített fájlok &mozgatása:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Súgó" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Szülő mappába ugrás a fájl panel egy üres területére du&plán kattintva" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&Ne töltse be addig a fájl listát amíg a fül aktív" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Szö&gletes zárójel a könyvtárnevek körül" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Ú&j és frissített fájlok kiemelése" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Fájlok átnevezése helyben a második kattintás&ra a fájl nevén" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Fájl lista betöltése másik szálon" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Ikonok be&töltése a fájl lista után" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "R&ejtett/Rendszer fájlok megjelenítése" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Szó&közzel történő kijelöléskor automatikus léptetés (mint <INSERT> estén)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Windows stílusú működés a fájlok megjelöléséhez (a \"*.*\" a kiterjesztés nélküli fájlokon is működik stb.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Független attribútum szűrő minden új beviteli mezőben" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Kijelölés / kijelölés törlése" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Alapértelmezett attribútum maszk:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Törlés" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Sablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Fájltípus színek (\"húzd és ejtsd\" művelettel átrendezhető)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "A&ttribútum kategória:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Kat&egória színe:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Kategória &maszk:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Kategória &neve:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Betűtípusok" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Gyorsbillentyű &hozzáadása" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Másolás" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Törlés" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Gyorsbillentyű tö&rlése" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Gyorsbillentyű &módosítása" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Következő kategória" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "A felugró menü vonatkozzon a fájlra" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Előző kategória" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "DC alapértékek visszaállítása" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Mentés most" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Rendezés parancsnév szerint" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Rendezés gyorsbillentyűk szerint (csoportosítva)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Rendezés gyorsbillentyűk szerint (egyesével)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Szűrő" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "K&ategóriák:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "&Parancsok:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Gyor&sbillentyű fájlok:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "&Rendezési sorrend:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategóriák" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Parancs" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Rendezési sorrend" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Parancs" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Gyorsbillentyűk" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Leírás" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Gyorsbillentyű" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Paraméterek" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Vezérlők" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Az alábbi útvonalakhoz és alkönyvtáraikhoz:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Műveleti ikonok megjelenítése a &menükben" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Ikonok megjelenítése a gombokon" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Ikon átfedések megjelenítése, pl.: linkekhez" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Rejtett fájlok &halványabb megjelenítése (lassabb)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Speciális ikonok kikapcsolása" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Ikon mérete " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Ikon téma" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Ikonok megjelenítése" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Ikonok megjelenítése a fájlnév bal oldalán " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Lemezegység gombsor:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Fájl panel:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Mind" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Minden társított + &EXE/LNK (lassú)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Nincs ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Csak átlagos ikonok" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Kiválasztott nevek hozzáa&dása" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "&Kiválasztott nevek hozzáadása teljes elérési útvonallal" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Mellőzi (nem mutatja) a következő fájlokat és mappákat:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Mentés ide:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Bal, Jobb nyilak váltogatják a mappákat (Lynx-féle mozgás)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Írás" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+B&etű:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+Betű:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Betűk:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Lapos gombok" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Lapos felület" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Szabad terület mutató megjelenítése a meghajtó címkéjében" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Naplóablak me&gjelenítése" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Műveleti panel megjelenítése a háttérben" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Megosztott műveletek megjelenítése a menüsávban" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Parancs&sor megjelenítése" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Aktuális &könyvtár megjelenítése" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "&Meghajtógombok megjelenítése" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Szabad terület címke megjelenítése" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Meghajtó lista gombok megjelenítése" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "&Funkcióbillentyűk megjelenítése" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Fő&menü megjelenítése" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "&Eszköztár megjelenítése" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Rövid szabad terü&leti címke megjelenítése" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Állapot&sor megjelenítése" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Oszlopok neveinek megjelenítése" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "&Mappa fülek megjelenítése" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Te&rminálablak megjelenítése" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Két meghajtó gombsor megjelenítése (rögzített szélességben, az ablakok felett)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Középső eszköztár megjelenítése" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Képernyő elrendezés " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Naplófájl tartalmának megtekintése" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Dátum hozzáadása a naplófájl nevéhez" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Csomagolás/Kibontás" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Külső parancssori futtatás" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Szimbolikus hivatkozás/másolás/mozgatás/készítés" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Könyvtár létrehozás/törlés" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Hibák &naplózása" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Naplófájl &létrehozása:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Naplófájlok maximális száma" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Információs üzenetek naplózása" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Indítás/leállítás" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "&Sikeres műveletek naplózása" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Fájlrendszer beépülők" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Fájlműveletek naplófájlja" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Naplózási műveletek" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Művelet állapota" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Nem létező fájlok bélyegképeinek eltávolítása" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Konfigurációs fájl tartalmának megtekintése" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Új létrehozása ezzel a kódolással:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Mindig ugorjon a gyökérkönyvtárba a meghajtó váltásakor" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Az &aktuális könyvtár megjelenítése a főablak címsorában" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Indítóképernyő megjelenítése" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Fig&yelmeztető üzenetek megjelenítése (csak \"OK\" gomb)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Miniatűrök gyor&sítótárazása" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatűrök" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Fájlmegjegyzések (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TC importot és exportot illetően:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Alapértelmezett egybájtos szövegkódolás:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Alapértelmezett kódolás:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Beállítási fájl:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC futtatható fájl:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Eszköztár kimeneti útvonala:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bélyegkép mérete:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Egérrel való kivála&sztás" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "A szöveg kurzor többé nem követi az egérkurzort" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Az ikonra &kattintva" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Megnyitás ezzel ..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Görgetés" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Kiválasztás" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Mód:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dupla kattintás" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Sorró&l sorra" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Sorról sorra k&urzormozgással" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Oldalról oldalra" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Egy kattintás (fájl és könyvtár megnyitás)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Egy kattintás (csak könyvtárakhoz, fájlok két kattintással)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Naplófájl tartalmának megtekintése" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Naponta új könyvtárba" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Fájlnevek naplózása teljes útvonallal" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Menü sáv megjelenítése az ablak tetején " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Átnevezési napló" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "&Hibás karakter kicserélése a fájlnévben erre:" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Fűzze hozzá a meglévő átnevezési napló fájlhoz" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Mentett beállításonként egy" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Kilépés mentett beállítás módosítása után" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Előre beállított érték indításkor" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Hozzáadás" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "B&eállítás" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "E&ngedélyezés" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "F&inomhangolás" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Leírás" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájlnév" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "A kereső &beépülők egyéb keresési algoritmusokat és külső eszközöket biztosítanak (mint pl.: \"hely felkeresése\" stb.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájl neve" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Jelenlegi beállítás alkalmazása minden konfigurált beépülőre" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Új beépülő hozzáadásakor nyíljanak meg a beépülők beállításai" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Konfiguráció:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "LUA könyvtár helye:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Relatív útvonal ettől:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Új beépülő hozzáadásakor az útvonal stílusa:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "A tömö&rítő beépülők az archívum fájlokkal való munkához valók" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájlnév" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "A tartalmi beépülők lehetővé teszik kiegészítő fájlinformációk megjelenítését, mint pl.: mp3 tag vagy kép attribútumok a fájl listában, de használhatók kereséshez és csoportos átnevezéshez is" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájl neve" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "A fáj&lrendszer beépülők az operációs rendszer számára elérhetetlen lemezek és külső eszközök hozzáférését biztosítják, mint pl.: Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájl neve" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "A né&zőke beépülők képek, táblázatok, adatbázisok stb. megtekintését teszik lehetővé a Nézőkében (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktív" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Hozzárendelések" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Fájl neve" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Kezdet (a névnek az első begépelt karakterrel kell kezdődnie)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Végződés (a . előtti utolsó karakterrel kell egyeznie)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opciók" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Teljes &név egyezés" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Keresés" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Ezek keresése" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Egyedi név megtartása zárolt fül feloldásakor" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "A fülre kattintva a hozzá tartozó &panel aktiválása" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Fül fejléc megjelenítése akkor is ha csak egy fül van" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Kettőzött fülek bezárása, ha kilép az alkalmazásból" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "M&inden fül bezárásának megerősítése" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Zárolt fülek bezárásának megerősítése" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Fül címének maximá&lis hossza" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "&Zárolt fülek megjelenítése csillaggal *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Fülek &több sorban" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "CTRL-Fel új fület nyit az előtérben" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Új fül &nyitása a jelenlegi mellett" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Újrahasználja a füleket, ha lehetséges" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Fül bezárása gombok megjelenítése" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Mindig mutatja a meghajtó betűjelét a fülön" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Mappafül fejléce" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "karakter" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Művelet végrehajtása, ha duplán kattint a fülön:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Fü&l pozíciók" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Semmi" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nem" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Bal" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Jobb" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Ugrás a Kedvenc fülek beállításaira felülírás esetén" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Ugrás a Kedvenc fülek beállításaira új fájlba mentés esetén" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Kedvenc fülek extra opciók engedélyezése (cél panel kiválasztása visszaállításkor stb.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Alapértelmezett műveletek új Kedvenc fülek elmentéskor:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Mappafülek finomhangolása" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Fül visszaállításakor megőrzendő fülek:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Bal oldali mentett fülek visszaállítási helye:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Jobb oldali mentett fülek visszaállítási helye:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Mappa történet mentése a Kedvenc fülekhez:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Alapértelmezett menü pozíció új Kedvenc fülek mentéskor:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "A \"{command}\" kifejezésnek általában itt kell lennie, hogy a terminálban futtatandó parancs ténylegesen átadásra kerüljön" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "A \"{command}\" kifejezésnek általában itt kell lennie, hogy a terminálban futtatandó parancs ténylegesen átadásra kerüljön" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "A terminál alkalmazás indításához szükséges parancs:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Terminál ablakban történő indításához szükséges parancs - bezárás, amint kész:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Terminál ablakban történő indításához szükséges parancs - terminál nyitva marad, amint kész:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Parancs:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Paraméterek:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Parancs:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Paraméterek:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Parancs:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Paraméterek:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "Gomb k&lónozása" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Gyorsbillentyű szer&kesztése" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Új gomb beszúrása" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Kiválaszt" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Egyéb..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Gyorsbillent&yű eltávolítása" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Javasol" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "A DC javasolja az buboréktippet a gomb típusa, a parancs és a paraméterek alapján" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Lapos gombok" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Parancs hibák jelentése" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "&Feliratok megjelenítése" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Add meg a parancs paramétereit, mindegyiket külön sorban. Nyomd meg az F1 billentyűt a paraméterek súgójához." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Megjelenés" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "&Sáv mérete:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "&Parancs:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "P&araméterek:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Súgó" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Gyorsbillentyű:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Iko&n:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ikon mé&rete:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Parancs:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Paraméterek:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Indítási útvonal:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Stílus:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "Buborék&tipp:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Eszköztár hozzáadása, ami MINDEN DC parancsot tartalmaz" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "külső parancsnak" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "belső parancsnak" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "elválasztónak" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "eszköztár menüként" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Biztonsági mentés..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportálás..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Jelenlegi eszköztár..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "Eszkötár fájlba (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC .BAR fájlba (létező megtartása)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC .BAR fájlba (létező törlése)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC \"wincmd.ini\" fájlba (létező megtartása)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC \"wincmd.ini\" fájlba (létező törlése)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Felső eszköztár..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Biztonsági mentés készítése" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "Eszkötár fájlba (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TC .BAR fájlba (létező megtartása)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TC .BAR fájlba (létező törlése)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC \"wincmd.ini\" fájlba (létező megtartása)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC \"wincmd.ini\" fájlba (létező törlése)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "a jelenleg kijelölt után" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "első elemként" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "utolsó elemként" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "a jelenleg kijelölt elé" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importálás..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Visszaállítás biztonsági mentésből" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "Jelenlegi eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Új eszköztárhoz hozzáadni a jelenlegi eszköztáron" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Új eszköztárhoz hozzáadni a felső eszköztáron" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "A felső eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "A felső eszköztárat cserélni" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "eszköztár fájlból (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Jelenlegi eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Új eszköztárhoz hozzáadni a jelenlegi eszköztáron" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Új eszköztárhoz hozzáadni a felső eszköztáron" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "A felső eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "A felső eszköztárat cserélni" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "egyszerű TC .BAR fájlból" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "Jelenlegi eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Új eszköztárhoz hozzáadni a jelenlegi eszköztáron" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Új eszköztárhoz hozzáadni a felső eszköztáron" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "A felső eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "A felső eszköztárat cserélni" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC \"wincmd.ini\"-ből..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "Jelenlegi eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "Új eszköztárhoz hozzáadni a jelenlegi eszköztáron" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "Új eszköztárhoz hozzáadni a felső eszköztáron" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "A felső eszköztárhoz adni" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "A felső eszköztárat cserélni" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "a jelenleg kijelölt után" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "első elemként" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "utolsó elemként" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "a jelenleg kijelölt elé" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Keresés és csere..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "a jelenleg kijelölt után" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "első elemként" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "utolsó elemként" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "a jelenleg kijelölt elé" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "az alábbiak mindegyikében..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "minden parancsban..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "minden ikon nevében..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "minden paraméterben..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "minden kezdőútvonalban..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "a jelenleg kijelölt után" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "első elemként" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "utolsó elemként" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "a jelenleg kijelölt elé" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Elválasztó" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Térköz" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Gomb típusa" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Jelenlegi beállítás alkalmazása minden konfigurált fájlnévre és útvonalra" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Parancsok" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikonok" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Indítási útvonalak" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Útvonalak" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Alkalmazás ezekre a fájlokra és útvonalakra:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Relatív útvonal ettől:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Útvonalkezelés módja új ikon, parancs vagy kezdőútvonal hozzáadásakor:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Terminálabla&k nyitva tartása a program futtatása után" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "T&erminálban futtat" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Kü&lső program használata" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "T&ovábbi paraméterek" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Futtatandó &program útvonala" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Másolás" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Törlés" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Sablon..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Át&nevezés" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Egyéb..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "A kijelölt fájl buboréktipp beállításai:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Általános buboréktipp beállítások:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "&Fájlok buboréktippjeinek megjelenítése a fájl panelben" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategória tipp:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maszk kategória:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Buboréktipp elrejtési késleltetés:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Buboréktipp megjelenítés módja:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Fájl típusok:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Módosítások elvetése" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportálás..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importálás..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Buboréktipp fájltípusok rendezése" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Dupla kattintással a fájl panel fölötti üres részen" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "A menüvel és belső parancsokkal" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dupla kattintás a fán kijelöl és bezár" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "A menüvel és belső parancsokkal" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "A fülön dupla kattintással (ha engedélyezve vannak)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Gyorsbillentyű használatával kilép és visszatér a kiválasztotthoz" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Egy kattintás a fán kijelöl és bezár" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Használd a parancssori előzményeknél" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Használd a könyvtár előzményeknél" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Használd a fájl megjelenítő előzményeinél (az aktív panelen meglátogatott útvonalaknál)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Viselkedés az aktuális választás értelmében:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Fa elrendezésű menü beállításai:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Hol használjunk fa elrendezésű menüt:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*MEGJEGYZÉS: a kis- és nagybetűk érzékenysége, valamint az ékezetek kezelésére vonatkozó beállítások egyenként visszaállításra kerülnek a különböző felhasználási helyek és munkamenetek között." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Kedvenc &könyvtáraknál:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Kedvenc mappafüleknél:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Az előzményeknél:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Gyorsbillentyűk használata és megjelenítése az elemek kiválasztásához" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Betűtípus" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Felszín és szín beállítások:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Háttér színe:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Kurzor színe:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Találati szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Kurzor alatti találati szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Normális szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Kurzor alatti átlagos szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Fa elrendezésű menü előnézete:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Másodlagos szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Kurzor alatti másodlagos szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Gyorsbillentyű színe:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Kurzor alatti gyorsbillentyű:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Nem kijelölhető szöveg színe:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Kurzor alatti nem kijelölhető elem színe:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Előnézet a mappafa menük leendő kinézetére a bal oldalon kiválasztott színnel." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Belső megtekintő beállításai" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Nézőke oszlopszáma könyv módban" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Beállítás" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Fájlok tömörítése" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Több a&rchívum készítése kijelölt fájlonként/mappánként egy" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Ön&kicsomagoló archívum készítése" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "T&itkosítás" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "A&rchívumba helyezés" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Többlemezes archívum" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "E&lőször TAR archívumba tegye" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Elérési &utak tárolása az archívumban (csak a rekurzív)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Fájl(ok) becsomagolása a fájlba:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Tömörítő" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Mind kicsomagolás&a és végreh&ajtás" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Kicsomagolás és &végrehajtás" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "A tömörített fájl tulajdonságai" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attribútumok:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tömörítési arány:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dátum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Módszer:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Eredeti méret:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fájl:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tömörített méret:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Tömörítő:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Idő:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Nyomtatás beállításai" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Margók (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Alsó:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Bal:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Jobb:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Felső:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Szűrőpanel bezárása" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Írja be a keresendő szöveget vagy szűrőt" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Betűméret számít" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mappák" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fájlok" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Kezdeti egyezés" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Vég egyezés" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Szűrő" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Váltás kereső és szűrő közt" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Több szabály" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "&Kevesebb szabály" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Tartalom beépülők használata, logikai kap&csolatban:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Beépülő" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Mező" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Érték" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&ÉS (minden egyezés)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&VAGY (bármelyik egyezés)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Alkalmaz" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Mégsem" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Sablon..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Sablon..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Többször előforduló fájlok kijelölése" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Maradjon csoportonként egy fájl kijelölés nélkül:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Kijelölés el&távolítása név / kiterjesztés alapján:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "&Kijelölés név / kiterjesztés alapján:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Mégsem" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Elvál&sztó" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Számozás" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Eredmény:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "Vála&szd ki a beillesztendő könyvtárneveket (többet is kijelölhetsz)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "a &végéről" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "az &elejétől" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Mégsem" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Az elsőt számolja" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Az utolsót számolja" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Tartomány leírása" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Eredmény:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "karakterek kivála&sztása beszúráshoz:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[Első;&Utolsó]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Első,&Hossz]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "a &végéről" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "az &elejétől" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "a &végéről" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "az e&lejétől" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Attribútumok cseréje" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archívum" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Létrehozva:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Rejtett" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Utolsó hozzáférés:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Módosítva:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Csak olvasható" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Almappákkal együtt" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Rendszer" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Időbélyegző tulajdonságai" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szürke mező változatlan értéket jelent)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Szöveges megfelelő:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szürke mező változatlan értéket jelent)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktális:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Rendezés" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Mégsem" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Az elemek \"húzd és ejtsd\" módszerrel átrendezhetők" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Vágó" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "CRC32 ellenőrzőfájlt igényel" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Fájlméret" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "A fájl darabolása ide:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Darabszám" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bájt" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabájt" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobájt" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabájt" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Kiadás" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Kommit" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operációs Rendszer" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platform" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revízió" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Verzió" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Szimbolikus hivatkozás létrehozása" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Relatív útvonal használata ahol lehetséges" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Létező cél (erre fog mutatni a hivatkozás)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Hivatkozás neve" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Törlés mindkét oldalon" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Bal oldali törlése" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Jobb oldali törlése" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Kijelölés eltávolítása" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Kijelölés másolásra (alapértelmezett irány)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Kijelölés másolásra -> (balról jobbra)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Másolási irány megfordítása" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Kijelölés másolásra <- (jobbról balra)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Kijelölés törlésre <> (mindkettő)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Kijelölés törlésre <- (bal)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Kijelölés törlésre -> (jobb)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Bezárás" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Összehasonlítás" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Sablon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Szinkronizálás" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Könyvtárak szinkronizálása" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "aszimmetrikus" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "tartalom szerint" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "dátum mellőzése" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "Csak a kiválasztottat" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Almappák" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mutat:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Név" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Méret" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Méret" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Név" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(a főablakban)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Összehasonlítás" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Bal megtekintése" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Jobb megtekintése" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "másolatok" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "egyediek" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Nyomd meg az \"Összehasonlítás\" gombot a kezdéshez" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Szinkronizálás" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Felülírások megerősítése" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Fa elrendezésű menü" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Válassz Kedvenc könyvtárat:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "A kereső kis-nagybetű érzékeny" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Teljes összecsukás" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Teljes kifejtés" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "A kereső az ékezeteket és ikerbetűket figyelmen kívül hagyja" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "A kereső nem kis-nagybetű érzékeny" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "A kereső az ékezeteket és ikerbetűket szigorúan értelmezi" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Ne mutassa az ág tartalmát \"csak mert\" az ág neve tartalmazza a keresett szöveget" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Ha a keresett szöveg része egy ágnak, mutassa az ág teljes nevét akkor is, ha egyes részek különböznek" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Fa elrendezésű menü bezárása" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Fa elrendezésű menü beállítása" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Fa elrendezésű menü színeinek beállítása" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Új hozzáa&dása" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Mó&dosít" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "A&lapértelmezett" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Eltávolít" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Beépülő finomhangolása" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Archívum &típusának megállapítása tartalma alapján" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Tud fáj< törölni" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "T&itkosítás támogatása" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "M&egjelenítés normál fájlként (tömörítő ikonjának elrejtése)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Memó&riába tömörítés támogatása" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Tud létező archívu&mokat módosítani" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Az archívum több fájlt is tartalmazhat" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Tud új archí&vumot létrehozni" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Támogatja a beállítások dialóg&usablakot" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Lehetővé teszi a szöve&gkeresést az archívumban" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Leírás:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "K&eresendő szöveg:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Kiterjesztés:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Állapotjelző:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Név:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Beépülő:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Beépülő:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Nézőke névjegye..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "A névjegy megjelenítése" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Automatikus újratöltés" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Kódolás módosítása" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Fájl másolása" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Fájl másolása" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Másolás a vágólapra" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Másolás a vágólapra, formázva" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Fájl törlése" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Fájl törlése" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Kilépés" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Keresés" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Következő keresése" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Előző keresése" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Teljes képernyő" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Sorra ugrás..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Sorra ugrás" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Középen" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Következő" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Következő fájl betöltése" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Előző" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Előző fájl betöltése" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Vízszintes tükrözés" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Függőleges tükrözés" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Fájl mozgatása" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Fájl mozgatása" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Előnézet" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "&Nyomtatás..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Nyomtatá&s beállításai..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Újratölt" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Újratölti a jelenlegi fájlt" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Elforgatni 180 fokkal" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Elforgatni 270 fokkal" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Elforgatni 90 fokkal" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Mentés" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Mentés másként..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Fájl mentése másként..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Képernyőkép" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Vár 3 másodpercet" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Vár 5 másodpercet" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Összes kijelölése" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Megjelenítés &binárisként" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Kö&nyvként megjelenít" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "&Decimális megjelenítés" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Megjelenítés &hexában" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Megjelenítés &szövegként" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Megjelenítés &tördelt szövegként" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Szöveg&kurzor megjelenítése" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Kód" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (csak szöveg)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Beépülők" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Átlátszóság megjelenítése" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Széthúzás" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Kép széthúzása" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Kép széthúzása" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Visszavonás" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Visszavonás" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "Szöveg &tördelése" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Nagyítás" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Nagyítás" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Nagyítás" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Kicsinyítés" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Kicsinyítés" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Levágás" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Teljes képernyő" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Képkocka exportálása" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Kiemel" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Következő képkocka" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Befest" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Előző képkocka" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Piros szemek" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Átméretez" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Bemutató" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Nézőke" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Ellipszis" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dolás" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Kép" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Toll" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Négyzet" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Elforgat" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Képernyőkép" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Nézőke" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Beépülők" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Indítá&s" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Állj" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Fájlműveletek" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Mindig felül" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Használhatsz \"húzd és ejtsd\" műveletet a feladatsorrend megváltoztatásához" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Mégsem" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Mégsem" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Új feladatlista" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Megjelenítés külön ablakban" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Tedd az első helyre a sorban" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Tedd az utolsó helyre a sorban" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Feladatlista" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Soron kívül" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "1. feladat" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "2. feladat" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "3. feladat" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "4. feladat" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "5. feladat" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Megjelenítés külön ablakban" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Mind szünetel" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Linkek követése" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Ha a &könyvtár létezik" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ha létezik a fájl" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Mégsem" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Parancssor:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Paraméterek:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Kezdő útvonal:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "B&eállítás" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "T&itkosítás" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "&Dátum/Idő másolása" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Háttérben (különálló kapcsolat)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Adminisztrátori jogosultság szükséges" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "ennek az objektumnak a másolásához:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "ennek az objektumnak a létrehozásához:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "ennek az objektumnak a törléséhez:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "ezen objektum attribútumainak lekéréséhez:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "ennek a hard linknek az elkészítéséhez:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "ennek az objektumnak a megnyitásához:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "ennek az objektumnak az átnevezéséhez:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "ezen objektum attribútumainak modósításához:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "ennek a szimbolikus linknek a létrehozásához:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Rögzítés dátuma" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Magasság" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Szélesség" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Gyártó" #: uexifreader.rsmodel msgid "Camera model" msgstr "Kamera típus" #: uexifreader.rsorientation msgid "Orientation" msgstr "Tájolás" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Ez a fájl nem található, de segíthet a fájlok végső kombinációjának érvényesítésében:\n" "%s\n" "\n" "Kérlek tedd elérhetővé, majd nyomj OK-t, vagy nyomd meg\n" "a Mégsem gombot a fájl kihagyásával történő folytatáshoz." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Gyorsszűrő mellőzése" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Jelenlegi művelet megállítása" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Adj meg egy fájlnevet és kiterjesztést a behúzott szöveghez" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Importálandó szöveg formátum" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Sérült:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Általános:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Hiányzó:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Olvasási hiba:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Sikeres:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Add meg az ellenőrző összeget és válassz algoritmust:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Ellenőrző összeg vizsgálata" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Összesen:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Szeretnéd törölni az előző szűrőbeállításokat az új keresés előtt?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "A vágólap nem tartalmaz érvényes eszköztári adatot." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Mind;Aktív panel;Bal panel;Jobb panel;Fájlműveletek;Beállítások;Hálózat;Egyebek;Párhuzamos port;Nyomtatás;Megjelölés;Biztonság;Vágólap;FTP;Navigáció;Súgó;Ablak;Parancssor;Eszközök;Nézet;Felhasználó;Fülek;Rendezés;LogNapló" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Régi rendezés;ABC rendezés" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dátum" #: ulng.rscolext msgid "Ext" msgstr "Kit" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Név" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Méret" #: ulng.rsconfcolalign msgid "Align" msgstr "Igazítás" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Fejléc" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Töröl" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Mező tartalma" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mozgat" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Szélesség" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Oszlop személyreszabása" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Fájl társítások beállításai" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Parancssor és paraméterek megerősítése" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Másolat (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Sötét mód" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Automatikus;Bekapcsolva;Kikapcsolva" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importált DC eszköztár" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importált TC eszköztár" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "kB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_EjtettSzoveg" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_EjtettHTMLSzoveg" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_EjtettRichtextSzoveg" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_EjtettEgyszeruSzoveg" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_EjtettUnicodeUTF16Szoveg" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_EjtettUnicodeUTF8Szoveg" #: ulng.rsdiffadds msgid " Adds: " msgstr " Többlet: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Összehasonlítás..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Hiányzó: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "A két fájl egyezik!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Egyező: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Eltérő: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kódolás" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Sorvégződések" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "A szöveg megegyezik a következő beállítások mellett:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "A szöveg azonos, de a fájlok nem egyeznek!\n" "A következő különbségek találhatók:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Megsza&kítás" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "M&ind" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Hozzáfűz" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Forrásfájlok a&utomatikus átnevezése" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "&Célfájlok automatikus átnevezése" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Mégsem" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Összehasonlítás tartalom &alapján" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Folytat" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Hozzáfűz" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "&Mindet összefűzi" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Kilépés a programból" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "&Mellőzés" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Min&d mellőzése" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nem" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Egyik sem" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Má&s" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Felülír" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Min&det felülír" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Minden &nagyobb felülírása" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Min&den régebbi felülírása" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Minden &kisebb felülírása" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Át&nevezés" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Fol&ytat" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Újra&próbál" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "&Rendszergazdaként" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Kihagy" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Minde&t kihagy" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Felold" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Igen" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Fájl(ok) másolása" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Fájl(ok) mozgatása" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "&Szünet" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Indítá&s" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Feladatlista" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Sebesség: %s/mp" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Sebesség: %s/mp, hátralevő idő: %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text formátum;HTML formátum;Unicode szöveg;Egyszerű szöveg" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Meghajtón a szabad terület mutató" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<címtelen>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nincs hordozó>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander belső szerkesztője." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Sorra ugrás:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Sorra ugrás" #: ulng.rseditnewfile msgid "new.txt" msgstr "új.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Fájlnév:" #: ulng.rseditnewopen msgid "Open file" msgstr "Fájl megnyitása" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vissza" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Keresés" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Előre" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Csere" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "külső szerkesztővel" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "belső szerkesztővel" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Futtatás rendszerhélyban" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Futtatás terminálban és bezárás" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Futtatás terminálban és nyitva tartás" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "A \"]\" nem található ebben a sorban: %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Nincs kiterjesztés megadva a parancs előtt: \"%s\". Figyelmen kívül lesz hagyva." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Bal;Jobb;Aktív;Inaktív;Mindkettő;Egyik sem" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nem;Igen" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "DC-bol_exportalva" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Kérdez;Felülír;;Kihagy" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Kérdez;Összefűz;Kihagy" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Kérdez;Felülír;Régebbi felülírása;Kihagy" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Kérdez;Nem állít be többet;Hibák mellőzése" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Bármely fájl" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Tömörítő konfigurációs fájlok" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC buboréktipp fájlok" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Kedvenc könyvtárak fájljai" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Futtatható fájlok" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini beállításfájlok" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Régi DC .tab fájlok" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Könyvtár fájlok" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Beépülő fájlok" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programok és dinamikus könyvtárak" #: ulng.rsfilterstatus msgid "FILTER" msgstr "SZŰRŐ" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC eszköztár fájlok" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC eszköztár fájlok" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml beállításfájlok" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Sablon meghatátozása" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s szint mélységben" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "mind (végtelen mélység)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "csak az aktuális mappában" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "A könyvtár \"%s\" nem létezik!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Találat: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Keresési sablon mentése" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Sablon neve:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Végignézve: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Keresés" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Fájlok keresése" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "A vizsgálat ideje: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Keresés helye" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "&Terminál betűtípus" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Sz&erkesztő betűtípus" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Funkciógombok betűtípusa" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Nap&ló betűtípus" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Fő betűtípus" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Útvonal betűtípus" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Találati lista betűtípus" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Állapotsor betűtípus" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Fa elrendezésű menü betűtípus" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Né&zőke betűtípus" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Nézőke &betűtípusa könyv módban" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s szabad %s teljes méretből" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s szabad" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Utolsó hozzáférési dátum/idő" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attribútumok" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Megjegyzés" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tömörített méret" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Létrehozási dátum/idő" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Kiterjesztés" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Csoport" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Dátum / idő módosítása" #: ulng.rsfunclinkto msgid "Link to" msgstr "Erre utal" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Módosítási dátum/idő" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Név" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Név, kiterjesztés nélkül" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Tulajdonos" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Útvonal" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Méret" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Eredeti útvonal" #: ulng.rsfunctype msgid "Type" msgstr "Típus" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Hiba a hardlink létrehozásakor." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "nincs;név, a-z;név z-a;kiterjesztés, a-z;kiterjesztés, z-a;méret 9-0;méret 0-9;dátum 9-0;dátum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Figyelem! A .hotlist biztonsági mentés fájlok visszaállításakor a meglévő lista felülírásra kerül az importált tartalommal.\n" "\n" "Biztosan folytatod a műveletet?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Párbeszédablak másolása/mozgatása" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Különbségvizsgáló" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Megjegyzés ablakának szerkesztése" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Szerkesztő" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Fájlok keresése" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Fő" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Csoportos átnevező" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Könyvtárszinkronizálás" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Nézőke" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Egy ilyen nevű beállítás már létezik.\n" "Felülírod?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Biztosan visszaállítod alapértékre?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Biztosan törlöd ezt a beállítást: \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "%s másolata" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Add meg az új nevet" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Legalább egy gyorsbillentyű fájlt meg kell tartanod." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Új név" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" beállítás megváltozott.\n" "Mented a változásait?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "\"ENTER\"-t nem tartalmazhat" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Parancs neve szerint;Gyorsbillentyű szerint (csoportosítva);Gyorsbillentyű szerint (egyesével)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Nem található hivatkozás az alapértelmezett eszköztár fájlra" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "k" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Keresőablakok listája" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maszk kijelölés megszüntetése" #: ulng.rsmarkplus msgid "Select mask" msgstr "Kijelölő maszk" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maszk bevitele:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Már létezik ilyen nevű oszlop." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Az éppen szerkesztett oszlopnézet cseréjéhez MENTSD, MÁSOLD vagy TÖRÖLD a jelenlegit" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Egyéni oszlopok beállítása" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Add meg az egyedi oszlop nevét" #: ulng.rsmenumacosservices msgid "Services" msgstr "Szolgáltatások" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Műveletek" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Alap>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Oktális" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Hivatkozás készítése..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Hálózati meghajtó leválasztása..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Szerkesztés" #: ulng.rsmnueject msgid "Eject" msgstr "Kiadás" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Kibontás ide..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Hálózati meghajtó hozzáadása..." #: ulng.rsmnumount msgid "Mount" msgstr "Csatolás" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Új" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nincs elérhető hordozó" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Megnyitás" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Megnyitás ezzel ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Egyéb..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Tömörítés ide..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Visszaállítás" #: ulng.rsmnusortby msgid "Sort by" msgstr "Rendezés" #: ulng.rsmnuumount msgid "Unmount" msgstr "Lecsatolás" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Nézőke" #: ulng.rsmsgaccount msgid "Account:" msgstr "Fiók:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Double Commander összes belső parancsa" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Leírás: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "További paraméterek az archiváló parancssorra:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Szeretnéd idézőjelbe tenni?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Hibás CRC32 az elkészült fájlon:\n" "\"%s\"\n" "\n" "Megtartod ezt a hibás fájlt?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Biztosan megszakítod ezt a műveletet?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nem másolhatod/helyezheted a fájlt \"%s\" saját magára!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "%s különleges fájl nem másolható" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "A mappa \"%s\" nem törölhető" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "A(z) \"%s\" könyvtár nem írható felül ezzel: \"%s\" (nem könyvtár)" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Váltás ide \"%s\" meghiúsult!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Eltávolítod az összes inaktív fület?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Ez a fül (%s) zárolt! Mégis bezárod?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "A paraméter megerősítése" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Parancs nem található! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Biztosan ki akarsz lépni?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "A fájl: %s megváltozott. Visszamásolod?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Nem másolható vissza - megtartod a módosított fájlt?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár másolása?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "\"%s\" másolása?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Új fájltípus létrehozása: \"%s fájl\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Add meg a DC eszköztár mentésének helyét és nevét" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Egyéni művelet" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Törölje a részben átmásolt fájlt?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár törlése?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "A kijelölt %d fájlt/mappát a Kukába helyezi?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "\"%s\" törlése?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "A kijelölt \"%s\" Kukába helyezi?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nem helyezhető a Kukába! Törlöd véglegesen?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "A lemez nem elérhető" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Írd be az egyéni művelet nevét:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Írd be a fájl kiterjesztést:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Írd be a nevet:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Add meg az új fájltípus nevét, mely a következő kiterjesztéssel rendelkezik: \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC hiba az archívumban" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Hibás adat" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nem bír csatlakozni a szerverhez: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nem tudom a(z) %s fájlt ide másolni: %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Ez a könyvtár nem mozgatható: \"%s\"" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "%s fájl nem mozgatható" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Már létező könyvtárnév: \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "A dátum %s nem támogatott" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "A könyvtár %s létezik!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "A műveletet a felhasználó megszakította" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Hiba a fájl bezárásakor" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nem lehet létrehozni a fájlt" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nincs több fájl az archívumban" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nem lehet megnyitni létező fájlt" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Hiba a fájlból olvasáskor" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Hiba a fájl írásakor" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Nem lehet létrehozni a mappát: %s !" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Érvénytelen hivatkozás" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "A fájl nem található" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nincs elég memória" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "A művelet nem támogatott!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Hiba a helyi menü parancsban" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Hiba a beállítások betöltésekor" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Szintaktikai hiba a reguláris kifejezésben!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nem tudom a fájlt (%s) %s névre változtatni" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nem bírja menteni a társítást!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "A fájl nem menthető" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nem módosíthatók az attribútumok: \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nem módosítható a dátum/idő: \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nem módosítható a tulajdonos/csoport: \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Nem módosíthatók az jogosultságok: \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Nem módosíthatók a bővített attribútumok: \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "A puffer túl kicsi" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Túl sok fájl a tömörítéshez" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Ismeretlen archívum" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Futtatható fájl: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Kilépési állapot:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Biztosan eltávolítod a kedvenc mappafüleket? (A művelet visszavonhatatlan!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Húzz ide újabb bejegyzéseket" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Adj meg egy új nevet ennek a Kedvenc fül bejegyzésnek:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Új Kedvenc könyvtárak bejegyzés mentése" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Kedvenc fülek sikeresen exportálva: %d / %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Alapértelmezésben mentse a mappa történetet új kedvenc fülek mentésekor:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Sikeresen importált fájlok száma: %d / %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Régi fülek importálva" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Válassz egy .tab fájlt az importáláshoz (de akár többet is, egyszerre!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "A Kedvenc fülek legutóbbi módosítását nem mentetted még. Szeretnéd menteni a folytatás előtt?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Mappa történet mentése a Kedvenc fülekhez:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Almenü neve" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Ezzel betöltöd a Kedvenc füleket: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Jelenlegi fülek mentése, a meglévő Kedvenc fülek felülírása" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "A fájl %s megváltozott, mented?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bájt, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Felülírja:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "A fájl %s már létezik, felülírod?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Ezzel a fájllal:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "A fájl \"%s\" nem található." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktív fájl műveletek" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Néhány fájlművelet még nem lett befejezve. Double Commander bezárása adatvesztést eredményezhet!" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "A megadott név hosszabb (%d), mint %d karakter!\n" "%s\n" "A programok többsége nem fér hozzá ilyen hosszú nevű fájlhoz/könyvtárhoz!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "A fájl (%s) csak olvasható/rejtett/rendszer. Törlöd?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Biztosan újratöltöd a fájl, ezzel elveszítve a változásokat?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "A fájl \"%s\" mérete túl nagy a cél fájlrendszerre!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "A fájl %s már létezik, hozzáfűzi?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Követed a következő szimbolikus hivatkozást: \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Válaszd ki az importálandó szöveg formátumot" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "%d kijelölt mappa hozzáadása" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "A kijelölt mappa hozzáadása: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "A jelenlegi mappa hozzáadása: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Parancs végrehajtása" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Kedvenc könyvtárak beállítása" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Biztosan eltávolítod az összes bejegyzést a Kedvenc könyvtárakból? (A művelet visszavonhatatlan!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Futtatni fogja a következő parancsot:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ez egy Kedvenc könyvtár, melynek neve " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Az aktív panel a következő útvonalra fog mutatni:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Az inaktív panel pedig a következő útvonalra fog mutatni:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Hiba történt a visszaállítás során..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Hiba történt az exportálás során..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Mind exportálása!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Kedvenc könyvtárak exportálása - válaszd ki az exportálandó elemeket" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Kiválasztott exportálása" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Mind importálása!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Kedvenc könyvtárak importálása - válaszd ki az importálandó elemeket" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Kiválasztott importálása" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Útvonal:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Importálandó \".hotlist\" fájl helye" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Kedvenc könyvtár neve" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Új bejegyzések száma: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Semmi sincs kijelölve exportálásra!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Kedvenc könyvtár" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "A kijelölt mappa hozzáadása ismét: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "A jelenlegi mappa hozzáadása ismét: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Add meg a Kedvenc könyvtárak biztonsági mentésének helyét és nevét" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Parancs:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(almenü vége)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Menü neve:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Név:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(elválasztó)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Almenü neve" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Kedvenc könyvtár cél könyvtára" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Válaszd ki az aktív panel egyedi rendezési módját a mappaváltást követően" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Válaszd ki az inaktív panel egyedi rendezési módját a mappaváltást követően" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Néhány hasznos művelet a megfelelő útvonalbeállításhoz (relatív, abszolút, Windows specifikus mappák stb.)" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Összes mentett bejegyzés: %d\n" "\n" "Biztonsági mentés fájlneve: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Összes exportált bejegyzés: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Törlöd az almenü [%s] összes elemét?\n" "Ha NEM-mel válaszolsz, akkor a menü elválasztókat törlöm, de az almenük megmaradnak." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Add meg a Kedvenc könyvtárak mentésének helyét és nevét" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Hibás az elkészült fájl mérete: \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Kérlek helyezd be a következő lemezt vagy ilyesmit.\n" "\n" "Jóváhagyod e fájl írását:\n" "\"%s\"\n" "\n" "Hátralévő kiírandó méret (bájtban): %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Hiba a parancssorban" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Érvénytelen fájlnév" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Érvénytelen beállítási fájl formátum" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Hibás hexadecimális számérték: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Érvénytelen útvonal" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Az útvonal (%s) tiltott karaktereket tartalmaz." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ez nem érvényes beépülő!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ez a beépülő a Double Commander %s.%s verziójához készült! Nem fog működni a Double Commander %s verziójával!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Érvénytelen idézet" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Érvénytelen kijelölés." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Fájl lista betöltése..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "TC konfigurációs fájl (wincmd.ini) helye" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TC futtatható állományok (totalcmd.exe vagy totalcmd64.exe) helye" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "%s másolása" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "%s törlése" #: ulng.rsmsglogerror msgid "Error: " msgstr "Hiba: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Külső program indítása" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Külső eredmény" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "%s kitömörítése" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Infó: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "%s hivatkozás létrehozása" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "%s könyvtár létrehozása" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "%s fájl mozgatása" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Tömörítés %s fájlba" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Program leállítás" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Program indítás" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "%s könyvtár törlése" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Kész: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "%s szimbolikus hivatkozás létrehozása" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "%s fájl sértetlenségének ellenőrzése" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Fájl megsemmisítése: %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Könyvtár megsemmisítése: %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mesterjelszó" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Kérlek, írd be a mesterjelszót:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Új fájl" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "A következő darab kicsomagolása következik" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nincsenek fájlok" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nincsenek kijelölt fájlok." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nincs elég hely a célmeghajtón, folytatod?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nincs elég hely a célmeghajtón, újrapróbálja?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nem lehet törölni a fájlt: %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nincs leprogramozva." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Az objektum nem létezik!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "A műveletet nem lehet befejezni, mert a fájlt egy másik program megnyitotta:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Alább egy előnézet látható. Mozgathatod a kurzort és kijelölhetsz fájlokat a változtatások azonnali kipróbálása érdekében." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Jelszó:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "A jelszavak különböznek!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Kérlek, add meg a jelszót:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Jelszó (Tűzfal):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Kérlek, add meg a jelszót ismét, ellenőrzés céljából:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "%s &törlése" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" már létezik. Felülírja?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Biztosan törlöd ezt a mentett beállítást: \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Probléma lépett fel a parancs futtatása közben (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "A behúzott szövegből létrehozandó fájl neve:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Kérlek, tedd elérhetővé a fájlt! Újra próbálod?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Adj meg egy szimpatikus nevet a Kedvenc fül számára" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Add meg a menü elem nevét" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "%d fájl/könyvtár áthelyezése/átnevezése?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Kiválasztott \"%s\" áthelyezése/átnevezése?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Szeretnéd lecserélni ezt a szöveget?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Kérlek, indítsd újra a Double Commander-t, hogy érvényesíthessük a változásokat" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "HIBA: a Lua könyvtár (\"%s\") betöltése közben" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Válaszd ki mely fájltípushoz rendeljük hozzá a kiterjesztést: \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Kiválasztva: %s / %s, fájl: %d / %d, mappa: %d / %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Válassz futtatható állományt ehhez" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Kérlek, csak ellenőrzőösszeg-fájlokat jelölj ki!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Válaszd ki a következő kötet helyét" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Kötetcimke beállítása" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Különleges mappák" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Útvonal hozzáadása az aktív panelről" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Inaktív panel elérési útjának hozzáadása" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "A kijelölt útvonal tallózása és használata" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Környezeti változó használata..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ugrás Double Commander speciális útvonalra..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ugrás környezeti változóra..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ugrás egyéb Windows speciális mappára..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ugrás Windows speciális mappára (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Legyen relatív Kedvenc könyvtárhoz" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Abszolút útvonallá alakítás" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Legyen relatív Double Commander speciális útvonalhoz..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Legyen relatív környezeti változóhoz..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Legyen relatív Windows speciális TC mappához..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Legyen relatív Windows speciális mappához..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Double Commander speciális útvonal használata..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Kedvenc könyvtár használata" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Windows speciális mappa használata..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windows speciális mappa (TC) használata..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Ez a fül (%s) zárolt! Megnyitod a mappát új fülön?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Fül átnevezése" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Fül új neve:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cél útvonal:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Hiba! Nem található a TC konfigurációs fájlja:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Hiba! Nem található a TC konfiguráció futtatható állománya:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Hiba! A TC még mindig fut, de ehhez a művelethez be kell azt zárni.\n" "Zárd be majd nyomj OK-t, vagy kattints a Mégsem gombra a megszakításhoz." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Hiba! Nem található a TC eszköztár kimeneti útvonala:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Add meg a TC eszköztár mentésének helyét és nevét" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "A beépített terminálablak le van tiltva. Szeretnéd engedélyezni?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "FIGYELEM: A folyamat leállítása nemkívánatos eredményeket okozhat, beleértve az adatok elvesztését és a rendszer instabillá válását. A folyamat így nem kap lehetőséget arra, hogy állapotát vagy adatait mentse a leállítása előtt. Biztosan le akarod állítani a folyamatot?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Szeretnéd tesztelni a kiválasztott archívumokat?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" a vágólapra került" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "A kijelölt fájl típusa nem ismerhető fel a kiterjesztése alapján" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Importálandó \".toolbar\" fájl helye" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Importálandó \".BAR\" fájl helye" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Add meg az Eszköztár biztonsági mentésének helyét és nevét" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Mentve!\n" "Eszköztár fájl neve: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Túl sok fájl van kijelölve." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Meghatározatlan" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "HIBA: Fa elrendezésű menü váratlan felhasználása!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<KIT. NÉLKÜL>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<NÉV NÉLKÜLI>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Felhasználónév:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Felhasználónév (Tűzfal):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "ELLENŐRZÉS:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Megvizsgálod a kijelölt ellenőrzőösszegeket?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "A célfájl megsérült, az ellenőrzőösszeg nem stimmel!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Kötet címke:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Kérlek add meg a kötet méretét:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Szeretnéd a Lua könyvtár helyét beállítani?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "A kiválasztott %d fájl/mappa törlése?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Megsemmisíted a kiválasztott \"%s\"-t?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "ezzel" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Hibás jelszó!\n" "Kérlek, próbáld újra!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Legyen automatikus átnevezés a következők szerint: \"név (1).kit\", \"név (2).kit\" stb.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Számláló" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dátum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Beállítás neve" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Változónév beírása" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Változó értékének beírása" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Írd be a változó nevét" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Írd be a(z) \"%s\" változó értékét" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Ne törődjön vele, [Legutóbb használt]-ként mentse el;Kérdezze meg a felhasználót, menteni szeretné-e?;Mentés automatikusan" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Kiterjesztés" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Név" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nincs változás;NAGYBETŰS;kisbetűs;Nagy kezdőbetűs;Minden Szó Nagy Kezdőbetűs;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Legutóbb használt]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "A [Legutóbb használt] maszkok;A legutóbb használt mentett beállítás;Teljesen új maszkok" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Csoportos átnevező" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Az x-edik karakter" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Karakterek az x-től y-ig terjedően" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Teljes dátum" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Teljes idő" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Számláló" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Nap" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Nap (2 számjegy)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "A hét napja (röviden, pl.: \"hé\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "A hét napja (hosszan, pl.: \"hétfő\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Kiterjesztés" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Teljes fájlnév az elérési úttal és fájlnévvel" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Teljes fájlnév karakterei az x-től y-ig terjedően" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Óra" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Óra (2 számjegy)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Perc" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Perc (2 számjegy)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Hónap" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Hónap (2 számjegy)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Hónap neve (röviden, pl.: \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Hónap neve (hosszan, pl.: \"január\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Név" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Szülő könyvtár(ak)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Másodperc" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Másodperc (2 számjegy)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Változó, menet közben" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Év (2 számjegy)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Év (4 számjegy)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Beépülők" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Beállítás mentése más néven" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Ez a beállítás már létezik. Felülírod?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Add meg a mentett beállítás nevét" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" mentett beállítás megváltozott.\n" "Mented a változásait?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Mentett beállítások rendezése" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Idő" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Figyelem, ismétlődő nevek!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "A fájl sorainak száma hibás: %d - %d kellene, hogy legyen!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Megtart;Töröl;Kérdez" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Nincs belső megfelelője a parancsnak" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Elnézést, még nem történt keresés..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Elnézést, nincs több keresési eredmény, amit bezárhatnék..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Fejlesztés" #: ulng.rsopenwitheducation msgid "Education" msgstr "Képzés" #: ulng.rsopenwithgames msgid "Games" msgstr "Játékok" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimédia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Hálózat" #: ulng.rsopenwithoffice msgid "Office" msgstr "Irodai csomag" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Egyéb" #: ulng.rsopenwithscience msgid "Science" msgstr "Tudomány" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Beállítások" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Rendszer" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Kellékek" #: ulng.rsoperaborted msgid "Aborted" msgstr "Megszakítva" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Ellenőrzőösszegének számítás" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Ellenőrzőösszegének számítás itt: \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "\"%s\" ellenőrzőösszegének számítása" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Számítás" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Számítás \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Összefűzés" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Fájlok összefűzése itt: \"%s\" ebbe \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Másolás" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Másolás innen \"%s\" ide \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "\"%s\" másolása ide \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Mappa készítése" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Mappa készítése: \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Törlés" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Törlés innen: \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "\"%s\" törlése" #: ulng.rsoperexecuting msgid "Executing" msgstr "Végrehajtás" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "\"%s\" végrehajtása" #: ulng.rsoperextracting msgid "Extracting" msgstr "Kibontás" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Kibontás innen \"%s\" ide \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Befejezve" #: ulng.rsoperlisting msgid "Listing" msgstr "Listázás" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "\"%s\" listázása" #: ulng.rsopermoving msgid "Moving" msgstr "Mozgatás" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Mozgatás innen \"%s\" ide \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "\"%s\" mozgatása ide \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nincs elindítva" #: ulng.rsoperpacking msgid "Packing" msgstr "Csomagolás" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Csomagolás innen \"%s\" ide \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "\"%s\" csomagolása ide \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Szüneteltetve" #: ulng.rsoperpausing msgid "Pausing" msgstr "Szünetelés" #: ulng.rsoperrunning msgid "Running" msgstr "Futás" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Tulajdonság beállítása" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Tulajdonság beállítása itt \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "\"%s\" tulajdonságainak beállítása" #: ulng.rsopersplitting msgid "Splitting" msgstr "Vágás" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "\"%s\" vágása ide \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Indítás" #: ulng.rsoperstopped msgid "Stopped" msgstr "Megállított" #: ulng.rsoperstopping msgid "Stopping" msgstr "Megállítás" #: ulng.rsopertesting msgid "Testing" msgstr "Próbálás" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Próbálás itt \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "\"%s\" próbálása" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Ellenőrzőösszeg vizsgálata" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Ellenőrzőösszeg vizsgálata itt \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "\"%s\" ellenőrzőösszeg vizsgálata" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Fájl forrás hozzáférhetőségére várva" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "A felhasználó válaszára vár" #: ulng.rsoperwiping msgid "Wiping" msgstr "Megsemmisítés" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Megsemmisítés itt: \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "\"%s\" megsemmisítése" #: ulng.rsoperworking msgid "Working" msgstr "Dolgozik" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Az elejére;A végére;Okosan:)" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Új buboréktipp fájltípus hozzáadása" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Az éppen szerkesztett tömörítő beállítások cseréjéhez ALKALMAZD a módosításokat vagy TÖRÖLD a jelenlegit" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Üzemmódfüggő további parancsok" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Add hozzá, ha nem üres" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Archívum fájl (hosszú név)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Válassz tömörítőprogramot" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Archívum fájl (rövid név)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Tömörítő lista kódolásának megváltoztatása" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Biztosan törlöd ezt: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Exportált tömörítő beállítás" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "hibakód" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Tömörítőbeállítás exportálása" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d elem exportálásra került ebbe a fájlba: \"%s\"." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Válaszd ki az exportálandó(ka)t" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Fájllista (hosszú nevek)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Fájllista (rövid nevek)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Tömörítő beállítások importálása" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d elem importálásra került ebből a fájlból: \"%s\"." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Válaszd ki az importálandó tömörítő beállítófájl(oka)t" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Válaszd ki az importálandó(ka)t" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Csak a név, útvonal nélkül" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Csak az útvonal, név nélkül" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Tömörítőalkalmazás (hosszú név)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Tömörítőalkalmazás (rövid név)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Minden név idézőjelbe" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "A szóközt tartalmazó nevek idézőjelbe" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Egyetlen feldolgozandó fájl" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Cél alkönyvtár" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "ANSI kódolás használata" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "UTF8 kódolás használata" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Add meg a tömörítőbeállítások mentésének helyét és nevét" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Archívum típusának neve:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "A(z) \"%s\" beépülő társítása ezzel:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Első;Utolsó;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klasszikus sorrend (régi); Betűrend (de a Nyelv mindig elöl)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Teljes kifejtés;Teljes összecsukás" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktív panel a bal oldalra, inaktív a jobb oldalra (régi);Bal panel a bal oldalra, jobb a jobb oldalra" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Kiterjesztés megadása" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Az elejére;A végére;Betűrendben" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "külön ablak;kicsinyített külön ablak;műveleti panel" #: ulng.rsoptfilesizefloat msgid "float" msgstr "lebegőpontos" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "A cm_Delete %s gyorsbillentyűje hozzárendelésre kerül, így felhasználható e beállítás megfordítására." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Gyorsbillentyű hozzáadása ehhez: %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Gyorsbillentyű hozzáadása" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Gyorsbillentyű beállítása sikertelen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Gyorsbillentyű cseréje" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Parancs" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "A cm_Delete %s gyorsbillentyűje olyan paraméterrel rendelkezik, amely felülírja ezt a beállítást. Szeretnéd megváltoztatni ezt a paramétert és a globális beállítást használni helyette?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "A cm_Delete %s gyorsbillentyűje a paramétere megváltoztatását igényli, hogy megfeleljen a(z) \"%s\" gyorsbillentyű működésének. Megváltoztatod?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Leírás" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Gyorsbillentyű szerkesztése ehhez: %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Paraméter javítás" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Gyorsbillentyű" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Gyorsbillentyűk" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<semmi>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paraméterek" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Gyorsbillentyű beállítása fájl törlésre" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Ahhoz, hogy a(z)\"%s\" gyorsbillentyű működjön, a(z) \"%s\" gyorsbillentyűt a cm_Delete parancshoz kell rendelni, de már hozzá van rendelve ehhez: \"%s\". Megváltoztatod?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "A cm_Delete %s gyorsbillentyűje egy olyan szekvenciaparancs, amelyhez nem lehet hozzárendelni fordított Shift-tel működő gyorsbillentyűt. Ez a beállítás valószínűleg nem fog működni." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "A gyorsbillentyű már foglalt" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "A gyorsbillentyű \"%s\" már foglalt." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Cseréled erre \"%s\"?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "erre használva \"%s\", itt: \"%s\"" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "erre a parancsra van használva, de másik paraméterrel" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Tömörítőprogramok" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatikus frissítés" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Viselkedés" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Áttekintő nézet" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Színek" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Oszlopok" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Beállítás" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Egyedi oszlopok" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Kedvenc könyvtárak extra" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Húzd és ejtsd" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Meghajtólista gombok" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Kedvenc fülek" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Fájltársítások extra" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Fájltársítások" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Új" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Fájlműveletek" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Fájl panelek" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Fájl keresés" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Fájl nézet" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Fájl nézet - finomhangolás" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Fájltípusok" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Mappafülek" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Mappafülek hangolása" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Betűtípusok" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Kiemelők" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Gyorsbillentyűk" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikonok" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Kihagyási lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Billentyűk" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Nyelv" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Megjelenés" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Napló" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Egyebek" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Egér" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Csoportos átnevező" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "A beállítások megváltoztak ebben a kategóriában: \"%s\"\n" "\n" "Mented a változásokat?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Beépülők" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Gyorskeresés/szűrő" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Eszköztár" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Eszköztár hangolás" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Középső eszköztár" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Eszközök" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Buboréktippek" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Fa elrendezésű menü" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Fa elrendezésű menü színei" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Sehol;Parancssor;Gyorskeresés;Gyorsszűrő" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bal gomb;Jobb gomb;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "a fájl lista tetején;mappák után (ha a mappák hamarább vannak a fájloktól);rendezési sorrendben;a fájllista alján" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "egyedi lebegőpontos;egyedi bájt;egyedi kilobájt;egyedi megabájt;egyedi gigabájt;egyedi terabájt" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "A beépülő (%s) már hozzá van rendelve a következő kiterjesztés(ek)hez:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "&Letiltás" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "E&ngedélyezés" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktív" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Leírás" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Fájlnév" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Fájltípus szerint" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Beépülő szerint" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Név" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "A WCX beépülők rendezése csak a kiterjesztés szerinti megjelenítési módban lehetséges!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Hozzárendelések" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Válaszd ki a Lua könyvtár fájlt" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Buboréktipp fájltípus átnevezése" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Érzéke&ny;Érzéke&tlen" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fájlok;&Mappák;Fájlok é&s Mappák" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Szűrőpanel elrejtése, &ha nem fókuszált;Beállításmódosítások megtartása a következő munkamenetre" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "betűméret nem számít;területi beállítások szerint (aAbBcC);előbb nagybetűs, aztán kisbetűs (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "rendezés név szerint, mappák előre;fájlokéval egyező rendezés, mappák elöl;fájlokéval megegyező" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "betűrendben, ékezetek figyelembe vételével;betűrendben, különleges karakterek rendezve;természetes rendezés: betűrend és számok;természetes, különleges karakterek rendezve" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Felül;Alul;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Elválasztó;Belső pa&rancs;Külső ¶ncs;&Menü" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Az éppen szerkesztett buboréktipp fájltípus beállítások cseréjéhez ALKALMAZD a módosításokat vagy TÖRÖLD a jelenlegit" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Név kategória:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" már létezik!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Biztosan törlöd ezt: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Exportált buboréktipp fájltípus beállítás" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Buboréktipp fájltípus beállítás exportálása" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "%d elem exportálásra került ebbe a fájlba: \"%s\"." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Válaszd ki az exportálandó(ka)t" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Buboréktipp fájltípus beállítások importálása" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "%d elem importálásra került ebből a fájlból: \"%s\"." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Válaszd ki az importálandó buboréktipp fájltípus beállítófájl(oka)t" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Válaszd ki az importálandó(ka)t" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Add meg a buboréktipp fájltípus beállítások mentésének helyét és nevét" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Buboréktipp fájl típus név" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Régi DC - Copy (x) fájlnév.kit;Windows - fájlnév (x).kit;Egyéb - fájlnév(x).kit" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne módosítsa a helyzetet;használja az új fájl beállításait;rendezett sorrendben" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Teljes abszulút útvonallal;Relatív útvonallal ehhez: %COMMANDER_PATH%;Relatív útvonallal a következőhöz" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "tartalmazza (betűméret számít)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "tartalmazza" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "= (betűméret számít)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "A mező (\"%s\") nem található!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "nem tartalmazza (betűméret számít)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "nem tartalmazza" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!= (betűméret számít)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!reguláris kifejezés" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "A(z) \"%s\" beépülő nem található!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "reguláris kifejezés" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "A(z) \"%s\" egység nem található a(z) \"%s\" mezőben!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "%d fájl, %d mappa" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "\"%s\" jogosultsága nem állítható" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "\"%s\" tulajdonosa nem állítható" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fájl" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Könyvtár" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Többféle típus" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Csőnév" #: ulng.rspropssocket msgid "Socket" msgstr "Foglalat" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciális blokk eszköz" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciális karakter eszköz" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Szimbolikus hivatkozás" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ismeretlen típus" #: ulng.rssearchresult msgid "Search result" msgstr "Keresés eredménye" #: ulng.rssearchstatus msgid "SEARCH" msgstr "KERESÉS" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<névtelen sablon>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Egy fájlkeresés a DSX beépülő használatával már folyamatban van.\n" "Annak véget kell érnie mielőtt újabbat indíthatnál." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Egy fájlkeresés a WDX beépülő használatával már folyamatban van.\n" "Annak véget kell érnie mielőtt újabbat indíthatnál." #: ulng.rsselectdir msgid "Select a directory" msgstr "Válasszon ki egy könyvtárat" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Legújabb;Legrégebbi;Legnagyobb;Legkisebb;Első a csoportban;Utolsó a csoportban" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Válassz ablakot" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Súgó ehhez: %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Mind" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategória" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Oszlop" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Parancs" #: ulng.rssimpleworderror msgid "Error" msgstr "Hiba" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Meghiúsult!" #: ulng.rssimplewordfalse msgid "False" msgstr "Hamis" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Fájlnév" #: ulng.rssimplewordfiles msgid "files" msgstr "fájlok" #: ulng.rssimplewordletter msgid "Letter" msgstr "Betű" #: ulng.rssimplewordparameter msgid "Param" msgstr "Paraméter" #: ulng.rssimplewordresult msgid "Result" msgstr "Eredmény" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Sikerült!" #: ulng.rssimplewordtrue msgid "True" msgstr "Igaz" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Változó" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "MunkaMappa" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bájt" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "gigabájt" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "kilobájt" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "megabájt" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "terabájt" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "%d fájl, %d mappa, Méret: %s (%s bájt)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nem lehet létrehozni a célkönyvtárat!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Hibás fájlméret formátum!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nem lehet darabolni a fájlt!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "A darabok száma több, mint 100! Folytassam?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatikus;1457664B - 3.5\" HD lemez 1.44M;1213952B - 5.25\" HD lemez 1.2M;730112B - 3.5\" DD lemez 720K;362496B - 5.25\" DD lemez 360K;98078kB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Könyvtár kiválasztása:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Csak előnézet" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Egyebek" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Megjegyzés" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Lapos" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Korlátozott" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Egyszerű" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Mesés" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Csodálatos" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Óriási" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Válassz egy könyvtárat a könyvtár előzményekből" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Válaszd ki a Kedvenc füleket:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Válassz egy parancsot a parancssori előzményekből" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Válassz egy akciót a főmenüből" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Válassz egy akciót a fő eszköztárról" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Válassz egy könyvtárat a Kedvenc könyvtár előzményekből:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Válassz egy könyvtárat a fájl megjelenítő előzményeiből" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Válassz egy fájlt vagy könyvtárat" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Hiba a szimbolikus hivatkozás létrehozásakor." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Átlagos szöveg" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Egyszerű szöveg" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nem csinál semmit;Fül bezárása;Kedvenc fülek megnyitása;Fülek felugró menü" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Nap" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Óra" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Perc" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Hónap" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Másodperc" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Hét" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Év" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Kedvenc fülek átnevezése" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Kedvenc fülek almenüjének átnevezése" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Különbségvizsgáló" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Szerkesztő" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Hiba a különbségvizsgáló megnyitásakor" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Hiba a szerkesztő megnyitásakor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Hiba a terminál megnyitásakor" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Hiba a nézőke megnyitásakor" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Rendszer alapérték;1 mp;2 mp;3 mp;5 mp;10 mp;30 mp;1 perc;Soha nem rejti el" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "DC és rendszertippek összevonva, DC elöl (régi);DC és rendszertippek, rendszer elöl;DC tipp ha van, egyébként rendszer;Csak DC tippek;Csak rendszer tippek" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Nézőke" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Kérlek, jelezd a hibát a 'bug tracker'-en egy leírással arra vonatkozóan, hogy mit csináltál éppen és csatold a következő fájlt: %s. Nyomd meg a (z) \"%s\" gombot a folytatáshoz, vagy a(z) \"%s\" gombot a programból való kilépéshez." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Mindkét panel, előbb az aktív majd az inaktív" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Mindkét panel, balról jobbra" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Panel útvonala" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "A nevek szögletes zárójelbe - vagy bármi tetszőlegesbe - foglalása" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Csak a fájlnév, a kiterjesztés nem" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Teljes fájlnév (elérési út + fájlnév)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "A \"%\" változók súgója" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Paramétert kér a felhasználótól a javasolt alapértékkel" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "A panel útvonalának utolsó könyvtára" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "A fájl útvonalának utolsó könyvtára" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Bal panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Átmeneti fájl, mely fájlnevek listáját tartalmazza" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Átmeneti fájl, mely teljes útvonalak listáját tartalmazza (útvonal + fájlnév)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "UTF-16 + BOM fájlnevek a listában" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "UTF-16 + BOM fájlnevek a listában, idézőjelek között" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "UTF-8 fájlnevek a listában" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "UTF-8 fájlnevek a listában, idézőjelek között" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Átmeneti fájl, mely fájlok relatív útvonalú listáját tartalmazza" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Csak a kiterjesztés" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Csak a fájlnév" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Egyéb példák a lehetőségekre" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Útvonal, a végén útvonal elválasztó nélkül" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Innentől a sor végéig a százalékos változó mutatót a \"#\" jel váltja fel" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Százalék jelet ad vissza" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Innentől a sor végéig a százalékos változó mutató visszatér a \"%\" jelre" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "\"-a\" vagy bármi egyéb beszúrása a nevek elé" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Paraméter bekérés;Javasolt alapérték]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Fájlnév relatív útvonallal" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Jobb panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "A jobb oldali kijelölt fájl teljes elérési útja" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Parancs megjelenítése futtatás előtt" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Egyszerű üzenet]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Üzenet a felhasználónak" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktív panel (forrás)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktív panel (cél)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Innentől a fájlnevek idézőjelben lesznek (alapérték)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "A parancs végrehajtása után a terminálablak nyitva marad" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Az útvonalak végén útvonal elválasztóval" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Innentől a fájlnevek nem lesznek idézőjelben" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "A parancs végrehajtása után a terminálablak bezárul" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Az útvonalak végén útvonal elválasztó nélkül (alapérték)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Hálózat" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Lomtár" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "A Double Commander belső nézőkéje." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Rossz minőség" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódolás" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Kép típusa" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Új méret" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nem található!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Toll;Négyzet;Ellipszis" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "külső nézőkével" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "belső nézőkével" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Cserék száma: %d" #: ulng.rszeroreplacement msgctxt "ulng.rsmsgfavoritetabsendofmenuulng.rsmsgfavoritetabssimpleseparator" msgid "No replacement took place." msgstr "Nem történt csere." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Nincs \"%s\" nevű beállítás" ������������������������������������������doublecmd-1.1.30/language/doublecmd.hr.po�����������������������������������������������������������0000644�0001750�0000144�00001406664�15104114162�017277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2015-01-06 17:20+0100\n" "Last-Translator: Ivica Pavelić <ivica.pavelic2@zg.ht.hr>\n" "Language-Team: \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" "X-Language: hr_HR\n" "X-Native-Language: hrvatski\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgctxt "fsyncdirsdlg.rscomparingpercent" msgid "Comparing... %d%% (ESC to cancel)" msgstr "Uspoređujem... %d%% (ESC za otkazivanje)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgctxt "fsyncdirsdlg.rsdeleteright" msgid "Right: Delete %d file(s)" msgstr "Desno: Obriši %d datoteku(e)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Pronađeno je datoteka: %d (istovjetnih: %d, različitih: %d, jedinstvenih lijevo: %d, jedinstvenih desno: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Sa ljeva na desno: Kopiraj %d datoteka, ukupne veličine %d bajta" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Sa desna na lijevo: Kopiraj %d datoteka, ukupne veličine %d bajta" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgctxt "tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint" msgid "Choose template..." msgstr "Izaberite obrazac..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption" msgid "C&heck free space" msgstr "P&rovjeri slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption" msgid "Cop&y attributes" msgstr "Kopiraj& svojstva" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption" msgid "Copy o&wnership" msgstr "Kopiraj v&lasništvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption" msgid "Copy &permissions" msgstr "Kopiranje dopuštenja" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopiraj v&rijeme i datum" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption" msgid "Correct lin&ks" msgstr "Ispravi v&eze" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Poništi osobinu samo za &čitanje" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption" msgid "E&xclude empty directories" msgstr "I&zuzmi prazne mape" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&ledi veze" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbreservespace.caption" msgid "&Reserve space" msgstr "&Čuvaj slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Šta činiti kada se ne mogu podesiti vreme, svojstva, itd." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgctxt "tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption" msgid "Use file template" msgstr "Koristi obrazac datoteke" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Kada &Mapa postoji" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Kada &datoteka postoji" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption" msgid "When ca&nnot set property" msgstr "Kada se ne& mogu postaviti osobine" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption" msgid "<no template>" msgstr "<nema obrasca>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmabout.btncopytoclipboard.caption msgctxt "tfrmabout.btncopytoclipboard.caption" msgid "Copy to clipboard" msgstr "Kopirati u međuspremnik" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Izgrađen" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmabout.lblhomepage.caption msgctxt "tfrmabout.lblhomepage.caption" msgid "Home Page:" msgstr "Početna stranica:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "prerađeno izdanje" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Izdanje" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmattributesedit.btnreset.caption msgctxt "tfrmattributesedit.btnreset.caption" msgid "&Reset" msgstr "&Poništi" #: tfrmattributesedit.caption msgctxt "tfrmattributesedit.caption" msgid "Choose attributes" msgstr "Izaberite svojstva" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arhiva" #: tfrmattributesedit.cbcompressed.caption msgctxt "tfrmattributesedit.cbcompressed.caption" msgid "Co&mpressed" msgstr "st&isnuto" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mapa" #: tfrmattributesedit.cbencrypted.caption msgctxt "tfrmattributesedit.cbencrypted.caption" msgid "&Encrypted" msgstr "&Šifrirano" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skriveno" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Samo za &čitanje" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgctxt "tfrmattributesedit.cbsparse.caption" msgid "S&parse" msgstr "P&rorijeđeno" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ljepljivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgctxt "tfrmattributesedit.cbsymlink.caption" msgid "&Symlink" msgstr "&Simbolička veza" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istem" #: tfrmattributesedit.cbtemporary.caption msgctxt "tfrmattributesedit.cbtemporary.caption" msgid "&Temporary" msgstr "&Privremeno" #: tfrmattributesedit.gbntfsattributes.caption msgctxt "tfrmattributesedit.gbntfsattributes.caption" msgid "NTFS attributes" msgstr "Svojstva NTFS " #: tfrmattributesedit.gbwingeneral.caption msgctxt "tfrmattributesedit.gbwingeneral.caption" msgid "General attributes" msgstr "Opća svojstva" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostalo" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Kao t&ekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Izračunaj zbirnu provjeru" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgctxt "tfrmchecksumcalc.cbopenafterjobiscomplete.caption" msgid "Open checksum file after job is completed" msgstr "Otvorite datoteku provjere nakon završetka zadatka" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Učini posebnu datoteku zbirne provjere za svaku datoteku" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgctxt "tfrmchecksumcalc.lblsaveto.caption" msgid "&Save checksum file(s) to:" msgstr "&Kopiraj zbirnu(e) ptovjeru(e) u" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Zbirna provjera..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Šifriranje" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "D&odaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otk&aži" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Po&veži se" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Upravnik veza" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Poveži se na:" #: tfrmcopydlg.btnaddtoqueue.caption msgctxt "tfrmcopydlg.btnaddtoqueue.caption" msgid "A&dd To Queue" msgstr "&Dodaj u zakazano" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmcopydlg.btnoptions.caption #, fuzzy msgctxt "tfrmcopydlg.btnoptions.caption" msgid "O&ptions" msgstr "&Mogućnosti" #: tfrmcopydlg.btnsaveoptions.caption msgctxt "tfrmcopydlg.btnsaveoptions.caption" msgid "Sa&ve these options as default" msgstr "Kopiraj ove mogućnosti kao podrazumijevane" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiraj datoteku(e)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Kopiraj opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Napomena datoteke/mape" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Uredi& napomenu za:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Šifriranje:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samostalno upoređivanje" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binarno" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiraj skup desno" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiraj skup desno" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiraj skup lijevo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiraj skup lijevo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Naljepi" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Ponovi" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Označi &sve" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Izlaz" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Pronađi" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Pronađi" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Nađi sljedeće" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Nađi sljedeće" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Zamjeni" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Zamjeni" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Idi na liniju" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Zanemari veličinu slova" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Zanemari praznine" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Nastavi klizanje" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Razlika linija" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Sljedeća razlika" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Sljedeća razlika" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otvori lijevo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otvori desno..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Oboji pozadinu" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Učitaj ponovo" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ponovo učitaj" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Kopiraj kao..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Kopiraj kao..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Kopiraj lijevo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Kopiraj lijevo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Kopiraj lijevo kao..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Kopiraj lijevo kao..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Kopiraj desno" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Kopiraj desno" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Kopiraj desno kao..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Kopiraj desno kao..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Usporedi" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Usporedi" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Šifriranje" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Šifriranje" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Usporedi datoteke" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Lijevo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Radnje" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Ši&friranje" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Mogućnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj novu prečicu nizu" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Odustani" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Ukloni posljednju prečicu iz niza" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Samo za sledeća poklapanja" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Odrednice (svaka u posebnoj liniji):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Prečice:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O radnji" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Postavke" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Postavke" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Isjeci" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Isjeci" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Pronađi" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Pronađi" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Nađi sljedeće" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Nađi sljedeće" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Priljepi" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Priljepi" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Zamjeni" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Zamjeni" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Označi &sve" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Označi sve" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zatvori" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Izađi" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Napusti" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otvori" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Otvori" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Učitaj ponovo" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Sačuvaj" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Kopiraj&kao..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Kopiraj kao" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Uređivač" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Po&moć" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Ši&friranje" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otvori kao" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Kopiraj kao" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Isticanje sintakse" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Završetak linije" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&U redu" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "O&setljivo na veličinu slova" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Traži od umetnutog znaka" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regularni izrazi" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Samo označeni tekst&" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Samo cijele riječi" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "&Mogućnosti" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Zamjeni sa:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Traži:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smjer" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Raspakiraj datoteke" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Raspakiraj imena putanje ako su sačuvana u datotekama" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Raspakiraj svaku od arhiva u &posebnu podMapa (po imenima arhiva)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "P&repiši postojeće datoteke" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "U &mapu:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Izvuci datoteke na osnovu poklapanja:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Lozinka za šifrirane datoteke:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Sačekajte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ime datoteke:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na „Zatvori“ ako se privremena datoteka ne može izbrisati. " #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Na ploču" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Pregledaj sve" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "&Trenutna radnja:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ka:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ljepljivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Sadrži:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Napravljeno:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Putanja:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Udruženje" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Posljednji pristup:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Posljednja izmena:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Poslednja izmena stanja:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlasnik&" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitanje" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Veza ka:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Ime" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Vrijednost" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Priključci" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zatvori" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption #, fuzzy #| msgid "actCancel" msgid "C&ancel" msgstr "akcija otkaži" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "" #: tfrmfinddlg.actclose.caption #, fuzzy #| msgid "actClose" msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "akcija zatvori" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption #, fuzzy #| msgid "actEdit" msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "akcija Uredi" #: tfrmfinddlg.actfeedtolistbox.caption #, fuzzy #| msgid "actFeedToListbox" msgid "Feed to &listbox" msgstr "akcija Popunite popis" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption #, fuzzy #| msgid "actGoToFile" msgid "&Go to file" msgstr "akcija Idi na datoteku" #: tfrmfinddlg.actintellifocus.caption #, fuzzy #| msgid "actIntelliFocus" msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "akcija IntelliFocus" #: tfrmfinddlg.actlastsearch.caption #, fuzzy #| msgid "actLastSearch" msgid "&Last search" msgstr "akcija Zadnje pretraživanje" #: tfrmfinddlg.actnewsearch.caption #, fuzzy #| msgid "actNewSearch" msgid "&New search" msgstr "akcija Novo pretraživanje" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption #, fuzzy #| msgid "actPageAdvanced" msgid "Go to page \"Advanced\"" msgstr "akcija Napredna stranica" #: tfrmfinddlg.actpageloadsave.caption #, fuzzy #| msgid "actPageLoadSave" msgid "Go to page \"Load/Save\"" msgstr "akcija Spremanja i usnimavanja stranice" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption #, fuzzy #| msgid "actPagePlugins" msgid "Go to page \"Plugins\"" msgstr "akcija Ulomka stranica" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption #, fuzzy #| msgid "actPageResults" msgid "Go to page \"Results\"" msgstr "akcija Rezultati stranice " #: tfrmfinddlg.actpagestandard.caption #, fuzzy #| msgid "actPageStandard" msgid "Go to page \"Standard\"" msgstr "akcija Standardna stranica" #: tfrmfinddlg.actstart.caption #, fuzzy #| msgid "actStart" msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "akcija pokrenite radnju" #: tfrmfinddlg.actview.caption #, fuzzy #| msgid "actView" msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "akcija Pregled" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Snimi" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "U&čitaj" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Snimi&" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Snimi kao „Početak u mapi“" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ako se snimi, „Početak u mapi“ će biti povraćen prilikom učitavanja obrasca. Upotrebite to ako želite da primijenite pretragu na određenu mapu" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Koristi obrazac" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Pronađi datoteke" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "O&setljivo na veličinu slova" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Od &datuma:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Do &datuma:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Od &veličine:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Do &veličine:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Omogući pretraživanje arhivia" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Pronađi &tekst u datoteci" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Prati &simboličke veze" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Pronađi datoteke koje ne& sadrže tekst" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ne& starije od:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Traži& po djelu imena datoteke" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Zameni& sa" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Označi mape i &datoteke" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Od &vremena:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Do vre&mena:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Koristi priključak za pretragu:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Unesite imena mapa koji bi trebali biti isključeni iz pretrage odvojene znakom \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Unesite imena datoteka koje bi trebale biti isključene iz pretrage odvojene znakom \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Unesite imena datoteka razdvojena znakom \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Priključak" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Vrijednost" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mape" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Datoteke" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Pronađi podatke" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Odrednice&" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Šifriranje:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "I&zuzmi podmape" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Izuzmi datoteke" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Maska datoteke" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Počni u &mapi" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "traži u &podmapi:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Prethodne pretrage:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Otvori u novoj kartici" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Mogućnosti" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Ukloni sa spiska" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Prikaži sve pronađene stavke" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Pokaži u uređivaču" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Prikaži u pregledniku" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Pregled" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Napredno" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Učitaj/Sačuvaj" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Priključci" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Izlazi" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standardno" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Pronađi" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Pronađi" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "O&setljivo na veličinu slova" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regularni izrazi" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Lozinka:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Korisničko ime:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Napravi čvrstu vezu" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će veza biti usmerena" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Uvezi sve!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Uvezi izabrano" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Izaberite stavke koje želite uvesti" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Klikom na podizbornik će se izabrati cijeli izbornik" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Držite CTRL i kliknite na stavke radi izbora više njih" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Usmerivač" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Kopiraj u..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Stavka" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Ime datoteke" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dolje&" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dolje" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Obriši" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&gore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Gore" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&O programu" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dodaj ime datoteke u naredbenu liniju" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Dodaj putanju i ime datoteke u naredbenu liniju" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiraj putanju u naredbenu liniju" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Sažeto" #: tfrmmain.actbriefview.hint msgctxt "tfrmmain.actbriefview.hint" msgid "Brief View" msgstr "Sažeti pregled" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Izračunaj zauzeće prostora" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Promeni mapu" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Pređi na mapu korisnika" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Pređi u roditeljsku mapu" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Pređi u izvorno sistemsku mapu" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Računanje zbirne &provere..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Provera zbroja..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Očisti dnevničku datoteku" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Očisti prozor dnevničke datoteke" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Zatvori &sve kartice" #: tfrmmain.actcloseduplicatetabs.caption msgctxt "tfrmmain.actcloseduplicatetabs.caption" msgid "Close Duplicate Tabs" msgstr "Zatvori duple kartice" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Zatvori karticu" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Sledeća naredbena linija" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Postavi sledeću naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Prethodna naredbena linija" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Postavi prethodnu naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Potpuno" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Pregled u vidu stupaca" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Usporedi po &sadržaju" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Usporedba mapa" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Usporedba mapa" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska mapa" #: tfrmmain.actconfigfavoritetabs.caption msgctxt "tfrmmain.actconfigfavoritetabs.caption" msgid "Configuration of Favorite Tabs" msgstr "Uređivanje omiljenih kartica" #: tfrmmain.actconfigfoldertabs.caption msgctxt "tfrmmain.actconfigfoldertabs.caption" msgid "Configuration of folder tabs" msgstr "Podešavanje kartica mapa" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Alatna traka" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Prikaži priručni izbornik" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopirajte sve kartice u suprotni prozor" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiraj sve prikazane &stupce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiraj potpunu putanju sa imenima datoteka" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiraj imena datoteka u međuspremnik" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiraj datoteke bez pitanja za potvrdu" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiranje cijelog puta odabranih datoteka bez završnog razdvajanja" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiranje cijelog puta odabrane datoteke" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiraj u istu table" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiraj" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Prikaži zauzeće memorije" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Iseci" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Prikaži parametre naredbe" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Povijest mapa" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Brzi spisak &mapa" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Odaberite bilo koju naredbu za pokretanje" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Uredi &napomenu..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Uredi novu datoteku" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Uredi polje putanje iznad spiska" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zamjeni table" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Napusti" #: tfrmmain.actextractfiles.caption msgctxt "tfrmmain.actextractfiles.caption" msgid "&Extract Files..." msgstr "&Izvuci datoteke..." #: tfrmmain.actfileassoc.caption msgctxt "tfrmmain.actfileassoc.caption" msgid "Configuration of File &Associations" msgstr "Pridruživanje &datoteka..." #: tfrmmain.actfilelinker.caption msgctxt "tfrmmain.actfilelinker.caption" msgid "Com&bine Files..." msgstr "&Spoji datoteke..." #: tfrmmain.actfileproperties.caption msgctxt "tfrmmain.actfileproperties.caption" msgid "Show &File Properties" msgstr "Prikaži svojstva &datoteka" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Podeli& datoteku..." #: tfrmmain.actflatview.caption msgctxt "tfrmmain.actflatview.caption" msgid "&Flat view" msgstr "&Ravan prikaz" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgctxt "tfrmmain.actfocuscmdline.caption" msgid "Focus command line" msgstr "Žiža na naredbenu liniju" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgctxt "tfrmmain.actgotofirstfile.caption" msgid "Place cursor on first file in list" msgstr "Postavi pokazivač na prvu datoteku kartice" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgctxt "tfrmmain.actgotolastfile.caption" msgid "Place cursor on last file in list" msgstr "Postavi pokazivač na posljednju datoteku kartice" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Napravi &čvrstu vezu..." #: tfrmmain.acthelpindex.caption msgctxt "tfrmmain.acthelpindex.caption" msgid "&Contents" msgstr "&Sadržaj" #: tfrmmain.acthorizontalfilepanels.caption msgctxt "tfrmmain.acthorizontalfilepanels.caption" msgid "&Horizontal Panels Mode" msgstr "&Vodoravan prikaz tabli" #: tfrmmain.actkeyboard.caption msgctxt "tfrmmain.actkeyboard.caption" msgid "&Keyboard" msgstr "&Tastatura" #: tfrmmain.actleftbriefview.caption msgctxt "tfrmmain.actleftbriefview.caption" msgid "Brief view on left panel" msgstr "Sažet pogled lijeve ploče" #: tfrmmain.actleftcolumnsview.caption msgctxt "tfrmmain.actleftcolumnsview.caption" msgid "Columns view on left panel" msgstr "Prikaz stupaca na lijevoj ploči" #: tfrmmain.actleftequalright.caption msgctxt "tfrmmain.actleftequalright.caption" msgid "Left &= Right" msgstr "lijevo &= Desno" #: tfrmmain.actleftflatview.caption msgctxt "tfrmmain.actleftflatview.caption" msgid "&Flat view on left panel" msgstr "Ravni pogled na lijevu ploču" #: tfrmmain.actleftopendrives.caption msgctxt "tfrmmain.actleftopendrives.caption" msgid "Open left drive list" msgstr "Otvori spisak lijevog uređaja" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Pr&eokrenuti redosljed na lijevoj ploči" #: tfrmmain.actleftsortbyattr.caption msgctxt "tfrmmain.actleftopendrives.caption" msgid "Sort left panel by &Attributes" msgstr "Sortiraj lijevi prozor prema &Atributima" #: tfrmmain.actleftsortbydate.caption msgctxt "tfrmmain.actleftsortbydate.caption" msgid "Sort left panel by &Date" msgstr "Poredaj u lijevoj ploči po datumu" #: tfrmmain.actleftsortbyext.caption msgctxt "tfrmmain.actleftsortbyext.caption" msgid "Sort left panel by &Extension" msgstr "Poredaj u lijevoj ploči po tipu datoteke" #: tfrmmain.actleftsortbyname.caption msgctxt "tfrmmain.actleftsortbyname.caption" msgid "Sort left panel by &Name" msgstr "Poredaj u lijevoj ploči abecedi" #: tfrmmain.actleftsortbysize.caption msgctxt "tfrmmain.actleftsortbysize.caption" msgid "Sort left panel by &Size" msgstr "Poredaj u lijevoj ploči po veličini" #: tfrmmain.actleftthumbview.caption msgctxt "tfrmmain.actleftthumbview.caption" msgid "Thumbnails view on left panel" msgstr "Prikaz ikona na lijevoj ploči" #: tfrmmain.actloadfavoritetabs.caption msgctxt "tfrmmain.actloadfavoritetabs.caption" msgid "Load tabs from Favorite Tabs" msgstr "Usnimi karticu iz omiljene kartice" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgctxt "tfrmmain.actloadselectionfromclip.caption" msgid "Load Selection from Clip&board" msgstr "Učitaj sadržaj međuspremnika" #: tfrmmain.actloadselectionfromfile.caption msgctxt "tfrmmain.actloadselectionfromfile.caption" msgid "&Load Selection from File..." msgstr "&Učitaj izbor iz datoteke..." #: tfrmmain.actloadtabs.caption msgctxt "tfrmmain.actloadtabs.caption" msgid "&Load Tabs from File" msgstr "&Učitaj kartice iz datoteke" #: tfrmmain.actmakedir.caption msgctxt "tfrmmain.actmakedir.caption" msgid "Create &Directory" msgstr "Napravi &Mapu" #: tfrmmain.actmarkcurrentextension.caption msgctxt "tfrmmain.actmarkcurrentextension.caption" msgid "Select All with the Same E&xtension" msgstr "Označi sve sa istim nastavkom&" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption msgctxt "tfrmmain.actmarkinvert.caption" msgid "&Invert Selection" msgstr "&Okreni izbor" #: tfrmmain.actmarkmarkall.caption msgctxt "tfrmmain.actmarkmarkall.caption" msgid "&Select All" msgstr "&Označi sve" #: tfrmmain.actmarkminus.caption msgctxt "tfrmmain.actmarkminus.caption" msgid "Unselect a Gro&up..." msgstr "Poništi izbor &skupa..." #: tfrmmain.actmarkplus.caption msgctxt "tfrmmain.actmarkminus.caption" msgid "Select a &Group..." msgstr "Izaberi &skup..." #: tfrmmain.actmarkunmarkall.caption msgctxt "tfrmmain.actmarkunmarkall.caption" msgid "&Unselect All" msgstr "&Odznači sve" #: tfrmmain.actminimize.caption msgctxt "tfrmmain.actminimize.caption" msgid "Minimize window" msgstr "Umanji prozor" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgctxt "tfrmmain.actmultirename.caption" msgid "Multi-&Rename Tool" msgstr "Pribor za masovno &preimenovanje" #: tfrmmain.actnetworkconnect.caption msgctxt "tfrmmain.actnetworkconnect.caption" msgid "Network &Connect..." msgstr "Uspostavi mrežnu &vezu..." #: tfrmmain.actnetworkdisconnect.caption msgctxt "tfrmmain.actnetworkdisconnect.caption" msgid "Network &Disconnect" msgstr "Prekini mrežnu &vezu" #: tfrmmain.actnetworkquickconnect.caption msgctxt "tfrmmain.actnetworkquickconnect.caption" msgid "Network &Quick Connect..." msgstr "&Brza mrežna veza..." #: tfrmmain.actnewtab.caption msgctxt "tfrmmain.actnewtab.caption" msgid "&New Tab" msgstr "&Nova kartica" #: tfrmmain.actnextfavoritetabs.caption msgctxt "tfrmmain.actnextfavoritetabs.caption" msgid "Load the Next Favorite Tabs in the list" msgstr "Učitaj sljedeće omiljene table na karticu" #: tfrmmain.actnexttab.caption #, fuzzy msgctxt "tfrmmain.actnexttab.caption" msgid "Switch to Nex&t Tab" msgstr "Pređi na &sljedeću karticu" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actopenarchive.caption msgctxt "tfrmmain.actopenarchive.caption" msgid "Try open archive" msgstr "Pokušaj otvoriti arhivu" #: tfrmmain.actopenbar.caption msgctxt "tfrmmain.actopenbar.caption" msgid "Open bar file" msgstr "Otvori datoteku sa trake" #: tfrmmain.actopendirinnewtab.caption msgctxt "tfrmmain.actopendirinnewtab.caption" msgid "Open &Folder in a New Tab" msgstr "Otvori &Mapu u novoj kartici" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otvori &VFS spisak" #: tfrmmain.actoperationsviewer.caption msgctxt "tfrmmain.actoperationsviewer.caption" msgid "Operations &Viewer" msgstr "Preglednik &napretka radnji" #: tfrmmain.actoptions.caption msgctxt "tfrmmain.actoptions.caption" msgid "&Options..." msgstr "&Mogućnosti..." #: tfrmmain.actpackfiles.caption msgctxt "tfrmmain.actpackfiles.caption" msgid "&Pack Files..." msgstr "&Arhivirati sažimanjem datoteke..." #: tfrmmain.actpanelssplitterperpos.caption msgctxt "tfrmmain.actpanelssplitterperpos.caption" msgid "Set splitter position" msgstr "Podesite položaj djeljenja" #: tfrmmain.actpastefromclipboard.caption msgctxt "tfrmmain.actpastefromclipboard.caption" msgid "&Paste" msgstr "&Priljepi" #: tfrmmain.actpreviousfavoritetabs.caption msgctxt "tfrmmain.actpreviousfavoritetabs.caption" msgid "Load the Previous Favorite Tabs in the list" msgstr "Učitaj sljedeće omiljene table na karticu" #: tfrmmain.actprevtab.caption msgctxt "tfrmmain.actprevtab.caption" msgid "Switch to &Previous Tab" msgstr "Pređi na &prethodni list" #: tfrmmain.actquickfilter.caption msgctxt "tfrmmain.actquickfilter.caption" msgid "Quick filter" msgstr "Brzi propusnik" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Brza pretraga" #: tfrmmain.actquickview.caption msgctxt "tfrmmain.actquickview.caption" msgid "&Quick View Panel" msgstr "&table za brzi pregled" #: tfrmmain.actrefresh.caption msgctxt "tfrmmain.actrefresh.caption" msgid "&Refresh" msgstr "&Osvježi" #: tfrmmain.actreloadfavoritetabs.caption msgctxt "tfrmmain.actreloadfavoritetabs.caption" msgid "Reload the last Favorite Tabs loaded" msgstr "Ponovno učitajte posljednje učitane kartice " #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Premjesti" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Premještanje i preimenovanje datoteke bez pitanja za potvrdu" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Preimenovanje" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Preimenovanje kartice" #: tfrmmain.actresavefavoritetabs.caption msgctxt "tfrmmain.actresavefavoritetabs.caption" msgid "Resave on the last Favorite Tabs loaded" msgstr "Ponovo učitaj posljednje učitane table " #: tfrmmain.actrestoreselection.caption msgctxt "tfrmmain.actrestoreselection.caption" msgid "&Restore Selection" msgstr "&Povrati izbor" #: tfrmmain.actreverseorder.caption msgctxt "tfrmmain.actreverseorder.caption" msgid "Re&verse Order" msgstr "&Obrnuti redosled" #: tfrmmain.actrightbriefview.caption msgctxt "tfrmmain.actrightbriefview.caption" msgid "Brief view on right panel" msgstr "Kratak prikaz na desnoj ploči" #: tfrmmain.actrightcolumnsview.caption msgctxt "tfrmmain.actrightcolumnsview.caption" msgid "Columns view on right panel" msgstr "Prikaz stupaca na desnoj ploči" #: tfrmmain.actrightequalleft.caption msgctxt "tfrmmain.actrightequalleft.caption" msgid "Right &= Left" msgstr "Desno &= lijevo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Ravni prikaz na desnoj ploči" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvori spisak desnog uređaja" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "preokrenuti prikaz na desnoj ploči" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Sortiraj desnu ploču prema &Atributima" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Sortiraj desnu ploču prema &Datumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Sortiraj desnu ploču prema tipu &Datoteka" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Sortiraj desnu ploču prema &Nazivu datoteka " #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Sortiraj desnu ploču prema &veličini datoteka" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Prikaz ikona na desnoj ploči" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Pokreni u &terminalu" #: tfrmmain.actsavefavoritetabs.caption msgctxt "tfrmmain.actsavefavoritetabs.caption" msgid "Save current tabs to a New Favorite Tabs" msgstr "Spremi otvorenu karticu u novu omiljenu" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Kopiraj izbor" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Kopiraj &izbor u datoteku..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Kopiraj kartice u datoteku" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Traži..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Sve kartice Zaključane s mapama otvaraju se u novim karticama" #: tfrmmain.actsetalltabsoptionnormal.caption msgctxt "tfrmmain.actsetalltabsoptionnormal.caption" msgid "Set all tabs to Normal" msgstr "Postavljanje svih kartica na uobičajene vrijednosti" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgctxt "tfrmmain.actsetalltabsoptionpathlocked.caption" msgid "Set all tabs to Locked" msgstr "Onemogučavanje promjena na svim karticama" #: tfrmmain.actsetalltabsoptionpathresets.caption msgctxt "tfrmmain.actsetalltabsoptionpathresets.caption" msgid "All tabs Locked with Dir Changes Allowed" msgstr "Dopuštanje promjena na svim karticama" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Promjeni &svojstva..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgctxt "tfrmmain.actsettaboptiondirsinnewtab.caption" msgid "Locked with Directories Opened in New &Tabs" msgstr "Zaključano sa mapom otvorenom u novoj &kartici" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Obično" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zaključano" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zaključeno sa dozvolom izmene &mapa" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actshellexecute.hint msgctxt "tfrmmain.actshellexecute.hint" msgid "Open using system associations" msgstr "Otvori koristeći pridruživanje datoteka" #: tfrmmain.actshowbuttonmenu.caption msgctxt "tfrmmain.actshowbuttonmenu.caption" msgid "Show button menu" msgstr "Prikaži izbornik gumba" #: tfrmmain.actshowcmdlinehistory.caption msgctxt "tfrmmain.actshowcmdlinehistory.caption" msgid "Show command line history" msgstr "prikaži povijest naredbi" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Izbornik" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "prikaži &skrivene i sistemske datoteke" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgctxt "tfrmmain.actsortbyattr.caption" msgid "Sort by &Attributes" msgstr "Posloži po &svojstvima" #: tfrmmain.actsortbydate.caption msgctxt "tfrmmain.actsortbydate.caption" msgid "Sort by &Date" msgstr "Posloži po &datumu" #: tfrmmain.actsortbyext.caption msgctxt "tfrmmain.actsortbyext.caption" msgid "Sort by &Extension" msgstr "Posloži po &nastavku" #: tfrmmain.actsortbyname.caption msgctxt "tfrmmain.actsortbyname.caption" msgid "Sort by &Name" msgstr "Posloži po &imenu" #: tfrmmain.actsortbysize.caption msgctxt "tfrmmain.actsortbysize.caption" msgid "Sort by &Size" msgstr "Posloži po &veličini" #: tfrmmain.actsrcopendrives.caption msgctxt "tfrmmain.actsrcopendrives.caption" msgid "Open drive list" msgstr "Otvori listu uređaja" #: tfrmmain.actswitchignorelist.caption msgctxt "tfrmmain.actswitchignorelist.caption" msgid "Enable/disable ignore list file to not show file names" msgstr "Omogući/onemogući prikaz zanemarenih datoteka sa spiska" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Napravi simboličku &vezu..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgctxt "tfrmmain.actsyncdirs.caption" msgid "Syn&chronize dirs..." msgstr "Usklađivanje mapa..." #: tfrmmain.acttargetequalsource.caption msgctxt "tfrmmain.acttargetequalsource.caption" msgid "Target &= Source" msgstr "Cilj = izvor" #: tfrmmain.acttestarchive.caption msgctxt "tfrmmain.acttestarchive.caption" msgid "&Test Archive(s)" msgstr "&Provjeri arhivu" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Ikone" #: tfrmmain.actthumbnailsview.hint msgctxt "tfrmmain.actthumbnailsview.hint" msgid "Thumbnails View" msgstr "Pregled ikona" #: tfrmmain.acttogglefullscreenconsole.caption msgctxt "tfrmmain.actthumbnailsview.hint" msgid "Toggle fullscreen mode console" msgstr "Prebacivanje na konzolu s prikazom preko cijelog zaslona" #: tfrmmain.acttransferleft.caption msgctxt "tfrmmain.acttransferleft.caption" msgid "Transfer dir under cursor to left window" msgstr "Premjesti mape pod pokazivačem na levi prozor" #: tfrmmain.acttransferright.caption msgctxt "tfrmmain.acttransferright.caption" msgid "Transfer dir under cursor to right window" msgstr "Premjesti mape pod pokazivačem na desni prozor" #: tfrmmain.acttreeview.caption msgctxt "tfrmmain.acttreeview.caption" msgid "&Tree View Panel" msgstr "Ploča za pregled grananja mapa" #: tfrmmain.actuniversalsingledirectsort.caption msgctxt "tfrmmain.actuniversalsingledirectsort.caption" msgid "Sort according to parameters" msgstr "Sortiraj prema parametrima" #: tfrmmain.actunmarkcurrentextension.caption msgctxt "tfrmmain.actunmarkcurrentextension.caption" msgid "Unselect All with the Same Ex&tension" msgstr "Odznači sve sa istim nastavkom&" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Pregled" #: tfrmmain.actviewhistory.caption msgctxt "tfrmmain.actviewhistory.caption" msgid "Show history of visited paths for active view" msgstr "Prikaži povijest posećenih putanja pod ovakvim pregledom" #: tfrmmain.actviewhistorynext.caption msgctxt "tfrmmain.actviewhistorynext.caption" msgid "Go to next entry in history" msgstr "Idi na sljedeću stavku povijesti" #: tfrmmain.actviewhistoryprev.caption msgctxt "tfrmmain.actviewhistoryprev.caption" msgid "Go to previous entry in history" msgstr "Idi na prethodnu stavku povijesti" #: tfrmmain.actviewlogfile.caption msgctxt "tfrmmain.actviewlogfile.caption" msgid "View log file" msgstr "Pregled dnevničke datoteke" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgctxt "tfrmmain.actvisithomepage.caption" msgid "&Visit Double Commander Website" msgstr "&Posetite Veb stranicu Double Commander-a" #: tfrmmain.actwipe.caption msgctxt "frmmain.actwipe.caption" msgid "Wipe" msgstr "Briši potpuno" #: tfrmmain.actworkwithdirectoryhotlist.caption msgctxt "tfrmmain.actworkwithdirectoryhotlist.caption" msgid "Work with Directory Hotlist and parameters" msgstr "Rad s kazalima Hotlist-a i parametrima" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Izlaz" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "mapa" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Brzi spisak mapa" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgctxt "tfrmmain.btnleftequalright.hint" msgid "Show current directory of the right panel in the left panel" msgstr "Prikaži trenutna mapa sa desne tablei na levu table" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Idi u korisničku mapu" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Idi u sistemsku mapu" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Idi u roditeljsku mapu" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Brzi spisak mapa" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgctxt "tfrmmain.btnrightequalleft.hint" msgid "Show current directory of the left panel in the right panel" msgstr "Prikaži trenutna mapa sa leve tablei na desnu table" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Putanja" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Umnožavanje..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Stvaranje veze..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Očisti" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.miloghide.caption msgctxt "tfrmmain.miloghide.caption" msgid "Hide" msgstr "Sakrij" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Premjesti..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Stvaranje simboličke veze..." #: tfrmmain.mitaboptions.caption msgctxt "tfrmmain.mitaboptions.caption" msgid "Tab options" msgstr "Mogućnosti kartice" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Izlaz&" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Povrati" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Početak" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Naredbe" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Postavke" #: tfrmmain.mnufavoritetabs.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "Favorites" msgstr "Omiljeno" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Datoteke&" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomoć&" #: tfrmmain.mnumark.caption msgctxt "tfrmmain.mnumark.caption" msgid "&Mark" msgstr "Oznaka&" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Mreža" #: tfrmmain.mnushow.caption msgctxt "tfrmmain.mnushow.caption" msgid "&Show" msgstr "Prikaži&" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Podešavanje kartice" #: tfrmmain.mnutabs.caption msgctxt "tfrmmain.mnutabs.caption" msgid "&Tabs" msgstr "Kartice&" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Priljepi" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&U redu" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Odabir korisničke naredbe" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Nasljeđivanje je sortirano" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Nasljeđivanje je sortirano" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.cbselectallcategorydefault.caption" msgid "Select all categories by default" msgstr "Odabiranje svih kategorije prema zadanim postavkama" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Izbor" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorije" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Naziv naredbe" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Savjet:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Prečac" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_ime" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategorija" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoć" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Savjet" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Prečac" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Pomoć" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmaskinputdlg.btndefinetemplate.caption msgctxt "tfrmmaskinputdlg.btndefinetemplate.caption" msgid "&Define..." msgstr "Opiši&..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ili& odaberi predodređenu vrstu izbora:" #: tfrmmkdir.caption msgctxt "tfrmmkdir.caption" msgid "Create new directory" msgstr "Napravi novu mapu" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgctxt "tfrmmkdir.lblmakedir.caption" msgid "&Input new directory name:" msgstr "Unesite& ime nove mape:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nova veličina" #: tfrmmodview.lblheight.caption msgctxt "tfrmmodview.lblheight.caption" msgid "Height :" msgstr "Visina :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgctxt "tfrmmodview.lblquality.caption" msgid "Quality of compress to Jpg" msgstr "Kakvoća sažimanjima JPG" #: tfrmmodview.lblwidth.caption msgctxt "tfrmmodview.lblwidth.caption" msgid "Width :" msgstr "Širina :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Visina" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Očisti" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Očisti" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "Zatvori&" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Postavke" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Izbriši" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Nastavak" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Uredi" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Ime datoteke" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Priključci" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Priključci" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Pre&imenuj" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Preimenovanje" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Poništi sve" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Kopirajkao..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Razvrstavanje" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Vrijeme" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Vrijeme" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Omogući&" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Regularni &izrazi" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Koristi zamenu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Brojač" #: tfrmmultirename.gbfindreplace.caption msgctxt "tfrmmultirename.gbfindreplace.caption" msgid "Find && Replace" msgstr "Nađi i zamjeni" #: tfrmmultirename.gbmaska.caption msgctxt "tfrmmultirename.gbmaska.caption" msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgctxt "tfrmmultirename.gbpresets.caption" msgid "Presets" msgstr "Obrasci" #: tfrmmultirename.lbext.caption msgctxt "tfrmmultirename.lbext.caption" msgid "&Extension" msgstr "Nastavci&" #: tfrmmultirename.lbfind.caption msgctxt "frmmultirename.lbfind.caption" msgid "&Find..." msgstr "Pronađi&..." #: tfrmmultirename.lbinterval.caption msgctxt "tfrmmultirename.lbinterval.caption" msgid "&Interval" msgstr "&Međuvreme" #: tfrmmultirename.lbname.caption msgctxt "tfrmmultirename.lbname.caption" msgid "File &Name" msgstr "Ime datoteke" #: tfrmmultirename.lbreplace.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "Re&place..." msgstr "Zamjeni&..." #: tfrmmultirename.lbstnb.caption msgctxt "tfrmmultirename.lbstnb.caption" msgid "S&tart Number" msgstr "Početni broj" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Širina&" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Radnje" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Uredi" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Staro ime datoteke" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo ime datoteke" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Putanja datoteke" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgctxt "tfrmopenwith.caption" msgid "Choose an application" msgstr "Izaberite program" #: tfrmopenwith.chkcustomcommand.caption msgctxt "tfrmopenwith.chkcustomcommand.caption" msgid "Custom command" msgstr "Prilagođena naredba" #: tfrmopenwith.chksaveassociation.caption msgctxt "tfrmopenwith.chksaveassociation.caption" msgid "Save association" msgstr "Kopiraj pridruživanje" #: tfrmopenwith.chkuseasdefault.caption msgctxt "tfrmopenwith.chkuseasdefault.caption" msgid "Set selected application as default action" msgstr "Postavi izabrani program kao podrazumijevani program" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgctxt "tfrmopenwith.lblmimetype.caption" msgid "File type to be opened: %s" msgstr "Vrsta datoteke koja će biti otvorena: %s" #: tfrmopenwith.milistoffiles.caption msgctxt "tfrmopenwith.milistoffiles.caption" msgid "Multiple file names" msgstr "Višestruka imena datoteka" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgctxt "tfrmopenwith.milistofurls.caption" msgid "Multiple URIs" msgstr "Višestruke adrese" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgctxt "tfrmopenwith.misinglefilename.caption" msgid "Single file name" msgstr "Jedno ime datoteke" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgctxt "tfrmopenwith.misingleurl.caption" msgid "Single URI" msgstr "Jedna adresa" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Primeni&" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmoptions.btnhelp.caption #, fuzzy #| msgid "Help" msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Pomoć" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Izaberite jednu podstranicu, ova stranica ne sadrži ni jednu postavku." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "D&odaj" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "P&rimjeni" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopiraj" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "I&zbriši" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Ostalo..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Preimenovanje" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Mogućnosti:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Način rada raščlanjivanja oblika:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "O&mogućen" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Način otklanjanja &grešaka" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "P&rikaži izlaz iz konzole" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Dod&ajem:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arh&ivar:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Izbriši:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Opis&:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "T&ip datoteke:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Izdvoji&:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Izdvoji bez putanje:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Položaj LB:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "LB:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Područje traženja ID-a:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Popis&:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Programi za sažimanje:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Kraj i popisa (mogućnost):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Oblik &Popisa:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Početak popis&a (mogućnost):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Niz upita za zaporku:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Napravi samoizdvajajuću arhivu:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Proba:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "S&amo. uređivanje" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Dodatno" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Opće" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Prilikom izmena &veličine, datuma ili svojstava" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sljedeće putanje& i njena podmapa:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Prilikom stvaranja datoteka, brisanja ili preimenovanja" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Kada je program u pozadini&" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Onemogući samostalno osvježavanje" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Osvježi spisak datoteka" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Uvijek prikaži ikonu u obavještajnoj oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Samostalno skrivaj& otkačene uređaje" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Prilikom umanjenja premjesti ikonu u obavještajnu oblast" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Dozvoli samo jedan primjerak DC u isto vrijeme" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgctxt "tfrmoptionsbehavior.edtdrivesblacklist.hint" msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ovde možete uneti jedan ili veše uređaja ili točaka kačenja odvajajući ih znacima \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Crni popis uređaja" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Veličina stupaca" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Prikaži tip datoteka" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "por&avnati (s karticom)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Neposredno nakon imena datoteke" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automatsko" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Određeni broj stupaca" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Određena širina stupca" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Koristi &indikator gradijenta" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binarno" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Pozadina 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Pozadinska boja &ukazivača:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Čeona boja &ukazivača:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Izmjenjeno:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Izmjenjeno:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Uspjeh:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "tfrmoptionscolumnsview.cbcuttexttocolwidth.caption" msgid "Cut &text to column width" msgstr "Otsjeci tekst na širinu stupca" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "tfrmoptionscolumnsview.cbgridhorzline.caption" msgid "&Horizontal lines" msgstr "Vodoravne& linije" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "tfrmoptionscolumnsview.cbgridvertline.caption" msgid "&Vertical lines" msgstr "Uspravne& linije" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "tfrmoptionscolumnsview.chkautofillcolumns.caption" msgid "A&uto fill columns" msgstr "Samostalno& popuni stupce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgctxt "tfrmoptionscolumnsview.gbshowgrid.caption" msgid "Show grid" msgstr "Prikaži mrežu" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgctxt "tfrmoptionscolumnsview.grpautosizecolumns.caption" msgid "Auto-size columns" msgstr "Automatsko određivanje veličine stupaca" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "tfrmoptionscolumnsview.lblautosizecolumn.caption" msgid "Auto si&ze column:" msgstr "Automatsko prilogođavanje veličine stupca:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Primjeni&" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Uredi&" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Povijest naredbi&" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Povijest mapa&" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&File mask history" msgstr "Povijest maski datoteka&" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Kartice datoteka" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "tfrmoptionsconfiguration.chksaveconfiguration.caption" msgid "Sa&ve configuration" msgstr "Sačuvaj& postavke" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "tfrmoptionsconfiguration.chksearchreplacehistory.caption" msgid "Searc&h/Replace history" msgstr "Povijest pretrage& i zamene" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Mape" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Putanja datoteka postavki" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Kopiraj po izlazu" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgctxt "tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption" msgid "Sort order of configuration order in left tree" msgstr "Uredi redoslijed konfiguracije na lijevom stablu " #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Uključi naredbenu liniju" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "tfrmoptionsconfiguration.rbprogramdir.caption" msgid "P&rogram directory (portable version)" msgstr "Mapa programa& (Povijest )" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "tfrmoptionsconfiguration.rbuserhomedir.caption" msgid "&User home directory" msgstr "Mapa korisnika&" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Primijenite izmjene na sve stupce" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Primijena izmjena na sve stupce" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Primijena izmjena na sve stupce" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Primijena izmjena na sve stupce" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Primijena izmjena na sve stupce" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Postavi na zadane vrijednosti" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Preimenovanje" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Ponovno na zadane postavke" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Kopiraj kao" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojanje" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Ako klikanjem nešto promijenite, to će se odrazit na sve stupce" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Opće" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Korištenje pokazivača sa okvirom" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Boja odabranog teksta u neaktivnom prozoru" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Korištenje obrnutog odabira" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Korištenje prilagođenog fonta i boje za ovaj prikaz" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Pozadina:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadina 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Podesi pogled stupaca datoteka:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Naziv trenutnog stupca]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Boja pokazivača:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Pokazivač teksta:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Slovni lik:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veličina:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Boja teksta:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Boja neaktivnog pokazivača" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Boja neaktivne oznake" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Boja označavanja:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ispod je prozor pregleda. Pomicanjem pokazivača i odabirom datoteke,prikazuju se različite postavke prilagodbe." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Postavke stupaca" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj stupac" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Položaj okvirne ploče nakon usporedbe" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Dodaj umnožak označene stavke" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Dodaj razdvajač" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Dodaj Mapu za upis" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Ubaci Mapu za upis" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption #, fuzzy #| msgid "Add..." msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Dodavanje..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption #, fuzzy #| msgid "Backup..." msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Sigurnosne kopije..." #: tfrmoptionsdirectoryhotlist.btndelete.caption #, fuzzy #| msgid "Delete..." msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Brisanje..." #: tfrmoptionsdirectoryhotlist.btnexport.caption #, fuzzy #| msgid "Export..." msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Izvoz..." #: tfrmoptionsdirectoryhotlist.btnimport.caption #, fuzzy #| msgid "Import..." msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Uvoz..." #: tfrmoptionsdirectoryhotlist.btninsert.caption #, fuzzy #| msgid "Insert..." msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Umetanje..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption #, fuzzy #| msgid "Miscellaneous..." msgid "&Miscellaneous..." msgstr "Razno..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Neke radnje za odabir odgovarajućeg cilja" #: tfrmoptionsdirectoryhotlist.btnsort.caption #, fuzzy #| msgid "Sort..." msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption #, fuzzy #| msgid "When adding directory, add also target" msgid "&When adding directory, add also target" msgstr "Prilikom dodavanja mapa, dodaj i cilj" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption #, fuzzy #| msgid "Always expand tree" msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Uvjek raširi stablo mapa" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy #| msgid "Show only valid environment variables" msgid "Show only &valid environment variables" msgstr "Prikaži samo važeće varijable okruženja" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption #, fuzzy #| msgid "In popup, show [path also]" msgid "In pop&up, show [path also]" msgstr "Pri iskačućim prozorima prikaži [i putanju]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Brzi spisak mapa (preurediti prevlačenjem i spuštanjem)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Putanja:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption #, fuzzy #| msgid "Target:" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "Cilj:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption #, fuzzy #| msgid "...current level of item(s) selected only" msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...trenutni stupanj stavki koje su samo označene" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption #, fuzzy #| msgid "Scan all hotdir's path to validate the ones that actually exist" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih mapa radi utvrđivanja koje stvarno postoje" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption #, fuzzy #| msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih mapa i ciljeva radi utvrđivanja koji stvarno postoje" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption #, fuzzy #| msgid "to a Directory Hotlist file (.hotlist)" msgid "to a Directory &Hotlist file (.hotlist)" msgstr "u datoteku spiska brzih mapa (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption #, fuzzy #| msgid "to a \"wincmd.ini\" of TC (keep existing)" msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "u \"wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption #, fuzzy #| msgid "to a \"wincmd.ini\" of TC (erase existing)" msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption #, fuzzy #| msgid "Go to configure TC related info" msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Otvori informacije o TC postavkama" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption #, fuzzy #| msgid "Go to configure TC related info" msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Otvori informacije o TC postavkama" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Izbornik probe spiska brzih mapa" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption #, fuzzy #| msgid "from a Directory Hotlist file (.hotlist)" msgid "from a Directory &Hotlist file (.hotlist)" msgstr "iz datoteke brzog spiska mapa (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption #, fuzzy #| msgid "from \"wincmd.ini\" of TC" msgid "from \"&wincmd.ini\" of TC" msgstr "iz \"wincmd.ini\" TC-a" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption #, fuzzy #| msgid "Restore a backup of Directory Hotlist" msgid "&Restore a backup of Directory Hotlist" msgstr "Povrati spisak brzih mapa iz arhive" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption #, fuzzy #| msgid "Save a backup of current Directory Hotlist" msgid "&Save a backup of current Directory Hotlist" msgstr "Kopiraj u arhivi trenutni spisak brzih mapa" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption #, fuzzy #| msgid "Search and replace..." msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "pretraži i zamjeni" #: tfrmoptionsdirectoryhotlist.misorteverything.caption #, fuzzy #| msgid "...everything, from A to Z!" msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...sve, od A do Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption #, fuzzy #| msgid "...single group of item(s) only" msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...pojedinačni skup stavki, isključivo" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption #, fuzzy #| msgid "...content of submenu(s) selected, no sublevel" msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption #, fuzzy #| msgid "...content of submenu(s) selected and all sublevels" msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption #, fuzzy #| msgid "Test resulting menu" msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Provjeri izlazni izbornik" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption #, fuzzy #| msgid "Addition from main panel:" msgid "Addition from main panel" msgstr "Dodatak iz glavne ploče:" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Uvijek pita u kojem pdržanom formatu će se zapis upotrijebljavati" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Kada spremate Unicode tekst, spremite ga u UTF8 formatu (inače će se koristiti UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Dok povlači tekst, automatski se generira naziv datoteke (inače će se pojaviti polje za unos)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Prikaži& prozorčić potvrde poslije otpuštanja" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Pri povlačenju teksta u prozore:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Postavite najprikladniji zapis na vrhu popisa (sortiranje povlačenjem)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(Ako najprikladniji nije dostupan, zapis će se koristiti negdje drugdje)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(možda neće raditi s nekim izvornim programima, pokušajte ukloniti poteškoće)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Prikaži sustav datoteka" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Prikaži slobodan& prostor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Prikaži natpis&" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Spisak uređaja" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Kraj linije znakova" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Prikaz posebnih znakova" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opcije za interni uređivač" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Vrati na podrazumijevano" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Svojstva stavke" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Oznaka tekstom&" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Koristi (i uredi) opće& postavke sheme" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Koristi mesne& postavke sheme" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Podebljan" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Uključi" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Iskošeno" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Uključi" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Pre&crtaj" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "U&ključi" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podv&učeno" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "U&ključi" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Dodavanje..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Brisanje..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Unos/Izvoz" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Umetanje..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Preimenovanje" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Nijedan" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Uvjek prošireno stablo mapa" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Lijevo" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Desno" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lista omiljenih kartica (promjena poretka vrši se mišem - povlačenjem i otpuštanjem)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Što vratiti i gdje za odabrani unos:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Zadržavanje postojećih kartica na:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Spremi povijest mapa" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Vraćanje kartica spremljenih s lijeve strane na:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Vraćanje kartica spremljenih s desne strane na:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "razdvajač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Dodavanje razdvajača" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podizbornik" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Dodaj podizbornik" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...trenutna razina stavki koje su samo označene" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Isjeci" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "obriši sve!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podizbornik i svi njegovi elementi" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "samo podizbornik, ali zadrži elemente" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "označena stavka" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Izvezi odabrane naslijeđene .tab datoteke" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Izbornik za testiranje omiljenih kartica" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Uvoz naslijeđene .tab datoteke prema zadanim postavkama" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvezite naslijeđene .tab datoteke na odabranom mjestu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvezite naslijeđene .tab datoteke na odabranom mjestu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Uvezite naslijeđene .tab datoteke na odabranom mjestu u podizborniku" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Umetanje razdjelnika" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Umetanje podizbornika" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Priljepi" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Preimenovanje" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...sve, od A do Š!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Razvrstaj pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Provjeri izlazni izbornik" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Dodaj&" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Kloniranje" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Odabir korisničke naredbe" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Dolje" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Uredi" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Umetanje" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Umetanje" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Uklanjanje&" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Uklanjanje&" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Pre&imenuj" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Gore" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Početni put naredbe. Nikad ne citiraj ovaj niz." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Naziv akcije. Nikada se ne prenosi u sustav, to je samo mnemoničko ime koje ste odabrali" #: tfrmoptionsfileassoc.edtparams.hint #, fuzzy #| msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parametar za prelazak na naredbu. Treba citirati dugo ime datoteke s razmakom." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Naredba za izvršenje. Treba citirati dugačak naziv datoteke s razmakom." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Opis djelovanja" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Radnje" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Nastavci" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Sortiranje povlačenjem i ispuštanjem" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Vrste datoteka" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Sortiranje radnji povlačenjem i ispuštanjem" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Sortiranje nastavka povlačenjem i ispuštanjem" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Sortiranje tipa dadoteka povlačenjem i ispuštanjem" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Radnja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Naredba:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Prilagođeno s ..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Prilagođeno" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvori u uređivaču" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Uredi sa" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Dobavi izlaz iz naredbe" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Otvori u internom uređivaču" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Otvori u internom pregledniku" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otvori" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Otvori sa" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Pokreni u terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Pregled" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvori u pregledniku" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Prikaz s..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Kliknite na ikonu za promjenu!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Izvrši putem ljuske" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Dodatni kontekstni izbornik" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfiguracija povezivanja datoteka" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Ponuda za dodavanje odabira za povezivanje datoteka kada nije već uključena" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Kod pridruživanja datoteke, ponudi dodavanje trenutačne odabrane datoteke ako već nije uključena u konfiguriranu vrstu datoteke" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Izvrši putem terminala i zatvori" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Izvrši putem terminala i ostavi ga otvorenim" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikonice" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Dodatne stavke opcija" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Prikaži prozor potvrde za:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kop&iraj postupak" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Izbriši postupak" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Prem&esti u smeće (gumb shift poništava ovu radnju)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "R&adnja slanja u smeće" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "P&oništi oznaku samo za čitanje" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Radnja premještanja" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Obradi napomene sa datotekama i kazalima" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Označi ime &datoteke bez nastavka prilikom preimenovanja" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "prikaži karticu ploče odabira u prozoru za umnožavanje premještanje" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Z&anemari greške radnji nad datotekama i upiši ih u datoteku događanja" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Izvršavanje radnji" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Korisničko sučelje" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Veličina ostave za radnje nad datotekama (u KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Prikaži početni napredak radnji u" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Naziv automatskog preimenovanja stila za kopiranje:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Broj prolaza potpunog brisanja:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Postavljanje DC-a na zadanu vrijednost" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Koristi &trepereći pokazivač" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Izbor neaktivne postavke boje" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "K&oristi obrnuti odabir" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "P&ozadina:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "P&ozadina 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "B&oja pokazivača:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Pokazivač te&ksta:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Neaktivna boja pokazivača" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Neaktivna boja oznake" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Osvjetljenje neradne kartice" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Boja označavanja&:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Boja teksta:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Ispod je pregled. Možete pomicati pokazivač, odabrati datoteku i dobiti stvarni izgled i dojam različitih postavki" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Boja teksta&" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.cbpartialnamesearch.caption" msgid "&Search for part of file name" msgstr "&Pretraga po djelu imena datoteke" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.dbtextsearch.caption" msgid "Text search in files" msgstr "Pretraživanje teksta u datotekama" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Pretraga datoteka" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption" msgid "Default search template:" msgstr "Zadani predložak pretraživanja" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Koristi kartu memorije za pretrage po te&kstu u datotekama" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.rbusestreaminsearch.caption" msgid "&Use stream for search text in files" msgstr "Koristi tok za pretrage po tekstu" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Na&zadane vrijednosti" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Oblikujem" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Slaganje" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Osetljivo na &veličinu slova" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Neispravan oblik" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Oblik datuma i vremena:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Oblik veličine& datoteka:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "&Insert new files" msgid "&Insert new files:" msgstr "Umetni& nove datoteke" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Raspored mapa:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Način raspoređivanja:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "&Move updated files" msgid "&Move updated files:" msgstr "&Premjesti osvježene datoteke" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Pomoć&" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Nemoj učitavati spisak datoteka dok se kartica ne pokrene" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "prikaži& uglaste zagrade oko mapa" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Istakni& nove i osvježene datoteke" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogući &preimenovanje na mjestu pri dvokliku na ime" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Učitaj spisak &datoteka u posebnom procesu" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Učitavaj ikone nakon& spiska datoteka" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Prikaži sistemske i skrivene datoteke" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Prilikom odabira datoteka pomoću <SPACEBAR>, prijeđi na sljedeću datoteku ( kao i sa <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Primjeni&" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Obriši" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Boje vrsta datoteka (rasporedite ih povlačenjem i &spuštanjem)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Svojstva& vrste:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Boja vrste&:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Maska vrste&:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Ime &vrste:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Oblik slova" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Dodaj prečicu&" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopiraj" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Izbriši" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Izbriši& prečicu" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Uredi& prečicu" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Preimenovanje" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Propusnik&" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Vrste&:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Naredbe&:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Prečica& Datoteke:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Naredba" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Naredba" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Prečice" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Prečac" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Odrednice" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sljedeće &putanje i njihova podmapa:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Prikaži ikonice radnji u izbornicima&" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "prikaži preklapajuće& ikonice, npr. za veze" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Onemogući posebne ikone" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Veličina ikona" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " prikaži ikonice lijevo od imena datoteka" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Sve&" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Sve povezane + &EXE/LNK (sporo)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez& ikona" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Samo &uobičajene ikonice" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Dodaj& označena imena" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Dodaj označena imena sa &potpunim putanjama" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Zanemari& (ne prikaži) sledeće datoteke i kazala:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Kopiraj u:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Ljeva& i desna strelica menja Mapa (Lynx-like movement)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tipkanje" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+L&etters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+s&lova(mjenjane slova)" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+s&lova(mjenjane slova)" #: tfrmoptionskeyboard.lblnomodifier.caption #, fuzzy #| msgid "&Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "&Slova" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ravno &sučelje" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Prikaži kazivač slobodnog prostora na natpisu uređaja" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Prikaži datoteku događanja&" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Prikaži tablu radnje iz pozadine" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Prikaži uobičajeni napredak u traci izbornika" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Prikaži naredbenu liniju&" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Prikaži trenutnu mapu" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Prikaži dugmiće uređaja&" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Prikaži natpis slobodnog prostora&" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "prikaži gumb spiska uređaja" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Prikaži dugmiće radnji" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "prikaži glavni& izbornik" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Prikaži traku dugmadi" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Prikaži natpis malog slobodnog prostora" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "prikaži traku stanja&" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "prikaži& zaglavlje kartice za zaustavljanje" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Prikaži kartice mapa" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Prikaži prozor terminala&" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Prikaži dvije trake dugmadi uređaja (stalne širine, iznad prozora)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Raspored na ekranu" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Uključi datum u zapisničku datoteku" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Sažmi/izvuci" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Izvršenje vanjskog naredbenog retka" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiraj/premjesti/napravi vezu/simboličku vezu" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Napravi/Izbriši mapa" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Datoteka događanja grešaka" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Napravi& zapisničku datoteku:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Unosi u datoteku događanja poruke podataka&" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Pokretanje/Zaustavljanje programa" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Unosi u dnevnik uspešne& radnje" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Priključci &sistema datoteka" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Zapisnička datoteka radnji nad datotekama" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Upiši radnje u datoteku događanja" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stanje radnje" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Ukloni ikone nepostojećih datoteka" #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Prikaz sadržaja dnevničke datoteke" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Uvijek idi u& sistemsku mapu uređaja prilikom menjanja uređaja" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Prikaži poruke upozorenja (samo gumb „U redu“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Usnimi ikone u predmemoriju" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Ikone" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TC izvoz / uvoz" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfiguracijska datoteka" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Izvršna TC datoteka" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Izlazni put alatne trake" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "točke" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "H" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Veličina &umanjenih sličica:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Odabir mišem" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otvori sa" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Klizanje" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Izbor" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Način:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linija po linija" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linija po linija &sa pomeranjem pokazivača" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stranica po stranica" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "D&odaj" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Podesi&" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Omogući" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Lickaj" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Opis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Priključci &pretrage omogućuju zamjenske algoritme pretrage, ili vanjske alate (kao što je „locate“, itd.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Priključci za sažimanje se upotrebljavaju za rad sa arhivama" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radni" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Priključci za sadržaje se upotrebljavaju za proširenje prikaza pojedinosti datoteka kao što su mp3 oznake ili svojstva slika u spiskovima datoteka, ili se koriste u priključcima pretrage i alatima za višestruko preimenovanje" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Priključci sistema datoteka& omogućavaju pristup radnjama sa diskovima koje nisu dostupne iz operativnog sustava ili spoljnjim uređajima ko što su Palm i džepni računar." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Priključci za pregled omogućavaju prikaz oblika datoteka kao što su slike, tabele, baze podataka itd. u pregledniku (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Radno" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Priključak" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Počinje sa (ime mora počinjati prvim otkucanim znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Završava se sa (posljednji znak pre otkucane točke . mora se poklapati)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Potpuno slaganje imena" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Veličina slova pretrage" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Traži ove stavke" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Preimenovanje kartice kod otključavanja iste" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Pokreni ciljnu ploču& pri kliku na jednu od njenih kartica" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Prikaži i zaglavlje kartice kada se prikažie samo jedna kartica" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zatvori duple kartice prilikom zatvaranja aplikacije" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Potvrdi zatvaranje svih kartica" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potvrdite zatvaranje zaključanih kartica" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ograniči dužinu naslova kartice na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Prikaži zaključane kartice &sa znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Kartice na višestrukim linijama" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&gore otvara novu karticu u pozadini" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otvori novu karticu pored trenutnr kartice" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Ponovno upotrijebite postojeću karticu kada je to moguće" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "prikaži gumb za zatvaranje &kartice" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Zaglavlje kartice mapa" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znak" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Akcija koja se treba učiniti kada dvaput kliknete karticu:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Položaj kartica&" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Nijedan" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Lijevo" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Desno" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Otvaranje podešavanja omiljene kartice nakon presnimavanja" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Otvaranje podešavanja omiljene kartice nakon kopiranja na novo" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Omogući dodatne opcije za Omiljene kartice (odaberite ciljnu stranu kada se vratite i sl.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Zadane dodatne postavke prilikom spremanja novih omljenih kartica:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Kartice dodatnih zaglavlja mapa" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Prilikom vraćanja kartice postojeće kartice očuvaj" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Kartice spremljene na lijevoj strani vratit će se na:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Kartice spremljene na desnoj strani vratit će se na:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Sačuvajte povijest pretpregleda pomoću omiljenih kartica :" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Zadana pozicija u izborniku prilikom spremanja nove omiljene kartice:" #: tfrmoptionsterminal.edrunintermcloseparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Naredba} Prisutne naredbe za pokretanje u terminalu" #: tfrmoptionsterminal.edrunintermstayopenparams.hint #, fuzzy msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Naredba} Prisutne naredbe za pokretanje u terminalu" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Naredba za samo pokretanje terminala:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Naredba za pokretanje naredbe na terminalu i zatvaranje nakon tog:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Naredba za pokretanje naredbe na terminalu koji nakon tog ostaje otvoren:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametri" #: tfrmoptionsterminal.lbruntermcmd.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.lbruntermparams.caption #, fuzzy msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Gumb potpuno istih umnožaka" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi &prečicu" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Unesi novi gumb" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Odabiranje" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Drugo..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Ukloni &prečicu" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Predložiti" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Omogućite da DC predloži alatnu tipku na temelju vrste gumba, naredbe i parametara" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Prijava pogrešaka s naredbama" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Unesite odrednice naredbe, svaku u posebnoj liniji. Pritisnite F1 za pregled pomoći za odrednice." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Prikaz" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Veličina &trake:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "&Naredba:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Prečica:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "ikona&:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veličina& ikonice:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Naredba&:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Odrednice&:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Napomena:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodavanje alatne trake s svim DC naredbama" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "za vanjsku naredbu" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "za unutarnju naredbu" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "za razdjelnik" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "za podređenu alatnu traku" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Trenutna alatna traka" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "u datoteku alatne trake (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "u TC.BAR datoteci (zadržite postojeće)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "u TC.BAR datoteci (izbrišite postojeće)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Najpopularnija alatna traka" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Spremanje sigurnosne kopije Alatne trake" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "u datoteku Alatne trake (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "u TC.BAR datoteci (zadržite postojeće)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "u TC.BAR datoteci (obrišite postojeće)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "neposredno prije trenutnog odabira" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Vračanje sigurnosne kopije alatne trake" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption #, fuzzy #| msgid "to add to top toolbar" msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "iz datoteke Alatne trake (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "iz jedne TC .BAR datoteke" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje trenutačne alatne trake" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "iz datoteke \"wincmd.ini\" programa TotalCommander ..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "dodavanje na trenutačnu alatnu traku" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "dodavanje nove alatne trake na trenutačnu alatnu traku" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "dodavanje nove alatne trake na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "dodavanje na omiljenu alatnu traku" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "zamjena popularne alatne trake" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Traži i zamijeni" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "u svim gore navedenim ..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "u svim naredbama ..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "u svim imenima ikona ..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "u svim parametrima ..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "Na svim početnim putanjima" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "odmah nakon trenutng odabira" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "kao prvi element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "kao zadnji element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "samo prethodni trenutni odabir" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta gumba" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikonice" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Zadrži otvoreni prozor terminala poslije izvršenja programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Izvrši u terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Koristi vanjski program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatne odrednice" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Putanja programa za izvršenje" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopiraj" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Izbriši&" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Preimenovanje" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Ostalo..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Prikaži napomenu" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Vrsta napomene&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Vrsta maske&:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Broj stupaca u pregledniku knjiga" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Podesi" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Sažmi datoteke" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Napravi odvojene arhive, posebno za svaku odabranu datoteku i mapu" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Napravi samoizdvajajuće arhive" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Šifriraj" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Premjesti& u arhivu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Višestruke arhive na diskovima" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Prvo smejsti& u TAR arhive" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Takođe sažmi& i imena putanja (samo rekurzivno)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Sažmi datoteku(e) u datoteku:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Sažimalac" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Izdvoji &sve i izvrši" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Izdvoji i izvrši" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Svojstva sažimane datoteke" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Svojstva:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Stupanj sažimanja:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Način:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Izvorna veličina:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datoteka:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Veličina sažimane datoteke:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Sažimalac:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Vreme:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "H" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zatvori tablu propusnika" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Unesite tekst ili uvjet pretrage" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Osetljivo na veličinu slova" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "mapa" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Datoteke" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Početak poklapanja" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Završetak poklapanja" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Uslov" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Zamjena pretrage i uvjeta" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Više pravila" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "M&anje pravila" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Upotrebi &sadržajne dodatke u kombinaciji s" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Priključak" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Vrijednost" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Primeni&" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&U redu" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Izaberite znakove za unos:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Izmjeni svojstva" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Skladište" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Napravljeno:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skriveno" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Pristupano:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Izmjenjeno:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Samo za čitanje" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Uključujući podmapee" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Svojstva vremenske oznake" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupa" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Razvrstavanje" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Otkaži" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "U redu" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Djelilac" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Zahtijevajte datoteku za potvrdu CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Veličina i broj djelova" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Ciljna &mapa" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Broj delova" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabajta" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobajta" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabajta" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Izgrađen" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativni sistem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Prepravka" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Izdanje" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Napravi simboličku vezu" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će ukazivati veza" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zatvori" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Usporedi" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Obrazac..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklađivanje mapa" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "nesimetrično" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "po sadržaju" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "zanemari datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "samo odabrano" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podmape" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Prikaži:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(u glavnom prozoru)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Usporedi" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Pogled lijeve strane" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Pogled desne strane" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplikati" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "pojedinačni" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Molim, pritisnite „Usporedi“ za početak" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potvrdi prepisivanje" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Dodaj novo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "I&zmeni" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Na&zadane vrijednosti" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Ukloni&" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Priključak za lickanje" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Prepoznaj vrstu arhive po sadržaju" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Nisam uspio izbrisati datoteke" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podržava &šifriranje" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "prikaži& kao obične datoteke (sakrij ikonicu sažimanja)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podržava &sažimanje u memoriji" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Nisam uspio izmijeniti postojeće arhive" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Arhiva može sadržavati višestruke datoteke" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Nisam uspio napraviti nove arhive&" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podržava& prozor za prikaz mogućnosti" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Omogućava pretragu& teksta u arhivama" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Opis&:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Prepoznaj& nisku:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Nastavci&:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Oznake:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Ime&:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O pregledniku..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "prikažie poruku o programu" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopiraj datoteku" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiraj datoteku" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopiraj u međuspremnik" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Napusti" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Pronađi" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Nađi sljedeće" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Preko cijelog ekrana" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Idi na liniju" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Sljedeća" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Učitaj sljedeću datoteku" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Prethodna" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Učitaj prethodnu datoteku" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Premjesti datoteku" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Premjesti datoteku" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Pregled" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Učitaj ponovo" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ponovo učitaj trenutnu datoteku" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Okreni za 180" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Okreni za 180" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Okreni za 270" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Okreni za 270" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Okreni za 90" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Okreni za 90" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Kopiraj kao..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Kopiraj datoteku kao..." #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Slika ekrana" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Označi sve" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Prikaži binarno&" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Prikaži kao knjigu&" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Prikaži heksadecimalno&" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Prikaži kao &tekst" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Prikaži kao &uvučen tekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Grafika" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Priključak" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Razvuci" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Razvuci sliku" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Poništi" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Vrati" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Udalji" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Obreži" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Preko cijelog ekrana" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Oboji" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Crvene oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Promeni veličinu" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Pokretne slike" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Preglednik" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Šifriranje" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Slika" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Olovka" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "okreni" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Slika ekrana" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Pregled" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Priključci" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Početak&" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Radnje nad datotekama" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Zakazano" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "S&ledi veze" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Kada &Mapa postoji" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Kada datoteka postoji" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&U redu" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametri:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Podesi&" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Šifriraj" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopiraj v&rijeme i datum" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Radi u pozadini (posebna veza)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Visina" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Širina" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Datoteka se nije pronašla, te nije mogoče overiti končnu kombinaciju datoteka:\n" "%s\n" "\n" "Omogućite pristup datoteci te pritisnite „U redu“ kad budete spremni,\n" "ili pritisnite „OTKAŽI“ za nastavak bez toga?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Otkaži brzi uvijet" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Otkaži trenutnu radnju" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Unesite naziv i tip datoteke, za ispušteni tekst " #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Vrsta zapisa za uvoz" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Oštećeno:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Opće:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Nedostaje:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Greška čitanja:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Uspjeh:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Unesi zbir za provjeru i izaberi algoritam:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Provjeri zbir" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Ukupno:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Međuspremnik isečaka ne sadrži ispravne podatke trake alata." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Sve;Aktivni prozor;Lijevi prozor;Desni prozor;Operacije datoteka;Postavke;Mreža;Razno;Paralelni port;Ispis;Označavanje;Sigurnost;Međuspremnik;FTP;Navigacija;Pomoć;Prozor;Naredbeni redak;Alati;Prikaz;Korisnik;Kartice;Sortiranje; Dnevnik" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Nasljeđeno sortiranje;Abecedno sortiranje" #: ulng.rscolattr msgid "Attr" msgstr "Svojstvo" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Nastavak" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ime" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Veličina" #: ulng.rsconfcolalign msgid "Align" msgstr "Podvuci" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Naslov" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Izbriši" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Sadržaj polja" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Premjesti" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Širina" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prilagodi kolonu" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Uređivanje povezivanja datoteka" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potvrdite naredbu i parametre" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopiraj (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Unos DC alatne trake" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Unos TC alatne trake" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Tekst je ispušten" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_HTML tekst je ispušten" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Odbacio je promjenjen tekst" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Odbacio je nepromjenjen text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Odbacio je UnicodeUTF16 tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_odbacio je UnicodeUTF8 tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr "Dodaje" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Briše" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Obje datoteke su identične" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Usklađivanje" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modificira" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Šifriranje" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Prekini" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Sve" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Nastavi" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Samostalno preimenuj izvorne datoteke" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Otkaži" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Nastavi" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Kopiraj &u" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Kopiraj u &sve" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Napusti& program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Zanemari& sve" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ništa" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&U redu" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "drugo&" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepiši" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepiši &sve" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepiši sve &veće" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepiši sve &starije" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepiši sve &Manje" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "P&reimenuj" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Nastavi" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Po&novo pokušaj" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Preskoči" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Preskoči& sve" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Da" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiraj datoteku(e)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "premjesti datoteku(e)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Stanaka&" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Početak&" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Zakazano" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Brzina %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Brzina %s/s, preostalo vrijeme %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazivač slobodnog mesta na uređajima" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez oznake>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nema uređaja>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Unutrašnji uređivač Double Commander-a." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Idi na liniju:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Idi na liniju" #: ulng.rseditnewfile msgid "new.txt" msgstr "novi.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ime datoteke:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otvori datoteku" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Unazad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Traži" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Unaprijed" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zameni" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "s vanjskim urednikom" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "s unutrašnjim urednikom" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Izvrši putem ljuske" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Izvrši putem terminala i zatvori" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Izvrši putem terminala i ostavi ga otvorenim" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Lijevo:Desno;Aktivno;Neaktivno;Oba;Nijedno" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Ne;Da" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Izvoz iz DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Copy into;Skip" msgid "Ask;Merge;Skip" msgstr "Pitaj;Prepiši;Kopiraj;Preskoči" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Pitaj;Prepiši;Prepiši starije;Preskoči" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Pitaj;Ne postavljaj više;Zanemari greške" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Uvijet" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Odredi obrazac" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s stupanj(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "sve (neograničena dubina)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "samo trenutnu mapu" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Mapa %s ne postoji. " #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Pronašao sam: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Kopiraj obrazac pretrage" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ime obrasca:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pregledano je: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Pregledam" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Vrijeme skeniranja:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Počni sa" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Uređivač fontova" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Datoteka događanja fontova&" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Glavni font&" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Preglednik& fontova" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Preglednik& knjige fontova" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "Slobodno je %s od %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s je slobodno" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum i vrijeme pristupa" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Svojstva" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Napomena" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Veličina skladišta" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum i vrijeme nastanka" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Nastavak" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupa" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Promjena datuma/vremena" #: ulng.rsfunclinkto msgid "Link to" msgstr "Veza do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum i vrijeme izmene" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ime" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ime bez nastavka" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlasnik" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Putanja" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Veličina" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Vrsta" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Desila se greška pri stvaranju čvrste veze" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "Nijedno;Ime, a-z;Ime, z-a;tip, a-z; tip, z-a;veličina 9-0;veličina 0-9;datum 9-0;datum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Upozorenje: Pri vraćanju datoteke .hotlist iz ostave, trenutni spisak će biti izbrisan i zamjenjen uvezenim.\n" "\n" "Da li sigurno želite nastaviti?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Prozor umnožavanja i premještanja" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Program za razlike" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Uredite napomenu" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Uređivač" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Glavni" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Odznači masku" #: ulng.rsmarkplus msgid "Select mask" msgstr "Označi masku" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Unesi masku:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Prikaz stupca s tim imenom već postoji" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Da biste promijenili trenutni prikaz stupaca za uređivanje, trenutačno uređivanje spremite, kopirajte, ili obrišite" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Podesite prilagođene stupce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Unesite novi naziv prilagođenih stupaca" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Radnje" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odspajanje mrežnog pogona .." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Uredi" #: ulng.rsmnueject msgid "Eject" msgstr "Izbaci" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Raspakirajte ovdje" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Karta mrežnog pogona" #: ulng.rsmnumount msgid "Mount" msgstr "Prikači" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nova" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nema dostupnih uređaja" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvori" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otvori sa" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Drugo..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Zapakiranje datoteke u mapu" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Povrati" #: ulng.rsmnusortby msgid "Sort by" msgstr "Razvrstaj po" #: ulng.rsmnuumount msgid "Unmount" msgstr "Otkači" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Prikaži" #: ulng.rsmsgaccount msgid "Account:" msgstr "Nalog:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatne odrednice za naredbenu liniju programa sažimanja:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Izlazna datoteka CRC32 je neispravna:\n" "„%s“\n" "\n" "Da li želite zadržati neispravnu datoteku?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ne možete umnožavati i premještati u samu datoteku „%s“!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Ne možete izbrisati %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Nisam uspio prijeći na Mapu [%s]." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Želite li ukloniti sve kartice koje se ne koriste?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Kartica (%s) je zaključana. Želite li je uprkos tome zatvoriti?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite napustiti program?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Datoteka %s je promijenjena. Želite li je kopirati unatrag?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Ne mogu kopirati unatrag - želite li zadržati promijenjenu datoteku?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Želite li Kopirati %d odabranih datoteka/mapa?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Da Kopiram odabrano „%s“?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Napravi novi tip datoteke \"%s datoteke\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Unesite naziv lokacije i datoteke za spremanje datoteke alatne trake DC-a " #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Prilagođena radnja" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Želite li izbrisati djelomično umnoženu datoteku ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Želite li izbrisati %d odabranih datoteka/kazala?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Želite li premjestiti %d odabrane datoteke/kazala u smeće?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Želite li izbrisati odabrani „%s“?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Želite li premjestiti odabrano „%s“ u smeće?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nisam uspio da premjestim „%s“ u smeće. Želite li je izbrisati?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nije dostupan" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Unesite nastavak datoteke:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Unesite ime:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Unesite naziv i tip datoteke koju želite izraditi za proširenje\"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Desila se CRC greška u podacima arhive" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Podaci su oštećeni" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nisam uspio povezati se sa poslužiteljem „%s“" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nisam uspio kopirati datoteku %s u %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Datoteka pod imenom „%s“ već postoji." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s nije podržan" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Mapa %s već postoji." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Korisnik je prekinuo tekuću radnju" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Desila se greška pri zatvaranju datoteke" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nisam uspio napraviti datoteku" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nema više datoteka u arhivi" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nisam uspio otvoriti postojeću datoteku" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Desila se greška pri čitanju datoteke" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Desila se greška pri upisu u datoteku" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Nisam uspio napraviti Mapu %s." #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Veza nije ispravna" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nisam pronašao datoteke" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nema dovoljno memorije" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Radnja nije podržana." #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Desila se greška u priručnom izborniku" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Desila se greška prilikom učitavanja postavki" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Postoji sintaksna greška u regularnom izrazu" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nisam uspio promijeniti naziv datoteke %s u %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nisam uspio sačuvati pridruživanje datoteka programima." #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nisam uspio sačuvati datoteku" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nisam uspio postaviti svojstva datoteci „%s“" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nisam uspio postaviti datum i vreme datoteci „%s“" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nisam uspio postaviti vlasnika/udruženje datoteci %s“" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Nije moguće postaviti dozvole za \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Prihvatna memorija je premala" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Previše datoteka je izabrano za sažimanje" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Nije poznat oblik željene datoteke za sažimanje" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Sigurni ste da želite ukloniti sve unose omiljenih kartica? (Ne postoji \"poništavanje\" ove radnje)?" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Povucite ovdje druge unose" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Unesite naziv za ovaj unos omiljenih kartica" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Spremanje novog unosa omiljene kartice" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Broj uspješno izvezenih omiljenih kartica: %d on %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Zadane dodatne postavke za spremanje povijesti mapa za nove Favourite kartice:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Broj uspješno uvezenih datoteka: %d on %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Uvezene kartice sa naslijeđivanjem" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Odaberite .tab datoteke za uvoz (može ih istovremeno biti više!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Modifikacija Zadnje omiljene kartice još je spremljena. Želite li je spasiti prije nastavka?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Zadržite povijest pregledavanja pomoću omiljenih kartica:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "To će učitati omiljene kartice: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Spremanje trenutačnih kartica preko postojećeg unosa omiljenih kartica" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Datoteka %s je izmijenjena. Želite li ju sačuvati?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajta, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Datoteka %s već postoji, Želite li ju prepisati?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Datotekom:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Nisam uspio pronaći datoteku „%s“." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "U pogonu je radnja nad datotekama" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Neke radnje nad datotekama nisu dovršene. Zatvaranje Double Commander-a može dovesti do gubljenja podataka." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Datoteka %s je samo za čitanje. Želite li ju izbrisati?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Datoteka veličine „%s“ je prevelika za odredišni sistem datoteka." #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "Datoteka %s postoji. Želite li ju prepisati?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Želite li pratiti simboličku vezu „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Odaberite format teksta za uvoz" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Dodaj %d označenih mapa" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj označeno Mapa: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj trenutno Mapa: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Naredba za izvršenje" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska mapa" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Da li ste sigurni da želite ukloniti sve unose iz brzog spiska mapa? (Opoziv ove radnje nije moguć!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ovo će izvršiti sledeću naredbu:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ovo je imenovano kao brzo Mapa." #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Ovo će izmjeniti radni okvir na sljedeću putanju:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "I neradni okvir će se izmeniti na sledeću putanju:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Desila se greška prilikom smeštaja stavki u ostavu..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Desila se greška prilikom izvoza stavki..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Izvezi sve!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Izvezi brzi spisak mapa - Izaberite stavke koje želite izvesti" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Izvezi odabrano" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Uvezi sve!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Uvezi brzi spisak mapa- Izaberite stavke koje želite uvesti" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Uvezi izabrano" #: ulng.rsmsghotdirjustpath #, fuzzy #| msgid "Path" msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Putanja" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Pronađite datoteku „.hotlist“ za uvoz" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ime brzog mapa " #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Broj novih stavki: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nema ništa za izvoz!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Putanja brzog mapa" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ponovno dodaj izabrano Mapa: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ponovo dodaj trenutno Mapa: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Unesite putanju i ime datoteke brzog spiska mapa za oporavak" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Naredba:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(kraj podizbornika)" #: ulng.rsmsghotdirsimplemenu #, fuzzy #| msgid "Menu name:" msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Naziv izbornika:" #: ulng.rsmsghotdirsimplename #, fuzzy #| msgid "Name:" msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Ime:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(razdvajač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cilj podizbornika" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Određuje želite li razvrstati radni okvir određenim redosledom poslije izmene mapa" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Određuje ne želite li razvrstavati radni okvir određenim redosledom poslije izmene mapa" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Neke radnje za izbor prikladne relativne staze, apsolutne, posebnog pogleda mapa, itd." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Ukupan broj sačuvanih stavki: %d\n" "\n" "Ime ostave: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Ukupna broj izvezenih stavki: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Želite li izbrisati sve činioce podizbornika [%s]?\n" "Odgovorom NE ćete izbrisati samo ograničenje izbornika, ali će se zadržati činilac unutar podizbornika." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Unesite putanju i ime mesta za čuvanje datoteke brzog spiska mapa" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Netačna je izlazna dužina datoteke : „%s“" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Molim, ubacite sljedeći disk ili nešto slično.\n" "\n" "To će vam omogućiti da upišete sljedeću datoteku:\n" "„%s“\n" "\n" "Broj bajta preostao za upis: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Greška u naredbenoj liniji" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neispravan naziv datoteke" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neispravan oblik u datoteci podešavanja" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neispravna putanja" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Putanja %s sadrži nedozvoljene znakove" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ovo nije ispravan priključak." #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ovaj priključak je napisan za Double Commander %s.%sNe može raditi sa Double Commander-om %s." #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neispravan navod" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neispravan izbor." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Učitavam spisak datoteka..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopiraj datoteku %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Obriši datoteku %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Greška: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Raspakiram datoteku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podaci: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Napravi Mapa %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Premjesti datoteku %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Putanja do datoteke %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Ukloni Mapa %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Urađeno: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Provjeri ispravnost datoteke %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Izbriši potpuno datoteku %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Izbriši potpuno Mapa %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Glavna lozinka" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Unesite ponovo glavnu lozinku:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nova datoteka" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "sljedeći sadržaj će biti izdvojen" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nema datoteka" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nije izabrana nijedna datoteka." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nema dovoljno mesta u odredištu. Želite li nastaviti?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nema dovoljno slobodnog mesta na odredišnom uređaju. Želite li pokušati ponovo?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nisam uspio izbrisati datoteku %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nije primenjeno." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ispod je pregled. Možete pomicati pokazivač te odabrati datoteke kako biste dobili stvarni izgled i dojam različitih postavki" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Lozinka:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Lozinke se razlikuju!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Unesite vašu lozinku:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Lozinka (vatreni zid):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Unesite ponovo lozinku za provjeru:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Obriši %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Datoteka „%s“ već postoji. Da je prepišem?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Naredba za izvršavanje problema (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Naziv datoteke za ispisani tekst:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Molim, pobrinite se da ova datoteka bude dostupna. Pokušati ponovo?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Unesite novi odgovarajući naziv za ovu omiljenu karticu" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Unesite novi naziv za ovaj izbornik" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Preimenovanje/premještanje %d označenih datoteka/kazala?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Preimenovanje /premještanje označeno „%s“?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Molim, ponovo pokrenite Double Commander-a da bi se primijenile izmjene" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Odaberite vrstu datoteke za dodavanje njenog tipa\"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Označeno: %s od %s, datoteka: %d od %d, mapa: %d od %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Odaberite izvršnu datoteku za" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Molim, odaberite samo datoteke za proveru zbroja." #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Izaberite položaj sledećeg sadržaja/uređaja" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Postavi oznaku uređaju" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Posebna mapa" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodajte putanju radnom okviru" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodajte putanju iz neradnog okvira" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Pregledaj i koristi odabranu putanju" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Koristi varijablu okruženja..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Idi na posebnu putanju Double Commander-a..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Idi na varijablu okruženja..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Idi na drugu posebnu mapu Windows-a..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Idi na posebnu mapu sustava Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Napravite u odnosu na hotdir putanju" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Učini putanju apsolutnom" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Napravite u odnosu na posebnu putanju Double Commander-a..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Napravite u odnosu na varijablu okruženja..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Napravite u odnosu na posebnu mapu sustava Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Napravite u odnosu drugu posebnu mapu sustava Windows-a..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Koristi posebnu putanju Double Commander-a..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Koristi drugu naročitu putanju Windows-a..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Koristi posebnu mapu sustava Windows-a (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Ova je kartica (%s) zaključana! Otvoriti mapu na drugoj kartici?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Preimenovanje kartice" #: ulng.rsmsgtabrenameprompt msgctxt "ulng.rsmsgtabrenameprompt" msgid "New tab name:" msgstr "Novi naziv kartice:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Putanja do odredišta:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Pogreška! Konfiguracijska datoteka TC se ne može pronaći:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Pogreška! Izvršna konfiguracija TC se ne može pronaći:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Pogreška! ! TC još uvijek radi, isti bi trebao biti zatvoren za ovu operaciju.\n" "Zatvorite ga i pritisnite uredu, ili pritisnite otkaži da biste prekinuli." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Pogreška! Nije moguće pronaći željenu željenu TC izlaznu mapu alatne trake:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Unesite mjesto i naziv datoteke za spremanje TC Toolbar datoteke" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Tip odabrane datoteke nije među priznatim vrstama datoteka" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Pronađite \" alatnu traku \" datoteku za uvoz" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Pronađite \".BAR\" datoteku za uvoz" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Unesite mjesto i naziv datoteke alatne trake za vraćanje" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Spremljeno!\n" "Ime datoteke alatne trake: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Odabrano je previše datoteka." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Neodređeno" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "Adresa:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "bez tipa datoteke" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "bez imena" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Korisničko ime:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "korisničko ime (vatreni zid):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Oznaka uređaja:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Unesite veličinu uređaja:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Želite li potpuno izbrisati %d označenih datoteka/kazala?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Želite li potpuno izbrisati odabrano „%s“?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Brojač" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Nastavak" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Ime" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez izmena;VELIKA SLOVA;mala slova;Prvi znak veliki;Prvi Znak Svake Riječi Veliki;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "znak na položaju x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "znaci od položaja x do položaja y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Brojač" #: ulng.rsmulrenmaskday msgid "Day" msgstr "dan" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "dan (2 cifre)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "dan u nedjelji (kratko, npr. „pon“)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "dan u nedjelji (potpuno, npr. „ponedeljak“)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Nastavak" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "sat" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "sat (2 znaka)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minut" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minuta (2 znaka)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mejsec" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mesec (2 znaka)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Ime meseca (kratko, npr., „jan“)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Ime meseca (puno, npr., „januar“)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Ime" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekund" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekund (2 znaka)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Godina (2 znaka)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Godina (4 znaka)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Priključci" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Vrijeme" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Mreža" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Drugo" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistem" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Obustavljeno" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavam zbirnu provjeru" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Računam zbirnu provjeru u „%s“" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Računam zbirnu proveru „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Računam" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Računam „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Spajam" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spajam datoteke iz „%s“ na „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiram" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiram iz „%s“ u „%s“ " #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiram „%s“ na „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Stvaram Mapa" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Stvaram Mapa „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brišem" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Brišem iz „%s“" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Brišem „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvršavam" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Izvršavam „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Izdvajam" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Izdvajam iz „%s“ u „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Gotovo" #: ulng.rsoperlisting msgid "Listing" msgstr "Listam" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Listam „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Premještam" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Premještam iz „%s“ u „%s“" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Premještam „%s“ na „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nije pokrenuto" #: ulng.rsoperpacking msgid "Packing" msgstr "Sažimam" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Sažimam iz „%s“ u „%s“" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Sažimam „%s“ u „%s“" #: ulng.rsoperpaused msgid "Paused" msgstr "Stanka" #: ulng.rsoperpausing msgid "Pausing" msgstr "Stanka" #: ulng.rsoperrunning msgid "Running" msgstr "Pokrenuto" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Postavljam svojstva" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Postavljam svojstva u „%s“" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Postavljam svojstva datoteci „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dijeljenje" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Djelim „%s“ na „%s“" #: ulng.rsoperstarting msgid "Starting" msgstr "Pokrećem" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zaustavljeno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Prekidam" #: ulng.rsopertesting msgid "Testing" msgstr "Probanje" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Probam u „%s“" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Probam „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Provjeravam zbir" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Provjeravam zbir u „%s“" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Provjeravam zbir „%s“" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čekam na pristup izvornoj datoteci" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čekam na odziv korisnika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Brisanje" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Brisanje u „%s“" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Brisanje „%s“" #: ulng.rsoperworking msgid "Working" msgstr "Rad" #: ulng.rsoptaddfrommainpanel #, fuzzy #| msgid "Add at beginning;Add at the end;Smart add" msgid "Add at &beginning;Add at the end;Smart add" msgstr "dodaj na početak;dodaj na kraj;pametno dodavanje" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Naziv vrste arhive:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Pridruži priključak „%s“ sa:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Prvi;posljednji;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klasičan, naslijeđeni redoslijed; Abecedni redoslijed" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivna okvirna ploča na lijevoj strani,neaktivna na desnoj strani;Lijeva okvirna ploča na lijevoj strani,desna na desnoj" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Unesite nastavak" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Dodaj na početak;dodaj na kraj;abecedni redoslijed" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Odvojen prozor;umanjen odvojen prozor;table radnji" #: ulng.rsoptfilesizefloat msgid "float" msgstr "pokretna točka" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Prečica %s za „cm_Delete“ će biti prijavljena, tako da može biti upotrijebljena za vraćanje ove postavke." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Dodaj prečicu za %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj prečicu" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nisam uspio postaviti prečicu" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Izmeni prečicu" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Naredba" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format, fuzzy, badformat msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Prečica za „cm_Delete“ ima odrednicu koja zaobilazi ove postavke. Da li želite izmijeniti odrednicu i koristiti opće postavke?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Prečici %s za „cm_Delete“ treba se promijeniti odrednica kako bi se slagala sa prečicom %s. Želite li ju promijeniti?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Uredi prečicu za %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ispravi odrednicu" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Prečica" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Prečice" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ništa>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Odrednice" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Postavi prečicu za brisanje datoteke" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format, fuzzy, badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Da bi ove postavke radile sa prečicom %s, prečica mora biti dodijeljena „cm_Delete“, ali je već dodjeljena za %s. Želite li ju promijeniti?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Prečica %s za „cm_Delete“ je niz za koji gumb Shift ne može biti dodjeljeno. Najvjerovatnije neće raditi." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Prečica je u upotrebi" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Prečica %s već postoji." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Da li je dodjeliti %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "koristi se za %s u %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "koristi za ovu naredbu sa drugačijim odrednicama" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Programi za sažimanje" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Samoosvježavanje" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Ponašanje" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Sažeto" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Boje" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Stupci" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Postavke" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Prilagođeni stupci" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Brzi spisak mapa" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Prevuci i spusti" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Gumb za spisak uređaja" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Omiljene kartice" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Povezivanje dodatnih datoteka" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Pridruživanje datoteka" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Novo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Radnje nad datotekama" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Ploče s datotekama" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Pretraga datoteka" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Pregledi datoteka" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Vrste datoteka" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Kartice datoteka" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Posebne kartice mapa" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Oblik slova" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Isticanje" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Prečice" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikonice" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Zanemari spisak" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasteri" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jezik" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Raspored" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Dnevnik" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Razno" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Miš" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Višestruko preimenovanje" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Priključci" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Brza pretraga/uvjet" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Traka alata" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Alatke" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Napomene" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ništa;Naredbena linija;Brza pretraga;Brzi uvjet" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Lijevo gumb;Desno gumb;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na vrhu spiska datoteka:poslje mapa (ako se kazala prikažiu prije datoteka); na određenom položaju;na dnu spiska datoteka" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Priključak %s je već dodjeljen sljedećim nastavcima:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Onemogući" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Omogući" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Radni" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Opis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ime datoteke" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ime" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Prijavljen za" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Osetljivo;&Neosjetljivo" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Datoteke;&Kazala;Datoteke i Kazala" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skriva ploču uvjeta kada on nije u fokusu;Zadržava promjene prilagodbi postavki za drugi period rada" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "neosjetljivo na veličinu slova;prema postavkama lokaliteta (aAbBvV);prvo velika, pa mala slova (ABVabv)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "rasporedi po imenu i prikaži prvu;rasporedi kao datoteke i prikaži prvu;rasporedi kao datoteke" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Abecedno, vodeći računa o akcentima;Prirodan raspored: abesedno i brojevno" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Vrh;Dno" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Razdvajač&;&unutrašnja naredba;&Vanjska naredba;Izbornik&" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Vrsta imena&:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Naslijeđe DC - Kopija (x) ime datoteke.tip;Windows - ime datoteke (x).tip;Drugo - ime datoteke(x).tip" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne mijenjaj položaj;koristi iste postavke za nove datoteke;na položaju po rasporedu" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Datoteka: %d, mape: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nisam uspio promijeniti prava pristupa za „%s“" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nisam uspio promijeniti vlasnika „%s“" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datoteka" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mapa" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Imenovana cev" #: ulng.rspropssocket msgid "Socket" msgstr "Utičnica" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Posebni blok uređaj" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Posebni znakovni uređaj" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Simbolička veza" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Nepoznata vrsta" #: ulng.rssearchresult msgid "Search result" msgstr "Izlazi pretrage" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<neimenovani obrazac>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izaberite Mapa" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Prikaži pomoć za %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Sve" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorija" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolona" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Naredba" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Ime datoteke" #: ulng.rssimplewordfiles msgid "files" msgstr "datoteke" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametri" #: ulng.rssimplewordresult msgid "Result" msgstr "Rezultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Radna mapa" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtova" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajta" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajta" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajta" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajta" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Datoteka: %d, mapa: %d, Veličina: %s (%s bajta)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nisam uspio napraviti ciljnu Mapu." #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Oblik veličine datoteke nije ispravan." #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nisam uspio podijeliti datoteku." #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Broj delova je više od 100! Želite li nastaviti?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Izaberite Mapa:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Greška prilikom stvaranja simboličke veze." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Podrazumijevani tekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Običan tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nemoj ništa učiniti; Zatvori karticu;Pristupi omiljenoj kartici; Izbornik skočnih prozorčića" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dan(i)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Sat(i)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(i)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mesec(i)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunda (e)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Nedjelja(e)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Godina(e)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Preimenovanje omiljene kartice" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Preimenovanje podizbornika omiljene kartice" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Usporedba" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Uređivač" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Desila se greška pri otvaranju programa za razlike" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Desila se greška pri otvaranju uređivača" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Desila se greška pri otvaranju terminala" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Desila se greška pri otvaranju preglednika" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prijavite grešku lovcu bagova sa opisom radnje koju ste primenjivali na sljedeću datoteku: %s. Pritisnite %s za nastavak ili %s za izlazak iz programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Obje ploče, od aktivne do neaktivne" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Oba ploče, s lijeva na desno" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Putanja do ploče" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Unesite svako ime u zagradama ili što god želite" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Samo naziv datoteke, bez tipa" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Punu naziv datoteke (putanja+ime datoteke)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Pomoć s \"%\" varijablama" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Tražit će od korisnika zahtjev da unese parametar sa zadanom predloženom vrijednošću" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Lijeva Ploča" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Privremeni naziv datoteke sa popisom datoteka" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Privremeni naziv datoteke sa popisom punih imena datoteka (putanja+ime datoteke)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Privremeni naziv datoteke sa popisom imena datoteka s relativnom putanjom" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Samo naziv tipa datoteke" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Samo ime datoteke" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Drugi primjer onoga što je moguće" #: ulng.rsvarpath #, fuzzy #| msgid "Path, with ending delimiter" msgid "Path, without ending delimiter" msgstr "Putanja, s završnim graničnikom" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Odavde do kraja linije, pokazatelj postotka varijable je \"#\" znak" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Vraćanje postotka znaka " #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Odavde do kraja linije, pokazatelj vraćanja postotka varijable je \"%\" znak" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Prebacite svaki naziv s \"-a \" ili što želite" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Upozorenje korisniku za parametar; Predložena zadana vrijednost]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Naziv datoteke s relativnom putanjom" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Desns ploča" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Puna putanja druge odabrane datoteke na desnoj ploči" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Prikaži naredbu prije izvršavanja" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Jednostavna poruka]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Pokazat će se jednostavna poruka" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktivna ploča (izvor)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Neaktivna plpča (cilj)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Ovdje će se citirati nazivi datoteka (zadano)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Naredbe će se izvršiti u terminalu, nakon kojih će ostati otvoren" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Putanje će biti napisane s krajnjim graničnicima" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Ovdje se neće citirati nazivi datoteka" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Naredbe će se izvršiti u terminalu, nakon kojih će se isti zatvoriti" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Putanje neće biti napisane s krajnjim graničnicima (zadano)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Mreža" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Unutarnji preglednik Double Commander-a." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "loša kvaliteta" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Šifriranje" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Vrsta slike" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova veličina" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "Nisam uspio pronaći %s." #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "s vanjskim preglednikom" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "s unutarnjim preglednikom" #: ulng.rsxreplacements #, object-pascal-format, fuzzy, badformat msgid "Number of replacement: %d" msgstr "Broj zamjene" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nije bilo zamjene" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ����������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.fr.po�����������������������������������������������������������0000644�0001750�0000144�00001475174�15104114162�017277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 2016-02-12[DB] (reformulation simplifiée FCH 2024-06-13) : Afin de reprendre la même terminologie que Windows et Apple et même si TC utilise le terme "Répertoire", # c'est toujours le terme "Dossier" qui sera utilisé pour traduire "Directory". # Pour quelqu'un qui a toujours préféré le terme "Répertoire" c'est un peu irritant la première heure mais courage, après quelques minutes, on s'y habitue... # # 2016-02-12[DB] : Pour le nom commun, on peut dire "double-clic". Puis pour l'action de le faire, le verbe c'est "double-cliquer". # C'est comme ça dans le Larousse en ligne et c'est ce qui a été suivi ici. # # 2016-02-12[DB] : Pour ce qui est du terme "plugin", il y a un peu moins de certitude ! # La Commission générale de terminologie et de néologie en France en 1999 préconisait "Module d'extension". # L'Office québécois de la langue française en 2002 y allait de "plugiciel". # TC lui parle en façon de "Module-additionel" ou même de "Additif" sur son site web. # Devant ces différences, on préfère ne pas s'éparpiller davantage et on va utiliser le même terme qu'en anglais, à savoir "plugin". # On le mettra partout entre guillemets. Au pluriel, on ajoutera simplement un "s" soit "plugins". # La seule exception c'est pour "ulng.rsoptionseditorplugins" où il n'est pas entre guillemets. C'est juste pour faire en sorte que dans le menu d'option, # lorsqu'on trie alphabétiquement, il ne se retrouve pas en haut de la liste à cause du guillemet. # C'est tout de même très répandu aussi comme terme même en français. # # 2016-06-15[DB] : En français, avant et après le deux points, ça prend un espace. # Au fil du temps ce fichier s'est ramassé souvent avec aucun espace après le deux points. # Cela vient d'être corrigé partout. Ce fut un peu long et fastidieux. Essayons de continuer cela. # 2024-06-13[FCH] : Plusieurs types hésitations de traductions à trancher ultérieurement # H_01 : Un verbe anglais s'écrit de la même manière à l'infinitif ou à la 1ère personne du singulier # Par suite, il peut difficile être difficile de choisir, pour le verbe français correspondant, entre l'utilisation de l'infinitif et l'utilisation d'une conjuguaison à la 1ère personne du singulier au sens où moi (DC), je fais quelque chose... # Exemple : # msgid "Drop readonly fla&g" # msgstr "Ne pas tenir compte du marqueur lecture seule" VS "Ne tiens pas compte du marqueur lecture seule" # Dans les menus, on privilégiera l'infinitif... Dans les fenêtres "d'avancement", c'est plutôt l'inverse. N'étant pas un spécialiste de l'application, il a été parfois difficile de déterminer lequel des 2 était préférable. # => Cette mention H_ii, décidée tardivement et qui n'a donc pas été apposée partout où il y avait eu hésitation, signifie qu'il faudra revoir les traductions faites... # H_02 : Un verbe anglais conjugué de manière progressive (-ing) peut se traduire : # > soit par le nom correspondant suivi du terme "en cours" (encoding => Encodage en cours ou En cours d'encodage...) # > soit par le verbe français conjugé à la 1ère personne du singulier au sens où moi (DC), je suis en train de faire quelque chose... # Par suite, il peut difficile de choisir entre les 2 formulations... # => Cette mention H_ii, décidée tardivement et qui n'a donc pas été apposée partout où il y avait eu hésitation, signifie qu'il faudra revoir les traductions faites... # H_03 : Traduction de Save/Restore # Le verbe Save peut se traduire par Enregistrer ou Sauvegarder. De même, le verbe Restore peut se traduire par Restaurer ou Recharger... # Le choix de l'un ou de l'autre varie en fonction du contexte. # > Pour un fichier, Save se traduira par Enregistrer pour disposer de "Enregistrer sous..." que l'on trouve un peu partout... / Dans l'autre sens, on utilisera "Restaurer" # > Pour un dossier, idem fichier # > Pour des onglets ou des groupes d'onglets favoris => on privilégiera plutôt "Sauvegarder" et "Recharger" # > Pour une sélection => idem "Sauvegarder" et "Recharger" # > à compléter... # => Cette mention H_ii signifie qu'il y a eu hésitation sur la traduction la plus appropriée en fonction du contexte et de l'harmonisation d'ensemble... A revoir. # H_04 : Traduction pas claire => à revoir # # # # # # # # # msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" #"PO-Revision-Date: 2021-05-01 11:18-0400\n" #"Last-Translator: Denis Bisson <denis.bisson@denisbisson.org>\n" "PO-Revision-Date: 2024-06-23 14:22+0200\n" "Last-Translator: Frédéric Charlanes <f.charlanes@gmail.com>\n" #"Language-Team: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Français\n" "Language: fr\n" "X-Generator: Poedit 2.0\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparaison en cours... %d%% (ESC pour annuler)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Gauche: Suppression de %d fichier(s)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Droite : Suppression de %d fichiers(s)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fichiers trouvés : %d (Identiques : %d, Différents : %d, Gauche uniques : %d, Droite uniques : %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Gauche vers la droite: Copier %d fichiers, taille totale: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Droite vers la gauche: Copier %d fichiers, taille totale: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Choisir un modèle..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Vérifier l'espace disponible" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copier attributs" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copier propriétaire" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copier permissions" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copier date et heure" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Liens valides" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Ne pas tenir compte du marqueur \"lecture seule\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Exclure les dossiers vides" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Suivre les liens" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Réserver de l'espace" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Copier en écriture" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Vérifier" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Que faire lorsqu'on ne peut ajuster la date, les attributs, etc. du fichier" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Utiliser un fichier modèle" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quand le dossier existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quand le fichier existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quand on ne peut pas ajuster les propriétés" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<pas de modèle>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copier vers le presse-papier" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Date de révision" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Commit" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Page d'accueil :" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Révision" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuler" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Choisir les attributs" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Archive" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Compressé" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Dossier" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Archive cryptée" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Caché" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Lecture seule" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Clairesemé" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Lien symbolique" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Système" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Temporaire" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Attributs NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Attributs généraux" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lire" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Comme texte :" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Écrire" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Étalonnage" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Taille du bloc pour étalonnage: %d" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hachage" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Temp (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Vitesse (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calculer une signature..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Ouvre le fichier de signature à la fin de la tâche" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Créer une signature séparée pour chaque fichier" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "Format de fichier" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Enregistrer le fichier de signature dans :" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Vérification de signature..." #: tfrmchooseencoding.caption # H_02 msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Encodage" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Se connecter" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Supprimer" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Connexion manager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Se connecter à :" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Ajouter à la file d'attente" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&ptions" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Enregistrer les valeurs des options comme celles par défaut" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copier le(s) fichier(s)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nouvelle file d'attente" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "File d'attente 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "File d'attente 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "File d'attente 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "File d'attente 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "File d'attente 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Enregistrer la description" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Commentaires liés aux fichiers/dossiers" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Éditer le commentaire pour :" #: tfrmdescredit.lblencoding.caption # H_02 msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Encodage :" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Comparaison automatique" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Mode binaire" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annuler" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copier le bloc vers la droite" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copier le bloc vers la droite" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copier le bloc vers la gauche" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copier le bloc vers la gauche" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refaire" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Refaire" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Tout sélectionner" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annuler (en arrière)" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Défaire" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Quitter" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Rechercher" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Rechercher" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Rechercher le précédent" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Rechercher le précédent" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "R&emplacer" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Remplacer" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Première différence" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Première différence" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Aller à la ligne..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Aller à la ligne" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorer la casse" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorer les espaces" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Défilement simultané des deux côtés à la fois" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Dernière différence" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Dernière différence" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Différences de la ligne en cours" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Prochaine différence" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Prochaine différence" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Ouvrir à Gauche" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Ouvrir à Droite" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Colorer l'arrière-plan" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Différence précédente" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Différence précédente" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Recharger" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recharger" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Enregistrer" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Enregistrer" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Enregistrer sous... " #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Enregistrer sous... " #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Enregistrer la gauche" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Enregistrer la gauche" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Enregistrer la gauche sous..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Enregistrer la gauche sous..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Enregistrer la droite" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Enregistrer la droite" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Enregistrer la droite sous..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Enregistrer la droite sous..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparer" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparer" #: tfrmdiffer.btnleftencoding.hint # H_02 msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.btnrightencoding.hint # H_02 msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparer les fichiers" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Gauche" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Droite" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Actions" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmdiffer.mnuencoding.caption # H_02 msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Encodage" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Fichier" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Options" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Ajouter un nouveau raccourci à la séquence" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuler" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Retirer le dernier raccourci de la séquence" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Choisissez votre raccourci-clavier parmi la liste des touches disponibles" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Seulement pour ces sections" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Paramètre (chacun sur sa ligne unique)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Raccourcis :" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "A propos" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuration" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuration" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Copier" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Couper" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Supprimer" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Rechercher" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Rechercher" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Rechercher le précédent" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Aller à la ligne..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Window (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Coller" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refaire" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Refaire" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "R&emplacer" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Remplacer" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Tout sélectionner" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Tout sélectionner" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annuler" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Annuler" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Fermer" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Sortie" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nouveau" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nouveau" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Ouvrir" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Ouvrir" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Recharger" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Enregistrer" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Enregister" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Enregistrer &sous..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Enregistrer sous" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Éditeur" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "Édit&er" #: tfrmeditor.miencoding.caption # H_02 msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "En&codage" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Ouvrir en tant que" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Enregistrer en" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fichier" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Coloration syntaxique" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fin de ligne" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "Modèle &multi-lignes" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensibilité à la c&asse" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Chercher à partir du curseur" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expression &régulière" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Seulement le &texte sélectionné" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Mots entiers uniquement" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Option" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Remplacer avec :" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Chaîne à r&echercher :" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direction" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Faites ceci pour tous les objets" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Extraire les fichiers" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Extraire en utilisant les chemins des dossiers dans l'archive" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Extraire chaque archive dans un sous-dossier séparé (au nom de l'archive)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Écraser les fichier existants" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Dans le dossier :" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Extraire les fichiers correspondant au masque :" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Mot de passe pour les fichiers cryptés :" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Attendre..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nom de fichier :" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De :" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Cliquer sur Fermer quand le fichier temporaire ne peut pas être supprimé !" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Vers le panneau" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Voir tous" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Opération courante :" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De :" #: tfrmfileop.lblto.caption msgid "To:" msgstr "A :" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriétés" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Permettre l'exécution du fichier" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "&Récursif" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texte :" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contient :" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Créé :" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Exécution:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nom du fichier" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nom du fichier" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Chemin :" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Groupe" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Dernier accès :" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Dernière modification :" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Dernier changement de statut :" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Liens :" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Type de média :" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octale :" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propriétaire" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lecture" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Taille sur le disque :" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Taille :" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Lien symbolique vers :" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Type :" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écriture" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valeur" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriétés" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Fermer" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Arrêter" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Déverrouiller" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Déverrouiller tous" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Déverrouiller" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Descripteur de fichier" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ID de processus" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Emplacement de l'exécutable" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Annuler" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Fermer" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Fermer" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuration des raccourcis clavier" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Éditer" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Envoyer vers un &onglet" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Annuler et fermer la recherche" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Annuler et fermer toutes les autres recherches" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Aller au fichier" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Chercher des données" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "Dernière recherche" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nouvelle recherche" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nouvelle recherche (réinitialise les filtres)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Aller à la page \"Avancé\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Aller à la page \"Charger/Sauvegarder\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Aller à la page suivante" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Aller à la page \"Plugins\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Aller à la page précédente" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Aller à la page des résultats" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Aller à la page \"Normal\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Démarrer" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Vue" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ajouter" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Enregistrer" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Supprimer" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Charger" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Enregistrer" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Enregistrer avec le nom du dossier de début de recherche" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "S'il est enregistré, \"Démarrer dans le dossier\" sera restauré lors du chargement du modèle. A utiliser si vous souhaitez toujours chercher dans un même dossier." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Utiliser un modèle" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Rechercher les fichiers" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible à la &casse" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Date début :" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Date fin :" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Taille mini :" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Taille maxi :" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Rechercher dans les archives" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Rechercher le &texte dans les fichiers" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Suivre les liens symboliques" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Rechercher les fichiers &ne contenant PAS le texte" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Pas plus vieux que :" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Office XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Onglets ouverts" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Rechercher une partie du nom de fichier" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressions &régulières" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Rem&placer par" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Dossiers et fichiers sélectionnés" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Expression régulière" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "H. début :" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H. fin :" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utiliser le \"plugin\" de recherche :" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "même contenu" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "même signature" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "même nom" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Chercher des fichiers doublons" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "même taille" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadécimal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Entrer les noms de dossiers à exclure de la recherche et les séparer par un point-virgule" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Entrer les noms de fichiers à exclure de la recherche et les séparer par un point-virgule" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Entrer les noms de fichiers séparés par un point-virgule" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Champ" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Opérateur" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valeur" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Dossiers" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Fichiers" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Chercher des données" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attributs" #: tfrmfinddlg.lblencoding.caption # H_02 msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Encodage :" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Exclure les sous-dossiers" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Exclures les fichiers" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Masque de &fichiers" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Démarrer la recherche dans le dossier" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Rechercher dans les sous-dossiers :" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Recherches &précédentes :" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Action" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Annuler et fermer toutes les autres" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Ouvrir dans un nouvel onglet" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Options" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Supprimer de la liste" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Résultat" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Afficher tous les éléments trouvés" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Ouvrir dans l'éditeur" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Afficher dans la visionneuse" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Vue" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avancé" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Charger/Sauvegarder" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Résultat" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Rechercher" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Rechercher" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "Recherche arrière" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensible à la casse" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expression &régulière" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadécimal" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Nom de domaine:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Mot de passe :" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nom d'utilisateur :" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Connexion anonyme" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Connexion en tant que :" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Créer un lien dur (hardlink)" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destination vers laquelle le lien va pointer" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom du lien" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importer tout !" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importer ce qui est sélectionné" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Choississez les éléments à importer" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Un clic sur un sous-menu le sélectionnera entièrement" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Maintenir la touche CTRL enfoncée et cliquer sur les éléments pour en choisir plus d'un à la fois" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Concaténeur" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Enregistrer sous..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Élément" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nom du fichier" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "En dessous" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "En dessous" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Supprimer" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Supprimer" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Au dessus" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Au dessus" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&A propos" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Activer l'onglet par index" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Ajouter le nom du fichier dans la ligne de commande" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nouvelle instance de recherche..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Ajouter le chemin complet et le nom du fichier dans la ligne de commande" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copier le chemin vers la ligne de commande" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Ajouter un \"Plugin\"" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "Étalonnage" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Vue résumée" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vue résumée" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calculer l'espace &occupé" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Changer de dossier" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Aller au dossier d'accueil" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Aller au dossier parent" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Aller au dossier racine" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calculer la &somme de contrôle..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Vérifier la somme de contrôle..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Effacer le fichier journal" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Effacer la fenêtre du journal" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Fermer &tous les onglets" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Fermer les onglets doublons" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Fermer l'onglet" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Prochaine ligne de commande" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Définir la ligne de commande sur la prochaine commande de l'historique" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Ligne de commande précédente" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Définir la ligne de commande sur la précédente commande de l'historique" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Complet" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vue colonne" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Comparer le contenu" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Comparer les dossiers" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparer les dossiers" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Configuration des outils d'archivage" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuration de la liste des dossiers favoris" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Configuration des groupes d'onglets favoris" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Configuration des onglets" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuration des raccourcis-clavier" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Configuration des \"Plugins\"" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Enregistrer la position" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Enregistrer la configuration" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Configuration de la recherche de fichiers" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Configuation de la barre d'outils..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Configuration des infobulles" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Configuration du menu en arborescence" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Configuration des couleurs du menu en arborescence" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Afficher le menu contextuel" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copier" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Copier tous les onglets sur le panneau opposé" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copier toutes les colonnes affichées" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copier les fichiers avec l'&arborescence complète" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copier le &nom du(des) fichier(s) dans le presse-papier" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Copier les noms avec le chemin UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copier les fichiers sans demander de confirmation" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Copier le chemin complet des fichiers sélectionnés sans le séparateur de dossier final" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copier le chemin complet des fichiers sélectionnés" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copier dans le même panneau" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copier" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Afficher l'espace &occupé" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Co&uper" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Affiche les paramètres des commandes" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Annuler et fermer toutes les recherches" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Historique des dossiers" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Dossiers &favoris" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Exécuter une commande interne..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Choisissez n'importe quelle commande et exécutez la" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Éditer" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Éditer le commentaire..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Éditer le nouveau fichier" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Éditer le champ du chemin au dessus de la liste des fichiers" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Permuter les panneaux" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Exécuter le script" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extraire les fichiers..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Configuration des associations d'extension de fichiers" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Conca&téner les fichiers..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Afficher les &propriétés des fichiers" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Découper un fichier..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vue à plat" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "Vue à plat, seulement pour la sélection" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Mettre le focus sur la ligne de commande" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Alterner de panneau" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Alterner entre la liste de gauche et celle de droite" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Basculer vers la vue en arborescence" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Basculer entre la liste actuelle de fichiers et l'arborescence (si active)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Placer le curseur sur le premier dossier ou fichier" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer le curseur sur le premier fichier de la liste" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Placer le curseur sur le dernier dossier ou fichier" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer le curseur sur le dernier fichier de la liste" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Placer le curseur sur le dossier ou fichier suivant" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Placer le curseur sur le dossier ou fichier précédent" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Créer un lien d&ur (hardlink)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Index de l'aide" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Mode &horizontal pour les panneaux" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Raccourcis &clavier" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Vue résumée dans le panneau de gauche" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Vue colonne sur le panneau de gauche" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Gauche &= Droite" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Vue à plat sur le panneau de gauche" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Ouvrir la liste des volumes de gauche" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Inverser l'ordre dans le panneau de gauche" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Trier le panneau de gauche par attribut" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Trier le panneau de gauche par date" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Trier le panneau de gauche par extension" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Trier le panneau de gauche par nom" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Trier le panneau de gauche par taille" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vue vignettes sur le panneau gauche" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Charger un groupe d'onglets favoris" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Charger la liste" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Charger la liste des fichiers/dossiers depuis le fichier texte spécifié" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Charger la sélection depuis le &presse-papier" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Charger la sélection depuis un fichier..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Charger les onglets depuis un fichier" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Nouveau dossier" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Sélectionner tous les fichiers de même &extension" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Sélectionner tous les fichiers de même nom" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Sélectionner tous les fichiers de même nom et même extension" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Sélectionner tous les fichiers de même chemin" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverser la sélection" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Tout sélectionner" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Désélectionner un &groupe" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Sélectionner un groupe" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Tout &désélectionner" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Réduire la fenêtre" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Déplacer l'onglet courant vers la gauche" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Déplacer l'onglet courant vers la droite" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Outil pour &renommer par lot" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connexion au réseau" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Déconnexion du réseau" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connexion &rapide au réseau..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nouvel onglet" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Charger le groupe suivant d'onglets favoris" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Onglet &suivant" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Ouvrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tentative d'ouverture de l'archive" #: tfrmmain.actopenbar.caption # H_02 msgid "Open bar file" msgstr "Ouvrir un fichier de barre" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Ouvrir le &dossier dans un nouvel onglet" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Ouvrir un lecteur par index" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Ouvrir la liste des VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Voir les opérations en cours" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Options..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Compresser les fichiers..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Définir la position du séparateur de panneau" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Co&ller" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Charger le groupe précédent d'onglets favoris" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Onglet &précédent" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtre rapide" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Recherche rapide" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Panneau de visualisation rapide" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Rafraîchir" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Recharger le groupe courant d'onglets favoris" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Déplacer" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Déplacer/Renommer les fichiers sans demande de confirmation" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renommer" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Re&nommer l'onglet" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Enregistrer les onglets courants dans le dernier groupe d'onglets favoris chargé" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Recharger la sélection" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Inverser l'ordre" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Vue résumée dans le panneau de droite" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Vue colonne sur le panneau de droite" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Droite &= Gauche" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Vue à plat sur le panneau de droite" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Ouvrir la liste des volumes/disques de droite" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Inverser l'ordre de tri sur le panneau de droite" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Trier le panneau de droite par attribut" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Trier le panneau de droite par date" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Trier le panneau de droite par extension" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Trier le panneau de droite par nom" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Trier le panneau de droite par taille" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vue \"Vignette\" dans le panneau de droite" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Ouvrir un &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Enregistrer les onglets courants dans un groupe d'onglets favoris" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Enregistrer toutes les colonnes affichées dans un fichier" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sau&vegarder la sélection" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sauv&egarder la sélection dans un fichier..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Enregistrer les onglets dans un fichier" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Chercher..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Tous les onglets verrouillés avec les dossiers ouverts dans des nouveaux onglets" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Déverrouiller tous les onglets" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Verrouiller tous les onglets" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Verrouiller tous les onglets avec changements de &dossiers autorisés" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Changer les &attributs..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Verrouillé avec les dossiers ouverts dans des nouveaux &onglets" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Verrouillé" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Verrouillé avec les changements de &dossiers autorisés" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Ouvrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Ouvrir en utilisant les associations système" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Afficher les boutons dans le menu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Afficher l'historique des commandes" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Afficher les fichiers &cachés et système" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "Afficher la liste des onglets" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "Afficher la liste des onglets ouverts" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Trier par &Attributs" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Trier par &Date" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Trier par &Extension" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Trier par &Nom" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Trier par &Taille" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Ouvrir la liste des lecteurs" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Activer/désactiver la liste des fichiers/dossiers ignorés" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Créer un &lien symbolique..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Navigation synchrone" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Changement de répertoire synchrone dans les deux panneaux" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Syn&chroniser les dossiers..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cible &= Source" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Tester une(des) archive(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Vignettes" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vue \"Vignette\"" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Alterner la vue plein écran et le mode console" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Ouvrir le dossier sous le curseur dans l'onglet du panneau de gauche" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Ouvrir le dossier sous le curseur dans l'onglet du panneau de droite" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Panneau d'arborescence" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Trier selon les paramètres" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Désélectionner tous les fichiers de &même extension" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Désélectionner tous les fichiers de même nom" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Désélectionner tous les fichiers de même nom et même extension" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Désélectionner tous les fichiers de même chemin" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Voir" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Afficher l'historique des chemins visités pour la vue active" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Aller à l'entrée suivante de l'historique" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Aller à l'entrée précédente de l'historique" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Regarder le fichier journal" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Voir la liste des instances de recherche de fichiers" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visiter le site Web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Suppression sécurisée" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Travailler avec la liste des dossiers favoris et les paramètres" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Quitter" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Dossier" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Liste des dossiers favoris" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Afficher le même dossier que celui actif dans le panneau opposé" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Aller au dossier personnel" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Aller au dossier racine" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Aller au dossier parent" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Dossiers favoris" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Afficher le dossier courant du panneau de gauche dans celui de droite" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Chemin" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copier..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Créer un lien..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Effacer" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Cacher" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Tout sélectionner" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Déplacer..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Créer un lien symbolique" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Options des onglets" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaurer" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Démarrer" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Annuler" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Commandes" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "Confi&guration" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Onglets favoris" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Fichiers" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Sélection" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Réseau" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Affichage" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Options des onglets" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Onglets" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Éditer" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Choisissez votre commande interne" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Ordonné de manière classique" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Ordonné de manière classique" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Choisissez toutes les catégories par défaut" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Sélection :" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Catégories :" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Nom de commande :" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "Filtre :" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Indice :" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Raccourci clavier" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Catégorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Aide" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Indice" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Raccourci clavier" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ajouter" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "Ai&de" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Définir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Sensibilité à la casse" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorer les accents et les ligatures" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Attributs:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Masque de saisie :" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ou choisissez un type de sélection prédéfinie :" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Créer un nouveau dossier" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "Syntaxe étendue" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Nom du nouveau dossier :" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nouvelle Taille" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Hauteur :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualité de la compression JPEG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Largeur :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Hauteur" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largeur" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extension" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Nom de fichier" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Effacer" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Effacer" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Fermer" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configuration" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Compteur" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Compteur" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Date" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Date" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Supprimer" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Dérouler la liste de configurations" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Éditer les noms..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Éditer les nouveaux noms..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extension" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extension" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Éditer" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Afficher le sous-menu de chemin relatif" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Charger la dernière configuration" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Charger les noms depuis un fichier..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Charger une configuration par nom ou par index" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Charger la configuration 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Charger la configuration 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Charger la configuration 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Charger la configuration 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Charger la configuration 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Charger la configuration 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Charger la configuration 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Charger la configuration 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Charger la configuration 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Nom de fichier" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Nom de fichier" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Renommer" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Renommer" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Tout réinitialiser" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Enregistrer" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Enregistrer sous" #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Montrer le menu des configurations" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Trier" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Heure" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Heure" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Montrer l'historique de renommage" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Renommer par lot" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Sensibilité à la casse" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Enregistrer un fichier journal" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Ajouter" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "N'en remplacer qu'un par fichier" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpression régulière" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Utiliser la substitution" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Compteur" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Chercher && Remplacer" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Masque" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Présélections" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extension" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Chercher..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Intervalle" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nom de fichier" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Rem&placer" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Nombre de départ" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Largeur" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Actions" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Éditer" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Ancien nom du fichier" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nouveau nom du fichier" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Chemin du Fichier" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Cliquer sur OK dès la fermeture de l'éditeur afin de charger les noms modifiés !" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Choisir une application" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Commande personnalisée" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Enregistrer l'association" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Définir l'application à utiliser par défaut" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Type de fichier à être ouvert : %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Noms de fichiers multiple" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Plusieurs URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fichier unique" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Identifiant de ressource unique" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Appli&quer" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annu&ler" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Aide" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Options" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Veuillez choisir une sous-page, celle-ci ne contient aucun paramétrage." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copier" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Supprimer" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Autres..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Quelques fonctions pour choisir le chemin approprié" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Renommer" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID utilisé par la commande cm_OpenArchive pour reconnaître le type d'archive via son contenu et non via son extension" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Options:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Mode d'analyse de format :" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Activé" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Mode de débbogage" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Afficher la sortie de la console" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Utiliser le nom de l'archive sans extension comme liste" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Attributs de fichier Unix" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Délimiteur de chemin Unix" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Attributs de fichier Windows" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Délimiteur de chemin Windows" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Ajouter :" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Programme gérant les archives :" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Supprimer :" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Description :" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Extension :" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Extraire :" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extraire sans les chemins des dossiers contenus dans l'archive :" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Position de l'ID :" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID :" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Plage de recherche du ID :" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Liste :" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Gestion des archives :" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Fin de liste (optionnel) :" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Format de liste :" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Fin de liste (optionnel) :" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Mot de passe :" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Créer une archive auto-extractible :" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Tester l'archive :" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Configuration automatique" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Tout désactiver" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Annuler les modifications" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Tout activer" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exporter..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Trier outils d'archivage" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Avancé" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Général" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quand la &taille, la date ou les attributs changent" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pour les chemins suivants et leurs sous-dossiers :" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quand les fichiers sont &créés, supprimés ou renommés" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quand l'application est en &arrière-plan" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Désactiver le rafraîchissement automatique" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Rafraîchir la liste des fichiers" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Toujours afficher l'icône dans la zone de notification" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Cacher automatiquement les disques non montés" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Icône dans la zone de notification lorsque la fenêtre est minimisée" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "N'autoriser qu'une seule instance de Double Commander" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ici vous pouvez entrer un ou plusieurs lecteurs ou points de montage, séparés par \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Liste noire des lecteurs :" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Taille des colonnes" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Afficher l'extension des fichiers" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "aligné (avec tabulation)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "directement après le nom du fichier" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Nombre de colonnes fixes" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Largeur de colonnes fixes" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utiliser l'indicateur en gradient" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Mode binaire" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Mode Livre" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Mode Image" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Mode Texte" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Ajouté :" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Arrière-plan :" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Texte :" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Catégorie :" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Effacé :" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Erreur :" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Arrière-plan 1 :" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Arrière-plan 2 :" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Couleur arrière de l'indicateur :" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Couleur avant de l'indicateur :" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "Couleur de l'indicateur de seuil :" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Information :" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Gauche :" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modifié :" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modifié :" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Droite :" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Succès :" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Inconnu :" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Etat" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Alignement des titres de colonnes comme celui des valeurs" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Couper le texte à la largeur de la colonne" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Ajuster la largeur de la cellule au texte" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Lignes horizontales" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Lignes verticales" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Remplissage automatique des colonnes" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Afficher la grille" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Dimensionner automatiquement les colonnes" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Largeur automatique des colonnes :" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Historique des commandes" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Historique des dossiers" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Historique des masques de fichier" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Onglets" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Enregistrer la configuration" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Historique des Recherches/Remplacements" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "État de la fenêtre principale" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Dossiers" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Emplacement des fichiers de configuration" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Enregistrer en quittant" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Classement des éléments de configuration de l'arborescence de gauche" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "État de l'arborescence de configuration lorsqu'on y entre" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Définir sur la ligne de commande" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Surbrillance :" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Thème d'icône :" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Cache des vignettes :" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Dossier où se trouve l'exécutable (version portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Dossier personnel de l'utilisateur" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Appliquer la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Appliquer la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Appliquer la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Supprimer" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Aller à la valeur par défaut" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nouveau" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Prochain" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Précédent" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Réinitialiser aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Enregistrer sous" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Enregistrer" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Autoriser la superposition des couleurs" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Lorsqu'on clique pour changer quelque chose, le faire pour toutes les colonnes" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Général" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordure du curseur" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Utiliser le curseur avec le cadre" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Utiliser une couleur pour la sélection inactive" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Utiliser la couleur inversée" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Personnaliser la police et la couleur pour cette vue" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Arrière-plan" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Arrière-plan 2 :" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "&Columns view:" msgstr "Vue colonne:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Nom de colonne courante]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Couleur du curseur :" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Caractère du curseur :" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "Système de fichiers:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Police :" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Taille :" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Couleur du texte :" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Couleur curseur inactif" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Couleur sélection inactive" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Couleur de marque :" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Aperçu ci-dessous. Vous pouvez bouger le curseur, sélectionner des fichiers et voir immédiatement l'effet du paramétrage." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Options pour colonne :" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Ajouter une colonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Position des panneaux après la comparaison :" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Ajouter dossier du panneau actif" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Ajouter dossiers des panneaux actifs et inactifs" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Ajouter un dossier que je vais parcourir" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgid "Add a copy of the selected entry" msgstr "Ajoute une copie de l'entrée sélectionnée" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Ajouter ce qui est actuellement choisi dans le dossier actif" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgid "Add a separator" msgstr "Ajouter un séparateur" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Ajouter un sous-menu" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgid "Add directory I will type" msgstr "Ajouter un dossier dont je vais entrer le nom" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Compacter le tout" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Refermer la branche" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Couper la sélection d'éléments vers le presse-papier" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Efface tout !" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Effacer l'élément sélectionné" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Effacer le sous-menu et tous ses éléments" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Effacer seulement le sous-menu mais conserver les éléments" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Développer la branche" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Se déplacer vers l'arborescence" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Aller au premier élément" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Aller au dernier élément" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Aller à l'élément suivant" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Aller à l'élément précédent" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Insérer dossier du panneau actif" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Insérer dossiers des panneaux actifs et inactifs" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Insérer un dossier que je vais parcourir" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Insérer une copie de l'entrée sélectionnée" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Insérer ce qui est actuellement choisi dans le dossier actif" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Insérer un séparateur" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Insérer un sous-menu" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgid "Insert directory I will type" msgstr "Insérer un dossier dont je vais entrer le nom" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Déplacer à la position suivante" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Déplacer à la position précédente" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Développer toutes les branches" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Coller le contenu du presse-papier" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Chercher et remplacer dans le chemin" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Chercher et remplacer dans le chemin et la cible" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Chercher et remplacer dans le chemin cible" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Ajuster le chemin" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Ajuster le chemin cible" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Ajouter..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Archiver..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Supprimer..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "E&xporter..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Im&porter..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Insérer..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Divers..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Fonctions pour choisir le chemin approprié pour la cible" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Trier..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Lorsqu'on ajoute un dossier, ajouter aussi une cible" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Toujours développer l'arborescence" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Afficher seulement les variables d'environnement qui semblent valides" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Dans le menu, afficher [avec chemin]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nom, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nom, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Liste des dossiers favoris (utiliser le glisser/déposer pour changer l'ordre)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Autre options" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nom :" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Chemin :" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Ci&ble :" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...au niveau de l'élément sélectionné seulement" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Parcourir tous les chemins source des dossiers favoris et valider ceux qui existent réellement" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Parcourir tous les chemins source et de cible des dossiers favoris et valider ceux qui existent réellement" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "vers le fichier des dossiers favoris (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "vers le fichier \"wincmd.ini\" de TC (en conservant les dossiers favoris existants)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "vers le fichier \"wincmd.ini\" de TC (efface les dossiers favoris existants)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Aller configurer les options reliées à TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Aller configurer les options reliées à TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Menu de test pour les dossiers favoris" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "d'un fichier de dossiers favoris (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "de \"wincmd.ini\" de TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "Navigation" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Restaurer une liste de dossiers favoris depuis un backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Sauvegarder un backup de la liste courante de dossiers favoris" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Rechercher et remplacer..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...tout, de A à Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...simple groupe d'items seulement" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...le contenu des sous-menus sélectionnés, mais pas les niveaux plus fins" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...le contenu des sous-menus et de leur descendance" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Vérification du menu résultant" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Ajuster chemin" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Ajuster le chemin cible" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Ajout du panneau principal" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Appliquer les paramètres aux dossiers favoris" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Source" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Destination" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Chemins" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Manière de définir les chemins lors de leur ajout:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Faire ceci pour les chemins de:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Le chemin doit être relatif à:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "De tous les formats supportés, demander lequel utiliser à chaque fois" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Lorsqu'on enregistre du texte en Unicode, utiliser le format UTF8 (UTF16 sinon)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Lorsqu'on dépose du texte, décider automatiquement du nom de fichier résultant (autrement, on le demande à l'usager a chaque fois)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Afficher la fenêtre de confirmation après avoir déposé" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Lorsqu'on fait un glisser/déposer de texte vers un panneau :" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Placer le format préféré en premier (utiliser le glisser/déposer)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(si celui préféré n'est pas présent, prendre le second et ainsi de suite)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(ne fonctionnera pas avec certains applications, à décocher en cas de problème)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Montrer les fichiers système" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Montrer l'espace libre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Montrer les étiquettes" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Liste des lecteurs" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Indentation automatique" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Lorsqu'une nouvelle ligne est créée avec <Enter>, l'indenter de la même manière que la ligne précédente" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "Défaire Groupe" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "Toutes les modifications continues du même type seront traitées en un seul appel au lieu d'être annulées/rétablies une à une." #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Marge de droite" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Le curseur a passé la fin de la ligne" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Permettre de déplacer le curseur dans un espace libre au-delà de la fin de la ligne" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Afficher les caractères spéciaux" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Afficher les caractères spéciaux pour les espaces et les tabulations" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Tabulation astucieuse" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Lorsqu'on utilise la touche <Tab>, le curseur va au caractère non-espace suivant de la ligne précédente." #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Indentation des blocs" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Lorsque <Tab> et <Maj+Tab> agissent comme indentation de bloc, retirer l'indentation quand le texte est sélectionné" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Utiliser des espaces à la place des tabulations" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Convertit les caractères de tabulation en un nombre spécifié de caractères d'espacement (lors de la saisie)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Supprimer les espaces de fin" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Supprimer automatiquement les espaces de fin, cela s'applique uniquement aux lignes modifiées" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Veuillez noter que l'option \"Tabulation astucieuse\" est prioritaire sur la tabulation à effectuer" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Options de l'éditeur interne" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Indentation de bloc :" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Largeur de tabulation:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Veuillez noter que l'option \"Tab intelligent\" est prioritaire sur la tabulation à effectuer" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Fond" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Fond" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Réinitialiser" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Enregistrer" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Élements d'attributs :" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "En avant-plan" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "En avant-plan" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Texte sélectionné" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Utiliser (et éditer) selon le paramétrage global" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Utiliser les paramètres locaux" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Gras" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "Inversé" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Italique" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Inversé" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Barré" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Inversé" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Souligné" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Inversé" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Ajouter..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Supprimer..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Import/Export" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Insérer..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Trier..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Aucun" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Toujours développer toute l'arborescence" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Non" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Gauche" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Droite" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Liste des groupes d'onglets favoris (réordonner par glisser/déposer)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Autres options" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Quoi restituer où pour l'entrée choisie :" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Onglets à conserver :" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Enregistrer l'historique des dossiers :" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Les onglets enregistrés de gauche seront restaurés ici :" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Les onglets enregistrés de droite seront restaurés ici :" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un séparateur" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Ajouter un séparateur" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sous-menu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Ajouter un sous-menu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Compacter le tout" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...au niveau de l'élément sélectionné seulement" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Couper" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "efface tout!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sous-menu et tous ses éléments" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "juste le sous-menu mais en conservant ses éléments" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "élément sélectionné" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Efface l'élément sélectionné" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exporter vers fichier .tab classique" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Menu de test des groupes d'onglets favoris" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importer les fichiers classiques d'onglets selon les paramètres par défaut" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importe les fichiers classique d'onglets à l'emplacement sélectionné" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importe les fichiers classique d'onglets à l'emplacement sélectionné" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importe les fichiers classique d'onglets dans un sous-menu à l'emplacement sélectionné " #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Insérer un séparateur" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Insérer un sous-menu" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Développer toutes les branches" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Coller" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...tout, de A à Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...un seul groupe d'éléments seulement" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Tri un seul groupe d'éléments" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...le contenu des sous-menus sélectionnés, mais pas plus fin" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...le contenu des sous-menus et de leur descendance" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Vérification du menu résultant" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Ajouter" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Ajouter" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Dupliquer" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Choisissez votre commande interne" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "En dessous" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Éditer" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Insérer" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Insérer" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Renommer" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Aide-mémoire des variables" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Au-dessus" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Chemin de démarrage de la commande. Ne pas mettre cette chaîne entre guillemets." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nom de l'action. Ce ne sera jamais passé au système, c'est simplement un nom identifiant l'action choisie par vous et pour vous." #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Paramètre à passer à la commande. Les noms longs de fichier avec espaces doivent être entre guillemets (entrer manuellement)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Commande à exécuter. Ne pas mettre cette chaîne entre guillemets." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Description de l'action" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Actions" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Peut être trié par glisser/déposer" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Types de fichiers" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icône" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Les actions peuvent être triées par glisser/déposer" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Les extensions peuvent être triées par glisser/déposer" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Les types de fichier peuvent être triés par glisser/déposer" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Action :" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Commande :" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paramètres :" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Chemin de démarrage :" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Personnalisé avec..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Personnalisé" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Éditer" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Ouvrir dans l'éditeur" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Éditer avec..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Récupérer la sortie de la commande" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Ouvrir dans l'éditeur interne" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Ouvrir avec la visionneuse interne" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Ouvrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Ouvir avec..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Exécuter dans un terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Voir" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Ouvrir dans la visionneuse" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Voir avec..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Cliquez-moi pour changer l'icône!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Appliquer les paramètres aux noms de fichiers et chemins configurés" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Actions contextuelles par défaut (Afficher/Modifier)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Exécuter via l'invite de commande" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Menu contextuel étendu" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Configuration des associations d'extensions" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Offrir d'ajouter à la configuration d'association d'extension la sélection lorsqu'elle n'y est pas déjà" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Lorsqu'on accède aux associations d'extensions, proposer d'ajouter celle du fichier sélectionné si celle-ci n'est pas déjà configurée" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Exécuter via un terminal ensuite fermé" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Exécuter via un terminal laissé ouvert" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Commandes" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Icônes" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Chemins de démarrage" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Options étendues :" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Chemins" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Manière de définir les chemins lors de l'ajout des icônes, des commandes et des chemins :" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Faire ceci pour les fichiers et chemins :" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Le chemin doit être relatif à :" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Afficher la fenêtre de confirmation pour :" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Opération de copie" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Opération de suppression" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Utiliser la corbeille lors des suppressions (L'utilisation des touches Maj+Del permet la suppression sans passer par la corbeille)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Opération de suppression vers la corbeille" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Ne pas tenir compte du marqueur \"lecture seule\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Opération de déplacement" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Traiter les commentaires avec les fichiers/dossiers" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Sélectionner uniquement le nom du fichier lors d'un renommage (sans l'extension)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Afficher l'onglet sélectionné dans la boîte de dialogue des copies/déplacements" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Continuer en cas d'erreurs lors des opérations et les afficher dans la fenêtre du journal" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Opération de test d'archive" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Vérifier la somme de contrôle" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Exécution des opérations en cours" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interface usager" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Taille du tampon pour les opérations sur les fichiers (en KB) :" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Taille du tampon pour le calcul de signature (en KB) :" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Montrer la progression des opérations dans" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Méthode de renommage automatique des fichiers à dupliquer :" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Nombre de cycles de suppression sécurisée :" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Réinitialiser aux options par défaut DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Autoriser la superposition des couleurs" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Utiliser un cadre seul pour le curseur" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Utiliser la couleur de sélection inactive" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Utiliser la sélection inverse" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Bordure du curseur" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Chemin courant" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Arrière-plan :" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Arrière-plan 2 :" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Couleur du curseur :" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Caractère du curseur :" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Couleur du curseur inactif" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Couleur de sélection inactive" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "Niveau de luminosité du panneau inactif" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Couleur de marque :" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Couleur du texte :" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Arrière-plan inactif :" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Couleur de texte inactif :" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Aperçu ci-dessous. Vous pouvez bouger le curseur, sélectionner un fichier et voir immédiatement l'effet du paramétrage." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Couleur du texte :" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Lorsqu'on lance une recherche de fichier, réinitialiser les filtres" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Rechercher une partie du nom de fichier" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Afficher la barre de menu dans la recherche de fichiers" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Recherche de texte dans les fichiers" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Recherche de fichiers" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Filtres du bouton \"Nouvelle recherche\" :" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Modèle de recherche par défaut :" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Utiliser la mémoire pour les recherches dans les fichiers texte" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Utiliser un flux pour les recherches dans les fichiers texte" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Défaut" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatage" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Abréviations personnalisées à utiliser:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Tri" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "Octet:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Sensible à la casse :" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorrect" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Format des dates et heures :" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format de taille de fichier :" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Format des pieds de panneaux :" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gigaoctet :" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Format des entêtes de panneaux :" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "Kilooctet :" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Mégaoctet :" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Insérer les nouveaux fichiers :" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Format taille opérations :" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Tri des dossiers :" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Méthode de tri :" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Téraoctet :" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Déplacer les fichiers mis à jour :" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Ajouter" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Ai&de" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Activation du changement vers le répertoire-parent lorsqu'on double-clique dans un espace vide d'un panneau" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Ne pas charger la liste de fichiers juqu'à temps qu'un onglet soit activé" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mettre les noms de dossiers entre crochets" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Colorer les nouveaux fichiers et ceux actualisés" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Activer le renommage du fichier en double-cliquant lentement sur son nom" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Charger la liste des fichiers dans un \"tread\" séparé" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Charger les icônes après la liste des fichiers" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Afficher les fichiers cachés et système" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Lors de la sélection des fichiers avec la barre d'espace, se déplacer sur le fichier suivant vers le bas (comme avec <Insér.>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Interpréter le masque de filtre comme Windows (\"*.*\" sélectionne vraiment tout, même les fichiers sans extension, etc.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Utiliser un filtre d'attribut indépendant à chaque entrée de masque de sélection" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Sélection/désélection d'éléments" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Masque d'attribut à utiliser par défaut :" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Supprimer" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modèle..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Couleurs de type de fichiers (tri par glisser/déposer)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Attributs de catégorie :" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Couleur de catégorie :" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Masque de catégorie :" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Nom de catégorie :" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Polices" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Ajouter un raccourci-clavier" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copier" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Supprimer" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Efface le raccourci-clavier" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Éditer raccourci-clavier" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Catégorie suivante" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Faire apparaître le menu relié au fichier" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Catégorie précédente" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Restaurer la valeur par défaut de DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Enregistrer maintenant" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Tri par commande" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Tri par raccourcis (groupé)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Tri par raccourcis (une par ligne)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Filtres" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Catégories :" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Commandes :" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fichiers des raccourcis clavier :" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Ordre de tri :" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Catégories" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Commande" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Ordre de tri" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Commande" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Raccourcis clavier" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Description" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Raccourci clavier" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Paramètres" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Module" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pour les chemins suivants et leurs sous-dossiers :" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Montrer les icônes pour les actions dans les menus" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Afficher les icônes sur les boutons" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Afficher les icônes \"overlay\", par exemple pour les liens" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Afficher les fichiers cachés de manière ombragée (plus lent)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Désactiver les icônes spéciales" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " &Taille des icônes " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Thème d'icône" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Afficher les icônes" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Montrer les icônes à gauche des noms de fichier" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Panneau des lecteurs:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Panneau des fichiers:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Toutes" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Toutes les associations existantes + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Pas d'icônes" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Seulement les icônes standard" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Ajouter les noms sélectionnés" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Ajouter les noms sélectionnés avec le chemin &complet" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorer (ne pas montrer) les fichiers et dossiers suivant :" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Enregistrer dans :" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Les flèches gauche et droite changent de dossier (déplacement comme Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Frappe" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+Lettres :" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Lettres :" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "Lettres :" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Boutons plats" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Interface simple" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Afficher l'espace disponible sur l'étiquette des volumes/disques" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Afficher la fenêtre du journal" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Afficher les opérations dans les panneaux en arrière-plan" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Afficher la barre de progression dans le menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Afficher la ligne de commande" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Afficher le dossier courant" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Afficher les boutons des volumes/disques" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Afficher l'étiquette avec l'espace libre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Afficher les boutons de lecteur" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Afficher les boutons des touches de &fonction (F3 à F10)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Afficher le menu principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Afficher la barre d'outils" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Afficher l'étiquette d'espace libre restant" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Afficher la barre de statut" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Afficher la ligne de titre dans les onglets" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Afficher les &onglets de dossiers" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Afficher la fenêtre de terminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Afficher deux barres de boutons avec les volumes/disques (largeur fixe, au dessus de la fenêtre des fichiers)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Affiche la barre de boutons verticale" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Apparence de l'écran" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Voir le contenu du fichier journal" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Inclure la date dans le nom du fichier journal" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Compresser/Décompresser" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Ligne de commande d'exécution externe" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Copie/Déplacement de fichier - Création de liens durs/symboliques" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Supprimer" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Créations/Suppressions des dossiers" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Journaliser les erreurs" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Créer un fichier journal :" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Nombre maximum de fichiers journal" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Journaliser les messages d'information" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Démarrer/Eteindre" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Journaliser les opérations &réussies" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "\"Plugin\" de système de fichier" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Emplacement du fichier journal" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Journalisation des opérations" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Statut de l'opération" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Effacer les vignettes pour les fichiers qui n'existent plus" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Afficher le contenu du fichier de configuration" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgid "Create new with the encoding:" msgstr "Créer de nouveaux avec le codage :" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Toujours aller à la racine du lecteur lorsqu'on change de lecteur" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Afficher le répertoire actuel dans la barre de titre de la fenêtre principale" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Afficher l'écran de démarrage" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Montrer les messages d'avertissement (seulement le bouton \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Enregistrer les vignettes en cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Vignettes" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Commentaire de fichier (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Concernant les importation/exportation avec TC :" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "Codage par défaut de texte sur un octet :" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "Encodage par défaut :" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Fichier de configuration :" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Exécutable de TC :" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Chemin de sortie de la barre d'outils :" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Taille de vignette :" #: tfrmoptionsmouse.cbselectionbymouse.caption msgctxt "TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION" msgid "&Selection by mouse" msgstr "Sélection à la souris" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Le curseur de texte ne suit plus le curseur de la souris" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "En cliquant sur l'icône" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Ouvrir avec" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "TFRMOPTIONSMOUSE.GBSCROLLING.CAPTION" msgid "Scrolling" msgstr "Défilement" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Sélection" #: tfrmoptionsmouse.lblmousemode.caption msgctxt "TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION" msgid "&Mode:" msgstr "Mode :" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Double clic" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION" msgid "&Line by line" msgstr "Ligne par ligne" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION" msgid "Line by line &with cursor movement" msgstr "Ligne par ligne avec les mouvements du curseur" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION" msgid "&Page by page" msgstr "Page par page" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Simple clic (ouvre les fichiers et dossiers)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Simple clic (ouvre les dossiers, le double-clic ouvre les fichiers)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Voir le contenu du fichier journal" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Dossier séparé à chaque jour" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Enregistrer le nom complet des fichiers" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Afficher la barre de menu principal" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Renommer le fichier journal" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Remplacer un caractère invalide de nom de fichier par" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Ajouter au même fichier journal" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Pour chaque configuration" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Quitter avec une configuration modifiée" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Configuration au lancement" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Configurer" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Activer" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Supprimer" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Ajuster" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Description" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fichier" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Les plugins Search permettent d'utiliser des algorithmes de recherche alternatifs ou des outils externes (comme \"localiser\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom du fichier" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Appliquer le paramétrage actuel à tous les \"plugins\" configurés" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Lors de l'ajout d'un nouveau plugin, aller automatiquement dans la fenêtre d'ajustement" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Configuration :" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Fichier de bibliothèque Lua à utiliser:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Le chemin doit être relatif à:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Style de nom de fichier du plugin lors de l'ajout d'un nouveau plugin :" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Les \"plugins\" de compresseurs sont utilisés pour travailler avec les archives compressées" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fichier" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Les \"plugins\" de contenu permettent d'afficher la liste des métadonnées des fichiers comme les tags mp3 ou les attributs des images. Ils permettent aussi d'utiliser ces métadonnées dans les recherches ou l'outil de renommage en lots." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fichier" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Les \"plugins\" de système de fichiers permettent d'accéder à des systèmes de fichiers qui ne sont pas pris en charge par le système d'exploitation ou sur des périphériques externes comme les Palm et PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fichier" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Les \"plugins\" de visualisation permettent d'afficher différents formats de fichiers comme les images, les tableurs, les bases de données, etc, dans une visionneuse intégrée. (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actif" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fichier" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Commence par (le nom doit commencer par les caractères tapés)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Se &termine par (les derniers caractères avant le . de l'extension doivent correspondre)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Options" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Correspondance exacte de nom" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Sensible à la casse" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Rechercher tous ces éléments" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Conserver le nom donné à l'onglet lorsqu'on le déverrouille" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activer le panneau cible lors d'un clic sur un de ses onglets" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Montrer les entêtes des onglets même s'il n'y a qu'un &seul onglet" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Fermer les onglets doublons lorsqu'on quitte l'application" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Confirmation pour la fermeture de tous les onglets" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Confirmer la fermeture des onglets verrouillés" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Limiter la légende de l'onglet à" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Afficher les onglets verrouillés avec un astérisque *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Disposer les &onglets sur plusieurs lignes" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&FlècheHaut ouvre un nouvel onglet à l'arrière-plan" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Ouvrir les nouveaux onglets à côté de l'onglet courant" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Réutiliser les onglets existants quand c'est possible" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Afficher le bouton de fermeture des onglets" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Toujours afficher la lettre du lecteur dans l'onglet" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Titre des onglets de dossiers" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caractères" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Action à faire si on double clique sur un onglet :" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Position des onglets" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Aucun" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Non" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Gauche" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Droite" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Aller à la configuration des groupes d'onglets favoris après avoir resauvegardé" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Aller à la configuration des groupes d'onglets favoris après en avoir sauvegardé un nouveau" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Activer les options supplémentaires des onglets favoris (choix du panneau cible lors du rappel, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Paramètres supplémentaires par défaut lors de la sauvegarde de nouveaux groupes d'onglets favoris :" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Entêtes supplémentaires d'onglets de dossiers" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Lorsqu'on restaure un onglet, conserver les onglets existants :" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Les onglets enregistrés de gauche seront rechargés :" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Les onglets enregistrés de droite seront rechargés :" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conserver l'historique des dossiers avec les groupes d'onglets favoris :" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Position par défaut lors de l'enregistrement d'un nouveau groupe d'onglets favoris :" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "L'expression {command} devrait normalement être présente ici pour refléter la commande à exécuter dans le terminal" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "L'expression {command} devrait normalement être présente ici pour refléter la commande à exécuter dans le terminal" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Commande pour simplement exécuter le terminal :" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Commande pour exécuter une commande dans le terminal et le fermer ensuite :" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Commande pour exécuter une commande dans le terminal et le laisser ouvert ensuite :" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Commande :" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Paramètres :" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Commande :" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Paramètres :" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Commande :" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Paramètres :" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "&Dupliquer le bouton" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Supprimer" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Éditer raccourci clavier" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insérer un nouveau bouton" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Choisir" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Autre..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Retirer raccourci-clavier" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Suggestion" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Demander à DC de suggérer l'infobulle en fonction du type de bouton, de la commande et des paramètres" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Bo&utons simples" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Signaler les erreurs avec les commandes" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Afficher les légendes" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Entrer les paramètres de commande, un par ligne. Appuyer sur F1 pour obtenir de l'aide sur les paramètres." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Apparence" #: tfrmoptionstoolbarbase.lblbarsize.caption msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "&Taille de la barre" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Commande :" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paramètres :" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Aide" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Raccourci-clavier" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Icône :" #: tfrmoptionstoolbarbase.lbliconsize.caption msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "T&aille de l'icône :" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Commande :" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paramètres :" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Chemin de démarrage :" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Type" #: tfrmoptionstoolbarbase.lbltooltip.caption msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Infobulle :" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Ajouter une barre d'outil avec TOUTES les commandes internes" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pour une commande externe" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pour une commande interne" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pour un séparateur" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pour un sous-menu" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Archivage..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exporter..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barre d'outils courante..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outils (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier TC de barre d'outils (.BAR) (conserve les existants)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier TC de barre d'outils (.BAR) (remplace les existants)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conserve les existants)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplace les existants)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Barre d'outils principale..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Sauvegarder une archive de la barre d'outils" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outils (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier TC de barre d'outils (.BAR) (conserve les existants)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier TC de barre d'outils (.BAR) (remplace les existants)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conserve les existants)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplace les existants)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restaurer un backup de barre d'outils" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplacer la barre d'outils principale" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "d'un fichier de barre d'outils (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplacer la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "d'un fichier TC de barre d'outils (.BAR)" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplacer la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "de \"wincmd.ini\" de TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils courante" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplacer la barre d'outils principale" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Rechercher et remplacer..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "dans tout ce qu'il y a plus haut..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "dans toutes les commandes" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "dans toutes les icônes" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "dans tous les paramètres" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "dans tous les chemins de démarrage" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Séparateur" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Espace" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Type de bouton" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Appliquer les paramètres aux noms de fichiers et chemins configurés" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Commandes" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Icônes" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Chemins de démarrage" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Chemins" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Faire cela pour les fichiers et les chemins :" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Le chemin doit être relatif à :" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Manière de définir les chemins lors des ajouts d'icônes, de commandes et de chemins :" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Garder la fenêtre de terminal ouverte après avoir exécuté un programme" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Exécuter dans un terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Utiliser un programme externe" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Paramètres supplémentaires" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Chemin du programme à exécuter" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copier" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Supprimer" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modèle..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Renommer" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Autres..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Configuration de l'infobulle pour le type de fichier sélectionné :" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Options générales sur les infobulles :" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Afficher les infobulles dans les panneaux de fichiers" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Indice de catégorie :" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Masque de catégorie :" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Délai de masquage des infobulles:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Mode d'affichage des infobulles:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Types de fichiers :" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Annuler les modifications" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exporter..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Trier les types de fichiers d'info-bulle" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Lors d'un double-clic sur la barre au-dessus du panneau de fichiers" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Via le menu et la commande interne" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Un double-clic sélectionne et quitte" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Via le menu et la commande interne" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Lors d'un double-clic sur un onglet (si configuré pour cela)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Lorsqu'on utilise un raccourci-clavier, cela quittera la fenêtre en revenant au choix courant" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Un clic-gauche sélectionne et quitte" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "A utiliser pour l'historique de la ligne de commande" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "A utiliser pour l'historique des dossiers" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "A utiliser pour l'historique des chemins parcourus" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Comportement concernant la sélection :" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Options reliées au menu en arborescence :" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Où utiliser les menus en arborescence :" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*NOTE : Les options sensibilité à la casse et/ou aux accents seront enregistrées puis restaurées individuellement pour chaque contexte, d'une utilisation et d'une session à l'autre." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Avec les dossiers favoris :" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Avec les groupes d'onglets favoris :" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Avec l'historique :" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Afficher et utiliser les raccourcis" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Police" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Options de disposition et de couleur :" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Couleur de fond :" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Couleur du curseur :" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Texte trouvé :" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Texte trouvé sous le curseur :" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Texte normal :" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Texte normal sous le curseur :" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Aperçu du menu en arborescence :" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Texte secondaire :" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Texte secondaire sous le curseur :" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Raccourci :" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Raccourci sous le curseur :" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Texte non sélectionnable :" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Texte non sélectionnable sous le curseur :" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Changez la couleur à gauche et vous disposerez d'un aperçu du résultat à droite." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Options de la visionneuse interne" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Nombre de colonnes en mode \"Book\"" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configurer" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Compresser les fichiers" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Créer des archives séparées, &une par fichier/dossier" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Créer une archive auto-e&xtractible" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Cr&ypter" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Déplacer les fichiers dans l'archive" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archive en plusieurs &volumes" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Placer les fichiers dans une archive TAR avant de compresser" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ajouter les noms de chemins dans l'archive (seulement si récursif)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Nom et emplacement du fichier archive :" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compresser" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Tout extraire et exécuter" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Extraire et exécuter" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propriétés de l'archive" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributs :" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Taux de compression :" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Date :" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Méthode :" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Taille originale :" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fichier :" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Taille de l'archive :" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Programme d'archivage :" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Date/heure :" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Configuration d'impression" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Marges (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "Bas :" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "Gauche :" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "Droite :" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "Haut :" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Fermer le panneau de filtres" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Entrer le texte à chercher ou à utiliser pour filtrer" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensible à la casse" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Dossiers" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fichiers" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Correspondance de début" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Correspondance de fin" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filtres" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Alterner entre la recherche et le filtre" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Plus de règles" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Moins de règles" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Utiliser les \"plugins\" de contenu, combiner avec :" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Champ" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Opérateur" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valeur" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "ET (tout correspond)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "OU (n'importe quelle concordance)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Appli&quer" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Annuler" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Modèle..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Modèle..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Sélectionner les fichiers en doublon" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Laisser au moins un fichier dans chaque groupe non sélectionné:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Supprimer la sélection par nom/extension:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Sélectionner par nom/extension :" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Séparateur" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Compte à partir de" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Résultat :" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "Choisir les répertoires à insérer (plusieurs possibles)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "La fin" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Le début" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Premier à partir de" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Dernier à partir de" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Description de l'intervalle" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Résultat :" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Choisir les caractères à insérer :" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[Premier:Dernier]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Premier,Longueur]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "La fin" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Le début" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "La fin" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "Le début" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Changer les attributs" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archive" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Créé :" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Caché" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Accédé :" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modifié :" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Lecture seule" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Sous-dossiers compris" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Système" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propriétés de l'horodatage" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(les champs grisés signifient des valeurs inchangées)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texte:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(les champs grisés signifient des valeurs inchangées)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octale:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lire" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écrire" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Trier" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Glisser/déposer les éléments pour les trier" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Découper le fichier" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Demander un fichier de signature CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Taille et nombre de parties" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Fractionner le fichier vers le dossier:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Nombre de parties" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Octets" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "Gigaoctets" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "Kilooctets" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "Mégaoctets" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Date révision" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Commit" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Système d'exploitation" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plateforme" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Révision" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Version de Widget" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Créer un lien symbolique" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Utiliser un chemin relatif si possible" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destination vers laquelle le lien va pointer" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom du lien" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Supprimer des deux côtés" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Supprimer à gauche" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Supprimer à droite" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Supprimer la sélection" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Choisir pour copie (direction par défaut)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Choisir pour copie -> (gauche vers droite)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Inverser le sens de la copie" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Choisir pour copie <- (droite vers gauche)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Choisir pour effacement <-> (les deux)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Choisir pour effacement <- (gauche)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Choisir pour effacement -> (droite)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Fermer" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparer" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Modèle..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchroniser" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchroniser les dossiers" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymétrique" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "par contenu" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorer la date" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "seulement les sélections" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Sous-dossiers" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Affiche :" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Taille" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Date" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Date" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Taille" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(dans la fenêtre principale)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparer" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vue de gauche" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vue de droite" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "doublons" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "uniques" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Veuillez cliquer sur \"Comparer\" pour lancer" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchroniser" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmer l'écrasement" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Menu en arborescence" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Choisir le dossier favori :" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "La recherche respecte les majuscules/minuscules (sensible à la casse)" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Replier toutes les branches" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Développer toutes les branches" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "La recherche ignore les accents et ligatures" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "La recherche ignore les majuscules/minuscules (insensible à la casse)" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "La recherche respecte les accents et ligatures" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Ne pas montrer la branche si la chaîne recherchée ne se trouve \"que\" dans le nom de cette branche" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Si la chaîne recherchée se trouve dans le nom de la branche, afficher cette branche même si rien ne correspond à l'intérieur" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Fermer le menu en arborescence" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Configuration du menu en arborescence" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Configuration des couleurs du menu en arborescence" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Ajouter un nouveau" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Changer" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Défaut" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Supprimer" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Ajuster le \"plugin\"" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Détecter le type d'archives par leur contenu" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Peut supprimer des fichiers" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Supporte le cryptage" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Affiche comme des fichiers normaux (cacher l'icône d'archive)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Supporte les opérations d'archivage en mémoire" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Peut modifier une archive existante" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "L'archive peut contenir plusieurs fichiers" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Peut créer de nouvelles archives" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Supporte les boites de dialogue avec les options" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Autorise la recherche de texte dans les archives" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Description :" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Chaine à détecter :" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Extension :" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Marqueurs :" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Nom :" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "\"Plugin\" :" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "\"Plugin\" :" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "A propos de la visionneuse" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Affiche le message \"A propos\"" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Actualise automatiquement" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Change l'encodage" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copie fichier" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copie fichier" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copie vers le presse-papier" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Copie vers le presse-papier" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Efface le fichier" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Efface le fichier" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Quitte" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Recherche" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Recherche le suivant" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Recherche le précédent" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Plein écran" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Va à la ligne..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Va à la ligne" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Centre" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Sui&vant" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Charge le fichier suivant" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Précédent" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Charge le fichier précédent" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Miroir horizontal" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Miroir" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Miroir vertical" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Déplace fichier" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Déplace fichier" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Aperçu" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Imprime..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Configuration d'impression" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recharger" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recharger le fichier courant" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "Tourner de 180 degrés" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Tourner de 180 degrés" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "Tourner de 270 degrés" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Tourner de 270 degrés" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "Tourner de 90 degrés" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Tourner de 90 degrés" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Enregistrer" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Enregistrer sous..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Enregistrer le fichier sous..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Capture d'écran" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Délai de 3 secondes" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Délai de 5 secondes" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Tout sélectionner" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Vue en Binaire" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Vue en mode \"Book\"" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Vue en Décimal" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Vue en Hexadécimal" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Vue en mode Texte" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Vue en mode Texte avec retour à la ligne" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Affiche le curseur" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Code" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Graphiques" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (texte uniquement)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Transparence d'affichage" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Étirer" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Étirer l'image" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Étendre seulement les grandes images" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Annuler" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Annuler" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "Envelopper le texte" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Agrandir" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Agrandir" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Réduire" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Réduire" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Rogner" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Plein écran" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Exporter l'image" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Surbrillance" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Image suivante" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colorer" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Image précédente" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Yeux rouges" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionner" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visionneuse" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Édit&er" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Ellipse" #: tfrmviewer.miencoding.caption # H_02 msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "En&codage" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fichier" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Image" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Crayon" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Rectangle" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Pivoter" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Capture d'écran" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vue" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Démarrer" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Arrêter" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Opérations sur fichiers" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Toujours sur le dessus" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Utiliser le glisser/déposer pour déplacer les opérations entre les files d'attente" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annuler" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annuler" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nouvelle file d'attente" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Montrer dans une fenêtre détachée" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Mettre en premier dans la file d'attente" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Mettre en dernier dans la file d'attente" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "File d'attente" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Plus de file d'attente disponible" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "File d'attente 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "File d'attente 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "File d'attente 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "File d'attente 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "File d'attente 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Montre dans une fenêtre détachée" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Tout mettre en pause" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Suivre les liens" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quand le dossier existe" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Annuler" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Ligne de commande :" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Paramètres :" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Chemin de départ :" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Configurer" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Cr&ypter" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copier d&ate/heure" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Travailler en arrière-plan (connexion séparée)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quand le fichier existe" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;#195€;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Vous devez fournir une autorisation d'administrateur" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "pour copier cet objet:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "pour créer cet objet :" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "pour supprimer cet objet :" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "pour obtenir les attributs de cet objet :" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "pour créer ce lien dur :" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "pour ouvrir cet object :" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "pour renommer cet objet :" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "pour ajuster les attributs de cet objet :" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "pour créer ce lien symbolique :" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Date de capture" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Hauteur" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Largeur" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabricant" #: uexifreader.rsmodel msgid "Camera model" msgstr "Appareil" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientation" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Ce fichier est introuvable et pourrait aider à valider la concaténation des fichiers à la fin:\n" "%s\n" "\n" "Pourriez-vous le rendre disponible et appuyer sur \"OK\" quand vous êtes prêt,\n" "ou \"ANNULER\" pour continuer tout de même sans ce fichier?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<RÉP>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LIEN>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annuler le filtre rapide" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuler l'opération en cours" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Entrer le nom, avec l'extension, pour le texte déposé" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Format du texte à importer" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Brisé :" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Général :" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Manquant :" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Erreur de lecture :" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Succès :" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Entrer la signature et sélectionner l'algorithme" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Vérifier la signature" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total :" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Souhaitez-vous réinitialiser les recherches pour cette nouvelle recherche?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Le presse-papier ne contient aucune information de barre d'outils" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Tous;Panneau actif;Panneau de gauche;Panneau de droite;Opérations sur fichier;Configuration;Réseau;Divers;Port parallèle;Impression;Sélection;Securité;Presse-papier;FTP;Navigation;Aide;Window;Ligne de commande;Outils;Affichage;Utilisateur;Onglets;Tri;Journal" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ordonné de manière classique;Trié alphabétiquement" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Date" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nom" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Taille" #: ulng.rsconfcolalign msgid "Align" msgstr "Aligner" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Légende" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Supprimer" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenu du champ" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Déplacer" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Largeur" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personnaliser la colonne" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Configuration des associations d'extension" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Confirmer la ligne de commande et les paramètres" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copie (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Mode Sombre" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Auto;Activé;Désactivé" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barre d'outils DC importée" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barre d'outils TC importée" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "o" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "Go" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "Ko" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "Mo" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "To" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_TexteDéposé" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_TexteHTMLDéposé" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_TexteRichDéposé" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_TexteSimpleDéposé" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_TexteUnicodeUTF16Déposé" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_TexteUnicodeUTF8Déposé" #: ulng.rsdiffadds msgid " Adds: " msgstr "Adjouté : " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Compare..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Efface: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Les deux fichiers sont identiques !" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Correspondances : " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modifie : " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Encode" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Fins de lignes" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Le texte est identique, mais les options suivantes sont utilisées :" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Le texte est identique, mais les fichiers ne correspondent pas !\n" "Les différences suivantes ont été trouvées :" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Abandonner" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tous" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Ajo&uter" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Renommer automatiquement les fichiers sources" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Renommer automatiquement les fichiers cibles" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annuler" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Comparer par contenu" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Continuer" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Copier &dans" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Copier tout" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Sortir de l'application" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&norer" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignorer tout" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Non" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Aucu&n" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Autre" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Écraser" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "&Tout écraser" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Écraser ceux plus grands" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Écraser ceux plus vieux" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Écraser ceux plus petits" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Renommer" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Reprendre" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Ré-&essayer" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Comme administrateur" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Passer" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Passer pour &tous" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Déverrouiller" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Oui" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copie du(des) fichier(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Déplacement du(des) fichier(s)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pause" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Démarrer" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "File d'attente" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Vitesse %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Vitesse %s/s, temps restant estimé %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Format Rich Text;Format HTML;Format Unicode;Format texte simple" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicateur d'espace-disque libre" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sans étiquette>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sans média>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Éditeur interne de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Aller à la ligne :" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Aller à la ligne" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nom de fichier :" #: ulng.rseditnewopen msgid "Open file" msgstr "Ouvrir le fichier" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Retour en arrière" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Rechercher" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Aller en avant" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Remplacer" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "avec un éditeur externe" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "avec éditeur interne" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Exécuter via l'invite de commande" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Exécuter via le terminal puis le fermer" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Exécuter via le terminal puis le laisser ouvert" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" introuvable dans la ligne %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Aucune extension définie avant la commande \"%s\". Ce sera ignoré." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Gauche;Droite;Actif;Inactif;Les deux;Aucun" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Non;Oui" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exporté_de_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Demande;Ré-écris;Saute" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Demande;Fusionne;Saute" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Demande;Ecrase;Ecrase si plus vieux;Saute" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Demande;N'ajuste plus désormais;Ignore les erreurs" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Tous les fichiers" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Fichiers configuration" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Infobulle DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Dossiers favoris" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Exécutables" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Fichiers .INI" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Fichiers .TAB" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Fichiers de bibliothèque" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Fichiers de Plugin" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Exécutables et librairies" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRE" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Barre d'outils TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Barre d'outils DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Fichiers XML" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Définir un modèle" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s niveaux" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "tout (profondeur illimitée)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "seulement le dossier courant" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Le dossier %s n'existe pas !" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Trouvé : %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Enregistrer le modèle de la recherche" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nom du modèle :" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Analyse effectuée : %d" #: ulng.rsfindscanning # H_02 msgid "Scanning" msgstr "Analyse" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Rechercher les fichiers" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Durée du balayage : " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Commencer à" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Police de la console" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Police de l'éditeur" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Police des boutons de fonction" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Police du journal" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Police principale" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Police du chemin" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Police des résultats de recherche" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Police de la barre d'état" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Police du menu en arborescence" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Police du lecteur de fichiers" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Police pour la visionneuse en mode \"Book\"" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s libre sur %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s libres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Date/heure d'accès" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributs" #: ulng.rsfunccomment msgid "Comment" msgstr "Commentaire" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Taille compressée" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Date/heure de création" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extension" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Groupe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Changer date/heure" #: ulng.rsfunclinkto msgid "Link to" msgstr "Lier à" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Date/heure de modification" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nom" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nom sans l'extension" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propriétaire" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Chemin" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Taille" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Chemin d'origine" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Erreur lors de la création du lien dur (hardlink)." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "aucun;Nom, a-z;Nom, z-a;Ext, a-z;Ext, z-a;Taille 9-0;Taille 0-9;Date 9-0;Date 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Avertissement! Lorsqu'on restaure une liste de dossiers favoris (.hotlist), cela va effacer celle existante pour la remplacer par celle importée.\n" "\n" "Êtes-vous sûr de vouloir continuer?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Fenêtre de copie/déplacement" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Différences" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Fenêtre d'édition du commentaire" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Éditeur" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Rechercher les fichiers" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Renommer par lot" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synchroniser les dossiers" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visionneuse" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Une configuration avec ce nom existe déjà.\n" "Souhaitez-vous l'écraser ?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Êtes-vous sûr de vouloir restaurer les valeurs par défaut ?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Êtes-vous sûr de vouloir effacer la configuration \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Copie de %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Entrez votre nouveau nom" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Vous devez conserver au moins un fichier de raccourcis." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nouveau nom" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Le fichier de configuration \"%s\" a été modifié.\n" "Souhaitez-vous l'enregistrer maintenant ?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Aucun raccourci avec la touche \"Entrée\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Par nom de commande;Par raccourcis-clavier (groupé);Par raccourcis-clavier (un par ligne)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Impossible de trouver la référence au fichier de barre d'outils par défaut" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "o" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Liste des fenêtres de recherche de fichiers" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Désélectionner le masque" #: ulng.rsmarkplus msgid "Select mask" msgstr "Sélectionner le masque" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Masque de saisie :" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Une configuration de colonnes avec ce nom existe déjà" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Pour éditer une autre vue \"colonnes\", vous devez SAUVEGARDER, COPIER ou SUPPRIMER celle qui vous éditez actuellement" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurer les colonnes personnalisées" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Entrez un nom pour la nouvelle colonne personnalisée" #: ulng.rsmenumacosservices msgid "Services" msgstr "Services" #: ulng.rsmenumacosshare msgid "Share..." msgstr "Partager..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actions" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Défaut>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octale" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Créer un raccourci..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Déconnecter des lecteurs réseau..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Éditer" #: ulng.rsmnueject msgid "Eject" msgstr "Éjecter" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Extraire ici..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Connecter un lecteur réseau..." #: ulng.rsmnumount msgid "Mount" msgstr "Monter" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nouveau" #: ulng.rsmnunomedia msgid "No media available" msgstr "Média indisponible" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Ouvrir" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Ouvrir avec" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Autre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Compresser ici..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaurer" #: ulng.rsmnusortby msgid "Sort by" msgstr "Trier par" #: ulng.rsmnuumount msgid "Unmount" msgstr "Démonter" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Voir" #: ulng.rsmsgaccount msgid "Account:" msgstr "Compte :" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Toutes les commandes internes de Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Description : %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Paramètres additionnels pour la ligne de commande du programme d'archivage :" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Souhaitez-vous mettre des guillemets ?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Mauvais CRC32 pour le fichier résultat :\n" "\"%s\"\n" "\n" "Souhaitez-vous conserver le fichier résultat même s'il est corrompu ?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Êtes-vous sûr de vouloir annuler cette opération ?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Vous ne pouvez pas copier/déplacer le fichier \"%s\" sur lui-même !" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Impossible de copier le fichier spécial %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Impossible de supprimer le dossier %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Impossible de remplacer un répertoire \"%s\" avec autre chose qu'un répertoire \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Le changement de dossier vers \"%s\" a échoué !" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Fermer tous les onglets inactifs ?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Cet onglet (%s) est verrouillé ! Forcer sa fermeture ?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Confirmation de paramètre" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Commande non trouvée ! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Êtes-vous certain de vouloir quitter ?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Le fichier %s a changé. Souhaitez-vous copier la version précédente ?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "On ne peut pas copier en retour - voulez-vous conserver le fichier qui a changé?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Copier les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Copier la sélection \"%s\" ?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Créer un nouveau type de fichier \"%s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Entrer l'emplacement et le nom de fichier pour la barre d'outils DC à sauvegarder" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Action personnalisée" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Supprimer le fichier copié partiellement ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Supprimer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Déplacer les %d fichiers/dossiers sélectionnés dans la corbeille ?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Supprimer la sélection \"%s\" ?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Déplacer le fichier/dossier \"%s\" sélectionné dans la corbeille ?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossible de mettre \"%s\" à la corbeille ! Le supprimer définitivement ?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Le volume/disque n'est pas accessible" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Entrez le nom de l'action personnalisée" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Indiquez l'extension du fichier :" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Donnez le nom :" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Entrez un nom pour le nouveau type de fichier à créer avec l'extension \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Erreur CRC dans l'archive" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Les données sont erronées" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Impossible de se connecter au serveur : \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Impossible de copier le fichier %s vers %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Impossible de déplacer le dossier %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Impossible de déplacer le fichier %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Il existe déjà un dossier nommé \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "La date %s n'est pas supportée" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Le dossier %s existe déjà !" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Fonction interrompue par l'utilisateur" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Erreur à la fermeture du fichier" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossible de créer le fichier" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Plus aucun fichier dans l'archive" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossible d'ouvrir le fichier existant" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Erreur de lecture du fichier" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Erreur d'écriture du fichier" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Impossible de créer le dossier %s !" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Lien non valide" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Aucun fichier trouvé" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Mémoire insuffisante" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Fonction non supportée !" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Erreur dans la commande du menu contextuel" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Erreur de chargement de la configuration" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Erreur de syntaxe dans l'expression régulière !" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Impossible de renommer le fichier %s en %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Impossible d'enregistrer l'association !" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossible d'enregistrer le fichier" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Impossible de définir les attributs pour \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Impossible de définir la date/heure pour \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Impossible de définir les propriétaire/groupe pour \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Impossible de définir les permissions pour \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Impossible de définir les attributs étendus pour \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Mémoire tampon insuffisante" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Trop de fichiers à archiver" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format d'archive inconnu" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Exécutable: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Valeur de sortie:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Êtes-vous sûr de vouloir supprimer tous les éléments de vos groupes d'onglets favoris ? (annulation impossible !)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Déplacer ici les autres éléments" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Entrez un nom pour ce nouveau groupe d'onglets favoris" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Sauvegarder un nouveau groupe d'onglets favoris" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Nombre de groupes d'onglets favoris exportés avec succès : %d sur %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Paramètre supplémentaire par défaut pour enregistrer l'historique de dossiers pour un nouveau groupe d'onglets favoris :" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Nombre de fichiers importés avec succès : %d sur %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Les onglets hérités ont été importés" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Choisir le(s) fichier(s) .tab à importer (plusieurs possibles !)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Les dernières modifications du groupe d'onglets favoris n'ont pas été sauvegardées. Souhaitez-vous les sauvegarder avant de continuer ?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conservation de l'historique des dossiers avec ce groupe d'onglets favoris :" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nom du sous-menu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Cela va restituer le groupe d'onglets favoris enregistré sous le nom \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Enregistrer les onglets courants sur un groupe d'onglets favoris existant" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Le fichier %s a été modifié, le sauvegarder ?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s octets, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Écraser :" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Le fichier %s existe déjà, l'écraser ?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Avec fichier :" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Fichier introuvable : \"%s\"." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Opérations sur les fichiers en cours" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Certaines opérations sur les fichiers ne sont pas encore terminées. Fermer Double Commander peut entraîner la perte de données." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Le nom cible (%d) est trop long de %d caractères!\n" "%s\n" "La plupart des applications ne seront pas capables d'accéder au dossier/fichier avec un nom aussi long !" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Le fichier %s est en lecture seule. Le supprimer quand même ?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Êtes-vous sûr de voulais recharger le fichier courant et perdre les modifications ?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La taille du fichier \"%s\" est supérieure à l'espace disponible sur le système de fichier de destination !" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Le dossier %s existe déjà, copier à l'intérieur'?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Suivre le lien symbolique \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Sélectionnez le format du texte à importer" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Ajouter les %d dossiers sélectionnés" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Ajouter le dossier sélectionné : " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Ajouter le dossier courant : " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Commande" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_something" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuration des dossiers favoris" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Êtes-vous sûr de supprimer tous les dossiers de votre liste de dossiers favoris? (annulation impossible !)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Cela exécutera la commande suivante :" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ceci est le dossier favori appelé " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Cela changerait le chemin du panneau actif pour le suivant :" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Et le panneau inactif changerait de chemin pour le suivant :" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Erreur d'archivage des éléments..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Erreur d'exportation des éléments..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exporter tout !" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exporte la liste des dossiers favoris - Sélectionnez les entrées à exporter" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exporte la sélection" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importe tout !" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importe liste des dossiers favoris - Sélectionnez les entrées à importer" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importe la sélection" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Chemin :" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Indiquez le fichier \".hotlist\" à importer" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nom du favori :" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Nombre de nouveaux éléments : %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Rien à exporter" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Chemin du dossier" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ajouter à nouveau le dossier sélectionné : " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ajouter à nouveau le dossier courant : " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Sélectionner le fichier de dossiers favoris" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Commande" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fin de sous-menu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Nom de Me&nu :" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Nom :" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(séparateur)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nom de sous-menu" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Dossier cible" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Déterminer si vous souhaitez que le panneau actif soit trié dans un ordre spécifié après avoir changé de dossier" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Déterminer si vous souhaitez que le panneau inactif soit trié dans un ordre spécifié après avoir changé de dossier" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Fonctions pour sélectionner le chemin approprié : relatif, absolu, dossiers spéciaux de Windows, etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Eléments sauvegardés : %d\n" "\n" "Fichier de backup : %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Nombre d''éléments exportés : " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Souhaitez-vous supprimer tous les éléments du sous-menu [%s]?\n" "Répondre NON va seulement supprimer les délimiteurs de menu mais conservera tous les éléments à l'intérieur" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Sélectionnez l'emplacement et le nom du fichier de liste des dossiers favoris" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longueur du fichier résultant incorrecte : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Veuillez insérer le support suivant.\n" "\n" "Cela permettra d'écrire ce fichier :\n" "\"%s\"\n" "\n" "Nombre d'octets restant à écrire : %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Erreur dans la ligne de commande" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nom de fichier incorrect" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format incorrect du fichier de configuration" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Nombre hexadécimal invalide : \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Chemin invalide" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Le chemin \"%s\" contient des caractères interdits" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ce n'est pas un \"plugin\" valide !" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ce \"plugin\" est fait pour Double Commander pour %s.%sIl ne peut pas fonctionner avec Double Commander pour %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Mise entre guillemets invalide" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Sélection invalide" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Chargement de la liste des fichiers..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Localisez le fichier de configuration de TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Localisez le fichier de l'exécutable (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copie du fichier %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Suppression du fichier %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Erreur : " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Lancement externe" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Résultat externe" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Extraction du fichier %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Information: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Créer le lien %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Créer le dossier %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Déplacer le fichier %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Archiver dans le fichier %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Fermeture de l'application" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Démarrage de l'application" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Supprimer le dossier %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Effectué : " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Créer le lien symbolique %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Test de l'intégrité du fichier %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Supprimer de manière sécurisée le fichier %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Supprimer de manière sécurisée le dossier %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mot de passe principal" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Veuillez entrer le mot de passe principal :" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nouveau fichier" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Le volume suivant de l'archive va être extrait" #: ulng.rsmsgnofiles msgid "No files" msgstr "Aucun fichier" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Aucun fichier sélectionné." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espace insuffisant sur le volume cible. Continuer ?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espace insuffisant sur le volume cible. Réessayer ?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Impossible de supprimer le fichier %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Pas encore implémenté." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "L'objet n'existe pas !" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "L'action ne peut pas être terminée car le fichier est ouvert dans un autre programme :" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Aperçu ci-dessous. Vous pouvez bouger le curseur, sélectionner des fichiers et voir immédiatement l'effet du paramétrage." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Mot de passe :" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Les mots de passe sont différents !" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Veuillez entrer le mot de passe :" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Mot de passe (Firewall) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Veuillez entrer à nouveau le mot de passe pour vérification :" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Supprimer %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Écraser la configuration \"%s\" existante ?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Êtes-vous sûr de vouloir effacer la configuration \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problème d'exécution de la commande (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Nom de fichier pour le texte déposé :" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Fichier indisponible, veuillez le libérer. Ré-essayer ?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Entrez un nom pour ce groupe d'onglets favoris" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Entrez un nom pour ce nouveau menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Renommer/Déplacer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Renommer/Déplacer la sélection \"%s\" ?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Souhaitez-vous remplacer ce texte ?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Veuillez redémarrer Double Commander pour activer les changements." #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ERREUR: Problème de chargement du fichier de bibliothèque Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Choisissez le type de fichier auquel ajouter une extension \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Sélectionnés : %s de %s, fichiers : %d sur %d, dossiers : %d sur %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Choisissez le fichier exécutable pour" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Veuillez choisir uniquement des fichiers de signature !" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Veuillez choisir l'emplacement du volume suivant" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Définir le nom du vomume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Dossier spéciaux" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Ajouter le dossier du panneau actif" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Ajouter le dossier du panneau inactif" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Parcourir et utiliser le dossier sélectionné" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Utiliser variable d'environnement" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Aller aux chemins spéciaux de Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Aller aux variables d'environnement" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Aller aux dossiers spéciaux de Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Aller aux dossiers spéciaux de Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Rendre le chemin relatif par rapport à un dossier favori" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Rendre le chemin absolu" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Rendre le chemin en relatif par rapport à un dossier spécial de DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Rendre le chemin en relatif par rapport à une variable d'environnement" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Rendre le chemin en relatif par rapport à un dossier spécial de Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Rendre le chemin en relatif par rapport à un autre dossier spécial de Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Utiliser un chemin spécial de Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Utiliser un chemin de dossier favori" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Utiliser un autre dossier spécial de Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Utiliser un dossier spécial de Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Cet onglet (%s) est verrouillé ! Souhaitez-vous ouvrir ce dossier dans un autre onglet ?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renommer l'onglet" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nom du nouvel onglet :" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Chemin du dossier cible :" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Erreur! Impossible de trouver le fichier de configuration de TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" ""Erreur! Impossible de trouver le fichier de configuration exécutable de TC :\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Erreur! TC est toujours en cours d'exécution mais devrait être fermé pour cette opération.\n" "Fermez-le puis appuyez sur OK ou ANNULER pour abandonner." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Erreur! Impossible de trouver le dossier de sortie pour la barre d'outils TC souhaitée :\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Entrez l'emplacement et le nom de fichier pour la barre d'outils TC à enregistrer" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Fenêtre du terminal intégré désactivée. Souhaitez-vous l'activer ?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "AVERTISSEMENT: la fin d'un processus peut entraîner des résultats indésirables, notamment une perte de données et une instabilité du système. Le processus n'aura pas la possibilité d'enregistrer son état ou ses données avant qu'il ne soit terminé. Êtes-vous sûr de vouloir mettre fin au processus ?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Souhaitez-vous tester les archives sélectionnées ?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" est maintenant dans le presse-papier" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "L'extension du fichier sélectionné ne figure pas parmi celles reconnues" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Sélectionnez le fichier \".toolbar\" à importer" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Sélectionnez le fichier \".BAR\" à importer" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Entrez l'emplacement et le nom de fichier pour la barre d'outils à charger" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Enregistré !\n" "Nom du fichier de barre d'outils : %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Trop de fichiers sélectionnés." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Indéterminé" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ERREUR : Comportement inattendu dans le menu en arborescence !" #: ulng.rsmsgurl msgid "URL:" msgstr "URL :" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SANS EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<SANS NOM>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nom d'utilisateur :" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nom d'utilisateur (Firewall) :" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VÉRIFICATION:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Souhaitez-vous vérifier les sommes de contrôle sélectionnées?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Le fichier de destination est corrompu, la somme de contrôle ne correspond pas !" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Nom de volume :" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Veuillez entrer la taille du volume :" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Souhaitez-vous configurer l'emplacement du fichier de bibliothèque Lua?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Lancer la suppression sécurisée pour les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Lancer la suppression sécurisée pour la sélection \"%s\" ?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "avec" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Mot de passe erroné !\n" "Veuillez essayer à nouveau !" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Renommage automatique sous forme de \"nom (1).ext\", \"nom (2).ext\", etc.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Compteur" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Date" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Nom de configuration" #: ulng.rsmulrendefinevariablename # HL_01 msgid "Define variable name" msgstr "Définir nom de variable" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Définir valeur de variable" #: ulng.rsmulrenenternameforvar # HL_01 msgid "Enter variable name" msgstr "Entrez nom de variable" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Entrez valeur de la variable \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Ignorer, sauvegarder simplement comme [le dernier];Me demander pour confirmer la sauvegarde;Sauvegarder automatiquement" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extension" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nom" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Pas de changement;MAJUSCULE;minuscule;Premier caractère majuscule;Premier Caractère De Chaque Mot Majuscule;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[La dernière utilisée]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Derniers masques;Dernière configuration;Nouveaux masques" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Renommer par lot" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Caractère à la position x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caractère de la position x à y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Date complète" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Heure complète" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Compteur" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Jour" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Jour (2 digits)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Jour de la semaine (court, ex : \"lun\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Jour de la semaine (long, ex : \"lundi\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extension" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Nom du fichier entier avec chemin et extension" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Nom complet du fichier, caractère de la position x à y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Heure" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Heure (2 chiffres)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minute" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minute (2 chiffres)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mois" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mois (2 chiffres)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nom du mois (court, ex : \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nom du mois (long, ex : \"janvier\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nom" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Dossier(s) parent(s)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Seconde" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Seconde (2 chiffres)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Variable à la volée" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Année (2 chiffres)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Année (4 chiffres)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Enregister la configuration sous" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "La configuration existe déjà. L'écraser ?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Entrer le nom de la nouvelle configuration" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "La configuration «%s» a été modifiée.\n" "L'enregistrer maintenant ?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Trier les configurations" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Heure" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Attention, il y a des doubons !" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Le fichier contient un mauvais nombre de lignes : %d (devrait être %d !)" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Conserver;Réinitialiser;Demander" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Pas de commande interne équivalente" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Désolé, aucune fenêtre de recherche de fichiers..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Désolé, il n'y a pas d'autres fenêtres de recherche à fermer..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Développement" #: ulng.rsopenwitheducation msgid "Education" msgstr "Éducation" #: ulng.rsopenwithgames msgid "Games" msgstr "Jeu" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Graphiques" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "Applications (*.app)|*.app|Tous les fichiers (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimédia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Réseau" #: ulng.rsopenwithoffice msgid "Office" msgstr "Bureau" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Autres" #: ulng.rsopenwithscience msgid "Science" msgstr "Science" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Paramètres" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Système" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Accessoires" #: ulng.rsoperaborted msgid "Aborted" msgstr "Annulé" #: ulng.rsopercalculatingchecksum # HL_02 msgid "Calculating checksum" msgstr "Calcul de signature" #: ulng.rsopercalculatingchecksumin #, object-pascal-format # HL_02 msgid "Calculating checksum in \"%s\"" msgstr "Calcul de signature en \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format # HL_02 msgid "Calculating checksum of \"%s\"" msgstr "Calcul de signature de \"%s\"" #: ulng.rsopercalculatingstatictics # HL_02 msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calcul" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format # HL_02 msgid "Calculating \"%s\"" msgstr "Calcul \"%s\"" #: ulng.rsopercombining # HL_02 msgid "Joining" msgstr "Concaténation" #: ulng.rsopercombiningfromto #, object-pascal-format # HL_02 msgid "Joining files in \"%s\" to \"%s\"" msgstr "Concaténation de fichiers dans \"%s\" vers \"%s\"" #: ulng.rsopercopying # HL_02 msgid "Copying" msgstr "Copie" #: ulng.rsopercopyingfromto #, object-pascal-format # HL_02 msgid "Copying from \"%s\" to \"%s\"" msgstr "Copie de \"%s\" vers \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format # HL_02 msgid "Copying \"%s\" to \"%s\"" msgstr "Copie \"%s\" vers \"%s\"" #: ulng.rsopercreatingdirectory # H_02 msgid "Creating directory" msgstr "Création de dossier" #: ulng.rsopercreatingsomedirectory #, object-pascal-format # H_02 msgid "Creating directory \"%s\"" msgstr "Création du dossier \"%s\"" #: ulng.rsoperdeleting # H_02 msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Suppression" #: ulng.rsoperdeletingin #, object-pascal-format # H_02 msgid "Deleting in \"%s\"" msgstr "Suppression dans \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format # H_02 msgid "Deleting \"%s\"" msgstr "Suppression \"%s\"" #: ulng.rsoperexecuting # H_02 msgid "Executing" msgstr "Exécution" #: ulng.rsoperexecutingsomething #, object-pascal-format # H_02 msgid "Executing \"%s\"" msgstr "Exécution de \"%s\"" #: ulng.rsoperextracting # H_02 msgid "Extracting" msgstr "Décompression" #: ulng.rsoperextractingfromto #, object-pascal-format # H_02 msgid "Extracting from \"%s\" to \"%s\"" msgstr "Décompression de \"%s\" vers \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminé" #: ulng.rsoperlisting # H_02 msgid "Listing" msgstr "Liste" #: ulng.rsoperlistingin #, object-pascal-format # H_02 msgid "Listing \"%s\"" msgstr "Liste \"%s\"" #: ulng.rsopermoving # H_02 msgid "Moving" msgstr "Déplacement" #: ulng.rsopermovingfromto #, object-pascal-format # H_02 msgid "Moving from \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format # H_02 msgid "Moving \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Non démarré" #: ulng.rsoperpacking # H_02 msgid "Packing" msgstr "Compression" #: ulng.rsoperpackingfromto #, object-pascal-format # H_02 msgid "Packing from \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format # H_02 msgid "Packing \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "En pause" #: ulng.rsoperpausing # H_02 msgid "Pausing" msgstr "Mettre en pause" #: ulng.rsoperrunning # H_02 msgid "Running" msgstr "En cours" #: ulng.rsopersettingproperty # H_02 msgid "Setting property" msgstr "Paramétrage d'une propriété" #: ulng.rsopersettingpropertyin #, object-pascal-format # H_02 msgid "Setting property in \"%s\"" msgstr "Paramétrage d'une propriété dans \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format # H_02 msgid "Setting property of \"%s\"" msgstr "Paramétrage d'une propriété de \"%s\"" #: ulng.rsopersplitting # H_02 msgid "Splitting" msgstr "Fractionnement" #: ulng.rsopersplittingfromto #, object-pascal-format # H_02 msgid "Splitting \"%s\" to \"%s\"" msgstr "Fractionnement de \"%s\" vers \"%s\"" #: ulng.rsoperstarting # H_02 msgid "Starting" msgstr "Démarrage" #: ulng.rsoperstopped msgid "Stopped" msgstr "Arrêté" #: ulng.rsoperstopping # H_02 msgid "Stopping" msgstr "Arrêt en cours" #: ulng.rsopertesting # H_02 msgid "Testing" msgstr "Test" #: ulng.rsopertestingin #, object-pascal-format # H_02 msgid "Testing in \"%s\"" msgstr "Test dans \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format # H_02 msgid "Testing \"%s\"" msgstr "Test \"%s\"" #: ulng.rsoperverifyingchecksum # H_02 msgid "Verifying checksum" msgstr "Vérification de la signature" #: ulng.rsoperverifyingchecksumin #, object-pascal-format # H_02 msgid "Verifying checksum in \"%s\"" msgstr "Vérification de la signature dans \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format # H_02 msgid "Verifying checksum of \"%s\"" msgstr "Vérification de la signature de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "En attente de l'accès au fichier source..." #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "En attente de la réponse utilisateur..." #: ulng.rsoperwiping # H_02 msgid "Wiping" msgstr "Suppression sécurisée" #: ulng.rsoperwipingin #, object-pascal-format # H_02 msgid "Wiping in \"%s\"" msgstr "Suppression sécurisée dans \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format # H_02 msgid "Wiping \"%s\"" msgstr "Suppression sécurisée \"%s\"" #: ulng.rsoperworking # H_02 msgid "Working" msgstr "Dossier de travail" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Ajout au début;Ajout à la fin;Ajout astucieux" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Ajout d'un nouveau type de fichier d'infobulle" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Pour changer la configuration des outils d'archivage, appuyez \"Appliquer\" ou \"Supprimer\"" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Dépendant du mode, commande supplémentaire" #: ulng.rsoptarchiveraddonlynotempty # H_01 msgid "Add if it is non-empty" msgstr "Ajoute si non vide" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Nom de l'archive (nom long)" #: ulng.rsoptarchiverarchiver # H_01 msgid "Select archiver executable" msgstr "Choisir l'exécutable de l'outil d'archivage" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Nom de l'archive (nom court)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Changer l'encodage" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Êtes-vous sûr de vouloir supprimer : \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Configuration d'outil archivage exportée" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "code de retour" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Exporter configuration d'outil d'archivage" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportation de %d éléments vers le fichier \"%s\" complétée." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Choisissez ce que vous souhaitez exporter" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Liste de fichiers (noms longs)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Liste de fichiers (noms courts)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importer configuration d'outil d'archivage" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importation de %d éléments du fichier \"%s\" complétée." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Choisissez le fichier pour importer des configurations d'outils d'archivage" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Choisissez ce que vous souhaitez importer" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Utiliser le nom seulement, sans le chemin" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Utiliser le chemin seulement, sans le nom" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Exécutable d'archivage (nom long)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Programme d'archivage (nom court)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Mettre tous les noms entre guillemets" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Mettre entre guillemets les noms avec des espaces" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Nom du fichier à traiter" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Dossier cible" #: ulng.rsoptarchiveruseansi # H_01 msgid "Use ANSI encoding" msgstr "Utiliser l'encodage ANSI" #: ulng.rsoptarchiveruseutf8 # H_01 msgid "Use UTF8 encoding" msgstr "Utiliser l'encodage UTF8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Entrez le chemin et nom de fichier où enregistrer la configuration de l'outil d'archivage" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Type d'archive :" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associer le \"plugin\" %s avec :" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Premier;Dernier;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Ordre classique;Ordre alphabétique (avec \"Langue\" toujours en premier)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Tout développé;Tout replié" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Panneaux actif et inactif respectivement à gauche et à droite (classique);Panneau de gauche à gauche, celui de droite à droite" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Entrer une extension" #: ulng.rsoptfavoritetabswheretoaddinlist # H_01 msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Ajoute au début;Ajoute à la fin;Ordre alphabétique" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "fenêtre séparée;fenêtre séparée réduite;panneau d'opération" #: ulng.rsoptfilesizefloat msgid "float" msgstr "dynamique" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Le raccourci %s de la commande cm_Delete va être enregistré, il pourra ensuite être utilisé pour inverser ce paramétrage." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format # H_01 msgid "Add hotkey for %s" msgstr "Ajouter un raccourci-clavier pour %s" #: ulng.rsopthotkeysaddshortcutbutton # H_01 msgid "Add shortcut" msgstr "Ajouter un raccourci" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossible de définir un raccourci" #: ulng.rsopthotkeyschangeshortcut # H_01 msgid "Change shortcut" msgstr "Changer le raccourci" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Commande" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format # HL_04 msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Le raccourci %s de la commande cm_Delete dispose d'un paramètre qui peut outrepasser ce paramétrage. Souhaitez-vous le changer pour utiliser le paramètre global ?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format # HL_04 msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Le raccourci %s de la commande cm_Delete a besoin d'avoir un paramètre modifié pour correspondre au raccourci %s. Souhaitez-vous le changer ?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Description" #: ulng.rsopthotkeysedithotkey #, object-pascal-format # H_01 msgid "Edit hotkey for %s" msgstr "Éditer raccourci-clavier pour %s" #: ulng.rsopthotkeysfixparameter # H_01 msgid "Fix parameter" msgstr "Paramètre fixe" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Raccourci clavier" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Raccourcis clavier" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<aucun>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paramètres" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Définir un raccourci pour supprimer un fichier" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pour que cette option fonctionne avec le raccourci %s, ce raccourci %s doit être assigné à cm_Delete but mais il est déjà assigné à %s. Souhaitez-vous changer cela ?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Le raccourci %s de la commande cm_Delete est une séquence de raccourci pour laquelle l'action inverse avec \"SHIFT\" ne peut pas être assignée. Ce paramétrage peut donc ne pas fonctionner." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Raccourci utilisé" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Le raccourci %s est déjà utilisé." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Modifier en %s ?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "utilisé par %s dans %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "utilisé pour cette commande mais avec des paramètres différents" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Gestion des archives" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Rafraîchissement automatique" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportements" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Résumé" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Couleurs" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Colonnes" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuration" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Colonnes personnalisées" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Dossiers favoris" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Dossiers favoris (suite)" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Glisser/déposer" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Bouton de lecteurs" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Onglets favoris" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Extension \"extra\"" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associations de fichiers" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nouveau" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Opérations sur fichiers" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panneaux des fichiers" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Recherche de fichiers" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Affichage des fichiers" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Affichage des fichiers (suite)" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Types de fichiers" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Onglets" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Options extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Polices" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Surbrillance" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Raccourcis clavier" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icônes" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Fichiers/dossiers ignorés" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Clavier" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Langue" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposition" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Journal" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Divers" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Souris" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Renommer par lot" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Les options ont changé pour \"%s\"\n" "\n" "Souhaitez-vous enregistrer les modifications ?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Filtres de recherche rapide" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barre d'outils" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Barre d'outils suite" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Barre d'outils verticale" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Outils" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Infobulles" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Menu en arborescence" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Couleur menu en arborescence" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Aucun;Ligne de commande;Recherche rapide;Filtre rapide" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bouton gauche; Bouton droit;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "en premier de la liste de fichiers;après les dossiers (si les dossiers sont triés avant les fichiers);à la position selon le tri;à la fin de la liste de fichiers" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Dynamique personnalisé;Octet personnalisé;Kilooctet personnalisé;Mégaoctet personnalisé;Gigaoctet personnalisé;Téraoctet personnalisé" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Le \"plugin\" %s est déjà enregistré pour les extensions suivantes :" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Désactiver" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Activer" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actif" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Description" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nom de fichier" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Par extension" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Par plugin" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nom" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Le tri des plugins WCX n'est possible que si vous affichez les plugins par extension !" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Enregistré pour" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Choisir la librairie Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Renommer le type de fichier d'infobulle" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Sensible;Insensible" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Fichiers;Dossiers;Fichiers et Dossiers" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Cacher le panneau de filtre s'il n'est pas actif;conserver ces options pour les prochaines sessions" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "insensible à la casse;selon paramètres régionaux (aAbBcC);Première en majuscule, le reste en minuscule (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "trier par nom et montrer en premier;trier comme les fichiers et montrer en premier;trier comme les fichiers" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Tri alphabétique avec accents;Tri alphabétique avec caractères spéciaux;Tri alphanumérique;Tri avec caractères spéciaux" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Haut;Bas;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Séparateur;Commande interne;Commande externe;Menu" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Pour modifier la configuration des infobulles d'un autre type de fichier, APPLIQUEZ ou SUPPRIMEZ l'édition en cours." #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Nom de catégorie :" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" existe déjà!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Êtes-vous sûr de vouloir supprimer : \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Configuration de type de fichier d'infobulle exportée" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Exporter la configuration de type de fichier d'infobulle" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportation de %d éléments vers le fichier \"%s\" complétée." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Choisissez ce que vous souhaitez exporter" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importer une configuration de type de fichier d'infobulle" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importation de %d éléments du fichier \"%s\" complétée." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Sélectionnez le fichier pour importer les configurations d'info-bulle" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Choisissez ce que vous souhaitez importer" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Entrez l'emplacement et le nom du fichier où enregistrer la configuration de type de fichier d'infobulle" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Nom de type de fichier d'infobulle" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC classique - Copier (x) nom_de_fichier.ext;Windows - nom_de_fichier (x).ext;Autre - nom_de_fichier(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne change pas de position;utilise le même paramétrage que pour les nouveaux fichiers;à la position du tri en cours" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Avec chemin absolu complet;Chemin relatif à %COMMANDER_PATH%;Relatif au chemin suivant" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "contient(exact)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "contient" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(exact)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Champ \"%s\" introuvable !" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!contient(exact)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!contient" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(exact)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Plugin \"%s\" introuvable !" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Unité \"%s\" introuvable pour le champ \"%s\" !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Fichiers : %d, Dossiers : %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Impossible de changer les droits pour \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Impossible de changer le propriétaire pour \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fichier" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dossier" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Types multiples" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "\"Pipe\" nommé" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Périphérique spécial bloc" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Périphérique spécial caractères" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Lien symbolique" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Type inconnu" #: ulng.rssearchresult msgid "Search result" msgstr "Résultat de la recherche" #: ulng.rssearchstatus msgid "SEARCH" msgstr "RECHERCHE" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modèle sans nom>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Une recherche de fichiers avec un plugin DSX est déjà en cours.\n" "Il faut attendre qu'elle soit complétée avant d'en lancer une nouvelle." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Une recherche de fichiers avec un plugin WDX est déjà en cours.\n" "Il faut attendre attendre qu'elle soit complétée avant d'en lancer une nouvelle." #: ulng.rsselectdir msgid "Select a directory" msgstr "Sélectionner un dossier" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Plus récent;Plus ancien;Plus grand;Plus petit;Premier dans le groupe,Dernier du groupe" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Sélectionnez votre fenêtre" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Affiche de l'aide pour %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tous" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Catégorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Colonne" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Commande" #: ulng.rssimpleworderror msgid "Error" msgstr "Erreur" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Échec !" #: ulng.rssimplewordfalse msgid "False" msgstr "Faux" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Nom de fichier" #: ulng.rssimplewordfiles msgid "files" msgstr "fichiers" #: ulng.rssimplewordletter msgid "Letter" msgstr "Lettre" #: ulng.rssimplewordparameter msgid "Param" msgstr "Paramètre" #: ulng.rssimplewordresult msgid "Result" msgstr "Résultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Succès !" #: ulng.rssimplewordtrue msgid "True" msgstr "Vrai" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Variable" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Dossier de travail" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Octets" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigaoctets" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilooctets" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Mégaoctets" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Téraoctets" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fichiers : %d, Dossiers : %d, Taille : %s (%s octets)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossible de créer le dossier cible !" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Format de fichier incorrect !" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossible de scinder le fichier !" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Le nombre de parties est supérieur à 100 ! Continuer ?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatique;1457664B - 3.5\" Haute densité 1.44M;1213952B - 5.25\" Haute densité 1.2M;730112B - 3.5\" Double densité 720K;362496B - 5.25\" Double densité 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Sélectionner un dossier :" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Juste un aperçu" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Autres" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "EU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Texte secondaire" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Plat" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Limité" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Simpliste" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabuleux" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Merveilleux" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Prodigieux" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Choisissez votre dossier dans l'historique" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Choisissez votre groupe d'onglets favoris :" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Choisissez votre commande dans l'historique des commandes" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Choisissez votre action du menu principal" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Choisissez votre action dans la barre d'outils principale" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Choisissez votre dossier dans la liste des dossiers favoris" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Choisissez votre dossier dans la vue historique" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Choisissez votre fichier ou votre dossier" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Erreur à la création du lien symbolique." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texte par défaut :" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texte simple" #: ulng.rstabsactionondoubleclickchoices # HL_01 msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ne fait rien;Ferme l'onglet;Accède aux groupes d'onglets favoris;Menu des onglets" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Jour(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Heure(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minute(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mois" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Seconde(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semaine(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Année(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Renomme le groupe d'onglets favoris" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Renomme le sous-menu" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Différences" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Éditeur" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Erreur d'ouverture de l'outil comparateur" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Erreur de lancement de l'éditeur" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Erreur de lancement du terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Erreur de lancement de la visionneuse" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Système par défaut;1 seconde;2 secondes;3 secondes;5 secondes;10 secondes;30 secondes;1 minute;Ne jamais cacher" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Combiner l'infobulle DC et système, DC en premier (hérité);Combiner l'infobulle DC et système, système en premier;Afficher l'infobulle DC si possible et l'infobulle système sinon;Afficher l'infobulle DC uniquement;Afficher l'infobulle système uniquement" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visionneuse" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Veuillez signaler cette erreur sur le \"bug tracker\" avec une description de ce que vous étiez en train de faire et avec le fichier suivant : %sCliquez %s pour continuer ou %s pour quitter le programme." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Les deux panneaux, de l'actif à l'inactif" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Les deux panneaux, de gauche à droite" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Chemin du panneau" #: ulng.rsvarencloseelement # HL_01 msgid "Enclose each name in brackets or what you want" msgstr "Mettre chaque nom entre crochets ou avec ce que vous souhaitez" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Simplement le nom du fichier, sans extension" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Nom de fichier complet (chemin+nom de fichier)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Aide avec les variables \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Va demander à l'utilisateur d'entrer un paramètre avec une valeur par défaut suggérée" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Dernier dossier du chemin du panneau" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Dernier dossier du chemin du fichier" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Panneau de gauche" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Nom de fichier temporaire de la liste des noms de fichiers" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Nom de fichier temporaire de la liste des noms complets de fichier (chemin+nom de fichier)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Liste de fichiers en UTF-16" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Liste de fichiers en UTF-16 avec BOM, entre guillemets" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Liste de fichiers en UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Liste de fichiers en UTF-8, entre guillemets" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Nom de fichier temporaire de la liste des noms de fichiers avec chemins relatifs" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Seulement extension de fichier" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Seulement nom de fichier" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Autres exemples de ce qui est possible" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Chemin, sans le séparateur de dossier à la fin" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "À partir d'ici jusqu'à la fin de la ligne, l'indicateur de variable en pourcentage est le signe \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Retourne le signe de pourcentage" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "À partir d'ici jusqu'à la fin de la ligne, l'indicateur de variable en pourcentage est de nouveau le signe \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Faites précéder chaque nom avec \"-a\" ou avec ce que vous souhaitez" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Interroge l'utilisateur pour le paramètre;Valeur par défaut proposée]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nom de fichier avec chemin relatif" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Panneau droit" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Chemin complet du second fichier sélectionné dans le panneau de droite" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Montre la commande avant de l'exécuter" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Simplement un message]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Affichera un simple message" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Panneau actif (source)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Panneau inactif (cible)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Les noms de fichiers seront mis entre guillemets à partir d'ici (défaut)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "La commande sera faite dans le terminal qui restera ouvert après" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Les chemins auront un séparateur de dossier à la fin" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Les noms de fichiers ne seront pas mis entre guillemets à partir d'ici" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "La commande sera faite dans le terminal qui sera fermé après" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Les chemins n'auront pas de séparateur de dossier à la fin (défaut)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Réseau" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Corbeille" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visionneuse interne de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Mauvaise qualité" #: ulng.rsviewencoding # H_02 msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Encodage" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Type d'image" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nouvelle Taille" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s introuvable !" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Crayon;Rectangle;Ellipse" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "avec une visionneuse externe" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "avec la visionneuse interne" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Nombre de remplacements : %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Aucun remplacement n'a eu lieu." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Aucune configuration nommée \"%s\"" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.es.po�����������������������������������������������������������0000644�0001750�0000144�00001361701�15104114162�017265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2018-02-04 12:00+0100\n" "Last-Translator: Pepe López <kuidao@yahoo.es>\n" "Language-Team: Español; Castellano <>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Español\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparando... %d%% (ESC para cancelar)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Derecha: Borrar %d archivo(s)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Archivos encontrados: %d (Idénticos: %d, Diferentes: %d, Únicos izquierda: %d, Únicos derecha: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Izquierda a Derecha: Copiar %d archivos, tamaño total: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Derecha a Izquierda: Copiar %d archivos, tamaño total: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Seleccionar plantilla..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Co&mprobar espacio libre" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copiar a&tributos" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiar p&ropietario" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copiar per&misos" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copiar fech&a/hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corre&gir enlaces" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "&Quitar marca de solo lectura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xcluir carpetas vacías" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Seguir en&laces" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espacio" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Ver&ificar la copia" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Qué hacer cuando no se pueden configurar hora, atributos, etc." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usar plantilla de archivo" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Si la carp&eta ya existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Si el archi&vo ya existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Si &no puede asignar propiedades" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sin plantilla>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Cerrar" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiar al portapapeles" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "Acerca de..." #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Hecho" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Página web:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Revisión" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versión" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&Aceptar" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Restablecer" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Seleccionar atributos" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Fichero" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimido" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "Ca&rpeta" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Ci&frado" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Oculto" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Solo &lectura" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Disper&so" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Enlace &simbólico" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "Sis&tema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporal" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributos NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributos generales" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Bits" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Grupo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Otros" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Propietario" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr " Ejecución" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Lectura" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Como te&xto:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Escritura" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calcular suma de verificación..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Abrir la suma de verificación tras completar el trabajo" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&rear suma de verificación por cada archivo" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Guardar archivo(s) de suma de verificación en:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Comprobar suma de verificación..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codificación" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "Aña&dir" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onectar" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "&Borrar" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestor de conexión" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Conectar a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Aña&dir a cola" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Opciones" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Guardar como predeterminado" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Copiar archivo(s)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Cola nueva" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Cola 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Cola 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Cola 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Cola 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Cola 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Guardar descripción" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentario de archivo/carpeta" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditar comentario para:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "Codi&ficación:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca de..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Autocomparación" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Modo Binario" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Copiar al bloque derecho" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiar al bloque derecho" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Copiar al bloque izquierdo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiar al bloque izquierdo" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Cortar" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Borrar" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Pegar" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Rehacer" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Rehacer" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Seleccion&ar todo" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Deshacer" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Deshacer" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Salir" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Buscar" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Buscar" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Buscar siguiente" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Buscar siguiente" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Buscar anterior" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Buscar anterior" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Reemplazar" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Reemplazar" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Primera diferencia" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Primera diferencia" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir a Línea..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Ir a la línea:" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorar capitalización" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorar espacios en blanco" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Mantener desplazamiento" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Última diferencia" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Última diferencia" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferencias de línea" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Diferencia siguiente" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Diferencia siguiente" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Abrir izquierda..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Abrir derecha..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Dibujar fondo" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Diferencia anterior" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferencia anterior" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Recargar" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Recargar" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Guardar" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Guardar" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Guardar como..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Guardar como..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Guardar izquierda" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Guardar izquierda" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Guardar izquierda como..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Guardar izquierda como..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Guardar derecha" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Guardar derecha" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Guardar derecha como..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Guardar derecha como..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Codificación" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificación" #: tfrmdiffer.caption msgid "Compare files" msgstr "Comparar archivos" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Izquierda" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "De&recha" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acciones" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Codificación" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Archivo" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Opciones" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Añadir un atajo nuevo a la secuencia" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Quitar el último atajo de la secuencia" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Seleccionar atajo de la lista de teclas que quedan libres" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Solo para estos controles" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parámetros (cada uno en línea separada):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Atajos:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca de..." #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Acerca de..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuración" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuración" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Borrar" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Buscar" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Buscar" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Buscar siguiente" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Buscar siguiente" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Buscar anterior" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Ir a Línea..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Pegar" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Rehacer" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Rehacer" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Reemplazar" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Reemplazar" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Seleccion&ar todo" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Seleccionar todo" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Deshacer" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Deshacer" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Cerrar" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Salir" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Nuevo" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nuevo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Abrir" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Abrir" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Recargar" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Guardar" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Guardar" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Guardar &como..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Guardar como" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "A&yuda" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificación" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Abrir como" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Guardar como" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Archivo" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Resaltado de sintaxis" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fin de línea" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Aceptar" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Sensible a capitalización" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Buscar d&esde la posición actual" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "Expresiones ®ulares" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Solo &texto seleccionado" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Solo palabras completas" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Opción" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Reemplazar con:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Buscar por:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Dirección" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Descomprimir archivos" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Desco&mprimir nombres de ruta si se almacenaron con archivos" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "De&scomprimir cada archivo en una carpeta separada (nombre del archivo)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "S&obrescribir archivos existentes" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "En la ca&rpeta:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extraer los de la máscara:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Co&ntraseña para archivos cifrados:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Espere..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nombre del archivo:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "Desde:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "¡Pulsa en «Cerrar» cuando el archivo temporal se pueda borrar!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Al panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Ver todo" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operación actual:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Desde: " #: tfrmfileop.lblto.caption msgid "To:" msgstr "Hacia: " #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Propiedades" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Permitir ejecutar el archivo como un programa" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Otros" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Texto:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Creado:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecución" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Ejecutar:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nombre" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Nombre" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ruta:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Último acceso:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Última modificación:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Último cambio de estado:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Octal" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "&Propietario" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Tamaño:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Enlace simbólico a:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nombre" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valor" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Atributos" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Complementos" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propiedades" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Cerrar" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "C&ancelar" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Cerrar" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "Cerrar" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuración de atajos de teclado" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "En&listar" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Cancelar búsqueda, cerrar y quitar de la memoria" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Para los demás «Archivos encontrados», cancelar, cerrar y quitar de la memoria" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Ir al archivo" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Buscar datos" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "Ú<ima búsqueda" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nueva búsqueda" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nueva &búsqueda (borrar filtros)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Ir a la página «Avanzado»" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Ir a la página «Cargar/Guardar»" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Cambiar a la página siguien&te" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Ir a la página «Complementos»" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Cambiar a la &página anterior" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Ir a la página «Resultados»" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Ir a la página «General»" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Comen&zar" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Añadir" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Guardar" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "B&orrar" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Car&gar" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Gu&ardar" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "&Guardar con la ruta" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" "Si eliges «Guardar con la ruta», cuando cargue la plantilla\n" "restaurará también la ruta de búsqueda.\n" "Úsalo si quieres dirigirla a una carpeta concreta." #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usar plantilla" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Buscar archivos" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible a capitalización" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Fecha &desde:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "F&echa hasta:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Tamaño desde:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Tamaño &hasta:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Buscar en &ficheros" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Buscar &texto en archivo" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Seguir enlaces simbólicos" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Buscar archivos que N&O contengan el texto" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "N&o más antiguo de:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Pestañas abiertas" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Buscar partes del nombre del archivo" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "Expresiones ®ulares" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Ree&mplazar por" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Carpetas y archivos seleccionados" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "&Expresiones regulares" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Hora desde:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H&ora hasta:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Usar complemento de búsqueda:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" "Introducir las carpetas que serán excluidas\n" "de la búsqueda separadas con «;»" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" "Introducir los archivos que serán excluidos\n" "de la búsqueda separados con «;»" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introducir nombres de archivos separados con «;»" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Complemento" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Carpetas" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Archivos" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Buscar datos" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atri&butos" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Codi&ficación:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xcluir subcarpetas" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excluir archivos" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Máscara de &archivos" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Comenzar en la carpeta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Buscar en su&bcarpetas:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Búsquedas anteriores:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Acción" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Para los todos demás, cancelar, cerrar y quitar de la memoria" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "A&brir ruta en una pestaña nueva" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opciones" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Borrar de la lista" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Resultado" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostrar todos los elementos encontrados" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Mostrar en Editor" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostrar en Visor" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanzado" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Cargar/Guardar" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Complementos" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultados" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "General" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Buscar" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Buscar" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensible a c&apitalización" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expresiones ®ulares" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Contraseña:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nombre del usuario:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Crear enlace duro" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "&Destino al que apuntará el enlace" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "Nombre del en&lace" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "¡Importar todo!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importar seleccionado" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Selecciona los apuntes que quieras importar" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Cuando pulses un submenú, seleccionará el menú completo." #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Para seleccionar varios apuntes mantén CTRL y púlsalos" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Enlazador" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Guardar en..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Elemento" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "&Nombre del archivo" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "Aba&jo" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Abajo" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Eliminar" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Borrar" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "A&rriba" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Arriba" #: tfrmmain.actabout.caption msgid "&About" msgstr "&Acerca de..." #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Añadir nombre del archivo a la línea de comandos" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nueva petición de búsqueda..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Añadir ruta y nombre del archivo a la línea de comandos" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiar ruta a la línea de comandos" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Vista breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vista breve" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcular espacio &ocupado" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Cambiar de carpeta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Cambiar a la carpeta del usuario" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Cambiar a carpeta superior" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Cambiar a la carpeta raíz" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Calcular &suma de verificación..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "Comprobar suma de &verificación..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Borrar archivo de registro" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Borrar ventana de registro" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Cerrar tod&as las pestañas" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Cerrar las pestañas duplicadas" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Cerrar pestaña" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Línea de comandos siguiente" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Poner en la línea de comandos el comando siguiente en historial" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Línea de comandos anterior" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Poner en la línea de comandos el comando anterior en historial" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Columnas" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vista de columnas" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Comparar por &contenidos" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Co&mparar carpetas" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparar carpetas" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuración de la lista de marcadores" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Configuración de las pestañas favoritas" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Configuración de las pestañas de carpetas" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Configuración de atajos de teclado" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Guardar ajustes" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Configuración de búsquedas" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Barra de herramientas..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Configuración del menú de la vista de árbol " #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Configuración del menú de colores de la vista de árbol" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostrar menú contextual" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Copiar todas las pestañas al panel opuesto" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copi&ar las columnas de los archivos seleccionados" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copiar nombre(s) con la r&uta completa" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiar nombre(s) al por&tapapeles" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Copiar nombres con la ruta UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiar archivos sin pedir confirmación" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Copiar ruta completa de los archivos seleccionados sin el último delimitador" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copiar ruta completa de los archivos seleccionados" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiar en el mismo panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiar" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostrar &espacio ocupado" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Cor&tar" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Mostrar parámetros del comando" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Eliminar" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Para todas las búsquedas, cancelar, cerrar y quitar de la memoria" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Historial de carpetas" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Marcadores de carpetas" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Seleccionar cualquier comando y ejecutarlo" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editar co&mentario..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editar archivo nuevo" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editar campo de ruta encima de la lista de archivos" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Intercambiar paneles" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Ejecutar script" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extraer archivos..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Configuración de asociaciones de archivos" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binar archivos..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostrar p&ropiedades del archivo" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "D&ividir archivo..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Ver archivos anidados" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Foco en la línea de comandos" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Intercambiar foco" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Cambia entre la lista de archivos izquierda y derecha" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar el cursor sobre el primer archivo" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar el cursor sobre el último archivo" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Crear enlace &duro..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Contenidos" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Paneles en modo &horizontal" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Teclado" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Vista breve en el panel izquierdo" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Vista de columnas en el panel izquierdo" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Panel izquierdo &= Panel derecho" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Vista anidada en el panel izquierdo" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Abrir lista izquierda de unidades" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Orden in&verso en el panel izquierdo" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Ordenar panel izquierdo por &atributos" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Or&denar panel izquierdo por fecha" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Ordenar panel izquierdo por &extensión" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Ordenar panel izquierdo por &nombre" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Ordenar panel izquierdo por &tamaño" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vista de miniaturas en el panel izquierdo" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "&Cargar pestañas desde favoritas" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Cargar selección desde el p&ortapapeles" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Cargar se&lección desde archi&vo..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Cargar pestañas desde archivo" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Crear carpeta" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Sele&ccionar todos con la misma e&xtensión" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Seleccionar todos los archivos con el mismo nombre" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Seleccionar todos los archivos con el mismo nombre y extensión" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Seleccionar todos en la misma ruta" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Invertir selección" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Se&leccionar todo" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "D&eseleccionar grupo..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Seleccionar grupo..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Deseleccionar todo" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizar ventana" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "&Renombrado múltiple" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Conectar a unidad de red..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Desconectar de unidad de red..." #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Conexión &rápida de red..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Pestaña nueva" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Cargar la siguiente pestaña favorita de la lista" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Cambiar a la pestaña siguien&te" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Abrir fichero" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Abrir archivo de barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "A&brir ruta en una pestaña nueva" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Abrir listado &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visor de operaciones" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opciones..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Co&mprimir archivos..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Fijar posición de separación" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Pegar" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Cargar la anterior pestaña favorita de la lista" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Cambiar a la pestaña a&nterior" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rápido" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Búsqueda rápida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panel de vista rápida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "Actualiza&r" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Recargar la última pestaña favorita cargada" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mover" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mover/Eliminar sin pedir confirmación" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Renombrar" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Renombrar pestaña" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Volver a guardar las últimas favoritas cargadas" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurar selección" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Orden in&verso" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Vista breve en el panel derecho" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Vista de columnas en el panel derecho" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Panel derecho &= Panel izquierdo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Vista anidada en el panel derecho" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Abrir lista derecha de unidades" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Orden in&verso en el panel derecho" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Ordenar panel derecho por &atributos" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Or&denar panel derecho por fecha" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Ordenar panel derecho por &extensión" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Ordenar panel derecho por &nombre" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Ordenar panel derecho por &tamaño" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vista de miniaturas en el panel derecho" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Ejecutar &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Guardar las pestañas actuales como favoritas" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Guardar selección" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Guardar selección en arc&hivo..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Guardar pestañas a archivo" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Buscar..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Todas bloqueadas, abre las rutas en pes&tañas nuevas" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Poner todas las pestañas normales" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Poner todas las pestañas bloqueadas" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Todas bloqueadas, pero permite cambiar de ruta" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Cambiar &atributos..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueada, abre las rutas en pes&tañas nuevas" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&loqueada" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueada, pero permite cambiar de ruta" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Abrir usando asociaciones del sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostrar menú de botones" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostrar historial de la línea de comandos" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Menú" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Mostrar archivos oc&ultos/sistema" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordenar por &atributos" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Or&denar por fecha" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordenar por &extensión" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordenar por &nombre" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordenar por &tamaño" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Abrir lista de unidades" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Habilitar/Deshabilitar lista de ignorados para no mostrar nombres de archivo" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Crear en&lace simbólico..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Sincronizar carpetas..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destino &= Origen" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Compro&bar fichero(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vista de miniaturas" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Cambiar a modo consola en pantalla completa" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferir carpeta bajo el cursor a la izquierda" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferir carpeta bajo el cursor a la derecha" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Panel de la vista de árbol" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Ordenar de acuerdo con los parámetros" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselecci&onar todos con la misma extensión" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Deseleccionar todos los archivos con el mismo nombre" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Deseleccionar todos los archivos con el mismo nombre y extensión" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Deseleccionar todos en la misma ruta" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostrar historial de las rutas visitadas por vista activa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ir al apunte siguiente en historial" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ir al apunte anterior en historial" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Ver el contenido del archivo registro" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Ver las peticiones de búsqueda actuales" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visitar web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Destruir" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Trabajar con marcadores y parámetros" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Salir" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Carpeta nueva" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Marcadores" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostrar la carpeta actual del panel derecho en el panel izquierdo" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Ir a la carpeta del usuario" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ir a la carpeta raíz" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ir a la carpeta superior" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Marcadores" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostrar la carpeta actual del panel izquierdo en el panel derecho" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Ruta" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiar..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Crear enlace..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Borrar" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ocultar" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mover..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Crear enlace simbólico..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opciones de la pestaña" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaurar" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Comenzar" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandos" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguración" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Pestañas favoritas" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Archivo" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Seleccionar" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "Red" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Vista" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "Opciones de la pestaña" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Pes&tañas" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Selecciona el comando interno" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Orden heredado" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Orden heredado" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Selecciona todas las categorías predeterminadas" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Selección:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "C&ategorías:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Coma&ndo:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtro:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Acción:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Atajo:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "C&ategorías" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ayuda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Consejo" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Atajos" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Añadir" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "A&yuda" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Sensible a capitalización" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorar acentos y ligaduras" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Atri&butos:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Máscara de entrada:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "O escoge tipo de selección predefinida:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crear carpeta nueva" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Introduce el nombre de la carpeta nueva:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Tamaño nuevo" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altura :" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Calidad de compresión jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Anchura:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Altura" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Anchura" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extensión" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Nombre del archivo" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Borrar" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Borrar" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Cerrar" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configuración" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Fecha" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Fecha" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Eliminar" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Editar nombres..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extensión" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extensión" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Editar" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Cargar nombres desde el archivo..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Nombre del archivo" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Nombre del archivo" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Complementos" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Complementos" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Renombrar" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Renombrar" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Restablecer todo" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Guardar" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Guardar como..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Ordenar" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Renombrado múltiple" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Sensible a capitalización" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgid "&Log result" msgstr "Acti&var" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "E&xpresiones regulares" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usar sustitución" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Buscar y Reemplazar" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Máscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Preajustes" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Exten&sión" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "B&uscar..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervalo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nombre del archivo" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Ree&mplazar..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Número inicia&l" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Dígitos" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Acciones" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Editar" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Nombre antiguo" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nombre nuevo" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Ruta" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Pulsa en «Aceptar» cuando hayas cerrado el editor para efectuar los cambios" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Selecciona una aplicación" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personalizado" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Guardar asociación" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Establecer la aplicación como predeterminada" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipo de archivo a abrir: «%s»" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Nombres de archivos múltiples" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URIs múltiples" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nombre de archivo único" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI individual" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "A&plicar" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "A&yuda" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opciones" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Por favor, selecciona una de las subpáginas, esta página no contiene ningún ajuste." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Borrar" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Otros..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Renombrar" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opciones:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formato modo de análisis:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Acti&vado" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Modo de depuración" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Mo&strar salida de consola" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Añad&iendo:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Co&mpresor:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Borrar:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "De&scripción:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "E&xtensión:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Ex&traer:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extraer sin ruta:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Posición ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Rango de búsqueda ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Listar:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Compresores:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Finalizar listado (opcional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "For&mato de listado:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Comenzar listado (opcional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Pregunta para la contraseña:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Crear archivo autoextraíble:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Comprobar:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&utoconfigurar" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Adicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Cua&ndo cambien de tamaño, fecha o atributos" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Para la&s rutas siguientes y sus subcarpetas:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "C&uando se creen, borren o renombren archivos" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Cuan&do la aplicación esté en segundo plano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Deshabilitar actualización automática" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Actualizar la lista de archivos" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Mostrar siempre el icono en la bande&ja del sistema" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Ocultar automáticamente los dispositivos sin montar" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Mo&ver icono a la bandeja del sistema al minimizar" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Permitir so&lo una copia a la vez de Double Commander" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" "Aquí puedes introducir una o más unidades\n" "o puntos de montaje, separados por «;»." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Unidades &no permitidas:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Tamaño de columnas" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Mostrar extensiones de archivos" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Alineado (tabulado)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Di&rectamente tras el nombre del archivo" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automático" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Número de columnas fijas" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Ancho fijo de columnas" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Indicador de color °radado" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Modo Binario" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Texto:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Segundo plano 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Color segundo plano:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Color primer plano:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Correctos:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Ajustar &texto al ancho de columna" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Am&pliar el ancho de la celda si el texto no se ajusta a la columna" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Líneas &horizontales" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Líneas &verticales" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "&Rellenar automáticamente las columnas" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostrar rejilla" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Tamaño automático de columnas" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Colu&mna de tamaño automático:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Historial de línea de co&mandos" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "Historial de carpetas" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Historial de &máscaras de archivos" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Pestañas" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "&Guardar la configuración" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "&Historial de buscar/reemplazar" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Carpetas" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Ubicación de los archivos de configuración" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Guardar al salir" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Ordenación de configuración en el árbol izquierdo" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Fijar en la línea de comandos" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Temas de iconos:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Caché de miniaturas:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Ca&rpeta del programa (versión portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Carpeta del &usuario" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Aplica la modificación a todas las columnas" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Configuración predeterminada" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Nuevo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "&Siguiente" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "&Anterior" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Renombrar" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Restablecer valores" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Guardar como" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Guardar" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir sobrecolor" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Al pulsar para cambiar algo, cambia para todas las columnas" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "General" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Borde del cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Usar cursor &enmarcado" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Usar color de selección inactiva" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "U&sar selección invertida" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Usar tipografía y color personalizados" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Segundo plano:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Segundo plano 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Con&figurar vistas de columnas" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Nombre actual de columna]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Color del cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Texto en cursor:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Tipografía:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Tamaño:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Color del texto:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Color cursor inactivo:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Color selecc. inactiva:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Color de selección:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "A continuación se muestra una vista previa. Puedes mover el cursor y seleccionar archivos para ver el aspecto de los distintos ajustes." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Ajustes de columna:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Añadir columna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posición de cuadro de panel después de comparación:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Añadir la carpeta del cuadro &activo" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Añadir carpetas de los cua&dros activo e inactivo" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Añadir car&peta a seleccionar..." #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgid "Add a copy of the selected entry" msgstr "Añadir una copia del apunte seleccionado" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Añadir las carpetas actuales &seleccionadas o activas del cuadro activo" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgid "Add a separator" msgstr "Añadir separador" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Añadir submenú" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Añadir carpeta nueva" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Contraer todo" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Contraer elemento" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Cortar apuntes seleccionados" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "¡Eliminar todo!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Eliminar elemento seleccionado" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Borrar submenú y todos sus elementos" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Borrar solo submenú pero mantener elementos" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Expandir elemento" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Foco en la ventana del árbol " #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Ir al primer elemento" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Ir al último elemento" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Ir al elemento siguiente" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Ir al elemento anterior" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Insertar carpeta del cuadro &activo" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Insertar carpetas de los cua&dros activo e inactivo" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Insertar carpeta a seleccionar..." #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Insertar una copia del apunte seleccionado" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Insertar las carpetas actuales &seleccionadas o activas del cuadro activo" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Insertar un separador" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Insertar submenú" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Insertar carpeta nueva" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Mover al siguiente" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Mover al anterior" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Expandir todo" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Pegar lo que se cortó" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Buscar y reem&plazar en la ruta" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Buscar y reemplazar tanto en ruta como en destino" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Buscar y reemplazar en la ru&ta de destino" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Ajustar ruta" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Ajustar ruta de destino" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Aña&dir..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Res&paldo..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Bo&rrar..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "E&xportar..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Impor&tar..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Insertar..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Miscelánea..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Algunas funciones para seleccionar el destino apropiado" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Ordenar..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Al a&ñadir carpeta, agregar también destino" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Expa&ndir siempre el árbol" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Mostrar solo &variables de entorno válidas" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Mostrar la r&uta en el menú emergente" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nombre, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Nombre, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista de marcadores (reordenar con arrastrar y soltar) " #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Otras opciones" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Nombre:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Ruta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "Des&tino:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...ni&vel actual de elemento(s) seleccionados solamente" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Comprobar &que existen las rutas de los marcadores" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Comprobar que exi&sten las rutas y destinos de los marcadores" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "a un archivo marcadores (.&hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "al «wincmd.ini» de TC (mant&ener existente)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "al «wincmd.ini» de TC (borrando &existente)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Ir a info &configurar TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Ir a info &configurar TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Menú de pruebas para las carpetas de favoritos" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "desde un archivo marcadores (.&hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "desde «&wincmd.ini» de TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Navegar..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Recuperar un respaldo de la lista de marcadores" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Guardar un re&spaldo de la lista de marcadores actual" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Buscar y &reemplazar..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...todo, de la A a la &Z" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...solo &grupo único de elemento(s)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&contenido de submenú(s) seleccionado, sin subnivel" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...contenido de submenú(s) seleccion&ado y todos sus subniveles" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Prue&ba del menú resultante" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Ajustar &la ruta" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Ajustar la ru&ta de destino" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Adición desde el panel principal" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Desde todos los formatos soportados, preguntar cual se usará cada vez" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Cuando guarde texto Unicode, guardarlo en formato UTF8 (de todos modos será UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Cuando suelte texto, generar automáticamente nombre del archivo (de otra manera le preguntará al usuario)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Mo&strar diálogo de confirmación después de soltar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Cuando arrastre y suelte texto dentro de paneles:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Ponga el formato preferido al comienzo de la lista (usar arrastrar y soltar):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(si el preferido no está presente, se tomará el segundo y así sucesivamente)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(no funcionará con alguna aplicación origen, intente desmarcar si hay problema)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostrar &sistema de archivos" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostrar &espacio libre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostrar eti&queta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista de unidades" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Al final de la marca de inserción" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Mostrar caracteres especiales" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Opciones del editor interno" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Segundo plano" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Segundo plano" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Restablecer" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Guardar" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributos de elemento" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Primer plano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Primer plano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de &texto" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usar (y editar) esquema de ajustes &globales" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usar esquema de ajuste &local" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Negrita" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Cursiva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Tachado" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "S&ubrayado" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "O&n" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Añadir..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Borrar..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importar/Exportar" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Insertar..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Renombrar" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Ordenar..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Ninguno" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Expandir siempre el árbol" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "&Izquierda" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "De&recha" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Lista de pestañas favoritas (reordenar con arrastrar y soltar)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Otras opciones:" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Qué restaurar y dónde para el apunte seleccionado:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Pestañas existentes que deben mantenerse:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Guardar historial de direcciones:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Pestañas guardadas a la izquierda se restaurarán en:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Pestañas guardadas a la derecha se restaurarán en:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "separador" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Añadir separador" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "submenú" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Añadir submenú" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Contraer todo" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...nivel actual de elemento(s) seleccionados solamente" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "¡eliminar todo!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "submenú y todos sus elementos" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "solo submenú pero mantener elementos" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "elemento seleccionado" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Eliminar elemento seleccionado" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportar selección a archivo(s) .tab heredado(s)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Menú de pruebas para las pestañas favoritas" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importar archivo(s) .tab heredado(s) según la configuración predeterminada" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar archivo(s) .tab heredado(s) en la posición seleccionada" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importar archivo(s) .tab heredado(s) en la posición seleccionada" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importar archivo(s) .tab heredado(s) en la posición seleccionada en un submenú" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Insertar separador" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Insertar submenú" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Expandir todo" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Renombrar" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...todo, de la A a la Z" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...solo grupo único de elemento(s)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Ordenar solo grupo único de elemento(s)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...contenido de submenú(s) seleccionado, sin subnivel" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...contenido de submenú(s) seleccionado y todos sus subniveles" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Prueba del menú resultante" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Añadir" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "&Añadir" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Añadir" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Clonar" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Selecciona el comando interno" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Abajo" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Editar" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Insertar..." #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Insertar..." #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&enombrar" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Arriba" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Comienzo de la ruta del comando. Nunca entrecomillar esta cadena." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nombre de la acción. Nunca se pasa al sistema, es solo un nombre nemotécnico elegido por ti y para ti." #: tfrmoptionsfileassoc.edtparams.hint #, fuzzy #| msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parámetro para pasar al comando. Nombre de archivo largo con espacios debe ser entrecomillado." #: tfrmoptionsfileassoc.fnecommand.hint #, fuzzy #| msgid "Command to execute. Long filename with space should be quoted." msgid "Command to execute. Never quote this string." msgstr "Comando a ejecutar. Nombre de archivo largo con espacios debe ser entrecomillado." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "&Descripción de la acción:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Acciones" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Extensiones" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Se puede ordenar con arrastrar y soltar" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipos de archivos" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Icono" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Las acciones se pueden ordenar con arrastar y soltar" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Las extensiones se pueden ordenar con arrastrar y soltar" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Los tipos de archivos se pueden ordenar con arrastrar y soltar" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "Acción:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Co&mando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parámetro&s:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Ruta inicial:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Personalizar con..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Comando personalizado" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Abrir en Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Editar con..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Obtener salida del comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Abrir con el editor interno" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Abrir con el visor interno" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Abrir con..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Ejecutar en terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vista" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Abrir en Visor" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Ver con..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Pulsa aquí para cambiar el icono" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "&Ejecutar en terminal" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Menú contextual extendido" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Configuración de asociación de archivos" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Ofrecer añadir la selección a asociación de archivos si no está ya incluida" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Cuando accede a la asociación de archivos, ofrece añadir el archivo seleccionado en ese momento si no está ya incluido en un tipo de archivo configurado" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "&Ejecutar en terminal y cerrar" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "&Ejecutar en terminal y mantener abierto" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Iconos" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Elementos de opciones extendidas:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Mostrar ventana de confirmación para:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operac&iones de copia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operaciones de &borrado" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Enviar a la papelera (la tecla de Mayúsculas invalida este ajuste)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Op&eraciones de enviar a la papelera" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Quitar ma&rca de solo lectura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operaciones de &mover" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Procesar comentarios con archivos/carpetas" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Seleccionar al &renombrar solo el nombre del archivo, sin la extensión" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostrar las pestañas del panel de destino en el diálogo «copiar/mover»" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Sa<ar errores en operaciones con archivos y anotarlos en la ventana de registro" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Ejecución de operaciones" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfaz de usuario" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamaño de &memoria para operaciones con archivos (en KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Tamaño del búfer para el cálculo de hash (en KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostrar &inicialmente las operaciones en curso en" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Estilo de autorrenombrado para nombres duplicados:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de sobrescrituras para destruir:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Restablecer valores predeterminados de DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Permitir sobrecolor" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Usar cursor &enmarcado" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Usar color de selección inactiva" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sar selección invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Borde del cursor" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Color de fondo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Color de fondo 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Color del c&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Te&xto en el cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Color cursor inactivo:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Color selección inactiva:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Nivel de &brillo del panel inactivo" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Color de &selección:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Color del texto:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "A continuación se muestra una vista previa. Puedes mover el cursor y seleccionar archivos para ver el aspecto de los distintos ajustes." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "Color del t&exto:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Al iniciar la búsqueda de archivos, borrar el filtro de máscara de archivos" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Bu&scar parte del nombre del archivo" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Mostrar la barra de menús en «Archivos encontrados»" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Búsqueda de texto en archivos" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Búsqueda de archivos" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Filtros presentes con el botón «Búsqueda nueva»:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Plantilla de búsqueda predeterminada:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Usar mapeado de memoria para buscar te&xto en archivos" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Usar cadena para buscar texto en archivos" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Por de&fecto" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formateando" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Orden" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensible a capitalización:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato incorrecto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato &de fecha y hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato de &tamaño de archivo:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Insertar archivos nuevos:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "O&rden de las carpetas:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Método para ordenar:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Mover archivos actualizados:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Añadir" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "A&yuda" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Cambiar a la carpeta superior al hacer doble clic en una zona vacía de la vista de archivos" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "&No cargar la lista de archivos hasta que la pestaña esté activada" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mostrar los nombres de carpetas entre corc&hetes []" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "&Resaltar los archivos nuevos y actualizados" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Habilitar «doble clic pausado» para renombrar archivo/carpeta en el panel" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Cargar la &lista de archivos en proceso separado" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Cargar los &iconos después de la lista de archivos" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostrar archivos ocultos &y de sistema" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Al seleccionar archivos con la &barra espaciadora, bajar al archivo siguiente (como con «Insertar»)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filtro al estilo de Windows cuando se marcan los archivos («*.*» también selecciona archivos sin extensión, etc.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Utilizar cada vez un filtro de atributo independiente en el diálogo de entrada de máscara" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Marcar/Desmarcar apuntes" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Valor predeterminado de máscara de atributo a utilizar:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Borrar" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Colores para los tipos de archivos (or&denar con arrastrar y soltar)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributos:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Co&lor:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "&Máscara:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Tipo de archivo:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Tipografías" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Añadir ata&jo" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Borrar" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Borrar atajo" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Editar atajo" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Categoría siguiente" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Hacer emergente el menú relacionado con el archivo" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Categoría anterior" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Renombrar" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Restaurar predeterminado de DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Guardar ahora" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Ordenar por nombre de comando" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Ordenar por atajo de teclado (agrupado)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Ordenar por atajo de teclado (uno por fila)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "C&ategorías:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "Co&mandos:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Archivo&s de atajos:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "O&rdenación:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Categorías" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Ordenación" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Atajos" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descripción" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Atajos" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parámetros" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para las rutas siguientes y sus subcarpetas:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostrar iconos para acciones en &menús" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Mostrar iconos en botones" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Mostrar &iconos superpuestos (por ejemplo, para enlaces)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Deshabilitar iconos especiales" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " Tamaño de los iconos " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Tema de icono" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Mostrar iconos" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr " Mostrar iconos a la izquierda del nombre del archivo " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Panel de discos:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Panel de archivos:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Todo" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Todo lo asociado + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "Si&n iconos" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Solo iconos e&stándar" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "Aña&dir nombres seleccionados" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Añadir nombres seleccionados con &ruta completa" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorar (no mostrar) los archivos y carpetas siguientes:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Guardar en:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Las &flechas izquierda y derecha cambian de carpeta (como Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tecleado" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+L&etras:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Le&tras:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Letras:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Botones planos" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "&Interfaz plana" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Mostrar i&ndicador de espacio libre en la etiqueta de unidad" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "&Mostrar la ventana de registro" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Mostrar el panel de operaciones en seg&undo plano" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Mostrar el progreso com&ún en la barra de menús" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Mostrar la línea de co&mandos" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Mostrar barra de nave&gación" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Mostrar &botones de unidades" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Mostrar et&iqueta de espacio libre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostrar &el botón de lista de unidades" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Mostrar los botones de teclas de &función" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "M&ostrar menú principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Mo&strar barra de herramientas" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostrar eti&queta corta de espacio libre" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Mostrar &la barra de estado" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Mostrar los encabe&zados de columnas" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Mostrar pesta&ñas de carpetas" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Mostrar la &ventana de terminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostrar &dos barras de botones de unidad (ancho fijo, sobre la lista de archivos)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " Apariencia de pantalla " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Ver el contenido del archivo registro" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Incluir fecha en el archivo de registro" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "Co&mprimir/Descomprimir" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Ejecución en línea de comandos externa" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&iar/Mover/Crear enlace/Enlace simbólico" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "E&liminar" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Crear/Eliminar carpe&tas" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Registrar &errores" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "C&rear archivo de registro:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "Registrar mensajes de &información" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Encendido/apa&gado" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Registrar operaciones exito&sas" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "Co&mplementos del sistema de archivos" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Archivo de registro de operaciones con archivos" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registro de operaciones" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estado de la operación" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Bo&rrar miniaturas de archivos que ya no existen" #: tfrmoptionsmisc.btnviewconfigfile.hint #, fuzzy #| msgid "View log file content" msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Ver contenido del archivo registro" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Crear nuevo con la codificación:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ir siempre a la carpeta raíz de la unidad al cambiar de unidad" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostrar mensa&jes de advertencia (solo botón «Aceptar»)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "Guardar miniatura&s en caché" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Comentarios del archivo (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Relacionado a TC exportar/importar:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Codificación predeterminada:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Archivo de configuración:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Ejecutable de TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ruta de salida de la barra de herramientas:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "píxeles" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Tamaño de miniaturas:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selección por ratón" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Abrir con..." #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Desplazamiento" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selección" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Número de &líneas" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Línea a línea con el &movimiento del cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Página a página" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Ver el contenido del archivo registro" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Con&figurar" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Habilitar" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Eliminar" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Ajus&te avanzado" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descripción" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre del archivo" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Los complementos de búsqueda permiten el uso de algoritmos de búsqueda alternativos o herramientas externas (como «locate», etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Los compl&ementos de compresión son usados para trabajar con ficheros" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre del archivo" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Los complementos de contenido permiten mostrar detalles extendidos de archivos: etiquetas mp3, atributos de imagen (en listas de archivos); o pueden usarse en las búsquedas o en renombrado múltiple" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Los complementos «Sistema de archivos» permiten acceder a discos inaccesibles por el sistema operativo o a aparatos externos como Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Los complementos de visualización permiten mostrar formatos de archivos como imágenes, base de datos, etc., en Visor (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Activo" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complemento" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nombre" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "Ini&cio (el nombre debe empezar con el primer carácter tecleado)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nal (debe coincidir el último carácter antes del punto '.')" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opciones" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Coincidencia exacta de nombre" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Buscar por capitalización" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Buscar por estos elementos" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Mantener el renombrado cuando se desbloquee una pestaña" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activar el pa&nel de destino al pulsar en una de sus pestañas" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "Mo&strar pestañas también cuando haya una sola" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Cerrar las pestañas duplicadas cuando se cierre la aplicación" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Con&firmación para cerrar todas las pestañas" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Confirmación para cerrar las pestañas &bloqueadas" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Limitar la longitud del título a:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Mostrar &bloqueo con un asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "Pes&tañas en varias líneas" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Arriba abre una pestaña nueva en primer plano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Abrir las pestañas nuevas al lado de la actual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Reutilizar la pestaña existente cuando sea posible" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Mostrar &botón de cierre de pestaña" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Siempre mostrar letra de unidad en el título de la pestaña" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Cabecera de las pestañas" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "caracteres" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Acción a realizar al hacer doble clic en una pestaña:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Posición de las pestañas" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "Ninguna" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "&Izquierda" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "De&recha" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Ir a configuración de pestañas favoritas tras reguardar" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Ir a configuración de pestañas favoritas tras guardar una" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Habilitar opciones extra de pestañas favoritas (seleccionar lado activo cuando restaure, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Configuración extra predeterminada cuando se guarden nuevas pestañas favoritas:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Encabezados de pestañas extra" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Al restaurar pestaña, pestañas existentes que deben mantenerse:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Pestañas guardadas a la izquierda se restaurarán en:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Pestañas guardadas a la derecha se restaurarán en:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Guardar historial de direcciones con pestañas favoritas:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Posición predeterminada en el menú cuando guarde nuevas pestañas favoritas:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{comando] normalmente debería estar presente aquí para mostrar el comando a ejecutar en el terminal" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{comando] normalmente debería estar presente aquí para mostrar el comando a ejecutar en el terminal" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Comando para ejecutar solo en terminal:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Comando para ejecutar una orden en terminal y cerrar después:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Comando para ejecutar una orden en terminal y mantener abierto:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Parámetros:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Parámetros:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Parámetros:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botón" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Editar ata&jo" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "Botón nue&vo" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Seleccionar" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "&Otro..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Borrar atajo" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Consejo" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" "DC sugiere información sobre herramientas en función\n" "del tipo de botón, comando y parámetros" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Botones planos" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Informar de errores con comandos" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" "Introducir parámetros de comando, cada uno en línea separada.\n" "Presiona F1 para ver ayuda sobre parámetros." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Apariencia" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Tamaño de &barra:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Coman&do:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parámetro&s:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Ayuda" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Atajo:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&no:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamaño de ic&ono:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parámetros:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "&Ruta inicial:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "A&yuda:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Añadir barra con TODOS los comandos de DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "para un comando externo" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "para un comando interno" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "para un separador" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "para subbarra de herramientas" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Respaldo..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra de herramientas actual..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "a un archivo de barra (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a «wincmd.ini» de TC (mantener existente)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a «wincmd.ini» de TC (borrar existente)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de herramientas..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Guardar un respaldo de la barra" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "a un archivo de barra (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a «wincmd.ini» de TC (mantener existente)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a «wincmd.ini» de TC (borrar existente)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restablecer un respaldo de la barra" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "desde un archivo de barra (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "desde un archivo TC .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "añadir a la barra superior" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "desde «wincmd.ini» de TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "añadir a la barra actual" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "añadir una barra nueva a la barra actual" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "añadir una barra nueva a la barra superior" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "para añadir a la barra superior" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "para reemplazar la barra superior" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Buscar y reemplazar..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "en todas de todo lo anterior..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "en todos los comandos..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "en todos los nombres de iconos..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "en todos los parámetros..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "en todas las rutas de inicio..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "después de la selección actual" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "antes de la selección actual" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botón" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Iconos" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Mantener abierta la ventana del terminal después de ejecutar el programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Ejecutar en terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usar programa externo" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parámetros a&dicionales" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Ruta del programa a ejecutar" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copiar" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Borrar" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Renombrar" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Otros..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Mostrar información emergente para los archivos del panel" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Tipo de a&yuda:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Máscara:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Con doble clic en la barra sobre el panel de archivos" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Con el menú y comando interno" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Doble clic en el árbol selecciona y sale" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "Con el menú y comando interno" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Con doble clic en una pestaña (si está configurado para ello)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Al usar el atajo de teclado, saldrá de la ventana volviendo a la opción actual" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Un clic de ratón en el árbol selecciona y sale" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Utilizarlo para el historial de la línea de comandos" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Utilizarlo para el historial de direcciones" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Utilizarlo para el historial de vistos (rutas visitadas de la vista activa)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Comportamiento respecto a la selección:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Opciones de menú de la vista de árbol:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Dónde usar los menús de la vista de árbol:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*NOTA: Respecto a opciones como sensibilidad a capitalización, ignorar acentos o no, se guardarán y restaurarán individualmente para cada contexto de uso y de una sesión a otra." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Con marcadores:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Con pestañas favoritas:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Con historial:" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Usar y mostrar atajos de teclado para seleccionar elementos" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Diseño y opciones de colores:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Color de fondo:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Color del cursor:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Color del texto buscado:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Color del texto buscado bajo el cursor:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Color del texto normal:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Color del texto normal bajo el cursor:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Vista previa del menú de la vista de árbol:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Color secundario del texto:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Color secundario del texto bajo el cursor:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Color de acceso directo:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Acceso directo bajo el cursor:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Color del texto no seleccionable:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Color de no seleccionable bajo el cursor:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Cambia de color en la izquierda y verás aquí un ejemplo de cómo se verán los menús de la vista de árbol con la nueva configuración." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Nº de columnas en vista de libro" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "Con&figurar" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Comprimir archivos" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "C&rear ficheros distintos, uno por cada elemento seleccionado" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crear fichero autoe&xtraíble" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Ci&frar" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mo&ver al fichero" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Fichero de discos &múltiples" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Poner primero en fichero TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Co&mprimir también nombres de rutas (solo recursivo)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimir en el archivo:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compresor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimir todo y ejecut&ar" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimir y ejec&utar" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Propiedades del archivo comprimido" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributos:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tasa de compresión:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Fecha:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Método:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Tamaño original:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Archivo:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tamaño comprimido:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compresor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tiempo:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Cerrar panel de filtro" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Introducir texto a buscar o filtro" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensible a capitalización" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "C" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Carpetas" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "A" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Archivos" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Coincidir al comienzo" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Coincidir al final" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Conmutar entre búsqueda o filtro" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Más reglas" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "M&enos reglas" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Usar plugins de &contenido, combinado con:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Complemento" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Campo" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operador" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (toda coincidencia)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (cualquier coincidencia)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "A&plicar" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Aceptar" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceptar" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceptar" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleccionar los caracteres a insertar:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Cambiar atributos" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Archivo" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Creado:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Accedido:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificado:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Solo lectura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Incluyendo subcarpetas" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propiedades de la versión más actual" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo gris significa valor sin cambio)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Otros" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecución" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(campo gris significa valor sin cambio)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Ordenar" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancelar" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Aceptar" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccioanr ruta apropiada" #: tfrmsplitter.caption msgid "Splitter" msgstr "Divisor" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Requiere un archivo de verificación CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Tamaño y número de partes" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Carpeta des&tino" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Número de partes" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Hecho" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Sistema Operativo" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plataforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisión" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Versión" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Versión de Widget" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Crear enlace simbólico" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino a donde apuntará el enlace" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nombre del en&lace" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Cerrar" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizar directorios" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asimétrico" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "por contenido" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorar fecha" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "solo seleccionado" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Subcarpetas" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mostrar:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Nombre" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Tamaño" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Fecha" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Fecha" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Tamaño" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Nombre" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(en la ventana principal)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Mostrar izquierdo" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Mostrar derecho" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicados" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "simples" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Por favor, presiona «Comparar» para comenzar" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmar sobrescritura" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Menús de la vista de árbol" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Selecciona tu marcador:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "La búsqueda es sensible a capitalización" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Contraer todo" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Expandir todo" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "La búsqueda ignora acentos y ligaduras" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "La búsqueda no es sensible a capitalización" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "La búsqueda es estricta en cuanto a acentos y ligaduras" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "No mostrar el contenido de una rama \"solo\" porque la cadena de búsqueda se encuentra en el nombre de una rama" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Si se encuentra en una cadena de búsqueda el nombre de la rama, mostrar toda la rama incluso si los elementos no coinciden" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Cierra el menú de la vista de árbol" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Configuración del menú de la vista de árbol" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Configuración del menú de colores de la vista de árbol" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Aña&dir nuevo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Cam&biar" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Por de&fecto" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar la ruta apropiada" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Eliminar" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Ajuste avanzado" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tectar tipo de fichero por contenido" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Puede &borrar archivos" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Soporta ci&frado" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostrar como archivos normales (ocultar icono de compresión)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Soporta co&mpresión en memoria" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Puede &modificar los ficheros existentes" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "El &fichero puede contener múltiples archivos" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Puede crear nue&vos ficheros" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Soporta la ventana de diálogo con opciones" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permitir búsqueda de texto en ficheros" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "&Descripción:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etectar cadena:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "&Extensión:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Opciones:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Nombre:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "Co&mplemento:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Co&mplemento:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "Acerca del Visor..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostrar el mensaje «Acerca de...»" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Cambiar codificación" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Copiar archivo" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiar archivo" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copiar al portapapeles" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Copiar al portapapeles con formato" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Eliminar archivo" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Eliminar archivo" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "Salir" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Buscar" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Buscar siguiente" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Buscar anterior" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Ir a Línea..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Ir a la línea:" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Centrar" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "&Siguiente" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Cargar archivo siguiente" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "&Anterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Cargar archivo anterior" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Reflejar horizontalmente" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Reflejar" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Reflejar verticalmente" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Mover archivo" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mover archivo" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Vista previa" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recargar" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recargar el archivo actual" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Girar 180 grados" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Girar -90 grados" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Girar +90 grados" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Guardar" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Guardar como..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Guardar archivo como..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura de pantalla" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Retrasar 3 seg" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Retrasar 5 sec" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Mostrar como &binario" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Mostrar como libr&o" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Mostrar como &decimal" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Mostrar como &hexadecimal" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Mostrar como &texto" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Ajustar texto" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Complementos" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Ajustar" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Ajustar imagen" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Ajustar sólo grandes" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Deshacer" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Deshacer" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Acercar" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Acercar" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Alejar" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Alejar" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Recortar" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Resaltar" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibujar" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ojos rojos" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diapositivas" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visor" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Acerca de..." #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Archivo" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagen" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Lápiz" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Girar" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Captura" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Complementos" #: tfrmviewoperations.btnstartpause.caption #, fuzzy msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Comen&zar" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operaciones con archivos" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Cola nueva" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "En cola" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Cola 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Cola 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Cola 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Cola 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Cola 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Seguir en&laces" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Si la carp&eta ya existe" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Si el archivo ya existe" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Si el archivo ya existe" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Aceptar" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parámetros:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Con&figurar" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Ci&frar" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Si el archivo ya existe" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Copiar fech&a/hora" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Trabajar en segundo plano (conexión separada)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Si el archivo ya existe" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Fecha de la toma" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Altura" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Anchura" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Fabricante" #: uexifreader.rsmodel msgid "Camera model" msgstr "Modelo de la cámara" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientación" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Este archivo no se puede encontrar y podría ayudar a validar la combinación final de los archivos:\n" "%s\n" "¿Podrías hacerlo disponible y presionar «Aceptar» cuando esté listo,\n" "o presionar «Cancelar» para continuar sin él?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancelar filtro rápido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancelar operación en curso" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Introduce el nombre de archivo, con extensión, para soltar texto" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formato de texto a importar" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Dañados:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Resultado:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Perdidos:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Errores de lectura:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Correctos:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Introduce suma de verificación y selecciona algoritmo:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Comprobar suma de verificación" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "¿Quieres borrar los filtros para esta nueva búsqueda?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "El portapapeles no contiene ningún dato de herramienta válido" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Todo;Panel activo;Panel izquierdo;Panel derecho;Operaciones con archivos;Configuración;Red;Miscelánea;Puerto paralelo;Imprimir;Selección;Seguridad;Portapapeles;FTP;Navegación;Ayuda;Ventana;Línea de comandos;Herramientas;Vista;Usuario;Pestañas;Ordenar;Registro" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Orden heredado;Orden A-Z" #: ulng.rscolattr msgid "Attr" msgstr "Atributos" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Fecha" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nombre" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Tamaño" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinear" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Texto" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Borrar" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenido del campo" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mover" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ancho" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Columna personalizada" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Configurar asociaciones de archivos" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Confirmación de línea de comandos y parámetros" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barra de herramientas DC importada" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barra de herramientas TC importada" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_TextoSoltado" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_TextoHTMLSoltado" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_TextoEnriquecidoSoltado" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_TextoSimpleSoltado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_TextoUnicodeUTF16Soltado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "TextoUnicodeUTF8Soltado" #: ulng.rsdiffadds msgid " Adds: " msgstr " Añadidos: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Eliminados: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "¡Los dos archivos son idénticos!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Coincidentes: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Modificados: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codificación" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "In&terrumpir" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Todos" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Añadir" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utorrenombrar archivos origen" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancelar" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuar" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Mezclar" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Me&zclar todo" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Salir del programa" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&norar" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorar todo" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ninguno" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Aceptar" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Ot&ras alternativas" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "S&obrescribir" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sobrescribir &todo" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Sobrescribir los más &grandes" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sobrescribir los más anti&guos" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Sobrescribir los más peque&ños" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Renombrar" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Reanudar" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Rein&tentar" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Como ad&ministrador" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Saltar" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Saltar &todos" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Sí" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiar archivo(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mover archivo(s)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Comen&zar" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "En cola" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Velocidad: %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Velocidad: %s/s, tiempo restante: %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Formato de texto enriquecido;Formato HTML;Formato Unicode;Formato de texto plano" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Indicador de espacio libre" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sin etiqueta>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sin medio>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ir a la línea:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Ir a la línea:" #: ulng.rseditnewfile msgid "new.txt" msgstr "nuevo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nombre del archivo:" #: ulng.rseditnewopen msgid "Open file" msgstr "Abrir archivo" #: ulng.rseditsearchback msgid "&Backward" msgstr "Hacia &atrás" #: ulng.rseditsearchcaption msgid "Search" msgstr "Búsqueda" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Hacia a&delante" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Reemplazar" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "con editor externo" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "con editor interno" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Ejecutar vía consola" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Ejecutar en terminal y cerrar" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Ejecutar en terminal y dejar abierto" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Izquierda;Derecha;Activa;Inactiva;Ambas;Ninguna" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "No;Sí" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportado_desde_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Preguntar;Mezclar;Saltar" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Preguntar;Sobrescribir;Sobrescribir antiguo;Saltar" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Preguntar;No ajustar más;Ignorar errores" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definir plantilla" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nivel(es)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "todo (profundidad sin límites)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "solo carpeta actual" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "¡La carpeta «%s» no existe!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Encontrados: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Guardar platilla de búsqueda" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nombre de la plantilla:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Examinados: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Explorando" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Buscar archivos" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Tiempo de exploración: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Comienza en" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Tipografía de la c&onsola" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Tipografía del &editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Tipografía del re&gistro" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Tipografía principal" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Tipografía de la &ruta del panel" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Tipografía del &visor" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Tipografía de la vista de li&bro" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr "%s libres de %s" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s libres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Fecha/hora de último acceso" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributos" #: ulng.rsfunccomment msgid "Comment" msgstr "Comentario" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tamaño comprimido" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Fecha/hora de creación" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extensión" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Cambio de fecha/hora" #: ulng.rsfunclinkto msgid "Link to" msgstr "Enlace a..." #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Fecha/hora de última modificación" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nombre" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nombre sin extensión" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propietario" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ruta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Tamaño" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Error creando el enlace duro" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "Ninguno;Nombre, a-z;Nombre, z-a;Ext, a-z;Ext, z-a;Tamaño 9-0;Tamaño 0-9;Fecha 9-0;Fecha 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "¡Advertencia! Cuando se restablece un archivo de respaldo .hotlist, este borrará la lista existente y la reemplazará.\n" "\n" "¿Seguro que quieres continuar?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Diálogo «Copiar/Mover»" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Comparar" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Editar comentario de diálogo" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Buscar archivos" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Renombrado múltiple" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visor" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Ya existe una configuración con ese nombre.\n" "¿Quieres sobrescribirla?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "¿Seguro que quieres restaurar el valor predeterminado?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "¿Seguro que quieres borrar la configuración «%s»?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Copia de %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Introduce un nombre nuevo" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Debes mantener al menos un archivo de acceso directo." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nombre nuevo" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "La configuración de «%s» ha sido modificada.\n" "¿Quieres guardarla ahora?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "No hay acceso directo con «ENTER»" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Por nombre de comando;Por atajo de teclado (agrupado);Por atajo de teclado (uno por fila)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "No se pudo encontrar referencia al archivo de barra predeterminado" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Lista de ventanas de «Archivos encontrados»" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deseleccionar máscara" #: ulng.rsmarkplus msgid "Select mask" msgstr "Seleccionar máscara" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Máscara de entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Ya existe una vista de columnas con ese nombre." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Para cambiar la edición actual de vista de colmunas, ya sea GUARDAR, COPIAR o ELIMINAR la edición en curso" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurar columnas a medida" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Introducir nuevo nombre de vista de columnas" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acciones" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Desconectar de unidad de red..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editar" #: ulng.rsmnueject msgid "Eject" msgstr "Expulsar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Extraer aquí..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "A unidad de red" #: ulng.rsmnumount msgid "Mount" msgstr "Montar" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nuevo" #: ulng.rsmnunomedia msgid "No media available" msgstr "No hay ningún medio disponible" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Abrir" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Abrir con..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Otro..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Comprimir aquí..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaurar" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordenar por" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmontar" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Ver" #: ulng.rsmsgaccount msgid "Account:" msgstr "Cuenta:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Todos los comandos internos de Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parámetros adicionales para la línea de comandos:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "¿Quieres incluirlo entre comillas?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Error de CRC32 en el archivo:\n" "«%s»\n" "\n" "¿Quieres conservar el archivo corrupto de todos modos?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "¡No puedes copiar/mover el archivo «%s» dentro de sí mismo!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "No se puede borrar la carpeta «%s»" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "No se puede sobrescribir la carpeta «%s» porque «%s» no es una carpeta" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "¡No se puede cambiar a «%s»!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "¿Cerrar todas las pestañas inactivas?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "" "¡Esta pestaña (%s) está bloqueada!\n" "¿Quieres cerrarla de todos modos?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Confirmación de parámetro" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "¿Estás seguro de querer salir?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "El archivo %s ha cambiado. ¿Quieres copiar una versión previa?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "No se puede hacer una copia previa. ¿Quieres mantener el archivo modificado?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "¿Copiar los %d archivos/carpetas seleccionados?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "¿Copiar «%s»?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Crear un nuevo tipo de archivo «archivos %s» >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Introduce ubicación y nombre del archivo donde guardar la barra de DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Acción personalizada" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "¿Quieres eliminar el archivo parcialmente copiado?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "¿Quieres eliminar los %d archivos/carpetas seleccionados?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "¿Quieres enviar %d archivos/carpetas a la papelera?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "¿Quieres eliminar «%s»?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "¿Quieres enviar a «%s» a la papelera?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" "¡No se puede enviar «%s» a la papelera!\n" "¿Quieres eliminarlo directamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disco no está disponible" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Introduce el nombre de la acción:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduce la extensión del archivo:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduce el nombre:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Introduce el nombre del nuevo tipo de archivo a crear para la extensión «%s»" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Error de CRC en los datos del fichero" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datos corrompidos" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "No se puede conectar al servidor: «%s»" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "No se puede copiar el archivo «%s» a «%s»" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Ya existe una carpeta llamada «%s»." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "La fecha «%s» no está soportada" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "¡La carpeta «%s» ya existe!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Función interrumpida por usuario" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Error cerrando archivo" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Imposible crear el archivo" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "No hay más archivos en el fichero" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "No se puede abrir el archivo solicitado" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Error leyendo desde archivo" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Error escribiendo al archivo" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "¡No se puede crear la carpeta «%s»!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Enlace no válido" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "No se encontraron archivos" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memoria insuficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "¡Función no soportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Error en el comando del menú contextual" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Error al cargar la configuración" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "¡Error de sintaxis en expresión regular!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "No se puede renombrar el archivo «%s» a «%s»" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "¡No se puede guardar asociación!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "No se puede guardar el archivo" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "No se pueden fijar atributos para «%s»" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "No se pueden fijar fecha/hora para «%s»" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "No se pueden fijar propietario/grupo para «%s»" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "No se pueden fijar permisos para «%s»" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer demasiado pequeño" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Demasiados archivos para comprimir" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato de fichero desconocido" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "¿Seguro que quieres eliminar todos los apuntes de la lista de pestañas favoritas?) (¡No es posible deshacer esta acción!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Arrastra aquí otros apuntes" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Introduce un nombre para esta pestaña favorita" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Guardando un nuevo apunte de pestañas favoritas" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Número de pestañas favoritas exportadas con éxito: %d de %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Configuración extra predeterminada para guardar el historial de direcciones de nuevas pestañas favoritas:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Número de archivo(s) importados con éxito: %d de %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Pestañas heredadas importadas" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Selecciona el archivo .tab a importar (se pueden marcar varios)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" "La última modificación de pestañas favoritas no ha sido guardada todavía.\n" "¿Quieres guardarla antes de continuar?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Seguir guardando el historial de direcciones con pestañas favoritas:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nombre del submenú" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Esto cargará las pestañas favoritas: «%s»" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Guardar las pestañas actuales sobre una favorita ya existente" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "" "El archivo «%s» ha cambiado.\n" "¿Quieres guardarlo?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobrescribir:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "" "El archivo «%s» ya existe.\n" "¿Quieres sobrescribirlo?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con archivo:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Archivo «%s» no encontrado." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operaciones con archivo activas" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algunas operaciones con archivos no han terminado todavía. Si cierra Double Commander puede perder datos." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format, fuzzy, badformat msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "La longitud del nombre de destino (%d) tiene más de %d caracteres\n" "%s\n" "La mayoría de los programas no podrán acceder a un archivo/carpeta con un nombre tan largo\n" "%s" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "" "El archivo «%s» está marcado como de solo lectura/oculto/de sistema.\n" "¿Quieres borrarlo?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "¡El tamaño del archivo de «%s» es demasiado grande para el sistema de archivos de destino!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "" "La carpeta «%s» ya existe.\n" "¿Quieres mezclarla?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "¿Seguir enlace simbólico «%s»?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Selecciona el formato de texto a importar" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Añadir las %d carpetas seleccionadas" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Añadir la carpeta seleccionada: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Añadir la carpeta actual: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Crear comando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuración de la lista de marcadores" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "¿Seguro que quieres eliminar todos los apuntes de tu lista de marcadores? (¡No es posible deshacer esta acción!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Este ejecutará el comando siguiente:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Este es un marcador llamado " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Esto cambiará el cuadro activo a la ruta siguiente:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Y el cuadro inactivo cambiará a la ruta siguiente:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Error al hacer respaldo de apuntes..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Error exportando apuntes..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "¡Exportar todo!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportar marcadores - Selecciona los apuntes que quieres exportar" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exp. selección" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "¡Importar todo!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importar marcadores - Selecciona los apuntes que quieres importar" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Imp. selección" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Ruta:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Ubicar archivo «.hotlist» a importar" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nombre del marcador" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Número de apuntes nuevos: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "¡Nada seleccionado para exportar!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Ruta del marcador" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Reañadir la carpeta seleccionada:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Reañadir la carpeta actual:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Introduce ubicación y nombre del respaldo de la lista de marcadores a recuperar" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fin de submenú)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Nombre del me&nú:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Nombre:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separador)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nombre del submenú" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Destino del marcador" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Indica si quieres que el cuadro activo se clasifique en un orden específico tras cambiar de carpeta" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Indica si quieres que el cuadro no activo se clasifique en un orden específico tras cambiar carpeta" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Algunas funciones para seleccionar ruta relativa apropiada, absoluta, carpetas especiales de Windows, etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Total de apuntes guardados: %d\n" "\n" "Archivo de respaldo: «%s»" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Total apuntes exportados:" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "¿Quieres eliminar todos los elementos dentro del submenú «%s»?\n" "Si respondes NO solo borrará los delimitadores del menú, pero mantendrá el elemento dentro del submenú." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Introduce ubicación y nombre del archivo donde guardar el respaldo de los marcadores" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longitud de archivo incorrecto en: «%s»" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Por favor, inserte disco siguiente o algo similar.\n" "\n" "Permitirá escribir este archivo:\n" "«%s»\n" "\n" "Número de bytes restantes a escribir: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Error en la línea de comandos" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nombre no válido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato no válido de archivo de configuración" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta no válida" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "La ruta «%s» contiene caracteres no permitidos." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "¡Este no es un complemento válido!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Este complemento esta escrito para Double Commander por %s.%sPuede no funcionar con Double Commander por %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Cita no válida" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selección no válida" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Cargando lista de archivos..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Ubicar archivo de configuración de TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Ubicar archivo ejecutable de TC (totalcmd.exe o totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copiar archivo «%s»" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Borrar archivo «%s»" #: ulng.rsmsglogerror msgid "Error: " msgstr "Error: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Lanzamiento externo" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Resultado externo" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Extraer archivo «%s»" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Información: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Crear enlace «%s»" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Crear carpeta «%s»" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Mover archivo «%s»" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Comprimir en archivo «%s»" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Eliminar carpeta «%s»" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hecho: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Crear enlace simbólico «%s»" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Comprobar integridad del archivo «%s»" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Destruir archivo «%s»" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Destruir carpeta «%s»" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Contraseña maestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Por favor, introduce la contraseña maestra:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Archivo nuevo" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Se descomprimirá el volumen siguiente" #: ulng.rsmsgnofiles msgid "No files" msgstr "No hay archivos" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ningún archivo seleccionado." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espacio insuficiente en unidad de destino, ¿continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espacio insuficiente en unidad de destino, ¿reintentar?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "No se puede borrar archivo «%s»" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "No se ha implementado." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "¡El objeto no existe!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "A continuación se muestra una vista previa. Puedes mover el cursor y seleccionar archivos para ver el aspecto de los distintos ajustes." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Contraseña:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "¡Las contraseñas son diferentes!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Por favor, introduce la contraseña:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Contraseña (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Por favor, reintroduce la contraseña para verificación:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Borrar «%s»" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "El preajuste «%s» ya existe.\n" "¿Quieres sobrescribirlo?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problema al ejecutar comando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Archivo para texto soltado:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Por favor, haz este archivo disponible. ¿Reintentar?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Introducir nuevo nombre descriptivo para estas pestañas favoritas" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Introducir nombre nuevo para este menú" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "¿Renombrar/mover los %d archivos/carpetas seleccionados?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "¿Renombrar/mover «%s»?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Por favor, reinicia Double Commander para aplicar los cambios" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Seleccionar a qué tipo de archivo agregar la extensión «%s»" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Seleccionados: %s de %s Archivos: %d de %d Carpetas: %d de %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Selecciona ejecutable para" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Por favor, selecciona solo archivos de suma de verificación" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Por favor, selecciona ubicación del volumen siguiente" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definir etiqueta de volumen" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Carpetas especiales" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Añadir ruta de cuadro activo" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Añadir ruta de cuadro inactivo" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Navegar y usar la ruta seleccionada" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Usar variables de entorno..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ir a ruta especial de DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ir a variable de entorno..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ir a otra carpeta especial de Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ir a carpeta especial de Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Relacionar con ruta de marcador..." #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Poner ruta absoluta" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Relacionar con ruta especial de DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Relacionar con variable de entorno..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Relacionar con carpeta especial de Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Relacionar con otra carpeta especial de Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Usar ruta especial de DC..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Usar ruta de marcador..." #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Usar otra carpeta especial de Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Usar carpeta especial de Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" "¡Esta pestaña (%s) está bloqueada!\n" "¿Quieres abrir la ruta en otra pestaña?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renombrar pestaña" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nombre de la pestaña nueva:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ruta de destino:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "¡Error! No se pudo encontrar el archivo de configuración de TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "¡Error! No se pudo encontrar la configuración del ejecutable de TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "¡Error! TC está ejecutándose, pero debe cerrarse para esta operación.\n" "Ciérralo y pulsa «Aceptar» o «Cancelar» para interrumpir." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "¡Error! No se pudo encontrar la carpeta de salida de la barra de herramientas TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Introduce la ubicación y nombre del archivo donde guardar el respaldo de barra de TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "«%s» está ahora en el portapapeles" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "La extensión del archivo seleccionado no es un tipo de archivo reconocido" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Ubicar archivo «.toolbar» para importar" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Ubicar archivo «.BAR» para importar" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Introduce la ubicación y nombre del respaldo de donde recuperar la barra de herramientas" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "¡Guardada!\n" "Nombre del respaldo de la barra: «%s»" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Demasiados archivos seleccionados." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "No determinado" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "¡ERROR: Uso imprevisto del menú de la vista de árbol!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SIN EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<SIN NOMBRE>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nombre del usuario:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nombre del usuario (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFICACIÓN:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "El archivo de destino está dañado y la suma de verificación no coincide." #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etiqueta del volumen:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Por favor, introduce el tamaño del volumen:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "¿Quieres destruir los %d archivos/carpetas seleccionados?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "¿Quieres destruir «%s»?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "con" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "¿Cambiar automáticamente el nombre a «nombre (1).ext», «nombre (2).ext», etc.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Fecha" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extensión" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nombre" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sin cambios;MAYÚSCULAS;minúsculas;Primera letra en mayúscula;Primera Letra De Cada Palabra En Mayúsculas" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Renombrado múltiple" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Carácter en posición x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Caracteres desde posición x a y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Contador" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Día" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Día (2 dígitos)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Día de la semana (corto, ejem., «lu.»)" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Día de la semana (largo, ejem., «lunes»)" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extensión" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hora" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Hora (2 dígitos)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuto" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minutos (2 dígitos)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mes" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mes (2 dígitos)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Mes (corto, ejem., «Ene»)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Mes (largo, ejem., «Enero»)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nombre" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Segundo" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Segundos (2 dígitos)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Año (2 dígitos)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Año (4 dígitos)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Complementos" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Hora" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "¡Advertencia, nombres duplicados!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "El archivo contiene un número de líneas erróneo: %d, ¡debería ser %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Mantener;Borrar;Preguntar" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "No hay comando interno equivalente" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Lo siento, no hay ventana de «Archivos encontrados» todavía..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Lo siento, no hay ventana de «Archivos encontrados» que cerrar y quitar de la memoria..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Gráficos" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Red" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Otros" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistema" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Interrumpido" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Calculando suma de verificación" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Calculando suma de verificación en «%s»" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Calculando suma de verificación de «%s»" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Calculando" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Calculando «%s»" #: ulng.rsopercombining msgid "Joining" msgstr "Juntando" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Juntando archivos de «%s» a «%s»" #: ulng.rsopercopying msgid "Copying" msgstr "Copiando" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Copiando desde «%s» a «%s»" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Copiando «%s» a «%s»" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creando carpeta" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Creando carpeta «%s»" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Borrando" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Borrando en «%s»" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Borrando «%s»" #: ulng.rsoperexecuting msgid "Executing" msgstr "Ejecutando" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Ejecutando «%s»" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extrayendo" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Extrayendo desde «%s» a «%s»" #: ulng.rsoperfinished msgid "Finished" msgstr "Finalizado" #: ulng.rsoperlisting msgid "Listing" msgstr "Listando" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Listando «%s»" #: ulng.rsopermoving msgid "Moving" msgstr "Moviendo" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Moviendo desde «%s» a «%s»" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Moviendo «%s» a «%s»" #: ulng.rsopernotstarted msgid "Not started" msgstr "Sin comenzar" #: ulng.rsoperpacking msgid "Packing" msgstr "Comprimiendo" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Comprimiendo desde «%s» a «%s»" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Comprimiendo «%s» a «%s»" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausado" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausando" #: ulng.rsoperrunning msgid "Running" msgstr "Funcionando" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Configurando propiedad" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Configurando propiedad en «%s»" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Configurando propiedad de «%s»" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dividiendo" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Dividiendo «%s» a «%s»" #: ulng.rsoperstarting msgid "Starting" msgstr "Comenzando" #: ulng.rsoperstopped msgid "Stopped" msgstr "Detenido" #: ulng.rsoperstopping msgid "Stopping" msgstr "Deteniendo" #: ulng.rsopertesting msgid "Testing" msgstr "Comprobando" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Comprobando en «%s»" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Comprobando «%s»" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Comprobando suma de verificación" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Comprobando suma de verificación en «%s»" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Comprobando suma de verificación de «%s»" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Esperando para acceder al archivo origen" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Esperando la respuesta del usuario" #: ulng.rsoperwiping msgid "Wiping" msgstr "Destruyendo" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Destruyendo en «%s»" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Destruyendo «%s»" #: ulng.rsoperworking msgid "Working" msgstr "Trabajando" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Añadir al principio;Añadir al final;Añadido inteligente" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nombre del tipo de fichero:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Complemento asociado «%s» con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primera;Última;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Clásico, orden heredado;Orden alfabético (pero «Idioma» permanece primero)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Panel izquierdo activo, derecho inactivo (heredado);Panel izquierdo a la izquierda, derecho a la derecha" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introducir extensión" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Añadir al principio;Añadir al final;Orden alfabético" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "ventana separada;ventana separada minimizada;panel de operaciones" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Flotante" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "El atajo «%s» para cm_Delete será registrado, por lo que se puede utilizar para revertir este ajuste." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Añadir atajo para «%s»" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Añadir atajo" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "No se puede configurar el atajo" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Cambiar atajo" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "El atajo «%s» para cm_Delete tiene un parámetro que sobrescribe este ajuste ¿Quieres cambiar este parámetro para usar la configuración global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "El atajo «%s» para cm_Delete necesita cambiar un parámetro para que coincida con el atajo «%s» ¿Quieres cambiarlo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descripción" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Editar atajo para «%s»" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Corregir parámetro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Atajo" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Atajos" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ninguna>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parámetros" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Configurar atajo para borrar archivo" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Para que este ajuste funcione con el atajo «%s», el atajo «%s» debe asignarse a cm_Delete pero ya está asignado a «%s» ¿Quieres cambiarlo?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "El atajo «%s» para cm_Delete es una secuencia a la que no se puede asignar una tecla con «Mayúsculas» invertida. Este ajuste podría no funcionar." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Atajo en uso" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "El atajo «%s» ya está en uso." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "¿Cambiarlo a «%s»?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "usado por «%s» en «%s»" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usado para este comando pero con parámetros diferentes" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Compresores" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Actualización de paneles" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Comportamiento" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Colores" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Columnas" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuración" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Columnas personalizadas" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Marcadores" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Arrastrar y soltar" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Botón de lista de unidades" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Pestañas favoritas" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Asociaciones de archivos extra" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Asociaciones de archivos" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nuevo" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operaciones con archivos" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Paneles de archivos" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Búsqueda de archivos" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vista de archivos" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipos de archivos" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Pestañas" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Pestañas extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Tipografías" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Resaltadores" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Atajos" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Iconos" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Lista de ignorados" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Teclado" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Apariencia" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Registro de operaciones" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Miscelánea" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ratón" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Renombrado múltiple" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Las opciones han cambiado en «%s»\n" "\n" "¿Quieres guardar las modificaciones?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Complementos" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Búsqueda/filtro rápidos" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra de herramientas" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Herramientas" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Información emergente" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Menú de la vista de árbol" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Menú de colores de la vista de árbol" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nada;Línea de comandos;Búsqueda rápida;Filtro rápido" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botón izquierdo;Botón derecho;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "al principio de la lista de archivos;después de las carpetas (si las carpetas están ordenadas antes que los archivos);en posición ordenada;al final de la lista de archivos" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "El complemento «%s» ya está asignado para las extensiones siguientes:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Deshabilitar" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Habilitar" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Activo" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descripción" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nombre del archivo" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nombre" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrado por" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensible;&Insensible" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Archivos;Ca&rpetas;Archivos &y carpetas" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ocultar el panel del filtro cuando no esté enfocado;Guardar los ajustes para la siguiente sesión" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "no sensible a capitalización;de acuerdo a los ajustes locales (aAbBcC);primero mayúsculas, después minúsculas (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordenar por nombre y mostrar primero;ordenar como los archivos y mostrar primero;ordenar como los archivos" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "alfabético, considerando tildes;orden natural: alfabético y numérico" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Arriba;Abajo;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comando inte&rno;Comando e&xterno;&Menú" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Nombre:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Modo DC: «Copia (x) nombre.ext»;Windows: «nombre (x).ext»;Otro: «nombre(x).ext»" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "no cambiar posición;usar la misma configuración que para los archivos nuevos;en posición ordenada" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Archivos: %d, carpetas: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "No se pueden cambiar los derechos de acceso de «%s»" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "No se puede cambiar el propietario de «%s»" #: ulng.rspropsfile msgid "File" msgstr "Archivo" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Carpeta" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Tubería nombrada" #: ulng.rspropssocket msgid "Socket" msgstr "Zócalo" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo especial de bloque" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Carácter especial de dispositivo" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Enlace simbólico" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo desconocido" #: ulng.rssearchresult msgid "Search result" msgstr "Resultado de búsqueda" #: ulng.rssearchstatus msgid "SEARCH" msgstr "BUSCAR" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<plantilla sin nombre>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Ya hay en curso una búsqueda de archivos mediante el complemento DSX.\n" "Es necesario que se complete antes de lanzar una nueva." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Ya hay en curso una búsqueda de archivos mediante el complemento WDX.\n" "Es necesario que se complete antes de lanzar una nueva." #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecciona una carpeta" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Selecciona una ventana" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Mo&strar ayuda para «%s»" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Todo" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Categoría" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Columna" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comando" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Nombre del archivo" #: ulng.rssimplewordfiles msgid "files" msgstr "archivos" #: ulng.rssimplewordletter msgid "Letter" msgstr "Letra" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parámetro" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultado" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Carpeta de trabajo" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Archivos: %d, Carpetas: %d, Tamaño: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "¡No se pudo crear la carpeta de destino!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "¡Formato incorrecto de tamaño de archivo!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "¡No se puede dividir el archivo!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "¡El número de partes es mayor de 100! ¿continuar?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automático;1457664B - 3.5\" Alta densidad 1.44M;1213952B - 5.25\" Alta densidad 1.2M;730112B - 3.5\" Doble densidad 720K;362496B - 5.25\" Doble densidad 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Seleccionar carpeta:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Solo vista previa" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Otros" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Nota al margen" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Plano" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Limitado" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Simple" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Gourmets" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Camp Nou" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Estadounidenses" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Escoge tu carpeta desde el historial" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Escoge tus pestañas favoritas" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Escoge tu orden desde el historial de la línea de comandos" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Escoge tu acción desde el menú principal" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Escoge tu acción desde la barra de herramientas principal" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Escoge tu carpeta desde marcadores:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Escoge tu carpeta desde el historial de archivos" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Escoge tu archivo o tu carpeta" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Error creando el enlace simbólico." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Texto predeterminado" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Texto sin formato" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "No hacer nada;Cerrar pestaña;Ir a pestañas favoritas;Menú emergente de pestañas" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Día(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mes(es)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segundo(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Año(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Renombrar pestañas favoritas" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Renombrar submenú de pestañas favoritas" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Comparador" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Error al abrir el comparador" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Error al abrir el editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Error al abrir el terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Error al abrir el visor" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visor" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Por favor, informa de este error al trazador de errores con una descripción de lo que estabas haciendo y el archivo siguiente:%sPulsa «%s» para continuar o «%s» para interrumpir el programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Ambos paneles, de activo a inactivo" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Ambos paneles, de izquierda a derecha" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Ruta del panel" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Poner cada nombre entre paréntesis o lo que elijas" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Solo el nombre, sin la extensión" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Nombre de archivo completo (ruta+nombre)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Ayuda con variables «%»" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Solicitará petición del usuario que introduzca un parámetro con un valor predeterminado sugerido" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Panel izquierdo" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Nombre de archivo temporal de la lista de nombres de archivo" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Nombre de archivo temporal de la lista de nombres de archivo completos (ruta+nombre)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Nombres de archivos enlistados en UTF-16 con BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Nombres de archivos enlistados en UTF-16 con BOM, dentro de comillas dobles" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Nombres de archivos enlistados en UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Nombres de archivos enlistados en UTF-8, dentro de comillas dobles" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Nombre de archivo temporal de la lista de nombres de archivo con ruta relativa" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Sólo la extensión del archivo" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Sólo el nombre del archivo" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Otro ejemplo de lo que es posible" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Ruta, sin delimitador final" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Desde aquí hasta el final de línea, el indicador de porcentaje variable es el signo \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Devolver el signo de porcentaje" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Desde aquí hasta el final de línea, el indicador de porcentaje variable es de nuevo el signo \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Anteponer cada nombre con \"-a\" o lo que elijas" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Solicitar parámetro al usuario;Valor predeterminado propuesto]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nombre del archivo con la ruta relativa" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Panel derecho" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Ruta completa del segundo archivo seleccionado en el panel derecho" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Mostrar comando antes de ejecutar" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Mensaje sencillo]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Mostrará un mensaje sencillo" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Panel activo (origen)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Panel inactivo (destino)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Los nombres de archivos serán entrecomillados a partir de aquí (predeterminado)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "El comando será ejecutado en terminal, manteniéndose abierto al finalizar" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Las rutas finalizarán con delimitador" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Los nombres de archivos no serán entrecomillados a partir de aquí" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "El comando se ejecutará en terminal, cerrándose al finalizar" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Las rutas no finalizarán con delimitador (predeterminado)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Red" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visor interno de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Calidad inferior" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificación" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Tipo de imagen" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Tamaño nuevo" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "¡%s no encontrado!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "con visor externo" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "con visor interno" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Número de sustituciones: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "No se ha sustituido nada." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ���������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.el.po�����������������������������������������������������������0000644�0001750�0000144�00001664725�15104114162�017272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2024-10-18 21:05+0300\n" "Last-Translator: Anastasios Kazakis <anastasios.kazakis@tutanota.com>\n" "Language-Team: Anastasios Kazakis <anastasios.kazakis@tutanota.com>\n" "Language: el_GR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Native-Language: ελληνικά\n" "X-Generator: Poedit 3.4.2\n" "X-Language: el_GR\n" "X-Source-Language: el\n" "X-Poedit-SourceCharset: ISO-8859-7\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPathExcluded-0: .\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Σύγκριση... %d%% (ESC για ακύρωση)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Αριστερά: Διαγραφή %d αρχείο(α)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Δεξιά: Διαγραφή %d αρχείο(α)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Ευρεθέντα αρχεία: %d (Όμοια: %d, Διαφορετικά: %d, Μοναδικά αριστερά: %d, Μοναδικά δεξιά: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Αριστερά προς Δεξιά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Δεξιά προς Αριστερά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Επιλογή προτύπου..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Έλεγχος ελεύθερου χώρου" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Αντιγραφή ιδιοτήτων" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Αντιγραφή ιδιοκτησίας" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Αντιγραφή αδειών" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Αντιγραφή ημερομηνίας/ώρας" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Διόρθωση δεσμών" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Αφαίρεση ιδιότητας μόνο για ανάγνωση" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Εξαίρεση κενών καταλόγων" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Ακολουθείστε τους δεσμούς" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Δέσμευση Χώρου" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Τροποποίηση δημιουργεί αντίγραφο" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Επαλήθευση" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Τι να κάνετε όταν δεν μπορείτε να ορίσετε στα αρχεία χρόνο, ιδιότητες, κ.α." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Χρησιμοποιείστε πρότυπο αρχείου" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Όταν ο κατάλογος υπάρχει" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Όταν το αρχείο υπάρχει" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Όταν υπάρχει αδυναμία καθορισμού ιδιότητας" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<Χωρίς πρότυπο>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Αντιγραφή στο πρόχειρο" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Μεταγλώττιση" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Τροποποίηση" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Ιστοσελίδα προγράμματος:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Αναθεώρηση" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Έκδοση" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "Επαναφορά" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Επιλογή ιδιοτήτων" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Αρχειοθετημένο" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Συμπιεσμένο" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Κατάλογος" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Κρυπτογραφημένο" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Κρυφό" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Μόνο για Ανάγνωση" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Αραιό" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένο" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Συμβολικός δεσμός" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Σύστημα" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Προσωρινά Αρχεία" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS ιδιότητες" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Γενικές ιδιότητες" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Ιδιότητες:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Ομάδα" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Λοιποί" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Ως Κείμενο:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Μέγεθος πληροφοριών Benchmark: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Κατακερματισμός" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Χρόνος (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Ταχύτητα (MB/s)" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Υπολογισμός αθροίσματος ελέγχου..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Άνοιγμα αρχείου αθροίσματος ελέγχου μετά την ολοκλήρωση της εργασίας" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Δημιουργία ξεχωριστού αρχείου αθροίσματος ελέγχου για κάθε αρχείο" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "Μορφή Αρχείου" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Αποθήκευση αρχείου(ων) αθροίσματος ελέγχου στο:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Επιβεβαίωση αθροίσματος ελέγχου..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Κωδικοποίηση" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Σύνδεση" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Διαχειριστής συνδέσεων" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Σύνδεση σε:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Προσθήκη στην Ουρά" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Επιλογές" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Αποθήκευση αυτών των ιδιοτήτων ως προκαθορισμένες" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Αντιγραφή αρχείου(ων)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Νέα ουρά" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Ουρά 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Ουρά 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Ουρά 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Ουρά 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Ουρά 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Αποθήκευση Περιγραφής" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Σχόλιο αρχείου/φακέλου" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Επεξεργασία σχολίου για:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Κωδικοποίηση:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr ";;;" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Αυτόματη Σύγκριση" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Δυαδική Μορφή" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Ακύρωση" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Αντιγραφή Block Δεξιά" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Αντιγραφή Block Δεξιά" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Αντιγραφή Block Αριστερά" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Αντιγραφή Block Αριστερά" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Επανάληψη" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Επανάληψη" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Επιλογή όλων" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Αναίρεση" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Αναίρεση" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "Εύρεση" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Εύρεση" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Εύρεση προηγούμενου" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Εύρεση προηγούμενου" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "Αντικατάσταση" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Αντικατάσταση" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Πρώτη Διαφορά" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Πρώτη Διαφορά" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Μετάβαση στη Γραμμή..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Μετάβαση στη γραμμή" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Αγνόηση Κεφαλαίων" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Αγνόηση Κενών" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Συνέχιση Κύλισης" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Τελευταία Διαφορά" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Τελευταία Διαφορά" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Διαφορές Γραμμής" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Επόμενη Διαφορά" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Επόμενη Διαφορά" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Άνοιγμα Αριστερά..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Άνοιγμα Δεξιά..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Χρώμα Παρασκηνίου" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Προηγούμενη Διαφορά" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Προηγούμενη Διαφορά" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Επαναφόρτωση" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Επαναφόρτωση" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Αποθήκευση" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Αποθήκευση ως..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Αποθήκευση ως..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Αποθήκευση Αριστερά" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Αποθήκευση Αριστερά" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Αποθήκευση Αριστερά Ως..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Αποθήκευση Αριστερά ως..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Αποθήκευση Δεξιά" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Αποθήκευση Δεξιά" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Αποθήκευση Δεξιά ως..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Αποθήκευση Δεξιά ως..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Σύγκριση" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Κωδικοποίηση" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Κωδικοποίηση" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Σύγκριση αρχείων" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Αριστερά" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Δεξιά" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "Ενέργειες" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Επιλογές" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Προσθήκη νέας συντόμευσης στην ακολουθία" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Αφαίρεση τελευταίας συντόμευσης από την ακολουθία" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Επιλογή συντόμευσης από τη λίστα των υπόλοιπων ελεύθερων διαθέσιμων κουμπιών" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Μόνο για αυτά τα στοιχεία ελέγχου" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Παράμετροι (κάθε μια σε ξεχωριστή γραμμή):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Συντομεύσεις:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Σχετικά" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "Διαμόρφωση" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Διαμόρφωση" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Αντιγραφή" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Αποκοπή" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "Εύρεση" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Εύρεση" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Εύρεση προηγούμενου" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Μετάβαση στη Γραμμή..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Επικόλληση" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Επανάληψη" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Επανάληψη" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "Αντικατάσταση" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Αντικατάσταση" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Επιλογή Όλων" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Επιλογή Όλων" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Αναίρεση" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Αναίρεση" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Κλείσιμο" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Έξοδος" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "Νέο" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Νέο" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Άνοιγμα" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Άνοιγμα" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Επαναφόρτωση" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Αποθήκευση ως..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Αποθήκευση ως" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Επεξεργαστής" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Άνοιγμα ως" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Αποθήκευση ως" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Επισήμανση Σύνταξης" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Τέλος Γραμμής" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "Η έκφραση εκτείνεται σε πολλές γραμμές" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Διάκριση Πεζών-Κεφαλαίων" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Αναζήτηση από το δρομέα" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Κανονικές εκφράσεις" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Το επιλεγμένο κείμενο μόνο" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Ολόκληρες λέξεις μόνο" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Ιδιότητα" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Αντικατάσταση με:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Αναζήτηση για:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Κατεύθυνση" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Εφαρμογή σε όλα τα τρέχοντα αντικείμενα" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Αποσυμπίεση αρχείων" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Αποσυμπίεση ονομάτων διαδρομών αν είναι αποθηκευμένα με τα αρχεία" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Αποσυμπίεση κάθε αρχειοθήκης σε ένα ξεχωριστό υποκατάλογο (όνομα της αρχειοθήκης)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Αντικατάσταση υπάρχοντων αρχείων" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Στον κατάλογο:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Εξαγωγή αρχείων που ταιριάζουν στη μάσκα αρχείου:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Συνθηματικό για κρυπτογραφημένα αρχεία:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Αναμονή..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Όνομα αρχείου:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Από:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Κάντε κλικ στο Κλείσιμο όταν το προσωρινό αρχείο είναι διαθέσιμο για διαγραφή!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Στο πλαίσιο" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Προβολή όλων" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Τρέχουσα Ενέργεια:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Από:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Σε:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Ιδιότητες" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένο" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Αποδοχή εκτέλεσης αρχείου σαν πρόγραμμα" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "Αναδρομή" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Ιδιότητες:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Ομάδα" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Λοιποί" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Κείμενο:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Περιεχόμενα:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Δημιουργήθηκε:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Εκτέλεση:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Διαδρομή:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Ομάδα" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Τελευταία προσπέλαση:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Τελευταία τροποποίηση:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Τελευταία αλλαγή κατάστασης:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Σύνδεσμοι:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Τύπος μέσου:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Οκταδικός:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Μέγεθος στο μέσο αποθήκευσης:" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Συμβολικός δεσμός στο:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Τύπος:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Όνομα" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Τιμή" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Ιδιότητες" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Κλείσιμο" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Τερματισμός" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Ξεκλείδωμα" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Ξεκλείδωμα Όλων" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Ξεκλείδωμα" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Αρχείο Αναφοράς" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "ID Διεργασίας" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Διαδρομή Εκτελέσιμου" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Ακύρωση" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Ακύρωση αναζήτησης και κλείσιμο" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Διαμόρφωση των ειδικών πλήκτρων" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Εμφάνιση σε λίστα" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Ακύρωση αναζήτησης, κλείσιμο και απελευθέρωση από τη μνήμη" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Για όλες τις άλλες \"Αναζητήσεις Αρχείων\", ακύρωση, κλείσιμο και απελευθέρωση από τη μνήμη" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Μετάβαση στο αρχείο" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Εύρεση Δεδομένων" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "Τελευταία Αναζήτηση" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Νέα Αναζήτηση" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Νέα Αναζήτηση (καθαρισμός φίλτρων)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Μετάβαση στη σελίδα \"Για Προχωρημένους\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Μετάβαση στη σελίδα \"Φόρτωμα/Αποθήκευση\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Μετάβαση στην Επόμενη Σελίδα" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Μετάβαση στη σελίδα \"Πρόσθετα\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Μετάβαση στην Προηγούμενη Σελίδα" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Μετάβαση στη σελίδα \"Αποτελέσματα\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Μετάβαση στη σελίδα \"Προκαθορισμένα\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Εκκίνηση" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "Προβολή" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Προσθήκη" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Φόρτωση" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Αποθήκευση" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Αποθήκευση με \"Εκκίνηση στον κατάλογο\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Αν αποθηκεύτηκε τότε \"Εκκίνηση στον κατάλογο\" θα επανέλθει όταν φορτώνεται το πρότυπο. Χρησιμοποιείστε το αν επιθυμείτε να διορθώσετε την αναζήτηση σε ένα συγκεκριμένο κατάλογο" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Χρήση Προτύπου" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Εύρεση αρχείων" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Με Διάκριση Πεζών-Κεφαλαίων" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Ημερομηνία από:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Ημερομηνία στο:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Μέγεθος από:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Μέγεθος σε:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Αναζήτηση στις αρχειοθήκες" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Εύρεση κειμένου στο αρχείο" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Ακολουθείστε τους Συμβολοδεσμούς" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Εύρεση αρχείων που ΔΕΝ περιέχουν το κείμενο" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Όχι παλαιότερο από:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Office XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Ανοικτές καρτέλες" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Αναζήτηση τμήματος του ονόματος αρχείου" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Συνήθης Φράση" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Αντικατάσταση από" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Επιλεγμένοι κατάλογοι και αρχεία" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Συνήθης Φράση" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Ώρα από:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ώρα στο:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Χρήση προσθέτου αναζήτησης:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "ίδιο περιεχόμενο" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "ίδιο άθροισμα ελέγχου" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "ίδιο όνομα" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Εύρεση διπλότυπων αρχείων:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "ίδιο μέγεθος" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Δεκαεξαδικός" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Εισαγωγή ονομάτων καταλόγων που θα έπρεπε να αποκλειστούν από την αναζήτηση, διαχωρισμένων με \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Εισαγωγή ονομάτων αρχείων τα οποία θα έπρεπε να εξαιρεθούν από αναζήτηση διαχωρισμένη με \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Εισαγωγή ονομάτων αρχείων διαχωρισμένα με \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Πεδίο" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Χειριστής" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Τιμή" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Κατάλογοι" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Αρχεία" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Εύρεση Δεδομένων" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Ιδιότητες" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Κωδικοποίηση:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Αποκλεισμός υποκαταλόγων" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Εξαίρεση αρχείων" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Μάσκα Αρχείου" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Εκκίνηση στον κατάλογο" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Αναζήτηση υποκαταλόγων:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Προηγούμενες αναζητήσεις:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "Ενέργεια" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Για όλα τα άλλα, ακύρωση, κλείσιμο και απελευθέρωση από τη μνήμη" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Άνοιγμα σε Νέα Καρτέλα(ες)" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Επιλογές" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Απομάκρυνση από τη λίστα" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "Αποτέλεσμα" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Εμφάνιση όλων των ευρεθέντων αντικειμένων" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Εμφάνιση στον Επεξεργαστή" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Εμφάνιση στον Προβολέα" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "Προβολή" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Για προχωρημένους" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Φόρτωση/Αποθήκευση" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Αποτελέσματα" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Στάνταρ" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Εύρεση" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Εύρεση" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "Ανάποδα" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Με Διάκριση Πεζών-Κεφαλαίων" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Συνήθεις Φράσεις" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Δεκαεξαδικός" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Ιστότοπος:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Συνθηματικό:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Όνομα Χρήστη:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Ανώνυμη σύνδεση" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Σύνδεση ως χρήστης:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Δημιουργία δεσμού τύπου hard link" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Προορισμός τον οποίο θα υποδείξει ο δεσμός" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Όνομα Δεσμού" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Εισαγωγή όλων!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Εισαγωγή επιλεγμένων" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Επιλέξτε τις καταχωρήσεις που επιθυμείτε να εισαγάγετε" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Όταν γίνεται κλικ σε ένα υπομενού, επιλέγεται ολόκληρο το μενού" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Κρατείστε πατημένο το CTRL και κάντε κλικ στις καταχωρήσεις για να επιλέξετε πολλές μαζί" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Αποθήκευση σε..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Αντικείμενο" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Όνομα Αρχείου" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Κάτω" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Κάτω" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Πάνω" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Πάνω" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Σχετικά" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Ενεργοποίηση Καρτέλας με βάση το Ευρετήριο" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Προσθήκη ονόματος αρχείου στη γραμμή εντολών" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Νέο περιστατικό αναζήτησης..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Προσθήκη διαδρομής και ονόματος αρχείου στη γραμμή εντολών" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Αντιγραφή διαδρομής στη γραμμή εντολών" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Προσθήκη Προσθέτου" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "Benchmark" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Σύντομη προβολή" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Σύντομη Προβολή" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Υπολογισμός του Κατειλημμένου Χώρου" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Αλλαγή Καταλόγου" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Αλλαγή Καταλόγου σε αρχικό κατάλογο" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Αλλαγή Καταλόγου σε γονικό κατάλογο" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Αλλαγή Καταλόγου στον κατάλογο του root" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Υπολογισμός αθροίσματος ελέγχου..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Επιβεβαίωση αθροίσματος ελέγχου..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Καθαρισμός αρχείου καταγραφών" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Καθαρισμός παραθύρου καταγραφής" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Κλείσιμο όλων των Καρτελών" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Κλείσιμο των διπλασιασμένων καταλόγων" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Κλείσιμο Καρτέλας" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Επόμενη Γραμμή Εντολών" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Ορισμός της γραμμής εντολών στην επόμενη εντολή στο ιστορικό" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Προηγούμενη Γραμμή Εντολών" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Ορισμός της γραμμής εντολών στην προηγούμενη εντολή στο ιστορικό" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Πλήρες" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Προβολή Στηλών" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Σύγκριση κατά Περιεχόμενα" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Σύγκριση Καταλόγων" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Σύγκριση Καταλόγων" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Ρύθμιση Προγραμμάτων Συμπίεσης" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "Διαμόρφωση του καταλόγου Hotlist" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Διαμόρφωση των Αγαπημένων Καρτελών" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Διαμόρφωση των Καρτελών Φακέλων" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Διαμόρφωση των ειδικών πλήκτρων" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Ρύθμιση Προσθέτων" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Αποθήκευση Θέσης" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Αποθήκευση Ρυθμίσεων" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Διαμόρφωση των αναζητήσεων" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Γραμμή εργαλείων..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Διαμόρφωση Υποδείξεων" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Ρύθμιση του Μενού Προβολής Δέντρου" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Ρύθμιση Χρωμάτων του Μενού Προβολής Δέντρου" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Εμφάνιση μενού περιεχομένων" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Αντιγραφή όλων των καρτελών στην απέναντι πλευρά" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Αντιγραφή όλων των εμφανισμένων στηλών" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Αντιγραφή Ονόματος Αρχείου(ων) με την Πλήρη Διαδρομή" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Αντιγραφή Ονόματος Αρχείου(ων) στο Πρόχειρο" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Αντιγραφή ονομάτων με UNC διαδρομή" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Αντιγραφή αρχείων χωρίς ερώτηση επιβεβαίωσης" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Αντιγραφή πλήρους διαδρομής του επιλεγμένου αρχείου(ων) χωρίς τελικό διαχωριστικό καταλόγου" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Αντιγραφή Πλήρους Διαδρομής του αρχείου(ων)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Αντιγραφή στο ίδιο πάνελ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Αντιγραφή" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Εμφάνιση Κατειλημμένου Χώρου" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Αποκοπή" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Εμφάνιση Παραμέτρων Εντολών" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Για όλες τις αναζητήσεις, ακύρωση, κλείσιμο και απελευθέρωση μνήμης" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Κατάλογος Ιστορικού" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Καταλογος &Hotlist" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Εκτέλεση εσωτερικής εντολής..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Επιλογή κάποιας εντολής και εκτέλεσή της" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Επεξεργασία" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Επεξεργασία Σχολίου..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Επεξεργασία νέου αρχείου" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Επεξεργασία πεδίου διαδρομής πάνω από τη λίστα αρχείων" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Εναλλαγή Πάνελ" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Εκτέλεση Σεναρίου εντολών" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Εξαγωγή Αρχείων..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Διαμόρφωση Συσχετισμών Αρχείων" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Συνδιασμός Αρχείων..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Εμφάνιση Ιδιοτήτων Αρχείων" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Διαμερισμός Αρχείου..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Επίπεδη Προβολή" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "Επίπεδη προβολή, μόνο επιλεγμένων" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Συγκέντρωση της γραμμής εντολών" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Εναλλαγή σημείου εστίασης" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Αλλαγή μεταξύ αριστερής και δεξιάς λίστας αρχείων" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Επικέντρωση σε προβολή δέντρου" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Εναλλαγή μεταξύ τρέχουσας λίστας αρχείων και προβολής δέντρου (αν είναι ενεργοποιημένη)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Δρομέας στον πρώτο φάκελο ή αρχείο" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Τοποθέτηση του δρομέα στο πρώτο αρχείο της λίστας" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Δρομέας στον τελευταίο φάκελο ή αρχείο" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Τοποθέτηση του δρομέα στο τελευταίο αρχείο της λίστας" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Τοποθέτηση του δρομέα στον επόμενο φάκελο ή αρχείο" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Τοποθέτηση του δρομέα στον προηγούμενο φάκελο ή αρχείο" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Δημιουργία σκληρού δεσμού..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Περιεχόμενα" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Λειτουργία οριζοντίων πάνελ" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Πληκτρολόγιο" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Σύντομη προβολή στο αριστερό πάνελ" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Προβολή στηλών στο αριστερό πάνελ" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Αριστερά = Δεξιά" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Επίπεδη Προβολή στο Αριστερό Πάνελ" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Άνοιγμα τη λίστα οδηγών στα αριστερά" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Ανάποδη σειρά στο αριστερό πάνελ" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Ταξινόμηση αριστερού πάνελ κατά Ιδιότητες" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Ταξινόμηση αριστερού πάνελ κατά Ημερομηνία" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Ταξινόμηση αριστερού πάνελ κατά Επέκταση" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Ταξινόμηση αριστερού πάνελ κατά Όνομα" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Ταξινόμηση αριστερού πάνελ κατά Μέγεθος" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Προβολή μικρογραφιών στο αριστερό πάνελ" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Φόρτωση καρτελών από Αγαπημένες Καρτέλες" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Φόρτωση Λίστας" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Φόρτωση λίστας αρχείων/φακέλων από το καθορισμένο αρχείο κειμένου" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Φόρτωση Επιλογής από το Πρόχειρο" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Φόρτωση Επιλογής από το Αρχείο..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Φόρτωση Καρτελών από το Αρχείο" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Δημιουργία Καταλόγου" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Επιλογή όλων με την Ίδια Επέκταση" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Επιλογή όλων των αρχείων με την ίδια ονομασία" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Επιλογή όλων των αρχείων με την ίδια ονομασία και επέκταση" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Επιλογή όλων με την ίδια διαδρομή" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Αντιστροφή Επιλογής" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Επιλογή Όλων" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Αποεπιλογή ενός Γκρουπ..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Επιλογή Γκρουπ..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Αποεπιλογή Όλων" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Ελαχιστοποίηση παραθύρου" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Μετακίνηση τρέχουσας καρτέλας στα αριστερά" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Μετακίνηση τρέχουσας καρτέλας στα δεξιά" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Εργαλείο Μετονομασίας Πολλών" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Σύνδεση στο Δίκτυο..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Αποσύνδεση από το Δίκτυο" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Δίκτυο Ταχεία Σύνδεση..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Νέα Καρτέλα" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Φόρτωση της Επόμενης Αγαπημένης Καρτέλας στη λίστα" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Μετάβαση στην Επόμενη Καρτέλα" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Δοκιμή ανοίγματος αρχειοθήκης" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Άνοιγμα του αρχείου της γραμμής εργαλείων" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Άνοιγμα Φακέλου σε Νέα Καρτέλα" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Άνοιγμα Οδηγού με βάση το Ευρετήριο" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Άνοιγμα Λίστας VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Προβολέας Λειτουργιών" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Επιλογές..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Συμπίεση Αρχείων..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Καθορισμός θέσης Διαμεριστή" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Επικόλληση" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Φόρτωση της Προηγούμενης Αγαπημένης Καρτέλας στη λίστα" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Αλλαγή στην προηγούμενη Καρτέλα" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Γρήγορο Φίλτρο" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Ταχεία Αναζήτηση" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Πάνελ Ταχείας Προβολής" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "Ανανέωση" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Επαναφόρτωση της τελευταίας φορτωμένης Αγαπημένης Καρτέλας" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Μετακίνηση" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Μετακίνηση/μετονομασία αρχείων χωρίς ερώτηση επιβεβαίωσης" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Μετονομασία" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Μετονομασία Καρτέλας" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Επαναποθήκευση στη τελευταία φορτωμένη Αγαπημένη Καρτέλα" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Επαναφορά Επιλογής" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Ανάποδη Σειρά" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Σύντομη προβολή στο δεξιό πάνελ" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Προβολή στηλών στο δεξιό πάνελ" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Αριστερά = Δεξιά" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Επίπεδη Προβολή στο Δεξιό Πάνελ" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Άνοιγμα της Λίστας Οδηγών στα δεξιά" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Επαναφορά σειράς στο δεξιό πάνελ" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Ταξινόμηση δεξιού πάνελ κατά Ιδιότητες" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Ταξινόμηση δεξιού πάνελ κατά Ημερομηνία" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Ταξινόμηση δεξιού πάνελ κατά Επέκταση" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Ταξινόμηση δεξιού πάνελ κατά Όνομα" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Ταξινόμηση δεξιού πάνελ κατά Μέγεθος" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Προβολή μικρογραφιών στο δεξιό πάνελ" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Εκτέλεση Τερματικού" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Αποθήκευση τρέχουσας καρτέλας σε μία Νέα Αγαπημένη Καρτέλα" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Αποθήκευση όλων των εμφανιζόμενων στηλών σε αρχείο" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Αποθήκευση Επιλογής" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Αποθήκευση επιλογής στο αρχείο..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Αποθήκευση Καρτελών στο Αρχείο" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Αναζήτηση..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Όλες οι καρτέλες κλειδωμένες με Κατάλογο ανοικτό σε Νέες Καρτέλες" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Ορισμός όλων των καρτελών σε Κανονικές" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Ορισμός όλων των καρτελών σε Κλειδωμένες" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Όλες οι καρτέλες Κλειδωμένες με ελέυθερες τις Αλλαγές Καταλόγου" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Αλλαγή Ιδιοτήτων..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Κλειδωμένο με Καταλόγους Ανοικτούς σε νέες Καρτέλες" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Κλειδωμένο" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Κλειδωμένο με Επιτρεπόμενες Αλλαγές Καταλόγων" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Άνοιγμα με χρήση των συσχετισμών του συστήματος" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Εμφάνιση μενού κουμπιών" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Εμφάνιση ιστορικού γραμμής εντολών" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Μενού" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Εμφάνιση Κρυφών Αρχείων/Αρχείων Συστήματος" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "Εμφάνιση Λίστας Καρτελών" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "Εμφάνιση λίστας όλων των ανοικτών καρτελών" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Κατάταξη κατά Ιδιότητες" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ταξινόμηση κατά Ημερομηνία" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ταξινόμηση κατά Επέκταση" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ταξινόμηση κατά Όνομα" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ταξινόμηση κατά Μέγεθος" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Άνοιγμα της Λίστας Οδηγών" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Ενεργοποίηση/Απενεργοποίηση αρχείου λίστας αγνόησης για να μην φαίνονται ονόματα αρχείου" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Δημιουργία Συμβολοδεσμού..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Σύγχρονη πλοήγηση" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Σύγχρονη αλλαγή καταλόγου και στα δύο πλαίσια" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Συγχρονισμός καταλόγων..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Στόχος = Πηγή" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Δοκιμή Αρχείου(ων)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Μικρογραφίες" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Προβολή Μικρογραφιών" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Εναλλαγή σε τερματικό πλήρους οθόνης" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Μεταφορά του καταλόγου κάτω από τον δρομέα στο αριστερό παράθυρο" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Μεταφορά του καταλόγου κάτω από τον δρομέα στο δεξιό παράθυρο" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Πάνελ Προβολής Δέντρου" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Ταξινόμηση βάσει παραμέτρων" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Αποεπιλογή Όλων με τη ίδια Επέκταση" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Αποεπιλογή όλων των αρχείων με την ίδια ονομασία" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Αποεπιλογή όλων των αρχείων με την ίδια ονομασία και επέκταση" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Αποεπιλογή όλων με την ίδια διαδρομή" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Προβολή" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Εμφάνιση ιστορικού εμφανισμένων διαδρομών για ενεργή προβολή" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Μετάβαση στην επόμενη καταχώρηση στο ιστορικό" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Μετάβαση στην προηγούμενη καταχώρηση στο ιστορικό" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Προβολή αρχείου καταγραφών" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Προβολή τρεχόντων περιστατικών αναζήτησης" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Επισκεφθείτε την Ιστοσελίδα του Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Ασφαλής Διαγραφή" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Εργασία με Κατάλογο Hotlist και παραμέτρους" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Έξοδος" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Κατάλογος" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Τερματικό" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Εμφάνιση τρέχοντος καταλόγου του δεξιού πάνελ στο αριστερό πάνελ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Μετάβαση στον αρχικό κατάλογο" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Μετάβαση στον κατάλογο root" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Μετάβαση στον γονικό κατάλογο" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Εμφάνιση τρέχοντος καταλόγου του αριστερού πάνελ στο δεξιό πάνελ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Διαδρομή" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Αντιγραφή..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Δημιουργία δεσμού..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Καθαρισμός" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Κρύψιμο" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Μετακίνηση..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Δημιουργία Συμβολοδεσμού..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Επιλογές Καρτελών" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Επαναφορά" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Εκκίνηση" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "Εντολές" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "Διαμόρφωση" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Αγαπημένα" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Αρχεία" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Βοήθεια" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Επιλογή" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Δίκτυο" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Εμφάνιση" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Επιλογές Καρτελών" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Καρτέλες" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Επιλέξτε την εσωτερική σας εντολή" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Παλαιού τύπου ταξινόμηση" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Παλαιού τύπου ταξινόμηση" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Επιλογή όλων των κατηγοριών εξ' ορισμού" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Επιλογή:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Κατηγορίες:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Όνομα εντολής:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "Φίλτρο:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Συμβουλή:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Ειδικό Πλήκτρο:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "Κατηγορία" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "Βοήθεια" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Συμβουλή" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Προσθήκη" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "Βοήθεια" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Προσδιορισμός..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Με διάκριση πεζών -κεφαλαίων" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Αγνόηση χρήσης τονισμού και διφθόγγων" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Ιδιότητες:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Μάσκα Εισαγωγής:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ή επιλέξτε τον προκαθορισμένο τύπο επιλογής:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Δημιουργία νέου καταλόγου" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "Προχωρημένη σύνταξη" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Εισάγετε νέο όνομα καταλόγου:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Νέο Μέγεθος" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Ύψος:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Ποιότητα συμπίεσης του Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Πλάτος :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Ύψος" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Πλάτος" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Επέκταση" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Όνομα αρχείου" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Καθαρισμός" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Καθαρισμός" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "Κλείσιμο" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Διαμόρφωση" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Μετρητής" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Μετρητής" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Ημερομηνία" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Ημερομηνία" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Διαγραφή" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Λίστα Ορισμάτων τύπου Drop Down" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Επεξεργασία ονομάτων..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Επεξεργασία Τρεχόντων Νέων Ονομάτων..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Επέκταση" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Επέκταση" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Επεξεργασία" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Επίκληση Μενού Σχετικής Διαδρομής" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Φόρτωση Τελευταίου Ορίσματος" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Φόρτωμα ονομάτων από το αρχείο..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Φόρτωση Ορίσματος ανά Όνομα ή Ευρετήριο" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Φόρτωση Ορίσματος 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Φόρτωση Ορίσματος 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Φόρτωση Ορίσματος 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Φόρτωση Ορίσματος 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Φόρτωση Ορίσματος 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Φόρτωση Ορίσματος 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Φόρτωση Ορίσματος 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Φόρτωση Ορίσματος 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Φόρτωση Ορίσματος 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Όνομα αρχείου" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Όνομα αρχείου" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Μετονομασία" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Επαναφορά όλων" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Αποθήκευση" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Αποθήκευση Ως..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Εμφάνιση Μενού Ορισμάτων" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Ταξινόμηση" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Χρόνος" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Χρόνος" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Εμφάνιση Μετονομασίας Αρχείου Καταγραφής" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "Multi-Rename Tool" msgstr "Μετονομασία Πολλών" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Με διάκριση πεζών - κεφαλαίων" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Αποτέλεσμα Αρχείου Καταγραφών" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Συμπλήρωση" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Αντικατάσταση μια φορά μόνο σε κάθε αρχείο" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Συνήθεις φράσεις" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Χρήση αντικατάστασης" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Μετρητής" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Αναζήτηση && Αντικατάσταση" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Μάσκα" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Προρύθμιση" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Επέκταση" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Έυρεση..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Διάστημα" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Όνομα Αρχείου" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Αντικατάσταση..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Αριθμός Εκκίνησης" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Πλάτος" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Ενέργειες" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Επεξεργασία" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Παλιό Όνομα Αρχείου" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Νέο Όνομα Αρχείου" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Διαδρομή Αρχείου" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Κάντε κλικ στο ΟΚ όταν έχετε κλείσει τον επεξεργαστή για να φορτώσετε τα αλλαγμένα ονόματα!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Επιλέξτε μία εφαρμογή" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Προσαρμοσμένη εντολή" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Αποθήκευση συσχετισμού" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Αποθήκευση της επιλεγμένης εφαρμογής ως εξ' ορισμού ενέργια" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Τύπος αρχείου προς άνοιγμα: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Πολλαπλά ονόματα αρχείων" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Πολλαπλά URIs" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Μονό όνομα αρχείου" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Μονό URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Εφαρμογή" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Βοήθεια" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Επιλογές" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Παρακαλώ επιλέξτε μία από τις υποσελίδες, αυτή η σελίδα δεν περιέχει κάποιες ρυθμίσεις." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Αντιγραφή" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Διαγραφή" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Άλλα..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Μετονομασία" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "ID's που χρησιμοποιούνται με το cm_OpenArchive που αναγνωρίζει το αρχείο από το περιεχόμενό του και όχι από την επέκταση του:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Επιλογές:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Λειτουργία ανάλυσης μορφής:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Ενεργοποιημένο" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Λειτουργία Αποσφαλμάτωσης" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Εμφάνιση αποτελέσματος στο τερματικό" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Χρήση ονόματος αρχείου χωρίς επέκταση σαν λίστα" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Ιδιότητες αρχείου Unix" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix οριοθέτης διαδρομής \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Ιδιότητες αρχείου Windows" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows οριοθέτης διαδρομής \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Προσθήκη:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Πρόγραμμα Συμπίεσης:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Διαγραφή:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Περιγραφή:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Επέκταση:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Εξαγωγή:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Εξαγωγή χωρίς διαδρομή:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Θέση ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Διάστημα Αναζήτησης ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Λίστα:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Εφαρμογές Συμπίεσης:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Λίστα και τέλος (προαιρετικά):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Μορφή Λίστας:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Λίστα και εκκίνηση (προαιρετικά):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Γραμμή εισαγωγής συνθηματικού:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Δημιουργία αυτοεξαγώμενου αρχείου:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Δοκιμή:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Αυτόματη Διαμόρφωση" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Απενεργοποίηση Όλων" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Απόρριψη Αλλαγών" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Ενεργοποίηση Όλων" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Εισάγετε..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Ταξινόμηση Προγραμμάτων Συμπίεσης" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Επιπλέον" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Γενικά" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Όταν μέγεθος, ημερομηνία ή ιδιότητες αλλάζουν" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Για τις ακόλουθες διαδρομές και τους υποκαταλόγους τους:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Όταν αρχεία δημιουργούνται, διαγράφονται ή μετονομάζονται" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Όταν η εφαρμογή είναι στο &παρασκήνιο" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Απενεργοποίηση αυτόματης ανανέωσης" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Ανανέωση λίστας αρχείων" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Εμφάνιση πάντα εικονιδίου στο πλαίσιο συστήματος" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Αυτόματη απόκρυψη μη προσαρτημένων οδηγών" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Μετακίνηση εικονιδίου στο πλαίσιο συστήματος όταν γίνεται ελαχιστοποίηση" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Επιτρέψτε μόνο ένα αντίγραφο του DC κάθε φορά" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Εδώ μπορείτε να εισάγετε έναν ή περισσότερους οδηγούς ή σημεία προσάρτησης, διαχωρισμένα με \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Μαύρη Λίστα Οδηγών" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Μέγεθος Στηλών" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Εμφάνιση επεκτάσεων αρχείου" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "ευθυγραμμισμένο (με Καρτέλα)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "αμέσως μετά το όνομα αρχείου" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Αυτόματα" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Σταθερή Άθροιση Στηλών" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Σταθερό Πλάτος Στηλών" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Χρήση Διαβαθμισμένου Σημαντή" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Δυαδική Μορφή" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Λειτουργία Βιβλίου" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Λειτουργία Εικόνας" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Λειτουργία Κειμένου" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Προστέθηκαν:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Παρασκήνιο:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Κείμενο:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Κατηγορία:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Διαγραμμένα:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Λάθος:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Παρασκήνιο 1:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Παρασκήνιο 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Πισινό Χρώμα Σημαντή:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Μπροστινό Χρώμα Σημαντή:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "Δείκτης και Χρώμα ορίου:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Πληροφορίες:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Αριστερά:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Τροποποιήθηκε:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Τροποποιήθηκε:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Δεξιά:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Επιτυχία:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Άγνωστο:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Κατάσταση" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Στοίχιση τίτλων στήλης σαν τιμές" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Αποκοπή κειμένου στο πλάτος της στήλης" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Άυξηση πλάτους κελιού αν το κείμενο δε χωραέι στη στήλη" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Οριζόντιες γραμμές" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Κάθετες γραμμές" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Αυτόματη συμπλήρωση στηλών" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Εμφάνιση πλέγματος" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Αυτόματη Ρύθμιση Μεγέθους Στηλών" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Αυτόματη προσαρμογή μεγέθους στήλης:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Ιστορικό Γραμμής Εντολών" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Ιστορικό Καταλόγου" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Ιστορικό μάσκας αρχείου" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Καρτέλες Φακέλων" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Αποθήκευση Ρυθμίσεων" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Αναζήτηση/Αντικατάσταση Ιστορικό" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Κατάσταση του Κυρίου Παραθύρου" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Κατάλογοι" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Τοποθεσία των αρχείων επεξεργασίας" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Αποθήκευση κατά την έξοδο" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Καθορισμός σειράς της σειράς ρύθμισης στο αριστερό δέντρο" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Κατάσταση Δέντρου όταν γίνεται είσοδος στη σελίδα διαμόρφωσης" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Καθορισμός στη γραμμή εντολών" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Μαρκαδόροι:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Θέμα εικονιδίων:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Μνήμη Μικρογραφιών:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Κατάλογος Προγράμματος (φορητή έκδοση)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Αρχικός Κατάλογος Χρήστη" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Μετάβαση στον ορισμό προκαθορισμένου" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Νέο" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Επόμενο" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Προηγούμενο" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Αποθήκευση ως" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Αποθήκευση" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Επιτρέψτε Επιχρωμάτωση" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Όταν γίνεται κλικ για κάποια αλλαγή, εφαρμογή της αλλαγής σε όλες τις στήλες" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Γενικά" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Όρια κέρσορα" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Χρήση Κέρσορα Πλαισίου" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Χρήση Ανενεργού Χρώματος Επιλογής" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Χρήση Ανάστροφης Επιλογής" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Χρήση προσαρμοσμένης γραμματοσειράς και χρώματος για αυτή την προβολή" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION" msgid "BackGround:" msgstr "Παρασκήνιο:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION" msgid "Background 2:" msgstr "Παρασκήνιο 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Προβολή Στηλών:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Όνομα Τρέχουσας Στήλης]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Χρώμα Κέρσορα:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Κείμενο Κέρσορα:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "Σύστημα Αρχείων:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION" msgid "Font:" msgstr "Γραμματοσειρά:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION" msgid "Text Color:" msgstr "Χρώμα Κειμένου:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Ανενεργό Χρώμα Κέρσορα:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Χρώμα Ανενεργού Επιλογέα:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Χρώμα Επιλογέα:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση των διαφόρων ρυθμίσεων." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Ρυθμίσεις για στήλη:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION" msgid "Add column" msgstr "Προσθήκη στήλης" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Θέση του πάνελ πλαισίου μετά την σύγκριση:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Προσθήκη καταλόγου του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Προσθήκη καταλόγων των ενεργών && ανενεργών πλαισίων" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Προσθήκη καταλόγου στην οποία θα γίνει πλοήγηση" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgid "Add a copy of the selected entry" msgstr "Προσθήκη ενός αντιγράφου της επιλεγμένης καταχώρισης" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Προσθήκη τρεχόντων επιλεγμένων ή ενεργών καταλόγων του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgid "Add a separator" msgstr "Προσθήκη ενός διαχωριστικού" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Προσθήκη ενός υπομενού" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Προσθήκη καταλόγου που θα πληκτρολογήσω" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Σύμπτυξη όλων" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Σύμπτυξη αντικειμένου" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Αποκοπή επιλογής καταχωρήσεων" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Διαγραφή όλων!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Διαγραφή επιλεγμένου αντικειμένου" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Διαγραφή υπομενού με όλα του τα στοιχεία" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Διαγραφή μόνο του υπομενού αλλά διατήρηση των στοιχείων" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Ανάπτυξη αντικειμένου" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Εστίαση στο παράθυρο δέντρου" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Μετάβαση στο πρώτο αντικείμενο" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Μετάβαση στο τελευταίο αντικείμενο" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Μετάβαση στο επόμενο αντικείμενο" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Μετάβαση στο προηγούμενο αντικείμενο" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Εισαγωγή καταλόγου του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Εισαγωγή καταλόγων των ενεργών && ανενεργών πλαισίων" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Εισαγωγή καταλόγου όπου θα γίνει πλοήγηση" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Εισαγωγή ενός αντιγράφου της επιλεγμένης καταχώρησης" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Εισαγωγή του τρέχοντος επιλεγμένου ή ενεργού καταλόγου του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Εισαγωγή διαχωριστικού" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Εισαγωγή υπομενού" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Εισαγωγή καταλόγου που θα πληκτρολογήσω" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Μετακίνηση στο επόμενο" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Μετακίνηση στο προηγούμενο" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Άνοιγμα όλων των κλάδων" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Επικόλληση αυτού που είχε αποκοπεί" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Αναζήτηση &&αντικατάσταση στη διαδρομή" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Αναζήτηση &&αντικατάσταση ταυτόχρονα σε διαδρομή και στόχο" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Αναζήτηση &&αντικατάσταση στη διαδρομή στόχου" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Προσαρμογή διαδρομής" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Προσαρμογή διαδρομής στόχου" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Προσθήκη..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Αντίγραφο Ασφαλείας..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Διαγραφή..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Εξαγωγή..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Εισαγωγή..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Εισάγετε..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Διάφορα..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλου στόχου" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Ταξινόμηση..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Κατά την προσθήκη καταλόγου, προσθήκη επίσης στόχου" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Ανάπτυξη Δέντρου Πάντα" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Εμφάνιση μόνο έγκυρων μεταβλητών περιβάλλοντος" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Στο αναδυόμενο παράθυρο, εμφάνιση [διαδρομής επίσης]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Όνομα, α-ω" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Όνομα, α-ω" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Κατάλογος Hotlist (αναδιάταξη με μεταφορά && απόθεση)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Άλλες Επιλογές" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Όνομα:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Διαδρομή:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "&Target:" msgstr "Στόχος:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...τρέχον επίπεδο του επιλεγμένου αρχείου(ων) μόνο" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Σάρωση όλων των διαδρομών των hotdir για επικύρωση αυτών που πραγματικά υπάρχουν" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Σάρωση όλων των διαδρομών των hotdir και στόχων για επικύρωση αυτών που πραγματικά υπάρχουν" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "σε ένα αρχείου καταλόγου Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Μετάβαση σε διαμόρφωση πληροφοριών σχετικές με TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Μετάβαση σε διαμόρφωση πληροφοριών σχετικές με TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirΜενούΔοκιμών" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "από ένα αρχείο καταλόγου Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "από \"wincmd.ini\" του TC" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "Πλοήγηση..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Επαναφορά ενός αντιγράφου ασφαλείας της Hotlist Καταλόγων" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Αποθήκευση ενός αντιγράφου ασφαλείας της τρέχουσας Hotlist Καταλόγων" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Αναζήτηση και αντικατάσταση..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...όλα, από το Α ως το Ω!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...μονό γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...περιεχόμενα ενός ( ή πολλών) υπομενού επιλεγμένα, όχι δευτερεύοντα επίπεδα" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...περιεχόμενα του(των) υπομενού επιλεγμένα και όλων των δευτερευόντων επιπέδων" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Μενού αποτελεσμάτων Δοκιμών" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Προσαρμογή διαδρομής" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Προσαρμογή διαδρομής στόχου" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Προσθήκη από το κύριο πάνελ" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Εφαρμογή τρεχόντων ρυθμίσεων στον κατάλογο hotlist" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Πηγή" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Στόχος" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Διαδρομές" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Τρόπος για καθορισμό διαδρομών κατά την προσθήκη τους:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Εκτέλεση για τη διαδρομή:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Διαδρομή σχετικά διαμορφωμένη σύμφωνα με το:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Από όλες τις υποστηριζόμενες μορφές, ερώτηση για ποια θα χρησιμοποιηθεί κάθε φορά" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Κατά την αποθήκευση κειμένου Unicode, αποθήκευση σε μορφή UTF8 (αλλιώς θα είναι σε μορφή UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Όταν γίνεται εναπόθεση κειμένου, δημιουργία ονόματος κειμένου αυτόματα (αλλιώς θα ερωτηθεί ο χρήστης)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Εμφάνιση διαλόγου επιβεβαίωσης μετά την απόθεση" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Όταν μεταφέρεται και αποτίθεται κείμενο στα πάνελ:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Τοποθετείστε την πιο επιθυμητή μορφή στην κορυφή της λίστας (χρήση μεταφοράς και απόθεσης)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(αν η πιο επιθυμητή δεν είναι παρούσα, θα χρησιμοποιηθεί η δεύτερη και ούτω καθεξής)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(δεν θα λειτουργήσει με μερικές εφαρμογές, οπότε δοκιμάστε να το αποεπιλέξετε αν υπάρχει πρόβλημα)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Εμφάνιση συστήματος αρχείων" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Εμφάνιση Ελεύθερου διαστήματος" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Εμφάνιση ετικέτας" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Λίστα Οδηγών" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Αυτόματη Εσοχή" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Επιτρέπει τη δημιουργία εσοχής καρέ, όταν νέα γραμμή δημιουργείται με το <Enter>, με την ίδια ποσότητα αρχικού λευκού διαστήματος σαν προηγούμενη γραμμή" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "Αναίρεση Γκρουπ" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "Όλες οι συνεχείς αλλαγές του ίδιου τύπου θα επεξεργαστούν σε μία εκτέλεση αντί αναίρεσης/επανάληψης κάθε μίας" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Δεξί περιθώριο:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Κέρσορας μετά το τέλος γραμμής" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Επιτρέπει στο καρέ να πάει σε ένα κενό διάστημα πέρα του τέλους γραμμής" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Εμφάνιση ειδικών χαρακτήρων" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Εμφάνιση ειδικών χαρακτήρων για διαστήματα και στηλοθέτες" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Έξυπνες Καρτέλες" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Όταν χρησιμοποιείται το πλήκτρο <Tab> , το καρέ πηγαίνει στον επόμενο χαρακτήρα, που δεν είναι διάστημα, της προηγούμενης γραμμής" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Μπλοκ Εσοχών Καρτέλας" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Όταν είναι ενεργά τα <Tab> και <Shift+Tab> λειτουργούν σαν μπλοκ εσοχών, άρση εσοχής όταν έχει επιλεχθεί κείμενο" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Χρήση διαστημάτων αντί χαρακτήρων καρτελών" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Μετατροπή χαρακτήρων καρτελών σε ένα προκαθορισμένο νούμερο χαρακτήρων διαστημάτων (όταν γίνεται είσοδος)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Διαγραφή διαστημάτων στο τέλος" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Αυτόματη διαγραφή διαστημάτων στο τέλος, μόνο για τις γραμμές που έχουν υποστεί επεξεργασία" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Παρακαλώ σημειώσατε οτι η ιδιότητα \"Smart Tabs\" έχει προτεραιότητα σε σχέση με τη στηλοθέτηση που θα εκτελεστεί" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Ιδιότητες Εσωτερικού επεξεργαστή" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Μπλοκ εσοχών:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Φάρδος Καρτέλας:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Παρακαλώ σημειώσατε οτι η ιδιότητα \"Smart Tabs\" έχει προτεραιότητα σε σχέση με τη στηλοθέτηση που θα εκτελεστεί" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Παρασκήνιο" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Παρασκήνιο" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Επαναφορά" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Ιδιότητες Στοιχείων" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Προσκήνιο" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Προσκήνιο" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Επιλογέας κειμένου" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Χρήση (και διαμόρφωση) ρυθμίσεων του ολικού σχήματος" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Χρήση τοπικών ρυθμίσεων σχήματος" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Έντονη Γραφή" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Πλάγια" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Μεσογράμμιση" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Υπογράμμιση" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Προσθήκη..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Διαγραφή..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Εισαγωγή/Εξαγωγή" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Εισάγετε..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Ταξινόμηση..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Κανένα" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Ανάπτυξη Δέντρου Πάντα" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Όχι" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Αριστερά" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Δεξιά" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Λίστα Αγαπημένων Καρτελών (αναδιάταξη με μεταφορά && απόθεση)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Άλλες Επιλογές" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Τι να αποκατασταθεί που για την επιλεγμένη καταχώρηση:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Υπάρχουσες καρτέλες προς φύλαξη:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Αποθήκευση ιστορικού καταλόγου:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Καρτέλες αποθηκευμένες αριστερά να αποκατασταθούν σε :" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Καρτέλες αποθηκευμένες δεξιά να αποκατασταθούν σε :" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "ένα διαχωριστικό" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Προσθήκη διαχωριστικού" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "υπομενού" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Προσθήκη υπο-μενού" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Σύμπτυξη όλων" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...τρέχον επίπεδο του επιλεγμένου αρχείου(ων) μόνο" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Αποκοπή" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "διαγραφή Όλων!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "υπομενού με όλα του τα στοιχεία" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "μόνο υπομενού αλλά διατήρηση των στοιχείων" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "επιλεγμένο αντικείμενο" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Διαγραφή επιλεγμένου αντικειμένου" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Εξαγωγή επιλογής στο legacy .tab αρχείο(α)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "ΑγαπημένεςΚαρτέλεςΤεστΜενού" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Εισαγωγή legacy .tab αρχείου(ων) βάσει της προκαθορισμένης ρύθμισης" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση σε ένα υπομενού" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Εισαγωγή διαχωριστικού" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Εισαγωγή υπο-μενού" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Άνοιγμα όλων των κλάδων" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Επικόλληση" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...όλα, από το Α ως το Ω!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...μονό γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ταξινόμηση μονού γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...περιεχόμενα ενός ( ή πολλών) υπομενού επιλεγμένα, όχι δευτερεύοντα επίπεδα" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...περιεχόμενα του(των) υπομενού επιλεγμένα και όλων των δευτερευόντων επιπέδων" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Μενού αποτελεσμάτων Δοκιμών" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Κλωνοποίηση" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Επιλέξτε την εσωτερική σας εντολή" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "Do&wn" msgstr "Κάτω" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Επεξεργασία" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Εισάγετε" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Εισάγετε" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Μετονομασία" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Βοηθός υπενθύμισης μεταβλητής" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Πάνω" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Αρχική διαδρομή αυτής εντολής. Ποτέ μην βάζετε αυτή τη γραμμή σε εισαγωγικά." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Όνομα αυτής της ενέργειας. Ποτέ δεν μεταφέρεται στο σύστημα, είναι μόνο ένα όνομα απομνημόνευσης επιλεγμένο από εσάς, για σας" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Παράμετρος που θα μεταφερθεί στην εντολή. Μακρύ όνομα αρχείου με κενά θα μπει σε εισαγωγικά (χειροκίνητη εισαγωγή)." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Εντολή προς εκτέλεση. Ποτέ να μην μπαίνει σε εισαγωγικά αυτή η γραμμή." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Περιγραφή Ενέργειας" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Ενέργειες" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Επεκτάσεις" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Μπορεί να ταξινομηθεί με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Τύποι Αρχείων" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Εικονίδιο" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Οι Ενέργειες μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Οι Επεκτάσεις μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Ο τύποι αρχείων μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action &name:" msgstr "Όνομα Ενέργειας:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Παράμετροι:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Αρχική Διαδρομή:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Προσαρμογή με..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Προσαρμογή" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Άνοιγμα στον Επεξεργαστή" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Επεξεργασία με..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Εξαγωγή αποτελέσματος από την εντολή" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Άνοιγμα σε Εσωτερικό Επεξεργαστή" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Άνοιγμα με Εσωτερικό Προβολέα" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Άνοιγμα με..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "Εκτέλεση σε Τερματικό" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Προβολή" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "Άνοιγμα με Προβολέα" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Προβολή με..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Επιλέξτε με για αλλαγή εικόνας!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Εφαρμογή τρεχουσών ρυθμίσεων σε όλα τα τρέχοντα διαμορφωμένα ονόματα αρχείων και διαδρομών" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Προκαθορισμένες ενέργειες περιεχομένου (Προβολή/Επεξεργασία)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "Εκτέλεση μέσω κελύφους" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Μενού εκτεταμένων περιεχομένων" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Ρυθμίσεις Συσχετισμού Αρχείων" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Πρόταση προσθήκης επιλογής στο συσχετισμό αρχείου όταν δεν συμπεριλαμβάνεται ήδη" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Όταν γίνεται πρόσβαση του συσχετισμού αρχείου, πρόταση για προσθήκη του τρέχοντος επιλεγμένου αρχείου αν δεν έχει ήδη συμπεριληφθεί σε ένα ρυθμισμένο τύπο αρχείου" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "Εκτέλεση με τερματικό και κλείσιμο" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "Εκτέλεση με τερματικό και παραμονή ανοικτό" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Εντολές" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Εικονίδια" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Διαδρομές Εκκίνησης" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Αντικείμενα Εκτεταμένων Ρυθμίσεων:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Διαδρομές" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Τρόπος για τον καθορισμό διαδρομών κατά την προσθήκη στοιχείων για εικονίδια, εντολές και διαδρομές εκκίνησης:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Εκτέλεση για αρχεία και διαδρομές:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Διαδρομή σχετικά διαμορφωμένη σύμφωνα με το:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION" msgid "Show confirmation window for:" msgstr "Εμφάνιση παραθύρου επιβεβαίωσης για:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Εργασία Αντιγραφής" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Λειτουργία διαγραφής" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Διαγραφή στον κάδο ανακύκλωσης (Το Shift πλήκτρο αναιρεί αυτή τη ρύθμιση)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Λειτουργία Διαγραφής στον κάδο" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Κατέβασμα σημαίας μόνο για ανάγνωση" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Λειτουργία Μετακίνησης" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Επεξεργασία σχολίων για αρχεία/φακέλους" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Επιλογή ονόματος αρχείου χωρίς επέκταση κατά την μετονομασία" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Εμφάνιση καρτέλας επιλογής πάνελ στο διάλογο αντιγραφής/μετακίνησης" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Παράβλεψη των λαθών εργασιών αρχείων και καταγραφή τους στο παράθυρο καταγραφής" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Λειτουργία ελέγχου αρχείου" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Επιβεβαίωση εργασίας υπολογισμού αθροιστικού ίχνους" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Εκτέλεση λειτουργιών" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Περιβάλλον Χρήστη" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Μέγεθος ενδιάμεσης μνήμης για εργασίες αρχείων (σε KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Μέγεθος ενδιάμεσης μνήμης για υπολογισμούς αθροιστικών ιχνών (σε KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Εμφάνιση προόδου εργασιών αρχικά σε" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION" msgid "Duplicated name auto-rename style:" msgstr "Στυλ αυτόματης μετονομασίας διπλότυπων:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Αριθμός περασμάτων ασφαλούς διαγραφής:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Επαναφορά στα προκαθορισμένα του DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Επιτρέψτε Επιχρωμάτωση" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Χρήση Πλαισιακού Κέρσορα" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Χρήση Χρώματος Ανενεργούς Επιλογής" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Χρήση Ανάποδης Επιλογής" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Όρια Κέρσορα" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Τρέχουσα Διαδρομή" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Παρασκήνιο:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Παρασκήνιο 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Χρώμα Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Κείμενο Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Ανενεργό Χρώμα Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Χρώμα Ανενεργού Επιλογέα:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "Επίπεδο Φωτεινότητας του ανενεργού πάνελ:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Χρώμα Επιλογέα:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Παρασκήνιο:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Χρώμα Κειμένου:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Ανενεργό Παρασκήνιο:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Χρώμα Ανενεργού Κειμένου:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση των διαφόρων ρυθμίσεων." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Χρώμα Κειμένου:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Όταν φορτώνεται η αναζήτηση αρχείων, καθαρισμός του φίλτρου μάσκας αρχείου" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Αναζήτηση για τμήμα ονόματος αρχείου" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Εμφάνιση μπάρας μενού στην \"Αναζήτηση Αρχείων\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Αναζήτηση Κειμένου στα αρχεία" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Αναζήτηση Αρχείου" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Τρέχοντα φίλτρα με \"Νέα Αναζήτηση\" κουμπί:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Εξ'ορισμού πρότυπο αναζήτησης:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Χρήση απεικόνισης στη μνήμη για αναζήτηση κειμένου στα αρχεία" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Χρήση stream για αναζήτηση κειμένου στα αρχεία" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Προκαθορισμένα" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Μορφοποίηση" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Χρήση Προσωποποιημένων Συντομεύσεων:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ταξινόμηση" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Διάκριση πεζών-κεφαλαίων:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Μη Έγκυρος Τύπος" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Μορφοποίηση Ημερομηνίας και Χρονιάς:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Μορφή μεγέθους Αρχείου:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "Σε μορφή Υποσέλιδου:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "Σε μορφή Επικεφαλίδας:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megabyte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Εισαγωγή νέων αρχείων:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Είδος αρχείου Μεγέθους λειτουργίας:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Ταξινόμηση καταλόγων:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Μέθοδος Ταξινόμησης:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Μετακίνηση ενημερωμένων αρχείων:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Προσθήκη" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Βοήθεια" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Ενεργοποίηση αλλαγής στο &γονικό φάκελο όταν γίνεται διπλό κλικ πάνω σε ένα κενό τμήμα της προβολής αρχείου" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Να μην γίνει φόρτωση αρχείου μέχρι να ενεργοποιηθεί η καρτέλα" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Εμφάνιση τετράγωνων αγκυλών([ ]) γύρω από τους καταλόγους" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Υπογράμμιση νέων και ενημερωμένων αρχείων" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Ενεργοποίηση εδώ και μετονομασία όταν γίνεται κλικ δύο φορές σε ένα όνομα" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Φόρτωση λίστας αρχείων σε ξεχωριστή γραμμή" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Φόρτωση εικονιδίων μετά τη λίστα αρχείων" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Εμφάνιση αρχείων συστήματος και κρυφών" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Όταν επιλέγονται αρχεία με το <SPACEBAR>, μετακίνηση κάτω στο επόμενο αρχείο (όπως με το <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Φίλτρο σε στυλ Windows όταν σημειώνονται αρχεία (\"*.*\" επίσης επιλέγει αρχεία χωρίς επέκταση, κ.λ.π.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Χρήση ενός ανεξάρτητου φίλτρου ιδιοτήτων, στο διάλογο εισαγωγής μάσκας, κάθε φορά" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Σήμανση/ Κατάργηση σήμανσης εγγραφών" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Προκαθορισμένη τιμή ιδιότητας μάσκας προς χρήση:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Διαγραφή" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Πρότυπο..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Χρώματα Τύπων Αρχείων (ταξινόμηση κατά μεταφορά&&απόθεση)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Ιδιότητες Κατηγοριών:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Κατηγορία χρώματος:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Μάσκα Κατηγορίας:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Όνομα Κατηγορίας:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Γραμματοσειρές" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Προσθήκη ειδικού πλήκτρου" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Αντιγραφή" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Διαγραφή" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Διαγραφή ειδικού πλήκτρου" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Ρύθμιση ειδικού πλήκτρου" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Επόμενη Κατηγορία" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Δημιουργία αναδυόμενου μενού για το σχετικό αρχείο" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Προηγούμενη Κατηγορία" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Αποκατάσταση των προκαθορισμένων ρυθμίσεων του DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Αποθήκευση τώρα" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Ταξινόμηση κατά Όνομα Εντολής" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Ταξινόμηση κατά ειδικά πλήκτρα (ομαδοποιημένα)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Ταξινόμηση κατά ειδικά πλήκτρα (ένα σε κάθε σειρά)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Φίλτρο" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Κατηγορίες:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Εντολες:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Αρχεία συντομεύσεων:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Σειρά κατάταξης:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Κατηγορίες" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Εντολή" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Σειρά κατάταξης" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Εντολή" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Ειδικά Πλήκτρα" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Περιγραφή" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Παράμετροι" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Χειριστήρια" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Για τις ακόλουθες διαδρομές και τους υποκαταλόγους τους:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Εμφάνιση εικονιδίων για ενέργειες στα μενού" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Εμφάνιση εικονιδίων στα κουμπιά" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Εμφάνιση εικονιδίων επίστρωσης, π.χ. για δεσμούς" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Θολά κρυφά αρχεία (πιο αργό)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Απενεργοποίηση ειδικών εικονιδίων" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Μέγεθος Εικονιδίου " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Θέμα εικονιδίων" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Προβολή εικονιδίων" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Εμφάνιση εικονιδίων αριστερά από το όνομα αρχείου " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Πάνελ Δίσκου:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Πάνελ Αρχείου:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Όλα" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Όλα τα σχετιζόμενα + &EXE/LNK (αργό)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Χωρίς Εικονίδια" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Μόνο προκαθορισμένα εικονίδια" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Προσθήκη επιλεγμένων ονομάτων" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Προσθήκη επιλεγμένων ονομάτων με τη πλήρη διαδρομή" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Αγνόηση (να μην γίνει εμφάνιση) των ακόλουθων αρχείων και φακέλων:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "Αποθήκευση στο:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Αριστερά, Δεξιά βέλη αλλάζουν κατάλογο (κίνηση όπως στο Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Πληκτρολόγηση" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters:" msgstr "Alt+Γράμματα:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Γράμματα:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters:" msgstr "Γράμματα:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Επίπεδο Περιβάλλον" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Εμφάνιση ένδειξης ελεύθερου χώρου στην ετικέτα τόμου" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Εμφάνιση παραθύρου καταγραφών" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Εμφάνιση πάνελ που πραγματοποιείται η εργασία στο παρασκήνιο" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Εμφάνιση απλής προόδου στη μπάρα μενού" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Εμφάνιση γραμμής εντολών" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Εμφάνιση τρέχοντος καταλόγου" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Εμφάνιση κουμπιών οδηγών" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Εμφάνιση ετικέτας ελεύθερου χώρου" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Εμφάνιση κουμπιού λίστας οδηγών" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Εμφάνιση κουμπιών πλήκτρων λειτουργίας" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Εμφάνιση κυρίως μενού" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Εμφάνιση σειράς εργαλείων" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Εμφάνιση ταξινόμησης ετικέτας ελεύθερου χώρου" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Εμφάνιση μπάρας κατάστασης" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Εμφάνιση επικεφαλίδας του tabstop" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Εμφάνιση καρτελών φακέλων" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Εμφάνιση παραθύρου τερματικού" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Εμφάνιση δύο σειρών κουμπιών οδηγών (σταθερό πλάτος, πάνω από το παράθυρο αρχείων)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Εμφάνιση μεσαίας γραμμής εργαλείων" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Διάταξη Οθόνης " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Προβολή περιεχομένων αρχείου καταγραφής" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Να συμπεριληφθεί ημερομηνία στο αρχείο καταγραφής του ονόματος αρχείου" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Συμπίεση/Αποσυμπίεση" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Εκτέλεση εξωτερικής γραμμής εντολών" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Αντιγραφή/Μετακίνηση/Δημιουργία δεσμού/συμβολοδεσμού" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Δημιουργία/Διαγραφή καταλόγων" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Καταγραφή λαθών" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Δημιουργία ενός αρχείου καταγραφής:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Μέγιστος αριθμός αρχείου καταγραφής" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Καταγραφή των μηνυμάτων πληροφοριών" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Εκκίνηση/τερματισμός" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Καταγραφή των επιτυχημένων εργασιών" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Πρόσθετα Αρχείων Συστήματος" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Αρχείο καταγραφής εργασίας αρχείου" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Εργασίες Καταγραφής" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Κατάσταση Λειτουργίας" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Αφαίρεση μικρογραφιών για τα αρχεία που δεν υπάρχουν πλέον" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Προβολή ρύθμισης περιεχομένων αρχείου" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Δημιουργία νέου με κωδικοποίηση:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Πάντα μετάβαση στη ρίζα ενός οδηγού όταν γίνεται αλλαγή οδηγών" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Εμφάνιση τρέχοντος καταλόγου στην γραμμή τίτλου του κύριου παραθύρου" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Εμφάνιση οθόνης εισαγωγής" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Εμφάνιση προειδοποιητικών μηνυμάτων (\"OK\" κουμπί μόνο)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "Αποθήκευση μικρογραφιών στο κασέ" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Μικρογραφίες" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Περιγραφή Αρχείου (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Όπως στον TC εισαγωγή/εξαγωγή:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "Προκαθορισμένη κωδικοποίηση μονού-byte:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Προκαθορισμένη Κωδικοποίηση:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Αρχείο Διαμόρφωσης:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Εκτελέσιμο του TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Διαδρομή εξόδου γραμμής εργαλείων:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "πίξελ" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Μέγεθος Μικρογραφίας:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Επιλογή με ποντίκι" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Ο κέρσορας κειμένου δεν ακολουθεί πλέον τον κέρσορα ποντικιού" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Κάνοντας κλικ στο εικονίδιο" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Άνοιγμα με" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Κύλιση" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Επιλογή" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Λειτουργία:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Διπλό κλικ" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Γραμμή προς Γραμμή" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Γραμμή προς Γραμμή με την κίνηση του κέρσορα" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Σελίδα προς Σελίδα" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Μονό κλικ (άνοιγμα αρχείων και φακέλων)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Μονό κλικ (άνοιγμα καταλόγων, διπλό κλικ για αρχεία)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Προβολή περιεχομένων αρχείου καταγραφής" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Ξεχωριστοί κατάλογοι ανά μέρα" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Εμφάνιση ονομάτων αρχείων με πλήρη διαδρομή" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Εμφάνιση γραμμής μενού στην κορυφή " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Μετονομασία αρχείου καταγραφών" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Αντικατάσταση λανθασμένου ονόματος αρχείου με" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Συμπλήρωση στο ίδιο μετονομασμένο αρχείο καταγραφών" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Ανά όρισμα" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Έξοδος με τροποποιημένο όρισμα" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Όρισμα κατά την εκκίνηση" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Διαμορφώστε" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Ενεργοποίηση" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Τροποποίηση" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Περιγραφή" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ονομασία αρχείου" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Τα πρόσθετα αναζήτησης επιτρέπουν τη χρήση εναλλακτικών αλγορίθμων αναζήτησης ή εξωτερικά εργαλεία (όπως \"locate\", κ.λ.π.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Εφαρμογή τρεχόντων ρυθμίσεων σε όλα τα τρέχοντα διαμορφωμένα πρόσθετα" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Όταν γίνεται προσθήκη προσθέτου, αυτόματα μετάβαση στο παράθυρο προσαρμογής" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Διαμόρφωση:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Βιβλιοθήκη Lua προς χρήση:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Διαδρομή σχετικά διαμορφωμένη σύμφωνα με το:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Στυλ ονόματος αρχείου προσθέτου όταν γίνεται η προσθήκη ενός νέου προσθέτου:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Πρόσθετα συμπίεσης χρησιμοποιούνται για εργασίες με τις αρχειοθήκες" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ονομασία αρχείου" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Τα πρόσθετα περιεχομένου επιτρέπουν την εμφάνιση επιπλέον λεπτομερειών του αρχείου όπως mp3 tags ή ιδιότητες εικόνας στις λίστες αρχείων, ή χρήση τους στην αναζήτηση και στο εργαλείο μετονομασίας πολλών" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Τα πρόσθετα αρχείων συστήματος επιτρέπουν την πρόσβαση σε δίσκους μη προσβάσιμους από το λειτουργικό σύστημα ή σε εξωτερικές συσκευές όπως το Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Τα πρόσθετα προβολέα επιτρέπουν την εμφάνιση τύπων αρχείων όπως εικόνες, υπολογιστικά φύλλα, βάσεις δεδομένων κ.λ.π στον Προβολέα (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Ενεργό" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Αρχή (το όνομα πρέπει να αρχίζει με τον πρώτο πληκτρολογημένο χαρακτήρα)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Κατάληξη (ο τελευταίος χαρακτήρας πριν από πληκτρολογημένη τελεία . πρέπει να ταιριάζει)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Επιλογές" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Ακριβής Ταύτιση Ονόματος" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Αναζήτηση Κεφαλαίων" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Αναζήτηση για αυτά τα αντικείμενα" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Διατήρηση μετονομασμένου ονόματος όταν ξεκλειδώνεται μια καρτέλα" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Ενεργοποίηση πάνελ στόχου όταν γίνεται κλικ σε μία από τις Καρτέλες του" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Εμφάνιση επικεφαλίδας καρτέλας ακόμη και όταν υπάρχει μόνο μία καρτέλα" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Κλείσιμο διπλασιασμένων καρτελών όταν κλείσει η εφαρμογή" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Επιβεβαίωση κλεισίματος όλων των καρτελών" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Επιβεβαίωση κλεισίματος κλειδωμένων καρτελών" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Ορισμός μήκους τίτλου καρτέλας σε" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Εμφάνιση κλειδωμένων καρτελών με έναν αστερίσκο *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Καρτέλες σε πολλαπλές γραμμές" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up ανοίγουν νέα καρτέλα στο προσκήνιο" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Άνοιγμα νέων καρτελών δίπλα στην τρέχουσα καρτέλα" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Επαναχρησιμοποίηση υπάρχουσας καρτέλας όταν αυτό είναι δυνατό" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Εμφάνιση κουμπιού κλεισίματος καρτελών" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Εμφάνιση πάντοτε γράμματος οδηγού στον τίτλο καρτέλας" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Επικεφαλίδες Καρτελών Φακέλων" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "χαρακτήρες" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Ενέργεια που θα εκτελεστεί όταν γίνει διπλό κλικ σε μια καρτέλα:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Θέση Καρτελών" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Κανένα" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Όχι" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Αριστερά" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Δεξιά" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Μετάβαση στη Διαμόρφωση Αγαπημένων Καρτελών μετά την επαναποθήκευση" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Μετάβαση στη Διαμόρφωση Αγαπημένων Καρτελών μετά την αποθήκευση μίας νέας" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Ενεργοποίηση επιπλέον ιδιοτήτων Αγαπημένων Καρτελών (επιλογή πλευρά στόχου όταν γίνεται αποκατάσταση, κ.λ.π.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Προκαθορισμένες επιπλέον ιδιότητες όταν αποθηκεύεται νέα Αγαπημένη Καρτέλα:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Έξτρα Επικεφαλίδων Καρτελών Φακέλων" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Όταν αποκαθίσταται καρτέλα, υπάρχουσες καρτέλες προς φύλαξη:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Καρτέλες αποθηκευμένες αριστερά να αποκατασταθούν σε :" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Καρτέλες αποθηκευμένες δεξιά να αποκατασταθούν σε :" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Διατήρηση αποθήκευσης ιστορικού καταλόγου με Αγαπημένες Καρτέλες:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Προκαθορισμένη θέση στο μενού όταν αποθηκεύεται μια νέα Αγαπημένη Καρτέλα:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} θα έπρεπε να είναι παρούσα εδώ για να προσδιορίσει την εντολή που θα εκτελεστεί στο τερματικό" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} θα έπρεπε να είναι παρούσα εδώ για να προσδιορίσει την εντολή που θα εκτελεστεί στο τερματικό" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Εντολή για εκτέλεση μόνο του τερματικού:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Εντολή για εκτέλεση μιας εντολής στο τερματικό και κλείσιμό του μετά απ'αυτό:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Εντολή για εκτέλεση μιας εντολής στο τερματικό και παραμονή του ανοικτό :" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Κουμπί κλωνοποίησης" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Ρύθμιση ειδικού πλήκτρου" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Εισαγωγή νέου κουμπιού" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Επιλέξτε" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.BTNOTHER.CAPTION" msgid "Other..." msgstr "Άλλα..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Αφαίρεση ειδικού πλήκτρου" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Πρόταση" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Πρόταση από τον DC υπόδειξης βασισμένης στον τύπο κουμπιού, εντολής και παραμέτρων" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Αναφορά λαθών με εντολές" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Εμφάνιση λήψεων" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Εισαγωγή παραμέτρων εντολής, καθεμία σε ξεχωριστή γραμμή. Πιέστε F1 για βοήθεια στις παραμέτρους." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Εμφάνιση" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Μέγεθος Μπάρας:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALCOMMAND.CAPTION" msgid "Co&mmand:" msgstr "Εντολή:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Παράμετροι:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Βοήθεια" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Ειδικό Πλήκτρο:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Εικονίδιο:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Μέγεθος εικόνας:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Εντολή:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Παράμετροι:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Διαδρομή Εκκίνησης:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Στυλ:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Υπόδειξη:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Προσθήκη γραμμής εργαλείων με ΟΛΕΣ τις DC εντολές" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "για μία εξωτερική εντολή" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "για μία εσωτερική εντολή" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "για ένα διαχωριστικό" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "για μια υπο-σειρά εργαλείων" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Αντίγραφο Ασφαλείας..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Τρέχουσα γραμμή εργαλείων..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Γραμμή Εργαλείων κορυφής..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Αποθήκευση ενός αντιγράφου ασφαλείας της Γραμμής Εργαλείων" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Εισάγετε..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Επαναφορά ενός αντιγράφου ασφαλείας της Σειράς Εργαλείων" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "από ένα Αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "από ένα απλό TC .BAR αρχείο" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "από \"wincmd.ini\" του TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στην τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Αναζήτηση και αντικατάσταση..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "σε όλα τα ανωτέρω..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "σε όλες τις εντολές..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "σε όλα τα ονόματα εικονιδίων..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "σε όλες τις παραμέτρους..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "σε όλες τις διαδρομές εκκίνησης...." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Διαχωριστικό" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Διάστημα" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Τύπος Κουμπιού" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Εφαρμογή τρεχουσών ρυθμίσεων σε όλα τα διαμορφωμένα ονόματα αρχείων και διαδρομών" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Εντολές" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Εικονίδια" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Διαδρομές Εκκίνησης" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Διαδρομές" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Εκτέλεση για αρχεία και διαδρομές:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Διαδρομή σχετικά διαμορφωμένη σύμφωνα με το:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Τρόπος για τον καθορισμό διαδρομών κατά την προσθήκη στοιχείων για εικονίδια, εντολές και διαδρομές εκκίνησης:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Διατήρηση παραθύρου τερματικού ανοικτό μετά την εκτέλεση του προγράμματος" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Εκτέλεση σε τερματικό" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Χρήση εξωτερικού προγράμματος" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Επιπρόσθετες παράμετροι" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Διαδρομή προγράμματος προς εκτέλεση" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Αντιγραφή" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Διαγραφή" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Πρότυπο..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Μετονομασία" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Άλλοι..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Διαμόρφωση Υπόδειξης για τον επιλεγμένο τύπο αρχείου:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Γενικές ιδιότητες υποδείξεων:" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "TFRMOPTIONSTOOLTIPS.CHKSHOWTOOLTIP.CAPTION" msgid "&Show tooltip for files in the file panel" msgstr "Εμφάνιση υπόδειξης για αρχεία στο πάνελ αρχείων" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Συμβουλή Κατηγορίας:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Μάσκα Κατηγορίας:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Καθυστέρηση απόκρυψης Υπόδειξης:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Λειτουργία Εμφάνισης Υπόδειξης:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Τύποι Αρχείων:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Απόρριψη Αλλαγών" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Εισάγετε..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Κατάταξη Τύπων Αρχείων Υποδείξεων" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Με διπλό κλικ στην κορυφή πάνω από το πάνελ Αρχείου" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Με το μενού και εσωτερική εντολή" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Διπλό κλικ σε επιλογή Δέντρου και έξοδος" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Με το μενού και εσωτερική εντολή" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Με διπλό κλικ σε μια Καρτέλα (αν έχει οριστεί έτσι)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Όταν γίνεται χρήση της συντόμευσης πληκτρολογίου, θα γίνει έξοδος από το παράθυρο επιστρέφοντας την τρέχουσα επιλογή" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Απλό κλικ του ποντικιού σε επιλογή δέντρου και έξοδος" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Χρήση στο Ιστορικό Γραμμής Εντολών" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Χρήση στο Ιστορικό Καταλόγου" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Χρήση στο Ιστορικό Προβολής (προβεβλημένες διαδρομές για την ενεργή προβολή)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Συμπεριφορά που αφορά την Επιλογή:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Επιλογές σχετικές με τα Μενού Προβολής Δέντρου:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Που θα γίνει χρήση Μενού Προβολής Δέντρου:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*ΣΗΜΕΙΩΣΗ: Όσον αφορά ρυθμίσεις όπως τη διάκριση πεζών-κεφαλαίων, αγνόηση τονισμού ή όχι, αυτές αποθηκεύονται ξεχωριστά για το κάθε περιεχόμενο από τη μια χρήση και περίοδο λειτουργίας στην άλλη." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Με Hotlist Καταλόγου:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Με Αγαπημένες Καρτέλες:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Με Ιστορικό:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Χρήση και Προβολή συντόμευσης πληκτρολογίου για την επιλογή αντικειμένων" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Γραμματοσειρά" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Διάταξη και Επιλογές Χρωμάτων:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Χρώμα Παρασκηνίου:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Χρώμα Κέρσορα:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Χρώμα Ευρεθέντος Κειμένου:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Ευρεθέν Κείμενο κάτω από τον κέρσορα:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Χρώμα Κανονικού Κειμένου:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Κανονικό Κείμενο κάτω από τον κέρσορα:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Προεπισκόπηση Μενού Προβολής Δέντρου:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Χρώμα δευτερεύοντος κειμένου:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Δευτερεύον κείμενο κάτω από τον κέρσορα:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Χρώμα συντόμευσης:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Συντόμευση κάτω από τον κέρσορα:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Χρώμα μη επιλέξιμου κειμένου:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Μη επιλέξιμο κάτω από τον κέρσορα:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Κάντε αλλαγή χρώματος στα αριστερά και θα εμφανιστεί εδώ μια Προεπισκόπηση του πως θα εμφανίζονται τα Μενού Προβολής Δέντρου με αυτό το δείγμα." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Ιδιότητες Εσωτερικού Προβολέα" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Αριθμός στηλών στον προβολέα βιβλίων" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Διαμόρφωση" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Συμπίεση αρχείων" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Δημιουργία ξεχωριστών αρχειοθηκών, μια για κάθε ξεχωριστό αρχείο/κατάλογο" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Δημιουργία αυτο-εξαγώμενης αρχειοθήκης" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Κρυπτογράφηση" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Μετακίνηση στην αρχειοθήκη" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Πολλαπλή αρχειοθήκη δίσκου" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Τοποθέτηση πρώτο στην TAR αρχειοθήκη" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Επίσης συμπίεση διαδρομών ονομάτων (μόνο των αναδρομικών)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Συμπίεση αρχείου(ων) στο αρχείο:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Εφαρμογή Συμπίεσης" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Αποσυμπίεση όλων και εκτέλεση" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Αποσυμπίεση και εκτέλεση" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Ιδιότητες συμπιεσμένου αρχείου" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Ιδιότητες:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Αναλογία Συμπίεσης:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Ημερομηνία:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Μέθοδος:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Αυθεντικό μέγεθος:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Αρχείο:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Μέγεθος συμπιεσμένου:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Εφαρμογή Συμπίεσης:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Χρόνος:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Διαμόρφωση Εκτύπωσης" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Περιθώρια (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "Κάτω:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "Αριστερά:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "Δεξιά:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "Κορυφή:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Κλείσιμο πάνελ φίλτρου" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Εισάγετε κείμενο για αναζήτηση ή εφαρμόστε φίλτρο για" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Αα" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Διάκριση Πεζών-Κεφαλαίων" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "Κ" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Κατάλογοι" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Α" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Αρχεία" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Αντιστοίχηση που Αρχίζει" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Αντιστοίχηση που Τελειώνει" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Φίλτρο" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Εναλλαγή μεταξύ αναζήτησης και φίλτρου" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Περισσότεροι κανόνες" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Λιγότεροι κανόνες" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Χρήση προσθέτων περιεχομένου, συνδυασμός με:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Πεδίο" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Χειριστής" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Τιμή" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "ΚΑΙ (όσα ταιριάζουν)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "Ή (όποιο ταιριάζει)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Εφαρμογή" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Πρότυπο..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Πρότυπο..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Επιλογή διπλότυπων αρχείων" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Αφήστε τουλάχιστον ένα αρχείο σε κάθε γκρουπ μη επιλεγμένο:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Αφαίρεση επιλογής καθ' 'ονομα/επέκταση:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Επιλογή καθ' 'ονομα/επέκταση:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Διαχωριστικό" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Μέτρηση από" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Αποτέλεσμα:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "Επιλογή των καταλόγων προς εισαγωγή (μπορείτε να επιλέξετε περισσότερους από έναν)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Τέλος" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Αρχή" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Μέτρηση πρώτου από" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Υπολογισμός τελευταίου από" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Περιγραφή Διαστήματος" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Αποτέλεσμα:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Επιλέξτε τους χαρακτήρες για εισαγωγή:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[Πρώτο:Τελευταίο]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Πρώτο,Μήκος]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Τέλος" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Αρχή" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "Τέλος" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "Αρχή" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Αλλαγή Ιδιοτήτων" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένα" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Αρχειοθήκη" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Δημιουργήθηκε:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Κρυφό" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Προσπελάστηκε:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Τροποποιήθηκε:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Μόνο για Ανάγνωση" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Συμπεριβαλομένων των υποφακέλων" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Σύστημα" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Ιδιότητες χρόνου τελευταίας πρόσβασης" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Γκρουπ" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(γκρι πεδίο σημαίνει τιμή χωρίς αλλαγή)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Άλλα" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Κείμενο:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(γκρι πεδίο σημαίνει τιμή χωρίς αλλαγή)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Ταξινόμηση" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmΤακτοποίησηΟποιουδήποτε" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Μεταφορά και απόθεση στοιχείων προς διαλογή" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Διαχωριστής" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Απαιτεί ένα αρχείο επιβεβαίωσης CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Μέγεθος και αριθμητικό πλήθος των τμημάτων" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Διαχωρισμός του αρχείου στον κατάλογο:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Αριθμός τμημάτων" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Εσωτερική Έκδοση" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Υποβολή" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Λειτουργικό Σύστημα" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Σύστημα" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Αναθεωρημένη Έκδοση" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Έκδοση" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Δημιουργία συμβολοδεσμού" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Χρήση &σχετικής διαδρομής όταν είναι δυνατό" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Προορισμός τον οποίο θα υποδείξει ο δεσμός" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Όνομα Δεσμού" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Διαγραφή και στις δύο πλευρές" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Διαγραφή αριστερά" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Διαγραφή δεξιά" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Αφαίρεση επιλογής" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Επιλογή για αντιγραφή (προκαθορισμένη κατεύθυνση)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Επιλογή για αντιγραφή -> (από αριστερά προς δεξιά)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Ανάποδη κατεύθυνση αντιγραφής" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Επιλογή για αντιγραφή <- (από δεξιά προς αριστερά)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Επιλογή προς διαγραφή <-> (και τα δύο)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Επιλογή προς διαγραφή <- (αριστερά)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Επιλογή για διαγραφή -> (δεξιά)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Κλείσιμο" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Πρότυπο..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Συγχρονισμός" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Συγχρονισμός καταλόγων" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "ασύμμετρο" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "ανα περιεχόμενο" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "αγνόηση ημερομηνίας" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "μόνο το(α) επιλεγμένο(α)" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Υποκατάλογοι" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Εμφάνιση:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Όνομα" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Μέγεθος" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Ημερομηνία" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Ημερομηνία" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Μέγεθος" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Όνομα" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(στο κύριο παράθυρο)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Προβολή Αριστερά" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Προβολή Δεξιά" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "διπλότυπα" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "μονά" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Παρακαλώ πιέστε \"Σύγκριση\" για εκκίνηση" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Συγχρονισμός" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Επιβεβαίωση αντικαταστημένων" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Μενού Προβολής Δέντρου" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Επιλογή Hot Directory:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Η Αναζήτηση γίνεται με διάκριση πεζών-κεφαλαίων" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Πλήρη Σύμπτυξη" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Πλήρη Διεύρυνση" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Αναζήτηση αγνόησης χρήσης τονισμού και διφθόγγων" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Η Αναζήτηση δεν είναι με διάκριση πεζών-κεφαλαίων" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Η Αναζήτηση αφορά αυστηρά και μόνο τονισμό και διφθόγγους" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Απαγόρευση προβολής περιεχομένου κλάδου \"μόνο και μόνο\" επειδή η ζητούμενη ακολουθία βρέθηκε στο όνομα κλάδου" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Αν η ζητούμενη ακολουθία βρέθηκε σε ένα όνομα κλάδου, προβολή όλου του κλάδου ακόμη και αν τα στοιχεία δεν ταιριάζουν" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Κλείσιμο Μενού Προβολής Δέντρου" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Ρύθμιση του Μενού Προβολής Δέντρου" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Ρύθμιση Χρωμάτων Μενού Προβολής Δέντρου" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Προσθήκη νέου" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Αλλαγή" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Προκαθορισμένα" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Επεξεργασία προσθέτου" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Εντοπισμός τύπου αρχειοθήκης από τα περιεχόμενα" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Δυνατότητα διαγραφής αρχείων" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Υποστηρίζει Κρυπτογράφηση" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Εμφάνιση ως κανονικά αρχεία (απόκρυψη εικονιδίου εφαρμογής συμπίεσης)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Υποστήριξη συμπίεσης στη μνήμη" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Δυνατότητα τροποποίησης υπάρχοντων αρχείων" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Η Αρχειοθήκη μπορεί να περιλαμβάνει πολλαπλά αρχεία" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Δυνατότητα δημιουργίας νέων αρχείων" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Υποστηρίζει το πλαίσιο διαλόγου ρυθμίσεων" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Επιτρέψτε αναζήτηση κειμένου στα αρχεία" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Περιγραφή:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Εντοπισμός ακολουθίας:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Επέκταση:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Σημαίες:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Όνομα:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Πρόσθετο:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Πρόσθετο:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Σχετικά με τον Προβολέα..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Εμφανίζει το \"Σχετικά\" μήνυμα" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Αυτόματη Ανανέωση" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Αλλαγή κωδικοποίησης" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Αντιγραφή Αρχείου" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Αντιγραφή Αρχείου" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Αντιγραφή στο Πρόχειρο" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Αντιγραφή στο Πρόχειρο μετά από Διαμόρφωση" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Διαγραφή Αρχείου" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Διαγραφή Αρχείου" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "Έξοδος" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Εύρεση" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Εύρεση Προηγούμενου" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Πλήρης Οθόνη" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Μετάβαση στη Γραμμή..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Μετάβαση στη γραμμή" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Κέντρο" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Επόμενο" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Φόρτωση Επόμενου Αρχείου" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "Προηγούμενο" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Φόρτωση Προηγούμενου Αρχείου" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Αντικατοπτρισμός Οριζοντίως" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Καθρεφτισμός" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Αντικατοπτρισμός Καθέτως" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Μετακίνηση Αρχείου" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Μετακίνηση Αρχείου" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Προεπισκόπηση" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Εκτύπωση..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Διαμόρφωση Εκτύπωσης..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Επαναφόρτωση" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Επαναφόρτωση τρέχοντος αρχείου" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "Περιστροφή 180°" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "Περιστροφή -90°" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "Περιστροφή +90°" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Αποθήκευση" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Αποθήκευση Ως..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Αποθήκευση Αρχείου Ως..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Στιγμιότυπο Οθόνης" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Καθυστέρηση 3 δευτερόλεπτα" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Καθυστέρηση 5 δευτερόλεπτα" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Εμφάνιση ως Δυαδικό" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Εμφάνιση ως Βιβλίο" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Προβολής ως Δεκαδικό" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Εμφάνιση ως Δεκαεξαδικό" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Εμφάνιση ως Κείμενο" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Εμφάνιση ως Αναδιπλούμενο Κείμενο" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Εμφάνιση κέρσορα κειμένου" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Κώδικας" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Γραφικά" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (μόνο κείμενο)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Εμφάνιση διαφάνειας" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Άπλωμα" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Άπλωμα Εικόνας" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Άπλωμα μόνο Μεγάλων" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Αναίρεση" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Αναίρεση" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "Μάζεμα κειμένου" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Μεγέθυνση" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Μεγέθυνση" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Μεγέθυνση" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Μίκρυνση" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Σμίκρυνση" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Περικοπή" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Πλήρης Οθόνη" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Εξαγωγή Πλαισίου" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Υπογράμμιση" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Επόμενο Πλαίσιο" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Ζωγραφική" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Προηγούμενο Πλαίσιο" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Κόκκινα Μάτια" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Αλλαγή Μεγέθους" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Slide Show" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Προβολέας" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Έλλειψη" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Εικόνα" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Στυλό" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Ορθογώνιο" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Περιστροφή" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Στιγμιότυπο Οθόνης" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "Προβολή" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Εκκίνηση" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Τερματισμός" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Λειτουργίες Αρχείου" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Πάντα στην κορυφή" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Χρήση μεταφοράς και απόθεσης για τη μετακίνηση διεργασιών μεταξύ ουρών" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Ακύρωση" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Ακύρωση" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Νέα ουρά" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Εμφάνιση σε αποσπασμένο παράθυρο" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Πρώτο στην ουρά" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Τελευταίο στην ουρά" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Ουρά" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Εκτός ουράς" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Ουρά 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Ουρά 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Ουρά 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Ουρά 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Ουρά 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Εμφάνιση σε αποσπασμένο παράθυρο" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Παύση Όλων" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Ακολουθείστε τους δεσμούς" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Όταν ο κατάλογος υπάρχει" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Ακύρωση" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Γραμμή Εντολών:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Παράμετροι:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Διαδρομή Εκκίνησης:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Επανάληψη" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Κρυπτογράφηση" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Αντιγραφή ημερομηνίας/ώρας" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Εργασία στο παρασκήνιο (ξεχωριστή σύνδεση)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Απαιτείται χορήγηση άδειας διαχειριστή" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "αντιγραφή αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "για τη δημιουργία αυτού του αντικειμένου:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "για τη διαγραφή αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "για λήψη ιδιοτήτων αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "για τη δημιουργία αυτού του σκληρού δεσμού:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "για το άνοιγμα αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "για τη μετονομασία αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "για το καθορισμό ιδιοτήτων αυτού του αντικειμένου:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "για τη δημιουργία αυτού του συμβολοδεσμού:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Ημερομηνία πρόσληψης" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Ύψος" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Πλάτος" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Κατασκευαστής" #: uexifreader.rsmodel msgid "Camera model" msgstr "Μοντέλο Κάμερας" #: uexifreader.rsorientation msgid "Orientation" msgstr "Προσανατολισμός" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Αυτό το αρχείο δε μπορεί να βρεθεί και αυτό θα μπορούσε να βοηθήσει στην επικύρωση του τελικού συνδυασμού αρχείων:\n" "%s\n" "\n" "Θα μπορούσατε να το κάνετε διαθέσιμο πιέζοντας \"ΟΚ\"όταν είστε έτοιμοι,\n" "ή πιέστε \"Ακύρωση\" για να συνεχίσετε χωρίς αυτό;" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Ακύρωση Γρήγορου Φίλτρου" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Ακύρωση Τρέχουσας Λειτουργίας" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Εισαγωγή ονόματος αρχείου, με επέκταση, για το εναποθετημένο κείμενο" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Τύπος Κειμένου προς εισαγωγή" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Κατεστραμμένο:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Γενικά:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Λείπει:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Λάθος Ανάγνωσης:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Επιτυχία:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Εισαγωγή αθροίσματος ελέγχου και επιλογή αλγόριθμου:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Επιβεβαίωση αθροίσματος ελέγχου" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Συνολικά:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Επιθυμείτε το καθαρισμό φίλτρων για αυτή τη νέα αναζήτηση;" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Το Πρόχειρο δεν περιέχει κάποια έγκυρα δεδομένα γραμμής εργαλείων." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Όλα;Ενεργό Πάνελ;Αριστερό Πάνελ;Δεξιό Πάνελ;Εργασίες Αρχείου;Ρύθμιση;Δίκτυο;Διάφορα;Παράλληλη Πόρτα;Εκτύπωση;Επιλογέας;Ασφάλεια;Πρόχειρο;FTP;Πλοήγηση;Βοήθεια;Παράθυρο;Γραμμή Εντολών;Εργαλεία;Προβολή;Χρήστης;Καρτέλες;Διάταξη;Καταγραφή" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ταξινόμηση της Legacy ;Α-Ω ταξινόμηση" #: ulng.rscolattr msgid "Attr" msgstr "Ιδιότητα" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Ημερομηνία" #: ulng.rscolext msgid "Ext" msgstr "Εξωτερικό" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Όνομα" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Μέγεθος" #: ulng.rsconfcolalign msgid "Align" msgstr "Ευθυγράμμιση" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Σύλληψη" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Διαγραφή" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Περιεχόμενα Πεδίου" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Μετακίνηση" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Πλάτος" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Προσαρμογή στήλης" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Διαμόρφωση συσχετισμού αρχείων" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Επιβεβαίωση της γραμμής εντολών και παραμέτρων" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Αντιγραφή (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Σκοτεινό θέμα" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Αυτόματα;Ενεργό;Ανενεργό" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Εισαγμένη σειρά Εργαλείων του DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Εισαγμένη σειρά Εργαλείων του TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_ΕναποθετημένοΚείμενο" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_ΕναποθετημένοHTMLκείμενο" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_ΕναποθετημένοΠλούσιοκείμενο" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_ΕναποθετημένοΑπλόΚείμενο" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_ΕναποθετημένοUnicodeUTF16κείμενο" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_ΕναποθετημένοUnicodeUTF8κείμενο" #: ulng.rsdiffadds msgid " Adds: " msgstr " Προσθέτει: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Σύγκριση..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Διαγραφή: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Τα δύο αρχεία είναι όμοια!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Αντιστοιχίσεις: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Μεταβολές: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Κωδικοποίηση" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Τέλη γραμμών" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Το κείμενο είναι ταυτόσημο αλλά οι ακόλουθες ιδιότητες έχουν χρησιμοποιηθεί:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Το κείμενο είναι ταυτόσημο αλλά τα αρχεία δεν ταιριάζουν!\n" "Έχουν βρεθεί οι ακόλουθες διαφορές:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Απόρριψη" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Όλα" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Επισύναψη" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Αυτόματη ονομασία πηγαίων αρχείων" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Αυτόματη μετονομασία στοχευμένων αρχείων" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Ακύρωση" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Σύγκριση ανά περιεχόμενο" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Συνέχιση" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Συγχώνευση" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Συγχώνευση Όλων" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Έξοδος προγράμματος" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Αγνόηση" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Αγνόηση όλων" #: ulng.rsdlgbuttonno msgid "&No" msgstr "Όχι" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Κανένα" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Άλλα" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Αντικατάσταση" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Αντικατάσταση Όλων" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Αντικατάσταση Όλων των Μεγαλύτερων" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Αντικατάσταση Όλων των Παλαιοτέρων" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Αντικατάσταση Όλων των Μικρότερων" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Μετονομασία" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Ολοκλήρωση" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Επαναπροσπάθεια" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Ως Διαχειριστής" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Παράβλεψη" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Παράβλεψη Όλων" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Ξεκλείδωμα" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "Ναι" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Αντιγραφή αρχείου(ων)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Μετακίνηση αρχείου(ων)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Παύση" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Εκκίνηση" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Ουρά" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Ταχύτητα %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Ταχύτητα %s/s, εναπομένων χρόνος %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Μορφή Rich Text;Μορφή HTML;Μορφή Unicode;Μορφή Απλού Κειμένου" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Σημαντής Ελεύθερου Χώρου Οδηγών" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<χωρίς ετικέτα>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<χωρίς μέσο>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Εσωτερικός επεξεργαστής του Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Μετάβαση στη γραμμή:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Μετάβαση στη γραμμή" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Όνομα αρχείου:" #: ulng.rseditnewopen msgid "Open file" msgstr "Άνοιγμα Αρχείου" #: ulng.rseditsearchback msgid "&Backward" msgstr "Πίσω" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Αναζήτηση" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Μπροστά" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Αντικατάσταση" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "με εξωτερικό επεξεργαστή" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "με εσωτερικό επεξεργαστή" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Εκτέλεση μέσω κελύφους" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Εκτέλεση μέσω τερματικού και κλείσιμό του" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Εκτέλεση μέσω τερματικού και παραμονή αυτού ανοικτό" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" δεν βρέθηκε στη γραμμή %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Δεν έχει καθοριστεί επέκταση πριν την εντολή \"%s\". Θα αγνοηθεί." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Αριστερά;Δεξιά;Ενεργό;Ανενεργό;Και τα δύο;Κανένα" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Όχι;Ναι" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Έχει_Εξαχθεί_από_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Ερώτηση;Αντικατάσταση;Παράλειψη" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Ερώτηση;Συγχώνευση;Παράβλεψη" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Ερώτηση;Αντικατάσταση;Αντικατάσταση παλαιότερων;Παράβλεψη" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Ερώτηση;Όχι επιπλέον καθορισμός;Αγνόηση λαθών" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Οποιαδήποτε αρχεία" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Αρχεία Διαμόρφωσης Προγράμματος Συμπίεσης" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Αρχεία Υποδείξεων του DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Αρχεία Καταλόγου Hotlist" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Εκτελέσιμα Αρχεία" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Αρχεία Διαμόρφωσης .ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Αρχεία Legacy DC .tab" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Αρχεία βιβλιοθηκών" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Αρχεία προσθέτων" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Προγράμματα και Βιβλιοθήκες" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ΦΙΛΤΡΟ" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Αρχεία Μπάρας Εργαλείων TC" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Αρχεία Μπάρας Εργαλείων DC" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Αρχεία Διαμόρφωσης .xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Καθορισμός προτύπου" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s επίπεδο(α)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "όλα (απεριόριστο εύρος)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "τρέχων κατάλογος μόνο" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Ο Κατάλογος %s δεν υπάρχει!" #: ulng.rsfindfound #, object-pascal-format msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Βρέθηκαν: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Αποθήκευση αναζήτησης προτύπου" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Όνομα Προτύπου:" #: ulng.rsfindscanned #, object-pascal-format msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Έχουν Σαρωθεί: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Σάρωση" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Εύρεση αρχείων" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Ώρα σάρωσης: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Αρχή σε" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Γραμματοσειρά Τερματικού" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Γραμματοσειρά Επεξεργαστή" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Γραμματοσειρά Πλήκτρων Λειτουργιών" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Γραμματοσειρά Καταγραφών" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Κύρια Γραμματοσειρά" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Γραμματοσειρά Διαδρομής" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Γραμματοσειρά Αποτελεσμάτων Αναζήτησης" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Γραμματοσειρά Εργαλειοθήκης Κατάστασης" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Γραμματοσειρά Εμφάνισης Μενού Τύπου Δέντρου" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Γραμματοσειρά Προβολέα" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Γραμματοσειρά Προβολέα Βιβλίων" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Ελεύθερα %s από %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s ελεύθερα" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Πρόσβαση ημερομηνίας/ώρας" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Ιδιότητες" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Σχόλιο" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Συμπιεσμένο μέγεθος" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Δημιουργία ημερομηνίας/ώρας" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Επέκταση" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Γκρουπ" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Αλλαγή ημερομηνίας/ώρας" #: ulng.rsfunclinkto msgid "Link to" msgstr "Δεσμός σε" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Αλλαγή Ημερομηνίας/Ώρας" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Όνομα" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Όνομα χωρίς επέκταση" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Ιδιοκτήτης" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Διαδρομή" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Μέγεθος" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Αρχική διαδρομή" #: ulng.rsfunctype msgid "Type" msgstr "Τύπος" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Λάθος στη δημιουργία δεσμού τύπου hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "κανένα;Όνομα, α-ω;Όνομα, ω-α;Εξωτ, α-ω;Εξωτ, ω-α;Μέγεθος 9-0;Μέγεθος 0-9;Ημέρα 9-0;Ημέρα 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Προσοχή! Κατά την αποκατάσταση ενός .hotlist αντιγράφου, θα διαγραφεί η υπάρχουσα λίστα για να αντικατασταθεί από την σημαντική.\n" "\n" "Είστε σίγουροι οτι επιθυμείτε να συνεχίσετε;" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Διάλογος Αντιγραφής/Μετακίνησης" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differ" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Επεξεργασία Διαλόγου Σχολίου" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Επεξεργαστής" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Εύρεση αρχείων" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Κυρίως" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Μετονομασία Πολλών" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Συγχρονισμός Καταλόγων" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Προβολέας" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Μια εγκατάσταση με αυτή την ονομασία υπάρχει ήδη.\n" "Επιθυμείτε αντικατάστασή της;" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Είστε σίγουροι ότι επιθυμείτε αποκατάσταση των προκαθορισμένων;" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Είστε σίγουροι ότι επιθυμείτε διαγραφή της εγκατάστασης των \"%s\";" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Αντιγραφή των %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Εισάγετε τη νέα σας ονομασία" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Πρέπει να διατηρηθεί τουλάχιστο ένα αρχείο συντόμευσης." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Νέα Ονομασία" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" Εγκαταστάσεις έχουν αλλάξει.\n" "Επιθυμείτε αποθήκευση;" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Δεν υπάρχει συντόμευση για \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Βάσει ονόματος εντολής;Βάσει κουμπιού συντόμευσης (ομαδοποιημένα);Βάσει κουμπιού συντόμευσης (ένα σε κάθε σειρά)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Αδυναμία εύρεσης αναφοράς στο προκαθορισμένο αρχείο γραμμής εργαλείων" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Λίστα παραθύρων \"Αναζήτηση Αρχείων\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Αποεπιλογή Μάσκας" #: ulng.rsmarkplus msgid "Select mask" msgstr "Επιλογή μάσκας" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Εισαγωγή μάσκας:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Μία προβολή στηλών με αυτό το όνομα ήδη υπάρχει." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Για να αλλάξετε την τρέχουσα ρύθμιση προβολής στηλών, κάντε ΑΠΟΘΗΚΕΥΣΗ, ΑΝΤΙΓΡΑΦΗ ή ΔΙΑΓΡΑΦΗ τρέχουσας ρύθμισης" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Διαμόρφωση εξατομικευμένων στηλών" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Εισάγετε νέα προσαρμοσμένα χρώματα στηλών" #: ulng.rsmenumacosservices msgid "Services" msgstr "Υπηρεσίες" #: ulng.rsmenumacosshare msgid "Share..." msgstr "Διαμοιρασμός..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ενέργειες" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Προκαθορισμένα>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Δημιουργία Συντόμευσης..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Αποσύνδεση Δικτυακού Οδηγού..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Επεξεργασία" #: ulng.rsmnueject msgid "Eject" msgstr "Εξαγωγή" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Εξαγωγή εδώ..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Σχεδιασμός Δικτυακού Οδηγού..." #: ulng.rsmnumount msgid "Mount" msgstr "Προσάρτηση" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Νέο" #: ulng.rsmnunomedia msgid "No media available" msgstr "Δεν υπάρχει διαθέσιμο Μέσο" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Άνοιγμα" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Άνοιγμα με" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Άλλα..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Συμπίεση εδώ..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Επαναφορά" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ταξινόμηση κατά" #: ulng.rsmnuumount msgid "Unmount" msgstr "Αποπροσάρτηση" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Προβολή" #: ulng.rsmsgaccount msgid "Account:" msgstr "Λογαριασμός:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Όλες οι εσωτερικές εντολές του Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Περιγραφή: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Επιπρόσθετες παράμετροι για τη γραμμή εντολών του προγράμματος συμπίεσης:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Επιθυμείτε να εισαχθεί μεταξύ εισαγωγικών;" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Κακό CRC32 για τελικό αρχείο:\n" "\"%s\"\n" "\n" "Επιθυμείτε να κρατήσετε το κατεστραμμένο τελικό αρχείο ως έχει;" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Σίγουρα επιθυμείτε ακύρωση της λειτουργίας;" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Δεν μπορείτε να αντιγράψετε/μετακινήσετε ένα αρχείο \"%s\" σε αυτό το ίδιο!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Αδυναμία αντιγραφής ειδικού αρχείου %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Αδυναμία διαγραφής καταλόγου %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Δεν είναι δυνατή η αντικατάσταση του καταλόγου \"%s\" με τον μη-κατάλογο \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "ChDir σε [%s] απέτυχε!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Αφαίρεση όλων των ανενεργών καρτελών;" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Αυτή η καρτέλα (%s) είναι κλειδωμένη! Κλείσιμο ως έχει;" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Επιβεβαίωση της παραμέτρου" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Δεν βρέθηκε η εντολή! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Είστε σίγουροι οτι επιθυμείτε έξοδο;" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Το αρχείο %s έχει αλλάξει. Επιθυμείτε να το αντιγράψετε αντίστροφα;" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Αδυναμία αντίστροφης αντιγραφής - επιθυμείτε να διατηρήσετε το αλλαγμένο αρχείο;" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Αντιγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Αντιγραφή επιλεγμένου \"%s\";" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Δημιουργία ενός νέου τύπου αρχείου \"%s αρχεία\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Εισάγετε τοποθεσία και όνομα αρχείου που θα αποθηκευθεί το αρχείο γραμμής εργαλείων του DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Προσαρμοσμένη ενέργεια" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Διαγραφή μερικώς αντιγραμμένου αρχείου ;" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων στο κάδο αχρήστων;" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Διαγραφή επιλεγμένων \"%s\" στο κάδο αχρήστων;" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Αδυναμία διαγραφής \"%s\" στα απορρίμματα! Διαγραφή άμεσα;" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Ο Δίσκος δεν είναι διαθέσιμος" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Εισάγετε νέο προσαρμοσμένο όνομα ενέργειας:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Εισάγετε την επέκταση αρχείου:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Εισαγωγή ονόματος:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Εισαγωγή ονόματος του νέου τύπου αρχείου που δημιουργείται για την επέκταση \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC λάθος στα δεδομένα αρχειοθήκης" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Άσχημα Δεδομένα" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Αδυναμία σύνδεσης στον διακομιστή: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Αδυναμία αντιγραφής αρχείου %s στο %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Αδυναμία μετακίνησης καταλόγου %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Αδυναμία μετακίνησης ειδικού αρχείου %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Εκεί υπάρχει ήδη ένας κατάλογος με το όνομα \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Ημερομηνία %s δεν υποστηρίζεται" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Ο Κατάλογος %s υπάρχει!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Λειτουργία που έχει απορριφθεί από το χρήστη" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Λάθος κλεισίματος αρχείου" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Αδυναμία δημιουργίας αρχείου" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Όχι άλλα αρχεία στην αρχειοθήκη" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Αδυναμία ανοίγματος υπάρχοντος αρχείου" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Λάθος ανάγνωσης από το αρχείο" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Λάθος εγγραφής στο αρχείο" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Αδυναμία δημιουργίας καταλόγου %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Μη Έγκυρος δεσμός" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Δεν βρέθηκαν αρχεία" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Όχι αρκετή μνήμη" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Η λειτουργία δεν υποστηρίζεται!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Λάθος στην εντολή μενού περιεχόμενου" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Λάθος κατά την φόρτωση των ρυθμίσεων" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Συντακτικό λάθος σε συνήθη φράση!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Αδυναμία μετονομασίας αρχείου %s σε %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Αδύνατη η αποθήκευση συσχετισμού!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Αδύνατη η αποθήκευση αρχείου" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Αδυναμία καθορισμού ιδιοτήτων για \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Αδυναμία ορισμού ημερομηνίας/ώρας για \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Αδυναμία ορισμού ιδιοκτήτη/γκρουπ για \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Αδυναμία ορισμού αδειών για \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Αδυναμία καθορισμού εκτεταμένων ιδιοτήτων για %s" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Ενδιάμεση μνήμη πολύ μικρή" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Πάρα πολλά αρχεία για συμπίεση" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Άγνωστη μορφή Αρχειοθήκης" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Εκτελέσιμο: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Κατάσταση Εξόδου:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Είστε βέβαιοι οτι επιθυμείτε να αφαιρέσετε όλες τις καταχωρήσεις των Αγαπημένων Καρτελών σας; (Δεν υπάρχει \"αναίρεση\" σε αυτή την ενέργεια!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Μεταφορά με το ποντίκι εδώ άλλων καταχωρήσεων" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Εισαγωγή ενός ονόματος για αυτή τη καταχώρηση Αγαπημένης Καρτέλας:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Αποθήκευση μίας νέας καταχώρησης Αγαπημένων Καρτελών" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Αριθμός Αγαπημένων Καρτελών που έχουν εξαχθεί επιτυχώς: %d στις %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Προκαθορισμένη επιπλέον ρύθμιση για αποθήκευση ιστορικού καταλόγου για νέες Αγαπημένες Καρτέλες:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Αριθμός αρχείου(ων) που έχουν εισαχθεί επιτυχώς: %d στα %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Εισήχθησαν καρτέλες Legacy" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Επιλέξτε .tab αρχείο(α) για εισαγωγή (μπορούν να είναι και περισσότερα από ένα κάθε φορά!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Η τελευταία προσαρμογή Αγαπημένων Καρτελών δεν έχει αποθηκευθεί ακόμη. Επιθυμείτε να αποθηκεύσετε πριν να συνεχίσετε;" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Διατήρηση αποθήκευσης ιστορικού καταλόγου με Αγαπημένες Καρτέλες:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ονομασία υπομενού" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Αυτό θα φορτώσει τις Αγαπημένες Καρτέλες: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Αποθήκευση τρεχουσών καρτελών πάνω σε υπάρχουσα καταχώρηση Αγαπημένων Καρτελών" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Το αρχείο %s έχει αλλάξει, αποθήκευση;" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Αντικατάσταση:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Το Αρχείο %s υπάρχει, αντικατάσταση;" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Με το αρχείο:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Το Αρχείο \"%s\" δε βρέθηκε." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Εργασίες Αρχείου ενεργές" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Κάποιες εργασίες αρχείου δεν έχουν ακόμη τελειώσει. Κλείνοντας τον Double Commander ίσως προκληθεί απώλεια δεδομένων." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Το μήκος ονόματος στόχου (%d) είναι περισσότερο από %d χαρακτήρες!\n" "%s\n" "Τα περισσότερα προγράμματα δε θα μπορούν να έχουν πρόσβαση σε αρχείο/κατάλογο με τόσο μακρύ όνομα!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Το Αρχείο %s έχει σημανθεί για ανάγνωση μόνο. Διαγραφή;" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Είστε σίγουροι οτι επιθυμείτε να επαναφορτώσετε το τρέχον αρχείο και να χαθούν οι αλλαγές;" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Το μέγεθος αρχείου του \"%s\" είναι πολύ μεγάλο για το προοριζόμενο σύστημα αρχείων!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Ο Φάκελος %s υπάρχει, συγχώνευση;" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Ακολουθείστε Συμβολοδεσμό \"%s\";" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Επιλέξτε τον τύπο κειμένου προς εισαγωγή" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Προσθήκη %d επιλεγμένων καταλόγων" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Προσθήκη του επιλεγμένου καταλόγου: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Προσθήκη του τρέχοντος καταλόγου: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Εκτέλεση Εντολής" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Ρυθμίσεις του Καταλόγου Hotlist" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Είστε σίγουροι οτι επιθυμείτε να αφαιρέσετε όλες τις καταχωρήσεις από τον κατάλογο Hotlist; (Δεν υπάρχει \"Αναίρεση\" σε αυτή την ενέργεια!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Αυτό θα εκτελέσει την ακόλουθη εντολή:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Αυτό είναι ονομασμένο hot dir " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Αυτό θα αλλάξει το ενεργό πλαίσιο στην ακόλουθη διαδρομή:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Και το ανενεργό πλαίσιο θα αλλάξει στην ακόλουθη διαδρομή:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Λάθος κατά τη λήψη αντιγράφου ασφαλείας των εισαγμένων εγγραφών..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Λάθος εξαγωγής εγγραφών..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Εξαγωγή Όλων!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Εξαγωγή Καταλόγου Hotlist - Επιλέξτε τις καταχωρήσεις που επιθυμείτε να εξαγάγετε" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Εξαγωγή Επιλεγμένων" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Εισαγωγή Όλων!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Εισαγωγή Καταλόγου Hotlist - Επιλέξτε τις καταχωρήσεις που επιθυμείτε να εισαγάγετε" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Εισαγωγή επιλεγμένων" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Διαδρομή:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Εντοπισμός \".hotlist\" αρχείου προς εισαγωγή" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Όνομα Hotdir" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Αριθμός νέων καταχωρήσεων: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Δεν έχει επιλεχθεί τίποτα προς εξαγωγή!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Διαδρομή Hotdir" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Επαναπροσθήκη του επιλεγμένου καταλόγου: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Επαναπροσθήκη του τρέχων καταλόγου: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου του καταλόγου Hotlist για επαναφορά" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Εντολή:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(τέλος του υπομενού)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Ονομασία Μενού:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Ονομασία:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(διαχωριστικό)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ονομασία υπομενού" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Στόχος Hotdir" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Προσδιορίστε αν επιθυμείτε το ενεργό πλαίσιο να ταξινομηθεί με μια ειδική σειρά μετά την αλλαγή καταλόγου" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Προσδιορίστε αν επιθυμείτε το μη ενεργό πλαίσιο να ταξινομηθεί με μια ειδική σειρά μετά την αλλαγή καταλόγου" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης σχετικής διαδρομής, απόλυτης, ειδικούς φακέλους παραθύρων, κ.λ.π." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Σύνολο καταχωρήσεων που έχουν αποθηκευθεί: %d\n" "\n" "Όνομα Αρχείου ασφαλείας: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Σύνολο καταχωρήσεων που έχουν εξαχθεί: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Επιθυμείτε να διαγράψετε όλα τα στοιχεία εντός του υπομενού [%s];\n" "Απαντώντας ΟΧΙ θα διαγράψετε μόνο τους οριοθέτες του μενού αλλά θα διατηρηθεί το στοιχείο μέσα στο υπομενού." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου όπου θα αποθηκευθεί ένα αρχείο καταλόγου Hotlist" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Μη Έγκυρο τελικό μήκος αρχείου για το αρχείο : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Παρακαλώ εισάγετε τον επόμενο δίσκο ή κάτι παρόμοιο.\n" "\n" "Ώστε να επιτραπεί εγγραφή σε αυτό το αρχείο:\n" "\"%s\"\n" "\n" "Αριθμός bytes προς εγγραφή: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Λάθος στη γραμμή εντολών" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Μη Έγκυρο όνομα αρχείου" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Άκυρος τύπος αρχείου ρυθμίσεων" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Μη έγκυρο δεκαεξαδικό νούμερο: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Μη Έγκυρη διαδρομή" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Η Διαδρομή %s περιέχει απαγορευμένος χαρακτήρες." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Αυτό είναι ένα μη έγκυρο πρόσθετο!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Αυτό το πρόσθετο έχει δημιουργηθεί για τον Double Commander για %s.%sΔεν μπορεί να λειτουργήσει στον Double Commander για %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Μη έγκυρη δημιουργία εισαγωγικών" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Μη Έγκυρη επιλογή." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Φόρτωση λίστας αρχείων..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Εντοπισμός αρχείου ρυθμίσεων του TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Εντοπισμός αρχείου εκτέλεσης του TC (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Αντιγραφή αρχείου %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Διαγραφή αρχείου %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Λάθος: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Φόρτωση Εξωτερικά" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Εξαγωγή Αποτελέσματος εξωτερικά" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Εξαγωγή Αρχείου %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Πληροφορίες: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Δημιουργία δεσμού %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Δημιουργία καταλόγου %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Μετακίνηση αρχείου %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Συμπίεση στο αρχείο %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Τερματισμός Προγράμματος" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Έναρξη Προγράμματος" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Αφαίρεση καταλόγου %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Έγινε: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Δημιουργία συμβολοδεσμού %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Δοκιμή ακεραιότητας αρχείου %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Ασφαλής Διαγραφή αρχείου %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Ασφαλής Διαγραφή καταλόγου %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Κύριο Συνθηματικό" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Παρακαλώ εισάγετε το κύριο συνθηματικό:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Νέο Αρχείο" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ο επόμενος τόμος θα αποσυμπιεστεί" #: ulng.rsmsgnofiles msgid "No files" msgstr "Δεν υπάρχουν αρχεία" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Δεν έχουν επιλεχθεί αρχεία." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Όχι αρκετός ελεύθερος χώρος στον στοχευμένο οδηγό, Συνέχιση;" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Όχι αρκετός ελεύθερος χώρος στον στοχευμένο οδηγό, Δοκιμή Ξανά;" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Αδυναμία διαγραφής αρχείου %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Δεν έχει εφαρμοστεί." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Το αντικείμενο δεν υπάρχει!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Η ενέργεια δεν μπορεί να ολοκληρωθεί επειδή το αρχείο είναι ανοικτό σε άλλο πρόγραμμα:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση των διαφόρων ρυθμίσεων." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Συνθηματικό:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Τα συνθηματικά διαφέρουν!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Παρακαλώ εισάγετε το συνθηματικό:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Συνθηματικό (Τείχος Προστασίας):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Παρακαλώ επανεισάγετε το συνθηματικό για ταυτοποίηση:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "Διαγραφή %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Τα προκαθορισμένα \"%s\" ήδη υπάρχουν. Αντικατάσταση;" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Είστε σίγουροι ότι επιθυμείτε τη διαγραφή του ορίσματος \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Πρόβλημα κατά την εκτέλεση της εντολής (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Όνομα Αρχείου για εναποθετημένο κείμενο:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Παρακαλώ, κάντε αυτό το αρχείο διαθέσιμο. Δοκιμή ξανά;" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Εισαγωγή νέου φιλικού ονόματος για αυτή την Αγαπημένη Καρτέλα" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Εισαγωγή νέου ονόματος για αυτό το μενού" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Μετονομασία/μετακίνηση %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Μετονομασία/μετακίνηση επιλεγμένων \"%s\";" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Επιθυμείτε αντικατάσταση αυτού του κειμένου;" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Παρακαλώ επανεκκινείστε τον Double Commander ώστε να εφαρμοστούν οι αλλαγές" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ΛΑΘΟΣ: Πρόβλημα φόρτωσης αρχείου βιβλιοθήκης Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Επιλογή σε ποιους τύπους αρχείων να προστεθεί επέκταση \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Επιλεγμένα: %s από %s, αρχεία: %d από %d, φάκελοι: %d από %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Επιλογή εκτελέσιμου αρχείου για" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Παρακαλώ επιλέξτε μόνο αρχεία αθροίσματος ελέγχου!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Παρακαλώ επιλέξτε τοποθεσία του επόμενου τόμου" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Καθορισμός ετικέτας τόμου" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Ειδικοί Κατάλογοι" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Προσθήκη διαδρομής από το ενεργό πλαίσιο" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Προσθήκη διαδρομής από το ανενεργό πλαίσιο" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Εξερεύνηση και χρήση της επιλεγμένης διαδρομής" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Χρήση μεταβλητής περιβάλλοντος..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Μετάβαση στην ειδική διαδρομή του Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Μετάβαση στην μεταβλητή περιβάλλοντος..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Μετάβαση σε άλλο ειδικό φάκελο των Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Μετάβαση στον ειδικό φάκελο των Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Δημιουργία σχετικής διαδρομής για την hotdir" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Ορίστε ως απόλυτη τη διαδρομή" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Ορίστε ως σχετική την ειδική διαδρομή του Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Ορίστε ως σχετική για την μεταβλητή περιβάλλοντος..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Ορίστε ως σχετική για τον ειδικό Windows φάκελο (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Ορίστε ως σχετική για άλλον ειδικό φάκελο των Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Χρήση της ειδικής διαδρομής του Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Χρήση διαδρομής hotdir" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Χρήση άλλου ειδικού φακέλου των Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Χρήση του ειδικού φακέλου των Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Αυτή η καρτέλα (%s) είναι κλειδωμένη! Άνοιγμα καταλόγου σε άλλη καρτέλα;" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Μετονομασία καρτέλας" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Όνομα νέας καρτέλας:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Διαδρομή στόχου:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Λάθος! Αδυναμία εύρεσης αρχείου TC ρυθμίσεων:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Λάθος! Αδυναμία εύρεσης εκτελέσιμου TC ρυθμίσεων:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Λάθος! Ο TC ακόμη λειτουργεί αλλά θα έπρεπε να είναι κλειστός για αυτή τη λειτουργία.\n" "Κλείστε τον και πιέστε ΟΚ ή πιέστε ΑΚΥΡΩΣΗ για απόρριψη." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Λάθος! Αδυναμία εύρεσης επιθυμητού φακέλου εξαγωγής TC γραμμής εργαλείων:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου που θα αποθηκευθεί ένα αρχείο γραμμής εργαλείων του TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Απενεργοποιημένο ενσωματωμένο παράθυρο τερματικού. Επιθυμείτε ενεργοποίηση;" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ:Τερματισμός μιας διαδικασίας μπορεί να προκαλέσει ανεπιθύμητα αποτελέσματα που περιλαμβάνουν απώλεια δεδομένων και αστάθεια συστήματος. Δεν θα δοθεί δυνατότητα στη διαδικασία να αποθηκεύσει την κατάστασή της ή τα δεδομένα της πριν τερματιστεί. Είστε σίγουροι οτι επιθυμείτε να τερματίσετε τη διαδικασία;" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Επιθυμείτε να δοκιμάσετε τα επιλεγμένα αρχεία;" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" είναι τώρα στο πρόχειρο" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Η Επέκταση του επιλεγμένου αρχείου δεν είναι κάποιος γνωστός τύπος αρχείου" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Εντοπισμός \".toolbar\" αρχείο για εισαγωγή" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Εντοπισμός \".BAR\" αρχείο για εισαγωγή" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου της Γραμμής Εργαλείων για επαναφορά" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Αποθηκεύτηκε!\n" "Όνομα Αρχείου Γραμμής Εργαλείων: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Έχουν επιλεχθεί πάρα πολλά αρχεία." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Απροσδιόριστο" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ΛΑΘΟΣ: Μη προβλεπόμενη χρήση Μενού Προβολής Δέντρου!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<ΟΧΙ ΕΞΩΤΕΡ>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<ΧΩΡΙΣ ΟΝΟΜΑ>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Όνομα Χρήστη:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Όνομα χρήστη (Τείχος Προστασίας):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "EΠΑΛΗΘΕΥΣΗ:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Επιθυμείτε να επαληθεύσετε τα επιλεγμένα ίχνη αθροίσματος;" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Το επιλεγμένο αρχείο είναι καταστραμμένο, αναντιστοιχία ίχνους αθροίσματος!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Ετικέτα τόμου:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Παρακαλώ εισαγάγετε το μέγεθος τόμου:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Επιθυμείτε τη διαμόρφωση τοποθεσίας βιβλιοθήκης Lua;" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Ασφαλής Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Ασφαλής Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgwithactionwith msgid "with" msgstr "με" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Λάθος συνθηματικό!\n" "Παρακαλώ δοκιμάστε ξανά!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Εκτέλεση αυτόματης μετονομασίας του \"όνομα(1).ext\", \"όνομα (2).ext\" κ.λ.π;" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Μετρητής" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Ημερομηνία" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Όνομα Ορίσματος" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Ορισμός ονόματος μεταβλητής" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Ορισμός αξίας μεταβλητής" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Εισαγωγή ονόματος μεταβλητής" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Εισαγωγή τιμής για την μεταβλητή \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Αγνόηση, απλή αποθήκευση σαν [Τελευταίο], Ερώτηση χρήστη για την επιβεβαίωση αποθήκευσης, Αυτόματη αποθήκευση" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Επέκταση" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Όνομα" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Χωρίς αλλαγή;ΚΕΦΑΛΑΙΟ;μικρό;Πρώτο γράμμα κεφαλαίο;Πρώτο Γράμμα κάθε Λέξης Κεφαλαίο;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Το τελευταίο που χρησιμοποιήθηκε]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Τελευταίες μάσκες υπό [Τελευταίο] όρισμα,Τελευταίο όρισμα,Νέες φρέσκες μάσκες" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Μετονομασία Πολλών" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Χαρακτήρας στη θέση x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Χαρακτήρες από την θέση x στη y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Πλήρης ημερομηνία" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Ολοκληρωμένος χρόνος" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Μετρητής" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Ημερομηνία" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Ημέρα (2 ψηφία )" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Ημέρα της εβδομάδας (σύντομο, π.χ., \"δευτ\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Ημέρα της εβδομάδας (μακρύ, π.χ., \"δευτέρα\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Επέκταση" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Πλήρες όνομα αρχείου με διαδρομή και επέκταση" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Πλήρες όνομα αρχείου, χαρακτήρας άνω του μηδενός από x σε y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Ώρα" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Ώρα (2 ψηφία)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Λεπτό" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Λεπτό (2 ψηφία)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Μήνας" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Μήνας (2 ψηφία)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Όνομα Μηνός (σύντομο, π.χ., \"ιαν\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Όνομα Μηνός (μακρύ, π.χ., \"ιανουάριος\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Όνομα" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Γονικός φάκελος(-οι)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Δευτερόλεπτο" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Δευτερόλεπτο (2 ψηφία)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Μεταβλητή εν κινήσει" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Χρονιά (2 ψηφεία)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Χρονιά (4 ψηφεία)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Πρόσθετα" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Αποθήκευση ορίσματος ως" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Το όνομα ορίσματος ήδη υπάρχει. Επανεγγραφή;" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Εισαγωγή νέου ονόματος ορίσματος" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" όρισμα έχει τροποποιηθεί.\n" "Επιθυμείτε να το αποθηκεύσετε τώρα?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Ταξινόμηση ορισμάτων" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Χρόνος" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Προσοχή, διπλότυπες ονομασίες!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Το Αρχείο περιέχει λάθος αριθμό γραμμών: Το %d, θα έπρεπε να είναι %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Διατήρηση;Καθαρισμός;Υπενθύμιση" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Δεν υπάρχει ισοδύναμη εσωτερική εντολή" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Λυπούμαστε, δεν υπάρχει παράθυρο \"Αναζήτηση Αρχείων\" ακόμη..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Λυπούμαστε, δεν υπάρχει άλλο παράθυρο \"Αναζήτηση Αρχείων\" προς κλείσιμο και απελευθέρωση από τη μνήμη..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Ανάπτυξη" #: ulng.rsopenwitheducation msgid "Education" msgstr "Εκπαίδευση" #: ulng.rsopenwithgames msgid "Games" msgstr "Παιχνίδια" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Γραφικά" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "Εφαρμογές (*.app)|*.app|All files (*)|*" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Πολυμέσα" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Δίκτυο" #: ulng.rsopenwithoffice msgid "Office" msgstr "Γραφείο" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Άλλо" #: ulng.rsopenwithscience msgid "Science" msgstr "Επιστήμη" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Ρυθμίσεις" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Σύστημα" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Εξαρτήματα" #: ulng.rsoperaborted msgid "Aborted" msgstr "Έχει απορριφθεί" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Υπολογισμός αθροίσματος ελέγχου" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου του \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Υπολογισμός" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Υπολογισμός \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Ένωση" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Ένωση αρχείων από \"%s\" σε \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Αντιγραφή" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Αντιγραφή από \"%s\" σε \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Αντιγραφή \"%s\" σε \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Δημιουργία καταλόγου" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Δημιουργία καταλόγου \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Διαγραφή" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Διαγραφή σε \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Διαγραφή \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Εκτέλεση" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Εκτέλεση \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Εξαγωγή" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Εξαγωγή από \"%s\" σε \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Τελείωσε" #: ulng.rsoperlisting msgid "Listing" msgstr "Προβολή Λίστας" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Προβολή Λίστας \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Μετακίνηση" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Μετακίνηση από \"%s\"σε \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Μετακίνηση \"%s\"σε \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Δεν έχει εκκινηθεί" #: ulng.rsoperpacking msgid "Packing" msgstr "Συμπίεση" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Συμπίεση από \"%s\" σε \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Συμπίεση \"%s\" σε \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Έχει παυθεί" #: ulng.rsoperpausing msgid "Pausing" msgstr "Παύση" #: ulng.rsoperrunning msgid "Running" msgstr "Εκτέλεση" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Καθορισμός ιδιότητας" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Καθορισμός ιδιότητας σε \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Καθορισμός ιδιότητας των \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Διαμερισμός" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Διαμερισμός \"%s\"σε \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Εκκίνηση" #: ulng.rsoperstopped msgid "Stopped" msgstr "Σταματημένο" #: ulng.rsoperstopping msgid "Stopping" msgstr "Σταμάτημα" #: ulng.rsopertesting msgid "Testing" msgstr "Δοκιμή" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Δοκιμή σε \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Δοκιμή \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Επιβεβαίωση αθροίσματος ελέγχου" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Επιβεβαίωση αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Επιβεβαίωση αθροίσματος ελέγχου του \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Αναμονή για πρόσβαση στην πηγή αρχείων" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Αναμονή για απόκριση από τον χρήστη" #: ulng.rsoperwiping msgid "Wiping" msgstr "Ασφαλής Διαγραφή" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Ασφαλής Διαγραφή σε \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Ασφαλής Διαγραφή \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Επεξεργασία" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Προσθήκη στην αρχή;Προσθήκη στο τέλος;Έξυπνη προσθήκη" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Προσθήκη νέου τύπου αρχείου υπόδειξης" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Για να αλλάξετε τη τρέχουσα διαμόρφωση αρχείου, ΕΦΑΡΜΟΓΗ ή ΔΙΑΓΡΑΦΗ της τρέχουσας διαμόρφωσης" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Εξαρτώμενο από την κατάσταση, επιπρόσθετη εντολή" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Προσθήκη σε περίπτωση που δεν είναι κενό" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Αρχείο (μακρύ όνομα)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Επιλογή εκτελέσιμου προγράμματος συμπίεσης" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Αρχείο (σύντομο όνομα)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Αλλαγή Κωδικοποίησης Λίστας Προγράμματος Συμπίεσης" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Είστε σίγουροι οτι επιθυμείτε να διαγράψετε: \"%s\";" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Εξαγόμενη Διαμόρφωση Προγράμματος Συμπίεσης" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "errorlevel" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Εξαγωγή διαμόρφωσης προγράμματος συμπίεσης" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Ολοκληρώθηκε η Εξαγωγή %d στοιχείων στο αρχείο \"%s\"." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Επιλογή αυτού(-ων) που επιθυμείτε να εξάγετε" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Λίστα αρχείων (μακρυά ονόματα)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Λίστα αρχείων (σύντομα ονόματα)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Εισαγωγή διαμόρφωσης προγραμμάτων συμπίεσης" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Ολοκληρώθηκε η Εισαγωγή %d στοιχείων από το αρχείο \"%s\"." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Επιλογή αρχείου για εισαγωγή διαμόρφωσης(-εων) προγράμματος συμπίεσης" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Επιλογή αυτού(-ων) που επιθυμείτε να εισάγετε" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Χρήση μόνο ονόματος, χωρίς διαδρομή" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Χρήση μόνο διαδρομής, χωρίς όνομα" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Πρόγραμμα Αρχείου (μακρύ όνομα)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Πρόγραμμα Αρχείου (σύντομο όνομα)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Όλα τα ονόματα σε εισαγωγικά" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Ονόματα με διαστήματα σε εισαγωγικά" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Μονό όνομα αρχείου προς επεξεργασία" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Τελικός υποκατάλογος" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Χρήση κωδικοποίησης ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Χρήση κωδικοποίησης UTF8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου που θα αποθηκευθεί η διαμόρφωση του προγράμματος συμπίεσης" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Όνομα τύπου αρχειοθήκης:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Συσχετισμός του προσθέτου \"%s\" με:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Πρώτο;Τελευταίο;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Κλασική, σειρά legacy;Αλφαβητική σειρά (αλλά η γλώσσα ακόμη πρώτη)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Πλήρη ανάπτυξη;Πλήρη σύμπτυξη" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Ενεργό πλαισιακό πάνελ στα αριστερά, ανενεργό στα δεξιά (legacy);Αριστερό πλαισιακό πάνελ στα αριστερά, δεξιό στα δεξιά" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Εισάγετε επέκταση" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Προσθήκη στην αρχή;Προσθήκη στο τέλος;Με Αλφαβητική σειρά" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "ξεχωριστό παράθυρο;ελαχιστοποιημένο ξεχωριστό παράθυρο;πάνελ λειτουργειών" #: ulng.rsoptfilesizefloat msgid "float" msgstr "float" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Η συντόμευση %s για το cm_Delete θα κατοχυρωθεί, ώστε να χρησιμοποιηθεί για να γίνει αντιστροφή αυτής της ρύθμισης.." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Προσθήκη ειδικού πλήκτρου για %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Προσθήκη συντόμευσης" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Αδυναμία καθορισμού συντόμευσης" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Αλλαγή συντόμευσης" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Εντολή" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Η συντόμευση %s για το cm_Delete έχει μία παράμετρο που αντικαθιστά αυτή τη ρύθμιση. Επιθυμείτε να αλλάξετε αυτή τη παράμετρο και να κάνετε χρήση των γενικών ρυθμίσεων;" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Η συντόμευση %s για το cm_Delete πρέπει να έχει μία παράμετρο που να ταιριάζει με τη συντόμευση %s. Επιθυμείτε να την αλλάξετε;" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Περιγραφή" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Ρύθμιση ειδικού πλήκτρου για %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Διόρθωση παραμέτρου" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Ειδικά Πλήκτρα" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<κανένα>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Παράμετροι" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Καθορισμός συντόμευσης για διαγραφή αρχείου" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Για να λειτουργήσει αυτή η ρύθμιση με τη συντόμευση %s, η συντόμευση %s πρέπει να κατοχυρωθεί στο cm_Delete αλλά είναι ήδη εκχωρημένη στο %s. Επιθυμείτε να την αλλάξετε;" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Η συντόμευση %s για το cm_Delete είναι μία ακολουθία συντόμευσης για την οποία ένα ειδικό πλήκτρο που να απασχολεί το Shift δεν μπορεί να οριστεί. Αυτή η ρύθμιση πιθανώς δε θα λειτουργήσει." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Συντόμευση σε χρήση" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Συντόμευση %s έχει ήδη χρησιμοποιηθεί." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Αλλαγή σε %s;" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "χρησιμοποιείται για %s σε %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "χρησιμοποιείται για αυτή την εντολή αλλά με διαφορετικές παραμέτρους" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Εφαρμογές Συμπίεσης" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Αυτόματη Ανανέωση" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Γενικές Ρυθμίσεις" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Σύντομα" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Χρώματα" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Στήλες" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Διαμόρφωση" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Προσαρμοσμένες στήλες" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Έξτρα Καταλόγου Hotlist" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Μεταφορά & απόθεση" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Κουμπιά Λίστας Οδηγών" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Αγαπημένες Καρτέλες" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Έξτρα Συσχετισμών Αρχείου" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Συσχετισμοί Αρχείου" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Νέο" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Λειτουργίες Αρχείου" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Πάνελ Αρχείων" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Αναζήτηση Αρχείου" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Προβολές Αρχείων" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Έξτρα Προβολών Αρχείου" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Τύποι Αρχείου" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Καρτέλες Φακέλων" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Έξτρα Καρτελών Φακέλων" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Γραμματοσειρές" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Μαρκαδόροι" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Ειδικά Πλήκτρα" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Εικονίδια" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Λίστα Αγνοημένων" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Πλήκτρα" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Γλώσσα" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Διάταξη" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Καταγραφή" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Διάφορα" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ποντίκι" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Μετονομασία Πολλών" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Οι Ρυθμίσεις έχουν αλλάξει στο \"%s\"\n" "\n" "Επιθυμείτε αποθήκευση των αλλαγών?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Πρόσθετα" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Φίλτρο ταχείας αναζήτησης" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Τερματικό" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Γραμμή εργαλείων" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Έξτρα γραμμής εργαλείων" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Μέση γραμμής εργαλείων" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Εργαλεία" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Υποδείξεις" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Μενού Προβολής Δέντρου" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Χρώματα Μενού Προβολής Δέντρου" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Κανένα;Γραμμή Εντολών;Ταχεία αναζήτηση;Γρήγορο Φίλτρο" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Αριστερό Κουμπί;Δεξιό Κουμπί;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "στην κορυφή της λίστας αρχείου;μετά τους καταλόγους (αν οι κατάλογοι είναι τοποθετημένοι πριν τα αρχεία);σε ταξινομημένη θέση;στο τέλος της λίστας αρχείου" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Προσωπικό float;Προσωπικό byte;Προσωπικό kilobyte;Προσωπικό megabyte;Προσωπικό gigabyte;Προσωπικό terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Το Πρόσθετο %s έχει ήδη εκχωρηθεί για τις ακόλουθες επεκτάσεις:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Απενεργοποίηση" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Ενεργοποίηση" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Ενεργό" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Περιγραφή" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ονομασία αρχείου" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Ανά επέκταση" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Ανά πρόσθετο" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Όνομα" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Κατάταξη προσθέτων WCX είναι δυνατή μόνο όταν γίνεται εμφάνιση προσθέτων ανά επέκταση!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Έχει καταχωρηθεί σε" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Επιλογή αρχείου βιβλιοθήκης Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Τύπος Αρχείου Μετονομασίας Υπόδειξης" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Ενεργοποιημένο;Απενεργοποιημένο" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Αρχεία;Κατάλογοι;Αρχεία και Κατάλογοι" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Κρύψιμο του πάνελ φίλτρου όταν δεν είναι εστιασμένο;συνέχιση αποθήκευσης ρυθμίσεων μετατροπών για την επόμενη συνεδρία" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "χωρίς διάκριση πεζών-κεφαλαίων;σύμφωνα με τις ρυθμίσεις εντοπιότητας (αΑβΒγΓ);το πρώτο πεζό μετά κεφαλαίο (ΑΒΓαβγ)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ταξινόμηση κατά όνομα και εμφάνιση του πρώτου;ταξινόμηση σαν αρχεία και εμφάνιση του πρώτου;ταξινόμηση σαν αρχεία" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Αλφαβητικά, σε σχέση με τον τονισμό, Αλφαβητικά με κατάταξη ειδικών χαρακτήρων, Φυσική κατάταξη: αλφαβητικά και αριθμητικά, Φυσική με κατάταξη ειδικών χαρακτήρων" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Κορυφή;Κάτω;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Διαχωριστικό;Εσωτερική εντολή;Εξωτερική εντολή;Μενού" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Για να αλλάξετε τη διαμόρφωση τύπου αρχείου υπόδειξης, ΕΦΑΡΜΟΓΗ ή ΔΙΑΓΡΑΦΗ της τρέχουσας διαμόρφωσης" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Όνομα Κατηγορίας:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "Το \"%s\" υπάρχει ήδη!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Είστε σίγουροι οτι επιθυμείτε να διαγράψετε: \"%s\";" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Εξαγμένος τύπος αρχείου διαμόρφωσης υπόδειξης" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Εξαγωγή τύπου αρχείου διαμόρφωσης υπόδειξης" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Ολοκληρώθηκε η Εξαγωγή %d στοιχείων στο αρχείο \"%s\"." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Επιλογή αυτού(-ων) που επιθυμείτε να εξάγετε" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Εισαγωγή τύπου αρχείου διαμόρφωσης υπόδειξης" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Ολοκληρώθηκε η Εισαγωγή %d στοιχείων από το αρχείο \"%s\"." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Επιλογή αρχείου για εισαγωγή τύπου αρχείου διαμόρφωσης(-εων) υπόδειξης" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Επιλογή αυτού(-ων) που επιθυμείτε να εισάγετε" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Εισαγωγή τοποθεσίας και ονόματος αρχείου όπου θα αποθηκευθεί η διαμόρφωση τύπου αρχείου υπόδειξης" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Όνομα τύπου αρχείου υπόδειξης" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC legacy - Αντιγραφή (x) όνομα_αρχείου.επέκταση;Windows - όνομα_αρχείου (x).επέκταση;Άλλα - όνομα_αρχείου(x).επέκταση" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "χωρίς αλλαγή θέσης;χρήση της ίδιας ρύθμισης με τα νέα αρχεία;σε ταξινομημένη θέση" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Με πλήρη απόλυτη διαδρομή;Σχετικά διαμορφωμένη διαδρομή %COMMANDER_PATH%;Σχετικά διαμορφωμένη διαδρομή σύμφωνα με το ακόλουθο" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "περιέχει(πεζό)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "περιέχει" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(πεζό)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Το πεδίο \"%s\" δεν βρέθηκε!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!περιέχει(πεζό)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!περιέχει" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(πεζό)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Το πρόσθετο \"%s\" δεν βρέθηκε!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Η μονάδα \"%s\" δεν βρέθηκε στο πεδίο \"%s\" !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Αρχεία: %d, Φάκελοι: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Αδυναμία αλλαγής δικαιωμάτων πρόσβασης για \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Αδυναμία αλλαγής ιδιοκτησίας για \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Αρχείο" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Κατάλογος" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Πολλαπλοί τύποι" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Ονομασμένο pipe" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Ειδική block device" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Ειδική character device" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Συμβολoδεσμός" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Άγνωστος τύπος" #: ulng.rssearchresult msgid "Search result" msgstr "Αναζήτηση αποτελέσματος" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ΑΝΑΖΗΤΗΣΗ" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<πρότυπο χωρίς όνομα>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Μια αναζήτηση αρχείων με χρήση του προσθέτου DSX είναι ήδη σε εξέλιξη.\n" "Πρέπει να ολοκληρωθεί αυτή ώστε να φορτωθεί μια νέα." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Μια αναζήτηση αρχείων με χρήση του προσθέτου WDX είναι ήδη σε εξέλιξη.\n" "Πρέπει να ολοκληρωθεί αυτή ώστε να φορτωθεί μια νέα." #: ulng.rsselectdir msgid "Select a directory" msgstr "Επιλέξτε ένα κατάλογο" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Νεώτερο;Παλαιότερο;Μεγαλύτερο;Μικρότερο;Πρώτο στο γκρουπ;Τελευταίο στο γκρουπ" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Επιλογή επιθυμητού παραθύρου" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Εμφάνιση βοήθειας για %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Όλα" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Κατηγορία" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Στήλη" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Εντολή" #: ulng.rssimpleworderror msgid "Error" msgstr "Λάθος" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Απέτυχε!" #: ulng.rssimplewordfalse msgid "False" msgstr "Λάθος" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Όνομα αρχείου" #: ulng.rssimplewordfiles msgid "files" msgstr "αρχεία" #: ulng.rssimplewordletter msgid "Letter" msgstr "Γράμμα" #: ulng.rssimplewordparameter msgid "Param" msgstr "Παράμετρος" #: ulng.rssimplewordresult msgid "Result" msgstr "Αποτέλεσμα" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Επιτυχές!" #: ulng.rssimplewordtrue msgid "True" msgstr "Αληθές" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Μεταβλητή" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Κατάλογος Εργασίας" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Αρχεία: %d, Κατάλογοι: %d, Μέγεθος: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Αδυναμία δημιουργίας καταλόγου στόχου!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Μη Έγκυρος τύπος μεγέθους αρχείου!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Αδυναμία διαμερισμού του Αρχείου!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Ο αριθμός τμημάτων είναι παραπάνω από 100! Συνέχιση;" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Αυτόματα;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Επιλογή καταλόγου:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Μόνο προεπισκόπηση" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Άλλα" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Υποσημείωση" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Επίπεδο" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Περιορισμένο" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Απλό" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabulous" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Marvelous" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Tremendous" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Επιλογή καταλόγου από το Ιστορικό Καταλόγου" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Επιλογή Αγαπημένων Καρτελών:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Επιλογή Εντολής από το Ιστορικό Γραμμής Εντολών" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Επιλογή Ενέργειας από το Βασικό Μενού" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Επιλογή Ενέργειας από τη γραμμή Βασικών Εργαλείων" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Επιλογή καταλόγου από το Hot Directory:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Επιλογή καταλόγου από το Ιστορικό Προβολής Αρχείου" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Επιλογή αρχείου ή καταλόγου" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Λάθος κατά τη δημιουργία συμβολοδεσμού." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Προκαθορισμένο Κείμενο" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Απλό Κείμενο" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Να μη γίνει τίποτα;Κλείσιμο καρτέλας;Πρόσβαση Αγαπημένων Καρτελών;Αναδυόμενο μενού Καρτελών" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Μέρα(ες)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Ώρα(ες)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Λεπτό(ά)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Μήνας(ες)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Δευτερόλεπτο(α)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Εβδομάδα(ες)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Χρόνος(ια)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Μετονομασία Αγαπημένων Καρτελών" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Μετονομασία υπο-μενού Αγαπημένων Καρτελών" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differ" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Επεξεργαστής" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Λάθος ανοίγματος differ" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Λάθος ανοίγματος επεξεργαστή" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Λάθος ανοίγματος τερματικού" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Λάθος ανοίγματος προβολέα" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Τερματικό" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Προκαθορισμένα Συστήματος;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Ποτέ Απόκρυψη" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Συνδυασμός DC και υπόδειξης συστήματος, DC πρώτα (legacy);Συνδυασμός DC και υπόδειξης συστήματος, πρώτα συστήματος;Εμφάνιση DC υπόδειξης όταν είναι δυνατό και συστήματος όταν δεν είναι;Εμφάνιση μόνο DC υπόδειξης;Εμφάνιση μόνο υπόδειξης συστήματος" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Προβολέας" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Παρακαλώ αναφέρετε αυτό το πρόβλημα στον αποσφαλματωτή με μία περιγραφή του τι έχετε κάνει και το ακόλουθο αρχείο:%sΠιέστε %s για να συνεχίσετε ή %s για απόρριψη του προγράμματος." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Και τα δύο πάνελ, από το ενεργό στο ανενεργό" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Και τα δύο πάνελ, από τα αριστερά στα δεξιά" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Διαδρομή του πάνελ" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Βάλτε κάθε όνομα σε παρένθεση ή οτιδήποτε επιθυμείτε" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Μόνο όνομα αρχείου, χωρίς επέκταση" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Πλήρες όνομα αρχείου (διαδρομή και όνομα αρχείου)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Βοήθεια για \"%\" μεταβλητές" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Θα ζητηθεί από το χρήστη να εισάγει μια παράμετρο με την προκαθορισμένη προτεινόμενη τιμή" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Τελευταίος κατάλογος της διαδρομής πάνελ" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Τελευταίος κατάλογος της διαδρομής αρχείου" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Αριστερό πάνελ" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Προσωρινό όνομα αρχείου τη λίστας με τα ονόματα αρχείων" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Προσωρινό όνομα αρχείου τη λίστας με τα ολοκληρωμένα ονόματα αρχείων (διαδρομή+όνομα αρχείου)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Ονόματα αρχείων λίστας σε UTF-16 με BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Ονόματα αρχείων λίστας σε UTF-16 με BOM, μέσα σε διπλά εισαγωγικά" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Ονόματα αρχείων λίστας σε UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Ονόματα αρχείων λίστας σε UTF-8, μέσα σε διπλά εισαγωγικά" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Προσωρινό όνομα αρχείου τη λίστας με τα ονόματα αρχείων με σχετική διαδρομή" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Μόνο επέκταση αρχείου" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Μόνο όνομα αρχείου" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Άλλο παράδειγμα για το τι είναι δυνατό" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Διαδρομή, χωρίς τελικό οριοθέτη" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Από εδώ ως το τέλος της γραμμής, ο δείκτης της μεταβλητής επί τοις εκατό είναι το \"#\" σύμβολο" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Επιστροφή του συμβόλου επί τοις εκατό" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Από εδώ ως το τέλος της γραμμής, ο δείκτης της μεταβλητής επί τοις εκατό είναι πάλι το \"%\" σύμβολο" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Βάλτε ως πρόθυμα στα ονόματα ένα \"-α \" 'η ότι άλλο επιθυμείτε" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Ερώτηση χρήστη για παράμετρο;Πρόταση προκαθορισμένης τιμής]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Όνομα αρχείου με σχετική διαδρομή" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Δεξιό πάνελ" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Πλήρης διαδρομή του δεύτερου επιλεγμένου αρχείου στο δεξιό πάνελ" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Εμφάνιση εντολής προ εκτέλεσης" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Απλό μήνυμα]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Θα εμφανίσει ένα απλό μήνυμα" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Ενεργό πάνελ (πηγή)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Ανενεργό πάνελ (στόχος)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Τα ονόματα αρχείων θα μπουν σε εισαγωγικά από εδώ (προκαθορισμένο)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Η Εντολή θα εκτελεστεί σε τερματικό που θα μείνει ανοικτό στο τέλος" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Οι Διαδρομές θα έχουν τελικό οριοθέτη" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Τα ονόματα αρχείων δε θα μπουν σε εισαγωγικά από εδώ" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Η εντολή θα πραγματοποιηθεί σε τερματικό που θα κλείσει στο τέλος" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Οι Διαδρομές δε θα έχουν τελικό οριοθέτη (προκαθορισμένο)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Δίκτυο" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Κάδος Ανακύκλωσης" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Εσωτερικός Προβολέας του Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Κακή Ποιότητα" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Κωδικοποίηση" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Τύπος Εικόνας" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Νέο Μέγεθος" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s δεν βρέθηκαν!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Πεντάγραμμο;Ορθογώνιο;Έλλειψη" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "με εξωτερικό προβολέα" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "με εσωτερικό προβολέα" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Αριθμός αντικατάστασης: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Δεν πραγματοποιήθηκε καμία αντικατάσταση." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Δεν υπάρχει διαμόρφωση με το όνομα \"%s\"" �������������������������������������������doublecmd-1.1.30/language/doublecmd.de.po�����������������������������������������������������������0000644�0001750�0000144�00001442232�15104114162�017245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2024-01-05 09:11+0100\n" "Last-Translator: ㋡ <braass@mail.de>\n" "Language-Team: Deutsch <braass@mail.de>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Deutsch\n" "Language: de\n" "X-Generator: Poedit 2.3\n" "X-Poedit-Bookmarks: -1,3123,-1,-1,-1,-1,-1,-1,-1,-1\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergleichen ... %d%% (ESC zum Abbrechen)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Links: %d Datei(en) löschen" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Rechts: %d Datei(en) löschen" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Dateien gefunden: %d (Identisch: %d, Unterschiedlich: %d, Nur links: %d, Nur rechts: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Von links nach rechts: %d Dateien kopieren, Gesamtgröße: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Von rechts nach links: %d Dateien kopieren, Gesamtgröße: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vorlage wählen ..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Speic&herplatz prüfen" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Attribute ko&pieren" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Besitzer k&opieren" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Berechtigungen ko&pieren" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "D&atum/Zeit kopieren" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Links &korrigieren" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Sch&reibschutz-Attribut entfernen" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Leere &Verzeichnisse ausschließen" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Links folgen" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Speicherplatz &reservieren" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Copy-On-Write" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "Verifizieren" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Aktion, wenn Attribute nicht geändert werden können" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Dateivorlage verwenden" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "W&enn das Verzeichnis vorhanden ist" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "&Wenn die Datei vorhanden ist" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "We&nn Eigenschaften nicht eingestellt werden können" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<Keine Vorlage>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "In die Zwischenablage kopieren" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Über" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Übertragen" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Homepage:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revision" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbrechen" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Zurücksetzen" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Attribute wählen" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Archiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Ko&mprimiert" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "Ver&zeichnis" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "V&erschlüsselt" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Versteckt" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "&Schreibgeschützt" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Sparse" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symlink" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporär" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-Attribute" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Allgemeine Attribute" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr " Ausführen" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Als Te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Größe der Benchmark-Daten: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Prüfsumme" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Zeit (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Geschwindigkeit (MB/s)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Prüfsumme berechnen ..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Prüfsummen-Datei öffnen, nachdem der Job beendet ist" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Einzelne Prüfsumme fü&r jede Datei erstellen" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "Dateiformat" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Prüf&summen-Datei(en) speichern unter:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Prüfsumme verifizieren ..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kodierung" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Ve&rbinden" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "&Löschen" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Bearb&eiten" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Verbindungsmanager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Verbinden mit:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Warteschlange" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&ptionen" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Diese Einstellungen als Standard speichern" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Datei(en) kopieren" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Neue Warteschlange" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Warteschlange 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Warteschlange 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Warteschlange 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Warteschlange 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Warteschlange 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Beschreibung speichern" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Beschreibung von Datei/Verzeichnis" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Beschreibung bearbeiten für:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Kodierung:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automatisch vergleichen" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binärer Modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Abbrechen" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Abbrechen" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Block nach rechts kopieren" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Block nach rechts kopieren" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Block nach links kopieren" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Block nach links kopieren" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Wiederholen" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Wiederholen" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Alle wählen" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Rückgängig" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Beenden" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Suchen" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Suchen" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Nächstes suchen" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Nächstes suchen" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Voriges suchen" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Voriges suchen" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "E&rsetzen" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Ersetzen" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Erster Unterschied" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Erster Unterschied" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Gehe zu Zeile ..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Gehe zu Zeile" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Groß-/Kleinschreibung ignorieren" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Leerzeichen ignorieren" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Bildlauf fortsetzen" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Letzter Unterschied" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Letzter Unterschied" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Zeilenunterschiede" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Nächster Unterschied" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Nächster Unterschied" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Links öffnen ..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Rechts öffnen ..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Hintergrund farbig markieren" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Voriger Unterschied" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Voriger Unterschied" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Neu laden" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Neu laden" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Speichern" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Speichern" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Speichern unter ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Speichern unter ..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Links speichern" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Links speichern" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Links speichern unter ..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Links speichern unter ..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Rechts speichern" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Rechts speichern" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Rechts speichern unter ..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Rechts speichern unter ..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Vergleichen" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Vergleichen" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kodierung" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kodierung" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Dateien vergleichen" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Aktionen" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Bea&rbeiten" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Kodierung" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Datei" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Optionen" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Neue Tastenkombination zur Sequenz hinzufügen" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbrechen" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Letzte Tastenkombination aus Abfolge entfernen" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Tastenkombination aus der Liste der verbleibenden freien Tasten wählen" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Nur für diese Steuerungselemente" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parameter (jeder in einer eigenen Zeile):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Tastaturkürzel:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "&Über" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Einstellungen" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Einstellungen" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopieren" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Ausschneiden" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "&Löschen" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Suchen" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Suchen" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Nächstes suchen" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Nächstes suchen" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Voriges suchen" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gehe zu Zeile ..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Einfügen" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Wiederholen" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Letzte Aktion wiederholen" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "E&rsetzen" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Ersetzen" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Alle wählen" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Alle wählen" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Letzte Aktion rückgängig machen" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Datei schließen" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Programm beenden" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Neu" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Neue Datei erstellen" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Öffnen" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Datei öffnen" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Neu &laden" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Speichern" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Datei speichern" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Speichern &unter ..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Datei unter anderem Namen speichern" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Texteditor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bearbeiten" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodierung" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Öffnen als" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Speichern unter" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datei" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "S&yntaxhervorhebung" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Ende der Zeile" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Abbrechen" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Mehrzeiliges Schema" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Groß-/Kleins&chreibung" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Suche ab &Cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Reguläre Ausdrücke" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Nur den markierten &Text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Nur ganze &Worte" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Optionen" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Ersetzen mit:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Suche nach:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Richtung" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Für alle aktuellen Objekte bereitstellen" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Dateien entpacken" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Pfad mit entpacken (falls gespeichert)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Jedes Archiv in &separatem Unterverzeichnis entpacken (mit Namen des Archivs)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Vorhandene Dateien überschreiben" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "In das Verzeichnis:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Dateien passend zur Maske entpacken:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Passwort für verschlüsselte Dateien:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Warten ..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Dateiname:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Von:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Auf 'Schließen' klicken, wenn die temporären Daten gelöscht werden können!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&In Dateifenster" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Alle anzeigen" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktueller Vorgang:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Von:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Nach:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschaften" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Ausführen als Programm &erlauben" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "Rekursiv (Unterverzeichnisse eingeschlossen)" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Enthält:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Erstellt:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr " Ausführen" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Ausführen:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pfad:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Gruppe" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Letzter Zugriff:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Letzte Änderung:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Letzte Statusänderung:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Links:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "Medienart:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "Besit&zer" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Größe auf Datenträger:" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Größe:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink zu:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Name" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Wert" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschaften" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Schließen" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Beenden" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Entsperren" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Alle entsperren" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Entsperren" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Dateihandler" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Prozess ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Pfad der ausführbaren Datei" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "&Abbrechen" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Suche abbrechen und Fenster s&chließen" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Schließen" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Konfiguration der Tastaturkürzel" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Bea&rbeiten" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "In &Listbox einfügen" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Suche abbrechen, beenden und Speicher freigeben" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Alle anderen Dateisuchen abbrechen, beenden und Speicher freigeben" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Zu Datei &gehen" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "In Dateien suchen" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Letzte Suche" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Neue Suche" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Neue Suche (Filter löschen)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Zur \"Erweitert\"-Seite gehen" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Zur \"Laden/Speichern\"-Seite gehen" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Zur nächsten Seite wechseln" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Zur \"Plugins\"-Seite gehen" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Zur vorigen Seite wechseln" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Zur \"Ergebnisse\"-Seite gehen" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Zur \"Standard\"-Seite gehen" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Starten" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Betrachten" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "tfrmfinddlg.btnsavetemplate.caption" msgid "&Save" msgstr "&Speichern" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "L&öschen" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Laden" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Speichern" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "S&peichern mit 'Start-in-Verzeichnis'" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Wenn gespeichert, wird 'Starte in Verzeichnis' wiederhergestellt, wenn die Vorlage geladen wird. Für eine Suche, die immer im gleichen Verzeichnis starten soll" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Vorlage benutzen" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Dateien suchen" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Groß-/Kle&inschreibung beachten" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Ab &Datum:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Bis Datum:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Ab Größe:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Bis Größe:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "In &Archiv(en) suchen" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Text suchen" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "S&ymlinks folgen" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Suche Dateien die &NICHT den Text enthalten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nicht &älter als:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Office-XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Geöffnete Tabs" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Suc&he nach Teil des Dateinamens" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Reguläre Ausdrücke" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "E&rsetze mit" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Gew&ählte Verzeichnisse und Dateien" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "R&egulärer Ausdruck" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Ab Zeit:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&Bis Zeit:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Verwende Such-Plugin:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "gleicher Inhalt" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "gleiche Prüfsumme" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "gleicher Name" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Doppelte Dateien finden:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "gleiche Größe" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadezimal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Verzeichnisnamen eingeben, die von der Suche ausgeschlossen werden sollen (Namen mit \";\" trennen)" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Dateinamen eingeben, die von der Suche ausgeschlossen werden sollen (Namen mit \";\" trennen)" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Dateinamen durch \";\" getrennt eingeben" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Feld" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Wert" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Verzeichnisse" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Dateien" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "In Dateien suchen" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attri&bute" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "&Kodierung:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Unterverzeichnisse &ausschließen" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Dateien a&usschließen" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Dateimaske" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "&In Verzeichnis starten" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Unter&verzeichnisse durchsuchen:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Vorige Suche(n):" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "Aktion" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Alle anderen abbrechen, beenden und Speicher freigeben" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "In (einem) neuen Tab(s) öffnen" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Optionen" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Von der Liste entfernen" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Ergebnisse" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Alle gefundenen Einträge anzeigen" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "In Editor öffnen" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "In Betrachter zeigen" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Anzeigen" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Erweitert" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Laden/Speichern" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Ergebnisse" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Suchen" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Suchen" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "Rückwärts" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Groß-/Kleinschreibung be&achten" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Reguläre Ausdrücke" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadezimal" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Domain:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Passwort:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Benutzername:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Anonym verbinden" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Verbinden als Benutzer:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Erstelle Hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "Bestehen&des Ziel (auf das der Hardlink zeigt)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Hard&link-Name" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Alle importieren!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Gewählte importieren" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Einträge wählen, die importiert werden sollen" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Wird ein Untermenü gewählt, wird das ganze Menü gewählt" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "[Strg] gedrückt halten und Einträge anklicken, um mehrere auszuwählen" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Binder" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Speichern unter ..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Eintrag" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Dateiname" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "A&bwärts" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "A&bwärts" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "&Löschen" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Aufw&ärts" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Aufw&ärts" #: tfrmmain.actabout.caption msgid "&About" msgstr "&Über" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Tab per Index aktivieren" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dateiname in die Befehlszeile einfügen" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Neues Suchfenster ..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Pfad und Dateiname in die Befehlszeile einfügen" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "&Pfad in die Befehlszeile kopieren" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Plugin hinzufügen" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "Benchmark" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Kompakte Ansicht" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kompakte Ansicht" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Belegten &Speicherplatz berechnen" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Verzeichnis wechseln" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Zum Benutzerverzeichnis wechseln" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "In das übergeordnete Verzeichnis wechseln" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Zum Stammverzeichnis wechseln" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Prüf&summe berechnen ..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Prüfsumme verifizieren ..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Logdatei löschen" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Logfenster löschen" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "&Alle Tabs schließen" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Doppelte Tabs schließen" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "Tab &schließen" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Nächste Befehlszeile" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Nächsten Befehl aus Verlauf in der Befehlszeile einstellen" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Vorige Befehlszeile" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Vorigen Befehl aus Verlauf in der Befehlszeile einstellen" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Ausführlich" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Spaltenansicht" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Vergleiche nach &Inhalt" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Verzeichnisse vergleichen" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Verzeichnisse vergleichen" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Konfiguration der Packer" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnisliste ⎈" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Konfiguration der Favoriten" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Konfiguration der Tabs" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Konfiguration der Tastaturkürzel" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Konfiguration der Plugins" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Position und Größe von DC merken" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Einstellungen speichern" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Konfiguration der Suchen" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Symbolleiste ..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Konfiguration der Tooltips" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Konfiguration Baumansicht-Menü" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Konfiguration der Baumansicht-Farben" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Kontextmenü anzeigen" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopieren" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Alle Tabs auf die gegenüberliegende Seite kopieren" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Alle markierten Daten in die Zwischenablage kopieren" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Dateinamen mit komplettem &Pfad kopieren" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Datei&namen in die Zwischenablage kopieren" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Namen mit UNC-Pfad kopieren" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Datei(en) ohne Nachfrage kopieren" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Den kompletten Pfad der markierten Datei(en) ohne Verzeichnis-Trennzeichen am Ende kopieren" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Den kompletten Pfad der markierten Datei(en) kopieren" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Ins gleiche Dateifenster kopieren" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopieren" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Belegten Speicherplatz anzeigen" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "A&usschneiden" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Befehlsparameter anzeigen" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Löschen" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Alle Suchen abbrechen, beenden und Speicher freigeben" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Verzeichnisverlauf" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Verzeichnisliste ⎈" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Internen Befehl ausführen ..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Einen Befehl wählen und ausführen" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Bearbeiten" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Beschreibung bearbeiten (descript.ion)" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Datei erstellen und bearbeiten" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Pfadzeile über der Dateiliste bearbeiten" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Dateifenster tauschen" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Script ausführen" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Dateien entpacken ..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Konfiguration der Dateityp-Zuordnungen" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Dateien zusammenfügen ..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Dateiei&genschaften anzeigen" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Datei aufteilen ..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "\"&Flache\" Darstellung (ESC zum Abbrechen)" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "\"Flache\" Darstellung, nur gewählte" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus auf die Befehlsze&ile" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Aktives Fenster tauschen" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Zwischen linker und rechter Dateiliste wechseln" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Zur Baumansicht wechseln" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Zwischen aktueller Dateiliste und Baumansicht (falls aktiviert) wechseln" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Cursor auf erstes Verzeichnis oder Datei setzen" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Cursor auf die erste Datei in der Liste setzen" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Cursor auf letztes Verzeichnis oder Datei setzen" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Cursor auf die letzte Datei in der Liste setzen" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Cursor auf nächstes Verzeichnis oder Datei setzen" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Cursor auf voriges Verzeichnis oder Datei setzen" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "&Hardlink erstellen ..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Hilfe &Index" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horizontal getrennte Dateifenster" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastaturkürzel Index" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Kompakte Ansicht im linken Dateifenster" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Spaltenansicht im linken Dateifenster" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Links wie Rechts" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "\"&Flache\" Darstellung im linken Dateifenster" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "&Linke Laufwerksliste öffnen" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Reihenfolge im linken Dateifenster umkehren" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Linkes Dateifenster nach &Attributen sortieren" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Linkes Dateifenster nach &Datum sortieren" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Linkes Dateifenster nach &Dateierweiterung sortieren" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Linkes Dateifenster nach &Namen sortieren" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Linkes Dateifenster nach &Größe sortieren" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vorschaubilder im linken Dateifenster" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Tabs von Favorit laden" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Liste laden" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Liste von Dateien/Verzeichnissen von der angegebenen Text-Datei laden" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Auswahl aus der &Zwischenablage laden" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Auswah&l aus Datei laden ..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Lade Tabs aus Datei" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "&Verzeichnis erstellen" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Alle mit gleicher &Erweiterung wählen" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Alle Dateien mit gleichem Namen wählen" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Alle Dateien mit gleichem Namen und Erweiterung wählen" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Alle im gleichen Pfad wählen" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Auswahl um&kehren" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Alle wählen" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Gru&ppe abwählen ..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Gruppe wählen ..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Alle a&bwählen" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Fenster minimieren" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Aktuellen Tab nach links bewegen" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Aktuellen Tab nach rechts bewegen" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Meh&rfaches umbenennen" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Net&zwerk verbinden ..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Netzwerk &trennen" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Netzwerk schnell &verbinden ..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Ne&uer Tab" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Nächsten Favorit aus der Liste laden" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Zum n&ächsten Tab wechseln" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Öffnen" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Öffnen des Archivs versuchen" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Leisten-Datei öffnen" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Verzeichnis in neue&m Tab öffnen" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Laufwerk/Medium per Index öffnen" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "&VFS-Liste öffnen" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Vorgänge in Warteschlange" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Optionen ..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Dateien packen ..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Position des Fensterteilers festlegen" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Einf&ügen" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Vorigen Favorit aus der Liste laden" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Zum v&origen Tab wechseln" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Schneller Filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Schnelle Suche" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "S&chnellansicht" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "A&ktualisieren" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Zuletzt geladenen Favorit erneut laden" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Verschieben" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Verschieben/Umbenennen von Datei(en) ohne Nachfrage" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Umbenennen" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Tab umbenennen" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Erneut in zuletzt geladenem Favorit speichern" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Auswahl w&iederherstellen" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Umgekehrt anordnen" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Kompakte Ansicht im rechten Dateifenster" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Spaltenansicht im rechten Dateifenster" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Rechts wie Links" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "\"&Flache\" Darstellung im rechten Dateifenster" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Rechte Laufwerksliste öffnen" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Reihenfolge im rechten Dateifenster umkehren" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Rechtes Dateifenster nach &Attributen sortieren" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Rechtes Dateifenster nach &Datum sortieren" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Rechtes Dateifenster nach &Dateierweiterung sortieren" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Rechtes Dateifenster nach &Namen sortieren" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Rechtes Dateifenster nach &Größe sortieren" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vorschaubilder im rechten Dateifenster" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Terminalemulation öffnen" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Aktuelle Tabs als neuen Favorit speichern" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "Alle dargestellten Spalten in einer Datei speichern" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Auswahl speiche&rn" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Auswa&hl in Datei speichern ..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Tabs in Datei &speichern" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Suchen ..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle Tabs gesperrt, Verzeichniswechsel öffnet neuen Tab" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Alle Tabs normal (entsperrt)" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Alle Tabs gesperrt, kein Verzeichniswechsel möglich" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle Tabs gesperrt, Verzeichniswechsel möglich" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Dateieigensch&aften ändern ..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Gesperrt, Verzeichniswechsel öffnet neuen Tab" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal (entsperrt)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Gesperrt, kein Verzeichniswechsel möglich" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Gesperrt, &Verzeichniswechsel möglich" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Öffnen" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Öffnen mit Dateityp-Zuordnung des Systems" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Werkzeugleiste anzeigen" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Befehlszeilenverlauf anzeigen" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Versteckte und Systemdateien anzeigen" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "Tab-Liste anzeigen" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "Liste aller offenen Tabs anzeigen" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Nach &Attributen sortieren" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Nach &Datum sortieren" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Nach &Erweiterung sortieren" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Nach &Name sortieren" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Nach &Größe sortieren" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Laufwerksliste öffnen" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "\"Dateinamen nicht anzeigen\"-Liste ein-/ausschalten" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Symlink erstellen ..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Synchrone Navigation" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Verzeichniswechsel synchron in beiden Dateifenstern" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Verzeichnisse synchronisieren ..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Ziel = &Quelle" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Archiv(e) &testen" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Vorschaubilder" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vorschaubilder Ansicht" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Vollbild-Modus der Befehlszeile ein- und ausschalten" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Markiertes Verzeichnis in das linke Fenster bewegen" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "&Markiertes Verzeichnis in das rechte Fenster bewegen" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Verzeichnisbaum-Feld" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Anhand von Parametern sortieren" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Alle mit gleicher Erweiterung abwählen" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Alle Dateien mit gleichem Namen abwählen" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Alle Dateien mit gleichem Namen und Erweiterung abwählen" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Alle im gleichen Pfad abwählen" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Betrachten" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Den Verlauf der besuchten Pfade des aktiven Dateifensters zeigen" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Zum nächsten Eintrag in der Verlaufsliste gehen" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Zum vorigen Eintrag in der Verlaufsliste gehen" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Logdatei anzeigen" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Aktuelle Suchfenster anzeigen" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Homepage von Double Commander öffnen" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Gründlich löschen (nur HDD)" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Mit Verzeichnisliste und Parametern arbeiten" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Beenden" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Verzeichnis" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Löschen" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "⎈" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Verzeichnisliste ⎈" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Aktuelles Verzeichnis der rechten Seite auch auf der linken Seite anzeigen" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Zum Benutzerverzeichnis wechseln" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Zum Stammverzeichnis wechseln" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Zum übergeordneten Verzeichnis wechseln" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "⎈" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Verzeichnisliste ⎈" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Aktuelles Verzeichnis der linken Seite auch auf der rechten Seite anzeigen" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Pfad" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Abbrechen" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopieren ..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Hardlink erstellen ..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Leeren" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Verstecken" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Alle wählen" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Verschieben ..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Symlink erstellen ..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Tab-Optionen" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Wiederherstellen" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Abbrechen" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Befehle" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "K&onfigurieren" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "&Favoriten" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Dateien" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markieren" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "&Netzwerk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Ansicht" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Tab-&Optionen" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr " &Tabs " #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Bea&rbeiten" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Internen Befehl wählen" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Herkömmlich sortiert" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Herkömmlich sortiert" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Automatisch alle Kategorien auswählen" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Auswahl:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Kategorien:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Befehls&name:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Aktion:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Tastaturkürzel:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hilfe" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Hinweis" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Tastaturkürzel" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Hilfe" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definieren ..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Abhängig von Groß-/Kleinschreibung" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Akzente und Ligaturen ignorieren" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Attribute:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Eingabemaske:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ode&r vordefinierten Auswahltyp wählen:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Neues Verzeichnis erstellen" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Erweiterte Schreibweise" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Namen für neues Verze&ichnis eingeben:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Neue Größe" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Höhe :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kompression (Qualität) für JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Breite :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Höhe" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Breite" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Erweiterung" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Dateiname" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Leeren" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Leeren" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "S&chließen" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Einstellungen" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Zähler" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Zähler" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Löschen" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Liste der Voreinstellungen ausklappen" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Namen bearbeiten ..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Aktuell neue Namen bearbeiten ..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Erweiterung" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Erweiterung" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "B&earbeiten" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Menü \"Relativer Pfad\" aufrufen" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Letzte Voreinstellung laden" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Namen laden von Datei ..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Voreinstellung nach Namen oder Index laden" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Voreinstellung 1 laden" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Voreinstellung 2 laden" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Voreinstellung 3 laden" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Voreinstellung 4 laden" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Voreinstellung 5 laden" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Voreinstellung 6 laden" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Voreinstellung 7 laden" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Voreinstellung 8 laden" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Voreinstellung 9 laden" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Dateiname" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Dateiname" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Plugins" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Plugins" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Umbenennen" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Alles zurücksetzen" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Speichern" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Speichern unter ..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Voreinstellungen-Menü anzeigen" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Sortieren" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Zeit" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Zeit" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Umbenennen-Logdatei anzeigen" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Mehrfaches Umbenennen" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Abhängig von Groß-/Kleinschreibung" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Log" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Anhängen" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Nur einmal pro Datei ersetzen" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguläre Ausdrücke" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Ersetzung n&utzen" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Zähler" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Suchen und e&rsetzen" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Vorgaben" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Erweiterung" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Su&chen ..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervall" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Datei&name" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Er&setzen ..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "S&tarten bei" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Stellen" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Aktionen" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "B&earbeiten" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Alter Dateiname" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Neuer Dateiname" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Dateipfad" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "OK klicken, wenn Sie den Editor beendet haben, um die geänderten Namen zu laden!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Anwendung auswählen" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Benutzerdefinierter Befehl" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Dateityp-Zuordnung speichern" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Gewählte Aktion als Standard festlegen" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Dateityp zum Öffnen: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Mehrere Dateinamen" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Mehrere URL" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Einzelner Dateiname" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Einzelne URL" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "Anwenden" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Hilfe" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Optionen" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Bitte eine der Unterseiten wählen, diese Seite enthält keine Einstellmöglichkeiten." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Anwenden" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopieren" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Löschen" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Andere ..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Umbenennen" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Kennzeichen verwendet mit cm_OpenArchive, um Archive anhand ihres Inhalts und nicht ihrer Dateierweiterung zu erkennen:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Optionen:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Archivierungsanalyse-Modus:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "A&ktiviert" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "De&bug-Modus" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Die Ausgabe der Befehlszeile anzeigen" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Archivname ohne Erweiterung als Liste verwenden" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix Dateiattribute" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix Trennzeichen für Pfade \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows Dateiattribute" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows Trennzeichen für Pfade \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "H&inzufügen:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arc&hivierer:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Löschen:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Be&schreibung:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "&Erweiterung:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "En&tpacken:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Ohne Pfad entpacken:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "ID Position:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "ID Such-Bereich:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Liste:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Packer:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Aufli&stungsende (optional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Auflistungsfor&mat:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Auflistun&gsbeginn (optional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Passwortabfrage:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Selbstentpackendes Archiv (Sfx) erstellen:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Testen:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "A&uto-Konfiguration" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Alle deaktivieren" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Änderungen verwerfen" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Alle aktivieren" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportieren ..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importieren ..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Packer sortieren" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Zusätzlich" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Allgemein" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Wenn sich &Größe, Datum oder Attribute ändern" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Für die &folgenden Pfade und Unterverzeichnisse:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Wenn Dateien erstellt, gelöscht oder umbenannt werden" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Wenn die Anwendung im Hintergrund läuft" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Kein automatisches Auffrischen:" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Dateiliste auffrischen:" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Tray-Icon &immer anzeigen" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Nicht mehr eingehängte Laufwerke automatisc&h ausblenden (Linux: unmounted)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "In den System-Tray minimieren" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Nur eine einzelne Instanz von Doub&le Commander erlauben" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Hier können ein oder mehrere Laufwerke oder Mount_Points angegeben werden, die mit \";\" getrennt werden müssen." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Schwarze Liste für Laufwerke" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Spaltenweite" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Dateierweiterungen anzeigen" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Ausgerichtet (mit TAB)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Unmittelba&r hinter dem Dateinamen" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Feste Anzahl von Spalten" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Feste Spaltenweite" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Farbverlauf für Anzeige" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binär-Format" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "Schriftzeichen" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "Bilder" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "Textmodus" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "Hinzugefügt:" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "Hintergrund:" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Text:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "Kategorie:" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "Entfernt:" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "Fehler:" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "Bildhintergrund:" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Hintergrund 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Hintergrun&d:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Balkenfarbe:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "Farbe ab 90% Belegung:" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "Information:" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "Links:" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Geändert:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Geändert:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "Rechts:" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Erfolgreich:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "Unbekannt:" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Zustand" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "Spaltentitel wie Werte ausrichten" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Text auf Spaltenbreite kürzen" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Zelle erweitern, wenn der Text nicht in die Spalte passt" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Horizontale Linien" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Vertikale Linien" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Spalten &automatisch füllen" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Gitterstruktur zur Orientierung anzeigen" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Größe der Spalten automatisch einstellen" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "&Größe der Spalten automatisch einstellen:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Anwenden" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "B&earbeiten" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Verlauf der Befehlszeile" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Ver&zeichnisverlauf" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Dateimasken-Verlau&f" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Tabs" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "&Konfiguration speichern" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Suc&hen/Ersetzen Verlauf" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Zustand Hauptfenster" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Verzeichnisse" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Speicherort der Konfigurationsdateien" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Beim Beenden speichern" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sortierreihenfolge im Verzeichnisbaum links" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Status des Verzeichnisbaums, wenn die Konfiguration aufgerufen wird" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "In der Befehlszeile einstellen" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Texteditor:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Icon Themen:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Cache für Vorschaubilder:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "P&rogrammverzeichnis (portable Version)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "&Benutzerverzeichnis" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "L&öschen" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Vorgaben einstellen" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr " Neu " #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Nächstes" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Voriges" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Speichern unter" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Speichern" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Erlaube Farbüberlagerung" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Wenn etwas zum Ändern angeklickt wird, das in allen Spalten ändern" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Allgemein" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Cursorrand" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Cursor nur als Rahmen" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Inaktive Auswahl farbig" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Auswahl invertiert färben" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Benutzerdefinierte Schriftart und -farbe für diese Ansicht nutzen" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Hintergrund:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Jede 2. Zeile:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Spaltenansicht:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuelle Bezeichnung der Spalte]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cursorfarbe:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Cursortext:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "Dateisystem:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Schriftart:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Größe:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Textfarbe:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farbe für inaktiven Cursor:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farbe für inaktive Markierung:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Markierungsfarbe:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Unten ist eine Vorschau. Sie kann für eine sofortige Überprüfung der Einstellungen genutzt werden." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Einstellungen für Spalten:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Spalte hinzufügen" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Position des Dateifensters nach dem Vergleich:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Verzeichnis des aktiven Fensters hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Verzeichnisse des aktiven und inaktiven Fensters hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Verzeichnis hinzufügen, das ich aufrufe" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgid "Add a copy of the selected entry" msgstr "Eine Kopie des gewählten Eintrages hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Aktuell gewähltes oder aktives Verzeichnis des aktiven Fensters hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Trennzeichen hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Untermenü hinzufügen" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Verzeichnis hinzufügen, dass ich eintippe" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Alle einklappen" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Element einklappen" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Gewählte Einträge ausschneiden" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Alle löschen!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Gewählte Einträge löschen" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Untermenü und alle seine Elemente löschen" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Untermenü löschen, aber Elemente behalten" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Element ausklappen" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Verzeichnisbaum-Fenster" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Zum ersten Element gehen" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Zum letzten Element gehen" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Zum nächsten Element gehen" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Zum vorigen Element gehen" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Verzeichnis des aktiven Fensters einfügen" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Verzeichnisse des aktiven und inaktiven Fensters einfügen" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Verzeichnis einfügen, das ich aufrufe" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Eine Kopie des gewählten Eintrags einfügen" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Aktuell gewählte oder aktive Verzeichnisse des aktiven Fensters einfügen" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Trennzeichen einfügen" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Untermenü einfügen" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Verzeichnis einfügen, das ich eintippe" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Zum nächsten bewegen" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Zum vorigen bewegen" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Alle Zweige ausklappen" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Einfügen was ausgeschnitten wurde" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Suchen und ersetzen im Pfad" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Suchen und ersetzen im Pfad und im Ziel" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Suchen und ersetzen im Zielpfad" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Pfad anpassen" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Zielpfad anpassen" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Hinzufügen ..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Backup ..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Löschen ..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportieren ..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importieren ..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Einfügen ..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Verschiedenes ..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Einige Funktionen um angemessene Ziele zu wählen" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Sortieren ..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Beim Hinzufügen eines Verzeichnisses auch das Ziel hinzufügen" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Verzeichnisbaum immer ausklappen" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Nur gültige Umgebungsvariablen anzeigen" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Im Menü anzeigen: [Auch\\den\\kompletten\\Pfad]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Name, a bis z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Name, a bis z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Verzeichnisliste ⎈ (sortieren durch ziehen und ablegen)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andere Optionen" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Name:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Pfad:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "Ziel:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "... aktuelle Ebene von gewähltem Element(en)" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Alle Pfade des Favoriten scannen, um die tatsächlich vorhandenen zu überprüfen" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Alle Pfade und Ziele des Favoriten scannen, um die tatsächlich vorhandenen zu überprüfen" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "in einer Verzeichnisliste-Datei (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Starte die Konfiguration von TC-bezogenen Informationen" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "Starte die Konfiguration von TC-bezogenen Informationen" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Favoriten-Testmenü" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "aus einer Verzeichnisliste-Datei (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "aus einer \"wincmd.ini\" des TotalCommander" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "Navigieren ..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Wiederherstellen einer Verzeichnisliste aus einem Backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Ein Backup der aktuellen Verzeichnisliste ⎈ speichern" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Suchen und Ersetzen ..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "... alles von A bis Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "... nur einzelne Gruppe von Element(en)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "... Inhalt von gewähltem Untermenü(s), aber keine Unterebene" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "... Inhalt von gewähltem Untermenü(s) und alle Unterebenen" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Testergebnisse-Menü" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Pfad anpassen" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Zielpfad anpassen" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Zusätzlich aus dem Hauptfeld" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Aktuelle Einstellungen bei Verzeichnisliste ⎈ anwenden" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Quelle" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Ziel" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Pfade" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Art und Weise, beim Hinzufügen Pfade zu setzen:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Dies tun für Pfade von:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pfad wird relativ zu:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Fragen, welches von allen unterstützten Formaten ständig benutzt werden soll" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Beim Speichern von Unicode-Text das UTF-8-Format verwenden (wird sonst das UTF-16-Format sein)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Wenn Text abgelegt wird, den Dateinamen automatisch erstelle (ansonsten wird der Benutzer gefragt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Be&stätigungsdialog nach dem Ziehen und Ablegen von Dateien anzeigen" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Wenn Text im Dateifenster abgelegt wird:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Das wahrscheinlichste Format an oberste Stelle setzen (ziehen und ablegen):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(ist das gewünschte nicht verfügbar, nächstes verwenden, und so weiter)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(wird mit einigen Quellen nicht funktionieren, bitte in dem Fall versuchsweise einzelne abwählen)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Dateisystem an&zeigen" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Freien Speicher anzeigen" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "&Laufwerksbezeichnung zeigen" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Laufwerksliste" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Automatischer Einzug" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Ermöglicht das Einrücken des Cursors, wenn eine neue Zeile mit [Eingabe] erzeugt wird, mit demselben Maß an führendem Leerraum wie die vorige Zeile" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "Gruppe rückgängig machen" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "Alle Änderungen desselben Typs werden auf einmal verarbeitet, anstatt alle einzeln rückgängig zu machen, bzw. zu wiederholen" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Rechter Rand:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Cursor über Zeilenende hinaus" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Erlaubt, dass der Cursor in den leeren Raum hinter der Zeilenendposition geht" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Sonderzeichen anzeigen" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Sonderzeichen für Leerzeichen und Tabulatoren zeigen" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Smart Tabs" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Drücken der [Tab]-Taste bringt den Cursor auf das nächste Nicht-Leerzeichen der vorherigen Zeile" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tabulator-Einrückungen" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Wenn aktiv, bewirken [Tab], bzw. [Umschalt]+[Tab] Blockeinzug und heben Einzüge auf, wenn Text markiert ist" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Leerzeichen statt Tabulatoren verwenden" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Tabulator wird (während der Eingabe) zu einer festgelegten Anzahl Leerzeichen" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Leerzeichen am Ende löschen" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automatisch Leerzeichen am Ende löschen, nur bei bearbeiteten Zeilen" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Bitte beachten, dass die \"Smart Tabs\"-Option Vorrang bei Tabulator-Operationen hat" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Optionen des internen Editors" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "Absatzeinzug:" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tabulatorweite:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Bitte beachten, dass die \"Smart Tabs\"-Option Vorrang bei Tabulator-Operationen hat" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Hintergrund" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Hintergrund" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Zurücksetzen" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Speichern" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Attribut des Elements" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Vo&rdergrund" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Vo&rdergrund" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Textmarkierung" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Nutze (und bearbeite) all&gemeine Schemaeinstellungen" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Nutze &lokale Schemaeinstellungen" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Fett" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "&Umgekehrt" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kurs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Durchge&strichen" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Unterstreichen" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Hinzufügen ..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Löschen ..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Import/Export" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Einfügen ..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortieren ..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Nichts" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Verzeichnisbaum immer ausklappen" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nein" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Links" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Rechts" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Liste der Favoriten (sortieren durch ziehen und ablegen)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andere Optionen" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Was wo wiederhergestellt werden soll, für den gewählten Eintrag:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Bestehende Tabs erhalten" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Verzeichnisverlauf speichern:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Links gespeicherte Tabs werden wiederhergestellt" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Rechts gespeicherte Tabs werden wiederhergestellt" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "Ein Trennzeichen" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Trennzeichen hinzufügen" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "Untermenü" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Untermenü hinzufügen" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Alle Zweige einklappen" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... aktuelle Ebene von markiertem Element(en)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Ausschneiden" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Alle löschen!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Untermenü und alle seine Elemente" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Nur das Untermenü, nicht seine Elemente" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "Gewähltes Element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Gewähltes Element löschen" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Auswahl in ältere Version .tab-Datei(en) exportieren" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Favoriten Testmenü" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Ältere Version .tab-Datei(en) gemäß Standardeinstellung importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Ältere Version .tab-Datei(en) an gewählte Position importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Ältere Version .tab-Datei(en) an gewählte Position importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Ältere Version .tab-Datei(en) an gewählter Position in ein Untermenü importieren" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Trennzeichen einfügen" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Untermenü einfügen" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Alle Zweige ausklappen" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Einfügen" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "... alles von A bis Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "... nur einzelne Gruppe von Element(en)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortiere nur einzelne Gruppe von Element(en)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "... Inhalt von gewähltem Untermenü(s), aber keine Unterebene" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "... Inhalt von gewähltem Untermenü(s) und alle Unterebenen" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testergebnisse-Menü" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Hinzufügen" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "&Hinzufügen" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klonen" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Internen Befehl auswählen" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Abwärts" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Bea&rbeiten" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Einfügen" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "Einfügen" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Ent&fernen" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Ent&fernen" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Umb&enennen" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Erinnerungshilfe für Variablen" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Abwärts" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Startpfad des Befehls. Keinesfalls in Anführungszeichen setzen." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Name der Aktion. Wird nicht an das System übergeben, ist nur eine Merkhilfe" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter für den Befehl. Lange Dateinamen mit Leerzeichen sollten in Anführungszeichen gesetzt werden." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Auszuführender Befehl. Keinesfalls in Anführungszeichen setzen." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Beschreibung der Aktion" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Aktionen" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Erweiterungen" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kann durch ziehen und ablegen sortiert werden" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Dateitypen" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Aktionen können durch ziehen und ablegen sortiert werden" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Erweiterungen können durch ziehen und ablegen sortiert werden" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Dateitypen können durch ziehen und ablegen sortiert werden" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Name der Aktion:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Befehl:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parameter:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Start&pfad:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Anpassen mit ..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Anpassen" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Bea&rbeiten" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Im Editor öffnen" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Bearbeiten mit ..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ausgabe von Befehl abrufen" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Im internen Editor öffnen" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Im internen Betrachter öffnen" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Öffnen" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Öffnen mit ..." #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "In der Terminalemulation ausführen" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Betrachten" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "In Betrachter öffnen" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Betrachten mit ..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Hier klicken um das Icon zu ändern!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Aktuelle Einstellungen auf alle aktuell konfigurierten Dateinamen und Pfade anwenden" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "Voreingestellte Kontextaktionen (Betrachten/Bearbeiten)" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Mit Befehlszeile ausführen" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Erweitertes Kontextmenü" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfiguration der Dateityp-Zuordnung" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Anbieten die Auswahl zur Dateityp-Zuordnung hinzuzufügen, wenn nicht bereits enthalten" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Bei Zugriff auf die Dateityp-Zuordnung anbieten, die aktuelle Datei hinzuzufügen, wenn nicht bereits in einem konfigurierten Typ enthalten" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "In Terminalemulation ausführen und beenden" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "In Terminalemulation ausführen und bereit bleiben" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Befehle" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Icons" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Startpfade" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Einträge für erweiterte Optionen:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Pfade" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Art und Weise Pfade zu setzen, wenn Elemente für Icons, Befehle und Startpfade hinzugefügt werden:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Dies tun für Dateien und Pfad von:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pfad wird relativ zu:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Bestätigungsdialog zeigen für:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kop&ieren" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Löschen" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Löschen in den Papierkorb (endgültig löschen bei gedrückter [Umschalt]-Taste)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "In d&en Papierkorb verschieben" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Sch&reibschutz-Attribut entfernen (beim Kopieren, z.B. von CD)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Verschieben" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Beschreibungen von Dateien/Verzeichnissen mitbearbeiten" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "&Beim Umbenennen Dateinamen ohne Erweiterung markieren -> ▩▩▩▩▩▩.erw" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Auswahldialog für Tabs im Kopieren/Verschieben-Dialog an&zeigen" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "&Fehler bei Dateioperationen ignorieren und sie im Logfenster anzeigen" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Packvorgang testen" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Prüfsumme verifizieren" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Operationen ausführen" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Benutzerschnittstelle" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Puffergröße für Dateioperationen (in KB)" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Puffergröße für die &Hash-Kalkulation (in KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Operationsfortschritt anzeigen in" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Doppelte Dateinamen automatisch so erweitern:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Überschreibvorgänge beim gründlich Löschen (keine SSD, MMC, USB-Sticks!):" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Auf Standard-Einstellungen zurücksetzen" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Erlaube Farbüberlagerung" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "&Cursor nur als Rahmen" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Inaktiver Cursor farbig" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Auswahl invertiert färben" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Cursorrand" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "Aktueller Pfad" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Hinter&grund:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Jede 2. Zeile:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "C&ursorfarbe:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Cursorte&xt:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktiver Cursor:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inaktive Markierung:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel:" msgstr "&Helligkeit des inaktiven Dateifensters:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Markierungsfarbe:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "Hintergrund:" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Textfarbe:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "Hintergrund wenn inaktiv:" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "Textfarbe wenn inaktiv:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Vorschau: Cursor bewegen und Dateien markieren, um gleich einen Eindruck von den verschieden Einstellungen zu bekommen." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "T&extfarbe:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Bei Starten der Dateisuche Filter für Dateimaske löschen" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Suche nach Teil des Dateinamens" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Menüleiste in \"Dateisuche\" anzeigen" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Textsuche in Dateien" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Dateien suchen" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Aktuelle Filter mit \"Neue Suche\"-Tastfläche:" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standardvorlage für Suche:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "In Speicherabbildung bei Textsuche in Dateien suchen" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Im Datenstrom bei Textsuche in Dateien suchen" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatierung" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Verwende individuelle Abkürzungen:" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Sortierung" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Groß-/Kleinschr&eibung:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Falsches Format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Datums- und Zeitformat:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format der Dateigr&öße:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "&Fußzeilenformat:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "K&opfzeilenformat" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megabyte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Neue Date&ien einfügen:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Größeneinheit:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "So&rtierung von Verzeichnissen:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Sortier&methode:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Aktualisierte Dateien verschiebe&n:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hilfe" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Wechsel in das übergeordnete Verzeichnis durch Doppelklick auf den leeren Teil der Dateiansicht aktivieren" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Dateiliste nicht laden, bis ein Tab aktiviert ist" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Eckige Klammern um Verzeic&hnisse anzeigen" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Neue und aktualisierte Dateien ma&rkieren" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Sofortiges Umbenennen bei zweimaligem Anklicken eines Namens ermöglichen" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "&Dateiliste in eigenem Prozess starten" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Icons nach Da&teiliste laden" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Versteckte und S&ystemdateien anzeigen — bitte beachten, dass die nicht ohne Grund versteckt sind" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Wenn Dateien mit der [Leertaste] ausgewählt werden, zur nächsten Datei wechseln (wie mit [Einfügen])" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Filter beim Markieren von Dateien wie bei Windows, z.B. \"*.*\" (Stern-Punkt-Stern) wählt auch Dateien ohne Erweiterung" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Jedes Mal einen unabhängigen Attributfilter im Maskeneingabe-Dialog verwenden" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Wählen/Abwählen von Einträgen" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Standardwert der Attributmaske wählen:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Anwenden" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Löschen" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Vorlage ..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Dateitypfarben (sortieren durch ziehen und ablegen)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Kategorie-Attribute:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "&Kategoriefarbe:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Kategorie&maske:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Kategorie&name:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Schriftarten" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Tastaturkürzel &hinzufügen" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopieren" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "&Löschen" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Tastaturkürzel löschen" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Tastaturkürz&el bearbeiten" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Nächste Kategorie" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Das Menü zur Datei einblenden" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Vorige Kategorie" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Standard DC wiederherstellen" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Jetzt speichern" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Nach Befehlsname sortiert" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Nach Tastaturkürzeln (gruppiert) sortieren" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Nach Tastaturkürzeln (eins pro Zeile) sortieren" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "K&ategorien:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "&Befehle:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Tastaturkürzel-Dateien:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "So&rtierreihenfolge:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorien" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Befehl" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Sortierreihenfolge" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Befehl" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Tastaturkürzel" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Beschreibung" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Tastaturkürzel" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parameter" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Kontrollelemente" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Für die &folgenden Pfade und Unterverzeichnisse:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Icons für Aktionen in Menüs anzeigen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Icons in Tastflächen anzeigen" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Überlagerte Icons zeigen (z.B. Pfeile bei Links)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Versteckte Dateien blasser anzeigen (verlangsamt schwache Systeme)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Keine speziellen Icons" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Größe der Icons " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Icon Thema" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Icons anzeigen" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Icons links vom Dateinamen anzeigen " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Laufwerks/Medien-Liste:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Dateifenster:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "A&lle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Alle zugeordneten plus .&exe-/.lnk-Dateien (verlangsamt schwache Systeme)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Keine Icons" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Nur &Standard-Icons" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Gewählte Namen hinzufügen" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Gewählte Namen mit komplettem Pfad hinzufügen" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Die folgenden Dateien und Verzeichnisse &ignorieren (nicht zeigen):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Speichern in:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "[🠤] bzw. [🠦] wechselt das Verzeichnis (Lynx-artiges Navigieren)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tippen" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "[Alt]+[Buchstabe]:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "[Strg]+[Alt]+[Buchstabe]:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "[Buchstabe]:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Flache Tastflächen" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Flaches Erschei&nungsbild" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "<Freier Speicher>-Anzeige bei Laufwerksnamen" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Lo&gdatei anzeigen" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Vorgänge anzeigen, die im Hintergrund ablaufen" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Auch den Gesamtfortschritt (bei laufenden Dateioperationen) anzeigen" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Befehlsze&ile anzeigen -> [Aktueller\\Pfad]$: ░░░░░░░░░ ..." #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Aktuelles Verzeichnis (Pfadzeile) oberhalb der Dateiliste anzeigen" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Tastflächen für &Laufwerke/Medien anzeigen" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "\"<Freier Speicher> von <Speicherplatz> frei\" über den Dateifenstern anzeigen" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Tastfläche für die Laufwe&rks/Medien-Liste anzeigen" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "[F-Tasten] anzeigen (unten)" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Menüleiste (oben) anzeigen" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "Symbolleiste anzeigen" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Nur \"<freier Speicher> frei\" anzeigen" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "&Statuszeile anzeigen -> Ausgewählt: # von #, ..." #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Spaltenköpfe anzeigen -> Überschrift und Breite der Spalten anzeigen" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Tabs anzeigen" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Terminalemulation anzeigen -> 𝙰𝚋𝚕𝚊𝚞𝚏 𝚍𝚎𝚛 𝙱𝚎𝚏𝚎𝚑𝚕𝚎 𝚊𝚗𝚣𝚎𝚒𝚐𝚎𝚗" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zwei &Laufwerksleisten (feste Breite, über den Dateifenstern) anzeigen" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Mittlere (senkrechte) Symbolleiste anzeigen" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Bildschirmdarstellung " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Inhalt der Logdatei betrachten" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Datum im Namen der Logdatei" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Packen/Entpacken" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Externe Ausführung einer Befehlszeile" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopieren/Verschieben/Erstellen von Link/S&ymlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Löschen" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Ers&tellen/Löschen von Verzeichnissen" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "F&ehler aufzeichnen" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "E&rstelle Logdatei:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Maximale Anzahl Logdateien" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Informat&ionsmeldungen aufzeichnen" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/Herunterfahren" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Erfolgreich abgeschlossene Vorg&änge aufzeichnen" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Dateisystem Plugins" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Dateioperation Logdatei" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Folgende Vorgänge aufzeichnen" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Status der Vorgänge" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Vo&rschaubilder für gelöschte Dateien entfernen" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "Inhalt der Konfigurations-Datei anzeigen" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgid "Create new with the encoding:" msgstr "Neu erstellen mit der Kodierung:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Bei Wechsel des Laufwerks/Mediums immer zum Stammverzeichnis wechseln (letzte Position 'vergessen')" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Aktuelles Verzeichnis in der Titelleiste anzeigen" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "&Splash Screen (Startbildschirm) zeigen" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "&Warnungen anzeigen (quittieren mit \"OK\"-Taste)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Speichern von Vorschaubildern im Cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Vorschaubilder" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Beschreibung zu Dateie(n) (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "In Bezug auf TC Import/Export:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "Standard 'single-byte' Textkodierung (Schrift mit weniger als 256 Zeichen -> lateinisch, griechisch, kyrillisch, thailändisch, arabisch, hebräisch):" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgid "Default encoding:" msgstr "Standard Kodierung:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsdatei:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC ausführbare Datei:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ausgabepfad für Symbolleiste:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "Pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Größe der Vorschaubilder:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Auswahl/Markieren mit der Maus" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "und der Textcursor folgt nicht mehr dem Mauszeiger" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "auch durch klicken auf das Icon des Elements" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Öffnen mit" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Bildlauf" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Auswahl/Markieren" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modus:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Doppelklick" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Die Liste um Anzahl Zeilen scrollen:" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Zeile für Zeile den Cursor bewegen" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Die Liste &Seite für Seite scrollen" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "einfacher Klick (öffnet Dateien und Verzeichnisse)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTIONTFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Single click (opens folders, double click for files)" msgstr "einfacher Klick (öffnet Verzeichnisse, Doppelklick für Dateien)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Inhalt der Logdatei anzeigen" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Einzelne Verzeichnisse je Tag" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Dateinamen mit komplettem Pfad aufzeichnen" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Menüleiste oben anzeigen " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Aufzeichnung umbenennen" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Ungültige Zeichen in Dateinamen ersetzen durch" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "In der gleichen Umbenennen-Logdatei anhängen" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Pro Voreinstellung" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Mit geänderter Voreinstellung verlassen" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Voreinstellung beim Start" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "E&instellen" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Aktiviere&n" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "An&passen" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Beschreibung" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Suc&h-Plugins erlauben es, alternative Such-Algorithmen oder aber externe Tools (wie \"locate\", oder ähnliches) zu nutzen" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Aktuelle Einstellungen auf alle aktuell konfigurierten Plugins anwenden" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Beim Hinzufügen eines neuen Plugins automatisch Anpassungs-Dialog öffnen" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Einstellungen:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Diese Lua-Bibliothek verwenden:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pfad wird relativ zu:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Stil des Plugin-Dateinamens beim Hinzufügen eines neuen Plugins:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Pack&er-Plugins fassen eine oder mehrere Dateien zu Archivdateien zusammen bzw. extrahieren sie wieder daraus" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Inhalts-Plu&gins erlauben es, Metadaten, wie z.B. MP3-Tags oder Exif-Daten, in Dateilisten anzuzeigen, oder sie zur Suche oder Umbenennung zu nutzen" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Dateisystem-P&lugins erlauben auf Dateisysteme oder externe Laufwerke zuzugreifen, auf die das Betriebssystem nicht zugreifen kann (z.B. Palm oder Pocket-PCs)." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Be&trachter-Plugins erlauben die Anzeige von speziellen Bild-, Tabellen-, Datenbankformaten o.ä. mit dem Betrachter ([F3] oder [Strg]+[Q])" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dateiname" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Anfang (Name muss mit dem ersten eingetippten Buchstaben beginnen)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Ende (letztes Zeichen vor einem \"Punkt\" muss passen)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Optionen" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Exakte Übereinstimmung des &Namens" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Suchlauf" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Suche nach diesen Elementen" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Umbenennung erhalten, wenn ein Tab entsperrt wird" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Ziel und Dateifenster auswählen, wenn eines seiner Tabs angeklickt wird" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Tab-Titel auch zeigen, wenn nur ein Tab vorhanden ist" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Doppelte Tabs beim Beenden der Anwendung schließen" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Schließen aller Tabs bestätigen" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Schließen von gesperrten Tabs bestätigen" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Länge der Tab-Tite&lzeile begrenzen auf" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Alle gesperrten Tabs mit einem * (Stern) markieren" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Tabs auf mehreren Zeilen" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Neue Tabs mit [Strg]+[ 🠥 ] im Vordergrund öffnen, nicht im Hintergrund" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "&Neuen Tab neben aktuellem Tab einfügen" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Bestehenden Tab wiederverwenden, wenn möglich" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "⊠ (Tastfläche) für Ta&b schließen anzeigen" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Immer Laufwerksbuchstaben im Tab-Titel anzeigen" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Tab-Titel" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "Zeichen" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Doppelklick auf einen Tab bewirkt:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Position der Tabs" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Nichts" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nein" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Links" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Rechts" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Nach erneutem Speichern eines Favoriten zu seiner Konfiguration gehen" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Nach Speichern eines neuen Favoriten zu seiner Konfiguration gehen" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Extra-Optionen für Favorit aktivieren (Zielseite beim Wiederherstellen auswählen, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Zusätzliche Standardeinstellungen zum Speichern neuer Favoriten:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Favoriten +" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Wenn Tabs wiederhergestellt werden, bestehende Tabs erhalten" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Links gespeicherte Tabs werden wiederhergestellt" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Rechts gespeicherte Tabs werden wiederhergestellt" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verzeichnis-Verlauf speichern bei Favoriten:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardposition im Menü beim Speichern eines neuen Favoriten:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier vorhanden sein, um den Befehl wiederzugeben, der in der Terminalemulation ausgeführt werden soll" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier vorhanden sein, um den Befehl wiederzugeben, der in der Terminalemulation ausgeführt werden soll" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Befehl, um die Terminalemulation zu öffnen:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Befehl, um einen Befehl in der Terminalemulation auszuführen und danach zu beenden:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Befehl, um einen Befehl in der Terminalemulation auszuführen und dann offen zu bleiben:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Befehl:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Befehl:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Befehl:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Tastfläche klonen" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "L&öschen" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Tastatur&kürzel bearbeiten" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "Neue Tastfläche e&infügen" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Auswählen" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Andere ..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Tastaturk&ürzel entfernen" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Vorschlag" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC einen Vorschlag für den Tooltip anhand des Tastentyps, Befehls oder Parameters machen lassen" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Flache Tastflächen" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Fehler bei Befehlen melden" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Bezeichnung anzeigen" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Befehlsparameter eingeben, jeden in einer eigenen Zeile. [F1] drücken, um Hilfe zu Parametern zu erhalten." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Aussehen" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Höhe de&r Leiste:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "&Befehl:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parameter:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hilfe" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Tastaturkürzel:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Ico&n:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Größe der I&cons:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Befehl:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parameter:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Start&pfad:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Stil:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Tooltip:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Symbolleiste mit ALLEN DC-Befehlen hinzufügen" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "für externen Befehl" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "für internen Befehl" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "für ein Trennzeichen" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "für eine Unter-Symbolleiste" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Backup ..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Exportieren ..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuelle Symbolleiste ..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Symbolleisten-Datei (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine \"TC.bar\"-Datei (bestehende erhalten)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine \"TC.bar\"-Datei (bestehende überschreiben)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Obere Symbolleiste ..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Ein Backup der Symbolleiste speichern" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Symbolleisten-Datei (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine \"TC.bar\"-Datei (bestehende erhalten)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine \"TC.bar\"-Datei (bestehende überschreiben)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter der aktuellen Auswahl" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Auswahl" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importieren ..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Backup einer Symbolleiste wieder herstellen" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "eine neue Symbolleiste zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "eine neue Symbolleiste zur oberen Symbolleiste hinzuzufügen" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "zur oberen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "die obere Symbolleiste ersetzen" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "aus einer Symbolleisten-Datei (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "eine neue Symbolleiste zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "eine neue Symbolleiste zur oberen Symbolleiste hinzuzufügen" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zur oberen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die obere Symbolleiste ersetzen" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "aus einzelner \"TC.bar\"-Datei" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "eine neue Symbolleiste zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "eine neue Symbolleiste zur oberen Symbolleiste hinzuzufügen" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zur oberen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die obere Symbolleiste ersetzen" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "aus \"wincmd.ini\" des TC ..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "eine neue Symbolleiste zur aktuellen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "eine neue Symbolleiste zur oberen Symbolleiste hinzuzufügen" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "zur oberen Symbolleiste hinzufügen" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "die obere Symbolleiste ersetzen" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Suchen und Ersetzen ..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "Alle in allen oberhalb ..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "in allen Befehlen ..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "in allen Icon-Bezeichnungen ..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "in allen Parametern ..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "in allen Startpfaden ..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Trennzeichen" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Leerzeichen" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tastflächen-Typ" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Aktuelle Einstellungen auf alle aktuell konfigurierten Dateinamen und Pfade anwenden" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Befehle" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Icons" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Startpfade" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Pfade" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Dies tun für Dateien und Pfade von:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Pfad wird relativ zu:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Art und Weise Pfade zu setzen, wenn Elemente für Icons, Befehle und Startpfade hinzugefügt werden:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Terminalemulation offen lassen, wenn der Vorgang abgeschlossen ist" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "In der Terminalemulation ausführen" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Externes Programm ben&utzen" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Zus&ätzliche Parameter" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Pfad zum ausführbaren Programm" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Anwenden" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopieren" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "&Löschen" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Vorlage ..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Umbenennen" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Andere ..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Tooltip-Konfiguration für gewählten Dateityp:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Allgemeine Optionen für Tooltips:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Tooltips für Dateien im Dateifenster anzeigen (nach verharren des Mauszeigers erscheint 🗩)" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Text, der als Tooltip erscheinen soll, [>>] für Variablen einfügen:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maske/Auswahlkriterien, Trennen mit \";\" :" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Tooltips ausblenden nach:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Tooltip-Anzeigemodus:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Dateitypen:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Änderungen verwerfen" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportieren ..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importieren ..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Tooltip-Dateitypen sortieren" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Mit Doppelklick auf die Pfadzeile oder Leiste oberhalb von einem Dateifenster" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Mit dem Menü und internem Befehl" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Doppelklick auf Eintrag = auswählen und Fenster schließen" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Mit dem Menü und internem Befehl" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Mit Doppelklick auf einen Tab (wenn dafür konfiguriert)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Angezeigtes [Tastaturkürzel]+[Alt] eingeben = auswählen und Fenster schließen" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Einfacher Mausklick auf Eintrag = auswählen und Fenster schließen" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Für den Befehlsverlauf verwenden" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Für den Verzeichnisverlauf verwenden" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Für den Ansichtsverlauf verwenden (besuchte Pfade der aktiven Ansicht)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Verhalten bezüglich Auswahl:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Optionen für das Baumansicht-Menü (hat nichts mit dem Verzeichnisbaum zu tun):" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Wofür das Baumansicht-Menü verwenden:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*HINWEIS: Was die Optionen wie die Groß-/Kleinschreibung und das Ignorieren von Akzenten betrifft, werden diese individuell für jeden Kontext von einer Verwendung zur anderen gespeichert und wiederhergestellt." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Für die Verzeichnisliste ⎈:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Für die Favoriten:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Für den Verlauf:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Tastaturkürzel für die Auswahl von Elementen anzeigen" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Schriftart" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Layout- und Farboptionen:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Hintergrundfarbe:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Cursorfarbe:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Gefundener Text:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Gefundener Text unter Cursor:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Normale Textfarbe:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normaler Text unter Cursor:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Vorschau Baumansicht-Menü:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Zweite Textfarbe:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Zweiter Text unter Cursor:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Tastaturkürzel-Farbe:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Tastaturkürzel unter Cursor:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Nicht auswählbare Textfarbe:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Nicht auswählbar unter Cursor:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Ändern Sie die Farben auf der linken Seite für eine Vorschau, wie das Baumansicht-Menü aussehen wird." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "Interner Betrachter-Optionen " #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "A&nzahl der Spalten in der Schnellansicht" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Kon&figurieren" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Dateien packen" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Für jede gewählte Datei/Verzeichnis ein separates Archiv erstellen" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Selbst extrahierendes Archiv erstellen" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Verschl&üsseln" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "In Archiv &verschieben" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archiv auf&teilen" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Z&uerst in einem TAR-Archiv zusammenfassen" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Pfadnamen &mit speichern (nur abwärts)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Packe Datei(en) in Archiv:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Packer" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Alle entpacken und ausführen" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Entpacken und ausführen" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Eigenschaften der gepackten Datei(en)" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attribute:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Kompressionsverhältnis:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Methode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Originalgröße:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datei:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Gepackte Größe:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Packer:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Zeit:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Konfiguration drucken" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Ränder (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "Unten:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "Links:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "Rechts:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "Oben:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Filter-Dialog schließen" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Text eingeben, nach dem gesucht oder gefiltert werden soll" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Abhängig von Groß-/Kleinschreibung" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Verzeichnisse" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Dateien" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Anfang vergleichen" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Ende vergleichen" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Umschalten zwischen Suchen und Filtern" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Mehr Regeln" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "W&eniger Regeln" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Inhalts-Plugins verwenden, kombiniert mit:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Feld" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Wert" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&UND (alles passt)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&ODER (etwas passt)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "Anwenden" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "Abbrechen" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Vorlage ..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Vorlage ..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Doppelte Dateien wählen" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Wenigstens eine Datei in jeder Gruppe ungewählt lassen:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Auswahl nach Name/Erweiterung aufheben:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Nach Name/Erweiterung wählen:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Abbrechen" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Trennzeichen" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Zählen von" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Ergebnis:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "Die einzufügenden Verzeichnisse wählen (mehr als eines möglich)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "dem Ende" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "dem Anfang" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Abbrechen" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Erstes gezählt von" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Letztes gezählt von" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Beschreibung des Bereichs" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Ergebnis:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Zeichen zum Einfügen au&swählen:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[Erstes:Letztes]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Erstes,Länge]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "dem Ende" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "dem Anfang" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "dem Ende" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "dem Anfang" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Dateieigenschaften ändern" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Erstellt:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Versteckt" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Zugriff:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Geändert:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Schreibgeschützt" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Einschließlich Unterverzeichnisse" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Zeitstempel-Eigenschaften" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(Ein graues Feld bedeutet, dass ein Wert unverändert bleibt)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr " Ausführen" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(Ein graues Feld bedeutet, dass ein Wert unverändert bleibt)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Sortieren" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Abbrechen" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Elemente ziehen und ablegen zum Sortieren" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Teiler" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Benötigt eine CRC32-Datei zum Verifizieren" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Größe und Anzahl der Teilstücke" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Datei aufteilen in Verzeichnis:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "A&nzahl der Teile" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Byte" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabyte" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobyte" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabyte" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Übertragen" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Betriebssystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plattform" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revision" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbrechen" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Symlink erstellen" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Relative Pfade verwenden, wenn möglich" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Bestehen&des Ziel, auf das der Link zeigen soll" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Name des Links" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Auf beiden Seiten löschen" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Links löschen" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Rechts löschen" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Auswahl entfernen" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Zum Kopieren auswählen (Standardrichtung)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Zum Kopieren auswählen -> (von links nach rechts)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Kopierrichtung umkehren" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Zum Kopieren auswählen <- (von rechts nach links)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Zum Löschen auswählen <-> (beide Seiten)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Zum Löschen auswählen <- (links)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Zum Löschen auswählen -> (rechts)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Schließen" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Vergleichen" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Vorlage ..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronisiere" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronisiere Verzeichnisse" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymmetrisch" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "nach Inhalt" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignoriere Datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "nur gewählte" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Unterverzeichnisse" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Zeige:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Name" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Größe" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Größe" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Name" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(im Hauptfenster)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Vergleichen" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Ansicht links" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Ansicht rechts" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "Duplikate" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "≠" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "Einzelne" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Bitte \"Vergleichen\" anklicken um zu beginnen" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchronisieren" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Überschreiben bestätigen" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Baumansicht-Menü" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Favorit wählen:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Groß-/Kleinschreibung bei Suche beachten" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Komplett eingeklappt" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Komplett ausgeklappt" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Akzente und Ligaturen bei Suche ignorieren" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Groß-/Kleinschreibung bei Suche ignorieren" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Akzente und Ligaturen bei Suche beachten" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Den Zweiginhalt nicht anzeigen, wenn die gesuchte Zeichenfolge \"nur\" im Zweignamen gefunden wird" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Wenn die gesuchte Zeichenfolge im Zweignamen gefunden wird, den ganzen Zweig anzeigen, auch wenn die Elemente nicht übereinstimmen" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Baumansicht-Menü schließen" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Konfiguration Baumansicht-Menü" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Konfiguration der Baumansicht-Farben" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Neue hinzufügen" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "A&bbrechen" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Ändern" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Standard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Funktionen für Pfad" #: tfrmtweakplugin.btnremove.caption msgctxt "tfrmtweakplugin.btnremove.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Plugin anpassen" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Archiv&typ am Inhalt erkennen" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Kann Dateien &löschen" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "U&nterstützt Verschlüsselung" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "A&ls normale Dateien zeigen (Packer-Symbol verstecken)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Unterstützt &Kompression im Arbeitsspeicher" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Ka&nn bestehende Archive verändern" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Archive können mehrere Dateien enthalten" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Kann neue Archi&ve erstellen" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Unterstützt die Optionen-Dialogbox" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Suche von Te&xt in Archiven erlauben" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Beschreibung:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "&Erkenne Zeichenfolge:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Erweiterung:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flags:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Name:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Über den Be&trachter ..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zeigt den 'Über'-Dialog" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Automatisch neu laden" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Kodierung ändern" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Datei kopieren" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Datei kopieren" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "In &Zwischenablage kopieren" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Aufbereitet in Zwischenablage kopieren" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Datei löschen" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Datei löschen" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Beenden" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Suchen" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Nächstes suchen" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Voriges suchen" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Ganzer Bildschirm" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Gehe zu Zeile ..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Gehe zu Zeile" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "Zentrieren" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Nächstes" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Nächste Datei laden" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Voriges" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Vorige Datei laden" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Horizontal spiegeln" #: tfrmviewer.actmirrorhorz.hint msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Horizontal spiegeln" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Vertikal spiegeln" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Datei verschieben" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Datei verschieben" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Vorschau" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Drucken ..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Druck-Einstellungen ..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Neu &laden" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Aktuelle Datei neu laden" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "+ 180" msgstr "180 Grad drehen" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180 degrees" msgstr "180 Grad drehen = auf den Kopf stellen" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "- 90" msgstr "90 Grad nach links drehen" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate -90 degrees" msgstr "90 Grad gegen den Uhrzeigersinn drehen" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "+ 90" msgstr "90 Grad nach rechts drehen" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate +90 degrees" msgstr "90 Grad im Uhrzeigersinn drehen" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Speichern" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Speichern unter ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Datei speichern unter ..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Bildschirmfoto (Screenshot)" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "3 Sekunden verzögert" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "5 Sekunden verzögert" #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Alle wählen" #: tfrmviewer.actshowasbin.caption msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Bin&är anzeigen" #: tfrmviewer.actshowasbook.caption msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Schnellansicht" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Als Dezimal anzeigen" #: tfrmviewer.actshowashex.caption msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Als He&x anzeigen" #: tfrmviewer.actshowastext.caption msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "A&ls Text anzeigen" #: tfrmviewer.actshowaswraptext.caption msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Als Text mit &Zeilenumbruch" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Textcursor anzeigen" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "Code" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Bilder" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office Open XML (nur Text)" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Transparenz anzeigen" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Einpassen" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Bild einpassen" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "Nur große einpassen" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Rückgängig" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Letzte Aktion rückgängig machen" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "Text umbrechen" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Vergrößern" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Vergrößern" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Verkleinern" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Verkleinern" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beschneiden" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ganzer Bildschirm" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Rahmen exportieren" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Texteditor" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Nächster Rahmen" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Malen" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Voriger Rahmen" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rote Augen reduzieren" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Größe ändern" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Bilder automatisch nacheinander anzeigen (Slideshow)" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Schnellansicht" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bearbeiten" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Ellipse" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodierung" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datei" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "B&ild" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Stift" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Rechteck" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Drehen / Spiegeln" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Bildschirmfoto (Screenshot)" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Anzeigen" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Starten" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Anhalten" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Vorgänge in Warteschlange" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Immer im Vordergrund" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Ziehen und ablegen verwenden, um in der Warteschlange zu verschieben" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Abbrechen" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Abbrechen" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Neue Warteschlange" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "In eigenem Fenster zeigen" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "An erste Stelle stellen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "An letzte Stelle stellen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Warteschlange" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Außerhalb der Reihe" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Warteschlange 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Warteschlange 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Warteschlange 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Warteschlange 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Warteschlange 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "In eigenem Fenster zeigen" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Alle pausieren" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Fo&lge Links" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "W&enn das Verzeichnis vorhanden ist" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Abbrechen" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Befehlszeile:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parameter:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Startpfad:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Kon&figurieren" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Verschl&üsseln" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "D&atum/Zeit kopieren" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Im Hintergrund ausführen (eigene Verbindung)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Sie benötigen Administratorrechte" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "um dieses Objekt zu kopieren:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "um dieses Objekt zu erstellen:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "um dieses Objekt zu löschen:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "um die Attribute zu erfragen von:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "um diesen Hardlink zu erstellen:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "um dieses Objekt zu öffnen:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "um dieses Objekt umzubenennen:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "um die Attribute zu setzen von:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "um diesen Symlink zu erstellen:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Aufgenommen am" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Höhe" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Breite" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Hersteller" #: uexifreader.rsmodel msgid "Camera model" msgstr "Modell" #: uexifreader.rsorientation msgid "Orientation" msgstr "Ausrichtung" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Diese Datei fehlt, könnte aber helfen, die endgültige Zusammenstellung zu überprüfen:\n" "%s\n" "\n" "Bitte die Datei verfügbar machen und \"OK\" drücken, wenn bereit,\n" "oder \"Abbrechen\" klicken um ohne sie fortzusetzen." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Schnell-Filter abbrechen" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Aktuellen Vorgang abbrechen" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Für abgelegten Text Dateinamen und Erweiterung eingeben" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Zu importierendes Textformat" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Defekt:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Allgemein:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Fehlend:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Lesefehler:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Erfolgreich:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Prüfsumme eingeben und Algorithmus auswählen:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Prüfsumme verifizieren" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Gesamt:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Filter für diese neue Suche löschen?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Die Zwischenablage enthält keine gültigen Daten für die Symbolleiste." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;Aktives Dateifenster;Linkes Dateifenster;Rechtes Dateifenster;Dateioperationen;Konfiguration;Netzwerk;Verschiedenes;Parallel-Port;Druck;Markierung;Sicherheit;Zwischenablage;FTP;Navigation;Hilfe;Fenster;Befehlszeile;Tools;Ansicht;Benutzer;Tabs;Sortierung;Log" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Herkömmliche Sortierung;A-Z sortiert" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Erw" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Name" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Größe" #: ulng.rsconfcolalign msgid "Align" msgstr "Ausrichten" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Überschrift" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "&Löschen" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feldinhalt" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Verschieben" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Breite" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Spalte anpassen" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Dateityp-Zuordnung konfigurieren" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Befehlszeile und Parameter bestätigen" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "(%d) %s Kopieren" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Dark Mode" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Automatisch;Aktiviert;Deaktiviert" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importierte DC-Symbolleiste" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importierte TC-Symbolleiste" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Abgelegter Text" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_Abgelegter HTML-Text" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Abgelegter RTF-Text" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Abgelegter einfacher Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Abgelegter UTF-16-Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_Abgelegter UTF-8-Text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Hinzugefügt: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Vergleichen ..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Gelöscht: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Die beiden Dateien sind identisch!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Identisch: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Unterschiedlich: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kodierung" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Zeilenumbruch" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Der Text ist identisch, es werden aber folgende Optionen verwendet:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Der Text ist identisch, aber die Dateien sind nicht gleich!\n" "Folgende Unterschiede wurden gefunden:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Abbrechen" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "A&lle" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "An&hängen" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Quelldateien a&utomatisch umbenennen" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Zieldateien automatisch umbenennen" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Abbrechen" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Anhand des Inhalts vergleichen" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortset&zen" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Zusammenfügen" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "&Alle zusammenfügen" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Programm beenden" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ignorieren" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Alle i&gnorieren" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nein" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Keine" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "A&ndere" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Überschreiben" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Alle überschreiben" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "A&lle größeren überschreiben" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Alle älteren überschreiben" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Alle &kleineren überschreiben" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Umb&enennen" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Fortsetzen" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Wiederholen" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Als Administrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Übe&rspringen" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Alle übers&pringen" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Entsperren" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Datei(en) kopieren" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Datei(en) verschieben" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&se" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Starten" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Warteschlange" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Geschwindigkeit %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Geschwindigkeit %s/s, verbleibende Zeit %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text-Format;HTML-Format;Unicode-Format;Simple Text-Format" #: ulng.rsdrivefreespaceindicator msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Anzeige für freien Speicher" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<keine Bezeichnung>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<kein Medium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interner Text-Editor von Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gehe zu Zeile:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gehe zu Zeile" #: ulng.rseditnewfile msgid "new.txt" msgstr "Neu.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Dateiname:" #: ulng.rseditnewopen msgid "Open file" msgstr "Datei öffnen" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Rückwärts" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Suchen" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Vorwärts" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Ersetzen" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "Mit externem Editor" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "Mit internem Editor" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Via Befehlszeile ausführen" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "In der Terminalemulation ausführen und beenden" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "In der Terminalemulation ausführen und offen bleiben" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" nicht gefunden in Zeile %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Keine Erweiterung vor dem Befehl »%s« definiert. Das wird ignoriert." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "im linken Fenster;im rechten Fenster;im aktiven Fenster;im inaktiven Fenster;in beiden Fenstern;in keinem Fenster" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nein;Ja" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportiert_aus_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Fragen;Überschreiben;Überspringen" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Fragen;Zusammenfügen;Überspringen" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Fragen;Überschreiben;Ältere überschreiben;Überspringen" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Fragen;Niemals einstellen;Fehler ignorieren" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Beliebige Dateien" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Packer-Konfigurationsdateien" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC Tooltip-Dateien" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Verzeichnisliste-Dateien" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Ausführbare Dateien" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini Konfigurationsdateien" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Ältere Version \"DC.tab\"-Dateien" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Bibliothek-Dateien" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Plugin-Dateien" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Programme und Bibliotheken" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC Symbolleisten-Dateien" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC Symbolleisten-Dateien" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml Konfigurationsdateien" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Vorlage definieren" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s Ebene(n)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "alle (unbegrenzte Tiefe)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "nur das aktuelle Verzeichnis" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Verzeichnis %s existiert nicht!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Gefunden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Suche als Vorlage speichern" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Name der Vorlage:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Gelesen: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Suche" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Dateien suchen" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Zeitpunkt der Suche: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Starte bei" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "S&chriftart für Befehlszeile" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Schriftart für &Editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Schriftart für F-Tasten" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Schriftart für &Logdateien" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Hauptschri&ftart" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Schriftart für Pfade" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Schriftart für Suchergebnisse" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Schriftart für Statuszeile" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Schriftart für Baumansicht-Menü" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Schriftart für &Betrachter" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Schriftart für die Schnellansicht" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s von %s frei" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s frei" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum/Zeit des letzten Zugriffs" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attribute" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Kommentar/Beschreibung" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimierte Größe" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum/Zeit der Erstellung" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Erweiterung" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Datum/Zeit ändern" #: ulng.rsfunclinkto msgid "Link to" msgstr "Verlinken mit" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum/Zeit der letzten Änderung" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Name" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Name ohne Erweiterung" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Besitzer" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pfad" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Größe" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Ursprünglicher Pfad" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Fehler beim Erstellen des Hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "nichts;Name, a-z;Name, z-a;Erweiterung, a-z;Erweiterung, z-a;Größe 9-0;Größe 0-9;Datum 9-0;Datum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Warnung! Beim Wiederherstellen einer \".hotlist\"-Backupdatei wird die vorhandene Verzeichnisliste durch das Backup ersetzt.\n" "\n" "Sicher, dass weiter gemacht werden soll?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopieren/Verschieben-Dialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Vergleichsprogramm" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Dialog: Beschreibung bearbeiten" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Dateien suchen" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Haupt-Fenster" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Mehrfaches Umbenennen" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Verzeichnisse synchronisieren" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Betrachter" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Eine Einstellung mit dem Namen besteht bereits.\n" "Soll sie überschrieben werden?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Sicher, dass Sie die Standardeinstellungen wiederherstellen wollen?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Sicher, dass Sie Einstellung »%s« löschen wollen?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopie von %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Neuen Namen eingeben" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Sie müssen mindestens eine Tastaturkürzel-Datei behalten." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Neuer Name" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Einstellung von »%s« wurde verändert.\n" "Soll das jetzt gespeichert werden?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Keine Kombination mit [Eingabetaste]" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Nach Befehlsname;Nach Tastaturkürzel (gruppiert);Nach Tastaturkürzel (einer pro Zeile)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kann Referenz für Standard-Leisten-Datei nicht finden" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Liste der 'Dateisuche'-Fenster" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maske abwählen" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maske wählen" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Eingabemaske:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Eine Spaltenansicht mit diesem Namen besteht bereits." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Die <Default>-Spaltenansicht ist vorgegeben, SPEICHERN, UMBENENNEN oder LÖSCHEN Sie die aktuelle Ansicht" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Konfiguriere benutzerdefinierte Spalten" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Neuen Namen für die benutzerdefinierte Spaltenansicht angeben" #: ulng.rsmenumacosservices msgid "Services" msgstr "Dienste" #: ulng.rsmenumacosshare msgid "Share..." msgstr "Teilen ..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Aktionen" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Oktal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Verknüpfung erstellen ..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Netzwerklaufwerk trennen ..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Bea&rbeiten" #: ulng.rsmnueject msgid "Eject" msgstr "Auswerfen" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Archiv hier entpacken ..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Netzwerklaufwerk mappen ..." #: ulng.rsmnumount msgid "Mount" msgstr "Einhängen" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Neu" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kein Datenträger verfügbar" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Öffnen" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Öffnen mit" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andere ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Archiv hier erstellen ..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Wiederherstellen" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortiert nach" #: ulng.rsmnuumount msgid "Unmount" msgstr "Aushängen" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Betrachten" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Alle internen Double Commander Befehle" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Beschreibung: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Zusätzliche Parameter für die Befehlszeile des Packers:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Möchten Sie zwischen Anführungszeichen einschließen?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Falscher CRC32-Wert für resultierende Datei:\n" "»%s«\n" "\n" "Wollen Sie die fehlerhafte Datei trotzdem behalten?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Sicher, dass Sie die Operation Abbrechen wollen?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Die Datei »%s« kann nicht in sich selbst kopiert/verschoben werden!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Kann die spezielle Datei %s nicht kopieren" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Kann Verzeichnis %s nicht löschen" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kann Verzeichnis »%s« nicht mit Nicht-Verzeichnis »%s« überschreiben" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Verzeichniswechsel nach »%s« fehlgeschlagen!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle inaktiven Tabs entfernen?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Dieser Tab (%s) ist gesperrt! Trotzdem schließen?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Bestätigung der Parameter" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "Befehl nicht gefunden! (%s)" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Double Commander wirklich beenden?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Die Datei %s wurde verändert. Soll sie zurückkopiert werden?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Zurückkopieren nicht möglich – soll die veränderte Datei behalten werden?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Die %d markierten Dateien/Verzeichnisse kopieren nach:" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "»%s« kopieren nach:" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Neuen Dateityp erstellen \"%s-Dateien\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Speicherort und Namen eingeben, unter dem die Symbolleisten-Datei gespeichert werden soll" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Benutzerdefinierte Aktion" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Die teilweise kopierte Datei löschen?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "⚠ Diese %d Dateien/Verzeichnisse endgültig löschen?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Diese %d Dateien/Verzeichnisse in den Papierkorb verschieben?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "⚠ »%s« endgültig löschen?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "»%s« in den Papierkorb verschieben?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "⚠ Kann »%s« nicht in den Papierkorb verschieben! Endgültig löschen?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Laufwerk steht nicht zur Verfügung" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Namen für die benutzerdefinierte Aktion angeben:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Dateierweiterung eingeben:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Namen eingeben:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Name des neu zu erstellenden Dateityps für die Erweiterung »%s« eingeben" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-Fehler in der Archivdatei" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datenfehler" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Kann nicht mit dem Server »%s« verbinden" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Kann die Datei %s nicht zu %s kopieren" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Kann Verzeichnis %s nicht verschieben" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Kann Datei %s nicht verschieben" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Ein Verzeichnis mit Namen »%s« besteht bereits." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s wird nicht unterstützt" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Verzeichnis »%s« besteht bereits!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Abbruch durch Benutzer" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Fehler beim Schließen der Datei" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kann Datei nicht erstellen" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Keine weiteren Dateien im Archiv" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kann bestehende Datei nicht öffnen" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Fehler beim Lesen von Datei" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Fehler beim Schreiben in Datei" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Verzeichnis %s kann nicht erstellt werden!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ungültiger Link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Keine Dateien gefunden" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nicht genügend Arbeitsspeicher" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funktion wird nicht unterstützt!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fehler im Kontextmenü-Befehl" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fehler beim Laden der Konfiguration" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaxfehler im regulären Ausdruck!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Kann Datei %s nicht zu %s umbenennen" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kann Zuordnung nicht speichern!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kann Datei nicht speichern" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Kann Attribute für »%s« nicht setzen" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Kann Datum/Zeit für »%s« nicht setzen" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Kann Besitzer/Gruppe für »%s« nicht einstellen" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Kann Berechtigungen für »%s« nicht setzen" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Kann erweiterte Attribute für »%s« nicht setzen" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Puffer zu klein" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Zu viele Dateien zum Packen" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Archivformat unbekannt" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Ausführbare Datei: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Ausgangszustand:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Wirklich alle Einträge Ihrer Favoriten entfernen? (\"Rückgängig\" machen unmöglich!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Andere Einträge hierher ziehen" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Namen für neuen Favoriten-Eintrag eingeben:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Speichern eines neuen Favoriten-Eintrags" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Anzahl der erfolgreich exportierten Favoriten: %d von %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Standardeinstellung für Verzeichnisverlauf von neuen Favoriten speichern:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Anzahl der erfolgreich importierten Datei(en): %d von %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Ältere Version importierter Tabs" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr ".tab-Datei(en) zum Importieren auswählen (kann mehr als eine gleichzeitig sein!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Letzte Änderung des Favoriten wurde noch nicht gesichert. Vor dem Fortsetzen speichern?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verzeichnis-Verlauf weiterhin speichern bei Favoriten:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dies wird den Favorit »%s« laden" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Aktuelle Tabs in vorhandenem Favorit-Eintrag speichern" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Datei %s wurde geändert, speichern?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s Byte, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Überschreiben:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Datei %s existiert bereits. Überschreiben?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Mit Datei:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Datei »%s« nicht gefunden." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Laufende Vorgänge" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Einige Dateioperationen wurden noch nicht beendet. Double Commander jetzt schließen kann zu Datenverlust führen." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Die Länge des Namen des Ziels (%d) beträgt mehr als %d Zeichen!\n" "%s\n" "Viele Programme können auf Dateien/Verzeichnisse mit so langen Namen nicht zugreifen!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Datei %s ist als schreibgeschützt/versteckt/System markiert. Soll sie gelöscht werden?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Sicher, dass Sie die aktuelle Datei neu laden und die Änderungen verlieren wollen?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Die Größe der Datei »%s« ist zu groß für das Dateisystem des Ziellaufwerks!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Verzeichnis %s besteht bereits, zusammenfügen?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Symlink »%s« folgen?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Textformat zum Importieren auswählen" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "%d gewählte Verzeichnisse hinzufügen" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Gewähltes Verzeichnis hinzufügen: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Aktuelles Verzeichnis hinzufügen: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Befehl ausführen" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnisliste ⎈" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Sicher, dass alle Einträge aus der Verzeichnisliste ⎈ entfernt werden sollen? (\"Rückgängig\" machen unmöglich!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dies wird folgenden Befehl ausführen:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Dies ist der Favorit namens " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dies wird das aktive Dateifenster auf den folgenden Pfad ändern:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Und das inaktive Dateifenster wird auf den folgenden Pfad geändert:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Fehler beim Sichern der Einträge ..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Fehler beim Export der Einträge ..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Alle exportieren!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Verzeichnisliste ⎈ exportieren – Einträge wählen, die exportiert werden sollen" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportiere gewählte" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Alle importieren!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Verzeichnisliste importieren – Einträge wählen, die importiert werden sollen" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Gewählte importieren" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Pfad:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Finde \".hotlist\"-Datei zum Importieren" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Name von dem Favorit" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Zahl neuer Einträge: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nichts zum Exportieren ausgewählt!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Pfad von Favorit" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Gewähltes Verzeichnis wieder hinzufügen: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Aktuelles Verzeichnis wieder hinzufügen: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Speicherort und Dateiname der Verzeichnisliste eingeben, die wiederhergestellt werden soll" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Befehl:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(Ende des Untermenüs)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Name des Menüs:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Name:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(Trennzeichen)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Ziel des Favoriten" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Legen Sie fest, ob in dem aktiven Dateifenster nach einem Verzeichniswechsel in einer bestimmten Reihenfolge sortiert werden soll" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Legen Sie fest, ob in dem inaktiven Dateifenster nach einem Verzeichniswechsel in einer bestimmten Reihenfolge sortiert werden soll" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Funktionen zum Wählen eines relativen Pfades, absoluten Pfades, Sonderverzeichnisses, usw." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Anzahl aller gespeicherter Einträge: %d\n" "\n" "Name des Backups: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Anzahl exportierter Einträge: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Sollen alle Elemente innerhalb der Untermenüs gelöscht werden [%s]?\n" "NEIN als Antwort löscht nur Menü-Unterteilungen, Elemente des Untermenüs bleiben erhalten." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Speicherort und Dateiname eingeben, wo eine Verzeichnisliste ⎈ gespeichert werden soll" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Falsche Größe der Datei »%s«" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Bitte nächste Disk oder Medium einlegen.\n" "\n" "Damit diese Datei geschrieben werden kann:\n" "»%s«\n" "\n" "Noch zu schreibende Byte: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fehler in der Befehlszeile" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ungültiger Dateiname" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ungültiges Format der Konfigurationsdatei" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Ungültige hexadezimale Zahl: »%s«" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ungültiger Pfad" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Pfad %s enthält ungültige Zeichen." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dies ist kein gültiges Plugin!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dieses Plugin ist für den Double Commander für %s.%sEs funktioniert nicht mit dem Double Commander für %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ungültige Anführungszeichen" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ungültige Auswahl." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Dateiliste laden ..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "TC-Konfigurationsdatei (wincmd.ini) finden" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TC ausführbare Datei (totalcmd.exe oder totalcmd64.exe) finden" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Datei %s kopieren" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Datei %s löschen" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fehler: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Extern starten" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Externes Ergebnis" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Datei %s entpacken" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Link %s erstellen" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Verzeichnis %s erstellen" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Datei %s verschieben" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "In Datei %s packen" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Programm herunterfahren" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Programm starten" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Verzeichnis %s entfernen" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fertig: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Symlink %s erstellen" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Datei %s Integrität testen" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Datei %s gründlich löschen" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Verzeichnis %s gründlich löschen" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Master-Passwort" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Bitte Master-Passwort eingeben:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Neue Datei" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Nächster Teil wird entpackt" #: ulng.rsmsgnofiles msgid "No files" msgstr "Keine Dateien" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Keine Dateien ausgewählt." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nicht genügend Speicherplatz auf dem Ziellaufwerk/Medium. Trotzdem fortfahren?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nicht genügend Speicherplatz auf dem Ziellaufwerk/Medium. Erneut versuchen?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Kann Datei %s nicht löschen" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nicht implementiert." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objekt existiert nicht!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Die Aktion kann nicht abgeschlossen werden, weil die Datei in einem anderen Programm geöffnet ist:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Unten ist eine Vorschau. Sie kann für eine sofortige Überprüfung der Einstellungen genutzt werden." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Passwort:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Die Passwort-Eingaben stimmen nicht überein!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Bitte Passwort eingeben:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Passwort (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Bitte geben Sie das Passwort zur Überprüfung erneut ein:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "%s l&öschen" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voreinstellung »%s« besteht bereits. Überschreiben?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Sicher, dass Sie Voreinstellung »%s« löschen wollen?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problem beim Ausführen des Befehls (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Dateiname für abgelegten Text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Bitte diese Datei verfügbar machen. Erneut versuchen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Neuen aussagekräftigen Namen für diesen Favorit eingeben" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Neuen Namen für dieses Menü eingeben" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Die %d markierten Dateien/Verzeichnisse umbenennen/verschieben nach:" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "»%s« umbenennen/verschieben nach:" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Möchten Sie diesen Text ersetzen?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Bitte Double Commander neu starten, um die Änderungen zu übernehmen" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "FEHLER: Problem beim Laden der Lua-Bibliothek »%s«" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Auswählen, zu welchem Dateityp die Erweiterung »%s« hinzugefügt werden soll" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Ausgewählt: %s von %s, Dateien: %d von %d, Verzeichnisse: %d von %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Ausführbare Datei auswählen" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Bitte nur Prüfsummen-Dateien auswählen!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Speicherort des nächsten Teils angeben" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Laufwerksbezeichnung angeben" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Sonderverzeichnisse" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Pfad aus dem aktiven Dateifenster hinzufügen" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Pfad aus dem inaktiven Dateifenster hinzufügen" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Durchsuche und verwende den gewählten Pfad" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Umgebungsvariable verwenden ..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Zu speziellem Double Commander Pfad gehen ..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Zu Umgebungsvariable gehen ..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Zu anderem Windows-Sonderverzeichnis gehen ..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Zu Windows-Sonderverzeichnis (TC) gehen ..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Relativ zum Favoriten-Pfad machen" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Pfad absolut machen" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Relativ zu speziellem Double Commander Pfad machen ..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Relativ zur Umgebungsvariable machen ..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Relativ zu Windows-Sonderverzeichnis (TC) machen ..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Relativ zu anderem Windows-Sonderverzeichnis machen ..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Speziellen Double Commander-Pfad verwenden ..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Favoriten-Pfad verwenden" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Anderes Windows-Sonderverzeichnis verwenden ..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windows-Sonderverzeichnis (TC) verwenden ..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Dieser Tab (%s) ist gesperrt! Verzeichnis in anderem Tab öffnen?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Tab umbenennen" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Neuer Name für Tab:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Zielpfad:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Fehler! Kann die TC-Konfigurationsdatei nicht finden:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Fehler! Die ausführbare Datei für die TC-Konfiguration kann nicht gefunden werden:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Fehler! TC läuft noch, sollte für diese Aktion aber beendet sein.\n" "TC schließen und 'OK' klicken oder 'ABBRECHEN' klicken." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Fehler! Kann das angegebene gewünschte TC-Symbolleisten Ausgabeverzeichnis nicht finden:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Speicherort und Dateiname angeben, unter dem die TC-Symbolleisten-Datei gespeichert werden soll" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Internes Terminal-Fenster ist deaktiviert. Möchten Sie es aktivieren?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "WARNUNG: Das Beenden eines Prozesses kann zu unerwünschten Ergebnissen wie Datenverlust und Systeminstabilität führen. Der Prozess erhält nicht die Möglichkeit, seinen Zustand oder seine Daten zu speichern, bevor er beendet wird. Sind Sie sicher, dass Sie den Prozess beenden möchten?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Die ausgewählten Archive testen?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "»%s« ist jetzt in der Zwischenablage" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Erweiterung der gewählten Datei gehört nicht zu den bekannten Dateitypen" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "\".toolbar\"-Datei angeben zum Importieren" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "\".BAR\"-Datei angeben zum Importieren" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Speicherort und Dateiname der Symbolleiste zum Wiederherstellen angeben" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Gespeichert!\n" "Name der Symbolleisten-Datei: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Zu viele Dateien ausgewählt." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Unbestimmt" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "FEHLER: Unerwartete Verwendung der Baumansicht!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<KEINE ERW>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<KEIN NAME>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Benutzername:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Benutzername (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFIZIERUNG:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Möchten Sie die gewählten Prüfsummen verifizieren?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Die Zieldatei ist beschädigt, Prüfsumme stimmt nicht überein!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Datenträger-Name:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Bitte Datenträger-Größe eingeben:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Möchten Sie den Ort der Lua-Bibliothek einstellen?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "⚠ Diese %d Dateien/Verzeichnisse gründlich löschen?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "⚠ »%s« gründlich löschen?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "mit" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Falsches Passwort!\n" "Bitte erneut probieren!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automatisch umbenennen zu \"name (1).erw\", \"name (2).erw\" usw.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Zähler" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Name der Voreinstellung" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Name der Variable definieren" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Wert der Variable definieren" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Name der Variable eingeben" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Wert der Variable »%s« eingeben" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Ignorieren, Nur speichern als »Letzte«;Benutzer zur Bestätigung vom Speichern auffordern;Automatisch speichern" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Erweiterung" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Name" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Unverändert;ALLES GROẞGESCHRIEBEN;alles kleingeschrieben;Erster buchstabe groß;Erster Buchstabe In Jedem Wort Groß;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "»Das zuletzt verwendete«" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Letzte Masken unter der Voreinstellung »Letzte«;Letzte Voreinstellung;Neue leere Masken" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Mehrfaches Umbenennen" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Zeichen an Position x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Zeichen von Position x bis y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Komplettes Datum" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Komplette Zeitangabe" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Zähler" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Tag" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Tag (zweistellig)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Wochentag kurz (z.B. \"Mo\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Wochentag lang (z.B. \"Montag\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Erweiterung" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Kompletter Dateiname mit Erweiterung und Pfad" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Kompletter Dateiname, Zeichen von Pos. x bis y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID (UUID)" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Stunde" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Stunde (zweistellig)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minute" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minute (zweistellig)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Monat" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Monat (zweistellig)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Monatsname kurz ( z.B. \"Jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Monatsname lang (z.B. \"Januar\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Name" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Übergeordnete(s) Verzeichnis(se)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekunde" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekunde (zweistellig)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Variable im laufenden Prozess" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Jahr (zweistellig)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Jahr (vierstellig)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Voreinstellung speichern unter" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Name der Voreinstellung besteht bereits. Überschreiben?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Neuen Namen für die Voreinstellung eingeben" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Voreinstellung »%s« wurde verändert.\n" "Soll sie jetzt gespeichert werden?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Voreinstellungen sortieren" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Zeit" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Warnung, doppelte Namen!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Datei enthält falsche Anzahl Zeilen: %d, sollten %d sein!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Erhalten;Löschen;Fragen" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Kein entsprechender interner Befehl" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Leider noch keine 'Dateisuche'-Fenster ..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Leider kein weiteres 'Dateisuche'-Fenster zum beenden und Speicher freigeben ..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Entwicklung" #: ulng.rsopenwitheducation msgid "Education" msgstr "Bildung" #: ulng.rsopenwithgames msgid "Games" msgstr "Spiele" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafik" #: ulng.rsopenwithmacosfilter #, fuzzy msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "Anwendungen (*.app) | *.app | Alle Dateien (*) | *" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "&Netzwerk" #: ulng.rsopenwithoffice msgid "Office" msgstr "Büro" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Andere" #: ulng.rsopenwithscience msgid "Science" msgstr "Wissenschaft" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Einstellungen" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Zubehör" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abgebrochen" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Prüfsumme berechnen" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Prüfsumme in »%s« berechnen" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Prüfsumme von »%s« berechnen" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Berechnen" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "»%s« berechnen" #: ulng.rsopercombining msgid "Joining" msgstr "Zusammenfügen" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Dateien in »%s« zu »%s« zusammenfügen" #: ulng.rsopercopying msgid "Copying" msgstr "Kopieren" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Von »%s« nach »%s« kopieren" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "»%s« nach »%s« kopieren" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Verzeichnis erstellen" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Verzeichnis »%s« erstellen" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Löschen" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "In »%s« löschen" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "»%s« löschen" #: ulng.rsoperexecuting msgid "Executing" msgstr "Ausführen" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "»%s« ausführen" #: ulng.rsoperextracting msgid "Extracting" msgstr "Entpacken" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Von »%s« nach »%s« entpacken" #: ulng.rsoperfinished msgid "Finished" msgstr "Beendet" #: ulng.rsoperlisting msgid "Listing" msgstr "Auflisten" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "»%s« auflisten" #: ulng.rsopermoving msgid "Moving" msgstr "Verschieben" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Von »%s« nach »%s« verschieben" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "»%s« nach »%s« verschieben" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nicht gestartet" #: ulng.rsoperpacking msgid "Packing" msgstr "Packen" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Von »%s« nach »%s« packen" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "»%s« nach »%s« packen" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausiert" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausieren" #: ulng.rsoperrunning msgid "Running" msgstr "Wird ausgeführt" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Eigenschaft einstellen" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Eigenschaft in »%s« einstellen" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Eigenschaft von »%s« einstellen" #: ulng.rsopersplitting msgid "Splitting" msgstr "Aufteilen" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "»%s« nach »%s« aufteilen" #: ulng.rsoperstarting msgid "Starting" msgstr "Starten" #: ulng.rsoperstopped msgid "Stopped" msgstr "Angehalten" #: ulng.rsoperstopping msgid "Stopping" msgstr "Anhalten" #: ulng.rsopertesting msgid "Testing" msgstr "Testen" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "In »%s« testen" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "»%s« testen" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Prüfsumme verifizieren" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Prüfsumme in »%s« verifizieren" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Prüfsumme von »%s« verifizieren" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Auf Zugriff zur Quelldatei warten" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Auf Benutzerantwort warten" #: ulng.rsoperwiping msgid "Wiping" msgstr "Gründlich löschen" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "In »%s« gründlich löschen" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "»%s« gründlich löschen" #: ulng.rsoperworking msgid "Working" msgstr "In Betrieb" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Am Anfang hinzufügen;Am Ende hinzufügen;Smart hinzufügen" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Neuen Tooltip-Dateityp hinzufügen" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Um die aktuelle Packer-Konfiguration zu ändern, die aktuelle Bearbeitung ANWENDEN oder LÖSCHEN" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Modusabhängig, zusätzlicher Befehl" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Hinzufügen, wenn es nicht leer ist" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Archiv-Datei (langer Name)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Ausführbare Datei für Packer wählen" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Archiv-Datei (kurzer Name)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Kodierung der Archivierungsliste ändern" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Sicher, dass Sie: »%s« löschen wollen?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Exportierte Packer-Konfiguration" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "Errorlevel" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Packer-Konfiguration exportieren" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportieren von %d Elementen zu Datei »%s« abgeschlossen." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Wählen Sie die zu exportierende(n) aus" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Dateiliste (langer Name)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Dateiliste (kurzer Name)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Packer-Konfiguration importieren" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importieren von %d Elementen aus Datei »%s« abgeschlossen." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Datei zum Importieren der Packer-Konfiguration(en) wählen" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Wählen Sie die zu importierende(n) aus" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Name verwenden, ohne Pfad" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Pfad verwenden, ohne Name" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Packer (langer Name)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Packer (kurzer Name)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Alle Namen in Anführungszeichen einschließen" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Alle Namen in Leerzeichen einschließen" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Einzelner Dateiname zur Ausführung" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Ziel-Unterverzeichnis" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "ANSI-Kodierung verwenden" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "UTF-8-Kodierung verwenden" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Speicherort und Dateiname eingeben, unter dem die Packer-Konfiguration gespeichert werden soll" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Name des Archiv-Typs:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Plugin »%s« zuordnen:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Erste;Letzte;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassische, herkömmliche Reihenfolge;Alphabetische Reihenfolge (aber zuerst nach Sprachen -> ABCDАБВГ)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Komplett ausgeklappt;Komplett eingeklappt" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktives Dateifenster links, inaktives rechts (klassisch);Linkes Dateifenster links, rechtes auf der rechten Seite" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Erweiterung eingeben" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Am Anfang hinzufügen;Am Ende hinzufügen;Alphabetisch sortiert" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "eigenem Fenster, mit ausführlicher Anzeige;minimiertem eigenen Fenster, vereinfacht;dem Hauptfenster (unten links), vereinfacht" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Gleitkomma" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Tastaturkürzel %s für 'cm_Delete' wird registriert, damit kann diese Einstellung rückgängig gemacht werden." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Tastaturkürzel für %s hinzufügen" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Tastaturkürzel hinzufügen" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kann das Tastaturkürzel nicht einstellen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Tastaturkürzel ändern" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Befehl" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Tastaturkürzel %s für 'cm_Delete' hat Parameter, die diese Einstellung überschreiben. Parameter ändern, um die globale Einstellung zu verwenden?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Bei Tastaturkürzel %s für 'cm_Delete' muss ein Parameter geändert werden, um dem Tastaturkürzel %s zu entsprechen. Parameter ändern?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beschreibung" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Tastaturkürzel für %s bearbeiten" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Parameter reparieren" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Tastaturkürzel" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Tastaturkürzel" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<leer>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parameter" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Tastaturkürzel festlegen, um Datei zu löschen" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Damit diese Einstellung mit Tastaturkürzel %s funktioniert, muss Tastaturkürzel %s 'cm_Delete' zugewiesen werden, ist aber schon %s zugewiesen. Soll das geändert werden?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Tastaturkürzel %s für 'cm_Delete' kann nicht kombiniert mit umgekehrter [Umschalt]-Taste zugewiesen werden. Diese Einstellung funktioniert nicht." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Tastaturkürzel in Verwendung" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Tastaturkürzel %s wird bereits verwendet." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Zu %s ändern?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "verwendet für %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "für diesen Befehl verwendet, aber mit anderen Parametern" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Packer" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatische Aktualisierung" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Verhalten" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kompakt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farben" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Spalten" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Einstellungen" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Benutzerdefinierte Spalten" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Verzeichnisliste ⎈" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Verzeichnisliste ⎈ +" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Ziehen und ablegen (Drag and Drop)" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tastfläche für die Laufwerks/Medien-Liste" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favoriten" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Dateityp-Zuordnungen +" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Dateityp-Zuordnungen" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Neu" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Dateioperationen" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Dateifenster" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Dateien suchen" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Dateiansicht" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Dateiansicht +" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Dateitypen" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Tabs" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Favoriten +" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Schriftarten" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Farben und Gliederung" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Tastaturkürzel" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icons" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Schwarze Liste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tastatur" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Sprache" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Layout" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Verschiedenes" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Maus" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Mehrfaches Umbenennen" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Einstellungen in »%s« wurden geändert\n" "\n" "Wollen Sie die Änderungen speichern?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Schnelle Suche/Filter" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminalemulation" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Symbolleisten" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Symbolleisten +" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Mittlere Symbolleiste" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Tools" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Tooltips" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Baumansicht-Menü" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Farben der Baumansicht" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Kein;Befehlszeile;Schnellsuche;Schnellfilter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Linke Taste markiert bei gleichzeitig gedrückter [Strg] oder [Umschalt]-Taste (-> einzelne Elemente bzw. ab Cursor bis Klick);Rechte Taste markiert, der Cursor kann auch mit gedrückter Taste über mehrere Einträge gezogen werden;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "An den Beginn der Dateiliste;Hinter die Verzeichnisse (wenn Verzeichnisse vor Dateien sortiert werden);Sortierreihenfolge bestimmt Position;Ans Ende der Dateiliste" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Benutzerdefiniert Gleitkomma;Benutzerdefiniert Byte;Benutzerdefiniert Kilobyte;Benutzerdefiniert Megabyte;Benutzerdefiniert Gigabyte;Benutzerdefiniert Terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s ist bereits den folgenden Dateierweiterungen zugewiesen:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Deaktivieren" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Aktiviere&n" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Beschreibung" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Dateiname" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Nach Erw." #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Nach Plugin" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Name" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "WCX-Plugins können nur sortiert werden, wenn Plugins nach ihrer Dateierweiterung angezeigt werden!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registriert für" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Lua-Bibliothek wählen" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Tooltip-Dateityp umbenennen" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Groß-/Kleinschreibung beachten;Unabhängig von Groß-/Kleinschreibung" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Dateien;Ve&rzeichnisse;Dateien u&nd Verzeichnisse" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Filterdialog verbergen, wenn im Hintergrund;Änderungen der Einstellung für die nächste Sitzung speichern" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Unabhängig von Groß-/Kleinschreibung; Gemäß den Einstellungen des Gebietsschemas (aAbBcCdD); Erst alle Großbuchstaben, dann alle Kleinbuchstaben (ABCDabcd)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Nach Namen sortieren und zuerst anzeigen;Wie Dateien sortieren und zuerst anzeigen;Wie Dateien sortieren und einreihen" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alphabetisch (= Ziffern einzeln -> 19 vor 2), Akzente beachten -> aàáâäbcd;Alphabetisch, Sonderzeichen beachten -> (@§€19.20.3.4abcd;Natürliche Sortierung: alphabetisch und mehrstellige Zahlen nach ihrem Wert -> 8.9.10.11abcd;Natürliche Sortierung, Sonderzeichen beachten -> (@§€8.9.10.11abcd" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Oben;Unten;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Tr&ennendes Element;&Interner Befehl;E&xterner Befehl;Men&ü" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Um die Tooltip-Konfiguration zu ändern, die aktuelle Bearbeitung ANWENDEN oder LÖSCHEN" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Name des Tooltip-Dateityps:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "»%s« besteht bereits!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Sicher, dass Sie »%s« löschen wollen?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Exportierte Konfiguration des Tooltip-Dateityps" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Konfiguration des Tooltip-Dateityps exportieren" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Exportieren von %d Elementen zu Datei »%s« abgeschlossen." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Wählen Sie die zu exportierende(n) aus" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Konfiguration des Tooltip-Dateityps importieren" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importieren von %d Elementen aus Datei »%s« abgeschlossen." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Datei zum Importieren der Konfiguration(en) des Tooltip-Dateityps wählen" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Wählen Sie die zu importierende(n) aus" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Speicherort und Dateiname für die Konfiguration des Tooltip-Dateityps eingeben" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Name des Tooltip-Dateityps" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC bisher: \"Kopie (x) Dateiname.erw\";Windows: \"Dateiname (x).erw\";Andere: \"Dateiname(x).erw\"" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "Position nicht verändern;Die gleiche Einstellung wie für neue Dateien anwenden;Sortierreihenfolge bestimmt Position" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Mit komplettem absoluten Pfad;Pfad relativ zum %COMMANDER_PATH%;Relativ zum Folgenden" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "contains(case)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "contains" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(case)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Feld »%s« nicht gefunden!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!contains(case)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!contains" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(case)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Plugin »%s« nicht gefunden!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Einheit »%s« für Feld »%s« nicht gefunden!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Dateien: %d, Verzeichnisse: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Kann die Zugriffsrechte für »%s« nicht ändern" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Kann den Besitzer von »%s« nicht ändern" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datei" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Verzeichnis" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "Verschiedene Typen" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Benannte Pipe" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Spezielles Blockorientiertes Gerät" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Spezielles Zeichenorientiertes Gerät" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolischer Link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Unbekannter Typ" #: ulng.rssearchresult msgid "Search result" msgstr "Suchergebnis" #: ulng.rssearchstatus msgid "SEARCH" msgstr "SUCHE" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<unbenannte Vorlage>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Eine Dateisuche mit dem DSX-Plugin läuft bereits.\n" "Diese muss abgeschlossen sein, bevor eine neue gestartet werden kann." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Eine Dateisuche mit dem WDX-Plugin läuft bereits.\n" "Diese muss abgeschlossen sein, bevor eine neue gestartet werden kann." #: ulng.rsselectdir msgid "Select a directory" msgstr "Ein Verzeichnis wählen" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Neueste;Älteste;Größte;Kleinste;Erste in Gruppe;Letzte in Gruppe" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Fenster auswählen" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Hilfe zu %s &zeigen" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Spalte" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Befehl" #: ulng.rssimpleworderror msgid "Error" msgstr "Fehler" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Fehlgeschlagen!" #: ulng.rssimplewordfalse msgid "False" msgstr "Falsch" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Dateiname" #: ulng.rssimplewordfiles msgid "files" msgstr "Dateien" #: ulng.rssimplewordletter msgid "Letter" msgstr "Buchstabe" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Ergebnis" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Erfolgreich!" #: ulng.rssimplewordtrue msgid "True" msgstr "Wahr" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Variable" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbeitsverzeichnis" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Byte" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabyte" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobyte" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabyte" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabyte" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Dateien: %d, Verzeichnisse: %d, Größe: %s (%s Byte)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kann Zielverzeichnis nicht erstellen!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Falsches Dateigrößenformat!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kann Datei nicht teilen!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Die Anzahl der Teile ist größer als 100! Fortfahren?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatisch;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Wähle Verzeichnis:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Nur Vorschau" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Sonstiges" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "Bedieneinheit" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Anmerkung" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Flach" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Begrenzt" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Einfach" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabelhaft" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Wunderbar" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Enorm" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Verzeichnis aus dem Verlauf wählen" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Favorit wählen:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Befehl aus dem Befehlsverlauf wählen" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Aktion aus der Menüleiste wählen" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Aktion aus der Haupt-Werkzeugleiste wählen" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Verzeichnis aus dem Favorit wählen:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Verzeichnis aus dem Dateiansicht-Verlauf wählen" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Datei oder Verzeichnis wählen" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Fehler beim Erstellen des Symlink." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtext" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Einfacher Text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nichts;Tab schließen;Auf Favorit zugreifen;Tabs-Menü anzeigen" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Tag(e)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Stunde(n)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minute(n)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Monat(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunde(n)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Woche(n)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Jahr(e)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Favorit umbenennen" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Untermenü des Favoriten umbenennen" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Vergleichsprogramm" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Texteditor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fehler beim Öffnen des Vergleichsprogramms" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fehler beim Öffnen des Editors" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fehler beim Starten der Terminalemulation" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fehler beim Öffnen des Betrachters" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminalemulation" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "System Standard;1 s;2 s;3 s;5 s;10 s;30 s;1 min;Nie verbergen" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "DC- und System-Tooltips kombiniert, DC zuerst (herkömmlich);DC- und System-Tooltips kombiniert, System zuerst;DC-Tooltips, wenn möglich, System wenn nicht;Nur DC-Tooltips anzeigen;Nur System-Tooltips anzeigen" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Schnellansicht" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Bitte diesen Fehler im Bug-Tracker melden, mit einer Beschreibung was Sie getan haben und der folgenden Datei:%s Klicken Sie auf %s zum Fortfahren oder %s zum Abbrechen." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Beide Dateifenster, von aktiv zu inaktiv" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Beide Dateifenster, von links nach rechts" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pfad des Dateifensters" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Jeden Namen in eckigen Klammern einschließen (oder was auch immer in dem Paar geschweifter Klammern steht)" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Nur Dateinamen, keine Erweiterung" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Kompletter Dateiname (Pfad+Dateiname)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hilfe für \"%\"-Variable" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" "↴\n" " Fordert den Benutzer auf, einen Parameter mit einem standardmäßig vorgeschlagenen Wert einzugeben" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Letztes Verzeichnis im Pfad des Dateifensters" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Letztes Verzeichnis im Pfad der Datei" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Linkes Dateifenster" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Temporärer Dateiname aus Liste mit Dateinamen" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Temporärer Dateiname aus Liste mit kompletten Dateinamen (Pfad+Dateiname)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Dateinamen in Liste in UTF-16 mit BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Dateinamen in Liste in UTF-16 mit BOM, in Anführungszeichen" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Dateinamen in Liste in UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Dateinamen in Liste in UTF-8, in Anführungszeichen" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Temporärer Dateiname der Liste von Dateinamen mit relativem Pfad" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Nur Dateierweiterung" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Nur Dateiname" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Weitere Möglichkeiten, Beispiele ..." #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Pfad, ohne Trennzeichen am Ende" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Von hier bis zum Ende der Zeile, der Indikator für die Prozent-Variable ist das \"#\"-Zeichen" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Gibt das Prozentzeichen zurück (die Variable)" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Von hier bis zum Ende der Zeile, der Indikator für die Prozent-Variable ist wieder das \"%\"-Zeichen" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Stelle jedem Namen \"-a \" voran (oder was auch immer in den geschweiften Klammern steht)" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "% [Frage den Benutzer nach Parameter;Standardwert wird vorgeschlagen]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Dateiname mit relativem Pfad" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Rechtes Dateifenster" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Kompletter Pfad der zweiten gewählten Datei im rechten Dateifenster" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Befehl vor Ausführung anzeigen" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "% [Einfache Nachricht]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Zeigt eine einfache Nachricht" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktives Dateifenster (Quelle)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktives Dateifenster (Ziel)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Dateinamen werden ab hier in Anführungszeichen gesetzt (Standard)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Befehl wird in der Terminalemulation ausgeführt, bleibt dann offen" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Pfade werden am Ende ein Trennzeichen haben" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Dateinamen werden ab hier nicht in Anführungszeichen gesetzt" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Befehl wird in der Terminalemulation ausgeführt, am Ende geschlossen" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Pfade werden am Ende kein Trennzeichen haben (Standard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "&Netzwerk" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Papierkorb" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interner Betrachter des Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Schlechte Qualität" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodierung" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Bildtyp" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Neue Größe" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nicht gefunden!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Stift;Rechteck;Ellipse" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "Mit externem Betrachter" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "Mit internem Betrachter" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Anzahl der Ersetzungen: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Eine Ersetzung hat nicht stattgefunden." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Keine Einstellung namens »%s«" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.da.po�����������������������������������������������������������0000644�0001750�0000144�00001507162�15104114162�017245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2020-01-11 16:32+0200\n" "Last-Translator: Full Name <bolle_barnewitz@sol.dk>\n" "Language-Team: Language <bolle_barnewitz@sol.dk>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Dansk\n" "X-Generator: Poedit 2.2.4\n" "Language: da\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Læser mapper: %d%% (ESC for at afbryde)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Højre: Slet %d file(r)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Filer fundet: %d (Identiske: %d, Forskellige: %d, Unikke venstre: %d, Unikke højre: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format, fuzzy, badformat #| msgid "Left to Right: Copy %d files, total size: %d bytes" msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Venstre til højre: Kopier %d fil(er), totalt: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format, fuzzy, badformat #| msgid "Right to Left: Copy %d files, total size: %d bytes" msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Højre til venstre: Kopier %d fil(er), totalt: %d bytes" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vælg skabelon..." # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Kontroller ledig &plads" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopier a&ttributter" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kop&ier ejerskab" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Ko&pier tilladelser" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopier &dato/tid" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Korrigér lin&ks" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Fjern skri&vebeskyttelse-attribut" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Udelad tomme mapper" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Fø&lg links" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reserver plads" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" # F5 - Indstillinger #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Verificer" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Hvad skal gøres, når filens tid, attributter, etc. ikke kan indstilles" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Brug filskabelon" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Hvis mappen findes:" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Hvis filen findes:" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Hvis egenskaber ikke kan indstilles:" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<ingen skabelon>" # Hjælp - Om_Double_Commander #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Luk" # Hjælp - Om_Double_Commander #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopier til Udklipsholder" # Hjælp - Om_Double_Commander #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "Om Double Commander" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Dato" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Gratis Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Hjemmeside:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "http://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Revision" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "Annu&ller" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Nulstil" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Vælg attributter" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Arkiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "K&omprimeret" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Mappe" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Krypt&eret" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "S&kjult" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Sk&rivebeskyttet" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Tyn&d" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolsk link" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "S&ystem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Midler&tidig" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-attributter" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Generelle attributter" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Andre" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Ejer" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Udfør" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Læs" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Som tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Skriv" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Benchmark datastørrelse: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Nummertegn" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Tid (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Hastighed (MB/s)" # Filer - Dan_CRC_kontrolsumfil(er) #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Dan CRC-kontrolsumfil" # Filer - Dan_CRC_kontrolsumfil(er) #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "&Åbn kontrolsumfil efter opgaven er færdig" # Filer - Dan_CRC_kontrolsumfil(er) #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Dan en &separat kontrolsumfil for hver fil" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" # Filer - Dan_CRC_kontrolsumfil(er) #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Gem kontrol&sum-fil(er) som:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" # Filer - Kontrollér_CRC_kontrolsumfil(er)... #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" # Filer - Kontrollér_CRC_kontrolsumfil(er)... #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Verifikation af kontrolsum" #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Koder" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "F&orbind" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "Slet" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "R&ediger" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Forbindelsesmanager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Forbind til:" # F5 #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Føj til køen" # F5 #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # F5 #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Indstillinger" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Gem indstillingerne som standard" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Kopier fil(er)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Gem beskrivelse" # Filer - Rediger_filkommentar #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # Filer - Rediger_filkommentar #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" # Filer - Rediger_filkommentar #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Filkommmentar" # Filer - Rediger_filkommentar #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Re&diger kommentar for:" # Filer - Rediger_filkommentar #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "Kod&er:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" # Filer - Sammenlign_indhold #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "&Om sammenligneren..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Sammenlign automatisk" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "&Binær tilstand" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "&Annuller" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Kopier blok til &højre" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopier blok til højre" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Kopier blok til &venstre" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopier blok til venstre" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Kopier" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Klip" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Sæt ind" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Gentag" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Gentag" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vælg &alle" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Fortryd" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Fortryd" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Afslut" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "S&øg..." #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Find" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "&Find næste" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "&Find næste" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Find forrige" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Find forrige" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Erstat..." #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Erstat" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "F&ørste forskel" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Første forskel" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje" #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorer forskel på STORE og små bogstaver" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorer tomme felter" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Fortsæt rulning" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "S&idste forskel" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Sidste forskel" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Linjeforskel" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "&Næste forskel" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Næste forskel" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Åbn venstre..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Åbn højre..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Farvet baggrund" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "&Forrige forskel" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Forrige forskel" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "Genindlæs" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Genindlæs" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "&Gem" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "&Gem" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Gem som..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Gem som..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Gem venstre" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Gem venstre" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Gem venstre som..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Gem venstre som..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Gem højre" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Gem højre" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Gem højre som..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Gem højre som..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "&Sammenlign" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Sammenlign" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Koder" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Koder" # Filer - Sammenlign_indhold #: tfrmdiffer.caption msgid "Compare files" msgstr "Sammenlign indhold" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Venstre" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Højre" # Filer - Sammenlign_indhold #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "H&andlinger" # Filer - Sammenlign_indhold #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" # Filer - Sammenlign_indhold #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Koder" # Filer - Sammenlign_indhold #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Filer" # Filer - Sammenlign_indhold #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Indstillinger" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Tilføj ny genvej til sekvens" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Af&bryd" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Fjern sidste genvej fra sekvens" # Opsætning - Indstillinger - Genvejstaster - Tilføj_genvejstast #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Vælg en genvej fra listen over resterende ledige taster" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Kun for disse kontrolelementer" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (hver i egen linje):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Genveje:" # F4 - Hjælp #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "&Om" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "&Om sammenligneren..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Indstillinger" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Indstillinger" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "K&opier" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopier" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "&Klip" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Klip" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "S&øg..." #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Find" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "&Find næste" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "&Find næste" # F4 - Rediger #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Find forrige" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Sæt i&nd" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Sæt ind" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Annuller fortryd" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Annuller fortryd" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Erstat..." #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Erstat" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Marker alt" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Vælg alle" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Fo&rtryd" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Fortryd" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "&Luk" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Afslut" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Afslut" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Ny" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Ny" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Å&bn..." #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Åbn" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Genindlæs" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Gem" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "&Gem" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Gem &som..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Gem som" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "&Hjælp" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Koder" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Åbn som" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Gem som" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Fremhæv syntaks" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Linjeafslutning" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "" "Forskel på STORE\n" " og små &bogstaver" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Søg fra markør&en" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Regulære udtryk" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Kun den valgt &tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Kun hele ord" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Indstillinger" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "E&rstat med:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Søg efter:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Retning" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Udpak filer" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Udpak stinavn, hvis gemt med fil(er)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Udpak hvert arkiv til en &separate mapper (med navn som arkiv)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Overskriv eksisterende filer" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Udpak filer fra arkivet til:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Fil(er), der skal &pakkes ud: " #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Adgangskode for krypterede filer:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Vent.." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Filnavn:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "Fra:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klik på Luk, når den midlertidige fil kan slettes!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Til handlingsvindue" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vis alle" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuel handling:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Fra:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Til:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Egenskaber" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Klæbrig" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" # Filer - Egenskaber - Fanebladet_Attributter #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Tillad &eksekvering af filen som program" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Ejer" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe:" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre:" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ejer:" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Indeholder:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Oprettet:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Udfør:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Navn:" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Placering:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "Gruppe:" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Åbnet:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Ændret:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Attributter ændret:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "Ejer:" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Størrelse:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink til:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Filtype:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Navn" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Værdi" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Attributter" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Egenskaber" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Luk" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Afslut" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Lås op" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Lås alle op" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Lås op" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Filhåndtering" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Proces-id" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Eksekverbar sti" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "&Annuller" # Kommandoer - Find_filer - Handlinger #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Afslut søgning og luk windue" # Kommandoer - Find_filer - Handlinger #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "Indstilling af genvejstaster" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Ko&pier til listboks" # Kommandoer - Find_filer - Handlinger #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Afslut søgning, luk og frigør fra hukommelsen" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "For alle andre \"Find filer\" annuller, luk og frigør fra hukommelsen" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "G&å til fil" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Find data" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "Sidste søg&ning" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "Ny s&øgning" # Kommandoer - Find_filer - Handlinger #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Ny søgning (nulstil filtre)" # Kommandoer - Find_filer - Vis #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Gå til faneblad \"Avanceret\"" # Kommandoer - Find_filer - Vis #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Gå til faneblad \"Hent/gem\"" # Faner #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Skift til næs&te faneblad" # Kommandoer - Find_filer - Vis #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Gå til faneblad \"Plugins\"" # Faner #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Skift til forrige faneblad" # Kommandoer - Find_filer - Vis #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Gå til faneblad \"Resultater\"" # Kommandoer - Find_filer - Vis #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Gå til faneblad \"Generelt\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Tilfø&j" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Gem" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Sl&et" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Hent" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Gem" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Gem &med \"Start i mappe\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Når der gemmes med \"Start i mappe\" vil afgrænsningen blive gendannet ved indlæsing af skabelon. Brug den, hvis du vil afgrænse søgningen til en bestemt mappe" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Anvend skabelon" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Find filer" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "" "Forskel på STORE\n" " og små &bogstaver" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Fra dato:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Til dato:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Filstørrelse fra:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "F&ilstørrelse til:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Søg i pakkede filer" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "&Find tekst:" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Følg s&ymbolske links" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Find filer, der IKKE indeholder &teksten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ikke &ældre end:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" # Kommandoer - Find_filer #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Åbne faner" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Søg efter en del af fi&lnavnet " #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "&Regulære udtryk" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Erst&at med:" #: tfrmfinddlg.cbselectedfiles.caption #, fuzzy #| msgid "Selected directories and &files" msgid "Selected directories and files" msgstr "Søg kun i &valgte mapper/filer" #: tfrmfinddlg.cbtextregexp.caption #, fuzzy #| msgid "Regular &expression" msgid "Reg&ular expression" msgstr "Regulære &udtryk" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Fra tid:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Til tid:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Br&ug søge-pluin:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption #, fuzzy #| msgid "Hexadecimal" msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadecimal" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Indtast mappenavnene, som skal udelades i søgningen adskilt med \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Indtast filnavnene, som skal udelades i søgningen adskilt med \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Indtast filnavne adskilt med \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Værdi" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Filer" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Find data" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "A&ttributter" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Ko&der:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Udelad undermapper:" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Ud&elad filer:" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Søg &efter:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Søg &i mappe:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Søg i under&mapper:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Tidligere søgninger:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "H&andling" # Kommandoer - Find_filer - Handlinger #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "For alle andre afslut, luk og frigør fra hukommelsen" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Åbn i nyt faneblad" # Kommandoer - Find_filer #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "&Indstillinger" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Fjern fra liste" # Kommandoer - Find_filer #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Resultater" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Vis alle fundne elementer" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Vis i editor" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Vis i fremviser" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanceret" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Hent/gem" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultater" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Generelt" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Find" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Find" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "STORE og små bogstaver" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regulære udtryk" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Adgangskode:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Brugernavn:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" # Filer - Dan_hårdt_link #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # Filer - Dan_hårdt_link #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" # Filer - Dan_hårdt_link #: tfrmhardlink.caption msgid "Create hard link" msgstr "Dan hårdt link" # Filer - Dan_hårdt_link #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "&Destination, som linket skal pege på:" # Filer - Dan_symbolsk_link #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "Navn på linket:" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importer alle" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importer valgte" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Vælg de poster, du vil importere" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Hvis du klikker på en undermenu, vælges hele menuen" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Hold CTRL nede og klik på posterne for at vælge dem enkeltvist" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Saml filer" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Saml ovenstående filer til" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "filnavnet:" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "Ned" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Ned" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Fjern" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Slet" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "Op" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Op" # Hjælp #: tfrmmain.actabout.caption msgid "&About" msgstr "&Om Double Commander" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktivér tab efter indeks" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Tilføj filnavn til kommandolinje" # Kommandoer #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Find filer se¶t instans..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Tilføj sti og filnavn til kommandolinje" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiér sti til kommandolinje" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Benchmark" # Vis #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "&Kort visning" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kort visning" # Filer #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "B&eregn brugt plads..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Skift mappe" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Gå til home-mappen" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Gå til overmappe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gå til rod-mappe" # Filer #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "&Dan CRC-kontrolsumfil(er)..." # Filer #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "Kontrollér CRC-kontrolsu&m (fra kontrolsum-filer)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Tøm logfil" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Tøm logvindue" # Faner #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Luk &alle faneblade" # Faner #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Luk dublerede faneblade" # Faner #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "Luk faneblad" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Næste kommandolinje" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Indstil kommandolinje til næste kommando i historikken" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Forrige kommandolinje" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Indstil kommandolinje til forrige kommando i historikken" # Vis #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "&Lang visning" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolonnevisning" # Filer #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Sammenlign &indhold..." # Marker #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "&Sammenlign vinduer" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Sammenligner vinduerne" # Opsætning #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Indstilling af pakkeprogrammer" # Opsætning #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Indstilling af Favoritmapper" # Menuerne Faner, Favoritter og Opsætning #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Indstilling af Favoritfaneblad" # Faner og Opsætning #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Indstilling af faneblade" # Kommandoer - Find_filer - Indstillinger #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Indstilling af genvejstaster" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Indstilling af plugin" # Opsætning #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Ge&m vinduesposition" # Opsætning #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "&Gem indstillinger" # Kommandoer - Find_filer - Indstillinger #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Indstilling af søgninger" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Værktøjslinje..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Indstilling af værktøjslinje" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Indstilling af Mappeoversigt" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Indstilling af Mappeoversigt - layout og farver" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Vis kontekstmenu" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopier" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopier alle faneblade til modsat side" # Marker #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopier alle viste &kolonner" # Marker #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "K&opier filnavn + sti til Udklipsholder" # Marker #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopier filnavn til Udklipsholder" # Netværk #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopier navne med UNC-sti" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopier filer uden bekræftelse" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopier de(n) valgte fil(er)s komplette sti uden afsluttende mappe-separator" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopier de(n) valgte fil(er)s komplette sti" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopier til samme panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopier" # Kommandoer #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Vis &brugt plads" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Klip" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Vis kommandoparametrene" # Filer #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Slet" # Kommandoer - Find_filer - Handlinger #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "For alle søgninger afslut, luk og frigør fra hukommelsen" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Mappehistorik" # Kommandoer #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Favorit&mapper" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Vælg en kommando og udfør den" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Rediger" # Filer #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Rediger &filkommentar" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Rediger ny fil" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Rediger stifeltet over fillisten" # Kommandoer #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Ombyt vind&uer" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Udfør script" # Filer #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Afslu&t" # Filer #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Udpak filer..." # Opsætning #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Asso&ciér..." # Filer #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Saml filer..." # Filer #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "E&genskaber..." # Filer #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "&Opdel fil..." # Kommandoer #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Flad visning" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus på kommandolinjen" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Skift fokus" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Skift mellem venstre og højre filliste" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Fokus på mappeoversigt" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Skift mellem aktuel filliste og mappeoversigt (hvis slået til)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer markøren på første fil på listen" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer markøren på sidste fil på listen" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" # Filer #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Dan &hårdt link..." # Hjælp #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Indeks" # Vis #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Paneler under hinanden" # Hjælp #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatur" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Kort visning i venstre vindue" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Kolonnevisning i venstre vindue" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Venstre &= Højre" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Flad visning i venstre vindue" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Åbn venstre drevliste" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "O&mvendt sortering i venstre vindue" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Sorter venstre vindue efter egensk&aber" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Sorter venstre vindue efter &dato" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Sorter venstre vindue efter fil&endelse" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Sorter venstre vindue efter &navn" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Sorter venstre vindue efter &størrelse" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Visning af miniaturebilleder i venstre vindue" # Faner #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Hent faneblade fra Favoritfaneblad" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" # Marker #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "He&nt valg fra Udklipsholder" # Marker #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Hent valg fra fil" # Faner #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Ind&læs faneblade fra fil" # Filer #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Ny mappe" # Marker #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Vælg alle af samme &type" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Vælg alle filer med samme navn" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Vælg alle filer med samme navn og filendelse" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Vælg alle i samme sti" # Marker #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverter valg" # Marker #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Vælg &alle" # Marker #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "In&dskrænk valg..." # Marker #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Udvid valg..." # Marker #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Fravælg alle" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimer vindue" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" # Filer #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi &Rename Tool" msgid "Multi-&Rename Tool" msgstr "Multi-omd&øbning..." # Netværk #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Forbind til netværk..." # Netværk #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Afbryd til netværk" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hurtig netværksforbindelse..." # Faner #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Dublér faneblad" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Indlæs det næste Favoritfaneblad i listen" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Skift til næs&te faneblad" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Prøv at åbne arkiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Åbn panelfil" # Faner #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Åbn mappe i ny &fane" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Åbn drev efter indeks" # Kommandoer #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Andre Computere" # Vis #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vis handlinger" # Opsætning #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Indstillinger..." # Filer #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Pak filer..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Indstil vidueopdelerens position" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Sæt ind" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Indlæs det forrige Favoritfaneblad i listen" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Skift til forrige faneblad" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hurtigt filter" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Hurtig søgning" # Vis #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hurtig visning" # Vis #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Opdatér vindue" # Faner og Favoritter #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Genindlæs seneste anvendte Favoritfaneblad" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Flyt" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Flyt/omdøb filer uden at spørge" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Omdøb" # Faner #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Omdøb fane" # Favoritter #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Gem seneste Favoritfaneblad" # Marker #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Gendan valg" # Vis #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&mvendt sortering" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Kort visning i højre vindue" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Kolonnevisning i højre vindue" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Højre &= venstre" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Flad visning i højre vindue" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Åbn højre drevliste" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "O&mvendt sortering i højre vindue" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Sorter højre vindue efter egensk&aber" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Sorter højre vindue efter &dato" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Sorter højre vindue efter fil&endelse" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Sorter højre vindue efter &navn" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Sorter højre vindue efter &størrelse" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Visning af miniaturebilleder i højre vindue" # Kommandoer #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Åbn terminal (komman&do-prompt)" # Faner og Favoritter #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Gem aktuelt faneblad som nyt Favoritfaneblad" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" # Marker #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "G&em valg" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Gem &valg i fil" # Faner #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Gem faneblad som fil" # Kommandoer #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Find fi&ler..." # Faner - Indstillinger #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle faneblade låste. Åbn mappe i nyt faneblad" # Faner - Indstillinger #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Indstil alle faneblade til normal" # Faner - Indstillinger #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Indstil alle faneblade til låst" # Faner - Indstillinger #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle faneblade låste. Tillad ændring af mappe" # Filer #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "&Ændre attributter..." # Faner - Indstillinger #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Lås faneblad med mapper åbne&t i nyt faneblad" # Faner - Indstillinger #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" # Faner - Indstillinger #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Lås faneblad" # Faner - Indstillinger #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Lås faneblad, men tilla&d mappeskift" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Åbner ved brug af systemassociationer (eksterne programmer)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Vis knappemenu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Vis kommandolinjehistorik" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Menu" # Vis #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Vis skj&ulte/system-filer" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" # Vis #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortering efter &attributter" # Vis #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sorter&ing efter dato" # Vis #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortering efter t&ype" # Vis #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortering efter &navn" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Sortering efter &størrelse" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Åbn drevliste" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Aktiver/deaktiver filliste for ikke at vist filnavne" # Filer #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Dan symbolsk &link..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" # Kommandoer #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Synkroniser mapper..." # Kommandoer #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Mål &= kilde" # Filer #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Ko&ntroller arkiv(er)" # Vis #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturebille&der" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visning af miniaturebilleder" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Skift mellem filvindue og terminalvindue i fuldskærm" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Overfør " #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Flyt mappe under markøren til højre vindue" # Vis #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Mappeoversig&t" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Sorter efter parametre" # Marker #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "F&ravælg alle af samme type" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Fravælg alle filer med samme navn" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Fravælg alle filer med samme navn og filendelse" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Fravælg alle i samme sti" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Vis" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Vis historikken for brugte stier i aktivt vindue" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gå til næste postering i historik" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gå til forrige postering i historik" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Vis logfil" # Kommandoer #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Se aktuelle søgeresultater" # Hjælp #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Double Commander på &WWW" # Filer #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Sikker sletning" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Arbejd med Favoritmapper og parametre" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Afslut" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Mappe" # Funktionstast F8 #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*.*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favoritmapper" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Kopiér højre vindue mod venstre" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Gå til home-mappen" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Gå til roden" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Gå til overordnet mappe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*.*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Favoritmappe" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Kopiér venstre vindue mod højre" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Menuen Netværk" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Sti:" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "&Annuller" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopier..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Dan link..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Tøm" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopi" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skjul" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vælg alle" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Flyt..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Dan symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Faneindstillinger" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Afslut" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Gendan" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "&Annuller" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Kommandoer" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Opsætning" # In the menu bar #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favo&ritter" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Filer" # Hjælp #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" # Marker #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marker" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "&Netværk" # Vis #: tfrmmain.mnushow.caption msgid "&Show" msgstr "V&is" # Faner #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "Fane&indstillinger" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "F&aner" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopier" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Klip" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "&Rediger..." #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Sæt ind" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" # Opsætning - Indstillinger - Filassociationer #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Vælg din interne kommando" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Ældre sortering" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Ældre sortering" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Vælg alle kategorier som standard" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Valg:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Kategorier:" # Opsætning - Indstillinger - Værktøjslinje - Intern kommando - Vælg #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Komma&ndo:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" # Opsætning - Indstillinger - Værktøjslinje - Intern kommando - Vælg #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Forklaring:" # Opsætning - Indstillinger - Værktøjslinje - Intern kommando - Vælg #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Genvejstaster:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_navn" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategori" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hjælp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Forklaring" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Genvejstast" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "Tilfø&j" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definer..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Forskel på STORE og små bogstaver" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorer accenter og ligaturer (fx `,´,^,~ og vv,&&,@,ß osv.)" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Attri&butter:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Angiv filtype:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Eller vælg fast definition:" # Filer - Opret_ny_mappe #: tfrmmkdir.caption msgid "Create new directory" msgstr "Double Commander" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" # Filer - Opret_ny_mappe #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Ny mappe (directory):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Ny størrelse" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Højde:" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-komprimering" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Width :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Højde" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Bredde" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption #, fuzzy msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Type" #: tfrmmultirename.actanynamemask.caption #, fuzzy msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actclearextmask.caption #, fuzzy msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclearnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Tøm" #: tfrmmultirename.actclose.caption #, fuzzy msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Luk" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "" #: tfrmmultirename.actctrextmask.caption #, fuzzy msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Definer tæller [C]" #: tfrmmultirename.actctrnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Definer tæller [C]" #: tfrmmultirename.actdateextmask.caption #, fuzzy msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdatenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Dato" #: tfrmmultirename.actdeletepreset.caption #, fuzzy msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Slet" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption #, fuzzy msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Type" #: tfrmmultirename.actextnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Type" #: tfrmmultirename.actinvokeeditor.caption msgid "Edit&or" msgstr "" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption #, fuzzy msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actnamenamemask.caption #, fuzzy msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Filnavn" #: tfrmmultirename.actplgnextmask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Plugins" #: tfrmmultirename.actplgnnamemask.caption #, fuzzy msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Plugins" #: tfrmmultirename.actrename.caption #, fuzzy msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Start !" #: tfrmmultirename.actrenamepreset.caption #, fuzzy msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Omdøb" #: tfrmmultirename.actresetall.caption msgid "Reset &All" msgstr "" #: tfrmmultirename.actsavepreset.caption #, fuzzy msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "&Gem" #: tfrmmultirename.actsavepresetas.caption #, fuzzy msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Gem &som..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption #, fuzzy #| msgid "MultiRename" msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Multi-omdøbning" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Forskel på STORE og små bogstaver" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Ena&ble" msgid "&Log result" msgstr "&Aktiver logning" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "Regulære &udtryk" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Brug su&bstituter" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Definer tæller [C]" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Søg && erstat" # Filer - Multi_omdøbning #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Omdøb maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Forvalg" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Fil&type" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Sø&g efter:" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "St&ep:" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Fil&navn" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Erstat &med:" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Start &ved:" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Cifre:" #: tfrmmultirename.miactions.caption #, fuzzy msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Handlinger" #: tfrmmultirename.mieditor.caption #, fuzzy msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Editor" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Gammelt navn" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nyt navn" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Placering" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Menuen Netværk" # Filer - Multi_omdøbning - Rediger - Rediger_navne #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Klik OK, når du har lukket editoren for at indlæse det ændrede navn!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Åbn med" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Brugerdefineret kommando" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Gem association" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Brug altid det valgte program til at åbne denne type fil" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Filtype som skal åbnes: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Flere filnavne" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Flere URL'er" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkelt filnavn" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkelt URL" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Udfør" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # Opsætning - Indstillinger - Favoritmappe - Hjælp #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Hjælp" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Indstillinger" # Opsætning - Indstillinger - Farver og Værktøjer #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Vælg venligst en af undersiderne. Denne side indeholder ingen indstillinger." # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Tilføj" # Opsætning - Indstillinger - Pakkeprogrammer - Tilføjer:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Udfør" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopiér" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Slet" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra - Slet:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt - Udpak:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra - Udpak uden sti:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt - Opliste:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "And&et..." # Opsætning - Indstillinger - Pakkeprogrammer - Generelt - Pakkeprogram:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Omdøb" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra - Opret selvudpakkende arkiv:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra - Test:_(ballonhjælp) #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Id'er bruges sammen med cm_OpenArchive til at genkende arkivet ved at registrere dets indhold og ikke via filtypenavn" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Indstillinger" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Format analyse-tilstand" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "A&ktiveret" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Fejlretningstilstand" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Vi&s konsollens output" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Anvend arkivnavn uden filendelse som liste" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Uni&x filattributter" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "&Unix sti-skilletegn \"/\"" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows &filegenskaber" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows sti-skilletegn \"\\\"" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Tilføjer:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Pakkeprogram:" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "S&let:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Be&skrivelse:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Type:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Udpak:" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Udpak uden sti:" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Id-po&sition:" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&Id" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Id-søgeinterval:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Op&liste:" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Program:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Oplistnings-afslutning (valgfrit):" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Oplistnings-format:" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Oplistnings-begyndelse (valgfrit):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Adgangskode spørgestreng:" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Opret selvudpakkende arkiv:" # Opsætning - Indstillinger - Pakkeprogrammer - Ekstra #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Tes&t:" # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Autokonfiguration" # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Slå alt fra" # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Afvis ændringer" # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Slå alt til" # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Eksportér..." # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importér..." # Opsætning - Indstillinger - Pakkeprogrammer - Andet... #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Sortér pakkeprogrammer" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Ekstra" # Opsætning - Indstillinger - Pakkeprogrammer #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Generelt" # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Når &størrelse, dato/tid eller attributter ændres" # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "For de følgende stier og deres underma&pper:" # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Når &filer oprettes, slettes eller omdøbes " # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Når Double Commander er i &baggrunden" # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Slå automatisk opdatering fra" # Opsætning - Indstillinger - Automatisk_opdatering #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Automatisk opdatering ved ændringer i filsystemet" # Opsætning - Indstillinger - Egenskab #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "&Vis altid ikon i systembakke" # Opsætning - Indstillinger - Egenskab #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Skjul automatisk enheder, der ikke længere er monteret (Linux: Unmounted)" # Opsætning - Indstillinger - Egenskab #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Flyt iko&n til systembakke, når minimeret" # Opsætning - Indstillinger - Egenskab #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "&Tillad kun én kopi af Double Commander ad gangen" # Opsætning - Indstillinger - Egenskab - ballonhjælp #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Her kan du indtaste et eller flere drev eller mount-points, adskilt med \";\"\"." # Opsætning - Indstillinger - Egenskab #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Sortlist følgende drev:" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Kolonnestørrelse" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Vis filendelser" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Justeret (&med Tab)" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Umiddelba&rt efter filnavn" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Fast antal kolonner:" # Opsætning - Indstillinger - Visning - Kort #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Fast kolonnebredde:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Anvend flydende farveover&gange (grøn - gul - rød)" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "&Binær tilstand" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Tekst:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Baggrund &2:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Farve for le&dig plads:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Farve for brugt plads:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Ændret:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Ændret:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Lykkedes:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Tilpas tekst til kolonnebredde" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Udvid c&ellevidden, hvis teksten ikke passer til kolonnen" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Horisontale linjer" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Vertikale linjer" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&uto-fyld kolonner" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Vis gitter i panel" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Indstil kolonnestørrelsen automatisk" # Opsætning - Indstillinger - Visning - Kolonner #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Indstil kolonne&størrelsen automatisk:" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "U&dfør" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Gamle ko&mmandolinjer" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "Mappe&historik" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Søge&filterhistorik" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Faneblade" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "I&ndstillinger" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Søg/erstat &historik" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Hovedvinduets tilstand" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mapper" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Placering af konfigurationsfiler" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Gem ved afslut" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sorteringsrækkefølge af konfigurationsrækkefølgen i venstre menu" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Træstrukturen når menupunktet Indstillinger åbnes" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Angiv i kommandolinje" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Fremhævede:" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Mappe til ikontemaer:" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Mappe til miniaturebilleders cache:" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "P&rogrammappe (transportabel version)" # Opsætning - Indstillinger - Konfiguration #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Br&ugermappe" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Udfør ændringer på alle kolonner" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Slet" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" # Opsætning - Indstillinger - Visning - Kolonner - brugertilpassede kolonner #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Gå til standardindstilling" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Ny" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Næste" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Forrige" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Omdøb" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Nulstil til standard" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Gem som" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "&Gem" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Ændr alle kolonner, når der klikkes for at ændre" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Generelt" # Opsætning - Indstillinger - Visninger - kolonner - Brugertilpassede kolonner #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Markørgrænser:" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Markeret som ramme" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Brug inverteret farvevalg for inaktiv" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Brug inverteret valg" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Brug brugerdef. skrifttyper og farver i denne visning" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "&Baggrund:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Baggrund &2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns view:" msgid "&Columns view:" msgstr "Konfigurér visninger af kolonne:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuel kolonnenavn]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "&Markørfarve:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Skrifttype" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Størrelse" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "&Skriftfarve:" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktiv markørfarve:" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner - Brug brugerdefinerede skrifttyper[...] #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Valgt inaktiv farve:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "&Valgt farve:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Nedenfor er der et preview. Du kan flytte markøren og markere filer for at få et umiddelbart indtryk af de forskellige indstillinger." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Indstillinger for kolonne:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Tilføj kolonne" # Opsætning - Indstillinger - Værktøjer - Sammenligningsprogram #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Vinduets position efter sammenligning" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Tilføj det &aktive vindues mappe" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Tilføj &det aktive && inaktive vindues mappe" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Tilføj mappe, som jeg bro&wser til" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Tilføj en kopi af den valgte postering" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Tilføj aktuelt valgte eller aktive mapper af aktivt vindue" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Tilføj en separator" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Tilføj undermenu" # Opsætning - Indstillinger - Favoritmappe - Tilføj #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Tilføj mappe, som jeg indtaster" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Sammenfold alle" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Fold element sammen" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Klip markerede posteringer" # Opsætning - Indstillinger - Favoritmappe - Slet... #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Slet alle" # Opsætning - Indstillinger - Favoritmappe - Slet... #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Slet valgte elementer" # Opsætning - Indstillinger - Favoritmappe - Slet #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Slet undermenuen og alle dens elementer" # Opsætning - Indstillinger - Favoritmappe - Slet #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Slet kun undermenuen men bevar elementerne" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Udvid element" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Fokus på træstruktur" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Gå til første element" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Gå til sidste element" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Gå til næste element" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Gå til forrige element" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Indsæt det &aktive vindues mappe" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Indsæt &det aktive && inaktive vindues mappe" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Indsæt mappe, som jeg bro&wser til" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Indsæt en kopi af den valgte postering" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Ind&sæt aktuelt valgte eller aktive mapper af aktivt vindue" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Indsæt en separator" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Indsæt undermenu" # Opsætning - Indstillinger - Favoritmappe - Sæt_ind #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Indsæt mappe, som jeg indtaster" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Flyt til næste" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Naviger #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Flyt til forrige" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Åbn alle grene" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Indsæt de klippede posteringer" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Søg_og_erstat #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Søg && erstat i sti" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Søg_og_erstat #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Søg && erstat i sti og destinationssti" # Opsætning - Indstillinger - Favoritmappe - Forskelligt - Søg_og_erstat #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Søg && erstat i destinationssti" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Tilpas sti" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Tilpas destinationssti" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Tilføj..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Bac&kup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Slet..." # Opsætning - Indstillinger - Favoritmappe - Eksportér... #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Eksportér..." # Opsætning - Indstillinger - Favoritmappe - Importér... #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Impo&rtér..." # Opsætning - Indstillinger - Favoritmappe - Sæt_ind... #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Sæt ind..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Forskelligt..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Nogle funktioner til at vælge egnet destination" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Sortering..." # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Tilføj også destination, når mappe tilføjes" # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "U&dvid altid træ" # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Vis kun gyldige miljø&variabler" # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "&I popup vis [også sti]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Navn, a-å" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Navn, a-å" # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Favoritmappe (omsorteret med træk && slip)" # Opsætning - Indstillinger - Favoritmappe #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andre indstillinger" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Navn:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Sti:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "Des&tination:" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Sortering... #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...kun det aktuelle niveau af valgte element(er)" # Opsætning - Indstillinger - Favoritmappe - Forskelligt... #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Skan alle favoritmappers sti for at validere, dem som reelt findes" # Opsætning - Indstillinger - Favoritmappe - Forskelligt... #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Skan alle favoritmappers sti && destination for at validere, dem som reelt findes" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "til en favoritmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "til en \"wincmd.ini\" i TC (beholder eksisterende)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" # Opsætning - Indstillinger - Favoritmappe - Importér... #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Gå til konfigurer TC-relateret information" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Gå til konfigurer TC-relateret information" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Favoritmappe-testmenu" # Opsætning - Indstillinger - Favoritmappe - Importér... #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "fra en favoritmappe-fil (.hotlist)" # Opsætning - Indstillinger - Favoritmappe - Importér... #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "fra \"wincmd.ini\" i TC" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Naviger..." # Opsætning - Indstillinger - Favoritmappe - Backup... #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "Gendan en backup af en favoritmappe" # Opsætning - Indstillinger - Favoritmappe - Backup... #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "Gem en backup af den aktuelle favoritmappe" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Søg og e&rstat..." # Opsætning - Indstillinger - Favoritmappe - Sortering... #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...alt, fra A til Å" # Opsætning - Indstillinger - Favoritmappe - Sortering... #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...kun en gruppe af element(er)" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Sortering... #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Sortering... #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...indhold af undermenu(er) valgt og alle underniveauer" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Menu af testresultat" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Til&pas sti" # Opsætning - Indstillinger - Favoritmappe - Forskelligt #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "&Tilpas destinationssti" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Tilføjelse fra hovedvindue" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Stien skal være relativ til: " # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Spørg altid, hvilket af de understøttede formater, der skal anvendes" # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Når Unicode-tekst skal gemmes, gem i UTF8-format (ellers bliver det som UTF16)" # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Når tekst slippes, generér automatisk filnavn (ellers bliver brugeren sprugt)" # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Vi&s bekræftelse efter træk && slip" # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Når træk && slip bruges" # Opsætning - Indstillinger - Musen - Træk&slip #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Placér det mest ønskede format i toppen af listen (brug træk && slip):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(hvis det mest ønskede ikke er til stede, tages det næstmest ønskede osv.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(Virker ikke med alle kildeprogrammer. Prøv at løse problemet ved at fjerne markering)" # Opsætning - Indstillinger - Layout - Drev-valgknap #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Vis &filsystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Vis l&edig plads" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Vis &drevnavn" # Opsætning - Indstillinger - Layout - Drev-valgknap #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drev-valgknap" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Autoindrykning" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Tillad indrykning af markør, når der oprettes en ny linje med <Enter>, med den samme mængde indledende hvid plads som den foregående linje " #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Indsæt markøren i enden af linjen" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Tillader, at markøren i tomt rum ud over positionen i slutningen" # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Vis specialtegn" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Viser specialtegn til mellemrum og tabuleringer" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Smart Tabs" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Når du bruger <Tab> -tasten, går markøren til det næste ikke-mellemrumstegn i den forrige linje" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Tab rykker blokke ind" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Når aktiveret, fungerer <Tab> og <Skift + fane> som blokindryk; ingen indrykning, når tekst er valgt" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Anvend mellemrum i stedet for tegn" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Konverterer tegn til et specificeret antal mellemrumstegn (når du indtaster)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Slet bagerste mellemrum" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Slet automatisk bagerste mellemrum. Dette gælder kun for redigerede linjer" # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Bemærk, at indstillingen \"Smart Tabs \" har forrang for tabuleringen, der skal udføres" # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Indstillinger (intern fremviser)" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tabulatorbredde: " # Opsætning - Indstillinger - Værktøjer - Editor #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Bemærk, at indstillingen \"Smart Tabs \" har forrang for tabuleringen, der skal udføres" # Opsætning - Indstillinger - Editor - Fremhævere #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Bag&grund:" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Bag&grund:" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Nulstil" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Gem" # Opsætning - Indstillinger - Værktøjer - Fremhævere #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementets attributter" # Opsætning - Indstillinger - Editor - Fremhævere #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Fo&rgrund:" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Fo&rgrund:" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekstmarkering" # Opsætning - Indstillinger - Værktøjer - Fremhævere #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Brug (og rediger) &globale skemaindstillinger" # Opsætning - Indstillinger - Værktøjer - Fremhævere #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Brug &lokale skemaindstillinger" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Fed" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kurs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Gennem&streget" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Understreget" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "O&n" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Tilføj..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Slet..." # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Import/ekspor #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Import/eksport..." #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Sæt ind..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Omdøb" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Ingen" # Opsætning - Indstillinger - Favoritfaneblade #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "U&dvid altid træ" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nej" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Venstre" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Højre" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Liste over Favoritfaneblade (brug træk && slip til at flytte om på rækkefølgen)" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Andre indstillinger" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Hvad skal gendannes for valgte postering og hvorhenne" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Eksisterende faneblade skal beholdes i:" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Gem mappehistorikken:" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Faneblade gemt i venstre vindue skal gendannes i:" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Faneblade gemt i højre vindue skal gendannes i:" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Sæt_ind #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "en separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Tilføj separator" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Sæt_ind #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "en undermenu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Tilføj en undermenu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Sammenfold alle" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...kun det aktuelle niveau af valgte element(er)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Klip" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Slet... #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "slet alle" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Slet... #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "undermenu og alle dets elementer" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Slet... #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "kun undermenu men behold element(er)" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Slet... #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "valgte element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Slet valgte elementer" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Eksporter valgte til ældre .tab-fil(er)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Favoritfaneblades testmenu" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importer ældre .tab-fil(er) ifølge standardindstillingerne" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Importer ældre .tab-fil(er) til valgte position" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importer ældre .tab-fil(er) til valgte position" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importer ældre .tab-fil(er) til valgte position i en undermenu" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Indsæt separator" # Opsætning - Faneblade - Favoritfaneblade - Højreklik i hvidt felt #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Indsæt undermenu" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Åbn alle grene" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Sæt ind" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Omdøb" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Sortering... #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...alt, fra A til Å" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Sortering... #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...kun en gruppe af element(er)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Sorter kun en gruppe af elemet(er)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...indhold af undermenu(er) valgt og alle underniveauer" # Opsætning - Indstillinger - Faneblade - Favoritfaneblad - Import/eksport #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Menu af testresultat" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Tilføj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "Tilføj" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "K&lon" #: tfrmoptionsfileassoc.btncommands.hint #, fuzzy msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Vælg din interne kommando" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Ne&d" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Rediger" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Indsæt" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "&Indsæt" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Fjern" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "Fjern" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Fjern" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Omdøb" # Opsætning - Indstillinger - Filassociationer- Ballonhjælp #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Variabel påmindelseshjælper" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Op" # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Kommandoen skal starte i denne sti. Sæt den aldrig i anførelsestegn." # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Handlingens navn. Det gives aldrig til systemet; det er blot et memoteknisk navn valgt af dig, til dit eget brug" # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parameter til Kommandoen. Lange filnavne med mellemrum bør sættes i parentes (indtastes manuelt)." # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Udførelseskommando. Sæt aldrig denne streng i anførelsestegn" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Beskrivelse af handling" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Handlinger" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Filendelser" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kan sorteres med træk & slip" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Filtyper" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Ikon" # Opsætning - Indstillinger - Favoritmappe - Ballonhjælp #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Handlinger kan arrangeres med træk & slip " # Opsætning - Indstillinger - Favoritmappe - Ballonhjælp #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Filendelser kan arrangeres med træk & slip" # Opsætning - Indstillinger - Filassociationer - Ballonhjælp #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Filtyper kan arrangeres med træk & slip" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "Handling:" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "Kommando:" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Startmappe:" # Opsætning - Indstillinger - Filassociationer - 4_Handlinger #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Tilpas med..." # Opsætning - Indstillinger - Filassociationer - 4_Handlinger #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Tilpasset" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Rediger" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Åben i editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Rediger med..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Tag output fra kommando-prompt" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Åbn i intern editor" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Åbn i intern fremviser" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Åbn med..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Kør i terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vis" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Åbn i fremviser" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Se med..." # Opsætning - Indstillinger - Filassociationer #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klik på mig for at ændre ikon!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "U&dfør i en kommandofortolker" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Udvidet &kontekstmenu" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "&Indstilling af filassociering" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "&Foreslå at tilføje valget af filassociering, når det ikke allerede er inkluderet" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Når filassociering tilgås, foreslå at tilføje aktuelt valgte fil, hvis den ikke allerede er inkluderet i en konfigureret filtype" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Udf&ør i terminal og luk" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Udfø&r i terminal og forbliv åben" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikoner" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" # Opsætning - Indstillinger - Filassociationer - Filassociationer_ekstra #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Yderligere indstillinger" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Stien skal være relativ til: " # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Bed om bekræftelse ved" # Opsætning - Indstillinger - Fihandlinger #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kop&iering" # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Sletning" # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "F8/Delete sletter til &Papirkurv (Shift+F8/Skift+Delete = sletter direkte)" # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Sl&et til Papirkurv" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Fje&rn skrivebeskyttelse-attribut" # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Fl&ytning" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Kopier kommentarer sammen med filer/ma&pper" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Vælg &filnavn uden endelse ved omdøbning" # Opsætning - Indstillinger - Filahandlinger #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Vis &valgboks for faner i kopier/flyt-dialog" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Ignorer fejl ved operationer og s&kriv dem i log-vindue" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Kontrol af checksum" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Udfør handlinger" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Brugergrænseflade" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Bufferstørrelse for filhandlinger (i kB):" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Bufferstørrelse for &hashberegninger (i kB):" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Vis handlingernes fremskridt i:" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Stil for auto-omdøbning af dubletter:" # Opsætning - Indstillinger - Filhandlinger #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "A&ntal overskrivninger ved sikker sletning:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Nulstil til DC-standard" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "&Tillad farveoverlapning" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Ma&rkeret som ramme" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Brug &inverteret farvevalg for inaktiv" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "&Brug inverteret valg" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Markørgrænser:" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "&Baggrund:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Baggrund &2:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "&Markørfarve:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Mar&kørskrift:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Inaktiv markørfarve:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Valgt inaktiv farve:" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Lysstyrke i det inaktive vindue" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "&Valgt farve:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "&Skriftfarve:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Nedenfor er der et preview. Du kan flytte markøren og markere filer for at få et umiddelbart indtryk af de forskellige indstillinger." # Opsætning - Indstillinger - Farver - Filvindue #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "&Skriftfarve:" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "&Nulstil søgefiltret, når filsøgning startes" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Søg efter en del af filnavnet" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Vis menulinje i \"Find filer\"" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Tekstsøgning i filer" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Find filer" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Aktuelle filtre med \"Ny søgning\"-knappen:" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standardsøgeskabelon:" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Brug hukommelses-mapping ved t&ekstsøgning i filer" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Br&ug Stream til tekstsøgning i filer" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Standard" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formater" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Indstil personlige forkortelser:" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Sortering" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Byte: " # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Forskel på STORE og små &bogstaver:" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Forkert format" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Dato- og tidsformat:" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Vis &filstørrelse i:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblgigabyte.caption #, fuzzy #| msgid "&Gigabyte: " msgid "&Gigabyte:" msgstr "&Gigabyte: " #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblkilobyte.caption #, fuzzy #| msgid "&Kilobyte: " msgid "&Kilobyte:" msgstr "&Kilobyte: " # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblmegabyte.caption #, fuzzy #| msgid "Megab&yte :" msgid "Megab&yte:" msgstr "Megab&yte: " # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Indsæt nye filer:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Handlingsfilformat: " # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "So&rtér mapper:" # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Sorteringsme&tode:" #: tfrmoptionsfilesviews.lblterabyte.caption #, fuzzy #| msgid "&Terabyte: " msgid "&Terabyte:" msgstr "&Terabyte: " # Opsætning - Indstillinger - Visning #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "F&lyt ændrede filer:" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Tilføj" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Hjælp" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Aktivér skift til overordnet ma&ppe med dobbelklik på det tomme del af File view" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Undlad af indlæse filliste før en fane aktiveres" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Vis kantede parenteser [] omkring mappenavne" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Fremhæv nye og opdaterede filer" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Aktivér omdøbning på stedet, når du klikker to gange på et navn" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "Indlæs &filliste i seperat tråd" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "Indlæs ikoner ef&ter filliste" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Vis s&ystem og skjulte filer" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Når filer markeres med <mellemrum> flyt ned til næste fil (som ved <INSERT>)" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Windows-agtigt filter ved markering af filer ( \"*. * \" vælger også filer uden endelse osv.)" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Brug et uafhængigt attributfilter i dialog for maske hver gang" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "Markering/fjernelse af markeringer" # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "Anvend disse standardattributter i maske: " # Opsætning - Indstillinger - Visning_ekstra #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Sl&et" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Skabelon..." # Opsætning - Indstillinger - Farver - Filtyper #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Filtypers farver (sorter med træk && slip)" # Opsætning - Indstillinger - Farver - Filtyper #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Kategori-a&ttributter:" # Opsætning - Indstillinger - Farver - Filtyper #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Kategori-far&ve:" # Opsætning - Indstillinger - Farver - Filtyper #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Kategori-&filter:" # Opsætning - Indstillinger - Farver - Filtyper #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Kategori-&navn:" #: tfrmoptionsfonts.hint #, fuzzy msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Skrifttyper" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "Tilføj genvejstast" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "Kopier" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "Slet genvejstast" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Rediger genvejstast" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Kategorier #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Næste kategori" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Lav en popop til den filrelaterede menu" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Kategorier #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Forrige kategori" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "Omdøb" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Gendan til DC-standard" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Gem nu" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Sortering #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Sorter efter kommando" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Sortering #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Sorter efter genvejstast (grupperet)" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Sortering #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Sorter efter genvejstast (en pr. række)" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filter:" # Opsætning - Indstillinger - Genvejstaster #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "K&ategorier:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "Ko&mmandoer:" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Fil for genvej&staster:" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "So&rter:" # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet - Kategorier #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorier..." # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "Kommando..." # Opsætning - Indstillinger - Taster - Genvejstaster - Tastaturikonet #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Sortering..." #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Kommando..." #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Genvejstaster" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Beskrivelse" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Genvejstast" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "For de følgende stier og deres underma&pper:" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Vis ikoner ud for punkter i hoved&menuen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Vis ikoner på &knapper" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "&Vis overlæg til ikoner, (f.eks. pile ved links)" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Skjulte filer ne&dtones (langsommere)" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Slå specielle ikoner fra" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "Ikonstørrelse " # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Ikontema" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Vis ikoner" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "Vis ikoner til venstre for filnavnet" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Drevknapper:" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Filvindue:" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "A&lle" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Alle associerede filer inkl. &EXE/LNK (langsomt)" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "I&ngen ikoner" # Opsætning - Indstillinger - Ikoner #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Kun &standardikoner" # Opsætning - Indstillinger - Ignorer_liste #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "&Tilføj valgte navne" # Opsætning - Indstillinger - Ignorer_liste #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Til&føj valgte navne med hele stien" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" # Opsætning - Indstillinger - Ignorer_liste #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorer (vis ikke) følgende filer og mapper:" # Opsætning - Indstillinger - Ignorer_liste #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Gem i:" # Opsætning - Indstillinger - Taster #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Venstre- hhv. højrepil ski&fter mellem mapper (Linux-agtig navigation)" # Opsætning - Indstillinger - Taster #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Indtastning" # Opsætning - Indstillinger - Taster #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+bogstav&er:" # Opsætning - Indstillinger - Taster #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+bogs&taver:" # Opsætning - Indstillinger - Taster #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Bogstaver:" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Flade funktionstaster" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Vis &bar for ledig plads ved drevknappen" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Vis lo&g-vindue" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Vis &handlingsvindue i baggrund" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Vis fremskridt i menulin&je" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Vis kommandolinje" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Vis aktuel mappe" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Vis dr&ev-knapper" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Vis tal for ledig &plads ved drevknappen" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Vis drev-&valgknap" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Vis knappanel for &funktionstaster" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Vis &menulinje" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Vis &knappanel" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Vis tal for ledig plads ved drevknappen &(kort visning)" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Vis &statuslinje" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Vis &tabulatorlinje" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Vis faneb&lade" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Vis te&rminalvindue" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "V&is to knappaneler for drev (fast bredde, over filvindue)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" # Opsætning - Indstillinger - Layout #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr "Skærmlayout" # Opsætning - Indstillinger - Logfil - (ballonhjælp) #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" # Opsætning - Indstillinger - Logfil - (ballonhjælp) #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Se indholdet af logfilen" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Medtag dato i logfilens &navn" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "&Pakning/udpakning/test af pakkede filer" # Opsætning - Indstillinger - Faneblade - Logfil #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Udf&ørelse af ekstern kommandolinje" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiering/flytning/oprettelse af link && s&ymlink" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "S&letning af filer" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Opre&ttelse/sletning af &mapper" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Log f&ejl" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "Op&ret en logfil i:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "Log &informationsmeddelelser" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/lu&k ned" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Log &succesfulde operationer" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "&Filsystem-plugins" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Logfil for filoperationer" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Log følgende operationer" # Opsætning - Indstillinger - Logfil #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Log følgende udfald" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Fje&rn miniaturebilleder for slettede filer" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Vis konfigurationsfilens indhold" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Opret ny med &kodningen:" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Gå altid til drevets rod ved skift af drev" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "&Vis advarsler (kun med \"OK\"-knappen)" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "Gem &miniaturebilleder i cache" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturebilleder" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Filkommentarer (descript.ion)" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Angående TC-eksport/-import" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Standardkodning:" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsfil:" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC exe-fil:" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Sti til værktøjslinjens output:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" # Opsætning - Indstillinger - Diverse #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bredde x højde:" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Valg med mu&s" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Tekstmarkøren følger ikke længere musemarkøren" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Ved &klik på ikon" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Åbn med" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rulning med musehjul" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Valg" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Tilstand:" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dobbelklik" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Antal linje(r) ad gangen:" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Én linje ad gangen, markøren følger med" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Én side ad gangen" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Enkeltklik (åbner filer og mapper)" # Opsætning - Indstillinger - Mus #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Enkeltklik (åbner mapper, dobbeltklik åbner filer)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Se indholdet af logfilen" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Konfigurer" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Aktiver" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Fjern" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Tilpas" # Opsætning - Indstillinger - Taster - Genvejstaster #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Beskrivelse" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registreret til " #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Plugin - Plugin_DSX #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Søge-plugins giver mulighed for alternative søgealgoritmer eller eksterne værktøjer (som \"locate\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registreret til " #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Plugin #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Anvend aktuelle indstillinger på alle aktuelt konfigurerede plugins" # Opsætning - Indstillinger - Plugin #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Når du tilføjer et nyt plugin, gå da automatisk til justerings-vinduet" # Opsætning - Indstillinger - Plugin #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Indstillinger" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" # Opsætning - Indstillinger - Plugin #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Stien skal være relativ til: " # Opsætning - Indstillinger - Plugin #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Stilen på pluginfilnavn, når du tilføjer et nyt plugin: " # Opsætning - Indstillinger - Plugin - Plugin_WCX #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Pakke-plugins bruges til at åbne arkivtyper" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Associer med" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Navn:" # Opsætning - Indstillinger - Plugin - Plugin_WDX #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Indholds-plugins tillader at vise udvidede fildetaljer f.eks. mp3-tags eller fotooplysninger i fillister. Kan bruges i søgning og multi-omdøbning." #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registreret til " #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Plugin - Plugin_WFX #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Filsystem-plugins giver adgang til diske, som er utilgængelige for operativsystemet eller til eksterne enheder som fx Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registreret til " #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Plugin - Plugin_WLX #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Lister-pluins giver mulighed for at vise dataformater som f.eks. billeder, regneark, databaser etc. i Vis (F3, Ctrl+Q)." #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registreret til " #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "&I starten (navnet skal starte med første indtastede tegn)" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "I slutningen (si&dste tegn før et punktum . skal matche)" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Indstillinger" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Præcis navnematch" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "STORE og små bogstaver" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Søg efter disse elementer" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "B&evar omdøbt navn, når fanebladet låses op" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktiver fil&panel ved klik på fane" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "Vi&s fane, selv om der kun er et enkelt faneblad" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "&Luk ens faneblade, når programmet afsluttes" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Bekræ&ft lukning af alle faner" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Bekr&æft lukning af låste faneblade" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Begræns tekst på faner ti&l:" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "&Markér låste faneblade med stjerne (*) på fanen" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "Tillad visning af faner på flere &linjer" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Op åbner nyt faneblad i forgr&unden" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Åbn &nye faneblade ved siden af aktive fane" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "&Genbrug eksisterende faneblad, hvis muligt" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "&Vis luk-knap på fane" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vis altid drevbogstav i fanebladet" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Faner" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "tegn" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Handling, når der dobbeltklikkes på et faneblad:" # Opsætning - Indstillinger - Faneblade #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Ta&bulatorposition:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "Ingen" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Nej" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Venstre" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Højre" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Gå til indstilling af Favoritfaneblade, når der gemmes (igen)" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Gå til indstilling af Favoritfaneblade, når et nyt gemmes" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "A&ktiver ekstra indstillinger for Favoritfaneblade (vælg hvilken side efter gendannelse, etc.)" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Ekstra standardindstillinger, når et nyt Favoritfaneblad gemmes:" # Opsætning - Indstillinger - Faneblade - faneblade_ekstra #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Ekstra for faneblade" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Når faneblade gendannes, forbliver eksisterende faneblade i:" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Faneblade gemt i venstre vindue gendannes i:" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Faneblade gemt i højre vindue gendannes i:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Fortsæt med at gemme mappehistorikken med Favoritfaneblad:" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardplacering i menu, når et nyt Favoritfaneblad gemmes" # Opsætning - Indstillinger - Værktøjer - Terminal_F9 #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} bør normalt være til stede her for at afspejle den kommando, der skal køres i terminal" # Opsætning - Indstillinger - Værktøjer - Terminal_F9 #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} bør normalt være til stede her for at afspejle den kommando, der skal køres i terminal" # Opsætning - Indstillinger - Værktøjer - Terminal F9 #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Indstilling for udførelse af kommando og derefter ingen handling" # Opsætning - Indstillinger - Værktøjer - Terminal F #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Indstilling for udførelse af kommando i terminal og efterfølgende lukning" # Opsætning - Indstillinger - Værktøjer - Terminal F9 #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Indstilling for udførelse af kommando i terminal og efterfølgende forbliv åben" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.btnclonebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption" msgid "C&lone button" msgstr "K&lon knap" #: tfrmoptionstoolbarbase.btndeletebutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "Slet" #: tfrmoptionstoolbarbase.btnedithotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Rediger genvejstast" #: tfrmoptionstoolbarbase.btninsertbutton.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Indsæt ny knap" #: tfrmoptionstoolbarbase.btnopencmddlg.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopencmddlg.caption" msgid "Select" msgstr "Vælg" #: tfrmoptionstoolbarbase.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Andre..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Fjern genvejstast" #: tfrmoptionstoolbarbase.btnstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.caption" msgid "Suggest" msgstr "Foreslå" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnsuggestiontooltip.hint" msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Få DC til at foreslå en hjælpetekst baseret på knaptype, kommando eller parametre" #: tfrmoptionstoolbarbase.cbflatbuttons.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption" msgid "Report errors with commands" msgstr "Rapporter &fejl med kommandolinje" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint #, fuzzy msgctxt "tfrmoptionstoolbarbase.edtinternalparameters.hint" msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Indtast kommandoparametre, kun en pr. linje. Tryk F1 for mere hjælp til parametre." #: tfrmoptionstoolbarbase.gbgroupbox.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Udseende" #: tfrmoptionstoolbarbase.lblbarsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "St&ørrelse på panelet:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Ko&mmando:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hjælp" #: tfrmoptionstoolbarbase.lblhotkey.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblhotkey.caption" msgid "Hot key:" msgstr "Genvejstast:" #: tfrmoptionstoolbarbase.lbliconfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption" msgid "Ico&n:" msgstr "Iko&n:" #: tfrmoptionstoolbarbase.lbliconsize.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Størrelse på ik&on:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Ko&mmando:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbarbase.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Startmappe:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Hjælpetekst:" #: tfrmoptionstoolbarbase.miaddallcmds.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddallcmds.caption" msgid "Add toolbar with ALL DC commands" msgstr "Tilføj værktøjslinje til ALLE DC-kommandoer" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption" msgid "for an external command" msgstr "for en ekstern kommando" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption" msgid "for an internal command" msgstr "for en intern kommando" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption" msgid "for a separator" msgstr "for en separator" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption" msgid "for a sub-tool bar" msgstr "for en under-værktøjslinje" #: tfrmoptionstoolbarbase.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbarbase.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstoolbarbase.miexportcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrent.caption" msgid "Current toolbar..." msgstr "Aktuel værktøjslinje" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini i TC (beholder eksisterende)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexporttop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttop.caption" msgid "Top toolbar..." msgstr "Øverste værktøjslinje..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptobackup.caption" msgid "Save a backup of Toolbar" msgstr "Gem en backup af værktøjslinjen" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini i TC (beholder eksisterende)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbarbase.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstoolbarbase.miimportbackup.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackup.caption" msgid "Restore a backup of Toolbar" msgstr "Gendan en backup af værktøjslinjen" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimportdcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbar.caption" msgid "from a Toolbar File (.toolbar)" msgstr "fra en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbar.caption" msgid "from a single TC .BAR file" msgstr "fra en enkelt TC .BAR-fil" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcini.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcini.caption" msgid "from \"wincmd.ini\" of TC..." msgstr "fra \"wincmd.ini\" i TC..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbarbase.misearchandreplace.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "Søg og erstat..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbarbase.misrcrplallofall.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplallofall.caption" msgid "in all of all the above..." msgstr "i alle ovenfor nævnte..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplcommands.caption" msgid "in all commands..." msgstr "i alle kommandoer..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrpliconnames.caption" msgid "in all icon names..." msgstr "i alle ikonnavne..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplparameters.caption" msgid "in all parameters..." msgstr "i alle parametre..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misrcrplstartpath.caption" msgid "in all start path..." msgstr "i alle startstier..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.rgtoolitemtype.caption" msgid "Button type" msgstr "Knaptype" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikoner" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption #, fuzzy msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Stien skal være relativ til: " #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Bevar terminalvindue åbent efter udførelse af program" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Udfør i t&erminal" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Brug &eksternt program" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Ekstra parametre:" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Sti til det eksterne program:" # Opsætning - Indstillinger - Hjælpetekts_(ballonhjælp) #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Tilføj" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Udfør" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopiér" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Slet" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Skabelon..." # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Omdøb" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "And&et..." # Opsætning - Indstillinger - Hjælpetekst(ballonhjælp) #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Indstilling af hjælpetekst for valgte filtyper" # Opsætning - Indstillinger - Hjælpetekst_ballonhjælp) #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Generelle indstillinger vedrørende hjælpetekst" # Opsætning - Indstillinger - Hjælpeteks_(ballonhjælp) #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Vi&s hjælpetekst (ballonhjælp) for filer i filvinduet" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Tip til kategori:" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Filter til kategori:" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Forsinkelse:" # Opsætning - Indstillinger - Hjælpetekst_(ballonhjælp) #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Visning: " # Opsætning - Indstillinger - Hjælpeteks_(ballonhjælp) #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Filtyper:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Afvis ændringer" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Sortér hjælpetekstens filtyper" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Med dobbeltklik på baren (for aktuel mappe) i toppen af et filvindue" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Med menuen og intern kommando" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dobbelt museklik i mappeoversigt til markering og afslut" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "Med menuen og intern kommando" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Med dobbeltklik på et faneblad (hvis konfigureret til det)" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Når tastaturgenvejen anvendes, vil vinduet blive lukket og vende tilbage til det aktuelle valg" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Enkelt museklik i mappeoversigt til markering og afslut" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Anvend den i kommandolinjehistorikken" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Anvend den i mappehistorikken" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Anvend den i visningshistorikken (besøgte stier i aktiv visning)" # Opsætningl - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Opførsel ved markering" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Indstillinger for mappeoversigten" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Anvend mappeoversigt i" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "* BEMÆRK: Med hensyn til valgmuligheder som forskel på små/store bogstaver, ignorering eller ej af accenter, gemmes valgene og gendannes individuelt for hver kontekst fra en brugersession til en anden." # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Favoritmapper" # Opsætning - Indstillinger - Layout - Mappeoversigt #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Favoritfaneblade" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Mappehistorik" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." # Opsætning - Indstillinger - Layout - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Anvend og vis genveje til valg af elementer" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" # Opsætning - Indstillinger - Layout - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Indstillinger for layout og farver" # Opsætning - Indstillinger - Layout - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Baggrundsfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Markørfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Funden tekstfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Funden tekst under markør:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Normal tekstfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Normal tekst under markør:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Preview af mappeoversigt" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Sekundær tekstfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Sekundær tekst under markør:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Genvejens farve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Genvej under markør:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Ikke-valgbar tekstfarve:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Ikke-valgbar under markør:" # Opsætning - Indstillinger - Mappeoversigt_layout og farver #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Når du til venstre ændrer farven, kan du se et preview af, hvordan din mappeoversigt kommer til at se ud i dette eksempel." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" # Opsætning - Indstillinger - Værktøjer - Fremviser #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "A&ntal kolonner i bogvisning:" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "&Indstillinger" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Pak filer" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Dan &separate arkiver, et for hver valgt fil/mappe" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "&Dan selvudpakkende arkiv" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Krypter" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Fl&yt til arkiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Fordel arkiv over flere diske" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Ko&m i TAR-arkivet først" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Gem &også sti (kun rekursivt)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Pak fil(er) i arkivet:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakkeprogram" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Udpak &alle og udfør" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Udpak og udfør" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Egenskaber for pakket fil" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributter:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimering:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dato" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metode" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Oprindelig størrelse:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fil:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Pakket størrelse:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakkeprogram:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tid:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Luk filtervindue" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Indtast teksten, som der søges eller filteres efter" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Forskel på STORE og små bogstaver" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Mapper" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Filer" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Matcher begyndelsen" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Match slutningen" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filter:" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Skift mellem søgning eller filtrering" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Flere regler" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Færre regler" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Anvend indholds-plugin. Kombiner med:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Felt" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Værdi" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (alle operatorer er sande el. falske)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (mindst en operator er sand el. falsk)" #: tfrmselectduplicates.btnapply.caption #, fuzzy msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Udfør" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "Annu&ller" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Skabelon..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Skabelon..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*.*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annu&ller" #: tfrmselectpathrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annu&ller" #: tfrmselecttextrange.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vælg bog&staverne, som skal indsættes:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" # Filer - Ændre_attributter #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # Filer - Ændre_attributter #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" # Filer - Ændre_attributter #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Ændre attributter" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" "SGIDS&GID\n" "(Set group id)" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Stic&ky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" "SUID&SUID\n" "(Set user id)" # Filer - Ændre_attributter #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "&a Arkiv" # Filer - Ændre_attributter #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Oprettet:" # Filer - Ændre_attributter #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "&h Skjult" # Filer - Ændre_attributter #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Åbnet:" # Filer - Ændre_attributter #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Ændret:" # Filer - Ændre_attributter #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "&r Skrivebeskyttet" # Filer - Ændre_attributter #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Medtag filer i &undermapper" # Filer - Ændre_attributter #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "&s System" # Filer - Ændre_attributter #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Ændre dato/tid" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ændre attributter " # Filer - Ændre_attributter #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributter" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gråt=uændret, markeret=sæt attribut)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ejer" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(gråt=uændret, markeret=sæt attribut)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Annu&ller" #: tfrmsortanything.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmsplitter.caption msgid "Splitter" msgstr "Opdel fil" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Der behøves en CRC32 verifikationsfil" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1,44 MB - 3,5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Størrelse og antal dele" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Opdel filen i mappen:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Antal dele:" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Menuen Netværk" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Dato" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Gratis Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativsystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platform" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revision" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Menuen Netværk" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Version" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" # Filer - Dan_symbolsk_link #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" # Filer - Dan_symbolsk_link #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" # Filer - Dan_symbolsk_link #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Dan symbolsk link" # Filer - Dan_symbolsk_link #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Anvend relativ sti, når det er muligt" # Filer - Dan_symbolsk_link #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destination, som linket skal pege på:" # Filer - Dan_symbolsk_link #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Navn på linket:" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Fjern valgte" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Udvælg til kopiering (standardretning)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Udvælg til kopiering -> (venstre til højre)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Omvendt kopieringsretning" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Udvælg til kopiering <- (højre til venstre)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Udvælg til sletning -> (højre)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "&Luk" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "&Sammenlign..." #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Skabelon..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "S&ynkroniser..." #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synkroniser mapper" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&Asymetrisk" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "&Efter indhold" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "&Ignorer dato" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "&Kun valgte" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "&Undermapper" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Vis" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(i hovedvindue)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Sammenlign" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vis venstre" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vis højre" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "Dubletter" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "≠" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "Unikke" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klik venligst \"Sammenlign\" for at starte" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synkronisering" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Bekræft overskrivning" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Mappeoversigt" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Vælg din Favoritmappe" # Kommandoer - Favoritmapper - Knappen med Aa #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "I søgningen: Forskel på STORE og små bogstaver" # Kommandoer - Favoritmapper #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Helt foldet sammen" # Kommandoer - Favoritmapper #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Helt udvidet" # Kommandoer - Favoritmapper - Knappen med eé #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "I søgningen: Ignorer accenter og ligaturer (fx `,´,^,~ og vv,&&,@,ß osv.)" # Kommandoer - Favoritmapper - Knappen med Aa #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "I søgningen: Ingen forskel på STORE og små bogstaver" # Kommandoer - Favoritmapper - Knappen med eé #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "I søgningen: Nøjagtig mht. accenter og ligaturer (fx `,´,^,~ og vv,&&,@,ß osv.)" # Kommandoer - Favoritmapper - Knappen med ↑ #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Vis ikke filens indhold \"bare\", fordi den søgte streng findes i filnavnet" # Kommandoer - Favoritmapper - Knappen med ↑ #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Hvis søgte streng findes i et filnavn, skal du vise hele filen, selvom elementerne ikke matcher" # Kommandoer - Favoritmapper - 'Luksymbolet' #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Luk mappeoversigt" # Kommandoer - Favoritmapper - 'Tandhjulet' #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Indstilling af mappeoversigt" # Kommandoer - Favoritmapper - 'Farvepaletten' #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Indstilling af mappeoversigt - layout og farver" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Tilføj nyt" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Ændr" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Standard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Fjern" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Tilpas plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Bestem arkivtype efter indhold" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Kunne ikke slette filer" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Understøtter kryptering" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Vis som normale filer (skjul pakke-ikon)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Understøtter komprimering i hukommelsen" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Kan ændre eksisterende arkiver" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Arkiv kan indeholde flere filer" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Kan oprette nye arkiver" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Understøtter indstillings-dialogboks" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Tillad tekstsøgning i arkiver" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "Beskrivelse:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Registrer streng:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "Type:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flag" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "Navn:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Plugin:" # F3 - Om #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "Om fremviseren..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Vis \"Om\" dialogen" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Ændr kodning" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Kopier fil" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopier fil" # F3 - Rediger #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopier til Udklipsholder" # F3 - højreklik på baggrunden #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopier til Udklipsholder (formateret)" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Slet fil" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Slet fil" # F3 - Fil #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "Afslut" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Find" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "&Find næste" # F3 - Rediger #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Find forrige" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje" #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Gå til linje" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Center" # F3 - Fil #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "&Næste" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Indlæs næste fil" # F3 - Fil #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "&Forrige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Indlæs forrige fil" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Spejlvend horisontalt" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Spejlvend vertikalt" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Flyt fil" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Flyt fil" # F3 - Vis #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Preview" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" # F3 - Fil #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Genindlæs" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Genindlæs aktuel fil" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "Roter 180°" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Roter 180°" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "Roter 270°" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Roter 270°" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "Roter 90°" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Roter 90°" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "&Gem" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Gem &som..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Gemmer filen som..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Tag et skærmbillede" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "3 sek. forsinkelse" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "5 sek. forsinkelse" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Vælg &alt" # F3 - Vis #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Binær (fast linjelængde)" # F3 - Vis #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "B&og" # F3 - Vis #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Vis som &Dec" # F3 - Vis #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Hex" # F3 - Vis #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Kun tekst" # F3 - Vis #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Ombryd tekst" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" # F3 - Vis #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Billede/multimedie" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" # F3 - Vis #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugin" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Stræk" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strækker billedet" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Stræk kun store" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Fortryd" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Fortryd" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zoom" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Zoom ind" #: tfrmviewer.actzoomin.hint #, fuzzy msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Zoom ind" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Zoom ud" #: tfrmviewer.actzoomout.hint #, fuzzy msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Zoom ud" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Beskær" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Marker" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Male" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Røde øjne" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Tilpas størrelse" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Slideshow" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Fremviser" # F3 - OM #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Om" # F3 - Rediger #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" # F3 - Kodning #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodning" # F3 - Fil #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fil" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "B&illede" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Stift" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Roter" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Tag et skærmbillede" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vis" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "S&top" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Filhandlinger" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Altid øverst" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Anvend \"træk && slip\" for at flytte handlingerne mellem køerne" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annullér" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annullér" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Vis i seperat windue" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Sæt først i køen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Sæt sidst i køen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Kø" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Ikke i kø" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Vis i seperat vindue" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Sæt alt på &pause" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Fø&lg links" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Hvis mappen findes:" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "Annu&ller" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametre:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Konfigurer" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Krypter" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Hvis filen findes:" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Kopier &dato/tid" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Til &baggrund" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Hvis fil findes" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" # Filer - Egenskaber - Fanebladet_Plugins #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Optagelsesdato" # Filer - Egenskaber - Fanebladet_Plugins #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Højde" # Filer - Egenskaber - Fanebladet_Plugins #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Bredde" # Filer - Egenskaber - Fanebladet_Plugins #: uexifreader.rsmake msgid "Manufacturer" msgstr "Producent" # Filer - Egenskaber - Fanebladet_Plugins #: uexifreader.rsmodel msgid "Camera model" msgstr "Kameramodel" # Filer - Multiomdøbning - ... - Plugin - Plugins - <EXIF> #: uexifreader.rsorientation msgid "Orientation" msgstr "Retning" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Filen kan ikke findes men den kunne hjælpe med at validere den endelige kombination af filer:\n" "%s\n" "\n" "Find den venligst og klik \"OK\" når du er klar,\n" "eller klik \"Annuller\" for at fortsætte uden filen?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annuller Hurtigt filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuller aktuel handling" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Indtast filnavn med filendelse for den 'sluppede' tekst" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Tekstformat, som skal importeres" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Brudt:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Generelt:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Mangler:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Læsefejl" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Lykkedes:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Indtast kontrolsum og vælg algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Kontroller kontrolsum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Vil du nulstille filtrene for den nye søgning?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Udklipsholderen indeholder ingen gyldige data for værktøjslinjen" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;Aktivt vindue;Ventre vindue;Højre vindue;Filhandlinger;Konfiguration;Netværk;Forskelligt;Parallel Port;Print;Mærke;Sikkerhed;Udklipsholder;FTP;Navigation;Hjælp;Window;Kommandolinje;Værktøjer;Vis;Bruger;Faneblade;Sortering;Log" # Opsætning - Indstillinger - Værktøjslinje - Intern kommando - Vælg #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ældre sortering;A-Å sortering" #: ulng.rscolattr msgid "Attr" msgstr "Attribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dato" #: ulng.rscolext msgid "Ext" msgstr "Type" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Navn" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Størrelse" #: ulng.rsconfcolalign msgid "Align" msgstr "Justering" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Titel" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Slet" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feltindhold" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Flyt" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Bredde" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Tilføj kolonne" # Højreklik på drevknap - Handlinger #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Indstil filassociation" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Bekræfter kommandolinje og parametre" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopier (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importeret DC-værktøjslinje" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importeret DC-værktøjslinje" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_'Sluppet' tekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_'Sluppet' HTML-tekst" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_'Sluppet' RTF" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_'Sluppet' simpel tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_'Sluppet' UnicodeUTF16-tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_'Sluppet' UnicodeUTF8-tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr "Føj til:" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Sletter:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "De to filer er identiske!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Matcher:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Ændret:" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Afbryd" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Alle" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Tilføj" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto-omdøb kildefiler" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Af&bryd" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Sammenlign indhold" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortsæt" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "Kopier ind i" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Kopier ind i alle" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Afslut program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&norer" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorer alle" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nej" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Ing&en" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Flere &valg >>" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Overskriv" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Overskriv &alle" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Overskriv alle større" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Overskriv &ældre" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Overskriv alle mindre" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Omd&øb" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Tilføj" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Forsøg igen" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Som ad&ministrator" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Spring over" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "S&pring alle over" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Lås op" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" # F5 #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopier fil(er)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Flyt fil(er)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Pau&se" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&OK" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kø" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Hastighed %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Hastighed %s/s, resterende tid %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Rich Text-format;HTML-fFormat;Unicode-format;Simple Text-format" # Opsætning - Indstillinger - Farver - Filvindue #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Bar for brugt/ledig plads" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<ingen drev-etiket>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<intet medie>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commaders interne editor" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gå til linje" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gå til linje" #: ulng.rseditnewfile msgid "new.txt" msgstr "ny.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Filnavn:" #: ulng.rseditnewopen msgid "Open file" msgstr "Åbn fil" #: ulng.rseditsearchback msgid "&Backward" msgstr "Til&bage" #: ulng.rseditsearchcaption msgid "Search" msgstr "Søg" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Fremad" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Erstat" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "med ekstern editor" # Højreklik på element - Handlinger-> #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "med intern editor" # Højreklk på et element - Handlinger #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "udfør i en kommandofortolker" # Højreklik på element - Handlinger-> #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Udfør i terminal og luk" # Højreklik på element - Handlinger-> #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Udfør i terminal og forbliv åben" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" blev ikke fundet i linjen %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Ingen udvidelse defineret før kommandoen \"%s\". Det ignoreres" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Venstre;Højre;Aktive;Inaktive;Begge;Intet" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Nej;Ja" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Eksporteret_fra_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Spørg;Overskriv;Spring over" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Spørg bruger;Kopier ind i alle filer;Spring alle filer over" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Spørg bruger;Overskriv alle filer;Overskriv alle ældre filer;Spring alle filer over" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Spørg bruger;Undlad indstilling;Ignorer fejl" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Enhver fil" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Pakkeprogrammers konfigurationsfiler" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC-hjælpetekstfiler" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Favoritmappefiler" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Eksekverbare filer" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini-konfigurationsfiler" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Ældre DC .tab-filer" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Filter:" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC-værktøjslinjefil" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC-værktøjslinjefil" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml-konfigurationsfiler" # F5 - Indstillinger - (ikonet)_Vælg_skabelon #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definer valg" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s niveau(er)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Alle (ubegrænset dybde)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Kun aktuelle mappe" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Mappen %s findes ikke!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Fundet: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Gem søgningen som skabelon" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Navn på skabelon:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Skannet: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanner" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Find filer" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Tid for skanning:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Start ved" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "" #: ulng.rsfontusageviewerbook #, fuzzy msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "&Bogviserens skrifttype:" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Ledig plads: %sB. Kapacitet: %sB" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%sB ledige" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Åbnet dato/tid" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributter" #: ulng.rsfunccomment msgid "Comment" msgstr "Kommentar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimeret størrelse" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Oprettet dato/tid" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Type" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Ændre dato/tid" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link til" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Ændret dato/tid" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Navn" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Navn uden filendelse" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Ejer" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Sti:" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Størrelse" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Kunne ikke danne hårdt link." # Opsætning - Indstillinger - Favoritmapper #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "ingen;Navn, a-z;Navn, z-a;Ext, a-z;Ext, z-a;Størrelse 9-0;Størrelse 0-9;Dato 9-0;Dato 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Advarsel! Hvis en .hotlist fil gendannes, overskrives den eksisterende liste af den importerede fil.\n" "\n" "Vil du fortsætte?" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopierings-/flytningsdialog" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Sammenligningsprogram" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Rediger kommentardialog" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Find filer" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hovedvindue" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synkronisér mapper" # Opsætning - Indstillinger - Taster - Genvejstaster - Kategorier: #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Fremviser" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "En genvej med det navn findes allerede.\n" "Vil du overskrive den?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Er du sikker på, at du vil gendanne standardindstillingerne?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Er du sikker på, at du vil slette opsætningen \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopi af %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Indtast dir nye navn" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Du skal beholde mindst en genvejsfil." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nyt navn" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "\"%s\" er blevet ændret.\n" "Vil du gemme nu?" # Opsætning - Indstillinger - Genvejstaster - Tilføj_genvejstast #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Ingen genvej med \"ENTER\"" # Opsætning - Indstillinger - Taster - Genvejstaster #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Efter kommando;Efter genvejstast (grupperet);Efter genvejstast (en pr. række)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan ikke finde reference til standard-panelfil" # Viser den metrisk forkortelse i kolonnen "Størrelse" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" # Viser den metrisk forkortelse i kolonnen "Størrelse" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "k" # Viser den metrisk forkortelse i kolonnen "Størrelse" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" # Viser den metrisk forkortelse i kolonnen "Størrelse" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" # Viser den metrisk forkortelse i kolonnen "Størrelse" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" # Kommandoer - Se aktuelle søgninger #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Oversigt over \"Find filer\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Indskrænk valg" #: ulng.rsmarkplus msgid "Select mask" msgstr "Udvid valg" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Angiv filtype:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "En kolonnevisning med det navn findes allerede." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "For at ændre den aktuelle redigering af kolonnevisningen, skal den aktuelle enten GEMMES, KOPIERES eller SLETTES" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Indstillinger for kolonner" # Opsætning - Indstillinger - Visning - Kolonner - Brugertilpassede kolonner #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Indtast navn til den tilpassede kolonne" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Handlinger" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Standard>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Oktal" # Filer #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Opret genvej..." # Netværk #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "&Fjern netværksdrev..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Rediger" #: ulng.rsmnueject msgid "Eject" msgstr "Skub ud" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Udpak her..." # Netværk #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Opret net&værksdrev..." #: ulng.rsmnumount msgid "Mount" msgstr "Mount" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Ny" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kan ikke finde medie" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Åbn" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Åbn med..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Pak her..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Gendan" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sorter efter" #: ulng.rsmnuumount msgid "Unmount" msgstr "Skub eksternt medie ud" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vis" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Alle Double Commanders interne kommandoer" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Beskrivelse: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ekstra parametre til pakkeprograms kommandolinje:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Vil du indføje mellem anførselstegn?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Fejl i CRC32 for fil:\n" "\"%s\"\n" "\n" "Vil du beholde den beskadigede fil?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Du kan ikke kopiere/flytte filen \"%s\" til sig selv!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Kan ikke slette mappen %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Kan ikke overskrive mappen \"%s\" med \"%s\", der ikke er en mappe" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Ændre arbejdsmappe [ChDir] til \"%s\" mislykkedes!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Luk alle inaktive faneblade?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Fanebladet (%s) er låst! Luk alligevel?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Bekræftelse af parameter" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Er du sikker på at ville afslutte?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Filen %s er ændret. Ønsker du at kopiere den tilbage?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Kunne ikke kopiere tilbage - vil du beholde den ændrede fil?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopier %d valgte filer/mapper til:" # F5 #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopier \"%s\" til:" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Opret en ny filtype \"%s-filer\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Indtast placering og filnavn, for hvor DC-værktøjslinjefilen skal gemmes" # Opsætning - Indstillinger - Filassociationer - 4_Handlinger #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Tilpasset handling" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Slet den delvist kopierede fil ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Er du sikker på, at du vil slette de %d valgte filer/mapper?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Vil du flytte disse %d elementer til Papirkurv?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Er du sikker på, at du vil slette den valgte fil \"%s\" ?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Vil du flytte \"%s\" til Papirkurv?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan ikke flytte \"%s\" til Papirkurv! Slet direkte?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Drevet er ikke tilgængeligt." # Opsætning - Indstillinger - Filassociationer - 4_Handlinger #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Indtast tilpasset navn for handlingen:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Indtast filendelse:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Indtast navn:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Indtast navnet på den nye filtype for at danne filendelsen \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-fejl i arkivdata" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datafejl" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Kan ikke forbinde til server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Kan ikke kopiere fil %s til %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Der findes allerede en mappe med navnet \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datoen %s understøttes ikke" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Fejl: Mappen \"%s\" eksisterer allerede! Angiv et andet navn." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Brugerafbrydelse" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Kunne ikke lukke filen" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan ikke danne fil" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Ikke flere filer i arkivet" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan ikke åbne eksisterende fil" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Kunne ikke læse fil" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Kunne ikke skrive til fil" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Kan ikke oprette mappe %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ugyldigt link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ingen filer fundet" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ikke nok hukommelse" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funktionen understøttes ikke!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fejl i kontekstmenuens kommando" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fejl ved indlæsning af konfigurationen" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaksfejl i regulære udtryk!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Kan ikke omdøbe fil %s til %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan ikke gemme associationen" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan ikke gemme fil" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Kan ikke indstille attributter for \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Kan ikke indstille dato/tid for \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Kan ikke oprette ejer/gruppe for \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Kan ikke indstille tilladelser for \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Bufferen er for lille" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "For mange filer at pakke" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arkivformat ukendt" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Eksekverbare: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Afslutningsstatus: " #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerne alle poster i dit Favoritfaneblad? (Handlingen kan ikke fortrydes!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Træk andre posteringer hertil" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Indtast navn til Favoritfanebladet" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Gemmer navnet på nyt Favoritfaneblad" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Antal korrekt eksporterede Favoritfaneblade: %d af %d" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Skal historikken, som standard for nye Favoritfaneblade, gemmes:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Antal korrekt importerede fil(er): %d af %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Ældre faneblade importeret" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Vælg .tab file(r) til import (kan være flere på en gang!)" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Import/Export - Eksporter_valgte_til_gammel_.tab_fil(er) #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Ændringer til Favoritfaneblad er ikke gemt endnu. Vil du gemme dem inden, du fortsætter?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Fortsæt med at gemme mappehistorikken med Favoritfaneblad:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Undermenus navn" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Det vil indlæse Favoritfanebladet: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Gem aktuelt faneblad og overskriv eksisterende Favoritfaneblad" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "" "Filen \"%s\" er ændret.\n" "Vil du gemme?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overskriv:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "" "Filen \"%s\" findes allerede.\n" "Vil du overskrive?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Med fil:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Filen \"\"%s\" ikke funde" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive filhandlinger" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Der er uafsluttede filhandlinger. Lukkes Double Commander kan det medføre tab af data." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Navnets længde (%d) er mere end %d tegn\n" "%s\n" "De fleste programmer vil ikke kunne få adgang til en fil/mappe med et så langt navn!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Filen %s er markeret som skrivebeskyttet. Vil du slette den?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Er du sikker på, at du vil genindlæse filen og miste ændringerne?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Størrelsen på filen \"%s\" er for stor til destinationens filsystem!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "" "Mappen %s eksisterer.\n" "Vil du overskrive?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Følg symlink \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Vælg tekstformatet som skal importeres" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Tilføj %d valgte mapper" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Tilføj valgte mapper: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Tilføj aktuel mappe: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Udfør kommando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_noget" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration af Favoritmapper" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerne alle poster i din Favoritmappe? (Handlingen kan ikke fortrydes!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dette udfører følgende kommando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Det er navnet på Favoritmappen " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dette ændrer det aktive vindue til følgende sti:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Og det inaktive vindue ændres til følgende sti:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Backup af posteringerne mislykkedes..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Eksport af posteringerne mislykkedes..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Eksporter alle" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksporter Favoritmappe - Vælg de posteringer, som du vil eksportere" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Eksport udvalgt" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importer alle" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importer Favoritmappe - Vælg de posteringer, som du vil importere" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Import udvalgt" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Sti" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Find \".hotlist\" filen, der skal importeres" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Favoritmappens navn" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Antal nye poster: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ikke valgt noget at eksportere" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Favoritmappens sti" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Tilføj valgte mappe igen: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Tilføj aktuel mappe igen: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Indtast placering og filnavn på Favoritmappen, der skal gendannes" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Kommando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(enden af undermenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Menunavn:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Navn" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separator)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Undermenus navn" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Favoritmappens destination" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Undersøg, om du vil have det aktive vindue sorteret i en bestemt rækkefølge efter ændring af mappe" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Undersøg, om du vil have det inaktive vindue sorteret i en bestemt rækkefølge efter ændring af mappe" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Nogle funktioner til at vælge egnet sti - relative, absolutte, særlige windowsmapper etc." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Samlede antal gemte posteringer: %d\n" "Backuppens filnavn: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Samlede antal eksportede posteringer: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Vil du slette alle elementer i undermenu [%s]?\n" "Svarer du NEJ, slettes kun menuskilletegn, mens elementer inde i undermenuen bevares." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Indtast placering og filnavn, for hvor Favoritmappe skal gemmes" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Ugyldig fillængde for fil : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Indsæt venligst næste disk eller noget lignende.\n" "\n" "Således det er muligt at skrive denne fil:\n" "\"%s\"\n" "\n" "Antal bytes som mangler at blive skrevet: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fejl i kommandolinje" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ugyldigt filnavn" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ugyldigt format af konfigurationsfilen" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Ugyldigt hexadecimaltal: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ugyldig sti" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Stien %s indeholder ugyldige tegn." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dette er ikke et gyldigt plugin!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dette plugin er lavet til Double Commander for %s.%sDet virker ikke sammen med Double Commander for %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ugyldig citering" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ugyldigt valg" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Indlæser filliste..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Find TC-konfigurationsfile (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Find TC-exe filen (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopier fil %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Slet fil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fejl:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Start ekstern" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Eksternt resultat" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Udpak fil %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Dan link %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Opret mappe %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Flyt fil %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Pak til fil %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Luk ned" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Programstart" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Fjern mappe %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Færdig: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Dan symlink %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Kontroller filintegritet %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Sikker sletning af fil %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Sikker sletning af mappe %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hovedadgangskode" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Indtast venligst hovedadgangskoden:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Ny fil" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Næste volumen bliver pakket ud" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ingen filer" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ingen filer valgt" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" "Ikke nok ledig plads på destinationsdrevet.\n" " Vil du fortsætte?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ikke nok ledig plads på destinationsdrevet.\n" " Vil du forsøge igen?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Kan ikke slette fil %s" # Filer - Sammenlign_indhold #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ikke muligt." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objektet findes ikke!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Handlingen kan ikke afsluttes, fordi filen er åben i et andet program: " #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Nedenfor er der et preview. Du kan flytte markøren og markere filer for at få et umiddelbart indtryk af de forskellige indstillinger." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Adgangskode:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Adgangskoderne er ikke ens!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Indtast venligst adgangskoden:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Adgangskode (firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "For kontrol af adgangskoden, indtast den venligst igen:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Fjern %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "Forudindstilling \"%s\" findes allerede.\n" " Vil du overskrive?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problem med udførelse af kommando (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Filnavn for den 'sluppede' tekst" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Gør venligst denne fil tilgængelig. Vil du prøve igen?" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Indtast nyt navn for dette Favoritfaneblad" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Omdøb #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Indtast nyt navn for denne menu" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Omdøbe/flytte %d valgte filer/mapper?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Omdøb/flyt \"%s\" til?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Vil du erstatte teksten?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Genstart venligst Double Commander for at udføre ændringerne" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Vælg filtype at føje filendelsen \"%s\" til" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Valgte: %s af %s, filer: %d af %d, mapper: %d af %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Vælg en exe-fil til" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Vælg venligst kun kontrolsumfiler!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Vælg venligst placering af næste volumen" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Angiv volumen-etiket" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Særlige mapper" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Tilføj sti fra det aktive vindue" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Tilføj sti fra det inaktive vindue" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Gennemse og anvend valgte sti" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Anvend miljøvariabel..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gå til særlig Double Commander-sti..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gå til miljøvariabel..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gå til en anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gå til særlig Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Gør relativ til Favoritmappens sti" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Gør stien absolut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Gør relativ til særlig Double Commander-sti..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Gør relativ til miljøvariabel..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Gør relativ til særlig Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Gør relativ til anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Anvend særlig Double Commander-sti..." # Opsætning - Indstillinger - Værktøjslinje - knappen mappe #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Anvend Favoritmappens sti" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Anvend anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Anvend særlig Windowsmappe (TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Fanebladet (%s) er låst! Vil du åbne mappen i et andet faneblad?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Omdøb fane" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nyt navn:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Sti:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Fejl! Kan ikke finde TC-konfigurationsfilen:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Fejl! Kan ikke finde TC-konfigurations EXE-fil:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Fejl! TC kører stadigvæk men burde være lukket i fm. denne handling.\n" "Luk TC og tryk OK eller tryk Annuller for at afbryde." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Fejl! Kan ikke finde den ønskede TC-værktøjslinjeoutputmappe:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Indtast placering og filnavn for, hvor DC-værktøjslinjefilen skal gemmes" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "ADVARSEL: Afslutning af en proces kan forårsage uønskede resultater, inklusive tab af data og systeminstabilitet. Processen kan ikke gemme dens tilstand eller data, inden den afsluttes. Er du sikker på, at du vil afslutte processen?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" er nu i Udklipsholderen" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Den valgte fils filendelse kan ikke genkendes" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Find \".toolbar\" fil, der skal importeres" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Find \".BAR\" fil, der skal importeres" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Indtast placering og filnavn på værktøjslinjen, der skal gendannes" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Gem!\n" "Værktøjslinjens filnavn: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Du har valgt for mange filer" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Ikke fastslået" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "FEJL: En uventet brug af mappeoversigten!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<ingen endelse>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<intet navn>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Brugernavn:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Brugernavn (firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "VERIFICERING: " #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Vil du verificere valgte checksummer?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Destinationsfilen er beskadiget. Checksummen matcher ikke" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Volumen-etiket:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Indtast venligst volumen-størrelse:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Sikker sletning af %d valgte filer/mapper?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Sikker sletning af \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "med" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Forkert adgangskode!\n" "Prøv venligst igen!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Vil du auto-omdøbe til \"navn (1).ext\", \"navn (2).ext\" etc.?" #: ulng.rsmulrencounter #, fuzzy msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Definer tæller [C]" #: ulng.rsmulrendate #, fuzzy msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Dato" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension #, fuzzy msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Type" #: ulng.rsmulrenfilename #, fuzzy msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Navn" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Uændret;STORE BOGSTAVER;små bogstaver;Første bogstav stort;Første Bogstav Stort I Hvert Ord;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter #, fuzzy msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Definer tæller [C]" #: ulng.rsmulrenmaskday msgid "Day" msgstr "" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension #, fuzzy msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Type" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "" #: ulng.rsmulrenmaskname #, fuzzy msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Navn" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "" #: ulng.rsmulrenplugins #, fuzzy msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Advarsel! Doublerede navne!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Filen indeholder et forkert antal linjer: %d, burde være %d!" # Kommandoer - Find_filer - Ny søgning #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Behold;Nulstil;Spørg" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Ingen tilsvarende intern kommando" # Kommandoer - Se_aktuelle_søgeresultater #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Beklager. Der er ingen resultater af \"Find filer\" endnu..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Beklager. Der er intet andet \"Find filer\"-vindue at lukke og frigøre fra hukommelsen" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Udvikling" #: ulng.rsopenwitheducation msgid "Education" msgstr "Uddannelse" #: ulng.rsopenwithgames msgid "Games" msgstr "Spil" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafik" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Netværk" #: ulng.rsopenwithoffice msgid "Office" msgstr "Kontor" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Andre" #: ulng.rsopenwithscience msgid "Science" msgstr "Videnskab" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Indstillinger" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "System" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Tilbehør" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afbrudt" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Danner kontrolsumfil" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Danner kontrolsumfil i \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Danner kontrolsumfil af \"%s\"" # Filer- Beregn_brugt_plads #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Beregner" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Beregner \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Samler" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Samler filer i \"%s\" til \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopierer" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopierer fra \"%s\" til \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopierer \"%s\" til \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Danner mappe" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Danner mappe \"\"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Sletter" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Sletter i \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Sletter \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Udfører" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Udfører \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Pakker ud" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Pakker ud fra \"%s\" til \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Afsluttet" #: ulng.rsoperlisting msgid "Listing" msgstr "Oplister" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Oplister \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Flytter" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Flytter fra \"%s\" til\"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Flytter \"%s\" til \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ikke startet" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakker" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakker fra \"%s\" til \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Pakker \"%s\" til \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Sat på pause" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperrunning msgid "Running" msgstr "Kører" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Indstiller egenskab" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Indstiller egenskab i \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Indstiller egenskab af \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Opdeler" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Opdeler \"%s\" til \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Starter" # Filer- Beregn_brugt_plads #: ulng.rsoperstopped msgid "Stopped" msgstr "Stoppet" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stopper" #: ulng.rsopertesting msgid "Testing" msgstr "Kontrollerer" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Kontrollerer i \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Kontrollerer \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Kontrollerer kontrolsum" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Kontrollerer kontrolsum i \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Kontrollerer kontrolsum af \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Venter på adgang til filkilde" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Venter på brugerrespons" #: ulng.rsoperwiping msgid "Wiping" msgstr "Sletter (fuldstændigt)" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Sletter (fuldstændigt) i \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Sletter (fuldstændigt) \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Behandler" # Opsætning - Indstillinger - Favoritmappe #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Tilføj &starten;Tilføj &enden;Tilføj s&mart" # Opsætning - Indstillinger - Hjælpetekst - Tilføj #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Tilføj ny hjælpetekst til filtype" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Hvis du vil ændre den aktuelle redigering af arkivets indstillinger, skal du enten TILFØJE eller SLETTE den aktuelle redigering" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Tilstandsafhængig, ekstra kommando" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Tilføj, hvis det er ikke-tomt" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Arkivfil (langt navn)" # Opsætning - Indstillinger - Pakkeprogrammer - Generelt - Pakkeprogram:_(ballonhjælp) #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Vælg eksekverbart pakkeprogram" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Arkivfil (kort navn)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Skift pakkeprogrammets kodning af liste" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på, at du vil slette: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Pakkeprogramets eksporterede indstillinger" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "fejlforekomst" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Eksporter pakkeprogramets indstillinger" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksporten af %d elementer til fil \"%s\" er færdig." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Vælg den/de, du vil eksportere" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Filliste (lange navne)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Filliste (korte navne)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Importer pakkeprogrammets indstillinger" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importen af %d elementer til fil \"%s\" er færdig." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Vælg filen, som skal importere pakkeprogrammet indstillinger" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Vælg den/de, du vil importere" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Anvend kun navn - uden sti" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Anvend kun stien - uden navn" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Pakkeprogram (langt navn)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Pakkeprogram (kort navn)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Anfør alle navne" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Anfør navne med mellemrum" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Enkelt filnavn, der skal behandles" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Destinationsundermappe" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Anvend ANSI-kodning" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Anvend UTF8-kodning" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Indtast placering og filnavn, hvor pakkeprogrammets konfigurationen skal gemmes" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arkivtype-navn:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Associer plugin \"%s\" med:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Først;Sidst" # Opsætning - Indstillinger - Konfiguration #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassisk, ældre måde;Alfabetisk (men menupunktet Sprog først)" # Opsætning - Indstillinger - Konfiguration #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Udfoldet;Sammenklappet" # Opsætning - Indstillinger - Værktøjer - Sammenligningsprogram #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivt vindue til venstre, inaktivt vindue til højre (ældre visning);Venstre vindue til venstre, højre til højre" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Indtast filendelse" # Opsætning - Indstillinger - Faneblade - faneblade_ekstra #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Tilføjes starten;Tilføjes enden;Alfabetisk sortering" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Nyt vindue;Minimeret til proceslinjen;Handlingsvindue" #: ulng.rsoptfilesizefloat msgid "float" msgstr "Dynamisk (x B/k/M/G);bytes (B);kilobytes (kB);Megabytes (MB);Gigabytes (GB)" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Genvejen %s for cm_Delete vil blive registreret, så den kan bruges til at fortryde denne indstilling" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Tilføj genvejstast for %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Tilføj genvejstast" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kan ikke tilføje genvejstast" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Ændr genvejstast" # Opsætning - Indstillinger - Taster - Genvejstaster #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Kommando" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Genvejen %s for cm_Delete har en parameter som tilsidesætter denne indstilling. Vil du ændre den indstilling for at anvende de globale indstillinger?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Genvejen %s for cm_Delete skal have en parameter ændret for at matche genvejen %s. Vil du ændre parameteren?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beskrivelse" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Rediger genvejstast for %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ret parameter" # Opsætning - Indstillinger - Taster - Genvejstaster #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Genvejstast" # Opsætning - Indstillinger - Taster - Genvejstaster #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Genvejstaster" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ingen>" # Opsætning - Indstillinger - Taster - Genvejstaster #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Indstil genvej for at slette fil" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "For at denne indstilling skal kunne virke med genvejen %s, skal genvejen %s tildeles til cm_Delete. Men den er allerede tildelt til %s. Vil du ændre det?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Genvejen %s for cm_Delete er en sekventiel genvej for hvilken en genvej med omvendt Shift ikke kan tildeles. Denne indstilling vil derfor måske ikke virke." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Genvejstast anvendes" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy, badformat msgid "Shortcut %s is already used." msgstr "Genvejstast %s anvendes allerede til %s." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Ændre den til %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "bruges af %s i %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "bruges til denne kommando men med andre parametre" # Opsætning - Indstillinger - Pakkeprogrammer #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Pakkeprogrammer" # Opsætning - Indstillinger - Automatisk_opdatering #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Automatisk opdatering" # Opsætning - Indstillinger - Egenskab #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Egenskab" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Diverse" # Opsætning - Indstillinger - Farver #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Farver" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Kolonner" # Opsætning - Indstillinger - Konfiguration #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Konfiguration" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Brugertilpassede kolonner" # Opsætning - Indstillinger - Favoritmappe #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Favoritmappe" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" # Opsætning - Indstillinger - Musen - Træk&slip #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Træk & slip" # Opsætning - Indstillinger - Layout - Drev-valgknap #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drev-valgknap" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favoritfaneblade" # Opsætning - Indstillinger - Filassociationer - Filassociationer - ekstra #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Filassociationer - ekstra" # Opsætning - Indstillinger - Filassociationer #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Filassociationer" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Ny" # Opsætning - Indstillinger - Filhandlinger #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Filhandlinger" # Opsætning - Indstillinger - Farver - Filvindue #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Filvindue" # Opsætning - Indstillinger - Filhandlinger - Find_filer #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Find filer" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visning" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Visning - ekstra" # Opsætning - Indstillinger - Farver - Filtyper #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Filtyper" # Opsætning - Indstillinger - Faneblade #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Faneblade" # Opsætning - Indstillinger - Faneblade - Faneblade_ekstra #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Faneblade - ekstra" # Opsætning - Indstillinger - Skrifttyper #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Skrifttyper" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Fremhævere" # Opsætning - Indstillinger - Genvejstaster #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Genvejstaster" # Opsætning - Indstillinger - Ikoner #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikoner" # Opsætning - Indstillinger - Ignorer_liste #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Ignorer-liste" # Opsætning - Indstillinger - Taster #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taster" # Opsætning - Indstillinger #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Sprog (Language)" # Opsætning - Indstillinger - Layout #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Layout" # Opsætning - Indstillinger - Logfil #: ulng.rsoptionseditorlog msgid "Log" msgstr "Logfil" # Opsætning - Indstillinger - Diverse #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Diverse" # Opsætning - Indstillinger - Musen #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Musen" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Indstillingerne er ændret i \"%s\"\n" "\n" "Vil du gemme ændringerne?" # Opsætning - Indstillinger - Plugin #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugin" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Hurtig søgning/filtrering" # Opsætning - Indstillinger - Værktøjer - Terminal F9 #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal F9" # Opsætning - Indstilling - Værktøjslinje #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Værktøjslinje" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Værktøjer" # Opsætning - Indstillinger - menuenpunkt Hjælpetekst #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Hjælpetekst (ballonhjælp)" # Opsætning - Indstillinger - Layout - Mappeoversigt #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Mappeoversigt" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Mappeoversigt - layout og farver" # Opsætning - Indstillinger - Taster #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ingen;Kommandolinje;Hurtig søgning;Hurtigt filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Brug venstre knap;Brug højre knap;" # Opsætning - Indstillinger - Visning #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "Øverst i fillisten;Efter mapper (hvis mapper sorteres før filer);På sorteret plads ;Nederst i fillisten" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Tilpasset dynamisk;Tilpasset til byte;Tilpasset til kilobyte;Tilpasset til megabyte;Tilpasset til gigabyte;Tilpasset til terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s er allerede tildelt følgende filtyper:" # Opsætning - Indstillinger - Plugin - Plugin XXX #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Deakt&ivér" # Opsætning - Indstillinger - Plugin - Plugin XXX #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Aktivér" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Beskrivelse" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Filnavn" # Opsætning - Indstillinger - Plugin - Plugin_WCX #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Efter filendelse" # Opsætning - Indstillinger - Plugin - Plugin_WCX #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Efter plugin" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Navn" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Sortering af WCX-plugins er kun muligt, når der vises plugins efter filendelse!" # Opsætning - Indstillinger - Visning - Kolonne #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Associeret med" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Omdøber hjælpetekst" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Søg med forskel på STORE og små bogstaver; Søg uden forskel på STORE og små &bogstaver" # Opsætning - Indstillinger - Hurtig_søgning_filtrering #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Filer;Mappe&r;Filer og &mapper" # Opsætning - Indstillinger - Hurtig søgning #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Skjul filterpanelet, n&år det ikke er valgt;Bevarer indstillingerne til n&æste session" # Indstillinger - Visning #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Ingen forskel;Brug lokale indstillinger (aA-bB-cC);Først STORE så små bogstaver (ABC-abc)" # Indstillinger - Visning #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Sorter efter navn og vis først;Sorter som filer og vis først;Sorter som filer" # Indstillinger - Visning #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabetiske, inklusive tegn med accenter;Naturlig sortering: Alfabetisk og numerisk" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Top;Bund;" # Opsætning - Indstillinger - Værktøjslinje #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparator;Inte&rn kommando;E&kster kommando;Men&u" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Hvis du vil ændre konfiguration af filtype-værktøjshjælp, skal du enten TILFØJE eller SLETTE den aktuelle redigering" # Opsætning - Indstillinger - Hjælpetekst_ballonhjælp - Tilføj #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Filtypenavn for hjælpeteksten:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" findes allerede!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Er du sikker på, at du vil slette: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Eksporteret konfiguration af værktøjshjælp-filtype" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Eksportér konfiguration af værktøjshjælp-filtype" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format, fuzzy, badformat msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Eksporten af &d elementer til fil \"%s\" er færdig." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Vælg den/de du vil eksportere" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Importér konfiguration af værktøjshjælpe-filtype" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Importen af %d elementer fra fil \"%s\" er færdig" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Vælg den fil, hvorfra konfiguration(er) af værktøjshjælpe-filtype skal importeres" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Vælg den/de du vil importere" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Indtast placering og filnavn, hvor du vil gemme konfiguration af værktøjshjælpe-filtype" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Navn på værktæjshjælpe-filtype" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Ældre DC - Kopier (x) filnavn.ext;Windows - filnavn (x).ext;Andre - filnavn(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "Bevar positionen;Anvend samme indstilling som for nye filer;Til sorteret plads" # Opsætning - Indstillinger - Plugin #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Med komplet absolut sti;Sti relativ til %COMMANDER_PATH%;Relativ til følgende" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "indeholder(tegn)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "indeholder" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(tegn)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Feltet \"%s\" blev ikke fundet" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!indeholder(tegn)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!indeholder" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(tegn)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp (regulært udtryk)" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Plugin \"%s\" blev ikke fundet" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp (regulært udtryk)" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Enheden \"%s\" blev ikke fundet for feltet \"%s\" !" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Filer: %d, mapper: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Kan ikke ændre adgangsrettigheder for \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Kan ikke ændre ejer for \"%s\"" #: ulng.rspropsfile msgid "File" msgstr "Fil" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mappe" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nævnte kanal" #: ulng.rspropssocket msgid "Socket" msgstr "Sokkel" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciel blok-enhed" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciel tegn-enhed" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolsk link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ukendt type" #: ulng.rssearchresult msgid "Search result" msgstr "Søgeresultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Søg" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<unavngivet skabelon>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "En filsøgning med DSX-plugin'et er allerede i gang.\n" "Den søgning skal afsluttes, inden en ny søgning kan startes." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "En filsøgning med WDX-plugin'et er allerede i gang.\n" "Den søgning skal afsluttes, inden en ny søgning kan startes." #: ulng.rsselectdir msgid "Select a directory" msgstr "Vælg en mappe" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" # Kommandoer - Se_aktuelle_søgeresultater #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Vælg dit vindue" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Vi&s hjælp for %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategori" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Kolonne" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Kommando" #: ulng.rssimpleworderror msgid "Error" msgstr "Fejl" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Mislykkedes" #: ulng.rssimplewordfalse msgid "False" msgstr "Falsk" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Filnavn" #: ulng.rssimplewordfiles msgid "files" msgstr "Filer" # Opsætning - Indstillinger - Genvejstaster - Tilføj_genvejstast #: ulng.rssimplewordletter msgid "Letter" msgstr "Bogstav" #: ulng.rssimplewordparameter msgid "Param" msgstr "Param" #: ulng.rssimplewordresult msgid "Result" msgstr "Resultat" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Succes!" #: ulng.rssimplewordtrue msgid "True" msgstr "Sand" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbejdsmappe" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" # Filer- Beregn_brugt_plads #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" "Total brugt plads i fil(er): %d og mappe(r): %d\n" "Størrelse: %s (= %s bytes)" # Filer- Opdel fil #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kunne ikke danne mål-mappe!" # Filer- Opdel fil #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Forkert filstørrelse-format!" # Filer- Opdel fil #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan ikke opdele fil!" # Filer- Opdel fil #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Der er mere end 100 dele! Vil du fortsætte?" # Filer - Opdel fil #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automatisk;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" # Filer- Opdel fil #: ulng.rssplitseldir msgid "Select directory:" msgstr "Vælg mappe:" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Bare et preview" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewothers msgid "Others" msgstr "Andre" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "IG" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Anmærkning" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Flad" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Begrænset" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Enkel" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Fabelagtigt" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Vidunderligt" # Opsætning - Indstillinger - Layout - Mappeoversigt_Layout og Farver #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Gevaldigt" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Vælg din mappe fra mappehistorikken" # Klik på et Favoritfaneblad #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Vælg dit Favoritfaneblad" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Vælg din kommando fra kommandolinjehistorikken" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Vælg din handling fra hovedmenuen" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Vælg din handling fra hovedværktøjslinjen" # Kommandoer - Favoritmapper #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Vælg din mappe fra Favoritmappen:" # Klik på filstien over et filvindue #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Vælg din mappe fra filhistorikken" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Vælg din fil eller din mappe" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Kunne ikke danne symlink!" #: ulng.rssyndefaulttext msgid "Default text" msgstr "Standardtekst" # Opsætning - Indstillinger - Værktøjer - Fremhævere #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Ren tekst" # Opsætning - Indstillinger - Faneblade #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ingen handling;Luk faneblad;Åbn Favoritfaneblad;Åbn menuen Faner" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Dag(e)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Time(r)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(ter)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Måned(er)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(er)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Uge(r)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "År" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Omdøb Favoritfaneblade" # Opsætning - Indstillinger - Faneblade - Favoritfaneblade - Omdøb #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Omdøb Favoritfaneblades undermenu" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Sammenligningsprogram" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fejl ved åbning af sammenligningsprogram" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fejl ved åbning af editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fejl ved åbning af terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fejl ved åbning af fremviser" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal F9" # Opsætning - Indstillinger - Hjælpetekst_ballonhjælp #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Systemstandard;1 sek;2 sek;3 sek;5 sek;10 sek;30 sek;1 min;Skjul aldrig" # Opsætning - Indstillinger - Hjælpetekst_ballonhjælp - Forsinkelse #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Kombinér DC og systemets hjælpetekst, først DC (gammel visning);Kombinér DC og systemets hjælpetekst, først systemets hjælpetekst;Vis DC-hjælpetekst, når muligt og systemets ikke er mulig;Vis kun systemets hjælpetekst" # Opsætning - Indstillinger - Fremviser #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Fremviser" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapporter venligst denne fejl i bug-tracker med en beskrivelse af, hvad du gjorde og følgende fil: %s Tryk %s for at fortsætte eller %s at afbryde programmet." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Begge vinduer, fra aktivt til inaktivt" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Begge vinduer, fra venstre til højre" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Vinduets sti" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Sætter paranteser eller noget andet omkring hvert filnavn" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Kun filnavn, ingen filendelse" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Komplet filnavn (sti+filnavn)" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hjælp med \"%\" variabler" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Anmoder brugeren om at indtaste et parameter med en foreslået standardværdi" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Venstre vindue" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Midlertidigt filnavn fra liste med filnavne" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Midlertidigt filnavn fra liste med komplette filnavne (sti+filnavn)" # Opsætning - Indstillinger - Filassociationer - Procenttegn #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Filnavne i liste i UTF-16 med BOM" # Opsætning - Indstillinger - Filassociationer - Procenttegn #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Filnavne i liste i UTF-16 med BOM inde i dobbelte anførselstegn" # Opsætning - Indstillinger - Filassociationer - Procenttegn #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Filnavne i liste i UTF-8" # Opsætning - Indstillinger - Filassociationer - Procenttegn #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Filnavne i liste i UTF-8 inde i dobbelte anførselstegn" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Midlertidigt filnavn fra liste med filnavne med relativ sti" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Kun filendelser" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Kun filnavn" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Andre muligheder..." # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Sti uden skilletegn for enden" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Fra her til enden af linjen er procentvisningen \"#\"-tegnet" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Returner procenttegn" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Fra her til enden af linjen er procentvisningen bag \"%\"-tegnet" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Sætter \"-a\" eller noget andet foran hvert navn" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Spørg bruger for parametre;Standardværdi foreslået]" # Opsætning - Indstillinger - Værktøjslinje - % #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Filnavn med relativ sti" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Højre vindue" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Komplet sti af den 2. valgte fil i højre vindue" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Vis kommandoen før udførelse" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Simpel dialog]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Viser en simpel dialog" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktivt vindue (kilde)" # Opsætning - Indstillinger - Filassociationer - % - Kun filnavn #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktivt vindue (destination)" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Filnavne vil blive citeret fra her (standard)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Kommandoer udføres i en terminal, der forbliver åben" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Stier får et skilletegn i enden" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Filnavne vil ikke blive citeret fra her" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Kommandoer udføres i en terminal, der lukkes" # Opsætning - Indstillinger - Værktøjslinje - % - Andre muligheder... #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Stier får ikke et skilletegn i enden (standard)s" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Netværk" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commanders interne fremviser" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Dårlig kvalitet" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Billedtype" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Ny størrelse" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s ikke fundet!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Blyant;Rektangel;Ellipse" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "med ekstern fremviser" # Højreklik på element - Handlinger-> #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "med intern fremviser" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Antal erstattede: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Ingen erstatning fandt sted." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.cs.po�����������������������������������������������������������0000644�0001750�0000144�00001372363�15104114162�017271� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Zdeněk Fuchs <zephycz@centrum.cz>, 2019; Based on Lukáš Novotný <lenochod@tiscali.cz>, 2016. msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2020-11-22 14:45+0100\n" "Last-Translator: Zdeněk Fuchs <zephycz@centrum.cz>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: čeština\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Poedit 2.2\n" "Language: cs\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porovnávám... %d%% (ESC pro zrušení)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Vlevo: Smazat %d soubor(ů)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Vpravo: Smazat %d soubor(ů)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Nalezených souborů: %d (Stejných: %d, Rozdílných: %d, Vlevo navíc: %d, Vpravo navíc: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Zleva doprava: Kopírovat %d soubor(ů), velikost: %s (%s B)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Zprava doleva: Kopírovat %d soubor(ů), velikost: %s (%s B)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vybrat šablonu..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Z&kontrolovat volné místo" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopírova&t atributy" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopírovat v&lastnictví" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopírovat o&právnění" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopírovat d&atum/čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Opravit odka&zy" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Zrušit pří&znak jen pro čtení" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Vyloučit prázdné složky" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Ná&sledovat odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervní prostor" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "O&věřit" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Co dělat, když nelze nastavit čas souboru, atributy, atd." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Použít šablonu souboru" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Pokud už složka existuje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Pokud už soubor existuje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Pokud nelze nastavit vlastnost" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<žádná šablona>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopírovat do schránky" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Sestavení" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domovská stránka:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revize" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Verze" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "Ob&novit" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Vyberte atributy" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "Archivovat" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Komprimovaný" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "Složka" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Šifrovaný" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Skrytý" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Jen pro čtení" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Řídký" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolický odkaz" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "Systémový" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Dočasný" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributy NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Obecné atributy" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Textově:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Benchmark" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Velikost dat: %d MB" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Hash" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Čas (ms)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Rychlost (MB/s)" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Výpočet kontrolního součtu..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Otevřít soubor po vytvoření kontrolního součtu" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "V&ytvořit samostatný kontrolní součet pro každý soubor" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Uložit soubor(y) s kontrolním součtem do:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Kontrola kontrolního součtu..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Kódování" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "P&řipojit" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Smazat" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Správce připojení" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Připojit k:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Při&dat do fronty" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "M&ožnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Ul&ožit tyto možnosti jako výchozí" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopírovat soubory" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nová fronta" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Fronta 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Fronta 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Fronta 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Fronta 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Fronta 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Uložit popis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentář souboru/složky" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "U&pravit komentář pro:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "&Kódování:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automaticky porovnat" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Binární zobrazení" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Zrušit" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopírovat doprava" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopírovat doprava" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopírovat doleva" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopírovat doleva" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Smazat" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Krok vpřed" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Krok vpřed" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vybrat &vše" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Krok zpět" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Krok zpět" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmdiffer.actfind.caption #, fuzzy msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Najít" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Najít" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Najít další" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Najít další" #: tfrmdiffer.actfindprev.caption #, fuzzy msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Najít předchozí" #: tfrmdiffer.actfindprev.hint #, fuzzy msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Najít předchozí" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Nahradit" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Nahradit" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "První rozdíl" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "První rozdíl" #: tfrmdiffer.actgotoline.caption #, fuzzy msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Přejít na řádek..." #: tfrmdiffer.actgotoline.hint #, fuzzy msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Přejít na řádek" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorovat velikost znaků" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorovat mezery" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Společný posun lišt" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Poslední rozdíl" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Poslední rozdíl" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Zobrazit rozdíly v řádku" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Další rozdíl" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Další rozdíl" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otevřít levý..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otevřít pravý..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Barvit pozadí řádku" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Předchozí rozdíl" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Předchozí rozdíl" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "Znovu načíst" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Znovu načíst" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Uložit" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Uložit" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Uložit jako..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Uložit jako..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Uložit levý" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Uložit levý" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Uložit levý jako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Uložit levý jako..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Uložit pravý" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Uložit pravý" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Uložit pravý jako..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Uložit pravý jako..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Porovnat" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódování" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódování" #: tfrmdiffer.caption msgid "Compare files" msgstr "Porovnat soubory" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Vlevo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Vpravo" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akce" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "M&ožnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Přidá novou zkratku do sekvence" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Odstraní poslední zkratku ze sekvence" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Vybere zkratku ze seznamu zbývajících volně dostupných klíčů" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Pouze pro tyto prvky" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametry (každý na zvláštní řádce):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Zkratky:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O programu" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Nastavení" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Nastavení" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopírovat" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Vyjmout" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Smazat" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Smazat" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Najít" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Najít" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Najít další" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Najít další" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Najít předchozí" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Přejít na řádek..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Vložit" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Krok vpřed" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Krok vpřed" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Nahradit" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Nahradit" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Vybrat &vše" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Vybrat vše" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Krok zpět" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Krok zpět" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zavřít" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ukončit" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Nový" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nový" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otevřít" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Otevřít" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Znovu načíst" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Uložit" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Uložit & jako..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Uložit jako" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otevřít jako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Uložit jako" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Zvýraznění syntaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Ukončení řádku" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Zrušit" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "&Rozlišovat velikost" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "H&ledat od ukazatele" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Regulární výrazy" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Pouze vybraný &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Pouze celá slova" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Možnost" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "Nahradit:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Vyhledat:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Směr" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Rozbalení souborů" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozbalit soubory včetně cesty (pokud je uložena)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Rozbalit do podsložky podle názvu archívu" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "P&řepsat existující soubory" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Do složky:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Rozbalit tyto soubory:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Heslo pro šifrované soubory:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Čekejte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Název souboru:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klikněte na Zavřít, až bude moci být odstraněn dočasný soubor!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Na panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Zobrazit vše" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuální operace:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Do:" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Povolit spustit jako program" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Vytvoření:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Spustit:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Poslední přístup:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Poslední změny:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Poslední změna stavu:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkově:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "V&lastník" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sym. odkaz na:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Název" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Hodnota" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Doplňky" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Zavřít" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Ukončit" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Odemknout" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Odemknout vše" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Odemknout" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Process ID" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Cesta pro spuštění" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Z&rušit" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Přerušit hledání a zavřít okno" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Zavřít" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "Nastavit klávesové zkratky" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Upravit" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Výsledek do panelu" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Přerušit hledání, zavřít okno a uvolnit z paměti" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Všechna ostatní \"Hledání souborů\", zrušit, zavřít a uvolnit paměť" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "Přejít k souboru" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Najít data" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Poslední hledání" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nové hledání" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Nové hledání (vymazat filtry)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Rozšířené" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Načíst nebo uložit" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Další strana" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Doplňky" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Přechozí strana" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Výsledky" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Obecné" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Hledat" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Zobrazit" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Přidat" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Smazat" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Načíst" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Uložit" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Uložit i s cestou" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Uloží se jako šablona, kterou lze využít pro další hledání. Při uložení i s cestou, je do šablony uložena i aktuálně zadaná cesta pro hledání" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Použít šablonu" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Hledání souborů" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Rozlišovat velikost" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Datum od:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dat&um do:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "V&elikost od:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Ve&likost do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "&Hledat v archivech" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Vyhledat &text" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Následovat s&ymbolické odkazy" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Hledat soubory NEobsahující text" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "N&ení starší, než:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Otevřené záložky" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Hled&at části jména souboru" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "&Regulární výrazy" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Nahradit za" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Vybrané složky a &soubory" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "R&egulární výrazy" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Čas od:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ča&s do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Po&užít vyhledávací doplněk:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "stejný obsah" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "stejný hash" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "stejný název" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Hledat duplicitní soubory:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "stejná velikost" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "Hexadecimální řetězec" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Zadejte názvy složek, které mají být vyloučeny z hledání, oddělených \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Zadejte názvy souborů, které mají být vyloučeny z hledání, oddělených \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Zadejte názvy souborů oddělených s \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Doplněk" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Hodnota" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Složky" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Soubory" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Hledat v obsahu" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atri&buty" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Kódován&í:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Vyloučit podsložky" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Vyloučit soubory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Maska souboru" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Spustit ve složce" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Prohledat posložky:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Předchozí hledání:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Akce" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Všechna ostatní hledání, zrušit, zavřít a uvolnit paměť" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Otevřít v nové záložce" #: tfrmfinddlg.mioptions.caption msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Nastavení" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odebrat ze seznamu" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Výsledek" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Zobrazit všechny nalezené položky" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Ukázat v editoru" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zobrazit v prohlížeči" #: tfrmfinddlg.miviewtab.caption msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Zobrazit" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Rozšířené" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Načíst nebo uložit" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Doplňky" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Výsledky" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Obecné" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Hledat" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Najít" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Rozlišovat velikost" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Regulární výrazy" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Hexadecimální řetězec" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Doména:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Heslo:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Jméno:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Anonymní připojení" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Připojit jako uživatel:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Vytvořit hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cíl, na který bude odkaz ukazovat" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Název odkazu" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Importovat vše" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Importovat vybrané" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Vyberte položky, které chcete importovat" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Při kliknutí na podnabídku, bude vybrána celá nabídka" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Podržte CTRL a klikejte pro vybrání vycenásebných položek" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Spojování souborů" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Uložit do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Položka" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "&Název souboru" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "Do&lů" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Dolů" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Smazat" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Nahoru" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Nahoru" #: tfrmmain.actabout.caption msgid "&About" msgstr "&O programu" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Aktivovat záložku podle indexu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Přidat název souboru do příkazového řádku" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Nové hledání..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Uložit cestu a název souboru do příkazového řádku" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopírovat cestu do příkazového řádku" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Přidat doplněk" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Benchmark" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Seznam" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Seznam" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Spočítat &obsazené místo..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Změnit složku" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Domácí složka" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Nadřazená složka" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Kořenová složka disku" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Spočítat kontrolní &součet..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "&Ověřit kontrolní součet..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Vyčistit soubor protokolu" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Vymazat okno protokolu" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Zavřít &všechny záložky" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zavřít duplicitní záložky" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Zavřít záložku" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Další příkazová řádka" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Nastavení příkazového řádku na následující příkaz v historii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Předchozí příkazová řádka" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nastavení příkazového řádku na předchozí příkaz v historii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Podrobnosti" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Podrobnosti" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porovnat pod&le obsahu" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Porovnat složky" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Porovnat složky" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Archivátory" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "Oblíbené složky" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Oblíbené záložky" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Možnosti záložek" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Klávesové zkratky" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Doplňky" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Uložit pozici" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Uložit nastavení" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Nastavit hledání" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Tlačítková lišta..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Nastavení tooltip nápovědy" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Stromová nabídka" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Barvy stromové nabídky" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Zobrazit podmenu" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Zkopírovat všechny záložky na druhou stranu" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Zkopírovat do schránky se všemi podrobnostmi" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Zkopírovat názvy včetně cest do schránky" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Zkopírovat vybrané názvy do schránky" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Kopírovat název s UNC cestou" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopírovat soubory bez dotazu na potvrzení" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Zkopírovat cestu k vybraným souborům bez oddělovače na konci" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Zkopírovat cestu k vybraným souborům" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Zkopírovat do stejného panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopírovat" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Zo&brazit obsazené místo" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Vyjmout" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Zobrazit parametry příkazu" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Smazat" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Všechna hledání, zrušit, zavřít a uvolnit paměť" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Historie procházení" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Oblíbené složky" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Vybrat příkaz a spustit ho" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Upravit" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Upravit ko&mentář..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editovat nový soubor" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Upravit cestu pole nad souborem seznamu" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zaměnit &panely" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Spustit skript" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Rozbalit soubory..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Přidružení souboru" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Spojit sou&bory..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Zobrazit &vlastnosti souboru" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Rozděl&it soubor..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Pří&mé zobrazení" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "Přímé zobrazení" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Zaměřit příkazový řádek" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Prohodit fokus" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Zaměnit levý a pravý seznam" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Fokus na strom" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Zaměnit aktuální seznam a stromové zobrazení" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Kurzor umístit na první položku" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umístit kurzor na první soubor v seznamu" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Kurzor umístit na poslední položku" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umístit kurzor na poslední soubor v seznamu" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Umístit kurzor na další složku nebo soubor" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Umístit kurzor na předchozí složku nebo soubor" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Vytvořit &hardlink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Obsah" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vodorovný režim panelů" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Klávesnice" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Seznam v levém panelu" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Sloupcové zobrazení v levé záložce" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levý &= Pravý" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Přímé zobrazení v levé záložce" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otevřít levý seznam disků" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Opačné pořadí v le&vé záložce" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Seřadit levou záložku podle &atributů" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Seřadit levou záložku podle &datumu" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "S&eřadit levou záložku podle přípony" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Seřadit levou záložku podle &názvu" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Seřadit levou záložku podle veliko&sti" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Zobrazit miniatury v levé záložce" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Načíst záložku z oblíbených" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Načíst výběr ze schrán&ky" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Načíst výběr ze souboru..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Načíst zá&ložky ze souboru" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Vytvořit složku" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Vybrat všechny soubory se stejnou příponou" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Vybrat soubory se stejným názvem jako je vybraný" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Vybrat soubory se stejným názvem a příponou jako je vybraný" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Vybrat vše ve stejném umístění" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Otočit výběr" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Vybrat všechny" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Zrušit výběr sk&upiny..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Výběr &skupiny..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Zrušit výběr všech" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizovat okno" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "Nástroj pro h&romadné přejmenování" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Síť - nové připojení..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Síť - ukončit připojení" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Síť - rychlé připojení..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nová záložka" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Načíst následující oblíbenou záložku v seznamu" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Přejít na další záložku" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Zkusit otevřít archív" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otevřít bar soubor" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otevřít složku na nové záložce" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Otevřít jednotku podle Indexu" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Otevřít &VFS seznam" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "P&rohlížeč operací" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "M&ožnosti..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Komprimovat soubory..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Nastavit pozici dělící čáry" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Vložit" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Načíst předchozí oblíbenou záložku v seznamu" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Přejít na předchozí záložku" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Rychlý filtr" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Rychlé hledání" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Panel rychlého prohlížení" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Obnovit" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Načíst uložený stav záložek" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Přesunout" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Přesunout/přejmenovat soubory bez dotazu na potvrzení" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Přejmenovat" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Přejmenovat záložku" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Uložit aktuální stav záložek" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Obnovit výběr" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&brácené pořadí" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Stručné zobrazení v pravé záložce" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Sloupcové zobrazení v pravé záložce" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Pravý &= Levý" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Přímé zobrazení v pravé záložce" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otevřít pravý seznam disků" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Opačné pořadí v pra&vé záložce" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Seřadit pravou záložku podle &atributů" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Seřadit pravou záložku podle &datumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "S&eřadit pravou záložku podle přípony" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Seřadit pravou záložku podle &názvu" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Seřadit pravou záložku podle veliko&sti" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Zobrazit miniatury v pravé záložce" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Spustit &terminál" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Uložit aktuální záložku do oblíbených" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Uložit &výběr" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Uložit vý&běr do souboru..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Uložit záložky do &souboru" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Hledat..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Zamknout všechny záložky a při změně složky vytvořit novou záložku" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Odemknout všechny záložky" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Zamknout všechny záložky" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Zamknout všechny záložky, ale dovolit změnu složky" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Změnit &atributy..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zamknout a při změně složky vytvořit novou záložku" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Odemknout tuto záložku" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zamknout tuto záložku" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Zamknout, ale dovolit změnit složku" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otevřít s pomocí přidružení nastavených v systému" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Zobrazit tlačítkovou nabídku" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Zobrazit historii příkazového řádku" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Nabídka" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "&Zobrazit skryté/systémové soubory" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Řadit podle &atributů" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Řadit podle &data" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Řadit podl&e přípony" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Řadit podle &názvu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Řadit podle veliko&sti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Otevřít seznam disků" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Povolit/zakázat použití seznamu ignorovaných souborů a složek" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Vytvořit symlink..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Synchronizovat složky..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cíl &= Zdroj" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Testovat archív(y)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatury" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Miniatury" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Přepnout režim konzoly na celou obrazovku" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Přenést složku pod kurzorem do levého okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Přenést složku pod kurzorem do pravého okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "S&tromové zobrazení" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Seřadit podle parametrů" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Zrušit výběr všech souborů se stejnou příponou" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Zrušit výběr všech souborů se stejným názvem" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Zrušit výběr všech souborů se stejným názvem a příponou" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Zrušit výběr všech ve stejném umístění" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Zobrazit" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zobrazit historii navštívených cest pro aktivní pohled" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Jít na další položku v historii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Jít na předchozí položku v historii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Zobrazit soubor protokolu" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Předchozí hledání" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Na&vštívit domovskou stránku" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Nevratně smazat" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Práce s Oblíbenými složkami a parametry" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ukončit" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Nová složka" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Odstranit" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Oblíbené složky" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Složka z pravého panelu" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Přejít do domácí složky" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Přejít do kořenové složky disku" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Přejít do nadřízené složky" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Oblíbené složky" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Složka z levého panelu" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cesta" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopírovat..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Vytvořit odkaz..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Vymazat" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skrýt" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat vše" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Přesunout..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Vytvořit symbolický odkaz..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti záložky" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Obnovit" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Příkazy" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "N&astavení" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Oblíbené" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Soubor" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Výběr" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Síť" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Zobrazit" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "M&ožnosti záložky" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Záložky" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Smazat" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Upravit" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Vyberte interní příkaz" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Výchozí řazení" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Výchozí řazení" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Jako výchozí, vybrat všechny kategorie" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Vybráno:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorie:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Název příkazu:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtr:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Rada:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Klávesová zkratka:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_název" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "Kategorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "Nápověda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Rada" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "Klávesová zkratka" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Přid&at" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "&Nápověda" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definovat..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Rozlišovat velikost" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Ignorovat diakritiku" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Atri&buty:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Maska vstupu:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ne&bo vyberte předdefinovaný typ výběru:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvoření nové složky" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Nový název složky:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nová velikost" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Výška :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kvalita komprese Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Šířka :" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Výška" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šířka" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Přípona" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Název souboru" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Vymazat" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Vymazat" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Zavřít" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Nastavení" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Datum" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Smazat" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Výběr z přednastavení" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Upravit jména..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Upravit aktuální nové názvy..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Přípona" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Přípona" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Upravit" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Menu pro výběr obecných cest" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Nahrát poslední nastavení" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Načíst jména ze souboru..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Nahrát nastavení podle Jména nebo Indexu" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Nahrát nastavení 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Nahrát nastavení 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Nahrát nastavení 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Nahrát nastavení 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Nahrát nastavení 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Nahrát nastavení 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Nahrát nastavení 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Nahrát nastavení 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Nahrát nastavení 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Název souboru" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Název souboru" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Doplňky" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Doplňky" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Obnovit vše" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Uložit" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Uložit jako..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Zobrazit menu nastavení" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Seřadit" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Čas" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Zobrazit log soubor" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Hromadné přejmenování" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Rozlišovat velikost" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "Logovat změny" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Přidat na konec" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "&Regulární výrazy" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Po&užít náhradu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhledat a Nahradit" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Předvolby" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Přípona" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Hledat" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Název souboru" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Nahradit" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Č&íslovat od" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Šířka" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Akce" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "&Upravit" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Starý název" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Nový název" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Cesta" #: tfrmmultirenamewait.caption msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Klikněte OK až uzavřete editor pro načtení změn jmen!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Vybrat aplikaci" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Vlastní příkaz" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Uložit přidružení" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastavit zvolenou aplikaci jako výchozí akci" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Typ souboru, který se má otevřít: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Několik názvů souborů" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Více URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jeden název souboru" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jeden URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Použít" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Nápověda" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Konfigurace - možnosti nastavení" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Prosím, zvolte jednu z podstránek, tato stránka neobsahuje žádné nastavení." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Kopírovat" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "&Smazat" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Ostatní..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Identifikátor používaný cm_OpenArchive pro rozpoznání archívu podle obsahu bez ohledu na příponu souboru:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Možnosti:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Formát příkazového řádku:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "P&oužívat" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "La&dící režim" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "U&kázat výstup konzoly" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Použít pouze jméno archívu bez přípony" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Unix atributy" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Unix oddělovač \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows atributy" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Windows oddělovač \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Parametry pro př&idání:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arch&ivátor:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Smazat:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Po&pis:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "P&řípona:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Parametry pro rozbale&ní:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Rozbalit bez cesty:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Pozice ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "ID:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Rozsah hledání ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Parametry pro &výpis:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Archivátory:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Konec &výpisu (volitelné):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Form&át výpisu:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Začáte&k výpisu (volitelné):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Dotazovací řetězec hesla:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Vytvořit samorozbalovací archív:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Test:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Použít interní nastavení" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Zakázat vše" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Zrušit změny" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Povolit vše" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Importovat..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Seřadit názvy" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Rozšířené" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Obecné" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Při změně &velikosti, data, nebo atributů" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pro tyto &cesty a jejich podsložky:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Při vytvoření, smazání, nebo přejmenování &souborů" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Když je aplikace na &pozadí" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Zakázat automatické obnovení" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Obnovit seznam souborů" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Vž&dy zobrazit ikonu v oznamovací oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automaticky &skrýt nepřipojená zařízení" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Přesunout do oznamo&vací oblasti pokud je minimalizováno" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "P&ovolit pouze jednu kopii DC ve stejný čas" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Zde můžete zadat jednu nebo více jednotek nebo připojovacích bodů oddělených \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Seznam zakázaných disků" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Velikost sloupce" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Zobrazit přípony souborů" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "zarovnat na konec slou&pce" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "hned za názvem soubo&ru" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automaticky" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Počet pevných sloupců" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Pevná šířka sloupce" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Gradientní přechod" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Binární zobrazení" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Text:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Pozadí 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Uka&zatel barvy pozadí:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "U&kazatel barvy popředí:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Poslední změna:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Poslední změna:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Úspěšný:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Oříznout &text na šířku sloupce" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "Roztáhnout šířku sloupce, když se do něj text nevleze" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Vodorovné čáry" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Svislé čáry" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&utomaticky naplnit sloupce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Zobrazit mřížku" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatická velikost sloupců" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Automatická ve&likost sloupce:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Hi&storie příkazového řádku" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "&Historie složek" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "&Historie použitých masek" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Záložky" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Ul&ožit nastavení" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Historie hle&dání/nahrazení" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Stav hlavního okna" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Složky" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Umístění konfiguračních souborů" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Uložit při ukončení" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Řazení pořadí levého konfiguračního stromu" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Stav stromu při vstupu do konfigurace" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Nastavit na příkazové řádce" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Zvýraznění:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Sady ikon:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Cache pro náhledy:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Složka p&rogramu (přenosná verze)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "&Domácí složka uživatele" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Aplikovat úpravy na všech sloupcích" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Smazat" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Přejít na globální nastavení" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Nový" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Další" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Předchozí" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Obnoví nastavení na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Uložit jako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Uložit" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Barva podle typu souboru" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Provedené změny aplikovat na všechny sloupce" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Obecné" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Okraj kurzoru" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Inverzní kurzor" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Jiné barvy v neaktivním panelu" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Inverzní výběr" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Nastavit jiné písmo a barvu" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Pozadí:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadí 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Náhled sloupců:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Jméno aktuálního sloupce]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Barva kurzoru:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "Systém:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Písmo:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Barva písma:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Neaktivní kurzor:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Neaktivní výběr:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Barva vybraných:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Náhled nového nastavení. Můžete v něm pohybovat kurzorem, vybírat soubory a okamžitě uvidíte nový vzhled." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Nastavení pro sloupec:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Přidat sloupec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Umístění záložky v rámu po porovnání:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Přidat aktuální složku z právě vybraného panelu" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Přidat aktuální složky z aktivního i neaktivního panelu" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Přidat složku výběrem ze složek na disku" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgid "Add a copy of the selected entry" msgstr "Přidat kopii vybrané položky" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Přidat vybrané složky z aktivního panelu" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgid "Add a separator" msgstr "Přidat oddělovač" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Přidat podnabídku" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgid "Add directory I will type" msgstr "Přidat prázdnou složku" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Sbalit vše" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Sbalit položku" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Vyjmout označené položky" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Smazat vše" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Smazat vybranou položku" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Smazat podnabídku i všechny její prvky" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Smazat jen podnabídku, prvky z ní nechat" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Rozbalit položku" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Fokus na strom" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "První položka" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Poslední položka" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Další položka" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Předchozí položka" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Přidat složku z právě aktivního panelu" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Přidat aktuální složky z aktivního i neaktivního panelu" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Přidat složku výběrem ze složek na disku" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Přidat kopii vybrané položky" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Přidat vybrané složky z aktivního panelu" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Vložit oddělovač" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Vložit podnabídku" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgid "Insert directory I will type" msgstr "Vložit prázdnou složku" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Další" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Předchozí" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Otevřít všechny položky" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Vložit vyjmuté položky" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Najít && nahradit v cestě" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Najít && nahradit v cestě i cílové složce" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Najít && nahradit v cílové složce" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Zadat cestu" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Zadat cíl" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "Přidat..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "Zálohovat..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Smazat..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Exportovat do..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "Importovat..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "Vložit..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "Různé..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Funkce pro výběr cesty" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Seřadit..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "Při přidání složky vyplnit i cíl" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Rozbalit všechny podnabídky" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Zobrazit pouze ověřenou proměnnou prostředí" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "V roletovém menu, zobrazit [také cestu]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Název, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Název, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Oblíbené složky (lze přeskupit přetáhnutím)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Další možnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Název:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Cesta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "Cesta neakt. panel:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "aktuálně vybranou úroveň" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Ověřit správnost všech cest" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Ověřit správnost všech cest a cílových složek" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "do souboru Oblíbených složek (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - nechat existující" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - smazat existující" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Nastavit umístění Total Commanderu" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Nastavit umístění Total Commanderu" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "TestovacíNabídkaOblíbenýchSložek" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "ze souboru Oblíbených složek (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "z Total Commanderu (\"wincmd.ini\")" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "Navigovat..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "načíst zálohu" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "vytvořit zálohu" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Najít a nahradit..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "všechny položky" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "pouze jednu skupinu položek" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "první úroveň ve vybrané podnabídce" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "všechno ve vybrané podnabídce" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resultin&g menu" msgstr "Zobrazit náhled" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Zadat cestu" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Zadat cíl" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Umístění po přidání" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Použít toto nastavení na existující položky" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Zdroj" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Cíl" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Nastavení cest" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Formát cesty při přidávání položky:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Uplatnit na:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta bude relativní k:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Vždy se zeptat, který z podporovaných formátů se má použít" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Při ukládání textu Unicode ho uloží ve formátu UTF8 (jinak v UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Po upuštění textu, generovat název souboru automaticky (jinak vyzve uživatele)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Zobrazit potvrzovací dialog po upuštění" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Když přetáhnete text na záložky:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Umístěte nejžádanější formát v seznamu nahoru (použijte přetáhnutí):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(v případě, že nejžádanější není přítomen, vezmeme druhý formát atd.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(pokud nastane z nějakého důvodu problém s aplikací, zkuste zrušit zaškrtnutí)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Zobrazit &souborový systém" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Zobrazit vol&né místo" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Zobrazit &štítek" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Seznam disků" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Automatické odsazení" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Po stisku <ENTER> nastaví kurzor na stejnou pozici na jaké začíná text předchozího řádku" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Pravý okraj:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Nastavení kurzoru v prázdném řádku" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Povolit v prázdném řádku vložit kliknutím myši kurzor na jakoukoliv pozici" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Zobrazit speciální znaky" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Zobrazit speciální znaky pro mezery a tabulátory" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Smart TAB" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Při použití klávesy <Tab>, kurzor skočí na pozici kde začíná text na předchozím řádku" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Odsazení bloku textu" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Při použití klávesy <Tab> provede odsazení a celého vybraného bloku textu. Klávesa <Shift+Tab> provede zmenšení odsazení" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Použít mezery místo TAB" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Při psaní nahrazuje TAB za určitý počet mezer" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Smazat zbytečné mezery" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Automaticky odstranit zbytečné mezery, platí pouze pro upravené řádky" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Volba \"Smart Tab\" má přednost před klasickým tabelátorem" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti interního editoru" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Tab mezery:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Volba \"Smart Tab\" má přednost před klasickým tabelátorem" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Po&zadí" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Po&zadí" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Obnovit" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Uložit" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributy prvku" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Text" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Text" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Text-značka" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Použít (a upravit) &globální systém nastavení" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Použít &místní systém nastavení" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Tučný" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Kurzíva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Vyškrtnout" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podtrhnout" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Přidat..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Smazat..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importovat/Exportovat" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Vložit..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Seřadit..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Žádná" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Vždy rozbalit strom" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Levý" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Pravý" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Seznam oblíbených záložek (lze přeskupit přetáhnutím)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Další možnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Co kam obnovit pro vybranou položku:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Zachovat existující záložku:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Uložit historii adresáře:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Záložky uložené vlevo budou obnoveny do:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Záložky uložené vpravo budou obnoveny do:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "oddělovač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Přidat oddělovač" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podnabídku" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Přidat podnabídku" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Sbalit vše" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "pouze aktuální úroveň z vybraných položek" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Vyjmout" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "vymazat vše" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podnabídku a všechny její prvky" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "jen podnabídky, prvky zůstanou" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "vybranou položku" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Smazat vybranou položku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportovat zvolené do starších souborů .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavoriteTabsTestMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importovat starší .tab soubor(y) podle výchozího nastavení" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovat starší .tab soubor(y) na vybranou pozici" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovat starší .tab soubor(y) na vybranou pozici" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importovat starší .tab soubor(y) na vybranou pozici v podnabídce" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Vložit oddělovač" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Vložit podnabídku" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otevřít všechny položky" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Vložit" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "všechny položky" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "pouze jednu skupinu položek" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Seřadit pouze jednu skupinu položek" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "první úroveň ve vybrané podnabídce" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "všechno ve vybrané podnabídce" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Zobrazit náhled nabídky" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Přidat" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "&Přidat" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Klonovat" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Vyberte vnitřní příkaz" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Dolů" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Upravit" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Vložit" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Vložit" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Sma&zat" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "Sm&azat" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Př&ejmenovat" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Výběr z nadefinovaných proměnných" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Nahoru" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Výchozí cesta příkazu. Nikdy tento řetězec nevkládejte do uvozovek." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Název akce. Není nikdy předán do systému, je to jen symbolické jméno vybrané od vás, pro vás" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Parametry přidané k příkazu. Pokud jsou v nich nějaké názvy s mezerami, uveďte je do uvozovek." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Příkaz k vykonání. Nikdy ho nedávejte do uvozovek." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Popis akce:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Akce" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Přípony" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Může být seřazeno přetáhnutím" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Typy souborů" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Akce mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Přípony mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Typy souborů mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "Název akce:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Příkaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&y:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Výchozí cest&a:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Vlastní s..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Vlastní" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Upravit" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Otevřít v editoru" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Upravit s..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Získat výstup příkazu" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Otevřít s vnitřním editorem" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Otevřít s vnitřním prohlížečem" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Otevřít s..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Spustit v terminálu" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Zobrazit" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Otevřít v prohlížeči" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Zobrazit s..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klikni pro změnu ikony!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Použít toto nastavení na existující položky" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "Spustit přes příkazový řádek" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Rozšířená místní nabídka" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfigurační soubor přidružení" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Nabídnout přidání přidružení souboru, pokud již není zahrnutý" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Při přidružení souboru, nabídne přidat aktuální vybraný soubor, pokud již není zahrnut v seznamu nakonfigurovaných typů souboru" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "Spustit přes terminál a zavřít" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "Spustit přes terminál a ponechat otevřený" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Příkazy" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Výchozí cesta" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Rozšířené položky:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Nastavení cest" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Formát:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Uplatnit na:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta bude relativní k:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Zobrazit potvrzovací okno pro:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopí&rovat operaci" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Smazat operaci" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Odstra&nit do koše (klávesa Shift převrací toto nastavení)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "V&yhodit operaci do koše" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Z&rušit příznak jen pro čtení" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Přesunout operaci" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Zpracovat komentáře složek/souborů" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Při přejmenování vybrat pouze název &souboru (bez přípony)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Zobra&zit výběr záložky v dialogu kopírovat/přesunout" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "P&řeskočit chyby a zapsat je do okna protokolu" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Ověření kontrolního součtu" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Provádění operací" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Uživatelské rozhraní" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Velikost vyrovnávací paměti pro operace se soubory (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Velikost vyrovnávací paměti pro výpočet &hash (v KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Zobrazit pokrok v operacích &zpočátku v" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Styl stejného názvu souboru u automatického přejmenování:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Počet nevratně mazacích průchodů:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Původní nastavení" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Barva podle typu souboru" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Inverzní kurzor" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Jiné barvy v neaktivním panelu" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Inverzní výběr" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Okraj kurzoru" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Poz&adí:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Poz&adí 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "B&arva kurzoru:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Te&xt kurzoru:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Neaktivní kurzor:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Neaktivní výběr:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "Jas neaktivního panelu" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "&Barva vybraných:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Barva písma:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Níže je náhled. Můžeme pohybovat kurzorem a vybrat soubory, a okamžitě získáme aktuální vzhled podle různých nastavení." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "B&arva písma:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Při spuštění hledání souboru, vymazat filtr souborové masky" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Hledat část jména souboru" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Zobrazit hlavní nabídku v \"Hledat soubory\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Hledání textu v souborech" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Hledání souborů" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Aktuální filtry s tlačítkem \"Nové hledání\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Výchozí šablona vyhledávání:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Použít mapování paměti pro hledání te&xtu v souborech" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Použit proud pro hledání textu v souborech" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Vý&chozí" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formátování" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Vlastní zkratky velikostí souboru:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Řazení" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "Byte:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "R&ozlišovat velikost:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nesprávný formát" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Formát data a času:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formát veli&kosti souboru:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Gigabyte:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Kilobyte:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "Megab&yte:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Vložit nové soubory:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "Operace:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Řazení a&dresářů:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metoda řazení:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Terabyte:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Přesun aktualizovaných souborů:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Přid&at" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Nápověda" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Umožnit &přechod do nadřazené složky, poklikáním na prázdnou část prohlížení souboru" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "Nevklá&dat seznam souborů, dokud se karta neaktivuje" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Názvy složek v hranatých závorkách" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Zvý&raznit nové a aktualizované soubory" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Povoli&t při dvojkliknutí na název přejmenování" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Načíst &seznam souborů v odděleném vlákně" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Načíst ikony p&o seznam souborů" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Zobrazit s&ystémové a skryté soubory" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Při výběru souboru <mezerníkem> posunout kurzor dolů na další soubor, jako při výběru klávesou <Insert>" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Styl filtrování Windows (při výběru souborů \"*.*\" také vybírá soubory bez přípony, atd.)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Vždy použít samostatný atributový filtr v dialogovém okně masky" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "Výběr položek" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "Výchozí hodnota atributové masky:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "V&ymazat" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablony..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Barvy typů souborů (lze seřadit přetáhnutím)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributy kategorií:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Ba&rva kategorie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Název kategorie:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Písmo" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Přidat z&kratku" #: tfrmoptionshotkeys.actcopy.caption msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Kopírovat" #: tfrmoptionshotkeys.actdelete.caption msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Odstranit" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "&Odstranit zkratku" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "&Upravit zkratku" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Další kategorie" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Zobrazit popup nabídku souboru" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Předchozí kategorie" #: tfrmoptionshotkeys.actrename.caption msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Obnovit výchozí DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Uložit nyní" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Seřadit podle názvu příkazu" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Seřadit podle zkratky (seskupeno)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Seřadit podle zkratky (jedna na řádek)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Filtr" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "K&ategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "Př&íkazy:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "&Soubory zástupců:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Seřadi&t:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Kategorie" #: tfrmoptionshotkeys.micommands.caption msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Příkaz" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Seřadit" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Příkaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Klávesové zkratky" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Popis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Klávesová zkratka" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametry" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Prvek" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pro tyto &cesty a jejich podsložky:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Zobrazit ikony pro akce v &nabídkách" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Zobrazit ikony na tlačítkách" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Zobrazit p&řekryvné i&kony, např. pro odkazy" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "Zašedit skryté soubory (pomalé)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Zakázat speciální ikony" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " Velikost ikon " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Sada ikon" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Zobrazit ikony" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr " Zobrazit ikony nalevo od názvu souboru " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Panel disků:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Panel souborů:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "V&še" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Všechny přidružení + &EXE/LNK (pomalé)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "Bez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Pouze &standardní ikony" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "P&řidat vybrané názvy" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Přidat vybrané názvy včetně cesty" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "Nezobrazovat následující soubory a složky:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "Uložit do:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Šip&ky vlevo a vpravo mění adresář (jako pohyb v Lynxu)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Psaní" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+P&ísmena:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+Pís&mena:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Písmena:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Plochá tlačítka" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Ploché &rozhraní" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Zobrazit ukazatel volného místa" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Zobrazit okno protokol&u" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Zobrazovat panel operací na pozadí" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Zobrazovat běžný průběh v liště nabídky" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Zobrazit příkazový řá&dek" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Zobrazit aktuální adresá&ř" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Zobrazit &tlačítka disků" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Zobrazit štítek vol&ného místa" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Zobrazit tlačí&tko seznamu disků" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Zobrazit funkční &tlačítka" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Zobrazit &hlavní nabídku" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Zobrazit &tlačítkovou lištu" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Krátce vypsat &štítek volného místa" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Zobrazit &stavový řádek" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Z&obrazit záhlaví tabulátoru" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Zobrazit &záložky adresářů" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Zobrazit okno te&rminálu" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zobrazit 2 seznamy disků (pe&vná šířka, nad souborovými okny)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Zobrazit prostřední nabídku" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " Vzhled obrazovky " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Zobrazí obsah souboru s protokolem" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Název souboru bude obsahovat datum" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "&Komprimovat/Rozbalit" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Spuštění externího příkazového řádku" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Kopírování/přesun/vytvoření odkazu/s&ymbolický odkaz" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Tvor&ba/Mazání adresářů" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Zaznamenávat &chyby" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "V&ytvořit soubor protokolu:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Maximální počet log souborů" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "Protokol &informačních zpráv" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Spuštění/vypnutí" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Protokol &dokončených operací" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "&Doplňky souborového systému" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Protokol souborových operací" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Protokol operací" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stav operace" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Odstranit miniatury už existujících souborů" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Zobrazit obsah konfiguračního souboru" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "Vytvořit nový s kódováním:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Vždy &jít do kořenového adresáře při výměně disků" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Zobrazit &varovné zprávy (pouze tlačítko \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Uložit miniatury ve vyrovnávací paměti" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniatury" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Komentáře souboru" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Exportování/importování TC:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "Výchozí kódování:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurační soubor:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Spouštění TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Výstupní cesta nástrojové lišty:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixelů" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Velikost náhledů:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Výběr myší" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Označení nebude následovat kurzor myši" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "Kliknutím na ikonu" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Otevřít s" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rolování" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Výběr" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Režim:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Dvojklik" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Řádek po řádku" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Řádek po řádku &s posunem kurzoru" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stránka po stránce" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Jeden klik (otevře soubor/složku)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Jeden klik (otevře složku, dvojklik soubor)" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Zobrazit log soubor s protokolem" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Individuální složka na každý den" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Logovat názvy souborů s i cestou" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Zobrazit horní menu v okně" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Způsob logování" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Nahradit chybné znaky v názvu znakem" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Dávat do jednoho log souboru" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "Podle nastavení v okně" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Uložení nastavení po zavření okna" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Nastavení po otevření okna" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Kon&figurovat" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "P&ovolit" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Smazat" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "Upravit" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Popis" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Vyhle&dávací doplňky umožňují použití při hledání alternativních vyhledávacích algoritmů nebo externích nástrojů (např. \"najít \", atd.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Použít toto nastavení na existující položky" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Po přidání nového doplňku automaticky zobrazit okno s nastavením vlastností" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Nastavení:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Lua knihovna:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta bude relativní k:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Styl názvu po přidání nového doplňku:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Komp&rimační doplňky pro práci s archívy." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Obsahové dop&lňky umožňují zobrazit rozšířené informace jako jsou MP3 značky nebo atributy obrázků v seznamu souborů, nebo je používat při vyhledávání a s nástrojem hromadného přejmenování" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Doplňky sou&borových systémů umožní přístup na běžně nedostupná média jako jsou například externí zařízení Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Zobra&zovací doplňky umožňují prohlížení souborů jako jsou například obrázky, databáze a podobně v prohlížeči (F3, nebo Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktivní" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Název souboru" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "&Začátek (název musí začínat zadaným znakem)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "&Konec (poslední znak před . musí odpovídat zadanému)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Odpovídá přesně jménu" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Hledat znaky" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Hledání těchto položek" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Neměnit přejmenovaný název pokud odemkneme záložku" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktivovat cílový &panel při kliknutí na jeho libovolnou záložku" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "&Zobrazit záložku, i když bude pouze jedna" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zavřít stejné záložky při ukončování aplikace" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Potvrzovat zavření všech záložek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potvrzovat zavření zamknuté záložky" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Omezit šířku záložky na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "U zamknuté záložky zobrazit znak *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "&Záložky na více řádků" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Nahoru otevře novou záložku na pozadí" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "&Novou záložku otevřít vedle aktuální" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Znovu použít existující záložku, pokud je to možné" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Na zálož&kách i tlačítko zavřít" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Vždy ukazovat písmeno jednotky v titulku záložky" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Záhlaví záložek" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "znaky" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Akce při dvojkliku na záložku:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Pozice zá&ložek" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Žádná" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Levý" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Pravý" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Jít na konfiguraci oblíbených záložek po znovuuložení" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Jít na konfiguraci oblíbených záložek po uložení nové" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Povolit další možnosti oblíbených záložek (volba cílové strany při obnově, atd.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Další možnosti pro ukládání nových oblíbených záložek:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Záhlaví záložek adresářů" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Při obnově záložek, zachovat stávající záložky:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Záložky uložené vlevo budou obnoveny:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Záložky uložené vpravo budou obnoveny:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Ukládat historii složek do Oblíbených záložek:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Výchozí umístění v menu při ukládání nové oblíbené záložky:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zde za normálních okolností znovu předloží příkaz, který chcete spustit v terminálu" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zde za normálních okolností znovu předloží příkaz, který chcete spustit v terminálu" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Příkaz pouze pro spuštění terminálu:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Příkaz pro spuštění v terminálu a terminál se zavře:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Příkaz pro spuštění v terminálu a terminál zůstane otevřený:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "K&lonovat tlačítko" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Upravit kláveso&vou zkratku" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "&Přidat nové tlačítko" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Vybrat" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.BTNOTHER.CAPTION" msgid "Other..." msgstr "Ostatní..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Odstranit kláveso&vou zkratku" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Navrhnout" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC navrhne popisek založený na typu tlačítka, příkazu a parametru" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Plochá tlačítka" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Oznámit chyby a příkazy" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "Zobrazit popisky" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Zadejte parametry příkazů, každý na samostatném řádku. Stisknutím klávesy F1 zobrazíte nápovědu k parametrům." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Vzhled" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "&Velikost lišty:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Příka&z" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&y:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Nápověda" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Klávesová zkratka:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Ik&ona:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Ve&likost ikony:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Pří&kaz:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Parametry:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Výchozí cest&a:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Styl:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "ToolTip:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Přidat nástrojovou lištu se VŠEMI příkazy DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "externí příkaz" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "vnitřní příkaz" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "oddělovač" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "podnabídka nástrojové lišty" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Zálohovat..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuální nástrojovou lištu..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - nechat existující" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - smazat existující" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Horní nástrojovou lištu..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Uložit zálohu nástrojové lišty" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - nechat existující" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do Total Commanderu (\"wincmd.ini\") - smazat existující" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "za aktuálně vybraný" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "na začátek" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "na konec" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "před aktuálně vybraný" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importovat..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovit zálohu nástrojové lišty" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "z souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z jednoho .BAR souboru od TC..." #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z Total Commanderu (\"wincmd.ini\")" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "za aktuálně vybraný" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "na začátek" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "na konec" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "před aktuálně vybraný" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Vyhledat a nahradit..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "za aktuálně vybraný" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "na začátek" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "na konec" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "před aktuálně vybraný" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "ve všech výše uvedených ..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "ve všech příkazech..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "ve všech názvech ikon..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "ve všech parametrech..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "ve všech spouštěcích cestách..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "za aktuálně vybraný" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "na začátek" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "na konec" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "před aktuálně vybraný" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Oddělovač" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Místo" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačítka" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Použít toto nastavení na existující položky" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Příkazy" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Ikony" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Výchozí cesta" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Nastavení cest" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Uplatnit na:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Cesta bude relativní k:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Formát:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Po vykonání programu ponechat okno terminálu otevřené" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Vykonat v terminálu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Použít externí program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "D&oplňující parametry" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Cesta programu k vykonání" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Kopírovat" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "V&ymazat" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablona..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Ostatní..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Nastavení pro vybranou kategorii:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Obecné nastavení:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Zobrazovat u souborů tooltip informace" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Obsah tooltipu:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Typy souborů:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Délka zobrazení:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Způsob zobrazení:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "Kategorie:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Zrušit změny" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Importovat..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Seřadit kategorie" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Dvojklikem na horní pruh panelu" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Použitím klávesové zkratky" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Dvojklik provede výběr a zavření okna" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Použitím klávesové zkratky" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Dvojklikem na záložku (pokud je to u ní nastaveno)" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Klávesová zkratka provede výběr a zavření okna" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Klik myší provede výběr a zavření okna" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "V příkazovém řádku" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Použitím klávesové zkratky" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "V aktivním panelu" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Chování při výběru:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Volby pro stromové nabídky:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Kde zobrazit stromovou nabídku:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*POZNÁMKA: Volby jako rozlišování velikosti písmen, ignorování diakritiky, se ukládají samostatně při každém použití a přenáší se do dalšího." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "Pro oblíbené složky:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "Pro oblíbené záložky:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "Pro historii prohlížení:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Použít a zobrazit klávesové zkratky pro výběr položek" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Font" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Volby rozvržení a barev:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Barva pozadí:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Barva kurzoru:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Barva nalezeného textu:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Barva nalezeného textu pod kurzorem:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Barva normálního textu:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Barva normálního textu pod kurzorem:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Náhled stromové nabídky:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Barva vedlejšího textu:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Barva vedlejšího textu pod kurzorem:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Barva zkratky:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Barva zkratky pod kurzorem:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Barva nevybraného textu:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Barva nevybraného textu pod kurzorem:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Změňte barvu vlevo a uvidíte zde náhled toho jak budou vypadat stromové nabídky se vzorem." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Počet sloupců v prohlížeči knih" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Nastavit..." #: tfrmpackdlg.caption msgid "Pack files" msgstr "Zkomprimovat soubory" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Vytvořit samostatný archív pro každý vybraný soubor/složku" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbalovací archív" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Nastavit heslo" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Pře&sunout do archívu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Dělený archív na více médií" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "N&ejdříve vložit do TAR archívu" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Uložit soubory včetně cesty" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Zkomprimovat do archívu:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Komprimátor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Rozbalit &vše a spustit" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Rozbalit a spustit" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Vlastnosti komprimovaného souboru" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributy:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimační poměr:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metoda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Původní velikost:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Soubor:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Zkomprimovaná velikost:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Komprimátor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Nastavení tisku" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Okraje (mm)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "Dolní:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "Levý:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "Pravý:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "Horní:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zavřít panel filtru" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Zadejte text, který chcete vyhledat nebo filtrovat podle" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Rozlišovat velikost" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Složky" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Soubory" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Srovnání začíná" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Srovnání končí" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Filtr" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Přepnout mezi hledaním nebo filtrováním" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Přidat pravidlo" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Zrušit pravidlo" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Použít doplňky, v kombinaci s:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Doplněk" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Pole" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Operátor" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Hodnota" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (všechny shody)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (některé shody)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Použít" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Zrušit" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Šablony..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Šablony..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Vybrat duplicitní soubory" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "Nechat z každé skupiny poslední soubor neoznačený:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "Zrušit výběr podle názvu/přípony:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Vybrat podle názvu/přípony:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušit" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "Oddělovač" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Od" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Výsledek:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "Výběr složek pro vložení (můžete vybrat i víc než jednu)" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Konec" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Začátek" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušit" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "První od" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Poslední od" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Rozsah" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Výsledek:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Vyberte znaky k vložení:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[První:Poslední]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[První,Délka]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "Konec" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "Začátek" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "Konec" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "Začátek" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Změnit atributy" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Archivovat" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Vytvoření:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Skrytý" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Posledního otevření:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Poslední změna:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Jen pro čtení" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Včetně souborů v podsložkách" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Systémový" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Datum a čas" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(šedá pole znamenají nezměněné hodnoty)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(šedá pole znamenají nezměněné hodnoty)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkově:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Seřadit" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Zrušit" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "OK" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Tažením položky můžete upravit její pozici" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmsplitter.caption msgid "Splitter" msgstr "Dělení souborů" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Vyžadovat kontrolní soubor CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Velikost a počet částí" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Cílový adresář:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Počet částí" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajtů" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Gigabajtů" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Kilobajtů" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Megabajtů" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Sestavení" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operační systém" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revize" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Verze" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Vytvořit symbolický odkaz" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Použít relativní cestu" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cíl, na který bude odkaz ukazovat" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Název odkazu" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Smazat na obou stranách" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Smazat levý" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Smazat pravý" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Zrušit výběr" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Výchozí směr kopírování" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Směr kopírování ->(zleva doprava)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Otočit směr kopírování" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Směr kopírování <- (zprava doleva)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Vybrat pro smazání <-> (oba)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Vybrat pro smazání <- (vlevo)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Označit pro výmaz -> (vpravo)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zavřít" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Šablony..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizovat" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizovat složky" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymetricky" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "podle obsahu" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorovat datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "pouze vybrané" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podsložky" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Zobrazit:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Název" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Název" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(v hlavním okně)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Zobrazit levý" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Zobrazit pravý" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "stejné" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "samostatné" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klikněte prosím pro spuštění na \"Porovnat\"" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synchronizovat" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potvrzovat přepsání" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Stromová nabídky" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Oblíbená složka:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Rozlišovat velikost písmen" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Sbalit" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Rozbalit" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Nerozlišovat diakritiku" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Nerozlišovat velikost písmen" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Rozlišovat diakritiku" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Nezobrazovat podvětve" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Zobrazit podvětve" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Zavřít stromovou nabídku" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "Nastavení stromové nabídky" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "Nastavení barev stromové nabídky" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "P&řidat nový" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Z&měnit" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Vý&chozí" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Funkce pro výběr cesty" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Odstranit" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Vlastnosti doplňku" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Zj&istí typ archívu podle obsahu" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Může ma&zat soubory" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Po&dporuje šifrování" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Zobra&zen jako normální soubory (skrýt ikonu komprimátoru)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podporuje kom&primaci v paměti" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Může &měnit stávající archívy" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Archiv může obsahovat více souborů" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Může vytvářet nové arch&ívy" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "P&odporuje okno s možnostmi" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Umožňuje vyhledáván&í textu v archívu" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "&Popis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etekovaný text:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "&Přípona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Příznaky:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Název:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Doplněk:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Doplněk:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "O prohlížeči..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zobrazit zprávu o programu" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Auto obnova" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Kódování" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopírovat soubor" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopírovat soubor" #: tfrmviewer.actcopytoclipboard.caption msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Kopírovat" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Kopírovat s formátem" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Vymazat soubor" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Vymazat soubor" #: tfrmviewer.actexitviewer.caption msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Konec" #: tfrmviewer.actfind.caption msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Najít" #: tfrmviewer.actfindnext.caption msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Najít další" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "Najít předchozí" #: tfrmviewer.actfullscreen.caption msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Přejít na řádek..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Přejít na řádek" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Střed" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "Další" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Načíst další soubor" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "Předchozí" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Načíst předchozí soubor" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Zrcadlit vodorovně" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Zrcadlit" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Zrcadlit svisle" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Přesunout soubor" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Přesunout soubor" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Miniatury souborů" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "Tisk..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "Nastavení tisku..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Znovu načíst" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Znovu načíst aktuální soubor" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Otočit o 180 stupňů" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Otočit o -90 stupňů" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Otočit o +90 stupňů" #: tfrmviewer.actsave.caption msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Uložit" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Uložit jako..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Uložit soubor jako..." #: tfrmviewer.actscreenshot.caption msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Snímek obrazovky" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Prodleva 3 sek." #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Prodleva 5 sek." #: tfrmviewer.actselectall.caption msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Vybrat vše" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Binárně (pevná šířka řádku)" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Zobrazit jako &knížku" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Dekadicky" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Hexadecimálně" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Pouze text" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Zalomit text" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Zobrazit text kurzor" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Obrázek" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Doplněk" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Přizpůsobit" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Roztáhnout obrázek" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Přizpůsobit pouze velké" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Krok zpět" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Krok zpět" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Zvětšení" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Přiblížit" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Přiblížit" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Oddálit" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Oddálit" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Oříznout" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Exportovat Frame" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýraznění" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Další Frame" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Kreslit" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Předchozí Frame" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Změnit velikost" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Prohlídka" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Prohlížeč" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Elipsa" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Obrázek" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Pero" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Obdélník" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Otočit" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Snímek obrazovky" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Zobrazit" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Doplňky" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Spustit" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "S&top" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Souborové operace" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vždy navrchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "Pořadí operací můžete změnit jejich přetažením (\"drag && drop\") na jiné místo" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Zrušit" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Zrušit" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nová fronta" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Zobrazit v samostatném okně" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Zařadit na začátek fronty" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Zařadit na konec fronty" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Fronta" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Mimo frontu" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Fronta 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Fronta 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Fronta 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Fronta 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Fronta 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Zobrazit v samostatném okně" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Pozastavit vše" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Ná&sledovat odkazy" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Pokud už složka existuje" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Pokud soubor existuje" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Zrušit" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&OK" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Příkazový řádek:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Parametry:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Výchozí cesta:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Kon&figurovat" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Nastavit heslo" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Kopírovat d&atum/čas" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Práce v pozadí (samostatné přípojení)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Pro provedení potřebujete administrátorské oprávnění" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "vytvoření objektu:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "výmaz objektu:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "atributy objektu:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "vytvoření hard linku:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "otevření objektu:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "přejmenování objektu:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "nastavení atributů objektu:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "vytvoření symbolického linku:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Datum vytvoření" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Výška" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Šířka" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Výrobce" #: uexifreader.rsmodel msgid "Camera model" msgstr "Kamera" #: uexifreader.rsorientation msgid "Orientation" msgstr "Orientace" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Tento soubor nelze nalézt, a mohl by pomoci ověřit konečné kombinace souborů:\n" "%s\n" "\n" "Mohl byste ho dát jen k dispozici, a kliknout tlačítko \"OK\", pokud jste připraveni,\n" "nebo pokračovat bez něj kliknutím na \"ZRUŠIT\"?" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<DIR>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<LNK>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Zrušit rychlý filtr" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Zrušit aktuální operaci" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Zadejte název souboru s příponou, pro upuštění textu" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formát textu pro import" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Rozbitý:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Obecné:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Chybějící:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Chyba čtení:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Úspěšný:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Zadejte kontrolní součet a vyberte algoritmus:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Ověřit kontrolní součet" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Celkem:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Chcete smazat filtry z tohoto hledání?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schránka neobsahuje žádné platné údaje z nástrojové lišty." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Vše;Aktivní záložka;Levá záložka;Pravá záložka;Činnosti souboru;Konfigurace;Síť;Různé;Paralelní port;Tisk;Výběr;Bezpečnost;Schránka;FTP;Navigace;Nápověda;Okno;Příkazový řádek;Nástroje;Zobrazit;Uživatel;Záložky;Řazení;Protokol" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Výchozí řazení;Řazení A-Z" #: ulng.rscolattr msgid "Attr" msgstr "Atr." #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Přípona" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Název" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Velikost" #: ulng.rsconfcolalign msgid "Align" msgstr "Zarovnat" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nadpis" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Vymazat" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Detaily položky" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Přesunout" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Šířka" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Nastavení sloupce" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Nastavení přidružení souborů" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potvrzování příkazového řádku a parametrů" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Kopírovat (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importovaná nástrojová lišta DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importovaná nástrojová lišta TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "GB" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "KB" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "MB" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "TB" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Přidáno: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Smazáno: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Tyto dva soubory jsou stejné!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Shodných: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Upravených: " #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Kódování" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Př&erušit" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Vše" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Připojit" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomatické přejmenování zdrojových souborů" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "Automaticky přejmenovat cílové soubory" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Zrušit" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Porovnat podle obsahu" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Pokračovat" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Přepsat" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Přepsat &vše" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "U&končit program" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Ig&norovat" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorovat vše" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Žád&ný" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Os&tatní" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Přepsat" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Přepsat vše" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Přepsat všechny větší" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Přepsat pouze starší" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Přepsat všechny menší" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "S&mazat" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Znovu začít" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "O&pakovat" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Jako administrátor" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Pře&skočit" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Přes&kočit vše" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "Odemknout" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ano" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopírovat soubor(y)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Přesunout soubor(y)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Poza&stavit" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Spustit" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Fronta" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Rychlost %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Rychlost %s/s, zbývající čas %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Formát Rich Text;Formát HTML;Formát Unicode;Formát jednoduchého textu" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Ukazatel volného místa na disku " #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez štítku>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<žádné médium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Vnitřní editor Double Commanderu." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Číslo řádku:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Přejít na řádek" #: ulng.rseditnewfile msgid "new.txt" msgstr "nový.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Název souboru:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otevřít soubor" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vzad" #: ulng.rseditsearchcaption msgid "Search" msgstr "Hledat" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "V&před" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Nahradit" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "s externím prohlížečem" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "s vnitřním prohlížečem" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Spustit přes shell" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Spustit přes terminál a zavřít" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Spustit přes terminál a ponechat otevřené" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" nebyl na řádku %s nalezen" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Před příkazem \" %s\" nebyla definována žádná přípona. Bude ignorován." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Vlevo;Vpravo;V aktivním;V neaktivním;V obojím;V žádným" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Ne;Ano" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportováno_z_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Zeptat se;Přepsat;Přeskočit" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Zeptat se;Přepsat;Přeskočit" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Zeptat se;Přepsat;Přepsat starší;Přeskočit" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Zeptat se;Už nenastavovat;Ignorovat chyby" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Všechny soubory" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "konfigurační soubor" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "DC Tooltip soubory" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "soubory Oblíbených složek" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Spustitelné soubory" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr ".ini soubor" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "standardní DC .tab soubory" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Knihovna souborů" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Soubory doplňků" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTR" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "TC Toolbar soubory" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "DC Toolbar soubory" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr ".xml soubor" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definice výběru" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s úrovní" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "vše (neomezená hloubka)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "pouze aktuální adresář" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Adresář %s neexistuje!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Nalezeno: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Uložit vyhledávací šablonu" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Název šablony:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Prohledáno: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Průběh" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Hledat soubory" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Doba hledání: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začít v" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Pí&smo konzoly" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Písmo &editoru" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Font tlačítek" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "&Písmo protokolu" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Hlavní &písmo" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Písmo cesty" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Výsledek hledání" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Stromová nabídka" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "&Písmo prohlížeče" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "&Knižní písmo prohlížeče" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "volné místo: %s, celková kapacita: %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "volné místo: %s" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum/čas přístupu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributy" #: ulng.rsfunccomment msgid "Comment" msgstr "Komentář" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimovaná velikost" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum/čas vytvoření" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Přípona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Datum/čas změny" #: ulng.rsfunclinkto msgid "Link to" msgstr "Napojit na" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum/čas úpravy" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Název" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Název bez přípony" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlastník" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cesta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Velikost" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Chyba při vytváření hardlinku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "Žádná;Název, a-z;Název, z-a;Přípona, a-z;Přípona, z-a;Velikost 9-0;Velikost 0-9;Datum 9-0;Datum 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Varování! Při obnově ze záložního souboru, bude aktuální .hotlist soubor smazán a nahrazen zálohou.\n" "\n" "Jste si skutečně jisti, že si přejete pokračovat?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopírovat/Přesunout dialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Porovnání obsahu" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Dialogové okno upravit komentář" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Hledat soubory" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hlavní" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Hromadné přejmenování" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Synchronizovat složky" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Prohlížeč" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Nastavení s tímto názvem už existuje.\n" "Přejete si ho skutečně přepsat?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Jste si jisti, že chcete obnovit na výchozí hodnoty?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Opravdu vymazat \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Kopie %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Zadejte nový název" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Je nutné zachovat alespoň jeden soubor klávesových zkratek." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Nový název" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Nastavení \"%s\" bylo změněno.\n" "Přejete si ho uložit?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Bez zkratky s \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "podle názvu příkazu;podle zkratky (seskupeno);podle zkratky (jedna na řádek)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Nemohu najít odkaz na výchozí BAR soubor" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "G" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Seznam hledacích oken" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska zrušení výběru" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska výběru" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Vstupní maska:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Zobrazené sloupce s tímto názvem již existují." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Chceme-li změnit aktuální úpravy sloupců, použijeme buďto ULOŽIT, KOPÍROVAT nebo SMAZAT" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Nastavit uživatelské sloupce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Zadejte nový název vlastních sloupců" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akce" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Default>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Octal" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Vytvořit zástupce..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odpojit síťovou jednotku..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Upravit" #: ulng.rsmnueject msgid "Eject" msgstr "Vysunout" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Rozbalit zde..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Připojit síťovou jednotku..." #: ulng.rsmnumount msgid "Mount" msgstr "Připojit" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nový" #: ulng.rsmnunomedia msgid "No media available" msgstr "Žádné dostupné médium" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otevřít" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Otevřít s" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Ostatní..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Komprimovat zde..." #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Obnovit" #: ulng.rsmnusortby msgid "Sort by" msgstr "Řadit podle" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odpojit" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Zobrazit" #: ulng.rsmsgaccount msgid "Account:" msgstr "Účet:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Všechny interní příkazy DC" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Popis: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Doplňující parametry pro archivátor příkazové řádky:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Chcete uzavřít mezi uvozovky?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Špatný výsledek CRC32 pro soubor:\n" "\"%s\"\n" "\n" "Přejete si ponechat výsledný poškozený soubor?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nemůžete kopírovat/přesunout soubor \"%s\" do sebe!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Nelze odstranit adresář %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Nelze přepsat adresář \"%s\" neadresářem \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Změna adresáře na [%s] selhala!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Odstranit všechny neaktivní záložky?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Záložka (%s) je uzamčena! Přesto zavřít?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Potvrzovat parametry" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Opravdu skončit?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Soubor %s se změnil. Chcete jej zkopírovat zpět?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Nelze zkopírovat zpět - chcete ponechat změněný soubor?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Kopírovat %d vybraných položek?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Kopírovat \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Vytvořit nový typ souboru pro \"soubory %s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Zadejte umístění a název souboru pro uložení souboru nástrojové lišty DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Vlastní akce" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Odstranit částečně zkopírovaný soubor ?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Opravdu vymazat vybrané položky (celkem %d)?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Opravdu vymazat vybrané položky (celkem %d) do koše?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Opravdu vymazat \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Opravdu přesunout \"%s\" do koše?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nelze odstranit \"%s\" do koše! Odstranit přímo?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk není dostupný" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Vlastní název akce:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Zadejte příponu souboru:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Zadejte název:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Vložte název pro vytvoření nového typu souboru pro příponu \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC chyba v datech archívu" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Špatná data" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Nelze se připojit k serveru: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Nelze zkopírovat soubor %s do %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Složka s názvem \"%s\" už existuje." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Datum %s není podporován" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Složka %s už existuje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Operace přerušena uživatelem" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Chyba při uzavírání souboru" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nelze vytvořit soubor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V archívu nejsou žádné další soubory" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nelze otevřít existující soubor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Chyba při čtení ze souboru" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Chyba při zápisu do souboru" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Složku %s nelze vytvořit!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Nesprávný odkaz" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Soubory neexistují" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nedostatek paměti" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkce není podporována!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Chyba v příkazu místní nabídky" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Chyba při načítání nastavení" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Chyba syntaxe v regulárním výrazu!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Nelze přejmenovat soubor %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nelze uložit přidružení!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nelze uložit soubor" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Nelze nastavit atributy pro \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Nelze nastavit datum/čas pro \"%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Nelze nastavit vlastníka/skupinu pro \"%s \"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Oprávnění pro \"%s\" nelze nastavit" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Vyrovnávací paměť je příliš malá" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Příliš mnoho souborů pro kompresi" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Neznámý formát archívu" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Spouštět: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Návratová hodnota:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Jste si jisti že chcete vymazat všechny položky oblíbených záložek? (Neexistuje krok \"zpět\" pro tuto akci!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Přetáhněte sem další položky" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Název záložky:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Uložení záložky mezi oblíbené" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Počet úspěšně exportovaných oblíbených záložek: %d z %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Další nastavení u uložení historii složek pro nové oblíbené záložky:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Počet úspěšně importovaných souborů: %d z %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Importovaný dřívější záložky" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Vybrat .tab soubor(y) k importu (může být více než jeden najednou!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Poslední změny oblíbených záložek dosud nebyly uloženy. Chcete je před pokračováním uložit?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Ukládat historii složek do Oblíbených záložek:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Název podnabídky" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Toto načte Oblíbené záložky: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Uložit aktuální záložku do existující oblíbené záložky" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Soubor %s byl změněn, uložit?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s bajtů, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Přepsat:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Soubor %s existuje, přepsat?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Souborem:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Soubor \"%s\" nebyl nalezen." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktivní souborové operace)" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Některé souborové operace nejsou dokončeny. Uzavření Double Commanderu může vést ke ztrátě dat." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Délka cílového názvu (%d) je větší než %d znaků!\n" "%s\n" "Některé programy nebudou schopné přístupu k souboru/složce s tak dlouhým názvem!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Soubor %s je označen jako pouze ke čtení/skrytý/systémový! Odstranit jej?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Opravdu chcete znovu načíst aktuální soubor a ztratit změny?" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Velikost souboru \"%s\" je příliš velká pro cílový souborový systém!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Složka %s existuje, přepsat?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Následovat symbolický odkaz \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Vyberte formát textu pro import" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Přidat %d vybraných adresářů" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Přidat: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Přidat: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Provést příkaz" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_jakýkoliv" # Výstižnější a stručnější překlad vzhledem k místu použití. #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Nastavení..." #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Jste si jisti že chcete vymazat všechny položky Rychlého adresáře? (U této akce neexistuje krok \"zpět\"!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Spustí následující příkaz:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Toto je rychlý adresář pojmenovaný " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Změní aktivní rám do následující cesty:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "A neaktivní rám může zmenit do následující cesty:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Chyba položky zálohování..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Chyba položky exportu..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportovat vše!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Export rychlého adresáře - Vyberte položku pro export" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Export vybraného" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importovat vše" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Import rychlého adresáře - vyberte položky pro import" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importovat vybrané" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Cesta akt. panel:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Nalezení souboru \".hotlist\" pro import" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Název složky" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Počet nových položek: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Pro import není nic vybráno!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Cesta ke složce ve zdrojovém panelu" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Znovu přidat: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Znovu přidat: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Zadejte umístění a název souboru pro obnovu hotlist" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Příkaz:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(konec v podnabídce)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Název nabídky:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Název:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(oddělovač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Název podnabídky" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cesta ke složce v cílovém panelu" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Určete, zda má být aktivní rám seřazen v specifikovaném pořadí po změně adresáře" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Určete, zda má být neaktivní rám seřazen v specifikovaném pořadí po změně adresáře" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Funkce pro výběr cesty." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Celkem uložených položek: %d\n" "\n" "Název souboru se zálohou: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Celkem exportovaných položek: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Chcete smazat všechny prvky uvnitř podnabídky [%s]?\n" "Odpověď NE smaže pouze oddělovače nabídky, ale nezmění prvek uvnitř podnabídky." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Zadání umístění a názvu souboru pro uložení souboru hotlist" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Neplatný výsledek délky souboru pro soubor: \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Vložte prosím další disk nebo něco podobného.\n" "\n" "To umožní zapsání tohoto souboru:\n" "\"%s\"\n" "\n" "Počet bytů stále potřebných zapsat: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Chyba v příkazovém řádku" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nesprávný název souboru" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neplatný formát konfiguračního souboru" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Chybné hexadecimální číslo: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neplatná cesta" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "Cesta %s obsahuje nepovolené znaky." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Toto není platný doplněk!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Tento plugin je vyvinut pro Double Commander pro %s.%s Nemůže pracovat s Double Commander pro %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neplatná citace" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Nesprávný výběr." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Načítání seznamu souborů..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Nalezení konfiguračního souboru TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Nalezení spustitelného souboru TC (totalcmd.exe nebo totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Kopírovat soubor %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Smazán soubor %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Chyba: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Externě spuštěno" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Výsledek externího" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Rozbalit soubor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Vytvořit odkaz %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Vytvořit adresář %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Přesunout soubor %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Zkomprimovat do souboru %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Vypnutí programu" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Spuštění programu" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Odstranit adresář %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Vytvořit symbolický odkaz %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Testovat integritu souboru %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Nevratně smaže soubor %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Nevratně smaže adresář %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hlavní heslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prosíme zadejte hlavní heslo:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nový soubor" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Další část bude rozbalena" #: ulng.rsmsgnofiles msgid "No files" msgstr "Žádné soubory" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nejsou vybrány žádné soubory." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Není dostatek volného místa na cílovém disku! Pokračovat?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Není dostatek volného místa na cílovém disku! Opakovat?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Nelze vymazat soubor %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Není implementováno." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Objekt neexistuje!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Akce nemůže být dokončena, protože je soubor otevřen v jiné aplikaci:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Náhled nového nastavení. Můžete v něm pohybovat kurzorem, vybírat soubory a okamžitě uvidíte nový vzhled." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Heslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Hesla jsou rozdílná!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Zadejte prosím heslo:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Heslo (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prosíme zopakujte heslo pro ověření:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Vymazat %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Předvolba \"%s\" již existuje. Nahradit?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Opravdu vymazat: \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Problém při vykonávání příkazu (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Název souboru pro upuštěný text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Prosím, vytvořte tento soubor dostupný. Zopakovat?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Vložte nový název pro tuto oblíbenou záložku" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Vložte nový název pro tuto nabídku" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Přejmenovat nebo přesunout vybrané položky (celkem %d)?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Přejmenovat nebo přesunout položku \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Přejete si nahradit tento text?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Pro provedení změn prosím restartujte Double Commander" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ERROR: Chyba při načítání Lua souboru \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Zvolte ke kterému typu souboru přiřadit příponu \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Vybráno: %s z %s, souborů: %d z %d, složek: %d z %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Výběr spustitelného souboru pro" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Prosím vyberte pouze soubory s kontrolním součtem!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prosím vyberte umístění další části" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Nastavit název disku" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Speciální složky" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Přidat cestu z aktivního panelu" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Přidat cestu z neaktivního panelu" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Vybrat cestu..." #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Proměnné prostředí..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Double Commander" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Proměnné prostředí" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Windows" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Windows (TC)" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Vytvořit relativní cestu k oblíbené složce" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Vytvořit absolutní cestu" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Vytvořit relativní cestu k Double Commander" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Vytvořit relativní cestu k proměnné prostředí" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Vytvořit relativní cestu k Windows (TC)" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Vytvořit relativní cestu k Windows" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Oblíbené složky" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windows (TC)" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Záložka (%s) je uzamčena! Otevřít adresář v jiné záložce?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Přejmenovat záložku" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nový název záložky:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cílová cesta:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Chyba! Nelze najít konfigurační soubor TC:\n" "%s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Chyba! Nelze najít spustitelnou konfiguraci TC:\n" "%s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Chyba! TC je stále spuštěn, ale může být pro tuto činnost uzavřen.\n" "Ukončete ho a klikněte na OK nebo kliknutím na ZRUŠIT akci přerušte." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Chyba! Nelze najít požadovanou výstupní složku nástrojové lišty TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Zadání umístění a názvu souboru pro uložení souboru nástrojové lišty TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "Upozornění: Ukončení procesu může způsobit nežádoucí stav, včetně ztráty dat nebo nestability systému. Proces nebude mít možnost uložit svůj stav nebo data před jeho ukončením. Opravdu si přejete proces ukončit?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" je nyní ve schránce" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Přípona souboru není v žádném z rozpoznaných typů" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Nalezení souboru \".toolbar\" pro import" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Nalezení souboru \".BAR\" pro import" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Zadání umístění a názvu souboru pro obnovení nástrojové lišty" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Uloženo!\n" "Název souboru nástrojové lišty: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Vybráno příliš mnoho souborů." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Neurčeno" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "CHYBA: Neočekávané použití stromové nabídky!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<BEZ PŘÍPONY>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<BEZ NÁZVU>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Jméno uživatele:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Uživatelské jméno (firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "OVĚŘENÍ:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Přejete si ověřit kontrolní součet?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Nesouhlasí kontrolní součet, soubor je poškozen!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Název disku:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prosím zadejte velikost disku:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Přejete si nastavit umístění Lua knihovny?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Nevratně smazat %d vybraných souborů/adresářů?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Nevratně smazat \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "s" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Chybné heslo!\n" "Zkuste znova!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Automaticky přejmenovat na \"název (1).ext\", \"název (2).ext\" atd.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Počítadlo" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Datum" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Název nastavení" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Název proměnné" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Hodnota proměnné" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Zadejte název proměnné" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Zadejte novou hodnotu pro \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Uložit jako [Poslední použitý];Zeptat se jestli uložit;Uložit automaticky" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Přípona" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Název" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Neměnit;VELKÁ;malá;1. znak velkým;1. znak každého slova velkým;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Poslední použitý]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Nastavit volbu [Poslední použitý];Nechat poslední nastavení;Nová prázdná maska" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Hromadné přejmenování" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Znak na pozici x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Znaky od pozice x do y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Celé datum" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Celý čas" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Počítadlo" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Den" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Den (2 cifry)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Den v týdnu (krátký, např. \"pon\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Den v týdnu (dlouhý, např.\"pondělí\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Přípona" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Název souboru s cestou a příponou" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Název souboru, znaky od pozice X do Y" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hodina" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Hodin (2 cifry)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minuta" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Minut (2 cifry)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Měsíc" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Měsíc (2 cifry)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Název měsíce (krátké, např. \"led\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Název měsíce (dlouhé, např. \"leden\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Název" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Nadřazená složka" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Sekund" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Sekund (2 cifry)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Proměnná on the fly" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Rok (2 cifry)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Rok (4 cifry)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Doplňky" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Uložit nastavení jako" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Nastavení už existuje. Přejete si ho přepsat?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Zadejte nový název" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Nastavení \"%s\" bylo změněno.\n" "Přejete si ho uložit?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Seřadit nastavení" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Čas" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Pozor, nalezeny stejné názvy!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Soubor obsahuje špatný počet řádků: %d, mělo by být %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "zachovat;vymazat;zeptat se" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Žádný vnitřní rovnocenný příkaz" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Omlouváme se, ale historie hledání nic neobsahuje." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Omlouváme se, další okno \"Hledat soubory\" k zavření neexistuje, zavřít a uvolnit paměť..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Vývoj" #: ulng.rsopenwitheducation msgid "Education" msgstr "Výuka" #: ulng.rsopenwithgames msgid "Games" msgstr "Hry" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Grafika" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Multimedia" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Síť" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Ostatní" #: ulng.rsopenwithscience msgid "Science" msgstr "Věda" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Nastavení" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Systém" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Příslušenství" #: ulng.rsoperaborted msgid "Aborted" msgstr "Přerušeno" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Přepočítávám kontrolní součet" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Přepočítávám kontrolní součet v \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Přepočítávám kontrolní součet z \"%s\"" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Počítání" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Probíhá výpočet \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Spojování" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spojení obrázků v \"%s \" do \"%s \"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopírování" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírování z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírování \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváření adresáře" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Vytváření adresáře \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Mazání" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Mazání v \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Mazání \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Provádění" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Provádění \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbalování" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Rozbaluji z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Hotovo" #: ulng.rsoperlisting msgid "Listing" msgstr "Vypisování" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Vypisování \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Přesunování" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Přesunování z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Přesunování \"%s\" do \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nespuštěno" #: ulng.rsoperpacking msgid "Packing" msgstr "Komprimace" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Komprimace z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Komprimace \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pozastaveno" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pozastavuji" #: ulng.rsoperrunning msgid "Running" msgstr "Běží" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavení vlastnosti" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Nastavení vlastnosti v \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Nastavení vlastnosti z \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Rozdělení" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Rozdělení \"%s\" do \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Spouštím" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zastaveno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zastavuji" #: ulng.rsopertesting msgid "Testing" msgstr "Testování" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Testování v \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Testování \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Ověřuji kontrolní součet" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Ověřuji kontrolní součet v \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Ověřuji kontrolní součet z \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čekání pro přístup k zdroji souboru" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čekám na reakci uživatele" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Otírání v \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Otírání \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Práce" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Na začátek;Na konec;Chytře" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Přidat novou kategorii" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Pro potvrzení změny konfigurace, stiskněte tlačítko POUŽÍT nebo SMAZAT" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Závislý na dalších příkazech" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Přidat pokud neexistuje" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Název archívu (dlouhý název)" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Vybrat archivátor" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Název archívu (krátký název)" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Změnit kódování výpisu" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Opravdu vymazat: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Export_nastaveni_archivatoru" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "Education" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Export nastavení archivátorů" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Export %d položek do souboru \"%s\" hotov." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Vyberte co exportovat" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Seznam souborů (dlouhé názvy)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Seznam souborů (krátké názvy)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Import nastavení archivátorů" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import %d položek ze souboru \"%s\" hotov." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Vyberte soubor pro import" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Vyberte co importovat" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Použít jméno bez cesty" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Použít cestu bez jména" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Komprimační program (dlouhý název)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Komprimační program (krátký název)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Přidat uvozovky na všechny názvy" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Přidat uvozovky na názvy s mezerami" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Jeden název souboru" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Cílová složka" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Použít ANSI kódování" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Použít UTF8 kódování" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Zadejte umístění a název souboru kam uložit nastavení archivátorů" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Název typu archívu:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Asociovat doplněk \"%s\" s:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "První;Poslední;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Výchozí pořadí; Abecední pořadí (jazyk ale stále jako první)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Rozbalit;Sbalit" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivní panel vlevo, neaktivní vpravo(starší);Levý panel vlevo, pravý panel vpravo" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Zadejte příponu" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Přidat na začátek;Přidat na konec;Abecedně seřadit" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "samostatné okno;minimalizované samostatné okno;záložka operace" #: ulng.rsoptfilesizefloat msgid "float" msgstr "plovoucí" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Zkratka %s pro cm_Delete budou registrovány, takže jej lze použít ke obrácení tohoto nastavení." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Přidat klávesovou zkratku pro %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Přidat zástupce" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nelze nastavit zástupce" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Změnit zástupce" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Příkaz" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Zástupce %s pro cm_Delete má parametr, který přepíše toto nastavení. Chcete změnit tento parametr a použít globální nastavení?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Zástupce %s pro cm_Delete potřebuje mít parametr změněný, aby odpovídal zástupci %s. Chcete ho změnit?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Popis" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Změnit klávesovou zkratku pro %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Opravit parametr" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Klávesová zkratka" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Klávesové zkratky" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<žádná>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametry" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Nastavit zástupce ke smazání souboru" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pro toto nastavení, aby pracoval zástupce %s, musí zástupce %s být přiřazen cm_Delete, ale už byl přiřazen k %s. Chcete to změnit?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Zástupce %s pro cm_Delete je sekvence zkratek pro které nesmí být přidělena obrácená klávesová zkratka Shift. Toto nastavení nemusí fungovat." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Zástupci v použití" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Zástupce %s je již použit." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Změnit toto na %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "použito pro %s v %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "použito pro tento příkaz, ale s různými parametry" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Archivátory" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Automatická obnova" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Chování" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Seznam" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Barvy" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Sloupce" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Nastavení" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Vlastní sloupce" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Oblíbené složky" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Rozšířené možnosti" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Přetáhnutí" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tlačítko seznamu disků" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Oblíbené záložky" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Rozšířené možnosti" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Přidružení souborů" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nový" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Souborové operace" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Panely souborů" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Hledání souborů" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Zobrazení souborů" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Rozšířené možnosti" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy souborů" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Záložky" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Rozšířené možnosti" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Písmo" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Zvýraznění syntaxe" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Klávesové zkratky" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Ignorované soubory" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klávesy" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Jazyk" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Rozvržení" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Protokol" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Různé" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Myš" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Hromadné přejmenování" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Byla provedena změna v \"%s\"\n" "\n" "Přejete si ji uložit?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Doplňky" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Rychlé hledání/filtr" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Nástrojová lišta" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Rozšířené nastavení" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Prostřední nabídka" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Nástroje" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Tooltipy" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Stromová nabídka" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Barvy stromové nabídky" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Žádný;Příkazová řádka;Rychlé hledání;Rychlý filtr" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Levé tlačítko;Pravé tlačítko;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "nahoře v seznamu souborů;po adresářích (pokud jsou adresáře řazeny před soubory);na řazené pozici;v dolní části seznamu souborů" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Vlastní float;Vlastní byte;Vlastní kilobyte;Vlastní megabyte;Vlastní gigabyte;Vlastní terabyte" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Doplněk %s již je přiřazen pro následující soubory:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Zakázat" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "P&ovolit" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktivní" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Popis" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Název souboru" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Podle přípony" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Podle názvu" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Název" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Seřazení WCX doplňků je možné pouze při seřazení podle přípony!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrováno pro" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Přejmenovat kategorii" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Citlivý;&Necitlivý" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Soubory;Ad&resáře;Soubory a& adresáře" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skrýt panel filtru pokud není označen;Pozdržet ukládání úprav nastavení pro příští sezení" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nezáleží na velikosti znaků;podle místního nastavení (aAbBcC);první velká, poté malá písmena (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "seřadit podle názvu a zobrazit první;seřadit jako soubory a zobrazit první;seřadit jako soubory" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Abecedně s ohledem na znaménka;Abecedně se tříděním speciálních znaků;Přirozené řazení: abecedy a čísel;Přirozené se speciálními znaky" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Nahoře;Dole;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "O&ddělovač;Vni&třní příkaz;V&nější příkaz;Podnabíd&ka" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Pro potvrzení změny konfigurace, stiskněte tlačítko POUŽÍT nebo SMAZAT" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Název:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\" %s\" již existuje!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Opravdu vymazat: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Export_nastaveni_tooltipu" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Export tooltip nastavení" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Export %d položek do souboru \"%s\" hotov." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Vyberte co exportovat" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Import tooltip nastavení" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Import %d položek ze souboru \"%s\" hotov." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Vyberte soubor pro import" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Vyberte co importovat" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Zadejte umístění a název souboru kam uložit konfiguraci tooltip nápovědy" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Název" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Starší DC - kopie (x) názevsouboru.ext;Windows - názevsouboru (x).ext;Ostatní - názevsouboru(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "neměnit pozici;použít stejné nastavení pro nové soubory;do řazené pozice" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "Absolutní celá cesta;Relativní k %COMMANDER_PATH%;Relativní k jiné složce" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "obsahuje(přesně)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "obsahuje" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(case)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Pole \"%s\" nenalezeno!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!contains(case)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!contains" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(case)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!regexp" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Doplněk \"%s\" nenalezen!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "regexp" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Položka \" %s\" nebyla pro pole \" %s\" nalezena!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Soubory: %d, složky: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Nelze změnit přístupová práva pro \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Nelze změnit vlastníka pro \"%s\"" #: ulng.rspropsfile msgid "File" msgstr "Soubor" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Složka" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Pojmenované roury" #: ulng.rspropssocket msgid "Socket" msgstr "Zásuvka" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Zvláštní blokové zařízení" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Zvláštní znakové zařízení" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolický odkaz" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Neznámý typ" #: ulng.rssearchresult msgid "Search result" msgstr "Výsledky hledání" #: ulng.rssearchstatus msgid "SEARCH" msgstr "VYHLEDAT" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<nepojmenovaná šablona>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Hledání souborů pomocí zásuvného modulu DSX již probíhá.\n" "To se musí nejdříve dokončit, než se zahájí nové." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Hledání souborů pomocí zásuvného modulu WDX již probíhá.\n" "To se musí nejdříve dokončit, než se zahájí nové." #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrat adresář" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Nejnovější;Nejstarší;Největší;Nejmenší;První ve skupině;Poslední ve skupině" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Vyberte okno" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Zobrazit nápovědu pro %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Vše" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Sloupec" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Příkaz" #: ulng.rssimpleworderror msgid "Error" msgstr "Chyba" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Chyba!" #: ulng.rssimplewordfalse msgid "False" msgstr "Ne" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Název souboru" #: ulng.rssimplewordfiles msgid "files" msgstr "soubory" #: ulng.rssimplewordletter msgid "Letter" msgstr "Znak" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametr" #: ulng.rssimplewordresult msgid "Result" msgstr "Výsledek" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Úspěch!" #: ulng.rssimplewordtrue msgid "True" msgstr "Ano" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Proměnné" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "PracovníAdresář" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtů" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Gigabajtů" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Kilobajtů" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Megabajtů" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajtů" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Souborů: %d, Adresářů: %d, Velikost: %s (%s B)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nelze vytvořit cílový adresář!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Neplatný formát velikosti souboru!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nelze rozdělit soubor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Počet částí je větší než 100! Pokračovat?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Automaticky;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Výběr adresáře:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Pouze náhled" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Ostatní" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Vedlejší poznámka" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Plochý" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Omezený" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Jednoduchý" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Skvělý" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Úžasný" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Fantastický" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Historie složek" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Oblíbené záložky:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Historie příkazové řádky" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Akce z menu" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Akce z panelu nástrojů" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Oblíbené složky:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Historie prohlížených souborů" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Složka nebo soubor" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Chyba při vytváření zástupce." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Původní text" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Prostý text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Žádná;Zavřít záložku;Zobrazit oblíbené záložky;Zobrazit menu s akcemi pro záložky" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Dnů(í)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hodin(y)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(y)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Měsíc(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(y)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Týden(y)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok(y)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Přejmenování oblíbených záložek" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Přejmenování podnabídky oblíbených záložek" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Porovnání obsahu" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Chyba otevření rozdílných" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Chyba otevření editoru" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Chyba otevření terminálu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Chyba otevření prohlížeče" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Standardní;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Neskrývat" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Kombinovat DC a systémový tooltip, DC první (výchozí);Kombinovat DC a systémový tooltip, systémový první;Pokud je to možné zobrazit DC tooltip a když ne tak systémový;Pouze DC tooltip;Pouze systémový tooltip" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Prohlížeč" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prosíme nahlašte tuto chybu do sledovače chyb a popište, co jste dělali a následující soubor:%sStiskněte %s pro pokračování nebo %s pro přerušení programu." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Oba panely, z aktivního do neaktivního" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Oba panely, z levého do pravého" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "cesta k záložce" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "uzavřít každý název v závorkách, nebo v čem zrovna potřebujete" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "pouze název souboru, ne jeho přípona" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "kompletní název souboru (cesta + název souboru)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Nápověda k proměnným s \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Bude požadovat od uživatele zadání parametru" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Poslední složka cesty panelu" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Poslední složka cesty souboru" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Levý panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Dočasný seznam názvů souborů" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Dočasný seznam úplných názvů souborů (cesta+název souboru)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Názvy souborů v seznamu v UTF-16 s BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Názvy souborů v seznamu v UTF-16 s BOM, uvnitř dvojitých uvozovek" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Názvy souborů v seznamu v UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Názvy souborů v seznamu v UTF-8, uvnitř dvojitých uvozovek" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Dočasný seznam názvů souborů s relativní cestou" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "pouze přípona souboru" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "pouze název souboru" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Další příklady toho, co je možné" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "cesta bez oddělovače na konci" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "odtud až do konce řádku, bude proměnná ukazatele procent \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Vrátit znak procenta" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "odtud až do konce řádku, bude zpátky proměnná ukazatele procent \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "přidat před každý název \"-a \" nebo co zrovna potřebujete" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Vyzvat uživatele k zadání parametru;Výchozí navrhovaná hodnota]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "název souboru s relativní cestou" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Pravý panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "úplnou cestu druhého vybraného souboru v pravém panelu" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Ukázat příkaz před spuštěním" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Jednoduchá zpráva]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Zobrazí jednoduchou zprávu" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "aktivní panel (zdroj)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Neaktivní panel (cíl)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "názvy souborů budou odtud citovány (výchozí)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "příkaz bude běžet v terminálu, potom zůstane otevřen" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "cesty budou mít koncový oddělovač" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "názvy souborů nebudou odtud citovány" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "příkaz bude běžet v terminálu, potom se zavře" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "cesty nebudou mít koncový oddělovač (výchozí)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Síť" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Vnitřní prohlížeč Double Commanderu." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Špatná kvalita" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódování" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Typ obrázku" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nová velikost" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s nenalezeno!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Tužka;Obdélník;Elipsa" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "s externím prohlížečem" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "s vnitřním prohlížečem" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Počet nahrazených: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Žádné nahrazení se nekonalo." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.ca.po�����������������������������������������������������������0000644�0001750�0000144�00001323770�15104114162�017245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2012-08-14\n" "Last-Translator: Jordi Casas <jordi@refugi.com>\n" "Language-Team: \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Català\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Escull plantilla" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Examina espai lliure" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copia atributs" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copia propietat" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copia Data/Hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Corregeix enllaços" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Treu marca de només-lectura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Exclou carpetes buides" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Segueix enllaços" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserva espai" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usa fitxer de plantilla" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quan la carpeta existeixi" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quan el fitxer existeixi" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sense plantilla>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Tanca" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copia al portapapers" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Fet" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Pàgina Web:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisió" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versió" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reinicia" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Escull atributs" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Fitxer" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Comprimit" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Carpeta" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Encriptat" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ocult" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Només lectura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Escàs" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adhesiu" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Enllaç Simbòlic" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistema" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Temporal" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributs NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributs generals" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecució" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Como a text:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriptura" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calcula suma de comprovació" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Crea un fitxer por cada comprobació" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Desa fitxer de comprobació en:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifica comprobació..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Codificació" #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Afegeix" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "C&onnecta" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Esborra" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Connexió" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Connecta a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Afegeix a la cua" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pcions" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Desa opcions per defecte" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copia fitxer(s)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova cua" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Cua 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Cua 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Cua 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Cua 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Cua 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentari Fitxer/Carpeta" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Edita comentari per:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codificant:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Autocomparació." #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Mode Binari" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancel·la" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancel·la" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copia bloc dret" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copia bloc dret" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copia bloc esquerra" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copia bloc esquerra" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refà" #: tfrmdiffer.acteditredo.hint #, fuzzy msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Refà" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecciona &tot" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfà" #: tfrmdiffer.acteditundo.hint #, fuzzy msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Desfà" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Surt" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "" #: tfrmdiffer.actfind.hint #, fuzzy msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Cerca" #: tfrmdiffer.actfindnext.caption #, fuzzy msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Cerca següent" #: tfrmdiffer.actfindnext.hint #, fuzzy msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Cerca següent" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "" #: tfrmdiffer.actfindreplace.caption #, fuzzy msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Reemplaça" #: tfrmdiffer.actfindreplace.hint #, fuzzy msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Reemplaça" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Primera diferència" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Primera diferència" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignora maj./min." #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignora espais blancs" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Manté desplaçament" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Última diferència" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Última diferència" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferències de línia" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Següent diferència" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Següent diferència" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Obre esquerra..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Obre dreta..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Dibuixa Fons" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Diferència prèvia" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Diferència prèvia" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Recarrega" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recarrega" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Desa" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Desa" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Amnomena i desa..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Anomena i desa..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Desa esquerra" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Desa esquerra" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Desa esquerra com..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Desa esquerra com..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Desa dreta" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Desa dreta" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Desa dreta com..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Desa dreta com..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Compara" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Compara" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificació" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificant" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Compara fitxers" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "esquerra" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "dreta" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Accions" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Edita" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Codificació" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Fitxer" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opcions" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&Accepta" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Només per a aquests controls" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Paràmetres (Cadascun a una línia diferent)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Dreceres" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Quant a" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuració" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuració" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Retalla" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Esborra" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find " msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Cerca" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Cerca" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Cerca següent" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Cerca següent" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Enganxa" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refà" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Refà" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Reemplaça" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Reemplaça" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecciona &tot" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Selecciona tot" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfà" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Desfà" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Tanca" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Surt" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nou" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nou" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Obre" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Obre" #: tfrmeditor.actfilereload.caption #, fuzzy msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Recarrega" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Desa" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Desa" #: tfrmeditor.actfilesaveas.caption #, fuzzy #| msgid "Save &As.." msgid "Save &As..." msgstr "Anomena i desa..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Anomena i desa" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificant" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Obre com" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Anomena i desa" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fitxer" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "LLenguatge de codificació" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fi de línia" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmeditsearchreplace.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption #, fuzzy msgctxt "tfrmeditsearchreplace.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Accepta" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensible a may./min." #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Cerca desde la posició actual" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expresions ®ulars" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Només Selecciona &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Només paraules completes" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opció" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Reemplaça amb:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Cerca:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direcció" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Descomprimeix Fitxers" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimeix carpetes si es guardaren" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimeix cada fitxer en una carpeta &separada" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Sobreescriu Fitxers existents" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "A la carpeta:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "Extreu Fitxers:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Contrasenya:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Espereu..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nom del fitxer:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "¡Clique a Tanca quan el fitxer temporal es pugui esborrar!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Al panell" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Visualitza tot" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operació actual" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Per:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Propietats" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Enganxós" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conté:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Creat:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executa" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nom" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nom" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ruta:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Grup" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Últim accès:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Última modificació" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Últim canvi d'estat:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propietari" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mida:" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Enllaç simbòlic:" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Tipus:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriu" #: tfrmfileproperties.sgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmfileproperties.sgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Valor" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmfileproperties.tsplugins.caption #, fuzzy msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Complements" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propietats" #: tfrmfileunlock.btnclose.caption #, fuzzy msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Tanca" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "C&ancel" msgstr "Cancel·la" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "&Tanca" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "&Close" msgstr "Tanca" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "tfrmfinddlg.actconfigfilesearchhotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Edita" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Inclou a la llista" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Va al fitxer" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "Cerca dades" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Última cerca" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Nova cerca" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "Inicia" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Visualització" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Afegeix" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Desa" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Esborra" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Carrega" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Desa" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Desa amb \"Start in directory\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Si es desa amb \"Start in directory\" es restaurarà quan es carrega la plantilla. Feu-lo servir si voleu corregir la cerca a un determinat directori\"" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usa plantilla" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Cerca fitxers" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible a majúscules" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Data inicial:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Data final:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Mida desde:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Mida fins:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Cerca &text en Fitxer" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Seguir l'enllaç simbòlic" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Cerca fitxers que NO continguin el text" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "No més de:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Cerca parts del nom del fitxer" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressions regulars" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Reemplaça text" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Carpetes i &fitxers seleccionats" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "&Hora inicial:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Hora final:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Usa complement de cerca:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Entreu el nom de les carpetes a excloure de la cerca separats per \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Entreu el nom dels fitxers a excloure de la cerca separats per \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Entreu el nom dels fitxers separats per \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Complement" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Carpetes" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Fitxers" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Cerca dades" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atributs" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codificació:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Exclou carpetes" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Exclou fitxers" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Màscara de fitxer" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Comença a la &Carpeta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Cerca subcarpetes:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Cerques prèvies:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.mioptions.caption #, fuzzy msgctxt "tfrmfinddlg.mioptions.caption" msgid "Options" msgstr "Opcions" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Elimina de la lista" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostra Tots els ítems trobats" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostra en el Visualitzador" #: tfrmfinddlg.miviewtab.caption #, fuzzy msgctxt "tfrmfinddlg.miviewtab.caption" msgid "&View" msgstr "&Visualització" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avançat" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carrega/Desa" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Complements" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultats" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Estàndar" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Cerca" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Cerca" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Sensible majúscules/minúscules" #: tfrmfindview.cbregexp.caption #, fuzzy msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "Expresions ®ulars" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Contrasenya:" #: tfrmgioauthdialog.lblusername.caption #, fuzzy msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Nom d'usuari:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Crea enllaç fort" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Ruta on s'enllaçarà" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom de l'enllaç" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Enllaçador" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Desa a..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nom &fitxer" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Avall" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Avall" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Elimina" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Esborra" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Amunt" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Amunt" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Quant a" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Afegeix nom de fitxer a la linia d'ordres" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Afegeix ruta i nom de fitxer a la linia d'ordres" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copia ruta a linia d'ordres" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Reduïda" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Visualització reduïda" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Calcula espai &ocupat" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Canviar de Carpeta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Canvia a la carpeta superior" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Canvia a la carpeta arrel" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcula suma de comprovació" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Verifica suma de comprovació" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Esborra fitxer log" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Esborra finestra log" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Tanca tot&es les pestanyes" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Tanca &pestanya" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Següent línia d'ordres" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Estableix línia d'ordres per al proper comandament a historial" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Línia de comandament prèvia" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Establir línia d'ordres per al mandat previ a la història" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completa" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Compara per &continguts" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Compara carpetes" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Compara carpetes" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostra menú contextual" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copia nom(s) de fitxer(s) amb ruta completa" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copia nom(s) de fitxer(s) al portapapers" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copia fitxers sense demanar confirmació" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copia al mateix panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Copia" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostra espai ocupat" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Retalla" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Esborra" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Història de carpetes" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "Marcadors" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "" #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Edita" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Edita comentari..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Edita nou Fitxer" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Edita camp de ruta sobre la llista de fitxers" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Intercanvia panells" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "&Extreu fitxers..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Associacions de fitxers..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Com&bina fitxers..." #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Mostra propietats" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Divideix fitxer..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Enfocament de linia d'ordres" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Col·locar el cursor sobre el primer fitxer" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Col·locar el cursor sobre l'últim fitxer" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Crea enllaç &fort..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Continguts" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Panells en horitzontal" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Teclat" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "esquerra &= dreta" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Obre llista d'unitats a l'esquerra" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carrega selecció del portapapers" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carrega se&lecció des de fitxer..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Crea Dir" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selecciona amb la mateixa extensió" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "&Inverteix selecció" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecciona tot" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Deselecciona gr&up..." #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Selecciona &grup..." #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "&Deselecciona tot" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimitzar finestra" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "&Reanomenat múltiple" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connectant xarxa..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Desconnectant xarxa..." #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connexió &ràpida de xarxa..." #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "&Nova pestanya" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Canvia a la pestanya següen&t" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Obre" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Intenta obrir fitxer" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Obre fitxer de barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Obre carpeta a nova pestanya" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Visualitza unitats de xarxa" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualitzador d'operacions" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "&Opcions..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Comprimeix fitxers..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Fixar posició de separació" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Enganxa" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Canvia a la pestanya &prèvia" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtre ràpid" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Cerca ràpida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panell de vista ràpida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Actualitza" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mou" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mou/Elimina sense confirmació" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Reanomena" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Re&anomena pestanya" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaura selecció" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Ordre in&vers" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Dret &= Esquerra" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Obre llista d'unitats a la dreta" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Desa selecció" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Desa sel&ecció a fitxer..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Cerca" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Canvia atributs..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueja carpetes obertes a pestanyes noves" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&loqueja" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueja amb canvis de carpeta permesos" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Obre" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Obre usant les associacions del sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostra menú de botons" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostra històrial de linia d'ordres" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menú" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostra Ocults/sistema" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Ordena per atributs" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Or&dena per data" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Ordena per extensió" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Ordena per nom" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Ordena per mida" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Habilita/deshabilita ignorar llista per no mostrar noms de Fitxer" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Crea e&nlaç simbòlic..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destinació = Origen" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Comprova fitxer(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatures" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visualització en miniatures" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Carpeta sota el cursor a l'esquerra" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Carpeta sota el cursor a la dreta" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselecciona tot amb la mateixa extensió" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Visualització" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostra hstòria de las direccions visitades per vista activa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Va a l'entrada següent" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Va a la entrada prèvia" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Visita el lloc web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Destrueix" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Surt" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Carpeta" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Esborra" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Carpetes freqüents" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostra carpeta actual del panell dret al esquerra" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Va a la carpeta d'usuari" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Va a la carpeta arrel" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Va a la carpeta superior" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Carpetes freqüents" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostra la carpeta actual del panell esquerra al dret" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Ruta" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancel·la" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copia..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Crea enllaç" #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Neteja" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "oculta" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecciona tot" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mou..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Crea enllaç Simbòlic" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opcions de pestanya" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Restaura" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Inicia" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Ordres" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguració" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "&Fitxers" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Selecció" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Xarxa" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Visualització" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Opcions" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Pestanyes" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Edita" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Accepta" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Tecles ràpides" #: tfrmmaskinputdlg.btnaddattribute.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnaddattribute.caption" msgid "&Add" msgstr "Afegeix" #: tfrmmaskinputdlg.btnattrshelp.caption #, fuzzy msgctxt "tfrmmaskinputdlg.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "Defineix..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Sensibilitat a Majúscules" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Màscara d'entrada:" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "O escull tipus de selecció predefinida:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nova carpeta" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Nom de la nova carpeta:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nova Mida" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Alt :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualitat de compresió jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ample:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Alt" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ample" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Extensió" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Neteja" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Neteja" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Tanca" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Configuració" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Comptador" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Comptador" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Data" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Esborra" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "" #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Extensió" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Extensió" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Edita" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "" #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Complements" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Complements" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Reanomena" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Reanomena" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Restaura" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Desa" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Anomena i desa..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Hora" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Reanomenat múltiple" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "" #: tfrmmultirename.cbcasesens.hint #, fuzzy msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Sensibilitat a Majúscules" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "&Log result" msgstr "Permet" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Expressions regulars" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Usa substitució" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Comptador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Cerca i Reemplaçar" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Màscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Configuració" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "Extensió" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Cerca..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "Nom" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Reemplaça..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Número inicial" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Amplada" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Accions" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Edita" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Nom antic" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nou nom de fitxer" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Ruta" #: tfrmmultirenamewait.caption #, fuzzy msgctxt "tfrmmultirenamewait.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Escull aplicació" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Personalitza comandament" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Desa associació" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Estableix aplicació seleccionada com a acció per defecte" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Tipus de fitxer a obrir: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Noms de fitxers múltiples" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption #, fuzzy #| msgid "Múltiple URIs" msgid "Multiple URIs" msgstr "Múltiples URIs" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fitxer simple" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Simple URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Aplica" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opcions" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Seleccioneu si us plau una de les subpàgines. Aquesta no conté paràmetres configurables" #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Copia" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Esborra" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Altres..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Reanomena" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Opcions:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Format mode d'anàlisis" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Habilita" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Mode de depuració" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Mostra sortida de consola" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Afegeix:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Arxivador:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Esborra" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Descripció:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Extensió:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Extreu:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Extreu sense ruta:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "Posició ID:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "Rang de cerca ID:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "Llista:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Compressors:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "Acaba llistat (opcional):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Format de llistat:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Inicia llistat (opcional):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Pregunta per la contrasenya:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Crea fitxer autoextraible:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Prova:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Configuració automàtica" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Addicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Quan canvia la mida, la data o els atributs" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Per les rutes següents i les seves subcarpetes:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "tfrmoptionsautorefresh.cbwatchfilenamechange.caption" msgid "When &files are created, deleted or renamed" msgstr "Quan es creen fitxers, s'esborren o es reanomenen" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Quan l'aplicació està en segon pla" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Deshabilita actualizació automàtica" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Actualitza la lista de fitxers" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "tfrmoptionsbehavior.cbalwaysshowtrayicon.caption" msgid "Al&ways show tray icon" msgstr "Mostra sempre icona de la safata" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Oculta automàticament unitats no carregades" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Mou la icona a la safata del sistema quan es minimitza" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "tfrmoptionsbehavior.cbonlyonce.caption" msgid "A&llow only one copy of DC at a time" msgstr "Només una còpia de Double Commander oberta" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aquí podeu introduir una o més unitats o punts de muntatge, separats per \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Llista &negra d'unitats" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa indicador de gradació" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Mode Binari" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Text:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicador de color de fons" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indica color de primer pla" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "tfrmoptionscolumnsview.cbcuttexttocolwidth.caption" msgid "Cut &text to column width" msgstr "Ajusta text a l'amplada de columna" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "tfrmoptionscolumnsview.cbgridhorzline.caption" msgid "&Horizontal lines" msgstr "Línies horitzontals" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "tfrmoptionscolumnsview.cbgridvertline.caption" msgid "&Vertical lines" msgstr "Línies verticals" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "tfrmoptionscolumnsview.chkautofillcolumns.caption" msgid "A&uto fill columns" msgstr "Omple automàticament les columnes" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostra la graella" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Mida automàtica de les columnes" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "tfrmoptionscolumnsview.lblautosizecolumn.caption" msgid "Auto si&ze column:" msgstr "Mida automàtica de columna:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "Edita" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "tfrmoptionsconfiguration.cbcmdlinehistory.caption" msgid "Co&mmand line history" msgstr "Historial d'ordres" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "tfrmoptionsconfiguration.cbdirhistory.caption" msgid "&Directory history" msgstr "Historial de carpetes" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "tfrmoptionsconfiguration.cbfilemaskhistory.caption" msgid "&File mask history" msgstr "Historial de màscares" #: tfrmoptionsconfiguration.chkfoldertabs.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Pestanyes de carpeta" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "tfrmoptionsconfiguration.chksaveconfiguration.caption" msgid "Sa&ve configuration" msgstr "Desa configuració" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "tfrmoptionsconfiguration.chksearchreplacehistory.caption" msgid "Searc&h/Replace history" msgstr "Història de Cerca/Reemplaçar" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption #, fuzzy msgctxt "tfrmoptionsconfiguration.gbdirectories.caption" msgid "Directories" msgstr "Carpetes" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Situació dels fitxers de configuració" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Desa en Sortir" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Defineix linia d'ordres" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "tfrmoptionsconfiguration.rbprogramdir.caption" msgid "P&rogram directory (portable version)" msgstr "Carpeta del programa (versió portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "tfrmoptionsconfiguration.rbuserhomedir.caption" msgid "&User home directory" msgstr "Carpeta d'usuari" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Esborra" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nou" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Anomena i desa" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Desa" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permet sobreexposició" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "General" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy #| msgid "Cursor Límitr" msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Límit del cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fons:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fons 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "tfrmoptionscustomcolumns.lblconfigcolumns.caption" msgid "&Columns view:" msgstr "Configura columnes per a sistema de fitxers:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Color de cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text de cursor:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Mida:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Color de text:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Color de la selecció:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Afegeix columna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nom:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Ruta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "&Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Demana confirmació després de deixar anar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostra fitxers del sistema" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostra espai lliure" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostra etiqueta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Llista d'unitats" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Segon pla" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Segon pla" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Desa" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributs d'element" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Primer pla" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Primer pla" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de text" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usa configuració d'esquema local" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Negreta" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Cursiva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Treu barrat" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Subratllat" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Retalla" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Enganxa" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Afegeix" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "Add" msgstr "Afegeix" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Avall" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edi&t" msgstr "Edita" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "&Insert" msgstr "" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Elimina" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Elimina" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Elimina" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Reanomena" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Amunt" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Accions" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipus de Fitxer" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action &name:" msgstr "Acció:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Comandament:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paràmetres" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ruta d'inici" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Edita" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Obre amb l'Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obtenir sortida de comandament" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Obre" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executa en el terminal" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Visualització" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Obre en el Visualitzador" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Icones" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostra finestra de confirmació per a..." #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operació de còpia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operació d'esborrament" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "tfrmoptionsfileoperations.cbdeletetotrash.caption" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "S'envia a la paperera (la tecla majúscula inverteix aquesta selecció)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Esborra l'operació a la paperera" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "tfrmoptionsfileoperations.cbdropreadonlyflag.caption" msgid "D&rop readonly flag" msgstr "Treure marca de només lectura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Operació de moviment" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "tfrmoptionsfileoperations.cbprocesscomments.caption" msgid "&Process comments with files/folders" msgstr "Processar comentaris amb Fitxers/carpetes" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostra la pestanya del panell seleccionat en el diàleg de Copia/Mou" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "tfrmoptionsfileoperations.cbskipfileoperror.caption" msgid "S&kip file operations errors and write them to log window" msgstr "Omet errors d'operació amb Fitxers i els escriu en una finestra de registre" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Executant operacions" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfície d'usuari" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamany de &buffer per a fitxer d'operacions (en KB)" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostra progrés d'operacions inicialment en" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de passos de neteja" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permet sobreexposició" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "tfrmoptionsfilepanelscolors.cbbuseframecursor.caption" msgid "Use &Frame Cursor" msgstr "Usa cursor emmarcat" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption" msgid "U&se Inverted Selection" msgstr "Usar selecció invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy #| msgid "Cursor Límitr" msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Límit del cursor" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fons" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption" msgid "Backg&round 2:" msgstr "Fons 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "tfrmoptionsfilepanelscolors.lblcursorcolor.caption" msgid "C&ursor Color:" msgstr "Color de cursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "tfrmoptionsfilepanelscolors.lblcursortext.caption" msgid "Cursor Te&xt:" msgstr "Text de cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption" msgid "&Brightness level of inactive panel:" msgstr "Nivell de brillantor del panell inactiu" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "tfrmoptionsfilepanelscolors.lblmarkcolor.caption" msgid "&Mark Color:" msgstr "Color de la selecció:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "tfrmoptionsfilepanelscolors.lbltextcolor.caption" msgid "T&ext Color:" msgstr "Color de text:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Cerca part del nom del fitxer" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfilesearch.gbfilesearch.caption #, fuzzy msgctxt "tfrmoptionsfilesearch.gbfilesearch.caption" msgid "File search" msgstr "Cerca de fitxers" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Usa mapatge en memòria per a cerca de text en fitxers" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Usa disc per a cerca de text en fitxers" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Per defecte" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatant" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Ordenant" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Sensibilitat a les Majúscules:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorrecte" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "tfrmoptionsfilesviews.lbldatetimeformat.caption" msgid "&Date and time format:" msgstr "Format de data i hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format de mida de fitxer:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "Insereix nou fitxer:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Ordena carpetes:" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "tfrmoptionsfilesviews.lblsortmethod.caption" msgid "&Sort method:" msgstr "Mètode d'ordenament:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Mou fitxers actualitzats:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "Afegeix" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "A&juda" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption" msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption" msgid "Do&n't load file list until a tab is activated" msgstr "No carrega la llista de fitxers fins que s'activi la pestanya" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgctxt "tfrmoptionsfilesviewscomplement.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mostra claudàtors quadrats per a les carpetes" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption" msgid "Hi&ghlight new and updated files" msgstr "Realça fitxers nous i actualitzats" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgctxt "tfrmoptionsfilesviewscomplement.cbinplacerename.caption" msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgctxt "tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Carrega llista de fitxers en procesos separats" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgctxt "tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Carrega les icones després de la llista de fitxers" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgctxt "tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostra fitxers Ocults/sistema" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgctxt "tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Quan es seleccioni Fitxers amb la barra d'espai, pasar al següent Fitxer (com amb <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption" msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption" msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgctxt "tfrmoptionsfilesviewscomplement.gbmarking.caption" msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgctxt "tfrmoptionsfilesviewscomplement.lbattributemask.caption" msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Esborra" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Tipus de colors de fitxers (Ordena amb drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryattr.caption" msgid "Category a&ttributes:" msgstr "Atributs de la categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "tfrmoptionsfiletypescolors.lblcategorycolor.caption" msgid "Category co&lor:" msgstr "Color de la categoria:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Màscara de la categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Nom de la categoria:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Fonts" #: tfrmoptionshotkeys.actaddhotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actaddhotkey.caption" msgid "Add &hotkey" msgstr "Afegeis drecera" #: tfrmoptionshotkeys.actcopy.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmoptionshotkeys.actdelete.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdelete.caption" msgid "Delete" msgstr "Esborra" #: tfrmoptionshotkeys.actdeletehotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actdeletehotkey.caption" msgid "&Delete hotkey" msgstr "Esborra drecera" #: tfrmoptionshotkeys.actedithotkey.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actedithotkey.caption" msgid "&Edit hotkey" msgstr "Edita drecera" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption #, fuzzy msgctxt "tfrmoptionshotkeys.actrename.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "tfrmoptionshotkeys.lbfilter.caption" msgid "&Filter" msgstr "Filtre" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Categories:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ordres:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "tfrmoptionshotkeys.lblscfiles.caption" msgid "&Shortcut files:" msgstr "Fitxers d'acció ràpida:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption #, fuzzy msgctxt "tfrmoptionshotkeys.micommands.caption" msgid "Command" msgstr "Comandament" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comandament" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Tecles ràpides" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descripció" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Tecles ràpides" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Paràmetres" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per les rutes següents i les seves subcarpetes:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostra icones per a accions als menús" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "tfrmoptionsicons.cbiconsshowoverlay.caption" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostra icones superposades. Exemple: per enllaços" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Desactiva icones especials" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "tfrmoptionsicons.gbiconssize.caption" msgid " Icon size " msgstr "Mida d'Icona" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr " Mostra icones a l'esquerra del nom" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Tot" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Totes les associacions + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Sense icones" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "tfrmoptionsicons.rbiconsshowstandard.caption" msgid "Only &standard icons" msgstr "Només icones estàndar" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "tfrmoptionsignorelist.btnaddsel.caption" msgid "A&dd selected names" msgstr "Afegeix noms seleccionats" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Afegeix noms seleccionats amb la ruta completa" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignora (no mostra) els següents fitxers i carpetes:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "Desa a:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Les fletxes esquerra/dreta canvien el directori (Com en Lynux)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Escrivint" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+L&etters" msgctxt "tfrmoptionskeyboard.lblalt.caption" msgid "Alt+L&etters:" msgstr "Al&t+Lletres:" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Le&tters" msgctxt "tfrmoptionskeyboard.lblctrlalt.caption" msgid "Ctrl+Alt+Le&tters:" msgstr "&Ctrl+Alt+Lletres:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Lletres:" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Botons plans" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "tfrmoptionslayout.cbflatinterface.caption" msgid "Flat i&nterface" msgstr "Interfície plana" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "tfrmoptionslayout.cbfreespaceind.caption" msgid "Show fr&ee space indicator on drive label" msgstr "Mostra l'espai lliure a l'etiqueta del disc" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "tfrmoptionslayout.cblogwindow.caption" msgid "Show lo&g window" msgstr "Finestra de registre" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Panell d'operació en segon pla" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Progrés en barra de menú" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "tfrmoptionslayout.cbshowcmdline.caption" msgid "Show command l&ine" msgstr "Mostra &línia d'ordres" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "tfrmoptionslayout.cbshowcurdir.caption" msgid "Show current director&y" msgstr "Mostra carpeta actual" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Mostra botons &d'unitats" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "tfrmoptionslayout.cbshowdrivefreespace.caption" msgid "Show free s&pace label" msgstr "Mostra la etiqueta de espai lliure" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostra botó amb llista d'unitats" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "tfrmoptionslayout.cbshowkeyspanel.caption" msgid "Show function &key buttons" msgstr "Mostra botons de tecla de &funció" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "tfrmoptionslayout.cbshowmainmenu.caption" msgid "Show &main menu" msgstr "Mostra menú principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy #| msgid "Show &button bar" msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show tool&bar" msgstr "Mostra barra de &botons" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostra petita etiqueta d'espai lliure" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Mostra barra de e&stat" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "tfrmoptionslayout.cbshowtabheader.caption" msgid "S&how tabstop header" msgstr "Mostra salts de tabulació" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Mostra &pestanyes de carpetes" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "tfrmoptionslayout.cbtermwindow.caption" msgid "Show te&rminal window" msgstr "Mostra finestra de terminal" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "tfrmoptionslayout.cbtwodiskpanels.caption" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Barra de &botons d'unitats (amplada fixa, sobre llista de fitxers)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr " Aparença de pantalla" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "tfrmoptionslog.cblogarcop.caption" msgid "&Pack/Unpack" msgstr "Comprimeix/Descomprimeix" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "tfrmoptionslog.cblogcpmvln.caption" msgid "Cop&y/Move/Create link/symlink" msgstr "Copia/Mou/Crea enllaç/enllaç simbòlic" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "Esborra" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "tfrmoptionslog.cblogdirop.caption" msgid "Crea&te/Delete directories" msgstr "Crea/Esborra carpetes" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Registra &errors" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "tfrmoptionslog.cblogfile.caption" msgid "C&reate a log file:" msgstr "Crea un Fitxer de registre:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "tfrmoptionslog.cbloginfo.caption" msgid "Log &information messages" msgstr "Registra missatges d'informació" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Registra operacions exito&ses" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "tfrmoptionslog.cblogvfs.caption" msgid "&File system plugins" msgstr "Complements de sistema de fitxers" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Registre de les operacions amb Fitxers" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registre de les operacions" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estat de les operacions" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Esborra miniatures de fitxers que ja no existeixen" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View configuration file content" msgstr "" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "tfrmoptionsmisc.chkdesccreateunicode.caption" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Sempre va a l'arrel de la unitat quan es canvia d'unitat" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostra missatges d'avís (només botó \"Accepta\")" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Desa miniatures en caché" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatures" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "tfrmoptionsmisc.lbldescrdefaultencoding.caption" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "píxels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Mida de les miniatures" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgctxt "tfrmoptionsmouse.cbselectionbymouse.caption" msgid "&Selection by mouse" msgstr "Selecció per ratolí" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Obre amb ..." #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Desplaçament" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecció" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "tfrmoptionsmouse.lblmousemode.caption" msgid "&Mode:" msgstr "Mode:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "tfrmoptionsmouse.rbscrolllinebyline.caption" msgid "&Line by line" msgstr "Número de línies" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "tfrmoptionsmouse.rbscrolllinebylinecursor.caption" msgid "Line by line &with cursor movement" msgstr "Linia a linia amb moviment de cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "tfrmoptionsmouse.rbscrollpagebypage.caption" msgid "&Page by page" msgstr "Pàgina a pàgina" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Configura" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Registre" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Elimina" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Ajusta" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Descripció" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fitxer" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Permet als complements de cerca l'us d'algoritmes de cerca alternatius o eines externes (com \"locate\", etc.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Els complements de compresors són utilitzats per treballar amb Fitxers." #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Ruta del complement" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Permet als complements de contingut mostrar detalls extesos del fitxer com les etiquetes mp3 o en llista de fitxer els atributs d'imatge, o usar-los amb les eines de cerca o de reanomenat múltiple" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Permet als complements de sistema de fitxers accedir a discos inaccessibles pel sistema operatiu o a aparells externs com palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Permet als complements de visionat mostrar fomats de fitxer com imatges, fulles de càlcul, bases de dades, etc. en Visualitza (F3, Ctrl+A)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption #, fuzzy msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&Començament (el nom ha de començar amb el primer caràcter)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nal (ha de coincidir el últim caràcter abans d'un punt . )" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Opcions" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Coincidència de nom exacte" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Us de Majúscules" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Recerca d'aquests elements" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activa &panell cuando es clica en una de les seves pestanyes" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Mostra pestanyes també si n'hi ha només una" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "tfrmoptionstabs.cbtabsconfirmcloseall.caption" msgid "Con&firm close all tabs" msgstr "&Confirma tancament de totes les pestanyes" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Limita títol pestanya a" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Mostra les pestanyes bloquejades amb un asterisc *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Pestanyes en varies linies" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up obre una nova pestanya en primer pla" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Obre una &nova pestanya al costat de l'actual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "tfrmoptionstabs.cbtabsshowclosebutton.caption" msgid "Show ta&b close button" msgstr "Mostra pestanya de botó de tancament" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Capçaleres de les pestanyes de carpeta" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "caràcters" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Posició de pestanyes\"" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "tfrmoptionsterminal.lbrunintermclosecmd.caption" msgid "Command:" msgstr "Comandament:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "tfrmoptionsterminal.lbrunintermcloseparams.caption" msgid "Parameters:" msgstr "Paràmetres:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopencmd.caption" msgid "Command:" msgstr "Comandament:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "tfrmoptionsterminal.lbrunintermstayopenparams.caption" msgid "Parameters:" msgstr "Paràmetres:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "tfrmoptionsterminal.lbruntermcmd.caption" msgid "Command:" msgstr "Comandament:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "tfrmoptionsterminal.lbruntermparams.caption" msgid "Parameters:" msgstr "Paràmetres:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Botó de clonació" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.btndeletebutton.caption" msgid "&Delete" msgstr "&Esborra" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Edita drecera" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insereix nou botó" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbarbase.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Un altre..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Esborra drecera" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botons plans" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Entra paràmetres de comandament, cadascun en una línia separada. Premeu F1 per veure l'ajuda sobre paràmetres" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgctxt "tfrmoptionstoolbarbase.gbgroupbox.caption" msgid "Appearance" msgstr "Aparença" #: tfrmoptionstoolbarbase.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption" msgid "&Bar size:" msgstr "Mida de Ba&rra" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Ordres:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paràmetres" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Drecera" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Icona" #: tfrmoptionstoolbarbase.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Mida ic&ones" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Comandaments" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgctxt "tfrmoptionstoolbarbase.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paràmetres" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ruta d'inici" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "Indicador de funció" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Tipus de botons" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Icones" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "tfrmoptionstoolbase.cbtoolskeepterminalopen.caption" msgid "&Keep terminal window open after executing program" msgstr "Manté oberta la finestra del terminal després d'executar el programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "tfrmoptionstoolbase.cbtoolsruninterminal.caption" msgid "&Execute in terminal" msgstr "Executa en el terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption" msgid "&Use external program" msgstr "Programa extern" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "tfrmoptionstoolbase.lbltoolsparameters.caption" msgid "A&dditional parameters" msgstr "Paràmetres addicionals" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "tfrmoptionstoolbase.lbltoolspath.caption" msgid "&Path to program to execute" msgstr "Ruta del programa a executar" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Copia" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Esborra" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Reanomena" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Altres..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostra informació emergent" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Atributs de la categoria:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Màscara de la categoria:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption #, fuzzy msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Color de cursor:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "tfrmoptionsviewer.lblnumbercolumnsviewer.caption" msgid "&Number of columns in book viewer" msgstr "Número de columnes en vista de llibre" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configura" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Comprimeix fitxers" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Crea fitxers separats, u&n per Fitxer/carpeta" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crea fitxer autoe&xtraible" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Mou &original(s) a fitxer Comprimit" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Fitxer de disc &múltiple" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Insereix primer en un fitxer TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Incloure noms de car&petes (només recursiu)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimeix en el fitxer:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressor" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimeix tot i executa" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimeix i executa" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Propietats del fitxer Comprimit" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributs:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Ratio de compressió:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Mètode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Mida orginal:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fitxer:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Mida Comprimit:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Temps:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensibilitat a Majúscules" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Carpetes" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fitxers" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Començament l'acció" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Final de l'acció" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filtre" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Canvi entre recerca i filtre" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Complement" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "" #: tfrmselectduplicates.btncancel.caption #, fuzzy msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmselectduplicates.btnexcludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmselectduplicates.btnincludemask.hint #, fuzzy msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmselectduplicates.btnok.caption #, fuzzy msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Accepta" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text #, fuzzy msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancel·la" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Accepta" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancel·la" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Accepta" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Canvia atributs" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adhesiu" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Fitxer" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creat:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Ocult" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Accedit:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Modificat:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Només lectura" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Incloent subcarpetes" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propietats de la data" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(camp gris significa valor sense canvi)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execució" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(camp gris significa valor sense canvi)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriptura" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Cancel·la" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Accepta" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Separador" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Mida" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory &target" msgid "Split the file to directory:" msgstr "Ruta de desti" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Número de parts" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Fet" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisió" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versió" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Crea enllaç Simbòlic" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destí (on s'enllaçarà)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom de l'enllaç" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Tanca" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Compara" #: tfrmsyncdirsdlg.btnsearchtemplate.hint #, fuzzy msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy #| msgid "*.*" msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Mida" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Mida" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Compara" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint" msgid "Configuration of Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint" msgid "Configuration of Tree View Menu Colors" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Afegeix nou" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Canvia" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Per defecte" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "Accepta" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Elimina" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Connecta complement" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "Detecta tipus de fitxer per contingut" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Podeu Esborrar Fitxers" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Suporta encriptació" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostra com Fitxers normals (oculta icona Comprimida)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Suporta compressió en memòria" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify existing archives" msgid "Can &modify existing archives" msgstr "Podeu modificar els fitxers existents" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "El fitxer pot contenir múltiples fitxers" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Podeu crear nous fitxers" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Suporta la finestra de diàleg amb opcions" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Permet Cerca de text dins dels fitxers" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Descripció:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "Detectar cadena:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Extensió:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Banderes:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Nom:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Complement:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "Complement:" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Quant al Visualitzador..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra el missatge Quant a" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Copia fitxer" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "Copia fitxer" #: tfrmviewer.actcopytoclipboard.caption #, fuzzy msgctxt "tfrmviewer.actcopytoclipboard.caption" msgid "Copy To Clipboard" msgstr "Copia al portapapers" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Esborra fitxer" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "Esborra fitxer" #: tfrmviewer.actexitviewer.caption #, fuzzy msgctxt "tfrmviewer.actexitviewer.caption" msgid "E&xit" msgstr "&Surt" #: tfrmviewer.actfind.caption #, fuzzy msgctxt "tfrmviewer.actfind.caption" msgid "Find" msgstr "Cerca" #: tfrmviewer.actfindnext.caption #, fuzzy msgctxt "tfrmviewer.actfindnext.caption" msgid "Find next" msgstr "Cerca següent" #: tfrmviewer.actfindprev.caption msgctxt "tfrmviewer.actfindprev.caption" msgid "Find previous" msgstr "" #: tfrmviewer.actfullscreen.caption #, fuzzy msgctxt "tfrmviewer.actfullscreen.caption" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "" #: tfrmviewer.actimagecenter.caption msgctxt "tfrmviewer.actimagecenter.caption" msgid "Center" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Següent" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Carrega següent fitxer" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Anterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carrega el fitxer previ" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint #, fuzzy msgctxt "tfrmviewer.actmirrorhorz.hint" msgid "Mirror" msgstr "Mirall" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Mou fitxer" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "Mou fitxer" #: tfrmviewer.actpreview.caption #, fuzzy msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Vista prèvia" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Recarrega" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recarrega fitxer actual" #: tfrmviewer.actrotate180.caption #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.caption" msgid "+ 180" msgstr "Rotació de 180" #: tfrmviewer.actrotate180.hint #, fuzzy #| msgid "Rotate 180" msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180 degrees" msgstr "Rotació de 180" #: tfrmviewer.actrotate270.caption #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.caption" msgid "- 90" msgstr "Rotació de 270" #: tfrmviewer.actrotate270.hint #, fuzzy #| msgid "Rotate 270" msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate -90 degrees" msgstr "Rotació de 270" #: tfrmviewer.actrotate90.caption #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.caption" msgid "+ 90" msgstr "Rotació de 90" #: tfrmviewer.actrotate90.hint #, fuzzy #| msgid "Rotate 90" msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate +90 degrees" msgstr "Rotació de 90" #: tfrmviewer.actsave.caption #, fuzzy msgctxt "tfrmviewer.actsave.caption" msgid "Save" msgstr "Desa" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Desa com..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Anomena i desa" #: tfrmviewer.actscreenshot.caption #, fuzzy msgctxt "tfrmviewer.actscreenshot.caption" msgid "Screenshot" msgstr "Captura" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "" #: tfrmviewer.actselectall.caption #, fuzzy msgctxt "tfrmviewer.actselectall.caption" msgid "Select All" msgstr "Selecciona tot" #: tfrmviewer.actshowasbin.caption #, fuzzy msgctxt "tfrmviewer.actshowasbin.caption" msgid "Show as &Bin" msgstr "Mostra com &Binari" #: tfrmviewer.actshowasbook.caption #, fuzzy msgctxt "tfrmviewer.actshowasbook.caption" msgid "Show as B&ook" msgstr "Mostra com un llibre" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "" #: tfrmviewer.actshowashex.caption #, fuzzy msgctxt "tfrmviewer.actshowashex.caption" msgid "Show as &Hex" msgstr "Mostra com &Hex" #: tfrmviewer.actshowastext.caption #, fuzzy msgctxt "tfrmviewer.actshowastext.caption" msgid "Show as &Text" msgstr "Mostra com &Text" #: tfrmviewer.actshowaswraptext.caption #, fuzzy msgctxt "tfrmviewer.actshowaswraptext.caption" msgid "Show as &Wrap text" msgstr "Ajusta linies" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption #, fuzzy msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Gràfics" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption #, fuzzy msgctxt "tfrmviewer.actshowplugins.caption" msgid "Plugins" msgstr "Complements" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Aprima" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.actstretchonlylarge.caption msgctxt "tfrmviewer.actstretchonlylarge.caption" msgid "Stretch only large" msgstr "" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Desfà" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Desfà" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption #, fuzzy msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Apropar" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "" #: tfrmviewer.actzoomout.caption #, fuzzy msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Allunya" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Retalla" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realça" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibuixa" #: tfrmviewer.btnpenwidth.caption #, fuzzy msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ulls Vermells" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Canvia mida" #: tfrmviewer.btnslideshow.caption #, fuzzy msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Diapositives" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visualitzador" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificació" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fitxer" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imatge" #: tfrmviewer.mipen.caption #, fuzzy msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Llapis" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Rota" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visualització" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Complements" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Inicia" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operacions amb fitxers" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmviewoperations.mnunewqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova cua" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Cua" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Cua 1" #: tfrmviewoperations.mnuqueue2.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Cua 2" #: tfrmviewoperations.mnuqueue3.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Cua 3" #: tfrmviewoperations.mnuqueue4.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Cua 4" #: tfrmviewoperations.mnuqueue5.caption #, fuzzy msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Cua 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "Segueix enllaços" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Quan la carpeta existeixi" #: tgiocopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: ttfrmconfirmcommandline.btncancel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: ttfrmconfirmcommandline.btnok.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Accepta" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption #, fuzzy msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Paràmetres:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Configura" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption #, fuzzy msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Encr&iptar" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption #, fuzzy msgctxt "twfxplugincopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Copia Data/Hora" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Treballa al fons" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quan el fitxer existeix" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Alt" #: uexifreader.rsimagewidth #, fuzzy msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Amplada" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancel·la el filtre ràpid" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancel·la l'operació current" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "El portapapers no conté dades d'una barra d'eines vàlida" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nom" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Mida" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinia" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Text" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Esborra" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Continguts de camps" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mou" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Amplada" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Columna personalitzada" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdifftextdifferenceencoding #, fuzzy msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Codificació" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Av&orta" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Tots" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Afegeix" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancel·la" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continua" #: ulng.rsdlgbuttoncopyinto #, fuzzy #| msgid "Copy &Into" msgid "&Merge" msgstr "Copia dins" #: ulng.rsdlgbuttoncopyintoall #, fuzzy #| msgid "Copy Into &All" msgid "Mer&ge All" msgstr "Copia tot a dins" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Surt del programa" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignora-ho tot" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Cap" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Accepta" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Sobrescriu" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sobr. &Tot" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sobr. antics" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Reanomena" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Reprèn" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Reintenta" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Omet" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Omet Tots" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Si" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copia fitxer(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mou Fitxer(s)" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pausa" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Inicia" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Cua" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Velocitat %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format, fuzzy #| msgid "Speed %s/s, time remaining s%" msgid "Speed %s/s, time remaining %s" msgstr "Velocitat %s/s, temps restant %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Indicador de l'espai lliure de la unitat" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor intern de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "nou.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nom de fitxer:" #: ulng.rseditnewopen msgid "Open file" msgstr "Obre Fitxer" #: ulng.rseditsearchback msgid "&Backward" msgstr "Enrera" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Cerca" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Endavant" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Reemplaçar" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Filtre" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Defineix plantilla" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s nivell(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Tot (profunditat sense límits)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "només carpeta actual" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "¡La carpeta %s no existeix!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Trobat: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Desa platilla de cerca" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nom de plantilla:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Trobats: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Cercant" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Cerca fitxers" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Inicia a" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Font de l'Editor" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Font de Registre" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Font Principal" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Font de Visualització" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Font de Vista de Llibre" #: ulng.rsfreemsg #, object-pascal-format, fuzzy msgid "%s of %s free" msgstr " %s de %s lliures" #: ulng.rsfreemsgshort #, object-pascal-format, fuzzy msgid "%s free" msgstr "%s lliures" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/temps d'acces" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributs" #: ulng.rsfunccomment msgid "Comment" msgstr "Comentari" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Mida comrpimida" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "data/temps de creació" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Extensió" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Enllaça a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/temps de modificació" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nom" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nom sense extensió" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propietari" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ruta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Mida" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Tipus" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Error creant l'enllaç fort" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Copia/mou dialeg" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differ(comparador)" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Cerca fitxers" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Reanomenat múltiple" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualitzador" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Màscara a deselecció" #: ulng.rsmarkplus msgid "Select mask" msgstr "Màscara de Selecció" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Màscara d'entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configura columnes a mida" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Accions" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Edita" #: ulng.rsmnueject msgid "Eject" msgstr "Expulsa" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Munta" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nou" #: ulng.rsmnunomedia msgid "No media available" msgstr "No hi ha cap medi disponible" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Obre" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Obre amb ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Un altre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnurestore #, fuzzy msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Restaura" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordena" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmunta" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Visualització" #: ulng.rsmsgaccount msgid "Account:" msgstr "Compte:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Paràmetres addicionals per a la linia d'ordres de l'arxivador:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "No es pot copiar/moure un Fitxer \"%s\" dins d'ell mateix" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Impossible canviar a [%s]!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "¿Tanca totes les pestanyes inactives?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Aquesta pestanya (%s) està blocada! La tanco? " #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Copia %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Esborra %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Envia %d Fitxers/carpetes seleccionats a la paperera?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Esborra \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Envia \"%s\" a la paperera?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "No puc enviar \"%s\" a la paperera!¿Ho esborro directament?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disc no disponible" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduiu l'extensió del fitxer:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduiu el nom:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Error de CRC en les dades" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dades corruptes" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "No puc connectar amb el servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "No puc Copiar el fitxer %s a %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Ja existeix una carpeta anomenada \"%s\"." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "La data %s no es suporta" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "La carpeta %s ja existeix!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funció abortada per l'usuari" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Error tancant el fitxer" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossible Crea el fitxer" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "No hi ha més Fitxers a l'arxiu" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossible Obre el fitxer existent" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Error llegint del fitxer" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Error escrivint en el fitxer" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "No es pot crear la carpeta %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Enllaç no vàlid" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "No s'han trobat Fitxers" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memòria insuficient" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funció no suportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Error en el context del menú de comandament" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Error carregant configuració" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Error de sintaxi en expresió regular!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "No es pot reanomenar el fitxer %s a %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "No es pot desar l'associació" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "No es pot desar el fitxer" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "No es pot fixar atributs per \"%s" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "No es pot fixar data/temps per \"%s" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "No es pot establir el propietari/grup de \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer massa petit" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Massa fitxers per comprimir!" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format de fitxer desconegut" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "%s ha canviat, Desa?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "%s existeix ¿sobreescriure" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operacions de fitxer actives" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algunes operacions de fitxer no han acabat encara. Si tanca Double Commander pot perdre dades." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format, fuzzy #| msgid "File %s is marked as read-only. Delete it?" msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "El fitxer %s s'ha marcat com de només lectura, l'esborro?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La Mida del fitxer de \"%s\" és massa gran per al seu destí!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format, fuzzy #| msgid "Folder %s exists, overwrite?" msgid "Folder %s exists, merge?" msgstr "La carpeta %s existeix, la sobreescric?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "¿Segueis l'enllaç simbòlic \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "Ruta:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand #, fuzzy msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comandament:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "Nom:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Error a la línia d'ordres" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nom no vàlid" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format invàlid de fitxer de configuració" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta invàlida" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "La ruta %s conté caràcters prohibits" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Aquest no és un complement vàlid" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Cita invàlida" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selecció no vàlida" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Carregant la llista de fitxers ..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Copia fitxer %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Esborra fitxer %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Error: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Extreu Fitxer %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informació: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Crea enllaç %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Crea carpeta %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Mou Fitxer %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Comprimeix en fitxer %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Elimina carpeta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fet: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Crea enllaç Simbòlic %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Examinar la integritat del fitxer %s" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Contrasenya mestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Per favor, introduiu la contrasenya mestra:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nou Fitxer" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Es descomprimirà el següent volum" #: ulng.rsmsgnofiles msgid "No files" msgstr "No hi ha fitxers" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Cap fitxer seleccionat." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espai insuficient en disc de destí, Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espai insuficient en disc de destí, Reintentar?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Impossible Esborra %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "No implementat" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Contrasenya:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Passwords son diferents" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Per favor, introduiu la contrasenya:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Contrasenya (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Si us plau torneu a escriure el password de verificació" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Esborra %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "La configuració \"%s\" ja exiteix.¿Sobreescriure?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Reanomena/Mou %d fitxers/carpetes seleccionats?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Reanomena/Mou \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Per favor, reinicieu Double Commander per aplicar els canvis" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Seleccionat: %s de %s, fitxers: %d de %d, carpetes: %d de %d\"" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Per favor, seleccioneu només fitxers de comprovació" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Escull localització del següent volum" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Posa etiqueta al volum" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Reanomena pestanya" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nom de la nova pestanya:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ruta destí:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Massa fitxers seleccionats." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Nom d'usuari:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nom d'usuari (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etiqueta del Volum:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Si us plau, introduiu el nom del volum:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Destrueix %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Destrueix \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Comptador" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Data" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Extensió" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Nom" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sense canvis;MAJÚSCULES;minúscules;Primera Majúscula;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Reanomenat múltiple" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Extensió" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Extensió" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Comptador" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Dia" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Extensió" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Hora" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Minut" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Mes" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Mes (2 digits)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Nom del mes (abreujat, e.g., \"jan\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Nom del mes (llarg, e.g., \"january\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Nom" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Segon" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Any" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Any (4 dígits)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Complements" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Hora" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics #, fuzzy msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Gràfics" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork #, fuzzy msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Xarxa" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother #, fuzzy msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Altres" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem #, fuzzy msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Sistema" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Interromput" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calculant" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Calculant \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Copiant" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Copiant \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creant directori" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Creant directori \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Esborrant" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Esborrant en \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Esborrant \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Executant" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Executant \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extreient" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Extraient de \"%s\" a \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Finalitzat" #: ulng.rsoperlisting msgid "Listing" msgstr "Llistant" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Llistant \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Movent" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Movent from \"%s\" to \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Movent \"%s\" to \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "No iniciat" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausat" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausant" #: ulng.rsoperrunning msgid "Running" msgstr "Funcionant" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "Iniciant" #: ulng.rsoperstopped msgid "Stopped" msgstr "Parat" #: ulng.rsoperstopping msgid "Stopping" msgstr "Parant" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, object-pascal-format, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verificació del checksum de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Esperant per accedir al fitxer" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Esperant per la resposta del usuario" #: ulng.rsoperwiping msgid "Wiping" msgstr "Netejant" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Netejant a \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Netejant \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Treballant" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nom del tipus de fitxer:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Complement associat \"%s\" con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primer;Últim;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduir extensió" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "finestra diferent; finestra diferent minimitzada; panell d'operacions" #: ulng.rsoptfilesizefloat msgid "float" msgstr "flotant" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Drecera %s per a cm_Delete es registrarà, així es podrà utilitzar per revertir aquest ajust." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Afegeix drecera per a %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Afegeix accés directe" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "No es pot establir l'accés directe" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Canvia l'accés directe" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comandament" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Drecera %s per a cm_Delete té un paràmetre que anul·la aquesta configuració. Voleu canviar aquest paràmetre per utilitzar la configuració global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Drecera %s per a cm_Delete necessita canviar un paràmetre perquè coincideixi amb l'accés directe %s. El voleu canviar?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descripció" #: ulng.rsopthotkeysedithotkey #, object-pascal-format, fuzzy, badformat msgid "Edit hotkey for %s" msgstr "Fixa Tecles ràpides" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fixa paràmetres" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Tecles ràpides" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Tecles ràpides" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<res>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paràmetres" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Tria drecera per esborrar fitxer" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Perque aquesta configuració funcioni amb la drecera %s, la drecera %ss'ha d'assignar a cm_Delete però ja està assignada a %s. Ho voleu canviar?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "La drecera %s per a cm_Delete és una sequènciae de drecera per a la quals una tecla d'accés directe amb la tecla shift invertidat no es pot assignar. Aquesta configuració no funciona." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Drecera en us" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "La Drecera %s ja el fa servir " #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Canviar-lo a %s ?" #: ulng.rsopthotkeysusedby #, object-pascal-format, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "Usat per %s %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usat per aquest comandament, però amb diferents paràmetres" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Compressors" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Actualitza" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportament" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Reduïda" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Colors" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Columnes" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuració" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Personalitza columnes" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Carpetes freqüents" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag & drop (Arrossega i deixa anar)" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Butó llista d'unitats" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associacions de fitxers" #: ulng.rsoptionseditorfilenewfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Nou" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operacions amb fitxers" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panells de fitxers" #: ulng.rsoptionseditorfilesearch #, fuzzy msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Cerca de fitxers" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visualitzadors de fitxers" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipus de fitxers" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Pestanyes de carpeta" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fonts" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Realçats" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Tecles ràpides" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icones" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignora llista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tecles" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Aparença" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Registre" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Varis" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ratolí" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Reanomenat múltiple" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Complements" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Cerca ràpida" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra d'eines" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Eines" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Informació emergent" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Res;Línia de comandaments;Cerca ràpida;Filtre ràpid" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botó esquerra; Botó dret;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "a la part superior de la llista de fitxers;després de directoris (si els directoris s'ordenen abans que els arxius);en la posició ordenada;a la part inferior de la llista de fitxers " #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "El complement %s s'ha assignat ja a la següent extensió:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Deshabilita" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Registre" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actiu" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Descripció" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ruta del complement" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nom" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrat per a" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensitiu;&No sensitiu" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fitxers;Di&rectoris;Fitxers &i Directoris" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&amaga el panell de filtre quan no se centra" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "No sensitiu majúscules/minúscules, d'acord amb les opcions locals (aAbBcC); primer majúscules, després minúscules (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Ordena per nom i mostra primer; ordena com a fitxer i mostra primer; Ordena com a fitxer" #: ulng.rsoptsortmethod #, fuzzy #| msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Alfabèticament, considerant accents; Ordre natural: alfabètic i números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Amunt;Avall;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comandament inte&rn;Comandament e&xtern;Men&ú" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "Nom de la categoria:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "No canvia posició; usa la mateixa configuració per a nous fitxers; a la posició ordenada " #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Fitxers: %d, Carpetes: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "No es pot canviar els drets d'accés per \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "No es pot canviar el Propietari per \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fitxer" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Carpeta" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Caanalització del nom" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Fitxer de blocs especial" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Fitxer de caràcter especial" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Enllaç simbòlic" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipus desconegut" #: ulng.rssearchresult msgid "Search result" msgstr "Cerca resultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Cerca" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<Plantilla sense nom" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Escull una carpeta" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "Mo&stra Ajuda per a %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tot" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comandament" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "Fitxers" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fitxers: %d, Carpetas: %d, Mida: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "No s'ha pogut Crea carpeta al destí!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Format de Mida incorrecte!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossible dividir el fitxer!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "La quantitat de parts es superior a 100! ¿Voleu continuar?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Escull carpeta:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Error creant l'enllaç simbòlic." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Text per defecte" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Text pla" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dia(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mes(es)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segon(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Setmana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Any(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differ(comparador)" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Error obrint comparador" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Error obrint l'Editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Error obrint Terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Error obrint el Visualitzador" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualitzador" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Si us plau, informeu d'aquest error al programador amb una descripcio del que estaveu fent: %sPremeu %s per continuar o %s per avortar el programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Xarxa" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualitzador intern de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificant" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova Mida" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s no trobat!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" ��������doublecmd-1.1.30/language/doublecmd.bg.po�����������������������������������������������������������0000644�0001750�0000144�00001352611�15104114162�017246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2025-04-15 09:40+0300\n" "Last-Translator: Превод от 15.IV.2025 за Double Commander Version: 1.1.23 gamma <sstpr@narod.ru>\n" "Language-Team: Language <sstpr@narod.ru>\n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: български\n" "X-Generator: Poedit 3.6\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Сравняване... %d%% (ESC за отказ)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Дясно: Изтриване на %d файл(а)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Намерини файлове: %d (еднакви: %d, различни: %d, неповтарящи отляво: %d, неповтарящи отдясно: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Отляво надясно: Презапис на %d файла с общ размер : %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Отдясно наляво: Презапис на %d файла с общ размер: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Избор на шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Проверка на свободното &пространство" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Презапис на &принадлежностите" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Презапис на &собствеността" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Презапис на &разрешенията" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Презапис на &времето и датата" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Поправяне на в&ръзките" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Изоставяне на стяга „само за четене“" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Из&ключване на празните папки" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Следване на връзките" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Запазване на &място" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Проверка" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Действие, при невъзможност за задаване на време, принадлежности и т.н." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Когато &папката съществува" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Когато &файлът съществува" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<няма шаблон>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Затваряне" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Запомняне" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "За" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Постройка" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашна страница:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Преработка" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Издание" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Отказ" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&Добре" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "О&чистване" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Изберете принадлежности" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Архив" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Уп&лътнен" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Папка" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Криптиран" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "С&крит" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "Само за &четене" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Лепкав" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Мека връзка" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "&Системен" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Временен" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Принадлежности по NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Об щи принадлежности" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Разряда:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Група" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Друго" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Собственик" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Изпълняване" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Запис" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Като &текст:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Четене" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Отпечатък" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Време, мс" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Скорост, МБ/с" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Изчисляване на проверочен сбор..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Съз&даване на отделни проверочни сборове за всички файлове" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Съхраняване на файла/овете с проверочните сборове в:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "Unix" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "Windows" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Сверяване на проверочен сбор..." #: tfrmchooseencoding.caption msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Знаков набор" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "&Добавяне" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Закачане" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "Из&триване" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "Об&работка" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Управител на свързванията" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Закачане към:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Добавяне към опашка" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Въз&можности" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Съхраняване на настройките като подразбирани" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Презапис на файл(ове)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Нова опашка" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Опашка 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Опашка 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Опашка 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Опашка 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Опашка 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Запис на описанието" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Бележки за файл/папка" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Про&мяна на бележката за:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "&Знаков набор:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Автоматично сравняване" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Двоичен режим" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Отказ" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Отказ" #: tfrmdiffer.actcopylefttoright.caption #, fuzzy msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Замяна в дясното крило със съдържанието от лявото" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Замяна в дясното крило със съдържанието от лявото" #: tfrmdiffer.actcopyrighttoleft.caption #, fuzzy msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Замяна в лявото крило със съдържанието от дясното" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Замяна в лявото крило със съдържанието от дясното" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Запомняне" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Изрязване" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Изтриване" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Поставяне" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Връщане" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Връщане" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Избор на вси&чко" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Отмяна" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Отмяна" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Из&ход" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Търсене" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Търсене" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Намиране на следващо" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Намиране на следващо" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Намиране на предходно" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Намиране на предходно" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Замяна" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Замяна" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Първа разлика" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Първа разлика" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Отиване на ред..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Отиване на ред" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Пренебрегване на ГЛавноСТта" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Пренебрегване на празните знаци" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Съгласувано превъртане" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Последна разлика" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Последна разлика" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Изтъкване на разликите в редовете" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Следваща разлика" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Следваща разлика" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Отваряне в лявото крило..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Отваряне в дясното крило..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Използване на подцветка" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Предходна разлика" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Предходна разлика" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Презареждане" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Презареждане" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Съхраняване" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Съхраняване" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Съхраняване като..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Съхраняване като..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Съхраняване на съдържанието на лявото крило" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Съхраняване на съдържанието на лявото крило" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Съхраняване на съдържанието на лявото крило като..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Съхраняване на съдържанието на лявото крило като..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Съхраняване на съдържанието на дясното крило" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Съхраняване на съдържанието на дясното крило" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Съхраняване на съдържанието на дясното крило като..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Съхраняване на съдържанието на дясното крило като..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Сравняване" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Сравняване" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Знаков набор" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Знаков набор" #: tfrmdiffer.caption msgid "Compare files" msgstr "Сравняване на файлове" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Ляво" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Дясно" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Действия" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Об&работка" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Знаков набор" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "Въз&можности" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "За" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Настройка" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Настройка" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Запомняне" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Изрязване" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Изтриване" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Търсене" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Търсене" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Намиране на следващо" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Намиране на следващо" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Намиране на предходно" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Отиване на ред..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Мак (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Мак (Cr)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CrLf)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Юникс (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Юникс (Lf)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Поставяне" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Връщане" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Връщане" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Замяна" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Замяна" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Избор на вси&чки" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Избор на всички" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отмяна" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Отмяна" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Затваряне" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Изход" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Нов" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Нов" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Отваряне" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Отваряне" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Презареждане" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Съхраняване" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Съхраняване" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Съхраняване &като..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Съхраняване &като" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Обработчик" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "Помо&щ" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Обработка" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Знаков набор" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Отваряне като" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Съхраняване като" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Синтактично подчертаване" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Край на реда" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Отчитане на &глаВноСТта" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Търсене на&долу" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Обичайни изрази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Само избрания &текст" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Само цели думи" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Възможност" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Замяна с:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Търсене от:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Посока" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Извличане на файлове" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Разгъване на имената на пътищата, ако са съхранени във файловете" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Разгъване на всеки архив в отделна папка (според името на архива)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Замяна на съществуващите файлове" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Извличане на файл в:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Извличане на файловете, отговарящи на пресяването:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Парола за кодираните файлове:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Изчакване..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Файлово име:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "От:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "В &крилото" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Показване на вси&чки" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Текущо действие:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "От:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "В:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Свойства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепкав" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Разряда:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Текст:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Съдържа:" #: tfrmfileproperties.lblcreatedstr.caption msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Саздаден:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изпълнение" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Изпълняване:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Файлово име" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Път:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Група" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Последно използване:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Последна промяна:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Последна промяна на състоянието:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "Връзки:" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Осмично:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "Со&бственик" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Запис" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "Заето пространство:" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Мека връзка към:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Вид:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Стойност" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Принадлежности" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Приставки" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Затваряне" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Прекратяване" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Отключване" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Отключване на всички" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Отключване" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "&Отказ" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Прекратяване на търсенето и затваряне на прозореца" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "Настройка на клавишните съчетания" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "Об&работка" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "О&тиване до файл" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Търсене на данни" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Последно търсене" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Ново търсене" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Отиване на страница „Разширени‟" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Отиване на страница „Зареждане/съхраняване‟" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Отиване на страница „Приставки‟" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Отиване на страница „Резултат‟" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Отиване на страница „Обичайна‟" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "На&чало" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "Из&глед" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавяне" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Съхраняване" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "За&реждане" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Съхраняване" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Търсене на файлове" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Отчитане на глАВноСТта" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Дата &от:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Дата &до:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Файлов &размер от:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Файлов раз&мер до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Търсене в &архиви" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Търсене във файл" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Следване на &меките връзки" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Търсене на файлове &НЕсъдържащи текста" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Не по- &стар от:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "Отворени подпрозорци" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Търсене за &част от името" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "&Обичайни изрази" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "За&мяна с" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Време &от:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Време &до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Използване на приставка за търсене:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Приставка" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Стойност" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Папки" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файлове" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Търсене на данни" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Прин&адлежности" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Знаков &набор:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Изключване на &подпапките" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Изключване на &файловете" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Файл" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Започване в &папка" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Търсене на по&дпапки:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Пре&дишни търсения:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Отваряне в нов подпрозорец/ци" #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "Възможности" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Изтриване от списъка" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Показване на всички намерени предмети" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Показване в обработчика" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Показване в прегледа" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "Из&глед" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Разширени" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Зареждане/ Съхраняване" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Приставки" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Намерено" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Обичайно" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Търсене" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Търсене" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Отчитане на &глаВНостТА" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Обичайни изрази" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Парола:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Потребителско име:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Създаване на твърда връзка" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "Съществуваща &цел, към която да сочи връзката" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "&Име на връзката" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Внасяне на всички!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Внасяне на избраните" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Избиране на предметите за внасяне" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Съхраняване в..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Предмет" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "Файлово &име" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "На&долу" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Надолу" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Пре&махване" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Изтриване" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "На&горе" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Нагоре" #: tfrmmain.actabout.caption msgid "&About" msgstr "&За" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Добавяне името на файла в командния ред" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Нов прозорец за търсене..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Добавяне на пътя и файловото име в командния ред" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Преписване на пътя в реда управление" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Добавяне на приставка" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Съкратен изглед" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Съкратен изглед" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Изчисляване на &заетото място" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Смяна на папката" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Отиване в домашната папка" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Папка нагоре" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "В основната папка" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Изчисляване на проверочен &сбор..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "&Потвърждаване на проверочен сбор..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Изчистване на дневника" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Изчистване на прозореца на дневника" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Затваряне на вси&чки подпрозорци" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Затваряне на повтарящите се подпрозорци" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Затваряне на подпрозореца" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Пълен" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Стълбов изглед" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Сравняване по &съдържание" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Сравняване на папките" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Сравняване на папките" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Настройка на предпочитаните папки" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Настройка на предпочитаните подпрозорци" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Настройка на подпрозорците за папките" #: tfrmmain.actconfighotkeys.caption #, fuzzy msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Настройка на клавишните съчетания" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Съхраняване на разположението" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Съхраняване на настройките" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Настройка на търсенията" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Лента с пособия..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Настройка на подсказките" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Настройка на дървовидния изглед" #: tfrmmain.actconfigtreeviewmenuscolors.caption #, fuzzy msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Настройка на цветовете на дървовидния изглед" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показване на изскачащ изборник" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Презапис на всички подпрозорци от другата страна" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Запомняне на всички из§брани стълбове" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Запомняне на файловото/ите име/на и пълния &път" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Запомняне на &файловото/ите име/на в кошницата" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Запомняне на имената с UNC път" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Презапис на файловете без искане на потвърждение" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Запомняне на пълния път на избрания файл(ове)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Презапис в същото крило" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Запомняне" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Показване на заетото място" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Изрязване" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Дневник на папката" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Бързодостъпни папки" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Изпълняване на &вътрешна заповед..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Обработка" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Промяна на &бележката..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Обработка на нов файл" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Обработка на полето за пътя над файловия списък" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Размяна на &крилата" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Из&вличане на файлове..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Настройка на файловите об&вързвания" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "С&глобяване на файлове..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Показване на &свойствата на файла" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Раз&дробяване на файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Плосък изглед" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Сочене на реда за управление" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Създаване на &твърда връзка..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Съ&държание" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Водоравно подреждане на крилата" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Клавиатура" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ляво &= дясно" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Първо се отваря лявото крило" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Зареждане на подпрозорци от списък с предпочитания" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Зареждане на списък" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Зареждане на отбелязването от ко&шницата" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Зареждане на отбелязването от файл..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Зареждане на подпрозорци от файл" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "&Нова папка" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Избор на всички със същото раз&ширение" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Избиране на всички файлове с еднакви имена" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Избиране на всички файлове с еднакви имена и разширения" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Избиране на всички със същия път" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "О&бръщане на избора" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Избор на вси&чки" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "С&немане на избора от група..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Избор на &група..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "С&немане на избора от всички" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Смаляване на прозореца" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "&Множествено преименуване" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Зака&чане към мрежа..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Разкачане от мрежа" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Бързо зака&чане към мрежа..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Нов подпрозорец" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Преминаване на следва&щия подпрозорец" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Отваряне" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Опит за отваряне на файл" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Отваряне на файл за ленти с пособия" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Отваряне на &папката в нов подпрозорец" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Отваряне на &VFS списък" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Преглед на &действията" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Въз&можности..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Сбиване на файлове..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Задаване на положението на разделителя" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Поставяне" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Преминаване към пред&ходния подпрозорец" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Бързо пресяване" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Бързо търсене" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Крило за &бърз преглед" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "О&пресняване" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Презареждане на последния зареден списък с предпочитания" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Местене" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Местене/ преименуване без искане на потвърждение" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Преименуване" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Пре&именуване на подпрозореца" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Съхраняване на текущите подпрозорци в последния зареден списък с предпочитания" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Въз&становяване на отбелязването" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "О&бръщане на реда" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Съкратен преглед в дясното крило" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Десен &= Ляв" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Първо се отваря дясното крило" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Отваряне на &терминала" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Съхраняване на текущите подпрозорци в нов списък с предпочитания" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Съхраняване на от&белязването" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Съхраняване на отбелязването във &файл..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Съхраняване на подпрозорците във файл" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Търсене..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Промяна на &принадлежностите..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Заключен, с отваряне на папките в нови подпрозор&ци" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обикновен" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Заключен" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Заключен, с разрешена смяна на &папката" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Отваряне" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показване на изборници на копчетата" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Показване на дневник на реда управление" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Изборник" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Показване на &скрити/ системни файлове" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Подреждане по &принадлежности" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Подреждане по &дата" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Подреждане по раз&ширение" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Подреждане по &име" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Подреждане по раз&мер" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Включване/ изключване на пренебрегването" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Създаване на &мека връзка..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Съгласуване на папки..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Цел &= източник" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Проверка на архив(и)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Миниатюри" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Изглед с миниатюри" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Прехвърляне на папката под показалеца в левия прозорец" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Прехвърляне на папката под показалеца в десния прозорец" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Крило за &дървовиден изглед" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Снемане на избора на всички със същото раз&ширение" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показване на списъка на посетените пътища в дейния преглед" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Към следващата точка от дневника" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Към предходната точка от дневника" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Преглед на прозорците за търсене" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Посещаване на мрежовото място на Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Унищожаване" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Изход" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Папка" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Бързодостъпни папки" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Отиване в домашната папка" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Отиване в основната папка" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Отива е по-горната папка" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Бързодостъпни папки" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Път" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Презапис..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Създаване на връзка..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Изчистване" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Скриване" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Преместване..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Създаване на мека връзка..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Възможности за подпрозорците" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Показване" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Начало" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Заповеди" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Настройка" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Предпочитани" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файлове" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Избор" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "Мрежа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Изглед" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "Въз&можности на подпрозорците" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Подпрозорци" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Обработка" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Пресяване:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Подсказка:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Клавишно съчетание:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помощ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Подсказка" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Клавишно съчетание" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "&Добавяне" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "За&даване..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Отчитане на глАВноСТта" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Прин&адлежности:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Създаване на нова папка" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Напишете &име за новата папка:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Нов размер" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Височина:" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Качество на уплътняване в jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Височина" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Ширина" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Разширение" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Файлово име" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Изчистване" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Изчистване" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Затваряне" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "Настройка" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Брояч" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Брояч" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Изтриване" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Промяна на имената..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "" #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Разширение" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Разширение" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "Об&работка" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Зареждане на имената от файл..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Файлово име" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Файлово име" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Приставки" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Приставки" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "Пре&именуване" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Преименуване" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Очистване на всички" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Съхраняване" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Съхраняване като..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Подреждане" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Време" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Време" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "Множествено преименуване" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Отчитане на глАВноСТта" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Наставяне" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1×" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "&Обичайни изрази" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Използване на &заместване" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Брояч" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Търсене &и замяна" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Имена" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Предустановки" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Раз&ширение" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Търсене..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Про&междутък" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Файлово &име" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "За&мяна..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Начална стойност" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Ширина" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Действия" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Об&работка" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Сегашно име" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Бъдещо име" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Път" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Едно файлово име" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Прилагане" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "Помощ" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Възможности" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Изберете някоя от подстраниците, тази не съдържа настройки." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Добавяне" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "&Прилагане" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "Запомняне" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Из&триване" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Друго:..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "Пре&махване" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Възможности:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "&Включен" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Режим за про&следяване на недъзи" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Показване на изхода към &конзолата" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "&Добавяне:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "&Архиватор:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "Изтриване:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "О&писание:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Раз&ширение:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Из&вличане:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Извличане без път:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Списък:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Архиватори:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Край на списъка (избираемо):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "Из&писване на списъка:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "&Начало на списъка (избираемо):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Създаване на саморазгъващ се архив:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "Проверка:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Допълнителни" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Общи" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "При промяна на раз&мера, датата и принадлежностите" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "За следните &пътища и подпапките им:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "При съз&даване, изтриване или преименуване на файлове" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Когато приложението е на &заден план" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Без самоопресняване" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Опресняване на файловия списък" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Винаги да се показва значе в &уведомителката" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Автоматично с&криване на разкачените устройства" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Смаляване в уведомителката" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Позволено е само &едно пускане на DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Черен списък на устройствата" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Ширина на стълбовете" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показване на файловите разширения" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "под&равнени (с ТАБ)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "веднага &зад файловото име" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Използване на &преливащ указател" #: tfrmoptionscolors.dbbinarymode.caption msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Двоичен преглед" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Текст:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Подцветка 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Подцветка на указателя:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Основен цвят на указателя:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Променен:" #: tfrmoptionscolors.lblmodifiedbinary.caption msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Променен:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "Състояние" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Подрязване на &текста до ширината на стълба" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Водо&равни черти" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "От&весни черти" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Само&попълване на стълбовете" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Показване на решетка" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Самоо&размеряване на стълба:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Прилагане" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Об&работка" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "&Дневник на реда управление" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "&Дневник на папката" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "&Дневник на търсените файловете" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Папкови подпрозорци" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "&Запис на настройките" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Дневник на &търсенията/ замените" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Папки" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Положение на настроечните файлове" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Запис при изход" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Показване на ред за управление" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "&Папката на приложението (преносима версия)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "&Домашна папка на потребителя" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Прилагане на промяната върху всички стълбове" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Нов" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Следващо" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Предходно" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Преименуване" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Връщане на подразбираните настройки" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Съхраняване като" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Съхраняване" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Позволяване на надцветка" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Общи" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Обрамчване на показалеца" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Подцветка:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Подцветка 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Изглед на &стълбовете:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Цвят на показалеца:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Текст на показалеца:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Шрифт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Цвят на текста:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Цвят на отбелязване:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Добавяне на стълб" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Положение на крилото след сравнението:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Изтриване на избрания предмет" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Добавяне..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Запасяване..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "Из&триване..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "Из&насяне..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Внасяне..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "В&мъкване..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Разни..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "Под&реждане..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "При добавяне на папка, да се добавя и &цел" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "Дървото да се разгъва &винаги" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Показване само на важащи променливи на средата" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "В изкачащия прозорец да се показва [и пътят]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Име, а-я" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Име, а-я" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Любими папки (пренареждат се чрез завлачване)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Други възможности" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Име:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Път:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "&Цел:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Питащ прозорец при пускане" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При завличане в &крилата:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Поставяне на предпочитания формат на върха на списъка:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Показване на &файловата уредба" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Показване на &свободното място" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Показване на &етикет" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Списък на устройствата" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Поставяне на показалеца след края на реда" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Показване на неизобразимите знаци" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Възможности на вътрешния обработчик" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Подцветка" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Подцветка" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Очистване" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Съхраняване" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Свосйтва на предметите" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Цвят на &шрифта" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Цвят на &шрифта" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Използване (и обработка) на &обща разцветка" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Използване на &местна разцветка" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Полу&чер" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Курсив" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Зачертан" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Под&чертан" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Вкл" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Добавяне..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Изтриване..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Внасяне/ изнасяне" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Вмъкване..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Преименуване" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Подреждане..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Дървото да се разгъва винаги" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Други възможности" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "за разделител" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Добавяне на подизборник" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "Изтриване на всичко!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "на избрания предмет" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Изтриване на избрания предмет" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Преименуване" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Добавяне" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "Добавяне" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Добавяне" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "Надолу" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Обработка" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Вмъкване" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Пре&махване" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "Пре&махване" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Пре&махване" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пре&именуване" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "На&горе" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Действия" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Разширения" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Могат да бъдат подредени със завлачване" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Видове файлове" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Значе" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Действията могат да бъдат подредени със завлачване" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Разширенията могат да бъдат подредени със завлачване" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Видовете на файловете могат да бъдат подредени със завлачване" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "&Име на действието:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Заповед:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Клю&чове:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Пусков път:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Обработка" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Отваряне в обработчика" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Обработка с..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Получаване на изхода от командата" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Отваряне" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Отваряне с..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Пускане в терминал" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Отваряне в прегледа" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Преглеждане с..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Настройка на файловите обвързвания" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Значета" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Питащ прозорец за:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Действие „пре&запис‟" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Действие „&изтриване‟" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Изтриване в &кошчето (Shift обръща настройката)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Изоставяне на стяга „само за &четене“" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Действие „пре&местване‟" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Об&работка на бележките заедно с файловете/папките" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Избор само на файловото &име при преименуване (без разширението)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Показване на &крило за избор на подпрозорци в прозореца за презапис/местене" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Грешките при работа с файлове се &прескачат и се записват прозореца на дневника" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Изпълняване на действия" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Брой на &повторенията:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Връщане на подразбираните настройки на DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Позволяване на надцветка" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Използване на о&граждащ показалец" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Използване на &обърнато избиране" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Обрамчване на показалеца" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Подц&ветка:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Подцветка &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Цвят на &показалеца:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "&Текст на показалеца:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Цвят на бездейния показалец" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Цвят на отбелязване:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel:" msgstr "&Яркост на бездейното крило:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "Цвят на от&белязване:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Цвят на текста:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "Цвят на &текста:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Търсене за &част от файловото име" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Търсене на текст във файловете" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Търсене на файлове" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Подразбирана шарка за търсене:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Разпределено в паметта търсене на &текст във файловете" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Поточно търсене на текст във файловете" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "Под&разбирано" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Изписване" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Подреждане" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Отчитане на &гЛАВносТтА:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неправилен начин на изписване" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Изписване на &датата и времето:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Изписване на файловите &размери:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Вмъкване на нови файлове:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Подреждане на &папките:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Начин на под&реждане:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "Преместване на об&новените файлове:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Добавяне" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "Помо&щ" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Файловият списък да не се зарежда до задействане на попрозореца" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Показване на средни &скоби около папките" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Преименуване на място, при двойно цъкане върху файл" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "Зареждане на &файловите списъци в отделна нишка" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "Зареждане на значетата &след файловия списък" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Показване на &скритите и системните файлове" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При избор на файлове с <&Интервал> се преминава на следващия файл (като с <Insert>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Добавяне" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Прилагане" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Из&триване" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Оцветяване на файловете според вида им (подреждане със за&влачване)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "&Принадлежности на раздела:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "&Цвят на раздела:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Раз&ширения на раздела:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "&Име на раздела:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Шрифтове" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "Добавяне на клавишно &съчетание" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "Из&триване на клавишно съчетание" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Про&мяна на клавишно съчетание" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "Преименуване" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "Пре&сяване" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "Раз&дели:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "&Заповеди:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Файлове с клавишни съ&четания:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "" #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "Заповед" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Заповед" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Клавишни съчетания" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Описание" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Клавишно съчетание" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Ключове" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следните &пътища и подпапките им:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Показване на &наслоени значета, например за връзки" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Забраняване на особени значета" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " Размер на значетата" #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr "" #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Всички" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Всички свързани + &EXE/LNK (бавно)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "&Без значета" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "&Само обичайните значета" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "&Добавяне на избраните имена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Добавяне на избраните имена с &пълните пътища" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Пренебрегване (скриване) на следните файлове и папки:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Съхраняване в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Лявата и дясната стрелка сменят папките (като в Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Набиране" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+&букви:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+&Alt+букви:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Букви:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Плоски копчета" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "&Плосък облик" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Показване на указател за &свободно място в етикета на устройството" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Прозорец на &дневника" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Показване на крилото за действия на заден план" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Показване на общия ход в лентата на изборника" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Показване на &ред за управление" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Показване на &текущата папка" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Показване на &копчета за устройствата" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Показване на &свободното място" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Показване на &служебни копчета" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Показване на главния изборник" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Показване на лента с &пособия" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Показване на лента на &състоянието" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "Заглавия на &подпрозорците" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Показване на &подпрозорци за папките" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Показване на прозорец за &терминала" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Показване на &две ленти с устройствата (неизменна &ширина, над файловите прозорци)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " Екранна подредба " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Преглед на дневника на файловото съдържание" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "С&гъване/ разгъване" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "&Презапис/Преместване/Създаване на връзка/мека връзка" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "&Създаване/ изтриване на папки" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Записване на &грешките в дневника" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "&Създаване на дневник:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgid "Log &information messages" msgstr "Записване на осведомяващите съобщения" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "Записване на &успешните действия" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "Приставки за файлови &уредби" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Дневник на действията с файлове" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Дневник на действията" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Ход на действието" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Изтриване на миниатюрите за изчезнали файлове" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Преглед на файла с натройките" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "При смяна на устройството, да се отива в &основната папка" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Показване на &предупреждения (само с копче „Добре“)" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Съхраняване на миниатюрите" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Миниатюри" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "точки" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Избиране с мишката" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Отваряне с" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Превъртане" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Избиране" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Режим:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Ред по ред" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Ред по ред с местене на &показалеца" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Страница по страница" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint #, fuzzy msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Преглед на дневника на файловото съдържание" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "" #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Добавяне" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "&Настройка" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "&Разрешаване" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "Пре&махване" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Настройка" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Описание" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано на" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Приставките за &търсене позволяват изполването на заместващ алгоритъм за търсене или на въшни пособия от рода на „locate“ и т.н." #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано на" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "У&плътняващите приставки се използват за работа със сбивки (архиви)" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано за" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Приставките за &съдържание позволяват показването на допълнителни подробности за файловете, от рода на mp3 означители или свосйтв ана изображения във файловите списъци. Могат да се използват и при търсене и в пособието за множествено преименуване" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано за" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Приставките за &файлови уредби позволяват достъп до дискове, недостъпни от работната уредба или до външи устройства като Palm и PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано за" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Приставките за пре&глед позволяват показването на файлови формати от рода на изображения, таблици, бази от данни и т.н. в прегеда (F3, Ctrl+Q)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Деен" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Приставка" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Записано за" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Файлово име" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "&Начало (името трябва да започва с първия набран знак)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "&Край (последният знак преди точката . трябва да съвпада)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Възможности" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Точно съвпадение на имената" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Задействане на целевото &крило при цъкане на някой от подпрозорците му" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "Показване на &заглавки на подпрозорците, дори когато има само един" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "&Искане на потвърждение при затваряне на всички подпрозорци" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Ширина на заглавията на подстраниците до" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Означаване на заключените подпрозорци със &звездичка *" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "Многоредово разположение на &подпрозорците" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+↑ отваря нов подпрозорец на преден план" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Отваряне на &новите подпрозорци до текущия" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Показване копчета за &затвяряне на подпрозорците" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Заглавки на подпрозорците на папките" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "знака" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Раз&положение на подпрозорците" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Не" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text #, fuzzy #| msgid "&Left" msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "&Ляво" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text #, fuzzy #| msgid "&Right" msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "&Дясно" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Заповед:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Ключове:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Заповед:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Ключове:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Заповед:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Ключове:" #: tfrmoptionstoolbarbase.btnclonebutton.caption #, fuzzy #| msgid "C&lone button" msgid "C&lone button" msgstr "Удвояване" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Про&мяна на горещия клавиш" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "&Добавяне на копче" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Друго..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Премахване на клавишно съ&четание" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Плоски копчета" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Докладване на грешки в заповедите" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Облик" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "&Размер на лентата:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "&Заповед:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Клю&чове:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Помощ" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Клавишно съчетание:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "&Значе:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "Размер на &значетата:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Заповед:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Ключове:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "&Пусков път:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Подсказка:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "за външна заповед" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "за вътрешна заповед" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "за разделител" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "за под-лента" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Запасяване..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущата лента..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "във файл .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "във файл .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "във файла .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "във файла .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Търсене и замяна..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "точно след избрания предмет" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "като първи предмет" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "като последен предмет" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "точно преди избрания предмет" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Вид на бутона" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Значета" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Прозорецът на терминала остава &отворен и след приключване на изпълнението" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Изпълняване в &терминал" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Ползване на &външно приложение" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Допълнителни ключове" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Път към приложението" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Добавяне" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "&Прилагане" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "Запомняне" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Из&триване" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "Пре&махване" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Друго:..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "Показване на &подсказки за файловете в крилото" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Подсказки за раз&дела:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Раз&ширения на раздела:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "" #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Подцветка:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Цвят на показалеца:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Цвят на намерения текст:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Цвят на текста под показалеца:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Обичаен цвят на текста:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Обичаен цвят на текста под показалеца:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "" #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Брой на &стълбовете в книговидния преглед" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "&Настройка" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Сбиване на файлове" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Създаване на разделни архиви, по &един на файл/папка" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Създаване на саморазгъващ се файл" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Криптиране" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Пре&местване в архив" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Многотомов архив" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "&Първо да се поставя в TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Сбиване и на имената на пътищата (само вложено)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Сбиване на фал(овете) във файл:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Сбивачка" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Разгъване на вси&чки и изпълняване" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Разгъване и изпълняване" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Свойства на сбития файл" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Принадлежности:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Степен на уплътняване:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Способ:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Първоначален размер:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Размер след сбиване:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Сбивачка:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Време:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Отчитане на глАВноСТта" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Папки" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Файлове" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Пресяване" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Приставка" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Стойност" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Прилагане" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Отказ" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Добре" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "" #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "" #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Отказ" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Добре" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Отказ" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Добре" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Промяна на принадлежностите" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепкав" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Архив" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Саздаден:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Скрит" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Ползван:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Променен:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Само за четене" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Включително подпапките" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Системен" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Свойства на времеуказателя" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Разряда:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сиво = непроменено, отметнато = включено)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Словесно представяне:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изпълнение" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(сиво поле означава непроменена стойност)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Осмично:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Запис" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr "" #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr "" #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "Подреждане" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "Отказ" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "Добре" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgid "Splitter" msgstr "Разделител" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Размер и брой на частите" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Раздробяване на файла в папка:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Брой на частите" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&байта" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&гигабайта" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&килобайта" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&мегабайта" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Сглобка" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преработка" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Издание" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Създаване на мека връзка" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "Използване на &относителен път при възможност" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Съществуваща &цел, към която да сочи връзката" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Име на връзката" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Затваряне" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Сравняване" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Съгласуване" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Подпапки" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Показване:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(в главния прозорец)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Сравняване" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "повтарящи" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Натиснете „Сравняване‟ за начало" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Съгласуване" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Търсене с отчитане на глАВноСТта" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Търсене без отчитане на глАВноСТта" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Настройка на изборника на дървовидния изглед" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Настройка на цветовете на дървовидния изглед" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Добавяне на &ново" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Про&мяна" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "Под&разбирано" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Пре&махване" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Настройка на приставката" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Разпознаване на &архивите според съдържанието" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Възможно е из&триването на файлове" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Поддържа кодиране" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Показване като обичайни файлове (скриване на значето на архиватора)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Поддръжка на сбиване в &паметта" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Възможна е про&мяната на съществуващи архиви" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Архивът може да съдържа &много файлове" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Възможно е създаването на &нови архиви" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Поддръжка на &питащ прозорец с възможности" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Позволяване на &търсене на текст в архиви" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "О&писание:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Раз&познавателен низ:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "Раз&ширение:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Знамена:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Име:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "&Приставка:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Приставка:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "За прегледа..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Показване на прозорец „За приложението‟" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Презапис на файла" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Презапис на файла" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Запомняне в кошницата" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Изтриване на файла" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Изтриване на файла" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Търсене" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Намиране на следващо" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Намиране на предходно" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Цял екран" #: tfrmviewer.actgotoline.caption msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Отиване на ред..." #: tfrmviewer.actgotoline.hint msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Отиване на ред" #: tfrmviewer.actimagecenter.caption #, fuzzy #| msgid "Center" msgid "Center" msgstr "В средата на прозореца" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "На&пред" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Зареждане на следващия файл" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "На&зад" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Зареждане на предходния файл" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Огледално" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Преместване на файл" #: tfrmviewer.actmovefile.hint #, fuzzy msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Преместване на файл" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Преглед" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "" #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Презареждане" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Презареждане на текущия файл" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Завъртане на 180 °" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "-90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Завъртане на -90 °" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Завъртане на +90 °" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Съхраняване" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Съхраняване като..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Съхраняване на файла като..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Снимка на екрана" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Забавяне 3 секунди" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Забавяне 5 секунди" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "&Двоично изобразяване" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Изобразяване като &книга" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Изобразяване като &десетични числа" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "&Шестнадесетично изобразяване" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "&Словесно изобразяване" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Изобразяване като &редоделен текст" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графики" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Приставки" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Разпъване" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Разпъване на изображението" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Разпъване само на големите изображения" #: tfrmviewer.actundo.caption msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Отмяна" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Отмяна" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Увеличаване" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Увеличаване" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Смаляване" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Смаляване" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Орязване" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "Цял екран" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Изтъкване" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Червени очи" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Преоразмеряване" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Преглед" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Обработка" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Знаков набор" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Из&ображение" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Завъртане" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Снимка на екрана" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Приставки" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Начало" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Действия с файлове" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Отказ" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Отказ" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Нова опашка" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Опашка" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Опашка 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Опашка 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Опашка 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Опашка 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Опашка 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Следване на връзките" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Когато &папката съществува" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Когато файлът съществува" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Когато файлът съществува" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Отказ" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Добре" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Ключове:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "&Настройка" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "&Криптиране" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Когато файлът съществува" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Презапис на &времето и датата" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Когато файлът съществува" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "" #: uexifreader.rsimageheight #, fuzzy msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Височина" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Ширина" #: uexifreader.rsmake msgid "Manufacturer" msgstr "" #: uexifreader.rsmodel msgid "Camera model" msgstr "" #: uexifreader.rsorientation msgid "Orientation" msgstr "" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Отмяна на текущото действие" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Липсващи:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Принад" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Разш" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Име" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Размер" #: ulng.rsconfcolalign msgid "Align" msgstr "Подравняване" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Надпис" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Изтриване" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Съдържание на полето" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Преместване" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Нагласяване на стълбове" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Презапис (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "Б" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "Добавяния:" #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Изтривания:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Съвпадения: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Разлики:" #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Знаков набор" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Отказ" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Всички" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Довършване" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Само&преименуване на целевите файлове" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Отказ" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Продължаване" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "С&ливане" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Сливане на вси&чки" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Из&ход от приложението" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Прене&брегване на всички" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Не" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Няма" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Добре" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Други" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Замяна" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Замяна &Всички" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Замяна на всички по-&големи" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Замяна на всички по-&стари" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Замяна на всички по-&малки" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Пре&именуване" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Под&новяване" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Нов &опит" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Пропускане" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "П&ропускане на всички" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Презапис на на файл(ове)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Преместване на на файл(ове)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "За&държане" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Начало" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Опашка" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Скорост %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Скорост %s/s, оставащо време %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Указател за свободното място" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<няма етикет>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<няма носител>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Вътрешният преглед на Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Отиване на ред:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Отиване на ред" #: ulng.rseditnewfile msgid "new.txt" msgstr "нов.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Файлово име:" #: ulng.rseditnewopen msgid "Open file" msgstr "Отваряне на файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "На&зад" #: ulng.rseditsearchcaption msgid "Search" msgstr "Търсене" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "На&пред" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замяна" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "в външен обработчик" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "в вътрешен обработчик" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Не;Да" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Питане;Сливане;Пропускане" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Питане;Замяна;Презапис на по-старите;Пропускане" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Питане;Да не се задава повече;Пренебрегване на грешките" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "" #: ulng.rsfilterlibraries msgid "Library files" msgstr "" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ПРЕСЯВАНЕ" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Задаване на шаблон" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s равнище/а" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "всички (неограничена дълбочина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само текущата папка" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Не съществува папка %s!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Намерени: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Име на шаблона:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Обходени: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Претърсване" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Търсене на файлове" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Начало" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Шрифт на &конзолата" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Шрифт на об&работчика" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "&Шрифт на дневника" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "&Основен шрифт" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Шрифт на &прегледа" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Шрифт на &книгоподобния изглед" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "Свободни %s от %s" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s свободни" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/време на използване" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Принадлежности" #: ulng.rsfunccomment msgid "Comment" msgstr "Бележка" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Уплътнен размер" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/време на съзадаване" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Разширение" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Група" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Промяна на дата/време" #: ulng.rsfunclinkto msgid "Link to" msgstr "Връзка към" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/време на промяна" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Име" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Името без разширението" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Собственик" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Път" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Размер" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "Вид" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Грешка при създаване на твърда връзка." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Прозорец за презапис и местене" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Сравнител" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Прозорец за промяна на забележки" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Обработчик" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Търсене на файлове" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основен" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Множествено преименуване" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Преглед" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "" #: ulng.rshotkeyfilenewname msgid "New name" msgstr "" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "Г" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "К" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "М" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "Б" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Списък на прозорците за търсене" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Признак за смяна на избора" #: ulng.rsmarkplus msgid "Select mask" msgstr "Избор на маска" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Входна маска:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Настройка на нагласените стълбове" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Задайте ново име за стълбовете" #: ulng.rsmenumacosservices msgid "Services" msgstr "" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Действия" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Създаване на връзка..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Разкачане на мрежово устройство..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Обработка" #: ulng.rsmnueject msgid "Eject" msgstr "Изваждане" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Извличане тук..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Прикачане на мрежово устройство..." #: ulng.rsmnumount msgid "Mount" msgstr "Прикачане" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Нов" #: ulng.rsmnunomedia msgid "No media available" msgstr "Няма носители" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Отваряне" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Отваряне с" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Друго..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Сбиване на файлове тук..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Възстановяване" #: ulng.rsmnusortby msgid "Sort by" msgstr "Подреждане по" #: ulng.rsmnuumount msgid "Unmount" msgstr "Разкачане" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Преглед" #: ulng.rsmsgaccount msgid "Account:" msgstr "Сметка:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Смяната на папката на [%s] бе неуспешно!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Премахване на бездейните подпрозорци?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Презапис на %d избраните папки/файлове?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Да бъде ли презаписан избраният файл „%s“?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Да бъдат ли изтрити %d-те избрани папки/файла?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Да бъдат ли изтрити %d-те избрани папки/файла?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Да бъде ли изтрит избраният „%s‟?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Да бъде ли изтрит избраният „%s‟ в кошчето?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Дискът не е на разположение" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Въведете разширение:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Въведете име:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Грешка CRC в данните на архива" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Данните са лоши" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Неуспешно свързване към сървър: „%s‟" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Неуспешен презапис на файл „%s‟ в „%s‟" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Вече съществува папка с име „%s‟." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Не се поддържа дата %s" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Папка %s съществува!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Действието е прекъснато от потребителя" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Грешка при затваряне на файла" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Създаването на файла е невъзможно" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Файловете в архива свършиха" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Отварянето на съществуващия файл е невъзможно" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Грешка при четене на файл" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Грешка при запис във файла" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Създаването на папка %s е невъзможно!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Неправилна връзка" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Не са намерени файлове" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостатъчно памет" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Действието не се поддържа!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буферът е много малък" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Твърде много файлове за сбиване" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Форматът на архива е непознат" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Файлът %s е променен. Да бъде ли съхранен?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s байта, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Замяна на:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Съществува файл %s. Да бъде ли заменен?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "С файл:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Файлът \"%s\" не е открит." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "" #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "" #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Папката „%s“ вече съществува, замяна?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Следване на мека връзка \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Добавяне на %dизбрани папки" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Добавяне на текущата папка: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Настройка на любимите папки" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Убеден ли сте, че искате да изтриете всички попълнения от списъка на любимите папки? (Възстановяването на списъка е невъзможно!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ще се изпълни следната заповед:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Грешка при запасяването..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Грешка при изнасянето..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Изнасяне на всички!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Изнасяне на списъка с любимите папки- изберете кои да се изнесат" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Изнасяне на избраните" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Внасяне на всички!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Внасяне на списъка с любимите папки- изберете кои да се внесат" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Внасяне на избраните" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Път:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Заповед:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Име:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Неправилно файлово име" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Неправилен път" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Това не е поддържана приставка!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неправилно цитиране" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Неправилно избиране." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Зареждане на списък с файлове..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Презапис на файл %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Изтриване на файл %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Грешка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Извличане на файл %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Сведения: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Създаване на връзка %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Създаване на папка %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Преместване на файл %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Сбиване във файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Изтриване на папка %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Готово: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Създаване на мека връзка %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Унищожаване на файл „%s‟" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Унищожаване на папка „%s‟" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Главна парола" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Нов файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ще бъде разгънат следвашия том" #: ulng.rsmsgnofiles msgid "No files" msgstr "Няма файлове" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Няма избрани файлове." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостатъчно място на целевата папка. Да продължа ли?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостатъчно място на целевата папка. Да опитам ли пак?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Невъзможно е изтриването на %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "" #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Парола:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Паролите не съвпадат!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Въведете парола:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Парола (защитна стена):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Повторете паролата, за да я потвърдите:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Изтриване на %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Задайте ново име за този изборник" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Преименуване/местене на %d избраните папки/файлове?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Преименуване/местене на избрания \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Презапуснете Double Commander, за да влязат промените в сила" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Избрани: %s от %s, файлове: %d от %d, папки: %d от %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Избиране на изпълним файл за" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Посочете местоположението на следващия том" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Слагане име на тома" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Особени папки" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Избрани са прекалено много файлове." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Потребителско име:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Етикет на тома:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Въведете размер на тома:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Унищожаване на %d избрани файла/папки?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Унищожаване на избрания „%s‟?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "с" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Брояч" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Дата" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Разширение" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Име" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без промяна; ВИСША; низша; Първият знак главен; Първият Знак На Всяка Дума Главен;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Последната използвана]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Множествено преименуване" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Знак na положение x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Знак от положение x на y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Брояч" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Ден" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Ден (2 цифри)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Разширение" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Час" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Час (2 цифри)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Минута" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Минута (2 цифри)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Месец" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Месец (2 цифри)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Име на месеца (кратко, например „ян‟)" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Име на месеца (кратко, например „януари‟)" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Име" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Секунда" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Секунда (2 цифри)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Година" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Година (4 цифри)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Приставки" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Време" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "" #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "" #: ulng.rsopenwithdevelopment msgid "Development" msgstr "" #: ulng.rsopenwitheducation msgid "Education" msgstr "" #: ulng.rsopenwithgames msgid "Games" msgstr "" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Графики" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsopenwithoffice msgid "Office" msgstr "" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Други" #: ulng.rsopenwithscience msgid "Science" msgstr "" #: ulng.rsopenwithsettings msgid "Settings" msgstr "" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Системен" #: ulng.rsopenwithutility msgid "Accessories" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "Прекъснато" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Изчисляване" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Изчисляване „%s‟" #: ulng.rsopercombining msgid "Joining" msgstr "Сглобяване" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Презаписване" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Презапис от „%s‟ в „%s‟" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Презапис на „%s‟ в „%s‟" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Създаване на папка" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Създаване на папка „%s‟" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Изтриване" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Изтриване в „%s‟" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Изтриване на „%s‟" #: ulng.rsoperexecuting msgid "Executing" msgstr "Изпълняване" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Изпълняване на „%s‟" #: ulng.rsoperextracting msgid "Extracting" msgstr "Извличане" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Извличане от „%s‟ в „%s‟" #: ulng.rsoperfinished msgid "Finished" msgstr "Приключено" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "Преместване" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Преместване от „%s‟ в „%s‟" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Преместване на „%s‟ в „%s‟" #: ulng.rsopernotstarted msgid "Not started" msgstr "Незапочнато" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Задържано" #: ulng.rsoperpausing msgid "Pausing" msgstr "Задържане" #: ulng.rsoperrunning msgid "Running" msgstr "Работещо" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Задаване на свойство" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Задаване на свойство в „%s‟" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Задаване на свойство на „%s‟" #: ulng.rsopersplitting msgid "Splitting" msgstr "Нацепване" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Нацепване на „%s‟ в „%s‟" #: ulng.rsoperstarting msgid "Starting" msgstr "Започване" #: ulng.rsoperstopped msgid "Stopped" msgstr "Спряно" #: ulng.rsoperstopping msgid "Stopping" msgstr "Спиране" #: ulng.rsopertesting msgid "Testing" msgstr "Проверка" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Проверка в „%s‟" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Проверка на „%s‟" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Изчакване на достъп до изходния файл" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Чакане на отговор от потребителя" #: ulng.rsoperwiping msgid "Wiping" msgstr "Унищожаване" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Унищожаване в „%s‟" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Унищожаване на „%s‟" #: ulng.rsoperworking msgid "Working" msgstr "Работи" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Добавяне в на&чалото;Добавяне в края;Умно добавяне" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Име на вида архив:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Обвързване на приставка \"%s\" с:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Първи;Последен;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Дейното крило- отляво, бездейното- отдясно (наследствено); Лявото крило- отляво, дясното- отдясно" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Въведете разширение" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizefloat msgid "float" msgstr "плаващ" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Промяна на съчетанието" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Заповед" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Описание" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Про&мяна на клавишно съчетание за %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Клавишно съчетание" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Клавишни съчетания" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<няма>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Ключове" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Архиватори" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Самоопресняване" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Поведения" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Съкратен" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Цветове" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Стълбове" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Настройка" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Нагласени стълбове" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Бързодостъпни папки" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Завлачване" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Копче със списък на устройствата" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Предпочитани подпрозорци" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Допълнителни възможности на файловите обвързвания" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Файлови обвързвания" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Нов размер" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Действия с файлове" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Файлови крила" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Търсене на файлове" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Файлов изглед" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Видове файлове" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Папкови подпрозорци" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Допълнителни настройки на подпрозорците" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифтове" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Оцветяване" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Клавишни съчетания" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Значета" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Пренебрегвания" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавиши" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Език" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Подредба" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Дневник" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Разни" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Мишка" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Множествено преименуване" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Приставки" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Бързо търсене/пресяване" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Лента с пособия" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Пособия" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Подсказки" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Няма;Ред за управление;Бързо търсене;Бързо пресяване" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ляво цъкало;Дясно цъкало;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Приставката %s вече свързана със следното разширение:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Забраняване" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "&Разрешаване" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Деен" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Описание" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Файлово име" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Име" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Записано на" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&с отчитане на глАВноСТта;&без отчитане на глАВноСТта" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файлове;&Папки;Файлове &и папки" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "без отчитане на глАВноСТта; според местните настройки (аАбБвВ); първо главните, после редовните(АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "по име и показване най-отгоре;като файлове и показване най-отгоре;като файлове" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Азбучно, с отчитане на ударенията;Азбучно, с подреждане на особените знаци;Естествено: азбучно и числено;Естествено, с подреждане на особените знаци" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Отгоре;Отдолу;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Раз&делител;&Вътрешна заповед;Въ&ншна заповед;&Изборник" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Име на раздела:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "" #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "без пренареждане;според настройките за новите файлове;подреждане" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Файлове: %d, папки: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Папка" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Наименована тръба" #: ulng.rspropssocket msgid "Socket" msgstr "Гнездо" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Нарочно блоково устройство" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Нарочно знаково устройство" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Мека връзка" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Неизвестен вид" #: ulng.rssearchresult msgid "Search result" msgstr "Намерени" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Избор на папка" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Изберете прозорец:" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Всички" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Заповед" #: ulng.rssimpleworderror msgid "Error" msgstr "" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "" #: ulng.rssimplewordfalse msgid "False" msgstr "" #: ulng.rssimplewordfilename #, fuzzy msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Файлово име" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordletter msgid "Letter" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "" #: ulng.rssimplewordtrue msgid "True" msgstr "" #: ulng.rssimplewordvariable msgid "Variable" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "байта" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "гигабайта" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "килобайта" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "мегабайта" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "терабайта" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлове: %d, папки: %d, размер: %s (%s байта)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Създаването на целевата папка е невъзможно!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Неправилно изписване на файловия размер!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Неуспешно раздробяване на файла!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Изберете папка:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "" #: ulng.rsstrpreviewothers msgid "Others" msgstr "" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Грешка при създаване на мека връзка." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Под&разбирано" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Ден/ дни" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "час(а)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "минута/и" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "месец(а)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "секунда/и" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "седмица/и" #: ulng.rstimeunityear msgid "Year(s)" msgstr "година/и" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Сравнител" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Обработчик" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Преглед" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Вътрешен преглед на Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Ниско качество" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Знаков набор" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Вид на изображението" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Нов размер" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s не е открит!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "с външен преглед" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "с вътрешен преглед" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "" �����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/language/doublecmd.be.po�����������������������������������������������������������0000644�0001750�0000144�00001554357�15104114162�017257� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 1.1.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-15 11:15+0300\n" "PO-Revision-Date: 2022-09-27 11:46\n" "Last-Translator: Full Name <email@address>\n" "Language-Team: Belarusian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Беларуская\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Crowdin-Project: b5aaebc75354984d7cee90405a1f6642\n" "X-Crowdin-Project-ID: 7\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /l10n_Translation/language/doublecmd.po\n" "X-Crowdin-File-ID: 3344\n" "Language: be\n" #: fsyncdirsdlg.rscomparingpercent #, object-pascal-format msgid "Comparing... %d%% (ESC to cancel)" msgstr "Параўнанне... %d%% (ESC, каб скасаваць)" #: fsyncdirsdlg.rsdeleteleft #, object-pascal-format msgid "Left: Delete %d file(s)" msgstr "Лева: выдаліць %d файл(аў)" #: fsyncdirsdlg.rsdeleteright #, object-pascal-format msgid "Right: Delete %d file(s)" msgstr "Права: выдаліць %d файл(аў)" #: fsyncdirsdlg.rsfilesfound #, object-pascal-format msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Знойдзена файлаў: %d (Аднолькавых: %d, Розных: %d, Унікальных злева: %d, Унікальных справа: %d)" #: fsyncdirsdlg.rslefttorightcopy #, object-pascal-format msgid "Left to Right: Copy %d files, total size: %s (%s)" msgstr "Злева ўправа: капіюецца %d файлаў, агульны памер: %s (%s)" #: fsyncdirsdlg.rsrighttoleftcopy #, object-pascal-format msgid "Right to Left: Copy %d files, total size: %s (%s)" msgstr "Справа ўлева: капіюецца %d файлаў, агульны памер: %s (%s)" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Абраць шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Праверыць на вольнае месца" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Скапіяваць атрыбуты" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Скапіяваць ул&адальнікаў" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Скапіяваць &правы на доступ" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbcopytime.caption" msgid "Copy d&ate/time" msgstr "Скапіяваць &дату/час" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Выправіць спа&сылкі" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgid "Drop readonly fla&g" msgstr "Прыбраць п&азнаку \"толькі для чытання\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Вы&ключыць пустыя каталогі" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Выкарыcтоўваць спасылкі" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Рэзерваваць прастору" #: tfilesystemcopymoveoperationoptionsui.chkcopyonwrite.caption msgid "Copy on write" msgstr "Капіяванне падчас запісу" #: tfilesystemcopymoveoperationoptionsui.chkverify.caption msgid "&Verify" msgstr "&Праверыць" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Што рабіць калі не атрымліваецца вызначыць час, атрыбуты і т. п." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Выкарыстаць шаблон" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Калі &каталог існуе" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgid "When &file exists" msgstr "Калі &файл існуе" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Калі немаг&чыма вызначыць уласцівасць" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<няма шаблона>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Закрыць" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Скапіяваць у буфер абмену" #: tfrmabout.caption msgctxt "tfrmabout.caption" msgid "About" msgstr "Пра праграму" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Зборка" #: tfrmabout.lblcommit.caption msgctxt "tfrmabout.lblcommit.caption" msgid "Commit" msgstr "Унесці" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Хатняя старонка:" #: tfrmabout.lblhomepageaddress.caption msgid "https://doublecmd.sourceforge.io" msgstr "https://doublecmd.sourceforge.io" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "tfrmabout.lblrevision.caption" msgid "Revision" msgstr "Рэвізія" #: tfrmabout.lbltitle.caption msgctxt "tfrmabout.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Версія" #: tfrmattributesedit.btncancel.caption msgctxt "tfrmattributesedit.btncancel.caption" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmattributesedit.btnok.caption msgctxt "tfrmattributesedit.btnok.caption" msgid "&OK" msgstr "&Добра" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Скінуць" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Абраць атрыбуты" #: tfrmattributesedit.cbarchive.caption msgid "&Archive" msgstr "&Архіў" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Сці&снуты" #: tfrmattributesedit.cbdirectory.caption msgid "&Directory" msgstr "&Каталог" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Зашыфраваны" #: tfrmattributesedit.cbhidden.caption msgid "&Hidden" msgstr "&Схаваны" #: tfrmattributesedit.cbreadonly.caption msgid "Read o&nly" msgstr "&Толькі для чытання" #: tfrmattributesedit.cbsgid.caption msgctxt "tfrmattributesedit.cbsgid.caption" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Рэдкі" #: tfrmattributesedit.cbsticky.caption msgctxt "tfrmattributesedit.cbsticky.caption" msgid "Sticky" msgstr "Мацавальны" #: tfrmattributesedit.cbsuid.caption msgctxt "tfrmattributesedit.cbsuid.caption" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Спасылка" #: tfrmattributesedit.cbsystem.caption msgid "S&ystem" msgstr "Сі&стэмны" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Часовы" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Атрыбуты NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Асноўныя атрыбуты" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "tfrmattributesedit.lblattrbitsstr.caption" msgid "Bits:" msgstr "Біты:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "tfrmattributesedit.lblattrgroupstr.caption" msgid "Group" msgstr "Група" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "tfrmattributesedit.lblattrotherstr.caption" msgid "Other" msgstr "Іншае" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "tfrmattributesedit.lblattrownerstr.caption" msgid "Owner" msgstr "Уладальнік" #: tfrmattributesedit.lblexec.caption msgctxt "tfrmattributesedit.lblexec.caption" msgid "Execute" msgstr "Выкананне" #: tfrmattributesedit.lblread.caption msgctxt "tfrmattributesedit.lblread.caption" msgid "Read" msgstr "Чытанне" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Як тэ&кст:" #: tfrmattributesedit.lblwrite.caption msgctxt "tfrmattributesedit.lblwrite.caption" msgid "Write" msgstr "Запісаць" #: tfrmbenchmark.caption msgid "Benchmark" msgstr "Тэставанне" #: tfrmbenchmark.lblbenchmarksize.caption #, object-pascal-format msgid "Benchmark data size: %d MB" msgstr "Памер даных тэставання: %d Mб" #: tfrmbenchmark.stgresult.columns[0].title.caption msgid "Hash" msgstr "Хэш" #: tfrmbenchmark.stgresult.columns[1].title.caption msgid "Time (ms)" msgstr "Час (мс)" #: tfrmbenchmark.stgresult.columns[2].title.caption msgid "Speed (MB/s)" msgstr "Хуткасць (Mб/с)" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Падлік кантрольнай сумы..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Адкрыць файл кантрольнай сумы пасля завяршэння" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "С&твараць асобны файл кантрольнай сумы для кожнага файла" #: tfrmchecksumcalc.lblfileformat.caption msgid "File &format" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Захаваць файл(ы) кантрольнай сумы ў:" #: tfrmchecksumcalc.rbunix.caption msgid "Unix" msgstr "" #: tfrmchecksumcalc.rbwindows.caption msgid "Windows" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmchecksumverify.caption msgctxt "tfrmchecksumverify.caption" msgid "Verify checksum..." msgstr "Праверыць кантрольную суму..." #: tfrmchooseencoding.caption #, fuzzy msgctxt "tfrmchooseencoding.caption" msgid "Encoding" msgstr "Кадаванне" #: tfrmconnectionmanager.btnadd.caption msgctxt "tfrmconnectionmanager.btnadd.caption" msgid "A&dd" msgstr "&Дадаць" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "З&лучыцца" #: tfrmconnectionmanager.btndelete.caption msgctxt "tfrmconnectionmanager.btndelete.caption" msgid "&Delete" msgstr "&Выдаліць" #: tfrmconnectionmanager.btnedit.caption msgctxt "tfrmconnectionmanager.btnedit.caption" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Кіраўнік злучэння" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Злучыцца з:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Дадаць у чаргу" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Параметры" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "З&ахаваць гэтыя параметры як прадвызначаныя" #: tfrmcopydlg.caption msgctxt "tfrmcopydlg.caption" msgid "Copy file(s)" msgstr "Скапіяваць файл(ы)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Новая чарга" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Чарга 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Чарга 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Чарга 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Чарга 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Чарга 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Захаваць апісанне" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Каментар да файла/каталога" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Рэдагаваць каментар да:" #: tfrmdescredit.lblencoding.caption msgid "&Encoding:" msgstr "&Кадаванне:" #: tfrmdescredit.lblfilename.caption msgctxt "tfrmdescredit.lblfilename.caption" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Пра праграму" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Аўтаматычнае параўнанне" #: tfrmdiffer.actbinarycompare.caption msgctxt "tfrmdiffer.actbinarycompare.caption" msgid "Binary Mode" msgstr "Двайковы рэжым" #: tfrmdiffer.actcancelcompare.caption msgctxt "tfrmdiffer.actcancelcompare.caption" msgid "Cancel" msgstr "Скасаваць" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Скасаваць" #: tfrmdiffer.actcopylefttoright.caption msgctxt "tfrmdiffer.actcopylefttoright.caption" msgid "Copy Block Right" msgstr "Скапіяваць блок управа" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Скапіяваць блок управа" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "tfrmdiffer.actcopyrighttoleft.caption" msgid "Copy Block Left" msgstr "Скапіяваць блок улева" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Скапіяваць блок улева" #: tfrmdiffer.acteditcopy.caption msgctxt "tfrmdiffer.acteditcopy.caption" msgid "Copy" msgstr "Капіяваць" #: tfrmdiffer.acteditcut.caption msgctxt "tfrmdiffer.acteditcut.caption" msgid "Cut" msgstr "Выразаць" #: tfrmdiffer.acteditdelete.caption msgctxt "tfrmdiffer.acteditdelete.caption" msgid "Delete" msgstr "Выдаліць" #: tfrmdiffer.acteditpaste.caption msgctxt "tfrmdiffer.acteditpaste.caption" msgid "Paste" msgstr "Уставіць" #: tfrmdiffer.acteditredo.caption msgctxt "tfrmdiffer.acteditredo.caption" msgid "Redo" msgstr "Паўтарыць" #: tfrmdiffer.acteditredo.hint msgctxt "tfrmdiffer.acteditredo.hint" msgid "Redo" msgstr "Паўтарыць" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Абраць &усё" #: tfrmdiffer.acteditundo.caption msgctxt "tfrmdiffer.acteditundo.caption" msgid "Undo" msgstr "Адрабіць" #: tfrmdiffer.acteditundo.hint msgctxt "tfrmdiffer.acteditundo.hint" msgid "Undo" msgstr "Адрабіць" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Выйсці" #: tfrmdiffer.actfind.caption msgctxt "tfrmdiffer.actfind.caption" msgid "&Find" msgstr "&Пошук" #: tfrmdiffer.actfind.hint msgctxt "tfrmdiffer.actfind.hint" msgid "Find" msgstr "Пошук" #: tfrmdiffer.actfindnext.caption msgctxt "tfrmdiffer.actfindnext.caption" msgid "Find next" msgstr "Шукаць наступнае" #: tfrmdiffer.actfindnext.hint msgctxt "tfrmdiffer.actfindnext.hint" msgid "Find next" msgstr "Шукаць наступнае" #: tfrmdiffer.actfindprev.caption msgctxt "tfrmdiffer.actfindprev.caption" msgid "Find previous" msgstr "Шукаць папярэдняе" #: tfrmdiffer.actfindprev.hint msgctxt "tfrmdiffer.actfindprev.hint" msgid "Find previous" msgstr "Шукаць папярэдняе" #: tfrmdiffer.actfindreplace.caption msgctxt "tfrmdiffer.actfindreplace.caption" msgid "&Replace" msgstr "&Замяніць" #: tfrmdiffer.actfindreplace.hint msgctxt "tfrmdiffer.actfindreplace.hint" msgid "Replace" msgstr "Замяніць" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Першае адрозненне" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Першае адрозненне" #: tfrmdiffer.actgotoline.caption msgctxt "tfrmdiffer.actgotoline.caption" msgid "Goto Line..." msgstr "Перайсці да радка..." #: tfrmdiffer.actgotoline.hint msgctxt "tfrmdiffer.actgotoline.hint" msgid "Goto Line" msgstr "Перайсці да радка" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Не зважаць на рэгістр" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Не зважаць на прагалы" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Сінхронная пракрутка" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Апошняе адрозненне" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Апошняе адрозненне" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Адрозненне радкоў" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Наступнае адрозненне" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Наступнае адрозненне" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Адкрыць злева..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Адкрыць справа..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Заліўка фону" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Папярэдняе адрозненне" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Папярэдняе адрозненне" #: tfrmdiffer.actreload.caption msgid "&Reload" msgstr "&Перазагрузіць" #: tfrmdiffer.actreload.hint msgctxt "tfrmdiffer.actreload.hint" msgid "Reload" msgstr "Перазагрузіць" #: tfrmdiffer.actsave.caption msgctxt "tfrmdiffer.actsave.caption" msgid "Save" msgstr "Захаваць" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Захаваць" #: tfrmdiffer.actsaveas.caption msgctxt "tfrmdiffer.actsaveas.caption" msgid "Save as..." msgstr "Захаваць як..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Захаваць як..." #: tfrmdiffer.actsaveleft.caption msgctxt "tfrmdiffer.actsaveleft.caption" msgid "Save Left" msgstr "Захаваць злева" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Захаваць злева" #: tfrmdiffer.actsaveleftas.caption msgctxt "tfrmdiffer.actsaveleftas.caption" msgid "Save Left As..." msgstr "Захаваць злева як..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Захаваць злева як..." #: tfrmdiffer.actsaveright.caption msgctxt "tfrmdiffer.actsaveright.caption" msgid "Save Right" msgstr "Захаваць справа" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Захаваць справа" #: tfrmdiffer.actsaverightas.caption msgctxt "tfrmdiffer.actsaverightas.caption" msgid "Save Right As..." msgstr "Захаваць справа як..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Захаваць справа як..." #: tfrmdiffer.actstartcompare.caption msgctxt "tfrmdiffer.actstartcompare.caption" msgid "Compare" msgstr "Параўнаць" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Параўнаць" #: tfrmdiffer.btnleftencoding.hint msgctxt "tfrmdiffer.btnleftencoding.hint" msgid "Encoding" msgstr "Кадаванне" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Кадаванне" #: tfrmdiffer.caption msgid "Compare files" msgstr "Параўнаць файлы" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "З&лева" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "С&права" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Дзеянні" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmdiffer.mnuencoding.caption msgctxt "tfrmdiffer.mnuencoding.caption" msgid "En&coding" msgstr "&Кадаванне" #: tfrmdiffer.mnufile.caption msgctxt "tfrmdiffer.mnufile.caption" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgid "&Options" msgstr "&Параметры" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Дадаць новае спалучэнне ў паслядоўнасць" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Выдаліць апошняе спалучэнне з паслядоўнасці" #: tfrmedithotkey.btnselectfromlist.hint msgid "Select shortcut from list of remaining free available keys" msgstr "Абраць спалучэнне са спіса апошніх свабодных клавішаў" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Толькі для гэтых элементаў кіравання" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Параметры (кожны ў асобным радку):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Спалучэнні клавішаў:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Пра праграму" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Пра праграму" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Канфігурацыя" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Канфігурацыя" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Капіяваць" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Капіяваць" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Выразаць" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Выразаць" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Выдаліць" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Выдаліць" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Шукаць" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Шукаць" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Шукаць наступнае" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Шукаць наступнае" #: tfrmeditor.acteditfindprevious.caption msgctxt "tfrmeditor.acteditfindprevious.caption" msgid "Find previous" msgstr "Шукаць папярэдняе" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Перайсці да радка..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Уставіць" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Уставіць" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Паўтарыць" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Паўтарыць" #: tfrmeditor.acteditrplc.caption msgctxt "tfrmeditor.acteditrplc.caption" msgid "&Replace" msgstr "&Замяніць" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Замяніць" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Абраць &усё" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Абраць усё" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Адрабіць" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Адрабіць" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Закрыць" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Выйсці" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Выйсці" #: tfrmeditor.actfilenew.caption msgid "&New" msgstr "&Новы" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Новы" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Адкрыць" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Адкрыць" #: tfrmeditor.actfilereload.caption msgctxt "tfrmeditor.actfilereload.caption" msgid "Reload" msgstr "Перазагрузіць" #: tfrmeditor.actfilesave.caption msgctxt "tfrmeditor.actfilesave.caption" msgid "&Save" msgstr "&Захаваць" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Захаваць" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Захаваць &як..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Захаваць як" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Рэдактар" #: tfrmeditor.help1.caption msgctxt "tfrmeditor.help1.caption" msgid "&Help" msgstr "&Даведка" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Када&ванне" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Адкрыць як" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Захаваць як" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Падсвятленне сінтаксісу" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Канец радка" #: tfrmeditsearchreplace.buttonpanel.cancelbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.CANCELBUTTON.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmeditsearchreplace.buttonpanel.okbutton.caption msgctxt "TFRMEDITSEARCHREPLACE.BUTTONPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmeditsearchreplace.cbmultiline.caption msgid "&Multiline pattern" msgstr "&Шматрадковыя шаблоны" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "&Улічваць рэгістр" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgid "S&earch from caret" msgstr "Шу&каць ад курсора" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "tfrmeditsearchreplace.cbsearchregexp.caption" msgid "&Regular expressions" msgstr "&Рэгулярны выраз" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Толькі ў &вылучаным тэксце" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Толькі цэлыя словы" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Параметры" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Замяніць:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Шукаць для:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Напрамак" #: tfrmelevation.chkelevateall.caption msgid "Do this for &all current objects" msgstr "Выканаць для &ўсіх бягучых аб'ектаў" #: tfrmextractdlg.caption msgid "Unpack files" msgstr "Распакаваць файлы" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Распакаваць з падкаталогамі" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Распакаваць кожны архіў у а&собны падкаталог (з назвай архіва)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Пе&разапісаць існыя файлы" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "У ката&лог:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Распакаваць файлы згодна з файлавай маскай:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Пароль для зашыфраваных файлаў:" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmfileexecuteyourself.caption msgid "Wait..." msgstr "Пачакайце..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Назва файла:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "tfrmfileexecuteyourself.lblfrompath.caption" msgid "From:" msgstr "З:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Пстрыкніце па \"Закрыць\" калі часовы файл можна выдаліць!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На панэль" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Праглядзець усё" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Бягучая аперацыя:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "З:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "У:" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Уласцівасці" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Мацавальны" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.chkexecutable.caption msgid "Allow &executing file as program" msgstr "Дазволіць &выконваць як праграму" #: tfrmfileproperties.chkrecursive.caption msgid "&Recursive" msgstr "" #: tfrmfileproperties.dividerbevel3.caption msgctxt "TFRMFILEPROPERTIES.DIVIDERBEVEL3.CAPTION" msgid "Owner" msgstr "Уладальнік" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біты:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Іншае" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Уладальнік" #: tfrmfileproperties.lblattrtext.caption msgctxt "tfrmfileproperties.lblattrtext.caption" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "tfrmfileproperties.lblattrtextstr.caption" msgid "Text:" msgstr "Тэкст:" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Змяшчае:" #: tfrmfileproperties.lblcreatedstr.caption #, fuzzy msgctxt "tfrmfileproperties.lblcreatedstr.caption" msgid "Created:" msgstr "Створаны:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выкананне" #: tfrmfileproperties.lblexecutable.caption msgid "Execute:" msgstr "Выкананне:" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Назва файла" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilestr.caption msgctxt "tfrmfileproperties.lblfilestr.caption" msgid "File name" msgstr "Назва файла" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Шлях:" #: tfrmfileproperties.lblgroupstr.caption msgid "&Group" msgstr "&Група" #: tfrmfileproperties.lbllastaccessstr.caption msgctxt "tfrmfileproperties.lbllastaccessstr.caption" msgid "Accessed:" msgstr "Апошні доступ:" #: tfrmfileproperties.lbllastmodifstr.caption msgctxt "tfrmfileproperties.lbllastmodifstr.caption" msgid "Modified:" msgstr "Апошняя змена:" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Status changed:" msgstr "Апошняя змена стану:" #: tfrmfileproperties.lbllinksstr.caption msgid "Links:" msgstr "" #: tfrmfileproperties.lblmediatypestr.caption msgid "Media type:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "tfrmfileproperties.lbloctal.caption" msgid "Octal:" msgstr "Васьмярковы:" #: tfrmfileproperties.lblownerstr.caption msgid "O&wner" msgstr "&Уладальнік" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чытанне" #: tfrmfileproperties.lblsizeondiskstr.caption msgid "Size on disk:" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "tfrmfileproperties.lblsizestr.caption" msgid "Size:" msgstr "Памер:" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Спасылка:" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тып:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запісаць" #: tfrmfileproperties.sgplugins.columns[0].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[0].title.caption" msgid "Name" msgstr "Назва" #: tfrmfileproperties.sgplugins.columns[1].title.caption msgctxt "tfrmfileproperties.sgplugins.columns[1].title.caption" msgid "Value" msgstr "Значэнне" #: tfrmfileproperties.tsattributes.caption msgctxt "tfrmfileproperties.tsattributes.caption" msgid "Attributes" msgstr "Атрыбуты" #: tfrmfileproperties.tsplugins.caption msgctxt "tfrmfileproperties.tsplugins.caption" msgid "Plugins" msgstr "Убудовы" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Уласцівасці" #: tfrmfileunlock.btnclose.caption msgctxt "tfrmfileunlock.btnclose.caption" msgid "Close" msgstr "Закрыць" #: tfrmfileunlock.btnterminate.caption msgid "Terminate" msgstr "Завяршыць" #: tfrmfileunlock.btnunlock.caption msgctxt "tfrmfileunlock.btnunlock.caption" msgid "Unlock" msgstr "Разблакаваць" #: tfrmfileunlock.btnunlockall.caption msgid "Unlock All" msgstr "Разблакаваць усе" #: tfrmfileunlock.caption msgctxt "tfrmfileunlock.caption" msgid "Unlock" msgstr "Разблакаваць" #: tfrmfileunlock.stgfilehandles.columns[0].title.caption msgid "File Handle" msgstr "Дэскрыптар файла" #: tfrmfileunlock.stgfilehandles.columns[1].title.caption msgid "Process ID" msgstr "Ідэнтыфікатар працэсу" #: tfrmfileunlock.stgfilehandles.columns[2].title.caption msgid "Executable Path" msgstr "Шлях выканання" #: tfrmfinddlg.actcancel.caption msgctxt "TFRMFINDDLG.ACTCANCEL.CAPTION" msgid "C&ancel" msgstr "&Скасаваць" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Скасаваць і закрыць акно" #: tfrmfinddlg.actclose.caption msgctxt "TFRMFINDDLG.ACTCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmfinddlg.actconfigfilesearchhotkeys.caption msgctxt "TFRMFINDDLG.ACTCONFIGFILESEARCHHOTKEYS.CAPTION" msgid "Configuration of hot keys" msgstr "Налады гарачых клавішаў" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to &listbox" msgstr "Файлы для &панэлі" #: tfrmfinddlg.actfreefrommem.caption msgid "Cancel search, close and free from memory" msgstr "Скасаваць пошук і закрыць акно" #: tfrmfinddlg.actfreefrommemallothers.caption msgid "For all other \"Find files\", cancel, close and free from memory" msgstr "Скасаваць і закрыць усе іншыя вокны \"Пошук файлаў\"" #: tfrmfinddlg.actgotofile.caption msgid "&Go to file" msgstr "&Перайсці да файла" #: tfrmfinddlg.actintellifocus.caption msgctxt "TFRMFINDDLG.ACTINTELLIFOCUS.CAPTION" msgid "Find Data" msgstr "Шукаць даныя" #: tfrmfinddlg.actlastsearch.caption msgid "&Last search" msgstr "&Апошні пошук" #: tfrmfinddlg.actnewsearch.caption msgid "&New search" msgstr "&Новы пошук" #: tfrmfinddlg.actnewsearchclearfilters.caption msgid "New search (clear filters)" msgstr "Новы пошук (ачысціць фільтры)" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Перайсці да ўкладкі \"Пашыраны\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Перайсці да ўкладкі \"Загрузіць/Захаваць\"" #: tfrmfinddlg.actpagenext.caption msgid "Switch to Nex&t Page" msgstr "Перайсці да &наступнай укладкі" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Перайсці да ўкладкі \"Убудовы\"" #: tfrmfinddlg.actpageprev.caption msgid "Switch to &Previous Page" msgstr "Перайсці да &папярэдняй укладкі" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Перайсці да ўкладкі \"Вынікі\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Перайсці да ўкладкі \"Стандартны\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "&Start" msgstr "&Пачаць" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "&View" msgstr "&Праглядзець" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Дадаць" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Даведка" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Захаваць" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Загрузіць" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Захаваць" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Захав&аць з \"Запускаць у каталозе\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Пры націсканні захоўваецца значэнне \"Запускаць у каталозе\". Выкарыстоўвайце, калі хочаце пачынаць пошук з пэўнага каталога" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Выкарыстоўваць шаблон" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Пошук файлаў" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "&Зважаць на рэгістр" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Пачынаючы з &даты:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Па да&ту:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Па&мер ад:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Па&мер да:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Шукаць у ар&хівах" #: tfrmfinddlg.cbfindtext.caption msgid "Find &text in file" msgstr "Шукаць &тэкст у файле" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "Карыстацца сп&асылкамі" #: tfrmfinddlg.cbnotcontainingtext.caption msgid "Find files N&OT containing the text" msgstr "Шукаць файлы б&ез тэксту" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Не& старэйшыя за:" #: tfrmfinddlg.cbofficexml.caption msgid "Offi&ce XML" msgstr "Офі&сныя XML" #: tfrmfinddlg.cbopenedtabs.caption msgid "Opened tabs" msgstr "У адкрытых укладках" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Шука&ць частку назвы" #: tfrmfinddlg.cbregexp.caption msgid "&Regular expression" msgstr "&Рэгулярны выраз" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "За&мяніць на" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and files" msgstr "Абраныя каталогі і &файлы" #: tfrmfinddlg.cbtextregexp.caption msgid "Reg&ular expression" msgstr "Рэгулярны &выраз" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Час ад:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&Час да:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Выкарыстоўваць убудову пошуку:" #: tfrmfinddlg.chkduplicatecontent.caption msgid "same content" msgstr "па змесціву" #: tfrmfinddlg.chkduplicatehash.caption msgid "same hash" msgstr "па хэшу" #: tfrmfinddlg.chkduplicatename.caption msgid "same name" msgstr "па назве" #: tfrmfinddlg.chkduplicates.caption msgid "Find du&plicate files:" msgstr "Пошук &дублікатаў:" #: tfrmfinddlg.chkduplicatesize.caption msgid "same size" msgstr "па памеры" #: tfrmfinddlg.chkhex.caption msgctxt "tfrmfinddlg.chkhex.caption" msgid "Hexadeci&mal" msgstr "&Шаснаццатковы" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Увядзіце назвы каталогаў, якія патрэбна выключыць з пошуку. Назвы патрэбна аддзяляць \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Увядзіце назвы файлаў, якія патрэбна выключыць з пошуку. Назвы патрэбна аддзяляць \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Увядзіце назвы файлаў, аддзеленыя \";\"" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[0].text" msgid "Plugin" msgstr "Убудова" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[2].text" msgid "Operator" msgstr "Аператар" #: tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text msgctxt "tfrmfinddlg.frmcontentplugins.headercontrol.sections[3].text" msgid "Value" msgstr "Значэнне" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Каталогі" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файлы" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "Шукаць даныя" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Атр&ыбуты" #: tfrmfinddlg.lblencoding.caption msgid "Encodin&g:" msgstr "Кадава&нне:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Вы&ключыць падкаталогі" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Выключыць файлы" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Файлавая маска" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Запускаць у &каталозе" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Шукаць пад&каталогі:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Папярэднія пошукі:" #: tfrmfinddlg.miaction.caption msgid "&Action" msgstr "&Дзеянне" #: tfrmfinddlg.mifreefrommemallothers.caption msgid "For all others, cancel, close and free from memory" msgstr "Спыніць і закрыць іншыя вокны" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Адкрыць у новай укладцы(ках)" #: tfrmfinddlg.mioptions.caption msgctxt "TFRMFINDDLG.MIOPTIONS.CAPTION" msgid "Options" msgstr "Параметры" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Выдаліць са спіса" #: tfrmfinddlg.miresult.caption msgid "&Result" msgstr "&Вынік" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Паказаць усе элементы" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Паказаць у рэдактары" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Паказаць у праграме прагляду" #: tfrmfinddlg.miviewtab.caption msgctxt "TFRMFINDDLG.MIVIEWTAB.CAPTION" msgid "&View" msgstr "&Праглядзець" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Дадаткова" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Загрузіць/Захаваць" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Убудовы" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Вынікі" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Стандартны" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Шукаць" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Шукаць" #: tfrmfindview.cbbackwards.caption msgid "&Backwards" msgstr "Назад(&B)" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "&Зважаць на рэгістр" #: tfrmfindview.cbregexp.caption msgctxt "tfrmfindview.cbregexp.caption" msgid "&Regular expressions" msgstr "&Рэгулярны выраз" #: tfrmfindview.chkhex.caption msgctxt "tfrmfindview.chkhex.caption" msgid "Hexadecimal" msgstr "Шаснаццатковы" #: tfrmgioauthdialog.lbldomain.caption msgid "Domain:" msgstr "Дамен:" #: tfrmgioauthdialog.lblpassword.caption msgctxt "tfrmgioauthdialog.lblpassword.caption" msgid "Password:" msgstr "Пароль:" #: tfrmgioauthdialog.lblusername.caption msgctxt "tfrmgioauthdialog.lblusername.caption" msgid "User name:" msgstr "Імя карыстальніка:" #: tfrmgioauthdialog.rbanonymous.caption msgid "Connect anonymously" msgstr "Падлучыцца ананімна" #: tfrmgioauthdialog.rbconnetas.caption msgid "Connect as user:" msgstr "Падлучыцца як карыстальнік:" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Стварыць жорсткую спасылку" #: tfrmhardlink.lblexistingfile.caption msgctxt "tfrmhardlink.lblexistingfile.caption" msgid "&Destination that the link will point to" msgstr "&На што паказвае спасылка" #: tfrmhardlink.lbllinktocreate.caption msgctxt "tfrmhardlink.lbllinktocreate.caption" msgid "&Link name" msgstr "Назва с&пасылкі" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Імпартаваць усе!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Імпартаваць абранае" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Абраць радок для імпарту" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Калі пстрыкнуць па падменю, абярэцца ўсё падменю" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Утрымліваючы CTRL можна абраць адразу некалькі запісаў" #: tfrmlinker.btnsave.caption msgctxt "tfrmlinker.btnsave.caption" msgid "..." msgstr "..." #: tfrmlinker.caption msgid "Linker" msgstr "Зборка" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Захаваць у..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Элемент" #: tfrmlinker.lblfilename.caption msgid "&File name" msgstr "&Назва файла" #: tfrmlinker.spbtndown.caption msgctxt "tfrmlinker.spbtndown.caption" msgid "Do&wn" msgstr "&Уніз" #: tfrmlinker.spbtndown.hint msgid "Down" msgstr "Уніз" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Выдаліць" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Выдаліць" #: tfrmlinker.spbtnup.caption msgctxt "tfrmlinker.spbtnup.caption" msgid "&Up" msgstr "&Уверх" #: tfrmlinker.spbtnup.hint msgid "Up" msgstr "Уверх" #: tfrmmain.actabout.caption msgid "&About" msgstr "&Пра праграму" #: tfrmmain.actactivatetabbyindex.caption msgid "Activate Tab By Index" msgstr "Задзейнічаць укладку па індэксе" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Дадаць назву файла ў загадны радок" #: tfrmmain.actaddnewsearch.caption msgid "New search instance..." msgstr "Новы асобнік пошуку..." #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Дадаць шлях і назву файла ў загадны радок" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Скапіяваць шлях у загадны радок" #: tfrmmain.actaddplugin.caption msgid "Add Plugin" msgstr "Дадаць убудову" #: tfrmmain.actbenchmark.caption msgid "&Benchmark" msgstr "&Тэставанне" #: tfrmmain.actbriefview.caption msgid "Brief view" msgstr "Сціслы выгляд" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Сціслы выгляд" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Падлічыць &прастору, якая выкарыстоўваецца" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Змяніць каталог" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Змяніць каталог на хатні" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Змяніць каталог на бацькоўскі" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Змяніць каталог на корань файлавай сістэмы" #: tfrmmain.actchecksumcalc.caption msgid "Calculate Check&sum..." msgstr "Падлічыць кантрольную &суму..." #: tfrmmain.actchecksumverify.caption msgid "&Verify Checksum..." msgstr "&Праверыць кантрольную суму..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Ачысціць журнал" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Ачысціць акно журнала" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "Закрыць &усе ўкладкі" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Закрыць дублікаты ўкладак" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "&Закрыць укладку" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Наступны загадны радок" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Абраць наступны загад з гісторыі" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Папярэдні загадны радок" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Абраць папярэдні загад з гісторыі" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Падрабязны" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Падрабязны выгляд" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Параўнаць па &змесціву" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Параўнаць каталогі" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Параўнаць каталогі" #: tfrmmain.actconfigarchivers.caption msgid "Configuration of Archivers" msgstr "Налады архіватараў" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Налады спіса выбраных каталогаў" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Налады выбраных укладак" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Налады ўкладак каталогаў" #: tfrmmain.actconfighotkeys.caption msgctxt "tfrmmain.actconfighotkeys.caption" msgid "Configuration of hot keys" msgstr "Налады гарачых клавішаў" #: tfrmmain.actconfigplugins.caption msgid "Configuration of Plugins" msgstr "Налады ўбудоў" #: tfrmmain.actconfigsavepos.caption msgid "Save Position" msgstr "Захаваць пазіцыю" #: tfrmmain.actconfigsavesettings.caption msgid "Save Settings" msgstr "Захаваць налады" #: tfrmmain.actconfigsearches.caption msgid "Configuration of searches" msgstr "Налады гарачых клавішаў" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Панэль інструментаў..." #: tfrmmain.actconfigtooltips.caption msgid "Configuration of tooltips" msgstr "Налады выплыўных падказак" #: tfrmmain.actconfigtreeviewmenus.caption msgctxt "tfrmmain.actconfigtreeviewmenus.caption" msgid "Configuration of Tree View Menu" msgstr "Налады меню ў выглядзе дрэва" #: tfrmmain.actconfigtreeviewmenuscolors.caption msgctxt "tfrmmain.actconfigtreeviewmenuscolors.caption" msgid "Configuration of Tree View Menu Colors" msgstr "Налады колераў меню ў выглядзе дрэва" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Паказаць кантэкстнае меню" #: tfrmmain.actcopy.caption msgctxt "TFRMMAIN.ACTCOPY.CAPTION" msgid "Copy" msgstr "Капіяваць" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Скапіяваць усе ўкладкі на супрацьлеглы бок" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Скапіяваць змесціва ўсіх бачных &слупкоў" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Скапіяваць назву файла(ў) разам са шляхам" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Скапіяваць &назву(ы) ў буфер абмену" #: tfrmmain.actcopynetnamestoclip.caption msgid "Copy names with UNC path" msgstr "Скапіяваць назвы ў буфер са шляхам UNC" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Скапіяваць файлы без пацвярджэння" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Скапіяваць поўны шлях абраных файлаў без канцавога падзяляльніка" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Скапіяваць поўны шлях да абранага(ых) файла(аў)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Скапіяваць на іншую панэль" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Капіяваць" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Па&казваць памер прасторы, якая выкарыстоўваецца" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Выразаць" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Паказаць параметры загаду" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Выдаліць" #: tfrmmain.actdeletesearches.caption msgid "For all searches, cancel, close and free memory" msgstr "Спыніць і закрыць усе вокны" #: tfrmmain.actdirhistory.caption msgid "Directory history" msgstr "Гісторыя каталогаў" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Спіс выбраных каталогаў" #: tfrmmain.actdoanycmcommand.caption msgid "Execute &internal command..." msgstr "Выканаць &унутраны загад..." #: tfrmmain.actdoanycmcommand.hint msgid "Select any command and execute it" msgstr "Абраць загад і выканаць яго" #: tfrmmain.actedit.caption msgctxt "TFRMMAIN.ACTEDIT.CAPTION" msgid "Edit" msgstr "Рэдагаваць" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Рэдагаваць ка&ментар..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Рэдагаваць новы файл" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Рэдагаваць поле са шляхам па-над спісам файлаў" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Памяняць &панэлі" #: tfrmmain.actexecutescript.caption msgid "Execute Script" msgstr "Выканаць скрыпт" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Выйсці" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Выняць файлы..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Налады файлавых &асацыяцый" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Аб'яд&наць файлы..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Паказаць уласцівасці &файла" #: tfrmmain.actfilespliter.caption msgid "Spl&it File..." msgstr "Падзя&ліць файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Плоскі інтэрфейс" #: tfrmmain.actflatviewsel.caption msgid "&Flat view, only selected" msgstr "&Сціслы выгляд, толькі ў абраным" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Перайсці да загаднага радка" #: tfrmmain.actfocusswap.caption msgid "Swap focus" msgstr "Змяніць фокус" #: tfrmmain.actfocusswap.hint msgid "Switch between left and right file list" msgstr "Пераключыцца на іншую файлавую панэль" #: tfrmmain.actfocustreeview.caption msgid "Focus on tree view" msgstr "Перайсці да дрэва каталогаў" #: tfrmmain.actfocustreeview.hint msgid "Switch between current file list and tree view (if enabled)" msgstr "Пераключыцца паміж спісам файлаў і дрэвам (калі ўключана)" #: tfrmmain.actgotofirstentry.caption msgid "Place cursor on first folder or file" msgstr "Размясціць курсор на першым каталозе альбо файле са спіса" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Размясціць курсор на першым файле са спіса" #: tfrmmain.actgotolastentry.caption msgid "Place cursor on last folder or file" msgstr "Размясціць курсор на апошнім каталозе альбо файле са спіса" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Размясціць курсор на апошнім файле са спіса" #: tfrmmain.actgotonextentry.caption msgid "Place cursor on next folder or file" msgstr "Размясціць курсор на наступным каталозе альбо файле са спіса" #: tfrmmain.actgotopreventry.caption msgid "Place cursor on previous folder or file" msgstr "Размясціць курсор на папярэднім каталозе альбо файле са спіса" #: tfrmmain.acthardlink.caption msgid "Create &Hard Link..." msgstr "Стварыць &жорсткую спасылку..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Змест" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Рэжым гарызантальных панэляў" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Клавіятура" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Сціслы выгляд левай панэлі" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Падрабязны выгляд левай панэлі" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Левая &=Правая" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Плоскі выгляд левай панэлі" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Адкрыць спіс дыскаў злева" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Ад&вярнуць парадак элементаў левай панэлі" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Упарадкаваць элементы левай панэлі па &атрыбутах" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Упарадкаваць элементы левай панэлі па &даце" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Упарадкаваць элементы левай панэлі па &пашырэнні" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Упарадкаваць элементы левай панэлі па &назве" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Упарадкаваць элементы левай панэлі па &памеры" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Прагляд мініяцюр у левай панэлі" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Загрузіць укладкі з улюбёных" #: tfrmmain.actloadlist.caption msgid "Load List" msgstr "Загрузіць спіс" #: tfrmmain.actloadlist.hint msgid "Load list of files/folders from the specified text file" msgstr "Загрузіць спіс файлаў або каталогаў з пазначанага тэкставага файла" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Загрузіць вылучэнне з &буфера абмену" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Загрузіць вылучэнне з файла..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Загрузіць укладкі з файла" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Стварыць &каталог" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Абраць усе з гэтым пашырэннем" #: tfrmmain.actmarkcurrentname.caption msgid "Select all files with same name" msgstr "Абраць усе з гэтай назвай" #: tfrmmain.actmarkcurrentnameext.caption msgid "Select all files with same name and extension" msgstr "Абраць усе з гэтай назвай і пашырэннем" #: tfrmmain.actmarkcurrentpath.caption msgid "Select all in same path" msgstr "Абраць усе з гэтым шляхам" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Адвярнуць" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Вылучыць усё" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Прыбраць вылучэнне з &групы..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Вылучыць &групу..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Прыбраць вылучэнне з усяго" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Згарнуць акно" #: tfrmmain.actmovetableft.caption msgid "Move current tab to the left" msgstr "Перамясціць бягучую ўкладку ўлева" #: tfrmmain.actmovetabright.caption msgid "Move current tab to the right" msgstr "Перамясціць бягучую ўкладку ўправа" #: tfrmmain.actmultirename.caption msgid "Multi-&Rename Tool" msgstr "&Масавая змена назвы" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Злучыцца з сеткай..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Адлучыцца ад сеткі" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Новае злучэнне..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Новая ўкладка" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Загрузіць наступныя ўлюбёныя ўкладкі са спіса" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Перайсці да нас&тупнай укладкі" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Адкрыць" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Паспрабаваць адкрыць архіў" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Адкрыць файл панэлі" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Адкрыць &каталог у новай укладцы" #: tfrmmain.actopendrivebyindex.caption msgid "Open Drive by Index" msgstr "Адкрыць дыск па індэксе" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "Адкрыць спіс &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Сродак прагляду аперацый" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Параметры..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Запакаваць файлы..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Прызначыць пазіцыю падзяляльніка" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Уставіць" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Загрузіць папярэднюю ўлюбёную ўкладку са спіса" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Перайсці да &папярэдняй укладкі" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Хуткі фільтр" #: tfrmmain.actquicksearch.caption msgid "Quick search" msgstr "Хуткі пошук" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Панэль хуткага прагляду" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Абнавіць" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Перазагрузіць апошнія загружаныя ўлюбёныя ўкладкі" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Перамясціць" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Перамясціць/змяніць назву файла без пацвярджэння" #: tfrmmain.actrenameonly.caption msgctxt "tfrmmain.actrenameonly.caption" msgid "Rename" msgstr "Змяніць назву" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Змяніць назву ўкладкі" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Перазахаваць апошнія загружаныя ўлюбёныя ўкладкі" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Аднавіць вылучэнне" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Ад&варотны парадак" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Сціслы выгляд правай панэлі" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Падрабязны выгляд правай панэлі" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Правая &=Левая" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Плоскі выгляд правай панэлі" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Адкрыць правы спіс дыскаў" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Ад&вярнуць парадак элементаў правай панэлі" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Упарадкаваць элементы правай панэлі па &атрыбутах" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Упарадкаваць элементы правай панэлі па &даце" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Упарадкаваць элементы правай панэлі па &пашырэнні" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Упарадкаваць элементы правай панэлі па &назве" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Упарадкаваць элементы правай панэлі па &памеры" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Прагляд мініяцюр на правай панэлі" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Запусціць &тэрмінал" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Захаваць бягучыя ўкладкі як новыя улюбёныя" #: tfrmmain.actsavefiledetailstofile.caption msgid "Save all shown columns to file" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "З&ахаваць вылучэнне" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Захаваць вылучэнне ў файл..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Захаваць укладкі ў файл" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Пошук..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Заблакаваць усе ўкладкі і адкрываць каталогі ў новых укладках" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Разблакаваць усе ўкладкі" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Заблакаваць усе ўкладкі" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Заблакаваць усе ўкладкі з магчымасцю змены каталога" #: tfrmmain.actsetfileproperties.caption msgid "Change &Attributes..." msgstr "Змяніць &атрыбуты..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Заблакаваць і адкрываць каталогі ў новых укладках" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Звычайная" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Заблакаваная" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "Заблакаваць з магчымасцю змены &каталога" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Адкрыць" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Адкрыць выкарыстоўваючы сістэмныя асацыяцыі" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Паказаць кнопкі меню" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Паказаць гісторыю загаднага радка" #: tfrmmain.actshowmainmenu.caption msgid "Menu" msgstr "Меню" #: tfrmmain.actshowsysfiles.caption msgid "Show &Hidden/System Files" msgstr "Паказваць с&хаваныя/сістэмныя файлы" #: tfrmmain.actshowtabslist.caption msgid "Show Tabs List" msgstr "" #: tfrmmain.actshowtabslist.hint msgid "Show list of all open tabs" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Упарадкаваць па &атрыбутах" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Упарадкаваць па &даце" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Упарадкаваць па &пашырэнні" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Упарадкаваць па &назве" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Упарадкаваць па &памеры" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Адкрыць спіс дыскаў" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Уключыць/выключыць функцыю выключэння назваў файлаў" #: tfrmmain.actsymlink.caption msgid "Create Symbolic &Link..." msgstr "Стварыць сімвалічную &спасылку..." #: tfrmmain.actsyncchangedir.caption msgid "Synchronous navigation" msgstr "Сінхронная навігацыя" #: tfrmmain.actsyncchangedir.hint msgid "Synchronous directory changing in both panels" msgstr "Сінхронная змена каталогаў на абедзвюх панэлях" #: tfrmmain.actsyncdirs.caption msgid "Syn&chronize dirs..." msgstr "Сінхранізаваць каталогі..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Мэта &= Крыніца" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Праверыць архіў(вы)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Мініяцюры" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Прагляд мініяцюр" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Пераключыць акно кансолі ў поўнаэкранны рэжым" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Адкрыць каталог пад курсорам у левай панэлі" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Адкрыць каталог пад курсорам у правай панэлі" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Панэль у выглядзе дрэва" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Упарадкаваць па параметрах" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Прыбраць вылучэнне з файлаў з такім жа пашы&рэннем" #: tfrmmain.actunmarkcurrentname.caption msgid "Unselect all files with same name" msgstr "Прыбраць вылучэнне з файлаў з такой жа назвай" #: tfrmmain.actunmarkcurrentnameext.caption msgid "Unselect all files with same name and extension" msgstr "Прыбраць вылучэнне з файлаў з такім жа пашырэннем і назвай" #: tfrmmain.actunmarkcurrentpath.caption msgid "Unselect all in same path" msgstr "Прыбраць вылучэнне з гэтым шляхам" #: tfrmmain.actview.caption msgctxt "TFRMMAIN.ACTVIEW.CAPTION" msgid "View" msgstr "Праглядзець" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Паказаць гісторыю наведаных месцаў" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Перайсці да наступнага запісу ў гісторыі" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Перайсці да папярэдняга запісу ў гісторыі" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Паказаць журнал" #: tfrmmain.actviewsearches.caption msgid "View current search instances" msgstr "Паказаць спіс запушчаных акон пошуку" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Наведаць сайт Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Сцерці" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and parameters" msgstr "Працаваць са спісам выбраных каталогаў і параметрамі" #: tfrmmain.btnf10.caption msgctxt "TFRMMAIN.BTNF10.CAPTION" msgid "Exit" msgstr "Выйсці" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Каталог" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Выдаліць" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Тэрмінал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Спіс выбраных каталогаў" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Паказаць бягучы каталог правай панэлі ў левай" #: tfrmmain.btnlefthome.caption msgctxt "tfrmmain.btnlefthome.caption" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Перайсці да хатняга каталога" #: tfrmmain.btnleftroot.caption msgctxt "tfrmmain.btnleftroot.caption" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Перайсці да каранёвага каталога" #: tfrmmain.btnleftup.caption msgctxt "tfrmmain.btnleftup.caption" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Перайсці да бацькоўскага каталога" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Спіс выбраных каталогаў" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Паказаць бягучы каталог левай панэлі ў правай" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "tfrmmain.lblcommandpath.caption" msgid "Path" msgstr "Шлях" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Скасаваць" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Капіяваць..." #: tfrmmain.mihardlink.caption msgid "Create link..." msgstr "Стварыць спасылку..." #: tfrmmain.milogclear.caption msgctxt "tfrmmain.milogclear.caption" msgid "Clear" msgstr "Ачысціць" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Капіяваць" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Схаваць" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Абраць усё" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Перамясціць..." #: tfrmmain.misymlink.caption msgid "Create symlink..." msgstr "Стварыць спасылку..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Параметры ўкладкі" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Выйсці" #: tfrmmain.mitrayiconrestore.caption msgctxt "tfrmmain.mitrayiconrestore.caption" msgid "Restore" msgstr "Аднавіць" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Пачаць" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Скасаваць" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Загады" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Канфігурацыя" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Улюбёнае" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файлы" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Даведка" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Пазначэнне" #: tfrmmain.mnunetwork.caption msgctxt "tfrmmain.mnunetwork.caption" msgid "Network" msgstr "Сетка" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Выгляд" #: tfrmmain.mnutaboptions.caption msgid "Tab &Options" msgstr "&Параметры ўкладкі" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Укладкі" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Капіяваць" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Выразаць" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Выдаліць" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Рэдагаваць" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Уставіць" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmmaincommandsdlg.caption msgctxt "tfrmmaincommandsdlg.caption" msgid "Select your internal command" msgstr "Абраць унутраны загад" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Упарадкаваць састарэлыя" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Упарадкаваць састарэлыя" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Абраць усе прадвызначаныя катэгорыі" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Вылучэнне:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Катэгорыі:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Назва загаду:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Фільтр:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Падказка:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Гарачыя клавішы:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Катэгорыя" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Даведка" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Падказка" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Гарачыя клавішы" #: tfrmmaskinputdlg.btnaddattribute.caption msgctxt "TFRMMASKINPUTDLG.BTNADDATTRIBUTE.CAPTION" msgid "&Add" msgstr "&Дадаць" #: tfrmmaskinputdlg.btnattrshelp.caption msgctxt "TFRMMASKINPUTDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Даведка" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Шаблон..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmmaskinputdlg.chkcasesensitive.caption msgctxt "tfrmmaskinputdlg.chkcasesensitive.caption" msgid "Case sensitive" msgstr "Зважаць на рэгістр" #: tfrmmaskinputdlg.chkignoreaccentsandligatures.caption msgid "Ignore accents and ligatures" msgstr "Не зважаць на акцэнты і лігатуры" #: tfrmmaskinputdlg.lblattributes.caption msgid "Attri&butes:" msgstr "Атр&ыбуты:" #: tfrmmaskinputdlg.lblprompt.caption msgid "Input Mask:" msgstr "Уваходная маска:" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Альбо абярыце тып файла па шаблоне:" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Стварыць новы каталог" #: tfrmmkdir.cbextended.caption msgid "&Extended syntax" msgstr "&Пашыраны сінтаксіс" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Увядзіце новую назву каталога:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Новы памер" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Вышыня:" #: tfrmmodview.lblpath1.caption msgctxt "tfrmmodview.lblpath1.caption" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Якасць сціскання Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Шырыня:" #: tfrmmodview.teheight.text msgctxt "tfrmmodview.teheight.text" msgid "Height" msgstr "Вышыня" #: tfrmmodview.tewidth.text msgctxt "tfrmmodview.tewidth.text" msgid "Width" msgstr "Шырыня" #: tfrmmsg.lblmsg.caption msgid "456456465465465" msgstr "456456465465465" #: tfrmmultirename.actanyextmask.caption msgctxt "tfrmmultirename.actanyextmask.caption" msgid "Extension" msgstr "Пашырэнне" #: tfrmmultirename.actanynamemask.caption msgctxt "tfrmmultirename.actanynamemask.caption" msgid "Filename" msgstr "Назва файла" #: tfrmmultirename.actclearextmask.caption msgctxt "tfrmmultirename.actclearextmask.caption" msgid "Clear" msgstr "Ачысціць" #: tfrmmultirename.actclearnamemask.caption msgctxt "tfrmmultirename.actclearnamemask.caption" msgid "Clear" msgstr "Ачысціць" #: tfrmmultirename.actclose.caption msgctxt "tfrmmultirename.actclose.caption" msgid "&Close" msgstr "&Закрыць" #: tfrmmultirename.actconfig.caption msgid "Confi&guration" msgstr "&Канфігурацыя" #: tfrmmultirename.actctrextmask.caption msgctxt "tfrmmultirename.actctrextmask.caption" msgid "Counter" msgstr "Лічыльнік" #: tfrmmultirename.actctrnamemask.caption msgctxt "tfrmmultirename.actctrnamemask.caption" msgid "Counter" msgstr "Лічыльнік" #: tfrmmultirename.actdateextmask.caption msgctxt "tfrmmultirename.actdateextmask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdatenamemask.caption msgctxt "tfrmmultirename.actdatenamemask.caption" msgid "Date" msgstr "Дата" #: tfrmmultirename.actdeletepreset.caption msgctxt "tfrmmultirename.actdeletepreset.caption" msgid "Delete" msgstr "Вы&даліць" #: tfrmmultirename.actdropdownpresetlist.caption msgid "Drop Down Presets List" msgstr "Разгарнуць спіс перадналадаў" #: tfrmmultirename.acteditnames.caption msgid "Edit Names..." msgstr "Рэдагаваць назвы..." #: tfrmmultirename.acteditnewnames.caption msgid "Edit Current New Names..." msgstr "Рэдагаваць бягучыя новыя назвы..." #: tfrmmultirename.actextextmask.caption msgctxt "tfrmmultirename.actextextmask.caption" msgid "Extension" msgstr "Пашырэнне" #: tfrmmultirename.actextnamemask.caption msgctxt "tfrmmultirename.actextnamemask.caption" msgid "Extension" msgstr "Пашырэнне" #: tfrmmultirename.actinvokeeditor.caption msgctxt "tfrmmultirename.actinvokeeditor.caption" msgid "Edit&or" msgstr "&Рэдагаваць" #: tfrmmultirename.actinvokerelativepath.caption msgid "Invoke Relative Path Menu" msgstr "Выклікаць меню адноснага шляху" #: tfrmmultirename.actloadlastpreset.caption msgid "Load Last Preset" msgstr "Загрузіць апошнія перадналады" #: tfrmmultirename.actloadnamesfromfile.caption msgid "Load Names from File..." msgstr "Загрузіць назвы з файла..." #: tfrmmultirename.actloadpreset.caption msgid "Load Preset by Name or Index" msgstr "Загрузіць перадналады па назве альбо індэксе" #: tfrmmultirename.actloadpreset1.caption msgid "Load Preset 1" msgstr "Загрузіць перадналады 1" #: tfrmmultirename.actloadpreset2.caption msgid "Load Preset 2" msgstr "Загрузіць перадналады 2" #: tfrmmultirename.actloadpreset3.caption msgid "Load Preset 3" msgstr "Загрузіць перадналады 3" #: tfrmmultirename.actloadpreset4.caption msgid "Load Preset 4" msgstr "Загрузіць перадналады 4" #: tfrmmultirename.actloadpreset5.caption msgid "Load Preset 5" msgstr "Загрузіць перадналады 5" #: tfrmmultirename.actloadpreset6.caption msgid "Load Preset 6" msgstr "Загрузіць перадналады 6" #: tfrmmultirename.actloadpreset7.caption msgid "Load Preset 7" msgstr "Загрузіць перадналады 7" #: tfrmmultirename.actloadpreset8.caption msgid "Load Preset 8" msgstr "Загрузіць перадналады 8" #: tfrmmultirename.actloadpreset9.caption msgid "Load Preset 9" msgstr "Загрузіць перадналады 9" #: tfrmmultirename.actnameextmask.caption msgctxt "tfrmmultirename.actnameextmask.caption" msgid "Filename" msgstr "Назва файла" #: tfrmmultirename.actnamenamemask.caption msgctxt "tfrmmultirename.actnamenamemask.caption" msgid "Filename" msgstr "Назва файла" #: tfrmmultirename.actplgnextmask.caption msgctxt "tfrmmultirename.actplgnextmask.caption" msgid "Plugins" msgstr "Убудовы" #: tfrmmultirename.actplgnnamemask.caption msgctxt "tfrmmultirename.actplgnnamemask.caption" msgid "Plugins" msgstr "Убудовы" #: tfrmmultirename.actrename.caption msgctxt "tfrmmultirename.actrename.caption" msgid "&Rename" msgstr "&Змяніць назву" #: tfrmmultirename.actrenamepreset.caption msgctxt "tfrmmultirename.actrenamepreset.caption" msgid "Rename" msgstr "Змяніць назву" #: tfrmmultirename.actresetall.caption msgctxt "tfrmmultirename.actresetall.caption" msgid "Reset &All" msgstr "Скінуць &усе" #: tfrmmultirename.actsavepreset.caption msgctxt "tfrmmultirename.actsavepreset.caption" msgid "Save" msgstr "Захаваць" #: tfrmmultirename.actsavepresetas.caption msgctxt "tfrmmultirename.actsavepresetas.caption" msgid "Save As..." msgstr "Захаваць як..." #: tfrmmultirename.actshowpresetsmenu.caption msgid "Show Preset Menu" msgstr "Паказаць меню перадналад" #: tfrmmultirename.actsortpresets.caption msgid "Sort" msgstr "Сартаваць" #: tfrmmultirename.acttimeextmask.caption msgctxt "tfrmmultirename.acttimeextmask.caption" msgid "Time" msgstr "Час" #: tfrmmultirename.acttimenamemask.caption msgctxt "tfrmmultirename.acttimenamemask.caption" msgid "Time" msgstr "Час" #: tfrmmultirename.actviewrenamelogfile.caption msgid "View Rename Log File" msgstr "Праглядзець журнал змены назваў" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "Multi-Rename Tool" msgstr "&Масавая змена назвы" #: tfrmmultirename.cbcasesens.caption msgid "A≠a" msgstr "A≠a" #: tfrmmultirename.cbcasesens.hint msgctxt "tfrmmultirename.cbcasesens.hint" msgid "Case sensitive" msgstr "Зважаць на рэгістр" #: tfrmmultirename.cblog.caption msgid "&Log result" msgstr "&Журнал вынікаў" #: tfrmmultirename.cblogappend.caption msgid "Append" msgstr "Дадаць" #: tfrmmultirename.cbonlyfirst.caption msgid "1x" msgstr "1x" #: tfrmmultirename.cbonlyfirst.hint msgid "Replace only once per file" msgstr "Замяняць толькі адзін раз для кожнага файла" #: tfrmmultirename.cbregexp.caption msgid "Regular e&xpressions" msgstr "Рэгулярныя &выразы" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Выкарыстоўваць падстаноўку" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.gbcounter.caption msgctxt "tfrmmultirename.gbcounter.caption" msgid "Counter" msgstr "Лічыльнік" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Знайсці і &замяніць" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Профілі" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Пашырэнне" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Шукаць..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Інтэрвал" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Назва файла" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Зам&яніць..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Пачатковы нумар" #: tfrmmultirename.lbwidth.caption msgid "&Width" msgstr "&Шырыня" #: tfrmmultirename.miactions.caption msgctxt "tfrmmultirename.miactions.caption" msgid "Actions" msgstr "Дзеянні" #: tfrmmultirename.mieditor.caption msgctxt "tfrmmultirename.mieditor.caption" msgid "Editor" msgstr "Рэдактар" #: tfrmmultirename.stringgrid.columns[0].title.caption msgid "Old File Name" msgstr "Старая назва файла" #: tfrmmultirename.stringgrid.columns[1].title.caption msgid "New File Name" msgstr "Новая назва файла" #: tfrmmultirename.stringgrid.columns[2].title.caption msgid "File Path" msgstr "Шлях да файла" #: tfrmmultirenamewait.caption msgctxt "TFRMMULTIRENAMEWAIT.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmultirenamewait.lblmessage.caption msgid "Click OK when you have closed the editor to load the changed names!" msgstr "Пстрыкніце \"Добра\" пры закрыцці рэдактара, каб загрузіць змененыя назвы!" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Абраць праграму" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Адвольны загад" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Захаваць асацыяцыю" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Прызначыць абраную праграму прадвызначаным дзеяннем" #: tfrmopenwith.lblmimetype.caption #, object-pascal-format msgid "File type to be opened: %s" msgstr "Тып файла, што адкрываецца: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Спіс файлаў" #: tfrmopenwith.milistoffiles.hint #, object-pascal-format msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Спіс URI" #: tfrmopenwith.milistofurls.hint #, object-pascal-format msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Адзін файл" #: tfrmopenwith.misinglefilename.hint #, object-pascal-format msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Адзін URI" #: tfrmopenwith.misingleurl.hint #, object-pascal-format msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "tfrmoptions.btnapply.caption" msgid "&Apply" msgstr "&Ужыць" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmoptions.btnhelp.caption msgctxt "tfrmoptions.btnhelp.caption" msgid "&Help" msgstr "&Даведка" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Параметры" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Калі ласка, абярыце адну з падстаронак, на гэтай няма патрэбных наладаў." #: tfrmoptionsarchivers.btnarchiveradd.caption msgctxt "tfrmoptionsarchivers.btnarchiveradd.caption" msgid "A&dd" msgstr "&Дадаць" #: tfrmoptionsarchivers.btnarchiveraddhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiveraddhelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchiverapply.caption msgctxt "tfrmoptionsarchivers.btnarchiverapply.caption" msgid "A&pply" msgstr "У&жыць" #: tfrmoptionsarchivers.btnarchivercopy.caption msgctxt "tfrmoptionsarchivers.btnarchivercopy.caption" msgid "Cop&y" msgstr "&Капіяваць" #: tfrmoptionsarchivers.btnarchiverdelete.caption msgctxt "tfrmoptionsarchivers.btnarchiverdelete.caption" msgid "Delete" msgstr "Вы&даліць" #: tfrmoptionsarchivers.btnarchiverdeletehelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverdeletehelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchiverextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextracthelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverextractwithoutpathhelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchiverlisthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverlisthelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchiverother.caption msgctxt "tfrmoptionsarchivers.btnarchiverother.caption" msgid "Oth&er..." msgstr "Ін&шае..." #: tfrmoptionsarchivers.btnarchiverrelativer.hint msgctxt "tfrmoptionsarchivers.btnarchiverrelativer.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsarchivers.btnarchiverrename.caption msgctxt "tfrmoptionsarchivers.btnarchiverrename.caption" msgid "&Rename" msgstr "&Змяніць назву" #: tfrmoptionsarchivers.btnarchiverselfextracthelper.hint msgctxt "tfrmoptionsarchivers.btnarchiverselfextracthelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.btnarchivertesthelper.hint msgctxt "tfrmoptionsarchivers.btnarchivertesthelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsarchivers.bvlarchiverids.caption msgctxt "tfrmoptionsarchivers.bvlarchiverids.caption" msgid "ID's used with cm_OpenArchive to recognize archive by detecting its content and not via file extension:" msgstr "Ідэнтыфікатар выкарыстоўваецца з cm_OpenArchive, каб распазнаць архіў без пашырэння:" #: tfrmoptionsarchivers.bvlarchiveroptions.caption msgctxt "tfrmoptionsarchivers.bvlarchiveroptions.caption" msgid "Options:" msgstr "Параметры:" #: tfrmoptionsarchivers.bvlarchiverparsingmode.caption msgctxt "tfrmoptionsarchivers.bvlarchiverparsingmode.caption" msgid "Format parsing mode:" msgstr "Рэжым разбору фармату:" #: tfrmoptionsarchivers.chkarchiverenabled.caption msgctxt "tfrmoptionsarchivers.chkarchiverenabled.caption" msgid "E&nabled" msgstr "Ук&лючана" #: tfrmoptionsarchivers.chkarchivermultiarcdebug.caption msgid "De&bug mode" msgstr "Рэ&жым адладжвання" #: tfrmoptionsarchivers.chkarchivermultiarcoutput.caption msgctxt "tfrmoptionsarchivers.chkarchivermultiarcoutput.caption" msgid "S&how console output" msgstr "Па&казваць вывад кансолі" #: tfrmoptionsarchivers.chkfilenameonlylist.caption msgid "Use archive name without extension as list" msgstr "Выкарыстоўваць назву архіва без пашырэння, як спіс" #: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption msgid "Uni&x file attributes" msgstr "Uni&x-атрыбуты файлаў" #: tfrmoptionsarchivers.ckbarchiverunixpath.caption msgid "&Unix path delimiter \"/\"" msgstr "Падзяляльнік шляху &Unix \"/\"" #: tfrmoptionsarchivers.ckbarchiverwindowsfileattributes.caption msgid "Windows &file attributes" msgstr "Windows-атрыбуты &файлаў" #: tfrmoptionsarchivers.ckbarchiverwindowspath.caption msgid "Windows path deli&miter \"\\\"" msgstr "Падзяляльнік шляху &Windows \"\\\"" #: tfrmoptionsarchivers.lblarchiveradd.caption msgctxt "tfrmoptionsarchivers.lblarchiveradd.caption" msgid "Add&ing:" msgstr "Дада&нне:" #: tfrmoptionsarchivers.lblarchiverarchiver.caption msgctxt "tfrmoptionsarchivers.lblarchiverarchiver.caption" msgid "Arc&hiver:" msgstr "Ар&хіватар:" #: tfrmoptionsarchivers.lblarchiverdelete.caption msgid "De&lete:" msgstr "&Выдаліць:" #: tfrmoptionsarchivers.lblarchiverdescription.caption msgctxt "tfrmoptionsarchivers.lblarchiverdescription.caption" msgid "De&scription:" msgstr "Апі&санне:" #: tfrmoptionsarchivers.lblarchiverextension.caption msgctxt "tfrmoptionsarchivers.lblarchiverextension.caption" msgid "E&xtension:" msgstr "Па&шырэнне:" #: tfrmoptionsarchivers.lblarchiverextract.caption msgctxt "tfrmoptionsarchivers.lblarchiverextract.caption" msgid "Ex&tract:" msgstr "Вы&няць:" #: tfrmoptionsarchivers.lblarchiverextractwithoutpath.caption msgid "Extract &without path:" msgstr "Выняць &без уліку шляху:" #: tfrmoptionsarchivers.lblarchiveridposition.caption msgid "ID Po&sition:" msgstr "&Пазіцыя ідэнтыфікатара:" #: tfrmoptionsarchivers.lblarchiverids.caption msgid "&ID:" msgstr "&Ідэнтыфікатар:" #: tfrmoptionsarchivers.lblarchiveridseekrange.caption msgid "ID See&k Range:" msgstr "&Дыяпазон пошуку ідэнтыфікатара:" #: tfrmoptionsarchivers.lblarchiverlist.caption msgctxt "tfrmoptionsarchivers.lblarchiverlist.caption" msgid "&List:" msgstr "&Спіс:" #: tfrmoptionsarchivers.lblarchiverlistbox.caption msgid "Archi&vers:" msgstr "Архі&ватары:" #: tfrmoptionsarchivers.lblarchiverlistend.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistend.caption" msgid "Listing &finish (optional):" msgstr "&Канец спіса (неабавязкова):" #: tfrmoptionsarchivers.lblarchiverlistformat.caption msgctxt "tfrmoptionsarchivers.lblarchiverlistformat.caption" msgid "Listing for&mat:" msgstr "&Фармат спіса:" #: tfrmoptionsarchivers.lblarchiverliststart.caption msgctxt "tfrmoptionsarchivers.lblarchiverliststart.caption" msgid "Listin&g start (optional):" msgstr "Пачатак с&піса (неабавязкова):" #: tfrmoptionsarchivers.lblarchiverpasswordquery.caption msgid "Password &query string:" msgstr "Радок &для пароля:" #: tfrmoptionsarchivers.lblarchiverselfextract.caption msgid "Create self extractin&g archive:" msgstr "Стварыць &архіў, які сам распакоўваецца:" #: tfrmoptionsarchivers.lblarchivertest.caption msgid "Tes&t:" msgstr "&Праверыць:" #: tfrmoptionsarchivers.miarchiverautoconfigure.caption msgid "Auto Configure" msgstr "Аў&таматычнае наладжванне" #: tfrmoptionsarchivers.miarchiverdisableall.caption msgid "Disable all" msgstr "Выключыць усе" #: tfrmoptionsarchivers.miarchiverdiscardmodification.caption msgid "Discard modifications" msgstr "Адкінуць змены" #: tfrmoptionsarchivers.miarchiverenableall.caption msgid "Enable all" msgstr "Уключыць усе" #: tfrmoptionsarchivers.miarchiverexport.caption msgctxt "tfrmoptionsarchivers.miarchiverexport.caption" msgid "Export..." msgstr "Экспарт..." #: tfrmoptionsarchivers.miarchiverimport.caption msgctxt "tfrmoptionsarchivers.miarchiverimport.caption" msgid "Import..." msgstr "Імпарт..." #: tfrmoptionsarchivers.miarchiversortarchivers.caption msgid "Sort archivers" msgstr "Сартаваць архіватары" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgid "Additional" msgstr "Дадатковыя" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Асноўныя" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgid "When &size, date or attributes change" msgstr "Калі &памер, дата альбо атрыбуты змяняюцца" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Для &шляхоў, якія выкарыстоўваюцца, і падкаталогаў па іх:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "Калі &файлы ствараюцца, выдаляюцца, альбо змяняюцца іх назвы" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgid "When application is in the &background" msgstr "Калі праграма ў &фоне" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgid "Disable auto-refresh" msgstr "Выключыць аўтаматычнае абнаўленне" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgid "Refresh file list" msgstr "Абнавіць спіс файлаў" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "Заў&сёды паказваць значок на прасторы апавяшчэнняў" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Аўтаматычна &хаваць адмантаваныя прылады" #: tfrmoptionsbehavior.cbminimizetotray.caption msgid "Mo&ve icon to system tray when minimized" msgstr "Перамя&шчаць значок на прастору апавяшчэнняў падчас згортвання" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "Дазв&оліць запуск толькі адной копіі DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Тут вы можаце ўвесці адзін альбо некалькі дыскаў, альбо пунктаў мантавання, падзяляючы іх \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Чорны спіс дыскаў" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Памер слупкоў" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Паказваць пашырэнні файлаў" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "выраў&наванымі (з Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "непа&срэдна пасля назваў" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Аўтаматычна" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Фіксаваная колькасць слупкоў" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Фіксаваная шырыня слупкоў" #: tfrmoptionscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Выкарыстоўваць індыкатар &градыента" #: tfrmoptionscolors.dbbinarymode.caption #, fuzzy msgctxt "tfrmoptionscolors.dbbinarymode.caption" msgid "Binary Mode" msgstr "Двайковы рэжым" #: tfrmoptionscolors.dbbookmode.caption msgid "Book Mode" msgstr "" #: tfrmoptionscolors.dbimagemode.caption msgid "Image Mode" msgstr "" #: tfrmoptionscolors.dbtextmode.caption msgid "Text Mode" msgstr "" #: tfrmoptionscolors.lbladded.caption msgid "Added:" msgstr "" #: tfrmoptionscolors.lblbookbackground.caption msgctxt "tfrmoptionscolors.lblbookbackground.caption" msgid "Background:" msgstr "" #: tfrmoptionscolors.lblbooktext.caption #, fuzzy msgctxt "tfrmoptionscolors.lblbooktext.caption" msgid "Text:" msgstr "Тэкст:" #: tfrmoptionscolors.lblcategory.caption msgid "Category:" msgstr "" #: tfrmoptionscolors.lbldeleted.caption msgid "Deleted:" msgstr "" #: tfrmoptionscolors.lblerror.caption msgid "Error:" msgstr "" #: tfrmoptionscolors.lblimagebackground1.caption msgid "Background 1:" msgstr "" #: tfrmoptionscolors.lblimagebackground2.caption #, fuzzy msgctxt "tfrmoptionscolors.lblimagebackground2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Колер фону &індыкатара:" #: tfrmoptionscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Колер інды&катара:" #: tfrmoptionscolors.lblindthresholdcolor.caption msgid "Indicator &Threshold Color:" msgstr "" #: tfrmoptionscolors.lblinformation.caption msgid "Information:" msgstr "" #: tfrmoptionscolors.lblleft.caption msgid "Left:" msgstr "" #: tfrmoptionscolors.lblmodified.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodified.caption" msgid "Modified:" msgstr "Зменены:" #: tfrmoptionscolors.lblmodifiedbinary.caption #, fuzzy msgctxt "tfrmoptionscolors.lblmodifiedbinary.caption" msgid "Modified:" msgstr "Зменены:" #: tfrmoptionscolors.lblright.caption msgid "Right:" msgstr "" #: tfrmoptionscolors.lblsuccess.caption #, fuzzy msgctxt "tfrmoptionscolors.lblsuccess.caption" msgid "Success:" msgstr "Паспяхова:" #: tfrmoptionscolors.lblunknown.caption msgid "Unknown:" msgstr "" #: tfrmoptionscolors.rgdarkmode.caption msgid "State" msgstr "" #: tfrmoptionscolumnsview.cbcolumnstitlelikevalues.caption msgid "Column titles alignment &like values" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Абразаць &тэкст па шырыні слупка" #: tfrmoptionscolumnsview.cbextendcellwidth.caption msgid "&Extend cell width if text is not fitting into column" msgstr "&Пашырыць шырыню ячэйкі, калі тая не ўмяшчаецца ў слупок" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Гарызантальныя лініі" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Вертыкальныя лініі" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Аў&таматычнае запаўненне слупкоў" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Паказваць сетку" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Аўтаматычна змяняць памер слупкоў" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Аўтаматычна змяняць па&мер слупкоў:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "У&жыць" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Гісторыя загад&нага радка" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "&Гісторыя каталога" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Гісторыя &файлавай маскі" #: tfrmoptionsconfiguration.chkfoldertabs.caption msgctxt "tfrmoptionsconfiguration.chkfoldertabs.caption" msgid "Folder tabs" msgstr "Укладкі каталогаў" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Захава&ць канфігурацыю" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Шукаць/замяніць гісторыю" #: tfrmoptionsconfiguration.chkwindowstate.caption msgid "Main window state" msgstr "Стан галоўнага акна" #: tfrmoptionsconfiguration.gbdirectories.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Каталогі" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Размяшчэнне файлаў канфігурацыі" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Захоўваць падчас выхаду" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Парадкаванне дрэва канфігурацыі злева" #: tfrmoptionsconfiguration.gpconfigurationtreestate.caption msgid "Tree state when entering in configuration page" msgstr "Стан дрэва пры адкрыцці старонкі канфігурацыі" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Вызначана праз загадны радок" #: tfrmoptionsconfiguration.lblhighlighters.caption msgid "Highlighters:" msgstr "Падсвятленне:" #: tfrmoptionsconfiguration.lbliconthemes.caption msgid "Icon themes:" msgstr "Тэма значкоў:" #: tfrmoptionsconfiguration.lblthumbcache.caption msgid "Thumbnails cache:" msgstr "Кэш мініяцюр:" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Каталог пра&грамы (партатыўная версія)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Хатні каталог &карыстальніка" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Усё" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Ужыць змены да ўсіх слупкоў" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Перайсці да прадвызначанага" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Новая" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Наступная" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Папярэдняя" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Змяніць назву" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "П" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Скінуць да прадвызначанага" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Захаваць як" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Захаваць" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Дазволіць накладанне колеру" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Калі што-небудзь змяняецца, то змяняецца для ўсіх слупкоў" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Асноўныя" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Мяжа курсора" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Выкарыстоўваць рамку курсора" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Вылучэнне ў неактыўнай панэлі" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Выкарыстоўваць адваротнае вылучэнне" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Выкарыстоўваць адвольны шрыфт і колер" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgid "BackGround:" msgstr "Фон:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "&Columns view:" msgstr "Выгляд &слупкоў:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Бягучая назва слупка]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgid "Cursor Color:" msgstr "Колер курсора:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgid "Cursor Text:" msgstr "Тэкст курсора:" #: tfrmoptionscustomcolumns.lblfilesystem.caption msgid "&File system:" msgstr "&Файлавая сістэма:" #: tfrmoptionscustomcolumns.lblfontname.caption msgid "Font:" msgstr "Шрыфт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Памер:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Колер тэксту:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Колер неактыўнага курсора:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Колер неактыўнага вылучэння:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgid "Mark Color:" msgstr "Колер вылучэння:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ніжэй знаходзіцца вобласць папярэдняга прагляду. Вы можаце перамяшчаць курсор і вылучаць файлы, каб паспрабаваць абраныя налады." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Налады слупка:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgid "Add column" msgstr "Дадаць слупок" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Пазіцыя панэлі пасля параўнання:" #: tfrmoptionsdirectoryhotlist.actaddactiveframedir.caption msgid "Add directory of the &active frame" msgstr "Дадаць каталог &актыўнай укладкі" #: tfrmoptionsdirectoryhotlist.actaddbothframedir.caption msgid "Add &directories of the active && inactive frames" msgstr "Дадаць &каталогі актыўнай і неактыўнай укладак" #: tfrmoptionsdirectoryhotlist.actaddbrowseddir.caption msgid "Add directory I will bro&wse to" msgstr "Дыялог &выбару каталога" #: tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddcopyofentry.caption" msgid "Add a copy of the selected entry" msgstr "Дадаць копію абранага радка" #: tfrmoptionsdirectoryhotlist.actaddselectionsfromframe.caption msgid "Add current &selected or active directories of active frame" msgstr "Дадаць &абранае альбо каталог актыўнай укладкі" #: tfrmoptionsdirectoryhotlist.actaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddseparator.caption" msgid "Add a separator" msgstr "Дадаць падзяляльнік" #: tfrmoptionsdirectoryhotlist.actaddsubmenu.caption msgid "Add a sub menu" msgstr "Дадаць падменю" #: tfrmoptionsdirectoryhotlist.actaddtypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actaddtypeddir.caption" msgid "Add directory I will type" msgstr "Дадаць каталог уласнаручна" #: tfrmoptionsdirectoryhotlist.actcollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.actcollapseall.caption" msgid "Collapse all" msgstr "Згарнуць усё" #: tfrmoptionsdirectoryhotlist.actcollapseitem.caption msgid "Collapse item" msgstr "Згарнуць элемент" #: tfrmoptionsdirectoryhotlist.actcut.caption msgid "Cut selection of entries" msgstr "Выразаць абранае" #: tfrmoptionsdirectoryhotlist.actdeleteall.caption msgid "Delete all!" msgstr "Выдаліць усё!" #: tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption msgctxt "tfrmoptionsdirectoryhotlist.actdeleteselecteditem.caption" msgid "Delete selected item" msgstr "Выдаліць абраны элемент" #: tfrmoptionsdirectoryhotlist.actdeletesubmenuandelem.caption msgid "Delete sub-menu and all its elements" msgstr "Выдаліць падменю і ўсе яго элементы" #: tfrmoptionsdirectoryhotlist.actdeletesubmenukeepelem.caption msgid "Delete just sub-menu but keep elements" msgstr "Выдаліць падменю, але пакінуць яго элементы" #: tfrmoptionsdirectoryhotlist.actexpanditem.caption msgid "Expand item" msgstr "Разгарнуць элемент" #: tfrmoptionsdirectoryhotlist.actfocustreewindow.caption msgid "Focus tree window" msgstr "Фокус на дрэва элементаў" #: tfrmoptionsdirectoryhotlist.actgotofirstitem.caption msgid "Goto first item" msgstr "Перайсці да першага элемента" #: tfrmoptionsdirectoryhotlist.actgotolastitem.caption msgid "Goto last item" msgstr "Перайсці да апошняга элемента" #: tfrmoptionsdirectoryhotlist.actgotonextitem.caption msgid "Go to next item" msgstr "Перайсці да наступнага элемента" #: tfrmoptionsdirectoryhotlist.actgotopreviousitem.caption msgid "Go to previous item" msgstr "Перайсці да папярэдняга элемента" #: tfrmoptionsdirectoryhotlist.actinsertactiveframedir.caption msgid "Insert directory of the &active frame" msgstr "Уставіць каталог &актыўнай укладкі" #: tfrmoptionsdirectoryhotlist.actinsertbothframedir.caption msgid "Insert &directories of the active && inactive frames" msgstr "Уставіць каталогі && актыўнай і неактыўнай укладак" #: tfrmoptionsdirectoryhotlist.actinsertbrowseddir.caption msgid "Insert directory I will bro&wse to" msgstr "Дыялог &выбару каталога" #: tfrmoptionsdirectoryhotlist.actinsertcopyofentry.caption msgid "Insert a copy of the selected entry" msgstr "Уставіць копію абранага элемента" #: tfrmoptionsdirectoryhotlist.actinsertselectionsfromframe.caption msgid "Insert current &selected or active directories of active frame" msgstr "Уставіць &абранае альбо каталог актыўнай укладкі" #: tfrmoptionsdirectoryhotlist.actinsertseparator.caption msgid "Insert a separator" msgstr "Уставіць падзяляльнік" #: tfrmoptionsdirectoryhotlist.actinsertsubmenu.caption msgid "Insert sub menu" msgstr "Уставіць падменю" #: tfrmoptionsdirectoryhotlist.actinserttypeddir.caption msgctxt "tfrmoptionsdirectoryhotlist.actinserttypeddir.caption" msgid "Insert directory I will type" msgstr "Уставіць каталог уласнаручна" #: tfrmoptionsdirectoryhotlist.actmovetonext.caption msgid "Move to next" msgstr "Перайсці да наступнага" #: tfrmoptionsdirectoryhotlist.actmovetoprevious.caption msgid "Move to previous" msgstr "Перайсці да папярэдняга" #: tfrmoptionsdirectoryhotlist.actopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.actopenallbranches.caption" msgid "Open all branches" msgstr "Адкрыць усе галіны" #: tfrmoptionsdirectoryhotlist.actpaste.caption msgid "Paste what was cut" msgstr "Уставіць выразанае" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpath.caption msgid "Search && replace in &path" msgstr "Знайсці і замяніць па &шляху" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceinpathandtarget.caption msgid "Search && replace in both path and target" msgstr "Знайсці і &замяніць па шляху і мэтавым шляху" #: tfrmoptionsdirectoryhotlist.actsearchandreplaceintargetpath.caption msgid "Search && replace in &target path" msgstr "Знайсці і замяніць па &мэтавым шляху" #: tfrmoptionsdirectoryhotlist.acttweakpath.caption msgid "Tweak path" msgstr "Змяніць шлях" #: tfrmoptionsdirectoryhotlist.acttweaktargetpath.caption msgid "Tweak target path" msgstr "Змяніць мэтавы шлях" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "A&dd..." msgstr "&Дадаць..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Bac&kup..." msgstr "&Стварыць рэзервовую копію..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "De&lete..." msgstr "&Выдаліць..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "E&xport..." msgstr "&Экспарт..." #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Impo&rt..." msgstr "&Імпарт..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "&Insert..." msgstr "&Уставіць..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "&Miscellaneous..." msgstr "&Рознае..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "Некаторыя функцыі для выбару мэтавага шляху" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "&Sort..." msgstr "&Упарадкаваць..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "&When adding directory, add also target" msgstr "&Падчас дадання дадаваць мэтавы шлях" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Alwa&ys expand tree" msgstr "&Заўсёды разгортваць дрэва" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only &valid environment variables" msgstr "Паказваць толькі &карэктныя зменныя асяроддзя" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In pop&up, show [path also]" msgstr "Паказваць у &меню таксама і шлях" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Назва, а-я" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Назва, а-я" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Выбраныя каталогі (парадкуйце &перацягваннем)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Іншыя параметры" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Назва:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Шлях:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "&Target:" msgstr "&Мэта:" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current le&vel of item(s) selected only" msgstr "...бягучы ўз&ровень элементаў, толькі абраныя" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all &hotdir's path to validate the ones that actually exist" msgstr "Праверыць &існаванне шляхоў" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "&Scan all hotdir's path && target to validate the ones that actually exist" msgstr "&Праверыць існаванне шляхоў і мэтавых шляхоў" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory &Hotlist file (.hotlist)" msgstr "у файл &выбраных каталогаў (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (&keep existing)" msgstr "у файл \"wincmd.ini\" TC (&пакінуць існыя)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (&erase existing)" msgstr "у файл \"wincmd.ini\" TC (&выдаліць існыя)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to &configure TC related info" msgstr "Перайсці да &наладаў, звязаных з TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to &configure TC related info" msgstr "Перайсці да &наладаў, звязаных з TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory &Hotlist file (.hotlist)" msgstr "з файла выбраных &каталогаў (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"&wincmd.ini\" of TC" msgstr "з файла ТС \"&wincmd.ini\"" #: tfrmoptionsdirectoryhotlist.minavigate.caption msgid "&Navigate..." msgstr "&Навігацыя..." #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "&Restore a backup of Directory Hotlist" msgstr "&Аднавіць спіс выбраных каталогаў з рэзервовай копіі" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "&Save a backup of current Directory Hotlist" msgstr "&Захаваць рэзервовую копію" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and &replace..." msgstr "Знайсці і &замяніць..." #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to &Z!" msgstr "...усе, ад а да &я!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single &group of item(s) only" msgstr "...толькі асобныя &групы элементаў" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...&content of submenu(s) selected, no sublevel" msgstr "...&змесціва абранага падменю, без падузроўняў" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and &all sublevels" msgstr "...змесціва абранага падменю і &ўсіх падузроўняў" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resultin&g menu" msgstr "Праверыць &выніковае меню" #: tfrmoptionsdirectoryhotlist.mitweakpath.caption msgid "Tweak &path" msgstr "Змяніць &шлях" #: tfrmoptionsdirectoryhotlist.mitweaktargetpath.caption msgid "Tweak &target path" msgstr "Змяніць &мэтавы шлях" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel" msgstr "Даданне з галоўнай панэлі" #: tfrmoptionsdirectoryhotlistextra.btnpathtoberelativetoall.caption msgid "Apply current settings to directory hotlist" msgstr "Ужыць бягучыя налады для ўсіх выбраных каталогаў" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlistsource.caption msgid "Source" msgstr "Крыніца" #: tfrmoptionsdirectoryhotlistextra.ckbdirectoryhotlisttarget.caption msgid "Target" msgstr "Мэта" #: tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption msgctxt "tfrmoptionsdirectoryhotlistextra.gbdirectoryhotlistoptionsextra.caption" msgid "Paths" msgstr "Шляхі" #: tfrmoptionsdirectoryhotlistextra.lbdirectoryhotlistfilenamestyle.caption msgid "Way to set paths when adding them:" msgstr "Спосаб вызначэння шляху падчас дадання:" #: tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lblapplysettingsfor.caption" msgid "Do this for paths of:" msgstr "Ужыць да:" #: tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsdirectoryhotlistextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях да:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Прапаноўваць усе фарматы, якія падтрымліваюцца, пытацца штораз" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Падчас захавання тэксту ў Unicode захоўваць з кадаваннем UTF8 (інакш будзе UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Падчас перацягвання тэксту генераваць назвы файлаў аўтаматычна (інакш будзе пытацца)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Паказваць дыялог пацвярджэння пры перацягванні" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Пры пера&цягванні тэксту на панэль:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Размясціце фарматы па ўбыванні (выкарыстоўвайце перацягванне):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(калі найбольш адпаведнае адсутнічае, бярэцца наступнае і г.д.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(не будзе працаваць з некаторымі праграмамі, пры ўзікненні праблем выключыце)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Паказваць &файлавую сістэму" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Паказваць во&льнае месца" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Паказваць &адмеціну" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Спіс дыскаў" #: tfrmoptionseditor.chkautoindent.caption msgid "Auto Indent" msgstr "Аўтаматычны водступ" #: tfrmoptionseditor.chkautoindent.hint msgid "Allows to indent the caret, when new line is created with <Enter>, with the same amount of leading white space as the preceding line" msgstr "Калі націснуць на клавішу <Enter>, то новы радок будзе стварацца з такім самым водступам, што і ў папярэдняга" #: tfrmoptionseditor.chkgroupundo.caption msgid "Group Undo" msgstr "" #: tfrmoptionseditor.chkgroupundo.hint msgid "All continuous changes of the same type will be processed in one call instead of undoing/redoing each one" msgstr "" #: tfrmoptionseditor.chkrightedge.caption msgid "Right margin:" msgstr "Правая мяжа:" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Пракручваць канцом радка" #: tfrmoptionseditor.chkscrollpastendline.hint msgid "Allows caret to go into empty space beyond end-of-line position" msgstr "Дазваляе перамяшчаць курсор на пустую прастору па-за межамі радка" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Паказваць адмысловыя сімвалы" #: tfrmoptionseditor.chkshowspecialchars.hint msgid "Shows special characters for spaces and tabulations" msgstr "Паказваць адмысловыя сімвалы для прагалаў і табуляцый" #: tfrmoptionseditor.chksmarttabs.caption msgid "Smart Tabs" msgstr "Разумныя табуляцыі" #: tfrmoptionseditor.chksmarttabs.hint msgid "When using <Tab> key, caret will go to the next non-space character of the previous line" msgstr "Калі націснуць <Tab>, то курсор будзе перамяшчацца да наступнага непрагальнага сімвала папярэдняга радка" #: tfrmoptionseditor.chktabindent.caption msgid "Tab indents blocks" msgstr "Клавішай Tab змяняюцца водступы блокаў" #: tfrmoptionseditor.chktabindent.hint msgid "When active <Tab> and <Shift+Tab> act as block indent, unindent when text is selected" msgstr "Націскі на <Tab> і <Shift+Tab> павялічваюць і памяншаюць водступ вылучанага тэксту" #: tfrmoptionseditor.chktabstospaces.caption msgid "Use spaces instead tab characters" msgstr "Выкарыстоўваць прагалы замест сімвалаў табуляцыі" #: tfrmoptionseditor.chktabstospaces.hint msgid "Converts tab characters to a specified number of space characters (when entering)" msgstr "Пераўтвараць сімвалы табуляцыі ў вызначаную колькасць прагалаў (падчас уводу)" #: tfrmoptionseditor.chktrimtrailingspaces.caption msgid "Delete trailing spaces" msgstr "Выдаляць канцавыя прагалы" #: tfrmoptionseditor.chktrimtrailingspaces.hint msgid "Auto delete trailing spaces, this applies only to edited lines" msgstr "Аўтаматычнае выдаленне канцавых прагалаў (ужываецца толькі для радкоў, што рэдагуюцца)" #: tfrmoptionseditor.edtabwidth.hint msgctxt "tfrmoptionseditor.edtabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Майце на ўвазе, што параметр \"Разумныя табуляцыі\" мае перавагу перад вызначаным значэннем" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Параметры ўнутранага рэдактара" #: tfrmoptionseditor.lblblockindent.caption msgid "Block indent:" msgstr "" #: tfrmoptionseditor.lbltabwidth.caption msgid "Tab width:" msgstr "Шырыня табуляцыі:" #: tfrmoptionseditor.lbltabwidth.hint msgctxt "tfrmoptionseditor.lbltabwidth.hint" msgid "Please note that the \"Smart Tabs\" option takes precedence over the tabulation to be performed" msgstr "Майце на ўвазе, што параметр \"Разумныя табуляцыі\" мае перавагу перад вызначаным значэннем" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Скінуць" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Захаваць" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Атрыбуты элемента" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Пя&рэдні план" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Пя&рэдні план" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Пазначэнне тэксту" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Выкарыстоўваць (і змяняць) глабальную схему" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Выкарыстоўваць глабальную схему" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Тлусты" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Адвярнуць" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Вы&ключыць" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Укл&ючыць" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Курсіў" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Адвярнуць" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Вы&ключыць" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Укл&ючыць" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Закрэслены" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Адвярнуць" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Вы&ключыць" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Укл&ючыць" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Падкрэслены" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Адвярнуць" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Вы&ключыць" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Укл&ючыць" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Дадаць..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Выдаліць..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Імпарт/Экспарт" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Уставіць..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Змяніць назву" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Упарадкаваць..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Няма" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Заўсёды разгортваць дрэва" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Па леваму краю" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Па праваму краю" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Спіс выбраных укладак (парадкуйце &перацягваннем)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Іншыя параметры" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Каб аднавіць для абранага радка:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Захоўваць існыя ўкладкі:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Захоўваць гісторыю каталога:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Укладкі, захаваныя злева, адновяцца:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Укладкі, захаваныя справа, адновяцца:" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "падзяляльнік" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Дадаць падзяляльнік" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "падменю" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Дадаць падменю" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Згарнуць усё" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "...бягучы ўзровень абранага(ых) элемента(аў)" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Выразаць" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "выдаліць усё!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "падменю і ўсе яго элементы" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "толькі падменю, элементы пакінуць" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "абраны элемент" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Выдаліць абраны элемент" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Экспартаваць абранае ў файлы .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "FavoriteTabsTestMenu" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Імпартаваць файлы .tab з прадвызначанымі наладамі" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Імпартаваць файлы .tab на абраную пазіцыю" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Імпартаваць файлы .tab на абраную пазіцыю" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Імпартаваць файлы .tab у падменю на абранай пазіцыі" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Уставіць падзяляльнік" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Уставіць падменю" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Адкрыць усе галіны" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Уставіць" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Змяніць назву" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "...усе, ад а да я!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "...толькі асобныя групы элементаў" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Упарадкаваць толькі адну групу элементаў" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "...змесціва абранага падменю, без падузроўняў" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "...змесціва абранага падменю і ўсіх падузроўняў" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Праверыць выніковае меню" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Дадаць" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "Add" msgstr "&Дадаць" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Дадаць" #: tfrmoptionsfileassoc.btncloneact.caption msgid "C&lone" msgstr "Кланаваць" #: tfrmoptionsfileassoc.btncommands.hint msgctxt "tfrmoptionsfileassoc.btncommands.hint" msgid "Select your internal command" msgstr "Абраць унутраны загад" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "Do&wn" msgstr "&Уніз" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edi&t" msgstr "Рэдагаваць" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Уставіць" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "&Insert" msgstr "Уставіць" #: tfrmoptionsfileassoc.btnparametershelper.hint msgctxt "tfrmoptionsfileassoc.btnparametershelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsfileassoc.btnrelativecommand.hint msgctxt "tfrmoptionsfileassoc.btnrelativecommand.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsfileassoc.btnremoveact.caption msgid "Remo&ve" msgstr "Выда&ліць" #: tfrmoptionsfileassoc.btnremoveext.caption msgid "Re&move" msgstr "Вы&даліць" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Выдаліць" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Змяніць назву" #: tfrmoptionsfileassoc.btnstartpathpathhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathpathhelper.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsfileassoc.btnstartpathvarhelper.hint msgctxt "tfrmoptionsfileassoc.btnstartpathvarhelper.hint" msgid "Variable reminder helper" msgstr "Памагаты па зменных" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Уверх" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Шлях да запуску загаду. Не выкарыстоўваць двукоссі." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Назва дзеяння. Яна ніколі не перадаецца сістэме, гэта толькі мнеманічная назва" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted (manually entering)." msgstr "Параметры, што перадаюцца загаду. Назва файла з прагаламі мусіць быць у двукоссях." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Never quote this string." msgstr "Загад для выканання. Не выкарыстоўвайце двукоссі." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description" msgstr "Апісанне дзеяння" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Дзеянні" #: tfrmoptionsfileassoc.gbexts.caption msgid "Extensions" msgstr "Пашырэнні" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Можна ўпарадкаваць &перацягваннем" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Тыпы файлаў" #: tfrmoptionsfileassoc.gbicon.caption msgid "Icon" msgstr "Значок" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Дзеянні можна ўпарадкаваць пера&цягваннем" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Пашырэнні можна ўпарадкаваць перацяг&ваннем" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Тыпы файлаў можна ўпарадкаваць перацяг&ваннем" #: tfrmoptionsfileassoc.lblaction.caption msgid "Action &name:" msgstr "Назва дзеяння:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "Command:" msgstr "&Загад:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Парамет&ры:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ш&лях запуску:" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Адвольна ў..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Адвольна" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Рэдагаваць" #: tfrmoptionsfileassoc.mieditor.caption msgid "Open in Editor" msgstr "Адкрыць у рэдактары" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Рэдагаваць у..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgid "Get output from command" msgstr "Атрымаць вывад загаду" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Адкрыць ва ўнутраным рэдактары" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Адкрыць ва ўнутранай праграме прагляду" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Адкрыць" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Адкрыць у..." #: tfrmoptionsfileassoc.mishell.caption msgid "Run in terminal" msgstr "Запусціць у тэрмінале" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Праглядзець" #: tfrmoptionsfileassoc.miviewer.caption msgid "Open in Viewer" msgstr "Адкрыць у праграме прагляду" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Праглядзець у..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Націсніце тут, каб змяніць значок!" #: tfrmoptionsfileassocextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured filenames and paths" msgstr "Ужыць бягучыя налады да ўсіх назваў файлаў і шляхоў" #: tfrmoptionsfileassocextra.cbdefaultcontextactions.caption msgid "Default context actions (View/Edit)" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Выканаць у абалонцы" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Пашыранае кантэкстнае меню" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Канфігурацыя асацыяцый файлаў" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Прапаноўваць дадаць файл пад курсорам у асацыяцыі файлаў" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Калі даступна асацыяцыя файлаў, прапаноўваць дадаць бягучы абраны файл, калі яго тыпа яшчэ няма" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Выканаць у тэрмінале і закрыць" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Выканаць у тэрмінале і пакінуць адкрытым" #: tfrmoptionsfileassocextra.ckbfileassoccommand.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassoccommand.caption" msgid "Commands" msgstr "Загады" #: tfrmoptionsfileassocextra.ckbfileassocicons.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocicons.caption" msgid "Icons" msgstr "Значкі" #: tfrmoptionsfileassocextra.ckbfileassocstartpath.caption msgctxt "tfrmoptionsfileassocextra.ckbfileassocstartpath.caption" msgid "Starting paths" msgstr "Шляхі запуску" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Дадатковыя параметры элементаў:" #: tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionsfileassocextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Шляхі" #: tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption msgctxt "tfrmoptionsfileassocextra.lbfileassocfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Спосаб вызначэння шляхоў падчас дадання значкоў, загадаў і шляхоў запуску:" #: tfrmoptionsfileassocextra.lblapplysettingsfor.caption msgctxt "tfrmoptionsfileassocextra.lblapplysettingsfor.caption" msgid "Do this for files and path for:" msgstr "Ужыць для:" #: tfrmoptionsfileassocextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionsfileassocextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях да:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgid "Show confirmation window for:" msgstr "Паказваць акно пацвярджэння для:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Аперацыя капі&явання" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Аперацыя вы&далення" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Выда&ленне ў сметніцу (з Shift - поўнае)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Аперацыя вы&далення ў сметніцу" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "Скінуць пазнаку \"Толькі для чытання\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Аперацыя перамяшчэння" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Апрацоўваць каментары з файламі/каталогамі" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Падчас змены назвы &файла абіраць яе без пашырэння" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Паказ&ваць панэль выбару ў дыялогу капіявання/перамяшчэння" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Мі&наць памылкі падчас аперацый з файламі і выводзіць іх у акно журнала" #: tfrmoptionsfileoperations.cbtestarchiveconfirmation.caption msgid "Test archive operation" msgstr "Тэставая аперацыя з архівам" #: tfrmoptionsfileoperations.cbverifychecksumconfirmation.caption msgid "Verify checksum operation" msgstr "Праверка кантрольных сум" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Выкананне аперацый" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Інтэрфейс карыстальніка" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Памер буфера абмену для файлавых аперацый (КБ):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Памер буферу для падліку &хэшу (Кб):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Паказваць прагрэс апе&рацый у" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgid "Duplicated name auto-rename style:" msgstr "Стыль аўтаматычнай змены супадаючых назваў:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Колькасць перазапісаў пры сціранні:" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Скінуць да прадвызначанага DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Дазволіць накладанне колеру" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Выкарыстоўваць &рамку курсора" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Выкарыстоўваць курсор у неактыўнай панэлі" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Вы&карыстоўваць адваротнае вылучэнне" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Мяжа курсора" #: tfrmoptionsfilepanelscolors.dbcurrentpath.caption msgid "Current Path" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Фо&н:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "Ф&он 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "Колер кур&сора:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "Т&экст курсора:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Колер неактыўнага курсора:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Колер неактыўнага вылучэння:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "&Brightness level of inactive panel" msgid "&Brightness level of inactive panel:" msgstr "&Узровень яркасці неактыўнай панэлі" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "&Колер вылучэння:" #: tfrmoptionsfilepanelscolors.lblpathactiveback.caption msgctxt "tfrmoptionsfilepanelscolors.lblpathactiveback.caption" msgid "Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathactivetext.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption" msgid "Text Color:" msgstr "Колер тэксту:" #: tfrmoptionsfilepanelscolors.lblpathinactiveback.caption msgid "Inactive Background:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpathinactivetext.caption msgid "Inactive Text Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Ніжэй знаходзіцца вобласць папярэдняга прагляду. Вы можаце перамяшчаць курсор і вылучаць файлы, каб паспрабаваць абраныя налады." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "&Колер тэксту:" #: tfrmoptionsfilesearch.cbinitiallyclearfilemask.caption msgid "When launching file search, clear file mask filter" msgstr "Падчас запуску пошуку ачышчаць фільтр маскі файла" #: tfrmoptionsfilesearch.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Пошук па частцы назвы файла" #: tfrmoptionsfilesearch.cbshowmenubarinfindfiles.caption msgid "Show menu bar in \"Find files\"" msgstr "Паказваць меню акна ў \"Пошуку файлаў\"" #: tfrmoptionsfilesearch.dbtextsearch.caption msgid "Text search in files" msgstr "Пошук тэксту ў файлах" #: tfrmoptionsfilesearch.gbfilesearch.caption msgctxt "TFRMOPTIONSFILESEARCH.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Пошук файлаў" #: tfrmoptionsfilesearch.lblnewsearchfilters.caption msgid "Current filters with \"New search\" button:" msgstr "Бягучыя фільтры пасля націскання \"Новы пошук\":" #: tfrmoptionsfilesearch.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Прадвызначаны шаблон пошуку:" #: tfrmoptionsfilesearch.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Выкарыстоўваць адлюстраванне ў па&мяць" #: tfrmoptionsfilesearch.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Выкарыстоўваць струмень" #: tfrmoptionsfilesviews.btndefault.caption msgctxt "tfrmoptionsfilesviews.btndefault.caption" msgid "De&fault" msgstr "&Прадвызначана" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Фарматаванне" #: tfrmoptionsfilesviews.gbpersonalizedabbreviationtouse.caption msgid "Personalized abbreviations to use:" msgstr "Асабістыя скароты:" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Упарадкаванне" #: tfrmoptionsfilesviews.lblbyte.caption msgid "&Byte:" msgstr "&Байтаў:" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Адчувальны да &рэгістра:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Хібны фармат" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Фармат даты і часу:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Фармат па&меру файла:" #: tfrmoptionsfilesviews.lblfootersizeformat.caption msgid "&Footer format:" msgstr "&Фармат ніжняга калантытула:" #: tfrmoptionsfilesviews.lblgigabyte.caption msgid "&Gigabyte:" msgstr "&Гігабайтаў:" #: tfrmoptionsfilesviews.lblheadersizeformat.caption msgid "&Header format:" msgstr "&Фармат загалоўка:" #: tfrmoptionsfilesviews.lblkilobyte.caption msgid "&Kilobyte:" msgstr "&Кілабайтаў:" #: tfrmoptionsfilesviews.lblmegabyte.caption msgid "Megab&yte:" msgstr "&Мегабайтаў:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files:" msgstr "&Уставіць новыя файлы:" #: tfrmoptionsfilesviews.lbloperationsizeformat.caption msgid "O&peration size format:" msgstr "&Файлавыя аперацыі:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Упарад&каванне каталогаў:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Метад &упарадкавання:" #: tfrmoptionsfilesviews.lblterabyte.caption msgid "&Terabyte:" msgstr "&Тэрабайтаў:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files:" msgstr "&Перамяшчаць абноўлёныя файлы:" #: tfrmoptionsfilesviewscomplement.btnaddattribute.caption msgctxt "tfrmoptionsfilesviewscomplement.btnaddattribute.caption" msgid "&Add" msgstr "&Дадаць" #: tfrmoptionsfilesviewscomplement.btnattrshelp.caption msgctxt "tfrmoptionsfilesviewscomplement.btnattrshelp.caption" msgid "&Help" msgstr "&Даведка" #: tfrmoptionsfilesviewscomplement.cbdblclicktoparent.caption msgid "Enable changing to &parent folder when double-clicking on empty part of file view" msgstr "Уключыць пераход у &бацькоўскі каталог па пстрычцы на пустой частцы файла падчас прагляду" #: tfrmoptionsfilesviewscomplement.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Не загружаць спіс файлаў, пакуль укладка не стане актыўнай" #: tfrmoptionsfilesviewscomplement.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "&Паказваць квадратныя дужкі ў назвах каталогаў" #: tfrmoptionsfilesviewscomplement.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Пад&святляць новыя і абноўленыя файлы" #: tfrmoptionsfilesviewscomplement.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Уключыць &змену назвы падвойнай пстрычкай па назве" #: tfrmoptionsfilesviewscomplement.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "Загружаць &спіс файлаў асобна" #: tfrmoptionsfilesviewscomplement.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "Загружаць значкі &пасля спіса файлаў" #: tfrmoptionsfilesviewscomplement.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Паказваць &сістэмныя і схаваныя файлы" #: tfrmoptionsfilesviewscomplement.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Пры выбары файлаў пры дапамозе <SPACEBAR> перамяшчацца ўніз да наступнага файла (як <INSERT>)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskfilterwindows.caption msgid "Windows style filter when marking files (\"*.*\" also select files without extension, etc.)" msgstr "Стыль фільтрацыі Windows пры пазначэнні файлаў (пры \"*.*\" абіраюцца таксама файлы без пашырэння)" #: tfrmoptionsfilesviewscomplement.chkmarkmaskshowattribute.caption msgid "Use an independent attribute filter in mask input dialog each time" msgstr "Кожны раз выкарыстоўваць незалежны фільтр атрыбутаў у масцы ўводу" #: tfrmoptionsfilesviewscomplement.gbmarking.caption msgid "Marking/Unmarking entries" msgstr "Адзначыць/Прыбраць адзнаку" #: tfrmoptionsfilesviewscomplement.lbattributemask.caption msgid "Default attribute mask value to use:" msgstr "Прадвызначанае значэнне маскі атрыбутаў:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Дадаць" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "У&жыць" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Вы&даліць" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Колеры тыпаў файлаў (упарадкаванне пера&цягваннем)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Атры&буты катэгорыі:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Колер кат&эгорыі:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Ма&ска катэгорыі:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "&Назва катэгорыі:" #: tfrmoptionsfonts.hint msgctxt "tfrmoptionsfonts.hint" msgid "Fonts" msgstr "Шрыфты" #: tfrmoptionshotkeys.actaddhotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTADDHOTKEY.CAPTION" msgid "Add &hotkey" msgstr "Дадаць &гарачую клавішу" #: tfrmoptionshotkeys.actcopy.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTCOPY.CAPTION" msgid "Copy" msgstr "Капіяваць" #: tfrmoptionshotkeys.actdelete.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETE.CAPTION" msgid "Delete" msgstr "Выдаліць" #: tfrmoptionshotkeys.actdeletehotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTDELETEHOTKEY.CAPTION" msgid "&Delete hotkey" msgstr "&Выдаліць гарачую клавішу" #: tfrmoptionshotkeys.actedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Рэдагаваць гарачую клавішу" #: tfrmoptionshotkeys.actnextcategory.caption msgid "Next category" msgstr "Наступная катэгорыя" #: tfrmoptionshotkeys.actpopupfilerelatedmenu.caption msgid "Make popup the file related menu" msgstr "Выплыўное меню дзеянняў" #: tfrmoptionshotkeys.actpreviouscategory.caption msgid "Previous category" msgstr "Папярэдняя катэгорыя" #: tfrmoptionshotkeys.actrename.caption msgctxt "TFRMOPTIONSHOTKEYS.ACTRENAME.CAPTION" msgid "Rename" msgstr "Змяніць назву" #: tfrmoptionshotkeys.actrestoredefault.caption msgid "Restore DC default" msgstr "Аднавіць прадвызначаныя налады DC" #: tfrmoptionshotkeys.actsavenow.caption msgid "Save now" msgstr "Захаваць неадкладна" #: tfrmoptionshotkeys.actsortbycommand.caption msgid "Sort by command name" msgstr "Упарадкаваць па назве загаду" #: tfrmoptionshotkeys.actsortbyhotkeysgrouped.caption msgid "Sort by hotkeys (grouped)" msgstr "Упарадкаваць па гарачых клавішах (групаваць)" #: tfrmoptionshotkeys.actsortbyhotkeysoneperline.caption msgid "Sort by hotkeys (one per row)" msgstr "Упарадкаваць па гарачых клавішах (адна на радок)" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "&Фільтр" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "Ка&тэгорыі:" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "За&гады:" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "Файлы &спалучэнняў клавішаў:" #: tfrmoptionshotkeys.lblsortorder.caption msgid "So&rt order:" msgstr "Па&радк сартавання:" #: tfrmoptionshotkeys.micategories.caption msgid "Categories" msgstr "Катэгорыі" #: tfrmoptionshotkeys.micommands.caption msgctxt "TFRMOPTIONSHOTKEYS.MICOMMANDS.CAPTION" msgid "Command" msgstr "Загад" #: tfrmoptionshotkeys.misortorder.caption msgid "Sort order" msgstr "Парадак сартавання" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Загад" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Гарачыя клавішы" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Апісанне" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Гарачыя клавішы" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Параметры" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Элементы інтэрфейсу" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для &шляхоў, якія выкарыстоўваюцца, і падкаталогаў па іх:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Паказваць значкі дзеянняў у &меню" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsonbuttons.caption msgid "Show icons on buttons" msgstr "Паказваць значкі на кнопках" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "Паказваць &накладныя значкі (напрыклад, па спасылках)" #: tfrmoptionsicons.chkshowhiddendimmed.caption msgid "&Dimmed hidden files (slower)" msgstr "&Зацяняць значкі схаваных файлаў (павольней)" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Выключыць адмысловыя значкі" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr " Памер значкоў " #: tfrmoptionsicons.gbicontheme.caption msgid "Icon theme" msgstr "Тэма значкоў" #: tfrmoptionsicons.gbshowicons.caption msgid "Show icons" msgstr "Паказваць значкі" #: tfrmoptionsicons.gbshowiconsmode.caption msgid " Show icons to the left of the filename " msgstr " Паказваць значкі злева ад назвы " #: tfrmoptionsicons.lbldiskpanel.caption msgid "Disk panel:" msgstr "Панэль дыскаў:" #: tfrmoptionsicons.lblfilepanel.caption msgid "File panel:" msgstr "Панэль файлаў:" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Усе" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgid "All associated + &EXE/LNK (slow)" msgstr "Усе асацыяцыі + &EXE/LINK (slow)" #: tfrmoptionsicons.rbiconsshownone.caption msgid "&No icons" msgstr "&Без значкоў" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "Толькі &стандартныя значкі" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "Да&даць абраныя назвы" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgid "Add selected names with &full path" msgstr "Дадаць абраныя назвы разам са шляхам" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsignorelist.chkignoreenable.caption msgid "&Ignore (don't show) the following files and folders:" msgstr "&Не зважаць на наступныя файлы і каталогі:" #: tfrmoptionsignorelist.lblsavein.caption msgid "&Save in:" msgstr "&Захаваць у:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Лев&ая і правая стрэлкі змяняюць каталогі (паводзіны Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Увод" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters:" msgstr "Alt+бук&вы:" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters:" msgstr "Ctrl+Alt+бук&вы:" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters:" msgstr "&Буквы:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "&Плоскія кнопкі" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "Плоскі ін&тэрфейс" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "Паказваць індыкатар воль&нага месца на адмецінах дыскаў" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "Паказваць акно &журнала" #: tfrmoptionslayout.cbpanelofoperations.caption msgid "Show panel of operation in background" msgstr "Паказваць панэль аперацыі ў фоне" #: tfrmoptionslayout.cbproginmenubar.caption msgid "Show common progress in menu bar" msgstr "Паказваць бягучы прагрэс на панэлі меню" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "Паказваць загадны ра&док" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "Паказваць бягучы катал&ог" #: tfrmoptionslayout.cbshowdiskpanel.caption msgid "Show &drive buttons" msgstr "Паказваць копкі &дыскаў" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "Паказваць адмеціну вольнага &месца" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Паказваць кн&опку спіса дыскаў" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "Паказваць кнопкі функцыянальных клавішаў" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "Паказваць &галоўнае меню" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgid "Show tool&bar" msgstr "Паказваць &панэль прылад" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Паказваць кароткую &адмеціну наяўнасці вольнага месца" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "Паказваць панэль &стану" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "&Загалоўкі табуляцый" #: tfrmoptionslayout.cbshowtabs.caption msgid "Sho&w folder tabs" msgstr "Паказ&ваць укладкі каталогаў" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "Паказваць акно тэр&мінала" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Дзве панэлі кнопак дыскаў (па-над файлавымі панэлямі)" #: tfrmoptionslayout.chkshowmiddletoolbar.caption msgid "Show middle toolbar" msgstr "Паказаць цэнтральную панэль" #: tfrmoptionslayout.gbscreenlayout.caption msgid " Screen layout " msgstr " Элементы асноўнага акна " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Праглядзець змесціва журнала" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Уключаць дату ў назву журнала" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "&Запакаваць/распакаваць" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Выкананне вонкавага загаднага радка" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "Ска&піяваць/перамясціць/стварыць спасылку/сімвалічную спасылку" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "Ства&рыць/Выдаліць каталогі" #: tfrmoptionslog.cblogerrors.caption msgid "Log &errors" msgstr "Журнал &памылак" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "Ст&варыць файл журнала:" #: tfrmoptionslog.cblogfilecount.caption msgid "Maximum log file count" msgstr "Максімальная колькасць файлаў журнала" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "&Інфармацыйныя паведамленні журнала" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Уключэнне/выключэнне" #: tfrmoptionslog.cblogsuccess.caption msgid "Log &successful operations" msgstr "&Паспяховыя аперацыі" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "Убудовы &файлавай сістэмы" #: tfrmoptionslog.gblogfile.caption msgid "File operation log file" msgstr "Журнал аперацый з файламі" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Журнал аперацый" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Стан аперацыі" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Выдаляць мініяцюры даўно выдаленых файлаў" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View configuration file content" msgstr "Праглядзець файл канфігурацыі" #: tfrmoptionsmisc.chkdesccreateunicode.caption msgctxt "TFRMOPTIONSMISC.CHKDESCCREATEUNICODE.CAPTION" msgid "Create new with the encoding:" msgstr "Стварыць новыя з кадаваннем:" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Пры &змене дыска заўсёды вяртацца ў каранёвы каталог" #: tfrmoptionsmisc.chkshowcurdirtitlebar.caption msgid "Show ¤t directory in the main window title bar" msgstr "Паказваць &бягучы каталог на панэлі загалоўкаў" #: tfrmoptionsmisc.chkshowsplashform.caption msgid "Show &splash screen" msgstr "Паказваць &застаўку" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "Паказваць паведамленне &папярэджання (толькі кнопка\"Добра\")" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "&Захоўваць мініяцюры ў кэшы" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Мініяцюры" #: tfrmoptionsmisc.gbfilecomments.caption msgid "File comments (descript.ion)" msgstr "Каментары да файлаў (descript.ion)" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Да экспарту/імпарту TC:" #: tfrmoptionsmisc.lbldefaultencoding.caption msgid "&Default single-byte text encoding:" msgstr "&Прадвызначанае аднабайтавае кадаванне тэксту:" #: tfrmoptionsmisc.lbldescrdefaultencoding.caption msgctxt "TFRMOPTIONSMISC.LBLDESCRDEFAULTENCODING.CAPTION" msgid "Default encoding:" msgstr "Прадвызначанае кадаванне:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Файл канфігурацыі:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Выканальны файл TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Каталог з панэлямі інструментаў:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "пікселяў" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Памер &мініяцюр:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Вылучэнне мышшу" #: tfrmoptionsmouse.chkcursornofollow.caption msgid "The text cursor no longer follows the mouse cursor" msgstr "Тэкставы курсор не перамяшчаецца за курсорам мышы" #: tfrmoptionsmouse.chkmouseselectioniconclick.caption msgid "By clic&king on icon" msgstr "&Пстрычкай па значку" #: tfrmoptionsmouse.gbopenwith.caption msgctxt "tfrmoptionsmouse.gbopenwith.caption" msgid "Open with" msgstr "Адкрыць у" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Пракрутка" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Вылучэнне" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Рэжым:" #: tfrmoptionsmouse.rbdoubleclick.caption msgid "Double click" msgstr "Падвойнай пстрычкай" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Па радках" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Па радках &за перамяшчэннем курсора" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "П&а старонках" #: tfrmoptionsmouse.rbsingleclickboth.caption msgid "Single click (opens files and folders)" msgstr "Адной пстрычкай (адкрываць файлы і каталогі)" #: tfrmoptionsmouse.rbsingleclickfolders.caption msgid "Single click (opens folders, double click for files)" msgstr "Адной пстрычкай адкрываць каталогі, падвойнай - файлы" #: tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenamerelative.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionsmultirename.btnmulrenlogfilenameview.hint msgctxt "tfrmoptionsmultirename.btnmulrenlogfilenameview.hint" msgid "View log file content" msgstr "Праглядзець змесціва журнала" #: tfrmoptionsmultirename.ckbdailyindividualdirmultrenlog.caption msgid "Individual directories per day" msgstr "Асобныя каталогі на кожны дзень" #: tfrmoptionsmultirename.ckbfilenamewithfullpathinlog.caption msgid "Log filenames with full path" msgstr "Запісваць назвы файлаў з поўным шляхам" #: tfrmoptionsmultirename.ckbshowmenubarontop.caption msgid "Show menu bar on top " msgstr "Паказаць меню акна " #: tfrmoptionsmultirename.gbsaverenaminglog.caption msgid "Rename log" msgstr "Журнал змены назваў" #: tfrmoptionsmultirename.lbinvalidcharreplacement.caption msgid "Replace invalid filename character b&y" msgstr "Замяняць хібныя сімвалы ў назвах на" #: tfrmoptionsmultirename.rbrenaminglogappendsamefile.caption msgid "Append in the same rename log file" msgstr "Дадаць у той самы журнал" #: tfrmoptionsmultirename.rbrenaminglogperpreset.caption msgid "Per preset" msgstr "На кожныя перадналады" #: tfrmoptionsmultirename.rgexitmodifiedpreset.caption msgid "Exit with modified preset" msgstr "Выйсці са змененымі перадналадамі" #: tfrmoptionsmultirename.rglaunchbehavior.caption msgid "Preset at launch" msgstr "Перадналады пры запуску" #: tfrmoptionspluginsbase.btnaddplugin.caption msgctxt "tfrmoptionspluginsbase.btnaddplugin.caption" msgid "A&dd" msgstr "&Дадаць" #: tfrmoptionspluginsbase.btnconfigplugin.caption msgctxt "tfrmoptionspluginsbase.btnconfigplugin.caption" msgid "Con&figure" msgstr "Нал&адзіць" #: tfrmoptionspluginsbase.btnenableplugin.caption msgctxt "tfrmoptionspluginsbase.btnenableplugin.caption" msgid "E&nable" msgstr "Ук&лючыць" #: tfrmoptionspluginsbase.btnremoveplugin.caption msgctxt "tfrmoptionspluginsbase.btnremoveplugin.caption" msgid "&Remove" msgstr "&Выдаліць" #: tfrmoptionspluginsbase.btntweakplugin.caption msgctxt "tfrmoptionspluginsbase.btntweakplugin.caption" msgid "&Tweak" msgstr "&Твікі" #: tfrmoptionspluginsbase.lblplugindescription.caption msgctxt "tfrmoptionspluginsbase.lblplugindescription.caption" msgid "Description" msgstr "Апісанне" #: tfrmoptionspluginsbase.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginsbase.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginsbase.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginsbase.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsbase.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionspluginsdsx.lblplugindescription.caption msgctxt "tfrmoptionspluginsdsx.lblplugindescription.caption" msgid "Searc&h plugins allow one to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Убу&довы пошуку дазваляюць выкарыстоўваць дадатковыя алгарытмы пошуку альбо вонкавыя інструменты (напрыклад, \"locate\" і т. п.)" #: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionspluginsgroup.btnpathtoberelativetoall.caption msgid "Apply current settings to all current configured plugins" msgstr "Ужыць бягучыя налады да ўсіх дададзеных убудоў" #: tfrmoptionspluginsgroup.ckbautotweak.caption msgid "When adding a new plugin, automatically go in tweak window" msgstr "Падчас дадання новай убудовы аўтаматычна адкрываць акно наладаў" #: tfrmoptionspluginsgroup.gbconfiguration.caption msgid "Configuration:" msgstr "Канфігурацыя:" #: tfrmoptionspluginsgroup.lbllualibraryfilename.caption msgid "Lua library file to use:" msgstr "Бібліятэка Lua:" #: tfrmoptionspluginsgroup.lbpathtoberelativeto.caption msgctxt "tfrmoptionspluginsgroup.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях да:" #: tfrmoptionspluginsgroup.lbpluginfilenamestyle.caption msgid "Plugin filename style when adding a new plugin:" msgstr "Назва файла ўбудовы пры даданні:" #: tfrmoptionspluginswcx.lblplugindescription.caption msgctxt "tfrmoptionspluginswcx.lblplugindescription.caption" msgid "Pack&er plugins are used to work with archives" msgstr "Убудовы &архіватараў дазваляюць працаваць з архівамі" #: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionspluginswdx.lblplugindescription.caption msgctxt "tfrmoptionspluginswdx.lblplugindescription.caption" msgid "Content plu&gins allow one to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Убудо&вы змесціва дазваляюць выводзіць дадатковыя звесткі аб файлах на панэлях пры пошуку альбо змене назваў файлаў" #: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionspluginswfx.lblplugindescription.caption msgctxt "tfrmoptionspluginswfx.lblplugindescription.caption" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "У&будовы файлавых сістэм дазваляюць злучацца з дыскамі, недаступнымі з аперацыйнай сістэмы альбо вонкавымі прыладамі кшталту Palm/PocketPC." #: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionspluginswlx.lblplugindescription.caption msgctxt "tfrmoptionspluginswlx.lblplugindescription.caption" msgid "Vie&wer plugins allow one to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Уб&удовы прагляду дазваляюць праглядаць ва ўнутранай праграме прагляду файлы розных фарматаў (выявы, табліцы, базы даных і т.п.)" #: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Актыўна" #: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Убудова" #: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Зарэгістравана на" #: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Назва файла" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgid "&Beginning (name must start with first typed character)" msgstr "&Пачатак (назва мусіць пачынацца з уведзеных сімвалаў)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgid "En&ding (last character before a typed dot . must match)" msgstr "&Канец (апошнія сімвалы да ўведзенай кропкі мусяць супадаць)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Параметры" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Дакладнае супадзенне назвы" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Рэгістр пошуку" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Шукаць дадзеныя элементы" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Пакідаць змененую назву падчас разблакавання ўкладкі" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Актываваць па&нэль націскам на адну з яе ўкладак" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgid "&Show tab header also when there is only one tab" msgstr "&Паказваць загаловак укладкі нават калі яна адна" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Закрываць дублікаты ўкладак падчас закрыцця праграмы" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "Патрабаваць пацвярдж&эння падчас закрыцця ўсіх укладак" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Патрабаваць пацвярджэння падчас закрыцця ўсіх укладак" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Найбольшая працягласць загалоўка ўкладкі" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgid "Show locked tabs &with an asterisk *" msgstr "Пазначаць заблакаваныя ўкладкі \"*\"" #: tfrmoptionstabs.cbtabsmultilines.caption msgid "&Tabs on multiple lines" msgstr "&Размяшчаць укладкі ў некалькі радкоў" #: tfrmoptionstabs.cbtabsopenforeground.caption msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&уверх адкрывае новую ўкладку" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgid "Open &new tabs near current tab" msgstr "Адкрывае &новую ўкладку побач з бягучай" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Выкарыстоўваць бягучыя ўкладкі па магчымасці" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "Паказваць кнопку закрыцця ўк&ладкі" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Заўсёды паказваць літару дыска ў загалоўку ўкладкі" #: tfrmoptionstabs.gbtabs.caption msgid "Folder tabs headers" msgstr "Загалоўкі ўкладак каталогаў" #: tfrmoptionstabs.lblchar.caption msgid "characters" msgstr "сімвалаў" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Дзеянне па падвойнай пстрычцы па ўкладцы:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Пазіцыі ўк&ладак" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "Няма" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Не" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Па леваму краю" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Па праваму краю" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Пераходзіць да наладаў улюбёных укладак пасля перазахавання" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Пераходзіць да наладаў улюбёных укладак пасля стварэння новых" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Уключыць дадатковыя параметры ўлюбёных укладак" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Прадвызначаныя дадатковыя налады для новых улюбёных укладак:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Дадатковыя параметры выбраных каталогаў" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Захоўваць існыя ўкладкі пасля аднаўлення:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Укладкі, захаваныя злева, адновяцца:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Укладкі, захаваныя справа, адновяцца:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Захоўваць гісторыю каталогаў для ўлюбёных укладак:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Прадвызначаная пазіцыя ў меню падчас захавання новай улюбёнай укладкі:" #: tfrmoptionsterminal.edrunintermcloseparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMCLOSEPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} мусіць быць тут, каб вызначыць загад, што будзе запушчаны ў тэрмінале" #: tfrmoptionsterminal.edrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.EDRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} мусіць быць тут, каб вызначыць загад, што будзе запушчаны ў тэрмінале" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Загад на запуск тэрмінала:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Загад на запуск загаду ў тэрмінале з закрыццём акна:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Загад на запуск загаду ў тэрмінале з адкрытым акном:" #: tfrmoptionsterminal.lbrunintermclosecmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSECMD.CAPTION" msgid "Command:" msgstr "Загад:" #: tfrmoptionsterminal.lbrunintermcloseparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMCLOSEPARAMS.CAPTION" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.lbrunintermstayopencmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENCMD.CAPTION" msgid "Command:" msgstr "Загад:" #: tfrmoptionsterminal.lbrunintermstayopenparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNINTERMSTAYOPENPARAMS.CAPTION" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.lbruntermcmd.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMCMD.CAPTION" msgid "Command:" msgstr "Загад:" #: tfrmoptionsterminal.lbruntermparams.caption msgctxt "TFRMOPTIONSTERMINAL.LBRUNTERMPARAMS.CAPTION" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionstoolbarbase.btnclonebutton.caption msgid "C&lone button" msgstr "Кл&анаваць кнопку" #: tfrmoptionstoolbarbase.btndeletebutton.caption msgctxt "tfrmoptionstoolbarbase.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Выдаліць" #: tfrmoptionstoolbarbase.btnedithotkey.caption msgid "Edit hot&key" msgstr "Рэдагаваць гарачую& клавішу" #: tfrmoptionstoolbarbase.btninsertbutton.caption msgid "&Insert new button" msgstr "&Уставіць новую клавішу" #: tfrmoptionstoolbarbase.btnopencmddlg.caption msgid "Select" msgstr "Абраць" #: tfrmoptionstoolbarbase.btnopenfile.caption msgctxt "tfrmoptionstoolbarbase.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnother.caption msgctxt "tfrmoptionstoolbarbase.btnother.caption" msgid "Other..." msgstr "Іншае..." #: tfrmoptionstoolbarbase.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Выдаліць гарачую& клавішу" #: tfrmoptionstoolbarbase.btnstartpath.caption msgctxt "tfrmoptionstoolbarbase.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Прапановы" #: tfrmoptionstoolbarbase.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Выплыўныя прапановы на падставе тыпу кнопкі, загаду і параметраў" #: tfrmoptionstoolbarbase.cbflatbuttons.caption msgctxt "tfrmoptionstoolbarbase.CBFLATBUTTONS.CAPTION" msgid "&Flat buttons" msgstr "&Плоскія кнопкі" #: tfrmoptionstoolbarbase.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Паведаміць пра памылкі з загадамі" #: tfrmoptionstoolbarbase.cbshowcaptions.caption msgid "Sho&w captions" msgstr "&Паказваць надпісы" #: tfrmoptionstoolbarbase.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Увядзіце параметры загаду, кожны ў асобным радку. F1- дапамога." #: tfrmoptionstoolbarbase.gbgroupbox.caption msgid "Appearance" msgstr "Выгляд" #: tfrmoptionstoolbarbase.lblbarsize.caption msgid "&Bar size:" msgstr "Памер &панэлі:" #: tfrmoptionstoolbarbase.lblexternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblexternalcommand.caption" msgid "Co&mmand:" msgstr "Зага&д:" #: tfrmoptionstoolbarbase.lblexternalparameters.caption msgctxt "tfrmoptionstoolbarbase.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Парамет&ры:" #: tfrmoptionstoolbarbase.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Даведка" #: tfrmoptionstoolbarbase.lblhotkey.caption msgid "Hot key:" msgstr "Гарачая клавіша:" #: tfrmoptionstoolbarbase.lbliconfile.caption msgid "Ico&n:" msgstr "Зна&чок:" #: tfrmoptionstoolbarbase.lbliconsize.caption msgid "Icon si&ze:" msgstr "&Памер значка:" #: tfrmoptionstoolbarbase.lblinternalcommand.caption msgctxt "tfrmoptionstoolbarbase.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "За&гад:" #: tfrmoptionstoolbarbase.lblinternalparameters.caption msgid "&Parameters:" msgstr "&Параметры:" #: tfrmoptionstoolbarbase.lblstartpath.caption msgctxt "tfrmoptionstoolbarbase.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Ш&лях запуску:" #: tfrmoptionstoolbarbase.lblstyle.caption msgid "Style:" msgstr "Стыль:" #: tfrmoptionstoolbarbase.lbltooltip.caption msgid "&Tooltip:" msgstr "&Падказка:" #: tfrmoptionstoolbarbase.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Дадаць панэль інструментаў з усімі загадамі DC" #: tfrmoptionstoolbarbase.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для вонкавага загаду" #: tfrmoptionstoolbarbase.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для ўнутранага загаду" #: tfrmoptionstoolbarbase.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для падзяляльніка" #: tfrmoptionstoolbarbase.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для дадатковай панэлі інструментаў" #: tfrmoptionstoolbarbase.mibackup.caption msgctxt "tfrmoptionstoolbarbase.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Стварэнне рэзервовай копіі..." #: tfrmoptionstoolbarbase.miexport.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORT.CAPTION" msgid "Export..." msgstr "Экспарт..." #: tfrmoptionstoolbarbase.miexportcurrent.caption msgid "Current toolbar..." msgstr "Бягучая панэль інструментаў..." #: tfrmoptionstoolbarbase.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "у файл панэлі інструментаў (.toolbar)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (пакінуць існы)" #: tfrmoptionstoolbarbase.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (выдаліць існы)" #: tfrmoptionstoolbarbase.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" TC (пакінуць існы)" #: tfrmoptionstoolbarbase.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" TC (&ыдаліць існы)" #: tfrmoptionstoolbarbase.miexporttop.caption msgid "Top toolbar..." msgstr "Верхняя панэль інструментаў..." #: tfrmoptionstoolbarbase.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Захаваць файл рэзервовай копіі панэлі інструментаў" #: tfrmoptionstoolbarbase.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл панэлі інструментаў (.toolbar)" #: tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (пакінуць існы)" #: tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbarbase.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (выдаліць існы)" #: tfrmoptionstoolbarbase.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" TC (пакінуць існы)" #: tfrmoptionstoolbarbase.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbarbase.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" TC (&ыдаліць існы)" #: tfrmoptionstoolbarbase.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbarbase.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbarbase.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbarbase.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbarbase.miimport.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORT.CAPTION" msgid "Import..." msgstr "Імпарт..." #: tfrmoptionstoolbarbase.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Аднавіць панэль інструментаў з рэзервовай копіі" #: tfrmoptionstoolbarbase.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль інструментаў" #: tfrmoptionstoolbarbase.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль інструментаў у бягучай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль інструментаў найвышэйшай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "з файла панэлі інструментаў (.toolbar)" #: tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль інструментаў" #: tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль інструментаў у бягучай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль інструментаў найвышэйшай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "з адзіночнага файла TC .BAR" #: tfrmoptionstoolbarbase.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль інструментаў у бягучай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль інструментаў найвышэйшай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "з файла ТС \"&wincmd.ini\"..." #: tfrmoptionstoolbarbase.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "дадаць на бягучую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "дадаць на новую панэль інструментаў у бягучай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "дадаць на новую панэль інструментаў найвышэйшай панэлі інструментаў" #: tfrmoptionstoolbarbase.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "дадаць на найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbarbase.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "замяніць найвышэйшую панэль інструментаў" #: tfrmoptionstoolbarbase.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbarbase.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbarbase.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbarbase.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbarbase.misearchandreplace.caption msgctxt "tfrmoptionstoolbarbase.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Знайсці і замяніць..." #: tfrmoptionstoolbarbase.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbarbase.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbarbase.miseparatorfirstitem.caption" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbarbase.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbarbase.miseparatorlastelement.caption" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbarbase.misrcrplallofall.caption msgid "in all of all the above..." msgstr "ва ўсім вышэй згаданым..." #: tfrmoptionstoolbarbase.misrcrplcommands.caption msgid "in all commands..." msgstr "ва ўсіх загадах..." #: tfrmoptionstoolbarbase.misrcrpliconnames.caption msgid "in all icon names..." msgstr "ва ўсіх назвах значкоў..." #: tfrmoptionstoolbarbase.misrcrplparameters.caption msgid "in all parameters..." msgstr "ва ўсіх параметрах..." #: tfrmoptionstoolbarbase.misrcrplstartpath.caption msgid "in all start path..." msgstr "ва ўсіх пачатковых шляхах..." #: tfrmoptionstoolbarbase.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "адразу пасля абранага" #: tfrmoptionstoolbarbase.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "як першы элемент" #: tfrmoptionstoolbarbase.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "як апошні элемент" #: tfrmoptionstoolbarbase.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbarbase.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "адразу перад абраным" #: tfrmoptionstoolbarbase.rbseparator.caption msgid "Separator" msgstr "Падзяляльнік" #: tfrmoptionstoolbarbase.rbspace.caption msgid "Space" msgstr "Прагал" #: tfrmoptionstoolbarbase.rgtoolitemtype.caption msgid "Button type" msgstr "Тып кнопкі" #: tfrmoptionstoolbarextra.btnpathtoberelativetoall.caption msgid "Apply current settings to all configured filenames and paths" msgstr "Ужыць бягучыя налады да ўсіх назваў файлаў і шляхоў" #: tfrmoptionstoolbarextra.ckbtoolbarcommand.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarcommand.caption" msgid "Commands" msgstr "Загады" #: tfrmoptionstoolbarextra.ckbtoolbaricons.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbaricons.caption" msgid "Icons" msgstr "Значкі" #: tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption msgctxt "tfrmoptionstoolbarextra.ckbtoolbarstartpath.caption" msgid "Starting paths" msgstr "Шляхі запуску" #: tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption msgctxt "tfrmoptionstoolbarextra.gbtoolbaroptionsextra.caption" msgid "Paths" msgstr "Шляхі" #: tfrmoptionstoolbarextra.lblapplysettingsfor.caption msgid "Do this for files and paths for:" msgstr "Ужыць для:" #: tfrmoptionstoolbarextra.lbpathtoberelativeto.caption msgctxt "tfrmoptionstoolbarextra.lbpathtoberelativeto.caption" msgid "Path to be relative to:" msgstr "Шлях да:" #: tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption msgctxt "tfrmoptionstoolbarextra.lbtoolbarfilenamestyle.caption" msgid "Way to set paths when adding elements for icons, commands and starting paths:" msgstr "Спосаб вызначэння шляхоў падчас дадання значкоў, загадаў і шляхоў запуску:" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Пакідаць адкрытым акно тэрмінала пасля выканання праграмы" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Выконваць у тэрмінале" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Выкарыстоўваць вонкавую праграму" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Дадатковыя параметры" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Шлях да праграмы для выканання" #: tfrmoptionstooltips.btnaddtooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnaddtooltipsfiletype.caption" msgid "A&dd" msgstr "&Дадаць" #: tfrmoptionstooltips.btnapplytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnapplytooltipsfiletype.caption" msgid "A&pply" msgstr "У&жыць" #: tfrmoptionstooltips.btncopytooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btncopytooltipsfiletype.caption" msgid "Cop&y" msgstr "&Капіяваць" #: tfrmoptionstooltips.btndeletetooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btndeletetooltipsfiletype.caption" msgid "Delete" msgstr "Вы&даліць" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.btnrenametooltipsfiletype.caption msgctxt "tfrmoptionstooltips.btnrenametooltipsfiletype.caption" msgid "&Rename" msgstr "&Змяніць назву" #: tfrmoptionstooltips.btntooltipother.caption msgctxt "tfrmoptionstooltips.btntooltipother.caption" msgid "Oth&er..." msgstr "Ін&шае..." #: tfrmoptionstooltips.bvltooltips1.caption msgid "Tooltip configuration for selected file type:" msgstr "Канфігурацыя падказкі для абранага тыпу файлаў:" #: tfrmoptionstooltips.bvltooltips2.caption msgid "General options about tooltips:" msgstr "Агульныя параметры падказак:" #: tfrmoptionstooltips.chkshowtooltip.caption msgid "&Show tooltip for files in the file panel" msgstr "&Паказваць на файлавай панэлі выплыўныя падказкі" #: tfrmoptionstooltips.lblfieldslist.caption msgid "Category &hint:" msgstr "Падказка&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска катэгорыі:" #: tfrmoptionstooltips.lbltooltiphidingdelay.caption msgid "Tooltip hiding delay:" msgstr "Хаваць падказку праз:" #: tfrmoptionstooltips.lbltooltipshowingmode.caption msgid "Tooltip showing mode:" msgstr "Рэжым адлюстравання падказак:" #: tfrmoptionstooltips.lbltooltipslistbox.caption msgid "&File types:" msgstr "&Тыпы файлаў:" #: tfrmoptionstooltips.mitooltipsfiletypediscardmodification.caption msgid "Discard Modifications" msgstr "Адкінуць змены" #: tfrmoptionstooltips.mitooltipsfiletypeexport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeexport.caption" msgid "Export..." msgstr "Экспарт..." #: tfrmoptionstooltips.mitooltipsfiletypeimport.caption msgctxt "tfrmoptionstooltips.mitooltipsfiletypeimport.caption" msgid "Import..." msgstr "Імпарт..." #: tfrmoptionstooltips.mitooltipsfiletypesortfiletype.caption msgid "Sort Tooltip File Types" msgstr "Сартаваць тыпы файлаў" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfromdoubleclick.caption msgid "With double-click on the bar on top of a file panel" msgstr "Падвойная пстрычка па верхняму радку файлавай панэлі" #: tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption msgctxt "tfrmoptionstreeviewmenu.ckbdirectoryhotlistfrommenucommand.caption" msgid "With the menu and internal command" msgstr "Пры дапамозе меню і ўнутранага загаду" #: tfrmoptionstreeviewmenu.ckbdoubleclickselect.caption msgid "Double click in tree select and exit" msgstr "Падвойная пстрычка па абранаму ў дрэве і выхад" #: tfrmoptionstreeviewmenu.ckbfavoritatabsfrommenucommand.caption msgctxt "TFRMOPTIONSTREEVIEWMENU.CKBFAVORITATABSFROMMENUCOMMAND.CAPTION" msgid "With the menu and internal command" msgstr "Пры дапамозе меню і ўнутранага загаду" #: tfrmoptionstreeviewmenu.ckbfavoritetabsfromdoubleclick.caption msgid "With double-click on a tab (if configured for it)" msgstr "Падвойная пстрычка па ўкладцы" #: tfrmoptionstreeviewmenu.ckbshortcutselectandclose.caption msgid "When using the keyboard shortcut, it will exit the window returning the current choice" msgstr "Калі выкарыстоўваецца спалучэнне клавішаў, то акно закрыецца пасля выбару" #: tfrmoptionstreeviewmenu.ckbsingleclickselect.caption msgid "Single mouse click in tree select and exit" msgstr "Пстрычка мышы па абранаму ў дрэве і выхад" #: tfrmoptionstreeviewmenu.ckbuseforcommandlinehistory.caption msgid "Use it for Command Line History" msgstr "Выкарыстоўваць гісторыю загаднага радка" #: tfrmoptionstreeviewmenu.ckbusefordirhistory.caption msgid "Use it for the Dir History" msgstr "Выкарыстоўваць гісторыю каталога" #: tfrmoptionstreeviewmenu.ckbuseforviewhistory.caption msgid "Use it for the View History (Visited paths for active view)" msgstr "Выкарыстоўваць гісторыю каталога (наведаныя каталогі)" #: tfrmoptionstreeviewmenu.gbbehavior.caption msgid "Behavior regarding selection:" msgstr "Паводзіны пры абіранні:" #: tfrmoptionstreeviewmenu.gbtreeviewmenusettings.caption msgid "Tree View Menus related options:" msgstr "Параметры меню ў выглядзе дрэва:" #: tfrmoptionstreeviewmenu.gbwheretousetreeviewmenu.caption msgid "Where to use Tree View Menus:" msgstr "Дзе выкарыстоўваць меню ў выглядзе дрэва:" #: tfrmoptionstreeviewmenu.lblnote.caption msgid "*NOTE: Regarding the options like the case sensitivity, ignoring accents or not, these are saved and restored individually for each context from a usage and session to another." msgstr "*НАТАТКА: Стан такіх параметраў, як адчувальнасць да рэгістра, ігнараванне акцэнтаў, захоўваецца для наступных выклікаў меню." #: tfrmoptionstreeviewmenu.lbluseindirectoryhotlist.caption msgid "With Directory Hotlist:" msgstr "З выбранымі каталогамі:" #: tfrmoptionstreeviewmenu.lblusewithfavoritetabs.caption msgid "With Favorite Tabs:" msgstr "З выбранымі ўкладкамі:" #: tfrmoptionstreeviewmenu.lblusewithhistory.caption msgid "With History:" msgstr "З гісторыяй:" #: tfrmoptionstreeviewmenucolor.btfont.caption msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption" msgid "..." msgstr "..." #: tfrmoptionstreeviewmenucolor.cbkusagekeyboardshortcut.caption msgid "Use and display keyboard shortcut for choosing items" msgstr "Выкарыстоўваць і паказваць спалучэнні клавішаў для выбару элементаў" #: tfrmoptionstreeviewmenucolor.gbfont.caption msgid "Font" msgstr "Шрыфт" #: tfrmoptionstreeviewmenucolor.gblayoutandcolors.caption msgid "Layout and colors options:" msgstr "Параметры колераў і макет:" #: tfrmoptionstreeviewmenucolor.lblbackgroundcolor.caption msgid "Background color:" msgstr "Колер фону:" #: tfrmoptionstreeviewmenucolor.lblcursorcolor.caption msgid "Cursor color:" msgstr "Колер курсора:" #: tfrmoptionstreeviewmenucolor.lblfoundtextcolor.caption msgid "Found text color:" msgstr "Колер знойдзенага тэксту:" #: tfrmoptionstreeviewmenucolor.lblfoundtextundercursor.caption msgid "Found text under cursor:" msgstr "Колер знойдзенага тэксту пад курсорам:" #: tfrmoptionstreeviewmenucolor.lblnormaltextcolor.caption msgid "Normal text color:" msgstr "Колер звычайнага тэксту:" #: tfrmoptionstreeviewmenucolor.lblnormaltextundercursor.caption msgid "Normal text under cursor:" msgstr "Колер звычайнага тэксту пад курсорам:" #: tfrmoptionstreeviewmenucolor.lblpreview.caption msgid "Tree View Menu Preview:" msgstr "Папярэдні прагляд:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextcolor.caption msgid "Secondary text color:" msgstr "Колер дадатковага тэксту:" #: tfrmoptionstreeviewmenucolor.lblsecondarytextundercursor.caption msgid "Secondary text under cursor:" msgstr "Колер дадатковага тэксту пад курсорам:" #: tfrmoptionstreeviewmenucolor.lblshortcutcolor.caption msgid "Shortcut color:" msgstr "Колер гарачай клавішы:" #: tfrmoptionstreeviewmenucolor.lblshortcutundercursor.caption msgid "Shortcut under cursor:" msgstr "Колер гарачай клавішы пад курсорам:" #: tfrmoptionstreeviewmenucolor.lblunselectabletextcolor.caption msgid "Unselectable text color:" msgstr "Колер тэксту, які не вылучаецца:" #: tfrmoptionstreeviewmenucolor.lblunselectableundercursor.caption msgid "Unselectable under cursor:" msgstr "Колер тэксту пад курсорам, які не вылучаецца:" #: tfrmoptionstreeviewmenucolor.treeviewmenusample.hint msgid "Change color on left and you'll see here a preview of what your Tree View Menus will look likes with this sample." msgstr "Змяніце колеры злева, і вы ўбачыце як будзе выглядаць вашае меню." #: tfrmoptionsviewer.gbinternalviewer.caption msgid "Internal viewer options" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Колькасць слупкоў у рэжыме кнігі" #: tfrmpackdlg.btnconfig.caption msgctxt "tfrmpackdlg.btnconfig.caption" msgid "Con&figure" msgstr "Нал&адзіць" #: tfrmpackdlg.caption msgid "Pack files" msgstr "Запакаваць файлы" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Ства&рыць асобныя архівы, адзін архіў на кожны абраны файл/каталог" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Архіў, які &сам распакоўваецца" #: tfrmpackdlg.cbencrypt.caption msgctxt "tfrmpackdlg.cbencrypt.caption" msgid "Encr&ypt" msgstr "Шыф&раванне" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Пера&мяшчаць у архіў" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Складаны архіў" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "≠>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "С&пачатку пакаваць у архіў TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Захоўваць &шлях" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Файл(ы) у архіве:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Архіватар" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыць" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Распакаваць у&сё і выканаць" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Распакаваць і выканаць" #: tfrmpackinfodlg.caption msgid "Properties of packed file" msgstr "Уласцівасці запакаванага файла" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Атрыбуты:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Узровень сціскання:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Метад:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Першапачатковы памер:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Памер запакаванага:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Архіватар:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Час:" #: tfrmprintsetup.caption msgid "Print configuration" msgstr "Канфігурацыя друку" #: tfrmprintsetup.gbmargins.caption msgid "Margins (mm)" msgstr "Палі (мм)" #: tfrmprintsetup.lblbottom.caption msgid "&Bottom:" msgstr "&Ніз:" #: tfrmprintsetup.lblleft.caption msgid "&Left:" msgstr "&Па леваму краю:" #: tfrmprintsetup.lblright.caption msgid "&Right:" msgstr "&Па праваму краю:" #: tfrmprintsetup.lbltop.caption msgid "&Top:" msgstr "&Верх:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Закрыць панэль фільтравання" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Увядзіце тэкст для пошуку і фільтравання" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Зважаць на рэгістр" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "TFRMQUICKSEARCH.SBDIRECTORIES.HINT" msgid "Directories" msgstr "Каталогі" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "TFRMQUICKSEARCH.SBFILES.HINT" msgid "Files" msgstr "Файлы" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Супадае з пачаткам" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Супадае з канцом" #: tfrmquicksearch.tglfilter.caption msgid "Filter" msgstr "Фільтраваць" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Пошук альбо фільтр" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Дадаць правіла" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "&Выдаліць правіла" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Выкарыстоўваць убудовы &змесціва, камбінаваць з:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Убудова" #: tfrmsearchplugin.headercontrol.sections[1].text msgctxt "tfrmsearchplugin.headercontrol.sections[1].text" msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgctxt "tfrmsearchplugin.headercontrol.sections[2].text" msgid "Operator" msgstr "Аператар" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Значэнне" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&І (усе супадзенні)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&АЛЬБО (любое супадзенне)" #: tfrmselectduplicates.btnapply.caption msgctxt "tfrmselectduplicates.btnapply.caption" msgid "&Apply" msgstr "&Ужыць" #: tfrmselectduplicates.btncancel.caption msgctxt "tfrmselectduplicates.btncancel.caption" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmselectduplicates.btnexcludemask.hint msgctxt "tfrmselectduplicates.btnexcludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnincludemask.hint msgctxt "tfrmselectduplicates.btnincludemask.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmselectduplicates.btnok.caption msgctxt "tfrmselectduplicates.btnok.caption" msgid "&OK" msgstr "&Добра" #: tfrmselectduplicates.caption msgid "Select duplicate files" msgstr "Абраць дублікаты файлаў" #: tfrmselectduplicates.chkleaveunselected.caption msgid "&Leave at least one file in each group unselected:" msgstr "&Пакінуць прынамсі адзін файл з кожнай групы невылучаным:" #: tfrmselectduplicates.cmbincludemask.text msgctxt "tfrmselectduplicates.cmbincludemask.text" msgid "*" msgstr "*" #: tfrmselectduplicates.lblexcludemask.caption msgid "&Remove selection by name/extension:" msgstr "&Прыбраць вылучэнне па назве ці пашырэнні:" #: tfrmselectduplicates.lblfirstmethod.caption msgid "&1." msgstr "&1." #: tfrmselectduplicates.lblincludemask.caption msgid "Select by &name/extension:" msgstr "Абраць па &назве ці пашырэнні:" #: tfrmselectduplicates.lblsecondmethod.caption msgid "&2." msgstr "&2." #: tfrmselectpathrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmselectpathrange.buttonpanel.okbutton.caption msgctxt "tfrmselectpathrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Добра" #: tfrmselectpathrange.edseparator.editlabel.caption msgid "Sep&arator" msgstr "&Падзяляльнік" #: tfrmselectpathrange.gbcountfrom.caption msgid "Count from" msgstr "Лічыць ад" #: tfrmselectpathrange.lblresult.caption msgctxt "tfrmselectpathrange.lblresult.caption" msgid "Result:" msgstr "Вынік:" #: tfrmselectpathrange.lblselectdirectories.caption msgid "&Select the directories to insert (you may select more than one)" msgstr "&Абраць каталогі для ўстаўкі" #: tfrmselectpathrange.rbfirstfromend.caption msgctxt "tfrmselectpathrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&канца" #: tfrmselectpathrange.rbfirstfromstart.caption msgctxt "tfrmselectpathrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&пачатку" #: tfrmselecttextrange.buttonpanel.cancelbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmselecttextrange.buttonpanel.okbutton.caption msgctxt "tfrmselecttextrange.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Добра" #: tfrmselecttextrange.gbcountfirstfrom.caption msgid "Count first from" msgstr "Першы ад" #: tfrmselecttextrange.gbcountlastfrom.caption msgid "Count last from" msgstr "Апошні ад" #: tfrmselecttextrange.gbrangedescription.caption msgid "Range description" msgstr "Дыяпазон" #: tfrmselecttextrange.lblresult.caption msgctxt "tfrmselecttextrange.lblresult.caption" msgid "Result:" msgstr "Вынік:" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Абраць сімвалы для ўстаўкі:" #: tfrmselecttextrange.rbdescriptionfirstlast.caption msgid "[&First:Last]" msgstr "[&Першы:Апошні]" #: tfrmselecttextrange.rbdescriptionfirstlength.caption msgid "[First,&Length]" msgstr "[Першы,&Даўжыня]" #: tfrmselecttextrange.rbfirstfromend.caption msgctxt "tfrmselecttextrange.rbfirstfromend.caption" msgid "The en&d" msgstr "&канца" #: tfrmselecttextrange.rbfirstfromstart.caption msgctxt "tfrmselecttextrange.rbfirstfromstart.caption" msgid "The sta&rt" msgstr "&пачатку" #: tfrmselecttextrange.rblastfromend.caption msgid "The &end" msgstr "&канца" #: tfrmselecttextrange.rblastfromstart.caption msgid "The s&tart" msgstr "&пачатку" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmsetfileproperties.caption msgid "Change attributes" msgstr "Змяніць атрыбуты" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Мацавальны" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgid "Archive" msgstr "Архіў" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "tfrmsetfileproperties.chkcreationtime.caption" msgid "Created:" msgstr "Створаны:" #: tfrmsetfileproperties.chkhidden.caption msgid "Hidden" msgstr "Схаваны" #: tfrmsetfileproperties.chklastaccesstime.caption msgctxt "tfrmsetfileproperties.chklastaccesstime.caption" msgid "Accessed:" msgstr "Апошні доступ:" #: tfrmsetfileproperties.chklastwritetime.caption msgctxt "tfrmsetfileproperties.chklastwritetime.caption" msgid "Modified:" msgstr "Зменены:" #: tfrmsetfileproperties.chkreadonly.caption msgid "Read only" msgstr "Толькі чытанне" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Уключаючы падкаталогі" #: tfrmsetfileproperties.chksystem.caption msgctxt "tfrmsetfileproperties.chksystem.caption" msgid "System" msgstr "Сістэма" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Уласцівасці пазнакі часу" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрыбуты" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрыбуты" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біты:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(шэрае поле адпавядае нязменнаму значэнню)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Іншае" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Уладальнік" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Тэкст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выкананне" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(шэрае поле адпавядае нязменнаму значэнню)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Васьмярковы:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чытанне" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запісаць" #: tfrmsetfileproperties.zvcreationdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvcreationdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastaccessdatetime.textfornulldate" msgid " " msgstr " " #: tfrmsetfileproperties.zvlastwritedatetime.textfornulldate msgctxt "tfrmsetfileproperties.zvlastwritedatetime.textfornulldate" msgid " " msgstr " " #: tfrmsortanything.btnsort.caption msgid "&Sort" msgstr "&Сартаваць" #: tfrmsortanything.buttonpanel.cancelbutton.caption msgctxt "tfrmsortanything.buttonpanel.cancelbutton.caption" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmsortanything.buttonpanel.okbutton.caption msgctxt "tfrmsortanything.buttonpanel.okbutton.caption" msgid "&OK" msgstr "&Добра" #: tfrmsortanything.caption msgid "frmSortAnything" msgstr "frmSortAnything" #: tfrmsortanything.lblsortanything.caption msgid "Drag and drop elements to sort them" msgstr "Можна сартаваць перацягваннем" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmsplitter.caption msgid "Splitter" msgstr "Падзяляльнік" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Стварыць файл кантрольнай сумы" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Памер і нумары частак" #: tfrmsplitter.lbdirtarget.caption msgid "Split the file to directory:" msgstr "Разбіць файл у каталог:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Колькасць частак" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Байтаў" #: tfrmsplitter.rbtngigab.caption msgid "&Gigabytes" msgstr "&Гігабайтаў" #: tfrmsplitter.rbtnkilob.caption msgid "&Kilobytes" msgstr "&Кілабайтаў" #: tfrmsplitter.rbtnmegab.caption msgid "&Megabytes" msgstr "&Мегабайтаў" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Зборка" #: tfrmstartingsplash.lblcommit.caption msgctxt "tfrmstartingsplash.lblcommit.caption" msgid "Commit" msgstr "Унесці" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Аперацыйная сістэма" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Рэвізія" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Версія" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Бібліятэка віджэтаў" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Стварыць сімвалічную спасылку" #: tfrmsymlink.chkuserelativepath.caption msgid "Use &relative path when possible" msgstr "&Адносны шлях па магчымасці" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&На што паказвае спасылка" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Назва с&пасылкі" #: tfrmsyncdirsdlg.actdeleteboth.caption msgid "Delete on both sides" msgstr "Выдаліць з абодвух бакоў" #: tfrmsyncdirsdlg.actdeleteleft.caption msgid "<- Delete left" msgstr "<- Выдаліць злева" #: tfrmsyncdirsdlg.actdeleteright.caption msgid "-> Delete right" msgstr "-> Выдаліць справа" #: tfrmsyncdirsdlg.actselectclear.caption msgid "Remove selection" msgstr "Прыбраць адмеціну капіявання/выдалення" #: tfrmsyncdirsdlg.actselectcopydefault.caption msgid "Select for copying (default direction)" msgstr "Абраць для капіявання (прадвызначаны напрамак)" #: tfrmsyncdirsdlg.actselectcopylefttoright.caption msgid "Select for copying -> (left to right)" msgstr "Абраць для капіявання -> (злева ўправа)" #: tfrmsyncdirsdlg.actselectcopyreverse.caption msgid "Reverse copy direction" msgstr "Змяніць напрамак капіявання" #: tfrmsyncdirsdlg.actselectcopyrighttoleft.caption msgid "Select for copying <- (right to left)" msgstr "Абраць для капіявання <- (справа ўлева)" #: tfrmsyncdirsdlg.actselectdeleteboth.caption msgid "Select for deleting <-> (both)" msgstr "Абраць для выдалення <-> (абодва)" #: tfrmsyncdirsdlg.actselectdeleteleft.caption msgid "Select for deleting <- (left)" msgstr "Абраць для выдалення <- (злева)" #: tfrmsyncdirsdlg.actselectdeleteright.caption msgid "Select for deleting -> (right)" msgstr "Абраць для выдалення -> (справа)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Закрыць" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Параўнаць" #: tfrmsyncdirsdlg.btnsearchtemplate.hint msgctxt "tfrmsyncdirsdlg.btnsearchtemplate.hint" msgid "Template..." msgstr "Шаблон..." #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Сінхранізаваць" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Сінхранізаваць каталогі" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "асіметрычна" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "па змесціву" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "не зважаць на дату" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "толькі абранае" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Падкаталогі" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Паказваць:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Назва" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Памер" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Памер" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Назва" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(у асноўным акне)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Параўнаць" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Паказаць злева" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Паказаць справа" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "дублікаты" #: tfrmsyncdirsdlg.sbequal.caption msgctxt "tfrmsyncdirsdlg.sbequal.caption" msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgctxt "tfrmsyncdirsdlg.sbnotequal.caption" msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "адзіночныя" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Калі ласка, націсніце \"Параўнаць\", каб пачаць" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Сінхранізаваць" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Пацвердзіць перазапіс" #: tfrmtreeviewmenu.caption msgctxt "tfrmtreeviewmenu.caption" msgid "Tree View Menu" msgstr "Меню ў выглядзе дрэва" #: tfrmtreeviewmenu.lblsearchingentry.caption msgid "Select your hot directory:" msgstr "Абярыце ваш выбраны каталог:" #: tfrmtreeviewmenu.pmicasesensitive.caption msgid "Search is case sensitive" msgstr "Пошук ўлічвае рэгістр" #: tfrmtreeviewmenu.pmifullcollapse.caption msgid "Full collapse" msgstr "Згарнуць усе" #: tfrmtreeviewmenu.pmifullexpand.caption msgid "Full expand" msgstr "Разгарнуць усе" #: tfrmtreeviewmenu.pmiignoreaccents.caption msgid "Search ignore accents and ligatures" msgstr "Пошук не ўлічвае акцэнты і лігатуры" #: tfrmtreeviewmenu.pminotcasesensitive.caption msgid "Search is not case sensitive" msgstr "Пошук не ўлічвае рэгістр" #: tfrmtreeviewmenu.pminotignoreaccents.caption msgid "Search is strict regarding accents and ligatures" msgstr "Пошук улічвае акцэнты і лігатуры" #: tfrmtreeviewmenu.pminotshowwholebranchifmatch.caption msgid "Don't show the branch content \"just\" because the searched string is found in the branche name" msgstr "Калі радок знойдзены ў назве галіны, то змесціва галіны не будзе паказвацца" #: tfrmtreeviewmenu.pmishowwholebranchifmatch.caption msgid "If searched string is found in a branch name, show the whole branch even if elements don't match" msgstr "Калі радок знойдзены ў назве галіны, то будзе паказвацца ўся галіна" #: tfrmtreeviewmenu.tbcancelandquit.hint msgid "Close Tree View Menu" msgstr "Закрыць меню ў выглядзе дрэва" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenus.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUS.HINT" msgid "Configuration of Tree View Menu" msgstr "Налады меню ў выглядзе дрэва" #: tfrmtreeviewmenu.tbconfigurationtreeviewmenuscolors.hint msgctxt "TFRMTREEVIEWMENU.TBCONFIGURATIONTREEVIEWMENUSCOLORS.HINT" msgid "Configuration of Tree View Menu Colors" msgstr "Налады колераў меню ў выглядзе дрэва" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Д&адаць новы" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасаваць" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Змяніць" #: tfrmtweakplugin.btndefault.caption msgctxt "tfrmtweakplugin.btndefault.caption" msgid "De&fault" msgstr "&Прадвызначана" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Добра" #: tfrmtweakplugin.btnrelativeplugin1.hint msgctxt "tfrmtweakplugin.btnrelativeplugin1.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmtweakplugin.btnrelativeplugin2.hint msgctxt "tfrmtweakplugin.btnrelativeplugin2.hint" msgid "Some functions to select appropriate path" msgstr "Некаторыя функцыі для выбару адпаведнага шляху" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Выдаліць" #: tfrmtweakplugin.caption msgid "Tweak plugin" msgstr "Налады ўбудовы" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Выз&начыць тып архіва па змесціву" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Можа вы&даляць файлы" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Падтрымлівае &шыфраванне" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Пака&зваць як звычайныя файлы (хаваць значок архіва)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Падтрымлівае па&каванне ў памяць" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify existing archives" msgstr "Можа &змяняць існыя архівы" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "У &архіве можа быць некалькі файлаў" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Можа ствараць новыя ар&хівы" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "&Мае дыялог параметраў" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Дазваляе шу_каць тэкст у архівах" #: tfrmtweakplugin.lbldescription.caption msgid "&Description:" msgstr "&Апісанне:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "&Радок выяўлення:" #: tfrmtweakplugin.lblextension.caption msgid "&Extension:" msgstr "&Пашырэнне:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Сцягі:" #: tfrmtweakplugin.lblname.caption msgctxt "tfrmtweakplugin.lblname.caption" msgid "&Name:" msgstr "&Назва:" #: tfrmtweakplugin.lblplugin.caption msgctxt "tfrmtweakplugin.lblplugin.caption" msgid "&Plugin:" msgstr "&Убудова:" #: tfrmtweakplugin.lblplugin2.caption msgctxt "tfrmtweakplugin.lblplugin2.caption" msgid "&Plugin:" msgstr "&Убудова:" #: tfrmviewer.actabout.caption msgid "About Viewer..." msgstr "Пра праграму для прагляду..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Паказвае паведамленне пра праграму" #: tfrmviewer.actautoreload.caption msgid "Auto Reload" msgstr "Аўтаабнаўленне" #: tfrmviewer.actchangeencoding.caption msgid "Change encoding" msgstr "Змяніць кадаванне" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Скапіяваць файл" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Скапіяваць файл" #: tfrmviewer.actcopytoclipboard.caption msgctxt "TFRMVIEWER.ACTCOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Скапіяваць у буфер абмену" #: tfrmviewer.actcopytoclipboardformatted.caption msgid "Copy To Clipboard Formatted" msgstr "Скапіяваць у буфер абмену з фарматаваннем" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Выдаліць файл" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Выдаліць файл" #: tfrmviewer.actexitviewer.caption msgctxt "TFRMVIEWER.ACTEXITVIEWER.CAPTION" msgid "E&xit" msgstr "&Выйсці" #: tfrmviewer.actfind.caption msgctxt "TFRMVIEWER.ACTFIND.CAPTION" msgid "Find" msgstr "Шукаць" #: tfrmviewer.actfindnext.caption msgctxt "TFRMVIEWER.ACTFINDNEXT.CAPTION" msgid "Find next" msgstr "Шукаць наступнае" #: tfrmviewer.actfindprev.caption msgctxt "TFRMVIEWER.ACTFINDPREV.CAPTION" msgid "Find previous" msgstr "Шукаць папярэдняе" #: tfrmviewer.actfullscreen.caption msgctxt "TFRMVIEWER.ACTFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "На ўвесь экран" #: tfrmviewer.actgotoline.caption #, fuzzy msgctxt "tfrmviewer.actgotoline.caption" msgid "Goto Line..." msgstr "Перайсці да радка..." #: tfrmviewer.actgotoline.hint #, fuzzy msgctxt "tfrmviewer.actgotoline.hint" msgid "Goto Line" msgstr "Перайсці да радка" #: tfrmviewer.actimagecenter.caption msgid "Center" msgstr "Па цэнтры" #: tfrmviewer.actloadnextfile.caption msgid "&Next" msgstr "&Наступны" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Загрузіць наступны файл" #: tfrmviewer.actloadprevfile.caption msgid "&Previous" msgstr "&Папярэдні" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Загрузіць папярэдні файл" #: tfrmviewer.actmirrorhorz.caption msgid "Mirror Horizontally" msgstr "Адлюстраваць гарызантальна" #: tfrmviewer.actmirrorhorz.hint msgid "Mirror" msgstr "Адлюстраванне" #: tfrmviewer.actmirrorvert.caption msgid "Mirror Vertically" msgstr "Адлюстраваць вертыкальна" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Перамясціць файл" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Перамясціць файл" #: tfrmviewer.actpreview.caption msgctxt "tfrmviewer.actpreview.caption" msgid "Preview" msgstr "Папярэдні прагляд" #: tfrmviewer.actprint.caption msgid "P&rint..." msgstr "&Друк..." #: tfrmviewer.actprintsetup.caption msgid "Print &setup..." msgstr "&Параметры друку..." #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перазагрузіць" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перазагрузіць бягучы файл" #: tfrmviewer.actrotate180.caption msgid "+ 180" msgstr "+180" #: tfrmviewer.actrotate180.hint msgid "Rotate 180 degrees" msgstr "Павярнуць на 180 градусаў" #: tfrmviewer.actrotate270.caption msgid "- 90" msgstr "- 90" #: tfrmviewer.actrotate270.hint msgid "Rotate -90 degrees" msgstr "Павярнуць на -90 градусаў" #: tfrmviewer.actrotate90.caption msgid "+ 90" msgstr "+ 90" #: tfrmviewer.actrotate90.hint msgid "Rotate +90 degrees" msgstr "Павярнуць на +90 градусаў" #: tfrmviewer.actsave.caption msgctxt "TFRMVIEWER.ACTSAVE.CAPTION" msgid "Save" msgstr "Захаваць" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Захаваць як..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Захаваць файл як..." #: tfrmviewer.actscreenshot.caption msgctxt "TFRMVIEWER.ACTSCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Здымак экрана" #: tfrmviewer.actscreenshotdelay3sec.caption msgid "Delay 3 sec" msgstr "Затрымка 3 секунды" #: tfrmviewer.actscreenshotdelay5sec.caption msgid "Delay 5 sec" msgstr "Затрымка 5 секунд" #: tfrmviewer.actselectall.caption msgctxt "TFRMVIEWER.ACTSELECTALL.CAPTION" msgid "Select All" msgstr "Абраць усё" #: tfrmviewer.actshowasbin.caption msgid "Show as &Bin" msgstr "Паказаць у &двайковым выглядзе" #: tfrmviewer.actshowasbook.caption msgid "Show as B&ook" msgstr "Паказаць як к&нігу" #: tfrmviewer.actshowasdec.caption msgid "Show as &Dec" msgstr "Паказаць у д&зесятковым выглядзе" #: tfrmviewer.actshowashex.caption msgid "Show as &Hex" msgstr "Паказаць у ша&снаццатковым выглядзе" #: tfrmviewer.actshowastext.caption msgid "Show as &Text" msgstr "Паказаць як &тэкст" #: tfrmviewer.actshowaswraptext.caption msgid "Show as &Wrap text" msgstr "Паказаць як тэкст з &пераносам" #: tfrmviewer.actshowcaret.caption msgid "Show text c&ursor" msgstr "Паказваць тэкставы &курсор" #: tfrmviewer.actshowcode.caption msgid "Code" msgstr "" #: tfrmviewer.actshowgraphics.caption msgctxt "tfrmviewer.actshowgraphics.caption" msgid "Graphics" msgstr "Графіка" #: tfrmviewer.actshowoffice.caption msgid "Office XML (text only)" msgstr "Office XML (толькі тэкст)" #: tfrmviewer.actshowplugins.caption msgctxt "TFRMVIEWER.ACTSHOWPLUGINS.CAPTION" msgid "Plugins" msgstr "Убудовы" #: tfrmviewer.actshowtransparency.caption msgid "Show transparenc&y" msgstr "Паказваць п&разрыстасць" #: tfrmviewer.actstretchimage.caption msgid "Stretch" msgstr "Па памерах акна" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Усе выявы па памерах акна" #: tfrmviewer.actstretchonlylarge.caption msgid "Stretch only large" msgstr "Толькі вялікія выявы па памерах акна" #: tfrmviewer.actundo.caption #, fuzzy msgctxt "tfrmviewer.actundo.caption" msgid "Undo" msgstr "Адрабіць" #: tfrmviewer.actundo.hint msgctxt "TFRMVIEWER.ACTUNDO.HINT" msgid "Undo" msgstr "Адрабіць" #: tfrmviewer.actwraptext.caption msgid "&Wrap text" msgstr "&Перанос тэксту" #: tfrmviewer.actzoom.caption msgid "Zoom" msgstr "Маштаб" #: tfrmviewer.actzoomin.caption msgctxt "tfrmviewer.actzoomin.caption" msgid "Zoom In" msgstr "Наблізіць" #: tfrmviewer.actzoomin.hint msgctxt "tfrmviewer.actzoomin.hint" msgid "Zoom In" msgstr "Наблізіць" #: tfrmviewer.actzoomout.caption msgctxt "tfrmviewer.actzoomout.caption" msgid "Zoom Out" msgstr "Аддаліць" #: tfrmviewer.actzoomout.hint msgctxt "tfrmviewer.actzoomout.hint" msgid "Zoom Out" msgstr "Аддаліць" #: tfrmviewer.btncuttuimage.hint msgid "Crop" msgstr "Пакінуць абранае" #: tfrmviewer.btnfullscreen.hint msgctxt "tfrmviewer.btnfullscreen.hint" msgid "Full Screen" msgstr "На ўвесь экран" #: tfrmviewer.btngiftobmp.hint msgid "Export Frame" msgstr "Экспарт рамкі" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Падсвятленне" #: tfrmviewer.btnnextgifframe.hint msgid "Next Frame" msgstr "Наступная рамка" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Маляванне" #: tfrmviewer.btnpenwidth.caption msgctxt "tfrmviewer.btnpenwidth.caption" msgid "1" msgstr "1" #: tfrmviewer.btnprevgifframe.hint msgid "Previous Frame" msgstr "Папярэдняя рамка" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Чырвоныя вочы" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "Змяніць памер" #: tfrmviewer.btnslideshow.caption msgctxt "tfrmviewer.btnslideshow.caption" msgid "Slide Show" msgstr "Слайдшоў" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Праграма для прагляду" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Пра праграму" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Рэдагаваць" #: tfrmviewer.miellipse.caption msgid "Ellipse" msgstr "Эліпс" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кадаванне" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Выява" #: tfrmviewer.mipen.caption msgctxt "tfrmviewer.mipen.caption" msgid "Pen" msgstr "Аловак" #: tfrmviewer.mirect.caption msgid "Rect" msgstr "Прамавугольнік" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Павярнуць" #: tfrmviewer.miscreenshot.caption msgctxt "tfrmviewer.miscreenshot.caption" msgid "Screenshot" msgstr "Здымак экрана" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Праглядзець" #: tfrmviewer.mnuplugins.caption msgctxt "tfrmviewer.mnuplugins.caption" msgid "Plugins" msgstr "Убудовы" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Пачаць" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Спыніць" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Файлавыя аперацыі" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Паверх іншых акон" #: tfrmviewoperations.lblusedragdrop.caption msgid "&Use \"drag && drop\" to move operations between queues" msgstr "&Выкарыстоўвайце перацягванне, каб перамяшчаць аперацыі паміж чэргамі" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Скасаваць" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Скасаваць" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Новая чарга" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Паказаць у асобным акне" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Перамясціць у пачатак чаргі" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Перамясціць у канец чаргі" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Чарга" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Па-за чаргой" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Чарга 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Чарга 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Чарга 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Чарга 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Чарга 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Паказаць у асобным акне" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Прыпыніць усе" #: tgiocopymoveoperationoptionsui.cbfollowlinks.caption msgctxt "tgiocopymoveoperationoptionsui.cbfollowlinks.caption" msgid "Fo&llow links" msgstr "&Выкарыcтоўваць спасылкі" #: tgiocopymoveoperationoptionsui.lbldirectoryexists.caption msgctxt "tgiocopymoveoperationoptionsui.lbldirectoryexists.caption" msgid "When dir&ectory exists" msgstr "Калі &каталог існуе" #: tgiocopymoveoperationoptionsui.lblfileexists.caption msgctxt "tgiocopymoveoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Калі файл існуе" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Калі файл існуе" #: ttfrmconfirmcommandline.btncancel.caption msgctxt "ttfrmconfirmcommandline.btncancel.caption" msgid "&Cancel" msgstr "&Скасаваць" #: ttfrmconfirmcommandline.btnok.caption msgctxt "ttfrmconfirmcommandline.btnok.caption" msgid "&OK" msgstr "&Добра" #: ttfrmconfirmcommandline.lblecommandline.editlabel.caption msgid "Command line:" msgstr "Загадны радок:" #: ttfrmconfirmcommandline.lbleparameters.editlabel.caption msgctxt "ttfrmconfirmcommandline.lbleparameters.editlabel.caption" msgid "Parameters:" msgstr "Параметры:" #: ttfrmconfirmcommandline.lblestartpath.editlabel.caption msgid "Start path:" msgstr "Шлях запуску:" #: twcxarchivecopyoperationoptionsui.btnconfig.caption msgctxt "twcxarchivecopyoperationoptionsui.btnconfig.caption" msgid "Con&figure" msgstr "Нал&адзіць" #: twcxarchivecopyoperationoptionsui.cbencrypt.caption msgctxt "twcxarchivecopyoperationoptionsui.cbencrypt.caption" msgid "Encr&ypt" msgstr "Шыф&раванне" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Калі файл існуе" #: twfxplugincopymoveoperationoptionsui.cbcopytime.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION" msgid "Copy d&ate/time" msgstr "Скапіяваць &дату/час" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Працаваць у фоне (асобнае злучэнне)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Калі файл існуе" #: uaccentsutils.rsstraccents msgid "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" msgstr "á;â;à;å;ã;ä;ç;é;ê;è;ë;í;î;ì;ï;ñ;ó;ô;ò;ø;õ;ö;ú;û;ù;ü;ÿ;Á;Â;À;Å;Ã;Ä;Ç;É;Ê;È;Ë;Í;Í;Ì;Ï;Ñ;Ó;Ô;Ø;Õ;Ö;ß;Ú;Û;Ù;Ü;Ÿ;¿;¡;œ;æ;Æ;Œ" #: uaccentsutils.rsstraccentsstripped msgid "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" msgstr "a;a;a;a;a;a;c;e;e;e;e;i;i;i;i;n;o;o;o;o;o;o;u;u;u;u;y;A;A;A;A;A;A;C;E;E;E;E;I;I;I;I;N;O;O;O;O;O;B;U;U;U;U;Y;?;!;oe;ae;AE;OE" #: uadministrator.rselevationrequired msgid "You need to provide administrator permission" msgstr "Неабходна мець правы адміністратара" #: uadministrator.rselevationrequiredcopy msgid "to copy this object:" msgstr "для капіявання гэтага аб'екта:" #: uadministrator.rselevationrequiredcreate msgid "to create this object:" msgstr "для стварэння гэтага аб’екта:" #: uadministrator.rselevationrequireddelete msgid "to delete this object:" msgstr "для выдалення гэтага аб’екта:" #: uadministrator.rselevationrequiredgetattributes msgid "to get attributes of this object:" msgstr "для атрымання атрыбутаў гэтага аб’екта:" #: uadministrator.rselevationrequiredhardlink msgid "to create this hard link:" msgstr "для стварэння гэтай жорсткай спасылкі:" #: uadministrator.rselevationrequiredopen msgid "to open this object:" msgstr "для адкрыцця гэтага аб'екта:" #: uadministrator.rselevationrequiredrename msgid "to rename this object:" msgstr "для змены назвы гэтага аб’екта:" #: uadministrator.rselevationrequiredsetattributes msgid "to set attributes of this object:" msgstr "для вызначэння атрыбутаў гэтага аб'екта:" #: uadministrator.rselevationrequiredsymlink msgid "to create this symbolic link:" msgstr "для стварэння гэтай сімвалічнай спасылкі:" #: uexifreader.rsdatetimeoriginal msgid "Date taken" msgstr "Дата здымкі" #: uexifreader.rsimageheight msgctxt "uexifreader.rsimageheight" msgid "Height" msgstr "Вышыня" #: uexifreader.rsimagewidth msgctxt "uexifreader.rsimagewidth" msgid "Width" msgstr "Шырыня" #: uexifreader.rsmake msgid "Manufacturer" msgstr "Вытворца" #: uexifreader.rsmodel msgid "Camera model" msgstr "Мадэль камеры:" #: uexifreader.rsorientation msgid "Orientation" msgstr "Арыентацыя" #: ulng.msgtrytolocatecrcfile #, object-pascal-format msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?" msgstr "" "Файл кантрольнай сумы можа аб'яднаць файл, але яго не ўдалося знайсці:\n" "%s\n" "\n" "Вы можаце зрабіць яго даступным і націснуць \"Добра\",\n" "альбо націснуць \"Скасаваць\", каб працягнуць без яго." #: ulng.rsabbrevdisplaydir msgid "<DIR>" msgstr "<Каталог>" #: ulng.rsabbrevdisplaylink msgid "<LNK>" msgstr "<Спасылка>" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Скасаваць хуткае фільтраванне" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Скасаваць бягучую аперацыю" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Увядзіце назву файла з пашырэннем" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Фармат тэксту для імпартавання" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Памылка:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Асноўны:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Не знойдзена:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Падчас чытання адбылася памылка:" #: ulng.rschecksumverifysuccess msgctxt "ulng.rschecksumverifysuccess" msgid "Success:" msgstr "Паспяхова:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Увядзіце кантрольную суму і абярыце алгарытм:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Праверка кантрольнай сумы" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Агулам:" #: ulng.rsclearfiltersornot msgid "Do you want to clear filters for this new search?" msgstr "Хочаце ачысціць фільтры падчас новага пошуку?" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "У буферы абмену няма патрэбных даных панэлі інструментаў." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Усе;Актыўная панэль;Левая панэль;Правая панэль;Файлавыя аперацыі;Канфігурацыя;Сетка;Рознае;Паралельны порт;Друк;Пазначэнне;Бяспека;Буфер абмену;FTP;Навігацыя;Дапамога;Акно;Загадны радок;Прылады;Выгляд;Карыстальнік;Укладкі;Упарадкаванне;Лог" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Прадвызначана; па алфавіце" #: ulng.rscolattr msgid "Attr" msgstr "Атр" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Паш" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Назва" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Памер" #: ulng.rsconfcolalign msgid "Align" msgstr "Выраўноўванне" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Загаловак" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Выдаліць" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Змесціва поля" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Перамясціць" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Шырыня" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Наладзіць слупок" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Наладзіць асацыяцыі файлаў" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Пацвярджэнне загаднага радка і параметры" #: ulng.rscopynametemplate #, object-pascal-format msgid "Copy (%d) %s" msgstr "Копія (%d) %s" #: ulng.rsdarkmode msgid "Dark mode" msgstr "Цёмны рэжым" #: ulng.rsdarkmodeoptions msgid "Auto;Enabled;Disabled" msgstr "Аўтаматычна; Уключана; Адключана" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Імпартаваная панэль інструментаў DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Імпартаваная панэль інструментаў TC" #: ulng.rsdefaultpersonalizedabbrevbyte msgctxt "ulng.rsdefaultpersonalizedabbrevbyte" msgid "B" msgstr "B" #: ulng.rsdefaultpersonalizedabbrevgiga msgid "GB" msgstr "Гб" #: ulng.rsdefaultpersonalizedabbrevkilo msgid "KB" msgstr "Кб" #: ulng.rsdefaultpersonalizedabbrevmega msgid "MB" msgstr "Мб" #: ulng.rsdefaultpersonalizedabbrevtera msgid "TB" msgstr "Тб" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Дададзена: " #: ulng.rsdiffcomparing msgid "Comparing..." msgstr "Параўнанне..." #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Выдалена: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Два файла аднолькавыя!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Супадзенні: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Змены: " #: ulng.rsdifftextdifferenceencoding msgctxt "ulng.rsdifftextdifferenceencoding" msgid "Encoding" msgstr "Кадаванне" #: ulng.rsdifftextdifferencelineending msgid "Line-endings" msgstr "Завяршэнне радкоў" #: ulng.rsdifftextidentical msgid "The text is identical, but the following options are used:" msgstr "Тэкст аднолькавы, але выкарыстоўваюцца наступныя параметры:" #: ulng.rsdifftextidenticalnotmatch msgid "" "The text is identical, but the files do not match!\n" "The following differences were found:" msgstr "" "Тэкст аднолькавы, але файлы адрозніваюцца!\n" "Выяўлены наступныя адрозненні:" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Скасаваць" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Усе" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Дапісаць у &канец" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Аўтаматычная змена назвы зыходных файлаў" #: ulng.rsdlgbuttonautorenametarget msgid "Auto-rename tar&get files" msgstr "&Аўтаматычная змена назвы мэтавых файлаў" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Скасаваць" #: ulng.rsdlgbuttoncompare msgid "Compare &by content" msgstr "Параўнаць па &змесціву" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Працягнуць" #: ulng.rsdlgbuttoncopyinto msgid "&Merge" msgstr "&Аб'яднаць" #: ulng.rsdlgbuttoncopyintoall msgid "Mer&ge All" msgstr "Аб&'яднаць усе" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Выйсці з праграмы" #: ulng.rsdlgbuttonignore msgid "Ig&nore" msgstr "Не &зважаць" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "&Не зважаць ні на што" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Не" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Ні&чога" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Добра" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Іншае" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Перазапісаць" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Перазапісаць &усе" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Перазапісаць усе бол&ьшыя" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Перазапісаць усе ста&рэйшыя" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Перазапісаць усе мен&шыя" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Змяніць назву" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Працягнуць" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Паў&тарыць" #: ulng.rsdlgbuttonretryadmin msgid "As Ad&ministrator" msgstr "Як ад&міністратар" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Прапусціць" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Пра&пусціць усё" #: ulng.rsdlgbuttonunlock msgid "&Unlock" msgstr "&Разблакаваць" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Так" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Капіяваць файл(ы)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Перамясціць файл(ы)" #: ulng.rsdlgoppause msgid "Pau&se" msgstr "Пры&пыніць" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Пачаць" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Чарга" #: ulng.rsdlgspeed #, object-pascal-format msgid "Speed %s/s" msgstr "Хуткасць %s/s" #: ulng.rsdlgspeedtime #, object-pascal-format msgid "Speed %s/s, time remaining %s" msgstr "Хуткасць %s/s, часу засталося %s" #: ulng.rsdraganddroptextformat msgid "Rich Text Format;HTML Format;Unicode Format;Simple Text Format" msgstr "Фармат RTF;Фармат HTML;Тэкст Unicode;Просты тэкст" #: ulng.rsdrivefreespaceindicator msgid "Drive Free Space Indicator" msgstr "Індыкатар вольнага месца на дыску" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<няма адмеціны>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<няма медыя>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Унутраны рэдактар Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Перайсці ў радок:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Перайсці да радка" #: ulng.rseditnewfile msgid "new.txt" msgstr "новы.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Назва файла:" #: ulng.rseditnewopen msgid "Open file" msgstr "Адкрыць файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Назад" #: ulng.rseditsearchcaption msgid "Search" msgstr "Пошук" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Далей" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замяніць" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "у вонкавым рэдактары" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "ва унутраным рэдактары" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Выканаць у абалонцы" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Выканаць у тэрмінале і закрыць" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Выканаць у тэрмінале і пакінуць адкрытым" #: ulng.rsextsclosedbracketnofound #, object-pascal-format msgid "\"]\" not found in line %s" msgstr "\"]\" не знойдзена ў радку %s" #: ulng.rsextscommandwithnoext #, object-pascal-format msgid "No extension defined before command \"%s\". It will be ignored." msgstr "Не вызначана пашырэнне загаду \"%s\". Будзе ігнаравацца." #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Злева;Справа;У актыўнай;У неактыўнай;У абедзвюх;Няма" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Не;Так" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Экспартавана_з_DC" #: ulng.rsfileopcopymovefileexistsoptions msgid "Ask;Overwrite;Skip" msgstr "Пытацца;Перазапісваць;Мінаць" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Merge;Skip" msgstr "Пытацца;Аб'ядноўваць;Мінаць" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Пытацца;Перазапісваць;Перазапісваць старэйшыя;Мінаць" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Пытацца;Ніколі не прызначаць;Не зважаць на памылкі" #: ulng.rsfilteranyfiles msgid "Any files" msgstr "Любыя файлы" #: ulng.rsfilterarchiverconfigfiles msgid "Archiver config files" msgstr "Файлы канфігурацыі архіватараў" #: ulng.rsfilterdctooltipfiles msgid "DC Tooltip files" msgstr "Файлы падказак DC" #: ulng.rsfilterdirectoryhotlistfiles msgid "Directory Hotlist files" msgstr "Файлы выбраных каталогаў" #: ulng.rsfilterexecutablefiles msgid "Executables files" msgstr "Выканальныя файлы" #: ulng.rsfilteriniconfigfiles msgid ".ini Config files" msgstr "Файлы канфігурацыі.ini" #: ulng.rsfilterlegacytabfiles msgid "Legacy DC .tab files" msgstr "Файлы .tab" #: ulng.rsfilterlibraries msgid "Library files" msgstr "Файлы бібліятэк" #: ulng.rsfilterpluginfiles msgid "Plugin files" msgstr "Файлы ўбудоў" #: ulng.rsfilterprogramslibraries msgid "Programs and Libraries" msgstr "Праграмы і бібліятэкі" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ФІЛЬТР" #: ulng.rsfiltertctoolbarfiles msgid "TC Toolbar files" msgstr "Файлы панэляў інструментаў ТС" #: ulng.rsfiltertoolbarfiles msgid "DC Toolbar files" msgstr "Файлы панэляў інструментаў DС" #: ulng.rsfilterxmlconfigfiles msgid ".xml Config files" msgstr "Файлы канфігурацыі.xml" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Вызначыць шаблон" #: ulng.rsfinddepth #, object-pascal-format msgid "%s level(s)" msgstr "%s узровень(ні)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "усё (неабмежавана)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "толькі бягучы каталог" #: ulng.rsfinddirnoex #, object-pascal-format msgid "Directory %s does not exist!" msgstr "Каталог %s не існуе!" #: ulng.rsfindfound #, object-pascal-format msgid "Found: %d" msgstr "Знойдзена: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Захаваць шаблон пошуку" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Назва шаблона:" #: ulng.rsfindscanned #, object-pascal-format msgid "Scanned: %d" msgstr "Прасканавана: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Сканаванне" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Пошук файлаў" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Час сканавання: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Пачынаць з" #: ulng.rsfontusageconsole msgid "&Console Font" msgstr "Шрыфт &тэрмінала" #: ulng.rsfontusageeditor msgid "&Editor Font" msgstr "Шрыфт &рэдактара" #: ulng.rsfontusagefunctionbuttons msgid "Function Buttons Font" msgstr "Шрыфт функцыянальных клавішаў" #: ulng.rsfontusagelog msgid "&Log Font" msgstr "Шрыфт &журнала" #: ulng.rsfontusagemain msgid "Main &Font" msgstr "Асноўны &шрыфт" #: ulng.rsfontusagepathedit msgid "Path Font" msgstr "Шрыфт шляху" #: ulng.rsfontusagesearchresults msgid "Search Results Font" msgstr "Шрыфт вынікаў пошуку" #: ulng.rsfontusagestatusbar msgid "Status Bar Font" msgstr "Шрыфт панэлі стану" #: ulng.rsfontusagetreeviewmenu msgid "Tree View Menu Font" msgstr "Шрыфт меню ў выглядзе дрэва" #: ulng.rsfontusageviewer msgid "&Viewer Font" msgstr "Ш&рыфт сродку прагляду" #: ulng.rsfontusageviewerbook msgctxt "ulng.rsfontusageviewerbook" msgid "Viewer&Book Font" msgstr "Шрыфт прагляду ў рэжыме &кнігі" #: ulng.rsfreemsg #, object-pascal-format msgid "%s of %s free" msgstr "%s з %s вольна" #: ulng.rsfreemsgshort #, object-pascal-format msgid "%s free" msgstr "%s вольна" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/час доступу" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Атрыбуты" #: ulng.rsfunccomment msgid "Comment" msgstr "Каментар" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Памер у сціснутым выглядзе" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/час стварэння" #: ulng.rsfuncext msgctxt "ulng.rsfuncext" msgid "Extension" msgstr "Пашырэнне" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Група" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Змяніць дату/час" #: ulng.rsfunclinkto msgid "Link to" msgstr "Спасылка на" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/час змены" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Назва" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Назва без пашырэння" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Уладальнік" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Шлях" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Памер" #: ulng.rsfunctrashorigpath msgid "Original path" msgstr "Зыходны шлях" #: ulng.rsfunctype msgid "Type" msgstr "Тып" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Падчас стварэння жорсткай спасылкі адбылася памылка." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "няма;назва, а-я;назва, я-а;тып, а-я;тып, я-а;памер 9-0;памер 0-9;дата 9-0;дата 0-9" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?" msgstr "" "Увага! Аднаўленне з рэзервовай копіі ачысціць спіс існых выбраных каталогаў і заменіць імпартуемым.\n" "\n" "Хочаце працягнуць?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Дыялог капіявання/перамяшчэння" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Адрозненні" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Дыялог рэдагавання каментара" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Рэдактар" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Пошук файлаў" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Асноўныя" #: ulng.rshotkeycategorymultirename msgctxt "ulng.rshotkeycategorymultirename" msgid "Multi-Rename Tool" msgstr "Масавая змена назвы" #: ulng.rshotkeycategorysyncdirs msgid "Synchronize Directories" msgstr "Сінхранізацыя каталогаў" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Сродак прагляду" #: ulng.rshotkeyfilealreadyexists msgid "" "A setup with that name already exists.\n" "Do you want to overwrite it?" msgstr "" "Файл з такой назвай ужо існуе.\n" "Перазапісаць яго?" #: ulng.rshotkeyfileconfirmdefault msgid "Are you sure you want to restore default?" msgstr "Сапраўды аднавіць прадвызначаныя значэнні?" #: ulng.rshotkeyfileconfirmerasure #, object-pascal-format msgid "Are you sure you want to erase setup \"%s\"?" msgstr "Сапраўды хочаце сцерці набор \"%s\"?" #: ulng.rshotkeyfilecopyof #, object-pascal-format msgid "Copy of %s" msgstr "Копія %s" #: ulng.rshotkeyfileinputnewname msgid "Input your new name" msgstr "Увядзіце новую назву" #: ulng.rshotkeyfilemustkeepone msgid "You must keep at least one shortcut file." msgstr "Вы мусіце пакінуць прынамсі адзін файл гарачых клавішаў." #: ulng.rshotkeyfilenewname msgid "New name" msgstr "Новая назва" #: ulng.rshotkeyfilesavemodified #, object-pascal-format msgid "" "\"%s\" setup has been modified.\n" "Do you want to save it now?" msgstr "" "Файл \"%s\" быў зменены.\n" "Хочаце захаваць яго?" #: ulng.rshotkeynoscenter msgid "No shortcut with \"ENTER\"" msgstr "Не выкарыстоўваць \"ENTER\"" #: ulng.rshotkeysortorder msgid "By command name;By shortcut key (grouped);By shortcut key (one per row)" msgstr "Па назве загаду; Па гарачых клавішах (групамі); Па гарачых клавішах (па адной)" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Не ўдалося знайсці спасылку на файл прадвызначанай панэлі інструментаў" #: ulng.rslegacydisplaysizesinglelettergiga msgid "G" msgstr "Г" #: ulng.rslegacydisplaysizesingleletterkilo msgid "K" msgstr "K" #: ulng.rslegacydisplaysizesinglelettermega msgid "M" msgstr "M" #: ulng.rslegacydisplaysizesinglelettertera msgid "T" msgstr "T" #: ulng.rslegacyoperationbytesuffixletter msgctxt "ulng.rslegacyoperationbytesuffixletter" msgid "B" msgstr "B" #: ulng.rslistoffindfileswindows msgid "List of \"Find files\" windows" msgstr "Спіс акон \"Пошук файлаў\"" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Скасаваць вылучэнне" #: ulng.rsmarkplus msgid "Select mask" msgstr "Абраць маску" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Уваходная маска:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Набор слупкоў з такой назвай ужо існуе." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Змяніць альбо ЗАХАВАЦЬ, СКАПІЯВАЦЬ альбо ВЫДАЛІЦЬ бягучы набор слупкоў" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Наладзіць адвольныя слупкі" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Увесці назву новых адвольных слупкоў" #: ulng.rsmenumacosservices msgid "Services" msgstr "Службы" #: ulng.rsmenumacosshare msgid "Share..." msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Дзеянні" #: ulng.rsmnucontentdefault msgid "<Default>" msgstr "<Прадвызначана>" #: ulng.rsmnucontentoctal msgid "Octal" msgstr "Васьмярковы" #: ulng.rsmnucreateshortcut msgid "Create Shortcut..." msgstr "Стварыць спалучэнне..." #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Адлучыць сеткавы дыск..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Рэдагаваць" #: ulng.rsmnueject msgid "Eject" msgstr "Выняць" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Распакаваць сюды..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Мапа сеткавага дыска..." #: ulng.rsmnumount msgid "Mount" msgstr "Прымантаваць" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Новы" #: ulng.rsmnunomedia msgid "No media available" msgstr "Няма даступных медыя" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Адкрыць" #: ulng.rsmnuopenwith msgctxt "ulng.rsmnuopenwith" msgid "Open with" msgstr "Адкрыць у" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Іншае..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Запакаваць сюды..." #: ulng.rsmnurestore msgctxt "ulng.rsmnurestore" msgid "Restore" msgstr "Аднавіць" #: ulng.rsmnusortby msgid "Sort by" msgstr "Упарадкаваць па" #: ulng.rsmnuumount msgid "Unmount" msgstr "Адмантаваць" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Праглядзець" #: ulng.rsmsgaccount msgid "Account:" msgstr "Акаўнт:" #: ulng.rsmsgalldcintcmds msgid "All Double Commander internal commands" msgstr "Усе ўнутраныя загады Double Commander" #: ulng.rsmsgapplicationname #, object-pascal-format msgid "Description: %s" msgstr "Апісанне: %s" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Дадатковыя параметры для загаднага радка архіватара:" #: ulng.rsmsgaskquoteornot msgid "Do you want to enclose between quotes?" msgstr "Узяць у двукоссі?" #: ulng.rsmsgbadcrc32 #, object-pascal-format msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?" msgstr "" "Хібны CRC32 выніковага файла:\n" "\"%s\"\n" "\n" "Усё адно хочаце пакінуць пашкоджаны файл?" #: ulng.rsmsgcanceloperation msgid "Are you sure that you want to cancel this operation?" msgstr "Сапраўды хочаце скасаваць аперацыю?" #: ulng.rsmsgcannotcopymoveitself #, object-pascal-format msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Нельга скапіяваць/перамясціць файл \"%s\" у самога сябе!" #: ulng.rsmsgcannotcopyspecialfile #, object-pascal-format msgid "Cannot copy special file %s" msgstr "Немагчыма скапіяваць адмысловы файл %s" #: ulng.rsmsgcannotdeletedirectory #, object-pascal-format msgid "Cannot delete directory %s" msgstr "Немагчыма выдаліць каталог %s" #: ulng.rsmsgcannotoverwritedirectory #, object-pascal-format msgid "Cannot overwrite directory \"%s\" with non-directory \"%s\"" msgstr "Немагчыма перазапісаць каталог \"%s\" файлам, што не з'яўляецца каталогам \"%s\"" #: ulng.rsmsgchdirfailed #, object-pascal-format msgid "Change current directory to \"%s\" failed!" msgstr "Не ўдалося перайсці ў каталог \"%s\"!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Выдаліць усе неактыўныя ўкладкі?" #: ulng.rsmsgcloselockedtab #, object-pascal-format msgid "This tab (%s) is locked! Close anyway?" msgstr "Гэтая ўкладка (%s) заблакаваная! Усё адно закрыць?" #: ulng.rsmsgcofirmuserparam msgid "Confirmation of parameter" msgstr "Пацвярджэнне параметра" #: ulng.rsmsgcommandnotfound #, object-pascal-format msgid "Command not found! (%s)" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Сапраўды хочаце выйсці?" #: ulng.rsmsgcopybackward #, object-pascal-format msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Файл \"%s\" зменены. Скапіяваць яго назад?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Не ўдалося скапіяваць назад. Захаваць зменены файл?" #: ulng.rsmsgcpfldr #, object-pascal-format msgid "Copy %d selected files/directories?" msgstr "Скапіяваць %d абраныя файлы/каталогі?" #: ulng.rsmsgcpsel #, object-pascal-format msgid "Copy selected \"%s\"?" msgstr "Скапіяваць абраны \"%s\"?" #: ulng.rsmsgcreateanewfiletype #, object-pascal-format msgid "< Create a new file type \"%s files\" >" msgstr "< Стварыць новы тып файла \"%s файлы\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Увядзіце назву і размяшчэнне файла панэлі інструментаў DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Адвольнае дзеянне" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Выдаліць часткова скапіяваны файл?" #: ulng.rsmsgdelfldr #, object-pascal-format msgid "Delete %d selected files/directories?" msgstr "Выдаліць %d абраныя файлы/каталогі?" #: ulng.rsmsgdelfldrt #, object-pascal-format msgid "Delete %d selected files/directories into trash can?" msgstr "Выдаліць %d абраныя файлы/каталогі ў сметніцу?" #: ulng.rsmsgdelsel #, object-pascal-format msgid "Delete selected \"%s\"?" msgstr "Выдаліць абраны \"%s\"?" #: ulng.rsmsgdelselt #, object-pascal-format msgid "Delete selected \"%s\" into trash can?" msgstr "Выдаліць абраны \"%s\" у сметніцу?" #: ulng.rsmsgdeltotrashforce #, object-pascal-format msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Не ўдалося выдаліць \"%s\" у сметніцу! Выдаліць назаўжды?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Дыск недаступны" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Увядзіце назву адвольнага дзеяння:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Увядзіце пашырэнне файла:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Увядзіце назву:" #: ulng.rsmsgenternewfiletypename #, object-pascal-format msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Увядзіце назву новага тыпу для пашырэння \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Кантрольная сума архіва пашкоджаная" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Хібныя даныя" #: ulng.rsmsgerrcannotconnect #, object-pascal-format msgid "Can not connect to server: \"%s\"" msgstr "Немагчыма злучыцца з серверам: \"%s\"" #: ulng.rsmsgerrcannotcopyfile #, object-pascal-format msgid "Cannot copy file %s to %s" msgstr "Немагчыма скапіяваць файл %s у %s" #: ulng.rsmsgerrcannotmovedirectory #, object-pascal-format msgid "Cannot move directory %s" msgstr "Немагчыма перамясціць каталог %s" #: ulng.rsmsgerrcannotmovefile #, object-pascal-format msgid "Cannot move file %s" msgstr "Немагчыма перамясціць файл %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, object-pascal-format msgid "There already exists a directory named \"%s\"." msgstr "Каталог з назвай \"%s\" ужо існуе." #: ulng.rsmsgerrdatenotsupported #, object-pascal-format msgid "Date %s is not supported" msgstr "Дата %s не падтрымліваецца" #: ulng.rsmsgerrdirexists #, object-pascal-format msgid "Directory %s exists!" msgstr "Каталог %s ужо існуе!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Функцыя скасаваная карыстальнікам" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Падчас закрыцця файла адбылася памылка" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Немагчыма стварыць файл" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "У архіве больш няма файлаў" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Немагчыма адкрыць існы файл" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Падчас чытання файла адбылася памылка" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Падчас запісу ў файл адбылася памылка" #: ulng.rsmsgerrforcedir #, object-pascal-format msgid "Can not create directory %s!" msgstr "Немагчыма стварыць каталог %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Хібная спасылка" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Файлаў не знойдзена" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Не стае памяці" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Функцыя не падтрымліваецца!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Памылка ў кантэкстным меню загаду" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Падчас загрузкі наладаў адбылася памылка" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Памылка сінтаксісу ў рэгулярным выразе!" #: ulng.rsmsgerrrename #, object-pascal-format msgid "Cannot rename file %s to %s" msgstr "Немагчыма змяніць назву файла з \"%s\" на \"%s\"" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Не ўдалося захаваць асацыяцыю!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Немагчыма захаваць файл" #: ulng.rsmsgerrsetattribute #, object-pascal-format msgid "Can not set attributes for \"%s\"" msgstr "Немагчыма прызначыць атрыбуты для \"%s\"" #: ulng.rsmsgerrsetdatetime #, object-pascal-format msgid "Can not set date/time for \"%s\"" msgstr "Немагчыма прызначыць дату/час для '%s\"" #: ulng.rsmsgerrsetownership #, object-pascal-format msgid "Can not set owner/group for \"%s\"" msgstr "Немагчыма прызначыць уладальніка/групу для \"%s\"" #: ulng.rsmsgerrsetpermissions #, object-pascal-format msgid "Can not set permissions for \"%s\"" msgstr "Немагчыма прызначыць дазволы для \"%s\"" #: ulng.rsmsgerrsetxattribute #, object-pascal-format msgid "Can not set extended attributes for \"%s\"" msgstr "Немагчыма прызначыць дадатковыя атрыбуты для \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буфер абмену занадта малы" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Занадта шмат файлаў для архіва" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Невядомы фармат архіва" #: ulng.rsmsgexecutablepath #, object-pascal-format msgid "Executable: %s" msgstr "Шлях: %s" #: ulng.rsmsgexitstatuscode msgid "Exit status:" msgstr "Стан выхаду:" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Сапраўды выдаліць усе аб'екты з вашых \"улюбёных укладак\"? (Адрабіць не ўдасца!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Перацягніце сюды іншыя запісы" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name for this new Favorite Tabs entry:" msgstr "Увядзіце назву гэтых улюбёных укладак:" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Захаванне новых улюбёных укладак" #: ulng.rsmsgfavoritetabsexportedsuccessfully #, object-pascal-format msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Колькасць паспяхова экспартаваных улюбёных укладак: %d з %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Захаваць гісторыю каталогаў для новых улюбёных укладак:" #: ulng.rsmsgfavoritetabsimportedsuccessfully #, object-pascal-format msgid "Number of file(s) imported successfully: %d on %d" msgstr "Колькасць паспяхова імпартаваных укладак: %d on %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Імпартаваныя ўкладкі" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Абярыце файлы .tab для імпарту (можна некалькі запар!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Апошнія змены ўлюбёных укладак яшчэ не захаваліся. Захаваць іх перш, чым працягнуць?" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Захоўваць гісторыю каталогаў для ўлюбёных укладак:" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Назва падменю" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, object-pascal-format msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Загрузяцца ўлюбёныя ўкладкі: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Захаваць бягучыя ўкладкі паверх існых улюбёных укладак" #: ulng.rsmsgfilechangedsave #, object-pascal-format msgid "File %s changed, save?" msgstr "Файл %s быў зменены, захаваць?" #: ulng.rsmsgfileexistsfileinfo #, object-pascal-format msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Перазапісаць:" #: ulng.rsmsgfileexistsrwrt #, object-pascal-format msgid "File %s exists, overwrite?" msgstr "Файл %s ужо існуе, перазапісаць?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "З файлам:" #: ulng.rsmsgfilenotfound #, object-pascal-format msgid "File \"%s\" not found." msgstr "Файл \"%s\" не знойдзены." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Актыўныя файлавыя аперацыі" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Яшчэ выконваюцца аперацыі з файламі. Калі закрыць Double Commander, даныя могуць страціцца." #: ulng.rsmsgfilepathovermaxpath #, object-pascal-format msgid "" "The target name length (%d) is more than %d characters!\n" "%s\n" "Most programs will not be able to access a file/directory with such a long name!" msgstr "" "Даўжыня (%d) перавышае %d сімвалаў!\n" "%s\n" "Большасць праграм не зможа звярнуцца да файла/каталога з такой доўгай назвай!" #: ulng.rsmsgfilereadonly #, object-pascal-format msgid "File %s is marked as read-only/hidden/system. Delete it?" msgstr "Файл %s пазначаны як толькі для чытання/схаваны/сістэмны. Выдаліць яго ?" #: ulng.rsmsgfilereloadwarning msgid "Are you sure you want to reload the current file and lose the changes?" msgstr "Сапраўды хочаце перазагрузіць бягучы файл? Усе змены страцяцца." #: ulng.rsmsgfilesizetoobig #, object-pascal-format msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Памер файла \"%s\" занадта вялікі для файлавай сістэмы!" #: ulng.rsmsgfolderexistsrwrt #, object-pascal-format msgid "Folder %s exists, merge?" msgstr "Каталог %s ужо існуе, аб'яднаць?" #: ulng.rsmsgfollowsymlink #, object-pascal-format msgid "Follow symlink \"%s\"?" msgstr "Выкарыстоўваць спасылку \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Абраць фармат тэксту для імпарту" #: ulng.rsmsghotdiraddselecteddirectories #, object-pascal-format msgid "Add %d selected dirs" msgstr "Дадаць %d абраных каталогаў" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Дадаць абраны каталог: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Дадаць бягучы каталог: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Выканаць загад" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Налады спіса выбраных каталогаў" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Сапраўды выдаліць усе аб'екты з вашых \"выбраных каталогаў\"? (Адрабіць не ўдасца!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Гэта выканае наступны загад:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Гэта выбраны каталог па назве " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Гэта зменіць актыўную панэль па наступным шляху:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "І зменіць неактыўную панэль на наступны шлях:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Падчас стварэння рэзервовай копіі адбылася памылка..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Падчас экспарту адбылася памылка..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Экспартаваць усё!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Экспарт выбраных каталогаў - абярыце аб'екты для экспарту" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Экспартаваць абранае" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Імпартаваць усе!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Імпарт выбраных каталогаў - абярыце аб'екты для імпарту" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Імпартаваць абранае" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "&Path:" msgstr "&Шлях:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Абярыце файл \".hotlist\" для імпарту" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Назва выбранага каталога" #: ulng.rsmsghotdirnbnewentries #, object-pascal-format msgid "Number of new entries: %d" msgstr "Колькасць новых запісаў: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "На экспарт нічога не абрана!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Шлях да выбранага каталога" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Зноў дадаць абраны каталог: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Зноў дадаць бягучы каталог: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Увядзіце размяшчэнне і назву файла выбраных каталогаў для аднаўлення" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Загад:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(канец падменю)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu &name:" msgstr "Назва &меню:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "&Name:" msgstr "&Назва:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(падзяляльнік)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Назва падменю" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Шлях да мэтавага выбранага каталога" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Вызначае парадак сартавання ў актыўнай панэлі пасля змены каталога" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Вызначае парадак сартавання ў неактыўнай панэлі пасля змены каталога" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Некаторыя функцыі выбару шляху: адносны, абсалютны, адмысловыя каталогі windows і г. д." #: ulng.rsmsghotdirtotalbackuped #, object-pascal-format msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s" msgstr "" "Захавана агулам: %d\n" "\n" "Рэзервовая копія: %s" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Экспартавана агулам: " #: ulng.rsmsghotdirwhattodelete #, object-pascal-format msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu." msgstr "" "Хочаце выдаліць усе элементы ў падменю [%s]?\n" "Калі адкажаце \"Не\", то выдаляцца толькі падзяляльнікі, элементы застануцца." #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Абярыце размяшчэнне і назву для захавання файла выбраных каталогаў" #: ulng.rsmsgincorrectfilelength #, object-pascal-format msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Хібная выніковая даўжыня файла : \"%s\"" #: ulng.rsmsginsertnextdisk #, object-pascal-format msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d" msgstr "" "Калі ласка, ўстаўце наступны дыск альбо носьбіт.\n" "\n" "Гэта дазволіць запісаць файл:\n" "\"%s\"\n" "\n" "Колькасць байтаў да канца: %d" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Памылка ў загадным радку" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Хібная назва" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Хібны фармат файла наладаў" #: ulng.rsmsginvalidhexnumber #, object-pascal-format msgid "Invalid hexadecimal number: \"%s\"" msgstr "Хібны шаснаццатковы лік: \"%s\"" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Хібны шлях" #: ulng.rsmsginvalidpathlong #, object-pascal-format msgid "Path %s contains forbidden characters." msgstr "У шляху %s ёсць забароненыя сімвалы." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Хібная ўбудова!" #: ulng.rsmsginvalidpluginarchitecture #, object-pascal-format msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Убудова сабраная для Double Commander для %s.%sЯна не будзе працаваць для %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Хібнае цытаванне" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Хібнае вылучэнне." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Спіс файлаў загружаецца..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Вызначце файл канфігурацыі (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Вызначце выканальны файл (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy #, object-pascal-format msgid "Copy file %s" msgstr "Скапіяваць файл %s" #: ulng.rsmsglogdelete #, object-pascal-format msgid "Delete file %s" msgstr "Выдаліць файл %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Памылка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Запусціць вонкавы загад" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Вынікі вонкавага загаду" #: ulng.rsmsglogextract #, object-pascal-format msgid "Extract file %s" msgstr "Распакаваць файл %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Інфармацыя: " #: ulng.rsmsgloglink #, object-pascal-format msgid "Create link %s" msgstr "Стварыць спасылку %s" #: ulng.rsmsglogmkdir #, object-pascal-format msgid "Create directory %s" msgstr "Стварыць каталог %s" #: ulng.rsmsglogmove #, object-pascal-format msgid "Move file %s" msgstr "Перамясціць файл %s" #: ulng.rsmsglogpack #, object-pascal-format msgid "Pack to file %s" msgstr "Запакаваць у файл %s" #: ulng.rsmsglogprogramshutdown msgid "Program shutdown" msgstr "Выключэнне праграмы" #: ulng.rsmsglogprogramstart msgid "Program start" msgstr "Запуск праграмы" #: ulng.rsmsglogrmdir #, object-pascal-format msgid "Remove directory %s" msgstr "Выдаліць каталог %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Завершана: " #: ulng.rsmsglogsymlink #, object-pascal-format msgid "Create symlink %s" msgstr "Стварыць спасылку %s" #: ulng.rsmsglogtest #, object-pascal-format msgid "Test file integrity %s" msgstr "Праверыць файл %s на цэласнасць" #: ulng.rsmsglogwipe #, object-pascal-format msgid "Wipe file %s" msgstr "Сцерці файл %s" #: ulng.rsmsglogwipedir #, object-pascal-format msgid "Wipe directory %s" msgstr "Сцерці каталог %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Галоўны пароль" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Калі ласка, ўвядзіце галоўны пароль:" #: ulng.rsmsgnewfile msgid "New file" msgstr "Новы файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Наступны том будзе распакаваны" #: ulng.rsmsgnofiles msgid "No files" msgstr "Няма файлаў" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Файлаў не абрана." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "На мэтавым дыску не стае вольнага месца. Працягнуць?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "На мэтавым дыску не стае вольнага месца. Паспрабаваць зноў?" #: ulng.rsmsgnotdelete #, object-pascal-format msgid "Can not delete file %s" msgstr "Немагчыма выдаліць файл %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Не вызначана." #: ulng.rsmsgobjectnotexists msgid "Object does not exist!" msgstr "Аб'ект не існуе!" #: ulng.rsmsgopeninanotherprogram msgid "The action cannot be completed because the file is open in another program:" msgstr "Дзеянне немагчыма выканаць, бо файл адкрыты ў іншай праграме:" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ніжэй знаходзіцца вобласць папярэдняга прагляду. Вы можаце перамяшчаць курсор і вылучаць файлы, каб паспрабаваць абраныя налады." #: ulng.rsmsgpassword msgctxt "ulng.rsmsgpassword" msgid "Password:" msgstr "Пароль:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Паролі адрозніваюцца!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Калі ласка, увядзіце пароль:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Пароль (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Калі ласка, увядзіце пароль яшчэ раз для праверкі:" #: ulng.rsmsgpopuphotdelete #, object-pascal-format msgid "&Delete %s" msgstr "&Выдаліць %s" #: ulng.rsmsgpresetalreadyexists #, object-pascal-format msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" ужо існуе. Перазапісаць?" #: ulng.rsmsgpresetconfigdelete #, object-pascal-format msgid "Are you sure you want to delete preset \"%s\"?" msgstr "Сапраўды хочаце выдаліць перадналады: \"%s\"?" #: ulng.rsmsgproblemexecutingcommand #, object-pascal-format msgid "Problem executing command (%s)" msgstr "Не ўдалося выканаць загад (%s)" #: ulng.rsmsgprocessid #, object-pascal-format msgid "PID: %d" msgstr "PID: %d" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Назва файла для тэксту, які перацягваецца:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Калі ласка, зрабіце файл даступным. Паўтарыць?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Увядзіце новую прыемную назву для гэтых улюбёных укладак" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Увядзіце новую назву гэтага меню" #: ulng.rsmsgrenfldr #, object-pascal-format msgid "Rename/move %d selected files/directories?" msgstr "Змяніць назву/перамясціць %d абраныя файлы/каталогі?" #: ulng.rsmsgrensel #, object-pascal-format msgid "Rename/move selected \"%s\"?" msgstr "Змяніць назву/перамясціць абраны \"%s\"?" #: ulng.rsmsgreplacethistext msgid "Do you want to replace this text?" msgstr "Замяніць гэты тэкст?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Калі ласка, перазапусціце Double Commander, каб ужыць змены" #: ulng.rsmsgscriptcantfindlibrary #, object-pascal-format msgid "ERROR: Problem loading Lua library file \"%s\"" msgstr "ПАМЫЛКА: не ўдалося загрузіць бібліятэку Lua \"%s\"" #: ulng.rsmsgsekectfiletype #, object-pascal-format msgid "Select to which file type to add extension \"%s\"" msgstr "Абярыце тып файла, каб дадаць пашырэнне \"%s\"" #: ulng.rsmsgselectedinfo #, object-pascal-format msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Абрана: %s з %s, файлаў: %d з %d, каталогаў: %d з %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Абярыце выканальны файл для" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Калі ласка, абірайце толькі файлы кантрольнай сумы!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Калі ласка, абярыце размяшчэнне наступнага раздзелу" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Прызначыць тому адмеціну" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Адмысловыя каталогі" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Дадаць шлях з актыўнай панэлі" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Дадаць шлях з неактыўнай панэлі" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Праглядзець і выкарыстаць абраны шлях" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Выкарыстоўваць зменную асяроддзя..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Каталог Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Зменная асяроддзя..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Адмысловы каталог Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Адмысловы каталог Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Зрабіць адносным шляху выбраных каталогаў" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Зрабіць шлях абсалютным" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Зрабіць адносным шляху да адмысловага каталога Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Зрабіць адноснай зменнай асяроддзя..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Зрабіць адноснай адмысловаму каталогу Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Зрабіць адноснай адмысловаму каталогу Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Выкарыстаць адмысловыя шляхі Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Выкарыстаць шлях выбраных каталогаў" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Выкарыстаць іншы адмысловы каталог Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Выкарыстаць адмысловы каталог Windows(TC)..." #: ulng.rsmsgtabforopeninginnewtab #, object-pascal-format msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Гэтая ўкладка (%s) заблакаваная! Адкрыць каталог у іншай укладцы?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Змяніць назву ўкладкі" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Новая назва ўкладкі:" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Мэтавы шлях:" #: ulng.rsmsgtcconfignotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration file:\n" "%s" msgstr "" "Памылка! Не ўдалося знайсці файл канфігурацыі ТС:\n" " %s" #: ulng.rsmsgtcexecutablenotfound #, object-pascal-format msgid "" "Error! Cannot find the TC configuration executable:\n" "%s" msgstr "" "Памылка! Не ўдалося знайсці выканальны файл ТС:\n" " %s" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort." msgstr "" "Памылка! ТС яшчэ запушчаны, а для выканання гэтай аперацыі яго неабходна закрыць.\n" "Закрыйце і націсніце \"Добра\" альбо націсніце \"Скасаваць\"." #: ulng.rsmsgtctoolbarnotfound #, object-pascal-format msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s" msgstr "" "Памылка! Не ўдалося знайсці каталог панэлі інструментаў TC:\n" "%s" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Увядзіце назву і шлях да захаванага файла панэлі інструментаў TC" #: ulng.rsmsgterminaldisabled msgid "Built-in terminal window disabled. Do you want to enable it?" msgstr "Убудаванае акно тэрмінала адключана. Хочаце ўключыць яго?" #: ulng.rsmsgterminateprocess msgid "WARNING: Terminating a process can cause undesired results including loss of data and system instability. The process will not be given the chance to save its state or data before it is terminated. Are you sure you want to terminate the process?" msgstr "УВАГА! Завяршэнне працэсу можа прывесці да нечаканых вынікаў кшталту страты даных альбо збояў у працы сістэмы. Хочаце завяршыць працэс?" #: ulng.rsmsgtestarchive msgid "Do you want to test selected archives?" msgstr "Хочаце правесці тэставанне абраных архіваў?" #: ulng.rsmsgthisisnowinclipboard #, object-pascal-format msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" знаходзіцца ў буферы абмену" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Пашырэнне абранага файла не адпавядае ніводнаму з вядомых тыпаў файлаў" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Вызначце файл \".toolbar\" для імпарту" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Вызначце файл \".BAR\" для імпарту" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Увядзіце размяшчэнне і назву файла панэлі інструментаў для аднаўлення" #: ulng.rsmsgtoolbarsaved #, object-pascal-format msgid "" "Saved!\n" "Toolbar filename: %s" msgstr "" "Захавана!\n" "Назва файла панэлі інструментаў: %s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Занадта шмат файлаў." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Нявызначаны" #: ulng.rsmsgunexpectedusagetreeviewmenu msgid "ERROR: Unexpected Tree View Menu usage!" msgstr "ПАМЫЛКА: Нечаканае выкарыстанне меню!" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "< БЕЗ ПАШЫРЭННЯ>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<БЕЗ НАЗВЫ>" #: ulng.rsmsgusername msgctxt "ulng.rsmsgusername" msgid "User name:" msgstr "Імя карыстальніка:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Імя карыстальніка (Firewall):" #: ulng.rsmsgverify msgid "VERIFICATION:" msgstr "ПРАВЕРКА:" #: ulng.rsmsgverifychecksum msgid "Do you want to verify selected checksums?" msgstr "Праверыць абраныя кантрольныя сумы?" #: ulng.rsmsgverifywrong msgid "The target file is corrupted, checksum mismatch!" msgstr "Мэтавы файл пашкоджаныя, кантрольная сума не супадае!" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Адмеціна раздзелу:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Калі ласка, увядзіце памер раздзелу:" #: ulng.rsmsgwanttoconfigurelibrarylocation msgid "Do you want to configure Lua library location?" msgstr "Хочаце наладзіць размяшчэнне бібліятэкі Lua?" #: ulng.rsmsgwipefldr #, object-pascal-format msgid "Wipe %d selected files/directories?" msgstr "Сцерці %d абраныя файлы/каталогі?" #: ulng.rsmsgwipesel #, object-pascal-format msgid "Wipe selected \"%s\"?" msgstr "Сцерці абраны \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "з" #: ulng.rsmsgwrongpasswordtryagain msgid "" "Wrong password!\n" "Please try again!" msgstr "" "Хібны пароль!\n" "Калі ласка, паспрабуйце яшчэ!" #: ulng.rsmulrenautorename msgid "Do auto-rename to \"name (1).ext\", \"name (2).ext\" etc.?" msgstr "Аўтаматычна змяняць назву на \"name (1).ext\", \"name (2).ext\" і г.д.?" #: ulng.rsmulrencounter msgctxt "ulng.rsmulrencounter" msgid "Counter" msgstr "Лічыльнік" #: ulng.rsmulrendate msgctxt "ulng.rsmulrendate" msgid "Date" msgstr "Дата" #: ulng.rsmulrendefaultpresetname msgid "Preset name" msgstr "Назва перадналадаў" #: ulng.rsmulrendefinevariablename msgid "Define variable name" msgstr "Назва зменнай" #: ulng.rsmulrendefinevariablevalue msgid "Define variable value" msgstr "Значэнне зменнай" #: ulng.rsmulrenenternameforvar msgid "Enter variable name" msgstr "Увядзіце назву зменнай" #: ulng.rsmulrenentervalueforvar #, object-pascal-format msgid "Enter value for variable \"%s\"" msgstr "Увядзіце назву зменнай \"%s\"" #: ulng.rsmulrenexitmodifiedpresetoptions msgid "Ignore, just save as the [Last One];Prompt user to confirm if we save it;Save automatically" msgstr "Не зважаць, захаваць як [апошні]; Запытаць пацвярджэння захавання; Захаваць аўтаматычна" #: ulng.rsmulrenextension msgctxt "ulng.rsmulrenextension" msgid "Extension" msgstr "Пашырэнне" #: ulng.rsmulrenfilename msgctxt "ulng.rsmulrenfilename" msgid "Name" msgstr "Назва" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без змен;ВЕРХНІ РЭГІСТР;ніжні рэгістр;З вялікай;Кожнае Слова З Вялікай;" #: ulng.rsmulrenlastpreset msgid "[The last used]" msgstr "[Апошнія выкарыстаныя]" #: ulng.rsmulrenlaunchbehavioroptions msgid "Last masks under [Last One] preset;Last preset;New fresh masks" msgstr "Апошнія маскі [апошніх перадналадаў]; Апошнія перадналады; Новыя свежыя маскі" #: ulng.rsmulrenlogstart msgctxt "ulng.rsmulrenlogstart" msgid "Multi-Rename Tool" msgstr "Масавая змена назвы" #: ulng.rsmulrenmaskcharatposx msgid "Character at position x" msgstr "Сімвал з пазіцыі x" #: ulng.rsmulrenmaskcharatposxtoy msgid "Characters from position x to y" msgstr "Сімвалы ад пазіцыі x да y" #: ulng.rsmulrenmaskcompletedate msgid "Complete date" msgstr "Поўная дата" #: ulng.rsmulrenmaskcompletetime msgid "Complete time" msgstr "Поўны час" #: ulng.rsmulrenmaskcounter msgctxt "ulng.rsmulrenmaskcounter" msgid "Counter" msgstr "Лічыльнік" #: ulng.rsmulrenmaskday msgid "Day" msgstr "Дзень" #: ulng.rsmulrenmaskday2digits msgid "Day (2 digits)" msgstr "Дзень (2 лічбы)" #: ulng.rsmulrenmaskdowabrev msgid "Day of the week (short, e.g., \"mon\")" msgstr "Дзень тыдня (скарочана,напрыклад, \"пн\")" #: ulng.rsmulrenmaskdowcomplete msgid "Day of the week (long, e.g., \"monday\")" msgstr "Дзень тыдня (поўная назва, напрыклад \"панядзелак\")" #: ulng.rsmulrenmaskextension msgctxt "ulng.rsmulrenmaskextension" msgid "Extension" msgstr "Пашырэнне" #: ulng.rsmulrenmaskfullname msgid "Complete filename with path and extension" msgstr "Поўная назва са шляхам і пашырэннем" #: ulng.rsmulrenmaskfullnamecharatposxtoy msgid "Complete filename, char from pos x to y" msgstr "Поўная назва, сімвалы ад х да у" #: ulng.rsmulrenmaskguid msgid "GUID" msgstr "GUID" #: ulng.rsmulrenmaskhour msgid "Hour" msgstr "Гадзіна" #: ulng.rsmulrenmaskhour2digits msgid "Hour (2 digits)" msgstr "Гадзіна (2 лічбы)" #: ulng.rsmulrenmaskmin msgid "Minute" msgstr "Хвіліна" #: ulng.rsmulrenmaskmin2digits msgid "Minute (2 digits)" msgstr "Хвіліна (2 лічбы)" #: ulng.rsmulrenmaskmonth msgid "Month" msgstr "Месяц" #: ulng.rsmulrenmaskmonth2digits msgid "Month (2 digits)" msgstr "Месяц (2 лічбы)" #: ulng.rsmulrenmaskmonthabrev msgid "Month name (short, e.g., \"jan\")" msgstr "Назва месяца (скарочаная, напрыклад \"стдз\")" #: ulng.rsmulrenmaskmonthcomplete msgid "Month name (long, e.g., \"january\")" msgstr "Назва месяца (поўная, напрыклад, \"студзень\")" #: ulng.rsmulrenmaskname msgctxt "ulng.rsmulrenmaskname" msgid "Name" msgstr "Назва" #: ulng.rsmulrenmaskparent msgid "Parent folder(s)" msgstr "Бацькоўскі каталог(і)" #: ulng.rsmulrenmasksec msgid "Second" msgstr "Секунда" #: ulng.rsmulrenmasksec2digits msgid "Second (2 digits)" msgstr "Секунда (2 лічбы)" #: ulng.rsmulrenmaskvaronthefly msgid "Variable on the fly" msgstr "Зменная ў працэсе" #: ulng.rsmulrenmaskyear2digits msgid "Year (2 digits)" msgstr "Год (2 лічбы)" #: ulng.rsmulrenmaskyear4digits msgid "Year (4 digits)" msgstr "Год (4 лічбы)" #: ulng.rsmulrenplugins msgctxt "ulng.rsmulrenplugins" msgid "Plugins" msgstr "Убудовы" #: ulng.rsmulrenpromptforsavedpresetname msgid "Save preset as" msgstr "Захаваць перадналады як" #: ulng.rsmulrenpromptnewnameexists msgid "Preset name already exists. Overwrite?" msgstr "Перадналады ўжо існуюць. Перазапісаць?" #: ulng.rsmulrenpromptnewpresetname msgid "Enter new preset name" msgstr "Увядзіце новую назву перадналадаў" #: ulng.rsmulrensavemodifiedpreset #, object-pascal-format msgid "" "\"%s\" preset has been modified.\n" "Do you want to save it now?" msgstr "" "Перадналады \"%s\" былі змененыя.\n" "Хочаце захаваць?" #: ulng.rsmulrensortingpresets msgid "Sorting presets" msgstr "Сартаванне перадналадаў" #: ulng.rsmulrentime msgctxt "ulng.rsmulrentime" msgid "Time" msgstr "Час" #: ulng.rsmulrenwarningduplicate msgid "Warning, duplicate names!" msgstr "Увага, назвы дублюцца!" #: ulng.rsmulrenwronglinesnumber #, object-pascal-format msgid "File contains wrong number of lines: %d, should be %d!" msgstr "Файл змяшчае хібную колькасць радкоў: %d, мусіць быць %d!" #: ulng.rsnewsearchclearfilteroptions msgid "Keep;Clear;Prompt" msgstr "Пакінуць;Ачысціць;Спытаць" #: ulng.rsnoequivalentinternalcommand msgid "No internal equivalent command" msgstr "Адпаведны ўнутраны загад адсутнічае" #: ulng.rsnofindfileswindowyet msgid "Sorry, no \"Find files\" window yet..." msgstr "Выбачайце, вокны пошуку файлаў адсутнічаюць..." #: ulng.rsnootherfindfileswindowtoclose msgid "Sorry, no other \"Find files\" window to close and free from memory..." msgstr "Выбачайце, іншыя вокны пошуку файлаў адсутнічаюць..." #: ulng.rsopenwithdevelopment msgid "Development" msgstr "Распрацоўка" #: ulng.rsopenwitheducation msgid "Education" msgstr "Адукацыя" #: ulng.rsopenwithgames msgid "Games" msgstr "Гульні" #: ulng.rsopenwithgraphics msgctxt "ulng.rsopenwithgraphics" msgid "Graphics" msgstr "Графіка" #: ulng.rsopenwithmacosfilter msgid "Applications (*.app)|*.app|All files (*)|*" msgstr "" #: ulng.rsopenwithmultimedia msgid "Multimedia" msgstr "Медыя" #: ulng.rsopenwithnetwork msgctxt "ulng.rsopenwithnetwork" msgid "Network" msgstr "Сетка" #: ulng.rsopenwithoffice msgid "Office" msgstr "Офіс" #: ulng.rsopenwithother msgctxt "ulng.rsopenwithother" msgid "Other" msgstr "Іншае" #: ulng.rsopenwithscience msgid "Science" msgstr "Навука" #: ulng.rsopenwithsettings msgid "Settings" msgstr "Налады" #: ulng.rsopenwithsystem msgctxt "ulng.rsopenwithsystem" msgid "System" msgstr "Сістэма" #: ulng.rsopenwithutility msgid "Accessories" msgstr "Інструменты" #: ulng.rsoperaborted msgid "Aborted" msgstr "Скасавана" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Падлік кантрольнай сумы" #: ulng.rsopercalculatingchecksumin #, object-pascal-format msgid "Calculating checksum in \"%s\"" msgstr "Падлік кантрольнай сумы ў \"%s\"" #: ulng.rsopercalculatingchecksumof #, object-pascal-format msgid "Calculating checksum of \"%s\"" msgstr "Падлік кантрольнай сумы '\"%s\"" #: ulng.rsopercalculatingstatictics msgid "Calculating" msgstr "Падлік" #: ulng.rsopercalculatingstatisticsin #, object-pascal-format msgid "Calculating \"%s\"" msgstr "Падлік \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Аб'яднанне" #: ulng.rsopercombiningfromto #, object-pascal-format msgid "Joining files in \"%s\" to \"%s\"" msgstr "Аб'яднанне файлаў \"%s\" у \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Капіяванне" #: ulng.rsopercopyingfromto #, object-pascal-format msgid "Copying from \"%s\" to \"%s\"" msgstr "Капіяванне з \"%s\" у \"%s\"" #: ulng.rsopercopyingsomethingto #, object-pascal-format msgid "Copying \"%s\" to \"%s\"" msgstr "Капіяванне \"%s\" у \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Стварэнне каталога" #: ulng.rsopercreatingsomedirectory #, object-pascal-format msgid "Creating directory \"%s\"" msgstr "Стварэнне каталога \"%s\"" #: ulng.rsoperdeleting msgid "Deleting" msgstr "Выдаленне" #: ulng.rsoperdeletingin #, object-pascal-format msgid "Deleting in \"%s\"" msgstr "Выдаленне ў \"%s\"" #: ulng.rsoperdeletingsomething #, object-pascal-format msgid "Deleting \"%s\"" msgstr "Выдаленне \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Выкананне" #: ulng.rsoperexecutingsomething #, object-pascal-format msgid "Executing \"%s\"" msgstr "Выкананне \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Выманне" #: ulng.rsoperextractingfromto #, object-pascal-format msgid "Extracting from \"%s\" to \"%s\"" msgstr "Выманне з \"%s\" у \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершана" #: ulng.rsoperlisting msgid "Listing" msgstr "Спіс" #: ulng.rsoperlistingin #, object-pascal-format msgid "Listing \"%s\"" msgstr "Спіс \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Перамяшчэнне" #: ulng.rsopermovingfromto #, object-pascal-format msgid "Moving from \"%s\" to \"%s\"" msgstr "Перамяшчэнне з \"%s\" у \"%s\"" #: ulng.rsopermovingsomethingto #, object-pascal-format msgid "Moving \"%s\" to \"%s\"" msgstr "Перамяшчэнне \"%s\" у \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запушчана" #: ulng.rsoperpacking msgid "Packing" msgstr "Запакоўванне" #: ulng.rsoperpackingfromto #, object-pascal-format msgid "Packing from \"%s\" to \"%s\"" msgstr "Запакоўванне з \"%s\" у \"%s\"" #: ulng.rsoperpackingsomethingto #, object-pascal-format msgid "Packing \"%s\" to \"%s\"" msgstr "Запакоўванне \"%s\" у '%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Прыпынена" #: ulng.rsoperpausing msgid "Pausing" msgstr "Прыпыненне" #: ulng.rsoperrunning msgid "Running" msgstr "Выконваецца" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Вызначэнне ўласцівасці" #: ulng.rsopersettingpropertyin #, object-pascal-format msgid "Setting property in \"%s\"" msgstr "Вызначэнне ўласцівасці ў \"%s\"" #: ulng.rsopersettingpropertyof #, object-pascal-format msgid "Setting property of \"%s\"" msgstr "Вызначэнне ўласцівасці з \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Падзел" #: ulng.rsopersplittingfromto #, object-pascal-format msgid "Splitting \"%s\" to \"%s\"" msgstr "Падзел \"%s\" у \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Запуск" #: ulng.rsoperstopped msgid "Stopped" msgstr "Спынена" #: ulng.rsoperstopping msgid "Stopping" msgstr "Спыненне" #: ulng.rsopertesting msgid "Testing" msgstr "Праверка" #: ulng.rsopertestingin #, object-pascal-format msgid "Testing in \"%s\"" msgstr "Правяранне \"%s\"" #: ulng.rsopertestingsomething #, object-pascal-format msgid "Testing \"%s\"" msgstr "Правяранне \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Правяранне кантрольнай сумы" #: ulng.rsoperverifyingchecksumin #, object-pascal-format msgid "Verifying checksum in \"%s\"" msgstr "Правяранне кантрольнай сумы ў \"%s\"" #: ulng.rsoperverifyingchecksumof #, object-pascal-format msgid "Verifying checksum of \"%s\"" msgstr "Правяранне кантрольнай сумы з \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Чаканне доступу да зыходнага файла" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Чаканне адказу ад карыстальніка" #: ulng.rsoperwiping msgid "Wiping" msgstr "Сціранне" #: ulng.rsoperwipingin #, object-pascal-format msgid "Wiping in \"%s\"" msgstr "Сціранне ў \"%s\"" #: ulng.rsoperwipingsomething #, object-pascal-format msgid "Wiping \"%s\"" msgstr "Сціранне \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Працуе" #: ulng.rsoptaddfrommainpanel msgid "Add at &beginning;Add at the end;Smart add" msgstr "Дадаць у &пачатак; Дадаць у канец; Разумнае даданне" #: ulng.rsoptaddingtooltipfiletype msgid "Adding new tooltip file type" msgstr "Даданне тыпу файлаў падказак" #: ulng.rsoptarchiveconfiguresavetochange msgid "To change current editing archive configuration, either APPLY or DELETE current editing one" msgstr "Каб змяніць бягучую канфігурацыю архіватара, націсніце \"УЖЫЦЬ\", ці \"ВЫДАЛІЦЬ\" для выдалення" #: ulng.rsoptarchiveradditonalcmd msgid "Mode dependent, additional command" msgstr "Залежыць ад рэжыму, дадатковыя загады" #: ulng.rsoptarchiveraddonlynotempty msgid "Add if it is non-empty" msgstr "Дадаць, калі не пусты" #: ulng.rsoptarchiverarchivel msgid "Archive File (long name)" msgstr "Доўгая назва архіва" #: ulng.rsoptarchiverarchiver msgid "Select archiver executable" msgstr "Абраць выканальны файл" #: ulng.rsoptarchiverarchives msgid "Archive file (short name)" msgstr "Кароткая назва архіва" #: ulng.rsoptarchiverchangeencoding msgid "Change Archiver Listing Encoding" msgstr "Змяніць выходнае кадаванне" #: ulng.rsoptarchiverconfirmdelete #, object-pascal-format msgctxt "ulng.rsoptarchiverconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Сапраўды хочаце выдаліць: \"%s\"?" #: ulng.rsoptarchiverdefaultexportfilename msgid "Exported Archiver Configuration" msgstr "Экспартаваная канфігурацыя архіватара" #: ulng.rsoptarchivererrorlevel msgid "errorlevel" msgstr "errorlevel" #: ulng.rsoptarchiverexportcaption msgid "Export archiver configuration" msgstr "Экспарт канфігурацыі архіватара" #: ulng.rsoptarchiverexportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Экспарт %d элементаў у \"%s\" выкананы." #: ulng.rsoptarchiverexportprompt msgctxt "ulng.rsoptarchiverexportprompt" msgid "Select the one(s) you want to export" msgstr "Абраць архіватары для экспарту" #: ulng.rsoptarchiverfilelistl msgid "Filelist (long names)" msgstr "Спіс файлаў (доўгія назвы)" #: ulng.rsoptarchiverfilelists msgid "Filelist (short names)" msgstr "Спіс файлаў (кароткія назвы)" #: ulng.rsoptarchiverimportcaption msgid "Import archiver configuration" msgstr "Імпарт канфігурацыі архіватара" #: ulng.rsoptarchiverimportdone #, object-pascal-format msgctxt "ulng.rsoptarchiverimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Імпарт %d элементаў з \"%s\" выкананы." #: ulng.rsoptarchiverimportfile msgid "Select the file to import archiver configuration(s)" msgstr "Абраць файл для імпарту канфігурацыі архіватараў" #: ulng.rsoptarchiverimportprompt msgctxt "ulng.rsoptarchiverimportprompt" msgid "Select the one(s) you want to import" msgstr "Абраць архіватары для імпарту" #: ulng.rsoptarchiverjustname msgid "Use name only, without path" msgstr "Выкарыстоўваць толькі назву, без шляху" #: ulng.rsoptarchiverjustpath msgid "Use path only, without name" msgstr "Выкарыстоўваць толькі шлях, без назвы" #: ulng.rsoptarchiverprograml msgid "Archive Program (long name)" msgstr "Архіватар (доўгая назва)" #: ulng.rsoptarchiverprograms msgid "Archive Program (short name)" msgstr "Архіватар (кароткая назва)" #: ulng.rsoptarchiverquoteall msgid "Quote all names" msgstr "Браць усе назвы ў двукоссі" #: ulng.rsoptarchiverquotewithspace msgid "Quote names with spaces" msgstr "Браць у двукоссі назвы з прагаламі" #: ulng.rsoptarchiversinglefprocess msgid "Single filename to process" msgstr "Назва аднаго файла для апрацоўкі" #: ulng.rsoptarchivertargetsubdir msgid "Target subdirecory" msgstr "Мэтавы падкаталог" #: ulng.rsoptarchiveruseansi msgid "Use ANSI encoding" msgstr "Выкарыстоўваць кадаванне ANSI" #: ulng.rsoptarchiveruseutf8 msgid "Use UTF8 encoding" msgstr "Выкарыстоўваць кадаванне utf8" #: ulng.rsoptarchiverwheretosave msgid "Enter location and filename where to save archiver configuration" msgstr "Пазначце размяшчэнне і назву файла для захавання канфігурацыі архіватара" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Назва тыпу архіва:" #: ulng.rsoptassocpluginwith #, object-pascal-format msgid "Associate plugin \"%s\" with:" msgstr "Звязаць убудову \"%s\" з:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Першае;Апошняе;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Класічна; Па алфавіце (мова першая)" #: ulng.rsoptconfigtreestate msgid "Full expand;Full collapse" msgstr "Разгарнуць усё; Згарнуць усё" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Актыўная панэль злева, неактыўная справа;Левая панэль злева, правая справа" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Увядзіце пашырэнне" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Дадаць у пачатак; Дадаць у канец; Па алфавіце" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "асобнае акно;згарнуць асобнае акно;панэль аперацый" #: ulng.rsoptfilesizefloat msgid "float" msgstr "плавальны" #: ulng.rsopthotkeysadddeleteshortcutlong #, object-pascal-format msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Спалучэнне %s для cm_Delete будзе зарэгістравана, таму яго можна выкарыстаць адваротна гэтаму параметру." #: ulng.rsopthotkeysaddhotkey #, object-pascal-format msgid "Add hotkey for %s" msgstr "Дадаць гарачую клавішу для %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Дадаць спалучэнне" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Немагчыма вызначыць спалучэнне" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Змяніць спалучэнне" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Загад" #: ulng.rsopthotkeysdeletetrashcanoverrides #, object-pascal-format msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "У спалучэнні %s для cm_Delete ёсць параметр, які супярэчыць наладам. Змяніць параметр для выкарыстання глабальна?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, object-pascal-format msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "У спалучэнні %s для cm_Delete неабходна змяніць параметр, што адпавядае %s. Хочаце змяніць?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Апісанне" #: ulng.rsopthotkeysedithotkey #, object-pascal-format msgid "Edit hotkey for %s" msgstr "Рэдагаваць гарачую клавішу для %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Нязменны параметр" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Гарачая клавіша" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Гарачыя клавішы" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<няма>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Параметры" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Прызначыць спалучэнне для выдалення файла" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, object-pascal-format msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Каб гэты параметр працаваў са спалучэннем %s, спалучэнне %s неабходна прызначыць на cm_Delete, але яно ўжо выкарыстоўваецца %s. Хочаце змяніць?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, object-pascal-format msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Спалучэнне %s для cm_Delete - спалучэнне клавіш, для якога немагчыма прызначыць рэверсіўную клавішу Shift. Можа не працаваць." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Спалучэнне ўжо выкарыстоўваецца" #: ulng.rsopthotkeysshortcutusedtext1 #, object-pascal-format msgid "Shortcut %s is already used." msgstr "Спалучэнне %s ужо выкарыстоўваецца." #: ulng.rsopthotkeysshortcutusedtext2 #, object-pascal-format msgid "Change it to %s?" msgstr "Змяніць на %s?" #: ulng.rsopthotkeysusedby #, object-pascal-format msgid "used for %s in %s" msgstr "выкарыстоўваецца для %s у %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "ужо выкарыстоўваецца для гэтага загаду з іншымі параметрамі" #: ulng.rsoptionseditorarchivers msgid "Archivers" msgstr "Архіватары" #: ulng.rsoptionseditorautorefresh msgid "Auto refresh" msgstr "Аўтаабнаўленне" #: ulng.rsoptionseditorbehavior msgid "Behaviors" msgstr "Паводзіны" #: ulng.rsoptionseditorbriefview msgid "Brief" msgstr "Сціслы выгляд" #: ulng.rsoptionseditorcolors msgid "Colors" msgstr "Колеры" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Слупкі" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Канфігурацыя" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Адвольныя слупкі" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Спіс выбраных каталогаў" #: ulng.rsoptionseditordirectoryhotlistextra msgid "Directory Hotlist Extra" msgstr "Выбраныя каталогі (дадаткова)" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "&Перацягванні" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Спіс кнопак дыскаў" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Улюбёныя ўкладкі" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Дадатковыя асацыяцыі файлаў" #: ulng.rsoptionseditorfileassoc msgid "File associations" msgstr "Асацыяцыі файлаў" #: ulng.rsoptionseditorfilenewfiletypes msgctxt "ulng.rsoptionseditorfilenewfiletypes" msgid "New" msgstr "Новы" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Файлавыя аперацыі" #: ulng.rsoptionseditorfilepanels msgid "File panels" msgstr "Файлавыя панэлі" #: ulng.rsoptionseditorfilesearch msgctxt "ulng.rsoptionseditorfilesearch" msgid "File search" msgstr "Пошук файлаў" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Адлюстраванне файлаў" #: ulng.rsoptionseditorfilesviewscomplement msgid "Files views extra" msgstr "Выгляд файлаў (дадаткова)" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Тыпы файлаў" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Укладкі каталогаў" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Дадатковыя ўкладкі каталогаў" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрыфты" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Падсвятленне" #: ulng.rsoptionseditorhotkeys msgid "Hot keys" msgstr "Гарачыя клавішы" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Значкі" #: ulng.rsoptionseditorignorelist msgid "Ignore list" msgstr "Спіс выключэнняў" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Ключы" #: ulng.rsoptionseditorlanguage msgid "Language" msgstr "Мова" #: ulng.rsoptionseditorlayout msgid "Layout" msgstr "Выгляд" #: ulng.rsoptionseditorlog msgid "Log" msgstr "Журнал" #: ulng.rsoptionseditormiscellaneous msgid "Miscellaneous" msgstr "Рознае" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Мыш" #: ulng.rsoptionseditormultirename msgctxt "ulng.rsoptionseditormultirename" msgid "Multi-Rename Tool" msgstr "Масавая змена назвы" #: ulng.rsoptionseditoroptionschanged #, object-pascal-format msgid "" "Options have changed in \"%s\"\n" "\n" "Do you want to save modifications?" msgstr "" "Параметры \"%s\" змяніліся.\n" "\n" "Захаваць змены?" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Убудовы" #: ulng.rsoptionseditorquicksearch msgid "Quick search/filter" msgstr "Хуткі пошук/фільтраванне" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Тэрмінал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Панэль інструментаў" #: ulng.rsoptionseditortoolbarextra msgid "Toolbar Extra" msgstr "Панэль інструментаў (дадаткова)" #: ulng.rsoptionseditortoolbarmiddle msgid "Toolbar Middle" msgstr "Цэнтральная панэль інструментаў" #: ulng.rsoptionseditortools msgid "Tools" msgstr "Інструменты" #: ulng.rsoptionseditortooltips msgid "Tooltips" msgstr "Падказкі" #: ulng.rsoptionseditortreeviewmenu msgctxt "ulng.rsoptionseditortreeviewmenu" msgid "Tree View Menu" msgstr "Меню ў выглядзе дрэва" #: ulng.rsoptionseditortreeviewmenucolors msgid "Tree View Menu Colors" msgstr "Колеры меню ў выглядзе дрэва" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Нічога;Загадны радок;Хуткі пошук;Хуткае фільтраванне" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Левая кнопка;Правая кнопка;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "уверсе спіса файлаў; пасля каталогаў (калі каталогі адсартаваныя перад файламі); на адсартаванай пазіцыі; унізе спіса файлаў" #: ulng.rsoptpersonalizedfilesizeformat msgid "Personalized float;Personalized byte;Personalized kilobyte;Personalized megabyte;Personalized gigabyte;Personalized terabyte" msgstr "Выплыўны (асабістае); Байты (асабістае); Кілабайты (асабістае); Мегабайты (асабістае); Гігабайты (асабістае); Тэрабайты (асабістае)" #: ulng.rsoptpluginalreadyassigned #, object-pascal-format msgid "Plugin %s is already assigned for the following extensions:" msgstr "Убудова %s ужо ўхваленая для наступных пашырэнняў:" #: ulng.rsoptplugindisable msgid "D&isable" msgstr "Выключыць" #: ulng.rsoptpluginenable msgctxt "ulng.rsoptpluginenable" msgid "E&nable" msgstr "Ук&лючыць" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Актыўна" #: ulng.rsoptpluginsdescription msgctxt "ulng.rsoptpluginsdescription" msgid "Description" msgstr "Апісанне" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Назва файла" #: ulng.rsoptpluginshowbyextension msgid "By extension" msgstr "Па пашырэнні" #: ulng.rsoptpluginshowbyplugin msgid "By Plugin" msgstr "Па ўбудове" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Назва" #: ulng.rsoptpluginsortonlywhenbyextension msgid "Sorting WCX plugins is only possible when showing plugins by extension!" msgstr "Сартаваць убудовы WCX магчыма толькі, калі ўбудовы паказваюцца па пашырэнні!" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Зарэгістравана на" #: ulng.rsoptpluginsselectlualibrary msgid "Select Lua library file" msgstr "Абярыце бібліятэку Lua" #: ulng.rsoptrenamingtooltipfiletype msgid "Renaming tooltip file type" msgstr "Змена назваў тыпаў файлаў" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Адчувальны;&Неадчувальны" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файлы;Ка&талогі;Файлы і& Каталогі" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Хаваць панэль фільтра, калі тая не ў фокусе; захоўваць налады, змененыя праз панэль" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "неадчувальны да рэгістра;адпаведна лакальным наладам (аАбБгГ);спачатку верхні рэгістр, пасля ніжні (АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "парадкаваць па назве і паказваць першымі;парадкаваць як файлы і паказваць першымі;парадкаваць як файлы" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Alphabetical with special characters sort;Natural sorting: alphabetical and numbers;Natural with special characters sort" msgstr "Па алфавіце з улікам моўных асаблівасцей; Па алфавіце з улікам адмысловых сімвалаў; Натуральнае сартаванне па літарах і лічбах; Натуральнае сартаванне з улікам адмысловых сімвалаў" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Верх;Ніз;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Падзяляльнік;&унутраны загад;&вонкавы загад;&меню" #: ulng.rsopttooltipconfiguresavetochange msgid "To change file type tooltip configuration, either APPLY or DELETE current editing one" msgstr "Каб змяніць бягучую канфігурацыю выплыўных падказак, націсніце \"УЖЫЦЬ\", ці \"ВЫДАЛІЦЬ\" для выдалення" #: ulng.rsopttooltipfiletype msgid "Tooltip file type name:" msgstr "&Назва катэгорыі:" #: ulng.rsopttooltipfiletypealreadyexists #, object-pascal-format msgid "\"%s\" already exists!" msgstr "\"%s\" ужо існуе!" #: ulng.rsopttooltipfiletypeconfirmdelete #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeconfirmdelete" msgid "Are you sure you want to delete: \"%s\"?" msgstr "Сапраўды хочаце выдаліць: \"%s\"?" #: ulng.rsopttooltipfiletypedefaultexportfilename msgid "Exported tooltip file type configuration" msgstr "Экспартаваная канфігурацыя выплыўных падказак" #: ulng.rsopttooltipfiletypeexportcaption msgid "Export tooltip file type configuration" msgstr "Экспарт канфігурацыі выплыўных падказак" #: ulng.rsopttooltipfiletypeexportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeexportdone" msgid "Exportation of %d elements to file \"%s\" completed." msgstr "Экспарт %d элементаў у \"%s\" выкананы." #: ulng.rsopttooltipfiletypeexportprompt msgctxt "ulng.rsopttooltipfiletypeexportprompt" msgid "Select the one(s) you want to export" msgstr "Абраць архіватары для экспарту" #: ulng.rsopttooltipfiletypeimportcaption msgid "Import tooltip file type configuration" msgstr "Імпарт канфігурацыі выплыўных падказак" #: ulng.rsopttooltipfiletypeimportdone #, object-pascal-format msgctxt "ulng.rsopttooltipfiletypeimportdone" msgid "Importation of %d elements from file \"%s\" completed." msgstr "Імпарт %d элементаў з \"%s\" выкананы." #: ulng.rsopttooltipfiletypeimportfile msgid "Select the file to import tooltip file type configuration(s)" msgstr "Абраць файл для імпарту канфігурацыі выплыўных падказак" #: ulng.rsopttooltipfiletypeimportprompt msgctxt "ulng.rsopttooltipfiletypeimportprompt" msgid "Select the one(s) you want to import" msgstr "Абраць для імпарту" #: ulng.rsopttooltipfiletypewheretosave msgid "Enter location and filename where to save tooltip file type configuration" msgstr "Пазначце размяшчэнне і назву файла для захавання канфігурацыі падказак" #: ulng.rsopttooltipsfiletypename msgid "Tooltip file type name" msgstr "Назва" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Стандартны DC - Копія (x) назва файла.тып;Windows - назва файла (x).тып;Іншы - назва файла (x).тып" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не змяняць пазіцыю;выкарыстоўваць налады як для новых файлаў;ва ўпарадкаванай пазіцыі" #: ulng.rspluginfilenamestylelist msgid "With complete absolute path;Path relative to %COMMANDER_PATH%;Relative to the following" msgstr "З поўным абсалютным шляхам;са шляхам адносна %COMMANDER_PATH%; са шляхам адносна пазначанага" #: ulng.rspluginsearchcontainscasesenstive msgid "contains(case)" msgstr "змяшчае(з улікам рэгістра)" #: ulng.rspluginsearchcontainsnotcase msgid "contains" msgstr "змяшчае" #: ulng.rspluginsearchequalcasesensitive msgid "=(case)" msgstr "=(з улікам рэгістра)" #: ulng.rspluginsearchequalnotcase msgctxt "ulng.rspluginsearchequalnotcase" msgid "=" msgstr "=" #: ulng.rspluginsearchfieldnotfound #, object-pascal-format msgid "Field \"%s\" not found!" msgstr "Поле \"%s\" не знойдзена!" #: ulng.rspluginsearchnotcontainscasesenstive msgid "!contains(case)" msgstr "!змяшчае(з улікам рэгістра)" #: ulng.rspluginsearchnotcontainsnotcase msgid "!contains" msgstr "!змяшчае" #: ulng.rspluginsearchnotequacasesensitive msgid "!=(case)" msgstr "!=(з улікам рэгістра)" #: ulng.rspluginsearchnotequalnotcase msgctxt "ulng.rspluginsearchnotequalnotcase" msgid "!=" msgstr "!=" #: ulng.rspluginsearchnotregexpr msgid "!regexp" msgstr "!рэг. выраз" #: ulng.rspluginsearchpluginnotfound #, object-pascal-format msgid "Plugin \"%s\" not found!" msgstr "Убудовы \"%s\" не знойдзена!" #: ulng.rspluginsearchregexpr msgid "regexp" msgstr "рэг. выраз" #: ulng.rspluginsearchunitnotfoundforfield #, object-pascal-format msgctxt "ulng.rspluginsearchunitnotfoundforfield" msgid "Unit \"%s\" not found for field \"%s\" !" msgstr "Значэнне \"%s\" поля \"%s\" не знойдзена!" #: ulng.rspropscontains #, object-pascal-format msgid "Files: %d, folders: %d" msgstr "Файлы: %d ,каталогі: %d" #: ulng.rspropserrchmod #, object-pascal-format msgid "Can not change access rights for \"%s\"" msgstr "Немагчыма змяніць правы доступу для \"%s\"" #: ulng.rspropserrchown #, object-pascal-format msgid "Can not change owner for \"%s\"" msgstr "Немагчыма змяніць уладальніка \"%s\"" #: ulng.rspropsfile msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Каталог" #: ulng.rspropsmultipletypes msgid "Multiple types" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Канал з назвай" #: ulng.rspropssocket msgid "Socket" msgstr "Сокет" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Адмысловая блочная прылада" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Адмысловая сімвальная прылада" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Сімвалічная спасылка" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Невядомы тып" #: ulng.rssearchresult msgid "Search result" msgstr "Вынік пошуку" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ПОШУК" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<шаблон без назвы>" #: ulng.rssearchwithdsxplugininprogress msgid "" "A file search using DSX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Пошук файлаў з убудовай DSX ужо запушчаны.\n" "Неабходна завяршыць яго перш чым пачаць новы." #: ulng.rssearchwithwdxplugininprogress msgid "" "A file search using WDX plugin is already in progress.\n" "We need that one to be completed before to launch a new one." msgstr "" "Пошук файлаў з убудовай WDX ужо запушчаны.\n" "Неабходна завяршыць яго перш чым пачаць новы." #: ulng.rsselectdir msgid "Select a directory" msgstr "Абраць каталог" #: ulng.rsselectduplicatemethod msgid "Newest;Oldest;Largest;Smallest;First in group;Last in group" msgstr "Навейшыя;Старэйшыя;Большыя;Меншыя;Першыя ў групе;Апошнія ў групе" #: ulng.rsselectyoufindfileswindow msgid "Select your window" msgstr "Абраць акно" #: ulng.rsshowhelpfor #, object-pascal-format msgid "&Show help for %s" msgstr "&Паказаць даведку па %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Усё" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Катэгорыя" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Слупок" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Загад" #: ulng.rssimpleworderror msgid "Error" msgstr "Памылка" #: ulng.rssimplewordfailedexcla msgid "Failed!" msgstr "Не ўдалося!" #: ulng.rssimplewordfalse msgid "False" msgstr "False" #: ulng.rssimplewordfilename msgctxt "ulng.rssimplewordfilename" msgid "Filename" msgstr "Назва файла" #: ulng.rssimplewordfiles msgid "files" msgstr "файлы" #: ulng.rssimplewordletter msgid "Letter" msgstr "Літара" #: ulng.rssimplewordparameter msgid "Param" msgstr "Парам" #: ulng.rssimplewordresult msgid "Result" msgstr "Вынік" #: ulng.rssimplewordsuccessexcla msgid "Success!" msgstr "Паспяхова!" #: ulng.rssimplewordtrue msgid "True" msgstr "True" #: ulng.rssimplewordvariable msgid "Variable" msgstr "Зменная" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "ПрацКат" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Байтаў" #: ulng.rssizeunitgbytes msgid "Gigabytes" msgstr "Гігабайтаў" #: ulng.rssizeunitkbytes msgid "Kilobytes" msgstr "Кілабайтаў" #: ulng.rssizeunitmbytes msgid "Megabytes" msgstr "Мегабайтаў" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Тэрабайтаў" #: ulng.rsspacemsg #, object-pascal-format msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлаў: %d, Каталогаў: %d, Памер: %s (%s байтаў)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Немагчыма стварыць мэтавы каталог!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Хібны фармат памеру файла!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Немагчыма падзяліць файл!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Колькасць частак большая за 100! Працягнуць?" #: ulng.rssplitpredefinedsizes msgid "Automatic;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" msgstr "Аўтаматычна;1457664B - 3.5\" High Density 1.44M;1213952B - 5.25\" High Density 1.2M;730112B - 3.5\" Double Density 720K;362496B - 5.25\" Double Density 360K;98078KB - ZIP 100MB;650MB - CD 650MB;700MB - CD 700MB;4482MB - DVD+R" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Абраць каталог:" #: ulng.rsstrpreviewjustpreview msgid "Just preview" msgstr "Толькі прагляд" #: ulng.rsstrpreviewothers msgid "Others" msgstr "Іншыя" #: ulng.rsstrpreviewsearchingletters msgid "OU" msgstr "OU" #: ulng.rsstrpreviewsidenote msgid "Side note" msgstr "Нататка" #: ulng.rsstrpreviewwordwithoutsearched1 msgid "Flat" msgstr "Плоскі" #: ulng.rsstrpreviewwordwithoutsearched2 msgid "Limited" msgstr "Абмежаваны" #: ulng.rsstrpreviewwordwithoutsearched3 msgid "Simple" msgstr "Просты" #: ulng.rsstrpreviewwordwithsearched1 msgid "Fabulous" msgstr "Неверагодны" #: ulng.rsstrpreviewwordwithsearched2 msgid "Marvelous" msgstr "Цудоўны" #: ulng.rsstrpreviewwordwithsearched3 msgid "Tremendous" msgstr "Шыкоўны" #: ulng.rsstrtvmchoosedirhistory msgid "Choose your directory from Dir History" msgstr "Абярыце каталог з гісторыі каталогаў" #: ulng.rsstrtvmchoosefavoritetabs msgid "Choose you Favorite Tabs:" msgstr "Абярыце ўлюбёныя ўкладкі:" #: ulng.rsstrtvmchoosefromcmdlinehistory msgid "Choose your command from Command Line History" msgstr "Абярыце загад з гісторыі загаднага радка" #: ulng.rsstrtvmchoosefrommainmenu msgid "Choose your action from Main Menu" msgstr "Абярыце дзеянне з галоўнага меню" #: ulng.rsstrtvmchoosefromtoolbar msgid "Choose your action from Maintool bar" msgstr "Абярыце дзеянне з панэлі інструментаў" #: ulng.rsstrtvmchoosehotdirectory msgid "Choose your directory from Hot Directory:" msgstr "Абярыце каталог з выбраных каталогаў:" #: ulng.rsstrtvmchooseviewhistory msgid "Choose your directory from File View History" msgstr "Абярыце каталог з гісторыі прагляду файлаў" #: ulng.rsstrtvmchooseyourfileordir msgid "Choose your file or your directory" msgstr "Абярыце файл альбо каталог" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Памылка падчас стварэння спасылкі." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Прадвызначаны тэкст" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Просты тэкст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Нічога не рабіць;Закрыць укладку;Доступ да ўлюбёных укладак;Меню ўкладак" #: ulng.rstimeunitday msgid "Day(s)" msgstr "Дзень(ён)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Гадзіна(ы)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Хвіліна(ы)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Месяц(ы)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунда(ы)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Тыдзень(і)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Год(ы)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Змяніць назву ўкладак" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Змяніць назву падменю ўкладак" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Адрозненні" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Рэдактар" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Падчас адкрыцця праграмы параўнання адбылася памылка" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Падчас запуску рэдактара адбылася памылка" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Падчас запуску тэрмінала адбылася памылка" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Падчас запуску праграмы прагляду адбылася памылка" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Тэрмінал" #: ulng.rstooltiphidetimeoutlist msgid "System default;1 sec;2 sec;3 sec;5 sec;10 sec;30 sec;1 min;Never hide" msgstr "Прадвызначанае сістэмнае;1 сек;2 сек;3 сек;5 сек;10 сек;30 сек;1 зв;Ніколі не хаваць" #: ulng.rstooltipmodelist msgid "Combine DC and system tooltip, DC first (legacy);Combine DC and system tooltip, system first;Show DC tooltip when possible and system when not;Show DC tooltip only;Show system tooltip only" msgstr "Аб’яднаць падказку DC і сістэмную, спачатку з DC;аб’яднаць падказку DC і сістэмную, спачатку сістэмная;паказаць падказку DC, калі магчыма, а калі не, сістэмную;паказаць толькі падказку DC;паказаць толькі сістэмную падказку" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Праграма для прагляду" #: ulng.rsunhandledexceptionmessage #, object-pascal-format msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Калі ласка, паведаміце пра памылку на трэкер памылак з апісаннем вашых дзеянняў і файлам:%sНацісніце %s, каб працягнуць працу альбо %s, каб выйсці." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Абедзве панэлі, з актыўнай у неактыўную" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Абедзве панэлі, з левай у правую" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Шлях панэлі" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Уключыць кожную назву ў квадратныя дужкі альбо іншыя" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Толькі назва, без пашырэння" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Поўная назва (шлях і назва)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Дапамога па зменным \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Запыт уводу параметра з прадвызначаным значэннем" #: ulng.rsvarlastdircurrentpath msgid "Last directory of panel's path" msgstr "Апошні каталог у шляху панэлі" #: ulng.rsvarlastdirofpath msgid "Last directory of file's path" msgstr "Апошні каталог у шляху файла" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Левая панэль" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Часовы файл са спісам назваў файлаў" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Часовы файл са спісам поўных назваў файлаў (шлях і назва)" #: ulng.rsvarlistinutf16 msgid "Filenames in list in UTF-16 with BOM" msgstr "Спіс ва UTF-16 з BOM" #: ulng.rsvarlistinutf16quoted msgid "Filenames in list in UTF-16 with BOM, inside double quotes" msgstr "Спіс ва UTF-16 з BOM, назвы ў двукоссях" #: ulng.rsvarlistinutf8 msgid "Filenames in list in UTF-8" msgstr "Спіс ва UTF-8" #: ulng.rsvarlistinutf8quoted msgid "Filenames in list in UTF-8, inside double quotes" msgstr "Спіс ва UTF-8, назвы ў двукоссях" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Часовы файл са спісам назваў файлаў з адносным шляхам" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Толькі пашырэнне файла" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Толькі назва" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Іншыя магчымыя прыклады" #: ulng.rsvarpath msgid "Path, without ending delimiter" msgstr "Шлях без падзяляльніка на канцы" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Адсюль і да канца радка паказальнікам зменнай з адсоткамі будзе \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Вяртае знак адсотка" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Назад, адсюль і да канца радка паказальнікам зменнай з адсоткамі будзе \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Увасабіць кожную назву як \"-a \", альбо інш." #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Запыт;значэнне]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Назва файла з адносным шляхам" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Правая панэль" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Поўны шлях другога абранага файла ў правай панэлі" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Паказаць да выканання загаду" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[простае паведамленне]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Будзе паказана простае паведамленне" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Актыўная панэль (крыніца)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Неактыўная панэль (мэта)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Назвы файлаў заключацца ў двукоссі (прадвызначана)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Загад будзе выкананы ў тэрмінале, тэрмінал застанецца адкрытым" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Шляхі з падзяляльнікам на канцы" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Назвы файлаў не заключацца ў двукоссі" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Загад будзе выкананы ў тэрмінале, тэрмінал закрыецца" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Шляхі без падзяляльнікаў на канцы" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Сетка" #: ulng.rsvfsrecyclebin msgid "Recycle Bin" msgstr "Сметніца" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Унутраная праграма прагляду Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Дрэнная якасць" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Кадаванне" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Тып выявы" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Новы памер" #: ulng.rsviewnotfound #, object-pascal-format msgid "%s not found!" msgstr "%s недаступны!" #: ulng.rsviewpainttoolslist msgid "Pen;Rect;Ellipse" msgstr "Аловак;Прамавугольнік;Эліпс" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "у вонкавай праграме" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "ва ўнутранай праграме" #: ulng.rsxreplacements #, object-pascal-format msgid "Number of replacement: %d" msgstr "Колькасць замен: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Замен не адбылося." #: umaincommands.rsfavoritetabs_setupnotexist #, object-pascal-format msgid "No setup named \"%s\"" msgstr "Набор \"%s\" не існуе" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014233� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015725� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/release/�����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017345� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/release/.gitignore�������������������������������������������������0000644�0001750�0000144�00000000015�15104114162�021331� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������* !.gitignore�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/qt5/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016436� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/qt5/Qt5Pas.patch���������������������������������������������������0000644�0001750�0000144�00000010342�15104114162�020574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: Qt5Pas.pro =================================================================== --- Qt5Pas.pro (revision 63113) +++ Qt5Pas.pro (working copy) @@ -15,7 +15,7 @@ VERSION = 1.2.6 -QT += gui network printsupport +QT += gui printsupport TARGET = Qt5Pas TEMPLATE = lib VPATH = src @@ -73,8 +73,8 @@ CONFIG -= create_prl CONFIG -= link_prl -CONFIG -= release -CONFIG += debug +CONFIG += release +CONFIG -= debug CONFIG += dll CONFIG += warn_off @@ -345,27 +345,6 @@ qgraphicsscene_c.h \ qgraphicsscene_hook.h \ qgraphicsview_c.h \ - qsslcipher_c.h \ - qsslkey_c.h \ - qsslerror_c.h \ - qabstractsocket_c.h \ - qabstractsocket_hook.h \ - qudpsocket_c.h \ - qudpsocket_hook.h \ - qtcpsocket_c.h \ - qtcpsocket_hook.h \ - qtcpserver_c.h \ - qtcpserver_hook.h \ - qsslconfiguration_c.h \ - qsslsocket_c.h \ - qnetworkaccessmanager_c.h \ - qnetworkaccessmanager_hook.h \ - qnetworkrequest_c.h \ - qnetworkreply_c.h \ - qnetworkreply_hook.h \ - qnetworkcookiejar_c.h \ - qnetworkproxy_c.h \ - qauthenticator_c.h \ qcoreapplication_hook_c.h \ qtimer_hook_c.h \ qsocketnotifier_hook_c.h \ @@ -443,13 +422,7 @@ qprintpreviewdialog_hook_c.h \ qprintpreviewwidget_hook_c.h \ qsystemtrayicon_hook_c.h \ - qgraphicsscene_hook_c.h \ - qabstractsocket_hook_c.h \ - qudpsocket_hook_c.h \ - qtcpsocket_hook_c.h \ - qtcpserver_hook_c.h \ - qnetworkaccessmanager_hook_c.h \ - qnetworkreply_hook_c.h + qgraphicsscene_hook_c.h SOURCES += \ qobject_hook_c.cpp \ pascalbind.cpp \ @@ -630,21 +603,6 @@ qstylefactory_c.cpp \ qgraphicsscene_c.cpp \ qgraphicsview_c.cpp \ - qsslcipher_c.cpp \ - qsslkey_c.cpp \ - qsslerror_c.cpp \ - qabstractsocket_c.cpp \ - qudpsocket_c.cpp \ - qtcpsocket_c.cpp \ - qtcpserver_c.cpp \ - qsslconfiguration_c.cpp \ - qsslsocket_c.cpp \ - qnetworkaccessmanager_c.cpp \ - qnetworkrequest_c.cpp \ - qnetworkreply_c.cpp \ - qnetworkcookiejar_c.cpp \ - qnetworkproxy_c.cpp \ - qauthenticator_c.cpp \ qcoreapplication_hook_c.cpp \ qtimer_hook_c.cpp \ qsocketnotifier_hook_c.cpp \ @@ -722,11 +680,5 @@ qprintpreviewdialog_hook_c.cpp \ qprintpreviewwidget_hook_c.cpp \ qsystemtrayicon_hook_c.cpp \ - qgraphicsscene_hook_c.cpp \ - qabstractsocket_hook_c.cpp \ - qudpsocket_hook_c.cpp \ - qtcpsocket_hook_c.cpp \ - qtcpserver_hook_c.cpp \ - qnetworkaccessmanager_hook_c.cpp \ - qnetworkreply_hook_c.cpp + qgraphicsscene_hook_c.cpp # end of file Index: src/chandles.h =================================================================== --- src/chandles.h (revision 63113) +++ src/chandles.h (working copy) @@ -13,14 +13,11 @@ #ifndef CHANDLES_H #define CHANDLES_H -#if defined _LP64 -typedef long long int PTRINT; -typedef unsigned long long int PTRUINT; -#else -typedef int PTRINT; -typedef unsigned int PTRUINT; -#endif +#include <stdint.h> +typedef intptr_t PTRINT; +typedef uintptr_t PTRUINT; + typedef struct QAbstractButton__ { PTRINT dummy; } *QAbstractButtonH; typedef struct QSizePolicy__ { PTRINT dummy; } *QSizePolicyH; typedef struct QSurface__ { PTRINT dummy; } *QSurfaceH; Index: src/pascalbind.h =================================================================== --- src/pascalbind.h (revision 63113) +++ src/pascalbind.h (working copy) @@ -40,13 +40,8 @@ typedef bool (*EventFilter)(void *message, long *result); typedef bool (*EventFilter2)(void *message); -#if defined _LP64 -typedef long long int PTRINT; -typedef unsigned long long int PTRUINT; -#else -typedef int PTRINT; -typedef unsigned int PTRUINT; -#endif +typedef intptr_t PTRINT; +typedef uintptr_t PTRUINT; typedef uint WFlags; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/license.rtf��������������������������������������������������������0000644�0001750�0000144�00000046750�15104114162�020100� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Courier New;}} {\*\generator Riched20 10.0.10240}\viewkind4\uc1 \pard\f0\fs22\lang1033 GNU GENERAL PUBLIC LICENSE\par Version 2, June 1991\par \par Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par Everyone is permitted to copy and distribute verbatim copies\par of this license document, but changing it is not allowed.\par \par Preamble\par \par The licenses for most software are designed to take away your\par freedom to share and change it. By contrast, the GNU General Public\par License is intended to guarantee your freedom to share and change free\par software--to make sure the software is free for all its users. This\par General Public License applies to most of the Free Software\par Foundation's software and to any other program whose authors commit to\par using it. (Some other Free Software Foundation software is covered by\par the GNU Lesser General Public License instead.) You can apply it to\par your programs, too.\par \par When we speak of free software, we are referring to freedom, not\par price. Our General Public Licenses are designed to make sure that you\par have the freedom to distribute copies of free software (and charge for\par this service if you wish), that you receive source code or can get it\par if you want it, that you can change the software or use pieces of it\par in new free programs; and that you know you can do these things.\par \par To protect your rights, we need to make restrictions that forbid\par anyone to deny you these rights or to ask you to surrender the rights.\par These restrictions translate to certain responsibilities for you if you\par distribute copies of the software, or if you modify it.\par \par For example, if you distribute copies of such a program, whether\par gratis or for a fee, you must give the recipients all the rights that\par you have. You must make sure that they, too, receive or can get the\par source code. And you must show them these terms so they know their\par rights.\par \par We protect your rights with two steps: (1) copyright the software, and\par (2) offer you this license which gives you legal permission to copy,\par distribute and/or modify the software.\par \par Also, for each author's protection and ours, we want to make certain\par that everyone understands that there is no warranty for this free\par software. If the software is modified by someone else and passed on, we\par want its recipients to know that what they have is not the original, so\par that any problems introduced by others will not reflect on the original\par authors' reputations.\par \par Finally, any free program is threatened constantly by software\par patents. We wish to avoid the danger that redistributors of a free\par program will individually obtain patent licenses, in effect making the\par program proprietary. To prevent this, we have made it clear that any\par patent must be licensed for everyone's free use or not licensed at all.\par \par The precise terms and conditions for copying, distribution and\par modification follow.\par \par GNU GENERAL PUBLIC LICENSE\par TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par \par 0. This License applies to any program or other work which contains\par a notice placed by the copyright holder saying it may be distributed\par under the terms of this General Public License. The "Program", below,\par refers to any such program or work, and a "work based on the Program"\par means either the Program or any derivative work under copyright law:\par that is to say, a work containing the Program or a portion of it,\par either verbatim or with modifications and/or translated into another\par language. (Hereinafter, translation is included without limitation in\par the term "modification".) Each licensee is addressed as "you".\par \par Activities other than copying, distribution and modification are not\par covered by this License; they are outside its scope. The act of\par running the Program is not restricted, and the output from the Program\par is covered only if its contents constitute a work based on the\par Program (independent of having been made by running the Program).\par Whether that is true depends on what the Program does.\par \par 1. You may copy and distribute verbatim copies of the Program's\par source code as you receive it, in any medium, provided that you\par conspicuously and appropriately publish on each copy an appropriate\par copyright notice and disclaimer of warranty; keep intact all the\par notices that refer to this License and to the absence of any warranty;\par and give any other recipients of the Program a copy of this License\par along with the Program.\par \par You may charge a fee for the physical act of transferring a copy, and\par you may at your option offer warranty protection in exchange for a fee.\par \par 2. You may modify your copy or copies of the Program or any portion\par of it, thus forming a work based on the Program, and copy and\par distribute such modifications or work under the terms of Section 1\par above, provided that you also meet all of these conditions:\par \par a) You must cause the modified files to carry prominent notices\par stating that you changed the files and the date of any change.\par \par b) You must cause any work that you distribute or publish, that in\par whole or in part contains or is derived from the Program or any\par part thereof, to be licensed as a whole at no charge to all third\par parties under the terms of this License.\par \par c) If the modified program normally reads commands interactively\par when run, you must cause it, when started running for such\par interactive use in the most ordinary way, to print or display an\par announcement including an appropriate copyright notice and a\par notice that there is no warranty (or else, saying that you provide\par a warranty) and that users may redistribute the program under\par these conditions, and telling the user how to view a copy of this\par License. (Exception: if the Program itself is interactive but\par does not normally print such an announcement, your work based on\par the Program is not required to print an announcement.)\par \par These requirements apply to the modified work as a whole. If\par identifiable sections of that work are not derived from the Program,\par and can be reasonably considered independent and separate works in\par themselves, then this License, and its terms, do not apply to those\par sections when you distribute them as separate works. But when you\par distribute the same sections as part of a whole which is a work based\par on the Program, the distribution of the whole must be on the terms of\par this License, whose permissions for other licensees extend to the\par entire whole, and thus to each and every part regardless of who wrote it.\par \par Thus, it is not the intent of this section to claim rights or contest\par your rights to work written entirely by you; rather, the intent is to\par exercise the right to control the distribution of derivative or\par collective works based on the Program.\par \par In addition, mere aggregation of another work not based on the Program\par with the Program (or with a work based on the Program) on a volume of\par a storage or distribution medium does not bring the other work under\par the scope of this License.\par \par 3. You may copy and distribute the Program (or a work based on it,\par under Section 2) in object code or executable form under the terms of\par Sections 1 and 2 above provided that you also do one of the following:\par \par a) Accompany it with the complete corresponding machine-readable\par source code, which must be distributed under the terms of Sections\par 1 and 2 above on a medium customarily used for software interchange; or,\par \par b) Accompany it with a written offer, valid for at least three\par years, to give any third party, for a charge no more than your\par cost of physically performing source distribution, a complete\par machine-readable copy of the corresponding source code, to be\par distributed under the terms of Sections 1 and 2 above on a medium\par customarily used for software interchange; or,\par \par c) Accompany it with the information you received as to the offer\par to distribute corresponding source code. (This alternative is\par allowed only for noncommercial distribution and only if you\par received the program in object code or executable form with such\par an offer, in accord with Subsection b above.)\par \par The source code for a work means the preferred form of the work for\par making modifications to it. For an executable work, complete source\par code means all the source code for all modules it contains, plus any\par associated interface definition files, plus the scripts used to\par control compilation and installation of the executable. However, as a\par special exception, the source code distributed need not include\par anything that is normally distributed (in either source or binary\par form) with the major components (compiler, kernel, and so on) of the\par operating system on which the executable runs, unless that component\par itself accompanies the executable.\par \par If distribution of executable or object code is made by offering\par access to copy from a designated place, then offering equivalent\par access to copy the source code from the same place counts as\par distribution of the source code, even though third parties are not\par compelled to copy the source along with the object code.\par \par 4. You may not copy, modify, sublicense, or distribute the Program\par except as expressly provided under this License. Any attempt\par otherwise to copy, modify, sublicense or distribute the Program is\par void, and will automatically terminate your rights under this License.\par However, parties who have received copies, or rights, from you under\par this License will not have their licenses terminated so long as such\par parties remain in full compliance.\par \par 5. You are not required to accept this License, since you have not\par signed it. However, nothing else grants you permission to modify or\par distribute the Program or its derivative works. These actions are\par prohibited by law if you do not accept this License. Therefore, by\par modifying or distributing the Program (or any work based on the\par Program), you indicate your acceptance of this License to do so, and\par all its terms and conditions for copying, distributing or modifying\par the Program or works based on it.\par \par 6. Each time you redistribute the Program (or any work based on the\par Program), the recipient automatically receives a license from the\par original licensor to copy, distribute or modify the Program subject to\par these terms and conditions. You may not impose any further\par restrictions on the recipients' exercise of the rights granted herein.\par You are not responsible for enforcing compliance by third parties to\par this License.\par \par 7. If, as a consequence of a court judgment or allegation of patent\par infringement or for any other reason (not limited to patent issues),\par conditions are imposed on you (whether by court order, agreement or\par otherwise) that contradict the conditions of this License, they do not\par excuse you from the conditions of this License. If you cannot\par distribute so as to satisfy simultaneously your obligations under this\par License and any other pertinent obligations, then as a consequence you\par may not distribute the Program at all. For example, if a patent\par license would not permit royalty-free redistribution of the Program by\par all those who receive copies directly or indirectly through you, then\par the only way you could satisfy both it and this License would be to\par refrain entirely from distribution of the Program.\par \par If any portion of this section is held invalid or unenforceable under\par any particular circumstance, the balance of the section is intended to\par apply and the section as a whole is intended to apply in other\par circumstances.\par \par It is not the purpose of this section to induce you to infringe any\par patents or other property right claims or to contest validity of any\par such claims; this section has the sole purpose of protecting the\par integrity of the free software distribution system, which is\par implemented by public license practices. Many people have made\par generous contributions to the wide range of software distributed\par through that system in reliance on consistent application of that\par system; it is up to the author/donor to decide if he or she is willing\par to distribute software through any other system and a licensee cannot\par impose that choice.\par \par This section is intended to make thoroughly clear what is believed to\par be a consequence of the rest of this License.\par \par 8. If the distribution and/or use of the Program is restricted in\par certain countries either by patents or by copyrighted interfaces, the\par original copyright holder who places the Program under this License\par may add an explicit geographical distribution limitation excluding\par those countries, so that distribution is permitted only in or among\par countries not thus excluded. In such case, this License incorporates\par the limitation as if written in the body of this License.\par \par 9. The Free Software Foundation may publish revised and/or new versions\par of the General Public License from time to time. Such new versions will\par be similar in spirit to the present version, but may differ in detail to\par address new problems or concerns.\par \par Each version is given a distinguishing version number. If the Program\par specifies a version number of this License which applies to it and "any\par later version", you have the option of following the terms and conditions\par either of that version or of any later version published by the Free\par Software Foundation. If the Program does not specify a version number of\par this License, you may choose any version ever published by the Free Software\par Foundation.\par \par 10. If you wish to incorporate parts of the Program into other free\par programs whose distribution conditions are different, write to the author\par to ask for permission. For software which is copyrighted by the Free\par Software Foundation, write to the Free Software Foundation; we sometimes\par make exceptions for this. Our decision will be guided by the two goals\par of preserving the free status of all derivatives of our free software and\par of promoting the sharing and reuse of software generally.\par \par NO WARRANTY\par \par 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par REPAIR OR CORRECTION.\par \par 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par POSSIBILITY OF SUCH DAMAGES.\par \par END OF TERMS AND CONDITIONS\par \par How to Apply These Terms to Your New Programs\par \par If you develop a new program, and you want it to be of the greatest\par possible use to the public, the best way to achieve this is to make it\par free software which everyone can redistribute and change under these terms.\par \par To do so, attach the following notices to the program. It is safest\par to attach them to the start of each source file to most effectively\par convey the exclusion of warranty; and each file should have at least\par the "copyright" line and a pointer to where the full notice is found.\par \par <one line to give the program's name and a brief idea of what it does.>\par Copyright (C) <year> <name of author>\par \par This program is free software; you can redistribute it and/or modify\par it under the terms of the GNU General Public License as published by\par the Free Software Foundation; either version 2 of the License, or\par (at your option) any later version.\par \par This program is distributed in the hope that it will be useful,\par but WITHOUT ANY WARRANTY; without even the implied warranty of\par MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par GNU General Public License for more details.\par \par You should have received a copy of the GNU General Public License along\par with this program; if not, write to the Free Software Foundation, Inc.,\par 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par \par Also add information on how to contact you by electronic and paper mail.\par \par If the program is interactive, make it output a short notice like this\par when it starts in an interactive mode:\par \par Gnomovision version 69, Copyright (C) year name of author\par Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par This is free software, and you are welcome to redistribute it\par under certain conditions; type `show c' for details.\par \par The hypothetical commands `show w' and `show c' should show the appropriate\par parts of the General Public License. Of course, the commands you use may\par be called something other than `show w' and `show c'; they could even be\par mouse-clicks or menu items--whatever suits your program.\par \par You should also get your employer (if you work as a programmer) or your\par school, if any, to sign a "copyright disclaimer" for the program, if\par necessary. Here is a sample; alter the names:\par \par Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par `Gnomovision' (which makes passes at compilers) written by James Hacker.\par \par <signature of Ty Coon>, 1 April 1989\par Ty Coon, President of Vice\par \par This General Public License does not permit incorporating your program into\par proprietary programs. If your program is a subroutine library, you may\par consider it more useful to permit linking proprietary applications with the\par library. If this is what you want to do, use the GNU Lesser General\par Public License instead of this License.\par \par } �������������������������doublecmd-1.1.30/install/windows/lib/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016473� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/lib/readme.txt�����������������������������������������������������0000644�0001750�0000144�00000000213�15104114162�020465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Before create packages (before run create_packages.bat) copy in this directory third-party libraries: - unrar.dll - needed for unrar plugin�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/install.bat��������������������������������������������������������0000644�0001750�0000144�00000006430�15104114162�020066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rem This script run from create_packages.bat rem If you run it direct, set up %BUILD_PACK_DIR% first rem Prepare all installation files set DC_INSTALL_DIR=%BUILD_PACK_DIR%\doublecmd mkdir %DC_INSTALL_DIR% mkdir %DC_INSTALL_DIR%\plugins rem WCX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wcx mkdir %DC_INSTALL_DIR%\plugins\wcx\base64 mkdir %DC_INSTALL_DIR%\plugins\wcx\rpm mkdir %DC_INSTALL_DIR%\plugins\wcx\sevenzip mkdir %DC_INSTALL_DIR%\plugins\wcx\unrar mkdir %DC_INSTALL_DIR%\plugins\wcx\zip rem WDX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wdx mkdir %DC_INSTALL_DIR%\plugins\wdx\scripts mkdir %DC_INSTALL_DIR%\plugins\wdx\rpm_wdx mkdir %DC_INSTALL_DIR%\plugins\wdx\deb_wdx mkdir %DC_INSTALL_DIR%\plugins\wdx\audioinfo rem WFX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wfx mkdir %DC_INSTALL_DIR%\plugins\wfx\ftp rem WLX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wlx mkdir %DC_INSTALL_DIR%\plugins\wlx\richview mkdir %DC_INSTALL_DIR%\plugins\wlx\preview mkdir %DC_INSTALL_DIR%\plugins\wlx\wmp mkdir %DC_INSTALL_DIR%\doc rem Copy directories xcopy /E default %DC_INSTALL_DIR%\default\ xcopy /E language %DC_INSTALL_DIR%\language\ xcopy /E pixmaps %DC_INSTALL_DIR%\pixmaps\ xcopy /E highlighters %DC_INSTALL_DIR%\highlighters\ rem Copy files copy doc\*.txt %DC_INSTALL_DIR%\doc\ copy doublecmd.exe %DC_INSTALL_DIR%\ copy doublecmd.help %DC_INSTALL_DIR%\ copy doublecmd.zdli %DC_INSTALL_DIR%\ copy pinyin.tbl %DC_INSTALL_DIR%\ rem Copy libraries copy *.sfx %DC_INSTALL_DIR%\ copy *.dll %DC_INSTALL_DIR%\ copy winpty-agent.exe %DC_INSTALL_DIR%\ rem Copy manifest copy install\windows\doublecmd.visualelementsmanifest.xml %DC_INSTALL_DIR%\ rem copy plugins rem WCX copy plugins\wcx\base64\base64.wcx %DC_INSTALL_DIR%\plugins\wcx\base64\ copy plugins\wcx\rpm\rpm.wcx %DC_INSTALL_DIR%\plugins\wcx\rpm\ copy plugins\wcx\sevenzip\sevenzip.wcx %DC_INSTALL_DIR%\plugins\wcx\sevenzip\ copy plugins\wcx\unrar\unrar.wcx %DC_INSTALL_DIR%\plugins\wcx\unrar\ xcopy /E plugins\wcx\unrar\language %DC_INSTALL_DIR%\plugins\wcx\unrar\language\ copy plugins\wcx\zip\zip.wcx %DC_INSTALL_DIR%\plugins\wcx\zip\ xcopy /E plugins\wcx\zip\language %DC_INSTALL_DIR%\plugins\wcx\zip\language\ rem WDX copy plugins\wdx\rpm_wdx\rpm_wdx.wdx %DC_INSTALL_DIR%\plugins\wdx\rpm_wdx\ copy plugins\wdx\deb_wdx\deb_wdx.wdx %DC_INSTALL_DIR%\plugins\wdx\deb_wdx\ copy plugins\wdx\scripts\* %DC_INSTALL_DIR%\plugins\wdx\scripts\ copy plugins\wdx\audioinfo\audioinfo.wdx %DC_INSTALL_DIR%\plugins\wdx\audioinfo\ copy plugins\wdx\audioinfo\audioinfo.lng %DC_INSTALL_DIR%\plugins\wdx\audioinfo\ rem WFX copy plugins\wfx\ftp\ftp.wfx %DC_INSTALL_DIR%\plugins\wfx\ftp\ xcopy /E plugins\wfx\ftp\language %DC_INSTALL_DIR%\plugins\wfx\ftp\language\ rem WLX copy plugins\wlx\richview\richview.wlx %DC_INSTALL_DIR%\plugins\wlx\richview\ copy plugins\wlx\preview\preview.wlx %DC_INSTALL_DIR%\plugins\wlx\preview\ copy plugins\wlx\wmp\wmp.wlx %DC_INSTALL_DIR%\plugins\wlx\wmp\ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/doublecmd.wxs������������������������������������������������������0000644�0001750�0000144�00000011251�15104114162�020426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <?define ProductName="Double Commander" ?> <?define UpgradeCode="D220A081-E26D-4ECD-B399-EFEB4D6678EA" ?> <Product Id="*" UpgradeCode="$(var.UpgradeCode)" Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="Alexander Koblov" Language="1033"> <Package InstallerVersion="200" Compressed="yes" /> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Icon Id="ProductIcon" SourceFile="doublecmd.ico"/> <Property Id="ARPPRODUCTICON" Value="ProductIcon"/> <Property Id="ARPURLINFOABOUT" Value="https://doublecmd.sourceforge.io"/> <Property Id="ARPNOREPAIR" Value="1"/> <Upgrade Id="$(var.UpgradeCode)"> <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/> <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/> </Upgrade> <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="$(var.ProgramFiles)"> <Directory Id="APPLICATIONFOLDER" Name="$(var.ProductName)"> </Directory> </Directory> <Directory Id="ProgramMenuFolder"> <Directory Id="ApplicationProgramsFolder" Name="$(var.ProductName)"> <Component Id="ApplicationShortcut" Guid="BA37DDBD-5F67-4BA5-B5B8-01B3998E5BDE"> <Shortcut Id="Shortcut" Name="$(var.ProductName)" Description="$(var.ProductName)" Target="[APPLICATIONFOLDER]doublecmd.exe" WorkingDirectory="APPLICATIONFOLDER"/> <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/> <RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/> </Component> </Directory> </Directory> <Directory Id="DesktopFolder" Name="Desktop"> <Component Id="ApplicationShortcutDesktop" Guid="*"> <Shortcut Id="ApplicationDesktopShortcut" Name="$(var.ProductName)" Description="$(var.ProductName)" Target="[APPLICATIONFOLDER]doublecmd.exe" WorkingDirectory="APPLICATIONFOLDER"/> <RemoveFolder Id="DesktopFolder" On="uninstall"/> <RegistryValue Root="HKCU" Key="Software\$(var.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/> </Component> </Directory> </Directory> <CustomAction Id="Overwrite_WixSetDefaultPerMachineFolder" Property="WixPerMachineFolder" Value="[$(var.ProgramFiles)][ApplicationFolderName]" Execute="immediate" /> <InstallUISequence> <Custom Action="Overwrite_WixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" /> </InstallUISequence> <InstallExecuteSequence> <RemoveExistingProducts After="InstallValidate"/> <Custom Action="Overwrite_WixSetDefaultPerMachineFolder" After="WixSetDefaultPerMachineFolder" /> </InstallExecuteSequence> <Feature Id="DefaultFeature" Level="1" Display="hidden"> <ComponentGroupRef Id="HeatGroup"/> </Feature> <Feature Id="ApplicationShortcut" Level="1" Title="Start Menu shortcut"> <ComponentRef Id="ApplicationShortcut" /> </Feature> <Feature Id="ApplicationShortcutDesktop" Level="1" Title="Desktop shortcut" TypicalDefault="advertise"> <ComponentRef Id="ApplicationShortcutDesktop" /> </Feature> <WixVariable Id="WixUILicenseRtf" Value="license.rtf" /> <Property Id="ApplicationFolderName" Value="$(var.ProductName)" /> <Property Id="WixAppFolder" Value="WixPerMachineFolder" /> <Property Id="ALLUSERS" Secure="yes" Value="2" /> <Property Id="MSIINSTALLPERUSER" Secure="yes" Value="{}" /> <UI> <UIRef Id="WixUI_Advanced" /> <Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="1" Order="3">WixAppFolder = "WixPerUserFolder"</Publish> <Publish Dialog="InstallScopeDlg" Control="Next" Property="MSIINSTALLPERUSER" Value="{}" Order="2">WixAppFolder = "WixPerMachineFolder"</Publish> </UI> </Product> </Wix>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/doublecmd.visualelementsmanifest.xml�������������������������������0000644�0001750�0000144�00000000545�15104114162�025177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <VisualElements ShowNameOnSquare150x150Logo='on' Square150x150Logo='pixmaps\mainicon\visualelements\doublecmd-150x150.png' Square70x70Logo='pixmaps\mainicon\visualelements\doublecmd-70x70.png' ForegroundText='light' BackgroundColor='#3A75C4'/> </Application> �����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/doublecmd.iss������������������������������������������������������0000644�0001750�0000144�00000013530�15104114162�020405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; Need Inno Setup 5 with pre-processor #define MyAppName "Double Commander" #define MajorVersion #define MinorVersion #define RevisionVersion #define BuildVersion #define TempVersion ParseVersion('doublecmd\doublecmd.exe', MajorVersion, MinorVersion, RevisionVersion, BuildVersion) #define DisplayVersion str(MajorVersion) + "." + str(MinorVersion) + "." + str(RevisionVersion) #define MyAppAuthor "Alexander Koblov" #define MyAppSupportURL "https://doublecmd.sourceforge.io" #define StartCopyrightYear "2006" #define CurrentYear GetDateTimeString('yyyy','','') [Setup] AppName={#MyAppName} AppVersion={#DisplayVersion} AppVerName={#MyAppName} {#DisplayVersion} VersionInfoProductName={#MyAppName} VersionInfoDescription={#MyAppName} installer VersionInfoVersion={#DisplayVersion} UninstallDisplayName={#MyAppName} UninstallDisplayIcon={app}\doublecmd.exe AppPublisher={#MyAppAuthor} AppCopyright={#StartCopyrightYear}-{#CurrentYear} {#MyAppAuthor} AppPublisherURL=https://doublecmd.sourceforge.io AppSupportURL=https://doublecmd.sourceforge.io AppUpdatesURL=https://doublecmd.sourceforge.io ShowLanguageDialog=yes UsePreviousLanguage=no LanguageDetectionMethod=uilanguage DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} AllowNoIcons=yes LicenseFile=doublecmd\doc\COPYING.txt OutputDir=release Compression=lzma SolidCompression=yes ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ; On all other architectures it will install in "32-bit mode". ArchitecturesInstallIn64BitMode=x64 [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "korean"; MessagesFile: "compiler:Languages\korean.isl" Name: "nepali"; MessagesFile: "compiler:Languages\Nepali.islu" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl" Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl" Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "doublecmd\doublecmd.help"; DestDir: "{app}" Source: "doublecmd\doublecmd.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\doublecmd.zdli"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\pinyin.tbl"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\winpty-agent.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\doublecmd.visualelementsmanifest.xml"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\doc\*"; DestDir: "{app}\doc"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\default\*"; DestDir: "{app}\default"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\language\*"; DestDir: "{app}\language"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\pixmaps\*"; DestDir: "{app}\pixmaps"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\highlighters\*"; DestDir: "{app}\highlighters"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files Source: "doublecmd\*.sfx"; DestDir: "{app}"; Flags: skipifsourcedoesntexist Source: "doublecmd\*.dll"; DestDir: "{app}"; Flags: skipifsourcedoesntexist [Icons] Name: "{group}\Double Commander"; Filename: "{app}\doublecmd.exe" Name: "{group}\{cm:ProgramOnTheWeb,Double Commander}"; Filename: "https://doublecmd.sourceforge.io" Name: "{group}\{cm:UninstallProgram,Double Commander}"; Filename: "{uninstallexe}" Name: "{commondesktop}\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\doublecmd.exe"; Description: "{cm:LaunchProgram,Double Commander}"; Flags: nowait postinstall skipifsilent ������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/windows/convert-zip-msi.bat������������������������������������������������0000644�0001750�0000144�00000003323�15104114162�021464� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem This script converts portable *.zip package to *.msi package rem Check command arguments if "%1" == "" ( echo. echo Syntax: echo. echo %~nx0 ^<Full path to portable .zip package^> goto :eof ) rem Path to Windows Installer XML (WiX) toolset set PATH=%PATH%;"C:\Program Files (x86)\WiX Toolset v3.11\bin" rem The new package will be created from here set BUILD_PACK_DIR=%TEMP%\doublecmd-%DATE: =% rem The new package will be saved here set PACK_DIR=%~dp0/release rem Determine package file name for /f %%i in ("%1") do set PACKAGE=%%~ni rem Get package version and architecture for /f "tokens=1,2,3,4,5 delims=-." %%a in ("%PACKAGE%") do ( set DC_VER=%%b.%%c.%%d set CPU_TARGET=%%e ) rem Prepare needed variables if "%CPU_TARGET%" == "i386" ( set CPU_TARGET=x86 set PF=ProgramFilesFolder ) else if "%CPU_TARGET%" == "x86_64" ( set CPU_TARGET=x64 set PF=ProgramFiles64Folder ) rem Prepare package build dir mkdir %BUILD_PACK_DIR% rem Extract archive unzip %1 -d %BUILD_PACK_DIR% rem Copy needed files copy license.rtf %BUILD_PACK_DIR%\ copy doublecmd.wxs %BUILD_PACK_DIR%\ copy ..\..\src\doublecmd.ico %BUILD_PACK_DIR%\ pushd %BUILD_PACK_DIR% del /Q doublecmd\settings\doublecmd.inf heat dir doublecmd -ag -cg HeatGroup -srd -dr APPLICATIONFOLDER -var var.SourcePath -o include.wxs candle -arch %CPU_TARGET% -dProductVersion=%DC_VER% -dSourcePath=doublecmd -dProgramFiles=%PF% doublecmd.wxs include.wxs light -ext WixUIExtension -cultures:en-us include.wixobj doublecmd.wixobj -o %PACKAGE%.msi rem Move created package move %PACKAGE%.msi %PACK_DIR%/ rem Clean temp directories popd rmdir /S /Q %BUILD_PACK_DIR% �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/���������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015372� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/update-revision.sh���������������������������������������������������0000755�0001750�0000144�00000000636�15104114162�021054� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh export REVISION_INC=$2/units/dcrevision.inc # DC revision number export REVISION=$(git -C $1 rev-list --count 3e11343..HEAD) export COMMIT=$(git -C $1 rev-parse --short HEAD) # Update dcrevision.inc echo "// Created by Git2RevisionInc" > $REVISION_INC echo "const dcRevision = '$REVISION';" >> $REVISION_INC echo "const dcCommit = '$COMMIT';" >> $REVISION_INC # Return revision echo $REVISION ��������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm2cpio.sh����������������������������������������������������������0000755�0001750�0000144�00000002653�15104114162�017472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Prevent gawk >= 4.0.x from getting funny ideas wrt UTF in printf() LANG=C pkg=$1 if [ "$pkg" = "" -o ! -e "$pkg" ]; then echo "no package supplied" 1>&2 exit 1 fi leadsize=96 o=`expr $leadsize + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5` dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9` # echo "sig il: $il dl: $dl" sigsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5` dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9` # echo "hdr il: $il dl: $dl" hdrsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $hdrsize` comp=`dd if="$pkg" ibs=$o skip=1 count=1 2>/dev/null \ | dd bs=3 count=1 2>/dev/null` gz="`echo . | awk '{ printf("%c%c", 0x1f, 0x8b); }'`" lzma="`echo . | awk '{ printf("%cLZ", 0xff); }'`" xz="`echo . | awk '{ printf("%c7z", 0xfd); }'`" zstd="`echo . | awk '{ printf("%c%c", 0x28, 0xb5); }'`" case "$comp" in BZh) dd if="$pkg" ibs=$o skip=1 2>/dev/null | bunzip2 ;; "$gz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | gunzip ;; "$xz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | xzcat ;; "$lzma"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | unlzma ;; "$zstd"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | unzstd ;; *) echo "Unrecognized rpm file: $pkg"; exit 1 ;; esac �������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016170� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm/libunrar.spec����������������������������������������������������0000644�0001750�0000144�00000012105�15104114162�020661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Name: libunrar Version: 5.2.2 Release: 1 Summary: Decompress library for RAR v5 archives Source: http://www.rarlab.com/rar/unrarsrc-%{version}.tar.gz Url: http://www.rarlab.com/rar_add.htm License: Freeware Group: System/Libraries BuildRequires: gcc-c++ BuildRoot: %{_tmppath}/%{name}-%{version}-root %description The libunrar library allows programs linking against it to decompress existing RAR v5 archives. %prep %setup -q -n unrar %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %build make lib CXXFLAGS+="-fPIC -DSILENT" STRIP=true %install install -d -m 755 %{buildroot}/%{_libdir} install -m 644 libunrar.so %{buildroot}/%{_libdir} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %doc license.txt readme.txt %{_libdir}/libunrar.so %changelog * Sun Jan 23 2011 Alexander Koblov <alexx2000@mail.ru> - Initial release of library * Sat Jul 10 2010 Götz Waschk <waschk@mandriva.org> 3.93-1mdv2011.0 + Revision: 550262 - new version * Mon Dec 21 2009 Funda Wang <fwang@mandriva.org> 3.91-1mdv2010.1 + Revision: 480547 - new version 3.91 * Thu Aug 20 2009 Götz Waschk <waschk@mandriva.org> 3.90-2mdv2010.0 + Revision: 418576 - rebuild for broken build system * Thu Aug 20 2009 Götz Waschk <waschk@mandriva.org> 3.90-1mdv2010.0 + Revision: 418546 - new version * Mon Jul 13 2009 Götz Waschk <waschk@mandriva.org> 3.90-0.beta4.1mdv2010.0 + Revision: 395466 - new version * Sat Jun 20 2009 Götz Waschk <waschk@mandriva.org> 3.90-0.beta3.1mdv2010.0 + Revision: 387518 - new version * Mon Jun 08 2009 Götz Waschk <waschk@mandriva.org> 3.90-0.beta2.1mdv2010.0 + Revision: 383871 - new version * Thu May 07 2009 Götz Waschk <waschk@mandriva.org> 3.90-0.beta1.1mdv2010.0 + Revision: 372937 - new version * Tue Feb 03 2009 Guillaume Rousse <guillomovitch@mandriva.org> 3.80-2mdv2009.1 + Revision: 337120 - keep bash completion in its own package * Wed Jan 07 2009 Götz Waschk <waschk@mandriva.org> 3.80-1mdv2009.1 + Revision: 326892 - new version * Sun Oct 12 2008 Funda Wang <fwang@mandriva.org> 3.80-0.beta4.1mdv2009.1 + Revision: 292676 - 3.8.4 - New version 3.8 beta3 * Wed Jun 25 2008 Funda Wang <fwang@mandriva.org> 3.80-0.beta2.1mdv2009.0 + Revision: 228841 - New version 3.80 beta 2 * Tue Jun 10 2008 Götz Waschk <waschk@mandriva.org> 3.80-0.beta1.1mdv2009.0 + Revision: 217391 - new version + Funda Wang <fwang@mandriva.org> - Revert to actual version of program - fix real version * Fri Feb 01 2008 Anssi Hannula <anssi@mandriva.org> 3.71-0.beta1.2mdv2008.1 + Revision: 161265 - move to Mandriva non-free from PLF (license is no longer unclear, it now allows redistribution explicitely) - drop pre-MDK10.0 support - fix license tag capitalization - import unrar * Wed Dec 12 2007 G�tz Waschk <goetz@zarb.org> 3.71-0.beta1.1plf2008.1 - new version * Tue Nov 6 2007 G�tz Waschk <goetz@zarb.org> 3.70-1plf2008.1 - new version * Mon Apr 16 2007 G�tz Waschk <goetz@zarb.org> 3.70-0.beta7.1plf2007.1 - new version * Tue Mar 6 2007 G�tz Waschk <goetz@zarb.org> 3.70-0.beta4.1plf2007.1 - new version * Tue Feb 6 2007 G�tz Waschk <goetz@zarb.org> 3.70-0.beta3.1plf2007.1 - drop patch - new version * Wed Jan 24 2007 G�tz Waschk <goetz@zarb.org> 3.70-0.beta1.1plf2007.1 - don't strip the binary at build stage - new version * Thu Nov 2 2006 G�tz Waschk <goetz@zarb.org> 3.60-1plf2007.1 - update description - new version * Mon Jul 24 2006 G�tz Waschk <goetz@zarb.org> 3.60-0.beta7.1plf2007.0 - new version * Wed Jun 28 2006 G�tz Waschk <goetz@zarb.org> 3.60-0.beta5.1plf2007.0 - new version * Tue Oct 11 2005 G�tz Waschk <goetz@zarb.org> 3.51-1plf - new version * Tue Aug 9 2005 G�tz Waschk <goetz@zarb.org> 3.50-1plf - new version * Tue Apr 19 2005 G�tz Waschk <goetz@zarb.org> 3.50-0.beta1.1plf - mkrel - new version * Mon Sep 20 2004 G�tz Waschk <goetz@zarb.org> 3.40-1plf - fix description - new version * Sun Jun 6 2004 G�tz Waschk <goetz@plf.zarb.org> 3.30-2plf - rebuild for new g++ * Wed Apr 21 2004 G�tz Waschk <goetz@plf.zarb.org> 3.30-1plf - new version * Tue Dec 30 2003 G�tz Waschk <goetz@plf.zarb.org> 3.20-2plf - add unrar bash-completion for Cooker builds * Fri Jun 20 2003 G�tz Waschk <goetz@plf.zarb.org> 3.20-1plf - small build patch for gcc 3.3 - new version * Sun Mar 30 2003 G�tz Waschk <goetz@plf.zarb.org> 3.20-0.beta2.1plf - arrgh, the displayed version is 3.20 beta 2 * Sat Mar 29 2003 G�tz Waschk <goetz@plf.zarb.org> 3.2.0-0.beta2.1plf - new version * Fri Feb 14 2003 G�tz Waschk <goetz@plf.zarb.org> 3.10-2plf - use default optimization flags (Francisco Javier Felix) * Wed Jan 8 2003 G�tz Waschk <waschk@informatik.uni-rostock.de> 3.10-1plf * Tue Dec 3 2002 G�tz Waschk <waschk@informatik.uni-rostock.de> 3.10-0.beta3.1plf - 3.10 beta 3 * Tue Oct 22 2002 G�tz Waschk <waschk@informatik.uni-rostock.de> 3.10-0.beta1.1plf - fix url - add some docs - drop patch - quiet tar - set version to 3.10 beta 1, that's the output of the program - new version * Mon Aug 26 2002 Guillaume Rousse <guillomovitch@plf.zarb.org> 3.0-1plf - first PLF release, with patch from Pascal Terjan <pascal.terjan@free.fr> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm/doublecmd-rpmlintrc����������������������������������������������0000644�0001750�0000144�00000000201�15104114162�022052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This line is mandatory to access the configuration functions from Config import * setBadness('polkit-untracked-privilege', 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm/doublecmd-qt5.spec�����������������������������������������������0000644�0001750�0000144�00000002766�15104114162�021524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# norootforbuild %define doublecmd doublecmd Name: doublecmd-qt5 Summary: Twin-panel (commander-style) file manager (Qt5) Version: 1.1.0 Release: 1 URL: https://doublecmd.sourceforge.io Source0: %{doublecmd}-%{version}.tar.gz License: GPL Group: Applications/File BuildRequires: fpc >= 3.0.0 fpc-src glib2-devel libQt5Pas6-devel >= 2.6 lazarus >= 1.7.0 %if 0%{?mandriva_version} BuildRequires: libncurses-devel libdbus-1-devel libbzip2-devel %endif %if 0%{?fedora_version} || 0%{?rhel} BuildRequires: dbus-devel bzip2-devel %endif %if 0%{?suse_version} >= 1110 BuildRequires: ncurses-devel dbus-1-devel libbz2-devel %endif Provides: doublecmd Conflicts: doublecmd-gtk doublecmd-qt BuildRoot: %{_tmppath}/%{doublecmd}-%{version}-build %define debug_package %{nil} %description Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. %prep %setup -q -n %{doublecmd}-%{version} %build ./build.sh release qt5 %install install/linux/install.sh --install-prefix=%{buildroot} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %{_libdir}/%{doublecmd} %{_bindir}/%{doublecmd} %{_datadir}/%{doublecmd} %{_datadir}/man/man1/%{doublecmd}.* %{_datadir}/pixmaps/%{doublecmd}.* %{_datadir}/applications/%{doublecmd}.desktop %{_datadir}/icons/hicolor/scalable/apps/%{doublecmd}.svg %changelog * Sun Jan 01 2017 - Alexander Koblov <Alexx2000@mail.ru> - 0.8.0 - Initial package, version 0.8.0 ����������doublecmd-1.1.30/install/linux/rpm/doublecmd-qt.spec������������������������������������������������0000644�0001750�0000144�00000002667�15104114162�021437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Name: doublecmd-qt Summary: Twin-panel (commander-style) file manager (Qt4) Version: 1.1.0 Release: 1 URL: https://doublecmd.sourceforge.io Source0: doublecmd_%{version}.orig.tar.gz License: GPL Group: Applications/File BuildRequires: fpc >= 3.0.0 fpc-src glib2-devel libQt4Pas5-devel >= 2.1 lazarus >= 1.8.0 %if 0%{?mandriva_version} BuildRequires: libdbus-1-devel libbzip2-devel %endif %if 0%{?fedora_version} || 0%{?rhel} BuildRequires: dbus-devel bzip2-devel %endif %if 0%{?suse_version} >= 1110 BuildRequires: dbus-1-devel libbz2-devel polkit %endif Provides: doublecmd Conflicts: doublecmd-gtk BuildRoot: %{_tmppath}/doublecmd-%{version}-build %define debug_package %{nil} %description Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. %prep %setup -q -n doublecmd-%{version} %build ./build.sh release qt %install install/linux/install.sh --install-prefix=%{buildroot} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %{_libdir}/doublecmd %{_bindir}/doublecmd %{_datadir}/doublecmd %{_datadir}/man/man1/doublecmd.* %{_datadir}/pixmaps/doublecmd.* %{_datadir}/applications/doublecmd.desktop %{_datadir}/icons/hicolor/scalable/apps/doublecmd.svg %{_datadir}/polkit-1/actions/org.doublecmd.root.policy %changelog * Fri Jun 11 2010 - Alexander Koblov <Alexx2000@mail.ru> - Initial package, version 0.4.6 �������������������������������������������������������������������������doublecmd-1.1.30/install/linux/rpm/doublecmd-gtk.spec�����������������������������������������������0000644�0001750�0000144�00000002714�15104114162�021571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Name: doublecmd-gtk Summary: Twin-panel (commander-style) file manager (GTK2) Version: 1.1.0 Release: 1 URL: https://doublecmd.sourceforge.io Source0: doublecmd_%{version}.orig.tar.gz License: GPL Group: Applications/File BuildRequires: fpc >= 3.0.0 fpc-src glib2-devel gtk2-devel lazarus >= 1.8.0 %if 0%{?mandriva_version} BuildRequires: libncurses-devel libdbus-1-devel libbzip2-devel %endif %if 0%{?fedora_version} || 0%{?rhel} BuildRequires: dbus-devel bzip2-devel %endif %if 0%{?suse_version} >= 1110 BuildRequires: ncurses-devel dbus-1-devel libbz2-devel polkit %endif Provides: doublecmd Conflicts: doublecmd-qt BuildRoot: %{_tmppath}/doublecmd-%{version}-build %define debug_package %{nil} %description Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. %prep %setup -q -n doublecmd-%{version} %build ./build.sh release gtk2 %install install/linux/install.sh --install-prefix=%{buildroot} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %{_libdir}/doublecmd %{_bindir}/doublecmd %{_datadir}/doublecmd %{_datadir}/man/man1/doublecmd.* %{_datadir}/pixmaps/doublecmd.* %{_datadir}/applications/doublecmd.desktop %{_datadir}/icons/hicolor/scalable/apps/doublecmd.svg %{_datadir}/polkit-1/actions/org.doublecmd.root.policy %changelog * Fri Jun 11 2010 - Alexander Koblov <Alexx2000@mail.ru> - Initial package, version 0.4.6 ����������������������������������������������������doublecmd-1.1.30/install/linux/release/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017012� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/release/.gitignore���������������������������������������������������0000644�0001750�0000144�00000000015�15104114162�020776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������* !.gitignore�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016153� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/environmentoptions.xml�������������������������������������������0000644�0001750�0000144�00000000361�15104114162�022655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <EnvironmentOptions> <CompilerFilename Value="fpc"/> <LazarusDirectory Value="/usr/lib/lazarus"/> <FPCSourceDirectory Value="/usr/lib/fpc/src"/> </EnvironmentOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/doublecmd-svn.install��������������������������������������������0000644�0001750�0000144�00000001055�15104114162�022306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# doublecmd-svn.install update_icons() { # Setup Menus if which update-desktop-database then update-desktop-database -q /usr/share/applications > /dev/null 2>&1 fi # Setup MIME types if which update-mime-database then update-mime-database /usr/share/mime > /dev/null 2>&1 fi # Setup Icons touch -c /usr/share/icons/hicolor if which gtk-update-icon-cache then gtk-update-icon-cache -tq /usr/share/icons/hicolor > /dev/null 2>&1 fi } post_install() { update_icons } post_upgrade() { update_icons } post_remove() { update_icons } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/doublecmd-qt5.pkgbuild�������������������������������������������0000644�0001750�0000144�00000002354�15104114162�022347� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Based on AUR doublecmd-qt-svn package # https://aur.archlinux.org/packages/doublecmd-qt-svn # # Maintainer: ValHue <vhuelamo at gmail dot com> # https://github.com/ValHue/AUR-PKGBUILDs # # Contributor: Stanislav GE <ginermail at gmail dot com> _pkgname="doublecmd" pkgname=("${_pkgname}-qt5-svn") pkgver=r6754 pkgrel=1 pkgdesc="Twin-panel (commander-style) file manager (Qt5)" url="https://doublecmd.sourceforge.io" arch=('i686' 'x86_64') license=('GPL2') depends=('qt5pas') install="${_pkgname}-svn.install" makedepends=('lazarus' 'fpc' 'subversion') optdepends=( 'lua51: scripting' 'p7zip: support for 7zip archives' 'libunrar: support for rar archives' ) options=('!strip') provides=(${_pkgname}-qt5) conflicts=('doublecmd-qt5' 'doublecmd-qt' 'doublecmd-qt-svn' 'doublecmd-gtk2' 'doublecmd-gtk2-svn' 'doublecmd-gtk2-alpha-bin') pkgver() { cd "${srcdir}" local ver="$(cat revision.txt)" printf "r%s" "${ver//[[:alpha:]]}" } prepare() { cd "${srcdir}" sed -e 's/LIB_SUFFIX=.*/LIB_SUFFIX=/g' -i install/linux/install.sh } build() { msg 'Build Qt5' cd "${srcdir}" ./build.sh release qt5 } package() { cd "${srcdir}" install/linux/install.sh --install-prefix="${pkgdir}" } # vim:set ts=4 sw=2 ft=sh et:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/doublecmd-qt.pkgbuild��������������������������������������������0000644�0001750�0000144�00000002305�15104114162�022256� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Based on AUR doublecmd-qt-svn package # https://aur.archlinux.org/packages/doublecmd-qt-svn # # Maintainer: ValHue <vhuelamo at gmail dot com> # https://github.com/ValHue/AUR-PKGBUILDs # # Contributor: Stanislav GE <ginermail at gmail dot com> _pkgname="doublecmd" pkgname=("${_pkgname}-qt-svn") pkgver=r6754 pkgrel=1 pkgdesc="Twin-panel (commander-style) file manager (Qt)" url="https://doublecmd.sourceforge.io/" arch=('i686' 'x86_64') license=('GPL2') depends=('qt4pas') install="${_pkgname}-svn.install" makedepends=('lazarus' 'fpc' 'subversion') optdepends=( 'lua51: scripting' 'p7zip: support for 7zip archives' 'libunrar: support for rar archives' ) options=('!strip') provides=(${_pkgname}-qt) conflicts=('doublecmd-qt' 'doublecmd-gtk2' 'doublecmd-gtk2-svn' 'doublecmd-gtk2-alpha-bin') pkgver() { cd "${srcdir}" local ver="$(cat revision.txt)" printf "r%s" "${ver//[[:alpha:]]}" } prepare() { cd "${srcdir}" sed -e 's/LIB_SUFFIX=.*/LIB_SUFFIX=/g' -i install/linux/install.sh } build() { msg 'Build Qt' cd "${srcdir}" ./build.sh release qt } package() { cd "${srcdir}" install/linux/install.sh --install-prefix="${pkgdir}" } # vim:set ts=4 sw=2 ft=sh et:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/pkg/doublecmd-gtk2.pkgbuild������������������������������������������0000644�0001750�0000144�00000002315�15104114162�022502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Based on AUR doublecmd-gtk2-svn package # https://aur.archlinux.org/packages/doublecmd-gtk2-svn # # Maintainer: ValHue <vhuelamo at gmail dot com> # https://github.com/ValHue/AUR-PKGBUILDs # # Contributor: Stanislav GE <ginermail at gmail dot com> _pkgname="doublecmd" pkgname=("${_pkgname}-gtk2-svn") pkgver=r6754 pkgrel=1 pkgdesc="Twin-panel (commander-style) file manager (GTK)" url="https://doublecmd.sourceforge.io/" arch=('i686' 'x86_64') license=('GPL2') depends=('gtk2') install="${_pkgname}-svn.install" makedepends=('lazarus' 'fpc' 'subversion') optdepends=( 'lua51: scripting' 'p7zip: support for 7zip archives' 'libunrar: support for rar archives' ) options=('!strip') provides=(${_pkgname}-gtk2) conflicts=('doublecmd-gtk2' 'doublecmd-gtk2-alpha-bin' 'doublecmd-qt' 'doublecmd-qt-svn') pkgver() { cd "${srcdir}" local ver="$(cat revision.txt)" printf "r%s" "${ver//[[:alpha:]]}" } prepare() { cd "${srcdir}" sed -e 's/LIB_SUFFIX=.*/LIB_SUFFIX=/g' -i install/linux/install.sh } build() { msg 'Build GTK' cd "${srcdir}" ./build.sh release gtk2 } package() { cd "${srcdir}" install/linux/install.sh --install-prefix="${pkgdir}" } # vim:set ts=4 sw=2 ft=sh et:�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/org.doublecmd.root.policy��������������������������������������������0000644�0001750�0000144�00000001556�15104114162�022330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Double Commander</vendor> <vendor_url>https://doublecmd.sourceforge.io</vendor_url> <action id="org.doublecmd.root"> <description>Run Double Commander with elevated privileges</description> <message>Please enter your password to run Double Commander as root</message> <icon_name>doublecmd</icon_name> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_admin_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/doublecmd</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig> ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/lib/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016140� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/lib/readme.txt�������������������������������������������������������0000644�0001750�0000144�00000000311�15104114162�020131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Before create packages (before run create_packages.sh) copy in this directory third-party libraries: - libunrar.so - needed for unrar plugin - libqt4intf.so - needed for qt4 version of Double Commander�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/install.sh�����������������������������������������������������������0000755�0001750�0000144�00000015234�15104114162�017404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash set -e # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi # Determine library directory if [[ "$CPU_TARGET" == *"64" ]] && [ ! -f "/etc/debian_version" ] then LIB_SUFFIX=64 else LIB_SUFFIX= fi # Parse input parameters CKNAME=$(basename "$0") args=$(getopt -n $CKNAME -o P:,I: -l portable-prefix:,install-prefix:,default -- "$@") eval set -- $args for A do case "$A" in --) DC_INSTALL_DIR=/usr/lib$LIB_SUFFIX/doublecmd ;; -P|--portable-prefix) shift CK_PORTABLE=1 DC_INSTALL_DIR=$(eval echo $1/doublecmd) break ;; -I|--install-prefix) shift DC_INSTALL_PREFIX=$(eval echo $1) DC_INSTALL_DIR=$DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX/doublecmd break ;; esac shift done mkdir -p $DC_INSTALL_DIR mkdir -p $DC_INSTALL_DIR/plugins # WCX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wcx mkdir -p $DC_INSTALL_DIR/plugins/wcx/base64 mkdir -p $DC_INSTALL_DIR/plugins/wcx/cpio mkdir -p $DC_INSTALL_DIR/plugins/wcx/deb mkdir -p $DC_INSTALL_DIR/plugins/wcx/rpm mkdir -p $DC_INSTALL_DIR/plugins/wcx/unrar mkdir -p $DC_INSTALL_DIR/plugins/wcx/zip # WDX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/scripts mkdir -p $DC_INSTALL_DIR/plugins/wdx/rpm_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/deb_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/audioinfo # WFX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wfx mkdir -p $DC_INSTALL_DIR/plugins/wfx/ftp mkdir -p $DC_INSTALL_DIR/plugins/wfx/samba # WLX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wlx mkdir -p $DC_INSTALL_DIR/plugins/wlx/wlxmplayer # DSX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/dsx mkdir -p $DC_INSTALL_DIR/plugins/dsx/dsxlocate # Copy files cp -a doublecmd $DC_INSTALL_DIR/ cp -a doublecmd.help $DC_INSTALL_DIR/ cp -a doublecmd.zdli $DC_INSTALL_DIR/ cp -a pinyin.tbl $DC_INSTALL_DIR/ # Copy default settings cp -r default $DC_INSTALL_DIR/ # copy plugins # WCX install -m 644 plugins/wcx/base64/base64.wcx $DC_INSTALL_DIR/plugins/wcx/base64/ install -m 644 plugins/wcx/cpio/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ cp -r plugins/wcx/unrar/language $DC_INSTALL_DIR/plugins/wcx/unrar install -m 644 plugins/wcx/unrar/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ cp -r plugins/wcx/zip/language $DC_INSTALL_DIR/plugins/wcx/zip install -m 644 plugins/wcx/zip/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/deb_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/deb_wdx/ install -m 644 plugins/wdx/scripts/* $DC_INSTALL_DIR/plugins/wdx/scripts/ install -m 644 plugins/wdx/audioinfo/audioinfo.wdx $DC_INSTALL_DIR/plugins/wdx/audioinfo/ install -m 644 plugins/wdx/audioinfo/audioinfo.lng $DC_INSTALL_DIR/plugins/wdx/audioinfo/ # WFX cp -r plugins/wfx/ftp/language $DC_INSTALL_DIR/plugins/wfx/ftp install -m 644 plugins/wfx/ftp/ftp.wfx $DC_INSTALL_DIR/plugins/wfx/ftp/ install -m 644 plugins/wfx/ftp/src/ftp.ico $DC_INSTALL_DIR/plugins/wfx/ftp/ install -m 644 plugins/wfx/samba/samba.wfx $DC_INSTALL_DIR/plugins/wfx/samba/ # WLX install -m 644 plugins/wlx/WlxMplayer/wlxmplayer.wlx $DC_INSTALL_DIR/plugins/wlx/wlxmplayer/ # DSX install -m 644 plugins/dsx/DSXLocate/dsxlocate.dsx $DC_INSTALL_DIR/plugins/dsx/dsxlocate/ if [ -z $CK_PORTABLE ] then # Copy libraries install -d $DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX if [ "$(echo *.so*)" != "*.so*" ]; then install -m 644 *.so* $DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX fi # Create directory for platform independed files install -d $DC_INSTALL_PREFIX/usr/share/doublecmd # Copy man files install -d -m 755 $DC_INSTALL_PREFIX/usr/share/man/man1 install -c -m 644 install/linux/*.1 $DC_INSTALL_PREFIX/usr/share/man/man1 # Copy documentation install -d $DC_INSTALL_PREFIX/usr/share/doublecmd/doc install -m 644 doc/*.txt $DC_INSTALL_PREFIX/usr/share/doublecmd/doc ln -sf ../../share/doublecmd/doc $DC_INSTALL_DIR/doc # Copy scripts install -d $DC_INSTALL_DIR/scripts cp -a scripts/*.py $DC_INSTALL_DIR/scripts/ # Copy languages cp -r language $DC_INSTALL_PREFIX/usr/share/doublecmd ln -sf ../../share/doublecmd/language $DC_INSTALL_DIR/language # Copy pixmaps cp -r pixmaps $DC_INSTALL_PREFIX/usr/share/doublecmd ln -sf ../../share/doublecmd/pixmaps $DC_INSTALL_DIR/pixmaps # Copy highlighters cp -r highlighters $DC_INSTALL_PREFIX/usr/share/doublecmd ln -sf ../../share/doublecmd/highlighters $DC_INSTALL_DIR/highlighters # Create symlink and desktop files install -d $DC_INSTALL_PREFIX/usr/bin install -d $DC_INSTALL_PREFIX/usr/share/pixmaps install -d $DC_INSTALL_PREFIX/usr/share/applications install -d $DC_INSTALL_PREFIX/usr/share/icons/hicolor/scalable/apps ln -sf ../lib$LIB_SUFFIX/doublecmd/doublecmd $DC_INSTALL_PREFIX/usr/bin/doublecmd install -m 644 doublecmd.png $DC_INSTALL_PREFIX/usr/share/pixmaps/doublecmd.png install -m 644 install/linux/doublecmd.desktop $DC_INSTALL_PREFIX/usr/share/applications/doublecmd.desktop ln -sf ../../../../doublecmd/pixmaps/mainicon/alt/dcfinal.svg \ $DC_INSTALL_PREFIX/usr/share/icons/hicolor/scalable/apps/doublecmd.svg install -d $DC_INSTALL_PREFIX/usr/share/polkit-1/actions install -m 644 install/linux/org.doublecmd.root.policy $DC_INSTALL_PREFIX/usr/share/polkit-1/actions/ else # Make portable version mkdir $DC_INSTALL_DIR/settings touch $DC_INSTALL_DIR/settings/doublecmd.inf # Copy documentation mkdir -p $DC_INSTALL_DIR/doc cp -a doc/*.txt $DC_INSTALL_DIR/doc/ # Copy script for execute portable version cp -a doublecmd.sh $DC_INSTALL_DIR/ # Copy directories cp -r language $DC_INSTALL_DIR/ cp -r pixmaps $DC_INSTALL_DIR/ cp -r highlighters $DC_INSTALL_DIR/ # Copy scripts install -d $DC_INSTALL_DIR/scripts cp -a scripts/*.py $DC_INSTALL_DIR/scripts/ # Copy libraries install -m 644 *.so* $DC_INSTALL_DIR/ # Copy DC icon cp -a doublecmd.png $DC_INSTALL_DIR/doublecmd.png fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/doublecmd.desktop����������������������������������������������������0000755�0001750�0000144�00000001052�15104114162�020724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Name=Double Commander GenericName=File Manager Comment=Double Commander is a cross platform open source file manager with two panels side by side. Terminal=false Icon=doublecmd Exec=doublecmd %F Type=Application MimeType=inode/directory; Categories=Utility;FileTools;FileManager; Keywords=folder;manager;explore;disk;filesystem;orthodox;copy;queue;queuing;operations; Comment[ru]=Double Commander — это кроссплатформенный двухпанельный файловый менеджер с открытым кодом. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/doublecmd.1����������������������������������������������������������0000644�0001750�0000144�00000004300�15104114162�017407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.TH "doublecmd" "1" "6 June 2018" "Double Commander" .SH NAME doublecmd \- Twin-panel (commander-style) file manager. .SH SYNOPSIS .\" General .B doublecmd [\-C] [\-T] [\-P L|R] [ .I path1 ] [ .I path2 ] .br .\" Alternative form .B doublecmd [\-C] [\-T] [\-P L|R] [\-L .I path1 ] [\-R .I path2 ] .SH DESCRIPTION Double Commander is a free cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. .SH OPTIONS The switches are NOT case sensitive. .TP .B "<path1> [<path2>]" If one path passed then load it into the active panel. If two paths are passed then load first path into left panel and second in the right panel. .br Directory names containing spaces must be put in double quotes. .br Always specify the full path name. .TP .B "\-C, \-\-client" If Double Commander is already running, activate it and pass the path(s) in the command line to that instance. .TP .B "\-L <path>" Set directory to show in the left panel. .TP .B "\-R <path>" Set directory to show in the right panel. .TP .B "\-P L|R" Sets the active panel when program starts: .B \-P L for left and .B \-P R for right. .TP .B "\-T" Opens the passed directory(ies) in new tab(s) .TP .B "\-\-config\-dir=<path>" Set custom directory path with Double Commander configurations files. .br Default is $HOME/.config/doublecmd. .TP .B "\-\-servername=x" Sets the name of the instance (server) Double Commander, which can then be used to pass parameters. .br If there is no already existing instance, then create it. .br If there is already existing instance, and the current one is a client, then send params to the server (i.e. to the existing instance). .br If there is already existing instance, and the current one is not a client, (i.e. "Allow only one copy of DC at a time" is false and no .B \-\-client / .B \-c options were given), then user-provided servername is altered: firstly, just add a trailing number "2". .br If there is already some trailing number, then increase it by 1, until we found a servername that isn't busy yet, and then create instance with this servername. .TP .B "\-\-no\-splash" Disables the splash screen at startup DC. .SH Homepage https://doublecmd.sourceforge.io ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/description-pak������������������������������������������������������0000755�0001750�0000144�00000000234�15104114162�020413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016124� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017742� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/watch���������������������������������������������������0000644�0001750�0000144�00000000155�15104114162�020774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������version=3 http://www.rarlab.com/rar_add.htm http://www.rarlab.com/rar/unrarsrc-(.*)\.tar\.gz debian uupdate �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/source/�������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021242� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/source/format�������������������������������������������0000644�0001750�0000144�00000000014�15104114162�022450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/shlibs��������������������������������������������������0000644�0001750�0000144�00000000014�15104114162�021144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libunrar 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/rules���������������������������������������������������0000755�0001750�0000144�00000001775�15104114162�021034� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/make -f # Made with the aid of dh_make, by Petr Cech. # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Christoph Lameter. build: dh_testdir make lib CXXFLAGS+="-fPIC -DSILENT" LDFLAGS+="-Wl,-soname,libunrar.so.0" clean: dh_testdir dh_testroot make clean rm -f libunrar.so dh_clean # Build architecture-independent files here. binary-indep: build # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build dh_testdir dh_testroot dh_prep dh_installdirs install -o root -g root -s -m 0644 libunrar.so debian/libunrar/usr/lib install -m 0644 debian/lintian/libunrar debian/libunrar/usr/share/lintian/overrides dh_link usr/lib/libunrar.so usr/lib/libunrar.so.0 dh_installdocs dh_installchangelogs dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary ���doublecmd-1.1.30/install/linux/deb/libunrar/postrm��������������������������������������������������0000755�0001750�0000144�00000000137�15104114162�021215� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e if [ "$1" = "remove" ]; then ldconfig /usr/lib/libunrar.so fi #DEBHELPER# ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/postinst������������������������������������������������0000755�0001750�0000144�00000000076�15104114162�021556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e ldconfig /usr/lib/libunrar.so #DEBHELPER# ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/lintian/������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021400� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/lintian/libunrar����������������������������������������0000644�0001750�0000144�00000000054�15104114162�023140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libunrar: package-name-doesnt-match-sonames ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/dirs����������������������������������������������������0000644�0001750�0000144�00000000044�15104114162�020624� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������usr/lib usr/share/lintian/overrides ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/copyright�����������������������������������������������0000644�0001750�0000144�00000004602�15104114162�021677� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This package was debianized by Petr Cech <cech@debian.org> on Thu, 16 Mar 2000 18:51:33 +0100. Further modifications have been made by Chris Anderson <chris@nullcode.org> on Wed Aug 25 19:03:47 EDT 2004 It was downloaded from http://www.rarlabs.com/rar_add.htm Copyright: Copyright (c) 1993-2005 Alexander L. Roshal NOTE: this software is non-free, therefore carefully read this license before doing anything with it. In particular, this source code may not be used for recreating the rar compression algorithm. Full license follows: ****** ***** ****** UnRAR - free utility for RAR archives ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ****** ******* ****** License for use and distribution of ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ** ** ** ** ** ** FREE portable version ~~~~~~~~~~~~~~~~~~~~~ The source code of UnRAR utility is freeware. This means: 1. All copyrights to RAR and the utility UnRAR are exclusively owned by the author - Alexander Roshal. 2. The UnRAR sources may be used in any software to handle RAR archives without limitations free of charge, but cannot be used to re-create the RAR compression algorithm, which is proprietary. Distribution of modified UnRAR sources in separate form or as a part of other software is permitted, provided that it is clearly stated in the documentation and source comments that the code may not be used to develop a RAR (WinRAR) compatible archiver. 3. The UnRAR utility may be freely distributed. It is allowed to distribute UnRAR inside of other software packages. 4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE. 5. Installing and using the UnRAR utility signifies acceptance of these terms and conditions of the license. 6. If you don't agree with terms of the license you must remove UnRAR files from your storage devices and cease to use the utility. Thank you for your interest in RAR and UnRAR. Alexander L. Roshal This package is auto-buildable ������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/control�������������������������������������������������0000644�0001750�0000144�00000001051�15104114162�021342� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Source: unrar-nonfree Section: non-free/utils Priority: optional Maintainer: Alexander Koblov <alexx2000@mail.ru> Homepage: http://www.rarlabs.com Build-Depends: debhelper (>= 7) Standards-Version: 3.8.4 XS-Autobuild: yes Package: libunrar Section: non-free/libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Unarchiver for .rar files (non-free version) - shared library Unrar can extract files from .rar archives. If you want to create .rar archives, install package rar. . This package includes the dynamic library. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/compat��������������������������������������������������0000644�0001750�0000144�00000000002�15104114162�021140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������7 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/libunrar/changelog�����������������������������������������������0000644�0001750�0000144�00000000224�15104114162�021612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unrar-nonfree (5.2.2-0) unstable; urgency=low * Non-maintainer upload -- Alexander Koblov <alexx2000@mail.ru> Sat, 29 Nov 2014 23:04:07 +0300 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/�������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020062� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/watch��������������������������������������������������0000644�0001750�0000144�00000000144�15104114162�021112� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������version=3 http://sf.net/doublecmd/doublecmd-(\d\S*)-src\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/source/������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021362� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/source/format������������������������������������������0000644�0001750�0000144�00000000015�15104114162�022571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/rules��������������������������������������������������0000755�0001750�0000144�00000006116�15104114162�021146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/make -f # Set temporary HOME for lazarus primary config directory export HOME=$(CURDIR)/tmphome %: dh $@ override_dh_install: # Remove convenience copy of Free Pascal Qt4 binding, use libqt4pas-dev instead rm -f plugins/wlx/WlxMplayer/src/qt4.pas # Build GTK2 version ./build.sh release gtk2 ./install/linux/install.sh --install-prefix=$(CURDIR)/debian/doublecmd-common ./clean.sh # Build Qt5 version ./build.sh release qt5 ./install/linux/install.sh --install-prefix=$(CURDIR)/debian/doublecmd-qt-temp ./clean.sh # Separate GTK2-specific files mkdir -p $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/plugins mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/doublecmd $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/ mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/plugins/wlx $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/plugins/ mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/doublecmd.zdli $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/ # Separate Qt5-specific files mkdir -p $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/plugins mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/doublecmd $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/ mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/plugins/wlx $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/plugins/ mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/doublecmd.zdli $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/ rm -rf $(CURDIR)/debian/doublecmd-qt-temp/ # Separate plugins mkdir -p $(CURDIR)/debian/doublecmd-plugins/usr/lib/doublecmd mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/plugins $(CURDIR)/debian/doublecmd-plugins/usr/lib/doublecmd # Clean up common files rm -rf $(CURDIR)/debian/doublecmd-common/usr/share/doublecmd/doc find $(CURDIR)/debian/doublecmd-common/usr/share/ -type f | xargs chmod a-x ; # Install icons for AppStream rm -rf $(CURDIR)/debian/doublecmd-common/usr/share/pixmaps/ rm -f $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/scalable/apps/doublecmd.svg cp $(CURDIR)/debian/doublecmd-common/usr/share/doublecmd/pixmaps/mainicon/alt/dcfinal.svg $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/scalable/apps/doublecmd.svg mkdir -p $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/128x128/apps cp $(CURDIR)/debian/doublecmd-common/usr/share/doublecmd/pixmaps/mainicon/alt/128px-dcfinal.png $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/128x128/apps/doublecmd.png mkdir -p $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/256x256/apps cp $(CURDIR)/debian/doublecmd-common/usr/share/doublecmd/pixmaps/mainicon/alt/256px-dcfinal.png $(CURDIR)/debian/doublecmd-common/usr/share/icons/hicolor/256x256/apps/doublecmd.png dh_install override_dh_strip: # Strip plugins because dh_strip cannot handle non-standard extensions (bug #35733) find $(CURDIR)/debian/doublecmd-*/usr/lib/doublecmd/plugins/ -name '*.w?x' -o -name '*.dsx' | \ xargs strip --remove-section=.comment --strip-unneeded ; dh_strip override_dh_clean: ./clean.sh # Clean up temporary HOME rm -rf $(CURDIR)/tmphome dh_clean ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/doublecmd-qt.lintian-overrides�������������������������0000644�0001750�0000144�00000000343�15104114162�026022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# From names of objects in lcl-units, not visible to the user doublecmd-qt: spelling-error-in-binary usr/lib/doublecmd/doublecmd Childs Children doublecmd-qt: spelling-error-in-binary usr/lib/doublecmd/doublecmd aCount account ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/doublecmd-plugins.lintian-overrides��������������������0000644�0001750�0000144�00000000573�15104114162�027064� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# These are plugins, not shared libraries doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/dsx/dsxlocate/dsxlocate.dsx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wdx/deb_wdx/deb_wdx.wdx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wdx/rpm_wdx/rpm_wdx.wdx �������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/doublecmd-gtk.lintian-overrides������������������������0000644�0001750�0000144�00000000472�15104114162�026166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# From names of objects in lcl-units, not visible to the user doublecmd-gtk: spelling-error-in-binary usr/lib/doublecmd/doublecmd Childs Children doublecmd-gtk: spelling-error-in-binary usr/lib/doublecmd/doublecmd occured occurred doublecmd-gtk: spelling-error-in-binary usr/lib/doublecmd/doublecmd aCount account ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/copyright����������������������������������������������0000644�0001750�0000144�00000044404�15104114162�022023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Double Commander Upstream-Contact: Alexander Koblov <alexx2000@mail.ru> Source: https://doublecmd.sourceforge.io/ Files: * Copyright: 2006-2020 Alexander Koblov <alexx2000@mail.ru> 2008 Dmitry Kolomiets <B4rr4cuda@rambler.ru> 2009-2013 Przemysław Nagay <cobines@gmail.com> License: GPL-2.0+ Files: components/CmdLine/* Copyright: 2007 Julian Schutsch <julian@julian-schutsch.de> License: GPL-3.0+ Files: components/lclextensions/* Copyright: 2007 Luiz Américo Pereira Câmara <pascalive@bol.com.br> License: LGPL-2.0+ Files: components/dcpcrypt/* Copyright: 1999-2002 David Barton <crypto@cityinthesky.co.uk> License: X11 Files: components/dcpcrypt/Hashes/Private/* components/dcpcrypt/Random/isaac.pas Copyright: 2002-2017 Wolfgang Ehrhardt <info@wolfgang-ehrhardt.de> License: Zlib Files: components/multithreadprocs/* Copyright: 2008 Mattias Gaertner <mattias@freepascal.org> License: LGPL-2.1+ Files: components/gifanim/* Copyright: 2009 Laurent Jacques License: GPL-2.0+ Files: components/virtualtreeview/* Copyright: 2000-2003 Mike Lischke <public@delphi-gems.com> 2002-2004 Ralf Junker <delphi@zeitungsjunge.de> 2007 Marco Zehe <marco.zehe@googlemail.com> License: MPL-1.1 or LGPL-2.1+ Files: components/viewer/viewercontrol.pas Copyright: 2003-2004 Radek Červinka <radek.cervinka@centrum.cz> 2006-2013 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: components/viewer/MappingFile.pas Copyright: 2005 Razumikhin Dmitry <razumikhin_d@mail.ru> License: LGPL-2.0+ Files: components/chsdet/* Copyright: 2006 Nick Yakowlew <ya_nick@users.sourceforge.net> License: LGPL-2.1+ Files: libraries/src/libbz2/* plugins/wcx/zip/src/fparchive/abbzip2.pas Copyright: 1996-2010 Julian Seward <jseward@bzip.org> License: BSD-4-clause~bzip2 Files: plugins/wfx/ftp/synapse/* Copyright: 1999-2012 Lukas Gebauer License: BSD-3-clause Files: plugins/wfx/ftp/synapse/ssl_winssl_lib.pas Copyright: 2008 Boris Krasnovskiy 2013 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: plugins/wfx/ftp/synapse/ssl_gnutls_lib.pas Copyright: 2002 Andrew McDonald <andrew@mcdonald.org.uk> 2004-2006 Free Software Foundation 2013 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: plugins/wfx/ftp/src/* src/platform/unix/ujpegthumb.pas src/platform/unix/ukeyfile.pas src/platform/unix/upython.pas components/doublecmd/dcntfslinks.pas src/platform/win/uthumbnailprovider.pas Copyright: 2009-2017 Alexander Koblov <alexx2000@mail.ru> License: LGPL-2.1+ Files: plugins/wdx/deb_wdx/src/minigzip.pas Copyright: 1995-1998 Jean-loup Gailly 1998 Jacques Nomssi Nzali License: Zlib Files: plugins/wdx/deb_wdx/src/deb_wdx_intf.pas Copyright: 2005 Ralgh Young <yang.guilong@gmail.com> License: GPL-2.0+ Files: plugins/wfx/gvfs/* Copyright: 2008-2009 Tomas Bzatek <tbzatek@users.sourceforge.net> 2009-2010 Alexander Koblov <alexx2000@mail.ru> License: LGPL-2.0+ Files: plugins/wdx/rpm_wdx/* plugins/wcx/rpm/* plugins/wcx/cpio/* Copyright: 2000-2002 Mandryka Yurij <braingroup@hotmail.ru> 2007 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: plugins/wcx/sevenzip/* Copyright: 2014-2015 Alexander Koblov <alexx2000@mail.ru> License: LGPL-2.1+ Files: plugins/wcx/sevenzip/src/jcl/common/JclCompression.pas Copyright: 2004-2014 Matthias Thoma, Olivier Sannie (obones), Florent Ouchet (outchy), Jan Goyvaerts (jgsoft), Uwe Schuster (uschuster) License: MPL-1.1 or LGPL-2.1+ Files: plugins/wcx/sevenzip/src/jcl/windows/sevenzip.pas plugins/wcx/zip/src/lzma/* Copyright: 1999-2008 Igor Pavlov License: LGPL-2.1+ Files: plugins/wcx/unbz2/bzip2/bzip2.pas Copyright: 2002 by Daniel Mantione 2007-2009 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: plugins/wcx/zip/src/fparchive/* plugins/wcx/zip/src/ZipApp.pas Copyright: 1997-2002 TurboPower Software 2007-2012 Alexander Koblov <alexx2000@mail.ru> License: MPL-1.1 Files: plugins/wcx/zip/src/fparchive/abxz.pas Copyright: 2014-2015 Alexander Koblov <alexx2000@mail.ru> License: X11 Files: plugins/wlx/WlxMplayer/src/qt4.pas Copyright: 2005-2011 Jan Van hijfte License: LGPL-3.0+ Files: scripts/rabbit-vcs.py Copyright: 2009 Jason Heeris <jason.heeris@gmail.com> 2009 Bruce van der Kooij <brucevdkooij@gmail.com> 2009 Adam Plumb <adamplumb@gmail.com> 2014 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: src/platform/unix/linux/uudev.pas Copyright: 2008 David Zeuthen <david@fubar.dk> 2014 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: src/platform/unix/uusersgroups.pas Copyright: 2003 Martin Matusu <xmat@volny.cz> License: GPL-2.0+ Files: src/platform/unix/mime/umimetype.pas Copyright: 2007 Houng Jen Yee (PCMan) <pcman.tw@gmail.com> 2014-2015 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: src/platform/win/ugdiplus.pas Copyright: 2008 Alexander Koblov <alexx2000@mail.ru> License: LGPL-2.0+ Files: src/fsyncdirsdlg.pas Copyright: 2013 Anton Panferov <ast.a_s@mail.ru> 2014 Alexander Koblov <alexx2000@mail.ru> License: GPL-2.0+ Files: src/synhighlighterlua.pas Copyright: 2005 Zhou Kan <textrush@tom.com> License: MPL-1.1 or GPL-2.0+ Files: src/uhighlighterprocs.pas Copyright: 2000 Michael Hieke License: MPL-1.1 or GPL-2.0+ Files: src/uparitercontrols.pas Copyright: 2004 Flavio Etrusco 2011 Alexander Koblov <alexx2000@mail.ru> License: BSD-2-clause Files: src/ufindthread.pas src/ffileproperties.pas src/uColorExt.pas src/ufindfiles.pas src/uglobs.pas src/fFindDlg.pas src/fmain.pas Copyright: 2002 Peter Cernoch <pcernoch@volny.cz> 2003-2004 Radek Červinka <radek.cervinka@centrum.cz> 2003 Martin Matusu <xmat@volny.cz> 2006-2012 Alexander Koblov <alexx2000@mail.ru> 2008 Dmitry Kolomiets <B4rr4cuda@rambler.ru> 2008 Vitaly Zotov <vitalyzotov@mail.ru> 2010 Przemysław Nagay <cobines@gmail.com> License: GPL-2.0+ Files: src/udiffond.pas src/udiffonp.pas Copyright: 2001-2009 Angus Johnson <angusj@myrealbox.com> License: other~tdiff The code in the TDiff component is released as freeware provided you agree to the following terms & conditions: 1. the copyright notice, terms and conditions are left unchanged 2. modifications to the code by other authors must be clearly documented and accompanied by the modifier's name. 3. the TDiff component may be freely compiled into binary format and no acknowledgement is required. However, a discrete acknowledgement would be appreciated (eg. in a program's 'About Box'). Files: src/uresample.pas Copyright: 1997-1998 Anders Melander <anders@melander.dk> 2009 Alexander Koblov <alexx2000@mail.ru> License: other~uresample This software is copyrighted as noted above. It may be freely copied, modified, and redistributed, provided that the copyright notice(s) is preserved on all copies. . There is no warranty or other guarantee of fitness for this software, it is provided solely "as is". Bug reports or fixes may be sent to the author, who may or may not act on them as he desires. . You may not include this software in a program or other software product without supplying the source, or without informing the end-user that the source is available for no extra charge. . If you modify this software, you should include a notice in the "Revision history" section giving the name of the person performing the modification, the date of modification, and the reason for such modification. Files: debian/* Copyright: 2010-2013 Alexander Koblov <alexx2000@mail.ru> 2013-2020 Graham Inggs <ginggs@debian.org> License: GPL-2.0+ License: GPL-2.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package 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 General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/> . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". License: GPL-3.0+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package 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 General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: LGPL-2.0+ This package 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 of the License, or (at your option) any later version. . This package 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2". License: LGPL-2.1+ This package 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 package 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2.1". License: LGPL-3.0+ This package 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 3 of the License, or (at your option) any later version. . This package 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-3". License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-4-clause~bzip2 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. . 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. . 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: MPL-1.1 The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ . Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. License: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: Zlib This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. . Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: . 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/control������������������������������������������������0000644�0001750�0000144�00000006172�15104114162�021473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Source: doublecmd Section: utils Priority: optional Maintainer: Pascal Packaging Team <pkg-pascal-devel@lists.alioth.debian.org> Uploaders: Graham Inggs <ginggs@debian.org> Build-Depends: debhelper (>= 9), fp-utils (>= 3.2.0), fpc (>= 3.2.0), lcl (>= 2.2), lcl-gtk2, lcl-qt5, lcl-units, lcl-utils, libbz2-dev, libjpeg-dev, libdbus-1-dev, libglib2.0-dev, libgtk2.0-dev, libqt5pas-dev Standards-Version: 4.5.0 Rules-Requires-Root: no Vcs-Git: https://salsa.debian.org/pascal-team/doublecmd.git Vcs-Browser: https://salsa.debian.org/pascal-team/doublecmd Homepage: https://doublecmd.sourceforge.io Package: doublecmd-gtk Architecture: any Depends: doublecmd-common (= ${source:Version}), doublecmd-plugins (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Provides: doublecmd Conflicts: doublecmd Replaces: doublecmd Description: twin-panel (commander-style) file manager (GTK2) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar5 package from non-free. . This package contains the GTK2 user interface. Package: doublecmd-qt Architecture: any Depends: doublecmd-common (= ${source:Version}), doublecmd-plugins (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Provides: doublecmd Conflicts: doublecmd Replaces: doublecmd Description: twin-panel (commander-style) file manager (Qt5) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar5 package from non-free. . This package contains the Qt5 user interface. Package: doublecmd-plugins Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends} Description: twin-panel (commander-style) file manager (plugins) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar5 package from non-free. . This package contains plugins. Package: doublecmd-common Architecture: all Multi-Arch: foreign Recommends: doublecmd-gtk | doublecmd-qt Depends: desktop-file-utils, ${misc:Depends} Suggests: doublecmd-help-en | doublecmd-help, libffmpegthumbnailer4v5, libunrar5, mplayer, p7zip-full, rabbitvcs-core, xterm | x-terminal-emulator Description: twin-panel (commander-style) file manager Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar-dev package from non-free. . This package contains common files. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/compat�������������������������������������������������0000644�0001750�0000144�00000000002�15104114162�021260� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������9 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/deb/doublecmd/changelog����������������������������������������������0000644�0001750�0000144�00000032644�15104114162�021745� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd (0.9.8-1) unstable; urgency=medium * New upstream release * Refresh debian/patches * Bump Standards-Version to 4.5.0, no changes -- Graham Inggs <ginggs@debian.org> Sun, 09 Feb 2020 09:45:52 +0000 doublecmd (0.9.7-1) unstable; urgency=medium * New upstream release * Update debian/copyright * Bump Standards-Version to 4.4.1, no changes -- Graham Inggs <ginggs@debian.org> Sun, 12 Jan 2020 08:24:36 +0000 doublecmd (0.9.6-1) unstable; urgency=medium * New upstream release * Enable dh_dwz now that #933541 is fixed -- Graham Inggs <ginggs@debian.org> Thu, 05 Sep 2019 16:58:32 +0000 doublecmd (0.9.5-1) unstable; urgency=medium * New upstream release * Bump Standards-Version to 4.4.0, no changes -- Graham Inggs <ginggs@debian.org> Wed, 10 Jul 2019 11:05:40 +0000 doublecmd (0.9.3-2) unstable; urgency=medium * Switch to debhelper 12 and disable dh_dwz * Set Rules-Requires-Root: no * Upload to unstable -- Graham Inggs <ginggs@debian.org> Thu, 04 Jul 2019 23:03:40 +0000 doublecmd (0.9.3-1) experimental; urgency=medium * New upstream release - Fix insecure use of /tmp (Closes: #926223) * Refresh patches * Add ${shlibs:Depends} to dependencies of doublecmd-plugins * Drop unused Lintian overrides -- Graham Inggs <ginggs@debian.org> Mon, 20 May 2019 12:03:30 +0000 doublecmd (0.9.2-1) experimental; urgency=medium * New upstream release * Drop libunrar5.patch, no longer needed -- Graham Inggs <ginggs@debian.org> Tue, 02 Apr 2019 09:22:22 +0000 doublecmd (0.9.1-1) unstable; urgency=medium * New upstream release * Update debian/copyright * Suggest libunrar5 instead of libunrar0 since #720051 is fixed * Suggest libffmpegthumbnailer4v5 instead of libffmpegthumbnailer4 * Drop obsolete Breaks/Replaces on doublecmd-*-dbg packages -- Graham Inggs <ginggs@debian.org> Sun, 24 Feb 2019 07:03:41 +0000 doublecmd (0.9.0-1) unstable; urgency=medium * New upstream release * Drop skip-qt5workaround-on-arm.patch, refresh remaining * Install icons for AppStream * Bump Standards-Version to 4.3.0, no changes -- Graham Inggs <ginggs@debian.org> Wed, 13 Feb 2019 14:12:07 +0000 doublecmd (0.8.4-2) unstable; urgency=medium * Skip Qt5 workaround on ARM where it causes link failure -- Graham Inggs <ginggs@debian.org> Sat, 29 Sep 2018 11:00:04 +0000 doublecmd (0.8.4-1) unstable; urgency=medium * New upstream release * Refresh disable-splash.patch * Bump Standards-Version to 4.2.1, no changes * Update upstream homepage -- Graham Inggs <ginggs@debian.org> Tue, 25 Sep 2018 18:09:37 +0000 doublecmd (0.8.3-1) unstable; urgency=medium * New upstream release * Drop lazarus1.8.2.patch included upstream * Bump Standards-Version to 4.1.4, no changes -- Graham Inggs <ginggs@debian.org> Thu, 07 Jun 2018 15:29:46 +0000 doublecmd (0.8.2-1) unstable; urgency=medium * New upstream release * Update Vcs-* URIs for move to salsa.debian.org * Fix build with Lazarus 1.8.2 * Update Lintian overrides -- Graham Inggs <ginggs@debian.org> Wed, 07 Mar 2018 14:04:25 +0000 doublecmd (0.8.1-2) unstable; urgency=medium * Minimize build dependencies instead of depending on all of fpc * Update debian/copyright * Turn debhelper up to 11 * Let debhelper strip the binaries now that #35733 is fixed * Bump Standards-Version to 4.1.3, no changes -- Graham Inggs <ginggs@debian.org> Thu, 04 Jan 2018 16:12:36 +0000 doublecmd (0.8.1-1) unstable; urgency=medium * New upstream release * Drop fix-use-of-i386-assembly.patch included upstream -- Graham Inggs <ginggs@debian.org> Mon, 25 Dec 2017 09:48:33 +0000 doublecmd (0.8.0-2) unstable; urgency=medium * Fix FTBFS on non-i386 32-bit architectures -- Graham Inggs <ginggs@debian.org> Sat, 16 Dec 2017 20:13:06 +0000 doublecmd (0.8.0-1) unstable; urgency=medium * New upstream release * Drop patches no longer needed * Update debian/copyright for moved files * Mark doublecmd-common Multi-Arch: foreign * Bump Standards-Version to 4.1.2, no changes -- Graham Inggs <ginggs@debian.org> Sat, 16 Dec 2017 12:40:20 +0000 doublecmd (0.8.0~svn7787-1) unstable; urgency=medium * New upstream snapshot * Fix various spelling and grammar errors reported by Lintian * Update Lintian overrides * Update debian/copyright * Bump Standards-Version to 4.1.0, no changes -- Graham Inggs <ginggs@debian.org> Wed, 20 Sep 2017 14:43:04 +0000 doublecmd (0.8.0~svn7711-1) unstable; urgency=medium * New upstream snapshot - fix build with Lazarus 1.7 (Closes: #868288) - add support for Qt5 * Refresh patches * Switch from Qt4 to Qt5 * Stop generating text changelog from upstream HTML changelog * Bump Standards-Version to 4.0.0, no further changes * Work around problem extracting debug info on the buildds -- Graham Inggs <ginggs@debian.org> Wed, 26 Jul 2017 17:54:32 +0200 doublecmd (0.7.8-1) experimental; urgency=medium * New upstream release. * Update debian/copyright. * Switch to debhelper 10. -- Graham Inggs <ginggs@debian.org> Sat, 11 Mar 2017 11:09:06 +0200 doublecmd (0.7.7-1) unstable; urgency=medium * New upstream release. * Refresh patches. * Update debian/copyright. * Update Lintian overrides for doublecmd-plugins. -- Graham Inggs <ginggs@debian.org> Wed, 28 Dec 2016 09:13:27 +0200 doublecmd (0.7.6-1) unstable; urgency=medium * New upstream release. * Refresh patches. * Replace Suggests: mplayer2 with Suggests: mplayer. (Closes: #841190) -- Graham Inggs <ginggs@debian.org> Sun, 30 Oct 2016 10:23:07 +0200 doublecmd (0.7.5-1) unstable; urgency=medium * New upstream release. -- Graham Inggs <ginggs@debian.org> Fri, 23 Sep 2016 14:00:38 +0200 doublecmd (0.7.4-1) unstable; urgency=medium * New upstream release. * Update Lintian overrides. -- Graham Inggs <ginggs@debian.org> Tue, 06 Sep 2016 12:07:12 +0200 doublecmd (0.7.3-1) unstable; urgency=medium * New upstream release. * Drop fix-spelling-errors.patch, included upstream. -- Graham Inggs <ginggs@debian.org> Tue, 19 Jul 2016 11:19:17 +0200 doublecmd (0.7.2-1) unstable; urgency=medium * New upstream release. * Drop debian/clean, included upstream. * Update fix-spelling-errors.patch, partially included upstream. * Bump Standards-Version to 3.9.8, no further changes. -- Graham Inggs <ginggs@debian.org> Mon, 13 Jun 2016 13:08:12 +0200 doublecmd (0.7.1-2) unstable; urgency=medium * Remove doublecmd-*-dbg packages, they contained no debug symbols. * Move doublecmd.zdli files from doublecmd-*-dbg packages. * Add breaks/replaces against old doublecmd-*-dbg packages. * Add plugins/wcx/zip/lib/abresstring.rsj to debian/clean. * Update Lintian overrides. * Fix various spelling and grammar errors reported by Lintian. -- Graham Inggs <ginggs@debian.org> Thu, 07 Apr 2016 13:04:12 +0200 doublecmd (0.7.1-1) unstable; urgency=medium * New upstream release. * Drop upstream-fix-arm64-ftbfs.patch, included upstream. -- Graham Inggs <ginggs@debian.org> Tue, 29 Mar 2016 14:56:00 +0200 doublecmd (0.7.0-1) unstable; urgency=medium * New upstream release: - add inode/directory MimeType to doublecmd.desktop (Closes: #807570) - fix scrolling through files with long names is slow (Closes: #807257) - fix FTBFS with FPC 3.0 and Lazarus 1.6 (Closes: #818123) * Fix FTBFS on arm64, thanks Edmund Grimley Evans and Alexander Koblov (Closes: #803984) * Remove doublecmd-common.menu, as per #741573. * Use secure URIs for VCS fields. * Update d/copyright. * Update Lintian overrides for doublecmd-plugins. * Bump Standards-Version to 3.9.7, no further changes. -- Graham Inggs <ginggs@debian.org> Tue, 15 Mar 2016 13:48:55 +0200 doublecmd (0.6.6-1) unstable; urgency=medium * New upstream release. * Let doublecmd-common suggest libffmpegthumbnailer4 (per upstream). * Do not display splash screen at startup. -- Graham Inggs <ginggs@debian.org> Tue, 13 Oct 2015 16:27:23 +0200 doublecmd (0.6.5-2) unstable; urgency=medium * Let doublecmd-common recommend doublecmd-gtk | doublecmd-qt for users who install the -common package by mistake. -- Graham Inggs <ginggs@debian.org> Wed, 07 Oct 2015 16:58:38 +0200 doublecmd (0.6.5-1) unstable; urgency=medium * New upstream release. * Update my email address. -- Graham Inggs <ginggs@debian.org> Tue, 08 Sep 2015 11:47:54 +0200 doublecmd (0.6.4-1) unstable; urgency=medium * New upstream release. * Convert upstream HTML changelog to text and ship it, add Build-Depends on html2text. -- Graham Inggs <graham@nerve.org.za> Mon, 20 Jul 2015 11:51:00 +0200 doublecmd (0.6.2-1) unstable; urgency=medium * New upstream release. * Upload to unstable. * Refresh d/patches/hide-build-info.patch. * Add comments to Lintian overrides. * Update d/copyright with some missed files, fix some spelling and capitalization errors. -- Graham Inggs <graham@nerve.org.za> Tue, 19 May 2015 16:56:20 +0200 doublecmd (0.6.1-1) experimental; urgency=medium * New upstream release. * Drop patches included upstream: - d/patches/clean-plugins-static-libs.patch - d/patches/disable-pic-on-arm.patch - d/patches/fpc-arm-workaround.patch * Update d/copyright for renamed and new files src/udiff*.pas. -- Graham Inggs <graham@nerve.org.za> Tue, 31 Mar 2015 12:07:48 +0200 doublecmd (0.6.0-3) experimental; urgency=medium * Revert patch to not generate debug line info on big-endian architectures. * Work around ARM code generation bug in fpc < 3.0.1. -- Graham Inggs <graham@nerve.org.za> Fri, 27 Feb 2015 14:26:01 +0200 doublecmd (0.6.0-2) experimental; urgency=low * Disable PIC on ARM architectures. * Do not generate debug line info on big-endian architectures. * Update d/control: add Suggests on rabbitvcs-core. * Update d/copyright: new directory libraries/src/libbz2. * Update Lintian overrides. -- Graham Inggs <graham@nerve.org.za> Wed, 18 Feb 2015 11:09:44 +0200 doublecmd (0.6.0-1) experimental; urgency=medium * New upstream release. * Drop d/patches/hide-lazarus-revision.patch included upstream, refresh remaining patches. * New patch d/patches/clean-plugins-static-libs.patch to clean static libs from plugins directories. * Update d/rules: - do not rename files doublecmd.pb.po and doublecmd.zh.po that no longer exist - strip plugins because dh_strip cannot handle non-standard extensions * Update d/copyright: - update copyright years - add copyright information for new file plugins/wcx/zip/fparchive/abxz.pas - remove copyright information for removed directory libraries/src/libmime/ -- Graham Inggs <graham@nerve.org.za> Mon, 16 Feb 2015 14:09:06 +0200 doublecmd (0.5.11-1) unstable; urgency=medium * New upstream release. * Drop patches included upstream, refresh remaining patches. * Update d/rules: - do not delete symlink for doublecmd-help - remove new convenience copy of qt4.pas before building * Update d/copyright: - update copyright years - add copyright information for newly added qt4.pas - use dh_make copyright templates * Update d/control: add Suggests on mplayer2. * Update Lintian overrides. -- Graham Inggs <graham@nerve.org.za> Tue, 07 Oct 2014 15:58:52 +0200 doublecmd (0.5.10-2) unstable; urgency=medium * Add d/patches/hide-lazarus-revision.patch to build without lazarus-src * Update d/control: - drop build-depends on lazarus-src - clean up build-depends on lcl, lcl-gtk2 and lcl-qt4 -- Graham Inggs <graham@nerve.org.za> Mon, 02 Jun 2014 14:04:06 +0200 doublecmd (0.5.10-1) unstable; urgency=medium [ Graham Inggs ] * New upstream release (Closes: #746015) * Refresh d/patches/hide-build-info.patch. [ Paul Gevers ] * Update d/copyright with newly added file * Drop hack in fix_build.sh*.patch and convert it to not build the lazarus components, as that is fixed in Lazarus now. Renamed patch to dont_build_lazarus_components.patch -- Paul Gevers <elbrus@debian.org> Sun, 18 May 2014 15:56:14 +0200 doublecmd (0.5.9-2) unstable; urgency=medium * Tweak fix_build.sh_for_lazarus-1.2.patch, fix FTBFS on i386. -- Graham Inggs <graham@nerve.org.za> Tue, 15 Apr 2014 15:00:27 +0200 doublecmd (0.5.9-1) unstable; urgency=medium [ Graham Inggs ] * New upstream. * Update d/control: - add Depends on desktop-file-utils - update Maintainer and Vcs-* fields for Pascal Packaging Team maintenance * Update d/patches: remove link-with-as-needed.patch and add-keywords-to-desktop-file.patch, included upstream. * Remove unnecessary d/doublecmd-*.dir files. * Do not install /usr/lib/doublecmd/doc. [ Paul Gevers ] * Add add_set-e_to_build_scripts.patch to let the build fail on failure * Add fix_build.sh_for_lazarus-1.2.patch and remove_red-haring__dont_install_.so_files.patch to prevent FTBFS (Closes: 741792) -- Paul Gevers <elbrus@debian.org> Mon, 14 Apr 2014 21:51:22 +0200 doublecmd (0.5.8-1) unstable; urgency=low * New upstream. * Link with '--as-needed' flag to avoid unnecessary linking. * Add Keywords entry to desktop file. * Update d/control: bump Standards-Version to 3.9.5, no changes. -- Graham Inggs <graham@nerve.org.za> Sun, 19 Jan 2014 12:46:33 +0200 doublecmd (0.5.7-2) unstable; urgency=low * Fix FTBFS without writable HOME directory (Closes: #725647) -- Graham Inggs <graham@nerve.org.za> Mon, 07 Oct 2013 11:44:11 +0200 doublecmd (0.5.7-1) unstable; urgency=low * Initial release (Closes: #718778) -- Graham Inggs <graham@nerve.org.za> Wed, 25 Sep 2013 10:48:13 +0200 ��������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/convert-rpm-txz.sh���������������������������������������������������0000755�0001750�0000144�00000003574�15104114162�021041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script converts *.rpm package to portable package # Script directory SCRIPT_DIR=$(pwd) # The new package will be saved here PACK_DIR=$SCRIPT_DIR/release # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Root directory DC_ROOT_DIR=$DC_TEMP_DIR/doublecmd # Base file name BASE_NAME=$(basename $1 .rpm) # Set widgetset LCL_PLATFORM=$(echo $BASE_NAME | grep -Po '(?<=doublecmd-)[^-]+') # Set version DC_VER=$(echo $BASE_NAME | grep -Po "(?<=doublecmd-$LCL_PLATFORM-)[^-]+") # Set processor architecture CPU_TARGET=${BASE_NAME##*.} if [ "$CPU_TARGET" = "i686" ]; then export CPU_TARGET=i386 fi # Update widgetset if [ "$LCL_PLATFORM" = "gtk" ]; then export LCL_PLATFORM=gtk2 fi # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR pushd $DC_TEMP_DIR $SCRIPT_DIR/rpm2cpio.sh $1 | cpio -idmv if [[ "$CPU_TARGET" == *"64" ]] then mv usr/lib64/doublecmd ./ else mv usr/lib/doublecmd ./ fi # Remove symlinks rm -f doublecmd/doc rm -f doublecmd/language rm -f doublecmd/pixmaps rm -f doublecmd/highlighters # Move directories and files mv usr/share/doublecmd/doc $DC_ROOT_DIR/ mv usr/share/doublecmd/language $DC_ROOT_DIR/ mv usr/share/doublecmd/pixmaps $DC_ROOT_DIR/ mv usr/share/doublecmd/highlighters $DC_ROOT_DIR/ mv usr/share/pixmaps/doublecmd.png $DC_ROOT_DIR/ # Copy libraries pushd $SCRIPT_DIR cp -a lib/$CPU_TARGET/*.so* $DC_ROOT_DIR/ cp -a lib/$CPU_TARGET/$LCL_PLATFORM/*.so* $DC_ROOT_DIR/ popd # Set run-time library search path patchelf --set-rpath '$ORIGIN' $DC_ROOT_DIR/doublecmd # Make portable config file mkdir $DC_ROOT_DIR/settings touch $DC_ROOT_DIR/settings/doublecmd.inf # Create archive tar -cJvf $PACK_DIR/doublecmd-$DC_VER.$LCL_PLATFORM.$CPU_TARGET.tar.xz doublecmd popd # Clean rm -rf $DC_TEMP_DIR ������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/build-install-pkg.sh�������������������������������������������������0000755�0001750�0000144�00000002025�15104114162�021252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script build and install Double Commander Arch Linux package # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/src # Widgetset library (gtk2 or qt) LCL_PLATFORM=$1 # Set widgetset if [ -z $LCL_PLATFORM ]; then export LCL_PLATFORM=gtk2 fi # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR # Export from GIT pushd ../../ mkdir -p $DC_SOURCE_DIR git archive HEAD | tar -x -C $DC_SOURCE_DIR popd # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Prepare PKGBUILD file cp -a pkg/doublecmd-svn.install $DC_TEMP_DIR echo "$DC_REVISION" > $DC_SOURCE_DIR/revision.txt cp -a pkg/doublecmd-$LCL_PLATFORM.pkgbuild $DC_TEMP_DIR/PKGBUILD # Set temporary HOME for lazarus primary config directory export HOME=$DC_TEMP_DIR mkdir -p $DC_TEMP_DIR/.lazarus cp -a pkg/environmentoptions.xml $DC_TEMP_DIR/.lazarus pushd $DC_TEMP_DIR # Build and install makepkg --install popd # Clean rm -rf $DC_TEMP_DIR �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/linux/build-deb-src.sh�����������������������������������������������������0000755�0001750�0000144�00000003666�15104114162�020360� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This script creates a Debian source package # Set distribution series DISTRO=( testing ) # The new package will be saved here PACK_DIR=$(pwd)/release # Read version number DC_MAJOR=$(grep 'MajorVersionNr' ../../src/doublecmd.lpi | grep -o '[0-9.]\+') DC_MINOR=$(grep 'MinorVersionNr' ../../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_MICRO=$(grep 'RevisionNr' ../../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO # Temp directory DC_TEMP_DIR=/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/doublecmd-$DC_VER # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR build_doublecmd() { # Export from Git rm -rf $DC_SOURCE_DIR mkdir $DC_SOURCE_DIR git -C ../../ checkout-index -a -f --prefix=$DC_SOURCE_DIR/ # Clean up rm -rf $DC_SOURCE_DIR/.github # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Create doublecmd-x.x.x.orig.tar.gz pushd $DC_SOURCE_DIR/.. tar -cvzf $DC_TEMP_DIR/doublecmd_$DC_VER.orig.tar.gz doublecmd-$DC_VER popd # Prepare debian directory mkdir -p $DC_SOURCE_DIR/debian cp -r $DC_SOURCE_DIR/install/linux/deb/doublecmd/* $DC_SOURCE_DIR/debian rm -rf $DC_SOURCE_DIR/debian/patches # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_SOURCE_DIR/debian dch -b -D $DIST -v $DC_VER-0+svn$DC_REVISION~$DIST "Non-maintainer upload (revision $DC_REVISION)" popd # Create archive with source code pushd $DC_SOURCE_DIR if [ $DIST = ${DISTRO[0]} ] then debuild -S -sa -d else debuild -S -sd fi popd done } case $1 in doublecmd) build_doublecmd;; *) build_doublecmd;; esac # Move archives to release cd $DC_TEMP_DIR mkdir -p $PACK_DIR/deb mv -f *.dsc *.tar.gz *.tar.xz $PACK_DIR/deb/ # Clean rm -rf $DC_TEMP_DIR ��������������������������������������������������������������������������doublecmd-1.1.30/install/haiku/���������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015334� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/haiku/release/�������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016754� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/haiku/release/.gitignore���������������������������������������������������0000644�0001750�0000144�00000000015�15104114162�020740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������* !.gitignore�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/haiku/install.sh�����������������������������������������������������������0000755�0001750�0000144�00000005325�15104114162�017346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi export DC_INSTALL_DIR=$1/doublecmd mkdir -p $DC_INSTALL_DIR mkdir -p $DC_INSTALL_DIR/plugins # WCX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wcx mkdir -p $DC_INSTALL_DIR/plugins/wcx/base64 mkdir -p $DC_INSTALL_DIR/plugins/wcx/cpio mkdir -p $DC_INSTALL_DIR/plugins/wcx/deb mkdir -p $DC_INSTALL_DIR/plugins/wcx/rpm mkdir -p $DC_INSTALL_DIR/plugins/wcx/unrar mkdir -p $DC_INSTALL_DIR/plugins/wcx/zip # WDX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/scripts mkdir -p $DC_INSTALL_DIR/plugins/wdx/rpm_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/deb_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/audioinfo # WFX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wfx mkdir -p $DC_INSTALL_DIR/plugins/wfx/ftp # Copy files cp -a doublecmd $DC_INSTALL_DIR/ cp -a doublecmd.help $DC_INSTALL_DIR/ cp -a pinyin.tbl $DC_INSTALL_DIR/ # Copy plugins # WCX install -m 644 plugins/wcx/base64/base64.wcx $DC_INSTALL_DIR/plugins/wcx/base64/ install -m 644 plugins/wcx/cpio/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ cp -r plugins/wcx/unrar/language $DC_INSTALL_DIR/plugins/wcx/unrar install -m 644 plugins/wcx/unrar/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ cp -r plugins/wcx/zip/language $DC_INSTALL_DIR/plugins/wcx/zip install -m 644 plugins/wcx/zip/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/deb_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/deb_wdx/ install -m 644 plugins/wdx/scripts/* $DC_INSTALL_DIR/plugins/wdx/scripts/ install -m 644 plugins/wdx/audioinfo/audioinfo.wdx $DC_INSTALL_DIR/plugins/wdx/audioinfo/ install -m 644 plugins/wdx/audioinfo/audioinfo.lng $DC_INSTALL_DIR/plugins/wdx/audioinfo/ # WFX cp -r plugins/wfx/ftp/language $DC_INSTALL_DIR/plugins/wfx/ftp install -m 644 plugins/wfx/ftp/ftp.wfx $DC_INSTALL_DIR/plugins/wfx/ftp/ install -m 644 plugins/wfx/ftp/src/ftp.ico $DC_INSTALL_DIR/plugins/wfx/ftp/ # Copy documentation mkdir -p $DC_INSTALL_DIR/doc cp -a doc/*.txt $DC_INSTALL_DIR/doc/ # Copy directories cp -r default $DC_INSTALL_DIR/ cp -r language $DC_INSTALL_DIR/ cp -r pixmaps $DC_INSTALL_DIR/ cp -r highlighters $DC_INSTALL_DIR/ # Copy libraries # cp -a *.so $DC_INSTALL_DIR/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015517� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/release/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017137� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/release/.gitignore��������������������������������������������������0000644�0001750�0000144�00000000015�15104114162�021123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������* !.gitignore�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/make-unrar.sh�������������������������������������������������������0000755�0001750�0000144�00000001350�15104114162�020117� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Show help if [ -z $1 ]; then echo echo "Script for build unrar library" echo echo "Syntax:" echo echo "make-unrar.sh <path to unrar source code>" echo exit 0 fi # Save destination directory DEST_DIR=$(pwd)/lib # Set minimal Mac OS X target version export MACOSX_DEPLOYMENT_TARGET=10.5 # Go to unrar source directory cd $1 # Build 32 bit library rm -f $DEST_DIR/i386/libunrar.dylib make clean lib CXXFLAGS+="-fPIC -DSILENT -m32" LDFLAGS+="-dylib -arch i386" STRIP=true mv libunrar.so $DEST_DIR/i386/libunrar.dylib # Build 64 bit library rm -f $DEST_DIR/x86_64/libunrar.dylib make clean lib CXXFLAGS+="-fPIC -DSILENT -m64" LDFLAGS+="-dylib -arch x86_64" STRIP=true mv libunrar.so $DEST_DIR/x86_64/libunrar.dylib ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016265� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/lib/readme.txt������������������������������������������������������0000644�0001750�0000144�00000000220�15104114162�020255� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Before create packages (before run create_packages.mac) copy in this directory third-party libraries: - libunrar.dylib - needed for unrar plugin��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/install.sh����������������������������������������������������������0000755�0001750�0000144�00000006327�15104114162�017534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi export DC_APP_DIR=$1/doublecmd.app export DC_INSTALL_DIR=$DC_APP_DIR/Contents/MacOS mkdir -p $DC_INSTALL_DIR mkdir -p $DC_INSTALL_DIR/plugins # WCX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wcx mkdir -p $DC_INSTALL_DIR/plugins/wcx/base64 mkdir -p $DC_INSTALL_DIR/plugins/wcx/cpio mkdir -p $DC_INSTALL_DIR/plugins/wcx/deb mkdir -p $DC_INSTALL_DIR/plugins/wcx/rpm mkdir -p $DC_INSTALL_DIR/plugins/wcx/unrar mkdir -p $DC_INSTALL_DIR/plugins/wcx/zip # WDX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/scripts mkdir -p $DC_INSTALL_DIR/plugins/wdx/rpm_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/deb_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/audioinfo # WFX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wfx mkdir -p $DC_INSTALL_DIR/plugins/wfx/ftp # WLX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wlx mkdir -p $DC_INSTALL_DIR/plugins/wlx/MacPreview # Copy files cp -r doublecmd.app/* $DC_APP_DIR/ cp -a doublecmd $DC_INSTALL_DIR/ cp -a doublecmd.help $DC_INSTALL_DIR/ cp -a doublecmd.zdli $DC_INSTALL_DIR/ cp -a pinyin.tbl $DC_INSTALL_DIR/ # Copy plugins # WCX install -m 644 plugins/wcx/base64/base64.wcx $DC_INSTALL_DIR/plugins/wcx/base64/ install -m 644 plugins/wcx/cpio/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ cp -r plugins/wcx/unrar/language $DC_INSTALL_DIR/plugins/wcx/unrar install -m 644 plugins/wcx/unrar/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ cp -r plugins/wcx/zip/language $DC_INSTALL_DIR/plugins/wcx/zip install -m 644 plugins/wcx/zip/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/deb_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/deb_wdx/ install -m 644 plugins/wdx/scripts/* $DC_INSTALL_DIR/plugins/wdx/scripts/ install -m 644 plugins/wdx/audioinfo/audioinfo.wdx $DC_INSTALL_DIR/plugins/wdx/audioinfo/ install -m 644 plugins/wdx/audioinfo/audioinfo.lng $DC_INSTALL_DIR/plugins/wdx/audioinfo/ # WFX cp -r plugins/wfx/ftp/language $DC_INSTALL_DIR/plugins/wfx/ftp install -m 644 plugins/wfx/ftp/ftp.wfx $DC_INSTALL_DIR/plugins/wfx/ftp/ install -m 644 plugins/wfx/ftp/src/ftp.ico $DC_INSTALL_DIR/plugins/wfx/ftp/ # WLX install -m 644 plugins/wlx/MacPreview/MacPreview.wlx $DC_INSTALL_DIR/plugins/wlx/MacPreview/ # Copy documentation mkdir -p $DC_INSTALL_DIR/doc cp -a doc/*.txt $DC_INSTALL_DIR/doc/ # Copy scripts mkdir -p $DC_INSTALL_DIR/scripts cp -a scripts/terminal.sh $DC_INSTALL_DIR/scripts/ # Copy directories cp -r default $DC_INSTALL_DIR/ cp -r language $DC_INSTALL_DIR/ cp -r pixmaps $DC_INSTALL_DIR/ cp -r highlighters $DC_INSTALL_DIR/ # Copy libraries cp -a *.dylib $DC_INSTALL_DIR/ # Install instruction cp -r install/darwin/dmg/. $1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/dmg/����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016266� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/dmg/install.txt�����������������������������������������������������0000644�0001750�0000144�00000000466�15104114162�020503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������after moving "Double Commander.app" into "/Applications" run the following command in the Terminal: xattr -cr "/Applications/Double Commander.app/" Official Homepage: https://doublecmd.sourceforge.io Github: https://github.com/doublecmd/doublecmd Bug Report: https://github.com/doublecmd/doublecmd/issues����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/dmg/.background/����������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020463� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/dmg/.background/bg.jpg����������������������������������������������0000644�0001750�0000144�00000150204�15104114162�021557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF�����ICC_PROFILE���appl��mntrRGB XYZ � ���-�/acspAPPL����APPL�����������������������-appl�����������������������������������������������desc��P���bdscm����cprt��P���#wtpt��t���rXYZ�����gXYZ�����bXYZ�����rTRC���� aarg����� vcgt�����0ndin�� ���>mmod��`���(vcgp�����8bTRC���� gTRC���� aabg����� aagg����� desc�������Display���������������������������������������������������������������������������������mluc�������&��� hrHR�����koKR��� ��nbNO�����id������� huHU�����csCZ�����0daDK�����FnlNL�����bfiFI�����xitIT�����esES�����roRO�����frCA�����ar�������ukUA�����heIL�����zhTW��� ��$viVN�����.skSK�����<zhCN��� ��$ruRU���$��RenGB�����vfrFR�����ms�������hiIN�����thTH��� ��caES�����enAU�����vesXL�����deDE�����enUS�����ptBR����� plPL�����"elGR���"��4svSE�����VtrTR�����fptPT�����zjaJP��� ���L�C�D� �u� �b�o�j�i� �L�C�D�F�a�r�g�e�-�L�C�D�L�C�D� �W�a�r�n�a�S�z��n�e�s� �L�C�D�B�a�r�e�v�n�� �L�C�D�L�C�D�-�f�a�r�v�e�s�k��r�m�K�l�e�u�r�e�n�-�L�C�D�V��r�i�-�L�C�D�L�C�D� �a� �c�o�l�o�r�i�L�C�D� �a� �c�o�l�o�r�L�C�D� �c�o�l�o�r�A�C�L� �c�o�u�l�e�u�r �L�C�D� EDHF)>;L>@>289� �L�C�D �L�C�D� _ir�L�C�D�L�C�D� �M��u�F�a�r�e�b�n�� �L�C�D&25B=>9� �-48A?;59�C�o�l�o�u�r� �L�C�D�L�C�D� �c�o�u�l�e�u�r�W�a�r�n�a� �L�C�D 0   @ (� �L�C�D�L�C�D� *5�L�C�D� �e�n� �c�o�l�o�r�F�a�r�b�-�L�C�D�C�o�l�o�r� �L�C�D�L�C�D� �C�o�l�o�r�i�d�o�K�o�l�o�r� �L�C�D� � �L�C�D�F��r�g�-�L�C�D�R�e�n�k�l�i� �L�C�D�L�C�D� �a� �c�o�r�e�s000�L�C�Dtext����Copyright Apple Inc., 2023��XYZ ������Q����XYZ ��������=XYZ ������J��7�� XYZ ������(8�� ��ȹcurv����������� �����#�(�-�2�6�;�@�E�J�O�T�Y�^�c�h�m�r�w�|������������������������� %+28>ELRY`gnu| &/8AKT]gqz� !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<'<e<<="=a==> >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNO�OIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-�u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmpara��������ff���� Y���� [vcgt�������������������������������������ndin�������6����Q��C����&f��\��P ��T9�33�33�33��������mmod��������Ebmb��������������������vcgp��������ff����ff����ff���334����334����334��C�   %# , #&')*)-0-(0%()(�C   (((((((((((((((((((((((((((((((((((((((((((((((((((�l"������������ ����}�!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������� ���w�!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz� ��?�?/|RZO@P8�'�i~SENNH�CN[HqOƕ:E�Xҝ@~S_{SۇZlL�?WR0̂u� �FTCRcM(yLR8S 'AC +_J?T9?JbP'4>jT1oh oB#L#@ך&N�-)?^xґ8j攎 i~|ޞtG*u}(^bc@ ?t{tjnsڞFC1-)@փÊ�r?*E�UQĠCIB#ifI(@�cjv>d�ziXR �Qijp:d@ B(?݊|!@)鲁^KOyO9 xꩧ=cjV3P1@򊓠ZgLP?<,_ ?v+n4}7&(h#Ruc@?xSGCO?x{Rc+}L�JLfZ"ExA f`hXp599@#Ox kE�5~5#vSX~J�?>Bu^x5�E2T4$EPB�O #Ҁ?׊pH֕9_5�ֿOqSX~�9%0�# @Պ_wZ@n�qM�ORP4?Ɯ9~4�7֜?ַґ}ik}(4�Z*u4O:1ր8�_a9�ݎƛP1�zqNWK/C@aR~ xL( )�Gޑ1� ?vZP?zJ1֗c@ TԨ>aB�#?~߅=A((� /f# >HcMQh[HFqMn,$ܑJ(Pr~�jTƘ4�NF2i|0)|*FS@56Aɧ?ziހ�&G4ԩ@("(?t84w@ #E(�12' j ="yP"1ċH8H 9GE1Gε"܏z`@�J�R?x'ݏDxڔJ3qPw4|Jv9>ԟhL~�~HZ5/ 8j�?嘡>AJF^~PyAN/H"! ht/@X�D~Ԅ~zHM@()4'wd%0*Up= ϕҿhbhH&84>qH8*<|ƤS&:1)W'|S�5I44�NAդ^1N~h>v?�-(?yHFH)`[GR?USf/Ƥ~h8ݡG4 1M4 5HDz=9z- >*Z�`*~4i´@OƄ;R?~ :#ӟ?4򚌏KESb�ÁiI�DzhҘQAS[�"CN"c?Z�~~co.?xƀ#QѩP|„?j�GM~ {-$P7Q� $^@ F}ʑƚAL#s@ #YI"P�ÃI�.Oq֐Ǻ1�>j}5>P AɤOiz ?�o7֝oMڀ|R/zr}H%�#i>Zc�z#NޢAӽhj#!=B:T)r(sJGJZSɠQU*}L+@ 14c V4�MH掑QLni5t4�0 8q:P0#4syԘ@ #74Ұ>QJ@/=>�Fe)O<yI|>I3Hq@,)|"E5hT~j5*s~5�XR/܏0P_Ɓb܈JGʆ>f5# 4�H �fJVP@R+S�VhiGZR?y@ct<Vqi>WsO‘Go|P3�BT~� a#R@ȣ=.>cNA# $FpT|m" 'EQ@~Ozp+}M?tԌ>aL#4�irj@8ZLd1ҁ.:�GqKڅ": |C$C�92~(̇ޜ&J4}iSIPH" b!NZ;Ӏh;֓ց QޏA@ #R9h�^zDubF7Ro@RZ�FOwZ{=ց! T|)M"NC֑)zo𰧏�~ӓ@>I(|H�:{1}v>@~P8) A vҤ^1M#@ #R:PzҞM�+4(�GZs$п8O1�\Gjw?B?Ɓo8jA7֗Z5?(oK#r~�֘O=P8 GҞԬ?v#@qN?|Zm�; kviнHjEށG !�VhOh !- :ҟAI1_Lba�W5uaڡ#&�r?42(c*zR;P No>�>U'8Ozr}P26}ץq(N(S\OA{W |8rh�Z~5eԱ֣#_�JFf?J�ҁ~41P?v(9lI:�p?SH!GJOjQT~�hN�>QNcXS۪SR!Ԍ8cjF(?vhQoF@cK'*0>WԎ2>� WƐ}R.hJJ 9BH8Oƅ~4?OƕR:94F8Bijiʵ�uiiGQ@�AG(c�YQGOzdCGj|>PhQ WY �uaޕG?Z"qH;0)qȤ"P:GM*?՚�dcO}?~ݨ~:Y>;9'4?c*~E V~Nu=ր?'ҘzzAHj5;ПGZT@Ɓ֜?5 K�- |ґ? �FLq秞i~� #iOjVݠc n8G65SMq4h^e"@ǰ�~)E>@zRtZ�` ?Ɯ:1/4�iHčAH~�"(S)0�F~~� \aPzҿ2@t9JzF:x4`<ST~>-�5Rc姰&>Z�XTя@ =)OCtn#� 4t1%<tdTP�f8�8 HqOacH8 }h1?@-+j�jJ()`1)Hqǭ5GlP Ni|&riTe9ڀ4SROƙ>�?~~9GA|HqN'=qɨuϭDM ;oiHTE?tib!H՚�j8 Ƞ:T)u*55<s>0q@ J*?=#i>V)�?֞ㆠޚz� 5$&)Tuo98Ha9FU(�e cNn.hRq7#@ =T}:>C@ qBRS@@1ʚ1@SӬ2اD2Pi(X�Pcq/WiT| ӈM"S4zp�X)?ZqA@ _F#49j@ QhuWRP18|1� Oʿ9y~G=9%9HZ9?jj!�Iϵ'HP#iã@ ?֔Hić@ r)X~_…8" (Pg!_++�?wM#PaP1:iM C1 GLa[5&>Z{Xc?Բjf?vJGK|0W@ E.~>J#Oi|!=/MJO݌ֽiN#@ԭ#JSha�>pi1')38/)V>~hTc P1c�T􇠧G(Ɔ�V)GCA�Z:�TpRPZ3*&@ G'QNu a˜~f�K'7{� 괫R1@S��YTʚoi? *D=W"@':�ҿWA!?gHm=J P?iX~P"%2))?1ǥD63Qb+}(^\à!8R7ݠCW' rXR0-RJc8&0Dc]#�q(GHM5GP�A)JހR�~y!!,(#4crciţƖ?4tu& B'Jru4�f8Gʔ/* do.>Uoԧ]OEgpSiIQK ?үjʘ=�v4�TP@”h=9yC P!~)[e)�^7@ƯޒܚU4K 0JI)@G>*c@xH99q~ aS?}jY?53Ja>ґR�? >U;K)qϭa!G!~hOqSzR%(c4F3SP0o+HR�Zd�"L|) A(k}էiZ#!84> {53"TڣF? FNC}=E! ?)qGHNdS�@q5$ ) $n>QR7? h"!J\fFs ӇcHqӤ5P~�NA OlM��|C)+:B3MA%1?xS�TM5 ^)$Jq%<@,#~K??1!a_~VF 0A6�V4Q%! Py K'0P(I咐`qL `,"uSIցG +^Zsuz4pEJGʴ҂?r)siE4Ӣ�X=C@L^)ϵ1 &2ӳδ 1 FSК1~FXS|GB) FqRc4H>4FJ$G_hqH�>&3)�H :5 >cN#cH~Q!AN^>`1%RN'҃8(!~5 M+IBZW!z:{S<|RGM5~@0ڌ|J�y�|LCs%I_Ƒz=,_qC .L`)zb"oJG4q u+!59cZF�rqN(18z\p)Gݒߊi�|IP1 )m@ ԟ)b& @_G-Rqgz`$CB~t=�qƦcJT`p�OHݩO!e.>h ̟J}>F<1 *F�W'Mr1dX)KaZpi�1z:tƢtj@>aI�-�q/qHB8i85$Zݠcn9QO#5> XSV"T| i+SdTSd �TjL~#n(�ǺӈH(FC:SH�`"RcOO31cK'܎haR d?vii#�Vh?v"}֦6�NM<cޘ&r(g`K֐ \|NsއL9~PG JAHb?ziOqZb(>HT�t Tz7!T|~#}դAĔg>TS@d4dBiTd@4>E�sJ~PIbnR,CP:@cT'@jqCӘ`1 4�Tr"MQ}(̂jp~�QV ,H?{RqL3@�#S[a� RGz8HFdP1$AIR� =:=#/*iSJ}_zcSIOQaH׍贝 hJEO~4h>W4aD|b9zlC5$cDWN=E'XO%cH9�խ*G(4Gi\e*V䒐Z||{l)\|ԭ7,i hi? Q H>coj�@:koH)�ƀ$QGX @~�*)c)G �#}M*)|ƴ��RK�JcJxCt_J#jljlvIܽ1Ԥ~ _Zqi��EҐqhaJ~ILAOliFf4Lridӱ *P! :A$$#~)e?}M�$_? G{S@? x �#$-<4:�oSj�B)pi?4 chq�9@ O�'%H�z=9%'ga($5+> zh2Ԋ>𦏾�i0 ;SeE�K/TJ?x*ISdksK ­'RiԩhާF3*18>X�{5G!qȠ�9 �EнG"t4�E"}>ސݰG.~ <1@^ AI@4}O#j-"#$vIQO֝Hhrj.SZzJz)riz: zcM=8Ij(1TwjpI?R>ADK@ǧJ}.E0p!|Q*QA@!4bPy~c/(=ځaS@)HKJ9J�k چ&"n /Rh0>Y? ry~@ ')?)ҌHU MQȧѩ4 HjH61Nƀ ?Zx2TeM<}-N=aNa}>>ph�|)JruzLp�?�yfqC(ISTe^z_„>ZcDZG(E�T%XO(*|thN@�~%?褐BE�/CD|]7,4zy)`0ZACM� L9[\P+�G @0VӜ|4�I|rrW񤋙�ӟRvzVrA�#RsHp2E7Z|c�d<ܚSi`cF>H1R'Q@LRLqoԄf))pjb>I+'Sc5SFBӛqJ"i?6�q5! {R q7LP5�SS 1LA 3 9郚>^BI>ҸR8hO }id"KZ;?K kSR? cڐ݊{ `R@ ^F)4c|qi3~4?ƞ~џ�AZ_h@G~MacOa=5H�vFS�2/|JL}T|Z�SD?~aj�Oj~?v95+-�Bi�)Dž&>A@cjgJ}H~?}} ~aSE̢!3)#`E�:>Qcp(ˊ�kޥ'dOƛP1�-? R>W(||S�(w8@:ҿ4 JQ!'ށ)Nԑށ� S1~4X1c*DCL@ 14}9ojrp1@G1+H ljy>ri@-:1�iJ@dOQ̔4�J9/R?M(w1#ѩ?y'3z$TOX~K�,*l|Z$C~#A@i->1H}E7&ZX.яh0?{R(~TP0# $TS`75!J`A@T D�TQD'4cm=?lOMbG H#C\|~0M@O�}i?{H%M��cH:/N7 |T9aQȦ1| R(ʰH:!T ԫz�GJ~O*Ҁ"#Joe4̆hR%:�kM)4bJO z~dA(}dz# }@b>w Ʀ>j�VA: ! !Nb8Zs aaHd?JTHO'N^(*ʕ)�V@H hF>((#iq: R2 "vpڐ4hR,'c_�)@iqHzW4�c@_i�^*7 F>@ޥ+L#&' zsq@1�r�juS^�P>Ri>Zj4�!(�-+ I 5Gʦ#E1n JxQFx�<741O^VOš>S€ݚpt`4ph84#}iGa 1 #SH2M GҞ"3"4]�8*hS?@?Zl"'Z~8_2NGP=- c@R>VxI)ڐ 0�HD:e�H"J`=3$y0 dMBy"VT}aT`p=�ڝ $|Ӥ54�'Mq?XӡM�G"E3eTr)h):Ԋ2)h(H= 8>*^ QRj1}jSʰiқM>A!c?" N~JG$ғĠCjY�~ �z|HZ@1S.i*D覘G P|%ib9K E�3K7ҙE>.@G9TpAT8AK'Ua/+}@ƿJt<N(iK2@ qN#C?ŠC' |˄gQ L@cM|朜HԈ>c@HyaJU^s�ZsD0~�0ܿ9E#)S4�i2V?72>s/8#�4�Xh)=Wb0Z)e^~#AJÈ�Ve ��rս9zTS*SON1 5F'ւ~cNaL_"?MQ 5,¾JGE�!ZSϭ"KS�=GZp*F?qO�fN]hȩ$M�95CjZ4 tJz �`>KP~ʴx8ph20(ǥ"E<JjE@zjn0iÈ�J?ZW(?21kq+T>\~ KZV!>sNC ֕-�5T|�1֤^$JBÅD2CsNphc (@ ?i?w!S�Xib'Ԁ}zDGD'S/𚉇~N *?K/U?w�#YN>�*|HZ�!;Rc0\{@ ?|TM0R�6?KsޖA�gj1o3|]Z sRF,pNJ_jV⁍xP�ҖdGRN@OF))#pBp‰?խ�,]^>>I~WP4>r)b(84?jX8cD �@�ztcJ�qRV*>K'€"o)[Q֕֒/)1IP!)�X(ZiH�iY~iX|ƀ�j8M5� ?xބ9�6AN�b;P1Ҏc|�R�֥oRLR1�gxSLa�H5#q#Ti>sMҤ=� �W%5z H(/Ɯ})biE�*Ir� |Oٿ1�Z/A!BpށS[cO?7G/�0 D=Oo L'�q@ o@ZSE/�E�PrM=mژ84�&?vE(�c4R/LQ(4ԭys֢|jgLXh+}IAj ^:KSqM^< ? ?"M^aq1�H~4_dh?x?�9G?tF8?ƀt4ޑ([LAI ?zVJ.ր'QR'rҁ Eހ3HM�(~4ڑQ�!jWgހ~>S|R񨛥L֡<"Iz3M>O#�Gi'N~M6�:?)JIhbiM7t�JꁦO@9Rj$f>.Hv{ӣ2PCQp*Y>}Jz?v}N'1Hҁ�p}iODJG�SO3J4�;�TӔ|B~4�B8�/ƟMZ?Y n?|�d((t.i!Ƥ|@/Zr}"s埭8=�EAR*6QR2�B~|ƚ�|TPiBdꖜ֭5N?ހ/o &1oP�GMA"}֠qҔuoz��0;RqJߤ_"�'ց�d)� rs�FGJyRF?yACF+t˜1%?/N)ǽ�4r~ K�51?F>x֗h!E*• �$AI70?N^xBi3RFh3{�ZLpM9�-�#pG֜;�IADl>e7{ ˥�uiS4 �D?ƚ>_ fy @6^ Mqcqm D —05k-Zk_;X}m)ÝgR|g7cOAҵW |? 4Nk5?HȇV Qs}J }sAAHJ\})s!P!xƙHܬ#@z.V2T@¤N~z@CB :NbZj#ť ~tb?Vӟ4POƜ: 9Oƀ ­9~: Oֈ֕$1ր=$ޜ$>ji[  XԫÃQ4 'P�*aĩQY:ߥnZ?z$?€'R>u@ M9GˊI?'@#oi>?qz�?S�否O�B"J2jI�1'ސR'>YӀ]$+�£n%.3+P'=iHx1�E�|Ɯ>4//@Kij\~=�ZVn#ZV�XE�=zS$�Rqt��V19j@8QQ?rO�<;X4q4S删MH.Jd=qO@ |4/)c,~ߒ֊�jS;?x)i)ëPTWYhKkDu}=T; Ri~?} 9jM5>ӳ4ah^RP1*} ҩ�iGdP!~� Kz@q �>Z M(�][ԸqQƠHkަqQQRIP1O£~TG7PhGX�zȴ{S�bu')B9Ožz'>a'Ru?#r�ꀦ7ܧ@ = /Zc+R6Ҁ=…9χ<;,lam﷮qmIs�Mm|�Y_ͫ몕7g-JҌG]?P>k�#<M~2 v�S|_쬮‰R)p;'VSVeoJt,#Ƽ;71L?OVmuk-/cj{{Ui)1ӨRF?rox×^ԄS%0 =$�Tp4ӳ;SOT4:GQH1+Sk `:"94Ⱦ4`1S'wV�Z)>5%_z~>t o)GH:P!ZL~?ƕVͺ{P@SCMV??uM#q�JF `a-(H*)´EA 6ƛ@(IyjR)ϭ)?(� bۗ<Zbs5=23h$G'†)d,ؠ/ҢzHE�=zS$�Rqt��V19j@8QQ?rO�<;X4q4S删MH.Jd=qO@ |4/)c,~ߒ֊�jS;?x)i)ëPTWYhKkDu}=T; Ri~?} 9j‘1�եJ1*&4$ݨ=֤'xL_?Z`8K8AMi*Nd#* ~1L^]HX�x�OoGOzv37ҁqP~cNpƛ<!S#ӡHQi�(#})ld{oѿ QO4ie >SA#q(,!__˜cZE%< RGj(jT{ڛL{SG1=-!)p_Lb]!X1! <irjR>sLcdzgmL!'zRdr0O9>)qӔ~R?i~Wn(n"?*P2F�^J ԭ�LQ?SE~>ZVrH)t37L|O(h~ I�jB׵ Ld6>[$T'�]T9Qt{Ǿ#�L#�h_��=Ί[޹��5> Լ3cw{'q* tvX:N ڪޭkXA¨ހzufCA� w�il Ȋ ~X{Uj+-J(׮WϺm.DP?2�Zs AWm+h*)|✟s4 ALޥrƘ{PQucF7֥cm!Qc =r>qQ{S�Z!Jc NV#  {B´)1hه�a dEI/EDD|J (�i-??ƚ9Q@Qq(2ESiXt/HR(40:>D� cKIˊP2)bzCx4b& oR?ܛħ0)80[Rb1LiRJ( ci�Rv/{0G% \~FZ_4G'YM2 f?Jc/.$|FJ�Il;@Ƹ(?1HcMhZz(4d Y>Z_6q=?ZSe߅(�^�J@<�b>j >D~?44s@)I*<� |T�jdg-Jdk19+4 {Re&zY~ )f+QZYyF&*iU)== |MGҐ vP:#҂F[ޜ~䟅!iTf9=@p#pR1~4"c=FMǵE0)�P�!�RP0|1ySיҁ.ZOL#%�?$SD�~=XT' $=? oRi@~28|0 �FE*�>I4&o7|SC|R8'@W y*ELzR $A'(M'G�M9>42 �1)\|>1˚`CA 9߅! B}J8W1⁍^nAw]޿$cHۛ^4R]\<4»#SskJu9.ќd/wz78c_A5֑yV)G|wems0p R?~ zU3C�=�f:T;"_TkTDzԧc %>_M!i̋@@SqR| cC?4�SM�qO#RH8Jc܏H#PI:U:R14�J �WMO*A#Zb}@7ZDp)[7}?$R)ցH^я$XȦqNAI7I)�Z=h(~RGiǙWޚ ?+/Mie�9�֯ҙ'ީ~>cJ#֢Oj�W)ON?xSG0~4.>i?Ԛyi>h؇IFq2Ԩ?~�JF,_33zHzA Z\~)RhK�ᥗPM�,aj "aRڙA(� A~})�v@>U?=iP!b(=ԏ1AQ=h_qQ?!:H,_\Tmác1F>Di?Jrp>8}(M)%.>!'4'4̴X7,\KP!):~7!RD3(ROҕF$PM*r#1 14>O€7݇ �!XH}8�Huǭ21S�bzgKu[14 _H5F=xcS{T?z}1!#8 IBRN>iҧBү4 kɥa A �a Jx \u<J q_<�*RtҸ$|Oq1*PtS)ObRB1@ߠJ4 ?ucrBAM*D_|J?ך�a�^@֔�� >JB2M�=Gݧ7ֆ-1ʖ?>,CZC~#e"O1�MjFP0x?~5#=0igy�Rg>(>tNԚH䴽`>G2�Aq5F2)?ui10�Z(nGȧH?z~'܋8R"ƟZR>F<9Jb~&(Z/.a?{I9R911i�⟌7Y昆(ϗ(N<ƕCE!J?xJf8t2=0jOZgu4�ZEǽ;/1*6�PM*'�P>'Ikjt>,c2(ȟ!�NN֑�ɥ#ޤ1$ƑӤ&y Z&7Ir1 5ե'Zzݠ1\9 HeJR?u)RĀ�wuaOYO�- }i尤_@#}*�P<~OB@Zcb�Z�JOI(Cu(ǖ>/@otސ/Q_G>�"qN�Vhi ?唃N_>))TaҀq[e"p? AorP�V-hnaZ�H�ZF$˺Ԁ~Jg/ց-NԃN��5?fJ"֚*WZP�떁aK>QMG/.(2R�FzwE|P!SH)Pu4~ y�^O)ODCD+O90ZSQHG=>� �SJ;P4v�1>J)Ҁڐ�4I( AZ8,i1z�wDߵJ%Bߵ:߅Gڀ"_4l)-�GSN)�彨 $Vδr@KZ!5I˃@ƯMo�ZM57Z-K'ʌި$�^~>R gehu?"})ޟRo"'R84vj"5 ?q%*ǻQ0(RRzp|ԏG9'(�7&Xӛi:CN~^ZV@ꒉ?Qo(#=,|�1D|@ L?4e 7sNa3b˥Gߒa֢ZoF�Ji!P֗[ E�P> ?'ҡ ST/ A :/ԑ?ҁ~47Y? rycMnV�WN11%E�YNpi!ڛfii@YH>GbF}({ o)R ޯH8M?w1}龂~`Z!#j4SE >u54CdQiǚ~=ɦ"_ ~)zJ@i>vb?ZDPLhb%C~?-4}p4~aNdڕ/I=Yҷ…{ҿ;Sܿ7<�}iP�Iԑ$@ �,ޘ?i!sM[jp^U� z�4�>?*3R!Ć�/ (>8)�4P0~\TM!ѩ"񺜜ց/ZS >lR4hMA (�\߅�/6nQ?x�Sd*~4>n#4g֜� SJY: OOz�_a@^b h%NQPhHF!n)?tP9Z_b>?SQ^b�w@RDC �* �F4T�/T&ݽvia5 {H=h p*hxqPZhI #}q?j�+ *G�Z=zR7|L<l#?!"?ُJ%'NGMsO|(Qܿ+Q?:SE@Sd"ӗ ʯր1PaZY֑J11JqOj l?tIS\Fafimp�@)}¿H8)eY(~TkďTҏ?BxN›y~TBc(=LJSB4 t_zo֦~ځ <TzMM(|?Zkq查>!OriȗB^҃r֑ie/�XsIq}i&q@OKMv8);b})S�aKRGj�qQ�Tf�Q+I#i DÆ*,Io`49u�\J$gǎ^/D0 (�ƂN/K0R!aK/z YP!”(n#_jQABݛ?$,?P>#�;XXuCZE'Ma}?u'(%QPp >.}*$�QRF~�G(CޞIL<[ا Ly=Nn̍L�c�\¢n$"p٩TfJqRC@-Q7ߩV[zPާ?x)r (%�Xh?*F?ѩW{RZUvJ�{ɤo<=@})F�t>~?ƀ?ՊNƕ>0heÚ#8aK!�) PD}\ (*}@Ət@^ rHxp�4v') _iX~}ϭ8 = 4r=1ƒ@~T/*NPHԸ̣ڢ5�XRR_0�{S�h$`�_Ƥ�4�45K'To#R?}($�")q#�G((58bϥ Z}hOҖ?DzHV?l1S� Nށ-%��[Kޠ�!�Z)#*S HZ5ye7"_‘xuq�OB�rTSq!4 �*V3Q(ր+I#i DÆ*,Io`49u�\J$gǎ^/D0 (�ƂN/K0R!aK/z YP!”(n#_jQABݛ?$,?{�qbaU0A@# Tq�ǹS#h.>y ??<AQ:@?yR(Ħu=sR)˷(>X p~46E/In]=eP1%!u&|{P4I5[-Rv=hG)HVA8QAC')?|G 7ݺS|(jP9FCSĢi9? �iN FqbZeif SXwXJi9ցg>.M7+~fQ@ fwb�ZW4�jF(SQZ�VP ZN|3@jD�[LQz�R?1Qf$Ӑ€s^3q!�TiHOOSlhF<�4E<�4 1iG)PP'i~Jw|P,Ԉ{ұ;8GIqO(/ �1� 9�R/|Ҙ qҜ#(fJ~wLc9,jhZ'@ ͞  t�SLq 3R;j8XJ1ʏN r�=2)`!bdd*<{bsQ@?ӈQ 8>bIS߀!O 0JۘJP3@�8`O4q{f/ҁ} 2- 03қ_Ԉ6F'9CJTaց wL3D?2ibcSK҈ PbRt}�1>P[<HMS:Q0Q?{%SLoF=1@?Q7*VUZc y=֞ڙS@q?pi րʑF%5۩뚑N]@A`fW񦁵4%)zMHrO#//.iߥ4cڀNF)lbSI@>AJGʴj Š ?(NQ=a6Ҟ@O'g4�a_#K�-T!Z�.^o@ԑq$ALoh7.$?QtudIϗe(')P!V)}i _o‚ ĀQ'"P!"CK?in"a@OkHyQJ -?2jk G0R}(�~°�P!+<iR�Aҷ0-$rƝ�u2?&ILO�%3]!sQ)}0rzb3a@ )kSS ((_bSzyQ@ 0ᨤ?8eÔDjU�Xi#!Jh3Sbx ԍOŽ3?@O|I/Sf9DhilgӟY)8¨S4�aH:R1b�8&}A4'B?sC )@sBGD„P1 S8J@B~W)G|l=n �FiOEzfx�GSOy&? sޏjkZ2>X~a8ecWcRq! ^$ZNe{�ցן7OƞN]NL�v4 OSqN@jHa<D}"�W(y)?|A׉@ZI'*7?JOcHHP1B> o9c+s J)@0,b�]Dg-@ ӇU�ց ^=? j",ufQ/ITHO'g4�a_#K�-T!Z�.^o@ԑq$ALoh7.$?QtudIϗe(')P!V)}i _o‚ ĀQ'"P!"CK?in"a@OkHyQJ -?2jk G0R}()=ށaҞi?@#*3J 7T`~59jh{TPjH,SL=$)|}M7<(RH`�f$Jh@if{�ހ>P:KRMSb�\)e;R_|Q@�P H�| ir})r~�zCӳRJ?{PG(яԱ}*$�vq%GaOn _iT�  �^JFM�#�X[48sO_ 5 |P1To=MG! tc޴Q@J�R/C>�RPz7B�o?R8S0�J?Jk?F?4G+�&�Y>|4�'H)sGj�jJ>OhV�TԙJڀd)SRO|R>R}h)ӗM�.� r�L^b>_ƒ'_ƌr(fzs#�7U2g\JFjET1M~\T|ۨ�7Ŧԏċ@ �떚~~4AQ@)=/�#�>b'jI:G@t%J:13ހgM^?ƚ+@)4HԭV 7G/ƒO~٠b ?4|#E6~�"٥oDC$b~4┟߯6>s@4_)Sݛ$SP,Tr)cRF G @ aҞi?@#*3J 7T`~59jh{TPjH,SL=$)|}M7<(RH`�f$Jh@if{�ހ>P:KRMSb�\)e;R_|Q@?QH1:�sv4?Z6/?Z� h4Q�~OQ7ҁOe�̮*HLOP S幦'@śq)>IC�t4taI>IށOP1� rq3})&>[@�J}_j5V)O1R>I �M5O@xsLIjdgf %){T��iK0kc>ԫĮ)13J Կ RP�T-g?ڢǽDAQϚF3Hpү) ʵ� r?֑�J��*!�,֥?J>v{f GJ{S:ޤ'0P4P i?E�,g֚ @ _(|Ú&˟JG?> YПtR �I+N_gޚ~ۏ3S$�(jӟx6?_Ɓ'7P2gCL9XJa9(�Wr�J @�*A*Y%1B E3'J&x٠B_Ɯ?Gz@8J6_**GɏUh~Jw`GLNSi �Uh_ P ~%JHOȟ8ʿJl_zfij^i#3@~E~҉} # �$=G3f "12Tq�[>C~W�]Ts5# G8@H܎oBG�9d|۟?ޛ{�Ks}4R{(?qGQR'T@ƧifW$g'(K)fRɠbP8j$!�:Y:0j$@~GI'CJO(�98ݟ|R?6A��9(pJd_zzj @~ w)SANE#|�LҞ;}(ؿb)�j_ƛ'ߥ=�֚1_izrM� >VN_Gޛ %/E#s^s;}6uޞX@�dPPO@uS{8R=@ ʴ*ҧ@C 2&)�i? A�G})Tf(/o /4(�X暧ic4j�FZmL*)ԭ~Z>G3OZ�?M 1i:G@� Q�œ?֟€�TQ}?ZQG !Ma{Z#R)t jOgQYOCTC �;Yc})Q4@ ,i|ɏր�S`R&^ �|?JڢS/>c ̿6?*>Lc�R '],.=#`#olT]<�H~c蟍E jDMD?KP!h3O'-Qr׊QJH#4�?p7hm'0ԓLoLx�?wGfGF4 _gHx JO"xEIkN=@A�-WM30Sm�@OmN&= ʊSJ$)˓@ 6! J2Fˊ/Ɩ_/Mqȏ֝/ /@5¤*9Hb S� l�pJd_zzj @~ w)SANE#|�LҞ;}(ؿb)�j_ƛ'ߥ=�֚1_izrM� >VN_Gޛ %/E#s^s;}6uޞX@/ݦ?S=ҁ}h_?Zt?tJs Li爖oƤ<�EVdQ:V_K= Ȍ}iS9+lT'~;(�X'F"ooM>iM@Z\bHRCJc_)�X~Ұ@ ÜSv0^d)?(P! #6?>q�S'JSK�1m#tE$n~߂Lc@~53*GOc@ r¥QTdr(�ciUiғEԌ1*\o.~"q늑8�P�}GH�#BNJTK@ oh_KS~ԟ0}iM4G9-�OCM(Ru?40ڄ&8vO@qB@ 7 rjfs�H}j7x=>oMB4)�_Ɓ?4IHɏzs‚ǙR~9i? �p焋J{�j$~7Y*@žNA�5/ Fs&iz>A"Z|1-59?ƀ�T:nS:V�?!'9A{:F>�>Ejk)ǖ"ޏƣo=$ր8AMSp�]/қ�F_Q5"�|J?k¤bB8a�%ISJkPE$sp*c�JU9ZI(�O �NQa?Z�I<mԇA,}8>J3Pciqǡy*}4ޟ¥o튄/֧o�B�TmTɠbx}"IC_KIQi[lt�ۏK?Ғ~bZV9(�OJI?ԥ*u?Q@ Z`�V~>{Tc�9?X MH9�>,y I#aۊ�Uꟍ:.SII(�B?L(/ZsMohjV?_zHdA/+JIyiﯵ�2o tǭ4�9�2\Toҙoz�h$3ww)P5ǭ4c@O#5?RԱh_lhX~o•9 N�iF8 @\|TH?~jWWJ3Ͻ'_HfS SGʟj�cpa?Z{q*d9t4 UOƛz)BE�-*DQ\}J> siIޠCF�T9aNoK@'M�KO<Ҙ?ԏj G)?p44�1@�LyŻSS@ xCON~48 @?-L^O^"oz`ᖁeE6_ià4�I �R~Q~@(ݥ?y B0 ~f:�5yҞ7(1d�,�%EoI'LO0?ON$HH@GiGi.iTf=(?ZjZPkD| Wқ'�{jb4bfZR2()[bP!Zz.={TG;P!6/D{Ҏ�hE�<>ؿհԑ� p6)P)(?ҩ5F]*}��54yj"I?Sꂙ7�>.j;NE<�rzRI)S�Xzڣph)�Tl~rjAAdI$JIPTit}*HzI@�53*9jg<@ӟk}>c@tSTRF3% xi[bRKkN?}}hn𥛦=i}P܅_JCڀ Sy)~*�ަQn!hԑ}4<P2~R}Wg)599 }(}kPÃ@o)KlGNj�k=īM~�3'ҁ ?ALO iК�q}ME (Picr IG4I'pcc?=8/| @%)ѩ$})WP_He?OzM'5FK'#TiC[7Q@<}))(rƜ~S\bipPPցը}i;�$ N&GzX)vO(J�ec�iM_T�sLhNoZoqNtc[*򢔌EPh G,i,hҎHp*GZH7Q@|gI4hst)Hx1jH䟅 r\м,@n�,ґiG(�4ӛH9WjyM1ƞ|PG 0-"s,�jD8|Pci4ZkhLg80Ms'!BIHGң5J2ځ7QRMFݩt4�̍MOG=ֿ5�,�Mw%Sc9J�b�XR/Wje;v/h,R&j�,_yMD#4�P܅_JCڀ Sy)~*�ަQn!hԑ}4<P2~R}Wg)599 }(}kPÃ@o)KlGNj�k=īM~�3'ҁ ?ALO iК�lmq(C)t<ԝB4�NPueP(SR)cI($_y)Zj@ ݞ@1DM~[)$8֝|})R Ɯi$8�Cdo+C B߅�Lܾ}}O6h�jd|�X9c�_zsi~:0-,w? @}هҕzc�RR?(~BP"cҘ>4FrC[^Ɛuxb~)=ip3@8BRR/|IJ >Sϥ�2~8P3T "7*x7FDh~zU�WM~/HoH+HF&�QR?ҁc^TR?#G@CSG4QրXp�VDS�H�}h54 =EL/Q:P4'HysKQ41會rښuǭH>䟅�+�c(zQiS)!NLR~Ti�aZY:4�S̭OL}hڕ>_{1�dxԒZcƟ'ԠԩQH2.1q@[:I5?ZX (JDzrI%6?@HIGҒ(K�#ѩALSPPj~!'ށ'ҢR1�V}/ց/֒1P!WaX�I~�t<<>CI/@ ?yjtVZ":=E/zr> �!REQj?d M ?tL~DN-5/J Nc}iҚyXϥ, ilfNӏȿ6O1xFҿ80-P�4NM6Oh��^t o�-Aꟍ�4}R'QQ*U@Kґ4ُj~AQg }oe)R?ZX- Z{�l4�Y@~S`�SZlf',Ԥ7YB7L[~M@Q�c=8郅(ꂁ AL=�ը'-4O|S�Z l*5*I>5:OB"ҷPi?吠(Zi> yiSL3@="i?y5� G?_B7a_V_ځj{$^}H>7R}*.}(d�RH1%�1i PJu(8!Á@ >/ܦ{S~!|�Z\h@�M0pe(Dj>~5$j!Ăiqt1&'8}? oi wi? �_gNpC<@V&~4rImBpQOj3H:EӦ)15,\J�:�U�XM_=iэ}Ӥ�Z9SNndQ@H��<Ǧh�R QK94 pE)P9�J\zp'@ŏkF0}֠ V1 �G4#TMV'Q C�,?)e?J��>?�}iq)M G@�G"u?_4 Oo$ )SM@}֩pަ�Ra@u S剨b?a@ȏUOo~4�6;AhrJO >#q#t WM!�T�i)s g2��S$ԲZ�ԠQ)ĕ(j ~SL߅;4>>ԭRTjJԁ?~)QGŢz=_6AJtI1h�HOƖ.HCt7>L2S|q�ZNCS@��XRtv>}Ɓ>﨩fQī@ ORK!�h-4,_ҁ_ƣqRGFܤ�jCR;i0"iSZU91Ҟ#ϭ ?M&/Ɯ}3BցFfNg*< �-Lu*ϭHJ�K/ܨ+R?qx~YLySQ=S13)JG4v(�dͩ~i hǵe&*/qR煠Dmk� މב@Cj!jHҀ%O ?(?+XI�-O<OACc)D%?J:BoIN!CM թ[F�Tiѩ1sK(oŸOM^_œt0kci+>XT]EKZcѩƥ/ӿEH>#=<JcriZFxQNX~M>.@?婡~襏-4J6 wIRM? 'AB)|K 7H#P"EojxoS�&_Q DtT?@ՃABSc/ҕP!i)s g2ƒjY~�DjP~訔JG?)KoltZ jV)*5aO@Z֨OHO}V�~/ƛ ¥:^$h4[�C'K$P!ԏ:?囟zsytI~P )>C@9)R] �:z$ֆD?S&*Q(rIQUs_[M@}�»=Ż[js'M#8V)jF:6qZ燵8N%$& c=>D�zG!}('QroT&pGjE5ƪNGz/֤?pODgNH2Ol~u�³SFՀ�BRMu`g7(Hs,_jCn)H*u? Izm;E`a%H6=^EZ}5#]6\ �^iJ.#5%tkhZ ӢY ;w9_/am1&dQG_zgYiz S*ʓV<YIij]<I{ε һ2曲8+Ú.~_./,l>>d�1{}UJFkڝҋxcxS x�rAEJW9zޡis7A&2*+|@!?�m"7 .w~U,43ϠL5+G[?Q7ko>1SY&Q<}2 \M}rrJUI鑞:rCU"3g?rMmF:~ͽIO_Λ5oyg=wvR䖾CZyoSGhW[CpN:uXNVsmc"47AW;qܽk R;#iL+LqZJ5i7z̖A`Sf֗jx`8]'wqJ$Ք2U/O}7+�kSȹܾ}ǥUiGףU9tK"X3z-փ|aI H}GTʜCHD{Ios3N0IU<^u*x+hծ0nzV8)]7%8w,g *Er<Lpq]RV78|GK:֟j\K)#H�ߎ�Ҝ-x$sRGd+YGu] 4eܩsc1PwZUvw+y 6SKNװ{X8E5>_u~xMo'(ݻZٴjj6ݨF ?(T%t*Z6y�Wy|9؝N+Y 4cQĞ5ıOcw8<v"$ЕHd4X0L<[vtst~] 鷑#0 ]vmc>y�IjGIt~^98?_ҹ xn_(CXdaI45R-^?R'?Zofyr!dW%ziL4Koeg )lAC%R/c }GÙƥvd1᜞V<?;\ڻlݷk+{8C4*nɜCZ.}K$z|k#F.�koqp--Xnp:d`{o  h㺶00AR?Zt\e\Kmpf88 W�F}KIּk(2 f8U]ܓ] |4O(šnb�B=U)J~*gVĸI^bT0a> sC'ZQ)l*j}QzUr4r9 6DZ+5vub#zJ TI+=֒_j;]/SK\� }7pk ž>$7e62 [wݪtVs^G�-z%ÇxI=y�>kuȬ..U ?jN*fILDᴱʀjQ&IZ-1�7s}:Ux }2l(7:ʾMњ\</jK{g =x4aV&�0gh^/Ėw.nXAąIߕ=sEli:�)m9 8CZKSΛ˟jp,'E5,PpEo+* ?AO - ԤGS؎;FiypP&Sk\ �ڗRkqǂ ]&d>S~ҷ�&%>ZS3Y>*e]uigUPsǽ'Ji]X7dXsni5K67�<ug0/xMʴ'~TcE;HSm+j }e.vuX@%9Oi_+iqO iVm-L�prQZ(ٹt- il^/^o]qzW<>WcQWJ̰ I_xäkw6x;#rcC%tE*NSQQ] |°PN͞'^᳋Bzs΀<)>OźZ\xk㭏 vMkZci$(ُq0R1WQgYVRH1XǖqiJJ6y}ONӡჂ~a;Şܨ:Q;|w�"�iƞ)Tۗ ͪ)"qӭe0W-SٟU~f\wM`xW·~"VmPiXg@;*zFz6̱Ӣ^{Ս6$~GMA8s籠n;91*NU"aEdפ2ʖy*9"T]5d۸HNq۱O>Xٴqz͝_k2#8 h=oEn dq]Q6ٝ~{ӵgTqj| eM^>`rqU*\%W<f(]W<y$o*ٱ».Zy/H66HB6nSg)�� X<㉜@2=Jmi"$.V,Gz<}94%tF.͜�SҫŞò['\.ܑ5i-R:VL�=9ɻXnR3_ jhSXSa ۭix3?l[LiPz#޵IbQ4"-'-sTڞsNƣROѹԅ;O͌qTE?,/|me ׅbY" ~]':ˡQE?tprk5;GY`d*ID;@dW +-�cOkБfJI�t1^q-S=5+Ns>q'Ez, T jngh#�BɮKľ.+1ʝ}9RU4HDԼ7b_Bm&ݬ +^c�O�\|qY ˋij~ٹSrĈTy`ZǧF4`3np~5rNppGZ`RyݴхWQ=1?Z5*ZgdK1Qh.Xધ'=RkEivq\^�=;.d"ҔwEnQ(XV]Ly!Fa䟦J5keդQ2#F$qR9GV8Ԍ+/Ui"֐5vANf7ZY>(H~6/mK'V!+jgTych�٥E�§@2ԃi%@K:[Zf0~7�^Qqy� s}1JšͅIc7 �h1oS#$W .2M;RRm+:W��72A�8�~xߊ,C<bjqT=UW(I85R}=L`ۣWK#1rv_q�%S_% ۶)\¢Hl"q}{|2BM6S~|JjSbqv~/* aq*sY$D%op.; lWs9]<x"תWliK<�`zVJ|+*0~3跑X~=#?Oμ f~ P֝oYXԀ&JƬSw&q#MRE�tOkO o'k/l?rfV_)T�9ҹ=&a.wn<@;ݔn16/Y#_ ]nF>!q?Fo̰Ș[]lx?gVg=?ҝbX?2QTǚ-b=oktK9U8v#i9?+5%$ � ]#Les0O?pxu ȓySqh4`o}Jvť?BO{u�КO)O|GU/xz!帻Z랟Y^1񕦵IJX'Kdw%FG\6⹝%)>UmG?{ zL;Iu-};n 1YyexvmgTpB0s=a Km1㸗ZOO-W9egnZЂЏw4%+~"k|Cwbi XqG{R<h֚HJ1m A�zԪ~e:nyc#ϩj1FB`pשA`,f*p+Ieứ㽾fl o-X`{!_?`+,hNI'>S5֢]>kFk#DگVy˂ �dz^@?ڻ?K%,;v}nx"$u.[C4u]Z)8ܟCR:K /'3zu<s0it<ybמX&!OD^IB+{9=A-iX[I#yHh?OG,藑Ym ng<}u@A~Uҥ;h֩MZǛ\ǒ\6*.,'1 }1\gl,R3zG<Yc "wMĪF09#ұ [zI^/-�NIzTsȷ>/&[ePgZ�?h?W6�!IVIpaBq/_{pff/檌n1i9K](-ĬBI?8K\¿9k V1\UclFBʪ10M:v07F&pUْݞnn P|[}'hx7 -�PԦԮ,lռ g:p;KȮPqsV|'4[ekKe('gTQScey4}nhtY.oLLd F}>^V,qIUPpg{dV,$Ϗ#b~ p7c;9F_(ۡorKps%'ooVHK;$ IIkVV2F!X(�{Zzlu AAF)gU CgO:|c;<? !! J�pk3ǖ6#cn񽽞tjPQ@o� Vt]>iAbTcE ϑ83=*r\dcG(^)s\�>?U7>Ljipţn '#^Yx^jqŢP{t?u#^gRΜj�)wt\=hջ0pw*xS<qKa)vIcLGxSS^7GD;`#n?.:导PmuKmITV϶OZǾ# ͓G<b`jT9kj J:lrrYI9$עxSDO ޫZiNfNI@�syF<il6.\񍍶4jI"E(0e=((rkDu~m[]E�9Gcɻ$vV7K8��9*3zL˪w3w'Iڧ!y#d�` ⶌR2qiI8]}o70>MT^Oϴ>\�Jd/Т../HG8G]�ddV($?!Y{Nֱ|]e Sc8֦fM;$.ɴdlZ^4lmlgpX: cZA1>ZPPy洓fNPQHie:> gH8{,+{ҷGJIj,w~�\7(n~>^g䷝67A8={L-9L1Tqwԗ"cܿ~[ (IakoQؾ㍿oeyp/3(f��.*̇:>fxN/"s QY^-j{E[Z )+�VRsrɥ D_ �F4c(C^Lu9 ʌXx~J~I!IU <1Z-E>UMTuxz(RXݻq+ޗMN1&B=*<WzexAtN0yETGl5Ռ%% =a(8+ ,7~Ys v`y5i:Ҿ޴Be&2qcAmNvtNJiy. >hdȕvݖtE~ Mr<cv]yA<qm?]Wu- 4}˥t:tX}_N.,`&pڍ^3 <lC{N'@�? q7Y8#xl;\ާhxŖ:xVxF Q*|ރ$}Ni/�&^D~3n^ٮhxMڄ[7m]ݞQx;6'ɉaHk䕟ᫍv6OKF׷5/Gu ˋF$UtzZГ:k)4Y5I�h=+'4̒j$Jg/2z{>$ZNEI}bxtI.o d3Ay8[+�]�E ^ZT!&yT7џ_q\g:݌Sl @@=TT"1/|]SY�ר�޷�$Y~,^iYJc\?{9TSSVeW+<~^YB9E9kehkU< ?ZMqy 1s�?\fOm7WkDQB EiKM|=1gjw\Iۖ4>*/rO'r>!?wO&ҼC>30 ,'$z&^j"#�@HYiN摃Sױ?]?MdrGVux;t[e]+m5{了XfCJ10O9Mt][OH<GrJ(eϨZwfdU?<3hڝqng2DPun}zWwƖRhI,ٔgp� 9O+8RK53yk*<5~�7++ou y5 {*YcxzK+!T̸\߇u Qz:~hs7̻<asx|g}$HE9H*H<jCdg9Ϊ?|5q<wwzd}XŒٮO'7081ǜ�ʆ-opJRq;?�>�? Ix~C2 J�pkOuO [rT/0zJ5ҿ5wWblsW$̷jIQccn*xp�naOc (f|1Ye琖,CB`{kKNIpŐ#$NGlgEV[ Ke$lu#iO }jٳ1]:Ƕz5' 猭[m |^}qJSKK7m|]=BtE18^w!&H9'5]mldD"PIOsL>xƬ6Gi"P(ҳ,_jtt|D™ iOh?ֿң�qi�zftZ�/)O'R8k4a4GS1d?#?P�D1ATo¢# s(�s?L) �?x_<8#qSH5&.)"�Z()sZCueRښ}h?F_h',>jOŻSzzP ԣPp B%F*+,~*oS@|TRrR8T xZ<}פ_KFX�CO:{q�;V�SBvD?4f4 �WJ*=(54_'4KP!})ah, ,= +})f}i==�I?Ɓi٧I*(ȿ'H~GīJxPQ+{hZ'dvpϽqr8}IRM?5,2Y:j�V)_[YCSS[*>JOsjҭihPO*FX $ ZD}^&췿f|=1KO '$;Ldی\ӟ޿WS:Myn.�d tqJab@&6 {QP[Bp\攢Iht)Mψ.`!$yy8럥s 3L�';Iݎ)GD1>cH֊t~3+jY݂I=)$E5O薶R\ڜێyXқM;2SOT4�ƞtS[ .%X.nqW<>O±zOtv�fRZjdh҇ĤY?RCS<dVڪSWKOۣ$BR䑌J ȏIzG$H �Rt/ _kQOsȭbtz3:X_i]4ݑ?E6w`"ZD2hrrR6=ͼQFb!xTz&ʊLA*�ҳbJG3e{c&•yԯi3Ɯ�V#~V~iAvJqMu[Q@ })d1B�z#夥Oc@M�RRHROjL?C_*s_Fy @zT0|h(t_Q�8ֽ3?O$?? Ci1MGE;?4!~ Y�T?' G#¨\9 �O3�q {aAB(oCsn1$_E>4s@_Ԏ2N_mMc>R/4qHMaSO<1oD), tN("1d?) c}|A@)u?@ aEJ(#?PPŰzR(?yM� mJ?ַ7?1&__Zՠ5";z%:OI@"�PtE'zHZV�T(}~�%ۙ�I/z}ՠmBvc(?ݐGD8WޛhàIN~!Y4"�?Ɩ?(7')q?ҀVɦ�F>r3*s7/;o kwP-Qܨ9$X6+P<-K8"xOBӬ$͈.m(8�tERVit (ݫVrԓզpK-O[S˃WB?t[63]! ϶=L@3�Z�գԷyMxPhpo&ۑֺFׇ|9E73XnXBzZwR KÓI2i 8dxn8`0p;q84%IE7m6g9yT1'i=bk| asaV6g# @gu梷R;�iJ1|#UitHBͪDTo}==_5_=qZ'nUoY=ǘI4Ӷg*] h>! 3Nr GPz ixwgÅ < =�cūCpv8ab:<tvK)m*0v{㩭e2#f>&]B?gpUGr'@𯉬&}*;7`TヂpEV𞅧YxEu\f_,p�ƫg<alQ۵M!ԓզyׁ(,--[klϧWii5-4m(ddf*̇%rrO?ɳX#[w|;jpx9mQo?$Nݠ9IF1ۓwv>4?;Z_l֏FnX2K19N*-¶H`$H�tS�? HI 8�G�~X=:KkԇIм! K<GkHé=y{W7? ExQv06p\@ h|?z�6FX44U\:L>)(ɢ4Z>=J1xbZt=KKua[8>Y=CRty,TA,\w|W&I,TG<)ߎ=4̭]λ/7j�l._cvoB|1i.\s3�˒T\ևK4緂YV?4D,aNN:t?Koj-vQ�ܰ2�JzlL]܆~9.D<h uQʲh9� C/5wZn.ś4rypFo=s2ȿВS@pb|,�7_տO}cT�O_i{}>4y qV2WXM �We{㧭tCE }haBddp8W#9�iB RGOovArJlJOnjM^Խ}'Zм>]ˀV9T;��E-B߇aUu7]�ZwbԧaB9Ƹcx+/ⶑ<;In#u##�?\91徇MEsm�I\zW$ks^K:Pe�ů){]uI zu] 9jV*՘{W9sR[0bܚ)H: �B2ӥ ,PJyi?}h~G)|zƠDGSNo`hý �R/sJ {>�~%$NƘf?ZIIBԑr4>.O4 cL#3i4my_4?@y#^rib?ZE0QbZ,#ޜ2LO=(Tr59(>H[|q'? JV?)G<uDQ_V P!zoDI1ƑM @'}48>䒁?Cҧ;q@<ZS?|�J$_xR H~r�rO7Ԩ8N#8J�VG{rMDOM6Nq@c1+qBM$5!�UXF4?r�7B=(#Lip"Zc}@0T',~G�:ohC:QQܫG qH>Uր�3"|o@_ei1(9?KRE�-? Y?RCd?J�Tj?W%iƖ1�t񖣢Y%k%VPrBJ� [Y- "1Qs!1F~VI+&CJ5ޗ_^Cm]dѓ}k>RSbv*ۻ9-�'JImXj*5Ikb*;J<ui|va2GaFEr1)zF<{$mkx�X:%=1.\dSwzޓQQω<<B+wTm1=McO;W.@sL_S[\ͫuz]&+a\¼(TzOΫźh` A1 {dI^VPcߌZıOn *gЃW&/Bp"19הx*JɃF{cɩٔi]GA9+zWAy W#HC1Elq޸z̔*Z&7Z5K+8 g$u>N�oMnj[mݍ$+4$Ӯ"X#نE`hH)ŗE]ʶ/~ߌqW<)�IJ|.Ɨ<Gw纒8o9I_jZ] rFj$ZN"({\|s?BEsXl~[u+CS{۩ 7Lc=*849Kv .> X=Z1 o!V`f=4$qAܣ<\pQ7 =Y'k!)Œta5^P2ۘHqL0zo'NAZ^Wqt't;lv*_V c=0Gzp5+*76zZǗa5H}qKZkQskCW>\Weǖ>PT�8$V� Bebђ V!A7t8TcjjrWp䋶E/Z혵X"[qXTǶrMOimJ =:Hm.mf#+p÷ˑ v{I^cÞ+KE,6}ATn_[˸@0" Oryې)c�V.wn[>U~ncb?VSV#?diJzZ~M�V hNP>�trF3>F)WF5 z4ҝ4>phzrAZ#?A�1ÊlG%֤yq#I/Z(O֒cɠ@8>xDpTOƁ�x/{!CɡOhD�>�VƜ'P!QHTu"hJ?R7֜G@ V�W7I9_€PRI�~�Z~=�R7Rb @ HsOn])`(~f4a(Qɠa i<N~"�i>"ޡ�չB8jDOE0Ӈ2ҘM W 2/OtcrO�=�%E ̟J�#>d?J 'QJޞꂝ@?i:9ƚy�P!�ݦvӱ= �oz;?VKM?M:>csnƁyIڜܖbJy>hi9>o*T#Q?j�|4}J�H2PJ“98BRozgf�p!4 D>B}hrM8n? d}ߩ@�YTiԿ)P74/)(G+ʨP}߭'o?JR4 "~4xS?zNE+/Ɓ'1zq4>WsHmJ8M@?v*z>]%�1?խ9R(kJybTS;֘`Ӑe�")|#a?~0rLP\!M �GX|O€>OhN_7.M�<#?ZT|\L8S@~BSMSϐ~ SFyW5>FC>U>恋U):1Sj09�Pˁ:@֧p ԰�P't'斘ڞz_Jr0Ii-ӟHE*sD@ǧޚi9ڜ;i�|@�lpRsc@ď>Ҟd|�(Q?cNmқ fd Bހ SHZtd?G$Ԋ?zS#�V _>#Sq@cNJc7T_(ȿ E?)яb}>��X72~+�ޣ((tuE+zzS_ w�>#i@�vyN� (Hxi[(?Bh# !�QQQE5�/ƈ5�ƀϨ~�_)�)q `h�I*d\SttO‚u)Oo�5$)(+Iښ~7QNzk%_T�J~��CLjCҁ/?ZhJ�r/ƚ p|O1S�Z�6^�7zX,}(W*hƜ{S78}ow1Gѩ? HP)j\_¡^)�W7@�EƴPQ"�OƢ^ }jD�RF>P"gK܋_$_vƁ/zt,_5~K/ƀu}ha�-(?ځY8X(M?q�qh1ZF�Zh(B1/EP�$OiIBHw7BO7J?4�֤?�D~jg�P�#9cLO�</ƢnjA"j)>Biwd5~SSG4]4w)F?~~!hx4!%#w~P1j|?iS�\?J`N_kP!Wh/ )��Ǻz-BM'(8W*t4ԋkT�<*}iթ W�5G X1/)�q5"NM1%>o Go�!�\CQ� 4ސsNJ}hE�T(�Tt]�D]�@ RgSlAM/�l�A@ `8R~4Ez�$�[2N.d):d'A@ܺӁ� O'@7šNn~SM?xP=5R@��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/dmg/.VolumeIcon.icns������������������������������������������������0000644�0001750�0000144�00001543126�15104114162�021316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������icns�Vic12��@PNG  ��� IHDR���@���@���iq���sRGB���IDATx[yUcv3ݐDEH Q<-Sx`)(V)EҲ<JK- $Bd}}stOٝdv3Uw|~zEf,"0/D߸fĎޡYM[ \Wqq8x{e2yxvQe^=)LPGd=Eu=ygU ïS(ֵ |ydz|rGcMsRI ]3>#' 2$^`A "eݲ>T; Ο>3k 9w|lEA)k u.\QHQ3:li $ @*$u,bO^LF<Y]�^�Ѓ2I6־Pš-y˴T0�oK$ H XmhKiYQdWEM|,j}uU܌Y�Cԥc g߲ %4 bCI6tv?=b6UuH/aR xg&ܱͪmqlK!uw"/I\ӥ%!b LO /spg; FZ%5ix$.1"Q\~t&/_ɋ0��f$DRa+5yR@cwӟܶMҀ↡,drڼQmCq ҺjY%t;,e f2m(Px�at&ÖH˭ ʱgiF`FD 9?[% ^wfI$ 9c�śrMWS^71- T�^ެg oC#VArWնJAu͗u\Vryo^\Ecahʚ2cTQS�(Ȋ[>} qB{tX0%MxY1Hx楂0ם|:5>1a\v9G%,}-9÷ni O.؜+S�.kxpɈk+uX\EVԤ0s.wt҄YZ0미ZVEң@w_83yv>/ّɏBhă;84"XMU.$s/0_yq\O'd02id:%}?z򞝮9ҏikʲ΃9X.&oj `[ƿK֭b"b`vt[_.HĬFĒs1HÑ!Rkdlnw")>9-|4H[5]3)g.<-2ښq [ }91G@[VeiDKO�q]w1+qyPH]P9X$ -Ru֨oz۵iw 3~ԭ^+m% ֧/br:|ScV.';zPn&�EK" L̡0Bx;EJ$KG {$_erm*iK9BfQh=(c%׿_+SN+e |]2[6"P4~T5�S (;H|aX$!\7 Pגyݷrˡ]tER[E�D;)0 ӑS<�a.ܭOI' ?ޡeTp֓/Y]v | o~J2/>j6̴�@c#}yg3Jr<ߛY5P> Ѳ,yIVT<rccrG83P| 3@�1Kߎm( iAsycu @+-$6>}MGߵ�c*qӐ+[/M(Pd2�={ii@@{KZh̟vDdS, f*-q +J)xjk|\ra.LOM,Vg@?@�4lTR/Yρ&:>L5�2E`n6&Y(lz|[Jra(loXݒüoGt/3L5F0Cm%XhaRB[٬QD.D9 J�!>Ih:1`E 1{(@3i ߪ`v 1kEAh9Dxa)6UY+ΓبX#�?`fCcJ9�ypגl �JƟGYXm F5Ah/Pd] vy4,x+*3G߀D~gG{AWQxTVarS G:c�h~VwvH.xShUNDlP3W 牕àڴg�=w ͻ᝻$7IkCP&~*αC,,,z_ /@iH^) a:W3ŎQ]7kpXxaAx{9|fz}:p̿6c 3< buA]Tr}?ow2ςg!XoE(+Xz%ze2kBU�`'ֱby&3yI[طo](g~'> '. I/.ٓDž؋p-Pv:)Nv\i3ny 2rE2?ObtKqfs34 <>p@,\/4xZh5QO�X8Lt,VG4,} H毿oyR}b۶ c h$]#r.G2/HIF_{ $_!`O*4VWgA,gKַ#qj<t[JLid�rtҌyca"׽Gҳ))Fq6hK > v/Msvh]S<k"LĜ3ex;A{b4v_t:ڧ�X 5=Qx7ȅ</vC2uR{zyA,6Tnԧhh.^jc}>Eϱ~Ǎz"Y"?{ߒUwލZAExY1Q7O\ WGuVUO#u!M0}~AR)(.KB'e=_B>#SP�XG%7fiL_xm@@r%O|jj 7?6-Ih`gҁ(atG8j|apt}ۥc5}W4` u9ҏ.o0]33闞O{5Ŏ-LCwB"3۷I^s*w:YpUI ur]{űHār[BqFHwgrp`>RZGYߒ|k =WxJt9xJIHsۅ2[de +Ф3Ҝϯjk~o[Tૹ*vyp3lI(S[Ss{*̫w8`jP Y#xa9UguF>#SX%C@ Ξ,Kn2bH�;k!H }6Nw7)-RkaNځκZޗL^Ǹ$_P dv麃XaB]) �y~[:G- rm TZtܾ/S*0aړ͚Iw�/ 35@7L</ XI1 ۑ:Osq`OW =!W'/ѫ6�6zb /]wς\pP B!:j ;_f7el2iQŜ*Aj|c"s'n6'n/?)0 fgE`Y[|N����IENDB`ic07��)�PNG  ��� IHDR���������>a���sRGB���(IDATx} \uήьFZX$"K 5``l 6&@؏3~/qNl>?D%B hH,w[=wZ=3==5S]uNU:ԩ*RJ*RJ*RJ*RJ*RJ*u3{yNjd|23纭. qzD~ 0?\a>q&o3τ"Lܑp^)cZ#gSxze8{~בYy2?p؄ gX<-_qRNr5p8[W[  H% ("Q17\W&0p›H} 6yDg0!ĚFyh�R8G͙X Cc b%1%E .NK,@*`"8ߎC1gW.|:-- E `*N7Uxh$zya8d*yTNyЗd�3Bo)Hc6fhNiOȆ.y!Bru>ܗy5V. h`ޜH$,�@u┯45%L4*yGcYL5seD|'O`�|g/^4_7c4/q2| ̍inwcYh@̿,'<EW:iZ`{X7B Wr{:4%aS 'D+kmcicLUꝹs9ppLr,p B/6eﴀ \[L�GBNy`OhTU39p#W :'(SW->]2fBI�e`PM3& i ׆Cl@&O7DNSf��;@Mi1&Z8]3֏+pgT Xzs �:m7ބ n$`3 uuMNt6'~V-3fL[L0FB7)noH+HKt3̆@|^-5*MI8mfk2ZiX&#!L8UšbҚ�jjL &@ ` 3 Ԥh/BFC,qޘ- sxo9(JF6�OT8@n*#,K0d @Z<Kqئa6_7r$ <y-�j,R#ka<ij̇D ir8 KrrXS |饗 $cK$b7<NI&> ؀db}:O[ޖ\< (�!HC6ጣ@  D[%b <g$(l4-iRdz%S wL`}B̕pcDaà0Rck4Kq__ /�hJ-S`:'}4X8qWSl2d__8 CB�`0 pdG.b�T.~2;~B�c]z=Bh6Mp$2j5/i}}}y.}vԄ�(Y�jbG(P uَ{o[# D"D( U�AԤ`xh�. t[do@ꛧs$ǯǫU�I98C\>g+w.ܞVIRr X|zG OYULN٬2~Iӡ'C\Ӥ 5 ôɴov {1d! 0 %lS)~e< Zx^]�,rʵK]SSE=@^_1g4Ϥ&�AEU^`[qm=aNՇeDWD!~oGdC=&F9N+mv c= ZIddESf+N�,md]:wϏN!ӟ@8HdP z`f*Cg_[d釮/ۺU[@"qakego}$_&ĵ)e>s,gjj{N9u0+X*LP#?QKg%semX&{8#P5KNIe>>Ò1!�INμ>'<�YQH;1@,K\і߰k22ۺXS\ �i [4_A E!�#&Kgˇ0μ*eL38 K!f!%a[b! Ƶ7|ِJ_|d8� .D||YW^%| %/Ye64|2?l!}c6acN�X2yf{c5&X(BM삑n7Sr �xr0/(xaj~g٦g' % @c�*~li\pMHE!k{לL.:[gj 5=ٟ0m1X45)�%T &ɯw_ٷa'"J@Mj;mDϐiӹeGGїkO' PhVUbɬ!~<h\r=�ߺjq 1 ~X¤ Wvdo/cQFNgҲ:>U̚G3Ј0~k,XmB�DrJVE8:bt i=2~r'R3cVwd= 8 YbS)M$ �K ˄y�%^cY9<(3O^\B1X+<~w/|y9 lǭ�"^a]"[Ekw~<A>&(E,fm3#?x�`"TUr0~g߰FvnݙʼLD'|R?4 p�#B DTInBc( [5l['i,g܁K<шgGj&2pT"ydT3Rp4نh8pts--T �R#lN7Fx˸%Z-[ֽF,ES?<zi7qFR8@U1Vwf̔%~F3l$a`ٹC~M<DC95M�iAt@ I2o$` aG*�!ª] ]X89֝=pTMy?tg^IYpf pVm7 z?qѳ \ܡ% !K7,i\΅8s_ em'b}??1hFtazL 59fA� qTS�hFxH1mad8Ҩwq0<S?9HڗܥS8tO@hY?rL6y2.2B>1])֋`}Y儓\/`.S߸[RvJ=4iB?`@j{/GpSuǧ#EѵBLso%{q=׺$}k(orlkw>FAw -iw`6m;&yKn2?(u5*8>ب0Oa.3b= aA=Aed㽟wodKT??+|m&-x `"XmWjpfϖoq(d /;aVVɦ9�zIixKMaPxhz7]y"["#6z- WsQc1aȖHΖOmVo=O-=&U�l~Am��nwㇻO@ygx N O;Un9 C~!eˣ\L5}]E<<W8N�sl96ɦdCYuD?Y;U7RoiOX|bgZ\3T<.k_XDES* %i1UfB-ZHpw$9,p&U Fh˾Lw'K!~ U?8m ||{T2R V0YQת%ֵh3Ns]x2UB1VKoAy-2ygvvȞ}pz[% �!=:,puË1g,C*[<anN 6X t3:/ڙ͟x>oGNX 0!�fO k֙gYa=;"u`_?TuCʷańvcn|f~e]ֵRL� b\Ġ>Sܷh\Z[/ ~]I8i3CI8{h8qn# l4~6vpYޭ(%�*X2x%ߛW~[]pfs L_lڂvӕLe0 ,L!.rW{Y�"Z�c+o- ]K|9 ~X6?.&�6~/F٘2<I�"]2A߆5>[ps2SG!p%6D� ?Nr;*Ȍi7p2":һ-v$. X?]?WѹL02;h4DzF[?`5-e}4x_O7e֭H @hTλű&`a[uG 6kL4e,(A�$:c0gn)t-q};:3PbM �) d@ 3DZ]/dX;E0Z(Si!#Ο/j$}O8 f>.&-)y`[~-3@caܳx_7ҏ,#%#B\2P#'�?@2L3bE~\e>uYa b\421tS`[mAĀ22Z%}׵1J> n6#YN=vȕkbvHM*)0P ",.Dy?�ma8t+�uWlgk\;3Zf dqɂY&hI!n o7Q m.𦖁(_-~ Aj�NPFk!GEG7qP$QCBo"є.)LRrQP1AƜ 4 'K/5!ʮEf̚;\�eV( 7Jw(p?c`_=X ,AV@ rX8F0_*ׄpo/ra:vKhāk :( a^" O< �I@P.W&rZQ!n\S7g^+ĥ<z9/H 4Bjf|5|tѩ3 DD'W1@r! y7"pL&8UBkC4zy eí\| /=W,ڗGJJ 嘦'`CTDM6Y&9{%�UݑKa`4qm�OUZ?)8Z ]{w3x&i]#nKuǜQLPq:_7N9qH|<;t[ .2tsQ4n+Ml*J�rx%wnض#)̛3萧粲 ۺ/ɘg-K/4KY|Ug '(pa!�vmd־9Sh6ѥgIy`BĊ pAppG3=o^nR3M8[afPi @vWR[p십>~$J'o2X$o 2֌GˌPIl݌ |u5/r\SifJ -MFg!m~?XTO]_!y'sJ( �*4_WNњf&uKauBfjXvpR |z|onpJulq$Zh;"Az^#Y/%3°+`A!z-r_R'Ε`&E�ӻIz6q 7$D^l k/X)'.Oڋ8l:Kg�o~i4\[N[.V^-IT2I!@TQM%Q�̞I؊A+|ld>o8NfpH:"€տ rR !5I�v |I$4o~;T%砤;& ?aw3>2?e-w:A98*dldjF�Pxp/{RvORTxО,M{'\�\{3]XE�a8OsnwpxLu7 |1! -5�aP(<z~c<(I3<R%�Sa&L�t?⫢ua%x×Z�/`igvѴc ģ.IH$`9ߗ$/XN]GC4(C;fBOwn?pRtmm`~ j햻 {Do ɷ5d& aiL]Ir %1}P7$ 31\??f|ϡeiNsr�꧌˖߳sVߗ͛3e֟>4ucc;0ߏ�ˍp݇?[\|5[ <m@Aڀ4eD1 �Yő)eԺae8w΅p/w>-Z2!uz~dKq$O#�^RKDA7e&זSN'i|qjn FB[WGl8,˛aHC۠h c5 h`Ȍoq.b2ta#n O`߯wh)j J;҆ #[SBy%]ߒ\8P Zj %Wai� u駵{ XFxC_SakO?ɦn&xU90 &=$'ici�K o3N!ߑ:^.- G=, -u̼SuR[H{~XUCXvv�Rϴ<:pyC݆ 0<#R4� DA ܾ&"}ޅ!j0=]<G<E[$Sϑ^D[ 7~BqoZ,[ni$j�N' ΖyW]3z!ym.W,[6.AfZҥ�pq€ٰEXPx4$h0~vn\YoWIP&gc(/ϚJ“Hh'>ݾ?c@ZD(2Ko^5e!L0}4&!TQajx0"4->i<菚6ݛ6J_vĪ*N7`g;KSclA1f?[^@Tޔ*�{ q6wuSiRd_p-3 "h->fPDϥ �k`<`m-+Դby"Iv�_/CEF�$zJ B:uޏ; RDLحPp0dY{UQI$J*�Gr3I߾uX֎Yj>m~!vyH6c~ @W]ku`<[?hKQG̛B;-dqY{ǟծO |Kt!i6W۶ ͜͞R2_x^ZR$֯Wxkw@]in�Kq([zՖ_5+v\GH_I*C/=#;c7B5@ٖ2r/g.ys?y܂V;QH[Aok[5hrɃt~GRxB@5ďKrE¸oR#&ݯ<'|.43XSh80ԾZ\;?_/Y[e!8 Sq*]=fb*7}-+0rL*Nk:>W@<xy)Yۤ$S1@Znb/f�cbyD{DDbp#B<-su͟-N*L�xҷeSn7oB32WuS1K3P!a ׼&&v92œ/M<Uf c[ޒ_@kIɘ2J`\gak236]M!%$0A5ahee{i̹vq]OlJ�*u^ayMnb:vlƇ3z%|#o{2/quuc/|lN44.tT(صa=K/|IٻIqִtiE71]D̫T$,�DQqq35˅:wqXxb}\.3W+Aˈ;Gd>60jЕcBϬ7O+q6 zLF:֭vP?_i3QܑlhQ؅{JNi܃ۅ4-/#eI~XCw3DW7<� ET�XЍ 8eEiX-(02C: F#uB:fKwpQaަ1qx 4bh)L_|0fy(2ѣ4ta LnS7M:S͏eLAbW9t-DˠCb @h38Q#Wh xs61#K'OAKK370܋kk tV[\qV9sEJa nw1T:݉G{#)E�[Y} ui:eP mü<P_D+2V�qHӵ͘4~Z2]]ټZכ$ll#C E ?u9Ni7g]n˪EׁU Z;Z)~W@׌Km d1x^{ ,6)U� ]4>2{qmy[ѶbbQBKbжMx`B(r�h&意v1v34_mÒxb#>66F)?^6f`{'~l�'1OxfpeWˤ�#v /; 7gdW�\NN?<M.4UsT)9+0&=,]t3P~SI|)p~L$~򂭾.~^BNӽ?xnYY<} b~:4'#(M"Y/0(SaыNHMc6: vF/*&}68| pȏxyin}u`2&1E+>r4!<ͨL1kd 쭥0 9-Ģ2rNe^&*q � 釖4F/;9SDY q+,GK( pa4-tֺCPf*cH'g1)8@|ċ68h�̿02~.138oka^Lg̛¼L+}YA(xqF<%G^ `&D�ly\xZͽ+Wk:u ¶z5jPM' -i 8Mcx. 7<\lEEhy1gM~p޳Ɋ!{sY'd0oI/X5U T)P@U T)P@U T)P@U T)P@U T)P@U T)Phol ����IENDB`ic13��jPNG  ��� IHDR���������\rf���sRGB���@�IDATxdGq7޳;nrS>e HI c 6`` >ɀdc[ Hs@Nt9M3_umMwTwuwuwuUu~ɹ,d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8PwNq^cgv7>ݹS;%.qtLBIӊ9T FdG(*bE;W4됨UoE^g~9aeI1>n} i#T�詎/30`L2O4VT:O! "g\nKJ%.:}kn֟aB[ܙ:^Sʹ\$0'0'e%*~4DѲxCP?y]T#̨C_|!_6ΫjU^ ӲSOߊ:)]Ce�NP40_E}rfzJilZh*U׉~uj]V^N i�~y\!Ȧ&5f@_JkҙS! hR9/Q\u4u|YYuJ>çjש[h̷UN 'h} 푖LV)[AUW#T&7=k1|7|[!bi9䅸PJ2}!F2,hڮ=y~W(&+嶖JzNM e�~Z<w!v~< 'cMsյliU8zVHZ!($P3"^NT6YN ՔZY&/z_Z#RtDYVb<!C1t^!/&x m#ݧLVHRoSCS(=nK^na.W(.>oǚ{)Ȅ1�WMҿk'd̮.7o\7kLß|ħRوD3q2TCh* bIxQjV4Sn}/( EDaVȬ.t\ 8+Lȉ X#RtDY�1oQߴ4B24/VP!/#B,NS�ɧ(DBX,gvtnb@H)9oy"%4 a�9?Yd$_p1VvuB q&"`Ғ><> )f 1W0T:M )I%hU)D9ΒHXu*j)+e) 4"\@*+w TP^iH#*(~L hlqWX&5�d҈5bSx Ybuw=Lv`-{w]Axq7�<|9[wK-wa�āsM5%93IfV3|SξX0~%PL:TQ'$3h[j 1N8 �7ȒDdM*|ᬛu y~)?T IONyL)#ԵdLf4<! NJWWG=rdb p-T\umͳ`Xv5 -qj`?y̙]q\}auo7'HBS ' F9%ۢjA8{8xJ̝>2o۴CwI=wo"b<¸�ƀAϝ3bkfp944c8PBӠa6j1!VlZuw[}-Mk/c܃y0Ve˖½,\5ijsf4'O7ph7@a0{ۍSm o]O_i"n�~ qj r6:{tTym?o^Áq-O PN6fu=nGORG̝wr{{P}b+r;˗P455|[(0IOstڦ!`'p93fxs+JXȱ 5�׽гo࠸|ܒa/q`l9@#24Ǽ3g2ި0qpآ\[[O6W^3Le*xG/Z(uDȱ 3�׿Зó?iimuShʟJ~aC=a"7E>])1ְa�͇8p .IsjfBF?Xp, Ӏn$]41Ƒ6�V1P;Ysa&41@r P=Cg+"j vԼyO@Yo1crL*bce�fFě"ff+>mkk3^}PxsƇTkb7Pg2g2uPʌe:^K AΛ �p4~nSb}:;Mo:a IegBZ!NIJ<@^xjĶT@My/[t8/_>(^^)�T,w0nJ5r?NՕQ'qGj؅ ImvW1T>A0` &l(½ֵ"q }£EĨY8 yH9TvJ(�d2MX 8X%By. ށ\<tt~@d:q걸UAN!#E79>0c 2DPA @=/m<B (o 5z"A1C`P G"BG唰.W?/3 gir Ղo_[]6 ~ՀEX7e{6]J:r̃M ;.�'\斎1tnzSbŧe#>I.[S0&o4HB4T?b0_A8( }e80m+o1P-4 A55 I!C" BV%&3BHA,Z:[Oܑz@մvq"u3Z($}كW%>OOgzp$U)Ƞ&TvA*;1?hqxNIX^5farpbIL <@\ߗ,8_<E)8S,iJH[On|"ށs-mG~()QyFE|Ȼ|>$v �t?qxhek2L[S\RP٥V4 u@Eki6S Λ"HPLy{%f�BsqbNSTbB8n1xC:DߧW,k Dk"{x %{~"˚ϔ 6�L/?Ⱦ;}c].�9ŏG*+Ƙ߁St/[֥*A^baf,XI@7eY$!Y<s}Ԛ"--%/ǽPڔMܱpXBT/J[.Ӂ-]n>s#/KEңoy[[/@m1a:oUȧ娣[ZR�WiXĩ_v۷-uO]=z֬6FRI�@`~79)b]3"W8U$3K`ūӍ3͕ \_X_Rf➎uv[|InA.< %o%,pp2;иBݝ g�wq n�s-M+vjjz/~Ԙf2̣«bݽݴZP\ϳm JO�uf$ T3'iPxP)T>Vi,'i4*4� ^3Tx*6tψ]GgkO z1g=87k21k6b5Ud-ōzVPoP^ 'd9v_yT`Iwo\?xO+]l�nyJ@;#.!P6#rVeH�eŧ2SychJy<7\F˗x[v)nβw%}Pg=xէZNܜtCCګu~5ţ�zMqgq䧆@GM<yDea9�)Ê]+: P 4?Qy[fOX \ۻf%'0ta&k׳khq~z u-`.+;+pNHLA,/2ThĥTv<10�HqǼNv3I.Zca�&q%^AsK޾ͭdA)P4p2.Yi�M -́  Z\N [!S vϲ8U<W#_pt �h¹rw̝=yp-S?+ C�ǥ<�>\Z:m u`HCo*x#Tfȅ*sx�4@S[;mpG>pxy gŋ^[znC՗=ٶ{p[`Ls'Sn%7ltTq)?_|\>\Q {3�ڗ,u/x߇݊0^;XW @ rŹ͏=/&y^FFN sG>o `(OJmJo+>8q;ŧF*Yؗؗ') >yc%_ p�QQۈmi,O ~x9 >+?vemGV>9JIkwi/Vٜd ez_pFn/pO]d);zH㰫AydF6"*&x?8Uq'O\kvO)d`HlxW6gI4!p©w`Ľ_PN ="zmσw\i:w.tʯ je\ȝ/}K\pF N<E;y.@a!iPp*V{8xT҃sY/;Ź\+]�_v£%0\<,"/ASx@HywM=C^uُQ/e�y:o9~>[?F�7y#@C�KB-#@RCL+?9\~?#Nw:GFǁ`tڼ9^{}h۽N <p-nso Г` ^' ?+{#o1Y\�vgKn9y�fa]\G{o :7`w"7@ye*'Vm~�YG?׽o|�ԙ3:ILnGƇ\Z=Bp7Zrc-^g |፹S9Epb]Eh)h9X>Mpkߞ\~pg.8ppx|'r>Jc3F~42Ez4W/#o>N3DCf�RO|g.q}o^tq!<Shj8L+?E8�O^u>dϤ Tj<0*_ /(<!^'QdzSQpp 8M-8%BvZ i$c2ۃwur5l;y?W}Py߸dB+4b`c\a(x%|\f�C?{ wg+ހmxAy")E4fQF(y@Ons]{x )^c%Tby1+WDCeB2A @8]{|3Wl#𮯌PHD+ sS+#t~R76*Hoㆋ>Ɖv5N骾"UqhD:w'<Bv?WƩ`$&`:ope+fΛ?4fTPH)Uv h<iV:,1i4'\\CJ\pI5n 0@;aF<>ER4AUZTW0RribF e0&X' R;ݺOw�MNPL 3A:կ==G-x{f-^2r#%N%a\q_ Wl5PZmvU.rUyp, (4=Y~;.&]Yw2c?VMxA<GGOϱ2OĂ@+ǸhSՖhMW١V_B fT/y n;ҟ`ހnWɴPnǾxTJP T'<iy*[/ڔ]ݿ6zLQzNQvmzT?srV.tq F2bC!HȜjO{@x^WPT0s(xQY֏WQS9A֗j:Lh 1N<qQh�:AJ]}-[ZyXھ~t!y{Q ėgry|0fty#G36z0bhp Gݹ?d q=}:I)P4}*Ϋ<wg4[29P8 ϸq q|B1q#A={\nun`g\>bۿwپBW ]yx&sZ_\:jޫ/9swڵ40Bzix*<~PG/?b׽ b|X}1o;8C0h;:N73眜u࡮ &Un;<~܂ o7 g(ct'c?'ő3*ALE^M/*|99Ts~xoo녫ϻ>w7o_ib3)[g$RN# G\LVY.ou@g֭nӣw׮Լ4>MBq�T9V/6h B|[ޅlQzy�a\ksˣc@X[qy@Ə?@bB``7qcȲk+PКgqO[wv.X\1q 1TtG>al-қ^2 ^xNaIj?/g٩ajtRBWʲ q«Nf\۞~ҭ_^whsl" fdE[P@ ]?d8V0>f1bTT�H:L*;mK;q,}a,u[Wmy ?9~p+r_zg?2~kT~~d)ʕ QK95$vuȃ_:ȣkFJ9VcXgZuk{&ݣwf{ j߈QN 2D愭sc.b-oiX# ܨC= �;13nV *SZ9|LLk[aȬ1ņUÆ ͛U812I �p ;6g/{u܁57k2ki7sKҿn +oa|  f<A W}\cFmRwkR꿔zTv0nLCiWMew[~{ڛo0~Qm[z96LcF`Y ЈGP6�Dh!퐍KSc?3v+>*XOaZ]<�] `�*d#L-&/`F�`Z 46ཷm4}*wމQC6:Q`$A3dx&Q0Lh6w[n 4VNT*V8Ox Ǻ /ZqqO'w;q%z un\؊qF&o *{@�X&!rGyU0M@#@z�v hq~M -BD,n?D[|dةQcMEHS�#4^OC=&]4oϹ'j+�P`\䖭0&;Qem^VmnYyU*O(\\Ncq/:vo , W`� g_)?ftB9EUdY2�DD4-lm�1sa̰bdf Ѣ?O#)|v*M4~g #nsww{5py~_@P} r믿2)lYZG;H!W r9AkYe=S4!`eEG8/</_/P2�<SL+/sXbi fΧ/q4�<*ev\-[`Q?0"N hiqtPAiii@̳* GQIX1a�حnwtUDn&uIvZB1hO~�Y(`L\]QAe;t92�T~Fcb(8<XWec,m*wEv=փ7(3Tx�Jo|Ge &5>①uLpC!Â2<ê4q *  24>lB8) !^� =gt];V6lL2diw'ޛ<{ +qLxb@Uv΁Tv y9@똎5m˔Js)ylQd^5^u~_=8ǪG>7nӐۤ>(e GiHdT#@cYݙ(=V@Ȣd@ i*6Ú7A�IS;XB $n'GܨP-,W]e:./|;*?MI_醂xe|Q#cci~Ol}=zxpL@eY噯11 ↫;E[CV`tyrA\h9z iz>95 gtE2:>ÉA 0j/vкGz?Ozv$\ď҂Bxg7\tevvCҨO4臿{�ڡF>gn:?g+O噎2O85m{\[!#U ew~A�3HPb (1~'oD@+Adh %is;;O S01.._ _ ';Wmv*@ET ;7@{,mmA? R9xNh,1dRrWqPoY;~Еvnke7Wz�)yAbY5YS�9v@u~;c#w_dXNZ[ GZ1h̃譶 6ٸXw!⹿6{\kg )##qWSeԠ,8ZL(8{w_իژ*p�M̾l8 H��Vh]PJ.SBK)8e% ʆ A@v+';;q7\|<pщy涛-~{?t+yA A/MY0Sz3{ȇ3';y2XHS7\<i*T6/5 џu#mL?uo#5Eq).3qP9*oǗtêOǿ)~dG4"ƉdzC wzy\B$xPV ?tGץs/ATӵWP HKA%/<1snzhI-T#aD?  S)얝zFڔ- P Tr;zq?4|Ǩ<V}pZ� 86H(lF@FXpIoXDSGZjaVUr|_e�u!܈aLm3smQ_=nT8yk ?x 5+V~; ?a7pq4ᐌĴr|Z�N&X\ z=/2)bPAB?)> \5m*ʲ3_�q�6O g.wt=7gu9UP! ߽ ]7ɺX۪PH6D:ig�86avM F`F_V&}< જ+MwAΕxuhXhE W~=wu_}({>Uӭoo/۸ 7ި{7T(?AmO8- &WNB  n݆{oWtp*#ZJk'NuXn97*1xJټaLE|OO/ڈk<Zdz1EcKOno~?# ?߯ZQW2ӛNim�8V}!ٻus*t p*K >s<niU'E@v�/zwFUA&8Xe]~}[^pGo}tO{ _E �A#` '?q7!w^H%  sujx[|9vg *]?"7*Ho@,yY)_B*Oe_WZP&THkw?/aDV~79 3<_F� {m~}V<TBZ GC\^iA-8~30SvZH{0߸PzEqhlTU:"`-p*G ܚv=)<lX1ceEg:�ٗPT]GFMne_O x4P-@)-X /*ĸu^BR~W Zg{9}!+Ӿ@*KP,}vH9ѫ +&Y28|K> A)xҩ@nn暟@FCcy$^q\S[—ˀHTT"R"9bh@*Ģ&ߪ1n>1x1^u{?%(FktP%B2ȼ�kz᚟^<] F:Ղ/Zh~ 9.jr5"s* ذ{Zq+VScoF:(}onVe16t*S�^ lƦӆ\ YP--7D~6\W~h&8X -#E/<ua <UPej8+4V슊?ma2_  @ i!�L/ΔTB UXiZxUDdž GeDsfPbzQǺf0}n3γƒtb<in߀՟+\p-SAρ� B = bo9PK㕍ݨcͅ n1TRto]1Jy�{bEkQcP/P_{2Ƹ~20�cT8_WsW-ո e%噞yʰ P2Wi4,7@A B8oG-.jtO 3D j,p 3�k~?Io۹*-B 8'nƒ 2At1emlc vB1xBeYQ\c+~lub}͡heGԀ^�$ 66z= -a,“8:ƄS83-M-`lht#C&4y=t,,<!ӵǸu7گ? w_}ź�K UFSg..l0ǸBqFW$BSS+T@îCgqo%LiZƣg>*٪i?D ' >k-03[+e^\Vٶ%alr 5ctKGg_tm<Ds @'e?iW#3�CX'xatncW /%W:.˸B\VkJH\~UW:.OWom0Q /X ny~[h` L/븣s"Пh>6 dB$BܐU?B?mxI)=~n7"?~{tw#c(SqYyxE\~/asBZ&6 @47A d&@F n(TD Vz剥JeW  A-昲[ @ QTUЎ@3ǵ̞q_bbkeW ew>9Ε+?g!Y?2YXLL% WXEy8xLCJ1޲`QGڡ"!qC qY4Z/_4E TsrQxsr 3�dPV cHzдy\dF.|@vxlӹֹ+ J܏7Z hbN|Λ�g>OdC@0$6ULSJ}랭PִS@ /gp,8|˼uҪ5 *s/.*,4" 1pq~uiէʿ=օ[^`ʅؐ8!v!:"ۻ9׳imY+)J)bp-ŴY6?s6cEFU mjSe슾 V찓%� k6q@F4c9` 煑RڿcQ2yWYB'dwtjS^Ue"uX qÇ?I'"<aB7Cƀ 1aq 3�`W|8=7!) tP|-\\X.0D=掎}W&w:3;!1P*Xmd�_l*xoCvlKkUTFuZ8ZucfX#MUcu-;g֑HTݻ0T; d`Rjy3a gBk),i/01@Dgߗ'�, .͉?ئ)5C1Wht&k{U^ Io//nzu),+)kq})x$t@5@#WE/6|R/b- ME_jɻGH/=vdNLVWd\ZŞ6$)Y&Wm$T7 g0z3oE)9^ht@g\ {fd�_My4xJdfVCe`WW(tIz R~H8cpo:S)"^pۇwn(~wQYQ;|w�^2Q%|ɘW)YOrxiQ fՀ�cn=q Φq| L(J>n╾Vw{JNX�,@& {|*>;Fc`�h\s+|/^!3�#Α[yIKTA X] NOc`')eͷ$UZPu#8�O ]Q ox:ь>;�qtZz�2QLU<P%)u$Ry$GܠU)<G/}/@޽Xӊp{m0hi<X]KF'H *1o~F7a̮A"83D|'{ %<õh;v(tp�IW~<_%.ٍWvHI=̙e,5Ce30W/8LM8wlt(WUߢJ g4DU*`iSMTlnl=,tycQW!Ʃs5 @ e8pyѡ?|p@%`;7`4k®CR"m|$u)x aIQtvgg*ƷP`V~H ,5$^RJmӮN-@qޖ0LnVQ7ulnj1cP3/4^DQ6 e~է#G}XAs})+!>5_4z9l5\cO; x0CLAۻm+qB#C4(_3us pGZj*ApCjoRoDgE1BhۀطicT_w^b x5DŽ?:nLW&F@qU6HRڑPQYt_;rӁ�7( K iD{zp{؆� 3{w-?Dz3Lʣ+޻qsQ~?+p>GNAc@Y20D~EW<�D�:=r[ 5E (pz=o<N6ǫW.9| 3_ }tjKd2`X2«c竸UaǺ\{~#Я6Kß� g0 \"nݱYGUWV|.{<6�<-\=A(J!1�~v?t48)9gΕ?^MMJf�X/^wbv={'^SRnP=I#BDLw.<O ^i 34lmf`3zgpO>myF)rշXӫ*%W{nmM QfE{|g4wٙZx  @6)kI&{ l&\j/Ъ�n v}k?!~A'gUQjI"Ϯb3 3-qs;`@iVb?I` 0YIO_<߂ H"_|e{)[9v' 휯 amžCaᒬKe<uS ʘt_. M")ԓ\HL &W~ċArftZ$w>[)(~խ?P]Ӭ4.9ed]-9L[{x`sSC5췚0@wn3[]R��*SIDAT+Ლ7k!N_1sbmGHxN_S�Pap6anm&ow �9t\է)Oez�Ŧ^g”+VSx4__h6Lpvw{PJW]`?(!oђqox+~>d^9= �w5=wU5!p/ �W}Y/<ӵ.lY6&IAZz?!g;ؽꑊ Hu,]y7y2�m[߰%|t@jӏJoo"]qo8;^j 1*&1#tzU5\;P&ʼ2@34=\fa_L�I({ @!!3c�]/8˵íoRBKMQQ`jC�`2[nQE:->[mO=q!;G\*90 @ivS|;  )`]ԉq |{n1ELV頬IbqDdtq^5WbO8" ^Kͻݣ(cipҞ^ |OCn)> s}/\~ sxxw`8<L9 b?Z4:&<Ж;nUm7߭|۟h4�5jIst6S|=vU$AI]HrnٯWm?(ߜ�|b�a%#7r}׻CsE#�9HQߖ'?)c�| qqW·"x!ѥP~T|".=-Iw?1 GeB�*[/Hc@Cox16x#P}榼O VmF@s.N~`;]νMJm0wJwXuzԸ˦_]隊~3=$R ?Hm j30:2rsy;]V'+OMIm�JxGS"އ[v$� vm|~o—p{Eaon84Ҍ�Z23@ L&۲#\y�uW^iqu{[݂af 9'4�qjWX+YJTc姰}(?2ux@ v>t[TPB*wmFƲwMCoGgܶElrG>Z.FА{C�ZF@0'9֍9>3b]~YKn>㧝;l7|RJBcK32l<sMà6{;^臙77P 0E'('q-Fjjn?"V,p>8q잵ϸfȃ'(=�4>:`|7=<xwgWʷm՞�{MNa׺6a<?Oկ\~)?i;?ܓGl&| 7-4G cW=[ٮ�'qOO�/}^x 9!@=j# BZS9LhPܹ5#,:_.?!wZ߂׽77LЋwn~ՇP.(#~3uMB;C/C>mJ3N  <2|_|^74�a B7Ä4�ĶyRW})D/T^X}x·|07 \'vZ OE&684NЮ=1Vf7ͧ\khs06~@c9n*e�-x.?}# Q~. W~S0/yr8$͏IϺ7`E@9GC0&Km3{� K&7^sw  /rƠy  lM0a �Wxp'K RN0hSrSꯕV|>y/NIko8/9{1m@$ho"W*'.v%{?5s G��7phב"'qd �s(U ߋf#Ajc'tz_ٹvs73t=� 7tayqǻ3]Ԙ<dl?x7#22d j�j\|,djfq)='hѱ#Le?@pY>\%$=aBۜ\$qu{-E"Д5ɸ�g }ݷ- 3-v}n߃K9/ȉxPxZ0.7┩ &/ aqmG| e9*q=�=ʗJŇ?�(Y Wfs\q/`S.lxm٣6�~?!PipiiJ9xSku-;~ZCGnG/÷)W%@\YmD3O a7Ѿ1qT> I@G%F+Pɇ0J*k *y<BNG;,Z`|]m�yTvw4>FjYꭹQ '[M;z;d0ñP#.@&ط@3yBU-8Euμ1.}n\;ܕEkMVsq 4~ ⇠ǖayqi&*#cq Zǡ9 ņ*eZ+v-(RB{6o0 Tni#\}QO\nEU~2KJeVYL¤_ɮo 7py߽|q!jo^?-ੁ�Ѳ2�Rf@Cu �Au_#mS{9UqѲb(9볰΀+dy(Rvi@h(8x�[\\^MRxa]7]�RK&)ؼ�h7j%繅/8qfKW~7=vwݎ 8.9<E瀼LR M}؊"i`<o \(,9zDxfau4&3R`9}aPcP,NG3G=iJ7-u= [;e\s[0~% ?n!6X\0T:М �>tqk;!.?,;6{r['ŧ6 r<$B<sgU0ȃ`x5aj@BLcF[OqzM{ KŤ{nJ!yn`)+a$ 4W{;�m1`;s8\ 8H &I@gd6GQ8$wܘatf090Yw'?OdxW>{ʟ5\fiy<gmD1?5G 8E̠!`q@9@1Fi�vTF0)�F6XIW{( m Yɀ׆ù܌Or<.1ow]P\)1B*??ы'LjhF O >_5/U|Tyx!3WmV׿{Yk Pf\WjyOӰ.=2P@+Xi oAE� Ui�GcFf�L�)^Vrr<yG<8ppa?Ĕ-Tzs�PP.'b`O}<ἭWq;&SSK[{gڑjGrm)–u%j#!0W@S@(,GhޯAԙ![(]3gNז-[ZxgKȝ͸ã7bP0#3/_p.M-3\~b׼dEer׺x]} c{wl A-XJy+) %GG9(?� @<>^ɀRHi88ֳ1b]A^m^؝ťÓ7;]|)nO=> v {8}8`vZ~|Kv}۷ouX {&TW|#-:p'D>^aD8x3Izn7�T| i!"K�W/>1},7j v6&]ǝN̗]OMS۾>׏(U"oy[>^i/cTK ըz6M*IϣCs~q*?ۏI&OeNF~;=ML."[y-�ԭcӁк+.sۮ_SV̄&خ?\.8M dh)t"eiL @_~xK?OCb 3<u fdK]wux<V:5'`, wEI P!|ؔ+&8Hc"]dHY�)%9^A l/.۶%wᲟ9@5PƲ@|n/LZpO3wjEH>ع1hNO �}m1AFr0d`09ow$'"R �q*WK;߂`3>sLLkSN.ӡߺ-1ʈWr 3�Ԏ{nuOʏלU?(?4_v' #/>ro^$28 3r{Rt3 d_Ym(p:6q_[wդp 3�cԘƫ˭⥞B+`(iMx<8 6E?{N!O~UI31(˾l s_vyM^+D�cڷq  |j@Cd�^}w\ 91ȭ,ԛ7GA{g}|׿�28{F:�7G}©s?/ 0gFέӮef eNNHn'<yOцv!vʏ 6HhF�0@\|⩒<~{{v<c8(3�u7\VkM!vً~*X=Kj"؞ *6npn? ց)@X^dZp*{ |?_�c\?蔇|WAxw qD_/PףBݱu,+0rYݏ=]ty՟n,w!i neO&_x T BAZ7׺V{&ߠ'X3`U_'* hy>ak֤^�_&"^(44zVa:;%XvkBY&20L;otxfs.竱(Mx pǟdG/y!ChF�iXT2)p$HTaϮpo󁏸%1y9\d`]fҍw iJoJv�,ЦT.jzFhO!e pHS)peLx'=dw>9lJ󪞃 Ym6eɎh:jzV}H*g1T� oO�{0>  [tBxŭ?r]mΜZ@f�ĉgz6ΛcUoeI`W{ŧS`?SY!0/H*<n&*I&,?q^ZwصteW <W <q|g?I^sk[JS�ܰҪ0f5; [F԰CPe>Fė*v~p{7C.xByS#}׺m$q]ۅPqs|!e2�@\xO0*0*A.C@;-!7wbyC%vs7ut:0 JM{˻Zl;p4CDŽ΄ϯvrx,⣌(Rvg yC@!໳y80pk~|et<5!wi�#n睿xJw;F4)v.Z^>z){N/!p�YgcfpA*74^';ܖow|n/w+:翦w*�pN&^:{W=ws]asحJm4'<z01.ŧ$2+39SpNxjA#=+Lv|?=}R^ꔆ^7&%{GG2M\cޙ}ۋ:B h!�r#=$SXlxXF>S|cJCv ůed`9>]"4 F}Zo/Ե̚|[S݂Ot˖ҩ11�"5]Ϛ'\ꇓ^|lsM<O5C& sFCzNRFJǴ4>mƼgZ$1^„Ƃ24�}ljW@@v/t{ܜG+=S㻆6� u pߋwbG?} _ڲ!߼{ ʾ=U^*(Ʒ0n<Āa )+:2W ,?4:9wLs2^s,KT�R8时lr[5qm0 ]:p3,5/cٮm׊c >^˦y-�S{+fOZ_͏Ci{u2:o:KO.wۇ#{M?Q;rM3Y^y'f)=:aSi%< fF΁y,p8^% Uc''�58͛v-5 ,<O rم6 3F+F)o&=-63;f]13 ;w\/)u@su ű h\Z/9 g9i,-0�s iX4ۊ .p,HQ3}㈠"KO<˳cfRMP|9ǺbbzQ͐])Ne =L\9;m�Κ@slQ8~Xi!Sg6oǔI!V1P<PEPPfaRr^)pZŔ #�v gi,cd Wlƨ&+âA\Y!V[ofҍW)LF+> ٪O$V@5KX% ~}m%kU)S<y6A*1ӈ0/YD(6'6Dl  ce�8FZ+ח$:sAۡ4oicAc^xȒiʮ18SVxdXۈ Reyρ0|)-k.m^` &ȀZy)Wz|z: X}(/� ~7QI٣ 6� ;f5oɡ=X< ҸCr娴i(Ǒ̳tTTbr@yZ$!EƌA|RȈʒA2IV~ �a~7~%"Zw4POr 誝iW<YJOxPaֲ8~b"_ *}uиUFH܎d GHQ<3.OqsueQ *,F/q{ �D+H0= &47y6|?}0=fK4|#Qn  z!σ@!iCSItxuWm;ar4)^U?Wۆd*Nr7>3Hg(+@.i]+rdjGh(8 =|[92r9<6ʋY<~8V˕Sep1׉2(k J8yѬB\UQx"TUUgRV`ސv4oaxmջ$Pۤ[}(o2A! 4*;/=��5}#7q&-?D4ա(hX� K^ u3Ã!1SĜĎu@:5v?ߺhjU0 0 b܎+1Ay`J$dD%7*.B.5l8UWb0ws@0�K 4�zY808@UԈ?׿7ܝpU0A,A!F ?k'@c9@!-;O{ɇhl`ιj�?`+bm~XTk2#@fdar`$?τo3b._Se6觡cjj#TʧB1Ș,ia|'1w ?`w|_Yfn�c\&8xh?M^ 2#kjp`Ċ灵3a_xSS4zn�8sZ}ށMv =I v =A9q`M�n>w1Pۿ; 7[ n}h6`7#W#+JbOY|palxJv@1TV~~{ȸq3�es![v9>m[? !?J@CoИ\Ff\K"kWcimMno-yw}]hnBLplH\;ah1!OqځĬFm|(( Yf�wBVZH٬ !&ۋz"[:A�B&Rg7D2Dl|Er" 7GBԾr=4bE4⮰e{^>F$C>"ngI{6r^ rOa~'yr.@#_;aFg5\'hQqsAe qCʤTLhC Fq4�qiN! ˔eDњI_Q52@_E(hx/CF`�# zh| I|mbꈑy ʿ '77=Oxq='l;mۿw6Q/FOf]xh;�>>D7lBƁ@.k6TmN_.)U_"L �?߫9lvwa&x! J HQQWTTHO\_uD)hli%+Y"F%$ yh8TEB8/xӤIӸOU +S>0G�˨r Y5Yv( Z+1a_e< ;~X uRzRoklw=;! _~f-x)'Lמ ++`! *^Ym Ob|ڮGK7^IߗB%ˎX<By!(@RY:³@:~ N&'ʤx+Q9(ڳvY!WiHjneUMBF^Y[/.Ofk7AÄ6�1Ϯ:oqgq˕NQ#SY=ybOLAWrY(Bde<}5c| Z3/׋Aˎ˰Uy!;Ňsy'<l#T'Hu腮D(ØʳūuF}ي:>/HZE#D;!@F]xFd<ga;{oJ>g!@Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ;t,����0z ! 0` 0` 0` 0` 0` 0` 0` 0` 0`9# ����IENDB`ic08��jPNG  ��� IHDR���������\rf���sRGB���@�IDATxdGq7޳;nrS>e HI c 6`` >ɀdc[ Hs@Nt9M3_umMwTwuwuwuUu~ɹ,d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ2d8PwNq^cgv7>ݹS;%.qtLBIӊ9T FdG(*bE;W4됨UoE^g~9aeI1>n} i#T�詎/30`L2O4VT:O! "g\nKJ%.:}kn֟aB[ܙ:^Sʹ\$0'0'e%*~4DѲxCP?y]T#̨C_|!_6ΫjU^ ӲSOߊ:)]Ce�NP40_E}rfzJilZh*U׉~uj]V^N i�~y\!Ȧ&5f@_JkҙS! hR9/Q\u4u|YYuJ>çjש[h̷UN 'h} 푖LV)[AUW#T&7=k1|7|[!bi9䅸PJ2}!F2,hڮ=y~W(&+嶖JzNM e�~Z<w!v~< 'cMsյliU8zVHZ!($P3"^NT6YN ՔZY&/z_Z#RtDYVb<!C1t^!/&x m#ݧLVHRoSCS(=nK^na.W(.>oǚ{)Ȅ1�WMҿk'd̮.7o\7kLß|ħRوD3q2TCh* bIxQjV4Sn}/( EDaVȬ.t\ 8+Lȉ X#RtDY�1oQߴ4B24/VP!/#B,NS�ɧ(DBX,gvtnb@H)9oy"%4 a�9?Yd$_p1VvuB q&"`Ғ><> )f 1W0T:M )I%hU)D9ΒHXu*j)+e) 4"\@*+w TP^iH#*(~L hlqWX&5�d҈5bSx Ybuw=Lv`-{w]Axq7�<|9[wK-wa�āsM5%93IfV3|SξX0~%PL:TQ'$3h[j 1N8 �7ȒDdM*|ᬛu y~)?T IONyL)#ԵdLf4<! NJWWG=rdb p-T\umͳ`Xv5 -qj`?y̙]q\}auo7'HBS ' F9%ۢjA8{8xJ̝>2o۴CwI=wo"b<¸�ƀAϝ3bkfp944c8PBӠa6j1!VlZuw[}-Mk/c܃y0Ve˖½,\5ijsf4'O7ph7@a0{ۍSm o]O_i"n�~ qj r6:{tTym?o^Áq-O PN6fu=nGORG̝wr{{P}b+r;˗P455|[(0IOstڦ!`'p93fxs+JXȱ 5�׽гo࠸|ܒa/q`l9@#24Ǽ3g2ި0qpآ\[[O6W^3Le*xG/Z(uDȱ 3�׿Зó?iimuShʟJ~aC=a"7E>])1ְa�͇8p .IsjfBF?Xp, Ӏn$]41Ƒ6�V1P;Ysa&41@r P=Cg+"j vԼyO@Yo1crL*bce�fFě"ff+>mkk3^}PxsƇTkb7Pg2g2uPʌe:^K AΛ �p4~nSb}:;Mo:a IegBZ!NIJ<@^xjĶT@My/[t8/_>(^^)�T,w0nJ5r?NՕQ'qGj؅ ImvW1T>A0` &l(½ֵ"q }£EĨY8 yH9TvJ(�d2MX 8X%By. ށ\<tt~@d:q걸UAN!#E79>0c 2DPA @=/m<B (o 5z"A1C`P G"BG唰.W?/3 gir Ղo_[]6 ~ՀEX7e{6]J:r̃M ;.�'\斎1tnzSbŧe#>I.[S0&o4HB4T?b0_A8( }e80m+o1P-4 A55 I!C" BV%&3BHA,Z:[Oܑz@մvq"u3Z($}كW%>OOgzp$U)Ƞ&TvA*;1?hqxNIX^5farpbIL <@\ߗ,8_<E)8S,iJH[On|"ށs-mG~()QyFE|Ȼ|>$v �t?qxhek2L[S\RP٥V4 u@Eki6S Λ"HPLy{%f�BsqbNSTbB8n1xC:DߧW,k Dk"{x %{~"˚ϔ 6�L/?Ⱦ;}c].�9ŏG*+Ƙ߁St/[֥*A^baf,XI@7eY$!Y<s}Ԛ"--%/ǽPڔMܱpXBT/J[.Ӂ-]n>s#/KEңoy[[/@m1a:oUȧ娣[ZR�WiXĩ_v۷-uO]=z֬6FRI�@`~79)b]3"W8U$3K`ūӍ3͕ \_X_Rf➎uv[|InA.< %o%,pp2;иBݝ g�wq n�s-M+vjjz/~Ԙf2̣«bݽݴZP\ϳm JO�uf$ T3'iPxP)T>Vi,'i4*4� ^3Tx*6tψ]GgkO z1g=87k21k6b5Ud-ōzVPoP^ 'd9v_yT`Iwo\?xO+]l�nyJ@;#.!P6#rVeH�eŧ2SychJy<7\F˗x[v)nβw%}Pg=xէZNܜtCCګu~5ţ�zMqgq䧆@GM<yDea9�)Ê]+: P 4?Qy[fOX \ۻf%'0ta&k׳khq~z u-`.+;+pNHLA,/2ThĥTv<10�HqǼNv3I.Zca�&q%^AsK޾ͭdA)P4p2.Yi�M -́  Z\N [!S vϲ8U<W#_pt �h¹rw̝=yp-S?+ C�ǥ<�>\Z:m u`HCo*x#Tfȅ*sx�4@S[;mpG>pxy gŋ^[znC՗=ٶ{p[`Ls'Sn%7ltTq)?_|\>\Q {3�ڗ,u/x߇݊0^;XW @ rŹ͏=/&y^FFN sG>o `(OJmJo+>8q;ŧF*Yؗؗ') >yc%_ p�QQۈmi,O ~x9 >+?vemGV>9JIkwi/Vٜd ez_pFn/pO]d);zH㰫AydF6"*&x?8Uq'O\kvO)d`HlxW6gI4!p©w`Ľ_PN ="zmσw\i:w.tʯ je\ȝ/}K\pF N<E;y.@a!iPp*V{8xT҃sY/;Ź\+]�_v£%0\<,"/ASx@HywM=C^uُQ/e�y:o9~>[?F�7y#@C�KB-#@RCL+?9\~?#Nw:GFǁ`tڼ9^{}h۽N <p-nso Г` ^' ?+{#o1Y\�vgKn9y�fa]\G{o :7`w"7@ye*'Vm~�YG?׽o|�ԙ3:ILnGƇ\Z=Bp7Zrc-^g |፹S9Epb]Eh)h9X>Mpkߞ\~pg.8ppx|'r>Jc3F~42Ez4W/#o>N3DCf�RO|g.q}o^tq!<Shj8L+?E8�O^u>dϤ Tj<0*_ /(<!^'QdzSQpp 8M-8%BvZ i$c2ۃwur5l;y?W}Py߸dB+4b`c\a(x%|\f�C?{ wg+ހmxAy")E4fQF(y@Ons]{x )^c%Tby1+WDCeB2A @8]{|3Wl#𮯌PHD+ sS+#t~R76*Hoㆋ>Ɖv5N骾"UqhD:w'<Bv?WƩ`$&`:ope+fΛ?4fTPH)Uv h<iV:,1i4'\\CJ\pI5n 0@;aF<>ER4AUZTW0RribF e0&X' R;ݺOw�MNPL 3A:կ==G-x{f-^2r#%N%a\q_ Wl5PZmvU.rUyp, (4=Y~;.&]Yw2c?VMxA<GGOϱ2OĂ@+ǸhSՖhMW١V_B fT/y n;ҟ`ހnWɴPnǾxTJP T'<iy*[/ڔ]ݿ6zLQzNQvmzT?srV.tq F2bC!HȜjO{@x^WPT0s(xQY֏WQS9A֗j:Lh 1N<qQh�:AJ]}-[ZyXھ~t!y{Q ėgry|0fty#G36z0bhp Gݹ?d q=}:I)P4}*Ϋ<wg4[29P8 ϸq q|B1q#A={\nun`g\>bۿwپBW ]yx&sZ_\:jޫ/9swڵ40Bzix*<~PG/?b׽ b|X}1o;8C0h;:N73眜u࡮ &Un;<~܂ o7 g(ct'c?'ő3*ALE^M/*|99Ts~xoo녫ϻ>w7o_ib3)[g$RN# G\LVY.ou@g֭nӣw׮Լ4>MBq�T9V/6h B|[ޅlQzy�a\ksˣc@X[qy@Ə?@bB``7qcȲk+PКgqO[wv.X\1q 1TtG>al-қ^2 ^xNaIj?/g٩ajtRBWʲ q«Nf\۞~ҭ_^whsl" fdE[P@ ]?d8V0>f1bTT�H:L*;mK;q,}a,u[Wmy ?9~p+r_zg?2~kT~~d)ʕ QK95$vuȃ_:ȣkFJ9VcXgZuk{&ݣwf{ j߈QN 2D愭sc.b-oiX# ܨC= �;13nV *SZ9|LLk[aȬ1ņUÆ ͛U812I �p ;6g/{u܁57k2ki7sKҿn +oa|  f<A W}\cFmRwkR꿔zTv0nLCiWMew[~{ڛo0~Qm[z96LcF`Y ЈGP6�Dh!퐍KSc?3v+>*XOaZ]<�] `�*d#L-&/`F�`Z 46ཷm4}*wމQC6:Q`$A3dx&Q0Lh6w[n 4VNT*V8Ox Ǻ /ZqqO'w;q%z un\؊qF&o *{@�X&!rGyU0M@#@z�v hq~M -BD,n?D[|dةQcMEHS�#4^OC=&]4oϹ'j+�P`\䖭0&;Qem^VmnYyU*O(\\Ncq/:vo , W`� g_)?ftB9EUdY2�DD4-lm�1sa̰bdf Ѣ?O#)|v*M4~g #nsww{5py~_@P} r믿2)lYZG;H!W r9AkYe=S4!`eEG8/</_/P2�<SL+/sXbi fΧ/q4�<*ev\-[`Q?0"N hiqtPAiii@̳* GQIX1a�حnwtUDn&uIvZB1hO~�Y(`L\]QAe;t92�T~Fcb(8<XWec,m*wEv=փ7(3Tx�Jo|Ge &5>①uLpC!Â2<ê4q *  24>lB8) !^� =gt];V6lL2diw'ޛ<{ +qLxb@Uv΁Tv y9@똎5m˔Js)ylQd^5^u~_=8ǪG>7nӐۤ>(e GiHdT#@cYݙ(=V@Ȣd@ i*6Ú7A�IS;XB $n'GܨP-,W]e:./|;*?MI_醂xe|Q#cci~Ol}=zxpL@eY噯11 ↫;E[CV`tyrA\h9z iz>95 gtE2:>ÉA 0j/vкGz?Ozv$\ď҂Bxg7\tevvCҨO4臿{�ڡF>gn:?g+O噎2O85m{\[!#U ew~A�3HPb (1~'oD@+Adh %is;;O S01.._ _ ';Wmv*@ET ;7@{,mmA? R9xNh,1dRrWqPoY;~Еvnke7Wz�)yAbY5YS�9v@u~;c#w_dXNZ[ GZ1h̃譶 6ٸXw!⹿6{\kg )##qWSeԠ,8ZL(8{w_իژ*p�M̾l8 H��Vh]PJ.SBK)8e% ʆ A@v+';;q7\|<pщy涛-~{?t+yA A/MY0Sz3{ȇ3';y2XHS7\<i*T6/5 џu#mL?uo#5Eq).3qP9*oǗtêOǿ)~dG4"ƉdzC wzy\B$xPV ?tGץs/ATӵWP HKA%/<1snzhI-T#aD?  S)얝zFڔ- P Tr;zq?4|Ǩ<V}pZ� 86H(lF@FXpIoXDSGZjaVUr|_e�u!܈aLm3smQ_=nT8yk ?x 5+V~; ?a7pq4ᐌĴr|Z�N&X\ z=/2)bPAB?)> \5m*ʲ3_�q�6O g.wt=7gu9UP! ߽ ]7ɺX۪PH6D:ig�86avM F`F_V&}< જ+MwAΕxuhXhE W~=wu_}({>Uӭoo/۸ 7ި{7T(?AmO8- &WNB  n݆{oWtp*#ZJk'NuXn97*1xJټaLE|OO/ڈk<Zdz1EcKOno~?# ?߯ZQW2ӛNim�8V}!ٻus*t p*K >s<niU'E@v�/zwFUA&8Xe]~}[^pGo}tO{ _E �A#` '?q7!w^H%  sujx[|9vg *]?"7*Ho@,yY)_B*Oe_WZP&THkw?/aDV~79 3<_F� {m~}V<TBZ GC\^iA-8~30SvZH{0߸PzEqhlTU:"`-p*G ܚv=)<lX1ceEg:�ٗPT]GFMne_O x4P-@)-X /*ĸu^BR~W Zg{9}!+Ӿ@*KP,}vH9ѫ +&Y28|K> A)xҩ@nn暟@FCcy$^q\S[—ˀHTT"R"9bh@*Ģ&ߪ1n>1x1^u{?%(FktP%B2ȼ�kz᚟^<] F:Ղ/Zh~ 9.jr5"s* ذ{Zq+VScoF:(}onVe16t*S�^ lƦӆ\ YP--7D~6\W~h&8X -#E/<ua <UPej8+4V슊?ma2_  @ i!�L/ΔTB UXiZxUDdž GeDsfPbzQǺf0}n3γƒtb<in߀՟+\p-SAρ� B = bo9PK㕍ݨcͅ n1TRto]1Jy�{bEkQcP/P_{2Ƹ~20�cT8_WsW-ո e%噞yʰ P2Wi4,7@A B8oG-.jtO 3D j,p 3�k~?Io۹*-B 8'nƒ 2At1emlc vB1xBeYQ\c+~lub}͡heGԀ^�$ 66z= -a,“8:ƄS83-M-`lht#C&4y=t,,<!ӵǸu7گ? w_}ź�K UFSg..l0ǸBqFW$BSS+T@îCgqo%LiZƣg>*٪i?D ' >k-03[+e^\Vٶ%alr 5ctKGg_tm<Ds @'e?iW#3�CX'xatncW /%W:.˸B\VkJH\~UW:.OWom0Q /X ny~[h` L/븣s"Пh>6 dB$BܐU?B?mxI)=~n7"?~{tw#c(SqYyxE\~/asBZ&6 @47A d&@F n(TD Vz剥JeW  A-昲[ @ QTUЎ@3ǵ̞q_bbkeW ew>9Ε+?g!Y?2YXLL% WXEy8xLCJ1޲`QGڡ"!qC qY4Z/_4E TsrQxsr 3�dPV cHzдy\dF.|@vxlӹֹ+ J܏7Z hbN|Λ�g>OdC@0$6ULSJ}랭PִS@ /gp,8|˼uҪ5 *s/.*,4" 1pq~uiէʿ=օ[^`ʅؐ8!v!:"ۻ9׳imY+)J)bp-ŴY6?s6cEFU mjSe슾 V찓%� k6q@F4c9` 煑RڿcQ2yWYB'dwtjS^Ue"uX qÇ?I'"<aB7Cƀ 1aq 3�`W|8=7!) tP|-\\X.0D=掎}W&w:3;!1P*Xmd�_l*xoCvlKkUTFuZ8ZucfX#MUcu-;g֑HTݻ0T; d`Rjy3a gBk),i/01@Dgߗ'�, .͉?ئ)5C1Wht&k{U^ Io//nzu),+)kq})x$t@5@#WE/6|R/b- ME_jɻGH/=vdNLVWd\ZŞ6$)Y&Wm$T7 g0z3oE)9^ht@g\ {fd�_My4xJdfVCe`WW(tIz R~H8cpo:S)"^pۇwn(~wQYQ;|w�^2Q%|ɘW)YOrxiQ fՀ�cn=q Φq| L(J>n╾Vw{JNX�,@& {|*>;Fc`�h\s+|/^!3�#Α[yIKTA X] NOc`')eͷ$UZPu#8�O ]Q ox:ь>;�qtZz�2QLU<P%)u$Ry$GܠU)<G/}/@޽Xӊp{m0hi<X]KF'H *1o~F7a̮A"83D|'{ %<õh;v(tp�IW~<_%.ٍWvHI=̙e,5Ce30W/8LM8wlt(WUߢJ g4DU*`iSMTlnl=,tycQW!Ʃs5 @ e8pyѡ?|p@%`;7`4k®CR"m|$u)x aIQtvgg*ƷP`V~H ,5$^RJmӮN-@qޖ0LnVQ7ulnj1cP3/4^DQ6 e~է#G}XAs})+!>5_4z9l5\cO; x0CLAۻm+qB#C4(_3us pGZj*ApCjoRoDgE1BhۀطicT_w^b x5DŽ?:nLW&F@qU6HRڑPQYt_;rӁ�7( K iD{zp{؆� 3{w-?Dz3Lʣ+޻qsQ~?+p>GNAc@Y20D~EW<�D�:=r[ 5E (pz=o<N6ǫW.9| 3_ }tjKd2`X2«c竸UaǺ\{~#Я6Kß� g0 \"nݱYGUWV|.{<6�<-\=A(J!1�~v?t48)9gΕ?^MMJf�X/^wbv={'^SRnP=I#BDLw.<O ^i 34lmf`3zgpO>myF)rշXӫ*%W{nmM QfE{|g4wٙZx  @6)kI&{ l&\j/Ъ�n v}k?!~A'gUQjI"Ϯb3 3-qs;`@iVb?I` 0YIO_<߂ H"_|e{)[9v' 휯 amžCaᒬKe<uS ʘt_. M")ԓ\HL &W~ċArftZ$w>[)(~խ?P]Ӭ4.9ed]-9L[{x`sSC5췚0@wn3[]R��*SIDAT+Ლ7k!N_1sbmGHxN_S�Pap6anm&ow �9t\է)Oez�Ŧ^g”+VSx4__h6Lpvw{PJW]`?(!oђqox+~>d^9= �w5=wU5!p/ �W}Y/<ӵ.lY6&IAZz?!g;ؽꑊ Hu,]y7y2�m[߰%|t@jӏJoo"]qo8;^j 1*&1#tzU5\;P&ʼ2@34=\fa_L�I({ @!!3c�]/8˵íoRBKMQQ`jC�`2[nQE:->[mO=q!;G\*90 @ivS|;  )`]ԉq |{n1ELV頬IbqDdtq^5WbO8" ^Kͻݣ(cipҞ^ |OCn)> s}/\~ sxxw`8<L9 b?Z4:&<Ж;nUm7߭|۟h4�5jIst6S|=vU$AI]HrnٯWm?(ߜ�|b�a%#7r}׻CsE#�9HQߖ'?)c�| qqW·"x!ѥP~T|".=-Iw?1 GeB�*[/Hc@Cox16x#P}榼O VmF@s.N~`;]νMJm0wJwXuzԸ˦_]隊~3=$R ?Hm j30:2rsy;]V'+OMIm�JxGS"އ[v$� vm|~o—p{Eaon84Ҍ�Z23@ L&۲#\y�uW^iqu{[݂af 9'4�qjWX+YJTc姰}(?2ux@ v>t[TPB*wmFƲwMCoGgܶElrG>Z.FА{C�ZF@0'9֍9>3b]~YKn>㧝;l7|RJBcK32l<sMà6{;^臙77P 0E'('q-Fjjn?"V,p>8q잵ϸfȃ'(=�4>:`|7=<xwgWʷm՞�{MNa׺6a<?Oկ\~)?i;?ܓGl&| 7-4G cW=[ٮ�'qOO�/}^x 9!@=j# BZS9LhPܹ5#,:_.?!wZ߂׽77LЋwn~ՇP.(#~3uMB;C/C>mJ3N  <2|_|^74�a B7Ä4�ĶyRW})D/T^X}x·|07 \'vZ OE&684NЮ=1Vf7ͧ\khs06~@c9n*e�-x.?}# Q~. W~S0/yr8$͏IϺ7`E@9GC0&Km3{� K&7^sw  /rƠy  lM0a �Wxp'K RN0hSrSꯕV|>y/NIko8/9{1m@$ho"W*'.v%{?5s G��7phב"'qd �s(U ߋf#Ajc'tz_ٹvs73t=� 7tayqǻ3]Ԙ<dl?x7#22d j�j\|,djfq)='hѱ#Le?@pY>\%$=aBۜ\$qu{-E"Д5ɸ�g }ݷ- 3-v}n߃K9/ȉxPxZ0.7┩ &/ aqmG| e9*q=�=ʗJŇ?�(Y Wfs\q/`S.lxm٣6�~?!PipiiJ9xSku-;~ZCGnG/÷)W%@\YmD3O a7Ѿ1qT> I@G%F+Pɇ0J*k *y<BNG;,Z`|]m�yTvw4>FjYꭹQ '[M;z;d0ñP#.@&ط@3yBU-8Euμ1.}n\;ܕEkMVsq 4~ ⇠ǖayqi&*#cq Zǡ9 ņ*eZ+v-(RB{6o0 Tni#\}QO\nEU~2KJeVYL¤_ɮo 7py߽|q!jo^?-ੁ�Ѳ2�Rf@Cu �Au_#mS{9UqѲb(9볰΀+dy(Rvi@h(8x�[\\^MRxa]7]�RK&)ؼ�h7j%繅/8qfKW~7=vwݎ 8.9<E瀼LR M}؊"i`<o \(,9zDxfau4&3R`9}aPcP,NG3G=iJ7-u= [;e\s[0~% ?n!6X\0T:М �>tqk;!.?,;6{r['ŧ6 r<$B<sgU0ȃ`x5aj@BLcF[OqzM{ KŤ{nJ!yn`)+a$ 4W{;�m1`;s8\ 8H &I@gd6GQ8$wܘatf090Yw'?OdxW>{ʟ5\fiy<gmD1?5G 8E̠!`q@9@1Fi�vTF0)�F6XIW{( m Yɀ׆ù܌Or<.1ow]P\)1B*??ы'LjhF O >_5/U|Tyx!3WmV׿{Yk Pf\WjyOӰ.=2P@+Xi oAE� Ui�GcFf�L�)^Vrr<yG<8ppa?Ĕ-Tzs�PP.'b`O}<ἭWq;&SSK[{gڑjGrm)–u%j#!0W@S@(,GhޯAԙ![(]3gNז-[ZxgKȝ͸ã7bP0#3/_p.M-3\~b׼dEer׺x]} c{wl A-XJy+) %GG9(?� @<>^ɀRHi88ֳ1b]A^m^؝ťÓ7;]|)nO=> v {8}8`vZ~|Kv}۷ouX {&TW|#-:p'D>^aD8x3Izn7�T| i!"K�W/>1},7j v6&]ǝN̗]OMS۾>׏(U"oy[>^i/cTK ըz6M*IϣCs~q*?ۏI&OeNF~;=ML."[y-�ԭcӁк+.sۮ_SV̄&خ?\.8M dh)t"eiL @_~xK?OCb 3<u fdK]wux<V:5'`, wEI P!|ؔ+&8Hc"]dHY�)%9^A l/.۶%wᲟ9@5PƲ@|n/LZpO3wjEH>ع1hNO �}m1AFr0d`09ow$'"R �q*WK;߂`3>sLLkSN.ӡߺ-1ʈWr 3�Ԏ{nuOʏלU?(?4_v' #/>ro^$28 3r{Rt3 d_Ym(p:6q_[wդp 3�cԘƫ˭⥞B+`(iMx<8 6E?{N!O~UI31(˾l s_vyM^+D�cڷq  |j@Cd�^}w\ 91ȭ,ԛ7GA{g}|׿�28{F:�7G}©s?/ 0gFέӮef eNNHn'<yOцv!vʏ 6HhF�0@\|⩒<~{{v<c8(3�u7\VkM!vً~*X=Kj"؞ *6npn? ց)@X^dZp*{ |?_�c\?蔇|WAxw qD_/PףBݱu,+0rYݏ=]ty՟n,w!i neO&_x T BAZ7׺V{&ߠ'X3`U_'* hy>ak֤^�_&"^(44zVa:;%XvkBY&20L;otxfs.竱(Mx pǟdG/y!ChF�iXT2)p$HTaϮpo󁏸%1y9\d`]fҍw iJoJv�,ЦT.jzFhO!e pHS)peLx'=dw>9lJ󪞃 Ym6eɎh:jzV}H*g1T� oO�{0>  [tBxŭ?r]mΜZ@f�ĉgz6ΛcUoeI`W{ŧS`?SY!0/H*<n&*I&,?q^ZwصteW <W <q|g?I^sk[JS�ܰҪ0f5; [F԰CPe>Fė*v~p{7C.xByS#}׺m$q]ۅPqs|!e2�@\xO0*0*A.C@;-!7wbyC%vs7ut:0 JM{˻Zl;p4CDŽ΄ϯvrx,⣌(Rvg yC@!໳y80pk~|et<5!wi�#n睿xJw;F4)v.Z^>z){N/!p�YgcfpA*74^';ܖow|n/w+:翦w*�pN&^:{W=ws]asحJm4'<z01.ŧ$2+39SpNxjA#=+Lv|?=}R^ꔆ^7&%{GG2M\cޙ}ۋ:B h!�r#=$SXlxXF>S|cJCv ůed`9>]"4 F}Zo/Ե̚|[S݂Ot˖ҩ11�"5]Ϛ'\ꇓ^|lsM<O5C& sFCzNRFJǴ4>mƼgZ$1^„Ƃ24�}ljW@@v/t{ܜG+=S㻆6� u pߋwbG?} _ڲ!߼{ ʾ=U^*(Ʒ0n<Āa )+:2W ,?4:9wLs2^s,KT�R8时lr[5qm0 ]:p3,5/cٮm׊c >^˦y-�S{+fOZ_͏Ci{u2:o:KO.wۇ#{M?Q;rM3Y^y'f)=:aSi%< fF΁y,p8^% Uc''�58͛v-5 ,<O rم6 3F+F)o&=-63;f]13 ;w\/)u@su ű h\Z/9 g9i,-0�s iX4ۊ .p,HQ3}㈠"KO<˳cfRMP|9ǺbbzQ͐])Ne =L\9;m�Κ@slQ8~Xi!Sg6oǔI!V1P<PEPPfaRr^)pZŔ #�v gi,cd Wlƨ&+âA\Y!V[ofҍW)LF+> ٪O$V@5KX% ~}m%kU)S<y6A*1ӈ0/YD(6'6Dl  ce�8FZ+ח$:sAۡ4oicAc^xȒiʮ18SVxdXۈ Reyρ0|)-k.m^` &ȀZy)Wz|z: X}(/� ~7QI٣ 6� ;f5oɡ=X< ҸCr娴i(Ǒ̳tTTbr@yZ$!EƌA|RȈʒA2IV~ �a~7~%"Zw4POr 誝iW<YJOxPaֲ8~b"_ *}uиUFH܎d GHQ<3.OqsueQ *,F/q{ �D+H0= &47y6|?}0=fK4|#Qn  z!σ@!iCSItxuWm;ar4)^U?Wۆd*Nr7>3Hg(+@.i]+rdjGh(8 =|[92r9<6ʋY<~8V˕Sep1׉2(k J8yѬB\UQx"TUUgRV`ސv4oaxmջ$Pۤ[}(o2A! 4*;/=��5}#7q&-?D4ա(hX� K^ u3Ã!1SĜĎu@:5v?ߺhjU0 0 b܎+1Ay`J$dD%7*.B.5l8UWb0ws@0�K 4�zY808@UԈ?׿7ܝpU0A,A!F ?k'@c9@!-;O{ɇhl`ιj�?`+bm~XTk2#@fdar`$?τo3b._Se6觡cjj#TʧB1Ș,ia|'1w ?`w|_Yfn�c\&8xh?M^ 2#kjp`Ċ灵3a_xSS4zn�8sZ}ށMv =I v =A9q`M�n>w1Pۿ; 7[ n}h6`7#W#+JbOY|palxJv@1TV~~{ȸq3�es![v9>m[? !?J@CoИ\Ff\K"kWcimMno-yw}]hnBLplH\;ah1!OqځĬFm|(( Yf�wBVZH٬ !&ۋz"[:A�B&Rg7D2Dl|Er" 7GBԾr=4bE4⮰e{^>F$C>"ngI{6r^ rOa~'yr.@#_;aFg5\'hQqsAe qCʤTLhC Fq4�qiN! ˔eDњI_Q52@_E(hx/CF`�# zh| I|mbꈑy ʿ '77=Oxq='l;mۿw6Q/FOf]xh;�>>D7lBƁ@.k6TmN_.)U_"L �?߫9lvwa&x! J HQQWTTHO\_uD)hli%+Y"F%$ yh8TEB8/xӤIӸOU +S>0G�˨r Y5Yv( Z+1a_e< ;~X uRzRoklw=;! _~f-x)'Lמ ++`! *^Ym Ob|ڮGK7^IߗB%ˎX<By!(@RY:³@:~ N&'ʤx+Q9(ڳvY!WiHjneUMBF^Y[/.Ofk7AÄ6�1Ϯ:oqgq˕NQ#SY=ybOLAWrY(Bde<}5c| Z3/׋Aˎ˰Uy!;Ňsy'<l#T'Hu腮D(ØʳūuF}ي:>/HZE#D;!@F]xFd<ga;{oJ>g!@Ɓ2d8q @Ɓ2d8q @Ɓ2d8q @Ɓ;t,����0z ! 0` 0` 0` 0` 0` 0` 0` 0` 0`9# ����IENDB`ic04��BARGB�#"̃��ԁ赃 ��½ڹɴ͹νӵӼӯ_ӹӱѼ˹Өþo��Wdc^ZUQKKFB=85+jhc^YYUQLFmc^YYUQƺ^YYUСfuufYY_E>&fuqlYYܽGB>&fuql؞YYӀDB>&fuqlӌ00o_fuiQk..eӧ c_N:..1Ӏ `4..)RÙqӵ\:4..)#FӒqqZE@:4..)#,FFPLIC>72,,'! ��:?B@=;877631.-%vMLJGEECA?;h~JGEECAƲGEECϠBSXSEEN>7"BSQOEEܻ<:7"BSQNؗEEz9:7"BSQNӂ~g VBSF.[YӤ ?8'{ {LF˜pӯE:ӑWV:  #AD("! �ic14�*PNG  ��� IHDR���������x���sRGB���@�IDATx eGU.\N=I:CfHB� SBdY~E'>ӧ>}Oyʤ2aIB́$Noj]gIw{W{NZ[j]v}I)Rx <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <t{??MfiV^3R C^5V =!VrlB!߇@v+ZO؃�TצV*S n} \ :X͕eY11 bN+JҐjȪisKiH=ey r^Rvvӛܴ'9uKm; ] i9#}:Pl eԼR7\gZvn�S`;Sݚ77zo7uS=#X�fǜm|f1OGQ,'Ss8)v(mTS䕡VQΰV9ks֋M(tiLӮMKmVӞ̷)|ڠA;!T<8h6s&z#MZ&rœjtZ(ms;9$C:mHU(]ܙNsLFmk}Y :|5LOvJY +Z'W}Z߲}g `X�K/`Nf'`p<'hHrᙚ+fSK TހT**gmwwt`S+R̄ek57vhta܎I oWdjSvS JSǬu\GZY)3ٮ[K:v3%e ;&ᛨ+T&J9MRFTEE^k9#F͐V&J9@wOt`c] i9#Sn3V)5PM1 Nfb" ~鷺юݟ̢bpAҟ{^\!1Qj7Qhx(-W̦(@ He4UAUZӁZOTJ1uӱ#js;&m^վFOM*(NZupieTtdn- 8(ϔ3옄oFP(6mKaQYxY瀎45CZ[X(\�m=с vS3 rLXԼRw@4,;*kپ\#{zcy=Ry �Go=K1lQzkKcZO) e#PyRY('k9ܡCZLb&,+\)7DGc sG�vLy3Z'7P}jUP:f:JvZqP)Y5- f1 D^2Qʹmږ4**^ Ni6j2Qʹ�ڼ{ fHT9r{ZMyJy FKO r"(tV7ӛ?kX�O^zqW#lql{ zcib|,Ҙ#:j&m$gUeK.'k9}؝ uJEe4yU1+^�AU1dFP[RLz<@˹TFR(eV81bQYVC` ah Ŝ蚗FRc8]Tb\1RggpS4逎TPZ¦0@ Um"V433gg>K?t6c"`/߈方 ^zl{S'<1#X˗˖ɥirR7\֢vޘC:p0QO^&hi 2t`01hځ K9miiHaZ]Ft-d Q;#;R=ِ*vˆэ ]J ]0pX5Wf aɱ Y�~KD~3 <~D/8HhNDbڵ_k޴}}twټ0PlQDEd+v6X�tyExOc˅kڃφಥӪU++$/EWf6T,!:Sk0[b-8 ]lT:Uj]!3XW渹ܡaxZMJuۦ;N@٠L%mBWŢ7*ȁvL!;EM#uXrB"7_e ρ_ *bNj*|)%"jѠR;ܙnqwNY-*`رuJbdbP9~쩗qufke`br2[6]&-]PY`p*YˆC:Zv I [b-8v 3C&)nocCa-- ) i׀nÆM f *8L_y&7F5TbkBCL!;EM#uXrB"7_e ρ_ *bNj*|)%"jѠR3={ҵ!Ӯ[*U).a/<E{"emNʖaʕ6NؘVX&&&@x <X* V7lHVHw"`羃^++hĞG+@vG.;w"RT q2_]5Ȭ8Pj2td8ЫaoxstQTE(*wL:`].ژaCYˠ;m8@7ѧ>+9#;dx TEt3d1U(JPN^1K Rʌ:,9V! @[oȯre> <~D/8HhND6JJmFSn[_t]w5 PߟzwXt,�S/NmQ#Y?"\&m:y PXZ1b\䍶He!?PoE kt.84ysh/F T7 82 ߑwiI "p%mZ"-=gўMU"$/L 1"HizT o٬W5mO +k�".,6̩ա)4&*J[pKA )X7hU|S32 @h9H�C`S elEWFBJݶsW( 6 -)u}ofwԢ,Q8#jK5O˶ӤjRE| !ɷ4Ԑ«&/FC8n ѪpQV=p@3]ppH! + ǵUk+XEWH%J{4TXJ1T i*9^iQꕼ bMûk9PZ,B8+Oj+mӚ*^4j@O0r;?j3 -^7j@-^.xf=D Ҡ=]Ƞq>PnfU7ܘ UV�-{Z~Wl}\t|)?V=-r4Ƀcp{eG12zD,|C:@-{cw?0%ƞy?o櫢hӢ]�|m?)+N'pqƴi&>1\}&';0 b`Du#/>9a;MMvk떻D~͟?{U7dsWl{,+.'}\Y#'_>oA  <pz �{<ހaW� % a퍲{ÎiZn t$ܟ}EKƿ);_/x֢[�c=Z_Iv%K[52p/c_;<0wP4B�@;+W[nEi% $xESk �|ܶIo_?y~70[:'A<oѶ }>!s;2٥ݺ~%_  -!>G>7={}K fGqb7oҟtժi)'{]rzr?99!Ĝ9Gw<,=[-ax.`ݺ}y8p^DVҤ?ၓKUݒ,°Eӂ:z<D:1X<V\N>d}xK޸q,:#y�|!IGm*񳽙x}`fa`m.[ti:Sz]�YNNNqH@x <0-;y3CV2cVԭ+ɷ\zd o|q[͡H lu'zlޚƇ|?O'QTXcZ8}5n N˶qS^߹s{逇_05퟾v:)X1IgώCh8O+F}8@x <=Evos|۶wV_Niؽ0[w_;ߕJ+./<p.yё>i߲+`姞#W]+|ǐ�Kbw<�\y``j +w}2r,_\;�[w(4.'pϿyN'ρD}F�N{%]cvƍ~]>#�;�'҃ _9˦~xx}$ r_>L+^'+}~]n ^x <r_+m[N;K&ɯ~ba.xquɕ _WUؐaF@x`y`4/>8ё.q@>i| Ԓ.> (; |c`WZ+ *?#ܕ_ş�[ut~ 0 |hx <<CA!;//eϕϳBZ�HZVY$?+y .<@x <08\spOՒ%xW'\.|�:Or1Nv ٸ`z*CG}֑Qv:zSn<ηw|˽Ɩ?E 3VȽԗKxū1P.kzၣQ@ >XqPк+ yn1˦$%F5O !2umOJl5-6;{ll<ɖNCaE\Ұ@x <p_y^U]hh;^CLy0'"͇|>,�I~O.۲=w,B VZտ#r;Ί-|;hȁq}uYˣy|Y*?p9+e꽥w@À i.3MYhX?7:m#yJoHp)NC62-+ 2/ȊWx), #r m)WdEL2#pȓ4;X@x=P欹hWXj;-4BO@ZO!4%퀛VNowr]3[W ~̓$#Ө:շV>16vzٹr 1l A|?B;YdhW�i=0b}EBT〯*ʰE3gr}ၹx�sG\XVe;Z2WZ%_*b: JիdP~첔fCͦFҨ.�"ؿLAAyL~q7yH-x%�;% x-8A^VB喆. EoT -) ?O �@ (C4sbx$41u(s`216'eA1m^&T0 ~�ϩ=rT�Gl-7.:a=R~7ML}. dOgg``}W}2Ε~tEi5Wyy1@JЫyX�]df[t5VD]n,5glnͬHs$u#E5LIq!H^]WI#*(P\;fzKy=+Lwd6 r6&TAXF>ڼrm1.]&W+z _ ܍Qu$u'B87(Cpsé*kЄc)f!pG�JT2"<X89� ԥM auip^Uي- Rnk8 (W]Oo]oߑ<ݔMO<@~UD 5eF oE]&棸�aHC[럁'9HO-]bWI?(8LY><] z3=(j>{ X7)+$q9@;x <uaEV Ygw:&6GfnmJ@kfbx^x(sLO @Y XL>&Ѕ 0e-c-�~'k`i�?-L1(*K p` YcPƘ Uś5,VDgh+O^MX$0s2()`6T�!Da \xԟugDXr8˕σЅWtqrToX&XLV c=[n*'j 4!=ؙIS9G_"XAY3$X] *UuҨ-�',P/8_~'.�P�eb4R.oA6,J ɸړQKr)(Bߤ]?3KyS%/d* 4bb_3"=N!?(YڦlLEC)q Q?_;�"9iAī\d5V-&eu^a  @ʸӯgƂ^Z�2g&�~zl*0/ tt(/�%-ͧIxF@G >ߌ,T VoIy!hI, rFH7p%3 * M\X(e⤅DƩvntj@x`T<|hrBT*+D G*<RY& #1ǂ6lՎIӯ"rW˰(n85kSoD@!ZĘ&1N6src-�.�F.@*H;p҅ 1�om$9]z<PP^MffIw'RVzZA4%6 AR P6xy7f L`Hbx4_`˳zV,<=sq^'`)@yʹSY5mB_�B60W_ErְzQ޹( Z 533Z³/K'Ҏ=6g)6d18&^qFQZ�ԎC\{~&e�,E .t,|\YA˲*ܒO\egW۪O4$\4AJr4Z"-: XJ >sW l cm ~BP"-<8ȧmw5vf";3dRƥR> /f1]4,8+='lUޮ젅0N޵�+moФ̞[� 6_E1TR?̥ɝrWYX#FU##z3{кիdp5=}Wx[?|21Aw ._gJ%ؓ@Ff$mCRc19,C4o �> ]ta�$.2TWdeZ5D вffd�ϱNCYXKUiD@%\3\^0qd5Hq`Tо@dlkKs-5\FִA@Q֗E#\:JA )mG!�! R#Fq�IB>;eU?#>ȷ�d@A.rl1VC7mg�qjËQ22e\) Mق0+ ˡ @ YWCEOq$*>3�8<cq1BJ4dV_ *<95 d\=WE<}�*(8j,Rx*.9Qmgz2D er+* 1jJ9%Gb"3Z:"`䪴1 AͿe6 �;R~oMd]w_%v7%'eK o(|a| 01&wEgߞ4W~EZqto. ҄>F-I~<=HU(Y<2p)0,�$eRY M^@ '虮8:p"K\Xa\V�NwJ �)^堁b*�݄xd�Cf䙟ː`-Y&ܸ)Mzq%k*rr4tY*?ӓĚR}X&v zeZ[vi}jיN?!]~1w  oW]);iT�Qy8wl||<5y̆4RL< Q=ȎDBLYLݛJӻw]w}}wӮM{wm9Qbca!CV8qq[�DU[8PIfZRP0MmB&ʤj�ɵ(dGfm /@x`x �g+- CHxiMֲ,# Qht,kYMrM5$7CZٚED:'-K83;vf 'ӒU+rykR$",w1LE.$GD÷'S!OKx %L3y٨,�v:rqY5%_C:ߚ~]( / wmݲ(kO,"&b z+RЅ$g P9+%\)Y @]Ժpc(Z ZG.GvrP'y^@#IXH&W+rW3 !jlx;žHAg;юJ tM'\3Ҋ ǧ֥%4|Jol�pq\q\䚴tSzǝ{QJ? =;iMw\t?ߞ=.7\bt A'})P`]H�;\ 8&zԣ eB�|L- ȑĆs[o!J@x@<sbY`gR2V1 �B4U_bHJAz]~܆Kq;'۲5:~cZr|� 4a n4 uܑhҕnKSzKim7~?)_3;Ѕ(;XH': =1 rJprR/bTEupFd Xze+Z�p>hO*FAx eXn"O(e{H 8 <}҆itaf܆ԷfiNϿ ۼ%-`i= #}q͉z'=4-iwտv|HrnXƮ�N|n#v^ @h[qg,aUfGE& EƪtHDXD ([,[YJ\#'#:�Nj左cP;񡗤͏|Lpi\/-|8`Q�@aYrɶmz#Ҍ<S_L{j_CqhL\x|pն0-."t x8 0�EY-R;l6xUK^�z(re˛]+р y-v5oUOu53�bH =w%Z:'-,߲Ev=l^Lg�kz[|zڳ㮴o?_wZ@Λ�GϋU A< tj_xy"/8)B@H` j- (<ߙ63Rϡ̫h^C]_ޠKt P8B ѕ'<?ӯ|B:e 9x@9sȨ.�Gy8Y] ޝnW-/^3/& 9%-{v И |@= 2Ly;9"1[$(nA)ڭCzڨTZӌ y!H#1s߮ͺeYo d=T`&?V?iJ']D>^y�^QԑQ9EfuJN=7w}| Qals�"<,&&. /6z&M[@C+B 0"QFf<H,8 8\3=mHM^ƫ^ lZN}OϺ_:IOK'J_־TG ۂ@,�|7mT{=1C۶@i, 4xu`B8&[L_h=(y @fz  &.",4[0s@V)+r<"pC-9L`o.;t_6_0xFZ"t+I<wŏJ;n9/п# AX,h“ |PĂAc@Ǯ�>9l-^M#U0 *0)%o餡7$|lkGpOY�Ixdo;n/@,�__ZW{퇟N{oѶ%Z_o[g�d!|Y ]') n"zp{:!Z� ,dO33~.�o ``[կQRY~~~Av٣ӒH@,�b$O t<8x^)?G\FY5N>$cG3`!wl Lf!GG%֖@XWJZ7 "`33׫}ymU^WP8IϾ\;"oy �-wDړ6_+]wܞoz_ڶl�j�`A߾<Xbҳ,Cb4@] u y*rHz a!dW7 w�ˏ &~zei݉'x  @,�y&֧3+nć큙}:єOH$.  a+$X;�xǤPDh̓f)%@+??tG{zaϮaVq z srM{+\¹^�HGNMҙrZ.?)<0`.^ ;\<扽qE_'3erӭ~$`/OX`�$L*;  +T _K(H#:!@[?1,�^uݰz/xe�{B%/K?v�) g#G?/oϷ|qYK55.M~_5ŀ>3 3s, P=Fy|59E8hCђxח1ā+{={5g>p6>)HSN=@,�BG6Nަ/K7~RY]ʥ>@y�W $帢m\LHmAE�R@z }\צ[,�R}կ^"Gκ �9!DsO(bp. `!!O׽o7߿DԶ -W㢀�ˢ�A^x|QO@IS@&D, 0!bAQvI�aB?Rxpyk<aqDYs :+wc y`26?Q>GX�?.z+Â'=[~,z f"ԭ~\�'|, cBE`! �8a)X2, nJF84aV0.-wXҀ0m}կ| ,�r_hOW>?VF Npz3lkץ;koޛ ^w�$B#c `t5N( a\[,@m(V&QMʱay2rBؔYnh^CW@HA=[٬pr5iY9~z>X�^|C~z7iv {$3#s7` ނ5; a�I&ZPQr< i ![BhaVQ:@��Jp+7$=eJ7X@,�cìz67 { ][?{ǭ�̔;8_  @aBLBNz/M(a#恮qb$xG% ܂z}կ;�kWB!},䧥 GzTbp86Lf{O6]ve_^o<P~k�o% 9&M?)[9`,0i769ԛ--}.@� a^�,=t^6vF)@,�-o}#/&vpEʌ// տ›.@kBG˂-m7�xEl�jHg m woc?v~p:DLx<#tԣ$OwCW߹De}&@r<h�.<>BGL¸H?%Yh>t"-j`<THPdЇ [#=R&_R@[^Mj=bp_{<S<vCzk5%,c2ƃгzK�ڮ "%�-Jx< '}mT-:�Aܒ9 \�>7?`EDC_W3{|,HၣX�G<$^/ ~w_{<x//8 Mq/ >'1bRY&[ =c PH<,c)Po7A3P]\״ʣ8 z*U6[z'\t&ס Oˬ[^j.\q2E�Y37 4恮 Ƌ{Øl'=5[$BPxb`wBj: 8mx%KKwp:aK^qe//rm:z;@~7� NX ̤Lb /.&Fp%X p+/t ](/i>5N|GpԻ =~i5\$�IUN*KM6NZNVNrEZ?eOuړ ͕}3>"wu<`>mԲ邟ޖgDVq_X(// l<KLژԥ['zȲ|�,lxW$2~-~w㋋<Ke{CZڧ@.؞'֞vv~?37�z|W� [X Їpe  {Zf7n/»H^Zȸտ2 /dL"v gYǙzįV:o(z5ubM%~goST:!ˌn |ylbDωA�x;v˨:oJN3W2t' A/_~�"sE�۸l_SØxu_N<(۲rXE@,QE$ƓO~̕7=X~q:|<W<.:R?}[O VrjwI6|#8>[yil Ļ Oj7~_@t4|z]J8%&N{"]p\gpg灮# 90S|EV/|ox|]~&М@΋o \׷[,rϫï`?),c\�yυeL^""OG]` 0VS P6y xNͷzj%ؗIZfg(eLR|"�#z%Tgqd#ꁺ|?BF1?ƃ,C>|yz+YGĠ݅'P@w"CgS,�F}>[rI2Y۷:燴xaِ`Z?>= Kȗoܔu'yUZ3QOiDYG QhA=t*y8M5P11#x1sf\ @;=*?KWR:q>8=3XvT}AE9e^Sޕq́4ʬ9xH1'y yYALLM{ɣ[�Lԇ@xABOk5)R⁺_8!~E[~oG?e\IK?]{dI3m] q!퓷AskO:uN9sgF4vL4kO6^ú:dnĎC)Prn :+ ��@�IDATHぺ?8s^_iQ>qOLW,GG%/AhyA,r8o83Xor{&QS�3ѮC�N̳E.> 0!K\|<P&u#2䥯e~*`?$&�~cL`_L@+�<[Q&"ihm[ЗaR???G/Oxsz x<_2<4r`K=ai`Xh$=`xX�vD8!xʳ{+Wt^hAi.0 [KX/�G8LN.7j=c32/= {L_yڏ Jag|Or|$PCR#e{r:ƨұ�՞v#`B'zki:n_5� BXNp$tz@2&Mej�o虎ோQ2lJOzzg:GxX?-#Hx&6xw'@Hw`>R<r~7&oTq m%@>$8@0 D2LE/HG~BGIHwao@?Lxc.W~Q<^5}�JcΩr\4q̉vÜ6ǓFE<m28llޤX�̛6?ⱽLwTzFhm_Y䋌q)u+<`'�gw OD0(r_E\�^(t^+|Jb#52gmSVW!xv嬧ν]F QhaˮMٿޡS­ @XAE�zѤ�ܕ-7קu!`[us^~S)^| JYh90u#oXκ z#:]9^A<n{[P9t"eL`{'v=+*]/KpiEA^<="@#g2m"?}{wy:+檟]g<ҹ|@ޗ4ub< y0@G,{]6'{<weQΉ'z}!o iPh|}N<kz Qh߽�N3^zE Gp< {™#C&A[�}x Cd{0P{+'iy% Y R@Ł=i~~+}౐YSԩw H!g"2xw'O\yіGIS.u!?Q_�|iq=gxoλ?i4 ԓ`?�Ec@ȏ8L>$y/�+.zO~dXFݕe h?<MsauR9uvỎg8K evjG<1>"礡<iMy#&6ddžF>?<ϫAqUi3 `PB3WY͌=@�ʹ?jC?74IA?4C_]<#:AD<yS95|G-bmWG[5eW> c)#Cx:Iǜ6(v'V£]wy1m%I@6Qb@jЁ/jA{x0?s?HWTXy!}/'~: 3xP& O1̽.m3x/',1g{,m3'9mx2qcNO1ic!#9yٞu<ţ:nhGK@`\"/mcN>kщ'x!-pS?| etо/yA/'WIKD]�'equ2j<0yh^]C^'ozfN='9ȇ%<ZuXSx)9hk<#9퓷Q㽎AXbrPߘ`\MXHXbez~?>ak�9pD˖{pjZ/*/+iQT>} aZ|69^ q̇ ☃i|^cg^ xcev hO]m>.{ iij.QxGYv hڑc7 wz Ѿ=]0X*�g:Nw=WMVYŋ=0osE/ 2a2ۢ8p5o<`C83}P 9^}ԩ.<y˺|N{,hHLkLmEo{6Ok|mږ/q)aeG5<h׼1[OKg/.L0m [ d3_j@j&/:%/=1'Y4軼 /~צ<{`R/5x}^]X�/j} #>PN{Ї<<_ix'MsڠAs#݅ :I ~2_݈`DX8顗NzS@dж0 �t+?i,dcR+ߒ 5|�\aΜSu<b{]` Z㽜Z@ {5<$uN^2qm昽>묱Qcg=]xhAx:=M,rF�Ǯؿϝصkݻ?uMx2, biu- bsl|\></e^)gbbؒmD_Z:&VM֥+{+V))/Y*M,YZim+ʣg>;^+)c  #V@ ~�wx$8l;EMp'Y:$Ϲz:/{m!E:5.xO9ˠX's^ u:+zsi0L^]/u�Kl-}uFtڿkW}i};J{oO{ߙvKy?/}wݕff aT A=+&`ESk~:(y=gٹ}ҥ3SSS_D5 I7#Lxp5s2/4~4r};wC>8d_vmZ fc066^-)X�DB0@ڰ)|ZZ-nLKVNhzQw ={ǁzi&ƘBDN^rPˁcb�(-f7 Ҝ U?4Bvk@dҳulӵ:XW402K"2veZ@~o|t[,-\.A]Dqd@m#ܸskہH;>g!;PcN[3]?A~ kI}kIn ٕ+q]N0> BY&{ ܒ_@tc>sO% J 9_BjVX<z�pNSQɼGW0 @yrↁ/WPz>eBZՇq?Ǖ:atG)5sz+?1itC_[~}@`ǺR <A}'ӣ p8Hsy} bD;:8OO?MijL%2`x #w񞆞oCr]xʘY=rEuN~ O}<w4'KFa>sI c;)6u TYo EװA6A/Bbn} �:EތyI&q-4˒ "1`c yoy- P 22"e]\t ץEilيtŏNު`3~efyɟttO. ׅ䐡11 icM$ȳt#=�0\*|s h [ܕy|eZe0 (lM X!1!OL]>ǜ.<yz<i]&=2z<L3“۾t'>K;.-'ϧN3(pyxIςÞr>8/!G?�9}ms*M2a� 8!{X$-SR&Y L))N/5 ?CEaB=+:{wWO˷6<~s NJ5oG/{\||\{?"'ztB0dU]OQ}qFs~a ݤ٦KN}̕j)0pD9y zSVhz^V2ȫƺltÿ:];:v^6f9a7p,}Bӣf10ecw&!.()d<ڦvJLȻ^.n^ b�$'d49֓m B.-&\rܻ9I VP Ik 4<y4 4 Ii9Y~+}|+]'G?)?' F~<\c_J;-:#,C̣,6&򀰢;GkB ?!$Bc<#X[XN z7n:଄:sr3 G=)#:]9^: x]xz(x"Ma]}ۭƫ=}o*Fq R:V#qji&U~mE&(_.@~�=8:ۯ}0)0Y0yg�U@\b8%`mA´ݻFJ٤h4ZfHOҖ;nK7KO8%mzcϹ79%O&,Ixկ/#cىD,�V�0%0-B/\0,5琸Y%ȋ<1>>r}@࡯}C\־� 㩠ƒG:'+uz9mׅ#˺xA~W}R޾ݻ_|{ޕ6>I#I޸S<T&bLŤ!cuʓeN&2S r\YꮄE] 8Q[�iz|ٕc3t[�(?v Od-#I]BH=.)?M<Rg#.ډD'49�6h.h/l?t܌>OH '*[NMtFٕ'B��&2+W �: Tפ +?zZ} ^>Oo3mb~z~<]CNO񁮋׶`%waZ׷#9ik<eu^b]6 {o)asuZ,` |Rƀ]EG@%<'@Ò]ݥpQDŽ`jAUxڤG}�;0e8\c|*1""-g<�4*ae\M?"(X'LɈWw�O [yV" 0!t0~_tˇLvNzʏ; {'?~;WcoJ焅ZV�1~dHv< sdp/t+Oٖg: zYM} &|OWD<s':1{]{ɛE;zWXW21u\˛.s^PCN,.<l``Ge=*zRXGG}@g~9NU*T<w1)޼Pn-@ߌVAWY0]ڠ^d $nxyRQ,v�$jye0f&vz]#/NǞ^/ <=�v_}ϗOmp_BҵuLQ@V'X׸V6 ٭=mk c,%Pyq.[ f >vj8m<6<M xxg>wo~8}ޕɗ`"sǫ h35HqSu^C+.W ]+ le 2;Ì5鹙1@+x{)�2qY_Pf (.�@cy+-beNĤI gVFEWl NF+9pȵI(%@\Mس j�GIqGmY9?&Hg/ ޿}?t+&# -?&#:0ai�/kpn34&q0NK|Yr`wzj2`ݣ�A[җ4gwڗ?"H4;dH1?rvDE 0f2ţlX΋91G.iNI ]Qa+E6i|G"(gu|u&v�077P UzYxLG!Wզ'y\h%CH  %]bZρ_ zxx $c" Ol .ww|es_6<AqaH'>??}I#cn%hi@.8�LK8O4 ɫ{O8_0烝~:KUAU8A1<:>>^uv)uhC<ԇ|f>;ޖf!?\ԁ6Dl�6YnEG<KTtu!G <j/&QQh;ۛ,6iimE9gydQ]�Ap�}zm\>`T]<Ef`d*HE~W�v\DrC.R&? q&1 B0ޙLYwL翲wYJ]=YU3}eϕnb"rhe}Dhj6Jd9s;G.~o<]W uN1B>y4�~̓<9L~jGzx]<]MqW|͟G΂Mn<@.-e&(N75Pߡn-psmߥqWjUz�p W<u,y| o.jvC#1@u;5n-B&~TK O}] ; &5H\rF¾M>"r7{3I>gz$Hsggҷf@Ǚ% 8>W7\K?LH4e-7E>2;?ô_rus9i`:?Vsl1m{�?(ex懊]{qy9 y5z}@{z˛5Ƨ]D c`8`tNg {gb|:@o/X]ck .mkQ%"M0.uz�p~8 0@d6xMCJ?hͱo8@!3jG⶜(,/q([ρNA\`yHm�;T㞑<YAzd O xo5.q-DK|Q1hTy$�|°Fy\^ԴW p,|\&ik<uA(Ӯx]x._wo?<[em< ~!ll+eq@ȡۜ6q\xu%b:d͠k ۨ\ �M,f_u 8CƎꥹh9jՠ02X8ysEDw.]X=ر RZPI/z}_̗zZJ |qWɟ>Q�`gRϤEGۿهIjO'.̅q[&l/�p"~[}>cIh'h$<oh38*8=6oҧi \+3=j[urck5Sܘ,*X/:C.? 'M;*,OObcF/ �8N}vb`u m#%4ٝ(l(ƚTΐo' EzKQ<y 1զ̊n`IZ 2a-=~\t~|~D)&/ƣNW Aߓ/B[/g<J@w<)x݁'Hc1(踗7^3x J2g=/>$u_gur_fPۨuieQ/@6Cxt[ߜn't^vyi_�Oy8ԯVlkCCȄNw0/uԼ"*5-vx0}oL7E|Kpk� KzIAe'Nt|Aќe ,*cGb#I=7" YRSIo~z&Nf8_H̵ވcD$l|WNY9 _cj(rF |raĪ5'<b蚍*}[ 9>8sov˜E@/U^n'uNܢ Lkrs~pkVF{Pxh< KLF-kԚx@8 op>=Qi'a<{; *'C^�. <˰ۓ_"7vQH8:Kw#簍OSFIT:/>A menhT] L-D?=|$/fa~:W~w|J4t9oqu]xou >.<y^21QIG=}_fwӘ0<T 2(<2|fBЈ$ut 8s'.(GpI3,8PדI(|V^4YE)?/ `Vp)v_㈷~/WjoJ~2mBy:>4so@m]yt>8{{PhO]08KKNZX0a,[X³WvVxEj-Ci9f<|&w=8l�;׺O,3g;Gz>vz{0 hc+uA0c|Z.+Ci lsm %P[摰K?#Kp ҁNKtU_B?ʼn])sW�u}]PeUHw 7tk^ܿObN>bsT'3sb6y O<siȮ/YЀ%BJ<_+lvp{4x6Ǐ|rϨꟻ�A/y,^)`װ�G|L `sk<ym@ޕg]̽leIn 6\!r7Z]DEns s* /2UJ+Qܕww@,t=PaUD-/鉄7:@x@t4 g�m�+F&o,]׉&$ c!M9sb14LކǐfNsCD5'rUD{}2]rrTſ`/jv3)҅qɡ `R#M>6>锖Wo�T"eoGLÆ_ijZNk<˔ӧ}⑳mm~{7߬.1O//{9X=S6~0syof6|m pD<`oo> rBcvdʊn�hY tbг>PS%G\0#g6n. ha-o|y8)qUmr&/#9u{YM{TzmCːGG,sA~?Hv4Wz+7# Di Ύd)xnנ/ᩋ*t_P#O#91>܅y]ke-,ߞ.QcyGork4+> M`|\b\Nġ/3LX2 ɡ:/<;�PNj8y2+`œ-v9*_)Wn7tkLL"H u<su!#6O' Oȁ'9^"8G^$<Z̮Z{[veέRKԖl²$[ƶ0` &x! 0 =<``3{$Q-[-uRxyWsVU_^UkO4YCĆJ%,SQ[れ%??ma%֘ضC6<O%ϧxx!O)1Ֆe<ӏ?>oA}Kb,0Ӂǔo :m"SL5)/@Y�ݳrr䔘ຉRqÄDrLTN^N:/ _?B@H�T6LSN؇4y"[*;)#ޗrXug98Rbx䙀_74ac}*fX1i^du Dnp.`1 '(xSDI o/!xܱ"&-y9Sv@:Tw{Y#=*O5LTn\T~� n??{j �qc"m#NP%( նdMnPD9PqA [<�DS^)l W ,xu/rSQet`6ٗo'}hG#M6~Cxʿw_" l䪗ڴ1@Zv^7l㒝4a#ɭэUcK/W�Lg KJ(Sƺ9:|߇Oτd5c~t bIkOgZK񝉢6Yke�X+/v]7G1 Ndɬ� ~=�7ا^|9+:%R>'<(q xK(KBx}ԃշkn{-գWR]�+YS;9" ?=/]cy�y<<ԗg\}8,|oU *Kyï*WWWR׍8Al7X,�(,&eg^`d <AcA�G [uW u <£:X}?W.9<e,)e]lx2HY?CXeHMӈ|)Wv-V,NXvKԥƈ>DZ.u<?#=U{̛xʈ(eĤu%>m r=OY?W[lG* W;:1_u~ ]墇0+2IG,ƫ$K-P�]|pr]M28 ݤe#C0 WP0q#C<6 ) gyH<w9<e,)@'⩣lhxViW1Wy7W?9q|X!aq6,lm;µ/}94?NqQ Ǘ!S_ЧuSF<{Sq_/x&' 6GE6?)>2=GԫՅ=ݐ2"SFT+ ( ><;t:iU=vB6V+IĀqw}Ѐ$DD}'cɓ,<x2_yH}[)>Ⱥu7Yw,ZK0Y:CQIqFr.!睓Haxt~ʪ2lW(�ȳ)88R1XP)C8#OʲmٻY m~@�Auc8 DƔQUhX|GTnb+p"p:AeoTy(|0/:~P1<Q,I}TumWYcNS<b:N>̗#O,vYۢl-/zp%օj6sXv5~&i6(48QEDwsDYhǪz4U/|O5'! cK1O 󠔡7PF P_<,>M+<?il.-˹&2}<Le?UjhQu W,�&c:!ubcC';l@U�98 +@ >"Za ? ʁ - cX:ARb<2Ӳx, |CP~H>Vsni�_ޮ|zMSUM8r:V,q玠mo ) XĥyHYKO1R֋2aAޏ|('-ܕsTs#/:mAyx 7'@1Q|m�=&gL8id�"m: p&E�?~KxV#GʊeAY/eg])r ԷvQP4Gx٭.3G;@TGޮ.�&ӻ%r|5Ӕ;ZOȓ<yPRqB.7@FLM)ySwЯ>p z�i&4%gAyYE�&sȋ@0[qpo߭3 :/_g#xϳ<˰~I#eԓW?ql F7n {^1YCPCoDBDoG@1>@)vmܔaAo0i+hoUq)y<U1U6')q'۵u{Uln9l:K " 1F,P�p3cH',n#@BW҉o%�)p\$q�pilVwh4Wg>,O _@κa\xX_,0׼5K[ږ<Ye ˠp~1pNF\wkٛm�-/L'ȓ6<z&_sx<0:I9>_AԇW<y&EԬ*ؚQJ_ @8ԉ/"L~s�_4alXW59v XtdHtx;Ȩx<<Xȉ' i.<8⵰X) wݷݮk5k6dM2E.vo6-N#~+†1UcqC)1G "uK\'I(_B oEi^aNDC @tH>T_\H}pFǎ{WZ[¾9 |, <ǥ\>K)ib Lg=y=~xQ:,W92c$<DvMOHfdRTٵç(e;]@.6C<Է+&{~Z>Ka1goswQWRUKIBeЇ57tRA.1{rmx[Ϳ !۵\Ot)6Y_ֽ0A<4I==[\z%嵎X1Zsbnrӻ 2Hͫ- '\l}¶=ϲwn8<i3bKđ2bHYO<e)r{p>l՜9JVFo5ERLa�lLz!"E� Mַ!{5thPOeđ8dӺڵ=2˗8{^-v@jЋH &U,T ӣIcclc2(nFskucİu<(,-_/y_͵Mȳ?)YPZ :I֐s$@Y� iFCoEй A_./QK 'iKtrlmz'HvxgRߎGr\ux=n~nҿe\=~?¥L b�+^jAG=mul1$ps_j7aRS汾>/o o> :?e�qNa.fel�flTZ:"u`"n-֎@q0�(&f*@Q%=<`S<_o2_4"?|ߠAo3mqPS񾒄7%5tRrjJ\}ׇџ\6DJ</C<e򤬗Xҹ9<e9<N/WsC]|˹gA)1y e0 #bE>{U]؝�%2ɓFuC߾E w8#ax)OYO,u5W@�L40?_4 O.:կ�=hooȨŶb}lO=ho)S<= >&W1/V/m`rO{@Y�2R8 y@S/P"@*'3AN۫Էs1IObIG"z@}đ<PS<[6lS?x�"| !w}BnI=j'Gq;�[\.I:$ڛg]RCueeO,(r]ѿp#60WsNxlݰMzzVe0P{`pn*hWՈb�T/y~[I<DS'”ir#^BrLRͫy jaQ 04$k)0kڵ8O42C`OzG菁ǁG2䉧<1O)"QSfzϲ9<e,A<gφ/5#fHToyzRA_F&ը `xnoPget&p@ʋRdx߿P]vdxK砳}Axʠ$e<2=S~rxX/<%2`w=0#&@GcAB}\Vc^-#S;j^v#aSj?KE)8'y9<dԧuz >x<e9~g9wVfu?.v9j��@�IDATKEjNƹK7y<tjߕ`�znȩSÂA]qF}Ke8‡cMq"-)iT2ԓB6LY:jbK@Fx|~s^ qk9Hc3Y7h$W<,;-x?0[*VbHs^O1͸˒8Wb9*0㉻ǔ7a szef2cڦBߌh @4|SRG :s> !b�(V}jGȔsyI<eԑr9< \WXЃ̾ %J{$`=h*s)/!;+k.&u �x;6տ)VFΤ扫k0.,,'2x!;eN,y ?LV�l T~-P� 4 sTTRDef萌qͣOM ΐ<zF鱐yȐ\(<>W?#XE ǐEnǍϐҰU eX QrTr1ű @%U7ϺDqΐQm 8(dĤy|Y9<e"L83*(PE50[┅X ΂M.�0Gpѿ|W;ur�Oy<z&:TH%A)q"3LJsxȈ߸zޭ�O&"w,P\D3 dH&Y=}E7QjX{_mޢHWcdz{{Qx_ǐmmYÇ#>]8c3w85p\@&6%X -P @9@()Mx+:,@qRj̩̈́0m c!g}"2A3-×.w٭/o>S,ŊA-ml ?PId(, vhHig<<)z<eǃ!#zYv{ð~+}6k#?;Z"F@Y�aAV>N 2spFh^dX.�iá>} y"y|abR<9,){ף {97$~D ټ·z)mHC搝kO`1cGA躰lt,g?SkT3nˠ4ԥ8ș<2?z`IQM9laD#1c-( �o7,lYa1�j|n- ëgS4sᦴa UX\q1g^`F7l b V Oč8epbz[PUפf7;:.872yT^Hi~˲,}{<yPcݞzlnҚsؼrS6^68`m9H)лN m-�Ô:<8$$\@W,pE"[ [ ux Ӷx y8JSqs}cK<(1~a1P 8Qj23rR26mx0Bh]}!5(U%e(C%Sbu꧌_vgßl8cv_M}oso <ok]q);RX @Z�:٩CR_jceq™|(?ЙiRN\JsxR,2luۄnaPb!Ѯz zV(k)ڵ~4 Gǔ"xr(vHz2$rY8rlz֛Y/zI2#Ώ\X/N&Jas% ʮX`Q( Ek09BxuHY@m1@vУĽw2w[�BeryRyfdG<v<O<qy ݰ}g|2q5Ш{Zzj|W߱�c^Ԥ6lqu-ezj{ϳ~ϵx,x_p>a!c1,82sMx9L[#XaiT*gFǤN \q,pr-\ !1T{ yrl)%2!:%2Se]J[(!gq ybu8i)h&'б"@nGz o:M[#ۏXȓãxX/:rxZş e]�fS�3i%3H i�<E9ȎW$pphv/C�^DÙVI"URU{gr^ƲXPzeOgO Rj(- Nofe%e_b'20*g<:yvǡ\|vw:|ԗS<8eG9^<h\G-msM*bX,�c+ M >Lݑa]2'0 p}ϫwX)ޱzOٯQ2YdG hԳ>|5ׅ cAS@T`PS3YϛNկѮzLȠkG6lۮՊ;=.Pq,)x$->%mQYor_*/ȇgsES:L:#BP&ZƱZ,0`N\Sg_K7{|$G>йBNy:iuPϲx Է2qC6<:v|K lˍ'uhMݻCƁ`{:6F㙷Ff f#.[Ci,yӀw�t1ۢZ@'s sNgN>TR,P�Ka!2U@"A]bP>Q.uV9[:WOsx<<e1I#M$TeԃnI X?$ UNEo#kD-]h*"2&�Ժ"&-϶|ybrmϾRr^yT +mĬLA% ,eX:,S yjjW3 N~$sGtl:ui8%Oԧx,<nРY�=RWWkŒn{[˱˒b)8葼8R<)8 O 9sAN@7Sy&bgc+Yab�X f32KuX�Ԓ8ϩN {J }R J2Ɏuqo04^%}^#cyQhzJ}k[b֏8)76_y8j\q쇂sx<.C;w{,x'CI- ԅ[%52A˳@Y�,~[#8@N(dJ.� UU.;ۺ ;Fde)xbA x$OY)2bH!sKn `.gHX,FeKYST\:V?h2!-+ذG!d)Tsu cԱ4s|Yۜ t`w�<o:-'ro(@Y�]Vz%z{<q4yA)2eGקex/K÷G9e,kc.VO ,mR{դ/#T}~3˱*ړx{M<q, yc''@;Ξw(_U0@Y�tȐXK "T TJ(�2|U:ϟY;t6Rx2$5wQϲGqi9<e,R_Z}�8{PjE=!y+Qw<v.>jE1?B1o&$:ϳ.H=o8R`<SR_&{? 0ٙ.zNU()X`q( ٫hsXt\Bd9 oq P2dOǚҜ,š"ʪJ#ց<qy, %=7|UN"F%4ˮ9˅ :dgM9F[\賷x$Ra7)ɳ}ybx\'eYRO;Ne=|TwdVm6WPN\EV,L 2 8SԩY?��`yК goN' C'&-9/cYR/Oe<E?iw-DXp #ᄬYb }f} M[ϴ@vb~=<eđB'z|Y=ؗ ¼�td7j>*< ,e2Y TN/u^ѻǜ]#z_\jʘ 8bAQԗY46W _mCJLZ?[TYD]Ҁ栮Z]_qk.-?$4O#rmn2brԷ|Fa>㼯8B8NfPk+b[,�oRC _ڕp2 "P'x ScgJ G:Y)cCH)2Jvs]bkeZD!]tʬ,m.Y1?Y�\-H{Na)BgySF )BxR/ y=w6}u BjYB1qJ*XA  wP~J.B @qo:8B իXF~,={;ٜS  e#P|c=>qU"N ֔PIECL+c@e)]Pg~ٗ>M<)O9ǟ6s/r՜Q@ʔT, @'XtX/ӗ-FlѹxDZ,/,C\Y/Isx6^~e#x"h(A�baZ|ڦwN@G=P" 4M8R`<|-!O!GXS<dǿr'&8~$T!+g�X9TFF<?9?[9p:Yxq�(8_r﨩GYǺ=%ux %xw #6L>3V X^ }gLˮˎdL)1 dS)οrsE"ec'w�tG^?)5 r'؋ _,d MW 94ѪӃV6Pu7Ϟ@ydsyX/ˈ#eLYSa,oY-Auu)%Z:˨d~ c}~#N�=MA#SN)}mG:Y/ # 1:E9:d�!K5s[=�) } 0Gzf=dIs-RO xY2bA yH$2bR:X7)0 YNѩjRJ,?F3baþ@_^�d8EW{m2i,CBS<i,G};J{o璝X)AIe�X-K@; ɃS'(:Iw �tȬ'ͧx˵rS_ǥmSq$v;.]h`vEVe}Xa_7&}o~Ӗ(G|K.Wbr{S=y^3s� 84Y;,b%X`t eJby-�&?tZZ1"V8$ |H>##�:l6Rt42}l :`1.K=󤐃_R\<]{*NZy9V;lDeQGmlqJm@*@y/c9t8Ru2c9P?g=dWR5j6.3"` -\@G-P�tԜEǧ�ڟ<?H cǎ̪No�LN2ı<)1<`{:Y� `"54H|X6m'48~/;*ZIPɗ!47ʈmZ*v oSe_,( 4 V=N<{� }H:p>1�PFw䁡'R 4Oigm�w�WbW  gnLϕuyăGDo4t+ `W;6vҐLr-P�˵`) Ёj!V_Q^xFN<:#ǐ%<=<i"fh09~'_@2 Zsj.ǖ~TzIް09{CA{P8RA=(˒ SeASg?"xfǓW*s<*| `=hMa 7E/zC؁G*眳wt){<qr, J)'~îuG"JIּ+W|WȚB,3/{ݕ]z l5m ynO1{{Ta. rzT,( 4n::4, Μ!M/MWyGL4uD)t)&=޷qIY)%n ^k)\s9 4pMr˝f=hhɓS6cȣJg&'ؑyng7jyNyPk W,( @\88e8*E~Hc�=E}�y,y֟bXGì_ vmH| kóO1jcK/�ұ32D:rxʖKzzE*JOivz\;L ,e2K�CვcO �y8IsCSƺ}Y<&yAmہa7 ^yJo 4۾]؁Llj xu<$y}yʈYM(ځvqjv5(Cz_1/ PA^-j-Y�F� r=L '֛ӡ-=yЅE#7WY}E Ui�K.5-=W@xݖ ȃ * ^+oɬ\u,TPfY"(&-z T4:H7Sj0@P| ?]vxȴ_I(c̷ġM_tE˫ZᄶI;'A LS~6)ǟYP1ZrGH-Q+ȒVe2v-f,_ۋ~NX jAAAɠgYR=ā2C^2*5TǾ/BVSN7*AF\'A6U=Ό?V)1yJ#irqcwOvN#vYz L?Zj,iTIQ<'xP& eHKH9q#�jPƁٜ|j;_|\;�ĴL/�S~~PR}kmgWJ@@ 4/ĩ8$tA<iYK/9ˤ<sa[[#$j\"FJٽ�tWg; Թr<n%8cS:zX`q( ٫;`:ô*AD%g }PYu00{<eĐ,h#cQqiSFF?;ΖTpeXoS|ן0q;C%O =N|NƓu `L[*Y;;pħy'eL(e>qI+{,q,G {uAF67潲 ۨWL[qa.H<.VZ۠4Q+X% w�VХ @�(<ϳP< zb2)eyPe98_dׇL uȚΠAIoGyAHg7[,�I4`"}Z6s}xiU|p 8Rrx/xϣ<qLPG9hNreh:>WO}yj*}e&vcx9귔φw~=~VUثԲBσ$L)g�eM̓x<qă2y<e,CJd{uX\*6c9H]~8;�pRu:^d}m}}{tpp>RdAٚ >VS XRVr)ɃɃò /B!ka0:2FgXi>#/vȶnT,ZFjo,P�}s({` pa7\5=~#e\!0BIY#)eyߖץ}$\ĿZ7axYe S�=:>L>hȱXNGF~Bdx˨ˢ2$an [h=զCn1cI˰@Y�,xXmǕ4335h,@L8_e{dԧM u0^ TSB7X-�p͖ҹƊ\ȫrdԡY'DWòP,.,bA XjT,@Y�Rd]g`|hArМY:~GJs1|?38q<'&x@?dܰ(5-M{_{;3: i| kkP;#CPE @M) ziK,P�]r K74w l*)ɃyqlusIzs33r>.A~,L_(WK^;6Qm<9< jx%@R]^-YMdLj99A#6&t&]ʳX̾;t5Vk ̰uy9yP`Xe(#)~NiU?3vQg$[G`@AplAv-M_q@8A-` b2WOVGzgpQ-y4sPiuuմ;39fJ~Z<i 1A{�:y;] SC;9Fe!0)n7,7ˋ%![Th-\V s#oW6P|I3|KN'uɽteyd0(㛾;Sr~aC⩄&Yw z;uπ{EI�uEE+ +=(ecXScd`+K:]ۋ/t<[`rb'Iϝ;F<6!q砫NN* :X=R| TדǍ& ^^ ˟Mߑ n }G䘎kXXl.׭(E�~w sѸsPZ,�VޥEZcX^D4#�Zx^}7&°\C̨DaYtAz0"5o]]�wO@J毭 j�XJ[`z'k  qu]ԞJ~Q�o>8!BVB: TB9qnf'{p%[Kdj<*c,eneF6-*wES{U5w<J#?H�o߁!W)wxr2.uGe`/㮣Gt.f۶K.pY�tИ[ padr)r\Ր; o J� c cd a+| X NtⰔ@'XXcTG);RV!G�9{fM`.H lo+Ѕ�);MAF> Y P )gg s'!eIkd }]}(� 0E&� S3%40ybI㑖˵en~Ow]. Ʋ@/llNX}{X'wfᢒ( =JCX!~%K&Ϝ#(wEt?}�nIoر3L<i &1 AiZ9gkd^ iZЬ.?=o=} ( >><486{T,ovܙϣPo[4<{:lj/['ֵ:_�`1YIo۶C6Y ݩu g"۩uߜ* [7]'Ϝ9ߺzG%(~tIw6oMW\{O~Bt|2roH *i-΅Bx\^X>l;7/)r`ϳA-d9upkB~�-�v%R;|`AWpw!j Y JtU8x5 h$1SsOѿ$;;wQyTϩ,�vNOB:% 0vNJݘ[ۺ k [ ]Ny\klZQmH 칮1*=Jz؈)S^X�g0! w &彎~M=}~= 1.86lHYr[n} T&O"8�E+4q*lmyy&kh|T�zdp\ ud#^*b%#aîk8mz! u m> ۯZ>%?(yo9HUK|nDǩ1Ok< ؅f,D�XSTN }. [,ZaW>'/K蔛{Pܵ,^�+C9h_ʆ׭[RMnF|(\Y,�Vζ_{XaS3Wh^ ~sE_1:Ɠw�KiLcA7kZ=~qci~ tɓo<w?eU!5hcBVeV-uβ�]$3oK+V%'=ǽY`~l5$?p?^OjӴͅI}'/kt;QBWp0_hjX,�V\:P:@R^1iS4vD YGp%t7>/2{ZbHa^nPg>:1x^s̃2y2vr)|b-P�X/zu=|ᑵ߲Y P?t嵋nW ocAӍ㢜yPv/NH%T;yp _F7mn}H\ y)db@Y�aZi x .k<PU Q�dH[E6^\a[c" `nQY.'3g$FkLS^K]@-P�HrPD%%xx5>]~jڂ�O}7 +b. ]^>|svrt(sԓ#(b%Z,�hRlqK`oggpϞ 񃏆-O{q{3#e贁Uul\@6þ}i?ŗō[892@p^뢿{⑝x#/M]rt �굡/Qi5F7e(e d'{}{ƉϫBgOYoE}Q^:'2X&(ך t<:Wci -7�Fa%0=5&O cr?%W�l[nE򥼙13DM<ܟ4^ W�Ǥ�,t.{ i 8+{!0 K)P|˱xX]@j Œ �p<E.,(c ,upl=6f5#67x9 _Fǹ 㒊VeӶ S63z_>:¡Ѱ/Sk5v*JZ{򵮌mj_cAd~ cxL+n}Yhɝ�ۤ�<CbNX +:&O<ןׁnpe  %@bW˺>>A嚗ݠذpo '*׌<F0aX6]?( 9k>o|'EunpxH V(Q`.+c -RƧ9T`C8gxͧs#�ۿ.@l<0 6U^UF-X`,PQJ'IŽIyofbf?\!Qnb`҄%�9fcK`ԬP7h#p2:6c ' 78ʗFGs:q1 pL Rw ,e`S`3/}Sorwjtz]>at%ZǠwWùAS `J9ly,JWl`k@[^~sEV~p-/l.�t^]� s(g߷F*[ >-5Տ$y!k84 y@w/j�IɠTv>O@DjߧoڲM~޻V]žW}3|FDzL@y`1t,>sF^I 9qSpT e\(.%;ޚegSǠp <i*g~^^hsj:=wvW׼ݷ"۱3L:<L IU9"F+/abZt &'уa{¤P *A]˜seǠ_'\[/ <zR_Nй:<e/w[=Suᚯ{4ܰ9<<6$ϛ1_hb,P�րagg| |_>#q蚄aL2v_^(w5vV�>x|iʮezTƎ/�GP]_Dњs{/;E-Q50Iz= s 6d*X( G{|_=Ezu�/2~/хƅn_ֵ2`/{LF %(HnS.#/ۘ"?}=X~e{[\.}녱ts  F y e| ,ek9V%ƷI(.dǫ͋c]k;Ď|Kj5a歹 !Z`h6 iJ/ x$ɀN ox΍w J/X( NZ'r/Ƈ4m} l"öj*M˟P58HizI@IjUD黿/.~ X&.K֧ܠm`.S^(`@OwX)+ tb@@^v}򗐾>O)Y0z>'(EOs:[U-1g O%-as@F^/B@a( viU"E>p3 C='OKMp<Maݥ/}]rύ)#"Ţ�y˹(" WEO :,:ok<8N|i_ v]^w 2rjE=(D j�Xzy=} SS}bR^+~ ͫiv}w 3N96"eGfkޣoz  ?i~x7~o3sp^H)'K1%_,@ �-ѯ?!?% ִ}wåmlA4qG!^vEe^nWzc-xJdD`X97u@ ~ȡp.]'ʫw8WH<(>ObZ,�k^Va'ě,-5d,o7&"U e:^ ^sN#KTp|u?y,PW#.ac%?pp^ Cŀ5C^ʠχqP�τ% ,e+fF>+_&gC΄Y󠕓/]E97Ș_pK_Ūgմ,eH>%�eZx vocо y`U&;q�vׅ>0ƉQAo!qYb,P�YWge};q?DLfW"ጔJpHUC�f͈pΜ g#FC@41fR4+_)֘}&EרQ^vb8}KC##ܱ.- (h>ZވT,0`.Nřx<&_} 9eop\"W&曞 ]i#dNyl\$s% 0;0.n-ds\y+e/xqpF;�JE5uHJ[ @Y�,T9w*L/>=Lޙɰ~U=;r`�ʇNY "rH5K?tW:~cUAdn=`syGMq.ym}I,P�,;.>wt.&kޚ  W( W/$/.o &N J 2"zz nJ웧)/;Sw}1<MYվ\rSžoAs*.79坌rU)'h @~u{c|!C9 Uxˎ^(_�DbȎny!W|\2S߮mA@ڮ)mZ&/mbV"7WF�-g^.rbN7[{pa| 9hjH7s2/`Z,�zk}SGI XTJby p@vFtZۂټutAq_>O hP +U|a1[ 2[g'tUsH Ly\ @'*fJd @ 9~7}a}Z^[ɔ:j! C ;�a-'k_Þ?tnDWqL5 Y}H0~\W1W*\WڢZ(�y'|_-DVթeЍ^far|GZگP_S@昧cB!Ig-P|[|`E}ÐD *aW0 -{ q::y po?<PCn|Fns sKb .�^7br,E2h @g?>��@�IDAT~wo^ 4`W6?0A׼xNJ1iC_Z:LKGM ssn� 1�@ Ji6ɏ=?.5)GnU>IcFT^`Ksڕ)@Y�t1mɳ uO 1u &@^$/ ?-Z>LyȢnm;U:}¤| 1Z :(Zq�߭It%Ecj.Gw|ANxpC}Տ'&G+_/`=@ɫ}n̻ ~ϯZOɟ AW=/,L W >)5m}=?#) &륽-e1[зqq=h3:l!y'<1AY];-P�kul/f7I/@yyRPhٸy5֕mM:N3jyc}0#P"Hli!YՀb:9ϟOc7isx򓙣qa4; y'zlX E١( ]VT:sl|0-?ϻ_[J'|+^V?2?ɏ*_"l Xz!ٝ:ߠ& 7D?y=w \>Y0U^W<e2 Vb@Y�o!ީe۷j}|/ÕWLuRfKN:bp??P( Z ]']rl?sFj d|Gk_~>nk(N~ ( 8!| x-ҲՋ~dI_S//I,p G=񆼳Rvޠw5c `P+(M^/;x g+I,ٰ톯j,oE#Pg~ 6Zb-oCAW+/߂lں#<??4~xzCii`Wzg$"Lˀ2X?n`+;Ż{p+O//F本}Qy r$_$cքq5�%7u@Za}kvv$6 nZ-:"Jq_P^*gFI 4¹{@^#&;]DKAĠizO}-n~atÜtຠ&# mX-ћA'#'@J䳀E( N> 'vZ̅}WMn{uQ~+`xk~觇6? �Oa*"7}0{^]@׼ (=Daw>9-Im{R'ONJ7-P�<nxշfմe$#vE`?^1 C7�\?4/6,0.9/񦻨5Ņ@- B_/G^Px cG!9k^U>8N�|^hMҵ)R=b�9,oگԁ*T&j8Mgz^ݻ�o(@׽1z|#i<!0\ uM<{ZH P,t8v/7O}5x@xKz ~A s7 0JL&(g-P�<t3gOϜ[}N\?آIkNP5+~^݃V_x㟋�xҗ<{:GWUG`(<]#U!LȻ� 0k^ ;T%e;3~-׿  .n�.t T7ف"U2S?KQ=i�XaD?Je'oH𒩜^ DE-�$7a2үW~ǛKJ,pm&ƒfochXpRVUl6&σO72ڢD3/GXo*Eb?)S{2uK�<(y$t d?].'K~kwel="SG<Ղ䕏z^�@;�p,| H%5-0yTxiAMzu/?@STيw#}rA,( 'L9m- v{ΏtX/Dwt/yq=P 8PagD| K,9S^ζ¤bqy1IEM:u�R^ i?�TPv_cS6NӡEwE@ּg@I- 5_㯂 <@6s|Ĉd~e;yE�F_ y^ `~Ad&JNABO%遮a%#O>7ĹEj7 {NpFmۃ UT-DLvko-Wjٻñ]ՊZ01_CmG<)fW%;q J!|wПRI #?=?X_\�Br +h~r$Pn*g[,�9�-[=r_̓ﴺݤ]_MvbnzҷyE�pmqٗ /ZA>�#WTob.FnX,y56 MÌ,8+? -U \~�OgPx$E̎eȋ}GؗV3qqsR&?yzLz[}\(BUJό W7n>#*^ڕ]*-DwP$B0QTɕ鱝cS2Pw`]DEر•7 ~|>Asۂ| ^ ?(yԗD~Gx$n!L"ZE @z@'ⷚ&\}կ/x}F(W(E- Du[<֯uȜ&5Dr X\}1@YEe]2կ_MpwH\o~d�yJyF]kd�gU?''NEI9yAb5_{#kBeưku?C[Lߥg,pÉտ^Kв[1' 氉aD$2a2C#{+i. z-eoGtOo@!|<FG# o*l[(M" %o<u`o9u&nV'�\('B?� QW|dԶP[Óۆ6&׽"K,p~˾'r/^"z+`d6j&xòHw~} MAos]xqh rʋڄk!�\K@a窧n�U?u_tZI^})2?8=_~.y. $t7kF6o)cp;5HfW 0H .*2=cPym,/J2_$?%|ӛ*/۝A&|ؼޔᑀ=.d[Bc#ЕU5_^[n S:LPo S*"Ǥd NT0v"+�]m=?SC[nz5^Z`FIm*D68^*7#Hvk^s\dj %aD^v+i n1|0~Z=  82;�<(i^V7LT%J *\�N@|Ì\UGZ6b j\r/,FW"Wpuo<]9]!�>"t ?KO||wkR3bз@|/WG@>z/eeE"i*WB[/U[vE� yбÇB`I $|;v?G*¿p"d|B_ eՠWa1z:; hҝO>W4>6&-N\c�,8waw=?C/!ƉO#|% Hok� Y3 !Fj'32}fa|[`_/!lؤ !R7j] )LS'Xau%[(د s2 N3I_$`Tz4ĎWiY1y >Wry R+5Koxf>t٫"ԂXwИ@Z* f >Q pKJDž<<,A)X^{dxAŰ~Sr%-Ox+l9o$KşEC�ƅ�)*>Pc<\n2V~-/� =w$IO4옦YDlPY,Zj0_e"nlvqg@Q.,q y+`u"N^E^Mjڸ%=oOg?N]٩&g- LH=u20߈0'�lzv~ %=9/o0}v{/8d8x<$J\eZԃyR )NS㺝kjsmOdb8fyr"SE?Y __XDV;zB2+* A(uV`G9] D6nyK7ehte")i):6<&+Q ʠ_ήO_RR:#e! a]p<)03˔ {Ͼ%gӷݷ'X8(9$@F8ņ)xǺfT:dy9xϕ*]K{a3r%c9L<OGAW±Dj#8U1?�2+o}<䐩<kA2ʫx##ۆ`/��WC[Bі <ǿݚ�pD2ʃJ�7!5aIf'$Em&; bS g?`!0!oO:ntn}7/Km>W,v#\[l?t!AXz\A\̛ք)RX9J<hi'K(1/ibEh5$ vL;<3SaB^krQW2K!VIxfю&F&4)ocw�Q7UimRO~xְuoɬLc}#7riЗ ':DaYswc1N풿 �dv;:?D(@~}ۿ>g%-?Eka=L< Ǡ:R=#d5X")/~ :<.BBż(*zdr堆ܧ4]Nʉ!e>%nhNkw�^/54#3uTj:/(7vZ q0 $;C1mMldl cXHBBB7+iծz/Wu~͛f^wWG/!dŶagVVW2Mu\nF;૫}@tv|eU z}:5/9%D:Jz᏾gٵL_�eUk yƦ$#P, Kd"q@!l=WnՓ:xNW>ɴlxL0vn�ʡQ[sRi.YfrcO{IYȌ)UÕy6sѢ:=Y/l| E>MPyG9U),cbc\ UyNgGA>CvzeQ.65ډAv9? ,YV)Z.2(/.Xg<VJǿo~G3|fMhoϭ`o[vd�hY W;)/~`lH˕p*ԋ'ݩ;=Nzt\Nߓ~-ݴ_]L2SRLy6+G6=H7r/79/<eeL䛩MFeΫaM-\gLw˧9ms2C @,Hwާ idH͖GAhL5FE&3UWp/I{RVvd&lt@Fu:2ܫI"11kWPgq'Hطٯ|W/sUGȀii Y" eXQ]sTO\)g.I!ŹD{T:_t" 4;/|/s'tz>U?<z@ E;fv ;L$L&g,&/7jTef+2Cq]Qnۙ j%oJ)nMvq 37%].$4Ye e"SYeCM_`nr%`+r}l@-,Oh< aѓNK'u_4rj(#6|!fd?y ~^dE԰X,'"+o@ )rW9yM~;Ki|U'^oMie_IiGd<&0y}<_3U6lಝR5 LNY3q,x˭?&ϕW~c0-ibAEփ37�i*6LJݵćJ* c.Άv^fW^6$ˤ!:*Lk'E։AHrMSmtE:�ix#ԛ[oMp ~ �8 #畬OY*40 JN<� } �b{(prǶtׇ0:G2\lgL#i dWzm3KUJ!2@O{OLf\-vUD@z[~B73ʥtIH)?}#gV"Wnm`y�FƦv<KvGW�x] MlL Ďb6Ѡ谡^.UՎ^|iʖxZ:᥯Ik_'BHsW|)}/Kh~<|_ @sTj"̀@'$]zZXijʴ/}kE YxP}m 큃[9By<x񃀼|I3gHX|捷3yt �ys͎rr234a27V$em4m=  kH?.<goaAeP&JfJTLҥ Ĩq`{ZeCê|ihهFVw5αj_|*lJr=bpՏVigc@kO԰,t( O<u*�<Ǥ#�@dS^ _VHiǝMW^2;ߌf+$Wʄv' %gVLL39 Y?YEnv̥_FN['lL{U[_D%jX'�gm~+J0R:rY�ZY|9� DX!Fj}¹6:Z)pd:yy棧\s_gD>t'&҆O,G89F<Z<2;&!@d@ g[MVn +OËw)sx_/~ / oJvEricJx9XOO=*7V91 /eտ1[pc9GvގUi',X6_( E>L Y|ۇ S>2r 3i88 z$(ԀT`).L9S&ov/3': x2ɇs{,T;+y~Z}wwV]iũgZD6_<;?Z}˛P?xJe#-= DnL;U]Q`BsW<į䃃pF~=~z[#~d_#䇉 ni ץނw 쫝racѩ\̎1Ȱ1iWEi߯�PƏ#j;" E9H457%I2G|4i T Dwrt'<V~ W"AWf BJt"N"u+rgl1=a]pj:ҊszӪADx'g%Go)dkc"&Q+[ȉ I|�a<'6Li[%psOg먎4OHOoz:~ݚ㶴0&PRSľHյMc9KϋI#r&9t8 "PF~B�4~+y> U^{�9 KG`G�CCIt9AFF?3Vyvgit3B`w͟GfQe6H{ iso0QlA|m][xʠC<??i9J=<#7|>O>$ՙس;¤`<6o :>=ȮNNvH�Dr+\N1!Q#!LVaՅ'&&߿ o<;�|EQɇatٲ^g6];B5F$�ߩ//O+q>FwGV팬Yx<ρo�.lrto^wv@dr*F�[\`Kf6Xj`vP!\}*de%+Q1DBYuI*3˪r)=j;Fp! *SiBĜMU̓y\5ߠ[_i 0=>n~4q26ߵ+ޅ7?"z7^M~bTq{SUYij' ӟ#>+WNXzjSGjKs4y+r7 :\p^{<_;r%e˖=nKnPQ!_jx+=:Ӯe6 83q+lT"bxӕEPMӠޑ:Qऀǣ\P2�'ߒŻ> XErFWL~|沪|4nM0sI||[.iJl3ͺ<FY4.4s򨼾G~ .@&c:{<ߒBEfnF›5ޔO@E +Ü=-PKiǥ/W<hye Q'Հb'ޛV֧&uA#Іe0IXaW܄L8<??_pHA>qX6G#l 0Ư= 2?z@6e9uet"ȍhÍ2^h irae]5HEI@`!oas:>yOۤIC=)�r qpxde@yx] .R 4X(Wfؾ5? O Gk$-ן*z}h[RR蠐'y>P[�OxSmt`c.@`6p-t6]a�x�==wHD%�>{ݳ`WP S'6;SyHN486+c1/+<Oܑn_I}H,"fh&|X'�ghA#8b[bC2Uy@mB?pPaJ[DG\phÓ2;&By<󱄡ˊOxxCwM~;*5@`V`bP7E&C;+@̏Az5g?O~+)!xpZA_v�Ke{6L~=MOAoӰO�@7=%o 6+CNpĐ+LL5.'@My? _%iNf^5pˍwve/@L�Q^s|#|ka -?/ 6{h4w+ nِnT&I�l㫁�-R  b?Ky΍oW?6BHWuCJ"ؠ6`c:vj~%%ΎMtPlt%݈P 8 QYG_~W/ ^?xՀlÁDOK6Ys@ޔ[4ɁSTlOc~9g]ȁ"0,?4 D ,?r oKu;{28I!~ƒ9.Ԏ3<! yh낧M/߉"$1Xttiz}U:7wu?'H/CP(uc$2ͬ;Us�qc,F[CE!M,d ͖+hS/w~U4R [�h.}o?ww2Ó\CR?YV OOM낞{2Ii]4s@&ۮ<}_O()E &�O)Q\!lx;zc\y١ e@ebNd"zI@q _)( A$:u4m  "8K}If·_v/W{2�y4,;^O8xqσ< `[u͘5^zA#}K/Grs~8?~ˊs g9>5y zh;.$5Ld(sTڿp@L�[ҵw7{ o^sg:@ ״xI)6F3 ܼ17w,.@`A!uN+خ2سhY}8c G>'1&\ottޒ6_ D*8 bp p!O:2Knj^2ɕ6s"ݡNMdE.TlmNj2z;Sv8�kG i?=,Q@bk$!VG?ޮ.Wk|Kdվ{�Z3`Qb"cp[1:pEx?/ѣͰ9hHԭoxW� pstM'wnObɟ?-^sYVke"�9mӆ:quS2J"-B !:]޲/>]֟Nm$R 0` 5{==;;]2G9CGM�w#oNtQK5o Oߐvg# �,k_Nm'jz�.E;C]6G`qm{)<rcL+Lefz|[ .གྷH"� Y5<6^gGlW|ÅT3WL[8[G <tyP,m!+'$7y 1 Ier0�t7?I;#m9H!1R 0TEjVMڮ ^՘v!c-ک*D茉| 0Zې{[h'`d g H;NTe ^ޜ߿hpY\`qυ7|W[{S[6Ֆ:U�O@ll'k 1/l#LBPޜ`&0xxCTzo?z]Y'4R 0-8KHb7aPWЙ@Ǟg*6;^{? '0DsY5A-JZHC ń")TXx_o l_V| #�u@`^u5;nKǕ:P]WONOV1)#-om-QsmQ'FV�|3<m?0`֠{`_zS=q?k/cai+�^sNV x_?$΃Un,66%{X]74$(�/BC5{X˄r3!ݻ7+x@Ѐ|^ i'> jv/WY2࣓啾]e[rtnh&'lTl?@,q|08Jہ)o :�eۃQ"ÿ$l i7Mxū6@E &�O-K4wv]{YuNSꁎ,+pD" /x&f\F$Y`1.^FhV m`ۛ K&N hK+ ;/z{:/O/HN9f �<eP/K}c~)kUG �MW)U�-NRL \#ppn&i/9Vn%цDƶJ 3IA6Liuפn%ƟMKMb1#`#lMǰ;ԫynhj�b9;PNd'eDN^SE_  ly.2Qɉ%S]\�,T3qɂ¤K; -qi'K[_tӟM@`n ⻤Oۛo{O\ԙe}vJwgg^T:Ll$RRK7e5` 0Hq-LU8Q'<۪0&]dE:;oVM?>=ͿV;^c6b0.'~:w={9bg� a ّV:R9IL*+ ֆd�N�W 5bB#"0_z9g3GSggF@`v '6m<9 ,1\;\`X& !ѳS֐eʙ2-|QlO2(7l};c۳[^sD/2[YID@VBV ͦ>>_JeA &�㒏rig?{ 2vN~}\#CFxLdϛlEAG�ۑٷ/ܳQ%[ LV!?ND@Z5&䁉ˁoi/7y?iRelD &�G Rw쑴}yn=;8:v]@ @es^~2qc(bӁ}%M%QՔeUd#0S{Ͱ,^AAl£F=6 \0g۵W]N{ssiݳ=} @#�FЇ-:_tN]/K] Eǎ;J譳9|9̓fJHcTj[l*QPQ#` ͮ/ Pk{{Kȉ�yk BY1 m~X)vi _OU<<(E@ c=&,=Sکqޖeώ2ҩaS= `0h#s�f'zl+|pq? >0%ÕBƴ e-_{5j:^Iǜ~#@L�mx?+1 )I2GC ؕj›*eU%*C&,ҷEvK@t`8$ 4蹁DVӣ|1=LO)&R phbph|=W|7wZnǾ9{)юWeWRV k餀N(}u:l^:2/s^AsLmt,�p�n$$8XV� k3WJ-ǯíkN't4@U(E@L�!ɴzN?kW$kgWCɄ��vX?1ўNV @rDq n8W' 2xj`;v,ٷQ@;#82RY5<?}:Ⱦ`ld۝ߚ3ϒ3^Cit*xF ǒƷlL/>蘖˨l|_&!ӫxT&5NPQiQ$Ĵd"#k*9jvuO+er[@ yb,)"OS?9/Wlژ{ӽt&?�6*bPa$D{7.Vt(8)_C# s@(3[ 2tPƆhOoʼ>@`>}RgI&=`. ҈'MHSb6H{;dRyěZP_>{^z$uMˎY(21XG{ҮsoߍW}21.cGD@|OwvIrhO?&}ۘ %Ve<nt7W(^&+{> BrXlC|w2|�N]?@z&x M@L�Q7_ۃ''nAqS~mGPƍU<yф;ˆD}3Y `hiʥrd9|eE@??Sl>*@9?1_v~pz?N;/ BGZ"`24|KKHggnW<ؙ [ʍO Fg\*,$YJ*2@`A"`&~'Lg2pi)/|S!7ɡYo2ߺ%m|J%pFLH<`' ЛJv:pMސ&{$H2aYzϧYҾiB ^kQąOMK*<2 *X=7۸PD�އ,u݌CFD@xAAcOhOɫ%b'od3:Xsi/}^=t .He<\`/)WRa=NK-;Ӿovb��*>IDATNny~x%O?;g�v.4zi#vҎE*b^*;*?P<YITZm)XX۶G3P6ff <h'W0cPF޾=`:N׼>!mؐJ#+W_t^x+Ӛx <DH2 e˖4=kG:|[f\TWy,w}h}+{g<O:#sOUǬazƲd 7ňu;7H=? m(�<D_6Ylel|9gR ӎnHߛ;twD8;_9ZER ޡc!L�Ĺ$~x썯+Ml~Eu7TyI%yteN#ey,:_6Kک@xMyY<>1FSAC{-qM^|Rx/ 2٪�9F>R.46& a^(9>ݰ^>S"[u)Bp^,ԉN1=_ُoڐ&ЛP`8> f= 0}8Oz6È9y=ɗ2 Ya2,U,Ack\:QD<�`MH1?g< ʙ~O]yyڌ#-[slZwq<K^>I@ǻ �v/q W;{>&1Oa-2`q2Ae: <#l'>d;As0'fWwbN*r5Ȩa<[-�q,5윰s79i-]QZiϕͮ W9uYPorդܔvceҫ8S' 9무5g<->_A" þ'>0J2彉qqk~"ǧ mim𷤩'옮L6{$̘x4x" lLS8Жg("+RC{bsB`oK&֒,B,mu܇,\f5<K9HKG;e~&ב9|,zs_digbbpFZqܺri '2 ~t]4,�&MsZSSS *vgzzz{vm`.2h!nO/[)kcBR[8w&5wFn"c9 .3 ô[;9x lٲ0yQ=hg�hc;?ӐPv`N{1H@ ph<kJ5Gc6rB 2B/wI/-@/lCc$>LȔ3ߔO[9 ?k|`&oX&GX!k|誕bby`!*-x{I>:Ӷv!%6aXαsX.>'ͣhf >םi95u@A -3eYa@*ZΏqmɋ<۩AD 2g; s)ډlmp; K.2rЉ/m@-;@8R,Emi*vY)j 3AqSFIVkר.YIU~WleG*w*B2#9KvC1J\oW&hX/d!L]kCᶓ}ڻÙEhʠYQ-L|&cjjX-{+9d\BHծQ!6_ TM 1zX-1.W_3a-dK+Nێa} ΋o v <h9i~ LV*�xN锲@yc#ap~o7wa4U&ZrM*-&lWIZG88T 63y,|^BlŞ'2G!aN|Ǧ�+=c2YʉDHWW*6ED  vNYlLgv.WPL1;Ge Fm4uq orgcq v%e,+r=]b -X 7'W7LONAfPJQ5<3\'pě=oܹgNh3 ?0<@Ad C& LѱFrNÈ͓,Mo2fDO]S`>2Q&b%z*UFʑzeЮ]S| =vlYLV6;+!?p]$髈R9Ud2eXhIݞkiLMa潽kZD 9nPd9i-6g M)]ݲ&rX0O�<F3'L}$j5ě+s qѾB�[`L8f<[9_ɋv !)aIpފcNjʔ̾Ϋbe13Ch$՛jvg݆�H.Q"`&ty;+gӉe+d\k˫6}/ԈuU9)MU/HlC4V97\V@orx+^v?F<V&�j~XP&aA3=ͺ�m8Hg! sqKD )g5Ժarm0eӯd=JIs IRى cV&zUvA `,AlN^>؈xDQJ*_XˈfK;&l|>p6dI$ero)3��nH"ԢI]- @,km0Пm?s&xAp.K-a YfԿ8U WD\0iYg3JaL&48ڙJdVR,09}m8Jھ[$;7YL17;)cd2cr1DʠŨuRѪ=HIRdr\;03q?+с^լAԜ}%L?V6i'�&ֶKWAZΙ|8PYcU [;[o֫)ɁUQL.\f*lى/V-f*moF@1#2^}7IJ>Mfe]%oQo2)m66M:pɗ} yY> ?`K"`a�,pjto]#W]4 8oLj[7rj+4 x;_Qqpgls8۞d ~umc -Oa#UVA0@ 0ymOrt!E"m3lXL3_Xdԙ-si e&7 idImb&�M \`s߱4L#NqfDo|l"0{X(RJdr`Ld3ـMy^d73+;DlĸϹ+JW~{/:6wp/}w?Sn/ qXmf'!k~Y%19eMymˏc)t7*btw/8O*4sFT,uCq@|[0ރio9e.>[we {ӐW]fpL&4;?Sf/~v쬡IlsquI~ve>]3&Gz{&g崳IўkmDe)ى mK@;щzLO\6u[‹aaڤ]Ibp(3qn||ǥ?pmxOӋ魆4GGs-nT, }-\lhvM "k*9KLk�d>~AU?3x={?O7miOSCh1x7Mf/E�:ob_z": MMf T54~sWFMN4cQdj6Y:VS HZ,BeuoI~Ŋi- @ �ԗH۶Ţ]xdU-ӫQa9(mJF]mn@[ef23z_AcXrz؝>[]|.,r�g?-˙}CRͯ d@ ̀!M_'*b٭kqstW+Oi`iKm2{>+� q�\njTK1�Aғ'ˀ>lЭF.Sz ҇<AǴ]ߌA{Po$ӷjёqon8ib.Mw1 v {"m@cl�3U騙b??V9JIz3fC,#Mjeͫ)A`_я`/_E 2x}Mע.B�buP5}# K1.~eOfL<' M O%m\V֑8qv9yh$3E4 6;�WQ;I>|Tf>70O?X 3OCE%/p̀v8.m?um˃_|�sM#;miz %LL@ ,@fM7O{<|?P(kg0~Tqk<>77P�& Д"A`.〒חu<Pli+뿎䧖xva*@{m@ aG`*8n FuþoGZQH }mكUGvjbF @ X%K}{ﵸ,xѢ�+/QVp|6]bu͢1+ C�-fVX4#,fm/ay_웺tvj0\Q⇁ 0=97b R C/Y=`KO O^,l>9Li;4ۧG0G&'q+`%@ C�~ŷ92`(쥯 gq{wǙydsOm@ V`LBD܉;wŴDg? _B&-8,<ѫo{ҿg�|% Mc+mЅ,�/O?ww0w/}]�bbp78; nI=L&'cM@ Xw݅g`j]+L�E#^cX)/sMg+w4Vx;`.u@ Xp`; ?ߖb5R滘dzu.ýw FӠgɉ^@ B>`qߟk}ރWlO�xyűc &f;pp_@ 0˜Y.ue`z_ۿ. Etw m>vI�~K`b3 z@ vas<A/Yvʯ? ZYlf|؇mZ<H4yj@! @)GO—WP,Hܷo ajL�x77xۑJF#`j�VO@ }OO~͏1p?M7y%5 +7l]GKHL/A`32 z6@`UW1矺#_?o|QO"f?;[}hXc]e!wt5a9 2 fjCQD `h{7+l9~.7I+cKn>Q8 / +ba +>)xĪ@'@  \d|cjx^\p7??yb9e?e>6lA:qN"$V%VFGH/pE-3Ł"K)N] e.~;Uy!JQԅx4v*DkT7c(U*`Ŷh]d%k2EdGnGFU]IDW?jTVT~0튃k$l!=v܉|rNS~25? Q۱1ry9>O(`>c]1َ_,U.}3/ӵV(WS18d[o"uUb"y�96Z1ULV`RъaUmEiV 4Ťݮ|-(ﳁr _)Q$S]5RE ]D|]ËuWڛF<:>%@EY!]%T Fs%k\F\auA ,Ϟ W[zDŽ4*Uݽt�g$o]Ͷpfsc]q6MˢU#[^,0賁fFB3-H#}#Hq-([؛j"ފRNzvy&n/q0A#_z#FrAF0Հ>V!HWQ Uge9GYP̥u4鋓]∬"+:u+\ZhdIZAzW4s=jO=+l85*$qETa :QJSũb7Vn ^s1U(5oQ:Q! Aǀt ^ꑭZ5d ',d!e(.-ʆ|5;jeubR,v af!^|OzXDL�\@\~ٿwC̕FEsiSجDDLo HH1j7g1rlŚb8GYPE0mqDVwhv]! 1t&9;.5NlE/vq>.`;C qnƁɝuۮf\N3]եQc٨KTVkl+7g r֘*(c@:HV_2eCT~BB^TН 5yvȲ \]P 9lÀމ ⦾yG14-}$&�-GW?_wGFM弶xu C4;7BY3pYO\ZO9ud8";t]!DeIZBW  yPJ߬]9dK 5DZ[@κmWm.f왊(ılԥTqz539H\kLJ[NTB1 WzdVc ٯ YzK!*l?!/*_DM΅<;dY].,& JAK#{&"`U@OWoCQK wQ>+pYXF*D [dr4kɳK_ (q_lGduQUDQi+?)qm1dg f/igeO�Ӛ1dZ4-Iw֍drjƞ.BF]*MݬZc[9cT.x͵TԼED,q.xEGj5֐*H(EԄ3෯v`V<W4:i/xgglM/Ԃ@bE]xwRx]W2 9n _St+b[+yi i"gA=3P8٢--VfSTb97g]Ϛ,^5# >u�5cZD5i[Ԍ=SU]8֑T*NYoƶrs \kBy҉ Y;\Tlj!U8a! Q/CqiQ6D'4 E勨 �]g,31~w1%"]g+9p`S.1`�0Me>%[jhMYj!D W\4,yjk - ]R a3h<([ݳtO)f·iԳ,QkFH-BpdMATVNBa&|l-7U.tl)Ԕo YZ Mu*/!=JuƎO57,+2JI]#+JY7>M& )>})+T)S%WaV21j+zŔNaa(E&C>gFD:4184F5 `:~-?Cᾦ[6ƚf‹UԦ;*xq+^8Mik,6ZG d)3M? _aH*ԪƂxGUdME5q4rz،J]h|4j \éRLqԢWqrUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVW8b5?05>YQd1/t/oYё18<|fg_IsKSکST$T2u!XPJɡ*#X5>{sŇq@M?ULhVZr7Gs{T>IQOFU~"Ea[}4jC !e Lm~ԢW6 rUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVA~3*ɢ/5eF^,uod?C j} nNheBuSiԮeW$T2!XP_+Hj,N9â@M?ULhVZr7Gs{T>IQOFU~"Ea[}4jC !e Lm~ԢW6 rUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVA~3*ɢ/5xm0h9pCVEv(ks 㜑M#wQ]2S4 ałZ5D_d۝->,P> (P̈́fE%Wl~|A>Z1GTkjT_'XQG6:jp*>^p>vNZL-ze3h WUWL>MRJ4X,W9CGj�-L>C0Fi PsrGا\_ê4e7J,r6 PW:k{ѯxX#8{�O[=O <9xcq|-/o+}eT1+ 45L;[~ܺgfP[/+5~*^LjL[|T+U -|!jhUl2Qx�@s7)6(.{2>$̑#glӇ;Ԕ~`){p~M}@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O-:6N����IENDB`ic09�*PNG  ��� IHDR���������x���sRGB���@�IDATx eGU.\N=I:CfHB� SBdY~E'>ӧ>}Oyʤ2aIB́$Noj]gIw{W{NZ[j]v}I)Rx <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <@x <t{??MfiV^3R C^5V =!VrlB!߇@v+ZO؃�TצV*S n} \ :X͕eY11 bN+JҐjȪisKiH=ey r^Rvvӛܴ'9uKm; ] i9#}:Pl eԼR7\gZvn�S`;Sݚ77zo7uS=#X�fǜm|f1OGQ,'Ss8)v(mTS䕡VQΰV9ks֋M(tiLӮMKmVӞ̷)|ڠA;!T<8h6s&z#MZ&rœjtZ(ms;9$C:mHU(]ܙNsLFmk}Y :|5LOvJY +Z'W}Z߲}g `X�K/`Nf'`p<'hHrᙚ+fSK TހT**gmwwt`S+R̄ek57vhta܎I oWdjSvS JSǬu\GZY)3ٮ[K:v3%e ;&ᛨ+T&J9MRFTEE^k9#F͐V&J9@wOt`c] i9#Sn3V)5PM1 Nfb" ~鷺юݟ̢bpAҟ{^\!1Qj7Qhx(-W̦(@ He4UAUZӁZOTJ1uӱ#js;&m^վFOM*(NZupieTtdn- 8(ϔ3옄oFP(6mKaQYxY瀎45CZ[X(\�m=с vS3 rLXԼRw@4,;*kپ\#{zcy=Ry �Go=K1lQzkKcZO) e#PyRY('k9ܡCZLb&,+\)7DGc sG�vLy3Z'7P}jUP:f:JvZqP)Y5- f1 D^2Qʹmږ4**^ Ni6j2Qʹ�ڼ{ fHT9r{ZMyJy FKO r"(tV7ӛ?kX�O^zqW#lql{ zcib|,Ҙ#:j&m$gUeK.'k9}؝ uJEe4yU1+^�AU1dFP[RLz<@˹TFR(eV81bQYVC` ah Ŝ蚗FRc8]Tb\1RggpS4逎TPZ¦0@ Um"V433gg>K?t6c"`/߈方 ^zl{S'<1#X˗˖ɥirR7\֢vޘC:p0QO^&hi 2t`01hځ K9miiHaZ]Ft-d Q;#;R=ِ*vˆэ ]J ]0pX5Wf aɱ Y�~KD~3 <~D/8HhNDbڵ_k޴}}twټ0PlQDEd+v6X�tyExOc˅kڃφಥӪU++$/EWf6T,!:Sk0[b-8 ]lT:Uj]!3XW渹ܡaxZMJuۦ;N@٠L%mBWŢ7*ȁvL!;EM#uXrB"7_e ρ_ *bNj*|)%"jѠR;ܙnqwNY-*`رuJbdbP9~쩗qufke`br2[6]&-]PY`p*YˆC:Zv I [b-8v 3C&)nocCa-- ) i׀nÆM f *8L_y&7F5TbkBCL!;EM#uXrB"7_e ρ_ *bNj*|)%"jѠR3={ҵ!Ӯ[*U).a/<E{"emNʖaʕ6NؘVX&&&@x <X* V7lHVHw"`羃^++hĞG+@vG.;w"RT q2_]5Ȭ8Pj2td8ЫaoxstQTE(*wL:`].ژaCYˠ;m8@7ѧ>+9#;dx TEt3d1U(JPN^1K Rʌ:,9V! @[oȯre> <~D/8HhND6JJmFSn[_t]w5 PߟzwXt,�S/NmQ#Y?"\&m:y PXZ1b\䍶He!?PoE kt.84ysh/F T7 82 ߑwiI "p%mZ"-=gўMU"$/L 1"HizT o٬W5mO +k�".,6̩ա)4&*J[pKA )X7hU|S32 @h9H�C`S elEWFBJݶsW( 6 -)u}ofwԢ,Q8#jK5O˶ӤjRE| !ɷ4Ԑ«&/FC8n ѪpQV=p@3]ppH! + ǵUk+XEWH%J{4TXJ1T i*9^iQꕼ bMûk9PZ,B8+Oj+mӚ*^4j@O0r;?j3 -^7j@-^.xf=D Ҡ=]Ƞq>PnfU7ܘ UV�-{Z~Wl}\t|)?V=-r4Ƀcp{eG12zD,|C:@-{cw?0%ƞy?o櫢hӢ]�|m?)+N'pqƴi&>1\}&';0 b`Du#/>9a;MMvk떻D~͟?{U7dsWl{,+.'}\Y#'_>oA  <pz �{<ހaW� % a퍲{ÎiZn t$ܟ}EKƿ);_/x֢[�c=Z_Iv%K[52p/c_;<0wP4B�@;+W[nEi% $xESk �|ܶIo_?y~70[:'A<oѶ }>!s;2٥ݺ~%_  -!>G>7={}K fGqb7oҟtժi)'{]rzr?99!Ĝ9Gw<,=[-ax.`ݺ}y8p^DVҤ?ၓKUݒ,°Eӂ:z<D:1X<V\N>d}xK޸q,:#y�|!IGm*񳽙x}`fa`m.[ti:Sz]�YNNNqH@x <0-;y3CV2cVԭ+ɷ\zd o|q[͡H lu'zlޚƇ|?O'QTXcZ8}5n N˶qS^߹s{逇_05퟾v:)X1IgώCh8O+F}8@x <=Evos|۶wV_Niؽ0[w_;ߕJ+./<p.yё>i߲+`姞#W]+|ǐ�Kbw<�\y``j +w}2r,_\;�[w(4.'pϿyN'ρD}F�N{%]cvƍ~]>#�;�'҃ _9˦~xx}$ r_>L+^'+}~]n ^x <r_+m[N;K&ɯ~ba.xquɕ _WUؐaF@x`y`4/>8ё.q@>i| Ԓ.> (; |c`WZ+ *?#ܕ_ş�[ut~ 0 |hx <<CA!;//eϕϳBZ�HZVY$?+y .<@x <08\spOՒ%xW'\.|�:Or1Nv ٸ`z*CG}֑Qv:zSn<ηw|˽Ɩ?E 3VȽԗKxū1P.kzၣQ@ >XqPк+ yn1˦$%F5O !2umOJl5-6;{ll<ɖNCaE\Ұ@x <p_y^U]hh;^CLy0'"͇|>,�I~O.۲=w,B VZտ#r;Ί-|;hȁq}uYˣy|Y*?p9+e꽥w@À i.3MYhX?7:m#yJoHp)NC62-+ 2/ȊWx), #r m)WdEL2#pȓ4;X@x=P欹hWXj;-4BO@ZO!4%퀛VNowr]3[W ~̓$#Ө:շV>16vzٹr 1l A|?B;YdhW�i=0b}EBT〯*ʰE3gr}ၹx�sG\XVe;Z2WZ%_*b: JիdP~첔fCͦFҨ.�"ؿLAAyL~q7yH-x%�;% x-8A^VB喆. EoT -) ?O �@ (C4sbx$41u(s`216'eA1m^&T0 ~�ϩ=rT�Gl-7.:a=R~7ML}. dOgg``}W}2Ε~tEi5Wyy1@JЫyX�]df[t5VD]n,5glnͬHs$u#E5LIq!H^]WI#*(P\;fzKy=+Lwd6 r6&TAXF>ڼrm1.]&W+z _ ܍Qu$u'B87(Cpsé*kЄc)f!pG�JT2"<X89� ԥM auip^Uي- Rnk8 (W]Oo]oߑ<ݔMO<@~UD 5eF oE]&棸�aHC[럁'9HO-]bWI?(8LY><] z3=(j>{ X7)+$q9@;x <uaEV Ygw:&6GfnmJ@kfbx^x(sLO @Y XL>&Ѕ 0e-c-�~'k`i�?-L1(*K p` YcPƘ Uś5,VDgh+O^MX$0s2()`6T�!Da \xԟugDXr8˕σЅWtqrToX&XLV c=[n*'j 4!=ؙIS9G_"XAY3$X] *UuҨ-�',P/8_~'.�P�eb4R.oA6,J ɸړQKr)(Bߤ]?3KyS%/d* 4bb_3"=N!?(YڦlLEC)q Q?_;�"9iAī\d5V-&eu^a  @ʸӯgƂ^Z�2g&�~zl*0/ tt(/�%-ͧIxF@G >ߌ,T VoIy!hI, rFH7p%3 * M\X(e⤅DƩvntj@x`T<|hrBT*+D G*<RY& #1ǂ6lՎIӯ"rW˰(n85kSoD@!ZĘ&1N6src-�.�F.@*H;p҅ 1�om$9]z<PP^MffIw'RVzZA4%6 AR P6xy7f L`Hbx4_`˳zV,<=sq^'`)@yʹSY5mB_�B60W_ErְzQ޹( Z 533Z³/K'Ҏ=6g)6d18&^qFQZ�ԎC\{~&e�,E .t,|\YA˲*ܒO\egW۪O4$\4AJr4Z"-: XJ >sW l cm ~BP"-<8ȧmw5vf";3dRƥR> /f1]4,8+='lUޮ젅0N޵�+moФ̞[� 6_E1TR?̥ɝrWYX#FU##z3{кիdp5=}Wx[?|21Aw ._gJ%ؓ@Ff$mCRc19,C4o �> ]ta�$.2TWdeZ5D вffd�ϱNCYXKUiD@%\3\^0qd5Hq`Tо@dlkKs-5\FִA@Q֗E#\:JA )mG!�! R#Fq�IB>;eU?#>ȷ�d@A.rl1VC7mg�qjËQ22e\) Mق0+ ˡ @ YWCEOq$*>3�8<cq1BJ4dV_ *<95 d\=WE<}�*(8j,Rx*.9Qmgz2D er+* 1jJ9%Gb"3Z:"`䪴1 AͿe6 �;R~oMd]w_%v7%'eK o(|a| 01&wEgߞ4W~EZqto. ҄>F-I~<=HU(Y<2p)0,�$eRY M^@ '虮8:p"K\Xa\V�NwJ �)^堁b*�݄xd�Cf䙟ː`-Y&ܸ)Mzq%k*rr4tY*?ӓĚR}X&v zeZ[vi}jיN?!]~1w  oW]);iT�Qy8wl||<5y̆4RL< Q=ȎDBLYLݛJӻw]w}}wӮM{wm9Qbca!CV8qq[�DU[8PIfZRP0MmB&ʤj�ɵ(dGfm /@x`x �g+- CHxiMֲ,# Qht,kYMrM5$7CZٚED:'-K83;vf 'ӒU+rykR$",w1LE.$GD÷'S!OKx %L3y٨,�v:rqY5%_C:ߚ~]( / wmݲ(kO,"&b z+RЅ$g P9+%\)Y @]Ժpc(Z ZG.GvrP'y^@#IXH&W+rW3 !jlx;žHAg;юJ tM'\3Ҋ ǧ֥%4|Jol�pq\q\䚴tSzǝ{QJ? =;iMw\t?ߞ=.7\bt A'})P`]H�;\ 8&zԣ eB�|L- ȑĆs[o!J@x@<sbY`gR2V1 �B4U_bHJAz]~܆Kq;'۲5:~cZr|� 4a n4 uܑhҕnKSzKim7~?)_3;Ѕ(;XH': =1 rJprR/bTEupFd Xze+Z�p>hO*FAx eXn"O(e{H 8 <}҆itaf܆ԷfiNϿ ۼ%-`i= #}q͉z'=4-iwտv|HrnXƮ�N|n#v^ @h[qg,aUfGE& EƪtHDXD ([,[YJ\#'#:�Nj左cP;񡗤͏|Lpi\/-|8`Q�@aYrɶmz#Ҍ<S_L{j_CqhL\x|pն0-."t x8 0�EY-R;l6xUK^�z(re˛]+р y-v5oUOu53�bH =w%Z:'-,߲Ev=l^Lg�kz[|zڳ㮴o?_wZ@Λ�GϋU A< tj_xy"/8)B@H` j- (<ߙ63Rϡ̫h^C]_ޠKt P8B ѕ'<?ӯ|B:e 9x@9sȨ.�Gy8Y] ޝnW-/^3/& 9%-{v И |@= 2Ly;9"1[$(nA)ڭCzڨTZӌ y!H#1s߮ͺeYo d=T`&?V?iJ']D>^y�^QԑQ9EfuJN=7w}| Qals�"<,&&. /6z&M[@C+B 0"QFf<H,8 8\3=mHM^ƫ^ lZN}OϺ_:IOK'J_־TG ۂ@,�|7mT{=1C۶@i, 4xu`B8&[L_h=(y @fz  &.",4[0s@V)+r<"pC-9L`o.;t_6_0xFZ"t+I<wŏJ;n9/п# AX,h“ |PĂAc@Ǯ�>9l-^M#U0 *0)%o餡7$|lkGpOY�Ixdo;n/@,�__ZW{퇟N{oѶ%Z_o[g�d!|Y ]') n"zp{:!Z� ,dO33~.�o ``[կQRY~~~Av٣ӒH@,�b$O t<8x^)?G\FY5N>$cG3`!wl Lf!GG%֖@XWJZ7 "`33׫}ymU^WP8IϾ\;"oy �-wDړ6_+]wܞoz_ڶl�j�`A߾<Xbҳ,Cb4@] u y*rHz a!dW7 w�ˏ &~zei݉'x  @,�y&֧3+nć큙}:єOH$.  a+$X;�xǤPDh̓f)%@+??tG{zaϮaVq z srM{+\¹^�HGNMҙrZ.?)<0`.^ ;\<扽qE_'3erӭ~$`/OX`�$L*;  +T _K(H#:!@[?1,�^uݰz/xe�{B%/K?v�) g#G?/oϷ|qYK55.M~_5ŀ>3 3s, P=Fy|59E8hCђxח1ā+{={5g>p6>)HSN=@,�BG6Nަ/K7~RY]ʥ>@y�W $帢m\LHmAE�R@z }\צ[,�R}կ^"Gκ �9!DsO(bp. `!!O׽o7߿DԶ -W㢀�ˢ�A^x|QO@IS@&D, 0!bAQvI�aB?Rxpyk<aqDYs :+wc y`26?Q>GX�?.z+Â'=[~,z f"ԭ~\�'|, cBE`! �8a)X2, nJF84aV0.-wXҀ0m}կ| ,�r_hOW>?VF Npz3lkץ;koޛ ^w�$B#c `t5N( a\[,@m(V&QMʱay2rBؔYnh^CW@HA=[٬pr5iY9~z>X�^|C~z7iv {$3#s7` ނ5; a�I&ZPQr< i ![BhaVQ:@��Jp+7$=eJ7X@,�cìz67 { ][?{ǭ�̔;8_  @aBLBNz/M(a#恮qb$xG% ܂z}կ;�kWB!},䧥 GzTbp86Lf{O6]ve_^o<P~k�o% 9&M?)[9`,0i769ԛ--}.@� a^�,=t^6vF)@,�-o}#/&vpEʌ// տ›.@kBG˂-m7�xEl�jHg m woc?v~p:DLx<#tԣ$OwCW߹De}&@r<h�.<>BGL¸H?%Yh>t"-j`<THPdЇ [#=R&_R@[^Mj=bp_{<S<vCzk5%,c2ƃгzK�ڮ "%�-Jx< '}mT-:�Aܒ9 \�>7?`EDC_W3{|,HၣX�G<$^/ ~w_{<x//8 Mq/ >'1bRY&[ =c PH<,c)Po7A3P]\״ʣ8 z*U6[z'\t&ס Oˬ[^j.\q2E�Y37 4恮 Ƌ{Øl'=5[$BPxb`wBj: 8mx%KKwp:aK^qe//rm:z;@~7� NX ̤Lb /.&Fp%X p+/t ](/i>5N|GpԻ =~i5\$�IUN*KM6NZNVNrEZ?eOuړ ͕}3>"wu<`>mԲ邟ޖgDVq_X(// l<KLژԥ['zȲ|�,lxW$2~-~w㋋<Ke{CZڧ@.؞'֞vv~?37�z|W� [X Їpe  {Zf7n/»H^Zȸտ2 /dL"v gYǙzįV:o(z5ubM%~goST:!ˌn |ylbDωA�x;v˨:oJN3W2t' A/_~�"sE�۸l_SØxu_N<(۲rXE@,QE$ƓO~̕7=X~q:|<W<.:R?}[O VrjwI6|#8>[yil Ļ Oj7~_@t4|z]J8%&N{"]p\gpg灮# 90S|EV/|ox|]~&М@΋o \׷[,rϫï`?),c\�yυeL^""OG]` 0VS P6y xNͷzj%ؗIZfg(eLR|"�#z%Tgqd#ꁺ|?BF1?ƃ,C>|yz+YGĠ݅'P@w"CgS,�F}>[rI2Y۷:燴xaِ`Z?>= Kȗoܔu'yUZ3QOiDYG QhA=t*y8M5P11#x1sf\ @;=*?KWR:q>8=3XvT}AE9e^Sޕq́4ʬ9xH1'y yYALLM{ɣ[�Lԇ@xABOk5)R⁺_8!~E[~oG?e\IK?]{dI3m] q!퓷AskO:uN9sgF4vL4kO6^ú:dnĎC)Prn :+ ��@�IDATHぺ?8s^_iQ>qOLW,GG%/AhyA,r8o83Xor{&QS�3ѮC�N̳E.> 0!K\|<P&u#2䥯e~*`?$&�~cL`_L@+�<[Q&"ihm[ЗaR???G/Oxsz x<_2<4r`K=ai`Xh$=`xX�vD8!xʳ{+Wt^hAi.0 [KX/�G8LN.7j=c32/= {L_yڏ Jag|Or|$PCR#e{r:ƨұ�՞v#`B'zki:n_5� BXNp$tz@2&Mej�o虎ோQ2lJOzzg:GxX?-#Hx&6xw'@Hw`>R<r~7&oTq m%@>$8@0 D2LE/HG~BGIHwao@?Lxc.W~Q<^5}�JcΩr\4q̉vÜ6ǓFE<m28llޤX�̛6?ⱽLwTzFhm_Y䋌q)u+<`'�gw OD0(r_E\�^(t^+|Jb#52gmSVW!xv嬧ν]F QhaˮMٿޡS­ @XAE�zѤ�ܕ-7קu!`[us^~S)^| JYh90u#oXκ z#:]9^A<n{[P9t"eL`{'v=+*]/KpiEA^<="@#g2m"?}{wy:+檟]g<ҹ|@ޗ4ub< y0@G,{]6'{<weQΉ'z}!o iPh|}N<kz Qh߽�N3^zE Gp< {™#C&A[�}x Cd{0P{+'iy% Y R@Ł=i~~+}౐YSԩw H!g"2xw'O\yіGIS.u!?Q_�|iq=gxoλ?i4 ԓ`?�Ec@ȏ8L>$y/�+.zO~dXFݕe h?<MsauR9uvỎg8K evjG<1>"礡<iMy#&6ddžF>?<ϫAqUi3 `PB3WY͌=@�ʹ?jC?74IA?4C_]<#:AD<yS95|G-bmWG[5eW> c)#Cx:Iǜ6(v'V£]wy1m%I@6Qb@jЁ/jA{x0?s?HWTXy!}/'~: 3xP& O1̽.m3x/',1g{,m3'9mx2qcNO1ic!#9yٞu<ţ:nhGK@`\"/mcN>kщ'x!-pS?| etо/yA/'WIKD]�'equ2j<0yh^]C^'ozfN='9ȇ%<ZuXSx)9hk<#9퓷Q㽎AXbrPߘ`\MXHXbez~?>ak�9pD˖{pjZ/*/+iQT>} aZ|69^ q̇ ☃i|^cg^ xcev hO]m>.{ iij.QxGYv hڑc7 wz Ѿ=]0X*�g:Nw=WMVYŋ=0osE/ 2a2ۢ8p5o<`C83}P 9^}ԩ.<y˺|N{,hHLkLmEo{6Ok|mږ/q)aeG5<h׼1[OKg/.L0m [ d3_j@j&/:%/=1'Y4軼 /~צ<{`R/5x}^]X�/j} #>PN{Ї<<_ix'MsڠAs#݅ :I ~2_݈`DX8顗NzS@dж0 �t+?i,dcR+ߒ 5|�\aΜSu<b{]` Z㽜Z@ {5<$uN^2qm昽>묱Qcg=]xhAx:=M,rF�Ǯؿϝصkݻ?uMx2, biu- bsl|\></e^)gbbؒmD_Z:&VM֥+{+V))/Y*M,YZim+ʣg>;^+)c  #V@ ~�wx$8l;EMp'Y:$Ϲz:/{m!E:5.xO9ˠX's^ u:+zsi0L^]/u�Kl-}uFtڿkW}i};J{oO{ߙvKy?/}wݕff aT A=+&`ESk~:(y=gٹ}ҥ3SSS_D5 I7#Lxp5s2/4~4r};wC>8d_vmZ fc066^-)X�DB0@ڰ)|ZZ-nLKVNhzQw ={ǁzi&ƘBDN^rPˁcb�(-f7 Ҝ U?4Bvk@dҳulӵ:XW402K"2veZ@~o|t[,-\.A]Dqd@m#ܸskہH;>g!;PcN[3]?A~ kI}kIn ٕ+q]N0> BY&{ ܒ_@tc>sO% J 9_BjVX<z�pNSQɼGW0 @yrↁ/WPz>eBZՇq?Ǖ:atG)5sz+?1itC_[~}@`ǺR <A}'ӣ p8Hsy} bD;:8OO?MijL%2`x #w񞆞oCr]xʘY=rEuN~ O}<w4'KFa>sI c;)6u TYo EװA6A/Bbn} �:EތyI&q-4˒ "1`c yoy- P 22"e]\t ץEilيtŏNު`3~efyɟttO. ׅ䐡11 icM$ȳt#=�0\*|s h [ܕy|eZe0 (lM X!1!OL]>ǜ.<yz<i]&=2z<L3“۾t'>K;.-'ϧN3(pyxIςÞr>8/!G?�9}ms*M2a� 8!{X$-SR&Y L))N/5 ?CEaB=+:{wWO˷6<~s NJ5oG/{\||\{?"'ztB0dU]OQ}qFs~a ݤ٦KN}̕j)0pD9y zSVhz^V2ȫƺltÿ:];:v^6f9a7p,}Bӣf10ecw&!.()d<ڦvJLȻ^.n^ b�$'d49֓m B.-&\rܻ9I VP Ik 4<y4 4 Ii9Y~+}|+]'G?)?' F~<\c_J;-:#,C̣,6&򀰢;GkB ?!$Bc<#X[XN z7n:଄:sr3 G=)#:]9^: x]xz(x"Ma]}ۭƫ=}o*Fq R:V#qji&U~mE&(_.@~�=8:ۯ}0)0Y0yg�U@\b8%`mA´ݻFJ٤h4ZfHOҖ;nK7KO8%mzcϹ79%O&,Ixկ/#cىD,�V�0%0-B/\0,5琸Y%ȋ<1>>r}@࡯}C\־� 㩠ƒG:'+uz9mׅ#˺xA~W}R޾ݻ_|{ޕ6>I#I޸S<T&bLŤ!cuʓeN&2S r\YꮄE] 8Q[�iz|ٕc3t[�(?v Od-#I]BH=.)?M<Rg#.ډD'49�6h.h/l?t܌>OH '*[NMtFٕ'B��&2+W �: Tפ +?zZ} ^>Oo3mb~z~<]CNO񁮋׶`%waZ׷#9ik<eu^b]6 {o)asuZ,` |Rƀ]EG@%<'@Ò]ݥpQDŽ`jAUxڤG}�;0e8\c|*1""-g<�4*ae\M?"(X'LɈWw�O [yV" 0!t0~_tˇLvNzʏ; {'?~;WcoJ焅ZV�1~dHv< sdp/t+Oٖg: zYM} &|OWD<s':1{]{ɛE;zWXW21u\˛.s^PCN,.<l``Ge=*zRXGG}@g~9NU*T<w1)޼Pn-@ߌVAWY0]ڠ^d $nxyRQ,v�$jye0f&vz]#/NǞ^/ <=�v_}ϗOmp_BҵuLQ@V'X׸V6 ٭=mk c,%Pyq.[ f >vj8m<6<M xxg>wo~8}ޕɗ`"sǫ h35HqSu^C+.W ]+ le 2;Ì5鹙1@+x{)�2qY_Pf (.�@cy+-beNĤI gVFEWl NF+9pȵI(%@\Mس j�GIqGmY9?&Hg/ ޿}?t+&# -?&#:0ai�/kpn34&q0NK|Yr`wzj2`ݣ�A[җ4gwڗ?"H4;dH1?rvDE 0f2ţlX΋91G.iNI ]Qa+E6i|G"(gu|u&v�077P UzYxLG!Wզ'y\h%CH  %]bZρ_ zxx $c" Ol .ww|es_6<AqaH'>??}I#cn%hi@.8�LK8O4 ɫ{O8_0烝~:KUAU8A1<:>>^uv)uhC<ԇ|f>;ޖf!?\ԁ6Dl�6YnEG<KTtu!G <j/&QQh;ۛ,6iimE9gydQ]�Ap�}zm\>`T]<Ef`d*HE~W�v\DrC.R&? q&1 B0ޙLYwL翲wYJ]=YU3}eϕnb"rhe}Dhj6Jd9s;G.~o<]W uN1B>y4�~̓<9L~jGzx]<]MqW|͟G΂Mn<@.-e&(N75Pߡn-psmߥqWjUz�p W<u,y| o.jvC#1@u;5n-B&~TK O}] ; &5H\rF¾M>"r7{3I>gz$Hsggҷf@Ǚ% 8>W7\K?LH4e-7E>2;?ô_rus9i`:?Vsl1m{�?(ex懊]{qy9 y5z}@{z˛5Ƨ]D c`8`tNg {gb|:@o/X]ck .mkQ%"M0.uz�p~8 0@d6xMCJ?hͱo8@!3jG⶜(,/q([ρNA\`yHm�;T㞑<YAzd O xo5.q-DK|Q1hTy$�|°Fy\^ԴW p,|\&ik<uA(Ӯx]x._wo?<[em< ~!ll+eq@ȡۜ6q\xu%b:d͠k ۨ\ �M,f_u 8CƎꥹh9jՠ02X8ysEDw.]X=ر RZPI/z}_̗zZJ |qWɟ>Q�`gRϤEGۿهIjO'.̅q[&l/�p"~[}>cIh'h$<oh38*8=6oҧi \+3=j[urck5Sܘ,*X/:C.? 'M;*,OObcF/ �8N}vb`u m#%4ٝ(l(ƚTΐo' EzKQ<y 1զ̊n`IZ 2a-=~\t~|~D)&/ƣNW Aߓ/B[/g<J@w<)x݁'Hc1(踗7^3x J2g=/>$u_gur_fPۨuieQ/@6Cxt[ߜn't^vyi_�Oy8ԯVlkCCȄNw0/uԼ"*5-vx0}oL7E|Kpk� KzIAe'Nt|Aќe ,*cGb#I=7" YRSIo~z&Nf8_H̵ވcD$l|WNY9 _cj(rF |raĪ5'<b蚍*}[ 9>8sov˜E@/U^n'uNܢ Lkrs~pkVF{Pxh< KLF-kԚx@8 op>=Qi'a<{; *'C^�. <˰ۓ_"7vQH8:Kw#簍OSFIT:/>A menhT] L-D?=|$/fa~:W~w|J4t9oqu]xou >.<y^21QIG=}_fwӘ0<T 2(<2|fBЈ$ut 8s'.(GpI3,8PדI(|V^4YE)?/ `Vp)v_㈷~/WjoJ~2mBy:>4so@m]yt>8{{PhO]08KKNZX0a,[X³WvVxEj-Ci9f<|&w=8l�;׺O,3g;Gz>vz{0 hc+uA0c|Z.+Ci lsm %P[摰K?#Kp ҁNKtU_B?ʼn])sW�u}]PeUHw 7tk^ܿObN>bsT'3sb6y O<siȮ/YЀ%BJ<_+lvp{4x6Ǐ|rϨꟻ�A/y,^)`װ�G|L `sk<ym@ޕg]̽leIn 6\!r7Z]DEns s* /2UJ+Qܕww@,t=PaUD-/鉄7:@x@t4 g�m�+F&o,]׉&$ c!M9sb14LކǐfNsCD5'rUD{}2]rrTſ`/jv3)҅qɡ `R#M>6>锖Wo�T"eoGLÆ_ijZNk<˔ӧ}⑳mm~{7߬.1O//{9X=S6~0syof6|m pD<`oo> rBcvdʊn�hY tbг>PS%G\0#g6n. ha-o|y8)qUmr&/#9u{YM{TzmCːGG,sA~?Hv4Wz+7# Di Ύd)xnנ/ᩋ*t_P#O#91>܅y]ke-,ߞ.QcyGork4+> M`|\b\Nġ/3LX2 ɡ:/<;�PNj8y2+`œ-v9*_)Wn7tkLL"H u<su!#6O' Oȁ'9^"8G^$<Z̮Z{[veέRKԖl²$[ƶ0` &x! 0 =<``3{$Q-[-uRxyWsVU_^UkO4YCĆJ%,SQ[れ%??ma%֘ضC6<O%ϧxx!O)1Ֆe<ӏ?>oA}Kb,0Ӂǔo :m"SL5)/@Y�ݳrr䔘ຉRqÄDrLTN^N:/ _?B@H�T6LSN؇4y"[*;)#ޗrXug98Rbx䙀_74ac}*fX1i^du Dnp.`1 '(xSDI o/!xܱ"&-y9Sv@:Tw{Y#=*O5LTn\T~� n??{j �qc"m#NP%( նdMnPD9PqA [<�DS^)l W ,xu/rSQet`6ٗo'}hG#M6~Cxʿw_" l䪗ڴ1@Zv^7l㒝4a#ɭэUcK/W�Lg KJ(Sƺ9:|߇Oτd5c~t bIkOgZK񝉢6Yke�X+/v]7G1 Ndɬ� ~=�7ا^|9+:%R>'<(q xK(KBx}ԃշkn{-գWR]�+YS;9" ?=/]cy�y<<ԗg\}8,|oU *Kyï*WWWR׍8Al7X,�(,&eg^`d <AcA�G [uW u <£:X}?W.9<e,)e]lx2HY?CXeHMӈ|)Wv-V,NXvKԥƈ>DZ.u<?#=U{̛xʈ(eĤu%>m r=OY?W[lG* W;:1_u~ ]墇0+2IG,ƫ$K-P�]|pr]M28 ݤe#C0 WP0q#C<6 ) gyH<w9<e,)@'⩣lhxViW1Wy7W?9q|X!aq6,lm;µ/}94?NqQ Ǘ!S_ЧuSF<{Sq_/x&' 6GE6?)>2=GԫՅ=ݐ2"SFT+ ( ><;t:iU=vB6V+IĀqw}Ѐ$DD}'cɓ,<x2_yH}[)>Ⱥu7Yw,ZK0Y:CQIqFr.!睓Haxt~ʪ2lW(�ȳ)88R1XP)C8#OʲmٻY m~@�Auc8 DƔQUhX|GTnb+p"p:AeoTy(|0/:~P1<Q,I}TumWYcNS<b:N>̗#O,vYۢl-/zp%օj6sXv5~&i6(48QEDwsDYhǪz4U/|O5'! cK1O 󠔡7PF P_<,>M+<?il.-˹&2}<Le?UjhQu W,�&c:!ubcC';l@U�98 +@ >"Za ? ʁ - cX:ARb<2Ӳx, |CP~H>Vsni�_ޮ|zMSUM8r:V,q玠mo ) XĥyHYKO1R֋2aAޏ|('-ܕsTs#/:mAyx 7'@1Q|m�=&gL8id�"m: p&E�?~KxV#GʊeAY/eg])r ԷvQP4Gx٭.3G;@TGޮ.�&ӻ%r|5Ӕ;ZOȓ<yPRqB.7@FLM)ySwЯ>p z�i&4%gAyYE�&sȋ@0[qpo߭3 :/_g#xϳ<˰~I#eԓW?ql F7n {^1YCPCoDBDoG@1>@)vmܔaAo0i+hoUq)y<U1U6')q'۵u{Uln9l:K " 1F,P�p3cH',n#@BW҉o%�)p\$q�pilVwh4Wg>,O _@κa\xX_,0׼5K[ږ<Ye ˠp~1pNF\wkٛm�-/L'ȓ6<z&_sx<0:I9>_AԇW<y&EԬ*ؚQJ_ @8ԉ/"L~s�_4alXW59v XtdHtx;Ȩx<<Xȉ' i.<8⵰X) wݷݮk5k6dM2E.vo6-N#~+†1UcqC)1G "uK\'I(_B oEi^aNDC @tH>T_\H}pFǎ{WZ[¾9 |, <ǥ\>K)ib Lg=y=~xQ:,W92c$<DvMOHfdRTٵç(e;]@.6C<Է+&{~Z>Ka1goswQWRUKIBeЇ57tRA.1{rmx[Ϳ !۵\Ot)6Y_ֽ0A<4I==[\z%嵎X1Zsbnrӻ 2Hͫ- '\l}¶=ϲwn8<i3bKđ2bHYO<e)r{p>l՜9JVFo5ERLa�lLz!"E� Mַ!{5thPOeđ8dӺڵ=2˗8{^-v@jЋH &U,T ӣIcclc2(nFskucİu<(,-_/y_͵Mȳ?)YPZ :I֐s$@Y� iFCoEй A_./QK 'iKtrlmz'HvxgRߎGr\ux=n~nҿe\=~?¥L b�+^jAG=mul1$ps_j7aRS汾>/o o> :?e�qNa.fel�flTZ:"u`"n-֎@q0�(&f*@Q%=<`S<_o2_4"?|ߠAo3mqPS񾒄7%5tRrjJ\}ׇџ\6DJ</C<e򤬗Xҹ9<e9<N/WsC]|˹gA)1y e0 #bE>{U]؝�%2ɓFuC߾E w8#ax)OYO,u5W@�L40?_4 O.:կ�=hooȨŶb}lO=ho)S<= >&W1/V/m`rO{@Y�2R8 y@S/P"@*'3AN۫Էs1IObIG"z@}đ<PS<[6lS?x�"| !w}BnI=j'Gq;�[\.I:$ڛg]RCueeO,(r]ѿp#60WsNxlݰMzzVe0P{`pn*hWՈb�T/y~[I<DS'”ir#^BrLRͫy jaQ 04$k)0kڵ8O42C`OzG菁ǁG2䉧<1O)"QSfzϲ9<e,A<gφ/5#fHToyzRA_F&ը `xnoPget&p@ʋRdx߿P]vdxK砳}Axʠ$e<2=S~rxX/<%2`w=0#&@GcAB}\Vc^-#S;j^v#aSj?KE)8'y9<dԧuz >x<e9~g9wVfu?.v9j��@�IDATKEjNƹK7y<tjߕ`�znȩSÂA]qF}Ke8‡cMq"-)iT2ԓB6LY:jbK@Fx|~s^ qk9Hc3Y7h$W<,;-x?0[*VbHs^O1͸˒8Wb9*0㉻ǔ7a szef2cڦBߌh @4|SRG :s> !b�(V}jGȔsyI<eԑr9< \WXЃ̾ %J{$`=h*s)/!;+k.&u �x;6տ)VFΤ扫k0.,,'2x!;eN,y ?LV�l T~-P� 4 sTTRDef萌qͣOM ΐ<zF鱐yȐ\(<>W?#XE ǐEnǍϐҰU eX QrTr1ű @%U7ϺDqΐQm 8(dĤy|Y9<e"L83*(PE50[┅X ΂M.�0Gpѿ|W;ur�Oy<z&:TH%A)q"3LJsxȈ߸zޭ�O&"w,P\D3 dH&Y=}E7QjX{_mޢHWcdz{{Qx_ǐmmYÇ#>]8c3w85p\@&6%X -P @9@()Mx+:,@qRj̩̈́0m c!g}"2A3-×.w٭/o>S,ŊA-ml ?PId(, vhHig<<)z<eǃ!#zYv{ð~+}6k#?;Z"F@Y�aAV>N 2spFh^dX.�iá>} y"y|abR<9,){ף {97$~D ټ·z)mHC搝kO`1cGA躰lt,g?SkT3nˠ4ԥ8ș<2?z`IQM9laD#1c-( �o7,lYa1�j|n- ëgS4sᦴa UX\q1g^`F7l b V Oč8epbz[PUפf7;:.872yT^Hi~˲,}{<yPcݞzlnҚsؼrS6^68`m9H)лN m-�Ô:<8$$\@W,pE"[ [ ux Ӷx y8JSqs}cK<(1~a1P 8Qj23rR26mx0Bh]}!5(U%e(C%Sbu꧌_vgßl8cv_M}oso <ok]q);RX @Z�:٩CR_jceq™|(?ЙiRN\JsxR,2luۄnaPb!Ѯz zV(k)ڵ~4 Gǔ"xr(vHz2$rY8rlz֛Y/zI2#Ώ\X/N&Jas% ʮX`Q( Ek09BxuHY@m1@vУĽw2w[�BeryRyfdG<v<O<qy ݰ}g|2q5Ш{Zzj|W߱�c^Ԥ6lqu-ezj{ϳ~ϵx,x_p>a!c1,82sMx9L[#XaiT*gFǤN \q,pr-\ !1T{ yrl)%2!:%2Se]J[(!gq ybu8i)h&'б"@nGz o:M[#ۏXȓãxX/:rxZş e]�fS�3i%3H i�<E9ȎW$pphv/C�^DÙVI"URU{gr^ƲXPzeOgO Rj(- Nofe%e_b'20*g<:yvǡ\|vw:|ԗS<8eG9^<h\G-msM*bX,�c+ M >Lݑa]2'0 p}ϫwX)ޱzOٯQ2YdG hԳ>|5ׅ cAS@T`PS3YϛNկѮzLȠkG6lۮՊ;=.Pq,)x$->%mQYor_*/ȇgsES:L:#BP&ZƱZ,0`N\Sg_K7{|$G>йBNy:iuPϲx Է2qC6<:v|K lˍ'uhMݻCƁ`{:6F㙷Ff f#.[Ci,yӀw�t1ۢZ@'s sNgN>TR,P�Ka!2U@"A]bP>Q.uV9[:WOsx<<e1I#M$TeԃnI X?$ UNEo#kD-]h*"2&�Ժ"&-϶|ybrmϾRr^yT +mĬLA% ,eX:,S yjjW3 N~$sGtl:ui8%Oԧx,<nРY�=RWWkŒn{[˱˒b)8葼8R<)8 O 9sAN@7Sy&bgc+Yab�X f32KuX�Ԓ8ϩN {J }R J2Ɏuqo04^%}^#cyQhzJ}k[b֏8)76_y8j\q쇂sx<.C;w{,x'CI- ԅ[%52A˳@Y�,~[#8@N(dJ.� UU.;ۺ ;Fde)xbA x$OY)2bH!sKn `.gHX,FeKYST\:V?h2!-+ذG!d)Tsu cԱ4s|Yۜ t`w�<o:-'ro(@Y�]Vz%z{<q4yA)2eGקex/K÷G9e,kc.VO ,mR{դ/#T}~3˱*ړx{M<q, yc''@;Ξw(_U0@Y�tȐXK "T TJ(�2|U:ϟY;t6Rx2$5wQϲGqi9<e,R_Z}�8{PjE=!y+Qw<v.>jE1?B1o&$:ϳ.H=o8R`<SR_&{? 0ٙ.zNU()X`q( ٫hsXt\Bd9 oq P2dOǚҜ,š"ʪJ#ց<qy, %=7|UN"F%4ˮ9˅ :dgM9F[\賷x$Ra7)ɳ}ybx\'eYRO;Ne=|TwdVm6WPN\EV,L 2 8SԩY?��`yК goN' C'&-9/cYR/Oe<E?iw-DXp #ᄬYb }f} M[ϴ@vb~=<eđB'z|Y=ؗ ¼�td7j>*< ,e2Y TN/u^ѻǜ]#z_\jʘ 8bAQԗY46W _mCJLZ?[TYD]Ҁ栮Z]_qk.-?$4O#rmn2brԷ|Fa>㼯8B8NfPk+b[,�oRC _ڕp2 "P'x ScgJ G:Y)cCH)2Jvs]bkeZD!]tʬ,m.Y1?Y�\-H{Na)BgySF )BxR/ y=w6}u BjYB1qJ*XA  wP~J.B @qo:8B իXF~,={;ٜS  e#P|c=>qU"N ֔PIECL+c@e)]Pg~ٗ>M<)O9ǟ6s/r՜Q@ʔT, @'XtX/ӗ-FlѹxDZ,/,C\Y/Isx6^~e#x"h(A�baZ|ڦwN@G=P" 4M8R`<|-!O!GXS<dǿr'&8~$T!+g�X9TFF<?9?[9p:Yxq�(8_r﨩GYǺ=%ux %xw #6L>3V X^ }gLˮˎdL)1 dS)οrsE"ec'w�tG^?)5 r'؋ _,d MW 94ѪӃV6Pu7Ϟ@ydsyX/ˈ#eLYSa,oY-Auu)%Z:˨d~ c}~#N�=MA#SN)}mG:Y/ # 1:E9:d�!K5s[=�) } 0Gzf=dIs-RO xY2bA yH$2bR:X7)0 YNѩjRJ,?F3baþ@_^�d8EW{m2i,CBS<i,G};J{o璝X)AIe�X-K@; ɃS'(:Iw �tȬ'ͧx˵rS_ǥmSq$v;.]h`vEVe}Xa_7&}o~Ӗ(G|K.Wbr{S=y^3s� 84Y;,b%X`t eJby-�&?tZZ1"V8$ |H>##�:l6Rt42}l :`1.K=󤐃_R\<]{*NZy9V;lDeQGmlqJm@*@y/c9t8Ru2c9P?g=dWR5j6.3"` -\@G-P�tԜEǧ�ڟ<?H cǎ̪No�LN2ı<)1<`{:Y� `"54H|X6m'48~/;*ZIPɗ!47ʈmZ*v oSe_,( 4 V=N<{� }H:p>1�PFw䁡'R 4Oigm�w�WbW  gnLϕuyăGDo4t+ `W;6vҐLr-P�˵`) Ёj!V_Q^xFN<:#ǐ%<=<i"fh09~'_@2 Zsj.ǖ~TzIް09{CA{P8RA=(˒ SeASg?"xfǓW*s<*| `=hMa 7E/zC؁G*眳wt){<qr, J)'~îuG"JIּ+W|WȚB,3/{ݕ]z l5m ynO1{{Ta. rzT,( 4n::4, Μ!M/MWyGL4uD)t)&=޷qIY)%n ^k)\s9 4pMr˝f=hhɓS6cȣJg&'ؑyng7jyNyPk W,( @\88e8*E~Hc�=E}�y,y֟bXGì_ vmH| kóO1jcK/�ұ32D:rxʖKzzE*JOivz\;L ,e2K�CვcO �y8IsCSƺ}Y<&yAmہa7 ^yJo 4۾]؁Llj xu<$y}yʈYM(ځvqjv5(Cz_1/ PA^-j-Y�F� r=L '֛ӡ-=yЅE#7WY}E Ui�K.5-=W@xݖ ȃ * ^+oɬ\u,TPfY"(&-z T4:H7Sj0@P| ?]vxȴ_I(c̷ġM_tE˫ZᄶI;'A LS~6)ǟYP1ZrGH-Q+ȒVe2v-f,_ۋ~NX jAAAɠgYR=ā2C^2*5TǾ/BVSN7*AF\'A6U=Ό?V)1yJ#irqcwOvN#vYz L?Zj,iTIQ<'xP& eHKH9q#�jPƁٜ|j;_|\;�ĴL/�S~~PR}kmgWJ@@ 4/ĩ8$tA<iYK/9ˤ<sa[[#$j\"FJٽ�tWg; Թr<n%8cS:zX`q( ٫;`:ô*AD%g }PYu00{<eĐ,h#cQqiSFF?;ΖTpeXoS|ן0q;C%O =N|NƓu `L[*Y;;pħy'eL(e>qI+{,q,G {uAF67潲 ۨWL[qa.H<.VZ۠4Q+X% w�VХ @�(<ϳP< zb2)eyPe98_dׇL uȚΠAIoGyAHg7[,�I4`"}Z6s}xiU|p 8Rrx/xϣ<qLPG9hNreh:>WO}yj*}e&vcx9귔φw~=~VUثԲBσ$L)g�eM̓x<qă2y<e,CJd{uX\*6c9H]~8;�pRu:^d}m}}{tpp>RdAٚ >VS XRVr)ɃɃò /B!ka0:2FgXi>#/vȶnT,ZFjo,P�}s({` pa7\5=~#e\!0BIY#)eyߖץ}$\ĿZ7axYe S�=:>L>hȱXNGF~Bdx˨ˢ2$an [h=զCn1cI˰@Y�,xXmǕ4335h,@L8_e{dԧM u0^ TSB7X-�p͖ҹƊ\ȫrdԡY'DWòP,.,bA XjT,@Y�Rd]g`|hArМY:~GJs1|?38q<'&x@?dܰ(5-M{_{;3: i| kkP;#CPE @M) ziK,P�]r K74w l*)ɃyqlusIzs33r>.A~,L_(WK^;6Qm<9< jx%@R]^-YMdLj99A#6&t&]ʳX̾;t5Vk ̰uy9yP`Xe(#)~NiU?3vQg$[G`@AplAv-M_q@8A-` b2WOVGzgpQ-y4sPiuuմ;39fJ~Z<i 1A{�:y;] SC;9Fe!0)n7,7ˋ%![Th-\V s#oW6P|I3|KN'uɽteyd0(㛾;Sr~aC⩄&Yw z;uπ{EI�uEE+ +=(ecXScd`+K:]ۋ/t<[`rb'Iϝ;F<6!q砫NN* :X=R| TדǍ& ^^ ˟Mߑ n }G䘎kXXl.׭(E�~w sѸsPZ,�VޥEZcX^D4#�Zx^}7&°\C̨DaYtAz0"5o]]�wO@J毭 j�XJ[`z'k  qu]ԞJ~Q�o>8!BVB: TB9qnf'{p%[Kdj<*c,eneF6-*wES{U5w<J#?H�o߁!W)wxr2.uGe`/㮣Gt.f۶K.pY�tИ[ padr)r\Ր; o J� c cd a+| X NtⰔ@'XXcTG);RV!G�9{fM`.H lo+Ѕ�);MAF> Y P )gg s'!eIkd }]}(� 0E&� S3%40ybI㑖˵en~Ow]. Ʋ@/llNX}{X'wfᢒ( =JCX!~%K&Ϝ#(wEt?}�nIoر3L<i &1 AiZ9gkd^ iZЬ.?=o=} ( >><486{T,ovܙϣPo[4<{:lj/['ֵ:_�`1YIo۶C6Y ݩu g"۩uߜ* [7]'Ϝ9ߺzG%(~tIw6oMW\{O~Bt|2roH *i-΅Bx\^X>l;7/)r`ϳA-d9upkB~�-�v%R;|`AWpw!j Y JtU8x5 h$1SsOѿ$;;wQyTϩ,�vNOB:% 0vNJݘ[ۺ k [ ]Ny\klZQmH 칮1*=Jz؈)S^X�g0! w &彎~M=}~= 1.86lHYr[n} T&O"8�E+4q*lmyy&kh|T�zdp\ ud#^*b%#aîk8mz! u m> ۯZ>%?(yo9HUK|nDǩ1Ok< ؅f,D�XSTN }. [,ZaW>'/K蔛{Pܵ,^�+C9h_ʆ׭[RMnF|(\Y,�Vζ_{XaS3Wh^ ~sE_1:Ɠw�KiLcA7kZ=~qci~ tɓo<w?eU!5hcBVeV-uβ�]$3oK+V%'=ǽY`~l5$?p?^OjӴͅI}'/kt;QBWp0_hjX,�V\:P:@R^1iS4vD YGp%t7>/2{ZbHa^nPg>:1x^s̃2y2vr)|b-P�X/zu=|ᑵ߲Y P?t嵋nW ocAӍ㢜yPv/NH%T;yp _F7mn}H\ y)db@Y�aZi x .k<PU Q�dH[E6^\a[c" `nQY.'3g$FkLS^K]@-P�HrPD%%xx5>]~jڂ�O}7 +b. ]^>|svrt(sԓ#(b%Z,�hRlqK`oggpϞ 񃏆-O{q{3#e贁Uul\@6þ}i?ŗō[892@p^뢿{⑝x#/M]rt �굡/Qi5F7e(e d'{}{ƉϫBgOYoE}Q^:'2X&(ך t<:Wci -7�Fa%0=5&O cr?%W�l[nE򥼙13DM<ܟ4^ W�Ǥ�,t.{ i 8+{!0 K)P|˱xX]@j Œ �p<E.,(c ,upl=6f5#67x9 _Fǹ 㒊VeӶ S63z_>:¡Ѱ/Sk5v*JZ{򵮌mj_cAd~ cxL+n}Yhɝ�ۤ�<CbNX +:&O<ןׁnpe  %@bW˺>>A嚗ݠذpo '*׌<F0aX6]?( 9k>o|'EunpxH V(Q`.+c -RƧ9T`C8gxͧs#�ۿ.@l<0 6U^UF-X`,PQJ'IŽIyofbf?\!Qnb`҄%�9fcK`ԬP7h#p2:6c ' 78ʗFGs:q1 pL Rw ,e`S`3/}Sorwjtz]>at%ZǠwWùAS `J9ly,JWl`k@[^~sEV~p-/l.�t^]� s(g߷F*[ >-5Տ$y!k84 y@w/j�IɠTv>O@DjߧoڲM~޻V]žW}3|FDzL@y`1t,>sF^I 9qSpT e\(.%;ޚegSǠp <i*g~^^hsj:=wvW׼ݷ"۱3L:<L IU9"F+/abZt &'уa{¤P *A]˜seǠ_'\[/ <zR_Nй:<e/w[=Suᚯ{4ܰ9<<6$ϛ1_hb,P�րagg| |_>#q蚄aL2v_^(w5vV�>x|iʮezTƎ/�GP]_Dњs{/;E-Q50Iz= s 6d*X( G{|_=Ezu�/2~/хƅn_ֵ2`/{LF %(HnS.#/ۘ"?}=X~e{[\.}녱ts  F y e| ,ek9V%ƷI(.dǫ͋c]k;Ď|Kj5a歹 !Z`h6 iJ/ x$ɀN ox΍w J/X( NZ'r/Ƈ4m} l"öj*M˟P58HizI@IjUD黿/.~ X&.K֧ܠm`.S^(`@OwX)+ tb@@^v}򗐾>O)Y0z>'(EOs:[U-1g O%-as@F^/B@a( viU"E>p3 C='OKMp<Maݥ/}]rύ)#"Ţ�y˹(" WEO :,:ok<8N|i_ v]^w 2rjE=(D j�Xzy=} SS}bR^+~ ͫiv}w 3N96"eGfkޣoz  ?i~x7~o3sp^H)'K1%_,@ �-ѯ?!?% ִ}wåmlA4qG!^vEe^nWzc-xJdD`X97u@ ~ȡp.]'ʫw8WH<(>ObZ,�k^Va'ě,-5d,o7&"U e:^ ^sN#KTp|u?y,PW#.ac%?pp^ Cŀ5C^ʠχqP�τ% ,e+fF>+_&gC΄Y󠕓/]E97Ș_pK_Ūgմ,eH>%�eZx vocо y`U&;q�vׅ>0ƉQAo!qYb,P�YWge};q?DLfW"ጔJpHUC�f͈pΜ g#FC@41fR4+_)֘}&EרQ^vb8}KC##ܱ.- (h>ZވT,0`.Nřx<&_} 9eop\"W&曞 ]i#dNyl\$s% 0;0.n-ds\y+e/xqpF;�JE5uHJ[ @Y�,T9w*L/>=Lޙɰ~U=;r`�ʇNY "rH5K?tW:~cUAdn=`syGMq.ym}I,P�,;.>wt.&kޚ  W( W/$/.o &N J 2"zz nJ웧)/;Sw}1<MYվ\rSžoAs*.79坌rU)'h @~u{c|!C9 Uxˎ^(_�DbȎny!W|\2S߮mA@ڮ)mZ&/mbV"7WF�-g^.rbN7[{pa| 9hjH7s2/`Z,�zk}SGI XTJby p@vFtZۂټutAq_>O hP +U|a1[ 2[g'tUsH Ly\ @'*fJd @ 9~7}a}Z^[ɔ:j! C ;�a-'k_Þ?tnDWqL5 Y}H0~\W1W*\WڢZ(�y'|_-DVթeЍ^far|GZگP_S@昧cB!Ig-P|[|`E}ÐD *aW0 -{ q::y po?<PCn|Fns sKb .�^7br,E2h @g?>��@�IDAT~wo^ 4`W6?0A׼xNJ1iC_Z:LKGM ssn� 1�@ Ji6ɏ=?.5)GnU>IcFT^`Ksڕ)@Y�t1mɳ uO 1u &@^$/ ?-Z>LyȢnm;U:}¤| 1Z :(Zq�߭It%Ecj.Gw|ANxpC}Տ'&G+_/`=@ɫ}n̻ ~ϯZOɟ AW=/,L W >)5m}=?#) &륽-e1[зqq=h3:l!y'<1AY];-P�kul/f7I/@yyRPhٸy5֕mM:N3jyc}0#P"Hli!YՀb:9ϟOc7isx򓙣qa4; y'zlX E١( ]VT:sl|0-?ϻ_[J'|+^V?2?ɏ*_"l Xz!ٝ:ߠ& 7D?y=w \>Y0U^W<e2 Vb@Y�o!ީe۷j}|/ÕWLuRfKN:bp??P( Z ]']rl?sFj d|Gk_~>nk(N~ ( 8!| x-ҲՋ~dI_S//I,p G=񆼳Rvޠw5c `P+(M^/;x g+I,ٰ톯j,oE#Pg~ 6Zb-oCAW+/߂lں#<??4~xzCii`Wzg$"Lˀ2X?n`+;Ż{p+O//F本}Qy r$_$cքq5�%7u@Za}kvv$6 nZ-:"Jq_P^*gFI 4¹{@^#&;]DKAĠizO}-n~atÜtຠ&# mX-ћA'#'@J䳀E( N> 'vZ̅}WMn{uQ~+`xk~觇6? �Oa*"7}0{^]@׼ (=Daw>9-Im{R'ONJ7-P�<nxշfմe$#vE`?^1 C7�\?4/6,0.9/񦻨5Ņ@- B_/G^Px cG!9k^U>8N�|^hMҵ)R=b�9,oگԁ*T&j8Mgz^ݻ�o(@׽1z|#i<!0\ uM<{ZH P,t8v/7O}5x@xKz ~A s7 0JL&(g-P�<t3gOϜ[}N\?آIkNP5+~^݃V_x㟋�xҗ<{:GWUG`(<]#U!LȻ� 0k^ ;T%e;3~-׿  .n�.t T7ف"U2S?KQ=i�XaD?Je'oH𒩜^ DE-�$7a2үW~ǛKJ,pm&ƒfochXpRVUl6&σO72ڢD3/GXo*Eb?)S{2uK�<(y$t d?].'K~kwel="SG<Ղ䕏z^�@;�p,| H%5-0yTxiAMzu/?@STيw#}rA,( 'L9m- v{ΏtX/Dwt/yq=P 8PagD| K,9S^ζ¤bqy1IEM:u�R^ i?�TPv_cS6NӡEwE@ּg@I- 5_㯂 <@6s|Ĉd~e;yE�F_ y^ `~Ad&JNABO%遮a%#O>7ĹEj7 {NpFmۃ UT-DLvko-Wjٻñ]ՊZ01_CmG<)fW%;q J!|wПRI #?=?X_\�Br +h~r$Pn*g[,�9�-[=r_̓ﴺݤ]_MvbnzҷyE�pmqٗ /ZA>�#WTob.FnX,y56 MÌ,8+? -U \~�OgPx$E̎eȋ}GؗV3qqsR&?yzLz[}\(BUJό W7n>#*^ڕ]*-DwP$B0QTɕ鱝cS2Pw`]DEر•7 ~|>Asۂ| ^ ?(yԗD~Gx$n!L"ZE @z@'ⷚ&\}կ/x}F(W(E- Du[<֯uȜ&5Dr X\}1@YEe]2կ_MpwH\o~d�yJyF]kd�gU?''NEI9yAb5_{#kBeưku?C[Lߥg,pÉտ^Kв[1' 氉aD$2a2C#{+i. z-eoGtOo@!|<FG# o*l[(M" %o<u`o9u&nV'�\('B?� QW|dԶP[Óۆ6&׽"K,p~˾'r/^"z+`d6j&xòHw~} MAos]xqh rʋڄk!�\K@a窧n�U?u_tZI^})2?8=_~.y. $t7kF6o)cp;5HfW 0H .*2=cPym,/J2_$?%|ӛ*/۝A&|ؼޔᑀ=.d[Bc#ЕU5_^[n S:LPo S*"Ǥd NT0v"+�]m=?SC[nz5^Z`FIm*D68^*7#Hvk^s\dj %aD^v+i n1|0~Z=  82;�<(i^V7LT%J *\�N@|Ì\UGZ6b j\r/,FW"Wpuo<]9]!�>"t ?KO||wkR3bз@|/WG@>z/eeE"i*WB[/U[vE� yбÇB`I $|;v?G*¿p"d|B_ eՠWa1z:; hҝO>W4>6&-N\c�,8waw=?C/!ƉO#|% Hok� Y3 !Fj'32}fa|[`_/!lؤ !R7j] )LS'Xau%[(د s2 N3I_$`Tz4ĎWiY1y >Wry R+5Koxf>t٫"ԂXwИ@Z* f >Q pKJDž<<,A)X^{dxAŰ~Sr%-Ox+l9o$KşEC�ƅ�)*>Pc<\n2V~-/� =w$IO4옦YDlPY,Zj0_e"nlvqg@Q.,q y+`u"N^E^Mjڸ%=oOg?N]٩&g- LH=u20߈0'�lzv~ %=9/o0}v{/8d8x<$J\eZԃyR )NS㺝kjsmOdb8fyr"SE?Y __XDV;zB2+* A(uV`G9] D6nyK7ehte")i):6<&+Q ʠ_ήO_RR:#e! a]p<)03˔ {Ͼ%gӷݷ'X8(9$@F8ņ)xǺfT:dy9xϕ*]K{a3r%c9L<OGAW±Dj#8U1?�2+o}<䐩<kA2ʫx##ۆ`/��WC[Bі <ǿݚ�pD2ʃJ�7!5aIf'$Em&; bS g?`!0!oO:ntn}7/Km>W,v#\[l?t!AXz\A\̛ք)RX9J<hi'K(1/ibEh5$ vL;<3SaB^krQW2K!VIxfю&F&4)ocw�Q7UimRO~xְuoɬLc}#7riЗ ':DaYswc1N풿 �dv;:?D(@~}ۿ>g%-?Eka=L< Ǡ:R=#d5X")/~ :<.BBż(*zdr堆ܧ4]Nʉ!e>%nhNkw�^/54#3uTj:/(7vZ q0 $;C1mMldl cXHBBB7+iծz/Wu~͛f^wWG/!dŶagVVW2Mu\nF;૫}@tv|eU z}:5/9%D:Jz᏾gٵL_�eUk yƦ$#P, Kd"q@!l=WnՓ:xNW>ɴlxL0vn�ʡQ[sRi.YfrcO{IYȌ)UÕy6sѢ:=Y/l| E>MPyG9U),cbc\ UyNgGA>CvzeQ.65ډAv9? ,YV)Z.2(/.Xg<VJǿo~G3|fMhoϭ`o[vd�hY W;)/~`lH˕p*ԋ'ݩ;=Nzt\Nߓ~-ݴ_]L2SRLy6+G6=H7r/79/<eeL䛩MFeΫaM-\gLw˧9ms2C @,Hwާ idH͖GAhL5FE&3UWp/I{RVvd&lt@Fu:2ܫI"11kWPgq'Hطٯ|W/sUGȀii Y" eXQ]sTO\)g.I!ŹD{T:_t" 4;/|/s'tz>U?<z@ E;fv ;L$L&g,&/7jTef+2Cq]Qnۙ j%oJ)nMvq 37%].$4Ye e"SYeCM_`nr%`+r}l@-,Oh< aѓNK'u_4rj(#6|!fd?y ~^dE԰X,'"+o@ )rW9yM~;Ki|U'^oMie_IiGd<&0y}<_3U6lಝR5 LNY3q,x˭?&ϕW~c0-ibAEփ37�i*6LJݵćJ* c.Άv^fW^6$ˤ!:*Lk'E։AHrMSmtE:�ix#ԛ[oMp ~ �8 #畬OY*40 JN<� } �b{(prǶtׇ0:G2\lgL#i dWzm3KUJ!2@O{OLf\-vUD@z[~B73ʥtIH)?}#gV"Wnm`y�FƦv<KvGW�x] MlL Ďb6Ѡ谡^.UՎ^|iʖxZ:᥯Ik_'BHsW|)}/Kh~<|_ @sTj"̀@'$]zZXijʴ/}kE YxP}m 큃[9By<x񃀼|I3gHX|捷3yt �ys͎rr234a27V$em4m=  kH?.<goaAeP&JfJTLҥ Ĩq`{ZeCê|ihهFVw5αj_|*lJr=bpՏVigc@kO԰,t( O<u*�<Ǥ#�@dS^ _VHiǝMW^2;ߌf+$Wʄv' %gVLL39 Y?YEnv̥_FN['lL{U[_D%jX'�gm~+J0R:rY�ZY|9� DX!Fj}¹6:Z)pd:yy棧\s_gD>t'&҆O,G89F<Z<2;&!@d@ g[MVn +OËw)sx_/~ / oJvEricJx9XOO=*7V91 /eտ1[pc9GvގUi',X6_( E>L Y|ۇ S>2r 3i88 z$(ԀT`).L9S&ov/3': x2ɇs{,T;+y~Z}wwV]iũgZD6_<;?Z}˛P?xJe#-= DnL;U]Q`BsW<į䃃pF~=~z[#~d_#䇉 ni ץނw 쫝racѩ\̎1Ȱ1iWEi߯�PƏ#j;" E9H457%I2G|4i T Dwrt'<V~ W"AWf BJt"N"u+rgl1=a]pj:ҊszӪADx'g%Go)dkc"&Q+[ȉ I|�a<'6Li[%psOg먎4OHOoz:~ݚ㶴0&PRSľHյMc9KϋI#r&9t8 "PF~B�4~+y> U^{�9 KG`G�CCIt9AFF?3Vyvgit3B`w͟GfQe6H{ iso0QlA|m][xʠC<??i9J=<#7|>O>$ՙس;¤`<6o :>=ȮNNvH�Dr+\N1!Q#!LVaՅ'&&߿ o<;�|EQɇatٲ^g6];B5F$�ߩ//O+q>FwGV팬Yx<ρo�.lrto^wv@dr*F�[\`Kf6Xj`vP!\}*de%+Q1DBYuI*3˪r)=j;Fp! *SiBĜMU̓y\5ߠ[_i 0=>n~4q26ߵ+ޅ7?"z7^M~bTq{SUYij' ӟ#>+WNXzjSGjKs4y+r7 :\p^{<_;r%e˖=nKnPQ!_jx+=:Ӯe6 83q+lT"bxӕEPMӠޑ:Qऀǣ\P2�'ߒŻ> XErFWL~|沪|4nM0sI||[.iJl3ͺ<FY4.4s򨼾G~ .@&c:{<ߒBEfnF›5ޔO@E +Ü=-PKiǥ/W<hye Q'Հb'ޛV֧&uA#Іe0IXaW܄L8<??_pHA>qX6G#l 0Ư= 2?z@6e9uet"ȍhÍ2^h irae]5HEI@`!oas:>yOۤIC=)�r qpxde@yx] .R 4X(Wfؾ5? O Gk$-ן*z}h[RR蠐'y>P[�OxSmt`c.@`6p-t6]a�x�==wHD%�>{ݳ`WP S'6;SyHN486+c1/+<Oܑn_I}H,"fh&|X'�ghA#8b[bC2Uy@mB?pPaJ[DG\phÓ2;&By<󱄡ˊOxxCwM~;*5@`V`bP7E&C;+@̏Az5g?O~+)!xpZA_v�Ke{6L~=MOAoӰO�@7=%o 6+CNpĐ+LL5.'@My? _%iNf^5pˍwve/@L�Q^s|#|ka -?/ 6{h4w+ nِnT&I�l㫁�-R  b?Ky΍oW?6BHWuCJ"ؠ6`c:vj~%%ΎMtPlt%݈P 8 QYG_~W/ ^?xՀlÁDOK6Ys@ޔ[4ɁSTlOc~9g]ȁ"0,?4 D ,?r oKu;{28I!~ƒ9.Ԏ3<! yh낧M/߉"$1Xttiz}U:7wu?'H/CP(uc$2ͬ;Us�qc,F[CE!M,d ͖+hS/w~U4R [�h.}o?ww2Ó\CR?YV OOM낞{2Ii]4s@&ۮ<}_O()E &�O)Q\!lx;zc\y١ e@ebNd"zI@q _)( A$:u4m  "8K}If·_v/W{2�y4,;^O8xqσ< `[u͘5^zA#}K/Grs~8?~ˊs g9>5y zh;.$5Ld(sTڿp@L�[ҵw7{ o^sg:@ ״xI)6F3 ܼ17w,.@`A!uN+خ2سhY}8c G>'1&\ottޒ6_ D*8 bp p!O:2Knj^2ɕ6s"ݡNMdE.TlmNj2z;Sv8�kG i?=,Q@bk$!VG?ޮ.Wk|Kdվ{�Z3`Qb"cp[1:pEx?/ѣͰ9hHԭoxW� pstM'wnObɟ?-^sYVke"�9mӆ:quS2J"-B !:]޲/>]֟Nm$R 0` 5{==;;]2G9CGM�w#oNtQK5o Oߐvg# �,k_Nm'jz�.E;C]6G`qm{)<rcL+Lefz|[ .གྷH"� Y5<6^gGlW|ÅT3WL[8[G <tyP,m!+'$7y 1 Ier0�t7?I;#m9H!1R 0TEjVMڮ ^՘v!c-ک*D茉| 0Zې{[h'`d g H;NTe ^ޜ߿hpY\`qυ7|W[{S[6Ֆ:U�O@ll'k 1/l#LBPޜ`&0xxCTzo?z]Y'4R 0-8KHb7aPWЙ@Ǟg*6;^{? '0DsY5A-JZHC ń")TXx_o l_V| #�u@`^u5;nKǕ:P]WONOV1)#-om-QsmQ'FV�|3<m?0`֠{`_zS=q?k/cai+�^sNV x_?$΃Un,66%{X]74$(�/BC5{X˄r3!ݻ7+x@Ѐ|^ i'> jv/WY2࣓啾]e[rtnh&'lTl?@,q|08Jہ)o :�eۃQ"ÿ$l i7Mxū6@E &�O-K4wv]{YuNSꁎ,+pD" /x&f\F$Y`1.^FhV m`ۛ K&N hK+ ;/z{:/O/HN9f �<eP/K}c~)kUG �MW)U�-NRL \#ppn&i/9Vn%цDƶJ 3IA6Liuפn%ƟMKMb1#`#lMǰ;ԫynhj�b9;PNd'eDN^SE_  ly.2Qɉ%S]\�,T3qɂ¤K; -qi'K[_tӟM@`n ⻤Oۛo{O\ԙe}vJwgg^T:Ll$RRK7e5` 0Hq-LU8Q'<۪0&]dE:;oVM?>=ͿV;^c6b0.'~:w={9bg� a ّV:R9IL*+ ֆd�N�W 5bB#"0_z9g3GSggF@`v '6m<9 ,1\;\`X& !ѳS֐eʙ2-|QlO2(7l};c۳[^sD/2[YID@VBV ͦ>>_JeA &�㒏rig?{ 2vN~}\#CFxLdϛlEAG�ۑٷ/ܳQ%[ LV!?ND@Z5&䁉ˁoi/7y?iRelD &�G Rw쑴}yn=;8:v]@ @es^~2qc(bӁ}%M%QՔeUd#0S{Ͱ,^AAl£F=6 \0g۵W]N{ssiݳ=} @#�FЇ-:_tN]/K] Eǎ;J譳9|9̓fJHcTj[l*QPQ#` ͮ/ Pk{{Kȉ�yk BY1 m~X)vi _OU<<(E@ c=&,=Sکqޖeώ2ҩaS= `0h#s�f'zl+|pq? >0%ÕBƴ e-_{5j:^Iǜ~#@L�mx?+1 )I2GC ؕj›*eU%*C&,ҷEvK@t`8$ 4蹁DVӣ|1=LO)&R phbph|=W|7wZnǾ9{)юWeWRV k餀N(}u:l^:2/s^AsLmt,�p�n$$8XV� k3WJ-ǯíkN't4@U(E@L�!ɴzN?kW$kgWCɄ��vX?1ўNV @rDq n8W' 2xj`;v,ٷQ@;#82RY5<?}:Ⱦ`ld۝ߚ3ϒ3^Cit*xF ǒƷlL/>蘖˨l|_&!ӫxT&5NPQiQ$Ĵd"#k*9jvuO+er[@ yb,)"OS?9/Wlژ{ӽt&?�6*bPa$D{7.Vt(8)_C# s@(3[ 2tPƆhOoʼ>@`>}RgI&=`. ҈'MHSb6H{;dRyěZP_>{^z$uMˎY(21XG{ҮsoߍW}21.cGD@|OwvIrhO?&}ۘ %Ve<nt7W(^&+{> BrXlC|w2|�N]?@z&x M@L�Q7_ۃ''nAqS~mGPƍU<yф;ˆD}3Y `hiʥrd9|eE@??Sl>*@9?1_v~pz?N;/ BGZ"`24|KKHggnW<ؙ [ʍO Fg\*,$YJ*2@`A"`&~'Lg2pi)/|S!7ɡYo2ߺ%m|J%pFLH<`' ЛJv:pMސ&{$H2aYzϧYҾiB ^kQąOMK*<2 *X=7۸PD�އ,u݌CFD@xAAcOhOɫ%b'od3:Xsi/}^=t .He<\`/)WRa=NK-;Ӿovb��*>IDATNny~x%O?;g�v.4zi#vҎE*b^*;*?P<YITZm)XX۶G3P6ff <h'W0cPF޾=`:N׼>!mؐJ#+W_t^x+Ӛx <DH2 e˖4=kG:|[f\TWy,w}h}+{g<O:#sOUǬazƲd 7ňu;7H=? m(�<D_6Ylel|9gR ӎnHߛ;twD8;_9ZER ޡc!L�Ĺ$~x썯+Ml~Eu7TyI%yteN#ey,:_6Kک@xMyY<>1FSAC{-qM^|Rx/ 2٪�9F>R.46& a^(9>ݰ^>S"[u)Bp^,ԉN1=_ُoڐ&ЛP`8> f= 0}8Oz6È9y=ɗ2 Ya2,U,Ack\:QD<�`MH1?g< ʙ~O]yyڌ#-[slZwq<K^>I@ǻ �v/q W;{>&1Oa-2`q2Ae: <#l'>d;As0'fWwbN*r5Ȩa<[-�q,5윰s79i-]QZiϕͮ W9uYPorդܔvceҫ8S' 9무5g<->_A" þ'>0J2彉qqk~"ǧ mim𷤩'옮L6{$̘x4x" lLS8Жg("+RC{bsB`oK&֒,B,mu܇,\f5<K9HKG;e~&ב9|,zs_digbbpFZqܺri '2 ~t]4,�&MsZSSS *vgzzz{vm`.2h!nO/[)kcBR[8w&5wFn"c9 .3 ô[;9x lٲ0yQ=hg�hc;?ӐPv`N{1H@ ph<kJ5Gc6rB 2B/wI/-@/lCc$>LȔ3ߔO[9 ?k|`&oX&GX!k|誕bby`!*-x{I>:Ӷv!%6aXαsX.>'ͣhf >םi95u@A -3eYa@*ZΏqmɋ<۩AD 2g; s)ډlmp; K.2rЉ/m@-;@8R,Emi*vY)j 3AqSFIVkר.YIU~WleG*w*B2#9KvC1J\oW&hX/d!L]kCᶓ}ڻÙEhʠYQ-L|&cjjX-{+9d\BHծQ!6_ TM 1zX-1.W_3a-dK+Nێa} ΋o v <h9i~ LV*�xN锲@yc#ap~o7wa4U&ZrM*-&lWIZG88T 63y,|^BlŞ'2G!aN|Ǧ�+=c2YʉDHWW*6ED  vNYlLgv.WPL1;Ge Fm4uq orgcq v%e,+r=]b -X 7'W7LONAfPJQ5<3\'pě=oܹgNh3 ?0<@Ad C& LѱFrNÈ͓,Mo2fDO]S`>2Q&b%z*UFʑzeЮ]S| =vlYLV6;+!?p]$髈R9Ud2eXhIݞkiLMa潽kZD 9nPd9i-6g M)]ݲ&rX0O�<F3'L}$j5ě+s qѾB�[`L8f<[9_ɋv !)aIpފcNjʔ̾Ϋbe13Ch$՛jvg݆�H.Q"`&ty;+gӉe+d\k˫6}/ԈuU9)MU/HlC4V97\V@orx+^v?F<V&�j~XP&aA3=ͺ�m8Hg! sqKD )g5Ժarm0eӯd=JIs IRى cV&zUvA `,AlN^>؈xDQJ*_XˈfK;&l|>p6dI$ero)3��nH"ԢI]- @,km0Пm?s&xAp.K-a YfԿ8U WD\0iYg3JaL&48ڙJdVR,09}m8Jھ[$;7YL17;)cd2cr1DʠŨuRѪ=HIRdr\;03q?+с^լAԜ}%L?V6i'�&ֶKWAZΙ|8PYcU [;[o֫)ɁUQL.\f*lى/V-f*moF@1#2^}7IJ>Mfe]%oQo2)m66M:pɗ} yY> ?`K"`a�,pjto]#W]4 8oLj[7rj+4 x;_Qqpgls8۞d ~umc -Oa#UVA0@ 0ymOrt!E"m3lXL3_Xdԙ-si e&7 idImb&�M \`s߱4L#NqfDo|l"0{X(RJdr`Ld3ـMy^d73+;DlĸϹ+JW~{/:6wp/}w?Sn/ qXmf'!k~Y%19eMymˏc)t7*btw/8O*4sFT,uCq@|[0ރio9e.>[we {ӐW]fpL&4;?Sf/~v쬡IlsquI~ve>]3&Gz{&g崳IўkmDe)ى mK@;щzLO\6u[‹aaڤ]Ibp(3qn||ǥ?pmxOӋ魆4GGs-nT, }-\lhvM "k*9KLk�d>~AU?3x={?O7miOSCh1x7Mf/E�:ob_z": MMf T54~sWFMN4cQdj6Y:VS HZ,BeuoI~Ŋi- @ �ԗH۶Ţ]xdU-ӫQa9(mJF]mn@[ef23z_AcXrz؝>[]|.,r�g?-˙}CRͯ d@ ̀!M_'*b٭kqstW+Oi`iKm2{>+� q�\njTK1�Aғ'ˀ>lЭF.Sz ҇<AǴ]ߌA{Po$ӷjёqon8ib.Mw1 v {"m@cl�3U騙b??V9JIz3fC,#Mjeͫ)A`_я`/_E 2x}Mע.B�buP5}# K1.~eOfL<' M O%m\V֑8qv9yh$3E4 6;�WQ;I>|Tf>70O?X 3OCE%/p̀v8.m?um˃_|�sM#;miz %LL@ ,@fM7O{<|?P(kg0~Tqk<>77P�& Д"A`.〒חu<Pli+뿎䧖xva*@{m@ aG`*8n FuþoGZQH }mكUGvjbF @ X%K}{ﵸ,xѢ�+/QVp|6]bu͢1+ C�-fVX4#,fm/ay_웺tvj0\Q⇁ 0=97b R C/Y=`KO O^,l>9Li;4ۧG0G&'q+`%@ C�~ŷ92`(쥯 gq{wǙydsOm@ V`LBD܉;wŴDg? _B&-8,<ѫo{ҿg�|% Mc+mЅ,�/O?ww0w/}]�bbp78; nI=L&'cM@ Xw݅g`j]+L�E#^cX)/sMg+w4Vx;`.u@ Xp`; ?ߖb5R滘dzu.ýw FӠgɉ^@ B>`qߟk}ރWlO�xyűc &f;pp_@ 0˜Y.ue`z_ۿ. Etw m>vI�~K`b3 z@ vas<A/Yvʯ? ZYlf|؇mZ<H4yj@! @)GO—WP,Hܷo ajL�x77xۑJF#`j�VO@ }OO~͏1p?M7y%5 +7l]GKHL/A`32 z6@`UW1矺#_?o|QO"f?;[}hXc]e!wt5a9 2 fjCQD `h{7+l9~.7I+cKn>Q8 / +ba +>)xĪ@'@  \d|cjx^\p7??yb9e?e>6lA:qN"$V%VFGH/pE-3Ł"K)N] e.~;Uy!JQԅx4v*DkT7c(U*`Ŷh]d%k2EdGnGFU]IDW?jTVT~0튃k$l!=v܉|rNS~25? Q۱1ry9>O(`>c]1َ_,U.}3/ӵV(WS18d[o"uUb"y�96Z1ULV`RъaUmEiV 4Ťݮ|-(ﳁr _)Q$S]5RE ]D|]ËuWڛF<:>%@EY!]%T Fs%k\F\auA ,Ϟ W[zDŽ4*Uݽt�g$o]Ͷpfsc]q6MˢU#[^,0賁fFB3-H#}#Hq-([؛j"ފRNzvy&n/q0A#_z#FrAF0Հ>V!HWQ Uge9GYP̥u4鋓]∬"+:u+\ZhdIZAzW4s=jO=+l85*$qETa :QJSũb7Vn ^s1U(5oQ:Q! Aǀt ^ꑭZ5d ',d!e(.-ʆ|5;jeubR,v af!^|OzXDL�\@\~ٿwC̕FEsiSجDDLo HH1j7g1rlŚb8GYPE0mqDVwhv]! 1t&9;.5NlE/vq>.`;C qnƁɝuۮf\N3]եQc٨KTVkl+7g r֘*(c@:HV_2eCT~BB^TН 5yvȲ \]P 9lÀމ ⦾yG14-}$&�-GW?_wGFM弶xu C4;7BY3pYO\ZO9ud8";t]!DeIZBW  yPJ߬]9dK 5DZ[@κmWm.f왊(ılԥTqz539H\kLJ[NTB1 WzdVc ٯ YzK!*l?!/*_DM΅<;dY].,& JAK#{&"`U@OWoCQK wQ>+pYXF*D [dr4kɳK_ (q_lGduQUDQi+?)qm1dg f/igeO�Ӛ1dZ4-Iw֍drjƞ.BF]*MݬZc[9cT.x͵TԼED,q.xEGj5֐*H(EԄ3෯v`V<W4:i/xgglM/Ԃ@bE]xwRx]W2 9n _St+b[+yi i"gA=3P8٢--VfSTb97g]Ϛ,^5# >u�5cZD5i[Ԍ=SU]8֑T*NYoƶrs \kBy҉ Y;\Tlj!U8a! Q/CqiQ6D'4 E勨 �]g,31~w1%"]g+9p`S.1`�0Me>%[jhMYj!D W\4,yjk - ]R a3h<([ݳtO)f·iԳ,QkFH-BpdMATVNBa&|l-7U.tl)Ԕo YZ Mu*/!=JuƎO57,+2JI]#+JY7>M& )>})+T)S%WaV21j+zŔNaa(E&C>gFD:4184F5 `:~-?Cᾦ[6ƚf‹UԦ;*xq+^8Mik,6ZG d)3M? _aH*ԪƂxGUdME5q4rz،J]h|4j \éRLqԢWqrUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVW8b5?05>YQd1/t/oYё18<|fg_IsKSکST$T2u!XPJɡ*#X5>{sŇq@M?ULhVZr7Gs{T>IQOFU~"Ea[}4jC !e Lm~ԢW6 rUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVA~3*ɢ/5eF^,uod?C j} nNheBuSiԮeW$T2!XP_+Hj,N9â@M?ULhVZr7Gs{T>IQOFU~"Ea[}4jC !e Lm~ԢW6 rUU~Dsݤ.ED"~u3th P"Ds94˞cP �u?'w}u>JSVA~3*ɢ/5xm0h9pCVEv(ks 㜑M#wQ]2S4 ałZ5D_d۝->,P> (P̈́fE%Wl~|A>Z1GTkjT_'XQG6:jp*>^p>vNZL-ze3h WUWL>MRJ4X,W9CGj�-L>C0Fi PsrGا\_ê4e7J,r6 PW:k{ѯxX#8{�O[=O <9xcq|-/o+}eT1+ 45L;[~ܺgfP[/+5~*^LjL[|T+U -|!jhUl2Qx�@s7)6(.{2>$̑#glӇ;Ԕ~`){p~M}@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O-:6N����IENDB`ic05�� tARGB�yx�{y����ss��������E<��������������������������**��ss��ss��ss��HH��݊�݁�rq�sr��}�z��!��Ŀ�� �� Ļ ��Ʒ��߁ͫ�ɹ±�Ͳ�̽ٯ�ټ̷̱�ջ˴� ǀľ� ΀ÿˡ�غ̸ÿˀ�ŀ�ѽ��Ё ̸Ɂ ͳ��DŽ ζ̄Ǧ��ǃ ȺƒǦ��ǁ˻ǁ!Ǧ����u�y��PWWUSPOLJGECA?<:7530/,+'!�Ultrpmkhfeb`][YVTROMJHFDB?4�]usqomkhfeb`][YVTROMJHFCA><"�!Ⱥfihfeb`][YVTROMJGAt��deeb`][YVTROLJ�� wcb`][YVTRNi�� a`][YVTQy ��ģn_][YVSb�dvspwҁ\][YVQOA>=)�ewtrph\[YUwCDB?=)�ewtrpmg[[YT޼EFDB?=)�ewtrpmjW[YQfGFDB?=)�ewtrpmkb_[YYEHFDB?=)�ewtrpmkdiZXa<?DDB?=)�ewtrpmkdV7.D&0)�ewtrpmk^ƀ:0-4 �ewtrpfO\00-(C �ewtkUGA20-) �euaNIDO30-*FҀt �_WOKN430-*%  �puʁ @630-*'/ ȋaMM��DŽ P8630-*'$>ÄǦ��ǃ I;9630-*'$!1Ǧ��ǁr=><9630-*'$!_!Ǧ��|YCCA><9630-*'$!3`v�KROLIGDA><9630-*'$! �JMPMJGDA><9630-*'$! �GGECA>;87420-*(%# ��*2544310//-,++)'%%$#" �2HRRPONMLJJHGFECBA@?><;:97.�8SQQOONMLJJHGFECBA@?><;:866�!òyJMMLJJHGFECBA@?>;7n��KKJJHGFECBA@??�� fIJHGFECBA?`�� uIHGFECB@q ��Ė\GGFECAV}�ASQP_΁EGFEC?F867$�ATRRPKsFFEBl8:977$�ATRRPOKFFEB޺:;:977$�ATRRPOMtCFE?_;;:977$�ATRRPONINFEJ:<;:977$�ATRRPONJZEDT.28:977$�ATRRPONJD3  *#�ATRRPONCĀ#! �ATRRPF-F8 �ATRI0! �AR:%"x:7Ҁn�:.%#-�[]kȁ & Lj\II��DŽ 91„Ǧ��ǃ /#Ǧ��ǁ` W!Ǧ��~j=  *[r~�#%%$"!  �$#%$"!  �!  �ic10�K}PNG  ��� IHDR���������+���sRGB���@�IDATx{mU7<շ{ow#BI6 [q C�IE*E\.r;I*T!N BBJM8A2RXA7Vkg9szsNsVk11\k`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8&'y/NpՓ1k{fqfrɘL^% ,9M}4(yU@ex0JY3d.ԨrJY45B<!fHN +W9ypt̩H;lph6N;5LK#VYODxJgD]ü̑ UV*M4̙ c\p)\ hTŏΆz4&Ep4۱iH7sdCIKq]f±6c?}~Eq0 mK^{*}XpK$5PqrK^MޫpN>ةIȠ(=؇6 n*۴ޢcބfB/3|2^_4f.�pݟ'nk>~5L_Oooh'9Cޣ8hBȫ y`訳!pѦFSrMjtFa`4C*԰rFݨΜn9U1iΜq-&iit*)ݱhO鬗HQ^4yڸ`ZB?(Vfj٪6ũ/uRFd@YK gCU=][]D GX#%ӭ3Y6L~IeV)|ZSN%-W8Z&TҔE MC%)*ⅣƐ>eSê[ u&ᕕ[j^uNMGeFq->MA0t9kg7|ೋŧ&fO=vk5f'bNJ�.� ;9;ݽ0ŷO&o'*ݵwN_lċU2\=`訳!2 `f\Q\ySZ'8ijx0B(͐ $a!35\Q73fNUFa3gFKuᨩ&FgZ"zJw, S:%RoyrU %sEa֊àF59N'Ewb˥N9=ۈl(k^YlG3kH(616rҴtdbu&ˆ֏6I*<#Rkʩ z VڤJRh)}u$TҒ^EpǵL^{*}XpK$5PqrK^MޫpN>ةIȠ(=؇I0.g↤*f2 zN[/r�#L��𝃩\_71=w>.vg]cK^P F!pT2Nf\Q]\ySZ'8ijx0B(͐ $a!35\Q73fNUFa3gFKuᨩ&FgZ"zJw, S:%RoyrM6.O,9 Z.ᢇMqKsz06PRPUfdVQlbl iHtL SmpUx G>_֔SI#AFVI94pBS8PIʩ%x1kTvݩIjxe%r=W#v|SAQz\ {;k:a ] ISu`Vg̽N8"pF$g~dwoL]nnJt;e{T@ҺXM0 IㅃT2 `f\Q\ySZ'8ijx0B(͐ $a!35\Q73fNUFa3gFKuᨩ&FgZ"zJw, S:%RoyrU %sEa֊àF59N'Ewb˥N9=ۈl(k^YlG3kH(616rҴtdbu&ˆ֏6I*<#Rkʩ z VڤJRh)}u$TҒ^EpǵL^{*}XpK$5PqrK^MޫpN>ةIȠ(=؇I0.g↤P5}_^]%; K��,t~-<o3?h&-˝8j !Qe8hBȫ y`訳!pѦFSrMjtFa`4C*԰rFݨΜn9U1iΜq-&iit*)ݱhO鬗HQ^4yڸ`ZB?(Vfj٪6ũ/uRFd@YK gCU=][]D GX#%ӭ3Y6L~IeV)|ZSN%-W8Z&TҔE MC%)*ⅣƐ>eSê[ u&ᕕ[j^uNMGeFq->MA0t9k7$MՅ$,vDq_}&} xp'vMg_|wwhϜGjZ74\d܋U20`P0!2C6B<:f\Q\ySZ'8ijx0B(͐ $a!35\Q73fNUFa3gFKuᨩ&FgZ"zJw, S:%RoyrM6.O,9 Z.ᢇMqKsz06PRPUfdVQlbl iHtL SmpUx G>_֔SI#AFVI94pBS8PIʩ%x1kTvݩIjxe%r=W#v|SAQz\ {;k:a ] ISu(k$ q@6,|C5'/, [[#mvIQtI[+W9 y (3O F" (3i#ănlEUNɕ75uaQ# @r2SUNuj8saTlj8saTXjbt%tI<^"'Gyii ʒZqe.zI9g ce-++ UhFvmu)&bQNLLd0Q& YpZjM94Do|^jU[SIS -4JZҫCkOn)`םWV*.CnIЫ{5n;5Iǵ6]ܐ4UFѲ)DW~^^8<�pxlQ9#]{L?D'ҝͬzZʉg!Qea4`CUe<mx0t͐ hS)fNp:# 0 `P0!HBfjXInT gN7̜VY g8jQSMδD:bX@4tK(/<m\0-VYrZ+3]l]Ewԗ:)l#alzeȮ."@,Iґ֙,Z?$2|RK)F荖+Zjkr*iJᢅpաSIKzWcH2yaU-SJBz- z5yFB:`v`&u BQH ZI ~'f7$"\�8D(mwƻ_>}Wמ49Qlr ː20`P0!2C6B<:f\Q\ySZ'8ijx0B(͐ $a!35\Q73fNUFa3gFKuᨩ&FgZ"zJw, S:%RoyrM6.O,9 Z.ᢇMqKsz06PRPUfdVQlbl iHtL SmpUx G>_֔SI#AFVI94pBS8PIʩ%x1kTvݩIjxe%r=W#v|SAQz\ {;k:a ] ISu(k$ qJ goRt+Qp`.շ=Y9ɂQVJCjT7c*'!Qea4`CUe<mx0t͐ hS)fNp:# 0 `P0!HBfjXInT gN7̜VY g8jQSMδD:bX@4tK(/<m\0-VYrZ+3]l]Ewԗ:)l#alzeȮ."@,Iґ֙,Z?$2|RK)F荖+Zjkr*iJᢅpաSIKzWcH2yaU-SJBz- z5yFB:`v`&u BQH Z>Wx߭OδJ%@`\� 1>M&v[*ya uR3Uө[ xOJik9/ v\`dWapBHSfhg9aFU)AXG2ē %]UFO<*jmDQҠ FR:4(q5派ZխEͯVau;PTۓ%fDJS致]Re5g]ˮjVgln{y8R+|*Y!\ي$T\^#mA>8Jj$>$yi؃[5kԧUi֩N[L֋|ܹ)u(gL;{Vk;nEE;(o|Mc`Y_{{~ 3VB'fs'ߓ;`|'u,@dbںY[]3++ꪙ kQ-Z_%F3ZIRÝh`麵خݎ-鳡w F(+{[S[ sZ6sVRQE׈3X?Xnb BhϥQd{sQ0f}Hm%isIJMΥ'<HS'\4m끺jl&wʥȶFH0:vHNדՔ5al Gs3T"̎Eߑ"-UQS >k\l[[[6u˼|{{}kIf$X{f￵y ,\�X+AG*s~zv|HCjT7+ i67*5ܮÅD-h%DԏM׭v5vlL [`0~GYCLjoeJpղK%2*:N.Y#y*:LK(2-M&FD4Rs}\&lӲsIT Mz-:G:ɝrilC<mQ(jh$}5=fxM[�E (H2~wŽHKUq614Gz};W6_u|. C)yhU&:}bͯT*SQcfv'B4u ;`4F\__3O1gN6e%Q^Y"ьVp'=ا~ln-Acel(:;eV{+V\M\*TTqrE!Si&9`Z=Fqnn45 &ƠpK5eKO5xΧjOhuoQ9:P٨MK[g#mB`uTCÝ')5#k/Jf@E*P#-EZ}֠>ʬޢ|7^IEYъ``Ɗ'/.&{S !$ �#A|mO^bO?տR/4F3sgYYbYk ѷ#hF+IhS?6]ՠ۱2}6nHee{2}uj+aV˦.\*8"g4v^g0-ٞK8L7mMcHm%isIJMΥ'<HS'\4m끺jl&wʥȶFH0:vHNדՔ5al Gs3T"̎Eߑ"-UQS >k\TeJ'aަ /?z%ŗowDe*}SӜfO KA v/ҫ ﰺR9w9w,}a_veS.nۑ *1JDԏM׭v5vlL [`0~GYCLjoeJpղK%2*:N.Y#y*:LK(2-M&FD4Rs}\&lӲsIT Mz-:G:ɝrilC<mQ(jh$}5=fxM[�E (H2~wŽHKUq614GI8ł}k3/ŀ/LN٢Zu?j @7D_}7O?O_:^n* }a ̅/B*Q 8�P.u">C*1JJ4܉F[jb>Jy`F:0We?Jje.Utu\DFHTuN3lϥQd[6MF1h6DMb٦eғd .6@[Tuq5Tu6j;HxdzP$u{;$pIjJ{FH0R*PlefG"H{})lbn5h.2kp2H΀{Evs5:JԠ (no}*`@O=jO$LO|!9s<cQsԩ/@�@�@�@�@ ;XG1WNm[\o7o}|{pm{H �{Pkod,o+j"dd:tYob]D6f2*1JJ5܉F[jb>Jy`V֩Z-TR+s㯋Q<nb %siMQ`i  >m.QXiٹ$Y|zM}=PUC\ UNu6!ٶ( F]I54zҞQ3R&-|Thn [bQ;^_8j g Z$ jo?_ZyA_cH ?Y|oG_R^ P BCb_.ÚNŋf>/ [Sf&D };ʁJf;>cuk] [,gC)!4QV(ӷ[YjlRI̥X?Xnb BhϥQd{sQ0f}Hm%isIJMΥ'<HS'\4m끺jl&wʥȶFH0:vHNדՔ5al Gs3T"̎Eߑ"-UQS >k\TeJ'dPS}ww_6/R*h[v'{?woM�4`ywo7gs '0Ξ3tՐ  � � � �Ǔlj?{|Kջw^E[y[o^m}|kF;IR$#<^`V(]Hqѫ&_de&= $ aId@%F3Ze2c=Z {g FڨNE,o#UjC aߢMƪ>nFΥ3йIs Z,ubjk5hIZŁ՗I'jOX֣\tqv r2J<y.؈I54fEjJ>AR6+Gt;BiT*z~co!)inO8[N횒*3I8mNe~_4⋝ 9S~~rkg �@ \tge'w"ђ*+X_/{lnn1-*YR:YO#_x`>Fh ]㴲�frwHj"Չ WX mᨦe}HOqnKW6F GXAJv4KW.#p]8te7t: -TLtaPx Gʼn7TJ$8&$9}Hu蒬/cENtCIRZ= `dђ^'dUݣ `d~="E0zB�]x˖= !P"3W9g}ʡ-5^ԹԹZ$V8^gQTfI/zHbnͲw|z6=*4|oJYdsWz{RKʝ!'s&g۷O6r#o}tWhq]o}܉D+Ľ+fsأ/ HrzvYju&:>EXtUh,did4m[+JjYpd 2l w∃hIAZWMwPKA MGEPuD mpɅp&n(VݛQ `S845.NɠR"qʼn7$ɍmN5Ũku�RzM*$) (QjGLnBtG�.!!$^ЫK.lQ7m1zOm Q:2;u1j}sV%re 0g.Zf:'9V*`s{j5K@?O.zsG̩_[;~>ɟʜ~>9@�@I�;&@�N:>ޥmZߧ]S{& ߘ/qӗ.hK soZ]?C@��{qkoOO'JG2_1O<yʕ?# t>[J'e|#{8<w:6@`9|A_.E]N?o.nn/ݺevܯPe I~@CxK.cm~6,}k~4sINg儿)F�@�@`\�B �wl%�<w o$uSi 7/ӿ},|3}A1' �\v~_j{챃?MnB%0_/fy � �\�( �w9|u;9 ߸pY[3_ys??_7L?O>Ar  =,m*ht s%?#<Щ�gylz9` � p`c�(e[`2I-Z�_�T$k�pnyS#>F_2~ ~7|e?}SkT@�@ # � A�@`OB�?I:}3/  &O>wНs–z,0lss7C?엺^j{?l.'zy<c � pL`{L(L@xwGB�ğfDzk91_y.E}?/cI`c'|~/a?_x⅋BO_gT� J�7}!?ߝ0_=}ڜ[_3{Y,F/|=Oqu~b{Fg#Xcy?̛h+1.ө3k4db/ÉAD �X~=j$�8B�4'<}/cgΘϽҲ?89ӏ|bg'9 ۏ �=$Gi3/-Ou .|Ow{o @�N6slzz�'m~ON'Νr:No?yy#N`#y'{z|3gfa2$WhE~Xi_Ő  � p�p� ��ic^wޠ~tx v߳oR]� ǃA|6V~2a_MZ٥kH����#K`|ŀ, = \ryl{{0Uv&~oRY4߸n:ߟsY}]\zH� p�Azٝv~!�wu_[M?qP8;.xѷx7oӖwo⿥) �Q$0(n �] _?GkOG۞}=@V}OL'}kn0o~y?"��vmx 3p�=*w\w|0j׈[_ '셥#a'q{}sc>o_W~߄.,foloA�@�@�@�@�">EnGhk6trfw{ K"#|猝(cO>yolߒ � � � � KW^4t`eN�8GvzOkxIsjԒ$&/Ii � #�<ڂ�X~:5s/ޠ_iů-s!޴hyˋų̊D?ث̹s?1*z�x9|sF�8sǺG[M 9K_?^ːo}}swl2G�>p3ڻ3#xll  [nrܐ � � � � �^{K~ൗ/|itcj5: G�p$;^RNi^'K\C,qA�@HXbɀ�$*ŗّY7͝mPeb?YAxSNg<?;T/:'xb�@_`b  � � � � 8�1 .7no%cNCQ" �G9OL3U}cHO/ ) � � � � pp˩׮-'ZcA#�G<>>J/K.#BnbO?@�@q� �!>7/G/c^sg$ɷ?ޗF&B~DlcA'?M95z_VKf����8,;T?zܜ:[L0A` aL�5سOY1e~5}leLޘA  � � � � 0� ft^O>i|?g@��½0b{^AGXeُif: � � � � �e{Ka^ȕ#xpfᄡPʵ1i+WbPŀ%'n�����}MG˷<9C #S �GN:󙳓 ճNa -����<H7c? OGGN|lΌL|ic;lnb/cw @�@�@�@�@2pisⅱlI?X�`\?L)]{O%,p ����8{o̟w GysP6E�.� C(:Tue˗ʨL1Q ����C`wʊy#Wn|)6` <jz )-^YY5/]NS A � � � �G%M�VL~Ǎ<80=O��Cann_yz)������c[>:z"o' ,\�8w{kVjΝQ ���Q%](6Mb켞tќ^]5}:sQw҃>wӧM?=8\ӏ`����xh?-||g7W=�.�<N,&ښ9{lH{?zګ&0@�@�@�@�@�^1yߘ?MtIt^1fY,[Ԇ<Jg|ː'h.^/'IWJl 4 � � � � Jx2v, u􅀣̨_q�#o6w'&{ B_Io7Ύ?˗#y�! Y盃1���� %0xS4R>.Yhŋf/F,lOixDH@0ۡ"?1TȘo_|\pq7=eeXv]ca4���tJl_ h]޸ "_x祎{1<1-HI�� pd~w>uwN N z%7F!;l&  � � � P߉ C騟_<zfsZ >/P p`}H>L~hgϜ5Зo 7NH5-}̶@Ga~���t4t6Ka4dx/{տ}Ԩ��0�>$K=gn'CiC 5/4\8l}qMP@�@�@�@ W@/c@n?e ^{Ҡ21:zِRN#CJF} &ޥg)LPeuulnJѻOd:I)RYw]8y>}<bP���{Wt2=p뛺4пs} $_#:Nsw>T\e*غ<;;\Pw?C_@_xw}>ǭfA}ê,mՐ  � � �rTk}#ʃGNa|2vJG6\ؗ|>$aj? 4BбK񠦷5<��@�IDAToLz?$v8}Rߜ9{VɜOm5羮u=q>: � � � p b@y#=�蠸v8)`<nspt}t`->Y5\<Uq`cL,N}7=7%mllU-<BCk[vj<vʉhʢ ���<P~7qVw[sHe֭frVgV΋Y鵵wzXV& hC�d23X&!'kQ~):_0grR_rdo39ǘD9N ΰOѨ$2ҲːzЀ���+A@]ǷbuےXm[k5sw8мq;ͩ=N%G8Z=h[5N)x%5sgBY 9\Dt_*9w}gxN}b 6ksYr@�@�@�@ 1J^Ǎ<<VVrf-]롵SSȟx'dlrMNŲx<j{61sgfeY[[7ĭKuL5ƦI+PnUno/E֪H#j du?<C � � �c8d:I>,27Y1TFWUp|5snu-jUs?^6713OUcίʺN'ujq:@<8;$,<OWN`!ʴx|~D6k;S+*.Q GCl"]H XOUEL-^@:/H#^SM5]{W6,[ãnq_ݻwxE(A�@�@�@f2XzlZ&zwl%ͰKP]-=ǧ$ɯ:{ڼGs~y'EsOHǵew}�0! ڮ\a<,MGyӗ3lؓV\է\UuT@MSƋPˋ 4kt׼H`_0�gU rvİ���@% (Kh;i GnEE:M0}jcWZt/�Kĸ>}2D1.�{++qMoXGY~?olmkB!vں˪jREer! Ouc[\d':fm_/HMYk8P pƕdXXϛZ2=^ 5 � � �'d" HO y=U(=IvJ~_-ǒXu`&SU �}UZ~J|@Kۜc/M<ڢkq2�PRFƲn'?kDRLJ6ĔܔLJC+ڊ˥4ٜ*:qdvඌ5?ε]ZI8 >.�uE*H :A ^нj}BC � � �=}\(..\81Cǻ1[$h4I_}k�%Po]?B~-|s҇r&<~Nò�0<0[y\Ʋ<e|>ee j;u{v$>.tI r^*.dMU@5HBI&A0DyAqO9͋M`ņɶ\�љlǬP(  ,���n8["Ǖ)Ydʺc+?<ߎ3>-يj:阶 ˍjȹ:Ǟj8~)E@um埜7o5fW),SaEl:cn$O`@8 ڪy>1;6y:&<V>n5u[.9 ;v.{C%G̊E,ZzwXp>MXv0c/  ]}.e.H.ͷ]  � � p S@o=iPTՎĒW[y5cWRg]˭ Urc�ªVFK9WN2<l>dcto&Z}EzqN}6}a/Cfصu,?/dt#5JB%g'H!F*)+N%M֔%UkSSn:wc]Ki ZM$sn崪XZm>N@|L0辕kwg"  � � pT(t&ojWd}S%\Ngog,\P]W>6lSyv',9<I`kMvRfM깑¸�oKb˚s浶%f}tM3=-~5z= q2*kFj^URcj8 ѝ,ivdaJE۰Ndn2vQWEN/ S*`Z\Yd; hDH..lڱ@%m~!���O@n/5.( yL&5%$M),JRIߴT I^ѭHAO暆Z(G>|uNpG^oj&MZ5 6kvҜx?.�! "s?3􌺡O#m_][Gvqn�qI+yE^q9q(NNHJ' %7Ȱ978#kC]Uj G-i1<]|Pֳ(. ^aÕ̜QrtxLt]]6��+K@>/չ>N,oLܪǵ\UUǵduh5 שmFmj}7W"Z6g,I*.�I/ژ;5l ]JlYF<2�.�tXk1m^|'}7eƉ qqĘY˳X v2{J`ˤ%ϮD6̻v5;hI ,̔vs{vNkÅK;;dR笣<[|?(Yo�=o2,ZA�@�@�zT$9R $U~/v-?eMGqls0'7$ɜ8wPJsq*/�w/Z,Rϙ5R`%ρ;co_;š$ uh;/˵'r �{969b$~E?d"O"֭ �q9SI܀/�;甶]bX<*7P6…p [D#K% kyzNXmvnedJs!FA,}FyB!2K]5+ʐˇv@7r1vQE4LK@�@�@`5w*d9v5p,pٱV DKwI⍹IRY8eVKjZk٧".]U&`]yW[b-(r*}vs1=^A^]#,O>JaҲfX�.�,R--cÚN>)}6?_Y]�pօ+z_CUřțrٜJ9hWi' ˦ P圩7]E')-"򇹱MA6Yēk"}rAs+=7[G9Bw3L/a@ۤji{2U���~_)r, 8hݪ늭1'HZ:s.QlF:O|zelF=[yUD|*s:;Ͼ%~NJHF9mu2 +k`H��ڠjж:FtYLɕE~2-~Nb;$({:zA�-DUqMok;d^Tkɜ@2y:;r>O$6?wM> -xnn,QJ89Li8WNF|8%9"}ݗU6z\GϚ$zK<X'*Y]Y-b��@y-Fb8R irLaJu0UxŒszr9XŖHj<ǩʱlבsuD-ɺ9 Z W=z(mi$$XJIZDB) i[C }5�0.\e-x,>tqvJy𚟤nLQ2VVV lluN(st @OtH6@|Yyqe9*okLM.$pT,arQi8zYȱ ;9riV{Ƚ4޼H ;U%�8!i\ ڬ-#^ `G,E֩nc.z* @�@�@ Я9h$ʑk[f)賰u vHNMk> qY,dO\F4ҶlhNדw<|QqV$6kNqd+s6IWh9&Ǿbsg/ΪD)E8ʶ,RJ׶! �=FAdq皞TOI<yOv'jFO4�w} E9_F2t;+%Jtm y+шe$9It>Z[]$౟ԕvB[ 7IjwOE|Hq>&s '6 ㆱЄa0̉ccIt_^? ��x k譔,QCݪe@|qm} 9.Unɱ,S3zZk'�wVcPR{eRZ(TTyUzce,UiJ�=k1/XY1ӊJgƩY!-zwg!:�.� T2_}_d<"j^󓎟B~.2Ƿ;{I/!`z ?>9ՇJ'ICJUUyy `08:arI9$md.AU^sY㷒|Zj/H%m쿤/Z}gY5 C2oG\#QSz5-| � � 0ЯSVMԀհn{8{[*vH_aKPidz'bMQٔPInֱ:T% 3nsJz~I P4U`Oq0 ;XS+ya?i.r*(JQY乌Zka$ �uPXͣ-8^hh67Q| gNltk5ZdlRccLtXHN֣[UtJ}"n69\z^[vP%hh:@;C]i;)^̹rS9Z.<uCMr '/jmL* \ tM|lu/6&#^v;(劦o-]eUE@�@�.y=Jb<R*2+k[U D0%q8h-zqDZd,KqE6_ u|^Dj׺WK\;u\OH+هQ+b� d,xlA=y<Vo)s�>o|fxqiΖ[W jį׵<:D^; [XbE??M#zJ'{nLSng|nd!OVndkI ڍSqU+V);<; B6INqK)ٶu8xq@kho&"15U;o;G>W(z~Ă;Iuc'5l P)Qz`!d;��$ u&HrRMԠ˒ ;~N ~wsW֟ilEIPuxU/R˕Ad$'Z\_UIRCȌ dHjGO*BrrU+| 9\?1)u< Eǩf9k�aaNerkB��P*5j'>1$'CG<ߍ@yxK[cvػ,BGRtIHjRM-mxw™f].#M&kz}Zť?Jp=#qt;=n$./W[lQf'Bwc_6YsY';< kC=G7ۮk_Qk-t.=b � � p kۨyrRpLRőJd@kы+ֱJ]T>(Z}27RvU, C!_ pOq89IQ"/qY ~ P CTnں4KtyvqS5Wǰ}O �<guuxrez2ǶOa7@Lŝ?@+d]ώϬ\ptakvO`s;�t1X~ELxN)[qV\N.[.'vI-3St("*3<wj+$;BaM)5yǁ͎%>NkjC|rRou\pE+|G[9.LM ITev$p\y[#� � �G Z#\$m!biP#*Fve-^r cX|R_<bZg** h=yQ:sj8A^+*RK+&m٥>d ǝ6%_p>&XR<3ΰt;-.^dͶU.qn)>pf[np\kdlɂ>/;@c:?ڃ; �~ <9ӞlSUT*.m̆"e�ՐwU E5.+c#y`x1 _1 nq55 \vyd/8yœ~{i~̄9]YfbiɢZ| NHzH9(a[^e׵t  � �~4FB<qUr/x-v4VM7koXHIs^t Z+9Cllft�ym5v#%WU)'v}V2ɭ d|_Ȝ1�ܻ]feJxSsʗ"'whi˱^ \}pPht:Y<y;^ۍM?e{8OvFb/?Ζa.ieV1I=;0li >y6rjs8VfgucO;u$$Ƥbm0O}A@,_ZP;NJ1/j7c\5_Rk?pa,2*8Zݷ  � �yիT$2Z$_>D:?>iKQq\Ze%%\12kA>KEˑXZO/Ԗ^tt8Y.H4HjFZAs }>Q=~;�ɤ}/+^bJ8v-si%u�.�4,'eA+1[{7YG{8Zv1zZd^)l$Ю")u˙EwɅpu=k;ZOV"v4lԔܨؠ:nvfvb%~,E.H}z<ieH}u>gY}`#aܝ㢵6?]ۺXq͕xZyJ}jLC�@�@�#/d*I^ŕK<qھc2>_\r<M p1 k1)>BA/&abXإsEy-4+5ҨyXӶ�<wTG7Du$\!f1K۴  ɔ8kN+fh ǭ.hG�or\|SdJ+KCSŵY&'^\U\Z'urrC S/(=41/96d[`CrړZ:[-UH6Bze֗9zNϷ7Γ}~, 9:1z~<vI>bsvEfㇴv'VR�֕B wN!��80J7`#Aq\币;ѹn֢*07Krx8WN%17[)jhrkJ9Xjƪ| eݡ6HrE_ȯЕoVc=:b+wMOG%|bsVL\Gn?ТǼX:y<GI>;f$qry{2ݺwzqe{2FqO.宬%ul[Y}=EvwޖOYlo-v5 ozֻf-u޽e_yEuۭ:-` Nݲ(ӺX+S1zW)hYHѩ$N󥞻xcߥX(GS5WQ.XZ%VbI(,؍Uudwu,,?Y!HwFj&#*Z8Q`XA:j+t|)<%FCWZuoچG.  O԰8&JU'd$79za~*CZ':9J(RzAb8Z$ *{t!,]GDڠFO] '7=ڞpٲ'!Jd<^]O-j XO\Fcv@#O c{w�3ۓpN<&#I\6RjCmgH]G'hOnv"sskY Ȼ੫W+ferYY4kgΘ)ϯ;gf^4U3_]dl͵ŀdϮ'c6?fnwUٳ_YظN3{{{tH]fh|b5z7YNw� 幑9>GT7x.'5?ohG0<mOk:>xgL۟{!a{?HE vnݤ/- _2wY{%[Sr-NQ9O[~>wlיHKq~pksʇh۱q| >V5)eK=w2/7ץD)7qmu}Kwf5 xM]=D >`븰R)|«V[Y!1A�@�@`?5fpJB|%wUrI2wHPHk/ʅRڮ%W6ߏ ^b<Wg=Yqn?_VC1CTR3o҅c.sׯӏ=fN]jzy~ٓx>8߷8+O޷ [z}*:Zi}[z:!FbX:@!~sd*91 Y\yT3<3wwl _6Ϛ;4݈͗\ ߙgΓ|k_l-L4/yTztR+}sWɦD볖#ףƶbv϶;g'fc5e}$ݶ>sMs+wEj[9\Хsm_r@�@�@I@^S<PIp1-@^sY!qyX-|>_Jm ~$KVO񇹩r;ً-o폽Dk3tVɕ#FBK+N+:s sU2g|=ܯRlu}}#F]�.�,G� o%c!;0ͽ]@p׾/;_;.}VNyD9q1bjm[ɯ{bͪ^$ZD_D9ֳ~W )]y:݆|εV_ <wעp>Iol1[!Z-|oOCo/p*Ot"@�@DבA]QK8U46? 9\x%'6KٔWϺЏ2 ~KeTΖi>**n$uvSo~ړ͋3fnN \�8)4Q03kNg>n׿~b-8p-sů_/>I{J%l,9 'cٱCXs *WS{_aK:}7Jl~{MzԹZg{9ٱҪvsgH?IC$*c/HGA�@�@@xI"',%a *,޾N+X?D)ORy~ѻ1dHLЉ<ZO^#-NXXe.(5ԮDys\yŧ1gl| & �|U[Z#B/l=g]36[7o;s~o/?i;DZ/w|#}'/ZrkO!wXh;Ql\^Em+˕z\8?{onuwJ*Iٚ<ɖJ,ɳeclC`Bq0ݡ;IKҤiBwBӸ! 6d<,^u;[WҫzkWݳZg}ϻ HMʃ ƁN(=YчwzEW‰Qtw3i-e1P @1yЍ%9]iP!/n݊" c �+'�Z* YM &} EmэNPMŁϸwu<uܱ~3Xf<9Ndiv0P�;(9!9e>M8h߾zо娽.yS݋ԶiOwbЯxR̩r7vտ9HZ-t$d<Ij@7 Smdve_}}5fGx ^>2dž.@?TaSCy<n�i֣Zج e1b(ŀ X-gHn랖[B4,m[95Xw9M&o;,b34^g_H6q?1el([_7DL]y}w]|-ݱ+d+,z^۸kĩgUx8fsyuэ.~K<}̟s5ZJqüٵf&29|GtkPƟ.Cf@Dc{*s G'ԧ Qi``8ǐ*hvMAJW @1p3{F9V+ mݴ2^v%CmA v4m{F67lҙq má#9c`orђ| 7uW O~'W?[y{cYW0P�+9SKMNgܔ+|:n>i~=*yEo%7d,g(Òdk+R$ptMv<c �|>MO^{J0{Ċ5CKG@x(+S|^ @1pz3�$ mݤۭC(Ljml�=zĜ#]/e 2iqesuQ@w..?xUVwS<j`={b1p~}/JNn֟?ܿ?M:G KJ}## Yi2oH%S7S;K˿p6*~3�[D8tU< f55c:90sp9`5B#haFbZM?)o#(b b@F4ǝjM,7#rT׃0P(tzHCh{(妈+9$GŹu\<NSD/ҫ_c5 'lJ1 ,-%w!6�k^duZl Oڟ#{mÿ3C.K? n-u7~V(c`3�?LgwpOα0pd;$XM~ӽ6�F`<7JWfW$a=\fB檣­”(bcXu6x ./pMhIuC"n&| aCߜ;ZԒ IJ\vt׿e?;K|M"|@12P�4eǦuq~3@B~EZ\q}G~_UǓhhPbΛ+vZ.Nnmf {nlHMvф9)8oV xEl @|pȮ8V ƽZ/{1P f@sFC.3xfxqoal@OBm)DxTA(W::RLzS?|_@/Xͱk.z [)n}} }CS<=8p`+<`'Tÿ~:pG[NJ%1'rא I1Mrxc@~6OXfv_CNПG.]#VQĦgAD2{YB'|ԡ(36: ͽcljc>ULjݿq-z,  `vG}HG^T;Fo/nxދK[=U^c6�OS 4}OxP=ݧ>;S>v/aOo$ΑNVg,mn쁵noCgH1c-ށ3ǰWn}xn_/X"Dt_GmMI1Y @17-`&Craw.l}}cIvpE ƀHx&:F `+ peWt7ݵϾkETg6�W ց}W{_~ڑJ{nzT%~v:ge<nC@0[^aG,'<eYl#㊙�eϫ _/_S}6D57L J] @1x3zqqw ϑ;ni1VIŮMoe]܋_MieE @5]/|".O 4x9mOn{ի+=Yتb`6�NS >rݑ,<@~=}g-Q4fy~, h xd"bhHb,41 �ME:|X0�+(u h݇3%Y*S1P c@{mS~;P/CR52Vހ\tv:"b ELwwQv㠗Պ'?9\gb8 WC/`#G˟v{}gC]}S%Z`EV%'%A`7`#oMb*QAbxv#q,Kn;qaBLw$+W]֪( Rb(LjMdMyXJp8-xffM螋_-XA/vʁpq<nuVYuOW7ު*j`~3" epSГ?Gǭ7'<`p͠ڧ|n+O `T�N"Makmo1X7OF~CD52q F%6.FzwQR1P b@s&T7C[CXslC|ڏ4me9>Gc tEcKG77?{==vg{.*^a t{e48j`w3 ''>}?kwuZkw~^> `]#}#юGIc)1T@,Khߒ{I �ݡ΍wwh:lވ@Eof@<,@1P ƀuT` s/w Xa Oq\n <3-5w/AFY/{+?9λb.,ͽFu6�N^ ؔk=oq=>>=l'-UI<=DnN޽s_a`@LvՋO_l`"J[ ,m4΢Ӻ�]h,U@1P km`7xv�ؔq OT9lSzp-;:x}*lqI6tr xE=r5y]w_ԝwɥ~nЪb`0P�\X s.>wqK^=v?e9r,"zdm9Ç~F�eǨ@pfDհ~Bh1&-|�k\MJlZ|WM6||R@1P <47=pZô03(1FGe| r|4_:rXmA\o@ }(N+l*61*9jn7w=>O8`*@1 Ss.oח/_}ݿxgYdړ`[A~ FH̛_0>�kUm#a=Ċc# ᅦ?ĉ\ e bbjJ zC1P  ur<Vz5"= HqY6E}E,ira/lԗ4GpYwAwsߝmW)b6�=P |VG@?ۿ~>۰'.@ ..*ikwAcfBwx�%EGqmB'�b\ĢC484?gW#fZ#'\ @10b frB\LoH;Ԡq}{F_k@/Ma{Gߚ[}!yl_?]pUv[r:`6�ŏN، Ǯ;/]gb_u}"~@r얰c#VB[�mpybFoxx E =A b ƱnuKMغϝP @1͝+Aflyp C}(L:l9lYܷc "�-8*^K`ϾM|pb( )VJW ݡgwz*y_loS��@�IDAT?/ZZT�s~2iHڍ>_R} ˞!)]`mX$Eodp11iWBOBA(�&y{ ^ Kzי2bwLm$ˆ1A3<=ϾX 40Kib1@|5w|W.kJwwt\,y�6%�dlgKzQ_ JFe %nsVB14@`pRN;O`JU ~e@soSn CK3xL+G%'G:t=d�Z�G}#%GLY{@lQgg_=e莞Ac1P 0P�TbsNws\\y ԃXݒI:[*쓷U^` B q##'lI\BDo}<L08R\<vKS e@:4]sh +GtFz.辭㜸_y ${qE5W^= Jw=vj( ͹*d1P 4<]˞z}_?~rc[X`Eݒ}2it̛)l` Djv)Z #cppj} }0ƾ"PH5X9.u!,[J*b`1su 8CK3u=dX!Nn u:=ƌ'eS'.RK0˺8΍#@gOxƝӾ/udW*@1P �pd(_Col,wfc~V1%aLmlmi#1-?6biN>'�4 ,!`4Œ]8KR(}ŀu'iz_r1d5|q^D$;a"1ľ�B6U2ᆗ|v~Awe4T(G@m�< ʵ(;[\WvG�I;ͺ�@`ND7<gĂǘVKcف58bLIlg8zAZYF@Xb(X4;Aw@V ɟ \3Au�`qOfK8` `ۆ&Ɩ=e[@1 nYb;|bqv?[?v@U$$Flx">U.[+}۪+4|9`=lv~Eצ>x>ρ H&G;p 'X@pZOUb85gԻ\B1VK2촖e,閒}뼗[</˭O�L7@M a'?/֗~vwsWb}j`9@1` :|-8~Aۂdo7XC2E#!ׯ#[ݙ{8H-> ns-�m4UU1P g1>MjZq�3Q:i,]>of%'Ĵܦ3uz % vn|yJ1P eN%(|1sճ_w~O'?ލ7HY 8+YW6t?7Cg-s'l,lt˟-k@rh  MH0o5jTb1P {ioF Cͽ |XdG6-%=' αvv{Dؔ5O[8_WԱ(j1 (7Wy;wXHncѳHhCO'k<G3~-š{(0V+.F'&Ώ *5l9g�.b`3o05n%h4]T 6!'16УkmjSu?q<Lj/OOnbx, ǒ(v;~O}O}#_V[6+oD}г�?-I8rJ1).D>x/J$C"flUYT fk]iSa ^C˧`8IJSo0N}d=@6}lk8Lkpn۰qku_}~&Uc@m�<W@1` {WgoOyMb&_li>e۲x%{o@ciޱEI98o4�|ދz0<dXpn �6"ҪR e@S޺FQ@n8*y)'⠋v9+6`,`Bv>lOՇ $ nwWşU?T)Ǖ�x\΋b�x>~f?n$(%}t0F�4}?� <=Xq_Dh8bgY`JI{�x>Hg4B, (FH;KvXKQ πu#ѴkhԊ=ts?Pevd 6@_s[?xM_cawO~㞍J1P ;j�@1�]@mOr門YTErI~-w3c$, "Xp�t#@EFXAcpoŁ> ܪY ` MoiSg^j #9&8.ۘeU=�Zjk 1n-�}s|kq^Rw9bR a6�̏R 0pG_y`ĚْrKޱyD-M8,Y�+X= bz-�M�2a B jhz78Yb(f lY/Y}*"#ͧhur�cc`/=BU)b`1P�{GR*8bߒ/>ݯ[?_/H(Gm!ɿx-X6k-LJD^x:6Ō+ѓvISZ|GL` ҇(ǀEjZ ^C+V�tcU,{Mm@ˏJ+nkV<|KwW|MouKbث ^Ըb8v]⣿_{wl~ٻ%-X6$zy@ถXڱCˆ�1= M4P65Cn\9}f`.b``YWZ`ZH:ؔl2Ƒ[֋9>m ms kok`oϲOʿ]{b#P ^e6�OU =$חr[w~pE'8? %g K27@|̓O;hrݽ݇/If5/ñ:l2 ,7cmMފ!P8OTb(N >\B Höorez@'oc~Gs[c ڌJC""Xb8  TC,`p/Z\v?#D� ɎY5Qq,8ߏhK? Yv0/[j�6}ռPPj/3wgum8;u(=€kkƢi/`bn8 H=7~!O}Nzj7 <F<G?pg ;|!@1pz1P�ϫF[ �_|{߸uOGM2Χ:$l t], )ov!|]�hv% HDiXbx|:TMLMxse"@1P 0c9փ/d쓵ᑱeE8QH╼n1 I>HzZ7vo.FQ(Ӓ�8-l5b.߼/{?ODn6ϗIY�?Hu=l"{r6ٰN32l@fA䂢/- ӉT�(d MK#+ 3"[:jFӧ&f'>ykno>Ubf6�N_ _㞸%~|>%MYw> `>fb$Ӣ@(,Oj>U,iXqGd6}iG# 3:c-u1P 39hMK  GJLf$q,[r\XcimEO�@կ_M*@1P Ss([=}VoO7-9L{HYԑ_G O8-|{n6==߉'kI&}FGY35<}0U!T)b0<T6AZ1 r8]guNưk]/'i#"&6 tP(HjIox?y[z"'fjOC4�fKY16/W!*ŎM�CGO !ZXF@ԓ�Cb0춮؃dZ>{H KM&ɜuj&oW _ݭ/nX(4jLŀ/ڮyKvm6|[΢\i-<ѓ{VI=2:DgQ OJ�Fb.QpKMס> C\g.b``@sƠjSO2G 3Xm҃ jMm1Ĉܧdx^u=w=v,_5b8 3YgS =zگ|߷m?{rMN%d< Mݾ,d$~tݿl+Je!h}t7lwgD(;JO^Wl~=IxG3qFqbw^zأhcm?oP(3R �OzJw[޹l E mYM͂ko33ڱxmq-tm-J͐tzأb/ l2?,O3,}͉ #0Cv #&G .˜'mŪл=MϜֶ{eݟG?]VoT)3zŀ1p𬳺_%{Q+۟OM�~?ŗi�>w׶m ; U~+q{@f( !zI͈eJƯ•( PA-%DGl_N} ܀ hёd5>cZ£U;*x ξKwmOhu(b`0PO�엟tg1P 8]swߛhq_cG[@,Š>䤋cðKJQi:V?}eަ׮j,髕t)`Sur2(C-GJTcoӨJsO;>J5JXQg啯>~~pUb`1PO�yp1P 8xU[\z}ݯ~?g?<7%1a T>m7׻mG�s%@O�DpX2?D4;1CD'J1P `d]a>J4Mڸ5R/ΌqKY.|i{v6�f@ Um}%s :@1'�N( ?�,1Y|ieYDX| Be(LHE5&ohSZC"]el~)VU] uQ%M`RsQ{MZX0meO%Ic7EtJ9T)}@=u@1pСwۏ|hlli~W},H�J-poG=Ķ|߀,v A?VJ>[3:Z׵Ǣgl.3u=TZ%ց A?$`3w|S| Pu6s{뿭u(b`3PO�w@1P 8|7.:~/Vc"-BYB(X ۆ5>`=nkm5lc!L �+…DfbT%i}n~1_pmDr9D̥[?<j5_ʏmx_#TUbh �V(b1pG.>ܗuﶿg-@y< e2 U)<->E'Գ n|7[�OP4-|=wOx_mc�Js5}T<i"Ғb85T%>GY!AzӵڼE;ӷ:Xc#I77š-ܳoo:onx4@1P @bH nZwϛ߱8[§Iz0/Ruбx:²%ס^M 86v^. \>fĭR g\ךgg.6 fbSsX\voˇZEsf|om"g/@ms`̧.|+ݍ=@1P ,1P�KtP @0pWa,BM/FmStZ:ؔE&3g֯U^$SSt7lǘE(N62<5?rmS̛cC4φ57}Ow1T)bb~`@1` lmmu7/YgbCoZ?_hޛ#X/ěPV}9`JoVXSL:5~Ls%0/̀Ud>9tpwHM�O'biѣ۞ J1P   䔩({C ,'~|bA_ h~=nx!E }Cn9HN1$OՊ;e+]1P m6~צ6 sK5?sV:X1?gnf'}'y_%T( �9*D1P _x_۟w?E}kx29g3a}ǵ=,pR@r@>/mGf[~ >7c09'1V_+[1P r@952GzHGmM뛬$'ѧ';} nH;ǿou7?ž֪R @1O*b<űv3NYsDuе$MM qòPok8PƯOkI@mu,�וM EH(!H[hzEb.Z\3:vA7~wwךJ1P 0P['Vab0ο7cqSL Z},v|:abIk*>.ℍXk棅ޟގht}iB)FhdT@1:޳6!pd>#} @9,ϛ`K︳{H%Q(`6�Nr)bଳߴu_jT-Z� ,}<gtxY OCl}i{hUѶzĺe/S&'sød <[`sԼ3Ƽ~ ǎ5.vE{᷾;T(b$_8 ʥ(wg/ο)/}l?O֖g!cYE*x,ϟ +m+(X:V/:T]OveN(cR {T41eDA-HLO/{0dǟӎQ8vAqs -c1p26T9e � \ J#W_:o\|?j:lEnk=�c)7G=+o^ہE)rt]('{=f?Z;ti=&˟knRω<f]ccp;c81c7ҽJأ b}¤a%[0 Yb`2pc=]˞2Oc;l(}$n`&ؒ~#%oxX`k!-,&v`F/ߪںʳl@1[ lrN]OƄm%'LO:;0Si և x݋_ֽ-9< bc (7z1Fҁ Yъb`3pK]\[Ӻ.Cֆ@/N :X×(Dn4vz$7캪(N\\" &l(lcݐ̑1c>O= M!ZYqög|Wu<c1P <n (1yGJN791IX3IVk7 dbg֕w={oYgǂ$acG z$Mnzþ0vl?b(Na̭)]آvos8T&К&@b些\ltiBL;^5=~ kL7 Itϡ#t/=/J1P <N p5U79Y#]i qeVg6�=( \tݳ􃋣W\帙^fanmѼp&+6 Blŗo߷ a>V84zukUYm]Yb8 L]Nu9l襋vO *7:Sܥss7v/?wM7J1P <V ~~sY 昜cuY_ MUOW3P�iE,b8roEw>5L=a7Iɾnȳn c[y&@^@f0ĵW5jṆxn5u(=kSI| (1k4W a)9"S4<ep2uoZ=ַwG#|bx (Y!l/l,?ttl%1W~cT YъbXbo/~k<geEqY #sڢE)qQ  qx/wd$Q-X36] l::E׻MZB^sx߄lsI<15)pԮ6ڷ|k~vub`<\SzdrJD<NrOzP.03:* f,bH pc{^8v_o^pK#ۋnmj𮳪nd_`YcxpyW"߄y&ne̔(NUE 댑O fy#Ke?g ObidžeqfO ЧR{^X K pߝ1NF:ӑǺ|%;$?NUvz`wh@1P 2pǻ;{[M3Z'jmlb1͒`b[ mݐX+j&X\t18ɴ p,S1P 2.K6fBtY^I:&ASi?o%bO__ɿ3Rb`'~x9'QkS%sX0f*�8uVb(v0pu7v.$~d` HIfXDzoXt'hzi^6%>j*ϲu8$"<,Ҏ?jcK?{sg]};~'EGu,)q46\Bq^QHOS4&bL4FT)b6�N(9^pQo�n,i;q 0۹ d78_i\.CÊԎ8YiU(+T =#qɚreY<Io63'/sWqλ9\0gSɬ_՜pn#O5NPKG,|C'V鰍qQS/Nz)y'_> <7e)b1p֑#׿yq3eݼ 2i-i&&/ 7`çbmOÊKnݍ9c8(XwL]Gױ: 9}tYM'ꨱ =wÆ~.GJ1pz2@b<U>qpED_~:%wJGDGbI'_9W>7)ğ+lƟ] j~Z )co~Ɨ~qK_5$, gеjA:n҆ѫXܶst +㈓VEں±L>f`uõ:.YWFe?~ mjq̘7M߸r2$_ע?ŤV6tCXbIKn.֦mGw* xT_Grջ@峢@1pB p{ҟK.h?+hѦgm ~~_=B@M_[Yos"f�ޏŤ?tM QUԗKu(S@\=pYpF]iSƉ:jlJ}33VvjSǦ$W/n{ū~{u4딜7yOSa)0~ҁ,ˏ…vc[^W:d:G~U?:jW@1P <jW._tzvKYTI&%M�n$ I�a=o7ڋe 7*?wQGGMQ(JLx *24yЄ<Lz|QcSrFI}Ng?:{D4O:au vrƁ=$?ǦM,b+*l:9=)tOicƲtҏcK&^g~`9@1P W}⎯{b{k-B&kQ67Ѝ~Q/Y̻N+ *D9i.˺TcƱ |+gkǞorFb5 CWjD8'ùOa㤣>V&։቗ yMpye1P�eE*bQ3p魷uǿ{}?@Nkѧ6{c<~%LӁ$~ 7a;Ph7E-pH(Us\ yeYy6%cdEʧAX J2ǡhjon*8JUˇ9"ڪYUXcܜJiSr넣^8ڔ9bY(u=j`H@1P \s}wGE8qkpm3o'o8}ׅtH27Hse2Qbg`u1w=ɇ-_!, ilJѝLϘuoқn9xu~kI jI<)iuJN3N ;eMr:?Rl:W>H!&$4fM2&E~S:ʶ)]W3P�ÊP 3p. pK ;7RmB>{ݒOY 6b"װGz;!$\-D1p2p2׃|fsװ@nX%إoULXd9xg}; .'�Y2:QK' ;d|Qr1©%]S^|~ȼ2nP<8\ƱG=2n/yw ᱢ@1 o{ELnw$PE>_ ?I&@,ZJxNtʎMUYm]Yba`u0uG/ErfGslJk.=΀ަ>֠fG.{ٝw%tQe1@BIQRFV,eH$;D||bSQ)Ƴ*~z&9e!+ t}096X†L8}e6�vϊV 2pرYmmq͂_|s㷞慾ߠ]y%~5~/\nv&$[)*tob~tut*,v]grs [ z<̈|dWs?ȥu~|Ue1.giH;cd}.?'ҁ*1N:jJSmՁ mbHx ϝ89cepS:⩿UIT|R+v֩ fη (ǝ]�wz9[v6:E3z,c51YS{k"*촭mנF\Xu8/ zO]75&A' 9CRCƀ%P=mSsKg*g"Jt]r_{oQc1ڪѭ+9;g#|ڔܧƼJ'|~)s<8d :U:Os6Ɩ| sW@1P <f e_u޼8ruvCNwvk@ vu$tvWmm3e2Pb ``^ |RB]\m6uz|[g;9j*g"V,&tLr,씓MNkU.eӄH`):M2X'dx1(fcڊ#_c6�N*b1gM{;GniFÍż~^>e5-Œ#H77 cqUtqc[wכK$ rXl' ?KA۷-ߝușcw AV)=tc: vn'ԘhqdV:bsy1gX'y*~W.53|2M *U?ެӹK?@m�RSb(mO{íHz6\nJܩ&p玚q<ް*ׂ>p.KmbI㪓u&G]y;dr'6?"_w]J/o{Yg!U81*C–Ȋ^2C:v8$ߩXTW%O1W«_a~s: C-⩿DL V!S㫭(φ6E5ucSe "@10p߸8g&�WS�K ~e s&NR[z!$\-D1G8|t-Ttr߶J9(p:~Y, ݡҐ~PB(Ű$kc }._F>¡r1u"eOR?SQ,鐅Y_J˗ZI>_:0S:Zܧ\y1Wg6�=(ǜuww\o7XSsd!yf@0߄/(\v_SZmWe*0S\&ɮ'k"qQܷ;쓯y7ҽ ۱ Y3diܓQ V~t9nJIL%8iE7WCnJO|%)O*0Ԋ!]Ss<AN%ԗG\XY~C1GP'_Y2P�gE+b1cE=ѫe,qQEɛ�ȨsB�4k3bu4(&TMB ^ne첥bc`yj+񥒯Ar߶![ Uk:�s H_]c6Dv֍e%Y3d=tnLy u~1)9*ǸoVY'O L<Y'=uC^WK:bk&c~8ث.|Vb(SN~ dm;$ykYBakAHu,'S[]'\K!u9)9+'p |3DyYǟ{}?ggJT;(Tj⍓,_ahy ).}J^3S_KWƍu8b7>/Œp:lT䋬jajP=_@ԘW鄑/tNDg]a6�v R �_u޲8+E>w/m&dOM_vxh]ciX ;Q"Vn5Ȉc8=X>Z 5D+MZHz_ }=| .lLwʫN$gd+z(c|<EIV֏iLMZ$qɱƶ)Yxfttc?pYGRc:?qn^W|չoګƜ}NQqo>PU9u "@11pZ~IL+w 7rƓZɆk:N,04ԎtjU8S-3.޿ZqBי ˦ &]u5 vYڻ Y×\ڽ;O95dsӸn?%=賯pYGLq%|r,K=FQ:Nu^*Oy+9 cbu%FP_ėN~r<Fi7Iθ0˸N>t=j`H@1P < >osϋFɻݠGsVO;˱AE(ypZK0cne,zVjHY=y:IZj:ͮX!͙yoվ*9 '/J攜P-?uȼ~c$9U,wN pjf1t_&Y8N<9<2ʜNzj|rce\[xn!% t8\rXQQY::Ƭ1+Z1P 3pرo}>o {l#DEG`:- hS7= fp7}W) Sw]qIŚ=��@�IDATH~Mm鱦kCuNd;c:H/s__ɜ~^jJha,}ܘS9:9*7lnNzq|>Uէ'ݪzO&Q0c?>s8*1S%C�\ z6EԛsS W s.;o8p %FzWRA~nK'TK|t]q}5zh[fJ] < zNυ_kS vݰYuÑS/0J?ͨ@;7^hw"x ̍\rSV##NEr:ƪ1I%e:/>dS_K]d|:3>96jacʾJG|mJSJ'|~)' s.9n+ΦbAHY1P�'[y@18v]nk7bo7r'`Oɛ�cQlzn}dD1*aCon^6+9=ާSo85rm%o5 6uMƵM\b6_<o.j{$;|ɩȊ^N;AIV֏鰩tODܸXc۔, 3:~sOdq1HOҭOU}~"E}+ޜ۫<nOc )9qPSV3U瘲KئNz ]@1뻧{h7uDxKi#˲-\Tb,Y&x8?\-^5f@>9Ou]`׬[tՆސ<۾[�2}?N2Υt%?pYyh O:c2Er;?2yQ>ucXag?8koS)NNsRq om8R򘄛)K!n] ?<>l2P�gE+b`O1pٓni [Q"(W H/=�+K;p0^L@JU v z_IkUԵ*?%]\ ˸<MCy\j%dO)^cځx"_†n,OSQ,dU 3USU:y:7$ G p"<*7Z#\3)+|ɘ_8W3[dtԔ<Ub89fl#y)3pч@1P {k}So o(Fܱ f1$0x2,l>jOGZYpEH6|.cýJ1j+S X~t}rBg/]{_kS'p :ž rwx2_ce0ic7>7hcIf:,?j ͏Wq<v Lɱn N>vqq_s6'K4Pg2e7(8|t)sN/۸x^0V?JớJ>yj+b(Nnyūl~Oܨ-~Ē-m Bf-Ͼbdó)Mf`mCF#   7hU <> &%֛qErr[>jb+~;xί{+|kLs˘tj.(Ǻd.qh8.Km"ƸS6Ő <>ȇZ:ԯda&hSl3Sld14 KX_?I&pIV|~)TS I=qDZ^2ȇ슭$_8Y'䃮2P�ru'*@1P )/^|ڴ XKI �v+aHVyvVLimè3 vc mpeW3nO\W >+Zf~ l^6Eؖ%; ?nKyOwKbWsgIs#( J2mѦ(ɢ-0qS:bP'~7X[;u_ƌ2Ftئem S '5"?t9VM C{܇Sdur/X<ӏ2/18e,:6y*zSN}�؇?:b؟ l7|?^8纛l"nF߼o'A@E=imxQkgĕ8+ 6פĊ'O6i8lxP`Zc;,5Er3H+|ye)` cI'_96v9hŁseΦ<:}s<)'Y:E|)x�2enO}I/Y]yeX'y#&~R, ~ÆN e^UOxүW| ~4K:aLװdVIS]a`+]Awb@ 8x;uoX:B5 '& .9aUJ<pjq5WS+}Cg[e@I)d`c\Aq4kN~Bט㖯O]qzn8K{y,ħ }(9yy"?٦tS|r,hA8E7t`(ڪs)*`):7M2&DxTNzI0u.!7Pc?9\Og.)Mݪ)u~+!)0c>xWc9$cDkcJv)ؙ6�v'[oᱢcYGvǿ [ n֯X(XC`rBBW'VG 0QN5zU q#S)c`n*¯p^q=ޔ~HцkLk[{!_cJ4~8Z ?Acyv8фa.O=hl_D q)G[:*G5tS8CMտj쏦LqF<6OX'_9 26Ţ/X7>V8SuGvx6Z:կ0zN}[Vd, l擬#G1P 1^|iw~=B܏d׷_`mGOy ^I8GzO~J؃ `id ܀j\n0ZO@.3;QXS>l凞2d8밡SQ|]m%@ɵN)tWX܏}+:c1}^~M鰁SP[0Su1e_#8M}<V鄡V 鲟ASAN%ǗNpOU icgJms VX'9ް1Oq1s:*jU&kR-X  r60tcy)ba[on⯲-_K0Ʋ C6]ܴ֒1 .%)k3GQ!QqNܳ<gѼ>y߫5Ю'Sbtτl c./{^='y|[ע\×d '5EX'RDK8~s~7TS_9Io9Nq$!q%54OQ-5}tWv+;y1NxîX?aS1(cy*\V0P`9kLv^~]Wb( '>;ۿ?<,/ l61F0Bԟ- cZ ? I:;m1E\ ?e*]1k >+iC璈wBm/9ͦ'l NL2[iF*6(7}ΫxH?яuț1f1MwˊC)$^|_m"S6Ő <>ȇZ:ԯda&hSl3M颷aLUJI-΋_ƌu 'dl*s5/2/Qu`)ҁNmՁHLі5DO@K5f6�ƌ\ >b^{?iYnYM�O 6GY�p0㴐0O"aQ ;FOM�R֠RaqI37hU _yѪބRAFŕ![S;pcAS86!O!GK81L@tJ v!u1GGg,8Y8QK' :[SgU1qNcɘ_uÔNIN1ÌjbЇ7fl~KNbg_S^sP>DJ)?Gv=W�vˊT i?_>1!OYQpD"" u?E"FAE5z%>u(8㷭m.Y[A fy]{J#_cS :zUEx=m- Ÿbc|oӢdN84$Ovq|I5uE7_?ڔܧN~FqRxæX>֍eIO_JGtPc4<O\4fg]8tL餧/9lj_Xd&p˶j{\rEU{1+R1P  :;oZ5wQLAQ"Œ_f?HK@V\flMTiqtd@թ0+ߏ~yBN0uɾHf] 0Y}[\fdQ5cS:ŘZK~S6鈝 rG} 3CWjOg.^~c6t*!Z:ǘ_Ѧ>ƌ^8at1g`KFuIT[9|tC\JFGg']۔NxS|j G2%CmՁ>v39ÞԘs)nE*@m�lFR"(= / Om|cD_JR&|F3# G4[ آaIv?Y΋eKJ.N_j}(!=oD+Í�dfr�Vk,M׵49 VmՁX%&5}S4 K9c.g]5딜u:'5>:V:GuG~tg<<~t(y\y^ylRH~eGrc?>7E_=֍ea/s%#t^:a3a/v|x5?h3&Ѽ=5*+�IoNIÇγ |f^ tzٛ{ugdjζefNgE^񸮊L{=p�k_^@Isvwg]-:uʃH$$0 + Hvhm"x*~Em5v7-ڈ<$G !JBޏso_k{JUTY?c̹ϵ9kĶo}wqdq.o?ݎq̱ݎ#בݶ;ȭe[`n|䣻3[6<T~e~0Zeq/<HC \f!E`/d4AZ691d =X:.=cna+Gz܋_ޝz.s_6#L &M%l^TVS[cNZ%s_~Зa_yS±c2VSQlrad TЏ\B_HWN W:j}e,L:e֘\f_w]wu{ۻ;o^7wwtSw 7vwzیswn=V^稌VӣP^[wZ_n.ĵ:Zlk+8(uYgO}m۶׎;w olܹs6&hP[],EzV]re/NGo</ܵ9zޓRer_ =~oGYY �rM �?_c Vz whU1;ujwi5n 'm<nGۃrչ-i 7=68سB1qc|զ; "y3?MqO)<'"r#t-<FHYo o䵂Ͷ^G!P2oOQ7őӘ12s{aK`$r>eeɾV +!W|<j7cdqO10ӿuOctx5C'e^I<aXe2 ۲D=X)n~SkC'X²[őVU))NSɏoU>[omku_-W]tՕp I[Qhx;Ka*3dPw{]zvS3% .}-q☳(er0%̩j�UCdyH 59M^6զ˦X 3 OـG@bR e$uja5}]|5aIO+Pq@w߸-\]߳ou>;A:GNoes s -ǿ6g6oe6̊<g|.typ67@)+.Ę �ҹPMg)˛4xJF_rdV�g* +~6ledv($YB  =m5P{2\qifN̓:[%|Y<l`yYs/lNOSҎ0<Q85_XƅXؗq!՜1ds}r5t7~>>yiweu{'Z֫.@�RimmyUP沈9$܃2q;PLT D&Yc=lNHI mWb?l>Aol<$ѹb:qV�:BXujjHL{{_X>}/W-wۏ;;scك&|nj~i9~7}OF؈I%y*&<c#78e2"4oYx.�^ׂ\К#4_i+_J=б1mklP-81rs^,0m6n__|{ (RX 9J:F.NƐI-?W#''Wn{�cΙ1(Qsd':c2WapI5LAޗD|ha'8Iu9r3R7]yewWZ݊CM(Kˌx9PlєOʝ:ב��QuW86zq7iΧZ` 15�N}|*cN~t걸џlb&I@)1v-441, G[)6)#WSB!e<Lĕmwwc_3ڸ9G5Ƭ-0@:鍿4èLsO<ll'ǃKƪp ?.IЏrZ4fֱ+[~3NͥG+!ks(a,N')G6< (Ō=bdL)/~NY*%ع~x QTG$5&C>eeR$b$GHoMqf?tT?C~rZ|e(vH2vǩf3ٺ7j�&N-qFYn䬗hLv#㬬 nSll~fFQ t6$x�hItP6`%.-hJMz=d!c#T+ޓM"?|'?/~ o}. yS|nNy㻇=e^f,QI=Wcll0mLdxX.X3h2Ġ򫹳>�n* k"5'aZ$.1OԿ[qZ=;{ُY*Ƙ1 2sqQ~B__yS±cS33ʭ(GɘWc`<9'Uj}e,L:՘\uTns罧k|i ,!V6*lzb8cX 8et91 ҈j ̓Lzx 42RD95 y00YN)}m7d,$ &:F˃�6>)WhI_!nAuCe�c˴R60r g1k^#6 d)7]ge'<;8"f8s -g/ؼ钏9~1sO5Qxl967x~oKJBin/i Iú4q`vwG8X ]V^|= 栨x} <t:DZ$\cҝX.T2L[MgY S2:0l#*Ich˯-L.<!ĩ}ѷ׬]ϽʿfGJOYSeG�*cIIS\Rmki~/KR{5?h 4♆k;:LˠfWVsfFlџuY߹x<?AA�z^hHE+U" 0uj!:)m<}#b+n{Wvf*ϖ8'ŕ5[|R4 _VMTIO'~}x 2g7lfd1ز*>�?AmQfm 5F/6Ř,&~|]P<cvqjudZV*QZ[oTʇG qе^A8s]19ȇ4čRwؚ_6T"MtԘ(#B&)VSl/d vÖSv݃ٷjX-LelXSta.6 x ⨬\)L9ta5fK/u~ۺK絃Juѣ</7Yx٩X+5}ƣ`ICGWMP{Z/򵾷taZ V^\<NR|r �MFǪpEQ}8aO 'l$xLOen**`yXЧ$jr&~ϛy)O>B* Lb{;]ܓdz YS4^Zco~[Ge'Cw�3y!Ԝ8Z`QGwO|/n|^f9#|͟TtƑ;/M&d8P�+0}c{zRZWzeÓfA4c NRc?vGsl6ag 3#ΪXSW\՜Āy_2F#Oq)Cbg{[&ワ⨜Ϙ[exQK82 k_?}wuwG?R*B6Ĥ:.=Vq#8dHhCY=2~&cX[ 9cn$y^aD<!I/_H70C�uNĺ#mv\FXO!ccsAyrC=Y1S\O&hdFl@7C.{;i\; NjҘXd\h9I#s0B*Y-1㦏o8kUO8)4_8[Dbg~ߋO962|2@x`oAa8Vq�(l0*F�1Rq'B*|�c$./'t zl~@rC >+|u׷7Ǽ臻�Cp<Z.IeWW y x# $]1d>S[Vfܾf-'va5.L1ˏ\:JSFłKUXps.{K)^-Kɾ {c0۲<DM(pŷHhW2)+^&N?J2&{VZCMS/60]a[jk%Y N:ڸqm | P=iOcqh-Vdg| ܫyA/\㏬-C5@rD\6`j`n ^xі-o\vWǟ؝v'>7G٨mfenCx77~"CV1M|{6o:h1w]%ԏɢ[MbLӞ-;ZčҔ=:Aazz8˱ !8\8&znb' _qvo}qa V^8pp#j<cڏr[-?Z~5˓sb_%˯mW¤S^Iu}MU\&?yqZ5ݚ$C54 &ŗ.;9\TOT٧ٯ竀ʨXu@\e 8,LZ3I K+}C �ވ/KVhi\!E�lO36 2YGJ6uG� 7Rs"HqҀdj祂N5MS[2fq၃h C%ÏxuBk -b?;xŹ]ǿ~4o~nw0g-fx{_{cǎlܘcg\.e<A#"brkBծNq5cN̛2s>VZ <G#(]Fy_ܰp/ qGwOysC5Kq+oŒmYNq3eNe]- [<ȯỊ#?r+s` g ~pHu0qj_}ȧnL%|/P?omW_eHG͐a qR0`.d˨X2k̯}ʰήmRX߶tE>-}8?ķiҕ`"eN+X�L7Kuh~ꠊ#a;Y&(`E ٿPfT?Px1LS7,`%jW&m0\X4|h>I )\–r^/qwY{p}ٷ?u7w^|[Pj#L XȘ9{? cr�#ɘ2IƝ*SBQI/tU>YpiúI~}*衽ٻ{o_|@W#C{O;kmU,Ar,5O1kVbȪW-/Kc0-SjvadL9~ͫu|j },'9ĸ_GMGz rBrA鹋6`�> caU>5eU *Ns/9P/Z\Y>}%K+^bʖu[ɉ3�L4 N-Y\LG])p!e: 䡯hX+~a` Iq*T&*(ܓbŃ{M#. 7{%J*#4ʥUsE='OZyjw7 9ˤs[PhzLgwwşayb@cQc60M>8`| @B99--ן{at _ /Wl 1vÿ;SXܜzYv-^|76uNO˼V:-L:6q'DEv8$|Z2OkZ<a%}*bL%}Yw?}_ |& a$%6!vQQ CTB�bI8 U:J {]xP+5@0@M~Խէ8gY:Rل3k�`͆ZFGԘV!ݿ`^ 4c'dG0\f[~ 'lB<=, 1PiB˛p|Э~pUmw\|U۾ܳe=:dX N\t8`ɱ;z)8%^.oJETu7yNt'ԍ# inCݸoA0LY6|13qw9j:;𦕌dt� 6]ۚGkflA+ k`~<7>OMa\?_c tccE}=ВKC4a\N͑N^i85&̓bNk>j]bJ'nz3p82WaS-l*M7uW|~-cn7B﵂ u { v{~%l)ơ+3PD;^>~~j|dsn#씕p[zKF> vmY]9 .۷֖]�#¬0q [ =s0@<drS j.c/8d l<i|jXq"Hb8B4* J|[M Lל ɣ$?8;=wotޯoNlwWh9w[`^6 FA|Q dezJ>!>!ŤmCypJ2-g1[_7Kz葽lp,.G@1ع{ƶS^nVtdɾ2{'<M~खp+?-2 IqBWA3:kL: S|lC}TTbm%__{ǻ?>gO$ �ǂL/șF#G:fx8?*U3i? mcK-p3 jͼܒ0>^$}"Lmvp;](<cJgYvly{9dK7OS@Ipk5qPP±�l/$ ''lYu<uc"E>ÃхzwІixy[C/e]=F 6CYj/;/uWڃ ~ʜ1'Wv[?uvy$}C><@+@? [ހ-:ά-ЯKUB=@nBˍi9tXWvz_+&{Q)g6�-{O_/[Q,r m5j]˾5Ts2&NƐIO=(oYQrj|؅ s>V_>[_/n&\P{ i0J|D.G1]SOgֱiΩ+;R!D}(sޣPgsB(oj<˙,[-7[hƢ5n풕CL뱎?>!9e8 N]^ڄ6g&Ōm`<G -df%X#MTbXG %|L_$>q{&2qSQ/fMw|߸yQNv?Ϳ4gNx|U{ pW^�Ƈˆ�AKLfle|j0rF#46׵RL:$Z}$.*S9ksGWͮ}zWvoEB>}Ly褚/c ]*Yuee0-S2/c*K '\q:@nN䗱nM7lEykcO+PaG�_>f(!\yS.6$'X{)L[k�})Oe<|%mUb]R/\T:o2JӲXiz]δп'\UMr+Ek0РZVjHA;.5ϱWV㨌f^+2LukoN"&W?8ֳphBobBUαRbWCO-� È?$Got7mvó6:xcinF ll=ۗ?s]wÁ~~&}CĘlf3Gޟq3<YpЇV17eZ_ w7 MOX s]+80` }Տه\Ub0F<}e,sUM@2UdzOw<Zx,#- RVl,ȯÑ9Iu ms` g ~\m>woo6lxH&:'QԒRv ),6DaAo:G d50$7eƚ;y "3<=[!ֶy %D �O?-]9Hycc=$Q8 ? q#fQۀ($ Q@Sيś䜵 6gC3؎Gts_3"W8b#>9v7;/(7A-�X3WştW]_݃7u2s[o#O#߸@>;f�a#< (Ex0⣞r9%2q,-@Wi|hip)sEw>vx!xuv?Sݑ:i]_aµJ0q2LëYSZXcll'لո bfNݟGe? x ,/sn?x|{D{)Uacܳz E}%F) 㼐k[rH~ ƑRk>HG6WV]Bp$}gVܡڽbArpk9�ptV_V.]9<x}PO{[Hqx:�_ϕ[[nSb溦[y|XΖ|F$A/Խ8Biѳ/>SK!p� r+H\FXxuwj'?{賾bs[nSwNwӾwzgL G[1fyNj}CjQE�95hQ|5@a.v xw\e =Cc}ӹ%7osǂ=fyQKuHGkPOC&?͜e6ℶJU|qj0Y:֘tl Mi\e"ܜg;u>P|ZxNR5[}5Wwyx_c ��@�IDAT|NbG9<`#Gyp9T*8 xe"z[!{@45Yh|8MF^RGJQ5,]yK_g=� 5~|KWmR՜RKRN6ջO|lIupT_u%f[OlWQH~8/#iavR8JP"` $0X^+#b-;l/W;ܸ>Kd_]OfwƳqX m/xƵ|psHv1C9cn60_͖>x@/c_-&bi#۲�jz~>:0_w.}?|yxv?V~zK'pe~8ENRY- .]l5Ts2&NƐIbQk_.u_gV-?87]u= &ʄOV볼c>#٘Xjc0QVHcv|KMRUP3I8`?_xQ/8vܶn]9SrmC=lΩ><Ys^DODOS>9t\[z Hw$F;(b)38\X^ V1F 9T̯ �/ȿKtCI.) o{_v7w=/7:invyd{Ƈ5lѭy̘ &0vX""xya[. 3]7Kߌ>swߩ7C a!#}Oy^z0N:J<@X1/\aoa޶jT˘?NU2'T)?߃2VMu&vuv?.}[P=K"`fFc.i0ݏd QQȐ% Ax8Rh3$W_J]Ulr]b7ueZO^\ӓga�dK9YW'`'-"*�<a0jkZ$B j&yrK샫CM>pMuG02pb6CqG2(qk2 n^ɏ==8S8Zg=;e�1fH3iŷz';`<a'!7F4Ǖ[�j(YEWM̳t@>pVbZFe&<\#q�0烏r-?_ߝҧq'x a2+||X%0Lr=j)b<k8]őf\oaS9s O _n2&e?wK]}UhQR#$G O{Mp+μ'\YgNT2^<JiDdR<}rbѢ|0xQo\GS>⒛iEG JwRTYm VlyQt/M *@*dq&eWucNx*=Ra`L3cy)÷hXai<%_P<lXi9pbqa2L/>ݗ=o1eZfNG 0m7ユ~̡D?{W.#pσ? Ăy@-Et Z8SS-}g5l>8sp`č1 :q7|/:$~Q_RуJ) NkaX'X5!G񭱬1<N~`Q) 怑7Wb|aoa[e^IGVX-]]?o꺻X[\K7> ?ޏ8�z$qcǼ5sxR )1cbV# %ޓp[{G2䶫]7XhpjYO ti4cf*B&3O"X$2[oŠ(kk )5p8L|9f-8D`/2vq~Y\|P ?ĵJ4Lͥ=r2#]~ow?<81Osls[`hG=߸_k2=:_Aĸ2q痻Pƒ|S\J%a_!, -wr31O?w!޷؂܌or,..9z}w1e侪F,R_P^/NCIM<aұ)C>U&r].zY'oˆy ]sɯI'^.:mt_nc.&)<m6tb ~X \⇟!GOޒ p5k0J1IehK]I[Rhf{PR[kaxZ=6?�g]ηP'\a^<єC_9(٧&zOt[G9bjRӄ{[th Y ǧ, 6F7�A680|Fl�zHÃ�B:Azs_+/э8in/y |>kkmQh4ƙkn0|\F 14VLFYo�g+嵤i^h}=>x5x�t}?AOyzwq֘'~\c))Ajx.إƤ<W:ˆ]oa*ϱj.6M6a5.L1[c-ǒ.L/˜/L_O^S-{͹ۼ$q6<X!B#Fg}@>՘ z,$S@&`ɮxpkP >+epN9pV&쭖lau6k�`FZANM:'""6b挭Y]M%48ZB[8()1(4ӆS:oKǷdP#.qHT9ex ^n8ۮTw_y3Ewƿ|Σ94yR(_{>mm eWT) ё<6M2s x ?HoB]£;߹Aqa8bß8n`#h;1兊0T6>ș(]<J'u8Lő,'*85]X}Ycұm>Upbk̃%j?vwgZ$OȆUza.>+tx zXN4xG1͗UIϹ-ceVH;׺~l56{ ahax w{F�#>?9wܑOVƤ0ÚĹJzYr^x0) j5Daټ{ߔ0QowG/KwA3);S9D}<y7`G»»߶翴;)`?OD:@ؼh̴jNO\~Qſ(ӿӏ~q0~mc˷�b1FPȩ_kV25}l8``ne<ۄs}y#) ^cToYa}SMq~҅O82 U"'Ж_] ^G.N9e?줩} Nk,=w}KgS(<^Xvq@긁e| YwA/n$yic {m bOYZQXYq>x|YBg U:|^):6jzy2{]m\;ibr%wu[H7O{jOKiF,9W]6zD ßk  8z<BnA=ݬGeb |?-g6;4"in`3etqMQ%A<yGy%M_~x8f3F~2p%ƞAR d3>_xr: X50{5.eqqaM7ztwW?k;CɃ7 Uy9>9*GX[*:bW,dbZ~`$'Wʩ2°8*Qy'YZvb85 zd&绛@مlɡMr?/:.oℽ.z% hk`R`R kzcQQ\Q>F]ύpL[M2�`[75[Qi@DaS>e0 o bQB f|$9#WF݃۫{_7M0P^&az=sӢ$xxV̧-pWt6O;Yߵ}9v-@߯7z46j'=b8^}(<#|wtagP,\HCGf쀏R�ʕ oY9AV;`1g`3[p9{u~@+$sR/ %}A]'#>[w<f_䖟8␟DVU&$lF-XMe/#ܺ} ˱+ֺe8?o9/^kid�Nb<dOL] ~֑8^H$pXDZ|{SXl a0>jV&WýVoE}mr?u}-/sd%^#ALҪ"ڌpdޖ틷 uB+,8yD~H n. [D*x,9IFoc/ɍ]g>s:LZiy‑8AVjҮzQ?zy򐋇bx{|l3]Fe-3�ǫk9N?R`% [xE?/O};Fٿ{_s^ƞT'XcT>5&(8`pj^ Syb/u_P̩Zo-ǒ./[Q$p%NmVǺw_s#sbRo7\X%lBʸgBJ,<57͜*7ɯ5H KX#ni1yj[>l~J9Lƫak&o@Lľ=vBx0u/ą p}2XPf;ZQB:؇ fp|Yx4{$3g{^cȧqXy] `Z{0k뻏l>ԝ]?iӡuFOwM<q3y8ul`go|޺yuXTĈ>jok�{;=^|D4gutI[ڜWZ`}S}g]tt4װᇍ]/S⠛ܝ 4Pek\pZyሗ'WSЅ!IG1'l|R<Q) yew\r!f7]]w0(~/ )ϭ֕@dI`Dq;rD:Đ䕋ũjm(k�A|XL \e_pXGZeM31X<]Ϙ.:bԠ|6ZO[H[ }1d*fp0 yС.>pԹswQcYbd>^L6ל a˽>֨Ei WX:akL:C#1m۾{_qO#cQ�Lo >#-c01in?H ܍=>}y#lZbyd?畯v9{ ޙ1JSZ8G_᷊X$+k0HVI5'c°4~E5wl(VTgϾCv{ngE҄e.ݟ֍>LVxa.JQB.ɞ5ɖ\R1z,*$UL]pM{Va;��@ks ց;ajjEjQW$[6r!U_Q'L*XsG"1㢳A &:>\}#Ln߆nނʁ x(x^骏5/]OzFt~;0_џr?2u'K9V°-x5/3ѝ5ϰIyi;cgL_g�Aqd~ Nُҕh|=nB '"xzTc<1/lVG畸_fx|mwCpKs ]xQ)F"=IX-lu1_\X怵85 Sܚ'XS>3v筷t}yOI:ܣ鋇.7Pďts(+</? )@PxQz]BB2*Ȇ5XEZ-p&gt �@[<[ƢeqsL!kO3^V,$D:gS'&dTb,o2{1x bs h�l k{oT6ST /<o8@~lKވ)tް<ٷI5ƜdqXs~Wu:y?qbj]|8X.}9Q!CpSL#㽮۬-M~Vd՗h̙ď\\SK ijb\g<c4. '9v-s\a5.LeIoMqO!T^/-2 ۲DlWutk:)ǯݗ^ҝ?qu`. O6%Zoqgv7P=F s<CCd'C"MF w<:B-`#M97uh9-$zU;(RZ4sXL1C0Ky%q\@ *n? w, vE6l^?mGWp]#f\ .|^w\/ԟds?-F |޸eYҴi>RSXS [V\xS\Uqu#9{^'`705rB.@C<|EqFʶ{j^mާ}3K7^H`%D}My ^OqHSx1maYpsʱ2ܲ #nNSX>u,a5'LךT^X W;.9|0j3qs| O:w}ͫ_i^=E~/wpcaԑlpD_ ѫؓml7KYĥOC(C!JHG9s[i�Y7֩v}V'-k,5cX +X([\Oё=Vj,÷[~+_A~6ooys77lyΛ/[`{1 W?N y&<sI*x5ULr\: aoٸ;҇NOҿ }!+$^\=)[�[+\m=_,/օkz90"1Sbq}3}l04TWQLu0$ m<tatJ1&F#<]2OrGϲS91s0S]TV[:os_GE6)]HpȴnosK>펳%$/:VOc3YDԁI(=HCh96h"ĭ{v/ߓ}/i 1_Rfb̯:pnXtFb8LapF<Prq/|nwٌsmU<[öpgB|\aӗtxo^ymQVmIUF;|U,+\~!_ 0lURN^'_)Y|/m}%?t/,ƒ-;EF^tL#,0o߼~ 7^6>c Jg~J\^e^mFθǎt1|cJ98Oʱkn7e8T濌-#<Rd˹yr+0+t[Ïʯu|jLz˱Gf_vot7?Ok)S?)x/ЬN<]!Nd+b[ \[Lc1Փ3*˳%Xw0�} �8ߢC̯6`SB,}Ć <m&R[r$seu؎>DB|nVhvt:P٘5/8,8i�^Ʒv{v_7o>{hcǎCk<yC8-LF6pp3&m|#1u0|IwhkѺo\v_DQ9Nzģ͓zEk1~1HFfa, "xVfF2KC PV\ XM'|s +qLs܄yRQg%\fyD^S!&1rF8Jd9Ǫ+]<NRWauy䜸}M85O�O˜_<aҧbG< Gv筷vƯu{|.N|3.>Y{̳f>A2ʉo�@1_u 6*ŧ" ]`˩ĤZonQ h܏Y[`i&kO 3)Miq-*3gݼ]3^pI>O)?m?#kD>3E|/s_vܼ7ާel6RʡoZ}*S@[\xJ.Y8<hٗao#8IQco=/[-�IdGй $qq |Nv .1=t_Ϙqfpwt?gpCߴhx(_[XsBQj?+:qϱ 'WyX-N Su dc=rGeX}_pkXJ+'o)}+a{Z0ҁ23x':qfF㬥QfX†/3! %CUi3ɕI!o5̟[nsy4V#Ze,.ZK6-[LŰZl�U0 /]G*<>wY|5.lٰq/pIzϳ>i#/V|MA=z##,ز.?p`1_CØ0Y.uUBtO5a]oL LSB-,@&[?9'C<Y,?9;]C|x )we}]z=7'L:(yjîz[c$[:60ᒕcJ!_x- \m&nO'L<5F|a$tQ,ȧ0_uх_u^SpEsl7 .}#? ΁=GE^Rw< tj8ä2s~Cs |Z`~�%kyRs[rྸ8po _'?\E:WmQu\vq�z8FL ?鷿,Z|i6SʩMީ~vO1e8ij Wqɷư)# zMI~s޲ SrT&_qȅ)ʣL3;6y Əp"?^&x ,F|8,莙 v9-t�ÍWC+#pѐymݙ�Zސqte8'Lz=5rzNR.S)VLa\˨y՜Sǒ^'ZoaNG[?Gߝ36`x?wV 7B n/7 KeI@Ì$9)<TAAu12e[l̵-&j)60d[ 􃷑Ë-j /`p-ܲ(lϢmꥺP}Sy_܁_u6]ʱg]~yc4^ˆE&Wđ2 [FNR,k+IVz#QMxWc2_|9?1s G?`)9ErYO[? IבY力 U~SV;!d|K6l}̹@*8Wh;ud<C2rq1 \<a'LeOYx>`JpH-*S96f*YԾ:|U>rKX~ʣ̜I![nş~VbLپ'wqa=# ?H@C}H֬7qs@#a#Q� MEWɮq%]ZN3inh �o\&u[-<v)b1L_G i,pg~~ײby<7896QV)STV}2n/ݼk %&'61yæ͍W1oChmaֆM>%LS6|1'-*Mt_,Smj Y~5'}]'RU)P !}Jy}U?\㔃6CݎQA`׾,l_7bă+ۅЏ:O !0&*eNm S<TV.n)Ge�GuV-Ll'=AlLʱ }WbyfU/kiB龮8ex? `#_/Rj!$9AbR|[ts ܧ[`~�p~ߓФFGC gZ(#ġ=x8Fw'a,>/>J-6a.xn^{?z6ȤH65c$',r]6lpWǒyYn{]#vT,$ݫ&Ƥzk;#A1sɷ_xԿ/NAM Vnb}=$ȉJmŜS?~%Sdw[s/~w$'C>^ml'yYo5n'=cx$8'+8I!)tT:K1V]!Ǯ{W`Wa␋'Le(6Y'գk^֩s w]7f~>?cy^2(( "&u4`dsbG*IUPU>9-pط. L a>X Q /i&/!E58 },ʵGTF,]?mT64pѽ!Gt8g_6lYǯQ伴) [(fv2T%\|k?t^Wcs?۱:)W|Y{~WAUt1?ş c:Oz s�[ (Ҝ(]orS}V_K%} wG5|OS~8xԸ%)ԸṶ1(҅ '/w(|0pͧ ~ēˆ!2 ]e2pK<)L)V.N sq%6mS"1sV|G=ǯA6`b(䒡zx\k8t2!9-0@j}],Xp`+bZ%/0_4>%Vu�,ZpdC X˹juĦ`CKWKlnćMbh3Ƥg?d&x_ #<\S x9VƧl\rT&_qȅ)ʣ̜.$dol؟[�ey \j8eʞL9-TC*diaK2wg%>n<&Ч?Q[))Yy/5z2j?W&NKz]pr'0եr9 >r仹gOw7ŶX :gmph'? _~B4,r.DHClaG"zzǤdU\m8l[`a{-F hog;j"9p&1*o)�MlV*?3ͦ1M�ֽq8n;@|sL}oWnl۾7h׫7Ju?o SZ1Hp봄u܌~3k nj]~$Uoּ뇛?]Z*:%[ާ7elҡCK<f㪌b ĵj}$]W}?pE(=q-qf9SyRw>%\IZC_ETЋ2՘}х\ī,2 ]<]#VO<%}YN\?5ͱ_uWü^xJ>�^sWH]+sL V9 }H ̶I>%r]l[nwX|s ,*zAw/ZSil17xr~,Z lnӿ>rOC;wǮtܼۢrfEX5 LI<tYX5oF|}ڄLe0qK.,(O@2)X/Y#XGnل\rT63yݛTv/OI* ˾i;R]ilRO Ѿ "3mŎ{_F81>}/bPe`#8\~C/kS~_߃®:/Q)?)WNTElcJ–Ot_2u_n'?=u9{ {<|=0 ZG2 y,)X)~F3s -0n[` -f]-晟c"=Z*\Xm4`#>#؇�&Aؼu|݇[ac36>`җqj^Fmᢘ\˜/piazh1 i s].YL$[nk?1'ڝ;;zq WqcZ<~K#\]})!Wg~iu[}M{p"s_n/\7MV o=4C#X8¼SꅝqZ\revYqU<e8 #0dҾu؎\e*ǎ,Q: ˾- ?W= ˜pehw%0B5cg=&r8q^QkdsB=_!) RO֊ 92aX3n->e &LT '"Ey,fWpXu xL Y/s76w]MwMi!i=cN*#6CڔfudIrgL}jLz+~WNU/_tY*MوT0-Ιm,E\ߛs@GSֹI}^x-N"~@#LcFNtzK7(|0pS kC|a$t &_Tf+G|8Sia//RwO]ڽ_v5#jrXEhex`~<#b5=vC_+"lY/g^E$UPgs ,iƙMs Z y1"0] 1#.|Pw^1=B7lKww]/ݼO9I.)R^o#~WrT&_qȅ)ʣ̜I96ba9„$ʇ2fuN\qıw~s_B6  \X0"F3v;*#c)DmS\/y?Lu@ 6 HCe0 ~%[1wcpz{<bW+S'a';mīyzԘGVyQX`ua_+v.ZLq㳪s{Z1s2'w.Wu{y99f8Ї2_~�p?l7Mf=s ˢLŎ)Jf%hJu*Č-0@j@jY[V)mTfb<&6_z8:_D�|(U{27~|\:LNmzk+me&uS[voŗ/b S=T~NR+Le`S93&Ou>5&{j{ط>0�?ًzLpɃ<�3zH@7}_mgGGȧ΁ ]ض{xK镱xoT<?ayj*9I~{q <Ǩ:&C~O&dj+ͻY~6Z{Yiaw=p? h?|LKޡ]v W8!n)LȡImxs L�`ef|n{[Y"//-U0WCl5^xGCn.Wm^-ML)[ް!BV.đ8ijFS³]o@K>S6Ubr3/p< _ױvW~</p\chc>^S۶;ԫ$!! tƢ 0 �N2Fd8Ǝpl`vb 7@@j@};T%U̹>{ϳ:^JUok~wι=n޹hCj[C^G@6n69cy&k?xguFҲHY9LN~7bOxF\y|S 9#֜O 3iK?ٿ͇C/WF|Gylm=J40_狁~6ƅGcnxv3Qb�uԺ18sBWVnTo \R빉f7nۍ3-bqKn~'F ;p<wzXm4:3ˏc![˵;aEQ' .f#GLXDu<c!Oayđĺ!xuMgS'ƈϩa?_s~@;T8bz~  5O^;[\KVqU4{6}F*ϓY?[}\SG{,��@�IDAT3 X!pV9橾38WOl䀏Ř3=waDO<oIo®y{9g-{3)'5d\O!}rKFbwdf>z@\UUzpS[ΫWf7#z~ oX0op / 'yƊl@s<͐uo us[|䀋&ƜNV߈ݹR9YcS6t2gԜvN]uŌo,ׁkwbq�v6D*郄#vXrSYޒ]V\i;䜃;x16fkiJ_gpܪ{>C~'>S~0lus#Ω!F?̏?~lb،%v#O18Xar̉?_xٷ=P_`̈́};o97jܷm1'�zaÞ;#|U\WVly pz11Q7@ ͺ)im2 #{8{ �_೗�4$� `,:AacQX*giv=Øߦ5՜1v1yS8U3Ƃ895Ǩ}?}の7ݭ%<ڵtaDgnדh]ï?w[bYj!8-?kk,~\.&bb#qԜ`~s-4v3b<8en8DL9bvc0mUCM_y:w_j_Zƒ~8/mfHz/~W<b7MxӣqR9'4eYVV>k! **pWqjǦd7T k1b:`~Poik/"QK3vI~Zތ3rFL6kX닌6jNc+[bywsgg50ׇQQvg7ϽOp]R-x>¥ h'ț|c=W]zzwι&p˕o:< g&Z�u)@k]2˜XkSs:Wʙ1&Cg3qǯ5gwԉ ~YT*fΙG ?ʼМJlXI[ܟ'miO?#μmXDbFj15'-tU`URRtU p 0nؽ!!jMM=y.l @s|h#>ly>6b|g!=f%zk!8m9N5lpks8kl@EX?eo^}kskOaA|Qc 9E yR^??kOBlKx k68k5.Zb ,hgN d8GXӇ\sm:$ca۶45w׷IZW>YK8ݩu56s?~NNauԜΕ7kmbu-#&[svSyb䨾7asa9F_,??yOo鹏wZA)>wbFo/Љ`ϟ @ao&Ǥ9'.0.xU`UAzy%Y8] ghy:x vnB`)w|{olBw{q`l{;_\r VFck#5ݹrG2)ߵGΚ?7ƪy3#g\|3u~jy3䰎 O:|߉@:i_PK<+έ}}}k4%y鋆i_}]g>׶wok^N43V4/qUF_9ݯaDs/6Ε58cb1t6^qvׄ(Wgboq_5rHȁgr}-ԍ$-t(AMx_s[**`W`�x+ yP ܬM~}h$h1b@9ǒk/^{o 1l`yΕrk䝲ߦ9t09"Ū8:a3<*35v1\c~:s9\bXFwnkWe(K}uׇ/Op"! g,&miJn?k.Ѻ.^�O}fώzNmȇwjȩv}<.׀?~lb،%v#O18Xar̉\)g&g1\/c8W^h"~ ^{qQpGɋƁd#WzL\0'UNJOaU`UAz{%[8_nWQdMH7~n`jwi5hE}_B46R6X6jJr)?۬W1&9b5 b Ʋ0c~UiLׂ S[mƻw_6A5$ fj9^07{9P$"9)9Zh8?_Zo$k{al|F}ۯcrvF͓ȎgӯrϬ<gHy1O}Î.bڪ4w<wc\\v-VǞ1o!89zbi (c/1BK8Ǡ W B +ŪV*7L cWLI@R6tc4 m.~灹P7y식w7=7o͙ ؀vcb|9Vy#>Uf~#_ƈs)rf3\|~lUf|kOo:S�yl[fuyΑ}zYIc35Ypɏ[z[znM9'Ǯj ]9k|7nl6spĝ+kqn }窟Y˵|ic0{ĂTv<2J]GJ93lCzuy=<2~;m1MZm=C vlm#ǜ 3f) E dwkAF +Ǫ TUny>4 l:`p\8>C?|8=n"/~?_{Wב" {~0} \e.\%<ac[ dGˆՁ~#/\ǥ^㟪\?|x4c�C[H hq u<X9_zo7U\5Ћz`vq u[d< g='b|6X#Gb6b~>s%^sw'F1_'~`|#fQW#6y#x q#G >Oy&Ugk؞F}7Oxe8 K Xa{*̾;XUUC}VUK*ogY4 uDdh^(4 R`3nl63E [Ƌܝi}x_xhڰc,|QSYK.TGxI0OOrcrkNargY~OaOp: ٶ'<r lcTTO=n?hڎX S<T[ComƺUU> g-:5BK\N{1<$k:Н+Έ81ԜOS'3#}g_<я5͏{bΩ>#k6xbΉXƠ6eɪCW࡫ʼ*p pSZW>@AFAz| c>K�KaŽ=Krþ6l6d6]P=s~6֩^~5 ?Н+d]̼3 ܚOL:Ru۸&†^9<'2wx4.G=Qΰ7R5Cغ 1?.}y1}ޯ yFz9HI]Y<y–\ cW)g~~nל~بWN=擇k'ވPvr, ӚGX;brZ$ć&Q}k#|}mZ}o{oXSe]~a۽a14]n2׀'".v@bW.K_Xx+^�<_Wިќ8EEMؠ7!?z6!;v�ӜK�rD#Go|׷]־uakn3f#1u6HyC°a<em\E8 ΘGS�!b56,Hc:to.@j_+T-x;'7 7tfdny)iډlmͱw ދ?<궋-5بW6gVt6u)O|>܏X㨘9p_0fa*~b#|Ĉ/Ɯ>'qo/o;qÿuoB"Հs^qnarUU^VUU@9ݲ0v1 hNFE?/8=Gw4K?sx~50-ذ09N5lrf~#be%+}lD ?6Qq u2Q#S<Om߁}'}.K " ;uI DsZ^'짡<<_3MV;1"4…2kc?陇KZ"U|f1qԍw vrXpQ117xrf~=u#%ΦN~1ׂ>擇4%_ J?ߤU>W]܇28qwqi?am+{w0'vK˛+Pfn [Xx+^�<'`_ pӽ[r?b HMJm}0G~|{ Pt֟<3uX_v4l]K y з+Ɏ 9ī}lDkN,1T >:ƲȻL3vy߅ +syI b]Hyqp3ouLn:<b7U\y;V9Ͻ>/6}}<~2:yH> c@}2FfQF3:R.G}<s_1n#l`{ĐO|i<X7}xԇ־3#~=q=i6ooI(pGl(qW K]XD?ֲ**p}&-i?y|FG%xauunk5}߃d|{|I.L7{;m,5DZKqN ^:SX2Y,Wٹ$X.&g1\ej-3?[wy/ׂ.#vq6(?R^`m'$&!^o` Pc%oyN6bai1k h kG=óK5Zձ:6ybՏ9[刃861C2̟=1\38W3L)>߈s>}*=_[>zy>BoGbC 3K(giU`U'�>ZêMT o&Ǜ>{MDžA⍓!=1֐αپA|wڇv5/ܦ C n5>:<VׇlGXbH90! sX֭bqsHS[(Zok&RwPclC[GgU[}Ǒx&'};v_?G^[Flg׻8) |dK9^}r 8jNar!f>60iҜJlu~;)bvUxó/{"m<} KI ' ^XxT`�xU*pٍ67k];Ҧ#4X%V9[Շ?18\}&MzL茊ٜ)g bzט2ň]rF?t6Hnla|"F}:+̤1mF].sF͉ {U` ^&<yVbxĒt.&TXqvn(yQPck`ud_}>55JuJda%x˻LӼgPؑNq_s_'=8q]9gcLp+EMoXA=X#1q qg$'}ܱKLv faٖ**z;gkū'+p ƅ�K#'6` 67$61 %�8C?9!6_o^ɌtMn=~1&f(}lDmc3lku<Đ`_ 9rWY}yMx3 5[s3SG=O?<_zͣ@lL>}Yiby[j F VbU`穝5˿yF2חY?Yg<3y ~`5_ZV10R?2R 77!mFr3đupG,ns-ԵG_K|u4m;HNaS7l}0L+!iyUUg y[^8Yn6,+bsH�lp@Lj1O#[sÛ;հcXG:q57h#GLHb!X0<ȻLӵap<:ph슍~3ߧ|@[ cOcUM8y& e~ӛ\GMէ8irְiyypx>O&5DF]ɵ;a^qZX+cF�S`n0#g :frƹ1͋}~û_Gnq]s=dqrڠ#7הXDZԮ0OQ**0__K_K^X8Un64˷ M{zC9iiz'lp¯$HsC{xk McSE:m8!vϚ\x3#be%+ݺUL~lg1WcoVK8Oy dᆽ-7ue`K>{Mƃ_Y9gSOi'w; pixi]cƌBpƘPF }z>&cϰgv3xkS­,u_V7~/|h<A潎؜1a.?=.63nBwu,DU/1Wꚯ <*טٲrWV.e7o bƆl ?f_!!4ekh9 k<b !V^{Emax*NaANs<C°1jNdĽl!^MtbS'_VG|"Ցj"O!𗡨x;o>ղSS}p&Bo?7/lmqqu_^`3km3gHnͩ9LR9̇>~79eTL[Tbstcb38>1#?ַ^_84׶{"&~Es3NmĊgҺ5o6&XTNO{S慯 <+יa *p8M%b$ ɿF& iK�9^{ьav\ nl:Xr*"0OOrck^asFꈿk$8y/}ԣn}a.Ѷ N; 7n6#qv璂,a+u_Nm_??JHu9]21&P7U?!3:Hk3'*yej1&ǡ/1c0q=pud{_Tk͇3ba׃։?"�g(giU`UP<ָֺ**pf~ &r{!6rhubfv[#ԹH>$(}?h}Z6Ӱ:XKgX{yq<Hs0l#GqƙCgv_5'><u䈑W9ݜcC9eTL[̩|xW\Ks Jlm^\,_%osr' }G5nc&eG92.>/~>ѯ9<]_y`۷pk;MW)g~>C͵cQ~|H|p6q3_X+OL_ͅs#^dww>mfMG0zڪ>ÂFEc0/`EBVV1X/�1rȪ \vc އlMh6llrm?5H#|_֋(k9u 9 :,8*f<ȏtcca#k$ƈƛgQ'ވvƖ#R?؟_ *"^Z`{>pFsz\VhaqCTr \sN؊_E.?+ןب5)$3+8ll3L?8uXbV9ܘ>=5>11gG_%X2~jXż}kr'"C`11e7TcR. m �shUd.8@n65;b3"5,!ۚ&1_?A8mK{3;* X/A8a7eˮ*pLg61>6憃:6cf;X3 q3s~5ƈ ?'| C>ݰa%ѧrCsC?zGɡrC.m\s\ h=?<Sq 4I?˴X~ԍ>êmGVqڔu.YL1'Zg!]'͇�?s{CX`iqO\l!<]w+ΦRߩq �ӺjUt.FGJ"m 'xF77dKaoȅ~;?k~Gk#l!Khp:P_tJ93iML@ƗxR' 7ߍ>0vp<fkƄa،_\)1|= dx-A:zqçŠsyX7ջyvj̆މ~ K!~'=h?>?s뵅3>l09'F^13Oy>Upj|_L9b3_1G:8f{-R{Xo=tͶs ~ؒ:gݞpgf :bj[##ܮ#[8YnFDt$41]m=w ~ &0b&�Ă#oÛ{;հ?ͱȺӉ]1kWbk^8& ߹׵ugqtq^h38u<>?e汰90g �@9N]|lm3f=}Agws#)LTx#XwnΙo >b#18pgXw_XRÿP~@|gﴐ(&\NL9>kݥUc K3 <B*מGXXj.H. ImMZ4d! ۣiz>Їch/ [Hx?'6TKJ3 Wn.&O9bnNt)?lub*fFiLjG?u pc3w>_ǻv<sG<;v1M3옱k%ނìy+śs| fF܆?1T6b5 `>^BЯbFY9c&yq ;>l09'F^1~`8iҜw/í-O-B̕{Яģ/{-b%XY1BœX**HzH?VTFĉSF) =l^jF#[h6k٘5b6@T3b*O}'wgXε׼ԯGlS=Nls/Q|kȜ?,rEA= q (Z=Z nsSK!H^b9ccss0m'VyGY9ܘ>=5>nګ~ C|c1gu"XgN<U8;v~{ZwAh⁾cmzpioi nwq GwSP#k**pU`�:Uz\*,<fM`Ʃ{|A?%P^4op߇x#7(kHʰluAQE8q-:6cp1 tDr_c0lu8`Ε#/1fH~bԑ#F^1 tr>^pxӟ=hָ} q%'K<4| ssjv!|z~!gz]\_^`?u9O 0s^;)65=1ul#6p3|Hy ϼԷGZ+Їʽکvl4GٹyF=\l ~⥝y6,4T)aD [4\8_sMAmz46x{|?؃&S|_xᝯzeXhN g䠏"2q;b~|uK.l3LN]s4k3ꆍ1u:>GmU_ۆt�D`r=']bISyiGzVWΉv/]Ig_~m+eן<$ף8V1xu> ^cTrc&>Ìgcu3q0m'Vesc'[~߫sKwPW{ђ#dqAKmޠDA;P o.hU`UzpKuЫ+po"䕞-o6xhTvp�aoVT?bI;AỿG?ɳYMY=A#q37k|ƪ*](+gbWtV1y_eWc|5>35Oȑaݖxcf;ϒ65V`SvXqmKfBOv<mO/ޮDGן6ɫpwj;|gz>&b^c0Xv+Ե)1+bև}8״eDö KTՉEk~E0ǫÖzb974mvƴqdU`U֩zpuV\`Dy4/9r͌X4 ,9�+}:0owؼ) "<'9bc@7g";X0}I9/6J9ĩ1sWGϜnu3ϼbuCw=pK>/ [H#&M`]c9TGq[@畕l/+^40d'7u\ xgq�8]r^h#f^pV Oc.};awN 1 /ęˀPg>aN%:G7110:?}߳Z^ mW1dӼQ )/ u3mD;Up'gL;iVVn �^*py5 6ODgS#5;p/9ǍPj4"1:oZ9.̻֯Enb Zsm$GL]?}կ%Hs%>#s3\\`Ǐ&xpG ZifY_U[|#w>疴ƂC[W7zvbGz{VOΘ'&I8u-qJh,xݩʅƘa8sk sBKL>#|H|!VpnΙo >bbk<.c7*?ϝC%/:?%Zd9ĭ>]|"$8ӌUU[-ra <P! Lm64ʇl ^B�}lXl-`Mlԑb=&3̉SGՉ1q+kqn }k܊1G:'KL:r+Y1pcsaTL[93>>s[08->ovQSnn o{.ixo笜Ҟ9'NE"OG^>%&zz.o[Щϐ~3'sبW?b1đ>ZFo> 8F̸U9SGV_RϗC}ǸZܚO.r鼰hK{إcVVVVjuZU[7FnOSyDvMvx=Yø!'kmzI#sdƊUS9+$!Z]U1bĨ<18TfQ0OjÇ=/|l&Z;]2;'lm}SCTψeӟŹ B<|X?/=<q?c6uq5~α&>Ì7c|luv:frƹ1͋}ٌ[cU9z%FL}+&ߊe? (+'\6^wߘrb_̖7O.1**pKU`�N:UWfl2+l fQfyÖ`Om=O\@=0k`>aQ<bGEl6ר^1<0QP1qפScF'WƂ/5<r6{ E-p9c7~I \ωzwVKhA-\r Mts^p-ǚ3klb53|Dw1F?0]$Q=w!_.9O)7&;~U/{ hk`x-OIpckK w] H_-V;pW6=ΆgkÍ۠]Bl6O͖a9ul 1^~,¦& zahL/6JcW;<0ıq|msMbĞa#g W xF]s)pcwgYnN)C`9%N|/$c%PKΒRUU+nϦ9I;Λwyxgh=kk^#'F 1 18ߙ~ r'ϼȊv򵃋]S#<⺡W _c]ƑϹ:w݇_k/b$(+$F_,Y3!BPͻi)4cYVVn �U k&hvHFfMNAЫOx=Yp!V?~,)@w=j+f9J9XGsƁݦSy3L6}G Zyί5VqnQjYL17=5?>lo3C"4%G`p{l#b\ӏ[Dǐ}-iS羝Axg};;"NjN~n&&S7>\1<$3zU̵ͤ> >b3 nS؍%/W9|H!~WWZm=C&='-}{X~-aܮl [XXXrU`Ud56B8ˣɑMѮ5MQ@'ony`K c|{7lh*]L&ͦSn.&O9bnNt)?lƗ'x3)F)51:1*~Y#Ď=92ώiINn6u˥k~ <!먝8?٘ӔKŽa|9/ Jձup1 G˨QV9gRWވ[_*8lb3[䬣0mU~o=&, X{[K~j8ƇȟyƪiRQʴxi.}U`Uzp_�W Ф{StMD11LH 'kw&/. luEх ,)L~|qcʙQbg'܋^smen8:SOy ~hW`ޖmJ]RVk#IF389OuT;>ZzݻQ_8oyOu3p1afc1ôUXc3΍i^#fX4 D]r]9noqN)C'%Nz9ܝszM隬 L ]*Ps-e6G6WIh px`?oR>n1}l:m[^1ul9b5</$bWʙI gF8Hژ3#xmO⯈?�vR<Ka;&;Us$YR2J"YR0\v%l%/~;רa^D/kẈl}Z$1:X3~$er9Ʃ|wUwӑv{o`) 6o�,!=yx!jbNO \XX*^� Y k2jC%J-HFۚ Smv cOSh?pܽ��@�IDATi�ǬakarcU?ptkt^1yJ5s)YL3ͻܚsɛacΊ1Ğ_7?,%[rΕ`_Yx`ӶSCS&9yN3/]ְcp1FOy>Uq*ׯEgg9b#G>gV9) aQjIќhތ6^;yݐYwvy<?c:&.mU`U`UW`�XªuU\asE@y4@ X~hvA?9لy<6#oKm mZfo Syb/5s;æbڪ4(+gbqUF_9z̯/bOj >8G{~㑰? <¾Q7,YgCN=a}W9>9q`ѵacaűMO%1QZ-ʙƘ׸b1W} 3G !|ș_õ)GW؛Ï>坦7Y&a6M'oD&?:1+q(S!%WVV.T`�P \VsMMҩ.lqjzP<wj1{x#a6 < ѕc,yS:97r*_lra\v\&U'ƈcOup]؝+o{c/ ؃N;b �.XHZ#kziJ"ssA̜#랇g_?wɭ2ԹR,y:g883 k'&nYN!k3R_0cT?u}-~AmUy4"=<? JG{Hi_X/�ĒxlP)ڣ= ijJ\iM[1+?nm1m> H3@\qͦkƙa%\F͓ȎsU2)6W18 |3L[m3v`#!8z1 ;Nu /ǹscbckg/F&7LNP.L 1b#&Vu1uΰj}Q@ɑF|c 3c07vp/۟H45B6.XޅҞ̠N}vΚ <X/�jXPε(6Mc ree6 ֤vbum?+R ^XFzlfp:W?cL8#6!e/ۈ:kUwȊs&|Q!]/ã/zF{1G26ʦw[ qsdW5^Y:r̴yv6cƸ;Oi8\S:׍>b n\l䀏Xe>8 yH)&+ǜ3o~ 8FP9SG~-o>߽<"}.|{ 87*s5%u"TM1"'#F?K_XXJ TiqVV8ׄMhcDh:fC#.qOB)4mO漙"_~| scs ߹糘bg_5gԴ&xfbG?bC zvc8<wq"spz;lP/Hz}Ҁ#q̎k<ʉC!+78)􁛧* mKPG:avب3 8nCa΀3Gv iQV87&>Cg3<uf~#e3z2}"|J{`n;fKs33i X/�Ɗ,}U`U*pfdIK{hBfodCb)3:XGE�Æ?y%Q E $ı2 c[淩Ej;Ub93bȺ7ΈU<k0x0F>CA<j^ez~DZ W*g7 m=>\=uaZ^2gXdwqr 1]]n 6!bخ ۨϰo~yO_Z~]&ajoz9-MvݥwFL***p �W." 'cu;ۦh2fٰC.8'F76��8fr&5}l͏/~lbFl+9ΘO:;f6s;WʙYL1#foĞ/nhȼ") ;[%rG%V~ʏQ~R&jsYk۹aM~ЛOqξpͮ#^㵆qf#bu>~n q3L3>#_;1F}1>c�'z?S9a{lq`^0m;KGndI.xo.]PZX/�.b \scoh JV0"vf6a ~8{T\&+\uz`C?b5^a>rgXqnʹ4wabfKu#'_?,_g7mIve]X{\ƫODTKD4 rs~ҞO~ك]^pؼԱ:6y3 ;x%Qu|#fQG57g<s_16U?:#][w/3:;els;k۱A0@8 \X@&Ol ;{j ~bQ_nk)8~G.!(4A&؈FUsaVkbm&o*̰zFlK Mb/r!㡰#�>ϿW&߽8c|\"+w)S%e`4CK6xi $~꺼ffш#xc3?qgk<k,VsԵ)EsG ?Lؓ/k-we)[bw;XeǷ!| &#Aښ29 S4L5rtG׮%)Ptyk:C G= n6VسI Z{+~Om> myuƢ)]AUyS1˰pj;U<`>%Qz!&G:SC#l.z-y)WS8N,Ƒӻk�_fsI q:qύkp>^#k _F%ўhO9r>r*ok rKL*Ɯ_Zr?Ub՗{^`>.eq԰.yA99 늜WUn|U`U`Uf*~f|WV.TD5VCQ;4_!{3Ճ-mzoODcD'g�~{[m>h|gmM&/g]_183:߹rSucۈU<j yBw+g=pSswmcoy"WErq. Շ# m8?圄H~OO}zѵ w֠kA;|9f* <㞋9ra~fN|9UWۻNsd`k_Z4ha]Fn8yP\Kʴc0'***p �Wb <@ؚ>)"I;sl#K�ylX`_ჿ;c4jtɻ >66(5[]ߝy<2v0>0~09Hybs6$8O#_*mMxF0&9dT~zUܣMl0H-V7{G]6^GlҧbbT©stƜaW x $ۈ .Gl8C;&gfs39ywO�?ca7lԫC gn'|%k***`V`�x0r "kīUƼvy2iyŽliK,<0Kcȓ`ۡQg6;̡WU1 #Pi9#7`x]7"Bbd%QJ:u+H_ZC%ss\%#T=xm?9q]uͮ?:SzLvjO#~ ~M,16U?ss>GSUSs[|75q[A8Ḏm1QGg)7R;�njgU`U+@FSFsmdd_c>z"dnk {pcMk~p;g>;b4R 8ԇ^13WNj,R9#Nlyb^9|TpGLrqrfO| O_;5(%XP+,{*@}P+yH"ͥOkH=y]GļP꼺p6< 3fSU:_Qyk-ĉ\zm7,~?A 0)3{vq Qbڭ <X?`V{Z*`sg)l{QҶN%7r^7B]lcpxO$yQq1J r/VS#>&>_~!%cs6s>Ƅ?xQ<D6g@p Źn{j-wt/V`5q8< Ox]l0n5P7՘7b#fS!1ulfvDZroUǗQu:unsgXy؉!Viie/m:9I+(3҈.}U`U`UzqEYXTTct5f@- >h'@Onw'%t!A3Nmh+TXcB1t1ؼWoɫ nc1C gbO}9 ɣϑ1ʎcլ A}cTޭ8{;'R{U^X͔9̞9_p 4J HCl>.3T$N.6rGbCNCOUe3u.1blշb!/=y]syб3P͝Ο3/k:rR;=\***p3X/�nzwU`U+5;両erDXhؤuk6gkv8[yxT7)) d'U9n,b}` 065~09Hyb30iҜJluns1G~ |c0_VƁܥϻ%9(SHWe\o0vj ܪǹj ?3_]cyw:Q' '7ס/:,c֙g̺C?xHUD >n'IèrxZ,tg-K <X/�TN;6~c1lďJ5Z}&7a#}wӇ̍tNJcaɭ\s"!< E8eW^97f+M]_U?0'=y0!9$R q@7%oUgKԹޡm;Yq8OzU75&'ύ\ƮפT̼1 }<DǷn5YL1Vel8y:rv?txO~gȨۼ#1ٹX9zU8a8OC,pU`U`UF+^�hߪVڄ$kUozm)2`3�OC?z=oA~!F?9x[N1ubبWk3擇t0\(Ç1<r̓Msw!1^]A3}ꪈ;-fg.ykzs0aqwO=<۷^F${W觎'9g[rΊiaڐCY1yÛqFxc͏OQ`^kHMzϠ|˰]p;o0O(sL:!<nU`U`U࡫z~e^e*pѻ?z4p<lb/N|lH-[÷͓f\_m0Ŷhrk#*&&M9b"cj˨ iQV87y0prͅ'6rGbwIPd/X9Kęq%I,k|1w; |N\Cud.?qNk ۈ*ƜADZr:+.UXƨ1gH#xx~3lXYʹ߶|M.gv\=y?.T| rf ZUUUo�onkU`U�O}c~/͘ZxPo>}o۟D84{{WzF &3\^9W7 vx#2Kx:DᏘ6#6u⍘:6yb^9pI4'<^ݧ4^55W`huR;x6]_Zx}cf ̪ymsd` >#5{M>u짰pobU?qϵv <1co9؍uU;_?}_93Ɉ/p1 &' zmw̋`k***U`CTvUV�lFnf;k X4[MG<26ey%~8'~t8є֦c8ٰV+50qSY#ü S|c=~1u5ȓrV8?GnNM!q9ȏ9Hlof}[:90M9+m<s]k_y׌x#Θai9뮭mzmOa5r\U;ag-kEVL?˛-M6ȯvq(8`cfc j xaa7]K <Pؚ>ٚ1}1Mz# 2Bpb#fIox:jl`iv&3go}oz9;J1G~Hb` >>#G?1d=ч'gǣ{Wh2AI;4F5ڋͪfϚ~b뜻>=1<5uk wu5^e6%>u^O̼#VcswSĈ7Gj\U$9T~o:| ۿ3}/6`ieBX0}.cُy^bU`U`U!z𐟂U[{t|̵;k_)k1zs7m>bEmFkVFS)!/\q.cΙ4NX+OLŽ9LN+Js"ϩgFGllͮ^2 `Mk=-̢΅<V =6^G/XҧbaڐQVL1<f3cu~#6ug5c{iوuj_~?Mv0i?FVNĭOU9ƚ <X/�zhTfg ӭkc=n~pӀ [Xl8Ʈ~'{? 'ͯ hr>XW#mjCw3΍ca*\;<b#|WFQ11O�(ڎOsOٝ_tuU_n`r\R<ěLkk&~+i՚-WKp �qu_DxU]]t}ݿyT o1iC->ocTm@RN(9(ٟtUбyFϋdLqV!9d$cS_c)'s]ӌqjɞS~MZN0_s?AW]HuΓs|-&hKCc)@M5< T n�<Ou#w( VL,'p~-VnW\yA96M;ᇏ5qEJ=(E-ᳵx!60'1w.1?pvYL[jacbk9{[>NL 6*y#Y^RYTYIs؋h[ܱIZ!kyGnm_k^3@,@ϚײqeʀM6+c5Lq\`Ċ[ì_~QGbj>Ռb[s䑹cVKS�ԭ?5Cq[cֳ )7�LH g@VeM3zaaB-s[0rc%S<E 'Bo+ W!Nmbj'2a#bjwre$jO5<8Td?=l8J gy`&V}XoX=&{kgI=$0ت`>,S tl a+8*ʢi2uȉf>)oA89m=|r)L~qux3bU,֌Z>ۖMKWќ>]]x]u򪦨%^9} 񇑝;@( \qA | =2=*,ΰ6kgf ;Niv"/5Hm;ZM |r Xc\*_ӗMap-n ~ibT|Xv' ׶k`S#ǝkgRv;g۽eq&Mͽ2- k p/\ɹF-ms^ufdas[5<m.08vj+Vicg۲qxL6bCA3ǿ8}r'*k~j k\%c28Z8Ŵ+XT<F( C<T@( -h:*veY8x'G#//}g&{kk _җMapTS0Ud0\I-m&TNϩ S: OS�͒1h][ Lɹw3N,:jJl[L mEǬy_~3clj-۟[xrMO?c|6xf&Ŗ#da%j {ُBt*?\_4sk6/<QBP hE? V,:%8`WZe1fEqUjBlM [m ."rC1<[{ R[Ei7 VpSǘ|y? wHK#ecڑ]9G -6 | yn{8ع&p`9cKn0qUa~X TN1/rѠ8l՞ýmSwO(6|ʜp5S]Pݷu%Jcv0CP x> kd B3P`j$Zea2//.flqsMW۾bX>~V~Mp0ϱq⫈W*G]0ZM\-'9|,Gy�îa)^|k&2;ғX=maL6l߮6#iOR3e Suךkw^\k#0b?&k(b Fmy`flٶlr~8>N<I[S16NǼ]'>z_J_*]F୻ cBv3yJs +BR n�Ma~,:%, @lxxSڒ8Zp"/ޅc c;G-ű\S[Um$V~փ68l L9a֯>oa]XIw S( Hk$ZTbCK=~~ع_'S;VerW6GC>^8c{ܖ\j:~WW3?E~S*HXN;G?-zWBP 8W,򂮬r-3Vg`AXOh/gs|Tvaʢv jO[<7U]NaP se\Ma]gXL`Z+yE=f޽S/>ů8y[5`6z>yĹzcڵs 8A|->0q5LyGFc<ھ?pw>?gdj_Rœ_-s9BP n�laIpZ8S]6R�5b2/=RJ^][7NM-CE偉oc,t\I-m&/9-Ɖ9y'zbojƮvqd7Γ_rlVt-ڗyv`EP#߾$Yq�0Ϋ)L>℩>Fa3hrO1Īu f9w Ƴ1 q GbHO_çvjQr+=pz)OѳmY2$�98P UprGg@(0W#[`uYU :d;5oc.Te[ ;OaZO cpS<j)|`>p8UdU+/5r7֕M}]6Pjqls1iax]CcB+[ͭt\9c<ū=\c\95}RTNe<#N>a6cliE'>:a V;/Ђ w� 'f( +@�XC 6_e)akG+(</Z ˌB5G"W1,l/e!L?0ѯ|~y )x*&ֶkGj5űm[׮77&]e91ܖvjy# vҚ9ٸJW}j;Ё)9lL[KV:fks5˫QCl`c=F>~j!q5W0Vzc,v6P+`w .Sʑk C-WeHʴw*2|@( qll@(p R+K %" m9$^6,--rk kec"cp<0[6}ӯym y|υ->k00bYONejɡ&[ /<Y/mjKf} 4ӱkBLsε>wqa3F_^0908\T1r[jr"pdc~ɋMJ>-s0#_ׅk|\F2vSH,�+Z@( q`B!P8!ˏ7p]잏˿yŧ]f?+dh#Ƕk1`_ƥ<<V800~p;j0Щ0(ݦU>-F7an|,8H$j`VٯGgۜ'yg1b1zO55D16zT϶ق\08c>c^VM8lOw^]zgt7nͮy:vs( @�ؤs Xa~ ,:(L- _a~(^ ]?7GdQjg1ضl䴘*S'M1}~1Smk>,ǷI9m[ɻKm}=ZƜӴb9$ukewfe`ٳn9\s 燯pqǹF^(n-a cyqC-X!FNZ˵<O?>58x3֙کf43=,y}n"aߝ v( @( h]%XzfA\k$~^Tj)r\9.<N8DjW<<#6ՆL6TA nU{c>#~͡ɾ~щtj i*zmv<k ,U\mB^T@Y;6Am] i}/`Gcp86cU,'yl^w,S1 O f5Wo9Np+)˳j+±\.lux":(@(  u:Z1P`8EUdoBdk2m)?ǴfFdJ  ݼly#')dȭ\`q`7E!blMNjl[69rzN-N?`؊ݺqݦRW.`=;*O +8O87^F}Vw1&մ%?=ƩSB\csWT-Rg۲=Xn?ǿ6\TSd 8 :E-& BP+7�"a)[Hu xԽ|Ą%a&v:,!͗ c+d& _U6qa?g`ǠX[œj51<!8~On#|cqǵ{� (NwVOgFrVIɲ~Y2܉Ы+ .0z;#s'L׬媭y<0ĩ"۟ઙsApdcG7bUq6q 5]'Ք|M>Tilhv�  *7�VBP`c'Cv,p*<1ur~awkX i&O,| 9SaY7 8j5ciFnbe9XV L9x N>jˈIOs/cys|1c1#VO -l)"ja+d{~[[{5ǿyg)>7eZ\�O<υ +( \.._مE6!/go9_ gڹ>}OWϻ3>RE Ul0<z6W&Ok}zl藹Snpv ~#p[V>tQL1|Hq]\ S!fSےYEͺ'_Ae4uvoGRǹ&?|c85Q{YᜱW,nyy4SaG.ɞˆS`c?y/Ks?ٯ 1W5ZjمYڹI}`G *(�XcB ؅_&Zܕw;|v)O"V19oz_8-\-4 q^<Fj[mYÄ8mϗmj9yЧ6>џl<Ռ0CQN-*֟/m=Q95,fԵm=D#T%\O1'̶k_&|:Gm?btAlL #qĨၩF!V6mն`8k~ʘrjN6>[ZgMX�lh@(Z '�VxhBP )p 8.zl `Xz:R \+g2//%^Sj+SX[rto]ͨ]ĩxmWy X~fqîq,,P l0qqOqkq)ƫo\E΋r:uj!sx[\,'X'uT ԅĒ7QrVs7G55Nۧ<ijy �q/SEb}`xU)swOt]ϥ9f4ősg1Թp'҄+B3W >pFP X[vY`ţya:5c.n 9@8e]߿&E*#=k0 }1,Gm}ڔo\iw eXH9ʴw*r}'sksWG5 &>7us|?8Ǫ/A['0l j16tSܢc嫟ss|si J*<\Y},V( @�X B� n5zy E knE*N aއ?aKٵ/c;6b|m9Yl<Fnbe9X]ÔS<xjk۵ \`skVm~n~9m=.ޯ|+3cs1eS\31әiu+{s[�~6m |5 XK5mrb+d{R>W|5cSa fjCxǿ\QjO&HWALn IBP`�+~bxeU$kAOB oƶH_q*xqfOo;*ăaזC0q 1a ' 9;vڢSqPk۲a-oO)s)m[ˣV!ۗ@ X`m˾ַǝsZyy2ƫǶy}%cͥr^8 {#>8/�Y<綎 pe1p.И'ᚰh@(p. o�I( ZƥE`eg^yS-'7B5,&[1G]+[E6ZS,OāyƱ*<-02c#F1 O󹮽^�j{$ %OCp XE7(X87c9Eb0prb+ `S=ƳyԶEcqm.0j?j;/ٞmc=&{O>n^+RZ\fE@WwF( @|`o.8�TZ }{T-m_ yϐGI"ZۖBW>Ɖ?]Acj`cۧ'}Wk>Q%Ύc bkpq׍W_ l5նϚɁM6Mk8ϯWd8b6͐7^K?8pX: |-8cmNOQlqyL>16b+(Iby ǧ#\40?[HqNCU:_\-{w<!P rɛ��@�IDATVX Z(pВ3R^¥' Y, %/?ZK(}%9ǿxD cUڙPmy11'#sj(8ӯe16(*pv^zEpW4@ (CphY8h/]iyV{Zض|_I7pL1Pns�q?\WV=1>|')Zc89c޶}[�r u?Cx'x@v'u\l,F )�8?P x 䅚˯:LIv .ђC})qMg܃me ]ı<yĖ]Onx`)(X ߲~ŷm>/6Z8z\jNld#L5w7Qm2PaAH:볬_6N4Եrx]CXo}f]*s, >=yOrZ._cǦ6Qcv>C!N1X8ȇ8a__Rϩ4#=5Nm-ǃG &)�ؤs .ZKwiY)A-z0lZt谹UU(2U6^0lSm+G_u ~&NNrZ>Qemmn*CXvo|y%=ttu:Zee/*˯i^*7|+wg{Y,<=X'c`C_V+Q9ÆG{Օ{k&u.?.47Jݛ]'0P Hj(p-pLZ\ʣ, " ņ/n'ĢD Z\m=<D)Nն`ӟ2cVm&w \*q1ŎZ~FH\YOd7~i@r,8Vx^%s.wͮ)}c+79C"kpbT Lc|Qɦl-)"jV>l.ƢX.qq~tOc)^b+GίF*F.&;dZ~ D **�Xţc B)XZC%*, Hhɋ@}ٵe~Y_x㭼T�hs<6x67j>6S<zXljOˡ_poO�9gM>:UB�ep:C-\Aƛc N}1ڟbmdyqH~=G*;o{V^k 'rֿ0BP Xw�~c@(0~݂ή(<e#_sM^*oz<~c,"v S&-Y_�+bնyW f|>ռ4<5LlC\*|W{[nF۰~jasX"عvzOL_}cֹνe<8v\|MqjWlfEeL\ F),�%HRyÞ}I<m]g6ǷpT@( l ;1Pr)Ŝ$Ͼg!;/ s%˧MoDM Y"8-`0ap,ck9Ż yL6Gq 6j>qw׻9σvk'NZkˎI8bd;sLq�!Ʌ~zKkrQ*fՆ[1LϫaʡBb}\-l�uf_kӐRh=.҈Q BS n�!O-b_ h8DڢN 8mr>i3/avx4/?k<no0ccQ[2۲jc89e[i1xrc0_Èg̯;/4p(G,5ƂYtoi;C]aԾ^˚c&k9xL1- N∙Gq(cU<c985yU\iښ}9E w`RM#P .\ @( ff6,PG[}gai4bx6a沅rC69da S&_ #ܪ=O5<0rSOjbKA=5rҏ8XNӝUu> qzzN2?fuܾs7ı9Rǝ:Oaj'퓜c01V o,%/y}uJ3ΤdV+hBmIR2/BP ɘG( diE<jGL|c2w?wW 5ZM qP<&[WÈg=Gq0GbUvۧfZ>ۖMۏ01εf bK5g\m6X<|Fd6[;9υb'5F~jl[9ks!1f_cU-'sz3]?rИ;kz0Lˈv( @|`se$NҲ/}L8b+'vQnbş~"BaAcp8,s ,F.j-U]˵cVa 670 X  ''S|.5>�jeS+ qQ;f˦\e:?Ep ngi`pɉ-Ǭmyrg&0Wm|1yԏ>e{Z+~bXVnKBG,o˹BP`�|tbl@()hQ_8h,Z hn2wֹ?n ?xW]a8UG81jSNaP_z brijx6|՞} mp[+x16y鵦ytuҩPT~ͻs :b1d`px]Rgywe˯ ΈC`9"ky`yͪ9`x^ _<Ʂ޻:r0ˍ} 6Axz{܁U @0BP X%*K( <ZB!٘Z4j3"J^H:xҟ �m�Zj-YxXn1> 1Zoe5W[e\ja\=G�beGv'w<b1GÎWFӎjG!6zҫ6a5lX&<6n&Ngÿqӣ?L^B "ӹ.u( @�X# B tr^R \Zib):bׂ>ov^*>N]mrl6mY8PĩlzN-cʡbc 2|fl/Xrcl%?qj+V6}eA)|$ܒ u?(}@9m^ǚ=q>\8O}џcm?Mx?i^i+Ͷ6:dnz^~| 9BP`�~c@(0K-=G^P`e۵k ڂo,a_x5ų;fp85lq)N?-m}ljܲU)8eBˡS7|rL͋ki 81HևN�{q9?ԭeGe=G yU[N^g}$M)�2h@(ppπ(p.ۉzZ'l+m( 0hGRm4â^ޮag(p[ج߶qZ-1zrdK{J_h5JۍhNjij\LieBQc0l%6|\ _< =&G#Ɓ]\Eɭ8ԝ_׎lu+~6\2h@(f '�pCˬiv/-@ ORgBt(~^Iɇ]آ_SA <nõ mp[gc,<#6=*sO.*kmZF:Ӛ/O"qCt!]lY ˎоzvw9l0q<1&`S q*�Z_pվ (@@( q`ՎH'\-ME}v.#/0lt m&�je 3զ10pbsYƪ7jOm9 w  |~a΋LN):\1<#دl<c=?ijqۋ#6( ~ͮoc]P_8x BP`C�z`cZU@+vנZkbkyvo,7/(Mn6˩m*<ن~,.1dOzcq6r8(c1roPN"CC4,nP[3֙FۢNyd*.g\y;\at7Ʊ~QO}:pN):Y-*-mPqMs#BuV ~`^=FHӢE2.P۶67]oA|xV slهaĪsȧM#Nacm>>ɥznCmqI,l`F4-~kv3B%sKm-P`Ӯr >y>yaV+sx0j0 XH@( q`mU 4U,n$(/ _f3"j8qlm.(1aq]d\%V2[5mⰕc;_vGBs:ź$kШͩ69<w] W{ծ$x^U/z0,_#9 BP)7�.1E,(\�F/9fCkلO1Īff9w -϶fb;V~6sj><5x*UƓBI3N33ZN3^Ӧpx<RsQ6Cm{aQbL雵k}V( @q(prog#wRqȧᕔX=6zv#~cx`6cU,'Ia8jvTGeCF0prb+ Ggu+ eʯ*6 -ÿ؍}u[];{ɔ^u25*&Nѹ *7�U,VB" ̮Ӭτޗqcۜjc7USlX3QNq[py#mϩŁ_5u#F<۷R'ؙȾ>{ƛ=&=Ǽ{p?8@ WLJZL{=;P 6G92f (/TLSOls [ڸt6lI!ޗ*|ld[bUجmsY[m[0WÈm q`8joCl`1b6Vmt#Kw3/aCVϟXĜ'}Of'wu8$OpWKO�_A h _m&OkG;BuU n�둋q,".=d, {cq+0ŲYUs#L<$_O160,5{ _ˡtC`s8uNwF{ ~޸顰7@'_tʵzjbbe9p'V( @�ؠS BZЕwh MLgw'`](Vp~+�7f [qc85QV|Ua_y-c,4S򬭶jq0#|dVΫifܗG ^_^UC|`nػİ+ב+3nI-OxP 6UG6  hWDIgYHkΛVd1o_X_z"j?^K? ''bkWvjxW|6 %XȎ2!7Ϊ{jk1j t}8N?hQs}ٗmfd75`@( \Ve=1P` I17M}ڠ9<lvt dV感8p[XM?(Nk8|Öïz8Ǎdmi,5?;ZS1q*?E@XoJo]zٴΣid BP`@�V( \p&B{Y]艷+:6ylҩl8`WX7k0qj<Ԗ#$eYl>o,Mɱ|Y ڳmN7�fNuzޘ^Kw V( @�Xc#B6ryPMml..'iExO5ךrv#mv�lkF,ŦV>ۗa8`s9||.0rca֯\#e _>V{zz-Mέs+,+|bVhs4/c.Z/- .bkt7 IV( @�X# BsW@kqK }s6Gtj9BJiVrZjc/򬭶jq0Ns%O!~X?<*[,+ ~^꣜?%P<3<NrK}YzxίD.b]ף@( HA(  h�6f')l.ǸlBntickr>MP[# aU ZYk0ҟK7[j(#=0E,Ab6@( q D@( hx_dڛ#7�xZ`8`p洆1l}n0qj<NJ<1>-<9ĩlU6IgQd ^'5'�]s@B|T/^sI.;BR n�lɄ@VxS;h7]ljb^xȥ'ĴՍ91a%o.yU{LS!j)b里aVǼM~c:nmO`ျoo{MN]ߖ?nظIs['�31PRS02P V_(F gY.4G_獪cͩl09ccSS8(^jbŐ}bsjq`pWv z W+W?3ϹYǼMsʙ|Σlmon<>Q'W5q7ʆqrU( @� P X}}Ѷk#nv6 Sd[L6 LE7@ 1ؘ\mjl^_86X_Äs,|n�Lmg_LW�nI~sio<Gz%s{CG @(+7�z- �9+Nl9$;>:ݰd#JϺ9Ur| |*gc}\HO Z>?'aXV,&pU1oqj<q'FĖ$}"}{׳5=O<'k+f~<ོ׵Y/7u#�Wl]jZ˧Ol[ۭz˾"VW}F^Л!g"B@�!6Z-ǪӺqo'Up_n�ͩаX0qj<v8S46'x[X<8նxijSB^xmӦ!*ËRý]פÃH_9LB?Jn>d\9no&zO7[): غn%ɐdBVɨBP`�pb@(tnlHkFr %Mr,el ''b=m>&_|r>eOav\S_l NUl\IF< Qpm5#JnB֎nm>n*lV+E @��ѣP B0JOR6 G5E1āZ|- .ʮaGm8jWl0q<) y? qwqmNņ\p ,˺An�> I''[w+́| $h+&t!J( g@\YZ kݛ Kؐͧdͨl6V,0ѵqGzLx Æc`Ub{EY�I:n98L:mew\!f(pX9qc8 7Epw(_(o[7.I\.7 T+ QBP 8q8Z BKS'ViCITajs*_-0{vF65sxP}%\n{kc7i:owO9}-;N*@$*pn-;ټt0#Ku+ aU n�\c3Ba} 6v;{1WrVmypѯږnɯC6cJ~E$C~m7}<:mF_}\:Շ#mtW ǔ9>S· 2�&ȟ(^77W @ApM#QBPR)7�.ɆV@Z O?[y<mq('+\jOs06Fe {:t ^ӴXzRޡ^߳Q~ 9Q'4 tt?i1H7�lmݍ|F@z@Y.P �ĘB( AUY1]eS,)/Zl-q>9rXp~K%_}DӲO㴹?|$˜TB5+S)w�,/xEO_n5kN~jtFC݇U n�V BP`DmvkK:=&[s< 8po 9bUXmy(׆>Xۗ>su6ى_ԠP 8{嵯Of@1pFoOٚuCP`q`LA BPgsJ hmxQe)<~x7l9˷e_r㦕n6z]|}d_t+]~[#M<>& w_ k[fv{S@_' (@(p ?1P   �mtkj`~cnMr(rֆC8+ $mϻ{h:]}6ݢ=)Q4sWy9+iS@ asak.A'nʟ?~8F ĕu_>VL+W7`nxMr'_mS_S<(c8q<'�(q{OwuNs4*zxV(n ?:?I+/P~0}@0J( q5@( ,Mu@Mly[1LϫaʡBb}\lVf~/m>Z\oBэXmc(0�²2F{<LEdMs#]77۷ҍ BP k@( 6uJ#nr9z=7Ċk۲?8uϪM˲W;~O�l}7 \I0O3atc@ؾy+5U 3X JD(  7'�ta&][q you_O|}ɓg ?7ckѩ >q ۲p%/hMҽIՍX!>oO AP +7� +܅`Gʄؔצ77g-~o0nG W�҉V>>~y_],Ħm=N_y WUVmfq3a>t~pP@)O lJ7%S n�\ .Z;4W9|{^QNf_M~绒ޱ筴я?l]!y O�h'|OVPx^ctS عs;I7ğ\C?qE\( l d(�Z̻j|_v_kf?mNV6O@ݽM(3@7xKu= 'tS`۳-F)7�6pdBP,]|ZGүƿbf?><j}+]'gӿ2\sһvB9nm{Nlp.v>mv>~XpfG_xvS$V-f u?1P � zDTRqÃF7үOM>%h_Vڤcڌ>Kϒ2cjw6y1Oo꽽Y\}v sW't3`' \QΟQFx( 3wc,wf}g8L?y&okW�_fix;$;%֯_qDaA^m-7�N:J{>i>#fuo:UݧnL(J(. ٺ.G* g3DD;Q6K�Ho/&�qjj7ATGkq`J]{n:jIG8Ql ?0qܾ1O D VUG& &nw۷sHI:y>}7pNrVW�j7 RɓF>͟t~\P7^7Wߑ78qऊ?6V-x`R@ϖ[^Ðyd+b'50 Wzↀl?QBP z]>!?CV:})7�Ɣ <Jޝ?�vmoPR02?IBX�M\lj' 7Jv<?+76;wCvP�t +@dd3i#Q6KÇߌ>bs<8q9>0wO < Ip(L �=TW7qCi> BT`65^ }$>pejG;~:c7�6S>\ m}lɩ<z8)T5z#[? ISf4+KJ?*7tSnse;lq6cq6mqY +Oiv?_8=x 7�6 ch=G6vS@57�NZnZ?Ͷ=M|.M(`o-۷nB)>ik 9.i�ؔ#B>$;(ؾ~'jGثGdy./aw[I:᪰wln{v-S![SjwO=_/u(p AwHW7[�Fݻ~'#.ph�wbġ@(pj Zx0o73|FA >~h& 볔g/:ٯ5VW[o}y;�˵$@iwoCsQP ի2d}�{b@(0�+>@ ~CX[˯)p8fme*5b (U[yB~s>e{i97bB*ܻ~hN?"O}I(7�.A)ShGT냣ZK,5T` 0MUǧzYCY|WV+�g~LV!!7�N:51xu4{CT@?A~<j>ȟ RJnD @@(V uL|m0h;*;/W�Npw˗me9Ω 2֌(�Pt,K2fq6yO[+_P`Ч4?O\{εUz9*7�:W91y=!Py/+sQ`/s?l*߈-|G,˸^~ܑ͟cֱsSo}nkSѹyb0|s8pVY>w?`(x1 UL�$_:)I eI ؿ_n�,*lښƳyVLK`[֏Sqp/O� _]tV]aL?P`ȟIz/ \ko~;_ؼ#(n�ZD+6H6)Тxy#Ⰼ$~k�/n0hn,l)p0ǁ=0`D} @~I%>w;g~'47+z_n]c8 F=hIg5"P`_xg~'(n>n lb EM B Q@k86 ~z7Y.)ƖVMi=l*̈́;~6is޹\Z@s)ls⏏{ ,]L[o~yFmjud';Ńu( ѧ^Mt#`7 l±�pc@(+`W-:57 MIa} �Ɗ(p>֛t!ƌywU{6XK;n�X6}�ЬtIBe%Cc&mV(a >z> y铎̀W^I||afzy7�.ϱݬtZb1ї_FK>g˵FZ3;pX_iyAjzjOɗ{DD) O؝/̋Oe \6_MֵPe_xXC.S) }(\S31yͩ} Cz8H_O Lk[TwM%O@Z7P}2\Kxnfl:58S>&P`8kv?Qs,�H<CK]aMǶk17v l,n6cش-߶cĎ< ~Qۛv w$(p>9R"qX-m ,BMR n�lь@V@ @-ۏГ2a9|mCm ιw믾Ѳ$>C0-6rsIz̏NmS +;ۙ/f `0jEV�ta@( ?1P ,*PGWCr2&f # }ήFχbv2d[4y1̓Zc9cڽZpMgn&NlV->ML-O`@(4GZ!n�A!P~b9MUUV� nZ{�FѾ”o}X?�{skpis F@(p ?1/34iTP 8wŘ 4Ǥ6jۛj熀CxKo=X�Lpk6|[/[&`>`?g p-6S>rkqnNL7BW n�c( <GFn8c1H,MisfR7}7@;Кݘ챩[+Xʕkb523CU_6:nQ6O;�92 j6>ڡ@( lq`j) [^̵6K(Z4θl!hj|+dcM߷.)ey]'^_hMw7˦`oڊkĂQ[['Q@( 5?1P2(P[ٍ8ahh=~}z_cvWpTkv/m_Wy_P1D(U_{ƫWᕻ\|seݐ+\ ͡؜BP�| gEW[!pS!o!u607k40~QQli.XiBȥƴ{6R ~g03]5YnLXlzk1.P VIJG# glݢЮ75KUQlkÊ&(GYz�˳mG[j>K+F` Ќɯ>4V47Iwt27BcZ?Iu( @�S .ݢݘckZ•k2o7 l5A <aI-mXM֧zΩ!MXgG N+- ^ӹnĵb>u+,aN P P- \&jk/ޙҡn+DL $'پ1]in?�fVQrmJyo\Ÿ%v**+_Xmۏ]><qdž^ l6Sj1/,'@( <oV8sS`bgtSZeÐw~\07Bt~R(y[ySe!;,�*fsE{= ^暽q.6 BP`U�r$b@(L qOD n1hWm {IS_2M^ҟޏZ$MS`ϛݧwkmF5V˭ڵXvM ?'{<~( S+td:#Z;�(#Wԡ@( lq`ӎh' XMNɐ⭵r\ � 6?G wxiU=% q|s暵swjzZ}؀>�k;l0ٺn:W'Ԗ/,r9BP`�+pb@(0_6S X,Փ~Cw<Zśf, sٌSl:[U 9y}a7ݫPfTb32y˳mK֌)rSǃWY?r/6mjU{<BU n�\{( c~_W^o޼uS?vaSd+k]א4^Fkvwn2Mp֖}gTQv}��@�IDAT@(q ;1P`38ɢwYIkX\+C-!e<Ƕ6GV9|xKgod(6Sǿxw016iS[-[moYi0Vr^?$])嚎UX\e[~l?] ( @�8oţP 8 #(,�v2 WJ[Msf6}~Isw9Ȩ6A'|/OC]kisg=YOgOѾ3?A,>ٶm?zxŻ!kLkI{uG Z)jW 6N@Y-.�Qz'Qe{QmO4~aXjN˘q-ݦtwd뗖w?8ݨm_exڹ蓮+N<};sZ *7;Y( \-~s/T|#3f_}IsKֵXI6DI3/̳DiZ>b-ڙI8׽LuA1M.8{qEa \qyw~_;;_J[}`oi%z>(Z@( qD.BP]&ʋTAM62?>k~N{iQ'6|~A5lm>jN >N)6f/Z[2hG; kxO�t]Vr;UӶQBP X7o( EVm}LaOo~gI"73OصthlO>x7<ͥ1L@ t qI}y{vU֩?^ʩ�>-HM'('*@( �g&e$ BVn;/UWOd>J_Ǘa^{CME7 3;xx@ P 7ָAg_>^oGGjQm{8 9 o<nROlmǸ]'ЁBP`}O�ϱV>"iWQۿ{o7_~~0r|Dt2{ *轟v3c oZ%D yymְႌqwOXۗm[?}>|_P^?3,\ |0͎ PM%KP V\( \&n!U2퍂~Q'}WnP-TG<foFۖ2_6{>jde~~K2*q3klmUvz.(><0 BP`@�F( j.s^ȥa%ݏ<}f_ϔo Z-V͕w~o3D <~gi ٟvl[ XXw6*Aq,k;: \IP7 ln *'gg[uF;B5P n�A!A,߃O}nvns"L F$0{,G?;o!{&5ȱVEbVCfFO_m[wކ*}V?m/߃1L^υ265=?P qyCP+pQQyOӻOR{q_pf[q[ <y隆|ڣZ$2垎ʺN4[Ҷ~:~�)6~:Iv7pvwmTj 4P 6B+�qcf*aW~1ݧ͑v"-ull�%f�ͥ55>6kuQ&s1^Olo7庻Qo 'T{jd!V)iûS٘h@( '�VĸBK�)?KO??>bDiؽ{C9?]kt*pQ{ngo[m ۠Zl [ SIC><vKhm|F5*p5m8�̘19@(p^ R: B)`?|fi4_>ojqkvk ^2O9Q6HG?O6y{Ӷ^ pjka9.5vUG-?oCwl 9A[u 0BT n�qQFq/5Ofҟcq&ѲyMu̵Qfƭѥ9&uRLd)]*ǴYN߶YA737Xj1IP \5m (>}<r]J xkfj ɧB]eň@BP 8{kCP8zӟOqlSXXuuj?oo, dtyيQ6Oy3vWM=Lj69v3 z%^V#|X�('Z_ Hoga`,.q2k(b k<1=}6L2-ϋ<&D~v `q彞Uůfn\65l<->&&V/<cX 1sLW8Qow|[F{Ϧm3%z.D;BT YBPd 5h-N-u/)˲<a/}qs͝CQlOan4�{v &aֿ*mslڌ1SG'r6}}Y_57x( T?fy9s0iDG1`>Nq|YCP 8oZBP*5O;lK*G!/[_W+XjJ&o'b95m8G-H[^ [9NL,p"?ҌzC�<;{o*Xғj<SN l_j@( gU0CP`GO7}_һhI8ⱩWpƩ$VRat~Gn*=付)3nN-NM|E;h]ɨPZ={|l' o$oMxwO{`.MbGmyjv( @uGeR9|eg<őkb^OHWFndY�ʒ[ږ#Gs'ͭ_淿xl nl؈ʶP�TrOGNe{xK\|$t@Hd`H�ỹ  qz*OϧT'8 Q@ 3LӝNCNo}koת:u=޳vRַVUW9.vO?ؚ ٷ!@+ze+r}5 =_5Ɓ|\0$u4$Xsޙ T�#u`#.ӓib4Ryn_V|.0It;}9#Ή Weu*V<|o:qCd�7f)Aa�ey:07dn2u++i6ܔ1%:ɟ}{8l_z jE+"{bd 2X�4NDO} ^[oHl?7Q;^"_{{oJfҋ@,m<jvQ*L~5i#_m,e}7\/F,R?׎ţKNe#>>mm﷿~ȝn19N?'o/ \𤧥kWt;|zEk.he � ,X-}NMˊI&=q/OIcO$2?ߧ<iye+(G"Tf3eϼ&~+{F3ē'>Us(cfAeG"{G"Őx�BCd` g`tMȟ]5dO.5CmYb񬫟q?Пg:^/�M |}/|_yק5sqf-gC`^YXҞob<�ru`˪}WcsnΜE@d 20` Zd 23 ?O:r]ԡ8k9\@{=mRgop 36Z{>Ntŗ8qd`t²uץDE5ن{[Cؕ<eH/C`W�=2ccL/ _"+cHF,DS@df �#K+.anYϔ ?҉V>0@L."_=푯29ҟ}f�Se7'M#,o3 =M8}o 4$0{ cf,7~NPFE3pp p8QX<NG̭a"@<�8VDp''rcǡ5'@Z H\{c|_?ڙF]etZqtc jYg"Rq^Yޫy>9mm~{?6Su{_@NF]g8Cǻ1v\КNŨŧ9;E%@d 2p\3�kc㑁ŝE4~?_Jf{M~XC!FԖsvf Z!:yYub3;_zdBQ#;QbTZ%iȑ[5=9Ċ.قLɫ�y̐v__?ģ_~xۧ�1 qc\"V @d 20\p vd`$20}p&4 &>qeE{R,|uJ1Af@st֓Hh{7,0.i6ۭxNl /]0q%ÇDpp}}>rL:Pr6dG<zFn?N"\3� , L>n(ir__aok(}dؽb-OD1<lvC3i婧6o&|�I$>F_rꛁr R35,S4qLM=ߋ?\B; _@Ø:NǐXW?E"%x�$NSdd`a3 iy'\q4ȣ :eħnr5)3?EPY{UNg,{XS LemŢ̫010{M<ٵ۰@i}7x;eGo|P^ƺ1!!ȉ\SbTgZk71@d 20`:-2X?wK̠okUnVO,MfTz|_uw2MS Hd`_j2aZBǫ)< G3bE6ʥ!AK;aTVk.O:~�r|<dBZG& @#@<�8v-EM۟wAdmR^]Vyvj^?Y'`іiܑo\C|vRf=A{ŇB mx/^.D b<tm.mh#KS�Oekϧd14vnqMKd 22�`Ȅ=23`MVVMpL¼k*E@1o]m3[_)==1d8nL=[ȳpm$LLz/ 7@v侱_[#3tWޏc@VU+gr`+6G Devl+2p<2 }{QE}ȂEɍ r&i2M :ᕟ2]BPyKYOo}kz8gE#/s41W8 PZ>H|N(2(+ ]]wy2pKǯ7ܫ,+g!*ZLCC92 @<�藝ErmMiH cޝ/)$rK/wj>y*y:t鴇<l6oU! `xKOea*XE[A'1<NG \{3}Q~ dޔq_:8OH_q0� $ z_9`$njs=*dN)2 x�0XX:E(̀& }GC1bj}(?A}C[wiЁb~TZ^1ꅽǙ6+{!sMy|!#__8^GdRLem^ubtbG D"+�xe> ۬ߐƷ¿פ7S rڅ'.jcCҔӳN'?>L ?'ڐב&37y[OI  sm#V&!> t`;a6etC#ADVU/>C.%N3t6rp D"2�ze&RɀS{wGoL;鉉LR*InܭBGSYJW6ȑ /S|% WʹO-)mmvS/rs.s>| ?7w~5� .Ocrr A5$jR4CK}Z=B D"3�z&,ŝwy 41'KM!?xW1uOyW+7VJYfhnΗB=XZ CN՛DGL繙 ptdt"?xֻЗy=鬇>\Fj�/_u!C; +2E DGzl320 e>^sL*$<j5cE�WT>2ny"' $Ѩ9Xl*~*j~2 EPĚ}e7K| w�\.kK `P5 Ij2\s5ρ!K_#7rp@d` S㗁}ǿT*"BWLV&(ьe3dXW)kF/{Eyh@� fu{{FXV3ƞ`v1*:Qz(њ=1h8dy#�(W|"{r{3 Df@<�9G  h494S6LO8)<N^ηS>:t�f ߮ | b=sj , }ɩ,K[业;Nb{4q�яPxRi>c 1FG rSD'N Rl DW|l720@7,¿On*IX OdD=4Gl~,1ekߟN2 }>MOV?idU{2 M& %  `N==UVaNS/ǧ�4#Z{邧5i:H^/gA!M,6:Jd 2hd �4jd`1d[6#.]ڇA&!ǤJpV\0Vp< 0/cON>~oc=쉳|;MoW^ jyiު?!?@? dtZ=ZH8nd5۪%|d%BB՛51r}O{okʃp>G"f �0GA=7ߚƷl\?o'KGVԋ}~Lq?zIgڳzZ8}~8L(ب7};2@ }뗳>_H vn|ܚ3^_IZy3LKcF2Fs+#;4z1pf:M_d 2L2�ɉX>rX?jjrbm"0Ne5-+jWp<V>{ e@?/f"\J@2LT ^L \38JMSsXb GNL:{rq<k�_ %/|I:uܐDlb$5oN vyzȑ@d`^2�%$20 LMwߙn%BdbRqLt;B7˓�9jCcAֿ赝UBc ?BQdOZ(1ɀ$禎 c_C&e` _3y,XcI87C/zѾjYۏ@d 2@<�hf$DعM~4w0o/yRV_-Bo)yxK'MڦӚ+I?1`&ߛ^ժ[0m| EƟi^ ˝4 =tg) 3ί~>M9F-t}:N =1W,F61SzZ|m 6"@<�sG~20 #ݘ&w-iÀMvX?L^P=0@,𬍥/~+ G?*_LGõAJUa::^ܺXTmz/ rk\_C=|(7c\Q\V赉�32_CI?iƂISqN(f>\D Sd 2\3�뙍Z\JNGo7ZcʰtZpJ4 ]-R[WaՃU:U ~OzV:KmD3_C߶Lfi|Āo{,3К?8tbz0sO~g?I8<])9~\iR+^h1FTî9^ҟ~E[d 2 " 4oW:4q6!L."xIEdŦ?\qdej*enpDP+�Ӏ/?ƺ Gn20qp>d 2C¼C=xm37$It rGh2P&(Qv~ ieટ|CZn-"83 Y'ockFjy%xd 2@@\ԡ~;meaL+WH@c =s=xc5 z~S-c,_ӝo<#n/~:ə~cw̖/Pk# 47u3t-YQИ"�v|3J/_11%Z PWpyH#*g3<b{?j"@<�p:|(yk4}ޅG$B'7j?l^z9u)Ap8Sb_t j=oTC_|qYMPajM{t,o+W&XgGyۧ]�~<{pAJTa6FGf62 рRm C92 :q i7Խvc }vJ4 ]-M2>"9*P(ዩΉk!'܎;;Zi+=I A_#_|_.CڡGy.f:\={~ ۠>e!boL+O9Eg~r"d)WV;^Cj&Q0F"#x�0'>{20=|r H#MJ81(&+U3Ll|`{N%W} 'y?Ϊ3{4[ |$R媏=vŊjXqѷM3i< Myy q&Hgij֥+~eG^tqR1ye޴XG"3�YxDr#?__r@qV&Q/zd1*^5 *fU[8 򇤳 Pxv~TӢOJ,(K|[^0^1">qrlЉɊizyۧPz^:x.>N1(cv1+Hs(l�~trP߮ޗ@d`t2�F\Ǒco_߱E/_~Ln*$~l? ެT?ɕ12]JuY*9m2p[ҽwܪ{KB1IJRi޷b0sQ`4Icfzكk�A߆�pS: O@gl,]KNXm8olAv2T> �a,+>0v'@^c/Ԟ][ܞ0D"#x�09r2?'_~Y|8& ~R* ͢^e5p9~5q_ W89/x}$JQO}lE^"2Tlrkp`u^̳3^3G[t"v\W[+&+E X[?(g`ͅI$ h(U#3Ewm+|@k{rX#ex�Oq|d`zh+˭U Pճ`ELD&SU_:YH4l~ m3Oikx0Xh3>T�1oq a+`oH1Lc&\oHSGA暁^t5/8,h˪읾qphF6yP^o`@<�X^3f3 ? 6k|e&9Q Ӱnr"+9M~,=U�>@0Ղ5׼QqKL|H AaĵB5g,>sT㷁j R~J L_W; 鞯~C �oVz*2> {$~h6bDsA͉%mzӋxd 23gӸ|rvuY2"uddDe8NYnŹbKE<u$WpĐ傗sºs2Zd OL COlpcNWΦq@M>OuS>+-ol`G>'snޤ u4Ru<*' IL1 , uboAOnI6'fO2BHx]ȩq�<g񘧦=htt׎_bach|2Jrg_.>䡕+!@1Yy;Ϫ@;/#;w,tq1t=WJ/aj`j_ȢhXCo޴a#52X�K>/LHwݞܻ0X$Qg)YԗCAYCZc2ž!.u偁$o^D -w6+ꤤ_(,Js=T}*RH3e_Y#CAGS+/lTI@Q򳿜N<wMqjm2{?q"/z4ōb@h+ B# 0G")�`98e@&ylMG)M;KkAJ4MRE!}֛?oK�=> ɑHWEi)_g6X"/()ʡ=۔rUfW4vQBu9AY{w^5uUΝ#}!hkNI{[Ҵ.�x ݏ??-/Mҋӵ dl7콭< W#x�Y<f@4[>Mq;%LOA5:'88&`d N/M"?k,i'hQ>/I'_v H|mm)}'笱c!Hf/g7YaC\1|g; \lp-i7= t惮NɫtB>0&DYhqO0{0 +.Eu qԏFjЌ]#Č D"K?�`8Yd`Z {>53 򘌰UI9a2`}{Q)zoA\qu:Y/݌ o?NVUgF{P<rJ ¬3/8Nٟ/lzU@Dck@tCjc_fXJ/1hj1d_gcTg׾0ܾ , %qb'-iCQhg/oe'|oElBo>g u| Zd8r_)osK neiTW< 7ƮM4 15(5]@m@o#'vߝ_|:|v, tVHV;Cd0G,j4 l[0 , ~c�=;{7YƜf[& VC>xE~^ TNҊjg<ɏN~O :)ᚅ] R70r;W 5ܜNNػ壙]d23ӵ;ilժq<2Zr@Uμ?s`D"-�`؟yg;Ȩ;9kq-MB Ll\d 'R }L*:8/+"%s;? YAa F/~my<mY(:z2$]gM[9 y qՃU?]u\3S5S\V6*ͮFbK~X~@a De<-SiY=<!LoLJ|Ts.0]Q'4"{r׷#~GyK'} v;OKg=YE 3˟MGwS{  Fq,X@=!}y_]#c!/|Z. pdb={1tZ8{g.\.y O{FmxWV+Mx*s6@-2 yIcYTrri[ԁgD_D bD&$Ɋ|�lS)4íㆭ~iހy@WCB.-Twŝ4Mw�pMxk*Lp9.9g?r@mOxxDh Xd ]_%v+jҢzx`h>P6rV<hꏕkTۙK cd 22�){?s^G4XGV\ӈWdpg�y?qO oL}~:c'-Zdݔ]P-*$r= {U<R46-+$̀?Wk/+~[�'s-S'vVw #V2>=7~'p)$'?8N@ᴗ^m꾴6*a*6an`@<�X|$hЏߵQߦ4=1>KeA6' d1s/1a`[ĵ`3& gk@wjRiagbox)}iS<;<Ң 1_ybv=43 mrDX:2Oo.ʘb1p'8,<0>CrU/;J،J 02X2�KTŎf@*qC[)d`n/+ONžL(Pl"QWl\+3 Mt¥*vůk&Zd+/}F+4iXдUx/nrSWˆ* <z$x)�.Sٶm쿧#mXG8QN7J.xȍܾ x􁌦:8 Sf@dxf20_|~Id0uwKE_,(}Ϙ�;g_zʳah�/�h&2~1k)�3 ?I^7qۭWŕϛ?'}O_b)ةt?B#]YMEe d$@E%9޺@ \tF=a3 {d 2p3�}cs�>?qi#s41�4kHX#^L1{dy_mB* ?ǥsG f`J󩏩jE#+Tq]vsՖY,Pܦ}s>LgK�h�Sm41]/ZdW(?:v c`Pl!6tCNoG";�`qػZeޝi|5() (ueP<˰, ſ> H/E@/2]ots}wv|iR~U57|bsj#F0ƒn68LBg)�_{YQAg.0,cw"hI[?/*2Ж_[+㚎!`C!@Se;SB5L"@̰Ɉ]靁{J!M"#do2 2آfs@aK6z8Pc͞}R&?> `u祋Ϊ "J?\XEZ.sD`hQVpV<079>g2{mUɊes7}}fX-2P�r#陸Ͽ(U㪬i�P1.X-28�130-ؾ9u|˔vAVwGrb&B.{c>`ؚS?[]虁{tdZ(+xQJ<6% @L{6Mx&)�nUϗ=tZW@nCwmJ;s��@�IDATz" ^6=~/:4-a񐏖fJ<ev޾b  8m2~^?^"őx�8CEK7'ܚt[.0VհL?jm4B�L<txC17؎ҘU7wVw!v!Zdook6 jNQa}7=9O!--~)GVB>W]dwN}ӵoyk[yB)ec .L4;W[qjXlN}cQG9mv D极x�0Fy4v}&G  Vj]Ɂ@DsL' G.^ſNnbeY#T@ ӡ7h%V1[\嶼f7A5hդ~6!` ;3察\J7 kشE]b藁u<<=Vx㨐Z.'1Y}dK995|!q�ofg3S̰G"x�0hsɀDw؏ɟ_tvD'iX뒍+XdAe@] v]�9c?`WuiLo@UUY4{,]ϭ0+O0G;~*)C7=F`"PUqh31OH_z1X<PX_ӫ*[4ʑq[z!J pQxOzBr[Oha D3�`>f)[mh4hK &liSE fťu b3Pu~_' BԿw?<(УM}Y{ݓ ud` pCoiVap 3UoE<蟽4pknc8`730<ٶչ-J](m*w+G4_N7ܘ"3p_XmŰqY+މ,ĵos}5Z,oLy+28|Xl+|~O>?-}S#@ʕ⶙>VA'C 6-#y/~]'<j@?1fF/)7}OUJ< E11�v3jym;ک{&Jwo0wϜ<Y遯]\1VY?�:K<-l&Ts!uyj np"@<�Xzd`^Mij߮р1028rb}Lc,-E!Gq#F& b�y2đE'("?^V8hg wi~Q+ 2#>}rU}`A鱐vp:$_; <qDy;t`㭂F KG)14ŏ,.+g_aGS\dM,ҕox3{d 2p� ۈ#G8~oۦ?#IF!>V)Ң]$}/@Dd#:؈#dDb8j˾@g8-20pBK/-ȬgAA#=9x w~"JLxf0w蟁I;-SLz)tV*iX06Ef^tK^U k\=(_kAG+鋞vpCF_{jl(m)2X Jlmɀ(kIP7AW%\u1HIC6@�28 'NƲߙO}^:繯ļ9Zd` tk)E{bK'УQ˾WZ1^x@Bz`iS9+ɪAl|�tpp8Wӥ/xq)e-2V4c1ʢvc1[Caq\x<E|!C#GyN1 vd 20 f0i[vQ8 京Htuĺ_Q".ˊv$Q}ǤC<dCcZq=iV-20h|XZcQҷ9^dAZ)ob2d 4SC"3fH=zTf,:1?\c ?r)Zd` <H~ટ2^s,cDqX{+9~TUְj206-b}@d`~2�'G׷wnHӇZ0[jQ30]dU"y;dW!o<ȼfl쁀nKι/qΙ,{y%7 2TazQ+<ˊ8$l^&8{ښ:oÜ=sh+,hkٶum:LE(X4~i/E~Mc8Ah: <&@d=�=/CJ4o j`oQ":n 6<`d c|H`>9yWǔlCfk;gK;"Cg`#|_ -cl,v58 F1ٔtg+Wz=r_>Az]em|_vx??ap9ֲxMY1aWc}A�p4�Gz-Y3k>`D"@<�m¯gmi[=y0 *rvkA bUWУ>/:}ϓ`p@W?pؤs`1|?/t=yd8tdžgk`P5[U;{Ӻpڣ[W4>i 6gXvYG]K7o-20t.yizl:ʊ0{Ѽ"* =Z.r|oϛI37쑁�,<d`4qir>kfuVFC1u}c\bN &#M7{IDpl/ҊJgc-Zd`V\' /+!? 2l]ݺ^Nup\<"xF),o?&EfC7fJ+W-Q0_uG{ƴy#^yl169s$~p"x�0g~{j2M}Wز1MOwEoA?(?XVCm%ч)90 ,ə@ަ`2}mȱ4>J_&9.uV.|vE]x}b>bRizuظ@P} `lj{_(n�B] ?7F{WQOz!WFJD휌m@-Ϥ7}/G.20|.x#~StZm,a X9ۀsn�ų PC Q7)7c @dx�HHg`44oK؃ xa ú5:cmoaVB1ھﯟ6+mOMzul3W}.ۀmygGkG8�\яv}J/Ww7}d`VX'UkVcDFYq5WrBS=xꞧ�i3%=5Ҁ ۶3`E"x�301&ޑ&dMύѪ]2Ag t~0<!qP[Qb6# ڪu%x 2{{ߪ *7�R|aCG-{D~.�O%xf%^)ߴ!O> i#{X59(ݞ|3OD %g>oO:h\uyEV^>0ؚsiM?|"x�0g>}`o|s8n`ycXF?oUYV,oE're �xZo>d4�3z#�O1e ./2MopޅPEf|/d`Vdq\?+?ͮS= p3 !Fc8-i 訜r<\egC\s<6t ۇ/y˴3F۶d �ʙ߶)%{2qTo\VZ@ \g^6)R�gU}6=A98aK[;+O]+"s=_J!hATWZvio t@Q}`lj{_nӎ5"V= X'>>Gk=e9ƴR=VdOOoO?5 _h>t28~ٔ ~H:P?ρ []@!<xC=cP~"x�0g~m@tk81V <H @C }/*d`q-؅?ᗞcmLM錧<7]7u"s�JҫȪE-+2�wi΁. Pί.D|-�x1Áf҆=MoLxk\c4c`sҋPdolXES ?ߨo<;8k72T2�ʙ:_*8{`۞`8 f$j~/04 _ƴ0[|+FlD 9 z}ؐa1iJ>{K^9E?+ lćӑm[rqe � 4[bcٹa'd2V .+􅛏Ge,nIwUUd`W&]o?Balֹh"܃S Y 6zros` 7m0>GFݴ-##1s_qbe sXw#b,џXE@,Y+<!`Zh,~ \d?}+~%p~>xrg-20?߷'m_+E~UT 9?elhˊ=2ڼ=V4›&suEUz]O]ٜo693pg=7]Vn!@jY٘m6C:g5nUj׬X[ QF?m>E@<�8Y_ [-/l}c #^+1L\{YE9qU`~⣃|m`v8)}A'tɛsU-Zd`2C<t@RDo|MEP}5ڡ=vŽ/ 46G$ u. u3} `|߾t< ғ7i* : `E@ynA4m=gOlbOd`f �,3=}pyMlS04Zw:5 Vz�j~6&ުP<q½)Wq+uf 5�-1E acO)oΪu -208usjXVwXp@ENV,}ա*»,h=M>(OV FLt^XrG?ݵ9{G tιqbD�j4 ߲r?yj2Z Cqԉ,+=8FN|=㲟k , pZv2L[7.ɷiKt@}c đ ٍ>/-dH1>`|` |XmT_&ǯ#mۂR_*#?9a0E7}S,wo $+s/`FfqG_:(ЉQf�>9vJ �`gE9qk~�oJi*u<.q]6nl^�p:†FN/c%Kj=xy!ES8gZN2 L{(Mlސwiޘbo~[Njˊ1jP6 "RI_Z -~ܟz)Ŧ>|B}G7" SX.],ﬧ<G"E }i7T %l<be?jcAFׁj ot 20qwKL(QwKӶsJ{-"�ם] `6ylAtаb1؜qГߦS>V[y_m~q# x�^?s[r[?h<;eco%_!VEQ;xXA lBI bt8bWo-x<9%;'_zb L˧6cA eڈ`}+| ~[ ygL@F`R eL*[M{r7Zd`3pUNOIg]R@k㿛Ȧq=tN,뜁\bMbȂ�O l.ԨqH({;p:n~[^^F\3�%?}pS!wcq',{uk,~9p0TJ̄o`1�eV+Kb_pk1cb@ƶmt; ,Y~Kſ:+O]+QE&?tKQgpZ *Vҳ˕Ŵ !t{[ B9y%N1G[֛h3L?IW izJmasU�~Mg7s s !WZ\N ~D\@i6?۰B~nČ x�0h(׍gr=i?rP{q _`&;6іKb Uc 5zx"AЊl2(_9EV>/:7܎�z~8\|̉ i@?%Wk[TiEaŽ(BϢdb*ٚ+ be^vK\\(W<Yi/F{@e`AEVْn?M{ \d`l,ůHH'_xQC`΀VbM,"ƥS·s$5琇S;VyXCiigkh;ߟ&|6mbl=zShn4yVC7 KXGƾP$G tel($*me`樲C 90qIJ<`viOuȪtʵK;:'_@AE6wO?gQI(%ԍ=vW,Z֋ +l.s9?-Da,gD1y' f O|�C~lPXO>{ 3g%E0[k4Fx5VIT-C�57u`31µmiۑf^='2srZuu$-2Rp-3_^Wq8m˒SpǶ ē΅}sg5D ,lvSߊÞm*|-W J8R!.mE r�OsS�mZbNOؼ?ꈵ_?=X qI+O;%2c׹yG<X\oU:8\U:#zoRbK#uģ , wfu>!7NռDv??o=eH}C-&QW t f~(3:H +v�rek/|_ MYpW_z?QOFg`Z~�m@.ԩRTfe!`ÔaL/|;(~Q2,({ \|!Qp5]M=4#] ܄oz&{8OIO~V?'py(5]o�y(cxd2xhKYYal44^<Sn: H>-qQm�sp:/o%M7ܞ.7A~r>؇\kQ ^2|sclxފn (ܑ�:PVMf?{N�H~ ˆٶW=՝wV;O"&;7 �wDi(B&Uʩg _[+?oS jPkx^ZB|zM*X"d冴_ "$'snz ls'^�95xs ?ЊԚ9dj9?þ6}ZL5Qbg&yUp>p8f6DmSib׶4,~ dwYONP(= Keϡ'ahC(:>l> w= ,7o+<6.+4#rֿ:'{b8F߳+w#X Zp IOEa87s7]@fM.l3{AkPgpx뵇8v͊C<E3Y..B9%˜q/kwhh <Xn}{\:aʉUd`3 ?"]Kxo{͒)C#"x֡c9Φ@ܦH=1%o&cPo?H<qigx:|{0 jn!»Op1C yAoA$yM~6wH<m߭^׸-[O\0Yu:A=pWvp aX�5nɓpҚt~s/nh>S7}$1":y$ռbzڕL7ಝYlb/ 4o=NU֌]1YfzŅ΅/?(3O7D8Xs鱿7FZyZ`N"m Kt89h>C\ZۄDAmmvmӿǥ ky>&F.}O�,̩8?+"ʔ (VЛLnfymeCOҎ*N5_a Ŕjx&vNǬX"+C@-MǖM1ɂŦ2b5W?*ҟ\{b8/_L)yBHl@V9?DX7R1O yd2k /q!Ci~ �v4\SgO066E'pݣPm%ҺG<Zhcpf:ץmi'z^&pm/1rVV, 0=0ys .;"Fk6!ơM?o'wyA}z<챥1&E b;xTKcÓ~r<o-آ2vul=hc2yLj00ԟV[ |-,׾g~a_1m؁g yɃl7xc:ſ%# (jc/t4UX|(ABaQgyM>6b͞j*sWIWYVu 4yp <2X}YotoA:Q~'@_4l 7t^zQf}8_XSVi%H3&uciC#9i<S/M~6:{M�Z.a[`iZ'[ݾGL_>{P\ۚwNTMC.k* E_WR�|XgKń ޔ@<˘꧸wxu~yg|?Zdxf`5}t6+vJ*y[#yTXm B\r }SRPkV2mg4~ �2bc#MУ{[ޝ.{OqG?>}w| 3kru,&Mp ]eY]xK-Qߦc:X12X 5eE?^ΆXm{qymq_c@m- id �e0̿\K`]|"A~orV1lznMxc(Vz s2!ifO)rrLExCBp'%+zΘ#8s^_,ZoI?!�ia$(z��K1 X*2w֋ $fpOpqOMk"G,^ĨB5ոniL&eo/&'_8.Od`^2r)tsM;ekW߀z (ymcSt.#p8PdW,DU3] Xй@ǂF_ĽQm�s򲣔#֋G;~</tׇO!>|3x�0K_3EJ)ǯS_+*LMn۔jWPx.XTS/\-h:z <r\ϡ#¡WeE=8h]{eV9Օ}~pW{~ZWuN{-2p30=5ߕo8P,hKG0W#&0cTBHf�pޖ Ы,+\8V=hx`�d֧''w[#"gO㗁._z#-�}o˷<?NMA>D3Q]0f=Mz xM?)WX6зaNK'_s[f lc&?ɕ0 >72#L#!Cmq[6^ c1wWqLVTv-X&6ۊH3&&`mܑP- ,֡{c#Dk7..gO�cf?b++ԥG<u3Y}b:zt:+WWtƛu]v7>upD'.j$Gh9ȉ5R/F ed�3_)=Ǯjk43lb&@�6l�v F>nJw|o}_2ѢEιQt?| }/ޑ&; )B {6KƝ_H06*"ƞ񘗋]L Y8(:u36 o`>6n{O.�%cHo?6N7+[7a| tp׋؂b}bO=q>o~nGK^)s@l,.1mb'FuD_}iD~aF6^G>9<-4C#uGʛz+e't>_p!AFcOf{!J}K%@�IܧqK<#u,sB�_(_!H鶿~gZǤS.4At㛁ʕ~/xQi?n|;ӆ|t3�)>S9/< \ij?hl=<oی{flqM6|cد~_5 ?Shf4w!Yeg?&T]ۙ|F O:RpqQg錥)n!@m3A.E8}ާn E4|QƠY!ɣ~( vibν<>֟V|-qU `tO 쌭>H , +;N+{�SMtY_c7P<PU\TPj3BmdwC�g^}ؽ6jsKi}ޜ.xdG^ $2p2ӹ=:'C;N76]>U0oMN~ܮWNNULC<i~\mMAg&މY#MxB:Vk4mVǧ.C:ܚ:f ]2�2bkr4.xжIJd\i3o'|?lcrAA5>Փ ^a0R4xHNYvf 1N͚fXd�"IW^=U{9hEm77=]d}66: 84dAyV8Jx\[j6C_6u9@6,im^3Ĩ녜e';\-�\@I?xnN#.~DiN'z|"ӖO}RڕL {:w\[ \/> cc^(cM>8mQ?Lym6׏cgSf曺Ey .^챱<(o#r5TZV.~`ikሣLou2Xl9 cuv\nW|D3qFWMV']~IWtNUEmoٔ~vÚ:z4Ŵ'aBʴI�@駂FP/Qܓ{eЫ,RƯ;V�y>viZǦ5\".Qoo鞯U.]u/{4VDó;N=9|m7>f �u_c6"b5MoѼ|&ϔBQ.P^&w$x�04Rg߅K!9?mgzN ׋b4Ƕ"gPuY}6z k<OVSM0wv /B~!EuGM?n|?vzYD@+&{h�Oェ>(eRwW^x�3iv;(yp]{x>z$}-=,*+Y&=  zPFFĖxnh34bj1=N6z{SveFȹiޢ8AǞ1  "q\@撁x�0xp1kM;u̾U͂D`A *\dO0P׀G 8[\[V^KAytmcIɎ޿xŗ7N-T"MAgeq 3#0cd>f1|:kz9:22C9}pFrmELȔid:z4}m3-@kpތke$gPn9:3:m%l-쳝_Pށ[nHҥ/zcXm_|/%Q:w?VxoWYߏ2tY1`9Tѳv>i?df<aaﹰy<^'f7qdM3]CfONLv  pF=lkT'E#Tm / pp Osc熪w|y %^;o�qX& ">uE,Ng;~q̓to_i$w:0ɂɖb?;8?PSbWm+nL.`4z�7ǽ\gf mX/W&d|ŏ%p}zأWh?]e7 _??nG2VY{m799o 7c<oc %WU.ow;IgBS (8="P@AI((BB SH@y}{y[kVթs7޳vo]UU66Y׹&{fc_y GY͍X[wGݾ !G9�_�v(^)F >/018Bi7iJ< �)E[dLE(rwam WqPfwJ?j~>mudFd.j}ȥxg+KJ;Uv-<"KCǽW;d m00KG{ϟuƇJg'Cσ/ȼooCPŋBEF@MJ%ġnbo/ G1Vf&&gHrrm/(@a ~IQ/|Qz/ʱ{´mْ4.yz8689YVs6eSE kaM{[ L8ė-YګͥE� 9W�JP+_v-KH͖zV 1 � LO5SFg_\j5U؎pk-X7XƗ ;JS=džܾhU[˜(~NX꾣x1_K^h�xSbl,FMb/ O'xphQ e``1s ycUm1t@5ѧ& F_PKVK] 7t}˘u`}qb8Σ:q_- ZױP3}[ٽ+ti:5 vhzEmK]; twC9DwF;kMm$(Q|ƫf>5ʨ} 1M?uޫ v&J5xdo5*q&?ͻz/� )n76}g#�v(2kd w8IYL26A熏�`2Z+M]5)} =CрF1ɮQxCic|ŗPock%Nm4jbϸ^8OMǼ%C<EihA)e`ۭק߾$k?O|Tj Wa/#NSFu2?䩾EƖ: Q|_? N3"V}PcA ׬U%?N|֏X f->*zٯW|3=L[[9!?(fS8S]6f-G"5qV:eԌ^f^f~p?`2_1n)Ű6OKA cbx0҆<*KzCe @/:~oR6ny90f&&3 efF>"|6;^#9:6rASpCGѿl E0Y:|q:~ꗇ=, zFoM+>,zLxa&TڭSTA |>6+T1º``3vMLb@,6h bq6O JOQy|/kNJi|-ۺE 7U6sY#۠ӬV3{BW^ heqj*mo}i~m8͗緫&~?6Ϫp1\sBO /gS& �0}оHwdC]'yT8 t=fo v69'_ ܰ)+,=��@�IDAT{4Px_>o[9>1?ih!>U% tӃxogtr%Gglʣr.I؉ b@;uiWGv2c�A{sb0E?_.6̇0Ns�*WqbsGnNw~A #``2pLx9xUZwUi<섓ıNH8PTG[9g3|Xu:a.<9jfՆ01?YcWӏ8ژW>S9P쐘FNG}} |i` �D̚:e Ñ"y]Gs&ig !3?Q^r=[LnZ:rVH=!>3\Tsv0K~6c0Gas. myr_No2MڍɿbMeY0%$z=8P֮z5� ;F-|v%x W<>tiE@h,f`…1?ڱjeZҊ.I{7m,p|v&iUjH5[>j4ʹ6x.RXj\bŬx]G6{Qk]avoe%5<~`mO^/;k7n4m)M51b7I<{#=>rN~@gF`IM@扣$b ́c^6T[DI˛6lm5~i�Q(5;|/2 ಀsICG>yis^0囚5Iv.7:^k`Lq0)�a!q 1rB.k,m`1@ i\W);b1c2t!|6'@)� q�?OH>鸧< (bǞO<UI;|͛)SSب�g>JM A 2 P5l~Ql6 ny^mO?f!n =~2y'ns �S3D$eۨwGR'*Vԕn>{~ q'kں@Ln^]4%a5sv9_e7XUM;_l:bq:ϗIOĤ_ُ 00g<Nщ>sD-sEÄ) ZXudT(zPv4~u-"�bPQ>�lTy`bM00>uXV^~Yڋ :ZgװCOӌᱰa'Vq4s}9X7M֘4~mOX+%!*"v&:TK[W0f �zs?<`O}ZCM6m_yYm gy \0LSbD|Fque6.xT, ]lʶUN~d:K->'şȨξVzܹ wA  u`3Rz[#ɀڕGr|YK/-bYqY:s7% -++k Ν|2U-8l9!A&~Ԅ{&R {'�O>vtQt鵽y_K)1 �S٬Ϳlu򏁄8'N6xǰ3A]t5G jgE Czdczd1QgO?? qcov� ?߲ɽ@8y @ٝ~YRBA}_a͎<(̇:2@Dw]ݮz5&-<q:A8; EqԞuzm|p�U&)F�weZGK : ŀgim&=t5iq&ʨ)J@c00�W6>W3m6اRA'|y3qg2'4},k⢞�NVYox1Z G6&ё1RS׉Ds*C 0\-N٩W Eʌ||/;5Xe ? CKleGeͼ.<<qSӑѡ=?v)l.```صbiZ/WnK?T&"GkF "_ftoO9)1(``kG\B6h�yXg>jM00H 'O9Guk^ڴV~Q` ץJ?a8הiGM|y ҟePhre3ז^.f<$"2t|4Bl/ mXb|8Nc<(Y3^/`ONjO%G.;|b6=#5&M$zfu!QG5C:9,ZS:.h^Z6<_ط'#tn:x92/-``l玴Co뤑}r'_낀@S|@bS?6 HO !fƨz ouwЂn&:;B- E8(!]75cr (�'dw9!<oooK|}�%2p '/k|t4mV}2`-7ݓ`sG(3+ǚCD8hKkoqDq�ꬁk~[b8 {6_|B!@,�AR @m1<)2DG㤆T 1?|C! UxUi5^3wg I5EBs/؂찈UOL3?iΑ a s+Q@9;#*wq~9_:8`Z}"`RBڙKnSj>50MH3$f�K18^qN9KvB@5P]^`Xta@ >;K ƀf`ނg/Ѐ%Ȣ- 7h_&(|*[S]s2`#7 ng>w̿2Wu�qBi! ycC@,� <@[ z|۴.DMDֲ d p֨ &= 'ĊxZ34QiskL&֚Wf*Z>&2JZ$}E! %&c`_Ln:Oګ;+8S3vV97k;UEgB18CIp `q8׸~|ǠD xi~1K,Q`�S#w/0m;nO֬R;b9`=?[j )bD8bP|AXڠӆܰCg /!0}3N7I[=a˺WC1 O9Į'$h &/ @4T#�z,=mqE}f:ǦN?shgEy|:oMs[=ΏM1_&s'ymAxG^(bCXe/&PVW24̡2 1tr"Oc0pHlgTv ;'xe%tSy 0DǞ}_SHڱzer=ۗ/KS[8:<io55q}/aaӮMضަ8$AZQ+ vQiPa �a@nکSGS<Q�~tqbr<.3{~rmql<Ӄfi1YL =%+MLSbןOM N8--8CPq'!1oG%(剺ϓeL~0Ylj E{6r+ٲX4 [j S00)8~x&5ԁɺ '|Zr�joFd?}8욎=Aw|.-:d1a�_*xeQ@^pڶtI}iNJi׺ix횴т~C7frbL& 0M7n8`<>"7`ob:ꀱɶpa6,}Q` �zfĬ,G1-?tNQD_`65mA0 ScNRz4->:?tI2? S`/Î?I; :QJ6~Ч(8KՖ\,O@F1f-&P@F_Af":H\ ~pXK&./'P9"}[6[|2_HQ`@8S^=jKv[#tQ`, E}۶kk- eQOL/ c 69և t ֲi[_C2ҠL-3 �]}sΛ71=xLJFGGAG .wqtÀ,z{w ;ēyMԿ;mk6kJƢw|1zSGﵖ}БGyG=4cQyGˤLq(@0phXt<xQK%Oy10) FAl,ԟy=Um2c_|Okx- d>�S�e7D`jݕ0E G<GW}۷nM{e1�U~pXw`|l4ڥiPCGop}@=s- FybWhdz ;^G>O2O`wPÆ82W6QX�ױۍſp/- cK"æSRl{].i`@0 `K\se~ߦQ'y Z*G?nZ<o>XacZc:8d acyv�Q1.2b۾(\<t2k4s/MF C�nn-:x}}]1-(^2o'7MCcn}۫dܲkMS#q~p4khW]d%;oNk܁ٴLޥW^s4'8{ib6b;PCK>W; Oq:[3ǎ]'GtxFgĈ Sr O$m:@00)viyݻY;Hm : hSt0 צL6lI j~NBӓMV<,SQh*juT6T9h,``J qŸd:vȰnǪ ;?δg:Ѣ@00+.pV X�ح` cwz[glx{t;r&$Wy"4^+5j:hW(ͩA& 0y,Df,|ʠ&zt#ln @00 �-@0@:r˻&h� '1W;|E^lF<jNzTVaT$k& L~/xLSG[ȥl/G9_\qI˄-V_ηso՟ S` fל`ߺ]m{ٻa `3 qSc/#bjlmJ/J6vb50oخ`ѝHo'P2qF'|E�/x~F r†MyRGԶrMץ#@G ``0]\@dז=h|M, `0_IZcQ&қM:_ƅ< qX.NwDELAk*q =WՔ|"Ȱ^'8`Zd=yV^(@0 7^s29M htYu0 3ݐ~O`jQJoƻ7 :=XG,޴Y\ +FjJK/ M f><9{LljrE�| d;d|CiW?6@0 |7wvo yxIo 3]H~]xXM1< \谕_ κ-OIFA֕lm f %xd#y;<T  eɾV%w>_~x;b a�]Yi`יiH5gS6gƂc` i]&0IB@eEk dT`hc]y<.``xNܛq<`Dykd91ܙnz럦F` C CoiJ,�L?1i߾3*�!*ɻ9Io >ų6U洦S�b-i% ǴU5$;gpn%ˢP/�)I?mS-T磝ϖo #;@0 D\W)` }ҲoJNxWM&Ld]*W^H  )̘f[تHg'Y=k=ZY_)pߘ^�dJ ?x;ߔ+J0 3sM[&M4�{ `` g~W{;CG6kMp @�M4Lɼ/O eD> 98 {<s:բnj?WLiZwܚnS~"J0 g �8a0 8k퓝7\ ȤAf�Bk0QP:i`1f?l,�º m׬~Ky�x(iL~.WXy>kJw%``3\` H}_ӆ/ mM?'S�2Q0xn~X+,49&fo= - ݋�* te@E8.yz!U\D @00׍ +/N}峝j_Mu L58&Ղ�fjjk>: 1yOX{pXG~OpN4 MV-QySE�|.Pg ?ɴү%``2 �so+?VZ>~&6a}?RY. ae"S ^ jkC f@ޔ^xy"�'x.jCIwiw0`l` �0}|Y)a`-צw|Wmp/TKbL81DxA_M=ͶUF 0Zl5``f2JMu%J]/|\7{u\Wp5Т@00@Weо~rE5<`30|]iF\˥Oy;?~V\i!md<.>O3Glcy^=ߔE::Gsp%t/(@0 bܨi^9^m@00 Zv_zoS&B697 M`‚(!Ƽ1W?rڋ``:m5mw/py*'<lv^Z</,Ou\}{ƴ}}9sT@0 s^C{ 2{岴۽S'I:d1MfMΓg& &y ~Hr;+;ZR"XЃ@/q8g&񰕗�F. Zw0kg/^�(J0 sX�#x@00 Y2-7uFW}Ȁ?ЎaI<deL Jowݬ#QHSBfAeW|W;9) Tb5GY~ޑnץ˗-6@0 X�` p>:-};۶?cI�tYCS]lW̖I=sN$h)B{,aQ�O</X.h-`%"�beˁ!#۶ʓ�N+T[l` f/g;=``@К=olݔI ޵׺{`BE v XJis-e Lx&ueȦOrf0Ȃ{/E}[U+J` Yʀfn@00 pZ7uFlԁ_M�B`�\�W&pQ�dkqB"5)eUizx N5X|:.?a/x;"�bmٜn|kӮukD @00W}f`iIg:hN1P9'j(87mZZV>O-$a mME�h=֧c`}@0 :@00سn<�Jľ_M:ؗmĠ iSU"8_̛C)�@ 1}�o{�j[@KePׯK7;@h` f�0`@00 |_uLS?'>ئ:i*D !# {sҿSc"�\K69�=E�߻y~'p:�( aׂYñ@0 "V,IK}Oe)&~Po2ݓö4�14XXhS4pl`/xq:)[ݽgq'^`[`|'�pǃK` @00 `? v5v1d`2¿t>c` { ':'9' 0-@&֊m00( L'$rqWӰ_x{?a` f57; \e`;}cglxmyPk2ՠvqg*&ȋB>$ZP!TbqPoW?G1℟? `۞he32#sc @00cu``X0 nI-69G]^"{}bH5 "Pc`΃^�\zvtm?"�p,_6K ``v1k` 8[NZ7w:{vO2m>&`_AP]m0JQzW1afv1ĵյ6@؂b&^pqA(j 9{ן߻'7w�@00 ``㷾V~꽝46{/<؄Ou:& ȁ‰5)٤20`` v>s@:E�錎[ 2m0 ̒} ``3%_J#4>>_Fc; '*gوPmɉ!t&:w<7m8oLzsIuGޗ]!@0 �̀}]``Ȁyxw&FlM,wpWcqs[<~_jDf"_{DXc�牜~p~vr�mz#Af9@}C3tۤ5t ְ4}kz+^#;%a` C�(@0 youo{+cn{cl~ f~ ͇>t&W>1M<1q94.8:G |!)F:z�Ī s!81!&˿w5ۋ&@0 b݈惁` Lv e]Mu\c/ oQkN/毬E*/;7 0yC'HIST2*g?@]QF,=-nza&`1~A 2oƴ=o6Psp`2|?e1�l΁{m`1LW|fX_}D hc-N"@5)׏H[ԏ>L^h}Ж[oJ?,` C�(@0 =%zMg瘟6HF2Z$g.Ay!N"-fX2KeE*`L[m L!. :‏/q@ȉ<|w�Q؊s*:Rv._WK7Cl` :z`0 ;nLKutx\ l :�087ċnn z΃\,1m }00X,>{rߒm$^aHk.nܐҦ[~5J0 Af}An6 ``0K3gg8ۤ=?u's^ TrI;_"PVF50Zl5jmxB 20XhrÕ>"�pXj58�1.ui׾,` �^ `2Б35p'Vk �){M iTBMTWsBz0 �S9$Yh|6!'ц eRX? }VK|O~H~cp\PQ` F[F0  D1~P�=`6`Z$5lt@ʨEUZmC;bB fv&C_yF_6WlP7#Mkl`jXj:,)*GxC@0 |{q˵ XBHmp-20Xmlp6%eCVmC�Ũ\HS_ T3bѿP2m_VIe_'t-u1�v͟2'oZBuh6J0 #�(@0 �;#Wٳj̜€9q\."hNG)�&b%>M1/&[ }u۹|iy[o1p@0 �` ^ li۾~_t+sWݶlJ |'ہy6vNdh_ T;bs7R&ؑ{Uq7|Xb8׺ foߖM .|ޫ` ӝ0@00 _Xgw4` e<:v,1Ԇf2Σv{N5_d0*! !=q~�acRN毣C d%~}P_'tPXƏ8m0*;EB_xe0FK}ii}S01`@x@D|0 Ȗi|LuBA2Q/L:Ae&bԏ ]bA"@1D,!E³ u`  n}�Krl`Qm]UTֻ/+}`㱈~7.(ٴQ2D ` .اOW @2Ғwqg{Zۄ򠗓y+l t`D_*;'Ġ.#mBTEQG|'&싈CY(ڇ=dqķb<cKm{5i=w'J0 t0|:rE` |߾3uhVKFe]X,^36(frXMl2 cR4.E s+iL/�W9kI<xX_̏X^MoxUZ ` b ` dvJkÝ~y`>ڀ8�~6u,�Ԉgi)#T e1pCz1\]p6uo?J0 ,p^6>b? BepYZ@@C- >�g͓q v;Um}d_Ln)=MH /Vxl` �(@0 Sd`Ϻi_vw+ 9,^l~qoe<) *}Ɇ2<(^+E*aU;x/H؃`10xm(uo�ݿ/ Y�} Rkl5&H᫿+ E ` ПF ` p|՝*:Scl_bUl2�,8~�hDq @YZrlJ`$@0pyJ< >mf=hOWd_l97B/[l[~v^�.X<Q` @|`>< l7lrZʣv'&e AME8Z0(}rdCYm-yR`  |I<^@R��bS)|YEb$uMw|iwsiE%`8` =kVf(b( `&o xD͓RM8�A%LuoQ%fS=o>+m(Wu^Zl|K,j!BȾ <M;s3v/LWwe:J0 @? o @00"-}<j v1P N1٦T٠n/xqb.T#̰`x"\bO&S)k?ڐrU[D<wq说 1 __Pa,|;W>}ǯ(@0 @| ig?v�>6^e1+'Wyq>5$g$ҏ|\�^@FLV ]j3?CK\V`Z 3wO>jm�{>gx|4 iB\\)G+oQ~%鰣(@0 m o @0``}2Jǩģ4Æ]e;{m;K=2 P,R?Ld`ǣOCTl%C PlG~)L_mk~owj 6`Q` 2>y3yX9A9PL1S]c� ;N5#/b J_AMzava8ZiO ۾ڙ:H`N~Wڳ_EZwyS6v?P '>GGQ` �GF@00 얟[YyAMmp:@GXoQ.Xr'`]$-ÂP άT kP``V2<9?;`�<^4I? xىā~~H7O<ާv#/t $ a:-J<IF ` d@00 v_MKGe':H0`՟+ 6 #Ucz{}r!֭ɹ-XPJ Y`3vUC0 9zʼn K�E2_ڗ$g6Yh`c1! bŊ>R?HKE(@0 )�q@3o3 w? 5YY]90`g<:B d}1F-h1nP7jq7-J0 S=GI�#Wl�}$2G R]|pW xa?VI\>|A}xZyo~g:Q@` Wx@00 Hqw/MKnׁ&:21A$Ƒz?˪ƞȓ`ԆX,"@ءj~ⳎWtk[Tk-�`T.Res&!]d0a`?XXУ?C# ]\_̉iCjqUQGKģկie_+m0 @<0hx@0F~3|:Hb, R6Z˶ "`�6H-sm�[rhDXxnjY+ϰ㋿!i s)-'n;m|>Wy~c*d%?oޜSK'qABiO >Ԛ[Ν鎿OZ}7ҹtc`SQ@000 ߍ `0 #r[|d FEcz'JΓv>'gOؔY[vٶ(n5<WxZ~0a 9TGfo~1B/(Og,cVih,foIWowQ``'�o8H=6܇:*w1}FAe U9Xԁl8-e;dCu�6r;YSJ1q5S{ sp9 [-aGSEAD�0FK~uLtXF5@Q9Nc=O}Q}&�(@0 Y:ciå_ަw<&ewE6}x. 4l^krXNHllECVI͕D+{*m` x?.B,9D2٨}6 b>66E)y$ߖ;oKW|!uư%@<0f`ג;{._] #B) {;lTFOA^2L5]˸$Oh Fݩ*0V2eVn!b �EbO03/zA_CA!@�j^�`"\ZT@Ej}?\qYzޒ?9QT@0 =b`MخElE <A!ƅ:iaM; B@uZd Rڪ6q(�Tfk>`^a˦zۆm @7|e#}.dc(䆝[':WcyU&]qK#^@lP3/j."B۱lIk_syct` �0ng`ץM:Ā"h90b%OOTӰA/MZ֐ 5Fͽ6`zņ=4[<`YNLw=$mu? ]�D~c a.��@�IDAT�u_Hch#;.Mn.=K�%9@,�̙?e``ػnUZoI{qfc`ڼINůq1*۴\ul`�ɏ`?ZW4gZ\ꮁ@6J0 TM{jE�^r|@'L@4�&,㱯ۼ)HkuyzkߘO``3 � :M/Jg%ȈM̅LQPqr!2&vwx.�/9gՁWO c2\[lLWB `Oh13B6{pq¯ޭ4� j,`>�4׭Ň\(xw_~C:W#=L->JS&@,�ֿ\w00 nۍOؖ :RgJ1w^c`Wl? Ŧ Yk VjD<@)UmgP4ĉ@00 _Dy*14>+/ӇnV> W 4~vzYAXCW*97MӺ^צw9@00YNJ] c`%i?u>O1`W@_~9,38]_ظB p1b=a``}B ^w"&�}B[�&YRd f*986_׾)ԧ娨` = [Ş|v 会Fc vM' %eG_TWHɕԔ*[1EVYzc t0Z??!}.bKD1q~? j\~fO~8~�qAv]~:/KO~I?Y@00+Yg }{Ӧ+/J.:ZA2v>ERsX,͏�eE?* m6c \ImuTR1hfjb t2~G)$e 4�5cwkn~?.>i\ �e >�/Bzm6Ӫ_V_qY:e�iG%@,�?O\00 � _OwF7W29-Rq5u_ LC./Y2 '"`1p )=+5jk c0 �O!)rȰˢ(^-~pb4%'dQ�E.a ,�}+.م\(܏=Ӳ/}>4Q`  ^=%:в2J|*n c):$}4?/㊞�H(E"\ Rdm!UYP` 8 /ℸ} }.`n[n��D�4�\O Ï"Ht>1 0XLO\u9;nܐn{ӊ/LOI=(@0 8b`Ibf`ӆƫtew1’ATehuE1@X V9ϰW(^ġ_nRvŰNm` 0aJa 4ϊݕ>&v�(i�.F鴑þ2sZs1A7׷?poJ'=G9'=(@0 b`)bGf`CKvݷdV}FV~"MjYR*�]aʣ5[\"ìr|R�i](Yv:rXiSȠ!y[a `P1?2:E(>}1@ 'O?l';l#9u\Ohi|n!]IS_1g(@0 rb bf`d*y zYc@Q,-�o/<ac9  E2ЖU.Re?Uۘ` !W mm~6 @R&}@A ssA> #;e>{bOM6g|O@Y)CVzN剀ץ#OTFF a � j00 lٔ6]vAg.Mid_?aQI"h%ed?ר)<]} Zd1ަ4~(Vb@s0 3YkZ|V4�aTFXNِG\UMcf٘j_ �6d<ն{W~?+[?DD `3 �h0lFwlM?:" >^o 0 N1!/tOϣ2b4F ?>#j1fgC~z %W͜a``2}ODގg٫lB�vX\?md8� M6n8{@1!1hEsXdO.Ӄ}%=ſ{LtrFF a �J00 nߒ6]W?J2"℞t)$.~b>X?:]%Wع 2qΎJVj~q.$` fЧNӾ8j4�,DE�X2|Lq} d! V%1k!�1ZFFKV]~.8z`e �Qz#y0 lzrD &,a"? <0b. �^tlw1߬Ի1 {T> P.5[Un-�4&/kz XE;@_B�D?'|2�b@A bB�hVBF:㥿Ζqʩ5H(@0 L7�0݌F` P_~b%sodadrHm�&2ʃ&slxIQ j(b3!hre<db*a7D#�$o}"L4�W{c%$S�k٘l# X/_0=g^y� 3 �Ni$ +H[]~ί#_|K,hSzK1@ͣBym!߶8֖RȂ+4|9G7@00G`_)'1u37u6cO@I7BtrGNdQؓP�uVcyO`3:V_~i> O?C``:`1r΀<Qܥl`TpMm̉;iv͡r +JSW;# JM>+fa2X4k K0 s{C}k+e*=  ɭK"͗fr_ph?,7ɩU&](>[4Ȳ٢C'*}pyрӞ\` X�_".m7~/m˝k+#Tu`cЃRa,'g8X[rXBh)lEEݟ69D)ͪ V_\kp`  C;㼬6.!VTF NƑrg_dEQ0` [>% 6j. h.l͒s[ Z3ow?¢`` )` ݶ9mo}- oWB0їlln᤬~(/x;>\9;l\L�1 -[!bnJK4kͼ5c/%4L@0 IevLBX`ã1)X'p-Z( V@8gŎbKԽl&\2ѿOO3~YSOӜ ``* T l00 ooNJcAR`H j_p^Oq&Ud@RSmNUVKRITD U` d{J48/kF!7-b2Յf|?j lp}D-C\b9ǿe^N<Q~9ggIc @ @$$dInnot,OPpS& D5:˾zDĠ]mB5Zu$2_w *#\\0@00 +by.&P P"�Nag~@ *g@$T?7\�_0'qOyZ:e# 0pG `'�ГpV\zeilpΉ/&:> j}yͺ U5RZ'y4Um`MemhjTvia ``0@ɉTq^_~vW},�h|8~X> Ȇ䤬 X|@cd @d~<AG 0,+]PzO|:K+'<` 1 �5:B H~iw/~r\_F auCJ>61 *s*惈8CjƩ1V6~J~R&a}'S)>˥C5''e~b}[�\q9/v,g~ou0OH^@B}�2ڳ�xʯ_V_KzҼ |@0 X� ޵+Ҷkl~tŸ�Euu]PEֲ"}W~x ٠~]y~o)}I` B2;?Vqų";U˛aqqP99q/~+rba?eCbk OF}.lI^ut:E?wE X�C Tv 7^~ޕK{Epm:0qyQ2B)2E)18lnCġJB]l\U8yԖ262ok}\D@0 `j^n"au6=_Z9K>1@'b\M<4HQ{DT@,ǎHTtƋ_xɯE&X�yf3:1mۯU6w<k 4'7'B^(=M.Ncm =dYAE;M9*i+iy𶐃` <O%e<ܬnx\; s!�8|?ģf>jFbৌ2 `O�A~AD.Mw鴟Iy*ҩ?4 )J00( ?(x�)x{Ml;ilVPp[T>\c5'R&]4>',=%PbUw[VZ0 t26υ2/\fRmZ_2HjW՞ )�[&_"~#t|Ϻ\밣I ɀ44>d(@007j?;)#[0 s7W @gZXOz1x6e䠃\<?1G9"�]_( ~D̬mˡ p\s]rf'+&@0 �|;&^ommHO KB69GN|>^)m7w!8Bݱ=%i?hyxym0ph9N=d:}Y#S00ZoO#3~< 1G)cf "TXmycQabMڬ]db4Sa. ^(w4hەRIFs}oڛdyЃ` 3+`m%ONJ ~3mXx䦌k y\M�s|m�P=N˾ŴT^ǜyV:'F~&{,0cۃ9r,�̡?fdwx5v WzMnͨzlLIyv҅mGvh!Vs4lY5' ^ZP~(bЧ c0dr/``z8>kyB k5tXצԸhlHa3uy\Svl ^xAkVl}.q.;' v,__><t ^dO<\ X�}g36vGuu\F7o,Oqatn|7]p512O�cW=Ll_By%mywhvQ"N n5mMo@0 ϼ&Leد3';{},��sPZ]xi%7\M]}\'.ja8lPQ+Ur�nc-֕'<4}2a:NC+:6@00{=`Ɔ]ݖvʤ,h^ʆ]e_t*FۘkwZ \i lO B<N-ӚhG >(@0 ՜Neg|5G6Z fymmZȼo>\']:'t$ 1u,\Wkk/[ZzN~sK_NO:!Q``3 �37 `ei7ȤΞUxL0HЋ\1$Wm�ercSl/ 萡hRKh͊)D0Bs`g. ikG_ئɥ6g؂` f$컛}?;cٰ :In^3)ꔵ&P{Z\X٥M~|͏ rhdGN]sn_8Bt(xfD 3X� ؇`@ݾ%~δ;;>n9nU˵SʉpfŖHo39M4Ra& ~!ܛs�^bE8Ta.]ntҌ{C `  vcy=( M?uifnF"15",ˉ<1>2DY#AG!Dž\K㝴[uק>w|:YI>y Gr*B ` �#c?8QT '/w/+ήoI{׭PRx椵2&�19Nk˘A12Wś˂)Vg�Em3}a'qC�4j|{u Pr0  d}z,MiM]/Vta[ijQo'6B0CM|[6m!{o\bD%{Ġp_|>snQwҾ[\~Jg=!ŀh:JX &a$rO 0 �q=ҞKg=i{Ot[Li{8P}F]ME[xKaPar_̡9@rp �,kEţ'v򲧇2oqG{[~ma `  HߌN51^O჎ĈIHa&NHe- xfmv{?U߱lI>.pO'>y^:EX` 8 $`10i}ڵ잴wݝ~#!'+:A%_pKluxj\5a7^v01 'mm\éNKe=c8|BegP__=S` fq}۟k:sZ1xS̺8\I@.PдHl K01i|,,4$ GyV:Y=OKi```?Cl?*$�>pzEY=i瘟iϊ%i:#a�=OMY*_<iCA <lum7 1OFF*ǼWĚG&>g͑cUfcjs n4c#�@0 9ka33]|{6ԴaRb6^?Eki& qpPg'7jy k,x'D (\QDvaA`}-/gщ'zkM% f�-(nXvRQUfXHT-Dzrb+YU TN$[,"K-WHMTHB(J,ln �H�`f[;{Ͻ{潙L߳Ϲu޺{뻻UnQ&t"nt|6_Qq?xKouWݧF/ӷ[<<"JHx9^@=iGӍqo.Gˣe~MR<E#h|TI+%262CҊX1򼘼 Ң��<ǒ){f/)KF1Q'&|ȯZ\ ~P'5n cKtcl A ot'ywzd)(g}c!�=pFF#Z@r l$?C7+z<Iq9={QBرs8i }<oWpji)!B,SGC|ݺ&ͭ &U۪շȀ�� 䱁lg| F8c#mPKx;H%Qt\וFXuyJ7ҋ5OMK_rw~w}.{MtB;_oyo˛�4f}=�N�Ԑ)F)$N?yz% WۥŕK;u^7Ҟ BEZzq Z BR@5H>sZYHT4>gP=iDQKTʺY+�U cźOlk|R)5<rL%}8.h'N'A'_� |.y:rmtM-/; k~s,O==' NqgwǷ}[wE'|=A@qVW@ B7''=wsgm m|sR矺SzWokqF=ShӅ^A'].?!b \Kge>:YxxhA@�@Ǟu;le,L:'1<ҳW9RGU)&' I,>+{k?9A p)yv-Z7J.Rw/:s;]&|o}%N8Zp-/<\G__xm٭ y8"Y\Kg"CO+a9 6N Ւ?[zwQ6k'̣+\..!P$dQ"sQ1P4��D#S 6qHݬǸ H%qyŞsOZo{֩[.5ŗlӞ `)5v}\&]0:VI\t:&]^W_Ouure/]On+ҝoq#۷ ]r$3|uZ编׮ҿ+rۏ+/uK奋K(F#W-͍R+&<f19/Ғa @N/RNGBѺhcBUB<s'1ܲj'쓏˥Xmay8 H,DH^OS]ےm2 � � 0<ǥqIe{X?)ՄbJzW@UO_\|_uUS_Y 8Nbs^F11ףlސ}ad5/joyObzΞ ξemɦ3ӝ4Z *׷JG�'�F'zjAϊRlF/i[ҁ- tc.>ڭKW}{:0s]B+vW˻3!Fְ͛,90M|0^mWVK~\=~-v;_;~Z^|vۿݍTHW@;)H z@H<ZN+ѸQ>ZޤgpMȾh-K@naMu1'Jsl BT9Qn��@<ƤDZ= 1T9Z%>G>pW<"CBtTba[k9)z%# uIe/pte_D'qkt$G5+wvD�8ulu;8lNY[]ƕ>~ݫ?WA?KBOyNok�YٿUvRz.+&&W'sˠqS>110dl%F}ٖs#w厭Kn?aw+N-S2uS魐(m^TӔ;8f3D^N$esQ;u}<YN3;mиQcI)>(k/cim6DyV/⇔?GRRnH3 8W!B$>L2zntIVTjKQE]p D szW%nRщȎBhpFrN,9Q ObNZ/XdU0dN&˧ q"yM4RN[1=")EVrJn3Jw|c9@FՔqr`޸ OATE#hu˛%ݿݒ.;v:/矶&tQq,u?==2v~%Ϡf_tU:|^ԻQ\b:RϦ./|4zN>wQ6 <??ױ9S3>]7΋FFHjW>)W%ʼn-xlTzYÛ󗵘ߒ6pWv϶Y׭]{M}Wz@-٤ɗqf4+:BgK9\fTw&V&PϜTj̭}~9[*L#%yv +5~ A7PGYKH)^Vq:l52:~(i p(A@�@�6B@Z}mXVj$'q%cwE+S^ӐHNA#goҏm'1ORS$IG{5r"i}QJ^RյJG:f5x]MdOuAB҃K̎#L9JHGSx/qGc! ͂=F&V8|P#?>>�|8yY;dN;g7 s87뜶:(WWm<H@Zt.S4|v�\CڼQwSPч_o1Fbq$ClvZ9(ȸΞPn ER1OWȥ({!V Jyc\ a��8yLu>}0_jyijyA?oO V2˹/#ft j:ǝuN8Q$ uyʤ$iDDKOL#g7e=~` ׇENd֦$ic2e8  n㪔c!q(' Ý�%|wO ELĽ`[߷5^/JHXM)2zDkYgluhN:P$\ˁFY4uF%vnd'+Dnb.%-5r$[)缎{ FleE��ЏS#ڪ+}o㶚Tq=o Œ<JG\|E7/%'V{q?٬{e=) ZtxdB܁it>-^qS!NIuE-Z:Ή5t&>vQ'#):IKGlœ(6[AzEiSV�N�T Nnr[ S4]vW ]_Ψ7OF}[g\O ȝr?>*8+?#u[z׳)u2wJމxS]k*$-m"DuaGYԻEó1gI,b6q/$E T$G2js:C#RΔu9MzE'+h8> 9 � � p c<ޮ ~OZH <J\FX+~IndzN]X>:㬕:jΥ5rogOjdNm<Aѧ5m.,;:םHNF!ī z2c&z[:{@ܮM*#ث.̺34;r.bJ} pxG@j,o9ͩՋNV-z[#5UuAHkqNb.EWӈ^u3 cK?G->tDl*\hiґ [D'K14wQ˲sC0��SX6wO YyO?RãĹ%cS_:w$Tzs?8zz=2?ғcՃsGloRWz&}cRhiHߚ v-DײGmB.k9Y̞\:l# HPF72}[t-&eF)٫>w?z;g_?8tE*NzVu>Gן/j[*uY  -%Ui*6$M絭㙝=d‿sG*&9/q6 #]og!-jOz e.W+C@�@�-M=IQy<JmNŗQIG(:ѷܟr> >`<.2HL9qo(KǾDþ|N2W+#6Q*4 ȍл,�p+>o_i$GXc*/P_ݼ? W7'"$�N�ߞewx+:؟�_o:tnX ֻ4s EJUohn-d2̧uZ+:} uPp>4u5J"U^8d571ԈRW7q}sYZdVeȀ��1# uqs%^sZ\EJU='sLt<VmN$ /h)y>p38&k$ϣlv_$.KNFYHL4vmK'y[}*|?[&�q_>]4/Aqصq7poXrՊV\4rN4K%Nn?E|F|wo'I3?btYgBևP6dbѺJ:k] -{0؜{P&)},<Yum-p: HR\GI^J5sGttj-kֽR}үD@�@�n;aWkj1R1EǣSFI_KLFюͥ4rnapϧd>˳Eo5,kG8+*xZ/yZ]m[[65̗^諩R^)S([2rO6<gUK�5CVn'�ֿƷi;rG{Cm5{F_ n<,gc2W'~)/m?5U\%E'1%Zbeq5Q_JKJ&K`TЙTB+{kMqlOgr/)oD)$ � � pSDy?I/!j1=' %Eǣؒ$'Z%&^6ɱtq g*^zYG#}]ϘN'$ z)ޑ u-k-zL:}kC#c, %w,{Iz*:ӼeA9ƛ,ێ>Ip`A(.~o[>yj6#ߙC .^ /kd&֚Y|/:4F\yS25Vh=Cmw$4<z^;չz ..tQWFkNw2MMcèZm2պ_Z+���<F='B@q]<s():E6.y(1֋]sN⬕MjX.kcMhՆyqJTV<DRY_=jiU3*l&n Ո/^@ Sx9OuO7@�'�CŖQvj9;q6eT! m>ν<Kn2u/jgt@$׸jima1]Yf&Ztp5:yu_+3:ƞ2#FI7鞜վٜ$tDn{JQ" � �:EzJ?lq9PO3Kt?9&Q2'<RmIq BRZybts#ˇ=QZ}:aDP)ӝ!�p0l;\ '(rѰ-,]Fk[t@ߠvV]mVVoeomWyJ]��Ҁ`摿vǡ:' =qW.Z"XPX2Q;QZ'y{FWz5Xq^ ϭZ,'D'FoJ[z3"!^J}bJGt@�@�n~XZ{K?X'+<Tjm}P/9e \gIR+kthx-[jmYs1%hķc_ծNS9αkJi5:>8wKclz-1uczx N�wJnb(6o\# }6kɗi}'?q\Q!ۨPf\Av$␈=RsHiH{ݳT[Aې-9IsOEJNi3t{FƷ5T"bO/U" � � "_>6O\.stS' 𺬮]+ym:y9VpշoiZV\ٵ5�]'׶c/]clfwO|kWa80ho|#Kw8FRhv2`E0:"V:o:/)�O(ީ9 5%g0T5yrf6k2O(ؼ~ۖI3C0N{3dTҙV\J}}23͒#l# !��D@?I- qg+h;!bT WK΋-9-PINbzdkuǬcuR/cM]'mPH��@�IDATOz.>g ǼJٷ!5crHRkxĶ!8nӶ%#oǟ?,莒72|'*�c�΋Ws$Z3)iHJyʻįrgS] ճqYۼj|&\*\/:. lLky4^jG}mF8d � � � ś|,*p9SFJ'DunGM|YɚZ,ZzbHG/: {hֿl6o?vmKVv >=j7qLZ3[ ]|ۻ2rgy䍵E~_VI i1YoZѷ g[$ V3aՕk>p9>WXiMm=:϶ S]t͝)VT=r}Iչeq���Џ:ZoceߜV:{}'b[y/ɨ5i%VKШO*HFjsBfG#B]=ywe -th0N$�FnE΋-#汹Agw ړ~�oGj/|,Z__>^Sg4ue i}~r{,K͞^2>yUnl[ z_ʬodkT:9=���#$_Dw+^Qkkyw3-?q k چ֢kkZwN/q携Dãnn\\'E' Ms~GY]=;Nfn+8`|cҷQ~zb@WƟNJqޢQ إ{s t2޷\W dbIzXX+u)ң'w{6Cj��8yvL sMqbuHщϣĬs:&:mck^s:]Y ?gfg㱷Z�"b٥˰t\jt v�N�T͋/#[qg7rgr M@3xvȿM)|.$Z,VW{HE{^mEwyv*;^c0l[FoJXT5qh}��8~~Sh5V+9nq<vuYss;='t]аsj7v!9ԆyAAj=e.b؊8@�'�-J_Fֳ7_嶻n}.\"v%}�Ti]lLÅYIhyDMPOżlhUY2+}Ȃ1Ll 9��1'+Oy6z=7yl\ZjHab:\bN3s؏EՎjz҄5Zi] z(|q(-⢳8 �@9@o|/(%g^xw>}wEMG:*I Z&^�b1jogxZ?MbEmjI+E̵ֳ^gT���4yA{r}:۷V[ab*ɴ@^ ݮ gT~h%@+U#1W4@!kclu4x|[g~Л �-=. sPɹ@3405tghiQ}ޜMVYanx5���ܚS sqK=|jsHL}WǛ}t5uz[m$r@8f_~˯oҋX64ms kدmAL[`ܦ[RѾHGW'SMk?"26Ai q;Jr>u cu_ Ͼ5A%hgXПMߩY"� � � �D>0O69cT!uz.ƾ>̡}kۚu5č0,dg1Lk˲=j �0@F|ckΥ T 7_vj鉊R25w>rQ͉F>d\RG Z&+aEЍf;вBdA�@�@�nyFi!sJ{=w-:K׭W׏C>GMY7V ;ouݞFmUb[Na7;Zi{ѱl,??\uߔ9*GTB6`E՟4,rZiyh ?[׶kX@�@�@�@` -^jMkbSz?~iph_$M)G~ɰosjXmM'5wCHƜOSfo uĽһ�7D"Vr7*3lbX''8̩kWA ycx � � � p�9L^]4kiZzOy{h}CĦOläWe-֚j㖎~ix=tfU,z^Ζ .fݽ+%E zZ-SDQSe]Pc ݦ@�@�@�}FծEO/:qL/6qyO=[-?R}r<SFN`i^"0Z:xkk?mh5ש�1ݩWpv>Z;:}\755n/���$p\uYj~҂xc+~Yb/�D&Ō}S"�-2Sn]nw?/ՇIQ 3c=^/xv״6 ԯk^j@�@�@�@ρ?[mq\5I;ڧZW8Mof[=�F-4W[V폑c/�zVtaI!x[kO]̷Ʃk: � � � pϕN~o?lq㎿�odz6$W7k/Sfv�`�Кi6/=ky<ͧ}z>ǓC/gl L9=}k � � � p S'k^-k+Ȕ9W�6|e{W>?TVJWwm5w�*xk,?7;�>i{ cwVu]:p81���܂k3W)yv1zDjmLk]M R'ߘ]8/q}In܄9IO` � � � pϬ}.5aۡggǧlٲqzz!5@`ڵ9 Ar<؅{==1%I)r8wLYQij @�@�@�@`:ko~ё_?7q_�~?lǷ1 @�'�&ڰT?g_2%2@)'t7Nc@�@�@�@� Ԟ`(O+mUJ8XHT$�8 ^MO-2}`ʶpL+8fcұ����Dynçϲ Yg78O_gorX~4XƌH�8*k󶇿U LqRьvoo7 D����2z.,;wsMwÿ؈i p3lh|.�#%"�OSɜA�@�@�@�@�@yy_vJ;�4=x^:ۼ|q̅h <??GnxC  � � � � p`g I۬mc;&^|on= }l�.W>ߋ77 � � � � ^~#Z[k_Wz=Dzpw͏ 廑WOo50 .Dz`ʪ����8 'N_|!ⳗ~yT 1+q//]Yg["  � � � � pH__|??"wݵ#=Lu�8p�xGYX,: ”9_\:R)ۊ6LZ�����!o?55:l SA~  ?e?Kꧦ_�S7Q�~6�����D,5Ezl K'ϭV�8A?M}nʒ_\S? 8vo> 0K6@�@�@�@�@`{=OOM{;o>]B  =v/\wͩs<K'&~q1uuЃ������?q>?�5Yz@ {.tݨ?ZSoG:Vx.U~U/}�iH���� o}^ߞM{ݏԏq Oe}ӏ êo5;[^L>un � � � � p AŏN??u;"�'rGOZ:sL�_ 2uA�@�@�@�@�&wM{?MS_#_ l~`2!?&p\SܚT3x~/Q�^>}j9i=����S[ݕoNX"nj�N�+drG?:Ջ,5~`wNL=G(3c����StߚЗ=>i~6spolES>K[8>NE=����l�}ǩ6_ۮu(9Fp]S·yuSt}g�n VԅB � � � � Cѿusf9/l] z͌\[z$(_xnݡs!�����ro_g=:o_~՝&סXƭ>^<|Nr@�@�@�@�/=*?3gvx yLZ~ 埣G\9I0@�@�@�@#ƧkGC8MJ>_m<7s/g_G/cM�'�3~q}~�Wx%Q}> Z@T @?\'�����lYj]Ns뿹AK`э]5fؙj'ȿ_^vwg~,H�����L!p?g{6>IO^?SK�'�u3yeٚ~ /N-ާw�<?_$�M7ۣ����Dww]W^YKb##�8vW}}Qz!SNu һ��8 p � � � �'ճuOn3W;�ؖG{WרE1'� Zgyo{ZV?N pO]ߙ-eգ@�@�@�@�N.stM>TweWu;cL�'�s}= x_ߣwSjM]H�6�����&٪9� :?-Cͅ"q uwfށgϞ~[wnbh � � � � 遼;^5^Zgv5>JL�'�sE7AjuZQSN5"0I#w" � � � �0>~?1wW?OԩAցO�'�utǞ�?@McxN\;I�ZjvsRQ  � � � pb cU~ۋ¿_V][EÃGK�'� N|~\;A&o}˃Cߟ�:! @�@�@�@�n6&ĞWOMpg{gE # [<&Os.U;?w6p> \-�I(A�@�@�@�N>ݻ˾?BҠZu?N!X7;�ٯao Rh# tiv6 پ{GI���� Mҿt_Tw}z:wwwukBC�'�NujW]�OGjt"` w:#@q  � � � p2'gx࿹_&?bV{VN'Ap'֩c?coQ I%O mr�3lFvɥ�,6|}`~�NQ_?GZOɅ-{n4B&'Mڽ=@sWkkm|G੽z_,3+wtjł޲ϫ# � � � �G@`ezSt{^;otރ4A&ɦq}}66ݓ<A?xeS_h7[\ ҙK  � � � �O`_᧟^z9Mw7;}H>oou<ثk=WvHKEB`NNbzkuz3?&̶t(!kNw[KdRkh_lAN躭y7Wϩ* Z� ]crB7_jӰnZ4$IVX~"Яyܣ"pcUwqKq)}\g2KE'"+REhK8fN܍CMttuYQ<s?~پd>/W8y4YEhTeǫHw6DoT?~=M@T8e4*t iR̵:xi_7a3d!ynj'T;:Tz}˿k)]ϖ]?+`ߚO�nM^}|5^SHw"Ɋ^ϗt2ujԝagbet3:%;)Y>9@gJhQ|yZ+"5:J)/t596?A1 +*JNMd/Y 9 w=-7_u'"зuqK.Tt!j(%N[]ںh8~TO�Cx!Yɑt6t4tt|.Glnsxicq?/{<b-N'enl?^eS2fsW>?EL?Z2stamrk!/owǚhy|z[ᄐe}hݺDn=o5�!x`Hw"ɒV2Nrݺ�"e, beVt >Oʝ[=.ϾlH:R\ =Vbi"V"E8 $'Y_1wYc ҏ3nꆮn|}YT@u%Y4stG/Q(."EK x+ �[K&%0&Y1*t4UGQ ;7Ova`?&  *C2QՄ4)Z~iO?H/^mQ|_LɝTWyZE,kU>hR՝?wʳZ &PuLn{;ϼ<~A;dE@!TD NDlTV –YWg1,v>j3:-UZI.%T%޸JHfLF҆,/R'JFd#<I {ۨoџ3]t$Ѫ^A5.Sl,40Ez)ZeQ 5d) ZK IS"tLtiOn^T=ޗ(TS~Ԗ? ,v &{Rv"g{֊Ѱ"l*4>3'hZ2UfgΜ.J+WnKX 胒z]_z7�9Ǎx_W~Drw JFR=t"wը;âPʬ)0ꘉF]Ud&+7™(Uohd.Gc7ʜsa ͭ/ײgGRi4.SRGRCcE_ 6wPZEEo^Kci*G%1i-$n[o-e$LVCKS4ҍpzEr,Ro$))75OTdDa!}a0/и*y=5_s\'tM+TVY:sjj#ҳy>j}^_hiÎB}:?A@Xxo(>zev%pSMEßNwJ}Qg8P妙L\Uh1 #hJdeep!'ʢaA+E~4<</ˑXiƍ2gd4bX*4FF7KZ*ƅ$ɭ[8Pʕ%M}ZSj^KRgV*&qCg6k;7h.|-5LI)2:S= {VEz_2GRMZR[xLS^KhӿHb</R9^AEYJ^SY:sRe*Z,958 B| 1&=~_] �T {]V Ջsϙ;1Rl � � � � px^,秺w^dм;8 ԛn+vEڿB_o%:{ՓQ䍨FAXF UeUrB6͒}jdep!'ʢaA+E~4<</ˑXiƍ2gd4bX*4F>oT I[:m(Z2dZOkJ kIJ#$nଷr2"fm4t#å^f0)%R@gcg6`ϪHKFHA@WKj bk {"P̞أ\Ej8;+(Uk }"KgNjѴLeY뙥3(Ipy(vQ 'Fͻ,y!uL >7|l2#bDM4\b{2Uef 2'J؈hd鶣LVVgr,V!RG͓2Fo(sFLF#+)eL|jdy h\Lܺ�u.>>&\\2-ԧ5$ufa7Yqp[K9A jcz]}FR^[)s1E߳jjgU%# {$_ %DŽ}1资=T(fN_Q^O"5НT5>3'hZA_ʬҙ` G_=biDtJ{WvE0@`�saQc/>ܶOoLE۠#44is*@�@�@�@�n lSJ)h@caۡS=v8hy8[M <Kjt'jQjzNEckJP Y6H&ȜL3mG铙4DY4B|#wȏF'et9R+޸Q挘FWS TF?ڈ͒7Jq!3IrVأJ>D+J(yu15A th}^KciU&5lrT aY8뭥 YA>(n.|-: R*YS#n2m-jj4%/Q#H_-{@X<& mG%4_@n8}Gu-G{@>Oe*yMOdI-V2k=497@zBx%e*CWʂtw]} !$Wpg!K_z ?v^}e}a+*{q1^w)p밨/���%?GF_٩zYM'w[]}?Ý of}Ka3?A{?NS50f4JUR^tg gxNeqwSݱ"OfF8ӐeѰ ߕ"?mLH}4zF3b2y^yN1,Sdk#F7KZ*ƅ$ɭ[x@_A\\2-ԧ5$ufa7Yqp[K9A jcz]}FR^[)s1E߳jjgU%# {$_ %DŽ}1资=T(fN_Q^O"5НT5>3'hZA_䏧^Ky=Ǽ@esqZR&YUdfݽOJ@`sT 1d>}oSGg rZ4Bi\J fـ"|>C'n'B <NUqhz@铙4DY4B|#wȏF'et9R+޸Q挘FWS TF?f^KѸ$u '�\|}LT2dZOkJ kIJ#$nଷr2"fm4t#å^f0)%R@gcg6`ϪHKFHA@WKj bk {"P̞أ\Ej8;+(Uk }"KgNjѴUM蝦ơ6,L=-$lVg~) �:_ESdҘW7S\Ho}�[)Ĝ>urRo,2ߓm\ nO\2=LD19q5u^+́FYIp cz՝Q%"-JZP鼷F':FUb:IZRE@۾.':7,&W(^O#J*MfZ~R(%FqL>#}NvJ*!lw})_+{PQ2'J #4jʰ(S7awmjjjk<{$&-s6’n fE?ER.=;dXS9Oŝ1OoO?wǬ>�N� >׿m6[$ݷx,O)n BUQ eGM4b*EUBN1 v3>ԨvJYވn^FLERIX 'W5y{մ zU3i6&KMIS-LEEpj ,R-'yyxqYdU&h\gwҔUkM(kLcLV";&/=Q0ec' UEJ/5RM)PWZ&Tʔg MC-RUP1)Ǟ<j{5YTB~$(hL!٫(#~ w9rf} Isu({dIVGHa)z'VFF0I�ݙo|_}fkJ?2"*L[FLEJ(3i#棡n\gNU47}bKшh4S*= &z6Aj2SV&diRv:i)=VHN DE`E-l''ktն` =}JK_렜N7M2'3kL(v1M edbȌkIeU)vKTS)#A&+VI52BSPKes"0c<~챧2ai^M#(+C.I0s5 a?SHjy)+ʈ]YDCsvqA\](YArUU˭oCB Q8QhG#|ݿZm~稼iˣ&&QBD%iˣ5шhSU e:m|4t͔KlS)fO z#yib>1fJ%'a27\YU&]T\vj,5MN'M0*)éhHȣmdBY$tVrڶo᳇Oiks \qUd&vmu). Ģ,LL?qsm>I*"EWzj*e$Hd"ժ6R>[hPjI5l"_zO=TaU#, ثzes% 5vFA#g ^M68eESˑ6hv..H E#+HN{:oK{2p@ !E:~_uzv?;HoU~稼)e T2my&1z*Xzr mjT;%WܬAoD7/^G#LD$,V憓<jk˴NYM`rI}餩`"X"e85M)y<8M?[?+SJUV-|p)-}r.7;a4֚46Į.2E4XT垒G#3n ^'IUEJ/5RM)PWZ&Tʔg MC-RUP1)Ǟ<j{5YTB~$(hL!٫(#~ w9rf} Isu({dI+u~oޟv c|m*!=1t_6uWY7EXNjLJ(ӖG?jSѨ(ʌuڈh謷)٦FSrjFt|4b*͔JdOben8ɳޫMл&L;մ &7YjԧNja -rU.RSd2XoG˃#4ɼ2I]m5gw:(rM(kLcL"S]LE5yY)~42}tYUD]R#TH uE@UomRML)|>Ԓj*e\E 32{êFXWJA%K j\Flqʊ2p#am':]\4WGVv˦?v~O(l�N�l�"ZN9VS]5#V5O0T2my&1z*Xzr mjT;%WܬAoD7/^G#LD$,V憓<jk˴NYM`rI}餩`"X"e85M)y<8M?[?+SJUV-|p)-}r.7;a4֚46Į.2E4XT垒G#3n ^'IUEJ/5RM)PWZ&Tʔg MC-RUP1)Ǟ<j{5YTB~$(hL!٫(#~ w9rf} Isu({d]:zxﶭ FxuOɀ?NwŁ;,_GXBD%i'7jrbSU eJY6|4s)٦FSrjFt|4b*͔JdOben8ɳޫMл&L;մ &7YjԧNja -rU.RSd2XoG˃#4ɼ2I]m5gw:(rM(kLcL"S]LE5yY)~42}tYUD]R#TH uE@UomRML)|>Ԓj*e\E 32{êFXWJA%K j\Flqʊ2p#am':]\4WǪVZ>7ԽPBn�q1?x WB'9u;?DeRwgs]BD%ٜ*jQJ)2hf%|Q\Es'ݼ4z1F3ٓXNji f.N;e5mM&iZyc@4Y [6U [1 ܨF5mdSrr.7;a4֚46Į.2E4XT垒G#3n ^'IUEJ/5RM)PWZ&Tʔg MC-RUP1)Ǟ<j{5YTB~$(hL!٫(#~ w9rf} Isur>fٿx:r?l p| n o޳՛Wn-$#v-uw=e*DTBufGM4s)2hf%|Q\Es'ݼ4z1F3ٓXNji f.N;e5mM&iZyc@4Y [6U [1 ܨF5mdSrr.7;a4֚46Į.2E4XT垒G#3n ^'IUEJ/5RM)PWZ&Tʔg MC-RUP1)Ǟ<j{5YTB~$(hL!٫(#~ w9rf} IsSlWO_8p8_;X Pu{c7[aYvfbUyg"*Th[OQT%Y6=z͔KlSfUrjFt|4b*͔JdOben8ɳޫMл&L;մ &7YjԧNja -rU.RSd2XoG˃#4ɼ2I]m5gw:(rM(kLcL"S]LE5yY)~42}tYUD]R#TH uE@UomRML)|>Ԓj*e\E 32{êFXWJA%K j\Flqʊ2p#am':m.vo<uB7WWuxΣﺅE�'�NՅŎ%0G?WκkVk^ZS�ۢ;{\ߕ{'ml.[\DM4 Ie ((e͔KlS)fO z#yis�� IDATb>1fJ%'a27\YU&]T\vj,5MN'M0*)éhHȣm$H+c:+Qjݧ4Z\nv¸ie5il\=][]d@i&/=%ӏFf\O.H^jJ R4YhM)"0ԇZRM,cSf=yXK7jAY)rIAQBW#NYQFr<U}vWiX]p|.+(za6=OOfǷf6��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������F W����IENDB`ic11��PNG  ��� IHDR��� ��� ���szz���sRGB���IDATX WilTU뼙i;@J Ԫ(PCQ 4Dcܢ`"Kb\"Ab4~4_F J".qB*-.3ty]Ϲ7QZ\~M;w9zj}^@ Z  hZ�m6Pyo&J<n-i-eIL_<0-OuBl%T c&�Ee(+fpg^VėIe =e A$^ +' �ckg:ںNŒB& +>"3?Tk(+fe#|UCS1 Z5m… _R�\B,7D`ț9:(}oWr21%k#V>V0' Woo,c - 3Mm?)/�f/mΆ-"|23G~6/l_3J*) B\-a]|n-~o5Oym6?&C%N'hYB)4&ChG6A<6^s.^<K.GW/ BAiRh[g;:=mG*ҐmP7I)u8exq_h_:kI,mEP(QuΧF<!:D ̹rs̓AypC|a$H.s #̡sWqł#)ܮrReCGۻ:qBgC' oK`j4B*q)M9[ɬ)gP d6od+d9}<Mj Yy"2Ww�,v?ի,0B>) O)K+Mcpy5f)ft`fȄg:Ê:ޅ,>K< ?\>>mYb�fH:kOvC W 9 P!k"G{JY0i ع rh8kN(4.y}:3E*R�$)܉$q]4M+W1B׭Z゚ &0W`E턕#C'W|"8_]�ge>|wF<4q1N"?=0'[֊Mw8}u�}]V0/Tι>?$N-={NA`! U:yaY|{C8GTyn./&ŧ aFIouUTu}Ym~v~t>-f5)&5Mqs[[WZ}r+d2^FͶ Tw;"ϭP&`aVۅbČe3ف>#ß",n'GQ&F뚕8yr4ݾ eM>hZ*J@D'=T".\;ad0.7< ?@49a%~kĊ�?P|j /*Տ Q|p 8Dnf�0x--i:epeEDŽWui:!zmXUܧg�Yjn~^Q%|Ϩh<혏^e,*έ k;]����IENDB`info�� bplist00X$versionX$objectsY$archiverT$top�U$null WNS.keysZNS.objectsV$class TnameTiconZ$classnameX$classes\NSDictionaryXNSObject_NSKeyedArchiverTroot#-27=CJR]dfhjlnsx}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/create-dmg/���������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017527� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/create-dmg/template.applescript�������������������������������������0000755�0001750�0000144�00000003444�15104114162�023622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������on run (volumeName) tell application "Finder" tell disk (volumeName as string) open set theXOrigin to WINX set theYOrigin to WINY set theWidth to WINW set theHeight to WINH set theBottomRightX to (theXOrigin + theWidth) set theBottomRightY to (theYOrigin + theHeight) set dsStore to "\"" & "/Volumes/" & volumeName & "/" & ".DS_STORE\"" tell container window set current view to icon view set toolbar visible to false set statusbar visible to false set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY} set statusbar visible to false REPOSITION_HIDDEN_FILES_CLAUSE end tell set opts to the icon view options of container window tell opts set icon size to ICON_SIZE set text size to TEXT_SIZE set arrangement to not arranged end tell BACKGROUND_CLAUSE -- Positioning POSITION_CLAUSE -- Hiding HIDING_CLAUSE -- Application and QL Link Clauses APPLICATION_CLAUSE QL_CLAUSE close open -- Force saving of the size delay 1 tell container window set statusbar visible to false set the bounds to {theXOrigin, theYOrigin, theBottomRightX - 10, theBottomRightY - 10} end tell end tell delay 1 tell disk (volumeName as string) tell container window set statusbar visible to false set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY} end tell end tell --give the finder some time to write the .DS_Store file delay 3 set waitTime to 0 set ejectMe to false repeat while ejectMe is false delay 1 set waitTime to waitTime + 1 if (do shell script "[ -f " & dsStore & " ]; echo $?") = "0" then set ejectMe to true end repeat log "waited " & waitTime & " seconds for .DS_STORE to be created." end tell end run ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/darwin/create-dmg/create-dmg�����������������������������������������������0000755�0001750�0000144�00000043654�15104114162�021501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env bash # Create a read-only disk image of the contents of a folder # Bail out on any unhandled errors set -e; # Any command that exits with non-zero code will cause the pipeline to fail set -o pipefail; CDMG_VERSION='1.2.0' # The full path to the "support/" directory this script is using # (This will be set up by code later in the script.) CDMG_SUPPORT_DIR="" OS_FULL_VERSION="$(sw_vers | sed -n 2p | cut -d : -f 2 | tr -d '[:space:]' | cut -c1-)" OS_MAJOR_VERSION="$(echo $OS_FULL_VERSION | cut -d . -f 1)" OS_MINOR_VERSION="$(echo $OS_FULL_VERSION | cut -d . -f 2)" WINX=10 WINY=60 WINW=500 WINH=350 ICON_SIZE=128 TEXT_SIZE=16 FORMAT="UDZO" FILESYSTEM="HFS+" ADD_FILE_SOURCES=() ADD_FILE_TARGETS=() IMAGEKEY="" HDIUTIL_VERBOSITY="" SANDBOX_SAFE=0 BLESS=0 SKIP_JENKINS=0 MAXIMUM_UNMOUNTING_ATTEMPTS=3 SIGNATURE="" NOTARIZE="" function pure_version() { echo "$CDMG_VERSION" } function hdiutil_detach_retry() { # Unmount unmounting_attempts=0 until echo "Unmounting disk image..." (( unmounting_attempts++ )) hdiutil detach "$1" exit_code=$? (( exit_code == 0 )) && break # nothing goes wrong (( exit_code != 16 )) && exit $exit_code # exit with the original exit code # The above statement returns 1 if test failed (exit_code == 16). # It can make the code in the {do... done} block to be executed do (( unmounting_attempts == MAXIMUM_UNMOUNTING_ATTEMPTS )) && exit 16 # patience exhausted, exit with code EBUSY echo "Wait a moment..." sleep $(( 1 * (2 ** unmounting_attempts) )) done unset unmounting_attempts } function version() { echo "create-dmg $(pure_version)" } function usage() { version cat <<EOHELP Creates a fancy DMG file. Usage: $(basename $0) [options] <output_name.dmg> <source_folder> All contents of <source_folder> will be copied into the disk image. Options: --volname <name> set volume name (displayed in the Finder sidebar and window title) --volicon <icon.icns> set volume icon --background <pic.png> set folder background image (provide png, gif, or jpg) --window-pos <x> <y> set position the folder window --window-size <width> <height> set size of the folder window --text-size <text_size> set window text size (10-16) --icon-size <icon_size> set window icons size (up to 128) --icon file_name <x> <y> set position of the file's icon --hide-extension <file_name> hide the extension of file --app-drop-link <x> <y> make a drop link to Applications, at location x,y --ql-drop-link <x> <y> make a drop link to user QuickLook install dir, at location x,y --eula <eula_file> attach a license file to the dmg (plain text or RTF) --no-internet-enable disable automatic mount & copy --format <format> specify the final disk image format (UDZO|UDBZ|ULFO|ULMO) (default is UDZO) --filesystem <filesystem> specify the disk image filesystem (HFS+|APFS) (default is HFS+, APFS supports macOS 10.13 or newer) --encrypt enable encryption for the resulting disk image (AES-256 - you will be prompted for password) --encrypt-aes128 enable encryption for the resulting disk image (AES-128 - you will be prompted for password) --add-file <target_name> <file>|<folder> <x> <y> add additional file or folder (can be used multiple times) --disk-image-size <x> set the disk image size manually to x MB --hdiutil-verbose execute hdiutil in verbose mode --hdiutil-quiet execute hdiutil in quiet mode --bless bless the mount folder (deprecated, needs macOS 12.2.1 or older) --codesign <signature> codesign the disk image with the specified signature --notarize <credentials> notarize the disk image (waits and staples) with the keychain stored credentials --sandbox-safe execute hdiutil with sandbox compatibility and do not bless (not supported for APFS disk images) --version show create-dmg version number -h, --help display this help screen EOHELP exit 0 } # factors can cause interstitial disk images to contain more than a single # partition - expand the hunt for the temporary disk image by checking for # the path of the volume, versus assuming its the first result (as in pr/152). function find_mount_dir() { local dev_name="${1}" >&2 echo "Searching for mounted interstitial disk image using ${dev_name}... " # enumerate up to 9 partitions for i in {1..9}; do # attempt to find the partition local found_dir found_dir=$(hdiutil info | grep -E --color=never "${dev_name}" | head -${i} | awk '{print $3}') if [[ -n "${found_dir}" ]]; then echo "${found_dir}" return 0 fi done } # Argument parsing while [[ "${1:0:1}" = "-" ]]; do case $1 in --volname) VOLUME_NAME="$2" shift; shift;; --volicon) VOLUME_ICON_FILE="$2" shift; shift;; --background) BACKGROUND_FILE="$2" BACKGROUND_FILE_NAME="$(basename "$BACKGROUND_FILE")" BACKGROUND_CLAUSE="set background picture of opts to file \".background:$BACKGROUND_FILE_NAME\"" REPOSITION_HIDDEN_FILES_CLAUSE="set position of every item to {theBottomRightX + 100, 100}" shift; shift;; --icon-size) ICON_SIZE="$2" shift; shift;; --text-size) TEXT_SIZE="$2" shift; shift;; --window-pos) WINX=$2; WINY=$3 shift; shift; shift;; --window-size) WINW=$2; WINH=$3 shift; shift; shift;; --icon) POSITION_CLAUSE="${POSITION_CLAUSE}set position of item \"$2\" to {$3, $4} " shift; shift; shift; shift;; --hide-extension) HIDING_CLAUSE="${HIDING_CLAUSE}set the extension hidden of item \"$2\" to true " shift; shift;; -h | --help) usage;; --version) version; exit 0;; --pure-version) pure_version; exit 0;; --ql-drop-link) QL_LINK=$2 QL_CLAUSE="set position of item \"QuickLook\" to {$2, $3} " shift; shift; shift;; --app-drop-link) APPLICATION_LINK=$2 APPLICATION_CLAUSE="set position of item \"Applications\" to {$2, $3} " shift; shift; shift;; --eula) EULA_RSRC=$2 shift; shift;; --no-internet-enable) NOINTERNET=1 shift;; --format) FORMAT="$2" shift; shift;; --filesystem) FILESYSTEM="$2" shift; shift;; --encrypt) ENABLE_ENCRYPTION=1 AESBITS=256 shift;; --encrypt-aes128) ENABLE_ENCRYPTION=1 AESBITS=128 shift;; --add-file | --add-folder) ADD_FILE_TARGETS+=("$2") ADD_FILE_SOURCES+=("$3") POSITION_CLAUSE="${POSITION_CLAUSE} set position of item \"$2\" to {$4, $5} " shift; shift; shift; shift; shift;; --disk-image-size) DISK_IMAGE_SIZE="$2" shift; shift;; --hdiutil-verbose) HDIUTIL_VERBOSITY='-verbose' shift;; --hdiutil-quiet) HDIUTIL_VERBOSITY='-quiet' shift;; --codesign) SIGNATURE="$2" shift; shift;; --notarize) NOTARIZE="$2" shift; shift;; --sandbox-safe) SANDBOX_SAFE=1 shift;; --bless) BLESS=1 shift;; --rez) echo "REZ is no more directly used. You can remove the --rez argument." shift; shift;; --skip-jenkins) SKIP_JENKINS=1 shift;; -*) echo "Unknown option: $1. Run 'create-dmg --help' for help." exit 1;; esac case $FORMAT in UDZO) IMAGEKEY="-imagekey zlib-level=9";; UDBZ) IMAGEKEY="-imagekey bzip2-level=9";; ULFO) ;; ULMO) ;; *) echo >&2 "Unknown disk image format: $FORMAT" exit 1;; esac done if [[ -z "$2" ]]; then echo "Not enough arguments. Run 'create-dmg --help' for help." exit 1 fi DMG_PATH="$1" SRC_FOLDER="$(cd "$2" > /dev/null; pwd)" # Argument validation checks if [[ "${DMG_PATH: -4}" != ".dmg" ]]; then echo "Output file name must end with a .dmg extension. Run 'create-dmg --help' for help." exit 1 fi if [[ "${FILESYSTEM}" != "HFS+" ]] && [[ "${FILESYSTEM}" != "APFS" ]]; then echo "Unknown disk image filesystem: ${FILESYSTEM}. Run 'create-dmg --help' for help." exit 1 fi if [[ "${FILESYSTEM}" == "APFS" ]] && [[ ${SANDBOX_SAFE} -eq 1 ]]; then echo "Creating an APFS disk image that is sandbox safe is not supported." exit 1 fi # Main script logic SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo $SCRIPT_DIR DMG_DIRNAME="$(dirname "$DMG_PATH")" DMG_DIR="$(cd "$DMG_DIRNAME" > /dev/null; pwd)" DMG_NAME="$(basename "$DMG_PATH")" DMG_TEMP_NAME="$DMG_DIR/rw.$$.${DMG_NAME}" # Detect where we're running from sentinel_file="$SCRIPT_DIR/.this-is-the-create-dmg-repo" if [[ -f "$sentinel_file" ]]; then # We're running from inside a repo CDMG_SUPPORT_DIR="$SCRIPT_DIR/support" else # We're running inside an installed location CDMG_SUPPORT_DIR="$SCRIPT_DIR" fi if [[ -z "$VOLUME_NAME" ]]; then VOLUME_NAME="$(basename "$DMG_PATH" .dmg)" fi if [[ ! -d "$CDMG_SUPPORT_DIR" ]]; then echo >&2 "Cannot find support/ directory: expected at: $CDMG_SUPPORT_DIR" exit 1 fi if [[ -f "$SRC_FOLDER/.DS_Store" ]]; then echo "Deleting .DS_Store found in source folder" rm "$SRC_FOLDER/.DS_Store" fi # Create the image echo "Creating disk image..." if [[ -f "${DMG_TEMP_NAME}" ]]; then rm -f "${DMG_TEMP_NAME}" fi # Use Megabytes since hdiutil fails with very large byte numbers function blocks_to_megabytes() { # Add 1 extra MB, since there's no decimal retention here MB_SIZE=$((($1 * 512 / 1000 / 1000) + 1)) echo $MB_SIZE } function get_size() { # Get block size in disk if [[ $OS_MAJOR_VERSION -ge 12 ]]; then bytes_size=$(du -B 512 -s "$1") else bytes_size=$(du -s "$1") fi bytes_size=$(echo $bytes_size | sed -e 's/ .*//g') echo $(blocks_to_megabytes $bytes_size) } # Create the DMG with the specified size or the hdiutil estimation CUSTOM_SIZE='' if [[ -n "$DISK_IMAGE_SIZE" ]]; then CUSTOM_SIZE="-size ${DISK_IMAGE_SIZE}m" fi if [[ $SANDBOX_SAFE -eq 0 ]]; then if [[ "$FILESYSTEM" == "APFS" ]]; then FILESYSTEM_ARGUMENTS="" else FILESYSTEM_ARGUMENTS="-c c=64,a=16,e=16" fi hdiutil create ${HDIUTIL_VERBOSITY} -srcfolder "$SRC_FOLDER" -volname "${VOLUME_NAME}" \ -fs "${FILESYSTEM}" -fsargs "${FILESYSTEM_ARGUMENTS}" -format UDRW ${CUSTOM_SIZE} "${DMG_TEMP_NAME}" else hdiutil makehybrid ${HDIUTIL_VERBOSITY} -default-volume-name "${VOLUME_NAME}" -hfs -o "${DMG_TEMP_NAME}" "$SRC_FOLDER" hdiutil convert -format UDRW -ov -o "${DMG_TEMP_NAME}" "${DMG_TEMP_NAME}" DISK_IMAGE_SIZE_CUSTOM=$DISK_IMAGE_SIZE fi # Get the created DMG actual size DISK_IMAGE_SIZE=$(get_size "${DMG_TEMP_NAME}") # Use the custom size if bigger if [[ $SANDBOX_SAFE -eq 1 ]] && [[ ! -z "$DISK_IMAGE_SIZE_CUSTOM" ]] && [[ $DISK_IMAGE_SIZE_CUSTOM -gt $DISK_IMAGE_SIZE ]]; then DISK_IMAGE_SIZE=$DISK_IMAGE_SIZE_CUSTOM fi # Estimate the additional sources size if [[ -n "$ADD_FILE_SOURCES" ]]; then for i in "${!ADD_FILE_SOURCES[@]}"; do SOURCE_SIZE=$(get_size "${ADD_FILE_SOURCES[$i]}") DISK_IMAGE_SIZE=$(expr $DISK_IMAGE_SIZE + $SOURCE_SIZE) done fi # Add extra space for additional resources DISK_IMAGE_SIZE=$(expr $DISK_IMAGE_SIZE + 20) # Make sure target image size is within limits MIN_DISK_IMAGE_SIZE=$(hdiutil resize -limits "${DMG_TEMP_NAME}" | awk 'NR=1{print int($1/2048+1)}') if [ $MIN_DISK_IMAGE_SIZE -gt $DISK_IMAGE_SIZE ]; then DISK_IMAGE_SIZE=$MIN_DISK_IMAGE_SIZE fi # Resize the image for the extra stuff hdiutil resize ${HDIUTIL_VERBOSITY} -size ${DISK_IMAGE_SIZE}m "${DMG_TEMP_NAME}" # Mount the new DMG echo "Mounting disk image..." MOUNT_RANDOM_PATH="/Volumes" if [[ $SANDBOX_SAFE -eq 1 ]]; then MOUNT_RANDOM_PATH="/tmp" fi DEV_NAME=$(hdiutil attach -mountrandom ${MOUNT_RANDOM_PATH} -readwrite -noverify -noautoopen -nobrowse "${DMG_TEMP_NAME}" | grep -E --color=never '^/dev/' | sed 1q | awk '{print $1}') echo "Device name: $DEV_NAME" MOUNT_DIR=$(find_mount_dir "${DEV_NAME}s") if [[ -z "${MOUNT_DIR}" ]]; then >&2 echo "ERROR: unable to proceed with final disk image creation because the interstitial disk image was not found." >&2 echo "The interstitial disk image will likely be mounted and will need to be cleaned up manually." exit 1 fi echo "Mount dir: $MOUNT_DIR" if [[ -n "$BACKGROUND_FILE" ]]; then echo "Copying background file '$BACKGROUND_FILE'..." [[ -d "$MOUNT_DIR/.background" ]] || mkdir "$MOUNT_DIR/.background" cp "$BACKGROUND_FILE" "$MOUNT_DIR/.background/$BACKGROUND_FILE_NAME" fi if [[ -n "$APPLICATION_LINK" ]]; then echo "Making link to Applications dir..." echo $MOUNT_DIR ln -s /Applications "$MOUNT_DIR/Applications" fi if [[ -n "$QL_LINK" ]]; then echo "Making link to QuickLook install dir..." echo $MOUNT_DIR ln -s "/Library/QuickLook" "$MOUNT_DIR/QuickLook" fi if [[ -n "$VOLUME_ICON_FILE" ]]; then echo "Copying volume icon file '$VOLUME_ICON_FILE'..." cp "$VOLUME_ICON_FILE" "$MOUNT_DIR/.VolumeIcon.icns" SetFile -c icnC "$MOUNT_DIR/.VolumeIcon.icns" fi if [[ -n "$ADD_FILE_SOURCES" ]]; then echo "Copying custom files..." for i in "${!ADD_FILE_SOURCES[@]}"; do echo "${ADD_FILE_SOURCES[$i]}" cp -a "${ADD_FILE_SOURCES[$i]}" "$MOUNT_DIR/${ADD_FILE_TARGETS[$i]}" done fi VOLUME_NAME=$(basename $MOUNT_DIR) # Run AppleScript to do all the Finder cosmetic stuff APPLESCRIPT_FILE=$(mktemp -t createdmg.tmp.XXXXXXXXXX) if [[ $SANDBOX_SAFE -eq 1 ]]; then echo "Skipping Finder-prettifying AppleScript because we are in Sandbox..." else if [[ $SKIP_JENKINS -eq 0 ]]; then cat "$CDMG_SUPPORT_DIR/template.applescript" \ | sed -e "s/WINX/$WINX/g" -e "s/WINY/$WINY/g" -e "s/WINW/$WINW/g" \ -e "s/WINH/$WINH/g" -e "s/BACKGROUND_CLAUSE/$BACKGROUND_CLAUSE/g" \ -e "s/REPOSITION_HIDDEN_FILES_CLAUSE/$REPOSITION_HIDDEN_FILES_CLAUSE/g" \ -e "s/ICON_SIZE/$ICON_SIZE/g" -e "s/TEXT_SIZE/$TEXT_SIZE/g" \ | perl -pe "s/POSITION_CLAUSE/$POSITION_CLAUSE/g" \ | perl -pe "s/QL_CLAUSE/$QL_CLAUSE/g" \ | perl -pe "s/APPLICATION_CLAUSE/$APPLICATION_CLAUSE/g" \ | perl -pe "s/HIDING_CLAUSE/$HIDING_CLAUSE/" \ > "$APPLESCRIPT_FILE" sleep 2 # pause to workaround occasional "Can’t get disk" (-1728) issues echo "Running AppleScript to make Finder stuff pretty: /usr/bin/osascript \"${APPLESCRIPT_FILE}\" \"${VOLUME_NAME}\"" if /usr/bin/osascript "${APPLESCRIPT_FILE}" "${VOLUME_NAME}"; then # Okay, we're cool true else echo >&2 "Failed running AppleScript" hdiutil_detach_retry "${DEV_NAME}" exit 64 fi echo "Done running the AppleScript..." sleep 4 rm "$APPLESCRIPT_FILE" fi fi # Make sure it's not world writeable echo "Fixing permissions..." chmod -Rf go-w "${MOUNT_DIR}" &> /dev/null || true echo "Done fixing permissions" # Make the top window open itself on mount: if [[ $BLESS -eq 1 && $SANDBOX_SAFE -eq 0 ]]; then echo "Blessing started" if [ $(uname -m) == "arm64" ]; then bless --folder "${MOUNT_DIR}" else bless --folder "${MOUNT_DIR}" --openfolder "${MOUNT_DIR}" fi echo "Blessing finished" else echo "Skipping blessing on sandbox" fi if [[ -n "$VOLUME_ICON_FILE" ]]; then # Tell the volume that it has a special file attribute SetFile -a C "$MOUNT_DIR" fi # Delete unnecessary file system events log if possible echo "Deleting .fseventsd" rm -rf "${MOUNT_DIR}/.fseventsd" || true hdiutil_detach_retry "${DEV_NAME}" # Compress image and optionally encrypt if [[ $ENABLE_ENCRYPTION -eq 0 ]]; then echo "Compressing disk image..." hdiutil convert ${HDIUTIL_VERBOSITY} "${DMG_TEMP_NAME}" -format ${FORMAT} ${IMAGEKEY} -o "${DMG_DIR}/${DMG_NAME}" else echo "Compressing and encrypting disk image..." echo "NOTE: hdiutil will only prompt a single time for a password - ensure entry is correct." hdiutil convert ${HDIUTIL_VERBOSITY} "${DMG_TEMP_NAME}" -format ${FORMAT} ${IMAGEKEY} -encryption AES-${AESBITS} -stdinpass -o "${DMG_DIR}/${DMG_NAME}" fi rm -f "${DMG_TEMP_NAME}" # Adding EULA resources if [[ -n "${EULA_RSRC}" && "${EULA_RSRC}" != "-null-" ]]; then echo "Adding EULA resources..." # # Use udifrez instead flatten/rez/unflatten # https://github.com/create-dmg/create-dmg/issues/109 # # Based on a thread from dawn2dusk & peterguy # https://developer.apple.com/forums/thread/668084 # EULA_RESOURCES_FILE=$(mktemp -t createdmg.tmp.XXXXXXXXXX) EULA_FORMAT=$(file -b ${EULA_RSRC}) if [[ ${EULA_FORMAT} == 'Rich Text Format data'* ]] ; then EULA_FORMAT='RTF ' else EULA_FORMAT='TEXT' fi # Encode the EULA to base64 # Replace 'openssl base64' with 'base64' if Mac OS X 10.6 support is no more needed # EULA_DATA="$(base64 -b 52 "${EULA_RSRC}" | sed s$'/^\(.*\)$/\t\t\t\\1/')" EULA_DATA="$(openssl base64 -in "${EULA_RSRC}" | tr -d '\n' | awk '{gsub(/.{52}/,"&\n")}1' | sed s$'/^\(.*\)$/\t\t\t\\1/')" # Fill the template with the custom EULA contents eval "cat > \"${EULA_RESOURCES_FILE}\" <<EOF $(<${CDMG_SUPPORT_DIR}/eula-resources-template.xml) EOF " # Apply the resources hdiutil udifrez -xml "${EULA_RESOURCES_FILE}" '' -quiet "${DMG_DIR}/${DMG_NAME}" || { echo "Failed to add the EULA license" exit 1 } echo "Successfully added the EULA license" fi # Enable "internet", whatever that is if [[ ! -z "${NOINTERNET}" && "${NOINTERNET}" == 1 ]]; then echo "Not setting 'internet-enable' on the dmg, per caller request" else # Check if hdiutil supports internet-enable # Support was removed in macOS 10.15. See https://github.com/andreyvit/create-dmg/issues/76 if hdiutil internet-enable -help >/dev/null 2>/dev/null; then hdiutil internet-enable -yes "${DMG_DIR}/${DMG_NAME}" else echo "hdiutil does not support internet-enable. Note it was removed in macOS 10.15." fi fi if [[ -n "${SIGNATURE}" && "${SIGNATURE}" != "-null-" ]]; then echo "Codesign started" codesign -s "${SIGNATURE}" "${DMG_DIR}/${DMG_NAME}" dmgsignaturecheck="$(codesign --verify --deep --verbose=2 --strict "${DMG_DIR}/${DMG_NAME}" 2>&1 >/dev/null)" if [ $? -eq 0 ]; then echo "The disk image is now codesigned" else echo "The signature seems invalid${NC}" exit 1 fi fi if [[ -n "${NOTARIZE}" && "${NOTARIZE}" != "-null-" ]]; then echo "Notarization started" xcrun notarytool submit "${DMG_DIR}/${DMG_NAME}" --keychain-profile "${NOTARIZE}" --wait echo "Stapling the notarization ticket" staple="$(xcrun stapler staple "${DMG_DIR}/${DMG_NAME}")" if [ $? -eq 0 ]; then echo "The disk image is now notarized" else echo "$staple" echo "The notarization failed with error $?" exit 1 fi fi # All done! echo "Disk image done" exit 0 ������������������������������������������������������������������������������������doublecmd-1.1.30/install/create_packages.sh���������������������������������������������������������0000755�0001750�0000144�00000007506�15104114162�017703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # The new package will be saved here PACK_DIR=$(pwd)/linux/release # Temp dir for creating *.tar.bz2 package BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Read version number DC_MAJOR=$(grep 'MajorVersionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+') DC_MINOR=$(grep 'MinorVersionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_MICRO=$(grep 'RevisionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO # Create temp dir for building BUILD_DC_TMP_DIR=/var/tmp/doublecmd-$DC_VER help() { echo 'Usage: create_packages.sh [options]' echo echo "Options:" echo '-A: All packages (by default)' echo '-D: Debian package' echo '-R: RPM package' echo '-S: Slackware package' echo '-P: Portable package' echo '--cpu=<cpu>: Target CPU' echo '--ws=<widgetset>: Target widgetset' echo exit 1 } # Parse input parameters CKNAME=$(basename "$0") args=$(getopt -n $CKNAME -o ADRSPHh -l cpu:,ws:,help,default -- "$@") eval set -- $args while [ "$1" != "--" ]; do case "$1" in -h|--help) help;; -A) shift;CK_DEBIAN=1;CK_REDHAT=1;CK_SLACKWARE=1;CK_PORTABLE=1;; -D) shift;CK_DEBIAN=1;; -R) shift;CK_REDHAT=1;; -S) shift;CK_SLACKWARE=1;; -P) shift;CK_PORTABLE=1;; --cpu) shift;export CPU_TARGET=$(eval echo $1);shift;; --ws) shift;export lcl=$(eval echo $1);shift;; esac done if [ -z "$CK_DEBIAN" ] && [ -z "$CK_REDHAT" ] && [ -z "$CK_SLACKWARE" ] && [ -z "$CK_PORTABLE" ]; then CK_DEBIAN=1 CK_REDHAT=1 CK_SLACKWARE=1 CK_PORTABLE=1 fi # Export from Git rm -rf $BUILD_DC_TMP_DIR mkdir $BUILD_DC_TMP_DIR git -C ../ checkout-index -a -f --prefix=$BUILD_DC_TMP_DIR/ # Update revision number linux/update-revision.sh ../ $BUILD_DC_TMP_DIR # Copy package description file cp linux/description-pak $BUILD_DC_TMP_DIR/ # Set widgetset if [ -z $lcl ]; then export lcl=gtk2 fi # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi # Debian package architecture if [ "$CPU_TARGET" = "x86_64" ] then export DEB_ARCH="amd64" else export DEB_ARCH=$CPU_TARGET fi # Copy libraries cp -a linux/lib/$CPU_TARGET/*.so* $BUILD_DC_TMP_DIR/ cp -a linux/lib/$CPU_TARGET/$lcl/*.so* $BUILD_DC_TMP_DIR/ cd $BUILD_DC_TMP_DIR # Build all components of Double Commander ./build.sh release # Export variables for checkinstall export MAINTAINER="Alexander Koblov <Alexx2000@mail.ru>" if [ "$CK_REDHAT" ]; then # Create *.rpm package checkinstall -R --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$CPU_TARGET --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=Applications/File --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_DEBIAN" ]; then # Create *.deb package checkinstall -D --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$DEB_ARCH --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=contrib/misc --requires=libx11-6 --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_SLACKWARE" ]; then # Create *.tgz package checkinstall -S --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$CPU_TARGET --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=Applications/File --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_PORTABLE" ]; then # Create *.tar.xz package mkdir -p $BUILD_PACK_DIR install/linux/install.sh --portable-prefix=$BUILD_PACK_DIR cd $BUILD_PACK_DIR # Set run-time library search path patchelf --set-rpath '$ORIGIN' doublecmd/doublecmd tar -cJvf $PACK_DIR/doublecmd-$DC_VER.$lcl.$CPU_TARGET.tar.xz doublecmd fi # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/create_packages.mac��������������������������������������������������������0000755�0001750�0000144�00000005047�15104114162�020027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # The new package will be saved here PACK_DIR=$(pwd)/darwin/release # Temp dir for creating *.dmg package BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Read version number DC_MAJOR=$(grep 'MajorVersionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+') DC_MINOR=$(grep 'MinorVersionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_MICRO=$(grep 'RevisionNr' ../src/doublecmd.lpi | grep -o '[0-9.]\+' || echo 0) DC_VER=$DC_MAJOR.$DC_MINOR.$DC_MICRO # Create temp dir for building BUILD_DC_TMP_DIR=/var/tmp/doublecmd-$DC_VER # Export from Git rm -rf $BUILD_DC_TMP_DIR mkdir $BUILD_DC_TMP_DIR git -C ../ checkout-index -a -f --prefix=$BUILD_DC_TMP_DIR/ # Save revision number DC_REVISION=$(linux/update-revision.sh ../ $BUILD_DC_TMP_DIR) # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi export CPU_TARGET=`echo $CPU_TARGET|tr '[:upper:]' '[:lower:]'` # Set widgetset if [ -z $lcl ]; then export lcl=cocoa fi # Set minimal Mac OS X target version if [ -z $MACOSX_DEPLOYMENT_TARGET ]; then if [ $CPU_TARGET = "aarch64" ]; then export MACOSX_DEPLOYMENT_TARGET=11.0 else export MACOSX_DEPLOYMENT_TARGET=10.11 fi fi # Copy libraries cp -a darwin/lib/$CPU_TARGET/*.dylib $BUILD_DC_TMP_DIR/ cp -a darwin/lib/$CPU_TARGET/$lcl/*.dylib $BUILD_DC_TMP_DIR/ cd $BUILD_DC_TMP_DIR # Build all components of Double Commander ./build.sh release # Update application bundle version defaults write $(pwd)/doublecmd.app/Contents/Info CFBundleVersion $DC_REVISION defaults write $(pwd)/doublecmd.app/Contents/Info CFBundleShortVersionString $DC_VER plutil -convert xml1 $(pwd)/doublecmd.app/Contents/Info.plist chmod 644 $(pwd)/doublecmd.app/Contents/Info.plist # Create *.dmg package mkdir -p $BUILD_PACK_DIR install/darwin/install.sh $BUILD_PACK_DIR pushd $BUILD_PACK_DIR if [ "$lcl" = "qt" ]; then macdeployqt doublecmd.app fi mv doublecmd.app 'Double Commander.app' codesign --deep --force --verify --verbose --sign '-' 'Double Commander.app' popd install/darwin/create-dmg/create-dmg \ --volname "Double Commander" \ --volicon "$BUILD_PACK_DIR/.VolumeIcon.icns" \ --background "$BUILD_PACK_DIR/.background/bg.jpg" \ --window-pos 200 200 \ --window-size 680 366 \ --text-size 16 \ --icon-size 128 \ --icon "Double Commander.app" 110 120 \ --app-drop-link 360 120 \ --icon "install.txt" 566 123 \ --icon ".background" 100 500 \ "$PACK_DIR/doublecmd-$DC_VER-$DC_REVISION.$lcl.$CPU_TARGET.dmg" \ "$BUILD_PACK_DIR/" # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/install/create_packages.bat��������������������������������������������������������0000644�0001750�0000144�00000006445�15104114162�020035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ rem Path to Git set GIT_EXE="%ProgramFiles%\Git\bin\git.exe" rem Path to Inno Setup compiler set ISCC_EXE="%ProgramFiles(x86)%\Inno Setup 5\ISCC.exe" rem Path to Windows Installer XML (WiX) toolset set PATH=%PATH%;"%ProgramFiles(x86)%\WiX Toolset v3.11\bin" rem The new package will be created from here set BUILD_PACK_DIR=%TEMP%\doublecmd-%DATE: =% rem The new package will be saved here set PACK_DIR=%CD%\windows\release rem Read version number for /f tokens^=2delims^=^" %%a in ('findstr "MajorVersionNr" ..\src\doublecmd.lpi') do (set DC_MAJOR=%%a) for /f tokens^=2delims^=^" %%a in ('findstr "MinorVersionNr" ..\src\doublecmd.lpi') do (set DC_MINOR=%%a) for /f tokens^=2delims^=^" %%a in ('findstr "RevisionNr" ..\src\doublecmd.lpi') do (set DC_MICRO=%%a) if [%DC_MINOR%] == [] set DC_MINOR=0 if [%DC_MICRO%] == [] set DC_MICRO=0 set DC_VER=%DC_MAJOR%.%DC_MINOR%.%DC_MICRO% rem Create temp dir for building set BUILD_DC_TMP_DIR=%TEMP%\doublecmd-%DC_VER% rm -rf %BUILD_DC_TMP_DIR% mkdir %BUILD_DC_TMP_DIR% %GIT_EXE% -C ..\ checkout-index -a -f --prefix=%BUILD_DC_TMP_DIR%\ rem Get processor architecture if "%CPU_TARGET%" == "" ( if "%PROCESSOR_ARCHITECTURE%" == "x86" ( set CPU_TARGET=i386 set OS_TARGET=win32 ) else if "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( set CPU_TARGET=x86_64 set OS_TARGET=win64 ) ) rem Prepare needed variables if "%CPU_TARGET%" == "i386" ( set CPU_ARCH=x86 set PF=ProgramFilesFolder ) else if "%CPU_TARGET%" == "x86_64" ( set CPU_ARCH=x64 set PF=ProgramFiles64Folder ) rem Save revision number set OUT=..\units\%CPU_TARGET%-%OS_TARGET%-win32 call ..\src\platform\git2revisioninc.exe.cmd %OUT% copy %OUT%\dcrevision.inc %BUILD_DC_TMP_DIR%\units\ rem Prepare package build dir rm -rf %BUILD_PACK_DIR% mkdir %BUILD_PACK_DIR% mkdir %BUILD_PACK_DIR%\release rem Copy needed files copy windows\doublecmd.iss %BUILD_PACK_DIR%\ copy windows\doublecmd.wxs %BUILD_PACK_DIR%\ copy windows\license.rtf %BUILD_PACK_DIR%\ copy ..\src\doublecmd.ico %BUILD_PACK_DIR%\ rem Copy libraries copy windows\lib\%CPU_TARGET%\*.sfx %BUILD_DC_TMP_DIR%\ copy windows\lib\%CPU_TARGET%\*.dll %BUILD_DC_TMP_DIR%\ copy windows\lib\%CPU_TARGET%\winpty-agent.exe %BUILD_DC_TMP_DIR%\ cd /D %BUILD_DC_TMP_DIR% rem Build all components of Double Commander call build.bat darkwin rem Prepare install files call %BUILD_DC_TMP_DIR%\install\windows\install.bat cd /D %BUILD_PACK_DIR% rem Create *.exe package %ISCC_EXE% /F"doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%" /DDisplayVersion=%DC_VER% doublecmd.iss rem Move created package move release\*.exe %PACK_DIR% rem Create *.msi package heat dir doublecmd -ag -cg HeatGroup -srd -dr APPLICATIONFOLDER -var var.SourcePath -o include.wxs candle -arch %CPU_ARCH% -dProductVersion=%DC_VER% -dSourcePath=doublecmd -dProgramFiles=%PF% doublecmd.wxs include.wxs light -ext WixUIExtension -cultures:en-us include.wixobj doublecmd.wixobj -o %PACK_DIR%\doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%.msi rem Create *.zip package mkdir doublecmd\settings copy NUL doublecmd\settings\doublecmd.inf zip -9 -Dr %PACK_DIR%\doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%.zip doublecmd rem Clean temp directories cd \ rm -rf %BUILD_DC_TMP_DIR% rm -rf %BUILD_PACK_DIR% ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015246� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/highlighters.json�����������������������������������������������������0000644�0001750�0000144�00000111373�15104114162�020630� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Styles : [ { Name : "Light", UniHighlighters : [ { Name : "Assembler (x86)", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$00000080,$80000005;False:True." } ], KeyLists : [ { Name : "Commands", Attributes : "$00008000,$80000005;False:True." }, { Name : "Commands SSE2", Attributes : "$00008000,$80000005;False:True." }, { Name : "Registers", Attributes : "$00FF0080,$80000005;False:True." }, { Name : "Registers x86_64", Attributes : "$00FF0080,$80000005;False:True." }, { Name : "Key Words", Attributes : "$00808000,$80000005;False:True." }, { Name : "Segments", Attributes : "$00FF00FF,$80000005;False:True.B" } ], Ranges : [ { Name : "Remarks", Attributes : "$00800000,$80000005;False:True." }, { Name : "String", Attributes : "$000000FF,$80000005;False:True." }, { Name : ".", Attributes : "$00FF0000,$80000005;False:True." }, { Name : "@", Attributes : "$000080FF,$80000005;False:True." }, { Name : "String", Attributes : "$000000FF,$80000005;False:True." } ] } ] }, { Name : "C#", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00008000,$80000005;False:True." }, { Name : "Contextual keywords", Attributes : "$00008000,$80000005;False:True." }, { Name : "Data types", Attributes : "$00FF0000,$80000005;False:True." }, { Name : ".NET Data types", Attributes : "$00008080,$80000005;False:True." }, { Name : "Preprocessor directives", Attributes : "$00FF0080,$80000005;False:True." }, { Name : "Operators", Attributes : "$000080FF,$80000005;False:True." } ], Ranges : [ { Name : "Strings '..'", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$000000FF,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$000000FF,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$00800000,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00800000,$80000005;False:True." } ] } ] }, { Name : "DC Error File", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Digits", Attributes : "$00808000,$1FFFFFFF;False:False." } ], KeyLists : [ { Name : "Keywords", Attributes : "$00800000,$1FFFFFFF;False:False." } ], Ranges : [ { Name : "Date", Attributes : "$00800000,$1FFFFFFF;False:True." }, { Name : "About", Attributes : "$00800080,$1FFFFFFF;False:False." }, { Name : "Exception", Attributes : "$000000D2,$1FFFFFFF;False:False." }, { Name : "Address", Attributes : "$00000096,$1FFFFFFF;False:False." } ] } ] }, { Name : "Go", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00FF0000,$80000005;False:True." }, { Name : "Types", Attributes : "$00000080,$80000005;False:True." }, { Name : "Functions", Attributes : "$00800000,$80000005;False:True." } ], Ranges : [ { Name : "Strings `..`", Attributes : "$00696969,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$00696969,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00696969,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$00008000,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00008000,$80000005;False:True." } ] } ] }, { Name : "JSON", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$00008000,$80000005;False:True." } ], KeyLists : [ { Name : "Keywords", Attributes : "$000080FF,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$00800000,$80000005;False:True." } ], Ranges : [ { Name : "Strings \"..\"", Attributes : "$00000080,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00000080,$80000005;True:True." } ] } ] } ] }, { Name : "Java script", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Functions and key words", Attributes : "$00008000,$80000005;False:True." }, { Name : "Reserved words", Attributes : "$00FF0000,$80000005;False:True." }, { Name : "Common Events", Attributes : "$00FF0080,$80000005;False:True." } ], Ranges : [ { Name : "Remark //", Attributes : "$00A00000,$80000005;False:True." }, { Name : "Remark /*...*/", Attributes : "$00A00000,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$000000FF,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$000000FF,$80000005;True:True." } ] }, { Name : "Strings \"..\"", Attributes : "$000000FF,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$000000FF,$80000005;True:True." } ] } ] } ] }, { Name : "Kotlin", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$00FF0000,$80000005;False:True." } ], KeyLists : [ { Name : "Keywords", Attributes : "$00800000,$80000005;False:True.B" }, { Name : "Contextual keywords", Attributes : "$00800000,$80000005;False:True.B" }, { Name : "Modifier keywords", Attributes : "$00800000,$80000005;False:True.B" }, { Name : "Special Identifiers", Attributes : "$00000000,$80000005;False:True.B" }, { Name : "Basic data types", Attributes : "$1FFFFFFF,$80000005;False:True." } ], Ranges : [ { Name : "@Annotation", Attributes : "$00008080,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$00008000,$80000005;False:True.B" }, { Name : "Strings \"..\"", Attributes : "$00008000,$80000005;False:True.B", KeyLists : [ { Name : "Escape", Attributes : "$00800000,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$00808080,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00808080,$80000005;False:True." }, { Name : "Remarks /**..*/", Attributes : "$00808080,$80000005;False:True.I" } ] } ] }, { Name : "PowerShell", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00FF0000,$80000005;False:True." }, { Name : "Aliases", Attributes : "$00C08000,$80000005;False:True." }, { Name : "Functions", Attributes : "$00000080,$80000005;False:True." }, { Name : "Cmdlets", Attributes : "$00800080,$80000005;False:True." } ], Ranges : [ { Name : "Strings @'..'@", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Strings @\"..\"@", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Remarks #", Attributes : "$00800000,$80000005;False:True." }, { Name : "Remarks <#..#>", Attributes : "$00800000,$80000005;False:True." }, { Name : "Variables", Attributes : "$00008000,$80000005;False:True." } ] } ] }, { Name : "QML", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00008080,$80000005;False:True." }, { Name : "Basic types", Attributes : "$00008080,$80000005;False:True." }, { Name : "QtQuick Object Types", Attributes : "$00800080,$80000005;False:True." }, { Name : "Aurora & Sailfish Silica Types", Attributes : "$00800080,$80000005;False:True." } ], Ranges : [ { Name : "Strings '..'", Attributes : "$00008000,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$00008000,$80000005;False:True." }, { Name : "Remarks //", Attributes : "$00008000,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00008000,$80000005;False:True." } ] } ] }, { Name : "Rust", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00FF0000,$80000005;False:True." }, { Name : "Macros", Attributes : "$00800000,$80000005;False:True." }, { Name : "Operators", Attributes : "$00CC3299,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Types", Attributes : "$00000080,$80000005;False:True." }, { Name : "Complex types", Attributes : "$00000080,$80000005;False:True." } ], Ranges : [ { Name : "Remarks //", Attributes : "$00008000,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00008000,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$00696969,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00696969,$80000005;True:True." } ] }, { Name : "Chars '..'", Attributes : "$00696969,$80000005;False:True." }, { Name : "Attributes (outer)", Attributes : "$00000096,$80000005;False:True." }, { Name : "Attributes (inner)", Attributes : "$00000096,$80000005;False:True." } ] } ] }, { Name : "Swift", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00FF0000,$00FFFFFF;False:True." }, { Name : "Operators", Attributes : "$00CC3299,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$000000FF,$80000005;False:True." }, { Name : "Types", Attributes : "$00000080,$00FFFFFF;False:True." } ], Ranges : [ { Name : "Remarks //", Attributes : "$00008000,$00FFFFFF;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00008000,$00FFFFFF;False:True." }, { Name : "Strings \"..\"", Attributes : "$00696969,$00FFFFFF;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00696969,$00FFFFFF;True:True." } ] }, { Name : "Strings \"\"\"...\"\"\"", Attributes : "$00696969,$00FFFFFF;False:True." } ] } ] } ] }, { Name : "Dark", UniHighlighters : [ { Name : "Assembler (x86)", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$00E8BCBC,$80000005;False:True." } ], KeyLists : [ { Name : "Commands", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Commands SSE2", Attributes : "$00008000,$80000005;False:True." }, { Name : "Registers", Attributes : "$00E8BCBC,$80000005;False:True." }, { Name : "Registers x86_64", Attributes : "$00E8BCBC,$80000005;False:True." }, { Name : "Key Words", Attributes : "$00808000,$80000005;False:True." }, { Name : "Segments", Attributes : "$00D15894,$80000005;False:True.B" } ], Ranges : [ { Name : "Remarks", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "String", Attributes : "$00898BB9,$80000005;False:True." }, { Name : ".", Attributes : "$00FBA249,$80000005;False:True." }, { Name : "@", Attributes : "$000080FF,$80000005;False:True." }, { Name : "String", Attributes : "$00898BB9,$80000005;False:True." } ] } ] }, { Name : "C#", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00008000,$80000005;False:True." }, { Name : "Contextual keywords", Attributes : "$00008000,$80000005;False:True." }, { Name : "Data types", Attributes : "$00FBA249,$80000005;False:True." }, { Name : ".NET Data types", Attributes : "$00008080,$80000005;False:True." }, { Name : "Preprocessor directives", Attributes : "$00D15894,$80000005;False:True." }, { Name : "Operators", Attributes : "$000080FF,$80000005;False:True." } ], Ranges : [ { Name : "Strings '..'", Attributes : "$00898BB9,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$00898BB9,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00898BB9,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00C09B61,$80000005;False:True." } ] } ] }, { Name : "DC Error File", Ranges : [ { Name : "Root", Attributes : "$00AAAAAA,$80000005;False:False.", Sets : [ { Name : "Digits", Attributes : "$00C09B61,$80000005;False:False." } ], KeyLists : [ { Name : "Keywords", Attributes : "$00C09B61,$80000005;False:False." } ], Ranges : [ { Name : "Date", Attributes : "$00000000,$008AD277;False:False." }, { Name : "About", Attributes : "$008AD277,$80000005;False:False." }, { Name : "Exception", Attributes : "$00898BB9,$80000005;False:False." }, { Name : "Address", Attributes : "$00898BB9,$80000005;False:False." } ] } ] }, { Name : "Go", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00D69C56,$80000005;False:True." }, { Name : "Types", Attributes : "$00B0C94E,$80000005;False:True." }, { Name : "Functions", Attributes : "$00FFC14F,$80000005;False:True." } ], Ranges : [ { Name : "Strings `..`", Attributes : "$007891CE,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$007891CE,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$007891CE,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$008AD277,$80000005;False:True." } ] } ] }, { Name : "JSON", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$008AD277,$80000005;False:True." } ], KeyLists : [ { Name : "Keywords", Attributes : "$007891E2,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$00C09B61,$80000005;False:True." } ], Ranges : [ { Name : "Strings \"..\"", Attributes : "$00898BB9,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00898BB9,$80000005;True:True." } ] } ] } ] }, { Name : "Java script", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Functions and key words", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Reserved words", Attributes : "$00E8BCBC,$80000005;False:True." }, { Name : "Common Events", Attributes : "$00E8BCBC,$80000005;False:True." } ], Ranges : [ { Name : "Remark //", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "Remark /*...*/", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$00898BB9,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00898BB9,$80000005;True:True." } ] }, { Name : "Strings \"..\"", Attributes : "$00898BB9,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$00898BB9,$80000005;True:True." } ] } ] } ] }, { Name : "Kotlin", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", Sets : [ { Name : "Numbers", Attributes : "$00B8AC2A,$80000005;False:True." } ], KeyLists : [ { Name : "Keywords", Attributes : "$006D8ECF,$80000005;False:True." }, { Name : "Contextual keywords", Attributes : "$006D8ECF,$80000005;False:True." }, { Name : "Modifier keywords", Attributes : "$006D8ECF,$80000005;False:True." }, { Name : "Special Identifiers", Attributes : "$1FFFFFFF,$80000005;False:True.B" }, { Name : "Basic data types", Attributes : "$1FFFFFFF,$80000005;False:True." } ], Ranges : [ { Name : "@Annotation", Attributes : "$0060AEB3,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$0073AB6A,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$0073AB6A,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$006D8ECF,$80000005;True:True." } ] }, { Name : "Remarks //", Attributes : "$00857E7A,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00857E7A,$80000005;False:True." }, { Name : "Remarks /**..*/", Attributes : "$006B825F,$80000005;False:True.I" } ] } ] }, { Name : "PowerShell", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00FBA249,$80000005;False:True." }, { Name : "Aliases", Attributes : "$00C08000,$80000005;False:True." }, { Name : "Functions", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Cmdlets", Attributes : "$00D15894,$80000005;False:True." } ], Ranges : [ { Name : "Strings @'..'@", Attributes : "$00898BB9,$80000005;False:True." }, { Name : "Strings @\"..\"@", Attributes : "$00898BB9,$80000005;False:True." }, { Name : "Strings '..'", Attributes : "$00898BB9,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$00898BB9,$80000005;False:True." }, { Name : "Remarks #", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "Remarks <#..#>", Attributes : "$00C09B61,$80000005;False:True." }, { Name : "Variables", Attributes : "$00008000,$80000005;False:True." } ] } ] }, { Name : "QML", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$003278CC,$80000005;False:True." }, { Name : "Basic types", Attributes : "$003278CC,$80000005;False:True." }, { Name : "QtQuick Object Types", Attributes : "$006DC6FF,$80000005;False:True." }, { Name : "Aurora & Sailfish Silica Types", Attributes : "$006DC6FF,$80000005;False:True." } ], Ranges : [ { Name : "Strings '..'", Attributes : "$0059876A,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$0059876A,$80000005;False:True." }, { Name : "Remarks //", Attributes : "$00808080,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$00808080,$80000005;False:True." } ] } ] }, { Name : "Rust", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00D69C56,$80000005;False:True." }, { Name : "Macros", Attributes : "$00FFC14F,$80000005;False:True." }, { Name : "Operators", Attributes : "$00E8BCBC,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$00D4D4D4,$80000005;False:True." }, { Name : "Types", Attributes : "$00B0C94E,$80000005;False:True." }, { Name : "Complex types", Attributes : "$00B0C94E,$80000005;False:True." } ], Ranges : [ { Name : "Remarks //", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$007891CE,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$007891CE,$80000005;True:True." } ] }, { Name : "Chars '..'", Attributes : "$007891CE,$80000005;False:True." }, { Name : "Attributes (outer)", Attributes : "$006166C0,$80000005;False:True." }, { Name : "Attributes (inner)", Attributes : "$006166C0,$80000005;False:True." } ] } ] }, { Name : "Swift", Ranges : [ { Name : "Root", Attributes : "$80000008,$80000005;False:False.", KeyLists : [ { Name : "Keywords", Attributes : "$00D69C56,$80000005;False:True." }, { Name : "Operators", Attributes : "$00E8BCBC,$80000005;False:True." }, { Name : "Punctuators", Attributes : "$00D4D4D4,$80000005;False:True." }, { Name : "Types", Attributes : "$00B0C94E,$80000005;False:True." } ], Ranges : [ { Name : "Remarks //", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Remarks /*..*/", Attributes : "$008AD277,$80000005;False:True." }, { Name : "Strings \"..\"", Attributes : "$007891CE,$80000005;False:True.", KeyLists : [ { Name : "Escape", Attributes : "$007891CE,$80000005;True:True." } ] }, { Name : "Strings \"\"\"...\"\"\"", Attributes : "$007891CE,$80000005;False:True." } ] } ] } ] } ] } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/Swift.hgl�������������������������������������������������������������0000644�0001750�0000144�00000010771�15104114162�017044� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="Swift" Extensions="SWIFT" Other="0"/> <Author Name="" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="0" Date="45794,6870897801"/> <History> </History> <Sample> <S>// Syntax highlighting</S> <S>var myVariable = 42</S> <S>let myConstant = 42</S> <S>let explicitDouble: Double = 70</S> <S></S> <S>// Prints "Hello, world!"</S> <S>print("Hello, world!")</S> <S></S> <S>let individualScores = [75, 43, 103, 87, 12]</S> <S>var teamScore = 0</S> <S>for score in individualScores {</S> <S> if score > 50 {</S> <S> teamScore += 3</S> <S> } else {</S> <S> teamScore += 1</S> <S> }</S> <S>}</S> <S>// Prints "11"</S> <S>print(teamScore)</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="$00FF0000,$00FFFFFF;False:True." Style=""> <Word Value="class"/> <Word Value="deinit"/> <Word Value="enum"/> <Word Value="extension"/> <Word Value="func"/> <Word Value="import"/> <Word Value="init"/> <Word Value="internal"/> <Word Value="let"/> <Word Value="operator"/> <Word Value="private"/> <Word Value="protocol"/> <Word Value="public"/> <Word Value="static"/> <Word Value="struct"/> <Word Value="subscript"/> <Word Value="typealias"/> <Word Value="var"/> <Word Value="break"/> <Word Value="case"/> <Word Value="continue"/> <Word Value="default"/> <Word Value="do"/> <Word Value="else"/> <Word Value="fallthrough"/> <Word Value="for"/> <Word Value="if"/> <Word Value="in"/> <Word Value="return"/> <Word Value="switch"/> <Word Value="where"/> <Word Value="while"/> </Keywords> <Keywords Name="Operators" Attributes="$00CC3299,$80000005;False:True." Style=""> <Word Value="!"/> <Word Value="%"/> <Word Value="&"/> <Word Value="*"/> <Word Value="+"/> <Word Value="-"/> <Word Value="/"/> <Word Value="<"/> <Word Value="="/> <Word Value=">"/> <Word Value="?"/> <Word Value="\"/> <Word Value="^"/> <Word Value="|"/> </Keywords> <Keywords Name="Punctuators" Attributes="$000000FF,$80000005;False:True." Style=""> <Word Value="("/> <Word Value=")"/> <Word Value="["/> <Word Value="]"/> <Word Value="{"/> <Word Value="}"/> <Word Value=","/> <Word Value="."/> <Word Value=":"/> <Word Value=";"/> </Keywords> <Keywords Name="Types" Attributes="$00000080,$00FFFFFF;False:True." Style=""> <Word Value="Bool"/> <Word Value="Int"/> <Word Value="Int8"/> <Word Value="Int16"/> <Word Value="Int32"/> <Word Value="Int64"/> <Word Value="UInt"/> <Word Value="UInt8"/> <Word Value="UInt16"/> <Word Value="UInt32"/> <Word Value="UInt64"/> <Word Value="Double"/> <Word Value="Float"/> <Word Value="String"/> <Word Value="Character"/> </Keywords> <Range Name="Remarks //" Attributes="$00008000,$00FFFFFF;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="$00008000,$00FFFFFF;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> <Range Name="Strings ".."" Attributes="$00696969,$00FFFFFF;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" CloseSymbol="""/> <Keywords Name="Escape" Attributes="$00696969,$00FFFFFF;True:True." Style=""> <Word Value="\""/> <Word Value="\\"/> </Keywords> </Range> <Range Name="Strings """..."""" Attributes="$00696969,$00FFFFFF;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""""" CloseSymbol="""""/> </Range> </Range> </UniHighlighter> �������doublecmd-1.1.30/highlighters/Rust.hgl��������������������������������������������������������������0000644�0001750�0000144�00000016117�15104114162�016705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="Rust" Extensions="RS" Other="0"/> <Author Name="Skif_off" Email="" Web="" Copyright="" Company="N/A" Remark="Rules for 'Chars', 'Remarks' and 'Strings' from 'C++ Source.hgl'"/> <Version Version="1" Revision="3" Date="45338,8533801736"/> <History> </History> <Sample> <S>#![crate_type = "lib"]</S> <S></S> <S>let mut num = 5;</S> <S></S> <S>let r1 = &num as *const i32;</S> <S>let r2 = &mut num as *mut i32;</S> <S></S> <S>unsafe {</S> <S> println!("r1 is: {}", *r1);</S> <S> println!("r2 is: {}", *r2);</S> <S>}</S> <S></S> <S>// A function marked as a unit test</S> <S>#[test]</S> <S>fn test_foo() {</S> <S> /* ... */</S> <S>}</S> <S></S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" CaseSensitive="True" Delimiters="!"%&'()*+,-./:;<=>?@[\]^{|}~"> <Rule OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False"/> <Keywords Name="Keywords" Attributes="$00FF0000,$80000005;False:True." Style=""> <Word Value="as"/> <Word Value="async"/> <Word Value="await"/> <Word Value="break"/> <Word Value="const"/> <Word Value="continue"/> <Word Value="crate"/> <Word Value="dyn"/> <Word Value="else"/> <Word Value="enum"/> <Word Value="extern"/> <Word Value="false"/> <Word Value="fn"/> <Word Value="for"/> <Word Value="if"/> <Word Value="impl"/> <Word Value="in"/> <Word Value="let"/> <Word Value="loop"/> <Word Value="match"/> <Word Value="mod"/> <Word Value="move"/> <Word Value="mut"/> <Word Value="pub"/> <Word Value="ref"/> <Word Value="return"/> <Word Value="self"/> <Word Value="static"/> <Word Value="struct"/> <Word Value="super"/> <Word Value="trait"/> <Word Value="true"/> <Word Value="type"/> <Word Value="union"/> <Word Value="unsafe"/> <Word Value="use"/> <Word Value="where"/> <Word Value="while"/> </Keywords> <Keywords Name="Macros" Attributes="$00800000,$80000005;False:True." Style=""> <Word Value="assert"/> <Word Value="assert_eq"/> <Word Value="assert_ne"/> <Word Value="cfg"/> <Word Value="column"/> <Word Value="compile_error"/> <Word Value="concat"/> <Word Value="dbg"/> <Word Value="debug_assert"/> <Word Value="debug_assert_eq"/> <Word Value="debug_assert_ne"/> <Word Value="env"/> <Word Value="eprint"/> <Word Value="eprintln"/> <Word Value="file"/> <Word Value="format"/> <Word Value="format_args"/> <Word Value="include"/> <Word Value="include_bytes"/> <Word Value="include_str"/> <Word Value="is_x86_feature_detected"/> <Word Value="line"/> <Word Value="macro_rules"/> <Word Value="matches"/> <Word Value="module_path"/> <Word Value="option_env"/> <Word Value="panic"/> <Word Value="print"/> <Word Value="println"/> <Word Value="stringify"/> <Word Value="thread_local"/> <Word Value="todo"/> <Word Value="try"/> <Word Value="unimplemented"/> <Word Value="unreachable"/> <Word Value="vec"/> <Word Value="write"/> <Word Value="writeln"/> </Keywords> <Keywords Name="Operators" Attributes="$00CC3299,$80000005;False:True." Style=""> <Word Value="!"/> <Word Value="%"/> <Word Value="&"/> <Word Value="*"/> <Word Value="+"/> <Word Value="-"/> <Word Value="/"/> <Word Value="<"/> <Word Value="="/> <Word Value=">"/> <Word Value="?"/> <Word Value="\"/> <Word Value="^"/> <Word Value="|"/> </Keywords> <Keywords Name="Punctuators" Attributes="$000000FF,$80000005;False:True." Style=""> <Word Value="("/> <Word Value=")"/> <Word Value="["/> <Word Value="]"/> <Word Value="{"/> <Word Value="}"/> <Word Value=","/> <Word Value="."/> <Word Value=":"/> <Word Value=";"/> </Keywords> <Keywords Name="Types" Attributes="$00000080,$80000005;False:True." Style=""> <Word Value="bool"/> <Word Value="char"/> <Word Value="str"/> <Word Value="f32"/> <Word Value="f64"/> <Word Value="i8"/> <Word Value="i16"/> <Word Value="i32"/> <Word Value="i64"/> <Word Value="i128"/> <Word Value="isize"/> <Word Value="u8"/> <Word Value="u16"/> <Word Value="u32"/> <Word Value="u64"/> <Word Value="u128"/> <Word Value="usize"/> </Keywords> <Keywords Name="Complex types" Attributes="$00000080,$80000005;False:True." Style=""> <Word Value="String"/> <Word Value="Option"/> <Word Value="Result"/> <Word Value="Mutex"/> <Word Value="HashMap"/> <Word Value="RefCell"/> <Word Value="CString"/> <Word Value="Cell"/> <Word Value="File"/> <Word Value="CStr"/> <Word Value="Arc"/> <Word Value="Box"/> <Word Value="Vec"/> </Keywords> <Range Name="Remarks //" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" OpenSymbolPartOfTerm="Right" CloseSymbol="*/" CloseSymbolPartOfTerm="Right"/> </Range> <Range Name="Strings ".."" Attributes="$00696969,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="$00696969,$80000005;True:True." Style=""> <Word Value="\""/> <Word Value="\\"/> </Keywords> </Range> <Range Name="Chars '..'" Attributes="$00696969,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" OpenSymbolPartOfTerm="Right" CloseSymbol="'" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> </Range> <Range Name="Attributes (outer)" Attributes="$00000096,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="#[" OpenSymbolStartLine="NonSpace" CloseSymbol="]"/> </Range> <Range Name="Attributes (inner)" Attributes="$00000096,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="#![" OpenSymbolStartLine="NonSpace" CloseSymbol="]"/> </Range> </Range> </UniHighlighter> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/QML.hgl���������������������������������������������������������������0000644�0001750�0000144�00000027753�15104114162�016411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="QML" Extensions="qml" Other="0"/> <Author Name="Alexander V" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="0" Date="45654.5420000000"/> <History> </History> <Sample> <S>import QtQuick 2.0</S> <S></S> <S>Item {</S> <S> id: rootItem</S> <S> anchors.fill: parent</S> <S></S> <S> // useful properties</S> <S> readonly property string myString: "hello, world"</S> <S> readonly property int myValue: Math.floor(parent.height / 9) - 123</S> <S></S> <S> /* base element */</S> <S> Rectangle { anchors.fill: parent; color: "black" }</S> <S></S> <S> Column {</S> <S> spacing: myValue</S> <S></S> <S> Repeater {</S> <S> model: [ "a", "b", "c" ]</S> <S> }</S> <S> }</S> <S>}</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="-2147483640,-2147483643;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="$00808000,$80000005;False:True." Style=""> <Word Value="alias"/> <Word Value="break"/> <Word Value="case"/> <Word Value="catch"/> <Word Value="continue"/> <Word Value="default"/> <Word Value="delete"/> <Word Value="do"/> <Word Value="else"/> <Word Value="enum"/> <Word Value="finally"/> <Word Value="for"/> <Word Value="function"/> <Word Value="if"/> <Word Value="import"/> <Word Value="in"/> <Word Value="instanceof"/> <Word Value="new"/> <Word Value="on"/> <Word Value="property"/> <Word Value="readonly"/> <Word Value="return"/> <Word Value="signal"/> <Word Value="switch"/> <Word Value="this"/> <Word Value="throw"/> <Word Value="try"/> <Word Value="typeof"/> <Word Value="var"/> <Word Value="void"/> <Word Value="while"/> <Word Value="with"/> </Keywords> <Keywords Name="Basic types" Attributes="$00808000,$80000005;False:True." Style=""> <Word Value="bool"/> <Word Value="color"/> <Word Value="date"/> <Word Value="double"/> <Word Value="enumeration"/> <Word Value="font"/> <Word Value="int"/> <Word Value="list"/> <Word Value="matrix4x4"/> <Word Value="point"/> <Word Value="quaternion"/> <Word Value="real"/> <Word Value="rect"/> <Word Value="size"/> <Word Value="string"/> <Word Value="url"/> <Word Value="vector2d"/> <Word Value="vector3d"/> <Word Value="vector4d"/> </Keywords> <Keywords Name="QtQuick Object Types" Attributes="$00800080,$80000005;False:True." Style=""> <Word Value="Accessible"/> <Word Value="AnchorAnimation"/> <Word Value="AnchorChanges"/> <Word Value="AnimatedImage"/> <Word Value="AnimatedSprite"/> <Word Value="Animation"/> <Word Value="AnimationController"/> <Word Value="Animator"/> <Word Value="Behavior"/> <Word Value="BorderImage"/> <Word Value="BorderImageMesh"/> <Word Value="Canvas"/> <Word Value="CanvasGradient"/> <Word Value="CanvasImageData"/> <Word Value="CanvasPixelArray"/> <Word Value="ColorAnimation"/> <Word Value="Column"/> <Word Value="Context2D"/> <Word Value="DoubleValidator"/> <Word Value="Drag"/> <Word Value="DragEvent"/> <Word Value="DragHandler"/> <Word Value="DropArea"/> <Word Value="EnterKey"/> <Word Value="EventPoint"/> <Word Value="EventTouchPoint"/> <Word Value="Flickable"/> <Word Value="Flipable"/> <Word Value="Flow"/> <Word Value="FocusScope"/> <Word Value="FontLoader"/> <Word Value="FontMetrics"/> <Word Value="GestureEvent"/> <Word Value="Gradient"/> <Word Value="GradientStop"/> <Word Value="GraphicsInfo"/> <Word Value="Grid"/> <Word Value="GridMesh"/> <Word Value="GridView"/> <Word Value="HandlerPoint"/> <Word Value="HoverHandler"/> <Word Value="Image"/> <Word Value="IntValidator"/> <Word Value="Item"/> <Word Value="ItemGrabResult"/> <Word Value="KeyEvent"/> <Word Value="KeyNavigation"/> <Word Value="Keys"/> <Word Value="LayoutMirroring"/> <Word Value="ListView"/> <Word Value="Loader"/> <Word Value="Matrix4x4"/> <Word Value="MouseArea"/> <Word Value="MouseEvent"/> <Word Value="MultiPointHandler"/> <Word Value="MultiPointTouchArea"/> <Word Value="NumberAnimation"/> <Word Value="OpacityAnimator"/> <Word Value="ParallelAnimation"/> <Word Value="ParentAnimation"/> <Word Value="ParentChange"/> <Word Value="Path"/> <Word Value="PathAngleArc"/> <Word Value="PathAnimation"/> <Word Value="PathArc"/> <Word Value="PathAttribute"/> <Word Value="PathCubic"/> <Word Value="PathCurve"/> <Word Value="PathElement"/> <Word Value="PathInterpolator"/> <Word Value="PathLine"/> <Word Value="PathMove"/> <Word Value="PathMultiline"/> <Word Value="PathPercent"/> <Word Value="PathPolyline"/> <Word Value="PathQuad"/> <Word Value="PathSvg"/> <Word Value="PathText"/> <Word Value="PathView"/> <Word Value="PauseAnimation"/> <Word Value="PinchArea"/> <Word Value="PinchEvent"/> <Word Value="PinchHandler"/> <Word Value="PointHandler"/> <Word Value="PointerDevice"/> <Word Value="PointerDeviceHandler"/> <Word Value="PointerEvent"/> <Word Value="PointerHandler"/> <Word Value="PointerScrollEvent"/> <Word Value="Positioner"/> <Word Value="PropertyAction"/> <Word Value="PropertyAnimation"/> <Word Value="PropertyChanges"/> <Word Value="Rectangle"/> <Word Value="RegularExpressionValidator"/> <Word Value="Repeater"/> <Word Value="Rotation"/> <Word Value="RotationAnimation"/> <Word Value="RotationAnimator"/> <Word Value="Row"/> <Word Value="Scale"/> <Word Value="ScaleAnimator"/> <Word Value="ScriptAction"/> <Word Value="SequentialAnimation"/> <Word Value="ShaderEffect"/> <Word Value="ShaderEffectSource"/> <Word Value="Shortcut"/> <Word Value="SinglePointHandler"/> <Word Value="SmoothedAnimation"/> <Word Value="SpringAnimation"/> <Word Value="Sprite"/> <Word Value="SpriteSequence"/> <Word Value="State"/> <Word Value="StateChangeScript"/> <Word Value="StateGroup"/> <Word Value="SystemPalette"/> <Word Value="TableView"/> <Word Value="TapHandler"/> <Word Value="Text"/> <Word Value="TextEdit"/> <Word Value="TextInput"/> <Word Value="TextMetrics"/> <Word Value="TouchPoint"/> <Word Value="Transform"/> <Word Value="Transition"/> <Word Value="Translate"/> <Word Value="UniformAnimator"/> <Word Value="Vector3dAnimation"/> <Word Value="ViewTransition"/> <Word Value="WheelEvent"/> <Word Value="WheelHandler"/> <Word Value="XAnimator"/> <Word Value="YAnimator"/> </Keywords> <Keywords Name="Aurora & Sailfish Silica Types" Attributes="$00800080,$80000005;False:True." Style=""> <Word Value="AppBar"/> <Word Value="AppBarButton"/> <Word Value="AppBarSearchField"/> <Word Value="AppBarSpacer"/> <Word Value="PopupMenu"/> <Word Value="PopupMenuCheckableItem"/> <Word Value="PopupMenuDividerItem"/> <Word Value="PopupMenuItem"/> <Word Value="PopupSubMenuItem"/> <Word Value="PopupToolMenu"/> <Word Value="PopupToolMenuButton"/> <Word Value="PullToRefresh"/> <Word Value="SplitView"/> <Word Value="AddAnimation"/> <Word Value="ApplicationWindow"/> <Word Value="BackgroundItem"/> <Word Value="BusyIndicator"/> <Word Value="BusyLabel"/> <Word Value="Button"/> <Word Value="ButtonLayout"/> <Word Value="Clipboard"/> <Word Value="ColorPicker"/> <Word Value="ColorPickerDialog"/> <Word Value="ColorPickerPage"/> <Word Value="ColumnView"/> <Word Value="ComboBox"/> <Word Value="ContextMenu"/> <Word Value="Cover"/> <Word Value="CoverAction"/> <Word Value="CoverActionList"/> <Word Value="CoverBackground"/> <Word Value="CoverPlaceholder"/> <Word Value="CoverTemplate"/> <Word Value="DatePicker"/> <Word Value="DatePickerDialog"/> <Word Value="DetailItem"/> <Word Value="Dialog"/> <Word Value="DialogHeader"/> <Word Value="DockedPanel"/> <Word Value="Drawer"/> <Word Value="FadeAnimation"/> <Word Value="FadeAnimator"/> <Word Value="GridItem"/> <Word Value="HighlightImage"/> <Word Value="HorizontalScrollDecorator"/> <Word Value="Icon"/> <Word Value="IconButton"/> <Word Value="IconTextSwitch"/> <Word Value="Keypad"/> <Word Value="Label"/> <Word Value="LinkedLabel"/> <Word Value="ListItem"/> <Word Value="MenuItem"/> <Word Value="MenuLabel"/> <Word Value="OpacityRampEffect"/> <Word Value="Page"/> <Word Value="PageBusyIndicator"/> <Word Value="PageHeader"/> <Word Value="PageStack"/> <Word Value="PagedView"/> <Word Value="Palette"/> <Word Value="PasswordField"/> <Word Value="ProgressBar"/> <Word Value="PullDownMenu"/> <Word Value="PushUpMenu"/> <Word Value="Remorse"/> <Word Value="RemorseItem"/> <Word Value="RemorsePopup"/> <Word Value="RemoveAnimation"/> <Word Value="SafeZoneRect"/> <Word Value="SafeZoneRectInsets"/> <Word Value="Screen"/> <Word Value="ScrollDecorator"/> <Word Value="SearchField"/> <Word Value="SectionHeader"/> <Word Value="Separator"/> <Word Value="SilicaControl"/> <Word Value="SilicaFlickable"/> <Word Value="SilicaGridView"/> <Word Value="SilicaItem"/> <Word Value="SilicaListView"/> <Word Value="SilicaWebView"/> <Word Value="Slider"/> <Word Value="SlideshowView"/> <Word Value="StandardPaths"/> <Word Value="Switch"/> <Word Value="TextArea"/> <Word Value="TextField"/> <Word Value="TextSwitch"/> <Word Value="Theme"/> <Word Value="TimePicker"/> <Word Value="TimePickerDialog"/> <Word Value="TouchBlocker"/> <Word Value="ValueButton"/> <Word Value="VerticalScrollDecorator"/> </Keywords> <Range Name="Strings '..'" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" CloseSymbol="'"/> </Range> <Range Name="Strings ".."" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> </Range> <Range Name="Remarks //" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> </Range> </UniHighlighter> ���������������������doublecmd-1.1.30/highlighters/PowerShell.hgl��������������������������������������������������������0000644�0001750�0000144�00000234614�15104114162�020040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="PowerShell" Extensions="ps1,psm1,psd1" Other="0"/> <Author Name="" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="0" Date="45067.6951692245"/> <History> </History> <Sample> <S># Multiline Comments</S> <S><#</S> <S> Hello</S> <S> world</S> <S>#></S> <S>'Single quoted string'</S> <S>"Double quoted string"</S> <S>@'</S> <S>Single quoted here-string</S> <S>'@</S> <S>@"</S> <S>Double quoted here-string</S> <S>"@</S> <S># Variables</S> <S>$name = 'value'</S> <S># Keywords</S> <S>switch ("fourteen") {}</S> <S># Functions</S> <S>$stpool = (Get-StoragePool -FriendlyName "SpacePool")</S> <S># Aliases</S> <S>Disable-PhysicalDiskIndication -StoragePool $stpool</S> <S># Cmdlets</S> <S>Write-Host -Message 'This is a message'</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbolPartOfTerm="False" CloseSymbolPartOfTerm="False"/> <Keywords Name="Keywords" Attributes="$00FF0000,$80000005;False:True." Style=""> <Word Value="begin"/> <Word Value="break"/> <Word Value="catch"/> <Word Value="class"/> <Word Value="continue"/> <Word Value="data"/> <Word Value="do"/> <Word Value="dynamicparam"/> <Word Value="else"/> <Word Value="elseif"/> <Word Value="end"/> <Word Value="enum"/> <Word Value="exit"/> <Word Value="filter"/> <Word Value="finally"/> <Word Value="for"/> <Word Value="foreach"/> <Word Value="function"/> <Word Value="hidden"/> <Word Value="if"/> <Word Value="in"/> <Word Value="inlinescript"/> <Word Value="parallel"/> <Word Value="param"/> <Word Value="process"/> <Word Value="return"/> <Word Value="sequence"/> <Word Value="static"/> <Word Value="switch"/> <Word Value="throw"/> <Word Value="trap"/> <Word Value="try"/> <Word Value="until"/> <Word Value="using"/> <Word Value="while"/> <Word Value="workflow"/> </Keywords> <Keywords Name="Aliases" Attributes="$00C08000,$80000005;False:True." Style=""> <Word Value="Add-AppPackage"/> <Word Value="Add-AppPackageVolume"/> <Word Value="Add-AppProvisionedPackage"/> <Word Value="Add-ProvisionedAppPackage"/> <Word Value="Add-ProvisionedAppxPackage"/> <Word Value="Add-ProvisioningPackage"/> <Word Value="Add-TrustedProvisioningCertificate"/> <Word Value="Apply-WindowsUnattend"/> <Word Value="Disable-PhysicalDiskIndication"/> <Word Value="Disable-StorageDiagnosticLog"/> <Word Value="Dismount-AppPackageVolume"/> <Word Value="Enable-PhysicalDiskIndication"/> <Word Value="Enable-StorageDiagnosticLog"/> <Word Value="Flush-Volume"/> <Word Value="Get-AppPackage"/> <Word Value="Get-AppPackageLastError"/> <Word Value="Get-AppPackageLog"/> <Word Value="Get-AppPackageManifest"/> <Word Value="Get-AppPackageVolume"/> <Word Value="Get-AppProvisionedPackage"/> <Word Value="Get-DiskSNV"/> <Word Value="Get-Language"/> <Word Value="Get-PhysicalDiskSNV"/> <Word Value="Get-PreferredLanguage"/> <Word Value="Get-ProvisionedAppPackage"/> <Word Value="Get-ProvisionedAppxPackage"/> <Word Value="Get-StorageEnclosureSNV"/> <Word Value="Get-SystemLanguage"/> <Word Value="Initialize-Volume"/> <Word Value="Mount-AppPackageVolume"/> <Word Value="Move-AppPackage"/> <Word Value="Move-SmbClient"/> <Word Value="Optimize-AppProvisionedPackages"/> <Word Value="Optimize-ProvisionedAppPackages"/> <Word Value="Optimize-ProvisionedAppxPackages"/> <Word Value="Remove-AppPackage"/> <Word Value="Remove-AppPackageVolume"/> <Word Value="Remove-AppProvisionedPackage"/> <Word Value="Remove-EtwTraceSession"/> <Word Value="Remove-ProvisionedAppPackage"/> <Word Value="Remove-ProvisionedAppxPackage"/> <Word Value="Remove-ProvisioningPackage"/> <Word Value="Remove-TrustedProvisioningCertificate"/> <Word Value="Set-AppPackageDefaultVolume"/> <Word Value="Set-AppPackageProvisionedDataFile"/> <Word Value="Set-AutologgerConfig"/> <Word Value="Set-EtwTraceSession"/> <Word Value="Set-PreferredLanguage"/> <Word Value="Set-ProvisionedAppPackageDataFile"/> <Word Value="Set-ProvisionedAppXDataFile"/> <Word Value="Set-SystemLanguage"/> <Word Value="Write-FileSystemCache"/> </Keywords> <Keywords Name="Functions" Attributes="$00000080,$80000005;False:True." Style=""> <Word Value="A:"/> <Word Value="Add-BCDataCacheExtension"/> <Word Value="Add-BitLockerKeyProtector"/> <Word Value="Add-DnsClientNrptRule"/> <Word Value="Add-DtcClusterTMMapping"/> <Word Value="Add-EtwTraceProvider"/> <Word Value="Add-InitiatorIdToMaskingSet"/> <Word Value="Add-MpPreference"/> <Word Value="Add-MpPreference"/> <Word Value="Add-NetEventNetworkAdapter"/> <Word Value="Add-NetEventPacketCaptureProvider"/> <Word Value="Add-NetEventProvider"/> <Word Value="Add-NetEventVFPProvider"/> <Word Value="Add-NetEventVmNetworkAdapter"/> <Word Value="Add-NetEventVmSwitch"/> <Word Value="Add-NetEventVmSwitchProvider"/> <Word Value="Add-NetEventWFPCaptureProvider"/> <Word Value="Add-NetIPHttpsCertBinding"/> <Word Value="Add-NetLbfoTeamMember"/> <Word Value="Add-NetLbfoTeamNic"/> <Word Value="Add-NetNatExternalAddress"/> <Word Value="Add-NetNatStaticMapping"/> <Word Value="Add-NetSwitchTeamMember"/> <Word Value="Add-OdbcDsn"/> <Word Value="Add-PartitionAccessPath"/> <Word Value="Add-PhysicalDisk"/> <Word Value="Add-Printer"/> <Word Value="Add-PrinterDriver"/> <Word Value="Add-PrinterPort"/> <Word Value="Add-StorageFaultDomain"/> <Word Value="Add-TargetPortToMaskingSet"/> <Word Value="Add-VirtualDiskToMaskingSet"/> <Word Value="Add-VpnConnection"/> <Word Value="Add-VpnConnectionRoute"/> <Word Value="Add-VpnConnectionTriggerApplication"/> <Word Value="Add-VpnConnectionTriggerDnsConfiguration"/> <Word Value="Add-VpnConnectionTriggerTrustedNetwork"/> <Word Value="AfterAll"/> <Word Value="AfterAll"/> <Word Value="AfterEach"/> <Word Value="AfterEach"/> <Word Value="Assert-MockCalled"/> <Word Value="Assert-MockCalled"/> <Word Value="Assert-VerifiableMocks"/> <Word Value="Assert-VerifiableMocks"/> <Word Value="B:"/> <Word Value="Backup-BitLockerKeyProtector"/> <Word Value="BackupToAAD-BitLockerKeyProtector"/> <Word Value="BeforeAll"/> <Word Value="BeforeAll"/> <Word Value="BeforeEach"/> <Word Value="BeforeEach"/> <Word Value="Block-FileShareAccess"/> <Word Value="Block-SmbShareAccess"/> <Word Value="C:"/> <Word Value="cd.."/> <Word Value="cd\"/> <Word Value="Clear-AssignedAccess"/> <Word Value="Clear-BCCache"/> <Word Value="Clear-BitLockerAutoUnlock"/> <Word Value="Clear-Disk"/> <Word Value="Clear-DnsClientCache"/> <Word Value="Clear-FileStorageTier"/> <Word Value="Clear-Host"/> <Word Value="Clear-PcsvDeviceLog"/> <Word Value="Clear-StorageBusDisk"/> <Word Value="Clear-StorageDiagnosticInfo"/> <Word Value="Close-SmbOpenFile"/> <Word Value="Close-SmbSession"/> <Word Value="Compress-Archive"/> <Word Value="Configuration"/> <Word Value="Connect-IscsiTarget"/> <Word Value="Connect-VirtualDisk"/> <Word Value="Context"/> <Word Value="Context"/> <Word Value="ConvertFrom-SddlString"/> <Word Value="Copy-NetFirewallRule"/> <Word Value="Copy-NetIPsecMainModeCryptoSet"/> <Word Value="Copy-NetIPsecMainModeRule"/> <Word Value="Copy-NetIPsecPhase1AuthSet"/> <Word Value="Copy-NetIPsecPhase2AuthSet"/> <Word Value="Copy-NetIPsecQuickModeCryptoSet"/> <Word Value="Copy-NetIPsecRule"/> <Word Value="D:"/> <Word Value="Debug-FileShare"/> <Word Value="Debug-MMAppPrelaunch"/> <Word Value="Debug-StorageSubSystem"/> <Word Value="Debug-Volume"/> <Word Value="Describe"/> <Word Value="Describe"/> <Word Value="Disable-BC"/> <Word Value="Disable-BCDowngrading"/> <Word Value="Disable-BCServeOnBattery"/> <Word Value="Disable-BitLocker"/> <Word Value="Disable-BitLockerAutoUnlock"/> <Word Value="Disable-DAManualEntryPointSelection"/> <Word Value="Disable-DeliveryOptimizationVerboseLogs"/> <Word Value="Disable-DscDebug"/> <Word Value="Disable-MMAgent"/> <Word Value="Disable-NetAdapter"/> <Word Value="Disable-NetAdapterBinding"/> <Word Value="Disable-NetAdapterChecksumOffload"/> <Word Value="Disable-NetAdapterEncapsulatedPacketTaskOffload"/> <Word Value="Disable-NetAdapterIPsecOffload"/> <Word Value="Disable-NetAdapterLso"/> <Word Value="Disable-NetAdapterPacketDirect"/> <Word Value="Disable-NetAdapterPowerManagement"/> <Word Value="Disable-NetAdapterQos"/> <Word Value="Disable-NetAdapterRdma"/> <Word Value="Disable-NetAdapterRsc"/> <Word Value="Disable-NetAdapterRss"/> <Word Value="Disable-NetAdapterSriov"/> <Word Value="Disable-NetAdapterUso"/> <Word Value="Disable-NetAdapterVmq"/> <Word Value="Disable-NetDnsTransitionConfiguration"/> <Word Value="Disable-NetFirewallRule"/> <Word Value="Disable-NetIPHttpsProfile"/> <Word Value="Disable-NetIPsecMainModeRule"/> <Word Value="Disable-NetIPsecRule"/> <Word Value="Disable-NetNatTransitionConfiguration"/> <Word Value="Disable-NetworkSwitchEthernetPort"/> <Word Value="Disable-NetworkSwitchFeature"/> <Word Value="Disable-NetworkSwitchVlan"/> <Word Value="Disable-OdbcPerfCounter"/> <Word Value="Disable-PhysicalDiskIdentification"/> <Word Value="Disable-PnpDevice"/> <Word Value="Disable-PSTrace"/> <Word Value="Disable-PSWSManCombinedTrace"/> <Word Value="Disable-ScheduledTask"/> <Word Value="Disable-SmbDelegation"/> <Word Value="Disable-StorageBusCache"/> <Word Value="Disable-StorageBusDisk"/> <Word Value="Disable-StorageEnclosureIdentification"/> <Word Value="Disable-StorageEnclosurePower"/> <Word Value="Disable-StorageHighAvailability"/> <Word Value="Disable-StorageMaintenanceMode"/> <Word Value="Disable-WdacBidTrace"/> <Word Value="Disable-WSManTrace"/> <Word Value="Disconnect-IscsiTarget"/> <Word Value="Disconnect-VirtualDisk"/> <Word Value="Dismount-DiskImage"/> <Word Value="E:"/> <Word Value="Enable-BCDistributed"/> <Word Value="Enable-BCDowngrading"/> <Word Value="Enable-BCHostedClient"/> <Word Value="Enable-BCHostedServer"/> <Word Value="Enable-BCLocal"/> <Word Value="Enable-BCServeOnBattery"/> <Word Value="Enable-BitLocker"/> <Word Value="Enable-BitLockerAutoUnlock"/> <Word Value="Enable-DAManualEntryPointSelection"/> <Word Value="Enable-DeliveryOptimizationVerboseLogs"/> <Word Value="Enable-DscDebug"/> <Word Value="Enable-MMAgent"/> <Word Value="Enable-NetAdapter"/> <Word Value="Enable-NetAdapterBinding"/> <Word Value="Enable-NetAdapterChecksumOffload"/> <Word Value="Enable-NetAdapterEncapsulatedPacketTaskOffload"/> <Word Value="Enable-NetAdapterIPsecOffload"/> <Word Value="Enable-NetAdapterLso"/> <Word Value="Enable-NetAdapterPacketDirect"/> <Word Value="Enable-NetAdapterPowerManagement"/> <Word Value="Enable-NetAdapterQos"/> <Word Value="Enable-NetAdapterRdma"/> <Word Value="Enable-NetAdapterRsc"/> <Word Value="Enable-NetAdapterRss"/> <Word Value="Enable-NetAdapterSriov"/> <Word Value="Enable-NetAdapterUso"/> <Word Value="Enable-NetAdapterVmq"/> <Word Value="Enable-NetDnsTransitionConfiguration"/> <Word Value="Enable-NetFirewallRule"/> <Word Value="Enable-NetIPHttpsProfile"/> <Word Value="Enable-NetIPsecMainModeRule"/> <Word Value="Enable-NetIPsecRule"/> <Word Value="Enable-NetNatTransitionConfiguration"/> <Word Value="Enable-NetworkSwitchEthernetPort"/> <Word Value="Enable-NetworkSwitchFeature"/> <Word Value="Enable-NetworkSwitchVlan"/> <Word Value="Enable-OdbcPerfCounter"/> <Word Value="Enable-PhysicalDiskIdentification"/> <Word Value="Enable-PnpDevice"/> <Word Value="Enable-PSTrace"/> <Word Value="Enable-PSWSManCombinedTrace"/> <Word Value="Enable-ScheduledTask"/> <Word Value="Enable-SmbDelegation"/> <Word Value="Enable-StorageBusCache"/> <Word Value="Enable-StorageBusDisk"/> <Word Value="Enable-StorageEnclosureIdentification"/> <Word Value="Enable-StorageEnclosurePower"/> <Word Value="Enable-StorageHighAvailability"/> <Word Value="Enable-StorageMaintenanceMode"/> <Word Value="Enable-WdacBidTrace"/> <Word Value="Enable-WSManTrace"/> <Word Value="Expand-Archive"/> <Word Value="Export-BCCachePackage"/> <Word Value="Export-BCSecretKey"/> <Word Value="Export-ODataEndpointProxy"/> <Word Value="Export-ScheduledTask"/> <Word Value="F:"/> <Word Value="Find-Command"/> <Word Value="Find-Command"/> <Word Value="Find-DscResource"/> <Word Value="Find-DscResource"/> <Word Value="Find-Module"/> <Word Value="Find-Module"/> <Word Value="Find-NetIPsecRule"/> <Word Value="Find-NetRoute"/> <Word Value="Find-RoleCapability"/> <Word Value="Find-RoleCapability"/> <Word Value="Find-Script"/> <Word Value="Find-Script"/> <Word Value="Flush-EtwTraceSession"/> <Word Value="Format-Hex"/> <Word Value="Format-Volume"/> <Word Value="G:"/> <Word Value="Get-AppBackgroundTask"/> <Word Value="Get-AppvVirtualProcess"/> <Word Value="Get-AppxLastError"/> <Word Value="Get-AppxLog"/> <Word Value="Get-AssignedAccess"/> <Word Value="Get-AutologgerConfig"/> <Word Value="Get-BCClientConfiguration"/> <Word Value="Get-BCContentServerConfiguration"/> <Word Value="Get-BCDataCache"/> <Word Value="Get-BCDataCacheExtension"/> <Word Value="Get-BCHashCache"/> <Word Value="Get-BCHostedCacheServerConfiguration"/> <Word Value="Get-BCNetworkConfiguration"/> <Word Value="Get-BCStatus"/> <Word Value="Get-BitLockerVolume"/> <Word Value="Get-ClusteredScheduledTask"/> <Word Value="Get-DAClientExperienceConfiguration"/> <Word Value="Get-DAConnectionStatus"/> <Word Value="Get-DAEntryPointTableItem"/> <Word Value="Get-DedupProperties"/> <Word Value="Get-DeliveryOptimizationPerfSnap"/> <Word Value="Get-DeliveryOptimizationPerfSnapThisMonth"/> <Word Value="Get-DeliveryOptimizationStatus"/> <Word Value="Get-Disk"/> <Word Value="Get-DiskImage"/> <Word Value="Get-DiskStorageNodeView"/> <Word Value="Get-DnsClient"/> <Word Value="Get-DnsClientCache"/> <Word Value="Get-DnsClientGlobalSetting"/> <Word Value="Get-DnsClientNrptGlobal"/> <Word Value="Get-DnsClientNrptPolicy"/> <Word Value="Get-DnsClientNrptRule"/> <Word Value="Get-DnsClientServerAddress"/> <Word Value="Get-DOConfig"/> <Word Value="Get-DODownloadMode"/> <Word Value="Get-DOPercentageMaxBackgroundBandwidth"/> <Word Value="Get-DOPercentageMaxForegroundBandwidth"/> <Word Value="Get-DscConfiguration"/> <Word Value="Get-DscConfigurationStatus"/> <Word Value="Get-DscLocalConfigurationManager"/> <Word Value="Get-DscResource"/> <Word Value="Get-Dtc"/> <Word Value="Get-DtcAdvancedHostSetting"/> <Word Value="Get-DtcAdvancedSetting"/> <Word Value="Get-DtcClusterDefault"/> <Word Value="Get-DtcClusterTMMapping"/> <Word Value="Get-DtcDefault"/> <Word Value="Get-DtcLog"/> <Word Value="Get-DtcNetworkSetting"/> <Word Value="Get-DtcTransaction"/> <Word Value="Get-DtcTransactionsStatistics"/> <Word Value="Get-DtcTransactionsTraceSession"/> <Word Value="Get-DtcTransactionsTraceSetting"/> <Word Value="Get-EtwTraceProvider"/> <Word Value="Get-EtwTraceSession"/> <Word Value="Get-FileHash"/> <Word Value="Get-FileIntegrity"/> <Word Value="Get-FileShare"/> <Word Value="Get-FileShareAccessControlEntry"/> <Word Value="Get-FileStorageTier"/> <Word Value="Get-InitiatorId"/> <Word Value="Get-InitiatorPort"/> <Word Value="Get-InstalledModule"/> <Word Value="Get-InstalledModule"/> <Word Value="Get-InstalledScript"/> <Word Value="Get-InstalledScript"/> <Word Value="Get-IscsiConnection"/> <Word Value="Get-IscsiSession"/> <Word Value="Get-IscsiTarget"/> <Word Value="Get-IscsiTargetPortal"/> <Word Value="Get-IseSnippet"/> <Word Value="Get-LogProperties"/> <Word Value="Get-MaskingSet"/> <Word Value="Get-MMAgent"/> <Word Value="Get-MockDynamicParameters"/> <Word Value="Get-MockDynamicParameters"/> <Word Value="Get-MpComputerStatus"/> <Word Value="Get-MpComputerStatus"/> <Word Value="Get-MpPerformanceReport"/> <Word Value="Get-MpPreference"/> <Word Value="Get-MpPreference"/> <Word Value="Get-MpThreat"/> <Word Value="Get-MpThreat"/> <Word Value="Get-MpThreatCatalog"/> <Word Value="Get-MpThreatCatalog"/> <Word Value="Get-MpThreatDetection"/> <Word Value="Get-MpThreatDetection"/> <Word Value="Get-NCSIPolicyConfiguration"/> <Word Value="Get-Net6to4Configuration"/> <Word Value="Get-NetAdapter"/> <Word Value="Get-NetAdapterAdvancedProperty"/> <Word Value="Get-NetAdapterBinding"/> <Word Value="Get-NetAdapterChecksumOffload"/> <Word Value="Get-NetAdapterEncapsulatedPacketTaskOffload"/> <Word Value="Get-NetAdapterHardwareInfo"/> <Word Value="Get-NetAdapterIPsecOffload"/> <Word Value="Get-NetAdapterLso"/> <Word Value="Get-NetAdapterPacketDirect"/> <Word Value="Get-NetAdapterPowerManagement"/> <Word Value="Get-NetAdapterQos"/> <Word Value="Get-NetAdapterRdma"/> <Word Value="Get-NetAdapterRsc"/> <Word Value="Get-NetAdapterRss"/> <Word Value="Get-NetAdapterSriov"/> <Word Value="Get-NetAdapterSriovVf"/> <Word Value="Get-NetAdapterStatistics"/> <Word Value="Get-NetAdapterUso"/> <Word Value="Get-NetAdapterVmq"/> <Word Value="Get-NetAdapterVMQQueue"/> <Word Value="Get-NetAdapterVPort"/> <Word Value="Get-NetCompartment"/> <Word Value="Get-NetConnectionProfile"/> <Word Value="Get-NetDnsTransitionConfiguration"/> <Word Value="Get-NetDnsTransitionMonitoring"/> <Word Value="Get-NetEventNetworkAdapter"/> <Word Value="Get-NetEventPacketCaptureProvider"/> <Word Value="Get-NetEventProvider"/> <Word Value="Get-NetEventSession"/> <Word Value="Get-NetEventVFPProvider"/> <Word Value="Get-NetEventVmNetworkAdapter"/> <Word Value="Get-NetEventVmSwitch"/> <Word Value="Get-NetEventVmSwitchProvider"/> <Word Value="Get-NetEventWFPCaptureProvider"/> <Word Value="Get-NetFirewallAddressFilter"/> <Word Value="Get-NetFirewallApplicationFilter"/> <Word Value="Get-NetFirewallDynamicKeywordAddress"/> <Word Value="Get-NetFirewallInterfaceFilter"/> <Word Value="Get-NetFirewallInterfaceTypeFilter"/> <Word Value="Get-NetFirewallPortFilter"/> <Word Value="Get-NetFirewallProfile"/> <Word Value="Get-NetFirewallRule"/> <Word Value="Get-NetFirewallSecurityFilter"/> <Word Value="Get-NetFirewallServiceFilter"/> <Word Value="Get-NetFirewallSetting"/> <Word Value="Get-NetIPAddress"/> <Word Value="Get-NetIPConfiguration"/> <Word Value="Get-NetIPHttpsConfiguration"/> <Word Value="Get-NetIPHttpsState"/> <Word Value="Get-NetIPInterface"/> <Word Value="Get-NetIPsecDospSetting"/> <Word Value="Get-NetIPsecMainModeCryptoSet"/> <Word Value="Get-NetIPsecMainModeRule"/> <Word Value="Get-NetIPsecMainModeSA"/> <Word Value="Get-NetIPsecPhase1AuthSet"/> <Word Value="Get-NetIPsecPhase2AuthSet"/> <Word Value="Get-NetIPsecQuickModeCryptoSet"/> <Word Value="Get-NetIPsecQuickModeSA"/> <Word Value="Get-NetIPsecRule"/> <Word Value="Get-NetIPv4Protocol"/> <Word Value="Get-NetIPv6Protocol"/> <Word Value="Get-NetIsatapConfiguration"/> <Word Value="Get-NetLbfoTeam"/> <Word Value="Get-NetLbfoTeamMember"/> <Word Value="Get-NetLbfoTeamNic"/> <Word Value="Get-NetNat"/> <Word Value="Get-NetNatExternalAddress"/> <Word Value="Get-NetNatGlobal"/> <Word Value="Get-NetNatSession"/> <Word Value="Get-NetNatStaticMapping"/> <Word Value="Get-NetNatTransitionConfiguration"/> <Word Value="Get-NetNatTransitionMonitoring"/> <Word Value="Get-NetNeighbor"/> <Word Value="Get-NetOffloadGlobalSetting"/> <Word Value="Get-NetPrefixPolicy"/> <Word Value="Get-NetQosPolicy"/> <Word Value="Get-NetRoute"/> <Word Value="Get-NetSwitchTeam"/> <Word Value="Get-NetSwitchTeamMember"/> <Word Value="Get-NetTCPConnection"/> <Word Value="Get-NetTCPSetting"/> <Word Value="Get-NetTeredoConfiguration"/> <Word Value="Get-NetTeredoState"/> <Word Value="Get-NetTransportFilter"/> <Word Value="Get-NetUDPEndpoint"/> <Word Value="Get-NetUDPSetting"/> <Word Value="Get-NetworkSwitchEthernetPort"/> <Word Value="Get-NetworkSwitchFeature"/> <Word Value="Get-NetworkSwitchGlobalData"/> <Word Value="Get-NetworkSwitchVlan"/> <Word Value="Get-OdbcDriver"/> <Word Value="Get-OdbcDsn"/> <Word Value="Get-OdbcPerfCounter"/> <Word Value="Get-OffloadDataTransferSetting"/> <Word Value="Get-OperationValidation"/> <Word Value="Get-OperationValidation"/> <Word Value="Get-Partition"/> <Word Value="Get-PartitionSupportedSize"/> <Word Value="Get-PcsvDevice"/> <Word Value="Get-PcsvDeviceLog"/> <Word Value="Get-PhysicalDisk"/> <Word Value="Get-PhysicalDiskStorageNodeView"/> <Word Value="Get-PhysicalExtent"/> <Word Value="Get-PhysicalExtentAssociation"/> <Word Value="Get-PnpDevice"/> <Word Value="Get-PnpDeviceProperty"/> <Word Value="Get-PrintConfiguration"/> <Word Value="Get-Printer"/> <Word Value="Get-PrinterDriver"/> <Word Value="Get-PrinterPort"/> <Word Value="Get-PrinterProperty"/> <Word Value="Get-PrintJob"/> <Word Value="Get-PSRepository"/> <Word Value="Get-PSRepository"/> <Word Value="Get-ResiliencySetting"/> <Word Value="Get-ScheduledTask"/> <Word Value="Get-ScheduledTaskInfo"/> <Word Value="Get-SmbBandWidthLimit"/> <Word Value="Get-SmbClientConfiguration"/> <Word Value="Get-SmbClientNetworkInterface"/> <Word Value="Get-SmbConnection"/> <Word Value="Get-SmbDelegation"/> <Word Value="Get-SmbGlobalMapping"/> <Word Value="Get-SmbMapping"/> <Word Value="Get-SmbMultichannelConnection"/> <Word Value="Get-SmbMultichannelConstraint"/> <Word Value="Get-SmbOpenFile"/> <Word Value="Get-SmbServerCertificateMapping"/> <Word Value="Get-SmbServerConfiguration"/> <Word Value="Get-SmbServerNetworkInterface"/> <Word Value="Get-SmbSession"/> <Word Value="Get-SmbShare"/> <Word Value="Get-SmbShareAccess"/> <Word Value="Get-SmbWitnessClient"/> <Word Value="Get-StartApps"/> <Word Value="Get-StorageAdvancedProperty"/> <Word Value="Get-StorageBusBinding"/> <Word Value="Get-StorageBusDisk"/> <Word Value="Get-StorageChassis"/> <Word Value="Get-StorageDiagnosticInfo"/> <Word Value="Get-StorageEnclosure"/> <Word Value="Get-StorageEnclosureStorageNodeView"/> <Word Value="Get-StorageEnclosureVendorData"/> <Word Value="Get-StorageExtendedStatus"/> <Word Value="Get-StorageFaultDomain"/> <Word Value="Get-StorageFileServer"/> <Word Value="Get-StorageFirmwareInformation"/> <Word Value="Get-StorageHealthAction"/> <Word Value="Get-StorageHealthReport"/> <Word Value="Get-StorageHealthSetting"/> <Word Value="Get-StorageHistory"/> <Word Value="Get-StorageJob"/> <Word Value="Get-StorageNode"/> <Word Value="Get-StoragePool"/> <Word Value="Get-StorageProvider"/> <Word Value="Get-StorageRack"/> <Word Value="Get-StorageReliabilityCounter"/> <Word Value="Get-StorageScaleUnit"/> <Word Value="Get-StorageSetting"/> <Word Value="Get-StorageSite"/> <Word Value="Get-StorageSubSystem"/> <Word Value="Get-StorageTier"/> <Word Value="Get-StorageTierSupportedSize"/> <Word Value="Get-SupportedClusterSizes"/> <Word Value="Get-SupportedFileSystems"/> <Word Value="Get-TargetPort"/> <Word Value="Get-TargetPortal"/> <Word Value="Get-TestDriveItem"/> <Word Value="Get-TestDriveItem"/> <Word Value="Get-Verb"/> <Word Value="Get-VirtualDisk"/> <Word Value="Get-VirtualDiskSupportedSize"/> <Word Value="Get-Volume"/> <Word Value="Get-VolumeCorruptionCount"/> <Word Value="Get-VolumeScrubPolicy"/> <Word Value="Get-VpnConnection"/> <Word Value="Get-VpnConnectionTrigger"/> <Word Value="Get-WdacBidTrace"/> <Word Value="Get-WindowsUpdateLog"/> <Word Value="Grant-FileShareAccess"/> <Word Value="Grant-SmbShareAccess"/> <Word Value="H:"/> <Word Value="help"/> <Word Value="Hide-VirtualDisk"/> <Word Value="I:"/> <Word Value="Import-BCCachePackage"/> <Word Value="Import-BCSecretKey"/> <Word Value="Import-IseSnippet"/> <Word Value="Import-PowerShellDataFile"/> <Word Value="ImportSystemModules"/> <Word Value="In"/> <Word Value="In"/> <Word Value="Initialize-Disk"/> <Word Value="InModuleScope"/> <Word Value="InModuleScope"/> <Word Value="Install-Dtc"/> <Word Value="Install-Module"/> <Word Value="Install-Module"/> <Word Value="Install-Script"/> <Word Value="Install-Script"/> <Word Value="Invoke-AsWorkflow"/> <Word Value="Invoke-Mock"/> <Word Value="Invoke-Mock"/> <Word Value="Invoke-OperationValidation"/> <Word Value="Invoke-OperationValidation"/> <Word Value="Invoke-Pester"/> <Word Value="Invoke-Pester"/> <Word Value="It"/> <Word Value="It"/> <Word Value="J:"/> <Word Value="K:"/> <Word Value="L:"/> <Word Value="Lock-BitLocker"/> <Word Value="M:"/> <Word Value="mkdir"/> <Word Value="Mock"/> <Word Value="Mock"/> <Word Value="more"/> <Word Value="Mount-DiskImage"/> <Word Value="Move-SmbWitnessClient"/> <Word Value="N:"/> <Word Value="New-AutologgerConfig"/> <Word Value="New-DAEntryPointTableItem"/> <Word Value="New-DscChecksum"/> <Word Value="New-EapConfiguration"/> <Word Value="New-EtwTraceSession"/> <Word Value="New-FileShare"/> <Word Value="New-Fixture"/> <Word Value="New-Fixture"/> <Word Value="New-Guid"/> <Word Value="New-IscsiTargetPortal"/> <Word Value="New-IseSnippet"/> <Word Value="New-MaskingSet"/> <Word Value="New-MpPerformanceRecording"/> <Word Value="New-NetAdapterAdvancedProperty"/> <Word Value="New-NetEventSession"/> <Word Value="New-NetFirewallDynamicKeywordAddress"/> <Word Value="New-NetFirewallRule"/> <Word Value="New-NetIPAddress"/> <Word Value="New-NetIPHttpsConfiguration"/> <Word Value="New-NetIPsecDospSetting"/> <Word Value="New-NetIPsecMainModeCryptoSet"/> <Word Value="New-NetIPsecMainModeRule"/> <Word Value="New-NetIPsecPhase1AuthSet"/> <Word Value="New-NetIPsecPhase2AuthSet"/> <Word Value="New-NetIPsecQuickModeCryptoSet"/> <Word Value="New-NetIPsecRule"/> <Word Value="New-NetLbfoTeam"/> <Word Value="New-NetNat"/> <Word Value="New-NetNatTransitionConfiguration"/> <Word Value="New-NetNeighbor"/> <Word Value="New-NetQosPolicy"/> <Word Value="New-NetRoute"/> <Word Value="New-NetSwitchTeam"/> <Word Value="New-NetTransportFilter"/> <Word Value="New-NetworkSwitchVlan"/> <Word Value="New-Partition"/> <Word Value="New-PesterOption"/> <Word Value="New-PesterOption"/> <Word Value="New-PSWorkflowSession"/> <Word Value="New-ScheduledTask"/> <Word Value="New-ScheduledTaskAction"/> <Word Value="New-ScheduledTaskPrincipal"/> <Word Value="New-ScheduledTaskSettingsSet"/> <Word Value="New-ScheduledTaskTrigger"/> <Word Value="New-ScriptFileInfo"/> <Word Value="New-ScriptFileInfo"/> <Word Value="New-SmbGlobalMapping"/> <Word Value="New-SmbMapping"/> <Word Value="New-SmbMultichannelConstraint"/> <Word Value="New-SmbServerCertificateMapping"/> <Word Value="New-SmbShare"/> <Word Value="New-StorageBusBinding"/> <Word Value="New-StorageBusCacheStore"/> <Word Value="New-StorageFileServer"/> <Word Value="New-StoragePool"/> <Word Value="New-StorageSubsystemVirtualDisk"/> <Word Value="New-StorageTier"/> <Word Value="New-TemporaryFile"/> <Word Value="New-VirtualDisk"/> <Word Value="New-VirtualDiskClone"/> <Word Value="New-VirtualDiskSnapshot"/> <Word Value="New-Volume"/> <Word Value="New-VpnServerAddress"/> <Word Value="O:"/> <Word Value="Open-NetGPO"/> <Word Value="Optimize-StoragePool"/> <Word Value="Optimize-Volume"/> <Word Value="oss"/> <Word Value="P:"/> <Word Value="Pause"/> <Word Value="prompt"/> <Word Value="PSConsoleHostReadLine"/> <Word Value="Publish-BCFileContent"/> <Word Value="Publish-BCWebContent"/> <Word Value="Publish-Module"/> <Word Value="Publish-Module"/> <Word Value="Publish-Script"/> <Word Value="Publish-Script"/> <Word Value="Q:"/> <Word Value="R:"/> <Word Value="Read-PrinterNfcTag"/> <Word Value="Register-ClusteredScheduledTask"/> <Word Value="Register-DnsClient"/> <Word Value="Register-IscsiSession"/> <Word Value="Register-PSRepository"/> <Word Value="Register-PSRepository"/> <Word Value="Register-ScheduledTask"/> <Word Value="Register-StorageSubsystem"/> <Word Value="Remove-AutologgerConfig"/> <Word Value="Remove-BCDataCacheExtension"/> <Word Value="Remove-BitLockerKeyProtector"/> <Word Value="Remove-DAEntryPointTableItem"/> <Word Value="Remove-DnsClientNrptRule"/> <Word Value="Remove-DscConfigurationDocument"/> <Word Value="Remove-DtcClusterTMMapping"/> <Word Value="Remove-EtwTraceProvider"/> <Word Value="Remove-FileShare"/> <Word Value="Remove-InitiatorId"/> <Word Value="Remove-InitiatorIdFromMaskingSet"/> <Word Value="Remove-IscsiTargetPortal"/> <Word Value="Remove-MaskingSet"/> <Word Value="Remove-MpPreference"/> <Word Value="Remove-MpPreference"/> <Word Value="Remove-MpThreat"/> <Word Value="Remove-MpThreat"/> <Word Value="Remove-NetAdapterAdvancedProperty"/> <Word Value="Remove-NetEventNetworkAdapter"/> <Word Value="Remove-NetEventPacketCaptureProvider"/> <Word Value="Remove-NetEventProvider"/> <Word Value="Remove-NetEventSession"/> <Word Value="Remove-NetEventVFPProvider"/> <Word Value="Remove-NetEventVmNetworkAdapter"/> <Word Value="Remove-NetEventVmSwitch"/> <Word Value="Remove-NetEventVmSwitchProvider"/> <Word Value="Remove-NetEventWFPCaptureProvider"/> <Word Value="Remove-NetFirewallDynamicKeywordAddress"/> <Word Value="Remove-NetFirewallRule"/> <Word Value="Remove-NetIPAddress"/> <Word Value="Remove-NetIPHttpsCertBinding"/> <Word Value="Remove-NetIPHttpsConfiguration"/> <Word Value="Remove-NetIPsecDospSetting"/> <Word Value="Remove-NetIPsecMainModeCryptoSet"/> <Word Value="Remove-NetIPsecMainModeRule"/> <Word Value="Remove-NetIPsecMainModeSA"/> <Word Value="Remove-NetIPsecPhase1AuthSet"/> <Word Value="Remove-NetIPsecPhase2AuthSet"/> <Word Value="Remove-NetIPsecQuickModeCryptoSet"/> <Word Value="Remove-NetIPsecQuickModeSA"/> <Word Value="Remove-NetIPsecRule"/> <Word Value="Remove-NetLbfoTeam"/> <Word Value="Remove-NetLbfoTeamMember"/> <Word Value="Remove-NetLbfoTeamNic"/> <Word Value="Remove-NetNat"/> <Word Value="Remove-NetNatExternalAddress"/> <Word Value="Remove-NetNatStaticMapping"/> <Word Value="Remove-NetNatTransitionConfiguration"/> <Word Value="Remove-NetNeighbor"/> <Word Value="Remove-NetQosPolicy"/> <Word Value="Remove-NetRoute"/> <Word Value="Remove-NetSwitchTeam"/> <Word Value="Remove-NetSwitchTeamMember"/> <Word Value="Remove-NetTransportFilter"/> <Word Value="Remove-NetworkSwitchEthernetPortIPAddress"/> <Word Value="Remove-NetworkSwitchVlan"/> <Word Value="Remove-OdbcDsn"/> <Word Value="Remove-Partition"/> <Word Value="Remove-PartitionAccessPath"/> <Word Value="Remove-PhysicalDisk"/> <Word Value="Remove-Printer"/> <Word Value="Remove-PrinterDriver"/> <Word Value="Remove-PrinterPort"/> <Word Value="Remove-PrintJob"/> <Word Value="Remove-SmbBandwidthLimit"/> <Word Value="Remove-SMBComponent"/> <Word Value="Remove-SmbGlobalMapping"/> <Word Value="Remove-SmbMapping"/> <Word Value="Remove-SmbMultichannelConstraint"/> <Word Value="Remove-SmbServerCertificateMapping"/> <Word Value="Remove-SmbShare"/> <Word Value="Remove-StorageBusBinding"/> <Word Value="Remove-StorageFaultDomain"/> <Word Value="Remove-StorageFileServer"/> <Word Value="Remove-StorageHealthIntent"/> <Word Value="Remove-StorageHealthSetting"/> <Word Value="Remove-StoragePool"/> <Word Value="Remove-StorageTier"/> <Word Value="Remove-TargetPortFromMaskingSet"/> <Word Value="Remove-VirtualDisk"/> <Word Value="Remove-VirtualDiskFromMaskingSet"/> <Word Value="Remove-VpnConnection"/> <Word Value="Remove-VpnConnectionRoute"/> <Word Value="Remove-VpnConnectionTriggerApplication"/> <Word Value="Remove-VpnConnectionTriggerDnsConfiguration"/> <Word Value="Remove-VpnConnectionTriggerTrustedNetwork"/> <Word Value="Rename-DAEntryPointTableItem"/> <Word Value="Rename-MaskingSet"/> <Word Value="Rename-NetAdapter"/> <Word Value="Rename-NetFirewallRule"/> <Word Value="Rename-NetIPHttpsConfiguration"/> <Word Value="Rename-NetIPsecMainModeCryptoSet"/> <Word Value="Rename-NetIPsecMainModeRule"/> <Word Value="Rename-NetIPsecPhase1AuthSet"/> <Word Value="Rename-NetIPsecPhase2AuthSet"/> <Word Value="Rename-NetIPsecQuickModeCryptoSet"/> <Word Value="Rename-NetIPsecRule"/> <Word Value="Rename-NetLbfoTeam"/> <Word Value="Rename-NetSwitchTeam"/> <Word Value="Rename-Printer"/> <Word Value="Repair-FileIntegrity"/> <Word Value="Repair-VirtualDisk"/> <Word Value="Repair-Volume"/> <Word Value="Reset-BC"/> <Word Value="Reset-DAClientExperienceConfiguration"/> <Word Value="Reset-DAEntryPointTableItem"/> <Word Value="Reset-DtcLog"/> <Word Value="Reset-NCSIPolicyConfiguration"/> <Word Value="Reset-Net6to4Configuration"/> <Word Value="Reset-NetAdapterAdvancedProperty"/> <Word Value="Reset-NetDnsTransitionConfiguration"/> <Word Value="Reset-NetIPHttpsConfiguration"/> <Word Value="Reset-NetIsatapConfiguration"/> <Word Value="Reset-NetTeredoConfiguration"/> <Word Value="Reset-PhysicalDisk"/> <Word Value="Reset-StorageReliabilityCounter"/> <Word Value="Resize-Partition"/> <Word Value="Resize-StorageTier"/> <Word Value="Resize-VirtualDisk"/> <Word Value="Restart-NetAdapter"/> <Word Value="Restart-PcsvDevice"/> <Word Value="Restart-PrintJob"/> <Word Value="Restore-DscConfiguration"/> <Word Value="Restore-NetworkSwitchConfiguration"/> <Word Value="Resume-BitLocker"/> <Word Value="Resume-PrintJob"/> <Word Value="Resume-StorageBusDisk"/> <Word Value="Revoke-FileShareAccess"/> <Word Value="Revoke-SmbShareAccess"/> <Word Value="S:"/> <Word Value="SafeGetCommand"/> <Word Value="SafeGetCommand"/> <Word Value="Save-EtwTraceSession"/> <Word Value="Save-Module"/> <Word Value="Save-Module"/> <Word Value="Save-NetGPO"/> <Word Value="Save-NetworkSwitchConfiguration"/> <Word Value="Save-Script"/> <Word Value="Save-Script"/> <Word Value="Send-EtwTraceSession"/> <Word Value="Set-AssignedAccess"/> <Word Value="Set-BCAuthentication"/> <Word Value="Set-BCCache"/> <Word Value="Set-BCDataCacheEntryMaxAge"/> <Word Value="Set-BCMinSMBLatency"/> <Word Value="Set-BCSecretKey"/> <Word Value="Set-ClusteredScheduledTask"/> <Word Value="Set-DAClientExperienceConfiguration"/> <Word Value="Set-DAEntryPointTableItem"/> <Word Value="Set-Disk"/> <Word Value="Set-DnsClient"/> <Word Value="Set-DnsClientGlobalSetting"/> <Word Value="Set-DnsClientNrptGlobal"/> <Word Value="Set-DnsClientNrptRule"/> <Word Value="Set-DnsClientServerAddress"/> <Word Value="Set-DtcAdvancedHostSetting"/> <Word Value="Set-DtcAdvancedSetting"/> <Word Value="Set-DtcClusterDefault"/> <Word Value="Set-DtcClusterTMMapping"/> <Word Value="Set-DtcDefault"/> <Word Value="Set-DtcLog"/> <Word Value="Set-DtcNetworkSetting"/> <Word Value="Set-DtcTransaction"/> <Word Value="Set-DtcTransactionsTraceSession"/> <Word Value="Set-DtcTransactionsTraceSetting"/> <Word Value="Set-DynamicParameterVariables"/> <Word Value="Set-DynamicParameterVariables"/> <Word Value="Set-EtwTraceProvider"/> <Word Value="Set-FileIntegrity"/> <Word Value="Set-FileShare"/> <Word Value="Set-FileStorageTier"/> <Word Value="Set-InitiatorPort"/> <Word Value="Set-IscsiChapSecret"/> <Word Value="Set-LogProperties"/> <Word Value="Set-MMAgent"/> <Word Value="Set-MpPreference"/> <Word Value="Set-MpPreference"/> <Word Value="Set-NCSIPolicyConfiguration"/> <Word Value="Set-Net6to4Configuration"/> <Word Value="Set-NetAdapter"/> <Word Value="Set-NetAdapterAdvancedProperty"/> <Word Value="Set-NetAdapterBinding"/> <Word Value="Set-NetAdapterChecksumOffload"/> <Word Value="Set-NetAdapterEncapsulatedPacketTaskOffload"/> <Word Value="Set-NetAdapterIPsecOffload"/> <Word Value="Set-NetAdapterLso"/> <Word Value="Set-NetAdapterPacketDirect"/> <Word Value="Set-NetAdapterPowerManagement"/> <Word Value="Set-NetAdapterQos"/> <Word Value="Set-NetAdapterRdma"/> <Word Value="Set-NetAdapterRsc"/> <Word Value="Set-NetAdapterRss"/> <Word Value="Set-NetAdapterSriov"/> <Word Value="Set-NetAdapterUso"/> <Word Value="Set-NetAdapterVmq"/> <Word Value="Set-NetConnectionProfile"/> <Word Value="Set-NetDnsTransitionConfiguration"/> <Word Value="Set-NetEventPacketCaptureProvider"/> <Word Value="Set-NetEventProvider"/> <Word Value="Set-NetEventSession"/> <Word Value="Set-NetEventVFPProvider"/> <Word Value="Set-NetEventVmSwitchProvider"/> <Word Value="Set-NetEventWFPCaptureProvider"/> <Word Value="Set-NetFirewallAddressFilter"/> <Word Value="Set-NetFirewallApplicationFilter"/> <Word Value="Set-NetFirewallInterfaceFilter"/> <Word Value="Set-NetFirewallInterfaceTypeFilter"/> <Word Value="Set-NetFirewallPortFilter"/> <Word Value="Set-NetFirewallProfile"/> <Word Value="Set-NetFirewallRule"/> <Word Value="Set-NetFirewallSecurityFilter"/> <Word Value="Set-NetFirewallServiceFilter"/> <Word Value="Set-NetFirewallSetting"/> <Word Value="Set-NetIPAddress"/> <Word Value="Set-NetIPHttpsConfiguration"/> <Word Value="Set-NetIPInterface"/> <Word Value="Set-NetIPsecDospSetting"/> <Word Value="Set-NetIPsecMainModeCryptoSet"/> <Word Value="Set-NetIPsecMainModeRule"/> <Word Value="Set-NetIPsecPhase1AuthSet"/> <Word Value="Set-NetIPsecPhase2AuthSet"/> <Word Value="Set-NetIPsecQuickModeCryptoSet"/> <Word Value="Set-NetIPsecRule"/> <Word Value="Set-NetIPv4Protocol"/> <Word Value="Set-NetIPv6Protocol"/> <Word Value="Set-NetIsatapConfiguration"/> <Word Value="Set-NetLbfoTeam"/> <Word Value="Set-NetLbfoTeamMember"/> <Word Value="Set-NetLbfoTeamNic"/> <Word Value="Set-NetNat"/> <Word Value="Set-NetNatGlobal"/> <Word Value="Set-NetNatTransitionConfiguration"/> <Word Value="Set-NetNeighbor"/> <Word Value="Set-NetOffloadGlobalSetting"/> <Word Value="Set-NetQosPolicy"/> <Word Value="Set-NetRoute"/> <Word Value="Set-NetTCPSetting"/> <Word Value="Set-NetTeredoConfiguration"/> <Word Value="Set-NetUDPSetting"/> <Word Value="Set-NetworkSwitchEthernetPortIPAddress"/> <Word Value="Set-NetworkSwitchPortMode"/> <Word Value="Set-NetworkSwitchPortProperty"/> <Word Value="Set-NetworkSwitchVlanProperty"/> <Word Value="Set-OdbcDriver"/> <Word Value="Set-OdbcDsn"/> <Word Value="Set-Partition"/> <Word Value="Set-PcsvDeviceBootConfiguration"/> <Word Value="Set-PcsvDeviceNetworkConfiguration"/> <Word Value="Set-PcsvDeviceUserPassword"/> <Word Value="Set-PhysicalDisk"/> <Word Value="Set-PrintConfiguration"/> <Word Value="Set-Printer"/> <Word Value="Set-PrinterProperty"/> <Word Value="Set-PSRepository"/> <Word Value="Set-PSRepository"/> <Word Value="Set-ResiliencySetting"/> <Word Value="Set-ScheduledTask"/> <Word Value="Set-SmbBandwidthLimit"/> <Word Value="Set-SmbClientConfiguration"/> <Word Value="Set-SmbPathAcl"/> <Word Value="Set-SmbServerConfiguration"/> <Word Value="Set-SmbShare"/> <Word Value="Set-StorageBusProfile"/> <Word Value="Set-StorageFileServer"/> <Word Value="Set-StorageHealthSetting"/> <Word Value="Set-StoragePool"/> <Word Value="Set-StorageProvider"/> <Word Value="Set-StorageSetting"/> <Word Value="Set-StorageSubSystem"/> <Word Value="Set-StorageTier"/> <Word Value="Set-TestInconclusive"/> <Word Value="Set-TestInconclusive"/> <Word Value="Setup"/> <Word Value="Setup"/> <Word Value="Set-VirtualDisk"/> <Word Value="Set-Volume"/> <Word Value="Set-VolumeScrubPolicy"/> <Word Value="Set-VpnConnection"/> <Word Value="Set-VpnConnectionIPsecConfiguration"/> <Word Value="Set-VpnConnectionProxy"/> <Word Value="Set-VpnConnectionTriggerDnsConfiguration"/> <Word Value="Set-VpnConnectionTriggerTrustedNetwork"/> <Word Value="Should"/> <Word Value="Should"/> <Word Value="Show-NetFirewallRule"/> <Word Value="Show-NetIPsecRule"/> <Word Value="Show-StorageHistory"/> <Word Value="Show-VirtualDisk"/> <Word Value="Start-AppBackgroundTask"/> <Word Value="Start-AppvVirtualProcess"/> <Word Value="Start-AutologgerConfig"/> <Word Value="Start-Dtc"/> <Word Value="Start-DtcTransactionsTraceSession"/> <Word Value="Start-EtwTraceSession"/> <Word Value="Start-MpRollback"/> <Word Value="Start-MpScan"/> <Word Value="Start-MpScan"/> <Word Value="Start-MpWDOScan"/> <Word Value="Start-MpWDOScan"/> <Word Value="Start-NetEventSession"/> <Word Value="Start-PcsvDevice"/> <Word Value="Start-ScheduledTask"/> <Word Value="Start-StorageDiagnosticLog"/> <Word Value="Start-Trace"/> <Word Value="Stop-DscConfiguration"/> <Word Value="Stop-Dtc"/> <Word Value="Stop-DtcTransactionsTraceSession"/> <Word Value="Stop-EtwTraceSession"/> <Word Value="Stop-NetEventSession"/> <Word Value="Stop-PcsvDevice"/> <Word Value="Stop-ScheduledTask"/> <Word Value="Stop-StorageDiagnosticLog"/> <Word Value="Stop-StorageJob"/> <Word Value="Stop-Trace"/> <Word Value="Suspend-BitLocker"/> <Word Value="Suspend-PrintJob"/> <Word Value="Suspend-StorageBusDisk"/> <Word Value="Sync-NetIPsecRule"/> <Word Value="T:"/> <Word Value="TabExpansion2"/> <Word Value="Test-Dtc"/> <Word Value="Test-NetConnection"/> <Word Value="Test-ScriptFileInfo"/> <Word Value="Test-ScriptFileInfo"/> <Word Value="U:"/> <Word Value="Unblock-FileShareAccess"/> <Word Value="Unblock-SmbShareAccess"/> <Word Value="Uninstall-Dtc"/> <Word Value="Uninstall-Module"/> <Word Value="Uninstall-Module"/> <Word Value="Uninstall-Script"/> <Word Value="Uninstall-Script"/> <Word Value="Unlock-BitLocker"/> <Word Value="Unregister-AppBackgroundTask"/> <Word Value="Unregister-ClusteredScheduledTask"/> <Word Value="Unregister-IscsiSession"/> <Word Value="Unregister-PSRepository"/> <Word Value="Unregister-PSRepository"/> <Word Value="Unregister-ScheduledTask"/> <Word Value="Unregister-StorageSubsystem"/> <Word Value="Update-AutologgerConfig"/> <Word Value="Update-Disk"/> <Word Value="Update-DscConfiguration"/> <Word Value="Update-EtwTraceSession"/> <Word Value="Update-HostStorageCache"/> <Word Value="Update-IscsiTarget"/> <Word Value="Update-IscsiTargetPortal"/> <Word Value="Update-Module"/> <Word Value="Update-Module"/> <Word Value="Update-ModuleManifest"/> <Word Value="Update-ModuleManifest"/> <Word Value="Update-MpSignature"/> <Word Value="Update-MpSignature"/> <Word Value="Update-NetFirewallDynamicKeywordAddress"/> <Word Value="Update-NetIPsecRule"/> <Word Value="Update-Script"/> <Word Value="Update-Script"/> <Word Value="Update-ScriptFileInfo"/> <Word Value="Update-ScriptFileInfo"/> <Word Value="Update-SmbMultichannelConnection"/> <Word Value="Update-StorageFirmware"/> <Word Value="Update-StoragePool"/> <Word Value="Update-StorageProviderCache"/> <Word Value="V:"/> <Word Value="W:"/> <Word Value="Write-DtcTransactionsTraceSession"/> <Word Value="Write-PrinterNfcTag"/> <Word Value="Write-VolumeCache"/> <Word Value="X:"/> <Word Value="Y:"/> <Word Value="Z:"/> </Keywords> <Keywords Name="Cmdlets" Attributes="$00800080,$80000005;False:True." Style=""> <Word Value="Add-AppvClientConnectionGroup"/> <Word Value="Add-AppvClientPackage"/> <Word Value="Add-AppvPublishingServer"/> <Word Value="Add-AppxPackage"/> <Word Value="Add-AppxProvisionedPackage"/> <Word Value="Add-AppxVolume"/> <Word Value="Add-BitsFile"/> <Word Value="Add-CertificateEnrollmentPolicyServer"/> <Word Value="Add-Computer"/> <Word Value="Add-Content"/> <Word Value="Add-History"/> <Word Value="Add-JobTrigger"/> <Word Value="Add-KdsRootKey"/> <Word Value="Add-LocalGroupMember"/> <Word Value="Add-Member"/> <Word Value="Add-PSSnapin"/> <Word Value="Add-SignerRule"/> <Word Value="Add-Type"/> <Word Value="Add-WindowsCapability"/> <Word Value="Add-WindowsDriver"/> <Word Value="Add-WindowsImage"/> <Word Value="Add-WindowsPackage"/> <Word Value="Assert-AU3IsAdmin"/> <Word Value="Assert-AU3WinActive"/> <Word Value="Assert-AU3WinExists"/> <Word Value="Checkpoint-Computer"/> <Word Value="Clear-Content"/> <Word Value="Clear-EventLog"/> <Word Value="Clear-History"/> <Word Value="Clear-Item"/> <Word Value="Clear-ItemProperty"/> <Word Value="Clear-KdsCache"/> <Word Value="Clear-RecycleBin"/> <Word Value="Clear-Tpm"/> <Word Value="Clear-UevAppxPackage"/> <Word Value="Clear-UevConfiguration"/> <Word Value="Clear-Variable"/> <Word Value="Clear-WindowsCorruptMountPoint"/> <Word Value="Close-AU3Win"/> <Word Value="Compare-Object"/> <Word Value="Complete-BitsTransfer"/> <Word Value="Complete-DtcDiagnosticTransaction"/> <Word Value="Complete-Transaction"/> <Word Value="Confirm-SecureBootUEFI"/> <Word Value="Connect-PSSession"/> <Word Value="Connect-WSMan"/> <Word Value="ConvertFrom-CIPolicy"/> <Word Value="ConvertFrom-Csv"/> <Word Value="ConvertFrom-Json"/> <Word Value="ConvertFrom-SecureString"/> <Word Value="ConvertFrom-String"/> <Word Value="ConvertFrom-StringData"/> <Word Value="Convert-Path"/> <Word Value="Convert-String"/> <Word Value="ConvertTo-Csv"/> <Word Value="ConvertTo-Html"/> <Word Value="ConvertTo-Json"/> <Word Value="ConvertTo-ProcessMitigationPolicy"/> <Word Value="ConvertTo-SecureString"/> <Word Value="ConvertTo-TpmOwnerAuth"/> <Word Value="ConvertTo-Xml"/> <Word Value="Copy-Item"/> <Word Value="Copy-ItemProperty"/> <Word Value="Debug-Job"/> <Word Value="Debug-Process"/> <Word Value="Debug-Runspace"/> <Word Value="Delete-DeliveryOptimizationCache"/> <Word Value="Disable-AppBackgroundTaskDiagnosticLog"/> <Word Value="Disable-Appv"/> <Word Value="Disable-AppvClientConnectionGroup"/> <Word Value="Disable-AU3Control"/> <Word Value="Disable-ComputerRestore"/> <Word Value="Disable-JobTrigger"/> <Word Value="Disable-LocalUser"/> <Word Value="Disable-PSBreakpoint"/> <Word Value="Disable-PSRemoting"/> <Word Value="Disable-PSSessionConfiguration"/> <Word Value="Disable-RunspaceDebug"/> <Word Value="Disable-ScheduledJob"/> <Word Value="Disable-TlsCipherSuite"/> <Word Value="Disable-TlsEccCurve"/> <Word Value="Disable-TlsSessionTicketKey"/> <Word Value="Disable-TpmAutoProvisioning"/> <Word Value="Disable-Uev"/> <Word Value="Disable-UevAppxPackage"/> <Word Value="Disable-UevTemplate"/> <Word Value="Disable-WindowsErrorReporting"/> <Word Value="Disable-WindowsOptionalFeature"/> <Word Value="Disable-WSManCredSSP"/> <Word Value="Disconnect-PSSession"/> <Word Value="Disconnect-WSMan"/> <Word Value="Dismount-AppxVolume"/> <Word Value="Dismount-WindowsImage"/> <Word Value="Edit-CIPolicyRule"/> <Word Value="Enable-AppBackgroundTaskDiagnosticLog"/> <Word Value="Enable-Appv"/> <Word Value="Enable-AppvClientConnectionGroup"/> <Word Value="Enable-AU3Control"/> <Word Value="Enable-ComputerRestore"/> <Word Value="Enable-JobTrigger"/> <Word Value="Enable-LocalUser"/> <Word Value="Enable-PSBreakpoint"/> <Word Value="Enable-PSRemoting"/> <Word Value="Enable-PSSessionConfiguration"/> <Word Value="Enable-RunspaceDebug"/> <Word Value="Enable-ScheduledJob"/> <Word Value="Enable-TlsCipherSuite"/> <Word Value="Enable-TlsEccCurve"/> <Word Value="Enable-TlsSessionTicketKey"/> <Word Value="Enable-TpmAutoProvisioning"/> <Word Value="Enable-Uev"/> <Word Value="Enable-UevAppxPackage"/> <Word Value="Enable-UevTemplate"/> <Word Value="Enable-WindowsErrorReporting"/> <Word Value="Enable-WindowsOptionalFeature"/> <Word Value="Enable-WSManCredSSP"/> <Word Value="Enter-PSHostProcess"/> <Word Value="Enter-PSSession"/> <Word Value="Exit-PSHostProcess"/> <Word Value="Exit-PSSession"/> <Word Value="Expand-WindowsCustomDataImage"/> <Word Value="Expand-WindowsImage"/> <Word Value="Export-Alias"/> <Word Value="Export-BinaryMiLog"/> <Word Value="Export-Certificate"/> <Word Value="Export-Clixml"/> <Word Value="Export-Console"/> <Word Value="Export-Counter"/> <Word Value="Export-Csv"/> <Word Value="Export-FormatData"/> <Word Value="Export-ModuleMember"/> <Word Value="Export-PfxCertificate"/> <Word Value="Export-ProvisioningPackage"/> <Word Value="Export-PSSession"/> <Word Value="Export-StartLayout"/> <Word Value="Export-StartLayoutEdgeAssets"/> <Word Value="Export-TlsSessionTicketKey"/> <Word Value="Export-Trace"/> <Word Value="Export-UevConfiguration"/> <Word Value="Export-UevPackage"/> <Word Value="Export-WindowsCapabilitySource"/> <Word Value="Export-WindowsDriver"/> <Word Value="Export-WindowsImage"/> <Word Value="Find-Package"/> <Word Value="Find-PackageProvider"/> <Word Value="ForEach-Object"/> <Word Value="Format-Custom"/> <Word Value="Format-List"/> <Word Value="Format-SecureBootUEFI"/> <Word Value="Format-Table"/> <Word Value="Format-Wide"/> <Word Value="Get-Acl"/> <Word Value="Get-Alias"/> <Word Value="Get-AppLockerFileInformation"/> <Word Value="Get-AppLockerPolicy"/> <Word Value="Get-AppvClientApplication"/> <Word Value="Get-AppvClientConfiguration"/> <Word Value="Get-AppvClientConnectionGroup"/> <Word Value="Get-AppvClientMode"/> <Word Value="Get-AppvClientPackage"/> <Word Value="Get-AppvPublishingServer"/> <Word Value="Get-AppvStatus"/> <Word Value="Get-AppxDefaultVolume"/> <Word Value="Get-AppxPackage"/> <Word Value="Get-AppxPackageManifest"/> <Word Value="Get-AppxProvisionedPackage"/> <Word Value="Get-AppxVolume"/> <Word Value="Get-AU3Clip"/> <Word Value="Get-AU3ControlFocus"/> <Word Value="Get-AU3ControlHandle"/> <Word Value="Get-AU3ControlPos"/> <Word Value="Get-AU3ControlText"/> <Word Value="Get-AU3ErrorCode"/> <Word Value="Get-AU3MouseCursor"/> <Word Value="Get-AU3MousePos"/> <Word Value="Get-AU3StatusbarText"/> <Word Value="Get-AU3WinCaretPos"/> <Word Value="Get-AU3WinClassList"/> <Word Value="Get-AU3WinClientSize"/> <Word Value="Get-AU3WinHandle"/> <Word Value="Get-AU3WinPos"/> <Word Value="Get-AU3WinProcess"/> <Word Value="Get-AU3WinState"/> <Word Value="Get-AU3WinText"/> <Word Value="Get-AU3WinTitle"/> <Word Value="Get-AuthenticodeSignature"/> <Word Value="Get-BitsTransfer"/> <Word Value="Get-Certificate"/> <Word Value="Get-CertificateAutoEnrollmentPolicy"/> <Word Value="Get-CertificateEnrollmentPolicyServer"/> <Word Value="Get-CertificateNotificationTask"/> <Word Value="Get-ChildItem"/> <Word Value="Get-CimAssociatedInstance"/> <Word Value="Get-CimClass"/> <Word Value="Get-CimInstance"/> <Word Value="Get-CimSession"/> <Word Value="Get-CIPolicy"/> <Word Value="Get-CIPolicyIdInfo"/> <Word Value="Get-CIPolicyInfo"/> <Word Value="Get-Clipboard"/> <Word Value="Get-CmsMessage"/> <Word Value="Get-Command"/> <Word Value="Get-ComputerInfo"/> <Word Value="Get-ComputerRestorePoint"/> <Word Value="Get-Content"/> <Word Value="Get-ControlPanelItem"/> <Word Value="Get-Counter"/> <Word Value="Get-Credential"/> <Word Value="Get-Culture"/> <Word Value="Get-DAPolicyChange"/> <Word Value="Get-Date"/> <Word Value="Get-DeliveryOptimizationLog"/> <Word Value="Get-DeliveryOptimizationLogAnalysis"/> <Word Value="Get-Event"/> <Word Value="Get-EventLog"/> <Word Value="Get-EventSubscriber"/> <Word Value="Get-ExecutionPolicy"/> <Word Value="Get-FormatData"/> <Word Value="Get-Help"/> <Word Value="Get-History"/> <Word Value="Get-Host"/> <Word Value="Get-HotFix"/> <Word Value="Get-InstalledLanguage"/> <Word Value="Get-Item"/> <Word Value="Get-ItemProperty"/> <Word Value="Get-ItemPropertyValue"/> <Word Value="Get-Job"/> <Word Value="Get-JobTrigger"/> <Word Value="Get-KdsConfiguration"/> <Word Value="Get-KdsRootKey"/> <Word Value="Get-LocalGroup"/> <Word Value="Get-LocalGroupMember"/> <Word Value="Get-LocalUser"/> <Word Value="Get-Location"/> <Word Value="Get-Member"/> <Word Value="Get-Module"/> <Word Value="Get-NonRemovableAppsPolicy"/> <Word Value="Get-Package"/> <Word Value="Get-PackageProvider"/> <Word Value="Get-PackageSource"/> <Word Value="Get-PfxCertificate"/> <Word Value="Get-PfxData"/> <Word Value="Get-PmemDisk"/> <Word Value="Get-PmemPhysicalDevice"/> <Word Value="Get-PmemUnusedRegion"/> <Word Value="Get-Process"/> <Word Value="Get-ProcessMitigation"/> <Word Value="Get-ProvisioningPackage"/> <Word Value="Get-PSBreakpoint"/> <Word Value="Get-PSCallStack"/> <Word Value="Get-PSDrive"/> <Word Value="Get-PSHostProcessInfo"/> <Word Value="Get-PSProvider"/> <Word Value="Get-PSReadLineKeyHandler"/> <Word Value="Get-PSReadLineOption"/> <Word Value="Get-PSSession"/> <Word Value="Get-PSSessionCapability"/> <Word Value="Get-PSSessionConfiguration"/> <Word Value="Get-PSSnapin"/> <Word Value="Get-Random"/> <Word Value="Get-Runspace"/> <Word Value="Get-RunspaceDebug"/> <Word Value="Get-ScheduledJob"/> <Word Value="Get-ScheduledJobOption"/> <Word Value="Get-SecureBootPolicy"/> <Word Value="Get-SecureBootUEFI"/> <Word Value="Get-Service"/> <Word Value="Get-SystemDriver"/> <Word Value="Get-SystemPreferredUILanguage"/> <Word Value="Get-TimeZone"/> <Word Value="Get-TlsCipherSuite"/> <Word Value="Get-TlsEccCurve"/> <Word Value="Get-Tpm"/> <Word Value="Get-TpmEndorsementKeyInfo"/> <Word Value="Get-TpmSupportedFeature"/> <Word Value="Get-TraceSource"/> <Word Value="Get-Transaction"/> <Word Value="Get-TroubleshootingPack"/> <Word Value="Get-TrustedProvisioningCertificate"/> <Word Value="Get-TypeData"/> <Word Value="Get-UevAppxPackage"/> <Word Value="Get-UevConfiguration"/> <Word Value="Get-UevStatus"/> <Word Value="Get-UevTemplate"/> <Word Value="Get-UevTemplateProgram"/> <Word Value="Get-UICulture"/> <Word Value="Get-Unique"/> <Word Value="Get-Variable"/> <Word Value="Get-WheaMemoryPolicy"/> <Word Value="Get-WIMBootEntry"/> <Word Value="Get-WinAcceptLanguageFromLanguageListOptOut"/> <Word Value="Get-WinCultureFromLanguageListOptOut"/> <Word Value="Get-WinDefaultInputMethodOverride"/> <Word Value="Get-WindowsCapability"/> <Word Value="Get-WindowsDeveloperLicense"/> <Word Value="Get-WindowsDriver"/> <Word Value="Get-WindowsEdition"/> <Word Value="Get-WindowsErrorReporting"/> <Word Value="Get-WindowsImage"/> <Word Value="Get-WindowsImageContent"/> <Word Value="Get-WindowsOptionalFeature"/> <Word Value="Get-WindowsPackage"/> <Word Value="Get-WindowsReservedStorageState"/> <Word Value="Get-WindowsSearchSetting"/> <Word Value="Get-WinEvent"/> <Word Value="Get-WinHomeLocation"/> <Word Value="Get-WinLanguageBarOption"/> <Word Value="Get-WinSystemLocale"/> <Word Value="Get-WinUILanguageOverride"/> <Word Value="Get-WinUserLanguageList"/> <Word Value="Get-WmiObject"/> <Word Value="Get-WSManCredSSP"/> <Word Value="Get-WSManInstance"/> <Word Value="Group-Object"/> <Word Value="Hide-AU3Control"/> <Word Value="Import-Alias"/> <Word Value="Import-BinaryMiLog"/> <Word Value="Import-Certificate"/> <Word Value="Import-Clixml"/> <Word Value="Import-Counter"/> <Word Value="Import-Csv"/> <Word Value="Import-LocalizedData"/> <Word Value="Import-Module"/> <Word Value="Import-PackageProvider"/> <Word Value="Import-PfxCertificate"/> <Word Value="Import-PSSession"/> <Word Value="Import-StartLayout"/> <Word Value="Import-TpmOwnerAuth"/> <Word Value="Import-UevConfiguration"/> <Word Value="Initialize-AU3"/> <Word Value="Initialize-PmemPhysicalDevice"/> <Word Value="Initialize-Tpm"/> <Word Value="Install-Language"/> <Word Value="Install-Package"/> <Word Value="Install-PackageProvider"/> <Word Value="Install-ProvisioningPackage"/> <Word Value="Install-TrustedProvisioningCertificate"/> <Word Value="Invoke-AU3ControlClick"/> <Word Value="Invoke-AU3ControlCommand"/> <Word Value="Invoke-AU3ControlListView"/> <Word Value="Invoke-AU3ControlTreeView"/> <Word Value="Invoke-AU3MouseClick"/> <Word Value="Invoke-AU3MouseClickDrag"/> <Word Value="Invoke-AU3MouseDown"/> <Word Value="Invoke-AU3MouseUp"/> <Word Value="Invoke-AU3MouseWheel"/> <Word Value="Invoke-AU3Run"/> <Word Value="Invoke-AU3RunAs"/> <Word Value="Invoke-AU3RunAsWait"/> <Word Value="Invoke-AU3RunWait"/> <Word Value="Invoke-AU3Shutdown"/> <Word Value="Invoke-CimMethod"/> <Word Value="Invoke-Command"/> <Word Value="Invoke-CommandInDesktopPackage"/> <Word Value="Invoke-DscResource"/> <Word Value="Invoke-Expression"/> <Word Value="Invoke-History"/> <Word Value="Invoke-Item"/> <Word Value="Invoke-RestMethod"/> <Word Value="Invoke-TroubleshootingPack"/> <Word Value="Invoke-WebRequest"/> <Word Value="Invoke-WmiMethod"/> <Word Value="Invoke-WSManAction"/> <Word Value="Join-DtcDiagnosticResourceManager"/> <Word Value="Join-Path"/> <Word Value="Limit-EventLog"/> <Word Value="Measure-Command"/> <Word Value="Measure-Object"/> <Word Value="Merge-CIPolicy"/> <Word Value="Mount-AppvClientConnectionGroup"/> <Word Value="Mount-AppvClientPackage"/> <Word Value="Mount-AppxVolume"/> <Word Value="Mount-WindowsImage"/> <Word Value="Move-AppxPackage"/> <Word Value="Move-AU3Control"/> <Word Value="Move-AU3Mouse"/> <Word Value="Move-AU3Win"/> <Word Value="Move-Item"/> <Word Value="Move-ItemProperty"/> <Word Value="New-Alias"/> <Word Value="New-AppLockerPolicy"/> <Word Value="New-CertificateNotificationTask"/> <Word Value="New-CimInstance"/> <Word Value="New-CimSession"/> <Word Value="New-CimSessionOption"/> <Word Value="New-CIPolicy"/> <Word Value="New-CIPolicyRule"/> <Word Value="New-DtcDiagnosticTransaction"/> <Word Value="New-Event"/> <Word Value="New-EventLog"/> <Word Value="New-FileCatalog"/> <Word Value="New-Item"/> <Word Value="New-ItemProperty"/> <Word Value="New-JobTrigger"/> <Word Value="New-LocalGroup"/> <Word Value="New-LocalUser"/> <Word Value="New-Module"/> <Word Value="New-ModuleManifest"/> <Word Value="New-NetIPsecAuthProposal"/> <Word Value="New-NetIPsecMainModeCryptoProposal"/> <Word Value="New-NetIPsecQuickModeCryptoProposal"/> <Word Value="New-Object"/> <Word Value="New-PmemDisk"/> <Word Value="New-ProvisioningRepro"/> <Word Value="New-PSDrive"/> <Word Value="New-PSRoleCapabilityFile"/> <Word Value="New-PSSession"/> <Word Value="New-PSSessionConfigurationFile"/> <Word Value="New-PSSessionOption"/> <Word Value="New-PSTransportOption"/> <Word Value="New-PSWorkflowExecutionOption"/> <Word Value="New-ScheduledJobOption"/> <Word Value="New-SelfSignedCertificate"/> <Word Value="New-Service"/> <Word Value="New-TimeSpan"/> <Word Value="New-TlsSessionTicketKey"/> <Word Value="New-Variable"/> <Word Value="New-WebServiceProxy"/> <Word Value="New-WindowsCustomImage"/> <Word Value="New-WindowsImage"/> <Word Value="New-WinEvent"/> <Word Value="New-WinUserLanguageList"/> <Word Value="New-WSManInstance"/> <Word Value="New-WSManSessionOption"/> <Word Value="Optimize-AppxProvisionedPackages"/> <Word Value="Optimize-WindowsImage"/> <Word Value="Out-Default"/> <Word Value="Out-File"/> <Word Value="Out-GridView"/> <Word Value="Out-Host"/> <Word Value="Out-Null"/> <Word Value="Out-Printer"/> <Word Value="Out-String"/> <Word Value="Pop-Location"/> <Word Value="Protect-CmsMessage"/> <Word Value="Publish-AppvClientPackage"/> <Word Value="Publish-DscConfiguration"/> <Word Value="Push-Location"/> <Word Value="Read-Host"/> <Word Value="Receive-DtcDiagnosticTransaction"/> <Word Value="Receive-Job"/> <Word Value="Receive-PSSession"/> <Word Value="Register-ArgumentCompleter"/> <Word Value="Register-CimIndicationEvent"/> <Word Value="Register-EngineEvent"/> <Word Value="Register-ObjectEvent"/> <Word Value="Register-PackageSource"/> <Word Value="Register-PSSessionConfiguration"/> <Word Value="Register-ScheduledJob"/> <Word Value="Register-UevTemplate"/> <Word Value="Register-WmiEvent"/> <Word Value="Remove-AppvClientConnectionGroup"/> <Word Value="Remove-AppvClientPackage"/> <Word Value="Remove-AppvPublishingServer"/> <Word Value="Remove-AppxPackage"/> <Word Value="Remove-AppxProvisionedPackage"/> <Word Value="Remove-AppxVolume"/> <Word Value="Remove-BitsTransfer"/> <Word Value="Remove-CertificateEnrollmentPolicyServer"/> <Word Value="Remove-CertificateNotificationTask"/> <Word Value="Remove-CimInstance"/> <Word Value="Remove-CimSession"/> <Word Value="Remove-CIPolicyRule"/> <Word Value="Remove-Computer"/> <Word Value="Remove-Event"/> <Word Value="Remove-EventLog"/> <Word Value="Remove-Item"/> <Word Value="Remove-ItemProperty"/> <Word Value="Remove-Job"/> <Word Value="Remove-JobTrigger"/> <Word Value="Remove-LocalGroup"/> <Word Value="Remove-LocalGroupMember"/> <Word Value="Remove-LocalUser"/> <Word Value="Remove-Module"/> <Word Value="Remove-PmemDisk"/> <Word Value="Remove-PSBreakpoint"/> <Word Value="Remove-PSDrive"/> <Word Value="Remove-PSReadLineKeyHandler"/> <Word Value="Remove-PSSession"/> <Word Value="Remove-PSSnapin"/> <Word Value="Remove-TypeData"/> <Word Value="Remove-Variable"/> <Word Value="Remove-WindowsCapability"/> <Word Value="Remove-WindowsDriver"/> <Word Value="Remove-WindowsImage"/> <Word Value="Remove-WindowsPackage"/> <Word Value="Remove-WmiObject"/> <Word Value="Remove-WSManInstance"/> <Word Value="Rename-Computer"/> <Word Value="Rename-Item"/> <Word Value="Rename-ItemProperty"/> <Word Value="Rename-LocalGroup"/> <Word Value="Rename-LocalUser"/> <Word Value="Repair-AppvClientConnectionGroup"/> <Word Value="Repair-AppvClientPackage"/> <Word Value="Repair-UevTemplateIndex"/> <Word Value="Repair-WindowsImage"/> <Word Value="Reset-ComputerMachinePassword"/> <Word Value="Resolve-DnsName"/> <Word Value="Resolve-Path"/> <Word Value="Restart-Computer"/> <Word Value="Restart-Service"/> <Word Value="Restore-Computer"/> <Word Value="Restore-UevBackup"/> <Word Value="Restore-UevUserSetting"/> <Word Value="Resume-BitsTransfer"/> <Word Value="Resume-Job"/> <Word Value="Resume-ProvisioningSession"/> <Word Value="Resume-Service"/> <Word Value="Save-Help"/> <Word Value="Save-Package"/> <Word Value="Save-WindowsImage"/> <Word Value="Select-Object"/> <Word Value="Select-String"/> <Word Value="Select-Xml"/> <Word Value="Send-AppvClientReport"/> <Word Value="Send-AU3ControlKey"/> <Word Value="Send-AU3Key"/> <Word Value="Send-DtcDiagnosticTransaction"/> <Word Value="Send-MailMessage"/> <Word Value="Set-Acl"/> <Word Value="Set-Alias"/> <Word Value="Set-AppBackgroundTaskResourcePolicy"/> <Word Value="Set-AppLockerPolicy"/> <Word Value="Set-AppvClientConfiguration"/> <Word Value="Set-AppvClientMode"/> <Word Value="Set-AppvClientPackage"/> <Word Value="Set-AppvPublishingServer"/> <Word Value="Set-AppxDefaultVolume"/> <Word Value="Set-AppXProvisionedDataFile"/> <Word Value="Set-AU3Clip"/> <Word Value="Set-AU3ControlFocus"/> <Word Value="Set-AU3ControlText"/> <Word Value="Set-AU3Option"/> <Word Value="Set-AU3WinOnTop"/> <Word Value="Set-AU3WinState"/> <Word Value="Set-AU3WinTitle"/> <Word Value="Set-AU3WinTrans"/> <Word Value="Set-AuthenticodeSignature"/> <Word Value="Set-BitsTransfer"/> <Word Value="Set-CertificateAutoEnrollmentPolicy"/> <Word Value="Set-CimInstance"/> <Word Value="Set-CIPolicyIdInfo"/> <Word Value="Set-CIPolicySetting"/> <Word Value="Set-CIPolicyVersion"/> <Word Value="Set-Clipboard"/> <Word Value="Set-Content"/> <Word Value="Set-Culture"/> <Word Value="Set-Date"/> <Word Value="Set-DeliveryOptimizationStatus"/> <Word Value="Set-DODownloadMode"/> <Word Value="Set-DOPercentageMaxBackgroundBandwidth"/> <Word Value="Set-DOPercentageMaxForegroundBandwidth"/> <Word Value="Set-DscLocalConfigurationManager"/> <Word Value="Set-ExecutionPolicy"/> <Word Value="Set-HVCIOptions"/> <Word Value="Set-Item"/> <Word Value="Set-ItemProperty"/> <Word Value="Set-JobTrigger"/> <Word Value="Set-KdsConfiguration"/> <Word Value="Set-LocalGroup"/> <Word Value="Set-LocalUser"/> <Word Value="Set-Location"/> <Word Value="Set-NonRemovableAppsPolicy"/> <Word Value="Set-PackageSource"/> <Word Value="Set-ProcessMitigation"/> <Word Value="Set-PSBreakpoint"/> <Word Value="Set-PSDebug"/> <Word Value="Set-PSReadLineKeyHandler"/> <Word Value="Set-PSReadLineOption"/> <Word Value="Set-PSSessionConfiguration"/> <Word Value="Set-RuleOption"/> <Word Value="Set-ScheduledJob"/> <Word Value="Set-ScheduledJobOption"/> <Word Value="Set-SecureBootUEFI"/> <Word Value="Set-Service"/> <Word Value="Set-StrictMode"/> <Word Value="Set-SystemPreferredUILanguage"/> <Word Value="Set-TimeZone"/> <Word Value="Set-TpmOwnerAuth"/> <Word Value="Set-TraceSource"/> <Word Value="Set-UevConfiguration"/> <Word Value="Set-UevTemplateProfile"/> <Word Value="Set-Variable"/> <Word Value="Set-WheaMemoryPolicy"/> <Word Value="Set-WinAcceptLanguageFromLanguageListOptOut"/> <Word Value="Set-WinCultureFromLanguageListOptOut"/> <Word Value="Set-WinDefaultInputMethodOverride"/> <Word Value="Set-WindowsEdition"/> <Word Value="Set-WindowsProductKey"/> <Word Value="Set-WindowsReservedStorageState"/> <Word Value="Set-WindowsSearchSetting"/> <Word Value="Set-WinHomeLocation"/> <Word Value="Set-WinLanguageBarOption"/> <Word Value="Set-WinSystemLocale"/> <Word Value="Set-WinUILanguageOverride"/> <Word Value="Set-WinUserLanguageList"/> <Word Value="Set-WmiInstance"/> <Word Value="Set-WSManInstance"/> <Word Value="Set-WSManQuickConfig"/> <Word Value="Show-AU3Control"/> <Word Value="Show-AU3WinActivate"/> <Word Value="Show-AU3WinMinimizeAll"/> <Word Value="Show-AU3WinMinimizeAllUndo"/> <Word Value="Show-Command"/> <Word Value="Show-ControlPanelItem"/> <Word Value="Show-EventLog"/> <Word Value="Show-WindowsDeveloperLicenseRegistration"/> <Word Value="Sort-Object"/> <Word Value="Split-Path"/> <Word Value="Split-WindowsImage"/> <Word Value="Start-BitsTransfer"/> <Word Value="Start-DscConfiguration"/> <Word Value="Start-DtcDiagnosticResourceManager"/> <Word Value="Start-Job"/> <Word Value="Start-OSUninstall"/> <Word Value="Start-Process"/> <Word Value="Start-Service"/> <Word Value="Start-Sleep"/> <Word Value="Start-Transaction"/> <Word Value="Start-Transcript"/> <Word Value="Stop-AppvClientConnectionGroup"/> <Word Value="Stop-AppvClientPackage"/> <Word Value="Stop-Computer"/> <Word Value="Stop-DtcDiagnosticResourceManager"/> <Word Value="Stop-Job"/> <Word Value="Stop-Process"/> <Word Value="Stop-Service"/> <Word Value="Stop-Transcript"/> <Word Value="Suspend-BitsTransfer"/> <Word Value="Suspend-Job"/> <Word Value="Suspend-Service"/> <Word Value="Switch-Certificate"/> <Word Value="Sync-AppvPublishingServer"/> <Word Value="Tee-Object"/> <Word Value="Test-AppLockerPolicy"/> <Word Value="Test-Certificate"/> <Word Value="Test-ComputerSecureChannel"/> <Word Value="Test-Connection"/> <Word Value="Test-DscConfiguration"/> <Word Value="Test-FileCatalog"/> <Word Value="Test-KdsRootKey"/> <Word Value="Test-ModuleManifest"/> <Word Value="Test-Path"/> <Word Value="Test-PSSessionConfigurationFile"/> <Word Value="Test-UevTemplate"/> <Word Value="Test-WSMan"/> <Word Value="Trace-Command"/> <Word Value="Unblock-File"/> <Word Value="Unblock-Tpm"/> <Word Value="Undo-DtcDiagnosticTransaction"/> <Word Value="Undo-Transaction"/> <Word Value="Uninstall-Language"/> <Word Value="Uninstall-Package"/> <Word Value="Uninstall-ProvisioningPackage"/> <Word Value="Uninstall-TrustedProvisioningCertificate"/> <Word Value="Unprotect-CmsMessage"/> <Word Value="Unpublish-AppvClientPackage"/> <Word Value="Unregister-Event"/> <Word Value="Unregister-PackageSource"/> <Word Value="Unregister-PSSessionConfiguration"/> <Word Value="Unregister-ScheduledJob"/> <Word Value="Unregister-UevTemplate"/> <Word Value="Unregister-WindowsDeveloperLicense"/> <Word Value="Update-DscConfiguration"/> <Word Value="Update-FormatData"/> <Word Value="Update-Help"/> <Word Value="Update-List"/> <Word Value="Update-TypeData"/> <Word Value="Update-UevTemplate"/> <Word Value="Update-WIMBootEntry"/> <Word Value="Use-Transaction"/> <Word Value="Use-WindowsUnattend"/> <Word Value="Wait-AU3Win"/> <Word Value="Wait-AU3WinActive"/> <Word Value="Wait-AU3WinClose"/> <Word Value="Wait-AU3WinNotActive"/> <Word Value="Wait-Debugger"/> <Word Value="Wait-Event"/> <Word Value="Wait-Job"/> <Word Value="Wait-Process"/> <Word Value="Where-Object"/> <Word Value="Write-Debug"/> <Word Value="Write-Error"/> <Word Value="Write-EventLog"/> <Word Value="Write-Host"/> <Word Value="Write-Information"/> <Word Value="Write-Output"/> <Word Value="Write-Progress"/> <Word Value="Write-Verbose"/> <Word Value="Write-Warning"/> </Keywords> <Range Name="Strings @'..'@" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="@'" CloseSymbol="'@"/> </Range> <Range Name="Strings @".."@" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="@"" OpenSymbolPartOfTerm="Right" CloseSymbol=""@" CloseSymbolPartOfTerm="False"/> </Range> <Range Name="Strings '..'" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" CloseSymbol="'"/> </Range> <Range Name="Strings ".."" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="False"/> </Range> <Range Name="Remarks #" Attributes="$00800000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="#" OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnEol="True"/> </Range> <Range Name="Remarks <#..#>" Attributes="$00800000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="<#" OpenSymbolPartOfTerm="Right" CloseSymbol="#>" CloseSymbolPartOfTerm="False"/> </Range> <Range Name="Variables" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="$" OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnTerm="True"/> </Range> </Range> </UniHighlighter> ��������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/Kotlin.hgl������������������������������������������������������������0000644�0001750�0000144�00000013354�15104114162�017210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="Kotlin" Extensions="kt,kts" Other="0"/> <Author Name="Alexander V" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="0" Date="45654.5420000000"/> <History> </History> <Sample> <S>/**</S> <S> * Syntax highlighting</S> <S> */</S> <S>@Test</S> <S>fun main() {</S> <S> /* code example */</S> <S> val x = 1_000_000L // so much</S> <S> println("Much more $x")</S> <S>}</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="-2147483640,-2147483643;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Set Name="Numbers" Attributes="$00B8AC2A,$80000005;False:True." Style="" Symbols="0123456789._fFL"/> <Keywords Name="Keywords" Attributes="$006D8ECF,$80000005;False:True." Style=""> <Word Value="as"/> <Word Value="as?"/> <Word Value="break"/> <Word Value="case"/> <Word Value="class"/> <Word Value="continue"/> <Word Value="do"/> <Word Value="else"/> <Word Value="false"/> <Word Value="for"/> <Word Value="fun"/> <Word Value="if"/> <Word Value="in"/> <Word Value="!in"/> <Word Value="interface"/> <Word Value="is"/> <Word Value="!is"/> <Word Value="null"/> <Word Value="object"/> <Word Value="package"/> <Word Value="return"/> <Word Value="super"/> <Word Value="this"/> <Word Value="throw"/> <Word Value="true"/> <Word Value="try"/> <Word Value="typealias"/> <Word Value="val"/> <Word Value="var"/> <Word Value="when"/> <Word Value="while"/> </Keywords> <Keywords Name="Contextual keywords" Attributes="$006D8ECF,$80000005;False:True." Style=""> <Word Value="by"/> <Word Value="catch"/> <Word Value="constructor"/> <Word Value="delegate"/> <Word Value="dynamic"/> <Word Value="field"/> <Word Value="file"/> <Word Value="finally"/> <Word Value="get"/> <Word Value="import"/> <Word Value="init"/> <Word Value="param"/> <Word Value="property"/> <Word Value="receiver"/> <Word Value="set"/> <Word Value="setparam"/> <Word Value="where"/> </Keywords> <Keywords Name="Modifier keywords" Attributes="$006D8ECF,$80000005;False:True." Style=""> <Word Value="actual"/> <Word Value="abstract"/> <Word Value="annotation"/> <Word Value="const"/> <Word Value="companion"/> <Word Value="crossinline"/> <Word Value="data"/> <Word Value="enum"/> <Word Value="expect"/> <Word Value="external"/> <Word Value="final"/> <Word Value="infix"/> <Word Value="inline"/> <Word Value="inner"/> <Word Value="internal"/> <Word Value="lateinit"/> <Word Value="noinline"/> <Word Value="open"/> <Word Value="operator"/> <Word Value="out"/> <Word Value="override"/> <Word Value="private"/> <Word Value="protected"/> <Word Value="public"/> <Word Value="reified"/> <Word Value="sealed"/> <Word Value="suspend"/> <Word Value="tailrec"/> <Word Value="vararg"/> </Keywords> <Keywords Name="Special Identifiers" Attributes="$1FFFFFFF,$80000005;False:True.B" Style=""> <Word Value="field"/> <Word Value="it"/> </Keywords> <Keywords Name="Basic data types" Attributes="$1FFFFFFF,$80000005;False:True." Style=""> <Word Value="Boolean"/> <Word Value="Byte"/> <Word Value="UByte"/> <Word Value="Double"/> <Word Value="Float"/> <Word Value="Int"/> <Word Value="UInt"/> <Word Value="Long"/> <Word Value="ULong"/> <Word Value="Short"/> <Word Value="UShort"/> </Keywords> <Range Name="@Annotation" Attributes="$0060AEB3,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="@" CloseOnEol="True"/> </Range> <Range Name="Strings '..'" Attributes="$0073AB6A,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" CloseSymbol="'"/> </Range> <Range Name="Strings ".."" Attributes="$0073AB6A,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="$006D8ECF,$80000005;True:True." Style=""> <word value="$"/> <word value="\'"/> <word value="\""/> <word value="\r"/> <word value="\n"/> <word value="\t"/> <word value="\\"/> </Keywords> </Range> <Range Name="Remarks //" Attributes="$00857E7A,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="$00857E7A,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> <Range Name="Remarks /**..*/" Attributes="$006B825F,$80000005;False:True.I" Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/**" CloseSymbol="*/"/> </Range> </Range> </UniHighlighter> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/JavaScript.hgl��������������������������������������������������������0000644�0001750�0000144�00000046712�15104114162�020022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="Java script" Extensions="js" Other="0"/> <Author Name="Vitaly Nevzorov" Email="nevzorov@yahoo.com" Web="www.delphist.com" Copyright="Copyright (c) Vitaly Nevzorov, 2002" Company="N/A" Remark=""/> <Version Version="1" Revision="1" Date="45338,8541038426"/> <History> </History> <Sample> <S>// Syntax highlighting</S> <S>function printNumber()</S> <S>{</S> <S> var number = 1234;</S> <S> var x;</S> <S> document.write("The number is " + number);</S> <S> for (var i = 0; i <= number; i++)</S> <S> {</S> <S> x++;</S> <S> x--;</S> <S> x += 1.0;</S> <S> }</S> <S> i += @; // illegal character</S> <S>}</S> <S>body.onLoad = printNumber;</S> <S></S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Functions and key words" Attributes="$00008000,$80000005;False:True." Style=""> <word value="E"/> <word value="back"/> <word value="big"/> <word value="abs"/> <word value="go"/> <word value="Area"/> <word value="PI"/> <word value="All"/> <word value="all"/> <word value="LN10"/> <word value="LN2"/> <word value="call"/> <word value="Embed"/> <word value="ceil"/> <word value="Date"/> <word value="bold"/> <word value="name"/> <word value="find"/> <word value="log"/> <word value="java"/> <word value="Image"/> <word value="tan"/> <word value="min"/> <word value="hash"/> <word value="atan2"/> <word value="atan"/> <word value="href"/> <word value="cos"/> <word value="click"/> <word value="acos"/> <word value="max"/> <word value="LOG10E"/> <word value="LOG2E"/> <word value="checked"/> <word value="clear"/> <word value="eval"/> <word value="src"/> <word value="home"/> <word value="self"/> <word value="Math"/> <word value="sin"/> <word value="sub"/> <word value="asin"/> <word value="Frame"/> <word value="left"/> <word value="align"/> <word value="Hidden"/> <word value="UTC"/> <word value="exp"/> <word value="match"/> <word value="Link"/> <word value="link"/> <word value="body"/> <word value="Radio"/> <word value="tags"/> <word value="join"/> <word value="embeds"/> <word value="blink"/> <word value="fixed"/> <word value="slice"/> <word value="escape"/> <word value="Global"/> <word value="open"/> <word value="charAt"/> <word value="top"/> <word value="URL"/> <word value="caller"/> <word value="Form"/> <word value="form"/> <word value="hspace"/> <word value="blur"/> <word value="pageX"/> <word value="pow"/> <word value="close"/> <word value="search"/> <word value="images"/> <word value="Float"/> <word value="pageY"/> <word value="reload"/> <word value="Object"/> <word value="watch"/> <word value="alert"/> <word value="sup"/> <word value="domain"/> <word value="index"/> <word value="concat"/> <word value="isNaN"/> <word value="small"/> <word value="height"/> <word value="cookie"/> <word value="closed"/> <word value="parse"/> <word value="Anchor"/> <word value="anchor"/> <word value="replace"/> <word value="value"/> <word value="Layer"/> <word value="action"/> <word value="getDate"/> <word value="getDay"/> <word value="border"/> <word value="host"/> <word value="frames"/> <word value="right"/> <word value="Array"/> <word value="next"/> <word value="Packages"/> <word value="logon"/> <word value="color"/> <word value="Select"/> <word value="select"/> <word value="Boolean"/> <word value="taint"/> <word value="focus"/> <word value="width"/> <word value="screen"/> <word value="filename"/> <word value="links"/> <word value="method"/> <word value="random"/> <word value="vspace"/> <word value="length"/> <word value="title"/> <word value="type"/> <word value="appName"/> <word value="floor"/> <word value="event"/> <word value="reset"/> <word value="Reset"/> <word value="port"/> <word value="Text"/> <word value="text"/> <word value="Applet"/> <word value="stop"/> <word value="target"/> <word value="Checkbox"/> <word value="encoding"/> <word value="forms"/> <word value="round"/> <word value="sort"/> <word value="bgColor"/> <word value="italics"/> <word value="Number"/> <word value="opener"/> <word value="selected"/> <word value="sqrt"/> <word value="SQRT2"/> <word value="parent"/> <word value="setDate"/> <word value="menubar"/> <word value="write"/> <word value="RegExp"/> <word value="fgColor"/> <word value="split"/> <word value="javaEnabled"/> <word value="indexOf"/> <word value="print"/> <word value="anchors"/> <word value="confirm"/> <word value="pathname"/> <word value="charCodeAt"/> <word value="Plugin"/> <word value="getTime"/> <word value="refresh"/> <word value="scroll"/> <word value="layers"/> <word value="input"/> <word value="getYear"/> <word value="style"/> <word value="strike"/> <word value="valueOf"/> <word value="moveBy"/> <word value="zIndex"/> <word value="Undefined"/> <word value="undefined"/> <word value="netscape"/> <word value="toolbar"/> <word value="Submit"/> <word value="submit"/> <word value="unescape"/> <word value="forward"/> <word value="bottom"/> <word value="display"/> <word value="String"/> <word value="Window"/> <word value="window"/> <word value="Location"/> <word value="location"/> <word value="complete"/> <word value="applets"/> <word value="Option"/> <word value="lowsrc"/> <word value="moveTo"/> <word value="unwatch"/> <word value="setTime"/> <word value="isFinite"/> <word value="Button"/> <word value="reverse"/> <word value="appCodeName"/> <word value="setYear"/> <word value="referrer"/> <word value="elements"/> <word value="Textarea"/> <word value="hostname"/> <word value="document"/> <word value="background"/> <word value="prompt"/> <word value="plugins"/> <word value="current"/> <word value="untaint"/> <word value="substr"/> <word value="status"/> <word value="FileUpload"/> <word value="writeln"/> <word value="platform"/> <word value="getMonth"/> <word value="Function"/> <word value="parseInt"/> <word value="SQRT1_2"/> <word value="MimeType"/> <word value="Infinity"/> <word value="scrollBy"/> <word value="getUTCDate"/> <word value="getUTCDay"/> <word value="taintEnabled"/> <word value="Navigator"/> <word value="navigator"/> <word value="defaultChecked"/> <word value="options"/> <word value="suffixes"/> <word value="linkColor"/> <word value="resizeBy"/> <word value="fromCharCode"/> <word value="userAgent"/> <word value="alinkColor"/> <word value="locationbar"/> <word value="handleEvent"/> <word value="getSeconds"/> <word value="parseFloat"/> <word value="getHours"/> <word value="fontsize"/> <word value="History"/> <word value="history"/> <word value="setMonth"/> <word value="protocol"/> <word value="scrollTo"/> <word value="Password"/> <word value="toSource"/> <word value="lastModified"/> <word value="resizeTo"/> <word value="innerHeight"/> <word value="fontcolor"/> <word value="Arguments"/> <word value="arguments"/> <word value="setUTCDate"/> <word value="scrollbars"/> <word value="personalbar"/> <word value="statusbar"/> <word value="toString"/> <word value="enabledPlugin"/> <word value="setSeconds"/> <word value="innerWidth"/> <word value="pageXOffset"/> <word value="previous"/> <word value="setHours"/> <word value="mimeTypes"/> <word value="pageYOffset"/> <word value="MIN_VALUE"/> <word value="lastIndexOf"/> <word value="substring"/> <word value="selectedIndex"/> <word value="defaultValue"/> <word value="MAX_VALUE"/> <word value="vlinkColor"/> <word value="description"/> <word value="getFullYear"/> <word value="getMinutes"/> <word value="appVersion"/> <word value="toLowerCase"/> <word value="outerHeight"/> <word value="visibility"/> <word value="toUpperCase"/> <word value="clearInterval"/> <word value="defaultSelected"/> <word value="clearTimeout"/> <word value="outerWidth"/> <word value="setFullYear"/> <word value="setMinutes"/> <word value="setInterval"/> <word value="routeEvent"/> <word value="getUTCMonth"/> <word value="getElementById"/> <word value="setTimeout"/> <word value="releaseEvents"/> <word value="getUTCSeconds"/> <word value="getUTCHours"/> <word value="setUTCMonth"/> <word value="toGMTString"/> <word value="getMilliseconds"/> <word value="toUTCString"/> <word value="setUTCSeconds"/> <word value="defaultStatus"/> <word value="captureEvents"/> <word value="setUTCHours"/> <word value="toLocaleString"/> <word value="getUTCFullYear"/> <word value="getUTCMinutes"/> <word value="setMilliseconds"/> <word value="setUTCFullYear"/> <word value="setUTCMinutes"/> <word value="getTimezoneOffset"/> <word value="getUTCMilliseconds"/> <word value="NEGATIVE_INFINITY"/> <word value="setUTCMilliseconds"/> <word value="POSITIVE_INFINITY"/> <word value="above"/> <word value="activeElement"/> <word value="altKey"/> <word value="apply"/> <word value="arity"/> <word value="availWidth"/> <word value="availTop"/> <word value="availLeft"/> <word value="availHeight"/> <word value="atob"/> <word value="assign"/> <word value="btoa"/> <word value="cancelBubble"/> <word value="borderWidths"/> <word value="below"/> <word value="charset"/> <word value="className"/> <word value="classes"/> <word value="children"/> <word value="clientInformation"/> <word value="clientX"/> <word value="clientY"/> <word value="colorDepth"/> <word value="compile"/> <word value="crypto"/> <word value="ctrlKey"/> <word value="contextual"/> <word value="contains"/> <word value="constructir"/> <word value="data"/> <word value="defaultCharset"/> <word value="disableExternalCapture"/> <word value="disablePrivilege"/> <word value="element"/> <word value="enableExternalCapture"/> <word value="exec"/> <word value="expando"/> <word value="FromPoint"/> <word value="enablePrivilege"/> <word value="getAttribute"/> <word value="fromElement"/> <word value="getClass"/> <word value="get"/> <word value="getMember"/> <word value="getSlot"/> <word value="getSelection"/> <word value="getWindow"/> <word value="id"/> <word value="ids"/> <word value="ignoreCase"/> <word value="inner"/> <word value="innerHTML"/> <word value="innerText"/> <word value="insertAdjacentText"/> <word value="insertAdjacentHTML"/> <word value="keyCode"/> <word value="lang"/> <word value="language"/> <word value="lastIndex"/> <word value="lastMatch"/> <word value="lastParen"/> <word value="leftContext"/> <word value="layerY"/> <word value="layerX"/> <word value="margins"/> <word value="modifiers"/> <word value="multiline"/> <word value="moveToAbsolute"/> <word value="moveAbove"/> <word value="moveBelow"/> <word value="navigate"/> <word value="offscreenBuffering"/> <word value="offset"/> <word value="offsetHeight"/> <word value="offsetLeft"/> <word value="offsetParent"/> <word value="offsetTop"/> <word value="offsetWidth"/> <word value=""/> <word value="offsetY"/> <word value="offsetX"/> <word value="outerHTML"/> <word value="outerText"/> <word value="paddings"/> <word value="parentElement"/> <word value="parentLayer"/> <word value="parentWindow"/> <word value="preference"/> <word value="pop"/> <word value="pixelDepth"/> <word value="readyState"/> <word value="reason"/> <word value="push"/> <word value="returnValue"/> <word value="rightcontext"/> <word value="removeMember"/> <word value="removeAttribute"/> <word value="screenY"/> <word value="screenX"/> <word value="scrollIntoView"/> <word value="setAttribute"/> <word value="setDay"/> <word value="setMember"/> <word value="setSlot"/> <word value="setResizable"/> <word value="setHotkeys"/> <word value="setUTCMillseconds"/> <word value="siblingAbove"/> <word value="shiftKey"/> <word value="siblingBelow"/> <word value="setZOptions"/> <word value="shift"/> <word value="sourceIndex"/> <word value="splice"/> <word value="smallsort"/> <word value="source"/> <word value="sun"/> <word value="systemLanguage"/> <word value="srcFilter"/> <word value="srcElement"/> <word value="signText"/> <word value="tagName"/> <word value="toElement"/> <word value="test"/> <word value="userLanguage"/> <word value="unshift"/> <word value="which"/> <word value="x"/> <word value="y"/> <word value="HTMLElement"/> <word value="JavaArray"/> <word value="JavaClass"/> <word value="JavaObject"/> <word value="JavaPackage"/> <word value="JSObject"/> <word value="PrivilegeManager"/> </Keywords> <Keywords Name="Reserved words" Attributes="$00FF0000,$80000005;False:True." Style=""> <word value="if"/> <word value="do"/> <word value="in"/> <word value="case"/> <word value="NaN"/> <word value="char"/> <word value="catch"/> <word value="break"/> <word value="callee"/> <word value="for"/> <word value="else"/> <word value="var"/> <word value="new"/> <word value="false"/> <word value="int"/> <word value="package"/> <word value="long"/> <word value="void"/> <word value="delete"/> <word value="byte"/> <word value="enum"/> <word value="class"/> <word value="float"/> <word value="this"/> <word value="while"/> <word value="goto"/> <word value="double"/> <word value="Null"/> <word value="null"/> <word value="with"/> <word value="try"/> <word value="public"/> <word value="boolean"/> <word value="true"/> <word value="default"/> <word value="debugger"/> <word value="const"/> <word value="native"/> <word value="static"/> <word value="start"/> <word value="finally"/> <word value="super"/> <word value="short"/> <word value="interface"/> <word value="switch"/> <word value="throw"/> <word value="abstract"/> <word value="typeof"/> <word value="import"/> <word value="extends"/> <word value="private"/> <word value="return"/> <word value="export"/> <word value="continue"/> <word value="function"/> <word value="throws"/> <word value="instanceof"/> <word value="protected"/> <word value="transient"/> <word value="implements"/> <word value="prototype"/> <word value="synchronized"/> <word value="constructor"/> <word value="final"/> </Keywords> <Keywords Name="Common Events" Attributes="$00FF0080,$80000005;False:True." Style=""> <word value="onLoad"/> <word value="onClick"/> <word value="onChange"/> <word value="onBlur"/> <word value="onAbort"/> <word value="onDblClick"/> <word value="onFocus"/> <word value="onSelect"/> <word value="onUnload"/> <word value="onReset"/> <word value="onError"/> <word value="onKeyUp"/> <word value="onSubmit"/> <word value="onKeyDown"/> <word value="onMouseUp"/> <word value="onKeyPress"/> <word value="onMouseMove"/> <word value="onMouseOut"/> <word value="onMouseDown"/> <word value="onMouseOver"/> <word value="ondragdrop"/> <word value="onHelp"/> <word value="onmove"/> <word value="onresize"/> </Keywords> <Range Name="Remark //" Attributes="$00A00000,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remark /*...*/" Attributes="$00A00000,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> <Range Name="Strings '..'" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" OpenSymbolPartOfTerm="Right" CloseSymbol="'" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="$000000FF,$80000005;True:True." Style=""> <word value="\""/> <word value="\'"/> <word value="\\"/> </Keywords> </Range> <Range Name="Strings ".."" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="$000000FF,$80000005;True:True." Style=""> <word value="\""/> <word value="\'"/> <word value="\\"/> </Keywords> </Range> </Range> </UniHighlighter> ������������������������������������������������������doublecmd-1.1.30/highlighters/JSON.hgl��������������������������������������������������������������0000644�0001750�0000144�00000003576�15104114162�016526� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="JSON" Extensions="json" Other="0"/> <Author Name="" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="1" Date="45338,8541038426"/> <History> </History> <Sample> <S>{</S> <S> Styles : [</S> <S> {</S> <S> String: "Light",</S> <S> Number: 1000,</S> <S> Boolean: true</S> <S> },</S> <S> {</S> <S> String: "Dark",</S> <S> Number: 3000,</S> <S> Boolean: false</S> <S> }</S> <S> ]</S> <S>}</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="$000080FF,$80000005;False:True." Style=""> <Word Value="false"/> <Word Value="null"/> <Word Value="true"/> </Keywords> <Keywords Name="Punctuators" Attributes="$00800000,$80000005;False:True." Style=""> <Word Value="["/> <Word Value="]"/> <Word Value="{"/> <Word Value="}"/> <Word Value=","/> <Word Value=":"/> </Keywords> <Set Name="Numbers" Attributes="$00008000,$80000005;False:True." Style="" Symbols="0123456789"/> <Range Name="Strings ".."" Attributes="$00000080,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="$00000080,$80000005;True:True." Style=""> <Word Value="\""/> <Word Value="\'"/> <Word Value="\\"/> </Keywords> </Range> </Range> </UniHighlighter> ����������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/Go.hgl����������������������������������������������������������������0000644�0001750�0000144�00000010303�15104114162�016304� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8.1"> <Info> <General Name="Go" Extensions="GO"/> <Author Name="" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="0" Date="45442,3845858218"/> <History> </History> <Sample> <S>package main</S> <S></S> <S>import "fmt"</S> <S></S> <S>// Link struct</S> <S>type Link struct {</S> <S> URL, Title string</S> <S>}</S> <S></S> <S>/*</S> <S>* Main function</S> <S>*/</S> <S>func main() {</S> <S> ch := make(chan int)</S> <S> helloPeople := `Hello people!`</S> <S> fmt.Println("Hello world!")</S> <S>}</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="$00FF0000,$80000005;False:True." Style=""> <Word value="break"/> <Word value="case"/> <Word value="chan"/> <Word value="const"/> <Word value="continue"/> <Word value="default"/> <Word value="defer"/> <Word value="else"/> <Word value="fallthrough"/> <Word value="for"/> <Word value="func"/> <Word value="go"/> <Word value="goto"/> <Word value="if"/> <Word value="import"/> <Word value="interface"/> <Word value="map"/> <Word value="package"/> <Word value="range"/> <Word value="return"/> <Word value="select"/> <Word value="struct"/> <Word value="switch"/> <Word value="type"/> <Word value="var"/> <Word value="_"/> <Word value="false"/> <Word value="iota"/> <Word value="nil"/> <Word value="true"/> </Keywords> <Keywords Name="Types" Attributes="$00000080,$80000005;False:True." Style=""> <Word value="any"/> <Word value="bool"/> <Word value="byte"/> <Word value="comparable"/> <Word value="complex64"/> <Word value="complex128"/> <Word value="error"/> <Word value="float32"/> <Word value="float64"/> <Word value="int"/> <Word value="int8"/> <Word value="int16"/> <Word value="int32"/> <Word value="int64"/> <Word value="rune"/> <Word value="string"/> <Word value="uint"/> <Word value="uint8"/> <Word value="uint16"/> <Word value="uint32"/> <Word value="uint64"/> <Word value="uintptr"/> </Keywords> <Keywords Name="Functions" Attributes="$00800000,$80000005;False:True." Style=""> <Word value="append"/> <Word value="cap"/> <Word value="clear"/> <Word value="close"/> <Word value="complex"/> <Word value="copy"/> <Word value="delete"/> <Word value="imag"/> <Word value="len"/> <Word value="make"/> <Word value="max"/> <Word value="min"/> <Word value="new"/> <Word value="panic"/> <Word value="print"/> <Word value="println"/> <Word value="real"/> <Word value="recover"/> </Keywords> <Range Name="Strings `..`" Attributes="$00696969,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="`" CloseSymbol="`"/> </Range> <Range Name="Strings ".."" Attributes="$00696969,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" CloseSymbol="""/> <Keywords Name="Escape" Attributes="$00696969,$80000005;True:True." Style=""> <Word Value="\""/> <Word Value="\\"/> </Keywords> </Range> <Range Name="Remarks //" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="$00008000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> </Range> </UniHighlighter> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/DCErrorFile.hgl�������������������������������������������������������0000644�0001750�0000144�00000006110�15104114162�020040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="DC Error File" Extensions="err" Other="0"/> <Author Name="Skif_off" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="0" Revision="2" Date="45067.6951690509"/> <History> </History> <Sample> <S>--------------- 24-03-2017, 03:10:06 ---------------</S> <S>| DC v0.8.0 alpha Rev. 7469 -- i386-Win32-win32/win64</S> <S>| Windows 7 SP1 x86_64 | PID 1148</S> <S>Unhandled exception: EAccessViolation: Access violation</S> <S> Stack trace:</S> <S> $0043F190 line 2194, column 8 of include/customform.inc in C:\DC\doublecmd.exe</S> <S> $0071E4A4 line 179, column 3 of foptions.pas in C:\DC\doublecmd.exe</S> <S> $005517BD line 55, column 3 of include/buttoncontrol.inc in C:\DC\doublecmd.exe</S> <S> $0053BBCD line 64, column 3 of include/bitbtn.inc in C:\DC\doublecmd.exe</S> <S> $005516E9 line 21, column 5 of include/buttoncontrol.inc in C:\DC\doublecmd.exe</S> <S> $0040EEA8 in C:\DC\doublecmd.exe</S> <S> $00526B61 line 5395, column 28 of include/wincontrol.inc in C:\DC\doublecmd.exe</S> <S> $005B5D59 line 112, column 36 of lclmessageglue.pas in C:\DC\doublecmd.exe</S> <S> $0050F309 line 2499, column 33 of win32/win32callback.inc in C:\DC\doublecmd.exe</S> <S> $759062FA in C:\Windows\syswow64\USER32.dll</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="$00800000,$80000005;False:True." Style=""> <word value="line"/> <word value="column"/> <word value="in"/> <word value="of"/> <word value="Stack trace:"/> </Keywords> <Set Name="Digits" Attributes="$00808000,$80000005;False:True." Style="" Symbols="0123456789"/> <Range Name="Date" Attributes="$00800000,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="--------------- " CloseSymbol=" ---------------"/> </Range> <Range Name="About" Attributes="$00800080,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="|" CloseOnEol="True"/> </Range> <Range Name="Exception" Attributes="$000000D2,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="Unhandled exception" OpenSymbolStartLine="True" CloseSymbol="" CloseSymbolFinishOnEol="True" CloseOnEol="True"/> </Range> <Range Name="Address" Attributes="$00000096,$80000005;False:True." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="$" CloseSymbolPartOfTerm="False" CloseOnTerm="True"/> </Range> </Range> </UniHighlighter> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/highlighters/C#.hgl����������������������������������������������������������������0000644�0001750�0000144�00000016755�15104114162�016205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="C#" Extensions="CS" Other="0"/> <Author Name="" Email="" Web="" Copyright="" Company="" Remark=""/> <Version Version="1" Revision="1" Date="45338.7781275116"/> <History> </History> <Sample> <S>namespace HelloWorld</S> <S>{</S> <S> class Hello {</S> <S> static void Main(string[] args)</S> <S> {</S> <S> System.Console.WriteLine("Hello World!");</S> <S> }</S> <S> }</S> <S>}</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="-2147483640,-2147483643;False:False." Style="" CaseSensitive="True" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule/> <Keywords Name="Keywords" Attributes="32768,$80000005;False:True." Style=""> <Word Value="abstract"/> <Word Value="as"/> <Word Value="base"/> <Word Value="break"/> <Word Value="case"/> <Word Value="catch"/> <Word Value="checked"/> <Word Value="class"/> <Word Value="const"/> <Word Value="continue"/> <Word Value="default"/> <Word Value="delegate"/> <Word Value="do"/> <Word Value="else"/> <Word Value="enum"/> <Word Value="event"/> <Word Value="explicit"/> <Word Value="extern"/> <Word Value="false"/> <Word Value="finally"/> <Word Value="fixed"/> <Word Value="for"/> <Word Value="foreach"/> <Word Value="goto"/> <Word Value="if"/> <Word Value="implicit"/> <Word Value="in"/> <Word Value="interface"/> <Word Value="internal"/> <Word Value="is"/> <Word Value="lock"/> <Word Value="namespace"/> <Word Value="new"/> <Word Value="null"/> <Word Value="object"/> <Word Value="operator"/> <Word Value="out"/> <Word Value="override"/> <Word Value="params"/> <Word Value="private"/> <Word Value="protected"/> <Word Value="public"/> <Word Value="readonly"/> <Word Value="ref"/> <Word Value="return"/> <Word Value="sealed"/> <Word Value="sizeof"/> <Word Value="stackalloc"/> <Word Value="static"/> <Word Value="string"/> <Word Value="struct"/> <Word Value="switch"/> <Word Value="this"/> <Word Value="throw"/> <Word Value="true"/> <Word Value="try"/> <Word Value="typeof"/> <Word Value="unchecked"/> <Word Value="unsafe"/> <Word Value="using"/> <Word Value="virtual"/> <Word Value="volatile"/> <Word Value="while"/> </Keywords> <Keywords Name="Contextual keywords" Attributes="32768,$80000005;False:True." Style=""> <Word Value="add"/> <Word Value="and"/> <Word Value="alias"/> <Word Value="ascending"/> <Word Value="args"/> <Word Value="async"/> <Word Value="await"/> <Word Value="by"/> <Word Value="descending"/> <Word Value="dynamic"/> <Word Value="equals"/> <Word Value="from"/> <Word Value="get"/> <Word Value="global"/> <Word Value="group"/> <Word Value="init"/> <Word Value="into"/> <Word Value="join"/> <Word Value="let"/> <Word Value="managed"/> <Word Value="nameof"/> <Word Value="not"/> <Word Value="notnull"/> <Word Value="on"/> <Word Value="or"/> <Word Value="orderby"/> <Word Value="partial"/> <Word Value="record"/> <Word Value="remove"/> <Word Value="select"/> <Word Value="set"/> <Word Value="unmanaged"/> <Word Value="value"/> <Word Value="when"/> <Word Value="where"/> <Word Value="with"/> <Word Value="yield"/> </Keywords> <Keywords Name="Data types" Attributes="16711680,$80000005;False:True." Style=""> <Word Value="bool"/> <Word Value="byte"/> <Word Value="char"/> <Word Value="const"/> <Word Value="decimal"/> <Word Value="double"/> <Word Value="enum"/> <Word Value="float"/> <Word Value="int"/> <Word Value="long"/> <Word Value="nint"/> <Word Value="nuint"/> <Word Value="sbyte"/> <Word Value="short"/> <Word Value="static"/> <Word Value="struct"/> <Word Value="uint"/> <Word Value="ulong"/> <Word Value="ushort"/> <Word Value="var"/> <Word Value="void"/> <Word Value="class"/> <Word Value="interface"/> <Word Value="delegate"/> <Word Value="record"/> <Word Value="dynamic"/> <Word Value="object"/> <Word Value="string"/> </Keywords> <Keywords Name=".NET Data types" Attributes="32896,$80000005;False:True." Style=""> <Word Value="Boolean"/> <Word Value="Byte"/> <Word Value="SByte"/> <Word Value="Char"/> <Word Value="Decimal"/> <Word Value="Double"/> <Word Value="Single"/> <Word Value="Int32"/> <Word Value="UInt32"/> <Word Value="IntPtr"/> <Word Value="UIntPtr"/> <Word Value="Int64"/> <Word Value="UInt64"/> <Word Value="Int16"/> <Word Value="UInt16"/> <Word Value="Object"/> <Word Value="String"/> </Keywords> <Keywords Name="Preprocessor directives" Attributes="16711808,$80000005;False:True." Style=""> <Word Value="#nullable"/> <Word Value="#if"/> <Word Value="#elif"/> <Word Value="#else"/> <Word Value="#endif"/> <Word Value="#define"/> <Word Value="#undef"/> <Word Value="#region"/> <Word Value="#endregion"/> <Word Value="#error"/> <Word Value="#warning"/> <Word Value="#line"/> <Word Value="#pragma"/> </Keywords> <Keywords Name="Operators" Attributes="33023,$80000005;False:True." Style=""> <Word Value="+"/> <Word Value="-"/> <Word Value="*"/> <Word Value="/"/> <Word Value="="/> <Word Value="^"/> <Word Value="%"/> <Word Value="&"/> <Word Value="|"/> <Word Value=">"/> <Word Value="<"/> <Word Value=":"/> <Word Value="!"/> <Word Value="?"/> <Word Value="("/> <Word Value=")"/> </Keywords> <Range Name="Strings '..'" Attributes="255,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" CloseSymbol="'"/> </Range> <Range Name="Strings ".."" Attributes="255,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="Right" CloseOnEol="True"/> <Keywords Name="Escape" Attributes="255,$80000005;True:True." Style=""> <word value="\""/> <word value="\\"/> </Keywords> </Range> <Range Name="Remarks //" Attributes="8388608,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="//" CloseOnEol="True"/> </Range> <Range Name="Remarks /*..*/" Attributes="8388608,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="/*" CloseSymbol="*/"/> </Range> </Range> </UniHighlighter> �������������������doublecmd-1.1.30/highlighters/Assembler(x86).hgl����������������������������������������������������0000644�0001750�0000144�00000052156�15104114162�020357� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<UniHighlighter version="1.8"> <Info> <General Name="Assembler (x86)" Extensions="ASM,S" Other="0"/> <Author Name="Vitalik, Vitaly Nevzorov" Email="v-e-t-a-l@ukr.net" Web="" Copyright="(c) Vitaly Lyapota, Vitaly Nevzorov, 2004" Company="N/A" Remark=""/> <Version Version="1" Revision="2" Date="45067.6927801505"/> <History> </History> <Sample> <S>; x86 assembly sample source</S> <S> CODE SEGMENT BYTE PUBLIC</S> <S> ASSUME CS:CODE</S> <S> PUSH SS</S> <S> POP DS</S> <S> MOV AX, AABBh</S> <S> MOV BYTE PTR ES:[DI], 255</S> <S> JMP SHORT AsmEnd</S> <S> welcomeMsg DB 'Hello World', 0</S> <S> AsmEnd:</S> <S> MOV AX, 0</S> <S> CODE ENDS</S> <S>END</S> </Sample> </Info> <Scheme File="" Name=""/> <Range Name="Root" Attributes="$80000008,$80000005;False:False." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False"/> <Keywords Name="Commands" Attributes="$00008000,$80000005;False:True." Style=""> <word value="aaa"/> <word value="aad"/> <word value="aam"/> <word value="aas"/> <word value="adc"/> <word value="add"/> <word value="and"/> <word value="arpl"/> <word value="bound"/> <word value="bsf"/> <word value="bsr"/> <word value="bswap"/> <word value="bt"/> <word value="btc"/> <word value="btr"/> <word value="bts"/> <word value="call"/> <word value="cbw"/> <word value="cdq"/> <word value="clc"/> <word value="cld"/> <word value="cli"/> <word value="clts"/> <word value="cmc"/> <word value="cmov"/> <word value="cmp"/> <word value="cmps"/> <word value="cmpsb"/> <word value="cmpsd"/> <word value="cmpsw"/> <word value="cmpxchg"/> <word value="cmpxchg8b"/> <word value="cpuid"/> <word value="cwd"/> <word value="cwde"/> <word value="daa"/> <word value="das"/> <word value="dec"/> <word value="div"/> <word value="emms"/> <word value="enter"/> <word value="esc"/> <word value="f2xm1"/> <word value="fabs"/> <word value="fadd"/> <word value="faddp"/> <word value="fbld"/> <word value="fbstp"/> <word value="fchs"/> <word value="fclex"/> <word value="fcmov"/> <word value="fcmovb"/> <word value="fcmovbe"/> <word value="fcmove"/> <word value="fcmovnb"/> <word value="fcmovnbe"/> <word value="fcmovne"/> <word value="fcmovnu"/> <word value="fcmovu"/> <word value="fcom"/> <word value="fcomi"/> <word value="fcomip"/> <word value="fcomp"/> <word value="fcompp"/> <word value="fcos"/> <word value="fdecstp"/> <word value="fdiv"/> <word value="fdivp"/> <word value="fdivr"/> <word value="fdivrp"/> <word value="femms"/> <word value="ffree"/> <word value="fiadd"/> <word value="ficom"/> <word value="ficomp"/> <word value="fidiv"/> <word value="fidivr"/> <word value="fild"/> <word value="fimul"/> <word value="fincstp"/> <word value="finit"/> <word value="fist"/> <word value="fistp"/> <word value="fisub"/> <word value="fisubr"/> <word value="fld"/> <word value="fld1"/> <word value="fldcw"/> <word value="fldenv"/> <word value="fldl2e"/> <word value="fldl2t"/> <word value="fldlg2"/> <word value="fldln2"/> <word value="fldpi"/> <word value="fldz"/> <word value="fmul"/> <word value="fmulp"/> <word value="fnclex"/> <word value="fninit"/> <word value="fnop"/> <word value="fnsave"/> <word value="fnstcw"/> <word value="fnstenv"/> <word value="fnstsw"/> <word value="fpatan"/> <word value="fprem1"/> <word value="fptan"/> <word value="frndint"/> <word value="frstor"/> <word value="fsave"/> <word value="fscale"/> <word value="fsin"/> <word value="fsincos"/> <word value="fsqrt"/> <word value="fst"/> <word value="fstcw"/> <word value="fstenv"/> <word value="fstp"/> <word value="fstsw"/> <word value="fsub"/> <word value="fsubp"/> <word value="fsubr"/> <word value="fsubrp"/> <word value="ftst"/> <word value="fucom"/> <word value="fucomi"/> <word value="fucomip"/> <word value="fucomp"/> <word value="fucompp"/> <word value="fwait"/> <word value="fxch"/> <word value="fxtract"/> <word value="fyl2xp1"/> <word value="hlt"/> <word value="idiv"/> <word value="imul"/> <word value="in"/> <word value="inc"/> <word value="ins"/> <word value="insb"/> <word value="insd"/> <word value="insw"/> <word value="int"/> <word value="into"/> <word value="invd"/> <word value="invlpg"/> <word value="iret"/> <word value="iretd"/> <word value="iretw"/> <word value="ja"/> <word value="jae"/> <word value="jb"/> <word value="jbe"/> <word value="jc"/> <word value="jcxz"/> <word value="je"/> <word value="jecxz"/> <word value="jg"/> <word value="jge"/> <word value="jl"/> <word value="jle"/> <word value="jmp"/> <word value="jna"/> <word value="jnae"/> <word value="jnb"/> <word value="jnbe"/> <word value="jnc"/> <word value="jne"/> <word value="jng"/> <word value="jnge"/> <word value="jnl"/> <word value="jnle"/> <word value="jno"/> <word value="jnp"/> <word value="jns"/> <word value="jnz"/> <word value="jo"/> <word value="jp"/> <word value="jpe"/> <word value="jpo"/> <word value="js"/> <word value="jz"/> <word value="lahf"/> <word value="lar"/> <word value="lds"/> <word value="lea"/> <word value="leave"/> <word value="les"/> <word value="lfs"/> <word value="lgdt"/> <word value="lgs"/> <word value="lidt"/> <word value="lldt"/> <word value="lmsw"/> <word value="lock"/> <word value="lods"/> <word value="lodsb"/> <word value="lodsd"/> <word value="lodsw"/> <word value="loop"/> <word value="loope"/> <word value="loopne"/> <word value="loopnz"/> <word value="loopz"/> <word value="lsl"/> <word value="lss"/> <word value="ltr"/> <word value="mov"/> <word value="movd"/> <word value="movq"/> <word value="movs"/> <word value="movsb"/> <word value="movsd"/> <word value="movsw"/> <word value="movsx"/> <word value="movzx"/> <word value="msw"/> <word value="mul"/> <word value="neg"/> <word value="nop"/> <word value="not"/> <word value="or"/> <word value="out"/> <word value="outs"/> <word value="outsb"/> <word value="outsd"/> <word value="outsw"/> <word value="packssdw"/> <word value="packsswb"/> <word value="packuswb"/> <word value="paddb"/> <word value="paddd"/> <word value="paddsb"/> <word value="paddsw"/> <word value="paddusb"/> <word value="paddusw"/> <word value="paddw"/> <word value="pand"/> <word value="pandn"/> <word value="pavgusb"/> <word value="pcmpeqb"/> <word value="pcmpeqd"/> <word value="pcmpeqw"/> <word value="pcmpgtb"/> <word value="pcmpgtd"/> <word value="pcmpgtw"/> <word value="pf2id"/> <word value="pfacc"/> <word value="pfadd"/> <word value="pfcmpeq"/> <word value="pfcmpge"/> <word value="pfcmpgt"/> <word value="pfmax"/> <word value="pfmin"/> <word value="pfmul"/> <word value="pfrcp"/> <word value="pfrcpit1"/> <word value="pfrcpit2"/> <word value="pfrsqit1"/> <word value="pfrsqrt"/> <word value="pfsub"/> <word value="pfsubr"/> <word value="pi2fd"/> <word value="pmaddwd"/> <word value="pmulhrw"/> <word value="pmulhw"/> <word value="pmullw"/> <word value="pop"/> <word value="popa"/> <word value="popad"/> <word value="popaw"/> <word value="popf"/> <word value="popfd"/> <word value="popfw"/> <word value="por"/> <word value="prefetch"/> <word value="prefetchw"/> <word value="pslld"/> <word value="psllq"/> <word value="psllw"/> <word value="psrad"/> <word value="psraw"/> <word value="psrld"/> <word value="psrlq"/> <word value="psrlw"/> <word value="psubb"/> <word value="psubd"/> <word value="psubsb"/> <word value="psubsw"/> <word value="psubusb"/> <word value="psubusw"/> <word value="psubw"/> <word value="punpckhbw"/> <word value="punpckhdq"/> <word value="punpckhwd"/> <word value="punpcklbw"/> <word value="punpckldq"/> <word value="punpcklwd"/> <word value="push"/> <word value="pusha"/> <word value="pushad"/> <word value="pushaw"/> <word value="pushf"/> <word value="pushfd"/> <word value="pushfw"/> <word value="pxor"/> <word value="rcl"/> <word value="rcr"/> <word value="rdmsr"/> <word value="rdpmc"/> <word value="rdtsc"/> <word value="rep"/> <word value="repe"/> <word value="repne"/> <word value="repnz"/> <word value="repz"/> <word value="ret"/> <word value="retf"/> <word value="retn"/> <word value="rol"/> <word value="ror"/> <word value="rsm"/> <word value="sahf"/> <word value="sal"/> <word value="sar"/> <word value="sbb"/> <word value="scas"/> <word value="scasb"/> <word value="scasd"/> <word value="scasw"/> <word value="seta"/> <word value="setae"/> <word value="setb"/> <word value="setbe"/> <word value="setc"/> <word value="sete"/> <word value="setg"/> <word value="setge"/> <word value="setl"/> <word value="setle"/> <word value="setna"/> <word value="setnae"/> <word value="setnb"/> <word value="setnbe"/> <word value="setnc"/> <word value="setne"/> <word value="setng"/> <word value="setnge"/> <word value="setnl"/> <word value="setnle"/> <word value="setno"/> <word value="setnp"/> <word value="setns"/> <word value="setnz"/> <word value="seto"/> <word value="setp"/> <word value="setpe"/> <word value="setpo"/> <word value="sets"/> <word value="setz"/> <word value="sgdt"/> <word value="shl"/> <word value="shld"/> <word value="shr"/> <word value="shrd"/> <word value="sidt"/> <word value="sldt"/> <word value="smsw"/> <word value="stc"/> <word value="std"/> <word value="sti"/> <word value="stos"/> <word value="stosb"/> <word value="stosd"/> <word value="stosw"/> <word value="str"/> <word value="sub"/> <word value="test"/> <word value="verr"/> <word value="verw"/> <word value="wait"/> <word value="wbinvd"/> <word value="wrmsr"/> <word value="xadd"/> <word value="xchg"/> <word value="xlat"/> <word value="xlatb"/> <word value="xor"/> </Keywords> <Keywords Name="Commands SSE2" Attributes="$00008000,$80000005;False:True." Style=""> <word value="ADDPD"/> <word value="ADDSD"/> <word value="ANDPD"/> <word value="ANDNPD"/> <word value="CLFLUSH"/> <word value="CMPPD"/> <word value="CMPSD"/> <word value="COMISD"/> <word value="CVTDQ2PD"/> <word value="CVTDQ2PS"/> <word value="CVTPD2DQ"/> <word value="CVTPD2PI"/> <word value="CVTPD2PS"/> <word value="CVTSD2SI"/> <word value="CVTSD2SS"/> <word value="CVTSI2SD"/> <word value="CVTSS2SD"/> <word value="CVTTPD2P"/> <word value="CVTTPD2DQ"/> <word value="CVTTPS2DQ"/> <word value="CVTTSD2SI"/> <word value="DIVPD"/> <word value="DIVSD"/> <word value="LFENCE"/> <word value="MASKMOVDQU"/> <word value="MAXPD"/> <word value="MAXSD"/> <word value="MFENCE"/> <word value="MINPD"/> <word value="MINSP"/> <word value="MOVAPD"/> <word value="MOVD"/> <word value="MOVDQA"/> <word value="MOVDQU"/> <word value="MOVDQ2Q"/> <word value="MOVHPD"/> <word value="MOVLPD"/> <word value="MOVMSKPD"/> <word value="MOVNTDQ"/> <word value="MOVNTI"/> <word value="MOVNTPD"/> <word value="MOVQ"/> <word value="MOVQ2DQ"/> <word value="MOVSD"/> <word value="MOVUPD"/> <word value="MULPD"/> <word value="MULSD"/> <word value="ORPD"/> <word value="PACKSSWB"/> <word value="PACKSSDW"/> <word value="PACKUSWB"/> <word value="PADDB"/> <word value="PADDW"/> <word value="PADDD"/> <word value="PADDQ"/> <word value="PADDSB"/> <word value="PADDSW"/> <word value="PADDUSB"/> <word value="PADDUSW"/> <word value="PAND"/> <word value="PANDN"/> <word value="PAUSE"/> <word value="PAVGB"/> <word value="PAVGW"/> <word value="PCMPEQB"/> <word value="PCMPEQW"/> <word value="PCMPEQD"/> <word value="PCMPGTB"/> <word value="PCMPGTW"/> <word value="PCMPGTD"/> <word value="PEXTRW"/> <word value="PINSRW"/> <word value="PMADDWD"/> <word value="PMAXSW"/> <word value="PMAXUB"/> <word value="PMINSW"/> <word value="PMINUB"/> <word value="PMOVMSKB"/> <word value="PMULHUW"/> <word value="PMULHW"/> <word value="PMULLW"/> <word value="PMULUDQ"/> <word value="POR"/> <word value="PSADBW"/> <word value="PSHUFD"/> <word value="PSHUFHW"/> <word value="PSHUFLW"/> <word value="PSLLDQ"/> <word value="PSLLW"/> <word value="PSLLD"/> <word value="PSLLQ"/> <word value="PSRAW"/> <word value="PSRAD"/> <word value="PSRLDQ"/> <word value="PSRLW"/> <word value="PSRLD"/> <word value="PSRLQ"/> <word value="PSUBB"/> <word value="PSUBW"/> <word value="PSUBD"/> <word value="PSUBQ"/> <word value="PSUBSB"/> <word value="PSUBSW"/> <word value="PSUBUSB"/> <word value="PSUBUSW"/> <word value="PUNPCKHBW"/> <word value="PUNPCKHWD"/> <word value="PUNPCKHDQ"/> <word value="PUNPCKHQDQ"/> <word value="PUNPCKLBW"/> <word value="PUNPCKLWD"/> <word value="PUNPCKLDQ"/> <word value="PUNPCKLQDQ"/> <word value="PXOR"/> <word value="SHUFPD"/> <word value="SQRTPD"/> <word value="SQRTSD"/> <word value="SUBPD"/> <word value="SUBSD"/> <word value="UCOMISD"/> <word value="UNPCKHPD"/> <word value="UNPCKLPD"/> <word value="XORDP"/> </Keywords> <Keywords Name="Registers" Attributes="$00FF0080,$80000005;False:True." Style=""> <word value="ah"/> <word value="al"/> <word value="ax"/> <word value="bh"/> <word value="bl"/> <word value="bp"/> <word value="bx"/> <word value="ch"/> <word value="cl"/> <word value="cs"/> <word value="cx"/> <word value="dh"/> <word value="di"/> <word value="dl"/> <word value="ds"/> <word value="dx"/> <word value="eax"/> <word value="ebx"/> <word value="ecx"/> <word value="edi"/> <word value="edx"/> <word value="es"/> <word value="esi"/> <word value="ip"/> <word value="si"/> <word value="sp"/> </Keywords> <Keywords Name="Registers x86_64" Attributes="$00FF0080,$80000005;False:True." Style=""> <word value="rax"/> <word value="rbx"/> <word value="rcx"/> <word value="rdx"/> <word value="rbp"/> <word value="rsp"/> <word value="rsi"/> <word value="rdi"/> <word value="r8"/> <word value="r9"/> <word value="r10"/> <word value="r11"/> <word value="r12"/> <word value="r13"/> <word value="r14"/> <word value="r15"/> </Keywords> <Keywords Name="Key Words" Attributes="$00808000,$80000005;False:True." Style=""> <word value="align"/> <word value="assume"/> <word value="at"/> <word value="b"/> <word value="byte"/> <word value="comm"/> <word value="comment"/> <word value="common"/> <word value="compact"/> <word value="d"/> <word value="db"/> <word value="dd"/> <word value="df"/> <word value="dosseg"/> <word value="dt"/> <word value="dup"/> <word value="dw"/> <word value="dword"/> <word value="else"/> <word value="end"/> <word value="endif"/> <word value="endm"/> <word value="endp"/> <word value="ends"/> <word value="eq"/> <word value="equ"/> <word value="even"/> <word value="exitm"/> <word value="extrn"/> <word value="far"/> <word value="fq"/> <word value="ge"/> <word value="group"/> <word value="h"/> <word value="high"/> <word value="huge"/> <word value="ifb"/> <word value="ifdef"/> <word value="ifidn"/> <word value="ifnb"/> <word value="include"/> <word value="includelib"/> <word value="irp"/> <word value="irpc"/> <word value="label"/> <word value="large"/> <word value="le"/> <word value="length"/> <word value="local"/> <word value="low"/> <word value="lt"/> <word value="macro"/> <word value="mask"/> <word value="medium"/> <word value="memory"/> <word value="name"/> <word value="near"/> <word value="o"/> <word value="offset"/> <word value="org"/> <word value="page"/> <word value="para"/> <word value="proc"/> <word value="public"/> <word value="purge"/> <word value="q"/> <word value="record"/> <word value="rept"/> <word value="seg"/> <word value="segment"/> <word value="short"/> <word value="size"/> <word value="small"/> <word value="stack"/> <word value="struc"/> <word value="subttl"/> <word value="this"/> <word value="tiny"/> <word value="title"/> <word value="type"/> <word value="use16"/> <word value="use32"/> <word value="width"/> <word value="word"/> </Keywords> <Keywords Name="Segments" Attributes="$00FF00FF,$80000005;False:True.B" Style=""> <word value="dataseg"/> <word value="codeseg"/> </Keywords> <Set Name="Numbers" Attributes="$00000080,$80000005;False:True." Style="" Symbols="0123456789"/> <Range Name="Remarks" Attributes="$00800000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=";" OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnEol="True"/> </Range> <Range Name="String" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="'" OpenSymbolPartOfTerm="Right" CloseSymbol="'" CloseSymbolPartOfTerm="False"/> </Range> <Range Name="." Attributes="$00FF0000,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="." OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnTerm="True"/> </Range> <Range Name="@" Attributes="$000080FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol="@" OpenSymbolPartOfTerm="Right" CloseSymbolPartOfTerm="False" CloseOnTerm="True"/> </Range> <Range Name="String" Attributes="$000000FF,$80000005;False:True." Style="" Delimiters="!"#$%&'()*+,-./:;<=>?@[\]^`{|}~"> <Rule OpenSymbol=""" OpenSymbolPartOfTerm="Right" CloseSymbol=""" CloseSymbolPartOfTerm="False"/> </Range> </Range> </UniHighlighter> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/fpmake.pp��������������������������������������������������������������������������0000755�0001750�0000144�00000023767�15104114162�014413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program fpmake; {$coperators on} {$mode objfpc}{$H+} uses fpmkunit, SysUtils, Classes; const AllMyUnixOSes = AllUnixOSes - [Darwin, Haiku]; const CommonComponents: array[1..10] of String = ( 'components\chsdet\chsdet.lpk', 'components\multithreadprocs\multithreadprocslaz.lpk', 'components\kascrypt\kascrypt.lpk', 'components\doublecmd\doublecmd_common.lpk', 'components\Image32\Image32.lpk', 'components\KASToolBar\kascomp.lpk', 'components\viewer\viewerpackage.lpk', 'components\gifanim\pkg_gifanim.lpk', 'components\synunihighlighter\synuni.lpk', 'components\virtualterminal\virtualterminal.lpk' ); CommonPlugins: array[1..9] of String = ( 'plugins/wcx/base64/src/base64wcx.lpi', 'plugins/wcx/deb/src/deb.lpi', 'plugins/wcx/rpm/src/rpm.lpi', 'plugins/wcx/unrar/src/unrar.lpi', 'plugins/wcx/zip/src/Zip.lpi', 'plugins/wdx/rpm_wdx/src/rpm_wdx.lpi', 'plugins/wdx/deb_wdx/src/deb_wdx.lpi', 'plugins/wdx/audioinfo/src/AudioInfo.lpi', 'plugins/wfx/ftp/src/ftp.lpi' ); UnixPlugins: array[1..4] of String = ( 'plugins/wcx/cpio/src/cpio.lpi', 'plugins/wfx/samba/src/samba.lpi', 'plugins/wlx/WlxMplayer/src/wlxMplayer.lpi', 'plugins/dsx/DSXLocate/src/DSXLocate.lpi' ); HaikuPlugins: array[1..1] of String = ( 'plugins/wcx/cpio/src/cpio.lpi' ); DarwinPlugins: array[1..2] of String = ( 'plugins/wcx/cpio/src/cpio.lpi', 'plugins/wlx/MacPreview/src/MacPreview.lpi' ); WindowsPlugins: array[1..4] of String = ( 'plugins\wcx\sevenzip\src\SevenZipWcx.lpi', 'plugins\wlx\richview\src\richview.lpi', 'plugins\wlx\preview\src\preview.lpi', 'plugins\wlx\wmp\src\wmp.lpi' ); DeleteFiles: array[1..6] of String = ( 'doublecmd', 'doublecmd.exe', 'doublecmd.dbg', 'doublecmd.zdli', 'src\doublecmd.res', 'tools\extractdwrflnfo' ); var FLazBuild: String = 'lazbuild'; type { TDCDefaults } TDCDefaults = class(TFPCDefaults) private FWS: String; public procedure CompilerDefaults; override; property WS: String read FWS write FWS; end; { TDCBuildEngine } TDCBuildEngine = class(TBuildEngine) end; { TDCInstaller } TDCInstaller = class(TCustomInstaller) private FLazBuildParams: String; private procedure CleanDirectory(const Directory: String); procedure CleanComponents; procedure BuildComponents; procedure CleanPlugins; procedure BuildPlugins; procedure Clean; overload; procedure Build; function ReadOutputDirectory(const FileName: String): String; procedure CleanOutputDirectory(const FileName: String); protected procedure Clean(AllTargets: boolean); override; public constructor Create(AOwner : TComponent); override; end; { TDCDefaults } procedure TDCDefaults.CompilerDefaults; var AValue: String; begin if Defaults.OS = osNone then begin AValue:= GetEnvironmentVariable('OS_TARGET'); if Length(AValue) > 0 then Defaults.OS:= StringToOS(AValue); end; if Defaults.CPU = cpuNone then begin AValue:= GetEnvironmentVariable('CPU_TARGET'); if Length(AValue) > 0 then Defaults.CPU:= StringToCPU(AValue); end; AValue:= GetEnvironmentVariable('LCL_PLATFORM'); if Length(AValue) > 0 then (Defaults as TDCDefaults).FWS:= AValue; inherited CompilerDefaults; end; procedure TDCInstaller.BuildComponents; var I: Integer; Args : String; begin for I:= Low(CommonComponents) to High(CommonComponents) do begin Args:= SetDirSeparators(CommonComponents[I]) + FLazBuildParams; BuildEngine.ExecuteCommand(FLazBuild, Args); end; end; procedure TDCInstaller.CleanPlugins; var I: Integer; begin for I:= Low(CommonPlugins) to High(CommonPlugins) do begin CleanOutputDirectory(CommonPlugins[I]); end; end; function TDCInstaller.ReadOutputDirectory(const FileName: String): String; var I: Integer; AFile: TStringList; begin try AFile:= TStringList.Create; try AFile.LoadFromFile(SetDirSeparators(FileName)); I:= Pos('UnitOutputDirectory Value', AFile.Text); if I = 0 then Exit; Result:= Copy(AFile.Text, I + 27, MaxInt); I:= Pos('"', Result); if I = 0 then Exit; Result:= ExtractFilePath(FileName) + Copy(Result, 1, I - 1); Result:= StringReplace(Result, '$(TargetOS)', OSToString(Defaults.OS), [rfReplaceAll, rfIgnoreCase]); Result:= StringReplace(Result, '$(TargetCPU)', CPUToString(Defaults.CPU), [rfReplaceAll, rfIgnoreCase]); Result:= SetDirSeparators(Result); finally AFile.Free; end; except Result:= EmptyStr; end; end; procedure TDCInstaller.CleanOutputDirectory(const FileName: String); begin CleanDirectory(ReadOutputDirectory(FileName)); end; procedure TDCInstaller.Clean(AllTargets: boolean); begin // Clean components CleanComponents; // Clean plugins CleanPlugins; // Clean Double Commander Clean; end; constructor TDCInstaller.Create(AOwner: TComponent); begin Defaults:= TDCDefaults.Create; Defaults.IgnoreInvalidOptions:= True; inherited Create(AOwner); end; procedure TDCInstaller.BuildPlugins; var I: Integer; begin for I:= Low(CommonPlugins) to High(CommonPlugins) do BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators(CommonPlugins[I]) + FLazBuildParams); if Defaults.OS in AllMyUnixOSes then begin for I:= Low(UnixPlugins) to High(UnixPlugins) do BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators(UnixPlugins[I]) + FLazBuildParams); end; if Defaults.OS = Haiku then begin for I:= Low(HaikuPlugins) to High(HaikuPlugins) do BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators(HaikuPlugins[I]) + FLazBuildParams); end; if Defaults.OS = Darwin then begin for I:= Low(DarwinPlugins) to High(DarwinPlugins) do BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators(DarwinPlugins[I]) + FLazBuildParams); end; if Defaults.OS in AllWindowsOSes then begin for I:= Low(WindowsPlugins) to High(WindowsPlugins) do BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators(WindowsPlugins[I]) + FLazBuildParams); end; end; procedure TDCInstaller.Clean; const OutputPath = 'units' + PathDelim; var I: Integer; AInfo : TSearchRec; begin // Clean output directories if FindFirst(OutputPath + AllFilesMask, faAnyFile - faHidden, AInfo) = 0 then repeat if ((AInfo.Attr and faDirectory) = faDirectory) and (AInfo.Name <> '.') and (AInfo.Name <> '..') then CleanDirectory(OutputPath + AInfo.Name); until FindNext(AInfo) <> 0; FindClose(AInfo); TDCBuildEngine(BuildEngine).SysDeleteTree('tools' + PathDelim + 'lib'); // Clean files for I:= Low(DeleteFiles) to High(DeleteFiles) do TDCBuildEngine(BuildEngine).SysDeleteFile(SetDirSeparators(DeleteFiles[I])); // Clean debug directory if Defaults.OS = Darwin then begin TDCBuildEngine(BuildEngine).SysDeleteTree('doublecmd.dSYM'); end; // Clean fpmake output files TDCBuildEngine(BuildEngine).SysDeleteFile('fpmake.o'); end; procedure TDCInstaller.Build; begin // Build components BuildComponents; // Build plugins BuildPlugins; // Set default build mode if Pos('--bm=', FLazBuildParams) = 0 then FLazBuildParams+= ' --bm=release'; // Build Double Commander BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators('src/doublecmd.lpi') + FLazBuildParams); if Pos('--bm=release', FLazBuildParams) > 0 then begin // Build Dwarf LineInfo Extractor BuildEngine.ExecuteCommand(FLazBuild, SetDirSeparators('tools/extractdwrflnfo.lpi')); // Extract debug line info if Defaults.OS = Darwin then begin BuildEngine.CmdRenameFile('doublecmd.dSYM/Contents/Resources/DWARF/doublecmd', 'doublecmd.dbg'); end; BuildEngine.ExecuteCommand(SetDirSeparators('tools/extractdwrflnfo'), 'doublecmd.dbg'); end; end; procedure TDCInstaller.CleanDirectory(const Directory: String); var List: TStrings; begin List:= TStringList.Create; try SearchFiles(IncludeTrailingPathDelimiter(Directory) + AllFilesMask, EmptyStr, False, List); BuildEngine.CmdDeleteFiles(List); finally List.Free; end; end; procedure TDCInstaller.CleanComponents; var I: Integer; begin for I:= Low(CommonComponents) to High(CommonComponents) do begin CleanOutputDirectory(CommonComponents[I]); end; end; var I: Integer; var OptArg: String; BuildTarget: String; begin AddCustomFpmakeCommandlineOption('bm', 'Override the project build mode.'); AddCustomFpmakeCommandlineOption('ws', 'Override the project widgetset, e.g. gtk2 qt qt5 win32 cocoa.'); with Installer(TDCInstaller) as TDCInstaller do begin CreateBuildEngine; BuildTarget:= ParamStr(1); FLazBuildParams:= ' --os=' + OSToString(Defaults.OS); FLazBuildParams+= ' --cpu=' + CPUToString(Defaults.CPU); if BuildTarget = 'clean' then begin Clean(True); Exit; end; for I:= 0 to ParamCount do WriteLn(ParamStr(I)); OptArg:= GetCustomFpmakeCommandlineOptionValue('bm'); if Length(OptArg) > 0 then begin FLazBuildParams+= ' --bm=' + OptArg; end; OptArg:= GetCustomFpmakeCommandlineOptionValue('ws'); if Length(OptArg) > 0 then begin FLazBuildParams+= ' --ws=' + OptArg; end; if (Defaults.HaveOptions) then begin FLazBuildParams+= ' ' + TDCDefaults(Defaults).CmdLineOptions; end; if BuildEngine.Verbose then begin FLazBuildParams+= ' --verbose'; end; if (Pos('--ws', FLazBuildParams) = 0) and (Length((Defaults as TDCDefaults).WS) > 0) then FLazBuildParams+= ' --ws=' + (Defaults as TDCDefaults).WS; WriteLn(FLazBuildParams); if BuildTarget = 'components' then BuildComponents else if BuildTarget = 'plugins' then BuildPlugins else Build; end; end. ���������doublecmd-1.1.30/doublecmd.sh�����������������������������������������������������������������������0000755�0001750�0000144�00000000245�15104114162�015063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Use this script for execute portable version of Double Commander cd "`dirname "$0"`" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) ./doublecmd "$@" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.png����������������������������������������������������������������������0000644�0001750�0000144�00000007254�15104114162�015241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sRGB����bKGD������ pHYs�� �� ����tIME *3ⵆ��,IDATh͚i]Wuk7v<; v&'@ @)@  JTPժZJm?Tb(B8RD(i;c;qMws^ι}vlBik#�fо �U9Kp.M"aq;�A Ri ŗ\(p�2 {Sv-+Wזk j[C ˡ8?+.C{OM'#Kkn:ykNKz "JfDq5'~tK/rf˒�3uHfZllfQ[ojv:phypfj5?vz>8 E(\֚~?}~kS?PA%Ĝ`?ܛajh(m߯YbN9ofOs Ba`k3?N,ar=o̖Pӯ?o[װh'YgceF9^0^fˀ{Hq�t>5h63614$=lak7 v{7%j Q/3$׍BI%*|{ +Ս[#R_Xy/χ[sD?<k׮/I#=y=SҤ%Ԗ pVAbH~r(㵭:#U-$ G/"^K49E<6XU#peb/"2V.?&#z$b9G O@جWO2fia\)&B3@$ x (qd*M;n|I|<Ŕz/Sw@j֫[Jy߉@\"\Ro7l_6s]B. כ> chfMz-\{ncCMT/ "Y;N]r1DqG?MmM/(y/[? Q9꽷4R4: .&<RF>x?-]Lԗ_3S8UTܾ_ $$}9ب7>;{;R M#!$J[OafFCo=ZioZ] q �jVTfh͑U*H=N<UkW̠6<Mrnm \w.LNwq4~!&6n#^@ӔW})}fAS?d~2Ȃ u1ܨ{In|ѵ78?b,칓FW,;+r^ZÇ| ' #TS H1v5!6l`nⰨ`mgz0+# dIك)CH?Z?>7\u)>&&G8.2kF/?}y�8}7tU-Y o̓ԅAPM!j@\ԜTM0z\@),/1]h0Y|2Z$Xe.~ Gm.d`ygH[-4]1*8�'$c#dޯ\ej58U <^i @^9o S4* 4iLrqatEa0q /0@0<�Y&&I 4IN5?GEqeX/ϐW%s!yT?}682U,K/pNJ*R..~ `I$M$J)2?h jx ^zBy�a!H 0_9R<kej`nDxVpi > xњZ0<I�.@x|A.@aYZf]`A\K$;W8'+@qf цMd*%""Hΐ @(N;Mf_M|A"LEPa94M u2xşy) h<6 ٙnm&,ڪq@rVхY ~i-bsԷ߄n�QCξWP` H܆.H\fnyehJE \U<43QbV1 "1f 8 ,KJ'V\!SӹZ5D|Y]A}Bly-D7XUYqn%-#¸{k'A ~z;ԩ /:z>W ,ibY-Ly/Q?zԁ<J%;POL)|a@/@݊PߨAMH[Fg-DFTG!IԱ}!v%O=C3Q?\8YޏT $xҬA$-\Iŝ{rHTxlio ,~{ D#l|ೌݺSU@[.-@5Kq>#cc15}t*Yf y$A\Bf|h<K.fs+_b/ŌrDyGi9÷<xc;v8&"*.G8Eq~[_F]X ҹW5ogŜOSFۤI�qιc ffk23狦 q*B_0´<_d'EѪȵ\$O1}zk[Bp?|E%)q9~"=M_/aoPy3XoR~|?^BST9_l|. .ߔ' M\e=<Q:} <]x8s3$AѷZqmXZH!IYyǰgLnQ o�"cG9g`y-'' s8m%'4E3gi5e/<yϐdi,bN^7{:G\mƈJX:tpv^Gi©iǍ4"[?^dP?ͻ~fi*>i ÇqN+r.\8R�TЀ^Ywura>ξ|M7}>sԤff,y{ۇm�kჵFFt;;=a`wY Esy<< la˶?rZy뺝no=lˉ/}2UQkQzj@e�nylgtF6�4,1c9Gɳ \1g0~o|LJ>r'ߗl,VVAff޴*#n7VЙJL|nE0RMGo]߲vm9TED;%F'F]\sS,q4%ih.W]mĊ㰋tb:=;$<48`TzMVk>i%ʶ;(\ZiʷUz RE ‚r@ZT9wn_ "t����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.lpg����������������������������������������������������������������������0000644�0001750�0000144�00000002107�15104114162�015227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectGroup FileVersion="2"> <Targets> <Target FileName="components/chsdet/chsdet.lpk"/> <Target FileName="components/doublecmd/doublecmd_common.lpk"/> <Target FileName="components/multithreadprocs/multithreadprocslaz.lpk"/> <Target FileName="components/kascrypt/kascrypt.lpk"/> <Target FileName="components/gifanim/pkg_gifanim.lpk"/> <Target FileName="components/Image32/Image32.lpk"/> <Target FileName="components/KASToolBar/kascomp.lpk"/> <Target FileName="components/synunihighlighter/synuni.lpk"/> <Target FileName="components/viewer/viewerpackage.lpk"/> <Target FileName="components/virtualterminal/virtualterminal.lpk"/> <Target FileName="src/doublecmd.lpi"> <BuildModes> <Mode Name="Debug" Compile="True"/> <Mode Name="Debug + HeapTrc"/> <Mode Name="NoDebug Full Optimizations"/> <Mode Name="Release"/> <Mode Name="DarkWin"/> </BuildModes> </Target> </Targets> </ProjectGroup> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.help���������������������������������������������������������������������0000644�0001750�0000144�00000000002�15104114162�015365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ru������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/���������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�015302� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017077� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/Resources/��������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021051� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/Resources/doublecmd.icns������������������������������������0000644�0001750�0000144�00002006146�15104114162�023676� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������icns� fic12��zPNG  ��� IHDR���@���@���iq���sRGB����DeXIfMM�*����i��������������������������@�������@����FQB��IDATx[ yޙj/BIH J$pɥPeI #GW\6ee86sP'qRqLls(BV tNV\=={3;;;֩Tew24L#zXȽuikJՋ 笌/ZrZifiٜЖz�MIVI,z`tNG%TP2tO4quF|ޖNr�<?ъ˚ fgu~W/gU>\3�~CևsNͼYuɄY{'w] W/޽3%dZt: DQن'Տ(:@p �p"G- $IMoys{a1)�|A#Ճhv2`f^<#[�{F%EڵkW�W mѝuzf{4%ińDAc(Jv옐?ec>F2 P2%tZ""Z<BŘe JB+X ;tƒ8hL$d0(4W?m_kU'xּРш:[%,ˢF%6c)6vj9bL d: PY-y%`f_ q?hu֭1XqιiD*%xe }]2p/ߓ� �b\L95|6(KRsIx*Y~fiykq$'~Ѫ5._˺N&ck:la9!{wף2W]y)�w<5eɧ~Wꖭ-h-[l<uT6`ǎ׮] i 9 4̖Em*j.[AiscU5r/ˊ@Bdԥ:Vx&ݖe`d߾}e8@SS<0LT&դqf -Q.)9sT+*a(g& P{cRqzy#LjDI;xϟ?]58p8\x-kϭ'#`ncY+1Ox�UhKozKba1)XizK>5Q-d>+orn2hYݡr$N]c삝aw}Z�sC⭩kI0/WT1M?$'#2pTUNdrCU ++%:@OLJd]:%*�1G�z8WE~3آYnh3bZv6 @?D(A.'xRC;ćAMu㣨E닶\}{7$"YD A x|:6~/I7$>+29{OJwnʺ!5Gf} `5ƋȒ 7\<:=8_*'~�\2D ՚p]B� m#�Ghȱdz.!Wx߳OKc`v+(  C*PJ7$�2Ъupt\u*fd>!G|\#a`pAͱOE PCRcJKE*WUvcVآ�p ?!C$7=!H'L0S}j?�; OMeX\ͧ%Dd+Ƌ@1o0%^D~<iHv4_(c,{k y-_O@PTy:MXhk6()�)J% اaA I(46TM%Ih;mB]6x)[j91&{J9an,O �qhn} p]շ<#tN$ &2 )<f2Pw~ǁ₭bt+o{J�dɱo ׾Y QZ�.3bcS=$6&:S�W �IFz, 91f6(h x8,نXbVM�IlEO%E;�'<yD0¾Xw)TՆ>\u^d\�h:$x:c t-sMH3Fetlf O0 X&1<hhpp+�h͈wH"#5QLR�s+q2gbb5 GNJHvڭh0F2)h!ۤvC"T�!԰a�e,�~btlʮ�H[T^]J(c)An4�@a4D吉D=OUdCU,~B�[$ހjy? `j $p 4So> YX/@9Ф (zhO$f,%cJS > a&+]풅(a N=,-2zAHǏg/he )%F[3|Rt18jV8/)\iհItQo%<yqӒsŊ ų Us 37. 7t G�`]K�)9諉ÑtY1{:$lY7GBk6AfIB bY oianq󝒫kPRPQ;S $bI/3?&4o�GR[A( }+#tYc wǨD�TlE%r0 X Κ-pR71ez8* /l As;8WDw[6JĆ,J%$vq^0<Y:liympϽ@$OL*E}P. M$rAV$Cͼ 5`>hp>Bzb2v.e8P#2pr}c!oz1~c ēJJ*�3#*֋SFRu&|oʲyAZ;osCTqsB2}=/Ǘ;pijf E4#�fDW΋ۅ47+>4.OHOo:24y{ꋒ;uHJux ۂ8zU:_q3 �2XQ *ق)! q ;Zr]$1 [1c:7n""B?LaA;L4K 2 ЉĄS+O?)KW,�jr_YG.?szU,١8�HM#�Mw[sxz0,A5 uم-ȥ/te] F{yT֙y{H_s?xL}c-*d;cGlòZ%A$hn/uX:_Zܶhxd8IR?`h !mM])4Lu"~ȍʁ(V傅Rx =W @21&vNT(_OsI�Bshe7Th]d,-F0t&$ tW4PB/ $JNVi $rkcÈ$ ]kh44cǎ"/"_#Sy'�BXHm``8;�<Ξ={~'2RJ zGe`Ͽ|[8'䉬2x{bFTmꇒU fv_7tq$N8]XI}>Yy N*r,牼zzzu]wUG#_lЬum, w͞vI:"^9B*K^�C;Q=5�E^o.\- Sf^+H ёx{'e wF-f52` 􉅍\%qF*\, g5Fåq?r9ϟ-X,Kp Cx<1 w~ DӹԹԆVH\?ua<-AYxQTȳ} T@͇9)Y� iq؟\<9}cpG**%%kȽ*<yͣBһ@}}+M WJ?f!n,׍K%gvy+힜ht�R =77ͪhltMa!2shg{�A„.TRW7Kmmt 2�K$:33"5n}iHυJɰ}ފgI66>66߰u5Prno׹`hWS7;;;1̈́ٳl�i mY`w5+ȕnܞѼcRx&l2a0#}F93in=] 2g^km= :s4a�8s |lIA} Cj}.-h9%P?DB Mz?@4lH}$Ib,qI"ȷWVz`Oq^|.Pk+6sϼlqL#04L wXw:WB����IENDB`ic07��0LPNG  ��� IHDR���������>a���sRGB����DeXIfMM�*����i�������������������������������������Hw��/IDATx} ]UPCJR   8}C?[OE|j@mZQڧ>'A A! PCUj<_[nnUsV]u9g}ֿ{rS(0E) LQ`S(0E) LQ`S(0E) 5S5) ]/ëMe~IߕMxɸҙՇ 3Y{ 'eqe !3xbBW[bȸ\Yw1n ʤH-m]$ [3z3n$R@0?쭍."ݖ(DO<�%mgMJ'WeLz;rVf}8YڕOW!yQz,{0YS@5y~gTNw/ujxW^ʺĕr;).W@ѕzN<1}-|޾7A? �O/oKﺪd TbeH2!/H Ψ1J D%A_rPbE?w 3<^ {xƊ g|75=k2mVik.-;D-9i+ �Lo/Z~6}SdéLJ9FZ iių>% Ƨ%95\&mV LEzZ<4eG'7 tΘ?o<M�4}C}HGWM%W*-BXzg9k(+`Ocs]X�0L#W|^ V&ږaU ǛTnӊ 3*ϛ7dSIo5>ǧJU C*[Eb!Rȗ DlW_Cy^<"+)'>\x>?'Z϶}ʕG.2X~r"b �Ovg;JȗW𩷆R I$㾆w[PIT 3|?+p'!rMY``6^JGPf) '^iSlӞZp.ۍ�u{]Ʉ?>r e:Hce/N�h6Τ2t"I?sJI u<{.`L  �M0`2:?D:-I  \[#F0y K P(ęgҎμNH'no2y6iDSv]v\ա̭Xt+ >1ΤUŇn(9<x=ݹjV\ͩ a.=Of[LXQxN"PS4@UF~&ϩ/¡ZrJ_.^{}͕V?L gqIǣdw:Z%zR$ ?^2`x~~V0VB?ucq[U>nrQ}g� Sit2O%γ}f<$ 6M|x`#n'[o"z Ύ\y_W4g@$J5Ï^L5o2!ɾ^:)}^#%-~!pJ6jLi]NF'Pcq2sJsZ\mj@4 kӉD8 TMM| Gryw<`,+YHh{tzA:oק@*DU, G6 a03^GE:nR TQ\ -]52 _pX1$[do| oH]9d6lp]]]]0 1[W\+^#GG?H@�h|o2ga꽳ƳAGc1 neW]#K~-\{URfIQcū]{�08v EgIsd|b=Dp($AW%W ޓB<D}L@33WVy7IլYA`rwQr3<4@-ܲꢋ.]!Ӥ*$_U8L_jʌt> IIx阰&՚Ę~Xس!OMh ꅄLBr >Y%⁄cMKr'L͛;i@dW\:@UQ*i 5̖sQ29{ $J�MgpV*3|'#`p$u|XY.K M@%*ϲe PF9�p͞={($�LS|Y;-O`A&σ"gH?eJ3ޞMv*?s5.�P(txd0|O2s}wKCCa 0l`#39j>vA?OiZ2tK)#p#2-) Fp 3ЯG 6@h23wgY '$<;\dD<~+Hݚ rW9kI*t|sG �.]�FS_9C}M3_kށir_0:s%]x6�LCǜ�(̟S�:aD:5dG?/k/�{' 8i=k~od@ilfm8+2F~O�UNu �$Db� p/E}Rbȍ|YX5_% 2m7U~&2A5x103kg4+7~H30s�+#uÙN#s }F+.^0дRP\%ϴ8o*YA\0Xg&kyr�k\̀ &vp#n)6vnLpA�R'J?Gq>]Q~QMR CYH_$*策uAL_<ȫ wEO?&[̧yIB):GةbOǍ%,*ѼsOa쩋@scS=M3fIhBZ\hh $F9?);3k`HT gjwSɃe\ϟE٪rW* I-t3nXf[7K}s H~)S4*?3�Po+ّ@Ŝ␤D&}N-5\ .]H&*8_rwr(d BYDTJeL氣i:}1pg?}Lj͗4jc! 3- 90u3r'%p4n kaNpk?uIuSs ܵ!+ - �X�ju@HtJJ6Kpri|�}S AuE,Zn{RUJUe:岔=i]K$va³~x{ރk%pK�Vqp,>'M:�]!� ,qztF? L=|K-$6mL"L9oovI4 #TS.eojL_7~;�cO?%CyyWzY(բYe;?a1IԳcȜ\ȟ2ʌ�f=q � A0|`ߋ盟 N9eP3ijET~[H-c ƌb(1~?L(z/8{87ju]v9#Gi0"# `KzY ֥ q2jg՞`)9ߝ2I[VG Ϙ90<3znh'_Hr> :,F$M]#-O?.VHZZ2tX&: �m_+.=na أo<%z`~5W惪cټ.||U6#fÜW%�_jlQ_[#C{e7n=/b؈~;3p~,|aeͥ$*ױ)I6M0i?9߄y<oRW]-a#�p#q(t'%Qi`sC yd:mN{+Fb~|'aRh  >k09q >G�D9RRʞ?^2lG>./|%bz2&ˈ~'[ؒkؒ|@�ah{x?м03SbιaQN!ygD.M@wȞ Mr2B&<υ^zgwg5:AHCmA  U˿p�04p_@ <% 6ňmk w,QkDd%@x^~$V^�eo<Z~L8j05 [-gb;#�`Y@[�6 5O~//V ɏ8WаRc"ENdMÕ\AJ&/< Sewb* iU$Q3�ҧ�P=Gi_Gr;1=#Ϙ&߉cꃺ~oc6<?; mQ��FPa$A8W~s,-;}”!vډ^xp\A‹φ�>4:|Ak -vfۼI\RP'8��J,<v1Џv?NNխPWpU{1_1 YR�? i 9\d|#XO�&#"tQhZ% O#vA˰4Ĭ1i6V3FpS#xYT2i2X^H:~۞jMÇNd>H1i�@T(j ~S%0)C@V�k 3HM%Fl*0Fi:o?'/qǢhڠ Fy4�� ]۟¬[Dũ!~!=0nHЂźL%s|8'fEUwMZt?v�o^{mgvWܓ �̠J�WCx`14b)a 0oZZ�v XsX+u0ޤU̞מ$fML<Dߔyc�D;DŽK:(B!ŁYMC.@lJo;ӟbH�z9jy3$N'(vJ3#I�6%NC5 ,[ ztj\`̌[дWS�&b C0QY-bROOL2^GZO}Ōb#3̟#ݰ5p@sc~HܪŪMZLI@M;=Z#PgR6*POU Y0?ӥ#y1"pYX,VUo\΅1�q� [A͐du�J,\$}Vƹ(J൚6sDO7�OL&b>%@&T 2cPS ayi d#a_gb5%a;0!mƩ e[x0ȹ:`ny7�Vq�ِI3Ր I-P*hlڛ'?]]Ao{%\k֊- ThQC3lLZP_+(dXˡpA&9�Abv& L au9lR0"͠f- \5Q,ca,~i~!x�!Dj3H<Z�c*8MQȃr� I70A&G$ d-{}ZQaڎ!d΃i_XAcM# '`{}!Yvx|#/=PAP6(Xܤ$Mjj4rI1(c\`EDS1ѻH9jY'ZJSJe$zw� cR6'| 7iFݧB*v@P.<"`!YW9H cs� ̘ E %ďy5>'d6a YdRĬa'%�,ȶZ9(eܡZ ~3r\Ŝ3uwȣ�X�!lX"~FU@<|PPU)N$h\"�9; Y+e7ΚQO '54?w `+�~/bh6,\p;dڴ<w �:4NPȷ$;}0$VY5 "թ㐋gHj cL~S:9aAnzIKb*EܲU,3�Ez|r(Fâ-Ʈqhg@TR#QL-p`qXC00r+.+3n�(/U (%O8�>[y �BQ$~DJqtEqF"3!3Za Fg7d-R #f^f`ez/#^gTTͬd<:Mi2JQ`Bڋİ{9O3rp/>NmkP磱]ӈ0U\@`y'�LS01�ÖBe0zо_I;3|[cıdv,v[q{ԬN+uJ+G˳f o?)!C<l'qq ,+c�P>�x03$ԩWR[ƅ⇒^Fˢ mէ}( C1k赟$HHڥR@7CCȺ˯op5٤c�pVPv ӰO@Գs/mXX;R8gg6Ɍ7U5>0̜ULJ!;�~(<sdz[GxT[J~#X>�D.;�g[$#:.c'KvXg/sh"%3fBGکcRq?J 6 ;ry[Je+dfyP^`21�Jz"}WJd!5Dd[2Y/rZo"qu[�=�#$ [}?l9.?0#734agӵ`2pv #8`e+G%uY0l㩇;FBQbj~HǰO.ƿUJ5Q#4T]On.[>g~h]13otqHqD@UY!8>YF$hWc� ,0|~`zg>eLi 2烟6a>BTi7$6z<P*j/{wllaøquh .__$:7$k ˉ{8@Ud.�mz6M.E@82c."d>vkCJ{ rXCdÿ?"9�$ �xL(xI1'y䶺s/J@@>cA@L;K%Ϥzu` K3*FihEz 48cgo� V ? ^Xvϔh=ӳO/n2)847VFexl`3tn}TƵ\]E];$ɭ?# M{71L'V➅GuYP2G/E+v&^O`͏[)QL|3�Z?d3%Awwb|k�S'ćx:�`f8/ L+Z\e:~(Yu%SĤیy%8oؘ<qwGL\EfY]O>*[G!i%54ei]1G ;<=y9cdcIDuP&�жZ�� 0> ΞsV췾AgJ(mh=zP~C c@I25qK?-u&f_Th9y{ޝ;@Z(ô9b>x6H9q v0&@ e|�3K[~ O1!\mR25{5ʢ?{:${9X v`2D>hʊ2&�h� hWʬu/~&}/7D) N%8m< 9�H`؇ \&5E f4x$~k_#V3{􇖏IdR>< 6; uJu9Fc/Sp7SZi{Y9i߾M_AKkd#/ lAerQPP gC)&P0w>7>F-EВ0R{i 3N ~+c1$Hj0!nHKw~UD568(}zpiρk`b'~ fb󣅳ʙP1�ҋWkۘIl�֊.d"dhBL7ɱݏcJ>Vig;>/q VkHS@9g߀&ZiuTs!,h?mF–:E$jzZ,Qs bGLQNUh)~vqcyJ~xX v7Uhn";_]_U%jd]_&mYv/h-bV xfq >R"k#Dd;*KbLm$!_5vm봷*9HIM5:Olr G QT ɝS)M:=%s4GG|RS1.4)P°!~�xwkmMh7a)y( CS79DF'@eCX1^0N﹂6 [#$oͥC|FwDcЯ pa\_k 4*_]lO�b>�@o߾>M=D9.;ng-:C6X+'ʙ 6tlyPciyeB'g�t%wb,N�h9Ěߵuōifn+/Ẏ6JkEǃiSKN!"vӲoS< }x;~./HBl�PrNsGd%#ȡnxNѿJ]K0ң6|Լ3|;eaAl'ʎOD^]hJtFgGǏ%~I'SӔikkEF/='~rl@ kAp!GJ;%$p~[9sß-0"G8H�$#wرc׆ Vp*Ǚ2b'H~*O>$~VWZ+,Ĩ9qTR3N$4W>=QNwKIBg"Ǭ,%Fi.6m<{h{^ЎJnn M1:Z= K1;:|Y5K|`=%ā<5s+5$ΐ4HbN38AKsʼ݀/ @2~ z,Qvtty{suss J%E[ȠxSSӊR)dj;՚=fL<ټN ֓:wz9*y;ٜɣi\fE5J9{[=u3Mʑ HMV0ZR`Zup /< UV] xXculٛG [$O?*GzOvJy>?+N~?՜Q0qq#} 2<8=M ܰcsrH;>u1-aE ټynݺ'징ʡ+A]jz:眫b(:23.!Y'[KCIohnS˾  ȋf&Ƒwgpþw^�{~4yx؛ZI`V]m%`oL=w4}:% *rkCZnn~k�a AzN�įSݲe˿D.sR> g{F;Ko`~N !|ULZAD.Ǥ_MǓ'qm']cc>ӧcJ}-w#BaG(<>扗v}EtG�xlJpۮi. q/IeAu]>,ZztL3\6/v-[f1 >;q�VL^H"MzVrsq -%-TR㘢a ȊE iGiW�| �* +ݕ#;v?:^Z/BBxȱ٨u3ٲI^6o9.\G�iVV.$ jm`@wiu۪&rEΎtqW#-/Xʅ*I{#lqАmQ0J�}m$]w�3 Ly@CC ۙǶs/zJؕ �{B?<~sJ._꓌i3c6ل_!�41Z`΃~v̿GA@ƳWV`<$l= ^lǪ`A&$�(F#C;k{okͧgl16V `�sm[(Ȥ<#(0~� b`㼻om:4?xF�P|?V�0:fL{lI߱}nLb�P[ַ0k_=pKݟL�aNÒiun9+ #ru&%&!�xsh|Odߣg{oxWUJ0Ƣ[zq_Ӽ.WS+5ю�,Z}~,H.>eg<_RKw>z '9OhQfWe_ܰl5 .NB*x\Pvpf:!? ဗtzR>\X& :_ټM=sq ׇ XїXq x H|.z}ف@XK}tlVl <2|Y##1^J.嵿qތ՟sn;|d L#;Yx(:12C<%%Ճ0cihת҈g뱞 P͓\~4(M[P;rybO{{yOƳ{Kt߉#Gڐk9{d:;zf'+ �$A PH(sЏ\W}%UUUPmv{CrA{uCA6y5g~;mqD= Ŗ|(``ӡOgx*͸"tx"5.2 fL׆+W܍H 4xdAÀWم׼Ks \͵aa:E;̄�=?;7~mRv3φ<&;^3IX{];PlدP(0E) LQ`S(0E) LQ`SѶ����IENDB`ic13��ɉPNG  ��� IHDR���������\rf���sRGB����DeXIfMM�*����i�������������������������������������gI��@�IDATx}dGqvMڼ{9KӝI,$@ DlDlmcl,!@!+Iw;]{w'Wgv6̆{sO$61b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @} O5&j&s G+CO0}-3g lFHQLZx{=VvP޵A؃{_B.ԥY _flρ٢s4Jĩm+м/\E+.q/Y_J#94%.i-mh ݕq)S;d^024-Mڟښm_S,.j܂DnaK>((t$ Z|K1oOR,XH<dX`4"%^D&qi~K_($74E(:Xʀ]~-S̋LhuN 3{xJH!8J Z#a2:֘|Lh!0/22OX1E@;jT`bW+ȑ'H$sL D&SLt_V=ɆC  K߰sE|Y +"&t? ;:WLs@:Tڦw_(7{OZ\^̞ܐ:0t\*):҅B#[2ș'HDKzJt=:en)ϤHrNJIX^[T| zZAT)=ҡ gt]jm9k]D DFpR?̰,P ُÄYspg\>9\H 54n4>y {^Jf̔U>&|88$g ,C5fO�/j#ZHY̚AujRL g JH%@bj2lq/H_ :)[JSQW&rW Tʚ3y]tgC(ʺ:J糖K]VNTe`Vb)RLI1dZ2 CO7>g-oo `VFSiYkc3˚͵Ӷ'ǘ_{җ'uLz.nl+椘IPsù5؍! "O6RY)`*iT?"K' (W:4|Fk:o |V(n6 \MC#VW^ś풹aVNYV)ȃ# Le0}mXpCK3V_DEQhL%O_{gI/dABVy}i0.CCqUd|bg_VSJ[fV `ga%bA?|B\.tcJ]kBX dhClyy]`·YTy9Yoz<ɾiueeFyŻt$$ҥI)44J_K۞w{W&s\{-qn3#fKEG?uҡCW-Y֊K%!JJyh`x_&}lsam-ǹ(>' (uRON p>|\, qtWp_z<YQڣ<ՃDLĪM%׷` wn37l%T*}fffJvҶ'k=9vk[CF`RiUhc儅>]6CRRZ\ZQ9+B uњ}Kukt(/f� zxSdR J%+՟?M"2A38jmV欟oNL]]r(" Ru81Q%0M3<O)Oi-foh.g�ajX(}|q>ah΅}\iQ~`s0 fQ�X{ԭ!(څY (T+E#$(l O$yݝW}Ǭ7Y% t0?wikJ HHǪ4`0|b G f"<Җʮfa(̂Y}#@TO)D4c (뱚paO,m.ro; ̂F@,g (-Ǫ?O'"1i Ϝ_-3T>x|K{Ss?;�Ly.t-kz~VK^q[F/#9D`.zϵ{w 4 K!0!5TGO8EWz7BIi f~?;o_$Co1  ؁j>|Ҳ~ŭnCs2x( Q3Lb�?ƃם<t|j3<nf-=Kg<+魷 )2f mG?xދ:~)9;�bppIPޞ}tm3 0pUC総v%l- Ljysa,[�}/?+m* Nɦ}g 0ws+;[3t~TmM cQ7!@22P mN5Rvm�hg{eϻoN`0f�b# slN:pnnUz�ΔapW;|`i0(I!P![PJ W\4-J~Hm3_;?[;@q:w&'e>{P,�>mVOP1Y`V3"H?1:PA É. @J 6W; 2-ZԐ:e.~me�cL` ʫ@� c �4?F 5AL�UJīHF8}?88xk y4;GԍkI`h_5ל/7w5W~2xuW�:0e sԔd4Ֆ 8MIp# XmM>#sԏ4'~4"q|oahs8_y'wHVmo�;ʺ|UkuiD;9P|7Xiq nhU#@ bs@l!Nrwkc)l%f ~ritYdcBiy1#|Dט6^|lϽ󔶷.CzBfPaҟs0t$~Q ~8aaGp3!l76eiH ?;S!‰>aV. !0rv8斏.Nf`SKcֲlgğx_7XEqW_8#@xt_A.$nkQ^+ 3 }t=_9fJp80a>L3U%"tzFsEbJTC"8W+(W {Rfit7P<:lOgjLB#;7!i Xy^pSvAf,RLzơ7<nAqD6Ml^͍ X2�J=408/ JahP}z:#%{ : .) @Hғ�0VƠĎ0 !AR@.02Zl1ב,4KiKQU,.Oy"¸0K .1a_?eŹtZ/GiOP R2.0 ܾAJy>P>^J _OgqtniL@y\s|p=$ɴIҲx.[{ δ -jj$fՄ׈}bˍ_zK< QaSs3K�2‡> N=W/fpQ#E'N߻Kvn[6ڿGݨ!/t c)L62�/f a#bj+͌@D-p1rl|2C[ Q2# C',Br,X{>W+i|i�+sa]y8@gҞ}sW^}Flv(G^ /ҥKGh4(m]ZTdзIt=[e G52�:>1"c 7l(m7 ~ �FlxQWDxɞ03 ۉ$𒢎|͘\CqBYDY~92oqҼ`1NJp័7o^ .x"ȓ`H0Fd8w]g^s5?_̀0U<<}6=$[6> 9,8˧!WJ%(IDn"6Y"R+΅x=a"Ɛ@k+Ǘje ŇqnchYmM}yeyqlY:|Zxc:ZwY[>X%+9_VYrzi]T"]uU=iz,L}k/y{#H4#Qa::چP 膜O-[2�Ra |mji_VV>r۳S=t6 v#HK. <) KF2H F?<%O !Rf|o3?(@�@$z2fWy~3d9%Ku4 \aOP^xS<Dt ǧز#:u{ݧ tL_VeLSOC<w©g3"2�&0yHrT<BAH63"[4 6f+՛3hH (9&ޡ7gu=aY<|?�g&A%YHedW+^( !~D+fY&czzz~pwbQP{ԚŸɟ?y~?^$Ё\|\x9KuI2b߾=HFf;&@ұdm$ˈZ[I&L 9"j#<#LUc%? E$e3#rƫ_'+<['Q\o7P hu]+*)[|-z,~R @b/lt43ڸA,.x,9"9y]HWE4ilrIA` `ry�#fs7j݋_>h=?)) ,f!l)7-]./{p2+^[ J?C8vvL=$�_|Wm!כ)I iY\4Y<]#.90*ҕf iJxF0 !'4FWx)֛O;pCvoz}\g=W;:L2^"^wun6vOL-��%"BL4Ӵp,񌀺0S2ÐCcḻa.nK CHC~s7{qa*#1>ʽl-g,S^e%ϒLsAO%P ;#2T0&P<S/iooff]#J ?| C݉Z4d,MO. #@Zbqz0T!`T$~7ۓHil>tz+e91Z{3XJ� իW_\_C' ԙZ3�6@[O]k_1'&}WwC|BI&R&%S %Pg߶ u(uR>M|pfvw?eRd+`3O:7n܋njj�]vr,eoAV2>K?KeOAi%�@X*<Jd<G`L+"e93H'Tj>E.:a95oR_<~ѐ6Z[[_qk�6y{b�l=DK.9[8Bt,8_oFɃ ADbď]$~kF!or}c_go|4k d|t9ף 1PՊ V_vze?l$ݦ(\\i{8Ҁw � ~�H:I pzI6eg7Wt/ߋghj9/T:Y&4x,_|246r1S[K` jsXv4~:(j'$\wI 'o~E;J�q1*V&@̀2/ @GQX�N}:_ @ROsnYqy:mKetTPՒJ3 {,!>J8$y?']/|ϻ��I�xrPACNq2ʈRmq'Cx=MoӷʬX*܊3= l�:evq;kH @ur|d�:ȹ'͇3*T`9_%o1jUs$RNw466^p۸�9W\t͇pg_%#hjjZԧ>uoSړZ0�64llNhڦ~|O]-'DX&( 2L�:ژa�؟2zG,_W/wE9bRAn2L&Ӂ33EFՔ@K�kx3\Nssm2 yUҼx<mNфz�7eAAzB&, K;#9l7;?~L@?Ñkx�2SNaj�X67̇Ne%2Cd]v$1__Rln?8"�{!mT>9SI�2�#5?&~4}E FifD 54XXQK0m^~' GE\,t?[ Y`d3`d}QG8ʙ!;O;eDڪд/`+P-YZ)p+J%@M@@"5~5vRx#YgҲdgϜN�".ֱBPF@HfzȎ8߽po󮔧v{ aDZiWkOeT*?30ɔk�ظHJ�SYVHLI+n#�O�lu :Y$~;!K_s w}�7fz3$]0>t3CwfYX5i;`m٧̮%`# �P3GA t!H(C&�D 9b [ h?d�Ft q{nF<Q9W#ʰJ6 3w->-@nz }K@oɣ)m+3WWW˶g1{6ڬ3]AFxW=YrHR<I9m>AW~tےafՌ 0 㫹hEpժ>H�`�GԺ9ˁ6ۄ9*8lK # L"6yGgtGN?/Xrޅr5(F"jDba#KWoia4,<6a$fN*A{Snj�Bn4q @ǚur[?(v.;*(8[rP"8˟dtk_`įG{9C2#Nk4`ep3҄~t#UcuLKz}%}t} *#q}G^ *΁ H7Kr^f4>`A>{3I dd*í} Pi\R._'1g_olnaVFmeOTw,],5DXW8؟=y'{"itO?~SYUv'eBkg,pHߞ]_tL}{0Ylo @5#{m̉6ﴲ;P~= J?N3-Zҏ?21aq̔n/ QÇ -\TKhe[7P纻99|�~@We[D2CrD;>tiXD/+p3EˤaB(xbtv 9urݱMv:rga4l$<EiЌѤO7uWz;e՝Dҏ7xqNb?z{o>ٵSo;&ptnpFSƀYH;~t._ŋ?Mw1f�ll"L%D!蒢Oqv` 6iX\Z]I5EKUR>03/;>k*=u%`?�'U|\"9ChN72ՉAq_�ƲWn=V=[٭_.@XQU' ` ͤ3"97) 2ZZ0a mH'S RrLOw(v3nE^n(7?,{CI[Ǯׂͣ+i2ON5+Ln9M>)g<1V蚵r3tX;y ^Y/g: #0fjyJ.%эFK3=$v,?Q~vڶ&W? .l gM-$Ԃ k1>j8nn}G=�hi,@L$8I7I"Q3L ụv|~Y|eiy`3.xk8%eG+!Z"\k?O!N`d5:lhljnPO&E2>m9ލ^Ex>-0Ɓ ~ȓ4D.g+sY]q`P�o{B`t~�)7>KV. L$xC&: u!$JN܈T2�FI@ygݷȡ-X",ycXM"l$$a3Pw")"  ]U.@?~TBC[KK�lW({c2qZ3~# [)Ao"Otl۽KsiZt5n\0 CWc6<5Ø oͤ񙉹"$RD}6��2�H 7�(<$ q,OdϯUϹ T2k>4ח'Mr'Q8) ]6 p]s" !Lp!MrlƆ7,p—_I|c}5eVg,-+xRGŵ_/}<x@ph3t3;/xe}��GBLÅq7_LwHrVv2ή~Ӑ&QM5]t >dp OV)ѻ5̣ٱ6`�ȓz2AM_;م{W Qk3ͷc/z<֕D6;@p s׷7:f҈mݟ`Mzҏ˧*??q[YJQQhiRxMyaߩ@syLwM,VFL=-?4/ HecWbHOmT3* n D�u6EZ#~艞IMA(!VҀ8| ^,k߫5N TCH#p3/}. jrHh& PTK!4=0-A&ǯ[3 ,*GJ20,=*UQ"!/B&1�fuIFaqj«0PƢU3 Z_ąOxqP(}I9р9fx,p,M Ȓ$C\?r{d3_<[+3VNx`_4UM9TR{?A9nډ?dC82[~#`*SɑWG8so|Mc)6e$[B(0Wg蠥~\8>lAc^>HXH&#e?Z1RcX7Q1Vج`y, mc <.cDO~KS�Ą82ДgK?ʡ^iťdM5$OH,֜ >7Mg$Q6̫ୋQ^ZʀᠭK1wv>oLk[5ziJ^\6_-oi.ӏ\7s:wpwCȌ֭X=#&ˆ3&3ǃ鈺@)*Ѹ% ֵDA0ÏEvwe ,qƑ\ utb[E;6KRg&#"4?1Άz)xgy+eY@\nc`PٝҌÃ9LYU3W'g—L#J6]d4ԉ03.||syJ#/aMDMlipxB$|C9jpNG:dp#oNf)v? قS[k,euft#3Ņ嘛27?w^&<Su}v1?j)�6un�lg6/\$.Fu8ta7[3cػ<o_XZԏ7/ q$|S|27 0!N 1ߩ*g&D3X '_#nf@"L0F- [91?N-8k?ӊ#HcHZ ǶZ:Y̲/8t$ )z$<U�^1ʛ0#ݺ]mE]vv4+vN~<0F*i޽~R7I'85J耟J$x!XKpͯ6J(W/YC <Hf+I"v| Uտ7Nz;~3 ͘HW^i^ݧ 3 !U0a!RR焭@ƥq =X_ƌ_^/0Ŵ6Fl$aصIS.U�Vc� J7ӣ"5ZggH@eqsdJggI(*MD X O"rkީSM¢c<i<L O;Kz;ߍ%M#m pۓ !M>TT??>\+s4)pO~\7=Nٟ[O `�:{%% c5qē.jeժr .#�k>hk&e?Ǿ+ kIG(*Vˣ v`<JM`knѤxŇä�j3ɪK/sマҨjeX08xs8oᄑr_l&Sˏqk}N%hO<!pNzص�P~ d\'$prAt̆W|Gм77jb<〤y\ac\aW)�Giێ?QllDF |HCҒ 컕3Y[~ԧI�eyWHU7Z-OGJof[j'1po b#&`}:_뫻Z s+�(:mCj{9謀C51`ߕm?ŠDo ;haG{Z|XtM-%Y63Gg_LÜ8Up[YJUu l6Tʶӄvo^`<xu;9{Uӯ㋱u4gÙ9<*�G1� - U؀7x"+@Y#!>sM&t3),9BG/E9+<YSjͺtOgds㸵|vm}fkS-> Voϲ[tw L+\ O8AĀq<*~&Z|xtP7�1k-}Y:7>WXz^i<y dϐmJx @SqV&a*kj`>vOϵ+תKĴc]aL0.t!xʦ|Wu?㗔~&;$~c�j7ܦqL@5�Vi�R_ >#,DjnC,Ѷ0|[pS3I�N%Lέ�ő�%˂S7g̈́0řm-Ҷt8,7]2`,霒3?i(P:<ǡ`zHAH[7:}'d|M8bL8^{ 'V'8;jȯ$~w�NɿOyyo@h;lh}tIôZ>|!y_YpGNzc >_#{4G- + RP (�87r8D !hciF2>,q|uu Nx0ưAJvnJXeyERTHa{G+{ %Im>: |jsT3�<=N1HQI@ópg^.0'Rf,$)Oy|Ihe.Ǝ�wL pMBʛfU͢Xn]#N-jv2[~G Mu^0? xyߣDl BP)2�e^ ;Λ=B,sWGtf7CWEҁs`nFv3#TۗEma'� uߝ7XͶX,|$;L m6?,ط?_r~7~JS[ѦA/f�cO�JA<ΡՍһ}Z2!xz4 $^O-a� SFBɠ'vy)! .ksVyZSY�á+=w!6[~[ٱ /6 "&PKBarX졿!;a!{e4$yF<mA b<% gi+Hܱܖ6n[jpH,m6ӛx.Æp/ln?ƪ K<:1=D 2ǐ$:ڀSz{&$U@F{X"gmfWJBXk7.Z"ǭÙ{ BF 3^ ~ 8F?CU+CgBpKYzE]{>!vTq\1j1v!Go�*!C"OfA6ĬD VH6iI<q2.N�膴HJ>R>DFVRz}FeHh}`*ZX1|K݀CqݯisXRNL)@�<x$rLHf]zw> s` ͒CĮTK0jמ$ ĵ#J.*Hde9O�l@4.^*-+A[6GfW+fXHvk}w)}On4NRӿe�1:MttD w zddD!j4az;17@3؀@-ĪȺI7Qe8/1.=x z=4Wi²(;}qc4.$~etOlC f�aR8ˉHc:tP'5 !W -,LC7 HO 3[||IZ/WB;N8%wvZX]-aƇJ7t߮ڿ!pe* 32p{tG@  7p&njh.|~pre`%ҲʰJyO;H=gnm䲐${2vlljc>UٖZ onFm{,{)A f�%XJ(DW<®�L0�2C]"j*exfOSJߴXILMւWˏQ6R(1 ZxfeUږ1p�pps<D񋉿1�#~E2LvH.o#2D DX3ai"GC(8 N0 /CcA[p(4-Y_qm,7j_O ^KSͶrz=ۉ2{0TOlƄ@ cLz%PH H4PK!sxMkパ2 9mTUW�mҀd$ojRrX2R^jWGe l >?4;'ѻ?$Jj@5Tl2ĻYljĵMc=̕pC1|ZDA00L#X5YR!p+ݕmlCe|L8׵q?H@(O-v�9})}>`C6 M0c&ũlo U5i(avtam^qb=)4JxB+e?LC4o[Xٕ[jxRٹ]q//Esb_، X6SF; l!ubF3Dh{Ua ,WM8z+0ʋ2Ǹm8B"1jC|zjmV7 Z,=xknߖe m^ j؍~%)0J 1ޭc *!ojIL4q_4UBP MM)gn%Ԉ~,C˵ 6Ne;+&0҄}xa4,Y_z|c4%}35!ZKqI?P1݋.QWCja,ψL%4[0ga׃Y%t%X [^vYQ<V rnD}uH(=JeQc|r}}ҿg\;.tfa3 )A g"J@J.(RTuYrnTӐyQhGY-L0R+[\(<8Fo,PWdwzB\^h4=6uTf\oO%Dcg40XFAa)IQ.eCVcP&v/%�٠U+@Vo-Or,,�OcҸqcB �Qpn*) }`�ݒrs$)|b0��@�IDATrUHplOTd,dl;,xڈCoҦ ;t\DzD>Tq4K�u[_*1Q H|'}fGG'j[yQ>Tj)Y! [,dCgUڨ' <_t&4l\4 b `BB2s r=QFQ@hiG&1rs1d4 ԯh0C]ZBp :c0 Ía!br6!8~s]R9PH�ıI5<-L\8 �]-T Tr&dx:xgb+~,3ܕ,>YaC'`X(2i1 :~̦Ǭ<v:r9|.y\Ъ[` I<A  k*6.f׳3sPH?%ÝJ<F#GhH cf IDV!}:07wFH*ҿ}!AY<i9iee1p[ >K̂7$LI(d1h_Q $00Y^ bk= "^-EPc#Fre�Lm�ݟ3�#w]U{Tj?=Еɲp+Rq-=4UVMF A?$ P[o0 FmsВ֕9c0GbhEOG+l8:cyxH~n=^"Q3}R{яK1OTu'Wξ[b�_|k3`P(ع 2 /@ߑ ^$T _aMLb2.0ܺ: Ne#^+2+{ rsӥ{]JeeLݞCFacXnQǺ]%T8@� |3Wt]`HeL7f�MMw88 �֛E;IPDB<0�^[N\A'R<<K9l;VIh+g`kxVMDOJOdYFh:[<z12?0 !”vW�&3@⇎- H2LȋSrl`V|'�kXwlzT|ˎ(ŧAĚ=+=!AIc$Ql _)�fnmsLIˆLu#u7 <!kHF)7 ˉzj38bGEB_+CԩtF{]2 %P|- `hB,#9 IS-hJO$�"J"ԂLH�y`T($pL1{\JL\!Ӄc*!p;J4n&gn.?1�mC_Ɓm+R(zrIpx Rfwu0'.s2,GfOc1BWuj0bWFS~a/6di cp53'3UY)T;r' HE\'6 e"':D7H׵h|LW'\`G:~N[Z[G{{^ܳGx 9!#85ekc̏>x04Sש\G2dH4f;~椭~ M'P$ryrUG;\% z}`EkށL�nqG&]I7"h*wBԜ@G>y)WM8B+2�O7s ܯ_HV[/4,Z/6Im+c P9yL�dE4D<2�fxӪ5:3G (t[;6ZSG/F?N5l_ǁlG@;F:Gd‰m0*btI`y:`c}w�HwhGC&>;{,jx>gsTx{UԞ'il&~qtnTՠm[$&%|%vQ#J(hGF&8V vmMI" 7V #vcgJ*;J =)&�#g%hA$"(J?*m$=^]3�`8O>Q6Kɛ=W0" ߱`"EO:-ێ[++їB[Yo&續 ^*!ZC$3Cf߹ WUc=ԳAwY2"8*OҴ?'?ʃC~ 9 ͓y1H ?D=ٺjZ2��Y9h B6Bfz=5/Ԃ%v:m=,{�ǹ$}Qbgf+9 mX͑4|/TKe�lvO7dS Ь~"-΃,!}5!6HcMȄ<@F%�?K07_cj㇊#GL y4:FrhC'Lwg]s5* �J"p6%|f}@{Ȇ(# 48bwTYmw m@�C 6hϑaʣ7xz/{ hZTC E %.7|v Av�l—˱j3> )w n(YOwYf̲U~xj{6>sCH*P$r3NbHd׳i#;1+<ln�Hf+{(cSu=D 0ػ$4%�v,5?n2 :r4,\v>P'l'BB>3=,_Q?x_=.<|<Y2eؐ+� pԞ Ќ*,?mB�@XpE"Hx!2GG|Yuᠭm/۾E2pѲtO8hpz�?x/#T9:&VUN0L g7rĵg�|l�H$hzr a+N$|C$S#~"#|E4DpC9Oc_džb2&?Rc z5܃TwϖMzxg߲]*N,bni$�ppX?r`%]M!qCO߹kXYkuG˹Ό�BM?%a:E][g�_3ZKd A鼃6t=c8y+!>KR�[Wcv}:k渪IRI][_fCl*D nwk~8iYw^Q' ľ͏@ǥ(٣Pْ]p\=n)t{'^D: <'\3*Uyx .@.eqRCj&5�Xm@\g,ٝG!|!g;dy 6gnY|+\,~WJuad �UTICSij^fqE+z6=*On._S[WR'~٤eਊ%:0�N}`c>5qP,h-g(Jљ0_̙ e͉u?ghƫIxt;c2xV&؉8xK:GT21u ᚭH=xK|bSz0ڿ <$ZC!|SX^u,y˦ܷ[)|" Ҙ�mk&eM&@EHajH'* \NIeR�8%BbfPk@\52@@=o4C,ޏƐWQUkVz,8@&>3Zra2Ty{}Fߕ8Oో+ #~ݺyZlS)Oc_H K#`1m% �U5-}X?؃QCp#~9b? _E0u\<YpѳK0,(hok; LjUMx ,| { ڄ ;pYt"eڐchIvw!ͦ )b">f|&eO` 9;߭ T_7;r;)$ߖǤi @৒+ƲMp�Spa4-lQϻxgi�fkуZ*!I4�1m`ɮ�'J߹Rp<Cqm"53pM|gKԟ-oՍR֙w3OmF;|t024veSTDbpdۛn7X޿Kwm8vl#~*t'/�K_i?<0Hdxo(1c;� sZf:HSX~s*2lcۂ*q1v҄s8k�<G6'n O�J:Zmx/$~GCqE/}Ytً1 ~wH;:�I||$X{ie6) ?dλoC LQGP vi{> K/y p ׻R�6$F1o m*oM,T%M?SjVDj 0^SOp�AIM՟*?5oPеlE0} ymk1Z9v9b $mh%} ~4#b�-zi;Uب?]4Pp@$$OߟaKN�{ϥ5-^"駤dgD*++07?柋v==},N5v:M?g�:CB8[]lYo|Ex: Ϗpqm-@J5nեԩ:�ڈไ<^.ĞnSe*9㟖V/0U\w@wm$ħj�$!9p/?nO_ ^g71K^lYtF}4 [J?f~n1z4ő].ஂ.<7~:9602�p˂JI�hv N5U+`"4pH9޽-;l360f3?g}G6D"jC?87BY>[u/9`[Xr%&@WhdQuX >C{wKo*hHϓ֞ ?|pOAUOට`B<Z1{A/cgA09ďa";N._R z >.Uo^{uJ`8=e7m#>%FЦ1jkR�pL?wv#nUfdn:V.Ɋ=zl�'S*# >{off]Py�58̒K;zKiaV#zcX(댏]CBĠ+͗o,y^֑Ji^G묟3,H\2۲ AKyvXݔ?DN rlW G i4 d;?w@!U PL�(SzS#+M�L2ׇX$|P,E}+`_ ,F70$yL9HމN~� ϓcwe81 1<W ? 3XW9âm @1٬[Ie/o LoV?. ){i<8]OLp 1[M*3L=ʰ毕=ժZ{>*�yܾ[܋onTI:�`n}=ԁ {RGDr'3w9`t,E/~,|Ull֫j#)iz6> o4(^�tuHIca]�4N $4WAyϐL[ǴAf"86t<˓?ڋIT8Uvۢ3&c!<7=QüͺH�$}zgE%%񆏟sf#\׃]S?@ % @y1Y~+ew?Jˤ4i%*`; DuXFn9RbTX(do~m^ 63?2rG> 6`xw B. x(uڣ8ʈ$`oBjmZl/u~q $|S ^)5T4PQZ6+S@к,"�/dV(^{~3k^h9MLi!)8X2_U/ ivA (ݰ2Ss,:)~D\YqsNWn00C&ܕu7thL8�LCSmƇn\?jkj�Q X%ؓ멇zOK�\ߡs@ q`~SsY}ˁSr^*O}(-|h&J$='/5LDPtE4u֮mؐ D,'\_ǿq$3Fъ6 ,'M _)[?.f[8˱ ,GD +C`ڄJ. D7jb"^b^nƁL�,/jQnƇ �w.9^^||癒^|H7`xUۿy)>jfS]�!tv'l@|F)7GG׿ˉoznjӹ ɘP,_)g\9/?^2{^9s* J�@LYf:Cxe@gFԉBpv=FDN~ jfzɃaFnŕm.Eg?|o&& i`*1nGHt)pS@twyPS1ګ^&;~qM胒�cWmPb17!h &C΁T>c̙0M]K`.f �0a`QgЇ>#($DYNA-/ +{3uϮ& sCo}E2a2ve�j;#r!#PiBfH52  BqC#$ L9p5BDJ :FNyȺJ:yHvꗲn-e_+H`� ڀ9tfu3K3U sv.չQˇ� H\S,3ѿHV,3S%d$@D @*0s--_$p$t,PɝEyS@>6�ʔ�x D?iJ~_{ay?+>q8t}<uQ$u,9|ɾ-ҽ w]r{s#ҷ{7\DD_輝Ά1.3(:?HARK7懚p(4JBE(;ʏa{ tihdK-~U=$ӫfG=FgepFiF8Cb3d�f0N@:WxҾ$Y7`=Yb@<MO' N^/ uX|kdKOJז'w0]ҿz J=i8v:5@'AYSSk(XЯɌ#:І'0[ 7,<3Y7b*"x7Y&FI |A�ߊBfwKOiJAav86}rYg.&`f_@JdYúpdK'd|!P@qhĄ%Ԗ; 7OXoz0b5Z[}[lFȣ]&>ˀHlO!3׉�5G!K&`\ wSSE.ǥy28w>`I 2I- [,A/wGHrjn)!}׏cjZ<7�rr|J�nMJX !alk.HM9Pn_~Dv{ѵ$l.8�ԂTr-9>bCP9m_$8~%G$e�|o<`UCt Pdn* JGa<%_=R׾ (QIKSZ0:ghC3<ý~[cR<_gA% C~  gNǒo}a 7ywp#B⣸;f @ᕚ0Z3� $hÙf?ӯ37Y[W~HP flITn$ci,@'Û}LuE{Bݓnj=d..t͝mT[Yʷ@6H^E AuOaT bu=#$Lʆ}LhH+}9Ԓ|LPq /Pu/8u?ܠ& ORx;GWFBstwXU/+uzg/ I>|�Gom饧PzQp L1/Ӑ>gA�~Tg( ) Ǻw~\2=:~0�B�:�mpwwJ�SYRK$s Fi�诇}JpC8猱&™�n$o>5Ǡ,@WW*V9o%F'w|:klfrl̇o4Ow{P  |$N"hΙO^AdpN# '#;]~N`JH#`4:2J#%`ģ>z:-5M1�\.)7B߀n4N&!P3 P¾ADPŝi@ߦ`o3IAR`5T@:�+Idj oݺ}@{+󟟗 ^(o! m':7Dl盛aL P)`' MIe P]2޾ S"?zqoW>+?H[yHͭx"g2ƜOΰ ၡK#ƀf.~-}HNy \+? |  $'T+q(mz{{M3}?N~+"ݝ1U0tHr/䬧 Nl-L0 r@lG~8% |wJwO>V(CmPy=SMZ* ח:nf!\uB|%+y>*[":]zD| `�F#�@Ҕ$߲I5>ۅ\2 _5§]S O@Ҍ"g3#YÿEv }r37Fmg9-3"|B 1dT EL VE 7 H/z>9kPGٳ!?t;02KO߈_ҶY�08'ه'uHhsW6x9]m<Ha ECbzp/_ 'e>Ϻ#f 7{w'I MF0̠^ `+W?c)y7.]ܬ->{ǔ|'rbxE6I_o9?6(OI ik_�4sX]7$' 1.Yvp7$ɮR 07[!0U?d�l#͇n=֭;Yax%|=F?z&꫒CN->d$]s旰RxGD̕˲`7r5oϽRֽu2򊭙!"l-@ Z2�6<\z_qeGg2@ [9p÷[$ĉ>wc/=d�\}}x70/'9%tO|-�pCAÍSۯ+_$k5LgAF/yvH;yMLt�G>n|K_ =@&}:BX^'/IvˣҀ@Pڑ^m >""=@cſG�ptJ>\wWw` y Kcib]m?>ѕpOfP Yu`(eQˆ Nxg9ZG_|_?I4f'xNj*`2`V�J^Sz&HeEx>Uha|-"oP)Ը<ca.SO<>-uIU5Zͮmw K'w =)gfq9̪١d-UϹBVUzs/+A356:>(DJKԃ"eZA6@Z5`h#E@E4"IN بI8ubɖbӘzSʲC"%~ߙ9^Zr].r9s̜3sgSO=c|O:@6Ox_]=oXQ4@u{}ppicPY![7ۧj0s49lAxO%›{{hgC9+WFxC۶ ˑa4 ӆy[j^R(L ./}?{]tg ٘[w7S_ԫwHe^|şݻʕ+WF:yxtz`ԱwGWdoJ >h6gw@"^{ pC6e ,)8/'00 L>B#=ن7x-Z`վ~+\_IFg#F9Ai:ds8YR_\z�V\-4 +˗/Xz�pGE̵A;O f/eIlAܓHT\iz{c=fx`"sz7.'V�1d4b.yd/<<<`G/_{_Z Jeثeȡ_~y:j]">`-[�Uxѕ:GW鳧Dϝ͘Ky~|g*c�8`[338 " w �Aqq@Ub �yfI<QFdal \oKF{zw Wz`sA~R}4͖<wUOXm6S=B%GOO㣀^6/?ڵ_ؕfL)dQL?e=}ƕ߉XS\(c0@4F Lؙd;�38Kb%(]!c#\y$Kab@򉥷Q<xҐj݅9&i%J*4Ԑ<v/"ö0@ɽR*8d<<?g[XČ_ȃe<,}xgx=>HT{<G?VGםϞ={駟~fjjjɸr5j1V[HG,X<?00ή >lyjv ._ ^x曳{q|4}2F.G͏Si|Klk5,8Ka7iőa^:4q<p A¸p!}\Bm2�-M13ixS##|;HwȊ`1ؽq0XtZ-F!!5 j?'w}yT>+\w2*Կ?ܷwo|i*ɫؑ-a7u)9h;w/N J0٬((1ZylGEPfC#n.EZV+�,s*0)BOK/\1i,͖FD(* ]mXIkbRt nx^QO\NͪED+/Y5aL*eſ Ns`QoE:*'@t'peтIӢ.̟|Os_ugS] r\Z9n'_͎1t; 6at7c#s(1#cpgT~VBrր6ˠw)ۅ]RI蹤g_ αB1[#Հ$ZTx+a$ӗHnv0sZp3 L`*#;\W*8P~b +>Yr>>sg@~lOw&qV ȽzNCxܰ`4 !N`4maa@4Hj�Pଌ lQ4[K:BQ6F +>u p\Ar+d:ⲏ$ _�F $L@_PF &l|A &"-?Α7\_!Q2s!e>='sVPTT%V(SvtSm|qe?q*DVƪQqw]gu+"k T<=F 'Cae1>H ,$gD(oy/ !9_=W�[5�[@'o-ZmxWWwT`;kS!H)P7Bc"/$ = Vg<J8- _@\1yj�j 8tU`h$6XrGosgoO4�PtO:3=-Ks2ks7n@BFˌ\cgʲI\Y;^%`Jsǃ*7q:qcA~xœp~G7fz4{!^7Ho+OoҮm7'6rDфԩТPU-Pc#GHv'TAQB\ h+t%#n8g "-M"$|xDZMj9s{* Y<q6�:ōќ]>Q9V<:wkM W\nȯߝYY0y %Bcj\q u0=~~$* 75�h(1q-q߆㻗w훝X,ovASkfW4>t 1M|*M. @awn+|]1Йan @}lKۿ;;N*88QEhUpKKsKc΅ki$6m~Lwy ![ƀ2�*G*3gv mi}wv˩LZF硗@#$cčWuᦟ;KZn͘+p~8ter֓[v>֗i/[r%0Hځ7ϭ.l t3�5q:u+}l]dTyuX.+_%_0x㭇6j3? ]f0�f y…уw6]zM0>yKK$?78Rw7~tT9u`�ͮ+09zZ+Sooܶԟ.g<03_o^ݶ߾C" Ι}؇;j�V}�Ռ�:2S=]%p_ 4tbߊզo9n뷾uto]>Üt,e($ɣ?K3LׇhDMP|~lEqd˶Ϸ}z'|pRUS>;:\jd�( %;z#Coy鲾=@g1c ^)"nnzǃ`yGWŧЙS~ԩ)M:yB~�o]\Az~h<?}mqu3<dfs(IrM�\1BPZHU^kzZ$j4SWxG95ӛϰfsGLpTވq.cI@Hi{ݭ_YvJ"X4\T L.)&V}%_ɡ7W/~榯R㳾Lym$ "!J^� ݋'ޖmȍ=ٗNᐑ:IIbtBQKĽXH4p:M%aTvFi/1SiԢ3͓psʲM+h!]9Z;ٞ3}szE彫T~~*?%ftB5Tz*qG{lnO[>='7՞O1S`K`@ TSHx L iileYIΦ'd<<N~!Z=|fۤK"4> X &Wi!n#%9fD.-[qitE^ٝ4&,*Kc {Yv/(Źus0W~cg^*8^g{ T~BQai[P($/^m߻{޹-۳2?ŮBvEg~:ӊCG> +_DLJF 51%2M:.eƔO[#ͿC�Hģ7NZeU%dIT/Kv'!|"L#x d:JQM0~07\&eaMyȱ˚%(|1(dڋ3흿93u\k/y\7sREwO^L۔.]T)'!Po j\8#ҝ6viג `o9vqive[qwQ!ߙ.2Rm<Nj3yYOdVoj X8剂Jg63l6*AB"[% ,&&(AL:LBfW>̿VYnZb=љ]. ٷxlOB2Sb>:5:ʹ]hmz-:;T,=<:~u {zfL <*<\F81lWm`իV}jtUƀ#M捼ph ]t,YҖY2\ڗ z3ĢLSA;X2YҒ(�8Q"9EDHZC¡G(VҪDEMNA~dZhH QWB 0&wˊ7_gh\ X&dw1q|8p"WHL--ɩ|9/$L'sc&n|SZ ݹr+2M!H5:U8 j~@�[/DB~3qϐ24,9g5oJAolKS��IDAT:?B*P?'g8RJW?c<*j�\1[@|[G;zUXW]\^!k %]qv<K7mqQ\W߅rһk^n9Դ0x .R3BUtx];Ni8y; j ܰ*)WHE&*8 kZ/t im+.j VTq�S.tjJ]4y A=/Pn'hsPhn+Ux).]j43 +NHMh\ Ь&WȄx\E!>T+j.^-T qkZtKzƕٕAZt7J/Jy, } aVE����IENDB`ic08��ɉPNG  ��� IHDR���������\rf���sRGB����DeXIfMM�*����i�������������������������������������gI��@�IDATx}dGqvMڼ{9KӝI,$@ DlDlmcl,!@!+Iw;]{w'Wgv6̆{sO$61b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @ 1b!C @} O5&j&s G+CO0}-3g lFHQLZx{=VvP޵A؃{_B.ԥY _flρ٢s4Jĩm+м/\E+.q/Y_J#94%.i-mh ݕq)S;d^024-Mڟښm_S,.j܂DnaK>((t$ Z|K1oOR,XH<dX`4"%^D&qi~K_($74E(:Xʀ]~-S̋LhuN 3{xJH!8J Z#a2:֘|Lh!0/22OX1E@;jT`bW+ȑ'H$sL D&SLt_V=ɆC  K߰sE|Y +"&t? ;:WLs@:Tڦw_(7{OZ\^̞ܐ:0t\*):҅B#[2ș'HDKzJt=:en)ϤHrNJIX^[T| zZAT)=ҡ gt]jm9k]D DFpR?̰,P ُÄYspg\>9\H 54n4>y {^Jf̔U>&|88$g ,C5fO�/j#ZHY̚AujRL g JH%@bj2lq/H_ :)[JSQW&rW Tʚ3y]tgC(ʺ:J糖K]VNTe`Vb)RLI1dZ2 CO7>g-oo `VFSiYkc3˚͵Ӷ'ǘ_{җ'uLz.nl+椘IPsù5؍! "O6RY)`*iT?"K' (W:4|Fk:o |V(n6 \MC#VW^ś풹aVNYV)ȃ# Le0}mXpCK3V_DEQhL%O_{gI/dABVy}i0.CCqUd|bg_VSJ[fV `ga%bA?|B\.tcJ]kBX dhClyy]`·YTy9Yoz<ɾiueeFyŻt$$ҥI)44J_K۞w{W&s\{-qn3#fKEG?uҡCW-Y֊K%!JJyh`x_&}lsam-ǹ(>' (uRON p>|\, qtWp_z<YQڣ<ՃDLĪM%׷` wn37l%T*}fffJvҶ'k=9vk[CF`RiUhc儅>]6CRRZ\ZQ9+B uњ}Kukt(/f� zxSdR J%+՟?M"2A38jmV欟oNL]]r(" Ru81Q%0M3<O)Oi-foh.g�ajX(}|q>ah΅}\iQ~`s0 fQ�X{ԭ!(څY (T+E#$(l O$yݝW}Ǭ7Y% t0?wikJ HHǪ4`0|b G f"<Җʮfa(̂Y}#@TO)D4c (뱚paO,m.ro; ̂F@,g (-Ǫ?O'"1i Ϝ_-3T>x|K{Ss?;�Ly.t-kz~VK^q[F/#9D`.zϵ{w 4 K!0!5TGO8EWz7BIi f~?;o_$Co1  ؁j>|Ҳ~ŭnCs2x( Q3Lb�?ƃם<t|j3<nf-=Kg<+魷 )2f mG?xދ:~)9;�bppIPޞ}tm3 0pUC総v%l- Ljysa,[�}/?+m* Nɦ}g 0ws+;[3t~TmM cQ7!@22P mN5Rvm�hg{eϻoN`0f�b# slN:pnnUz�ΔapW;|`i0(I!P![PJ W\4-J~Hm3_;?[;@q:w&'e>{P,�>mVOP1Y`V3"H?1:PA É. @J 6W; 2-ZԐ:e.~me�cL` ʫ@� c �4?F 5AL�UJīHF8}?88xk y4;GԍkI`h_5ל/7w5W~2xuW�:0e sԔd4Ֆ 8MIp# XmM>#sԏ4'~4"q|oahs8_y'wHVmo�;ʺ|UkuiD;9P|7Xiq nhU#@ bs@l!Nrwkc)l%f ~ritYdcBiy1#|Dט6^|lϽ󔶷.CzBfPaҟs0t$~Q ~8aaGp3!l76eiH ?;S!‰>aV. !0rv8斏.Nf`SKcֲlgğx_7XEqW_8#@xt_A.$nkQ^+ 3 }t=_9fJp80a>L3U%"tzFsEbJTC"8W+(W {Rfit7P<:lOgjLB#;7!i Xy^pSvAf,RLzơ7<nAqD6Ml^͍ X2�J=408/ JahP}z:#%{ : .) @Hғ�0VƠĎ0 !AR@.02Zl1ב,4KiKQU,.Oy"¸0K .1a_?eŹtZ/GiOP R2.0 ܾAJy>P>^J _OgqtniL@y\s|p=$ɴIҲx.[{ δ -jj$fՄ׈}bˍ_zK< QaSs3K�2‡> N=W/fpQ#E'N߻Kvn[6ڿGݨ!/t c)L62�/f a#bj+͌@D-p1rl|2C[ Q2# C',Br,X{>W+i|i�+sa]y8@gҞ}sW^}Flv(G^ /ҥKGh4(m]ZTdзIt=[e G52�:>1"c 7l(m7 ~ �FlxQWDxɞ03 ۉ$𒢎|͘\CqBYDY~92oqҼ`1NJp័7o^ .x"ȓ`H0Fd8w]g^s5?_̀0U<<}6=$[6> 9,8˧!WJ%(IDn"6Y"R+΅x=a"Ɛ@k+Ǘje ŇqnchYmM}yeyqlY:|Zxc:ZwY[>X%+9_VYrzi]T"]uU=iz,L}k/y{#H4#Qa::چP 膜O-[2�Ra |mji_VV>r۳S=t6 v#HK. <) KF2H F?<%O !Rf|o3?(@�@$z2fWy~3d9%Ku4 \aOP^xS<Dt ǧز#:u{ݧ tL_VeLSOC<w©g3"2�&0yHrT<BAH63"[4 6f+՛3hH (9&ޡ7gu=aY<|?�g&A%YHedW+^( !~D+fY&czzz~pwbQP{ԚŸɟ?y~?^$Ё\|\x9KuI2b߾=HFf;&@ұdm$ˈZ[I&L 9"j#<#LUc%? E$e3#rƫ_'+<['Q\o7P hu]+*)[|-z,~R @b/lt43ڸA,.x,9"9y]HWE4ilrIA` `ry�#fs7j݋_>h=?)) ,f!l)7-]./{p2+^[ J?C8vvL=$�_|Wm!כ)I iY\4Y<]#.90*ҕf iJxF0 !'4FWx)֛O;pCvoz}\g=W;:L2^"^wun6vOL-��%"BL4Ӵp,񌀺0S2ÐCcḻa.nK CHC~s7{qa*#1>ʽl-g,S^e%ϒLsAO%P ;#2T0&P<S/iooff]#J ?| C݉Z4d,MO. #@Zbqz0T!`T$~7ۓHil>tz+e91Z{3XJ� իW_\_C' ԙZ3�6@[O]k_1'&}WwC|BI&R&%S %Pg߶ u(uR>M|pfvw?eRd+`3O:7n܋njj�]vr,eoAV2>K?KeOAi%�@X*<Jd<G`L+"e93H'Tj>E.:a95oR_<~ѐ6Z[[_qk�6y{b�l=DK.9[8Bt,8_oFɃ ADbď]$~kF!or}c_go|4k d|t9ף 1PՊ V_vze?l$ݦ(\\i{8Ҁw � ~�H:I pzI6eg7Wt/ߋghj9/T:Y&4x,_|246r1S[K` jsXv4~:(j'$\wI 'o~E;J�q1*V&@̀2/ @GQX�N}:_ @ROsnYqy:mKetTPՒJ3 {,!>J8$y?']/|ϻ��I�xrPACNq2ʈRmq'Cx=MoӷʬX*܊3= l�:evq;kH @ur|d�:ȹ'͇3*T`9_%o1jUs$RNw466^p۸�9W\t͇pg_%#hjjZԧ>uoSړZ0�64llNhڦ~|O]-'DX&( 2L�:ژa�؟2zG,_W/wE9bRAn2L&Ӂ33EFՔ@K�kx3\Nssm2 yUҼx<mNфz�7eAAzB&, K;#9l7;?~L@?Ñkx�2SNaj�X67̇Ne%2Cd]v$1__Rln?8"�{!mT>9SI�2�#5?&~4}E FifD 54XXQK0m^~' GE\,t?[ Y`d3`d}QG8ʙ!;O;eDڪд/`+P-YZ)p+J%@M@@"5~5vRx#YgҲdgϜN�".ֱBPF@HfzȎ8߽po󮔧v{ aDZiWkOeT*?30ɔk�ظHJ�SYVHLI+n#�O�lu :Y$~;!K_s w}�7fz3$]0>t3CwfYX5i;`m٧̮%`# �P3GA t!H(C&�D 9b [ h?d�Ft q{nF<Q9W#ʰJ6 3w->-@nz }K@oɣ)m+3WWW˶g1{6ڬ3]AFxW=YrHR<I9m>AW~tےafՌ 0 㫹hEpժ>H�`�GԺ9ˁ6ۄ9*8lK # L"6yGgtGN?/Xrޅr5(F"jDba#KWoia4,<6a$fN*A{Snj�Bn4q @ǚur[?(v.;*(8[rP"8˟dtk_`įG{9C2#Nk4`ep3҄~t#UcuLKz}%}t} *#q}G^ *΁ H7Kr^f4>`A>{3I dd*í} Pi\R._'1g_olnaVFmeOTw,],5DXW8؟=y'{"itO?~SYUv'eBkg,pHߞ]_tL}{0Ylo @5#{m̉6ﴲ;P~= J?N3-Zҏ?21aq̔n/ QÇ -\TKhe[7P纻99|�~@We[D2CrD;>tiXD/+p3EˤaB(xbtv 9urݱMv:rga4l$<EiЌѤO7uWz;e՝Dҏ7xqNb?z{o>ٵSo;&ptnpFSƀYH;~t._ŋ?Mw1f�ll"L%D!蒢Oqv` 6iX\Z]I5EKUR>03/;>k*=u%`?�'U|\"9ChN72ՉAq_�ƲWn=V=[٭_.@XQU' ` ͤ3"97) 2ZZ0a mH'S RrLOw(v3nE^n(7?,{CI[Ǯׂͣ+i2ON5+Ln9M>)g<1V蚵r3tX;y ^Y/g: #0fjyJ.%эFK3=$v,?Q~vڶ&W? .l gM-$Ԃ k1>j8nn}G=�hi,@L$8I7I"Q3L ụv|~Y|eiy`3.xk8%eG+!Z"\k?O!N`d5:lhljnPO&E2>m9ލ^Ex>-0Ɓ ~ȓ4D.g+sY]q`P�o{B`t~�)7>KV. L$xC&: u!$JN܈T2�FI@ygݷȡ-X",ycXM"l$$a3Pw")"  ]U.@?~TBC[KK�lW({c2qZ3~# [)Ao"Otl۽KsiZt5n\0 CWc6<5Ø oͤ񙉹"$RD}6��2�H 7�(<$ q,OdϯUϹ T2k>4ח'Mr'Q8) ]6 p]s" !Lp!MrlƆ7,p—_I|c}5eVg,-+xRGŵ_/}<x@ph3t3;/xe}��GBLÅq7_LwHrVv2ή~Ӑ&QM5]t >dp OV)ѻ5̣ٱ6`�ȓz2AM_;م{W Qk3ͷc/z<֕D6;@p s׷7:f҈mݟ`Mzҏ˧*??q[YJQQhiRxMyaߩ@syLwM,VFL=-?4/ HecWbHOmT3* n D�u6EZ#~艞IMA(!VҀ8| ^,k߫5N TCH#p3/}. jrHh& PTK!4=0-A&ǯ[3 ,*GJ20,=*UQ"!/B&1�fuIFaqj«0PƢU3 Z_ąOxqP(}I9р9fx,p,M Ȓ$C\?r{d3_<[+3VNx`_4UM9TR{?A9nډ?dC82[~#`*SɑWG8so|Mc)6e$[B(0Wg蠥~\8>lAc^>HXH&#e?Z1RcX7Q1Vج`y, mc <.cDO~KS�Ą82ДgK?ʡ^iťdM5$OH,֜ >7Mg$Q6̫ୋQ^ZʀᠭK1wv>oLk[5ziJ^\6_-oi.ӏ\7s:wpwCȌ֭X=#&ˆ3&3ǃ鈺@)*Ѹ% ֵDA0ÏEvwe ,qƑ\ utb[E;6KRg&#"4?1Άz)xgy+eY@\nc`PٝҌÃ9LYU3W'g—L#J6]d4ԉ03.||syJ#/aMDMlipxB$|C9jpNG:dp#oNf)v? قS[k,euft#3Ņ嘛27?w^&<Su}v1?j)�6un�lg6/\$.Fu8ta7[3cػ<o_XZԏ7/ q$|S|27 0!N 1ߩ*g&D3X '_#nf@"L0F- [91?N-8k?ӊ#HcHZ ǶZ:Y̲/8t$ )z$<U�^1ʛ0#ݺ]mE]vv4+vN~<0F*i޽~R7I'85J耟J$x!XKpͯ6J(W/YC <Hf+I"v| Uտ7Nz;~3 ͘HW^i^ݧ 3 !U0a!RR焭@ƥq =X_ƌ_^/0Ŵ6Fl$aصIS.U�Vc� J7ӣ"5ZggH@eqsdJggI(*MD X O"rkީSM¢c<i<L O;Kz;ߍ%M#m pۓ !M>TT??>\+s4)pO~\7=Nٟ[O `�:{%% c5qē.jeժr .#�k>hk&e?Ǿ+ kIG(*Vˣ v`<JM`knѤxŇä�j3ɪK/sマҨjeX08xs8oᄑr_l&Sˏqk}N%hO<!pNzص�P~ d\'$prAt̆W|Gм77jb<〤y\ac\aW)�Giێ?QllDF |HCҒ 컕3Y[~ԧI�eyWHU7Z-OGJof[j'1po b#&`}:_뫻Z s+�(:mCj{9謀C51`ߕm?ŠDo ;haG{Z|XtM-%Y63Gg_LÜ8Up[YJUu l6Tʶӄvo^`<xu;9{Uӯ㋱u4gÙ9<*�G1� - U؀7x"+@Y#!>sM&t3),9BG/E9+<YSjͺtOgds㸵|vm}fkS-> Voϲ[tw L+\ O8AĀq<*~&Z|xtP7�1k-}Y:7>WXz^i<y dϐmJx @SqV&a*kj`>vOϵ+תKĴc]aL0.t!xʦ|Wu?㗔~&;$~c�j7ܦqL@5�Vi�R_ >#,DjnC,Ѷ0|[pS3I�N%Lέ�ő�%˂S7g̈́0řm-Ҷt8,7]2`,霒3?i(P:<ǡ`zHAH[7:}'d|M8bL8^{ 'V'8;jȯ$~w�NɿOyyo@h;lh}tIôZ>|!y_YpGNzc >_#{4G- + RP (�87r8D !hciF2>,q|uu Nx0ưAJvnJXeyERTHa{G+{ %Im>: |jsT3�<=N1HQI@ópg^.0'Rf,$)Oy|Ihe.Ǝ�wL pMBʛfU͢Xn]#N-jv2[~G Mu^0? xyߣDl BP)2�e^ ;Λ=B,sWGtf7CWEҁs`nFv3#TۗEma'� uߝ7XͶX,|$;L m6?,ط?_r~7~JS[ѦA/f�cO�JA<ΡՍһ}Z2!xz4 $^O-a� SFBɠ'vy)! .ksVyZSY�á+=w!6[~[ٱ /6 "&PKBarX졿!;a!{e4$yF<mA b<% gi+Hܱܖ6n[jpH,m6ӛx.Æp/ln?ƪ K<:1=D 2ǐ$:ڀSz{&$U@F{X"gmfWJBXk7.Z"ǭÙ{ BF 3^ ~ 8F?CU+CgBpKYzE]{>!vTq\1j1v!Go�*!C"OfA6ĬD VH6iI<q2.N�膴HJ>R>DFVRz}FeHh}`*ZX1|K݀CqݯisXRNL)@�<x$rLHf]zw> s` ͒CĮTK0jמ$ ĵ#J.*Hde9O�l@4.^*-+A[6GfW+fXHvk}w)}On4NRӿe�1:MttD w zddD!j4az;17@3؀@-ĪȺI7Qe8/1.=x z=4Wi²(;}qc4.$~etOlC f�aR8ˉHc:tP'5 !W -,LC7 HO 3[||IZ/WB;N8%wvZX]-aƇJ7t߮ڿ!pe* 32p{tG@  7p&njh.|~pre`%ҲʰJyO;H=gnm䲐${2vlljc>UٖZ onFm{,{)A f�%XJ(DW<®�L0�2C]"j*exfOSJߴXILMւWˏQ6R(1 ZxfeUږ1p�pps<D񋉿1�#~E2LvH.o#2D DX3ai"GC(8 N0 /CcA[p(4-Y_qm,7j_O ^KSͶrz=ۉ2{0TOlƄ@ cLz%PH H4PK!sxMkパ2 9mTUW�mҀd$ojRrX2R^jWGe l >?4;'ѻ?$Jj@5Tl2ĻYljĵMc=̕pC1|ZDA00L#X5YR!p+ݕmlCe|L8׵q?H@(O-v�9})}>`C6 M0c&ũlo U5i(avtam^qb=)4JxB+e?LC4o[Xٕ[jxRٹ]q//Esb_، X6SF; l!ubF3Dh{Ua ,WM8z+0ʋ2Ǹm8B"1jC|zjmV7 Z,=xknߖe m^ j؍~%)0J 1ޭc *!ojIL4q_4UBP MM)gn%Ԉ~,C˵ 6Ne;+&0҄}xa4,Y_z|c4%}35!ZKqI?P1݋.QWCja,ψL%4[0ga׃Y%t%X [^vYQ<V rnD}uH(=JeQc|r}}ҿg\;.tfa3 )A g"J@J.(RTuYrnTӐyQhGY-L0R+[\(<8Fo,PWdwzB\^h4=6uTf\oO%Dcg40XFAa)IQ.eCVcP&v/%�٠U+@Vo-Or,,�OcҸqcB �Qpn*) }`�ݒrs$)|b0��@�IDATrUHplOTd,dl;,xڈCoҦ ;t\DzD>Tq4K�u[_*1Q H|'}fGG'j[yQ>Tj)Y! [,dCgUڨ' <_t&4l\4 b `BB2s r=QFQ@hiG&1rs1d4 ԯh0C]ZBp :c0 Ía!br6!8~s]R9PH�ıI5<-L\8 �]-T Tr&dx:xgb+~,3ܕ,>YaC'`X(2i1 :~̦Ǭ<v:r9|.y\Ъ[` I<A  k*6.f׳3sPH?%ÝJ<F#GhH cf IDV!}:07wFH*ҿ}!AY<i9iee1p[ >K̂7$LI(d1h_Q $00Y^ bk= "^-EPc#Fre�Lm�ݟ3�#w]U{Tj?=Еɲp+Rq-=4UVMF A?$ P[o0 FmsВ֕9c0GbhEOG+l8:cyxH~n=^"Q3}R{яK1OTu'Wξ[b�_|k3`P(ع 2 /@ߑ ^$T _aMLb2.0ܺ: Ne#^+2+{ rsӥ{]JeeLݞCFacXnQǺ]%T8@� |3Wt]`HeL7f�MMw88 �֛E;IPDB<0�^[N\A'R<<K9l;VIh+g`kxVMDOJOdYFh:[<z12?0 !”vW�&3@⇎- H2LȋSrl`V|'�kXwlzT|ˎ(ŧAĚ=+=!AIc$Ql _)�fnmsLIˆLu#u7 <!kHF)7 ˉzj38bGEB_+CԩtF{]2 %P|- `hB,#9 IS-hJO$�"J"ԂLH�y`T($pL1{\JL\!Ӄc*!p;J4n&gn.?1�mC_Ɓm+R(zrIpx Rfwu0'.s2,GfOc1BWuj0bWFS~a/6di cp53'3UY)T;r' HE\'6 e"':D7H׵h|LW'\`G:~N[Z[G{{^ܳGx 9!#85ekc̏>x04Sש\G2dH4f;~椭~ M'P$ryrUG;\% z}`EkށL�nqG&]I7"h*wBԜ@G>y)WM8B+2�O7s ܯ_HV[/4,Z/6Im+c P9yL�dE4D<2�fxӪ5:3G (t[;6ZSG/F?N5l_ǁlG@;F:Gd‰m0*btI`y:`c}w�HwhGC&>;{,jx>gsTx{UԞ'il&~qtnTՠm[$&%|%vQ#J(hGF&8V vmMI" 7V #vcgJ*;J =)&�#g%hA$"(J?*m$=^]3�`8O>Q6Kɛ=W0" ߱`"EO:-ێ[++їB[Yo&續 ^*!ZC$3Cf߹ WUc=ԳAwY2"8*OҴ?'?ʃC~ 9 ͓y1H ?D=ٺjZ2��Y9h B6Bfz=5/Ԃ%v:m=,{�ǹ$}Qbgf+9 mX͑4|/TKe�lvO7dS Ь~"-΃,!}5!6HcMȄ<@F%�?K07_cj㇊#GL y4:FrhC'Lwg]s5* �J"p6%|f}@{Ȇ(# 48bwTYmw m@�C 6hϑaʣ7xz/{ hZTC E %.7|v Av�l—˱j3> )w n(YOwYf̲U~xj{6>sCH*P$r3NbHd׳i#;1+<ln�Hf+{(cSu=D 0ػ$4%�v,5?n2 :r4,\v>P'l'BB>3=,_Q?x_=.<|<Y2eؐ+� pԞ Ќ*,?mB�@XpE"Hx!2GG|Yuᠭm/۾E2pѲtO8hpz�?x/#T9:&VUN0L g7rĵg�|l�H$hzr a+N$|C$S#~"#|E4DpC9Oc_džb2&?Rc z5܃TwϖMzxg߲]*N,bni$�ppX?r`%]M!qCO߹kXYkuG˹Ό�BM?%a:E][g�_3ZKd A鼃6t=c8y+!>KR�[Wcv}:k渪IRI][_fCl*D nwk~8iYw^Q' ľ͏@ǥ(٣Pْ]p\=n)t{'^D: <'\3*Uyx .@.eqRCj&5�Xm@\g,ٝG!|!g;dy 6gnY|+\,~WJuad �UTICSij^fqE+z6=*On._S[WR'~٤eਊ%:0�N}`c>5qP,h-g(Jљ0_̙ e͉u?ghƫIxt;c2xV&؉8xK:GT21u ᚭH=xK|bSz0ڿ <$ZC!|SX^u,y˦ܷ[)|" Ҙ�mk&eM&@EHajH'* \NIeR�8%BbfPk@\52@@=o4C,ޏƐWQUkVz,8@&>3Zra2Ty{}Fߕ8Oో+ #~ݺyZlS)Oc_H K#`1m% �U5-}X?؃QCp#~9b? _E0u\<YpѳK0,(hok; LjUMx ,| { ڄ ;pYt"eڐchIvw!ͦ )b">f|&eO` 9;߭ T_7;r;)$ߖǤi @৒+ƲMp�Spa4-lQϻxgi�fkуZ*!I4�1m`ɮ�'J߹Rp<Cqm"53pM|gKԟ-oՍR֙w3OmF;|t024veSTDbpdۛn7X޿Kwm8vl#~*t'/�K_i?<0Hdxo(1c;� sZf:HSX~s*2lcۂ*q1v҄s8k�<G6'n O�J:Zmx/$~GCqE/}Ytً1 ~wH;:�I||$X{ie6) ?dλoC LQGP vi{> K/y p ׻R�6$F1o m*oM,T%M?SjVDj 0^SOp�AIM՟*?5oPеlE0} ymk1Z9v9b $mh%} ~4#b�-zi;Uب?]4Pp@$$OߟaKN�{ϥ5-^"駤dgD*++07?柋v==},N5v:M?g�:CB8[]lYo|Ex: Ϗpqm-@J5nեԩ:�ڈไ<^.ĞnSe*9㟖V/0U\w@wm$ħj�$!9p/?nO_ ^g71K^lYtF}4 [J?f~n1z4ő].ஂ.<7~:9602�p˂JI�hv N5U+`"4pH9޽-;l360f3?g}G6D"jC?87BY>[u/9`[Xr%&@WhdQuX >C{wKo*hHϓ֞ ?|pOAUOට`B<Z1{A/cgA09ďa";N._R z >.Uo^{uJ`8=e7m#>%FЦ1jkR�pL?wv#nUfdn:V.Ɋ=zl�'S*# >{off]Py�58̒K;zKiaV#zcX(댏]CBĠ+͗o,y^֑Ji^G묟3,H\2۲ AKyvXݔ?DN rlW G i4 d;?w@!U PL�(SzS#+M�L2ׇX$|P,E}+`_ ,F70$yL9HމN~� ϓcwe81 1<W ? 3XW9âm @1٬[Ie/o LoV?. ){i<8]OLp 1[M*3L=ʰ毕=ժZ{>*�yܾ[܋onTI:�`n}=ԁ {RGDr'3w9`t,E/~,|Ull֫j#)iz6> o4(^�tuHIca]�4N $4WAyϐL[ǴAf"86t<˓?ڋIT8Uvۢ3&c!<7=QüͺH�$}zgE%%񆏟sf#\׃]S?@ % @y1Y~+ew?Jˤ4i%*`; DuXFn9RbTX(do~m^ 63?2rG> 6`xw B. x(uڣ8ʈ$`oBjmZl/u~q $|S ^)5T4PQZ6+S@к,"�/dV(^{~3k^h9MLi!)8X2_U/ ivA (ݰ2Ss,:)~D\YqsNWn00C&ܕu7thL8�LCSmƇn\?jkj�Q X%ؓ멇zOK�\ߡs@ q`~SsY}ˁSr^*O}(-|h&J$='/5LDPtE4u֮mؐ D,'\_ǿq$3Fъ6 ,'M _)[?.f[8˱ ,GD +C`ڄJ. D7jb"^b^nƁL�,/jQnƇ �w.9^^||癒^|H7`xUۿy)>jfS]�!tv'l@|F)7GG׿ˉoznjӹ ɘP,_)g\9/?^2{^9s* J�@LYf:Cxe@gFԉBpv=FDN~ jfzɃaFnŕm.Eg?|o&& i`*1nGHt)pS@twyPS1ګ^&;~qM胒�cWmPb17!h &C΁T>c̙0M]K`.f �0a`QgЇ>#($DYNA-/ +{3uϮ& sCo}E2a2ve�j;#r!#PiBfH52  BqC#$ L9p5BDJ :FNyȺJ:yHvꗲn-e_+H`� ڀ9tfu3K3U sv.չQˇ� H\S,3ѿHV,3S%d$@D @*0s--_$p$t,PɝEyS@>6�ʔ�x D?iJ~_{ay?+>q8t}<uQ$u,9|ɾ-ҽ w]r{s#ҷ{7\DD_輝Ά1.3(:?HARK7懚p(4JBE(;ʏa{ tihdK-~U=$ӫfG=FgepFiF8Cb3d�f0N@:WxҾ$Y7`=Yb@<MO' N^/ uX|kdKOJז'w0]ҿz J=i8v:5@'AYSSk(XЯɌ#:І'0[ 7,<3Y7b*"x7Y&FI |A�ߊBfwKOiJAav86}rYg.&`f_@JdYúpdK'd|!P@qhĄ%Ԗ; 7OXoz0b5Z[}[lFȣ]&>ˀHlO!3׉�5G!K&`\ wSSE.ǥy28w>`I 2I- [,A/wGHrjn)!}׏cjZ<7�rr|J�nMJX !alk.HM9Pn_~Dv{ѵ$l.8�ԂTr-9>bCP9m_$8~%G$e�|o<`UCt Pdn* JGa<%_=R׾ (QIKSZ0:ghC3<ý~[cR<_gA% C~  gNǒo}a 7ywp#B⣸;f @ᕚ0Z3� $hÙf?ӯ37Y[W~HP flITn$ci,@'Û}LuE{Bݓnj=d..t͝mT[Yʷ@6H^E AuOaT bu=#$Lʆ}LhH+}9Ԓ|LPq /Pu/8u?ܠ& ORx;GWFBstwXU/+uzg/ I>|�Gom饧PzQp L1/Ӑ>gA�~Tg( ) Ǻw~\2=:~0�B�:�mpwwJ�SYRK$s Fi�诇}JpC8猱&™�n$o>5Ǡ,@WW*V9o%F'w|:klfrl̇o4Ow{P  |$N"hΙO^AdpN# '#;]~N`JH#`4:2J#%`ģ>z:-5M1�\.)7B߀n4N&!P3 P¾ADPŝi@ߦ`o3IAR`5T@:�+Idj oݺ}@{+󟟗 ^(o! m':7Dl盛aL P)`' MIe P]2޾ S"?zqoW>+?H[yHͭx"g2ƜOΰ ၡK#ƀf.~-}HNy \+? |  $'T+q(mz{{M3}?N~+"ݝ1U0tHr/䬧 Nl-L0 r@lG~8% |wJwO>V(CmPy=SMZ* ח:nf!\uB|%+y>*[":]zD| `�F#�@Ҕ$߲I5>ۅ\2 _5§]S O@Ҍ"g3#YÿEv }r37Fmg9-3"|B 1dT EL VE 7 H/z>9kPGٳ!?t;02KO߈_ҶY�08'ه'uHhsW6x9]m<Ha ECbzp/_ 'e>Ϻ#f 7{w'I MF0̠^ `+W?c)y7.]ܬ->{ǔ|'rbxE6I_o9?6(OI ik_�4sX]7$' 1.Yvp7$ɮR 07[!0U?d�l#͇n=֭;Yax%|=F?z&꫒CN->d$]s旰RxGD̕˲`7r5oϽRֽu2򊭙!"l-@ Z2�6<\z_qeGg2@ [9p÷[$ĉ>wc/=d�\}}x70/'9%tO|-�pCAÍSۯ+_$k5LgAF/yvH;yMLt�G>n|K_ =@&}:BX^'/IvˣҀ@Pڑ^m >""=@cſG�ptJ>\wWw` y Kcib]m?>ѕpOfP Yu`(eQˆ Nxg9ZG_|_?I4f'xNj*`2`V�J^Sz&HeEx>Uha|-"oP)Ը<ca.SO<>-uIU5Zͮmw K'w =)gfq9̪١d-UϹBVUzs/+A356:>(DJKԃ"eZA6@Z5`h#E@E4"IN بI8ubɖbӘzSʲC"%~ߙ9^Zr].r9s̜3sgSO=c|O:@6Ox_]=oXQ4@u{}ppicPY![7ۧj0s49lAxO%›{{hgC9+WFxC۶ ˑa4 ӆy[j^R(L ./}?{]tg ٘[w7S_ԫwHe^|şݻʕ+WF:yxtz`ԱwGWdoJ >h6gw@"^{ pC6e ,)8/'00 L>B#=ن7x-Z`վ~+\_IFg#F9Ai:ds8YR_\z�V\-4 +˗/Xz�pGE̵A;O f/eIlAܓHT\iz{c=fx`"sz7.'V�1d4b.yd/<<<`G/_{_Z Jeثeȡ_~y:j]">`-[�Uxѕ:GW鳧Dϝ͘Ky~|g*c�8`[338 " w �Aqq@Ub �yfI<QFdal \oKF{zw Wz`sA~R}4͖<wUOXm6S=B%GOO㣀^6/?ڵ_ؕfL)dQL?e=}ƕ߉XS\(c0@4F Lؙd;�38Kb%(]!c#\y$Kab@򉥷Q<xҐj݅9&i%J*4Ԑ<v/"ö0@ɽR*8d<<?g[XČ_ȃe<,}xgx=>HT{<G?VGםϞ={駟~fjjjɸr5j1V[HG,X<?00ή >lyjv ._ ^x曳{q|4}2F.G͏Si|Klk5,8Ka7iőa^:4q<p A¸p!}\Bm2�-M13ixS##|;HwȊ`1ؽq0XtZ-F!!5 j?'w}yT>+\w2*Կ?ܷwo|i*ɫؑ-a7u)9h;w/N J0٬((1ZylGEPfC#n.EZV+�,s*0)BOK/\1i,͖FD(* ]mXIkbRt nx^QO\NͪED+/Y5aL*eſ Ns`QoE:*'@t'peтIӢ.̟|Os_ugS] r\Z9n'_͎1t; 6at7c#s(1#cpgT~VBrր6ˠw)ۅ]RI蹤g_ αB1[#Հ$ZTx+a$ӗHnv0sZp3 L`*#;\W*8P~b +>Yr>>sg@~lOw&qV ȽzNCxܰ`4 !N`4maa@4Hj�Pଌ lQ4[K:BQ6F +>u p\Ar+d:ⲏ$ _�F $L@_PF &l|A &"-?Α7\_!Q2s!e>='sVPTT%V(SvtSm|qe?q*DVƪQqw]gu+"k T<=F 'Cae1>H ,$gD(oy/ !9_=W�[5�[@'o-ZmxWWwT`;kS!H)P7Bc"/$ = Vg<J8- _@\1yj�j 8tU`h$6XrGosgoO4�PtO:3=-Ks2ks7n@BFˌ\cgʲI\Y;^%`Jsǃ*7q:qcA~xœp~G7fz4{!^7Ho+OoҮm7'6rDфԩТPU-Pc#GHv'TAQB\ h+t%#n8g "-M"$|xDZMj9s{* Y<q6�:ōќ]>Q9V<:wkM W\nȯߝYY0y %Bcj\q u0=~~$* 75�h(1q-q߆㻗w훝X,ovASkfW4>t 1M|*M. @awn+|]1Йan @}lKۿ;;N*88QEhUpKKsKc΅ki$6m~Lwy ![ƀ2�*G*3gv mi}wv˩LZF硗@#$cčWuᦟ;KZn͘+p~8ter֓[v>֗i/[r%0Hځ7ϭ.l t3�5q:u+}l]dTyuX.+_%_0x㭇6j3? ]f0�f y…уw6]zM0>yKK$?78Rw7~tT9u`�ͮ+09zZ+Sooܶԟ.g<03_o^ݶ߾C" Ι}؇;j�V}�Ռ�:2S=]%p_ 4tbߊզo9n뷾uto]>Üt,e($ɣ?K3LׇhDMP|~lEqd˶Ϸ}z'|pRUS>;:\jd�( %;z#Coy鲾=@g1c ^)"nnzǃ`yGWŧЙS~ԩ)M:yB~�o]\Az~h<?}mqu3<dfs(IrM�\1BPZHU^kzZ$j4SWxG95ӛϰfsGLpTވq.cI@Hi{ݭ_YvJ"X4\T L.)&V}%_ɡ7W/~榯R㳾Lym$ "!J^� ݋'ޖmȍ=ٗNᐑ:IIbtBQKĽXH4p:M%aTvFi/1SiԢ3͓psʲM+h!]9Z;ٞ3}szE彫T~~*?%ftB5Tz*qG{lnO[>='7՞O1S`K`@ TSHx L iileYIΦ'd<<N~!Z=|fۤK"4> X &Wi!n#%9fD.-[qitE^ٝ4&,*Kc {Yv/(Źus0W~cg^*8^g{ T~BQai[P($/^m߻{޹-۳2?ŮBvEg~:ӊCG> +_DLJF 51%2M:.eƔO[#ͿC�Hģ7NZeU%dIT/Kv'!|"L#x d:JQM0~07\&eaMyȱ˚%(|1(dڋ3흿93u\k/y\7sREwO^L۔.]T)'!Po j\8#ҝ6viג `o9vqive[qwQ!ߙ.2Rm<Nj3yYOdVoj X8剂Jg63l6*AB"[% ,&&(AL:LBfW>̿VYnZb=љ]. ٷxlOB2Sb>:5:ʹ]hmz-:;T,=<:~u {zfL <*<\F81lWm`իV}jtUƀ#M捼ph ]t,YҖY2\ڗ z3ĢLSA;X2YҒ(�8Q"9EDHZC¡G(VҪDEMNA~dZhH QWB 0&wˊ7_gh\ X&dw1q|8p"WHL--ɩ|9/$L'sc&n|SZ ݹr+2M!H5:U8 j~@�[/DB~3qϐ24,9g5oJAolKS��IDAT:?B*P?'g8RJW?c<*j�\1[@|[G;zUXW]\^!k %]qv<K7mqQ\W߅rһk^n9Դ0x .R3BUtx];Ni8y; j ܰ*)WHE&*8 kZ/t im+.j VTq�S.tjJ]4y A=/Pn'hsPhn+Ux).]j43 +NHMh\ Ь&WȄx\E!>T+j.^-T qkZtKzƕٕAZt7J/Jy, } aVE����IENDB`ic04��ARGB��%&��������������������+,�%��Ń� ½�Ⱦۿ����ټ��׶��¶��Խ��ο̦��Ļũ��ƾͧ��ü� »t���hh[XXRRQ� Zkihb\WQNC:"�dc^XQIrĿ��a]VQ��sXQjOJ��ktnta]R<<:��kvsfniە9A?:��kvudQLۈ!��ot^V83&��oek~-$wA"!��ْ82*$ʝ��h<84+$I� /DA>82+%�100)""��QLIFF@@F� 0IKMJGDA?70�jȴwIJHE@;j¿��IFCA��ZbxA=dIJ��RRLZMKH36:��RTSH]Zܐ-89:��RTUE<:܁ !��MQ87ÿ�-MBOo m:!��ۅʝ��N ?�  �@�ic14�fPNG  ��� IHDR���������x���sRGB����DeXIfMM�*����i������������������������������������� ��@�IDATxeGy&Z=ݓsIQ,~Flom?{q~:M#X@=ԩ{nwhBߞs?U_U'B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 矲O(@jEVIV@O aY >O٤vr,& Z IǩoKkO{KWI)h#b$Y`Yt8ӑ<3k*-泧H]LEO" ,-p9\ TNh:lt\> ]sZOg㝍z |TiЋ Ң_YCͅ'?g*:v::dT8lmxxѕ/aSSͫbToEwivt=Di0¤K-mf ?q뜺m+W3>+ xRmb4�U.&'JMmr1QMu cqNMz{?^VJ==ݦ\7uW_1]R\Rr_oNSJjDǑ^L1ZY2cj"\իJLCp>�W/+'�ZI\!^7㐭AԪj cP^/W<l�g3с،d{ISW::#æ)zG':Is^hFm==~)O<^[G� wԌgoa:)iU Lx)1& %xX@yRT-0S]Ŵ0=N:pPw_aբŕJ>W*˝Z}ʣmzR굾j>RbrJ^Mٔڐ kOO|auGC0H($8Kf3Y-fZD,L~A*]@[}DRh\u Š@;@4N] JeiY L x0M'M+N' 2,HiG R|ҌIL`*w &xɒg @~_dm4o rynKR 6 l$M<Rzt9QYf/@iZk f@%KԐ㪩G8t{Z4Vʣ8&$ÇcS#GνX`8xaɣa.0yC> $ [ 3\} Q 1`yoz;Wn*kTu6gjtS^_N"/u?]Vxizq4Ѓ x8S;!%`a9>GNezs*l"PK̐d0@!F*@`#?1`ȗ'd҅: VOAU$vkLRdxB(S=@ 0HY@Ȥb`cCW*m졭<YVۇkS]mj[ɉG:_>|dzz7}KC(Q<Xy; Zt 1O�+;gz qE4fw:[֯l)M]:5ozjWy~wjtz6-٪cg̃Μc'VyF�V+#-Lc \:ǣh @t'SKdly=S1Xpc6r�"85"hs:\ '⎒^(%6T<Kᕝ d y�, A*!O-9)G e.#L[1in0jpG1i~zjGщrǃ#=|tV{ϟ|Ӹ'-JfAem*q d/J*�,PT!N0Vg'+YuMoY95|UO}E#&녓oM$NaX3Ⱦ(c(A @aDc2T+Pɰhј;R&LJSKdly=S10fj3( `-Yfd+⎒;%6T<Kᕝ y�^,Y2�TC-M  d�&N3ij]fghtcݏ?6Ч[m!A/0stX$Rli9ϔ]Eucufn7]kYzٚɡM30>i6Q3SX0!A<"=1}n*fT "Հ Tҏ4Q�4;M3k(e lx9�9� A+d"(er\Z,OxJ<`%s 0HEdI߂1<塐 {F&Ƥ`G{Xz޾>41qc ˉxɀi! ttT&%4Y@i.eX+Õ~> ;/hF=09r#-vLԤ>9 J<Ѧr= yY'<"SӀ |V ,NI4Aљ5)\^OT fC)`�X􈠕A'⎒^&%%ϒDP!):Bg6KA` s5aVI/2 $D:ƻ5x|BFH8{_3gFze?:?Cp[ospg7R�}fHBH <u*3Is(8@?UWo޺l+&_4qtMi܌/{XQ7˒\"=y u{aKD �/ x?Jbd 6<>)Ay下\fWZ*">0 (gqGI9|"=,x_�Z(& ęGyl)m@Ƣ;:9Rn(Zg_d -]Ë_/pp"c5h Ch'̠|6~ONi&IX֊ czMUWݸ+Vyɡ-K&M;F <E끀<�H@O8X'{ 룴g@1Ԕ/#d9\B !=䁠 X IF8)]|D,X#HD>|�KFy ϱ6;*ژS&؞9GPY"\χQ,˱hY3Wt$8!Gpcb3<w\:vO2Y ه0KK$[@IVE0&<wn5koR~{;&*松v"<Z዆{6Y8)$<q>ȩ(Y<P95䥢|,G/ЂeHy (g=>BNJ,:#L,$"fxm>^J�%\<QRXjjm[tvV"gs=VD|V0Se̅FA)G!]6c+V>8t__Ǵ^͚�spQN$uIMdؾcz/}j׮<c-9)÷{On\d*DNf#@@p �R$H'x|,=SQڳxsjʗ2KEX_.ː@PL{|,$#.Y>u0G,X#HD>|�KFy ϱ6;*ژ3>xE|27"z>"`᧘/V{ pq/ .6CWZ-_y {B JOI:*,UaLX:{.| kLZ;>>_B@N' rsy^�� =q>ȝ2<P)yP� { f"Y�Q3(N2p#L�i ߁֖y|N8 &EE,#7!hr,JB#L|-r"0yt/<5>GAݶim1!x+@hSØlS?KڻCKdžLhy1ng(6n(F'瀀(`�x0]8X'{ wj@@ p>�A|*2\Id>"<\F͠G8(I2M�4F@4<-}R"%D ,-E|.ƫbUE|S ntȩdG^cԆocK~,#`_Ukk 1x ,RØbS{LJl7n<G�opA<S`>1) 9�� كD�zye-=Syd<(OR.$Kh:CzHl$,:#L,౹7bɈ2L>xBNa>2| %HmfE"e,-E|.ƫbUE|S .2Q#E ЖmM^kY?vd~oߧSdJӄ5XJ Y@ '!oЎ 1a˟27k/G>xα/Z2v3*t8uFQ4|<9dO"*Kd4ˋd)y ;fcUf ΐ@(!=䁆l-B P/UxtF 2<o :Y@ʘ):#QRp9b71Mt|& RX_dF4-g"~ hZu~瞶o] {|p^MqZ@=q% fO{:'>ud׎2uWst>u Q4|<9dO"*Kd4ˋd)y ;𩬺Pf`%4!=P$CzpBpK&\1dkRHA& <X0 Q>Bg6J "B2G@F=i>.\KcLԈtej`KM>j#r_0@8mO"juX2& S8 cvrջv=OjߌqZ169E2H"[b끀!y0�<H qO@NGibϩ)_F /c9r|,CzA93pRgPdb 1dkRX^/扒*<ǢV4兀Vkcޢ3_E8܈L"䳂 b([e.#5 E ЖH>BXƛ^gn9/ioo/�M+:XPe,_xkb ,(ӧWʪ g7oy/WhP<ddd�Na3pe]]\wm#~>!űTP!.C`dӄLaz調vOdw;ǟ'U|姻Z3b>*ޜFF"U7=se$Ɠ=}"t _ƜA^**t3bG8)]$ti ̨'nAk<'&QMa Tט)(f�4-S!k.Xn 8/,t)IKtڄЁ+Jt1֏ޱM~'k!GǑCfK::o'n{ _?8kaťiP`TؠDZ6/}S<s3{́ ,,,,@o4oK{mVC?4cmNx)Y M�"$UyL=[?tľ{eӓi_`ЄJHH7�]Ǝ]9]u~d�Cl)yRX M�cE^coȾJ o_?Yp=\xɳ٭DAj54+y Ga<txmc+W_08z[m#EEg([@. O+e}l `BiPl#t?_sK?|G総k|X& $ $ $ xIZ5j+Wo@p.:HfÆ62L}_yGGLOۏ4Kdddda/`t<PO?Wfw1z\±}&&�;xmG YSLvLdddScʼ/g_v|k鲯{/g,X\�dU6 ԧ^}%UlI2#&(Y Y YtXK9TگwRp,/*l"K�[a?~;t}*aM_کLEdJ',,,p,cƱZ 6}cc{v`t$ 6Tt�g͜?4O~׵?y&q#g[ c≜toX-$`_G~ۧcL*!l� @a\k,S9;[,߷\ULM.ђ2 pC)8wN*NM^uϪ~;lt)dzzN�40F~{^5}dT&k8naJd0@IHHuBWP׊B2/򞀮z+_Ggg4(l�h1aukoٟ?exчTSe<z.@@.n P-XH:>i4!kiBz(j tL:,uJ7\zm}+w*'1k&tCg E?+_/zxWmr -ȉR.ᛒ%Ʊ008<R7s6&L@@X w7ar&1eaLpʡf;}k_C@;*ïơ '�Ii񥗶+?>26_c[ D`sPB?,5(NҎ"' $ $ <S 踤q`+.CtQ۳ku93xo뇁^t0ָgA �+;<tOTUjG`bG4sa @rN<$PY BB),,,� Ǭq*ѐXA>2^Jd<2cM^\ k{[uߺ{߫B a6 G:&�ZVx>ɗ^=䯯9D8ؤ!"Ʀmq�HS>lsT(O ylIZj&Hhk`̈fXS"Y Y,@HRp9F$;Yrl^ F |PH'q0�2cU/ '㣦kllۦ+_2p'yp g@+5 �m1Οs?l/a#c5DhI46b(4(!,0DwcIddn`(>Sep,TЧ=q&+~,ŚxŚu8&d8g3ȣ0NcW=;7:;2}a=•_Uw.NN[lQ\( չ('H;p5R[C'ykctWYID6% yJ!;E2"16sA&j]v2>;캱2nCp-|Pgϖ;- t( 7m�Vjxv?^<*#M-rlȾaqT!<l -%M<GBKdA$U'E^aBC.z(5e%S  ao8hy3B$2~_y1:?JcXʠSELO_Bzq+_5<׽rŦ]+z?Y<#OKφ VbgL__v.^gOeA  2Zhgw0 Ή%է%H`A:3gJ1'h#<`f7J$L@|e cJ؏En@! a3g |@G9~L9!;L+Ύ6??R{)㏒ju+/9ů|.QY� CEX�KE/߱ⷶz蜩)h؈@+؁挘_/hpv2gI-Y]L30>_&Z3yJ>hIddd cǑU"o'c1J*ŏ:{eaة>')GH g|ő#oU2!K8)uv^7RW�[AGV-v'N/WH=t~mh^W9b4$ :u󦖟0kI8cƮDx4)@+Bq[8sŠ^H$w h!(,/w@2y D%Eg# Z7g x2�q[<i2cv22,ʉ uδ8v).ac9Ȍ\5- $GfXX2|oڍO/Y7_/H̥ ,!o!O�XW:}ࣿpE?Z 6J6V6$iLlA9]l"OHې]-OiBGwd"/~OEI�Ż&R,ͥ2% $ : Okn% X>lYCby>AG؏7[ ⬳FQsB.<i:uqЏN2CN|c[.@S92�w={^kZ;Q HCf#L SA ݞR 1E8zC<ȟҙ 2CaQXӂDzD>ǟh/ r Sɵ4ț)Nkv`!O/8j87pp)մ/tv̲<vLt.x<.otyGu) N?cǛY×-ux?ͻ�@0,aNg>.X+q|$`mϿ%tQ_rs!W%\T?giWʆMx:VCđFvdч+YX x3xGLBM=%- lN!Eɀf7"=HP@ɰ@r;&Y>,iG8<L't x>rCMpNw(yE9͒y+ƕܪf~\ E2r9FDĪ]k 0e /8!DxNZ\<JtkyӪcN+ Zk%%ISNRc6z t5 . 8ڶ6SnBaW q;AΞ 1r"Z8xhTEnN YF#2 9I:-gMy$ М//<q^D� Ozjq%4!=P$CzpBpmD,X#f/|T3-Pk䨌yB 3R%Ypg#F x#<|<Re\2;MaLVAWSQFw4E^tAZe5W"G%ȺDL2%l5HQH2޴aʕ;;M{_i2maʕvS*acCOr֑o{oR�hZsHpˇ>-ux 7|U/e%hض!I".$6ĠMV$v&=e#C& SGCD@ s.M)(5' t6te/0E^'N{4C}ʂ_/u+$I|`\ NHa_fm4F9cu-<ۑޯIdV,<#!sivG"ӿlXȴw+MU{b z\ïtwK0P'a,L@/7&r%1y4B�ճV&c:K_m^x;ZmX r3e|Bad;~BI@ذ^j8f>OøI&!tΥ6N `8"=h2&\tY1gZ-: �nxlߣ3DdBn=LQG1!+[B ee c,x2^6/ksѵM<01n^AnE^ƊFӻ|Cز,޼t Er/ߟ--[HN&{ s?s/; typ /&�Z)⻐cRӷr;w޽r⬖e&cr ޶״wlkJpW>ncf!3 fSO`᠙ؿO.7IDeRB:m'X$~b 4~'ڑ "Ädtg W6Kb*" pqQ(}Ra B'Lj_e-Os'�" tPE)cn׸S/b^^c,5v27m|ϲ+zĹqQ*�؅=>`Æ 嫮X~;00($ B�xxܵk׫z1<uʆk[t.mISYZk57xڌCbBnKp8;I�uvNG6qܔuGIeL* <� H~.!pKM8~E8Y Y@M\Q(NڗHC_)A:yr4c�ux}q|E|-ݎ\åP p?n_,=wYuY߳|vrP2޼DžNTŶd2IB9vyɫ^`0㠙d8h:V ٺa!M�XYE+z׿sYRLqP{4 %k23mYu r/w &`Ba3tS'B� K '>礀ٚXt}�9\$X}$|Kd9аABDb TGͤ4@'>"tPp~J/8 ˄@tȃ?;)5D}Ė͛MfՅ Lߚղ=& r>cf>B +V(o=YP;YSΣRDCQz~vm}.h xmOcw`a\6zfqQqm(GB #x/|*SYDzs`2^Ϗ;`h-=`2|y,!p>�A|4<58*%4!=P$Cz䒌pBp}F ʗa1d/K[^/!D@ $ـ/#7_7`\_EzrAު+'\tc$_#'u� ^rt vGT&q~XެRLV[Mg/.ww{Jq7 ۷oOO~&"EU| Tkdv7j۶m9kǭi~(4qզg^c~l=9ocb#C$4;.pB@帝 e8~6cX�SV (\N dtB`? PfVd*q֓,!S,-#wR/D ? 4G:k#?;DlB+UӗGQ[̊ͪ.6Kkz.8I).NZ5'^ 7iдT,g!ZQ꿄Uz/cLo?cKݞϻv-Yam<,Ä`{LߖL w 'Ni4l` ãKGGDkԬAP 2@"aT 0H`hVN‰0bdַ%Ѯrǒe>Lny2G</K\t`#qmKƍf o1WlZW1,K3C8'ir~nTkBmBJ`\t/B?jTt譂= cx3G~p2xT*^�oz �u $o<P29@ȇ?sŹ@#SZt'7�< #4'd't.lo%e⺂gL_l! &f ?Ǐhޢ ʿĬ2|.=8hm8͖{!r`]vp^_a&dͶ`BP_D_ϯ 7x-okif22ekL+஋Lu%3KUX6fQ,q(%:-gJ&ZkLKdK@@+Y@E\f/la2@Ibc 8r:t|d4u{p |W?at8}5<Wa̦ov׼lFtVytZ<رca:<iXZ+j 9| j\ŋ+|d [ .]Kswb2p]f D`mbI iK'@Y436k5IClujHE;ed@ضcSL ?kTOu֙+ RM[|kQ&|N[e<tNs/3s^h>_gӗ ~x~wM@!.@^kv.hF+*]=fťW~+89;LO@~hHo�v;�̰*MfpaL^ d^J�wDIdaadkĶUWG N ɪpO>]ۭ~˧esy>zֳrY*g]x+|^+"~ {=850B_:X oxZ7o<k'�!tsve\eN3z) 1X FjܶxiN%Ksp'NR.])VQCʣ,0o,Ha{^$=lw ^)C@v #x WԧDВs]~-o7۞3>~DڗSSwfa XU"䇭"yk�5:4ڸqB>rm K͒5yy;́L<\5eW��AiS>"=kw('7BGnRT,K@])$ 7 h EmM-Ʈ-L<=WOp"@GO4:d5m~|$gu{G=L j f>kWZU ^-_aMCC+O�bkh +,]tV]-3K Wy‘lf6k?V7<uͱ+^~e ZSӼ,�Y5Ai^`M 8i�g2iHgRxD\N`kt6Xz{ +iб!ns<>V^:v\otڜ_oȫ+wWtcnݺ.6qzэqKV@30Cgin7|GEi@5X=9sw]kW5G ptl'I:$#Gfw_x"' ) fmũ<tysyA:x9U'L;ow'ͿAHnK'=Sj|>#G}]wݏWjuiU6y/�n7rM8INBkv3#aT;ōɀ\~y7W jOmdG�U$/!"+fC p" qBN @)$ N h Dt?t& F=tz8uex||Ief˵7/UF7f-YsϽa&>` eW eV�v[X+b}z6k{Yqf=0{7f6%'}"7UeԄ8p&8Se1N' QI\]rh*loqȆ@8{ax.�'O8 +&8>Ïvܛ^d|ӵ}X^cx=5{GGGǡIF< x @2t۟1ϩf͚׽u?Iʅ30da^qYq5{F3qÓd?Zp?Pc2P.U)b!]j).p,p,Z^NijIm1[>7٭#'B8r7:yn΀K ?Onm/zsqo 3�< ;66{_ebdVBi|=/~wNέ濓<Vdwk'yο7}Lr7�쌗S~L@d��NtRyAx w}'~`s ۫ &hb6=qNoiЁ$-=tx8=}f n6rY{��@�IDAT1Gxmr~Bb[80�5ӘX aPX)x|p�X'Lԉ@;ᦗYpW?gkON9Pwq%{AF99@$>]I^3ho)AdgdmS쀲TZ\>BoѮA'v]@[%<gxYзN 2&d`dhK�XQ巿پ}u-Y;Ph TY7K/֯1U| ]G�g {urBʷ8}ϥm~NE!08:qRBOgnv _b7~\^&ޗýN*<|p<?Q#T3ҌÐ \!v­6P8�r˿K@i]v8bѿ,Kۍ}�Βs'Oy-]C h]⹂4E8Y` ]mSYGm@8\:/,E? &@NMLΥ̎Wy })gMO8pw}Cș5 ~ c{|.m˖-[_MN> r->w>U'J{|ZN/;q:}E8awKrv{.0$ArÀ,p\`!yد0dYcvmۖN[>86<y׾,v}��m'[p99y 4VL7mdpf,U:zZ~<ISǓm) 7b.r2*{�:u9p r_�bN(g\ 2LH!Y`n(1a:-4h@CGVȜ<p¶+u1q58*vfBH7ͭN} _L~e%>Pc2'�2qhyXiipfۡ|`/ ]l]f<7jp@ʸ?ˤCu?q #D|MJ(qzzE@K!Y`Ӧ;_5XlHXo<a}o}IS~Nj2d]/NwǠLİ p^ }С}�Z>\">/V@n`<Nh7O]Ud@'b;K/\qGx�?ATvUlp+~" I)G2Hn6Ikk$4\OVG[Н�OGtpb�:xװS6s;kvZ50�o?S8EPe{v%&�16"8ߺŋ$+/U8ŧ >Գ|9o7vq|qK|0n�WƏ/ct} 'LL:#%% )$ -E ۢ$:yĀʟmih�4(<U?^ڃG6=E7^#_I53,$XZ2xL5y\lӻfcs;*w7qVy'Lp�(;JŃ[i.i&@5)$ @ڗkJc@ ,m4'ɳZHI�eLW2f n1jykqGwJ#h)D Ԫđ_P%j>5/ye`|W�қ�"H=o$dI PD  I$)Ybm Jtl#$NP3-kWΛ8) �b[W]q9o2˷L1)NaZuibQJn61d@ :(6PQ5qo֎fi~ƼYw7J|W`yc� (0J@KY5}*^>' $@@#1#Cgw[@Ct'Zb4Y'MˊLr-d,w:�ƵRgE –U? "7(.'�nG>Ze0IӃjvtt)GfeWN S2%>wX%\+Y Sp�dN$&zM&O?gۆ!퀠=9{:yWwF1E6ݯ<׆Jb_4-bЏ㭀PzzdTJl g0vj:WZiJL<�WoFwٴ)8V9)pA䡁WsJHrxY pvf6Z4~>�?ڛIm[u~ұ_ťU{4/-7>ϴ>r͊nQx^w�xZXVɸZj9nXvm~Y%/obϘw຀ ƼMP6Y+qq9�� ',w ^`݆!'Hc[akR:3dlI�?$tb |q_4~f+^m:Z0'�: 0c9<j3k ] Ν; beКa�]v%gZy_QVM|J۾%O`_^S V;@ @r!N'ԚL.�4 ZđfĉGiVu?�~=k֚ v ԇ6m8 u{kPXZ"k܊�Rvez]ms+C[\-u/]nvof_g*Ƨ$ O˅- ^�tZX>-nQ2`*�2 [ ia:rN80)T[v$<`_4.њ~Zl {68�Ah"mP31j+M�bkǘ-JO�t3rl՘ 2oQvsp8b`P<ci LLDJM)nI H݆%g=;$#;:w}H?O~u_K5;N�mc!L߂,1{uSk @6"b{@+6�h ?вKm\ӍÌ<t1x҃ e~&ಟ<F~}*@ @Y(SXݝ<]?c]gZo$󯡡�(L>:~wvͦ̏p*yiDž" a \~N�P~hdZp uJ':0+i.|7_j&t6Wdlʠ&=}L`wcǟh>/- u,m=gu/w7m[~Ƕ3ۖ~w}\淛2A,Aֽ,MWTi..1 Eրk @xO&�!C.YysMqM [r- tH$@4�j9Rh UT: c[`;m�v8~*g k>fǭa7 ȧ~g:B|a!43߶mۀ�*}mx[Ry<**iMgvf݋~Bֲ:o9lvĀU6-[OCb{>W$X"wAC??+U?pMawFslY(R|J-`ߙ2*Ώ ҴKl �'�a!m^­nyabփ4*s^Z>-P~n%*_�55s] �w�{DT@Q؞S<- i#td? @B=y8D:|Afjb,yC3X?ESG|G>ꙫn.L�]v paP_dS-j�5xhf-ӇVj gn[_jkLٗkUyYyQ�O!L=>M.Bg":ip.aK8(1`$ؕg[} Y~暟[JM MY@k:YOCMyuuprzP0/@! >-8Pj:>ԍ�{ofnW;1 |QDPi.k0Osg�~xd2o< h]HiHZVghH? utr8]�G#sӻlY_,9:xc)1rX.NϦ"4獀D Qt g*LkO�rzn .z 7nsf^ځwHwc_Em (6;:mCA4b"Ayܣmp `u'yΜipWw2k{8f=&+M4ipcLr1oVYխf|'=f89 ::-v`61=�*w6`G:M|7MmtXh$t7 Wǹ5ѩd? i�l-\s):{f!63x]ە?ěL^lCkCۆ6?xurtaZuVLsb�=(Cc}F-_ 4@Rg 9}#G ro�`|.�Ȋ= ?˪IعCJRY%Y@/ܸxMf5gɞIc|s; 3 8Nȑbs~\:̣ K!Zɇ*)T}!-մ {xO� Xd:c )k+  '9u:}m^ p?� ):|WK[MtX6CCΝ~G\#k=҅ԡg3#U9m> C0ߐ7c87g;'N�gCg3V�5VӖaT*j0ps1`CGLĦ�ONgnLJp5h].Ӊ/Q eHRbjg�f7Nm{bG_3{<z2Q+?W>oP�ªrǭ6 JcQ+ufys^l*xD7Mu(>$ �Z �Wn�-̯ lm`‘P)z HݹltW Ԡ::$[Ο+u`.{L?=gggb8ԡp(LGUJ|5dz:gʃy0qk�mb-e\ OE^٬9b? Hg/y㫂@{.BV"g=݇8$Ba5D%$[`f[*uȴ-}c iz1%tׅ79u<ӄ 3:ʄ!+-+,y<S& y0=l3:u(*c 0۵料@X%�ح|[�Dp?4UKEB@W / wKAN\p�X#pJ,w}CQ<}ȝ dljY~ef{>bYwJWEf❉F}Ecb,iɫ!qa9xBy#L+L9a9Ƙx} > +;$7oV�)y\Щfˋ^oP3gZ[u f[7] 8}:+v;6: 㧃&ۃm�OswCfp'sZ,5 S7;|UVxV"R|38acZS. tbI`n\Iiwu<UC?t<MD[7@8�*eЙl c-@{!uf=sF-AN i<>ڳf ?㲄·eִ:_KAq.)L<E4rLayc]˅¡Ncc>; @88"Ķ�܊�5khp|7=Iql>W4ͦ6>fx[ \X ہ9jҺl?Fy~:7C^$Nn# )T 5κtt{>t6) KYBYt2yU6v+«\aZeUcէqGB\38 p|,[b~Mk01&|wmz*r]&�3{�|7@{ww#{a0sΜOp}] b#wLc;N|!1 ۈ~O::}2?�'<7zjUHQ}fͥ{:9 iŒ@) Exͳ6\(KeCOkZtYbP_|L ;:5+ͮ3|q@`>O%,˄8D=[- Efcz7m3Sg�!+Fk` 27 $M%S!gbEk txt_?z�뷊!w6Y7?Тq4CZCivEp,GŅy7󪾢x.: 7=3-$KZ̫ecQ0VD]0 1h݌uεoZm0KW71ʄF?"Zǃi0Vرش&R|\[: $;$bgiW[ny~+卐~ի ͎ٙH 4ƄՙaPLr)_8Q}ʯ*s ((^"p iJJxċ7ji X;NXsJQ \&3oܝfieyG�mJ˓H�G&�=�Ap�@EMc bǯi ꊫͅo|kϽEF6&4φIy)=U5]υH"ٰ\ĝH(kz(``C2-DvdBXc8تOxP�.JxXR)MLLVUeV�4>:\>PYqz.o  ӆGe*0pt! nW`cACFבtHӓ2Ǟkuhsf�9PD!GJF\"X<8R ,@3!t `iqH˵}Kϭ=xgѶse_;YMqiUVlJW9M9^0XWl_X>7Kz:7s<GjUL&G ,x/'5Իq29sx^}Al[̯ _0q@w}�hwqn � 3T~�ɘIN Y]+FY ՘@죃lj�1 KMug:Mǒ帣xhFN" ,3GpJa^Yp'WJJ v]�m-l"Ny�#!twzꠅFye\ЁІ .xx`{9gP.GL5$N25+TQh& PV8+le<C_ï|NC̱B|Ќ=bF0O5#O3SiIgOeAFli.FۈVƟ.ȏeW f| Q!í<PI`\L v% ]  @�?\2X#麙|j9H%aXQz>ӽv3-`0)Y ӆ;eR�]YQU#xe0t .If.�==a=XBi PN�Kp텩Lpk݅qr8Y󳾡Gzάu&6cm(=TE23"7iDW3Y#2K2G} {IsȾ}Xُ&h�ř,;Nmo8n$G'/H5xlmxH~h ۼ0>ƅ-J@+nݸ:ugюH90ѪO1l=a&Z=}G(OebS-百uM/&L%Ul/pf,CA-1Gaˑ#/B6 $?&vfdl-^,tfs*f xaM$տ8`pW@ǪpKn3[B,eթf^*4yBE1xc8=rr[ɥU '&͑''Ǐ޻׌9U1pN,d;0At7.p> ]2 f CqChV�Р͌m%�XWd$1ڵ4 ?K2 v81ϕ=_!<}lL1{1) eN3pnhys2l{uv@rI?N8<s~;B0ɗVׇ~݀i{sEO>Jf,5CoLQs}t: /1^fQ'�90V~qycL"9GO$.o.z(7[9bam5!sG<ob\*˯VWbW ;\B6DCzBy|+L�r$/s�T"�:uq CaV ;H~ādaÐpR@oRU>VB!ĘxQ3#}t,^fV1ctXd d%p#G`/ۻ6H&2djXH*2~dPD,#'a?c'ή#Şyi~ݯk sc::(0R8.d.@\ЩqzS- EE|1NT7u _:t^5?7S|یZ>J7V`^2& N=W=\JVDEysEYvU @9=Y 'dI2a_Fa�ﰌp(\ Aa6l(;1KjGCO{1{qgfkq L2;'x\ΰnTql}ka 0rotALVyd� g)m/1)쩁 {:|;oq\ .:7[<4:J̓|7N+~Xe47Q&,[LgHoH8^;~9f߷?ܰW8e|[/Hu5 W(+21cоD CQ\iVVKt< Z(C5uE e�..б"բ;�qZt_5M_1ȒLt `;@\!-6ئG6C?O4n7.,ڲt ,<j z?v\ O EFeSsݝ/+z!R%rm$[b ژ!NM[R+,sX<04pX~4tuթ[̦g?+Kuڳ5 u+dzTixdg5XW\sۇz<o6?·71`?�]#s&9\6X(lFV\Lj\dj�2�m: e�xFM:u Z<nܶ,p*Iett`t"Kꌁ%<% ~\. 'OߺtZg\x&W&M8/\LZl?-G524P.8^8-#(QmXd?M M[b u|~zv3h{<A3[ d"(_9~dhlh87$9Ģg� @@w(iWf2lџf2IdkZ@bA( A�s0`ggS_xェꮪQ==ptT:gwE|l߅}}ywm1ҽX@Zx$$>D-I7HT D< �3 cQm۰c�\sh83�>(;] \&.3m> CshČ㇀ɠçwc aPA:`ts<^/tӻ~$@jtN| {ɜgb6n٠;EOq2c_jo mxRߝ=s738VpZ/7ܬD9u xݻxA*`Uhb>)dՈy619~_|7_»}cP%tfs3<cq}qL;*-1Lgb;eu4ҷI4.CEhL�Ӭ+h .;g�k5o)Ơ4pqƐNDg68ٻሰ9mAsA  n i68J/ ޙn~ӵwY'Oׯ> }Pt湧+' uNlc.�ڂ]o\W%^ X2_:@L3m;^q2L{G<7aa$,I-[x5ZW$yDʈZ;=܉/UzK_zGExm^ r$W@_~B'LGv#TUA bGc?;6g2-|[0�k;9:f6\%h7L.~@[C+lbz CACc�$N]%ЖH �23nV^oԉ_y:KtO|<N<h�-Bzw~ͮ E۠7e xMSNN>O?ᇾa2˸f׼M䗰8f&gO}D$'_阗herɈ%'~ ydjZ:;oԗS_ ?{fPV~8Gf4@k /l)<z`^j6!8h <¾ωEmo@*K3qit8ʌ4H˹oS(*3EdLDs-#qxG9Jsj2*P�rVfx�ΟM/Ni?^#d[P= GN~ie6µvE?M x͙16PWl5ܞy@:ZN/!_s␲pk_Jq?f8ʑQ.C.<-~ c~1m-=6+?c5| ϭxg^[Y\0?ky7'ĈY;Q4|Zӱli-53 1RZQ(igsAMW ��w5]{h>Ķe]�^qZ"boXfxu7bKy1&/N>&qO?v>g n, ΦMǾtL>ୁ~}>G'ciI36kǙ^U6Byxx}[)Y,Q"sW_#nGdDscM~>7Jylտ(Wsr] THk%'X颭5 ScW]lRx{|:ꗱsߥ4sgf=48i,ϡ7:T=(-290Am(J(li3H`nQq+fͰ:�Pq?\)@$ݘFMQFAx!4twLgcSEtk<7q ͟qt?"*NQLdɟ&ӓD:Gw/acw`}o7*aEtz~ۜ]\\<3ZltB l{zKE54 qճ㲤OCY7pNao" y i!g<`;Εk&#>"NZS> r/ee9/?8=Kgn.k ]Rk  jۖ7i,4Z$;,b7U=U Q\Ύ MsnS4lmV�Lg9o<npt= uhl^:, E.9̙V!*b -+'f`63A 1P~FiwI3x4GJ_ @?ogJ( cEļ]toS�w@X�}�la /hv)s&YŷrPDj;H )D4S!6 m .s~~-/ҡ1pFA]T%_I^25HU$d G|F^'Fs'??ȸ>φ-\r!"zn0a;qLA#e/ aC,-:-[߻hBrlPb([JKӄ2(ˇ)F>y4c!6 b &  >h\C`p1!,e ^ϦWtOt?="Sv(ZNإ_ow^q5qنhW8/+N>-JֶJzdaDDNk}6?1�?n?Ԃ=pE'qFRiɏ: ree<<"&υ4V'y8=JGek#1[/m[t ,۹t8 "l<6�).HTea@t'[~qP9oMVnnك +LAYbMȭG2qy,W08r*X~h}t2`D</s@C. z#>�_O53[ ?_K'>?7)`>yB͸]S׿Tz^uA qǸ7/MZy.2" 4j9B!Hsq )A�79۞oT(GWZ'uJ3*OK_0ƕ!~L+Q~? 4]—xoQ#[{m|m�fl?%Fy D5h֗h'2n3a{$e(!g'�&}l@Uô79ԥA:ZB7'׬WSQΣx~/D;`r+ʱɱ8F 3� P?wG\3@=[ۧz>t~.e nDFn Ug~A)i&c-o-yhakS\)^J@N y=`& aTQ:|Oitق?@@=SǠst?ӵwW,Ap-yixEX6R޸,Cu|'b?.s_�dDv�ivcmZ}@b B@#u~7cI堣SQ֕sG �� CMW6W[AuDAz&!ʻ~5?v0L}DgD e`;q?g]t>=N<_[*ޝ^a}D(KFQinMΏ~<}cϛW%3\:&9�t7xܜ@B!46; 8c%yL1-ila 3o@l 52idL+ڛڣYuc"1zӨLܹ}:=JΥ]X6kmG> /7:3nZ![_A2vqQVGCqh?"p ݻv#�jCoQč60pKgyW XeiqpNc3Й\k8 4%\~┷fGL_Nljo;ukɃGpT< />?3r5BF4x]H'.ɵPҔfw)^ޭm8}`<o#ק:Mr=Utr3.Ǽ&$)U~̛]GOcͭa~m�a>82f0A@K1Y#0@\EXY6Gu4�uly] m3BFOu& ڒ|BptM҅f3Fwr�Be~\@ydBOw�4 }{u0V:Dc2ѫ--+çL?o,8fws Xt`vplFǜ_G̃`Hט :OZ!5ۺqʐgBDlFm<q�p*^s1ߜX4ꛊ3ay#qqPG^^)t!ytϧoڿOO{tNޞ҂�ְɶ?b/auacGE,N+ QF:H>( pfldi�PS|�7\W5gWc謴vLo Q:[=3?hds2G\.7qy.Rz0>?].W\K2nALE+ex.6;g6yM#Vg[ ԮAq rS5k0wbz9@/rAߙGK|PljAXNm(Ghʳ_+eJd%3..9B{/=M}6eΟwn iD&cH֍mx&FlFȸӘKI4k؀VCLy5 M#9cG%@1bAք? 3K}YXp汇wͿJ/| ThXlFCqwS\<n{Ӂ^,A3�.gYh`iNMHWnԖnІϧ7j[e[D\}Ke j Ȋ6#ޕ.򅳎c5Zp)3򿀏|_~w fam}@\pH4;#8 /G�!$\�[yT"%Zh[s�P˨/ce ٗSB:w2 ;*&ÂtԀs0`tQ3_g>6<PҰ(.!<W ˳FN<I+CISi` >Jy5^9=:ie��@�IDATE75uiheQ|9ӵp7qO|ߑܗn? U8i1 \cTGY5$#Hz e<jR~ ^}Ki?~i@0{ؕ,G:mx'͏reipe51M{m6TAs`,f0JHġNYc#b򱕽2=Nx40Q-WV?=.Bz?{D_TCNlNb]6FyS^0I7QZltߟ^2>נk*> bN׌QRl-�LS5; ӈ$-ΰP Oi&`zO<?2rKƫ$B$Y|ա?&|^"o?G>4yJg\! 9"Gj`;�юID'\@b젆Q�ؙ]&oK 9-`�MȇLo;0w qwgS_3ȉC4e/e:ɕLY؆Y�)j@;XD5e5W<t7Ҏ:?9 : Y�͘FtiqM"KR1N(WypzpFO7ÿ]+."Ow=hӹȣ⬏hDڐ)C<p1Nm nvTAlֹ@t�NeɧA�N1y}2=*qa Xm;'Vw/iyBz?e`CFr-Fr*?@'"+M4Cr1ߜ-oOG?Wq+]4ɆIz�t ϡ%Wq3P1N ueg0ڏ~ Y�:Yf$_%Mv\\rKm]udEzwZ>{&ͣ/!l⼳o;~#xq80]vHLa&_V DV|G~ [$i:s礌ItB-�dcǯ] ȣQpW!sC{ v(k\Pyxҕ%[Yv)aG&t\X Ztkq3IbeoKΫu^;+鐏n]醷9xj:)`t16g߸%_+?#zG�PO|ҷ|vͻGw3O:mg" i]=w{#mqLRVu HnG'c`ۚPD zdNߴ:):C-'Oe8Һ<f_Wӣ/`Փ:Qx#8PѢLWoTJ3J&g -7o,g׺uHWMs6'k8m&Оa8Pul灀ɴer)wO,%ğXŠ6i1O^rJ[UWA#^+g/CiyKŗAa!ht$2>& 0_.-!ۺlk3P3vASzO{&NO=_ 0]ҸC>5 �<LRÓ_0{GVf URT|˸`-}G\"Vyr-Ů|.;vKɅP]uv` D], � |Fg Co#,yu?,w=XdJy$F*`̓2E^ W%�|;i4?m?GG[㠟}<BH(0g8%N-⵶Ö�mTعkA�UM�Q$i<`~1�>KK؉Mz?FZA¦ kEh6�a-ɋWIe| )́lT2y@гݠiuQQϖ0=P8Υ;>FkƵKQa~@~y5G۷�:8pogYnSAGC.RV@?U̘ziA΂ƔL *wM14a";WO <Y_ݟgӱx N!:qMi䕧J!yt5ިk騵ӭ`:ܩcwl@w%3!P%#aH o�5A Os_z{E1IU4d91Z;*e&F1-y_KHKϝ >ws�;[FǨ~`NB4$uikNݚō�w n l5! ] eۄh$+/ %J..(r5ibz d9 pIp_.2W�Z93AFc�G!'sjA+w|i5x ++;B6%ޑ!n$WH̿ucJ#:"NooU^tcj� Ft6P%�)_Z뽽cjk_Z:9Dy<C"q)A �ӋsxȜ(  I<GZW:!҈�D=v.?n*v|!'A8=ni#W>7)N|@p-cviI}،jV*cp CѵȩeZTґ-'sڟ_tgFZ m`>>(0)ڇ~�3ux*뙖Zfd Ϧ 3p]h6HYA'\3\2zF|]FQr1^QN`y1} oXsMbs yspLɟ�DƜ>5:WRLz_><ԁFx5?al|ȻˠF`WӦl1]T7V|Ԧ2IFY,;3_sO�>o8gZ H{�AjG=�ndDI5^f� iBd#!if0dz_F|!�2\AWQ_qP2]+mL/Sƙin) E87Y�a;,+1<ekznZ |ѡw9(ǒ'^ wj򑦼>򈳎QF.yyo~" <<<L^t\_!8? 5'Lv@?�Wb ;9~#ow0^c�~z@9;'҉`| & 2v6.jiģF-Z) WC?`z83p݉OL?by6bFqV~#/7嶡WNDTQ_DcZ )>j"wfJC[p\_W}}}srG͹C4ޟrl�H*RoC mx&raaj;P�w N� �o,b'? *q7c֚v\Ƹd`)8g>8tkӑXZ)~qxq�@ZI@" pdO=Gw6( pHPg2tbxOJFDkp@GӋenwW6t^HSS;M�`]p>1sQt{ 2vwfɃ)<}~wt3-;7ux<ʣ4#񒧸~1Crv G||N$nnΏ1сc[ g烜otGKtuoETDw5"\P2]PyFy@A@U@~S'3~Y쓆#NYgٷmnߏF,b(;D-9i=4L�Cs7 h46z-6A¹ݻҫ^/0L(W]8)Gyw Gg]/m lnw mϵb [Wct,ϝ? !WOkR4)N/)HNqȏtJSPr Pt/黿Յ~ nrlp6jGv?dj@?�ع׶9J6Cathx �wN8Mm x_⟧ͣ�VFm#4e|TQ6LCc U0˴+wc!o}-�^7H7c\slϮ5 `el[ _Y::(qɗ^x ~]i,eY '~iW)";̴yCS{f<q)0�q,ˎ-cƀ"2`H㝄-,BK18g T3{3c{Q ` 25jx+y*.X 'Z-*ow]~=pCqF걼u֐2Z vb Ο }Ǎnz{7Qlc@x[qwAEʌJF9?d:i3|e^,w{}FW_.BkDN@?�W8r`F250,4:vgn#y77NJ.(S~$0z&9x\FtVs)Jtk:ַ۶~swogs*l Vhksg=}Mz/%oH>:xҹ˸w$3 *-e2}+ye@?𖭾엝>:ͼ5}3SdD:9kH@ 9c@?�K;s 9S n<�hvyܩzbllU$49Q]e)M H< .N|N85q&4#LJC3 :Oe֑>[g<՞3qݯOuỎ :w'1mגVNg+} ůA:3>oUE2r{6Fl�9}g`M>Hcӡ~�0y,0dユ !q$8~#g0C5T22F*\_rʷQ.1Or&\u'�~} wX hkSĹfh8 ׯ`](+PԏqӞ+@[G޽ui[ ,o_$7 ]m0ʌc;ӡ/c? GmV yIHn}qsޗ)CA0�{eLn,*�$*#ĜwX H9� w,$?t%ዐ3Ѕ_˜WD_O|WC`-.91;:A[ h0ysSf_/Q;#�؍uCy>%N*2H/ӕe^J+(y壸`3 ߤl6gBL>>Kn}_#==R ):l,x6aphTh`ZCƍT `aw� ˁTPFBS>*8Ӕ̤#pns7NeY;H3x Y,2(]i9sa2hgfBYw6\c:ŏ.ZMFyGXU7~c?45ẁyw QgנՉ>�Aӊ؅1ぃ c042D44tEk0~3sODY]EFg\N^21-kx j%_;tӾh#D}<I#2m#*+hx&8$gBVߍ ov>G-E݋F+^jFY]®t1db%[}SSO>NG"50 Mp12h�Lͥ}22Vv݄h 4 p%cg}7ғך\4Ȯ/G$9(dJ45Xʎ2-?x9p?rەݱiʆK޶nbQAg94!>H'D?K^SA#%~jS3Jqɇώ<ٷGIc> HCj�01ip̸`&󇹱璘l p[_oԱ4hF|T~Q7.m+g o.oc}xnwIIRFv e83Z>1:oN_sϽ xMt}JXˣl5jm<qJ].O?J+X3Á3ˋitt8Uw-{|40v-50d1ѡ;{@%tb-w!z 5vAsx|S2C 2~0 7p<UƼ$&7ފ�0HY:IG[@[JrP*ijPA †538vwu؅ˢLe.&XZBHSM<X?"䫢/S- !cd=GMd:ǀj xП|M`\?.NbajRt!,.&QFs xEԝNfRz2^˿)?l7`�|.[Lz (z5Bԇꧪ.?BZ]2t{\}h|_WUO#]4D(^.,啿чΞMO?ţщ ;~5N*rA/K5�11)Bw48n �q=w$|+2Z~|`y1gMӖ@FP% Z(G5)NXS ʿQ4g/�|s16yg̕Ihqg#P?|9�8{!Pq\`l1D_x)(ׅ+ `ߋ_ߵ7gcN0h[>q ΟvH@~�Pj0�1r#e�4DPg _ <o67ZKy(0/2] G(?tiύ7c�8HT 4[%&vVLyfvsMoÀhOQ$S&J]K%[t*hS陿lECx>f}iAvD i%�}S75#Dic̟p4r/~鳘8ChhR H/G/4]<!>㻯9b<3TMg8L:M;ρx-|qiQ�eay0<մСt-5F׀~})/S2(_5'[%塼'NY ^/O>6߿?;<n#X>:"1 ^@?�&z8341B, 2Drg8P8#x+૶@ٗ4J*r%^Ƹdc%p: L~}.uɂ۫tK<<U==jDπT[NX Csˎxr5&'Z xdz//Ag2 c @?~�0FA=5 bDeb1^|Mؗ> ZFW2.z %KZ\ic(WHnD02N.$x-,ٖ8ss}]u,3mu 2^p ,e8B)e=Ӌ_[Gy(F\ko7e}|5�Lp2$4B1aWHR5?ԣa;1O88A| 'HڔIX~ _qµX?-V�sKrv*ke7‰)ͦKǏcI:k(d&̄r+qG=2J(WI2=.>bӟ\C9~0,1gcA7SiHCN Nhdlː2EL@݊l]_BZxV g- h5y$!yQ^|o *P4{O:x黫\ 'jsU<)|;״>]c6r벬o:Ge=D\cr]�ăJgoSwkLZ3f,2X~�7i,wgC d9�4fUcK>1UХeh>SFLSzJ< t�6,fCHqK"HW?:t( :7;o5dz=Gn~(Z: uєL0A[x1=_�WZsG[Ϩ9TۊiEHR�Hj ݥΜ<Ab6Ieh� l`>gQ!ӊ/Z RWKS毸`0�0&2^}B1}Ksw^V\?%+$!紿v`|[#ҼЎ\Q\LLŏ8>5.>g_Q_ʎqto}30߸T5P@?�륧N$)/> g.<ePU]rTQP58*xL X:G9}푴&l?:K&3Wy{\jAy{jϽ+WH8i G^]jE|Xҕ,Kn0Ľ ~iE!co}H3fK֧A 7Bsp~^#5�FgF DBAZC͔&qJ0dMPN|l!/㢏JS҉t$z ^˜ki*7Ivx49(puFMKFq# |K{6ZZP.XKSlC+M&^ J^ w5XB֋?ھ¾o^k@?�XzN #XGcf -&7N>t^YT`Ȱ`D Kt.\P%$YCw.b[`m�9NLdk yU^Yuco5Io-:x�4T(S!]8hGqPyԠƺ7+'q ?~>ў?8GȵU=50R�`zzf`oa[\vȠ,/(;faޅs,qpFV&4 Jq : |kpT6|q'|SvmE�96zua-Jc[ QT7#})ֹ?& dKZKJSI޹o9nfOΟڠ0cFK50$Ze:5nl@%3c)f@�pDObg@~ݝ_uA0 .YZI 3��76_˛+t1N{Fseqs~GM)W917z;}ק $Ce#]ʯ+M k[x޸?cO+>^dwPrqksk`�kԧ;4$'ECfl|�9?҉c0r!g@d5/ڤDyeHg :� �E/5DIk`X7h.Hc%N�#GàF7XN^"]]P|K\|Kา(;bwʥK6`\zt Oá@/9Nvtbz5mmכcn*5`+[${1J,8;;_=n_ #q23]4%]Ay`W."/5imwb{ļ]yv4TN5{UC^T-i?V�Npu7 #(^Ҕ0tҐX ?*_C2vȸ_'ìrXHGY֡~�IQ*>%܈eh0m>s{J+ 26E#,.G\2JJ^@J+~%{!?Оoܩ< E]aɵSʼo!0FDP$g֞oAh|P`+1,:YBWQ&ҹO[/ޞ#l-?XU'(5 GH:T4X]N6vIcgJ>) K<Y&P.6Q]˯qɛPCqGndkr"l$DL60XboU ~FcmEL[nFuZiYK>=jPe RFyJIFPyPe lژo֝0e{ ^xKlDӦ33Wn2fJѣVAO 3~ӑE*]tႢp<tr!ࡴ;2=qfudg|R3ASAad\rh`Sn�c:q(F 9 k|SbKN0pK'N@zoDG9.H7LV �AӚEM*P x$ٟɭs</qT!e3V *?0%OA ,vD}#6šFrf#-`,86iG,#8б^ .k |Eɓ2OєG)-;s/<wsG0�4R?#CD=d�驗Zdf3iqqG~J^x6-zd, _8tׯx5(yFUU:IPon ̅bƓ#IC\Q-7EaV7A[a�[l V�Z:?Un:x_KKQ!-q"?-$v><A2>!`,B={ lP�` 쓷3M_fx]8+'҅f2ƴ-IV2.:!y_S&#Z_*viEj=L& ]8 +UհzjPO�ǃo�P6V"m|jTȫJ~)C{EQd-^iD0q GX 4et&FYiZg45*=$rSUگ HM.$Zs� qkWq‡[q:1ĉ踬7TAUԮ{cv~t-(k ʣCs '^ ?\{p,xbZJn=k` �kPV/Z@1ʦLq527zK8i_JԌuTUi2]wAAN0-5��3Hd9IaR=kyR pR3X�FR1] g^ dċP$R6>LZx00ǟ3�\^tokk�\~Nu *B8AP\>6X8y2FZe ( \Pt’Vƣl4]?ṗaw3� Y֬z3ω_i:܈[=N/>�{1]#O'Ae&/dzZ/c׿3O>f3ZRhcgЏy`p`^kZ&Հ9ui 9}�ЍKZ:jѴѸ Zz#F|Ȕib[c]X!oȧLМ=�qC; %b|V1w �A廎eu͕Nt#.88*ڙɶ4 �.\H}/9{|-F̅(P dO50Z h 50Q�7 ѧ*vdhQM׏/%_Qn<Ay¹@.�r e no!/Иƪzc�H7WE>qoYiJ2lS\tM^ٳ[1'R56~�i5LֆqEJ7эY|xH8+TkLO5 <z(.<wa7@~*Ӝ'un2J\$k'YMZ'z ͸K؁1˪%x J#7Y>tZ,�hȈ]eu{ l@# (OZ׀W!?  cGi}$,nT5ϼJG-mY!CVz5Hmxh d5?Z1X< _'Ÿh.:�^䧏9�b~Lr=cJi'vǥolh@\ LC zB�#ӳ63p8X6F< si/6i^Tg-9&gh9.٘eQ}i.)W!qדBDn>Jn\pе8}+KM'Zej׬)prbڲ2>"+ BG�>@ǯkGmPiG3{ lP# *Oj@ c!&"r! /{4])5^)UI*]I�1UsD0Q3*-@dc#Ώ�#ȡ(xX{IǜK%ض�y``w`q1M9.hX5O0h!x_/`w:/?f ]$eG#^:S^5xHLϡCf�~ݡڴgr)\g`]+ U<cPGEkese.sW~#!�^–֋gN۵[/l6e&`og2Az lϸ@c಑?6CϠ q.j.Ļdŏp-1]+9zKqK 7r9L*AcdfKp1A+&ibkť2]۬8L\!.Av#Y55P<D^Xh�[qW/c' 1X:��حq.C`'ԯ̰t%_q+tGXQu�l(H60mRlUVIϙ��9>~֩Q^i< 'Oe`[7Gc~�pT?%5O^4 gcaCsg5 #d~d kAtA'.z$+HE �DڰAXfv_V&ԡa}i.8^Iƥ|XĆV\ }1UOXW1{k`4?$F ЬH8%|t ҙScFɊvV4K8y<xpKW,GJh8dW+7Xwxnͺ,`kvVߥW_/;u]>'ZyRݜRX֧�CMDƎ0< `^\L r9 #n㠸`,O *`].XeQ1jRHaPzmj86rPdei ߳�mb^UE ^@`SG0hus,b�"5r` /Bᒙ2]l0w艹oWMvµ id'2YWge~[9+1{ŶWhS#) hH˪~�pYg֥hԚ;#E<0�t9A 'Q+_ѕG~ģ|rǝv�@gj\?HQfipNyHBZZ�!7g�ϝ:<3R_ xez S#u*O> dיX|L"y|/uDH3ZIV#*y430�7$Ng!`з!XSs|f�J!j犏so٦^ȍhO. ش6ċԍVMqBwR HG8aՔ:L|'̾ɛXFG9$Y`:ӝ\ J׍:̟#_<{3XykX~�p4?/͢��"2 �JYKgZƃkpɖ4_FW%_X9bTʛ B/P"UL/ .c|%>tT!D^gl9ĕY s]?�[}~'0} MHKLr`vcއf. q.ee<<JYŻ1dhiZ2@ެ W4 AP6ג/6vy ;��Hy#.hߺ5F0@ U,yg$Bt$ |#,bUF>PG8y >jJ)3=ڸzչ%|/M3 lZuo#ٹG$5P`v,ps,$tk_sKۖ�mJ5pzFpZSN8,5[|G1zp#8hYv!EU() g�$a/_8oYH�pu՝>W/_lX+1 8H gD9[uY^6$:nj>L7˯�ضj47$�aq*₢GؕV25N>ӐoʛR~xccNmqXK.0OnģE_�hwgN8[]]N3OIm kFx>Pم[ XI 8s^?i})ׅyak�kΐVLmGc^�KP䄐9U9LRK*# _|ii3%8~+̜</Jn~T<WC7KwloE:}4K%}svI?i`<a(Coq40zp>rM fm�gm 8@ᑃ2A�ĪgR8]q�5@&򭰌d03#%V:l[gEzgit&g'o~}V8q'eª<'܉NMF@ ¯L@]ZZKua{ i 16l�"` 0({#>䃃, Ym >l? LQ~kl Kpxxc (BlFKGO'Y`%N/_ x.O@"-oz5ۊk ^1㶄6r}��@�IDATlwu�?~a?&#P14z܊H?�؊WedF#?[Pes8kCSr|iޕ.eay. rp;U_Av7ȼk\u EZ-r1f3\GuՕjb]s\^:Wvm9cY 90ػfp>R`^6@~>l -q4f y/tsF ԋt#3eH:zLN>-ww6oamvd|,l80]ri$vљf}J񄥺H۲ډU Eدcgco(Ps{0S�g Y4pAջ�~ǖ\7r ?}! a;Pue.2gfx7t6}G! 8P6yV[fP~ϡxnk$">f0%>˗9׳lJ~�p4ݗcaX =JM]mN^ˎ~N>szn43k[%s| ҥ y<8#i } rKBZېP89-eNSs�L%yŀx3lC<}*M�಩hp'\BELGĄ笫Kǝ,,0@&2PލOn ]-ԙ#vkn~ymГ>4gKSGd3YMͳ ~/ >p<fq@`펈oC~@6�6>Dx2_|E7ϧK?Mv�hfӳw@rWrͺJ nI!aW[:dwSm`ЮG׀ D:q-YB; r-JC?�u>[?Welp d矎xS4d<oE (f@k*霥xxo\bdd>t-}y5<ÅS_ԊNr h|Q>Qy�;`5(N(\k*SNukj"YqlH( �EQK!hἺjb)5U%h@p ;Q=q̒qc~]ڀ%@?�hucW@㺟�UE,_`c4>#ר\]0]\,N\ �fz@/L+Pm]B]YL=pܩųgXDv`}!ૈ\Sd[gU \R϶�L5*gL2dokgG/bWo@gkB[[^_k\/n; \K#ht4bziY3x7L?tk Ɩ1d[x $pv![\h;r&vY*�㛫Xe 4*ElFcͭV^wʶ~6Jr [_uƴ<�=]Ncϸ|c ti's!^?ŗm0�._ssbGgy#PMN� 1Y2_~r>#:R9S4!Fů ~~ 2ō[e /\�,U;x%)Q׬0 XY,qsic؈ vg�'\5~vDFr >�'] ¨dΞ"@Ƨ~jb RLj,pl �` ( offhPΞoj-@iPռ4ml〛7` ?3<*V qlۦX?�ئnTŌ[s{ԧe)A;<m5 HL}U\G[�>mj3kwսxͷYG<Txy |nZ-,Si; \܌ܨh"nRD�Jhy vڼus ';'t 戭]y�w vā)D2F𮀲b;}`vcJr{0*d i{@]!PO p0a2 ia޴p)t}s应> dm sC 2B_a<Ns~Mi/GV= qcӯ,KBn|;l*^sdtjymTԓn`,fv@�LE J'i֌uIf`4l }.p2WFxC0 (QnQ\ErWO*!^uڸŢ6Γ'WAlqPYtX˩>N Lb$C#bwIN_ó]�L?2ko^7ƺx�.<i8eqMƹE$4a@5 D۲dh4@Egzv?d 7e$0kO}VQBWʟM+M76^tI؄£Kji@#X �Zѝ|9�؏��֮q9G 5 ^~�IlWкzbq @tq{�h#.<kA&x%c6VTbV�Աv8W,qΪ!@wJb啕U|T}kxJ :z?Z^Fua=ME\8ql`<9T9RAtů,++$A~xx<5TW,XA+XA~@ 6w^ �Ї^0�=YI4ex��#2\NLJcZ/��4jAZښ妱\:|7/]:q�u8piͷ6WA@ Г]h$][˸=5V @Z^^fӀ?/n; ǜ wJs؛{ L8DN/xj.₤G\r eA|@@elrp f*lm vme}_g!$Ac�ZGp5j~s4h:v]۾>5΢pi<�>7iCbuX*!->z9b\*_7{#PEh8 Gz lv�`yvvu6EC}c5ХxȌ9|?4'#os/p| Psl�ϧYL?/A7~uTm[/yXx M+~{�+x$`}ljgy"5ZxI43^\¹$g\6 t"7mٸe#Fف"+^_8s*-_K^{1aLKX8rZ:u{\3h%2Wg]xMͫրNr/XwţU@tY.<Ӂs5&bFpܩ4Cf�̨mL#}ukW^7@OqbǻO^xKrw 4Ek:K7imz?Cs 3./9u_‰L+9i9fj|8 8υSpGBvSU#bj9-ˎ/5> ,QY&TU_[Eϧ?q�0L��@p>kw3,7s8PZ"Gײ+],8];q9o8i.\w>*<> s4<ԝN eذv0DeJ3LUX!}0Q?0&Cϛ~\:B֚Mw2T'^즃XP:a�-_zRLG`8xi"u�G}@54=vr5rG �M7_ eQm/=TtJ(BF͜*ۘ/@9�MhꙨ,G�} ȴTWҾnIG6ڻ OA k`G �<}DI5`nܬ;V_|ɴg�6?; {d �y45� ?پ9O.x5@\N&=?4ڄZ)h|w˷ƹy1^j%q?+1�#+z:.^[>{:-liڬv1 ĉٹtw} ԝp^x|H;陣!:RA֥vB畨WYPa!g?%pືݟ[NC׆(cD繹!�0c6ӯܶ9OǿUXĕ̐hF1vZ� 7tM?mI;T'@M#8 g0[ \Vy>[JbFj_|xסk͸>rOpҙGg'K G>㱷5fAzɫѣLi`윖`P;Ӟq dǿgt s=^4??a+�> }|iw e3㾻ߘdCʔk3%!r72-C/lĆ16q"PV@c/b9]?f/?tĮ0GE ci`�Ϛƴ~g6Zq4 Ogj~|%;{9|)6f3,x~>]?]At|G�(qd Zuh|bгO>1=tͽoĞHK3wO>S]ښ.MviU;b�Ee�5 _|ɴ~[k|Ccq%V7dlo=|L8wmѤm*oKhaPˮ񶒒b=~8 @r:ģ=6rׅ݇ ?&A0z l@;a�v@3Ii[]ZHK>XԇWsrط P24f � ?ta|`DS\퐵�.ijKP7A??7e ˋe6q dѲL:,ff>-FH7 A/_[s4\ԝd"{ }KKX8,{x E3iЇy,-|XܗyQ�.&9vh_qNǍgkґ~q'I@|o@Qף3m}9(<}JnꜫdNx bÇB`61 ([ZHyH&X5v އg\ևj@.5gO5><f6Gb4)o{p:jy;8Nur<e6DA]PC/S7?өa|z fwNwϥY|#6~al ��<-0ՕO�;0p}NϻsؗSi/YmQ `F|8r`,<ct~* v<Ʃ`$L y8I*qdӒwz6A4;/22 p'Ul E[k١?tߑ\#_ӏ@s\=͕"Y CI4�vo\q[m/=ǫ|+2n; b sdN?+�quoֿT(D*Z@pЄ!84%#Z\u#6$ِw'| >2o_'.%c}Aj~g5#�3Kq:/?L0΃w aa 6񱰆;0*Yn 3td#9|n�eQHk=9v;I:FxI;~BZu/h,f@^93H�kf,>^AXQfzчuh`G �f^I2\_z>kMj)ZTCLhG)t;?u+ؙtoV\z1OHzQ[%ĺWY??g<o9\zp˞ק?1.C2֯�ُʟ*=50v�'NЇ9~<_\Ƈypǿr K鷅ynrg> k.lWeL:i+@s8c&n7]c,~Mݍ�d0r{3t`)@ {} cp0x̬H^}/5@U8éЪfGu[&kFQE$F’6]5yYg{5ml&!" (gH<=9t;U~z4ou[U眪sN[W#~ݲ>o%𣎡qO<^1nBK 0?(_q7Ĕ${QS>R*8ω=~|QZċ׮0d(~6?^zW4X8,͐Wy܍K[ ŁUl�T}XRoS5ȟ/V&t+;aN)L"MH;.@2"![޼1^TUyt$ʑ55#!5L[s1Fzw矎uҸ6Þp՚8[߃ʟ^Bw8@r Uyʁ0�A@(2-? WԤ  4䊩9/3aXñ5c8(=$ƟLΕ8Gqp|8 � ϹG$:uR)xf czXb9lo#Uh3pkCV;7ů]۷a}| iH618�G$z!ΧkA; VƵr)59)bweJ\' |^B٣Q8 -._zu4'NEo ]\�1}.9�C(icvO UZ�ЃLE= 5_'ߗ$W԰s>"XrGAHaP6wYg]^xS1?>-eگU[4HJx#7顇eɂQG(†1 2xI![FٳYi~}5mg)Sǻ<ʯ8P@8#i`Z+_' o\'Q0ֈ�oq_GeQ':蕠mƬp2;&:ek,::5ll ϔZ+D*` ;=Uo#ESrL{g悰Pz |zk@o¶| ~p>4:4\C3WG=<s+Wq`_hvOSm0tI QMWƓ4j82g Կ6Qʨ"5şf0[ s^pyڿ10E#UuQEF@Җ#އesP.K9^WH! |ť@wTg#T): @>##ϚmF;NӤ0>ÆOQa?9P+7|V[Qp0n.,\3GPM)*{/DIij±?~m<EnlN/+הa>r5dI80.v`ұ0�:r)w,pVcZ?uzm=Q7_YRZ_,-eVS-a� %@kI 8 G^wGo}<^.<쾏8YF8я§0 �]4!^Sv/{: t.F+FM)&hV/e{9 gtm2lϔ^@s8YCagxN VgPb&8_P/;T�H;W(~3cs^FYރ.D  v8 RRn ԿF13|MXTkca#i怍ű5JP8=\3#L?1H*?a7{9o)6�U9&?ē™%1ÌhW #>ik#wT@#B0<L+} \H L,-jq+MTQDӈ_N@RxT6}wq\6SW ?6>`ʍ]i_ ̔b󺚧B&G'\ جF�C;m< @%e8̜xO0ҿ9->Q#M6Z PRsRc}ٿ~7ęH<&3^~ 3#8#OiĿ sϿDSw^uvi0y}:]["4z݊JzgzФyL( hԞ;ƻo NVvǴhCBb8<0x&Yl�)xG6^Ƨy_nݣ`OF 10Œgٯ }bF:i1fE7.!@\O~#2z9nECܟ`"2# 'ԻŰs32Q"yV8W~8�%Oo*]wx쳑rA,*|r �c93�&e} dяmWyޱ[bux ]._4 BѾ%?>;- ǿÚ7J|["곷 G9ϕяv%EI>eTa�a{^s~qM M)iz!^oZr͵ᤷ#s뇌c.}7p9xYfq]1 �Ɏ=d zz:uz埦EhIt&P)HAc.Ygo' ?e`*{ #z]C&_#:qn{Y 0|.4-_0 uh+K6m<?j~'%oWxܐ-3Hluxl7F։GY_`:C!Y\#{>hFh�� 4M?^Jla}w2ķTe ]vdr0(34\I�K m\^=v*; ۡkZERwۈ^mt1�r<U@k�v$F;F֮i6pܡsa?qoC({X~TSQ M4s. _lĿax0 h mNJ/n4<,o5d~R&.L1~|60ڧ yFߘ*1-{eC.#`SW(` З]D,'=8}M"IK}yY'׭OAGھkO= ǽ.}o\�S]o]sG %o^̓|]3Z9QgG�pJZlخqʩjkNy/9[3ַnA='SUf@+�HN&?atZ$F1kqj8=h#{`|D I^S#ƴb)Y:OҀ |g3uer0~R$x4ݟ#/y5~Bp?b?tm'9y&Sg?IK/8*،tď/%L/.YO�Z�a8rՑ$k^'I\2:m,^�cn"aǿuQ#.1Y|(̿)ߜ[jg:,6㕧8mw<.+R)nia~zWhoO53k|6"- |b/3wu8|�U[$% R[pGp >أlIvwg [qd@| G?*}7X.*cR~_~YbGFB4R_2l:xϚK'Nfp h":DJ* I{#d`dWOXPT+3"sg+ }8 İiv�/~<a1uuoF0t@Jˡ>u1;'/Рȣa{X)!(_X~ч~ *96xGZXqZPaxl>m 4/ 8bg>w<{6�^[8WKN/󾽧@? ԙ)q6@v.#M0�~؎x3I~}I!+wVPBB|_3DDqR",k7~x}nf#bZS<OޝsNzm#~EP GޘaA[E" ֘fpoAq (ߌ8Fl4py8"0m�DjiG7Y2ܦVW�~\N<؅uW,}A8?D ~hTfy_ :f̪dgqoh{ګINW֌WykŏL@O@KSEx{Xa`˦84M}ٻŗxxoahg``  |a�~I] 6tTy96چtk]lӨTu)>{;fth՛ P1xQ@iqEӎET֪w[Uʫ~>EvPěga+q;:;BaNXePgcq__s~PPmvf}7Q�u('0\N;Mh \NKs:gG؈u6W;[:3.p(vT}| g l&@:p~-tD]=0 |It\rr3p["sh"<; f<Q;,"X0ܳpOמ>{4K n}>Sa$:W4b)4IW@�h �#|GZȖ:Տ jpUwr'ۥD\y2`xƏ%o ^gL[\0eGMR'|7ôE'TʿAųrXn囡Mo0woQSI>ZsXkioT./q() f8ݜP|)F�oXTvF۩?n[H � #@r2HK\ƐF5UɁ0�:~lV7'Iଣ^XqOG;~ Y2OpS+8j�.y(#5yk0}ջտF=O>_Zjי2ӭf+xh>(VٳfLJ8/,4HupFf 3Ϝi3.\q{\]{W^q !vqK94 Phq5 �kH@Fѓʝ Xá']b|SܧY߷B}\qhKÒaTDӛM,&SE_7'N3Օb\b< D( \W#a3{dlUnO63OgbO�=*w|Op #'r0y8Q/|f4mĦxFz}FWGu"%o%�G~c{،QZs^vtqs@ iǣK :&�]l @9o\y+K"ll|htZTXs°=g^{;wW6U_Ae&#ϑ%1`rBAN<-4<C(];th6`BN% û#WivIٹUΕjWA)Ox8_SP/B;LM(hG ̿Dc/?G-FRoѭ>Ε-W 7{ȟϟ"|!�=>6wwu02 >^eq adh~1/YWn8ȢQIepO=<QZ�בks(yvo1+])=9ມ}xPҏ4L;.gTFD8^3FEF5=NODGUjC|o^g頸.6:͔QG N=SA"" dJ~h/o}% j@̙! 4cr o>{�}\l�`&#- J�2A@ ]~o.ootrU �*Oԑ`F[6Q7JS(^!:At3e/k~_۷�k6^ow}PW\KVnb#}`[0jSTjWQEna57\G8-DT~=q0)xe F֮eχ~;&ak˯3Ih?*\[XAV҈,!8i|_Ʃ�T{~nZZ©A_ e֘^4j_2#ո )~ R9>vQcT'VBS"t{q p3ua'IVAM6]m0~QzV1WGNXBYq ů̸L�.`kow})%-S7KcF5hDY!7@ݟ_g g$܉xԈ Q9,_.}wHf͖x-{þ�߫at&Xtk@X61m2Z`t( xdq?զ1|ߍ3# '6)? _zp� UrS/ [bOW.(,Sr[XW@g˟0g@aENԿaǣbNEh9ot >ᵿhs|[3Q!'7C@"�yFAaH6&7pyh>Ӻk5D<4Jtfj5g$LҽUDp{Xu&`(zp\8@׌3 Hk] 6S fP_k\TnT_#۷.qV \oUdz񼹃""OC ]zY {􃱔 wpzwޓXiNӁAsN:%<[$tjF`\F{32E=i;/#̑].9~d9GCh9{QY^I-c�h y"fk5ARĹ<3qI*K\4ެh)=ɟ\jʞY}Z# *}ҳQ�N:#9\jGkYr ˭?pOSvJ?1 fBV0ⅫpQsxDڵ;9̌!iW8%7ǰCu0Գ3O ,6:s#1>G?a׾FKzP\  ,8>bvPFi򋲦|4z(J~l;|FSm*izB9='MӦGmQW9  BwCF"2QW<)NJ'Ca?^uq0�m^6zChdkwR3p}O sE[#Xl�ɨgx4vS0 ̉h(HBW״ºo}?w/kpޯFXx*x)c0(?2:Fx_0?rX PW#W"oDrauE,l�Xڥ%ScҗlӨ_%K[#q/sk8J1`'  N\ڽXwSܔ#}q_LҒL?㼰^{BUCS#H0fym㟲(%!G`&̒:,MH(?7g\1EcqDd򽯸xX{7ї\unufqrnA/1ījo ,ua7ةhrATĭ3U9w__ R$ wh}E6NfFZӱ[ׇN,Y]yECt .\GӁ2n3[\4Rڐ3�8=F"cpܰ>M;wAX 9w)1pX�?A[lDb(IX~vH5oP*q+ AT@ڲoa�=Z8qCX^:O~p@|ޟ.oJ6=Cmv:PVUڻu89fU$-,aJa^Ft/F~^4m �5?[1cbܸq4FKe)3TiU  �Cr3<Hg g~O/47+o}OsY s]C'{lT'(MknZo0t@VgV Y�3լf(@[徻 .K~Zm|6`Eg:7‹[[Vo]TM{]P\ԑ->m\2`Nj= y` gM7E_ҔaT ՜%+B1MX޳u<cw:# ;x4Kl?MqQ>3f,Ѡ mNy>mF⇝/I3c;ׇˢ@T/F(elW2<62#Z!Swӫi2?cC o=N"ŠLe�8rwL͙|o2 nV٣U1uu:K?[�sw o D v?Q's|%t }aT+tR*p�_X~TADMOt>՟IoWN'z;O;΅?~mkô⪔ \F@;?l/OKH Gp,"qa@@oDyvD.>eQʪ°TMʯ^^:i):j"H9'e _~ex+_ ,0 >mG>޾ f&`N��@�IDAT?�"6O.ef�sz W*\0ž\KIstS[�`PݽM^(,fI $i+r4:~ޮS[1p!\Ƞq]{^hz}0ҷoz[4&K'n|Om:]iSj`v }ݙ}Kqh[3ݡh5^(ԭ!JN Ǘw:t*_ti8? ķb&?4;?tsWXy7 Ú)hW_`˫jmN'.jTZpN \X~; ^íb�iTQQē𬲽JKpG>]_sZ5 IѦ)Ԗ�#= /1o5;9Ұ3N?'vH:နЖo}˞Q&J.nc FXudn)LD{%tL;|p8O7M)Kt3`X/_0ē+#)6"8;r;,; +kŋ2ƭ_`P^g}0m?^`xZhp~/ seat&i4ޒ7e �,+A9`,y*jL02/őN7K[-t fF"n ؔ6[�Fs9\^aY mӵQFAЕ{hTg~d)NZ[vn \hdvI7.̌DC=Hi#W_}-L3Zϱ_XNaFkQ-am k5,\J^gLd"u冁7�87 wEq Z4e4T6X2iR~x@jkO^N9eE`b'f-k0J@\k>X>:pgO}֝Wo 0ڳ]qJ}@~jr| RpϪcEgJ�=3 7705 '/TG\ >}p?Y /aq}}[*+~3q3$ k=]r8qsF0]V;9>*  "f�c7YMFPP)Rjʪٕ:<})kçLD B VA�ݭ}R>OGwIs?['v)jXzoQtp_ hdf�l+x|p1AAx"7DiZRdzx oA;}*['(�k\z|Ju@qAeQmv<i ~~>*G�Q~tCcSѺ'"<%apNCa0j.¤x{NSGZ7k@#u&@'Vd AZ,ELX>,QaG)NVWFNa3�XgM-}6ʟsяgoGrRb!r_lz}Tl+/joF�mʮ>9`<+\e9o^< v ٰ"TɁ(FÌDŽW{o{{رy 0]d02hD t#}E~MBZJn46D1'&BS mc5Y =NS3�m[F֨G!e]O1iM۽;؍V7S>퉓gpJzg0mIQx^5]d$sa>iՆPyGţyQj*R9xQNaݥ1ȼ8Y0@0MV\KvAĸ袋1^x{ög;lz>7ޮ @/zǹ<nY'r<<28.#|6MD<Uְ&�ʨUqc#;j2EڴF�("Xi'r.R<P"`Y$ಸmTGcA Hʦ}E?KSξ0L?T<NJTs@^B6\Sa�`l/c|ژ]OaV.wxax}L)u h (+c 9B6/~.;[W\:Dw"4Cgx2o=T1屇Co~٤ SC�K^{#"e]"9a 0yA>:86T"jJ"*fmtXj0U�X Zz*@[b~CQP2NftWY?Գôh?T6_M+덩 7~%gCA+ dΐ)\ycK''�P܍0o, f,ZT8Zx6xa{N‰?q;'~(Z< n**UGZ52I7nfex<0K�wO#ZPCNP3�0J^*Szgc…H5�\gW%p@|Fa8k} όO3O;'L;0}Ca9W#̽]CaGth8ɘ$%/�Y�©1 )l ^E{$.au z5})/\׳_6?QX"M<fQ}8p@Y<bرC5ap0:0b3ewԖ 0uVlixz@c=|�F�j3`@dNN}7!78pGȏAz$6_em1[զBiR/ ]jC{xr>cՔ1l\Vc_ 7,#pxv,pk2B;qx,C-3Tk&n n�"xsm sN?#?rbsT>P' 6=+W֘S0ҷ;j@lOu[d59r!eXj7L�0$/q+ T@WG2:#G9xJUQc`F 4 +ޡ$rP^$QXkڬ9Q<Xk1R0iD1JFEWAuv&8HKϦSSpoA0PL s4AW~s�1C8_Qts>`F+i˿/^vErU8NK8C`I'nqp|tgg-#``0}kؽ;^݂i`dn{W`m%}ohFKm,`})1#c9 r):y>PpW1)6%~ EAeoƜ2=J׈lt3#6H7qϬ.Z>#Wnr )n{BfpIm??JDBHnBAma= |9yP2bVi!�@ӑ0C{pqOV<N/XToh-Y|^P0;^c 4,c8K$ۑ k5Ysf[�8jHNG41aRE�q|rJw8aJi'~5(ZK(.Z l oTm9�_3Y2uB#hm�*ǣ LM|~`<\g/0EBMR"]7*!]\q W9XFI3؞Dq{CBʟ= >;}F w-c�%qRc%@Wo�qM;?'ekbO?Fca)c DSyxS_e&?ffǨtvM;z,<7? j bW: ΌA|t �gBKùp0 >oOʪ'5MÚO}4Uiʾ'5RRftWr/xW=e VG iGV)u:I;ԗW*〾}44up2�żCvߖ7aH;yEz,a3R-6nVJ` [ GHg<ԋ)lF�]0F.%`g_ kn*#@ >9 ]o 3�L3Y Z�"WLV>W_jʿoSj_2E+(#~老W<\�+D<usÀ0fl_u_߇ wYV 9*3=3ι O6˳V.x8'Lh7k=6\(~ C7SGFxVAU19ǠA@#^Y=EoUc$/@kcsaﲯlbWٴ dJ01̉p6eWd#S> ŽnCaPD\�JŌ(5FqqUsmZr *ys&޺%< ۟{RBV9,s @үc�P9HLi-Qτ-|:SGAS¹bX|I,f%`}hW/Oa3�.֭սh0 kWg5㞀W\*VL˜ Ռ@MA=�:+T�꜆7~YUENBFN]Q HLq0*wx8ЈӍQ?Y�˨k^mY x3`sτOCΥ?r-7c�4YL* t(hXe4ka8A}f(`G4D#8PODnoT@#b8՟"Ľ.c� =utv>o!Mq@-5wfoY =: WMv\Ky3t+la$`g�ʠc8J7 sR(]ea9._1`\- b9:ETFև _]/-fě8Z $4Ke V�`H mw/lua|SŸoƀ|v^R�-x,:q~c}ߖDKf퀭j9Goӣ]tLO CZYxH{]7_TgIwMaWAxFq`;(Cԯ.>7i {H3E{�l*\h6li&߯ZisH`w|;.(O03(�B8p˓x8~C}Fc8 a~?<WׯrSi`#d�m۷o߭�hv mں=l#-wn ǀHFAuHbp#Fu�zvYVoitt5\{C>?CCW$+759~ �{�\_fpe#k۵kW]�P ? đv,EcJ_| h+s\7^DŽu:U oSFFg� ^}ɿлjE5LB>�6ZsY㓞;l�1{֭2�&=ǫ4pFo~!ȿmd6 N8m9@)ՈO?GPS4=t\NNSQc8ַ9>F@ Jm csڴчc{GoO>Ps@I4'w:}ƛpիYf�:_^yMoBǸOkNu\ₙ1 IOEW[r<U#ˁFu,ulW.ڄ|6uiagca m;E!5d@3�ݦ>NlĞւJH_oX6}RRR6AN\BAnnaEBT"�//.8F8wx“T7S1i{]"}ث—h$ę+_ o ghTki`�h`Gww7d|�?wS{-VζFSlܺ1GîG ]|D@SM'#@^8z,bڄ?>Gxg؂ 4^g=`GN ^ v7usx0 KY>5%*ך@h_|�h Û�945`Z|oҰ^h:vF?53XQ>t83R+r^xLY'+Txfa՝Q+'Fa v'OB 8laT825kzt4'w4tf�8݇-ӳNT�MRhu<aag& oXS(vn(`QM#O83:<8 y%UtrzÕJ-&ҋ�|_?9¸PZ .uK�yzp<x�0v"&�D%Uu8N*|mߴ{{{zRQi,DeJ#\#s/byx#n-Wnl Ŵ�6 |FfICFI(gmGmo}-o^r6gN;EK� - ed7�`w2 oDg\s6ЦVn~ >הá)Z 0]-8t\^eg!cP_%z֌Ֆ oc.~T3&6i0M޵zr*Ǜ))|m;wܾ{�(q٢Ь]V㟇F_5?I[믚!`^m3H@^ !.Rh=^S�=h3xv4 ;`Jgp;Uc{a׿b 1-6[Gg�\x>LtOq0KnF'UKMkg}_. }IeBAGB�G? G|Kd�pa *^54i c i?m >3R&H7okmj#۷>a׊™0Ȱr\3r[fe5r@L@�s?ce�PYk> 8Gƿm?޿[#*)I8BGz6C@j2l'8aqaM PVi7/m!S5#v24a`4*Cv _ =/,{T &>5G[f9Vx7zVm\ r[U:Ӥ}/<_-7[CS?Su9)Jc_A._dgb6@v &ckY74L@lTjs%ڢ-O?V~:jcl?fˏ?>=nY9&;~6�c~93隢y^S5WtiXρ6}o\usχ Y_ RΕ4L=fhha�)?>vbФI�� ` A'>6?`8 G|Z\ ˅Ⓠ_26.!ŕ:f�4bkl9 2�jԩxx}0G/\1R_c4E4jڍ3:Sn§wBo0å-�^j {ckR ,!H\ K# nۦ}]c���u pJE%*z~( �ؤe0k֬IZ6xCa _}?i)YQ1@6^q &pI:?ᠯ�_pۅ9h6WBq/@ n'\Qlx?/Sac4-�PϪDyS@j/7kF˗/_cǎM .< <>kc6}atָ_E8�f H"xk8™O "AW@ڍ 2.5mv #!@6fRBOdDžkY==/~&d==[=g5 g/ȧip5;ɟ`oL+pw߽V57$S<IBWd6|xvmSO-1 fq8K`)*pr`%4я&&mmJ�,H CWwCa7Ap` (L6@,'WlT'[<4�q9ǽ,k�vZ)EF黍{0QT%*<jw!i!�' ʴU|rDNp`.q\m�CB�9%�-}6+t _-???un<APVs�@:e=ܳJ~ck?mL@՜ڵkn֔+w9`g6}_î jGEQe[XbYg`UFQUgiEBp*=+@+F2MHMEQ EܨdK] 8:ť )bZOX[Îe뫂 Ky{Glo2߫n"6kVyնm^HOQCTW~ww*U؈6vVpT!F#;wmwaxЁ?U_1mT٨_ WMFZ*.)lϳ6 4U�4$ g)#28S[:1Nt<}f0a]xc}{x?b ' bu STkJ=IYP yƷ{*@\9u~ g®>ӡ>q_aouu&OEBga#^c\ohˮLS+M閷-k2 A.v%ӻzeX]app,8mak�xXyY �Mq�;s{=STikOjh22V.1ׇS(~I]`4e([.T] rxyH`Uo;y{׍?mZfd_i#H;fiк3.\iatwoXχM _Բk�!ga٧ )/&敖n.,3�pMɏ ?\<E]OS@8N:N۬6}Bms:KE_#}IB6(5"sC‚ḁ@XUxy(+x+m+D~Lb{67~ÌЎmaO<:g)i5Ew�8Z'>/*?>Ϧ4m�&b,1g/<sS.PA۶w}'T5 ]ӦEŭjӨ_@>i_5g "R_ D�MW+xJ.Ge0ZҦ Kt֮I7 y4{(<aeWSᘋ.fWq:d +W[9IMTE~'T6,}?׸ܸq+'p�Gs|#|Q{M~g$:){03> P- "NW7$}#WEq#5,El|igMo BXg0}0sqҌDyU�1lm}駟^Rk+Ll3�fWشiS֭[ NgbUc"<;-a7?fmZԈ!fV 0=֘?pjfb )p@KAF=l"'{k_i)6hN!f}BĴA2]mlx(two*_E˱Wr-K'rXW);yof֟Rekྋ/G}�xym:RwtT6oK1YF@gƁj7CBwܥ B(+XŁ͐\8{%Us'lԐ9Jا`(�ѹ!0ȗ-!WԾ'Cwcpy8MXڋlF`L!4ro߾7/Q^ �px'k6͟?.68{OS`[7vssZ*Sh>S|ޏ Ag]�CExE0eŪnyw<V.qbhfw�ƴsCG1^5Cm W_LzwX=3f[թ; ݻw/[>jB%P97@TH pg"ޱjժ]W_}%K,9=V8F>_X2lk 3ů|DWhq=pݏTP2VvVakۃT8p F6!3[2 xľS*`plN=?:_{5{(OV[bź,ncm?ϲiL3�9 M1*ʌi=-UgϮĐ}Ra4->@%u(drw"lv�_P�5ů(aOWyIdFF0U~Ł#dn y[$Wp, | $#W (F-#,3CpW}m%W5wUa K,ب6Wƀ|CqN}P6o]xXaMzf�SY�}x^Eͩ>G5r> ߪw_x:iCV0;a5H#8m#|]�(GNL3trpŁ#Ɂr{Rxz(7ȇ~EdK[zht D}M 7 vl͛:u0 ~ಘ��PM3<p+Xq=>:%:a7Mr)4rM>_ ;o}!0%\~>UЉSRj')~mhSX(HiFTn,*8w8`h&4ݢp{qa`){K#EZܔ~<Oџ;v=3\N5CK-Tqt SoZ6�L}5O%G};w;4 1%@b#mݺl#5|Lㅹ�@ %M!F&dDOx [ z2(9Fesʯ8Ќ6Mg]3q 'GAgy H iBO19 .6&/}Ma=w9pkM1e}Qn]fVX rRԜÈn׬@`g8WTwx㍏\uUK/^|1�Lk]#ޞ0ŰBa|`)}uuy JI+~Slobza (+88~@Yʳ*43h޾=Gnpvi"#,#WnǼVy%4 Cϋº[o /|}Xt%_xR1LT/�_t\{^^hsV0�|^]:Ƿ:sgQ^�IݻK?׻cwڔ ]:!xPqqK1Ĥ<t0R*Y 8Yu*RqI9[},<rRq!> Q=J.Eg[^ DᨾJ֑3icXC[LJ_1\f-3u=# }8 �˗@�_8˕BJoMIF1�О)0q]{ᩰHzwYL]^S2')B 2aOA\ɋ0 -P]'MJni,*T́X㷩ܑ_pŁV䀷{S$FEG.R!L4zϒpWLN$n}kCա[ì㎷:?0腶@AXiчztCZ/+<l~3�x앀OeGsimݦL͍n/.=xZ2/N7=#wi �G4QD _ /Y"n?WOB[v @e*^q9@; G)Bw`.xoظ'y�e%\z si/co͚лzUX{MaSJ9xCXpklRء7 lhyMМ6?o~~=hӟPxز4 h�B_z7=w|sGt`FS8ͿLês kn_ />V<7u>un]gJ]n.4̧Ë(H8a`�E?87E1*|ɜ3P8в^:�ϒӂ#2_wb]CH; tbf`X Xsaa]ўge 1L __=b `u-_5kV X!^yx~wg;N<wYl֪:\y*oT_޶9 o\ׯmdth:i[v'�0t3n8e<W ? /8]Zx-Q CX*LxGp5rƙGS!j.ˌ+y>OK~\7  2htܰ!l^6c,{`9?}yZ:8!<pyc|pZk/*-z1ذ_;M�htܧ+q_9쳯,�=:j[ŏ5=>3nF/hzM(^,j9#N3KeYEѾn=AYP-DkțW|&%T d8.s` VR? r_>C9s #ߔ|r-tAyYҵw"{&iežφ=hc0S{tf N <+{aEaG+mWQ |~;Fᩧ~ݺuUX: GAe_qb�P ^rtδnI}?g,PG~ RT<uLaT oW5[nֻzԎٴӑSMy+c,[E'nPf(L9 Fhե@#<R$Ga8Pq+u'B(g|ם.s7D紊p'"|S!:uQGU+B:k@ ߥ/<v u2 sd _͟lDT(~`z�_M]Oh~ �*ۻ^9~JsJm+;W`�ާK蔠HSSƪ0sm_ټ^0߾FcDftOzuNz7lΆ�6:IJ҃WJKƨ4'}*O9HŁ8<qד(l#,t]N�OGfl@"=91;׫ze/mr]3`aq"3hQ'|pl[fɟ9%OsxPqGرc(,jq'7n*@#F{?ngʯw_#8 r*J9kDnb<^(v4ݡwX i.Y:J\MZAPԱDFp&*mqߠ1$SdP`MpAbHH xN5D5x8Pq`KMoah#<◽~p u!;\Ll|Coy'򱴄ig,ظ!_cdfBKM16w*%f ->oA`f153wMYhwNq,ZuhlG??_wX>&5@X_(* 7|āo[%#RE !\+Fj(}LoGMu2P5Vfg),B65zKCc:K�sx|X= Vv@zl~A+Wq{푙8obw'3<twi<(,Fp-Y1x:wP62n2MB~K t9Ǚk t-‘0u<1gާ5 'q(| M}ov󽲨Dj+}*\%^wtt_f Z6ۿF֦J7Bx6@HLIkR:qOIgܴ�Wi\!FI*"9gȺ 4hu*Rq++M\ 2G<?h.G:6Fxbwgteq)\Ngq�r.oHamyQVQ@<>f]E ,]#"wħϟv;/P8~S\dM*`t �*Wn^Ow~;u3wm:Drk- ր񇸃G"67)g$qd_D0pϏp=H+;Qק*Hi"N_Iv*T8Z?4Nc�.s\:yPqY,<=~~9aELҤq1(1NHy@\rn 3.}î?;ۋ'zA4kJIUo5W(6,_+%OtZ^< /@BCXa)yoD1lmNtd+xr]IkSw"m oiH.K,=ɖS*T8d7 M2rZ@\NKG$c2Ň!1o<Nyx~76K=lDI^Pz<>'">ER*&s9&+xގ>dpǣO=u?օ' m?k̯}˞C5t)Iw .ocxSƋO��%IDAT GX}=Zr+#.ȳ |Q+T8">\n}eD&4|ȪJ&&QO<ȓ5\La5:V^s_MΙ|] 5o{ǟʎ>n- 3�DÁyERTx{j̝os9Öpdoj?`T"7n)G�"`IG|;yREnNcpE{1j1TG[FV(NpNq|8c� V sozںi}D0r&MAr#yh6_2NAv$y6c/=\1}}?]ӊD]�P&˾jxǶ5λxͺf G>{1ZWb:5KYtu9iDO.Ǩ?Z);7ڔu! 8i2L#@Kl`*L._q؞r(n !ysAksR򪃥@fr:\Jvjv_�e@sd�P;~#X͐G]u} zΕx '"%Q Ԕ-+q?2H-~?qB`qH1M24tՐV809}oC֜0a6_\8i<M}hpeZN_0u>n<50MSC?S|Eϕ�+],4$D*vA6j7rZr^Է̑A>d::)aE`ze-]:`#<"^ uϼP*F ZE+Thxwyrڜ&OxW>)wK0p<4FrѮÍsClZ-j3�yfxxog\U/zˢfmh_=5m R8&/'K!r0|v_ o]*6&>tFLS!L#|8}]{+䯈 ]7O~2�`g�`8cl�Uar'_+Nvmng?Hm=Q2MN#S]4QɓGCuy�ゐ<<Y.1 +YC~!V808<_}y8ϧ sGǻseVʳHoa37F´O[?](p}n� Rz=\+�<d6mq;g_o{ fTnRjBWhl7c4.0iSًp)q{z)'x @Ł) &r8! sJmFXH<3ߒ>gNg?gvH{cu.kX0< &88&1&~qUjR*RڦU(i6N)cj]$ Qy,;3ߙo=se;0{ofwfcov.�)Ħ)V)ݵn-I:鸼ž“[%NSIҭ/8Mo t7X�� ܑ0d8‡U#Ċ,ZnJ?9Bޖ}ſzE˓zşsöVX�O:cMZ7\5rP +;);4 bB;G9%tb0,dT �挀+sI Liv-vM%+У+nҿ=įO/ ϩpF^�!PES<Λ [߹u+F4MUᓷ  X(qAr1y_"7 J �|#-RuOY6+|_~뇂w>t7{R L}.qA˭�i˹zλvb钝G ]d%'M+{d}.zk;�@J# XH/q sezRys;~?񷂱1vˇ~RJjWuOo� 9OP#|io;/_bsK  ^ ap@�\sd:y; ɇ>=*;'^?<\)B{DVX�0|py9_=ݝ=M_iJG.P.CJ� � 9|_:|S3}K_/da3V[�X9芿ٳGU @� �2(ײ76_68c/=_<y~\-zĕ;܄j^|z^|yLpKgq[ș\�vgN��sC m>9<_&xӟwC&5^B/й :j�9oWG^E_y&)H(�@�\)ri6}oK_Xk*[Ѫ �A^==x#~iWXd>@��B{>So)[w2Yq9BYm ~w]:;f| ���_R f?xwޝ[ ?e?l+.�xJ e]֦c۷5r=+&zgg|80kG@��j5({[w~CCH_k-\eh  O[uV PktuLW=5vҍ}̥'FFh@�� !03<s7LMq </Tw-W9 �A 9S5>Zy]7P}i=;;{džzZEYEB@��@ +9*>?</?o(y_^r3ſ%X�\M W.yas{_M}ԻxeJ;Ԕ^� �B~\滂~W?~cdt~)B];, r/�zٵ2 `My[nY>=W[%@��zTfbGg0czO_N92B!<smrϔ Pװ�QiT;Jѧ8u7􎟧f` �H"w5 >vKؘ}.<?M盻�qE@*>qt*~]Vn(..M^�?n ۥ`rΩw>r}w__I#wb'�XXh2߲ o➌ %rطoߑCm7x} }8B@+!@_׬ .</]708GR_d)B/sK[ ebP KEJtirq4ॶm۾g:i,=(�-�}~`b}cG?߽rE\}_l\uGxaE�gH+gO}rr ;,[23Y)lC �XWm>s|b]}YQ8X�5j楧{'ǟ߽g}v6nmZz}|PP@FB>_(=%˿}Go z.r/T;kQ<WZu0/2S>Y2/Vdl<}?ǫ{r:gh`́@0)czZFm:|}9NczMldM\d!g,VG,gb%qqsz8MleUQ/%FJI$T0۬9 뿩3匮Ag?k.XP^ i/[[䏞} G^"y.E ?#q7RZJAkmHxIT/ܢ�lj_G:?i?VO\+%<PS:\C:-źiT|"cxk*d5`͖gϙLep7b`hEÄRRgb_W;7\ aj>'B,�s1<tF5grxlxsF`M?4gƙ GXȘ_hC[.cǖ <ݧɕB]6}yB^#<uuk8 / �\ąB@[q\芞>>cwGl}։ҪNu*F'lVǢUb*D-k ݭ05g;I$MB)Kﻶt__dC&^UͶ.⭇žƊ$"F8s%06YInط ۉQ>y|wO0`dæ7v%ȸI1-,}<"edL'6 QC ޤB3M;SEeƛ?uGkO-_<Lfkɧ|V]ؔX_lQa6HZ]D"7LbSY&Moc/?g2Bc5h],c\U|l0\,:9c,3X�:8ݎވ5:RL_^Ւ7w7}~ ' $:A``l ?_ŷ_9#<y@LeLe#6 .^R<oI4s v\Gl~Ock.׊#CA>I[_TeXNkձd;M8X_(64,)e gؐqDvóRV?oX=5qGtr:~6q}$X[tdGv3gHǃJ&4RRa5gc0}IDL'b.r!\c?Rz#9%V&r 2i\]~4r[Kkn;6ط./`b2N49N6n wjN<^ Ϲ:n09h܄g7K&6wznsؾjwv>abE+O:Ã%Ps%8 + Vk_c͆L7*GoE.̑sjC.68tǾS ifh|QaU<*.H& t۟siѨX  )&3#/FQuzd[ZJ؄f1b1vE Wc2( 6:# >%ۑЪCKʋ;p.D<wIb}:ʣe;"kD:.0 E:5*"@dK?ycwlYֻuC~z+.9M҇n" \Fyȿ&, "dKKq29d9*qJ<S3'UKA ~=şIgB R6_&0"11c'&lݯl: EzuhRvIOa&ljuJd)c7 }6Rl"/T>bBRJ͋|>i <tv˂+W?hkoVÑCkPM<qT|W6u,ez#19в `,"Dzg[N {>Al>~ͦ]e3cr61%8CO+ngr4y%"bQP,G\Z8%amځ$BB �Ah-U,C@k`QDX۫SجѩD 9b;s<ɀ\aǘ&& !e<q?f̲C؉ZLp&1Ҏxg~sA;G{ /8vԵ֥coQ>.<qӅ[x)BY/<SEXE&,sƈlH 443m\Y�`\^ "߻އmY⦛ne ;qq`=Aqij~lptj?\ѓӢL_mF8qbfM .2kKRz&@8tO8!DMOJIlr yTשyAFj50Y8XOLb_tny: !~%r$밃 Npv45*e}<ď{sBP fu*}KF.S:8~ĉ{y`P6x~x.ײ[uܚR؎6GY~XݸpNS)R> <.ȸ髅-wo]yݺU{Vl/VtLwLwO. ((L4m^^4&Yh۰X;Yj/g#kPԤM+Rܗ_٫~UR?:&a&UJ'$Uר14QzXOLb!}<@Bozb gs'\B. qibB']vv44.#+̦/ 蕙R[Pm**]AeQW0g||q\̙R['Ϝ9NN?wRy>L<: ~RKSyR3x|@2/^�WcoQƉ!]d/^} K׬\:ݿ8r WYٓ.+rK3m]Sc]剾Tgl%Wr==6([ c07K>{Ч{ukr֥ rGW{,|zt]B蕌 eǩy'gl= 3h=Д�tHNBbbcG: Q}bq<ɀt_8׊a86W%૓Lߺ;nHt^,ۀ _*b0E7]j+t.\=Rn)ƧpC燇9~䭋y=h0#`]*s SiY Rtsem5YpMGUd./� T6/:qbYM.6PEbg~U]oY޳ΞR{{# sAOl=7SU; BnTEG9n0Ő"=>y٭B.dĔ&᜼#a'})>&s"=w7-G 8%HHLQY&Y:tJ1<՘$x;ތfNOr"Hw90B|D^t 32 Ttn6W(vۻs9<=͡iy:<#+.*TV˄s2+ka4ˍ婩鉉3'FO<9\8<>TLyEѹT T6^S¯gHm<h0/3<ˢc*Efi:GbNrQ1ύ/jH^ć)7En |@#tt: |P$^( m6 JzP(wDx=.�81p5B:R.r #_e*0Yk4~f}.ZFfCU**lz!:=]NӿJ2[!~2UL6yLТ6V}` 93[_kAo/v7Fdײ5^|Y'z͋o#ubXh@9 ]MQ5uy}\tj^D'2f6>lϭ W: Y|@ڹ׃\ rmO#1EǴ/vM}Ҩzl͕ e"d.!b-Ҋr\/9CZ/8\m>qfx@`!"l1:- _MEvrkYx|q|LDϔKCm Y,T 2}:! ϔ1MCVK8(H˲?>_Qc>VskO6n. ^d+�&+n.Zˋn)W6g?j_k#7RՉ, ϴﳋNh/L,Ą^ | u;գlv(gs" }OIR!VA Khj1ףi~Z/.Yv|ЍXh>u7+8ֹ<d |gKzB�ݴi]=m7+x81&9C)|U@�U�.Ҏ |d访gY|&4M/vY\4[|N>^t>z9:>_c}Ez{mz/:ܝY/F-9d+>i͕=hz-x eLJ}1rl$W/�0.qikC>Yd;n5/'Qn؁FW^ϦuDuiMa8#I9v_︹fF<\Gv!M/vYYf=?֌ȗ룏O=�d�e1LYu2d4cVGbیȮ}/001/2rL\n4]/6 p#p95Kl=z6=.p0/4Ok87/Ükă f6zx-0a/pM1~]P)N<[{[7{\_骎U%;9֒;=OpH��@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�dDUMW1����IENDB`ic09�fPNG  ��� IHDR���������x���sRGB����DeXIfMM�*����i������������������������������������� ��@�IDATxeGy&Z=ݓsIQ,~Flom?{q~:M#X@=ԩ{nwhBߞs?U_U'B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 矲O(@jEVIV@O aY >O٤vr,& Z IǩoKkO{KWI)h#b$Y`Yt8ӑ<3k*-泧H]LEO" ,-p9\ TNh:lt\> ]sZOg㝍z |TiЋ Ң_YCͅ'?g*:v::dT8lmxxѕ/aSSͫbToEwivt=Di0¤K-mf ?q뜺m+W3>+ xRmb4�U.&'JMmr1QMu cqNMz{?^VJ==ݦ\7uW_1]R\Rr_oNSJjDǑ^L1ZY2cj"\իJLCp>�W/+'�ZI\!^7㐭AԪj cP^/W<l�g3с،d{ISW::#æ)zG':Is^hFm==~)O<^[G� wԌgoa:)iU Lx)1& %xX@yRT-0S]Ŵ0=N:pPw_aբŕJ>W*˝Z}ʣmzR굾j>RbrJ^Mٔڐ kOO|auGC0H($8Kf3Y-fZD,L~A*]@[}DRh\u Š@;@4N] JeiY L x0M'M+N' 2,HiG R|ҌIL`*w &xɒg @~_dm4o rynKR 6 l$M<Rzt9QYf/@iZk f@%KԐ㪩G8t{Z4Vʣ8&$ÇcS#GνX`8xaɣa.0yC> $ [ 3\} Q 1`yoz;Wn*kTu6gjtS^_N"/u?]Vxizq4Ѓ x8S;!%`a9>GNezs*l"PK̐d0@!F*@`#?1`ȗ'd҅: VOAU$vkLRdxB(S=@ 0HY@Ȥb`cCW*m졭<YVۇkS]mj[ɉG:_>|dzz7}KC(Q<Xy; Zt 1O�+;gz qE4fw:[֯l)M]:5ozjWy~wjtz6-٪cg̃Μc'VyF�V+#-Lc \:ǣh @t'SKdly=S1Xpc6r�"85"hs:\ '⎒^(%6T<Kᕝ d y�, A*!O-9)G e.#L[1in0jpG1i~zjGщrǃ#=|tV{ϟ|Ӹ'-JfAem*q d/J*�,PT!N0Vg'+YuMoY95|UO}E#&녓oM$NaX3Ⱦ(c(A @aDc2T+Pɰhј;R&LJSKdly=S10fj3( `-Yfd+⎒;%6T<Kᕝ y�^,Y2�TC-M  d�&N3ij]fghtcݏ?6Ч[m!A/0stX$Rli9ϔ]Eucufn7]kYzٚɡM30>i6Q3SX0!A<"=1}n*fT "Հ Tҏ4Q�4;M3k(e lx9�9� A+d"(er\Z,OxJ<`%s 0HEdI߂1<塐 {F&Ƥ`G{Xz޾>41qc ˉxɀi! ttT&%4Y@i.eX+Õ~> ;/hF=09r#-vLԤ>9 J<Ѧr= yY'<"SӀ |V ,NI4Aљ5)\^OT fC)`�X􈠕A'⎒^&%%ϒDP!):Bg6KA` s5aVI/2 $D:ƻ5x|BFH8{_3gFze?:?Cp[ospg7R�}fHBH <u*3Is(8@?UWo޺l+&_4qtMi܌/{XQ7˒\"=y u{aKD �/ x?Jbd 6<>)Ay下\fWZ*">0 (gqGI9|"=,x_�Z(& ęGyl)m@Ƣ;:9Rn(Zg_d -]Ë_/pp"c5h Ch'̠|6~ONi&IX֊ czMUWݸ+Vyɡ-K&M;F <E끀<�H@O8X'{ 룴g@1Ԕ/#d9\B !=䁠 X IF8)]|D,X#HD>|�KFy ϱ6;*ژS&؞9GPY"\χQ,˱hY3Wt$8!Gpcb3<w\:vO2Y ه0KK$[@IVE0&<wn5koR~{;&*松v"<Z዆{6Y8)$<q>ȩ(Y<P95䥢|,G/ЂeHy (g=>BNJ,:#L,$"fxm>^J�%\<QRXjjm[tvV"gs=VD|V0Se̅FA)G!]6c+V>8t__Ǵ^͚�spQN$uIMdؾcz/}j׮<c-9)÷{On\d*DNf#@@p �R$H'x|,=SQڳxsjʗ2KEX_.ː@PL{|,$#.Y>u0G,X#HD>|�KFy ϱ6;*ژ3>xE|27"z>"`᧘/V{ pq/ .6CWZ-_y {B JOI:*,UaLX:{.| kLZ;>>_B@N' rsy^�� =q>ȝ2<P)yP� { f"Y�Q3(N2p#L�i ߁֖y|N8 &EE,#7!hr,JB#L|-r"0yt/<5>GAݶim1!x+@hSØlS?KڻCKdžLhy1ng(6n(F'瀀(`�x0]8X'{ wj@@ p>�A|*2\Id>"<\F͠G8(I2M�4F@4<-}R"%D ,-E|.ƫbUE|S ntȩdG^cԆocK~,#`_Ukk 1x ,RØbS{LJl7n<G�opA<S`>1) 9�� كD�zye-=Syd<(OR.$Kh:CzHl$,:#L,౹7bɈ2L>xBNa>2| %HmfE"e,-E|.ƫbUE|S .2Q#E ЖmM^kY?vd~oߧSdJӄ5XJ Y@ '!oЎ 1a˟27k/G>xα/Z2v3*t8uFQ4|<9dO"*Kd4ˋd)y ;fcUf ΐ@(!=䁆l-B P/UxtF 2<o :Y@ʘ):#QRp9b71Mt|& RX_dF4-g"~ hZu~瞶o] {|p^MqZ@=q% fO{:'>ud׎2uWst>u Q4|<9dO"*Kd4ˋd)y ;𩬺Pf`%4!=P$CzpBpK&\1dkRHA& <X0 Q>Bg6J "B2G@F=i>.\KcLԈtej`KM>j#r_0@8mO"juX2& S8 cvrջv=OjߌqZ169E2H"[b끀!y0�<H qO@NGibϩ)_F /c9r|,CzA93pRgPdb 1dkRX^/扒*<ǢV4兀Vkcޢ3_E8܈L"䳂 b([e.#5 E ЖH>BXƛ^gn9/ioo/�M+:XPe,_xkb ,(ӧWʪ g7oy/WhP<ddd�Na3pe]]\wm#~>!űTP!.C`dӄLaz調vOdw;ǟ'U|姻Z3b>*ޜFF"U7=se$Ɠ=}"t _ƜA^**t3bG8)]$ti ̨'nAk<'&QMa Tט)(f�4-S!k.Xn 8/,t)IKtڄЁ+Jt1֏ޱM~'k!GǑCfK::o'n{ _?8kaťiP`TؠDZ6/}S<s3{́ ,,,,@o4oK{mVC?4cmNx)Y M�"$UyL=[?tľ{eӓi_`ЄJHH7�]Ǝ]9]u~d�Cl)yRX M�cE^coȾJ o_?Yp=\xɳ٭DAj54+y Ga<txmc+W_08z[m#EEg([@. O+e}l `BiPl#t?_sK?|G総k|X& $ $ $ xIZ5j+Wo@p.:HfÆ62L}_yGGLOۏ4Kdddda/`t<PO?Wfw1z\±}&&�;xmG YSLvLdddScʼ/g_v|k鲯{/g,X\�dU6 ԧ^}%UlI2#&(Y Y YtXK9TگwRp,/*l"K�[a?~;t}*aM_کLEdJ',,,p,cƱZ 6}cc{v`t$ 6Tt�g͜?4O~׵?y&q#g[ c≜toX-$`_G~ۧcL*!l� @a\k,S9;[,߷\ULM.ђ2 pC)8wN*NM^uϪ~;lt)dzzN�40F~{^5}dT&k8naJd0@IHHuBWP׊B2/򞀮z+_Ggg4(l�h1aukoٟ?exчTSe<z.@@.n P-XH:>i4!kiBz(j tL:,uJ7\zm}+w*'1k&tCg E?+_/zxWmr -ȉR.ᛒ%Ʊ008<R7s6&L@@X w7ar&1eaLpʡf;}k_C@;*ïơ '�Ii񥗶+?>26_c[ D`sPB?,5(NҎ"' $ $ <S 踤q`+.CtQ۳ku93xo뇁^t0ָgA �+;<tOTUjG`bG4sa @rN<$PY BB),,,� Ǭq*ѐXA>2^Jd<2cM^\ k{[uߺ{߫B a6 G:&�ZVx>ɗ^=䯯9D8ؤ!"Ʀmq�HS>lsT(O ylIZj&Hhk`̈fXS"Y Y,@HRp9F$;Yrl^ F |PH'q0�2cU/ '㣦kllۦ+_2p'yp g@+5 �m1Οs?l/a#c5DhI46b(4(!,0DwcIddn`(>Sep,TЧ=q&+~,ŚxŚu8&d8g3ȣ0NcW=;7:;2}a=•_Uw.NN[lQ\( չ('H;p5R[C'ykctWYID6% yJ!;E2"16sA&j]v2>;캱2nCp-|Pgϖ;- t( 7m�Vjxv?^<*#M-rlȾaqT!<l -%M<GBKdA$U'E^aBC.z(5e%S  ao8hy3B$2~_y1:?JcXʠSELO_Bzq+_5<׽rŦ]+z?Y<#OKφ VbgL__v.^gOeA  2Zhgw0 Ή%է%H`A:3gJ1'h#<`f7J$L@|e cJ؏En@! a3g |@G9~L9!;L+Ύ6??R{)㏒ju+/9ů|.QY� CEX�KE/߱ⷶz蜩)h؈@+؁挘_/hpv2gI-Y]L30>_&Z3yJ>hIddd cǑU"o'c1J*ŏ:{eaة>')GH g|ő#oU2!K8)uv^7RW�[AGV-v'N/WH=t~mh^W9b4$ :u󦖟0kI8cƮDx4)@+Bq[8sŠ^H$w h!(,/w@2y D%Eg# Z7g x2�q[<i2cv22,ʉ uδ8v).ac9Ȍ\5- $GfXX2|oڍO/Y7_/H̥ ,!o!O�XW:}ࣿpE?Z 6J6V6$iLlA9]l"OHې]-OiBGwd"/~OEI�Ż&R,ͥ2% $ : Okn% X>lYCby>AG؏7[ ⬳FQsB.<i:uqЏN2CN|c[.@S92�w={^kZ;Q HCf#L SA ݞR 1E8zC<ȟҙ 2CaQXӂDzD>ǟh/ r Sɵ4ț)Nkv`!O/8j87pp)մ/tv̲<vLt.x<.otyGu) N?cǛY×-ux?ͻ�@0,aNg>.X+q|$`mϿ%tQ_rs!W%\T?giWʆMx:VCđFvdч+YX x3xGLBM=%- lN!Eɀf7"=HP@ɰ@r;&Y>,iG8<L't x>rCMpNw(yE9͒y+ƕܪf~\ E2r9FDĪ]k 0e /8!DxNZ\<JtkyӪcN+ Zk%%ISNRc6z t5 . 8ڶ6SnBaW q;AΞ 1r"Z8xhTEnN YF#2 9I:-gMy$ М//<q^D� Ozjq%4!=P$CzpBpmD,X#f/|T3-Pk䨌yB 3R%Ypg#F x#<|<Re\2;MaLVAWSQFw4E^tAZe5W"G%ȺDL2%l5HQH2޴aʕ;;M{_i2maʕvS*acCOr֑o{oR�hZsHpˇ>-ux 7|U/e%hض!I".$6ĠMV$v&=e#C& SGCD@ s.M)(5' t6te/0E^'N{4C}ʂ_/u+$I|`\ NHa_fm4F9cu-<ۑޯIdV,<#!sivG"ӿlXȴw+MU{b z\ïtwK0P'a,L@/7&r%1y4B�ճV&c:K_m^x;ZmX r3e|Bad;~BI@ذ^j8f>OøI&!tΥ6N `8"=h2&\tY1gZ-: �nxlߣ3DdBn=LQG1!+[B ee c,x2^6/ksѵM<01n^AnE^ƊFӻ|Cز,޼t Er/ߟ--[HN&{ s?s/; typ /&�Z)⻐cRӷr;w޽r⬖e&cr ޶״wlkJpW>ncf!3 fSO`᠙ؿO.7IDeRB:m'X$~b 4~'ڑ "Ädtg W6Kb*" pqQ(}Ra B'Lj_e-Os'�" tPE)cn׸S/b^^c,5v27m|ϲ+zĹqQ*�؅=>`Æ 嫮X~;00($ B�xxܵk׫z1<uʆk[t.mISYZk57xڌCbBnKp8;I�uvNG6qܔuGIeL* <� H~.!pKM8~E8Y Y@M\Q(NڗHC_)A:yr4c�ux}q|E|-ݎ\åP p?n_,=wYuY߳|vrP2޼DžNTŶd2IB9vyɫ^`0㠙d8h:V ٺa!M�XYE+z׿sYRLqP{4 %k23mYu r/w &`Ba3tS'B� K '>礀ٚXt}�9\$X}$|Kd9аABDb TGͤ4@'>"tPp~J/8 ˄@tȃ?;)5D}Ė͛MfՅ Lߚղ=& r>cf>B +V(o=YP;YSΣRDCQz~vm}.h xmOcw`a\6zfqQqm(GB #x/|*SYDzs`2^Ϗ;`h-=`2|y,!p>�A|4<58*%4!=P$Cz䒌pBp}F ʗa1d/K[^/!D@ $ـ/#7_7`\_EzrAު+'\tc$_#'u� ^rt vGT&q~XެRLV[Mg/.ww{Jq7 ۷oOO~&"EU| Tkdv7j۶m9kǭi~(4qզg^c~l=9ocb#C$4;.pB@帝 e8~6cX�SV (\N dtB`? PfVd*q֓,!S,-#wR/D ? 4G:k#?;DlB+UӗGQ[̊ͪ.6Kkz.8I).NZ5'^ 7iдT,g!ZQ꿄Uz/cLo?cKݞϻv-Yam<,Ä`{LߖL w 'Ni4l` ãKGGDkԬAP 2@"aT 0H`hVN‰0bdַ%Ѯrǒe>Lny2G</K\t`#qmKƍf o1WlZW1,K3C8'ir~nTkBmBJ`\t/B?jTt譂= cx3G~p2xT*^�oz �u $o<P29@ȇ?sŹ@#SZt'7�< #4'd't.lo%e⺂gL_l! &f ?Ǐhޢ ʿĬ2|.=8hm8͖{!r`]vp^_a&dͶ`BP_D_ϯ 7x-okif22ekL+஋Lu%3KUX6fQ,q(%:-gJ&ZkLKdK@@+Y@E\f/la2@Ibc 8r:t|d4u{p |W?at8}5<Wa̦ov׼lFtVytZ<رca:<iXZ+j 9| j\ŋ+|d [ .]Kswb2p]f D`mbI iK'@Y436k5IClujHE;ed@ضcSL ?kTOu֙+ RM[|kQ&|N[e<tNs/3s^h>_gӗ ~x~wM@!.@^kv.hF+*]=fťW~+89;LO@~hHo�v;�̰*MfpaL^ d^J�wDIdaadkĶUWG N ɪpO>]ۭ~˧esy>zֳrY*g]x+|^+"~ {=850B_:X oxZ7o<k'�!tsve\eN3z) 1X FjܶxiN%Ksp'NR.])VQCʣ,0o,Ha{^$=lw ^)C@v #x WԧDВs]~-o7۞3>~DڗSSwfa XU"䇭"yk�5:4ڸqB>rm K͒5yy;́L<\5eW��AiS>"=kw('7BGnRT,K@])$ 7 h EmM-Ʈ-L<=WOp"@GO4:d5m~|$gu{G=L j f>kWZU ^-_aMCC+O�bkh +,]tV]-3K Wy‘lf6k?V7<uͱ+^~e ZSӼ,�Y5Ai^`M 8i�g2iHgRxD\N`kt6Xz{ +iб!ns<>V^:v\otڜ_oȫ+wWtcnݺ.6qzэqKV@30Cgin7|GEi@5X=9sw]kW5G ptl'I:$#Gfw_x"' ) fmũ<tysyA:x9U'L;ow'ͿAHnK'=Sj|>#G}]wݏWjuiU6y/�n7rM8INBkv3#aT;ōɀ\~y7W jOmdG�U$/!"+fC p" qBN @)$ N h Dt?t& F=tz8uex||Ief˵7/UF7f-YsϽa&>` eW eV�v[X+b}z6k{Yqf=0{7f6%'}"7UeԄ8p&8Se1N' QI\]rh*loqȆ@8{ax.�'O8 +&8>Ïvܛ^d|ӵ}X^cx=5{GGGǡIF< x @2t۟1ϩf͚׽u?Iʅ30da^qYq5{F3qÓd?Zp?Pc2P.U)b!]j).p,p,Z^NijIm1[>7٭#'B8r7:yn΀K ?Onm/zsqo 3�< ;66{_ebdVBi|=/~wNέ濓<Vdwk'yο7}Lr7�쌗S~L@d��NtRyAx w}'~`s ۫ &hb6=qNoiЁ$-=tx8=}f n6rY{��@�IDAT1Gxmr~Bb[80�5ӘX aPX)x|p�X'Lԉ@;ᦗYpW?gkON9Pwq%{AF99@$>]I^3ho)AdgdmS쀲TZ\>BoѮA'v]@[%<gxYзN 2&d`dhK�XQ巿پ}u-Y;Ph TY7K/֯1U| ]G�g {urBʷ8}ϥm~NE!08:qRBOgnv _b7~\^&ޗýN*<|p<?Q#T3ҌÐ \!v­6P8�r˿K@i]v8bѿ,Kۍ}�Βs'Oy-]C h]⹂4E8Y` ]mSYGm@8\:/,E? &@NMLΥ̎Wy })gMO8pw}Cș5 ~ c{|.m˖-[_MN> r->w>U'J{|ZN/;q:}E8awKrv{.0$ArÀ,p\`!yد0dYcvmۖN[>86<y׾,v}��m'[p99y 4VL7mdpf,U:zZ~<ISǓm) 7b.r2*{�:u9p r_�bN(g\ 2LH!Y`n(1a:-4h@CGVȜ<p¶+u1q58*vfBH7ͭN} _L~e%>Pc2'�2qhyXiipfۡ|`/ ]l]f<7jp@ʸ?ˤCu?q #D|MJ(qzzE@K!Y`Ӧ;_5XlHXo<a}o}IS~Nj2d]/NwǠLİ p^ }С}�Z>\">/V@n`<Nh7O]Ud@'b;K/\qGx�?ATvUlp+~" I)G2Hn6Ikk$4\OVG[Н�OGtpb�:xװS6s;kvZ50�o?S8EPe{v%&�16"8ߺŋ$+/U8ŧ >Գ|9o7vq|qK|0n�WƏ/ct} 'LL:#%% )$ -E ۢ$:yĀʟmih�4(<U?^ڃG6=E7^#_I53,$XZ2xL5y\lӻfcs;*w7qVy'Lp�(;JŃ[i.i&@5)$ @ڗkJc@ ,m4'ɳZHI�eLW2f n1jykqGwJ#h)D Ԫđ_P%j>5/ye`|W�қ�"H=o$dI PD  I$)Ybm Jtl#$NP3-kWΛ8) �b[W]q9o2˷L1)NaZuibQJn61d@ :(6PQ5qo֎fi~ƼYw7J|W`yc� (0J@KY5}*^>' $@@#1#Cgw[@Ct'Zb4Y'MˊLr-d,w:�ƵRgE –U? "7(.'�nG>Ze0IӃjvtt)GfeWN S2%>wX%\+Y Sp�dN$&zM&O?gۆ!퀠=9{:yWwF1E6ݯ<׆Jb_4-bЏ㭀PzzdTJl g0vj:WZiJL<�WoFwٴ)8V9)pA䡁WsJHrxY pvf6Z4~>�?ڛIm[u~ұ_ťU{4/-7>ϴ>r͊nQx^w�xZXVɸZj9nXvm~Y%/obϘw຀ ƼMP6Y+qq9�� ',w ^`݆!'Hc[akR:3dlI�?$tb |q_4~f+^m:Z0'�: 0c9<j3k ] Ν; beКa�]v%gZy_QVM|J۾%O`_^S V;@ @r!N'ԚL.�4 ZđfĉGiVu?�~=k֚ v ԇ6m8 u{kPXZ"k܊�Rvez]ms+C[\-u/]nvof_g*Ƨ$ O˅- ^�tZX>-nQ2`*�2 [ ia:rN80)T[v$<`_4.њ~Zl {68�Ah"mP31j+M�bkǘ-JO�t3rl՘ 2oQvsp8b`P<ci LLDJM)nI H݆%g=;$#;:w}H?O~u_K5;N�mc!L߂,1{uSk @6"b{@+6�h ?вKm\ӍÌ<t1x҃ e~&ಟ<F~}*@ @Y(SXݝ<]?c]gZo$󯡡�(L>:~wvͦ̏p*yiDž" a \~N�P~hdZp uJ':0+i.|7_j&t6Wdlʠ&=}L`wcǟh>/- u,m=gu/w7m[~Ƕ3ۖ~w}\淛2A,Aֽ,MWTi..1 Eրk @xO&�!C.YysMqM [r- tH$@4�j9Rh UT: c[`;m�v8~*g k>fǭa7 ȧ~g:B|a!43߶mۀ�*}mx[Ry<**iMgvf݋~Bֲ:o9lvĀU6-[OCb{>W$X"wAC??+U?pMawFslY(R|J-`ߙ2*Ώ ҴKl �'�a!m^­nyabփ4*s^Z>-P~n%*_�55s] �w�{DT@Q؞S<- i#td? @B=y8D:|Afjb,yC3X?ESG|G>ꙫn.L�]v paP_dS-j�5xhf-ӇVj gn[_jkLٗkUyYyQ�O!L=>M.Bg":ip.aK8(1`$ؕg[} Y~暟[JM MY@k:YOCMyuuprzP0/@! >-8Pj:>ԍ�{ofnW;1 |QDPi.k0Osg�~xd2o< h]HiHZVghH? utr8]�G#sӻlY_,9:xc)1rX.NϦ"4獀D Qt g*LkO�rzn .z 7nsf^ځwHwc_Em (6;:mCA4b"Ayܣmp `u'yΜipWw2k{8f=&+M4ipcLr1oVYխf|'=f89 ::-v`61=�*w6`G:M|7MmtXh$t7 Wǹ5ѩd? i�l-\s):{f!63x]ە?ěL^lCkCۆ6?xurtaZuVLsb�=(Cc}F-_ 4@Rg 9}#G ro�`|.�Ȋ= ?˪IعCJRY%Y@/ܸxMf5gɞIc|s; 3 8Nȑbs~\:̣ K!Zɇ*)T}!-մ {xO� Xd:c )k+  '9u:}m^ p?� ):|WK[MtX6CCΝ~G\#k=҅ԡg3#U9m> C0ߐ7c87g;'N�gCg3V�5VӖaT*j0ps1`CGLĦ�ONgnLJp5h].Ӊ/Q eHRbjg�f7Nm{bG_3{<z2Q+?W>oP�ªrǭ6 JcQ+ufys^l*xD7Mu(>$ �Z �Wn�-̯ lm`‘P)z HݹltW Ԡ::$[Ο+u`.{L?=gggb8ԡp(LGUJ|5dz:gʃy0qk�mb-e\ OE^٬9b? Hg/y㫂@{.BV"g=݇8$Ba5D%$[`f[*uȴ-}c iz1%tׅ79u<ӄ 3:ʄ!+-+,y<S& y0=l3:u(*c 0۵料@X%�ح|[�Dp?4UKEB@W / wKAN\p�X#pJ,w}CQ<}ȝ dljY~ef{>bYwJWEf❉F}Ecb,iɫ!qa9xBy#L+L9a9Ƙx} > +;$7oV�)y\Щfˋ^oP3gZ[u f[7] 8}:+v;6: 㧃&ۃm�OswCfp'sZ,5 S7;|UVxV"R|38acZS. tbI`n\Iiwu<UC?t<MD[7@8�*eЙl c-@{!uf=sF-AN i<>ڳf ?㲄·eִ:_KAq.)L<E4rLayc]˅¡Ncc>; @88"Ķ�܊�5khp|7=Iql>W4ͦ6>fx[ \X ہ9jҺl?Fy~:7C^$Nn# )T 5κtt{>t6) KYBYt2yU6v+«\aZeUcէqGB\38 p|,[b~Mk01&|wmz*r]&�3{�|7@{ww#{a0sΜOp}] b#wLc;N|!1 ۈ~O::}2?�'<7zjUHQ}fͥ{:9 iŒ@) Exͳ6\(KeCOkZtYbP_|L ;:5+ͮ3|q@`>O%,˄8D=[- Efcz7m3Sg�!+Fk` 27 $M%S!gbEk txt_?z�뷊!w6Y7?Тq4CZCivEp,GŅy7󪾢x.: 7=3-$KZ̫ecQ0VD]0 1h݌uεoZm0KW71ʄF?"Zǃi0Vرش&R|\[: $;$bgiW[ny~+卐~ի ͎ٙH 4ƄՙaPLr)_8Q}ʯ*s ((^"p iJJxċ7ji X;NXsJQ \&3oܝfieyG�mJ˓H�G&�=�Ap�@EMc bǯi ꊫͅo|kϽEF6&4φIy)=U5]υH"ٰ\ĝH(kz(``C2-DvdBXc8تOxP�.JxXR)MLLVUeV�4>:\>PYqz.o  ӆGe*0pt! nW`cACFבtHӓ2Ǟkuhsf�9PD!GJF\"X<8R ,@3!t `iqH˵}Kϭ=xgѶse_;YMqiUVlJW9M9^0XWl_X>7Kz:7s<GjUL&G ,x/'5Իq29sx^}Al[̯ _0q@w}�hwqn � 3T~�ɘIN Y]+FY ՘@죃lj�1 KMug:Mǒ帣xhFN" ,3GpJa^Yp'WJJ v]�m-l"Ny�#!twzꠅFye\ЁІ .xx`{9gP.GL5$N25+TQh& PV8+le<C_ï|NC̱B|Ќ=bF0O5#O3SiIgOeAFli.FۈVƟ.ȏeW f| Q!í<PI`\L v% ]  @�?\2X#麙|j9H%aXQz>ӽv3-`0)Y ӆ;eR�]YQU#xe0t .If.�==a=XBi PN�Kp텩Lpk݅qr8Y󳾡Gzάu&6cm(=TE23"7iDW3Y#2K2G} {IsȾ}Xُ&h�ř,;Nmo8n$G'/H5xlmxH~h ۼ0>ƅ-J@+nݸ:ugюH90ѪO1l=a&Z=}G(OebS-百uM/&L%Ul/pf,CA-1Gaˑ#/B6 $?&vfdl-^,tfs*f xaM$տ8`pW@ǪpKn3[B,eթf^*4yBE1xc8=rr[ɥU '&͑''Ǐ޻׌9U1pN,d;0At7.p> ]2 f CqChV�Р͌m%�XWd$1ڵ4 ?K2 v81ϕ=_!<}lL1{1) eN3pnhys2l{uv@rI?N8<s~;B0ɗVׇ~݀i{sEO>Jf,5CoLQs}t: /1^fQ'�90V~qycL"9GO$.o.z(7[9bam5!sG<ob\*˯VWbW ;\B6DCzBy|+L�r$/s�T"�:uq CaV ;H~ādaÐpR@oRU>VB!ĘxQ3#}t,^fV1ctXd d%p#G`/ۻ6H&2djXH*2~dPD,#'a?c'ή#Şyi~ݯk sc::(0R8.d.@\ЩqzS- EE|1NT7u _:t^5?7S|یZ>J7V`^2& N=W=\JVDEysEYvU @9=Y 'dI2a_Fa�ﰌp(\ Aa6l(;1KjGCO{1{qgfkq L2;'x\ΰnTql}ka 0rotALVyd� g)m/1)쩁 {:|;oq\ .:7[<4:J̓|7N+~Xe47Q&,[LgHoH8^;~9f߷?ܰW8e|[/Hu5 W(+21cоD CQ\iVVKt< Z(C5uE e�..б"բ;�qZt_5M_1ȒLt `;@\!-6ئG6C?O4n7.,ڲt ,<j z?v\ O EFeSsݝ/+z!R%rm$[b ژ!NM[R+,sX<04pX~4tuթ[̦g?+Kuڳ5 u+dzTixdg5XW\sۇz<o6?·71`?�]#s&9\6X(lFV\Lj\dj�2�m: e�xFM:u Z<nܶ,p*Iett`t"Kꌁ%<% ~\. 'OߺtZg\x&W&M8/\LZl?-G524P.8^8-#(QmXd?M M[b u|~zv3h{<A3[ d"(_9~dhlh87$9Ģg� @@w(iWf2lџf2IdkZ@bA( A�s0`ggS_xェꮪQ==ptT:gwE|l߅}}ywm1ҽX@Zx$$>D-I7HT D< �3 cQm۰c�\sh83�>(;] \&.3m> CshČ㇀ɠçwc aPA:`ts<^/tӻ~$@jtN| {ɜgb6n٠;EOq2c_jo mxRߝ=s738VpZ/7ܬD9u xݻxA*`Uhb>)dՈy619~_|7_»}cP%tfs3<cq}qL;*-1Lgb;eu4ҷI4.CEhL�Ӭ+h .;g�k5o)Ơ4pqƐNDg68ٻሰ9mAsA  n i68J/ ޙn~ӵwY'Oׯ> }Pt湧+' uNlc.�ڂ]o\W%^ X2_:@L3m;^q2L{G<7aa$,I-[x5ZW$yDʈZ;=܉/UzK_zGExm^ r$W@_~B'LGv#TUA bGc?;6g2-|[0�k;9:f6\%h7L.~@[C+lbz CACc�$N]%ЖH �23nV^oԉ_y:KtO|<N<h�-Bzw~ͮ E۠7e xMSNN>O?ᇾa2˸f׼M䗰8f&gO}D$'_阗herɈ%'~ ydjZ:;oԗS_ ?{fPV~8Gf4@k /l)<z`^j6!8h <¾ωEmo@*K3qit8ʌ4H˹oS(*3EdLDs-#qxG9Jsj2*P�rVfx�ΟM/Ni?^#d[P= GN~ie6µvE?M x͙16PWl5ܞy@:ZN/!_s␲pk_Jq?f8ʑQ.C.<-~ c~1m-=6+?c5| ϭxg^[Y\0?ky7'ĈY;Q4|Zӱli-53 1RZQ(igsAMW ��w5]{h>Ķe]�^qZ"boXfxu7bKy1&/N>&qO?v>g n, ΦMǾtL>ୁ~}>G'ciI36kǙ^U6Byxx}[)Y,Q"sW_#nGdDscM~>7Jylտ(Wsr] THk%'X颭5 ScW]lRx{|:ꗱsߥ4sgf=48i,ϡ7:T=(-290Am(J(li3H`nQq+fͰ:�Pq?\)@$ݘFMQFAx!4twLgcSEtk<7q ͟qt?"*NQLdɟ&ӓD:Gw/acw`}o7*aEtz~ۜ]\\<3ZltB l{zKE54 qճ㲤OCY7pNao" y i!g<`;Εk&#>"NZS> r/ee9/?8=Kgn.k ]Rk  jۖ7i,4Z$;,b7U=U Q\Ύ MsnS4lmV�Lg9o<npt= uhl^:, E.9̙V!*b -+'f`63A 1P~FiwI3x4GJ_ @?ogJ( cEļ]toS�w@X�}�la /hv)s&YŷrPDj;H )D4S!6 m .s~~-/ҡ1pFA]T%_I^25HU$d G|F^'Fs'??ȸ>φ-\r!"zn0a;qLA#e/ aC,-:-[߻hBrlPb([JKӄ2(ˇ)F>y4c!6 b &  >h\C`p1!,e ^ϦWtOt?="Sv(ZNإ_ow^q5qنhW8/+N>-JֶJzdaDDNk}6?1�?n?Ԃ=pE'qFRiɏ: ree<<"&υ4V'y8=JGek#1[/m[t ,۹t8 "l<6�).HTea@t'[~qP9oMVnnك +LAYbMȭG2qy,W08r*X~h}t2`D</s@C. z#>�_O53[ ?_K'>?7)`>yB͸]S׿Tz^uA qǸ7/MZy.2" 4j9B!Hsq )A�79۞oT(GWZ'uJ3*OK_0ƕ!~L+Q~? 4]—xoQ#[{m|m�fl?%Fy D5h֗h'2n3a{$e(!g'�&}l@Uô79ԥA:ZB7'׬WSQΣx~/D;`r+ʱɱ8F 3� P?wG\3@=[ۧz>t~.e nDFn Ug~A)i&c-o-yhakS\)^J@N y=`& aTQ:|Oitق?@@=SǠst?ӵwW,Ap-yixEX6R޸,Cu|'b?.s_�dDv�ivcmZ}@b B@#u~7cI堣SQ֕sG �� CMW6W[AuDAz&!ʻ~5?v0L}DgD e`;q?g]t>=N<_[*ޝ^a}D(KFQinMΏ~<}cϛW%3\:&9�t7xܜ@B!46; 8c%yL1-ila 3o@l 52idL+ڛڣYuc"1zӨLܹ}:=JΥ]X6kmG> /7:3nZ![_A2vqQVGCqh?"p ݻv#�jCoQč60pKgyW XeiqpNc3Й\k8 4%\~┷fGL_Nljo;ukɃGpT< />?3r5BF4x]H'.ɵPҔfw)^ޭm8}`<o#ק:Mr=Utr3.Ǽ&$)U~̛]GOcͭa~m�a>82f0A@K1Y#0@\EXY6Gu4�uly] m3BFOu& ڒ|BptM҅f3Fwr�Be~\@ydBOw�4 }{u0V:Dc2ѫ--+çL?o,8fws Xt`vplFǜ_G̃`Hט :OZ!5ۺqʐgBDlFm<q�p*^s1ߜX4ꛊ3ay#qqPG^^)t!ytϧoڿOO{tNޞ҂�ְɶ?b/auacGE,N+ QF:H>( pfldi�PS|�7\W5gWc謴vLo Q:[=3?hds2G\.7qy.Rz0>?].W\K2nALE+ex.6;g6yM#Vg[ ԮAq rS5k0wbz9@/rAߙGK|PljAXNm(Ghʳ_+eJd%3..9B{/=M}6eΟwn iD&cH֍mx&FlFȸӘKI4k؀VCLy5 M#9cG%@1bAք? 3K}YXp汇wͿJ/| ThXlFCqwS\<n{Ӂ^,A3�.gYh`iNMHWnԖnІϧ7j[e[D\}Ke j Ȋ6#ޕ.򅳎c5Zp)3򿀏|_~w fam}@\pH4;#8 /G�!$\�[yT"%Zh[s�P˨/ce ٗSB:w2 ;*&ÂtԀs0`tQ3_g>6<PҰ(.!<W ˳FN<I+CISi` >Jy5^9=:ie��@�IDATE75uiheQ|9ӵp7qO|ߑܗn? U8i1 \cTGY5$#Hz e<jR~ ^}Ki?~i@0{ؕ,G:mx'͏reipe51M{m6TAs`,f0JHġNYc#b򱕽2=Nx40Q-WV?=.Bz?{D_TCNlNb]6FyS^0I7QZltߟ^2>נk*> bN׌QRl-�LS5; ӈ$-ΰP Oi&`zO<?2rKƫ$B$Y|ա?&|^"o?G>4yJg\! 9"Gj`;�юID'\@b젆Q�ؙ]&oK 9-`�MȇLo;0w qwgS_3ȉC4e/e:ɕLY؆Y�)j@;XD5e5W<t7Ҏ:?9 : Y�͘FtiqM"KR1N(WypzpFO7ÿ]+."Ow=hӹȣ⬏hDڐ)C<p1Nm nvTAlֹ@t�NeɧA�N1y}2=*qa Xm;'Vw/iyBz?e`CFr-Fr*?@'"+M4Cr1ߜ-oOG?Wq+]4ɆIz�t ϡ%Wq3P1N ueg0ڏ~ Y�:Yf$_%Mv\\rKm]udEzwZ>{&ͣ/!l⼳o;~#xq80]vHLa&_V DV|G~ [$i:s礌ItB-�dcǯ] ȣQpW!sC{ v(k\Pyxҕ%[Yv)aG&t\X Ztkq3IbeoKΫu^;+鐏n]醷9xj:)`t16g߸%_+?#zG�PO|ҷ|vͻGw3O:mg" i]=w{#mqLRVu HnG'c`ۚPD zdNߴ:):C-'Oe8Һ<f_Wӣ/`Փ:Qx#8PѢLWoTJ3J&g -7o,g׺uHWMs6'k8m&Оa8Pul灀ɴer)wO,%ğXŠ6i1O^rJ[UWA#^+g/CiyKŗAa!ht$2>& 0_.-!ۺlk3P3vASzO{&NO=_ 0]ҸC>5 �<LRÓ_0{GVf URT|˸`-}G\"Vyr-Ů|.;vKɅP]uv` D], � |Fg Co#,yu?,w=XdJy$F*`̓2E^ W%�|;i4?m?GG[㠟}<BH(0g8%N-⵶Ö�mTعkA�UM�Q$i<`~1�>KK؉Mz?FZA¦ kEh6�a-ɋWIe| )́lT2y@гݠiuQQϖ0=P8Υ;>FkƵKQa~@~y5G۷�:8pogYnSAGC.RV@?U̘ziA΂ƔL *wM14a";WO <Y_ݟgӱx N!:qMi䕧J!yt5ިk騵ӭ`:ܩcwl@w%3!P%#aH o�5A Os_z{E1IU4d91Z;*e&F1-y_KHKϝ >ws�;[FǨ~`NB4$uikNݚō�w n l5! ] eۄh$+/ %J..(r5ibz d9 pIp_.2W�Z93AFc�G!'sjA+w|i5x ++;B6%ޑ!n$WH̿ucJ#:"NooU^tcj� Ft6P%�)_Z뽽cjk_Z:9Dy<C"q)A �ӋsxȜ(  I<GZW:!҈�D=v.?n*v|!'A8=ni#W>7)N|@p-cviI}،jV*cp CѵȩeZTґ-'sڟ_tgFZ m`>>(0)ڇ~�3ux*뙖Zfd Ϧ 3p]h6HYA'\3\2zF|]FQr1^QN`y1} oXsMbs yspLɟ�DƜ>5:WRLz_><ԁFx5?al|ȻˠF`WӦl1]T7V|Ԧ2IFY,;3_sO�>o8gZ H{�AjG=�ndDI5^f� iBd#!if0dz_F|!�2\AWQ_qP2]+mL/Sƙin) E87Y�a;,+1<ekznZ |ѡw9(ǒ'^ wj򑦼>򈳎QF.yyo~" <<<L^t\_!8? 5'Lv@?�Wb ;9~#ow0^c�~z@9;'҉`| & 2v6.jiģF-Z) WC?`z83p݉OL?by6bFqV~#/7嶡WNDTQ_DcZ )>j"wfJC[p\_W}}}srG͹C4ޟrl�H*RoC mx&raaj;P�w N� �o,b'? *q7c֚v\Ƹd`)8g>8tkӑXZ)~qxq�@ZI@" pdO=Gw6( pHPg2tbxOJFDkp@GӋenwW6t^HSS;M�`]p>1sQt{ 2vwfɃ)<}~wt3-;7ux<ʣ4#񒧸~1Crv G||N$nnΏ1сc[ g烜otGKtuoETDw5"\P2]PyFy@A@U@~S'3~Y쓆#NYgٷmnߏF,b(;D-9i=4L�Cs7 h46z-6A¹ݻҫ^/0L(W]8)Gyw Gg]/m lnw mϵb [Wct,ϝ? !WOkR4)N/)HNqȏtJSPr Pt/黿Յ~ nrlp6jGv?dj@?�ع׶9J6Cathx �wN8Mm x_⟧ͣ�VFm#4e|TQ6LCc U0˴+wc!o}-�^7H7c\slϮ5 `el[ _Y::(qɗ^x ~]i,eY '~iW)";̴yCS{f<q)0�q,ˎ-cƀ"2`H㝄-,BK18g T3{3c{Q ` 25jx+y*.X 'Z-*ow]~=pCqF걼u֐2Z vb Ο }Ǎnz{7Qlc@x[qwAEʌJF9?d:i3|e^,w{}FW_.BkDN@?�W8r`F250,4:vgn#y77NJ.(S~$0z&9x\FtVs)Jtk:ַ۶~swogs*l Vhksg=}Mz/%oH>:xҹ˸w$3 *-e2}+ye@?𖭾엝>:ͼ5}3SdD:9kH@ 9c@?�K;s 9S n<�hvyܩzbllU$49Q]e)M H< .N|N85q&4#LJC3 :Oe֑>[g<՞3qݯOuỎ :w'1mגVNg+} ůA:3>oUE2r{6Fl�9}g`M>Hcӡ~�0y,0dユ !q$8~#g0C5T22F*\_rʷQ.1Or&\u'�~} wX hkSĹfh8 ׯ`](+PԏqӞ+@[G޽ui[ ,o_$7 ]m0ʌc;ӡ/c? GmV yIHn}qsޗ)CA0�{eLn,*�$*#ĜwX H9� w,$?t%ዐ3Ѕ_˜WD_O|WC`-.91;:A[ h0ysSf_/Q;#�؍uCy>%N*2H/ӕe^J+(y壸`3 ߤl6gBL>>Kn}_#==R ):l,x6aphTh`ZCƍT `aw� ˁTPFBS>*8Ӕ̤#pns7NeY;H3x Y,2(]i9sa2hgfBYw6\c:ŏ.ZMFyGXU7~c?45ẁyw QgנՉ>�Aӊ؅1ぃ c042D44tEk0~3sODY]EFg\N^21-kx j%_;tӾh#D}<I#2m#*+hx&8$gBVߍ ov>G-E݋F+^jFY]®t1db%[}SSO>NG"50 Mp12h�Lͥ}22Vv݄h 4 p%cg}7ғך\4Ȯ/G$9(dJ45Xʎ2-?x9p?rەݱiʆK޶nbQAg94!>H'D?K^SA#%~jS3Jqɇώ<ٷGIc> HCj�01ip̸`&󇹱璘l p[_oԱ4hF|T~Q7.m+g o.oc}xnwIIRFv e83Z>1:oN_sϽ xMt}JXˣl5jm<qJ].O?J+X3Á3ˋitt8Uw-{|40v-50d1ѡ;{@%tb-w!z 5vAsx|S2C 2~0 7p<UƼ$&7ފ�0HY:IG[@[JrP*ijPA †538vwu؅ˢLe.&XZBHSM<X?"䫢/S- !cd=GMd:ǀj xП|M`\?.NbajRt!,.&QFs xEԝNfRz2^˿)?l7`�|.[Lz (z5Bԇꧪ.?BZ]2t{\}h|_WUO#]4D(^.,啿чΞMO?ţщ ;~5N*rA/K5�11)Bw48n �q=w$|+2Z~|`y1gMӖ@FP% Z(G5)NXS ʿQ4g/�|s16yg̕Ihqg#P?|9�8{!Pq\`l1D_x)(ׅ+ `ߋ_ߵ7gcN0h[>q ΟvH@~�Pj0�1r#e�4DPg _ <o67ZKy(0/2] G(?tiύ7c�8HT 4[%&vVLyfvsMoÀhOQ$S&J]K%[t*hS陿lECx>f}iAvD i%�}S75#Dic̟p4r/~鳘8ChhR H/G/4]<!>㻯9b<3TMg8L:M;ρx-|qiQ�eay0<մСt-5F׀~})/S2(_5'[%塼'NY ^/O>6߿?;<n#X>:"1 ^@?�&z8341B, 2Drg8P8#x+૶@ٗ4J*r%^Ƹdc%p: L~}.uɂ۫tK<<U==jDπT[NX Csˎxr5&'Z xdz//Ag2 c @?~�0FA=5 bDeb1^|Mؗ> ZFW2.z %KZ\ic(WHnD02N.$x-,ٖ8ss}]u,3mu 2^p ,e8B)e=Ӌ_[Gy(F\ko7e}|5�Lp2$4B1aWHR5?ԣa;1O88A| 'HڔIX~ _qµX?-V�sKrv*ke7‰)ͦKǏcI:k(d&̄r+qG=2J(WI2=.>bӟ\C9~0,1gcA7SiHCN Nhdlː2EL@݊l]_BZxV g- h5y$!yQ^|o *P4{O:x黫\ 'jsU<)|;״>]c6r벬o:Ge=D\cr]�ăJgoSwkLZ3f,2X~�7i,wgC d9�4fUcK>1UХeh>SFLSzJ< t�6,fCHqK"HW?:t( :7;o5dz=Gn~(Z: uєL0A[x1=_�WZsG[Ϩ9TۊiEHR�Hj ݥΜ<Ab6Ieh� l`>gQ!ӊ/Z RWKS毸`0�0&2^}B1}Ksw^V\?%+$!紿v`|[#ҼЎ\Q\LLŏ8>5.>g_Q_ʎqto}30߸T5P@?�륧N$)/> g.<ePU]rTQP58*xL X:G9}푴&l?:K&3Wy{\jAy{jϽ+WH8i G^]jE|Xҕ,Kn0Ľ ~iE!co}H3fK֧A 7Bsp~^#5�FgF DBAZC͔&qJ0dMPN|l!/㢏JS҉t$z ^˜ki*7Ivx49(puFMKFq# |K{6ZZP.XKSlC+M&^ J^ w5XB֋?ھ¾o^k@?�XzN #XGcf -&7N>t^YT`Ȱ`D Kt.\P%$YCw.b[`m�9NLdk yU^Yuco5Io-:x�4T(S!]8hGqPyԠƺ7+'q ?~>ў?8GȵU=50R�`zzf`oa[\vȠ,/(;faޅs,qpFV&4 Jq : |kpT6|q'|SvmE�96zua-Jc[ QT7#})ֹ?& dKZKJSI޹o9nfOΟڠ0cFK50$Ze:5nl@%3c)f@�pDObg@~ݝ_uA0 .YZI 3��76_˛+t1N{Fseqs~GM)W917z;}ק $Ce#]ʯ+M k[x޸?cO+>^dwPrqksk`�kԧ;4$'ECfl|�9?҉c0r!g@d5/ڤDyeHg :� �E/5DIk`X7h.Hc%N�#GàF7XN^"]]P|K\|Kา(;bwʥK6`\zt Oá@/9Nvtbz5mmכcn*5`+[${1J,8;;_=n_ #q23]4%]Ay`W."/5imwb{ļ]yv4TN5{UC^T-i?V�Npu7 #(^Ҕ0tҐX ?*_C2vȸ_'ìrXHGY֡~�IQ*>%܈eh0m>s{J+ 26E#,.G\2JJ^@J+~%{!?Оoܩ< E]aɵSʼo!0FDP$g֞oAh|P`+1,:YBWQ&ҹO[/ޞ#l-?XU'(5 GH:T4X]N6vIcgJ>) K<Y&P.6Q]˯qɛPCqGndkr"l$DL60XboU ~FcmEL[nFuZiYK>=jPe RFyJIFPyPe lژo֝0e{ ^xKlDӦ33Wn2fJѣVAO 3~ӑE*]tႢp<tr!ࡴ;2=qfudg|R3ASAad\rh`Sn�c:q(F 9 k|SbKN0pK'N@zoDG9.H7LV �AӚEM*P x$ٟɭs</qT!e3V *?0%OA ,vD}#6šFrf#-`,86iG,#8б^ .k |Eɓ2OєG)-;s/<wsG0�4R?#CD=d�驗Zdf3iqqG~J^x6-zd, _8tׯx5(yFUU:IPon ̅bƓ#IC\Q-7EaV7A[a�[l V�Z:?Un:x_KKQ!-q"?-$v><A2>!`,B={ lP�` 쓷3M_fx]8+'҅f2ƴ-IV2.:!y_S&#Z_*viEj=L& ]8 +UհzjPO�ǃo�P6V"m|jTȫJ~)C{EQd-^iD0q GX 4et&FYiZg45*=$rSUگ HM.$Zs� qkWq‡[q:1ĉ踬7TAUԮ{cv~t-(k ʣCs '^ ?\{p,xbZJn=k` �kPV/Z@1ʦLq527zK8i_JԌuTUi2]wAAN0-5��3Hd9IaR=kyR pR3X�FR1] g^ dċP$R6>LZx00ǟ3�\^tokk�\~Nu *B8AP\>6X8y2FZe ( \Pt’Vƣl4]?ṗaw3� Y֬z3ω_i:܈[=N/>�{1]#O'Ae&/dzZ/c׿3O>f3ZRhcgЏy`p`^kZ&Հ9ui 9}�ЍKZ:jѴѸ Zz#F|Ȕib[c]X!oȧLМ=�qC; %b|V1w �A廎eu͕Nt#.88*ڙɶ4 �.\H}/9{|-F̅(P dO50Z h 50Q�7 ѧ*vdhQM׏/%_Qn<Ay¹@.�r e no!/Иƪzc�H7WE>qoYiJ2lS\tM^ٳ[1'R56~�i5LֆqEJ7эY|xH8+TkLO5 <z(.<wa7@~*Ӝ'un2J\$k'YMZ'z ͸K؁1˪%x J#7Y>tZ,�hȈ]eu{ l@# (OZ׀W!?  cGi}$,nT5ϼJG-mY!CVz5Hmxh d5?Z1X< _'Ÿh.:�^䧏9�b~Lr=cJi'vǥolh@\ LC zB�#ӳ63p8X6F< si/6i^Tg-9&gh9.٘eQ}i.)W!qדBDn>Jn\pе8}+KM'Zej׬)prbڲ2>"+ BG�>@ǯkGmPiG3{ lP# *Oj@ c!&"r! /{4])5^)UI*]I�1UsD0Q3*-@dc#Ώ�#ȡ(xX{IǜK%ض�y``w`q1M9.hX5O0h!x_/`w:/?f ]$eG#^:S^5xHLϡCf�~ݡڴgr)\g`]+ U<cPGEkese.sW~#!�^–֋gN۵[/l6e&`og2Az lϸ@c಑?6CϠ q.j.Ļdŏp-1]+9zKqK 7r9L*AcdfKp1A+&ibkť2]۬8L\!.Av#Y55P<D^Xh�[qW/c' 1X:��حq.C`'ԯ̰t%_q+tGXQu�l(H60mRlUVIϙ��9>~֩Q^i< 'Oe`[7Gc~�pT?%5O^4 gcaCsg5 #d~d kAtA'.z$+HE �DڰAXfv_V&ԡa}i.8^Iƥ|XĆV\ }1UOXW1{k`4?$F ЬH8%|t ҙScFɊvV4K8y<xpKW,GJh8dW+7Xwxnͺ,`kvVߥW_/;u]>'ZyRݜRX֧�CMDƎ0< `^\L r9 #n㠸`,O *`].XeQ1jRHaPzmj86rPdei ߳�mb^UE ^@`SG0hus,b�"5r` /Bᒙ2]l0w艹oWMvµ id'2YWge~[9+1{ŶWhS#) hH˪~�pYg֥hԚ;#E<0�t9A 'Q+_ѕG~ģ|rǝv�@gj\?HQfipNyHBZZ�!7g�ϝ:<3R_ xez S#u*O> dיX|L"y|/uDH3ZIV#*y430�7$Ng!`з!XSs|f�J!j犏so٦^ȍhO. ش6ċԍVMqBwR HG8aՔ:L|'̾ɛXFG9$Y`:ӝ\ J׍:̟#_<{3XykX~�p4?/͢��"2 �JYKgZƃkpɖ4_FW%_X9bTʛ B/P"UL/ .c|%>tT!D^gl9ĕY s]?�[}~'0} MHKLr`vcއf. q.ee<<JYŻ1dhiZ2@ެ W4 AP6ג/6vy ;��Hy#.hߺ5F0@ U,yg$Bt$ |#,bUF>PG8y >jJ)3=ڸzչ%|/M3 lZuo#ٹG$5P`v,ps,$tk_sKۖ�mJ5pzFpZSN8,5[|G1zp#8hYv!EU() g�$a/_8oYH�pu՝>W/_lX+1 8H gD9[uY^6$:nj>L7˯�ضj47$�aq*₢GؕV25N>ӐoʛR~xccNmqXK.0OnģE_�hwgN8[]]N3OIm kFx>Pم[ XI 8s^?i})ׅyak�kΐVLmGc^�KP䄐9U9LRK*# _|ii3%8~+̜</Jn~T<WC7KwloE:}4K%}svI?i`<a(Coq40zp>rM fm�gm 8@ᑃ2A�ĪgR8]q�5@&򭰌d03#%V:l[gEzgit&g'o~}V8q'eª<'܉NMF@ ¯L@]ZZKua{ i 16l�"` 0({#>䃃, Ym >l? LQ~kl Kpxxc (BlFKGO'Y`%N/_ x.O@"-oz5ۊk ^1㶄6r}��@�IDATlwu�?~a?&#P14z܊H?�؊WedF#?[Pes8kCSr|iޕ.eay. rp;U_Av7ȼk\u EZ-r1f3\GuՕjb]s\^:Wvm9cY 90ػfp>R`^6@~>l -q4f y/tsF ԋt#3eH:zLN>-ww6oamvd|,l80]ri$vљf}J񄥺H۲ډU Eدcgco(Ps{0S�g Y4pAջ�~ǖ\7r ?}! a;Pue.2gfx7t6}G! 8P6yV[fP~ϡxnk$">f0%>˗9׳lJ~�p4ݗcaX =JM]mN^ˎ~N>szn43k[%s| ҥ y<8#i } rKBZېP89-eNSs�L%yŀx3lC<}*M�಩hp'\BELGĄ笫Kǝ,,0@&2PލOn ]-ԙ#vkn~ymГ>4gKSGd3YMͳ ~/ >p<fq@`펈oC~@6�6>Dx2_|E7ϧK?Mv�hfӳw@rWrͺJ nI!aW[:dwSm`ЮG׀ D:q-YB; r-JC?�u>[?Welp d矎xS4d<oE (f@k*霥xxo\bdd>t-}y5<ÅS_ԊNr h|Q>Qy�;`5(N(\k*SNukj"YqlH( �EQK!hἺjb)5U%h@p ;Q=q̒qc~]ڀ%@?�hucW@㺟�UE,_`c4>#ר\]0]\,N\ �fz@/L+Pm]B]YL=pܩųgXDv`}!ૈ\Sd[gU \R϶�L5*gL2dokgG/bWo@gkB[[^_k\/n; \K#ht4bziY3x7L?tk Ɩ1d[x $pv![\h;r&vY*�㛫Xe 4*ElFcͭV^wʶ~6Jr [_uƴ<�=]Ncϸ|c ti's!^?ŗm0�._ssbGgy#PMN� 1Y2_~r>#:R9S4!Fů ~~ 2ō[e /\�,U;x%)Q׬0 XY,qsic؈ vg�'\5~vDFr >�'] ¨dΞ"@Ƨ~jb RLj,pl �` ( offhPΞoj-@iPռ4ml〛7` ?3<*V qlۦX?�ئnTŌ[s{ԧe)A;<m5 HL}U\G[�>mj3kwսxͷYG<Txy |nZ-,Si; \܌ܨh"nRD�Jhy vڼus ';'t 戭]y�w vā)D2F𮀲b;}`vcJr{0*d i{@]!PO p0a2 ia޴p)t}s应> dm sC 2B_a<Ns~Mi/GV= qcӯ,KBn|;l*^sdtjymTԓn`,fv@�LE J'i֌uIf`4l }.p2WFxC0 (QnQ\ErWO*!^uڸŢ6Γ'WAlqPYtX˩>N Lb$C#bwIN_ó]�L?2ko^7ƺx�.<i8eqMƹE$4a@5 D۲dh4@Egzv?d 7e$0kO}VQBWʟM+M76^tI؄£Kji@#X �Zѝ|9�؏��֮q9G 5 ^~�IlWкzbq @tq{�h#.<kA&x%c6VTbV�Աv8W,qΪ!@wJb啕U|T}kxJ :z?Z^Fua=ME\8ql`<9T9RAtů,++$A~xx<5TW,XA+XA~@ 6w^ �Ї^0�=YI4ex��#2\NLJcZ/��4jAZښ妱\:|7/]:q�u8piͷ6WA@ Г]h$][˸=5V @Z^^fӀ?/n; ǜ wJs؛{ L8DN/xj.₤G\r eA|@@elrp f*lm vme}_g!$Ac�ZGp5j~s4h:v]۾>5΢pi<�>7iCbuX*!->z9b\*_7{#PEh8 Gz lv�`yvvu6EC}c5ХxȌ9|?4'#os/p| Psl�ϧYL?/A7~uTm[/yXx M+~{�+x$`}ljgy"5ZxI43^\¹$g\6 t"7mٸe#Fف"+^_8s*-_K^{1aLKX8rZ:u{\3h%2Wg]xMͫրNr/XwţU@tY.<Ӂs5&bFpܩ4Cf�̨mL#}ukW^7@OqbǻO^xKrw 4Ek:K7imz?Cs 3./9u_‰L+9i9fj|8 8υSpGBvSU#bj9-ˎ/5> ,QY&TU_[Eϧ?q�0L��@p>kw3,7s8PZ"Gײ+],8];q9o8i.\w>*<> s4<ԝN eذv0DeJ3LUX!}0Q?0&Cϛ~\:B֚Mw2T'^즃XP:a�-_zRLG`8xi"u�G}@54=vr5rG �M7_ eQm/=TtJ(BF͜*ۘ/@9�MhꙨ,G�} ȴTWҾnIG6ڻ OA k`G �<}DI5`nܬ;V_|ɴg�6?; {d �y45� ?پ9O.x5@\N&=?4ڄZ)h|w˷ƹy1^j%q?+1�#+z:.^[>{:-liڬv1 ĉٹtw} ԝp^x|H;陣!:RA֥vB畨WYPa!g?%pືݟ[NC׆(cD繹!�0c6ӯܶ9OǿUXĕ̐hF1vZ� 7tM?mI;T'@M#8 g0[ \Vy>[JbFj_|xסk͸>rOpҙGg'K G>㱷5fAzɫѣLi`윖`P;Ӟq dǿgt s=^4??a+�> }|iw e3㾻ߘdCʔk3%!r72-C/lĆ16q"PV@c/b9]?f/?tĮ0GE ci`�Ϛƴ~g6Zq4 Ogj~|%;{9|)6f3,x~>]?]At|G�(qd Zuh|bгO>1=tͽoĞHK3wO>S]ښ.MviU;b�Ee�5 _|ɴ~[k|Ccq%V7dlo=|L8wmѤm*oKhaPˮ񶒒b=~8 @r:ģ=6rׅ݇ ?&A0z l@;a�v@3Ii[]ZHK>XԇWsrط P24f � ?ta|`DS\퐵�.ijKP7A??7e ˋe6q dѲL:,ff>-FH7 A/_[s4\ԝd"{ }KKX8,{x E3iЇy,-|XܗyQ�.&9vh_qNǍgkґ~q'I@|o@Qף3m}9(<}JnꜫdNx bÇB`61 ([ZHyH&X5v އg\ևj@.5gO5><f6Gb4)o{p:jy;8Nur<e6DA]PC/S7?өa|z fwNwϥY|#6~al ��<-0ՕO�;0p}NϻsؗSi/YmQ `F|8r`,<ct~* v<Ʃ`$L y8I*qdӒwz6A4;/22 p'Ul E[k١?tߑ\#_ӏ@s\=͕"Y CI4�vo\q[m/=ǫ|+2n; b sdN?+�quoֿT(D*Z@pЄ!84%#Z\u#6$ِw'| >2o_'.%c}Aj~g5#�3Kq:/?L0΃w aa 6񱰆;0*Yn 3td#9|n�eQHk=9v;I:FxI;~BZu/h,f@^93H�kf,>^AXQfzчuh`G �f^I2\_z>kMj)ZTCLhG)t;?u+ؙtoV\z1OHzQ[%ĺWY??g<o9\zp˞ק?1.C2֯�ُʟ*=50v�'NЇ9~<_\Ƈypǿr K鷅ynrg> k.lWeL:i+@s8c&n7]c,~Mݍ�d0r{3t`)@ {} cp0x̬H^}/5@U8éЪfGu[&kFQE$F’6]5yYg{5ml&!" (gH<=9t;U~z4ou[U眪sN[W#~ݲ>o%𣎡qO<^1nBK 0?(_q7Ĕ${QS>R*8ω=~|QZċ׮0d(~6?^zW4X8,͐Wy܍K[ ŁUl�T}XRoS5ȟ/V&t+;aN)L"MH;.@2"![޼1^TUyt$ʑ55#!5L[s1Fzw矎uҸ6Þp՚8[߃ʟ^Bw8@r Uyʁ0�A@(2-? WԤ  4䊩9/3aXñ5c8(=$ƟLΕ8Gqp|8 � ϹG$:uR)xf czXb9lo#Uh3pkCV;7ů]۷a}| iH618�G$z!ΧkA; VƵr)59)bweJ\' |^B٣Q8 -._zu4'NEo ]\�1}.9�C(icvO UZ�ЃLE= 5_'ߗ$W԰s>"XrGAHaP6wYg]^xS1?>-eگU[4HJx#7顇eɂQG(†1 2xI![FٳYi~}5mg)Sǻ<ʯ8P@8#i`Z+_' o\'Q0ֈ�oq_GeQ':蕠mƬp2;&:ek,::5ll ϔZ+D*` ;=Uo#ESrL{g悰Pz |zk@o¶| ~p>4:4\C3WG=<s+Wq`_hvOSm0tI QMWƓ4j82g Կ6Qʨ"5şf0[ s^pyڿ10E#UuQEF@Җ#އesP.K9^WH! |ť@wTg#T): @>##ϚmF;NӤ0>ÆOQa?9P+7|V[Qp0n.,\3GPM)*{/DIij±?~m<EnlN/+הa>r5dI80.v`ұ0�:r)w,pVcZ?uzm=Q7_YRZ_,-eVS-a� %@kI 8 G^wGo}<^.<쾏8YF8я§0 �]4!^Sv/{: t.F+FM)&hV/e{9 gtm2lϔ^@s8YCagxN VgPb&8_P/;T�H;W(~3cs^FYރ.D  v8 RRn ԿF13|MXTkca#i怍ű5JP8=\3#L?1H*?a7{9o)6�U9&?ē™%1ÌhW #>ik#wT@#B0<L+} \H L,-jq+MTQDӈ_N@RxT6}wq\6SW ?6>`ʍ]i_ ̔b󺚧B&G'\ جF�C;m< @%e8̜xO0ҿ9->Q#M6Z PRsRc}ٿ~7ęH<&3^~ 3#8#OiĿ sϿDSw^uvi0y}:]["4z݊JzgzФyL( hԞ;ƻo NVvǴhCBb8<0x&Yl�)xG6^Ƨy_nݣ`OF 10Œgٯ }bF:i1fE7.!@\O~#2z9nECܟ`"2# 'ԻŰs32Q"yV8W~8�%Oo*]wx쳑rA,*|r �c93�&e} dяmWyޱ[bux ]._4 BѾ%?>;- ǿÚ7J|["곷 G9ϕяv%EI>eTa�a{^s~qM M)iz!^oZr͵ᤷ#s뇌c.}7p9xYfq]1 �Ɏ=d zz:uz埦EhIt&P)HAc.Ygo' ?e`*{ #z]C&_#:qn{Y 0|.4-_0 uh+K6m<?j~'%oWxܐ-3Hluxl7F։GY_`:C!Y\#{>hFh�� 4M?^Jla}w2ķTe ]vdr0(34\I�K m\^=v*; ۡkZERwۈ^mt1�r<U@k�v$F;F֮i6pܡsa?qoC({X~TSQ M4s. _lĿax0 h mNJ/n4<,o5d~R&.L1~|60ڧ yFߘ*1-{eC.#`SW(` З]D,'=8}M"IK}yY'׭OAGھkO= ǽ.}o\�S]o]sG %o^̓|]3Z9QgG�pJZlخqʩjkNy/9[3ַnA='SUf@+�HN&?atZ$F1kqj8=h#{`|D I^S#ƴb)Y:OҀ |g3uer0~R$x4ݟ#/y5~Bp?b?tm'9y&Sg?IK/8*،tď/%L/.YO�Z�a8rՑ$k^'I\2:m,^�cn"aǿuQ#.1Y|(̿)ߜ[jg:,6㕧8mw<.+R)nia~zWhoO53k|6"- |b/3wu8|�U[$% R[pGp >أlIvwg [qd@| G?*}7X.*cR~_~YbGFB4R_2l:xϚK'Nfp h":DJ* I{#d`dWOXPT+3"sg+ }8 İiv�/~<a1uuoF0t@Jˡ>u1;'/Рȣa{X)!(_X~ч~ *96xGZXqZPaxl>m 4/ 8bg>w<{6�^[8WKN/󾽧@? ԙ)q6@v.#M0�~؎x3I~}I!+wVPBB|_3DDqR",k7~x}nf#bZS<OޝsNzm#~EP GޘaA[E" ֘fpoAq (ߌ8Fl4py8"0m�DjiG7Y2ܦVW�~\N<؅uW,}A8?D ~hTfy_ :f̪dgqoh{ګINW֌WykŏL@O@KSEx{Xa`˦84M}ٻŗxxoahg``  |a�~I] 6tTy96چtk]lӨTu)>{;fth՛ P1xQ@iqEӎET֪w[Uʫ~>EvPěga+q;:;BaNXePgcq__s~PPmvf}7Q�u('0\N;Mh \NKs:gG؈u6W;[:3.p(vT}| g l&@:p~-tD]=0 |It\rr3p["sh"<; f<Q;,"X0ܳpOמ>{4K n}>Sa$:W4b)4IW@�h �#|GZȖ:Տ jpUwr'ۥD\y2`xƏ%o ^gL[\0eGMR'|7ôE'TʿAųrXn囡Mo0woQSI>ZsXkioT./q() f8ݜP|)F�oXTvF۩?n[H � #@r2HK\ƐF5UɁ0�:~lV7'Iଣ^XqOG;~ Y2OpS+8j�.y(#5yk0}ջտF=O>_Zjי2ӭf+xh>(VٳfLJ8/,4HupFf 3Ϝi3.\q{\]{W^q !vqK94 Phq5 �kH@Fѓʝ Xá']b|SܧY߷B}\qhKÒaTDӛM,&SE_7'N3Օb\b< D( \W#a3{dlUnO63OgbO�=*w|Op #'r0y8Q/|f4mĦxFz}FWGu"%o%�G~c{،QZs^vtqs@ iǣK :&�]l @9o\y+K"ll|htZTXs°=g^{;wW6U_Ae&#ϑ%1`rBAN<-4<C(];th6`BN% û#WivIٹUΕjWA)Ox8_SP/B;LM(hG ̿Dc/?G-FRoѭ>Ε-W 7{ȟϟ"|!�=>6wwu02 >^eq adh~1/YWn8ȢQIepO=<QZ�בks(yvo1+])=9ມ}xPҏ4L;.gTFD8^3FEF5=NODGUjC|o^g頸.6:͔QG N=SA"" dJ~h/o}% j@̙! 4cr o>{�}\l�`&#- J�2A@ ]~o.ootrU �*Oԑ`F[6Q7JS(^!:At3e/k~_۷�k6^ow}PW\KVnb#}`[0jSTjWQEna57\G8-DT~=q0)xe F֮eχ~;&ak˯3Ih?*\[XAV҈,!8i|_Ʃ�T{~nZZ©A_ e֘^4j_2#ո )~ R9>vQcT'VBS"t{q p3ua'IVAM6]m0~QzV1WGNXBYq ů̸L�.`kow})%-S7KcF5hDY!7@ݟ_g g$܉xԈ Q9,_.}wHf͖x-{þ�߫at&Xtk@X61m2Z`t( xdq?զ1|ߍ3# '6)? _zp� UrS/ [bOW.(,Sr[XW@g˟0g@aENԿaǣbNEh9ot >ᵿhs|[3Q!'7C@"�yFAaH6&7pyh>Ӻk5D<4Jtfj5g$LҽUDp{Xu&`(zp\8@׌3 Hk] 6S fP_k\TnT_#۷.qV \oUdz񼹃""OC ]zY {􃱔 wpzwޓXiNӁAsN:%<[$tjF`\F{32E=i;/#̑].9~d9GCh9{QY^I-c�h y"fk5ARĹ<3qI*K\4ެh)=ɟ\jʞY}Z# *}ҳQ�N:#9\jGkYr ˭?pOSvJ?1 fBV0ⅫpQsxDڵ;9̌!iW8%7ǰCu0Գ3O ,6:s#1>G?a׾FKzP\  ,8>bvPFi򋲦|4z(J~l;|FSm*izB9='MӦGmQW9  BwCF"2QW<)NJ'Ca?^uq0�m^6zChdkwR3p}O sE[#Xl�ɨgx4vS0 ̉h(HBW״ºo}?w/kpޯFXx*x)c0(?2:Fx_0?rX PW#W"oDrauE,l�Xڥ%ScҗlӨ_%K[#q/sk8J1`'  N\ڽXwSܔ#}q_LҒL?㼰^{BUCS#H0fym㟲(%!G`&̒:,MH(?7g\1EcqDd򽯸xX{7ї\unufqrnA/1ījo ,ua7ةhrATĭ3U9w__ R$ wh}E6NfFZӱ[ׇN,Y]yECt .\GӁ2n3[\4Rڐ3�8=F"cpܰ>M;wAX 9w)1pX�?A[lDb(IX~vH5oP*q+ AT@ڲoa�=Z8qCX^:O~p@|ޟ.oJ6=Cmv:PVUڻu89fU$-,aJa^Ft/F~^4m �5?[1cbܸq4FKe)3TiU  �Cr3<Hg g~O/47+o}OsY s]C'{lT'(MknZo0t@VgV Y�3լf(@[徻 .K~Zm|6`Eg:7‹[[Vo]TM{]P\ԑ->m\2`Nj= y` gM7E_ҔaT ՜%+B1MX޳u<cw:# ;x4Kl?MqQ>3f,Ѡ mNy>mF⇝/I3c;ׇˢ@T/F(elW2<62#Z!Swӫi2?cC o=N"ŠLe�8rwL͙|o2 nV٣U1uu:K?[�sw o D v?Q's|%t }aT+tR*p�_X~TADMOt>՟IoWN'z;O;΅?~mkô⪔ \F@;?l/OKH Gp,"qa@@oDyvD.>eQʪ°TMʯ^^:i):j"H9'e _~ex+_ ,0 >mG>޾ f&`N��@�IDAT?�"6O.ef�sz W*\0ž\KIstS[�`PݽM^(,fI $i+r4:~ޮS[1p!\Ƞq]{^hz}0ҷoz[4&K'n|Om:]iSj`v }ݙ}Kqh[3ݡh5^(ԭ!JN Ǘw:t*_ti8? ķb&?4;?tsWXy7 Ú)hW_`˫jmN'.jTZpN \X~; ^íb�iTQQē𬲽JKpG>]_sZ5 IѦ)Ԗ�#= /1o5;9Ұ3N?'vH:နЖo}˞Q&J.nc FXudn)LD{%tL;|p8O7M)Kt3`X/_0ē+#)6"8;r;,; +kŋ2ƭ_`P^g}0m?^`xZhp~/ seat&i4ޒ7e �,+A9`,y*jL02/őN7K[-t fF"n ؔ6[�Fs9\^aY mӵQFAЕ{hTg~d)NZ[vn \hdvI7.̌DC=Hi#W_}-L3Zϱ_XNaFkQ-am k5,\J^gLd"u冁7�87 wEq Z4e4T6X2iR~x@jkO^N9eE`b'f-k0J@\k>X>:pgO}֝Wo 0ڳ]qJ}@~jr| RpϪcEgJ�=3 7705 '/TG\ >}p?Y /aq}}[*+~3q3$ k=]r8qsF0]V;9>*  "f�c7YMFPP)Rjʪٕ:<})kçLD B VA�ݭ}R>OGwIs?['v)jXzoQtp_ hdf�l+x|p1AAx"7DiZRdzx oA;}*['(�k\z|Ju@qAeQmv<i ~~>*G�Q~tCcSѺ'"<%apNCa0j.¤x{NSGZ7k@#u&@'Vd AZ,ELX>,QaG)NVWFNa3�XgM-}6ʟsяgoGrRb!r_lz}Tl+/joF�mʮ>9`<+\e9o^< v ٰ"TɁ(FÌDŽW{o{{رy 0]d02hD t#}E~MBZJn46D1'&BS mc5Y =NS3�m[F֨G!e]O1iM۽;؍V7S>퉓gpJzg0mIQx^5]d$sa>iՆPyGţyQj*R9xQNaݥ1ȼ8Y0@0MV\KvAĸ袋1^x{ög;lz>7ޮ @/zǹ<nY'r<<28.#|6MD<Uְ&�ʨUqc#;j2EڴF�("Xi'r.R<P"`Y$ಸmTGcA Hʦ}E?KSξ0L?T<NJTs@^B6\Sa�`l/c|ژ]OaV.wxax}L)u h (+c 9B6/~.;[W\:Dw"4Cgx2o=T1屇Co~٤ SC�K^{#"e]"9a 0yA>:86T"jJ"*fmtXj0U�X Zz*@[b~CQP2NftWY?Գôh?T6_M+덩 7~%gCA+ dΐ)\ycK''�P܍0o, f,ZT8Zx6xa{N‰?q;'~(Z< n**UGZ52I7nfex<0K�wO#ZPCNP3�0J^*Szgc…H5�\gW%p@|Fa8k} όO3O;'L;0}Ca9W#̽]CaGth8ɘ$%/�Y�©1 )l ^E{$.au z5})/\׳_6?QX"M<fQ}8p@Y<bرC5ap0:0b3ewԖ 0uVlixz@c=|�F�j3`@dNN}7!78pGȏAz$6_em1[զBiR/ ]jC{xr>cՔ1l\Vc_ 7,#pxv,pk2B;qx,C-3Tk&n n�"xsm sN?#?rbsT>P' 6=+W֘S0ҷ;j@lOu[d59r!eXj7L�0$/q+ T@WG2:#G9xJUQc`F 4 +ޡ$rP^$QXkڬ9Q<Xk1R0iD1JFEWAuv&8HKϦSSpoA0PL s4AW~s�1C8_Qts>`F+i˿/^vErU8NK8C`I'nqp|tgg-#``0}kؽ;^݂i`dn{W`m%}ohFKm,`})1#c9 r):y>PpW1)6%~ EAeoƜ2=J׈lt3#6H7qϬ.Z>#Wnr )n{BfpIm??JDBHnBAma= |9yP2bVi!�@ӑ0C{pqOV<N/XToh-Y|^P0;^c 4,c8K$ۑ k5Ysf[�8jHNG41aRE�q|rJw8aJi'~5(ZK(.Z l oTm9�_3Y2uB#hm�*ǣ LM|~`<\g/0EBMR"]7*!]\q W9XFI3؞Dq{CBʟ= >;}F w-c�%qRc%@Wo�qM;?'ekbO?Fca)c DSyxS_e&?ffǨtvM;z,<7? j bW: ΌA|t �gBKùp0 >oOʪ'5MÚO}4Uiʾ'5RRftWr/xW=e VG iGV)u:I;ԗW*〾}44up2�żCvߖ7aH;yEz,a3R-6nVJ` [ GHg<ԋ)lF�]0F.%`g_ kn*#@ >9 ]o 3�L3Y Z�"WLV>W_jʿoSj_2E+(#~老W<\�+D<usÀ0fl_u_߇ wYV 9*3=3ι O6˳V.x8'Lh7k=6\(~ C7SGFxVAU19ǠA@#^Y=EoUc$/@kcsaﲯlbWٴ dJ01̉p6eWd#S> ŽnCaPD\�JŌ(5FqqUsmZr *ys&޺%< ۟{RBV9,s @үc�P9HLi-Qτ-|:SGAS¹bX|I,f%`}hW/Oa3�.֭սh0 kWg5㞀W\*VL˜ Ռ@MA=�:+T�꜆7~YUENBFN]Q HLq0*wx8ЈӍQ?Y�˨k^mY x3`sτOCΥ?r-7c�4YL* t(hXe4ka8A}f(`G4D#8PODnoT@#b8՟"Ľ.c� =utv>o!Mq@-5wfoY =: WMv\Ky3t+la$`g�ʠc8J7 sR(]ea9._1`\- b9:ETFև _]/-fě8Z $4Ke V�`H mw/lua|SŸoƀ|v^R�-x,:q~c}ߖDKf퀭j9Goӣ]tLO CZYxH{]7_TgIwMaWAxFq`;(Cԯ.>7i {H3E{�l*\h6li&߯ZisH`w|;.(O03(�B8p˓x8~C}Fc8 a~?<WׯrSi`#d�m۷o߭�hv mں=l#-wn ǀHFAuHbp#Fu�zvYVoitt5\{C>?CCW$+759~ �{�\_fpe#k۵kW]�P ? đv,EcJ_| h+s\7^DŽu:U oSFFg� ^}ɿлjE5LB>�6ZsY㓞;l�1{֭2�&=ǫ4pFo~!ȿmd6 N8m9@)ՈO?GPS4=t\NNSQc8ַ9>F@ Jm csڴчc{GoO>Ps@I4'w:}ƛpիYf�:_^yMoBǸOkNu\ₙ1 IOEW[r<U#ˁFu,ulW.ڄ|6uiagca m;E!5d@3�ݦ>NlĞւJH_oX6}RRR6AN\BAnnaEBT"�//.8F8wx“T7S1i{]"}ث—h$ę+_ o ghTki`�h`Gww7d|�?wS{-VζFSlܺ1GîG ]|D@SM'#@^8z,bڄ?>Gxg؂ 4^g=`GN ^ v7usx0 KY>5%*ך@h_|�h Û�945`Z|oҰ^h:vF?53XQ>t83R+r^xLY'+Txfa՝Q+'Fa v'OB 8laT825kzt4'w4tf�8݇-ӳNT�MRhu<aag& oXS(vn(`QM#O83:<8 y%UtrzÕJ-&ҋ�|_?9¸PZ .uK�yzp<x�0v"&�D%Uu8N*|mߴ{{{zRQi,DeJ#\#s/byx#n-Wnl Ŵ�6 |FfICFI(gmGmo}-o^r6gN;EK� - ed7�`w2 oDg\s6ЦVn~ >הá)Z 0]-8t\^eg!cP_%z֌Ֆ oc.~T3&6i0M޵zr*Ǜ))|m;wܾ{�(q٢Ь]V㟇F_5?I[믚!`^m3H@^ !.Rh=^S�=h3xv4 ;`Jgp;Uc{a׿b 1-6[Gg�\x>LtOq0KnF'UKMkg}_. }IeBAGB�G? G|Kd�pa *^54i c i?m >3R&H7okmj#۷>a׊™0Ȱr\3r[fe5r@L@�s?ce�PYk> 8Gƿm?޿[#*)I8BGz6C@j2l'8aqaM PVi7/m!S5#v24a`4*Cv _ =/,{T &>5G[f9Vx7zVm\ r[U:Ӥ}/<_-7[CS?Su9)Jc_A._dgb6@v &ckY74L@lTjs%ڢ-O?V~:jcl?fˏ?>=nY9&;~6�c~93隢y^S5WtiXρ6}o\usχ Y_ RΕ4L=fhha�)?>vbФI�� ` A'>6?`8 G|Z\ ˅Ⓠ_26.!ŕ:f�4bkl9 2�jԩxx}0G/\1R_c4E4jڍ3:Sn§wBo0å-�^j {ckR ,!H\ K# nۦ}]c���u pJE%*z~( �ؤe0k֬IZ6xCa _}?i)YQ1@6^q &pI:?ᠯ�_pۅ9h6WBq/@ n'\Qlx?/Sac4-�PϪDyS@j/7kF˗/_cǎM .< <>kc6}atָ_E8�f H"xk8™O "AW@ڍ 2.5mv #!@6fRBOdDžkY==/~&d==[=g5 g/ȧip5;ɟ`oL+pw߽V57$S<IBWd6|xvmSO-1 fq8K`)*pr`%4я&&mmJ�,H CWwCa7Ap` (L6@,'WlT'[<4�q9ǽ,k�vZ)EF黍{0QT%*<jw!i!�' ʴU|rDNp`.q\m�CB�9%�-}6+t _-???un<APVs�@:e=ܳJ~ck?mL@՜ڵkn֔+w9`g6}_î jGEQe[XbYg`UFQUgiEBp*=+@+F2MHMEQ EܨdK] 8:ť )bZOX[Îe뫂 Ky{Glo2߫n"6kVyնm^HOQCTW~ww*U؈6vVpT!F#;wmwaxЁ?U_1mT٨_ WMFZ*.)lϳ6 4U�4$ g)#28S[:1Nt<}f0a]xc}{x?b ' bu STkJ=IYP yƷ{*@\9u~ g®>ӡ>q_aouu&OEBga#^c\ohˮLS+M閷-k2 A.v%ӻzeX]app,8mak�xXyY �Mq�;s{=STikOjh22V.1ׇS(~I]`4e([.T] rxyH`Uo;y{׍?mZfd_i#H;fiк3.\iatwoXχM _Բk�!ga٧ )/&敖n.,3�pMɏ ?\<E]OS@8N:N۬6}Bms:KE_#}IB6(5"sC‚ḁ@XUxy(+x+m+D~Lb{67~ÌЎmaO<:g)i5Ew�8Z'>/*?>Ϧ4m�&b,1g/<sS.PA۶w}'T5 ]ӦEŭjӨ_@>i_5g "R_ D�MW+xJ.Ge0ZҦ Kt֮I7 y4{(<aeWSᘋ.fWq:d +W[9IMTE~'T6,}?׸ܸq+'p�Gs|#|Q{M~g$:){03> P- "NW7$}#WEq#5,El|igMo BXg0}0sqҌDyU�1lm}駟^Rk+Ll3�fWشiS֭[ NgbUc"<;-a7?fmZԈ!fV 0=֘?pjfb )p@KAF=l"'{k_i)6hN!f}BĴA2]mlx(two*_E˱Wr-K'rXW);yof֟Rekྋ/G}�xym:RwtT6oK1YF@gƁj7CBwܥ B(+XŁ͐\8{%Us'lԐ9Jا`(�ѹ!0ȗ-!WԾ'Cwcpy8MXڋlF`L!4ro߾7/Q^ �px'k6͟?.68{OS`[7vssZ*Sh>S|ޏ Ag]�CExE0eŪnyw<V.qbhfw�ƴsCG1^5Cm W_LzwX=3f[թ; ݻw/[>jB%P97@TH pg"ޱjժ]W_}%K,9=V8F>_X2lk 3ů|DWhq=pݏTP2VvVakۃT8p F6!3[2 xľS*`plN=?:_{5{(OV[bź,ncm?ϲiL3�9 M1*ʌi=-UgϮĐ}Ra4->@%u(drw"lv�_P�5ů(aOWyIdFF0U~Ł#dn y[$Wp, | $#W (F-#,3CpW}m%W5wUa K,ب6Wƀ|CqN}P6o]xXaMzf�SY�}x^Eͩ>G5r> ߪw_x:iCV0;a5H#8m#|]�(GNL3trpŁ#Ɂr{Rxz(7ȇ~EdK[zht D}M 7 vl͛:u0 ~ಘ��PM3<p+Xq=>:%:a7Mr)4rM>_ ;o}!0%\~>UЉSRj')~mhSX(HiFTn,*8w8`h&4ݢp{qa`){K#EZܔ~<Oџ;v=3\N5CK-Tqt SoZ6�L}5O%G};w;4 1%@b#mݺl#5|Lㅹ�@ %M!F&dDOx [ z2(9Fesʯ8Ќ6Mg]3q 'GAgy H iBO19 .6&/}Ma=w9pkM1e}Qn]fVX rRԜÈn׬@`g8WTwx㍏\uUK/^|1�Lk]#ޞ0ŰBa|`)}uuy JI+~Slobza (+88~@Yʳ*43h޾=Gnpvi"#,#WnǼVy%4 Cϋº[o /|}Xt%_xR1LT/�_t\{^^hsV0�|^]:Ƿ:sgQ^�IݻK?׻cwڔ ]:!xPqqK1Ĥ<t0R*Y 8Yu*RqI9[},<rRq!> Q=J.Eg[^ DᨾJ֑3icXC[LJ_1\f-3u=# }8 �˗@�_8˕BJoMIF1�О)0q]{ᩰHzwYL]^S2')B 2aOA\ɋ0 -P]'MJni,*T́X㷩ܑ_pŁV䀷{S$FEG.R!L4zϒpWLN$n}kCա[ì㎷:?0腶@AXiчztCZ/+<l~3�x앀OeGsimݦL͍n/.=xZ2/N7=#wi �G4QD _ /Y"n?WOB[v @e*^q9@; G)Bw`.xoظ'y�e%\z si/co͚лzUX{MaSJ9xCXpklRء7 lhyMМ6?o~~=hӟPxز4 h�B_z7=w|sGt`FS8ͿLês kn_ />V<7u>un]gJ]n.4̧Ë(H8a`�E?87E1*|ɜ3P8в^:�ϒӂ#2_wb]CH; tbf`X Xsaa]ўge 1L __=b `u-_5kV X!^yx~wg;N<wYl֪:\y*oT_޶9 o\ׯmdth:i[v'�0t3n8e<W ? /8]Zx-Q CX*LxGp5rƙGS!j.ˌ+y>OK~\7  2htܰ!l^6c,{`9?}yZ:8!<pyc|pZk/*-z1ذ_;M�htܧ+q_9쳯,�=:j[ŏ5=>3nF/hzM(^,j9#N3KeYEѾn=AYP-DkțW|&%T d8.s` VR? r_>C9s #ߔ|r-tAyYҵw"{&iežφ=hc0S{tf N <+{aEaG+mWQ |~;Fᩧ~ݺuUX: GAe_qb�P ^rtδnI}?g,PG~ RT<uLaT oW5[nֻzԎٴӑSMy+c,[E'nPf(L9 Fhե@#<R$Ga8Pq+u'B(g|ם.s7D紊p'"|S!:uQGU+B:k@ ߥ/<v u2 sd _͟lDT(~`z�_M]Oh~ �*ۻ^9~JsJm+;W`�ާK蔠HSSƪ0sm_ټ^0߾FcDftOzuNz7lΆ�6:IJ҃WJKƨ4'}*O9HŁ8<qד(l#,t]N�OGfl@"=91;׫ze/mr]3`aq"3hQ'|pl[fɟ9%OsxPqGرc(,jq'7n*@#F{?ngʯw_#8 r*J9kDnb<^(v4ݡwX i.Y:J\MZAPԱDFp&*mqߠ1$SdP`MpAbHH xN5D5x8Pq`KMoah#<◽~p u!;\Ll|Coy'򱴄ig,ظ!_cdfBKM16w*%f ->oA`f153wMYhwNq,ZuhlG??_wX>&5@X_(* 7|āo[%#RE !\+Fj(}LoGMu2P5Vfg),B65zKCc:K�sx|X= Vv@zl~A+Wq{푙8obw'3<twi<(,Fp-Y1x:wP62n2MB~K t9Ǚk t-‘0u<1gާ5 'q(| M}ov󽲨Dj+}*\%^wtt_f Z6ۿF֦J7Bx6@HLIkR:qOIgܴ�Wi\!FI*"9gȺ 4hu*Rq++M\ 2G<?h.G:6Fxbwgteq)\Ngq�r.oHamyQVQ@<>f]E ,]#"wħϟv;/P8~S\dM*`t �*Wn^Ow~;u3wm:Drk- ր񇸃G"67)g$qd_D0pϏp=H+;Qק*Hi"N_Iv*T8Z?4Nc�.s\:yPqY,<=~~9aELҤq1(1NHy@\rn 3.}î?;ۋ'zA4kJIUo5W(6,_+%OtZ^< /@BCXa)yoD1lmNtd+xr]IkSw"m oiH.K,=ɖS*T8d7 M2rZ@\NKG$c2Ň!1o<Nyx~76K=lDI^Pz<>'">ER*&s9&+xގ>dpǣO=u?օ' m?k̯}˞C5t)Iw .ocxSƋO��%IDAT GX}=Zr+#.ȳ |Q+T8">\n}eD&4|ȪJ&&QO<ȓ5\La5:V^s_MΙ|] 5o{ǟʎ>n- 3�DÁyERTx{j̝os9Öpdoj?`T"7n)G�"`IG|;yREnNcpE{1j1TG[FV(NpNq|8c� V sozںi}D0r&MAr#yh6_2NAv$y6c/=\1}}?]ӊD]�P&˾jxǶ5λxͺf G>{1ZWb:5KYtu9iDO.Ǩ?Z);7ڔu! 8i2L#@Kl`*L._q؞r(n !ysAksR򪃥@fr:\Jvjv_�e@sd�P;~#X͐G]u} zΕx '"%Q Ԕ-+q?2H-~?qB`qH1M24tՐV809}oC֜0a6_\8i<M}hpeZN_0u>n<50MSC?S|Eϕ�+],4$D*vA6j7rZr^Է̑A>d::)aE`ze-]:`#<"^ uϼP*F ZE+Thxwyrڜ&OxW>)wK0p<4FrѮÍsClZ-j3�yfxxog\U/zˢfmh_=5m R8&/'K!r0|v_ o]*6&>tFLS!L#|8}]{+䯈 ]7O~2�`g�`8cl�Uar'_+Nvmng?Hm=Q2MN#S]4QɓGCuy�ゐ<<Y.1 +YC~!V808<_}y8ϧ sGǻseVʳHoa37F´O[?](p}n� Rz=\+�<d6mq;g_o{ fTnRjBWhl7c4.0iSًp)q{z)'x @Ł) &r8! sJmFXH<3ߒ>gNg?gvH{cu.kX0< &88&1&~qUjR*RڦU(i6N)cj]$ Qy,;3ߙo=se;0{ofwfcov.�)Ħ)V)ݵn-I:鸼ž“[%NSIҭ/8Mo t7X�� ܑ0d8‡U#Ċ,ZnJ?9Bޖ}ſzE˓zşsöVX�O:cMZ7\5rP +;);4 bB;G9%tb0,dT �挀+sI Liv-vM%+У+nҿ=įO/ ϩpF^�!PES<Λ [߹u+F4MUᓷ  X(qAr1y_"7 J �|#-RuOY6+|_~뇂w>t7{R L}.qA˭�i˹zλvb钝G ]d%'M+{d}.zk;�@J# XH/q sezRys;~?񷂱1vˇ~RJjWuOo� 9OP#|io;/_bsK  ^ ap@�\sd:y; ɇ>=*;'^?<\)B{DVX�0|py9_=ݝ=M_iJG.P.CJ� � 9|_:|S3}K_/da3V[�X9芿ٳGU @� �2(ײ76_68c/=_<y~\-zĕ;܄j^|z^|yLpKgq[ș\�vgN��sC m>9<_&xӟwC&5^B/й :j�9oWG^E_y&)H(�@�\)ri6}oK_Xk*[Ѫ �A^==x#~iWXd>@��B{>So)[w2Yq9BYm ~w]:;f| ���_R f?xwޝ[ ?e?l+.�xJ e]֦c۷5r=+&zgg|80kG@��j5({[w~CCH_k-\eh  O[uV PktuLW=5vҍ}̥'FFh@�� !03<s7LMq </Tw-W9 �A 9S5>Zy]7P}i=;;{džzZEYEB@��@ +9*>?</?o(y_^r3ſ%X�\M W.yas{_M}ԻxeJ;Ԕ^� �B~\滂~W?~cdt~)B];, r/�zٵ2 `My[nY>=W[%@��zTfbGg0czO_N92B!<smrϔ Pװ�QiT;Jѧ8u7􎟧f` �H"w5 >vKؘ}.<?M盻�qE@*>qt*~]Vn(..M^�?n ۥ`rΩw>r}w__I#wb'�XXh2߲ o➌ %rطoߑCm7x} }8B@+!@_׬ .</]708GR_d)B/sK[ ebP KEJtirq4ॶm۾g:i,=(�-�}~`b}cG?߽rE\}_l\uGxaE�gH+gO}rr ;,[23Y)lC �XWm>s|b]}YQ8X�5j楧{'ǟ߽g}v6nmZz}|PP@FB>_(=%˿}Go z.r/T;kQ<WZu0/2S>Y2/Vdl<}?ǫ{r:gh`́@0)czZFm:|}9NczMldM\d!g,VG,gb%qqsz8MleUQ/%FJI$T0۬9 뿩3匮Ag?k.XP^ i/[[䏞} G^"y.E ?#q7RZJAkmHxIT/ܢ�lj_G:?i?VO\+%<PS:\C:-źiT|"cxk*d5`͖gϙLep7b`hEÄRRgb_W;7\ aj>'B,�s1<tF5grxlxsF`M?4gƙ GXȘ_hC[.cǖ <ݧɕB]6}yB^#<uuk8 / �\ąB@[q\芞>>cwGl}։ҪNu*F'lVǢUb*D-k ݭ05g;I$MB)Kﻶt__dC&^UͶ.⭇žƊ$"F8s%06YInط ۉQ>y|wO0`dæ7v%ȸI1-,}<"edL'6 QC ޤB3M;SEeƛ?uGkO-_<Lfkɧ|V]ؔX_lQa6HZ]D"7LbSY&Moc/?g2Bc5h],c\U|l0\,:9c,3X�:8ݎވ5:RL_^Ւ7w7}~ ' $:A``l ?_ŷ_9#<y@LeLe#6 .^R<oI4s v\Gl~Ock.׊#CA>I[_TeXNkձd;M8X_(64,)e gؐqDvóRV?oX=5qGtr:~6q}$X[tdGv3gHǃJ&4RRa5gc0}IDL'b.r!\c?Rz#9%V&r 2i\]~4r[Kkn;6ط./`b2N49N6n wjN<^ Ϲ:n09h܄g7K&6wznsؾjwv>abE+O:Ã%Ps%8 + Vk_c͆L7*GoE.̑sjC.68tǾS ifh|QaU<*.H& t۟siѨX  )&3#/FQuzd[ZJ؄f1b1vE Wc2( 6:# >%ۑЪCKʋ;p.D<wIb}:ʣe;"kD:.0 E:5*"@dK?ycwlYֻuC~z+.9M҇n" \Fyȿ&, "dKKq29d9*qJ<S3'UKA ~=şIgB R6_&0"11c'&lݯl: EzuhRvIOa&ljuJd)c7 }6Rl"/T>bBRJ͋|>i <tv˂+W?hkoVÑCkPM<qT|W6u,ez#19в `,"Dzg[N {>Al>~ͦ]e3cr61%8CO+ngr4y%"bQP,G\Z8%amځ$BB �Ah-U,C@k`QDX۫SجѩD 9b;s<ɀ\aǘ&& !e<q?f̲C؉ZLp&1Ҏxg~sA;G{ /8vԵ֥coQ>.<qӅ[x)BY/<SEXE&,sƈlH 443m\Y�`\^ "߻އmY⦛ne ;qq`=Aqij~lptj?\ѓӢL_mF8qbfM .2kKRz&@8tO8!DMOJIlr yTשyAFj50Y8XOLb_tny: !~%r$밃 Npv45*e}<ď{sBP fu*}KF.S:8~ĉ{y`P6x~x.ײ[uܚR؎6GY~XݸpNS)R> <.ȸ髅-wo]yݺU{Vl/VtLwLwO. ((L4m^^4&Yh۰X;Yj/g#kPԤM+Rܗ_٫~UR?:&a&UJ'$Uר14QzXOLb!}<@Bozb gs'\B. qibB']vv44.#+̦/ 蕙R[Pm**]AeQW0g||q\̙R['Ϝ9NN?wRy>L<: ~RKSyR3x|@2/^�WcoQƉ!]d/^} K׬\:ݿ8r WYٓ.+rK3m]Sc]剾Tgl%Wr==6([ c07K>{Ч{ukr֥ rGW{,|zt]B蕌 eǩy'gl= 3h=Д�tHNBbbcG: Q}bq<ɀt_8׊a86W%૓Lߺ;nHt^,ۀ _*b0E7]j+t.\=Rn)ƧpC燇9~䭋y=h0#`]*s SiY Rtsem5YpMGUd./� T6/:qbYM.6PEbg~U]oY޳ΞR{{# sAOl=7SU; BnTEG9n0Ő"=>y٭B.dĔ&᜼#a'})>&s"=w7-G 8%HHLQY&Y:tJ1<՘$x;ތfNOr"Hw90B|D^t 32 Ttn6W(vۻs9<=͡iy:<#+.*TV˄s2+ka4ˍ婩鉉3'FO<9\8<>TLyEѹT T6^S¯gHm<h0/3<ˢc*Efi:GbNrQ1ύ/jH^ć)7En |@#tt: |P$^( m6 JzP(wDx=.�81p5B:R.r #_e*0Yk4~f}.ZFfCU**lz!:=]NӿJ2[!~2UL6yLТ6V}` 93[_kAo/v7Fdײ5^|Y'z͋o#ubXh@9 ]MQ5uy}\tj^D'2f6>lϭ W: Y|@ڹ׃\ rmO#1EǴ/vM}Ҩzl͕ e"d.!b-Ҋr\/9CZ/8\m>qfx@`!"l1:- _MEvrkYx|q|LDϔKCm Y,T 2}:! ϔ1MCVK8(H˲?>_Qc>VskO6n. ^d+�&+n.Zˋn)W6g?j_k#7RՉ, ϴﳋNh/L,Ą^ | u;գlv(gs" }OIR!VA Khj1ףi~Z/.Yv|ЍXh>u7+8ֹ<d |gKzB�ݴi]=m7+x81&9C)|U@�U�.Ҏ |d访gY|&4M/vY\4[|N>^t>z9:>_c}Ez{mz/:ܝY/F-9d+>i͕=hz-x eLJ}1rl$W/�0.qikC>Yd;n5/'Qn؁FW^ϦuDuiMa8#I9v_︹fF<\Gv!M/vYYf=?֌ȗ룏O=�d�e1LYu2d4cVGbیȮ}/001/2rL\n4]/6 p#p95Kl=z6=.p0/4Ok87/Ükă f6zx-0a/pM1~]P)N<[{[7{\_骎U%;9֒;=OpH��@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�� ���@�dDUMW1����IENDB`ic05�� ARGB�;fy~~~~yg<�<Ǐ>�;?� ̓ ��?�B��l�p��������������������������������������������o�s��E�H� ғ�IM�MӏP�Q}}R���Ļ��ճ��΀�у�¶؃�Ʒʃ�˻˱�ƿḬ�ξາ�̼̯�˽׺�Ƚӱ�Խüԩ�ӹձ�ϸĿà�ŻԬ�ҺЧ�þҸ�ɼе�܀ǿݺ�ת�bf�j�¿|�31��fpniec`^[YWURPOMLMMU�svrqoljheb`]ZWTQOLJF�[mmkmkhfda^\YVSQNLIF=:9-�Ǯkchfda^\YVSQNK@Is�ڙacda^\YVSQKHу�g`a^\YVTLUۃ�c__\YVQU۾�nyuX_\YVLaFB>�o}tne~Y\YOxt:<>><�q}uspbV\YN}<DB??<�q}uspmcdZV_߷CFDB??<�q}uspnbvXTtۃBHEB??<�q}uspnfځUN|b9?@BAA>�q}uspnfo2(hM!-5�o}usqo]X+&Wk �p}vtiUA@/*:ة �o~q\K;z٠-1-$_  �nnRG@r\/1-#VR �TVSeۖ041-)!ӊ:�ۮ=541-*$,�٤B7741-*&,߼�׽y<;;741-*&#f٪�blG<@>:741-*&# Kxf�4IHEFDA>:741-*&#  �FMLJFC@<963/,($!�<=;8641/-*(&#!�� fVPNKKHHEECCBBACDU�YVSSRPONLKJHFEDBB@>==B�AMLKOOMLKIHGECBA??=:412$�ĽzPFLLKIHGECBA?>4?m�׋HHKIHGECBA;;у�QFJHGECB<Iۃ�NGHGEC?Gڼ�QXXpAHGEC;[?<;�QWRMFoBGE<mn03689�QXSSQD@GE<w0;9899�QXSSQOJQEBPߴ8;;9899�QXSSQPEhB@i}6=<9899�QXSSQPIru@9qY+479:;;�QXSSQPJq`[B &1�QXSSRR?E Hc�� �PXTTH2 ('ئ �QZN7$hڙ W� �OE(]I HJ���3-.I܌ ӆ3 �ܩ" ӿ�ۜ' ߿�عf ^ڪ�bT& Dtf�   �(($"!  �#�ic10�PNG  ��� IHDR���������+���sRGB����DeXIfMM�*����i���������������������������������������@�IDATxyeU˥2vUI־Y־z-KeWinnx mn<<C>|x7L%/؀lddcڪ^ĉ'9']8}{e` @�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@�@!0<u�I!IIA�@`W\B�pb_`s8�8ap℡Ec�|  Е�#]IA � �kC�7ֆ#iG�'Kp| B��Xp`],X<8?y13lz � � l 덲_9(A4' �ZXa ŋ�8 Sz$`M 25OW m=] �K`] ?[y9u2rXp_ , Nַ礄O3@�!Dw~ bI p b6>>]m֧ZK_>j8YNڟ4xmVsY^/l�5 5 r%}VRC: Z#V&�e6ȀF!J%ZIJj,k@8 R8AV}ط[Hעَmxa>�`q-o>R}uA�ր�NP�"Z {km] ZRd]u}gk@�@x.LW:O׺ԭe+uR= �=d,HA`VֵMwmVֱz1'�9D@`ڿkO.6͉9JJJHD/֐J4iV[I cja-]zJ}Woqb׮]c)U‚oڴɏ󸸸 ?-(Gity&GӃ5<.-- GQzS5<ctIu<qO9&eGis=G2_! m1Rj(:q/z %8;acrmA#g-X>Mg gPsȼsi)Okul<q#^:wXvDže)O6rGγ?77GǕew<=(OchȦim~~ۜcrs}Gw\Ǐ6fggcn޽ noub}G}WY߾]M#FMibҺȁiMx V=VSʯ8,IR׽u3\r;vls[܅; q'mw7Ng\|zu4l,.m)t=Ƈӹ+!]ؘGw?F`.#3^;s:Rl'[4#Qg77\7gYW@ B!kO3Σ_iZϻqUORQօ@ۮMF𜾞?[j)/cq9*] 2 w%ޢT5$/b}՚!c\ʩk~ξR\(,Zv kȣ$6Wrf/3(r֩K-W,|?WH+;t_M_sy m%vjHXջ8>Av~ Χw ʏ}·ied2#1F;6UXB\txrU\+^ Ek͍ma]OjNM=hsko0nUEg;jNwB\'k9^Ԫ'eFwfty.F'H}ʼn 0E]_?:{-}iGˋ;Enhp0玞G\aw?FWs9:F}t7&s=ǝDp MRnyJ5i;+"M_[g#FPy|o|+sEnwӝmwW߻F.wַӝmw'G[ݏLå`~.c hlahz Ņ`ηf(wGٝ:Sss nsk4tNkW͌PS |8UV]UvO NEC ͨTe)nYc]m:h׵ b^۬z TDCPWQCH7ڊ|i⪮ifihU#SҨhQH®ʔ$RYꋕMWԻXv73^ #o&w{l-ht5t؅\z^n|b>:dg/ &'Ǘ'&Gn@X`bbu[v8n8vExݗݷ4<4{Mw`ؿ/}K{OuOVcş-њG.-/]z �I=��Ӥ-xK}Zuk͚|מ>~{.q,_4g/m?6Xߴ8?1=8 csYjwm(4BVXfe-'齞le6&ua#TOԘ$YZ f MkOOGbEoCsK:/&z6v}v 8} 3k٫WVS;tkJo le}Ӎ иm7 朿p|zfyazfSĂ}f# [._n}_cƎ[+Lcm>]r+s'p @h&{IkRMߔ_^}#p7FW.MQ'E]?:;65=?;.b00;<>;_ZPĊ1 U&N:;K'Ii(gh$dv}XK.J"=&!M&a7,qIa#TOԘ$YZ f MkOOGbEoCsK:/&z6v}v 8} 3k٫WVS;tkJo le}>k F`njz0?ƹ6o9>now7' rߺ_?W?<sJ^&~iK Q( ` Л@֊wIi'/m۽{^tg^~Mk'M\ZVwt3n<{xaSVR[ mb"{ I\0ѧi,M:-yc-(4ݰe6&OShdP=QcdWj5)36f>.Z>I -l򢾘})J4̬e^YuXOЭAb2*YV/wm](ڂAplmc[ݾ-ۆ.>3\XxzyaWN>:YMI_}r|~!r+ pH/Nǎ@]?J:+ƚ|6-]v7MsX3[_» s3/n=iÛfiS|Rrh2ފP(h-WLZg'qiDُhpFF[H6l~Nc´alL)42F1IVA+J͔L~3Z-?$Ċކ^SKt6yQ_L{m> lp^%fֲW:w 1S݃a,;6^c}. t5W7 ́;ݶc-Ftg-,#<rG>G,r.6-Ks]|&rZ@`CrS 2]/J4\o'~'κ oxeb;_>[v7~Ϳo[NM۪ 1 媂Ik}ctN‡,Hv YZc_.c-k9Id6.16z$Zuj(5Sf0mZ|j]||<+zzM-[E}1+4賵S{hY^갞:ܡ[LueTz^hg+{xY,eײ*-Ip݃gtpY5{я~y9ةOdjDA`h+ Л@.72gVlpϼUz͌_9:̶c:w?~t`EWl9a4{oF(D4̖ &[Ow}i(4BVXXZN{=alL)42F1IVA+J͔L~3Z-?$Ċކ^SKt6yQ_L{m> lp^%fֲW:w 1S݃a,;6^c}. tٵlEF3Gw:cgݾ}zW 9x~w~K_N<Ҝ})F"sM^l Bcv:=`X/slHeG{{s;_.tó<3u};L?yGݰѬ7FP(h-WLZ$Q Ki$f/z٘ ShdP=QcdWj5)36f>.Z>I -l򢾘})J4̬e^YuXOЭAb2*YV/wm]k^ZcvO >cGv?g~nzzr07Ën#62&mG1Ѫy ! ȋ )(_ҤqVcCnWl4^7Z^9㣳:𓃱Eo؋m޹|F1mm 0BAѨn=IeDY4,z\Zr& l\fcR7l^O6BDI ^Pj`ڴԺh$y$V6Z:ɋb߫Wncigk*0zea=uC ˨fYVѷvYˮe{U.j韥�9w >뜉ң#[[}:Nb<i=M1Om/(n<o�_xlȝNA׼Ico9#-;+:n ki|G?-g|b8zؒ~rhv4`BiLDl`Һt'ї掲hXJ#-d5k~$דMظƤnؼB##l$kԽRLi7uIHm5tnIgDWӠNUaf-{ʪzpn 3=QͲz콣o5g@]\?K[ ɀs_wGfO|߼~pe:ںƤlڸ6xي<]4i |8E)p,zniҘ摖vqKG~mS=91Zw|{G9ԮO Ɨ%{5%n">-'f7cF(D4̖ &[Ow}i(4BVXXZN{=alL)42F1IVA+J͔L~3Z-?$Ċކ^SKt6yQ_L{m> lp^%fֲW:w 1S݃a,;6^c}. tٵlE-t{`>p^ts.-=F8pG]ґ֙ؗԶRre6l|!v;._Fl+1wO䭻mo9~hn=-O>oI, #{qv(1BOLDC/Kz$R(FI JС>o"u=jBo5{%QJ˄E='x,aT j<RPK疴YZȎ8C4\o.hvXP 5HT`Xӛ%vŖ$׮Qow̖-YEFCmLyoЧ[xˎ/[XݽO=/?:17ho8.5+d&�_b Г@TsGZ ڹ_O㣋<C{Fw˴YCAkU08*0 2mhhPfasAc$/P"ۈhx\( vp ӧ!{Aa,6zz-LzYH9Zg)Gch(*G XEe^Wm.MܝMÁTtTW˪(|-􌭢H-㵥 <TQ2HlUZtvU[ұ Sʈht8Q']U֪ Vk5]NeHv#uu!uuӎ>258ts.'~={Ga=F91I&mR"-@ .RDDti9y7ߜq 7|GǗw]t2w4/3,V-Br[S(pAUvj fj1eFm4J{收.Αu53thS =OщF#.ecI0&JQ2c*[Siit) DjP (v:輤E-j樊^{g~lѪwV\tbhҘ Q'ꠋhz=/|ܷjGRѳޗ9Ф]zll,n쮳/t;4?~y^F5ru:R̓װmT-Y @4_eqxgַ޾{̏.ƿ#O-^r]G5,_KU-& gjbUਐ\kVz 8\fan4ŰYZ(GcQ Ҟ9sdl!3BM0!,BSyCtkKXr̘rt?TZ96FZt2�2$#"(vTN%-nU *<cjѪwV\tbhҘ Q'ꠋhz=/|ܷjGRѳޗ9Ф]zll,Lgy49ˮ:4}p~nw}CבJY&!Z !YKÒ@34_em9J7|߸㶗'<87}ona%c,V-Br[S(pAUvj fj1eFm4J{收.Αu53thS =OщF#.ecI0&JQ2c*[Sii4n�DjʐdQE:ŞBET5hLz=[tE޹ZsщmaKc:.D.JQ$qߪIENz_簟BwճH ޟ]ؼup=ťoo rǶ1R5/2XuE/hբH7͗|gFiӒb};oߴ91}`\vۻF7XBq Q!ւ)p*P; ha@P26^=sJ[:zCf` B:YTD#2$Q %PQ(1-VQ~䩴rrmd7�"5eHFEP2"bKZt!"FU4x&=ƞ-:UբU\Zչ6Ѱ1 [NA%(T{^oڏg'/sOINIsX$iOu:/u"p¶ms {OGgHGj<oc?>t|s@m_isW޲gcϿtC㗸n_v(g,@M`jk-JB ,S[Ѝf6 T y,3jU3uq7dF Fў >EZy*OuN4bMq)3K5PUSbUGJ+'HNq RSd_%ӎ*)E-aTEgc٢SU-ZժUNl [Ѱu!DtQRO%VH*zv?t4WERTQKscGν`47чx wwkHm5j,X'g,�VM_VN2Fg1?߱cf禗w?h`v_';'eP�51ªEpTH`+r .h NmqC7b,P-#̨WiϜ9ސ&qF{z@mj<!:ш5yĥ`, FDC TT9JfLeUT9y*\#-: HM~L;H]HQ IgNUh;WVu.:M4liLGօuEI4J=՞D>[#IKShuS\z66IaSE$]򅃗]9tϞgymd*R9J&aNs䧛!9fAX}y#MA6r_<?|ԦmY<is<W8ºֽߘ:3ߝ|#SgSQd/,WcE*P;$"ʉE:P bA ]XA\eaȢM\N4bQq)3K5PUSbUGJ+'HNq RSd_%ӎ*)E-aTEgc٢SU-ZժUNl [Ѱu!DtQRO%VH*zv?t4WERTQk:zK>t=njT-(m&;͑/7Ca!;fAXNӜ-c4-ܲ{{֩wm;2uScϨwaeo2S(Y~a"8*$Z^9YXj`1lXfFëgNiY[oȌP8=AHg=} 6ThĚ<Rf0#j*%3*ݏ<VNL@ HJUSyI.[DUèϤسEZꝫU:&4aBԉ:$jK"ZT%~)4:)i^=0N,ˣ.]wMǖï<y܍OW@BQ4)Mv#_nN/NB�04}}9[6h,ڿK=;6O}hkg;P-KI˅t*{AV&VaU08*$K+TQ ,S[b3XD Q26^=sJ[:zCf]3),6ʽQ5Kt6:ѰueǨFs*GɴΧl*G#OkcE'Ӹ)C2/iG{^Ң Q031lѩzjժE'-hغu(F}~$=;}~ MuJW")L{5K,[/t,NLC{;r+$ĦIeNm1 pR I]&@f>(c~swkӋs<݅?AY7i^WӜ oeq0*JzX+RXAUvjk=cIEEl#jus,łL S习>E}3;SJhĢ<Rf0#j*%3*ݏ<VNL@ HJUSyI.[DUèϤسEZꝫU:&4aBԉ:$jK"ZT%~)4:)i^=0N,C]ڛ/}+=.KRȜS)a#T|tRA@hLsgiַ^r%py`C8śXl ɬ\D{=I̠? T-BqeCS6 @Ԗ ¼@E#̨WiϜ9ސ!kL0rvTN4lGsg1jQ眥Q2)[Sii4n�DjʐdQE:ŞBET5hLz=[tE޹ZsщmaKc:.D.JQ$qߪIENz_簟BwճH ޟ*t:[[57t'`vvG]2.m)k/٬Q8N :)cRH4}=9yVld뻾k+o6m}cy9?/(;L7iИBԙAc*SguQd/,WcE*P;$"ʉE:P bA ]XA\eaȢM\N4bQq)3K5PUSbUGJ+'HNq RSd_%ӎ*)E-aTEgc٢SU-ZnتUNl [Ѱu!DtQRO%VH*zv?t4WERTQkڲ;.l<} ?㇏{/|3ϸOA19S%#0|t&@c@0Imk1kyjӻ?Omj\,ޤ:Ӆd!,+ʞ$f0%kU08*dICJTmVک- ݗ*1eFm4t:v*]d,P4tq(貰dQɎIj[i(#.ecI0&JQ2c*[Sii4n�DjʐdQE:ŞBET5hLz=[tE޹ZsщmaKc:.D.JQ$qߪIENz_簟BwճH ޟ*t:[[=x/927'9f5R+n\ȧc81 %I't4M_2gcjG2sW6o;R^Vzw,DfN[eOsn3X\VPʱ"VfaZAXwQ"ۈhx\( vp gT. y.貰dQ̎&TF'(%h(*GɌl*G#OkcE'Ӹ)C2/iG{^Ң Q031lѩzjժE'-hغu(F}~$=;}~ MuJW")L{5Klm5vst}CT˭h5Mm&!9.cl7X֜�_yc4J_i\l1wK=7-_v?~[vHoҲ8Ӆd!,+ʞ$f~[VU-BFIRz/h Nmf0M!2rTaDm4F{.BBX@a*CV<tYofGy*WiXG\ ƒ`DM4@EdTXEɵ1Ңi�Ԕ!Aɴt=/iхtjU{TUVsjUDÖt4l]:Q]DSyIUk?a?&]:%իgcc?U隥u;qt]x߻>?nSK~Plɭe lXPZU@OM_w2gcj? '~-oyԦ7_W6]xhp0ěLt*{;VPʱ"VfaZAXwQ"ۈhx\( vp gT. y.貰dQ̎&TF'(%h(*GɌl*G#OkcE'Ӹ)C2/iG{^Ң Q031lѩzjժE'-hغu(F}~$=;}~ MuJW")L{5Klm5v4gir`u7cw󝟨vڦh 1KTքؚtAN/ .RǶYcH?^gg-Ǿ0{va��x`�=oz%}k_+7m??,*=d9FH;[K9 kB�_lkM:(}qFɼOox~S KzΛ]z4imM GlWNmVک-nF3X r<*Sں8G2##hOYOȢM-<:D'&%h(*GɌl*G#OkcE'@ HJUSyI.[DUèϤسEZꝫU:&4aBԉ:$jK"ZT%~)4:)i^=0N,رeK}7xO?=)}&iyp9VM��X5B4@@^ry.u#?O~M �7|~ �KK=7կ|jO�y&J#yy,9VM�_dF-J_ci}-쳝S-|3"S6k\c1t.fB*{staEpT(aJK-bmVک%yQN,iυ@hW 2}(Le . @h2O*mtKXr̘rt?TZ96FZt2O�DjʐdQE:ŞBET5hLz=[tE޹ZsщmaKc:.D.JQ$qߪIENz_簟BwճH ޟ*t:[[[GwY<gwѧwݟP>hR8 sSV E/Ӣ4ξ.=Ow]^?;k?Oa��>!A�@�,EiGç p�m�>-8VI纲mc# |a F41dܲ)qoyӿM?qSOOL YL'Ki BXVIL4#kq(5*2fMCJTmVک- I¼@E#̨WiϜ9ސ!kL0rvTN4lGsg1jQ眥Q2)[Sii4>)C2/iG{^Ң Q031lѩz7lժE'-hغu(F}~$=;}~ MuJW")L{5Klm5vlٟp'ܧnyyn�\Eiaϋ8<�pA܁hO"mˑuzO=_=�@#| � `> {ë_Ϲ~rE:r纖c4^` ѡ P:@p#k_܋.k?x֍O}e @�@� @#$A�@C_`b~3vɗc_ry+K  @od((zbɖ>˿ӻnKKl � �+!�+��[\|3̞( > (si֦q Ћ�n�q@$d/f]k^--o}禷.,a��Np&@�@{&쟞;w]wjSKGq{4ť64 F<Hv `L٦o}/ştʕ/}o':, ��FЈI�C`#ߜXҗbO޵w^=U>1NOKT2!AGٶFY; s;X! � �9�ș  � 0;>M,�g|��@�IDATnϿ?{6scH;,9L`bAAGٶF#~F;v;vNmzm{0sѧò �h%� ��7&܉펝^/|?c˦1ӑtIx�n�D0z6qȚ?gпkyշ?v̖@�@�֔�n�)N4�I`SO&zr芫[[Ys`Y¶<of}cGa#4 F<HLc_M|w\{W~⹇'nj|yɘ!��U U#D�h"0~`7࢛_vm>_TrYM>o\>F( "$ Ef}-{Ssc ���n� A�@h~~N,>n=s-4mTڲU).5A`�"J:XjOc?>w_^?u]�@_З � 23>4eKض}_nWy>6iuR4'�@ݷ&26l_3oW�@�y剉mg_!࿹!A֖j-{R4&�q׭m+=F>gLʽNo;q9���n�!�@_S-.θ!?{v=\9mgGKuMq} AEضFY)/oxs3>q��t#�8A �kL`OƎqM7g?=ys:3oSdqا9�8Ϳ�v:hH11ڱcwk;ǣ^<ް@�@�N�8!X@�,Wɉo7/ӟCMu"*B424&�߰2c[d_~ӿ}_ 3K #�I�7�Mژ @�26=k㥷O|d";ߔ-ٲRjdiJ�7�Na-&t?~Mp/{b�8pEs�B`cN,_u^v+ԥiܛ%[} Eoe cl1燿馛6~-{'(n԰>@�@�ւq^ � SFL?]u_''&@b)4oR1!�8 _.[c[M>=G~ы^4o_C/}ϽWXL)<qI8�@�h�sRV>: zpbݟ}Β6zi˚R\j`op_g dm96?'sϝ|ˏΛwKMײ&2:פ!�F"�ľ�1k9h~~07KW\t7wJMɖK} nM cl1ɧG߾}x~#/y7=>԰g!;,L)@�@` `E �*q߶ԣO,^u^җ~S]MV)m# .<@H ǛFGwч?qp?7ZgrG-w! ��n�l; Lt_7w{vcg;1o~GZy'0np_+}846hT+cKv]8<ix?۩ugHp`#�G%|T2v`&&;ڏ_ՓnG!mc8q M/clӘQ]ʇ99W>%tҺ N^1wG�x S�\lz> 9~ƮvOڼVs7(�ؠ/lnY261;36}nzjq]X>D-k@d84@�6�`/(v6.:ge/LE#s?MڹkG/qmܲGZyVs7 �؀/j.Y261>ם}ۯ߾S3ǰI˺:sE}E"�H 9݈}8 i8u[۸e]WpY7}mz:ieY1a`p`-c}sr$zċwݷ{yٞ{?/Q8d�7��E�7�Ny  @:jּa=e+VHVk*X73?.^Jem)4&�ϋo}r$zċ /-=hʣJ<MYO%P]` Fry-j�X!�X!8�>Z~+jV.>Ri,wٛ<2s׶+nzCZ:6^Z9+2ҧ"�8_5R7�;cK^_?l;SܣyutT̠Tq4JZs&K]Vb3G^sb  p n#e=Y=mS7Gv nꑇ.›_3쮻v)2^Y/ø{A c}36?s'~.9K?4^s8=eJ:ޕKEZߏ'j*RKҠ:L &�ށI #DM:6Aۏy]u8ٝ<fj|W]{-'?8mD)<s "�,M,clӘ�lW/O SX \6' *1CG碈kZb\ST2HR7Ej�` A�6|'{vWSQka@4ЮR[]ɽM }N89#J[Y1a< ),1iLmE?|wL|nfly1\0#CTs.ls 51Y$djk>+u >iM�7�N;+% EV#uhfIҟ&ե>iŚ┣-/DgG_'Х֔Kg9<mqywݿ p<4|cH�7�6ZS-}Hv�~||[cLQK~5UR:$Rz xHt =3騮^'<MtVW3@@` bw@ΫV=4՗|Ukyt"!L/Ӈ$Y_ IY,U=k 5pqfĥq=x0դ>Mc('� ذ|뛖cH1o�qֻ}gyj㴶x0 kb&uQ4zȄ1_J;s?)cIa Pt%H{cYV9b �>ݨ{XҹIVELXI[>]o}+eb#о(7(=Ey+]wDmzj(}is++9(�8E_e[߬2F6l[c߶m'>>uG(,n&a1D{!Vk Kʕ7 ɔWIۜdj5 {J8 b@` ǚlt=NqӼ]7)>d6z5]\c-? 5o??zk;q<0p~ KIemA~}~gw }q:U)ݼ!GV6i✏<A5P!o p\h;%iUA!tZޱګt9'g~G �*pTRŶXVfHUtL{ɏNg\L,., ;1y (j7 (NypʿgX4ڽm˝7?73cK @$reˮ6Ya[vK}uZ)Qzc1Bdsc+/*o~CTK3E�S@ә_X;@g|^ѹ4)]kFQڟ%<ҒpGu}δY ېws@ȑp~ntƵ׿{]pa>QHhid )J�7�NlƕiY#҇0zӛt\7=r㇝?ƖP(A^e.+2H$8zVOrz">m LKP F P:}�(H1¦h"L_^sTq͜ xe˲eS0H}<a !t:VPK鲑n'G˻Ϝ^vkXVR�n�WoJ#}n��\sԷkgzbihpIo<|!{ҴR^`.IWԎԖT�%@ș�OTk]�1-@�6*w' @@+d-PގTWזAK~GTU2ę߳rIʳ0 �+*7o/_vy/{}_(6r%[ap7,6` ğl�|̅#?o#NCݪ/#k2BH\1qB@FPX7 \ʓ&xf]o /ʨ҆NU-gJbnF+(u%{�zY B,@+j')ܪɣA!H8Gv<,QVb I1DŽ.N$tŒJ\'˝X{ѓӏytro=s_a:ңU:":Zҋ@oTHَOO]y]_O nB׾"T`XD !M5{Ϡb%T (ԉ.V^pj&+ .hYE(6-!Vu.\# > ���8ivE4I;Ud,KœyWWC?IF )V+dm}>iqg4}aknCqOxLۑr|bv'�Na71ǬbC/׿/p> #kzq1ikUWtpdm}啻u(Η^!缪'_8 I"l2WҸUAWHQWW>F6]zN 9zV6  $`Ktt41-;EE*VEw}Ψ<Vk9NjlyF �e"8F&'jQ6=h˶8O|AQ|N.6A!�kUZiM)}ilzW{w??h:X<̻)Q} {M:K}b4lH>y&7qᄬ {vss`:oOߜEUα~;4ZoTNK d\WtV[m@�֌��V\(J'pYn^0eDŽȪJ|: []Q[nM!ܳ8kuTn#;NDf\I*~ZT)ܢUZ*u&XjNݔK�Xg/HX|cj/o<笳>|̓Lݿ  GwX銗#M҉-d=9]idsn a@Sy<V1usZ:F"DHl܃BJU%xcU/Z"џBB?Y\U5Uì&:ȁ"@Cl � y#Q(FFp-9d׊<\QX*uTϖ=d}eW:17S~U?A.J3xqk{g~wnn$]2H�7�N"UNm}q)& j^Gt^K<b5HF`C%W^Ƌ#WHV9E3?i @d)][jGmfu1M)N'_BzvxMĒ*P_S f}+TH}D  pܩX96 l* 1CRS"Ӊ�4#Se~z_giLa~ *yTGlba7ƜAvEK>c>hpeܯq poէ)K%!r S~JmKy ߿ghfMT|>F ih=x$ دw=)7&PY3a>N[MFp,ƫ Ȥ9G VEa<}iS+.SWmꡘ%E=WP p" AD΁ �"ѽPQtAΡE)rBiZ%fs ڐK+8LJ.E'ׇ;%2$"euϠdo*Hۜc2Nj?g[ץ}*߉:u ݿ ^zy} _�<%RnTNRCvS._'�28G#ܞcƙ InbFBǓP4xA-attH{em:߫ח弊`qA1r'x\{WzLZU@l >*@Cj"|w%8?*Aq+5:TU(eXP(qkQmrMݫ^��D@vBQ}vSwYLpms(eiJ.yu^ZE9ǪUɾ</B]=\K3jMɔx.)yOmiVaW_MD*Oґr;ʳM/(m'� Ӱ,FY##>W}_Oz[ P6w6)2*Qrbz.�jܮ{ 4SPy*o <~=ΐ<h򤴞.y7Ǿ~>^!Wm\CBF?WrvPH}^G:+綼UYX5>p�|/(.n̟Cx4B8ywj tO5TuUG_S%8#:{JF8{THC&?|sQVq0Y'cZ{iڧƾO<>^m/G/.<y'N/^.I6Gz`v?pُ_5$5dKں"bHH˛Q ЅX=R++;TKk8J1GH*^#E|D#)&LƟ,`5pq{IL,:$tIm+�<^e+��-M EUALV=1G3+eNȥ}4C<ڂ&]SCՊhxmݓ4c5 C=>l=NLտ &Oۤ-5d7R-L�p_7}sqF=Dzg~/fzQu: .D�t-j&IIp0$6uuALיUY(5˹d]W5z.VՒSPCk9D{fr8QɄ,3`j(CqBHmɧ>^h`KdꂚTNg}j��D ~EX夵ѯK:>K'?jXnZ a>~S=W2@z"aF5NkQmz|_] Z>?'oɕ~{Щ#w禔grz�|xC'}ross?õ;շ:X#bNҮb ]ZFy>Smt{x]^y.U ru9tNA�_q_L]hD֏^Oc Ob?<Q-l p 0�=y \ `e#e KXgIUL8VyCmCPsF#L.i٦ <T.A ~\N~Nԥ7rn/}N\TSU!(dS<Xq'FW^%/ŃԧH{wNۚrZCl g籾8&GGz`s?so8cb~ AxrP&Qi!^ĩFiٯ.()wYְu.Qѡ^wě퓫u"~s z7E}9<-5[c%Av%-mQ# Z htO5w2Ԃ%˔D*<u ?UYºh^E �#uA5@A$ ]JɏhPvJG!q2 I+<|j}!OC| =UۢX9]pNYḭa*Q,?X+G~ V.8Ajt*f9g&^sݭ_{|m44m)Z::�n�H,8ľ5RŸb䏮⊩oy_܎GEkz~u@nÅp}G>nAr<1jzz"ExX{Ƅ8C>G 0_h؏YozT =)ymloU\'AWYNW^[}ue*�G@UB  ЁzB+qKbGNjPڪT,lĮUU;a#g' + H9?K.>K2+>IFZ?:oxV[Zu'U>\GuO|ڥCc7%/F~(8p3^o&M7�om;~3mAID;id?7y7*^z:7lsqU<Հ 렟W~>H @2 9k|mAS׹ Ucܰ-uS˛ԥB^tschcu5_28/J樗V5OX p I_ ��Uo{wP.6i_ GqG8Q΅xȅr>xkN>ƪJ/),jC'7pU*gmZ'5>NѰ|4˪ۆ+٥qiF]zozp_WgMڍ}yz'\I'�n�נm7(mЧ4_]]so=3p(嫼g5RtMSrAo@Pj;t)*`Q7Уz"]C%C>mA|05.]+> 8OZnYNUK\\J؇ZMhSɋTsi64,�@Գ r�|Fx$%],H꼆,H}+{C1qM󜣌<q|9D {XUKڐ 3<7rлքZ]dW>2uϤBCz|`}}CZGDˤ)5ِSƥp֥Kag뀵,jX�^uEfm? |#s׫/<or䷽KsJn",dyqapǎ ,7X80y D #_81yze_V h?tݩ+Z`Htݼ$.Vcͫ =9O#+lP.hhNڂbڸFʺ R bߡbQjJ:ת̬ګkڛښ^ECӈm$E1`!YYas#G{f8c{X9-K9Fc3I &h%3/ɬʪ^="ƋPP(SKͬdM0~LC2Y^$NNH߶vz%E"%قۄP$[B { $�+c l, e|>JP5nLyI6! H³)`5$&LJ%j )5(pZB%dlv8Y +sXIFeXI d*EE $JYjAND)P,>I%A@J6ȕȖ˜%Md&E; 9%4YI1L+E֫UB)cM٥eUKʈuyTA@e9*/]9+7 f�b"@K)̴7f e*�E([Xz+BX30j]{x8ԻBWo_tzw7#:^fM+YU"o◾C'~}vPRр@2$KjD3W9]\᳅sA*VPJe-^اJ8iL\d&.OaTNοl8鋺:Ɋ?<ޢ- 6r<aܖ!Sb>$Iz<*DTO+4& cJ4E8!u؋?Z5nLfu$ lgh[Qբa4c) rH$0 \Qk jQXB Tw"z9PAFUGk`2%^aF5{mdXcX$҆r#=:`Y]lb~(IÈ̋A( 5P򈘟fΰBL EYD>01׭ a`DY"ޑ=8:{zC3t"p2~]$ rCaau4khl՛LOOA~4oD^N"�XKZمh*ɛu߿݋~WެyL )6;4¢Kj.^S'ŗ^ ^Ɂ3O=?=48#`4wH9"Z5b 5WfrUu,"0Ֆ?1+/Xܴ)d*G@ؐ:\Ȫ 7PL$ &dBIUŸ|N*u%S9fB2FdYG=3WAŀ:w-7i* {=p, J:fXʲo]G&|QYH`P^VBf&VFDYbm4ޡdGXJ^FS dD3Q*ur0u[xSza`|UE?zpaaMOG\*wNv?oG?zet׵!Ur)kJU"Rz'�+.FZ9prco�{?F"&^e͌@[;8^|>}wNVt%1{bhv\iʣ[ձl㬝z`2yՇ([8!@�vY@R Хs |=!rTjHgz$�$Cn*Y բ-#OBU $+c #"jZ0n Nq'{<`͜ <3PKx4KZWlԲztD6*r\ c%ҋRRkz#—92yZ"[l ]uNL夼b@E!a&bz9-?jJe;~d0g_ݶ= N'pc2A/c8]*X*Ç]x7o=u�g6ijZTr  ]UTn oƃ~KO@oo=t뭷nްaHWQ>Zzz`fzJV0?/x!}p z8IBTK+kn&PGfN3— . +tJ[4ͨ8"_AGQ'KX7buQ<+SLt6,P$¢$l7qhnBlNRBE’lWNfo̙EEh@.U"" aU,5pI6! H)`5$&LJ%j )5(pZB%dlپ@Z }TJbeTf&"mF(LR yFFւ.i+[IfX4XN\Il*}BFȗ5&hbӂf+9혔^P_d E .H1{}%dLI):h"kz^Ȕ,#H&c;;ʛՓdE`ϻ\cdbc$fN;__=|(#n\+hD_pߦFqP#er<1<<<y=F0?x@BN}ca䦭a[p { \<}&{pN} FLbL\BPCSf yҲMpEP Dp5VTкʝhTSIV)i_lWXh)S}Z &vU"%" m�Nv2I VO h6J)"Nhfvhtgvi_q=ps)/{Vm2f}R5TʁPN&R M&JZubvhFЋt!d'f`4PVg:ª޽an�6|lxW_>7xȑ'Oۿ3AWf$ .'{Z eTeXLQM<;>>O;vyW*s8J:>S=GкafA .>asO?^7=NNKW XpmOq�:Qvc!/|+/I[iU'8mа$|TĿ}Ƣ>T5d,[eHl2(v"PaRʢI[I>(7s~#9{CxCaT#ᲽBdbWLӭs%1UiE`R}*[AVQ;I(#j~À?tRnZξw'Fw +6qg`(t"5O=8!]}{?S l(e91[NOW>pߤhKdʚ}7.+WQHg VSZϊ0z]ٱ/>C21pp䱁p+.[Dk˘5!�a Ug NWmɋ6C( 8@Z1X́X4ҡ`;)e�y@K@dI#?NG j< ]x< E�rƊ'28pWF}NS 4Hfooa*z)&AfzDBI}n?Z)d|NO6beYna3e" Ği�zPhTv[ѭ;o~76C_~MOsxpO|39 Et 9sU{>F - WViX=::wZc:;, Z{h_>n9=v+OFx_{ 642Q!lB)N F#!ug;Zt  _WL NJ~̓RzIMITI, KFqz)REURjcPbs#&NvGc711Kcjz&w9/yc�q9vP"rt c$Si92(z*p,K.yƏ借zT+xfwط;4`?2~_8 zꎷm?)~%6bn}Uyivx{'�m ,6 |@wt%d{�zeYk7Ca JpWJ8 : fLXZVIFNģO;J 0tRk�Sd.]<Mw|L '(tTD`6D} 2E56A= %֎) 33)_aY0Y�7W+~v@X'Ŭ6-c37x̅N/Ki |$MhNύ3.TJhKA}7K'H}0*AA"%D�%ȴjot-]L/;okn9qd=8=|fKKZ`7 |c/�f_/^<04{ =�KɪdXTjX߅cl:�vJ3dwl"lf./>^9hx+N= q5׊_.U"YJm]+ e$5F1 IL*H ?])O ('e�щdĞVȗ JQVO{u!XpE&zbHJs�&ֳ {=pCx`}AEz;sR&<^MDh)]SRDz*!a bt "3+̈́L>DdsZ%(`~bρշ!FW}u٨K6ꃔ{Z\w?ׇKGZ9L :k/|` ݦ(^$bs{xZ|3qG<։ hz@0@K υS?९}>{扸T]vU:N‡0;Ungp3|NAbn^e hZ+N�V =g X<:*VY3_ J�S B`\53{=J*L*# Y"B02I19d<+4%H .(c4L=>1-EwHJ!T<Wء2001&?FCJop�4s{fvޏ#‰�y晟]~o?cuT֪d_2yS2O�,/$]XyNzP%ޓСC~?sRy<zCmXg. g΄G&/ Gf.a5wO-/gtֺJ \K`#)�t(x<;j lR5x~Y++ >ڱ2Ĩy�\ $ � ⠓A eTIL k!jLYIv {=p=z`&fuBeA2m{(BDrI\1 3ذfSjIW<Hb*[ʊ1+Y(-[侃axSY.歫ရxFߠF2Tr~_279>Νi_" 2`XItE-��@�IDATun=}G6䆁Cgwb#^ 寰RYOCnkk+!5]yf0.?qv5E>%|z@#F a։;it"k˫ey�P|}| !D�m(9$JcU\pL&Aв, \9p׾vi h}kgb[pERk"lSEO?V"6@g!h5ҷ�.Wy )_Z[9aEWɫ7Z1iy�{� >s?}GՃun4lSh <�KhPpj&ƍoBbQxL0vppi09l&xP8Gd@@9LRpމ]t"@@(O9`e4IẌ£,!4@!FF"A?m�9Bʑ?)^T#ٲB@9ZqrApׇOhi*yljnB5 .A3 JItI'8�{$Q/7CJ&A @ ,YO Vnqot Anz5sݲyoWW1/(@C\9vx'�)_%쐺�˳^Y32 lF^y{/}6!\$6$ގı4, Ft5Ŧ8+.g3VNWb#N0j(KS4 b]  GN>uJҐLD~N:4yt{j$[B3,ٌ@!UҥʉԜND=NP^ OLT`KV\ti6I`IKm.PBGgWݺ-;r<nxlvWl{~my�7Ϝ9?z(GB^7sU�0t=Ppr&a &^:=Hx'鞮Akn8kɀ^ۍG>@=.9]W$Q fcys.؛!<-EsLNn-lþ1')8 2XQ*f 1夢rs{kv_#j_(ZE7q+;Ι& 3O(dhW4pΛ�dEI;*- ̲+�_isX90cW\5z{e?zm'l$o~s/~/64OI`~3嘅d,b'}ݷ-۷o^NR 9Qxox4O7,([c r uWGv,^Dg'qc @bKO@0Fmy3!sG.s,GHS/ⴓdFmHgbd! I F֪y)3G8=pyݬD| Varn'xԯd]`8i&gط"~\q}صK?VS+&׆;v];xOxٳ'J�"(g>eZ"䧥_Kf e悛 *q= fz1@VM1}8& ?{w ^zoF ;6YZlDR[MyqM | Km!IQ($ v �\N _ 6I!Gv)?vpK)_H6MI>rU'r 6y`=8(#*ҔlN?TЇE+VQ_qo �cBӍ;vt>o[?CO-ðJNgχ|Iy 4)>E čF_ݻw{ofgm2`tpg+}+~>o=�Uh?N@:<\~"^~xà <hRtGP?- PT2ڠ tn&3OsſlVHsLD�JѺdXZIJԫBw=plϵdE*! (S! F;=ƅڻD0q Wِ8b&E_@|cߘch(Cˀ1Śxz_pi0NLx<�Ú5kf7? pT=,Sx'�M ;]H9?H}CwwΫn<pe@?1u|8 N�Nŗ_ďFz Kˌbma M3<(6� 6S`K[<#ڔhS^WrW=eXNG4as %[*GRZgAQN%gZ{`<`m\ `R1I.?;&cA9q!&'J(\l '7]'jlE)Wq2}X?~CXƶcv!4;sz'?pU弜f �} Z焫Ҙ5t#z]xMao w &r=Zefw1x�OOJo@J FPu4#wj  QNE# HR-hN8@dڌ*~EH(zg(pUhykh:7dLh.?L\쇪2Ʒ~JJ ?1h4Fdɤ"+ªT˪$DL3Y}X?aC60y7<"ot <H7.瞎~%݈Jf�X@g.)^ ͎k_Ѯ;6m"ך0qhp#_ }ᯰi+0pb=mipF�I~Jëe_HȔEA2Wi�޵&$)C*P,)Q\F6a�ZG*>zZSUu=p*ZlfIH H7ɦmA7yF3(\!XO|*d~J*H2 g ^_:Z7=ksԩam-iL9h{'�R /<5Iʛ\N{}u1 u=<z1ac's_z(ͯ '_{^ď ?)44`Hc'5oτK"GOS2#&3HQj4:5P@>s+M@�M˒X',É)FE3 Nr+@l[}T]@  ٧ %`LRzPhB Ş5\V=-[q d:XOGCԒT nXXwְrF,<kね[ֿyWr-P~yZ ؅ӨV/c3:_#9m\ȦX9\:63}ZW\tļya@a8WHtܶ&:�| �M|޿}0ɄXR00Y VGk%E\&pcL2`XhJWmjNд"{=p\jgĚ\]@'@V>$#$ [@&QVx4ISjILB:iʁ,Ŋ4{W2׆AMs<�ǧ`BEaE_ij&EO�,cl5~ & . ¼b]F@Gª c{O </+©'1:a@[G�郕Oʥ2 ?\,4F66s"@!˱2N*оT ']5%+h)8EKQEIX/-8l \<ml9R j1�x#eaЬD�t$]x8v#U ~n:ֆ䶁LY9bdt;: xaƍL?\<k׮ppT= $MegFQyNz0ix]oI=. ^VF83O_Mў3d08_.aFܑS:�cl MDG۔S~&NR '*d#$RVDt fj8=Dfb5fEsh)8%VF.o:@K/ӰNT/ &RɪvUVVCÁw{6`?g=pf_Wjb/>$jⰫA z0< V9uMo=ڋU�Ki[ 7cg?�U%"3`4r' 2@?$/x.#m"H&Ccz_!_b'?)d.\4F2'5LHr=<eW/ m + HBK "ZCt_$ϙMJ�10I (􈜈lB&>sQد{dEݲ=xOar׏~{ q=1§?gFs8~E?Nman4gr^I:=0D� & 'ր?_ S΄epG䇉9[}}rȥzǃoa%.E[�vDŽV)DK|+D�(G"^I `&/+1!Ʋ$hl*&Z:=pfPNhaQCi:]Т AZ0`QN‚+gI Ye0kɰno_U?Vm!e=ؼysc=. 6b.C~ {ZN m؅Ҩ6c>馛޹m۶FNs,|pxp{>Ο:O?҅a)RfD�%?b`2P2 g�L8ڢ&e$H $(SWTEEl).6㩀RĸQ+|7[){F>?e)/ RrMvM'1h_lIvs9IIjF` cr=ξ326~WwWO%�7Xm=?铟wQ ,篛W&yX2WKApU8o:֮]׼8vX/wËr0qǽg|u8d5}"eI D`1@fPw:.|4 :̅nƲ[SftNPT, =bŐWͲoT&i' @eeF<s,O腱<浺a<`m<ZhPO`Lh�fGwOש�3ݵUV8B" #҉JOhHMp+na`b2zG±TxաKӧOc?莓ԧB+ThWi5WzU+�BC}Vus:a;t3=yϝ+VG�Lsy+Lᙯ~!^~!LcU m0KɎqSÊ�:$ȫYfYZ`|-+ KE Mږ G٢= tڀRzZD�L|,O.U;=p\o`;.,A%TɆK^R;fd *pR*;JovD 2 qlQ\qU$@ &Gp}ma;,l=t<e˖~@ ~=I4�O>|F5 YիxӦM>sN[2ԱO[p/iL _\-@rƉ�wl$.=ik:`I ZA2,eDg,9AvJJl [r(O=))Qxvo3EO{F򀶒?qlJ3B@DX'y £'d;z>WQ" Д m"^6x'†W/Qx߾CelKPMxvPr]>C<^ʱk֬aL=p=}V:& =?6>W`$%ژ$ !%H/J4�n ded./ j1x'.ON1 @ݘD@ sKDR*g{=p{ڼvs9b�3n6)K2,#F;W`ӆMb]ʀH{)NH9=!:T ևac<1nBN۷L�aL4ff􊺣W�]?<n9y0YgXddd=w, p"`}C'.>�8RB;mwe64D`CDP5ۓƓ銉x0N,P%"a I4ƺYydBUlZ> Gҏ#z,ڡb69=p\G`2riד'fl#nd=rXDU& ;,2ܾ*奌x_ʠ<zz-tm;Î]_6]?oF~7֐_<iˏr2�Xl_-$&=:_&vFxãg(^!x {% @ }y4 50Dw$çhնꈾ氡I<W wu{@R�=I@zg*=ʲ>kpU}kMe&Vh[S(v7*F񨈾JɦI�a"eŦb9QƓ} ##ݱ+{=~ǟ~=�Q"]O|c89h3O9OK^\GW3 MHs9޽{7  ,=p<l">vWvs8ŗ_10HgL/!;q^ X_>Nd^d-%(YE\2N"QVZdII'* $GuC=w,xyr,+sT\2|YgM`rt'4ȣؠ- Bib fW ꬇Sл C}<Gz&<P 'NC=t"V%,t3o6iFu +pU?b-vnSoXr{ʟWKx?^ߠ[wD㺑b>7pK^&4bC( =ᙏ�2~brOh `Q8WȀ dY@[Y`k XI*D"CWJ WkD1"H-fYy,[{$+m2ӸDHhG}鱜SNW j9a<t(w{zW<aÆg}^/qA zB�!r\~^y^Eb9K՛k^]= <Pwbs4%<eI-,ԕ~_s.#K'(gHNtP}f ps�Dzdi](% UmXDzL"br&25ぬkZgi;KB 1-/e(^Tib'"&b*r|i -ڬܹ;yG#Btk܈|``>?FGLA:$d4ɫҌ{'�ء4_T5<ϫp_qF<Nlx ز+< =yuĠ^'j#Xd"�#/ЏaV= tk?I�؀=Ԑ yq`z"φ%ENhCě$@=sֵ#rRBN6VȐW6tej@ya#.x,t*̺ڳǜIere&n9so;CWo/I׼:@<8$ff\O�\.S?j"͎g4#^Y7{r\ o{MXuV`?p�J^>ceqإ|_ c/h:+ 8Q DY f:p$e*僔usj$J*HRD"s䈔M+*JUj(Vh4WZq&DD}CA|ZLfrNf"?_9?& kDUQAo 'ܔ{0;d:D . RL3:Un}ϓ{z@`KiΜ sCe, '8=~ PO?V`dGMڱ�aҷ� ȑ*Ȥ& Ҽ� 4[)uLdAYbTģ=3NuW*\%Lpkg#ˊeيCp)8`8A@cc|=-EDVhUR ;ׅPÊ7O֭�߄V}}\wdxsy0%HK8.*nr+7xғ{�Z= /9? d?z> )IP݇^(z7&t�b_ Sl#K7lOYt1Gg>Yu(D#? �Z GI4##?זYkUk4 M.e B1IwEGll~@%hC b;jّNݨGK ZWW#?6~W^5jݺ)4=py`rr(V&w=䓼@Hr¼49/=-5 "0̛ oiϞ=ybZ k=4VlƏ.=N==0x؎z$?*J'dg]? GL)+F6Ԃ "N, ζ%S^&:,z˺*`S.je LF<I -d!S,[bG}! 5Ѧɑf1Dyo;6=Wo}=py:|g>#%bY^b sxunJn#M;vEg;ζ5w{Xl0y='.v<k ͩ7-]5 Ȅi>*`De28mʀ4~D$'MS(ʅ+e`IR$E4e@IV UEwk`mʕ(dNYB%LAh`cQ߂x_s1+ze|4 8v} o(S[<u#eX`'}P-U/|`;Ov0{݋ �c_;ODuU;˲?C8w6 c&'M@@i z(7 LKjK}Ц@R,M@4 vH!&8|] 1%Y&Sͫ:U{`!=5Y-JW(4 2PLGIЈ]x)4&IZ.MA: F}-khp';^гb+ty�ouaPaLAqh=� 9QA5rc7Z9j*;0Р uF6o ?,<Wux} ]˄�zt9 MԅX kC)C[/tNFc�o#E&HM$BD}"5Sm,{=hfO ` U؎4Ex ti>H%4Y/xF'& <2LB2�{vաOi'䁕+WMٳgm^|� ub !7cn =c�;V2XYOs#a/s%' >GoO$f\& Q.Ƃ`>zQ.kV e4R@JQ3{@"+7n-j?B~)px͖b`O9VL2~� `ߢ \fq,zk7cu5MgM ?kT5裏C|/~ρN&ㅲq=_R qw6/ЌnB9wvvl&{ w ]?xxsN's^.!guq>ܓu`C|̉+#��5.gM>7<²)#R(IR˜tV+9`Ǔ{=`.e�D o'O,g�6,aDLL7FMb<TB` I-,wî/Cm2== & o4,?-|`q;Wv!P.;f{rppUc066]߇Y4\ P cNjB"ME {H$ϲbҜXA0d�Z$Gr/=G,GjZ+G&f2Q2ڌ4{< mU lI <d Ngt`H|$W2: MSJ~Aȑ=�`Բ!#~2 Ob_'@�QM ^$6m1l12F|=� 9/†4)cǎ9DO�.{ʛ?][ Sg} kshK } |#%xy% óD%N&p�VД0 I�9 iIBY2 @ңTFPr:Gb7pkOZZsVȨϦo2Gy !k>|qcW9Ҝ X%2)Q'(%w#z3Mf7k|iÓ{�W(c#pG(^r KgzZ\\Mva yFgLs{ 00c7F݊} Weet8#�.% t8ٖ+nZՙDe$łF-XL"ID)21{=6,TRymyaQ16Rk()N[O$-lc^|֨Ö>]?Ы̊g=/Odkn 4Vɴqby7\xVІ9a;F!pՃ2BB[gd9d=nXuQ}cM[CMi2c=iwm=.*!CDL%f(Ay%(`(Rm'#Y5;JzfRx86RN%[qr݀`=~+ H"p6HKpLXAq ݶIOW+&$b\9 lj?1a)mzz<<*kdO8qqCgvyU54̘ `\yYZɳxeJܕy`r]m Ocx s;.1�}7�]7 PR.@Np L^a&t@ @?0u8NQH�l^N|_�XrT)?sٜ{=hk)!_le @ A%GZʉ|.pZs(y'2fcw#_~_pIxrX311�?d<lcR^+O�\n?rUadwn�fz0=7�^سr,@?p9D@kC>>752f"9xIK9wW�~:)yڠ7,r_lOaȽl"H$P?ʰV $CJ#DYnNB-N9C{mE$풴>&hW>+f6hYB JlŎ?ڒ\*G`}h{¾a{5lP{=0`+�n]L[K0jjF9~ +peڏԉ7JFضmA FNsZx|2t OixK 3χ@wCr{~:`Pϱ 8F e~KXS E �<!'� eP4vyZ8 �q)\nI@ HYPDZS.tkZCۗ*G5r=9g[)Ζ0 - +mչG;M"PN32tuPvo:{'{r=]]]F,\G;|=-8xJ <%5fp�w+ kn'sH_Gy]"u�Q5J#1@R7BPPT{&\)g8s8 ˡ)r9$Q>SKDH6;pܘh6 ʒ9FOkЙ9*of2K})jH6$7-&v?=pk2qdu{x4Ug@Jn_7'l55vko ޴5 ~ I`dM<osʥӸ#=�x'7}p +aаFPSg/j y U!$Yf�ODԯq &%IgV$񂂮F*q{ >6M 0Bݡ\YB1_E6H$e2>1;Q3=ᣝe.z�؎,'P} 0e{x]am V=X "} )!Nre2ÕEO�,kg1 ̦!{p\NM9 bggst@@rѽ,)4#m7W&1ǀ^&DQ8j iC)Hdɫ0iD(!T;4*j[d)pk;cQb^1amdQqj i D`-'?$P&O]i`y[r$"xX0u8v! fY2%^MƷw =�WylGj4L){'twwrp,8[uHܰ9b5*~aT sSF``ϞL2m,wy M\q"SL pt(Cil24R8mHU'==`mD*Mpsm""Y(6Za<1t-3$ /WkaM?0fp,pò hC|a8/P& imݸl�}~QXM&]^w1yX@􍎇{K\!<7^å3'&Q]b;>@�q)sp>U9O |\RӮN5hi|I4M1̸5,{=pz\R_+F2; 1Y'4gGN X OE@ġᦻ_־L@ē{=H>�i�64anG^*i\-y/|`4g3J$v܂4=~s=cͪCBG_p>WSIoC@$@#XAޖY1a�AkBR:9 n�T!W8�!1ĤYh@OQQ׸yh1 v$,6 J h@<$G=K@ q"Ua#=(ֲs?6{_X0ʉXD bҭVEEyū9ьg ,Σ.D2;;>Po! {w kև}/�qUrE@9L�4P4W:H5HAӍt@`nj#L4 'n p+#dm,| EE Bse0#F%5Rs46\o%06:wA4y̒= yDئؐbXjwմ=X`2VLw>|x(F . W>(ne~0y3Xdp6͓{=4Y0ncx_/oSx$�3Tg>i=ܝ 9Pe�OI ݚŧ ʁ^ɦGy'@-ZaG0 O4}%G׽bSs%gIBri%2 4eȃQAʩ4D3=�&>f c7 -a[B{r];vl+&�KNCKI(CMĜ|9rvy:cg^M9`2|.0sx/cxo $?"w>?~)^w9 H[=`C:G2ԗI#^H1ٓ�Y�q@%49˲F'r8pm65*=!,`[ors x"> iP'YYB׾ѱ{¶{F'U�V.-(�6Z'y{ZB:RT hD7 5<K57>z&1gӏ $`ǵ.4 �lڇ=W PYD�4{KL P 9q$�?um@T;j).N"Dz9a{�vin199i:*L0�G*Is3 (-Ue=<e-k¶7%lc&:ȓ{y�/vTF:hˍ*l+;74'�oCF ?o܄4a�T={`<94OG8ĉ0}Hhj/ƻ|e� I�N-#Pmʨ?t�s3:i< {M\SNu<̈́VP9uRҢ &siĶuY@N2OWL1QO=$B֝)ѥ0{o†[%'U�^'V# G24-xO�,3a?F;֯_wol$4{`I<G= ^gyU .{E=A+wnѮs99@>:@7Fm_�-N��@�IDAT�\= EH*"iZǟj^LIgfWS._a9p,Smp7iVOh[*qiߌ<LDz5ا![/G}G}ebs=0-aЏ\#� ^؅Ṝ �Xg?vMr7%4[@ xp\] o'ֆ£ ^xB\X?pta 99�4^ m: cvlAy@$�Dz2nV� S8EsNun^fvA' B%p'$KbjO<,ʀH: y/?vk[=ܻljjj5q99l8/uOK{tG9L'؅А =8n(ou,stC?0y{uȀA Tqke,wxKjG-ɕ%,VG'l9s(bqnZs[i:=X*:mpzdk+&4 q U!Av_HY~6т*ekyC ʝí?߆ۃBX^롳YXc<179+O�\:o�]=Ds[mw؋I#w�^Ɂ,N6Az A/|A032 pa�3,LU0)&hW W4I?s\KKU.Ķ%B%H4vlʙ96Kx6m" ,�O,)HJ|Q:8d@CB;5aՎ݁'{`yz͛vy 2|`y|Ջ.ոG @|~~�x @Ǹ\4,(b,rs9Vr~J�s,cjrp)@̌6|[.p\_ g'I{$"OfC&"rEɱ-cb6Lنm]R,4Hÿ2';c0nCKDO{&Xż16pˍ*l+;7,�X~7+|;L&l>3x=CaCϊp+NcЫӍ0y{@c`w�{Ny 9|�mqO�z@W4/d٪4a" /{DeL[mb<w%+Bgv?+m48ƘQ_`#ȩtj_Ț= #cO|ܷS}?6׬d򧱴y__2,!: )FnI,a{@� ybt~GU#Kn>~CBTcp OӜ0 #ġsF�'d@Q2F,|~DaY&ͣUjm<{`)=Z.skX/Hi:夽Y̛Wkv,ePlbpFX}t'"{�qk_|.l̪kqNFJ`Γ8(qX5Ѷfᖇ7E=X`uhprЁIv '`t9F"`c $�J2Z&Nyˈ$g)9̲@2Ep,{Ki=Lm K>�i֦ĦG/&NNh#*0ev[f-Fo>\sBxڇ<7d#Z#>s`ƫ�m4=]]xz raOb@ל{=|=ίgdeuo?ttKm޽ׁujҹc\qpp|)2P0C6NPIU!TYѠ&#<jZs[(:=bAf:vie0Vl7G܈ I`<Dx)䄧MMl<ln׺öp?зr4s�-&287`2AUC>q<I|L[c[JysO�Q)Xs߁ gSNs,stmoyGO�}.֖/Yo�A5b"+ C'vN- ΥDs& QEjm,{=ktݚNqI׹^l,5 .$<F4�l_KmL8?`ww`f==`zc^xKo-DG3W|`κLQuIYj<;;�<w\ca #?wtf}e-caD�9س2h&DG(^^xP mR@,G:U>LIlZs[(:=]oM͡: Y?hK;<R-�-WY{%ϴ Nԝa u '{l=Nyq!FgNe,$L'cY&<,uFFFx337W>pu|_9 x~ʻ:R@Vc;vÿC1e|i}(?vI�KK;6ړ, &O(cDMmJ4pFl*-0J%\&BzmqyqSezG>+m)?&aMT=kϮA^E5is `ev *Vi#�㎉Lu3rKlrfc@c\.u>?f?~){rs,ttpoږfM0k%Cm94|\쀗VMLG#QG(ќJRkn+M<jt}:zW^ŵv3Fֆꀨ~) 6 I�-s& mg* ^‡~ ο=`}^_Az't cn4 %1=%J# �._~5E!<ŔsZ#h/]�'60l"=]z}'�xIk{9OC0`3ׁ5:@$M:p$:Sʓ<"/ejSth)f 5hw]w3H]ߊ5OKd{d#;0=Lj?yxxo|"KAOk[:oəN#GnYVsNnh&ü<3FM7_ .>=WO�\5{E@3ɟ ky e03I�9 UG;ۤڲ-&3AAcLDd i,Ujm<{vS1Qmq7 }fi@WG[(KڮTL7~wFbBkxu!r9lU3~f"Y`oyRU\+􀷺W8Mr+p6̨։ֻ{® X?PfePs~_h;ʑ? Kyӎt%a,30�8_ԁrOfH}!=Xrp]M9E`Fq6͗f66(<JLۊ��R& j椻+oy/d_oEW+Y^!~Fe䶌.�B5KC DxZ"9:aWK!ώ'cǎ -�wv\`'ʷlﭡ{Xxw?/5 cXp@I؎V�s�coяӇI�i�dP]' -V̔2 r9{=0o ۠?7%ec?՜AW<I@\tm]!'2@oh&ވftLpK9҈υV-r=3oFo3yX1U-Py'�͵%J% &p\O�ר91 ݡwa;DSr�l5& u�e9zPAj6 @#($�(J- J=xJ6er\rsuℙh]/|Jjѝ+~<?;힖S];Podh&k%d|3sUNF|.4`2;gW!PldN̸6uFVHӑ{�*K9\%Њ΄}ؽ/_xHqP.(>.L3�{y""$z+{MRy⢣ =3,g,fȯF2vUƮuJk9n!'6Cxa3+Եv$`90{yZAqCz 7f#4&O-'rƯ4;f 6;.e6,6z pt= `�X_BV^ ?�Œ9AꁎZ-޴=. } 19Mpmu,:C 4 _@` &A`-CBޛ_v\}=}31: A� HJ$%Q2CmLIrI%:ɶɊ]*rŕT*U/RI*˱JYLHN @w` 0|}{1=n=sonfy)s-]-[`g_C<3`S{ȞLoL&|r,M}'Oro*z-pZ`hb*\MX[[iy؄kr N1[<PC.6av5i~\fʅ @?F]#l,n6cx"]-pa�^]eWۭ| f} sQ8vh[1 z `U, dZljAz j l}9zmѥŨ}{gw\q؜iaV,6s0zY?OF?/v=߇54[O41UN YWS&c3')1_5o3{STN3.൘|65iޓ<l[w4˪+Z.=7\Rv^otAOpU1E5$$q1#n5zox9\c Yp!.H <pWsO]/ō{w0$aοf|I &p,P)?C[{+pK滈&t?H'&Ȳ .8ϘNW>9.2Iy߅)I~M]Ȧ\} ×8OY�g4rn-�l%h:X/wٞl}`H lopcy}ɀ\P`lfu6/[ @ 4τj0%XBU\].-p-0֯jKlKH۷f#&w ǿ&K6!mw?.^C6HS;\8_Bi1&J٧-Z__y!zɶ(_E$?ci_3< ܖ)d-"RYn�p|6[3%[\h/rG~~vE�M@\} އ9\ȭ@,H6hIr )Nr8 B~pz \-Vn5|Z[xIh@ ׹&?t?n~uOpTǞvZkT;~OKq]#?˓~dWb.Y8k9^˝Q&Ȥ\Öy*;c-e'r0%0[8o߾YKyƐh]< �ڂod=M/ �k-pA]@w^uuyby}=|.À010�N\@XD/u> CLJcUغz \@-V?ЀzlŢ#,4"K7\ÿĀK~wT{`ꉼaro)oz/&7v qLp\ć,.¦&muIˁ-ɮ'w-_/3Wȵ/tEXZ|?￰6Wĵ�]s5,�ư\. �gacx u=@z \L-�M?[gh7ozxkx'8`_ C@?c!xV?K5 ٝ]d(.XxQd~=~y 0s ?ޜ;"Jx]QD?q˖r[-\\[aokϙigM򗮸v*Gxɷm9rUM٧Ťol%&|Imml>sb{|.YyCh�pz*~ٷ]`w;�N={ \(-�7?R.f1C:g@r]K4�|p$mR\0㚆:s"<s[[{ \-[٧$:)yk\*O9]|Q> Lh?u(o+OE[&p$OsaĞ$ _\80Ŕ s S 򱉰bX\qU^.K8/&_qȅ): cW<a#{l|i6EZͼT3,/%e[\|KyO|9a_\9~`hub]-GWɇۼF;fn�?Fbm%1ɷXG +~oD ۂmr[F pJb,E:>Xá?#_r-ӡ~o\~*0هUoy[ɾaaQ MתJ?$y yqZ } eVFW6lr|T&|W!Ϙtam|E~-G1IvYl>qy4bXUvN3mw}-�XgEX8Cx�PnY;zl/�DlbwX>,أv"�v&"Mc8;jV X0PBeZ;Tk8_qm!wk,=rMnɿn�+c㖭媷kR#pM-2xvOM[ ) dVex=fV)9ئxĝoa/Jmq[[6bMi6�D3@ϲJ0;�j--`]\+;WJ| (>gF͝Pae̦3'yh$1=p3D{9<eC^-pǷHnX\`x5e@] Oޚ?Dw;8ee6қʾp}Ms5RESl.e&iS&Z=r)tSW9&?}ֶ uTOKV.2y.'՞C , f;�d9l~9lh_0馛Y'/F-p1ƕr<[<P9~ 7||{3yb'8�VHxLlΙ}<J@*I -5H{ hR_š~^֟3+ qN~o1ם@x=(7}KGhLΩ-,lȇNrK|SIڧCX.+[_<#<q3q\1'o1GRo!>ysf#b{&d򫹏<LV.3:'{~[/�]#\>%+w}73MW5{ \-�wO} Y{"]}.>y�|V ;`&|`/8 :W"!*"/-h1K>h:;XoZ p\`|[!<z6rb nsVxŝA#_`_sm?3kD+ca,&pt_r!?8~` *<:lbaD81]\vRI�#c]16|B[VqrYFH'W<sڀG�Sh�p w={'YDw-[Bn-lrر/'A;'=Ϸx+6ԷKtQv͎ɾYX$`JO?LY`nO %p] Dg|yIvN[vU{At6zu8{R.,/C~]9ѯ}ab<or 7rO'~\;m!?EJ;Y#-w k\g<˙s.em=iQr9cm/C6Vɉs1*GuU~S.\eٜ7éhd[ �ǟsL �ߥעy,\vdM�0cgϵ]Svq�`Mx}$_801!eh1!,=~8l,]'4ހ[\}$L.xM@􏓭:&3XpV5ɼ&r3n3fU#9~`W-LOi[jQ(ac:<b d~+;Z}L⢷6vj[bQbfY0O.{˘dGG9)2r* A񲏸q262 �滃y79Юt ۓn9ǵ)*|׮][WVVA>׼]-[`6l\)"w~_v^pA{F`_WPCLcMq8<l\M60U!_>[mu,GxL"21لǭyc{yoo7ۓY-c$Iet89>qHcXXb;fȹ.ZCeHV}*)Z8e4_rny0/9G>٤:f }jc8˹4|g|IyiIN[�K4:(ra۶m<";@oVܽ}?Om1wkvh|r`> nQ vg13w`ɀ "|;*I KyH+..q/JQs؆I{V1lV] ljءrɾ77Myˢjfmc&/-lHґ+l>QoLo1#29~+֔Ok*1.8m9 $qZ?e2#TsE~;T˘Od.YX9W|[4殞 �gU2Vz-[-^uݻ ?rч-<3g->7�6İwx<~Lߒ6( ZHL()d_0Є>R={[mEI>]6u!cX駑;z,cɰ!&L- g(cxٴ:6 ʘذ`-'cekbxslJSx+Nx։u| WQ99`ce08cTTN~UݤŤku-_:r|@;�4D%$0N?$٥ڷ}V2Oft[o/ϿSv\r?ʫO>+zK</I]x~ky~ɻgX<\E�YbRb fAOTĚU̴�wҕ_ p.JHg|lE:etD^X(&X0];Qv\{}&ywٴu+IU.qk#L<t0+MW\7`pZr/G6)<sZͶ)nS(GX1OV.'lbjqrAn9W96czxYG|}UL':^]>-_蜋/2:^.wo^]qu -] ɹuு�<1@LU3&1qB&4T€~ yMgiL6} )&fwyңog7~m8OIV tka# N Z%CyKM|ɧ0l$rƜT7ZOZħ &J\ջg bQ<d`J².<,rxj'oGO1SxF.&6\djGyvh0KSѥ}yڛtUecl�}U-[`A l޶\uu@ٸu{\܍ϸ'6 ;�lFh] a<;rSIo(A]-Zk8ɤDOCwfWA~1w[eʣaE_ pF^׽E24ɠ.YF$E\qdk|8ñlWV'\<rfYe881&(0ۉT]Twk1TI>7ǒ'YddmcrڸS/U\W=3/s%9!YR.!cs1lb G�NO}�YK�Na[oldw|yP>Uؚ/�fjA6L�f``P,tQJ%F FN<12K 12c_tdp4Iu՜X3}!�>'7ޙcɞ~mݽbhkG&\ T2cYnw 6tceXYWy*#Wescve#-iyb`U/S2`sLa.LrC>~Vy7a'q;r$kZhxAv@_�8}uy�[g �c-Աn_Y#(OcJ�@^Ȅ~X0?/D.~^�\caLFaCڠjlƨY@F&286% 3g1a+A:C$١j9`q7vYncHM1q˖r~,;Ҙ}0×ZY~&q[ }Sn+X^S8l9NZ<r,gYb9erh?gCXKulZ+cW,dZ\xYcqb7}Tjr8˵`m}`+[y~`y3o2"[|&�L=g`|r`\^.0ܮIEt"+g8&,:&Uˉ: pl21uycbcO& +$elnɖOʓ@t.�WLr+{ 2x])D@XQF1S,WЗTd.O+l_$'n;c9_戗\f yL(^ƐIq:['|=m_O܌G.X,lm|aQb𕈟_&O_Xqd>GtC)Z9'N]=�8 ǵY^$βnwRoU p޹r>\z]My/Ms\avap.BtAM}%ŷ C kl|TZ-Zh8OPCdmw}o }tgy/5a>A(edh #>سi #W<rK>a#7s҂ );ehRL-&<%@b NR<䌡Z ]=;眲ǒp#.]Oy-&]ywlđ) <%x8'rQAo/a7 7ܠ\|KuZ}msO�e&."e7؄"& }4K&E?Z(ngNmg=<Tu.ٻ[lZǢ\DŽYjl#;W8r>7]>r{}坿e<4oe8)L1۶UrrY3p2r]K*g̶r4RY7x~P˱0%]~s,arx*'0q[_)LETprF&Q,S6R.W`oU>ܩ$Θ?/rUE8W{+HcYk�p֚z3l]9'tCo&Zsʎ+)Mw].&0 E3aKIs5H jpA {ܬ#i<kU h[|~^Ȋ#>9q_x <oM7lڶjCSy֗5Qн/.Dd?a9 S9w S)pn';_+|! CVR9c8S.? M2Ib+N5cpIJG\s9m T'U7K&?2V`\\1MX}2y=/r]3&=cGmxझ;w�y}!fgM;_3&:TOz 8-ўc_/'VqI0c{ ]=1ۜà7Ą6Aq!O1OX�X4z;H]-pq;D/s=^l7kzVsX ZPE�{ h7P 쑵%NpIl;f9NaS—$LKׄG~9o$ل qs9*[v &<s 2)7'p7a2IY&n8m-j\_#lJ_ ee(| Li <_6W޶g[nS<[\8X)F's<I}!fgg~_�X:@ou;R^lXu1. Tj &'ld~ %hŽm.UNZẽZT#XɎ>1Z`℟I<#]tM[?MÄ,Kcva #'7`9e&#پH,&V+G~~d\~/<h~3ySYq2)]joQ[1?'Ti}!*M}Y6q#Le G?xAɧY L{`l@\=? -,4zN�`[Z=?Ply~&gl@`olcM %`%6?.>`` d:xpxeP*5+S-q "\i6ט[@=G+>5 B $n|I6xlX<0 Wr~ٸyU.qư�_ ~ck1M Z풗s1c񖧸-2-d^&}s\6ZS|:1>r3O|cX,iycTf[|l3ָ$](H-&x¤cS.) ٕ C~™Zw\El �ߤפ,oW{<O䟝|Ra , msvr p8a1ी3"?CM%`Dp mPD 4[lM\KaCIsrdg{?3Z$a 아80a$vfˣ^: ׾x-Lilm*X[a8ҕ~-Y9t/s>1,,v;N< [ekĠL_֞}UkLbg_˜}+*W-[,;,=�]28Xٜ;^cjoN좽bղ|akd3\cowKd`%Dhda0"URz \ -O^k 4X.Y}LIzw&/~+^W^" 6>9 ˓�qiqbd=sab ,7#]U]d^I~IOd?Fu<ğJS6'azg<co sm/!erc0G94V_am8jOs˴8ٗr|-F.\" U0pPdbs@{`zuٙj�pZvx{ =wg-[$[]�guXL.L(4":&!>Uzp<S8.fNӺ[Z`y�}jRUk~OpIQnݸykge^_k b-Nư+&;y8MʐʑM8//qȅ)DU~pb$.d9Ƙ}-,呔['c*V[M6rI\ʝM)1 eMr|1śj?쪗ʃC R+\uP䉍b7Ӱ1Xm k~Aq#� ڧz 8}-w]rOl `V؀Ɗ5Ia�#<VԘ$X(*ύG~m+Y\tzo/\W1w,3ӴLɡrx|GSv0u�IVyȊ%|\|儞'UrN>-8kMT;gL<}N˦W>¤,-|U#0ra9&2i෱#)'˙GVt2yJG3xS]s,tR8\=Ć$Lea&' A)TOS ,<i*Xxp8rhea9vUƎfD2p=K286C14�޴=ko ^VVm5};i1~Id*nڶlںտq=)87z o^u? I9?6aSvQx1uعgEx7n19ezN8~I~ 1$=} /Ǿ<rz$X#\{[k1|Y�KnrX\<l9?LbER|dk1Er 4%sLxƖeX$SnDf<Rm)NCo1/6cu Ev\~/0G:1ZLd'_u2>\9\j9|@9ʁr襗/#&:X:_*'~zzLr��@�IDATX9e,| [ތm!m0<RGn;�Dx]8w-0?<wXJNcbY6<C: ɾ[IxNc#<b`6;W{.+[kkʎko,[Y-]Y]6Y6og8-pZ?^^z;O'\ҙoY8[W�gtp?4ls. `g`B<^0=3. F:GP-p-q5t}=oǼ)CMAp ~?1,09Zu}G?CM*[S̩^kԧ3/cĕaؕVM0K6؊#]WE9>+S32c| } GI*+"?qhO,C+]ǎd+=S>lyGK<R^~Oo.]kN]%/QlE7#f6M[[%΢;0?5vK oqDc;g;4vԏaS#Q,*I'0b1C8rʫW^=}kL|זmT^~uzue5זHyvm NS lf/(> hGO+L7f Qy}o3&>%bpCrh ^|2#LRomEȊ'밆>/ӌ@q}Wn9[/`}_wYdžl2\q 烺O#W<q2L'sg\e0|IChmsC6tmuEX18$b'2."lJ^+唱l˸q-ad/~SOyöPyˁoFY[g=a?WȦ 8م5|&IE ggߏ9ll'x 9X{uv=sI'L6f`7iuӤNZM9S:sGe-q2D>�n/m!`-w7\v\e W\]lgN4xZ>[o,C[`P ;#`'@1gbι39 =b1`^l ? ,%N�}[ܷ�%6'tAlͨoZp 1m㸂r𣼍6w߱vRdRaF&]x p1L>$qBH0'Lܶ<c9qoc6V[g#Չbұ)LŤ+=c1T.zsb#7sœMk9-&]<2rng =X?pyk_-/>P9vI>'g?,,17hK^ |5UpɫWȿ!‚^~T眄Z^zfN1'Abng=\ +ÉK WY�BiV kX56\Uɬ0} Z|yofb7nRv|G{ʮo&yz X_ 蜲[ع8>.>Hs~Nù`RkğENPEOՙ2G e2P[`a nI-SI08]D0DC, !n lo.{c4L H)c:/`V0m<'yƤ pE~-G$8cú9²X˓..:I|[\w6zTFuT]כ%3&^.Sx$c8i<}Hy_+sQDߗO?2?O@I1lF +ͼAq81oULlT_nm;&7e`— 3Z;kT˜>|KܴbWMu3&-$Tqe3NTQl ~}TߺyȗQV$  _dy7n*v_V~Oseˮݥ�皽wc?[9LHac H|{mqŃ૚ ZU ԐJX"LX)mE)O*Z-G89֑C F ȺmՆ=}?r=t*B%xM>htL"p|&ZL,e0k] G&| <lk/ˆZ }LqU^Ɛ3ekY_.Lu\e^gcݡ7O~+OYy'# m&'y! ڶ.7+Yأ`k~͋EU[�|d ѾسG�s֔\s'}e�{6fNq'1Ld~m:Ġ`Uo(|y ^T/+Y'e3Og 'F ޚJC\z'*1=o\v}o*qn-02?׾X<xz &MG9fgb]o8,/ЧN} 8G@rOQ aI0U} @2I jwd]?a߮vͻo)w/oepS&_$M<,n \i|TXyٖc _+'S\~rmV!~ZTVhkoO&V8'y0۬س WŖ˓=j:?awN]{jU&0aOE>/&=ĕp $X&;BspZe Vƀ@= �:jVԑ/lsXF:KF#}Byp~2I*\/ԩ$4/D'rkw _PLy<ُ wnKe 7ٷ%[Ϊ7.XkT>rg|=f}�,p=]{.�z~Pt | ZsqP# [# ӡn<a N3x_!>f+We.Fm |rA^=YD4m^^KRVңp\;v'G^OZ?lcq2_g,08-/c˺Igh*&6Qc[L:>m=4Gn>9j?w]#xyes#zmxخѣ㊉84*:jcdZE}=Df !3p;Rsm΃1΃?B) 0$'�g6p$PU'KƐ@ ^e24X;"IL ε@k`|xlbr p~W~N}<^]咛Xӷ.몽683O@}�'b~s!tPt3wKGsF c`DvuCLe?sI@*\{tMm;K ّqG|<f)S6~_r뮳P{Unƈ#cֺ!i6|?1$LNl_p[߼eL>*g#;9>#LG_ ͱ2VN٪sN+-;R #?sَ=Z^|1{O}<m9r{ + eq$0<^q"b &P$$Ql,q7kTU>:^n͉Fߵ3}̶z۴~& ZQZ/!tFl|fӉbܾڅ(#hzgQ� Nc%jRZ@3ͣ6aBó׾P6l*%`wP.ߣX 7}�MOgش� eΡ[+U:t_41~&-8P i}%ӂ3ۚLTg w*͢2u)�1't bȊos5=_OټF{P&LlWy!I[b+xőy#IGn1-]DqZ =ce Lj>bҕ+t [_iXpbc3#G >RG+' m.W5XTb~:=hC5APd8\&6i03,Yڊkx\Mȩ!�6mLk>9wm?Zu8tI>HI�8ipڀd꽮 f>!19-X{"<l:HRm+GC:?nGFgDb%Gq8b4pSe˕ro+'`[bkn~׾J~|3i$�,@oNk abV ,1P/ OK7mLYύ;YdktmZ4䌘5}C8" 4#|+t# �Y$0P;-?cJ,(S*x<"GũUY̵Fl%WY-O:|% ϼ!oVb-&c m/L~/S,K>5G_ OI\ˤ7c?_z>8kS/Ddz$~B渉jͤ5F1J&n\&>sr*3qgj\:ݻ}}<ۉ.tz簷O@U_'9gWRq<W탻WgI%) []N@<51'VSEii5Z O#Nx`W^z<o(͗.r](;/vEo_)Yw RԽ/6f=}f`vc.6s*2Ӎ_2vI&9e;[1T߾;�Hz5/ND߆u垿w;O;З8ҕŒmEu](0dux$aC&/]2ȕ:ˉG.<!׋{O6V&'v{cLy|{P9l[Ŝ{]'~ !xdu=K)YgQ47n{bR#S.'3GlR')Q&cfJj٨C (+O6vIfa=?-�bc/U @2ev|  (Mmc9)܌80$'"9&\ ^V;441/+J]߃Og'o撅¢=z8J9+яaOmW^m/wxKn2oL勺\k?W_[{!:Q!H6ѱ/s}Plilx .1ę3 ԛkƉT#%sX]-0�DzI\Ё\InKЇO\ł3F̶i׮rۇ~k}!|SGS#t~N4DyMsTyvA_ BWZ9qZaðqTr 'c6m1e0+'QG-'C<]^}q9}ows'FK{ W-8 =ٹm0̀qP#yg3d9u v83Iw5 x3W >�΃?BsV+�Iv%P,q9q11n3Rϼj8�{,TTF</xxFM@w=]1UpR Ԅi<YNo[ ?f/|~zmU_{cww-;/q߾-p!�_sy7&W6ox,Ϛ3قn?ڈna3`W܁E�0R6exo@ɋ|88c\\4@qiZ"k<oowN{wmwp]ho H"^koqdLqOu-e{%FGU~ˑO8md'?cpJ^&?KK{'ߺ^~~~Wx0HU``LW5$~hi_wACC%4, zwBɂW{\o&c�rUYsc�Ns}ܵDɼ(:}y8N+<a1h5 ƅԁgdǚr/tLߟ_BD!&>!9by! ϫނy< Ƌ[XfvL}~#O}`mw72ԩ .l.-~XǠW[߂C?~-Q-},}*�xeQυUGl&G8.Gsu똮1&Ή [?rMwN|$\o_-FHe8ع!0`X \Ő :1lXSY/]#2)oTlЅ)t[8ܩXSnXeŝ)>?XyˁQ{L#u(kȨ<\aR_*w%%*KIt1g kp0/6JiռdtS. �gR3v林�]̢}M=~\-lFJ]~lVJ`^+s)vJM&`N $/8j.Kl1 \XL&)>Aa@5#rˡg*<`y/>QO]z;ols꩷y]yO|_n3s_0colXjaFb3� ~B,@?rv�3u>.2 _Wor<<Fr6.UİiypM~F O-{.-ʎkzvCvBrW; &YbN!`#LWk1%TsʢmUG~*S|˗\8%cbe1<C_z_yy><e+=Kh9o`u5CBm|W;n˹Á_ CnuI@Ohe*Y-Ę|PkCzb/ vS �3}6I3! )n_z/ \+Z4ÍsGl=:PS:QMbFL;' 1Չ_g@P4bp-9T;(bg`VN�sQ>0; SvyM{]vz=T"[Wvg~|K>(覟9ܣEA Y?3'zd<=s2:[`&#DqgM \E~5F~_ ?m<|,8}%6oY?a?yuez3\o=f.)fl0d!$sqܱ¦\?qZ Iy[\T'nX`SI1;7}|<'ctkyvw6Q~mbD`8sqDCAP;ha;)6O[ޠO;,Cb#4܋u݁ɮC` 'vv kg]-yv$ GQӒ,纪<jccp4+ kh5&۪}t"L|A |=m(.~Q;\͵@dwdy ШK‚ݶa x~Rr~Vn*{n\b gz-Zn6g?U^7혷+~d&ę'A[~n Yu\JhMUqX`3 _CdȸǵG`;}wMvlus'f+TN0|e匕!lQN_<agOw>VX2<VlYdj|g_xP^|~/}UN7eq_3[†,Y>c|9W/$20x$iΏs@"fxqQ"̬R\iୗpQn; -�B#[W,.о9Dw4I& X+1V$ ֙-`^UӁ]+Թzg <Fc*^:|PX4; x0#r<C,xz1<^ol+}ڻ\v+[{h^-rߗ/>g;oS-k$&2b@2=]:+k%@~ktd.<^mjN.n?3p{FɯS nXq|/�6-weu7ԈGR嫡i6E)]q}-L1[S͉K}s0ySeWݧʁ9蹜,c#>FN-~ɳ_[/}<oEť81'8ՐԪȇ3�pi*_c*[!W` kn! }{!^hvNe+KPœI5X("ٛbeg༴}ݵSn�pMxz}#f;Gܡ+mk%u0GY.f1[oDud Y}f{:x.U$^:)u,5[0R.2r=nj>R h :̸|jzϔŲ_)Ep{;vSo^ \�G?{C\& Lmboz֊E6[H}l>ݧuLwLXkJ#AjzkW{ V2eXFJ1c; D_c_iҤ�td{\x`W0lr0RgxŤ}">cZ O'Ly\>NGh@:K/׿V[噯}կ>~Ѿ-8 yqL6CuAU8+ @p2plj@ yhHpW3c95`Ҙu� O LmZ=ĨʗdZ'. �gWu{�KMp 6 N#apj .9a C !;4xbD9ׅOFN]:<Dad #_97ķ)~.Y۟8r/KnysԞvh oyGѩAwFY->n1?2`۪jlfNp][b,q|ԨfeH1z)N?&OS()l}erśbT+M0YdR:b'b`OM,Eur)WcXk"82Ų.\)¦r G:y$.rI}1O/~οw,9'H.ۃmۋoEv*Nez‡xV /?&ß,!94Or�Z1)|Q kg];Z/�?GKx �] Dg[2Zf<y |tkc.EVi>-O$T;sHyߙk%4Ql=/xf[^!.n&׀N<k(͆_":/ǭ}/+QsTL^V=>rʋbw�i6 ꩷kv^uM'y@ucCb"ީa�|ǬC;8H�}OY֗Bs{:q �lyKܾ[{ӯr2Z\G.L4�4>\`מi}?\v]c46y,.8`>$YzxSR]g-yY&~$9!q|XLo1oy*VNLbqTVk#|$g1C/d/gimCf_q}s"!zƟ4K;h6)#"5%ԘhZZk' ghVms4pf픬#\; H. �g';]V-63Nq*}a ^tJo.LN -1NH*"'Ok 1 Sƅ/"kbrnz�qip�e|1(?i_xL! ѷV_y Wz/;^_]^Ի7rߜ-po-|3U_}Kh :Owll;1᠋=j6L灡oӂ\Qut، 8N&R ']`7u% 'hlڶ\;axh,-=dM`>Pā/< m-_pSě*Nvbka)^vm{<WcʖYaҧxǏ)<tyooX-$FEudTY&
9iJ&s`q<x1G80pjߝ1'er:͌\O=/>QSut@a=x;vX_Y6'`xݸ14{PmR$woo8-<a#Q,1<*�$`<O<.ZDG:!o#2e{ }o#3؆_uP ܼϖe׽˶ˮ_ E[k͛M?rm 6YC?]|1d `/-Ur ` jj$}{߷p 82L =\9qx ro[n+OMűCyΝȖSbDtkeE8a81?0|g 3Op?rda/O268.d8L:vp9ԓSGˣa-q(IcQMG TK,yZhѺۄN )UWEPr$|;ѭxaײô%eڲ"4ߢPʴcgPu圴@_�8'>^=zCO\E#9\sJdZUEQ)˵AaG )(N81 yA^|PĘ b3[ kN>1@әx;yt5&~Z3gE�_#|Ky+/|w\w B�S8Z`ݢ|r'ʡ'ۗxh݆ vs4<y,/xue tb}€ų1U&9{[[$CC@fR45yfqx @w`Xeo(/\=_.{-!i" SOx,lrUGba,Gc8i,pZߌE~H,?0dAq ;I8ȅQj1]z?n }<o|)eQZ|hP6؉ScL-|kM>+hA bM�KQ뉽2kɐ=d똌}̞6ɆS5{5t L n9-�NG+z ?vf>O`ؒ[}$xUGn�]*NsIq"b!J.hNs\Ál\јxqw�[k,zLLb& s3I OMQD٘=Ug>V̟kn+}wח-d꩷+/ Gxp1>?}"=>m_ �7D߱&+Їуf-${UÅ߸ݷ)\<?-qA5}:_sl>GDϯ+vUw\|M5` I:1k5)'. &х>m1|,>Wo C `$ mm돇0]G'ea 9Wv؞CxG|npU|hPym5@2=z7m>.Yl1cU$i !6kHryL4rSؔI3}x}!ys0o4j85v(̷ƌԥs}:`g5e;�6p';hx6u_8D>Sn[}[:w߼5iH:L=e-D qepMʔ`�+$SB'Q<cO'</{wSviN3z-p�ﭸ?X^~7bQz1aRW j}=ah<=gVÆK-'Mk(]Z@_q)+0utݍ\.axfӭC@è !6l*n,n1&c`p[. SSbI&0ؔ6zq3 WVNL\vũ1sBdߌg~!LxԽ#R{7]8!k53j>kl1AܶƺX"þ'B"Yy- :�%^# _b oΡNFu 4MV:p^@_�8<;wlϟ:aqkh>8X1tڒ.7^|Mbۂ-q >\nib8U81!-0[~ ŎI:>L:pLMi"b]`E[7V:7cxho.Q쟖?o}sz+Ⱦ+ՎRpOA .UxrtViLc#֩b^il `&ϏoB2Cu.D GǕ?e3oIk24]8[^AqqY�jw{)׼eϵ7o> 6*K-_pcq墓ZN2I8kar0/71,mVm\7yL_syGm䌗,Gmw׈YgvcH2y$t0>ٚ)$ϸ$Iv7'*>I^OP FBC)h[qSCSFnS+{ �%;6mڴeC h-`8 hq(CuUm[C`7A'i`PG S8p=9-&%mZЯ^PBf!! nVg/xc𘴗饛Hp}Yx˻u`ٵƲivuL멷n m ?X�O텀G ;O>twljA�e#}t_WgΠcڳӖr.pgvY1ېxt6qMwHR]rٴ}GMQ;BE-ռL7ðqradnJG ky–7 scK^+'ʞ⪼|WB㬵Orڲ.b`Sru/u_'9?>X3Y.T&.W "]6t6\\$xfK[<-1fR ڦ|7g]{yLu �K7@<c֭[ g+Z2MOz׏jps7Vdk"pη+x~IC~loP'XT9,1 +w^O0)A<*6-_dy *_+׼ / ܸe˵� f lC.s9V{vy~SرQAlǨՎIՋZ ~G\_O\"5k V}S]e}j|FS=gȱI<"ͮ Eȥ5꯺=> ˾1MW?KZST_Da꿲Z|9gLaG_GȕTE9[0pAژ3Zz(|씩~2bcq<ho<612#(3kJãf >lj{F 8ut}l:lnf 4?{olqe$v @b'UIAWPԈ")Y(|7eaVb<)Ei8Ԑg")A⾂ @5vbG4^|~|Yx~]}9'++26λ\?F ⠍Qg ׉3YSbcFS$Y9{`~�.;v ].8`_Ҝ${'+]TX,M],]\@CTŅ,"BXLAv}>Km :8t}}A{GxW!;"Ԃō-(|<)T}=F(,P G\Gg쀭ke^ι%oxS9dƧ+md|bL3WPpf pѤFC`lcr<bP8hszg5>ƦT7Ì?wn< 򫟏fgԾBs՛ʋ^\y-:_3.,х)t-p[ \;•CUd0]/O'E1}$|ژaKbW#'yOS=eծqUvo׹Fm~ = hl.D9*5 Ȥ-#!UG0TO`b|&^78< Z/]yl˄<r$w\Iy^0Zeќƞj#~ɗ̈•Y炪@r-]u/f"D^~L mLz}2(,:mФF$l'hy*Hg~.[r֥W/8Xb=ˋ\WWsF9%TZ\8Ȍ/|�^<+Ⱦga8W4;^ S7pLεYAZE` 1m8=c^".q cVMtS\wC%1yڃ8۹W7��@�IDAT(Vٶ{wWoh 7OPr9rЅI&0Tm ZL[pI吾$ڍ.I6vQo926m|jt0mgmY!ډ<bO|*KzF/;x6Wc{=Zc ^טa?l x,lO|mmغJɍ�1' m(RHAr*ƤFYk]2vLz`~�=�6#^9:я2e%_x%S@@DIԂ>U`7sy0wKO89q̨a)c{`Oƿz#D ^E,nz_-|\+Q^)< xsˉZMǞ ,4r!3]e=\ylW<vwY(r"8T)�f<Tw 礳?HY&(s{`I0T6TB+2_C^B>uok. �OW҆s0-O`!0q2?- EGom}U]9s ,-~.>6X?Ⱦ?.ʼ^Ǜb#αxΥ~~Wn*Dͣp\ӈ =8xk-ȪE/e5OR؏ܾT:w5d6�ޥCN@~sfgn8bcҺޅCKpl5p I-[@c!m.|TW01N~0xW^,/k.ï_ iͶ1yzud?r~yo Kz[i^WvKy8\͘ٯŤays+o|S۞r\b spp:qnJ 6+pS?`<|&32^t8!6Qcs9q{`[/ڦ\ul#cD0\Zݿ L·xn]g].Wjh>N4maSa׹+c ϼe6Jn [bIGȸ .28Ut6dlf=ub>= 3O/|ʾ;nkn|ͮ\2y&cLk%,mÏKN ,Y54Y` ! ChS~ G|"wBnu#uh�` gIe�(_$^^I*u%XS]i".K)ňD_mG]f}簥ŒgwjX,bׂqBDf�vo (&Y;W ,!w˾o_b^Vΰ?Ͷ~bb.ǿ%%ZazcV9̜m 9Ngl}7Lwϝ/~rN;_s͘y?h I㴣N�9zsXu.st{Ca<Qsm:n)6wlorfG9e)vJOx{Xyoˊ-sigᖞ)CŤcqa˟rWZlڼ9ltX�2E-u;n M7x=5YE`#W{3ŭl~Gi1d{m*W+[ǮBcGl?[7?�B�^jB.,Jh!R}&q>8WOqSGAVX2Fn>G?xKhOƦ_~`?\>@|'(WP・\P^WJ/t9=<hQb:Z܌t\ocJriy=LN;E7ty֛o˘^f霊|6cqsjcJ{XK&rGu{-CA!)GǬ�DN5g]r{ 49sPzDM)6^<m_dm پ^|yyʁ%s \vq0pZNk1<0lF!ڜeLsNag=VW͟07{1I=/֩P'41r'(@k<jl4Dž%ڨW<!^-8زX s] z{`~�<vz+�|($ET7W^w54ǯj\CYe哚 u&zOXgL;"DXF#نsCG:>"M߳V^3_vq1ڴ±"$Zc_y7)bIR6.lW0$EqB[=Wn<yם=blYʏ~XAm?` &Y@q5\X6|i,!} BuЄs@tlF;0[v~|K&6)g�J-^H_Ua-.L푮|o1ocIGf`ő,ðW6b.~ٷSZ0l7W[л=mf:$;P[;1#ŵs$.j<ݪF b7ba<kJZY=Ez`~�p|ÿpߙ?/^`tZh2x9n<1A 7%p㦃hܸkbB7 wtav\oŏYr$:~CQՏL$'n߱9P~WQe/˅oY}6\6k3C9O²_oTzsٷwox ܨ#7G kx|k㗱+FM ss"b`%4o㑌y8smkVڠimֺ!8s?|2P{VglWcݿX.|Z^8rZҞ=w0|W-9oM+Gm1ؖ<ŖlyaY9'\y ϶qg-?⹴Kזr&V~5ͰRl̺z7G�Q>\"tUtsTs�cBz>8w|Q|钁OYŚTs6�CO�;92եgPl:.2Q.<=pQyqϰnPb T,uo):a~̇\78;Lp#D\2<0?9q1cO0"zs3DH<o/@yG/W~)O?Z8Uz@ )q˦0路%;11`2LC2RQsxe9uWo|:vc<|4~s49AC/ϰn1^ġmX(GE<":k[8N8FPvl!NҝYI\(ݭn+Twsn-Wsx<A9b`0őLWyWeHObt >+#May$s[r])ILGyZ<lYWtl~G_R9ԓv} $ Шw5Jx"7xxwحW8<_;5|\ԚrkrKONB{β?Ż=sˎ;vW(+VXu͎h o/y'ڤ{]Qb8Db$}rA�`̔~'bk<a z0@ֈiP0Syqv.,Dڱ1-.:a:EV_&]R9[͙!uEm̶anO7]mOv=mbSj e69{8E8hcnj,Cdrő6S>nL13N݀F ʯ~@(\~EnC.I=/<a)=sT3SdGubPs?q$叞1lԾ^\j<QXbұɏ:]L(7?5F:mt7~8 ](-׃Olt@FʋkeW~('pdJǼnު;6�Сs>pr|`|3/,:IobR%ǻQ֫ߊ30 >Grbex`IO[Ի"I/nfk~GF>zZ7_)O OgKx஽rUݓ-.Bi^yY36*Ovdոʱ2&M$[m1ے㵶_ \vWx?V|h6)�~6cb62Opǹc| zTu 6#"".rf�ǧWzŝ85g$< ~6;ᄇ{?5+ ek?۞l9N#,[n8,ŃXz~pZ^rOI=8-]JWf]uq{= ^N٧*}ʝ}M9lu+nQ6u�CP`J:B;8E5Hp eh)QNl@*h`<FYjr-igs1=p=0?�8ڞ[\_e_aܕK�Fh \&"Ċԕ+&+&ԐXɎM䀊ܨpS_1T�O|nE:r4ڷd ŧbʧ�<snia}ǰOwZ^g*~ tRHp˕cŤԳl9'~*Xo1kJ_OGmYakc90ϸrewH3 _�u~Xrbtyy=Cär8/(Q }ޞ=c6ȍ _q@�`O\_-g^t](*<lI7?gs3Z_HǞ㈯'.XU0[&ӶQpmNQ„g]X9y3oGn2o͍ ņ#;|UUn}k/do UE0ʳ5E*}=`<ʲg?QlLڲWꓻG8ݻe{%CجF'f&<)Gg@;9 ȉ>Ǥ?\񊺷_Uq sŁvYI~~hߞ\mQNYG)~ƈ7)pe'lٶa9rIbut-ڷk1lo^^;Po# K ,flNXԧkww#:׎wLѕids56dÜ[m'b,O]_OuL<.[8R1ڜ!Wod(\%?%۸zCm9i') x!0"<&Ra8dF0D5F5Gp>qD\3 (&U|(¢RD&nBnBsgX Gd5|qV4iƄ6-7eqrYHLx)&*`Wj7 2'{m0m3'a'm9!U 3rV_4/Z8IYo36{[,ur= x ?@Xg<CϹ_} 8Hals Eo:TO/_![FNPNpARr=oO`;cw@; TŹF.> n@6Kxvݵ\t; _9#^x:5b/ˊ0laWlp <g =xS3cS~9w(#z/9O-\8|Z2?S/_~<q];C>3"7LX*Ȁï~ k*)c1n 3&m^Z )XmX )jM"jX, r>:&noݝ]CcZښi/(GsdU|=qݒ)ҪfFhXɹqcQ?w)6i[C-~b߇6#8y:KDK݂uh<Zx0YX</QٱsY7Ze.%c=<sT`ġ(~h5Zkۋq1Z/cjE'\>۶(gr~q1YyLIȍC߶01cQ&+`AH �@ﵩ4[ |M1!Rcpk<!;K\x{oʮ;Ö#]uI8[50JK:6g,aoq0ڒcb#F>=]~=_0jtD ˜}u >pŖxN<GQS}ow=_ B9﫠:d4΅g!=b�4 Omq@Wf{S굀2^k[y+d8y)}p�[uNr4=^YtmLM9.7'P;qm@ƻZ=M x|_QG|n}ȣf M~yT+o 0vlw ICO/};Q~s^Dؕ .F &' bj1Y*b'L136+ȍ6GŖOq[1QN޹Zn[ě}_b9QF F#©>\cۨhZbʼnNa<ld|7]OcW"ʈqFx>Ɔ44&W,kH}y畗[ =uJ>t~By#dncJ0dgL[V~=%AI<aOvaG_$=e}wU~<~C?2*>W()Ɗ9k bhp{trz+y1{u^K 9Ԣ9~i>~^?ٚni܆e3zk|"LYPUf՚]ĩbVxݝY3>)<]{~5Rco=쀀;\p&m<'չ~`ʣ))"fa^ME[ EB*Nr\+̡NQ\ϘV(ztkSڜjp2.)aS!nF'?p0 &xw֥//¯YH$Lݔ #7^;)+n/-q#1ZY߼:Sǭكl,1&CW|kUX_/YNte{I\bNOLqz)Ks%v퇸'.;x#/ 0;FԵ[mZ<?!x_V usᏏ '�v |*Z>UL3>g/"Z!B2GH[ .+9왱jlZ?}pek]/gFNVEݎHȈ0`+`O!ɓNbEm&_CUQ犅l=,C1hK|ч~۴ʦ?EEg#YisBE'17R+Sl#1~j7R~˰^̣Yڡ69Wk,/?v%W)n2<G[F uV_?vh z�ys@{\7) q,YP/q9vj/WgyLwi%qSq_ SVq0p]oSy%tdGu 2rK<&_Ix*9%>Z)rהZ<u$_eU� }-vg9/"5=4SƸV7l'3<qBŋU 8#YR$埉-G$lj{?:Y-U眝&yQ_mf?9̂Vdϊ0)L>cp Nf󓖶8aCPٌ!�ā#/P ڥCُ*Oy!c}h6bLEq:<ٗzΣ.+}Il”G\KeoЧ0"˘bW.\% 6upb㶔m6κ_`L;*pLqݱ1BpЃt`/VVo /?G?s,|tVw#'1^^p9֜:?tI׹%¨S5%PoZL|[uIqd%0b޶;iyaky`*ۜW%Z{)(]Rqz?b?{\=}]ڀa$/tvpQAm,S70;QM,/Ư*n":sO_oc"=0wD]e g1>XLF8LBJh f_?n]`'82G&oO�k1eb1m~b7U>PSxߖ&-vS2/X, ]b`8%X'-~Ɯ ;?7˰)b _U_őp;O;זs^eMߵȈdsĢ4F(M\Ylr:8W@W5`^!*ύx#!q7J-c̡Vh O>fů}]yɫ_g`:slC^|0hy‘ڜپ.]rKWNa'QWQ?+u⡯7җIbO&n o|=ڿ)|byRz=7aR=.`K\c[g.zAEEj>T8#U6Ϫ~3 {~�p,zuy@|0 "X LL6[nkyȾPq/=?k]Äˍv~njʪ`|R 7S|!;x)<`,^BvK^Ԃ)RqX#}c|lj_ r9= n.Z['>818S,sSǖeť+t :\�C܄ Ö",�#ݶp.V248P#Pc.[NšOF/یu z| 5|S_^:d|Ψ>\E8n-dϘ|2ڱ+N/IL&]83 rT=el„`•+U>'o^"$>n)0Fe@0_m$/1u9D qŵ jG5T. LC,s̥xzc`9,x~LIޥ^a";MLoG>k;x7IW)q9yh?~�? BcK6g�g[9c$ 02.FJε̏p+Ok.L|xHrF_xFi;6GW]̡Nx~ڏy+ʋs*<Ԣ d}r4:իڍxK"K2AMZDqS(+c, 91eo./~kv_tY"EKV$%dr{>s _ٔ3cO:|ay4BXXVĕK}Y}{%.RxȲW~/|[}^y^.aszam\Zu1*<ήU@uxYV" W,rY>ӎapV8;C{�0DhX%YP \]ИT^@4g$M=7aA&L�bZ,Ӂَz<y'e}w X h^B ,3,joz aj#rJf:%3O<aFξ"Ng |[eߨ$T!fgU.|{�Ee"[13e܆ }2/U8jяsSC9/)"95=�}wy'ayl ֆ.Y3ubf gݐ 񉣗IGObyqZ?|0œ<0#V0X#6ʾo+}%Z_9߱c(�7n`AbCtPs Q\Pk­@Q0੪me*Ԍobp<86'&T T㱯x&Ԥ,dLMdydf8a=Lo=5{1&q8 g?nKxW�ϓG �~ѻn7Xt X~i9z-ֲbE {뇞1/R+&XpO!TCW]RVϱ+/)Nֵ_²?l߱Wfc7X֧h>M_ηm-<"޸^=mFL>'5F(VR?[U>f{Vѻx/ػO,+j΃,]a)|-W_O~HQۜ‘)L8=Ly{>% d[#_2&<EvaVϾ[%,ܲ|eyyό?lBÙjAͿz  B:^Ujޖd+ ?<SQ-n,l;=f9 rZ1XVd)&Lq4V.mvSՙd=;ۉ|nV[$DlAp>50,0ۏraޙЂH ɺ+8 h9r(i1l䏾M~/„#K97";Sls# T%n <\_1j#){LGPRᄞ?HmpvRgqp<kLjc;c1trJ=p|QF� HqtZ;iԹ~z-sN}<5U9ɛK'FlJ&\uIO6.C9Vî.L9.)]'>x;o}+~xM12q®7 0)N枵�9MvG8wl %b&jRDe(3<s{` JN"Kh7667VOs a^�s|7AX vx#ɽ=w$n/JuHYV,NɋvaŤ˷S WީxGb)Y1sLaH=)Lm]1yeSdt7ԍ_8W~mvS[-9cxԸq7)0WJmDFaG{{.=0ˎ GUO1lq85f%nUQιʲsn_>/AZ3t- L9t-_<aseBxہ .9>SxnO)T_u&]]EلKb?d~_}>WZlu#|y^m,Dan6~j jN-L3X#Tk-,A5֔5Ǟ�n[1܃dpWǬkO&"瓮x lbP#& ?:G΃�>,b o'<w #)M˃˿H J^j-:E8uO&TOdd<c'\$őOzi)ܒu6>W>9l&x)�㡛9w7~C-BS�f(M_*;̛W+ ?!lcW~&%"e uG=\vuClqdgyWX:hk?Ry%ShQ+3ksɦX2LmpZ\t6p)|o|\Wq5(c9Q7i@߫'??vcb1$ҹ-R^:d {Vtqg`Kg�ᔟslB;9%B;kmh4?ak0J[]UBZ%{|ߒ y[e7t1vD-z S}U.)2 cd,R hWZĪ gLxƲpgr֕nʬ4Ǣ6tC0 1q܌-ۇC`Q QL9U˧YqXHz/'زAVSnkƈ7e~Sڶ(pbqб$:QlL_\^v<m<vu0wSa?ۥm c")Vs.I5":cs=>Cs=p=DDJhyg~oE3<-ԙcazffNw~ )ᘪY.Yw~NginZ{P9sُܶhQ$TE:Si}.a- tc[O^90eZ[#…IWu񅡯)f?KZ) XdzKڸPƹ `>QE/z \fࡀDs%jԦGG1ƽnacvljj҄f[Ş^]qޖc 獷DVrY'~x*LeG 'zON]XƗaj9{d#.?~̽\.0{?c�mF 9seRcj5U`ShB8:ɰZ{`5=0טf`V| &]$j|#pǟ5sQ/g9=njͼGÎXP:n\nÇƵjy,{yR^ykӰ߿6BG.U"s[/b*>GX%[O<g.'8N8h1[EҖ'{C9ז}M>6}ǞuB,|l3 |!M߅ eVeYřvёc/IUȄ3Rd_A1l5<qb%ᩮodn_1)ʾj_b9w+e[b(~SϾ-)'g2/K|fw?+}ؘ͍nsm'^>3f<h6 vg sR2a:y 1<MV~B&NƘ ǿ86:m:[0çzOcǾLv~M6.$>Z kEIn}bFłGaG#G pI]~屽ڟ }oo^�˸-F]M{eڌ-NܼO1S7ڄmgKhd"VqիDp#g$u߸E0ܼ�9Hvk@j? &름gc$[}܎ncr;O?Bc=cvעs9c(݇Vg?Z,S˧[]!8Pe<d7̭~]x ZhaB>g{1k cʯٔ8r5.7@]t-\\o]8Ic=z@zmKg~R&on㒋m|ʿ{ @2x@"&kvênNVݽ׾جؒ}pH>;,ZpœߪKUL銉l`! ]e)%e7Sgx%EyB[}r[�f'&^7Y$7U hqk|wqmbOr=p~ zn9w!<_`1 x!ycQ{{i^m7wƕ.)Δ̹s\v'q#{>©SZ=q-`ʅM0) _! )<=+{>QA9k|NH6Z[}6loJc#|bu0$mԼpu{%bVM`&5}6=0_ 6/ij8 fXdu(4l8Y(v|u`ta gNx>N=vr9ЃI�-"szŅ8%//_٥ .*s\+xIǦ6 ~)=,,}[+ Z969da'^.? 7c2VZ7wNMھ.mzf;^cܚ=0l8 %A>VƤ|鷖ݧn:s\y!=LI[bGRUdI0IocWGq# 2"LyTld]10x>x<q}ޯ}oǍ5Zi^9.}0H=BqC<h!Y㻘rc+Y=Qzkc~p( ?98[.=ء2Cńo<!5 w PG71Կ(`$H~w~<} ↝@LE<t%9I /qVq…IWdgXSQ<t%Cva0ק1/~ٗߐ-W]k U[wߚM鼋M29buqQ>!Et6&l/x`q^5)F#j|eϋz]w,\)sڱ.{9!2c:zR>Ù*daHtK"Lm#]<=\b+ >US>མz)}[?__To9j<xp܏�љ}]6XmT*n QWb:Bn ^ Y9z3 -Cs{`] K鋀9*b>~IڌagQ;T 3;6GX"H`۟ *^r> `ei\6%3ozkC^]>(z:O\gLgp?)^j Wb��@�IDATE|RWL/h}[Z_pֹwo�:H7�oӦByQ8R[i�;Uyz=0|�r=6<L6^ :㮢?xoSċPPA^{ }pN8|b=2_T|Wґ”+cԅ+&Չ#n{JϹ o)y´=A _ybJ‘?)Was5W|w'Qs.{?3_e <G wMPc΍Eac6VNr"كYQ},T6^)L{` xni=06\C%&A2LX8Bݜ{\|=Bñc=4>i�? x973k>z!D9-(Xa}<KE/|elqm}(9ވFgF\е6xxS<-Y^+;8vX͙nj۰sլo*ǁqɹ6y\yz+~q#f {2Z5c�$Vw<\rϕm;wڧsGze]Xm^.##{:w Zl(C=cSQ))|Wxh|/_rg>er7SPϯ>w1m7gstAA]#8k;Z$\ǜsuep-sXu28xE@bbV*Bf`QXpBç}0{* c 0C�ڪԕOO}lhՉǢI6Ha&^yps'E°QsF'6Vm~ !ؒɗYrڋ^R^w ^)�AM|G;ntw}E\{D#Us!w-A\ե =~lɭn44~8qnx##�]U 4l1N.SA<( =a){u>.0mҳ)&~
Laབྷ9paSlֵ|nߝw_Oŋl>>L60%p?y(11k; DZk!ɤ+G\{`cy|S {`V|n!'ݸWv6`xAP�b"o౪'L_DylkQw}|<vF> `Uَgvªcf]18=MbJoyص7ŏ2Lbgr)k}v wYv+7a56V:%hugA}2#Ǣz=ulcA٘~ã}uc+v:<= 1͊~)ƭIs򙒊}{s1{U<M>VHa=p%s.\:/p( L7x!xr絟/}/J9hLXIv2L|s5 vJd>WUד8{FyZfTƀ ~=Uyx.o{$U&I5K};xܐ:  P%74& ,2EhIċX\`!<e>R5O-^Zi6x&|S3ĕH0C刧٧ Se89/xē 8Eb!)}}7嬋/-XZ+ E e p|۸&� "XxBVKؿ_\8m wPm&ٿ.A>m]|甌96$ȫ[_tO0p[{|G]mہ+ʋMu_Xb H]y )0 NAW!g]r m\|b?7y4 [ǹZyl7Cf - oVN*jcr[0BM2\!Ȧwbd'|}/*1�Jx<^>g YѣWom9~)bC-(ŕl15 -2&baCR2@ڈ#"K80pksW|<c?O\ak<JΫ]6c47nM7Ϗ`=ԱVz[}ӛ..,oyh)�uhq1?[cCvnQ?SD{a&tq.o*ŗp=S~9oq[?qh' ㋷Tj_ǯvJGrP'gCz>:pu_\y}|FYˌ\}N6͞cc-NJH! N5D=?D�[gpk<s=&%Zw5͆7,TUF- 8df #ƝŲI5fgAr4 "5j"Q,RP[ z{ˏeg&(v'{ۉHZ`ɜU0XO-9oæ kqta9*8oƔ[7​b02GʿLn?v,g\rEy[b,ѾlJYz9�6p<`?̌ݠH=3o`\v clBq~7h+sA듏OqiUV9Yؙ^V^W t;T[u~dF3Oqo=,ۉC {}s^[6)~OQQ[Z[s~epg^_t)Zs_|m/$x?OC'xZ Ǔ:X s2W{`K[qs8{u]@*uqދ]-1P;EF�w=׵@'xplʓwZ3em?]{"pK /swx!)+?97 6Uw.N޾sj_!W2w9\tSz.'0ze<WW܈\Z&nc9润{>Ğhf[mϲSg7hrNz|r၀lvpr m[;?D׹q  AƓ^C#˰{0(t0| sOʝc CW` Cf?=LVz וt^k_J#tqvm?á|XQks>lc3y�K7I8™H, f0H{gA\ بÜD�|aŻb@?`K#" IKBs�ݵoc}3.ۣd^0z, [î+~[G_hyWzP.zCĆ+x-~?WI~Oy8r)!I 2zcqQ`0.Y-6<�ֺP&  m1Pϵ8Uuzݴ<fknıʎO/O{TnUtұ .ŤS<`-MIQB[KGS6vqVQnblW;2O~ay²T{Q{县lymv,W+PL>Cy|/`xߐ307FxT¬`\(B'p\+PfS胭lv{`\5׻r#ѢAQ( 6/,.7,D+)K6z!=\rcyhҰt^ͭŔ"2c|UѢ\îwyi')LE;Us)ܖ _9sC9-c ʥ-f*ܼQuiZݧasn*>z hk[tLu aqNPv FqxI(mm߽۰ ؕqa/aȖ' >Ep!,a |JdR<ŗ̜>SbbתW~0q S誷ٲ/\ J-KĖ޹Oͯ<4<K:Y}?v J##=bG.M�<ZIKUq[u8N=e.s=pzkvGߨŻ F%rv7+ Pa<bQG6mZ!-_r?d/bZtI~+9f W{dCoseNK$NWl-`YbT'3ZUwWwb;ݜun\,89~+ѹ^87Z])\Y.f[�^|\[)1U3-p+ե6-djjqiR809�F_&[ksI+)/ʋ^u0֏t\-V omL}?MX_XuK<ΓyΗ^g4Um_1,6 ;UϤ20CseFpMs@=Dvi2F- tx`7FV"H:Qư!>mOx$o,w|/< .CIZi!ضM^,0-`& ґOLE[\uIs#;cz9o! }q?<_>�G,�ww;Z x5A ms>G혊aBǣF?c"P;Kry/qƩ(\]?Oh[LyZ)?/<KqzX/:/oV!CUɸVfғ˹e;?Zr!|fAe.=>fF+u!1;* @UuˈUm݀(FFչ#2ǫeNXoJCr6#5-*|C[-{=?O7"PBgA%(8|<򝯕}o7ԢS8kⴋ5vHMx?p|bQ07 \I13of8\myaϜdK $zԛ4䆍?<=J.x8Тzuېx.JtS?%TcZCx>d9 +s@yyKo9-.oW=_q)O97~zXSL0QSSaeV*w+[^Wۼno3o|<ÃpS!xGFp(rXӖq nJ:qi5) xNJveӌ=_c2[:47eVd?47jZ\ajz n݊s>1,r{}_]{Gri! ´ 9Աka+.RugkC&rGA Ba]aSlz$|KX=0bv:e}=(9{} ˮ("!+ˉOzat uptB gFEZp]7M&uqIVxeX#B1h]N{م˯XX0"G,XYobk1G. &NM8|qU_v.~ʇE2ʙ%v陛뽸)C7P5# gxfQnR~>:&t0TKRGX[Zˌ=0m8M7 3!*CY<۸@C[ ~c[(vNL}%`Sc�<u޲~}%/z-lE&tI*?z Ua) Em9ibC8yѾe<U—a;Sd1 4(O=c]l߹ u*n|1hv>(T8F _9quM{WЏ_܈q9r1clFُد..]~>K'1̯e>zq)fP\]UnwؒpUW>u>g_x0&[)-UlXSx?yGm]۲Zt_3o\i2p1*0? 񩵺۰ :CAWR>aF{`�`s,U'co^kZD7.>>-0.LƇ�񉁈HH<k)� l5WSnc/Ta.δ}Z/+v_bkJΫd0[V0ĠH<׾+\~.ð9{rcSNaHpJKmy$Ͽ-eݘ 7jVn +4n~`q^6elF[bsaC<1+['^z՛c4 IV(=n= =WR​M<Kosx\IQ=xJ(bmP&]+OK'ο(n4KgA9t_mtVh. (YnD$!Bcq(y{]SN͜{`^"ghXl �_ 3zT,. @oWl xOb3M\kv~=+}#âQ 1v_tlS 5l*Z8KGNah⡫.)NO S^ W@&oNs,Ha <E:wd�';Mp^Zmw \V7x"hoYf"md9c![t sS2BcʼnlxiøCFcmHq]|[)rXg͇Mʙ-&[+.pIe~G#bξdz6I׾~Yig6P>g2Q' s8x`|3GǨ'aa%xHRDw4G�':8s6\?Ej#`3/|\1? l~S_*Q: v'_W�ڵ1Dl{M-䅟e~ZGɘuH-/*R1oS62?ұe6pd[)w+\/{�$~o2;SD^7[jp 18@2ج>7l6E|s4\aWa9鼒اN,^¤0(!'\6d,0ِjs+3+rcap+>. )rȆNisqʏr>7>ټƿ(>'1nis``Ţ<@PoD-ءWuҽc- ߡ5(Ǭ=�.Vt= m0L,&TT@,.bxBE %luR1_> cB$#O O>^ˁqv)D"OcKb$vOd.LEj߲Mm//0&񡠓W.9*pِ% ~K/,g\5?(*c#7aq,;'l }+$<l䨛>hθr.屧1*LUa׹Amx=xYv.+.R+% '{>9mKk9r S[ɹ{-X9~ˬ'/c6umO`?8Fs7"'DOm;e8q{`~�psL*w^h`s{hΫ6_X}X$\u9.?zdCӏ<pYCib輈˜`EW=KzRq{6a=lM_^¤=08<Rz-?J8ƿ?`#b1.@=*CrVm{lXV6AkAF~cvsS!цnc>%0]ʥySQڏT^=L8J&ҧ!K%MdS[$:|7c)=NX"T[\S\|aA]G~~?(/η\Fd w,`> IjAw [=`$jv"y{ w=z;ka!@�QVt%γ/n o}x_8SzS+rۂ3eMח{s[X9P7ZMq"OuWo}pi(Ǯ9-LN|qGѕSk1t[VԎV.֋+LS?7z{=#5?<7ps Z2.pZY`NV9U803NT'15u^!5cV/uaߖ$}_�Ab%!(eӿKi2H@! @f_{߈TE˺~Aw7"ފ{ѱKf,[=8`Kl0bT\R66 ]2c"846={?ʗ_]n1|Zg;wӕtsBqcs/1!51c,Quz$Uw;G3<< y*@ aWq"Ɯ'n7'iW�d2ƞ�^0َ<W|~Z'k)esGa(.8kO W0IL}:08O6a42-c'pca<q ԙs #9aQ{cFa~�nPNzys7 -fcw1r_O'xb^{bzbUg M_[mGaت~̧J2'6$bjapdB,lѰgI<[tʕM?k}bakKI1{ 3h=<Ӌ94!FFp3cts;mQXJf@V\"] ^WV(HGfw_9Z cʛ=΍sG!Vo=vFQo|/fWl-cSgL-Lxo /uLcW1"w/ή - Pm2G΂@GWGZy-k~/w~ϗ?DeSyx9ٗK~óa:Ʈ-77ǂ/)9̥̩}b2{~FG]vc' W};%3>>|Lyۮ`de׵V]/7azn[tS `Ր}\1~kFF �8ad` {OF.eu)*nܸWhT29_7ix#OG~<GPޘzO8`ٯeѧ̱s/AًQ1XS G>l=\<mp$+15St�FoM.W7tw7wqa xt7I1`'؍0#;ZxAo.̳M?zkT 7aܶQq\:p0ƅ+S<6z0\dI?qk̯={_K/Ğ<9eJA5aIQpx!'DęّO$cj`A lg`?_UQ@$"$(pT5O!l'(TzM$.^P0N�]E wh="/sd<jߍͮ>²;c%.&7ps.2q ~Oo7w~\v>d[ MZD ]�9+! <8qޤTa/U0s'Ӿ}0X[pZj\6qr_:<?03',~x ]e]vtcNhb,+/el*ӫu]at SNŦk]OOr:n'tsEj-u;LPx2cvLpFFvdw1UK[r! %oREnU4ᅍ>ŋ�< GQbY~7n]ڜ\FA-^|uaU'$q {Wk_/.c/w?+G6ap1'Wy7~^P:7x.Sf0n-t3@4]4uUi CJD_|fgF 2z�lq5X_mznɏSt?sfؿͽsj$8˘x6!I ǯtG_?0qG:؆#M9 Uً |WL7ozwVQo]i؋}_aWz1z"q=sj-˾4ԑ8ݏ!C]g,*w[@EHn&/ؼo&/d֏` Œx$ZsO?ӉiG~-š~$Q1y=O$&_Yc\|ɗ~]=4;u&c*;0:*ǩέnt$|W/|hk=Τa=گg-L8 -G.,E<t~}ajէbN*;b#e}ĭlex)Ť o+ob?@OYs,} Ωy(<<+[X 3 0[g@kgC J32ewV( i32-px]؉V`wioEi"J(3dw_?{?U1 @vِj( IlF˼ mpr=he  zl4 gtdSxz<d~Yj|~g:q欻;S _;~ӯ~k fs-Kk!`63bZ ɜbO 晌H$<{Nsm rY*z<8bQ\5tcć1aï&?3VIvz4ݺnFwϳ>,_x3 b lؽM&B5fb)Fdd@dYl&ވ2202g`yۣXʍ['8b=D. я\af ^pE{K~ڋj[Elr2F-;.T \2oIb+N 7/<tɊx[3I i as_}ɾ\ ;Y kSW7FLK#[SLr>:\g>ɏR!%3Bbፔ7!+op608\ŧo>~_1^r\m=WC<|%3vڵ[WصKa|ϋ25YpZ D iC65$^n �ݴ pdhd{ev&^v�C FUF� n fYbd)ؽ(rہIW?W^1 OX/&X^XƮU,mҷ08Ă~1꼈Yqד)vm`y|q\|z_?0]g[Ur%y4К79XnD'Z 2lڑHHyP{0":==2yql.zd ZqLvc`L\ɒ{m ˘UbIb289\x=S\3?KdO[5O/ i nuJM4TozaAMd grh{c�9q## lo[8Ж; &)|TL71qTԸ[)L9޽קLxm.ġ T]*) s=`Xጥ>(dQX7K4nnɇaLV0&x`sĉ_-3�ooy0Mhk8@aI`>"dd?P sla.3urvO>/I`!IR6xڰ0Gvt|{:$>[^#>R䱰WMz9jQ+cnpdۅ1848ݽq#kvu+<S)b7}_tj!ۂ^R;202p$2@}$v@?Jՙ,fGMEfPd^7AW'?۟ X?!`jx}ɗ} $zx>c[V%ʍ2'Ƹ&_՘:1${v+>Ζ$.cW1#^{_N{&n \^Y BJ= sf[QgBXGiD>qW|B_g+<nˈN96~[?y]Z{G8IGc5]1t9]oqԘK1ySu'cd?qu 2θ/dNS O͛?t7BikI!e zŵs͒+h-DY$Cm>202pd20^�82z l;K#U|iy_;( <N}U݂ŋwџ;7q=V1$}&)3G\Pe<mx0dx$Q}eFO-cز$^Sylc,Ɩ g<k6駞xr_>t�U63x\&NӾv;էK:(tJbcIl6z~BpbIҲ0=ՈJ FćūܪX9C,0tva‘_ǔ s/ dz0Mw "4<v2߸%L|5ǥ$|sدpe6cӚ8#8 G" K ^4Xi1F^5 9'%Ǜ@Ǣbr'.^6ߝn^4 Ş^<a=\K<tɊ)j3#Jna#ţ1nO|*{1L_ܯt>έ[_BD'x0e[? 6y-s._h}oV< N>[srCV]N=13Oq5a4_$q2by\/Nʼn*qdO}xIcKʗ䵷޴/i}t󩶸@)"Qz=pa_¶}Ğ/3Qغ0C82>2<td`d>3`UĮBBκe$0$UIzߟ)Pt{_E 0BpZdfۇߚƫs&;va[Q1Y8[p$<q哱yBYr妊y,6ڽK[8$x+Jruڽ 7I2V=ݯ1fkEz ,M>y1֙$L& LR-K³tع9O`hۊ ^c:s|eqf~8|jquKRg5lۛ5ɯ]s4LJ}̩QQ4KO�ؑa#B Ғ!yR8CRŸ-9Yg*Li?V`9&Wo;Lo|:= ;E!dj\*'c'j$Q_-o (=1ĥU$_(6pt t~<ħ?7?u6OC:Ec`86š-2seX }emyʭ3>(6?yr˟N]|f^czcddہ_%!'nKOzň˲gq33c&=/|1G$N ӏ4,߯At']ZDŽSQ77~DWLDŽ[S-tK68o�FF P?9nd`dflE҉k8jb1xaُ~$W_镯} >n3΅.V,%d%;]3a+&q<g_Ǻx|ixo7H]ar=ꊥ!sJ?o#9^bϜ^oioMe8>c<|\L [~Ը9n>=3LW_{ůg*G1nQ.׻G,ۢG k#͌XFod`d`dp/�._=2p$2+>8UzQn t99aRߞ};XTO-lD)w{G%*"b"o~?OW_yyύU˘Hl$ég bG}Ǖak|t$c>xoKWl81ecvs_N=78JYi 2s3i]oh{Xw"_?tv?ؠ7Ũ^rvɳ禧>{QYk kX֚-ɶ< JǧɮV9p-}lS?xU>tpM2WWelWkǎҎyuT1cduy!@:3sɶcپf!G> h-kyHFʀFؓ]Ńj(\(F8*2t/3~O|p\>) Z«~GA.Y1s1iгK|ajh= [ī2sz<v0βח|[c8ĥO,齖78/>;LjjAoTC `Xm]Q _#ks:\#Klwy٦^z2T;d7g'?3u9?aY ڈi,#x[}b`_b.<j@=c,|{|<Vň~_+ R㺢R4,'hk꩟%c 2P&xôFod#̀18GZcgl.]Oi='YYdEO{a @+ZxEFT]cwsDE"EϽ g C$~֓r,k_|_cT ]?IZ&` .ð3tHSsQ|7;Sԝ9 ݔj:͇8e9DW'{[]NOd[[1~?VEgGc~'.KÈYy[]O2wk|e&:o ػ3 R|㧹.`%0uל g@@+BEqTɅ# ��@�IDAT8nȅ5= \h3'/!nzݹqmz<ݾz Iqsј GLi6j/x'rzEW-dO#.vb8ؘdň%^rXDGgI*35ӿ{�tǭZw{}[-uTbg4nzyC/m{1C7_<;87'ܜg|jzKД{\0bKÕs9�^\.]X[Ƹ=1ġULz''|CR?#?ݛ7zb+T ð^6W.,+ӷtd`d`d 2C####[$K8#u(|r(({*(K!0>o>تay/6OܯpV85ǘk`yQTn5l=Lx.Ɖꊡ ]]jp$kÖqxq^[ƈٓe>Xp'>9y�!6~Q hLi]b;,wǺ}\ };_c6/Ι \o'Sә^e]gXk[p8I\_6UߌU˱\<I|3bylx`pu6l ӟoM_y\W]LK7ntLeC l/P;j:M5QdAaVum}tFFF�oC ɀ BVs?۹l$]ō~h^DE%eQ4pdڼ�*L-|6Fsq} HaW`-ǣ:l`%{5|z<لom8q!#3/.8MGB2ēs 6vK~]nKƔ–KKKɒ8O\ g#={tWd?x*=M*Vu Ä<ɛ˿bU/䋹KlWW>&[s?Ip} ,'_}9z"!#%/xt5z7^|5,.>8砣{GF"f{ꨋrj)bB7\@}e ?|c+Edqل+Y>|ŧ9Ns9 M:[Wp0ƅ'C?K$+NŤk0O}O�)CqKUSZpM}H gމǙi,]I�/Ygdcz$vU<#>x1�.I-LxmY7qª1eXɆl}ĥIݹ3y黺]Cy\\c Y\:tdsH{1P59ˈ2/ �nְ TK ~sdqX7?_ S w{<nx?ty-l.7#v$tI_˾F7&s0×>Ζ#O78&'_.§SEo7zn�$Z,@˽ et&ֈ<e5\JmH,"N{r:',bkzDkO`ɘl2๟EZưeHqr_:s&F:zmy0uׯN?lb$Ϲѯa#lt#4-7O):xfp x(Aj$g(xĦ,Uz˦p/ e{,qLsQ ͼ|Ē60nN:&6IŦX`=I\80=L1\ V9…x?;SlEIɀpE s7viaKq<[FIP~$.89q<~z?k/5U<׵'[4zg̵&3q{_818dEы9S2#5fm_η5/s& b\y+SEk06I -N:nqHA8/�?~d2_1SgڈU8ɨ{QeuPF!~pvWoss(bQi 7`'vaϾ=1v1&#$>xp+hreS_B6θ=X0 YbZ XGSRwN[r:u.ՄyuaO񟹲[WCd|nY8\I1|#Ӌ Q1l5tq2Ksaǎї/ ӝkώGHy0^ ]]y5(`ks?cfqrd`d`dAe`�29  nI}.f܉(^*}e)n].^9> WX" <sQX1? ۉÍ0O=̏8VcSJ)^-c1 FġTl^-|qc_<8Nz>_Sl``v(o7_q[cmڇz=m0?ywR;Z^'?_7]kOcS@jb,9;x±3Rx.W1_~[g$skLl[/\cUsƷ1ZZ"=j[BZi+rq`33!$91Gwd盁c<1|3F �2x*(~E?_h$ Vy?M)�q{)?ݲw{rHA)*s1) $XŮ4<I9G}d~+{ŤkclbHQ/xs<%ؙOOg^x~𔠸$W%df]|�[<jaNl~l<f]9¶JZB+ُh?j֣buzMX~4|2Jq&;:\[9ay\qг0ڰg,4\դ4qƥ1n7ygWo;I#Jł?&rWZ@]q1"+Zrݏ:#? wK=,/�<,gbcdgٖ:ܠbvcopNi ϵxa;]j> +M?ha+_5bRv9>, }+F|c q՗ D_cjs]=7o1mX.x 䇧Gx3ρd`\ 7JI1#¯ڲ8>ݺXGzG'c2FL$C\*V'ǯW]1e04$?-lmI|͛J*kq>y7~g;| /}$B  |GFFtKzod`dHekO@~OdREbhUZpTj|惛=0ӭ˗30t [mɦF{p#6>`|O\ɧUp0|?cՄ|՘+m<5�y[(T^Ͻ!ߟx1{ܽ\na:k17'' A2#W /s3JǑ =˖.L8uLl} ~yǪ\]~կؼlnFZm pig!Y4 '# þôl### \C8|TzvVBkcVV|h6ѬX BO5]S#_{3^dw\{2'W?W8OЫ)Zƈ^|vq7c>S1tŇVM~/,= >a.pzR'gfu}%uIws"2piz,f=K_\>]ӹ?ـQlY _q3Ofp*OX}leNCϱz[8%+G~be^ =《g߽ukz>vG_޵uG{7IJ5t9a~њI2Fg ;###28#c]5KF'pp̷V'-+<fkڽ:ݼzeOAɻW⪏L}Q1Y<nWR MMf$н~= 1v5|)g%Y@;fUu[W1lcfp ͽHy/_caqݛN;?=_N=;ρu2ZC;ٍW1`5clCeL}c+,d ,3RܗN+&N%^4igj@%eKbWhjɶ k_=]1 `d`d`d/�"Y:202p P^sؙMNng~7-o ºۿneӮWH+}d K b]I:|+a5xp%׶p)<eً=/N0Fqvo9WmK KK}·2rILiv}(so9M$Nڷ?/j3/:@Gx.gj)W[σuLxa[e.H}*&][~;fOwM3 _#,5qͨfx-G{pHEfb20P䑁̀/H֧Su>/<n1兕>L ӟd 'z&�|t_4f8En5A"V8Md+ϙ9}qG%J 8[A8C.y88s^+ƛV7b j-ZR�66 νs(u;9jx׏nTq#ʡtb-kGՉ'?=k6k-U]=Lϑ5z$13G6*.[mcg^CG8sمݺ~mzyFՏ^H=~-`1WG&=46+kwd`ddWBlE?>Y3З*YZgIAw|tݷ炑)*=vsa *+o1੯&;.xylq3ķ^1_G1&/~">EӚGAt׸b26zȱ` DLS[s>9q8>4K5֓- YG,Ia3uL8Jxm[~/.cgG|qh:6m~waqΝ;oMiWOʜ#gvem6s1FKHnbܽ �/okd`d>207>LTߊ 3wJXqMDQfqN8B~|cs\((N^U_H/ 8Ssc2J. cWL<M�cG~z8i?g`DJGn"M.yց*H꽼ʚssj ?Nqg_xqRյza̓A#~đW\paY}qsm|ɌIWaa=@ }đM=LOܚOa[W }+|ȝb7jtpi!mm\3F71oo|D!GFF> \2   dKW]jx+Tl`9ZpTuwOw\ fV`o`'n.2 '?m`= _Ix SNa M̜'&bp,KC<px`` o'xRU[77r 05nS5Fmk^e-=A9vv'#9GX '8=˟KGN^gy={~e&_vqe~Ȍ9&|I[צ89Vc.1IO[/O?Y:G86C]:@[9NKkɯRw*u#e~}(gzt&5q#EBL\q+Vu @7w[VyhX4+*@}qԑKNs>+ ZLrBf; X}Uܘ Æq/$sSo?,sWӍAxgN>g}[ HYZ޽C~<Bs ~p6i.�%˺그D⹟(<sskCܼ>91ĩ~C;b} maFLOFXјOzW֥7'fۤtr\6sK'-ɷs؍ <[Px Q< G9 <z?s:Fd: 3BUVQGz{DR(Z~š ")`=Ɓǘy |{zԇ~1.RܗN [mgV`Ucd3M�i:b6G%}qWfXC> =ϖs|N4J%/>={9_ZIi&<{be }W%ĕV1[qV/$+XK8؍wߙ^?TA pvR`-G:Pa4uc td`d`d�8`md`de@E\w.{(/Poef*(#D#HϋNje=n4xuVc'O_ /d.0e8l+][VqCV:.,|+F^Fl1tꌃ=`~p2v_[OBj]K||]ii4E89(Ms ȫm΅ܷg{9sh<7es/w�||:vTw)b]COpb؃uò~<gN<tOx=XX_vY|ܸ1]K?G6Kۅt\E[A1|o&83YU-h###^'�>܎#G6Q=Ze,:FU(\3c_d|=|cy{gzυ'*E*:)E򢶾;&xj{:Ǹ={X\bg-*]܌IW}76]}é#=�gXaX,G~/SX f`<X|cmGyiI KNm|D>9b`RϾ/9Cx֨y1fðI2NK:x=NňF9'e\\p*/_a٘ז̾7{wz[߰FX   btUye#lż xx>7FFvg`CWY,,'~Et30s 卿oXmHq(^lr*Ʌ*G%Ueelqzpb_6칯vapIҲ0nF׆6{Ͼ i{p!|W73kwm 1$gVeṮ٧>=j.쌃̘j9F ^11<Oe\}mc0bWph sC'>|Ɍe]}cb#wd,ޘ7WȲ`s/Xӳ8@$bZkFFFa36##(e%#c]hfxf,o_4]׮8(D MɎ^y366-7`=^L:7Zh?x=q{^L0w<}=�dY}Qd~qcN̽]?TԽN!ҝ}U~\@7ӨWgSr/YbS):q3-Lx^1ͱt5~`=^ryðeX)[K'FNݾrez3ݾ~yl C\j:4߀#N+|}Y020202@30^�xFF;-56۫njXgXٚ̽G twtTk EgvYcJǑe=G0IqdWLm``ٿ!e.ò<X>13bҏ>= ?e/xKs̑;9d3o\*˞h$z�3~kbMܭu1y-Lxغ 4C<0aɏ@{֖1e3?d#aJʞ9}[~-~X8YA]OXxhg\-GQ98"*s`[U۾9~ `. JSs{,iNxugUťڎ.Em'21U%cg`=, >zO}kaC\_{q bn7T�<LbF|em2s[E^7-{eJh8r~|'h=hϚ`WLz7pe.9<]ŗ| UL1$3'߹ys򳗧\$ui9-9Ŧ>,LP<xq *xQj R䅜=> <ïMxs?MV6{oMor<ۭXЬlW}bnqѳFW̪gL<9AGVƖj򭛸`7GxM>3|}Y3gEg[I�IDZ[Ǹ'w%ҫ[_wU_s%n^6sdRۧ=XH 뺪>1%/q & laپg~U'.c -ēaر1ߛo m,!<x"X9˗9<̠&K020202g`�'| 72p2+<^lc0\gJj`aXJE8kV9ظ37wWӍw/Dgj+k_<쒕ŧ/ G}n \?l=0bdχL6ԛaX/ēO߄?M8yE2]m`l6N΀Usds܂%xc!\A IfL:7W_q Ԉw]q *&]ġ0l՞Ǵ[ӛbǩ\lA$i#k^`0FdI` % <rj~~t18a < Ďc`E\p2y6ޱ�Uw]ӧ�tcR,xV~2/L'Μ5`Z_ƽHmwap/c«)8ˆzkXBG˱Xy<x`vybc:7<7[~Cu~"y9䊎SX{ rw^ys<{&&?ϱxU2s<?=?uˏ(ړ-2W}+O= $ 8]cyq?F |o_6]K^'^#QRSvBfoƖ2+^@F ?q|�yx3o=eLK~KL.s_/ x߈N^q5_(83ܝ$P<6`tb(,[1v9̓qSW ֋ɻΜꇞc?6E۬#Lfc%e㠕SQj0W YW;v<Q`S~֣E쌩&3,{o5|vq\#61r-L8<W1x`Ȟ Lr-ǫ~\K6l(˦0]hJ9raZ}n;x9=l$H 엁>; 28mj!Zh'ӭKr^(J%i`)NБ=\~ī,812)[g.^L0&bM| 'ǪcIgs9fs u+N&b,,-qd- ], rjeE圄ؘ.V'W_o˾/pZŤk˾Su Lwڎx\wߞwRP\7ܐNAJ?ocX5Nɵ$h"t 5}30` Ȁ G9s]׋/ B\41/}X*;˟t܂,Vg{{Ϧs/~~&OW 8uH[T ~5^W|#z1uCM 78%~Wbe[SS-I}*䄭$W|cjel8ۈ2rNXԕ㢐8i=^N0 kJ6+Iז}ۮrmW]|U3/c!xGW/+=c̿_ɏ]##X"[mwes8O%|4!FFsd{B>~F (,[hu[fHt`wkds;ᣔVXg�fK?G5(6PpKf̝mӫ-̥hFW2coIV1=L^d L2GL|ţ_DŽ'I|[X3N?u!X r ϣA I=[gO=y25:kA^%[C>؈ö[c$$:?.(+?w<ʯyu P>P`35 (0W+l{x2`{,:) <8ȳ?~O׊l& /*5{Wvw+)d)Ls ?~_e'cnH䱷0+dcKnay>&|i= [Gʖҏ:�8~ \IWl(ܟ;ټ浶He<]~s⁈,ͫ3 }ɋNYC#D]:<|dl8UC8gqKԘG/>~wXI,Ǽsg^Z_/>*S1i9\co <3zyNd=202p3PYOV_4WF1s{sw] \`Mj.`W&F*$1qaҵUl=L4VͿrz?y\0qN>q7GU'"9ZAbY4z`'<c &yȧÌ9-+e&YaÏyeB'.s~oNLOү빵^7:d hg@`k0!GFF> ̵}8@BpU2 ӓ N3Z& F ݹ;]o慭!s�CъDy@0.:܌oS'V%d#ֆW|3ڧ�7.nYʍ j\:Ha,Ђ,3b62/b #N__N x& . ^oF̌縘OLxWLW_sw?9IZ\',(5 5B:]*PG|رDx3OFg@\w2v t) č})rAO}S՟DW-=;|sWlgΛcTtIZ2a S]�qD@˦/N8H-@e/5-?]Xq S$ҤX>8߅Yb<0C7W~}@~N}�?]{ boٱ9=v#G;z"G;я_xHNĘQɀ�[<sR9qԸLur3.G'LQ{O^t5b~al[X+$0lA߅<H^%s8X;۷p8 K*٧)<ϩ' �5D_5:s.i@QVa'}#[֬?QMCyy=cVtS ع/i̩ 1<#cqzK+b~L_=4%iMxe :>ZQEfAnK < �d6G%*z *g׬HbRd6ȿͽZzFЯ靤oatܧWw-<BŮ!fs |bpk|p$`9& YǔO"{uy^)6]cEqnݢtyP_nR< z/J 6lhZ6H;$s3OX#Ve_xwKge|:Jո[ێۯ9䱘Ӗ_S396W7߰o_Ur1~|ضW!l˓,l-iaژ㚁\PWEE=e YX.şBT;ӍwW's܊QFXpQ:.z>֛xyN]q+nE|'Ž8a_tR>L8]l|]ǽ5Gm4o<N=i]:� ZO[pb>qkXֳH1g1e[lx/s 1•#0Zö%ohlnx&`|ys֞;42g?yLod`�𰜉1�E\͝P%N¾krƙ1.4M7^ _ ۈ^` [>_E]~5zG#5lٓG˸0'^ٴ/Y1q_䩋ߋ?#L؊ p+-9�9%?<KIcnlcFo}�Ndd+^ou5jl=fVL86wqz.K+cwܞڟn]|銐f1 9G`3:[a4k3x̎GCtǟ�<D'cLed`d`;*VQjb;,peD1)pעS_ޑq޸kWS.b.<$Ũ|/?5կX{dMXݱ2Rů<0@Y}Wc7Ǖk�_5W̰:gvm)pGZϏ냜'OV<jwGQ<t1]9n3~R>cðmUqz-^\Gp7}wӝ7_=Kj/K4w> Crd`d`daxa<+cN#G <-Ŗn͢jSYƍZTqէTY]`gY^X5ݲw�VjSAm +mi-ǖ-ǯ6{p|0r|yN`₃8=Lv5Bۻ=gGʴTbչ뼛c^CyP<y�l`r:s ;NyMOqo O9A12FLac S5^5Vs{<^kԕ?̬XZ󂛱2Ыo>8### PT- r3B)B'D1N#;xHH'Edc ck)N|ɞojl<WbInj8N`n'?9<o/ީrNvsX}1)F/k,4Zw;f5GYfnƷ5ò?#e}`>S0Ob=|hJ/z+'�z=/amFHZT^ 9DCe!G`P|0t6\FXpcwVlK \0í|QnN>z7yݴ/=D<eSP1Od*QcX˸ޘaK-玹4WO;7;~N$V-_0*b/ sē+RhKWaay<:= à.H�7,x=s餝W ]+=0l9F$0+{ ~v^ドa<HS [n;z}_}=7bYp Y뻴~]62g@O!:�S8\WTe<kQ<φsR}wߜnZ^z=s3F->^1=L^9N,Ip0vIcK*^m=rθt:a7}ʙ;QMkm|N?t_ЉRG8νa HrBTca^1ڪz\i ~ CGV $0qsxvwծ۟i]5GGBs-k:FFF �1f32022@GjU \)Ǝ3]~'w Qg�wP$S؊~'~eN|0I<Fl1W05|s?cNj<SvH~ OOg{C߳?X72elEP[a~澫f=ͫ-ȟO#DBW8n3Ͽ0?sfu9mpzķaےyΘuy걬-7ƨ~+&<+dsێxykvվkrf(-+WK'a;�8?{  n'9eCm(m,)2 g*Roe櫪z]R#{XB=sj+;´bnX茧1$3N7. Bq2+RܗN\2SOMgۗ]>8?އNR+΋{9c mƚY(}5ú9LR〃ɯ\ x[l&4a6j̵ڷ->W~_=蹾7bK{ j_]pwG-g�36;'cF##Ȁ*춉z!i}oNwnߜNwU$ e W ×q1xۅc1slx*_~oaĔÈ%) q5_G<ʁZsr kgtvigŁ��@�IDATO9N>[kc=ou&ȹϾ=|xrG*>>Hl= lL2CϾ~%;WXxxpp�a-75ih## �i`##�ŞN} |K&D@a!Cݺpi:/TTsƞ̭<'c'=c2Z|ezƲe dV[ enr#c$} ޸_ub{Veֺ7wxu#q:܊ꦊI~ʻs(fS'aݫkuY`paW}֞R CW.y5AcX]28*+ԾX{mL{�k}T<ט,֧ tde`|;  ȪD$eӍ�3:|i mj*؎ۨzCW}n.ԗ~oO{shb[l.l1dze^s<-?jLj$i`K�OOHu9+e:3 NEvW ʫzD*.\:Ր݂!,{uU1Ppgx^ƒ}{X 23?.ߊUOjż[24x# o,j-%҃ 72pt20>wNƌFF@ܞoT`@M�ØoXT11ūc{~boMO<,;|)FW,u/^.b{]>z樯<xЫo?8XzULZ0ή-E'7'�woވ|.уas <Y>kQ%Xq{$U|"Ws=r(?{~:ēUGٟ C܊IW'fO,/ca#sInᙓ3.xՅx`[z#83󈓱˯ saY> +$كx8`'�6^�= (+uF`z-XQ(U!D�6M{[[oo[m.R5*mpezsSL  V}.%{X°Wzƪclɘ :^|駟o ,X2Yw~ko V=۝yY{D`ݩ8knS{k1Y1Z&?HG1zg>9ϱWu~+؟�ϴ h-}|soQw �938P|h #\] /w�g}aϜƀc˅mt~_xe!NL`xyo>X$ ^rz@ _Ctl &usz7~c\xh{:`rʥǾ6;AvɋNNYw[xp+]1*g&/s!:RxŖ!eCq*r<ẏ3|%+&X.kM\' {`z:w^|0+){]y{|�KU  p=ujl]hUXY9fՂQ0cQRg0?Gu\zw^"[;]{@)N*.lGі ;n ]6Ɔ_u,܊1n'`|#]XW</;m7-VKˈԼdakGKa=d)^̃b}g�t>9ؐzi,֔{/YrL Y[{o)$őD9Gh#F>u\9cmfoUr.⋸DdF֚y^%@ l6ŐO-<R XG+giE=ڢ Q6gʥ/^Ng٩!îJWץq]1-`nj# 9|f:O�9Zjym@@.|GB\q1 |T�{G,?T~A/rlu`Irl 2,Iv!cilkҬ.Ҕ 9{YT|ҐFXdQB7'ӗW�K�I(Le Z~Zjk3O[k`v[^A&]V (:+Il! \Nehvj U-7˲ȃ|td)deHCliMtZ&Apazz烵/K|!g{GpO�tz{#Xhlk%4|^9EA'P珿 '2m"@@T/V.RY9YFKi,ʰI*V2͘ŗCʐZJ/G&{EFڡA':BTԩCPn S)8ӫƲxE6'pl)GL~t!C9 04iH# u]Җ(/WɐF]֛u<Cr5R!oi)2<cS= �\G eu)16dz p#8kO�8ێ�]vP<0Xk$` 3:ǁZebfl@zHU=&gK ?4a|9Қ!򴋼yص4ck |摶ʁNYɀҡ(ږq6נ/heB,yvsi[ :#9g q%1*/Pw7N�>&L#1R:t[%vA'2Ե29{(g!&}e @4?Tet|/_0 S̞fLb͐RWl.:Otze2R#>p[{#p102ރ�tbC�daԖ!6 0yH._6h2v4+KnitP˃=i(Knj\ر4O{%})@#ms,a>6;%5ZSL5-?NGG'�`M2Ku!Y\ز`#4euYv--3g) :.ts2.eo">{ed|0WnIVVBר( hmvA*?#lڃ#8@5ρ(vWIT)`J|r"}6'TBESfA|.>8h=!?ڢFp M+b,?rCWbY><F6@g4ISޗ<@%[6[Ui8hEr`;z>0xoB Dg 1Mڵz 9kt#*wQ<R]"_Z&tn:=~&s-6^Rj0HaliXԶTO;# ?GX0�+ykc#@8%:T(E+g0�m̔GL-rZ[F6�r쁾H!zX=AK骔Y&RM4iuGz?gGsOؓbFjTTlgb }p%I/+ԳQ6lJKViQeQқhIr4ئ\,g7>0;@N:YD9?<8#i1#`H1Ai$ZQZ+#Al50aV=L ݁y8Z4Ⱥ24ʦ&Щ4|[9y(<e3@z!&꒟Y% qfH.lJc٩ - y?!? c_tЍzJDN*�Ce"Qɔ'8Bڇ ~@]04ʲ Qʑxu(G|YO"o'_~,q�39,NԈ[vs:!5;pD`+E9#  : '$4?*)8ut< 6XP(ՀLO9&�0'1lsFfS'tkr`ԡLΖG9K:еdF]mYE:'G:b4}]p?Pq|i7x;OU^J.+9'ڛY [s17�1e߱|ӾQSL*Ci󙲩-Glif.6 6j#[23yѣ0WrϹZRS*R9~V#8닀O�9@ J^Fdp14u$A&EDA@?(oχ+ )>~+e� ̫~Q/K=Ps4,S^J.Ս/G*Sx)y+ҐG2JGT.#OXF=ԫcaЅچeI<1-k=�pP prHf, mXGytK 2~%s3,ъw9uD 50ch1v䆑+ns#?>k8+"A} tbr@1jYyY�ō�we8q y)GKC2\_)|NlM4m9Yz]Kc9a& {\Q!>ĜrdYQDuC̡˄3yki9[ݔ/(e@OwۯؗIɰm|cڢ~r4ehk[sn�1䘫2JNrG`  -8DG`_k@:Lq$B'"J!I]APP6<z}ec/6dgG]/a]&鴉|F[iry[- <歜&8x GRbW�EϙϨ :e)T N '7xC4YYڜːm|~J !g+rճmL/PKcLY%s=cJ !X<9SGX/|`p 0|1� 9+8+4MT*$F}JEX S{JK(4y}R:r4#?WɥMi,;=KstK[dڥi[Ze,1멶dpqk D?IeR i~?elyfgpFP\k.;8q7Dzy]N>D\}q'�rΝRyadF8Cxp[D'�n|/p * 梃VQm:.ڗ� !Ҩ'sy;G2-euYVʂ X[fu^J~JcvhACLS.ca6W�#i F8X(p(ߺ.fϢݦ,Xn.b{t �;>iȧzA&'G>U6ˎ?W,Ay{N- ie#8@'�:p #P 0rS'jޱ%Fʃ�Qs)e>h(^<]`AhFy+GXtRzJcʥ4 ȳ:Ag|ĖF:hc#Xz[ڐ';2`!?vX(Bd,UV)Y(L>_^y\Oz08iyoGIYz/ ~ϟ,~ù#b**M%(g%345'Gp6�؜c5u dWDel.HHS1HMa|r.5et9Vixf䱬S=h'g9Vg zM|dR[Le yKZG`@>xfYb5Rb6$6ׄH'<dX+ׁDONf<WbuA~@T\fhH;#k7ū8ۋHmR S*)򈣌| @:s` 804Ag4Aßշ4"2nyhSxY;ViʁAY}:vTGQ,+њ/m;En*@WO6�dǓ2nal=}{_ � Ґ:i1_Mՙڐ imd攜8"�kxPJ#pE#YӌQN Z%-M['æsVR1! 1&([s6-vҐG4<X5X{4.|+]VԜ(c*~%NܢEpt�o`wҘ:7x_^Ú z s)1IKƅ!33',p#8냀>k8 UCȄ{!aR Q8K-ƕ0 sZt*Hd}S4h)I?3}D22_[99ց\YQ6n:d(G{]8 R,df5l/W{!v _`8xm`D-7qTΈnp#8O�! 8"0?1[A4+ѤY /�t|2�\)f itR bvrtb KT/ǣL8m˥ (v Q1_1z!}Ґ+�j lϠF:IMm7jUۛNr(e* dFDg3ಆs2'k6u#8]@'�p #PC�1(2xS:5iᆭrӍ�e�jiH<uHS#iLy:৴4OxuA`ڷ傇@XgsUR\2%߅d%+-QvŒƽv_^wWxk *6`MZrz!S9#A,#d0&M>#8NbN|H"_g2d~RiEyʤyS\Me[eiڲi>YzJc RA<iiR4\PByrT4L^uI9%LTR='�rt+�txoLŘiW/w,ѮUlgĥGXC|` WpVG�3TΚUqg捡 @G.*F:oep<M4K[^Jab؁4uI2")üɳu_M�%m``"xj)p-E[᳍8nP6_�\~w@R¸v#8@n[8[ 'ECDҋ^V.t2�0pDZyK(er4H]k'yھs%Li,Q1BvO@Id�Y OpRK n IXy:}9ɫ�(t\w^Ϥkl3Lgj~Qs#8�ظCvUXB[]?+ O00+9NQ8N'yԅ4|.fזf:&ɼKccmMiԡ YuHcL=<ICcnCis*tYb5yH_�W� 쉼z5COr2zFܫ][rmF }XxG` ̀ mA 0թhRKt7gWV6fJ_5CߦgYMTڣ>hXwԁun�4mXs^( 15ut)ziox)Zy:<e ]ӥ&#8+ +�V�EG` krjIO_]x%6mKiȤ'i)zMyV>OZN4ևyk)cLi6LrFlelڤ6_ß:jrM}\@T-X.W_  :#Q|֛t8ot/Nň&lirf2s,kѬ\slJcِr('4fmF.I2#ng˱z6]$�kWt"ż@7|$VT oMF'x<8q6MAҘXN,&4).<o)#8>p{#pp̆8k=4kA_OSW4`eN%Ek:['4kC @'iKkAzc1c`=(g頥tbe6Xh~DOF uQXovBjӪ$� B69 �L ܮ#8ۅ@}d]m: ޜ0x+sS D ֡$4:'<m6ѯgy(iY>HzQ<[,TyD 4(wY+dņ ]3StN_XyuG|@"Ge/,Ϗ@| `8:pJjeH,hVi:V<} #qSzA&ݔn1�vXg[9PIe@9®eQۚ"dc4,Ϝzs&G`"{`B\wU MNwG`lV#F�sZfNF@tz>:t@"i99ҬjutN4a/[=+#mհL]7HM桛<#(CB6~Swʞ3:e \&0tȦFo}x"�+�Ơ݉­5r#\'G6YvGlbO_8+cf4:FY:-&9]h1u=S.iehˢ ēykR eN;1=xMCCgt)eSp[^578z!�u<6#p[ۃs)G f%+�qܑ:uGs`yK:t8)<(kR @Gjo!OVu6-T7`JeB:H3_3ǓJ"SF`w/]X_F/_0>9A`¬3vLP%9 Br }0kyO W4-Y?&@B <8#5|kGl9-s�}(h]|#KZlRvDKU+4t-sॲ1Ǻ4KO嘷2K#X{LÉPqJrp.z;X^i::P6,eET@1NzaKPVp'a4L&Ws/ǿ/ޑX!s{2'ؑ;LAf $rcBV_Gp �Xq P:-ȉ-(*c:kW:pZ%1Kiȧ8Mtr4ԏuv<V2KҙO)C~ z3lʂA@pֿ^Ë"W'03WYY;ȓN ve!=Y<v_a�ׁ] }{^7 dB aW rt z#A@)U38"�׋[w+@�CCilg㑖:iŴA:X!rsj,<7HM桛<#(CYz 2Q1:,<bN!Z+rRˌO UB]{\d@ ݟBVeUV 5+H5X5{ew#8 @0Nv"E5] De`HE摶N)C> V75塓+dH.F>G= M.C -8_KOm0@ˁ=\ :qޡOb<znt=d^$Ǘ _T6l*8MW *@&˾(aELwe&jB1Kۀ[04GG'�1q#ttu]|L �:M0,rqJam#2Ki#2)Er-橋5m6 6!-ʠ~\ZY7 l+vNJ=>>9, ecQ7M{X߫a[jg2 ,]Fwv*Sf?$l5r]˫ +=& + 2FzL#l>mG8u0*GVur1{D�MN)9':Rr6Ai99Xgi mɇl֢b3n g�n)Zh/OpWϜ}"ipcq%==?^Ph:_cN� @z"{S- E`6tmkwѐ�]^�YA =,~@dw.o#>\.8A�θ:V$yF t iMreV uavhvRz.oem:EmJ |zDϪZ@)ʼn8p~$LOFn8'0C" gx.s]kz29*':׺m-pݓ L ȤK @&{ Sy]:"�{掀#pI&J2α oNC4I'yVqC[H9ZN:NƷ$ co`v<S ң3qq>Vɿzѕ' 8xWc@D[T@Wl0 *3CsI|+fb@& vV jAGf|v#,%SM8tt4!tXVS9=ȦPփr9xs/^ݔ�hd}x>??_uѩfX9IZ|`RR|-)+Uu-OcG`M&2I8:9[O�l; :ݩC 'ʠԔ<Ѭ eV锎|tXV̵i: OMűO%i>~y!-}TYVxG)=&dA⥠'�H| JO `y%|bG`XӨ+uF@z'5d-*Sa:d(gmi;I1 ^ٗJ~Ip؂z?t7/u]Ҋ_;ri tR:L Ƅxm kA'�V78[ V2A ny8abs)G=ʃS>)YO\}ѫL^;S3i4*M[$Y@_G\nou[j D02N Y)ЗC y窮h/X3|`Wp68AxpgC['z1S{9:ie y Գ4O#O/@r,?O4W6ᛜ3٧#B{fGܻك]7=6=fx|Ʋ!^>q=V9 JVp ^G>p#0{!#c\;?_ xN>t3^ 2\Jiy:y_5r˄{2A}c7u^7S՛j7dλ亃F["G,//�؛&6ԣ,L�j@8:W db@&=8b|`1>u P9vK?:4orꥴmck5 ^U>,OR<2Y| S}lćd'(ߢC-G MEywmޘ�{^u-^<8':1 +^T`ח<(J X1{Gl3|vG A'�@<8G2.BMW=ٔw>e.ta 5;s/>N աS+]|ܕSP;CF`c`-G2eo^^�D-@j=NNùt =H *-E'�{MB@-*.vfW{Q>ɧ\͆g*v)<ş<S:yg _z3�p.faU,zl-Jbvr.&Z�8R�69# ^!}<8ۀO�lQ6:[:�z?+-c QoɆEN]P#0�ҡa }]/8q<^mM5NaJG�deMVCsQX%g3c)^0WF:+dO|Dᑬ dɃ#1|cԛ8t@ !Q$wmzn&l7m{)#tqcOBc1,v&oBP `dEBM3B`�glM[n筩!eD&5@_>/I¾LĀ3f3#�k|pj#pp Eiz'Qdy:A~1S>Y5''NL>7,T}83Qd>rcΊ%�@檫ek1^&|G@gfu,  Gw* ~{ k;�>I{PV j"&!�t#EBk#$d,o$*%AXSq0ݗ'D=YO_`!1Czl�% ޓ%ك9Wg?{6ke"w*=LBv(ךpX]ou'0ؓ?)SAzw\Zf 6$D<M COvl:N4b|*ylc4XT&k)/]ݽs?^]Vc@.G�TV2.@>G�&0yX.v]{G KGfKhIeҜHMfM,Y)2O})ŎE|uZC&n|}cZ{wȧWˉ•=΃#"rT*?MeDp.r ;Ʉ@_h@{me:"`<z:o 78Yc;ob#)W 7'mUzp�TCW{ͦ.h֍W(#pȪ1l x{ `WzP@6;2 _<87@uҼ Gp܎~mH󑇧:4==� KS/�O$ T"8`._a��Cػ+�$OMqʵ=*B 񰗌_db veuye@^IF|:Pu#py:"0'Kax�}C7Me)'6+B['#'? ²FC/Db;W6K� h.V�$� K#$$1<%V<\p .La?Wdl } @>?<8WO�\npnڔ>uyRCnҸ){(ty2D܎K(.w5-l8^ܜ= UIFؿIf.X'&'NaX|_ccAs`>& *#psMA~*[o!blxMaqMnY:dT{6U\vcu%9{M1+:.יf#Y0e|z.<! D޾/R!.zo#=\#ZJ%ۗjOhM@�O'ZtPm{񬜧 � [ %n4vRd58Gn9ݤi&Ӆi*@>E =DpG06˹}<89| G`%$a{vuY(RgTb|."W�VuV_W8p^MT*{'eW %`;wō�=F_X>iL]K,ӎm"0kjW2! = SWȫLSL89<8O�x7pN PaIɶOF$ͫR2[`F;{7kۉ@�K;-s-*vȪuo+?=�@_Cm<w':K>ψBzZ:s G`=ש*?R2x]`iؕ]d|f=ᵸ)|ঐrGz07\XVb Ș͞>XX37]0<klu2Vnm孊�`WmE`74n#/EV]dyM", /S2nFqB@>9(1ʤƲ �s @g^\dV~K)xadj�Z'æ;ҕ5M)W+cLq]v%�YnbB9ej{: BKAՕ}~~Z |`#Wp.�l\㚉�hX^’vdau D6[J�ȍr4B!S@]acdѪ"uQ To&gl!+g5Źs_5q#`u|C4{kȞwdR?=ve#&l} G` O<K|kWX5�KyߎO�w*�ey'V0[l[\`R?۪|CCw8x �ddN.۟Q>{'Eq9A�P :@'dŕ�+Ž#Q#b V=3:$CN`瞯� ]q�H?CWR+Vh63m*GY z|L�` ,]E`/YvMS/luʵt$ %#Lܓ#l$( JH<n^kG!![E?aLe/z8Be|пP!޽əYжMCޖֶuCs,Gkt]�ptt@I;XqBh4XY9@pa~i 8I3hSO�lʑz:@#1%MeȤ4XT^,k�:,&CYtS2%TX(3=™1ZHmt -n~=y,)aN칃na:A%.d9X7|<o=yE`}˃h=yƯk}}`Wp"`Fr,|O? >'?u",0El7>_c?:xG1 il<qd*7*BM%zrF,aS)D7t�8# c?a ~ߐV`m$gT<l3 ȜؑɹdCK7[5787�uK~[;YPz l`\'/v]*)='odmB ��@�IDATcrF]b"Ne#O�aPn7K�W&-@,"<l 9wY8eY2kxPJ#G:yfjCz - ,M2oQ"7� eWx�ɃD炱B?ks ĉ1!H) pGoM?Ufh*&kSZ esS{wy&y*>p{ᎀ#Є!"O.ЍB-+>4Wk,"W�\.<}y,r¯qff%�4N pdl 抝v 94Z$rYe|+iG,녀O�8 `^Y-t�iVJt|CwrtտHkco �Mu"Wѻ՗58!�w̼Ǝ#`A[3$Q)Ќ&!?4e@<{rMa=ظ(|-"mʤ oөӀ硻n6dq\'pq΄4PcIt#8O�lʑz:@@9HH-E/PcʕJ!fߴ6YϦ#' iidbr6.Zm6t aW�jce?|]=6^yfl/Kl-q#8낀O�ˑz8BV�0!-x/�SK>}L�̩|K~X�wB+jo"޼RS\c4ɳs�}@�Z[\޵zS*Gh|`W&^xMh8~5-('*nh{ko4 %q$s:ۼMѭ):N[jM^ya'*%]:5xomR\V|?DGp�fݼ#\0}M5 vt%iDzO>'�*:39? ӳogoB#'זdsmH}YR{9I+/ˌ:#8zV�J?6~e4S[#8O�l;ۆ�GgEuVRLv%?&/[cl[1 "�{i#dӁI[gWSNы@kt7SV�XԊxm_빨McPFi:#q2#mrc+7>Wz`"Om@@GaGvO _�0�FӸE0, `|=Eʤ:ll/:4MiI +'QF@w :Vow7^MvVTFVN.%bI8M"�78B+bQM:夂d7�,΃_T\y �>Ҋi<M5$՝КdR[)[ 1̀bm>�} |"}st&{Ͷ5h< ieҸTyGpn�=%G A�1d7'`NӘ(w? oٮ!�qIcdB:M.dw]J @,m8 `t8 ;w+9ߌt]U0k2"hN{;@{pp~*%}!n_8 �%R:̛Q]y)u,v  lL[  :�O \J0I3AV霱V7+\/F9 �޷=�r3cǥ.e,M$M8p,f|fɞ=|+c^o+s8a[u~>_AVp|u%i1:apﵰ; y0pϋ �8kjr4itѡ{EוA[@LۿTѣ0W�0_Y|[aTycv/9XnL,Li+0g:\ϧS6ݪO�d GG�Ru{p9X%:{;"0=?bJQfBNҞ!MX+�ru }+^}UᦩvJX&JV.N*4GM- 5:(/4 F8׏]p3XyQt1j*h #l}d $�frpˠkK:^V򛆇̧1a,MƖ! ÷1W<Nl4=v=�u>p(,C!-5\XFISHL"tLpQZ:9rlN^_UDKWS2&I$RR\7[ U:6\Jp��737 Nuͯr!qm)`Z-QcG+dNi+ v8;d!2t$y ּ$8a`bu(i=}�x60y�ъ}*mG/3**o1̚܈- !0ɘIf+u8oI =u@4cKKӥpHc6l!`;L'I'9�ht5,XmQ8aؕ=qG| 6ng5>BQxUqeBp˳-Cv{~8z󝀘lD#�<񏲤ۼG cw]>p]^nl.ע|λOBȮb`|AȬLѝO=>,[Os4d6me%KYNLM�8 u?_OrwfjKHy$<byxXzŜ8"� j �֬Ҏ@zrT&ꭤ$<s_  Q6&axο$Lo7Cɱ>\[ :U:I4/et/REuS B'(i jJVH80�}!:xKG2B[IңFBʣǎ#qA`g}5�vC8 Mb+h{O}0A$_02c^{k;4qG:ɜZ-oïFS[�~|M 0>9/L;NHV�`ח<h_;*پIo؏氡P;`$,794z^FnX|0 <5WpSX%XgzyeXt*)$L?Ÿ{ߏ8 0 ]w5�D{sƔ')znQq9l,IJ9Ǔ0,&*`o?s՟1l  MCҐ/K'GXo|�.kT1#p̭3,y:eɁ[5]PUl*Oyged`$O&+> ( O/뵕{ ^>�2P9g@:IWI4jf '0ghY* 8ΝQ6R 3]ձ{w'w5y =yKoiIߪs( ڵBMeاIr#W� 5:&jQݼ*U#"M2G%ߊ'L(LO_ѓ/a"{12{�6�$�3Ho v8"恓YTJ˧?C9{\^c\/WZ!Pc0dicGh@�-}-�Hw PEL0'8ʯh:&O^ѫ;O~^FM|oEi:8qHt-ͦs2L6-4`s/�*^ c9<Gϟ2qؗZ1 T_z$Mۏ,dd HdMYwGF ]!X�]$xZPD_dK&ħ/P6z&Oe#0> JJO,rO6G6ĹÉl7|l4Oi V$ nҍP73/Rwڤ#MzSyX k>�99u Ύnxλ_h֏g$k~#\LBk} H}Ƒ뿎v#>v^Ֆ'[zXS_?TvȎL�LeScL|+C<U}f* }r<[]ϧ.@5QW-J5Et`r|:d叇#p6:^k|QB:X͞{p9$8sya>p#0R`\ /aSy_l4,Qg!͕� 2_/ऀެ}y/-�z<c+�0P%,Wv*,2=QA(uȪrsY$SG}ކ6w4^}tAW]Яڼ+9#py|]12 }"yeݐ#Fdj/Y?> dxOͥ|UHfH5v|7a^|.n$� Mt-_0 Qp&n+QX?@S-6 $QcؓOzz6{{z?ɾ-:W=M$�|E�0y@!͓X߈] d#G]r׻ۭQwK=aQ 8.r#E0hL#Ob}ҏ%?-é'ZqyABFHZc{˨CF]G`$NX&pGY 4$S�LOP+|EoO@zh_ VOs9@? oյݢ�>VQ.ii!1QcVK;�.2.V�qt>n&^#pTïz9\gX8w<diH99D@ROt |ZrI|(9~֤%:=w540!;O5!p[ lkD>~>ŴB^FfV?utlzZ�ku}`~3dktH*7�GZRNOd>|yw4*w/Dީ4T:~$ܽ/ݗG8:65>yYk+8O)yJt) �Q[*^V>ޥ܉\?F}2X? [:I=t=vCȔO^J,yV/g|#+u6 +�x#٦v{[egT6aa7DOegY+οG+4-?єD'>8N y}a/KF|F:b( n 깈TU6tI(::;|$j*A7�vx=רR_m+0-ͦ~NLNi#\^k pÎz!�/\iNq?*QYzW$5&̥ON|M;ap7&O$D=f)^W4&N)ygSo"&X(e ANx_ }Ə~_'qyu:%]#T9tr4Yl-C E�Wcƹ^_XO3hYyU"07&K K}?L&1D0JPv1+t<GЧ1YA)o}7  WzU5F :\Xvqpbi& �= lX=�򧟈3|OvP^Oϐ4#(G}2uz=̏a;h�ku }L�-5WBn8W/aGaD<T,'?_⒦bMUND(8YzoQ;+�yє0oDљ3*\lSwp.| kO?;q%SeHG|`nF8WĹǦ~SY?zY}.5bGXt O qU:& Lt�Joۿw!a I=&^<%c0f\*KoJ:"`q b*kH fp @`o dFG>e>*G' 1hL6lրGh+[v}xp:�z<>Äwf~Ṍe'V&`0LRTniOH6_ |? v�x3!0~\2U c\j{"14r C֞azEmT^ƦbAfif(YȑO5|Qdlve"3=xFϞu}|>'6>gHCqk]Xb):D@,r66Ld"vqAo&?۲HLFT;A@wE4�i[`9}£|e raaKʦ#y7;iů0S>*a2&Y3RɀCVK(^ϝD<l 2:zKmpqk<齧(YZ.oiH/ L&!~-Mj@�ktPu EYyU`x,˻?,/3csr AiLo=QwaG!a{# O8B3(@/ rC& F$EUTݘpQZ0hEc֎b뚞2?aZj'@0Z:~t"~yJhwG]_9@!Պ?=^> 3yATi|*7XN\Cm0hScŘЪՑN[N8V]E@HV�`�ҙDtL�Ml Yxl`.xy=iA'A+R�K_a£ G}p_^ƾy2I/QR[}QiR{]p YnMe8A�a6S??Qvtڄ4`|NEn<AQ@5-?wK?x"oy%O'/ٱ}8޷{ (Mix$3_ɐS=}_~2Ya{*?� 8BD8r<eJvmZ=O;#pu#}]PnK:7dM4p˟u"VÌ},YOFLݽn苘֩$AV(_߿{7ܑEw;wD[Z.G/t)WrLU]F^5 T*m}SMg|Y>0 /?g9Ux{tm4 1\Bʒ].8C'�&Y5We٫0p?1>Q rr.KOgZc!Nh^!<? o#]Q8^ACo~.a�GO=en珁Ҙf !M'r&.<_}>y÷ ojAF䘎|@>c|f[G)|fnu V7Sg/PdZ*~O}ˀX2]zқ;$EǽR#A& ?)Ӥb@hܗm ҉N)+�!D#IgR}Liy*+s40@;4r<57&D%2+ ^y4a_ɏö p?0 zAyO xN<U[Tھ"snpJX<q[L&^x: yoVg 9r /zOT84jB ޗoA$V 0+ΤO?YAҹLBA-vs<VCdt/d @`px~7½|OkC[8CȺ%_ԋ2®%�`e"G|fpnU�( 9׃�ɓ/ßˮg j(:Tj1!"_L0#�BxGm@_˗a6^aSh>2͘y뚔\ -Q"9BҐJ)9xk�|DU_(hvy/(0(%!z\c@\-8� �"1$A [T}0~E]nC&Y@GViI%J+#6b(d?$[~0~u$nX9�t8 <<c՗S9~fu=}[=m_,4(i?-yb;�^P4i#|gSAU�gӔ^G5ϬW]~#n[fLOI?~Щ:6i9FC*y3�ُiXrAP>b4 YsWCQiyK_Tҫ]A29N:$g ەJ(N8Q姤:�Ox[wAx/Ć^`6FKLUJھHxmqnawR}cb W�aTȫm0}2>0 ?i9jo3HIeԵQQ [+V( E(V0vwe�ea"~ dAXC7Yz9\S'? 9L;OLq H#"miHB2�hv<8#pYv\ 7��D7q'' !s} e̫ojD.'qQұb^1H?6l AM?k_B9(XѦl!c|r9-~KK!bg,6F:rD W$?N#9<lnڟkmxb~Q0J]dVpAGks(bEd{ʚ̫ƣ09~goZۦfeG<T:C-1ԲJ #1%x/7[NM 5Ϭ&XMN8'53}Q;/?m0.tCKYxnQb(dy͂ yȑδ}+ NH2YeL) Gp � i�iķyɲcyFz1HCUi^ѪBO9i<|ρXGo(|ao?M.O^̵X}J$BKiY<zvx�+0$e^,hZ~,X͏_?G? [@g7wz{AZ)/ [^۶ NڥG<>py ´6Jnk Xv~*?*dp/9@_eG"_g\ebAJ׸h(#/]ax?D>my^kuNgiȇ!+4㔏:#,k''&gį~%OUV=Uv >+z(^/+OKeG(G1i&ݔDG,>pYP�n WXl'?R_G+<'IDP1A̧S~/%^;w~&PG[>WabB4?u"S2G* ma4cM0($+Q˟k�m~xG6 PT?@|6 ;)W^aBˉ8![# %jZk# |l,]h$+&VL!<8*{Ћj1ȠY:h'1"}=l!ﱼ PKx(ϤC y'( ʹ0*H_cNXdʼ\ O\ |o{ z01k\L#F\_'D4lypG2rK" O8.iշ .cq+I dm ?1F5-?%H�|_䣣~a#{?З?d!2(A>=Ff< Cd\.~!iK*C,iD�y͗|*hz:t}�nhOZ<s [?pѺ~6.X[N Ҡ; <e ɓ#F'�ZCuCvyCEz1p_/O5M;xK đ[`Q蒁iqR@bI⍿ѽ p3$5~cASKr7b&Y`!Odqb^yАؖI c*_F9pVۂtO/n!zÉ>CP)OfG=dZ)R$mw6tT5 5:Qż*냀_<Ʉ3s"0tC>9IGtU&K0 ,[u/'?^;2<l!'w,e}p$"7Cӌ봊Z \`C,됷m!d =Ә+9EZrx^׶hXYזᾁ6.XիfQRi䫽^6P03$Í62sJNpn\e,-LĔA`5[".b_O b:>oO1o,+5Ƿ4|>Bz9*zңl5؊ Q[uD9N4 7R?#߃�6�ƀ@:BcA*_/ , eD'#JL1ګHHP-{bݻo~4To >e4+?$3. /UMABi k.FfN #u<fPe*UO~Ə> ӓ&囩D|)Bh!Q AiBw2<'K(~_?mWgKm0ƹDʁEv||5zKieta*)15SY*1K}�NOɯ~O)On}Y$.n/="CPMɧVn.O&Gf|^ż,�Xee00~8jsz8 &IRܗI@Fʔ$�l"c|YG,2q!$=l!? MP؞n:=k[:sB@a[k4))fyeDY]u/UEW`CoA"GRx?L&(m.EX Ie1鹸LNi#Uȫr+L_,T˙R[貁<(FJ>򧑌,}̏YWZi3ڂ=˻;[;Փf>=DKo􋼥 9l6EXY>ǘ�DMS:#y ?׊ᩭC{um;5>4?H34u#D/ y&h8cð9'8#@ <3L�E_ܞGߧ_Ṍ"8Z6N[=%n/@I[(<-6uWB:ҋP_aCOnXAsU5` 7 |M@]+ydZF*5{J؂6M:JliD$-H>z2=Ç-_ǡ}F=H_uH*t+{U$6* G#\+>pf�X NHh$_6( eF"C4āRJ�PL5? L` J?p;GhFl2Q Z0FF�IY`*1I1AeZH<2eMIL>}Us/OnB۲{tRJǽJP IĴx*e 2+Ty-86"�ktԱ@t}֨R^A@p'O_>|b'/ eY/UYptu@XOJ:08/#~ =l+,ש8~ty>]!e{N%4E奂.NӸ6P 2E��?- g[p/X)6%TILY J1]q)Y"SiXn=F9GF|`�Xq]Ult&{&,'kE@%V 2r8�q)yŧԭI2-W(~/s)۔G/9LGl y$%=دw1 Բ-Zhǃ2kb1R4:Ot|_YYv]?_<?]-&[27cۗDm4=vG*UyI[%\gu? _rE![6@Q ,H:)S..<-.L oAe;gJ>IL8{s7>"i� dM^myCNU`,vCܧ"4qbȗtILë? xb/޻>0sG BQq[̧1Z~ɳĆ4eNvnxy׼q f39#p)p'K'aSRfoBy0MRAi<FCy<UOV&AE�KqP?p 9ێDa$X"3:ETm:OEyEқ[Yق ,Ϣ#?7$<E<l7}b{k Wߏ=ɥi1$y;,L"+WcL#IGZ@8Zt.w5!d2͏HT7{}KMO^qlB67=# m19I"@FbVt]8ѱ0LiEaq`5 {oK)T睽驳(? TҔEZ i NLv%TxnE8baf:=(߭rdV!U�O,`{`Co_= 21z 3Ęlʑv,ӎ#\{\!y[Naq|ϟw۪ 6VU<M鰛"-jV/>A'?]rLVO)tҿc87a8?sR=z|OH*Eae*yƢfWdd5;EGyd1ʞ',~S{Z;GyD{64RH�]&="/'qalF&DG<>F85:$Æ'lr[Y E=0ϋT,OCE*z$f::@*p,䠍4Qa̲w"-G(onxpu2@[ΪQr%?{u݉ y9A"@$HH %R"EDi^V,{]*\rd]îr9D10@0�H ߛ;no̽39ӷN"Ќyр2БF^_|PoXe2Fg.S?UI%m˚;S;T~2S@I 55+wu'd&/ʎ"r"6Ecѣd~x\4:; 5mmem4ev_=DgmB Bϓ` Z';5YrJZ| ȃ,6 OĔ:!6fXV]G .ف MyN6qBFLFGT"ʫ_ _*ehrh;rەl쭭3{hm+꠮{MT |}A~ݑێRrwׁ%#e~7%TNu4JF27.uTFy%A:dKʐQZ pLVV%s/ĎQϮ:L+' 4],DTMBp'F"Ɛ4sS<U~9O~$k-% ׽v} 4=MrH+1l"Dp)g:utP%%*ev>n"롭*Ҍ/]qoWsgt`tI<(Ÿ ]+|_uwԇꕷÿڙܺSv<mZ6oW!Vv?՝Qhk|Wq<剩ɒmvDW *t'ʕ7c|bmHt�!ㄐE[9#gOQ?% hWn?x@+m{oj Jv:Ĝ4оjmEv, U"P"\#'ZW]]ya?sJ?_f/[E'*iC+AW8,pɰҔ;L`? �Pڻ\%ַ=*oJ'M}za^`8<& 4\KMI"clBțN<;:6Q`ތ~oQ.+:Wx1X3TUI ]FAT\BOT>gQFiߍM,]\~l "p nd Οcd>Wҿ&p �'+AEyLWFSuX86|BMOګoRe0_\3:y׮CaӰ 3#\ [\$kSE (0Z=Ds{_-at-YE.M+kMtjڢ+NOxX6dmbrK*(X(�=u`4f=ڦ)KvStWNX/ʝKNI%a2]y>oG]Qg]Vhe# \P%|CFoxjӦ,#`)7|TҌ"Gtkbhr.6xM+px^=JJ^" 6m~C2~C~X%`k*ypǪ%WJJJ&DL�L 3W~,��@�IDAT)9D�*ȉ2e}jXhfGj%Y O'P<uTCBgxerLy2bAe˽o5IY zgΉo=sLi lƁhhPM`` Xɣ 4y:cXC}Ry9z Zեg~eo}XvfX&v*_J�c\ ۨ †.NG:bn1oYDO+lN's20A+88.\y-~9yL.>iZ.ϲLsa|~iRmJ%є0OF̞(d~yI+>g^\xe;1)Á~PPp1E yW VE"?101:>�q9' 0[xGμyISW/XvfMBJ͗3iښZWh˼= &.:Lޢ EEӜ<+ Q"0g@�]Q=їSri+2/m(2s08M0I4qv ܸEvo{ )D#_Ju<q@ *CwpXb4<˃-](w]ZF1&Y*gS5ZĂ=qcz<'n@W|#7~#j3>iT=C;N2�%^8lk]bbGzUƐ6%/(X`۷t2r=]ezKdX_7z_pok,Ah +e``I|W\WTU Q}d=oo}$eU"^8''m:6i(4ei2Q{Xġ{S>Ydwz*kPϾp-^懤mi1cf-[�ႄ`[h(BYlltI>Up3KJpm!Kx9׾KK-MG:6"ޟiχK7tu@ 32x0J8%=by! Gl%&PlKYJ1SD~oq,ZW4N+RvE8IO(t#0y+-)/NQm0>$ޔJNЗJuCD6\yRpg~1C5en ,m5(+t@@@ Ni{G�깒;h)Fu\_~^Ə _iҺ Ԛ $Ӑ+Nޙw`&l7iyM[eOl3J|D׿lnSu+�d9q`@:$[*6yK>pPO+ƕ9;7MKleZ s|TZgĭ*km}�sZ).l56c Ib_"P""vo mCqڈR;{J_}o\5ůH*pLWr?ж$y�zU8agɧarrC?^oT6FK*E`a93Zq:+1=E=m~:e-tъUaG/$z;RN lѵN�KCUR@-;_x=IZoӪ6Zn5r ړvJx8#K5qP%%+-vp6�-f_(#_/ WRiSl{�4 t|2a>T 3MŽ S2I9uȑ!_P+UZǧP^A]R~ z<M }XOm#( 1LNNqׇwPm4 ́!%/E}rӀPv`ȬL&nۤMu b9fHGL״+|@҉@lV/-\jzk1ѣҫؙSstSUQNod\ 2|y"@HjSFKڛܾK|d`pFNO}Yj;z8CA!l(;bIǫn[8t@4WࠞiBX&y&O 2#ӊIa9XN%/`֮]쎓܆%�Fʡm<X☛2nUXH["((X`?hIlș;cc TmIs 'h8ғFu+c(*SA1<)c'tBGx%?+A]7.m6au]*CW]M)D`BN>_~ U,TY< 4D&7 se:QDz0MMDC#+k|r>([[& 4Hy r0FMu&M:$I*lDET,4;K7,m;�X6?k&)W_[_,6,R4im[X"Lita=;,!@ 38+%O9h&o`z٠oD`B|32w0@ϥXǁO_& " )#0YXpL,  9e1J#pwɾ?Aw%/?d`Fdm;z[&U& 9K 4yǛ<1YNyNE^"iOxJR+_('YDzML/ezMac L'YC6hGrvpuev;$d= /OVkc1t\?Kw( x䠜|Z7>s >XWi" >+LªW 5pP[# jvr p9֚%mO�~)xl~B]쿔 (}V/eށKkk3aٰHze]"0QNOӰ,�ۿ_N#6;f,Qzs6v\m1F㝣} yn( D/8ޙl f||Otkd鿒J:E?ichs]j7SM�zn(p֊TH֧isÉkg;YXyok٤;>ls1=0 4\W5>ȡG: D-nnL DD#P&�zh�v跙O~ܹ޸c 8Q=tْvAiAa�{W~#-nzߒW^e]"q\g#[`Ѻ C}Sd 3<�JGPEW_O=&2�QK2б9O ]I%"Jk�Ѿy{Nz uy<u̡ Qߤ30Rh¢@JJz-eH?-M Y} 2WfVZ6}�RCe#BrSwW"_O>q\WD&7n-ozl *DcI>~T/򒌧U]cN(B_yY/N $!sߠD\'tc(*-DsvA]U[6H�=mڤyšM\ @kD]μZ"˜nt`JJ&lR #zx(c9ȑ2e;UֈvS\':98GPyZ(&^츸C=|~8rL(w'~W�,Ǽ$j8]YzdLFYt|2Pg7+*NkEb'dCH3' )\%ɮ,CZN&0iiMrAٚ Ӥ30"'TSfO�mK�{oN..-;�tN獎U?}kS5ŕu2Yӡܮׅ>/v/Mߑ_I%E_3?}Fh8iƅv.SdBֱyڑ/D31܏(fCotĎoZ v/S}KjXv{J~Nh_dqW-ZR[ti4l0M:k)OTy [+7%c{[¶�Xa?;e2z~뒏:^^*((UyD2 ʩ!yt?|Qλ{ھs^}T"iE>A 8pr6zqhwpy%5[镶s/EW�9L36{9*{?D=zbYk!믾N1R@N"ͭU1NCM6/謃qHEQCMqk޴ma@@OE}ڨ1ZdF"nmU9{2~N?7&reŦl[yleANx(<[:3&^�y.OW܃|m?&o]i ,sO=Gl�MW9F!)pbYZ?B6C2A%LnY~FzS%]5y/;ұ#pUR@=zl`PU;Gmm=y6duA x"\3OmEtE@Gy/0u�4/oȰ?,#^ӗpeMڎKqNu{ ;+S0h$vj,@C,zL]$)DO|Z.^H2̇AiH6X#"A|Ёl6m2 f`s$πBi:ŝr䤹(@.41eȖDc<(WWdMCbm#xl3 +A߶ȽP.ҙXp\MdyEB"KЦMI�J Tu?zЊ%jUnՇ>a2.@&tU8{Ƀz1\%nSϪ]Wև~I6I%L4c/*x´\W}BAhdņ2 Hr*kY,,)PL.X%@gt`HZHeBNѐh]Z}m|aJZ"004$t}@]qUh$:bD xN '>A i0/yQD?]N|yD�Ar鳤�A=9+{3mΟO"#Guv,aS7:c@2ߠY@cCm ?u}\mF247(Td;5]ɖGv_3XI%F`L~'d!` b?5(Cca솸>`P'AMo'Ϝ[2%!Wu.wo?|@}+.()"0�~UVoZj7D{6 U؆#/5t̡X萢,Үz JJz3eH>Af\(9-s6r -iN2 06W wBM1Xz8̿tC!v`w7~"_CTRxQ_ZaDNW 8D,A&OꮲwU24~5 Đ뉱Qb,$h=ѿ/pl*֭}Lz֦7I|Jf= 7wBR%ĻO0ʛ2*y@�w_>=v)"~cUQ}>C̥kfl|';1չ,S f4î+60O>xnOkʎ_l}{eplFI%SF`\'H?-9 y$er<уF'0mlL(�Q,+듂<X}t0^闞cOK/L\T"0E­ٲUyw<][y4ؖn&|"@E&o=�}(HGL'tU%%s[2Ήd~9;WFOѫzuRkCUUUq�ˎM<9S\Ձɳ >>ɀEWR[ʀ+nm[w wa]R@'J5jxԘQ,pMi9uN;CeuNB2\P?K**Z%W<K8�^XگN=1Q`m.eȑZᨣ>c Vfx%ii:s3hRǜ{oo &-eaAӂy1D,ԍ)}@)@|N k2gC$$: Ǖ${F6Qw˪7eU"0EpЙ,<Ἁj-afkeBFוlӠB@Sǎ@u} P7pITHЍ)7^R ϑ)^l%)#-7&6n|LqZΣä:jI͋2^AV]]d}`VT'BffhI9qE"0'N4Ѓ&?zpV&;�X ΜуvtAw[~-B.A\#m3+@P@le } +é/*Q|%?!S!}:a{eͮ+QN=Բ*x<>ٌ= ,H HfM\'yG7ܗ`"{ub\eUΝ+w %uիeÕW\c:><e{ l8Qx̯ι/,#A2 HTLlY%%G\9o�[!x}kԎ./K*P@Pf]M�oW2G; |s+j KlA_5_-;T"m{_~30 W9(3O~V0Q뾰=B0!uˬ 3t6S @VҴIi:e^:mUu[_smgYi{t7wԔ:LjJ~�^�i"9_d5BE1h?]ۂ/(]~K 3.4>6*'ȡdI-3i&I@hHɉU}~ \W*.m{ mwɎG? CW]g�PQI%]G�W}6ΖqSE5=A {E5m]̳0 >F@OLh.Ēgg�>)chK*F8Iɞ>l9`F4w=oUh2g0[E9_Mb䤳 b&6]-�ΙŹ6ioJK`,v�bo\cz]+9avs0)$$5:SozeE2]9t tƧHYGAi~ n-C_SN_>~TN?(.^?Ȑ\WM <BxXl3xꐳ#ߣi2䄶`?]t0:`K*:}v'xl.kwY,r_ЬO4dMt,wˣӖ놎 fiE�WrgϥƶkO>.ylnmZƁV\l#~'y*Xx4z8�m0 uNV j,C*;C_?uTRt#`- A[#lԘ[Ib]Ekը<Ӑv*YDZ.)*ҤAPz:g"j$ƢG`pz}[{s[ Oh׭IH$GL tx!G\WȣܔazJ63q"ۯ0 @_.—?ΟmKuVV\EiLؓFcCF!Ox�dG/LIf 6`۰e{>(oZbK^"u^M=O˫Q@NOLigK6>]$tF BUӚy{+m*c 2$(%2AG/|R.=bT"0 {@nʦom*΀MԧvH[3v#}b<$, sTޠ@o <ؿ衭)h سcv_;>×:WN?'ZVu΄IHšqe*}(�Jy:~c'ް<\7 ZYv^>/D`LrOȥ}{ 86d;)6hAG&n*yE|VRP[JfQb)N}rO�R K6 ^#ߓmwc+e{\ ~4 :aE\NbsFf+e.u83 .S �\ Ξ}Qj*dq9c \A϶ ;d>2<_OĥA> +۲;e;Mֿe!-D�疋ȑ|^j\Tp t r.&|@g DE֔ P.h_հ"EߴZPϼ 9G\:˃uf4qE}|!+<M*t"0fyC204$ϫ?cVߴar ue1$*OzKϦp#AKCn;] W8H7uwY6dS%%EL�tA]W ͪ}y?<U7n8a YOʀ%)R􄆌H#џoG� 49{dw[a0xş{+CG:2^Wg0-9MX dW6E ntRsh1]nuKFq 8)˓#g_yYN=غ]t WRL"пzx}rۧ_T҆U m2'o萠OU*~C1f+x P6yL#.Ljal:ÆtK1qY%+>8#�#[Զ1҉dk3춟2Gn~=0˄^g+TG2C*y![\?IKregէL+{t"\);;GMyf'/J;Z;{9k#yul@d\@sJ(GEgg_]e:)[]QMSrBO\/ѣR3@G+?W^W$4eGi?%O:І(O&Uબ u76@] ] l#P;nh!#G�jnՁ?v9gp:ꭡ"uYnFU`aW"Ss^]_ȑwT^uU� z=_՗]# >eTRl"0v颜w ?#5lpe+-AsYs=QuunlSj") ;ⓂZ1z-FCF<2;J*Eeo{Xn,믾$�@? j,Hv@sk5UH9@%ȔCĻ&&;Zw�,V;v3h,}+wyq;WWhajL8Vn -k%ud5Io~skā3^!3ȜvrG|�'W\+?= }e4h%tTOhk^¦E0^Fs`"KgUÆ35S< )Ē�vhU?.N#Thg@Fq'.�CY,:-o;? (n m-FyZߐA%N 6A< $ɛL-Mnƾ`JVb@�g~}w^?_q}%i70-UB֒y�1΍hWx[ 6j?v v"ecSduȞ^i#KV"0O<\ f(X4 j̐3E2>sIiIN}6Sśz;[zv*24X5Ia+'_xN|)A.D`I]o|G&h=W[Jf}m=:kӃIq|oK>ɕSTA!.b&&F<4y` fz̙3䅾C$mF/3cG^g{`vMgGƖ[K?94?2o0?&4!+#A;  Xۢ+ Ұ(WRvd-wEfQ}ѯ}!'C9~tˈ3YZ!:èԹB,p?{VwPAױ~@m8:m㟐K'ʒ0lߩ/O p͵Zs{&m>&A#!% ~�#G"Ƶc޵GBrjkh[Ŝ؜b(�^5@@եXS^?%cQ<뿲Ϥ@F{Ԛu yY#Fn gW�:#E΃|eǭ̄]ߪU[?or+iӫǿu./J0Ra ȍyt ] >w+N"LwrO e1zA|R8.U;rDŋpQR#Imw%,[[8xGI�yQtʿ ч@ | /E<}�O$,d1E{gg6>D07qK/e`.9K_xRafda}2zUWBb#lxmШ1dlF֘*CG4Đ#a9gg=cCK[O{>~jlL9&zWG*NvsVnO\V'J*lE}/L)06ҵ GηCD r6j . ")0E~Dzv(c:C.�cdV.-j .y "Ч�Xg^v魂}GB}� نWrs"�|?d~BPG(emMtHMyw􁼤ʼn@`q>Yl&E@v#Prm{∷ XVl HOxi6RO#g#u*DILcr6τ {oʷXZ'6l-<"W%7qK^"0'g}Krik6&YCnڀ,鉉Ѻu̱ׯ6#%o+yT>סA&7L-R+1Uɰ2{s,?².ڸQo\UNc^nKȱ`�)3Eĉ�'h$Ds|&f{ao]}| HSNa1*~NCQ%JYU/~F?Ep^oח2|֟'|3}BA:hmQqСYr1 /e ?2kt ]7I2@|m#*SV%sXޗ?.9R: gfz]*oч9h]VM.ԇ^߬~}ú9u.s. w|a}nHwו^~}4?7r?ھS>�> X?XB֧h_x&  zo'Q΢/b Dso.i9x/93mhJ1ۅqLgN2Isur:32\DA䠣Rw Fr3ӆ ]Wi5r}"h`]cmám(ND-/[K*3iG;L:xѓ RytQu1w&x ;�we[uk?/7 9K#rK xV~r޺U+NvE)@>9Q[$^F$yO,3٦w}{p^;KvoA{ʇ=+@['bzݣOYva.0NSuuY6|DAV>Q]db@h!Wb[t> GFI0B^0Nc|+dGTx'\T"0G^'[_TJVmFW?}Xjv@h#lꉟ+/W87nZq߳|4<?Ss>Q|]2mMU_U 5WGeݎ+{aB?vLX}А#g17O ~=XƓ%8n&ܨ4%WeD} EN넧}__Ky ҶmӧBcdT?&*WjK%M SfZXYq/qU)>6ƴA~sڻ)\^ V Y5ۡz}ʺk(İyt>wQBF<ޑ55ϢO0@g&<R�w)G3QY5Wի&x�ٳ ATRD`ȃ]o|@ i뮃}4rZ}ρ� Gd*�r$Kh>ˠ5(HO-}}裆S~&v<1b?|J[މ@�}1[CsgtKƗyRf>�Z'4o]Br]F.|/xSO>>0a`ѩ\ζI4ƩA66Ù8t6lm|\VPPI%|e?XN?-| $,hu*I$ _[<X3AzJt|$mx֗6x@ h:u6Y>`7QN>wT"0_Xm/)j�Ϳ `][ JMāѪp C,ruz1 rk&yMP4|Z"s(.юak\g}zѫd.7^K,qvѸbJȤI,Jhܘ|<+h,hI&Wh2S96�@۲M_V% /~B 8@`@$k%@#rZVnupZ>htzC nGv!I jέ2l+];}e7@>frlv_}ZuR0{45!4ʤfCsS =1|-4%U@GN*`x葐CG&٦蟾(e-qމ@�}1/[2~x_yMyH(e8vdʀb#p(48AMFp-ubryR@v>xsٟ @ ]q?Wh6eU"0={FN={'6b')_1UA醀AӦ#&)vN`35DW]~2]A.H_ٷmOa^W L @3HFDrp}ߗ?|F\.ZRE)/R\N>=EN.AR^u6 萐[}O9r4fffռw],1&`Ԇ%+%8K`@n^=~XF$cz뿞gpyNosUDJ>Q%ٗP[HQhc_.pC:Ws:%vSn286-LZikqؾud,SI x"?<HGZ{f\$tHA>lܦn^zGX_{N$.)'y;:rɔa=CZhx]el!y|Pyn\w{~> |`C H2GT6 ́Ak#VUʱon"R%F2#6Y0S29-d)89W- ^X�Xo=?'^j>D%LF7 oMb0+L8$퉄E#>�ʰmB*I'u_&^;;~K6ʲjʲ*yrkE&�<H\Yy\sM0N<�~&&M�G�Gɬ%_%W#Yp5]p*޾Kl/[I!*<F`- ?QyzE!Huَ=*PR/ 9 ueʘdZ 1`A3z舉!Nд gEt*I_%3@�iNv;Ouw:qscʸ> Ӷbŵ12n Ti(<@'4U7T,;U@t` >878 c`U3e�jun>to|<wp?amP.N8 Ңoޜ:O$XЊAKǢnC=�pOSn)+Xq =tDٹ\if>!yڰ%k}@CM"YH~(L8&_ cAs$& BIG3285L*xd he`lSܮ6[|t7vNϗڷ3wSW�SFL�L(iӍ7_ϝU6.3'ևB@bCF<kN!Gb3u ~r lPM58UCeC, Z iI% S?|)7s1u'>m!K؜'3̏(4l2]7 fa"sLU[3s7h#Gg$7Q=^~,Ɏ%\'ۿgWr\Q7чAFs9t�>|2A9cAX8HptPԒ &Yf+B\j x-,*+�NO43v@?2Olvs(v*wy<d|˦{ժXLi<79e'?6@tJ6 76a >lzaY}ҿj%,X@ ް��@�IDATOS?|Z.};zÙ :x| t o[ gޭNW$d=V=0dJU&RAm "Cy|@xG}Kv7&t[I% 5CrïX6_<9e `_H @8nEt۱q 9NO9~1qYDrľSeSd|L?wD*[ڶ1SC6d b#\H PGKgb�^KX+z ԑ>U66WəS`7el}{e˛[o�ВJ.ߔ~?CΞuơuWv ٩496& bc2cs'0Oʤ駙YMb1w>Z2=p@:`>s {KPVj:my1ӻ|I,r/ eF_J�αW_x@pGk_z\~w\8t.6"ǂX&Hf )i=0�Ku0ı\eAir$`5D`)DL�L/<6 zl;5M֢SnՔɷ6oB#iw]\]@FWWTW k | @#W͟ ! JeA7% Ywӝҧ/D`#pw.t5Ր5Q' f@Ff &%`p Dpn >Y}씪'**&qi?>6 ˅#ȷM7*Q%%,\WؽGM|__r{ߕ.TyǻPs=O4pPqwm" bA^X&1,#(I<PAAGOVJ.BRSL� O7 ROc2r=Г:&ߊ5 f:'Azs칡hʣat.;IqSaeJoWYmL69]b3;%`a\ST?{V_qlmYnVk<KZy?nGB$tl"�#+=`*oXVʅ)3=VJMedK*8oN:a긖zTTu<2SAÇa4j{oo])CCЖT"`ӗY#;}ly󟖗>wra>[~02èܚ##7lTĒO@;(@}$iaaUhe9<}oOiCymD`"P&�+k;™c\߫W.3ܫ]߃kn2n6Xvn:VE41 -�̘'/I$74Hozh-W Hwm!&$<mx_2ȶAT>nK*XwķQD�`]Ӄ*w L�y/ȉaN]68NKZr*6@?wxX_81�:8E�q! X CwVK^"v~d^/+9h[r@=(v,�Fi8< 9dX=m>"EWh{i":)9lR70mK\C/Y&_&�zkG0YAe4}OkN?!脡[l8mi[V\j&QO;ART.M3sXg9 Uk]a wI�St|?0pk)7#6iˋŋٟ|S_sdU=# (mxTH] 6 3a eT!VrX/35^$H8OO9sh3C WZ՟}E9M}7-ٗ+E|n-!Zv<}iϨMiyl@Ɖ�Kvli转|x$ʝ5Pن<N?akMۦ߭\=St�%-~ [ʎы23,jp Ij|6#7Qdeҟ&X́RI՘n$ =B(x4Л+Mm�L l(l~]je=}wȲZї=19/}-[t0'0ʃ})2NeFxdΡHǓC(K9JCuh� a]�q`_C) ˲CF_m:zRp\{m Y"[7?uz,F.<Os" n$t'ՠk3UkpDXj�xʚX3w!o XnEHwmCy@,L�,N'+U#=p)_}xxyc2'9*ڵ[L+9+(R`(顉| Oö6o(ڒLoߦor1xGa.P{sA64Wt,Ml&i/&L¿ oz} [UMmI%xBN?<{N";KYB'sWڀAF�*D@#Sl܂cjCzCW/>y_U:$%+XӍW]-7~eݯ}р'dlt,RQ{ozwD+<< 2$ç/ÿvӴ <215jF DcmE^6 }3Y#2W9Zt!6M&߀wÚ a !jgDԑ`H뎜x͔ xue�Á@ra>W(n[ldp#n/CJ3RG99j<:lpn L9tȮ贀 ܰSq&z*t@^\pdR][U֯_A+Z0R+\7uU]F`LJ6<^-w-C;UY,jMdOV$WQZ)ǟn�Ϡ{VUDh~)>اqcΎGߤeQY'攄%E]vmE:¸uQ|2dD䓕 n-g"P&�oW𸘰#_s:t%U" y1>jNyQG+TFwBPbr]51ěD@L!Îߺ]eSAwn3}1 o;vuj,iE`|lT?r1jPtXSщޖ43yUy%rS��-vPeH&Z hG�&$I| ZTb�6BsxQN?yc+7]ₘm=p_gk8pd;=qpOaɉ@d $ذ:s,װpz1nsb/Y[DF"޹>vɷ[o9L'"_ ŋ}kɸb<zi(mtcM,LPi17YdDAdOܶ9&{puEʱWGn%L|Y HUd->*/J_E{2T"[8ʙ}OF[R{_w1AN>` Y7y*�(cjl &SW;N阤U#6E �\Q.C917Dmv z;@d*9wFN<9ʶ׿%F<}uȕxDV~ 㟖S�n0+NhK鰰8@HӏI3Fa|[?ц2ؑzDz+#) q:f׶d2]:%ۭ/t|-|r `(�z;x.gsu$gİ C} 6 96 dCy68. (~#AU 5}�WFYPi76{m:/7٧z1_\Vj}>4vt1G':Zq42P֙S&~Ï -d@{P_<_;ڥcvy+4**~ח{' \~eͶ[t% >^p5oW> W%3<еE:ojYx]PLԙF) �9N@E<t mADo�"D7mn4g2n07YYE7(�sY{=[9nnQ (t\u532oB|ms0!TNs1Bu ~AAF Ka.RǣJ L@}—,Nk]6.Ywm2rEz5W?+g~}q|vN7pN:Gg̰<M<!yDP؆'~7ab*JZL6`�y;?J u7dm?~F}rݯ*)D"Ч_ X{NRmM]'Oȉ~7ts9cuw9~kɰ JN `b Rd�pL ~#SOQ=Yj56n0mvSɺ˸7}1^OL{�/^žYr>0`"Ǽ6> D[vUE&j-Uf]a`fƾQH,W2H<h!*ҺA~5OFl{A�43dHLm7x kn[xھ[WiS)<T"{8/.;ͯȩj5ʏw<x]Vo/d6.P" B flD~G߆NQj}7hQVupeβQ"''"⒗X.c`hN~O;>)G~ĉ��Q@+=}<,lFrw<4<'�nhULY>hڀtVީv5˙ C_ŋ@�Xط7E(�@mNxQvI6$&`:  Qd?6( ~0˕ <ۥx:ЖǁuL2vM,쬾:G;eՎˤhmG!Jz9Ǐ'>l;H;~8XG 6D5OǟKɤQ/XuKD:P.P_'  'jU3yW�zuI%=$oɀdwɡ|[[iu?�6}?"_#88v;mv9-h4жL[4h@6`MyIvy[nB|A"P&�$̳+ z1ӢhZN󚲅 k o&H=6)y1Ye ZYrlue|} &l=dͯ![_'[wR[PN<u9o;w+e}aTuӔJ$;rcEqޖ0>NA]K5PƺG+0q_ ^޷eC<{]R@OG�}ep:Y~;>=9U%٪ <s f@1J#QN c$]@WMNy峎6"M揘p:R&Pde"ne_pwk/EL�_lgg>q2qP9Y!-~6o2GOk*lFS[V"/0z>_ lSNR2uOro} kۘIl Ww+wۮ%+X:8sr䋟#󄎃/:PR2T)N&x:dD_]4AD`XKyV3�ɓ;&!l T%L#h52}.ET"4"Vp{oOoC?=[^OJv<qcq<<x "2 '$߯N>CD_ܦm[PІd~ٔdLi0�m:})ô20;î'4 aIrd`27A}YL( rcU#芯0Öoe81A=m;�+  78 v_-C,C7)vA}οg?>2R ̵ sG tbgg 6`ߴi) dʹ*̲�?ɓ%86M~Bin#8Pq� Ǵ2Iha9Ok_]!knSDI%K'ȶ;Fr?S/hwq�c})KX@Be3" #k>1/9퀥ئz`M״ŏgG,mvoY lb#P&�L؂�V_hJ'1uOpȦ̳QK=s%)cQi%@ o2]! |q#m `3^Okd:}е*Q9˩|:o6O?ńM =Hްא2EdZ*b%/}Py剡 @C e`ql&X@#gN˱%�׼7JV_~`7ɱ|(#9.xB1✯xQr[Hq%)WїC9lL%k.&n '5Td8 fPYld ?(�񁷢<R*JEm|C`ECXR,r~#FS>vllLKo5_->m嚬@6ní,YmppY,r˟gTu_σtH\ȱ`e1IFy:P%'"Jf3qO ^ZSuu 9hy.Հx'M=#lVv}ܜ,ٶM.{Crw<\:sJ+>џ" 6q c(`?qB@U9 ߍ1x W\2!A5&qg3ͼ/Xnޮd Pc鰓"_ d**혡nrOA9VFd"j'fYm&WD2kڔ*oA2 [ qvq('lt=;k&׫2k7d@_RR蹳rOȥ㇥/} ?:Quae9r]:֪ +fv]9/%;mt$" & A8AL7NLۅW(oM'7K,|�7ȶ[oC߻I_ANE9p >- +C Z m@s cz}*Ul xr}2}NMoY�pmXͧ=DGQ<EL�S`;+GP'" 8@-5yS!j[DMH'oMhc?VŻ2Ax2謌DSb]] CktAMpYDxۿn֗YemUX "o=!'ȥ{t 0Ii ` EWXMP铽4e1M[$o�C:OcX>XzFQ�I�!8Vv&𑶻�.\CO~Yv\{J#004$A{4O~,#{rp䈌]w[qebҖ)&?\l%I26lUI̛e4&-Oe67~6Ǟ5<(�&> +'}8p(hwBM^FC h* Vq p ^ܔGMd�y xl{[,ly*߰I?ݷK\}=ۿ{dՖc!KOν9sg#۠hkNt�`W70}}M. QV%s9;P�1l; C} "zrm.�;.\G}�/:*aK Y"#ЯwQn.[.;f<g*pW28Fp< LX Ј#>R=iϜxPt-u=ynmd ۓ9LA91n6iO'e`:ZM\tėM΀ɉ̩GMͣ)j-*g񡼗C<95}Y6 ~~&,7ʪҫʪ]W+1#jFCwtH?ߤg* i }Z;�<;g Е L &C[ٱ̶ :k¬^}[�2&sE?$"b@gЖ\ zê&1KnH:|==�<FIK(JK:I{Ut L ]V NZH+HVA@! p`^旕U]wOwO3Uʬ|YYU~mee9 {G>pBNmz)rAI}_ABB[bA9#V'`e1Nm!6YA4nU}4I6_'ѨgQi:}ԋ:뎻ZGCW6,G֩O�,umm&�P1A2z4J,kXIV%DuQ.iJ(� Υ,D萂_` <ځN<\x~Urޛ.MaPic#zdxK:?x_50J2]VPmp@Z #%?]Y7ZI jvfE�X~l}Gmà(�}!g":QĄCw|K#C5@ƍrk~1`|q;pPFt"lG80C�m(?9֮tv:!GFujN=t"YWUZNvUAVnE'SЗg14�( ) �gkEԙ2[?ZPTSy^xT@Ɍ<κjwserAR]%=-x ̲@A}:HJ6m ׿^w[)_ G`#a`.z2?> O�ʏ@}W i#'ybJ:V^t�ΏTtCu<^FlCup,xt�&p] 6 9;S.{Oe~ ]+rŻ+CCҭ_8gtUiih\6!$]]K":U/ ϴ]JUG*uk%9}ABy&=ȪN<M1O 3;/.><8ϧN�`%ؒep Vf,O3G㨛DÄ: *噃 M(F}{BiG^K~yqr7'y;圷G<O'ݧ>/#VSL@e0�H�. P("e*m)4\4%O/ 3Q('\ \VuH < k}$d!a2` XۈHwMv/?#[l}y1l:|{iL d駷'1n5FGdB'ⷚٶbsK=6f.oԡOkǑ =A=y3xDe)O:Y<ԍ:xLS6u�"<z><8ϣf|4xKD.9Rԅ͙&Wuȯ]$?V>D8#Jr{f2%{co*6oַAr>ߩ}I%O7$'pgk_ew#4_XA xAic"eX'ӎl2x)yW|k� 3i3FJp%욪<zm'gB˓#';t)zPNI}<_2F]thCr\9\L QeV,ϕl|.EU&�ep|pU^>pyM'�LZ  ;�0:1C^cZhV P=7 N9iedRR+4R끡la7~ 7^y9oxl3[|pvb]#0/ẈҦ0'0vr ,Zf+�J&{hn!C"9ۯ 4dA!PwU=N \6EQ> `:&p>rL '&(�37] j:=&Gy~E63Ӟ@-rOG.ʀҵY9s2:05 }&6K䤡C:B <6-UJuuB rn}or}$8s՜fu9%BKNanRf`9 752B\v9;띗4epM&+GXi[Y)>, /ܰQo d([v9KAZ]<w1zWĸ ZT{0L |T<HsfM<g4J)K^R#0Op~ M`d*]N*ʡk~tU} "]\_׈m�}oMݔ>%=+'txAgڞdh[ fhpF= :yh=%5:+VF5UuDy|ȡ6m@M�`�+ܘbkAsHWH(#KARWQ2G_ *ZT(VX&}M6GHJ)cg6Nk_/ܨwo z[tD/P3GHv/>_<h?ۦ;NB4!F ^LY*؀,lHRXjrAUg x}•f>`aE雂RB14(///e%C;!IF _ tx^kL5t"@ezON^HaLdІyE9Gﰡs,4t{:,SJ tmV>@]>seҘ>E9$@>a H2/3fFQҍ{ڤAς`>ҾI=Oxk o-7$m~[O@+4uY[>#]'-hdPhC<;FyQ&nc^D,OIGpz3>up2QIlQ�c@m࡝K O1L V�"/şȻ#m[g#PE`57maB`WtR`t~yUpBm }D ]KrX*r𰵒fcӒٜŃO)uџ1ed8~O5�ܣGAg;�U4oltc0r9-ɭY c$UTGi>Q;v}eo׿Y6F߂ =O#0opĝ_J>Z[r̍mz3v9|yhgIfdI r!s0\@veðM}`k"VOtuSrɍ[:+:O`B`?+)GH˻=%CG:!`+J�cZ}_Ʒ65杅PR^huv]LP\F[aÆɱq>-@s">pUXQTFKXB3dL\bQbѭaL&c5\ՇC&a k0wl:|k]_ܷ,߰pD=s vwl `>lx;y8AbÅ;(]#H! eE!&WlK<8ELY-W^vX8sp68ZV@c^6PCПO�eh%EC_[o~msG%(޶/ V� ?&Ҧ!}!ٷGOCe]i7X;8,,KL%636[ѵcQ$':9tw� iu�xb"�"Gd Imh2gcN~Z4FО]L5hNӯ0p<V` 0&al@e%KMW^+[~l*$_SXp7cQy DC_ x2 >vhՠ(H׎6L1d*>Ob:B�SZVu@ =,֣� )�mwP';Jxw@Lr|cD#^s2<w U_:ۮ$}}2yJW(8!=2ۥ�mڐ14h-FBCuQn%G[A �ʐ@GmoP2 ;y?*- 8fNŝ A$SVQ Zf2%p LIVmsϗ aX6_ŗi~_ 3D@ycxPIck#^Ŝ?<S� !G;`e џUS 3یsG"s<f̃b9-Ix|TAyC l uL<_{?y}Ep#,/H]7MS'¤@N |XxoL Oc& u&Ұ+QL8YYø(a% �J /!>p�.y+*m 6&pN*.6,bE,)E}<{a:aFٰUVޖ3s o?"/@/4]b rV�x+=\c<6+M>J G Ǿ j ~kld 'y!jμyw8CeFDR[d&\{^ݟ?}^=9"Ю"6SX0ߧ2އO?Q-'|,|R'089<$VTl|DQGNC z * ,[ohy,"P"ӵ|ٶ_Mu;fXu M\>]8L`Yɻ#CPk:ׄ :vםk?l])t>i�L$Au$Be�W+Q]sU�h CJ2)W#0;:ほneVxr�-rɥ9>_l2gO�`yXlכ! e Ɠ#8K�aV <~ vȟ_y% H1!tgv-\6}cr~*/:g@yB^{g2MTdE^Ԫ!Z[2?\.+-=.M}c'Gpzy/\ZUՍ/+kwCp:xW>%mxF R> iA|X mH3 6~9|g;X =hZg<r+$ژ2Њrw}eD?cp@�76<Y[î5-2 24O#,L ȫ_A;{ 2,Ѐ‚ =Dğ/9tZU�aD6x�vƯ !@tC_4X/ )@ٓ#8Kchm>K4.L8!0�g {XLuˑ[BF^ݯBX3@^ $ NS:PRM@j2_=Azn^(Ͳ&+rV7 v|6#4L]1?m+ :7xh/2=9#�/5-ϯ+-" <� 'G` ߽UZ|EB[҄@9dLA_}(l,ChM^r~ҙC9,&z[mɧخ;Jf;-LjSQ'LA6!3Rw?218cpEDM?0 E]� ,^#h KwJ#'zE�aB)h1 Ziy!$1&2N"k^Yk^, =r;u- I3eg%qd>8:?|r'Gp 611fϥΌ�3kdYЯ�#�ˊWܓr⮯ķ#E`ц& t@%ܨ}HO!((Չd%~a#sy9}qޛ]y3~uP٤4>&'oSOHc S?XGX=``dd�r췆iDf|u#t4t|#%!.He$DyC`vofLRG DNcdjAgejN:K@!&X>ȯpruADz,k^z$@ (# ҷw8 %.O�,2�#-{8  G*~N&OO5�w-AB tTVoQE}C5hѹ4ДMKyr#0۹Zw, ګvlLw!_tLO] r@~#,?_f, sk>#3�V8Eِ/K8?#_ 3o ?.y$}'D2:BRdRFZ@y>%kP.-0! m ~6 Oͯ~`s27!�'GX<6:tht<\j^ɜ{+�|c5:k VFؿy bOY @fAE9^<@k( lE- j-X:X:Z=/yʜ3=e~h]x|r3-rX=,ؿ[vg~/| |<9!wᠡ\hP3;5n@Npm(7pV-Ǐȉ;n}l$ `0@&eCVh?ZdYxd!mAd\1IF,Gl#I=NڍL;y* "e-圆&}2<.r+_#*Ǔ#8g�knkk Yך"�*� ƎF`󤜺d`vwH} ϡ>��@�IDAT#:&ذ3U3[CbN9:ɨ#ph<^$�~amF Ѥ`@|EQ/g,'ý'Gp@|l� G׈{p˅"O$ZO�,QsG/}<wƋ@BGmAq|Q>#% bnΫ<<w֦o&m,@XAZl vֶU @OMKǥxoOP#8 @�� g)Y[79C7yXe3K.ru�w=~t?"!�#Pv(@AB*ɔ2Dad3;EkXzR/Ǟ*B;rdR+kk2P߁HA.dOɑ]?xL(p P7wnHl\$?f E8 SǥS?&18KN?"LX :"``(C$x%ŔGYgjIG`e#YDTm\f6gQFBƭkǚSʝ~b2MS$L"Wm*rUנ*O#�&�t�Z Gׁ{p3Et;�2gG` 0uJ[z|P&O<;y2r:ao`H2OL$,LTMl#BhMzJ$:M~l^jQm&6y rۢD߰'oM{ҧp�nQc.)ya@\.pV*.dž{΃*`?قS *X9t#cq32pXM mI]v&LY;E9!&/:=yT2ӝӎ#̊@92 ^uZᜳWCCCX_)TG`.#2y)[A c^~ JwZ./!.pa" !#^(^ B^ȷFZ@M~�ԁ!txDOQyi~Ǔ#8 �&�持Z7RNg=IGFF.O,?29}2|h^ZS6`aó42d4 [V66 <IcTB"ŹVuV˹O W Юi~hk!HdI*tcBC| ~`9|ҵIy8# j T-̥pѠNrΦ�2Gt??حojA9|p8 Uyڔz ya]!j\dN:kou6aËlP̩h$' Fo}+ ڼ~+n4PlK= pzX�ȗ K$w 1p3@`ډ~A-3�M@cdHP {IoO@9r u } l~2-ef>Cp<@Ť+T玀#0 a$4%&cCF2:i�uv#+hm NM$t<xL GA�+� g-l&ͳqQ,ـ3 =9#@Jw%Lz�^@x6 2/Z�ʡǀr9lys6=93^ڂ:Flwh߸xm1OP%ox}X-`irRzw1L zk_9#P w&''oeoBj|ϗȽ'�43OSWwTcRFջX7s>tED>`}c(/B8P9R#x>s 5+1*U ~�97%+h#z>qL:~x}Y08@ .�(1[+@k8-HׅѢ"Nt].3�;sV5S2o? @ w@<OA# Ì4.�x,�) !y0ħ\ry{St:f:a`#iy@~xhtEKoT#EO}8z1G�R<qr E4[ WG`!Мۿ,Cw蝷0Xۏz2=h$?' Z ́"0wpmjF>$"bzIB'- ;#U'LOc xy/c/Hc||8��};`ˈXz*?sL �#~@?;/땴mG+L,7*�iȕHe 6y*te+iS&*E]Tsӎ@:t'7@N?Vy@9b�ea1Jwʾ~"phڞG{244P,O_YfD}>@ .ǿEgm-W m�&ts5@U�AD ƹV xq<00^`1e$Y|.yI :Fm0 C>}�jqCm|%tza >}[J~R'Fg#ǚۆizlv۞V 8ˈ�^7t`,ojƻE 0͎a�-#v[aF AR;`#bFwZZm+ԫpZ|egO N)`zNw=w<9F@'�O>�> BN|<BiF~rt?L’O#h{vʱM?ޙ!� oGΎ.A;Fa 87N1`0 Y03 t2u'5@zhH,t= '@B;rNj4 gDz^xF'� 'G`"�: �F9 Fgފ ~F䬳N�tk�?W-0Xc9|˧S90ǠzXFGgy٩vLAby*A^HS}K(P\3ˎEvA=H,WiJB_aI7Ӎя@E)Tx$?&/'GXo;;<<:ڭw391sۜVof'3||eM}{v3Oȑ/G<wf "8;tqn:1>r)ƚg5WjEg..w*ml g[&c_9'hBx+G0B]u`C'>r�*; 8s AϺe%؍+ 1W?:5]ЏfNWq#Ec#嘾ojt8S; ЕvN(mIS ګ=11`XY\ F% ʻem/9l=qX7JhM5K9r$74Q?mt{tT*) eI: =yJv}292*|}9pqZyZ&IeҫQ'yw18k,}rL?cPmsq}!GGP&LZ}W"|PP$^]^Sp#7&yBG*bmHȨA` }/jۃ-�*?ʱ/nTH<9L�D ?D: >gV``N\X`׽ߑLgAxc^ @yb́ u*( е2}�@?ґI4vDfj%G`fZm7uz94h %٧k>yA;h_+yo;/Oz@@g&ffoG�!L;;vZW�mfG`iХ9H-4\Gຘx5�<JʴwIsꥐ?S=@˳}QVeҴ]v@68-@"/CT f4[x�I>2q�Vo8~I& ;q�v84p N3'eGƉ^W8S۷o?Kf̦2GXyB󁻤Q`? rCpw P?iV pA<(P'G83ZmGcip9mxrs+,ʪYXnOΩqyo G26Їjp"�:Rms5\:/W\yq^-.vwuuMQ]ݛ#U~=_[Hm0e=Jm#g Î9A ģnzC\ MۖN >D%"S^3ˎ#0OZmOC?dYI�;$?B}IVNOʡ:9ď?:-SLؓ#=e ר8k)`u<Ws+>3Ӄ3O#6@?->2ogi@5z9[#f_�.K (]I MweIHJDsGX9-3d^CPN]ȩC}lا@ ==Ͼ#M:F_+z_|^߳/(ۓ#1^S Yh>lR>˃\'�NkYڽGXRpk9`m|u4lwlPYGTs>n*e]Uv61R];Ȣ~Q5b%{pF`>튺3=C{\w\h~ [mK<}(&ѷj ~:A{+J�q3G`M qT?0-Ι<SyV8s qy"kG�VX0SI{I9?6Wi)z<*C@joj Ð48N<%H$ Cy]։8g|uC*McN 2%[#s@*XL'֩@>yZ$=!/=9@@_�~ �?y,T|ֵ.cOˇ@~fΣ@yjdd>PQsGX4xHst�h8-8)~{mG1hXEŦrO |QTNt2Tp3j7IN0P/䪣A~2ؙbYs0 >6EG`#_Rm劺K}tा8cl.pV1߷o5zU _$ s08.̢ht<{ۨڀlD3]w#,>iobZY$�4$|5�uZ X<}+27]4FF`pV)XŬ_�y ׯo/߈'/mH(6Fl)}-X-gu7F}*,`c]tfvc;n䰃)CCI9*HvA,)gw1]GX*8X]Nr7 ߺ'(h2Z6(tkiÚʱ>'V�9}Y|*RʰnJ:O2)lRԓ#"{g8dt HCˆVW4~ ?0\wV&x葃rs"[c.h ~YeVVA ?-j* ~`'5}-wY<upXD3]w#,=iEGb9O1yT }Ke(6P0>n?С �}S__G /4@}"�/4CFm}\_9L;v6M#]y_;~e[8-t6Šey$#78 00,M'Z'n_HVe9N;V~ugH:1ZI!g?r$W0U6+#(^N_8ey/9I/�p"@!1QNjsg>smm֩lY#hI<cU@7za _=۔ |B�?h_gGY7v؁-r:QuZ6|3G`O{.$C)K}DdI>@M;KYn=tGăD;u\vٿL#xyxxH́qu<<_�K�j.'{<885oڀ߲eK.]p G~KzH)p[[uxAVx&uh[HV T(A! Av4ɍ; lX6">g\LIGX&.KY.�9 ̌w /(Cx'� P~۔Lnyƒ89<(9yRlb'GX{GGGOմr+' sU0jdg^:}vO�P#2w+ϭ=n bje"GH){ `ClώL<6Q"i#A쭯P6R)~$$� ] ذ?K?Sّ/l#eI)|~{9ߖK6iCL^pVV=e[Ab+oF2gx#r1Xr{Ʉ.Qg8vLnG M%I~Z]*GB4x] V1'5LF,G8֍ ER7 @I=Dx;||V>@ȭ)r`M^W'jƧU߮+: /WsTpVô9rPХ0t:z~>nZA`'k200['�x}TEG8L+'72qR'cAj5WnW< 2ΑwoL/!ܡw&w2RHZ d/YJ(g\w<n ?TDʧ&t?#}t;A@a/�lyT)֩;k�2Nh\fJK}}}#<$#,;SI~}߶e92y0pE:V&:"8JC]N#ee}x6遈);Ϫau; E�u>k zA#g�9 94@I�{@s06h?TmAP~C*4%ץ}]K&pB8mS]>I=t T-2й<z^^ >@ '27;:::tM~zr@ch@x@z'<aߩƀqZ-;KgPu05ݘsE˓PRͤkR?FnAHlgr#$n3#[k#pg0zs!䪀I�`dA>iD+CCҹ =qBG序l"Tp"z�|rhGH0P9ܮ}1ZOg[j>諍Fc+xrة9uw;etGPVbUp�<FfCu@s6cFr(L:(ȸv,ΕS}.w.weD`DġGen54>Jȑ<K+sWỾc ;=z8g ]0544 3aN5 +��%Ob^P&M50'_=:[nM|'G`[G,] zV}Zi$񲖜O& UAt׮ v b.iIsAw`$ ++l50KG`e#v<m`1!S ;3y.CXO︛9?`Y׌їiAW>~ 0!#'ˑ{'uUJ;{reC`ddd_?d]jhv^\\-'>.wI`&''LO�9un2s2zL[ fFihAe[w>aZэB�%_*Gxp@W X֒xLiHJD|<SI#J@{ț3Mg'~ A?&@# ;e=whmLkelf )hΤ>&ڏ~\^s^s95<weB@_6JtE8_Z', Ŧpktϐ'sNe}eqE\t,>CHwЮdrp@ښ1[9`dJ GB�;U0ޠ͝zk|m=0:P)DTJDƣ<S:pV#hiP~,hO+/$�Z!}覤ND wCd>?GM{%g5RG`9Е˛wu.4jy9]Cy.yj P‰XbK]Pղՙ4< e.r3D9>oH_F_'2>KVCĀCP }YOI_mc K>rjeFߕxMX?) i:^vՉ�,?%׷̘$uw�[SFM~͛T�Rr莡D;tnFGM"L6dxvw˨>pG>&/HsG`ЕV=fZ Z&7fɣKO�,1-I&lS搾Hc\y>,N>񠌾W_,:JZYGyg|zH>tYT$T QPRDBTjw:pV Y1BFZߔ~Gh4�pAi`~t X,wGG^}F٠?-[.; O�jq7朦j2�Xd@'=rjnf;-X7sfC`=O>(/<%㝧.TxUc%+ tPaP6& i9 X0uUh!lL3ȯJkr�|i1O>u-@.:>U4g\/ ;Z!L0}` uQLJd)\򎛥m y,&>p@}f5PKŒ^"0mت"yU)U]+?fsnrg:h K?w}MztL:!b;I{N_ ^Y)Xo2 X=&y}n!L y܂z8&DppE ;yȑy7FynC}rUvW/"A>ѐᎣrem_?GzG`Q F__蔱NT ӋzݙY>;g�Nh^xr9htMWM;1F?~X?*']ATXZ�nt6Hgd/ Li_&Va6t8v䛳2DU"璗8k /(,e,rwGŸ}vGM|$I_��=lC3~2|\tS><s!-a@5)/fDGw&�K ʤyK??88�%TȰ <= zF?h BF1D̕%c)P|RJq:(Ri4QFհp6YRrp< j3r6B|G7 t%xNGj+MGwNП#^! 2J|s}8.m8\?'W ;!-k߳gNun}`NˌO�,8z5Cyc�ӧOkW^鯰<g;s!%wIwݟ}2o.EV7V[tI d Cϐ=ܭ4rUŔ MIaTf}8@*+t%PiJ�:uM 2&`PGn>4GB&z0;##rz2+훷ȥol_hX jY婻h!6$TgN->hP:ɌM][.�8ou3up@�ҭyn~b*L 98UQTKJ`Y@xWIU]RSw QFؠ3dH+/ VJ%G`=#~acPO]WFď:B}$@s&1iرÓQslm5@{W-R8SDkCK;dՃO\s^'6̼8! <-7GYS<9@|`ef8!yYص$uS'5sAv=Ї>YyrV햡С? "`s"�6hZr<>&`ẽ釰Se g1آ(j!yV*<"G~i~0?ѺihP- U�hPdTh f8D-|h9*?'7nlߐ~ly8@```Tń/g[SN//>xVô7tIAr%e#LMy]>m6 <.Sׂ.V }N`�H6eDr!Y,J[WLT8@O8 -E߆,̓�3h "(k v�YP2{_sUh>`H*C,k?1$_zi߲|8s#�ǏA5$eu2ls]�X+.p¼".'9y|b7�/[ӎ#`ݜ2%dfm5h8i:& gzs02sU@EEFhdL9z&vXdztu� ?\7-e^�5!0e>>rWR&'Ks\27Tzثw~GkoW%]+UpfC�iFFF>c;2=65HIe#UeEAs.;w2;O_~Wsh]X?腧/<%])Gi: Ӧv_ ƃc"�2Gg kяѱ"3NC05O(ͼoUof.qG`n.$(c<d)i'k%A}w징rnP*N@Gb&ȋSZ2r4uUYZ�O#PB@XMdoǎ}*Dl2;̡3W\֥W�,ϟ'*](P9m۹s玛n^DsG4}k2vh1VƆA^� (:X*FϞ"qYe7˪@#Y9֨K|KڪƦb#wz֪tK8#  a wי}E%U ؠL}{ci?v_SɰJ�=Ж?|6S/o1>&r-?%o{lbnS8}LYt  qB @ƴ+8!'{N7a %ccck+m@(16*#Go|A2?f1F;ݠvzr#6S]VOW&Jb48TF)7Q$#8 D}TԷ(/h4бUԧ+#ͱ [K{ZCL`K~QVF<<G ;?H=2 `'G( n�Z)S7И2�|e81qh%Q9mxr3t&&&v{�~r֭XrIiJsO]dJi$4B-0^cz;1(DOV6\?FaifiBl A0 J|*WVt*&^tG%п䃓rDNwɟdwq f/SFSv4Vi~ X�~S&$m|DzwK/K/ ءS;}Wđ#G^x4)6+rNS2 ��<`C@N:ړue-ĺB@O ywd>3x6@al2RNcg:⠇;HƷr=e}C TZ1%ta:Ȋ:9i}gթ9p#~f>}L/lI�&e> �9#͗#`,x<uV|B'|5�4^"h&/#oW~?'7ooI6^tNLN/ޤܪ-ߥXӊ9-d1 eR!=� Zzȷ\?nUTX99)]'wHϏFƠ* ][!XKA~ M %i *&99nࣆ;PRI B)GpQ Z+?I�Xƀ|LIshUQz_dRmx\�?0@Pl_^ȍ伫͛Uڞ09zԩ/GsacOQi=_D|`\W<5^|׻޵KxrtF`1)~ﶻGZaY'xǀ\ṫ8a;A'UNڃboliLhv[ȡ5;9pEG�}\R]-H#j�THlAs?hl adCbP-b}{�V̯NJ^/|L6]/ Ck:B@4(<rOKRKly5zK/ �;袋v^vS1'C^*OKy71qg ֢4PWF_A~YE6@^dJ$:QjUH3 G8C\&Oe%Z}$�${М<Vz j�@=o&MU=_{^yoW6{m:OG@Q:z#Kd2ysB򳐺׌N̯r7<\X>^q|k AH5GOjF�Ȑ )stMiu` a7Gơdn h#AG>rL @#5tmeJgH+9L&<CMA<3JzUeGuxrGmXwm`)O? 2SA'BZ ==re1٬ |`&աs;G`M!:_§0Woh*(9hlHCؓϼ8uCXrt]|ΐFn kv+\sf\T¢xZE91.t~+2vXA0Gݩ7xP6f2ʵ 2<4t CP KFV(|bmʜ �\<3 闪66S r~NT4/~ XGCэK4 ش] zP:_'9W\-. $0UDo;^9}�MM5G) ?׫r]9A7w|0>>.[l){#@S}#n?V_Y$%dv%1/(Erly !"W/Ƀn/1BRf;p%D�S>[%It~$�+ D@XqHzY`Qc@єю?t>"7~_Ȗ\.4XyZl1L{"Ɍ\)cMNmUW]5o;+ǥGwKHWm5h8-q'h?(2� B rc e3ʍӘ=Hэr AU`VptGXaՔۀN@y:?|$+tC?͉A >Š"=P' Wnm(Ngwr?a*^u5T<9k]x(#1<z/₊KCXFNrs=,4x(wcQ�{ =wV=r[_瞐 <3N~ݡLmt^NC5 �(&r=F?`[�i>8 t/Mzr_Q64>jLZљf Gbpӊ8A`혣>7V""ʣ8F.mȶ<l|nPju%}N>>zy9#sV6{.M<wV%zCR:::F>O}R�ӸaC9sUi9" +�]ͯ$,@F.A#z7s ߯.ƻOK#r#޹?4'dle020�Ћ- 6p(z([2PyS Q%љfBN(ßAَ#<wю2-~<T?eH(S3#6 N:̡]tX�dC5 sC{1yK##7ʿ+>rWē#SÏO{(#y_sˋ�X+.!0I9 sV@9i9~>*nj#}VYF_a ~q?J``eK-Ѱ) 믪A-.wzR?-7U3`QdT&M4׮6 +��anZ7Q ^H)0;XڗpLOwWQSO7+ijՃ+2k׮[mv@wti,,{ '4zr^(~o�oHT<_44{ջ';djrLIaXd{!G(\*u <[{R >1:FZF!ݙX!zrG`"~r]a>��@�IDAT> uX;_ܭ&*Us^(c>Fۤk )~]+<h zV2DBgz@8omO?+r?*/0Zx\wߓz8 rN<ci<_|⃊~=O,#yM^zAos}k7Ù'G`!އ~V}B&{9i ;uzaȆ`2Y97GAΕ&ao1֘`2E2*T5?e(e{*DV)N';�h$WY,ҧ69m !'%<DVu$fPN@ Ms:P(ԙɌV2>#'{X' [ρؓ#"N:UNl9~ʞ~xyA牞YyyP#m~E~pfpt,#7w=钩1;" 00Jt`ꨌA?uàIWJ.'iU\ yV옣q[xMtl˝G~Rj`*#R?9m?}mj=mc]Wג�&1RzuAխ>^~_v]<Aװ)[UahU} 9lN*"Wc_-.7˖K.[OB@?�߯NinF"9y&hSa'_UO�,�E4Ik5�rҐ[{J0鳅@[?wn{H?p`S]GkqZ5U; #8TǠ//&M 삊)9v tQa$d].L+l]8*E\>TmPN@^]#ey)>&on9}!'s| r/ T"0m?pۦ(q_߿WO_ɖK/'G`E ܹGz0hcG9O͕Zљˇg@'�f� 8aq]QFwȑ�ߧ�癖DI{}�g H=04@8측)>J>Z qs-҆JGQ΂UK%Rg:#6@Ǿ_v9t$BoE@;X7#N* ?0I v%SckVo:`#�Ed|l}}Y}r͇^^Bοz=F1qӣl>y=-#>`㤎+E-{C9?O9#.XF"?ɡ^o?jֳh�HL;| ֢S@1'A͌=8 (+[!u2mb>[ۺ?GXkEjڰ?5@=:^Th27N~1`wU'IM LXلmab@9GwP)OܳODwN9؏䊟\7'G`8yd>/7H^]M1Z&%@%�Ik�>usg1ҕ�#t`dGw96,SV=M1 ),m'rQ'=ȫ?xR_hMȡlIDݪ~%SnHVlSg9#@8WY}(HCw֍B|l ad^X߄ V_ar :HDU:H5edxDO:\w5JXRN814E}#L9t `ZT%yO22O:K/}N�c�9rN/7'epҫs@wRBv`8 UJoˁxh֝Շ4UPC> 6n. 9KP}Y7RFĘhUosg;#f@>yjW*k!vYG<J5H] UN_M'9hK-hA ǕIY['FGdTOH 7(}cD7oQX,6+np:.癚᤯rC2Z=c|!uyuCo=tM7M6AXtOoHz|P&:5Z)cm*e.ahb(gt,rW%i~ǖ%?MpNI6S f҂-N9#�'UPN>oWu|x-푳G{-ZB9aJᎶ/ uh`4vp HȰ/ ~8O|6gr~Yν*xǑxr}<3z) <ϗ �Xqn<UȆ@~CI#SǏyCW_}5}Jp�I<v>C4~ <QXpxbG~$HpIP1M7>`l.`(Ah<s@0)S6%Qzp�MvE.# , \EQ(ltG9E!OF]tCo><DMVL pU>';}$r/\ַK[;< #�gy.;Z+ y(M/!�KnqKEj(4yyw^r% � �x??<$ûӥuAit[{L+ǐ.z]P}20ޓ@t3;x@=P{YlOA|$cGUc+t5ݶ1?zk:#`_|`[Te9 A_4;@[RhsPS@sht?D@^M2 wJ޽rM\}l>|=tdjD~w!og`^|灀O�%VM}e T[曧Y[Bߓ#SvS22{[rT};9jF9QBHF $HB`m {~1e1Oc-L$F(K $!FHMUիzwusn3k{ڻ9ι oߒݝ;hz&y.[ w7093{'� .<>'<wX]ha҆Y�<=fVU*к85y8=W@6LѠ�[>/Ipd*i ~C ,'M\‚|"`޽Y ·ʞIKN|ٵ+SvZY?$ O Ɂ-iiOlV#.#w(β4Q`glps]r :.n-wMq' D9,r 0|R%G<_\ώIv`yFTi(]Ï)VU �ϭLt(ȫu.`b}|! σuCI}K\ �A ;.,p 1*{>߼!le^pq˳]Yw֬-*066ɟw}߼Yhx c=5>Hk6Y<tޝUش/Jp%F|sϿȯ?+WɚU h߁lhyYGٰ۟ 8{S߈&'.I4)ߨ/bb*2xs)D'y ft4ק~hoYoR0*` X:�γLX- <%,l5*r0%)E^.DpJ-bXj`bxd6{g6$ATޗ-8l /?*; Ys繼 *}vw};ď'!7ЩSv+` �r6ڔ!_Wo<:cc <X6k|`<FP݂E9g*PC\(vl8|ٍHN$7}p:?y#߽zûlF%_(8ܤ XV\KMt@ix|Ɖ:qog,rsqIr0> 6%dSYwÇ 5ٍKdhycf lޔ_og <;[zι /:[|l9AkVU 6\f? ħZJ"v*F%yM$+` �,㉎d+b},Yd`>֎ c_~oTǗ b{^-oq#gkI? y hG8o^GBGc~ 3 /<N ̍q |B<Q 2B6F XVCVyC4C.*H&aqd<A VQʐ8#R,_yChZu7-z!gh½| pH~yw粃gKϿ0[|y3z/t;w}rɁO}SwO&>UQME<b&ql`z 'yk�z<H~\j߆={60kHn?mS6~훲M{ݗᙆ t+x&đxy DؠH>wc"$~4g༹~s<Vr}2 y.QEW#iI*E!fYVW ?mwO~7_9<'�MzO1/bu,a_/<8?vҸh|s;< K 1?+پge{nm{E+ɖ*)-:lnY[شiӰ ;EQxj68{hmQl@xƟ ŔK�5o:3eb9zp_6elg]M >.? NE<g"oDĄ'jB|H#߹�gbs8D 8`0w(<2|AhpGl3VU`:+s262N!O;'I88ٿ):?~Z,OŃ >Q. qqWt`> @޽+)ۮGz/qVxչbSO8 m۶ml*Y; :VuX$vXC@>E /-wq'/^~zOw7//`!�6d& #|?<aR<;9v9 rc s Ӑp7.ԝD\SeryH:`D\6]o5uD'\gU*` L9_eq5qͅ60kLUbNsp=$>D>�"p`h东b3o q\wu}ٮvlβ%�pN3]-:Y8#tL3vm�S1(KO?&�0=uY98mJrM[ny|TO<M/ûsrxz~LG̝3f.'aAD Ηc/& <<_ ع|blwdS?g>خ_:DqjR1U*` Q7N4^t\̋kot6qb^*ocY |>:' ]Ο'@?Klp1ߡ8L4xpl@^�gvS<J*nݺG}E GSV.SX6S7ڔt`o SO՝~dU`L~otl|ĿdzG=3YfB%0lHNxBZ2'>/W$͍Et';Nċ@O {plF,1<M iV#zq ݆k K\R\KZ> syÆw>q׽2gu}xEЉ;Ff}6f{<}lhϞlthXV&FU۾޽;?+|F9 <=M!6qUC�mtοu/M7t綾^oϞ=.]FwFۍˤ_ox^.==g7ͯޘMLG|pd/r56 OOܽA?0rq>;&cH3BaQ@OyEZ95!OD5*` Xf`p/g \u5XG:<:킻}1GNtw120tA<7@~ܷB-Mm[ٜ+\-%ْϕ?X^"@w'?|ڵk}xzi%WQ§[lkSP[�"O_<] Qy}>.? �0f`>4˄~tߠL ;+~d;(}π~<O 䁎 f Gcea}yq|W8 1  45t)VUpVt\:m-csgB�c٧Ґ+e/X@(>5 t8v ! 4NEsA!O'0VZ9!ُ x7}S&sw'/$[piEO ̓[v/!vL~kypš a-�⫮By/ )jK +ߟÉ \FGс>?oO6y]6L]#?'߯"{ ?Ad0 &kBLp'>?oV~%8vsǓ;ȀI.R\|;'Wh"b XGKxպ^->r )WH n<q,X'ן,V™'fnt˿@A%O[~Jl .ʎf/Y" KdA`Q6W~ Vnݺs;vN׎s,bܣŞ1U�Y;/ {yE˱-[ O .q05Fdf_>/+;/܀wp2:ヌ9upw@MN=<̥H+Z4s[kryzџ=<w:Q@FYVcL/YPKqfXVUqHK]+B&ߪد͸TpSҺϜ 8&n b�38`%u9it_,0]؞Yςs͖ad N?-xB-ʺ{lz944˾/~:hz C:mȸXl| "Oh}JM4Iϧ;>}}{߯ fs� <Mn|d(; ʻȆe� .xG_r\Ph:#�gH\Cp>[ڎw8߇dBcG<'>8۹d9"8-:NRzf XGWx/a:J.�#0fru>!˜9N>N̙>Ni @ :K$6 #~?e N>%[ve_ri좋̚=75wS[pe:d;]v`tʇNb\)ơ)Aa-�tϟhŕx_f~ο/6ʄ8 ˿/\Xж +}cGkhAv;>~T8u,O `C+L=5l?'�GTqbrK}_xl%.?4O[ˈW@S+:cV XVı%[ :WQO y�ANd3'|ȁ{q#xġ0\1sG;y6|뒼;wْUwHTlI'g=sb,ȯ `AK~iW`X»7|%;aelk10>s͞ 4uSEӬ~q~fOL+ &2-L7oM7>@n{QP^�y oa 8)*]r UZƂ'r|Åd|qq[<| V<QCN(h%rH'hYV1R\%5dNq! Ɔ<:Ɗ+1ȞY0N9=�QqSi4p8Mu@r±q�nJnrϝ2l,,<Lt ݟ ,<se6gkVO6kvocR7n8,?|p{!oGoPēI&nr+` �S\Іtxb<*mJbl*;91||G>oq7Z>55L'Q~Loٶ)ܴ.m'=;>A8^9/p[x ,B_nbyߟ\b|wg 64q<8~<Ku|4p$KyB~ūSSu\íVUت�vM͜� p$crcD-8/pcɛH/ 8Z2g(r ~,>zuaX* m 0/[x)*[&Xt9(ӛ͒.~R@Eۮ###٦Moʏ :) -�̬/82b|Q+yW˗/3<3ae]Ļˉ//; ߔ m^l^ n|.پY@&R~…E;>Tpz F?soH2|G ^;^cQ@ۀŀ/(cz-Kˍ4l*;^Dz:^QkUdU*` HxלN xM=k(n+}<'I>\ ? .cbIpcI#r1t9iMq$a8@n|f͟-9cePu*[|٢z/% nQ`U#jd?ou]ċ! PdzCh< P.M!;mo|3ϼE 6@>&}نvo߭ݜ owφlo*˂<q|I,珜}|q2^)`՜M\y7ϗ5-4L;IG_8 [\WE.SPO'R/rG*` X\'i#G%8ݵ]\ `_:Ndž\؊+[ pu};a.`"'!q/D)whĘDc._ ܧ`r`eQK6%oz-8Łs+y, [qzn>Y"{_7O~K_[~>$G&4T� )yԔ x΅O{{?}iY`P&WN>$~yC6,_7s[6y# pd+ Y Iq!\waG=?qs H=i~][G˜!qqc�c9fc!q1$C*!T7Bgv:^#5*` X*k .ix`1G'F>mHl؅<:퇋9s5>j|o|<G4J |$89 …|gӁ ܶ&dSOq|b`[$X$rgO/3HA7 oyys^)<P1nM\K;>\[�N44p/9{ڵ�>*~ы^4/=MݝEI>$lp/ݽ5%?}K6.*I8G\ J as~)<?bͭx9~s<qġ� .=:",r%%<?<pK5#J30U*` X+kT FO>y%N$y5Ix/"t "3K) 530܌! Tv=&Xrs~b#g{|<ۻqN?~e`q˳y'-O,Z)O ,8lI'_!p/tO As>�GYƝ;G>1*\(qp!Ѵ};ii-�Lcq[=>7\F<~1h~QeG?/~C;Ûf&*!CG)Cɽ&;2gF=;prdnw^1EճJbNFp⽁Ex|O3xabr!^dq .}N Φ`b.SFd TjVx̬R9 XV*덺=8^11Lk!nRb38)ݓMݚyC$㉡%|97!q!&\:^1˗>l,ۦlw 7.OΕ?‰g 8^`E6y'.x|v,"BS: $anO=TQW֭;(CARi;4[7͠  z0PBĴ^jwz__?sxť͛IW5`~R4?*74�ecEyP&y`Fd?_toY{�U*X~B-a'!1BX͉;\1pèU^XcxiőDU˽.H DlC˖)u#4wUOw@MDd XV+kOypd*t!$hܛ cϛKx۳ \a09x~qnyq1%yBSLjmĺx-t#?K8{lβel.Y澄p㲹K 4"ѻ{X o|sىAq(-u=|`40S2ƅ9 ML a*|nJXю9L1ǹ馛 z/^1>~$4Gݗyhl_ޥ/Փ=_ltP~FoX&C~l|PtӉěyÑ Ar?Σ!PiV,2ωp02!T>'u8<w9jg?8&p519p,8X>WxÅqT;K'UxVU*0 Zm\=A3>hS7#Wq(ٹ^-n:a!Ba#ϛdˎq] t8CS.g31qm#]�E.]٠l޼!fwff]d=ɟ8{VֻpؽYnYs"1'c}ouB?b[OSl` FZ�iD60;w~L>6V R*j q̙W&.h|Σ}ӦDC/1R\ vґpH#?1K`Av-s+N}}�:!.(L?Fq5D<!aJP XV!�M\Rc5a^HuI\$N}_Ep1#Mb>ICsb|c|Cc9ayڦN8l:ёxr5OǺO'aG▌Qr&TG˹~ٯI9(TOIMb<�p -^(m 67yA曟Ko_􂗿Gnm9= ]J%#(Y>xR4ql{>i^%\^ a}|{fG9 XG2Vx^',Ue5<5Ep2;s-$ $h XV�U}DsŶ}Xc?)6|l~?$$xwe_o):c/qX@'\ cs҆8t1/ DtnW�EU_-{޼lOiP_mgZAg&39i.pCz<5e:m}J+/+^o. W󆓕2 J`~H*Aq6P�\I?yS}3(}GNJGHq R< 0bmsl cH ڬr5G*` XvL9:ߺ:r!_>!:h-!p7܏5I s;b1EM t4NF>c<gNt"fBΜ>p099]\)Qb,_}|)1cÒc9h޲�@|N%taĭ)niӦ+.lܓNh'zܤ>)ք!iwQ e9:l>8\n5/?V쐃9_:)@qC,64|iq'D)\>_y_U]^߯g>W{:N 1]\!lKYĒxxlu<íV)�d X r2Z2w28cñhq.Yxp<>1\1ƴM=;KIpRLnpqbWLZ([q[#?u6_o|�ω?ğSPSCF- a-͸6Î9j<'|~0W/u`Mc''m&ť< ?=1Ǥ~ eDJcVd/qPZ0$Jy/r)%ISǀ>f %|..<+zj~Ė#x=f  !,ue(!5]][죟xFT79(tS= @ڸGBK-ɧ1(S>Q|d3k~V>r 偻6s|3x~,9DZUk5$+`0NA8^�|C6mxJoݺu`><W\QFaZ]CcGa)Ep .|QW/Q |O9u. <*9&>t R⼲s˙!2(!VR=ި+ZS*$VU*pT�׽Nu'siaG_M<X@[7_�Krǀ\6M y|#OkK^`^RH 9ly~y:~-%,tqlZ'frT>0B6tms#GKѲ{}O~w wn7eMVo֝]8wrl:˓!m8\w=#ϙ;*cO/$t׭w ƢdN?~x0^_]| ;{V>B "vNg&WSp><o3W+Vi}` l sŗ֣= 1_�7K[iq 6ָ@p<1{.S3OMѺi~SvUy|e?3'[ <p~-2҆^7٥`3�05n6u%tnɋ_uk߲d==C}B ^sD4?1Bx"ƓU A~سH&Ya .q!p`%jEhHty/}/|>8c(Cܢ>|7%zntG5f rfU`:*` �QUiSymd.ζhC&8ȁG�R9N1-ɀBPDipBdԍ^竎\ a lMlsϼuɲ;nGcs%ur &)cqHk3�0sfu6_=!XY~}kuFNcc)-&'圜D]\Ɛxpds}ER) OTB.Ƈ(pC489&wu,Я/Z*7jChgg?ś8<hN—o�qs$#[qq _'.W'9k LCl`j)T_/|Th :Z /s9t ?D<[x4>wa<tG,шR=gK:6wxϗ瞛}'>]v JNN!'?1<׭\Qln֍й[8zv=W楽s tNh Lɼp[ ` ONn+69^>>+:(U�y~ u} XL.`M_t+s ┦s S?yX[NAZ1W*mU*p+` �k(Ov� r\v~ ET>~`hQ$NqJޛ{r{2Gk.N}X+)s_o"SHb>6RuǓȋ886>ݿ=Ț'<-'Zj4mzGf �3뗣6_Q8RK^ܻ^.LO/ jK )>A;G8�rZ}*'N3wxw]8Afy0rgb1qjt8@8lyNOOn9x-d0�PtڇVIV�&Y@ LjS5hu>+Q4k}c~ڱ?IÍIbNw~="%8g!/+TZE*3?;Էxj'^K#m=OB-5ptk5CX[�8n+~u~[\|go' 0K_|⺇{9Έ<A+>.ut<G&Ѣ<'Drܟ*_c=?P (Qb+D8A:|hz<b9}e>=Ş}EPɅSglpU`T�fað 4Wuzө\Eӯ%nR#%N"aͦ}#$ !um׺;6+?)J҃9i;ZNuzs׽|@蘔sS}a8چΦub&gXl`= 2uӶ>htb5'q)W{=~.U�IIh){Х͒ӥ}')K$��@�IDATq; >V"^=9 /2cE.n1B~\>c1BX\MT>aCz(|裰\XiW;<ІQFQV\[�8uoXx͝Xt9 ✴)=+'C cd ЦMZ2։Qƾֹ背Ic_ 9<\|'p09'u6nA nM~+` �mv2鴵7<Qo)w{nxˊFK0m9?j:Od[@J YHu־SS IJ4"'C/Lg.E8ȅyI֑</*R6OhBy;1oa  al�VT`^':K~cyF�sh.y:O&ɦ1O[ĴMt}dJ]]މo t yd?9oWhI?q3�0|8xm:yZѾ`˟gwKNZH/~Xg>N+Rx]BV( 0/$ab؈w'X(O+@|"@. lnC|LKԊزCi^'bVV[�8lS]6zfcm=$iϧ wC-F8l}<F>puX gM}4N:7M7kϞ=#m<MlN7ْ�{f^^8G�n/dk?[wh㪫FJ->lΟ O1%'9tI?Hn* BS.+>'~}} ɻ:v1^e&4Z="}M~1VU*`85RhCjti >8FmHbPDA8Hb) Vx. OF\'޷?|gV{/>z<@ͦub&gh63+Pz-里7޳g_7/S�L}kONZ=ɵ~4_˅|~ 'krc8ĆYq,;FHޢǁZ?'E !֬V C u=O/�d{3<н(Ib?p`u-$g+N1ʩ}Kз+1-5PTqlpЍɣ%tI{Æ }q3/NÞޱ'ʢJnrg3)q'U W_Sp> t)Rp3_\Gɾ8\>NJJop7]C4ДBkz9d X 8(SPiw2tP"V.%}V0Ew9]+^+[Rz�ӳ:g]_#wٷo>S1G&pi ~1Jk|Ok%~미Cg\x)s'ZIJ|r-QǗwyLo/> x4 '?s. J rD`^Z`�5@l.JEޓFUrc#5H4m  �%{bθQEV|lV4<b:3DV~3_Ձ[_衇 Ӧԋ=1Yb_l~+` �mhRsk?u{WVرN3Bs3P%K]StLJz~T ΨaŸjOA'18f@-[wvYM}LӬVc�pL<vV]o]qj>sT#(Vg{oyuقY{w'ߟ_j y#N1tuhF- ~xx^#%e| ?c'W ]x`gDL%+MŁ<an0<(-CAn ^$W9Q-=C#츅:1 {ҴѓQV#�pD<L6HtW@ߓLw_x>kI_\;saݿuwy'CSdi F*B- l__7I hComV�f oݴ=#?i>}Ν;{g߿׼z{H9CӼe:O18id%I=QcL&e)4n ˼LgaVZ[�8ZY;.+pnw8}_II!'IZF׬'Bt&=7g??%oqBI}+IJ\EGL>$Lq $C܈iI\FC1g?䓻>wն\u3klT*'=8)O$hK V9IH'6st>S HXa%P+1aڑž`#[NlyHVwDg$6uյTp:kdPw%u'?[n:' vr&p wZi釩�p ?nqjM۱mЎ%ovO_җ<p9g&HI$leK9*9nLƊe )0]8s2;V75U*Vl2*`LS@kF|UlxqV pR6k뮻6H8S%'Q71+61H6X;*` �Gsnc9c?lR=ˮ+g^bCb}F kK5qyPq|kQQz$p{?`U*`hU[�hUY58 } >[iN=ZJqcNFwڸO}HSSRjwh^Zb ?C\Iv}܈iB&8걟6sks;8~zɁs=;rq2@+qI`qfl%i78#ex'`IU*P-�TJbU*yJRو;;$err9+o3{ηcᄾՄ_8ג9ХƩn}Ϡ  z0 i :]kul ,}x|[=<dmtq<n)B ALs|G,98rJ@cZVT�&R5 XZT�2h֡Ƒ8Btkfcad?7CCCKOS"'8|0<ю~T�J 犸Ӓ:V\t\cm8KO^|)`$L7e X'[g|$_C#fxqbcv`YVU�&V7 Xڮ�q(b"ײ.Fͧ }OܿYv^8דä~lB <h{o+3:Lh�yC۱;#'1͍㳻K_Ϻӷ<ӍEDcN'Չ}x;e8зRcdșlgV@ml4 X{V'uG:]m%ufoՁ[ͷ^yqR%&ڦ^7釟C:Zl{GLlyJŹ"n$&WT N߹^~iN=Ӷǹ7Ӥ%_O(YbVJ@!Md|1i X\lVaL7ZH4^k~;+_}/ˏK '1Likd~J=ϰ  {@:N|A(1-΍9Mtw}U|EOXy[8 STeLZI]O.Nb7z<oV*` �*[S_ 817c?l=x??OymCDŽ\c㍼jBG~+` �d9E۱Vc:cccٽ<W\e'w=H$; Rj."7PL9 CIU*0*` �3!Y n󪬙qll7ggMj ]Oc2҉A:[MQ 򼨏Bc<hOn,5\`]t{<rezu->a+A٥wщV9[M΃UC Cn-U*` ղZ^c^ll=;얭WD8/.ǎ}JGXmԆT[M5X,5z;pkg}}}k>uw_gc#I1�t6=s̶ XGtl~lV@}euYse;~Cc'uz+|O)#�p>pѰy#m<7si^]\޽{xӶt8i<:;>ӭVQY[�8*V;(U\Ų̚Yxoo61?Q'&@r"?b N؆/gpl`?8 sX1ފC>d܏mٲ@'?7{횧\?dM-U*`8DCTh*`nJ1wwgÿ??V:&u~K2pXzӘGPlze]*ͣsc\Z֭[%/皰ZmNlVUX-� U*0 cڎI[fV~oh ^ݤ8& ,nOcGpl~CǹF7mSHk0r$VvSO޹sWO?ήwi~uT!)VU*^l:*` T@߯PL.Z}}G?S?51&ɱi='f-�aXpq~b=u,|گ}cl׵aÆٳWvv{ XVCT[�8DnV@8o&_?'SO:?p$%[؆/ӏ @u0$\C(5O>I'90<r^Ycܭ[V!-�b[WVUm񞁽 Oj7}n@O衃cAGVyWf5+` �3!�[-GYZB疊#3ݱgϭWΞ7]"�+e*`  e XX8vd_?mj8׋�8Ǣm=:& Q`FR|O)`O5J̋Lu뾱^ӿp?cbl X�0mVU1_<xܴŷJ$?qB'XjG X|ZC9F5FB'˘G:;v|?E׽O]|ʶ=]v3ʚ X_;NU*؉'eC2v}BIM[ak?'hhӧ1ӏ �6 ?Xvnű-qvӑo\z.uҪn{)LZVU�*` U`쌕;~kGO_Uxw*11Xڐuqo(-�n~h9X"<E1Nn][+wNdϬ1|5U*` ג[Vc^ ʷ?ȣp>ZOVrrjuJZyM%l8$X,[ꄫ0NcNyw\v˖>UnYc�:` X�0dVUU^p~mw۟g+v&?&L9ѧİ-y u� ƨSJJ$V|Zr<pы.^bƞg*` X�0|VU YW0:>[o}Ǘ tlSxbi)>GAl(x<\c!RǾNkɽ=3t߶|&5i XV�:,ѭV@37_n~dhLɣ7 6e:b/5X SƼݒC_}MߢO,T X-�Lxj XZW`wo`WڵkI'Mn =i7I {`ޣ�pT?ɃKM5Vd)0k~J[n# q'xwd00U*`Hl`"UU*X_ ;<?oN[V ?0m: 2֝33yV�CJM$1Zcuwguߺ+vॗ,۷g~?OYV+` �.% X tueï׼~V~>ů'SwPzqh(c9#?1Gil(}`KO5x,!Wǵw{.]+_umw:n&֬VU`RIςV<'~ ~N)1 Y7''z 0h- Q`vx(IƨS"=ݶi^Gc=e<z柴qYV*` �*YVc&;ۇGgk˖-}J:d ã:$𸥰cQV[�8GO1ꔭ8iWҦMy^t58OlO@yg X�aU*`PF.|XG=D'!c$mq& 1Ï'ƨSbcLR:&ɓX7000zwuuW.?kсuc(Śa X�aU*`dCozP5}- Փ־V (U;ŋHӎ Qv|PIƨSAdT;'g͞˯{k}Ϭ8íVU -�1*` UѳWe= W|XMXKbc�p <mbj®1%rZfλs.ɂ/xy�f XdY X>G>{wqɼ։ZsOMcco8D]c)97Đ%0;w>={ .*4@ 6اX=VU�PWíV@cyEKnzիS1D?ROI`z3Եuha-�O&Np':_̍vNJtin^u _ +kU*`�] ӭV@7yh7?_={<=ijb hS2a1[?f+` �C_{uwSKc[5ZO<;�s=|> +lU*``l0i X]yN%/WOTOc[te憱:1H4bHly;<̺ƩS1ꔌKV'O`E/?oA^4vJoU*`8:+` �GjGe L]d~/㷧qO䉥&SXjG!ߑ1ӏ 17zݤY)[lV'~. ;[@~)S{Nعg Xvl~VdN?3{d}s~oJlÉ>ek:dcK9B#Occ puvSDJ]hcN^׺On>犫sǻ-R6*` {[_,xu{bݻw]VPrOلџ6>Xjy3*= *P7I8uJz:|m1mSwKZaՕ+? H0U*plT�َ*`h]9s׼nd-o8<[Իk_Եj1K9B#Oc[\&aV@DԵu֭0ꐱީ~to}׼x%?m޲=VM9&=U[T㩅K QpCGjU^Z⒔-*@WL.g)Mɨ歺@+.TV)~�BS%w0j/(QF҂\%d*%n;t| r]2vJ*Ēd%W"EK[R촫TA)QE+JpE{z4p;(<[m$atlwP]w2Fdpr#ouА7@-[|L3OCTl#붑7qvug#W\5>7 ݻ}ᇷK89"!6M.6MN0x˦V}&Z�&Щq) OֵJ}F37׾{/zby}{ǖ8n(4;Մ\j2Vx>�I.qQéY\cGqQhEl8+�%)[U+�A\RQ[uV\CR4A,K`%+H1^P h J%/*JPUJw+-�JvxxFȣpUhwPyhyITy}ms: d5 G0!opZz۷fʇF>m#qwa Ϛܭwu׾5!Ƕu:ױˍ8mwȹ?iC!&n),}Wc vmVq) i'ڎFn`u8v˗}z/\XOJK>K7I&zW«@FxKsV++50֚[x MHc$eK PUq (YJS2y0ЊzUJ_ 58&(er�Z> JA-A)Qr;WE JNsRin=ϒyA޲ J9-}[<j!o7m.]'9tם\y!4 0PKt<S29m7αO~-'|?zC'ʏJO©Cj81716qH6- �{t\LSMNrP䤝f>uE-󞺻uwwUϡ JM_#+�I.qQZwU Y1[b%naZ࠸$eK PUq (YJS2y0ЊzUJ_ 58&(er�Z> JA-A)Qr;WE JNsRin=ϒyA޲ J9-}[<j!o7m.]'9tם\y!4 0PKt<S29moѵϭoM# ? @NNnS:bVW@{"L8ƵšbI\J7۷ߺz#w-~ի6uze+d%YGn=0U*`/U?Ft~co|### 6=5]uةMS2a!5@hhȈ\;1N[X>|SRcuzW^}鏽w~I?}ϼS6>uY?&5R62I49IЇ\%~yeњ[x M'A"+-W"G8r g)dTVa*hPj@jq�!MP)˒;A R|L(Z@RrvF i 2T j�(&3,)G+- nٷœ1zuAIwka>BC No1<!S|F^ydC/Kۻg=~mw]w[9yG�6ڭr/q~b)1!ޚU `c*0 C1F;%=)],17__K/yY+9naW8&ątR$M'ËdxLD5)&g_E*Qh*> Y([}s˞AR`p(!%#WI>FBOYJ W c D;%3JH ^pU 4WP[�(&3,)G+- nٷœ1zuAIwka>BC No1<!S|F'-\ ]ᗼl|׎";tmo%OЦtzJj ne*q0ѱflG4Nzbڦuƥ0RRc7k^|;ϝ{}, ;ooJ\8K(̖yW%g Pk%#MVx59+<vg[VĶ}!8(.I}U\rҔjު; r@jRHM> =eYr#(\A*@)RE hPJ`(!-xUQBR6\AmT`[ó0BwPB7RC˻eOx kKInp%u'cD!g8F^x y;( ;ݾ%4T>Lu6nxc CC$۹}7n>CmGhNڡkx+Ř3PDM p1*�&8֬SQƩƠmOlKXi oxλ%WK<uÏzSpJJ(c N1N$ȉ<%n9kR]MR.jU T|lPR)=eQBJF1Fh*h | =,@  PxA)4(%w0Jng(!CU)qi�P*M0ڭgYR!V;([UA)ݲo'Q < cͥ$g71"Kא3y#|<jnߒcy*B:g\5We׼6o/GݙQ8Ymd+_\JG qlZ'YkV `c*0U{>i<#NOcSXX.7p[O:Z{[s<3W-JCplȇ$lu]%&gLU\%0 "`$e>ܲlͷp7S֌]Ji!4j `WA*@݁[r;WE JNsRin=ϨyA޲ J9-}[<j!o7m.]'9tם\y!4 0PKt<S29ռY] \+y?O泟Ν;-kz;k q*ux0*PLhYuϩ4N[KNўD>svrsmo{+ yy'oQW@]9enQǠ \T`'F H`b^M %YFm{KR�E_W�24%PAZTRiBOYJ W c D;%3JH ^pU 4WP[�(&3,)G+- nٷœ1zuAIwka>BC No1<!S|[፭8>#W^5:߿ǟ??= I;1mSDn`?uF>F)1qC~kVIW�kV@*iƠ7mzN]1WcAeW·,\zKVl}ft=n|*@V]E) ϻ*p Pk%#MVx59+<vg[VĶ}!8(.I}U\rҔjު; r@jRHM> =eYr#(\A*@)RE hPJ`(!-xUQBR6\AmT`[ó0BwPB7RC˻eOx kKInp%u'cD!g8F^x y;( ;ݾ%4T>LuΆ|= __}'mۺ;sC>dk:%⨷+u Ma: ~4;0S:1HИ{$U53!tp[mxs"N(OcL ÁCA: HKL{e\r;{f uoR @ek1_rW?kߘX}o45bU_/^?Ƈ_xϼۑ߭K$~w҉D'-D4[Vl&-63d׺ک$::Q;G szRdO++<@=vҶrN-d:Z~Nvalu*WA+եSO:-mO9 Y>�hRN^%MPϱN][mB.N{Frx,̭҅8 1yTډ/=d23~潺)̭˵NcV7יyҲ虉y<?wv7;%7ۅt^41_sjNsjmBomΗ2 % 7-8Nט|͉RF^5XS?o|.]3x7ǫwg[(9HNZ&GtxI.hwkӁ~3M>mWQ::Q;U[; N"6MkNIWN֕iOVjGeVwTV ZϓքҙJqΜ�;aɗ\~rbkL骵ӞQ]7LEضuvuZVmZA['ѴtZWe2m[4iNȸr47y̓vګjTkG+NcV75Cfy>7ڿƫKKw?׿_r_%7Vr~]J^_\JM1TQA`r&z9+5[Zלc~i.6OsIWK?޳̓1ZّY;~:Z^˕cM uvC\ ]Hӧd/wGGRM_Pmd~$Uˇ ,<}^͐g~?Ubַk?Y-4~܂6bBJ JC1mi=4gʾ~]L|D%Kv`lMI|H]MMI� ~RИDKIݍns^tAJ>#)Ƕl@y;zI;N;+>qytk?G?w?я~fh!bs_F\t6~^n%'hjB`.rA Z9\KO_ֽ^͋\{?:s?hsƓ49޻8NWGtV1˹5\i]TʤM^8}3 +K5EMQٳ*jFz"IjNvX-mZ?uQ^A#Oo=1$Rh٦UH&T O{vL9YX(9۞#2nD<3l?d!%WИDKzsmgۀ ;M>e-3US$\\{M5:D5piyt/6+w3>7?goe/ۻ(_׷4'I}Y!=#iA`.z2W3MH z5sVjqt2bqlXN/^k'||o_ sP66WI]=f5\^.NJU&m:rA]OdXYY,oJ@Ned)YН5~Tl*$A*bk什H;rdNSOs, , bmOK"JO+hHda|궎3]m&G)w~.R&-/s/|Û~?~+,*%{Pnmn/ٞ.꼯ˡӨyL@@nN8 ^w>oc%I}[E4ZN[S K׮~oůNW?xkr"/xtӬ߭"jZ$)Rȥz/w>;We#�(MiY#YJtg :۴ tЄJؚ!i/Ҏ2٢vӜ)'K %gbD품g'@,Ӽ 3h<YonLvpa'ewʝ߀+};b)Fdˣ{/2w_޻{p>{>OyͰt藬<ߴ2uc98fmCs@kbĥ_}7n}i-gq퀕^y_tK˗\o_7BcϛJ:I }TeҦ{u zx2,,7E�@Il|% 'ҲF,Az?uim t5C^eE쩧9SN1Jζň% Ozd%Yy4f$Ry0>u[Ǚ.6NO}YL#; WwvSf [_y3ύn+eu_vO~ /-KŶM u :ͫyZ[Ç N@k6Vڜ/MXfr}kr4_}υ_sWٳavۗ?O_{w9TAWOe.l"^]vELt:}7^?ȰTXD�%󕀜HR;k٦UH&T O{vL9YX(9۞#2nD<3l?d!%WИDKzsmgۀ ;M>e-3US$\\{M5Ε'G[Ͼ0˻_xigʵƯ~oNXRo},s|ǥk��IDATNի6}smN@n88 prC[Y<GS6u3r:7WSX9l˩Fmy}O]8st?9Wn>_;РHuvuU2i;N zx"Rb}ST�DΦWr"-k$KɂZgV!PI[3$?Eڑ[&[tΞz3di`al{Zȸ]̰HV~\AcF-' Sun.4DЗT=Npq}Gl7F[Ͻ8w_x3ϭ޽{__O>d'4뮬~,~/YiJsN|!3P;cZ[Çc]( {-ՏY_d;l~Zlcs1FWg]翾t7w.xo|g7?+0ڸh'Qc z:+.NJU&m:rA]OdXYY,oJ@Ned)YН5~Tl*$A*bk什H;rdNSOs, , bmOK"JO+hHda|궎3]m&G)w~.wăk}kO߿õy7~_7l6]w6'~,NTom즾gg/OO}rYLjuX<prD 5P_lΏ5gm_u%jl.kcח+|ꥋ/]\_s߹qp+|qH>Xwk4r\({jX;M-U2i˝Y7^?ȰTXD�%󕀜HR;k٦UH&T O{vL9YX(9۞#2nD<3l?d!%WИDKzsmgۀ ;M>e-3US$\hF5kOom?+O.N_xk{o͛x㗿{al^Ts~M}_=6[ټՏY_:rTy,hp@Ƚ.}笭oSnS>lS9[;Z^^^)/|ṫW>ٗmꙕxq˫ֶ61 [ e樋"^*6N� s|$I5M9aګSksz>ĐDZ&&KɂZgV!PI[3$?Eڑ[&[tΞz3di`al{Zȸ]̰HV~\AcF-' Sun.4DЗT=Nqfh^?isWvw>5>8ap޿O77}뭷Fx vCz_TNkynu9k՜Zɫ?s˫Zes8rJ 5&~ b>$[mkZң_vm<sDί~~uepS=^޾>87Z]gYhyg+|ݯA[_RI~M9>W՜flS9FzbH"-dAQMkHM̿"--:mgO=͙r40Qr=-Fd.xf~ $+B|?K1#ʓ:tiv|"Zfx2o̾ΌF{.]^|bw¥_lYnot{oow?͛7?w_777|ͩg'1ksޗ8ڃ}i-gmM|9t4j?jm%{d "{c|_SqXk6n9r6/Uϳ>{&z* /]p•k+Oo>vyiirn|&6zdw0dir+G7 {&ݐƓ*{?MѼVrdkUduU:>1=ME+jr>|:UNnODXj RjX4M&_Su'a6p-q@o%uzW$ڣ5 ۴}j#MU*O6BJkbf5lojΪ|wGx9ՔZ+/{/qTI2h{h "k./¯؍F+xeeOs; 4~qvx4^[[,,lۿJ7wvnp3g}v߿?';;qu:O㘵9KiM]Ks~Y[__zA؛c[X�kl5'6R65ms9!{Cm/^ʅ`~L˗/*8w̙sgpuu\K+Kxi}4&x:ZǓIv8'K_ !a3 0\ɗ|hPP?8Mq B?OB>1ܙ,j>),/$!!yh2#a"k]zVVɅ<ԓiUFKufu4H% JBYb&m^M<":;n?/ﲎ4]+*&H+*&壂9aԬY$ OZ93YGb<T&a4^n2OճT/&K֖OI=!\.M*; }4_ ?ddAS !i Ã'htoo/7wvvlooo޽{w޽{nݺn\~}޻Oifl}9[^bc|*|LkkՏY~,4BTT=U[b3H{cZ_69ٺ<[~Lsb6Z,Nry!<|S!ª˱>LIR8§ r[ǡVò,_|Қڪe'akMqxX WƇuq0=g|O/MbN|DWKfdV]#܇W~G&վ$V¿ߩrn֫I}kkk?ܼ|GۡW>M\.5>/V}Mb\65gm5!'к�=eȽnc5S_LT_fs^Zۣ9osXls9C&yj5Tkݏͥ@�7yoJRXr|ͩ3,1ټ8SQ걽yY~,=t-Ç$<-l@ٜjeI-Nb-{|X).rCx%܌fS� �GnJ4yqk.fr.~,NW_l]笭y?KÇ&E>=l@kSͫ6뱸4'(f4b6ZI,9yOcVx̻}� l:}TVZ!~il%qL^[9kkޗX]os�섰 }=kZMJf9?ڜrӨ?ho_ngy׉!�@�G+ib5Ŷk}R?X^5WZ%CיFǾz N.O`+ !\!js=&$9k]i>fr.:u&Zji~O+G<yד>gc˫ꫵu 1ykg۟IM9K,Lc_A�𤰥{m6k=fr>8ғӺZӜZ[VF]ss2?k片e@�bMڐ}X$56\Q|yEH/59t4>ջd p pQ{O[;2wLcs}ևؘ/$>JNglfs9Jbȡks5UhT[b=dM4� ptfNjc ysvhSmSFJ`44VRzb<}(N<"yLs6V_lQyl'V厲X͕^'i4}崞Flx3Lb@�8}FqQ;+Ӥj>?$ژimicXN·[_ϕil{S9agk G�̩(y4>g>_닰!tKs9Նrz{PCD@�'G`7wrX$g5ڧVΊCz̦r6/:Mc!uŇCK߇Ա#(yݧ4>o㘟˕T(+{$iR9ˡ{FM.bF3 �}7ϡtNN}~9@eck\5нOc&I!.~“ƖF\.֚Zy1_sZ8r.chcdLƒ� �nJtC^kcqSZR6l%qL#9~}4.˓@{!\lk꫕|ͩ\.W3}O,vLDfқI�nG,O֗3b>?V/ݣba0tK4.2xDp1H~Ot%9iZ6O,=r5c*?TcV-�oG9,ibrfmc9wԺ}-KNi&Xw#B GD4N{#}֗'cyT_Njr5bq%uթ<� 0/yoRҼ |9vXR_!b;<| l\z|-ɉViy8f"@�q�Ӧj/ml\m:=~߃ry}x pȟb ~IiK^7$>.%}5ˑ;KO@�؍%9Me>gc/R7Krcfu^b<H~,N3Or~ZIn ) ٺfYmy%k� �%p\7CiS!y;j9$'Z9>m|Y<F}N6OX SX~Y0j%u#[t|R.y0F$o]iR!y>Jr1M7I050p!pDC" IRSԹ٪v?ciӢ# �o4Ck)},c9}[~os5@`ﭾ\}Z',ZIT#:{kObE9�w'y8%=}\=UUVR?ry-1 C @!�~4<\=WUd}3Tv^r8f֣@�gfIO&W&g9׫j�"8@!c$p].J4Pz|@�q8Rm.J4Ct}@G r@ B߃CK:y:Cޔ=C�KnT;T[WmsLr@.{�Q&ɡ3<=(:>ȵJ�N?}sz3T;ËK@B,{(sҫ1Cg 'н� �'p7X"g擃� h 8E\R'fA�Gnl"g>: ,�  >>݃^ϯO @�X4}s|Eg 0#6/<N{}4" � 8Zyxp0 CAϟ='MB�#poON eCxX p9 !τT@�I&�Cb��?7v!�@'#yX .Ñ)@�?gl@��bQ!�GF�@, �TI�@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �@�� �<?|S ����IENDB`ic11��PNG  ��� IHDR��� ��� ���szz���sRGB����DeXIfMM�*����i�������������������������� ������� ����b��HIDATX W[lf^0�uhcH PhZDV["(RBզԴM/R[<TyhHFUR 8J1J4`'띝cڷ!GsΜ_s>I'vfK[Ak ?�k^�MǜW]%MuWi @pt-j?{_>Ryք |css'\qpďyɅFd}l_ݒ;jv@d?~pj*ާGN41/eMGƳ7pGCHY&$=CB@$̪ ;ck\%w?n5FywuumiYn325veS SйH5nsOn݃敫(NԄƈIӨ&B&qUvJd9J#֥țX 3Ǻ'ۡ<tllvW/n5}jJ&bϥdmއX6_ɳ0=J?gֽ^&>C ײQ@[ʣZz `DHQga2 [vBmX{̟#Qu=~,l7J1z05vIJ\NĀXK\!AȜQwб; YnfN$dMhzϚ['" >IЂ(rB#٬oo6 $ءJJ9BwbJ(y,b]xPָ = Ib$R2$>PM&W}9"D6W|['rqvK:\T; \džJ,P~h־^:Q,b^7@~"7QcYL-fhbcyR0uI\. Yw%uHjWHy0ƒ>;= sc휷T1kcXA#Ci \hmZQF8FC]<>cjj035= ȇ5Dhh)B^ G5(4&lxt"wAzKP㣈15u xkCq4e.8ID C XТ3JeQ{i(m; bSse8trv0zqa&v iKo"*Tip'(DnvxcEag9|�ǐw}ifk6J7Adml3*.?\!7 J_!/Ĕ F. X։=wDTUx1!A7_ZՍdi^AB)d-4Iy|v_8D,"FLN6nH2bEǃ"INJEG@5u"U\` Y5< N5.a#J &_ ty!hZƽJCN24a Waz_n4 4џ�3GC5 !#p9BizLֈG=`>{F@~M2_g}PI&1=#/#a3r=w#O.Xc,ӽnk77%$ؕ+7a ;aXJ܍7鐔/h|7Z$ d9cB2ٓ%ib䑅ؗXބy,v29t)m<Y%nBqsGGwfoӼ ($8y"Ɓ\3g^Tw'?}_!o-[����IENDB`info��>bplist00 X$versionY$archiverT$topX$objects�_NSKeyedArchiver Troot U$null WNS.keysZNS.objectsV$classTname_assetcatalog-referenceTicon  !"Z$classnameX$classes\NSDictionary!#XNSObject$)27ILQS[ahp{�������������$�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/PkgInfo�����������������������������������������������������0000644�0001750�0000144�00000000011�15104114162�020347� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������APPL???? �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/MacOS/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020041� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/MacOS/doublecmd���������������������������������������������0000777�0001750�0000144�00000000000�15104114162�024441� 2../../../doublecmd����������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doublecmd.app/Contents/Info.plist��������������������������������������������������0000644�0001750�0000144�00000006061�15104114162�021052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSPrincipalClass</key> <string>TDCCocoaApplication</string> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>doublecmd</string> <key>CFBundleIconFile</key> <string>doublecmd</string> <key>CFBundleLocalizations</key> <array> <string>en</string> <string>be</string> <string>bg</string> <string>ca</string> <string>cs</string> <string>da</string> <string>de</string> <string>es</string> <string>fr</string> <string>hr</string> <string>hu</string> <string>it</string> <string>ja</string> <string>ko</string> <string>nb</string> <string>nl</string> <string>nn</string> <string>pl</string> <string>pt</string> <string>pt_BR</string> <string>ro</string> <string>ru</string> <string>sk</string> <string>sl</string> <string>sr</string> <string>sr@latin</string> <string>tr</string> <string>ua</string> <string>uk</string> <string>zh_CN</string> <string>zh_TW</string> </array> <key>CFBundleName</key> <string>Double Commander</string> <key>CFBundleIdentifier</key> <string>com.company.doublecmd</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> <string>doub</string> <key>CFBundleShortVersionString</key> <string>0.1</string> <key>CFBundleVersion</key> <string>1</string> <key>CSResourcesFileMapped</key> <true /> <key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Viewer</string> <key>CFBundleTypeExtensions</key> <array> <string>*</string> </array> <key>CFBundleTypeOSTypes</key> <array> <string>fold</string> <string>disk</string> <string>****</string> </array> </dict> </array> <key>NSServices</key> <array> <dict> <key>NSMenuItem</key> <dict> <key>default</key> <string>Double Commander</string> </dict> <key>NSMessage</key> <string>openWithNewTab</string> <key>NSPortName</key> <string>Double Commander</string> <key>NSRequiredContext</key> <dict> <key>NSTextContent</key> <string>FilePath</string> </dict> <key>NSReturnTypes</key> <array /> <key>NSSendTypes</key> <array> <string>NSFilenamesPboardType</string> </array> </dict> </array> <key>NSHighResolutionCapable</key> <true /> <key>NSRequiresAquaSystemAppearance</key> <false /> <key>NSSupportsAutomaticGraphicsSwitching</key> <true /> </dict> </plist> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/�������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�013332� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/pasdoc/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014603� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/pasdoc/units-doc-win.txt�������������������������������������������������������0000644�0001750�0000144�00000000413�15104114162�020042� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������..\..\src\udcutils.pas ..\..\src\platform\uOSUtils.pas ..\..\src\platform\uosforms.pas ..\..\src\uexts.pas ..\..\src\ufileprocs.pas ..\..\src\udescr.pas ..\..\src\platform\win\umywindows.pas ..\..\src\platform\unix\umyunix.pas ..\..\src\platform\unix\linux\inotify.pp�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/pasdoc/units-doc-unix.txt������������������������������������������������������0000644�0001750�0000144�00000000413�15104114162�020230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../../src/udcutils.pas ../../src/platform/uOSUtils.pas ../../src/platform/uosforms.pas ../../src/uexts.pas ../../src/ufileprocs.pas ../../src/udescr.pas ../../src/platform/win/umywindows.pas ../../src/platform/unix/umyunix.pas ../../src/platform/unix/linux/inotify.pp�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/pasdoc/docgen.sh���������������������������������������������������������������0000755�0001750�0000144�00000000177�15104114162�016406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # https://pasdoc.github.io mkdir -p html pasdoc --marker en --output html --define UNIX --source units-doc-unix.txt �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/pasdoc/docgen.bat��������������������������������������������������������������0000644�0001750�0000144�00000000174�15104114162�016534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REM https://pasdoc.github.io mkdir html pasdoc --marker en --output html --define MSWINDOWS --source units-doc-win.txt ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/changelog.txt������������������������������������������������������������������0000644�0001750�0000144�00000024567�15104114162�016040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-------------------------------------------------------------------------------- https://doublecmd.sourceforge.io/mantisbt/changelog_page.php -------------------------------------------------------------------------------- 08.10.2011 Release Double Commander 0.5.1 beta -------------------------------------------------------------------------------- 08.10.2011 FIX: Access violation when open archive with symbolic links 05.10.2011 FIX: Bug [3417849] Typo in options section: thubnails->thumbnails. 01.10.2011 FIX: Bug [3402974] Problems with SAMBA resources with authorization 30.09.2011 FIX: Bug [3416235] Incorrect default path to Lua library 30.09.2011 FIX: Bug [3411184] Can not extract empty folder from archive 30.09.2011 FIX: Bug [3415942] Editor->Search&Replace field order is bad... 28.09.2011 FIX: List index out of bounds on deleting separator from toolbar (bug [3415074]). 27.09.2011 FIX: Copying full paths of filenames from search result. 22.09.2011 UPD: Czech language file from Martin Štrobl. 10.09.2011 UPD: Russian language file 09.09.2011 FIX: [Zip plugin] Slow opening of big archives; speed up test operation. 09.09.2011 FIX: Force date, time separators to /, : in case they are UTF-8 characters in current locale (Unix). 08.09.2011 FIX: Try to fix access violation when accessing empty DVD drive (bug [3404533]) 07.09.2011 UPD: Traditional Chinese language file by mlance_2 07.09.2011 FIX: Build libmime with large file support (bug [3403818]). 06.09.2011 FIX: Multi rename files with not ASCII names and using range 04.09.2011 FIX: Move files when can not copy attributes (e.g. move files from NTFS to EXT3 file system under Linux) 03.09.2011 FIX: Delete HotDir with item index = 0 02.09.2011 FIX: Access violation error with some wcx and wfx plugins -------------------------------------------------------------------------------- 28.08.2011 Release Double Commander 0.5.0 beta -------------------------------------------------------------------------------- 21.08.2010 Release Double Commander 0.4.5.2 beta -------------------------------------------------------------------------------- 15.08.2010 FIX: Use case insensitive compare for verify checksum operation 20.04.2010 FIX: Bug [2989234] Does not work with icloud 10.04.2010 ADD: Korean language file by Lee, Cheon-Pung 02.03.2010 UPD: Use Escape key to leave editing command line and focus files panel when command line is empty [2961106]. 01.03.2010 UPD: Ukrainian language file by Ma$terok 01.03.2010 UPD: Polish language file by Krzysztof Modelski 01.03.2010 FIX: Sorting files by size if size > 4GB (bug [2960850]). 25.02.2010 FIX: Bug [2957145] Directory hotlist hotkey issue 25.02.2010 FIX: Bug [2957145] Directory hotlist hotkey issue 25.02.2010 FIX: Bug [2957159] File type color dialog color selection 24.02.2010 ADD: Polish language file by Krzysztof Modelski 24.02.2010 FIX: Get content plugin name 24.02.2010 FIX: ContentGetDetectString function 23.02.2010 FIX: Cross compiling unrar plugin from Linux 32 to 64 -------------------------------------------------------------------------------- 22.02.2010 Release Double Commander 0.4.5.1 beta -------------------------------------------------------------------------------- 22.02.2010 UPD: Better error message when error in CopyFile. 22.02.2010 FIX: Crash in CopyFile when cannot read file. 21.02.2010 FIX: Bug [2955066] Split file 19.02.2010 FIX: Unneeded separator in Actions submenu if no actions were added. 19.02.2010 FIX: Some fixes for bug [2954358] error with write permissions 17.02.2010 UPD: Ukrainian language file by Ma$terok 17.02.2010 UPD: English help files by Rod J 14.02.2010 ADD: File search in multiply directories 13.02.2010 FIX: Hangs on load string from incorrect language file 13.02.2010 UPD: Czech language from Petr Stasiak 12.02.2010 FIX: Bug [2947859] "terminal window size+Apply in preferences". 11.02.2010 FIX: "Open with" under Windows 11.02.2010 UPD: Language files. 11.02.2010 FIX: Changed '=' TargetEqualSource to '>' RightEqualLeft and '<' LeftEqualRight (bug [2947845]). 10.02.2010 FIX: Bug [2947846] '..' item always becomes current if going up inside an archive 10.02.2010 FIX: Crash in drag&drop on Windows Vista/7. 07.02.2010 FIX: Create directory on empty disk 02.02.2010 FIX: Bug [2944649] Copy files 02.02.2010 FIX: Check if application is active instead of checking main form's focus if FileWatcher should not work when application is in the background. This fixes the issue where refreshing file list is not working even when DC is active. 29.01.2010 FIX: Don't execute hotkeys that coincide with quick search combination 27.01.2010 FIX: Drive panel alignment 27.01.2010 FIX: Encoding in Zip archives 27.01.2010 FIX: Rar stores file name in OEM encoding (from RAR documentation) 26.01.2010 FIX: Find files in hidden directories 26.01.2010 FIX: Find hidden folders 25.01.2010 FIX: Don't copy last LineEnding when copy file names to clipboard 24.01.2010 FIX: Bug [2938523] Console 23.01.2010 FIX: Case insensitive file search for non ACSII file names 23.01.2010 FIX: Debian package: Section name 23.01.2010 FIX: Debian package: add "Maintainer" and "Depends" fields 22.01.2010 FIX: Debian package architecture for Linux 64 bit 21.01.2010 FIX: Add Wfx plugins from options dialog 20.01.2010 FIX: Stretch bitmaps from file associations manager 19.01.2010 UPD: File properties dialog interface alignment 19.01.2010 UPD: Options dialog interface alignment 19.01.2010 FIX: Unpack multivolume archives 16.01.2010 FIX: Show only actions names in "Actions submenu" 16.01.2010 FIX: Incorrect save/load search/replace history 16.01.2010 UPD: Use new icon in About window. 15.01.2010 FIX: Case insensitive quick search for non ASCII symbols 15.01.2010 FIX: Viewer/editor window getting bigger every time it is opened (bug [2924166]). 15.01.2010 FIX: Error when can not read/write file description 15.01.2010 FIX: Delete to trash with file paths containing spaces. Fix reading error from gvfs-trash. 13.01.2010 FIX: Skip all files in move operation 13.01.2010 FIX: Bug [2930960] doublecmd.sh -------------------------------------------------------------------------------- 10.01.2009 Release Double Commander 0.4.5 beta -------------------------------------------------------------------------------- 17.05.2009 ADD: Feature Request [2777123] Show occupied space 14.03.2009 FIX: Bug [ 2650798 ] WCX plugins not work property... -------------------------------------------------------------------------------- 28.02.2009 Release Double Commander 0.4 beta -------------------------------------------------------------------------------- 31.01.2009 FIX: Bug [ 2513089 ] panel 18.01.2009 ADD: Drag&Drop to external applications under Windows 18.01.2009 FIX: Bug [ 2513084 ] tabs 12.01.2009 ADD: Pause/Start file operations 11.01.2009 FIX: Bug [ 2496645 ] sort files 05.01.2009 FIX: Bug [ 2403796 ] removing tabs 25.12.2008 FIX: Bug [ 2434007 ] translate mistakes 23.12.2008 FIX: Bug [ 2433957 ] hidden column 13.12.2008 FIX: Bug [ 2421650 ] colors submenu 13.12.2008 FIX: Bug [ 2423750 ] scrollbar in about window 12.12.2008 FIX: Bug [ 2421607 ] different fonts 12.12.2008 FIX: Bug [ 2421601 ] border 09.12.2008 FIX: Bug [ 2403863 ] rubbish after copying 07.12.2008 ADD: Feature Request [ 2404017 ] context menu for Drive button menu 05.12.2008 FIX: Bug [ 2383944 ] drive buttons 03.12.2008 FIX: Bug [ 2379193 ] font at first line 16.11.2008 FIX: Bug [ 1696012 ] Copying in Linux 26.10.2008 FIX: Bug [ 1989488 ] Don't change interface language 15.10.2008 FIX: Bug [ 1741043 ] Copying 13.10.2008 FIX: Bug [ 1874281 ] "No enough free space" instead "Permition denied" 07.09.2009 FIX: Bug [ 1971187 ] Don't work with user rights 07.09.2008 FIX: Bug [ 1934572 ] Zip plugin is down on open read only archive 21.08.2008 ADD: Feature Request [ 1938593 ] More suitable and powerful plugin configuration 18.08.2008 ADD: Feature Request [ 1870517 ] Don't show not critical error messages 09.07.2008 ADD: Feature Request [ 2014247 ] Drive context menu 06.07.2008 ADD: Feature Request [ 1996336 ] Drag&Drop support 06.07.2008 FIX: Bug [ 1947579 ] Quick search by letter and non-alpha characters 03.07.2008 FIX: Bug [ 1945378 ] Crash on changing icon size 17.05.2008 ADD: Feature Request [ 1951507 ] Wipe file 02.05.2008 ADD: Feature Request [ 1880894 ] Open in tab directory under cursor (Ctrl+Up) 28.04.2008 FIX: Bug [ 1953396 ] Error if "Directory hotlist" (Ctrl+D) is empty -------------------------------------------------------------------------------- 15.04.2008 Release Double Commander 0.3.5 alpha -------------------------------------------------------------------------------- 12.04.2008 FIX: Bug [ 1938948 ] Drive chooser shortcuts missing 08.04.2008 FIX: Bug [ 1870771 ] Remove plugin. 04.04.2008 FIX: Bug [ 1934290 ] It is impossible reassign icons for some types. 23.03.2008 FIX: Bug [ 1870551 ] F3 on directory. 23.03.2008 FIX: Bug [ 1921004 ] Error with display drive name on drive menu button. 12.03.2008 FIX: Bug [ 1888653 ] file panel and copy/move 06.03.2008 FIX: Bug [ 1860836 ] "Show" does not refresh 05.03.2008 FIX: Bug [ 1860660 ] Non-translatable strings 28.02.2008 FIX: The filedate of the copied file is <> to original file date (Windows) unlike TotalCmd. 17.02.2008 FIX: Bug [ 1880539 ] Context menu for directory. 04.02.2008 FIX: Bug [ 1886005 ] Быстрый поиск - завешивает. 03.02.2008 FIX: Bug [ 1869787 ] Options -> Colors -> File types and attributes 03.02.2008 ADD: Feature Request [1880515] Enhanced quick search 03.02.2008 FIX: Bug [ 1870552 ] Alt quick search 30.01.2008 FIX: Bug [ 1870808 ] Execute files under Linux 27.01.2008 ADD: Options page "Configuration storage" 26.01.2008 ADD: UnRAR plugin (now it working under Windows and Linux) 26.01.2008 ADD: Feature Request [ 1869250 ] Try to open archive by Ctrl+PageDown 18.01.2008 FIX: Bug [ 1869790 ] Options -> File types colors - illogical 17.01.2007 FIX: Bug [ 1869784 ] Directories and diff 17.01.2007 FIX: Bug [ 1870772 ] lynx navigation, "right" for "up level" 13.01.2007 FIX: Bug [ 1869757 ] External editor 13.01.2007 FIX: Bug [ 1869786 ] External diff - DC not send file. 11.01.2008 FIX: Bug [ 1869243 ] lynx navigation and enter in arhives. 11.01.2008 FIX: Bug [ 1860652 ] "Run Term" Opens terminal in last accessed directory, not in current panel's directory 11.01.2008 FIX: Bug [ 1861911 ] must add version.inc 10.01.2008 FIX: Bug [ 1860271 ] lynx navigation and archives -------------------------------------------------------------------------------- 26.12.2007 Release Double Commander 0.3 alpha �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/README.txt���������������������������������������������������������������������0000644�0001750�0000144�00000003611�15104114162�015031� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������******************************************************************************** Double Commander ******************************************************************************** Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. ******************************************************************************** For details of compiling see the file INSTALL.txt. ******************************************************************************** ** This program is free software; you can redistribute it and/or modify ** ** it under the terms of the GNU General Public License as published by ** ** the Free Software Foundation; either version 2 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 General Public License for more details. ** ** ** ** You should have received a copy of the GNU General Public License ** ** along with this program. If not, see <http://www.gnu.org/licenses/>. ** ******************************************************************************** ** ** ** For more details about license see the file COPYING.txt. ** ** ** ********************************************************************************�����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/INSTALL.txt��������������������������������������������������������������������0000644�0001750�0000144�00000004546�15104114162�015212� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Compiling Double Commander 1) What you need? Double Commander is developed with Free Pascal and Lazarus. Current version requires at least FPC 3.2.2 and Lazarus 2.2.0 (3.0 under macOS). 2) Using the IDE to develop and build DC. If you want to use Lazarus IDE to develop Double Commander, first you have to install a few additional components all of which reside in components directory of DC sources. You must open each .lpk package file: - chsdet/chsdet.lpk - multithreadprocs/multithreadprocslaz.lpk - kascrypt/kascrypt.lpk - doublecmd/doublecmd_common.lpk - gifanim/pkg_gifanim.lpk - KASToolBar/kascomp.lpk - synunihighlighter/synuni.lpk - viewer/viewerpackage.lpk - virtualterminal/virtualterminal.lpk and install it into Lazarus (menu: Package -> Open package file (.lpk) -> Browse to needed .lpk file -> Press "Install", if "Install" disabled then press "Compile" instead). Choose "No" when asked for rebuilding Lazarus after each package then rebuild Lazarus when you have installed all of them. After rebuilding Lazarus open the project file src/doublecmd.lpi. Compile. 3) Building DC from command line. From command line (Windows) Use build.bat script to build DC on Windows. First you need the lazbuild utility of Lazarus to be somewhere in your PATH or you need to edit the build script and change the lazpath variable to point to it. Execute the script to start the build process. Make sure you use all parameter if you're building for the first time, so that also components and plugins are built: > build.bat release or alternatively without plugins > build.bat components > build.bat doublecmd From command line (Linux) Use build.sh script to build DC on Linux. First you need the lazbuild utility of Lazarus to be somewhere in your PATH and if you installed a Lazarus package it should already be there. Otherwise you need to edit the build script and change the lazbuild variable to point to it. On Linux three widgetsets are supported: GTK2, Qt4 and Qt5. You can choose one by setting lcl environment variable before executing the script to either gtk2, qt or qt5 for example: $ lcl=qt ./build.sh Execute the script to start the build process. Make sure you use all parameter if you're building for the first time, so that also components and plugins are built: $ ./build.sh release or alternatively without plugins $ ./build.sh components $ ./build.sh doublecmd ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/COPYING.txt��������������������������������������������������������������������0000644�0001750�0000144�00000043254�15104114162�015213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/COPYING.modifiedLGPL.txt�������������������������������������������������������0000644�0001750�0000144�00000002353�15104114162�017444� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is the file COPYING.modifiedLGPL, it applies to several units in the Lazarus sources distributed by members of the Lazarus Development Team. All files contains headers showing the appropriate license. See there if this modification can be applied. These files are distributed under the Library GNU General Public License (see the file COPYING.LGPL) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you didn't receive a copy of the file COPYING.LGPL, contact: Free Software Foundation, Inc., 675 Mass Ave Cambridge, MA 02139 USA �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/COPYING.LGPL.txt���������������������������������������������������������������0000644�0001750�0000144�00000061447�15104114162�015754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/doc/COPYING.FPC.txt����������������������������������������������������������������0000644�0001750�0000144�00000002275�15104114162�015620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is the file COPYING.FPC, it applies to the Free Pascal Run-Time Library (RTL) and packages (packages) distributed by members of the Free Pascal Development Team. The source code of the Free Pascal Runtime Libraries and packages are distributed under the Library GNU General Public License (see the file COPYING) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you didn't receive a copy of the file COPYING, contact: Free Software Foundation 675 Mass Ave Cambridge, MA 02139 USA �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/default/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014211� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/default/pixmaps.txt����������������������������������������������������������������0000644�0001750�0000144�00000001106�15104114162�016431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������avi=video-x-generic bat=application-x-shellscript deb=application-x-deb doc=x-office-document docx=x-office-document htm=text-html html=text-html iso=application-x-cd-image jpeg=image-x-generic jpg=image-x-generic log=text-x-log lua=text-x-lua mp2=audio-x-generic mp3=audio-x-generic odp=x-office-presentation ods=x-office-spreadsheet odt=x-office-document pas=text-x-pascal pdf=application-pdf po=text-x-po ppt=x-office-presentation pptx=x-office-presentation rpm=application-x-rpm sh=application-x-shellscript txt=text-x-generic xls=x-office-spreadsheet xlsx=x-office-spreadsheet ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/default/multiarc.ini���������������������������������������������������������������0000644�0001750�0000144�00000005641�15104114162�016540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[7Z] Extension=7z Description=7-Zip - www.7-zip.org ID=37 7A BC AF 27 1C IDPos=0 Archiver=7za Start=^------------------- End=^------------------- Format0=yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp n+ List=%P -r0 l {-p%W} %AQ Extract=%P x -y {-p%W} {%S} %AQ @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQU Test=%P t -y {%S} %AQ @%LQU Delete=%P d -y {%S} %AQ @%LQU Add=%P a -mx -y {-p%W} {-v%V} {%S} %AQ @%LQU AddSelfExtract=%P a -mx -y -sfx {-p%W} {-v%V} {%S} %AQ @%LQU PasswordQuery=Enter password FormMode=8 Output=0 Enabled=0 Debug=0 [7Z (ro)] Archiver=7z Description=7-Zip - www.7-zip.org Extension=cab,z,taz,lzh,lha,iso,wim,swm,dmg,xar,hfs,ntfs,fat,vhd,mbr Start=^------------------- End=^------------------- Format0=yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp n+ List=%P -r0 l {-p%W} %AQ Extract=%P x -y {-p%W} {%S} %AQ @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQU Test=%P t -y {%S} %AQ @%LQU PasswordQuery=Enter password FormMode=8 Enabled=0 Output=0 Debug=0 [ACE] Archiver=ace Description=ACE v2.0.4 Extension=ace Start=^Date End=^listed: Format0=dd.tt.yy│hh:mm│ppppppppppp│zzzzzzzzz│ │ n+ List=%P v -y %AQ Extract=%P x -y {-p%W} {%S} %AQ @%LQA ExtractWithoutPath=%P e -y {-p%W} {%S} %AQ @%LQA Test=%P t -y %AQ Delete=%P d -y %AQ @%LQA Add=%P a -y {-p%W} {-v%V} {%S} %AQ @%LQA AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQ @%LQA Enabled=0 Output=0 Debug=0 [ARJ] Description=ARJ 3.15 by ARJ Software, Inc. Archiver=arj ID=60 EA IDPos=0 Extension=arj Start=^------------ End=^------------ Format0=* n+ Format1=???????????? zzzzzzzzzz pppppppppp yy-tt-dd hh:mm:ss aaaaaa Format2=? Format3=? List=%P v %AQ Extract=%P x -y {-g%W} {%S} %AQ !%LQA ExtractWithoutPath=%P e -y {-g%W} {%S} %AQ !%LQA Test=%P t -y {%S} %AQ Delete=%P d -y {%S} %AQ !%LQA Add=%P a -y {-g%W} {-v%V} {%S} %AQ !%LQA Enabled=0 Output=0 Debug=0 [ZPAQ] Archiver=zpaq Description=ZPAQ - http://mattmahoney.net/dc/zpaq.html IDSeekRange=0 Extension=zpaq Start= End=shown Format0=- yyyy-tt-dd hh:mm:ss$z+$aaaaa$n+ List=%P l %AQ Extract=%P x %AQ {%S} {-key %W} ExtractWithoutPath= Test=%P l %AQ -test Add=%P a %AQ %FQU {%S} {-key %W} FormMode=1 Enabled=0 Output=0 Debug=0 [FreeArc] Archiver=arc Description=FreeArc 0.67 ID=41 72 43 01 IDPos=0, -38, -39, -40, <SeekID> IDSeekRange= Extension=arc Start=^-- End=^-- Format0=yyyy tt dd hh mm ss aaaaaaa zzzzzzzzzzzzzzz ppppppppppppppp rrrrrrrr n+ List=%P v --noarcext -- %AQ Extract=%P x {-p%W} -y --noarcext -sclANSI -- %AQ @%LA ExtractWithoutPath=%P e {-p%W} -y --noarcext -sclANSI -- %AQ @%LA Test=%P t --noarcext -sclANSI -- %AQ Delete=%P d --noarcext -sclANSI -- %AQ @%LA Add=%P a {-p%W} {-ap%RQA} --noarcext -sclANSI {%S} -- %AQ @%LA AddSelfExtract=%P a {-p%W} {-ap%RQA} -sfx --noarcext -sclANSI {%S} -- %AQ @%LA PasswordQuery= FormMode=0 Enabled=0 Output=0 Debug=0 �����������������������������������������������������������������������������������������������doublecmd-1.1.30/components/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�014752� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020174� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/virtualterminal.pas�������������������������������������0000644�0001750�0000144�00000000674�15104114162�024132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit VirtualTerminal; {$warn 5023 off : no warning about unused units} interface uses VTColorTable, VTEmuCtl, VTEmuEsc, VTWideCharWidth, VTEmuPty, LazarusPackageIntf; implementation procedure Register; begin end; initialization RegisterPackage('VirtualTerminal', @Register); end. ��������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/virtualterminal.lpk�������������������������������������0000644�0001750�0000144�00000003072�15104114162�024130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="5"> <PathDelim Value="\"/> <Name Value="VirtualTerminal"/> <Type Value="RunAndDesignTime"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <OtherUnitFiles Value="source;source\$(SrcOS)"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> </CompilerOptions> <Files Count="5"> <Item1> <Filename Value="source\vtcolortable.pas"/> <UnitName Value="VTColorTable"/> </Item1> <Item2> <Filename Value="source\vtemuctl.pas"/> <UnitName Value="VTEmuCtl"/> </Item2> <Item3> <Filename Value="source\vtemuesc.pas"/> <UnitName Value="VTEmuEsc"/> </Item3> <Item4> <Filename Value="source\vtwidecharwidth.pas"/> <UnitName Value="VTWideCharWidth"/> </Item4> <Item5> <Filename Value="source\$(SrcOS)\vtemupty.pas"/> <UnitName Value="VTEmuPty"/> </Item5> </Files> <RequiredPkgs Count="3"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> <Item3> <PackageName Value="FCL"/> </Item3> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <UseFileFilters Value="True"/> </PublishOptions> </Package> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/�������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021474� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/win/���������������������������������������������0000755�0001750�0000144�00000000000�15104114162�022271� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/win/vtemupty.pas���������������������������������0000644�0001750�0000144�00000035745�15104114162�024711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Windows pseudoterminal device implementation Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit VTEmuPty; {$mode delphi} interface uses Classes, SysUtils, LCLProc, LCLType, Windows, VTEmuCtl; type { TPtyDevice } TPtyDevice = class(TCustomPtyDevice) private FPty: PVOID; FSize: TCoord; FLength: Integer; FThread: TThread; FPipeIn, FPipeOut: THandle; FBuffer: array[0..8191] of AnsiChar; protected procedure ReadySync; procedure ReadThread; procedure DestroyPseudoConsole; procedure SetConnected(AValue: Boolean); override; function CreatePseudoConsole(const ACommand: String): Boolean; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function WriteStr(const Str: string): Integer; override; function SetCurrentDir(const Path: String): Boolean; override; function SetScreenSize(aCols, aRows: Integer): Boolean; override; end; implementation uses CTypes, DCOSUtils, DCConvertEncoding; type TConsoleType = (ctNone, ctNative, ctEmulate); var ConsoleType: TConsoleType = ctNone; procedure ClosePipe(var AHandle: THandle); begin if (AHandle <> INVALID_HANDLE_VALUE) then begin CloseHandle(AHandle); AHandle:= INVALID_HANDLE_VALUE; end; end; { ******************************************************************************* Windows Pseudo Console (ConPTY), Windows 10 1809 and higher ******************************************************************************* } const EXTENDED_STARTUPINFO_PRESENT = $00080000; PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = $00020016; type PHPCON = ^HPCON; HPCON = type PVOID; SIZE_T = type ULONG_PTR; PSIZE_T = type PULONG_PTR; LPPROC_THREAD_ATTRIBUTE_LIST = type PVOID; STARTUPINFOEXW = record StartupInfo: STARTUPINFOW; lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST; end; var CreatePseudoConsole: function(size: COORD; hInput: HANDLE; hOutput: HANDLE; dwFlags: DWORD; phPC: PHPCON): HRESULT; stdcall; ClosePseudoConsole: procedure(hPC: HPCON); stdcall; ResizePseudoConsole: function(hPC: HPCON; size: COORD): HRESULT; stdcall; InitializeProcThreadAttributeList: function(lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST; dwAttributeCount: DWORD; dwFlags: DWORD; lpSize: PSIZE_T): BOOL; stdcall; UpdateProcThreadAttribute: function(lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST; dwFlags: DWORD; Attribute: DWORD_PTR; lpValue: PVOID; cbSize: SIZE_T; lpPreviousValue: PVOID; lpReturnSize: PSIZE_T): BOOL; stdcall; DeleteProcThreadAttributeList: procedure(lpAttributeList: LPPROC_THREAD_ATTRIBUTE_LIST); stdcall; function CreatePseudoConsoleNew(const ACommand: String; phPC: PPointer; phPipeIn, phPipeOut: PHandle; ASize: COORD): Boolean; var attrListSize: SIZE_T = 0; startupInfo: STARTUPINFOEXW; piClient: PROCESS_INFORMATION; hPipePTYIn: HANDLE = INVALID_HANDLE_VALUE; hPipePTYOut: HANDLE = INVALID_HANDLE_VALUE; begin startupInfo:= Default(STARTUPINFOEXW); Result:= CreatePipe(hPipePTYIn, phPipeOut^, nil, 0) and CreatePipe(phPipeIn^, hPipePTYOut, nil, 0); if Result then begin Result:= CreatePseudoConsole(ASize, hPipePTYIn, hPipePTYOut, 0, phPC) = S_OK; // We can close the handles here because they are duplicated in the ConHost if Result then begin CloseHandle(hPipePTYIn); CloseHandle(hPipePTYOut); hPipePTYIn:= INVALID_HANDLE_VALUE; hPipePTYOut:=INVALID_HANDLE_VALUE; end; end; if Result then begin startupInfo.StartupInfo.cb:= SizeOf(STARTUPINFOEXW); InitializeProcThreadAttributeList(nil, 1, 0, @attrListSize); startupInfo.lpAttributeList:= GetMem(attrListSize); Result:= Assigned(startupInfo.lpAttributeList); if Result then begin // Initialize thread attribute list and set Pseudo Console attribute Result:= InitializeProcThreadAttributeList(startupInfo.lpAttributeList, 1, 0, @attrListSize) and UpdateProcThreadAttribute(startupInfo.lpAttributeList,0, PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, phPC^, SizeOf(HPCON), nil, nil); end; end; if Result then begin Result:= CreateProcessW(nil, PWideChar(CeUtf8ToUtf16(ACommand)), nil, nil, False, EXTENDED_STARTUPINFO_PRESENT, nil, nil, @startupInfo.StartupInfo, @piClient); end; if not Result then begin ClosePipe(phPipeIn^); ClosePipe(phPipeOut^); ClosePipe(hPipePTYIn); ClosePipe(hPipePTYOut); end; // Cleanup attribute list if Assigned(startupInfo.lpAttributeList) then begin DeleteProcThreadAttributeList(startupInfo.lpAttributeList); FreeMem(startupInfo.lpAttributeList); end; end; function InitializeNew: Boolean; var hModule: HINST; begin Result:= (Win32MajorVersion >= 10); if Result then begin hModule:= GetModuleHandle(Kernel32); CreatePseudoConsole:= GetProcAddress(hModule, 'CreatePseudoConsole'); Result:= Assigned(CreatePseudoConsole); if Result then begin ClosePseudoConsole:= GetProcAddress(hModule, 'ClosePseudoConsole'); ResizePseudoConsole:= GetProcAddress(hModule, 'ResizePseudoConsole'); UpdateProcThreadAttribute:= GetProcAddress(hModule, 'UpdateProcThreadAttribute'); DeleteProcThreadAttributeList:= GetProcAddress(hModule, 'DeleteProcThreadAttributeList'); InitializeProcThreadAttributeList:= GetProcAddress(hModule, 'InitializeProcThreadAttributeList'); end; end; end; { ******************************************************************************* WinPTY ******************************************************************************* } const WINPTY_MOUSE_MODE_AUTO = 1; WINPTY_MOUSE_MODE_FORCE = 2; // Agent RPC call: process creation WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN = 1; WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN = 2; // Configuration of a new agent WINPTY_FLAG_CONERR = $01; WINPTY_FLAG_PLAIN_OUTPUT = $02; WINPTY_FLAG_COLOR_ESCAPES = $04; WINPTY_FLAG_ALLOW_CURPROC_DESKTOP_CREATION = $08; // Error codes WINPTY_ERROR_SUCCESS = 0; WINPTY_ERROR_OUT_OF_MEMORY = 1; WINPTY_ERROR_SPAWN_CREATE_PROCESS_FAILED = 2; WINPTY_ERROR_LOST_CONNECTION = 3; WINPTY_ERROR_AGENT_EXE_MISSING = 4; WINPTY_ERROR_UNSPECIFIED = 5; WINPTY_ERROR_AGENT_DIED = 6; WINPTY_ERROR_AGENT_TIMEOUT = 7; WINPTY_ERROR_AGENT_CREATION_FAILED = 8; type winpty_t = record end; Pwinpty_t = ^winpty_t; winpty_result_t = type DWORD; winpty_config_t = record end; Pwinpty_config_t = ^winpty_config_t; winpty_error_t = record end; winpty_error_ptr_t = ^winpty_error_t; Pwinpty_error_ptr_t = ^winpty_error_ptr_t; winpty_spawn_config_t = record end; Pwinpty_spawn_config_t = ^winpty_spawn_config_t; var winpty_config_new: function(agentFlags: UInt64; err: Pwinpty_error_ptr_t): Pwinpty_config_t; cdecl; winpty_config_free: procedure(cfg: Pwinpty_config_t); cdecl; winpty_config_set_initial_size: procedure(cfg: Pwinpty_config_t; cols, rows: cint); cdecl; winpty_config_set_mouse_mode: procedure(cfg: Pwinpty_config_t; mouseMode: cint); cdecl; winpty_open: function(const cfg: Pwinpty_config_t; err: Pwinpty_error_ptr_t): Pwinpty_t; cdecl; winpty_free: procedure(wp: Pwinpty_t); cdecl; winpty_error_code: function(err: winpty_error_ptr_t): winpty_result_t; cdecl; winpty_error_msg: function(err: winpty_error_ptr_t): LPCWSTR; cdecl; winpty_error_free: procedure(err: winpty_error_ptr_t); cdecl; winpty_spawn_config_new: function(spawnFlags: UInt64; appname, cmdline, cwd, env: LPCWSTR; err: Pwinpty_error_ptr_t): Pwinpty_spawn_config_t; cdecl; winpty_spawn_config_free: procedure(cfg: Pwinpty_spawn_config_t); cdecl; winpty_spawn: function(wp: Pwinpty_t; const cfg: Pwinpty_spawn_config_t; process_handle, thread_handle: PHandle; create_process_error: PDWORD; err: Pwinpty_error_ptr_t): BOOL; cdecl; winpty_set_size: function(wp: Pwinpty_t; cols, rows: cint; err: Pwinpty_error_ptr_t): BOOL; cdecl; winpty_conin_name: function(wp: Pwinpty_t): LPCWSTR; cdecl; winpty_conout_name: function(wp: Pwinpty_t): LPCWSTR; cdecl; winpty_conerr_name: function(wp: Pwinpty_t): LPCWSTR; cdecl; function CreatePseudoConsoleOld(const ACommand: String; phPC: PPointer; phPipeIn, phPipeOut: PHandle; ASize: COORD): Boolean; var childHandle: HANDLE; lastError: DWORD = 0; agentCfg: Pwinpty_config_t; spawnCfg: Pwinpty_spawn_config_t; agentFlags: DWORD = WINPTY_FLAG_ALLOW_CURPROC_DESKTOP_CREATION; begin // SetEnvironmentVariableW('WINPTY_SHOW_CONSOLE', '1'); agentCfg:= winpty_config_new(agentFlags, nil); Result:= Assigned(agentCfg); if Result then begin winpty_config_set_initial_size(agentCfg, ASize.X, ASize.Y); phPC^:= winpty_open(agentCfg, nil); Result:= Assigned(phPC^); winpty_config_free(agentCfg); if Result then begin phPipeIn^:= CreateFileW(winpty_conout_name(phPC^), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); phPipeOut^:= CreateFileW(winpty_conin_name(phPC^), GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); spawnCfg:= winpty_spawn_config_new(WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN, nil, PWideChar(CeUtf8ToUtf16(ACommand)), nil, nil, nil); Result:= Assigned(spawnCfg); if Result then begin Result:= winpty_spawn(phPC^, spawnCfg, @childHandle, nil, @lastError, nil); winpty_spawn_config_free(spawnCfg); end; if not Result then begin ClosePipe(phPipeIn^); ClosePipe(phPipeOut^); winpty_free(phPC^); end; end; end; end; var libwinpty: HINST; function InitializeOld: Boolean; begin libwinpty:= LoadLibrary('winpty.dll'); Result:= (libwinpty <> 0); if Result then begin winpty_config_new:= GetProcAddress(libwinpty, 'winpty_config_new'); winpty_config_free:= GetProcAddress(libwinpty, 'winpty_config_free'); winpty_config_set_initial_size:= GetProcAddress(libwinpty, 'winpty_config_set_initial_size'); winpty_config_set_mouse_mode:= GetProcAddress(libwinpty, 'winpty_config_set_mouse_mode'); winpty_open:= GetProcAddress(libwinpty, 'winpty_open'); winpty_free:= GetProcAddress(libwinpty, 'winpty_free'); winpty_error_code:= GetProcAddress(libwinpty, 'winpty_error_code'); winpty_error_msg:= GetProcAddress(libwinpty, 'winpty_error_msg'); winpty_error_free:= GetProcAddress(libwinpty, 'winpty_error_free'); winpty_spawn_config_new:= GetProcAddress(libwinpty, 'winpty_spawn_config_new'); winpty_spawn_config_free:= GetProcAddress(libwinpty, 'winpty_spawn_config_free'); winpty_spawn:= GetProcAddress(libwinpty, 'winpty_spawn'); winpty_set_size:= GetProcAddress(libwinpty, 'winpty_set_size'); winpty_conin_name:= GetProcAddress(libwinpty, 'winpty_conin_name'); winpty_conout_name:= GetProcAddress(libwinpty, 'winpty_conout_name'); winpty_conerr_name:= GetProcAddress(libwinpty, 'winpty_conerr_name'); end; end; { TPtyDevice } procedure TPtyDevice.SetConnected(AValue: Boolean); var AShell: String; begin if FConnected = AValue then Exit; FConnected:= AValue; if FConnected then begin AShell:= mbGetEnvironmentVariable('ComSpec'); if Length(AShell) = 0 then AShell:= 'cmd.exe'; FConnected:= CreatePseudoConsole(AShell); if FConnected then begin FThread:= TThread.ExecuteInThread(ReadThread); end; end else begin DestroyPseudoConsole; end; end; procedure TPtyDevice.ReadySync; begin if Assigned(FOnRxBuf) then FOnRxBuf(Self, FBuffer, FLength); end; procedure TPtyDevice.ReadThread; begin while FConnected do begin FLength:= FileRead(FPipeIn, FBuffer, SizeOf(FBuffer)); if (FLength > 0) then begin TThread.Synchronize(nil, ReadySync); end; end; end; procedure TPtyDevice.DestroyPseudoConsole; begin case ConsoleType of ctNative: ClosePseudoConsole(FPty); ctEmulate: winpty_free(FPty); end; FPty:= nil; ClosePipe(FPipeIn); ClosePipe(FPipeOut); end; function TPtyDevice.CreatePseudoConsole(const ACommand: String): Boolean; begin case ConsoleType of ctNative: Result:= CreatePseudoConsoleNew(ACommand, @FPty, @FPipeIn, @FPipeOut, FSize); ctEmulate: Result:= CreatePseudoConsoleOld(ACommand, @FPty, @FPipeIn, @FPipeOut, FSize); ctNone: Result:= False; end; end; constructor TPtyDevice.Create(AOwner: TComponent); begin inherited Create(AOwner); FSize.X:= 80; FSize.Y:= 25; FPipeIn:= INVALID_HANDLE_VALUE; FPipeOut:= INVALID_HANDLE_VALUE; end; destructor TPtyDevice.Destroy; begin inherited Destroy; SetConnected(False); end; function TPtyDevice.SetCurrentDir(const Path: String): Boolean; begin Result:= WriteStr('cd /D "' + Path + '"' + #13#10) > 0; end; function TPtyDevice.WriteStr(const Str: string): Integer; begin Result:= FileWrite(FPipeOut, Pointer(Str)^, Length(Str)); end; function TPtyDevice.SetScreenSize(aCols, aRows: Integer): Boolean; var ASize: TCoord; begin if (FPty = nil) then Exit(False); if (ConsoleType = ctEmulate) then begin Result:= winpty_set_size(FPty, aCols, aRows, nil); end else if (ConsoleType = ctNative) then begin ASize.Y:= aRows; ASize.X:= aCols; Result:= Succeeded(ResizePseudoConsole(FPty, ASize)); end; if Result then begin FSize.Y:= aRows; FSize.X:= aCols; end; end; procedure Initialize; begin if InitializeNew then ConsoleType:= ctNative else if InitializeOld then ConsoleType:= ctEmulate; end; initialization Initialize; end. ���������������������������doublecmd-1.1.30/components/virtualterminal/source/vtwidecharwidth.pas������������������������������0000644�0001750�0000144�00000111217�15104114162�025404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This is a pascal implementation of wcwidth() function Copyright (C) 2022 Alexander Koblov (alexx2000@mail.ru) Based on https://github.com/termux/wcwidth Copyright (c) 2016 Fredrik Fornwall <fredrik@fornwall.net> Based on https://github.com/jquast/wcwidth Copyright (c) 2014 Jeff Quast <contact@jeffquast.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Markus Kuhn -- 2007-05-26 (Unicode 5.0) Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted. The author disclaims all warranties with regard to this software. } unit VTWideCharWidth; {$mode objfpc} interface uses SysUtils, LCLType; function UTF8Width(const Ch: TUTF8Char): Integer; implementation uses LazUTF8; type Pwidth_interval = ^Twidth_interval; Twidth_interval = array[0..1] of UCS4Char; const // From https://github.com/jquast/wcwidth/blob/master/wcwidth/table_zero.py // at commit b29897e5a1b403a0e36f7fc991614981cbc42475 (2020-07-14): ZERO_WIDTH: array[0..323] of Twidth_interval = ( ($00300, $0036f), // Combining Grave Accent ..Combining Latin Small Le ($00483, $00489), // Combining Cyrillic Titlo..Combining Cyrillic Milli ($00591, $005bd), // Hebrew Accent Etnahta ..Hebrew Point Meteg ($005bf, $005bf), // Hebrew Point Rafe ..Hebrew Point Rafe ($005c1, $005c2), // Hebrew Point Shin Dot ..Hebrew Point Sin Dot ($005c4, $005c5), // Hebrew Mark Upper Dot ..Hebrew Mark Lower Dot ($005c7, $005c7), // Hebrew Point Qamats Qata..Hebrew Point Qamats Qata ($00610, $0061a), // Arabic Sign Sallallahou ..Arabic Small Kasra ($0064b, $0065f), // Arabic Fathatan ..Arabic Wavy Hamza Below ($00670, $00670), // Arabic Letter Superscrip..Arabic Letter Superscrip ($006d6, $006dc), // Arabic Small High Ligatu..Arabic Small High Seen ($006df, $006e4), // Arabic Small High Rounde..Arabic Small High Madda ($006e7, $006e8), // Arabic Small High Yeh ..Arabic Small High Noon ($006ea, $006ed), // Arabic Empty Centre Low ..Arabic Small Low Meem ($00711, $00711), // Syriac Letter Superscrip..Syriac Letter Superscrip ($00730, $0074a), // Syriac Pthaha Above ..Syriac Barrekh ($007a6, $007b0), // Thaana Abafili ..Thaana Sukun ($007eb, $007f3), // Nko Combining Short High..Nko Combining Double Dot ($007fd, $007fd), // Nko Dantayalan ..Nko Dantayalan ($00816, $00819), // Samaritan Mark In ..Samaritan Mark Dagesh ($0081b, $00823), // Samaritan Mark Epentheti..Samaritan Vowel Sign A ($00825, $00827), // Samaritan Vowel Sign Sho..Samaritan Vowel Sign U ($00829, $0082d), // Samaritan Vowel Sign Lon..Samaritan Mark Nequdaa ($00859, $0085b), // Mandaic Affrication Mark..Mandaic Gemination Mark ($008d3, $008e1), // Arabic Small Low Waw ..Arabic Small High Sign S ($008e3, $00902), // Arabic Turned Damma Belo..Devanagari Sign Anusvara ($0093a, $0093a), // Devanagari Vowel Sign Oe..Devanagari Vowel Sign Oe ($0093c, $0093c), // Devanagari Sign Nukta ..Devanagari Sign Nukta ($00941, $00948), // Devanagari Vowel Sign U ..Devanagari Vowel Sign Ai ($0094d, $0094d), // Devanagari Sign Virama ..Devanagari Sign Virama ($00951, $00957), // Devanagari Stress Sign U..Devanagari Vowel Sign Uu ($00962, $00963), // Devanagari Vowel Sign Vo..Devanagari Vowel Sign Vo ($00981, $00981), // Bengali Sign Candrabindu..Bengali Sign Candrabindu ($009bc, $009bc), // Bengali Sign Nukta ..Bengali Sign Nukta ($009c1, $009c4), // Bengali Vowel Sign U ..Bengali Vowel Sign Vocal ($009cd, $009cd), // Bengali Sign Virama ..Bengali Sign Virama ($009e2, $009e3), // Bengali Vowel Sign Vocal..Bengali Vowel Sign Vocal ($009fe, $009fe), // Bengali Sandhi Mark ..Bengali Sandhi Mark ($00a01, $00a02), // Gurmukhi Sign Adak Bindi..Gurmukhi Sign Bindi ($00a3c, $00a3c), // Gurmukhi Sign Nukta ..Gurmukhi Sign Nukta ($00a41, $00a42), // Gurmukhi Vowel Sign U ..Gurmukhi Vowel Sign Uu ($00a47, $00a48), // Gurmukhi Vowel Sign Ee ..Gurmukhi Vowel Sign Ai ($00a4b, $00a4d), // Gurmukhi Vowel Sign Oo ..Gurmukhi Sign Virama ($00a51, $00a51), // Gurmukhi Sign Udaat ..Gurmukhi Sign Udaat ($00a70, $00a71), // Gurmukhi Tippi ..Gurmukhi Addak ($00a75, $00a75), // Gurmukhi Sign Yakash ..Gurmukhi Sign Yakash ($00a81, $00a82), // Gujarati Sign Candrabind..Gujarati Sign Anusvara ($00abc, $00abc), // Gujarati Sign Nukta ..Gujarati Sign Nukta ($00ac1, $00ac5), // Gujarati Vowel Sign U ..Gujarati Vowel Sign Cand ($00ac7, $00ac8), // Gujarati Vowel Sign E ..Gujarati Vowel Sign Ai ($00acd, $00acd), // Gujarati Sign Virama ..Gujarati Sign Virama ($00ae2, $00ae3), // Gujarati Vowel Sign Voca..Gujarati Vowel Sign Voca ($00afa, $00aff), // Gujarati Sign Sukun ..Gujarati Sign Two-circle ($00b01, $00b01), // Oriya Sign Candrabindu ..Oriya Sign Candrabindu ($00b3c, $00b3c), // Oriya Sign Nukta ..Oriya Sign Nukta ($00b3f, $00b3f), // Oriya Vowel Sign I ..Oriya Vowel Sign I ($00b41, $00b44), // Oriya Vowel Sign U ..Oriya Vowel Sign Vocalic ($00b4d, $00b4d), // Oriya Sign Virama ..Oriya Sign Virama ($00b55, $00b56), // (nil) ..Oriya Ai Length Mark ($00b62, $00b63), // Oriya Vowel Sign Vocalic..Oriya Vowel Sign Vocalic ($00b82, $00b82), // Tamil Sign Anusvara ..Tamil Sign Anusvara ($00bc0, $00bc0), // Tamil Vowel Sign Ii ..Tamil Vowel Sign Ii ($00bcd, $00bcd), // Tamil Sign Virama ..Tamil Sign Virama ($00c00, $00c00), // Telugu Sign Combining Ca..Telugu Sign Combining Ca ($00c04, $00c04), // Telugu Sign Combining An..Telugu Sign Combining An ($00c3e, $00c40), // Telugu Vowel Sign Aa ..Telugu Vowel Sign Ii ($00c46, $00c48), // Telugu Vowel Sign E ..Telugu Vowel Sign Ai ($00c4a, $00c4d), // Telugu Vowel Sign O ..Telugu Sign Virama ($00c55, $00c56), // Telugu Length Mark ..Telugu Ai Length Mark ($00c62, $00c63), // Telugu Vowel Sign Vocali..Telugu Vowel Sign Vocali ($00c81, $00c81), // Kannada Sign Candrabindu..Kannada Sign Candrabindu ($00cbc, $00cbc), // Kannada Sign Nukta ..Kannada Sign Nukta ($00cbf, $00cbf), // Kannada Vowel Sign I ..Kannada Vowel Sign I ($00cc6, $00cc6), // Kannada Vowel Sign E ..Kannada Vowel Sign E ($00ccc, $00ccd), // Kannada Vowel Sign Au ..Kannada Sign Virama ($00ce2, $00ce3), // Kannada Vowel Sign Vocal..Kannada Vowel Sign Vocal ($00d00, $00d01), // Malayalam Sign Combining..Malayalam Sign Candrabin ($00d3b, $00d3c), // Malayalam Sign Vertical ..Malayalam Sign Circular ($00d41, $00d44), // Malayalam Vowel Sign U ..Malayalam Vowel Sign Voc ($00d4d, $00d4d), // Malayalam Sign Virama ..Malayalam Sign Virama ($00d62, $00d63), // Malayalam Vowel Sign Voc..Malayalam Vowel Sign Voc ($00d81, $00d81), // (nil) ..(nil) ($00dca, $00dca), // Sinhala Sign Al-lakuna ..Sinhala Sign Al-lakuna ($00dd2, $00dd4), // Sinhala Vowel Sign Ketti..Sinhala Vowel Sign Ketti ($00dd6, $00dd6), // Sinhala Vowel Sign Diga ..Sinhala Vowel Sign Diga ($00e31, $00e31), // Thai Character Mai Han-a..Thai Character Mai Han-a ($00e34, $00e3a), // Thai Character Sara I ..Thai Character Phinthu ($00e47, $00e4e), // Thai Character Maitaikhu..Thai Character Yamakkan ($00eb1, $00eb1), // Lao Vowel Sign Mai Kan ..Lao Vowel Sign Mai Kan ($00eb4, $00ebc), // Lao Vowel Sign I ..Lao Semivowel Sign Lo ($00ec8, $00ecd), // Lao Tone Mai Ek ..Lao Niggahita ($00f18, $00f19), // Tibetan Astrological Sig..Tibetan Astrological Sig ($00f35, $00f35), // Tibetan Mark Ngas Bzung ..Tibetan Mark Ngas Bzung ($00f37, $00f37), // Tibetan Mark Ngas Bzung ..Tibetan Mark Ngas Bzung ($00f39, $00f39), // Tibetan Mark Tsa -phru ..Tibetan Mark Tsa -phru ($00f71, $00f7e), // Tibetan Vowel Sign Aa ..Tibetan Sign Rjes Su Nga ($00f80, $00f84), // Tibetan Vowel Sign Rever..Tibetan Mark Halanta ($00f86, $00f87), // Tibetan Sign Lci Rtags ..Tibetan Sign Yang Rtags ($00f8d, $00f97), // Tibetan Subjoined Sign L..Tibetan Subjoined Letter ($00f99, $00fbc), // Tibetan Subjoined Letter..Tibetan Subjoined Letter ($00fc6, $00fc6), // Tibetan Symbol Padma Gda..Tibetan Symbol Padma Gda ($0102d, $01030), // Myanmar Vowel Sign I ..Myanmar Vowel Sign Uu ($01032, $01037), // Myanmar Vowel Sign Ai ..Myanmar Sign Dot Below ($01039, $0103a), // Myanmar Sign Virama ..Myanmar Sign Asat ($0103d, $0103e), // Myanmar Consonant Sign M..Myanmar Consonant Sign M ($01058, $01059), // Myanmar Vowel Sign Vocal..Myanmar Vowel Sign Vocal ($0105e, $01060), // Myanmar Consonant Sign M..Myanmar Consonant Sign M ($01071, $01074), // Myanmar Vowel Sign Geba ..Myanmar Vowel Sign Kayah ($01082, $01082), // Myanmar Consonant Sign S..Myanmar Consonant Sign S ($01085, $01086), // Myanmar Vowel Sign Shan ..Myanmar Vowel Sign Shan ($0108d, $0108d), // Myanmar Sign Shan Counci..Myanmar Sign Shan Counci ($0109d, $0109d), // Myanmar Vowel Sign Aiton..Myanmar Vowel Sign Aiton ($0135d, $0135f), // Ethiopic Combining Gemin..Ethiopic Combining Gemin ($01712, $01714), // Tagalog Vowel Sign I ..Tagalog Sign Virama ($01732, $01734), // Hanunoo Vowel Sign I ..Hanunoo Sign Pamudpod ($01752, $01753), // Buhid Vowel Sign I ..Buhid Vowel Sign U ($01772, $01773), // Tagbanwa Vowel Sign I ..Tagbanwa Vowel Sign U ($017b4, $017b5), // Khmer Vowel Inherent Aq ..Khmer Vowel Inherent Aa ($017b7, $017bd), // Khmer Vowel Sign I ..Khmer Vowel Sign Ua ($017c6, $017c6), // Khmer Sign Nikahit ..Khmer Sign Nikahit ($017c9, $017d3), // Khmer Sign Muusikatoan ..Khmer Sign Bathamasat ($017dd, $017dd), // Khmer Sign Atthacan ..Khmer Sign Atthacan ($0180b, $0180d), // Mongolian Free Variation..Mongolian Free Variation ($01885, $01886), // Mongolian Letter Ali Gal..Mongolian Letter Ali Gal ($018a9, $018a9), // Mongolian Letter Ali Gal..Mongolian Letter Ali Gal ($01920, $01922), // Limbu Vowel Sign A ..Limbu Vowel Sign U ($01927, $01928), // Limbu Vowel Sign E ..Limbu Vowel Sign O ($01932, $01932), // Limbu Small Letter Anusv..Limbu Small Letter Anusv ($01939, $0193b), // Limbu Sign Mukphreng ..Limbu Sign Sa-i ($01a17, $01a18), // Buginese Vowel Sign I ..Buginese Vowel Sign U ($01a1b, $01a1b), // Buginese Vowel Sign Ae ..Buginese Vowel Sign Ae ($01a56, $01a56), // Tai Tham Consonant Sign ..Tai Tham Consonant Sign ($01a58, $01a5e), // Tai Tham Sign Mai Kang L..Tai Tham Consonant Sign ($01a60, $01a60), // Tai Tham Sign Sakot ..Tai Tham Sign Sakot ($01a62, $01a62), // Tai Tham Vowel Sign Mai ..Tai Tham Vowel Sign Mai ($01a65, $01a6c), // Tai Tham Vowel Sign I ..Tai Tham Vowel Sign Oa B ($01a73, $01a7c), // Tai Tham Vowel Sign Oa A..Tai Tham Sign Khuen-lue ($01a7f, $01a7f), // Tai Tham Combining Crypt..Tai Tham Combining Crypt ($01ab0, $01ac0), // Combining Doubled Circum..(nil) ($01b00, $01b03), // Balinese Sign Ulu Ricem ..Balinese Sign Surang ($01b34, $01b34), // Balinese Sign Rerekan ..Balinese Sign Rerekan ($01b36, $01b3a), // Balinese Vowel Sign Ulu ..Balinese Vowel Sign Ra R ($01b3c, $01b3c), // Balinese Vowel Sign La L..Balinese Vowel Sign La L ($01b42, $01b42), // Balinese Vowel Sign Pepe..Balinese Vowel Sign Pepe ($01b6b, $01b73), // Balinese Musical Symbol ..Balinese Musical Symbol ($01b80, $01b81), // Sundanese Sign Panyecek ..Sundanese Sign Panglayar ($01ba2, $01ba5), // Sundanese Consonant Sign..Sundanese Vowel Sign Pan ($01ba8, $01ba9), // Sundanese Vowel Sign Pam..Sundanese Vowel Sign Pan ($01bab, $01bad), // Sundanese Sign Virama ..Sundanese Consonant Sign ($01be6, $01be6), // Batak Sign Tompi ..Batak Sign Tompi ($01be8, $01be9), // Batak Vowel Sign Pakpak ..Batak Vowel Sign Ee ($01bed, $01bed), // Batak Vowel Sign Karo O ..Batak Vowel Sign Karo O ($01bef, $01bf1), // Batak Vowel Sign U For S..Batak Consonant Sign H ($01c2c, $01c33), // Lepcha Vowel Sign E ..Lepcha Consonant Sign T ($01c36, $01c37), // Lepcha Sign Ran ..Lepcha Sign Nukta ($01cd0, $01cd2), // Vedic Tone Karshana ..Vedic Tone Prenkha ($01cd4, $01ce0), // Vedic Sign Yajurvedic Mi..Vedic Tone Rigvedic Kash ($01ce2, $01ce8), // Vedic Sign Visarga Svari..Vedic Sign Visarga Anuda ($01ced, $01ced), // Vedic Sign Tiryak ..Vedic Sign Tiryak ($01cf4, $01cf4), // Vedic Tone Candra Above ..Vedic Tone Candra Above ($01cf8, $01cf9), // Vedic Tone Ring Above ..Vedic Tone Double Ring A ($01dc0, $01df9), // Combining Dotted Grave A..Combining Wide Inverted ($01dfb, $01dff), // Combining Deletion Mark ..Combining Right Arrowhea ($020d0, $020f0), // Combining Left Harpoon A..Combining Asterisk Above ($02cef, $02cf1), // Coptic Combining Ni Abov..Coptic Combining Spiritu ($02d7f, $02d7f), // Tifinagh Consonant Joine..Tifinagh Consonant Joine ($02de0, $02dff), // Combining Cyrillic Lette..Combining Cyrillic Lette ($0302a, $0302d), // Ideographic Level Tone M..Ideographic Entering Ton ($03099, $0309a), // Combining Katakana-hirag..Combining Katakana-hirag ($0a66f, $0a672), // Combining Cyrillic Vzmet..Combining Cyrillic Thous ($0a674, $0a67d), // Combining Cyrillic Lette..Combining Cyrillic Payer ($0a69e, $0a69f), // Combining Cyrillic Lette..Combining Cyrillic Lette ($0a6f0, $0a6f1), // Bamum Combining Mark Koq..Bamum Combining Mark Tuk ($0a802, $0a802), // Syloti Nagri Sign Dvisva..Syloti Nagri Sign Dvisva ($0a806, $0a806), // Syloti Nagri Sign Hasant..Syloti Nagri Sign Hasant ($0a80b, $0a80b), // Syloti Nagri Sign Anusva..Syloti Nagri Sign Anusva ($0a825, $0a826), // Syloti Nagri Vowel Sign ..Syloti Nagri Vowel Sign ($0a82c, $0a82c), // (nil) ..(nil) ($0a8c4, $0a8c5), // Saurashtra Sign Virama ..Saurashtra Sign Candrabi ($0a8e0, $0a8f1), // Combining Devanagari Dig..Combining Devanagari Sig ($0a8ff, $0a8ff), // Devanagari Vowel Sign Ay..Devanagari Vowel Sign Ay ($0a926, $0a92d), // Kayah Li Vowel Ue ..Kayah Li Tone Calya Plop ($0a947, $0a951), // Rejang Vowel Sign I ..Rejang Consonant Sign R ($0a980, $0a982), // Javanese Sign Panyangga ..Javanese Sign Layar ($0a9b3, $0a9b3), // Javanese Sign Cecak Telu..Javanese Sign Cecak Telu ($0a9b6, $0a9b9), // Javanese Vowel Sign Wulu..Javanese Vowel Sign Suku ($0a9bc, $0a9bd), // Javanese Vowel Sign Pepe..Javanese Consonant Sign ($0a9e5, $0a9e5), // Myanmar Sign Shan Saw ..Myanmar Sign Shan Saw ($0aa29, $0aa2e), // Cham Vowel Sign Aa ..Cham Vowel Sign Oe ($0aa31, $0aa32), // Cham Vowel Sign Au ..Cham Vowel Sign Ue ($0aa35, $0aa36), // Cham Consonant Sign La ..Cham Consonant Sign Wa ($0aa43, $0aa43), // Cham Consonant Sign Fina..Cham Consonant Sign Fina ($0aa4c, $0aa4c), // Cham Consonant Sign Fina..Cham Consonant Sign Fina ($0aa7c, $0aa7c), // Myanmar Sign Tai Laing T..Myanmar Sign Tai Laing T ($0aab0, $0aab0), // Tai Viet Mai Kang ..Tai Viet Mai Kang ($0aab2, $0aab4), // Tai Viet Vowel I ..Tai Viet Vowel U ($0aab7, $0aab8), // Tai Viet Mai Khit ..Tai Viet Vowel Ia ($0aabe, $0aabf), // Tai Viet Vowel Am ..Tai Viet Tone Mai Ek ($0aac1, $0aac1), // Tai Viet Tone Mai Tho ..Tai Viet Tone Mai Tho ($0aaec, $0aaed), // Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign ($0aaf6, $0aaf6), // Meetei Mayek Virama ..Meetei Mayek Virama ($0abe5, $0abe5), // Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign ($0abe8, $0abe8), // Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign ($0abed, $0abed), // Meetei Mayek Apun Iyek ..Meetei Mayek Apun Iyek ($0fb1e, $0fb1e), // Hebrew Point Judeo-spani..Hebrew Point Judeo-spani ($0fe00, $0fe0f), // Variation Selector-1 ..Variation Selector-16 ($0fe20, $0fe2f), // Combining Ligature Left ..Combining Cyrillic Titlo ($101fd, $101fd), // Phaistos Disc Sign Combi..Phaistos Disc Sign Combi ($102e0, $102e0), // Coptic Epact Thousands M..Coptic Epact Thousands M ($10376, $1037a), // Combining Old Permic Let..Combining Old Permic Let ($10a01, $10a03), // Kharoshthi Vowel Sign I ..Kharoshthi Vowel Sign Vo ($10a05, $10a06), // Kharoshthi Vowel Sign E ..Kharoshthi Vowel Sign O ($10a0c, $10a0f), // Kharoshthi Vowel Length ..Kharoshthi Sign Visarga ($10a38, $10a3a), // Kharoshthi Sign Bar Abov..Kharoshthi Sign Dot Belo ($10a3f, $10a3f), // Kharoshthi Virama ..Kharoshthi Virama ($10ae5, $10ae6), // Manichaean Abbreviation ..Manichaean Abbreviation ($10d24, $10d27), // Hanifi Rohingya Sign Har..Hanifi Rohingya Sign Tas ($10eab, $10eac), // (nil) ..(nil) ($10f46, $10f50), // Sogdian Combining Dot Be..Sogdian Combining Stroke ($11001, $11001), // Brahmi Sign Anusvara ..Brahmi Sign Anusvara ($11038, $11046), // Brahmi Vowel Sign Aa ..Brahmi Virama ($1107f, $11081), // Brahmi Number Joiner ..Kaithi Sign Anusvara ($110b3, $110b6), // Kaithi Vowel Sign U ..Kaithi Vowel Sign Ai ($110b9, $110ba), // Kaithi Sign Virama ..Kaithi Sign Nukta ($11100, $11102), // Chakma Sign Candrabindu ..Chakma Sign Visarga ($11127, $1112b), // Chakma Vowel Sign A ..Chakma Vowel Sign Uu ($1112d, $11134), // Chakma Vowel Sign Ai ..Chakma Maayyaa ($11173, $11173), // Mahajani Sign Nukta ..Mahajani Sign Nukta ($11180, $11181), // Sharada Sign Candrabindu..Sharada Sign Anusvara ($111b6, $111be), // Sharada Vowel Sign U ..Sharada Vowel Sign O ($111c9, $111cc), // Sharada Sandhi Mark ..Sharada Extra Short Vowe ($111cf, $111cf), // (nil) ..(nil) ($1122f, $11231), // Khojki Vowel Sign U ..Khojki Vowel Sign Ai ($11234, $11234), // Khojki Sign Anusvara ..Khojki Sign Anusvara ($11236, $11237), // Khojki Sign Nukta ..Khojki Sign Shadda ($1123e, $1123e), // Khojki Sign Sukun ..Khojki Sign Sukun ($112df, $112df), // Khudawadi Sign Anusvara ..Khudawadi Sign Anusvara ($112e3, $112ea), // Khudawadi Vowel Sign U ..Khudawadi Sign Virama ($11300, $11301), // Grantha Sign Combining A..Grantha Sign Candrabindu ($1133b, $1133c), // Combining Bindu Below ..Grantha Sign Nukta ($11340, $11340), // Grantha Vowel Sign Ii ..Grantha Vowel Sign Ii ($11366, $1136c), // Combining Grantha Digit ..Combining Grantha Digit ($11370, $11374), // Combining Grantha Letter..Combining Grantha Letter ($11438, $1143f), // Newa Vowel Sign U ..Newa Vowel Sign Ai ($11442, $11444), // Newa Sign Virama ..Newa Sign Anusvara ($11446, $11446), // Newa Sign Nukta ..Newa Sign Nukta ($1145e, $1145e), // Newa Sandhi Mark ..Newa Sandhi Mark ($114b3, $114b8), // Tirhuta Vowel Sign U ..Tirhuta Vowel Sign Vocal ($114ba, $114ba), // Tirhuta Vowel Sign Short..Tirhuta Vowel Sign Short ($114bf, $114c0), // Tirhuta Sign Candrabindu..Tirhuta Sign Anusvara ($114c2, $114c3), // Tirhuta Sign Virama ..Tirhuta Sign Nukta ($115b2, $115b5), // Siddham Vowel Sign U ..Siddham Vowel Sign Vocal ($115bc, $115bd), // Siddham Sign Candrabindu..Siddham Sign Anusvara ($115bf, $115c0), // Siddham Sign Virama ..Siddham Sign Nukta ($115dc, $115dd), // Siddham Vowel Sign Alter..Siddham Vowel Sign Alter ($11633, $1163a), // Modi Vowel Sign U ..Modi Vowel Sign Ai ($1163d, $1163d), // Modi Sign Anusvara ..Modi Sign Anusvara ($1163f, $11640), // Modi Sign Virama ..Modi Sign Ardhacandra ($116ab, $116ab), // Takri Sign Anusvara ..Takri Sign Anusvara ($116ad, $116ad), // Takri Vowel Sign Aa ..Takri Vowel Sign Aa ($116b0, $116b5), // Takri Vowel Sign U ..Takri Vowel Sign Au ($116b7, $116b7), // Takri Sign Nukta ..Takri Sign Nukta ($1171d, $1171f), // Ahom Consonant Sign Medi..Ahom Consonant Sign Medi ($11722, $11725), // Ahom Vowel Sign I ..Ahom Vowel Sign Uu ($11727, $1172b), // Ahom Vowel Sign Aw ..Ahom Sign Killer ($1182f, $11837), // Dogra Vowel Sign U ..Dogra Sign Anusvara ($11839, $1183a), // Dogra Sign Virama ..Dogra Sign Nukta ($1193b, $1193c), // (nil) ..(nil) ($1193e, $1193e), // (nil) ..(nil) ($11943, $11943), // (nil) ..(nil) ($119d4, $119d7), // Nandinagari Vowel Sign U..Nandinagari Vowel Sign V ($119da, $119db), // Nandinagari Vowel Sign E..Nandinagari Vowel Sign A ($119e0, $119e0), // Nandinagari Sign Virama ..Nandinagari Sign Virama ($11a01, $11a0a), // Zanabazar Square Vowel S..Zanabazar Square Vowel L ($11a33, $11a38), // Zanabazar Square Final C..Zanabazar Square Sign An ($11a3b, $11a3e), // Zanabazar Square Cluster..Zanabazar Square Cluster ($11a47, $11a47), // Zanabazar Square Subjoin..Zanabazar Square Subjoin ($11a51, $11a56), // Soyombo Vowel Sign I ..Soyombo Vowel Sign Oe ($11a59, $11a5b), // Soyombo Vowel Sign Vocal..Soyombo Vowel Length Mar ($11a8a, $11a96), // Soyombo Final Consonant ..Soyombo Sign Anusvara ($11a98, $11a99), // Soyombo Gemination Mark ..Soyombo Subjoiner ($11c30, $11c36), // Bhaiksuki Vowel Sign I ..Bhaiksuki Vowel Sign Voc ($11c38, $11c3d), // Bhaiksuki Vowel Sign E ..Bhaiksuki Sign Anusvara ($11c3f, $11c3f), // Bhaiksuki Sign Virama ..Bhaiksuki Sign Virama ($11c92, $11ca7), // Marchen Subjoined Letter..Marchen Subjoined Letter ($11caa, $11cb0), // Marchen Subjoined Letter..Marchen Vowel Sign Aa ($11cb2, $11cb3), // Marchen Vowel Sign U ..Marchen Vowel Sign E ($11cb5, $11cb6), // Marchen Sign Anusvara ..Marchen Sign Candrabindu ($11d31, $11d36), // Masaram Gondi Vowel Sign..Masaram Gondi Vowel Sign ($11d3a, $11d3a), // Masaram Gondi Vowel Sign..Masaram Gondi Vowel Sign ($11d3c, $11d3d), // Masaram Gondi Vowel Sign..Masaram Gondi Vowel Sign ($11d3f, $11d45), // Masaram Gondi Vowel Sign..Masaram Gondi Virama ($11d47, $11d47), // Masaram Gondi Ra-kara ..Masaram Gondi Ra-kara ($11d90, $11d91), // Gunjala Gondi Vowel Sign..Gunjala Gondi Vowel Sign ($11d95, $11d95), // Gunjala Gondi Sign Anusv..Gunjala Gondi Sign Anusv ($11d97, $11d97), // Gunjala Gondi Virama ..Gunjala Gondi Virama ($11ef3, $11ef4), // Makasar Vowel Sign I ..Makasar Vowel Sign U ($16af0, $16af4), // Bassa Vah Combining High..Bassa Vah Combining High ($16b30, $16b36), // Pahawh Hmong Mark Cim Tu..Pahawh Hmong Mark Cim Ta ($16f4f, $16f4f), // Miao Sign Consonant Modi..Miao Sign Consonant Modi ($16f8f, $16f92), // Miao Tone Right ..Miao Tone Below ($16fe4, $16fe4), // (nil) ..(nil) ($1bc9d, $1bc9e), // Duployan Thick Letter Se..Duployan Double Mark ($1d167, $1d169), // Musical Symbol Combining..Musical Symbol Combining ($1d17b, $1d182), // Musical Symbol Combining..Musical Symbol Combining ($1d185, $1d18b), // Musical Symbol Combining..Musical Symbol Combining ($1d1aa, $1d1ad), // Musical Symbol Combining..Musical Symbol Combining ($1d242, $1d244), // Combining Greek Musical ..Combining Greek Musical ($1da00, $1da36), // Signwriting Head Rim ..Signwriting Air Sucking ($1da3b, $1da6c), // Signwriting Mouth Closed..Signwriting Excitement ($1da75, $1da75), // Signwriting Upper Body T..Signwriting Upper Body T ($1da84, $1da84), // Signwriting Location Hea..Signwriting Location Hea ($1da9b, $1da9f), // Signwriting Fill Modifie..Signwriting Fill Modifie ($1daa1, $1daaf), // Signwriting Rotation Mod..Signwriting Rotation Mod ($1e000, $1e006), // Combining Glagolitic Let..Combining Glagolitic Let ($1e008, $1e018), // Combining Glagolitic Let..Combining Glagolitic Let ($1e01b, $1e021), // Combining Glagolitic Let..Combining Glagolitic Let ($1e023, $1e024), // Combining Glagolitic Let..Combining Glagolitic Let ($1e026, $1e02a), // Combining Glagolitic Let..Combining Glagolitic Let ($1e130, $1e136), // Nyiakeng Puachue Hmong T..Nyiakeng Puachue Hmong T ($1e2ec, $1e2ef), // Wancho Tone Tup ..Wancho Tone Koini ($1e8d0, $1e8d6), // Mende Kikakui Combining ..Mende Kikakui Combining ($1e944, $1e94a), // Adlam Alif Lengthener ..Adlam Nukta ($e0100, $e01ef) // Variation Selector-17 ..Variation Selector-256 ); // https://github.com/jquast/wcwidth/blob/master/wcwidth/table_wide.py // at commit b29897e5a1b403a0e36f7fc991614981cbc42475 (2020-07-14): WIDE_EASTASIAN: array[0..115] of Twidth_interval = ( ($01100, $0115f), // Hangul Choseong Kiyeok ..Hangul Choseong Filler ($0231a, $0231b), // Watch ..Hourglass ($02329, $0232a), // Left-pointing Angle Brac..Right-pointing Angle Bra ($023e9, $023ec), // Black Right-pointing Dou..Black Down-pointing Doub ($023f0, $023f0), // Alarm Clock ..Alarm Clock ($023f3, $023f3), // Hourglass With Flowing S..Hourglass With Flowing S ($025fd, $025fe), // White Medium Small Squar..Black Medium Small Squar ($02614, $02615), // Umbrella With Rain Drops..Hot Beverage ($02648, $02653), // Aries ..Pisces ($0267f, $0267f), // Wheelchair Symbol ..Wheelchair Symbol ($02693, $02693), // Anchor ..Anchor ($026a1, $026a1), // High Voltage Sign ..High Voltage Sign ($026aa, $026ab), // Medium White Circle ..Medium Black Circle ($026bd, $026be), // Soccer Ball ..Baseball ($026c4, $026c5), // Snowman Without Snow ..Sun Behind Cloud ($026ce, $026ce), // Ophiuchus ..Ophiuchus ($026d4, $026d4), // No Entry ..No Entry ($026ea, $026ea), // Church ..Church ($026f2, $026f3), // Fountain ..Flag In Hole ($026f5, $026f5), // Sailboat ..Sailboat ($026fa, $026fa), // Tent ..Tent ($026fd, $026fd), // Fuel Pump ..Fuel Pump ($02705, $02705), // White Heavy Check Mark ..White Heavy Check Mark ($0270a, $0270b), // Raised Fist ..Raised Hand ($02728, $02728), // Sparkles ..Sparkles ($0274c, $0274c), // Cross Mark ..Cross Mark ($0274e, $0274e), // Negative Squared Cross M..Negative Squared Cross M ($02753, $02755), // Black Question Mark Orna..White Exclamation Mark O ($02757, $02757), // Heavy Exclamation Mark S..Heavy Exclamation Mark S ($02795, $02797), // Heavy Plus Sign ..Heavy Division Sign ($027b0, $027b0), // Curly Loop ..Curly Loop ($027bf, $027bf), // Double Curly Loop ..Double Curly Loop ($02b1b, $02b1c), // Black Large Square ..White Large Square ($02b50, $02b50), // White Medium Star ..White Medium Star ($02b55, $02b55), // Heavy Large Circle ..Heavy Large Circle ($02e80, $02e99), // Cjk Radical Repeat ..Cjk Radical Rap ($02e9b, $02ef3), // Cjk Radical Choke ..Cjk Radical C-simplified ($02f00, $02fd5), // Kangxi Radical One ..Kangxi Radical Flute ($02ff0, $02ffb), // Ideographic Description ..Ideographic Description ($03000, $0303e), // Ideographic Space ..Ideographic Variation In ($03041, $03096), // Hiragana Letter Small A ..Hiragana Letter Small Ke ($03099, $030ff), // Combining Katakana-hirag..Katakana Digraph Koto ($03105, $0312f), // Bopomofo Letter B ..Bopomofo Letter Nn ($03131, $0318e), // Hangul Letter Kiyeok ..Hangul Letter Araeae ($03190, $031e3), // Ideographic Annotation L..Cjk Stroke Q ($031f0, $0321e), // Katakana Letter Small Ku..Parenthesized Korean Cha ($03220, $03247), // Parenthesized Ideograph ..Circled Ideograph Koto ($03250, $04dbf), // Partnership Sign ..(nil) ($04e00, $0a48c), // Cjk Unified Ideograph-4e..Yi Syllable Yyr ($0a490, $0a4c6), // Yi Radical Qot ..Yi Radical Ke ($0a960, $0a97c), // Hangul Choseong Tikeut-m..Hangul Choseong Ssangyeo ($0ac00, $0d7a3), // Hangul Syllable Ga ..Hangul Syllable Hih ($0f900, $0faff), // Cjk Compatibility Ideogr..(nil) ($0fe10, $0fe19), // Presentation Form For Ve..Presentation Form For Ve ($0fe30, $0fe52), // Presentation Form For Ve..Small Full Stop ($0fe54, $0fe66), // Small Semicolon ..Small Equals Sign ($0fe68, $0fe6b), // Small Reverse Solidus ..Small Commercial At ($0ff01, $0ff60), // Fullwidth Exclamation Ma..Fullwidth Right White Pa ($0ffe0, $0ffe6), // Fullwidth Cent Sign ..Fullwidth Won Sign ($16fe0, $16fe4), // Tangut Iteration Mark ..(nil) ($16ff0, $16ff1), // (nil) ..(nil) ($17000, $187f7), // (nil) ..(nil) ($18800, $18cd5), // Tangut Component-001 ..(nil) ($18d00, $18d08), // (nil) ..(nil) ($1b000, $1b11e), // Katakana Letter Archaic ..Hentaigana Letter N-mu-m ($1b150, $1b152), // Hiragana Letter Small Wi..Hiragana Letter Small Wo ($1b164, $1b167), // Katakana Letter Small Wi..Katakana Letter Small N ($1b170, $1b2fb), // Nushu Character-1b170 ..Nushu Character-1b2fb ($1f004, $1f004), // Mahjong Tile Red Dragon ..Mahjong Tile Red Dragon ($1f0cf, $1f0cf), // Playing Card Black Joker..Playing Card Black Joker ($1f18e, $1f18e), // Negative Squared Ab ..Negative Squared Ab ($1f191, $1f19a), // Squared Cl ..Squared Vs ($1f200, $1f202), // Square Hiragana Hoka ..Squared Katakana Sa ($1f210, $1f23b), // Squared Cjk Unified Ideo..Squared Cjk Unified Ideo ($1f240, $1f248), // Tortoise Shell Bracketed..Tortoise Shell Bracketed ($1f250, $1f251), // Circled Ideograph Advant..Circled Ideograph Accept ($1f260, $1f265), // Rounded Symbol For Fu ..Rounded Symbol For Cai ($1f300, $1f320), // Cyclone ..Shooting Star ($1f32d, $1f335), // Hot Dog ..Cactus ($1f337, $1f37c), // Tulip ..Baby Bottle ($1f37e, $1f393), // Bottle With Popping Cork..Graduation Cap ($1f3a0, $1f3ca), // Carousel Horse ..Swimmer ($1f3cf, $1f3d3), // Cricket Bat And Ball ..Table Tennis Paddle And ($1f3e0, $1f3f0), // House Building ..European Castle ($1f3f4, $1f3f4), // Waving Black Flag ..Waving Black Flag ($1f3f8, $1f43e), // Badminton Racquet And Sh..Paw Prints ($1f440, $1f440), // Eyes ..Eyes ($1f442, $1f4fc), // Ear ..Videocassette ($1f4ff, $1f53d), // Prayer Beads ..Down-pointing Small Red ($1f54b, $1f54e), // Kaaba ..Menorah With Nine Branch ($1f550, $1f567), // Clock Face One Oclock ..Clock Face Twelve-thirty ($1f57a, $1f57a), // Man Dancing ..Man Dancing ($1f595, $1f596), // Reversed Hand With Middl..Raised Hand With Part Be ($1f5a4, $1f5a4), // Black Heart ..Black Heart ($1f5fb, $1f64f), // Mount Fuji ..Person With Folded Hands ($1f680, $1f6c5), // Rocket ..Left Luggage ($1f6cc, $1f6cc), // Sleeping Accommodation ..Sleeping Accommodation ($1f6d0, $1f6d2), // Place Of Worship ..Shopping Trolley ($1f6d5, $1f6d7), // Hindu Temple ..(nil) ($1f6eb, $1f6ec), // Airplane Departure ..Airplane Arriving ($1f6f4, $1f6fc), // Scooter ..(nil) ($1f7e0, $1f7eb), // Large Orange Circle ..Large Brown Square ($1f90c, $1f93a), // (nil) ..Fencer ($1f93c, $1f945), // Wrestlers ..Goal Net ($1f947, $1f978), // First Place Medal ..(nil) ($1f97a, $1f9cb), // Face With Pleading Eyes ..(nil) ($1f9cd, $1f9ff), // Standing Person ..Nazar Amulet ($1fa70, $1fa74), // Ballet Shoes ..(nil) ($1fa78, $1fa7a), // Drop Of Blood ..Stethoscope ($1fa80, $1fa86), // Yo-yo ..(nil) ($1fa90, $1faa8), // Ringed Planet ..(nil) ($1fab0, $1fab6), // (nil) ..(nil) ($1fac0, $1fac2), // (nil) ..(nil) ($1fad0, $1fad6), // (nil) ..(nil) ($20000, $2fffd), // Cjk Unified Ideograph-20..(nil) ($30000, $3fffd) // (nil) ..(nil) ); function intable(table: Pwidth_interval; table_length: Integer; c: UCS4Char): Boolean; var bot, top, mid: Integer; begin // First quick check for Latin1 etc. characters. if (c < table[0, 0]) then Exit(false); // Binary search in table. bot := 0; top := table_length - 1; while (top >= bot) do begin mid := (bot + top) div 2; if (table[mid, 1] < c) then bot := mid + 1 else if (table[mid, 0] > c) then top := mid - 1 else begin Exit(true); end; end; Result := false; end; function wcwidth(ucs: UCS4Char): Integer; begin // NOTE: created by hand, there isn't anything identifiable other than // general Cf category code to identify these, and some characters in Cf // category code are of non-zero width. if ((ucs = 0) or (ucs = $034F) or (($200B <= ucs) and (ucs <= $200F)) or (ucs = $2028) or (ucs = $2029) or (($202A <= ucs) and (ucs <= $202E)) or (($2060 <= ucs) and (ucs <= $2063))) then begin Exit(0); end; // C0/C1 control characters. if ((ucs < 32) or (($07F <= ucs) and (ucs < $0A0))) then Exit(-1); // Combining characters with zero width. if (intable(ZERO_WIDTH, Length(ZERO_WIDTH), ucs)) then Exit(0); if intable(WIDE_EASTASIAN, Length(WIDE_EASTASIAN), ucs) then Result := 2 else Result := 1; end; function UTF8Width(const Ch: TUTF8Char): Integer; var CharLen: Integer; begin Result:= wcwidth(UTF8CodepointToUnicode(@Ch[1], CharLen)); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/vtemuesc.pas�������������������������������������0000644�0001750�0000144�00000036474�15104114162�024052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Virtual terminal emulator escape codes Alexander Koblov, 2021-2022 Based on ComPort Library https://sourceforge.net/projects/comport Author: Dejan Crnila, 1998 - 2002 Maintainers: Lars B. Dybdahl, 2003 License: Public Domain } unit VTEmuEsc; {$mode delphi} interface uses Classes, LCLType; type // terminal character result TEscapeResult = (erChar, erCode, erNothing); // terminal escape codes TEscapeCode = (ecUnknown, ecNotCompleted, ecCursorUp, ecCursorDown, ecCursorLeft, ecCursorRight, ecCursorHome, ecCursorEnd, ecCursorMove, ecCursorMoveX, ecCursorMoveY, ecReverseLineFeed, ecAppCursorLeft, ecAppCursorRight, ecAppCursorUp, ecAppCursorDown, ecAppCursorHome, ecAppCursorEnd, ecCursorNextLine, ecCursorPrevLine, ecInsertKey, ecDeleteKey, ecPageUpKey, ecPageDownKey, ecMouseDown, ecMouseUp, ecEraseLineLeft, ecEraseLineRight, ecEraseScreenRight, ecEraseScreenLeft, ecEraseLine, ecEraseScreen, ecEraseChar, ecDeleteChar, ecSetTab, ecClearTab, ecClearAllTabs, ecIdentify, ecIdentResponse, ecQueryDevice, ecReportDeviceOK, ecReportDeviceFailure, ecQueryCursorPos, ecReportCursorPos, ecAttributes, ecSetMode, ecResetMode, ecReset, ecCharSet, ecSoftReset, ecSaveCaretAndAttr, ecRestoreCaretAndAttr, ecSaveCaret, ecRestoreCaret, ecTest, ecFuncKey, ecSetTextParams, ecScrollRegion, ecDeleteLine, ecInsertLine, ecKeypadApp, ecKeypadNum, ecScrollUp, ecScrollDown); // terminal escape codes processor TEscapeCodes = class private FCharacter: TUTF8Char; FCode: TEscapeCode; FData: string; FParams: TStrings; public constructor Create; destructor Destroy; override; function ProcessChar(const Ch: TUTF8Char): TEscapeResult; virtual; abstract; function EscCodeToStr(Code: TEscapeCode; AParams: TStrings): string; virtual; abstract; function GetParam(Num: Integer; AParams: TStrings): Integer; property Data: string read FData; property Code: TEscapeCode read FCode; property Character: TUTF8Char read FCharacter; property Params: TStrings read FParams; end; // VT52 escape codes TEscapeCodesVT52 = class(TEscapeCodes) private FInSequence: Boolean; function DetectCode(Str: string): TEscapeCode; public function ProcessChar(const Ch: TUTF8Char): TEscapeResult; override; function EscCodeToStr(Code: TEscapeCode; AParams: TStrings): string; override; end; // ANSI/VT100 escape codes TEscapeCodesVT100 = class(TEscapeCodes) private FInSequence: Boolean; FInExtSequence: Boolean; FInOscSequence: Boolean; function DetectCode(Str: string): TEscapeCode; function DetectExtCode(Str: string): TEscapeCode; function DetectOscCode(Str: string): TEscapeCode; public function ProcessChar(const Ch: TUTF8Char): TEscapeResult; override; function EscCodeToStr(Code: TEscapeCode; AParams: TStrings): string; override; end; implementation uses SysUtils; (***************************************** * TEscapeCodes class * *****************************************) constructor TEscapeCodes.Create; begin inherited Create; FParams := TStringList.Create; end; destructor TEscapeCodes.Destroy; begin FParams.Free; inherited Destroy; end; function TEscapeCodes.GetParam(Num: Integer; AParams: TStrings): Integer; begin if (AParams = nil) or (AParams.Count < Num) then Result := 1 else try Result := StrToInt(AParams[Num - 1]); except Result := 1; end; end; (***************************************** * TEscapeCodesVT52 class * *****************************************) // process character function TEscapeCodesVT52.ProcessChar(const Ch: TUTF8Char): TEscapeResult; var TempCode: TEscapeCode; begin Result := erNothing; if not FInSequence then begin if Ch = #27 then begin FData := ''; FInSequence := True; end else begin FCharacter := Ch; Result := erChar; end; end else begin FData := FData + Ch; TempCode := DetectCode(FData); if TempCode <> ecNotCompleted then begin FCode := TempCode; FInSequence := False; Result := erCode; end; end; end; // escape code to string function TEscapeCodesVT52.EscCodeToStr(Code: TEscapeCode; AParams: TStrings): string; begin case Code of ecCursorUp: Result := #27'A'; ecCursorDown: Result := #27'B'; ecCursorRight: Result := #27'C'; ecCursorLeft: Result := #27'D'; ecCursorHome: Result := #27'H'; ecReverseLineFeed: Result := #27'I'; ecEraseScreenRight: Result := #27'J'; ecEraseLineRight: Result := #27'K'; ecIdentify: Result := #27'Z'; ecIdentResponse: Result := #27'/Z'; ecCursorMove: Result := #27'Y' + Chr(GetParam(1, AParams) + 31) + Chr(GetParam(2, AParams) + 31); else Result := ''; end; end; // get escape code from string function TEscapeCodesVT52.DetectCode(Str: string): TEscapeCode; begin Result := ecUnknown; case Str[1] of 'A': Result := ecCursorUp; 'B': Result := ecCursorDown; 'C': Result := ecCursorRight; 'D': Result := ecCursorLeft; 'H': Result := ecCursorMove; 'I': Result := ecReverseLineFeed; 'J': Result := ecEraseScreenRight; 'K': Result := ecEraseLineRight; 'Z': Result := ecIdentify; '/': begin if Length(Str) = 1 then Result := ecNotCompleted else if (Length(Str) = 2) and (Str = '/Z') then Result := ecIdentResponse; end; 'Y': begin if Length(Str) < 3 then Result := ecNotCompleted else begin Result := ecCursorMove; FParams.Add(IntToStr(Ord(Str[3]) - 31)); FParams.Add(IntToStr(Ord(Str[2]) - 31)); end; end; end; end; (***************************************** * TEscapeCodesVT100class * *****************************************) // process character function TEscapeCodesVT100.ProcessChar(const Ch: TUTF8Char): TEscapeResult; var TempCode: TEscapeCode; begin Result := erNothing; if not FInSequence then begin if Ch = #27 then begin FData := ''; FInSequence := True; end else begin FCharacter := Ch; Result := erChar; end; end else begin FData := FData + Ch; TempCode := ecNotCompleted; if FInExtSequence then TempCode := DetectExtCode(FData) else if FInOscSequence then TempCode := DetectOscCode(FData) else // character [ after ESC defines extended escape code if FData[1] = '[' then FInExtSequence := True else if FData[1] = ']' then FInOscSequence := True else TempCode := DetectCode(FData); if TempCode <> ecNotCompleted then begin FCode := TempCode; FInSequence := False; FInExtSequence := False; FInOscSequence := False; Result := erCode; end; end; end; // escape code to string conversion function TEscapeCodesVT100.EscCodeToStr(Code: TEscapeCode; AParams: TStrings): string; var AKey: Integer; begin case Code of ecIdentify: Result := #27'[c'; ecIdentResponse: Result := Format(#27'[?1;%dc', [GetParam(1, AParams)]); ecQueryCursorPos: Result := #27'[6n'; ecReportCursorPos: Result := Format(#27'[%d;%dR', [GetParam(1, AParams), GetParam(2, AParams)]); ecQueryDevice: Result := #27'[5n'; ecReportDeviceOK: Result := #27'[0n'; ecReportDeviceFailure: Result := #27'[3n'; ecCursorUp: Result := #27'[A'; ecCursorDown: Result := #27'[B'; ecCursorRight: Result := #27'[C'; ecAppCursorLeft: Result := #27'OD'; ecAppCursorUp: Result := #27'OA'; ecAppCursorDown: Result := #27'OB'; ecAppCursorRight: Result := #27'OC'; ecAppCursorHome: Result := #27'OH'; ecAppCursorEnd: Result := #27'OF'; ecCursorLeft: Result := #27'[D'; ecCursorHome: Result := #27'[H'; ecCursorEnd: Result := #27'[F'; ecCursorMove: Result := Format(#27'[%d;%df', [GetParam(1, AParams), GetParam(2, AParams)]); ecEraseScreenRight: Result := #27'[J'; ecEraseLineRight: Result := #27'[K'; ecEraseScreen: Result := #27'[2J'; ecEraseLine: Result := #27'[2K'; ecSetTab: Result := #27'H'; ecClearTab: Result := #27'[g'; ecClearAllTabs: Result := #27'[3g'; ecAttributes: Result := #27'[m'; // popravi ecSetMode: Result := #27'[h'; ecResetMode: Result := #27'[l'; ecReset: Result := #27'c'; ecSaveCaret: Result := #27'[s'; ecRestoreCaret: Result := #27'[u'; ecSaveCaretAndAttr: Result := #27'7'; ecRestoreCaretAndAttr: Result := #27'8'; ecTest: Result := #27'#8'; ecFuncKey: begin AKey:= GetParam(1, AParams); case AKey of 0: Result := #27'OP'; 1: Result := #27'OQ'; 2: Result := #27'OR'; 3: Result := #27'OS'; 4: Result := #27'[15~'; 5: Result := #27'[17~'; 6: Result := #27'[18~'; 7: Result := #27'[19~'; 8: Result := #27'[20~'; 9: Result := #27'[21~'; 10: Result := #27'[23~'; 11: Result := #27'[24~'; end; end; ecInsertKey: Result := #27'[2~'; ecDeleteKey: Result := #27'[3~'; ecPageUpKey: Result := #27'[5~'; ecPageDownKey: Result := #27'[6~'; ecMouseDown: Result := Format(#27'[<%d;%d;%dM', [GetParam(1, AParams), GetParam(2, AParams), GetParam(3, AParams)]); ecMouseUp: Result := Format(#27'[<%d;%d;%dm', [GetParam(1, AParams), GetParam(2, AParams), GetParam(3, AParams)]); else Result := ''; end; end; // get vt100 escape code from string function TEscapeCodesVT100.DetectCode(Str: string): TEscapeCode; begin if Length(Str) = 1 then case Str[1] of 'H': Result := ecSetTab; 'c': Result := ecReset; 'M': Result := ecReverseLineFeed; '7': Result := ecSaveCaretAndAttr; '8': Result := ecRestoreCaretAndAttr; '=': Result := ecKeypadApp; '>': Result := ecKeypadNum; '#': Result := ecNotCompleted; 'O': Result := ecNotCompleted; '(': Result := ecNotCompleted; else Result := ecUnknown; end else begin Result := ecUnknown; if Str = '#8' then Result := ecTest else if Str[1] = 'O' then begin case Str[2] of 'A': Result := ecAppCursorUp; 'B': Result := ecAppCursorDown; 'C': Result := ecAppCursorRight; 'D': Result := ecAppCursorLeft; 'H': Result := ecAppCursorHome; 'F': Result := ecAppCursorEnd; end; end else if Str[1] = '(' then begin FParams.Clear; FParams.Add(Str[2]); Result:= ecCharSet; end; end; end; // get extended vt100 escape code from string function TEscapeCodesVT100.DetectExtCode(Str: string): TEscapeCode; var LastCh: Char; TempParams: TStrings; procedure ParseParams(Str: string); var I: Integer; TempStr: string; begin I := 1; TempStr := ''; while I <= Length(Str) do begin if (Str[I] = ';') and (TempStr <> '') then begin TempParams.Add(TempStr); TempStr := ''; end else TempStr := TempStr + Str[I]; Inc(I); end; if (TempStr <> '') then TempParams.Add(TempStr); end; function CodeEraseScreen: TEscapeCode; var Str: string; begin if TempParams.Count = 0 then Result := ecEraseScreenRight else begin Str := TempParams[0]; case Str[1] of '0': Result := ecEraseScreenRight; '1': Result := ecEraseScreenLeft; '2': Result := ecEraseScreen; else Result := ecUnknown; end; end; TempParams.Clear; end; function CodeEraseLine: TEscapeCode; var Str: string; begin if TempParams.Count = 0 then Result := ecEraseLineRight else begin Str := TempParams[0]; case Str[1] of '0': Result := ecEraseLineRight; '1': Result := ecEraseLineLeft; '2': Result := ecEraseLine; else Result := ecUnknown; end; end; TempParams.Clear; end; function CodeTab: TEscapeCode; var Str: string; begin if TempParams.Count = 0 then Result := ecClearTab else begin Str := TempParams[0]; case Str[1] of '0': Result := ecClearTab; '3': Result := ecClearAllTabs; else Result := ecUnknown; end; end; TempParams.Clear; end; function CodeDevice: TEscapeCode; var Str: string; begin if TempParams.Count = 0 then Result := ecUnknown else begin Str := TempParams[0]; case Str[1] of '5': Result := ecQueryDevice; '0': Result := ecReportDeviceOK; '3': Result := ecReportDeviceFailure; '6': Result := ecQueryCursorPos; else Result := ecUnknown; end; end; TempParams.Clear; end; function CodeIdentify: TEscapeCode; begin if (TempParams.Count = 0) or ((TempParams.Count = 1) and (TempParams[0] = '0')) then Result := ecIdentify else if (TempParams.Count = 2) and (TempParams[1] = '?1') then Result := ecIdentResponse else Result := ecUnknown; end; begin Result := ecNotCompleted; LastCh := Str[Length(Str)]; {$IFDEF Unicode} if not CharInSet(LastCh,['A'..'Z', 'a'..'z']) then Exit; {$ELSE} if not (LastCh in ['A'..'Z', 'a'..'z']) then Exit; {$ENDIF} TempParams := TStringList.Create; try ParseParams(Copy(Str, 2, Length(Str) - 2)); case LastCh of 'A': Result := ecCursorUp; 'B': Result := ecCursorDown; 'C': Result := ecCursorRight; 'D': Result := ecCursorLeft; 'E': Result := ecCursorNextLine; 'F': Result := ecCursorPrevLine; 'H': Result := ecCursorMove; 'f': Result := ecCursorMove; 'd': Result := ecCursorMoveY; 'G': Result := ecCursorMoveX; 'J': Result := CodeEraseScreen; 'K': Result := CodeEraseLine; 'X': Result := ecEraseChar; 'P': Result := ecDeleteChar; 'g': Result := CodeTab; 'm': Result := ecAttributes; 'h': Result := ecSetMode; 'l': Result := ecResetMode; 's': Result := ecSaveCaret; 'u': Result := ecRestoreCaret; 'n': Result := CodeDevice; 'c': Result := CodeIdentify; 'R': Result := ecReportCursorPos; 'r': Result := ecScrollRegion; 'S': Result := ecScrollUp; 'T': Result := ecScrollDown; 'L': Result := ecInsertLine; 'M': Result := ecDeleteLine; 'p': Result := ecSoftReset; else Result := ecUnknown; end; FParams.Assign(TempParams); finally TempParams.Free; end; end; function TEscapeCodesVT100.DetectOscCode(Str: string): TEscapeCode; var LastCh: Char; begin Result := ecNotCompleted; LastCh := Str[Length(Str)]; if (LastCh = #7) then begin Result:= ecSetTextParams; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/vtemuctl.pas�������������������������������������0000644�0001750�0000144�00000166740�15104114162�024062� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Virtual terminal emulator control Alexander Koblov, 2021-2022 Based on ComPort Library https://sourceforge.net/projects/comport Author: Dejan Crnila, 1998 - 2002 Maintainers: Lars B. Dybdahl, 2003 Brian Gochnauer, 2010 License: Public Domain } unit VTEmuCtl; {$mode delphi} {$pointermath on} interface uses LCLType, Classes, Controls, StdCtrls, ExtCtrls, Forms, Messages, Graphics, VTEmuEsc, LCLIntf, Types, LazUtf8, LMessages; type TOnRxBuf = procedure(Sender: TObject; const Buffer; Count: Integer) of object; { TCustomPtyDevice } TCustomPtyDevice = class(TComponent) protected FOnRxBuf: TOnRxBuf; FConnected: Boolean; protected procedure SetConnected(AValue: Boolean); virtual; abstract; public function WriteStr(const Str: string): Integer; virtual; abstract; function SetCurrentDir(const Path: String): Boolean; virtual; abstract; function SetScreenSize(aCols, aRows: Integer): Boolean; virtual; abstract; property OnRxBuf: TOnRxBuf read FOnRxBuf write FOnRxBuf; property Connected: Boolean read FConnected write SetConnected default False; end; TCustomComTerminal = class; // forward declaration // terminal character PComTermChar = ^TComTermChar; TComTermChar = record Ch: TUTF8Char; FrontColor: TColor; BackColor: TColor; Underline: Boolean; Bold: Boolean; end; // buffer which holds terminal screen data TComTermBuffer = class private FBuffer: PByte; FTabs: Pointer; FTopLeft: TPoint; FCaretPos: TPoint; FScrollRange: TRect; FOwner: TCustomComTerminal; strict private FRows: Integer; FColumns: Integer; public constructor Create(AOwner: TCustomComTerminal); destructor Destroy; override; procedure Init(ARows, AColumns: Integer); procedure SetChar(Column, Row: Integer; TermChar: TComTermChar); function GetChar(Column, Row: Integer): TComTermChar; procedure SetTab(Column: Integer; Put: Boolean); function GetTab(Column: Integer): Boolean; function NextTab(Column: Integer): Integer; procedure ClearAllTabs; procedure ScrollDown; procedure ScrollUp; procedure EraseScreenLeft(Column, Row: Integer); procedure EraseScreenRight(Column, Row: Integer); procedure EraseLineLeft(Column, Row: Integer); procedure EraseLineRight(Column, Row: Integer); procedure EraseChar(Column, Row, Count: Integer); procedure DeleteChar(Column, Row, Count: Integer); procedure DeleteLine(Row, Count: Integer); procedure InsertLine(Row, Count: Integer); function GetLineLength(Line: Integer): Integer; function GetLastLine: Integer; property Rows: Integer read FRows; property Columns: Integer read FColumns; end; // terminal types TTermEmulation = (teVT100orANSI, teVT52, teNone); TTermCaret = (tcBlock, tcUnderline, tcNone); TAdvanceCaret = (acChar, acReturn, acLineFeed, acReverseLineFeed, acTab, acBackspace, acPage); TArrowKeys = (akTerminal, akWindows); TTermAttributes = record FrontColor: TColor; BackColor: TColor; Invert: Boolean; Bold: Boolean; Underline: Boolean; end; TTermMode = record Keys: TArrowKeys; CharSet: Boolean; MouseMode: Boolean; MouseTrack: Boolean; end; TEscapeEvent = procedure(Sender: TObject; var EscapeCodes: TEscapeCodes) of object; TUnhandledEvent = procedure(Sender: TObject; Code: TEscapeCode; Data: string) of object; TUnhandledModeEvent = procedure(Sender: TObject; const Data: string; OnOff: Boolean) of object; TStrRecvEvent = procedure(Sender: TObject; var Str: string) of object; TChScreenEvent = procedure(Sender: TObject; Ch: TUTF8Char) of object; // communication terminal control { TCustomComTerminal } TCustomComTerminal = class(TCustomControl) private FPtyDevice: TCustomPtyDevice; FScrollBars: TScrollStyle; FArrowKeys: TArrowKeys; FWantTab: Boolean; FColumns: Integer; FRows: Integer; FVisibleRows: Integer; FLocalEcho: Boolean; FSendLF: Boolean; FAppendLF: Boolean; FForce7Bit: Boolean; FWrapLines: Boolean; FSmoothScroll: Boolean; FAutoFollow : Boolean; FFontHeight: Integer; FFontWidth: Integer; FPartChar: TUTF8Char; FEmulation: TTermEmulation; FCaret: TTermCaret; FCaretPos: TPoint; FSaveCaret: TPoint; FCaretCreated: Boolean; FTopLeft: TPoint; FCaretHeight: Integer; FSaveAttr: TTermAttributes; FBuffer: TComTermBuffer; FMainBuffer: TComTermBuffer; FAlternateBuffer: TComTermBuffer; FParams: TStrings; FEscapeCodes: TEscapeCodes; FTermAttr: TTermAttributes; FTermMode: TTermMode; FOnChar: TChScreenEvent; FOnGetEscapeCodes: TEscapeEvent; FOnUnhandledCode: TUnhandledEvent; FOnUnhandledMode: TUnhandledModeEvent; FOnStrRecieved: TStrRecvEvent; procedure AdvanceCaret(Kind: TAdvanceCaret); function CalculateMetrics: Boolean; procedure CreateEscapeCodes; procedure CreateTerminalCaret; procedure DrawChar(AColumn, ARow: Integer; Ch: TComTermChar); function GetCharAttr: TComTermChar; function GetConnected: Boolean; procedure HideCaret; procedure InitCaret; procedure InvalidatePortion(ARect: TRect); procedure ModifyScrollBar(ScrollBar, ScrollCode, Pos: Integer); procedure SetColumns(const Value: Integer); procedure SetPtyDevice(const Value: TCustomPtyDevice); procedure SetConnected(const Value: Boolean); procedure SetEmulation(const Value: TTermEmulation); procedure SetRows(const Value: Integer); procedure SetScrollBars(const Value: TScrollStyle); procedure SetCaret(const Value: TTermCaret); procedure SetAttributes(AParams: TStrings); procedure SetMode(AParams: TStrings; OnOff: Boolean); procedure ShowCaret; procedure StringReceived(Str: string); procedure PaintTerminal(Rect: TRect); procedure PaintDesign; procedure PutChar(Ch: TUTF8Char); function PutEscapeCode(ACode: TEscapeCode; AParams: TStrings): Boolean; procedure RestoreAttr; procedure RestoreCaretPos; procedure RxBuf(Sender: TObject; const Buffer; Count: Integer); procedure SaveAttr; procedure SaveCaretPos; procedure SendChar(Ch: TUTF8Char); procedure SendCode(Code: TEscapeCode; AParams: TStrings); procedure SendCodeNoEcho(Code: TEscapeCode; AParams: TStrings); procedure MouseEvent(Code: TEscapeCode; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PerformTest(ACh: Char); procedure UpdateScrollPos; procedure UpdateScrollRange; procedure WrapLine(AWidth: Integer); protected procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED; procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE; procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL; procedure WMKillFocus(var Message: TWMSetFocus); message WM_KILLFOCUS; procedure WMLButtonDown(var Message: TLMLButtonDown); message WM_LBUTTONDOWN; procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS; procedure WMSize(var Msg: TWMSize); message WM_SIZE; procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override; procedure CreateParams(var Params: TCreateParams); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyPress(var Key: Char); override; procedure UTF8KeyPress(var UTF8Key: TUTF8Char); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure CreateWnd; override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Paint; override; procedure DoChar(Ch: TUTF8Char); dynamic; procedure DoGetEscapeCodes(var EscapeCodes: TEscapeCodes); dynamic; procedure DoStrRecieved(var Str: string); dynamic; procedure DoUnhandledCode(Code: TEscapeCode; Data: string); dynamic; procedure DoUnhandledMode(const Data: string; OnOff: Boolean); dynamic; function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure ClearScreen; procedure MoveCaret(AColumn, ARow: Integer); procedure Write(const Buffer:string; Size: Integer); procedure WriteStr(const Str: string); procedure WriteEscCode(ACode: TEscapeCode; AParams: TStrings); procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Stream: TStream); procedure SelectFont; property AppendLF: Boolean read FAppendLF write FAppendLF default False; property AutoFollow : Boolean read FAutoFollow write FAutoFollow default True; property ArrowKeys: TArrowKeys read FArrowKeys write FArrowKeys default akTerminal; property Caret: TTermCaret read FCaret write SetCaret default tcBlock; property Connected: Boolean read GetConnected write SetConnected stored False; property PtyDevice: TCustomPtyDevice read FPtyDevice write SetPtyDevice; property Columns: Integer read FColumns write SetColumns default 80; property Emulation: TTermEmulation read FEmulation write SetEmulation; property EscapeCodes: TEscapeCodes read FEscapeCodes; property Force7Bit: Boolean read FForce7Bit write FForce7Bit default False; property LocalEcho: Boolean read FLocalEcho write FLocalEcho default False; property SendLF: Boolean read FSendLF write FSendLF default False; property ScrollBars: TScrollStyle read FScrollBars write SetScrollBars; property SmoothScroll: Boolean read FSmoothScroll write FSmoothScroll default False; property Rows: Integer read FRows write SetRows default 24; property WantTab: Boolean read FWantTab write FWantTab default False; property WrapLines: Boolean read FWrapLines write FWrapLines default False; property OnChar: TChScreenEvent read FOnChar write FOnChar; property OnGetEscapeCodes: TEscapeEvent read FOnGetEscapeCodes write FOnGetEscapeCodes; property OnStrRecieved: TStrRecvEvent read FOnStrRecieved write FOnStrRecieved; property OnUnhandledMode: TUnhandledModeEvent read FOnUnhandledMode write FOnUnhandledMode; property OnUnhandledCode: TUnhandledEvent read FOnUnhandledCode write FOnUnhandledCode; end; // publish properties TVirtualTerminal = class(TCustomComTerminal) published property Align; property AppendLF; property ArrowKeys; property BorderStyle; property Color; property Columns; property PtyDevice; property Connected; property DragCursor; property DragMode; property Emulation; property Enabled; property Font; property Force7Bit; property Hint; property LocalEcho; property ParentColor; property ParentShowHint; property PopupMenu; property Rows; property ScrollBars; property SendLF; property ShowHint; property SmoothScroll; property TabOrder; property TabStop default True; property Caret; property Visible; property WantTab; property WrapLines; property Anchors; property AutoSize; property Constraints; property DragKind; property OnChar; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnEnter; property OnExit; property OnGetEscapeCodes; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnStrRecieved; property OnUnhandledCode; property OnConstrainedResize; property OnDockDrop; property OnEndDock; property OnMouseWheel; property OnMouseWheelDown; property OnMouseWheelUp; property OnResize; property OnStartDock; property OnUnDock; property OnContextPopup; end; implementation uses SysUtils, Dialogs, Math, VTColorTable, VTWideCharWidth; const TMPF_FIXED_PITCH = $01; (***************************************** * TComTermBuffer class * *****************************************) // create class constructor TComTermBuffer.Create(AOwner: TCustomComTerminal); begin inherited Create; FOwner := AOwner; FTopLeft := Classes.Point(1, 1); FCaretPos := Classes.Point(1, 1); end; // destroy class destructor TComTermBuffer.Destroy; begin if FBuffer <> nil then begin FreeMem(FBuffer); FreeMem(FTabs); end; inherited Destroy; end; // put char in buffer procedure TComTermBuffer.SetChar(Column, Row: Integer; TermChar: TComTermChar); var Address: Integer; begin if (Row > FRows) or (Column > FColumns) then Exit; Address := (Row - 1) * FColumns + (Column - 1); PComTermChar(FBuffer + (Address * SizeOf(TComTermChar)))^:= TermChar; end; // get char from buffer function TComTermBuffer.GetChar(Column, Row: Integer): TComTermChar; var Address: Integer; begin if (Row > FRows) or (Column > FColumns) then Exit(Default(TComTermChar)); Address := (Row - 1) * FColumns + (Column - 1); Result:= PComTermChar(FBuffer + (Address * SizeOf(TComTermChar)))^; end; // scroll down up line procedure TComTermBuffer.ScrollDown; begin DeleteLine(FScrollRange.Top, 1); end; // scroll up one line procedure TComTermBuffer.ScrollUp; begin InsertLine(FScrollRange.Top, 1) end; procedure TComTermBuffer.EraseLineLeft(Column, Row: Integer); var Index: Integer; B: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; // in memory B:= PComTermChar(FBuffer) + ((Row - 1) * FColumns); for Index:= 0 to Column - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(1, Row, Column, Row)); end; // erase line procedure TComTermBuffer.EraseLineRight(Column, Row: Integer); var Index: Integer; Count: Integer; B: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; // in memory Count:= (FColumns - Column + 1); B:= PComTermChar(FBuffer) + ((Row - 1) * FColumns + (Column - 1)); for Index:= 0 to Count - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(Column, Row, FColumns, Row)); end; procedure TComTermBuffer.EraseChar(Column, Row, Count: Integer); var Index: Integer; B: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; if (Column + Count > FColumns) then Count:= FColumns - Column; // in memory B:= PComTermChar(FBuffer) + ((Row - 1) * FColumns + (Column - 1)); for Index:= 0 to Count - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(Column, Row, FColumns, Row)); end; procedure TComTermBuffer.DeleteChar(Column, Row, Count: Integer); var Index: Integer; DstAddr: PComTermChar; SrcAddr: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; if (Column + Count > FColumns) then Count:= FColumns - Column; // in memory DstAddr:= PComTermChar(FBuffer) + ((Row - 1) * FColumns + (Column - 1)); SrcAddr:= PComTermChar(FBuffer) + ((Row - 1) * FColumns + (Column - 1) + Count); // Move characters Count:= (FColumns - (Column + Count)); Move(SrcAddr^, DstAddr^, Count * SizeOf(TComTermChar)); // Erase moved for Index:= 0 to Count - 1 do begin SrcAddr[Index].Ch:= #32; SrcAddr[Index].BackColor:= FOwner.FTermAttr.BackColor; SrcAddr[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(Column, Row, FColumns, Row)); end; procedure TComTermBuffer.DeleteLine(Row, Count: Integer); var Index: Integer; B: PComTermChar; DstAddr: Pointer; SrcAddr: Pointer; BytesToMove: Integer; Top, Bottom: Integer; begin Top:= FScrollRange.Top; Bottom:= FScrollRange.Bottom; if (Row < Top) or (Row > Bottom) then Exit; if (Row - 1) + Count > Bottom then Count:= Bottom - Row + 1; if Row < Bottom then begin DstAddr := (FBuffer + (Row - 1) * FColumns * SizeOf(TComTermChar)); SrcAddr := (FBuffer + (Row + Count - 1) * FColumns * SizeOf(TComTermChar)); BytesToMove := (Bottom - Row - Count + 1) * FColumns * SizeOf(TComTermChar); // scroll in buffer Move(SrcAddr^, DstAddr^, BytesToMove); end; B:= PComTermChar(FBuffer) + ((Bottom - Count) * FColumns); for Index:= 0 to Count * FColumns - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(1, Row, FColumns, Bottom)); end; procedure TComTermBuffer.InsertLine(Row, Count: Integer); var Index: Integer; B: PComTermChar; DstAddr: Pointer; SrcAddr: Pointer; BytesToMove: Integer; Top, Bottom: Integer; begin Top:= FScrollRange.Top; Bottom:= FScrollRange.Bottom; if (Row < Top) or (Row > Bottom) then Exit; if (Row - 1) + Count > Bottom then Count:= Bottom - Row + 1; if Row < Bottom then begin SrcAddr := (FBuffer + (Row - 1) * FColumns * SizeOf(TComTermChar)); DstAddr := (FBuffer + (Row + Count - 1) * FColumns * SizeOf(TComTermChar)); BytesToMove := (Bottom - Row - Count + 1) * FColumns * SizeOf(TComTermChar); // scroll in buffer Move(SrcAddr^, DstAddr^, BytesToMove); end; B:= PComTermChar(FBuffer) + ((Row - 1) * FColumns); for Index:= 0 to Count * FColumns - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(1, Row, FColumns, Bottom)); end; // erase screen procedure TComTermBuffer.EraseScreenLeft(Column, Row: Integer); var Index: Integer; Count: Integer; B: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; // in memory B:= PComTermChar(FBuffer); Count:= (Row * FColumns + Column); for Index:= 0 to Count - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(1, 1, FColumns, Row)) end; // erase screen procedure TComTermBuffer.EraseScreenRight(Column, Row: Integer); var Index: Integer; Count: Integer; B: PComTermChar; begin if (Row > FRows) or (Column > FColumns) then Exit; // in memory B:= PComTermChar(FBuffer) + ((Row - 1) * FColumns + (Column - 1)); Count:= ((FRows - Row) * FColumns + (FColumns - Column) + 1); for Index:= 0 to Count - 1 do begin B[Index].Ch:= #32; B[Index].BackColor:= FOwner.FTermAttr.BackColor; B[Index].FrontColor:= FOwner.FTermAttr.FrontColor; end; // on screen if FOwner.DoubleBuffered then FOwner.Invalidate else FOwner.InvalidatePortion(Classes.Rect(1, Row, FColumns, FRows)) end; // init buffer procedure TComTermBuffer.Init(ARows, AColumns: Integer); var I: Integer; begin if ARows > 0 then FRows:= ARows; if AColumns > 0 then FColumns:= AColumns; if FBuffer <> nil then begin FreeMem(FBuffer); FreeMem(FTabs); end; GetMem(FBuffer, FColumns * FRows * SizeOf(TComTermChar)); FillChar(FBuffer^, FColumns * FRows * SizeOf(TComTermChar), 0); GetMem(FTabs, FColumns * SizeOf(Boolean)); FillChar(FTabs^, FColumns * SizeOf(Boolean), 0); I := 1; while (I <= FColumns) do begin SetTab(I, True); Inc(I, 8); end; FScrollRange.Top:= 1; FScrollRange.Bottom:= FRows; end; // get tab at Column function TComTermBuffer.GetTab(Column: Integer): Boolean; begin Result := Boolean((FTabs + (Column - 1) * SizeOf(Boolean))^); end; // set tab at column procedure TComTermBuffer.SetTab(Column: Integer; Put: Boolean); begin Boolean((FTabs + (Column - 1) * SizeOf(Boolean))^) := Put; end; // find nexts tab position function TComTermBuffer.NextTab(Column: Integer): Integer; var I: Integer; begin I := Column; while (I <= FColumns) do if GetTab(I) then Break else Inc(I); if I > FColumns then Result := 0 else Result := I; end; // clear all tabs procedure TComTermBuffer.ClearAllTabs; begin FillChar(FTabs^, FColumns * SizeOf(Boolean), 0); end; function TComTermBuffer.GetLineLength(Line: Integer): Integer; var I: Integer; begin Result := 0; for I := 1 to FColumns do if GetChar(I, Line).Ch <> #0 then Result := I; end; function TComTermBuffer.GetLastLine: Integer; var J: Integer; begin Result := 0; for J := 1 to FRows do if GetLineLength(J) > 0 then Result := J; end; (***************************************** * TComCustomTerminal control * *****************************************) // create control constructor TCustomComTerminal.Create(AOwner: TComponent); begin FScrollBars := ssVertical; inherited Create(AOwner); Parent:= TWinControl(AOwner); BorderStyle := bsSingle; Color := clBlack; DoubleBuffered := True; TabStop := True; Font.Name := 'Consolas'; Font.Color:= clWhite; FEmulation := teVT100orANSI; FColumns := 80; FRows := 100; FVisibleRows:= 25; FWrapLines := True; FAutoFollow := True; FCaretPos := Classes.Point(1, 1); FTopLeft := Classes.Point(1, 1); FMainBuffer := TComTermBuffer.Create(Self); FAlternateBuffer := TComTermBuffer.Create(Self); FTermAttr.FrontColor := Font.Color; FTermAttr.BackColor := Color; FBuffer:= FMainBuffer; FParams:= TStringList.Create; CreateEscapeCodes; if not (csDesigning in ComponentState) then begin FMainBuffer.Init(FRows, FColumns); FAlternateBuffer.Init(FVisibleRows, FColumns); end; SetBounds(Left, Top, 400, 250); end; // destroy control destructor TCustomComTerminal.Destroy; begin PtyDevice := nil; FMainBuffer.Free; FAlternateBuffer.Free; FEscapeCodes.Free; FParams.Free; inherited Destroy; end; // clear terminal screen procedure TCustomComTerminal.ClearScreen; begin FBuffer.Init(0, 0); MoveCaret(1, 1); Invalidate; end; // move caret procedure TCustomComTerminal.MoveCaret(AColumn, ARow: Integer); begin if AColumn > FBuffer.Columns then begin if FWrapLines then FCaretPos.X := FBuffer.Columns + 1 else FCaretPos.X := FBuffer.Columns end else if AColumn < 1 then FCaretPos.X := 1 else FCaretPos.X := AColumn; if ARow > FBuffer.Rows then FCaretPos.Y := FBuffer.Rows else if ARow < 1 then FCaretPos.Y := 1 else FCaretPos.Y := ARow; if FCaretCreated then SetCaretPos((FCaretPos.X - FTopLeft.X) * FFontWidth, (FCaretPos.Y - FTopLeft.Y) * FFontHeight + FFontHeight - FCaretHeight); end; // write data to screen procedure TCustomComTerminal.Write(const Buffer:string; Size: Integer); var I: Integer; L: Integer; Ch: TUTF8Char; Res: TEscapeResult; begin HideCaret; try // show it on screen I:= 1; while I <= Size do begin L:= UTF8CodepointSizeFast(@Buffer[I]); Ch:= Copy(Buffer, I, L); // got partial character if (I + L - 1 > Size) then begin FPartChar:= Ch; Break; end; if (FEscapeCodes <> nil) then begin Res := FEscapeCodes.ProcessChar(Ch); if Res = erChar then PutChar(FEscapeCodes.Character); if Res = erCode then begin if not PutEscapeCode(FEscapeCodes.Code, FEscapeCodes.Params) then DoUnhandledCode(FEscapeCodes.Code, FEscapeCodes.Data); FEscapeCodes.Params.Clear; end; end else begin PutChar(Ch); end; I+= L; end; finally ShowCaret; end; end; // write string on screen, but not to port procedure TCustomComTerminal.WriteStr(const Str: string); begin Write(Str, Length(Str)); end; // write escape code on screen procedure TCustomComTerminal.WriteEscCode(ACode: TEscapeCode; AParams: TStrings); begin if FEscapeCodes <> nil then PutEscapeCode(ACode, AParams); end; // load screen buffer from file procedure TCustomComTerminal.LoadFromStream(Stream: TStream); var ABuffer: TBytes; begin HideCaret; ABuffer:= Default(TBytes); SetLength(ABuffer, Stream.Size); Stream.ReadBuffer(ABuffer[0], Length(ABuffer)); RxBuf(Self, ABuffer[0], Length(ABuffer)); ShowCaret; end; // save screen buffer to file procedure TCustomComTerminal.SaveToStream(Stream: TStream); var I, J: Integer; Ch: TUTF8Char; EndLine: string; LastChar, LastLine: Integer; begin EndLine := #13#10; LastLine := FBuffer.GetLastLine; for J := 1 to LastLine do begin LastChar := FBuffer.GetLineLength(J); if LastChar > 0 then begin for I := 1 to LastChar do begin Ch := FBuffer.GetChar(I, J).Ch; // replace null characters with blanks if Ch = #0 then Ch := #32; Stream.Write(Ch, Length(Ch)); end; end; // new line if J <> LastLine then Stream.Write(EndLine[1], Length(EndLine)); end; end; // select terminal font procedure TCustomComTerminal.SelectFont; begin with TFontDialog.Create(Application) do begin Options := Options + [fdFixedPitchOnly]; Font := Self.Font; if Execute then Self.Font := Font; Free; end; end; // process font change procedure TCustomComTerminal.CMFontChanged(var Message: TMessage); begin inherited; FTermAttr.FrontColor := Font.Color; if not CalculateMetrics then ;//Font.Name := ComTerminalFont.Name; if fsUnderline in Font.Style then Font.Style := Font.Style - [fsUnderline]; AdjustSize; UpdateScrollRange; end; procedure TCustomComTerminal.CMColorChanged(var Message: TMessage); begin inherited; FTermAttr.BackColor := Color; end; procedure TCustomComTerminal.WMGetDlgCode(var Message: TWMGetDlgCode); begin // request arrow keys and WM_CHAR message to be handled by the control Message.Result := DLGC_WANTARROWS or DLGC_WANTCHARS; // tab key if FWantTab then Message.Result := Message.Result or DLGC_WANTTAB; end; // lost focus procedure TCustomComTerminal.WMKillFocus(var Message: TWMSetFocus); begin // destroy caret because it could be requested by some other control DestroyCaret(Handle); FCaretCreated := False; inherited; end; // gained focus procedure TCustomComTerminal.WMSetFocus(var Message: TWMSetFocus); begin inherited; // control activated, create caret InitCaret; end; // left button pressed procedure TCustomComTerminal.WMLButtonDown(var Message: TLMLButtonDown); begin // set focus when left button down if CanFocus and TabStop then SetFocus; inherited; end; // size changed procedure TCustomComTerminal.WMSize(var Msg: TWMSize); var ARows, AColumns: Integer; begin inherited WMSize(Msg); if (ClientWidth = 0) or (ClientHeight = 0) then Exit; ARows:= Max(2, ClientHeight div FFontHeight); AColumns:= Max(2, ClientWidth div FFontWidth); if (ARows <> FVisibleRows) or (AColumns <> FColumns) then begin FColumns := AColumns; FVisibleRows := ARows; FRows := Max(FRows, FVisibleRows); AdjustSize; if not ((csLoading in ComponentState) or (csDesigning in ComponentState)) then begin FMainBuffer.Init(FRows, FColumns); FAlternateBuffer.Init(FVisibleRows, FColumns); if Assigned(FPtyDevice) then FPtyDevice.SetScreenSize(FColumns, FVisibleRows); Invalidate; end; UpdateScrollRange; if (FCaretPos.Y = FBuffer.Rows) or ((FCaretPos.Y - FTopLeft.Y) >= FVisibleRows) then begin ARows:= FCaretPos.Y - FVisibleRows; ModifyScrollBar(SB_Vert, SB_THUMBPOSITION, ARows); end; end; end; // vertical scroll procedure TCustomComTerminal.WMHScroll(var Message: TWMHScroll); begin ModifyScrollBar(SB_HORZ, Message.ScrollCode, Message.Pos); end; // horizontal scroll procedure TCustomComTerminal.WMVScroll(var Message: TWMVScroll); begin ModifyScrollBar(SB_VERT, Message.ScrollCode, Message.Pos); end; // set size to fit whole terminal screen function TCustomComTerminal.CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; var Border: Integer; begin Result := True; if Align in [alNone, alLeft, alRight] then begin NewWidth := FFontWidth * FColumns; if BorderStyle = bsSingle then begin Border := SM_CXBORDER; NewWidth := NewWidth + 2 * GetSystemMetrics(BORDER); end; end; if Align in [alNone, alTop, alBottom] then begin NewHeight := FFontHeight * FRows; if BorderStyle = bsSingle then begin Border := SM_CYBORDER; NewHeight := NewHeight + 2 * GetSystemMetrics(Border); end; end; end; // set control parameters procedure TCustomComTerminal.CreateParams(var Params: TCreateParams); const BorderStyles: array[TBorderStyle] of DWORD = (0, WS_BORDER); begin inherited CreateParams(Params); with Params do begin Style := Style or BorderStyles[BorderStyle]; if NewStyleControls and (BorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; end; if FScrollBars in [ssVertical, ssBoth] then Style := Style or WS_VSCROLL; if FScrollBars in [ssHorizontal, ssBoth] then Style := Style or WS_HSCROLL; end; ControlStyle := ControlStyle + [csOpaque]; end; // key down procedure TCustomComTerminal.KeyDown(var Key: Word; Shift: TShiftState); var Code: TEscapeCode; begin inherited KeyDown(Key, Shift); if (Key in [VK_TAB, VK_ESCAPE]) then begin SendChar(Chr(Key)); Key:= 0; Exit; end; if (Key = VK_BACK) then begin SendChar(#$7f); Key:= 0; Exit; end; if Key in [VK_F1..VK_F12] then begin Code := ecFuncKey; FParams.Text:= IntToStr(Key - VK_F1); SendCode(Code, FParams); Exit; end; case Key of VK_INSERT: Code := ecInsertKey; VK_DELETE: Code := ecDeleteKey; VK_PRIOR: Code := ecPageUpKey; VK_NEXT: Code := ecPageDownKey; else Code := ecUnknown; end; if (Code <> ecUnknown) then begin SendCode(Code, nil); Exit; end; case Key of VK_UP: Code := ecCursorUp; VK_DOWN: Code := ecCursorDown; VK_LEFT: Code := ecCursorLeft; VK_RIGHT: Code := ecCursorRight; VK_HOME: Code := ecCursorHome; VK_END: Code := ecCursorEnd; else Code := ecUnknown; end; if FTermMode.Keys = akTerminal then begin if Code <> ecUnknown then if FArrowKeys = akTerminal then SendCode(Code, nil) else PutEscapeCode(Code, nil); end else case Code of ecCursorUp: SendCode(ecAppCursorUp, nil); ecCursorDown: SendCode(ecAppCursorDown, nil); ecCursorLeft: SendCode(ecAppCursorLeft, nil); ecCursorRight: SendCode(ecAppCursorRight, nil); ecCursorHome: SendCode(ecAppCursorHome, nil); ecCursorEnd: SendCode(ecAppCursorEnd, nil); end; {$IFDEF LCLGTK2} if Key in [VK_UP, VK_DOWN] then begin Key:= 0; end; {$ENDIF} end; // key pressed procedure TCustomComTerminal.KeyPress(var Key: Char); begin inherited KeyPress(Key); // SendChar(Key); end; procedure TCustomComTerminal.UTF8KeyPress(var UTF8Key: TUTF8Char); begin inherited UTF8KeyPress(UTF8Key); SendChar(UTF8Key); end; procedure TCustomComTerminal.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseDown(Button, Shift, X, Y); MouseEvent(ecMouseDown, Button, Shift, X, Y); end; procedure TCustomComTerminal.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); MouseEvent(ecMouseUp, Button, Shift, X, Y); end; procedure TCustomComTerminal.CreateWnd; begin inherited CreateWnd; if FScrollBars in [ssVertical, ssBoth] then ShowScrollBar(Handle, SB_VERT, True); if FScrollBars in [ssHorizontal, ssBoth] then ShowScrollBar(Handle, SB_HORZ, True); end; procedure TCustomComTerminal.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (AComponent = FPtyDevice) and (Operation = opRemove) then PtyDevice := nil; end; // paint characters procedure TCustomComTerminal.PaintTerminal(Rect: TRect); var I, J, X, Y: Integer; Ch: TComTermChar; begin HideCaret; if (Rect.Bottom + FTopLeft.Y - 1) > FBuffer.Rows then Dec(Rect.Bottom); if (Rect.Right + FTopLeft.X - 1) > FBuffer.Columns then Dec(Rect.Right); for J := Rect.Top to Rect.Bottom do begin Y := J + FTopLeft.Y - 1; for I := Rect.Left to Rect.Right do begin X := I + FTopLeft.X - 1; Ch := FBuffer.GetChar(X, Y); if Ch.Ch <> Chr(0) then DrawChar(I, J, Ch); end; end; ShowCaret; end; procedure TCustomComTerminal.PaintDesign; begin Canvas.TextOut(0, 0, 'Virtual Terminal Emulator'); end; procedure TCustomComTerminal.Paint; var ARect: TRect; begin Canvas.Font := Font; Canvas.Brush.Color := Color; if csDesigning in ComponentState then PaintDesign else begin MoveCaret(FCaretPos.X, FCaretPos.Y); // don't paint whole screen, but only the invalidated portion ARect.Left := Canvas.ClipRect.Left div FFontWidth + 1; ARect.Right := Min(Canvas.ClipRect.Right div FFontWidth + 1, FBuffer.Columns); ARect.Top := Canvas.ClipRect.Top div FFontHeight + 1; ARect.Bottom := Min(Canvas.ClipRect.Bottom div FFontHeight + 1, FBuffer.Rows); PaintTerminal(ARect); end; end; // creates caret procedure TCustomComTerminal.CreateTerminalCaret; begin FCaretHeight := 0; if FCaret = tcBlock then FCaretHeight := FFontHeight else if FCaret = tcUnderline then FCaretHeight := FFontHeight div 8; if FCaretHeight > 0 then begin CreateCaret(Handle, 0, FFontWidth, FCaretHeight); FCaretCreated := True; end; end; // string received from com port procedure TCustomComTerminal.StringReceived(Str: string); begin DoStrRecieved(Str); WriteStr(Str); end; // draw one character on screen, but do not put it in buffer procedure TCustomComTerminal.DrawChar(AColumn, ARow: Integer; Ch: TComTermChar); var OldBackColor, OldFrontColor: Integer; begin OldBackColor := Canvas.Brush.Color; OldFrontColor := Canvas.Font.Color; Canvas.Brush.Color := Ch.BackColor; Canvas.Font.Color := Ch.FrontColor; if Ch.Bold then Canvas.Font.Style := Canvas.Font.Style + [fsBold] else begin Canvas.Font.Style := Canvas.Font.Style - [fsBold]; end; if Ch.Underline then Canvas.Font.Style := Canvas.Font.Style + [fsUnderline] else begin Canvas.Font.Style := Canvas.Font.Style - [fsUnderline]; end; Canvas.TextOut((AColumn - 1) * FFontWidth, (ARow - 1) * FFontHeight, Ch.Ch); Canvas.Brush.Color := OldBackColor; Canvas.Font.Color := OldFrontColor; end; procedure TCustomComTerminal.WrapLine(AWidth: Integer); begin if FCaretPos.X + AWidth > FBuffer.Columns + 1 then begin if FCaretPos.Y = FBuffer.Rows then begin FBuffer.ScrollDown; MoveCaret(1, FCaretPos.Y); end else begin MoveCaret(1, FCaretPos.Y + 1) end; end; end; // move caret after new char is put on screen procedure TCustomComTerminal.AdvanceCaret(Kind: TAdvanceCaret); var I: Integer; begin case Kind of acChar: begin if (FCaretPos.X < FColumns) or FWrapLines then MoveCaret(FCaretPos.X + 1, FCaretPos.Y); end; acReturn: MoveCaret(1, FCaretPos.Y); acLineFeed: begin if FCaretPos.Y = FBuffer.FScrollRange.Bottom then FBuffer.ScrollDown else MoveCaret(FCaretPos.X, FCaretPos.Y + 1); end; acReverseLineFeed: begin if FCaretPos.Y = FBuffer.FScrollRange.Top then FBuffer.ScrollUp else MoveCaret(FCaretPos.X, FCaretPos.Y - 1); end; acBackSpace: MoveCaret(FCaretPos.X - 1, FCaretPos.Y); acTab: begin I := FBuffer.NextTab(FCaretPos.X + 1); if I > 0 then MoveCaret(I, FCaretPos.Y); end; acPage: ClearScreen; end; if FAutoFollow then begin if (FCaretPos.Y - FTopLeft.Y) > FVisibleRows then begin I:= FCaretPos.Y - FVisibleRows + 1; ModifyScrollBar(SB_Vert, SB_THUMBPOSITION, I); end; end; end; // set character attributes procedure TCustomComTerminal.SetAttributes(AParams: TStrings); var I, Value: Integer; procedure AllOff; begin FTermAttr.FrontColor := Font.Color; FTermAttr.BackColor := Color; FTermAttr.Invert := False; FTermAttr.Bold := False; FTermAttr.Underline := False; end; function GetExtendedColor(var Index: Integer): TColor; var RGB: Integer; R, G, B: Byte; AParam: Integer; begin AParam:= FEscapeCodes.GetParam(Index + 1, AParams); // Color from RGB value if AParam = 2 then begin R:= FEscapeCodes.GetParam(Index + 2, AParams); G:= FEscapeCodes.GetParam(Index + 3, AParams); B:= FEscapeCodes.GetParam(Index + 4, AParams); Result:= RGBToColor(R, G, B); Inc(Index, 4); end // Color from 256 color palette else if (AParam = 5) then begin RGB:= FEscapeCodes.GetParam(Index + 2, AParams); if (RGB >= 0) and (RGB < 256) then begin Result:= Color256Table[RGB]; end; Inc(Index, 2); end; end; begin I:= 1; if AParams.Count = 0 then AllOff; while I <= AParams.Count do begin Value := FEscapeCodes.GetParam(I, AParams); case Value of 0: AllOff; 1: FTermAttr.Bold := True; 4: FTermAttr.Underline := True; 7: FTermAttr.Invert := True; 22: FTermAttr.Bold := False; 24: FTermAttr.Underline := False; 27: FTermAttr.Invert := False; // Extended foreground color 38: FTermAttr.FrontColor := GetExtendedColor(I); // Default foreground color 39: FTermAttr.FrontColor := Font.Color; // Extended background color 48: FTermAttr.BackColor := GetExtendedColor(I); // Default background color 49: FTermAttr.BackColor := Color; // NEW foreground colors else if (Value in [30..37]) then FTermAttr.FrontColor := Color256Table[Value - 30] // NEW background colors else if (Value in [40..47]) then FTermAttr.BackColor := Color256Table[Value - 40] // BRIGHT foreground colors else if (Value in [90..97]) then FTermAttr.FrontColor := Color256Table[Value - 90 + 8] // BRIGHT background colors else if (Value in [100..107]) then FTermAttr.BackColor := Color256Table[Value - 100 + 8] else begin DoUnhandledCode(ecAttributes, IntToStr(Value)); end; end; Inc(I); end; end; procedure TCustomComTerminal.SetMode(AParams: TStrings; OnOff: Boolean); var Str: string; begin if AParams.Count = 0 then Exit; Str := AParams[0]; if Str = '?1' then begin if OnOff then FTermMode.Keys := akWindows else FTermMode.Keys := akTerminal; end else if Str = '?7' then FWrapLines := OnOff else if Str = '?3' then begin if OnOff then Columns := 132 else Columns := 80; end else if Str = '?1002' then FTermMode.MouseTrack:= OnOff else if Str = '?1006' then FTermMode.MouseMode:= OnOff else if Str = '?1049' then begin FBuffer.FTopLeft:= FTopLeft; FBuffer.FCaretPos:= FCaretPos; if OnOff then FBuffer := FAlternateBuffer else begin FBuffer := FMainBuffer; end; FTopLeft:= FBuffer.FTopLeft; FCaretPos:= FBuffer.FCaretPos; UpdateScrollRange; Invalidate; end else begin DoUnhandledMode(Str, OnOff); end; end; // invalidate portion of screen procedure TCustomComTerminal.InvalidatePortion(ARect: TRect); var Rect: TRect; begin Rect.Left := Max((ARect.Left - FTopLeft.X) * FFontWidth, 0); Rect.Right := Max((ARect.Right - FTopLeft.X + 1) * FFontWidth, 0); Rect.Top := Max((ARect.Top - FTopLeft.Y) * FFontHeight, 0); Rect.Bottom := Max((ARect.Bottom - FTopLeft.Y + 1) * FFontHeight, 0); InvalidateRect(Handle, @Rect, True); end; // modify scroll bar procedure TCustomComTerminal.ModifyScrollBar(ScrollBar, ScrollCode, Pos: Integer); var CellSize, OldPos, APos, Dx, Dy: Integer; begin if (ScrollCode = SB_ENDSCROLL) or ((ScrollCode = SB_THUMBTRACK) and not FSmoothScroll) then Exit; if ScrollBar = SB_HORZ then CellSize := FFontWidth else CellSize := FFontHeight; APos := GetScrollPos(Handle, ScrollBar); OldPos := APos; case ScrollCode of SB_LINEUP: Dec(APos); SB_LINEDOWN: Inc(APos); SB_PAGEUP: Dec(APos, ClientHeight div CellSize); SB_PAGEDOWN: Inc(APos, ClientHeight div CellSize); SB_THUMBPOSITION, SB_THUMBTRACK: APos := Pos; end; SetScrollPos(Handle, ScrollBar, APos, True); APos := GetScrollPos(Handle, ScrollBar); if ScrollBar = SB_HORZ then begin FTopLeft.X := APos + 1; Dx := (OldPos - APos) * FFontWidth; Dy := 0; end else begin FTopLeft.Y := APos + 1; Dx := 0; Dy := (OldPos - APos) * FFontHeight; end; if DoubleBuffered then Invalidate else ScrollWindowEx(Handle, Dx, Dy, nil, nil, 0, nil, SW_ERASE or SW_INVALIDATE); end; // calculate scroll position procedure TCustomComTerminal.UpdateScrollPos; begin if FScrollBars in [ssBoth, ssHorizontal] then begin SetScrollPos(Handle, SB_HORZ, FTopLeft.X - 1, True); end; if FScrollBars in [ssBoth, ssVertical] then begin SetScrollPos(Handle, SB_VERT, FTopLeft.Y - 1, True); end; end; // calculate scroll range procedure TCustomComTerminal.UpdateScrollRange; var OldScrollBars: TScrollStyle; AHeight, AWidth: Integer; // is scroll bar visible? function ScrollBarVisible(Code: Word): Boolean; var Min, Max: Integer; begin Result := False; if (ScrollBars = ssBoth) or ((Code = SB_HORZ) and (ScrollBars = ssHorizontal)) or ((Code = SB_VERT) and (ScrollBars = ssVertical)) then begin GetScrollRange(Handle, Code, Min, Max); Result := Min <> Max; end; end; procedure SetRange(Code, Max: Integer); var Info: TScrollInfo; begin Info:= Default(TScrollInfo); Info.fMask := SIF_RANGE or SIF_PAGE; Info.nMax := Max; Info.nPage := 1; SetScrollInfo(Handle, Code, Info, False); end; // set horizontal range procedure SetHorzRange; var Max: Integer; AColumns: Integer; begin if OldScrollBars in [ssBoth, ssHorizontal] then begin AColumns := AWidth div FFontWidth; if AColumns >= FBuffer.Columns then SetRange(SB_HORZ, 1) // screen is wide enough, hide scroll bar else begin Max := FBuffer.Columns - (AColumns - 1); SetRange(SB_HORZ, Max); end; end; end; // set vertical range procedure SetVertRange; var Max, ARows: Integer; begin if OldScrollBars in [ssBoth, ssVertical] then begin ARows := AHeight div FFontHeight; if ARows >= FBuffer.Rows then SetRange(SB_VERT, 1) // screen is high enough, hide scroll bar else begin Max := FBuffer.Rows - (ARows - 1); SetRange(SB_VERT, Max); end; end; end; begin if (FScrollBars = ssNone) or (FBuffer = nil) then Exit; AHeight := ClientHeight; AWidth := ClientWidth; if ScrollBarVisible(SB_HORZ) then Inc(AHeight, GetSystemMetrics(SM_CYHSCROLL)); if ScrollBarVisible(SB_VERT) then Inc(AWidth, GetSystemMetrics(SM_CXVSCROLL)); // Temporarily mark us as not having scroll bars to avoid recursion OldScrollBars := FScrollBars; FScrollBars := ssNone; try SetHorzRange; AHeight := ClientHeight; SetVertRange; if AWidth <> ClientWidth then begin AWidth := ClientWidth; SetHorzRange; end; finally FScrollBars := OldScrollBars; end; // range changed, update scroll bar position UpdateScrollPos; end; // hide caret procedure TCustomComTerminal.HideCaret; begin if FCaretCreated then LCLIntf.HideCaret(Handle); end; // show caret procedure TCustomComTerminal.ShowCaret; begin if FCaretCreated then LCLIntf.ShowCaret(Handle); end; // send character to com port procedure TCustomComTerminal.SendChar(Ch: TUTF8Char); begin if (FPtyDevice <> nil) and (FPtyDevice.Connected) then begin FPtyDevice.WriteStr(Ch); if FLocalEcho then begin // local echo is on, show character on screen HideCaret; PutChar(Ch); ShowCaret; end; // send line feeds after carriage return if (Ch = Chr(13)) and FSendLF then SendChar(Chr(10)); end; end; // send escape code procedure TCustomComTerminal.SendCode(Code: TEscapeCode; AParams: TStrings); begin if (FPtyDevice <> nil) and (FPtyDevice.Connected) and (FEscapeCodes <> nil) then begin FPtyDevice.WriteStr(FEscapeCodes.EscCodeToStr(Code, AParams)); if FLocalEcho then begin // local echo is on, show character on screen HideCaret; PutEscapeCode(Code, AParams); ShowCaret; end; end; end; // send escape code to port procedure TCustomComTerminal.SendCodeNoEcho(Code: TEscapeCode; AParams: TStrings); begin if (FPtyDevice <> nil) and (FPtyDevice.Connected) and (FEscapeCodes <> nil) then FPtyDevice.WriteStr(FEscapeCodes.EscCodeToStr(Code, AParams)); end; procedure TCustomComTerminal.MouseEvent(Code: TEscapeCode; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var AButton: Integer; begin if (FTermMode.MouseMode and FTermMode.MouseTrack) then begin case Button of mbLeft: AButton:= 0; mbRight: AButton:= 2; mbMiddle: AButton:= 1; else AButton:= Ord(Button); end; FParams.Text:= IntToStr(AButton); FParams.Add(IntToStr(X div FFontWidth + 1)); FParams.Add(IntToStr(Y div FFontHeight + 1)); SendCodeNoEcho(Code, FParams); end; end; // process escape code on screen function TCustomComTerminal.PutEscapeCode(ACode: TEscapeCode; AParams: TStrings): Boolean; begin Result := True; with FEscapeCodes do case ACode of ecCursorUp: MoveCaret(FCaretPos.X, FCaretPos.Y - GetParam(1, AParams)); ecCursorDown: MoveCaret(FCaretPos.X, FCaretPos.Y + GetParam(1, AParams)); ecCursorRight: MoveCaret(FCaretPos.X + GetParam(1, AParams), FCaretPos.Y); ecCursorLeft: MoveCaret(FCaretPos.X - GetParam(1, AParams), FCaretPos.Y); ecCursorNextLine: MoveCaret(1, FCaretPos.Y + GetParam(1, AParams)); ecCursorPrevLine: MoveCaret(1, FCaretPos.Y - GetParam(1, AParams)); ecCursorMove: MoveCaret(GetParam(2, AParams), GetParam(1, AParams)); ecCursorMoveX: MoveCaret(GetParam(1, AParams), FCaretPos.Y); ecCursorMoveY: MoveCaret(FCaretPos.X, GetParam(1, AParams)); ecReverseLineFeed: AdvanceCaret(acReverseLineFeed); ecEraseLineLeft: FBuffer.EraseLineLeft(FCaretPos.X, FCaretPos.Y); ecEraseLineRight: FBuffer.EraseLineRight(FCaretPos.X, FCaretPos.Y); ecEraseLine: begin FBuffer.EraseLineRight(1, FCaretPos.Y); MoveCaret(1, FCaretPos.Y) end; ecEraseScreenLeft: FBuffer.EraseScreenLeft(FCaretPos.X, FCaretPos.Y); ecEraseScreenRight: FBuffer.EraseScreenRight(FCaretPos.X, FCaretPos.Y); ecEraseScreen: begin FBuffer.EraseScreenRight(1, 1); MoveCaret(1, 1) end; ecEraseChar: FBuffer.EraseChar(FCaretPos.X, FCaretPos.Y, GetParam(1, AParams)); ecDeleteChar: FBuffer.DeleteChar(FCaretPos.X, FCaretPos.Y, GetParam(1, AParams)); ecIdentify: begin AParams.Clear; AParams.Add('2'); SendCodeNoEcho(ecIdentResponse, AParams); end; ecSetTab: FBuffer.SetTab(FCaretPos.X, True); ecClearTab: FBuffer.SetTab(FCaretPos.X, False); ecClearAllTabs: FBuffer.ClearAllTabs; ecAttributes: SetAttributes(AParams); ecSetMode: SetMode(AParams, True); ecResetMode: SetMode(AParams, False); ecReset: begin AParams.Clear; AParams.Add('0'); SetAttributes(AParams); end; ecSaveCaret: SaveCaretPos; ecRestoreCaret: RestoreCaretPos; ecSaveCaretAndAttr: begin SaveCaretPos; SaveAttr; end; ecRestoreCaretAndAttr: begin RestoreCaretPos; RestoreAttr; end; ecQueryCursorPos: begin AParams.Clear; AParams.Add(IntToStr(FCaretPos.Y)); AParams.Add(IntToStr(FCaretPos.X)); SendCodeNoEcho(ecReportCursorPos, AParams); end; ecQueryDevice: SendCodeNoEcho(ecReportDeviceOK, nil); ecTest: PerformTest('E'); ecScrollRegion: begin FBuffer.FScrollRange.Top:= GetParam(1, AParams); FBuffer.FScrollRange.Bottom:= GetParam(2, AParams); end; ecScrollDown, ecInsertLine: FBuffer.InsertLine(FCaretPos.Y, GetParam(1, AParams)); ecScrollUp, ecDeleteLine: FBuffer.DeleteLine(FCaretPos.Y, GetParam(1, AParams)); ecSoftReset: begin FTermMode.CharSet:= False; FBuffer.FScrollRange.Top:= 1; FBuffer.FScrollRange.Bottom:= FBuffer.Rows; end; ecCharSet: begin // Designate Character Set if (AParams.Count > 0) and (Length(AParams[0]) > 0) then FTermMode.CharSet:= (AParams[0] = '0'); end else Result := False; end; end; // calculate font height and width function TCustomComTerminal.CalculateMetrics: Boolean; var Metrics: TTextMetric; begin GetTextMetrics(Canvas.Handle, Metrics); FFontHeight := Metrics.tmHeight; FFontWidth := Metrics.tmAveCharWidth; // allow only fixed pitch fonts Result := (Metrics.tmPitchAndFamily and TMPF_FIXED_PITCH) = 0; end; // visual character is appears on screen procedure TCustomComTerminal.DoChar(Ch: TUTF8Char); begin if Assigned(FOnChar) then FOnChar(Self, Ch); end; // get custom escape codes processor procedure TCustomComTerminal.DoGetEscapeCodes( var EscapeCodes: TEscapeCodes); begin if Assigned(FOnGetEscapeCodes) then FOnGetEscapeCodes(Self, EscapeCodes); end; // string recieved procedure TCustomComTerminal.DoStrRecieved(var Str: string); begin if Assigned(FOnStrRecieved) then FOnStrRecieved(Self, Str); end; // let application handle unhandled escape code procedure TCustomComTerminal.DoUnhandledCode(Code: TEscapeCode; Data: string); begin if Assigned(FOnUnhandledCode) then FOnUnhandledCode(Self, Code, Data); end; procedure TCustomComTerminal.DoUnhandledMode(const Data: string; OnOff: Boolean); begin if Assigned(FOnUnhandledMode) then FOnUnhandledMode(Self, Data, OnOff); end; function TCustomComTerminal.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; var APos: Integer; begin Result:= True; APos:= GetScrollPos(Handle, SB_VERT); if WheelDelta < 0 then APos:= APos + Mouse.WheelScrollLines else begin APos:= APos - Mouse.WheelScrollLines; end; ModifyScrollBar(SB_VERT, SB_THUMBPOSITION, APos); end; // create escape codes processor procedure TCustomComTerminal.CreateEscapeCodes; begin if csDesigning in ComponentState then Exit; case FEmulation of teVT52: FEscapeCodes := TEscapeCodesVT52.Create; teVT100orANSI: FEscapeCodes := TEscapeCodesVT100.Create; else begin FEscapeCodes := nil; DoGetEscapeCodes(FEscapeCodes); end; end; end; // perform screen test procedure TCustomComTerminal.PerformTest(ACh: Char); var I, J: Integer; TermCh: TComTermChar; begin with TermCh do begin Ch := ACh; FrontColor := Font.Color; BackColor := Color; Underline := False; end; for I := 1 to FBuffer.Columns do for J := 1 to FBuffer.Rows do FBuffer.SetChar(I, J, TermCh); Invalidate; end; // get current character properties function TCustomComTerminal.GetCharAttr: TComTermChar; begin if FTermAttr.Invert then // Result.FrontColor := Color Result.FrontColor := FTermAttr.BackColor else // Result.BackColor := Font.Color; Result.FrontColor := FTermAttr.FrontColor; if FTermAttr.Invert then // Result.BackColor := Font.Color Result.BackColor := FTermAttr.FrontColor else // Result.FrontColor := Color Result.BackColor := FTermAttr.BackColor; // NEW end changes Result.Bold := FTermAttr.Bold; Result.Underline := FTermAttr.Underline; Result.Ch := #0; end; // put one character on screen procedure TCustomComTerminal.PutChar(Ch: TUTF8Char); var AWidth: Integer; TermCh: TComTermChar; begin case Ch[1] of #8: AdvanceCaret(acBackspace); #9: AdvanceCaret(acTab); #10: AdvanceCaret(acLineFeed); #12: AdvanceCaret(acPage); #13: AdvanceCaret(acReturn); #32..#255: begin TermCh := GetCharAttr; if not FTermMode.CharSet then TermCh.Ch := Ch else begin case Ch[1] of 'j': TermCh.Ch := '┘'; 'k': TermCh.Ch := '┐'; 'l': TermCh.Ch := '┌'; 'm': TermCh.Ch := '└'; 'n': TermCh.Ch := '┼'; 'q': TermCh.Ch := '─'; 't': TermCh.Ch := '├'; 'u': TermCh.Ch := '┤'; 'v': TermCh.Ch := '┴'; 'w': TermCh.Ch := '┬'; 'x': TermCh.Ch := '│'; else TermCh.Ch := Ch; end; end; AWidth:= UTF8Width(Ch); if AWidth <= 0 then Exit; if FWrapLines then WrapLine(AWidth); FBuffer.SetChar(FCaretPos.X, FCaretPos.Y, TermCh); DrawChar(FCaretPos.X - FTopLeft.X + 1, FCaretPos.Y - FTopLeft.Y + 1, TermCh); AdvanceCaret(acChar); Dec(AWidth); while (AWidth > 0) do begin TermCh.Ch := #0; FBuffer.SetChar(FCaretPos.X, FCaretPos.Y, TermCh); AdvanceCaret(acChar); Dec(AWidth); end; end; end; DoChar(Ch); end; // init caret procedure TCustomComTerminal.InitCaret; begin CreateTerminalCaret; MoveCaret(FCaretPos.X, FCaretPos.Y); ShowCaret; end; // restore caret position procedure TCustomComTerminal.RestoreCaretPos; begin MoveCaret(FSaveCaret.X, FSaveCaret.Y); end; // save caret position procedure TCustomComTerminal.SaveCaretPos; begin FSaveCaret := FCaretPos; end; // restore attributes procedure TCustomComTerminal.RestoreAttr; begin FTermAttr := FSaveAttr; end; // save attributes procedure TCustomComTerminal.SaveAttr; begin FSaveAttr := FTermAttr; end; procedure TCustomComTerminal.RxBuf(Sender: TObject; const Buffer; Count: Integer); var L: Integer; Str: String; // append line feeds to carriage return procedure AppendLineFeeds; var I: Integer; begin I := 1; while I <= Length(Str) do begin if Str[I] = Chr(13) then Str := Copy(Str, 1, I) + Chr(10) + Copy(Str, I + 1, Length(Str) - I); Inc(I); end; end; // convert to 7 bit data procedure Force7BitData; var I: Integer; begin for I := 1 to Length(Str) do Str[I] := Char(Byte(Str[I]) and $0FFFFFFF); end; begin if (Length(FPartChar) = 0) then begin SetLength(Str, Count); Move(Buffer, Str[1], Count); end else begin L:= Length(FPartChar); SetLength(Str, Count + L); Move(FPartChar[1], Str[1], L); Move(Buffer, Str[L + 1], Count); FPartChar:= EmptyStr; end; if FForce7Bit then begin Force7BitData; end; if FAppendLF then begin AppendLineFeeds; end; StringReceived(Str); end; function TCustomComTerminal.GetConnected: Boolean; begin Result := False; if FPtyDevice <> nil then Result := FPtyDevice.Connected; end; procedure TCustomComTerminal.SetConnected(const Value: Boolean); begin if FPtyDevice <> nil then FPtyDevice.Connected := Value; end; procedure TCustomComTerminal.SetScrollBars(const Value: TScrollStyle); begin if FScrollBars <> Value then begin FScrollBars := Value; RecreateWnd(Self); end; end; procedure TCustomComTerminal.SetColumns(const Value: Integer); begin if Value <> FColumns then begin FColumns := Min(Max(2, Value), 256); AdjustSize; if not ((csLoading in ComponentState) or (csDesigning in ComponentState)) then begin FMainBuffer.Init(0, FColumns); FAlternateBuffer.Init(0, FColumns); if Assigned(FPtyDevice) then FPtyDevice.SetScreenSize(FColumns, FVisibleRows); Invalidate; end; UpdateScrollRange; end; end; procedure TCustomComTerminal.SetRows(const Value: Integer); var ARows: Integer; begin ARows := Max(Value, FVisibleRows); if ARows <> FRows then begin FRows := ARows; if not ((csLoading in ComponentState) or (csDesigning in ComponentState)) then begin FMainBuffer.Init(FRows, 0); end; UpdateScrollRange; end; end; procedure TCustomComTerminal.SetEmulation(const Value: TTermEmulation); begin if FEmulation <> Value then begin FEmulation := Value; if not (csLoading in ComponentState) then begin FEscapeCodes.Free; CreateEscapeCodes; end; end; end; procedure TCustomComTerminal.SetCaret(const Value: TTermCaret); begin if Value <> FCaret then begin FCaret := Value; if Focused then begin DestroyCaret(Handle); InitCaret; end; end; end; procedure TCustomComTerminal.SetPtyDevice(const Value: TCustomPtyDevice); begin if Value <> FPtyDevice then begin if FPtyDevice <> nil then begin FPtyDevice.OnRxBuf:= nil; end; FPtyDevice := Value; if FPtyDevice <> nil then begin FPtyDevice.OnRxBuf:= RxBuf; FPtyDevice.FreeNotification(Self); FPtyDevice.SetScreenSize(FColumns, FVisibleRows); end; end; end; end. ��������������������������������doublecmd-1.1.30/components/virtualterminal/source/vtcolortable.pas���������������������������������0000644�0001750�0000144�00000005364�15104114162�024711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTColorTable; {$mode delphi} interface uses Classes, SysUtils, Graphics; const Color256Table: array[Byte] of TColor = ( $0C0C0C, $1F0FC5, $0EA113, $009CC1, $DA3700, $981788, $DD963A, $CCCCCC, $767676, $5648E7, $0CC616, $A5F1F9, $FF783B, $9E00B4, $D6D661, $F2F2F2, $000000, $5F0000, $870000, $AF0000, $D70000, $FF0000, $005F00, $5F5F00, $875F00, $AF5F00, $D75F00, $FF5F00, $008700, $5F8700, $878700, $AF8700, $D78700, $FF8700, $00AF00, $5FAF00, $87AF00, $AFAF00, $D7AF00, $FFAF00, $00D700, $5FD700, $87D700, $AFD700, $D7D700, $FFD700, $00FF00, $5FFF00, $87FF00, $AFFF00, $D7FF00, $FFFF00, $00005F, $5F005F, $87005F, $AF005F, $D7005F, $FF005F, $005F5F, $5F5F5F, $875F5F, $AF5F5F, $D75F5F, $FF5F5F, $00875F, $5F875F, $87875F, $AF875F, $D7875F, $FF875F, $00AF5F, $5FAF5F, $87AF5F, $AFAF5F, $D7AF5F, $FFAF5F, $00D75F, $5FD75F, $87D75F, $AFD75F, $D7D75F, $FFD75F, $00FF5F, $5FFF5F, $87FF5F, $AFFF5F, $D7FF5F, $FFFF5F, $000087, $5F0087, $870087, $AF0087, $D70087, $FF0087, $005F87, $5F5F87, $875F87, $AF5F87, $D75F87, $FF5F87, $008787, $5F8787, $878787, $AF8787, $D78787, $FF8787, $00AF87, $5FAF87, $87AF87, $AFAF87, $D7AF87, $FFAF87, $00D787, $5FD787, $87D787, $AFD787, $D7D787, $FFD787, $00FF87, $5FFF87, $87FF87, $AFFF87, $D7FF87, $FFFF87, $0000AF, $5F00AF, $8700AF, $AF00AF, $D700AF, $FF00AF, $005FAF, $5F5FAF, $875FAF, $AF5FAF, $D75FAF, $FF5FAF, $0087AF, $5F87AF, $8787AF, $AF87AF, $D787AF, $FF87AF, $00AFAF, $5FAFAF, $87AFAF, $AFAFAF, $D7AFAF, $FFAFAF, $00D7AF, $5FD7AF, $87D7AF, $AFD7AF, $D7D7AF, $FFD7AF, $00FFAF, $5FFFAF, $87FFAF, $AFFFAF, $D7FFAF, $FFFFAF, $0000D7, $5F00D7, $8700D7, $AF00D7, $D700D7, $FF00D7, $005FD7, $5F5FD7, $875FD7, $AF5FD7, $D75FD7, $FF5FD7, $0087D7, $5F87D7, $8787D7, $AF87D7, $D787D7, $FF87D7, $00AFD7, $5FAFD7, $87AFD7, $AFAFD7, $D7AFD7, $FFAFD7, $00D7D7, $5FD7D7, $87D7D7, $AFD7D7, $D7D7D7, $FFD7D7, $00FFD7, $5FFFD7, $87FFD7, $AFFFD7, $D7FFD7, $FFFFD7, $0000FF, $5F00FF, $8700FF, $AF00FF, $D700FF, $FF00FF, $005FFF, $5F5FFF, $875FFF, $AF5FFF, $D75FFF, $FF5FFF, $0087FF, $5F87FF, $8787FF, $AF87FF, $D787FF, $FF87FF, $00AFFF, $5FAFFF, $87AFFF, $AFAFFF, $D7AFFF, $FFAFFF, $00D7FF, $5FD7FF, $87D7FF, $AFD7FF, $D7D7FF, $FFD7FF, $00FFFF, $5FFFFF, $87FFFF, $AFFFFF, $D7FFFF, $FFFFFF, $080808, $121212, $1C1C1C, $262626, $303030, $3A3A3A, $444444, $4E4E4E, $585858, $626262, $6C6C6C, $767676, $808080, $8A8A8A, $949494, $9E9E9E, $A8A8A8, $B2B2B2, $BCBCBC, $C6C6C6, $D0D0D0, $DADADA, $E4E4E4, $EEEEEE ); implementation end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/unix/��������������������������������������������0000755�0001750�0000144�00000000000�15104114162�022457� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/virtualterminal/source/unix/vtemupty.pas��������������������������������0000644�0001750�0000144�00000013140�15104114162�025060� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Unix pseudoterminal device implementation Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit VTEmuPty; {$mode delphi} interface uses Classes, SysUtils, BaseUnix, TermIO, InitC, VTEmuCtl; // Under Linux and BSD forkpty is situated in libutil.so library {$IF NOT (DEFINED(DARWIN) OR DEFINED(HAIKU))} {$LINKLIB util} {$ENDIF} type { TPtyDevice } TPtyDevice = class(TCustomPtyDevice) private Fpty: LongInt; FThread: TThread; FChildPid: THandle; FEventPipe: TFilDes; FLength, FCols, FRows: Integer; FBuffer: array[0..8191] of AnsiChar; protected procedure ReadySync; procedure ReadThread; procedure SetConnected(AValue: Boolean); override; function CreatePseudoConsole(const cmd: String): Boolean; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function WriteStr(const Str: string): Integer; override; function SetCurrentDir(const Path: String): Boolean; override; function SetScreenSize(aCols, aRows: Integer): Boolean; override; end; implementation uses Errors, DCOSUtils, DCStrUtils, DCUnix; type Pwinsize = ^winsize; Ptermios = ^termios; function forkpty(__amaster: Plongint; __name: Pchar; __termp: Ptermios; __winp: Pwinsize): longint;cdecl;external clib name 'forkpty'; function execl(__path: Pchar; __arg: Pchar): longint;cdecl;varargs;external clib name 'execl'; { TPtyDevice } procedure TPtyDevice.SetConnected(AValue: Boolean); var AShell: String; Symbol: Byte = 0; begin if FConnected = AValue then Exit; FConnected:= AValue; if FConnected then begin AShell:= mbGetEnvironmentVariable('SHELL'); if Length(AShell) = 0 then AShell:= '/bin/sh'; FConnected:= CreatePseudoConsole(AShell); if FConnected then begin FThread:= TThread.ExecuteInThread(ReadThread); end; end else begin if FChildPid > 0 then begin FpKill(FChildPid, SIGTERM); end; FileWrite(FEventPipe[1], Symbol, 1); end; end; procedure TPtyDevice.ReadySync; begin if Assigned(FOnRxBuf) then FOnRxBuf(Self, FBuffer, FLength); end; procedure TPtyDevice.ReadThread; var ret: cint; symbol: byte = 0; fds: array[0..1] of tpollfd; begin fds[0].fd:= FEventPipe[0]; fds[0].events:= POLLIN; fds[1].fd:= Fpty; fds[1].events:= POLLIN; while FConnected do begin repeat ret:= fpPoll(@fds[0], 2, -1); until (ret <> -1) or (fpGetErrNo <> ESysEINTR); if (ret = -1) then begin WriteLn(SysErrorMessage(fpGetErrNo)); Break; end; if (fds[0].events and fds[0].revents <> 0) then begin while FileRead(fds[0].fd, symbol, 1) <> -1 do; Break; end; if (fds[1].events and fds[1].revents <> 0) then begin FLength:= FileRead(Fpty, FBuffer, SizeOf(FBuffer)); if (FLength > 0) then TThread.Synchronize(FThread, ReadySync); end; end; end; function TPtyDevice.CreatePseudoConsole(const cmd: String): Boolean; var ws: TWinSize; begin ws.ws_row:= FRows; ws.ws_col:= FCols; ws.ws_xpixel:= 0; ws.ws_ypixel:= 0; FChildPid:= forkpty(@Fpty, nil, nil, @ws); if FChildPid = 0 then begin FileCloseOnExecAll; setenv('TERM', 'xterm-256color', 1); execl(PAnsiChar(cmd), PAnsiChar(cmd), nil); Errors.PError('execl() failed. Command: '+ cmd, cerrno); fpExit(127); end; Result:= (FChildPid > 0); end; constructor TPtyDevice.Create(AOwner: TComponent); begin inherited Create(AOwner); if fpPipe(FEventPipe) < 0 then WriteLn(SysErrorMessage(fpGetErrNo)) else begin // Set both ends of pipe non blocking FileCloseOnExec(FEventPipe[0]); FileCloseOnExec(FEventPipe[1]); FpFcntl(FEventPipe[0], F_SetFl, FpFcntl(FEventPipe[0], F_GetFl) or O_NONBLOCK); FpFcntl(FEventPipe[1], F_SetFl, FpFcntl(FEventPipe[1], F_GetFl) or O_NONBLOCK); end; end; destructor TPtyDevice.Destroy; begin SetConnected(False); inherited Destroy; FileClose(FEventPipe[0]); FileClose(FEventPipe[1]); end; function TPtyDevice.WriteStr(const Str: string): Integer; begin Result:= FileWrite(Fpty, Pointer(Str)^, Length(Str)); end; function TPtyDevice.SetCurrentDir(const Path: String): Boolean; begin Result:= WriteStr(' cd ' + EscapeNoQuotes(Path) + #13) > 0; end; function TPtyDevice.SetScreenSize(aCols, aRows: Integer): Boolean; var ws: TWinSize; begin ws.ws_row:= aRows; ws.ws_col:= aCols; ws.ws_xpixel:= 0; ws.ws_ypixel:= 0; Result:= FpIOCtl(Fpty,TIOCSWINSZ,@ws) = 0; if Result then begin FCols:= aCols; FRows:= aRows; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/viewer/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016253� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/viewer/viewerpackage.pas������������������������������������������������0000644�0001750�0000144�00000000572�15104114162�021601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit viewerpackage; interface uses ViewerControl, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('ViewerControl', @ViewerControl.Register); end; initialization RegisterPackage('viewerpackage', @Register); end. ��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/viewer/viewerpackage.lpk������������������������������������������������0000644�0001750�0000144�00000002746�15104114162�021611� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="viewerpackage"/> <Type Value="RunAndDesignTime"/> <Author Value="Radek Červinka"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> </CompilerOptions> <Version Major="1"/> <Files Count="1"> <Item1> <Filename Value="viewercontrol.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="ViewerControl"/> </Item1> </Files> <RequiredPkgs Count="3"> <Item1> <PackageName Value="doublecmd_common"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> <Item3> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item3> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedpackage\"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ��������������������������doublecmd-1.1.30/components/viewer/viewercontrol.pas������������������������������������������������0000644�0001750�0000144�00000321047�15104114162�021671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Component ViewerControl (Free Pascal) show file in text (wraped or not) or bin or hex mode This is part of Seksi Commander To searching use uFindMmap, to movement call Upxxxx, Downxxxx, or set Position Realised under GNU GPL 2 author Radek Cervinka (radek.cervinka@centrum.cz) changes: 5.8 - customizable view area of transformed text(transformed Values per Line) - customizable separators - added view as decimal - added class TCharToCustomValueTransformProc to handle parameters of customizable modes(at this time - Hex and Dec) - Hex and Dec mode handled by the same mechanism(potentially can be added any additionsl custom mode) so added properties FHex and FDec - added property FCustom which is nil if current mode - not custom, or is equal to current customizable mode - Added CopyToClipboardF which copy transformed text to clipboard 5.7. (RC) - selecting text with mouse - CopyToclipBoard, SelectAll ?.6. - LoadFromStdIn and loading first 64Kb of files with size=0 :) (/proc fs ..) 17.6. (RC) - mapfile (in error set FMappedFile=nil) - writetext TABs fixed (tab is replaced by 9 spaces) - set correct position for modes hex, bin (SetPosition) 21.7 - wrap text on 80 character lines works better now (by Radek Polak) - problems with function UpLine for specific lines: (lines of 80(=cTextWidth) character ended with ENTER (=#10) 6.2. (RC) - ported to fpc for linux (CustomControl and gtk) 7.2. (RC) - use temp to new implementation of LoadFromStdIn (and mmap temp file) - faster drawing of text (I hope) contributors: Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) TODO: a) File mapping blocks writing into file by other processes. Either: + Open small text files by reading them all into memory (done). - Add optional custom loading/caching portions of file in memory and only reading from file when neccessary. b) Searching in Unicode encodings and case-insensitive searching. c) Selecting text does not work well with composed Unicode characters (characters that are composed of multiple Unicode characters). d) Drawing/selecting text does not work correctly with RTL (right to left) text. e) FTextHeight is unreliable with complex unicode characters. It should be calculated based on currently displayed text (get max from each line's height). } unit ViewerControl; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, StdCtrls, LCLVersion, LMessages, fgl; const MaxMemSize = $400000; // 4 Mb type TViewerControlMode = (vcmBin, vcmHex, vcmText, vcmWrap, vcmBook, vcmDec); TDataAccess = (dtMmap, dtNothing); TCharSide = (csBefore, csLeft, csRight, csAfter); TPtrIntList = specialize TFPGList<PtrInt>; TGuessEncodingEvent = function(const s: string): string; TFileOpenEvent = function(const FileName: String; Mode: LongWord): System.THandle; TCustomCharsPresentation = class; TCharToCustomValueTransformProc = function(AChar:AnsiChar;AMaxDigitsCount:integer):AnsiString of object; { TCustomCharsPresentation } { Presentation one char is called Value Function for convert char to Value is ChrToValueProc } TCustomCharsPresentation = class public ValuesPerLine :integer; // = 16 for Hex by default MaxValueDigits :integer; // the max width of present char (255) - 3 symbols MaxAddrDigits :integer; // = 8; StartOfs :integer; // = OffsetWidth + 2; // ': ' EndOfs :integer; // = StartOfs + (ValuesPerLine * (ValueMaxDigits+SpaceCount)); StartAscii :integer; // = StartOfs + (ValuesPerLine * (ValueMaxDigits+SpaceCount)) + 2; // ' ' SpaceCount :integer; // = 1 - one spacebar between Values SeparatorSpace :AnsiString; // spacebar * SpaceCount SeparatorChar :AnsiChar; // '|' CountSeperate :integer; // insert SeparatorChar after every CountSeperate values ChrToValueProc :TCharToCustomValueTransformProc; // procedure which return presentation of one char constructor Create(APresentValuesPerLine,ACharMaxPresentWidth,AOffsetWidth,ACountSeparate:integer;AChrToValueProc:TCharToCustomValueTransformProc); destructor Destroy();override; end; type // If additional encodings are added they should be also supported by: // - GetNextCharAsAscii // - GetPrevCharAsAscii // - GetNextCharAsUtf8 // - ConvertToUTF8 // - UpdateSelection TViewerEncoding = (veAutoDetect, veUtf8, veUtf8bom, veAnsi, veOem, veCp1250, veCp1251, veCp1252, veCp1253, veCp1254, veCp1255, veCp1256, veCp1257, veCp1258, veCp437, veCp850, veCp852, veCp866, veCp874, veCp932, veCp936, veCp949, veCp950, veIso88591, veIso88592, veKoi8r, veKoi8u, veKoi8ru, veUcs2le, veUcs2be, veUtf16le, veUtf16be, veUtf32le, // = ucs4le veUtf32be); // = ucs4be TViewerEncodings = set of TViewerEncoding; const ViewerEncodingsNames: array [TViewerEncoding] of string = ('Auto-detect', 'UTF-8', 'UTF-8BOM', 'ANSI', 'OEM', 'CP1250', 'CP1251', 'CP1252', 'CP1253', 'CP1254', 'CP1255', 'CP1256', 'CP1257', 'CP1258', 'CP437', 'CP850', 'CP852', 'CP866', 'CP874', 'CP932', 'CP936', 'CP949', 'CP950', 'ISO-8859-1', 'ISO-8859-2', 'KOI8-R', 'KOI8-U', 'KOI8-RU', 'UCS-2LE', 'UCS-2BE', 'UTF-16LE', 'UTF-16BE', 'UTF-32LE', 'UTF-32BE'); const ViewerEncodingMultiByte: TViewerEncodings = [ veUtf8, veUtf8bom, veUcs2le, veUcs2be, veUtf16le, veUtf16be, veUtf32le, veUtf32be]; ViewerEncodingDoubleByte: TViewerEncodings = [ veUcs2le, veUcs2be, veUtf16le, veUtf16be ]; type { TViewerControl } TViewerControl = class(TCustomControl) protected FEncoding: TViewerEncoding; FViewerControlMode: TViewerControlMode; FFileName: String; FFileHandle: THandle; FFileSize: Int64; FMappingHandle: THandle; FMappedFile: Pointer; FPosition: PtrInt; FHPosition: Integer; // Tab for text during horizontal scroll FHLowEnd: Integer; // End for HPosition (string with max char) FVisibleOffset: PtrInt; // Offset in symbols for current line (see IsVisible and MakeVisible) FLowLimit: PtrInt; // Lowest possible value for Position FHighLimit: PtrInt; // Position cannot reach this value FBOMLength: Integer; FLineList: TPtrIntList; FBlockBeg: PtrInt; FBlockEnd: PtrInt; FCaretPos: PtrInt; FCaretPoint: TPoint; FMouseBlockBeg: PtrInt; FMouseBlockSide: TCharSide; FSelecting: Boolean; FTextWidth: Integer; // max char count or width in window FTextHeight: Integer; // measured values of font, rec calc at font changed FScrollBarVert: TScrollBar; FScrollBarHorz: TScrollBar; FOnPositionChanged: TNotifyEvent; FUpdateScrollBarPos: Boolean; // used to block updating of scrollbar FScrollBarPosition: Integer; // for updating vertical scrollbar based on Position FHScrollBarPosition: Integer; // for updating horizontal scrollbar based on HPosition FColCount: Integer; FTabSpaces: Integer; // tab width in spaces FMaxTextWidth: Integer; // maximum of chars on one line unwrapped text (max 16384) FExtraLineSpacing: Integer; FLeftMargin: Integer; FOnGuessEncoding: TGuessEncodingEvent; FOnFileOpen: TFileOpenEvent; FCaretVisible: Boolean; FShowCaret: Boolean; FAutoCopy: Boolean; FLastError: String; FText: String; FHex:TCustomCharsPresentation; FDec:TCustomCharsPresentation; FCustom:TCustomCharsPresentation; function GetPercent: Integer; procedure SetPercent(const AValue: Integer); procedure SetBlockBegin(const AValue: PtrInt); procedure SetBlockEnd(const AValue: PtrInt); procedure SetPosition(Value: PtrInt); virtual; procedure SetHPosition(Value: Integer); procedure SetPosition(Value: PtrInt; Force: Boolean); overload; procedure SetHPosition(Value: Integer; Force: Boolean); overload; procedure SetEncoding(AEncoding: TViewerEncoding); function GetEncodingName: string; procedure SetEncodingName(AEncodingName: string); procedure SetViewerMode(Value: TViewerControlMode); procedure SetColCount(const AValue: Integer); procedure SetMaxTextWidth(const AValue: Integer); procedure SetTabSpaces(const AValue: Integer); procedure SetShowCaret(AValue: Boolean); procedure SetCaretPos(AValue: PtrInt); {en Returns how many lines (given current FTextHeight) will fit into the window. } function GetClientHeightInLines(Whole: Boolean = True): Integer; inline; {en Calculates how many lines can be displayed from given position. param(FromPosition Position from which to check. It should point to a start of a line.) @param(LastLineReached If it is set to @true when the function returns, then the last line of text was reached when scanning. This means that there are no more lines to be displayed other than the ones scanned from FromPosition. In other words: SetPosition(GetStartOfNextLine(FromPosition)) will be one line too many and will be scrolled back.) } function GetLinesTillEnd(FromPosition: PtrInt; out LastLineReached: Boolean): Integer; function GetBomLength: Integer; procedure UpdateLimits; {en @param(iStartPos Should point to start of a line. It is increased by the amount of parsed data (with line endings).) @param(aLimit Position which cannot be reached while reading from file.) @param(DataLength It is length in bytes of parsed data without any line endings. iStartPos is moved beyond the line endings though.) } function CalcTextLineLength(var iStartPos: PtrInt; const aLimit: Int64; out DataLength: PtrInt): Integer; function GetStartOfLine(aPosition: PtrInt): PtrInt; function GetEndOfLine(aPosition: PtrInt): PtrInt; function GetStartOfPrevLine(aPosition: PtrInt): PtrInt; function GetStartOfNextLine(aPosition: PtrInt): PtrInt; {en Changes the value of aPosition to X lines back or forward. @param(aPosition File position to change.) @param(iLines Nr of lines to scroll. If positive the position is increased by iLines lines, if negative the position is decreased by -iLines lines.) } function ScrollPosition(var aPosition: PtrInt; iLines: Integer): Boolean; {en Calculates (x,y) cursor position to a position within file. @param(x Client X coordinate of mouse cursor.) @param(y Client Y coordinate of mouse cursor.) @param(CharSide To which side of a character at returned position the (x,y) points to. Only valid if returned position is not -1.) @returns(Position in file to which (x,y) points to, based on what is currently displayed. Returns -1 if (x,y) doesn't point to any position (outside of the text for example).) } function XYPos2Adr(x, y: Integer; out CharSide: TCharSide): PtrInt; procedure OutText(x, y: Integer; const sText: String; StartPos: PtrInt; DataLength: Integer); procedure OutBin(x, y: Integer; const sText: String; StartPos: PtrInt; DataLength: Integer); procedure OutCustom(x, y: Integer; const sText: string;StartPos: PtrInt; DataLength: Integer); // render one line function TransformCustom(var APosition: PtrInt; ALimit: PtrInt;AWithAdditionalData:boolean=True): AnsiString; function TransformCustomBlock(var APosition: PtrInt; DataLength: integer ; ASeparatorsOn, AAlignData:boolean; out AChars:AnsiString): AnsiString; function HexToValueProc(AChar:AnsiChar;AMaxDigitsCount:integer):AnsiString; function DecToValueProc(AChar:AnsiChar;AMaxDigitsCount:integer):AnsiString; procedure WriteBin; procedure WriteText; procedure WriteCustom; virtual; function TransformText(const sText: String; const Xoffset: Integer): String; function TransformBin(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; function TransformHex(var aPosition: PtrInt; aLimit: PtrInt): AnsiString;virtual; procedure AddLineOffset(const iOffset: PtrInt); inline; procedure DrawLastError; function MapFile(const sFileName: String): Boolean; procedure UnMapFile; procedure SetFileName(const sFileName: String); procedure UpdateScrollbars; procedure ViewerResize(Sender: TObject); {en Returns next unicode character from the file, depending on Encoding. It is a faster version, which does as little conversion as possible, but only Ascii values are guaranteed to be valid (0-127). Other unicode values may/may not be valid, so shouldn't be tested. This function is used for reading pure ascii characters such as line endings, tabs, white spaces, etc. } function GetNextCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; function GetPrevCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; {en Retrieve next character from the file depending on encoding and automatically convert it to UTF-8. If CharLenInBytes is greater than 0 but the result is an empty string then it's possible there was no appropriate UTF-8 character for the next character of the current encoding. } function GetNextCharAsUtf8(const iPosition: PtrInt; out CharLenInBytes: Integer): String; procedure ReReadFile; {en Searches for an ASCII character. @param(aPosition Position from where the search starts.) @param(aMaxBytes How many bytes are available for reading.) @param(AsciiChars The function searches for any character that this string contains.) @param(bFindNotIn If @true searches for first character not included in AsciiChars. If @false searches for first character included in AsciiChars.) } function FindAsciiSetForward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; {en Same as FindForward but it searches backwards from pAdr. aMaxBytes must be number of available bytes for reading backwards from pAdr. } function FindAsciiSetBackward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; {en Checks if current selection is still valid given current viewer mode and encoding. For example checks if selection is not in the middle of a unicode character. } procedure UpdateSelection; function GetViewerRect: TRect; procedure ScrollBarVertScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure ScrollBarHorzScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); function GetText(const StartPos, Len: PtrInt; const Xoffset: Integer): string; procedure SetText(const AValue: String); protected procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; procedure WMKillFocus(var Message: TLMKillFocus); message LM_KILLFOCUS; procedure FontChanged(Sender: TObject); override; procedure KeyDown(var Key: word; Shift: TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelLeft(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelRight(Shift: TShiftState; MousePos: TPoint): Boolean; override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; {en Scrolls the displayed text in the window. @param(iLines Nr of lines to scroll. If positive the text is scrolled downwards, if negative the text is scrolled upwards.) @returns(@true if the text was scrolled.) } function Scroll(iLines: Integer): Boolean; function HScroll(iSymbols: Integer): Boolean; procedure PageUp; procedure PageDown; procedure GoHome; procedure GoEnd; procedure HPageUp; procedure HPageDown; procedure HGoHome; procedure HGoEnd; procedure CaretGoHome; procedure CaretGoEnd; function GetDataAdr: Pointer; procedure SelectAll; procedure SelectText(AStart, AEnd: PtrInt); procedure CopyToClipboard; procedure CopyToClipboardF; function Selection: String; function IsVisible(const aPosition: PtrInt): Boolean; overload; procedure MakeVisible(const aPosition: PtrInt); function ConvertToUTF8(const sText: AnsiString): String; function ConvertFromUTF8(const sText: String): AnsiString; function FindUtf8Text(iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): PtrInt; procedure ResetEncoding; function IsFileOpen: Boolean; inline; function DetectEncoding: TViewerEncoding; procedure GetSupportedEncodings(List: TStrings); property Text: String read FText write SetText; property Percent: Integer Read GetPercent Write SetPercent; property Position: PtrInt Read FPosition Write SetPosition; property FileSize: Int64 Read FFileSize; property FileHandle: THandle read FFileHandle; property CaretPos: PtrInt Read FCaretPos Write SetCaretPos; property SelectionStart: PtrInt Read FBlockBeg Write SetBlockBegin; property SelectionEnd: PtrInt Read FBlockEnd Write SetBlockEnd; property EncodingName: string Read GetEncodingName Write SetEncodingName; property ColCount: Integer Read FColCount Write SetColCount; property MaxTextWidth: Integer read FMaxTextWidth write SetMaxTextWidth; property TabSpaces: Integer read FTabSpaces write SetTabSpaces; property LeftMargin: Integer read FLeftMargin write FLeftMargin; property ExtraLineSpacing: Integer read FExtraLineSpacing write FExtraLineSpacing; property AutoCopy: Boolean read FAutoCopy write FAutoCopy; property OnGuessEncoding: TGuessEncodingEvent Read FOnGuessEncoding Write FOnGuessEncoding; property OnFileOpen: TFileOpenEvent read FOnFileOpen write FOnFileOpen; published property Mode: TViewerControlMode Read FViewerControlMode Write SetViewerMode default vcmWrap; property FileName: String Read FFileName Write SetFileName; property Encoding: TViewerEncoding Read FEncoding Write SetEncoding default veAutoDetect; property OnPositionChanged: TNotifyEvent Read FOnPositionChanged Write FOnPositionChanged; property ShowCaret: Boolean read FShowCaret write SetShowCaret; property OnClick; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheelUp; property OnMouseWheelDown; property Align; property Color; property Cursor default crIBeam; property Font; property ParentColor default False; property TabStop default True; end; procedure Register; implementation uses Math, LCLType, Graphics, Forms, LCLProc, Clipbrd, LConvEncoding, DCUnicodeUtils, LCLIntf, LazUTF8, DCOSUtils , DCConvertEncoding {$IF LCL_FULLVERSION >= 4990000} , LazUTF16 {$ENDIF} {$IF DEFINED(UNIX)} , BaseUnix, Unix, DCUnix {$ELSEIF DEFINED(WINDOWS)} , Windows, DCWindows {$ENDIF}; const cBinWidth = 80; // These strings must be Ascii only. sNonCharacter: string = ' !"#$%&''()*+,-./:;<=>?@[\]^`{|}~'#13#10#9; sWhiteSpace : string = ' '#13#10#9#8; { TCustomCharsPresentation } constructor TCustomCharsPresentation.Create(APresentValuesPerLine, ACharMaxPresentWidth, AOffsetWidth, ACountSeparate: integer;AChrToValueProc:TCharToCustomValueTransformProc); begin SpaceCount:=1; // count of spacebars between values, =1 ValuesPerLine := APresentValuesPerLine; // default for hex: 16 values MaxAddrDigits := AOffsetWidth; // = 8 , count of symbols for display caret offset StartOfs := AOffsetWidth + 2; // ': ' MaxValueDigits := ACharMaxPresentWidth; // hex char (FF) - 2 symbols, dec char (255) - 3 symbols EndOfs := StartOfs + (ValuesPerLine * (MaxValueDigits+SpaceCount)); // +1 - take in spacebar StartAscii := StartOfs + (ValuesPerLine * (MaxValueDigits+SpaceCount)) + 2; // ' ' SeparatorChar:='|'; CountSeperate:=ACountSeparate; SeparatorSpace:=' '; ChrToValueProc:=AChrToValueProc; // method for convert char to Value end; destructor TCustomCharsPresentation.Destroy; begin inherited; end; // ---------------------------------------------------------------------------- constructor TViewerControl.Create(AOwner: TComponent); begin inherited Create(AOwner); Cursor := crIBeam; ParentColor := False; DoubleBuffered := True; ControlStyle := ControlStyle + [csTripleClicks, csOpaque]; TabStop := True; // so that it can get keyboard focus FEncoding := veAutoDetect; FViewerControlMode := vcmText; FCustom := nil; FFileName := ''; FMappedFile := nil; FFileHandle := 0; FMappingHandle := 0; FPosition := 0; FHPosition := 0; FHLowEnd := 0; FLowLimit := 0; FHighLimit := 0; FBOMLength := 0; FTextHeight:= 14; // dummy value FColCount := 1; FTabSpaces := 8; FLeftMargin := 4; FMaxTextWidth := 1024; FAutoCopy := True; FLineList := TPtrIntList.Create; FScrollBarVert := TScrollBar.Create(Self); FScrollBarVert.Parent := Self; FScrollBarVert.Kind := sbVertical; FScrollBarVert.Align := alRight; FScrollBarVert.OnScroll := @ScrollBarVertScroll; FScrollBarVert.TabStop := False; FScrollBarVert.PageSize := 0; FScrollBarHorz := TScrollBar.Create(Self); FScrollBarHorz.Parent := Self; FScrollBarHorz.Kind := sbHorizontal; FScrollBarHorz.Align := alBottom; FScrollBarHorz.OnScroll := @ScrollBarHorzScroll; FScrollBarHorz.TabStop := False; FScrollBarHorz.PageSize := 0; FUpdateScrollBarPos := True; FScrollBarPosition := 0; FHScrollBarPosition := 0; FOnPositionChanged := nil; FOnGuessEncoding := nil; OnResize := @ViewerResize; FHex:=TCustomCharsPresentation.Create(16,2,8,8,@HexToValueProc); FDec:=TCustomCharsPresentation.Create(15,3,8,5,@DecToValueProc); // for set bigger ValuePerLine need to improve method GetEndOfLine end; destructor TViewerControl.Destroy; begin FHex.Free; FDec.Free; FHex:=nil; FDec:=nil; FCustom:=nil; UnMapFile; if Assigned(FLineList) then FreeAndNil(FLineList); inherited Destroy; end; procedure TViewerControl.DrawLastError; var AStyle: TTextStyle; begin AStyle:= Canvas.TextStyle; AStyle.Alignment:= taCenter; AStyle.Layout:= tlCenter; Canvas.Pen.Color := Canvas.Font.Color; Canvas.Line(0, 0, ClientWidth - 1, ClientHeight - 1); Canvas.Line(0, ClientHeight - 1, ClientWidth - 1, 0); Canvas.TextRect(GetViewerRect, 0, 0, FLastError, AStyle); end; procedure TViewerControl.Paint; var AText: String; begin if not IsFileOpen then begin DrawLastError; Exit; end; if FShowCaret and FCaretVisible then begin FCaretPoint.X := -1; FCaretVisible := not LCLIntf.HideCaret(Handle); end; Canvas.Font := Self.Font; Canvas.Brush.Color := Self.Color; {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} Canvas.Brush.Style := bsSolid; Canvas.FillRect(ClientRect); {$ENDIF} Canvas.Brush.Style := bsClear; FTextHeight := Canvas.TextHeight('Wg') + FExtraLineSpacing; if FViewerControlMode = vcmBook then FTextWidth := ((ClientWidth - (Canvas.TextWidth('W') * FColCount)) div FColCount) else begin AText := StringOfChar('W', FMaxTextWidth); FTextWidth := Canvas.TextFitInfo(AText, GetViewerRect.Width - FLeftMargin); end; FLineList.Clear; case FViewerControlMode of vcmBin : WriteBin; vcmText: WriteText; vcmWrap: WriteText; vcmBook: WriteText; vcmDec,vcmHex : WriteCustom; end; if FShowCaret and (FCaretPoint.X > -1) then begin LCLIntf.SetCaretPos(FCaretPoint.X, FCaretPoint.Y); if not FCaretVisible then FCaretVisible:= LCLIntf.ShowCaret(Handle); end; end; procedure TViewerControl.SetViewerMode(Value: TViewerControlMode); begin if not (csDesigning in ComponentState) then begin FLineList.Clear; // do not use cache from previous mode FViewerControlMode := Value; case FViewerControlMode of vcmHex: FCustom := FHex; vcmDec: FCustom := FDec; else FCustom := nil; end; if not IsFileOpen then Exit; // Take limits into account for selection. FBlockBeg := FBlockBeg + (GetDataAdr - FMappedFile); FBlockEnd := FBlockEnd + (GetDataAdr - FMappedFile); FHPosition := 0; FBOMLength := GetBomLength; UpdateLimits; // Take limits into account for selection. FBlockBeg := FBlockBeg - (GetDataAdr - FMappedFile); FBlockEnd := FBlockEnd - (GetDataAdr - FMappedFile); UpdateSelection; // Force recalculating position. SetPosition(FPosition, True); SetHPosition(FHPosition, True); UpdateScrollbars; Invalidate; end else FViewerControlMode := Value; end; procedure TViewerControl.SetColCount(const AValue: Integer); begin if AValue > 0 then FColCount := AValue else FColCount := 1; end; procedure TViewerControl.SetMaxTextWidth(const AValue: Integer); begin if AValue < 80 then FMaxTextWidth := 80 else if AValue > 16384 then FMaxTextWidth := 16384 else FMaxTextWidth:= AValue; end; procedure TViewerControl.SetTabSpaces(const AValue: Integer); begin if AValue < 1 then FTabSpaces := 1 else if AValue > 32 then FTabSpaces := 32 else FTabSpaces := AValue; end; function TViewerControl.ScrollPosition(var aPosition: PtrInt; iLines: Integer): Boolean; var i: Integer; NewPos: PtrInt; begin Result := False; NewPos := aPosition; if iLines < 0 then for i := 1 to -iLines do NewPos := GetStartOfPrevLine(NewPos) else for i := 1 to iLines do NewPos := GetStartOfNextLine(NewPos); Result := aPosition <> NewPos; aPosition := NewPos; end; function TViewerControl.Scroll(iLines: Integer): Boolean; var aPosition: PtrInt; begin if not IsFileOpen then Exit(False); aPosition := FPosition; Result := ScrollPosition(aPosition, iLines); if aPosition <> FPosition then SetPosition(aPosition); end; function TViewerControl.HScroll(iSymbols: Integer): Boolean; var newPos: Integer; begin if not IsFileOpen then Exit(False); newPos := FHPosition + iSymbols; if newPos < 0 then newPos := 0 else if (newPos > FHLowEnd - FTextWidth) and (FHLowEnd - FTextWidth > 0) then newPos := FHLowEnd - FTextWidth; if newPos <> FHPosition then SetHPosition(newPos); Result:= True; end; function TViewerControl.GetText(const StartPos, Len: PtrInt; const Xoffset: Integer): string; begin SetString(Result, GetDataAdr + StartPos, Len); Result := TransformText(ConvertToUTF8(Result), Xoffset); end; procedure TViewerControl.SetText(const AValue: String); begin UnMapFile; FText:= AValue; FileName:= EmptyStr; FFileSize:= Length(FText); FMappedFile:= Pointer(FText); end; function TViewerControl.GetViewerRect: TRect; begin Result:= GetClientRect; if Assigned(FScrollBarHorz) and FScrollBarHorz.Visible then Dec(Result.Bottom, FScrollBarHorz.Height); if Assigned(FScrollBarVert) and FScrollBarVert.Visible then Dec(Result.Right, FScrollBarVert.Width); end; procedure TViewerControl.WMSetFocus(var Message: TLMSetFocus); begin if FShowCaret then begin LCLIntf.CreateCaret(Handle, 0, 2, FTextHeight); LCLIntf.ShowCaret(Handle); FCaretVisible:= True; end; end; procedure TViewerControl.WMKillFocus(var Message: TLMKillFocus); begin if FShowCaret then begin FCaretVisible:= False; LCLIntf.DestroyCaret(Handle); end; end; procedure TViewerControl.FontChanged(Sender: TObject); begin inherited FontChanged(Sender); if HandleAllocated then begin FTextHeight := Canvas.TextHeight('Wg') + FExtraLineSpacing; if FShowCaret then LCLIntf.CreateCaret(Handle, 0, 2, FTextHeight); end; end; function TViewerControl.CalcTextLineLength(var iStartPos: PtrInt; const aLimit: Int64; out DataLength: PtrInt): Integer; var MaxLineLength: Boolean; CharLenInBytes: Integer; OldPos, LastSpacePos: PtrInt; LastSpaceResult: Integer; begin Result := 0; DataLength := 0; LastSpacePos := -1; MaxLineLength := True; OldPos := iStartPos; while MaxLineLength and (iStartPos < aLimit) do begin case GetNextCharAsAscii(iStartPos, CharLenInBytes) of 9: // tab Inc(Result, FTabSpaces - Result mod FTabSpaces); 10: // stroka begin DataLength := iStartPos - OldPos; iStartPos := iStartPos + CharLenInBytes; Exit; end; 13: // karetka begin DataLength := iStartPos - OldPos; iStartPos := iStartPos + CharLenInBytes; // Move after possible #10. if (iStartPos < aLimit) and (GetNextCharAsAscii(iStartPos, CharLenInBytes) = 10) then Inc(iStartPos, CharLenInBytes); Exit; end; 32, 33, 40, 41, 44, 45, 46, 47, 92, 58, 59, 63, 91, 93: //probel begin Inc(Result, 1); LastSpacePos := iStartPos + CharLenInBytes; LastSpaceResult := Result; end; else Inc(Result, 1); end; if CharLenInBytes = 0 then // End of data or invalid character. break; iStartPos := iStartPos + CharLenInBytes; DataLength := iStartPos - OldPos; case FViewerControlMode of vcmText: MaxLineLength := Result < FMaxTextWidth; vcmWrap: MaxLineLength := Result < FTextWidth; vcmBook: MaxLineLength := Canvas.TextWidth(GetText(OldPos, DataLength, 0)) < FTextWidth; else Exit; end; end; if (not MaxLineLength) and (LastSpacePos <> -1) then begin iStartPos := LastSpacePos; Result := LastSpaceResult; DataLength := iStartPos - OldPos; end; end; function TViewerControl.TransformText(const sText: String; const Xoffset: Integer): String; var c: AnsiChar; i: Integer; begin Result := ''; for i := 1 to Length(sText) do begin c := sText[i]; // Parse only ASCII chars. case c of #9: Result := Result + StringOfChar(' ', FTabSpaces - (UTF8Length(Result) + Xoffset) mod FTabSpaces); else begin if c < ' ' then Result := Result + ' ' else Result := Result + c; end; end; end; end; function TViewerControl.TransformBin(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; var c: AnsiChar; i: Integer; begin Result := ''; for i := 0 to cBinWidth - 1 do begin if aPosition >= aLimit then Break; c := PAnsiChar(GetDataAdr)[aPosition]; if c < ' ' then Result := Result + '.' else if c > #127 then Result := Result + '.' else Result := Result + c; Inc(aPosition); end; end; function TViewerControl.TransformHex(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; begin Result:=TransformCustom(aPosition,aLimit); end; function TViewerControl.TransformCustom(var APosition: PtrInt; ALimit: PtrInt; AWithAdditionalData: boolean): AnsiString; var sAscii: string = ''; sRez : string = ''; tPos : integer; begin tPos:=APosition; sRez:=TransformCustomBlock(APosition,FCustom.ValuesPerLine,True,True,sAscii); // Result := LineFormat(sRez, sStr, aStartOffset) else if AWithAdditionalData then begin sRez := Format('%s: %s', [IntToHex(tPos, FCustom.MaxAddrDigits), sRez]); if Length(sRez) < FCustom.ValuesPerLine * (FCustom.SpaceCount+FCustom.MaxValueDigits) then sRez := sRez + StringOfChar(' ', FCustom.ValuesPerLine * (FCustom.SpaceCount+FCustom.MaxValueDigits) - Length(sRez)); sRez := sRez + ' '; sRez := sRez + sAscii; end; Result:=sRez; end; function TViewerControl.TransformCustomBlock(var APosition: PtrInt; DataLength: integer ; ASeparatorsOn, AAlignData:boolean; out AChars:AnsiString): AnsiString; var c: AnsiChar; i: Integer; iSep,Len :integer; sStr: string = ''; sRez: string = ''; sEmpty:string; aStartOffset: PtrInt; begin if (APosition+DataLength)>FHighLimit then Len:=FHighLimit-APosition else Len:=DataLength; iSep:=1; // counter for set separator aStartOffset := APosition; for i := 0 to Len - 1 do begin c := PAnsiChar(GetDataAdr)[aPosition]; if c < ' ' then AChars := AChars + '.' else if c > #127 then AChars := AChars + '.' else AChars := AChars + c; sRez := sRez + FCustom.ChrToValueProc(c, FCustom.MaxValueDigits); if ( iSep = FCustom.CountSeperate) and ASeparatorsOn and ( i < (FCustom.ValuesPerLine - 1))then begin sRez := sRez + FCustom.SeparatorChar; iSep:=0; end else begin sRez := sRez + FCustom.SeparatorSpace; end; Inc(aPosition); inc(iSep); end; if AAlignData then begin setlength(sEmpty,FCustom.MaxValueDigits); FillChar(sEmpty[1],FCustom.MaxValueDigits,chr(VK_SPACE)); while (i<FCustom.ValuesPerLine-1) do begin sRez := sRez + sEmpty + FCustom.SeparatorSpace; inc(i); end; setlength(sEmpty,0); end; Result:=sRez; end; function TViewerControl.DecToValueProc(AChar:AnsiChar;AMaxDigitsCount:integer):AnsiString; begin Result:= IntToStr(Ord(AChar)); while Length(Result) < AMaxDigitsCount do Result:= '0' + Result; end; function TViewerControl.HexToValueProc(AChar:AnsiChar;AMaxDigitsCount:integer):AnsiString; begin Result:=IntToHex(Ord(AChar), AMaxDigitsCount); while length(Result)<AMaxDigitsCount do Result:=' '+Result; end; function TViewerControl.GetStartOfLine(aPosition: PtrInt): PtrInt; function GetStartOfLineText: PtrInt; var tmpPos, LineStartPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; MaxLineLength: Boolean; CharLenInBytes: Integer; begin prevChar := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); // Check if this already is not a start of line (if previous char is #10). if prevChar = 10 then Exit(aPosition); tmpPos := aPosition - CharLenInBytes; if tmpPos <= FLowLimit then Exit(FLowLimit); // Check if we're not in the middle of line ending // (previous char is #13, current char is #10). if (prevChar = 13) and (GetNextCharAsAscii(aPosition, CharLenInBytes) = 10) then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; if tmpPos <= FLowLimit then Exit(FLowLimit); DataLength:= 0; // Search for real start of line. while (not (prevChar in [10, 13])) and (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; Dec(tmpPos, CharLenInBytes); case prevChar of 9: Inc(DataLength, FTabSpaces - DataLength mod FTabSpaces); else Inc(DataLength, 1); end; case FViewerControlMode of vcmText: MaxLineLength := DataLength < FMaxTextWidth; vcmWrap: MaxLineLength := DataLength < FTextWidth; end; if not MaxLineLength then Exit(tmpPos); end; // Previous end of line not found and there are no more data to check. if (not (prevChar in [10, 13])) and (tmpPos <= FLowLimit) then Exit(FLowLimit); // Move forward to first non-line ending character. Inc(tmpPos, CharLenInBytes); // Search for start of real line or wrapped line. while True do begin LineStartPos := tmpPos; CalcTextLineLength(tmpPos, FHighLimit, DataLength); if tmpPos = aPosition then begin if aPosition < FHighLimit then Exit(aPosition) // aPosition is already at start of a line else Exit(LineStartPos); // aPosition points to end of file so return start of this line end else if tmpPos > aPosition then Exit(LineStartPos); // Found start of line end; end; function GetStartOfLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); end; var i: Integer; begin if aPosition <= FLowLimit then Exit(FLowLimit) else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := FLineList.Count - 1 downto 0 do if FLineList.Items[i] <= aPosition then Exit(FLineList.Items[i]); end; case FViewerControlMode of vcmBin: Result := GetStartOfLineFixed(cBinWidth); vcmHex, vcmDec: Result := GetStartOfLineFixed(FCustom.ValuesPerLine); vcmText, vcmWrap, vcmBook: Result := GetStartOfLineText; else Result := aPosition; end; end; function TViewerControl.GetEndOfLine(aPosition: PtrInt): PtrInt; function GetEndOfLineText: PtrInt; var tmpPos: PtrInt; DataLength: PtrInt; begin Result := GetStartOfLine(aPosition); tmpPos := Result; CalcTextLineLength(tmpPos, FHighLimit, DataLength); Result := Result + DataLength; if Result < aPosition then Result := aPosition; end; function GetEndOfLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth) + aFixedWidth; end; begin case FViewerControlMode of vcmBin: Result := GetEndOfLineFixed(cBinWidth); vcmHex,vcmDec: Result := GetEndOfLineFixed(FCustom.ValuesPerLine); vcmText, vcmWrap, vcmBook: Result := GetEndOfLineText; else Result := aPosition; end; end; function TViewerControl.GetStartOfPrevLine(aPosition: PtrInt): PtrInt; function GetPrevLineText: PtrInt; var tmpPos, LineStartPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; MaxLineLength: Boolean; CharLenInBytes: Integer; begin prevChar := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); tmpPos := aPosition - CharLenInBytes; // start search from previous character if tmpPos <= FLowLimit then Exit(FLowLimit); // Check if we're not in the middle of line ending // (previous char is #13, current char is #10). if (prevChar = 13) and (GetNextCharAsAscii(aPosition, CharLenInBytes) = 10) then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end else begin // Bypass possible end of previous line. if prevChar = 10 then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; if prevChar = 13 then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; end; if tmpPos <= FLowLimit then Exit(FLowLimit); DataLength:= 0; // Search for real start of line. while (not (prevChar in [10, 13])) and (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; Dec(tmpPos, CharLenInBytes); case prevChar of 9: Inc(DataLength, FTabSpaces - DataLength mod FTabSpaces); else Inc(DataLength, 1); end; case FViewerControlMode of vcmText: MaxLineLength := DataLength < FMaxTextWidth; vcmWrap: MaxLineLength := DataLength < FTextWidth; end; if not MaxLineLength then Exit(tmpPos); end; // Move forward to first non-line ending character. Inc(tmpPos, CharLenInBytes); // Search for start of real line or wrapped line. while True do begin LineStartPos := tmpPos; CalcTextLineLength(tmpPos, aPosition, DataLength); if tmpPos >= aPosition then Exit(LineStartPos); // Found start of line end; end; function GetPrevLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); if Result >= aFixedWidth then Result := Result - aFixedWidth; end; var i: Integer; begin if aPosition <= FLowLimit then Exit(FLowLimit) else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := FLineList.Count - 1 downto 0 do if FLineList.Items[i] < aPosition then Exit(FLineList.Items[i]); end; case FViewerControlMode of vcmBin: Result := GetPrevLineFixed(cBinWidth); vcmHex,vcmDec: Result := GetPrevLineFixed(FCustom.ValuesPerLine); vcmText, vcmWrap, vcmBook: Result := GetPrevLineText; else Result := aPosition; end; end; function TViewerControl.GetStartOfNextLine(aPosition: PtrInt): PtrInt; function GetNextLineText: PtrInt; var tmpPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; CharLenInBytes: Integer; begin tmpPos := aPosition; // This might not be a real start of line (it may be start of wrapped line). // Search for start of line. while (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; if (prevChar in [10, 13]) then Break else Dec(tmpPos, CharLenInBytes); end; // Now we know we are at the start of a line, search the start of next line. while True do begin CalcTextLineLength(tmpPos, FHighLimit, DataLength); if tmpPos >= aPosition then Exit(tmpPos); // Found start of line end; end; function GetNextLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); if Result + aFixedWidth < FHighLimit then Result := Result + aFixedWidth; end; var i: Integer; begin if aPosition < FLowLimit then aPosition := FLowLimit // search from the start of the file else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := 0 to FLineList.Count - 1 do if FLineList.Items[i] > aPosition then Exit(FLineList.Items[i]); end; case FViewerControlMode of vcmBin: Result := GetNextLineFixed(cBinWidth); vcmHex,vcmDec: Result := GetNextLineFixed(FCustom.ValuesPerLine); vcmText, vcmWrap, vcmBook: Result := GetNextLineText; else Result := aPosition; end; end; procedure TViewerControl.PageUp; var H: Integer; begin H := GetClientHeightInLines * FColCount - 1; if H <= 0 then H := 1; Scroll(-H); end; procedure TViewerControl.HPageUp; var H: Integer; begin H := FHPosition - FTextWidth; if H <= 0 then H := FHPosition else H:= FTextWidth; HScroll(-H); end; procedure TViewerControl.PageDown; var H: Integer; begin H := GetClientHeightInLines * FColCount - 1; if H <= 0 then H := 1; Scroll(H); end; procedure TViewerControl.HPageDown; var H: Integer; begin H := FHLowEnd - FHPosition; if H > FTextWidth then H := FTextWidth ; HScroll(H); end; procedure TViewerControl.GoHome; begin Position := FLowLimit; end; procedure TViewerControl.GoEnd; begin Position := FHighLimit; end; procedure TViewerControl.HGoHome; begin HScroll (-FHPosition); end; procedure TViewerControl.HGoEnd; begin HScroll (FHLowEnd-FHPosition); end; procedure TViewerControl.CaretGoHome; begin HScroll (-FHPosition); CaretPos := GetStartOfLine(CaretPos); end; procedure TViewerControl.CaretGoEnd; begin if FViewerControlMode in [vcmBin, vcmHex, vcmDec] then CaretPos := GetEndOfLine(CaretPos) - 1 else begin CaretPos := GetEndOfLine(CaretPos); end; if FViewerControlMode = vcmText then begin if not IsVisible(CaretPos) then begin if (FVisibleOffset < FHPosition) or (FVisibleOffset > FHPosition + FTextWidth) then begin SetHPosition(FVisibleOffset); HScroll(-1); end; end; end; end; procedure TViewerControl.SetFileName(const sFileName: String); begin if not (csDesigning in ComponentState) then begin UnMapFile; if sFileName <> '' then begin if MapFile(sFileName) then begin FFileName := sFileName; // Detect encoding if needed. if FEncoding = veAutoDetect then FEncoding := DetectEncoding; ReReadFile; CaretPos := FLowLimit; end; end; end else FFileName := sFileName; end; function TViewerControl.MapFile(const sFileName: String): Boolean; function ReadFile: Boolean; inline; begin FMappedFile := GetMem(FFileSize); Result := (FileRead(FFileHandle, FMappedFile^, FFileSize) = FFileSize); if not Result then begin FLastError := mbSysErrorMessage; FreeMemAndNil(FMappedFile); end; FileClose(FFileHandle); FFileHandle := 0; end; {$IFDEF LINUX} var Sbfs: TStatFS; {$ENDIF} begin Result := False; FLastError := EmptyStr; if Assigned(FMappedFile) then UnMapFile; // if needed if Assigned(FOnFileOpen) then FFileHandle := FOnFileOpen(sFileName, fmOpenRead or fmShareDenyNone) else begin FFileHandle := mbFileOpen(sFileName, fmOpenRead or fmShareDenyNone); end; if FFileHandle = feInvalidHandle then begin FLastError := mbSysErrorMessage; FFileHandle := 0; Exit; end; FFileSize := FileGetSize(FFileHandle); if (FFileSize < 0) then begin FLastError := mbSysErrorMessage; FileClose(FFileHandle); FFileHandle := 0; Exit; end; {$IFDEF LINUX} if (fpFStatFS(FFileHandle, @Sbfs) = 0) then begin // Special case for PROC_FS and SYS_FS if (sbfs.fstype = PROC_SUPER_MAGIC) or (sbfs.fstype = SYSFS_MAGIC) then begin FMappedFile := GetMem(MaxMemSize - 1); FFileSize := FileRead(FFileHandle, FMappedFile^, MaxMemSize - 1); Result := (FFileSize >= 0); if not Result then begin FLastError := mbSysErrorMessage; FreeMemAndNil(FMappedFile); end; FileClose(FFileHandle); FFileHandle := 0; Exit; end; end; {$ENDIF} if (FFileSize < MaxMemSize) then begin Result := ReadFile; Exit; end; {$IFDEF MSWINDOWS} FMappingHandle := CreateFileMapping(FFileHandle, nil, PAGE_READONLY, 0, 0, nil); if FMappingHandle = 0 then begin FLastError := mbSysErrorMessage; FMappedFile := nil; UnMapFile; end else begin FMappedFile := MapViewOfFile(FMappingHandle, FILE_MAP_READ, 0, 0, 0); if (FMappedFile = nil) then begin FLastError := mbSysErrorMessage; UnMapFile; end; end; {$ELSE} FMappedFile := fpmmap(nil, FFileSize, PROT_READ, MAP_PRIVATE{SHARED}, FFileHandle, 0); if FMappedFile = MAP_FAILED then begin FLastError := mbSysErrorMessage; FMappedFile:= nil; FileClose(FFileHandle); FFileHandle := 0; Exit; end; {$ENDIF} Result := Assigned(FMappedFile); end; procedure TViewerControl.UnMapFile; begin if FMappedFile = Pointer(FText) then begin FMappedFile:= nil; FText:= EmptyStr; end; if (FFileSize < MaxMemSize) then begin if Assigned(FMappedFile) then begin FreeMem(FMappedFile); FMappedFile := nil; end; end; {$IFDEF MSWINDOWS} if Assigned(FMappedFile) then begin UnmapViewOfFile(FMappedFile); FMappedFile := nil; end; if FMappingHandle <> 0 then begin CloseHandle(FMappingHandle); FMappingHandle := 0; end; {$ELSE} if Assigned(FMappedFile) then begin if fpmunmap(FMappedFile, FFileSize) = -1 then DebugLn('Error unmapping file: ', SysErrorMessage(fpgeterrno)); FMappedFile := nil; end; {$ENDIF} if FFileHandle <> 0 then begin FileClose(FFileHandle); FFileHandle := 0; end; FFileName := ''; FFileSize := 0; Position := 0; FLowLimit := 0; FHighLimit := 0; FBOMLength := 0; FBlockBeg := 0; FBlockEnd := 0; end; procedure TViewerControl.WriteText; var yIndex, xIndex, w, i: Integer; LineStart, iPos: PtrInt; CharLenInBytes: Integer; DataLength: PtrInt; sText: String; procedure DrawCaret(X, Y: Integer; LinePos: PtrInt); begin if FShowCaret and (FCaretPos = LinePos) then begin FCaretPoint.X:= X; FCaretPoint.Y:= Y; end; end; begin iPos := FPosition; if Mode = vcmBook then w := Width div FColCount else begin w := 0; end; for xIndex := 0 to FColCount-1 do begin for yIndex := 0 to GetClientHeightInLines(False) - 1 do begin if iPos > FHighLimit then Break; if iPos = FHighLimit then begin if GetPrevCharAsAscii(iPos, CharLenInBytes) = 10 then begin DrawCaret(0, yIndex * FTextHeight, iPos); end; Break; end; AddLineOffset(iPos); LineStart := iPos; i := CalcTextLineLength(iPos, FHighLimit, DataLength); if i > FHLowEnd then FHLowEnd:= i; if DataLength = 0 then DrawCaret(0, yIndex * FTextHeight, LineStart) else begin if (Mode = vcmText) and (FHPosition > 0) then begin for i:= 1 to FHPosition do begin GetNextCharAsAscii(LineStart, CharLenInBytes); DataLength -= CharLenInBytes; LineStart += CharLenInBytes; end; if (DataLength <= 0) then Continue; end; sText := GetText(LineStart, DataLength, 0); OutText(FLeftMargin + xIndex * w, yIndex * FTextHeight, sText, LineStart, DataLength); end; end; end; end; procedure TViewerControl.WriteCustom; // this method render visible page of text var yIndex: Integer; iPos, LineStart: PtrInt; s: string; begin iPos := FPosition; for yIndex := 0 to GetClientHeightInLines(False) - 1 do begin if iPos >= FHighLimit then Break; LineStart := iPos; AddLineOffset(iPos); s := TransformCustom(iPos, FHighLimit); // get line text for render if s <> '' then OutCustom(FLeftMargin, yIndex * FTextHeight, s, LineStart, iPos - LineStart); // render line to canvas end; end; procedure TViewerControl.WriteBin; var yIndex: Integer; iPos, LineStart: PtrInt; s: string; begin iPos := FPosition; for yIndex := 0 to GetClientHeightInLines(False) - 1 do begin if iPos >= FHighLimit then Break; LineStart := iPos; AddLineOffset(iPos); s := TransformBin(iPos, FHighLimit); if s <> '' then OutBin(FLeftMargin, yIndex * FTextHeight, s, LineStart, iPos - LineStart); end; end; function TViewerControl.GetDataAdr: Pointer; begin case FViewerControlMode of vcmText, vcmWrap, vcmBook: Result := FMappedFile + FBOMLength; else Result := FMappedFile; end; end; procedure TViewerControl.SetPosition(Value: PtrInt); begin SetPosition(Value, False); end; procedure TViewerControl.SetHPosition(Value: Integer); begin SetHPosition(Value, False); end; procedure TViewerControl.SetHPosition(Value: Integer; Force: Boolean); begin if not IsFileOpen then Exit; FHPosition := Value; // Set new scroll position. if (FHPosition > 0) and (FHLowEnd - FTextWidth > 0) then FHScrollBarPosition := FHPosition * 100 div (FHLowEnd - FTextWidth) else FHScrollBarPosition := 0; // Update scrollbar position. if FUpdateScrollBarPos then begin if FScrollBarHorz.Position <> FHScrollBarPosition then begin // Workaround for bug: http://bugs.freepascal.org/view.php?id=23815 {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 1010000)} FScrollBarHorz.OnScroll := nil; FScrollBarHorz.Position := FHScrollBarPosition; Application.ProcessMessages; // Skip message FScrollBarHorz.OnScroll := @ScrollBarHorzScroll; {$ELSE} FScrollBarHorz.Position := FHScrollBarPosition; {$ENDIF} end; end; // else the scrollbar position will be updated in ScrollBarVertScroll Invalidate; end; procedure TViewerControl.SetPosition(Value: PtrInt; Force: Boolean); var LinesTooMany: Integer; LastLineReached: Boolean; begin if not IsFileOpen then Exit; // Double byte text can have only even position if (Encoding in ViewerEncodingDoubleByte) and Odd(Value) then begin Value := Value - 1; end; // Speedup if total nr of lines is less then nr of lines that can be displayed. if (FPosition = FLowLimit) and // only if already at the top (FLineList.Count > 0) and (FLineList.Count < GetClientHeightInLines) then Value := FLowLimit else // Boundary checks are done in GetStartOfLine. Value := GetStartOfLine(Value); if (Value <> FPosition) or Force then begin // Don't allow empty lines at the bottom of the control. LinesTooMany := GetClientHeightInLines - GetLinesTillEnd(Value, LastLineReached); if LinesTooMany > 0 then begin // scroll back upwards ScrollPosition(Value, -LinesTooMany); end; FPosition := Value; if Assigned(FOnPositionChanged) then FOnPositionChanged(Self); Invalidate; // Set new scroll position. if LastLineReached and (Value > 0) then FScrollBarPosition := 100 else FScrollBarPosition := Percent; end; // Update scrollbar position. if FUpdateScrollBarPos then begin if FScrollBarVert.Position <> FScrollBarPosition then begin // Workaround for bug: http://bugs.freepascal.org/view.php?id=23815 {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 1010000)} FScrollBarVert.OnScroll := nil; FScrollBarVert.Position := FScrollBarPosition; Application.ProcessMessages; // Skip message FScrollBarVert.OnScroll := @ScrollBarVertScroll; {$ELSE} FScrollBarVert.Position := FScrollBarPosition; {$ENDIF} end; end; // else the scrollbar position will be updated in ScrollBarVertScroll end; procedure TViewerControl.SetEncoding(AEncoding: TViewerEncoding); begin if not (csDesigning in ComponentState) then begin if AEncoding = veAutoDetect then FEncoding := DetectEncoding else FEncoding := AEncoding; ReReadFile; end else FEncoding := AEncoding; end; function TViewerControl.GetEncodingName: string; begin Result := ViewerEncodingsNames[FEncoding]; end; procedure TViewerControl.SetEncodingName(AEncodingName: string); var i: TViewerEncoding; begin for i := Low(TViewerEncoding) to High(TViewerEncoding) do if NormalizeEncoding(ViewerEncodingsNames[i]) = NormalizeEncoding(AEncodingName) then begin SetEncoding(i); break; end; end; function TViewerControl.GetClientHeightInLines(Whole: Boolean): Integer; begin if FTextHeight > 0 then begin if Whole then Result := GetViewerRect.Height div FTextHeight else Result := Ceil(GetViewerRect.Height / FTextHeight); end else Result := 0; end; function TViewerControl.GetLinesTillEnd(FromPosition: PtrInt; out LastLineReached: Boolean): Integer; var iPos: PtrInt; yIndex: Integer; DataLength: PtrInt; CharLenInBytes: Integer; begin Result := 0; iPos := FromPosition; for yIndex := 0 to GetClientHeightInLines - 1 do begin if iPos >= FHighLimit then Break; Inc(Result, 1); case Mode of vcmBin: iPos := iPos + cBinWidth; vcmHex,vcmDec: iPos := iPos + FCustom.ValuesPerLine; vcmText, vcmWrap, vcmBook: CalcTextLineLength(iPos, FHighLimit, DataLength); end; end; LastLineReached := (iPos >= FHighLimit); if LastLineReached and (FViewerControlMode in [vcmText, vcmWrap, vcmBook]) then begin if (GetPrevCharAsAscii(FHighLimit, CharLenInBytes) = 10) then Inc(Result); end; end; procedure TViewerControl.SetShowCaret(AValue: Boolean); begin if FShowCaret <> AValue then begin FShowCaret:= AValue; if FShowCaret then begin LCLIntf.CreateCaret(Handle, 0, 2, FTextHeight); LCLIntf.ShowCaret(Handle); FCaretVisible:= True; Invalidate; end else begin FCaretVisible:= False; LCLIntf.HideCaret(Handle); LCLIntf.DestroyCaret(Handle); end; end; end; procedure TViewerControl.SetCaretPos(AValue: PtrInt); begin if FCaretPos <> AValue then begin FCaretPos := AValue; if FShowCaret then Invalidate; end; end; function TViewerControl.GetPercent: Integer; begin if FHighLimit - FLowLimit > 0 then Result := (Int64(FPosition - FLowLimit) * 100) div Int64(FHighLimit - FLowLimit) else Result := 0; end; procedure TViewerControl.SetPercent(const AValue: Integer); begin if FHighLimit - FLowLimit > 0 then Position := Int64(AValue) * (Int64(FHighLimit - FLowLimit) div 100) + FLowLimit else Position := 0; end; procedure TViewerControl.SetBlockBegin(const AValue: PtrInt); begin if (AValue >= FLowLimit) and (AValue < FHighLimit) then begin if FBlockEnd < AValue then FBlockEnd := AValue; FBlockBeg := AValue; Invalidate; end; end; procedure TViewerControl.SetBlockEnd(const AValue: PtrInt); begin if (AValue >= FLowLimit) and (AValue < FHighLimit) then begin if FBlockBeg > AValue then FBlockBeg := AValue; FBlockEnd := AValue; Invalidate; end; end; procedure TViewerControl.OutText(x, y: Integer; const sText: String; StartPos: PtrInt; DataLength: Integer); var pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; Canvas.Font.Color := Font.Color; if FShowCaret and (FCaretPos >= pBegLine) and (FCaretPos <= pEndLine) then begin FCaretPoint.Y:= Y; FCaretPoint.X:= X + Canvas.TextWidth(GetText(StartPos, FCaretPos - pBegLine, 0)); end; // Out of selection, draw normal if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd < pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then // after begin Canvas.TextOut(x, y, sText); Exit; end; // Get selection start if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; // Get selection end if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; // Text after selection. if pEndLine - iEndDrawIndex > 0 then Canvas.TextOut(x, y, sText); // Text before selection + selected text Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.TextOut(X, Y, GetText(StartPos, iEndDrawIndex - pBegLine, 0)); // Restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text before selection if iBegDrawIndex - pBegLine > 0 then Canvas.TextOut(X, Y, GetText(StartPos, iBegDrawIndex - pBegLine, 0)); end; procedure TViewerControl.OutCustom(x, y: Integer; const sText: string; StartPos: PtrInt; DataLength: Integer); var sTmpText: String; pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; Canvas.Font.Color := Font.Color; if FShowCaret and (FCaretPos >= pBegLine) and (FCaretPos <= pEndLine) then begin FCaretPoint.Y:= Y; FCaretPoint.X:= X + Canvas.TextWidth(Copy(sText, 1, FCustom.StartAscii + (FCaretPos - pBegLine))); end; // Out of selection, draw normal if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd <= pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then // after begin // Offset + hex part + space between hex and ascii sTmpText:= Copy(sText, 1, FCustom.EndOfs) + ' '; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // Ascii part sTmpText := Copy(sText, 1 + FCustom.StartAscii, MaxInt); Canvas.TextOut(x, y, sTmpText); Exit; end; // Get selection start if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; // Get selection end if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; // Text after selection (hex part) if pEndLine - iEndDrawIndex > 0 then begin sTmpText := Copy(sText, 1, FCustom.StartOfs + (pEndLine - pBegLine) * (FCustom.MaxValueDigits + FCustom.SpaceCount)); Canvas.TextOut(x, y, sTmpText); end; // Text before selection + selected text (hex part) sTmpText := Copy(sText, 1, FCustom.StartOfs + (iEndDrawIndex - pBegLine) * (FCustom.MaxValueDigits + FCustom.SpaceCount) - 1); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.TextOut(x, y, sTmpText); // Restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Offset + text before selection (hex part) sTmpText := Copy(sText, 1, FCustom.StartOfs + (iBegDrawIndex - pBegLine) * (FCustom.MaxValueDigits + FCustom.SpaceCount)); Canvas.TextOut(x, y, sTmpText); // Offset + hex part + space between hex and ascii sTmpText:= Copy(sText, 1, FCustom.EndOfs) + ' '; x := x + Canvas.TextWidth(sTmpText); // Text after selection (ascii part) if pEndLine - iEndDrawIndex > 0 then begin sTmpText := Copy(sText, FCustom.StartAscii + 1, MaxInt); Canvas.TextOut(x, y, sTmpText); end; // Text before selection + selected text (ascii part) sTmpText := Copy(sText, 1 + FCustom.StartAscii, iEndDrawIndex - pBegLine); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.TextOut(x, y, sTmpText); // Restore background color Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text before selection (ascii part) if iBegDrawIndex - pBegLine > 0 then begin sTmpText := Copy(sText, 1 + FCustom.StartAscii, iBegDrawIndex - pBegLine); Canvas.TextOut(x, y, sTmpText); end; end; procedure TViewerControl.OutBin(x, y: Integer; const sText: String; StartPos: PtrInt; DataLength: Integer); var pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; Canvas.Font.Color := Font.Color; if FShowCaret and (FCaretPos >= pBegLine) and (FCaretPos <= pEndLine) then begin FCaretPoint.Y:= Y; FCaretPoint.X:= X + Canvas.TextWidth(Copy(sText, 1, FCaretPos - pBegLine)); end; // Out of selection, draw normal if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd < pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then //after begin Canvas.TextOut(x, y, sText); Exit; end; // Get selection start/end. if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; // Text after selection. if pEndLine - iEndDrawIndex > 0 then Canvas.TextOut(x, y, sText); // Text before selection + selected text Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.TextOut(X, Y, Copy(sText, 1, iEndDrawIndex - pBegLine)); // Restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text before selection if iBegDrawIndex - pBegLine > 0 then Canvas.TextOut(X, Y, Copy(sText, 1, iBegDrawIndex - pBegLine)); end; procedure TViewerControl.AddLineOffset(const iOffset: PtrInt); begin FLineList.Add(iOffset); end; procedure TViewerControl.KeyDown(var Key: word; Shift: TShiftState); var CharLenInBytes: Integer; begin if Shift = [] then begin case Key of VK_DOWN: begin Key := 0; Scroll(1); end; VK_UP: begin Key := 0; Scroll(-1); end; VK_RIGHT: begin Key := 0; HScroll(1); end; VK_LEFT: begin Key := 0; HScroll(-1); end; VK_HOME: begin Key := 0; CaretGoHome; end; VK_END: begin Key := 0; CaretGoEnd; end; VK_PRIOR: begin Key := 0; PageUp; end; VK_NEXT: begin Key := 0; PageDown; end; else inherited KeyDown(Key, Shift); end; end else if Shift = [ssCtrl] then begin case Key of VK_HOME: begin Key := 0; CaretPos := FLowLimit; MakeVisible(FCaretPos) end; VK_END: begin Key := 0; CaretPos := FHighLimit; MakeVisible(FCaretPos); end; else inherited KeyDown(Key, Shift); end; end else inherited KeyDown(Key, Shift); end; function TViewerControl.FindAsciiSetForward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; var i: Integer; found: Boolean; u: Cardinal; CharLenInBytes: Integer; begin Result := -1; while aMaxBytes > 0 do begin u := GetNextCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit; if not bFindNotIn then begin for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then Exit(aPosition); end else begin found := False; for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then begin found := True; break; end; if not found then Exit(aPosition); end; Inc(aPosition, CharLenInBytes); Dec(aMaxBytes, CharLenInBytes); end; end; function TViewerControl.FindAsciiSetBackward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; var i: Integer; found: Boolean; u: Cardinal; CharLenInBytes: Integer; begin Result := -1; while aMaxBytes > 0 do begin u := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit; if not bFindNotIn then begin for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then Exit(aPosition); end else begin found := False; for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then begin found := True; break; end; if not found then Exit(aPosition); end; Dec(aPosition, CharLenInBytes); Dec(aMaxBytes, CharLenInBytes); end; end; procedure TViewerControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var LineBegin, LineEnd: PtrInt; ClickPos: PtrInt; CharSide: TCharSide; CharLenInBytes: Integer; begin inherited; SetFocus; if not IsFileOpen then Exit; case Button of mbLeft: begin if Shift * [ssDouble, ssTriple] = [] then begin // Single click. ClickPos := XYPos2Adr(x, y, CharSide); if ClickPos <> -1 then begin FBlockBeg := ClickPos; FBlockEnd := ClickPos; FCaretPos := ClickPos; FMouseBlockBeg := ClickPos; FMouseBlockSide := CharSide; FSelecting := True; if CharSide in [csRight, csAfter] then begin GetNextCharAsAscii(FCaretPos, CharLenInBytes); FCaretPos := FCaretPos + CharLenInBytes; end; Invalidate; end else FSelecting := False; end else // if double click or triple click begin FSelecting := False; LineBegin := GetStartOfLine(FMouseBlockBeg); LineEnd := GetEndOfLine(FMouseBlockBeg); if ssDouble in Shift then begin // Select word with double-click. FBlockBeg := FindAsciiSetBackward(FMouseBlockBeg, FMouseBlockBeg - LineBegin, sNonCharacter, False); FBlockEnd := FindAsciiSetForward(FMouseBlockBeg, LineEnd - FMouseBlockBeg, sNonCharacter, False); end else if ssTriple in Shift then begin // Select line with triple-click. FBlockBeg := FindAsciiSetForward(LineBegin, LineEnd - LineBegin, sWhiteSpace, True); FBlockEnd := FindAsciiSetBackward(LineEnd, LineEnd - LineBegin, sWhiteSpace, True); end; if FBlockBeg = -1 then FBlockBeg := LineBegin; if FBlockEnd = -1 then FBlockEnd := LineEnd; if FBlockBeg > FBlockEnd then FBlockEnd := FBlockBeg; if FAutoCopy then CopyToClipboard; Invalidate; end; end; // mbLeft end; // case end; procedure TViewerControl.MouseMove(Shift: TShiftState; X, Y: Integer); procedure MoveOneChar(var aPosition: PtrInt); var CharLenInBytes: Integer; begin GetNextCharAsAscii(aPosition, CharLenInBytes); aPosition := aPosition + CharLenInBytes; end; procedure MoveOneCharByMouseSide(var aPosition: PtrInt); begin if FMouseBlockSide in [csRight, csAfter] then MoveOneChar(aPosition); end; var ClickPos: PtrInt; CharSide: TCharSide; begin inherited; if FSelecting then begin if y < FTextHeight then Scroll(-3) else if y > ClientHeight - FTextHeight then Scroll(3); ClickPos := XYPos2Adr(x, y, CharSide); if ClickPos <> -1 then begin if ClickPos < FMouseBlockBeg then begin // Got a new beginning. FBlockBeg := ClickPos; FBlockEnd := FMouseBlockBeg; // Move end beyond last character. MoveOneCharByMouseSide(FBlockEnd); // When selecting from right to left, the current selected side must be // either csLeft or csBefore, otherwise current position is not included. if not (CharSide in [csLeft, csBefore]) then begin // Current position should not be included in selection. // Move beginning after first character. MoveOneChar(FBlockBeg); end; FCaretPos:= FBlockBeg; end else if ClickPos > FMouseBlockBeg then begin // Got a new end. FBlockBeg := FMouseBlockBeg; FBlockEnd := ClickPos; // Move beginning after first character. MoveOneCharByMouseSide(FBlockBeg); // When selecting from left to right, the current selected side must be // either csRight or csAfter, otherwise current position is not included. if CharSide in [csRight, csAfter] then begin // Current position should be included in selection. // Move end beyond last character. MoveOneChar(FBlockEnd); end; FCaretPos:= FBlockEnd; end else if FMouseBlockSide <> CharSide then begin // Same position but changed side of the character. FBlockBeg := FMouseBlockBeg; FBlockEnd := FMouseBlockBeg; if ((FMouseBlockSide in [csBefore, csLeft]) and (CharSide in [csRight, csAfter])) or ((FMouseBlockSide in [csRight, csAfter]) and (CharSide in [csBefore, csLeft])) then begin // Move end beyond last character. MoveOneChar(FBlockEnd); end; FCaretPos:= FBlockEnd; end else begin FBlockBeg := FMouseBlockBeg; FBlockEnd := FMouseBlockBeg; end; Invalidate; end; end; end; procedure TViewerControl.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if FSelecting and (Button = mbLeft) and (Shift * [ssDouble, ssTriple] = []) then begin if FAutoCopy then CopyToClipboard; FSelecting := False; end; end; function TViewerControl.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result := inherited; if not Result then Result := Scroll(Mouse.WheelScrollLines); end; function TViewerControl.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result := inherited; if not Result then Result := Scroll(-Mouse.WheelScrollLines); end; function TViewerControl.DoMouseWheelLeft(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result:= inherited DoMouseWheelLeft(Shift, MousePos); if not Result then Result := HScroll(-Mouse.WheelScrollLines); end; function TViewerControl.DoMouseWheelRight(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result:= inherited DoMouseWheelRight(Shift, MousePos); if not Result then Result := HScroll(Mouse.WheelScrollLines); end; procedure TViewerControl.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin FScrollBarVert.Width := LCLIntf.GetSystemMetrics(SM_CYVSCROLL); FScrollBarHorz.Height := LCLIntf.GetSystemMetrics(SM_CYHSCROLL); inherited DoAutoAdjustLayout(AMode, AXProportion, AYProportion); end; function TViewerControl.XYPos2Adr(x, y: Integer; out CharSide: TCharSide): PtrInt; var yIndex: Integer; StartLine, EndLine: PtrInt; function XYPos2AdrBin: PtrInt; var I: Integer; charWidth: Integer; textWidth: Integer; tmpPosition: PtrInt; s, ss, sText: String; begin ss := EmptyStr; tmpPosition := StartLine; sText := TransformBin(tmpPosition, EndLine); for I := 1 to Length(sText) do begin s:= sText[I]; ss := ss + s; textWidth := Canvas.TextWidth(ss); if textWidth > x then begin charWidth := Canvas.TextWidth(s); if textWidth - charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + I - 1); // -1 because we count from 1 end; end; CharSide := csBefore; Result := EndLine; end; function XYPos2AdrCustom: PtrInt; // | offset part | custom part | native part | // | 0000AAAA: | FF AA CC AE | djfjks | var i: Integer; charWidth: Integer; textWidth: Integer; tmpPosition: PtrInt; ss, sText, sPartialText: String; begin tmpPosition := StartLine; sText := TransformCustom(tmpPosition, EndLine); if sText = '' then Exit; // Clicked on offset part ss := Copy(sText, 1, FCustom.StartOfs); textWidth := Canvas.TextWidth(ss); if textWidth > x then begin CharSide := csBefore; Exit(StartLine); end; // Clicked on custom part for i := 0 to FCustom.ValuesPerLine - 1 do begin sPartialText := Copy(sText, 1 + FCustom.StartOfs + i * (FCustom.MaxValueDigits + FCustom.SpaceCount), FCustom.MaxValueDigits); ss := ss + sPartialText; textWidth := Canvas.TextWidth(ss); if textWidth > x then begin // Check if we're not after end of data. if StartLine + i >= EndLine then begin CharSide := csBefore; Exit(EndLine); end; charWidth := Canvas.TextWidth(sPartialText); if textWidth - charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + i); end; // Space after hex number. ss := ss + string(sText[1 + FCustom.StartOfs + i * (FCustom.MaxValueDigits + 1) + FCustom.MaxValueDigits]); textWidth := Canvas.TextWidth(ss); if textWidth > x then begin CharSide := csAfter; Exit(StartLine + i); end; end; // Clicked between hex and ascii. sPartialText := Copy(sText, 1 + FCustom.StartOfs, FCustom.StartAscii - FCustom.EndOfs); ss := ss + sPartialText; textWidth := Canvas.TextWidth(ss); if textWidth > x then begin Exit(-1); // No position. end; // Clicked on ascii part. for i := 0 to FCustom.ValuesPerLine - 1 do begin sPartialText := string(sText[1 + FCustom.StartAscii + i]); ss := ss + sPartialText; textWidth := Canvas.TextWidth(ss); if textWidth > x then begin // Check if we're not after end of data. if StartLine + i >= EndLine then begin CharSide := csBefore; Exit(EndLine); end; charWidth := Canvas.TextWidth(sPartialText); if textWidth - charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + i); end; end; CharSide := csBefore; Result := EndLine; end; function XYPos2AdrText: PtrInt; var i: PtrInt; charWidth: Integer; textWidth: Integer; len: Integer = 0; CharLenInBytes: Integer; s: String; ss: String; begin ss := ''; i := StartLine; while i < EndLine do begin s := GetNextCharAsUtf8(i, CharLenInBytes); if CharLenInBytes = 0 then Break; // Check if the conversion to UTF-8 was successful. if Length(s) > 0 then begin if s = #9 then begin s := StringOfChar(' ', FTabSpaces - len mod FTabSpaces); len := len + (FTabSpaces - len mod FTabSpaces); end else Inc(len); // Assume there is one character after conversion // (otherwise use Inc(len, UTF8Length(s))). if (Mode = vcmText) and (len <= FHPosition) then begin i := i + CharLenInBytes; Continue; end; if (CharLenInBytes = 1) and (s[1] < ' ') then begin s := ' '; end; ss := ss + s; textWidth := Canvas.TextWidth(ss); if textWidth > x then begin charWidth := Canvas.TextWidth(s); if textWidth - charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(i); end; end; i := i + CharLenInBytes; end; CharSide := csBefore; Result := EndLine; end; begin if FLineList.Count = 0 then Exit(-1); if (x < FLeftMargin) then x := 0 else begin x := x - FLeftMargin; end; yIndex := y div FTextHeight; if yIndex >= FLineList.Count then yIndex := FLineList.Count - 1; if yIndex < 0 then yIndex := 0; // Get position of first character of the line. StartLine := FLineList.Items[yIndex]; // Get position of last character of the line. EndLine := GetEndOfLine(StartLine); if (x = 0) and ((Mode <> vcmText) or (FHPosition = 0)) then begin CharSide := csBefore; Exit(StartLine); end; case Mode of vcmBin: Result := XYPos2AdrBin; vcmHex,vcmDec: Result := XYPos2AdrCustom; // XYPos2AdrHex; vcmText, vcmWrap, vcmBook: Result := XYPos2AdrText; else raise Exception.Create('Invalid viewer mode'); end; end; procedure TViewerControl.SelectAll; begin SelectText(FLowLimit, FHighLimit); end; procedure TViewerControl.SelectText(AStart, AEnd: PtrInt); begin if AStart < FLowLimit then AStart := FLowLimit; if AEnd > FHighLimit then AEnd := FHighLimit; if AStart <= AEnd then begin FBlockBeg := AStart; FBlockEnd := AEnd; Invalidate; end; end; procedure TViewerControl.CopyToClipboard; var sText, utf8Text: string; begin if (FBlockEnd - FBlockBeg) <= 0 then Exit; if (FBlockEnd - FBlockBeg) > 1024 * 1024 then // Max 1 MB to clipboard Exit; SetString(sText, GetDataAdr + FBlockBeg, FBlockEnd - FBlockBeg); utf8Text := ConvertToUTF8(sText); {$IFDEF LCLGTK2} // Workaround for Lazarus bug #0021453. LCL adds trailing zero to clipboard in Clipboard.AsText. Clipboard.Clear; Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), utf8Text[1], Length(utf8Text)); {$ELSE} Clipboard.AsText := utf8Text; {$ENDIF} end; procedure TViewerControl.CopyToClipboardF; var s,sText, utf8Text: string; len: Integer; begin len:=FBlockEnd-FBlockBeg; if len=0 then exit; sText:=TransformCustomBlock(FBlockBeg,len,False,False,s); utf8Text := ConvertToUTF8(sText); {$IFDEF LCLGTK2} // Workaround for Lazarus bug #0021453. LCL adds trailing zero to clipboard in Clipboard.AsText. Clipboard.Clear; Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), utf8Text[1], Length(utf8Text)); {$ELSE} Clipboard.AsText := utf8Text; {$ENDIF} end; function TViewerControl.Selection: String; const MAX_LEN = 512; var sText: String; AIndex: PtrInt; ALength: PtrInt; CharLenInBytes: Integer; begin if (FBlockEnd - FBlockBeg) <= 0 then Exit(EmptyStr); ALength:= FBlockEnd - FBlockBeg; if ALength <= MAX_LEN then begin SetString(sText, GetDataAdr + FBlockBeg, ALength); Result := ConvertToUTF8(sText); end else begin Result:= EmptyStr; AIndex:= FBlockBeg; ALength:= AIndex + MAX_LEN; while AIndex < ALength do begin sText := GetNextCharAsUtf8(AIndex, CharLenInBytes); if CharLenInBytes = 0 then Break; Result:= Result + sText; AIndex:= AIndex + CharLenInBytes; end; end; end; function TViewerControl.GetNextCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; var u1, u2: Word; InvalidCharLen: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: begin if iPosition < FHighLimit then begin CharLenInBytes := SafeUTF8NextCharLen(GetDataAdr + iPosition, FHighLimit - iPosition, InvalidCharLen); // It's enough to only return Ascii. if CharLenInBytes = 1 then Result := PByte(GetDataAdr)[iPosition]; // Full conversion: // Result := UTF8CodepointToUnicode(PAnsiChar(GetDataAdr + iPosition), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veOem, veCp1250..veCp874, veIso88591, veIso88592, veKoi8r, veKoi8u, veKoi8ru: if iPosition < FHighLimit then begin Result := PByte(GetDataAdr)[iPosition]; CharLenInBytes := 1; end else CharLenInBytes := 0; veUcs2be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin Result := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUcs2le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin Result := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUtf16be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition + SizeOf(Word) * CharLenInBytes - 1 < FHighLimit then begin u2 := BEtoN(PWord(GetDataAdr + iPosition)[1]); Result := utf16PairToUnicode(u1, u2); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition + SizeOf(Word) * CharLenInBytes - 1 < FHighLimit then begin u2 := LEtoN(PWord(GetDataAdr + iPosition)[1]); Result := utf16PairToUnicode(u1, u2); end else CharLenInBytes := 0; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be: if iPosition + SizeOf(LongWord) - 1 < FHighLimit then begin Result := BEtoN(PLongWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veUtf32le: if iPosition + SizeOf(LongWord) - 1 < FHighLimit then begin Result := LEtoN(PLongWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veCp932, // Unsupported variable-width encodings veCp936, // TODO: Add cp932, cp936, cp949, cp950 encoding support veCp949, veCp950: if iPosition < FHighLimit then begin Result := PByte(GetDataAdr)[iPosition]; CharLenInBytes := 1; end else CharLenInBytes := 0; else raise Exception.Create('Unsupported viewer encoding'); end; end; function TViewerControl.GetPrevCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; var u1, u2: Word; InvalidCharLen: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: begin if iPosition > FLowLimit then begin CharLenInBytes := SafeUTF8PrevCharLen(GetDataAdr + iPosition, iPosition - FLowLimit, InvalidCharLen); // It's enough to only return Ascii. if CharLenInBytes = 1 then Result := PByte(GetDataAdr)[iPosition - 1]; // Full conversion: // Result := UTF8CodepointToUnicode(PAnsiChar(GetDataAdr + iPosition - CharLenInBytes), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veOem, veCp1250..veCp874, veIso88591, veIso88592, veKoi8r, veKoi8u, veKoi8ru: if iPosition > FLowLimit then begin Result := PByte(GetDataAdr + iPosition)[-1]; CharLenInBytes := 1; end else CharLenInBytes := 0; veUcs2be: if iPosition >= FLowLimit + SizeOf(Word) then begin Result := BEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUcs2le: if iPosition >= FLowLimit + SizeOf(Word) then begin Result := LEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUtf16be: if iPosition >= FLowLimit + SizeOf(Word) then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition >= FLowLimit + SizeOf(Word) * CharLenInBytes then begin u2 := BEtoN(PWord(GetDataAdr + iPosition)[-2]); // u2 is the first, u1 is the second value of the pair Result := utf16PairToUnicode(u2, u1); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition >= FLowLimit + SizeOf(Word) then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition >= FLowLimit + SizeOf(Word) * CharLenInBytes then begin u2 := LEtoN(PWord(GetDataAdr + iPosition)[-2]); // u2 is the first, u1 is the second value of the pair Result := utf16PairToUnicode(u2, u1); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be: if iPosition >= FLowLimit + SizeOf(LongWord) then begin Result := BEtoN(PLongWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veUtf32le: if iPosition >= FLowLimit + SizeOf(LongWord) then begin Result := LEtoN(PLongWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veCp932, // Unsupported variable-width encodings veCp936, // TODO: Add cp932, cp936, cp949, cp950 encoding support veCp949, veCp950: if iPosition > FLowLimit then begin Result := PByte(GetDataAdr + iPosition)[-1]; CharLenInBytes := 1; end else CharLenInBytes := 0; else raise Exception.Create('Unsupported viewer encoding'); end; end; function TViewerControl.GetNextCharAsUtf8(const iPosition: PtrInt; out CharLenInBytes: Integer): String; var u1: Word; s: string; InvalidCharLen: Integer; begin Result := ''; case FEncoding of veUtf8, veUtf8bom: CharLenInBytes := SafeUTF8NextCharLen(GetDataAdr + iPosition, FHighLimit - iPosition, InvalidCharLen); veAnsi, veOem, veCp1250..veCp874, veIso88591, veIso88592, veKoi8r, veKoi8u, veKoi8ru: CharLenInBytes := 1; veUcs2be, veUcs2le: CharLenInBytes := 2; veUtf16be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1) * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1) * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be, veUtf32le: CharLenInBytes := 4; veCp932, // Unsupported variable-width encodings veCp936, // TODO: Add cp932, cp936, cp949, cp950 encoding support veCp949, veCp950: CharLenInBytes := 1; else raise Exception.Create('Unsupported viewer encoding'); end; if (CharLenInBytes > 0) and (iPosition + CharLenInBytes - 1 < FHighLimit) then begin SetString(s, GetDataAdr + iPosition, CharLenInBytes); Result := ConvertToUTF8(s); end else Result := ''; end; function TViewerControl.ConvertToUTF8(const sText: AnsiString): String; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; // Force detect encoding. case FEncoding of veAutoDetect: ; veAnsi: Result := CeAnsiToUtf8(sText); veOem: Result := CeOemToUtf8(sText); veUtf8, veUtf8bom: Result := Utf8ReplaceBroken(sText); veUtf16be: Result := Utf16BEToUtf8(sText); veUtf16le: Result := Utf16LEToUtf8(sText); veUtf32be: Result := Utf32BEToUtf8(sText); veUtf32le: Result := Utf32LEToUtf8(sText); else Result := LConvEncoding.ConvertEncoding(sText, ViewerEncodingsNames[FEncoding], EncodingUTF8); end; end; function TViewerControl.ConvertFromUTF8(const sText: String): AnsiString; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; // Force detect encoding. case FEncoding of veAutoDetect: ; veAnsi: Result := CeUtf8ToAnsi(sText); veOem: Result := CeUtf8ToOem(sText); veUtf8, veUtf8bom: Result := sText; veUtf16be: Result := Utf8ToUtf16BE(sText); veUtf16le: Result := Utf8ToUtf16LE(sText); veUtf32be: Result := '';//Utf8ToUtf32BE(sText); veUtf32le: Result := '';//Utf8ToUtf32LE(sText); else Result := LConvEncoding.ConvertEncoding(sText, EncodingUTF8, ViewerEncodingsNames[FEncoding]); end; end; function TViewerControl.IsVisible(const aPosition: PtrInt): Boolean; var StartPos: PtrInt; CharLenInBytes: Integer; begin if IsFileOpen and (FLineList.Count > 0) then begin FVisibleOffset:= 0; StartPos:= GetStartOfLine(aPosition); // Calculate horizontal offset in symbols while (StartPos < aPosition) do begin GetNextCharAsAscii(StartPos, CharLenInBytes); Inc(StartPos, CharLenInBytes); Inc(FVisibleOffset); end; Result := (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) and (FVisibleOffset >= FHPosition) and (FVisibleOffset <= FHPosition + FTextWidth); end else Result := False; end; procedure TViewerControl.MakeVisible(const aPosition: PtrInt); var Offset: Integer; LastLine: Boolean; begin if not IsVisible(aPosition) then begin SetPosition(aPosition); Offset:= GetLinesTillEnd(aPosition, LastLine); if (Offset > 4) and (LastLine = False) then Scroll(-4); Update; if FViewerControlMode = vcmText then begin if (FVisibleOffset < FHPosition) or (FVisibleOffset > FHPosition + FTextWidth) then begin SetHPosition(FVisibleOffset); HScroll(-1); end; end; end; end; procedure TViewerControl.ScrollBarVertScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin FUpdateScrollBarPos := False; case ScrollCode of scLineUp: Scroll(-1); scLineDown: Scroll(1); scPageUp: PageUp; scPageDown: PageDown; scTop: GoHome; scBottom: GoEnd; scTrack, scPosition: begin // This check helps avoiding loops if changing ScrollPos below // triggers another scPosition message. if (ScrollCode = scTrack) or (ScrollPos <> FScrollBarPosition) then begin if ScrollPos = 0 then GoHome else if ScrollPos = 100 then GoEnd else Percent := ScrollPos; end; end; scEndScroll: begin end; end; ScrollPos := FScrollBarPosition; FUpdateScrollBarPos := True; end; procedure TViewerControl.ScrollBarHorzScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin FUpdateScrollBarPos := False; case ScrollCode of scLineUp: HScroll(-1); scLineDown: HScroll(1); scPageUp: HPageUp; scPageDown: HPageDown; scTop: HGoHome; scBottom: HGoEnd; scTrack, scPosition: begin // This check helps avoiding loops if changing ScrollPos below // triggers another scPosition message. if (ScrollCode = scTrack) or (ScrollPos <> FHScrollBarPosition) then begin if ScrollPos = 0 then HGoHome else if ScrollPos = 100 then HGoEnd else HScroll((FHLowEnd - FTextWidth) * ScrollPos div 100 - FHPosition); end; end; scEndScroll: begin end; end; ScrollPos := FHScrollBarPosition; FUpdateScrollBarPos := True; end; procedure TViewerControl.UpdateScrollbars; begin FScrollBarVert.LargeChange := GetClientHeightInLines - 1; case Mode of vcmBin, vcmHex: begin //FScrollBarVert.PageSize := // ((FHighLimit div cHexWidth - GetClientHeightInLines) div 100); end else FScrollBarVert.PageSize := 1; end; FScrollBarHorz.Visible:= (FViewerControlMode = vcmText); end; procedure TViewerControl.ViewerResize(Sender: TObject); begin UpdateScrollbars; // Force recalculating position. SetPosition(FPosition); SetHPosition(FHPosition); end; procedure TViewerControl.ReReadFile; begin FBlockBeg := 0; FBlockEnd := 0; FBOMLength := GetBomLength; UpdateLimits; UpdateScrollbars; Invalidate; end; function TViewerControl.IsFileOpen: Boolean; begin Result := Assigned(FMappedFile); end; function TViewerControl.DetectEncoding: TViewerEncoding; var DetectStringLength: Integer = 4096; // take first 4kB of the file to detect encoding DetectString: String; DetectedEncodingName: String; Enc: TViewerEncoding; begin if IsFileOpen then begin // Default to Ansi in case encoding cannot be detected or is unsupported. Result := veAnsi; if FFileSize < DetectStringLength then DetectStringLength := FFileSize; SetString(DetectString, PAnsiChar(FMappedFile), DetectStringLength); if Assigned(FOnGuessEncoding) then DetectedEncodingName := FOnGuessEncoding(DetectString) else DetectedEncodingName := LConvEncoding.GuessEncoding(DetectString); if DetectedEncodingName <> '' then begin DetectedEncodingName := NormalizeEncoding(DetectedEncodingName); // Map UCS-2 to UTF-16. if DetectedEncodingName = 'ucs2le' then DetectedEncodingName := 'utf16le' else if DetectedEncodingName = 'ucs2be' then DetectedEncodingName := 'utf16be'; for Enc := Low(TViewerEncoding) to High(TViewerEncoding) do begin if NormalizeEncoding(ViewerEncodingsNames[Enc]) = DetectedEncodingName then begin Result := Enc; break; end; end; end; end else Result := veAutoDetect; end; procedure TViewerControl.GetSupportedEncodings(List: TStrings); var Enc: TViewerEncoding; begin for Enc := Low(TViewerEncoding) to High(TViewerEncoding) do List.Add(ViewerEncodingsNames[Enc]); end; function TViewerControl.GetBomLength: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: if (FFileSize >= 3) and (PByte(FMappedFile)[0] = $EF) and (PByte(FMappedFile)[1] = $BB) and (PByte(FMappedFile)[2] = $BF) then begin Result := 3; end; veUcs2be, veUtf16be: if (FFileSize >= 2) and (PByte(FMappedFile)[0] = $FE) and (PByte(FMappedFile)[1] = $FF) then begin Result := 2; end; veUcs2le, veUtf16le: if (FFileSize >= 2) and (PByte(FMappedFile)[0] = $FF) and (PByte(FMappedFile)[1] = $FE) then begin Result := 2; end; veUtf32be: if (FFileSize >= 4) and (PByte(FMappedFile)[0] = $00) and (PByte(FMappedFile)[1] = $00) and (PByte(FMappedFile)[2] = $FE) and (PByte(FMappedFile)[3] = $FF) then begin Result := 4; end; veUtf32le: if (FFileSize >= 4) and (PByte(FMappedFile)[0] = $00) and (PByte(FMappedFile)[1] = $00) and (PByte(FMappedFile)[2] = $FF) and (PByte(FMappedFile)[3] = $FE) then begin Result := 4; end; end; end; procedure TViewerControl.UpdateLimits; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; FBOMLength := GetBomLength; case FViewerControlMode of vcmText, vcmWrap, vcmBook: begin FLowLimit := 0; FHighLimit := FFileSize - FBOMLength; end; else begin FLowLimit := 0; FHighLimit := FFileSize; end; end; end; procedure TViewerControl.UpdateSelection; procedure Check(var aPosition: PtrInt; Backwards: Boolean); var CharStart: Pointer; begin case FEncoding of veUtf8, veUtf8bom: begin if not Backwards then begin CharStart := SafeUTF8NextCharStart(GetDataAdr + aPosition, FHighLimit - aPosition); if Assigned(CharStart) then aPosition := CharStart - GetDataAdr else aPosition := 0; end else begin CharStart := SafeUTF8PrevCharEnd(GetDataAdr + aPosition, aPosition - FLowLimit); if Assigned(CharStart) then aPosition := CharStart - GetDataAdr else aPosition := 0; end; end; veAnsi, veOem, veCp1250..veCp874, veIso88591, veIso88592, veKoi8r, veKoi8u, veKoi8ru: ; // any position allowed veUcs2be, veUcs2le: aPosition := ((aPosition - FLowLimit) and not 1) + FLowLimit; veUtf16be, veUtf16le: // todo: check if not in the middle of utf-16 character aPosition := ((aPosition - FLowLimit) and not 1) + FLowLimit; veUtf32be, veUtf32le: aPosition := ((aPosition - FLowLimit) and not 3) + FLowLimit; veCp932, // Unsupported variable-width encodings veCp936, // TODO: Add cp932, cp936, cp949, cp950 encoding support veCp949, veCp950: ; else raise Exception.Create('Unsupported viewer encoding'); end; end; begin if (FBlockBeg < FLowLimit) or (FBlockBeg >= FHighLimit) or (FBlockEnd < FLowLimit) or (FBlockEnd >= FHighLimit) then begin FBlockBeg := FLowLimit; FBlockEnd := FLowLimit; end else begin case FViewerControlMode of vcmText, vcmWrap, vcmBook: begin Check(FBlockBeg, False); Check(FBlockEnd, True); if (FBlockBeg < FLowLimit) or (FBlockBeg >= FHighLimit) or (FBlockEnd < FLowLimit) or (FBlockEnd >= FHighLimit) or (FBlockEnd < FBlockBeg) then begin FBlockBeg := FLowLimit; FBlockEnd := FLowLimit; end; end; // In non-text modes any selection is valid. end; end; end; function TViewerControl.FindUtf8Text(iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): PtrInt; var SearchTextLength: Integer; sSearchChars: array of String; pCurrentAddr, pEndAddr: PtrInt; i, charLen: Integer; function sPos2(pAdr: PtrInt):Boolean; var curChr:String; i, charLen: Integer; begin Result := False; for i := 0 to SearchTextLength-1 do begin curChr:=GetNextCharAsUtf8(pAdr,charLen); case bCaseSensitive of False: if UTF8UpperCase(curChr) <> UTF8UpperCase(sSearchChars[i]) then Exit; True : if curChr <> sSearchChars[i] then Exit; end; if charLen>0 then pAdr:=pAdr+charLen else Inc(pAdr); end; Result:=True; end; begin Result := PtrInt(-1); SearchTextLength := UTF8Length(sSearchText); if (SearchTextLength <= 0) then Exit; setLength(sSearchChars,SearchTextLength); for i:=1 to SearchTextLength do sSearchChars[i-1]:=UTF8Copy(sSearchText,i,1); pCurrentAddr := iStartPos; pEndAddr := FHighLimit - Length(ConvertFromUTF8(sSearchText)); if bSearchBackwards and (pCurrentAddr > pEndAddr) then // Move to the first possible position for searching backwards. pCurrentAddr := pEndAddr; if (pEndAddr < 0) or (pCurrentAddr < 0) or (pCurrentAddr > pEndAddr) then Exit; while True do begin if (pCurrentAddr > pEndAddr) or (pCurrentAddr < 0) then Exit; if sPos2(pCurrentAddr) then begin Result := pCurrentAddr; Exit; end; case bSearchBackwards of False: begin GetNextCharAsUtf8(pCurrentAddr,charLen); if charLen>0 then pCurrentAddr:=pCurrentAddr+charLen else Inc(pCurrentAddr); end; True : Dec(pCurrentAddr); end; end; end; procedure TViewerControl.ResetEncoding; begin FEncoding:= veAutoDetect; end; procedure Register; begin RegisterComponents('SeksiCmd', [TViewerControl]); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020516� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/synuni.pas��������������������������������������������0000644�0001750�0000144�00000000365�15104114162�022554� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit SynUni; interface uses SynUniClasses, SynUniHighlighter, SynUniRules; implementation end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/synuni.lpk��������������������������������������������0000644�0001750�0000144�00000004550�15104114162�022557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="5"> <Name Value="SynUni"/> <AddToProjectUsesSection Value="True"/> <Author Value="Vitaly Nevzorov (aka Vit); Kirill Burtsev (aka Fantasist); Vitaly Lyapota (aka Vitalik); eastorwest; Alexander Koblov"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <OtherUnitFiles Value="source"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseExternalDbgSyms Value="True"/> </Debugging> </Linking> </CompilerOptions> <Description Value="SynUniHighlighter component version 1.8 for syntax highlighting with SynEdit Ported to Lazarus by eastorwest on February 2012"/> <License Value="Mozilla Public License Version 1.1 https://www.mozilla.org/en-US/MPL/1.1/ or GNU General Public License, version 2 https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/> <Version Major="1" Minor="8" Release="2"/> <Files Count="3"> <Item1> <Filename Value="source/SynUniClasses.pas"/> <UnitName Value="SynUniClasses"/> </Item1> <Item2> <Filename Value="source/SynUniHighlighter.pas"/> <UnitName Value="SynUniHighlighter"/> </Item2> <Item3> <Filename Value="source/SynUniRules.pas"/> <UnitName Value="SynUniRules"/> </Item3> </Files> <CompatibilityMode Value="True"/> <RequiredPkgs Count="3"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> <Item3> <PackageName Value="SynEdit"/> </Item3> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/�����������������������������������������������0000755�0001750�0000144�00000000000�15104114162�022016� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/SynUniRules.pas��������������������������������0000644�0001750�0000144�00000174504�15104114162�024776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynUniHighlighter.pas, released 2003-01 All Rights Reserved. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. }{ @abstract(Provides a universal highlighter for SynEdit) @authors(Fantasist [walking_in_the_sky@yahoo.com], Vit [nevzorov@yahoo.com], Vitalik [vetal-x@mail.ru]) @created(2003) @lastmod(2004-05-12) } unit SynUniRules; interface uses SysUtils, Graphics, Classes, SynEditHighlighter, SynUniClasses, Laz2_DOM; type TSynRange = class; TSynSet = class; TAbstractSymbol = class function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; virtual; abstract; end; TSymbols = class(TAbstractSymbol) HeadNode: TSymbolNode; SynSets: TList; function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; override; function FindSymbol(st: string): TSymbolNode; procedure AddSymbol(st: string; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); procedure AddSet(SymbolSet: TSynSet); constructor Create(ch: char; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); reintroduce; overload; virtual; constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual; destructor Destroy(); override; end; TDefaultSymbols = class(TAbstractSymbol) tkSynSymbol: TSynSymbol; function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; override; constructor Create(SynSymb: TSynSymbol); reintroduce; virtual; destructor Destroy(); override; end; TDefaultTermSymbols = class(TAbstractSymbol) tkSynSymbol: TSynSymbol; function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; override; constructor Create(SynSymb: TSynSymbol); virtual; destructor Destroy(); override; end; TSynKeyList = class (TSynRule) KeyList: TStringList; constructor Create(st: string = ''); destructor Destroy(); override; procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); procedure LoadFromXml(xml: TDOMNode); override; procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; end; TSynKeyListLink = class(TAbstractRule) KeyList: TSynKeyList; end; TSynSet = class (TSynRule) SymbSet: TSymbSet; StartType: TSymbStartType; BrakeType: TSymbBrakeType; constructor Create(aSymbSet: TSymbSet = []); destructor Destroy(); override; procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); procedure LoadFromXml(xml: TDOMNode); override; procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; end; TSynSetLink = class(TAbstractRule) SynSet: TSynSet; end; TSynRangeLink = class(TAbstractRule) Range: TSynRange; Parent: TSynRange; constructor Create(aRange: TSynRange); virtual; end; TSynRangeRule = class fCloseSymbol: TSynSymbol; fOpenSymbol: TSynSymbol; fCloseOnTerm: boolean; fCloseOnEol: boolean; fAllowPredClose: boolean; constructor Create(OpenSymbs: string = ''; CloseSymbs: string = ''); destructor Destroy(); override; end; TSynRange = class (TSynRule) private fCaseSensitive: boolean; fOwner: TSynRange; fSynSymbols: TList; fSynRanges: TList; fSynKeyLists: TList; fSynSets: TList; StringCaseFunct: function (const st: string): string; fPrepared: boolean; public {temp} OpenCount: integer; ParentBackup: TSynRange; fRule: TSynRangeRule; fClosingSymbol: TSynSymbol; fDefaultSynSymbol: TSynSymbol; fDefaultSymbols: TDefaultSymbols; fDefaultTermSymbol: TDefaultTermSymbols; fCommonSynRanges: TList; fSynRangeLinks: TList; CaseFunct: function (ch: char): char; fTermSymbols: TSymbSet; HasNodeAnyStart: array[char] of boolean; SymbolList: array[char] of TAbstractSymbol; private function GetSynSymbol(Index: Integer): TSynSymbol; function GetCommonSynRange(Index: Integer): TSynRange; function GetSynRangeLink(Index: Integer): TSynRangeLink; function GetSynRange(Index: Integer): TSynRange; function GetSynKeyList(Index: Integer): TSynKeyList; function GetSynSet(Index: Integer): TSynSet; function GetSynSymbolCount(): Integer; function GetCommonSynRangeCount(): Integer; function GetSynRangeLinkCount(): Integer; function GetSynRangeCount(): Integer; function GetSynKeyListCount(): Integer; function GetSynSetCount(): Integer; function GetCaseSensitive: boolean; procedure SetCaseSensitive(const Value: boolean); public {temp} procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer); procedure LoadFromXml(xml: TDOMNode); override; procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; public constructor Create(OpenSymbs: string = ''; CloseSymbs: string = ''); virtual; destructor Destroy(); override; procedure AddSynSymbol(NewSymb: TSynSymbol); procedure AddRule(NewRule: TSynRule); procedure AddCommonRange(Range: TSynRange); procedure AddRangeLink(NewRangeLink: TSynRangeLink); overload; function AddRangeLink(aRange: TSynRange; aName: string; aColor: TColor): TSynRangeLink; overload; procedure AddRange(NewRange: TSynRange); overload; function AddRange(aOpen, aClose, aName: string; aColor: TColor): TSynRange; overload; procedure AddKeyList(NewKeyList: TSynKeyList); overload; function AddKeyList(aName: string; aColor: TColor): TSynKeyList; overload; procedure AddSet(NewSet: TSynSet); overload; function AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; overload;//Vitalik 2004 function FindSymbol(st: string): TSynSymbol; function FindSymbolOwner(Symbol: TSynSymbol): TSynKeyList; procedure DeleteCommonRange(index: integer); overload; procedure DeleteCommonRange(Range: TSynRange); overload; procedure DeleteRangeLink(index: integer); overload; procedure DeleteRangeLink(RangeLink: TSynRangeLink); overload; procedure DeleteRange(index: integer); overload; procedure DeleteRange(Range: TSynRange); overload; procedure DeleteKeyList(index: integer); overload; procedure DeleteKeyList(KeyList: TSynKeyList); overload; procedure DeleteSet(index: integer); overload; procedure DeleteSet(SynSet: TSynSet); overload; { procedure SetParentColor; procedure RestoreOldColor; } procedure SetDelimiters(Delimiters: TSymbSet); // procedure SetStyles(aStyles: TSynUniStyles); procedure SetColorForChilds(); procedure ClearParsingFields(); procedure ResetParents(aParent: TSynRange); procedure Prepare(Owner: TSynRange); procedure Reset(); procedure Clear(); function FindRange(const Name: string): TSynRange; procedure LoadHglFromStream(aSrc: TStream); public property TermSymbols: TSymbSet read fTermSymbols write fTermSymbols; // property OpenSymbol: TSynSymbol read fOpenSymbol; // property CloseSymbol: TSynSymbol read fCloseSymbol; // property CloseOnTerm: boolean read fCloseOnTerm write fCloseOnTerm; // property CloseOnEol: boolean read fCloseOnEol write fCloseOnEol; // property AllowPredClose: boolean read fAllowPredClose write fAllowPredClose; property CommonRanges[index: integer]: TSynRange read GetCommonSynRange; property CommonRangeCount: integer read GetCommonSynRangeCount; property RangeLinks[index: integer]: TSynRangeLink read GetSynRangeLink; property RangeLinkCount: integer read GetSynRangeLinkCount; property Ranges[index: integer]: TSynRange read GetSynRange; property RangeCount: integer read GetSynRangeCount; property Symbols[index: integer]: TSynSymbol read GetSynSymbol; property SymbolCount: integer read GetSynSymbolCount; property KeyLists[index: integer]: TSynKeyList read GetSynKeyList; property KeyListCount: Integer read GetSynKeyListCount; property Sets[index: integer]: TSynSet read GetSynSet; property SetCount: Integer read GetSynSetCount; property CaseSensitive: boolean read GetCaseSensitive write SetCaseSensitive; property Prepared: boolean read fPrepared; property Parent: TSynRange read fOwner write fOwner; end; //function Verify(tag: string; xml: TXMLParser): boolean; overload; const DefaultTermSymbols: TSymbSet = ['*','/','+','-','=','\','|','&','(',')', '[',']','{','}','`','~','!','@',',','$','%','^','?',':',';','''','"','.', '>','<','#']; implementation uses Laz2_XMLRead; function CaseNone(ch: char): char; //: Need for CaseSensitive begin Result := ch; end; function StringCaseNone(const st: string): string; //: Need for CaseSensitive begin Result := st; end; //==== TSymbols ============================================================== procedure TSymbols.AddSymbol(st: string; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); //: Add SynSymbol to the tree Symbols var i: integer; l: integer; Node: TSymbolNode; SList: TSymbolList; begin SList := HeadNode.NextSymbs; //: All branches of current node (first - root node) Node := nil; //: Current Node l := Length(st); //: Length of adding string for i := 1 to l do //: Check all symbols of adding string begin Node := SList.FindSymbol(st[i]); //: Try to find current symbol of adding string among branches if Node = nil then //: If we can't find current symbol begin Node := TSymbolNode.Create(st[i]); //: then create node with current symbol SList.AddSymbol(Node); //: and add it to current branches end; SList := Node.NextSymbs; //: Go to finded or added node end; Node.StartType := tkSynSymbol.StartType; Node.BrakeType := ABrakeType; //: Set Break Type and ... Node.tkSynSymbol := tkSynSymbol; //: ... SynSymbol of last Node end; constructor TSymbols.Create(ch: char; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); begin HeadNode := TSymbolNode.Create(ch, tkSynSymbol, ABrakeType); SynSets := TList.Create; end; constructor TSymbols.Create(SymbolSet: TSynSet); begin SynSets := TList.Create; AddSet(SymbolSet); end; destructor TSymbols.Destroy; begin if Assigned(HeadNode) then HeadNode.Free; FreeList(SynSets); inherited; end; function TSymbols.FindSymbol(st: string): TSymbolNode; //: Find string st in the tree Symbols var i: integer; l: integer; Node, prvNode: TSymbolNode; begin Node := HeadNode; //: Root of the tree l := Length(st); //: Length of string for i := 1 to l do begin prvNode := Node.NextSymbs.FindSymbol(st[i]); if prvNode = nil then //: If don't find break; //: Exit from cycle Node := prvNode; //: Else go to the brench or nil, if don't find end; Result := Node; //: Return node, if found, and nil, if not found end; procedure TSymbols.AddSet(SymbolSet: TSynSet);// ABrakeType: TSymbBrakeType); begin SynSets.Add(SymbolSet); end; function TSymbols.GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; //: Try to find any token var curNode, nxtStart, prevFind: TSymbolNode; i, posStart, posNext, posPrev: integer; AllowedTermSymbols: TSymbSet; function CanBeToken(): boolean; var i: integer; begin CanBeToken := True; if curNode.tkSynSymbol = nil then CanBeToken := False else if (curNode.BrakeType = btTerm) and not (fLine[succ(Run)] in CurRule.fTermSymbols) then CanBeToken := False else case curNode.tkSynSymbol.StartLine of slFirstNonSpace: for i := 0 to posStart-1 do {$IFNDEF FPC} if not (fLine[i] in [' ', #32, #9]) then begin {$ELSE} if not (fLine[i] in [#32, #9]) then begin {$ENDIF} CanBeToken := False; break; end; slFirst: if posStart <> 0 then CanBeToken := False; end; end; begin Result := False; posStart := Run; if Assigned(HeadNode) then begin curNode := HeadNode; posNext := posStart; nxtStart := nil; repeat if nxtStart <> nil then begin curNode := nxtStart; Run := posNext; nxtStart := nil; end; if CanBeToken then prevFind := curNode else prevFind := nil; posPrev := Run; while (curNode.NextSymbs.Count > 0) and (fLine[Run] <> #0) do begin inc(Run); curNode := curNode.NextSymbs.FindSymbol(CurRule.CaseFunct(fLine[Run])); if curNode = nil then begin dec(Run); break; end; if CanBeToken then begin prevFind := curNode; posPrev := Run; end; if nxtStart = nil then if (CurRule.HasNodeAnyStart[CurRule.CaseFunct(curNode.ch)] or (curNode.ch in CurRule.fTermSymbols) or (CurRule.CaseFunct(fLine[Run]) in CurRule.fTermSymbols)) then begin nxtStart := curNode; posNext := Run; end; end; Run := posPrev; if prevFind = nil then continue; if prevFind.tkSynSymbol = nil then continue; //Never happened??? if fLine[Run] <> #0 then //: Go to next symbol in line if it isn't end of line inc(Run); if prevFind.BrakeType = btAny then begin //: If token can end by any symbol Result := True; //: We find it! tkSynSymbol := prevFind.tkSynSymbol; //: Here it is! Exit; end; if fLine[Run] in CurRule.fTermSymbols then begin //: If token can end by delimeter and current symbol is delimeter Result := True; //: We find it! tkSynSymbol := prevFind.tkSynSymbol; //: Here it is! Exit; end; until nxtStart = nil; end; Run := posStart; AllowedTermSymbols := CurRule.fTermSymbols; for i := 0 to SynSets.Count-1 do begin AllowedTermSymbols := AllowedTermSymbols - TSynSet(SynSets[i]).SymbSet; end; for i := 0 to SynSets.Count-1 do begin Run := posStart; repeat inc(Run); until not (fLine[Run] in TSynSet(SynSets[i]).SymbSet) or (fLine[Run] = #0); //: If number ends on some Term-symbol, then if TSynSet(SynSets[i]).BrakeType = btAny then begin Result := True; //: We find it! tkSynSymbol := TSynSymbol.Create('', TSynSet(SynSets[i]).Attribs); exit; end; if (fLine[Run] in AllowedTermSymbols) then begin Result := True; //: We find it! tkSynSymbol := TSynSymbol.Create('', TSynSet(SynSets[i]).Attribs); exit; end; end; Run := succ(posStart); end; //==== TDefaultSymbols ======================================================= constructor TDefaultSymbols.Create(SynSymb: TSynSymbol); begin tkSynSymbol := SynSymb; end; destructor TDefaultSymbols.Destroy; begin tkSynSymbol.Free; inherited; end; function TDefaultSymbols.GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; //: Read just symbol, nothing to return begin inc(Run); Result := False; end; //==== TDefaultTermSymbols =================================================== constructor TDefaultTermSymbols.Create(SynSymb: TSynSymbol); begin tkSynSymbol := SynSymb; end; destructor TDefaultTermSymbols.Destroy; begin tkSynSymbol.Free; inherited; end; function TDefaultTermSymbols.GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; begin if fLine[Run] <> #0 then //: If is not end of line then Inc(Run); //: go to next symbol in fLine tkSynSymbol := self.tkSynSymbol; //: And return DefaultTermSymbol Result := True; //: We found token end; ////////////////////////////////////////////////////////////////////////////// // RRRRRRR UUU UUU LLL EEEEEEE SSSSSS // // R R U U L E S // // RRRRRR U U L EEEEE SSSSSS // // R R U U L L E S // // RRR RR UUUUU LLLLLLL EEEEEEE SSSSSS // ////////////////////////////////////////////////////////////////////////////// //==== TSynKeyList =========================================================== constructor TSynKeyList.Create(st: string); begin inherited Create; KeyList := TStringList.Create; KeyList.Text := st; end; destructor TSynKeyList.Destroy; begin KeyList.Free; inherited; end; //==== TSynSet ========================================================= constructor TSynSet.Create(aSymbSet: TSymbSet = []); begin inherited Create; SymbSet := aSymbSet; end; destructor TSynSet.Destroy; begin inherited; end; //==== TSynRangeRule ========================================================= constructor TSynRangeRule.Create(OpenSymbs: string = ''; CloseSymbs: string = ''); begin fOpenSymbol := TSynSymbol.Create(OpenSymbs, nil); fCloseSymbol := TSynSymbol.Create(CloseSymbs, nil); end; destructor TSynRangeRule.Destroy(); begin fOpenSymbol.Free(); fCloseSymbol.Free(); end; //==== TSynRange ============================================================= constructor TSynRange.Create(OpenSymbs: string; CloseSymbs: string); begin inherited Create; OpenCount := 0; fRule := TSynRangeRule.Create(OpenSymbs, CloseSymbs); fRule.fOpenSymbol.StartType := stAny; fRule.fOpenSymbol.BrakeType := btAny; fRule.fCloseSymbol.StartType := stAny; fRule.fCloseSymbol.BrakeType := btAny; FillChar(SymbolList, sizeof(SymbolList), 0); SetCaseSensitive(False); fPrepared := False; fRule.fCloseOnTerm := False; fRule.fCloseOnEol := False; fSynKeyLists := TList.Create; fSynSets := TList.Create; fSynSymbols := TList.Create; fSynRanges := TList.Create; fSynRangeLinks := TList.Create; fTermSymbols := DefaultTermSymbols; end; destructor TSynRange.Destroy; //: Destructor of TSynRange begin //# Reset; ??? fRule.Free(); { if Assigned(fRule.fOpenSymbol) then fRule.fOpenSymbol.Free; if Assigned(fRule.fCloseSymbol) then fRule.fCloseSymbol.Free;} FreeList(fSynKeyLists); FreeList(fSynSets); FreeList(fSynSymbols); FreeList(fSynRanges); FreeList(fSynRangeLinks); inherited; end; //=== Work with fSynSymbols ================================================== procedure TSynRange.AddSynSymbol(NewSymb: TSynSymbol); //: Add SynSymbol to the list fSynSymbols. If SynSymbol already exist in list //: then remove it and add to the end of the list //: ??? Может надо если существет не добавлять??? var SynSym: TSynSymbol; begin SynSym := FindSymbol(NewSymb.Symbol); if SynSym <> nil then begin fSynSymbols.Remove(SynSym); SynSym.Free; end; // NewSymb.Order := Order; fSynSymbols.Add(NewSymb); end; function TSynRange.FindSymbol(st: string): TSynSymbol; //: Find SynSymbol (Symbol = st) in the list fSynSymbols var i: integer; begin Result := nil; for i := 0 to fSynSymbols.Count-1 do if TSynSymbol(fSynSymbols.Items[i]).Symbol = st then begin Result := TSynSymbol(fSynSymbols.Items[i]); exit; end; end; //============================================================================ function TSynRange.FindSymbolOwner(Symbol: TSynSymbol): TSynKeyList; //: Find KeyList that contain SynSymbol //> Never used!!! var i, j: integer; begin Result := nil; for i := 0 to fSynKeyLists.Count-1 do if TSynKeyList(fSynKeyLists[i]).KeyList.Find(Symbol.Symbol, j) then begin Result := TSynKeyList(fSynKeyLists[i]); exit; end; end; //=== Adding rules =========================================================== procedure TSynRange.AddRule(NewRule: TSynRule); begin if NewRule is TSynRange then AddRange(NewRule as TSynRange) else if NewRule is TSynKeyList then AddKeyList(NewRule as TSynKeyList) else if NewRule is TSynSet then AddSet(NewRule as TSynSet) else raise Exception.Create('!!!'); end; procedure TSynRange.AddCommonRange(Range: TSynRange); begin fSynRangeLinks.Add(Range); end; procedure TSynRange.AddRangeLink(NewRangeLink: TSynRangeLink); begin fSynRangeLinks.Add(NewRangeLink); end; function TSynRange.AddRangeLink(aRange: TSynRange; aName: string; aColor: TColor): TSynRangeLink; begin Result := TSynRangeLink.Create(aRange); with Result do begin Name := aName; Attribs.Foreground := aColor; Attribs.ParentForeground := False; end; AddRangeLink(Result); end; procedure TSynRange.AddRange(NewRange: TSynRange); begin fSynRanges.Add(NewRange); end; function TSynRange.AddRange(aOpen, aClose, aName: string; aColor: TColor): TSynRange; begin Result := TSynRange.Create(aOpen, aClose); with Result do begin Name := aName; Attribs.Foreground := aColor; Attribs.ParentForeground := False; end; AddRange(Result); end; procedure TSynRange.AddKeyList(NewKeyList: TSynKeyList); begin fSynKeyLists.Add(NewKeyList); end; function TSynRange.AddKeyList(aName: string; aColor: TColor): TSynKeyList; begin Result := TSynKeyList.Create(''); with Result do begin Name := aName; Attribs.Foreground := aColor; Attribs.ParentForeground := False; end; AddKeyList(Result); end; procedure TSynRange.AddSet(NewSet: TSynSet); begin fSynSets.Add(NewSet); end; function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; begin Result := TSynSet.Create(aSymbSet); with Result do begin Name := aName; Attribs.Foreground := aColor; Attribs.ParentForeground := False; end; AddSet(Result); end; //=== Deleting rules ========================================================= procedure TSynRange.DeleteCommonRange(index: integer); begin TSynRangeLink(fCommonSynRanges[index]).Free; fCommonSynRanges.Delete(index); end; procedure TSynRange.DeleteCommonRange(Range: TSynRange); begin fCommonSynRanges.Remove(Range); end; procedure TSynRange.DeleteRangeLink(index: integer); begin TSynRangeLink(fSynRangeLinks[index]).Free; fSynRangeLinks.Delete(index); end; procedure TSynRange.DeleteRangeLink(RangeLink: TSynRangeLink); begin fSynRangeLinks.Remove(RangeLink); RangeLink.Free; end; procedure TSynRange.DeleteRange(Range: TSynRange); begin fSynRanges.Remove(Range); Range.Free; end; procedure TSynRange.DeleteRange(index: integer); begin TSynRange(fSynRanges[index]).Free; fSynRanges.Delete(index); end; procedure TSynRange.DeleteKeyList(KeyList: TSynKeyList); begin fSynKeyLists.Remove(KeyList); KeyList.Free; end; procedure TSynRange.DeleteKeyList(index: integer); begin TSynKeyList(fSynKeyLists[index]).Free; fSynKeyLists.Delete(index); end; procedure TSynRange.DeleteSet(SynSet: TSynSet); begin fSynSets.Remove(SynSet); SynSet.Free; end; procedure TSynRange.DeleteSet(index: integer); begin TSynSet(fSynSets[index]).Free; fSynSets.Delete(index); end; //=== GetCount rules ========================================================= function TSynRange.GetSynSymbolCount: Integer; begin Result := fSynSymbols.Count; end; function TSynRange.GetSynRangeLinkCount: Integer; begin Result := fSynRangeLinks.Count; end; function TSynRange.GetCommonSynRangeCount(): Integer; begin Result := fCommonSynRanges.Count; end; function TSynRange.GetSynRangeCount: Integer; begin Result := fSynRanges.Count; end; function TSynRange.GetSynKeyListCount: Integer; begin Result := fSynKeyLists.Count; end; function TSynRange.GetSynSetCount: Integer; begin Result := fSynSets.Count; end; //=== GetRule from list ====================================================== function TSynRange.GetSynSymbol(Index: Integer): TSynSymbol; begin Result := TSynSymbol(fSynSymbols[Index]); end; function TSynRange.GetCommonSynRange(Index: Integer): TSynRange; begin Result := TSynRange(fCommonSynRanges[Index]); end; function TSynRange.GetSynRangeLink(Index: Integer): TSynRangeLink; begin Result := TSynRangeLink(fSynRangeLinks[Index]); end; function TSynRange.GetSynRange(Index: Integer): TSynRange; begin Result := TSynRange(fSynRanges[Index]); end; function TSynRange.GetSynKeyList(Index: Integer): TSynKeyList; begin Result := TSynKeyList(fSynKeyLists[Index]); end; function TSynRange.GetSynSet(Index: Integer): TSynSet; begin Result := TSynSet(fSynSets[Index]); end; //=== SetDelimiters ========================================================== procedure TSynRange.SetDelimiters(Delimiters: TSymbSet); var i: integer; begin TermSymbols := Delimiters; for i := 0 to RangeCount-1 do Ranges[i].SetDelimiters(Delimiters); end; (* procedure TSynRange.SetStyles(aStyles: TSynUniStyles); //var // i: integer; begin { Styles := aStyles; for i := 0 to RangeCount-1 do Ranges[i].SetStyles(aStyles);} end; *) //=== Case Sensitive ========================================================= function TSynRange.GetCaseSensitive: boolean; //: Return CaseSensitive begin Result := FCaseSensitive; end; procedure TSynRange.SetCaseSensitive(const Value: boolean); //: Set CaseSensitive begin fCaseSensitive := Value; if not Value then begin CaseFunct := UpCase; StringCaseFunct := UpperCase; end else begin CaseFunct := CaseNone; StringCaseFunct := StringCaseNone; end; end; //=== Prepare rules for parsing ============================================== procedure QuickSortSymbolList(const List: TList; const lowerPos, upperPos: integer); var i, middlePos: integer; pivotValue: string; Begin if lowerPos < upperPos then begin pivotValue := TSynSymbol(List[lowerPos]).Symbol; middlePos := lowerPos; for i := lowerPos + 1 to upperPos do begin if TSynSymbol(List[i]).Symbol < pivotValue then begin inc(middlePos); List.Exchange(i,middlePos); end; end; List.Exchange(lowerPos,middlePos); QuickSortSymbolList(List, lowerPos, middlePos-1); QuickSortSymbolList(List, middlePos+1, upperPos); end; end; procedure TSynRange.ClearParsingFields(); var i: integer; begin OpenCount := 0; for i := 0 to RangeCount-1 do Ranges[i].ClearParsingFields(); end; procedure TSynRange.ResetParents(aParent: TSynRange); var i: integer; begin Parent := aParent; for i := 0 to RangeCount-1 do Ranges[i].ResetParents(Self); end; procedure TSynRange.Prepare(Owner: TSynRange); //: This procedure prepare Range for parsing //: Is called only from SetLine var i, j, Len: integer; SynSymbol: TSynSymbol; s: string; FirstChar: char; BrakeType: TSymbBrakeType; function SafeInsertSymbol(Symb: TSynSymbol; Rules: TSynRange; Attribs: TSynHighlighterAttributes): TSynSymbol; //: This function add Symb to SynRange, if and only if there is no it there //: Return added or found element begin Result := Rules.FindSymbol(Symb.Symbol); //: Find Symb in Rules if Result = nil then begin //: If Symb not found, then add Symb to Rules Result := TSynSymbol.Create(Symb.Symbol, Symb.Attributes); Result.StartType := Symb.StartType; Result.BrakeType := Symb.BrakeType; Result.StartLine := Symb.StartLine; Rules.AddSynSymbol(Result); end; if Result.Attributes = nil then //: If attributes of SynSymbol not setted Result.Attributes := Attribs; //: then set them to Attribs end; function InsertSymbol(Symb: TSynSymbol; Rules: TSynRange): TSynSymbol; begin Result := Rules.FindSymbol(Symb.Symbol); if Result = nil then begin Result := TSynSymbol.Create(Symb.Symbol, Symb.Attributes); Result.BrakeType := Symb.BrakeType; Rules.AddSynSymbol(Result); end; Result.Attributes := Symb.Attributes; end; var Range: TSynRange; RangeLink: TSynRangeLink; begin Reset; //: If already prepared then reset it! fOwner := Owner; OpenCount := 0; fDefaultSynSymbol := TSynSymbol.Create('', Attribs); fDefaultTermSymbol := TDefaultTermSymbols.Create(TSynSymbol.Create('', Attribs)); fDefaultSymbols := TDefaultSymbols.Create(TSynSymbol.Create('', Attribs)); fTermSymbols := fTermSymbols+AbsoluteTermSymbols; if Enabled then begin //Add all keywords to list fSynSymbols: for i := 0 to fSynKeyLists.Count-1 do //: All KeyLists if TSynKeyList(fSynKeyLists[i]).Enabled then for j := 0 to TSynKeyList(fSynKeyLists[i]).KeyList.Count-1 do begin//: All keywords in KeyLists //: Add current keyword to list fSynSymbols: InsertSymbol{AddSymbol}(TSynSymbol.Create(TSynKeyList(fSynKeyLists[i]).KeyList[j], TSynKeyList(fSynKeyLists[i]).Attribs), self); end; //Assign range opening and closing symbols and Prepare range rules. for i := 0 to fSynRanges.Count-1 do begin Range := TSynRange(fSynRanges[i]); if Range.Enabled then begin //Assign range opening symbol SynSymbol := SafeInsertSymbol(Range.fRule.fOpenSymbol, Self, Range.Attribs); SynSymbol.fOpenRule := Range; //Assing range closing symbols SynSymbol := SafeInsertSymbol(Range.fRule.fCloseSymbol, Range, Range.Attribs); Range.fClosingSymbol := SynSymbol; Range.Prepare(Self); end; end; for i := 0 to fSynRangeLinks.Count-1 do begin RangeLink := TSynRangeLink(fSynRangeLinks[i]); Range := RangeLink.Range; if RangeLink.Enabled then begin //Assign range opening symbol SynSymbol := SafeInsertSymbol(Range.fRule.fOpenSymbol, Self, Range.Attribs); SynSymbol.fOpenRule := RangeLink; RangeLink.Parent := Self; //Assing range closing symbols // SynSymbol := SafeInsertSymbol(Range.fRule.fCloseSymbol, Range, Range.Attribs.Std); // Range.fClosingSymbol := SynSymbol; // Range.Prepare(Self); end; end; //Build tokens table QuickSortSymbolList(fSynSymbols, 0, fSynSymbols.Count-1); //: Sort fSynSymbols for i := 0 to fSynSymbols.Count-1 do begin //: run all SynSymbols SynSymbol := TSynSymbol(fSynSymbols[i]); //: SynSymbol - next SymSymbol Len := Length(SynSymbol.Symbol); if Len < 1 then //: If length equal zero continue; //: then next SynSymbol s := SynSymbol.Symbol; //: String of SynSymbol FirstChar := s[1]; //: First symbol of string of SynSymbol if SynSymbol.BrakeType <> btUnspecified then //: If BrakeType defined then BrakeType := SynSymbol.BrakeType //: Write this BreakType to local variable else //: Else (if BrakeType not defined) if s[Len] in fTermSymbols then //: If last symbol is TermSymbol BrakeType := btAny //: Write to BreakType: btAny else //: Else BrakeType := btTerm; //: Write to BreakType: btTerm if SymbolList[CaseFunct(FirstChar)] = nil then //: If in SymbolList on FirstChar there is no nothing begin if Len = 1 then //: If length of string of SynSymbol equal 1 //: then write SynSymbol in this element of SimbolList SymbolList[CaseFunct(FirstChar)] := TSymbols.Create(FirstChar, SynSymbol, BrakeType) else begin //: Else (length of SynSymbol greate then 1) //: Write fDefaultSynSymbol (???) to this element | FirstChar SymbolList[CaseFunct(FirstChar)] := TSymbols.Create(FirstChar, fDefaultSynSymbol, BrakeType); //: and add SynSymbol to this element | All but without FirstChar TSymbols(SymbolList[CaseFunct(FirstChar)]).AddSymbol(StringCaseFunct(copy(s, 2, Len-1)), SynSymbol, BrakeType); end; end else begin //: Else (if in SynSymbol exist something) if Len = 1 then else //: If length of string SynSymbol greate then 1 //: Add SynSymbol to this element | All but without FirstChar TSymbols(SymbolList[CaseFunct(FirstChar)]).AddSymbol(StringCaseFunct(copy(s, 2, Len-1)), SynSymbol, BrakeType); end; end; {begin} if fSynSets.Count > 0 then for i := 0 to 255 do for j := 0 to fSynSets.Count-1 do begin if TSynSet(fSynSets[j]).Enabled and (char(i) in TSynSet(fSynSets[j]).SymbSet) then if SymbolList[CaseFunct(char(i))] = nil then SymbolList[CaseFunct(char(i))] := TSymbols.Create(TSynSet(fSynSets[j])) else TSymbols(SymbolList[CaseFunct(char(i))]).AddSet(TSynSet(fSynSets[j])); end; // SymbolList[char(i)] := fSetSymbols; // TSetSymbols(SymbolList[char(i)]).AddSetfSetSymbols; {end} end; //Fill remaining table for i := 0 to 255 do if SymbolList[char(i)] = nil then begin if char(i) in fTermSymbols then SymbolList[char(i)] := fDefaultTermSymbol else SymbolList[char(i)] := fDefaultSymbols; end; fPrepared := true; end; procedure TSynRange.Reset; //: Clear some properties of SynRange, //: вызывается при очистке Clear, а также при Подготовке SynRang'a (Prepare) //: Ресетится только если SynRange был уже подготовлен! var i: integer; begin if not fPrepared then exit; fDefaultSynSymbol.Free; fDefaultTermSymbol.Free; fDefaultSymbols.Free; for i := 0 to 255 do SymbolList[char(i)] := nil; //maybe need to free??? for i := 0 to fSynRanges.Count-1 do TSynRange( fSynRanges[i] ).Reset; ClearList(fSynSymbols); fPrepared := False; end; procedure TSynRange.Clear; //: Clear primary properties of SynRang, call in creating new rools var i: integer; begin //!!!!!!!!!!!!!!!!!!!!!! Нужно еще очищать или удалять OpenSymbol и CloseSymbol !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Reset; //: Reser Range (clear some properties) for i := 0 to fSynRanges.Count-1 do //: Clear all sub-ranges TSynRange(fSynRanges[i]).Clear; ClearList(fSynRanges); ClearList(fSynSymbols); ClearList(fSynKeyLists); ClearList(fSynSets); end; function TSynRange.FindRange(const Name: string): TSynRange; Var I: integer; begin Result := nil; if fOwner = nil then Exit; for I := 0 to fOwner.RangeCount - 1 do if SameText(Name, fOwner.Ranges[I].Name) then begin Result := fOwner.Ranges[I]; Exit; end; end; procedure TSynRange.SetColorForChilds; var i: integer; begin for i := 0 to RangeCount-1 do begin if Ranges[i].Attribs.ParentForeground then begin Ranges[i].Attribs.Foreground := Attribs.Foreground; Ranges[i].Attribs.OldColorForeground := Attribs.Foreground; end; if Ranges[i].Attribs.ParentBackground then begin Ranges[i].Attribs.Background := Attribs.Background; Ranges[i].Attribs.OldColorBackground := Attribs.Background; end; Ranges[i].SetColorForChilds; end; for i := 0 to KeyListCount-1 do begin if KeyLists[i].Attribs.ParentForeground then KeyLists[i].Attribs.Foreground := Attribs.Foreground; if KeyLists[i].Attribs.ParentBackground then KeyLists[i].Attribs.Background := Attribs.Background; end; for i := 0 to SetCount-1 do begin if Sets[i].Attribs.ParentForeground then Sets[i].Attribs.Foreground := Attribs.Foreground; if Sets[i].Attribs.ParentBackground then Sets[i].Attribs.Background := Attribs.Background; end; end; //==== TSynRangeLink ========================================================= constructor TSynRangeLink.Create(aRange: TSynRange); begin inherited Create; Range := aRange; Parent := nil; end; ////////////////////////////////////////////////////////////////////////////// // LLL OOOOO AAAAA DDDDDD IIIII NN N GGGGGG // // L O O A A D D I NNN N G // // L O O AAAAAAA D D I N NNN N G GGG // // L L O O A A D D I N NNN G G // // LLLLLLL OOOOO A A DDDDDD IIIII N NN GGGGGG // ////////////////////////////////////////////////////////////////////////////// procedure TSynKeyList.LoadFromXml(xml: TDOMNode); var I, J: Integer; ChildNode: TDOMNode; Key, Value, LowValue: string; // OldAttribs: {TSynHighlighter}TSynAttributes; begin if xml = nil then Exit; if not SameText(xml.NodeName, 'Keywords') then xml:= xml.FindNode('Keywords'); if xml = nil then raise Exception.Create(ClassName + '.LoadFromXml - no keywords to load!'); for I := 0 to Int32(xml.Attributes.Length) - 1 do begin Key := xml.Attributes[I].NodeName; Value := xml.Attributes[I].NodeValue; LowValue := LowerCase(Value); if SameText('Name', Key) then Name := Value else if SameText('Enabled', Key) then Enabled := (LowValue = 'true') else if SameText('Attributes', Key) then Attribs.LoadFromString(Value) else if SameText('Style', Key) then begin Style := Value; if Styles <> nil then //begin // OldAttribs := Attribs; Attribs := Styles.GetStyleDef(Value, Attribs); // if OldAttribs <> Attribs then // Attribs.UseStyle := True; { if (Attribs = DefaultAttr) or (Attribs = nil) then Attribs := DefaultAttri;} // end; end else // Attribs := fStyles.GetStyleDef(getAttrValue('style', xml), defaultattr); end; KeyList.BeginUpdate; KeyList.Clear; try for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText('Word', ChildNode.NodeName) then if (ChildNode.Attributes.Length > 0) and SameText('Value', ChildNode.Attributes[0].NodeName) then KeyList.Add(ChildNode.Attributes[0].NodeValue); end; finally KeyList.EndUpdate; end; end; procedure TSynSet.LoadFromXml(xml: TDOMNode); var i: integer; Key, Value, LowValue: string; // OldAttribs: {TSynHighlighter}TSynAttributes; begin if xml = nil then Exit; if not SameText(xml.NodeName, 'Set') then xml:= xml.FindNode('Set'); if xml = nil then raise Exception.Create(ClassName + '.LoadFromXml - no set to load!'); for i := 0 to Int32(xml.Attributes.Length) - 1 do begin Key := xml.Attributes[i].NodeName; Value := xml.Attributes[i].NodeValue; LowValue := LowerCase(Value); {ind := 0;} if SameText('Name', Key) then Name := Value else if SameText('Enabled', Key) then Enabled := (LowValue = 'true') else if SameText('Attributes', Key) then Attribs.LoadFromString(Value) else if SameText('Style', Key) then begin Style := Value; if Styles <> nil then //begin // OldAttribs := Attribs; Attribs := Styles.GetStyleDef(Value, Attribs); // if OldAttribs <> Attribs then // Attribs.UseStyle := True; { if (Attribs = DefaultAttr) or (Attribs = nil) then Attribs := DefaultAttri;} // end; end else if SameText('Symbols', Key) then SymbSet := StrToSet(Value) // Attribs := fStyles.GetStyleDef(getAttrValue('style', xml), defaultattr); end; end; procedure TSynRange.LoadFromXml(xml: TDOMNode); var I, J: Integer; ChildNode: TDOMNode; NewSynRange: TSynRange; NewSynKeyList: TSynKeyList; NewSynSet: TSynSet; Key, Value, LowValue: string; // OldAttribs: {TSynHighlighter}TSynAttributes; begin if xml = nil then Exit; if not SameText(xml.NodeName, 'Range') then xml:= xml.FindNode('Range'); if xml = nil then raise Exception.Create(ClassName + '.LoadFromXml - no range to load!'); // Clear; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Вставить нормальный Clear в KeyList и SynSet !!!!!!!!!!!!!!!!!! Enabled := True; CaseSensitive := False; for i := 0 to Int32(xml.Attributes.Length) - 1 do begin Key := xml.Attributes[i].NodeName; Value := xml.Attributes[i].NodeValue; LowValue := LowerCase(Value); if SameText('Name', Key) then Name := Value else if SameText('Enabled', Key) then Enabled := (LowValue = 'true') else if SameText('Attributes', Key) then Attribs.LoadFromString(Value) else if SameText('Style', Key) then begin Style := Value; if Styles <> nil then //begin // OldAttribs := Attribs; Attribs := Styles.GetStyleDef(Value, Attribs); // if OldAttribs <> Attribs then // Attribs.UseStyle := True; { if (Attribs = DefaultAttr) or (Attribs = nil) then Attribs := DefaultAttri;} // end; end else if SameText('CaseSensitive', Key) then CaseSensitive := (LowValue = 'true') else if SameText('Delimiters', Key) then // if SameText(GetAttrValue('spaces', xml), 'true') then // TermSymbols := String2Set(xml.CurContent) + [#32, #9, #13, #10] else TermSymbols := StrToSet(Value) // CloseOnTerm := true; end; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText('Rule', ChildNode.NodeName) then for i := 0 to Int32(ChildNode.Attributes.Length) - 1 do begin Key := ChildNode.Attributes[i].NodeName; Value := ChildNode.Attributes[i].NodeValue; LowValue := LowerCase(Value); if SameText('Enabled', Key) then Enabled := (LowValue = 'true') else if SameText('OpenSymbol', Key) then fRule.fOpenSymbol.Symbol := Value else if SameText('OpenSymbolFinishOnEol', Key) then if LowValue = 'true' then fRule.fOpenSymbol.Symbol := fRule.fOpenSymbol.Symbol + #0 else else if SameText('OpenSymbolStartLine', Key) then with fRule.fOpenSymbol do if LowValue = 'true' then StartLine := slFirst else if LowValue = 'nonspace' then StartLine := slFirstNonSpace else StartLine := slNotFirst else if SameText('OpenSymbolPartOfTerm', Key) then with fRule.fOpenSymbol do if LowValue = 'true' then begin StartType := stAny; BrakeType := btAny; end else if LowValue = 'left' then begin StartType := stAny; BrakeType := btTerm; end else if LowValue = 'right' then begin StartType := stTerm; BrakeType := btAny; end else begin StartType := stTerm; BrakeType := btTerm; end else if SameText('CloseSymbol', Key) then fRule.fCloseSymbol.Symbol := Value else if SameText('CloseSymbolFinishOnEol', Key) then if LowValue = 'true' then fRule.fCloseSymbol.Symbol := fRule.fCloseSymbol.Symbol + #0 else else if SameText('CloseSymbolStartLine', Key) then with fRule.fCloseSymbol do if LowValue = 'true' then StartLine := slFirst else if LowValue = 'nonspace' then StartLine := slFirstNonSpace else StartLine := slNotFirst else if SameText('CloseSymbolPartOfTerm', Key) then with fRule.fCloseSymbol do if LowValue = 'true' then begin StartType := stAny; BrakeType := btAny; end else if LowValue = 'left' then begin StartType := stAny; BrakeType := btTerm; end else if LowValue = 'right' then begin StartType := stTerm; BrakeType := btAny; end else begin StartType := stTerm; BrakeType := btTerm; end else if SameText('CloseOnTerm', Key) then fRule.fCloseOnTerm := (LowValue = 'true') else if SameText('CloseOnEol', Key) then fRule.fCloseOnEol := (LowValue = 'true') else if SameText('AllowPredClose', Key) then fRule.fAllowPredClose := (LowValue = 'true') else end else if SameText('Range', ChildNode.NodeName) then begin NewSynRange := TSynRange.Create; NewSynRange.Styles := Styles; AddRange(NewSynRange); NewSynRange.LoadFromXml(ChildNode); end else if SameText('Keywords', ChildNode.NodeName) then begin NewSynKeyList := TSynKeyList.Create; NewSynKeyList.Styles := Styles; AddKeyList(NewSynKeyList); NewSynKeyList.LoadFromXml(ChildNode); end else if SameText('Set', ChildNode.NodeName) then begin NewSynSet := TSynSet.Create; NewSynSet.Styles := Styles; AddSet(NewSynSet); NewSynSet.LoadFromXml(ChildNode); end { else if SameText(xml.CurName, 'TextStyle') then begin DefaultAttri := fStyles.getStyleDef(xml.CurContent, defaultAttr); if (NumberAttri = DefaultAttr) or (NumberAttri = nil) then NumberAttri := DefaultAttri; end else if SameText(xml.CurName, 'NumberStyle') then NumberAttri := fStyles.getStyleDef(xml.CurContent, defaultAttr);} end; end; ////////////////////////////////////////////////////////////////////////////// // SSSSSS AAAAAA V V IIIII NN N GGGGGGG // // S A A V V I NNN N G // // SSSSS AAAAAAAA VV VV I N NNN N G GGG // // S A A VV VV I N NNN G G // // SSSSSS A A V IIIII N NN GGGGGGG // ////////////////////////////////////////////////////////////////////////////// procedure TSynKeyList.SaveToStream(StreamWriter: TStreamWriter; Ind: integer); var i: integer; begin with StreamWriter do begin WriteTag(Ind, 'Keywords'); WriteParam('Name', Name); WriteBoolParam('Enabled', Enabled, True); Attribs.SaveToStream(StreamWriter); WriteParam('Style', Style); WriteString(CloseStartTag + EOL); for i := 0 to KeyList.Count-1 do begin WriteTag(Ind+2, 'Word'); WriteParam('Value', KeyList[i], CloseEmptyTag); end; WriteTag(Ind, '/Keywords', True); end; end; procedure TSynSet.SaveToStream(StreamWriter: TStreamWriter; Ind: integer); begin with StreamWriter do begin WriteTag(Ind, 'Set'); WriteParam('Name', Name); WriteBoolParam('Enabled', Enabled, True); Attribs.SaveToStream(StreamWriter); WriteParam('Style', Style); WriteParam('Symbols', SetToStr(SymbSet), CloseEmptyTag); { if S.StartType = stAny then if S.BrakeType = btAny then InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'True') else InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'Left') else if S.BrakeType = btAny then InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'Right') else InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'False');} end; end; procedure TSynRange.SaveToStream(StreamWriter: TStreamWriter; Ind: integer); var i: integer; begin with StreamWriter do begin WriteTag(Ind, 'Range'); WriteParam('Name', Name); WriteBoolParam('Enabled', Enabled, True); Attribs.SaveToStream(StreamWriter); WriteParam('Style', Style); WriteBoolParam('CaseSensitive', CaseSensitive, False); WriteString(EOL + Indent(Ind + Length('<Range'))); WriteParam('Delimiters', SetToStr(TermSymbols), CloseStartTag); for i := 0 to 0 do begin WriteTag(Ind+2, 'Rule'); with fRule.fOpenSymbol do begin if Length(Symbol) > 0 then if Symbol[Length(Symbol)] = #0 then begin WriteParam('OpenSymbol', copy(Symbol, 1, Length(Symbol) - 1)); WriteParam('OpenSymbolFinishOnEol', 'True'); end else begin WriteParam('OpenSymbol', Symbol); {WriteParam('OpenSymbolFinishOnEol', 'False');} end; if StartLine = slFirst then WriteParam('OpenSymbolStartLine', 'True') else if StartLine = slFirstNonSpace then WriteParam('OpenSymbolStartLine', 'NonSpace'); //else WriteParam('OpenSymbolStartLine', 'False'); if StartType = stAny then if BrakeType = btAny then //WriteParam('OpenSymbolPartOfTerm', 'True') else WriteParam('OpenSymbolPartOfTerm', 'Left') else if BrakeType = btAny then WriteParam('OpenSymbolPartOfTerm', 'Right') else WriteParam('OpenSymbolPartOfTerm', 'False'); end; with fRule.fCloseSymbol do begin if Length(Symbol) > 0 then if Symbol[Length(Symbol)] = #0 then begin WriteParam('CloseSymbol', copy(Symbol, 1, Length(Symbol) - 1)); WriteParam('CloseSymbolFinishOnEol', 'True'); end else begin WriteParam('CloseSymbol', Symbol); {WriteParam('CloseSymbolFinishOnEol', 'False');} end; if StartLine = slFirst then WriteParam('CloseSymbolStartLine', 'True') else if StartLine = slFirstNonSpace then WriteParam('CloseSymbolStartLine', 'NonSpace'); //else WriteParam('CloseSymbolStartLine', 'False'); if StartType = stAny then if BrakeType = btAny then //WriteParam('CloseSymbolPartOfTerm', 'True') else WriteParam('CloseSymbolPartOfTerm', 'Left') else if BrakeType = btAny then WriteParam('CloseSymbolPartOfTerm', 'Right') else WriteParam('CloseSymbolPartOfTerm', 'False'); end; WriteBoolParam('CloseOnTerm', fRule.fCloseOnTerm, False); WriteBoolParam('CloseOnEol', fRule.fCloseOnEol, False); WriteBoolParam('AllowPredClose', fRule.fAllowPredClose, False); WriteString(CloseEmptyTag + EOL); end; for i := 0 to KeyListCount-1 do KeyLists[i].SaveToStream(StreamWriter, Ind+2); for i := 0 to SetCount-1 do Sets[i].SaveToStream(StreamWriter, Ind+2); for i := 0 to RangeCount-1 do Ranges[i].SaveToStream(StreamWriter, Ind+2); WriteTag(Ind, '/Range', True); end; end; function ReadValue(ANode: TDOMNode): String; begin if Assigned(ANode.FirstChild) then Result:= ANode.FirstChild.NodeValue else Result:= EmptyStr; end; function Verify(tag: string; xml: TDOMNode): boolean; overload; begin Result := SameText(xml.NodeName, tag); end; procedure LoadAttri(curRule: TSynRule; xml: TDOMNode); var J: Integer; ChildNode: TDOMNode; begin // inc(CurRule.ind); CurRule.Attribs{ByIndex[0]}.ParentForeground := False; CurRule.Attribs{ByIndex[0]}.ParentBackground := False; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if Verify('Back',ChildNode) then begin CurRule.Attribs.Background := StrToIntDef(ReadValue(ChildNode), $FFFFFF); CurRule.Attribs.OldColorBackground := CurRule.Attribs.Background; end else if Verify('Fore',ChildNode) then begin CurRule.Attribs.Foreground := StrToIntDef(ReadValue(ChildNode), 0); CurRule.Attribs.OldColorForeground := CurRule.Attribs.Foreground; end else if Verify('Style',ChildNode) then CurRule.Attribs.Style := StrToFontStyle(ReadValue(ChildNode)) else if Verify('ParentForeground',ChildNode) then CurRule.Attribs.ParentForeground := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('ParentBackground',ChildNode) then CurRule.Attribs.ParentBackground := LowerCase(ReadValue(ChildNode)) = 'true'; end; end; procedure TSynKeyList.LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); var J: Integer; ChildNode: TDOMNode; TempSchIndex: integer; begin // if curKw = nil then Exit; if xml = nil then Exit; if ( SameText('KW'{'Keywords'}, xml.NodeName) ) then begin if xml.Attributes.Length > 0 then Name := xml.Attributes[0].NodeValue // Attribs := fStyles.GetStyleDef(getAttrValue('style', xml), defaultattr); end else raise Exception.Create(ClassName + '.LoadFromXml - no keywords to load!'); // ClearAttributes(); // for i := 0 to SchCount-1 do // AddAttribute(); // ind := -1; TempSchIndex := SchIndex; KeyList.BeginUpdate; KeyList.Clear; try for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText(ChildNode.NodeName, 'Attri') or SameText(ChildNode.NodeName, 'Def') then begin if TempSchIndex >= 0 then LoadAttri(self, ChildNode); dec(TempSchIndex); end else if Verify('Enabled',ChildNode) then Enabled := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('W',ChildNode) then begin KeyList.Add(ReadValue(ChildNode)); end; end; finally ind := SchIndex; KeyList.EndUpdate; end; end; procedure TSynSet.LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); var J: Integer; ChildNode: TDOMNode; TempSchIndex: integer; begin // if curSet = nil then Exit; if xml = nil then Exit; if ( SameText('Set', xml.NodeName) ) then begin if xml.Attributes.Length > 0 then Name := xml.Attributes[0].NodeValue // Attribs := fStyles.GetStyleDef(getAttrValue('style', xml), defaultattr); end else raise Exception.Create(ClassName + '.LoadFromXml - no set to load!'); { ClearAttributes(); for i := 0 to SchCount-1 do AddAttribute(); ind := -1;} TempSchIndex := SchIndex; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText(ChildNode.NodeName, 'Attri') or SameText(ChildNode.NodeName, 'Def') then begin if TempSchIndex >= 0 then LoadAttri(self, ChildNode); dec(TempSchIndex); end else if Verify('Enabled',ChildNode) then Enabled := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('S',ChildNode) then SymbSet := StrToSet(ReadValue(ChildNode)); end; ind := SchIndex; end; procedure TSynRange.LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer); var NewSynRange: TSynRange; NewSynKeyList: TSynKeyList; NewSynSet: TSynSet; S: string; TempSchIndex: integer; J: Integer; ChildNode: TDOMNode; begin fRule.fOpenSymbol.BrakeType := btAny; if SameText(xml.NodeName, 'Range') then begin if xml.Attributes.Length > 0 then S:= xml.Attributes[0].NodeValue; if S <> '' then Name := S; end else raise Exception.Create(ClassName + '.LoadFromXml - no range to load!'); { ClearAttributes(); for i := 0 to SchCount-1 do AddAttribute(); ind := -1;} TempSchIndex := SchIndex; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if Verify('Enabled', ChildNode) then Enabled := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('CaseSensitive', ChildNode) then CaseSensitive := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('OpenSymbol', ChildNode) then fRule.fOpenSymbol.Symbol := ReadValue(ChildNode) else if Verify('CloseSymbol', ChildNode) then fRule.fCloseSymbol.Symbol := ReadValue(ChildNode) else if Verify('OpenSymbolFinishOnEol', ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then fRule.fOpenSymbol.Symbol := fRule.fOpenSymbol.Symbol + #0 else else if Verify('CloseSymbolFinishOnEol',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then fRule.fCloseSymbol.Symbol := fRule.fCloseSymbol.Symbol + #0 else else if Verify('CloseOnTerm',ChildNode) then fRule.fCloseOnTerm := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('CloseOnEol',ChildNode) then fRule.fCloseOnEol := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('AllowPredClose',ChildNode) then fRule.fAllowPredClose := LowerCase(ReadValue(ChildNode)) = 'true' else if Verify('OpenSymbolStartLine',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then fRule.fOpenSymbol.StartLine := slFirst else if LowerCase(ReadValue(ChildNode)) = 'nonspace' then fRule.fOpenSymbol.StartLine := slFirstNonSpace else fRule.fOpenSymbol.StartLine := slNotFirst else if Verify('CloseSymbolStartLine',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then fRule.fCloseSymbol.StartLine := slFirst else if LowerCase(ReadValue(ChildNode)) = 'nonspace' then fRule.fCloseSymbol.StartLine := slFirstNonSpace else fRule.fCloseSymbol.StartLine := slNotFirst else if Verify('AnyTerm',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then fRule.fOpenSymbol.BrakeType := btAny else fRule.fOpenSymbol.BrakeType := btTerm // if StrToBoolDef(ReadValue(ChildNode), false) then // fRule.fOpenSymbol.BrakeType := btTerm; else if Verify('OpenSymbolPartOfTerm',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then begin fRule.fOpenSymbol.StartType := stAny; fRule.fOpenSymbol.BrakeType := btAny; end else if LowerCase(ReadValue(ChildNode)) = 'left' then begin fRule.fOpenSymbol.StartType := stAny; fRule.fOpenSymbol.BrakeType := btTerm; end else if LowerCase(ReadValue(ChildNode)) = 'right' then begin fRule.fOpenSymbol.StartType := stTerm; fRule.fOpenSymbol.BrakeType := btAny; end else begin fRule.fOpenSymbol.StartType := stTerm; fRule.fOpenSymbol.BrakeType := btTerm; end else if Verify('CloseSymbolPartOfTerm',ChildNode) then if LowerCase(ReadValue(ChildNode)) = 'true' then begin fRule.fCloseSymbol.StartType := stAny; fRule.fCloseSymbol.BrakeType := btAny; end else if LowerCase(ReadValue(ChildNode)) = 'left' then begin fRule.fCloseSymbol.StartType := stAny; fRule.fCloseSymbol.BrakeType := btTerm; end else if LowerCase(ReadValue(ChildNode)) = 'right' then begin fRule.fCloseSymbol.StartType := stTerm; fRule.fCloseSymbol.BrakeType := btAny; end else begin fRule.fCloseSymbol.StartType := stTerm; fRule.fCloseSymbol.BrakeType := btTerm; end else if Verify('DelimiterChars',ChildNode) then // if SameText(GetAttrValue('spaces', xml), 'true') then // TermSymbols := String2Set(ReadValue(ChildNode)) + [#32, #9, #13, #10] // else if Assigned(ChildNode.FirstChild) then TermSymbols := StrToSet(ReadValue(ChildNode)) else // CloseOnTerm := true; else { else if SameText(xml.CurName, 'TextStyle') then begin DefaultAttri := fStyles.getStyleDef(ReadValue(ChildNode), defaultAttr); if (NumberAttri = DefaultAttr) or (NumberAttri = nil) then NumberAttri := DefaultAttri; end else if SameText(xml.CurName, 'NumberStyle') then NumberAttri := fStyles.getStyleDef(ReadValue(ChildNode), defaultAttr);} if SameText(ChildNode.NodeName, 'Attri') or SameText(ChildNode.NodeName, 'Def') then begin if TempSchIndex >= 0 then LoadAttri(self, ChildNode); dec(TempSchIndex); end else if SameText(ChildNode.NodeName, 'Range') then begin NewSynRange := TSynRange.Create; AddRange(NewSynRange); NewSynRange.LoadHglFromXml(ChildNode, SchCount, SchIndex); end else if SameText(ChildNode.NodeName, 'KW') then begin NewSynKeyList := TSynKeyList.Create; AddKeyList(NewSynKeyList); NewSynKeyList.LoadHglFromXml(ChildNode, SchCount, SchIndex); end else if SameText(ChildNode.NodeName, 'Set') then begin NewSynSet := TSynSet.Create; AddSet(NewSynSet); NewSynSet.LoadHglFromXml(ChildNode, SchCount, SchIndex); end; end; ind := SchIndex; end; procedure TSynRange.LoadHglFromStream(aSrc: TStream); var I, J: Integer; xml: TXMLDocument = nil; SchCount, SchIndex: integer; ChildNode, ChildNode2: TDOMNode; begin try SchCount := 0; SchIndex := -1; ReadXMLFile(xml, aSrc); for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if Verify('SchemeIndex', ChildNode) then SchIndex := StrToInt(ReadValue(ChildNode)) else if Verify('Schemes', ChildNode) then begin for I:= 0 to Int32(ChildNode.ChildNodes.Count) - 1 do begin ChildNode2:= ChildNode.ChildNodes.Item[I]; if Verify('S', ChildNode2) then inc(SchCount); end end else if SameText(ChildNode.NodeName, 'Range') then LoadHglFromXml(ChildNode, SchCount, SchIndex); end; finally xml.Free; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/SynUniHighlighter.pas��������������������������0000644�0001750�0000144�00000117227�15104114162�026141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynUniHighlighter.pas, released 2003-01 All Rights Reserved. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. }{ @abstract(Provides a universal highlighter for SynEdit) @authors(Fantasist [walking_in_the_sky@yahoo.com], Vit [nevzorov@yahoo.com], Vitalik [vetal-x@mail.ru]) @created(2003) @lastmod(2004-05-12) } (****************************************************************************** Authors: Fantasist (Kirill Burtsev walking_in_the_sky@yahoo.com) Vit (Vitaly Nevzorov nevzorov@yahoo.com) Vitalik (Vitaly Lyapota vetal-x@mail.ru) Official Site: www.delphist.com With all questions, please visit www.delphist.com/forum ******************************************************************************) unit SynUniHighlighter; {$mode delphi} interface uses SysUtils, Classes, Graphics, SynEditTypes, SynEditHighlighter, SynUniClasses, SynUniRules, Laz2_DOM; Const _Root = 'Root'; _New = 'New'; type { TSynUniSyn } TSynUniSyn = class(TSynCustomHighlighter) private FFileName: String; protected fMainRules: TSynRange; fEol: boolean; fPrEol: boolean; fLine: PChar; fTrueLine: String; fLineNumber: Integer; Run: LongInt; fTokenPos: Integer; fCurrToken: TSynSymbol; fCurrentRule: TSynRange; SymbolList: array[char] of TAbstractSymbol; //??? fPrepared: boolean; fSchemes: TStringList; fSchemeIndex: integer; function GetIdentChars: TSynIdentChars; override; function GetSampleSource: string; override; procedure SetSampleSource(Value: string); override; function GetDefaultFilter: string; override; procedure SetDefaultFilter(Value: string); override; public class function GetLanguageName: string; override; public constructor Create(AOwner: TComponent); overload; override; destructor Destroy; override; function GetHashCode: PtrInt; override; procedure Assign(Source: TPersistent); override; function GetDefaultAttribute(Index: integer): TSynHighlighterAttributes; override; {Abstract} function GetEol: Boolean; override; {Abstract} function GetRange: Pointer; override; function GetToken: string; override; {Abstract} procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override; {Abstract} function GetTokenAttribute: TSynHighlighterAttributes; override; {Abstract} function GetTokenKind: integer; override; {Abstract} function GetTokenPos: Integer; override; {Abstract} function IsKeyword(const AKeyword: string): boolean; override; procedure Next; override; {Abstract} procedure ResetRange; override; procedure SetLine(const NewValue: string; LineNumber: Integer); override; {Abstract} procedure SetRange(Value: Pointer); override; procedure Reset; procedure Clear; procedure Prepare; procedure CreateStandardRules; procedure ReadSchemes(xml: TDOMNode); procedure ReadInfo(xml: TDOMNode); procedure LoadHglFromXml(xml: TDOMNode); procedure LoadHglFromStream(Stream: TStream); procedure LoadHglFromFile(FileName: string); procedure SaveHglToStream(Stream: TStream); procedure SaveHglToFile(FileName: string); procedure LoadFromXml(xml: TDOMNode); procedure LoadFromStream(Stream: TStream; FreeStream: boolean = True); procedure LoadFromFile(FileName: string); function GetAsStream: TMemoryStream; procedure SaveToStream(Stream: TStream; Rule: TSynRule = nil); procedure SaveToFile(FileName: string; Rule: TSynRule = nil); public Info: TSynInfo; Styles: TSynUniStyles; SchemeFileName: string; SchemeName: string; property FileName: String read FFileName; property MainRules: TSynRange read fMainRules; property SchemesList: TStringList read fSchemes write fSchemes; property SchemeIndex: integer read fSchemeIndex write fSchemeIndex; end; implementation uses CRC, Laz2_XMLRead; //==== TSynUniSyn ============================================================ constructor TSynUniSyn.Create(AOwner: TComponent); begin inherited Create(AOwner); Info := TSynInfo.Create; Info.History := TStringList.Create; Info.Sample := TStringList.Create; fPrepared := False; fSchemes := TStringList.Create; fSchemeIndex := -1; fMainRules := TSynRange.Create; MainRules.Name := _Root; fEol := False; fPrEol := False; fCurrentRule := MainRules; end; destructor TSynUniSyn.Destroy; //: Destructor of TSynUniSyn begin MainRules.Free; Info.History.Free; Info.Sample.Free; Info.Free; fSchemes.Free; inherited; end; function TSynUniSyn.GetHashCode: PtrInt; function Update(ACrc: PtrInt; ARule: TSynRule): PtrInt; var Index: Integer; AValue: Cardinal; begin AValue:= Cardinal(ARule.Attribs.GetHashCode); Result:= PtrInt(CRC32(Cardinal(ACrc), @AValue, SizeOf(AValue))); if ARule is TSynRange then begin with TSynRange(ARule) do begin for Index := 0 to SetCount - 1 do Result:= Update(Result, Sets[Index]); for Index := 0 to RangeCount - 1 do Result:= Update(Result, Ranges[Index]); for Index := 0 to KeyListCount - 1 do Result:= Update(Result, KeyLists[Index]); end; end; end; begin Result:= Update(0, MainRules); end; procedure TSynUniSyn.Assign(Source: TPersistent); var AStream: TMemoryStream; begin inherited Assign(Source); if (Source is TSynUniSyn) then begin if GetHashCode <> Source.GetHashCode then begin AStream:= TMemoryStream.Create; try Tag:= -1; TSynUniSyn(Source).SaveToStream(AStream); AStream.Seek(0, soBeginning); LoadFromStream(AStream, False); Self.Info.Version.ReleaseDate:= Now; finally AStream.Free; end; end; end; end; procedure TSynUniSyn.SetLine(const NewValue: string; LineNumber: Integer); //: Set current line in SynEdit for highlighting function HaveNodeAnyStart(Node: TSymbolNode): boolean; var i: integer; begin Result := False; if Node.StartType = stAny then begin Result := True; Exit; end; for i := 0 to Node.NextSymbs.Count-1 do if (Node.NextSymbs.Nodes[i].StartType = stAny) or HaveNodeAnyStart(Node.NextSymbs.Nodes[i]) then begin Result := True; Exit; end end; var i: integer; begin if LineNumber = 1 then begin MainRules.ResetParents(MainRules); MainRules.ClearParsingFields(); end; if not fCurrentRule.Prepared then begin //: If current Range isn't prepared, Prepare; //: then prepare it and its sub-ranges (*{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ !!!!!!! Это я писал и это зачем-то нужно !!!!!!!!!!!!!!!!!!!!!!!!*) for i := 0 to 255 do if (SymbolList[char(i)] <> nil) {temp}and (TSymbols(SymbolList[char(i)]).HeadNode <> nil){/temp} then fCurrentRule.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(SymbolList[fCurrentRule.CaseFunct(char(i))]).HeadNode); (*}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}*) end; fTrueLine := NewValue; fLine := PChar(NewValue); //: Current string of SynEdit Run := 0; //: Set Position of "parser" at the first char of string fTokenPos := 0; //: Set Position of current token at the first char of string fLineNumber := LineNumber; //: Number of current line in SynEdit fEol := False; //: ??? fPrEol := False; //: ??? Next; //: Find first token in the line end; procedure TSynUniSyn.Next; //: Goes to the next token and open/close ranges var ParentCycle, CurrentParent: TSynRange; RangeLink: TSynRangeLink; isFindSame: boolean; begin if fPrEol then //: if it was end of line then begin //: if current range close on end of line then if (fCurrentRule.fRule.fCloseOnEol) or (fCurrentRule.fRule.fCloseOnTerm) then begin if fCurrentRule.OpenCount > 0 then fCurrentRule.OpenCount := fCurrentRule.OpenCount - 1 else if fCurrentRule.ParentBackup <> nil then fCurrentRule.Parent := fCurrentRule.ParentBackup; if fCurrentRule.fRule.fAllowPredClose then begin fCurrentRule := fCurrentRule.Parent; while (fCurrentRule.fRule.fCloseOnEol) or (fCurrentRule.fRule.fCloseOnTerm) do fCurrentRule := fCurrentRule.Parent; end else fCurrentRule := fCurrentRule.Parent; end; fEol := True; //: ??? Exit; end; fTokenPos := Run; //: Start of cf current token is end of previsious //: if current range close on delimeter and current symbol is delimeter then if (fCurrentRule.fRule.fCloseOnTerm) and (fLine[Run] in fCurrentRule.fTermSymbols) then begin if fCurrentRule.OpenCount > 0 then fCurrentRule.OpenCount := fCurrentRule.OpenCount - 1 else if fCurrentRule.ParentBackup <> nil then fCurrentRule.Parent := fCurrentRule.ParentBackup; if fCurrentRule.fRule.fAllowPredClose then begin fCurrentRule := fCurrentRule.Parent; while (fCurrentRule.fRule.fCloseOnTerm) do fCurrentRule := fCurrentRule.Parent; end else fCurrentRule := fCurrentRule.Parent; end; //: if we can't find token from current position: if not fCurrentRule.SymbolList[fCurrentRule.CaseFunct(fLine[Run])].GetToken(fCurrentRule, fLine, Run, fCurrToken) then begin fCurrToken := fCurrentRule.fDefaultSynSymbol; //: Current token is just default symbol while not ((fLine[Run] in fCurrentRule.fTermSymbols) or fCurrentRule.HasNodeAnyStart[fCurrentRule.CaseFunct(fLine[Run])]) do inc(Run); //: goes to the first non-delimeter symbol end else //: else (we find token!) if (fCurrentRule.fClosingSymbol = fCurrToken) then begin //: if current token close current range // if (fCurrentRule.fClosingSymbol <> nil) and (fCurrentRule.fClosingSymbol.Symbol = fCurrToken.Symbol) then if fCurrentRule.OpenCount > 0 then fCurrentRule.OpenCount := fCurrentRule.OpenCount - 1 else if fCurrentRule.ParentBackup <> nil then fCurrentRule.Parent := fCurrentRule.ParentBackup; if fCurrentRule.fRule.fAllowPredClose then begin fCurrentRule := fCurrentRule.Parent; while (fCurrentRule.fClosingSymbol <> nil) and (fCurrentRule.fClosingSymbol.Symbol = fCurrToken.Symbol) do fCurrentRule := fCurrentRule.Parent; end else fCurrentRule := fCurrentRule.Parent end else if fCurrToken.fOpenRule <> nil then begin //: else if current token open range then CurrentParent := fCurrentRule; if fCurrToken.fOpenRule is TSynRangeLink then begin RangeLink := TSynRangeLink(fCurrToken.fOpenRule); fCurrentRule := RangeLink.Range; ParentCycle := CurrentParent; isFindSame := False; while ParentCycle <> nil do begin // Ищем есть ли у тек. правила такой же родитель if ParentCycle = fCurrentRule then begin if RangeLink.Range.OpenCount = 0 then begin // Первое открытие вложенного в себя правила. fCurrentRule.ParentBackup := RangeLink.Range.Parent; fCurrentRule.Parent := CurrentParent; RangeLink.Range.OpenCount := 1; end else begin RangeLink.Range.OpenCount := RangeLink.Range.OpenCount + 1; end; isFindSame := True; break; end; ParentCycle := ParentCycle.Parent; end; if not isFindSame then begin { fCurrentRule.ParentBackup := RangeLink.Range.Parent; fCurrentRule.Parent := CurrentParent; RangeLink.Range.OpenCount := 1; // fCurrentRule.Parent := RangeLink.Parent;} end end else if fCurrToken.fOpenRule is TSynRange then begin fCurrentRule := TSynRange(fCurrToken.fOpenRule); //: open range fCurrentRule.Parent := CurrentParent; end; end; if fLine[Run] = #0 then //: If end of line fPrEol := True; //: ??? end; function TSynUniSyn.IsKeyword(const AKeyword: string): boolean; //! Never used!!!! ??? SSS begin // Result := fSymbols.FindSymbol(aKeyword) <> nil; end; function TSynUniSyn.GetDefaultAttribute(Index: integer): TSynHighlighterAttributes; //: Returns default attribute //: Неопнятно зачем это нужно, но функция предка - абстрактная (может что-нить с ней сделать...) begin case Index of SYN_ATTR_COMMENT: Result := fCurrentRule.Attribs; SYN_ATTR_IDENTIFIER: Result := fCurrentRule.Attribs; SYN_ATTR_KEYWORD: Result := fCurrentRule.Attribs; SYN_ATTR_STRING: Result := fCurrentRule.Attribs; SYN_ATTR_WHITESPACE: Result := fCurrentRule.Attribs; else Result := nil; end; end; function TSynUniSyn.GetEol: Boolean; begin Result := fEol; end; function TSynUniSyn.GetRange: Pointer; //: Returns current Range begin Result := fCurrentRule; end; function TSynUniSyn.GetToken: string; //: Returns current token (string from fTokenPos to Run) var Len: LongInt; begin Len := Run - fTokenPos; Setstring(Result, (fLine + fTokenPos), Len); end; procedure TSynUniSyn.GetTokenEx(out TokenStart: PChar; out TokenLength: integer); begin TokenLength := Run - fTokenPos; TokenStart := PAnsiChar(fTrueLine) + fTokenPos; end; function TSynUniSyn.GetTokenAttribute: TSynHighlighterAttributes; //: Returns attribute of current token begin Result := fCurrToken.Attributes; end; function TSynUniSyn.GetTokenKind: integer; //~ Можно в Kind у токена fCurrToken хранить что это ?: слово или Range или Set begin Result := 1; //# CODE_REVIEW fCurrToken.ID; end; function TSynUniSyn.GetTokenPos: Integer; //: Returns position of current token begin Result := fTokenPos; end; procedure TSynUniSyn.ResetRange; //: Reset current range to MainRules begin fCurrentRule := MainRules; end; procedure TSynUniSyn.SetRange(Value: Pointer); //: Set current range begin fCurrentRule := TSynRange(Value); end; class function TSynUniSyn.GetLanguageName: string; begin Result := 'UniLanguage'; end; procedure TSynUniSyn.Clear; begin MainRules.Clear; Info.Clear; end; procedure TSynUniSyn.CreateStandardRules; //: Create sample rools var r: TSynRange; kw: TSynKeyList; begin self.MainRules.Clear; self.MainRules.Attribs.Foreground := clBlack; self.MainRules.Attribs.Background := clWhite; self.MainRules.CaseSensitive := False; r := TSynRange.Create('''', ''''); r.Name := 'Strings ''..'''; r.Attribs.Foreground := clRed; r.Attribs.Background := clWhite; r.CaseSensitive := False; r.fRule.fOpenSymbol.BrakeType := btAny; self.MainRules.AddRange(r); r := TSynRange.Create('"', '"'); r.Name := 'Strings ".."'; r.Attribs.Foreground := clRed; r.Attribs.Background := clWhite; r.CaseSensitive := False; r.fRule.fOpenSymbol.BrakeType := btAny; self.MainRules.AddRange(r); r := TSynRange.Create('{', '}'); r.Name := 'Remarks {..}'; r.Attribs.Foreground := clNavy; r.Attribs.Background := clWhite; r.CaseSensitive := False; r.fRule.fOpenSymbol.BrakeType := btAny; self.MainRules.AddRange(r); r := TSynRange.Create('(*', '*)'); r.Name := 'Remarks (*..*)'; r.Attribs.Foreground := clNavy; r.Attribs.Background := clWhite; r.CaseSensitive := False; r.fRule.fOpenSymbol.BrakeType := btAny; self.MainRules.AddRange(r); r := TSynRange.Create('/*', '*/'); r.Name := 'Remarks /*..*/'; r.Attribs.Foreground := clNavy; r.Attribs.Background := clWhite; r.CaseSensitive := False; r.fRule.fOpenSymbol.BrakeType := btAny; self.MainRules.AddRange(r); kw := TSynKeyList.Create(''); kw.Name := 'Key words'; kw.Attribs.Foreground := clGreen; kw.Attribs.Background := clWhite; self.MainRules.AddKeyList(kw); end; procedure TSynUniSyn.Prepare; //: Prepare of SynUniSyn is Prepare of SynUniSyn.fMailRules function HaveNodeAnyStart(Node: TSymbolNode): boolean; var i: integer; begin Result := False; if Node.StartType = stAny then begin Result := True; Exit; end; for i := 0 to Node.NextSymbs.Count-1 do if (Node.NextSymbs.Nodes[i].StartType = stAny) or HaveNodeAnyStart(Node.NextSymbs.Nodes[i]) then begin Result := True; Exit; end end; var i: integer; begin MainRules.Prepare(MainRules); // for i := 0 to 255 do // if (MainRules.SymbolList[char(i)] <> MainRules.fDefaultTermSymbol) and (MainRules.SymbolList[char(i)] <> MainRules.fDefaultSymbols) then // MessageBox(0,PChar(TSymbols(MainRules.SymbolList[char(i)]).HeadNode.tkSynSymbol.Symbol),'1',0); for i := 0 to 255 do // if (MainRules.SymbolList[char(i)] <> nil) {temp}and (TSymbols(MainRules.SymbolList[char(i)]).HeadNode <> nil){/temp} then if (MainRules.SymbolList[char(i)] <> MainRules.fDefaultTermSymbol) and (MainRules.SymbolList[char(i)] <> MainRules.fDefaultSymbols) and (TSymbols(MainRules.SymbolList[char(i)]).HeadNode <> nil) then MainRules.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(MainRules.SymbolList[MainRules.CaseFunct(char(i))]).HeadNode); end; procedure TSynUniSyn.Reset; //: Reset of SynUniSyn is Reset of SynUniSyn.MainRules begin MainRules.Reset; end; function TSynUniSyn.GetIdentChars: TSynIdentChars; //: Return IdentChars - hmm... What for ??? word selection? begin Result := [#32..#255] - fCurrentRule.TermSymbols; end; function TSynUniSyn.GetSampleSource: string; //: Get sample text begin Result := Info.Sample.Text; end; procedure TSynUniSyn.SetSampleSource(Value: string); //: Set sample text begin Info.Sample.Text := Value; end; function TSynUniSyn.GetDefaultFilter: string; var S: String; begin Result:= EmptyStr; for S in Info.General.Extensions.Split([' ', ',']) do begin Result+= '*.' + S + ';'; end; if Length(Result) > 0 then Result:= Info.General.Name + '|' + Copy(Result, 1, Length(Result) - 1); end; procedure TSynUniSyn.SetDefaultFilter(Value: string); var S: String; Result: String; begin Result:= EmptyStr; Value:= Copy(Value, Pos('|', Value) + 1, MaxInt); for S in Value.Split([';']) do begin Result+= StringReplace(S, '*.', '', []) + ','; end; if Length(Result) = 0 then Info.General.Extensions:= EmptyStr else Info.General.Extensions:= Copy(Result, 1, Length(Result) - 1); end; procedure TSynUniSyn.LoadFromXml(xml: TDOMNode); var i, J, K: integer; ChildNode1, ChildNode2: TDOMNode; Key, Value: string; begin Clear; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode1:= xml.ChildNodes.Item[J]; if SameText(ChildNode1.NodeName, 'UniHighlighter') then if ChildNode1.Attributes.Length = 0 then begin LoadHglFromXml(ChildNode1); Exit; end else begin for I := 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2:= ChildNode1.ChildNodes.Item[I]; if SameText(ChildNode2.NodeName, 'Info') then Info.LoadFromXml(ChildNode2) else if SameText(ChildNode2.NodeName, 'Scheme') then begin SchemeFileName := ''; SchemeName := ''; for K := 0 to Int32(ChildNode2.Attributes.Length) - 1 do begin Key := ChildNode2.Attributes[K].NodeName; Value := ChildNode2.Attributes[K].NodeValue; if SameText('File', Key) then SchemeFileName := Value else if SameText('Name', Key) then SchemeName := Value; end; if FileExists(SchemeFileName) then begin if Styles <> nil then Styles.Free; Styles := TSynUniStyles.Create; Styles.FileName := SchemeFileName; Styles.Load; end; end else if SameText(ChildNode2.NodeName, 'Range') then begin // fMainRules.SetStyles(fStyles); fMainRules.Styles := Styles; fMainRules.LoadFromXml(ChildNode2); Break; end end; end; end end; procedure TSynUniSyn.LoadFromStream(Stream: TStream; FreeStream: boolean); var Len: Integer; Temp: PAnsiChar; Target: PAnsiChar; Source: PAnsiChar; Finish: PAnsiChar; Memory: PAnsiChar; Xml: TXMLDocument; TargetStream: TMemoryStream; begin TargetStream:= TMemoryStream.Create; try Len:= Stream.Size; Source:= GetMem(Len); TargetStream.SetSize(Len * 2); Stream.ReadBuffer(Source^, Len); Temp:= Source; Memory:= Source; Finish:= Temp + Len - 4; Target:= TargetStream.Memory; // Convert '&qt;' to '"' while (Temp < Finish) do begin if (Temp^ <> '&') then Inc(Temp, 1) else if ((Temp + 1)^ <> 'q') then Inc(Temp, 2) else if ((Temp + 2)^ <> 't') then Inc(Temp, 3) else begin Len:= (Temp - Source) + 2; Move(Source^, Target^, Len); Inc(Temp, 4); Inc(Target, Len); Move('uot;', Target^, 4); Inc(Target, 4); Source:= Temp; end; end; Len:= (Temp - Source) + 4; Move(Source^, Target^, Len); Inc(Target, Len); TargetStream.SetSize(Target - TargetStream.Memory); try TargetStream.Position:= 0; ReadXMLFile(Xml, TargetStream, [xrfPreserveWhiteSpace]); try LoadFromXml(Xml); finally Xml.Free; end; finally DefHighlightChange(Self); end; finally TargetStream.Free; if FreeStream then Stream.Free; if (Memory <> nil) then FreeMem(Memory); end; end; procedure TSynUniSyn.LoadFromFile(FileName: string); begin FFileName:= FileName; LoadFromStream(TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone)); end; procedure TSynUniSyn.SaveToStream(Stream: TStream; Rule: TSynRule); var StreamWriter: TStreamWriter; begin StreamWriter := TStreamWriter.Create(Stream); with StreamWriter do begin WriteTag(0, 'UniHighlighter'); WriteParam('version', '1.8', CloseStartTag); Info.SaveToStream(StreamWriter, 2); WriteTag(2, 'Scheme'); WriteParam('File', SchemeFileName); WriteParam('Name', SchemeName, CloseEmptyTag); if Rule = nil then MainRules.SaveToStream(StreamWriter, 2) else Rule.SaveToStream(StreamWriter, 2); WriteTag(0, '/UniHighlighter', True); end; StreamWriter.Free; end; function TSynUniSyn.GetAsStream: TMemoryStream; begin Result := TMemoryStream.Create; SaveToStream(Result); end; procedure TSynUniSyn.SaveToFile(FileName: string; Rule: TSynRule); var F: TFileStream; begin if FileName = '' then raise exception.Create(ClassName + '.SaveToFile - FileName is empty'); F := TFileStream.Create(FileName, fmCreate); try SaveToStream(F, Rule) finally F.Free; end; end; function ReadValue(ANode: TDOMNode): String; begin if Assigned(ANode.FirstChild) then Result:= ANode.FirstChild.NodeValue else Result:= EmptyStr; end; procedure TSynUniSyn.SaveHglToStream(Stream: TStream); //: Save Highlighter to stream procedure WriteString(const aStr: string); begin Stream.Write( aStr[1], Length(aStr) ); Stream.Write( #10#13, 1 ); end; function Indent(i: integer): string; begin SetLength( Result, i ); FillChar( Result[1], i, #32 ); end; function GetValidValue(Value: string): string; begin Value := StringReplace(Value, '&', '&', [rfReplaceAll, rfIgnoreCase]); Value := StringReplace(Value, '<', '<', [rfReplaceAll, rfIgnoreCase]); Value := StringReplace(Value, '"', '"', [rfReplaceAll, rfIgnoreCase]); Result := StringReplace(Value, '>', '>', [rfReplaceAll, rfIgnoreCase]); end; procedure InsertTag(Ind: integer; Name: string; Value: string); begin WriteString( Format('%s<%s>%s</%s>', [Indent(Ind), Name, GetValidValue(Value), Name]) ); end; procedure OpenTag(Ind: integer; Name: string; Param: string = ''; ParamValue: string = ''); begin if Param = '' then WriteString(Format('%s<%s>', [Indent(Ind), Name])) else WriteString(Format('%s<%s %s="%s">', [Indent(Ind), Name, Param, GetValidValue(ParamValue)])); end; procedure SaveColor(MainTag: string; Ind, Fore, Back: integer; Style: TFontStyles; PFore, PBack: boolean); procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean); begin if Value then WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name])) else WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name])) end; begin OpenTag(Ind, MainTag); InsertTag(Ind+1, 'Back', Inttostr(Back)); InsertTag(Ind+1, 'Fore', Inttostr(Fore)); InsertTag(Ind+1, 'Style', FontStyleToStr(Style)); InsertTagBool(Ind+1, 'ParentForeground', PFore); InsertTagBool(Ind+1, 'ParentBackground', PBack); OpenTag(Ind, '/'+MainTag); end; procedure SaveKWGroup(Ind: integer; G: TSynKeyList); var i: integer; procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean); begin if Value then WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name])) else WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name])) end; begin OpenTag(Ind, 'KW', 'Name', G.Name); for i := 0 to fSchemes.Count-1 do begin G.ind := i; SaveColor('Attri', Ind+1, G.Attribs.Foreground, G.Attribs.Background, G.Attribs.Style, G.Attribs.ParentForeground, G.Attribs.ParentBackground); end; G.ind := fSchemeIndex; InsertTagBool(Ind+1, 'Enabled', G.Enabled); For i := 0 to G.KeyList.Count-1 do InsertTag(Ind+1, 'W', G.KeyList[i]); OpenTag(Ind, '/KW'); end; procedure SaveSet(Ind: integer; S: TSynSet); var i: integer; procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean); begin if Value then WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name])) else WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name])) end; begin OpenTag(Ind, 'Set', 'Name', S.Name); for i := 0 to fSchemes.Count-1 do begin S.ind := i; SaveColor('Attri', Ind+1, S.Attribs.Foreground, S.Attribs.Background, S.Attribs.Style, S.Attribs.ParentForeground, S.Attribs.ParentBackground); end; S.ind := fSchemeIndex; InsertTagBool(Ind+1, 'Enabled', S.Enabled); { if S.StartType = stAny then if S.BrakeType = btAny then InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'True') else InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'Left') else if S.BrakeType = btAny then InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'Right') else InsertTag(Ind+1, 'SymbolSetPartOfTerm', 'False');} InsertTag(Ind+1, 'S', SetToStr(S.SymbSet)); OpenTag(Ind, '/Set'); end; procedure SaveRange(Ind: integer; R: TSynRange); var i: integer; procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean); begin if Value then WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name])) else WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name])) end; begin OpenTag(Ind, 'Range', 'Name', R.Name); for i := 0 to fSchemes.Count-1 do begin R.ind := i; SaveColor('Attri', Ind, R.Attribs.Foreground, R.Attribs.Background, R.Attribs.Style, R.Attribs.ParentForeground, R.Attribs.ParentBackground); end; R.ind := fSchemeIndex; InsertTagBool(Ind, 'Enabled', R.Enabled); if (Length(R.fRule.fOpenSymbol.Symbol) > 0) and (R.fRule.fOpenSymbol.Symbol[Length(R.fRule.fOpenSymbol.Symbol)] = #0) then begin InsertTag(Ind, 'OpenSymbol', copy(R.fRule.fOpenSymbol.Symbol,1,Length(R.fRule.fOpenSymbol.Symbol)-1)); InsertTagBool(Ind, 'OpenSymbolFinishOnEol', true); end else begin InsertTag(Ind, 'OpenSymbol', R.fRule.fOpenSymbol.Symbol); InsertTagBool(Ind, 'OpenSymbolFinishOnEol', false); end; if (Length(R.fRule.fCloseSymbol.Symbol) > 0) and (R.fRule.fCloseSymbol.Symbol[Length(R.fRule.fCloseSymbol.Symbol)] = #0) then begin InsertTag(Ind, 'CloseSymbol', copy(R.fRule.fCloseSymbol.Symbol,1,Length(R.fRule.fCloseSymbol.Symbol)-1)); InsertTagBool(Ind, 'CloseSymbolFinishOnEol', true); end else begin InsertTag(Ind, 'CloseSymbol', R.fRule.fCloseSymbol.Symbol); InsertTagBool(Ind, 'CloseSymbolFinishOnEol', false); end; if R.fRule.fOpenSymbol.StartLine = slFirst then InsertTag(Ind, 'OpenSymbolStartLine', 'True') else if R.fRule.fOpenSymbol.StartLine = slFirstNonSpace then InsertTag(Ind, 'OpenSymbolStartLine', 'NonSpace') else InsertTag(Ind, 'OpenSymbolStartLine', 'False'); if R.fRule.fCloseSymbol.StartLine = slFirst then InsertTag(Ind, 'CloseSymbolStartLine', 'True') else if R.fRule.fCloseSymbol.StartLine = slFirstNonSpace then InsertTag(Ind, 'CloseSymbolStartLine', 'NonSpace') else InsertTag(Ind, 'CloseSymbolStartLine', 'False'); InsertTag(Ind, 'DelimiterChars', SetToStr(R.TermSymbols)); if R.fRule.fOpenSymbol.StartType = stAny then if R.fRule.fOpenSymbol.BrakeType = btAny then InsertTag(Ind, 'OpenSymbolPartOfTerm', 'True') else InsertTag(Ind, 'OpenSymbolPartOfTerm', 'Left') else if R.fRule.fOpenSymbol.BrakeType = btAny then InsertTag(Ind, 'OpenSymbolPartOfTerm', 'Right') else InsertTag(Ind, 'OpenSymbolPartOfTerm', 'False'); if R.fRule.fCloseSymbol.StartType = stAny then if R.fRule.fCloseSymbol.BrakeType = btAny then InsertTag(Ind, 'CloseSymbolPartOfTerm', 'True') else InsertTag(Ind, 'CloseSymbolPartOfTerm', 'Left') else if R.fRule.fCloseSymbol.BrakeType = btAny then InsertTag(Ind, 'CloseSymbolPartOfTerm', 'Right') else InsertTag(Ind, 'CloseSymbolPartOfTerm', 'False'); InsertTagBool(Ind, 'CloseOnTerm', R.fRule.fCloseOnTerm); InsertTagBool(Ind, 'CloseOnEol', R.fRule.fCloseOnEol); InsertTagBool(Ind, 'AllowPredClose', R.fRule.fAllowPredClose); InsertTagBool(Ind, 'CaseSensitive', R.CaseSensitive); For i := 0 to R.KeyListCount-1 do SaveKWGroup(Ind, R.KeyLists[i]); For i := 0 to R.SetCount-1 do SaveSet(Ind, R.Sets[i]); For i := 0 to R.RangeCount-1 do SaveRange(Ind+1, R.Ranges[i]); OpenTag(Ind, '/Range'); end; procedure SaveInfo; var i: integer; begin OpenTag(1, 'Info'); OpenTag(2, 'General'); InsertTag(3, 'Name', info.General.Name); InsertTag(3, 'FileTypeName', info.General.Extensions); // InsertTag(3, 'Layout', info.General.Layout); OpenTag(2, '/General'); OpenTag(2, 'Author'); InsertTag(3, 'Name', Info.Author.Name); InsertTag(3, 'Email', Info.Author.Email); InsertTag(3, 'Web', Info.Author.Web); InsertTag(3, 'Copyright', Info.Author.Copyright); InsertTag(3, 'Company', Info.Author.Company); InsertTag(3, 'Remark', Info.Author.Remark); OpenTag(2, '/Author'); OpenTag(2, 'Version'); InsertTag(3, 'Version', IntToStr(Info.Version.Version)); InsertTag(3, 'Revision', IntToStr(Info.Version.Revision)); InsertTag(3, 'Date', FloatToStr(Info.Version.ReleaseDate)); case Info.Version.VersionType of vtInternalTest: InsertTag(3, 'Type', 'Internal Test'); vtBeta: InsertTag(3, 'Type', 'Beta'); vtRelease: InsertTag(3, 'Type', 'Release'); end; OpenTag(2, '/Version'); OpenTag(2, 'History'); for i := 0 to Info.history.count-1 do InsertTag(3, 'H', Info.history[i]); OpenTag(2, '/History'); OpenTag(2, 'Sample'); for i := 0 to Info.Sample.count-1 do InsertTag(3, 'S', Info.Sample[i]); OpenTag(2, '/Sample'); OpenTag(1, '/Info'); end; procedure SaveSchemes; var i: integer; begin InsertTag(1, 'SchemeIndex', IntToStr(fSchemeIndex)); OpenTag(1, 'Schemes'); for i := 0 to self.SchemesList.Count-1 do InsertTag(2, 'S', fSchemes.Strings[i]); OpenTag(1, '/Schemes'); end; begin OpenTag(0, 'UniHighlighter'); OpenTag(1, 'ImportantInfo'); WriteString(Indent(2)+'******* Please read carefully *************************'); WriteString(Indent(2)+'* Please, make any changes in this file very carefuly!*'); WriteString(Indent(2)+'* It is much more convenient to use native designer! *'); WriteString(Indent(2)+'*******************************************************'); OpenTag(1, '/ImportantInfo'); SaveInfo; SaveSchemes; SaveRange(1, self.MainRules); OpenTag(0, '/UniHighlighter'); end; procedure TSynUniSyn.LoadHglFromXml(xml: TDOMNode); var J: Integer; ChildNode: TDOMNode; begin Clear; SchemeIndex := 0; for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if SameText(ChildNode.NodeName, 'Info') then ReadInfo(ChildNode) else if SameText(ChildNode.NodeName, 'SchemeIndex') then SchemeIndex := StrToInt(ReadValue(ChildNode)) else if SameText(ChildNode.NodeName, 'Schemes') then ReadSchemes(ChildNode) else if SameText(ChildNode.NodeName, 'Range') then begin fMainRules.LoadHglFromXml(ChildNode, fSchemes.Count, SchemeIndex); end end end; procedure TSynUniSyn.ReadInfo(xml: TDOMNode); var I, J: Integer; ChildNode1, ChildNode2: TDOMNode; AFormatSettings: TFormatSettings; begin for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode1:= xml.ChildNodes.Item[J]; if ChildNode1.NodeName = 'General' then begin for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'Name' then Info.General.Name:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'FileTypeName' then Info.General.Extensions := ReadValue(ChildNode2) // else if ChildNode2.NodeName = 'Layout' then Info.General.Layout := ReadValue(ChildNode2); end; end else if ChildNode1.NodeName = 'Author' then begin for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'Name' then Info.Author.Name:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'Email' then Info.Author.Email:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'Web' then Info.Author.Web:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'Copyright' then Info.Author.Copyright:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'Company' then Info.Author.Company:= ReadValue(ChildNode2) else if ChildNode2.NodeName = 'Remark' then Info.Author.Remark:= ReadValue(ChildNode2) end; end else if ChildNode1.NodeName = 'Version' then begin for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'Version' then Info.Version.Version := StrToIntDef(ReadValue(ChildNode2), 0) else if ChildNode2.NodeName = 'Revision' then Info.Version.Revision := StrToIntDef(ReadValue(ChildNode2), 0) else if ChildNode2.NodeName = 'Date' then { try AFormatSettings:= DefaultFormatSettings; Info.Version.ReleaseDate := StrToFloat(ReadValue(ChildNode2), AFormatSettings); except AFormatSettings.DecimalSeparator := '.'; try Info.Version.ReleaseDate := StrToFloat(ReadValue(ChildNode2), AFormatSettings); except // Ignore end; end } else if ChildNode2.NodeName = 'Type' then begin if ReadValue(ChildNode2) = 'Beta' then Info.Version.VersionType := vtBeta else if ReadValue(ChildNode2) = 'Release' then Info.Version.VersionType := vtRelease else Info.Version.VersionType := vtInternalTest end end; end else if ChildNode1.NodeName = 'History' then begin Info.History.Clear; for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'H' then Info.History.Add(ReadValue(ChildNode2)); end; end else if ChildNode1.NodeName = 'Sample' then begin Info.Sample.Clear; for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'S' then Info.Sample.Add(ReadValue(ChildNode2)); end; end; end; end; procedure TSynUniSyn.ReadSchemes(xml: TDOMNode); var J: Integer; ChildNode: TDOMNode; begin if fSchemes <> nil then begin fSchemes.Clear(); //MainRules.ClearAttributes(); end else raise Exception.Create(ClassName + '.ReadSchemes - property Schemes not initialized.'); for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[J]; if ChildNode.NodeName = 'S' then fSchemes.Add(ReadValue(ChildNode)); end; end; procedure TSynUniSyn.LoadHglFromFile(FileName: string); //: Load Highlighter'a from file var F: TFileStream; begin if not FileExists(FileName) then raise Exception.Create(ClassName + '.LoadHglFromFile - "'+FileName+'" does not exists.'); F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try LoadHglFromStream( F ); finally F.Free; end; end; procedure TSynUniSyn.SaveHglToFile(FileName: string); //: Save Highlighter to file var F: TFileStream; begin if FileName = '' then raise exception.Create(ClassName + '.SaveHglToFile - FileName is empty'); F := TFileStream.Create(FileName, fmCreate); try SaveHglToStream( F ); finally F.Free; end; end; procedure TSynUniSyn.LoadHglFromStream(Stream: TStream); var xml: TXMLDocument = nil; begin try ReadXMLFile(xml, Stream); LoadHglFromXml(xml); finally xml.Free; end; DefHighlightChange( Self ); end; initialization {$IFNDEF SYN_CPPB_1} RegisterPlaceableHighlighter(TSynUniSyn); {$ENDIF} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/SynUniDesigner.pas�����������������������������0000644�0001750�0000144�00000333414�15104114162�025441� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{------------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynUniHighlighter.pas, released 2003-01 All Rights Reserved. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. { @abstract(Desginer for TSynUniSyn) @authors(Vit [nevzorov@yahoo.com], Fantasist [walking_in_the_sky@yahoo.com], Vitalik [vetal-x@mail.ru]) @created(2003) @lastmod(2004-05-12) } (****************************************************************************** Authors: Vit (Vitaly Nevzorov nevzorov@yahoo.com) Fantasist (Kirill Burtsev walking_in_the_sky@yahoo.com) Vitalik (Vitaly Lyapota vetal-x@mail.ru) Official Site: www.delphist.com With all questions, please visit www.delphist.com/forum ******************************************************************************) unit SynUniDesigner; //================== SCHMaster ================== {$IFNDEF FPC} //23.02.2012, Alex Dr., SynPlus is plugin for TC... {$DEFINE SYNPLUS} {$ENDIF} //=============================================== {$IFNDEF FPC} {$I SynEdit.inc} {$ELSE} {$IFNDEF SYN_LAZARUS} {$define SYN_LAZARUS} {$ENDIF} {$ENDIF} interface uses {$IFDEF SYN_CLX} Types, kTextDrawer, QGraphics, QControls, QForms, QExtCtrls, QStdCtrls, QComCtrls, QImgList, QDialogs, QMenus, {$ELSE} {$IFNDEF FPC} Windows, Messages, Registry, {$ELSE} LMessages, LCLType, {$ENDIF} Graphics, Controls, Forms, ExtCtrls, StdCtrls, ComCtrls, Dialogs, Menus, {$ENDIF} Classes, SysUtils, SynEdit, SynEditHighlighter, SynUniHighlighter, SynUniClasses, SynUniRules, Clipbrd, ImgList, Inifiles, Buttons, SynUniImport, SynUniImportEditPlus, SynUniImportUltraEdit; type {$IFDEF SYN_CLX} TNodeText = WideString; {$ELSE} TNodeText = string; {$ENDIF} TNodeType = (ntRangeLink, ntRange, ntRoot, ntKeywords, ntSet, ntNone); TAddKind = (akAdd, akInsert, akReplace); TRangeType = (rtRange, rtRoot, rtLink); { TfmDesigner } TfmDesigner = class(TForm) MenuItem10: TMenuItem; //==================== P O P U P M E N U S ============================== //=== popStandard ======================================================== popStandard: TPopupMenu; popUndo: TMenuItem; N1: TMenuItem; popCut: TMenuItem; popCopy: TMenuItem; popPaste: TMenuItem; popDelete: TMenuItem; N2: TMenuItem; popSelectAll: TMenuItem; //=== popSampleMemoMenu ================================================== popSampleMemoMenu: TPopupMenu; AddselectedtoKeywords1: TMenuItem; N7: TMenuItem; Undo1: TMenuItem; N5: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; Delete1: TMenuItem; N6: TMenuItem; SelectAll1: TMenuItem; //=== popOpenTagMenu ===================================================== popOpenTagMenu: TPopupMenu; Closemenu1: TMenuItem; N3: TMenuItem; Opentagisfirstsymbolsonline1: TMenuItem; Opentagisfirstnonspacesymbolsonline1: TMenuItem; N4: TMenuItem; Opentagispartofterm1: TMenuItem; Opentagispartoftermonlyrightside1: TMenuItem; Opentagispartoftermonlyleftside1: TMenuItem; Opentagisnotpartofterm1: TMenuItem; //=== popCloseTagMenu ==================================================== popCloseTagMenu: TPopupMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem; MenuItem7: TMenuItem; MenuItem8: TMenuItem; MenuItem9: TMenuItem; //=== popRootMenu ======================================================== popRootMenu: TPopupMenu; rootCut: TMenuItem; rootCopy: TMenuItem; rootPaste: TMenuItem; rootPasteAndReplace: TMenuItem; rootBreak1: TMenuItem; rootLoadFromFile: TMenuItem; rootSaveToFile: TMenuItem; rootBreak2: TMenuItem; rootAddRange: TMenuItem; rootAddKeywords: TMenuItem; rootAddSetto: TMenuItem; rootBreak3: TMenuItem; rootRename: TMenuItem; rootDeleteAll: TMenuItem; rootBreak4: TMenuItem; rootInfo: TMenuItem; //=== popRangeMenu ======================================================= popRangeMenu: TPopupMenu; rangeBack: TMenuItem; rangeBreak1: TMenuItem; rangeCut: TMenuItem; rangeCopy: TMenuItem; rangePaste: TMenuItem; rangePasteAndReplace: TMenuItem; rangePasteNextTo: TMenuItem; rangeBreak2: TMenuItem; rangeLoadFromFile: TMenuItem; rangeSaveToFile: TMenuItem; rangeBreak3: TMenuItem; rangeAddRange: TMenuItem; rangeAddKeywords: TMenuItem; rangeAddSet: TMenuItem; rangeBreak4: TMenuItem; rangeRename: TMenuItem; rangeDelete: TMenuItem; //=== popKeywordsMenu ==================================================== popKeywordsMenu: TPopupMenu; keywordsBack: TMenuItem; keywordsBreak1: TMenuItem; keywordsCut: TMenuItem; keywordsCopy: TMenuItem; keywordsPaste: TMenuItem; keywordsPasteAndReplace: TMenuItem; keywordsBreak2: TMenuItem; keywordsLoadFromFile: TMenuItem; keywordsSaveToFile: TMenuItem; keywordsBreak3: TMenuItem; keywordsRename: TMenuItem; keywordsDelete: TMenuItem; //=== popSetMenu ========================================================= popSetMenu: TPopupMenu; setBack: TMenuItem; setBreak1: TMenuItem; setCut: TMenuItem; setCopy: TMenuItem; setPaste: TMenuItem; setPasteAndReplace: TMenuItem; setBreak2: TMenuItem; setLoadFromFile: TMenuItem; setSaveToFile: TMenuItem; setBreak3: TMenuItem; setRename: TMenuItem; setDelete: TMenuItem; //=== popPanels ========================================================== popPanels: TPopupMenu; RulesTree1: TMenuItem; Properties1: TMenuItem; Attributes1: TMenuItem; Sampletext1: TMenuItem; Buttons1: TMenuItem; //=== Popup Menus ======================================================== popColorStd: TPopupMenu; popColorAdv: TPopupMenu; popColorSys: TPopupMenu; //===================== C O M P O N E N T S ============================== //=== Top panel ========================================================== pTop: TPanel; SplitterBottom: TSplitter; //=== Panel "Rules' Tree" ================================================ pLeft: TPanel; SplitterLeft: TSplitter; pLeftParentCapt: TPanel; lbRootMenu: TLabel; pLeftCapt: TPanel; Bevel1: TBevel; pTree: TPanel; Tree: TTreeView; //=== Panel "Attributes" ================================================= pRight: TPanel; SplitterRight: TSplitter; pRightCapt: TPanel; Bevel2: TBevel; pAttri: TPanel; //=== Panel "Proprties" ================================================== pMiddle: TPanel; pMiddleParentCapt: TPanel; lbPropBack: TLabel; lbRuleMenu: TLabel; pMiddleCapt: TPanel; Bevel4: TBevel; //=== "Root" page ======================================================== PageControl: TPageControl; tabRoot: TTabSheet; chCaseRoot: TCheckBox; chEnabledRoot: TCheckBox; lbDelimitersRoot: TLabel; edDelimitersRoot: TEdit; pRootButtons: TPanel; btAddRangeRoot: TButton; btAddKeywordsRoot: TButton; btAddSetRoot: TButton; //=== "Range" page ======================================================= tabRange: TTabSheet; chCaseRange: TCheckBox; chEnabledRange: TCheckBox; btChooseRule: TButton; lbRangeFrom: TLabel; edFrom: TEdit; btFromList: TButton; btFromMenu: TButton; chFromEOL: TCheckBox; lbRangeTo: TLabel; edTo: TEdit; btToList: TButton; btToMenu: TButton; chToEOL: TCheckBox; chCloseOnWord: TCheckBox; chCloseOnEOL: TCheckBox; chCloseParent: TCheckBox; lbDelimitersRange: TLabel; edDelimitersRange: TEdit; pRangeButtons: TPanel; btAddRange: TButton; btAddKeywords: TButton; btAddSet: TButton; //=== "Keywords" page ==================================================== tabKeywords: TTabSheet; Memo: TMemo; pProp: TPanel; chEnabledKeyList: TCheckBox; btSort_old: TButton; btLowerCase_old: TButton; btSpacesToEol_old: TButton; lbKeywordCount: TLabel; //=== "Set" page ========================================================= tabSet: TTabSheet; chAnyStart: TCheckBox; chEnabledSet: TCheckBox; lbSymbSet: TLabel; edSymbSet: TEdit; //=== Panel "Sample text" ================================================ pBottom: TPanel; pBottomParentCapt: TPanel; lbSampMin: TLabel; lbSampMax: TLabel; pBottomCapt: TPanel; Bevel5: TBevel; SampleMemo: TSynEdit; //=== Panel with "finish" buttons ======================================== StatusBar: TStatusBar; pButtons: TPanel; SplitterButtons: TSplitter; btOk: TButton; btCancel: TButton; btApply: TButton; //=== Invisible components =============================================== SynUniSyn: TSynUniSyn; listImages: TImageList; listRules: TImageList; listColors16: TImageList; listColors40: TImageList; listColorsSys: TImageList; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; tabSeveralRules: TTabSheet; Label1: TLabel; btSort: TSpeedButton; btLowerCase: TSpeedButton; btSpacesToEol: TSpeedButton; PageControl1: TPageControl; TabSheet1: TTabSheet; chStrikeOut: TCheckBox; chUnderline: TCheckBox; chItalic: TCheckBox; chBold: TCheckBox; pForeColorBox: TPanel; pForeColor: TPanel; pForeColorArrow: TPanel; pBackColorBox: TPanel; pBackColor: TPanel; pBackColorArrow: TPanel; chForeground: TCheckBox; chBackground: TCheckBox; TabSheet2: TTabSheet; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; CheckBox5: TCheckBox; CheckBox6: TCheckBox; CheckBox7: TCheckBox; Button1: TButton; CheckBox8: TCheckBox; Bevel6: TBevel; Label3: TLabel; edStylesFile: TEdit; btStylesFile: TButton; cbStyle: TComboBox; Label2: TLabel; Label4: TLabel; Label5: TLabel; ComboBox2: TComboBox; OpenDialog2: TOpenDialog; Button3: TButton; Button4: TButton; Label6: TLabel; //============================ M E T O D S =================================== //=== Form events ============================================================ procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); //=== Translate ============================================================== procedure OldTranslate(LangFile: String); //SCHMaster 2004 procedure Translate(LangFile: String); //=== TreeView =============================================================== procedure TreeEdited(Sender: TObject; Node: TTreeNode; var S: String); procedure TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure TreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TreeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TreeChange(Sender: TObject; Node: TTreeNode); //=== Fill Tree with Rules =================================================== procedure FillTree; procedure SetNodeData(Node: TTreeNode; Rule: TAbstractRule; Root: boolean = False); function TreeAddRule(ParentNode: TTreeNode; Rule: TSynRule; AddKind: TAddKind = akAdd): TTreeNode; function TreeAddRangeLink(Node: TTreeNode; RangeLink: TSynRangeLink; AddKind: TAddKind = akAdd): TTreeNode; function TreeAddRange(Node: TTreeNode; Range: TSynRange; AddKind: TAddKind = akAdd): TTreeNode; function TreeAddKeyList(Node: TTreeNode; Keyword: TSynKeyList; AddKind: TAddKind = akAdd): TTreeNode; function TreeAddSet(Node: TTreeNode; SymbSet: TSynSet; AddKind: TAddKind = akAdd): TTreeNode; //=== Adding RangeLink ======================================================= procedure DoAddRangeLinkToRoot(Sender: TObject); procedure DoAddRangeLink(Sender: TObject); procedure AddingRangeLink(ParentNode: TTreeNode); //=== Adding Range =========================================================== procedure DoAddRangeToRoot(Sender: TObject); procedure DoAddRange(Sender: TObject); procedure AddingRange(ParentNode: TTreeNode); //=== Adding KeyList ========================================================= procedure DoAddKeywordToRoot(Sender:TObject); procedure DoAddKeyword(Sender: TObject); procedure AddingKeyWord(ParentNode: TTreeNode); //=== Adding Set ============================================================= procedure DoAddSetToRoot(Sender:TObject); procedure DoAddSet(Sender: TObject); procedure AddingSet(ParentNode: TTreeNode); //=== Delete and Rename Rules ================================================ procedure DoDeleteNode(Sender: TObject); procedure DeleteNode(Node: TTreeNode; OnlyChilds: boolean = False); procedure DoRenameNode(Sender: TObject); //=== Useful functions... ==================================================== function GetNodeType(Node: TTreeNode): TNodeType; procedure TotalUpdate; procedure Modified(State: boolean = True); //=== KeyList Tools ========================================================== procedure btSort_oldClick(Sender: TObject); procedure btLowerCase_oldClick(Sender: TObject); procedure btSpacesToEol_oldClick(Sender: TObject); //=== Finish buttons ========================================================= procedure btOkClick(Sender: TObject); procedure btCancelClick(Sender: TObject); procedure btApplyClick(Sender: TObject); //=== Work with schemes ====================================================== { procedure btNewSchemeClick(Sender: TObject); procedure btDelSchemeClick(Sender: TObject); procedure cbSchemeChange(Sender: TObject); procedure cbSchemeSelect(Sender: TObject);} //=== Rules changed ========================================================== procedure RootChange(Sender: TObject); procedure RangeChange(Sender: TObject); procedure KeywordsChange(Sender: TObject); procedure SetChange(Sender: TObject); //=== Wotk with Attributes =================================================== procedure AttributesChanged(Sender: TObject); procedure SetDefaultAttributes(Node: TTreeNode); procedure SetControlAttributes(Node: TTreeNode; AlreadyUpdate: boolean = False); procedure SetAttributes(Node: TTreeNode); //============================ D E S I G N =================================== //=== Splitter CanResize ===================================================== procedure SplitterBottomCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); procedure SplitterCannotResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); //=== Label Mouse Leave/Enter ================================================ procedure LabelMouseLeave(Sender: TObject); procedure LabelMouseEnter(Sender: TObject); procedure LabelContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); //=== CheckBox =============================================================== procedure CheckBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure DontNeedContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); //=== Show/Hide panels ======================================================= procedure ShowHideTree(Sender: TObject); procedure ShowHideProp(Sender: TObject); procedure ShowHideAttr(Sender: TObject); procedure ShowHideSamp(Sender: TObject); procedure PanelDblClick(Sender: TObject); //=== Middle panel Resize ==================================================== procedure pMiddleResize(Sender: TObject); //=== Push label clicks ====================================================== procedure lbPropBackClick(Sender: TObject); procedure lbRootMenuClick(Sender: TObject); procedure lbRuleMenuClick(Sender: TObject); procedure lbSampMaxClick(Sender: TObject); //procedure lbSampRestoreClick(Sender: TObject); procedure lbSampMinClick(Sender: TObject); //============================ P O P U P S =================================== //=== Standard PopupMenu ===================================================== procedure SetPopupMenuEnables(Edit: TCustomEdit; popMenu: TPopupMenu); procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); procedure popCopyClick(Sender: TObject); procedure popUndoClick(Sender: TObject); procedure popCutClick(Sender: TObject); procedure popPasteClick(Sender: TObject); procedure popDeleteClick(Sender: TObject); procedure popSelectAllClick(Sender: TObject); //=== Sample Memo PopupMenu ================================================== procedure SetPopupMenuEnables2(Edit: TCustomSynEdit; popMenu: TPopupMenu); procedure SampleMemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SampleMemoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Undo1Click(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); procedure Delete1Click(Sender: TObject); procedure SelectAll1Click(Sender: TObject); procedure AddselectedtoKeywords1Click(Sender: TObject); procedure popSampleMemoMenuPopup(Sender: TObject); //=== Tag Menu Clicks... ===================================================== procedure btTagMenuClick(Sender: TObject); procedure miTagMenuClick(Sender: TObject); procedure miOpenTagMenuClick(Sender: TObject); procedure miCloseTagMenuClick(Sender: TObject); //=== ColorBox Clicks... ===================================================== procedure PanelColorChange(Sender: TObject); procedure miColor16Click(Sender: TObject); procedure miColorSysClick(Sender: TObject); procedure miColor40Click(Sender: TObject); {$IFNDEF FPC} procedure Color40MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); {$ELSE} procedure Color40MeasureItem(Sender: TObject; ACanvas: TCanvas; var AWidth, AHeight: Integer); {$ENDIF} procedure pColorMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure pColorArrowMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //=== TabSheet showing ======================================================= procedure tabRootShow(Sender: TObject); procedure tabRangeShow(Sender: TObject); procedure tabKeywordsShow(Sender: TObject); procedure tabSetShow(Sender: TObject); //=== Work with files ======================================================== // procedure LoadFromFileClick(Sender: TObject); procedure rootSaveToFileClick(Sender: TObject); procedure rootLoadFromFileClick(Sender: TObject); procedure rangeLoadFromFileClick(Sender: TObject); procedure rangeSaveToFileClick(Sender: TObject); //=== Clipboard ============================================================== procedure StreamToClipboard(Stream: TStream); function GetClipboardAsStream: TMemoryStream; //=== Root range ============================================================= procedure rootCutClick(Sender: TObject); procedure rootCopyClick(Sender: TObject); procedure rootPasteInsideClick(Sender: TObject); procedure rootPasteAndReplaceClick(Sender: TObject); //=== Other rules ============================================================ procedure rangeCutClick(Sender: TObject); procedure rangeCopyClick(Sender: TObject); procedure rangePasteInsideClick(Sender: TObject); procedure rangePasteAndReplaceClick(Sender: TObject); procedure rangePasteNextToClick(Sender: TObject); //=== NOT SORTED ============================================================= procedure rootInfoClick(Sender: TObject); procedure TreeClick(Sender: TObject); procedure btStylesFileClick(Sender: TObject); private { Private declarations } public { Public declarations } popPropMenu: TPopupMenu; OriginalSyn: TSynUniSyn; ForceClose: boolean; UpdatingControls: boolean; ShowDialog: boolean; _Modified, _Confirm, _DeleteNode, _SaveChanges, _EnterName, _DeleteScheme, _Lines, _Name, _Extensions, _Version, _Date, _Author, _Mail, _Web, _Copyright, _Company, _Remark: string; end; TSynUniDesigner = class(TObject) private Form: TfmDesigner; //=== Standard metods ======================================================== function Execute(FormTitle: string; LangFile: string): boolean; procedure SetSample(const Value: string); function GetSample: string; procedure SetTitle(const Value: string); function GetTitle: string; public constructor Create(Highlighter: TSynUniSyn); destructor Destroy; override; property Title: string read GetTitle write SetTitle; property Sample: string read GetSample write SetSample; class function EditHighlighter(OriginalSyn: TSynUniSyn; FormTitle: string = ''; LangFile: string = ''): boolean; end; implementation {$R *.dfm} {$IFDEF SYN_CLX} uses Qt; const VK_F1 = Key_F1; VK_F2 = Key_F2; VK_RETURN = Key_Return; VK_DELETE = Key_Delete; {$ENDIF} const Colors16: array [0..15] of TColor = (clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite); const Colors16s: array [0..15] of string = ('Black', 'Maroon', 'Green', 'Olive', 'Navy', 'Purple', 'Teal', 'Gray', 'Silver', 'Red', 'Lime', 'Yellow', 'Blue', 'Fuchsia', 'Aqua', 'White'); const Colors40: array [0..39] of TColor = ( $000000, $000080, $0000FF, $FF00FF, $CC99FF, $003399, $0066FF, $0099FF, $00CCFF, $99CCFF, $003333, $008080, $00CC99, $00FFFF, $99FFFF, $003300, $008000, $669933, $00FF00, $CCFFCC, $663300, $808000, $CCCC33, $FFFF00, $FFFFCC, $800000, $FF0000, $FF6633, $FFCC00, $FFCC99, $993333, $996666, $800080, $663399, $FF99CC, $333333, $808080, $969696, $C0C0C0, $FFFFFF); const ColorsSys: array [0..27] of TColor = (clActiveBorder, clActiveCaption, clAppWorkSpace, clBackground, clBtnFace, clBtnHighlight, clBtnShadow, clBtnText, clCaptionText, clDefault, clGradientActiveCaption, clGradientInactiveCaption, clGrayText, clHighlight, clHighlightText, clInactiveBorder, clInactiveCaption, clInactiveCaptionText, clInfoBk, clInfoText, clMenu, clMenuText, clScrollBar, cl3DDkShadow, cl3DLight, clWindow, clWindowFrame, clWindowText); const _pTopHeight = 210; function GetFontStyle(Bold, Italic, Underline, StrikeOut: boolean): TFontStyles; begin Result := []; if Bold then Result := Result + [fsBold]; if Italic then Result := Result + [fsItalic]; if Underline then Result := Result + [fsUnderline]; if Strikeout then Result := Result + [fsStrikeOut]; end; constructor TSynUniDesigner.Create(Highlighter: TSynUniSyn); (*{$IFNDEF SYN_CLX}Tree.HideSelection:=False;Tree.RightClickSelect:=True;{$ENDIF}*) begin inherited Create; Form := TfmDesigner.Create(nil); Form.OriginalSyn := Highlighter; {popRangeMenu.Items.Items[1].Caption := '&Go to subnode';} {Tree.DragMode := dmAutomatic;} {CreateButtonLabel(lbSampRestore, pBottomParentCapt, alRight, #50, 'Restore');} end; (*procedure TSynUniDesigner.DelimDblClick(Sender: TObject); begin (Sender as TEdit).Text := Set2String( DefaultTermSymbols ); end;*) destructor TSynUniDesigner.Destroy; begin Form.SampleMemo.Highlighter := nil; Form.SampleMemo.Free; Form.Free; inherited; end; class function TSynUniDesigner.EditHighlighter(OriginalSyn: TSynUniSyn; FormTitle: string; LangFile: string): boolean; begin with Create(OriginalSyn) do begin Result := Execute(FormTitle, LangFile); Free; end; end; //=== Standard metods ======================================================== procedure TSynUniDesigner.SetSample(const Value: string); begin Form.SampleMemo.Text := Value; end; function TSynUniDesigner.GetSample: string; begin Result := Form.SampleMemo.Text; end; procedure TSynUniDesigner.SetTitle(const Value: string); begin Form.Caption := Value; end; function TSynUniDesigner.GetTitle: string; begin Result := Form.Caption; end; //================== SCHMaster ================== {$IFDEF SYNPLUS} function TSynUniDesigner.Execute(FormTitle: string; LangFile: string): boolean; var msg : TMsg; TcClosed: boolean; begin ///////////////////////// if FormTitle <> '' then Title := FormTitle; Form.Translate(LangFile); TcClosed := False; Form.ModalResult := mrNone; Form.Show; while (Form.ModalResult = mrNone) do begin GetMessage({$IFDEF FPC} @ {$ENDIF}msg, 0, 0, 0); if (msg.message = WM_QUIT) then begin TcClosed := True; Form.ModalResult := mrCancel; result:=False; end else begin Result := (Form.ModalResult = mrOk); TranslateMessage({$IFDEF FPC} @ {$ENDIF}msg); DispatchMessage({$IFDEF FPC} @ {$ENDIF}msg); end; end; Result := (Form.ModalResult = mrOk); if TcClosed then PostMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam); ///////////////////////// end; {$ELSE} function TSynUniDesigner.Execute(FormTitle: string; LangFile: string): boolean; begin if FormTitle <> '' then Title := FormTitle; Form.Translate(LangFile); Result := (Form.ShowModal = mrOk); end; {$ENDIF} //=============================================== /// /// /// NNNN NNNN EEEEEEEEEEE WWWW WWWW $$$ $$$ $$$ /// /// NNNN NN EE EE WW WW $$$$$ $$$$$ $$$$$ /// /// NN NN NN EE E E WW WW $$$$$ $$$$$ $$$$$ /// /// NN NN NN EEEEEE WW WW WW $$$$$ $$$$$ $$$$$ /// /// NN NN NN EE T T WW WWWW WW $$$ $$$ $$$ /// /// NN NNNN EE TT WWW WWWW /// /// NNNN NNNN EEEETTTTTTT WW WW $$$ $$$ $$$ /// /// /// //============================ M E T O D S =================================== //=== Form events ============================================================ procedure TfmDesigner.FormCreate(Sender: TObject); procedure AddBitmap(ImageList: TImageList; aColor: TColor; aSize: integer; aSymbol: string); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; with Bitmap do begin Width := 16; Height := 16; end; with Bitmap.Canvas do begin Font.Name := 'Marlett'; Font.Color := aColor; Font.Size := aSize; {$IFNDEF FPC} TextOut(1, 1, aSymbol); {$ELSE} TextOut(0, 0, aSymbol); {$ENDIF} ImageList.AddMasked(Bitmap, clWhite); end; Bitmap.Free; end; procedure AddBitmapColor(out ImageList: TImageList; aColor: TColor); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; with Bitmap do begin Width := 16; Height := 16; end; with Bitmap.Canvas do begin Brush.Color := clBtnFace; FillRect(Rect(0, 0, 16, 16)); Brush.Color := aColor; Rectangle(1, 1, 15, 15); ImageList.AddMasked(Bitmap, clBtnFace); end; Bitmap.Free; end; procedure CreateMenuItem(out popMenu: TPopupMenu; aCaption: TCaption; aOnClick: TNotifyEvent; aImageIndex: integer); overload; begin popMenu.Items.Add(TMenuItem.Create(Self)); with popMenu.Items.Items[popMenu.Items.Count-1] do begin Caption := aCaption; ImageIndex := aImageIndex; OnClick := aOnClick; end; end; var i: integer; begin ForceClose := False; UpdatingControls := False; ShowDialog := True; _DeleteNode := 'Are you sure you want to delete "%s"?'; _SaveChanges := 'Save changes in highlight rools?'; _EnterName := 'Enter Scheme Name:'; _DeleteScheme := 'Delete current color scheme?'; _Modified := 'Modified'; _Confirm := 'Confirm'; _Lines := 'Lines: %d'; _Name := 'Name: %s'; _Extensions := 'Extensions: %s'; _Version := 'Version: %s'; _Date := 'Date: %s'; _Author := 'Author: %s'; _Mail := 'Mail: %s'; _Web := 'Web: %s'; _Copyright := 'Copyright: %s'; _Company := 'Company: %s'; _Remark := 'Remark: %s'; Caption := 'Unihighlighter Designer © Fantasist, Vit, Vitalik (2002-2004)'; if SynUniSyn.Info.General.Name <> '' then Caption := Caption + ' - [' + SynUniSyn.Info.General.Name + ']'; popColorStd.Images := listColors16; for i := 0 to 15 do begin AddBitmapColor(listColors16, Colors16[i]); CreateMenuItem(popColorStd, Colors16s[i], miColor16Click, i); end; {$note May be error...} {$IFNDEF FPC} popColorStd.Items[8].Break := {$IFDEF FPC} @ {$ENDIF}mbBarBreak; {$ENDIF} popColorAdv.Images := listColors40; for i := 0 to 39 do begin AddBitmapColor(listColors40, Colors40[i]); CreateMenuItem(popColorAdv, '', miColor40Click, i); {$note May be error...} {$IFNDEF FPC} popColorAdv.Items.Items[i].OnMeasureItem := Color40MeasureItem; {$ENDIF} end; {$note May be error...} {$IFNDEF FPC} for i := 1 to 7 do popColorAdv.Items[5*i].Break := mbBreak; {$ENDIF} popColorSys.Images := listColorsSys; for i := 0 to 27 do begin AddBitmapColor(listColorsSys, ColorsSys[i]); CreateMenuItem(popColorSys, ColorToString(ColorsSys[i]), miColorSysClick, i); end; {$note May be error...} {$IFNDEF FPC} popColorSys.Items[14].Break := mbBarBreak; {$ENDIF} AddBitmap(listRules, clRed, 14, #52); //: Image0: 'Root Range' AddBitmap(listRules, clGreen, 14, #52); //: Image1: 'Range' AddBitmap(listRules, clBlue, 14, #104); //: Image2: 'Keyword' AddBitmap(listRules, clMaroon, 14, #104); //: Image3: 'Set' AddBitmap(listRules, clOlive, 14, #52); //: Image1: 'RangeLink' AddBitmap(listRules, clOlive, 14, #52); //: Image4: 'Conteiner' { cbScheme.Items.AddStrings(SynUniSyn.SchemesList); cbScheme.ItemIndex := SynUniSyn.SchemeIndex;} SampleMemo.Highlighter := SynUniSyn; SampleMemo.Lines.Text := SynUniSyn.Info.Sample.Text; end; procedure TfmDesigner.FormShow(Sender: TObject); var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; try OriginalSyn.SaveToStream(Stream); OriginalSyn.SaveToFile('r:\test.xml'); Stream.Position := 0; try if Stream.Size <> 0 then SynUniSyn.LoadFromStream(Stream, False); Stream.Clear; SampleMemo.Text := OriginalSyn.Info.Sample.Text; finally end; finally Stream.Free; end; FillTree; Tree.Selected := Tree.Items[0]; TreeChange(nil, Tree.Selected); Tree.Items[0].Expand(False); end; procedure TfmDesigner.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key = #27) and (not Tree.IsEditing) then Close; end; procedure TfmDesigner.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F1 then if ssCtrl in Shift then rootInfoClick(Sender) else Application.MessageBox('UniHighlighter Component'+#13#10#13#10+ 'Copyright © 2002-2004:'+#13#10+ 'Fantasist (walking_in_the_sky@yahoo.com)'+#13#10+ 'Vit (nevzorov@yahoo.com)'+#13#10+ 'Vitalik (vetal-x@mail.ru)'+#13#10#13#10+ 'Official Web Site: www.delphist.com'{+#13#10#13#10+ 'Thanks to:'+#13#10+ 'P@VeL, '+ 'bouville, '+ 'StayAtHome, '+ 'Jasny, '+ 'SCHMaster'}, 'About...', MB_ICONINFORMATION) else if (ssAlt in Shift) and (ssShift in Shift) and (ssCtrl in Shift) and (Key = VK_F12) then begin edStylesFile.Enabled := True; btStylesFile.Enabled := True; cbStyle.Enabled := True; end; end; procedure TfmDesigner.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var Choise: integer; begin if Tree.IsEditing then Tree.Selected.EndEdit(False); if ModalResult = mrOk then Exit; if btApply.Enabled then begin if ForceClose then Exit; Choise := Application.MessageBox(PChar(_SaveChanges), PChar(_Confirm), MB_YESNOCANCEL+MB_ICONQUESTION); if Choise = ID_YES then begin btApplyClick(Sender); ModalResult := mrOk end else if Choise = ID_NO then ModalResult := mrCancel else CanClose := False; end else ModalResult := mrCancel; //================== SCHMaster ================== {$IFDEF SYNPLUS} if ModalResult = mrNone then ModalResult:=mrCancel; {$ENDIF} //=============================================== end; //=== Translate ============================================================== procedure TfmDesigner.OldTranslate(LangFile: String); //SCHMaster 2004 var L: TStringList; begin L := TStringList.Create; if (LangFile <> '') and FileExists(LangFile) then L.LoadFromFile(LangFile); if Length(L.Values['2000'])>2 then Caption := L.Values['2000'] + ' - [' + SynUniSyn.Info.General.Name + ']'; with popPanels do begin if Length(L.Values['2001'])>2 then Items[0].Caption := L.Values['2001']; if Length(L.Values['2002'])>2 then Items[1].Caption := L.Values['2002']; if Length(L.Values['2003'])>2 then Items[2].Caption := L.Values['2003']; if Length(L.Values['2004'])>2 then Items[3].Caption := L.Values['2004']; end; if Length(L.Values['2010'])>2 then btOk.Caption := L.Values['2010']; if Length(L.Values['2011'])>2 then btCancel.Caption := L.Values['2011']; if Length(L.Values['2012'])>2 then btApply.Caption := L.Values['2012']; with popStandard do begin if Length(L.Values['2013'])>2 then Items[0].Caption := L.Values['2013']; if Length(L.Values['2014'])>2 then Items[2].Caption := L.Values['2014']; if Length(L.Values['2015'])>2 then Items[3].Caption := L.Values['2015']; if Length(L.Values['2016'])>2 then Items[4].Caption := L.Values['2016']; if Length(L.Values['2017'])>2 then Items[5].Caption := L.Values['2017']; if Length(L.Values['2018'])>2 then Items[7].Caption := L.Values['2018']; end; with popSampleMemoMenu do begin if Length(L.Values['2013'])>2 then Items[2].Caption := L.Values['2013']; if Length(L.Values['2014'])>2 then Items[4].Caption := L.Values['2014']; if Length(L.Values['2015'])>2 then Items[5].Caption := L.Values['2015']; if Length(L.Values['2016'])>2 then Items[6].Caption := L.Values['2016']; if Length(L.Values['2017'])>2 then Items[7].Caption := L.Values['2017']; if Length(L.Values['2018'])>2 then Items[9].Caption := L.Values['2018']; end; if Length(L.Values['2020'])>2 then _Modified := L.Values['2020']; if Length(L.Values['2030'])>2 then _DeleteNode := L.Values['2030']; if Length(L.Values['2031'])>2 then _SaveChanges := L.Values['2031']; if Length(L.Values['2032'])>2 then _EnterName := L.Values['2032']; if Length(L.Values['2033'])>2 then _DeleteScheme := L.Values['2033']; if Length(L.Values['2034'])>2 then _Confirm := L.Values['2034']; if Length(L.Values['2100'])>2 then pLeftCapt.Caption := L.Values['2100']; if Length(L.Values['2200'])>2 then pMiddleCapt.Caption := L.Values['2200']; if Length(L.Values['2201'])>2 then lbPropBack.Hint := L.Values['2201']; if Length(L.Values['2202'])>2 then lbRuleMenu.Hint := L.Values['2202']; with popRootMenu do begin if Length(L.Values['2305'])>2 then Items[8].Caption := L.Values['2305']; if Length(L.Values['2306'])>2 then Items[9].Caption := L.Values['2306']; if Length(L.Values['2307'])>2 then Items[10].Caption := L.Values['2307']; if Length(L.Values['2204'])>2 then Items[13].Caption := L.Values['2204']; end; with popRangeMenu do begin if Length(L.Values['2203'])>2 then Items[0].Caption := L.Values['2203']; if Length(L.Values['2204'])>2 then Items[16].Caption := L.Values['2204']; if Length(L.Values['2406'])>2 then Items[11].Caption := L.Values['2406']; if Length(L.Values['2407'])>2 then Items[12].Caption := L.Values['2407']; if Length(L.Values['2408'])>2 then Items[13].Caption := L.Values['2408']; end; with popKeywordsMenu do begin if Length(L.Values['2203'])>2 then Items[0].Caption := L.Values['2203']; if Length(L.Values['2204'])>2 then Items[11].Caption := L.Values['2204']; end; with popSetMenu do begin if Length(L.Values['2203'])>2 then Items[0].Caption := L.Values['2203']; if Length(L.Values['2204'])>2 then Items[11].Caption := L.Values['2204']; end; if Length(L.Values['2300'])>2 then chCaseRoot.Caption := L.Values['2300']; if Length(L.Values['2300'])>2 then chCaseRange.Caption := L.Values['2300']; if Length(L.Values['2301'])>2 then btAddRangeRoot.Caption := L.Values['2301']; if Length(L.Values['2301'])>2 then btAddRange.Caption := L.Values['2301']; if Length(L.Values['2302'])>2 then btAddKeywordsRoot.Caption := L.Values['2302']; if Length(L.Values['2302'])>2 then btAddKeywords.Caption := L.Values['2302']; if Length(L.Values['2303'])>2 then btAddSetRoot.Caption := L.Values['2303']; if Length(L.Values['2303'])>2 then btAddSet.Caption := L.Values['2303']; if Length(L.Values['2304'])>2 then lbDelimitersRoot.Caption := L.Values['2304']; if Length(L.Values['2304'])>2 then lbDelimitersRange.Caption := L.Values['2304']; if Length(L.Values['2400'])>2 then lbRangeFrom.Caption := L.Values['2400']; if Length(L.Values['2401'])>2 then lbRangeTo.Caption := L.Values['2401']; if Length(L.Values['2402'])>2 then chCloseOnWord.Caption := L.Values['2402']; if Length(L.Values['2403'])>2 then chCloseOnEOL.Caption := L.Values['2403']; if Length(L.Values['2404'])>2 then chCloseParent.Caption := L.Values['2404']; if Length(L.Values['2501'])>2 then btSort.Hint := L.Values['2501']; if Length(L.Values['2502'])>2 then btLowercase.Hint := L.Values['2502']; if Length(L.Values['2503'])>2 then btSpacesToEol.Hint := L.Values['2503']; if Length(L.Values['2600'])>2 then lbSymbSet.Caption := L.Values['2600']; if Length(L.Values['2700'])>2 then pRightCapt.Caption := L.Values['2700']; if Length(L.Values['2701'])>2 then chForeground.Caption := L.Values['2701']; if Length(L.Values['2702'])>2 then chBackground.Caption := L.Values['2702']; if Length(L.Values['2703'])>2 then chBold.Caption := L.Values['2703']; if Length(L.Values['2704'])>2 then chItalic.Caption := L.Values['2704']; if Length(L.Values['2705'])>2 then chUnderline.Caption := L.Values['2705']; if Length(L.Values['2706'])>2 then chStrikeOut.Caption := L.Values['2706']; { if Length(L.Values['2707'])>2 then lbScheme.Caption := L.Values['2707']; if Length(L.Values['2708'])>2 then btNewScheme.Caption := L.Values['2708']; if Length(L.Values['2709'])>2 then btDelScheme.Caption := L.Values['2709'];} if Length(L.Values['2800'])>2 then pBottomCapt.Caption := L.Values['2800']; if Length(L.Values['2801'])>2 then lbSampMin.Hint := L.Values['2801']; if Length(L.Values['2802'])>2 then lbSampMax.Hint := L.Values['2802']; L.Free; end; procedure TfmDesigner.Translate(LangFile: String); var L: TStringList; Ini: TIniFile; i: integer; begin L := TStringList.Create; if (LangFile = '') or not FileExists(LangFile) then Exit; { else if ExtractFileExt(LangFile) = '.lng' then begin OldTranslate(LangFile); Exit; end else Ini := TIniFile.Create(LangFile);} OldTranslate(LangFile); Ini := TIniFile.Create(LangFile); Ini.ReadSectionValues('Form', L); if Length(L.Values['Caption' ]) > 0 then Caption := L.Values['Caption' ]; if Length(L.Values[btOk.Caption ]) > 0 then btOk.Caption := L.Values[btOk.Caption ]; if Length(L.Values[btCancel.Caption ]) > 0 then btCancel.Caption := L.Values[btCancel.Caption ]; if Length(L.Values[btApply.Caption ]) > 0 then btApply.Caption := L.Values[btApply.Caption ]; if Length(L.Values[_Modified ]) > 0 then _Modified := L.Values[_Modified ]; if Length(L.Values[_Name ]) > 0 then _Name := L.Values[_Name ]; if Length(L.Values[_Extensions ]) > 0 then _Extensions := L.Values[_Extensions ]; if Length(L.Values[_Version ]) > 0 then _Version := L.Values[_Version ]; if Length(L.Values[_Date ]) > 0 then _Date := L.Values[_Date ]; if Length(L.Values[_Author ]) > 0 then _Author := L.Values[_Author ]; if Length(L.Values[_Mail ]) > 0 then _Mail := L.Values[_Mail ]; if Length(L.Values[_Web ]) > 0 then _Web := L.Values[_Web ]; if Length(L.Values[_Copyright ]) > 0 then _Copyright := L.Values[_Copyright ]; if Length(L.Values[_Company ]) > 0 then _Company := L.Values[_Company ]; if Length(L.Values[_Remark ]) > 0 then _Remark := L.Values[_Remark ]; if Length(L.Values[_DeleteNode ]) > 0 then _DeleteNode := L.Values[_DeleteNode ]; if Length(L.Values[_SaveChanges ]) > 0 then _SaveChanges := L.Values[_SaveChanges ]; if Length(L.Values[_EnterName ]) > 0 then _EnterName := L.Values[_EnterName ]; if Length(L.Values[_DeleteScheme ]) > 0 then _DeleteScheme := L.Values[_DeleteScheme ]; if Length(L.Values[_Confirm ]) > 0 then _Confirm := L.Values[_Confirm ]; Ini.ReadSectionValues('popPanels', L); with popPanels do for i := 0 to 4 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popStandard', L); with popStandard do for i := 0 to 7 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popTagMenus', L); with popOpenTagMenu do for i := 0 to 8 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popTagMenus', L); with popCloseTagMenu do for i := 0 to 8 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popRootMenu', L); with popRootMenu do for i := 0 to 15 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popRangeMenu', L); with popRangeMenu do for i := 0 to 16 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popKeywordsMenu', L); with popKeywordsMenu do for i := 0 to 11 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popSetMenu', L); with popSetMenu do for i := 0 to 11 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popSampleMemoMenu', L); with popSampleMemoMenu do for i := 0 to 9 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('popColorStd', L); with popColorStd do for i := 0 to 15 do if Length(L.Values[Items[i].Caption]) > 0 then Items[i].Caption := L.Values[Items[i].Caption]; Ini.ReadSectionValues('pLeft', L); if Length(L.Values[pLeftCapt.Caption ]) > 0 then pLeftCapt.Caption := L.Values[pLeftCapt.Caption ]; if Length(L.Values[lbRootMenu.Hint ]) > 0 then lbRootMenu.Hint := L.Values[lbRootMenu.Hint ]; Ini.ReadSectionValues('pMiddle', L); if Length(L.Values[pMiddleCapt.Caption ]) > 0 then pMiddleCapt.Caption := L.Values[pMiddleCapt.Caption ]; if Length(L.Values[lbPropBack.Hint ]) > 0 then lbPropBack.Hint := L.Values[lbPropBack.Hint ]; if Length(L.Values[lbRuleMenu.Hint ]) > 0 then lbRuleMenu.Hint := L.Values[lbRuleMenu.Hint ]; Ini.ReadSectionValues('tabRoot', L); if Length(L.Values[chCaseRoot.Caption ]) > 0 then chCaseRoot.Caption := L.Values[chCaseRoot.Caption ]; if Length(L.Values[chEnabledRoot.Caption ]) > 0 then chEnabledRoot.Caption := L.Values[chEnabledRoot.Caption ]; if Length(L.Values[lbDelimitersRoot.Caption ]) > 0 then lbDelimitersRoot.Caption := L.Values[lbDelimitersRoot.Caption ]; if Length(L.Values[btAddRangeRoot.Caption ]) > 0 then btAddRangeRoot.Caption := L.Values[btAddRangeRoot.Caption ]; if Length(L.Values[btAddKeywordsRoot.Caption ]) > 0 then btAddKeywordsRoot.Caption := L.Values[btAddKeywordsRoot.Caption ]; if Length(L.Values[btAddSetRoot.Caption ]) > 0 then btAddSetRoot.Caption := L.Values[btAddSetRoot.Caption ]; Ini.ReadSectionValues('tabRange', L); if Length(L.Values[chCaseRange.Caption ]) > 0 then chCaseRange.Caption := L.Values[chCaseRange.Caption ]; if Length(L.Values[chEnabledRange.Caption ]) > 0 then chEnabledRange.Caption := L.Values[chEnabledRange.Caption ]; if Length(L.Values[lbRangeFrom.Caption ]) > 0 then lbRangeFrom.Caption := L.Values[lbRangeFrom.Caption ]; if Length(L.Values[lbRangeTo.Caption ]) > 0 then lbRangeTo.Caption := L.Values[lbRangeTo.Caption ]; if Length(L.Values[chCloseOnWord.Caption ]) > 0 then chCloseOnWord.Caption := L.Values[chCloseOnWord.Caption ]; if Length(L.Values[chCloseOnEol.Caption ]) > 0 then chCloseOnEol.Caption := L.Values[chCloseOnEol.Caption ]; if Length(L.Values[chCloseParent.Caption ]) > 0 then chCloseParent.Caption := L.Values[chCloseParent.Caption ]; if Length(L.Values[lbDelimitersRange.Caption ]) > 0 then lbDelimitersRange.Caption := L.Values[lbDelimitersRange.Caption ]; if Length(L.Values[btAddRange.Caption ]) > 0 then btAddRange.Caption := L.Values[btAddRange.Caption ]; if Length(L.Values[btAddKeywords.Caption ]) > 0 then btAddKeywords.Caption := L.Values[btAddKeywords.Caption ]; if Length(L.Values[btAddSet.Caption ]) > 0 then btAddSet.Caption := L.Values[btAddSet.Caption ]; Ini.ReadSectionValues('tabKeywords', L); if Length(L.Values[chEnabledKeyList.Caption ]) > 0 then chEnabledKeyList.Caption := L.Values[chEnabledKeyList.Caption ]; if Length(L.Values[btSort.Hint ]) > 0 then btSort.Hint := L.Values[btSort.Hint ]; if Length(L.Values[btLowerCase.Hint ]) > 0 then btLowerCase.Hint := L.Values[btLowerCase.Hint ]; if Length(L.Values[btSpacesToEol.Hint ]) > 0 then btSpacesToEol.Hint := L.Values[btSpacesToEol.Hint ]; if Length(L.Values[_Lines ]) > 0 then _Lines := L.Values[_Lines ]; Ini.ReadSectionValues('tabSet', L); if Length(L.Values[chEnabledSet.Caption ]) > 0 then chEnabledSet.Caption := L.Values[chEnabledSet.Caption ]; if Length(L.Values[lbSymbSet.Caption ]) > 0 then lbSymbSet.Caption := L.Values[lbSymbSet.Caption ]; Ini.ReadSectionValues('tabSeveralRules', L); if Length(L.Values[Label1.Caption]) > 0 then Label1.Caption := L.Values[Label1.Caption]; Ini.ReadSectionValues('pRight', L); if Length(L.Values[pRightCapt.Caption ]) > 0 then pRightCapt.Caption := L.Values[pRightCapt.Caption ]; if Length(L.Values[chForeground.Caption ]) > 0 then chForeground.Caption := L.Values[chForeground.Caption ]; if Length(L.Values[chBackground.Caption ]) > 0 then chBackground.Caption := L.Values[chBackground.Caption ]; if Length(L.Values[chBold.Caption ]) > 0 then chBold.Caption := L.Values[chBold.Caption ]; if Length(L.Values[chItalic.Caption ]) > 0 then chItalic.Caption := L.Values[chItalic.Caption ]; if Length(L.Values[chUnderline.Caption ]) > 0 then chUnderline.Caption := L.Values[chUnderline.Caption ]; if Length(L.Values[chStrikeOut.Caption ]) > 0 then chStrikeOut.Caption := L.Values[chStrikeOut.Caption ]; { if Length(L.Values[lbScheme.Caption ]) > 0 then lbScheme.Caption := L.Values[lbScheme.Caption ]; if Length(L.Values[btNewScheme.Caption ]) > 0 then btNewScheme.Caption := L.Values[btNewScheme.Caption ]; if Length(L.Values[btDelScheme.Caption ]) > 0 then btDelScheme.Caption := L.Values[btDelScheme.Caption ]; } Ini.ReadSectionValues('pBottom', L); if Length(L.Values[pBottomCapt.Caption ]) > 0 then pBottomCapt.Caption := L.Values[pBottomCapt.Caption ]; if Length(L.Values[lbSampMin.Hint ]) > 0 then lbSampMin.Hint := L.Values[lbSampMin.Hint ]; if Length(L.Values[lbSampMax.Hint ]) > 0 then lbSampMax.Hint := L.Values[lbSampMax.Hint ]; { if Length(L.Values[]) > 0 then := L.Values[]; if Length(L.Values[]) > 0 then := L.Values[]; } L.Free; end; //=== TreeView =============================================================== procedure TfmDesigner.TreeEdited(Sender: TObject; Node: TTreeNode; var S: TNodeText); begin if Node.Data = nil then Exit; if TObject(Node.Data) is TSynRange then TSynRange(Node.Data).Name := S; if TObject(Node.Data) is TSynKeyList then TSynKeyList(Node.Data).Name := S; if TObject(Node.Data) is TSynSet then TSynSet(Node.Data).Name := S; Modified(); end; procedure TfmDesigner.TreeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_DELETE then DoDeleteNode(Sender) else if Key = VK_F2 then DoRenameNode(Sender) else if popPropMenu = popRootMenu then if (Key = ord('X')) and (ssCtrl in Shift) then rootCutClick(Sender) else if (Key = ord('C')) and (ssCtrl in Shift) then rootCopyClick(Sender) else if (Key = ord('V')) and (ssCtrl in Shift) then rootPasteInsideClick(Sender) else else if popPropMenu = popRangeMenu then if (Key = ord('X')) and (ssCtrl in Shift) then rangeCutClick(Sender) else if (Key = ord('C')) and (ssCtrl in Shift) then rangeCopyClick(Sender) else if (Key = ord('V')) and (ssCtrl in Shift) then rangePasteInsideClick(Sender) else else if (popPropMenu = popKeywordsMenu) or (popPropMenu = popSetMenu) then if (Key = ord('X')) and (ssCtrl in Shift) then rangeCutClick(Sender) else if (Key = ord('C')) and (ssCtrl in Shift) then rangeCopyClick(Sender) else if (Key = ord('V')) and (ssCtrl in Shift) then rangePasteNextToClick(Sender) else else end; procedure TfmDesigner.TreeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //: Handle Right Mouse Up on the Tree var iNode: TTreeNode; begin if Button <> mbRight then Exit; // Tree.PopupMenu := nil; // iNode := Tree.GetNodeAt( X, Y ); iNode := Tree.GetNodeAt( X, Y ); // Tree.PopupMenu := popRuleMenu; // Tree.Items.Item[0].Focused := True; // TreeChange(Sender, iNode); if iNode <> nil then begin iNode.Selected := True; TreeChange(Sender, Tree.Selected); // TreeChange(Sender, iNode); // popRuleMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; procedure TfmDesigner.TreeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //: Handle Right Mouse Up on the Tree //: ??? Переделать ??? var iNode: TTreeNode; begin if Button <> mbRight then Exit; iNode := Tree.GetNodeAt( X, Y ); // TreeChange(Sender, iNode); if iNode <> nil then iNode.Selected := True; TreeChange(Sender, Tree.Selected); { case GetNodeType(Tree.Selected) of ntRoot: popRootMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); ntRange: popRangeMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); ntKeywords: popKeywordsMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); ntSet: popSetMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end;} popPropMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); // TreeChange(Sender, iNode); // popRuleMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfmDesigner.TreeClick(Sender: TObject); begin TreeChange(Sender, Tree.Selected); end; procedure TfmDesigner.TreeChange(Sender: TObject; Node: TTreeNode); var Range: TSynRange; Symbol: string; len: integer; // list: TList; begin UpdatingControls := True; // ListBox1.Clear; // list := TList.Create; // Tree.GetSelections(list); { for i := 0 to list.Count-1 do ListBox1.Items.Add(TTreeNode(list.Items[i]).Text); list.Free;} if Tree.SelectionCount > 1 then PageControl.ActivePage := tabSeveralRules else if Tree.SelectionCount = 1 then begin // Tree.Selected := TTreeNode(list.Items[0]); case GetNodeType(Node) of ntRange, ntRangeLink: begin if (TObject(Node.Data) is TSynRangeLink) then Range := TSynRangeLink(Node.Data).Range else Range := TSynRange(Node.Data); with Range do begin Symbol := fRule.fOpenSymbol.Symbol; edFrom.Text := Symbol; len := length(Symbol); if len > 0 then chFromEOL.Checked := Symbol[len] = #0 else chFromEOL.Checked := False; Symbol := fRule.fCloseSymbol.Symbol; edTo.Text := Symbol; len := length(Symbol); if len > 0 then chToEOL.Checked := Symbol[len] = #0 else chToEOL.Checked := False; chEnabledRange.Checked := Enabled; chCloseOnWord.Checked := fRule.fCloseOnTerm; chCloseOnEOL.Checked := fRule.fCloseOnEol; chCloseParent.Checked := fRule.fAllowPredClose; chCaseRange.Checked := CaseSensitive; edDelimitersRange.Text := SetToStr(TermSymbols); popOpenTagMenu.Items.Items[2].Checked := fRule.fOpenSymbol.StartLine = slFirst; popOpenTagMenu.Items.Items[3].Checked := fRule.fOpenSymbol.StartLine = slFirstNonSpace; popCloseTagMenu.Items.Items[2].Checked := fRule.fCloseSymbol.StartLine = slFirst; popCloseTagMenu.Items.Items[3].Checked := fRule.fCloseSymbol.StartLine = slFirstNonSpace; if fRule.fOpenSymbol.StartType = stAny then if fRule.fOpenSymbol.BrakeType = btAny then popOpenTagMenu.Items.Items[5].Checked := True else popOpenTagMenu.Items.Items[7].Checked := True else if fRule.fOpenSymbol.BrakeType = btAny then popOpenTagMenu.Items.Items[6].Checked := True else popOpenTagMenu.Items.Items[8].Checked := True; if fRule.fCloseSymbol.StartType = stAny then if fRule.fCloseSymbol.BrakeType = btAny then popCloseTagMenu.Items.Items[5].Checked := True else popCloseTagMenu.Items.Items[7].Checked := True else if fRule.fCloseSymbol.BrakeType = btAny then popCloseTagMenu.Items.Items[6].Checked := True else popCloseTagMenu.Items.Items[8].Checked := True; SetControlAttributes(Node, True); PageControl.ActivePage := tabRange; end; end; ntRoot: begin chEnabledRoot.Checked := TSynRange(Node.data).Enabled; SetControlAttributes(Node, True); chCaseRoot.Checked := TSynRange(Node.data).CaseSensitive; edStylesFile.Text := SynUniSyn.SchemeFileName; edDelimitersRoot.text := SetToStr(TSynRange(Node.data).TermSymbols); PageControl.ActivePage := tabRoot; end; ntKeywords: begin chEnabledKeyList.Checked := TSynKeyList(Node.Data).Enabled; Memo.Lines.Assign(TSynKeyList(Node.Data).KeyList); SetControlAttributes(Node, True); PageControl.ActivePage := tabKeywords; end; ntSet: begin chEnabledSet.Checked := TSynSet(Node.Data).Enabled; SetControlAttributes(Node, True); edSymbSet.Text := SetToStr(TSynSet(Node.Data).SymbSet); PageControl.ActivePage := tabSet; end; end; end; UpdatingControls := False; end; //=== Fill Tree with Rules =================================================== procedure TfmDesigner.FillTree; //: Fill Tree with Rules begin TreeAddRange(nil, SynUniSyn.MainRules); end; procedure TfmDesigner.SetNodeData(Node: TTreeNode; Rule: TAbstractRule; Root: boolean); begin if Root then begin Node.ImageIndex := 0; Node.SelectedIndex := 0; end else if Rule is TSynRangeLink then begin Node.ImageIndex := 4; Node.SelectedIndex := 4; end else if Rule is TSynRange then begin Node.ImageIndex := 1; Node.SelectedIndex := 1; end else if Rule is TSynKeyList then begin Node.ImageIndex := 2; Node.SelectedIndex := 2; end else if Rule is TSynSet then begin Node.ImageIndex := 3; Node.SelectedIndex := 3; end else raise Exception.Create(ClassName + '.SetNodeData - Unknown rule to set node!'); Node.Data := Rule; end; function TfmDesigner.TreeAddRule(ParentNode: TTreeNode; Rule: TSynRule; AddKind: TAddKind): TTreeNode; begin // if Rule is TSynRangeLink then Result:= TreeAddRangeLink(ParentNode, TSynRangeLink(Rule), AddKind) else if Rule is TSynRange then Result:= TreeAddRange(ParentNode, TSynRange(Rule), AddKind) else if Rule is TSynKeyList then Result:= TreeAddKeyList(ParentNode, TSynKeyList(Rule), AddKind) else if Rule is TSynSet then Result:= TreeAddSet(ParentNode, TSynSet(Rule), AddKind) else raise Exception.Create(ClassName + '.TreeAddRule - Unknown rule to add!'); end; function TfmDesigner.TreeAddRangeLink(Node: TTreeNode; RangeLink: TSynRangeLink; AddKind: TAddKind): TTreeNode; begin Result := Tree.Items.AddChild(Node, RangeLink.Range.Name); SetNodeData(Result, RangeLink); end; function TfmDesigner.TreeAddRange(Node: TTreeNode; Range: TSynRange; AddKind: TAddKind): TTreeNode; var i, ind: integer; begin if AddKind = akReplace then Result := Node else if Node = nil then begin Result := Tree.Items.Add(nil, Range.Name); SetNodeData(Result, Range, True); end else begin if AddKind = akInsert then begin ind := Node.Index; {$IFNDEF FPC} Result := Tree.Items.Insert(Node.Parent.Item[ind], Range.Name) {$ELSE} Result := Tree.Items.Insert(Node.Parent.Items[ind], Range.Name) {$ENDIF} end else Result := Tree.Items.AddChild(Node, Range.Name); SetNodeData(Result, Range); end; for i := 0 to Range.KeyListCount-1 do TreeAddKeyList(Result, Range.KeyLists[i]); for i := 0 to Range.SetCount-1 do TreeAddSet(Result, Range.Sets[i]); for i := 0 to Range.RangeCount-1 do TreeAddRange(Result, Range.Ranges[i]); end; function TfmDesigner.TreeAddKeyList(Node: TTreeNode; Keyword: TSynKeyList; AddKind: TAddKind): TTreeNode; var i, ind: integer; NeedToInsert: boolean; begin if AddKind = akReplace then Result := Node else if AddKind = akInsert then begin ind := Node.Index; {$IFNDEF FPC} Result := Tree.Items.Insert(Node.Parent.Item[ind], Keyword.Name) {$ELSE} Result := Tree.Items.Insert(Node.Parent.Items[ind], Keyword.Name) {$ENDIF} end else if Node.Count = 0 then Result := Tree.Items.AddChild(Node, Keyword.Name) else begin NeedToInsert := False; for i := 0 to Node.Count-1 do {$IFNDEF FPC} if (TObject(Node.Item[i].Data) is TSynRange) or (TObject(Node.Item[i].Data) is TSynSet) then begin {$ELSE} if (TObject(Node.Items[i].Data) is TSynRange) or (TObject(Node.Items[i].Data) is TSynSet) then begin {$ENDIF} NeedToInsert := True; break; end; {$IFNDEF FPC} if NeedToInsert then Result := Tree.Items.Insert(Node.Item[i], Keyword.Name) {$ELSE} if NeedToInsert then Result := Tree.Items.Insert(Node.Items[i], Keyword.Name) {$ENDIF} else Result := Tree.Items.AddChild(Node, Keyword.Name); end; SetNodeData(Result, Keyword); end; function TfmDesigner.TreeAddSet(Node: TTreeNode; SymbSet: TSynSet; AddKind: TAddKind): TTreeNode; var i, ind: integer; NeedToInsert: boolean; begin if AddKind = akReplace then Result := Node else if AddKind = akInsert then begin ind := Node.Index; {$IFNDEF FPC} Result := Tree.Items.Insert(Node.Parent.Item[ind], SymbSet.Name) {$ELSE} Result := Tree.Items.Insert(Node.Parent.Items[ind], SymbSet.Name) {$ENDIF} end else if Node.Count = 0 then Result := Tree.Items.AddChild(Node, SymbSet.Name) else begin NeedToInsert := False; for i := 0 to Node.Count-1 do {$IFNDEF FPC} if TObject(Node.Item[i].Data) is TSynRange then begin {$ELSE} if TObject(Node.Items[i].Data) is TSynRange then begin {$ENDIF} NeedToInsert := True; break; end; {$IFNDEF FPC} if NeedToInsert then Result := Tree.Items.Insert(Node.Item[i], SymbSet.Name) {$ELSE} if NeedToInsert then Result := Tree.Items.Insert(Node.Items[i], SymbSet.Name) {$ENDIF} else Result := Tree.Items.AddChild(Node, SymbSet.Name); end; SetNodeData(Result, SymbSet); end; //=== Adding RangeLink ======================================================= procedure TfmDesigner.DoAddRangeLinkToRoot(Sender:TObject); //: Click on button begin AddingRangeLink(Tree.Items[0]); Modified(); end; procedure TfmDesigner.DoAddRangeLink(Sender: TObject); //: Click on button begin AddingRangeLink(Tree.Selected); Modified(); end; procedure TfmDesigner.AddingRangeLink(ParentNode: TTreeNode); var Node: TTreeNode; RangeLink: TSynRangeLink; // i: integer; begin RangeLink := TSynRangeLink.Create(SynUniSyn.MainRules.Ranges[6]); TSynRange(ParentNode.Data).AddRangeLink(RangeLink); Node := TreeAddRangeLink(ParentNode, RangeLink); with Node do begin Expand(False); Selected := True; Tree.SetFocus; EditText; end; { Range.ClearAttributes(); for i := 0 to SynUniSyn.SchemesList.Count-1 do begin TSynRange(ParentNode.Data).SetAttributesIndex(i); Range.AddAttribute(); SetDefaultAttributes(Node); end; TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex);} SetControlAttributes(Node); end; //=== Adding Range =========================================================== procedure TfmDesigner.DoAddRangeToRoot(Sender:TObject); //: Click on button begin AddingRange(Tree.Items[0]); Modified(); end; procedure TfmDesigner.DoAddRange(Sender: TObject); //: Click on button begin AddingRange(Tree.Selected); Modified(); end; procedure TfmDesigner.AddingRange(ParentNode: TTreeNode); var Node: TTreeNode; Range: TSynRange; i: integer; begin if ParentNode = nil then begin //Never happened ??? Tree.Items.Clear; Node := Tree.Items.Add(nil, _Root); SynUniSyn.MainRules.Name := _Root; Node.Data := SynUniSyn.MainRules; Node.ImageIndex := 0; Node.SelectedIndex := 0; Exit; end else begin Range := TSynRange.Create; Range.Name := _New; TSynRange(ParentNode.Data).AddRange(Range); Node := TreeAddRange(ParentNode, Range); with Node do begin Expand(False); Selected := True; Tree.SetFocus; EditText; end; end; // Range.ClearAttributes(); for i := 0 to SynUniSyn.SchemesList.Count-1 do begin // TSynRange(ParentNode.Data).SetAttributesIndex(i); // Range.AddAttribute(); SetDefaultAttributes(Node); end; // TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex); SetControlAttributes(Node); end; //=== Adding KeyList ========================================================= procedure TfmDesigner.DoAddKeywordToRoot(Sender:TObject); //: Click on button begin AddingKeyword(Tree.Items[0]); Modified(); end; procedure TfmDesigner.DoAddKeyword(Sender: TObject); //: Click on button begin AddingKeyWord(Tree.selected); Modified(); end; procedure TfmDesigner.AddingKeyWord(ParentNode: TTreeNode); var Node: TTreeNode; Keyword: TSynKeyList; i: integer; begin Keyword := TSynKeyList.Create; Keyword.Name := _New; Node := TreeAddKeyList(ParentNode, Keyword); with Node do begin Expand(False); Selected := True; Tree.SetFocus; EditText; end; // Keyword.ClearAttributes(); for i := 0 to SynUniSyn.SchemesList.Count-1 do begin // TSynRange(ParentNode.Data).SetAttributesIndex(i); // Keyword.AddAttribute(); SetDefaultAttributes(Node); end; // TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex); TSynRange(ParentNode.Data).AddKeyList(Keyword); SetControlAttributes(Node); end; //=== Adding Set ============================================================= procedure TfmDesigner.DoAddSetToRoot(Sender:TObject); //: Click on button begin AddingSet(Tree.Items[0]); Modified(); end; procedure TfmDesigner.DoAddSet(Sender: TObject); //: Click on button begin AddingSet(Tree.Selected); Modified(); end; procedure TfmDesigner.AddingSet(ParentNode: TTreeNode); var Node: TTreeNode; SymbolSet: TSynSet; i: integer; begin SymbolSet := TSynSet.Create; SymbolSet.Name := _New; TSynRange(ParentNode.data).AddSet(SymbolSet); Node := TreeAddSet(ParentNode, SymbolSet); with Node do begin Expand(False); Selected := True; Tree.SetFocus; EditText; end; // SymbolSet.ClearAttributes(); for i := 0 to SynUniSyn.SchemesList.Count-1 do begin // TSynRange(ParentNode.Data).SetAttributesIndex(i); // SymbolSet.AddAttribute(); SetDefaultAttributes(Node); end; // TSynRange(ParentNode.Data).SetAttributesIndex(SynUniSyn.SchemeIndex); SetControlAttributes(Node); end; //=== Delete and Rename Rules ================================================ procedure TfmDesigner.DoDeleteNode(Sender: TObject); begin if not Tree.IsEditing then if not ShowDialog or (Application.MessageBox(PChar(Format(_DeleteNode,[Tree.Selected.Text])), PChar(_Confirm), MB_YESNOCANCEL+MB_ICONQUESTION) = ID_YES) then begin DeleteNode(Tree.Selected); TotalUpdate; Modified(); end; ShowDialog := True; end; procedure TfmDesigner.DeleteNode(Node: TTreeNode; OnlyChilds: boolean); begin //Node.DeleteChildren; - когда-нить исправить! while Node.Count > 0 do DeleteNode(Node[0]); if (TSynRange(Node.Data) <> SynUniSyn.MainRules) and not OnlyChilds then begin if TObject(Node.Data) is TSynRange then TSynRange(Node.Parent.Data).DeleteRange(TSynRange(Node.Data)) else if TObject(Node.Data) is TSynKeyList then TSynRange(Node.Parent.Data).DeleteKeyList(TSynKeyList(Node.Data)) else if TObject(Node.Data) is TSynSet then TSynRange(Node.Parent.Data).DeleteSet(TSynSet(Node.Data)); Node.Delete; end; end; procedure TfmDesigner.DoRenameNode(Sender: TObject); begin Tree.Selected.EditText; end; //=== Usefuk functions... ==================================================== function TfmDesigner.GetNodeType(Node: TTreeNode): TNodeType; begin Result := ntNone; if Node <> nil then if (TObject(Node.Data) is TSynRange) and (Node.Level = 0) then Result := ntRoot else if (TObject(Node.Data) is TSynRangeLink) then Result := ntRangeLink else if (TObject(Node.Data) is TSynRange) then Result := ntRange else if (TObject(Node.Data) is TSynKeyList) then Result := ntKeywords else if (TObject(Node.Data) is TSynSet) then Result := ntSet; end; procedure TfmDesigner.TotalUpdate; begin SynUniSyn.Reset; SynUniSyn.MainRules.Reset; SynUniSyn.ResetRange; SynUniSyn.Prepare; SampleMemo.Highlighter := nil; SampleMemo.Highlighter := SynUniSyn; SampleMemo.Refresh; end; procedure TfmDesigner.Modified(State: boolean = True); begin if State then begin btApply.Enabled := True; StatusBar.Panels.Items[0].Text := _Modified; end else begin btApply.Enabled := False; StatusBar.Panels.Items[0].Text := ''; end; end; //=== KeyList Tools ========================================================== procedure TfmDesigner.btSort_oldClick(Sender: TObject); var i: integer; begin With TStringList.Create do try Sorted := True; Duplicates := dupIgnore; for i := 0 to Memo.Lines.Count-1 do if Trim(Memo.Lines[i]) <> '' then Add(Trim(Memo.Lines[i])); Sort; Memo.Text := Trim(Text); finally Free; end; end; procedure TfmDesigner.btLowerCase_oldClick(Sender: TObject); begin Memo.text := LowerCase(Memo.Text); end; procedure TfmDesigner.btSpacesToEol_oldClick(Sender: TObject); begin Memo.text := StringReplace(Memo.Text, ' ', #13#10, [rfReplaceAll]); end; //=== Finish buttons ========================================================= procedure TfmDesigner.btOkClick(Sender: TObject); begin if Tree.IsEditing then Tree.Selected.EndEdit(False) else if btApply.Enabled then begin btApplyClick(Sender); ModalResult := mrOk; end else if (btApply.Tag = 1) then ModalResult := mrOk else ModalResult := mrCancel; ForceClose := True; end; procedure TfmDesigner.btCancelClick(Sender: TObject); begin ModalResult := mrCancel; ForceClose := True; end; procedure TfmDesigner.btApplyClick(Sender: TObject); var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; SynUniSyn.SaveToStream(Stream); Stream.Position := 0; OriginalSyn.LoadFromStream(Stream); OriginalSyn.Info.Sample.Text := SampleMemo.Text; Modified(False); btApply.Tag := 1; end; //=== Work with schemes ====================================================== {procedure TfmDesigner.btNewSchemeClick(Sender: TObject); var Name: string; begin if InputQuery(_EnterName, _EnterName, Name) then begin SynUniSyn.AddNewScheme(Name); SynUniSyn.MainRules.Attribs.ParentForeground := False; SynUniSyn.MainRules.Attribs.ParentBackground := False; cbScheme.ItemIndex := cbScheme.Items.Add(Name); SetControlAttributes(Tree.Selected); TotalUpdate; Modified(); end; end; procedure TfmDesigner.btDelSchemeClick(Sender: TObject); var Index: integer; begin if cbScheme.Items.Count > 1 then if Application.MessageBox(PChar(_DeleteScheme),PChar(_Confirm),MB_YESNOCANCEL+MB_ICONQUESTION) = ID_YES then begin Index := cbScheme.ItemIndex; cbScheme.Items.Delete(Index); SynUniSyn.DeleteScheme(Index); if cbScheme.Items.Count = Index then cbScheme.ItemIndex := Index-1 else cbScheme.ItemIndex := Index; SetControlAttributes(Tree.Selected); TotalUpdate; Modified(); end; end; procedure TfmDesigner.cbSchemeSelect(Sender: TObject); begin SynUniSyn.SetSchemeIndex(cbScheme.ItemIndex); SetControlAttributes(Tree.Selected); TotalUpdate; Modified(); end; procedure TfmDesigner.cbSchemeChange(Sender: TObject); var SelStart, SelLength: integer; begin if cbScheme.ItemIndex > -1 then cbScheme.Tag := cbScheme.ItemIndex; SelStart := cbScheme.SelStart; SelLength := cbScheme.SelLength; cbScheme.Items[cbScheme.Tag] := cbScheme.Text; cbScheme.ItemIndex := cbScheme.Tag; SynUniSyn.SchemesList.Strings[cbScheme.Tag] := cbScheme.Text; cbScheme.SelStart := SelStart; cbScheme.SelLength := SelLength; Modified(); end;} //=== Rules changed ========================================================== procedure TfmDesigner.RootChange(Sender: TObject); var i: integer; begin if UpdatingControls then Exit; with SynUniSyn do begin SchemeFileName := edStylesFile.Text; if Styles <> nil then begin Styles.Free; Styles := nil; end; if FileExists(SchemeFileName) then begin Styles := TSynUniStyles.Create; Styles.FileName := SchemeFileName; Styles.Load; end; end; with TSynRange(Tree.Selected.Data) do begin if GetNodeType(Tree.Selected) in [ntRoot] then begin CaseSensitive := chCaseRoot.Checked; Enabled := chEnabledRoot.Checked; end; TermSymbols := []; { the apparently useless typecast to char is for CLX compatibility } for i := 1 to length(edDelimitersRoot.Text) do TermSymbols := TermSymbols + [char(edDelimitersRoot.Text[i])]; TotalUpdate; end; Modified(); end; procedure TfmDesigner.RangeChange(Sender: TObject); var i: integer; null: string; Range: TSynRange; begin if UpdatingControls then Exit; if GetNodeType(Tree.Selected) in [ntRange, ntRangeLink] then begin if TObject(Tree.Selected.Data) is TSynRange then Range := TSynRange(Tree.Selected.Data) else if TObject(Tree.Selected.Data) is TSynRangeLink then Range := TSynRangeLink(Tree.Selected.Data).Range else Exit; with Range do begin if chFromEOL.Checked then null := #0 else null := ''; fRule.fOpenSymbol.Symbol := edFrom.Text + null; if chToEOL.Checked then null := #0 else null := ''; fRule.fCloseSymbol.Symbol := edTo.Text + null; Enabled := chEnabledRange.Checked; fRule.fCloseOnTerm := chCloseOnWord.Checked; fRule.fCloseOnEol := chCloseOnEOL.Checked; fRule.fAllowPredClose := chCloseParent.Checked; CaseSensitive := chCaseRange.Checked; TermSymbols := StrToSet(edDelimitersRange.Text); { the apparently useless typecast to char is for CLX compatibility } for i := 1 to Length(edDelimitersRange.Text) do TermSymbols := TermSymbols + [Char(edDelimitersRange.Text[i])]; if popOpenTagMenu.Items.Items[2].Checked then fRule.fOpenSymbol.StartLine := slFirst else if popOpenTagMenu.Items.Items[3].Checked then fRule.fOpenSymbol.StartLine := slFirstNonSpace else fRule.fOpenSymbol.StartLine := slNotFirst; if popCloseTagMenu.Items.Items[2].Checked then fRule.fCloseSymbol.StartLine := slFirst else if popCloseTagMenu.Items.Items[3].Checked then fRule.fCloseSymbol.StartLine := slFirstNonSpace else fRule.fCloseSymbol.StartLine := slNotFirst; if popOpenTagMenu.Items.Items[5].Checked then begin fRule.fOpenSymbol.StartType := stAny; fRule.fOpenSymbol.BrakeType := btAny; end else if popOpenTagMenu.Items.Items[6].Checked then begin fRule.fOpenSymbol.StartType := stTerm; fRule.fOpenSymbol.BrakeType := btAny; end else if popOpenTagMenu.Items.Items[7].Checked then begin fRule.fOpenSymbol.StartType := stAny; fRule.fOpenSymbol.BrakeType := btTerm; end else if popOpenTagMenu.Items.Items[8].Checked then begin fRule.fOpenSymbol.StartType := stTerm; fRule.fOpenSymbol.BrakeType := btTerm; end; if popCloseTagMenu.Items.Items[5].Checked then begin fRule.fCloseSymbol.StartType := stAny; fRule.fCloseSymbol.BrakeType := btAny; end else if popCloseTagMenu.Items.Items[6].Checked then begin fRule.fCloseSymbol.StartType := stTerm; fRule.fCloseSymbol.BrakeType := btAny; end else if popCloseTagMenu.Items.Items[7].Checked then begin fRule.fCloseSymbol.StartType := stAny; fRule.fCloseSymbol.BrakeType := btTerm; end else if popCloseTagMenu.Items.Items[8].Checked then begin fRule.fCloseSymbol.StartType := stTerm; fRule.fCloseSymbol.BrakeType := btTerm; end; end; end; TotalUpdate; Modified(); end; procedure TfmDesigner.KeywordsChange(Sender: TObject); begin lbKeywordCount.Caption := Format(_Lines, [Memo.Lines.Count]); if UpdatingControls then Exit; TSynKeyList(Tree.Selected.Data).Enabled := chEnabledKeyList.Checked; TSynKeyList(Tree.Selected.Data).KeyList.Text := Memo.Lines.Text; TotalUpdate; Modified(); end; procedure TfmDesigner.SetChange(Sender: TObject); begin if UpdatingControls then Exit; TSynSet(Tree.Selected.Data).Enabled := chEnabledSet.Checked; TSynSet(Tree.Selected.Data).SymbSet := StrToSet(edSymbSet.Text); TotalUpdate; Modified(); end; //=== Wotk with Attributes =================================================== procedure TfmDesigner.AttributesChanged(Sender: TObject); begin SetAttributes(Tree.Selected); end; procedure TfmDesigner.SetDefaultAttributes(Node: TTreeNode); begin if TObject(Node.Data) is TSynRule then with TSynRule(Node.Data).Attribs do begin ParentForeground := True; ParentBackground := True; Foreground := TSynRange(Node.Parent.Data).Attribs.Foreground; Background := TSynRange(Node.Parent.Data).Attribs.Background; OldColorForeground := Foreground; OldColorBackground := Background; Style := []; end end; procedure TfmDesigner.SetControlAttributes(Node: TTreeNode; AlreadyUpdate: boolean); var Rule: TSynRule; isCustom: boolean; i: integer; begin UpdatingControls := True; if GetNodeType(Node) in [ntRoot] then begin chForeground.Enabled := False; chBackground.Enabled := False; end else begin chForeground.Enabled := True; chBackground.Enabled := True; end; if TObject(Node.Data) is TSynRule then Rule := TSynRule(Node.Data) else if TObject(Node.Data) is TSynRangeLink then Rule := TSynRangeLink(Node.Data).Range else raise Exception.Create(ClassName + '.SetControlAttributes - Wrong Node data!'); with Rule do begin isCustom := True; for i := 0 to cbStyle.Items.Count-2 do if cbStyle.Items.Strings[i] = Style then begin cbStyle.ItemIndex := i; isCustom := False; continue; end; if isCustom then begin cbStyle.ItemIndex := cbStyle.Items.Count-2; //cbStyle.Text := Style; end; if GetNodeType(Node) in [ntRoot] then begin Attribs.ParentForeground := False; //Need to fix this problem another way... !!! Attribs.ParentBackground := False; end; chForeground.Checked := Attribs.ParentForeground; chBackground.Checked := Attribs.ParentBackground; if Attribs.ParentForeground then pForeColor.Color := TSynRange(Node.Parent.Data).Attribs.Foreground else pForeColor.Color := Attribs.Foreground; if Attribs.ParentBackground then pBackColor.Color := TSynRange(Node.Parent.Data).Attribs.Background else pBackColor.Color := Attribs.Background; chBold.checked := fsBold in Attribs.Style; chItalic.checked := fsItalic in Attribs.Style; chUnderline.checked := fsUnderline in Attribs.Style; chStrikeOut.checked := fsStrikeOut in Attribs.Style; end; if not AlreadyUpdate then UpdatingControls := False; end; procedure TfmDesigner.SetAttributes(Node: TTreeNode); var Rule: TSynRule; begin if UpdatingControls then Exit; if (Node <> nil) then begin if (TObject(Node.Data) is TSynRule) then Rule := TSynRule(Node.Data) else if (TObject(Node.Data) is TSynRangeLink) then Rule := TSynRangeLink(Node.Data).Range else Exit; with Rule.Attribs, Rule do begin Style := cbStyle.Text; if (ParentForeground and not chForeground.Checked) then begin if pForeColor.Color = Foreground then pForeColor.Color := OldColorForeground; end else if (not ParentForeground and chForeground.Checked) then begin OldColorForeground := pForeColor.Color; pForeColor.Color := TSynRange(Node.Parent.Data).Attribs.Foreground end else if chForeground.Checked then if pForeColor.Color <> Foreground then chForeground.Checked := False; if (ParentBackground and not chBackground.Checked) then begin if pBackColor.Color = Background then pBackColor.Color := OldColorBackground; end else if (not ParentBackground and chBackground.Checked) then begin OldColorBackground := pBackColor.Color; pBackColor.Color := TSynRange(Node.Parent.Data).Attribs.Background end else if chBackground.Checked then if pBackColor.Color <> Background then chBackground.Checked := False; ParentForeground := chForeground.Checked; ParentBackground := chBackground.Checked; Foreground := pForeColor.Color; Background := pBackColor.Color; Attribs.Style := GetFontStyle(chBold.checked, chItalic.checked, chUnderline.checked, chStrikeOut.checked); if Styles <> nil then begin Attribs := Styles.GetStyleDef(Style, Attribs); SetControlAttributes(Node); end; if TObject(Node.data) is TSynRange then TSynRange(Node.data).SetColorForChilds; TotalUpdate; end; end; Modified(); end; //============================ D E S I G N =================================== //=== Splitter CanResize ===================================================== procedure TfmDesigner.SplitterBottomCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); begin if pTop.Tag <> -1 then begin Accept := False; Exit; end; if pBottom.Height <= pBottom.Constraints.MinHeight then lbSampMin.Enabled := False else lbSampMin.Enabled := True; if pTop.Height = 0 then lbSampMax.Enabled := False else lbSampMax.Enabled := True; if (0 <= NewSize) and (NewSize < 19) then NewSize := 0 else if (19 <= NewSize) and (NewSize <= 19+10) then NewSize := 19 else if (_pTopHeight-10 <= NewSize) and (NewSize <= _pTopHeight+10) then NewSize := _pTopHeight end; procedure TfmDesigner.SplitterCannotResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); begin Accept := False; end; //=== Label Mouse Leave/Enter ================================================ procedure TfmDesigner.LabelMouseLeave(Sender: TObject); begin (Sender as TLabel).Font.Color := clBtnFace; end; procedure TfmDesigner.LabelMouseEnter(Sender: TObject); begin (Sender as TLabel).Font.Color := clRed; end; procedure TfmDesigner.LabelContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin LabelMouseLeave(Sender); end; //=== CheckBox =============================================================== procedure TfmDesigner.CheckBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then with (Sender as TCheckBox) do Checked := not Checked; end; procedure TfmDesigner.DontNeedContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin Handled := True; end; //=== Show/Hide panels ======================================================= procedure TfmDesigner.ShowHideTree(Sender: TObject); begin if pLeft.Visible then begin pLeft.Hide; SplitterLeft.Hide; end else begin SplitterLeft.Show; pLeft.Show; end; end; procedure TfmDesigner.ShowHideProp(Sender: TObject); begin if pMiddle.Visible then begin pMiddle.Hide; SplitterLeft.Hide; pLeft.Tag := pLeft.Width; pLeft.Align := alClient; end else begin pLeft.Align := alLeft; pLeft.Width := pLeft.Tag; SplitterLeft.Show; pMiddle.Show; end; end; procedure TfmDesigner.ShowHideAttr(Sender: TObject); begin if pRight.Visible then begin pRight.Hide; SplitterRight.Hide; end else begin pRight.Show; SplitterRight.Show; end; end; procedure TfmDesigner.ShowHideSamp(Sender: TObject); begin if pBottom.Visible then begin pBottom.Hide; SplitterBottom.Hide; pTop.Tag := pTop.Height; pTop.Align := alClient; end else begin pTop.Align := alTop; pTop.Height := pTop.Tag; SplitterBottom.Show; pBottom.Show; end; end; procedure TfmDesigner.PanelDblClick(Sender: TObject); begin if (Sender as TPanel).Name = 'pBottomCapt' then begin if pTop.Height = _pTopHeight then lbSampMaxClick(Sender) else begin pTop.Height := _pTopHeight; lbSampMin.Enabled := True; if pTop.Tag <> -1 then lbSampMinClick(Sender); if not pTop.Visible then lbSampMaxClick(Sender); end; end; end; //=== Middle panel Resize ==================================================== procedure TfmDesigner.pMiddleResize(Sender: TObject); begin if tabRoot.Width <> pRootButtons.Width then begin pRootButtons.ScaleBy(tabRoot.Width, pRootButtons.Width); pRootButtons.Height := 24; btAddRangeRoot.Height := 24; btAddKeywordsRoot.Height := 24; btAddSetRoot.Height := 24; end; if tabRange.Width <> pRangeButtons.Width then begin pRangeButtons.ScaleBy(tabRange.Width, pRangeButtons.Width); pRangeButtons.Height := 24; btAddRange.Height := 24; btAddKeywords.Height := 24; btAddSet.Height := 24; end; end; //=== Push label clicks ====================================================== procedure TfmDesigner.lbPropBackClick(Sender: TObject); begin if (Tree.Selected <> Tree.Items[0]) and (Tree.Selected <> nil) then Tree.Selected.Parent.Selected := True; end; procedure TfmDesigner.lbRootMenuClick(Sender: TObject); begin popRootMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); LabelMouseLeave(Sender); end; procedure TfmDesigner.lbRuleMenuClick(Sender: TObject); begin popPropMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); LabelMouseLeave(Sender); end; procedure TfmDesigner.lbSampMaxClick(Sender: TObject); begin if pTop.Visible then begin //: Not maximized (Maximize) pTop.Hide; lbSampMax.Caption := '2'; if pTop.Tag <> -1 then //: Minimized (Restore) lbSampMinClick(Sender); end else begin //: Maximized (Restore) pTop.Show; lbSampMax.Caption := '1'; end; end; (* procedure TfmDesigner.lbSampRestoreClick(Sender: TObject); begin pTop.Height := _pTopHeight; end; *) procedure TfmDesigner.lbSampMinClick(Sender: TObject); begin if pTop.Tag = -1 then begin //: Not minimized (Minimize) pTop.Tag := pTop.Height; pTop.Height := ClientHeight - pBottom.Constraints.MinHeight - SplitterBottom.Height - pButtons.ClientHeight - StatusBar.ClientHeight - SplitterButtons.ClientHeight; lbSampMin.Caption := '2'; if not pTop.Visible then //: Miximized (Restore) lbSampMaxClick(Sender); end else begin //: Minimized (Restore) pTop.Height := pTop.Tag; PTop.Tag := -1; lbSampMin.Caption := '0'; end; end; //============================ P O P U P S =================================== //=== Standard PopupMenu ===================================================== procedure TfmDesigner.SetPopupMenuEnables(Edit: TCustomEdit; popMenu: TPopupMenu); begin with popMenu, Edit do begin Items[0].Enabled := CanUndo; Items[2].Enabled := SelLength <> 0; Items[3].Enabled := SelLength <> 0; Items[4].Enabled := Clipboard.AsText <> ''; Items[5].Enabled := Length(Edit.Text) <> 0;//SelLength <> 0; Items[7].Enabled := Text <> SelText; end; end; procedure TfmDesigner.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin SetPopupMenuEnables((Sender as TCustomEdit), popStandard); end; procedure TfmDesigner.EditContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin SetPopupMenuEnables((Sender as TCustomEdit), popStandard); end; procedure TfmDesigner.popUndoClick(Sender: TObject); begin (ActiveControl as TCustomEdit).Undo; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; procedure TfmDesigner.popCutClick(Sender: TObject); begin (ActiveControl as TCustomEdit).CutToClipboard; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; procedure TfmDesigner.popCopyClick(Sender: TObject); begin (ActiveControl as TCustomEdit).CopyToClipboard; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; procedure TfmDesigner.popPasteClick(Sender: TObject); begin (ActiveControl as TCustomEdit).PasteFromClipboard; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; procedure TfmDesigner.popDeleteClick(Sender: TObject); begin if (ActiveControl as TCustomEdit).SelLength = 0 then (ActiveControl as TCustomEdit).SelLength := 1; (ActiveControl as TCustomEdit).ClearSelection; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; procedure TfmDesigner.popSelectAllClick(Sender: TObject); begin (ActiveControl as TCustomEdit).SelectAll; SetPopupMenuEnables((ActiveControl as TCustomEdit), popStandard); end; //=== Sample Memo PopupMenu ================================================== procedure TfmDesigner.SetPopupMenuEnables2(Edit: TCustomSynEdit; popMenu: TPopupMenu); begin with popMenu, Edit do begin Items[0].Enabled := (Edit.SelEnd - Edit.SelStart) <> 0; Items[2].Enabled := CanUndo; Items[4].Enabled := (Edit.SelEnd - Edit.SelStart) <> 0; Items[5].Enabled := (Edit.SelEnd - Edit.SelStart) <> 0; Items[6].Enabled := Clipboard.AsText <> ''; Items[7].Enabled := (Edit.SelEnd - Edit.SelStart) <> 0; Items[8].Enabled := Text <> SelText; end; end; procedure TfmDesigner.SampleMemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin SetPopupMenuEnables2(SampleMemo, popSampleMemoMenu); end; procedure TfmDesigner.SampleMemoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SetPopupMenuEnables2(SampleMemo, popSampleMemoMenu); end; procedure TfmDesigner.Undo1Click(Sender: TObject); begin SampleMemo.Undo; end; procedure TfmDesigner.Cut1Click(Sender: TObject); begin SampleMemo.CutToClipboard; end; procedure TfmDesigner.Copy1Click(Sender: TObject); begin SampleMemo.CopyToClipboard; end; procedure TfmDesigner.Paste1Click(Sender: TObject); begin SampleMemo.PasteFromClipboard; end; procedure TfmDesigner.Delete1Click(Sender: TObject); begin SampleMemo.ClearSelection; end; procedure TfmDesigner.SelectAll1Click(Sender: TObject); begin SampleMemo.SelectAll; end; procedure TfmDesigner.AddselectedtoKeywords1Click(Sender: TObject); begin if PageControl.ActivePage = tabKeyWords then begin Memo.Lines.Add(SampleMemo.SelText); TotalUpdate; end; end; procedure TfmDesigner.popSampleMemoMenuPopup(Sender: TObject); begin popSampleMemoMenu.Items[0].Visible := PageControl.ActivePage = tabKeyWords; popSampleMemoMenu.Items[1].Visible := PageControl.ActivePage = tabKeyWords; end; //=== Tag Menu Clicks... ===================================================== procedure TfmDesigner.btTagMenuClick(Sender: TObject); var P: TPoint; begin // popTagMenu.Tag := Mouse.CursorPos.X + Mouse.CursorPos.Y shl 16; P := (Sender as TButton).ClientToScreen(Point(0, 0)); if (Sender as TButton).Name = 'btFromMenu' then popOpenTagMenu.Popup(P.x, P.y) else if (Sender as TButton).Name = 'btToMenu' then popCloseTagMenu.Popup(P.x, P.y) // popTagMenu.Popup(popTagMenu.Tag and $FFFF, // popTagMenu.Tag shr 16); end; procedure TfmDesigner.miTagMenuClick(Sender: TObject); begin if not (Sender as TMenuItem).Checked then (Sender as TMenuItem).Checked := True; RangeChange(Sender); end; procedure TfmDesigner.miOpenTagMenuClick(Sender: TObject); var i: integer; begin i := popOpenTagMenu.Items.IndexOf(Sender as TMenuItem); if popOpenTagMenu.Items.Items[5-i].Checked then popOpenTagMenu.Items.Items[5-i].Checked := False; RangeChange(Sender); end; procedure TfmDesigner.miCloseTagMenuClick(Sender: TObject); var i: integer; begin i := popCloseTagMenu.Items.IndexOf(Sender as TMenuItem); if popCloseTagMenu.Items.Items[5-i].Checked then popCloseTagMenu.Items.Items[5-i].Checked := False; RangeChange(Sender); end; //=== ColorBox Clicks... ===================================================== procedure TfmDesigner.PanelColorChange(Sender: TObject); //: Handle clicking on Color panel (Show ColorBox to choose color) begin with TColorDialog.Create(nil) do try CustomColors.Text := 'ColorA='+inttohex((Sender as TPanel).Color,6)+#13#10+'ColorB=FFFFEE'+#13#10+'ColorC=EEFFFF'+#13#10+'ColorD=EEFFEE'+#13#10+'ColorE=EEEEFF'+#13#10+'ColorF=FFEEEE'+#13#10+'ColorG=EEEEEE'+#13#10+'ColorH=FFEEAA'+#13#10+'ColorJ=FFAAEE'+#13#10+'ColorK=AAFFEE'+#13#10+'ColorI=AAEEFF'+#13#10+'ColorL=EEFFAA'+#13#10+'ColorM=EEAAFF'+#13#10+'ColorN=AAAAAA'+#13#10+'ColorO=DDDDDD'+#13#10+'ColorP=999999'; Color := (Sender as TPanel).Color; {$IFNDEF SYN_CLX} {$IFNDEF FPC} Options := [cdFullOpen]; {$ENDIF} {$ENDIF} if Execute then begin (Sender as TPanel).Color := Color; SetAttributes(Tree.Selected); end; finally Free; end; end; procedure TfmDesigner.miColor16Click(Sender: TObject); begin if popColorStd.Tag = 1 then pForeColor.Color := Colors16[(Sender as TMenuItem).ImageIndex] else if popColorStd.Tag = 2 then pBackColor.Color := Colors16[(Sender as TMenuItem).ImageIndex]; SetAttributes(Tree.Selected); end; procedure TfmDesigner.miColorSysClick(Sender: TObject); begin if popColorStd.Tag = 1 then pForeColor.Color := ColorsSys[(Sender as TMenuItem).ImageIndex] else if popColorStd.Tag = 2 then pBackColor.Color := ColorsSys[(Sender as TMenuItem).ImageIndex]; SetAttributes(Tree.Selected); end; procedure TfmDesigner.miColor40Click(Sender: TObject); begin if popColorStd.Tag = 1 then pForeColor.Color := Colors40[(Sender as TMenuItem).ImageIndex] else if popColorStd.Tag = 2 then pBackColor.Color := Colors40[(Sender as TMenuItem).ImageIndex]; SetAttributes(Tree.Selected); end; {$IFNDEF FPC} procedure TfmDesigner.Color40MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Width := 6; end; {$ELSE} procedure TfmDesigner.Color40MeasureItem(Sender: TObject; ACanvas: TCanvas; var AWidth, AHeight: Integer); begin AWidth := 6; end; {$ENDIF} procedure TfmDesigner.pColorMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //var P: TPoint; begin // if (Button = mbRight) or (Button = mbMiddle) then if ((Sender as TPanel).Name = 'pForeColor') or ((Sender as TPanel).Name = 'pForeColorArrow') then popColorStd.Tag := 1 else if ((Sender as TPanel).Name = 'pBackColor') or ((Sender as TPanel).Name = 'pBackColorArrow') then popColorStd.Tag := 2; // P := ((Sender as TPanel).Parent as TPanel).ClientToScreen(Point(-1, ((Sender as TPanel).Parent as TPanel).Height-1)); if (Button = mbMiddle) then popColorSys.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else if ((Button = mbRight) and (ssLeft in Shift)) then popColorAdv.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else if Button = mbRight then if ssShift in Shift then popColorAdv.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else popColorStd.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfmDesigner.pColorArrowMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //var P: TPoint; begin // if (Button = mbRight) or (Button = mbMiddle) then if ((Sender as TPanel).Name = 'pForeColor') or ((Sender as TPanel).Name = 'pForeColorArrow') then popColorStd.Tag := 1 else if ((Sender as TPanel).Name = 'pBackColor') or ((Sender as TPanel).Name = 'pBackColorArrow') then popColorStd.Tag := 2; // P := ((Sender as TPanel).Parent as TPanel).ClientToScreen(Point(-1, ((Sender as TPanel).Parent as TPanel).Height-1)); if ((Sender as TPanel).Name = 'pForeColorArrow') or ((Sender as TPanel).Name = 'pBackColorArrow') then (Sender as TPanel).BevelInner := bvLowered; if (Button = mbLeft) then popColorStd.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); if (Button = mbMiddle) then popColorAdv.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else if ((Button = mbRight) and (ssLeft in Shift)) then popColorAdv.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else if Button = mbRight then if ssShift in Shift then popColorAdv.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) else popColorSys.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); if ((Sender as TPanel).Name = 'pForeColorArrow') or ((Sender as TPanel).Name = 'pBackColorArrow') then (Sender as TPanel).BevelInner := bvNone; end; //=== TabSheet showing ======================================================= procedure TfmDesigner.tabRootShow(Sender: TObject); begin popPropMenu := popRootMenu; end; procedure TfmDesigner.tabRangeShow(Sender: TObject); begin popPropMenu := popRangeMenu; end; procedure TfmDesigner.tabKeywordsShow(Sender: TObject); begin popPropMenu := popKeywordsMenu; end; procedure TfmDesigner.tabSetShow(Sender: TObject); begin popPropMenu := popSetMenu; end; ///////////////////////////////////////////////////////////////////////////////// // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // // RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING RESORTING // ///////////////////////////////////////////////////////////////////////////////// //=== Work with files ======================================================== //procedure TfmDesigner.LoadFromFileClick(Sender: TObject); //resourcestring // sUniFileDescription = 'UniHighlighter Syntax'; //var // iDlg: TOpenDialog; // iFile: TFileStream; // iNode: TTreeNode; // iRange: TSynRange; // cSub: integer; //begin // { TreeMenuPopup should handle this } // Assert( TObject(Tree.Selected.Data) is TSynRange ); // iNode := Tree.Selected; // iRange := TSynRange(iNode.Data); // iDlg := TOpenDialog.Create( nil ); // try // iDlg.DefaultExt := '.hgl'; // iDlg.Filter := sUniFileDescription + ' (*.hgl)|*.hgl'; // if not iDlg.Execute then // Exit; // iFile := TFileStream.Create( iDlg.FileName, fmOpenRead or fmShareDenyWrite ); // try // if iRange = SynUniSyn.MainRules then // begin // SynUniSyn.LoadFromStream( iFile ); // Tree.Items.Clear; // FillTree; // SampleMemo.Lines.Text := SynUniSyn.SampleSource; // iNode := Tree.Items[0]; // end // else begin // iRange.LoadFromStream( iFile ); // iNode.DeleteChildren; // for cSub := 0 to iRange.KeyListCount - 1 do // TreeAddKeyList( iNode, iRange.KeyLists[cSub] ); // for cSub := 0 to iRange.RangeCount - 1 do // TreeAddRange( iNode, iRange.Ranges[cSub] ); // end; // iNode.Expand( False ); // TotalUpdate; // finally // iFile.Free; // end; // finally // iDlg.Free; // end; // Modified(); //end; procedure TfmDesigner.rootSaveToFileClick(Sender: TObject); begin if SaveDialog.Execute then SynUniSyn.SaveToFile(SaveDialog.FileName); end; procedure TfmDesigner.rootLoadFromFileClick(Sender: TObject); var Ext: string; EditPlus: TSynUniImportEditPlus; UltraEdit: TSynUniImportUltraEdit; begin if OpenDialog.Execute then begin Ext := ExtractFileExt(OpenDialog.FileName); try if SameText(Ext, '.hgl') or SameText(Ext, '.hlr') then SynUniSyn.{LoadHglFromFile}LoadFromFile(OpenDialog.FileName) else if SameText(Ext, '.stx') then begin EditPlus := TSynUniImportEditPlus.Create(); EditPlus.LoadFromFile(OpenDialog.FileName); EditPlus.Import(SynUniSyn.MainRules, SynUniSyn.Info); EditPlus.Free; end else if SameText(Ext, '.txt') then begin UltraEdit := TSynUniImportUltraEdit.Create(); UltraEdit.LoadFromFile(OpenDialog.FileName); UltraEdit.Import(SynUniSyn.MainRules, SynUniSyn.Info); UltraEdit.Free; { else // '.hlr' SynUniSyn.LoadFromFile(OpenDialog.FileName);} end else raise Exception.Create(ClassName + '.rootLoadFromFile - Bad file extension!'); finally Tree.Items.Clear; FillTree; SampleMemo.Lines.Text := SynUniSyn.SampleSource; Tree.Items[0].Expand(False); TotalUpdate; Modified(); end; end; end; procedure TfmDesigner.rangeLoadFromFileClick(Sender: TObject); begin if OpenDialog.Execute then begin if Application.MessageBox('It will delete current rule. Continue?', PChar(_Confirm), MB_OKCANCEL+MB_ICONQUESTION) = ID_OK then begin DeleteNode(Tree.Selected, True); TSynRule(Tree.Selected.Data).LoadFromFile(OpenDialog.FileName); //Сделать, что можно загрузить Keywords в Ranges и т.д... TreeAddRange(Tree.Selected, TSynRange(Tree.Selected.Data), akReplace); TreeChange(Sender, Tree.Selected); Tree.Selected.Text := TSynRule(Tree.Selected.Data).Name; Tree.Items[0].Expand(False); TotalUpdate; Modified(); end; end; end; procedure TfmDesigner.rangeSaveToFileClick(Sender: TObject); begin if SaveDialog.Execute then SynUniSyn.SaveToFile(SaveDialog.FileName, TSynRule(Tree.Selected.Data)); end; //=== Clipboard ============================================================== procedure TfmDesigner.StreamToClipboard(Stream: TStream); var Buf: PChar; BufSize: Integer; begin buf := nil; // Чтобы убрать Warning компилятора try BufSize := Stream.Size; GetMem(Buf, BufSize+1); Stream.Position := 0; Stream.ReadBuffer(Buf^, BufSize); Buf[BufSize] := #0; Clipboard.SetTextBuf(Buf); finally FreeMem(Buf); Stream.Free; end; end; function TfmDesigner.GetClipboardAsStream: TMemoryStream; var hClipbrd: THandle; Buf: PChar; begin {$note Error 2} {$IFNDEF FPC} Result := TMemoryStream.Create; ClipBoard.Open; try hClipbrd := Clipboard.GetAsHandle(CF_TEXT); Buf := GlobalLock(hClipbrd); Result.WriteBuffer(Buf^, StrLen(Buf)); Result.Position := 0; GlobalUnlock(hClipbrd); finally Clipboard.Close; end; {$ENDIF} end; //=== Root range ============================================================= procedure TfmDesigner.rootCutClick(Sender: TObject); begin rootCopyClick(Sender); ShowDialog := False; DoDeleteNode(Sender); end; procedure TfmDesigner.rootCopyClick(Sender: TObject); begin StreamToClipboard(SynUniSyn.GetAsStream()); end; procedure TfmDesigner.rootPasteInsideClick(Sender: TObject); begin Tree.Selected.Selected := False; Tree.Selected := Tree.Items[0]; rangePasteInsideClick(Sender); end; procedure TfmDesigner.rootPasteAndReplaceClick(Sender: TObject); begin Tree.Selected := Tree.Items[0]; DeleteNode(Tree.Selected, True); SynUniSyn.LoadFromStream(GetClipboardAsStream); TreeAddRange(Tree.Selected, SynUniSyn.MainRules, akReplace); TreeChange(nil, Tree.Selected); Tree.Selected.Text := TSynRule(Tree.Selected.Data).Name; SampleMemo.Text := SynUniSyn.Info.Sample.Text; TotalUpdate; Modified(); end; //=== Other rules ============================================================ procedure TfmDesigner.rangeCutClick(Sender: TObject); begin rangeCopyClick(Sender); ShowDialog := False; DoDeleteNode(Sender); end; procedure TfmDesigner.rangeCopyClick(Sender: TObject); begin StreamToClipboard(TSynRule(Tree.Selected.Data).GetAsStream); end; procedure TfmDesigner.rangePasteInsideClick(Sender: TObject); var Rule: TSynRule; begin if (copy(Clipboard.AsText, 1, Length('<UniHighlighter')) = '<UniHighlighter') or (copy(Clipboard.AsText, 1, Length('<Range')) = '<Range') then Rule := TSynRange.Create else if (copy(Clipboard.AsText, 1, Length('<Keywords')) = '<Keywords') then Rule := TSynKeyList.Create else if (copy(Clipboard.AsText, 1, Length('<Set')) = '<Set') then Rule := TSynSet.Create else Exit; Rule.LoadFromStream(GetClipboardAsStream); TSynRange(Tree.Selected.Data).AddRule(Rule); // Tree.MultiSelect := False; with TreeAddRule(Tree.Selected, Rule) do Selected := True; TotalUpdate; // Tree.MultiSelect := True; Modified(); end; procedure TfmDesigner.rangePasteAndReplaceClick(Sender: TObject); begin if Application.MessageBox('It will delete current rule. Continue?', PChar(_Confirm), MB_OKCANCEL+MB_ICONQUESTION) = ID_OK then begin DeleteNode(Tree.Selected, True); TSynRule(Tree.Selected.Data).LoadFromStream(GetClipboardAsStream); TreeAddRange(Tree.Selected, TSynRange(Tree.Selected.Data), akReplace); TreeChange(Sender, Tree.Selected); Tree.Selected.Text := TSynRule(Tree.Selected.Data).Name; TotalUpdate; Modified(); end; end; procedure TfmDesigner.rangePasteNextToClick(Sender: TObject); var Rule: TSynRule; begin if (copy(Clipboard.AsText, 1, Length('<UniHighlighter')) = '<UniHighlighter') or (copy(Clipboard.AsText, 1, Length('<Range')) = '<Range') then Rule := TSynRange.Create else if (copy(Clipboard.AsText, 1, Length('<Keywords')) = '<Keywords') then Rule := TSynKeyList.Create else if (copy(Clipboard.AsText, 1, Length('<Set')) = '<Set') then Rule := TSynSet.Create else Exit; Rule.LoadFromStream(GetClipboardAsStream); TSynRange(Tree.Selected.Parent.Data).AddRule(Rule); with TreeAddRule(Tree.Selected, Rule, akInsert) do Selected := True; TotalUpdate; Modified(); end; //=== UNSORTED =============================================================== procedure TfmDesigner.rootInfoClick(Sender: TObject); var InfoText: string; begin with SynUniSyn.Info do begin if General.Name <> '' then InfoText := InfoText + Format(_Name, [General.Name]) + #13#10 else InfoText := InfoText + Format(_Name, ['<Noname>']) + #13#10; if General.Extensions <> '' then InfoText := InfoText + Format(_Extensions, [General.Extensions]) + #13#10; InfoText := InfoText + Format(_Version, [IntToStr(Version.Version) + '.' + IntToStr(Version.Revision)]) + #13#10; InfoText := InfoText + Format(_Date, [DateTimeToStr(Version.ReleaseDate)]) + #13#10; if Author.Name <> '' then InfoText := InfoText + Format(_Author, [Author.Name]) + #13#10; if Author.Email <> '' then InfoText := InfoText + Format(_Mail, [Author.Email]) + #13#10; if Author.Web <> '' then InfoText := InfoText + Format(_Web, [Author.Web]) + #13#10; if Author.Copyright <> '' then InfoText := InfoText + Format(_Copyright, [Author.Copyright]) + #13#10; if Author.Company <> '' then InfoText := InfoText + Format(_Company, [Author.Company]) + #13#10; if Author.Remark <> '' then InfoText := InfoText + Format(_Remark, [Author.Remark]) + #13#10; Application.MessageBox(PChar(InfoText),'About highlighter...', MB_ICONINFORMATION); end; end; procedure TfmDesigner.btStylesFileClick(Sender: TObject); //var // xml: TXMLParser; ++++++++++++ begin { if OpenDialog2.Execute then begin edStylesFile.Text := OpenDialog2.FileName; ComboBox2.Clear; xml := TXMLParser.Create; try if xml.LoadFromFile(edStylesFile.Text) then begin xml.StartScan; while xml.Scan do if (xml.CurPartType = ptStartTag) and SameText(xml.CurName, 'Scheme') then ComboBox2.Items.Add(xml.CurAttr.Value('Name')); end; finally xml.Free; end; ComboBox2.ItemIndex := 0; end; } end; //============================================================================ end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/SynUniDesigner.dfm�����������������������������0000644�0001750�0000144�00000704403�15104114162�025424� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object fmDesigner: TfmDesigner Left = 321 Height = 475 Top = 127 Width = 640 BorderIcons = [biSystemMenu, biMaximize] Caption = 'TSynUniDesigner' ClientHeight = 475 ClientWidth = 640 Color = clBtnFace Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Icon.Data = { 7E03000000000100010010100000180018006803000016000000280000001000 0000200000000100180000000000400300000000000000000000000000010000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003930323930323930323930323930 3239303239303239303239303239303239303239303239303239303239303239 30323930320AD5F00AD5F00AD5F03930320AD5F00AD5F00AD5F08D6767393032 8D67673930328D67678D67678D67673930323930320AD5F00AD5F00AD5F03930 320AD5F00AD5F08D6767000000CFA7A80000008D67673930328D67678D676739 30323930320AD5F00AD5F00AD5F03930320AD5F08D6767CDA2A4CDA2A4C99C9E CDA2A4CFA7A83333338D67678D67673930323930323930323930323930323930 328A65668D6767D6BEBF8D67670000008D6767CDA2A43930323333338D676739 30323930321518EC1518EC1518EC3930328D6767E3D8D8E3D8D8000000F3C9CB 000000C99C9ECFA7A83333338D67673930323930321518EC1518EC1518EC3930 328D67678D6767F5F0F08D67670000008D6767CDA2A43930323333338D676739 30323930321518EC1518EC1518EC393032FF99FF8D6767FFFFFFF5F0F0E3D8D8 D6BEBFCDA2A43333338D67678D67673930323930323930323930323930323930 323930328D67678D6767000000E3D8D80000003333333333338D67678D676739 3032393032FF100AFF100AFF100A393032FFC333FFC333FFC3338D67678D6767 3333338D67678D67678D67678D6767393032393032FF100AFF100AFF100A3930 32FFC333FFC333FFC3333930320CE3170CE3170CE3173930328D67678D676739 3032393032393032393032393032393032393032393032393032393032393032 3930323930323930323930323930323930323930328D67678D67678D67678D67 678D67678D67678D67678D67678D67678D67678D67678D67678D67678D676739 30323930328D67678D67678D67678D67678D67678D67678D67678D67678D6767 8D67678D6767FFFFFF8D6767FFFFFF3930323930323930323930323930323930 3239303239303239303239303239303239303239303239303239303239303239 3032000032390000323900003239000032390000323900003239000032390000 3239000032390000323900003239000032390000323900003239000032390000 3239 } KeyPreview = True OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnKeyDown = FormKeyDown OnKeyPress = FormKeyPress OnShow = FormShow Position = poDesktopCenter LCLVersion = '0.9.30' object SplitterBottom: TSplitter Cursor = crVSplit Left = 0 Height = 3 Top = 229 Width = 640 Align = alTop MinSize = 17 OnCanResize = SplitterBottomCanResize ResizeAnchor = akTop end object SplitterButtons: TSplitter Cursor = crVSplit Left = 0 Height = 3 Top = 417 Width = 640 Align = alBottom MinSize = 35 OnCanResize = SplitterCannotResize ResizeAnchor = akBottom end object StatusBar: TStatusBar Left = 0 Height = 20 Top = 455 Width = 640 Panels = < item Alignment = taCenter Width = 50 end item Width = 50 end> SimplePanel = False end object pTop: TPanel Tag = -1 Left = 0 Height = 229 Top = 0 Width = 640 Align = alTop BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 229 ClientWidth = 640 TabOrder = 1 object SplitterLeft: TSplitter Left = 185 Height = 227 Top = 1 Width = 3 MinSize = 122 end object SplitterRight: TSplitter Left = 536 Height = 227 Top = 1 Width = 3 Align = alRight OnCanResize = SplitterCannotResize ResizeAnchor = akRight end object pLeft: TPanel Left = 1 Height = 227 Top = 1 Width = 184 Align = alLeft BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 227 ClientWidth = 184 Constraints.MinWidth = 122 TabOrder = 0 object Bevel1: TBevel Left = 1 Height = 1 Top = 16 Width = 182 Align = alTop Style = bsRaised end object pLeftParentCapt: TPanel Left = 1 Height = 15 Top = 1 Width = 182 Align = alTop BevelOuter = bvNone ClientHeight = 15 ClientWidth = 182 Color = clActiveCaption Font.Color = clCaptionText Font.Height = -12 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False PopupMenu = popPanels TabOrder = 0 object lbRootMenu: TLabel Left = 0 Height = 15 Hint = 'Tree Menu' Top = 0 Width = 17 Align = alLeft Caption = 'u' Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Marlett' Font.Style = [fsBold] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbRootMenuClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object pLeftCapt: TPanel Left = 17 Height = 15 Top = 0 Width = 165 Align = alClient BevelOuter = bvNone Caption = 'Rules'' Tree' Color = clActiveCaption ParentColor = False TabOrder = 0 end end object pTree: TPanel Left = 4 Height = 203 Top = 20 Width = 176 Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 203 ClientWidth = 176 TabOrder = 1 object Tree: TTreeView Left = 0 Height = 203 Top = 0 Width = 176 Align = alClient DefaultItemHeight = 16 HideSelection = False Images = listRules Indent = 19 MultiSelectStyle = [msControlSelect, msShiftSelect] RowSelect = True TabOrder = 0 OnChange = TreeChange OnClick = TreeClick OnEdited = TreeEdited OnKeyDown = TreeKeyDown OnMouseDown = TreeMouseDown OnMouseUp = TreeMouseUp Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end end object pRight: TPanel Left = 539 Height = 227 Top = 1 Width = 100 Align = alRight BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 227 ClientWidth = 100 TabOrder = 2 object Bevel2: TBevel Left = 1 Height = 1 Top = 16 Width = 98 Align = alTop Style = bsRaised end object pRightCapt: TPanel Left = 1 Height = 15 Top = 1 Width = 98 Align = alTop BevelOuter = bvNone Caption = 'Attributes' Color = clActiveCaption Font.Color = clCaptionText Font.Height = -12 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False PopupMenu = popPanels TabOrder = 0 end object pAttri: TPanel Left = 1 Height = 209 Top = 17 Width = 98 Align = alClient BevelOuter = bvNone ClientHeight = 209 ClientWidth = 98 TabOrder = 1 object PageControl1: TPageControl Left = 0 Height = 209 Top = 0 Width = 98 ActivePage = TabSheet1 Align = alClient MultiLine = True TabIndex = 0 TabOrder = 0 Options = [nboMultiLine] object TabSheet1: TTabSheet Caption = 'Style' ClientHeight = 183 ClientWidth = 90 TabVisible = False object Bevel6: TBevel Tag = 118 Left = 0 Height = 2 Top = 43 Width = 90 end object Label2: TLabel Left = 2 Height = 14 Top = 0 Width = 64 Caption = 'Choose style:' Enabled = False ParentColor = False end object Label4: TLabel Left = 2 Height = 14 Top = 48 Width = 65 Caption = 'Change style:' ParentColor = False end object chStrikeOut: TCheckBox Left = 3 Height = 17 Top = 157 Width = 64 Caption = 'Strike&Out' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsStrikeOut] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 0 end object chUnderline: TCheckBox Left = 3 Height = 17 Top = 141 Width = 65 Caption = '&Underline' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsUnderline] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 1 end object chItalic: TCheckBox Left = 3 Height = 17 Top = 125 Width = 42 Caption = '&Italic' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsItalic] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 2 end object chBold: TCheckBox Left = 3 Height = 17 Top = 109 Width = 45 Caption = '&Bold' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsBold] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 3 end object pForeColorBox: TPanel Left = 2 Height = 23 Top = 82 Width = 41 ClientHeight = 23 ClientWidth = 41 TabOrder = 4 object pForeColor: TPanel Left = 2 Height = 18 Top = 2 Width = 28 BevelInner = bvLowered BevelOuter = bvNone TabOrder = 0 OnClick = PanelColorChange OnMouseUp = pColorMouseUp end object pForeColorArrow: TPanel Left = 31 Height = 18 Top = 2 Width = 8 BevelOuter = bvNone Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' ParentFont = False TabOrder = 1 OnMouseUp = pColorArrowMouseUp end end object pBackColorBox: TPanel Left = 48 Height = 22 Top = 82 Width = 41 ClientHeight = 22 ClientWidth = 41 TabOrder = 5 object pBackColor: TPanel Left = 2 Height = 18 Top = 2 Width = 28 BevelInner = bvLowered BevelOuter = bvNone TabOrder = 0 OnClick = PanelColorChange OnMouseUp = pColorMouseUp end object pBackColorArrow: TPanel Left = 31 Height = 18 Top = 2 Width = 8 BevelOuter = bvNone Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' ParentFont = False TabOrder = 1 OnMouseUp = pColorArrowMouseUp end end object chForeground: TCheckBox Left = 2 Height = 17 Top = 64 Width = 42 Caption = 'D&FG' Checked = True OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown State = cbChecked TabOrder = 6 end object chBackground: TCheckBox Left = 48 Height = 17 Top = 64 Width = 43 Caption = 'DB&G' Checked = True OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown State = cbChecked TabOrder = 7 end object cbStyle: TComboBox Left = 0 Height = 21 Top = 16 Width = 90 Color = clBtnFace DropDownCount = 16 Enabled = False ItemHeight = 13 Items.Strings = ( 'Root' 'Comments' 'Strings' 'Reserved words' 'Statements' 'Numbers' 'Symbols' 'Directives' 'Types' 'Variables' 'Functions' '' 'New style...' ) OnChange = AttributesChanged Style = csDropDownList TabOrder = 8 end end object TabSheet2: TTabSheet Caption = 'Default' ClientHeight = 0 ClientWidth = 0 ImageIndex = 1 TabVisible = False object CheckBox1: TCheckBox Left = 3 Height = 17 Top = 93 Width = 86 Caption = 'Strike&Out' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsStrikeOut] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 0 end object CheckBox2: TCheckBox Left = 3 Height = 17 Top = 77 Width = 86 Caption = '&Underline' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsUnderline] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 1 end object CheckBox3: TCheckBox Left = 3 Height = 17 Top = 61 Width = 86 Caption = '&Italic' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsItalic] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 2 end object CheckBox4: TCheckBox Left = 3 Height = 17 Top = 45 Width = 86 Caption = '&Bold' Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsBold] OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown ParentFont = False TabOrder = 3 end object Panel2: TPanel Left = 2 Height = 23 Top = 18 Width = 41 ClientHeight = 23 ClientWidth = 41 TabOrder = 4 object Panel3: TPanel Left = 2 Height = 18 Top = 2 Width = 28 BevelInner = bvLowered BevelOuter = bvNone TabOrder = 0 OnClick = PanelColorChange OnMouseUp = pColorMouseUp end object Panel4: TPanel Left = 31 Height = 18 Top = 2 Width = 8 BevelOuter = bvNone Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' ParentFont = False TabOrder = 1 OnMouseUp = pColorArrowMouseUp end end object Panel5: TPanel Left = 48 Height = 22 Top = 18 Width = 41 ClientHeight = 22 ClientWidth = 41 TabOrder = 5 object Panel6: TPanel Left = 2 Height = 18 Top = 2 Width = 28 BevelInner = bvLowered BevelOuter = bvNone TabOrder = 0 OnClick = PanelColorChange OnMouseUp = pColorMouseUp end object Panel7: TPanel Left = 31 Height = 18 Top = 2 Width = 8 BevelOuter = bvNone Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' ParentFont = False TabOrder = 1 OnMouseUp = pColorArrowMouseUp end end object CheckBox5: TCheckBox Left = 2 Height = 17 Top = 0 Width = 41 Caption = 'D&FG' Checked = True OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown State = cbChecked TabOrder = 6 end object CheckBox6: TCheckBox Left = 48 Height = 17 Top = 0 Width = 41 Caption = 'DB&G' Checked = True OnClick = AttributesChanged OnMouseDown = CheckBoxMouseDown State = cbChecked TabOrder = 7 end object CheckBox7: TCheckBox Left = 0 Height = 17 Top = 152 Width = 90 Caption = 'Save defaults' TabOrder = 8 end object Button1: TButton Left = 0 Height = 21 Top = 171 Width = 90 Caption = 'Get from Style' TabOrder = 9 end end end end end object pMiddle: TPanel Left = 188 Height = 227 Top = 1 Width = 348 Align = alClient BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 227 ClientWidth = 348 TabOrder = 1 OnResize = pMiddleResize object Bevel4: TBevel Left = 1 Height = 1 Top = 16 Width = 346 Align = alTop Style = bsRaised end object pMiddleParentCapt: TPanel Left = 1 Height = 15 Top = 1 Width = 346 Align = alTop BevelOuter = bvNone ClientHeight = 15 ClientWidth = 346 Color = clActiveCaption Font.Color = clCaptionText Font.Height = -12 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False PopupMenu = popPanels TabOrder = 0 object lbPropBack: TLabel Left = 0 Height = 15 Hint = 'Back' Top = 0 Width = 17 Align = alLeft Caption = '3' Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Marlett' Font.Style = [fsBold] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbPropBackClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object lbRuleMenu: TLabel Left = 329 Height = 15 Hint = 'Rule Menu' Top = 0 Width = 17 Align = alRight Caption = 'u' Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Marlett' Font.Style = [fsBold] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbRuleMenuClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object pMiddleCapt: TPanel Left = 17 Height = 15 Top = 0 Width = 312 Align = alClient BevelOuter = bvNone Caption = 'Properties' Color = clActiveCaption ParentColor = False TabOrder = 0 end end object PageControl: TPageControl Left = 1 Height = 209 Top = 17 Width = 346 TabStop = False ActivePage = tabRoot Align = alClient Constraints.MinWidth = 118 TabIndex = 0 TabOrder = 1 object tabRoot: TTabSheet Caption = 'tabRoot' ClientHeight = 183 ClientWidth = 338 OnShow = tabRootShow PopupMenu = popRootMenu TabVisible = False object lbDelimitersRoot: TLabel Left = 0 Height = 14 Top = 134 Width = 46 Caption = '&Delimiters' FocusControl = edDelimitersRoot ParentColor = False end object Label3: TLabel Left = 0 Height = 14 Top = 80 Width = 71 Caption = 'File with styles:' Enabled = False ParentColor = False end object Label5: TLabel Left = 0 Height = 14 Top = 104 Width = 68 Caption = 'Color scheme:' Enabled = False ParentColor = False end object chCaseRoot: TCheckBox Left = 0 Height = 17 Top = 0 Width = 90 Caption = '&Case Sensitive' OnClick = RootChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 0 end object chEnabledRoot: TCheckBox Left = 269 Height = 17 Top = 0 Width = 59 Anchors = [akTop, akRight] Caption = '&Enabled' OnClick = RootChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 1 end object edDelimitersRoot: TEdit Left = 70 Height = 21 Top = 131 Width = 259 Anchors = [akTop, akLeft, akRight] Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' OnChange = RootChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard TabOrder = 2 end object pRootButtons: TPanel Left = 0 Height = 24 Top = 159 Width = 338 Align = alBottom BevelOuter = bvNone ClientHeight = 24 ClientWidth = 338 TabOrder = 3 object btAddRangeRoot: TButton Left = 0 Height = 24 Top = 0 Width = 108 Caption = 'Add &Range' OnClick = DoAddRangeToRoot TabOrder = 0 end object btAddKeywordsRoot: TButton Left = 110 Height = 24 Top = 0 Width = 109 Caption = 'Add &Keywords' OnClick = DoAddKeywordToRoot TabOrder = 1 end object btAddSetRoot: TButton Left = 221 Height = 24 Top = 0 Width = 108 Caption = 'Add &Set' OnClick = DoAddSetToRoot TabOrder = 2 end end object edStylesFile: TEdit Left = 70 Height = 21 Top = 76 Width = 236 Anchors = [akTop, akLeft, akRight] Color = clBtnFace Enabled = False OnChange = RootChange PopupMenu = popStandard TabOrder = 4 Text = 'Standart.clr' end object btStylesFile: TButton Left = 310 Height = 20 Top = 76 Width = 20 Anchors = [akTop, akRight] Caption = '...' Enabled = False OnClick = btStylesFileClick TabOrder = 5 TabStop = False end object ComboBox2: TComboBox Left = 70 Height = 21 Top = 100 Width = 262 Anchors = [akTop, akLeft, akRight] Color = clBtnFace Enabled = False ItemHeight = 13 ItemIndex = 0 Items.Strings = ( 'Standard' 'Twinight' 'FAR' 'Visual Studio' ) Style = csDropDownList TabOrder = 6 Text = 'Standard' end object Button4: TButton Left = 232 Height = 25 Top = 48 Width = 97 Caption = 'Add link to range' OnClick = DoAddRangeLink TabOrder = 7 Visible = False end end object tabRange: TTabSheet Caption = 'tabRange' ClientHeight = 183 ClientWidth = 338 ImageIndex = 1 OnShow = tabRangeShow PopupMenu = popRangeMenu TabVisible = False object lbDelimitersRange: TLabel Left = 0 Height = 14 Top = 134 Width = 46 Caption = '&Delimiters' FocusControl = edDelimitersRange ParentColor = False end object lbRangeFrom: TLabel Left = 0 Height = 14 Top = 20 Width = 27 Caption = '&From:' ParentColor = False end object lbRangeTo: TLabel Left = 0 Height = 14 Top = 42 Width = 17 Caption = '&To:' ParentColor = False end object edDelimitersRange: TEdit Left = 70 Height = 21 Top = 131 Width = 259 Anchors = [akTop, akLeft, akRight] Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' OnChange = RangeChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard TabOrder = 14 end object chEnabledRange: TCheckBox Left = 269 Height = 17 Top = 0 Width = 59 Anchors = [akTop, akRight] Caption = '&Enabled' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 2 end object chCaseRange: TCheckBox Left = 30 Height = 17 Top = 0 Width = 90 Caption = '&Case Sensitive' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 1 end object pRangeButtons: TPanel Left = 0 Height = 24 Top = 159 Width = 338 Align = alBottom BevelOuter = bvNone ClientHeight = 24 ClientWidth = 338 TabOrder = 15 object btAddRange: TButton Left = 0 Height = 24 Top = 0 Width = 108 Caption = 'Add &Range' OnClick = DoAddRange TabOrder = 0 end object btAddKeywords: TButton Left = 110 Height = 24 Top = 0 Width = 109 Caption = 'Add &Keywords' OnClick = DoAddKeyword TabOrder = 1 end object btAddSet: TButton Left = 221 Height = 24 Top = 0 Width = 108 Caption = 'Add &Set' OnClick = DoAddSet TabOrder = 2 end end object btChooseRule: TButton Left = 0 Height = 16 Top = 0 Width = 27 Caption = '7' Enabled = False Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' OnClick = btTagMenuClick ParentFont = False TabOrder = 0 end object edFrom: TEdit Left = 30 Height = 21 Top = 18 Width = 226 Anchors = [akTop, akLeft, akRight] AutoSelect = False Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' OnChange = RangeChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard TabOrder = 3 end object edTo: TEdit Left = 30 Height = 21 Top = 40 Width = 226 Anchors = [akTop, akLeft, akRight] AutoSelect = False Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' OnChange = RangeChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard TabOrder = 4 end object btFromList: TButton Left = 259 Height = 19 Top = 18 Width = 19 Anchors = [akTop, akRight] Caption = '...' Enabled = False TabOrder = 5 TabStop = False end object chFromEOL: TCheckBox Left = 302 Height = 17 Top = 19 Width = 26 Anchors = [akTop, akRight] Caption = '¶' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 9 end object btToList: TButton Left = 259 Height = 19 Top = 40 Width = 19 Anchors = [akTop, akRight] Caption = '...' Enabled = False TabOrder = 6 TabStop = False end object btToMenu: TButton Left = 281 Height = 19 Top = 40 Width = 19 Anchors = [akTop, akRight] Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' OnClick = btTagMenuClick ParentFont = False PopupMenu = popCloseTagMenu TabOrder = 8 end object btFromMenu: TButton Left = 281 Height = 19 Top = 18 Width = 19 Anchors = [akTop, akRight] Caption = 'u' Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' OnClick = btTagMenuClick ParentFont = False PopupMenu = popOpenTagMenu TabOrder = 7 end object chToEOL: TCheckBox Left = 302 Height = 17 Top = 41 Width = 26 Anchors = [akTop, akRight] Caption = '¶' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 10 end object chCloseOnWord: TCheckBox Left = 0 Height = 17 Top = 61 Width = 102 Caption = 'Close on &delimiter' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 11 end object chCloseOnEOL: TCheckBox Left = 0 Height = 17 Top = 77 Width = 113 Caption = 'Close on end of &line' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 12 end object chCloseParent: TCheckBox Left = 0 Height = 17 Top = 93 Width = 161 Caption = 'Close &parent if same close tag' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 13 end object CheckBox8: TCheckBox Left = 0 Height = 17 Top = 109 Width = 161 Caption = 'Close &parent if same close tag' OnClick = RangeChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 16 Visible = False end object Button3: TButton Left = 232 Height = 25 Top = 64 Width = 97 Caption = 'Add link to range' OnClick = DoAddRangeLink TabOrder = 17 Visible = False end end object tabKeywords: TTabSheet Caption = 'tabKeywords' ClientHeight = 183 ClientWidth = 338 ImageIndex = 2 OnShow = tabKeywordsShow PopupMenu = popKeywordsMenu TabVisible = False object pProp: TPanel Left = 264 Height = 183 Top = 0 Width = 74 Align = alRight BevelOuter = bvNone ClientHeight = 183 ClientWidth = 74 Constraints.MinWidth = 70 TabOrder = 1 object lbKeywordCount: TLabel Left = 3 Height = 14 Top = 168 Width = 38 Anchors = [akLeft, akBottom] Caption = 'Lines: 0' ParentColor = False end object btSort: TSpeedButton Left = 3 Height = 22 Hint = 'Sort strings' Top = 24 Width = 23 Glyph.Data = { F6000000424DF600000000000000760000002800000010000000100000000100 04000000000080000000C40E0000C40E00001000000000000000000000000000 8000008000000080800080000000800080008080000080808000C0C0C0000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD DDDDDDCCCCDDDD0DDDDDDDCDDDDDD707DDDDDDDCCDDDD000DDDDDDDDDCDD7000 7DDDDDCDDCDD00000DDDDDDCCDDDDD0DDDDDDDDDDDDDDD0DDDDDDDDD9DDDDD0D DDDDDDDD9DDDDD0DDDDDDDDD9DDDDD0DDDDDDD9D9DDDDD0DDDDDDDD99DDDDD0D DDDDDDDD9DDDDD0DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD } NumGlyphs = 0 OnClick = btSort_oldClick ShowHint = True ParentShowHint = False end object btLowerCase: TSpeedButton Left = 27 Height = 22 Hint = 'Lower case' Top = 24 Width = 23 Glyph.Data = { F6000000424DF600000000000000760000002800000010000000100000000100 0400000000008000000000000000000000001000000000000000000000000000 8000008000000080800080000000800080008080000080808000C0C0C0000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDD0DDDDD0DDD0DDD0D0DDDDD00DD0DDD0DD00000D00DD000DDD0DDD0D000D0 D0DDDD0D0DD00DDD0DDDDD0D0DD0DDDD0DDDDDD0DDDDDDDDDDDDDDD0DDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD } NumGlyphs = 0 OnClick = btLowerCase_oldClick ShowHint = True ParentShowHint = False end object btSpacesToEol: TSpeedButton Left = 51 Height = 22 Hint = 'Spaces to EOL' Top = 24 Width = 23 Glyph.Data = { F6000000424DF600000000000000760000002800000010000000100000000100 0400000000008000000000000000000000001000000000000000000000000000 8000008000000080800080000000800080008080000080808000C0C0C0000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDD0DD0DDDDDDDDDDDD0DD0DDDDDDDDDDDD0DD0DD DDDDDDDDDD0DD0DDDDDDDDDDDD0DD0DDDDDDDDDD000DD0DDDDDDDDD0000DD0DD DDDDDD00000DD0DDDDDDDD00000DD0DDDDDDDD00000DD0DDDDDDDDD0000DD0DD DDDDDDDD00000000DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD } NumGlyphs = 0 OnClick = btSpacesToEol_oldClick ShowHint = True ParentShowHint = False end object chEnabledKeyList: TCheckBox Left = 13 Height = 17 Top = 0 Width = 59 Anchors = [akTop, akRight] Caption = '&Enabled' OnClick = KeywordsChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 0 end object btSort_old: TButton Left = 3 Height = 23 Top = 84 Width = 67 Caption = '&Sort' OnClick = btSort_oldClick TabOrder = 1 Visible = False end object btLowerCase_old: TButton Left = 3 Height = 23 Top = 108 Width = 67 Caption = '&Lower Case' OnClick = btLowerCase_oldClick TabOrder = 2 Visible = False end object btSpacesToEol_old: TButton Left = 3 Height = 23 Top = 132 Width = 67 Caption = 'S&paces -> ¶' OnClick = btSpacesToEol_oldClick TabOrder = 3 Visible = False end end object Memo: TMemo Left = 0 Height = 183 Top = 0 Width = 264 Align = alClient Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' Lines.Strings = ( 'Memo' ) OnChange = KeywordsChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard ScrollBars = ssBoth TabOrder = 0 end end object tabSet: TTabSheet Caption = 'tabSet' ClientHeight = 183 ClientWidth = 338 ImageIndex = 3 OnShow = tabSetShow PopupMenu = popSetMenu TabVisible = False object lbSymbSet: TLabel Left = 0 Height = 14 Top = 22 Width = 57 Caption = '&Symbol Set:' FocusControl = edSymbSet ParentColor = False end object chEnabledSet: TCheckBox Left = 269 Height = 17 Top = 0 Width = 59 Anchors = [akTop, akRight] Caption = '&Enabled' OnClick = SetChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 1 end object edSymbSet: TEdit Left = 70 Height = 21 Top = 19 Width = 259 Anchors = [akTop, akLeft, akRight] Font.Color = clWindowText Font.Height = -11 Font.Name = 'Courier' OnChange = SetChange OnContextPopup = EditContextPopup OnKeyDown = EditKeyDown ParentFont = False PopupMenu = popStandard TabOrder = 2 end object chAnyStart: TCheckBox Left = 0 Height = 17 Top = 0 Width = 60 Caption = 'AnyStart' Enabled = False OnClick = SetChange OnContextPopup = DontNeedContextPopup OnMouseDown = CheckBoxMouseDown TabOrder = 0 TabStop = False end end object tabSeveralRules: TTabSheet Caption = 'tabSeveralRules' ClientHeight = 183 ClientWidth = 338 ImageIndex = 4 TabVisible = False object Label1: TLabel Left = 4 Height = 15 Top = 2 Width = 321 Alignment = taCenter Anchors = [akTop, akLeft, akRight] AutoSize = False Caption = 'You have selected several rules...' Font.Color = clWindowText Font.Height = -13 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False end end end end end object pBottom: TPanel Left = 0 Height = 185 Top = 232 Width = 640 Align = alClient BevelInner = bvLowered BevelOuter = bvLowered ClientHeight = 185 ClientWidth = 640 Constraints.MinHeight = 17 TabOrder = 2 object Bevel5: TBevel Left = 2 Height = 1 Top = 17 Width = 636 Align = alTop Style = bsRaised end object pBottomParentCapt: TPanel Left = 2 Height = 15 Top = 2 Width = 636 Align = alTop BevelOuter = bvNone ClientHeight = 15 ClientWidth = 636 Color = clActiveCaption Font.Color = clCaptionText Font.Height = -12 Font.Name = 'Tahoma' Font.Style = [fsBold] ParentColor = False ParentFont = False PopupMenu = popPanels TabOrder = 0 object lbSampMin: TLabel Left = 602 Height = 15 Hint = 'Minimize' Top = 0 Width = 17 Align = alRight Caption = '0' Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Marlett' Font.Style = [fsBold] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbSampMinClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object lbSampMax: TLabel Left = 619 Height = 15 Hint = 'Maximize' Top = 0 Width = 17 Align = alRight Caption = '1' Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Marlett' Font.Style = [fsBold] ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbSampMaxClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object Label6: TLabel Left = 0 Height = 15 Hint = 'Minimize' Top = 0 Width = 14 Align = alLeft Caption = '<' Enabled = False Font.Color = clBtnFace Font.Height = -15 Font.Name = 'Wingdings' ParentColor = False ParentFont = False ParentShowHint = False ShowHint = True OnClick = lbSampMinClick OnMouseEnter = LabelMouseEnter OnMouseLeave = LabelMouseLeave OnContextPopup = LabelContextPopup end object pBottomCapt: TPanel Left = 14 Height = 15 Top = 0 Width = 588 Align = alClient BevelOuter = bvNone Caption = 'Sample text (will not save)' Color = clActiveCaption ParentColor = False TabOrder = 0 OnDblClick = PanelDblClick end end inline SampleMemo: TSynEdit Left = 2 Height = 165 Top = 18 Width = 636 Align = alClient Font.Height = -13 Font.Name = 'Courier New' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False PopupMenu = popSampleMemoMenu TabOrder = 1 OnKeyDown = SampleMemoKeyDown OnMouseDown = SampleMemoMouseDown Gutter.Width = 57 Gutter.MouseActions = < item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 13 MoveCaret = False Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbRight ClickCount = ccSingle ClickDir = cdUp Command = 12 MoveCaret = False Option = 0 Priority = 0 end> RightGutter.Width = 0 RightGutter.MouseActions = < item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 13 MoveCaret = False Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbRight ClickCount = ccSingle ClickDir = cdUp Command = 12 MoveCaret = False Option = 0 Priority = 0 end> Highlighter = SynUniSyn Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = EcFoldLevel1 ShortCut = 41009 end item Command = EcFoldLevel2 ShortCut = 41010 end item Command = EcFoldLevel1 ShortCut = 41011 end item Command = EcFoldLevel1 ShortCut = 41012 end item Command = EcFoldLevel1 ShortCut = 41013 end item Command = EcFoldLevel6 ShortCut = 41014 end item Command = EcFoldLevel7 ShortCut = 41015 end item Command = EcFoldLevel8 ShortCut = 41016 end item Command = EcFoldLevel9 ShortCut = 41017 end item Command = EcFoldLevel0 ShortCut = 41008 end item Command = EcFoldCurrent ShortCut = 41005 end item Command = EcUnFoldCurrent ShortCut = 41003 end item Command = EcToggleMarkupWord ShortCut = 32845 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end item Command = ecColSelUp ShortCut = 40998 end item Command = ecColSelDown ShortCut = 41000 end item Command = ecColSelLeft ShortCut = 40997 end item Command = ecColSelRight ShortCut = 40999 end item Command = ecColSelPageDown ShortCut = 40994 end item Command = ecColSelPageBottom ShortCut = 57378 end item Command = ecColSelPageUp ShortCut = 40993 end item Command = ecColSelPageTop ShortCut = 57377 end item Command = ecColSelLineStart ShortCut = 40996 end item Command = ecColSelLineEnd ShortCut = 40995 end item Command = ecColSelEditorTop ShortCut = 57380 end item Command = ecColSelEditorBottom ShortCut = 57379 end> MouseActions = < item Shift = [] ShiftMask = [ssShift, ssAlt] Button = mbLeft ClickCount = ccSingle ClickDir = cdDown Command = 1 MoveCaret = True Option = 0 Priority = 0 end item Shift = [ssShift] ShiftMask = [ssShift, ssAlt] Button = mbLeft ClickCount = ccSingle ClickDir = cdDown Command = 1 MoveCaret = True Option = 1 Priority = 0 end item Shift = [ssAlt] ShiftMask = [ssShift, ssAlt] Button = mbLeft ClickCount = ccSingle ClickDir = cdDown Command = 3 MoveCaret = True Option = 0 Priority = 0 end item Shift = [ssShift, ssAlt] ShiftMask = [ssShift, ssAlt] Button = mbLeft ClickCount = ccSingle ClickDir = cdDown Command = 3 MoveCaret = True Option = 1 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbRight ClickCount = ccSingle ClickDir = cdUp Command = 12 MoveCaret = False Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccDouble ClickDir = cdDown Command = 6 MoveCaret = True Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccTriple ClickDir = cdDown Command = 7 MoveCaret = True Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccQuad ClickDir = cdDown Command = 8 MoveCaret = True Option = 0 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbMiddle ClickCount = ccSingle ClickDir = cdDown Command = 10 MoveCaret = True Option = 0 Priority = 0 end item Shift = [ssCtrl] ShiftMask = [ssShift, ssAlt, ssCtrl] Button = mbLeft ClickCount = ccSingle ClickDir = cdUp Command = 11 MoveCaret = False Option = 0 Priority = 0 end> MouseSelActions = < item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccSingle ClickDir = cdDown Command = 9 MoveCaret = False Option = 0 Priority = 0 end> Lines.Strings = ( 'SynEdit1' ) BracketHighlightStyle = sbhsBoth inline SynLeftGutterPartList1: TSynGutterPartList object SynGutterMarks1: TSynGutterMarks Width = 24 end object SynGutterLineNumber1: TSynGutterLineNumber Width = 17 MouseActions = <> MarkupInfo.Background = clBtnFace MarkupInfo.Foreground = clNone DigitCount = 2 ShowOnlyLineNumbersMultiplesOf = 1 ZeroStart = False LeadingZeros = False end object SynGutterChanges1: TSynGutterChanges Width = 4 ModifiedColor = 59900 SavedColor = clGreen end object SynGutterSeparator1: TSynGutterSeparator Width = 2 end object SynGutterCodeFolding1: TSynGutterCodeFolding MouseActions = < item Shift = [] ShiftMask = [] Button = mbRight ClickCount = ccSingle ClickDir = cdUp Command = 16 MoveCaret = False Option = 0 Priority = 0 end item Shift = [] ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = 14 MoveCaret = False Option = 0 Priority = 0 end item Shift = [ssShift] ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = 14 MoveCaret = False Option = 1 Priority = 0 end item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 0 MoveCaret = False Option = 0 Priority = 0 end> MarkupInfo.Background = clNone MarkupInfo.Foreground = clGray MouseActionsExpanded = < item Shift = [] ShiftMask = [] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 14 MoveCaret = False Option = 0 Priority = 0 end> MouseActionsCollapsed = < item Shift = [ssCtrl] ShiftMask = [ssCtrl] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 15 MoveCaret = False Option = 0 Priority = 0 end item Shift = [] ShiftMask = [ssCtrl] Button = mbLeft ClickCount = ccAny ClickDir = cdDown Command = 15 MoveCaret = False Option = 1 Priority = 0 end> end end end end object pButtons: TPanel Left = 0 Height = 35 Top = 420 Width = 640 Align = alBottom BevelInner = bvLowered BevelOuter = bvLowered ClientHeight = 35 ClientWidth = 640 Constraints.MinHeight = 35 TabOrder = 3 object btOk: TButton Left = 400 Height = 25 Top = 5 Width = 75 Anchors = [akTop, akRight] Caption = 'OK' Default = True OnClick = btOkClick TabOrder = 0 end object btCancel: TButton Left = 480 Height = 25 Top = 5 Width = 75 Anchors = [akTop, akRight] Caption = 'Cancel' OnClick = btCancelClick TabOrder = 1 end object btApply: TButton Left = 560 Height = 25 Top = 5 Width = 75 Anchors = [akTop, akRight] Caption = '&Apply' Enabled = False OnClick = btApplyClick TabOrder = 2 end end object popStandard: TPopupMenu Images = listImages left = 16 top = 32 object popUndo: TMenuItem Caption = '&Undo' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF800000FF000000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF000000FF000000FF000000FF800000FF800000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 7 ShortCut = 16474 OnClick = popUndoClick end object N1: TMenuItem Caption = '-' end object popCut: TMenuItem Caption = 'Cu&t' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = popCutClick end object popCopy: TMenuItem Caption = '&Copy' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = popCopyClick end object popPaste: TMenuItem Caption = '&Paste' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = popPasteClick end object popDelete: TMenuItem Caption = '&Delete' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 8 ShortCut = 46 OnClick = popDeleteClick end object N2: TMenuItem Caption = '-' end object popSelectAll: TMenuItem Caption = 'Select &All' ShortCut = 16449 OnClick = popSelectAllClick end end object popOpenTagMenu: TPopupMenu left = 48 top = 32 object Closemenu1: TMenuItem Caption = 'Close menu' end object N3: TMenuItem Caption = '-' end object Opentagisfirstsymbolsonline1: TMenuItem AutoCheck = True Caption = 'Open tag is first symbols on line' OnClick = miOpenTagMenuClick end object Opentagisfirstnonspacesymbolsonline1: TMenuItem AutoCheck = True Caption = 'Open tag is first non-space symbols on line' OnClick = miOpenTagMenuClick end object N4: TMenuItem Caption = '-' end object Opentagispartofterm1: TMenuItem AutoCheck = True Caption = 'Open tag is part of term' RadioItem = True OnClick = miTagMenuClick end object Opentagispartoftermonlyrightside1: TMenuItem AutoCheck = True Caption = 'Open tag is part of term (only right side)' RadioItem = True OnClick = miTagMenuClick end object Opentagispartoftermonlyleftside1: TMenuItem AutoCheck = True Caption = 'Open tag is part of term (only left side)' RadioItem = True OnClick = miTagMenuClick end object Opentagisnotpartofterm1: TMenuItem AutoCheck = True Caption = 'Open tag is not part of term' RadioItem = True OnClick = miTagMenuClick end end object popCloseTagMenu: TPopupMenu left = 80 top = 32 object MenuItem1: TMenuItem Caption = 'Close menu' end object MenuItem2: TMenuItem Caption = '-' end object MenuItem3: TMenuItem AutoCheck = True Caption = 'Close tag is first symbols on line' OnClick = miCloseTagMenuClick end object MenuItem4: TMenuItem AutoCheck = True Caption = 'Close tag is first non-space symbols on line' OnClick = miCloseTagMenuClick end object MenuItem5: TMenuItem Caption = '-' end object MenuItem6: TMenuItem AutoCheck = True Caption = 'Close tag is part of term' RadioItem = True OnClick = miTagMenuClick end object MenuItem7: TMenuItem AutoCheck = True Caption = 'Close tag is part of term (only right side)' RadioItem = True OnClick = miTagMenuClick end object MenuItem8: TMenuItem AutoCheck = True Caption = 'Close tag is part of term (only left side)' RadioItem = True OnClick = miTagMenuClick end object MenuItem9: TMenuItem AutoCheck = True Caption = 'Close tag is not part of term' RadioItem = True OnClick = miTagMenuClick end end object popRootMenu: TPopupMenu Images = listImages left = 16 top = 64 object rootCut: TMenuItem Caption = 'Cu&t Root range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = rootCutClick end object rootCopy: TMenuItem Caption = '&Copy Root range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = rootCopyClick end object rootPaste: TMenuItem Caption = '&Paste inside Root' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = rootPasteInsideClick end object rootPasteAndReplace: TMenuItem Caption = 'Paste and Re&place Root' OnClick = rootPasteAndReplaceClick end object rootBreak1: TMenuItem Caption = '-' end object rootLoadFromFile: TMenuItem Caption = '&Load Root from File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFF000000FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 5 OnClick = rootLoadFromFileClick end object rootSaveToFile: TMenuItem Caption = 'Save Highlighter to File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 6 OnClick = rootSaveToFileClick end object rootBreak2: TMenuItem Caption = '-' end object rootAddRange: TMenuItem Caption = 'Add &Range to Root' OnClick = DoAddRangeToRoot end object rootAddKeywords: TMenuItem Caption = 'Add &Keywords to Root' OnClick = DoAddKeywordToRoot end object rootAddSetto: TMenuItem Caption = 'Add &Set to Root' OnClick = DoAddSetToRoot end object rootBreak3: TMenuItem Caption = '-' end object rootRename: TMenuItem Caption = 'Re&name Root range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 3 ShortCut = 113 OnClick = DoRenameNode end object rootDeleteAll: TMenuItem Caption = '&Delete all rules' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 4 ShortCut = 46 OnClick = DoDeleteNode end object rootBreak4: TMenuItem Caption = '-' end object rootInfo: TMenuItem Caption = 'Highlighter Info...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF FFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFC0C0C0FF0000 00FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FFC0C0C0FF000000FFFFFFFFFF000000FFC0C0C0FF000000FFC0C0 C0FF000000FF000000FF000000FF000000FF800000FF800000FF000000FFFFFF FFFFFFFFFFFF000000FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FF0000 00FFC0C0C0FFC0C0C0FFC0C0C0FF000000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FFC0C0C0FF000000FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FF000000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 11 ShortCut = 16496 OnClick = rootInfoClick end end object popRangeMenu: TPopupMenu Images = listImages left = 48 top = 64 object rangeBack: TMenuItem Caption = '&Up to one level' OnClick = lbPropBackClick end object rangeBreak1: TMenuItem Caption = '-' end object rangeCut: TMenuItem Caption = 'Cu&t Range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = rangeCutClick end object rangeCopy: TMenuItem Caption = '&Copy Range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = rangeCopyClick end object rangePaste: TMenuItem Caption = '&Paste inside Range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = rangePasteInsideClick end object rangePasteAndReplace: TMenuItem Caption = 'Paste and Re&place' OnClick = rangePasteAndReplaceClick end object rangePasteNextTo: TMenuItem Caption = 'Paste next to' OnClick = rangePasteNextToClick end object rangeBreak2: TMenuItem Caption = '-' end object rangeLoadFromFile: TMenuItem Caption = '&Load from File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFF000000FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 5 OnClick = rangeLoadFromFileClick end object rangeSaveToFile: TMenuItem Caption = 'Save Range to File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 6 OnClick = rangeSaveToFileClick end object rangeBreak3: TMenuItem Caption = '-' end object rangeAddRange: TMenuItem Caption = 'Add &Range' OnClick = DoAddRange end object rangeAddKeywords: TMenuItem Caption = 'Add &Keywords' OnClick = DoAddKeyword end object rangeAddSet: TMenuItem Caption = 'Add &Set' OnClick = DoAddSet end object rangeBreak4: TMenuItem Caption = '-' end object rangeRename: TMenuItem Caption = 'Re&name Range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 3 ShortCut = 113 OnClick = DoRenameNode end object rangeDelete: TMenuItem Caption = '&Delete Range' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 4 ShortCut = 46 OnClick = DoDeleteNode end end object popKeywordsMenu: TPopupMenu Images = listImages left = 80 top = 64 object keywordsBack: TMenuItem Caption = '&Up to one level' OnClick = lbRuleMenuClick end object keywordsBreak1: TMenuItem Caption = '-' end object keywordsCut: TMenuItem Caption = 'Cu&t Keywords' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = rangeCutClick end object keywordsCopy: TMenuItem Caption = '&Copy Keywords' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = rangeCopyClick end object keywordsPaste: TMenuItem Caption = 'Paste next to' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = rangePasteNextToClick end object keywordsPasteAndReplace: TMenuItem Caption = 'Paste and Re&place' end object keywordsBreak2: TMenuItem Caption = '-' end object keywordsLoadFromFile: TMenuItem Caption = '&Load from File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFF000000FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 5 OnClick = rangeLoadFromFileClick end object keywordsSaveToFile: TMenuItem Caption = 'Save Keywords to File ...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 6 OnClick = rangeSaveToFileClick end object keywordsBreak3: TMenuItem Caption = '-' end object keywordsRename: TMenuItem Caption = 'Re&name Keywords' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 3 ShortCut = 113 OnClick = DoRenameNode end object keywordsDelete: TMenuItem Caption = '&Delete Keywords' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 4 ShortCut = 46 OnClick = DoDeleteNode end end object popSetMenu: TPopupMenu Images = listImages left = 112 top = 64 object setBack: TMenuItem Caption = '&Up to one level' OnClick = lbPropBackClick end object setBreak1: TMenuItem Caption = '-' end object setCut: TMenuItem Caption = 'Cu&t Set' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = rangeCutClick end object setCopy: TMenuItem Caption = '&Copy Set' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = rangeCopyClick end object setPaste: TMenuItem Caption = 'Paste next to' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = rangePasteNextToClick end object setPasteAndReplace: TMenuItem Caption = 'Paste and Re&place' end object setBreak2: TMenuItem Caption = '-' end object setLoadFromFile: TMenuItem Caption = '&Load from File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFF000000FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF00FF FFFFFFFFFFFF00FFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 5 OnClick = rangeLoadFromFileClick end object setSaveToFile: TMenuItem Caption = 'Save Set to File...' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF008080FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 6 OnClick = rangeSaveToFileClick end object setBreak3: TMenuItem Caption = '-' end object setRename: TMenuItem Caption = 'Re&name set' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FF000000FF000000FFFF0000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FFFF0000FF000000FFFF0000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FF000000FF000000FF000000FFFF0000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF0000FF000000FF000000FF000000FF0000 00FFFF0000FFFF0000FFFF0000FFFF0000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 3 ShortCut = 113 OnClick = DoRenameNode end object setDelete: TMenuItem Caption = '&Delete Set' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF0000 FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 00FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 00FF000000FF0000FFFF0000FFFF000000FF000000FF000000FF000000FF0000 FFFF0000FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000FFFF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 4 ShortCut = 46 OnClick = DoDeleteNode end end object popPanels: TPopupMenu left = 112 top = 32 object RulesTree1: TMenuItem AutoCheck = True Caption = 'Panel "Rules Tree"' Checked = True OnClick = ShowHideTree end object Properties1: TMenuItem AutoCheck = True Caption = 'Panel "Properties"' Checked = True OnClick = ShowHideProp end object Attributes1: TMenuItem AutoCheck = True Caption = 'Panel "Attributes"' Checked = True OnClick = ShowHideAttr end object Sampletext1: TMenuItem AutoCheck = True Caption = 'Panel "Sample text"' Checked = True OnClick = ShowHideSamp end object Buttons1: TMenuItem AutoCheck = True Caption = 'Bottom Buttons' Checked = True end end object SynUniSyn: TSynUniSyn Enabled = False left = 80 top = 160 end object listImages: TImageList BkColor = clForeground DrawingStyle = dsTransparent left = 16 top = 96 Bitmap = { 4C69160000001000000010000000FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFFF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFFF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFFF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FFFF00FF00000000FF000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FF000000FF800000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FFFF00FF00800000FF800000FF800000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000 00FF800000FF800000FFFF00FF00800000FFFF00FF00FF00FF00800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FFFF00 FF00FF00FF00800000FFFF00FF00800000FFFF00FF00FF00FF00800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FFFF00 FF00FF00FF00800000FFFF00FF00800000FFFF00FF00FF00FF00800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FFFF00 FF00FF00FF00800000FFFF00FF00FF00FF00800000FF800000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000 00FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FFFFFFFFFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF000000FF000000FFFFFF FFFF000000FF800000FF800000FF800000FF800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF8000 00FFFF00FF00FF00FF00FF00FF00000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFF FFFF800000FFFF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF000000FF000000FFFFFFFFFF800000FF8000 00FF800000FF800000FFFF00FF00000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF800000FFFF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000 00FF000000FF00FFFFFF00FFFFFF000000FF000000FF000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00000000FF008080FF808080FF008080FF0000 00FF00FFFFFF000000FF000000FF00FFFFFF000000FF808080FF008080FF8080 80FF000000FFFF00FF00FF00FF00000000FF808080FF808080FF000000FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FF000000FF808080FF0080 80FF000000FFFF00FF00FF00FF00000000FF008080FF808080FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF808080FF8080 80FF000000FFFF00FF00FF00FF00000000FF808080FF008080FF808080FF0080 80FF808080FF008080FF808080FF008080FF808080FF008080FF808080FF0080 80FF000000FFFF00FF00FF00FF00000000FF008080FF808080FF008080FF8080 80FF008080FF800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF000000FFFF00FF00FF00FF00000000FF808080FF008080FF808080FF0080 80FF808080FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 00FF800000FFFF00FF00FF00FF00000000FF008080FF808080FF008080FF8080 80FF008080FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 00FFFFFFFFFF800000FFFF00FF00000000FF808080FF008080FF808080FF0080 80FF808080FF800000FFFFFFFFFF800000FF800000FF800000FFFFFFFFFF8000 00FF800000FF800000FF800000FF000000FF008080FF808080FF008080FF8080 80FF008080FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF000000FF808080FF008080FF808080FF0080 80FF808080FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF8000 00FF800000FFFFFFFFFF800000FFFF00FF00000000FF000000FF000000FF0000 00FF000000FF800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF0000FFFF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 00FFFF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 00FFFF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF0000FFFF0000FFFF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 00FFFF0000FFFF0000FFFF0000FFFF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF0000FFFF0000FFFF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFFFF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFF0000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFF000000FFFF00FF00FF00FF00FF00FF00000000FF0000FFFF0000FFFF0000 FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 FFFF0000FFFF0000FFFFFF00FF00FF00FF000000FFFF0000FFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF0000FFFF0000FFFF0000FFFF000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFF0000FFFF000000FF000000FF0000FFFF0000FFFFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFF0000FFFF000000FFFF00FF00FF00FF00000000FF0000FFFF0000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000 FFFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFF0000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 FFFFFF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000FFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF000000 00FFFF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FFFF00FF00FF00FF00000000FF000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FF000000FF000000FFFF00FF00000000FF00FFFFFFFFFFFFFF00FFFFFF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFFFFFFFFFF00FFFFFF0000 00FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FFFF00FF00000000FFFFFFFFFF00FFFFFF000000FF0080 80FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF000000FFFF00FF00FF00FF00000000FF00FFFFFF000000FF008080FF0080 80FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0000 00FFFF00FF00FF00FF00FF00FF00000000FF000000FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF008080FF008080FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF000000FF000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0080 80FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0080 80FF008080FF008080FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0000 00FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00FF000000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0000 00FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00FF000000 00FF008080FF000000FFFF00FF00FF00FF00000000FF008080FF008080FF0000 00FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00FF000000 00FF008080FF000000FFFF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FFFF00FF00FF00 FF00FF00FF00800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF008000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FFFF00 FF00800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00800000FFFF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF8000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00800000FFFF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF8000 00FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00800000FFFF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF8000 00FF800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FF000000FFFF00FF00FF00FF00000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FF000000FFFF00FF00FF00FF00000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00800000FF800000FF800000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF000000FF0000 00FFFF00FF00800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF800000FF800000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FFC0C0C0FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF800000FF800000FF000000FF000000FF000000FF000000FF0000 00FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF800000FF800000FF000000FFFFFFFFFFFFFFFFFF000000FFC0C0 C0FF000000FFC0C0C0FF000000FFC0C0C0FF000000FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF800000FF800000FF000000FFFFFFFFFF000000FFC0C0C0FF0000 00FFFFFFFFFF000000FFC0C0C0FF000000FFC0C0C0FF000000FF000000FF0000 00FFFF00FF00800000FF800000FF000000FFFFFFFFFF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFF000000FFC0C0C0FF000000FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF000000FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF000000FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00 FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF000000FFFFFF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF000000FFFF0000 FFFFFF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FFFF00FF000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFF0000FFFF0000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 00FFFF0000FFFF0000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FF000000FF000000FF000000FF000000FF000000FF0000 00FFFF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFC0C0 C0FFFFFFFFFFFFFFFFFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF000000FFFF0000FFFFFF00FF00FF00FF00FF00FF000000FFFFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFFFF00FF00FF0000FF0000FFFFFF00FF00FF00FF00FF00FF00FF00 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFF0000FFFF0000FFFF0000FFFF0000FFFFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFFFF00FF00FF0000FF0000FFFFFF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFFFF00FF00FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFFFF0000FFFF0000FFFF00FF00FF00FF00FF0000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFFFF00 FF00FF0000FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000FFFF0000FFFF0000 FFFFFF0000FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 00FFFF0000FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFF008000FF008000FF0080 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFF008000FF008000FF0080 00FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFF008000FF008000FF0080 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFF0000FF0000FFFF0000FFFF0000 FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 00FFFF0000FF000000FFFF00FF00000000FFFF0000FF0000FFFF0000FFFF0000 FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF000000FFFF00FF00000000FFFF0000FF0000FFFF0000FFFF0000 FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00 00FFFF0000FF000000FFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFFFF0000FFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFFFF0000FFFF0000FFFF00 00FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFFFF0000FFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00800080FF000000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00800080FF808080FF800080FF000000FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00800080FF808080FF800080FF800080FF800080FF800080FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000 80FF808080FF800080FF800080FF800080FF800080FF800080FF800080FF8000 80FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00800080FF8080 80FF800080FF800080FF00FFFFFF00FFFFFF00FFFFFF008080FF800080FF8000 80FF800080FF000000FFFF00FF00FF00FF00FF00FF00800080FF808080FF8000 80FF800080FF008080FF008080FF800080FF00FFFFFF00FFFFFF800080FF8000 80FF000000FF000000FFFF00FF00FF00FF00800080FF808080FF800080FF8000 80FF800080FF800080FFC0C0C0FF00FFFFFF00FFFFFF800080FF800080FF0000 00FF808080FF000000FFFF00FF00800080FF808080FF800080FF800080FF8000 80FF800080FF00FFFFFF008080FF800080FF800080FF800080FF000000FF8080 80FFC0C0C0FF000000FF000000FF800080FF000000FF000000FF800080FF8000 80FF800080FF800080FF800080FF800080FF800080FF000000FF808080FFC0C0 C0FFC0C0C0FF800080FF000000FF800080FF808080FF808080FF000000FF0000 00FF800080FF800080FF800080FF800080FF000000FF808080FFC0C0C0FFC0C0 C0FF800080FF000000FFFF00FF00800080FF808080FFFFFFFFFF808080FF8080 80FF000000FF000000FF800080FF000000FF808080FFC0C0C0FFC0C0C0FF8000 80FF000000FFFF00FF00FF00FF00000000FF808080FFC0C0C0FFFFFFFFFFFFFF FFFF808080FF808080FF000000FF808080FFC0C0C0FFC0C0C0FF800080FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF808080FFC0C0 C0FFFFFFFFFFFFFFFFFF808080FFC0C0C0FFC0C0C0FF800080FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF0000 00FF808080FFC0C0C0FFFFFFFFFFC0C0C0FF800080FF000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00000000FF000000FF808080FF800080FF000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00000000FF000000FFFF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFFFFFF8080 80FF808080FF808080FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFFFFFF8080 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFFFFFF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFFFFFF8080 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFFFFFF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FFC0C0C0FF000000FFFF00FF00000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF000000FFFF00FF00FF00FF00000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFF00FFFFFF808080FF000000FF808080FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFF00FFFFFF000000FF008080FF000000FFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFF00FFFFFFFFFFFFFF808080FF000000FF808080FF00FFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00000000FFFFFFFFFF00FFFFFFFFFFFFFF0000 00FF00FFFFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFFFFFFFFFF000000FF8080 80FF000000FF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FFC0C0C0FF000000FF000000FFFFFFFFFF000000FF808080FF8080 80FF808080FF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF000000FF000000FF000000FF808080FF808080FF000000FF8080 80FF000000FF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF008080FF000000FF000000FF808080FF808080FF808080FF0000 00FF808080FF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF008080FF000000FF000000FF000000FF000000FF0000 00FF000000FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF008080FF000000FF000000FF000000FF000000FFC0C0 C0FF000000FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF008080FF000000FF000000FF000000FF000000FFC0C0 C0FF000000FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFFC0C0C0FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFFFFFFFFFFC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFFC0C0C0FF000000FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FFC0C0C0FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF000000FF000000FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF000000FF008080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF008080FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFF000000FF008080FF008080FF000000FF000000FF000000FF0000 00FF008080FF008080FF000000FF000000FFFFFFFFFFFFFFFFFFC0C0C0FFFFFF FFFFFFFFFFFF000000FF008080FF008080FF008080FF008080FF008080FF0080 80FF008080FF008080FF000000FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FFC0C0C0FF000000FF008080FF000000FF000000FF000000FF000000FF0000 00FF000000FF008080FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF008080FF000000FF000000FF000000FF000000FFC0C0 C0FF000000FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF008080FF000000FF000000FF000000FF000000FFC0C0 C0FF000000FF008080FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFF0000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FFFFFF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000 FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF0000FFFF00FF00FF00FF00000000FF000000FF000000FF000000FF0000 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF00808080FF000000FF000000FF000000FF8080 80FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00 00FFFF00FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00808080FF000000FF808080FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000FFFF0000FFFF00 00FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00000000FFFF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF000000FFFFFF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 00FFFF00FF00FF00FF00FF0000FF0000FFFFFF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 00FFFF00FF00FF00FF00FF0000FFFF00FF000000FFFFFF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00 FF00FF00FF00FF0000FFFF00FF00FF00FF000000FFFFFF00FF00FF00FF00FF00 FF00FF00FF00000000FFFF00FF00FF00FF00000000FFFF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF000000FFFFFF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF000000FFFFFF00FF00FF00FF000000FFFFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FF00FF00FF00FF00 } end object OpenDialog: TOpenDialog DefaultExt = '.HLR' Filter = 'All supported files (*.hlr, *.hgl, *.stx, *.txt)|*.hlr;*.hgl;*.stx; *.txt|UniHighlighter Rules (*.hlr)|*.hlr|UniHighlighter Old Format (*.hgl)|*.hgl|EditPlus syntax file (*.stx)|*.stx|UltraEdit syntax file (*.txt)|*.txt|All Files (*.*)|*.*' Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing] left = 16 top = 160 end object SaveDialog: TSaveDialog DefaultExt = '.HLR' Filter = 'UniHighlighter Rules (*.hlr)|*.hlr|All Files (*.*)|*.*' Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] left = 48 top = 160 end object popColorStd: TPopupMenu left = 48 top = 96 end object popColorAdv: TPopupMenu left = 80 top = 96 end object popColorSys: TPopupMenu left = 112 top = 96 end object listColors16: TImageList left = 48 top = 128 end object listColors40: TImageList left = 80 top = 128 end object listColorsSys: TImageList left = 112 top = 128 end object listRules: TImageList left = 16 top = 128 end object popSampleMemoMenu: TPopupMenu Images = listImages OnPopup = popSampleMemoMenuPopup left = 112 top = 160 object AddselectedtoKeywords1: TMenuItem Caption = 'Add to Keywords' OnClick = AddselectedtoKeywords1Click end object N7: TMenuItem Caption = '-' end object Undo1: TMenuItem Caption = '&Undo' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF800000FF000000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF800000FF000000FF000000FF000000FF0000 00FF800000FF000000FF000000FF000000FF800000FF800000FF000000FF0000 00FF000000FF000000FF800000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 7 ShortCut = 16474 OnClick = Undo1Click end object N5: TMenuItem Caption = '-' end object Cut1: TMenuItem Caption = 'Cu&t' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF000000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF800000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF800000FF800000FF800000FF000000FF800000FF0000 00FF000000FF800000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF8000 00FF800000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF000000FF800000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 0 ShortCut = 16472 OnClick = Cut1Click end object Copy1: TMenuItem Caption = '&Copy' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FFFFFFFFFF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF000000FF0000 00FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF000000FFFFFF FFFF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF000000FFFFFF FFFF000000FF000000FFFFFFFFFF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 1 ShortCut = 16451 OnClick = Copy1Click end object Paste1: TMenuItem Caption = '&Paste' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF800000FF800000FF800000FF000000FF0000 00FF000000FF000000FF000000FF000000FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FF800000FF800000FF800000FFFFFFFFFF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFF800000FF8000 00FF800000FFFFFFFFFF800000FF800000FF800000FF800000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FFFFFFFFFF800000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF800000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF800000FF800000FF000000FF000000FF000000FF0080 80FF808080FF008080FF808080FF008080FF800000FF800000FF800000FF8000 00FF800000FF800000FF800000FF000000FF000000FF000000FF000000FF8080 80FF008080FF808080FF008080FF808080FF008080FF808080FF008080FF8080 80FF008080FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF808080FF808080FF000000FF000000FF000000FF000000FF8080 80FF808080FF000000FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0C0FFC0C0 C0FF000000FF808080FF008080FF000000FF000000FF000000FF000000FF0080 80FF808080FF008080FF000000FF00FFFFFF000000FF000000FF00FFFFFF0000 00FF808080FF008080FF808080FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF00FFFFFF00FFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 2 ShortCut = 16470 OnClick = Paste1Click end object Delete1: TMenuItem Caption = '&Delete' Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF } ImageIndex = 8 OnClick = Delete1Click end object N6: TMenuItem Caption = '-' end object SelectAll1: TMenuItem Caption = 'Select &All' ShortCut = 16449 OnClick = SelectAll1Click end end object OpenDialog2: TOpenDialog Filter = 'CLR files (*.clr)|*.clr|All Files (*.*)|*.*' Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing] left = 144 top = 160 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/synunihighlighter/source/SynUniClasses.pas������������������������������0000644�0001750�0000144�00000062271�15104114162�025276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is: SynUniHighlighter.pas, released 2003-01 All Rights Reserved. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. }{ @abstract(Provides a universal highlighter for SynEdit) @authors(Fantasist [walking_in_the_sky@yahoo.com], Vit [nevzorov@yahoo.com], Vitalik [vetal-x@mail.ru]) @created(2003) @lastmod(2004-05-12) } unit SynUniClasses; interface uses SysUtils, Graphics, Classes, SynEditHighlighter, Contnrs, Laz2_DOM; type TSymbSet = set of char; TSynInfo = class; TStreamWriter = class; TSynSymbol = class; TSymbolNode = class; TSymbolList = class; TSynRule = class; TVersionType = (vtInternalTest, vtBeta, vtRelease); TAuthorInfo = record Name: string; Email: string; Web: string; Copyright: string; Company: string; Remark: string; end; TVerInfo = record Version: integer; Revision: integer; VersionType: TVersionType; ReleaseDate: TDateTime; end; THighInfo = record Name: string; Extensions: string; Other: Boolean end; TSynInfo = class Author: TAuthorInfo; Version: TVerInfo; General: THighInfo; History: TStringList; Sample: TStringlist; constructor Create(); procedure Clear(); procedure LoadFromXml(xml: TDOMNode); procedure LoadFromStream(Stream: TStream); procedure SaveToStream(Stream: TStream; Ind: integer = 0); overload; procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; end; TSynEditProperties = class end; TSymbStartType = (stUnspecified, stAny, stTerm); TSymbBrakeType = (btUnspecified, btAny, btTerm); TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace); TStreamWriter = class Stream: TStream; constructor Create(aStream: TStream); procedure WriteString(const Str: string); procedure InsertTag(Ind: integer; Name: string; Value: string); procedure WriteTag(Ind: integer; Name: string; EndLine: boolean = False); procedure WriteParam(Key, Value: string; CloseTag: string = ''); procedure WriteBoolParam(Key: string; Value, Default: boolean; CloseTag: string = ''); end; TSynAttributes = class (TSynHighlighterAttributes) public OldColorForeground: TColor; OldColorBackground: TColor; ParentForeground: boolean; ParentBackground: boolean; constructor Create(Name: string); function ToString: String; override; function GetHashCode: PtrInt; override; procedure LoadFromString(Value: string); procedure SaveToStream(StreamWriter: TStreamWriter); end; TAbstractRule = class; TSynSymbol = class public Symbol: string; fOpenRule: TAbstractRule; StartType: TSymbStartType; BrakeType: TSymbBrakeType; StartLine: TSymbStartLine; Attributes: TSynHighlighterAttributes; constructor Create(st: string; Attribs: TSynHighlighterAttributes); virtual; destructor Destroy(); override; end; TSymbolNode = class ch: char; BrakeType: TSymbBrakeType; StartType: TSymbStartType; NextSymbs: TSymbolList; tkSynSymbol: TSynSymbol; constructor Create(AC: char; SynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); overload; virtual; constructor Create(AC: char); overload; destructor Destroy(); override; end; TSymbolList = class SymbList: TList; procedure AddSymbol(symb: TSymbolNode); procedure SetSymbolNode(Index: Integer; Value: TSymbolNode); function FindSymbol(ch: char): TSymbolNode; function GetSymbolNode(Index: integer): TSymbolNode; function GetCount(): integer; property Nodes[index: integer]: TSymbolNode read GetSymbolNode write SetSymbolNode; property Count: Integer read GetCount; constructor Create(); virtual; destructor Destroy(); override; end; TSynUniStyles = class (TObjectList) public FileName: string; constructor Create(); destructor Destroy(); override; function GetStyle(const Name: string): TSynAttributes; function GetStyleDef(const Name: string; const Def: TSynAttributes): TSynAttributes; procedure AddStyle(Name: string; Foreground, Background: TColor; FontStyle: TFontStyles); procedure ListStylesNames(const AList: TStrings); function GetStylesAsXML(): string; procedure Load(); procedure Save(); end; TAbstractRule = class Enabled: boolean; constructor Create(); end; TSynRule = class(TAbstractRule) public Ind: integer; //temp Name: string; Attribs: TSynAttributes; Style: string; Styles: TSynUniStyles; constructor Create(); destructor Destroy(); override; procedure LoadFromXml(xml: TDOMNode); virtual; abstract; procedure LoadFromStream(aSrc: TStream); procedure LoadFromFile(FileName: string); function GetAsStream(): TMemoryStream; procedure SaveToStream(Stream: TStream; Ind: integer = 0); overload; procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; virtual; abstract; end; function StrToSet(st: string): TSymbSet; function SetToStr(st: TSymbSet): string; function StrToFontStyle(Style: string): TFontStyles; function FontStyleToStr(Style: TFontStyles): string; procedure FreeList(var List: TList); procedure ClearList(List: TList); function Indent(i: integer): string; const AbsoluteTermSymbols: TSymbSet = [#0, #9, #10, #13, #32]; EOL = #13#10; CloseEmptyTag = '/>'; CloseStartTag = '>'; implementation uses Crc, Laz2_XMLRead; function StrToSet(st: string): TSymbSet; var i: integer; begin result := []; for i := 1 to length(st) do Result := Result + [st[i]]; end; function SetToStr(st: TSymbSet): string; var b: byte; begin Result := ''; for b := 1 to 255 do if (chr(b) in st) and (not (chr(b) in AbsoluteTermSymbols)) then Result := Result+chr(b); end; function StrToFontStyle(Style: string): TFontStyles; begin Result := []; if Pos('B', Style) > 0 then Include( Result, fsBold ); if Pos('I', Style) > 0 then Include( Result, fsItalic ); if Pos('U', Style) > 0 then Include( Result, fsUnderline ); if Pos('S', Style) > 0 then Include( Result, fsStrikeOut ); end; function FontStyleToStr(Style: TFontStyles): string; begin Result := ''; if fsBold in Style then Result := Result + 'B'; if fsItalic in Style then Result := Result + 'I'; if fsUnderline in Style then Result := Result + 'U'; if fsStrikeOut in Style then Result := Result + 'S'; end; procedure FreeList(var List: TList); var i: integer; begin if List = nil then exit; for i := 0 to List.Count-1 do TObject(List[i]).Free; List.Free; List := nil; end; procedure ClearList(List: TList); var i: integer; begin if List = nil then exit; for i := 0 to List.Count-1 do TObject(List[i]).Free; List.Clear; end; //==== TInfo ================================================================= constructor TSynInfo.Create(); begin inherited; end; procedure TSynInfo.Clear(); begin General.Other := False; General.Name := ''; General.Extensions := ''; Author.Name := ''; Author.Email := ''; Author.Web := ''; Author.Copyright := ''; Author.Company := ''; Author.Remark := ''; Version.Version := 0; Version.Revision := 0; Version.ReleaseDate := 0; Version.VersionType := vtInternalTest; History.Clear; Sample.Clear; end; function ReadValue(ANode: TDOMNode): String; begin if Assigned(ANode.FirstChild) then Result:= ANode.FirstChild.NodeValue else Result:= EmptyStr; end; procedure TSynInfo.LoadFromXml(xml: TDOMNode); var i, J: integer; Key, Value: string; ChildNode1, ChildNode2: TDOMNode; begin for J := 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode1:= xml.ChildNodes.Item[J]; if SameText('General', ChildNode1.NodeName) then for i := 0 to Int32(ChildNode1.Attributes.Length) - 1 do begin Key := ChildNode1.Attributes[i].NodeName; Value := ChildNode1.Attributes[i].NodeValue; if SameText('Name', Key) then General.Name := Value else if SameText('Extensions', Key) then General.Extensions := Value else if SameText('Other', Key) then General.Other := StrToBoolDef(Value, False) end else if SameText('Author', ChildNode1.NodeName) then for i := 0 to Int32(ChildNode1.Attributes.Length) - 1 do begin Key := ChildNode1.Attributes[i].NodeName; Value := ChildNode1.Attributes[i].NodeValue; if SameText('Name', Key) then Author.Name := Value else if SameText('Email', Key) then Author.Email := Value else if SameText('Web', Key) then Author.Web := Value else if SameText('Copyright', Key) then Author.Copyright := Value else if SameText('Company', Key) then Author.Company := Value else if SameText('Remark', Key) then Author.Remark := Value else end else if SameText('Version', ChildNode1.NodeName) then for i := 0 to Int32(ChildNode1.Attributes.Length) - 1 do begin Key := ChildNode1.Attributes[i].NodeName; Value := ChildNode1.Attributes[i].NodeValue; if SameText('Version', Key) then Version.Version := StrToIntDef(Value, 0) else if SameText('Revision', Key) then Version.Revision := StrToIntDef(Value, 0) else if SameText('Date', Key) then try Value := StringReplace(Value, ',', DefaultFormatSettings.DecimalSeparator, [rfReplaceAll]); // Since no one ever call something like "GetFormatSettings", "DefaultFormatSettings" still hold the default values. Value := StringReplace(Value, '.', DefaultFormatSettings.DecimalSeparator, [rfReplaceAll]); // Just in case there is something we did not think about. Version.ReleaseDate := StrToFloat(Value, DefaultFormatSettings); except // Ignore end else if SameText('Type', Key) then if Value = 'Beta' then Version.VersionType := vtBeta else if Value = 'Release' then Version.VersionType := vtRelease else Version.VersionType := vtInternalTest end else if SameText('History', ChildNode1.NodeName) then begin History.Clear; Sample.Clear; for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'H' then History.Add(ReadValue(ChildNode2)); end; end else if SameText('Sample', ChildNode1.NodeName) then begin Sample.Clear; for I:= 0 to Int32(ChildNode1.ChildNodes.Count) - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if ChildNode2.NodeName = 'S' then Sample.Add(ReadValue(ChildNode2)); end; end; end; end; procedure TSynInfo.LoadFromStream(Stream: TStream); var xml: TXMLDocument = nil; begin try ReadXMLFile(xml, Stream); LoadFromXml(xml); finally xml.Free; end; end; procedure TSynInfo.SaveToStream(Stream: TStream; Ind: integer); var StreamWriter: TStreamWriter; begin StreamWriter := TStreamWriter.Create(Stream); SaveToStream(StreamWriter, Ind); StreamWriter.Free; end; procedure TSynInfo.SaveToStream(StreamWriter: TStreamWriter; Ind: integer); var i: integer; begin with StreamWriter do begin WriteTag(Ind, 'Info', True); WriteTag(Ind+2, 'General'); WriteParam('Name', General.Name); WriteParam('Extensions', General.Extensions); WriteParam('Other', BoolToStr(General.Other), CloseEmptyTag); WriteTag(Ind+2, 'Author'); WriteParam('Name', Author.Name); WriteParam('Email', Author.Email); WriteParam('Web', Author.Web); WriteParam('Copyright', Author.Copyright); WriteParam('Company', Author.Company); WriteParam('Remark', Author.Remark, CloseEmptyTag); WriteTag(Ind+2, 'Version'); WriteParam('Version', IntToStr(Version.Version)); WriteParam('Revision', IntToStr(Version.Revision)); WriteParam('Date', FloatToStr(Version.ReleaseDate), CloseEmptyTag); { case Version.VersionType of vtInternalTest: WriteParam('Type', 'Internal Test'); vtBeta: WriteParam('Type', 'Beta'); vtRelease: WriteParam('Type', 'Release'); end;} WriteTag(Ind+2, 'History', True); for i := 0 to History.Count-1 do InsertTag(Ind+4, 'H', History[i]); WriteTag(Ind+2, '/History', True); WriteTag(Ind+2, 'Sample', True); for i := 0 to Sample.Count-1 do InsertTag(Ind+4, 'S', Sample[i]); WriteTag(Ind+2, '/Sample', True); WriteTag(Ind, '/Info', True); end; end; //==== TStreamWriter ========================================================= function Indent(i: integer): string; begin SetLength(Result, i); // if i > 0 then !!!!!!!!!!!!!!!!!!!!!!!!! {To prevent error...} {$IFDEF FPC} if i > 0 then {$ENDIF} FillChar(Result[1], i, #32); end; function GetValidValue(Value: string): string; begin Value := StringReplace(Value, '&', '&', [rfReplaceAll, rfIgnoreCase]); Value := StringReplace(Value, '<', '<', [rfReplaceAll, rfIgnoreCase]); Value := StringReplace(Value, '"', '"', [rfReplaceAll, rfIgnoreCase]); Result := StringReplace(Value, '>', '>', [rfReplaceAll, rfIgnoreCase]); end; constructor TStreamWriter.Create(aStream: TStream); begin Stream := aStream; end; procedure TStreamWriter.WriteString(const Str: string); begin Stream.Write(Str[1], Length(Str)); end; procedure TStreamWriter.InsertTag(Ind: integer; Name: string; Value: string); begin WriteString(Format('%s<%s>%s</%s>'+EOL, [Indent(Ind), Name, GetValidValue(Value), Name])); end; procedure TStreamWriter.WriteTag(Ind: integer; Name: string; EndLine: boolean = False); begin WriteString(Format('%s<%s', [Indent(Ind), Name])); if EndLine then WriteString('>' + EOL); end; procedure TStreamWriter.WriteParam(Key, Value: string; CloseTag: string = ''); begin WriteString(Format(' %s="%s"', [Key, GetValidValue(Value)])); if CloseTag <> '' then WriteString(CloseTag + EOL); end; procedure TStreamWriter.WriteBoolParam(Key: string; Value, Default: boolean; CloseTag: string = ''); begin If Value <> Default then WriteParam(Key, BoolToStr(Value,True), CloseTag); end; //==== TAttributes =========================================================== constructor TSynAttributes.Create(Name: String); begin inherited Create(Name{SYNS_AttrDefaultPackage}); end; function TSynAttributes.ToString: String; begin Result:= '$' + HexStr(Foreground, 8) + ',' + '$' + HexStr(Background, 8) + ';' + BoolToStr(ParentForeground,True) + ':' + BoolToStr(ParentBackground,True) + '.' + FontStyleToStr(Style); end; function TSynAttributes.GetHashCode: PtrInt; var ACrc: Cardinal = 0; AStyle: TFontStyles; ABackground: TColor; AForeground: TColor; begin AStyle:= Style; ABackground:= Background; AForeground:= Foreground; ACrc:= CRC32(ACrc, @ABackground, SizeOf(TColor)); ACrc:= CRC32(ACrc, @AForeground, SizeOf(TColor)); ACrc:= CRC32(ACrc, @AStyle, SizeOf(TFontStyles)); ACrc:= CRC32(ACrc, @ParentForeground, SizeOf(Boolean)); Result:= PtrInt(CRC32(ACrc, @ParentBackground, SizeOf(Boolean))); end; procedure TSynAttributes.LoadFromString(Value: string); begin ParentForeground := False; ParentBackground := False; Foreground := StrToIntDef(Copy(Value, 1, pos(',',Value)-1), 0); OldColorForeground := Foreground; Background := StrToIntDef(Copy(Value, pos(',',Value)+1, pos(';',Value)-pos(',',Value)-1), $FFFFFF); OldColorBackground := Background; ParentForeground := LowerCase(Copy(Value, pos(';',Value)+1, pos(':',Value)-pos(';',Value)-1)) = 'true'; ParentBackground := LowerCase(Copy(Value, pos(':',Value)+1, pos('.',Value)-pos(':',Value)-1)) = 'true'; Style := StrToFontStyle(Copy(Value, pos('.',Value)+1, Length(Value)-pos('.',Value))); end; procedure TSynAttributes.SaveToStream(StreamWriter: TStreamWriter); begin StreamWriter.WriteParam('Attributes', ToString); end; //==== TSynSymbol ============================================================ constructor TSynSymbol.Create(st: string; Attribs: TSynHighlighterAttributes); //: Constructor of TSynSymbol begin Attributes := Attribs; Symbol := st; fOpenRule := nil; StartLine := slNotFirst; StartType := stUnspecified; BrakeType := btUnspecified; end; destructor TSynSymbol.Destroy; //: Destructor of TSynSymbol begin inherited; end; //==== TSymbolNode =========================================================== constructor TSymbolNode.Create(AC: char; SynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); begin ch := AC; NextSymbs := TSymbolList.Create; BrakeType := ABrakeType; StartType := SynSymbol.StartType; tkSynSymbol := SynSymbol; end; constructor TSymbolNode.Create(AC: char); begin ch := AC; NextSymbs := TSymbolList.Create; tkSynSymbol := nil; end; destructor TSymbolNode.Destroy; //: Destructor of TSymbolNode begin NextSymbs.Free; inherited; end; //==== TSymbolList =========================================================== procedure TSymbolList.AddSymbol(symb: TSymbolNode); //: Add Node to SymbolList begin SymbList.Add(symb); end; constructor TSymbolList.Create; //: Constructor of TSymbolList begin SymbList := TList.Create; end; destructor TSymbolList.Destroy; //: Destructor of TSymbolList begin FreeList(SymbList); inherited; end; function TSymbolList.FindSymbol(ch: char): TSymbolNode; //: Find Node in SymbolList by char var i: integer; begin Result := nil; for i := 0 to SymbList.Count-1 do if TSymbolNode(SymbList[i]).ch = ch then begin Result := TSymbolNode(SymbList[i]); break; end; end; function TSymbolList.GetCount: integer; //: Return Node count in SymbolList begin Result := SymbList.Count end; function TSymbolList.GetSymbolNode(Index: integer): TSymbolNode; //: Return Node in SymbolList by index begin Result := TSymbolNode(SymbList[index]); end; procedure TSymbolList.SetSymbolNode(Index: Integer; Value: TSymbolNode); //: Set Node in SymbolList bt index begin if Index < SymbList.Count then TSymbolNode(SymbList[index]).Free; SymbList[index] := Value; end; constructor TAbstractRule.Create(); begin Enabled := True; end; //==== TSynRule ============================================================== constructor TSynRule.Create; begin inherited; ind := -1; Attribs := TSynAttributes.Create('unknown'); end; destructor TSynRule.Destroy; begin Attribs.Free; inherited Destroy; end; function TSynRule.GetAsStream: TMemoryStream; begin Result := TMemoryStream.Create; SaveToStream(Result); end; procedure TSynRule.SaveToStream(Stream: TStream; Ind: integer = 0); var StreamWriter: TStreamWriter; begin StreamWriter := TStreamWriter.Create(Stream); SaveToStream(StreamWriter, Ind); StreamWriter.Free; end; procedure TSynRule.LoadFromStream(aSrc: TStream); var I: Integer; ChildNode: TDOMNode; TagName: UnicodeString; xml: TXMLDocument = nil; begin if ClassName = 'TSynRange' then TagName := 'Range' else if ClassName = 'TSynKeyList' then TagName := 'Keywords' else if ClassName = 'TSynSet' then TagName := 'Set' else raise Exception.Create(ClassName + '.LoadFromStream - Unknown rule to load!'); try ReadXMLFile(xml, aSrc); for I:= 0 to Int32(xml.ChildNodes.Count) - 1 do begin ChildNode:= xml.ChildNodes.Item[I]; if SameText(ChildNode.NodeName, TagName) then LoadFromXml(ChildNode); end; finally xml.Free; end; end; procedure TSynRule.LoadFromFile(FileName: string); var xml: TXMLDocument = nil; begin if not FileExists(FileName) then raise Exception.Create(ClassName + '.LoadFromFile - "'+FileName+'" does not exists.'); try ReadXMLFile(xml, FileName); LoadFromXml(xml); finally xml.Free; end; end; //==== TSynUniStyles ========================================================= constructor TSynUniStyles.Create; begin inherited Create(True); end; destructor TSynUniStyles.Destroy; begin inherited; end; function TSynUniStyles.GetStyle(const Name: string): TSynAttributes; begin Result := GetStyleDef(Name, nil); end; function TSynUniStyles.GetStyleDef(const Name: string; const Def: TSynAttributes): TSynAttributes; var i: integer; begin Result := Def; for i := 0 to Self.Count-1 do if SameText(TSynAttributes(Self.Items[i]).Name, Name) then begin Result := TSynAttributes(Self.Items[i]); Exit; end; end; procedure TSynUniStyles.AddStyle(Name: string; Foreground, Background: TColor; FontStyle: TFontStyles); var Atr: TSynAttributes; begin Atr := TSynAttributes.Create(Name); Atr.Foreground := Foreground; Atr.Background := Background; Atr.Style := FontStyle; Self.Add(Atr); end; procedure TSynUniStyles.ListStylesNames(const AList: TStrings); var i: integer; begin aList.BeginUpdate; try aList.Clear; for i := 0 to Self.Count-1 do aList.Add(TSynAttributes(Self.Items[i]).Name); finally aList.EndUpdate; end; end; function TSynUniStyles.GetStylesAsXML: string; var i: integer; begin // Result:= '<?xml version="1.0" encoding="ISO-8859-1"?>'#13#10#13#10'; Result := '<Schemes>'#13#10; Result := Result + ' <Scheme Name="Default">'#13#10; for i := 0 to Self.Count-1 do with TSynAttributes(Self.Items[I]) do Result := Result + ' <Style Name="' + Name + '" Fg="' + IntToStr(Foreground) + '" Bg="' + IntToStr(Background) + '" FontStyle="' + FontStyleToStr(Style) + '/>'#13#10; Result := Result + ' </Scheme>'#13#10 + '</Schemes>'; end; procedure TSynUniStyles.Load; var I: Integer; Xml: TXMLDocument; Style: TSynAttributes; ARoot, ChildNode: TDOMNode; Foreground, Background: TColor; Name, FontStyle, Key, Value: string; begin if not FileExists(FileName) then raise EFileNotFoundException.Create(ClassName + '.Load - "' + FileName + '" does not exists.'); Clear; ReadXMLFile(Xml, FileName); try ARoot:= Xml.FindNode('Scheme'); if Assigned(ARoot) then begin ChildNode:= ARoot.FirstChild; while Assigned(ChildNode) do begin if SameText(ChildNode.NodeName, 'Style') then begin Name := ''; Foreground := clWindowText; Background := clWindow; FontStyle := ''; for I := 0 to Int32(ChildNode.Attributes.Length) - 1 do begin Key := ChildNode.Attributes[I].NodeName; Value := ChildNode.Attributes[I].NodeValue; if SameText('Name', Key) then Name := Value else if SameText('Foreground', Key) then Foreground := StrToIntDef(Value, clWindowText) else if SameText('Background', Key) then Background := StrToIntDef(Value, clWindow) else if SameText('FontStyle', Key) then FontStyle := Value else end; Style := Self.GetStyle(Name); if Style <> nil then begin Style.Foreground := Foreground; Style.Background := Background; Style.Style := StrToFontStyle(FontStyle); end else Self.AddStyle(Name, Foreground, Background, StrToFontStyle(FontStyle)); end; ChildNode:= ChildNode.NextSibling; end; end; finally FreeAndNil(Xml); end; end; procedure TSynUniStyles.Save; var S: string; begin if not FileExists(FileName) then raise Exception.Create(ClassName + '.Save - "' + FileName + '" does not exists.'); S := Self.GetStylesAsXML; with TFileStream.Create(FileName, fmOpenWrite) do try Write(Pointer(S)^, length(S)); finally Free; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/�������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020343� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/multithreadprocslaz.pas��������������������������������0000644�0001750�0000144�00000000636�15104114162�025155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit MultiThreadProcsLaz; {$warn 5023 off : no warning about unused units} interface uses MTProcs, MTPUtils, MTPCPU, LazarusPackageIntf; implementation procedure Register; begin end; initialization RegisterPackage('MultiThreadProcsLaz', @Register); end. ��������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/multithreadprocslaz.lpk��������������������������������0000644�0001750�0000144�00000002611�15104114162�025153� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="5"> <Name Value="MultiThreadProcsLaz"/> <Type Value="RunAndDesignTime"/> <Author Value="Mattias Gaertner mattias@freepascal.org"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Other> <CustomOptions Value="$(IDEBuildOptions)"/> </Other> </CompilerOptions> <Description Value="Running procedures and methods parallel via a thread pool."/> <License Value="modified LGPL2"/> <Version Major="1" Minor="2" Release="1"/> <Files Count="3"> <Item1> <Filename Value="mtprocs.pas"/> <UnitName Value="MTProcs"/> </Item1> <Item2> <Filename Value="mtputils.pas"/> <UnitName Value="MTPUtils"/> </Item2> <Item3> <Filename Value="mtpcpu.pas"/> <UnitName Value="MTPCPU"/> </Item3> </Files> <RequiredPkgs Count="1"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> </RequiredPkgs> <UsageOptions> <CustomOptions Value="-dUseCThreads"/> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> �����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/mtputils.pas�������������������������������������������0000644�0001750�0000144�00000013725�15104114162�022741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ ********************************************************************** This file is part of the Free Pascal run time library. See the file COPYING.FPC, included in this distribution, for details about the license. ********************************************************************** Utilities using light weight threads. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org Abstract: Utility functions using mtprocs. For example a parallel sort. } unit MTPUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, MTProcs; type TSortPartEvent = procedure(aList: PPointer; aCount: PtrInt); { TParallelSortPointerList } TParallelSortPointerList = class protected fBlockSize: PtrInt; fBlockCntPowOf2Offset: PtrInt; FMergeBuffer: PPointer; procedure MTPSort(Index: PtrInt; {%H-}Data: Pointer; Item: TMultiThreadProcItem); public List: PPointer; Count: PtrInt; Compare: TListSortCompare; BlockCnt: PtrInt; OnSortPart: TSortPartEvent; constructor Create(aList: PPointer; aCount: PtrInt; const aCompare: TListSortCompare; MaxThreadCount: integer = 0); procedure Sort; end; { Sort a list in parallel using merge sort. You must provide a compare function. You can provide your own sort function for the blocks which are sorted in a single thread, for example a normal quicksort. } procedure ParallelSortFPList(List: TFPList; const Compare: TListSortCompare; MaxThreadCount: integer = 0; const OnSortPart: TSortPartEvent = nil); implementation procedure ParallelSortFPList(List: TFPList; const Compare: TListSortCompare; MaxThreadCount: integer; const OnSortPart: TSortPartEvent); var Sorter: TParallelSortPointerList; begin if List.Count<=1 then exit; Sorter:=TParallelSortPointerList.Create(@List.List[0],List.Count,Compare, MaxThreadCount); try Sorter.OnSortPart:=OnSortPart; Sorter.Sort; finally Sorter.Free; end; end; { TParallelSortPointerList } procedure TParallelSortPointerList.MTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); procedure MergeSort(L, M, R: PtrInt; Recursive: boolean); var Src1: PtrInt; Src2: PtrInt; Dest1: PtrInt; begin if R-L<=1 then begin // sort lists of 1 and 2 items directly if L<R then begin if Compare(List[L],List[R])>0 then begin FMergeBuffer[L]:=List[L]; List[L]:=List[R]; List[R]:=FMergeBuffer[L]; end; end; exit; end; // sort recursively if Recursive then begin MergeSort(L,(L+M) div 2,M-1,true); MergeSort(M,(M+R+1) div 2,R,true); end; // merge both blocks Src1:=L; Src2:=M; Dest1:=L; repeat if (Src1<M) and ((Src2>R) or (Compare(List[Src1],List[Src2])<=0)) then begin FMergeBuffer[Dest1]:=List[Src1]; inc(Dest1); inc(Src1); end else if (Src2<=R) then begin FMergeBuffer[Dest1]:=List[Src2]; inc(Dest1); inc(Src2); end else break; until false; // write the mergebuffer back Src1:=L; Dest1:=l; while Src1<=R do begin List[Dest1]:=FMergeBuffer[Src1]; inc(Src1); inc(Dest1); end; end; var L, M, R: PtrInt; i: integer; NormIndex: Integer; Range: integer; MergeIndex: Integer; begin L:=fBlockSize*Index; R:=L+fBlockSize-1; if R>=Count then R:=Count-1; // last block //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' sort block: ',L,' ',(L+R+1) div 2,' ',R); if Assigned(OnSortPart) then OnSortPart(@List[L],R-L+1) else MergeSort(L,(L+R+1) div 2,R,true); // merge // 0 1 2 3 4 5 6 7 // \/ \/ \/ \/ // \/ \/ // \/ // For example: BlockCnt = 5 => Index in 0..4 // fBlockCntPowOf2Offset = 3 (=8-5) // NormIndex = Index + 3 => NormIndex in 3..7 NormIndex:=Index+fBlockCntPowOf2Offset; i:=0; repeat Range:=1 shl i; if NormIndex and Range=0 then break; // merge left and right block(s) MergeIndex:=NormIndex-Range-fBlockCntPowOf2Offset; if (MergeIndex+Range-1>=0) then begin // wait until left blocks have finished //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' wait for block ',MergeIndex); if (MergeIndex>=0) and (not Item.WaitForIndex(MergeIndex)) then exit; // compute left and right block bounds M:=L; L:=(MergeIndex-Range+1)*fBlockSize; if L<0 then L:=0; //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' merge blocks ',L,' ',M,' ',R); MergeSort(L,M,R,false); end; inc(i); until false; //WriteLn('TParallelSortPointerList.LWTSort END Index='+IntToStr(Index)); end; constructor TParallelSortPointerList.Create(aList: PPointer; aCount: PtrInt; const aCompare: TListSortCompare; MaxThreadCount: integer); begin List:=aList; Count:=aCount; Compare:=aCompare; BlockCnt:=Count div 100; // at least 100 items per thread if BlockCnt>ProcThreadPool.MaxThreadCount then BlockCnt:=ProcThreadPool.MaxThreadCount; if (MaxThreadCount>0) and (BlockCnt>MaxThreadCount) then BlockCnt:=MaxThreadCount; if BlockCnt<1 then BlockCnt:=1; end; procedure TParallelSortPointerList.Sort; begin if (Count<=1) then exit; fBlockSize:=(Count+BlockCnt-1) div BlockCnt; fBlockCntPowOf2Offset:=1; while fBlockCntPowOf2Offset<BlockCnt do fBlockCntPowOf2Offset:=fBlockCntPowOf2Offset*2; fBlockCntPowOf2Offset:=fBlockCntPowOf2Offset-BlockCnt; //WriteLn('TParallelSortPointerList.Sort BlockCnt=',BlockCnt,' fBlockSize=',fBlockSize,' fBlockCntPowOf2Offset=',fBlockCntPowOf2Offset); GetMem(FMergeBuffer,SizeOf(Pointer)*Count); try ProcThreadPool.DoParallel(@MTPSort,0,BlockCnt-1); finally FreeMem(FMergeBuffer); FMergeBuffer:=nil; end; end; end. �������������������������������������������doublecmd-1.1.30/components/multithreadprocs/mtprocs.pas��������������������������������������������0000644�0001750�0000144�00000065411�15104114162�022546� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ ********************************************************************** This file is part of the Free Pascal run time library. See the file COPYING.FPC, included in this distribution, for details about the license. ********************************************************************** Unit for light weight threads. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org Abstract: Light weight threads. This unit provides methods to easily run a procedure/method with several threads at once. } unit MTProcs; {$mode objfpc}{$H+} {$inline on} {$ModeSwitch nestedprocvars} interface uses Classes, SysUtils, MTPCPU; type TProcThreadGroup = class; TProcThreadPool = class; TProcThread = class; { TMultiThreadProcItem } TMTPThreadState = ( mtptsNone, mtptsActive, mtptsWaitingForIndex, mtptsWaitingFailed, mtptsInactive, mtptsTerminated ); TMultiThreadProcItem = class private FGroup: TProcThreadGroup; FIndex: PtrInt; FThread: TProcThread; FWaitingForIndexEnd: PtrInt; FWaitingForIndexStart: PtrInt; fWaitForPool: PRTLEvent; FState: TMTPThreadState; public destructor Destroy; override; function WaitForIndexRange(StartIndex, EndIndex: PtrInt): boolean; function WaitForIndex(Index: PtrInt): boolean; inline; procedure CalcBlock(Index, BlockSize, LoopLength: PtrInt; out BlockStart, BlockEnd: PtrInt); inline; property Index: PtrInt read FIndex; property Group: TProcThreadGroup read FGroup; property WaitingForIndexStart: PtrInt read FWaitingForIndexStart; property WaitingForIndexEnd: PtrInt read FWaitingForIndexEnd; property Thread: TProcThread read FThread; end; { TProcThread } TMTPThreadList = ( mtptlPool, mtptlGroup ); TProcThread = class(TThread) private FItem: TMultiThreadProcItem; FNext, FPrev: array[TMTPThreadList] of TProcThread; procedure AddToList(var First: TProcThread; ListType: TMTPThreadList); inline; procedure RemoveFromList(var First: TProcThread; ListType: TMTPThreadList); inline; procedure Terminating(aPool: TProcThreadPool; E: Exception); public constructor Create; destructor Destroy; override; procedure Execute; override; property Item: TMultiThreadProcItem read FItem; end; TMTMethod = procedure(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem) of object; TMTProcedure = procedure(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); TMTNestedProcedure = procedure(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem) is nested; { TProcThreadGroup Each task creates a new group of threads. A group can either need more threads or it has finished and waits for its threads to end. The thread that created the group is not in the list FFirstThread. } TMTPGroupState = ( mtpgsNone, mtpgsNeedThreads, // the groups waiting for more threads to help mtpgsFinishing, // the groups waiting for its threads to finish mtpgsException // there was an exception => close asap ); TProcThreadGroup = class private FEndIndex: PtrInt; FException: Exception; FFirstRunningIndex: PtrInt; FFirstThread: TProcThread; FLastRunningIndex: PtrInt; FMaxThreads: PtrInt; FNext, FPrev: TProcThreadGroup; FPool: TProcThreadPool; FStarterItem: TMultiThreadProcItem; FStartIndex: PtrInt; FState: TMTPGroupState; FTaskData: Pointer; FTaskFrame: Pointer; FTaskMethod: TMTMethod; FTaskNested: TMTNestedProcedure; FTaskProcedure: TMTProcedure; FThreadCount: PtrInt; procedure AddToList(var First: TProcThreadGroup; ListType: TMTPGroupState); inline; procedure RemoveFromList(var First: TProcThreadGroup); inline; function NeedMoreThreads: boolean; inline; procedure IncreaseLastRunningIndex(Item: TMultiThreadProcItem); procedure AddThread(AThread: TProcThread); procedure RemoveThread(AThread: TProcThread); inline; procedure Run(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); inline; procedure IndexComplete(Index: PtrInt); procedure WakeThreadsWaitingForIndex; function HasFinishedIndex(aStartIndex, aEndIndex: PtrInt): boolean; procedure EnterExceptionState(E: Exception); public constructor Create; destructor Destroy; override; property Pool: TProcThreadPool read FPool; property StartIndex: PtrInt read FStartIndex; property EndIndex: PtrInt read FEndIndex; property FirstRunningIndex: PtrInt read FFirstRunningIndex; // first started property LastRunningIndex: PtrInt read FLastRunningIndex; // last started property TaskData: Pointer read FTaskData; property TaskMethod: TMTMethod read FTaskMethod; property TaskNested: TMTNestedProcedure read FTaskNested; property TaskProcedure: TMTProcedure read FTaskProcedure; property TaskFrame: Pointer read FTaskFrame; property MaxThreads: PtrInt read FMaxThreads; property StarterItem: TMultiThreadProcItem read FStarterItem; end; { TLightWeightThreadPool Group 0 are the inactive threads } { TProcThreadPool } TProcThreadPool = class private FMaxThreadCount: PtrInt; FThreadCount: PtrInt; FFirstInactiveThread: TProcThread; FFirstActiveThread: TProcThread; FFirstTerminatedThread: TProcThread; FFirstGroupNeedThreads: TProcThreadGroup; FFirstGroupFinishing: TProcThreadGroup; FCritSection: TRTLCriticalSection; FDestroying: boolean; procedure SetMaxThreadCount(const AValue: PtrInt); procedure CleanTerminatedThreads; procedure DoParallelIntern(const AMethod: TMTMethod; const AProc: TMTProcedure; const ANested: TMTNestedProcedure; const AFrame: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); public // for debugging only: the critical section is public: procedure EnterPoolCriticalSection; inline; procedure LeavePoolCriticalSection; inline; public constructor Create; destructor Destroy; override; procedure DoParallel(const AMethod: TMTMethod; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); inline; procedure DoParallel(const AProc: TMTProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); inline; procedure DoParallelNested(const ANested: TMTNestedProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); inline; // experimental procedure DoParallelLocalProc(const LocalProc: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); // do not make this inline! // utility functions for loops: procedure CalcBlockSize(LoopLength: PtrInt; out BlockCount, BlockSize: PtrInt; MinBlockSize: PtrInt = 0); inline; public property MaxThreadCount: PtrInt read FMaxThreadCount write SetMaxThreadCount; property ThreadCount: PtrInt read FThreadCount; end; var ProcThreadPool: TProcThreadPool = nil; threadvar CurrentThread: TThread; // TProcThread sets this, you can set this for your own TThreads descendants implementation { TMultiThreadProcItem } destructor TMultiThreadProcItem.Destroy; begin if fWaitForPool<>nil then begin RTLeventdestroy(fWaitForPool); fWaitForPool:=nil; end; inherited Destroy; end; function TMultiThreadProcItem.WaitForIndexRange( StartIndex, EndIndex: PtrInt): boolean; var aPool: TProcThreadPool; begin //WriteLn('TLightWeightThreadItem.WaitForIndexRange START Index='+IntToStr(Index)+' StartIndex='+IntToStr(StartIndex)+' EndIndex='+IntToStr(EndIndex)); if (EndIndex>=Index) then exit(false); if EndIndex<StartIndex then exit(true); if Group=nil then exit(true); // a single threaded group has no group object // multi threaded group aPool:=Group.Pool; if aPool.FDestroying then exit(false); // no more wait allowed aPool.EnterPoolCriticalSection; try if Group.FState=mtpgsException then begin //WriteLn('TLightWeightThreadItem.WaitForIndexRange Index='+IntToStr(Index)+', Group closing because of error'); exit(false); end; if Group.HasFinishedIndex(StartIndex,EndIndex) then begin //WriteLn('TLightWeightThreadItem.WaitForIndexRange Index='+IntToStr(Index)+', range already finished'); exit(true); end; FState:=mtptsWaitingForIndex; FWaitingForIndexStart:=StartIndex; FWaitingForIndexEnd:=EndIndex; if fWaitForPool=nil then fWaitForPool:=RTLEventCreate; RTLeventResetEvent(fWaitForPool); finally aPool.LeavePoolCriticalSection; end; //WriteLn('TLightWeightThreadItem.WaitForIndexRange '+IntToStr(Index)+' waiting ... '); RTLeventWaitFor(fWaitForPool); Result:=FState=mtptsActive; FState:=mtptsActive; //WriteLn('TLightWeightThreadItem.WaitForIndexRange END '+IntToStr(Index)); end; function TMultiThreadProcItem.WaitForIndex(Index: PtrInt): boolean; inline; begin Result:=WaitForIndexRange(Index,Index); end; procedure TMultiThreadProcItem.CalcBlock(Index, BlockSize, LoopLength: PtrInt; out BlockStart, BlockEnd: PtrInt); begin BlockStart:=BlockSize*Index; BlockEnd:=BlockStart+BlockSize; if LoopLength<BlockEnd then BlockEnd:=LoopLength; dec(BlockEnd); end; { TProcThread } procedure TProcThread.AddToList(var First: TProcThread; ListType: TMTPThreadList); begin FNext[ListType]:=First; if FNext[ListType]<>nil then FNext[ListType].FPrev[ListType]:=Self; First:=Self; end; procedure TProcThread.RemoveFromList(var First: TProcThread; ListType: TMTPThreadList); begin if First=Self then First:=FNext[ListType]; if FNext[ListType]<>nil then FNext[ListType].FPrev[ListType]:=FPrev[ListType]; if FPrev[ListType]<>nil then FPrev[ListType].FNext[ListType]:=FNext[ListType]; FNext[ListType]:=nil; FPrev[ListType]:=nil; end; procedure TProcThread.Terminating(aPool: TProcThreadPool; E: Exception); begin aPool.EnterPoolCriticalSection; try // remove from group if Item.FGroup<>nil then begin // an exception occured Item.FGroup.EnterExceptionState(E); Item.FGroup.RemoveThread(Self); Item.FGroup:=nil; end; // move to pool's terminated threads case Item.FState of mtptsActive: RemoveFromList(aPool.FFirstActiveThread,mtptlPool); mtptsInactive: RemoveFromList(aPool.FFirstInactiveThread,mtptlPool); end; AddToList(aPool.FFirstTerminatedThread,mtptlPool); Item.FState:=mtptsTerminated; finally aPool.LeavePoolCriticalSection; end; end; constructor TProcThread.Create; begin inherited Create(true); fItem:=TMultiThreadProcItem.Create; fItem.fWaitForPool:=RTLEventCreate; fItem.FThread:=Self; end; destructor TProcThread.Destroy; begin FreeAndNil(FItem); inherited Destroy; end; procedure TProcThread.Execute; var aPool: TProcThreadPool; Group: TProcThreadGroup; ok: Boolean; E: Exception; begin MTProcs.CurrentThread:=Self; aPool:=Item.Group.Pool; ok:=false; try repeat // work Group:=Item.Group; Group.Run(Item.Index,Group.TaskData,Item); aPool.EnterPoolCriticalSection; try Group.IndexComplete(Item.Index); // find next work if Group.LastRunningIndex<Group.EndIndex then begin // next index of group Group.IncreaseLastRunningIndex(Item); end else begin // remove from group RemoveFromList(Group.FFirstThread,mtptlGroup); dec(Group.FThreadCount); Item.FGroup:=nil; Group:=nil; if aPool.FFirstGroupNeedThreads<>nil then begin // add to new group aPool.FFirstGroupNeedThreads.AddThread(Self); Group:=Item.Group; end else begin // mark inactive RemoveFromList(aPool.FFirstActiveThread,mtptlPool); AddToList(aPool.FFirstInactiveThread,mtptlPool); Item.FState:=mtptsInactive; RTLeventResetEvent(Item.fWaitForPool); end; end; finally aPool.LeavePoolCriticalSection; end; // wait for new work if Item.FState=mtptsInactive then RTLeventWaitFor(Item.fWaitForPool); until Item.Group=nil; ok:=true; except // stop the exception and store it E:=Exception(AcquireExceptionObject); Terminating(aPool,E); end; if ok then Terminating(aPool,nil); end; { TProcThreadGroup } procedure TProcThreadGroup.AddToList(var First: TProcThreadGroup; ListType: TMTPGroupState); begin FNext:=First; if FNext<>nil then FNext.FPrev:=Self; First:=Self; FState:=ListType; end; procedure TProcThreadGroup.RemoveFromList( var First: TProcThreadGroup); begin if First=Self then First:=FNext; if FNext<>nil then FNext.FPrev:=FPrev; if FPrev<>nil then FPrev.FNext:=FNext; FNext:=nil; FPrev:=nil; FState:=mtpgsNone; end; function TProcThreadGroup.NeedMoreThreads: boolean; begin Result:=(FLastRunningIndex<FEndIndex) and (FThreadCount<FMaxThreads) and (FState<>mtpgsException); end; procedure TProcThreadGroup.IncreaseLastRunningIndex(Item: TMultiThreadProcItem); begin inc(FLastRunningIndex); Item.FIndex:=FLastRunningIndex; if NeedMoreThreads then exit; if FState=mtpgsNeedThreads then begin RemoveFromList(Pool.FFirstGroupNeedThreads); AddToList(Pool.FFirstGroupFinishing,mtpgsFinishing); end; end; procedure TProcThreadGroup.AddThread(AThread: TProcThread); begin AThread.Item.FGroup:=Self; AThread.AddToList(FFirstThread,mtptlGroup); inc(FThreadCount); IncreaseLastRunningIndex(AThread.Item); end; procedure TProcThreadGroup.RemoveThread(AThread: TProcThread); begin AThread.RemoveFromList(FFirstThread,mtptlGroup); dec(FThreadCount); end; procedure TProcThreadGroup.Run(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); inline; begin if Assigned(FTaskFrame) then CallLocalProc(FTaskProcedure,FTaskFrame,Index,Data,Item) else if Assigned(FTaskProcedure) then FTaskProcedure(Index,Data,Item) else if Assigned(FTaskNested) then FTaskNested(Index,Data,Item) else FTaskMethod(Index,Data,Item); end; procedure TProcThreadGroup.IndexComplete(Index: PtrInt); var AThread: TProcThread; NewFirstRunningThread: PtrInt; begin // update FirstRunningIndex NewFirstRunningThread:=FStarterItem.Index; AThread:=FFirstThread; while AThread<>nil do begin if (NewFirstRunningThread>aThread.Item.Index) and (aThread.Item.Index<>Index) then NewFirstRunningThread:=aThread.Item.Index; aThread:=aThread.FNext[mtptlGroup]; end; FFirstRunningIndex:=NewFirstRunningThread; // wake up threads (Note: do this even if FFirstRunningIndex has not changed) WakeThreadsWaitingForIndex; end; procedure TProcThreadGroup.WakeThreadsWaitingForIndex; var aThread: TProcThread; begin if FState<>mtpgsException then begin // wake up waiting threads aThread:=FFirstThread; while aThread<>nil do begin if (aThread.Item.FState=mtptsWaitingForIndex) and HasFinishedIndex(aThread.Item.WaitingForIndexStart, aThread.Item.WaitingForIndexEnd) then begin // wake up the thread aThread.Item.FState:=mtptsActive; RTLeventSetEvent(aThread.Item.fWaitForPool); end; aThread:=aThread.FNext[mtptlGroup]; end; if (FStarterItem.FState=mtptsWaitingForIndex) and HasFinishedIndex(FStarterItem.WaitingForIndexStart,FStarterItem.WaitingForIndexEnd) then begin // wake up the starter thread of this group FStarterItem.FState:=mtptsActive; RTLeventSetEvent(FStarterItem.fWaitForPool); end; end else begin // end group: wake up waiting threads aThread:=FFirstThread; while aThread<>nil do begin if (aThread.Item.FState=mtptsWaitingForIndex) then begin // end group: wake up the thread aThread.Item.FState:=mtptsWaitingFailed; RTLeventSetEvent(aThread.Item.fWaitForPool); end; aThread:=aThread.FNext[mtptlGroup]; end; if (FStarterItem.FState=mtptsWaitingForIndex) then begin // end group: wake up the starter thread of this group FStarterItem.FState:=mtptsWaitingFailed; RTLeventSetEvent(FStarterItem.fWaitForPool); end; end; end; function TProcThreadGroup.HasFinishedIndex( aStartIndex, aEndIndex: PtrInt): boolean; var AThread: TProcThread; begin // test the finished range if FFirstRunningIndex>aEndIndex then exit(true); // test the unfinished range if FLastRunningIndex<aEndIndex then exit(false); // test the active range AThread:=FFirstThread; while AThread<>nil do begin if (AThread.Item.Index>=aStartIndex) and (AThread.Item.Index<=aEndIndex) then exit(false); AThread:=AThread.FNext[mtptlGroup]; end; if (FStarterItem.Index>=aStartIndex) and (FStarterItem.Index<=aEndIndex) then exit(false); Result:=true; end; procedure TProcThreadGroup.EnterExceptionState(E: Exception); begin if FState=mtpgsException then exit; case FState of mtpgsFinishing: RemoveFromList(Pool.FFirstGroupFinishing); mtpgsNeedThreads: RemoveFromList(Pool.FFirstGroupNeedThreads); end; FState:=mtpgsException; FException:=E; WakeThreadsWaitingForIndex; end; constructor TProcThreadGroup.Create; begin FStarterItem:=TMultiThreadProcItem.Create; FStarterItem.FGroup:=Self; end; destructor TProcThreadGroup.Destroy; begin FreeAndNil(FStarterItem); inherited Destroy; end; { TProcThreadPool } procedure TProcThreadPool.SetMaxThreadCount(const AValue: PtrInt); begin if FMaxThreadCount=AValue then exit; if AValue<1 then raise Exception.Create('TLightWeightThreadPool.SetMaxThreadCount'); FMaxThreadCount:=AValue; end; procedure TProcThreadPool.CleanTerminatedThreads; var AThread: TProcThread; begin while FFirstTerminatedThread<>nil do begin AThread:=FFirstTerminatedThread; AThread.RemoveFromList(FFirstTerminatedThread,mtptlPool); AThread.Free; end; end; constructor TProcThreadPool.Create; begin FMaxThreadCount:=GetSystemThreadCount; if FMaxThreadCount<1 then FMaxThreadCount:=1; InitCriticalSection(FCritSection); end; destructor TProcThreadPool.Destroy; procedure WakeWaitingStarterItems(Group: TProcThreadGroup); begin while Group<>nil do begin if Group.StarterItem.FState=mtptsWaitingForIndex then begin Group.StarterItem.FState:=mtptsWaitingFailed; RTLeventSetEvent(Group.StarterItem.fWaitForPool); end; Group:=Group.FNext; end; end; var AThread: TProcThread; begin FDestroying:=true; // wake up all waiting threads EnterPoolCriticalSection; try AThread:=FFirstActiveThread; while AThread<>nil do begin if aThread.Item.FState=mtptsWaitingForIndex then begin aThread.Item.FState:=mtptsWaitingFailed; RTLeventSetEvent(AThread.Item.fWaitForPool); end; AThread:=AThread.FNext[mtptlPool]; end; WakeWaitingStarterItems(FFirstGroupNeedThreads); WakeWaitingStarterItems(FFirstGroupFinishing); finally LeavePoolCriticalSection; end; // wait for all active threads to become inactive while FFirstActiveThread<>nil do Sleep(10); // wake up all inactive threads (without new work they will terminate) EnterPoolCriticalSection; try AThread:=FFirstInactiveThread; while AThread<>nil do begin RTLeventSetEvent(AThread.Item.fWaitForPool); AThread:=AThread.FNext[mtptlPool]; end; finally LeavePoolCriticalSection; end; // wait for all threads to terminate while FFirstInactiveThread<>nil do Sleep(10); // free threads CleanTerminatedThreads; DoneCriticalsection(FCritSection); inherited Destroy; end; procedure TProcThreadPool.EnterPoolCriticalSection; begin EnterCriticalsection(FCritSection); end; procedure TProcThreadPool.LeavePoolCriticalSection; begin LeaveCriticalsection(FCritSection); end; procedure TProcThreadPool.DoParallel(const AMethod: TMTMethod; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); begin if not Assigned(AMethod) then exit; DoParallelIntern(AMethod,nil,nil,nil,StartIndex,EndIndex,Data,MaxThreads); end; procedure TProcThreadPool.DoParallel(const AProc: TMTProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); begin if not Assigned(AProc) then exit; DoParallelIntern(nil,AProc,nil,nil,StartIndex,EndIndex,Data,MaxThreads); end; procedure TProcThreadPool.DoParallelNested(const ANested: TMTNestedProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); begin if not Assigned(ANested) then exit; DoParallelIntern(nil,nil,ANested,nil,StartIndex,EndIndex,Data,MaxThreads); end; procedure TProcThreadPool.DoParallelLocalProc(const LocalProc: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); var Frame: Pointer; begin if not Assigned(LocalProc) then exit; Frame:=get_caller_frame(get_frame); DoParallelIntern(nil,TMTProcedure(LocalProc),nil,Frame,StartIndex,EndIndex, Data,MaxThreads); end; procedure TProcThreadPool.CalcBlockSize(LoopLength: PtrInt; out BlockCount, BlockSize: PtrInt; MinBlockSize: PtrInt); begin if LoopLength<=0 then begin BlockCount:=0; BlockSize:=1; exit; end; // split work into equally sized blocks BlockCount:=ProcThreadPool.MaxThreadCount; BlockSize:=(LoopLength div BlockCount); if (BlockSize<MinBlockSize) then BlockSize:=MinBlockSize; if BlockSize<1 then BlockSize:=1; BlockCount:=((LoopLength-1) div BlockSize)+1; end; procedure TProcThreadPool.DoParallelIntern(const AMethod: TMTMethod; const AProc: TMTProcedure; const ANested: TMTNestedProcedure; const AFrame: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); var Group: TProcThreadGroup; Index: PtrInt; AThread: TProcThread; NewThread: Boolean; Item: TMultiThreadProcItem; HelperThreadException: Exception; begin if (StartIndex>EndIndex) then exit; // nothing to do if FDestroying then raise Exception.Create('Pool destroyed'); if (MaxThreads>MaxThreadCount) or (MaxThreads<=0) then MaxThreads:=MaxThreadCount; if (StartIndex=EndIndex) or (MaxThreads<=1) then begin // single threaded Item:=TMultiThreadProcItem.Create; try for Index:=StartIndex to EndIndex do begin Item.FIndex:=Index; if Assigned(AFrame) then CallLocalProc(AProc,AFrame,Index,Data,Item) else if Assigned(AProc) then AProc(Index,Data,Item) else if Assigned(AMethod) then AMethod(Index,Data,Item) else ANested(Index,Data,Item); end; finally Item.Free; end; exit; end; // create a new group Group:=TProcThreadGroup.Create; Group.FPool:=Self; Group.FTaskData:=Data; Group.FTaskMethod:=AMethod; Group.FTaskProcedure:=AProc; Group.FTaskNested:=ANested; Group.FTaskFrame:=AFrame; Group.FStartIndex:=StartIndex; Group.FEndIndex:=EndIndex; Group.FFirstRunningIndex:=StartIndex; Group.FLastRunningIndex:=StartIndex; Group.FMaxThreads:=MaxThreads; Group.FThreadCount:=1; Group.FStarterItem.FState:=mtptsActive; Group.FStarterItem.FIndex:=StartIndex; HelperThreadException:=nil; try // start threads EnterPoolCriticalSection; try Group.AddToList(FFirstGroupNeedThreads,mtpgsNeedThreads); while Group.NeedMoreThreads do begin AThread:=FFirstInactiveThread; NewThread:=false; if AThread<>nil then begin AThread.RemoveFromList(FFirstInactiveThread,mtptlPool); end else if FThreadCount<FMaxThreadCount then begin AThread:=TProcThread.Create; if Assigned(AThread.FatalException) then raise AThread.FatalException; NewThread:=true; inc(FThreadCount); end else begin break; end; // add to Group Group.AddThread(AThread); // start thread AThread.AddToList(FFirstActiveThread,mtptlPool); AThread.Item.FState:=mtptsActive; if NewThread then AThread.Start else RTLeventSetEvent(AThread.Item.fWaitForPool); end; finally LeavePoolCriticalSection; end; // run until no more Index left Index:=StartIndex; repeat Group.FStarterItem.FIndex:=Index; Group.Run(Index,Data,Group.FStarterItem); EnterPoolCriticalSection; try Group.IndexComplete(Index); if (Group.FLastRunningIndex<Group.EndIndex) and (Group.FState<>mtpgsException) then begin inc(Group.FLastRunningIndex); Index:=Group.FLastRunningIndex; end else begin Index:=StartIndex; end; finally LeavePoolCriticalSection; end; until Index=StartIndex; finally // wait for Group to finish if Group.FFirstThread<>nil then begin EnterPoolCriticalSection; try Group.FStarterItem.FState:=mtptsInactive; Group.FStarterItem.fIndex:=EndIndex;// needed for Group.HasFinishedIndex // wake threads waiting for starter thread to finish if Group.FStarterItem.FState<>mtptsInactive then Group.EnterExceptionState(nil) else Group.WakeThreadsWaitingForIndex; finally LeavePoolCriticalSection; end; // waiting with exponential spin lock Index:=0; while Group.FFirstThread<>nil do begin sleep(Index); Index:=Index*2+1; if Index>30 then Index:=30; end; end; // remove group from pool EnterPoolCriticalSection; try case Group.FState of mtpgsNeedThreads: Group.RemoveFromList(FFirstGroupNeedThreads); mtpgsFinishing: Group.RemoveFromList(FFirstGroupFinishing); end; finally LeavePoolCriticalSection; end; HelperThreadException:=Group.FException; Group.Free; // free terminated threads (terminated, because of exceptions) CleanTerminatedThreads; end; // if the exception occured in a helper thread raise it now if HelperThreadException<>nil then raise HelperThreadException; end; initialization ProcThreadPool:=TProcThreadPool.Create; CurrentThread:=nil; finalization ProcThreadPool.Free; ProcThreadPool:=nil; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/mtpcpu.pas���������������������������������������������0000644�0001750�0000144�00000005147�15104114162�022367� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ ********************************************************************** This file is part of the Free Pascal run time library. See the file COPYING.FPC, included in this distribution, for details about the license. ********************************************************************** System depending code for light weight threads. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org } unit MTPCPU; {$mode objfpc}{$H+} {$inline on} interface {$IF defined(windows)} uses Windows; {$ELSEIF defined(freebsd) or defined(darwin)} uses ctypes, sysctl; {$ELSEIF defined(linux)} {$linklib c} uses ctypes; {$ENDIF} function GetSystemThreadCount: integer; procedure CallLocalProc(AProc, Frame: Pointer; Param1: PtrInt; Param2, Param3: Pointer); inline; implementation {$IFDEF Linux} const _SC_NPROCESSORS_CONF = 83; _SC_NPROCESSORS_ONLN = 84; function sysconf(i: cint): clong; cdecl; external name 'sysconf'; {$ENDIF} function GetSystemThreadCount: integer; // returns a good default for the number of threads on this system {$IF defined(windows)} //returns total number of processors available to system including logical hyperthreaded processors var i: Integer; ProcessAffinityMask, SystemAffinityMask: DWORD_PTR; Mask: DWORD; SystemInfo: SYSTEM_INFO; begin if GetProcessAffinityMask(GetCurrentProcess, ProcessAffinityMask, SystemAffinityMask) then begin Result := 0; for i := 0 to 31 do begin Mask := DWord(1) shl i; if (ProcessAffinityMask and Mask)<>0 then inc(Result); end; end else begin //can't get the affinity mask so we just report the total number of processors GetSystemInfo(SystemInfo); Result := SystemInfo.dwNumberOfProcessors; end; end; {$ELSEIF defined(UNTESTEDsolaris)} begin t = sysconf(_SC_NPROC_ONLN); end; {$ELSEIF defined(freebsd) or defined(darwin)} type PSysCtl = {$IF FPC_FULLVERSION>=30200}pcint{$ELSE}pchar{$ENDIF}; var mib: array[0..1] of cint; len: csize_t; t: cint; begin mib[0] := CTL_HW; mib[1] := HW_NCPU; len := sizeof(t); fpsysctl(PSysCtl(@mib), 2, @t, @len, Nil, 0); Result:=t; end; {$ELSEIF defined(linux)} begin Result:=sysconf(_SC_NPROCESSORS_CONF); end; {$ELSE} begin Result:=1; end; {$ENDIF} procedure CallLocalProc(AProc, Frame: Pointer; Param1: PtrInt; Param2, Param3: Pointer); inline; type PointerLocal = procedure(_EBP: Pointer; Param1: PtrInt; Param2, Param3: Pointer); begin PointerLocal(AProc)(Frame, Param1, Param2, Param3); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/����������������������������������������������0000755�0001750�0000144�00000000000�15104114162�022161� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/testmtp1.lpr����������������������������������0000644�0001750�0000144�00000025102�15104114162�024461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program TestMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} Math, SysUtils, Classes, MTProcs, MTPUtils, MultiThreadProcsLaz; type { TTestItem } TTestItem = class private FIndex: int64; public property Index: int64 read FIndex; constructor Create(NewIndex: int64); end; { TTests } TTests = class public procedure Work(Seconds: integer); // RTLeventSetEvent, RTLeventWaitFor procedure TestRTLevent_Set_WaitFor; // single thread test procedure TestSingleThread; procedure MTPLoop_TestSingleThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // two threads test: run once procedure TestTwoThreads1; procedure MTPLoop_TestTwoThreads1(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // 0 runs two seconds, // 1 runs a second then waits for 0 then runs a second // 2 runs a second then waits for 1 // 3 waits for 0 // 4 waits for 1 // 5 waits for 2 procedure TestMTPWaitForIndex; procedure MTPLoop_TestMTPWaitForIndex(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // two threads test: various run times procedure TestMTPTwoThreads2; procedure MTPLoop_TestTwoThreads2(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test exception in starter thread procedure TestMTPExceptionInStarterThread; procedure MTPLoop_TestExceptionInStarterThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test exception in helper thread procedure TestMTPExceptionInHelperThread; procedure MTPLoop_TestExceptionInHelperThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test parallel sort procedure TestMTPSort; procedure MTPLoop_TestDoubleMTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); end; { TTestItem } constructor TTestItem.Create(NewIndex: int64); begin FIndex:=NewIndex; end; { TTests } procedure TTests.Work(Seconds: integer); var Start: TDateTime; begin Start:=Now; while (Now-Start)*86400<Seconds do if GetCurrentDir='' then ; end; procedure TTests.TestRTLevent_Set_WaitFor; var e: PRTLEvent; begin e:=RTLEventCreate; RTLeventSetEvent(e); RTLeventWaitFor(e); RTLeventdestroy(e); end; procedure TTests.TestSingleThread; begin ProcThreadPool.DoParallel(@MTPLoop_TestSingleThread,1,3,nil,1); end; procedure TTests.MTPLoop_TestSingleThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin writeln('TTests.MTPLoop_TestSingleThread Index=',Index); end; procedure TTests.TestTwoThreads1; begin WriteLn('TTests.TestTwoThreads1 START'); ProcThreadPool.DoParallel(@MTPLoop_TestTwoThreads1,1,2,nil,2); WriteLn('TTests.TestTwoThreads1 END'); end; procedure TTests.MTPLoop_TestTwoThreads1(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin for i:=1 to 3 do begin WriteLn('TTests.MTPLoop_TestTwoThreads1 Index=',Index,' ',i); Work(1); end; end; procedure TTests.TestMTPWaitForIndex; var IndexStates: PInteger; begin ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); WriteLn('TTests.TestMTPWaitForIndex START'); ProcThreadPool.DoParallel(@MTPLoop_TestMTPWaitForIndex,0,5,IndexStates); FreeMem(IndexStates); WriteLn('TTests.TestMTPWaitForIndex END'); end; procedure TTests.MTPLoop_TestMTPWaitForIndex(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // 0 runs two seconds, // 1 runs a second then waits for 0 then runs a second // 2 runs a second then waits for 1 // 3 waits for 0 // 4 waits for 1 // 5 waits for 2 procedure WaitFor(OtherIndex: PtrInt); begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' waiting for '+IntToStr(OtherIndex)+' ...'); Item.WaitForIndex(OtherIndex); WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' waited for '+IntToStr(OtherIndex)+'. working ...'); if PInteger(Data)[OtherIndex]<>2 then begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' ERROR: waited for '+IntToStr(OtherIndex)+' failed: OtherState='+IntToStr(PInteger(Data)[OtherIndex])); end; end; begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' START'); if PInteger(Data)[Index]<>0 then begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); end; PInteger(Data)[Index]:=1; case Index of 0: Work(2); 1:begin Work(1); WaitFor(0); Work(1); end; 2:begin Work(1); WaitFor(1); end; 3:begin WaitFor(0); end; 4:begin WaitFor(1); end; 5:begin WaitFor(2); end; end; WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' END'); PInteger(Data)[Index]:=2; end; procedure TTests.TestMTPTwoThreads2; begin WriteLn('TTests.TestMTPTwoThreads1 START'); ProcThreadPool.DoParallel(@MTPLoop_TestTwoThreads2,1,6,nil,2); WriteLn('TTests.TestMTPTwoThreads1 END'); end; procedure TTests.MTPLoop_TestTwoThreads2(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin for i:=1 to (Index mod 3)+1 do begin WriteLn('TTests.MTPLoop_TestTwoThreads1 Index=',Index,' i=',i,' ID=',PtrUint(GetThreadID)); Work(1); end; end; type TMyException = class(Exception); procedure TTests.TestMTPExceptionInStarterThread; var IndexStates: PInteger; begin WriteLn('TTests.TestMTPExceptionInStarterThread START'); ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); try ProcThreadPool.DoParallel(@MTPLoop_TestExceptionInStarterThread,1,3,IndexStates,2); except on E: Exception do begin WriteLn('TTests.TestMTPExceptionInHelperThread E.ClassName=',E.ClassName,' E.Message=',E.Message); end; end; FreeMem(IndexStates); WriteLn('TTests.TestMTPExceptionInStarterThread END'); end; procedure TTests.MTPLoop_TestExceptionInStarterThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin WriteLn('TTests.MTPLoop_TestExceptionInStarterThread START Index='+IntToStr(Index)); if PInteger(Data)[Index]<>0 then WriteLn('TTests.MTPLoop_TestExceptionInStarterThread Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); PInteger(Data)[Index]:=1; case Index of 1: begin // Main Thread Work(1); WriteLn('TTests.MTPLoop_TestExceptionInStarterThread raising exception in Index='+IntToStr(Index)+' ...'); raise Exception.Create('Exception in starter thread'); end; else Work(Index); end; PInteger(Data)[Index]:=2; WriteLn('TTests.MTPLoop_TestExceptionInStarterThread END Index='+IntToStr(Index)); end; procedure TTests.TestMTPExceptionInHelperThread; var IndexStates: PInteger; begin WriteLn('TTests.TestMTPExceptionInHelperThread START'); ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); try ProcThreadPool.DoParallel(@MTPLoop_TestExceptionInHelperThread,1,3,IndexStates,2); except on E: Exception do begin WriteLn('TTests.TestMTPExceptionInHelperThread E.ClassName=',E.ClassName,' E.Message=',E.Message); end; end; FreeMem(IndexStates); WriteLn('TTests.TestMTPExceptionInHelperThread END'); end; procedure TTests.MTPLoop_TestExceptionInHelperThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin WriteLn('TTests.MTPLoop_TestExceptionInHelperThread START Index='+IntToStr(Index)); if PInteger(Data)[Index]<>0 then WriteLn('TTests.MTPLoop_TestExceptionInHelperThread Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); PInteger(Data)[Index]:=1; case Index of 2: begin // Helper Thread 2 Work(1); WriteLn('TTests.MTPLoop_TestExceptionInHelperThread raising exception in Index='+IntToStr(Index)+' ...'); raise TMyException.Create('Exception in helper thread'); end; else Work(Index+1); end; PInteger(Data)[Index]:=2; WriteLn('TTests.MTPLoop_TestExceptionInHelperThread END Index='+IntToStr(Index)); end; function CompareTestItems(Data1, Data2: Pointer): integer; begin if TTestItem(Data1).Index>TTestItem(Data2).Index then Result:=1 else if TTestItem(Data1).Index<TTestItem(Data2).Index then Result:=-1 else Result:=0; end; procedure TTests.TestMTPSort; var OuterLoop: Integer; InnerLoop: Integer; begin OuterLoop:=1; InnerLoop:=0; if Paramcount=1 then begin InnerLoop:=StrToInt(ParamStr(1)); end else if Paramcount=2 then begin OuterLoop:=StrToInt(ParamStr(1)); InnerLoop:=StrToInt(ParamStr(2)); end; writeln('TTests.TestMTPSort Running ',OuterLoop,'x',InnerLoop); ProcThreadPool.DoParallel(@MTPLoop_TestDoubleMTPSort,1,OuterLoop,@InnerLoop); end; procedure TTests.MTPLoop_TestDoubleMTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; List: TFPList; t: double; begin // create an unsorted list of values List:=TFPList.Create; for i:=1 to 10000000 do List.Add(TTestItem.Create(Random(99999999999))); //QuickSort(List,0,List.Count-1,@AnsiCompareText); t:=Now; ParallelSortFPList(List,@CompareTestItems,PInteger(Data)^); t:=Now-t; writeln('TTests.TestMTPSort ',t*86400); // check sleep(1); for i:=0 to List.Count-2 do if CompareTestItems(List[i],List[i+1])>0 then raise Exception.Create('not sorted'); for i:=0 to List.Count-1 do TObject(List[i]).Free; List.Free; end; var Tests: TTests; begin writeln('threads=',ProcThreadPool.MaxThreadCount); ProcThreadPool.MaxThreadCount:=8; Tests:=TTests.Create; //Tests.Test1; //Tests.Test2; //Tests.TestTwoThreads2; //Tests.TestRTLevent_Set_WaitFor; //Tests.TestMTPWaitForIndex; //Tests.TestMTPExceptionInStarterThread; Tests.TestMTPExceptionInHelperThread; //Tests.TestMTPSort; Tests.Free; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/testmtp1.lpi����������������������������������0000644�0001750�0000144�00000002553�15104114162�024455� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="/"/> <Version Value="6"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="testmtp1.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/simplemtp1.lpr��������������������������������0000644�0001750�0000144�00000000717�15104114162�025000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program SimpleMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} MTProcs; // a simple parallel procedure procedure DoSomethingParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin writeln(Index); for i:=1 to Index*1000000 do ; // do some work end; begin ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data end. �������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/simplemtp1.lpi��������������������������������0000644�0001750�0000144�00000003006�15104114162�024761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="/"/> <Version Value="7"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> <Title Value="simplemtp1"/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="simplemtp1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="SimpleMTP1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/recursivemtp1.lpr�����������������������������0000644�0001750�0000144�00000002265�15104114162�025516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program RecursiveMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} MTProcs; type TArrayOfInteger = array of integer; var Items: TArrayOfInteger; type TFindMaximumParallelData = record Items: TArrayOfInteger; Left, Middle, Right: integer; LeftMaxIndex, RightMaxIndex: integer; end; PFindMaximumParallelData = ^TFindMaximumParallelData; procedure FindMaximumParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var Params: PFindMaximumParallelData absolute Data; LeftParams, RightParams: TFindMaximumParallelData; begin if Params^.Left+1000>Params^.Right then begin // compute the maximum of the few remaining items Params^.LeftMaxIndex:=Params^.Items[Params^.Left]; for i:=Params^.Left+1 to Params^.Right do if Params^.Items[i]>Params^.LeftMaxIndex then end else begin end; end; function FindMaximumIndex(Items: TArrayOfInteger): integer; begin end; begin SetLength(Items,10000000); for i:=0 to length(Items)-1 do Items[i]:=Random(1000); ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/recursivemtp1.lpi�����������������������������0000644�0001750�0000144�00000002763�15104114162�025510� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="7"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> <Title Value="recursivemtp1"/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="recursivemtp1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="RecursiveMTP1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �������������doublecmd-1.1.30/components/multithreadprocs/examples/parallelloop_nested1.lpr����������������������0000644�0001750�0000144�00000006773�15104114162�027026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Example for a parallel loop with MTProcs. Copyright (C) 2017 Mattias Gaertner mattias@freepascal.org This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } program parallelloop_nested1; {$mode objfpc}{$H+} {$ModeSwitch nestedprocvars} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} Classes, SysUtils, Math, MTProcs; function FindBestParallel(aList: TList; aValue: Pointer): integer; var BlockSize: PtrInt; Results: array of integer; procedure InParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i, StartIndex, EndIndex: PtrInt; begin Results[Index]:=-1; StartIndex:=Index*BlockSize; EndIndex:=Min(StartIndex+BlockSize,aList.Count); //if MainThreadID=GetCurrentThreadId then // writeln('FindBestParallel Index=',Index,' StartIndex=',StartIndex,' EndIndex=',EndIndex); for i:=StartIndex to EndIndex-1 do begin if aList[i]=aValue then // imagine here an expensive compare function Results[Index]:=i; end; end; var Index: integer; BlockCount: PtrInt; begin ProcThreadPool.CalcBlockSize(aList.Count,BlockCount,BlockSize); SetLength(Results,BlockCount); //writeln('FindBestParallel BlockCount=',BlockCount,' List.Count=',aList.Count,' BlockSize=',BlockSize); ProcThreadPool.DoParallelNested(@InParallel,0,BlockCount-1); // collect results Result:=-1; for Index:=0 to BlockCount-1 do if Results[Index]>=0 then Result:=Results[Index]; end; function FindBestSingleThreaded(List: TList; Value: Pointer): integer; var i: integer; begin Result:=-1; i:=0; while i<List.Count do begin if List[i]=Value then // imagine here an expensive compare function Result:=i; inc(i); end; end; var List: TList; i: Integer; begin List:=TList.Create; for i:=0 to 100000000 do List.Add(Pointer(i)); writeln('searching ...'); i:=FindBestParallel(List,Pointer(List.Count-2)); writeln('parallel search i=',i); i:=FindBestSingleThreaded(List,Pointer(List.Count-2)); writeln('linear search i=',i); end. �����doublecmd-1.1.30/components/multithreadprocs/examples/parallelloop_nested1.lpi����������������������0000644�0001750�0000144�00000003133�15104114162�027000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="10"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InIDEConfig"/> <MainUnit Value="0"/> <Title Value="parallelloop_nested1"/> </General> <VersionInfo> <StringTable ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="parallelloop_nested1.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> </CompilerOptions> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/parallelloop1.lpr�����������������������������0000644�0001750�0000144�00000006360�15104114162�025454� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Example for a parallel loop with MTProcs. Copyright (C) 2009 Mattias Gaertner mattias@freepascal.org This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } program ParallelLoop1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} Classes, SysUtils, MTProcs; type TFindBestData = record List: TList; Value: Pointer; BlockCount: integer; Results: array of integer; end; PFindBestData = ^TFindBestData; procedure FindBestParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: integer; begin with PFindBestData(Data)^ do begin Results[Index]:=-1; i:=Index; while i<List.Count-1 do begin if List[i]=Value then // hier wuerde die teure Vergleichsoperation stehen Results[Index]:=i; inc(i,BlockCount); end; end; end; function FindBest(aList: TList; aValue: Pointer): integer; var Index: integer; Data: TFindBestData; begin with Data do begin List:=aList; Value:=aValue; BlockCount:=ProcThreadPool.MaxThreadCount; SetLength(Results,BlockCount); ProcThreadPool.DoParallel(@FindBestParallel,0,BlockCount-1,@Data); // Ergebnisse zusammenfassen Result:=-1; for Index:=0 to BlockCount-1 do if Results[Index]>=0 then Result:=Results[Index]; end; end; function FindBest1(List: TList; Value: Pointer): integer; var i: integer; begin Result:=-1; i:=0; while i<List.Count do begin if List[i]=Value then // hier wuerde die teure Vergleichsoperation stehen Result:=i; inc(i); end; end; var List: TList; i: Integer; begin List:=TList.Create; for i:=0 to 100000000 do List.Add(Pointer(i)); i:=FindBest(List,Pointer(9999)); //i:=FindBest1(List,Pointer(9999)); writeln('i=',i); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/multithreadprocs/examples/parallelloop1.lpi�����������������������������0000644�0001750�0000144�00000002763�15104114162�025446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="7"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> <Title Value="parallelloop1"/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="parallelloop1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="ParallelLoop1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �������������doublecmd-1.1.30/components/kascrypt/���������������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�016612� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/readme.txt�����������������������������������������������������0000644�0001750�0000144�00000002011�15104114162�020602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������KAScrypt Cryptographic Component Library Copyright (C) 2011-2023 Alexander Koblov KAScrypt library implements a modern cryptographic hash functions with hardware acceleration using SIMD instructions under x86_64 platform: | Function | Acceleration | | ---------| -------------------| | SHA224 | SSSE3, AVX2 | | SHA256 | SSSE3, AVX2 | | SHA384 | SSSE3 | | SHA512 | SSSE3 | | SHA3-224 | | | SHA3-256 | | | SHA3-384 | | | SHA3-512 | | | BLAKE2s | SSE2, AVX | | BLAKE2sp | SSE2, AVX | | BLAKE2b | SSE2, AVX | | BLAKE2bp | SSE2, AVX | | BLAKE3 | SSE2, SSE4.1, AVX2 | Based on: DCPcrypt Cryptographic Component Library https://wiki.lazarus.freepascal.org/DCPcrypt Original author: Copyright (C) 1999-2003 David Barton https://cityinthesky.co.uk Contributors: Port to Lazarus by Barko - 2006 Graeme Geldenhuys - 2009-2014 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/kascrypt.pas���������������������������������������������������0000644�0001750�0000144�00000001017�15104114162�021156� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit kascrypt; {$warn 5023 off : no warning about unused units} interface uses DCPbase64, DCPblockciphers, DCPconst, DCPcrypt2, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPsha1, DCPsha256, DCPsha512, DCPtiger, DCPcrc32, DCcrc32, DCblake2, DCPblake2, DCPsha3, HMAC, SHA3, SHA3_512, ISAAC, scrypt, DCPrijndael, SHA1, Argon2, DCPblake3, dcpchecksum32; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/kascrypt.lpk���������������������������������������������������0000644�0001750�0000144�00000012633�15104114162�021167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="5"> <Name Value="kascrypt"/> <Author Value="David Barton, Barko & Graeme Geldenhuys, Alexander Koblov"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <IncludeFiles Value="Hashes/Private;Ciphers"/> <OtherUnitFiles Value="Ciphers;Hashes;Hashes/Private;Random;$(PkgOutDir)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <CStyleOperator Value="False"/> <IncludeAssertionCode Value="True"/> <AllowLabel Value="False"/> <CPPInline Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Optimizations> <OptimizationLevel Value="2"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CustomOptions Value="-Xd -dtesting"/> </Other> </CompilerOptions> <Description Value="KAScrypt Cryptographic Component Library "/> <License Value="KAScrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. "/> <Version Major="3" Minor="1" Release="1"/> <Files Count="30"> <Item1> <Filename Value="dcpbase64.pas"/> <UnitName Value="DCPbase64"/> </Item1> <Item2> <Filename Value="dcpblockciphers.pas"/> <UnitName Value="DCPblockciphers"/> </Item2> <Item3> <Filename Value="dcpconst.pas"/> <UnitName Value="DCPconst"/> </Item3> <Item4> <Filename Value="dcpcrypt2.pas"/> <UnitName Value="DCPcrypt2"/> </Item4> <Item5> <Filename Value="Hashes/dcphaval.pas"/> <UnitName Value="DCPhaval"/> </Item5> <Item6> <Filename Value="Hashes/dcpmd4.pas"/> <UnitName Value="DCPmd4"/> </Item6> <Item7> <Filename Value="Hashes/dcpmd5.pas"/> <UnitName Value="DCPmd5"/> </Item7> <Item8> <Filename Value="Hashes/dcpripemd128.pas"/> <UnitName Value="DCPripemd128"/> </Item8> <Item9> <Filename Value="Hashes/dcpripemd160.pas"/> <UnitName Value="DCPripemd160"/> </Item9> <Item10> <Filename Value="Hashes/dcpsha1.pas"/> <UnitName Value="DCPsha1"/> </Item10> <Item11> <Filename Value="Hashes/dcpsha256.pas"/> <UnitName Value="DCPsha256"/> </Item11> <Item12> <Filename Value="Hashes/dcpsha512.pas"/> <UnitName Value="DCPsha512"/> </Item12> <Item13> <Filename Value="Hashes/dcptiger.pas"/> <UnitName Value="DCPtiger"/> </Item13> <Item14> <Filename Value="Hashes/dcpcrc32.pas"/> <UnitName Value="DCPcrc32"/> </Item14> <Item15> <Filename Value="Hashes/DCPtiger.inc"/> <Type Value="Include"/> </Item15> <Item16> <Filename Value="Hashes/dccrc32.pp"/> <UnitName Value="DCcrc32"/> </Item16> <Item17> <Filename Value="Hashes/dcblake2.pp"/> <UnitName Value="DCblake2"/> </Item17> <Item18> <Filename Value="Hashes/dcpblake2.pas"/> <UnitName Value="DCPblake2"/> </Item18> <Item19> <Filename Value="Hashes/dcpsha3.pas"/> <UnitName Value="DCPsha3"/> </Item19> <Item20> <Filename Value="Hashes/Private/hmac.pas"/> <UnitName Value="HMAC"/> </Item20> <Item21> <Filename Value="Hashes/Private/sha3.pas"/> <UnitName Value="SHA3"/> </Item21> <Item22> <Filename Value="Hashes/Private/sha3_512.pas"/> <UnitName Value="SHA3_512"/> </Item22> <Item23> <Filename Value="Random/isaac.pas"/> <UnitName Value="ISAAC"/> </Item23> <Item24> <Filename Value="Hashes/Private/scrypt.pas"/> <UnitName Value="scrypt"/> </Item24> <Item25> <Filename Value="Ciphers/DCPrijndael.inc"/> <Type Value="Include"/> </Item25> <Item26> <Filename Value="Ciphers/dcprijndael.pas"/> <UnitName Value="DCPrijndael"/> </Item26> <Item27> <Filename Value="Hashes/Private/sha1.pas"/> <UnitName Value="SHA1"/> </Item27> <Item28> <Filename Value="Hashes/argon2.pas"/> <UnitName Value="Argon2"/> </Item28> <Item29> <Filename Value="Hashes/dcpblake3.pas"/> <UnitName Value="DCPblake3"/> </Item29> <Item30> <Filename Value="Hashes/dcpchecksum32.pas"/> <UnitName Value="dcpchecksum32"/> </Item30> </Files> <CompatibilityMode Value="True"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="multithreadprocslaz"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> �����������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/dcpcrypt2.pas��������������������������������������������������0000644�0001750�0000144�00000053136�15104114162�021241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Main component definitions *************************************************} {******************************************************************************} {* Copyright (C) 1999-2003 David Barton *} {* Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPcrypt2; {$MODE Delphi} interface uses Classes, Sysutils, DCPbase64; //{$DEFINE DCP1COMPAT} { DCPcrypt v1.31 compatiblity mode - see documentation } {******************************************************************************} { A few predefined types to help out } type {$IFNDEF FPC} Pbyte= ^byte; Pword= ^word; Pdword= ^dword; Pint64= ^int64; dword= longword; Pwordarray= ^Twordarray; Twordarray= array[0..19383] of word; {$ENDIF} Pdwordarray= ^Tdwordarray; Tdwordarray= array[0..8191] of dword; {******************************************************************************} { The base class from which all hash algorithms are to be derived } type EDCP_hash= class(Exception); TDCP_hash= class(TComponent) protected fInitialized: boolean; { Whether or not the algorithm has been initialized } procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector } procedure DeadStr(Value: string); { Knudge to display vars in the object inspector } private function _GetId: integer; function _GetAlgorithm: string; function _GetHashSize: integer; public property Initialized: boolean read fInitialized; class function GetId: integer; virtual; { Get the algorithm id } class function GetAlgorithm: string; virtual; { Get the algorithm name } class function GetHashSize: integer; virtual; { Get the size of the digest produced - in bits } class function SelfTest: boolean; virtual; { Tests the implementation with several test vectors } procedure Init; virtual; { Initialize the hash algorithm } procedure Final(var Digest); virtual; { Create the final digest and clear the stored information. The size of the Digest var must be at least equal to the hash size } procedure Burn; virtual; { Clear any stored information with out creating the final digest } procedure Update(const Buffer; Size: longword); virtual; { Update the hash buffer with Size bytes of data from Buffer } procedure UpdateStream(Stream: TStream; Size: QWord); { Update the hash buffer with Size bytes of data from the stream } procedure UpdateStr(const Str: string); { Update the hash buffer with the string } destructor Destroy; override; published property Id: integer read _GetId write DeadInt; property Algorithm: string read _GetAlgorithm write DeadStr; property HashSize: integer read _GetHashSize write DeadInt; end; TDCP_hashclass= class of TDCP_hash; {******************************************************************************} { The base class from which all encryption components will be derived. } { Stream ciphers will be derived directly from this class where as } { Block ciphers will have a further foundation class TDCP_blockcipher. } type EDCP_cipher= class(Exception); TDCP_cipher= class(TComponent) protected fInitialized: boolean; { Whether or not the key setup has been done yet } procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector } procedure DeadStr(Value: string); { Knudge to display vars in the object inspector } private function _GetId: integer; function _GetAlgorithm: string; function _GetMaxKeySize: integer; public property Initialized: boolean read fInitialized; class function GetId: integer; virtual; { Get the algorithm id } class function GetAlgorithm: string; virtual; { Get the algorithm name } class function GetMaxKeySize: integer; virtual; { Get the maximum key size (in bits) } class function SelfTest: boolean; virtual; { Tests the implementation with several test vectors } procedure Init(const Key; Size: longword; InitVector: pointer); virtual; { Do key setup based on the data in Key, size is in bits } procedure InitStr(const Key: string; HashType: TDCP_hashclass); { Do key setup based on a hash of the key string } procedure Burn; virtual; { Clear all stored key information } procedure Reset; virtual; { Reset any stored chaining information } procedure Encrypt(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data and place in Outdata } procedure Decrypt(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data and place in Outdata } function EncryptStream(InStream, OutStream: TStream; Size: longword): longword; { Encrypt size bytes of data from InStream and place in OutStream } function DecryptStream(InStream, OutStream: TStream; Size: longword): longword; { Decrypt size bytes of data from InStream and place in OutStream } function EncryptString(const Str: string): string; virtual; { Encrypt a string and return Base64 encoded } function DecryptString(const Str: string): string; virtual; { Decrypt a Base64 encoded string } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Id: integer read _GetId write DeadInt; property Algorithm: string read _GetAlgorithm write DeadStr; property MaxKeySize: integer read _GetMaxKeySize write DeadInt; end; TDCP_cipherclass= class of TDCP_cipher; {******************************************************************************} { The base class from which all block ciphers are to be derived, this } { extra class takes care of the different block encryption modes. } type TDCP_ciphermode= (cmCBC, cmCFB8bit, cmCFBblock, cmOFB, cmCTR); // cmCFB8bit is equal to DCPcrypt v1.xx's CFB mode EDCP_blockcipher= class(EDCP_cipher); TDCP_blockcipher= class(TDCP_cipher) protected fCipherMode: TDCP_ciphermode; { The cipher mode the encrypt method uses } procedure InitKey(const Key; Size: longword); virtual; private function _GetBlockSize: integer; public class function GetBlockSize: integer; virtual; { Get the block size of the cipher (in bits) } procedure SetIV(const Value); virtual; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); virtual; { Returns the current chaining information, not the actual IV } procedure Encrypt(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data and place in Outdata using CipherMode } procedure Decrypt(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data and place in Outdata using CipherMode } function EncryptString(const Str: string): string; override; { Encrypt a string and return Base64 encoded } function DecryptString(const Str: string): string; override; { Decrypt a Base64 encoded string } procedure EncryptECB(const Indata; var Outdata); virtual; { Encrypt a block of data using the ECB method of encryption } procedure DecryptECB(const Indata; var Outdata); virtual; { Decrypt a block of data using the ECB method of decryption } procedure EncryptCBC(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CTR method of decryption } constructor Create(AOwner: TComponent); override; published property BlockSize: integer read _GetBlockSize write DeadInt; property CipherMode: TDCP_ciphermode read fCipherMode write fCipherMode default cmCBC; end; TDCP_blockcipherclass= class of TDCP_blockcipher; {******************************************************************************} { Helper functions } procedure XorBlock(var InData1, InData2; Size: longword); // Supposed to be an optimized version of XorBlock() using 32-bit xor procedure XorBlockEx(var InData1, InData2; Size: longword); // removes the compiler hint due to first param being 'var' instead of 'out' procedure dcpFillChar(out x; count: SizeInt; Value: Byte); overload; procedure dcpFillChar(out x; count: SizeInt; Value: Char); overload; procedure ZeroMemory(Destination: Pointer; Length: PtrUInt); {$IF DEFINED(CPUX86_64)} function BMI2Support: LongBool; function SSSE3Support: LongBool; {$ENDIF} implementation {$Q-}{$R-} {** TDCP_hash *****************************************************************} procedure TDCP_hash.DeadInt(Value: integer); begin end; procedure TDCP_hash.DeadStr(Value: string); begin end; function TDCP_hash._GetId: integer; begin Result:= GetId; end; function TDCP_hash._GetAlgorithm: string; begin Result:= GetAlgorithm; end; function TDCP_hash._GetHashSize: integer; begin Result:= GetHashSize; end; class function TDCP_hash.GetId: integer; begin Result:= -1; end; class function TDCP_hash.GetAlgorithm: string; begin Result:= ''; end; class function TDCP_hash.GetHashSize: integer; begin Result:= -1; end; class function TDCP_hash.SelfTest: boolean; begin Result:= false; end; procedure TDCP_hash.Init; begin end; procedure TDCP_hash.Final(var Digest); begin end; procedure TDCP_hash.Burn; begin end; procedure TDCP_hash.Update(const Buffer; Size: longword); begin end; procedure TDCP_hash.UpdateStream(Stream: TStream; Size: QWord); var Buffer: array[0..8191] of byte; i, read: integer; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); for i:= 1 to (Size div Sizeof(Buffer)) do begin read:= Stream.Read(Buffer,Sizeof(Buffer)); Update(Buffer,read); end; if (Size mod Sizeof(Buffer))<> 0 then begin read:= Stream.Read(Buffer,Size mod Sizeof(Buffer)); Update(Buffer,read); end; end; procedure TDCP_hash.UpdateStr(const Str: string); begin Update(Str[1],Length(Str)); end; destructor TDCP_hash.Destroy; begin if fInitialized then Burn; inherited Destroy; end; {** TDCP_cipher ***************************************************************} procedure TDCP_cipher.DeadInt(Value: integer); begin end; procedure TDCP_cipher.DeadStr(Value: string); begin end; function TDCP_cipher._GetId: integer; begin Result:= GetId; end; function TDCP_cipher._GetAlgorithm: string; begin Result:= GetAlgorithm; end; function TDCP_cipher._GetMaxKeySize: integer; begin Result:= GetMaxKeySize; end; class function TDCP_cipher.GetId: integer; begin Result:= -1; end; class function TDCP_cipher.GetAlgorithm: string; begin Result:= ''; end; class function TDCP_cipher.GetMaxKeySize: integer; begin Result:= -1; end; class function TDCP_cipher.SelfTest: boolean; begin Result:= false; end; procedure TDCP_cipher.Init(const Key; Size: longword; InitVector: pointer); begin if fInitialized then Burn; if (Size <= 0) or ((Size and 3)<> 0) or (Size> longword(GetMaxKeySize)) then raise EDCP_cipher.Create('Invalid key size') else fInitialized:= true; end; procedure TDCP_cipher.InitStr(const Key: string; HashType: TDCP_hashclass); var Hash: TDCP_hash; Digest: pointer; begin if fInitialized then Burn; try GetMem(Digest,HashType.GetHashSize div 8); Hash:= HashType.Create(Self); Hash.Init; Hash.UpdateStr(Key); Hash.Final(Digest^); Hash.Free; if MaxKeySize< HashType.GetHashSize then begin Init(Digest^,MaxKeySize,nil); end else begin Init(Digest^,HashType.GetHashSize,nil); end; FillChar(Digest^,HashType.GetHashSize div 8,$FF); FreeMem(Digest); except raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest'); end; end; procedure TDCP_cipher.Burn; begin fInitialized:= false; end; procedure TDCP_cipher.Reset; begin end; procedure TDCP_cipher.Encrypt(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_cipher.Decrypt(const Indata; var Outdata; Size: longword); begin end; function TDCP_cipher.EncryptStream(InStream, OutStream: TStream; Size: longword): longword; var Buffer: array[0..8191] of byte; i, Read: longword; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); Result:= 0; for i:= 1 to (Size div Sizeof(Buffer)) do begin Read:= InStream.Read(Buffer,Sizeof(Buffer)); Inc(Result,Read); Encrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; if (Size mod Sizeof(Buffer))<> 0 then begin Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer)); Inc(Result,Read); Encrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; end; function TDCP_cipher.DecryptStream(InStream, OutStream: TStream; Size: longword): longword; var Buffer: array[0..8191] of byte; i, Read: longword; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); Result:= 0; for i:= 1 to (Size div Sizeof(Buffer)) do begin Read:= InStream.Read(Buffer,Sizeof(Buffer)); Inc(Result,Read); Decrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; if (Size mod Sizeof(Buffer))<> 0 then begin Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer)); Inc(Result,Read); Decrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; end; function TDCP_cipher.EncryptString(const Str: string): string; begin SetLength(Result,Length(Str)); Encrypt(Str[1],Result[1],Length(Str)); Result:= Base64EncodeStr(Result); end; function TDCP_cipher.DecryptString(const Str: string): string; begin Result:= Base64DecodeStr(Str); Decrypt(Result[1],Result[1],Length(Result)); end; constructor TDCP_cipher.Create(AOwner: TComponent); begin inherited Create(AOwner); Burn; end; destructor TDCP_cipher.Destroy; begin if fInitialized then Burn; inherited Destroy; end; {** TDCP_blockcipher **********************************************************} procedure TDCP_blockcipher.InitKey(const Key; Size: longword); begin end; function TDCP_blockcipher._GetBlockSize: integer; begin Result:= GetBlockSize; end; class function TDCP_blockcipher.GetBlockSize: integer; begin Result:= -1; end; procedure TDCP_blockcipher.SetIV(const Value); begin end; procedure TDCP_blockcipher.GetIV(var Value); begin end; procedure TDCP_blockcipher.Encrypt(const Indata; var Outdata; Size: longword); begin case fCipherMode of cmCBC: EncryptCBC(Indata,Outdata,Size); cmCFB8bit: EncryptCFB8bit(Indata,Outdata,Size); cmCFBblock: EncryptCFBblock(Indata,Outdata,Size); cmOFB: EncryptOFB(Indata,Outdata,Size); cmCTR: EncryptCTR(Indata,Outdata,Size); end; end; function TDCP_blockcipher.EncryptString(const Str: string): string; begin SetLength(Result,Length(Str)); EncryptCFB8bit(Str[1],Result[1],Length(Str)); Result:= Base64EncodeStr(Result); end; function TDCP_blockcipher.DecryptString(const Str: string): string; begin Result:= Base64DecodeStr(Str); DecryptCFB8bit(Result[1],Result[1],Length(Result)); end; procedure TDCP_blockcipher.Decrypt(const Indata; var Outdata; Size: longword); begin case fCipherMode of cmCBC: DecryptCBC(Indata,Outdata,Size); cmCFB8bit: DecryptCFB8bit(Indata,Outdata,Size); cmCFBblock: DecryptCFBblock(Indata,Outdata,Size); cmOFB: DecryptOFB(Indata,Outdata,Size); cmCTR: DecryptCTR(Indata,Outdata,Size); end; end; procedure TDCP_blockcipher.EncryptECB(const Indata; var Outdata); begin end; procedure TDCP_blockcipher.DecryptECB(const Indata; var Outdata); begin end; procedure TDCP_blockcipher.EncryptCBC(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCBC(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCFB8bit(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCFB8bit(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCFBblock(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCFBblock(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptOFB(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptOFB(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCTR(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCTR(const Indata; var Outdata; Size: longword); begin end; constructor TDCP_blockcipher.Create(AOwner: TComponent); begin inherited Create(AOwner); fCipherMode:= cmCBC; end; {** Helpher functions *********************************************************} procedure XorBlock(var InData1, InData2; Size: longword); var b1: PByteArray; b2: PByteArray; i: longword; begin b1 := @InData1; b2 := @InData2; for i := 0 to size-1 do b1[i] := b1[i] xor b2[i]; end; procedure dcpFillChar(out x; count: SizeInt; Value: Byte); begin {$HINTS OFF} FillChar(x, count, value); {$HINTS ON} end; procedure ZeroMemory(Destination: Pointer; Length: PtrUInt); begin FillChar(Destination^, Length, 0); end; procedure dcpFillChar(out x; count: SizeInt; Value: Char); begin {$HINTS OFF} FillChar(x, count, Value); {$HINTS ON} end; // Supposed to be an optimized version of XorBlock() using 32-bit xor procedure XorBlockEx(var InData1, InData2; Size: longword); var l1: PIntegerArray; l2: PIntegerArray; b1: PByteArray; b2: PByteArray; i: integer; c: integer; begin l1 := @inData1; l2 := @inData2; for i := 0 to size div sizeof(LongWord)-1 do l1[i] := l1[i] xor l2[i]; // the rest of the buffer (3 bytes) c := size mod sizeof(longWord); if c > 0 then begin b1 := @InData1; b2 := @InData2; for i := (size-c) to size-1 do b1[i] := b1[i] xor b2[i]; end; end; {$IF DEFINED(CPUX86_64)} function BMI2Support: LongBool; assembler; nostackframe; asm pushq %rbx movl $7,%eax movl $0,%ecx cpuid andl $256,%ebx movl %ebx,%eax popq %rbx end; function SSSE3Support: LongBool; assembler; nostackframe; asm pushq %rbx movl $1,%eax cpuid andl $512,%ecx movl %ecx,%eax popq %rbx end; {$ENDIF} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/dcpconst.pas���������������������������������������������������0000644�0001750�0000144�00000006372�15104114162�021144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Constants for use with DCPcrypt ********************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPconst; interface {******************************************************************************} const { Component registration } DCPcipherpage = 'DCPciphers'; DCPhashpage = 'DCPhashes'; { ID values } DCP_rc2 = 1; DCP_sha1 = 2; DCP_rc5 = 3; DCP_rc6 = 4; DCP_blowfish = 5; DCP_twofish = 6; DCP_cast128 = 7; DCP_gost = 8; DCP_rijndael = 9; DCP_ripemd160 = 10; DCP_misty1 = 11; DCP_idea = 12; DCP_mars = 13; DCP_haval = 14; DCP_cast256 = 15; DCP_md5 = 16; DCP_md4 = 17; DCP_tiger = 18; DCP_rc4 = 19; DCP_ice = 20; DCP_thinice = 21; DCP_ice2 = 22; DCP_des = 23; DCP_3des = 24; DCP_tea = 25; DCP_serpent = 26; DCP_ripemd128 = 27; DCP_sha256 = 28; DCP_sha384 = 29; DCP_sha512 = 30; DCP_checksum32 = 93; DCP_blake3 = 94; DCP_blake2bp = 95; DCP_blake2b = 96; DCP_blake2s = 97; DCP_blake2sp = 98; DCP_crc32 = 99; {******************************************************************************} {******************************************************************************} implementation end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/dcpblockciphers.pas��������������������������������������������0000644�0001750�0000144�00000052000�15104114162�022453� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Block cipher component definitions *****************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPblockciphers; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2; {******************************************************************************} { Base type definition for 64 bit block ciphers } type TDCP_blockcipher64= class(TDCP_blockcipher) private IV, CV: array[0..7] of byte; procedure IncCounter; public class function GetBlockSize: integer; override; { Get the block size of the cipher (in bits) } procedure Reset; override; { Reset any stored chaining information } procedure Burn; override; { Clear all stored key information and chaining information } procedure SetIV(const Value); override; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); override; { Returns the current chaining information, not the actual IV } procedure Init(const Key; Size: longword; InitVector: pointer); override; { Do key setup based on the data in Key, size is in bits } procedure EncryptCBC(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CTR method of decryption } end; {******************************************************************************} { Base type definition for 128 bit block ciphers } type TDCP_blockcipher128= class(TDCP_blockcipher) private IV, CV: array[0..15] of byte; procedure IncCounter; public class function GetBlockSize: integer; override; { Get the block size of the cipher (in bits) } procedure Reset; override; { Reset any stored chaining information } procedure Burn; override; { Clear all stored key information and chaining information } procedure SetIV(const Value); override; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); override; { Returns the current chaining information, not the actual IV } procedure Init(const Key; Size: longword; InitVector: pointer); override; { Do key setup based on the data in Key, size is in bits } procedure EncryptCBC(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CTR method of decryption } end; implementation {** TDCP_blockcipher64 ********************************************************} procedure TDCP_blockcipher64.IncCounter; var i: integer; begin Inc(CV[7]); i:= 7; while (i> 0) and (CV[i] = 0) do begin Inc(CV[i-1]); Dec(i); end; end; class function TDCP_blockcipher64.GetBlockSize: integer; begin Result:= 64; end; procedure TDCP_blockcipher64.Init(const Key; Size: longword; InitVector: pointer); begin inherited Init(Key,Size,InitVector); InitKey(Key,Size); if InitVector= nil then begin FillChar(IV,8,{$IFDEF DCP1COMPAT}$FF{$ELSE}0{$ENDIF}); EncryptECB(IV,IV); Reset; end else begin Move(InitVector^,IV,8); Reset; end; end; procedure TDCP_blockcipher64.SetIV(const Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(Value,IV,8); Reset; end; procedure TDCP_blockcipher64.GetIV(var Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(CV,Value,8); end; procedure TDCP_blockcipher64.Reset; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized') else Move(IV,CV,8); end; procedure TDCP_blockcipher64.Burn; begin FillChar(IV,8,$FF); FillChar(CV,8,$FF); inherited Burn; end; procedure TDCP_blockcipher64.EncryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin Move(p1^,p2^,8); XorBlock(p2^,CV,8); EncryptECB(p2^,p2^); Move(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); dcpFillChar(Temp, SizeOf(Temp), 0); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin Move(p1^,p2^,8); Move(p1^,Temp,8); DecryptECB(p2^,p2^); XorBlock(p2^,CV,8); Move(Temp,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],8-1); CV[7]:= p2^; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher64.DecryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; TempByte: byte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin TempByte:= p1^; EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],8-1); CV[7]:= TempByte; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher64.EncryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); Move(p2^,CV,8); p1:= pointer(pointer(p1) + 8); p2:= pointer(pointer(p2) + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin Move(p1^,Temp,8); EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); Move(Temp,CV,8); p1:= pointer(pointer(p1) + 8); p2:= pointer(pointer(p2) + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..7] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,8); XorBlock(p2^,temp,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 8); XorBlock(p2^,temp,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..7] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,8); XorBlock(p2^,temp,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 8); XorBlock(p2^,temp,Size mod 8); end; end; {** TDCP_blockcipher128 ********************************************************} procedure TDCP_blockcipher128.IncCounter; begin Inc(PQWord(@CV[0])^); if (PQWord(@CV[0])^ = 0) then Inc(PQWord(@CV[8])^); end; class function TDCP_blockcipher128.GetBlockSize: integer; begin Result:= 128; end; procedure TDCP_blockcipher128.Init(const Key; Size: longword; InitVector: pointer); begin inherited Init(Key,Size,InitVector); InitKey(Key,Size); if InitVector= nil then begin FillChar(IV,16,{$IFDEF DCP1COMPAT}$FF{$ELSE}0{$ENDIF}); EncryptECB(IV,IV); Reset; end else begin Move(InitVector^,IV,16); Reset; end; end; procedure TDCP_blockcipher128.SetIV(const Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(Value,IV,16); Reset; end; procedure TDCP_blockcipher128.GetIV(var Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(CV,Value,16); end; procedure TDCP_blockcipher128.Reset; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized') else Move(IV,CV,16); end; procedure TDCP_blockcipher128.Burn; begin FillChar(IV,16,$FF); FillChar(CV,16,$FF); inherited Burn; end; procedure TDCP_blockcipher128.EncryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin Move(p1^,p2^,16); XorBlock(p2^,CV,16); EncryptECB(p2^,p2^); Move(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin Move(p1^,p2^,16); Move(p1^,Temp,16); DecryptECB(p2^,p2^); XorBlock(p2^,CV,16); Move(Temp,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],15); CV[15]:= p2^; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher128.DecryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; TempByte: byte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin TempByte:= p1^; EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],15); CV[15]:= TempByte; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher128.EncryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); Move(p2^,CV,16); p1:= pointer(pointer(p1) + 16); p2:= pointer(pointer(p2) + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin Move(p1^,Temp,16); EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); Move(Temp,CV,16); p1:= pointer(pointer(p1) + 16); p2:= pointer(pointer(p2) + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..15] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,16); XorBlock(p2^,temp,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 16); XorBlock(p2^,temp,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..15] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,16); XorBlock(p2^,temp,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 16); XorBlock(p2^,temp,Size mod 16); end; end; end. doublecmd-1.1.30/components/kascrypt/dcpbase64.pas��������������������������������������������������0000644�0001750�0000144�00000012630�15104114162�021074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A Base64 encoding/decoding unit ********************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPbase64; interface uses Sysutils; function Base64EncodeStr(const Value: string): string; { Encode a string into Base64 format } function Base64DecodeStr(const Value: string): string; { Decode a Base64 format string } function Base64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint; { Encode a lump of raw data (output is (4/3) times bigger than input) } function Base64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint; { Decode a lump of raw data } {******************************************************************************} {******************************************************************************} implementation {$Q-}{$R-} const B64: array[0..63] of byte= (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108, 109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53, 54,55,56,57,43,47); function Base64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint; var i, iptr, optr: integer; Input, Output: PByteArray; begin Input:= PByteArray(pInput); Output:= PByteArray(pOutput); iptr:= 0; optr:= 0; for i:= 1 to (Size div 3) do begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)]; Output^[optr+2]:= B64[((Input^[iptr+1] and 15) shl 2) + (Input^[iptr+2] shr 6)]; Output^[optr+3]:= B64[Input^[iptr+2] and 63]; Inc(optr,4); Inc(iptr,3); end; case (Size mod 3) of 1: begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[(Input^[iptr] and 3) shl 4]; Output^[optr+2]:= byte('='); Output^[optr+3]:= byte('='); end; 2: begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)]; Output^[optr+2]:= B64[(Input^[iptr+1] and 15) shl 2]; Output^[optr+3]:= byte('='); end; end; Result:= ((Size+2) div 3) * 4; end; function Base64EncodeStr(const Value: string): string; begin SetLength(Result,((Length(Value)+2) div 3) * 4); Base64Encode(@Value[1],@Result[1],Length(Value)); end; function Base64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint; var i, j, iptr, optr: integer; Temp: array[0..3] of byte; Input, Output: PByteArray; begin Input:= PByteArray(pInput); Output:= PByteArray(pOutput); iptr:= 0; optr:= 0; Result:= 0; for i:= 1 to (Size div 4) do begin for j:= 0 to 3 do begin case Input^[iptr] of 65..90 : Temp[j]:= Input^[iptr] - Ord('A'); 97..122: Temp[j]:= Input^[iptr] - Ord('a') + 26; 48..57 : Temp[j]:= Input^[iptr] - Ord('0') + 52; 43 : Temp[j]:= 62; 47 : Temp[j]:= 63; 61 : Temp[j]:= $FF; end; Inc(iptr); end; Output^[optr]:= (Temp[0] shl 2) or (Temp[1] shr 4); Result:= optr+1; if (Temp[2]<> $FF) and (Temp[3]= $FF) then begin Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2); Result:= optr+2; Inc(optr) end else if (Temp[2]<> $FF) then begin Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2); Output^[optr+2]:= (Temp[2] shl 6) or Temp[3]; Result:= optr+3; Inc(optr,2); end; Inc(optr); end; end; function Base64DecodeStr(const Value: string): string; begin SetLength(Result,(Length(Value) div 4) * 3); SetLength(Result,Base64Decode(@Value[1],@Result[1],Length(Value))); end; end. ��������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/dcp.pas��������������������������������������������������������0000644�0001750�0000144�00000000772�15104114162�020073� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. do not edit! This source is only used to compile and install the package. } unit dcp; interface uses DCPbase64, DCPblockciphers, DCPconst, DCPcrypt2, DCPblowfish, DCPcast128, DCPcast256, DCPdes, DCPgost, DCPice, DCPidea, DCPmars, DCPmisty1, DCPrc2, DCPrc4, DCPrc5, DCPrc6, DCPrijndael, DCPserpent, DCPtea, DCPtwofish, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPsha1, DCPsha256, DCPsha512, DCPtiger; implementation end. ������doublecmd-1.1.30/components/kascrypt/Random/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020032� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Random/isaac.pas�����������������������������������������������0000644�0001750�0000144�00000031612�15104114162�021622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit ISAAC; {Bob Jenkins' public domain random number generator ISAAC} interface {$i std.inc} (************************************************************************* DESCRIPTION : Bob Jenkins' public domain random number generator ISAAC (Indirection, Shift, Accumulate, Add, and Count) Period at least 2^40, average 2^8295 REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12, FPC, VP, WDOSX EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : http://burtleburtle.net/bob/rand/isaacafa.html (ISAAC: a fast cryptographic random number generator) Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 23.07.05 W.Ehrhardt Initial BP7 port of rand.c with RANDSIZ=256 0.11 23.07.05 we Some tweaking in isaac_generate 0.12 23.07.05 we non crypt option (RANDSIZ=16), much slower 0.13 23.07.05 we use RANDSIZ=256 only, procedure Mix 0.14 23.07.05 we use mix array m, use inc where possible 0.15 23.07.05 we BASM16 in isaac_generate 0.16 24.07.05 we routines for word, long, double etc. 0.17 01.09.05 we byte typecast in init0 0.18 05.11.08 we isaac_dword function 0.19 02.12.08 we BTypes/Ptr2Inc 0.20 06.01.09 we Uses BTypes moved to implementation 0.21 14.06.12 we Fix bug in _read for trailing max 3 bytes **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2005-2012 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$ifdef BIT16} {$N+} {$endif} type isaac_ctx = record {context of random number generator} randmem: array[0..255] of longint; {the internal state} randrsl: array[0..255] of longint; {the results given to the user} randa : longint; {accumulator} randb : longint; {the last result} randc : longint; {counter, guarantees cycle >= 2^40 } nextres: longint; {the next result } randidx: word; {the index in randrsl[] } end; procedure isaac_init (var ctx: isaac_ctx; seed: longint); {-Init context from randrsl[0]=seed, randrsl[i]=0 otherwise} procedure isaac_init0(var ctx: isaac_ctx); {-Init context from randseed} {$ifdef CONST} procedure isaac_inita(var ctx: isaac_ctx; const key: array of longint; klen: integer); {-Init all context variables with separate seeds, klen: number of seeds} {$else} procedure isaac_inita(var ctx: isaac_ctx; var KArr; klen: integer); {-Init all context variables with separate seeds, klen: number of seeds} {$endif} procedure isaac_next(var ctx: isaac_ctx); {-Next step of PRNG} procedure isaac_read(var ctx: isaac_ctx; dest: pointer; len: longint); {-Read len bytes from the PRNG to dest} function isaac_long(var ctx: isaac_ctx): longint; {-Next random positive longint} function isaac_dword(var ctx: isaac_ctx): {$ifdef HAS_CARD32}cardinal{$else}longint{$endif}; {-Next 32 bit random dword (cardinal or longint)} function isaac_word(var ctx: isaac_ctx): word; {-Next random word} function isaac_double(var ctx: isaac_ctx): double; {-Next random double [0..1) with 32 bit precision} function isaac_double53(var ctx: isaac_ctx): double; {-Next random double in [0..1) with full double 53 bit precision} function isaac_selftest: boolean; {-Simple self-test of ISAAC PRNG} {$ifdef testing} {interfaced for cycle testing without overhead, do not use for normal use} procedure isaac_generate(var ctx: isaac_ctx); {-generate next 256 result values, ie refill randrsl} {$endif} implementation uses BTypes; {---------------------------------------------------------------------------} procedure isaac_generate(var ctx: isaac_ctx); {-generate next 256 result values, ie refill randrsl} var x,y: longint; xi : integer absolute x; {better performance for BIT16} i : integer; {$ifdef BASM16} pra: pointer; {pointer to cxt.randa for faster BASM16 access} {$endif} begin {$ifdef BASM16} pra := @ctx.randa; {$endif} with ctx do begin inc(randc); inc(randb, randc); for i:=0 to 255 do begin {$ifdef BASM16} case i and 3 of 0: asm les di,[pra] db $66; mov ax,es:[di] db $66; shl ax,13 db $66; xor es:[di],ax end; 1: asm les di,[pra] db $66; mov ax,es:[di] db $66; shr ax,6 db $66; xor es:[di],ax end; 2: asm les di,[pra] db $66; mov ax,es:[di] db $66; shl ax,2 db $66; xor es:[di],ax end; 3: asm {shr 16 is special, use word [pra+2]} les di,[pra] mov ax, es:[di+2] xor es:[di],ax end; end; {$else} case i and 3 of 0: randa := randa xor (randa shl 13); 1: randa := randa xor (randa shr 6); 2: randa := randa xor (randa shl 2); 3: randa := randa xor (randa shr 16); end; {$endif} x := randmem[i]; inc(randa,randmem[(i+128) and 255]); y := randmem[(xi shr 2) and 255] + randa + randb; randmem[i] := y; randb := randmem[(y shr 10) and 255] + x; randrsl[i] := randb; end; {reset result index} randidx:=0; end; end; {---------------------------------------------------------------------------} procedure internal_init(var ctx: isaac_ctx; flag: boolean); {-Init state, use randrsl if flag=true} var i,j: integer; m: array[0..7] of longint; procedure Mix; {-mix the array} begin m[0] := m[0] xor (m[1] shl 11); inc(m[3], m[0]); inc(m[1], m[2]); m[1] := m[1] xor (m[2] shr 2); inc(m[4], m[1]); inc(m[2], m[3]); m[2] := m[2] xor (m[3] shl 8); inc(m[5], m[2]); inc(m[3], m[4]); m[3] := m[3] xor (m[4] shr 16); inc(m[6], m[3]); inc(m[4], m[5]); m[4] := m[4] xor (m[5] shl 10); inc(m[7], m[4]); inc(m[5], m[6]); m[5] := m[5] xor (m[6] shr 4); inc(m[0], m[5]); inc(m[6], m[7]); m[6] := m[6] xor (m[7] shl 8); inc(m[1], m[6]); inc(m[7], m[0]); m[7] := m[7] xor (m[0] shr 9); inc(m[2], m[7]); inc(m[0], m[1]); end; begin with ctx do begin randa := 0; randb := 0; randc := 0; for i:=0 to 7 do m[i] := longint($9e3779b9); {the golden ratio} for i:=0 to 3 do Mix; i := 0; while i<256 do begin {fill in randmem[] with messy stuff} if flag then begin {use all the information in the seed} for j:=0 to 7 do inc(m[j], randrsl[i+j]); end; Mix; move(m, randmem[i], sizeof(m)); inc(i,8); end; if flag then begin {do a second pass to make all of the seed affect all of randmem} i := 0; while i<256 do begin for j:=0 to 7 do inc(m[j], randmem[i+j]); Mix; move(m, randmem[i], sizeof(m)); inc(i,8); end; end; {generate first set of results} isaac_generate(ctx); {prepare to use the first set of results } randidx := 0; end; end; {---------------------------------------------------------------------------} procedure isaac_init(var ctx: isaac_ctx; seed: longint); {-Init context from randrsl[0]=seed, randrsl[i]=0 otherwise} begin with ctx do begin fillchar(randrsl, sizeof(randrsl),0); randrsl[0] := seed; end; internal_init(ctx, true); end; {---------------------------------------------------------------------------} procedure isaac_init0(var ctx: isaac_ctx); {-Init context from randseed and randrsl[i]:=random} var i,j: integer; tl: longint; ta: packed array[0..3] of byte absolute tl; begin with ctx do begin for i:=0 to 255 do begin for j:=0 to 3 do ta[j] := byte(random(256)); randrsl[i] := tl; end; end; internal_init(ctx, true); end; {---------------------------------------------------------------------------} {$ifdef CONST} procedure isaac_inita(var ctx: isaac_ctx; const key: array of longint; klen: integer); {-Init all context variables with separate seeds, klen: number of seeds} {$else} procedure isaac_inita(var ctx: isaac_ctx; var KArr; klen: integer); {-Init all context variables with separate seeds, klen: number of seeds} var key: packed array[0..255] of longint absolute KArr; {T5-6 do not have open arrrays} {$endif} var i: integer; begin {$ifdef CONST} if klen>high(key)+1 then klen := high(key)+1; {$endif} with ctx do begin for i:=0 to 255 do begin if i<klen then randrsl[i]:=key[i] else randrsl[i]:=0; end; end; internal_init(ctx, true); end; {---------------------------------------------------------------------------} procedure isaac_next(var ctx: isaac_ctx); {-Next step of PRNG} begin with ctx do begin if randidx>255 then isaac_generate(ctx); nextres := randrsl[randidx]; inc(randidx); end; end; {---------------------------------------------------------------------------} procedure isaac_read(var ctx: isaac_ctx; dest: pointer; len: longint); {-Read len bytes from the PRNG to dest} type plong = ^longint; begin {not optimized} while len>3 do begin isaac_next(ctx); plong(dest)^ := ctx.nextres; inc(Ptr2Inc(dest),4); dec(len, 4); end; if len>0 then begin isaac_next(ctx); move(ctx.nextres, dest^, len and 3); end; end; {---------------------------------------------------------------------------} function isaac_long(var ctx: isaac_ctx): longint; {-Next random positive longint} begin isaac_next(ctx); isaac_long := ctx.nextres shr 1; end; {---------------------------------------------------------------------------} function isaac_dword(var ctx: isaac_ctx): {$ifdef HAS_CARD32}cardinal{$else}longint{$endif}; {-Next 32 bit random dword (cardinal or longint)} begin isaac_next(ctx); {$ifdef HAS_CARD32} isaac_dword := cardinal(ctx.nextres); {$else} isaac_dword := ctx.nextres; {$endif} end; {---------------------------------------------------------------------------} function isaac_word(var ctx: isaac_ctx): word; {-Next random word} type TwoWords = packed record L,H: word end; begin isaac_next(ctx); isaac_word := TwoWords(ctx.nextres).H; end; {---------------------------------------------------------------------------} function isaac_double(var ctx: isaac_ctx): double; {-Next random double [0..1) with 32 bit precision} begin isaac_next(ctx); isaac_double := (ctx.nextres + 2147483648.0) / 4294967296.0; end; {---------------------------------------------------------------------------} function isaac_double53(var ctx: isaac_ctx): double; {-Next random double in [0..1) with full double 53 bit precision} var hb,lb: longint; begin isaac_next(ctx); hb := ctx.nextres shr 5; isaac_next(ctx); lb := ctx.nextres shr 6; isaac_double53 := (hb*67108864.0+lb)/9007199254740992.0; end; {---------------------------------------------------------------------------} function isaac_selftest: boolean; {-Simple self-test of ISAAC PRNG} var ctx: isaac_ctx; begin fillchar(ctx, sizeof(ctx),0); internal_init(ctx, true); isaac_generate(ctx); {check first and last longint of randvec.txt} if ctx.randrsl[0]<>longint($f650e4c8) then begin isaac_selftest := false; exit; end; isaac_generate(ctx); isaac_selftest := ctx.randrsl[255] = longint($4bb5af29); end; end. ����������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/��������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�020025� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/sha512_sse.inc������������������������������������������0000644�0001750�0000144�00000230572�15104114162�022406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2012, Intel Corporation ; ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are ; met: ; ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the ; distribution. ; ; * Neither the name of the Intel Corporation nor the names of its ; contributors may be used to endorse or promote products derived from ; this software without specific prior written permission. ; ; ; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR ; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */ /* * Conversion to GAS assembly and integration to libgcrypt * by Jussi Kivilinna <jussi.kivilinna@iki.fi> * * Note: original implementation was named as SHA512-SSE4. However, only SSSE3 * is required. */ } procedure sha512_compress_sse(HashBuffer: PByte; CurrentHash: PInt64; BufferCount: UIntPtr); assembler; nostackframe; asm {$IF DEFINED(WIN64)} pushq %rsi pushq %rdi movq %rcx, %rdi movq %rdx, %rsi movq %r8, %rdx {$ENDIF} xor %eax,%eax cmp $0x0,%rdx je .Lnowork //* Allocate Stack Space */ sub $0x2b8,%rsp //* Save GPRs */ mov %rbx,0x290(%rsp) mov %r12,0x298(%rsp) mov %r13,0x2a0(%rsp) mov %r14,0x2a8(%rsp) mov %r15,0x2b0(%rsp) .Lupdateblock: mov (%rsi),%r9 mov 0x8(%rsi),%r10 mov 0x10(%rsi),%r11 mov 0x18(%rsi),%r12 mov 0x20(%rsi),%r13 mov 0x28(%rsi),%r14 mov 0x30(%rsi),%r15 mov 0x38(%rsi),%rbx //* (80 rounds) / (2 rounds/iteration) + (1 iteration) */ //.if t < 2 (t == 0) //* BSWAP 2 QWORDS */ movdqa .LXMM_QWORD_BSWAP(%rip),%xmm1 movdqu (%rdi),%xmm0 //* BSWAP */ pshufb %xmm1,%xmm0 //* Store Scheduled Pair */ movdqa %xmm0,(%rsp) //* Compute W[t]+K[t] */ paddq .LK512_0(%rip),%xmm0 //* Store into WK for rounds */ movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 2) //* BSWAP 2 QWORDS; Compute 2 Rounds */ movdqu 0x10(%rdi),%xmm0 //* BSWAP */ pshufb %xmm1,%xmm0 //* Round t-2 */ mov %r14,%rcx mov %r13,%rax xor %r15,%rcx ror $0x17,%rax and %r13,%rcx xor %r13,%rax xor %r15,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r13,%rax mov %r9,%r8 add %rbx,%rcx ror $0xe,%rax add %rax,%rcx mov %r9,%rax xor %r11,%r8 and %r11,%rax and %r10,%r8 xor %rax,%r8 mov %r9,%rax ror $0x5,%rax xor %r9,%rax add %rcx,%r12 ror $0x6,%rax xor %r9,%rax lea (%rcx,%r8,1),%rbx ror $0x1c,%rax add %rax,%rbx //* Store Scheduled Pair */ movdqa %xmm0,0x10(%rsp) //* Compute W[t]+K[t] */ paddq .LK512_1(%rip),%xmm0 //* Round t-1 */ mov %r13,%rcx mov %r12,%rax xor %r14,%rcx ror $0x17,%rax and %r12,%rcx xor %r12,%rax xor %r14,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r12,%rax mov %rbx,%r8 add %r15,%rcx ror $0xe,%rax add %rax,%rcx mov %rbx,%rax xor %r10,%r8 and %r10,%rax and %r9,%r8 xor %rax,%r8 mov %rbx,%rax ror $0x5,%rax xor %rbx,%rax add %rcx,%r11 ror $0x6,%rax xor %rbx,%rax lea (%rcx,%r8,1),%r15 ror $0x1c,%rax add %rax,%r15 //* Store W[t]+K[t] into WK */ movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 4) movdqu 0x20(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %r12,%rcx mov %r11,%rax xor %r13,%rcx ror $0x17,%rax and %r11,%rcx xor %r11,%rax xor %r13,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r11,%rax mov %r15,%r8 add %r14,%rcx ror $0xe,%rax add %rax,%rcx mov %r15,%rax xor %r9,%r8 and %r9,%rax and %rbx,%r8 xor %rax,%r8 mov %r15,%rax ror $0x5,%rax xor %r15,%rax add %rcx,%r10 ror $0x6,%rax xor %r15,%rax lea (%rcx,%r8,1),%r14 ror $0x1c,%rax add %rax,%r14 movdqa %xmm0,0x20(%rsp) paddq .LK512_2(%rip),%xmm0 mov %r11,%rcx mov %r10,%rax xor %r12,%rcx ror $0x17,%rax and %r10,%rcx xor %r10,%rax xor %r12,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r10,%rax mov %r14,%r8 add %r13,%rcx ror $0xe,%rax add %rax,%rcx mov %r14,%rax xor %rbx,%r8 and %rbx,%rax and %r15,%r8 xor %rax,%r8 mov %r14,%rax ror $0x5,%rax xor %r14,%rax add %rcx,%r9 ror $0x6,%rax xor %r14,%rax lea (%rcx,%r8,1),%r13 ror $0x1c,%rax add %rax,%r13 movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 6) movdqu 0x30(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %r10,%rcx mov %r9,%rax xor %r11,%rcx ror $0x17,%rax and %r9,%rcx xor %r9,%rax xor %r11,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r9,%rax mov %r13,%r8 add %r12,%rcx ror $0xe,%rax add %rax,%rcx mov %r13,%rax xor %r15,%r8 and %r15,%rax and %r14,%r8 xor %rax,%r8 mov %r13,%rax ror $0x5,%rax xor %r13,%rax add %rcx,%rbx ror $0x6,%rax xor %r13,%rax lea (%rcx,%r8,1),%r12 ror $0x1c,%rax add %rax,%r12 movdqa %xmm0,0x30(%rsp) paddq .LK512_3(%rip),%xmm0 mov %r9,%rcx mov %rbx,%rax xor %r10,%rcx ror $0x17,%rax and %rbx,%rcx xor %rbx,%rax xor %r10,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %rbx,%rax mov %r12,%r8 add %r11,%rcx ror $0xe,%rax add %rax,%rcx mov %r12,%rax xor %r14,%r8 and %r14,%rax and %r13,%r8 xor %rax,%r8 mov %r12,%rax ror $0x5,%rax xor %r12,%rax add %rcx,%r15 ror $0x6,%rax xor %r12,%rax lea (%rcx,%r8,1),%r11 ror $0x1c,%rax add %rax,%r11 movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 8) movdqu 0x40(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %rbx,%rcx mov %r15,%rax xor %r9,%rcx ror $0x17,%rax and %r15,%rcx xor %r15,%rax xor %r9,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r15,%rax mov %r11,%r8 add %r10,%rcx ror $0xe,%rax add %rax,%rcx mov %r11,%rax xor %r13,%r8 and %r13,%rax and %r12,%r8 xor %rax,%r8 mov %r11,%rax ror $0x5,%rax xor %r11,%rax add %rcx,%r14 ror $0x6,%rax xor %r11,%rax lea (%rcx,%r8,1),%r10 ror $0x1c,%rax add %rax,%r10 movdqa %xmm0,0x40(%rsp) paddq .LK512_4(%rip),%xmm0 mov %r15,%rcx mov %r14,%rax xor %rbx,%rcx ror $0x17,%rax and %r14,%rcx xor %r14,%rax xor %rbx,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r14,%rax mov %r10,%r8 add %r9,%rcx ror $0xe,%rax add %rax,%rcx mov %r10,%rax xor %r12,%r8 and %r12,%rax and %r11,%r8 xor %rax,%r8 mov %r10,%rax ror $0x5,%rax xor %r10,%rax add %rcx,%r13 ror $0x6,%rax xor %r10,%rax lea (%rcx,%r8,1),%r9 ror $0x1c,%rax add %rax,%r9 movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 10) movdqu 0x50(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %r14,%rcx mov %r13,%rax xor %r15,%rcx ror $0x17,%rax and %r13,%rcx xor %r13,%rax xor %r15,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r13,%rax mov %r9,%r8 add %rbx,%rcx ror $0xe,%rax add %rax,%rcx mov %r9,%rax xor %r11,%r8 and %r11,%rax and %r10,%r8 xor %rax,%r8 mov %r9,%rax ror $0x5,%rax xor %r9,%rax add %rcx,%r12 ror $0x6,%rax xor %r9,%rax lea (%rcx,%r8,1),%rbx ror $0x1c,%rax add %rax,%rbx movdqa %xmm0,0x50(%rsp) paddq .LK512_5(%rip),%xmm0 mov %r13,%rcx mov %r12,%rax xor %r14,%rcx ror $0x17,%rax and %r12,%rcx xor %r12,%rax xor %r14,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r12,%rax mov %rbx,%r8 add %r15,%rcx ror $0xe,%rax add %rax,%rcx mov %rbx,%rax xor %r10,%r8 and %r10,%rax and %r9,%r8 xor %rax,%r8 mov %rbx,%rax ror $0x5,%rax xor %rbx,%rax add %rcx,%r11 ror $0x6,%rax xor %rbx,%rax lea (%rcx,%r8,1),%r15 ror $0x1c,%rax add %rax,%r15 movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 12) movdqu 0x60(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %r12,%rcx mov %r11,%rax xor %r13,%rcx ror $0x17,%rax and %r11,%rcx xor %r11,%rax xor %r13,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r11,%rax mov %r15,%r8 add %r14,%rcx ror $0xe,%rax add %rax,%rcx mov %r15,%rax xor %r9,%r8 and %r9,%rax and %rbx,%r8 xor %rax,%r8 mov %r15,%rax ror $0x5,%rax xor %r15,%rax add %rcx,%r10 ror $0x6,%rax xor %r15,%rax lea (%rcx,%r8,1),%r14 ror $0x1c,%rax add %rax,%r14 movdqa %xmm0,0x60(%rsp) paddq .LK512_6(%rip),%xmm0 mov %r11,%rcx mov %r10,%rax xor %r12,%rcx ror $0x17,%rax and %r10,%rcx xor %r10,%rax xor %r12,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r10,%rax mov %r14,%r8 add %r13,%rcx ror $0xe,%rax add %rax,%rcx mov %r14,%rax xor %rbx,%r8 and %rbx,%rax and %r15,%r8 xor %rax,%r8 mov %r14,%rax ror $0x5,%rax xor %r14,%rax add %rcx,%r9 ror $0x6,%rax xor %r14,%rax lea (%rcx,%r8,1),%r13 ror $0x1c,%rax add %rax,%r13 movdqa %xmm0,0x280(%rsp) //.elseif t < 16 (t == 14) movdqu 0x70(%rdi),%xmm0 pshufb %xmm1,%xmm0 mov %r10,%rcx mov %r9,%rax xor %r11,%rcx ror $0x17,%rax and %r9,%rcx xor %r9,%rax xor %r11,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r9,%rax mov %r13,%r8 add %r12,%rcx ror $0xe,%rax add %rax,%rcx mov %r13,%rax xor %r15,%r8 and %r15,%rax and %r14,%r8 xor %rax,%r8 mov %r13,%rax ror $0x5,%rax xor %r13,%rax add %rcx,%rbx ror $0x6,%rax xor %r13,%rax lea (%rcx,%r8,1),%r12 ror $0x1c,%rax add %rax,%r12 movdqa %xmm0,0x70(%rsp) paddq .LK512_7(%rip),%xmm0 mov %r9,%rcx mov %rbx,%rax xor %r10,%rcx ror $0x17,%rax and %rbx,%rcx xor %rbx,%rax xor %r10,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %rbx,%rax mov %r12,%r8 add %r11,%rcx ror $0xe,%rax add %rax,%rcx mov %r12,%rax xor %r14,%r8 and %r14,%rax and %r13,%r8 xor %rax,%r8 mov %r12,%rax ror $0x5,%rax xor %r12,%rax add %rcx,%r15 ror $0x6,%rax xor %r12,%rax lea (%rcx,%r8,1),%r11 ror $0x1c,%rax add %rax,%r11 movdqa %xmm0,0x280(%rsp) //.elseif t < 79 (t == 16) //* Schedule 2 QWORDS; Compute 2 Rounds */ mov %rbx,%rcx movdqa 0x70(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x8(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x48(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq (%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x80(%rsp) xor %r10,%rax paddq .LK512_8(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 18) mov %r14,%rcx movdqa 0x80(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x18(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x58(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x10(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x90(%rsp) xor %rbx,%rax paddq .LK512_9(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 20) mov %r12,%rcx movdqa 0x90(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x28(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x68(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x20(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xa0(%rsp) xor %r14,%rax paddq .LK512_10(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 22) mov %r10,%rcx movdqa 0xa0(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x38(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x78(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x30(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xb0(%rsp) xor %r12,%rax paddq .LK512_11(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 24) mov %rbx,%rcx movdqa 0xb0(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x48(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x88(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x40(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xc0(%rsp) xor %r10,%rax paddq .LK512_12(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 26) mov %r14,%rcx movdqa 0xc0(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x58(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x98(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x50(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xd0(%rsp) xor %rbx,%rax paddq .LK512_13(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 28) mov %r12,%rcx movdqa 0xd0(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x68(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0xa8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x60(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xe0(%rsp) xor %r14,%rax paddq .LK512_14(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 30) mov %r10,%rcx movdqa 0xe0(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x78(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0xb8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x70(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0xf0(%rsp) xor %r12,%rax paddq .LK512_15(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 32) mov %rbx,%rcx movdqa 0xf0(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x88(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0xc8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x80(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x100(%rsp) xor %r10,%rax paddq .LK512_16(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 34) mov %r14,%rcx movdqa 0x100(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x98(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0xd8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x90(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x110(%rsp) xor %rbx,%rax paddq .LK512_17(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 36) mov %r12,%rcx movdqa 0x110(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0xa8(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0xe8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xa0(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x120(%rsp) xor %r14,%rax paddq .LK512_18(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 38) mov %r10,%rcx movdqa 0x120(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0xb8(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0xf8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xb0(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x130(%rsp) xor %r12,%rax paddq .LK512_19(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 40) mov %rbx,%rcx movdqa 0x130(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0xc8(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x108(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xc0(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x140(%rsp) xor %r10,%rax paddq .LK512_20(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 42) mov %r14,%rcx movdqa 0x140(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0xd8(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x118(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xd0(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x150(%rsp) xor %rbx,%rax paddq .LK512_21(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 44) mov %r12,%rcx movdqa 0x150(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0xe8(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x128(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xe0(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x160(%rsp) xor %r14,%rax paddq .LK512_22(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 46) mov %r10,%rcx movdqa 0x160(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0xf8(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x138(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0xf0(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x170(%rsp) xor %r12,%rax paddq .LK512_23(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 48) mov %rbx,%rcx movdqa 0x170(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x108(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x148(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x100(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x180(%rsp) xor %r10,%rax paddq .LK512_24(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 50) mov %r14,%rcx movdqa 0x180(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x118(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x158(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x110(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x190(%rsp) xor %rbx,%rax paddq .LK512_25(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 52) mov %r12,%rcx movdqa 0x190(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x128(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x168(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x120(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1a0(%rsp) xor %r14,%rax paddq .LK512_26(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 54) mov %r10,%rcx movdqa 0x1a0(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x138(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x178(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x130(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1b0(%rsp) xor %r12,%rax paddq .LK512_27(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 56) mov %rbx,%rcx movdqa 0x1b0(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x148(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x188(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x140(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1c0(%rsp) xor %r10,%rax paddq .LK512_28(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 58) mov %r14,%rcx movdqa 0x1c0(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x158(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x198(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x150(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1d0(%rsp) xor %rbx,%rax paddq .LK512_29(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 60) mov %r12,%rcx movdqa 0x1d0(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x168(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x1a8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x160(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1e0(%rsp) xor %r14,%rax paddq .LK512_30(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 62) mov %r10,%rcx movdqa 0x1e0(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x178(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x1b8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x170(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x1f0(%rsp) xor %r12,%rax paddq .LK512_31(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 64) mov %rbx,%rcx movdqa 0x1f0(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x188(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x1c8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x180(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x200(%rsp) xor %r10,%rax paddq .LK512_32(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 66) mov %r14,%rcx movdqa 0x200(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x198(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x1d8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x190(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x210(%rsp) xor %rbx,%rax paddq .LK512_33(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 68) mov %r12,%rcx movdqa 0x210(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x1a8(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x1e8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1a0(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x220(%rsp) xor %r14,%rax paddq .LK512_34(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 70) mov %r10,%rcx movdqa 0x220(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x1b8(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x1f8(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1b0(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x230(%rsp) xor %r12,%rax paddq .LK512_35(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //.elseif t < 79 (t == 72) mov %rbx,%rcx movdqa 0x230(%rsp),%xmm2 xor %r9,%rcx and %r15,%rcx movdqa %xmm2,%xmm0 xor %r9,%rcx add 0x280(%rsp),%rcx movdqu 0x1c8(%rsp),%xmm5 mov %r15,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r15,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r15,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r10,%rcx pxor %xmm2,%xmm0 mov %r11,%r8 xor %r13,%r8 pxor %xmm5,%xmm3 and %r12,%r8 mov %r11,%rax psrlq $0xd,%xmm0 and %r13,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r11,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r11,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r11,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r14 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r10 movdqa %xmm2,%xmm1 mov %r15,%rcx xor %rbx,%rcx movdqa %xmm5,%xmm4 and %r14,%rcx xor %rbx,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r14,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r14,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r14,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r9,%rcx mov %r10,%r8 psllq $0x38,%xmm4 xor %r12,%r8 and %r11,%r8 pxor %xmm1,%xmm0 mov %r10,%rax and %r12,%rax movdqu 0x208(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r10,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1c0(%rsp),%xmm0 xor %r10,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x240(%rsp) xor %r10,%rax paddq .LK512_36(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r13 lea (%rcx,%r8,1),%r9 //.elseif t < 79 (t == 74) mov %r14,%rcx movdqa 0x240(%rsp),%xmm2 xor %r15,%rcx and %r13,%rcx movdqa %xmm2,%xmm0 xor %r15,%rcx add 0x280(%rsp),%rcx movdqu 0x1d8(%rsp),%xmm5 mov %r13,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r13,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r13,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %rbx,%rcx pxor %xmm2,%xmm0 mov %r9,%r8 xor %r11,%r8 pxor %xmm5,%xmm3 and %r10,%r8 mov %r9,%rax psrlq $0xd,%xmm0 and %r11,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r9,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r9,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r9,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r12 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%rbx movdqa %xmm2,%xmm1 mov %r13,%rcx xor %r14,%rcx movdqa %xmm5,%xmm4 and %r12,%rcx xor %r14,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r12,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r12,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r12,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r15,%rcx mov %rbx,%r8 psllq $0x38,%xmm4 xor %r10,%r8 and %r9,%r8 pxor %xmm1,%xmm0 mov %rbx,%rax and %r10,%rax movdqu 0x218(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %rbx,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1d0(%rsp),%xmm0 xor %rbx,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x250(%rsp) xor %rbx,%rax paddq .LK512_37(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r11 lea (%rcx,%r8,1),%r15 //.elseif t < 79 (t == 76) mov %r12,%rcx movdqa 0x250(%rsp),%xmm2 xor %r13,%rcx and %r11,%rcx movdqa %xmm2,%xmm0 xor %r13,%rcx add 0x280(%rsp),%rcx movdqu 0x1e8(%rsp),%xmm5 mov %r11,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r11,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r11,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r14,%rcx pxor %xmm2,%xmm0 mov %r15,%r8 xor %r9,%r8 pxor %xmm5,%xmm3 and %rbx,%r8 mov %r15,%rax psrlq $0xd,%xmm0 and %r9,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r15,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r15,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r15,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%r10 psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r14 movdqa %xmm2,%xmm1 mov %r11,%rcx xor %r12,%rcx movdqa %xmm5,%xmm4 and %r10,%rcx xor %r12,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %r10,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %r10,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %r10,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r13,%rcx mov %r14,%r8 psllq $0x38,%xmm4 xor %rbx,%r8 and %r15,%r8 pxor %xmm1,%xmm0 mov %r14,%rax and %rbx,%rax movdqu 0x228(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r14,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1e0(%rsp),%xmm0 xor %r14,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x260(%rsp) xor %r14,%rax paddq .LK512_38(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r9 lea (%rcx,%r8,1),%r13 //.elseif t < 79 (t == 78) mov %r10,%rcx movdqa 0x260(%rsp),%xmm2 xor %r11,%rcx and %r9,%rcx movdqa %xmm2,%xmm0 xor %r11,%rcx add 0x280(%rsp),%rcx movdqu 0x1f8(%rsp),%xmm5 mov %r9,%rax ror $0x17,%rax movdqa %xmm5,%xmm3 xor %r9,%rax ror $0x4,%rax psrlq $0x2a,%xmm0 xor %r9,%rax ror $0xe,%rax psrlq $0x1,%xmm3 add %rax,%rcx add %r12,%rcx pxor %xmm2,%xmm0 mov %r13,%r8 xor %r15,%r8 pxor %xmm5,%xmm3 and %r14,%r8 mov %r13,%rax psrlq $0xd,%xmm0 and %r15,%rax xor %rax,%r8 psrlq $0x6,%xmm3 mov %r13,%rax ror $0x5,%rax pxor %xmm2,%xmm0 xor %r13,%rax ror $0x6,%rax pxor %xmm5,%xmm3 xor %r13,%rax ror $0x1c,%rax psrlq $0x6,%xmm0 add %rax,%r8 add %rcx,%rbx psrlq $0x1,%xmm3 lea (%rcx,%r8,1),%r12 movdqa %xmm2,%xmm1 mov %r9,%rcx xor %r10,%rcx movdqa %xmm5,%xmm4 and %rbx,%rcx xor %r10,%rcx psllq $0x2a,%xmm1 add 0x288(%rsp),%rcx mov %rbx,%rax psllq $0x7,%xmm4 ror $0x17,%rax xor %rbx,%rax pxor %xmm2,%xmm1 ror $0x4,%rax xor %rbx,%rax pxor %xmm5,%xmm4 ror $0xe,%rax add %rax,%rcx psllq $0x3,%xmm1 add %r11,%rcx mov %r12,%r8 psllq $0x38,%xmm4 xor %r14,%r8 and %r13,%r8 pxor %xmm1,%xmm0 mov %r12,%rax and %r14,%rax movdqu 0x238(%rsp),%xmm1 xor %rax,%r8 pxor %xmm4,%xmm3 mov %r12,%rax paddq %xmm3,%xmm0 ror $0x5,%rax paddq 0x1f0(%rsp),%xmm0 xor %r12,%rax paddq %xmm1,%xmm0 ror $0x6,%rax movdqa %xmm0,0x270(%rsp) xor %r12,%rax paddq .LK512_39(%rip),%xmm0 ror $0x1c,%rax movdqa %xmm0,0x280(%rsp) add %rax,%r8 add %rcx,%r15 lea (%rcx,%r8,1),%r11 //* Compute 2 Rounds */ // SHA512_Round (t - 2) mov %rbx,%rcx mov %r15,%rax xor %r9,%rcx ror $0x17,%rax and %r15,%rcx xor %r15,%rax xor %r9,%rcx add 0x280(%rsp),%rcx ror $0x4,%rax xor %r15,%rax mov %r11,%r8 add %r10,%rcx ror $0xe,%rax add %rax,%rcx mov %r11,%rax xor %r13,%r8 and %r13,%rax and %r12,%r8 xor %rax,%r8 mov %r11,%rax ror $0x5,%rax xor %r11,%rax add %rcx,%r14 ror $0x6,%rax xor %r11,%rax lea (%rcx,%r8,1),%r10 ror $0x1c,%rax add %rax,%r10 // SHA512_Round (t - 1) mov %r15,%rcx mov %r14,%rax xor %rbx,%rcx ror $0x17,%rax and %r14,%rcx xor %r14,%rax xor %rbx,%rcx add 0x288(%rsp),%rcx ror $0x4,%rax xor %r14,%rax mov %r10,%r8 add %r9,%rcx ror $0xe,%rax add %rax,%rcx mov %r10,%rax xor %r12,%r8 and %r12,%rax and %r11,%r8 xor %rax,%r8 mov %r10,%rax ror $0x5,%rax xor %r10,%rax add %rcx,%r13 ror $0x6,%rax xor %r10,%rax lea (%rcx,%r8,1),%r9 ror $0x1c,%rax add %rax,%r9 //* Update digest */ add %r9,(%rsi) add %r10,0x8(%rsi) add %r11,0x10(%rsi) add %r12,0x18(%rsi) add %r13,0x20(%rsi) add %r14,0x28(%rsi) add %r15,0x30(%rsi) add %rbx,0x38(%rsi) //* Advance to next message block */ add $0x80,%rdi dec %rdx jne .Lupdateblock //* Restore GPRs */ mov 0x290(%rsp),%rbx mov 0x298(%rsp),%r12 mov 0x2a0(%rsp),%r13 mov 0x2a8(%rsp),%r14 mov 0x2b0(%rsp),%r15 //* Restore Stack Pointer */ add $0x2b8,%rsp pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 pxor %xmm3,%xmm3 pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 //* Return stack burn depth */ mov $0x2b8,%rax .Lnowork: {$IF DEFINED(WIN64)} popq %rdi popq %rsi {$ENDIF} retq //* // Binary Data //* .balign 16 //* Mask for byte-swapping a couple of qwords in an XMM register using (v)pshufb. */ .LXMM_QWORD_BSWAP: .quad 0x0001020304050607, 0x08090a0b0c0d0e0f //* K[t] used in SHA512 hashing */ .LK512_0: .quad 0x428a2f98d728ae22,0x7137449123ef65cd .LK512_1: .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc .LK512_2: .quad 0x3956c25bf348b538,0x59f111f1b605d019 .LK512_3: .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 .LK512_4: .quad 0xd807aa98a3030242,0x12835b0145706fbe .LK512_5: .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 .LK512_6: .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 .LK512_7: .quad 0x9bdc06a725c71235,0xc19bf174cf692694 .LK512_8: .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 .LK512_9: .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 .LK512_10: .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 .LK512_11: .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 .LK512_12: .quad 0x983e5152ee66dfab,0xa831c66d2db43210 .LK512_13: .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 .LK512_14: .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 .LK512_15: .quad 0x06ca6351e003826f,0x142929670a0e6e70 .LK512_16: .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 .LK512_17: .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df .LK512_18: .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 .LK512_19: .quad 0x81c2c92e47edaee6,0x92722c851482353b .LK512_20: .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 .LK512_21: .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 .LK512_22: .quad 0xd192e819d6ef5218,0xd69906245565a910 .LK512_23: .quad 0xf40e35855771202a,0x106aa07032bbd1b8 .LK512_24: .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 .LK512_25: .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 .LK512_26: .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb .LK512_27: .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 .LK512_28: .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 .LK512_29: .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec .LK512_30: .quad 0x90befffa23631e28,0xa4506cebde82bde9 .LK512_31: .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b .LK512_32: .quad 0xca273eceea26619c,0xd186b8c721c0c207 .LK512_33: .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 .LK512_34: .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 .LK512_35: .quad 0x113f9804bef90dae,0x1b710b35131c471b .LK512_36: .quad 0x28db77f523047d84,0x32caab7b40c72493 .LK512_37: .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c .LK512_38: .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a .LK512_39: .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 end; ��������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/sha256_sse.inc������������������������������������������0000644�0001750�0000144�00000061226�15104114162�022411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Fast SHA256-SSSE3 implementation Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) Converted to plain assembly by command "g++ -O3 -S sha256_sse4.c" Based on sha256_sse4.c, Copyright (C) 2017 The Bitcoin Core developers Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This is a translation to GCC extended asm syntax from YASM code by Intel (original description available at the bottom of this file). Note: original implementation was named as SHA256-SSE4. However, only SSSE3 is required. } procedure sha256_compress_sse(CurrentHash: PLongWord; HashBuffer: PByte; BufferCount: UIntPtr); assembler; nostackframe; asm pushq %r14 pushq %r13 pushq %r12 pushq %rbp pushq %rbx {$IF DEFINED(WIN64)} // Arguments: RCX, RDX, R8 pushq %rdi pushq %rsi {$ELSE IF DEFINED(UNIX)} // Arguments: RDI, RSI, RDX movq %rdx, %r8 movq %rsi, %rdx movq %rdi, %rcx {$ENDIF} subq $144, %rsp movaps %xmm6, 32(%rsp) movaps %xmm7, 48(%rsp) movaps %xmm8, 64(%rsp) movaps %xmm9, 80(%rsp) movaps %xmm10, 96(%rsp) movaps %xmm11, 112(%rsp) movaps %xmm12, 128(%rsp) // APP shl $0x6,%r8 je .Ldone_hash_22 add %rdx,%r8 mov %r8,(%rsp) mov (%rcx),%eax mov 0x4(%rcx),%r9d mov 0x8(%rcx),%r10d mov 0xc(%rcx),%r11d mov 0x10(%rcx),%r8d mov 0x14(%rcx),%ebx mov 0x18(%rcx),%esi mov 0x1c(%rcx),%edi movdqa .LFLIP_MASK(%rip),%xmm12 movdqa .LSHUF_00BA(%rip),%xmm10 movdqa .LSHUF_DC00(%rip),%xmm11 .Lloop0_22: lea .LK256(%rip),%r14 movdqu (%rdx),%xmm4 pshufb %xmm12,%xmm4 movdqu 0x10(%rdx),%xmm5 pshufb %xmm12,%xmm5 movdqu 0x20(%rdx),%xmm6 pshufb %xmm12,%xmm6 movdqu 0x30(%rdx),%xmm7 pshufb %xmm12,%xmm7 mov %rdx,8(%rsp) mov $3,%rdx .Lloop1_22: movdqa 0x0(%r14),%xmm9 paddd %xmm4,%xmm9 movdqa %xmm9,16(%rsp) movdqa %xmm7,%xmm0 mov %r8d,%ebp ror $0xe,%ebp mov %eax,%r12d palignr $0x4,%xmm6,%xmm0 ror $0x9,%r12d xor %r8d,%ebp mov %ebx,%r13d ror $0x5,%ebp movdqa %xmm5,%xmm1 xor %eax,%r12d xor %esi,%r13d paddd %xmm4,%xmm0 xor %r8d,%ebp and %r8d,%r13d ror $0xb,%r12d palignr $0x4,%xmm4,%xmm1 xor %eax,%r12d ror $0x6,%ebp xor %esi,%r13d movdqa %xmm1,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 16(%rsp),%r13d movdqa %xmm1,%xmm3 mov %eax,%ebp add %r13d,%edi mov %eax,%r13d pslld $0x19,%xmm1 or %r10d,%ebp add %edi,%r11d and %r10d,%r13d psrld $0x7,%xmm2 and %r9d,%ebp add %r12d,%edi por %xmm2,%xmm1 or %r13d,%ebp add %ebp,%edi movdqa %xmm3,%xmm2 mov %r11d,%ebp mov %edi,%r12d movdqa %xmm3,%xmm8 ror $0xe,%ebp xor %r11d,%ebp mov %r8d,%r13d ror $0x9,%r12d pslld $0xe,%xmm3 xor %edi,%r12d ror $0x5,%ebp xor %ebx,%r13d psrld $0x12,%xmm2 ror $0xb,%r12d xor %r11d,%ebp and %r11d,%r13d ror $0x6,%ebp pxor %xmm3,%xmm1 xor %edi,%r12d xor %ebx,%r13d psrld $0x3,%xmm8 add %ebp,%r13d add 4+16(%rsp),%r13d ror $0x2,%r12d pxor %xmm2,%xmm1 mov %edi,%ebp add %r13d,%esi mov %edi,%r13d pxor %xmm8,%xmm1 or %r9d,%ebp add %esi,%r10d and %r9d,%r13d pshufd $0xfa,%xmm7,%xmm2 and %eax,%ebp add %r12d,%esi paddd %xmm1,%xmm0 or %r13d,%ebp add %ebp,%esi movdqa %xmm2,%xmm3 mov %r10d,%ebp mov %esi,%r12d ror $0xe,%ebp movdqa %xmm2,%xmm8 xor %r10d,%ebp ror $0x9,%r12d mov %r11d,%r13d xor %esi,%r12d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %r8d,%r13d psrlq $0x13,%xmm3 xor %r10d,%ebp and %r10d,%r13d psrld $0xa,%xmm8 ror $0xb,%r12d xor %esi,%r12d xor %r8d,%r13d ror $0x6,%ebp pxor %xmm3,%xmm2 add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d pxor %xmm2,%xmm8 mov %esi,%ebp add %r13d,%ebx mov %esi,%r13d pshufb %xmm10,%xmm8 or %eax,%ebp add %ebx,%r9d and %eax,%r13d paddd %xmm8,%xmm0 and %edi,%ebp add %r12d,%ebx pshufd $0x50,%xmm0,%xmm2 or %r13d,%ebp add %ebp,%ebx movdqa %xmm2,%xmm3 mov %r9d,%ebp ror $0xe,%ebp mov %ebx,%r12d movdqa %xmm2,%xmm4 ror $0x9,%r12d xor %r9d,%ebp mov %r10d,%r13d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %ebx,%r12d xor %r11d,%r13d psrlq $0x13,%xmm3 xor %r9d,%ebp and %r9d,%r13d ror $0xb,%r12d psrld $0xa,%xmm4 xor %ebx,%r12d ror $0x6,%ebp xor %r11d,%r13d pxor %xmm3,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 12+16(%rsp),%r13d pxor %xmm2,%xmm4 mov %ebx,%ebp add %r13d,%r8d mov %ebx,%r13d pshufb %xmm11,%xmm4 or %edi,%ebp add %r8d,%eax and %edi,%r13d paddd %xmm0,%xmm4 and %esi,%ebp add %r12d,%r8d or %r13d,%ebp add %ebp,%r8d movdqa 0x10(%r14),%xmm9 paddd %xmm5,%xmm9 movdqa %xmm9,16(%rsp) movdqa %xmm4,%xmm0 mov %eax,%ebp ror $0xe,%ebp mov %r8d,%r12d palignr $0x4,%xmm7,%xmm0 ror $0x9,%r12d xor %eax,%ebp mov %r9d,%r13d ror $0x5,%ebp movdqa %xmm6,%xmm1 xor %r8d,%r12d xor %r10d,%r13d paddd %xmm5,%xmm0 xor %eax,%ebp and %eax,%r13d ror $0xb,%r12d palignr $0x4,%xmm5,%xmm1 xor %r8d,%r12d ror $0x6,%ebp xor %r10d,%r13d movdqa %xmm1,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 16(%rsp),%r13d movdqa %xmm1,%xmm3 mov %r8d,%ebp add %r13d,%r11d mov %r8d,%r13d pslld $0x19,%xmm1 or %esi,%ebp add %r11d,%edi and %esi,%r13d psrld $0x7,%xmm2 and %ebx,%ebp add %r12d,%r11d por %xmm2,%xmm1 or %r13d,%ebp add %ebp,%r11d movdqa %xmm3,%xmm2 mov %edi,%ebp mov %r11d,%r12d movdqa %xmm3,%xmm8 ror $0xe,%ebp xor %edi,%ebp mov %eax,%r13d ror $0x9,%r12d pslld $0xe,%xmm3 xor %r11d,%r12d ror $0x5,%ebp xor %r9d,%r13d psrld $0x12,%xmm2 ror $0xb,%r12d xor %edi,%ebp and %edi,%r13d ror $0x6,%ebp pxor %xmm3,%xmm1 xor %r11d,%r12d xor %r9d,%r13d psrld $0x3,%xmm8 add %ebp,%r13d add 4+16(%rsp),%r13d ror $0x2,%r12d pxor %xmm2,%xmm1 mov %r11d,%ebp add %r13d,%r10d mov %r11d,%r13d pxor %xmm8,%xmm1 or %ebx,%ebp add %r10d,%esi and %ebx,%r13d pshufd $0xfa,%xmm4,%xmm2 and %r8d,%ebp add %r12d,%r10d paddd %xmm1,%xmm0 or %r13d,%ebp add %ebp,%r10d movdqa %xmm2,%xmm3 mov %esi,%ebp mov %r10d,%r12d ror $0xe,%ebp movdqa %xmm2,%xmm8 xor %esi,%ebp ror $0x9,%r12d mov %edi,%r13d xor %r10d,%r12d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %eax,%r13d psrlq $0x13,%xmm3 xor %esi,%ebp and %esi,%r13d psrld $0xa,%xmm8 ror $0xb,%r12d xor %r10d,%r12d xor %eax,%r13d ror $0x6,%ebp pxor %xmm3,%xmm2 add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d pxor %xmm2,%xmm8 mov %r10d,%ebp add %r13d,%r9d mov %r10d,%r13d pshufb %xmm10,%xmm8 or %r8d,%ebp add %r9d,%ebx and %r8d,%r13d paddd %xmm8,%xmm0 and %r11d,%ebp add %r12d,%r9d pshufd $0x50,%xmm0,%xmm2 or %r13d,%ebp add %ebp,%r9d movdqa %xmm2,%xmm3 mov %ebx,%ebp ror $0xe,%ebp mov %r9d,%r12d movdqa %xmm2,%xmm5 ror $0x9,%r12d xor %ebx,%ebp mov %esi,%r13d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %r9d,%r12d xor %edi,%r13d psrlq $0x13,%xmm3 xor %ebx,%ebp and %ebx,%r13d ror $0xb,%r12d psrld $0xa,%xmm5 xor %r9d,%r12d ror $0x6,%ebp xor %edi,%r13d pxor %xmm3,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 12+16(%rsp),%r13d pxor %xmm2,%xmm5 mov %r9d,%ebp add %r13d,%eax mov %r9d,%r13d pshufb %xmm11,%xmm5 or %r11d,%ebp add %eax,%r8d and %r11d,%r13d paddd %xmm0,%xmm5 and %r10d,%ebp add %r12d,%eax or %r13d,%ebp add %ebp,%eax movdqa 0x20(%r14),%xmm9 paddd %xmm6,%xmm9 movdqa %xmm9,16(%rsp) movdqa %xmm5,%xmm0 mov %r8d,%ebp ror $0xe,%ebp mov %eax,%r12d palignr $0x4,%xmm4,%xmm0 ror $0x9,%r12d xor %r8d,%ebp mov %ebx,%r13d ror $0x5,%ebp movdqa %xmm7,%xmm1 xor %eax,%r12d xor %esi,%r13d paddd %xmm6,%xmm0 xor %r8d,%ebp and %r8d,%r13d ror $0xb,%r12d palignr $0x4,%xmm6,%xmm1 xor %eax,%r12d ror $0x6,%ebp xor %esi,%r13d movdqa %xmm1,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 16(%rsp),%r13d movdqa %xmm1,%xmm3 mov %eax,%ebp add %r13d,%edi mov %eax,%r13d pslld $0x19,%xmm1 or %r10d,%ebp add %edi,%r11d and %r10d,%r13d psrld $0x7,%xmm2 and %r9d,%ebp add %r12d,%edi por %xmm2,%xmm1 or %r13d,%ebp add %ebp,%edi movdqa %xmm3,%xmm2 mov %r11d,%ebp mov %edi,%r12d movdqa %xmm3,%xmm8 ror $0xe,%ebp xor %r11d,%ebp mov %r8d,%r13d ror $0x9,%r12d pslld $0xe,%xmm3 xor %edi,%r12d ror $0x5,%ebp xor %ebx,%r13d psrld $0x12,%xmm2 ror $0xb,%r12d xor %r11d,%ebp and %r11d,%r13d ror $0x6,%ebp pxor %xmm3,%xmm1 xor %edi,%r12d xor %ebx,%r13d psrld $0x3,%xmm8 add %ebp,%r13d add 4+16(%rsp),%r13d ror $0x2,%r12d pxor %xmm2,%xmm1 mov %edi,%ebp add %r13d,%esi mov %edi,%r13d pxor %xmm8,%xmm1 or %r9d,%ebp add %esi,%r10d and %r9d,%r13d pshufd $0xfa,%xmm5,%xmm2 and %eax,%ebp add %r12d,%esi paddd %xmm1,%xmm0 or %r13d,%ebp add %ebp,%esi movdqa %xmm2,%xmm3 mov %r10d,%ebp mov %esi,%r12d ror $0xe,%ebp movdqa %xmm2,%xmm8 xor %r10d,%ebp ror $0x9,%r12d mov %r11d,%r13d xor %esi,%r12d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %r8d,%r13d psrlq $0x13,%xmm3 xor %r10d,%ebp and %r10d,%r13d psrld $0xa,%xmm8 ror $0xb,%r12d xor %esi,%r12d xor %r8d,%r13d ror $0x6,%ebp pxor %xmm3,%xmm2 add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d pxor %xmm2,%xmm8 mov %esi,%ebp add %r13d,%ebx mov %esi,%r13d pshufb %xmm10,%xmm8 or %eax,%ebp add %ebx,%r9d and %eax,%r13d paddd %xmm8,%xmm0 and %edi,%ebp add %r12d,%ebx pshufd $0x50,%xmm0,%xmm2 or %r13d,%ebp add %ebp,%ebx movdqa %xmm2,%xmm3 mov %r9d,%ebp ror $0xe,%ebp mov %ebx,%r12d movdqa %xmm2,%xmm6 ror $0x9,%r12d xor %r9d,%ebp mov %r10d,%r13d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %ebx,%r12d xor %r11d,%r13d psrlq $0x13,%xmm3 xor %r9d,%ebp and %r9d,%r13d ror $0xb,%r12d psrld $0xa,%xmm6 xor %ebx,%r12d ror $0x6,%ebp xor %r11d,%r13d pxor %xmm3,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 12+16(%rsp),%r13d pxor %xmm2,%xmm6 mov %ebx,%ebp add %r13d,%r8d mov %ebx,%r13d pshufb %xmm11,%xmm6 or %edi,%ebp add %r8d,%eax and %edi,%r13d paddd %xmm0,%xmm6 and %esi,%ebp add %r12d,%r8d or %r13d,%ebp add %ebp,%r8d movdqa 0x30(%r14),%xmm9 paddd %xmm7,%xmm9 movdqa %xmm9,16(%rsp) add $0x40,%r14 movdqa %xmm6,%xmm0 mov %eax,%ebp ror $0xe,%ebp mov %r8d,%r12d palignr $0x4,%xmm5,%xmm0 ror $0x9,%r12d xor %eax,%ebp mov %r9d,%r13d ror $0x5,%ebp movdqa %xmm4,%xmm1 xor %r8d,%r12d xor %r10d,%r13d paddd %xmm7,%xmm0 xor %eax,%ebp and %eax,%r13d ror $0xb,%r12d palignr $0x4,%xmm7,%xmm1 xor %r8d,%r12d ror $0x6,%ebp xor %r10d,%r13d movdqa %xmm1,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 16(%rsp),%r13d movdqa %xmm1,%xmm3 mov %r8d,%ebp add %r13d,%r11d mov %r8d,%r13d pslld $0x19,%xmm1 or %esi,%ebp add %r11d,%edi and %esi,%r13d psrld $0x7,%xmm2 and %ebx,%ebp add %r12d,%r11d por %xmm2,%xmm1 or %r13d,%ebp add %ebp,%r11d movdqa %xmm3,%xmm2 mov %edi,%ebp mov %r11d,%r12d movdqa %xmm3,%xmm8 ror $0xe,%ebp xor %edi,%ebp mov %eax,%r13d ror $0x9,%r12d pslld $0xe,%xmm3 xor %r11d,%r12d ror $0x5,%ebp xor %r9d,%r13d psrld $0x12,%xmm2 ror $0xb,%r12d xor %edi,%ebp and %edi,%r13d ror $0x6,%ebp pxor %xmm3,%xmm1 xor %r11d,%r12d xor %r9d,%r13d psrld $0x3,%xmm8 add %ebp,%r13d add 4+16(%rsp),%r13d ror $0x2,%r12d pxor %xmm2,%xmm1 mov %r11d,%ebp add %r13d,%r10d mov %r11d,%r13d pxor %xmm8,%xmm1 or %ebx,%ebp add %r10d,%esi and %ebx,%r13d pshufd $0xfa,%xmm6,%xmm2 and %r8d,%ebp add %r12d,%r10d paddd %xmm1,%xmm0 or %r13d,%ebp add %ebp,%r10d movdqa %xmm2,%xmm3 mov %esi,%ebp mov %r10d,%r12d ror $0xe,%ebp movdqa %xmm2,%xmm8 xor %esi,%ebp ror $0x9,%r12d mov %edi,%r13d xor %r10d,%r12d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %eax,%r13d psrlq $0x13,%xmm3 xor %esi,%ebp and %esi,%r13d psrld $0xa,%xmm8 ror $0xb,%r12d xor %r10d,%r12d xor %eax,%r13d ror $0x6,%ebp pxor %xmm3,%xmm2 add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d pxor %xmm2,%xmm8 mov %r10d,%ebp add %r13d,%r9d mov %r10d,%r13d pshufb %xmm10,%xmm8 or %r8d,%ebp add %r9d,%ebx and %r8d,%r13d paddd %xmm8,%xmm0 and %r11d,%ebp add %r12d,%r9d pshufd $0x50,%xmm0,%xmm2 or %r13d,%ebp add %ebp,%r9d movdqa %xmm2,%xmm3 mov %ebx,%ebp ror $0xe,%ebp mov %r9d,%r12d movdqa %xmm2,%xmm7 ror $0x9,%r12d xor %ebx,%ebp mov %esi,%r13d ror $0x5,%ebp psrlq $0x11,%xmm2 xor %r9d,%r12d xor %edi,%r13d psrlq $0x13,%xmm3 xor %ebx,%ebp and %ebx,%r13d ror $0xb,%r12d psrld $0xa,%xmm7 xor %r9d,%r12d ror $0x6,%ebp xor %edi,%r13d pxor %xmm3,%xmm2 ror $0x2,%r12d add %ebp,%r13d add 12+16(%rsp),%r13d pxor %xmm2,%xmm7 mov %r9d,%ebp add %r13d,%eax mov %r9d,%r13d pshufb %xmm11,%xmm7 or %r11d,%ebp add %eax,%r8d and %r11d,%r13d paddd %xmm0,%xmm7 and %r10d,%ebp add %r12d,%eax or %r13d,%ebp add %ebp,%eax sub $0x1,%rdx jne .Lloop1_22 mov $0x2,%rdx .Lloop2_22: paddd 0x0(%r14),%xmm4 movdqa %xmm4,16(%rsp) mov %r8d,%ebp ror $0xe,%ebp mov %eax,%r12d xor %r8d,%ebp ror $0x9,%r12d mov %ebx,%r13d xor %eax,%r12d ror $0x5,%ebp xor %esi,%r13d xor %r8d,%ebp ror $0xb,%r12d and %r8d,%r13d xor %eax,%r12d ror $0x6,%ebp xor %esi,%r13d add %ebp,%r13d ror $0x2,%r12d add 16(%rsp),%r13d mov %eax,%ebp add %r13d,%edi mov %eax,%r13d or %r10d,%ebp add %edi,%r11d and %r10d,%r13d and %r9d,%ebp add %r12d,%edi or %r13d,%ebp add %ebp,%edi mov %r11d,%ebp ror $0xe,%ebp mov %edi,%r12d xor %r11d,%ebp ror $0x9,%r12d mov %r8d,%r13d xor %edi,%r12d ror $0x5,%ebp xor %ebx,%r13d xor %r11d,%ebp ror $0xb,%r12d and %r11d,%r13d xor %edi,%r12d ror $0x6,%ebp xor %ebx,%r13d add %ebp,%r13d ror $0x2,%r12d add 4+16(%rsp),%r13d mov %edi,%ebp add %r13d,%esi mov %edi,%r13d or %r9d,%ebp add %esi,%r10d and %r9d,%r13d and %eax,%ebp add %r12d,%esi or %r13d,%ebp add %ebp,%esi mov %r10d,%ebp ror $0xe,%ebp mov %esi,%r12d xor %r10d,%ebp ror $0x9,%r12d mov %r11d,%r13d xor %esi,%r12d ror $0x5,%ebp xor %r8d,%r13d xor %r10d,%ebp ror $0xb,%r12d and %r10d,%r13d xor %esi,%r12d ror $0x6,%ebp xor %r8d,%r13d add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d mov %esi,%ebp add %r13d,%ebx mov %esi,%r13d or %eax,%ebp add %ebx,%r9d and %eax,%r13d and %edi,%ebp add %r12d,%ebx or %r13d,%ebp add %ebp,%ebx mov %r9d,%ebp ror $0xe,%ebp mov %ebx,%r12d xor %r9d,%ebp ror $0x9,%r12d mov %r10d,%r13d xor %ebx,%r12d ror $0x5,%ebp xor %r11d,%r13d xor %r9d,%ebp ror $0xb,%r12d and %r9d,%r13d xor %ebx,%r12d ror $0x6,%ebp xor %r11d,%r13d add %ebp,%r13d ror $0x2,%r12d add 12+16(%rsp),%r13d mov %ebx,%ebp add %r13d,%r8d mov %ebx,%r13d or %edi,%ebp add %r8d,%eax and %edi,%r13d and %esi,%ebp add %r12d,%r8d or %r13d,%ebp add %ebp,%r8d paddd 0x10(%r14),%xmm5 movdqa %xmm5,16(%rsp) add $0x20,%r14 mov %eax,%ebp ror $0xe,%ebp mov %r8d,%r12d xor %eax,%ebp ror $0x9,%r12d mov %r9d,%r13d xor %r8d,%r12d ror $0x5,%ebp xor %r10d,%r13d xor %eax,%ebp ror $0xb,%r12d and %eax,%r13d xor %r8d,%r12d ror $0x6,%ebp xor %r10d,%r13d add %ebp,%r13d ror $0x2,%r12d add 16(%rsp),%r13d mov %r8d,%ebp add %r13d,%r11d mov %r8d,%r13d or %esi,%ebp add %r11d,%edi and %esi,%r13d and %ebx,%ebp add %r12d,%r11d or %r13d,%ebp add %ebp,%r11d mov %edi,%ebp ror $0xe,%ebp mov %r11d,%r12d xor %edi,%ebp ror $0x9,%r12d mov %eax,%r13d xor %r11d,%r12d ror $0x5,%ebp xor %r9d,%r13d xor %edi,%ebp ror $0xb,%r12d and %edi,%r13d xor %r11d,%r12d ror $0x6,%ebp xor %r9d,%r13d add %ebp,%r13d ror $0x2,%r12d add 4+16(%rsp),%r13d mov %r11d,%ebp add %r13d,%r10d mov %r11d,%r13d or %ebx,%ebp add %r10d,%esi and %ebx,%r13d and %r8d,%ebp add %r12d,%r10d or %r13d,%ebp add %ebp,%r10d mov %esi,%ebp ror $0xe,%ebp mov %r10d,%r12d xor %esi,%ebp ror $0x9,%r12d mov %edi,%r13d xor %r10d,%r12d ror $0x5,%ebp xor %eax,%r13d xor %esi,%ebp ror $0xb,%r12d and %esi,%r13d xor %r10d,%r12d ror $0x6,%ebp xor %eax,%r13d add %ebp,%r13d ror $0x2,%r12d add 8+16(%rsp),%r13d mov %r10d,%ebp add %r13d,%r9d mov %r10d,%r13d or %r8d,%ebp add %r9d,%ebx and %r8d,%r13d and %r11d,%ebp add %r12d,%r9d or %r13d,%ebp add %ebp,%r9d mov %ebx,%ebp ror $0xe,%ebp mov %r9d,%r12d xor %ebx,%ebp ror $0x9,%r12d mov %esi,%r13d xor %r9d,%r12d ror $0x5,%ebp xor %edi,%r13d xor %ebx,%ebp ror $0xb,%r12d and %ebx,%r13d xor %r9d,%r12d ror $0x6,%ebp xor %edi,%r13d add %ebp,%r13d ror $0x2,%r12d add 12+16(%rsp),%r13d mov %r9d,%ebp add %r13d,%eax mov %r9d,%r13d or %r11d,%ebp add %eax,%r8d and %r11d,%r13d and %r10d,%ebp add %r12d,%eax or %r13d,%ebp add %ebp,%eax movdqa %xmm6,%xmm4 movdqa %xmm7,%xmm5 sub $0x1,%rdx jne .Lloop2_22 add (%rcx),%eax mov %eax,(%rcx) add 0x4(%rcx),%r9d mov %r9d,0x4(%rcx) add 0x8(%rcx),%r10d mov %r10d,0x8(%rcx) add 0xc(%rcx),%r11d mov %r11d,0xc(%rcx) add 0x10(%rcx),%r8d mov %r8d,0x10(%rcx) add 0x14(%rcx),%ebx mov %ebx,0x14(%rcx) add 0x18(%rcx),%esi mov %esi,0x18(%rcx) add 0x1c(%rcx),%edi mov %edi,0x1c(%rcx) mov 8(%rsp),%rdx add $0x40,%rdx cmp (%rsp),%rdx jne .Lloop0_22 .Ldone_hash_22: // NO_APP movaps 32(%rsp), %xmm6 movaps 48(%rsp), %xmm7 movaps 64(%rsp), %xmm8 movaps 80(%rsp), %xmm9 movaps 96(%rsp), %xmm10 movaps 112(%rsp), %xmm11 movaps 128(%rsp), %xmm12 addq $144, %rsp {$IF DEFINED(WIN64)} popq %rsi popq %rdi {$ENDIF} popq %rbx popq %rbp popq %r12 popq %r13 popq %r14 ret // .section .rdata,"dr" .balign 16 .LSHUF_DC00: .long -1 .long -1 .long 50462976 .long 185207048 .balign 16 .LSHUF_00BA: .long 50462976 .long 185207048 .long -1 .long -1 .balign 16 .LFLIP_MASK: .long 66051 .long 67438087 .long 134810123 .long 202182159 .balign 16 .LK256: .long 1116352408 .long 1899447441 .long -1245643825 .long -373957723 .long 961987163 .long 1508970993 .long -1841331548 .long -1424204075 .long -670586216 .long 310598401 .long 607225278 .long 1426881987 .long 1925078388 .long -2132889090 .long -1680079193 .long -1046744716 .long -459576895 .long -272742522 .long 264347078 .long 604807628 .long 770255983 .long 1249150122 .long 1555081692 .long 1996064986 .long -1740746414 .long -1473132947 .long -1341970488 .long -1084653625 .long -958395405 .long -710438585 .long 113926993 .long 338241895 .long 666307205 .long 773529912 .long 1294757372 .long 1396182291 .long 1695183700 .long 1986661051 .long -2117940946 .long -1838011259 .long -1564481375 .long -1474664885 .long -1035236496 .long -949202525 .long -778901479 .long -694614492 .long -200395387 .long 275423344 .long 430227734 .long 506948616 .long 659060556 .long 883997877 .long 958139571 .long 1322822218 .long 1537002063 .long 1747873779 .long 1955562222 .long 2024104815 .long -2067236844 .long -1933114872 .long -1866530822 .long -1538233109 .long -1090935817 .long -965641998 end; { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2012, Intel Corporation ; ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are ; met: ; ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the ; distribution. ; ; * Neither the name of the Intel Corporation nor the names of its ; contributors may be used to endorse or promote products derived from ; this software without specific prior written permission. ; ; ; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR ; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Example YASM command lines: ; Windows: yasm -Xvc -f x64 -rnasm -pnasm -o sha256_sse4.obj -g cv8 sha256_sse4.asm ; Linux: yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o sha256_sse4.o sha256_sse4.asm ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; This code is described in an Intel White-Paper: ; "Fast SHA-256 Implementations on Intel Architecture Processors" ; ; To find it, surf to http://www.intel.com/p/en_US/embedded ; and search for that title. ; The paper is expected to be released roughly at the end of April, 2012 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This code schedules 1 blocks at a time, with 4 lanes per block ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/sha256_avx.inc������������������������������������������0000644�0001750�0000144�00000114467�15104114162�022423� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2012, Intel Corporation ; ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are ; met: ; ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the ; distribution. ; ; * Neither the name of the Intel Corporation nor the names of its ; contributors may be used to endorse or promote products derived from ; this software without specific prior written permission. ; ; ; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR ; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; This code is described in an Intel White-Paper: ; "Fast SHA-256 Implementations on Intel Architecture Processors" ; ; To find it, surf to http://www.intel.com/p/en_US/embedded ; and search for that title. ; The paper is expected to be released roughly at the end of April, 2012 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This code schedules 2 blocks at a time, with 4 lanes per block ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */ /* * Conversion to GAS assembly and integration to libgcrypt * by Jussi Kivilinna <jussi.kivilinna@iki.fi> */ } {$CODEALIGN CONSTMIN=32} const _BYTE_FLIP_MASK: array [0..7] of UInt32 = (66051, 67438087, 134810123, 202182159, 66051, 67438087, 134810123, 202182159); _SHUF_00BA: array [0..7] of UInt32 = (50462976, 185207048, $FFFFFFFF, $FFFFFFFF, 50462976, 185207048, $FFFFFFFF, $FFFFFFFF); _SHUF_DC00: array [0..7] of UInt32 = ($FFFFFFFF, $FFFFFFFF, 50462976, 185207048, $FFFFFFFF, $FFFFFFFF, 50462976, 185207048); procedure sha256_compress_avx(CurrentHash: PLongWord; HashBuffer: PByte; BufferCount: UIntPtr); assembler; nostackframe; // UNIX RDI, RSI, RDX // WIN64: RCX, RDX, R8 asm .balign 32 {$IF DEFINED(WIN64)} movq %rsi, 16(%rsp) movq %rdi, 24(%rsp) subq $168, %rsp movdqa %xmm6, (%rsp) movdqa %xmm7, 16(%rsp) movdqa %xmm8, 32(%rsp) movdqa %xmm9, 48(%rsp) movdqa %xmm10, 64(%rsp) movdqa %xmm11, 80(%rsp) movdqa %xmm12, 96(%rsp) movdqa %xmm13, 112(%rsp) movdqa %xmm14, 128(%rsp) movdqa %xmm15, 144(%rsp) movq %rcx, %rdi movq %rdx, %rsi movq %r8, %rdx {$ENDIF} xchg %rdi, %rsi xor %eax,%eax cmp $0x0,%rdx je .LB163f push %rbx push %rbp push %r12 push %r13 push %r14 push %r15 vzeroupper vmovdqa _BYTE_FLIP_MASK(%rip),%ymm13 vmovdqa _SHUF_00BA(%rip),%ymm10 vmovdqa _SHUF_DC00(%rip),%ymm12 mov %rsp,%rax sub $0x220,%rsp and $0xffffffffffffffc0,%rsp mov %rax,0x218(%rsp) shl $0x6,%rdx lea -0x40(%rdx,%rdi,1),%rdx mov %rdx,0x200(%rsp) cmp %rdi,%rdx mov (%rsi),%eax mov 0x4(%rsi),%ebx mov 0x8(%rsi),%ecx mov 0xc(%rsi),%r8d mov 0x10(%rsi),%edx mov 0x14(%rsi),%r9d mov 0x18(%rsi),%r10d mov 0x1c(%rsi),%r11d mov %rsi,0x210(%rsp) je .LB1535 .LB7b: lea .LK256(%rip),%rbp vmovdqu (%rdi),%ymm0 vmovdqu 0x20(%rdi),%ymm1 vmovdqu 0x40(%rdi),%ymm2 vmovdqu 0x60(%rdi),%ymm3 vpshufb %ymm13,%ymm0,%ymm0 vpshufb %ymm13,%ymm1,%ymm1 vpshufb %ymm13,%ymm2,%ymm2 vpshufb %ymm13,%ymm3,%ymm3 vperm2i128 $0x20,%ymm2,%ymm0,%ymm4 vperm2i128 $0x31,%ymm2,%ymm0,%ymm5 vperm2i128 $0x20,%ymm3,%ymm1,%ymm6 vperm2i128 $0x31,%ymm3,%ymm1,%ymm7 .LBc1: add $0x40,%rdi mov %rdi,0x208(%rsp) xor %rsi,%rsi vpaddd 0x0(%rbp),%ymm4,%ymm9 vmovdqa %ymm9,(%rsp) vpaddd 0x20(%rbp),%ymm5,%ymm9 vmovdqa %ymm9,0x20(%rsp) vpaddd 0x40(%rbp),%ymm6,%ymm9 vmovdqa %ymm9,0x40(%rsp) vpaddd 0x60(%rbp),%ymm7,%ymm9 vmovdqa %ymm9,0x60(%rsp) .balign 16 .LB100: vpalignr $0x4,%ymm6,%ymm7,%ymm0 vpaddd %ymm4,%ymm0,%ymm0 vpalignr $0x4,%ymm4,%ymm5,%ymm1 vpsrld $0x7,%ymm1,%ymm2 vpslld $0x19,%ymm1,%ymm3 vpor %ymm2,%ymm3,%ymm3 vpsrld $0x12,%ymm1,%ymm2 mov %edx,%edi add (%rsp,%rsi,1),%r11d and %r9d,%edi rorx $0x19,%edx,%r13d rorx $0xb,%edx,%r14d lea (%r11d,%edi,1),%r11d andn %r10d,%edx,%edi rorx $0xd,%eax,%r12d xor %r14d,%r13d lea (%r11d,%edi,1),%r11d rorx $0x16,%eax,%r15d rorx $0x6,%edx,%r14d mov %eax,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ebx,%edi lea (%r11d,%r13d,1),%r11d mov %eax,%r13d rorx $0x2,%eax,%r15d add %r11d,%r8d and %ecx,%edi xor %r15d,%r12d lea (%r11d,%edi,1),%r11d lea (%r11d,%r12d,1),%r11d and %ebx,%r13d lea (%r11d,%r13d,1),%r11d vpsrld $0x3,%ymm1,%ymm8 vpslld $0xe,%ymm1,%ymm1 vpxor %ymm1,%ymm3,%ymm3 vpxor %ymm2,%ymm3,%ymm3 vpxor %ymm8,%ymm3,%ymm1 vpshufd $0xfa,%ymm7,%ymm2 vpaddd %ymm1,%ymm0,%ymm0 vpsrld $0xa,%ymm2,%ymm8 mov %r8d,%edi add 0x4(%rsp,%rsi,1),%r10d and %edx,%edi rorx $0x19,%r8d,%r13d rorx $0xb,%r8d,%r14d lea (%r10d,%edi,1),%r10d andn %r9d,%r8d,%edi rorx $0xd,%r11d,%r12d xor %r14d,%r13d lea (%r10d,%edi,1),%r10d rorx $0x16,%r11d,%r15d rorx $0x6,%r8d,%r14d mov %r11d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %eax,%edi lea (%r10d,%r13d,1),%r10d mov %r11d,%r13d rorx $0x2,%r11d,%r15d add %r10d,%ecx and %ebx,%edi xor %r15d,%r12d lea (%r10d,%edi,1),%r10d lea (%r10d,%r12d,1),%r10d and %eax,%r13d lea (%r10d,%r13d,1),%r10d vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm8,%ymm8 vpshufb %ymm10,%ymm8,%ymm8 vpaddd %ymm8,%ymm0,%ymm0 vpshufd $0x50,%ymm0,%ymm2 mov %ecx,%edi add 0x8(%rsp,%rsi,1),%r9d and %r8d,%edi rorx $0x19,%ecx,%r13d rorx $0xb,%ecx,%r14d lea (%r9d,%edi,1),%r9d andn %edx,%ecx,%edi rorx $0xd,%r10d,%r12d xor %r14d,%r13d lea (%r9d,%edi,1),%r9d rorx $0x16,%r10d,%r15d rorx $0x6,%ecx,%r14d mov %r10d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r11d,%edi lea (%r9d,%r13d,1),%r9d mov %r10d,%r13d rorx $0x2,%r10d,%r15d add %r9d,%ebx and %eax,%edi xor %r15d,%r12d lea (%r9d,%edi,1),%r9d lea (%r9d,%r12d,1),%r9d and %r11d,%r13d lea (%r9d,%r13d,1),%r9d vpsrld $0xa,%ymm2,%ymm11 vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm11,%ymm11 vpshufb %ymm12,%ymm11,%ymm11 vpaddd %ymm0,%ymm11,%ymm4 vpaddd 0x80(%rbp,%rsi,1),%ymm4,%ymm9 mov %ebx,%edi add 0xc(%rsp,%rsi,1),%edx and %ecx,%edi rorx $0x19,%ebx,%r13d rorx $0xb,%ebx,%r14d lea (%edx,%edi,1),%edx andn %r8d,%ebx,%edi rorx $0xd,%r9d,%r12d xor %r14d,%r13d lea (%edx,%edi,1),%edx vmovdqa %ymm9,0x80(%rsp,%rsi,1) rorx $0x16,%r9d,%r15d rorx $0x6,%ebx,%r14d mov %r9d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r10d,%edi lea (%edx,%r13d,1),%edx mov %r9d,%r13d rorx $0x2,%r9d,%r15d add %edx,%eax and %r11d,%edi xor %r15d,%r12d lea (%edx,%edi,1),%edx lea (%edx,%r12d,1),%edx and %r10d,%r13d lea (%edx,%r13d,1),%edx vpalignr $0x4,%ymm7,%ymm4,%ymm0 vpaddd %ymm5,%ymm0,%ymm0 vpalignr $0x4,%ymm5,%ymm6,%ymm1 vpsrld $0x7,%ymm1,%ymm2 vpslld $0x19,%ymm1,%ymm3 vpor %ymm2,%ymm3,%ymm3 vpsrld $0x12,%ymm1,%ymm2 mov %eax,%edi add 0x20(%rsp,%rsi,1),%r8d and %ebx,%edi rorx $0x19,%eax,%r13d rorx $0xb,%eax,%r14d lea (%r8d,%edi,1),%r8d andn %ecx,%eax,%edi rorx $0xd,%edx,%r12d xor %r14d,%r13d lea (%r8d,%edi,1),%r8d rorx $0x16,%edx,%r15d rorx $0x6,%eax,%r14d mov %edx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r9d,%edi lea (%r8d,%r13d,1),%r8d mov %edx,%r13d rorx $0x2,%edx,%r15d add %r8d,%r11d and %r10d,%edi xor %r15d,%r12d lea (%r8d,%edi,1),%r8d lea (%r8d,%r12d,1),%r8d and %r9d,%r13d lea (%r8d,%r13d,1),%r8d vpsrld $0x3,%ymm1,%ymm8 vpslld $0xe,%ymm1,%ymm1 vpxor %ymm1,%ymm3,%ymm3 vpxor %ymm2,%ymm3,%ymm3 vpxor %ymm8,%ymm3,%ymm1 vpshufd $0xfa,%ymm4,%ymm2 vpaddd %ymm1,%ymm0,%ymm0 vpsrld $0xa,%ymm2,%ymm8 mov %r11d,%edi add 0x24(%rsp,%rsi,1),%ecx and %eax,%edi rorx $0x19,%r11d,%r13d rorx $0xb,%r11d,%r14d lea (%ecx,%edi,1),%ecx andn %ebx,%r11d,%edi rorx $0xd,%r8d,%r12d xor %r14d,%r13d lea (%ecx,%edi,1),%ecx rorx $0x16,%r8d,%r15d rorx $0x6,%r11d,%r14d mov %r8d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %edx,%edi lea (%ecx,%r13d,1),%ecx mov %r8d,%r13d rorx $0x2,%r8d,%r15d add %ecx,%r10d and %r9d,%edi xor %r15d,%r12d lea (%ecx,%edi,1),%ecx lea (%ecx,%r12d,1),%ecx and %edx,%r13d lea (%ecx,%r13d,1),%ecx vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm8,%ymm8 vpshufb %ymm10,%ymm8,%ymm8 vpaddd %ymm8,%ymm0,%ymm0 vpshufd $0x50,%ymm0,%ymm2 mov %r10d,%edi add 0x28(%rsp,%rsi,1),%ebx and %r11d,%edi rorx $0x19,%r10d,%r13d rorx $0xb,%r10d,%r14d lea (%ebx,%edi,1),%ebx andn %eax,%r10d,%edi rorx $0xd,%ecx,%r12d xor %r14d,%r13d lea (%ebx,%edi,1),%ebx rorx $0x16,%ecx,%r15d rorx $0x6,%r10d,%r14d mov %ecx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r8d,%edi lea (%ebx,%r13d,1),%ebx mov %ecx,%r13d rorx $0x2,%ecx,%r15d add %ebx,%r9d and %edx,%edi xor %r15d,%r12d lea (%ebx,%edi,1),%ebx lea (%ebx,%r12d,1),%ebx and %r8d,%r13d lea (%ebx,%r13d,1),%ebx vpsrld $0xa,%ymm2,%ymm11 vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm11,%ymm11 vpshufb %ymm12,%ymm11,%ymm11 vpaddd %ymm0,%ymm11,%ymm5 vpaddd 0xa0(%rbp,%rsi,1),%ymm5,%ymm9 mov %r9d,%edi add 0x2c(%rsp,%rsi,1),%eax and %r10d,%edi rorx $0x19,%r9d,%r13d rorx $0xb,%r9d,%r14d lea (%eax,%edi,1),%eax andn %r11d,%r9d,%edi rorx $0xd,%ebx,%r12d xor %r14d,%r13d lea (%eax,%edi,1),%eax vmovdqa %ymm9,0xa0(%rsp,%rsi,1) rorx $0x16,%ebx,%r15d rorx $0x6,%r9d,%r14d mov %ebx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ecx,%edi lea (%eax,%r13d,1),%eax mov %ebx,%r13d rorx $0x2,%ebx,%r15d add %eax,%edx and %r8d,%edi xor %r15d,%r12d lea (%eax,%edi,1),%eax lea (%eax,%r12d,1),%eax and %ecx,%r13d lea (%eax,%r13d,1),%eax vpalignr $0x4,%ymm4,%ymm5,%ymm0 vpaddd %ymm6,%ymm0,%ymm0 vpalignr $0x4,%ymm6,%ymm7,%ymm1 vpsrld $0x7,%ymm1,%ymm2 vpslld $0x19,%ymm1,%ymm3 vpor %ymm2,%ymm3,%ymm3 vpsrld $0x12,%ymm1,%ymm2 mov %edx,%edi add 0x40(%rsp,%rsi,1),%r11d and %r9d,%edi rorx $0x19,%edx,%r13d rorx $0xb,%edx,%r14d lea (%r11d,%edi,1),%r11d andn %r10d,%edx,%edi rorx $0xd,%eax,%r12d xor %r14d,%r13d lea (%r11d,%edi,1),%r11d rorx $0x16,%eax,%r15d rorx $0x6,%edx,%r14d mov %eax,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ebx,%edi lea (%r11d,%r13d,1),%r11d mov %eax,%r13d rorx $0x2,%eax,%r15d add %r11d,%r8d and %ecx,%edi xor %r15d,%r12d lea (%r11d,%edi,1),%r11d lea (%r11d,%r12d,1),%r11d and %ebx,%r13d lea (%r11d,%r13d,1),%r11d vpsrld $0x3,%ymm1,%ymm8 vpslld $0xe,%ymm1,%ymm1 vpxor %ymm1,%ymm3,%ymm3 vpxor %ymm2,%ymm3,%ymm3 vpxor %ymm8,%ymm3,%ymm1 vpshufd $0xfa,%ymm5,%ymm2 vpaddd %ymm1,%ymm0,%ymm0 vpsrld $0xa,%ymm2,%ymm8 mov %r8d,%edi add 0x44(%rsp,%rsi,1),%r10d and %edx,%edi rorx $0x19,%r8d,%r13d rorx $0xb,%r8d,%r14d lea (%r10d,%edi,1),%r10d andn %r9d,%r8d,%edi rorx $0xd,%r11d,%r12d xor %r14d,%r13d lea (%r10d,%edi,1),%r10d rorx $0x16,%r11d,%r15d rorx $0x6,%r8d,%r14d mov %r11d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %eax,%edi lea (%r10d,%r13d,1),%r10d mov %r11d,%r13d rorx $0x2,%r11d,%r15d add %r10d,%ecx and %ebx,%edi xor %r15d,%r12d lea (%r10d,%edi,1),%r10d lea (%r10d,%r12d,1),%r10d and %eax,%r13d lea (%r10d,%r13d,1),%r10d vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm8,%ymm8 vpshufb %ymm10,%ymm8,%ymm8 vpaddd %ymm8,%ymm0,%ymm0 vpshufd $0x50,%ymm0,%ymm2 mov %ecx,%edi add 0x48(%rsp,%rsi,1),%r9d and %r8d,%edi rorx $0x19,%ecx,%r13d rorx $0xb,%ecx,%r14d lea (%r9d,%edi,1),%r9d andn %edx,%ecx,%edi rorx $0xd,%r10d,%r12d xor %r14d,%r13d lea (%r9d,%edi,1),%r9d rorx $0x16,%r10d,%r15d rorx $0x6,%ecx,%r14d mov %r10d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r11d,%edi lea (%r9d,%r13d,1),%r9d mov %r10d,%r13d rorx $0x2,%r10d,%r15d add %r9d,%ebx and %eax,%edi xor %r15d,%r12d lea (%r9d,%edi,1),%r9d lea (%r9d,%r12d,1),%r9d and %r11d,%r13d lea (%r9d,%r13d,1),%r9d vpsrld $0xa,%ymm2,%ymm11 vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm11,%ymm11 vpshufb %ymm12,%ymm11,%ymm11 vpaddd %ymm0,%ymm11,%ymm6 vpaddd 0xc0(%rbp,%rsi,1),%ymm6,%ymm9 mov %ebx,%edi add 0x4c(%rsp,%rsi,1),%edx and %ecx,%edi rorx $0x19,%ebx,%r13d rorx $0xb,%ebx,%r14d lea (%edx,%edi,1),%edx andn %r8d,%ebx,%edi rorx $0xd,%r9d,%r12d xor %r14d,%r13d lea (%edx,%edi,1),%edx vmovdqa %ymm9,0xc0(%rsp,%rsi,1) rorx $0x16,%r9d,%r15d rorx $0x6,%ebx,%r14d mov %r9d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r10d,%edi lea (%edx,%r13d,1),%edx mov %r9d,%r13d rorx $0x2,%r9d,%r15d add %edx,%eax and %r11d,%edi xor %r15d,%r12d lea (%edx,%edi,1),%edx lea (%edx,%r12d,1),%edx and %r10d,%r13d lea (%edx,%r13d,1),%edx vpalignr $0x4,%ymm5,%ymm6,%ymm0 vpaddd %ymm7,%ymm0,%ymm0 vpalignr $0x4,%ymm7,%ymm4,%ymm1 vpsrld $0x7,%ymm1,%ymm2 vpslld $0x19,%ymm1,%ymm3 vpor %ymm2,%ymm3,%ymm3 vpsrld $0x12,%ymm1,%ymm2 mov %eax,%edi add 0x60(%rsp,%rsi,1),%r8d and %ebx,%edi rorx $0x19,%eax,%r13d rorx $0xb,%eax,%r14d lea (%r8d,%edi,1),%r8d andn %ecx,%eax,%edi rorx $0xd,%edx,%r12d xor %r14d,%r13d lea (%r8d,%edi,1),%r8d rorx $0x16,%edx,%r15d rorx $0x6,%eax,%r14d mov %edx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r9d,%edi lea (%r8d,%r13d,1),%r8d mov %edx,%r13d rorx $0x2,%edx,%r15d add %r8d,%r11d and %r10d,%edi xor %r15d,%r12d lea (%r8d,%edi,1),%r8d lea (%r8d,%r12d,1),%r8d and %r9d,%r13d lea (%r8d,%r13d,1),%r8d vpsrld $0x3,%ymm1,%ymm8 vpslld $0xe,%ymm1,%ymm1 vpxor %ymm1,%ymm3,%ymm3 vpxor %ymm2,%ymm3,%ymm3 vpxor %ymm8,%ymm3,%ymm1 vpshufd $0xfa,%ymm6,%ymm2 vpaddd %ymm1,%ymm0,%ymm0 vpsrld $0xa,%ymm2,%ymm8 mov %r11d,%edi add 0x64(%rsp,%rsi,1),%ecx and %eax,%edi rorx $0x19,%r11d,%r13d rorx $0xb,%r11d,%r14d lea (%ecx,%edi,1),%ecx andn %ebx,%r11d,%edi rorx $0xd,%r8d,%r12d xor %r14d,%r13d lea (%ecx,%edi,1),%ecx rorx $0x16,%r8d,%r15d rorx $0x6,%r11d,%r14d mov %r8d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %edx,%edi lea (%ecx,%r13d,1),%ecx mov %r8d,%r13d rorx $0x2,%r8d,%r15d add %ecx,%r10d and %r9d,%edi xor %r15d,%r12d lea (%ecx,%edi,1),%ecx lea (%ecx,%r12d,1),%ecx and %edx,%r13d lea (%ecx,%r13d,1),%ecx vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm8,%ymm8 vpshufb %ymm10,%ymm8,%ymm8 vpaddd %ymm8,%ymm0,%ymm0 vpshufd $0x50,%ymm0,%ymm2 mov %r10d,%edi add 0x68(%rsp,%rsi,1),%ebx and %r11d,%edi rorx $0x19,%r10d,%r13d rorx $0xb,%r10d,%r14d lea (%ebx,%edi,1),%ebx andn %eax,%r10d,%edi rorx $0xd,%ecx,%r12d xor %r14d,%r13d lea (%ebx,%edi,1),%ebx rorx $0x16,%ecx,%r15d rorx $0x6,%r10d,%r14d mov %ecx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r8d,%edi lea (%ebx,%r13d,1),%ebx mov %ecx,%r13d rorx $0x2,%ecx,%r15d add %ebx,%r9d and %edx,%edi xor %r15d,%r12d lea (%ebx,%edi,1),%ebx lea (%ebx,%r12d,1),%ebx and %r8d,%r13d lea (%ebx,%r13d,1),%ebx vpsrld $0xa,%ymm2,%ymm11 vpsrlq $0x13,%ymm2,%ymm3 vpsrlq $0x11,%ymm2,%ymm2 vpxor %ymm3,%ymm2,%ymm2 vpxor %ymm2,%ymm11,%ymm11 vpshufb %ymm12,%ymm11,%ymm11 vpaddd %ymm0,%ymm11,%ymm7 vpaddd 0xe0(%rbp,%rsi,1),%ymm7,%ymm9 mov %r9d,%edi add 0x6c(%rsp,%rsi,1),%eax and %r10d,%edi rorx $0x19,%r9d,%r13d rorx $0xb,%r9d,%r14d lea (%eax,%edi,1),%eax andn %r11d,%r9d,%edi rorx $0xd,%ebx,%r12d xor %r14d,%r13d lea (%eax,%edi,1),%eax vmovdqa %ymm9,0xe0(%rsp,%rsi,1) rorx $0x16,%ebx,%r15d rorx $0x6,%r9d,%r14d mov %ebx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ecx,%edi lea (%eax,%r13d,1),%eax mov %ebx,%r13d rorx $0x2,%ebx,%r15d add %eax,%edx and %r8d,%edi xor %r15d,%r12d lea (%eax,%edi,1),%eax lea (%eax,%r12d,1),%eax and %ecx,%r13d lea (%eax,%r13d,1),%eax add $0x80,%rsi cmp $0x180,%rsi jb .LB100 mov %edx,%edi add 0x180(%rsp),%r11d and %r9d,%edi rorx $0x19,%edx,%r13d rorx $0xb,%edx,%r14d lea (%r11d,%edi,1),%r11d andn %r10d,%edx,%edi rorx $0xd,%eax,%r12d xor %r14d,%r13d lea (%r11d,%edi,1),%r11d rorx $0x16,%eax,%r15d rorx $0x6,%edx,%r14d mov %eax,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ebx,%edi lea (%r11d,%r13d,1),%r11d mov %eax,%r13d rorx $0x2,%eax,%r15d add %r11d,%r8d and %ecx,%edi xor %r15d,%r12d lea (%r11d,%edi,1),%r11d lea (%r11d,%r12d,1),%r11d and %ebx,%r13d lea (%r11d,%r13d,1),%r11d mov %r8d,%edi add 0x184(%rsp),%r10d and %edx,%edi rorx $0x19,%r8d,%r13d rorx $0xb,%r8d,%r14d lea (%r10d,%edi,1),%r10d andn %r9d,%r8d,%edi rorx $0xd,%r11d,%r12d xor %r14d,%r13d lea (%r10d,%edi,1),%r10d rorx $0x16,%r11d,%r15d rorx $0x6,%r8d,%r14d mov %r11d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %eax,%edi lea (%r10d,%r13d,1),%r10d mov %r11d,%r13d rorx $0x2,%r11d,%r15d add %r10d,%ecx and %ebx,%edi xor %r15d,%r12d lea (%r10d,%edi,1),%r10d lea (%r10d,%r12d,1),%r10d and %eax,%r13d lea (%r10d,%r13d,1),%r10d mov %ecx,%edi add 0x188(%rsp),%r9d and %r8d,%edi rorx $0x19,%ecx,%r13d rorx $0xb,%ecx,%r14d lea (%r9d,%edi,1),%r9d andn %edx,%ecx,%edi rorx $0xd,%r10d,%r12d xor %r14d,%r13d lea (%r9d,%edi,1),%r9d rorx $0x16,%r10d,%r15d rorx $0x6,%ecx,%r14d mov %r10d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r11d,%edi lea (%r9d,%r13d,1),%r9d mov %r10d,%r13d rorx $0x2,%r10d,%r15d add %r9d,%ebx and %eax,%edi xor %r15d,%r12d lea (%r9d,%edi,1),%r9d lea (%r9d,%r12d,1),%r9d and %r11d,%r13d lea (%r9d,%r13d,1),%r9d mov %ebx,%edi add 0x18c(%rsp),%edx and %ecx,%edi rorx $0x19,%ebx,%r13d rorx $0xb,%ebx,%r14d lea (%edx,%edi,1),%edx andn %r8d,%ebx,%edi rorx $0xd,%r9d,%r12d xor %r14d,%r13d lea (%edx,%edi,1),%edx rorx $0x16,%r9d,%r15d rorx $0x6,%ebx,%r14d mov %r9d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r10d,%edi lea (%edx,%r13d,1),%edx mov %r9d,%r13d rorx $0x2,%r9d,%r15d add %edx,%eax and %r11d,%edi xor %r15d,%r12d lea (%edx,%edi,1),%edx lea (%edx,%r12d,1),%edx and %r10d,%r13d lea (%edx,%r13d,1),%edx mov %eax,%edi add 0x1a0(%rsp),%r8d and %ebx,%edi rorx $0x19,%eax,%r13d rorx $0xb,%eax,%r14d lea (%r8d,%edi,1),%r8d andn %ecx,%eax,%edi rorx $0xd,%edx,%r12d xor %r14d,%r13d lea (%r8d,%edi,1),%r8d rorx $0x16,%edx,%r15d rorx $0x6,%eax,%r14d mov %edx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r9d,%edi lea (%r8d,%r13d,1),%r8d mov %edx,%r13d rorx $0x2,%edx,%r15d add %r8d,%r11d and %r10d,%edi xor %r15d,%r12d lea (%r8d,%edi,1),%r8d lea (%r8d,%r12d,1),%r8d and %r9d,%r13d lea (%r8d,%r13d,1),%r8d mov %r11d,%edi add 0x1a4(%rsp),%ecx and %eax,%edi rorx $0x19,%r11d,%r13d rorx $0xb,%r11d,%r14d lea (%ecx,%edi,1),%ecx andn %ebx,%r11d,%edi rorx $0xd,%r8d,%r12d xor %r14d,%r13d lea (%ecx,%edi,1),%ecx rorx $0x16,%r8d,%r15d rorx $0x6,%r11d,%r14d mov %r8d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %edx,%edi lea (%ecx,%r13d,1),%ecx mov %r8d,%r13d rorx $0x2,%r8d,%r15d add %ecx,%r10d and %r9d,%edi xor %r15d,%r12d lea (%ecx,%edi,1),%ecx lea (%ecx,%r12d,1),%ecx and %edx,%r13d lea (%ecx,%r13d,1),%ecx mov %r10d,%edi add 0x1a8(%rsp),%ebx and %r11d,%edi rorx $0x19,%r10d,%r13d rorx $0xb,%r10d,%r14d lea (%ebx,%edi,1),%ebx andn %eax,%r10d,%edi rorx $0xd,%ecx,%r12d xor %r14d,%r13d lea (%ebx,%edi,1),%ebx rorx $0x16,%ecx,%r15d rorx $0x6,%r10d,%r14d mov %ecx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r8d,%edi lea (%ebx,%r13d,1),%ebx mov %ecx,%r13d rorx $0x2,%ecx,%r15d add %ebx,%r9d and %edx,%edi xor %r15d,%r12d lea (%ebx,%edi,1),%ebx lea (%ebx,%r12d,1),%ebx and %r8d,%r13d lea (%ebx,%r13d,1),%ebx mov %r9d,%edi add 0x1ac(%rsp),%eax and %r10d,%edi rorx $0x19,%r9d,%r13d rorx $0xb,%r9d,%r14d lea (%eax,%edi,1),%eax andn %r11d,%r9d,%edi rorx $0xd,%ebx,%r12d xor %r14d,%r13d lea (%eax,%edi,1),%eax rorx $0x16,%ebx,%r15d rorx $0x6,%r9d,%r14d mov %ebx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ecx,%edi lea (%eax,%r13d,1),%eax mov %ebx,%r13d rorx $0x2,%ebx,%r15d add %eax,%edx and %r8d,%edi xor %r15d,%r12d lea (%eax,%edi,1),%eax lea (%eax,%r12d,1),%eax and %ecx,%r13d lea (%eax,%r13d,1),%eax mov %edx,%edi add 0x1c0(%rsp),%r11d and %r9d,%edi rorx $0x19,%edx,%r13d rorx $0xb,%edx,%r14d lea (%r11d,%edi,1),%r11d andn %r10d,%edx,%edi rorx $0xd,%eax,%r12d xor %r14d,%r13d lea (%r11d,%edi,1),%r11d rorx $0x16,%eax,%r15d rorx $0x6,%edx,%r14d mov %eax,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ebx,%edi lea (%r11d,%r13d,1),%r11d mov %eax,%r13d rorx $0x2,%eax,%r15d add %r11d,%r8d and %ecx,%edi xor %r15d,%r12d lea (%r11d,%edi,1),%r11d lea (%r11d,%r12d,1),%r11d and %ebx,%r13d lea (%r11d,%r13d,1),%r11d mov %r8d,%edi add 0x1c4(%rsp),%r10d and %edx,%edi rorx $0x19,%r8d,%r13d rorx $0xb,%r8d,%r14d lea (%r10d,%edi,1),%r10d andn %r9d,%r8d,%edi rorx $0xd,%r11d,%r12d xor %r14d,%r13d lea (%r10d,%edi,1),%r10d rorx $0x16,%r11d,%r15d rorx $0x6,%r8d,%r14d mov %r11d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %eax,%edi lea (%r10d,%r13d,1),%r10d mov %r11d,%r13d rorx $0x2,%r11d,%r15d add %r10d,%ecx and %ebx,%edi xor %r15d,%r12d lea (%r10d,%edi,1),%r10d lea (%r10d,%r12d,1),%r10d and %eax,%r13d lea (%r10d,%r13d,1),%r10d mov %ecx,%edi add 0x1c8(%rsp),%r9d and %r8d,%edi rorx $0x19,%ecx,%r13d rorx $0xb,%ecx,%r14d lea (%r9d,%edi,1),%r9d andn %edx,%ecx,%edi rorx $0xd,%r10d,%r12d xor %r14d,%r13d lea (%r9d,%edi,1),%r9d rorx $0x16,%r10d,%r15d rorx $0x6,%ecx,%r14d mov %r10d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r11d,%edi lea (%r9d,%r13d,1),%r9d mov %r10d,%r13d rorx $0x2,%r10d,%r15d add %r9d,%ebx and %eax,%edi xor %r15d,%r12d lea (%r9d,%edi,1),%r9d lea (%r9d,%r12d,1),%r9d and %r11d,%r13d lea (%r9d,%r13d,1),%r9d mov %ebx,%edi add 0x1cc(%rsp),%edx and %ecx,%edi rorx $0x19,%ebx,%r13d rorx $0xb,%ebx,%r14d lea (%edx,%edi,1),%edx andn %r8d,%ebx,%edi rorx $0xd,%r9d,%r12d xor %r14d,%r13d lea (%edx,%edi,1),%edx rorx $0x16,%r9d,%r15d rorx $0x6,%ebx,%r14d mov %r9d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r10d,%edi lea (%edx,%r13d,1),%edx mov %r9d,%r13d rorx $0x2,%r9d,%r15d add %edx,%eax and %r11d,%edi xor %r15d,%r12d lea (%edx,%edi,1),%edx lea (%edx,%r12d,1),%edx and %r10d,%r13d lea (%edx,%r13d,1),%edx mov %eax,%edi add 0x1e0(%rsp),%r8d and %ebx,%edi rorx $0x19,%eax,%r13d rorx $0xb,%eax,%r14d lea (%r8d,%edi,1),%r8d andn %ecx,%eax,%edi rorx $0xd,%edx,%r12d xor %r14d,%r13d lea (%r8d,%edi,1),%r8d rorx $0x16,%edx,%r15d rorx $0x6,%eax,%r14d mov %edx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r9d,%edi lea (%r8d,%r13d,1),%r8d mov %edx,%r13d rorx $0x2,%edx,%r15d add %r8d,%r11d and %r10d,%edi xor %r15d,%r12d lea (%r8d,%edi,1),%r8d lea (%r8d,%r12d,1),%r8d and %r9d,%r13d lea (%r8d,%r13d,1),%r8d mov %r11d,%edi add 0x1e4(%rsp),%ecx and %eax,%edi rorx $0x19,%r11d,%r13d rorx $0xb,%r11d,%r14d lea (%ecx,%edi,1),%ecx andn %ebx,%r11d,%edi rorx $0xd,%r8d,%r12d xor %r14d,%r13d lea (%ecx,%edi,1),%ecx rorx $0x16,%r8d,%r15d rorx $0x6,%r11d,%r14d mov %r8d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %edx,%edi lea (%ecx,%r13d,1),%ecx mov %r8d,%r13d rorx $0x2,%r8d,%r15d add %ecx,%r10d and %r9d,%edi xor %r15d,%r12d lea (%ecx,%edi,1),%ecx lea (%ecx,%r12d,1),%ecx and %edx,%r13d lea (%ecx,%r13d,1),%ecx mov %r10d,%edi add 0x1e8(%rsp),%ebx and %r11d,%edi rorx $0x19,%r10d,%r13d rorx $0xb,%r10d,%r14d lea (%ebx,%edi,1),%ebx andn %eax,%r10d,%edi rorx $0xd,%ecx,%r12d xor %r14d,%r13d lea (%ebx,%edi,1),%ebx rorx $0x16,%ecx,%r15d rorx $0x6,%r10d,%r14d mov %ecx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r8d,%edi lea (%ebx,%r13d,1),%ebx mov %ecx,%r13d rorx $0x2,%ecx,%r15d add %ebx,%r9d and %edx,%edi xor %r15d,%r12d lea (%ebx,%edi,1),%ebx lea (%ebx,%r12d,1),%ebx and %r8d,%r13d lea (%ebx,%r13d,1),%ebx mov %r9d,%edi add 0x1ec(%rsp),%eax and %r10d,%edi rorx $0x19,%r9d,%r13d rorx $0xb,%r9d,%r14d lea (%eax,%edi,1),%eax andn %r11d,%r9d,%edi rorx $0xd,%ebx,%r12d xor %r14d,%r13d lea (%eax,%edi,1),%eax rorx $0x16,%ebx,%r15d rorx $0x6,%r9d,%r14d mov %ebx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ecx,%edi lea (%eax,%r13d,1),%eax mov %ebx,%r13d rorx $0x2,%ebx,%r15d add %eax,%edx and %r8d,%edi xor %r15d,%r12d lea (%eax,%edi,1),%eax lea (%eax,%r12d,1),%eax and %ecx,%r13d lea (%eax,%r13d,1),%eax mov 0x210(%rsp),%rsi mov 0x208(%rsp),%rdi add (%rsi),%eax mov %eax,(%rsi) add 0x4(%rsi),%ebx mov %ebx,0x4(%rsi) add 0x8(%rsi),%ecx mov %ecx,0x8(%rsi) add 0xc(%rsi),%r8d mov %r8d,0xc(%rsi) add 0x10(%rsi),%edx mov %edx,0x10(%rsi) add 0x14(%rsi),%r9d mov %r9d,0x14(%rsi) add 0x18(%rsi),%r10d mov %r10d,0x18(%rsi) add 0x1c(%rsi),%r11d mov %r11d,0x1c(%rsi) cmp 0x200(%rsp),%rdi ja .LB15a5 xor %rsi,%rsi .balign 16 .LB1170: mov %edx,%edi add 0x10(%rsp,%rsi,1),%r11d and %r9d,%edi rorx $0x19,%edx,%r13d rorx $0xb,%edx,%r14d lea (%r11d,%edi,1),%r11d andn %r10d,%edx,%edi rorx $0xd,%eax,%r12d xor %r14d,%r13d lea (%r11d,%edi,1),%r11d rorx $0x16,%eax,%r15d rorx $0x6,%edx,%r14d mov %eax,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ebx,%edi lea (%r11d,%r13d,1),%r11d mov %eax,%r13d rorx $0x2,%eax,%r15d add %r11d,%r8d and %ecx,%edi xor %r15d,%r12d lea (%r11d,%edi,1),%r11d lea (%r11d,%r12d,1),%r11d and %ebx,%r13d lea (%r11d,%r13d,1),%r11d mov %r8d,%edi add 0x14(%rsp,%rsi,1),%r10d and %edx,%edi rorx $0x19,%r8d,%r13d rorx $0xb,%r8d,%r14d lea (%r10d,%edi,1),%r10d andn %r9d,%r8d,%edi rorx $0xd,%r11d,%r12d xor %r14d,%r13d lea (%r10d,%edi,1),%r10d rorx $0x16,%r11d,%r15d rorx $0x6,%r8d,%r14d mov %r11d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %eax,%edi lea (%r10d,%r13d,1),%r10d mov %r11d,%r13d rorx $0x2,%r11d,%r15d add %r10d,%ecx and %ebx,%edi xor %r15d,%r12d lea (%r10d,%edi,1),%r10d lea (%r10d,%r12d,1),%r10d and %eax,%r13d lea (%r10d,%r13d,1),%r10d mov %ecx,%edi add 0x18(%rsp,%rsi,1),%r9d and %r8d,%edi rorx $0x19,%ecx,%r13d rorx $0xb,%ecx,%r14d lea (%r9d,%edi,1),%r9d andn %edx,%ecx,%edi rorx $0xd,%r10d,%r12d xor %r14d,%r13d lea (%r9d,%edi,1),%r9d rorx $0x16,%r10d,%r15d rorx $0x6,%ecx,%r14d mov %r10d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r11d,%edi lea (%r9d,%r13d,1),%r9d mov %r10d,%r13d rorx $0x2,%r10d,%r15d add %r9d,%ebx and %eax,%edi xor %r15d,%r12d lea (%r9d,%edi,1),%r9d lea (%r9d,%r12d,1),%r9d and %r11d,%r13d lea (%r9d,%r13d,1),%r9d mov %ebx,%edi add 0x1c(%rsp,%rsi,1),%edx and %ecx,%edi rorx $0x19,%ebx,%r13d rorx $0xb,%ebx,%r14d lea (%edx,%edi,1),%edx andn %r8d,%ebx,%edi rorx $0xd,%r9d,%r12d xor %r14d,%r13d lea (%edx,%edi,1),%edx rorx $0x16,%r9d,%r15d rorx $0x6,%ebx,%r14d mov %r9d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r10d,%edi lea (%edx,%r13d,1),%edx mov %r9d,%r13d rorx $0x2,%r9d,%r15d add %edx,%eax and %r11d,%edi xor %r15d,%r12d lea (%edx,%edi,1),%edx lea (%edx,%r12d,1),%edx and %r10d,%r13d lea (%edx,%r13d,1),%edx mov %eax,%edi add 0x30(%rsp,%rsi,1),%r8d and %ebx,%edi rorx $0x19,%eax,%r13d rorx $0xb,%eax,%r14d lea (%r8d,%edi,1),%r8d andn %ecx,%eax,%edi rorx $0xd,%edx,%r12d xor %r14d,%r13d lea (%r8d,%edi,1),%r8d rorx $0x16,%edx,%r15d rorx $0x6,%eax,%r14d mov %edx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r9d,%edi lea (%r8d,%r13d,1),%r8d mov %edx,%r13d rorx $0x2,%edx,%r15d add %r8d,%r11d and %r10d,%edi xor %r15d,%r12d lea (%r8d,%edi,1),%r8d lea (%r8d,%r12d,1),%r8d and %r9d,%r13d lea (%r8d,%r13d,1),%r8d mov %r11d,%edi add 0x34(%rsp,%rsi,1),%ecx and %eax,%edi rorx $0x19,%r11d,%r13d rorx $0xb,%r11d,%r14d lea (%ecx,%edi,1),%ecx andn %ebx,%r11d,%edi rorx $0xd,%r8d,%r12d xor %r14d,%r13d lea (%ecx,%edi,1),%ecx rorx $0x16,%r8d,%r15d rorx $0x6,%r11d,%r14d mov %r8d,%edi xor %r15d,%r12d xor %r14d,%r13d xor %edx,%edi lea (%ecx,%r13d,1),%ecx mov %r8d,%r13d rorx $0x2,%r8d,%r15d add %ecx,%r10d and %r9d,%edi xor %r15d,%r12d lea (%ecx,%edi,1),%ecx lea (%ecx,%r12d,1),%ecx and %edx,%r13d lea (%ecx,%r13d,1),%ecx mov %r10d,%edi add 0x38(%rsp,%rsi,1),%ebx and %r11d,%edi rorx $0x19,%r10d,%r13d rorx $0xb,%r10d,%r14d lea (%ebx,%edi,1),%ebx andn %eax,%r10d,%edi rorx $0xd,%ecx,%r12d xor %r14d,%r13d lea (%ebx,%edi,1),%ebx rorx $0x16,%ecx,%r15d rorx $0x6,%r10d,%r14d mov %ecx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %r8d,%edi lea (%ebx,%r13d,1),%ebx mov %ecx,%r13d rorx $0x2,%ecx,%r15d add %ebx,%r9d and %edx,%edi xor %r15d,%r12d lea (%ebx,%edi,1),%ebx lea (%ebx,%r12d,1),%ebx and %r8d,%r13d lea (%ebx,%r13d,1),%ebx mov %r9d,%edi add 0x3c(%rsp,%rsi,1),%eax and %r10d,%edi rorx $0x19,%r9d,%r13d rorx $0xb,%r9d,%r14d lea (%eax,%edi,1),%eax andn %r11d,%r9d,%edi rorx $0xd,%ebx,%r12d xor %r14d,%r13d lea (%eax,%edi,1),%eax rorx $0x16,%ebx,%r15d rorx $0x6,%r9d,%r14d mov %ebx,%edi xor %r15d,%r12d xor %r14d,%r13d xor %ecx,%edi lea (%eax,%r13d,1),%eax mov %ebx,%r13d rorx $0x2,%ebx,%r15d add %eax,%edx and %r8d,%edi xor %r15d,%r12d lea (%eax,%edi,1),%eax lea (%eax,%r12d,1),%eax and %ecx,%r13d lea (%eax,%r13d,1),%eax add $0x40,%rsi cmp $0x200,%rsi jb .LB1170 mov 0x210(%rsp),%rsi mov 0x208(%rsp),%rdi add $0x40,%rdi add (%rsi),%eax mov %eax,(%rsi) add 0x4(%rsi),%ebx mov %ebx,0x4(%rsi) add 0x8(%rsi),%ecx mov %ecx,0x8(%rsi) add 0xc(%rsi),%r8d mov %r8d,0xc(%rsi) add 0x10(%rsi),%edx mov %edx,0x10(%rsi) add 0x14(%rsi),%r9d mov %r9d,0x14(%rsi) add 0x18(%rsi),%r10d mov %r10d,0x18(%rsi) add 0x1c(%rsi),%r11d mov %r11d,0x1c(%rsi) cmp 0x200(%rsp),%rdi jb .LB7b ja .LB15a5 .LB1535: lea .LK256(%rip),%rbp vmovdqu (%rdi),%xmm4 vmovdqu 0x10(%rdi),%xmm5 vmovdqu 0x20(%rdi),%xmm6 vmovdqu 0x30(%rdi),%xmm7 vpshufb %xmm13,%xmm4,%xmm4 vpshufb %xmm13,%xmm5,%xmm5 vpshufb %xmm13,%xmm6,%xmm6 vpshufb %xmm13,%xmm7,%xmm7 jmpq .LBc1 mov (%rsi),%eax mov 0x4(%rsi),%ebx mov 0x8(%rsi),%ecx mov 0xc(%rsi),%r8d mov 0x10(%rsi),%edx mov 0x14(%rsi),%r9d mov 0x18(%rsi),%r10d mov 0x1c(%rsi),%r11d vmovdqa _BYTE_FLIP_MASK(%rip),%ymm13 vmovdqa _SHUF_00BA(%rip),%ymm10 vmovdqa _SHUF_DC00(%rip),%ymm12 mov %rsi,0x210(%rsp) jmp .LB1535 .LB15a5: vzeroall vmovdqa %ymm0,(%rsp) vmovdqa %ymm0,0x20(%rsp) vmovdqa %ymm0,0x40(%rsp) vmovdqa %ymm0,0x60(%rsp) vmovdqa %ymm0,0x80(%rsp) vmovdqa %ymm0,0xa0(%rsp) vmovdqa %ymm0,0xc0(%rsp) vmovdqa %ymm0,0xe0(%rsp) vmovdqa %ymm0,0x100(%rsp) vmovdqa %ymm0,0x120(%rsp) vmovdqa %ymm0,0x140(%rsp) vmovdqa %ymm0,0x160(%rsp) vmovdqa %ymm0,0x180(%rsp) vmovdqa %ymm0,0x1a0(%rsp) vmovdqa %ymm0,0x1c0(%rsp) vmovdqa %ymm0,0x1e0(%rsp) xor %eax,%eax mov 0x218(%rsp),%rsp pop %r15 pop %r14 pop %r13 pop %r12 pop %rbp pop %rbx .LB163f: {$IF DEFINED(WIN64)} movdqa (%rsp),%xmm6 movdqa 0x10(%rsp),%xmm7 movdqa 0x20(%rsp),%xmm8 movdqa 0x30(%rsp),%xmm9 movdqa 0x40(%rsp),%xmm10 movdqa 0x50(%rsp),%xmm11 movdqa 0x60(%rsp),%xmm12 movdqa 0x70(%rsp),%xmm13 movdqa 0x80(%rsp),%xmm14 movdqa 0x90(%rsp),%xmm15 addq $168, %rsp movq 16(%rsp), %rsi movq 24(%rsp), %rdi {$ENDIF} retq .balign 64 .LK256: .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 end; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcptiger.pas��������������������������������������������0000644�0001750�0000144�00000030550�15104114162�022336� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of Tiger ********************************} {******************************************************************************} {* Copyright (c) 2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPtiger; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_tiger= class(TDCP_hash) protected Len: int64; Index: DWord; CurrentHash: array[0..2] of int64; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$INCLUDE DCPtiger.inc} procedure TDCP_tiger.Compress; var a, b, c, aa, bb, cc: int64; x: array[0..7] of int64; begin dcpFillChar(x, SizeOf(x), 0); a:= CurrentHash[0]; aa:= a; b:= CurrentHash[1]; bb:= b; c:= CurrentHash[2]; cc:= c; Move(HashBuffer,x,Sizeof(x)); c:= c xor x[0]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[1]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; b:= b xor x[2]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 5; c:= c xor x[3]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[4]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; b:= b xor x[5]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 5; c:= c xor x[6]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[7]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; x[0]:= x[0] - (x[7] xor $A5A5A5A5A5A5A5A5); x[1]:= x[1] xor x[0]; x[2]:= x[2] + x[1]; x[3]:= x[3] - (x[2] xor ((not x[1]) shl 19)); x[4]:= x[4] xor x[3]; x[5]:= x[5] + x[4]; x[6]:= x[6] - (x[5] xor ((not x[4]) shr 23)); x[7]:= x[7] xor x[6]; x[0]:= x[0] + x[7]; x[1]:= x[1] - (x[0] xor ((not x[7]) shl 19)); x[2]:= x[2] xor x[1]; x[3]:= x[3] + x[2]; x[4]:= x[4] - (x[3] xor ((not x[2]) shr 23)); x[5]:= x[5] xor x[4]; x[6]:= x[6] + x[5]; x[7]:= x[7] - (x[6] xor $0123456789ABCDEF); b:= b xor x[0]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[1]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; a:= a xor x[2]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 7; b:= b xor x[3]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[4]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; a:= a xor x[5]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 7; b:= b xor x[6]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[7]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; x[0]:= x[0] - (x[7] xor $A5A5A5A5A5A5A5A5); x[1]:= x[1] xor x[0]; x[2]:= x[2] + x[1]; x[3]:= x[3] - (x[2] xor ((not x[1]) shl 19)); x[4]:= x[4] xor x[3]; x[5]:= x[5] + x[4]; x[6]:= x[6] - (x[5] xor ((not x[4]) shr 23)); x[7]:= x[7] xor x[6]; x[0]:= x[0] + x[7]; x[1]:= x[1] - (x[0] xor ((not x[7]) shl 19)); x[2]:= x[2] xor x[1]; x[3]:= x[3] + x[2]; x[4]:= x[4] - (x[3] xor ((not x[2]) shr 23)); x[5]:= x[5] xor x[4]; x[6]:= x[6] + x[5]; x[7]:= x[7] - (x[6] xor $0123456789ABCDEF); a:= a xor x[0]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[1]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; c:= c xor x[2]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 9; a:= a xor x[3]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[4]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; c:= c xor x[5]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 9; a:= a xor x[6]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[7]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; CurrentHash[0]:= a xor aa; CurrentHash[1]:= b - bb; CurrentHash[2]:= c + cc; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_tiger.GetHashSize: integer; begin Result:= 192; end; class function TDCP_tiger.GetId: integer; begin Result:= DCP_tiger; end; class function TDCP_tiger.GetAlgorithm: string; begin Result:= 'Tiger'; end; class function TDCP_tiger.SelfTest: boolean; const Test1Out: array[0..2] of int64= ($87FB2A9083851CF7,$470D2CF810E6DF9E,$B586445034A5A386); Test2Out: array[0..2] of int64= ($0C410A042968868A,$1671DA5A3FD29A72,$5EC1E457D3CDB303); var TestHash: TDCP_tiger; TestOut: array[0..2] of int64; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_tiger.Create(nil); TestHash.Init; TestHash.UpdateStr('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_tiger.Init; begin Burn; fInitialized:= true; CurrentHash[0]:= $0123456789ABCDEF; CurrentHash[1]:= $FEDCBA9876543210; CurrentHash[2]:= $F096A5B4C3B2E187; end; procedure TDCP_tiger.Burn; begin Len:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_tiger.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(Len,Size*8); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_tiger.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $01; if Index>= 56 then Compress; Pint64(@HashBuffer[56])^:= Len; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpsha512.pas�������������������������������������������0000644�0001750�0000144�00000112435�15104114162�022232� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA512 *******************************} {******************************************************************************} {* Copyright (C) 1999-2002 David Barton *} {* Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha512; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type { TDCP_sha512base } TDCP_sha512base= class(TDCP_hash) protected LenHi, LenLo: int64; Index: DWord; CurrentHash: array[0..7] of int64; HashBuffer: array[0..127] of byte; FCompress: procedure(HashBuffer: PByte; CurrentHash: PInt64; BufferCount: UIntPtr); register; procedure Compress; public procedure Init; override; procedure Update(const Buffer; Size: longword); override; procedure Burn; override; end; TDCP_sha384= class(TDCP_sha512base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; end; TDCP_sha512= class(TDCP_sha512base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$IF DEFINED(CPUX86_64)} {$include sha512_sse.inc} {$ENDIF} procedure sha512_compress_pas(HashBuffer: PByte; CurrentHash: PInt64; BufferCount: UIntPtr); register; procedure sha512_compress(CurrentHash: PInt64; HashBuffer: PInt64); var a, b, c, d, e, f, g, h, t1, t2: int64; W: array[0..79] of int64; i: longword; begin a:= CurrentHash[0]; b:= CurrentHash[1]; c:= CurrentHash[2]; d:= CurrentHash[3]; e:= CurrentHash[4]; f:= CurrentHash[5]; g:= CurrentHash[6]; h:= CurrentHash[7]; for i:= 0 to 15 do W[i]:= SwapEndian(HashBuffer[i]); for i:= 16 to 79 do W[i]:= (((W[i-2] shr 19) or (W[i-2] shl 45)) xor ((W[i-2] shr 61) or (W[i-2] shl 3)) xor (W[i-2] shr 6)) + W[i-7] + (((W[i-15] shr 1) or (W[i-15] shl 63)) xor ((W[i-15] shr 8) or (W[i-15] shl 56)) xor (W[i-15] shr 7)) + W[i-16]; { Non-optimised version for i:= 0 to 79 do begin t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + K[i] + W[i]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); h:= g; g:= f; f:= e; e:= d + t1; d:= c; c:= b; b:= a; a:= t1 + t2; end; } t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $428a2f98d728ae22 + W[0]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $7137449123ef65cd + W[1]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b5c0fbcfec4d3b2f + W[2]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $e9b5dba58189dbbc + W[3]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $3956c25bf348b538 + W[4]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $59f111f1b605d019 + W[5]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $923f82a4af194f9b + W[6]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $ab1c5ed5da6d8118 + W[7]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $d807aa98a3030242 + W[8]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $12835b0145706fbe + W[9]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $243185be4ee4b28c + W[10]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $550c7dc3d5ffb4e2 + W[11]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $72be5d74f27b896f + W[12]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $80deb1fe3b1696b1 + W[13]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $9bdc06a725c71235 + W[14]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c19bf174cf692694 + W[15]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $e49b69c19ef14ad2 + W[16]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $efbe4786384f25e3 + W[17]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $0fc19dc68b8cd5b5 + W[18]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $240ca1cc77ac9c65 + W[19]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $2de92c6f592b0275 + W[20]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4a7484aa6ea6e483 + W[21]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5cb0a9dcbd41fbd4 + W[22]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $76f988da831153b5 + W[23]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $983e5152ee66dfab + W[24]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a831c66d2db43210 + W[25]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b00327c898fb213f + W[26]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $bf597fc7beef0ee4 + W[27]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $c6e00bf33da88fc2 + W[28]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d5a79147930aa725 + W[29]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $06ca6351e003826f + W[30]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $142929670a0e6e70 + W[31]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $27b70a8546d22ffc + W[32]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $2e1b21385c26c926 + W[33]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $4d2c6dfc5ac42aed + W[34]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $53380d139d95b3df + W[35]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $650a73548baf63de + W[36]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $766a0abb3c77b2a8 + W[37]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $81c2c92e47edaee6 + W[38]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $92722c851482353b + W[39]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $a2bfe8a14cf10364 + W[40]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a81a664bbc423001 + W[41]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $c24b8b70d0f89791 + W[42]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $c76c51a30654be30 + W[43]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $d192e819d6ef5218 + W[44]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d69906245565a910 + W[45]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $f40e35855771202a + W[46]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $106aa07032bbd1b8 + W[47]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $19a4c116b8d2d0c8 + W[48]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $1e376c085141ab53 + W[49]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $2748774cdf8eeb99 + W[50]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $34b0bcb5e19b48a8 + W[51]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $391c0cb3c5c95a63 + W[52]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4ed8aa4ae3418acb + W[53]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5b9cca4f7763e373 + W[54]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $682e6ff3d6b2b8a3 + W[55]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $748f82ee5defb2fc + W[56]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $78a5636f43172f60 + W[57]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $84c87814a1f0ab72 + W[58]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $8cc702081a6439ec + W[59]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $90befffa23631e28 + W[60]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $a4506cebde82bde9 + W[61]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $bef9a3f7b2c67915 + W[62]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c67178f2e372532b + W[63]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $ca273eceea26619c + W[64]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $d186b8c721c0c207 + W[65]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $eada7dd6cde0eb1e + W[66]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $f57d4f7fee6ed178 + W[67]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $06f067aa72176fba + W[68]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $0a637dc5a2c898a6 + W[69]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $113f9804bef90dae + W[70]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $1b710b35131c471b + W[71]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $28db77f523047d84 + W[72]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $32caab7b40c72493 + W[73]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $3c9ebe0a15c9bebc + W[74]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $431d67c49c100d4c + W[75]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $4cc5d4becb3e42b6 + W[76]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $597f299cfc657e2a + W[77]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5fcb6fab3ad6faec + W[78]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $6c44198c4a475817 + W[79]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; CurrentHash[0]:= CurrentHash[0] + a; CurrentHash[1]:= CurrentHash[1] + b; CurrentHash[2]:= CurrentHash[2] + c; CurrentHash[3]:= CurrentHash[3] + d; CurrentHash[4]:= CurrentHash[4] + e; CurrentHash[5]:= CurrentHash[5] + f; CurrentHash[6]:= CurrentHash[6] + g; CurrentHash[7]:= CurrentHash[7] + h; end; begin while (BufferCount > 0) do begin sha512_compress(CurrentHash, PInt64(HashBuffer)); Inc(HashBuffer, 128); Dec(BufferCount); end; end; procedure TDCP_sha512base.Compress; begin Index:= 0; FCompress(@HashBuffer[0], @CurrentHash[0], 1); FillChar(HashBuffer, Sizeof(HashBuffer), 0); end; procedure TDCP_sha512base.Init; begin {$IF DEFINED(CPUX86_64)} if SSSE3Support then FCompress:= @sha512_compress_sse else {$ENDIF} FCompress:= @sha512_compress_pas; end; procedure TDCP_sha512base.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha512base.Update(const Buffer; Size: longword); var PBuf: ^byte; Count: Integer; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Index > 0) and ((Sizeof(HashBuffer)-Index)<= DWord(Size)) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Count:= Size div SizeOf(HashBuffer); if Count > 0 then begin FCompress(PBuf, @CurrentHash[0], Count); Inc(PBuf, Count * Sizeof(HashBuffer)); Dec(Size, Count * Sizeof(HashBuffer)); end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; end; {******************************************************************************} class function TDCP_sha384.GetAlgorithm: string; begin Result:= 'SHA384'; end; class function TDCP_sha384.GetId: integer; begin Result:= DCP_sha384; end; class function TDCP_sha384.GetHashSize: integer; begin Result:= 384; end; class function TDCP_sha384.SelfTest: boolean; const Test1Out: array[0..47] of byte= ($cb,$00,$75,$3f,$45,$a3,$5e,$8b,$b5,$a0,$3d,$69,$9a,$c6,$50,$07, $27,$2c,$32,$ab,$0e,$de,$d1,$63,$1a,$8b,$60,$5a,$43,$ff,$5b,$ed, $80,$86,$07,$2b,$a1,$e7,$cc,$23,$58,$ba,$ec,$a1,$34,$c8,$25,$a7); Test2Out: array[0..47] of byte= ($09,$33,$0c,$33,$f7,$11,$47,$e8,$3d,$19,$2f,$c7,$82,$cd,$1b,$47, $53,$11,$1b,$17,$3b,$3b,$05,$d2,$2f,$a0,$80,$86,$e3,$b0,$f7,$12, $fc,$c7,$c7,$1a,$55,$7e,$2d,$b9,$66,$c3,$e9,$fa,$91,$74,$60,$39); var TestHash: TDCP_sha384; TestOut: array[0..47] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha384.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha384.Init; begin Burn; inherited Init; CurrentHash[0]:= $cbbb9d5dc1059ed8; CurrentHash[1]:= $629a292a367cd507; CurrentHash[2]:= $9159015a3070dd17; CurrentHash[3]:= $152fecd8f70e5939; CurrentHash[4]:= $67332667ffc00b31; CurrentHash[5]:= $8eb44a8768581511; CurrentHash[6]:= $db0c2e0d64f98fa7; CurrentHash[7]:= $47b5481dbefa4fa4; fInitialized:= true; end; procedure TDCP_sha384.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 112 then Compress; Pint64(@HashBuffer[112])^:= SwapEndian(LenHi); Pint64(@HashBuffer[120])^:= SwapEndian(LenLo); Compress; CurrentHash[0]:= SwapEndian(CurrentHash[0]); CurrentHash[1]:= SwapEndian(CurrentHash[1]); CurrentHash[2]:= SwapEndian(CurrentHash[2]); CurrentHash[3]:= SwapEndian(CurrentHash[3]); CurrentHash[4]:= SwapEndian(CurrentHash[4]); CurrentHash[5]:= SwapEndian(CurrentHash[5]); Move(CurrentHash,Digest,384 div 8); Burn; end; {******************************************************************************} class function TDCP_sha512.GetAlgorithm: string; begin Result:= 'SHA512'; end; class function TDCP_sha512.GetId: integer; begin Result:= DCP_sha512; end; class function TDCP_sha512.GetHashSize: integer; begin Result:= 512; end; class function TDCP_sha512.SelfTest: boolean; const Test1Out: array[0..63] of byte= ($dd,$af,$35,$a1,$93,$61,$7a,$ba,$cc,$41,$73,$49,$ae,$20,$41,$31, $12,$e6,$fa,$4e,$89,$a9,$7e,$a2,$0a,$9e,$ee,$e6,$4b,$55,$d3,$9a, $21,$92,$99,$2a,$27,$4f,$c1,$a8,$36,$ba,$3c,$23,$a3,$fe,$eb,$bd, $45,$4d,$44,$23,$64,$3c,$e8,$0e,$2a,$9a,$c9,$4f,$a5,$4c,$a4,$9f); Test2Out: array[0..63] of byte= ($8e,$95,$9b,$75,$da,$e3,$13,$da,$8c,$f4,$f7,$28,$14,$fc,$14,$3f, $8f,$77,$79,$c6,$eb,$9f,$7f,$a1,$72,$99,$ae,$ad,$b6,$88,$90,$18, $50,$1d,$28,$9e,$49,$00,$f7,$e4,$33,$1b,$99,$de,$c4,$b5,$43,$3a, $c7,$d3,$29,$ee,$b6,$dd,$26,$54,$5e,$96,$e5,$5b,$87,$4b,$e9,$09); var TestHash: TDCP_sha512; TestOut: array[0..63] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha512.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha512.Init; begin Burn; inherited Init; CurrentHash[0]:= $6a09e667f3bcc908; CurrentHash[1]:= $bb67ae8584caa73b; CurrentHash[2]:= $3c6ef372fe94f82b; CurrentHash[3]:= $a54ff53a5f1d36f1; CurrentHash[4]:= $510e527fade682d1; CurrentHash[5]:= $9b05688c2b3e6c1f; CurrentHash[6]:= $1f83d9abfb41bd6b; CurrentHash[7]:= $5be0cd19137e2179; fInitialized:= true; end; procedure TDCP_sha512.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 112 then Compress; Pint64(@HashBuffer[112])^:= SwapEndian(LenHi); Pint64(@HashBuffer[120])^:= SwapEndian(LenLo); Compress; CurrentHash[0]:= SwapEndian(CurrentHash[0]); CurrentHash[1]:= SwapEndian(CurrentHash[1]); CurrentHash[2]:= SwapEndian(CurrentHash[2]); CurrentHash[3]:= SwapEndian(CurrentHash[3]); CurrentHash[4]:= SwapEndian(CurrentHash[4]); CurrentHash[5]:= SwapEndian(CurrentHash[5]); CurrentHash[6]:= SwapEndian(CurrentHash[6]); CurrentHash[7]:= SwapEndian(CurrentHash[7]); Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpsha3.pas���������������������������������������������0000644�0001750�0000144�00000012142�15104114162�022057� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA3 (224, 256, 384, 512) ************} {******************************************************************************} {* Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCPcrypt2, DCPconst, SHA3; type { TDCP_sha3base } TDCP_sha3base = class(TDCP_hash) protected FState: TSHA3State; public procedure Final(var Digest); override; procedure Update(const Buffer; Size: longword); override; end; { TDCP_sha3_224 } TDCP_sha3_224 = class(TDCP_sha3base) public class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; { TDCP_sha3_256 } TDCP_sha3_256 = class(TDCP_sha3base) public class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; { TDCP_sha3_384 } TDCP_sha3_384 = class(TDCP_sha3base) public class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; { TDCP_sha3_512 } TDCP_sha3_512 = class(TDCP_sha3base) public class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; implementation { TDCP_sha3base } procedure TDCP_sha3base.Final(var Digest); begin SHA3_FinalBit_LSB(FState, 0, 0, @Digest, FState.fixedOutputLength); end; procedure TDCP_sha3base.Update(const Buffer; Size: longword); begin SHA3_UpdateXL(FState, @Buffer, Size); end; { TDCP_sha3_224 } class function TDCP_sha3_224.GetAlgorithm: string; begin Result:= 'SHA3_224'; end; class function TDCP_sha3_224.GetHashSize: integer; begin Result:= 224; end; class function TDCP_sha3_224.SelfTest: boolean; begin Result:= False; // TODO: SelfTest SHA3_224 end; procedure TDCP_sha3_224.Init; begin SHA3_Init(FState, __SHA3_224); end; { TDCP_sha3_256 } class function TDCP_sha3_256.GetAlgorithm: string; begin Result:= 'SHA3_256'; end; class function TDCP_sha3_256.GetHashSize: integer; begin Result:= 256; end; class function TDCP_sha3_256.SelfTest: boolean; begin Result:= False; // TODO: SelfTest SHA3_256 end; procedure TDCP_sha3_256.Init; begin SHA3_Init(FState, __SHA3_256); end; { TDCP_sha3_384 } class function TDCP_sha3_384.GetAlgorithm: string; begin Result:= 'SHA3_384'; end; class function TDCP_sha3_384.GetHashSize: integer; begin Result:= 384; end; class function TDCP_sha3_384.SelfTest: boolean; begin Result:= False; // TODO: SelfTest SHA3_384 end; procedure TDCP_sha3_384.Init; begin SHA3_Init(FState, __SHA3_384); end; { TDCP_sha3_512 } class function TDCP_sha3_512.GetAlgorithm: string; begin Result:= 'SHA3_512'; end; class function TDCP_sha3_512.GetHashSize: integer; begin Result:= 512; end; class function TDCP_sha3_512.SelfTest: boolean; begin Result:= False; // TODO: SelfTest SHA3_512 end; procedure TDCP_sha3_512.Init; begin SHA3_Init(FState, __SHA3_512); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpsha256.pas�������������������������������������������0000644�0001750�0000144�00000072745�15104114162�022250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA256 *******************************} {******************************************************************************} {* Copyright (C) 1999-2002 David Barton *} {* Copyright (C) 2016-2018 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha256; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type { TDCP_sha256base } TDCP_sha256base = class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..7] of DWord; HashBuffer: array[0..63] of byte; FCompress: procedure(CurrentHash: PLongWord; HashBuffer: PByte; BufferCount: UIntPtr); register; procedure Compress; public procedure Init; override; procedure Final(var Digest); override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; end; { TDCP_sha224 } TDCP_sha224 = class(TDCP_sha256base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; { TDCP_sha256 } TDCP_sha256 = class(TDCP_sha256base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$IF DEFINED(CPUX86_64)} uses CPU; {$include sha256_sse.inc} {$include sha256_avx.inc} {$ENDIF} procedure sha256_compress_pas(CurrentHash: PLongWord; HashBuffer: PByte; BufferCount: UIntPtr); register; procedure sha256_compress(CurrentHash: PLongWord; HashBuffer: PLongWord); var a, b, c, d, e, f, g, h, t1, t2: DWord; W: array[0..63] of DWord; i: longword; begin a:= CurrentHash[0]; b:= CurrentHash[1]; c:= CurrentHash[2]; d:= CurrentHash[3]; e:= CurrentHash[4]; f:= CurrentHash[5]; g:= CurrentHash[6]; h:= CurrentHash[7]; for i:= 0 to 15 do W[i]:= SwapEndian(HashBuffer[i]); for i:= 16 to 63 do W[i]:= (((W[i-2] shr 17) or (W[i-2] shl 15)) xor ((W[i-2] shr 19) or (W[i-2] shl 13)) xor (W[i-2] shr 10)) + W[i-7] + (((W[i-15] shr 7) or (W[i-15] shl 25)) xor ((W[i-15] shr 18) or (W[i-15] shl 14)) xor (W[i-15] shr 3)) + W[i-16]; { Non-optimised version for i:= 0 to 63 do begin t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + K[i] + W[i]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= g; g:= f; f:= e; e:= d + t1; d:= c; c:= b; b:= a; a:= t1 + t2; end; } t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $428a2f98 + W[0]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $71374491 + W[1]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $b5c0fbcf + W[2]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $e9b5dba5 + W[3]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $3956c25b + W[4]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $59f111f1 + W[5]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $923f82a4 + W[6]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $ab1c5ed5 + W[7]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $d807aa98 + W[8]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $12835b01 + W[9]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $243185be + W[10]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $550c7dc3 + W[11]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $72be5d74 + W[12]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $80deb1fe + W[13]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $9bdc06a7 + W[14]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $c19bf174 + W[15]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $e49b69c1 + W[16]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $efbe4786 + W[17]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $0fc19dc6 + W[18]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $240ca1cc + W[19]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $2de92c6f + W[20]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $4a7484aa + W[21]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $5cb0a9dc + W[22]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $76f988da + W[23]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $983e5152 + W[24]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $a831c66d + W[25]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $b00327c8 + W[26]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $bf597fc7 + W[27]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $c6e00bf3 + W[28]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $d5a79147 + W[29]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $06ca6351 + W[30]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $14292967 + W[31]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $27b70a85 + W[32]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $2e1b2138 + W[33]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $4d2c6dfc + W[34]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $53380d13 + W[35]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $650a7354 + W[36]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $766a0abb + W[37]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $81c2c92e + W[38]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $92722c85 + W[39]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $a2bfe8a1 + W[40]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $a81a664b + W[41]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $c24b8b70 + W[42]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $c76c51a3 + W[43]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $d192e819 + W[44]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $d6990624 + W[45]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $f40e3585 + W[46]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $106aa070 + W[47]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $19a4c116 + W[48]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $1e376c08 + W[49]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $2748774c + W[50]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $34b0bcb5 + W[51]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $391c0cb3 + W[52]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $4ed8aa4a + W[53]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $5b9cca4f + W[54]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $682e6ff3 + W[55]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $748f82ee + W[56]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $78a5636f + W[57]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $84c87814 + W[58]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $8cc70208 + W[59]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $90befffa + W[60]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $a4506ceb + W[61]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $bef9a3f7 + W[62]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $c67178f2 + W[63]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; CurrentHash[0]:= CurrentHash[0] + a; CurrentHash[1]:= CurrentHash[1] + b; CurrentHash[2]:= CurrentHash[2] + c; CurrentHash[3]:= CurrentHash[3] + d; CurrentHash[4]:= CurrentHash[4] + e; CurrentHash[5]:= CurrentHash[5] + f; CurrentHash[6]:= CurrentHash[6] + g; CurrentHash[7]:= CurrentHash[7] + h; end; begin while (BufferCount > 0) do begin sha256_compress(CurrentHash, PLongWord(HashBuffer)); Inc(HashBuffer, 64); Dec(BufferCount); end; end; procedure TDCP_sha256base.Compress; begin Index:= 0; FCompress(@CurrentHash[0], @HashBuffer[0], 1); FillChar(HashBuffer, Sizeof(HashBuffer), 0); end; procedure TDCP_sha256base.Init; begin {$IF DEFINED(CPUX86_64)} if AVX2Support and BMI2Support then FCompress:= @sha256_compress_avx else if SSSE3Support then FCompress:= @sha256_compress_sse else {$ENDIF} FCompress:= @sha256_compress_pas; end; procedure TDCP_sha256base.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha256base.Update(const Buffer; Size: longword); var PBuf: ^byte; Count: Integer; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Index > 0) and ((Sizeof(HashBuffer)-Index)<= DWord(Size)) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Count:= Size div SizeOf(HashBuffer); if Count > 0 then begin FCompress(@CurrentHash[0], PBuf, Count); Inc(PBuf, Count * Sizeof(HashBuffer)); Dec(Size, Count * Sizeof(HashBuffer)); end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; end; procedure TDCP_sha256base.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= SwapEndian(LenHi); PDWord(@HashBuffer[60])^:= SwapEndian(LenLo); Compress; CurrentHash[0]:= SwapEndian(CurrentHash[0]); CurrentHash[1]:= SwapEndian(CurrentHash[1]); CurrentHash[2]:= SwapEndian(CurrentHash[2]); CurrentHash[3]:= SwapEndian(CurrentHash[3]); CurrentHash[4]:= SwapEndian(CurrentHash[4]); CurrentHash[5]:= SwapEndian(CurrentHash[5]); CurrentHash[6]:= SwapEndian(CurrentHash[6]); CurrentHash[7]:= SwapEndian(CurrentHash[7]); Move(CurrentHash, Digest, GetHashSize div 8); Burn; end; { TDCP_sha224 } class function TDCP_sha224.GetId: integer; begin Result:= 0; end; class function TDCP_sha224.GetAlgorithm: string; begin Result:= 'SHA224'; end; class function TDCP_sha224.GetHashSize: integer; begin Result:= 224; end; class function TDCP_sha224.SelfTest: boolean; begin Result:= False; // TODO: SelfTest SHA2_224 end; procedure TDCP_sha224.Init; begin Burn; inherited Init; CurrentHash[0]:= $C1059ED8; CurrentHash[1]:= $367CD507; CurrentHash[2]:= $3070DD17; CurrentHash[3]:= $F70E5939; CurrentHash[4]:= $FFC00B31; CurrentHash[5]:= $68581511; CurrentHash[6]:= $64F98FA7; CurrentHash[7]:= $BEFA4FA4; fInitialized:= True; end; { TDCP_sha256 } class function TDCP_sha256.GetAlgorithm: string; begin Result:= 'SHA256'; end; class function TDCP_sha256.GetId: integer; begin Result:= DCP_sha256; end; class function TDCP_sha256.GetHashSize: integer; begin Result:= 256; end; class function TDCP_sha256.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($ba,$78,$16,$bf,$8f,$01,$cf,$ea,$41,$41,$40,$de,$5d,$ae,$22,$23, $b0,$03,$61,$a3,$96,$17,$7a,$9c,$b4,$10,$ff,$61,$f2,$00,$15,$ad); Test2Out: array[0..31] of byte= ($24,$8d,$6a,$61,$d2,$06,$38,$b8,$e5,$c0,$26,$93,$0c,$3e,$60,$39, $a3,$3c,$e4,$59,$64,$ff,$21,$67,$f6,$ec,$ed,$d4,$19,$db,$06,$c1); var TestHash: TDCP_sha256; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha256.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha256.Init; begin Burn; inherited Init; CurrentHash[0]:= $6a09e667; CurrentHash[1]:= $bb67ae85; CurrentHash[2]:= $3c6ef372; CurrentHash[3]:= $a54ff53a; CurrentHash[4]:= $510e527f; CurrentHash[5]:= $9b05688c; CurrentHash[6]:= $1f83d9ab; CurrentHash[7]:= $5be0cd19; fInitialized:= true; end; end. ���������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpsha1.pas���������������������������������������������0000644�0001750�0000144�00000035501�15104114162�022061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA1 *********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha1; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_sha1= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..4] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function SwapDWord(a: dword): dword; begin Result:= ((a and $FF) shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24); end; procedure TDCP_sha1.Compress; var A, B, C, D, E: DWord; W: array[0..79] of DWord; i: longword; begin Index:= 0; dcpFillChar(W, SizeOf(W), 0); Move(HashBuffer,W,Sizeof(HashBuffer)); for i:= 0 to 15 do W[i]:= SwapDWord(W[i]); for i:= 16 to 79 do W[i]:= ((W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]) shl 1) or ((W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]) shr 31); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; E:= CurrentHash[4]; Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[ 0]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[ 1]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[ 2]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[ 3]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[ 4]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[ 5]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[ 6]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[ 7]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[ 8]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[ 9]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[10]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[11]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[12]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[13]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[14]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[15]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[16]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[17]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[18]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[19]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[20]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[21]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[22]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[23]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[24]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[25]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[26]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[27]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[28]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[29]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[30]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[31]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[32]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[33]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[34]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[35]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[36]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[37]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[38]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[39]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[40]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[41]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[42]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[43]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[44]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[45]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[46]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[47]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[48]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[49]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[50]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[51]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[52]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[53]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[54]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[55]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[56]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[57]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[58]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[59]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[60]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[61]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[62]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[63]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[64]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[65]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[66]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[67]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[68]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[69]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[70]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[71]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[72]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[73]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[74]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[75]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[76]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[77]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[78]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[79]); C:= (C shl 30) or (C shr 2); CurrentHash[0]:= CurrentHash[0] + A; CurrentHash[1]:= CurrentHash[1] + B; CurrentHash[2]:= CurrentHash[2] + C; CurrentHash[3]:= CurrentHash[3] + D; CurrentHash[4]:= CurrentHash[4] + E; FillChar(W,Sizeof(W),0); FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_sha1.GetAlgorithm: string; begin Result:= 'SHA1'; end; class function TDCP_sha1.GetId: integer; begin Result:= DCP_sha1; end; class function TDCP_sha1.GetHashSize: integer; begin Result:= 160; end; class function TDCP_sha1.SelfTest: boolean; const Test1Out: array[0..19] of byte= ($A9,$99,$3E,$36,$47,$06,$81,$6A,$BA,$3E,$25,$71,$78,$50,$C2,$6C,$9C,$D0,$D8,$9D); Test2Out: array[0..19] of byte= ($84,$98,$3E,$44,$1C,$3B,$D2,$6E,$BA,$AE,$4A,$A1,$F9,$51,$29,$E5,$E5,$46,$70,$F1); var TestHash: TDCP_sha1; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha1.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha1.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $EFCDAB89; CurrentHash[2]:= $98BADCFE; CurrentHash[3]:= $10325476; CurrentHash[4]:= $C3D2E1F0; fInitialized:= true; end; procedure TDCP_sha1.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha1.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_sha1.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= SwapDWord(LenHi); PDWord(@HashBuffer[60])^:= SwapDWord(LenLo); Compress; CurrentHash[0]:= SwapDWord(CurrentHash[0]); CurrentHash[1]:= SwapDWord(CurrentHash[1]); CurrentHash[2]:= SwapDWord(CurrentHash[2]); CurrentHash[3]:= SwapDWord(CurrentHash[3]); CurrentHash[4]:= SwapDWord(CurrentHash[4]); Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpripemd160.pas����������������������������������������0000644�0001750�0000144�00000073450�15104114162�022741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of RipeMD-160 ***************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPripemd160; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_ripemd160= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..4] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_ripemd160.Compress; var aa, bb, cc, dd, ee, aaa, bbb, ccc, ddd, eee: DWord; X: array[0..15] of DWord; begin dcpFillChar(X, SizeOf(X), 0); Move(HashBuffer,X,Sizeof(X)); aa:= CurrentHash[0]; aaa:= CurrentHash[0]; bb:= CurrentHash[1]; bbb:= CurrentHash[1]; cc:= CurrentHash[2]; ccc:= CurrentHash[2]; dd:= CurrentHash[3]; ddd:= CurrentHash[3]; ee:= CurrentHash[4]; eee:= CurrentHash[4]; aa:= aa + (bb xor cc xor dd) + X[ 0]; aa:= ((aa shl 11) or (aa shr (32-11))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[ 1]; ee:= ((ee shl 14) or (ee shr (32-14))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[ 2]; dd:= ((dd shl 15) or (dd shr (32-15))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[ 3]; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[ 4]; bb:= ((bb shl 5) or (bb shr (32-5))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[ 5]; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[ 6]; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[ 7]; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[ 8]; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[ 9]; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[10]; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[11]; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[12]; dd:= ((dd shl 6) or (dd shr (32-6))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[13]; cc:= ((cc shl 7) or (cc shr (32-7))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[14]; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[15]; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 7] + $5a827999; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[ 4] + $5a827999; dd:= ((dd shl 6) or (dd shr (32-6))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[13] + $5a827999; cc:= ((cc shl 8) or (cc shr (32-8))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[ 1] + $5a827999; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[10] + $5a827999; aa:= ((aa shl 11) or (aa shr (32-11))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 6] + $5a827999; ee:= ((ee shl 9) or (ee shr (32-9))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[15] + $5a827999; dd:= ((dd shl 7) or (dd shr (32-7))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[ 3] + $5a827999; cc:= ((cc shl 15) or (cc shr (32-15))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[12] + $5a827999; bb:= ((bb shl 7) or (bb shr (32-7))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[ 0] + $5a827999; aa:= ((aa shl 12) or (aa shr (32-12))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 9] + $5a827999; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[ 5] + $5a827999; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[ 2] + $5a827999; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[14] + $5a827999; bb:= ((bb shl 7) or (bb shr (32-7))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[11] + $5a827999; aa:= ((aa shl 13) or (aa shr (32-13))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 8] + $5a827999; ee:= ((ee shl 12) or (ee shr (32-12))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[ 3] + $6ed9eba1; dd:= ((dd shl 11) or (dd shr (32-11))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[10] + $6ed9eba1; cc:= ((cc shl 13) or (cc shr (32-13))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[14] + $6ed9eba1; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[ 4] + $6ed9eba1; aa:= ((aa shl 7) or (aa shr (32-7))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 9] + $6ed9eba1; ee:= ((ee shl 14) or (ee shr (32-14))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[15] + $6ed9eba1; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[ 8] + $6ed9eba1; cc:= ((cc shl 13) or (cc shr (32-13))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[ 1] + $6ed9eba1; bb:= ((bb shl 15) or (bb shr (32-15))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[ 2] + $6ed9eba1; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 7] + $6ed9eba1; ee:= ((ee shl 8) or (ee shr (32-8))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[ 0] + $6ed9eba1; dd:= ((dd shl 13) or (dd shr (32-13))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[ 6] + $6ed9eba1; cc:= ((cc shl 6) or (cc shr (32-6))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[13] + $6ed9eba1; bb:= ((bb shl 5) or (bb shr (32-5))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[11] + $6ed9eba1; aa:= ((aa shl 12) or (aa shr (32-12))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 5] + $6ed9eba1; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[12] + $6ed9eba1; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 1] + $8f1bbcdc; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[ 9] + $8f1bbcdc; bb:= ((bb shl 12) or (bb shr (32-12))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[11] + $8f1bbcdc; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[10] + $8f1bbcdc; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 0] + $8f1bbcdc; dd:= ((dd shl 14) or (dd shr (32-14))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 8] + $8f1bbcdc; cc:= ((cc shl 15) or (cc shr (32-15))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[12] + $8f1bbcdc; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[ 4] + $8f1bbcdc; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[13] + $8f1bbcdc; ee:= ((ee shl 9) or (ee shr (32-9))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 3] + $8f1bbcdc; dd:= ((dd shl 14) or (dd shr (32-14))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 7] + $8f1bbcdc; cc:= ((cc shl 5) or (cc shr (32-5))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[15] + $8f1bbcdc; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[14] + $8f1bbcdc; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[ 5] + $8f1bbcdc; ee:= ((ee shl 6) or (ee shr (32-6))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 6] + $8f1bbcdc; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 2] + $8f1bbcdc; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[ 4] + $a953fd4e; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 0] + $a953fd4e; aa:= ((aa shl 15) or (aa shr (32-15))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[ 5] + $a953fd4e; ee:= ((ee shl 5) or (ee shr (32-5))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[ 9] + $a953fd4e; dd:= ((dd shl 11) or (dd shr (32-11))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[ 7] + $a953fd4e; cc:= ((cc shl 6) or (cc shr (32-6))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[12] + $a953fd4e; bb:= ((bb shl 8) or (bb shr (32-8))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 2] + $a953fd4e; aa:= ((aa shl 13) or (aa shr (32-13))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[10] + $a953fd4e; ee:= ((ee shl 12) or (ee shr (32-12))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[14] + $a953fd4e; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[ 1] + $a953fd4e; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[ 3] + $a953fd4e; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 8] + $a953fd4e; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[11] + $a953fd4e; ee:= ((ee shl 11) or (ee shr (32-11))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[ 6] + $a953fd4e; dd:= ((dd shl 8) or (dd shr (32-8))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[15] + $a953fd4e; cc:= ((cc shl 5) or (cc shr (32-5))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[13] + $a953fd4e; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[ 5] + $50a28be6; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[14] + $50a28be6; eee:= ((eee shl 9) or (eee shr (32-9))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 7] + $50a28be6; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[ 0] + $50a28be6; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 9] + $50a28be6; bbb:= ((bbb shl 13) or (bbb shr (32-13))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[ 2] + $50a28be6; aaa:= ((aaa shl 15) or (aaa shr (32-15))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[11] + $50a28be6; eee:= ((eee shl 15) or (eee shr (32-15))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 4] + $50a28be6; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[13] + $50a28be6; ccc:= ((ccc shl 7) or (ccc shr (32-7))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 6] + $50a28be6; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[15] + $50a28be6; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[ 8] + $50a28be6; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 1] + $50a28be6; ddd:= ((ddd shl 14) or (ddd shr (32-14))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[10] + $50a28be6; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 3] + $50a28be6; bbb:= ((bbb shl 12) or (bbb shr (32-12))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[12] + $50a28be6; aaa:= ((aaa shl 6) or (aaa shr (32-6))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 6] + $5c4dd124; eee:= ((eee shl 9) or (eee shr (32-9))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[11] + $5c4dd124; ddd:= ((ddd shl 13) or (ddd shr (32-13))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[ 3] + $5c4dd124; ccc:= ((ccc shl 15) or (ccc shr (32-15))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[ 7] + $5c4dd124; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[ 0] + $5c4dd124; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[13] + $5c4dd124; eee:= ((eee shl 8) or (eee shr (32-8))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[ 5] + $5c4dd124; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[10] + $5c4dd124; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[14] + $5c4dd124; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[15] + $5c4dd124; aaa:= ((aaa shl 7) or (aaa shr (32-7))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 8] + $5c4dd124; eee:= ((eee shl 12) or (eee shr (32-12))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[12] + $5c4dd124; ddd:= ((ddd shl 7) or (ddd shr (32-7))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[ 4] + $5c4dd124; ccc:= ((ccc shl 6) or (ccc shr (32-6))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[ 9] + $5c4dd124; bbb:= ((bbb shl 15) or (bbb shr (32-15))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[ 1] + $5c4dd124; aaa:= ((aaa shl 13) or (aaa shr (32-13))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 2] + $5c4dd124; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[15] + $6d703ef3; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 5] + $6d703ef3; ccc:= ((ccc shl 7) or (ccc shr (32-7))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[ 1] + $6d703ef3; bbb:= ((bbb shl 15) or (bbb shr (32-15))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[ 3] + $6d703ef3; aaa:= ((aaa shl 11) or (aaa shr (32-11))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 7] + $6d703ef3; eee:= ((eee shl 8) or (eee shr (32-8))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[14] + $6d703ef3; ddd:= ((ddd shl 6) or (ddd shr (32-6))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 6] + $6d703ef3; ccc:= ((ccc shl 6) or (ccc shr (32-6))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[ 9] + $6d703ef3; bbb:= ((bbb shl 14) or (bbb shr (32-14))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[11] + $6d703ef3; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 8] + $6d703ef3; eee:= ((eee shl 13) or (eee shr (32-13))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[12] + $6d703ef3; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 2] + $6d703ef3; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[10] + $6d703ef3; bbb:= ((bbb shl 13) or (bbb shr (32-13))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[ 0] + $6d703ef3; aaa:= ((aaa shl 13) or (aaa shr (32-13))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 4] + $6d703ef3; eee:= ((eee shl 7) or (eee shr (32-7))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[13] + $6d703ef3; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[ 8] + $7a6d76e9; ccc:= ((ccc shl 15) or (ccc shr (32-15))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[ 6] + $7a6d76e9; bbb:= ((bbb shl 5) or (bbb shr (32-5))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 4] + $7a6d76e9; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 1] + $7a6d76e9; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[ 3] + $7a6d76e9; ddd:= ((ddd shl 14) or (ddd shr (32-14))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[11] + $7a6d76e9; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[15] + $7a6d76e9; bbb:= ((bbb shl 6) or (bbb shr (32-6))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 0] + $7a6d76e9; aaa:= ((aaa shl 14) or (aaa shr (32-14))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 5] + $7a6d76e9; eee:= ((eee shl 6) or (eee shr (32-6))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[12] + $7a6d76e9; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[ 2] + $7a6d76e9; ccc:= ((ccc shl 12) or (ccc shr (32-12))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[13] + $7a6d76e9; bbb:= ((bbb shl 9) or (bbb shr (32-9))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 9] + $7a6d76e9; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 7] + $7a6d76e9; eee:= ((eee shl 5) or (eee shr (32-5))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[10] + $7a6d76e9; ddd:= ((ddd shl 15) or (ddd shr (32-15))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[14] + $7a6d76e9; ccc:= ((ccc shl 8) or (ccc shr (32-8))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[12]; bbb:= ((bbb shl 8) or (bbb shr (32-8))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[15]; aaa:= ((aaa shl 5) or (aaa shr (32-5))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[10]; eee:= ((eee shl 12) or (eee shr (32-12))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 4]; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 1]; ccc:= ((ccc shl 12) or (ccc shr (32-12))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[ 5]; bbb:= ((bbb shl 5) or (bbb shr (32-5))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[ 8]; aaa:= ((aaa shl 14) or (aaa shr (32-14))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[ 7]; eee:= ((eee shl 6) or (eee shr (32-6))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 6]; ddd:= ((ddd shl 8) or (ddd shr (32-8))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 2]; ccc:= ((ccc shl 13) or (ccc shr (32-13))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[13]; bbb:= ((bbb shl 6) or (bbb shr (32-6))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[14]; aaa:= ((aaa shl 5) or (aaa shr (32-5))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[ 0]; eee:= ((eee shl 15) or (eee shr (32-15))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 3]; ddd:= ((ddd shl 13) or (ddd shr (32-13))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 9]; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[11]; bbb:= ((bbb shl 11) or (bbb shr (32-11))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); ddd:= ddd + cc + CurrentHash[1]; CurrentHash[1]:= CurrentHash[2] + dd + eee; CurrentHash[2]:= CurrentHash[3] + ee + aaa; CurrentHash[3]:= CurrentHash[4] + aa + bbb; CurrentHash[4]:= CurrentHash[0] + bb + ccc; CurrentHash[0]:= ddd; FillChar(X,Sizeof(X),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_ripemd160.GetHashSize: integer; begin Result:= 160; end; class function TDCP_ripemd160.GetId: integer; begin Result:= DCP_ripemd160; end; class function TDCP_ripemd160.GetAlgorithm: string; begin Result:= 'RipeMD-160'; end; class function TDCP_ripemd160.SelfTest: boolean; const Test1Out: array[0..19] of byte= ($0B,$DC,$9D,$2D,$25,$6B,$3E,$E9,$DA,$AE,$34,$7B,$E6,$F4,$DC,$83,$5A,$46,$7F,$FE); Test2Out: array[0..19] of byte= ($F7,$1C,$27,$10,$9C,$69,$2C,$1B,$56,$BB,$DC,$EB,$5B,$9D,$28,$65,$B3,$70,$8D,$BC); var TestHash: TDCP_ripemd160; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_ripemd160.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_ripemd160.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; CurrentHash[4]:= $c3d2e1f0; fInitialized:= true; end; procedure TDCP_ripemd160.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_ripemd160.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_ripemd160.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpripemd128.pas����������������������������������������0000644�0001750�0000144�00000041016�15104114162�022736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of RipeMD-128 ***************************} {******************************************************************************} {* Copyright (c) 2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPripemd128; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_ripemd128= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_ripemd128.Compress; var X: array[0..15] of DWord; a, aa, b, bb, c, cc, d, dd, t: dword; begin dcpFillChar(X, SizeOf(X), 0); Move(HashBuffer,X,Sizeof(X)); a:= CurrentHash[0]; aa:= a; b:= CurrentHash[1]; bb:= b; c:= CurrentHash[2]; cc:= c; d:= CurrentHash[3]; dd:= d; t:= a + (b xor c xor d) + X[ 0]; a:= (t shl 11) or (t shr (32-11)); t:= d + (a xor b xor c) + X[ 1]; d:= (t shl 14) or (t shr (32-14)); t:= c + (d xor a xor b) + X[ 2]; c:= (t shl 15) or (t shr (32-15)); t:= b + (c xor d xor a) + X[ 3]; b:= (t shl 12) or (t shr (32-12)); t:= a + (b xor c xor d) + X[ 4]; a:= (t shl 5) or (t shr (32-5)); t:= d + (a xor b xor c) + X[ 5]; d:= (t shl 8) or (t shr (32-8)); t:= c + (d xor a xor b) + X[ 6]; c:= (t shl 7) or (t shr (32-7)); t:= b + (c xor d xor a) + X[ 7]; b:= (t shl 9) or (t shr (32-9)); t:= a + (b xor c xor d) + X[ 8]; a:= (t shl 11) or (t shr (32-11)); t:= d + (a xor b xor c) + X[ 9]; d:= (t shl 13) or (t shr (32-13)); t:= c + (d xor a xor b) + X[10]; c:= (t shl 14) or (t shr (32-14)); t:= b + (c xor d xor a) + X[11]; b:= (t shl 15) or (t shr (32-15)); t:= a + (b xor c xor d) + X[12]; a:= (t shl 6) or (t shr (32-6)); t:= d + (a xor b xor c) + X[13]; d:= (t shl 7) or (t shr (32-7)); t:= c + (d xor a xor b) + X[14]; c:= (t shl 9) or (t shr (32-9)); t:= b + (c xor d xor a) + X[15]; b:= (t shl 8) or (t shr (32-8)); t:= a + ((b and c) or (not b and d)) + X[ 7]+$5A827999; a:= (t shl 7) or (t shr (32-7)); t:= d + ((a and b) or (not a and c)) + X[ 4]+$5A827999; d:= (t shl 6) or (t shr (32-6)); t:= c + ((d and a) or (not d and b)) + X[13]+$5A827999; c:= (t shl 8) or (t shr (32-8)); t:= b + ((c and d) or (not c and a)) + X[ 1]+$5A827999; b:= (t shl 13) or (t shr (32-13)); t:= a + ((b and c) or (not b and d)) + X[10]+$5A827999; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and b) or (not a and c)) + X[ 6]+$5A827999; d:= (t shl 9) or (t shr (32-9)); t:= c + ((d and a) or (not d and b)) + X[15]+$5A827999; c:= (t shl 7) or (t shr (32-7)); t:= b + ((c and d) or (not c and a)) + X[ 3]+$5A827999; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b and c) or (not b and d)) + X[12]+$5A827999; a:= (t shl 7) or (t shr (32-7)); t:= d + ((a and b) or (not a and c)) + X[ 0]+$5A827999; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d and a) or (not d and b)) + X[ 9]+$5A827999; c:= (t shl 15) or (t shr (32-15)); t:= b + ((c and d) or (not c and a)) + X[ 5]+$5A827999; b:= (t shl 9) or (t shr (32-9)); t:= a + ((b and c) or (not b and d)) + X[ 2]+$5A827999; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and b) or (not a and c)) + X[14]+$5A827999; d:= (t shl 7) or (t shr (32-7)); t:= c + ((d and a) or (not d and b)) + X[11]+$5A827999; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c and d) or (not c and a)) + X[ 8]+$5A827999; b:= (t shl 12) or (t shr (32-12)); t:= a + ((b or not c) xor d) + X[ 3]+$6ED9EBA1; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a or not b) xor c) + X[10]+$6ED9EBA1; d:= (t shl 13) or (t shr (32-13)); t:= c + ((d or not a) xor b) + X[14]+$6ED9EBA1; c:= (t shl 6) or (t shr (32-6)); t:= b + ((c or not d) xor a) + X[ 4]+$6ED9EBA1; b:= (t shl 7) or (t shr (32-7)); t:= a + ((b or not c) xor d) + X[ 9]+$6ED9EBA1; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a or not b) xor c) + X[15]+$6ED9EBA1; d:= (t shl 9) or (t shr (32-9)); t:= c + ((d or not a) xor b) + X[ 8]+$6ED9EBA1; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c or not d) xor a) + X[ 1]+$6ED9EBA1; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b or not c) xor d) + X[ 2]+$6ED9EBA1; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a or not b) xor c) + X[ 7]+$6ED9EBA1; d:= (t shl 8) or (t shr (32-8)); t:= c + ((d or not a) xor b) + X[ 0]+$6ED9EBA1; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c or not d) xor a) + X[ 6]+$6ED9EBA1; b:= (t shl 6) or (t shr (32-6)); t:= a + ((b or not c) xor d) + X[13]+$6ED9EBA1; a:= (t shl 5) or (t shr (32-5)); t:= d + ((a or not b) xor c) + X[11]+$6ED9EBA1; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d or not a) xor b) + X[ 5]+$6ED9EBA1; c:= (t shl 7) or (t shr (32-7)); t:= b + ((c or not d) xor a) + X[12]+$6ED9EBA1; b:= (t shl 5) or (t shr (32-5)); t:= a + ((b and d) or (c and not d)) + X[ 1]+$8F1BBCDC; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and c) or (b and not c)) + X[ 9]+$8F1BBCDC; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d and b) or (a and not b)) + X[11]+$8F1BBCDC; c:= (t shl 14) or (t shr (32-14)); t:= b + ((c and a) or (d and not a)) + X[10]+$8F1BBCDC; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b and d) or (c and not d)) + X[ 0]+$8F1BBCDC; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a and c) or (b and not c)) + X[ 8]+$8F1BBCDC; d:= (t shl 15) or (t shr (32-15)); t:= c + ((d and b) or (a and not b)) + X[12]+$8F1BBCDC; c:= (t shl 9) or (t shr (32-9)); t:= b + ((c and a) or (d and not a)) + X[ 4]+$8F1BBCDC; b:= (t shl 8) or (t shr (32-8)); t:= a + ((b and d) or (c and not d)) + X[13]+$8F1BBCDC; a:= (t shl 9) or (t shr (32-9)); t:= d + ((a and c) or (b and not c)) + X[ 3]+$8F1BBCDC; d:= (t shl 14) or (t shr (32-14)); t:= c + ((d and b) or (a and not b)) + X[ 7]+$8F1BBCDC; c:= (t shl 5) or (t shr (32-5)); t:= b + ((c and a) or (d and not a)) + X[15]+$8F1BBCDC; b:= (t shl 6) or (t shr (32-6)); t:= a + ((b and d) or (c and not d)) + X[14]+$8F1BBCDC; a:= (t shl 8) or (t shr (32-8)); t:= d + ((a and c) or (b and not c)) + X[ 5]+$8F1BBCDC; d:= (t shl 6) or (t shr (32-6)); t:= c + ((d and b) or (a and not b)) + X[ 6]+$8F1BBCDC; c:= (t shl 5) or (t shr (32-5)); t:= b + ((c and a) or (d and not a)) + X[ 2]+$8F1BBCDC; b:= (t shl 12) or (t shr (32-12)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 5]+$50A28BE6; aa:= (t shl 8) or (t shr (32-8)); t:= dd + ((aa and cc) or (bb and not cc)) + X[14]+$50A28BE6; dd:= (t shl 9) or (t shr (32-9)); t:= cc + ((dd and bb) or (aa and not bb)) + X[ 7]+$50A28BE6; cc:= (t shl 9) or (t shr (32-9)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 0]+$50A28BE6; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 9]+$50A28BE6; aa:= (t shl 13) or (t shr (32-13)); t:= dd + ((aa and cc) or (bb and not cc)) + X[ 2]+$50A28BE6; dd:= (t shl 15) or (t shr (32-15)); t:= cc + ((dd and bb) or (aa and not bb)) + X[11]+$50A28BE6; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 4]+$50A28BE6; bb:= (t shl 5) or (t shr (32-5)); t:= aa + ((bb and dd) or (cc and not dd)) + X[13]+$50A28BE6; aa:= (t shl 7) or (t shr (32-7)); t:= dd + ((aa and cc) or (bb and not cc)) + X[ 6]+$50A28BE6; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd and bb) or (aa and not bb)) + X[15]+$50A28BE6; cc:= (t shl 8) or (t shr (32-8)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 8]+$50A28BE6; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 1]+$50A28BE6; aa:= (t shl 14) or (t shr (32-14)); t:= dd + ((aa and cc) or (bb and not cc)) + X[10]+$50A28BE6; dd:= (t shl 14) or (t shr (32-14)); t:= cc + ((dd and bb) or (aa and not bb)) + X[ 3]+$50A28BE6; cc:= (t shl 12) or (t shr (32-12)); t:= bb + ((cc and aa) or (dd and not aa)) + X[12]+$50A28BE6; bb:= (t shl 6) or (t shr (32-6)); t:= aa + ((bb or not cc) xor dd) + X[ 6]+$5C4DD124; aa:= (t shl 9) or (t shr (32-9)); t:= dd + ((aa or not bb) xor cc) + X[11]+$5C4DD124; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd or not aa) xor bb) + X[ 3]+$5C4DD124; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc or not dd) xor aa) + X[ 7]+$5C4DD124; bb:= (t shl 7) or (t shr (32-7)); t:= aa + ((bb or not cc) xor dd) + X[ 0]+$5C4DD124; aa:= (t shl 12) or (t shr (32-12)); t:= dd + ((aa or not bb) xor cc) + X[13]+$5C4DD124; dd:= (t shl 8) or (t shr (32-8)); t:= cc + ((dd or not aa) xor bb) + X[ 5]+$5C4DD124; cc:= (t shl 9) or (t shr (32-9)); t:= bb + ((cc or not dd) xor aa) + X[10]+$5C4DD124; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb or not cc) xor dd) + X[14]+$5C4DD124; aa:= (t shl 7) or (t shr (32-7)); t:= dd + ((aa or not bb) xor cc) + X[15]+$5C4DD124; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd or not aa) xor bb) + X[ 8]+$5C4DD124; cc:= (t shl 12) or (t shr (32-12)); t:= bb + ((cc or not dd) xor aa) + X[12]+$5C4DD124; bb:= (t shl 7) or (t shr (32-7)); t:= aa + ((bb or not cc) xor dd) + X[ 4]+$5C4DD124; aa:= (t shl 6) or (t shr (32-6)); t:= dd + ((aa or not bb) xor cc) + X[ 9]+$5C4DD124; dd:= (t shl 15) or (t shr (32-15)); t:= cc + ((dd or not aa) xor bb) + X[ 1]+$5C4DD124; cc:= (t shl 13) or (t shr (32-13)); t:= bb + ((cc or not dd) xor aa) + X[ 2]+$5C4DD124; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and cc) or (not bb and dd)) + X[15]+$6D703EF3; aa:= (t shl 9) or (t shr (32-9)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 5]+$6D703EF3; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 1]+$6D703EF3; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 3]+$6D703EF3; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and cc) or (not bb and dd)) + X[ 7]+$6D703EF3; aa:= (t shl 8) or (t shr (32-8)); t:= dd + ((aa and bb) or (not aa and cc)) + X[14]+$6D703EF3; dd:= (t shl 6) or (t shr (32-6)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 6]+$6D703EF3; cc:= (t shl 6) or (t shr (32-6)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 9]+$6D703EF3; bb:= (t shl 14) or (t shr (32-14)); t:= aa + ((bb and cc) or (not bb and dd)) + X[11]+$6D703EF3; aa:= (t shl 12) or (t shr (32-12)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 8]+$6D703EF3; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd and aa) or (not dd and bb)) + X[12]+$6D703EF3; cc:= (t shl 5) or (t shr (32-5)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 2]+$6D703EF3; bb:= (t shl 14) or (t shr (32-14)); t:= aa + ((bb and cc) or (not bb and dd)) + X[10]+$6D703EF3; aa:= (t shl 13) or (t shr (32-13)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 0]+$6D703EF3; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 4]+$6D703EF3; cc:= (t shl 7) or (t shr (32-7)); t:= bb + ((cc and dd) or (not cc and aa)) + X[13]+$6D703EF3; bb:= (t shl 5) or (t shr (32-5)); t:= aa + (bb xor cc xor dd) + X[ 8]; aa:= (t shl 15) or (t shr (32-15)); t:= dd + (aa xor bb xor cc) + X[ 6]; dd:= (t shl 5) or (t shr (32-5)); t:= cc + (dd xor aa xor bb) + X[ 4]; cc:= (t shl 8) or (t shr (32-8)); t:= bb + (cc xor dd xor aa) + X[ 1]; bb:= (t shl 11) or (t shr (32-11)); t:= aa + (bb xor cc xor dd) + X[ 3]; aa:= (t shl 14) or (t shr (32-14)); t:= dd + (aa xor bb xor cc) + X[11]; dd:= (t shl 14) or (t shr (32-14)); t:= cc + (dd xor aa xor bb) + X[15]; cc:= (t shl 6) or (t shr (32-6)); t:= bb + (cc xor dd xor aa) + X[ 0]; bb:= (t shl 14) or (t shr (32-14)); t:= aa + (bb xor cc xor dd) + X[ 5]; aa:= (t shl 6) or (t shr (32-6)); t:= dd + (aa xor bb xor cc) + X[12]; dd:= (t shl 9) or (t shr (32-9)); t:= cc + (dd xor aa xor bb) + X[ 2]; cc:= (t shl 12) or (t shr (32-12)); t:= bb + (cc xor dd xor aa) + X[13]; bb:= (t shl 9) or (t shr (32-9)); t:= aa + (bb xor cc xor dd) + X[ 9]; aa:= (t shl 12) or (t shr (32-12)); t:= dd + (aa xor bb xor cc) + X[ 7]; dd:= (t shl 5) or (t shr (32-5)); t:= cc + (dd xor aa xor bb) + X[10]; cc:= (t shl 15) or (t shr (32-15)); t:= bb + (cc xor dd xor aa) + X[14]; bb:= (t shl 8) or (t shr (32-8)); Inc(dd,c + CurrentHash[1]); CurrentHash[1]:= CurrentHash[2] + d + aa; CurrentHash[2]:= CurrentHash[3] + a + bb; CurrentHash[3]:= CurrentHash[0] + b + cc; CurrentHash[0]:= dd; FillChar(X,Sizeof(X),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_ripemd128.GetHashSize: integer; begin Result:= 128; end; class function TDCP_ripemd128.GetId: integer; begin Result:= DCP_ripemd128; end; class function TDCP_ripemd128.GetAlgorithm: string; begin Result:= 'RipeMD-128'; end; class function TDCP_ripemd128.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($86,$be,$7a,$fa,$33,$9d,$0f,$c7,$cf,$c7,$85,$e7,$2f,$57,$8d,$33); Test2Out: array[0..15] of byte= ($fd,$2a,$a6,$07,$f7,$1d,$c8,$f5,$10,$71,$49,$22,$b3,$71,$83,$4e); var TestHash: TDCP_ripemd128; TestOut: array[0..15] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_ripemd128.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_ripemd128.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_ripemd128.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_ripemd128.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_ripemd128.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpmd5.pas����������������������������������������������0000644�0001750�0000144�00000023636�15104114162�021720� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of MD5 **********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPmd5; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_md5= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$macro on}{$define LRot32:=RolDWord} procedure TDCP_md5.Compress; var Data: array[0..15] of dword; A, B, C, D: dword; begin dcpFillChar(Data, SizeOf(Data), 0); Move(HashBuffer,Data,Sizeof(Data)); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 0] + $d76aa478,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 1] + $e8c7b756,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 2] + $242070db,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 3] + $c1bdceee,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 4] + $f57c0faf,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 5] + $4787c62a,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 6] + $a8304613,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 7] + $fd469501,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 8] + $698098d8,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 9] + $8b44f7af,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[10] + $ffff5bb1,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[11] + $895cd7be,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[12] + $6b901122,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[13] + $fd987193,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[14] + $a679438e,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[15] + $49b40821,22); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 1] + $f61e2562,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 6] + $c040b340,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[11] + $265e5a51,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 0] + $e9b6c7aa,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 5] + $d62f105d,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[10] + $02441453,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[15] + $d8a1e681,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 4] + $e7d3fbc8,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 9] + $21e1cde6,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[14] + $c33707d6,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 3] + $f4d50d87,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 8] + $455a14ed,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[13] + $a9e3e905,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 2] + $fcefa3f8,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 7] + $676f02d9,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[12] + $8d2a4c8a,20); A:= B + LRot32(A + (B xor C xor D) + Data[ 5] + $fffa3942,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 8] + $8771f681,11); C:= D + LRot32(C + (D xor A xor B) + Data[11] + $6d9d6122,16); B:= C + LRot32(B + (C xor D xor A) + Data[14] + $fde5380c,23); A:= B + LRot32(A + (B xor C xor D) + Data[ 1] + $a4beea44,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 4] + $4bdecfa9,11); C:= D + LRot32(C + (D xor A xor B) + Data[ 7] + $f6bb4b60,16); B:= C + LRot32(B + (C xor D xor A) + Data[10] + $bebfbc70,23); A:= B + LRot32(A + (B xor C xor D) + Data[13] + $289b7ec6,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 0] + $eaa127fa,11); C:= D + LRot32(C + (D xor A xor B) + Data[ 3] + $d4ef3085,16); B:= C + LRot32(B + (C xor D xor A) + Data[ 6] + $04881d05,23); A:= B + LRot32(A + (B xor C xor D) + Data[ 9] + $d9d4d039,4); D:= A + LRot32(D + (A xor B xor C) + Data[12] + $e6db99e5,11); C:= D + LRot32(C + (D xor A xor B) + Data[15] + $1fa27cf8,16); B:= C + LRot32(B + (C xor D xor A) + Data[ 2] + $c4ac5665,23); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 0] + $f4292244,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 7] + $432aff97,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[14] + $ab9423a7,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 5] + $fc93a039,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[12] + $655b59c3,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 3] + $8f0ccc92,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[10] + $ffeff47d,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 1] + $85845dd1,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 8] + $6fa87e4f,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[15] + $fe2ce6e0,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 6] + $a3014314,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[13] + $4e0811a1,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 4] + $f7537e82,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[11] + $bd3af235,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 2] + $2ad7d2bb,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 9] + $eb86d391,21); Inc(CurrentHash[0],A); Inc(CurrentHash[1],B); Inc(CurrentHash[2],C); Inc(CurrentHash[3],D); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_md5.GetHashSize: integer; begin Result:= 128; end; class function TDCP_md5.GetId: integer; begin Result:= DCP_md5; end; class function TDCP_md5.GetAlgorithm: string; begin Result:= 'MD5'; end; class function TDCP_md5.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($90,$01,$50,$98,$3c,$d2,$4f,$b0,$d6,$96,$3f,$7d,$28,$e1,$7f,$72); Test2Out: array[0..15] of byte= ($c3,$fc,$d3,$d7,$61,$92,$e4,$00,$7d,$fb,$49,$6c,$ca,$67,$e1,$3b); var TestHash: TDCP_md5; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_md5.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_md5.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_md5.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_md5.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_md5.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. ��������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpmd4.pas����������������������������������������������0000644�0001750�0000144�00000021215�15104114162�021706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of MD4 **********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPmd4; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_md4= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function LRot32(a, b: longword): longword; begin Result:= (a shl b) or (a shr (32-b)); end; procedure TDCP_md4.Compress; var Data: array[0..15] of dword; A, B, C, D: dword; begin dcpFillChar(Data, SizeOf(Data), 0); Move(HashBuffer,Data,Sizeof(Data)); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 0],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 1],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 2],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 3],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 4],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 5],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 6],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 7],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 8],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 9],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[10],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[11],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[12],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[13],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[14],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[15],19); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 0] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 4] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 8] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[12] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 1] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 5] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 9] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[13] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 2] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 6] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[10] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[14] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 3] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 7] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[11] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[15] + $5a827999,13); A:= LRot32(A + (B xor C xor D) + Data[ 0] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[ 8] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 4] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[12] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 2] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[10] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 6] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[14] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 1] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[ 9] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 5] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[13] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 3] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[11] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 7] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[15] + $6ed9eba1,15); Inc(CurrentHash[0],A); Inc(CurrentHash[1],B); Inc(CurrentHash[2],C); Inc(CurrentHash[3],D); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_md4.GetHashSize: integer; begin Result:= 128; end; class function TDCP_md4.GetId: integer; begin Result:= DCP_md4; end; class function TDCP_md4.GetAlgorithm: string; begin Result:= 'MD4'; end; class function TDCP_md4.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($a4,$48,$01,$7a,$af,$21,$d8,$52,$5f,$c1,$0a,$e8,$7a,$a6,$72,$9d); Test2Out: array[0..15] of byte= ($d7,$9e,$1c,$30,$8a,$a5,$bb,$cd,$ee,$a8,$ed,$63,$df,$41,$2d,$a9); var TestHash: TDCP_md4; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_md4.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_md4.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_md4.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_md4.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_md4.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcphaval.pas��������������������������������������������0000644�0001750�0000144�00000105477�15104114162�022332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary incompatible implementation of Haval ******************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPhaval; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_haval= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..7] of DWord; HashBuffer: array[0..127] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_haval.Compress; var t7, t6, t5, t4, t3, t2, t1, t0: DWord; W: array[0..31] of DWord; Temp: dword; begin dcpFillChar(W, SizeOf(W), 0); t0:= CurrentHash[0]; t1:= CurrentHash[1]; t2:= CurrentHash[2]; t3:= CurrentHash[3]; t4:= CurrentHash[4]; t5:= CurrentHash[5]; t6:= CurrentHash[6]; t7:= CurrentHash[7]; Move(HashBuffer,W,Sizeof(W)); temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24] + $7A325381; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 4] + $28958677; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 0] + $3B8F4898; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[14] + $6B4BB9AF; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $C4BFE81B; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 7] + $66282193; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $61D809CC; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23] + $FB21A991; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[26] + $487CAC60; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $5DEC8032; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[30] + $EF845D5D; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $E98575B1; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DC262302; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $EB651B88; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[19] + $23893E81; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 3] + $D396ACC5; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[22] + $0F6D6FF3; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[11] + $83F44239; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[31] + $2E0B4482; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[21] + $A4842004; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 8] + $69C8F04A; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[27] + $9E1F9B5E; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[12] + $21C66842; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 9] + $F6E96C9A; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 1] + $670C9C61; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[29] + $ABD388F0; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 5] + $6A51A0D2; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[15] + $D8542F68; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $960FA728; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $AB5133A3; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $6EEF0B6C; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[13] + $137A3BE4; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[27] + $BA3BF050; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $7EFB2A98; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $A1F1651D; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[26] + $39AF0176; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $66CA593E; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $82430E88; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[20] + $8CEE8619; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[29] + $456F9FB4; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $7D84A5C3; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 0] + $3B8B5EBE; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[12] + $E06F75D8; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 7] + $85C12073; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[13] + $401A449F; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 8] + $56C16AA6; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $4ED3AA62; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[10] + $363F7706; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $1BFEDF72; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $429B023D; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[14] + $37D0D724; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[30] + $D00A1248; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DB0FEAD3; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 6] + $49F1C09B; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $075372C9; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[24] + $80991B7B; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 2] + $25D479D8; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $F6E8DEF7; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[16] + $E3FE501A; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $B6794C3B; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4] + $976CE0BD; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 1] + $04C006BA; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[25] + $C1A94FB6; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15] + $409F60C4; Inc(CurrentHash[0],t0); Inc(CurrentHash[1],t1); Inc(CurrentHash[2],t2); Inc(CurrentHash[3],t3); Inc(CurrentHash[4],t4); Inc(CurrentHash[5],t5); Inc(CurrentHash[6],t6); Inc(CurrentHash[7],t7); FillChar(W,Sizeof(W),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_haval.GetHashSize: integer; begin Result:= 256; end; class function TDCP_haval.GetId: integer; begin Result:= DCP_haval; end; class function TDCP_haval.GetAlgorithm: string; begin Result:= 'Haval'; end; class function TDCP_haval.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($1A,$1D,$C8,$09,$9B,$DA,$A7,$F3,$5B,$4D,$A4,$E8,$05,$F1,$A2,$8F, $EE,$90,$9D,$8D,$EE,$92,$01,$98,$18,$5C,$BC,$AE,$D8,$A1,$0A,$8D); Test2Out: array[0..31] of byte= ($C5,$64,$7F,$C6,$C1,$87,$7F,$FF,$96,$74,$2F,$27,$E9,$26,$6B,$68, $74,$89,$4F,$41,$A0,$8F,$59,$13,$03,$3D,$9D,$53,$2A,$ED,$DB,$39); var TestHash: TDCP_haval; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_haval.Init; begin Burn; CurrentHash[0]:= $243F6A88; CurrentHash[1]:= $85A308D3; CurrentHash[2]:= $13198A2E; CurrentHash[3]:= $03707344; CurrentHash[4]:= $A4093822; CurrentHash[5]:= $299F31D0; CurrentHash[6]:= $082EFA98; CurrentHash[7]:= $EC4E6C89; fInitialized:= true; end; procedure TDCP_haval.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_haval.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_haval.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 118 then Compress; HashBuffer[118]:= ((256 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; PDWord(@HashBuffer[120])^:= LenLo; PDWord(@HashBuffer[124])^:= LenHi; Compress; Move(CurrentHash,Digest,256 div 8); Burn; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpcrc32.pas��������������������������������������������0000644�0001750�0000144�00000010050�15104114162�022131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible (with Total Commander) implementation of CRC32 *} {******************************************************************************} {* Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPcrc32; {$mode objfpc}{$H+} interface uses Classes, Sysutils, DCPcrypt2, DCPconst, DCcrc32; type { TDCP_crc32 } TDCP_crc32 = class(TDCP_hash) protected CurrentHash: LongWord; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; constructor Create(AOwner: TComponent); override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation {$R-}{$Q-} { TDCP_crc32 } class function TDCP_crc32.GetHashSize: integer; begin Result:= 32; end; class function TDCP_crc32.GetId: integer; begin Result:= DCP_crc32; end; class function TDCP_crc32.GetAlgorithm: string; begin Result:= 'CRC32'; end; class function TDCP_crc32.SelfTest: boolean; const Test1Out: array[0..3] of byte=($35,$24,$41,$C2); Test2Out: array[0..3] of byte=($4C,$27,$50,$BD); var TestHash: TDCP_crc32; TestOut: array[0..3] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_crc32.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; constructor TDCP_crc32.Create(AOwner: TComponent); begin inherited Create(AOwner); end; procedure TDCP_crc32.Init; begin Burn; CurrentHash:= 0; fInitialized:= true; end; procedure TDCP_crc32.Burn; begin CurrentHash:= 0; fInitialized:= false; end; procedure TDCP_crc32.Update(const Buffer; Size: longword); var Bytes: PByte; begin Bytes:= @Buffer; CurrentHash:= crc32_16bytes(Bytes, Size, CurrentHash); end; procedure TDCP_crc32.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); CurrentHash:= SwapEndian(CurrentHash); Move(CurrentHash, Digest, Sizeof(CurrentHash)); Burn; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpchecksum32.pas���������������������������������������0000644�0001750�0000144�00000011535�15104114162�023175� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* Simple 32-bits checksum class integrated in existing **********} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of simple 32-bits checksum *} {******************************************************************************} {* Copyright (C) 2021 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit dcpchecksum32; {$mode objfpc}{$H+} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type { TDCP_checksum32 } TDCP_checksum32 = class(TDCP_hash) protected CurrentHash: DWORD; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; constructor Create(AOwner: TComponent); override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation {$R-}{$Q-} { TDCP_checksum32 } { TDCP_checksum32.GetHashSize } class function TDCP_checksum32.GetHashSize: integer; begin Result:= 32; end; { TDCP_checksum32.GetId } class function TDCP_checksum32.GetId: integer; begin Result:= DCP_checksum32; end; { TDCP_checksum32.GetAlgorithm } class function TDCP_checksum32.GetAlgorithm: string; begin Result:= 'CHECKSUM32'; end; { TDCP_checksum32.SelfTest } class function TDCP_checksum32.SelfTest: boolean; const Test1Out: array[0..3] of byte=($00, $00, $01, $26); //Verified on 2021-08-24 Test2Out: array[0..3] of byte=($00, $00, $0B, $1F); var TestHash: TDCP_checksum32; TestOut: array[0..3] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_checksum32.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; { TDCP_checksum32.Create } constructor TDCP_checksum32.Create(AOwner: TComponent); begin inherited Create(AOwner); end; { TDCP_checksum32.Init } procedure TDCP_checksum32.Init; begin Burn; CurrentHash:= 0; fInitialized:= true; end; { TDCP_checksum32 } procedure TDCP_checksum32.Burn; begin CurrentHash:= 0; fInitialized:= false; end; { TDCP_checksum32.Update } {$PUSH}{$R-}{$Q-}{$OPTIMIZATION LEVEL3} // no range, no overflow checks, optimize for speed (not size) procedure TDCP_checksum32.Update(const Buffer; Size: longword); var data: PByte; iIndex: longword; iChecksumLocal: DWORD; begin iChecksumLocal := CurrentHash; //Manipulating the copy "iChecksumLocal" in the loop is overall faster then working directly with property "CurrentHash". data := @Buffer; for iIndex := 1 to Size do begin iChecksumLocal := iChecksumLocal + data^; inc(data); end; CurrentHash := iChecksumLocal; end; {$POP} { TDCP_checksum32.Final } procedure TDCP_checksum32.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); CurrentHash:= SwapEndian(CurrentHash); Move(CurrentHash, Digest, Sizeof(CurrentHash)); Burn; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpblake3.pas�������������������������������������������0000644�0001750�0000144�00000010547�15104114162�022371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of BLAKE3 *} {******************************************************************************} {* Copyright (C) 2020 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPblake3; {$mode delphi} interface uses Classes, SysUtils, CTypes, DCPcrypt2, DCPconst, DCblake3; type { TDCP_blake3 } TDCP_blake3 = class(TDCP_hash) protected S: blake3_hasher; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation { TDCP_blake3 } class function TDCP_blake3.GetId: integer; begin Result:= DCP_blake3; end; class function TDCP_blake3.GetAlgorithm: string; begin Result:= 'BLAKE3'; end; class function TDCP_blake3.GetHashSize: integer; begin Result:= 256; end; class function TDCP_blake3.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($64, $37, $b3, $ac, $38, $46, $51, $33, $ff, $b6, $3b, $75, $27, $3a, $8d, $b5, $48, $c5, $58, $46, $5d, $79, $db, $03, $fd, $35, $9c, $6c, $d5, $bd, $9d, $85); Test2Out: array[0..31] of byte= ($c1, $90, $12, $cc, $2a, $af, $0d, $c3, $d8, $e5, $c4, $5a, $1b, $79, $11, $4d, $2d, $f4, $2a, $bb, $2a, $41, $0b, $f5, $4b, $e0, $9e, $89, $1a, $f0, $6f, $f8 ); var TestHash: TDCP_blake3; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake3.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake3.Init; begin blake3_hasher_init(@S); fInitialized:= true; end; procedure TDCP_blake3.Burn; begin fInitialized:= false; end; procedure TDCP_blake3.Update(const Buffer; Size: longword); begin blake3_hasher_update(@S, @Buffer, Size); end; procedure TDCP_blake3.Final(var Digest); var Hash: array[0..Pred(BLAKE3_OUT_LEN)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); blake3_hasher_finalize(@S, Hash, SizeOf(Hash)); Move(Hash, Digest, Sizeof(Hash)); Burn; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcpblake2.pas�������������������������������������������0000644�0001750�0000144�00000031220�15104114162�022357� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of BLAKE2S, BLAKE2SP, BLAKE2B, BLAKE2BP *} {******************************************************************************} {* Copyright (C) 2014-2018 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPblake2; {$mode delphi} interface uses Classes, SysUtils, CTypes, DCPcrypt2, DCPconst, DCblake2, Hash; type { TDCP_blake2s } TDCP_blake2s = class(TDCP_hash) protected S: blake2s_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; { TDCP_blake2sp } TDCP_blake2sp = class(TDCP_hash) protected S: blake2sp_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; { TDCP_blake2b } TDCP_blake2b = class(TDCP_hash) protected S: blake2b_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; { TDCP_blake2bp } TDCP_blake2bp = class(TDCP_hash) protected S: blake2bp_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation { TDCP_blake2s } class function TDCP_blake2s.GetId: integer; begin Result:= DCP_blake2s; end; class function TDCP_blake2s.GetAlgorithm: string; begin Result:= 'BLAKE2S'; end; class function TDCP_blake2s.GetHashSize: integer; begin Result:= 256; end; class function TDCP_blake2s.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($50, $8c, $5e, $8c, $32, $7c, $14, $e2, $e1, $a7, $2b, $a3, $4e, $eb, $45, $2f, $37, $45, $8b, $20, $9e, $d6, $3a, $29, $4d, $99, $9b, $4c, $86, $67, $59, $82); Test2Out: array[0..31] of byte= ($6f, $4d, $f5, $11, $6a, $6f, $33, $2e, $da, $b1, $d9, $e1, $0e, $e8, $7d, $f6, $55, $7b, $ea, $b6, $25, $9d, $76, $63, $f3, $bc, $d5, $72, $2c, $13, $f1, $89 ); var TestHash: TDCP_blake2s; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2s.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2s.Init; begin if blake2s_init( @S, BLAKE2S_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2s_init'); fInitialized:= true; end; procedure TDCP_blake2s.Burn; begin fInitialized:= false; end; procedure TDCP_blake2s.Update(const Buffer; Size: longword); begin if blake2s_update(@S, @Buffer, Size) < 0 then raise EDCP_hash.Create('blake2s_update'); end; procedure TDCP_blake2s.Final(var Digest); var Hash: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2s_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2s_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; { TDCP_blake2sp } class function TDCP_blake2sp.GetId: integer; begin Result:= DCP_blake2sp; end; class function TDCP_blake2sp.GetAlgorithm: string; begin Result:= 'BLAKE2SP'; end; class function TDCP_blake2sp.GetHashSize: integer; begin Result:= 256; end; class function TDCP_blake2sp.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($70, $f7, $5b, $58, $f1, $fe, $ca, $b8, $21, $db, $43, $c8, $8a, $d8, $4e, $dd, $e5, $a5, $26, $00, $61, $6c, $d2, $25, $17, $b7, $bb, $14, $d4, $40, $a7, $d5); Test2Out: array[0..31] of byte= ($3d, $10, $7e, $42, $f1, $7c, $13, $c8, $2b, $43, $6e, $bb, $65, $1a, $48, $de, $f6, $7e, $77, $72, $fa, $06, $f4, $73, $8e, $e9, $68, $c7, $f4, $d8, $b4, $8b); var TestHash: TDCP_blake2sp; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2sp.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2sp.Init; begin if blake2sp_init( @S, BLAKE2S_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2sp_init'); fInitialized:= true; end; procedure TDCP_blake2sp.Burn; begin fInitialized:= false; end; procedure TDCP_blake2sp.Update(const Buffer; Size: longword); begin if blake2sp_update(@S, @Buffer, Size) < 0 then raise EDCP_hash.Create('blake2sp_update'); end; procedure TDCP_blake2sp.Final(var Digest); var Hash: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2sp_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2sp_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; { TDCP_blake2b } class function TDCP_blake2b.GetId: integer; begin Result:= DCP_blake2b; end; class function TDCP_blake2b.GetAlgorithm: string; begin Result:= 'BLAKE2B'; end; class function TDCP_blake2b.GetHashSize: integer; begin Result:= 512; end; class function TDCP_blake2b.SelfTest: boolean; const Test1Out: array[0..63] of byte = ($ba, $80, $a5, $3f, $98, $1c, $4d, $0d, $6a, $27, $97, $b6, $9f, $12, $f6, $e9, $4c, $21, $2f, $14, $68, $5a, $c4, $b7, $4b, $12, $bb, $6f, $db, $ff, $a2, $d1, $7d, $87, $c5, $39, $2a, $ab, $79, $2d, $c2, $52, $d5, $de, $45, $33, $cc, $95, $18, $d3, $8a, $a8, $db, $f1, $92, $5a, $b9, $23, $86, $ed, $d4, $00, $99, $23); Test2Out: array[0..63] of byte = ($72, $85, $ff, $3e, $8b, $d7, $68, $d6, $9b, $e6, $2b, $3b, $f1, $87, $65, $a3, $25, $91, $7f, $a9, $74, $4a, $c2, $f5, $82, $a2, $08, $50, $bc, $2b, $11, $41, $ed, $1b, $3e, $45, $28, $59, $5a, $cc, $90, $77, $2b, $df, $2d, $37, $dc, $8a, $47, $13, $0b, $44, $f3, $3a, $02, $e8, $73, $0e, $5a, $d8, $e1, $66, $e8, $88); var TestHash: TDCP_blake2b; TestOut: array[0..63] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2b.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2b.Init; begin if blake2b_init( @S, BLAKE2B_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2b_init'); fInitialized:= true; end; procedure TDCP_blake2b.Burn; begin fInitialized:= false; end; procedure TDCP_blake2b.Update(const Buffer; Size: longword); begin if blake2b_update(@S, @Buffer, Size) < 0 then raise EDCP_hash.Create('blake2b_update'); end; procedure TDCP_blake2b.Final(var Digest); var Hash: array[0..Pred(BLAKE2B_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2b_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2b_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; { TDCP_blake2bp } class function TDCP_blake2bp.GetId: integer; begin Result:= DCP_blake2bp; end; class function TDCP_blake2bp.GetAlgorithm: string; begin Result:= 'BLAKE2BP'; end; class function TDCP_blake2bp.GetHashSize: integer; begin Result:= 512; end; class function TDCP_blake2bp.SelfTest: boolean; const Test1Out: array[0..63] of byte = ($b9, $1a, $6b, $66, $ae, $87, $52, $6c, $40, $0b, $0a, $8b, $53, $77, $4d, $c6, $52, $84, $ad, $8f, $65, $75, $f8, $14, $8f, $f9, $3d, $ff, $94, $3a, $6e, $cd, $83, $62, $13, $0f, $22, $d6, $da, $e6, $33, $aa, $0f, $91, $df, $4a, $c8, $9a, $af, $f3, $1d, $0f, $1b, $92, $3c, $89, $8e, $82, $02, $5d, $ed, $bd, $ad, $6e); Test2Out: array[0..63] of byte = ($c5, $a0, $34, $1e, $eb, $b6, $15, $50, $3e, $22, $93, $30, $e0, $6a, $3d, $ce, $88, $05, $b4, $34, $ca, $75, $8e, $89, $9e, $72, $ac, $40, $ba, $c3, $6e, $63, $7b, $70, $09, $8a, $24, $ae, $5c, $3c, $4d, $39, $a1, $83, $a4, $3e, $b9, $74, $82, $3e, $3d, $db, $5b, $09, $e0, $7a, $d1, $e5, $26, $e9, $05, $f6, $5b, $c4); var TestHash: TDCP_blake2bp; TestOut: array[0..63] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2bp.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2bp.Init; begin if blake2bp_init( @S, BLAKE2B_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2bp_init'); fInitialized:= true; end; procedure TDCP_blake2bp.Burn; begin fInitialized:= false; end; procedure TDCP_blake2bp.Update(const Buffer; Size: longword); begin if blake2bp_update(@S, @Buffer, Size) < 0 then raise EDCP_hash.Create('blake2bp_update'); end; procedure TDCP_blake2bp.Final(var Digest); var Hash: array[0..Pred(BLAKE2B_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2bp_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2bp_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dccrc32.pp����������������������������������������������0000644�0001750�0000144�00000141344�15104114162�021620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Fast CRC32 calculation algorithm http://create.stephan-brumme.com/crc32 Copyright (C) 2011-2015 Stephan Brumme. All rights reserved. Slicing-by-16 contributed by Bulat Ziganshin See http://create.stephan-brumme.com/disclaimer.html Pascal tranlastion Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. 2. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. } unit DCcrc32; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function crc32_16bytes(const data: PByte; length: Integer; previousCrc32: Cardinal = 0): Cardinal; implementation {$R-}{$Q-} { const /// zlib's CRC32 polynomial Polynomial: Cardinal = $EDB88320; var HaveTable: Boolean = False; Crc32Lookup: array[0..15, 0..255] of Cardinal; procedure crc32_init; var i, j: Integer; crc: Cardinal; slice: Integer; begin if HaveTable then Exit; //// same algorithm as crc32_bitwise for i := 0 to $FF do begin crc := Cardinal(i); for j := 0 to 7 do begin if (crc and 1) <> 0 then crc := Polynomial xor (crc shr 1) else crc := (crc shr 1); end; Crc32Lookup[0][i] := crc; end; // ... and the following slicing-by-8 algorithm (from Intel): // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf // http://sourceforge.net/projects/slicing-by-8/ for i := 0 to $FF do begin for slice := 1 to 15 do Crc32Lookup[slice][i] := (Crc32Lookup[slice - 1][i] shr 8) xor Crc32Lookup[0][Crc32Lookup[slice - 1][i] and $FF]; end; HaveTable:= True; end; } const Crc32Lookup: array[0..15, 0..255] of Cardinal = ( ( $00000000,$77073096,$EE0E612C,$990951BA,$076DC419,$706AF48F,$E963A535,$9E6495A3, $0EDB8832,$79DCB8A4,$E0D5E91E,$97D2D988,$09B64C2B,$7EB17CBD,$E7B82D07,$90BF1D91, $1DB71064,$6AB020F2,$F3B97148,$84BE41DE,$1ADAD47D,$6DDDE4EB,$F4D4B551,$83D385C7, $136C9856,$646BA8C0,$FD62F97A,$8A65C9EC,$14015C4F,$63066CD9,$FA0F3D63,$8D080DF5, $3B6E20C8,$4C69105E,$D56041E4,$A2677172,$3C03E4D1,$4B04D447,$D20D85FD,$A50AB56B, $35B5A8FA,$42B2986C,$DBBBC9D6,$ACBCF940,$32D86CE3,$45DF5C75,$DCD60DCF,$ABD13D59, $26D930AC,$51DE003A,$C8D75180,$BFD06116,$21B4F4B5,$56B3C423,$CFBA9599,$B8BDA50F, $2802B89E,$5F058808,$C60CD9B2,$B10BE924,$2F6F7C87,$58684C11,$C1611DAB,$B6662D3D, $76DC4190,$01DB7106,$98D220BC,$EFD5102A,$71B18589,$06B6B51F,$9FBFE4A5,$E8B8D433, $7807C9A2,$0F00F934,$9609A88E,$E10E9818,$7F6A0DBB,$086D3D2D,$91646C97,$E6635C01, $6B6B51F4,$1C6C6162,$856530D8,$F262004E,$6C0695ED,$1B01A57B,$8208F4C1,$F50FC457, $65B0D9C6,$12B7E950,$8BBEB8EA,$FCB9887C,$62DD1DDF,$15DA2D49,$8CD37CF3,$FBD44C65, $4DB26158,$3AB551CE,$A3BC0074,$D4BB30E2,$4ADFA541,$3DD895D7,$A4D1C46D,$D3D6F4FB, $4369E96A,$346ED9FC,$AD678846,$DA60B8D0,$44042D73,$33031DE5,$AA0A4C5F,$DD0D7CC9, $5005713C,$270241AA,$BE0B1010,$C90C2086,$5768B525,$206F85B3,$B966D409,$CE61E49F, $5EDEF90E,$29D9C998,$B0D09822,$C7D7A8B4,$59B33D17,$2EB40D81,$B7BD5C3B,$C0BA6CAD, $EDB88320,$9ABFB3B6,$03B6E20C,$74B1D29A,$EAD54739,$9DD277AF,$04DB2615,$73DC1683, $E3630B12,$94643B84,$0D6D6A3E,$7A6A5AA8,$E40ECF0B,$9309FF9D,$0A00AE27,$7D079EB1, $F00F9344,$8708A3D2,$1E01F268,$6906C2FE,$F762575D,$806567CB,$196C3671,$6E6B06E7, $FED41B76,$89D32BE0,$10DA7A5A,$67DD4ACC,$F9B9DF6F,$8EBEEFF9,$17B7BE43,$60B08ED5, $D6D6A3E8,$A1D1937E,$38D8C2C4,$4FDFF252,$D1BB67F1,$A6BC5767,$3FB506DD,$48B2364B, $D80D2BDA,$AF0A1B4C,$36034AF6,$41047A60,$DF60EFC3,$A867DF55,$316E8EEF,$4669BE79, $CB61B38C,$BC66831A,$256FD2A0,$5268E236,$CC0C7795,$BB0B4703,$220216B9,$5505262F, $C5BA3BBE,$B2BD0B28,$2BB45A92,$5CB36A04,$C2D7FFA7,$B5D0CF31,$2CD99E8B,$5BDEAE1D, $9B64C2B0,$EC63F226,$756AA39C,$026D930A,$9C0906A9,$EB0E363F,$72076785,$05005713, $95BF4A82,$E2B87A14,$7BB12BAE,$0CB61B38,$92D28E9B,$E5D5BE0D,$7CDCEFB7,$0BDBDF21, $86D3D2D4,$F1D4E242,$68DDB3F8,$1FDA836E,$81BE16CD,$F6B9265B,$6FB077E1,$18B74777, $88085AE6,$FF0F6A70,$66063BCA,$11010B5C,$8F659EFF,$F862AE69,$616BFFD3,$166CCF45, $A00AE278,$D70DD2EE,$4E048354,$3903B3C2,$A7672661,$D06016F7,$4969474D,$3E6E77DB, $AED16A4A,$D9D65ADC,$40DF0B66,$37D83BF0,$A9BCAE53,$DEBB9EC5,$47B2CF7F,$30B5FFE9, $BDBDF21C,$CABAC28A,$53B39330,$24B4A3A6,$BAD03605,$CDD70693,$54DE5729,$23D967BF, $B3667A2E,$C4614AB8,$5D681B02,$2A6F2B94,$B40BBE37,$C30C8EA1,$5A05DF1B,$2D02EF8D ) ,( $00000000,$191B3141,$32366282,$2B2D53C3,$646CC504,$7D77F445,$565AA786,$4F4196C7, $C8D98A08,$D1C2BB49,$FAEFE88A,$E3F4D9CB,$ACB54F0C,$B5AE7E4D,$9E832D8E,$87981CCF, $4AC21251,$53D92310,$78F470D3,$61EF4192,$2EAED755,$37B5E614,$1C98B5D7,$05838496, $821B9859,$9B00A918,$B02DFADB,$A936CB9A,$E6775D5D,$FF6C6C1C,$D4413FDF,$CD5A0E9E, $958424A2,$8C9F15E3,$A7B24620,$BEA97761,$F1E8E1A6,$E8F3D0E7,$C3DE8324,$DAC5B265, $5D5DAEAA,$44469FEB,$6F6BCC28,$7670FD69,$39316BAE,$202A5AEF,$0B07092C,$121C386D, $DF4636F3,$C65D07B2,$ED705471,$F46B6530,$BB2AF3F7,$A231C2B6,$891C9175,$9007A034, $179FBCFB,$0E848DBA,$25A9DE79,$3CB2EF38,$73F379FF,$6AE848BE,$41C51B7D,$58DE2A3C, $F0794F05,$E9627E44,$C24F2D87,$DB541CC6,$94158A01,$8D0EBB40,$A623E883,$BF38D9C2, $38A0C50D,$21BBF44C,$0A96A78F,$138D96CE,$5CCC0009,$45D73148,$6EFA628B,$77E153CA, $BABB5D54,$A3A06C15,$888D3FD6,$91960E97,$DED79850,$C7CCA911,$ECE1FAD2,$F5FACB93, $7262D75C,$6B79E61D,$4054B5DE,$594F849F,$160E1258,$0F152319,$243870DA,$3D23419B, $65FD6BA7,$7CE65AE6,$57CB0925,$4ED03864,$0191AEA3,$188A9FE2,$33A7CC21,$2ABCFD60, $AD24E1AF,$B43FD0EE,$9F12832D,$8609B26C,$C94824AB,$D05315EA,$FB7E4629,$E2657768, $2F3F79F6,$362448B7,$1D091B74,$04122A35,$4B53BCF2,$52488DB3,$7965DE70,$607EEF31, $E7E6F3FE,$FEFDC2BF,$D5D0917C,$CCCBA03D,$838A36FA,$9A9107BB,$B1BC5478,$A8A76539, $3B83984B,$2298A90A,$09B5FAC9,$10AECB88,$5FEF5D4F,$46F46C0E,$6DD93FCD,$74C20E8C, $F35A1243,$EA412302,$C16C70C1,$D8774180,$9736D747,$8E2DE606,$A500B5C5,$BC1B8484, $71418A1A,$685ABB5B,$4377E898,$5A6CD9D9,$152D4F1E,$0C367E5F,$271B2D9C,$3E001CDD, $B9980012,$A0833153,$8BAE6290,$92B553D1,$DDF4C516,$C4EFF457,$EFC2A794,$F6D996D5, $AE07BCE9,$B71C8DA8,$9C31DE6B,$852AEF2A,$CA6B79ED,$D37048AC,$F85D1B6F,$E1462A2E, $66DE36E1,$7FC507A0,$54E85463,$4DF36522,$02B2F3E5,$1BA9C2A4,$30849167,$299FA026, $E4C5AEB8,$FDDE9FF9,$D6F3CC3A,$CFE8FD7B,$80A96BBC,$99B25AFD,$B29F093E,$AB84387F, $2C1C24B0,$350715F1,$1E2A4632,$07317773,$4870E1B4,$516BD0F5,$7A468336,$635DB277, $CBFAD74E,$D2E1E60F,$F9CCB5CC,$E0D7848D,$AF96124A,$B68D230B,$9DA070C8,$84BB4189, $03235D46,$1A386C07,$31153FC4,$280E0E85,$674F9842,$7E54A903,$5579FAC0,$4C62CB81, $8138C51F,$9823F45E,$B30EA79D,$AA1596DC,$E554001B,$FC4F315A,$D7626299,$CE7953D8, $49E14F17,$50FA7E56,$7BD72D95,$62CC1CD4,$2D8D8A13,$3496BB52,$1FBBE891,$06A0D9D0, $5E7EF3EC,$4765C2AD,$6C48916E,$7553A02F,$3A1236E8,$230907A9,$0824546A,$113F652B, $96A779E4,$8FBC48A5,$A4911B66,$BD8A2A27,$F2CBBCE0,$EBD08DA1,$C0FDDE62,$D9E6EF23, $14BCE1BD,$0DA7D0FC,$268A833F,$3F91B27E,$70D024B9,$69CB15F8,$42E6463B,$5BFD777A, $DC656BB5,$C57E5AF4,$EE530937,$F7483876,$B809AEB1,$A1129FF0,$8A3FCC33,$9324FD72 ), ( $00000000,$01C26A37,$0384D46E,$0246BE59,$0709A8DC,$06CBC2EB,$048D7CB2,$054F1685, $0E1351B8,$0FD13B8F,$0D9785D6,$0C55EFE1,$091AF964,$08D89353,$0A9E2D0A,$0B5C473D, $1C26A370,$1DE4C947,$1FA2771E,$1E601D29,$1B2F0BAC,$1AED619B,$18ABDFC2,$1969B5F5, $1235F2C8,$13F798FF,$11B126A6,$10734C91,$153C5A14,$14FE3023,$16B88E7A,$177AE44D, $384D46E0,$398F2CD7,$3BC9928E,$3A0BF8B9,$3F44EE3C,$3E86840B,$3CC03A52,$3D025065, $365E1758,$379C7D6F,$35DAC336,$3418A901,$3157BF84,$3095D5B3,$32D36BEA,$331101DD, $246BE590,$25A98FA7,$27EF31FE,$262D5BC9,$23624D4C,$22A0277B,$20E69922,$2124F315, $2A78B428,$2BBADE1F,$29FC6046,$283E0A71,$2D711CF4,$2CB376C3,$2EF5C89A,$2F37A2AD, $709A8DC0,$7158E7F7,$731E59AE,$72DC3399,$7793251C,$76514F2B,$7417F172,$75D59B45, $7E89DC78,$7F4BB64F,$7D0D0816,$7CCF6221,$798074A4,$78421E93,$7A04A0CA,$7BC6CAFD, $6CBC2EB0,$6D7E4487,$6F38FADE,$6EFA90E9,$6BB5866C,$6A77EC5B,$68315202,$69F33835, $62AF7F08,$636D153F,$612BAB66,$60E9C151,$65A6D7D4,$6464BDE3,$662203BA,$67E0698D, $48D7CB20,$4915A117,$4B531F4E,$4A917579,$4FDE63FC,$4E1C09CB,$4C5AB792,$4D98DDA5, $46C49A98,$4706F0AF,$45404EF6,$448224C1,$41CD3244,$400F5873,$4249E62A,$438B8C1D, $54F16850,$55330267,$5775BC3E,$56B7D609,$53F8C08C,$523AAABB,$507C14E2,$51BE7ED5, $5AE239E8,$5B2053DF,$5966ED86,$58A487B1,$5DEB9134,$5C29FB03,$5E6F455A,$5FAD2F6D, $E1351B80,$E0F771B7,$E2B1CFEE,$E373A5D9,$E63CB35C,$E7FED96B,$E5B86732,$E47A0D05, $EF264A38,$EEE4200F,$ECA29E56,$ED60F461,$E82FE2E4,$E9ED88D3,$EBAB368A,$EA695CBD, $FD13B8F0,$FCD1D2C7,$FE976C9E,$FF5506A9,$FA1A102C,$FBD87A1B,$F99EC442,$F85CAE75, $F300E948,$F2C2837F,$F0843D26,$F1465711,$F4094194,$F5CB2BA3,$F78D95FA,$F64FFFCD, $D9785D60,$D8BA3757,$DAFC890E,$DB3EE339,$DE71F5BC,$DFB39F8B,$DDF521D2,$DC374BE5, $D76B0CD8,$D6A966EF,$D4EFD8B6,$D52DB281,$D062A404,$D1A0CE33,$D3E6706A,$D2241A5D, $C55EFE10,$C49C9427,$C6DA2A7E,$C7184049,$C25756CC,$C3953CFB,$C1D382A2,$C011E895, $CB4DAFA8,$CA8FC59F,$C8C97BC6,$C90B11F1,$CC440774,$CD866D43,$CFC0D31A,$CE02B92D, $91AF9640,$906DFC77,$922B422E,$93E92819,$96A63E9C,$976454AB,$9522EAF2,$94E080C5, $9FBCC7F8,$9E7EADCF,$9C381396,$9DFA79A1,$98B56F24,$99770513,$9B31BB4A,$9AF3D17D, $8D893530,$8C4B5F07,$8E0DE15E,$8FCF8B69,$8A809DEC,$8B42F7DB,$89044982,$88C623B5, $839A6488,$82580EBF,$801EB0E6,$81DCDAD1,$8493CC54,$8551A663,$8717183A,$86D5720D, $A9E2D0A0,$A820BA97,$AA6604CE,$ABA46EF9,$AEEB787C,$AF29124B,$AD6FAC12,$ACADC625, $A7F18118,$A633EB2F,$A4755576,$A5B73F41,$A0F829C4,$A13A43F3,$A37CFDAA,$A2BE979D, $B5C473D0,$B40619E7,$B640A7BE,$B782CD89,$B2CDDB0C,$B30FB13B,$B1490F62,$B08B6555, $BBD72268,$BA15485F,$B853F606,$B9919C31,$BCDE8AB4,$BD1CE083,$BF5A5EDA,$BE9834ED ), ( $00000000,$B8BC6765,$AA09C88B,$12B5AFEE,$8F629757,$37DEF032,$256B5FDC,$9DD738B9, $C5B428EF,$7D084F8A,$6FBDE064,$D7018701,$4AD6BFB8,$F26AD8DD,$E0DF7733,$58631056, $5019579F,$E8A530FA,$FA109F14,$42ACF871,$DF7BC0C8,$67C7A7AD,$75720843,$CDCE6F26, $95AD7F70,$2D111815,$3FA4B7FB,$8718D09E,$1ACFE827,$A2738F42,$B0C620AC,$087A47C9, $A032AF3E,$188EC85B,$0A3B67B5,$B28700D0,$2F503869,$97EC5F0C,$8559F0E2,$3DE59787, $658687D1,$DD3AE0B4,$CF8F4F5A,$7733283F,$EAE41086,$525877E3,$40EDD80D,$F851BF68, $F02BF8A1,$48979FC4,$5A22302A,$E29E574F,$7F496FF6,$C7F50893,$D540A77D,$6DFCC018, $359FD04E,$8D23B72B,$9F9618C5,$272A7FA0,$BAFD4719,$0241207C,$10F48F92,$A848E8F7, $9B14583D,$23A83F58,$311D90B6,$89A1F7D3,$1476CF6A,$ACCAA80F,$BE7F07E1,$06C36084, $5EA070D2,$E61C17B7,$F4A9B859,$4C15DF3C,$D1C2E785,$697E80E0,$7BCB2F0E,$C377486B, $CB0D0FA2,$73B168C7,$6104C729,$D9B8A04C,$446F98F5,$FCD3FF90,$EE66507E,$56DA371B, $0EB9274D,$B6054028,$A4B0EFC6,$1C0C88A3,$81DBB01A,$3967D77F,$2BD27891,$936E1FF4, $3B26F703,$839A9066,$912F3F88,$299358ED,$B4446054,$0CF80731,$1E4DA8DF,$A6F1CFBA, $FE92DFEC,$462EB889,$549B1767,$EC277002,$71F048BB,$C94C2FDE,$DBF98030,$6345E755, $6B3FA09C,$D383C7F9,$C1366817,$798A0F72,$E45D37CB,$5CE150AE,$4E54FF40,$F6E89825, $AE8B8873,$1637EF16,$048240F8,$BC3E279D,$21E91F24,$99557841,$8BE0D7AF,$335CB0CA, $ED59B63B,$55E5D15E,$47507EB0,$FFEC19D5,$623B216C,$DA874609,$C832E9E7,$708E8E82, $28ED9ED4,$9051F9B1,$82E4565F,$3A58313A,$A78F0983,$1F336EE6,$0D86C108,$B53AA66D, $BD40E1A4,$05FC86C1,$1749292F,$AFF54E4A,$322276F3,$8A9E1196,$982BBE78,$2097D91D, $78F4C94B,$C048AE2E,$D2FD01C0,$6A4166A5,$F7965E1C,$4F2A3979,$5D9F9697,$E523F1F2, $4D6B1905,$F5D77E60,$E762D18E,$5FDEB6EB,$C2098E52,$7AB5E937,$680046D9,$D0BC21BC, $88DF31EA,$3063568F,$22D6F961,$9A6A9E04,$07BDA6BD,$BF01C1D8,$ADB46E36,$15080953, $1D724E9A,$A5CE29FF,$B77B8611,$0FC7E174,$9210D9CD,$2AACBEA8,$38191146,$80A57623, $D8C66675,$607A0110,$72CFAEFE,$CA73C99B,$57A4F122,$EF189647,$FDAD39A9,$45115ECC, $764DEE06,$CEF18963,$DC44268D,$64F841E8,$F92F7951,$41931E34,$5326B1DA,$EB9AD6BF, $B3F9C6E9,$0B45A18C,$19F00E62,$A14C6907,$3C9B51BE,$842736DB,$96929935,$2E2EFE50, $2654B999,$9EE8DEFC,$8C5D7112,$34E11677,$A9362ECE,$118A49AB,$033FE645,$BB838120, $E3E09176,$5B5CF613,$49E959FD,$F1553E98,$6C820621,$D43E6144,$C68BCEAA,$7E37A9CF, $D67F4138,$6EC3265D,$7C7689B3,$C4CAEED6,$591DD66F,$E1A1B10A,$F3141EE4,$4BA87981, $13CB69D7,$AB770EB2,$B9C2A15C,$017EC639,$9CA9FE80,$241599E5,$36A0360B,$8E1C516E, $866616A7,$3EDA71C2,$2C6FDE2C,$94D3B949,$090481F0,$B1B8E695,$A30D497B,$1BB12E1E, $43D23E48,$FB6E592D,$E9DBF6C3,$516791A6,$CCB0A91F,$740CCE7A,$66B96194,$DE0506F1 ) ,( $00000000,$3D6029B0,$7AC05360,$47A07AD0,$F580A6C0,$C8E08F70,$8F40F5A0,$B220DC10, $30704BC1,$0D106271,$4AB018A1,$77D03111,$C5F0ED01,$F890C4B1,$BF30BE61,$825097D1, $60E09782,$5D80BE32,$1A20C4E2,$2740ED52,$95603142,$A80018F2,$EFA06222,$D2C04B92, $5090DC43,$6DF0F5F3,$2A508F23,$1730A693,$A5107A83,$98705333,$DFD029E3,$E2B00053, $C1C12F04,$FCA106B4,$BB017C64,$866155D4,$344189C4,$0921A074,$4E81DAA4,$73E1F314, $F1B164C5,$CCD14D75,$8B7137A5,$B6111E15,$0431C205,$3951EBB5,$7EF19165,$4391B8D5, $A121B886,$9C419136,$DBE1EBE6,$E681C256,$54A11E46,$69C137F6,$2E614D26,$13016496, $9151F347,$AC31DAF7,$EB91A027,$D6F18997,$64D15587,$59B17C37,$1E1106E7,$23712F57, $58F35849,$659371F9,$22330B29,$1F532299,$AD73FE89,$9013D739,$D7B3ADE9,$EAD38459, $68831388,$55E33A38,$124340E8,$2F236958,$9D03B548,$A0639CF8,$E7C3E628,$DAA3CF98, $3813CFCB,$0573E67B,$42D39CAB,$7FB3B51B,$CD93690B,$F0F340BB,$B7533A6B,$8A3313DB, $0863840A,$3503ADBA,$72A3D76A,$4FC3FEDA,$FDE322CA,$C0830B7A,$872371AA,$BA43581A, $9932774D,$A4525EFD,$E3F2242D,$DE920D9D,$6CB2D18D,$51D2F83D,$167282ED,$2B12AB5D, $A9423C8C,$9422153C,$D3826FEC,$EEE2465C,$5CC29A4C,$61A2B3FC,$2602C92C,$1B62E09C, $F9D2E0CF,$C4B2C97F,$8312B3AF,$BE729A1F,$0C52460F,$31326FBF,$7692156F,$4BF23CDF, $C9A2AB0E,$F4C282BE,$B362F86E,$8E02D1DE,$3C220DCE,$0142247E,$46E25EAE,$7B82771E, $B1E6B092,$8C869922,$CB26E3F2,$F646CA42,$44661652,$79063FE2,$3EA64532,$03C66C82, $8196FB53,$BCF6D2E3,$FB56A833,$C6368183,$74165D93,$49767423,$0ED60EF3,$33B62743, $D1062710,$EC660EA0,$ABC67470,$96A65DC0,$248681D0,$19E6A860,$5E46D2B0,$6326FB00, $E1766CD1,$DC164561,$9BB63FB1,$A6D61601,$14F6CA11,$2996E3A1,$6E369971,$5356B0C1, $70279F96,$4D47B626,$0AE7CCF6,$3787E546,$85A73956,$B8C710E6,$FF676A36,$C2074386, $4057D457,$7D37FDE7,$3A978737,$07F7AE87,$B5D77297,$88B75B27,$CF1721F7,$F2770847, $10C70814,$2DA721A4,$6A075B74,$576772C4,$E547AED4,$D8278764,$9F87FDB4,$A2E7D404, $20B743D5,$1DD76A65,$5A7710B5,$67173905,$D537E515,$E857CCA5,$AFF7B675,$92979FC5, $E915E8DB,$D475C16B,$93D5BBBB,$AEB5920B,$1C954E1B,$21F567AB,$66551D7B,$5B3534CB, $D965A31A,$E4058AAA,$A3A5F07A,$9EC5D9CA,$2CE505DA,$11852C6A,$562556BA,$6B457F0A, $89F57F59,$B49556E9,$F3352C39,$CE550589,$7C75D999,$4115F029,$06B58AF9,$3BD5A349, $B9853498,$84E51D28,$C34567F8,$FE254E48,$4C059258,$7165BBE8,$36C5C138,$0BA5E888, $28D4C7DF,$15B4EE6F,$521494BF,$6F74BD0F,$DD54611F,$E03448AF,$A794327F,$9AF41BCF, $18A48C1E,$25C4A5AE,$6264DF7E,$5F04F6CE,$ED242ADE,$D044036E,$97E479BE,$AA84500E, $4834505D,$755479ED,$32F4033D,$0F942A8D,$BDB4F69D,$80D4DF2D,$C774A5FD,$FA148C4D, $78441B9C,$4524322C,$028448FC,$3FE4614C,$8DC4BD5C,$B0A494EC,$F704EE3C,$CA64C78C ), ( $00000000,$CB5CD3A5,$4DC8A10B,$869472AE,$9B914216,$50CD91B3,$D659E31D,$1D0530B8, $EC53826D,$270F51C8,$A19B2366,$6AC7F0C3,$77C2C07B,$BC9E13DE,$3A0A6170,$F156B2D5, $03D6029B,$C88AD13E,$4E1EA390,$85427035,$9847408D,$531B9328,$D58FE186,$1ED33223, $EF8580F6,$24D95353,$A24D21FD,$6911F258,$7414C2E0,$BF481145,$39DC63EB,$F280B04E, $07AC0536,$CCF0D693,$4A64A43D,$81387798,$9C3D4720,$57619485,$D1F5E62B,$1AA9358E, $EBFF875B,$20A354FE,$A6372650,$6D6BF5F5,$706EC54D,$BB3216E8,$3DA66446,$F6FAB7E3, $047A07AD,$CF26D408,$49B2A6A6,$82EE7503,$9FEB45BB,$54B7961E,$D223E4B0,$197F3715, $E82985C0,$23755665,$A5E124CB,$6EBDF76E,$73B8C7D6,$B8E41473,$3E7066DD,$F52CB578, $0F580A6C,$C404D9C9,$4290AB67,$89CC78C2,$94C9487A,$5F959BDF,$D901E971,$125D3AD4, $E30B8801,$28575BA4,$AEC3290A,$659FFAAF,$789ACA17,$B3C619B2,$35526B1C,$FE0EB8B9, $0C8E08F7,$C7D2DB52,$4146A9FC,$8A1A7A59,$971F4AE1,$5C439944,$DAD7EBEA,$118B384F, $E0DD8A9A,$2B81593F,$AD152B91,$6649F834,$7B4CC88C,$B0101B29,$36846987,$FDD8BA22, $08F40F5A,$C3A8DCFF,$453CAE51,$8E607DF4,$93654D4C,$58399EE9,$DEADEC47,$15F13FE2, $E4A78D37,$2FFB5E92,$A96F2C3C,$6233FF99,$7F36CF21,$B46A1C84,$32FE6E2A,$F9A2BD8F, $0B220DC1,$C07EDE64,$46EAACCA,$8DB67F6F,$90B34FD7,$5BEF9C72,$DD7BEEDC,$16273D79, $E7718FAC,$2C2D5C09,$AAB92EA7,$61E5FD02,$7CE0CDBA,$B7BC1E1F,$31286CB1,$FA74BF14, $1EB014D8,$D5ECC77D,$5378B5D3,$98246676,$852156CE,$4E7D856B,$C8E9F7C5,$03B52460, $F2E396B5,$39BF4510,$BF2B37BE,$7477E41B,$6972D4A3,$A22E0706,$24BA75A8,$EFE6A60D, $1D661643,$D63AC5E6,$50AEB748,$9BF264ED,$86F75455,$4DAB87F0,$CB3FF55E,$006326FB, $F135942E,$3A69478B,$BCFD3525,$77A1E680,$6AA4D638,$A1F8059D,$276C7733,$EC30A496, $191C11EE,$D240C24B,$54D4B0E5,$9F886340,$828D53F8,$49D1805D,$CF45F2F3,$04192156, $F54F9383,$3E134026,$B8873288,$73DBE12D,$6EDED195,$A5820230,$2316709E,$E84AA33B, $1ACA1375,$D196C0D0,$5702B27E,$9C5E61DB,$815B5163,$4A0782C6,$CC93F068,$07CF23CD, $F6999118,$3DC542BD,$BB513013,$700DE3B6,$6D08D30E,$A65400AB,$20C07205,$EB9CA1A0, $11E81EB4,$DAB4CD11,$5C20BFBF,$977C6C1A,$8A795CA2,$41258F07,$C7B1FDA9,$0CED2E0C, $FDBB9CD9,$36E74F7C,$B0733DD2,$7B2FEE77,$662ADECF,$AD760D6A,$2BE27FC4,$E0BEAC61, $123E1C2F,$D962CF8A,$5FF6BD24,$94AA6E81,$89AF5E39,$42F38D9C,$C467FF32,$0F3B2C97, $FE6D9E42,$35314DE7,$B3A53F49,$78F9ECEC,$65FCDC54,$AEA00FF1,$28347D5F,$E368AEFA, $16441B82,$DD18C827,$5B8CBA89,$90D0692C,$8DD55994,$46898A31,$C01DF89F,$0B412B3A, $FA1799EF,$314B4A4A,$B7DF38E4,$7C83EB41,$6186DBF9,$AADA085C,$2C4E7AF2,$E712A957, $15921919,$DECECABC,$585AB812,$93066BB7,$8E035B0F,$455F88AA,$C3CBFA04,$089729A1, $F9C19B74,$329D48D1,$B4093A7F,$7F55E9DA,$6250D962,$A90C0AC7,$2F987869,$E4C4ABCC ), ( $00000000,$A6770BB4,$979F1129,$31E81A9D,$F44F2413,$52382FA7,$63D0353A,$C5A73E8E, $33EF4E67,$959845D3,$A4705F4E,$020754FA,$C7A06A74,$61D761C0,$503F7B5D,$F64870E9, $67DE9CCE,$C1A9977A,$F0418DE7,$56368653,$9391B8DD,$35E6B369,$040EA9F4,$A279A240, $5431D2A9,$F246D91D,$C3AEC380,$65D9C834,$A07EF6BA,$0609FD0E,$37E1E793,$9196EC27, $CFBD399C,$69CA3228,$582228B5,$FE552301,$3BF21D8F,$9D85163B,$AC6D0CA6,$0A1A0712, $FC5277FB,$5A257C4F,$6BCD66D2,$CDBA6D66,$081D53E8,$AE6A585C,$9F8242C1,$39F54975, $A863A552,$0E14AEE6,$3FFCB47B,$998BBFCF,$5C2C8141,$FA5B8AF5,$CBB39068,$6DC49BDC, $9B8CEB35,$3DFBE081,$0C13FA1C,$AA64F1A8,$6FC3CF26,$C9B4C492,$F85CDE0F,$5E2BD5BB, $440B7579,$E27C7ECD,$D3946450,$75E36FE4,$B044516A,$16335ADE,$27DB4043,$81AC4BF7, $77E43B1E,$D19330AA,$E07B2A37,$460C2183,$83AB1F0D,$25DC14B9,$14340E24,$B2430590, $23D5E9B7,$85A2E203,$B44AF89E,$123DF32A,$D79ACDA4,$71EDC610,$4005DC8D,$E672D739, $103AA7D0,$B64DAC64,$87A5B6F9,$21D2BD4D,$E47583C3,$42028877,$73EA92EA,$D59D995E, $8BB64CE5,$2DC14751,$1C295DCC,$BA5E5678,$7FF968F6,$D98E6342,$E86679DF,$4E11726B, $B8590282,$1E2E0936,$2FC613AB,$89B1181F,$4C162691,$EA612D25,$DB8937B8,$7DFE3C0C, $EC68D02B,$4A1FDB9F,$7BF7C102,$DD80CAB6,$1827F438,$BE50FF8C,$8FB8E511,$29CFEEA5, $DF879E4C,$79F095F8,$48188F65,$EE6F84D1,$2BC8BA5F,$8DBFB1EB,$BC57AB76,$1A20A0C2, $8816EAF2,$2E61E146,$1F89FBDB,$B9FEF06F,$7C59CEE1,$DA2EC555,$EBC6DFC8,$4DB1D47C, $BBF9A495,$1D8EAF21,$2C66B5BC,$8A11BE08,$4FB68086,$E9C18B32,$D82991AF,$7E5E9A1B, $EFC8763C,$49BF7D88,$78576715,$DE206CA1,$1B87522F,$BDF0599B,$8C184306,$2A6F48B2, $DC27385B,$7A5033EF,$4BB82972,$EDCF22C6,$28681C48,$8E1F17FC,$BFF70D61,$198006D5, $47ABD36E,$E1DCD8DA,$D034C247,$7643C9F3,$B3E4F77D,$1593FCC9,$247BE654,$820CEDE0, $74449D09,$D23396BD,$E3DB8C20,$45AC8794,$800BB91A,$267CB2AE,$1794A833,$B1E3A387, $20754FA0,$86024414,$B7EA5E89,$119D553D,$D43A6BB3,$724D6007,$43A57A9A,$E5D2712E, $139A01C7,$B5ED0A73,$840510EE,$22721B5A,$E7D525D4,$41A22E60,$704A34FD,$D63D3F49, $CC1D9F8B,$6A6A943F,$5B828EA2,$FDF58516,$3852BB98,$9E25B02C,$AFCDAAB1,$09BAA105, $FFF2D1EC,$5985DA58,$686DC0C5,$CE1ACB71,$0BBDF5FF,$ADCAFE4B,$9C22E4D6,$3A55EF62, $ABC30345,$0DB408F1,$3C5C126C,$9A2B19D8,$5F8C2756,$F9FB2CE2,$C813367F,$6E643DCB, $982C4D22,$3E5B4696,$0FB35C0B,$A9C457BF,$6C636931,$CA146285,$FBFC7818,$5D8B73AC, $03A0A617,$A5D7ADA3,$943FB73E,$3248BC8A,$F7EF8204,$519889B0,$6070932D,$C6079899, $304FE870,$9638E3C4,$A7D0F959,$01A7F2ED,$C400CC63,$6277C7D7,$539FDD4A,$F5E8D6FE, $647E3AD9,$C209316D,$F3E12BF0,$55962044,$90311ECA,$3646157E,$07AE0FE3,$A1D90457, $579174BE,$F1E67F0A,$C00E6597,$66796E23,$A3DE50AD,$05A95B19,$34414184,$92364A30 ), ( $00000000,$CCAA009E,$4225077D,$8E8F07E3,$844A0EFA,$48E00E64,$C66F0987,$0AC50919, $D3E51BB5,$1F4F1B2B,$91C01CC8,$5D6A1C56,$57AF154F,$9B0515D1,$158A1232,$D92012AC, $7CBB312B,$B01131B5,$3E9E3656,$F23436C8,$F8F13FD1,$345B3F4F,$BAD438AC,$767E3832, $AF5E2A9E,$63F42A00,$ED7B2DE3,$21D12D7D,$2B142464,$E7BE24FA,$69312319,$A59B2387, $F9766256,$35DC62C8,$BB53652B,$77F965B5,$7D3C6CAC,$B1966C32,$3F196BD1,$F3B36B4F, $2A9379E3,$E639797D,$68B67E9E,$A41C7E00,$AED97719,$62737787,$ECFC7064,$205670FA, $85CD537D,$496753E3,$C7E85400,$0B42549E,$01875D87,$CD2D5D19,$43A25AFA,$8F085A64, $562848C8,$9A824856,$140D4FB5,$D8A74F2B,$D2624632,$1EC846AC,$9047414F,$5CED41D1, $299DC2ED,$E537C273,$6BB8C590,$A712C50E,$ADD7CC17,$617DCC89,$EFF2CB6A,$2358CBF4, $FA78D958,$36D2D9C6,$B85DDE25,$74F7DEBB,$7E32D7A2,$B298D73C,$3C17D0DF,$F0BDD041, $5526F3C6,$998CF358,$1703F4BB,$DBA9F425,$D16CFD3C,$1DC6FDA2,$9349FA41,$5FE3FADF, $86C3E873,$4A69E8ED,$C4E6EF0E,$084CEF90,$0289E689,$CE23E617,$40ACE1F4,$8C06E16A, $D0EBA0BB,$1C41A025,$92CEA7C6,$5E64A758,$54A1AE41,$980BAEDF,$1684A93C,$DA2EA9A2, $030EBB0E,$CFA4BB90,$412BBC73,$8D81BCED,$8744B5F4,$4BEEB56A,$C561B289,$09CBB217, $AC509190,$60FA910E,$EE7596ED,$22DF9673,$281A9F6A,$E4B09FF4,$6A3F9817,$A6959889, $7FB58A25,$B31F8ABB,$3D908D58,$F13A8DC6,$FBFF84DF,$37558441,$B9DA83A2,$7570833C, $533B85DA,$9F918544,$111E82A7,$DDB48239,$D7718B20,$1BDB8BBE,$95548C5D,$59FE8CC3, $80DE9E6F,$4C749EF1,$C2FB9912,$0E51998C,$04949095,$C83E900B,$46B197E8,$8A1B9776, $2F80B4F1,$E32AB46F,$6DA5B38C,$A10FB312,$ABCABA0B,$6760BA95,$E9EFBD76,$2545BDE8, $FC65AF44,$30CFAFDA,$BE40A839,$72EAA8A7,$782FA1BE,$B485A120,$3A0AA6C3,$F6A0A65D, $AA4DE78C,$66E7E712,$E868E0F1,$24C2E06F,$2E07E976,$E2ADE9E8,$6C22EE0B,$A088EE95, $79A8FC39,$B502FCA7,$3B8DFB44,$F727FBDA,$FDE2F2C3,$3148F25D,$BFC7F5BE,$736DF520, $D6F6D6A7,$1A5CD639,$94D3D1DA,$5879D144,$52BCD85D,$9E16D8C3,$1099DF20,$DC33DFBE, $0513CD12,$C9B9CD8C,$4736CA6F,$8B9CCAF1,$8159C3E8,$4DF3C376,$C37CC495,$0FD6C40B, $7AA64737,$B60C47A9,$3883404A,$F42940D4,$FEEC49CD,$32464953,$BCC94EB0,$70634E2E, $A9435C82,$65E95C1C,$EB665BFF,$27CC5B61,$2D095278,$E1A352E6,$6F2C5505,$A386559B, $061D761C,$CAB77682,$44387161,$889271FF,$825778E6,$4EFD7878,$C0727F9B,$0CD87F05, $D5F86DA9,$19526D37,$97DD6AD4,$5B776A4A,$51B26353,$9D1863CD,$1397642E,$DF3D64B0, $83D02561,$4F7A25FF,$C1F5221C,$0D5F2282,$079A2B9B,$CB302B05,$45BF2CE6,$89152C78, $50353ED4,$9C9F3E4A,$121039A9,$DEBA3937,$D47F302E,$18D530B0,$965A3753,$5AF037CD, $FF6B144A,$33C114D4,$BD4E1337,$71E413A9,$7B211AB0,$B78B1A2E,$39041DCD,$F5AE1D53, $2C8E0FFF,$E0240F61,$6EAB0882,$A201081C,$A8C40105,$646E019B,$EAE10678,$264B06E6 ) ,( $00000000,$177B1443,$2EF62886,$398D3CC5,$5DEC510C,$4A97454F,$731A798A,$64616DC9, $BBD8A218,$ACA3B65B,$952E8A9E,$82559EDD,$E634F314,$F14FE757,$C8C2DB92,$DFB9CFD1, $ACC04271,$BBBB5632,$82366AF7,$954D7EB4,$F12C137D,$E657073E,$DFDA3BFB,$C8A12FB8, $1718E069,$0063F42A,$39EEC8EF,$2E95DCAC,$4AF4B165,$5D8FA526,$640299E3,$73798DA0, $82F182A3,$958A96E0,$AC07AA25,$BB7CBE66,$DF1DD3AF,$C866C7EC,$F1EBFB29,$E690EF6A, $392920BB,$2E5234F8,$17DF083D,$00A41C7E,$64C571B7,$73BE65F4,$4A335931,$5D484D72, $2E31C0D2,$394AD491,$00C7E854,$17BCFC17,$73DD91DE,$64A6859D,$5D2BB958,$4A50AD1B, $95E962CA,$82927689,$BB1F4A4C,$AC645E0F,$C80533C6,$DF7E2785,$E6F31B40,$F1880F03, $DE920307,$C9E91744,$F0642B81,$E71F3FC2,$837E520B,$94054648,$AD887A8D,$BAF36ECE, $654AA11F,$7231B55C,$4BBC8999,$5CC79DDA,$38A6F013,$2FDDE450,$1650D895,$012BCCD6, $72524176,$65295535,$5CA469F0,$4BDF7DB3,$2FBE107A,$38C50439,$014838FC,$16332CBF, $C98AE36E,$DEF1F72D,$E77CCBE8,$F007DFAB,$9466B262,$831DA621,$BA909AE4,$ADEB8EA7, $5C6381A4,$4B1895E7,$7295A922,$65EEBD61,$018FD0A8,$16F4C4EB,$2F79F82E,$3802EC6D, $E7BB23BC,$F0C037FF,$C94D0B3A,$DE361F79,$BA5772B0,$AD2C66F3,$94A15A36,$83DA4E75, $F0A3C3D5,$E7D8D796,$DE55EB53,$C92EFF10,$AD4F92D9,$BA34869A,$83B9BA5F,$94C2AE1C, $4B7B61CD,$5C00758E,$658D494B,$72F65D08,$169730C1,$01EC2482,$38611847,$2F1A0C04, $6655004F,$712E140C,$48A328C9,$5FD83C8A,$3BB95143,$2CC24500,$154F79C5,$02346D86, $DD8DA257,$CAF6B614,$F37B8AD1,$E4009E92,$8061F35B,$971AE718,$AE97DBDD,$B9ECCF9E, $CA95423E,$DDEE567D,$E4636AB8,$F3187EFB,$97791332,$80020771,$B98F3BB4,$AEF42FF7, $714DE026,$6636F465,$5FBBC8A0,$48C0DCE3,$2CA1B12A,$3BDAA569,$025799AC,$152C8DEF, $E4A482EC,$F3DF96AF,$CA52AA6A,$DD29BE29,$B948D3E0,$AE33C7A3,$97BEFB66,$80C5EF25, $5F7C20F4,$480734B7,$718A0872,$66F11C31,$029071F8,$15EB65BB,$2C66597E,$3B1D4D3D, $4864C09D,$5F1FD4DE,$6692E81B,$71E9FC58,$15889191,$02F385D2,$3B7EB917,$2C05AD54, $F3BC6285,$E4C776C6,$DD4A4A03,$CA315E40,$AE503389,$B92B27CA,$80A61B0F,$97DD0F4C, $B8C70348,$AFBC170B,$96312BCE,$814A3F8D,$E52B5244,$F2504607,$CBDD7AC2,$DCA66E81, $031FA150,$1464B513,$2DE989D6,$3A929D95,$5EF3F05C,$4988E41F,$7005D8DA,$677ECC99, $14074139,$037C557A,$3AF169BF,$2D8A7DFC,$49EB1035,$5E900476,$671D38B3,$70662CF0, $AFDFE321,$B8A4F762,$8129CBA7,$9652DFE4,$F233B22D,$E548A66E,$DCC59AAB,$CBBE8EE8, $3A3681EB,$2D4D95A8,$14C0A96D,$03BBBD2E,$67DAD0E7,$70A1C4A4,$492CF861,$5E57EC22, $81EE23F3,$969537B0,$AF180B75,$B8631F36,$DC0272FF,$CB7966BC,$F2F45A79,$E58F4E3A, $96F6C39A,$818DD7D9,$B800EB1C,$AF7BFF5F,$CB1A9296,$DC6186D5,$E5ECBA10,$F297AE53, $2D2E6182,$3A5575C1,$03D84904,$14A35D47,$70C2308E,$67B924CD,$5E341808,$494F0C4B ), ( $00000000,$EFC26B3E,$04F5D03D,$EB37BB03,$09EBA07A,$E629CB44,$0D1E7047,$E2DC1B79, $13D740F4,$FC152BCA,$172290C9,$F8E0FBF7,$1A3CE08E,$F5FE8BB0,$1EC930B3,$F10B5B8D, $27AE81E8,$C86CEAD6,$235B51D5,$CC993AEB,$2E452192,$C1874AAC,$2AB0F1AF,$C5729A91, $3479C11C,$DBBBAA22,$308C1121,$DF4E7A1F,$3D926166,$D2500A58,$3967B15B,$D6A5DA65, $4F5D03D0,$A09F68EE,$4BA8D3ED,$A46AB8D3,$46B6A3AA,$A974C894,$42437397,$AD8118A9, $5C8A4324,$B348281A,$587F9319,$B7BDF827,$5561E35E,$BAA38860,$51943363,$BE56585D, $68F38238,$8731E906,$6C065205,$83C4393B,$61182242,$8EDA497C,$65EDF27F,$8A2F9941, $7B24C2CC,$94E6A9F2,$7FD112F1,$901379CF,$72CF62B6,$9D0D0988,$763AB28B,$99F8D9B5, $9EBA07A0,$71786C9E,$9A4FD79D,$758DBCA3,$9751A7DA,$7893CCE4,$93A477E7,$7C661CD9, $8D6D4754,$62AF2C6A,$89989769,$665AFC57,$8486E72E,$6B448C10,$80733713,$6FB15C2D, $B9148648,$56D6ED76,$BDE15675,$52233D4B,$B0FF2632,$5F3D4D0C,$B40AF60F,$5BC89D31, $AAC3C6BC,$4501AD82,$AE361681,$41F47DBF,$A32866C6,$4CEA0DF8,$A7DDB6FB,$481FDDC5, $D1E70470,$3E256F4E,$D512D44D,$3AD0BF73,$D80CA40A,$37CECF34,$DCF97437,$333B1F09, $C2304484,$2DF22FBA,$C6C594B9,$2907FF87,$CBDBE4FE,$24198FC0,$CF2E34C3,$20EC5FFD, $F6498598,$198BEEA6,$F2BC55A5,$1D7E3E9B,$FFA225E2,$10604EDC,$FB57F5DF,$14959EE1, $E59EC56C,$0A5CAE52,$E16B1551,$0EA97E6F,$EC756516,$03B70E28,$E880B52B,$0742DE15, $E6050901,$09C7623F,$E2F0D93C,$0D32B202,$EFEEA97B,$002CC245,$EB1B7946,$04D91278, $F5D249F5,$1A1022CB,$F12799C8,$1EE5F2F6,$FC39E98F,$13FB82B1,$F8CC39B2,$170E528C, $C1AB88E9,$2E69E3D7,$C55E58D4,$2A9C33EA,$C8402893,$278243AD,$CCB5F8AE,$23779390, $D27CC81D,$3DBEA323,$D6891820,$394B731E,$DB976867,$34550359,$DF62B85A,$30A0D364, $A9580AD1,$469A61EF,$ADADDAEC,$426FB1D2,$A0B3AAAB,$4F71C195,$A4467A96,$4B8411A8, $BA8F4A25,$554D211B,$BE7A9A18,$51B8F126,$B364EA5F,$5CA68161,$B7913A62,$5853515C, $8EF68B39,$6134E007,$8A035B04,$65C1303A,$871D2B43,$68DF407D,$83E8FB7E,$6C2A9040, $9D21CBCD,$72E3A0F3,$99D41BF0,$761670CE,$94CA6BB7,$7B080089,$903FBB8A,$7FFDD0B4, $78BF0EA1,$977D659F,$7C4ADE9C,$9388B5A2,$7154AEDB,$9E96C5E5,$75A17EE6,$9A6315D8, $6B684E55,$84AA256B,$6F9D9E68,$805FF556,$6283EE2F,$8D418511,$66763E12,$89B4552C, $5F118F49,$B0D3E477,$5BE45F74,$B426344A,$56FA2F33,$B938440D,$520FFF0E,$BDCD9430, $4CC6CFBD,$A304A483,$48331F80,$A7F174BE,$452D6FC7,$AAEF04F9,$41D8BFFA,$AE1AD4C4, $37E20D71,$D820664F,$3317DD4C,$DCD5B672,$3E09AD0B,$D1CBC635,$3AFC7D36,$D53E1608, $24354D85,$CBF726BB,$20C09DB8,$CF02F686,$2DDEEDFF,$C21C86C1,$292B3DC2,$C6E956FC, $104C8C99,$FF8EE7A7,$14B95CA4,$FB7B379A,$19A72CE3,$F66547DD,$1D52FCDE,$F29097E0, $039BCC6D,$EC59A753,$076E1C50,$E8AC776E,$0A706C17,$E5B20729,$0E85BC2A,$E147D714 ), ( $00000000,$C18EDFC0,$586CB9C1,$99E26601,$B0D97382,$7157AC42,$E8B5CA43,$293B1583, $BAC3E145,$7B4D3E85,$E2AF5884,$23218744,$0A1A92C7,$CB944D07,$52762B06,$93F8F4C6, $AEF6C4CB,$6F781B0B,$F69A7D0A,$3714A2CA,$1E2FB749,$DFA16889,$46430E88,$87CDD148, $1435258E,$D5BBFA4E,$4C599C4F,$8DD7438F,$A4EC560C,$656289CC,$FC80EFCD,$3D0E300D, $869C8FD7,$47125017,$DEF03616,$1F7EE9D6,$3645FC55,$F7CB2395,$6E294594,$AFA79A54, $3C5F6E92,$FDD1B152,$6433D753,$A5BD0893,$8C861D10,$4D08C2D0,$D4EAA4D1,$15647B11, $286A4B1C,$E9E494DC,$7006F2DD,$B1882D1D,$98B3389E,$593DE75E,$C0DF815F,$01515E9F, $92A9AA59,$53277599,$CAC51398,$0B4BCC58,$2270D9DB,$E3FE061B,$7A1C601A,$BB92BFDA, $D64819EF,$17C6C62F,$8E24A02E,$4FAA7FEE,$66916A6D,$A71FB5AD,$3EFDD3AC,$FF730C6C, $6C8BF8AA,$AD05276A,$34E7416B,$F5699EAB,$DC528B28,$1DDC54E8,$843E32E9,$45B0ED29, $78BEDD24,$B93002E4,$20D264E5,$E15CBB25,$C867AEA6,$09E97166,$900B1767,$5185C8A7, $C27D3C61,$03F3E3A1,$9A1185A0,$5B9F5A60,$72A44FE3,$B32A9023,$2AC8F622,$EB4629E2, $50D49638,$915A49F8,$08B82FF9,$C936F039,$E00DE5BA,$21833A7A,$B8615C7B,$79EF83BB, $EA17777D,$2B99A8BD,$B27BCEBC,$73F5117C,$5ACE04FF,$9B40DB3F,$02A2BD3E,$C32C62FE, $FE2252F3,$3FAC8D33,$A64EEB32,$67C034F2,$4EFB2171,$8F75FEB1,$169798B0,$D7194770, $44E1B3B6,$856F6C76,$1C8D0A77,$DD03D5B7,$F438C034,$35B61FF4,$AC5479F5,$6DDAA635, $77E1359F,$B66FEA5F,$2F8D8C5E,$EE03539E,$C738461D,$06B699DD,$9F54FFDC,$5EDA201C, $CD22D4DA,$0CAC0B1A,$954E6D1B,$54C0B2DB,$7DFBA758,$BC757898,$25971E99,$E419C159, $D917F154,$18992E94,$817B4895,$40F59755,$69CE82D6,$A8405D16,$31A23B17,$F02CE4D7, $63D41011,$A25ACFD1,$3BB8A9D0,$FA367610,$D30D6393,$1283BC53,$8B61DA52,$4AEF0592, $F17DBA48,$30F36588,$A9110389,$689FDC49,$41A4C9CA,$802A160A,$19C8700B,$D846AFCB, $4BBE5B0D,$8A3084CD,$13D2E2CC,$D25C3D0C,$FB67288F,$3AE9F74F,$A30B914E,$62854E8E, $5F8B7E83,$9E05A143,$07E7C742,$C6691882,$EF520D01,$2EDCD2C1,$B73EB4C0,$76B06B00, $E5489FC6,$24C64006,$BD242607,$7CAAF9C7,$5591EC44,$941F3384,$0DFD5585,$CC738A45, $A1A92C70,$6027F3B0,$F9C595B1,$384B4A71,$11705FF2,$D0FE8032,$491CE633,$889239F3, $1B6ACD35,$DAE412F5,$430674F4,$8288AB34,$ABB3BEB7,$6A3D6177,$F3DF0776,$3251D8B6, $0F5FE8BB,$CED1377B,$5733517A,$96BD8EBA,$BF869B39,$7E0844F9,$E7EA22F8,$2664FD38, $B59C09FE,$7412D63E,$EDF0B03F,$2C7E6FFF,$05457A7C,$C4CBA5BC,$5D29C3BD,$9CA71C7D, $2735A3A7,$E6BB7C67,$7F591A66,$BED7C5A6,$97ECD025,$56620FE5,$CF8069E4,$0E0EB624, $9DF642E2,$5C789D22,$C59AFB23,$041424E3,$2D2F3160,$ECA1EEA0,$754388A1,$B4CD5761, $89C3676C,$484DB8AC,$D1AFDEAD,$1021016D,$391A14EE,$F894CB2E,$6176AD2F,$A0F872EF, $33008629,$F28E59E9,$6B6C3FE8,$AAE2E028,$83D9F5AB,$42572A6B,$DBB54C6A,$1A3B93AA ), ( $00000000,$9BA54C6F,$EC3B9E9F,$779ED2F0,$03063B7F,$98A37710,$EF3DA5E0,$7498E98F, $060C76FE,$9DA93A91,$EA37E861,$7192A40E,$050A4D81,$9EAF01EE,$E931D31E,$72949F71, $0C18EDFC,$97BDA193,$E0237363,$7B863F0C,$0F1ED683,$94BB9AEC,$E325481C,$78800473, $0A149B02,$91B1D76D,$E62F059D,$7D8A49F2,$0912A07D,$92B7EC12,$E5293EE2,$7E8C728D, $1831DBF8,$83949797,$F40A4567,$6FAF0908,$1B37E087,$8092ACE8,$F70C7E18,$6CA93277, $1E3DAD06,$8598E169,$F2063399,$69A37FF6,$1D3B9679,$869EDA16,$F10008E6,$6AA54489, $14293604,$8F8C7A6B,$F812A89B,$63B7E4F4,$172F0D7B,$8C8A4114,$FB1493E4,$60B1DF8B, $122540FA,$89800C95,$FE1EDE65,$65BB920A,$11237B85,$8A8637EA,$FD18E51A,$66BDA975, $3063B7F0,$ABC6FB9F,$DC58296F,$47FD6500,$33658C8F,$A8C0C0E0,$DF5E1210,$44FB5E7F, $366FC10E,$ADCA8D61,$DA545F91,$41F113FE,$3569FA71,$AECCB61E,$D95264EE,$42F72881, $3C7B5A0C,$A7DE1663,$D040C493,$4BE588FC,$3F7D6173,$A4D82D1C,$D346FFEC,$48E3B383, $3A772CF2,$A1D2609D,$D64CB26D,$4DE9FE02,$3971178D,$A2D45BE2,$D54A8912,$4EEFC57D, $28526C08,$B3F72067,$C469F297,$5FCCBEF8,$2B545777,$B0F11B18,$C76FC9E8,$5CCA8587, $2E5E1AF6,$B5FB5699,$C2658469,$59C0C806,$2D582189,$B6FD6DE6,$C163BF16,$5AC6F379, $244A81F4,$BFEFCD9B,$C8711F6B,$53D45304,$274CBA8B,$BCE9F6E4,$CB772414,$50D2687B, $2246F70A,$B9E3BB65,$CE7D6995,$55D825FA,$2140CC75,$BAE5801A,$CD7B52EA,$56DE1E85, $60C76FE0,$FB62238F,$8CFCF17F,$1759BD10,$63C1549F,$F86418F0,$8FFACA00,$145F866F, $66CB191E,$FD6E5571,$8AF08781,$1155CBEE,$65CD2261,$FE686E0E,$89F6BCFE,$1253F091, $6CDF821C,$F77ACE73,$80E41C83,$1B4150EC,$6FD9B963,$F47CF50C,$83E227FC,$18476B93, $6AD3F4E2,$F176B88D,$86E86A7D,$1D4D2612,$69D5CF9D,$F27083F2,$85EE5102,$1E4B1D6D, $78F6B418,$E353F877,$94CD2A87,$0F6866E8,$7BF08F67,$E055C308,$97CB11F8,$0C6E5D97, $7EFAC2E6,$E55F8E89,$92C15C79,$09641016,$7DFCF999,$E659B5F6,$91C76706,$0A622B69, $74EE59E4,$EF4B158B,$98D5C77B,$03708B14,$77E8629B,$EC4D2EF4,$9BD3FC04,$0076B06B, $72E22F1A,$E9476375,$9ED9B185,$057CFDEA,$71E41465,$EA41580A,$9DDF8AFA,$067AC695, $50A4D810,$CB01947F,$BC9F468F,$273A0AE0,$53A2E36F,$C807AF00,$BF997DF0,$243C319F, $56A8AEEE,$CD0DE281,$BA933071,$21367C1E,$55AE9591,$CE0BD9FE,$B9950B0E,$22304761, $5CBC35EC,$C7197983,$B087AB73,$2B22E71C,$5FBA0E93,$C41F42FC,$B381900C,$2824DC63, $5AB04312,$C1150F7D,$B68BDD8D,$2D2E91E2,$59B6786D,$C2133402,$B58DE6F2,$2E28AA9D, $489503E8,$D3304F87,$A4AE9D77,$3F0BD118,$4B933897,$D03674F8,$A7A8A608,$3C0DEA67, $4E997516,$D53C3979,$A2A2EB89,$3907A7E6,$4D9F4E69,$D63A0206,$A1A4D0F6,$3A019C99, $448DEE14,$DF28A27B,$A8B6708B,$33133CE4,$478BD56B,$DC2E9904,$ABB04BF4,$3015079B, $428198EA,$D924D485,$AEBA0675,$351F4A1A,$4187A395,$DA22EFFA,$ADBC3D0A,$36197165 ), ( $00000000,$DD96D985,$605CB54B,$BDCA6CCE,$C0B96A96,$1D2FB313,$A0E5DFDD,$7D730658, $5A03D36D,$87950AE8,$3A5F6626,$E7C9BFA3,$9ABAB9FB,$472C607E,$FAE60CB0,$2770D535, $B407A6DA,$69917F5F,$D45B1391,$09CDCA14,$74BECC4C,$A92815C9,$14E27907,$C974A082, $EE0475B7,$3392AC32,$8E58C0FC,$53CE1979,$2EBD1F21,$F32BC6A4,$4EE1AA6A,$937773EF, $B37E4BF5,$6EE89270,$D322FEBE,$0EB4273B,$73C72163,$AE51F8E6,$139B9428,$CE0D4DAD, $E97D9898,$34EB411D,$89212DD3,$54B7F456,$29C4F20E,$F4522B8B,$49984745,$940E9EC0, $0779ED2F,$DAEF34AA,$67255864,$BAB381E1,$C7C087B9,$1A565E3C,$A79C32F2,$7A0AEB77, $5D7A3E42,$80ECE7C7,$3D268B09,$E0B0528C,$9DC354D4,$40558D51,$FD9FE19F,$2009381A, $BD8D91AB,$601B482E,$DDD124E0,$0047FD65,$7D34FB3D,$A0A222B8,$1D684E76,$C0FE97F3, $E78E42C6,$3A189B43,$87D2F78D,$5A442E08,$27372850,$FAA1F1D5,$476B9D1B,$9AFD449E, $098A3771,$D41CEEF4,$69D6823A,$B4405BBF,$C9335DE7,$14A58462,$A96FE8AC,$74F93129, $5389E41C,$8E1F3D99,$33D55157,$EE4388D2,$93308E8A,$4EA6570F,$F36C3BC1,$2EFAE244, $0EF3DA5E,$D36503DB,$6EAF6F15,$B339B690,$CE4AB0C8,$13DC694D,$AE160583,$7380DC06, $54F00933,$8966D0B6,$34ACBC78,$E93A65FD,$944963A5,$49DFBA20,$F415D6EE,$29830F6B, $BAF47C84,$6762A501,$DAA8C9CF,$073E104A,$7A4D1612,$A7DBCF97,$1A11A359,$C7877ADC, $E0F7AFE9,$3D61766C,$80AB1AA2,$5D3DC327,$204EC57F,$FDD81CFA,$40127034,$9D84A9B1, $A06A2517,$7DFCFC92,$C036905C,$1DA049D9,$60D34F81,$BD459604,$008FFACA,$DD19234F, $FA69F67A,$27FF2FFF,$9A354331,$47A39AB4,$3AD09CEC,$E7464569,$5A8C29A7,$871AF022, $146D83CD,$C9FB5A48,$74313686,$A9A7EF03,$D4D4E95B,$094230DE,$B4885C10,$691E8595, $4E6E50A0,$93F88925,$2E32E5EB,$F3A43C6E,$8ED73A36,$5341E3B3,$EE8B8F7D,$331D56F8, $13146EE2,$CE82B767,$7348DBA9,$AEDE022C,$D3AD0474,$0E3BDDF1,$B3F1B13F,$6E6768BA, $4917BD8F,$9481640A,$294B08C4,$F4DDD141,$89AED719,$54380E9C,$E9F26252,$3464BBD7, $A713C838,$7A8511BD,$C74F7D73,$1AD9A4F6,$67AAA2AE,$BA3C7B2B,$07F617E5,$DA60CE60, $FD101B55,$2086C2D0,$9D4CAE1E,$40DA779B,$3DA971C3,$E03FA846,$5DF5C488,$80631D0D, $1DE7B4BC,$C0716D39,$7DBB01F7,$A02DD872,$DD5EDE2A,$00C807AF,$BD026B61,$6094B2E4, $47E467D1,$9A72BE54,$27B8D29A,$FA2E0B1F,$875D0D47,$5ACBD4C2,$E701B80C,$3A976189, $A9E01266,$7476CBE3,$C9BCA72D,$142A7EA8,$695978F0,$B4CFA175,$0905CDBB,$D493143E, $F3E3C10B,$2E75188E,$93BF7440,$4E29ADC5,$335AAB9D,$EECC7218,$53061ED6,$8E90C753, $AE99FF49,$730F26CC,$CEC54A02,$13539387,$6E2095DF,$B3B64C5A,$0E7C2094,$D3EAF911, $F49A2C24,$290CF5A1,$94C6996F,$495040EA,$342346B2,$E9B59F37,$547FF3F9,$89E92A7C, $1A9E5993,$C7088016,$7AC2ECD8,$A754355D,$DA273305,$07B1EA80,$BA7B864E,$67ED5FCB, $409D8AFE,$9D0B537B,$20C13FB5,$FD57E630,$8024E068,$5DB239ED,$E0785523,$3DEE8CA6 ), ( $00000000,$9D0FE176,$E16EC4AD,$7C6125DB,$19AC8F1B,$84A36E6D,$F8C24BB6,$65CDAAC0, $33591E36,$AE56FF40,$D237DA9B,$4F383BED,$2AF5912D,$B7FA705B,$CB9B5580,$5694B4F6, $66B23C6C,$FBBDDD1A,$87DCF8C1,$1AD319B7,$7F1EB377,$E2115201,$9E7077DA,$037F96AC, $55EB225A,$C8E4C32C,$B485E6F7,$298A0781,$4C47AD41,$D1484C37,$AD2969EC,$3026889A, $CD6478D8,$506B99AE,$2C0ABC75,$B1055D03,$D4C8F7C3,$49C716B5,$35A6336E,$A8A9D218, $FE3D66EE,$63328798,$1F53A243,$825C4335,$E791E9F5,$7A9E0883,$06FF2D58,$9BF0CC2E, $ABD644B4,$36D9A5C2,$4AB88019,$D7B7616F,$B27ACBAF,$2F752AD9,$53140F02,$CE1BEE74, $988F5A82,$0580BBF4,$79E19E2F,$E4EE7F59,$8123D599,$1C2C34EF,$604D1134,$FD42F042, $41B9F7F1,$DCB61687,$A0D7335C,$3DD8D22A,$581578EA,$C51A999C,$B97BBC47,$24745D31, $72E0E9C7,$EFEF08B1,$938E2D6A,$0E81CC1C,$6B4C66DC,$F64387AA,$8A22A271,$172D4307, $270BCB9D,$BA042AEB,$C6650F30,$5B6AEE46,$3EA74486,$A3A8A5F0,$DFC9802B,$42C6615D, $1452D5AB,$895D34DD,$F53C1106,$6833F070,$0DFE5AB0,$90F1BBC6,$EC909E1D,$719F7F6B, $8CDD8F29,$11D26E5F,$6DB34B84,$F0BCAAF2,$95710032,$087EE144,$741FC49F,$E91025E9, $BF84911F,$228B7069,$5EEA55B2,$C3E5B4C4,$A6281E04,$3B27FF72,$4746DAA9,$DA493BDF, $EA6FB345,$77605233,$0B0177E8,$960E969E,$F3C33C5E,$6ECCDD28,$12ADF8F3,$8FA21985, $D936AD73,$44394C05,$385869DE,$A55788A8,$C09A2268,$5D95C31E,$21F4E6C5,$BCFB07B3, $8373EFE2,$1E7C0E94,$621D2B4F,$FF12CA39,$9ADF60F9,$07D0818F,$7BB1A454,$E6BE4522, $B02AF1D4,$2D2510A2,$51443579,$CC4BD40F,$A9867ECF,$34899FB9,$48E8BA62,$D5E75B14, $E5C1D38E,$78CE32F8,$04AF1723,$99A0F655,$FC6D5C95,$6162BDE3,$1D039838,$800C794E, $D698CDB8,$4B972CCE,$37F60915,$AAF9E863,$CF3442A3,$523BA3D5,$2E5A860E,$B3556778, $4E17973A,$D318764C,$AF795397,$3276B2E1,$57BB1821,$CAB4F957,$B6D5DC8C,$2BDA3DFA, $7D4E890C,$E041687A,$9C204DA1,$012FACD7,$64E20617,$F9EDE761,$858CC2BA,$188323CC, $28A5AB56,$B5AA4A20,$C9CB6FFB,$54C48E8D,$3109244D,$AC06C53B,$D067E0E0,$4D680196, $1BFCB560,$86F35416,$FA9271CD,$679D90BB,$02503A7B,$9F5FDB0D,$E33EFED6,$7E311FA0, $C2CA1813,$5FC5F965,$23A4DCBE,$BEAB3DC8,$DB669708,$4669767E,$3A0853A5,$A707B2D3, $F1930625,$6C9CE753,$10FDC288,$8DF223FE,$E83F893E,$75306848,$09514D93,$945EACE5, $A478247F,$3977C509,$4516E0D2,$D81901A4,$BDD4AB64,$20DB4A12,$5CBA6FC9,$C1B58EBF, $97213A49,$0A2EDB3F,$764FFEE4,$EB401F92,$8E8DB552,$13825424,$6FE371FF,$F2EC9089, $0FAE60CB,$92A181BD,$EEC0A466,$73CF4510,$1602EFD0,$8B0D0EA6,$F76C2B7D,$6A63CA0B, $3CF77EFD,$A1F89F8B,$DD99BA50,$40965B26,$255BF1E6,$B8541090,$C435354B,$593AD43D, $691C5CA7,$F413BDD1,$8872980A,$157D797C,$70B0D3BC,$EDBF32CA,$91DE1711,$0CD1F667, $5A454291,$C74AA3E7,$BB2B863C,$2624674A,$43E9CD8A,$DEE62CFC,$A2870927,$3F88E851 ), ( $00000000,$B9FBDBE8,$A886B191,$117D6A79,$8A7C6563,$3387BE8B,$22FAD4F2,$9B010F1A, $CF89CC87,$7672176F,$670F7D16,$DEF4A6FE,$45F5A9E4,$FC0E720C,$ED731875,$5488C39D, $44629F4F,$FD9944A7,$ECE42EDE,$551FF536,$CE1EFA2C,$77E521C4,$66984BBD,$DF639055, $8BEB53C8,$32108820,$236DE259,$9A9639B1,$019736AB,$B86CED43,$A911873A,$10EA5CD2, $88C53E9E,$313EE576,$20438F0F,$99B854E7,$02B95BFD,$BB428015,$AA3FEA6C,$13C43184, $474CF219,$FEB729F1,$EFCA4388,$56319860,$CD30977A,$74CB4C92,$65B626EB,$DC4DFD03, $CCA7A1D1,$755C7A39,$64211040,$DDDACBA8,$46DBC4B2,$FF201F5A,$EE5D7523,$57A6AECB, $032E6D56,$BAD5B6BE,$ABA8DCC7,$1253072F,$89520835,$30A9D3DD,$21D4B9A4,$982F624C, $CAFB7B7D,$7300A095,$627DCAEC,$DB861104,$40871E1E,$F97CC5F6,$E801AF8F,$51FA7467, $0572B7FA,$BC896C12,$ADF4066B,$140FDD83,$8F0ED299,$36F50971,$27886308,$9E73B8E0, $8E99E432,$37623FDA,$261F55A3,$9FE48E4B,$04E58151,$BD1E5AB9,$AC6330C0,$1598EB28, $411028B5,$F8EBF35D,$E9969924,$506D42CC,$CB6C4DD6,$7297963E,$63EAFC47,$DA1127AF, $423E45E3,$FBC59E0B,$EAB8F472,$53432F9A,$C8422080,$71B9FB68,$60C49111,$D93F4AF9, $8DB78964,$344C528C,$253138F5,$9CCAE31D,$07CBEC07,$BE3037EF,$AF4D5D96,$16B6867E, $065CDAAC,$BFA70144,$AEDA6B3D,$1721B0D5,$8C20BFCF,$35DB6427,$24A60E5E,$9D5DD5B6, $C9D5162B,$702ECDC3,$6153A7BA,$D8A87C52,$43A97348,$FA52A8A0,$EB2FC2D9,$52D41931, $4E87F0BB,$F77C2B53,$E601412A,$5FFA9AC2,$C4FB95D8,$7D004E30,$6C7D2449,$D586FFA1, $810E3C3C,$38F5E7D4,$29888DAD,$90735645,$0B72595F,$B28982B7,$A3F4E8CE,$1A0F3326, $0AE56FF4,$B31EB41C,$A263DE65,$1B98058D,$80990A97,$3962D17F,$281FBB06,$91E460EE, $C56CA373,$7C97789B,$6DEA12E2,$D411C90A,$4F10C610,$F6EB1DF8,$E7967781,$5E6DAC69, $C642CE25,$7FB915CD,$6EC47FB4,$D73FA45C,$4C3EAB46,$F5C570AE,$E4B81AD7,$5D43C13F, $09CB02A2,$B030D94A,$A14DB333,$18B668DB,$83B767C1,$3A4CBC29,$2B31D650,$92CA0DB8, $8220516A,$3BDB8A82,$2AA6E0FB,$935D3B13,$085C3409,$B1A7EFE1,$A0DA8598,$19215E70, $4DA99DED,$F4524605,$E52F2C7C,$5CD4F794,$C7D5F88E,$7E2E2366,$6F53491F,$D6A892F7, $847C8BC6,$3D87502E,$2CFA3A57,$9501E1BF,$0E00EEA5,$B7FB354D,$A6865F34,$1F7D84DC, $4BF54741,$F20E9CA9,$E373F6D0,$5A882D38,$C1892222,$7872F9CA,$690F93B3,$D0F4485B, $C01E1489,$79E5CF61,$6898A518,$D1637EF0,$4A6271EA,$F399AA02,$E2E4C07B,$5B1F1B93, $0F97D80E,$B66C03E6,$A711699F,$1EEAB277,$85EBBD6D,$3C106685,$2D6D0CFC,$9496D714, $0CB9B558,$B5426EB0,$A43F04C9,$1DC4DF21,$86C5D03B,$3F3E0BD3,$2E4361AA,$97B8BA42, $C33079DF,$7ACBA237,$6BB6C84E,$D24D13A6,$494C1CBC,$F0B7C754,$E1CAAD2D,$583176C5, $48DB2A17,$F120F1FF,$E05D9B86,$59A6406E,$C2A74F74,$7B5C949C,$6A21FEE5,$D3DA250D, $8752E690,$3EA93D78,$2FD45701,$962F8CE9,$0D2E83F3,$B4D5581B,$A5A83262,$1C53E98A ), ( $00000000,$AE689191,$87A02563,$29C8B4F2,$D4314C87,$7A59DD16,$539169E4,$FDF9F875, $73139F4F,$DD7B0EDE,$F4B3BA2C,$5ADB2BBD,$A722D3C8,$094A4259,$2082F6AB,$8EEA673A, $E6273E9E,$484FAF0F,$61871BFD,$CFEF8A6C,$32167219,$9C7EE388,$B5B6577A,$1BDEC6EB, $9534A1D1,$3B5C3040,$129484B2,$BCFC1523,$4105ED56,$EF6D7CC7,$C6A5C835,$68CD59A4, $173F7B7D,$B957EAEC,$909F5E1E,$3EF7CF8F,$C30E37FA,$6D66A66B,$44AE1299,$EAC68308, $642CE432,$CA4475A3,$E38CC151,$4DE450C0,$B01DA8B5,$1E753924,$37BD8DD6,$99D51C47, $F11845E3,$5F70D472,$76B86080,$D8D0F111,$25290964,$8B4198F5,$A2892C07,$0CE1BD96, $820BDAAC,$2C634B3D,$05ABFFCF,$ABC36E5E,$563A962B,$F85207BA,$D19AB348,$7FF222D9, $2E7EF6FA,$8016676B,$A9DED399,$07B64208,$FA4FBA7D,$54272BEC,$7DEF9F1E,$D3870E8F, $5D6D69B5,$F305F824,$DACD4CD6,$74A5DD47,$895C2532,$2734B4A3,$0EFC0051,$A09491C0, $C859C864,$663159F5,$4FF9ED07,$E1917C96,$1C6884E3,$B2001572,$9BC8A180,$35A03011, $BB4A572B,$1522C6BA,$3CEA7248,$9282E3D9,$6F7B1BAC,$C1138A3D,$E8DB3ECF,$46B3AF5E, $39418D87,$97291C16,$BEE1A8E4,$10893975,$ED70C100,$43185091,$6AD0E463,$C4B875F2, $4A5212C8,$E43A8359,$CDF237AB,$639AA63A,$9E635E4F,$300BCFDE,$19C37B2C,$B7ABEABD, $DF66B319,$710E2288,$58C6967A,$F6AE07EB,$0B57FF9E,$A53F6E0F,$8CF7DAFD,$229F4B6C, $AC752C56,$021DBDC7,$2BD50935,$85BD98A4,$784460D1,$D62CF140,$FFE445B2,$518CD423, $5CFDEDF4,$F2957C65,$DB5DC897,$75355906,$88CCA173,$26A430E2,$0F6C8410,$A1041581, $2FEE72BB,$8186E32A,$A84E57D8,$0626C649,$FBDF3E3C,$55B7AFAD,$7C7F1B5F,$D2178ACE, $BADAD36A,$14B242FB,$3D7AF609,$93126798,$6EEB9FED,$C0830E7C,$E94BBA8E,$47232B1F, $C9C94C25,$67A1DDB4,$4E696946,$E001F8D7,$1DF800A2,$B3909133,$9A5825C1,$3430B450, $4BC29689,$E5AA0718,$CC62B3EA,$620A227B,$9FF3DA0E,$319B4B9F,$1853FF6D,$B63B6EFC, $38D109C6,$96B99857,$BF712CA5,$1119BD34,$ECE04541,$4288D4D0,$6B406022,$C528F1B3, $ADE5A817,$038D3986,$2A458D74,$842D1CE5,$79D4E490,$D7BC7501,$FE74C1F3,$501C5062, $DEF63758,$709EA6C9,$5956123B,$F73E83AA,$0AC77BDF,$A4AFEA4E,$8D675EBC,$230FCF2D, $72831B0E,$DCEB8A9F,$F5233E6D,$5B4BAFFC,$A6B25789,$08DAC618,$211272EA,$8F7AE37B, $01908441,$AFF815D0,$8630A122,$285830B3,$D5A1C8C6,$7BC95957,$5201EDA5,$FC697C34, $94A42590,$3ACCB401,$130400F3,$BD6C9162,$40956917,$EEFDF886,$C7354C74,$695DDDE5, $E7B7BADF,$49DF2B4E,$60179FBC,$CE7F0E2D,$3386F658,$9DEE67C9,$B426D33B,$1A4E42AA, $65BC6073,$CBD4F1E2,$E21C4510,$4C74D481,$B18D2CF4,$1FE5BD65,$362D0997,$98459806, $16AFFF3C,$B8C76EAD,$910FDA5F,$3F674BCE,$C29EB3BB,$6CF6222A,$453E96D8,$EB560749, $839B5EED,$2DF3CF7C,$043B7B8E,$AA53EA1F,$57AA126A,$F9C283FB,$D00A3709,$7E62A698, $F088C1A2,$5EE05033,$7728E4C1,$D9407550,$24B98D25,$8AD11CB4,$A319A846,$0D7139D7 ) ); /// compute CRC32 (Slicing-by-16 algorithm) function crc32_16bytes(const data: PByte; length: Integer; previousCrc32: Cardinal = 0): Cardinal; const Unroll = 4; BytesAtOnce = 16 * Unroll; var crc: cardinal; unrolling: integer; current: PLongWord; currentChar: PByte; one, two, three, four: cardinal; begin crc := previousCrc32 xor $FFFFFFFF; current := PLongWord(data); // enabling optimization (at least -O2) automatically unrolls the inner for-loop while (length >= BytesAtOnce) do begin for unrolling := 0 to Unroll - 1 do begin one := current^ xor crc; Inc(current); two := current^; Inc(current); three := current^; Inc(current); four := current^; Inc(current); crc := Crc32Lookup[ 0][(four shr 24) and $FF] xor Crc32Lookup[ 1][(four shr 16) and $FF] xor Crc32Lookup[ 2][(four shr 8) and $FF] xor Crc32Lookup[ 3][ four and $FF] xor Crc32Lookup[ 4][(three shr 24) and $FF] xor Crc32Lookup[ 5][(three shr 16) and $FF] xor Crc32Lookup[ 6][(three shr 8) and $FF] xor Crc32Lookup[ 7][ three and $FF] xor Crc32Lookup[ 8][(two shr 24) and $FF] xor Crc32Lookup[ 9][(two shr 16) and $FF] xor Crc32Lookup[10][(two shr 8) and $FF] xor Crc32Lookup[11][ two and $FF] xor Crc32Lookup[12][(one shr 24) and $FF] xor Crc32Lookup[13][(one shr 16) and $FF] xor Crc32Lookup[14][(one shr 8) and $FF] xor Crc32Lookup[15][ one and $FF]; end; length -= BytesAtOnce; end; currentChar := PByte(current); // remaining 1 to 63 bytes (standard algorithm) while (length <> 0) do begin crc := (crc shr 8) xor Crc32Lookup[0][(crc and $FF) xor currentChar^]; Inc(currentChar); Dec(length); end; Result:= crc xor $FFFFFFFF; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcblake3.pp���������������������������������������������0000644�0001750�0000144�00000065513�15104114162�022050� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ BLAKE3 - cryptographic hash function. The C code is copyright Samuel Neves and Jack O'Connor, 2019-2020. The assembly code is copyright Samuel Neves, 2019-2020. The Pascal translation by Alexander Koblov, 2020. This work is released into the public domain with CC0 1.0. Alternatively, it is licensed under the Apache License 2.0. } unit DCblake3; {$mode objfpc}{$H+} {$inline on}{$Q-} {$macro on}{$R-} interface uses Classes, SysUtils, CTypes; const BLAKE3_KEY_LEN = 32; BLAKE3_OUT_LEN = 32; BLAKE3_BLOCK_LEN = 64; BLAKE3_CHUNK_LEN = 1024; BLAKE3_MAX_DEPTH = 54; BLAKE3_MAX_SIMD_DEGREE = 16; {$if defined(CPUX86_64)} MAX_SIMD_DEGREE = 16; {$else} MAX_SIMD_DEGREE = 1; {$endif} {$if (MAX_SIMD_DEGREE > 2)} MAX_SIMD_DEGREE_OR_2 = MAX_SIMD_DEGREE; {$else} MAX_SIMD_DEGREE_OR_2 = 2; {$endif} const BLAKE3_IV: array[0..7] of cuint32 = ( $6A09E667, $BB67AE85, $3C6EF372, $A54FF53A, $510E527F, $9B05688C, $1F83D9AB, $5BE0CD19 ); const MSG_SCHEDULE: array[0..6] of array[0..15] of cuint8 = ( (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), (2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8), (3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1), (10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6), (12, 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4), (9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7), (11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13) ); type ppcuint8 = ^pcuint8; Tblake_cv = array[0..7] of cuint32; Pblake3_chunk_state = ^blake3_chunk_state; blake3_chunk_state = record cv: array[0..7] of cuint32; chunk_counter: cuint64; buf: array[0..Pred(BLAKE3_BLOCK_LEN)] of cuint8; buf_len: cuint8; blocks_compressed: cuint8; flags: cuint8; end; Pblake3_hasher = ^blake3_hasher; blake3_hasher = record key: array[0..7] of cuint32; chunk: blake3_chunk_state; cv_stack_len: cuint8; cv_stack: array[0..Pred((BLAKE3_MAX_DEPTH + 1) * BLAKE3_OUT_LEN)] of cuint8; end; procedure blake3_hasher_init(self: Pblake3_hasher); procedure blake3_hasher_update(self: Pblake3_hasher; const input: Pointer; input_len: csize_t); procedure blake3_hasher_finalize(const self: Pblake3_hasher; out_: pcuint8; out_len: csize_t); implementation {$IF DEFINED(CPUX86_64)} uses CPU; {$ENDIF} type blake3_flags = ( CHUNK_START = 1 shl 0, CHUNK_END = 1 shl 1, PARENT = 1 shl 2, ROOT = 1 shl 3, KEYED_HASH = 1 shl 4, DERIVE_KEY_CONTEXT = 1 shl 5, DERIVE_KEY_MATERIAL = 1 shl 6 ); Poutput_t = ^output_t; output_t = record input_cv: array[0..7] of cuint32; counter: cuint64; block: array[0..Pred(BLAKE3_BLOCK_LEN)] of cuint8; block_len: cuint8; flags: cuint8; end; function load32( const src: Pointer ): cuint32; inline; begin Result := NtoLE(pcuint32(src)^); end; procedure store32( dst: pointer; w: cuint32 ); inline; begin pcuint32(dst)^ := LEtoN(w); end; procedure store_cv_words(bytes_out: pcuint8; cv_words: pcuint32); inline; begin store32(@bytes_out[0 * 4], cv_words[0]); store32(@bytes_out[1 * 4], cv_words[1]); store32(@bytes_out[2 * 4], cv_words[2]); store32(@bytes_out[3 * 4], cv_words[3]); store32(@bytes_out[4 * 4], cv_words[4]); store32(@bytes_out[5 * 4], cv_words[5]); store32(@bytes_out[6 * 4], cv_words[6]); store32(@bytes_out[7 * 4], cv_words[7]); end; function round_down_to_power_of_2(x: cuint64): cuint64; inline; begin Result := cuint64(1) shl BsrQWord(x or 1); end; procedure chunk_state_init(self: Pblake3_chunk_state; const key: pcuint32; flags: cuint8); inline; begin Move(key^, self^.cv[0], BLAKE3_KEY_LEN); self^.chunk_counter := 0; FillChar(self^.buf[0], BLAKE3_BLOCK_LEN, 0); self^.buf_len := 0; self^.blocks_compressed := 0; self^.flags := flags; end; procedure chunk_state_reset(self: Pblake3_chunk_state; const key: pcuint32; chunk_counter: cuint64); inline; begin Move(key^, self^.cv[0], BLAKE3_KEY_LEN); self^.chunk_counter := chunk_counter; self^.blocks_compressed := 0; FillChar(self^.buf, BLAKE3_BLOCK_LEN, 0); self^.buf_len := 0; end; function chunk_state_len(const self: Pblake3_chunk_state): csize_t; inline; begin Result := (BLAKE3_BLOCK_LEN * csize_t(self^.blocks_compressed)) + (csize_t(self^.buf_len)); end; function chunk_state_fill_buf(self: Pblake3_chunk_state; const input: pcuint8; input_len: csize_t): csize_t; inline; var dest: pcuint8; begin Result := BLAKE3_BLOCK_LEN - (csize_t(self^.buf_len)); if (Result > input_len) then begin Result := input_len; end; dest := PByte(self^.buf) + (csize_t(self^.buf_len)); Move(input^, dest^, Result); self^.buf_len += cuint8(Result); end; function chunk_state_maybe_start_flag(const self: Pblake3_chunk_state): cuint8; inline; begin if (self^.blocks_compressed = 0) then Result := cuint8(CHUNK_START) else begin Result := 0; end; end; function make_output(const input_cv: Tblake_cv; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8): output_t; inline; begin Move(input_cv[0], Result.input_cv[0], 32); Move(block^, Result.block[0], BLAKE3_BLOCK_LEN); Result.block_len := block_len; Result.counter := counter; Result.flags := flags; end; {$IF DEFINED(CPUX86_64)} {$include blake3_sse2.inc} {$include blake3_sse41.inc} {$include blake3_avx2.inc} {$ELSE} {$include blake3_pas.inc} {$ENDIF} var blake3_simd_degree: csize_t; // The dynamically detected SIMD degree of the current platform blake3_compress_in_place: procedure(cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8); blake3_compress_xof: procedure(const cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8; out_: pcuint8); blake3_hash_many: procedure(inputs: ppcuint8; num_inputs: csize_t; blocks: csize_t; const key: pcuint32; counter: cuint64; increment_counter: boolean32; flags: cuint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); procedure output_chaining_value(const self: Poutput_t; cv: pcuint8); inline; var cv_words: Tblake_cv; begin Move(self^.input_cv[0], cv_words[0], 32); blake3_compress_in_place(cv_words, self^.block, self^.block_len, self^.counter, self^.flags); store_cv_words(cv, cv_words); end; procedure output_root_bytes(const self: Poutput_t; seek: cuint64; out_: pcuint8; out_len: csize_t); inline; var memcpy_len: csize_t; available_bytes: csize_t; offset_within_block: csize_t; output_block_counter: cuint64; wide_buf: array[0..63] of cuint8; begin output_block_counter := seek div 64; offset_within_block := seek mod 64; while (out_len > 0) do begin blake3_compress_xof(self^.input_cv, self^.block, self^.block_len, output_block_counter, self^.flags or cuint8(ROOT), wide_buf); available_bytes := 64 - offset_within_block; if (out_len > available_bytes) then memcpy_len := available_bytes else begin memcpy_len := out_len; end; Move(wide_buf[offset_within_block], out_^, memcpy_len); out_ += memcpy_len; out_len -= memcpy_len; output_block_counter += 1; offset_within_block := 0; end; end; procedure chunk_state_update(self: Pblake3_chunk_state; input: pcuint8; input_len: csize_t); inline; var take: csize_t; begin if (self^.buf_len > 0) then begin take := chunk_state_fill_buf(self, input, input_len); input += take; input_len -= take; if (input_len > 0) then begin blake3_compress_in_place( self^.cv, self^.buf, BLAKE3_BLOCK_LEN, self^.chunk_counter, self^.flags or chunk_state_maybe_start_flag(self)); self^.blocks_compressed += 1; self^.buf_len := 0; FillChar(self^.buf[0], BLAKE3_BLOCK_LEN, 0); end; end; while (input_len > BLAKE3_BLOCK_LEN) do begin blake3_compress_in_place(self^.cv, input, BLAKE3_BLOCK_LEN, self^.chunk_counter, self^.flags or chunk_state_maybe_start_flag(self)); self^.blocks_compressed += 1; input += BLAKE3_BLOCK_LEN; input_len -= BLAKE3_BLOCK_LEN; end; take := chunk_state_fill_buf(self, input, input_len); input += take; input_len -= take; end; function chunk_state_output(const self: Pblake3_chunk_state): output_t; inline; var block_flags: cuint8; begin block_flags := self^.flags or chunk_state_maybe_start_flag(self) or cuint8(CHUNK_END); Result := make_output(self^.cv, self^.buf, self^.buf_len, self^.chunk_counter, block_flags); end; function parent_output(const block: pcuint8; const key: pcuint32; flags: cuint8): output_t; inline; begin Result := make_output(key, block, BLAKE3_BLOCK_LEN, 0, flags or cuint8(PARENT)); end; function left_len(content_len: csize_t): csize_t; inline; var full_chunks: csize_t; begin full_chunks := (content_len - 1) div BLAKE3_CHUNK_LEN; Result := round_down_to_power_of_2(full_chunks) * BLAKE3_CHUNK_LEN; end; function compress_chunks_parallel(const input: pcuint8; input_len: csize_t; const key: pcuint32; chunk_counter: cuint64; flags: cuint8; out_: pcuint8): csize_t; inline; var counter: cuint64; output: output_t; input_position: csize_t = 0; chunks_array_len: csize_t = 0; chunk_state: blake3_chunk_state; chunks_array: array[0..Pred(MAX_SIMD_DEGREE)] of pcuint8; begin assert(0 < input_len); assert(input_len <= MAX_SIMD_DEGREE * BLAKE3_CHUNK_LEN); while (input_len - input_position >= BLAKE3_CHUNK_LEN) do begin chunks_array[chunks_array_len] := @input[input_position]; input_position += BLAKE3_CHUNK_LEN; chunks_array_len += 1; end; blake3_hash_many(chunks_array, chunks_array_len, BLAKE3_CHUNK_LEN div BLAKE3_BLOCK_LEN, key, chunk_counter, true, flags, cuint8(CHUNK_START), cuint8(CHUNK_END), out_); // Hash the remaining partial chunk, if there is one. Note that the empty // chunk (meaning the empty message) is a different codepath. if (input_len > input_position) then begin counter := chunk_counter + cuint64(chunks_array_len); chunk_state_init(@chunk_state, key, flags); chunk_state.chunk_counter := counter; chunk_state_update(@chunk_state, @input[input_position], input_len - input_position); output := chunk_state_output(@chunk_state); output_chaining_value(@output, @out_[chunks_array_len * BLAKE3_OUT_LEN]); Result := chunks_array_len + 1; end else begin Result := chunks_array_len; end; end; function compress_parents_parallel(const child_chaining_values: pcuint8; num_chaining_values: csize_t; const key: pcuint32; flags: cuint8; out_: pcuint8): csize_t; inline; var parents_array_len: csize_t = 0; parents_array: array[0..Pred(MAX_SIMD_DEGREE_OR_2)] of puint8; begin assert(2 <= num_chaining_values); assert(num_chaining_values <= 2 * MAX_SIMD_DEGREE_OR_2); while (num_chaining_values - (2 * parents_array_len) >= 2) do begin parents_array[parents_array_len] := @child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN]; parents_array_len += 1; end; blake3_hash_many(parents_array, parents_array_len, 1, key, 0, // Parents always use counter 0. false, flags or cuint8(PARENT), 0, // Parents have no start flags. 0, // Parents have no end flags. out_); // If there's an odd child left over, it becomes an output. if (num_chaining_values > 2 * parents_array_len) then begin Move(child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN], out_[parents_array_len * BLAKE3_OUT_LEN], BLAKE3_OUT_LEN); Result := parents_array_len + 1; end else begin Result := parents_array_len; end; end; function blake3_compress_subtree_wide(const input: pcuint8; input_len: csize_t; const key: pcuint32; chunk_counter: cuint64; flags: cuint8; out_: pcuint8): csize_t; var left_n: csize_t; degree: csize_t; right_n: csize_t; right_cvs: pcuint8; right_input: pcuint8; left_input_len: csize_t; right_input_len: csize_t; right_chunk_counter: cuint64; num_chaining_values: csize_t; cv_array: array[0..Pred(2 * MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN)] of cuint8; begin // Note that the single chunk case does *not* bump the SIMD degree up to 2 // when it is 1. If this implementation adds multi-threading in the future, // this gives us the option of multi-threading even the 2-chunk case, which // can help performance on smaller platforms. if (input_len <= blake3_simd_degree * BLAKE3_CHUNK_LEN) then begin Result:= compress_chunks_parallel(input, input_len, key, chunk_counter, flags, out_); Exit; end; // With more than simd_degree chunks, we need to recurse. Start by dividing // the input into left and right subtrees. (Note that this is only optimal // as long as the SIMD degree is a power of 2. If we ever get a SIMD degree // of 3 or something, we'll need a more complicated strategy.) left_input_len := left_len(input_len); right_input_len := input_len - left_input_len; right_input := @input[left_input_len]; right_chunk_counter := chunk_counter + cuint64(left_input_len div BLAKE3_CHUNK_LEN); // Make space for the child outputs. Here we use MAX_SIMD_DEGREE_OR_2 to // account for the special case of returning 2 outputs when the SIMD degree // is 1. degree := blake3_simd_degree; if (left_input_len > BLAKE3_CHUNK_LEN) and (degree = 1) then begin // The special case: We always use a degree of at least two, to make // sure there are two outputs. Except, as noted above, at the chunk // level, where we allow degree=1. (Note that the 1-chunk-input case is // a different codepath.) degree := 2; end; right_cvs := @cv_array[degree * BLAKE3_OUT_LEN]; // Recurse! If this implementation adds multi-threading support in the // future, this is where it will go. left_n := blake3_compress_subtree_wide(input, left_input_len, key, chunk_counter, flags, cv_array); right_n := blake3_compress_subtree_wide( right_input, right_input_len, key, right_chunk_counter, flags, right_cvs); // The special case again. If simd_degree=1, then we'll have left_n=1 and // right_n=1. Rather than compressing them into a single output, return // them directly, to make sure we always have at least two outputs. if (left_n = 1) then begin Move(cv_array[0], out_^, 2 * BLAKE3_OUT_LEN); Exit(2); end; // Otherwise, do one layer of parent node compression. num_chaining_values := left_n + right_n; Result := compress_parents_parallel(cv_array, num_chaining_values, key, flags, out_); end; procedure compress_subtree_to_parent_node( const input: pcuint8; input_len: csize_t; const key: pcuint32; chunk_counter: cuint64; flags: cuint8; out_: pcuint8); inline; var num_cvs: csize_t; cv_array: array[0..Pred(MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN)] of cuint8; out_array: array[0..Pred(MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN div 2)] of cuint8; begin assert(input_len > BLAKE3_CHUNK_LEN); num_cvs := blake3_compress_subtree_wide(input, input_len, key, chunk_counter, flags, cv_array); // If MAX_SIMD_DEGREE is greater than 2 and there's enough input, // compress_subtree_wide() returns more than 2 chaining values. Condense // them into 2 by forming parent nodes repeatedly. while (num_cvs > 2) do begin num_cvs := compress_parents_parallel(cv_array, num_cvs, key, flags, out_array); Move(out_array[0], cv_array[0], num_cvs * BLAKE3_OUT_LEN); end; Move(cv_array[0], out_^, 2 * BLAKE3_OUT_LEN); end; procedure hasher_init_base(self: Pblake3_hasher; const key: pcuint32; flags: cuint8); inline; begin Move(key^, self^.key[0], BLAKE3_KEY_LEN); chunk_state_init(@self^.chunk, key, flags); self^.cv_stack_len := 0; end; procedure blake3_hasher_init(self: Pblake3_hasher); inline; begin hasher_init_base(self, BLAKE3_IV, 0); end; procedure hasher_merge_cv_stack(self: Pblake3_hasher; total_len: cuint64); inline; var output: output_t; parent_node: pcuint8; post_merge_stack_len: csize_t; begin post_merge_stack_len := csize_t(popcnt(total_len)); while (self^.cv_stack_len > post_merge_stack_len) do begin parent_node := @self^.cv_stack[(self^.cv_stack_len - 2) * BLAKE3_OUT_LEN]; output := parent_output(parent_node, self^.key, self^.chunk.flags); output_chaining_value(@output, parent_node); self^.cv_stack_len -= 1; end; end; procedure hasher_push_cv(self: Pblake3_hasher; new_cv: pcuint8; chunk_counter: cuint64); inline; begin hasher_merge_cv_stack(self, chunk_counter); Move(new_cv^, self^.cv_stack[self^.cv_stack_len * BLAKE3_OUT_LEN], BLAKE3_OUT_LEN); self^.cv_stack_len += 1; end; procedure blake3_hasher_update(self: Pblake3_hasher; const input: Pointer; input_len: csize_t); var take: csize_t; output: output_t; subtree_len: csize_t; input_bytes: pcuint8; count_so_far: cuint64; subtree_chunks: cuint64; chunk_state: blake3_chunk_state; chunk_cv: array[0..31] of cuint8; cv: array[0..Pred(BLAKE3_OUT_LEN)] of cuint8; cv_pair: array[0..Pred(2 * BLAKE3_OUT_LEN)] of cuint8; begin // Explicitly checking for zero avoids causing UB by passing a null pointer // to memcpy. This comes up in practice with things like: // std::vector<uint8_t> v; // blake3_hasher_update(&hasher, v.data(), v.size()); if (input_len = 0) then Exit; input_bytes := pcuint8(input); // If we have some partial chunk bytes in the internal chunk_state, we need // to finish that chunk first. if (chunk_state_len(@self^.chunk) > 0) then begin take := BLAKE3_CHUNK_LEN - chunk_state_len(@self^.chunk); if (take > input_len) then begin take := input_len; end; chunk_state_update(@self^.chunk, input_bytes, take); input_bytes += take; input_len -= take; // If we've filled the current chunk and there's more coming, finalize this // chunk and proceed. In this case we know it's not the root. if (input_len > 0) then begin output := chunk_state_output(@self^.chunk); output_chaining_value(@output, chunk_cv); hasher_push_cv(self, chunk_cv, self^.chunk.chunk_counter); chunk_state_reset(@self^.chunk, self^.key, self^.chunk.chunk_counter + 1); end else begin Exit; end; end; // Now the chunk_state is clear, and we have more input. If there's more than // a single chunk (so, definitely not the root chunk), hash the largest whole // subtree we can, with the full benefits of SIMD (and maybe in the future, // multi-threading) parallelism. Two restrictions: // - The subtree has to be a power-of-2 number of chunks. Only subtrees along // the right edge can be incomplete, and we don't know where the right edge // is going to be until we get to finalize(). // - The subtree must evenly divide the total number of chunks up until this // point (if total is not 0). If the current incomplete subtree is only // waiting for 1 more chunk, we can't hash a subtree of 4 chunks. We have // to complete the current subtree first. // Because we might need to break up the input to form powers of 2, or to // evenly divide what we already have, this part runs in a loop. while (input_len > BLAKE3_CHUNK_LEN) do begin subtree_len := round_down_to_power_of_2(input_len); count_so_far := self^.chunk.chunk_counter * BLAKE3_CHUNK_LEN; // Shrink the subtree_len until it evenly divides the count so far. We know // that subtree_len itself is a power of 2, so we can use a bitmasking // trick instead of an actual remainder operation. (Note that if the caller // consistently passes power-of-2 inputs of the same size, as is hopefully // typical, this loop condition will always fail, and subtree_len will // always be the full length of the input.) // // An aside: We don't have to shrink subtree_len quite this much. For // example, if count_so_far is 1, we could pass 2 chunks to // compress_subtree_to_parent_node. Since we'll get 2 CVs back, we'll still // get the right answer in the end, and we might get to use 2-way SIMD // parallelism. The problem with this optimization, is that it gets us // stuck always hashing 2 chunks. The total number of chunks will remain // odd, and we'll never graduate to higher degrees of parallelism. See // https://github.com/BLAKE3-team/BLAKE3/issues/69. while (((cuint64(subtree_len - 1)) and count_so_far) <> 0) do begin subtree_len := subtree_len div 2; end; // The shrunken subtree_len might now be 1 chunk long. If so, hash that one // chunk by itself. Otherwise, compress the subtree into a pair of CVs. subtree_chunks := subtree_len div BLAKE3_CHUNK_LEN; if (subtree_len <= BLAKE3_CHUNK_LEN) then begin chunk_state_init(@chunk_state, self^.key, self^.chunk.flags); chunk_state.chunk_counter := self^.chunk.chunk_counter; chunk_state_update(@chunk_state, input_bytes, subtree_len); output := chunk_state_output(@chunk_state); output_chaining_value(@output, cv); hasher_push_cv(self, cv, chunk_state.chunk_counter); end else begin // This is the high-performance happy path, though getting here depends // on the caller giving us a long enough input. compress_subtree_to_parent_node(input_bytes, subtree_len, self^.key, self^.chunk.chunk_counter, self^.chunk.flags, cv_pair); hasher_push_cv(self, cv_pair, self^.chunk.chunk_counter); hasher_push_cv(self, @cv_pair[BLAKE3_OUT_LEN], self^.chunk.chunk_counter + (subtree_chunks div 2)); end; self^.chunk.chunk_counter += subtree_chunks; input_bytes += subtree_len; input_len -= subtree_len; end; // If there's any remaining input less than a full chunk, add it to the chunk // state. In that case, also do a final merge loop to make sure the subtree // stack doesn't contain any unmerged pairs. The remaining input means we // know these merges are non-root. This merge loop isn't strictly necessary // here, because hasher_push_chunk_cv already does its own merge loop, but it // simplifies blake3_hasher_finalize below. if (input_len > 0) then begin chunk_state_update(@self^.chunk, input_bytes, input_len); hasher_merge_cv_stack(self, self^.chunk.chunk_counter); end; end; procedure blake3_hasher_finalize_seek(const self: Pblake3_hasher; seek: cuint64; out_: pcuint8; out_len: csize_t); var output: output_t; cvs_remaining: csize_t; parent_block: array[0..Pred(BLAKE3_BLOCK_LEN)] of cuint8; begin // Explicitly checking for zero avoids causing UB by passing a null pointer // to memcpy. This comes up in practice with things like: // std::vector<uint8_t> v; // blake3_hasher_finalize(&hasher, v.data(), v.size()); if (out_len = 0) then Exit; // If the subtree stack is empty, then the current chunk is the root. if (self^.cv_stack_len = 0) then begin output := chunk_state_output(@self^.chunk); output_root_bytes(@output, seek, out_, out_len); Exit; end; // If there are any bytes in the chunk state, finalize that chunk and do a // roll-up merge between that chunk hash and every subtree in the stack. In // this case, the extra merge loop at the end of blake3_hasher_update // guarantees that none of the subtrees in the stack need to be merged with // each other first. Otherwise, if there are no bytes in the chunk state, // then the top of the stack is a chunk hash, and we start the merge from // that. if (chunk_state_len(@self^.chunk) > 0) then begin cvs_remaining := self^.cv_stack_len; output := chunk_state_output(@self^.chunk); end else begin // There are always at least 2 CVs in the stack in this case. cvs_remaining := self^.cv_stack_len - 2; output := parent_output(@self^.cv_stack[cvs_remaining * 32], self^.key, self^.chunk.flags); end; while (cvs_remaining > 0) do begin cvs_remaining -= 1; Move(self^.cv_stack[cvs_remaining * 32], parent_block[0], 32); output_chaining_value(@output, @parent_block[32]); output := parent_output(parent_block, self^.key, self^.chunk.flags); end; output_root_bytes(@output, seek, out_, out_len); end; procedure blake3_hasher_finalize(const self: Pblake3_hasher; out_: pcuint8; out_len: csize_t); begin blake3_hasher_finalize_seek(self, 0, out_, out_len); end; initialization {$IF DEFINED(CPUX86_64)} if AVX2Support then begin blake3_simd_degree:= 8; blake3_compress_in_place:= @blake3_compress_in_place_sse41; blake3_compress_xof:= @blake3_compress_xof_sse41; blake3_hash_many:= @blake3_hash_many_avx2; end else if SSE41Support then begin blake3_simd_degree:= 4; blake3_compress_in_place:= @blake3_compress_in_place_sse41; blake3_compress_xof:= @blake3_compress_xof_sse41; blake3_hash_many:= @blake3_hash_many_sse41; end else begin blake3_simd_degree:= 4; blake3_compress_in_place:= @blake3_compress_in_place_sse2; blake3_compress_xof:= @blake3_compress_xof_sse2; blake3_hash_many:= @blake3_hash_many_sse2; end; {$ELSE} blake3_simd_degree:= 1; blake3_compress_in_place:= @blake3_compress_in_place_portable; blake3_compress_xof:= @blake3_compress_xof_portable; blake3_hash_many:= @blake3_hash_many_portable; {$ENDIF} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/dcblake2.pp���������������������������������������������0000644�0001750�0000144�00000053514�15104114162�022045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ BLAKE2 reference source code package - reference C implementations Written in 2012 by Samuel Neves <sneves@dei.uc.pt> Pascal tranlastion in 2014-2020 by Alexander Koblov (alexx2000@mail.ru) To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. } unit DCblake2; {$mode objfpc}{$H+} {$macro on}{$R-}{$Q-} {$define USE_MTPROCS} interface uses SysUtils, CTypes; const BLAKE2S_BLOCKBYTES = 64; BLAKE2S_OUTBYTES = 32; BLAKE2S_KEYBYTES = 32; BLAKE2S_SALTBYTES = 8; BLAKE2S_PERSONALBYTES = 8; BLAKE2S_PARALLELISM_DEGREE = 8; const BLAKE2B_BLOCKBYTES = 128; BLAKE2B_OUTBYTES = 64; BLAKE2B_KEYBYTES = 64; BLAKE2B_SALTBYTES = 16; BLAKE2B_PERSONALBYTES = 16; BLAKE2B_PARALLELISM_DEGREE = 4; type {$packrecords 1} Pblake2s_param = ^blake2s_param; blake2s_param = record digest_length: cuint8; // 1 key_length: cuint8; // 2 fanout: cuint8; // 3 depth: cuint8; // 4 leaf_length: cuint32; // 8 node_offset: array[0..5] of cuint8;// 14 node_depth: cuint8; // 15 inner_length: cuint8; // 16 // uint8_t reserved[0]; salt: array[0..Pred(BLAKE2S_SALTBYTES)] of cuint8; // 24 personal: array[0..Pred(BLAKE2S_PERSONALBYTES)] of cuint8; // 32 end; {$packrecords 8} Pblake2s_state = ^blake2s_state; blake2s_state = record h: array[0..7] of cuint32; t: array[0..1] of cuint32; f: array[0..1] of cuint32; buf: array[0..Pred(2 * BLAKE2S_BLOCKBYTES)] of cuint8; buflen: csize_t; last_node: cuint8; end; {$packrecords 1} Pblake2sp_state = ^blake2sp_state; blake2sp_state = record S: array[0..7] of blake2s_state; R: blake2s_state; buf: array[0..Pred(8 * BLAKE2S_BLOCKBYTES)] of cuint8; buflen: csize_t; inlen: csize_t; inp: PByte; end; {$packrecords c} Pblake2b_state = ^blake2b_state; blake2b_state = record h: array[0..7] of cuint64; t: array[0..1] of cuint64; f: array[0..1] of cuint64; buf: array [0..Pred(BLAKE2B_BLOCKBYTES)] of cuint8; buflen: csize_t; outlen: csize_t; last_node: cuint8; end; {$packrecords 1} Pblake2b_param = ^blake2b_param; blake2b_param = record digest_length: uint8; // 1 key_length: cuint8; // 2 fanout: cuint8; // 3 depth: cuint8; // 4 leaf_length: cuint32; // 8 node_offset: cuint32; // 12 xof_length: cuint32; // 16 node_depth: cuint8; // 17 inner_length: cuint8; // 18 reserved: array[0..13] of cuint8; // 32 salt: array [0..Pred(BLAKE2B_SALTBYTES)] of cuint8; // 48 personal: array[0..Pred(BLAKE2B_PERSONALBYTES)] of cuint8; // 64 end; {$packrecords default} Pblake2bp_state = ^blake2bp_state; blake2bp_state = record S: array[0..3] of blake2b_state; R: blake2b_state; buf: array[0..Pred(4 * BLAKE2B_BLOCKBYTES)] of cuint8; buflen: csize_t; outlen: csize_t; inlen: csize_t; inp: PByte; end; function blake2s_init( S: Pblake2s_state; const outlen: cuint8 ): cint; function blake2s_update( S: Pblake2s_state; inp: pcuint8; inlen: cuint64 ): cint; function blake2s_final( S: Pblake2s_state; outp: pcuint8; outlen: cuint8 ): cint; function blake2sp_init( S: Pblake2sp_state; const outlen: cuint8 ): cint; function blake2sp_update( S: Pblake2sp_state; inp: pcuint8; inlen: cuint64 ): cint; function blake2sp_final( S: Pblake2sp_state; outp: pcuint8; const outlen: cuint8 ): cint; function blake2b_init( S: Pblake2b_state; outlen: csize_t ): cint; function blake2b_update( S: Pblake2b_state; pin: pcuint8; inlen: csize_t ): cint; function blake2b_final( S: Pblake2b_state; pout: pcuint8; outlen: csize_t ): cint; function blake2bp_init( S: Pblake2bp_state; outlen: csize_t ): cint; function blake2bp_update( S: Pblake2bp_state; inp: pcuint8; inlen: csize_t ): cint; function blake2bp_final( S: Pblake2bp_state; out_: PByte; outlen: csize_t ): cint; implementation {$IF DEFINED(USE_MTPROCS)} uses MTProcs {$IF DEFINED(CPUX86_64)} , CPU {$ENDIF} ; {$ELSE} {$IF DEFINED(CPUX86_64)} uses CPU; {$ENDIF} type TMultiThreadProcItem = Pointer; {$ENDIF} const blake2s_IV: array[0..7] of cuint32 = ( $6A09E667, $BB67AE85, $3C6EF372, $A54FF53A, $510E527F, $9B05688C, $1F83D9AB, $5BE0CD19 ); const blake2b_IV: array[0..7] of cint64 = ( $6a09e667f3bcc908, $bb67ae8584caa73b, $3c6ef372fe94f82b, $a54ff53a5f1d36f1, $510e527fade682d1, $9b05688c2b3e6c1f, $1f83d9abfb41bd6b, $5be0cd19137e2179 ); function load32( const src: Pointer ): cuint32; inline; begin Result := NtoLE(pcuint32(src)^); end; function load64( const src: pointer ): cuint64; inline; begin Result := NtoLE(pcuint64(src)^); end; procedure store32( dst: pointer; w: cuint32 ); inline; begin pcuint32(dst)^ := LEtoN(w); end; procedure store64( dst: pointer; w: cuint64 ); inline; begin pcuint64(dst)^ := LEtoN(w); end; function load48( const src: pointer ): cuint64; inline; var w: cuint64; p: pcuint8; begin p := pcuint8(src); w := p^; Inc(p); w := w or cuint64( p^ ) shl 8; inc(p); w := w or cuint64( p^ ) shl 16; inc(p); w := w or cuint64( p^ ) shl 24; inc(p); w := w or cuint64( p^ ) shl 32; inc(p); w := w or cuint64( p^ ) shl 40; inc(p); Result := w; end; procedure store48( dst: pointer; w: cuint64 ); inline; var p: pcuint8; begin p := pcuint8(dst); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); inc(p); end; var blake2s_compress: function(S: Pblake2s_state; const block: pcuint8): cint; blake2b_compress: procedure(S: Pblake2b_state; const block: pcuint8); {$IF DEFINED(CPUX86_64)} {$include blake2_sse.inc} {$include blake2_avx.inc} {$ELSE} {$include blake2_pas.inc} {$ENDIF} function blake2s_set_lastnode( S: Pblake2s_state ): cint; inline; begin S^.f[1] := $FFFFFFFF; Result := 0; end; function blake2s_clear_lastnode( S: Pblake2s_state ): cint; inline; begin S^.f[1] := 0; Result := 0; end; //* Some helper functions, not necessarily useful */ function blake2s_set_lastblock( S: Pblake2s_state ): cint; inline; begin if( S^.last_node <> 0 ) then blake2s_set_lastnode( S ); S^.f[0] := $FFFFFFFF; Result := 0; end; function blake2s_clear_lastblock( S: Pblake2s_state ): cint; inline; begin if( S^.last_node <> 0 ) then blake2s_clear_lastnode( S ); S^.f[0] := 0; Result := 0; end; function blake2s_increment_counter( S: Pblake2s_state; const inc: cuint32 ): cint; inline; begin S^.t[0] += inc; S^.t[1] += cuint32( S^.t[0] < inc ); Result := 0; end; function blake2s_init0( S: Pblake2s_state ): cint; inline; var i: cint; begin FillChar( S^, sizeof( blake2s_state ), 0 ); for i := 0 to 8 - 1 do S^.h[i] := blake2s_IV[i]; Result := 0; end; //* init2 xors IV with input parameter block */ function blake2s_init_param( S: Pblake2s_state; const P: Pblake2s_param ): cint; var i: csize_t; pp: pcuint32; begin blake2s_init0( S ); pp := pcuint32( P ); //* IV XOR ParamBlock */ // for i := 0; i < 8; ++i ) for i := 0 to 8 - 1 do S^.h[i] := S^.h[i] xor load32( @pp[i] ); Result := 0; end; // Sequential blake2s initialization function blake2s_init( S: Pblake2s_state; const outlen: cuint8 ): cint; var P: blake2s_param; begin //* Move interval verification here? */ if ( ( outlen = 0 ) or ( outlen > BLAKE2S_OUTBYTES ) ) then Exit(-1); P.digest_length := outlen; P.key_length := 0; P.fanout := 1; P.depth := 1; store32( @P.leaf_length, 0 ); store48( @P.node_offset, 0 ); P.node_depth := 0; P.inner_length := 0; // memset(P^.reserved, 0, sizeof(P^.reserved) ); FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result := blake2s_init_param( S, @P ); end; function blake2s_update( S: Pblake2s_state; inp: pcuint8; inlen: cuint64 ): cint; var left, fill: csize_t; begin while( inlen > 0 ) do begin left := S^.buflen; fill := 2 * BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) then begin Move( inp^, S^.buf[left], fill ); // Fill buffer S^.buflen += fill; blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S^.buf ); // Compress Move( S^.buf[BLAKE2S_BLOCKBYTES], S^.buf, BLAKE2S_BLOCKBYTES ); // Shift buffer left S^.buflen -= BLAKE2S_BLOCKBYTES; inp += fill; inlen -= fill; end else // inlen <= fill begin Move( inp^, S^.buf [left], inlen ); S^.buflen += inlen; // Be lazy, do not compress inp += inlen; inlen -= inlen; end; end; Result := 0; end; function blake2s_final( S: Pblake2s_state; outp: pcuint8; outlen: cuint8 ): cint; var i: cint; buffer: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if( S^.buflen > BLAKE2S_BLOCKBYTES ) then begin blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S^.buf); S^.buflen -= BLAKE2S_BLOCKBYTES; Move( S^.buf[BLAKE2S_BLOCKBYTES], S^.buf, S^.buflen ); end; blake2s_increment_counter( S, cuint32(S^.buflen) ); blake2s_set_lastblock( S ); FillChar( S^.buf[S^.buflen], 2 * BLAKE2S_BLOCKBYTES - S^.buflen, 0 ); //* Padding */ blake2s_compress( S, S^.buf ); for i := 0 to 7 do //* Output full hash to temp buffer */ store32( @buffer[sizeof( S^.h[i] ) * i], S^.h[i] ); Move( buffer, outp^, outlen ); Result := 0; end; function blake2sp_init_leaf(S: Pblake2s_state; outlen: cuint8; keylen: cuint8; offset: cuint64):cint; inline; var P: blake2s_param; begin P.digest_length := outlen; P.key_length := keylen; P.fanout := BLAKE2S_PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store48( @P.node_offset[0], offset ); P.node_depth := 0; P.inner_length := BLAKE2S_OUTBYTES; FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result:= blake2s_init_param( S, @P ); end; function blake2sp_init_root( S: Pblake2s_state; outlen: cuint8; keylen: cuint8 ): cint; inline; var P: blake2s_param; begin P.digest_length := outlen; P.key_length := keylen; P.fanout := BLAKE2S_PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store48( @P.node_offset[0], 0 ); P.node_depth := 1; P.inner_length := BLAKE2S_OUTBYTES; FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result:= blake2s_init_param( S, @P ); end; function blake2sp_init( S: Pblake2sp_state; const outlen: cuint8 ): cint; var i: csize_t; begin if (outlen = 0) or (outlen > BLAKE2S_OUTBYTES) then Exit(-1); FillChar( S^.buf, sizeof( S^.buf ), 0 ); S^.buflen := 0; if( blake2sp_init_root( @S^.R, outlen, 0 ) < 0 ) then Exit(-1); for i := 0 to BLAKE2S_PARALLELISM_DEGREE - 1 do if ( blake2sp_init_leaf( @S^.S[i], outlen, 0, i ) < 0 ) then Exit(-1); S^.R.last_node := 1; S^.S[BLAKE2S_PARALLELISM_DEGREE - 1].last_node := 1; Result := 0; end; procedure MTProcedure(id__: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var in__: pcuint8; inlen__: cuint64; S: Pblake2sp_state absolute Data; begin in__ := S^.inp; inlen__ := S^.inlen; in__ += id__ * BLAKE2S_BLOCKBYTES; while ( inlen__ >= BLAKE2S_PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) do begin blake2s_update( @S^.S[id__], in__, BLAKE2S_BLOCKBYTES ); in__ += BLAKE2S_PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= BLAKE2S_PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; end; end; function blake2sp_update( S: Pblake2sp_state; inp: pcuint8; inlen: cuint64 ): cint; var i, left, fill: csize_t; begin left := S^.buflen; fill := sizeof( S^.buf ) - left; if ( left <> 0) and (inlen >= fill ) then begin Move(inp^, S^.buf[left], fill); for i := 0 to BLAKE2S_PARALLELISM_DEGREE - 1 do blake2s_update( @S^.S[i], @S^.buf[ i * BLAKE2S_BLOCKBYTES], BLAKE2S_BLOCKBYTES ); inp += fill; inlen -= fill; left := 0; end; S^.inp := inp; S^.inlen := inlen; {$IF DEFINED(USE_MTPROCS)} ProcThreadPool.DoParallel(@MTProcedure, 0, BLAKE2S_PARALLELISM_DEGREE - 1, S); {$ELSE} for i := 0 to BLAKE2S_PARALLELISM_DEGREE - 1 do MTProcedure(i, S, nil); {$ENDIF} inp += inlen - inlen mod ( BLAKE2S_PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); inlen := inlen mod (BLAKE2S_PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES); if ( inlen > 0 ) then Move(inp^, S^.buf[left], inlen ); S^.buflen := left + inlen; Result := 0; end; function blake2sp_final( S: Pblake2sp_state; outp: pcuint8; const outlen: cuint8 ): cint; var i, left: csize_t; hash: array[0..Pred(BLAKE2S_PARALLELISM_DEGREE), 0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin for i := 0 to BLAKE2S_PARALLELISM_DEGREE - 1 do begin if ( S^.buflen > i * BLAKE2S_BLOCKBYTES ) then begin left := S^.buflen - i * BLAKE2S_BLOCKBYTES; if ( left > BLAKE2S_BLOCKBYTES ) then left := BLAKE2S_BLOCKBYTES; blake2s_update( @S^.S[i], @S^.buf[i * BLAKE2S_BLOCKBYTES], left ); end; blake2s_final( @S^.S[i], hash[i], BLAKE2S_OUTBYTES ); end; for i := 0 to BLAKE2S_PARALLELISM_DEGREE - 1 do blake2s_update( @S^.R, hash[i], BLAKE2S_OUTBYTES ); blake2s_final( @S^.R, outp, outlen ); Result := 0; end; procedure blake2b_set_lastnode( S: Pblake2b_state ); inline; begin S^.f[1] := cuint64(-1); end; //* Some helper functions, not necessarily useful */ function blake2b_is_lastblock( S: Pblake2b_state ): cint; inline; begin Result := cint(S^.f[0] <> 0); end; procedure blake2b_set_lastblock( S: Pblake2b_state ); begin if( S^.last_node <> 0 ) then blake2b_set_lastnode( S ); S^.f[0] := cuint64(-1); end; procedure blake2b_increment_counter( S: Pblake2b_state; const inc: cuint64 ); begin S^.t[0] += inc; S^.t[1] += cuint64( S^.t[0] < inc ); end; procedure blake2b_init0( S: Pblake2b_state ); var i: csize_t; begin fillchar( S^, sizeof( blake2b_state ), 0 ); for i := 0 to 7 do S^.h[i] := cuint64(blake2b_IV[i]); end; //* init xors IV with input parameter block */ function blake2b_init_param( S: Pblake2b_state; const P: Pblake2b_param ): cint; var i: csize_t; pp: pcuint8; begin pp := pcuint8( P ); blake2b_init0( S ); //* IV XOR ParamBlock */ for i := 0 to 7 do S^.h[i] := S^.h[i] xor load64( pp + sizeof( S^.h[i] ) * i ); S^.outlen := P^.digest_length; Result := 0; end; function blake2b_init( S: Pblake2b_state; outlen: csize_t ): cint; var P: blake2b_param; begin if ( ( outlen = 0 ) or ( outlen > BLAKE2B_OUTBYTES ) ) then Exit(-1); P.digest_length := cuint8(outlen); P.key_length := 0; P.fanout := 1; P.depth := 1; store32( @P.leaf_length, 0 ); store32( @P.node_offset, 0 ); store32( @P.xof_length, 0 ); P.node_depth := 0; P.inner_length := 0; fillchar( P.reserved, sizeof( P.reserved ), 0 ); fillchar( P.salt, sizeof( P.salt ), 0 ); fillchar( P.personal, sizeof( P.personal ), 0 ); Result := blake2b_init_param( S, @P ); end; function blake2b_update( S: Pblake2b_state; pin: pcuint8; inlen: csize_t ): cint; var left, fill: csize_t; begin if ( inlen > 0 ) then begin left := S^.buflen; fill := BLAKE2B_BLOCKBYTES - left; if ( inlen > fill ) then begin S^.buflen := 0; Move( pin^, S^.buf[left], fill ); //* Fill buffer */ blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); blake2b_compress( S, S^.buf ); //* Compress */ pin += fill; inlen -= fill; while (inlen > BLAKE2B_BLOCKBYTES) do begin blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); blake2b_compress( S, pin ); pin += BLAKE2B_BLOCKBYTES; inlen -= BLAKE2B_BLOCKBYTES; end end; Move( pin^, S^.buf[S^.buflen], inlen ); S^.buflen += inlen; end; Result := 0; end; function blake2b_final( S: Pblake2b_state; pout: pcuint8; outlen: csize_t ): cint; var i: csize_t; buffer: array[0..Pred(BLAKE2B_OUTBYTES)] of cuint8; begin if( pout = nil) or (outlen < S^.outlen ) then Exit(-1); if ( blake2b_is_lastblock( S ) <> 0 ) then Exit(-1); fillchar(buffer[0], BLAKE2B_OUTBYTES, 0); blake2b_increment_counter( S, S^.buflen ); blake2b_set_lastblock( S ); fillchar( S^.buf[S^.buflen], BLAKE2B_BLOCKBYTES - S^.buflen, 0 ); //* Padding */ blake2b_compress( S, S^.buf ); for i := 0 to 7 do //* Output full hash to temp buffer */ store64( @buffer[sizeof( S^.h[i] ) * i], S^.h[i] ); move( buffer[0], pout^, S^.outlen ); fillchar(buffer[0], sizeof(buffer), 0); Result := 0; end; function blake2bp_init_leaf_param( S: Pblake2b_state; const P: Pblake2b_param ): cint; begin Result:= blake2b_init_param(S, P); S^.outlen := P^.inner_length; end; function blake2bp_init_leaf( S: Pblake2b_state; outlen, keylen: csize_t; offset: cuint64 ): cint; var P: blake2b_param; begin P.digest_length := cuint8(outlen); P.key_length := cuint8(keylen); P.fanout := BLAKE2B_PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store32( @P.node_offset, offset ); store32( @P.xof_length, 0 ); P.node_depth := 0; P.inner_length := BLAKE2B_OUTBYTES; FillChar( P.reserved[0], sizeof( P.reserved ), 0 ); FillChar( P.salt[0], sizeof( P.salt ), 0 ); FillChar( P.personal[0], sizeof( P.personal ), 0 ); Result:= blake2bp_init_leaf_param( S, @P ); end; function blake2bp_init_root( S: Pblake2b_state; outlen, keylen: csize_t ): cint; var P: blake2b_param; begin P.digest_length := cuint8(outlen); P.key_length := cuint8(keylen); P.fanout := BLAKE2B_PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store32( @P.node_offset, 0 ); store32( @P.xof_length, 0 ); P.node_depth := 1; P.inner_length := BLAKE2B_OUTBYTES; FillChar( P.reserved[0], sizeof( P.reserved ), 0 ); FillChar( P.salt[0], sizeof( P.salt ), 0 ); FillChar( P.personal[0], sizeof( P.personal ), 0 ); Result:= blake2b_init_param( S, @P ); end; function blake2bp_init( S: Pblake2bp_state; outlen: csize_t ): cint; var i: csize_t; begin if (outlen = 0) or (outlen > BLAKE2B_OUTBYTES) then Exit(-1); FillChar( S^.buf[0], sizeof( S^.buf ), 0 ); S^.buflen := 0; S^.outlen := outlen; if( blake2bp_init_root( @S^.R, outlen, 0 ) < 0 ) then Exit(-1); for i := 0 to BLAKE2B_PARALLELISM_DEGREE - 1 do if ( blake2bp_init_leaf( @S^.S[i], outlen, 0, i ) < 0 ) then Exit(-1); S^.R.last_node := 1; S^.S[BLAKE2B_PARALLELISM_DEGREE - 1].last_node := 1; Result:= 0; end; procedure blake2bp_MTProcedure(i: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var in__: pcuint8; inlen__: cuint64; S: Pblake2bp_state absolute Data; begin in__ := S^.inp; inlen__ := S^.inlen; in__ += i * BLAKE2B_BLOCKBYTES; while ( inlen__ >= BLAKE2B_PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ) do begin blake2b_update( @S^.S[i], in__, BLAKE2B_BLOCKBYTES ); in__ += BLAKE2B_PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; inlen__ -= BLAKE2B_PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES; end; end; function blake2bp_update( S: Pblake2bp_state; inp: pcuint8; inlen: csize_t ): cint; var left, fill, i: csize_t; begin left := S^.buflen; fill := sizeof( S^.buf ) - left; if( left > 0) and (inlen >= fill ) then begin Move( inp^, S^.buf[left], fill ); for i := 0 to BLAKE2B_PARALLELISM_DEGREE - 1 do blake2b_update( @S^.S[i], @S^.buf[i * BLAKE2B_BLOCKBYTES], BLAKE2B_BLOCKBYTES ); inp += fill; inlen -= fill; left := 0; end; S^.inp := inp; S^.inlen := inlen; {$IF DEFINED(USE_MTPROCS)} ProcThreadPool.DoParallel(@blake2bp_MTProcedure, 0, BLAKE2B_PARALLELISM_DEGREE - 1, S); {$ELSE} for i := 0 to BLAKE2B_PARALLELISM_DEGREE - 1 do blake2bp_MTProcedure(i, S, nil); {$ENDIF} inp += inlen - inlen mod ( BLAKE2B_PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES ); inlen := inlen mod (BLAKE2B_PARALLELISM_DEGREE * BLAKE2B_BLOCKBYTES); if ( inlen > 0 ) then Move( inp^, S^.buf[left], inlen ); S^.buflen := left + inlen; Result:= 0; end; function blake2bp_final( S: Pblake2bp_state; out_: PByte; outlen: csize_t ): cint; var i, left: csize_t; hash: array[0..Pred(BLAKE2B_PARALLELISM_DEGREE), 0..Pred(BLAKE2B_OUTBYTES)] of cuint8; begin if (out_ = nil) or (outlen < S^.outlen) then Exit(-1); for i := 0 to BLAKE2B_PARALLELISM_DEGREE - 1 do begin if ( S^.buflen > i * BLAKE2B_BLOCKBYTES ) then begin left := S^.buflen - i * BLAKE2B_BLOCKBYTES; if ( left > BLAKE2B_BLOCKBYTES ) then left := BLAKE2B_BLOCKBYTES; blake2b_update( @S^.S[i], @S^.buf[i * BLAKE2B_BLOCKBYTES], left ); end; blake2b_final( @S^.S[i], hash[i], BLAKE2B_OUTBYTES ); end; for i := 0 to BLAKE2B_PARALLELISM_DEGREE -1 do blake2b_update( @S^.R, hash[i], BLAKE2B_OUTBYTES ); Result:= blake2b_final( @S^.R, out_, S^.outlen ); end; initialization {$IF DEFINED(CPUX86_64)} if AVXSupport then begin blake2s_compress:= @blake2s_compress_avx; blake2b_compress:= @blake2b_compress_avx; end else begin blake2s_compress:= @blake2s_compress_sse; blake2b_compress:= @blake2b_compress_sse; end; {$ELSE} blake2s_compress:= @blake2s_compress_pas; blake2b_compress:= @blake2b_compress_pas; {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake3_sse41.inc����������������������������������������0000755�0001750�0000144�00000177704�15104114162�022723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$asmmode intel} const ROT8: array[0..15] of cuint8 = (1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12); ROT16: array[0..15] of cuint8 = (2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13); procedure blake3_hash_many_sse41(inputs: ppcuint8; num_inputs: csize_t; blocks: csize_t; const key: pcuint32; counter: cuint64; increment_counter: boolean32; flags: cuint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8, R9, STACK, STACK, STACK, STACK // WIN64: RCX, RDX, R8, R9, STACK, STACK, STACK, STACK, STACK, STACK asm push rbp mov rbp, rsp push r15 push r14 push r13 push r12 push rbx sub rsp, 360 and rsp, $FFFFFFFFFFFFFFC0 {$IF DEFINED(WIN64)} sub rsp, 168 and rsp, $FFFFFFFFFFFFFFC0 movdqa xmmword ptr [rsp+$170], xmm6 movdqa xmmword ptr [rsp+$180], xmm7 movdqa xmmword ptr [rsp+$190], xmm8 movdqa xmmword ptr [rsp+$1A0], xmm9 movdqa xmmword ptr [rsp+$1B0], xmm10 movdqa xmmword ptr [rsp+$1C0], xmm11 movdqa xmmword ptr [rsp+$1D0], xmm12 movdqa xmmword ptr [rsp+$1E0], xmm13 movdqa xmmword ptr [rsp+$1F0], xmm14 movdqa xmmword ptr [rsp+$200], xmm15 mov qword ptr [rbp+16], rsi mov qword ptr [rbp+24], rdi mov rdi, rcx mov rsi, rdx mov rdx, r8 mov rcx, r9 mov r8, qword ptr [counter] movzx r9, dword ptr [increment_counter] {$ENDIF} neg r9d movd xmm0, r9d pshufd xmm0, xmm0, $00 movdqa xmmword ptr [rsp+$130], xmm0 movdqa xmm1, xmm0 pand xmm1, xmmword ptr [ADD0+rip] pand xmm0, xmmword ptr [ADD1+rip] movdqa xmmword ptr [rsp+$150], xmm0 movd xmm0, r8d pshufd xmm0, xmm0, $00 paddd xmm0, xmm1 movdqa xmmword ptr [rsp+$110], xmm0 pxor xmm0, xmmword ptr [CMP_MSB_MASK+rip] pxor xmm1, xmmword ptr [CMP_MSB_MASK+rip] pcmpgtd xmm1, xmm0 shr r8, 32 movd xmm2, r8d pshufd xmm2, xmm2, $00 psubd xmm2, xmm1 movdqa xmmword ptr [rsp+$120], xmm2 mov rbx, qword ptr [out_] mov r15, rdx shl r15, 6 movzx r13d, byte ptr [flags] movzx r12d, byte ptr [flags_end] cmp rsi, 4 jc @L03L03 @L00L02: movdqu xmm3, xmmword ptr [rcx] pshufd xmm0, xmm3, $00 pshufd xmm1, xmm3, $55 pshufd xmm2, xmm3, $AA pshufd xmm3, xmm3, $FF movdqu xmm7, xmmword ptr [rcx+$10] pshufd xmm4, xmm7, $00 pshufd xmm5, xmm7, $55 pshufd xmm6, xmm7, $AA pshufd xmm7, xmm7, $FF mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] mov r10, qword ptr [rdi+$10] mov r11, qword ptr [rdi+$18] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L01L09: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movdqu xmm8, xmmword ptr [r8+rdx-$40] movdqu xmm9, xmmword ptr [r9+rdx-$40] movdqu xmm10, xmmword ptr [r10+rdx-$40] movdqu xmm11, xmmword ptr [r11+rdx-$40] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp], xmm8 movdqa xmmword ptr [rsp+$10], xmm9 movdqa xmmword ptr [rsp+$20], xmm12 movdqa xmmword ptr [rsp+$30], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$30] movdqu xmm9, xmmword ptr [r9+rdx-$30] movdqu xmm10, xmmword ptr [r10+rdx-$30] movdqu xmm11, xmmword ptr [r11+rdx-$30] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$40], xmm8 movdqa xmmword ptr [rsp+$50], xmm9 movdqa xmmword ptr [rsp+$60], xmm12 movdqa xmmword ptr [rsp+$70], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$20] movdqu xmm9, xmmword ptr [r9+rdx-$20] movdqu xmm10, xmmword ptr [r10+rdx-$20] movdqu xmm11, xmmword ptr [r11+rdx-$20] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$80], xmm8 movdqa xmmword ptr [rsp+$90], xmm9 movdqa xmmword ptr [rsp+$A0], xmm12 movdqa xmmword ptr [rsp+$B0], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$10] movdqu xmm9, xmmword ptr [r9+rdx-$10] movdqu xmm10, xmmword ptr [r10+rdx-$10] movdqu xmm11, xmmword ptr [r11+rdx-$10] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$C0], xmm8 movdqa xmmword ptr [rsp+$D0], xmm9 movdqa xmmword ptr [rsp+$E0], xmm12 movdqa xmmword ptr [rsp+$F0], xmm13 movdqa xmm9, xmmword ptr [BLAKE3_IV_1+rip] movdqa xmm10, xmmword ptr [BLAKE3_IV_2+rip] movdqa xmm11, xmmword ptr [BLAKE3_IV_3+rip] movdqa xmm12, xmmword ptr [rsp+$110] movdqa xmm13, xmmword ptr [rsp+$120] movdqa xmm14, xmmword ptr [BLAKE3_BLOCK_LEN8+rip] movd xmm15, eax pshufd xmm15, xmm15, $00 prefetcht0 [r8+rdx+$80] prefetcht0 [r9+rdx+$80] prefetcht0 [r10+rdx+$80] prefetcht0 [r11+rdx+$80] paddd xmm0, xmmword ptr [rsp] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$40] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [BLAKE3_IV_0+rip] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$10] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$50] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$80] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$C0] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$90] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$D0] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$20] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$70] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$60] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$10] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$90] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$B0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$E0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$30] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$D0] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$40] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$20] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$60] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$B0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$50] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$F0] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$A0] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$E0] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$70] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$30] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$40] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$50] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$80] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$C0] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$F0] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$D0] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$A0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$70] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$20] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$10] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$90] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$80] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$E0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$C0] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$D0] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$20] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$30] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$60] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$B0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$10] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$F0] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$90] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 pshufb xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$E0] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$30] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT16+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$A0] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$40] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmmword ptr [ROT8+rip] pshufb xmm15, xmm8 pshufb xmm12, xmm8 pshufb xmm13, xmm8 pshufb xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 pxor xmm0, xmm8 pxor xmm1, xmm9 pxor xmm2, xmm10 pxor xmm3, xmm11 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 pxor xmm4, xmm12 pxor xmm5, xmm13 pxor xmm6, xmm14 pxor xmm7, xmm15 mov eax, r13d jne @L01L09 movdqa xmm9, xmm0 punpckldq xmm0, xmm1 punpckhdq xmm9, xmm1 movdqa xmm11, xmm2 punpckldq xmm2, xmm3 punpckhdq xmm11, xmm3 movdqa xmm1, xmm0 punpcklqdq xmm0, xmm2 punpckhqdq xmm1, xmm2 movdqa xmm3, xmm9 punpcklqdq xmm9, xmm11 punpckhqdq xmm3, xmm11 movdqu xmmword ptr [rbx], xmm0 movdqu xmmword ptr [rbx+$20], xmm1 movdqu xmmword ptr [rbx+$40], xmm9 movdqu xmmword ptr [rbx+$60], xmm3 movdqa xmm9, xmm4 punpckldq xmm4, xmm5 punpckhdq xmm9, xmm5 movdqa xmm11, xmm6 punpckldq xmm6, xmm7 punpckhdq xmm11, xmm7 movdqa xmm5, xmm4 punpcklqdq xmm4, xmm6 punpckhqdq xmm5, xmm6 movdqa xmm7, xmm9 punpcklqdq xmm9, xmm11 punpckhqdq xmm7, xmm11 movdqu xmmword ptr [rbx+$10], xmm4 movdqu xmmword ptr [rbx+$30], xmm5 movdqu xmmword ptr [rbx+$50], xmm9 movdqu xmmword ptr [rbx+$70], xmm7 movdqa xmm1, xmmword ptr [rsp+$110] movdqa xmm0, xmm1 paddd xmm1, xmmword ptr [rsp+$150] movdqa xmmword ptr [rsp+$110], xmm1 pxor xmm0, xmmword ptr [CMP_MSB_MASK+rip] pxor xmm1, xmmword ptr [CMP_MSB_MASK+rip] pcmpgtd xmm0, xmm1 movdqa xmm1, xmmword ptr [rsp+$120] psubd xmm1, xmm0 movdqa xmmword ptr [rsp+$120], xmm1 add rbx, 128 add rdi, 32 sub rsi, 4 cmp rsi, 4 jnc @L00L02 test rsi, rsi jne @L03L03 @L02L04: {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp+$170] movdqa xmm7, xmmword ptr [rsp+$180] movdqa xmm8, xmmword ptr [rsp+$190] movdqa xmm9, xmmword ptr [rsp+$1A0] movdqa xmm10, xmmword ptr [rsp+$1B0] movdqa xmm11, xmmword ptr [rsp+$1C0] movdqa xmm12, xmmword ptr [rsp+$1D0] movdqa xmm13, xmmword ptr [rsp+$1E0] movdqa xmm14, xmmword ptr [rsp+$1F0] movdqa xmm15, xmmword ptr [rsp+$200] mov rdi, qword ptr [rbp+24] mov rsi, qword ptr [rbp+16] {$ENDIF} mov rsp, rbp sub rsp, 40 pop rbx pop r12 pop r13 pop r14 pop r15 mov rsp, rbp pop rbp ret @L03L03: test esi, $2 je @L07L03 movups xmm0, xmmword ptr [rcx] movups xmm1, xmmword ptr [rcx+$10] movaps xmm8, xmm0 movaps xmm9, xmm1 movd xmm13, dword ptr [rsp+$110] pinsrd xmm13, dword ptr [rsp+$120], 1 pinsrd xmm13, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 movaps xmmword ptr [rsp], xmm13 movd xmm14, dword ptr [rsp+$114] pinsrd xmm14, dword ptr [rsp+$124], 1 pinsrd xmm14, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 movaps xmmword ptr [rsp+$10], xmm14 mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L04L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movaps xmm2, xmmword ptr [BLAKE3_IV+rip] movaps xmm10, xmm2 movups xmm4, xmmword ptr [r8+rdx-$40] movups xmm5, xmmword ptr [r8+rdx-$30] movaps xmm3, xmm4 shufps xmm4, xmm5, 136 shufps xmm3, xmm5, 221 movaps xmm5, xmm3 movups xmm6, xmmword ptr [r8+rdx-$20] movups xmm7, xmmword ptr [r8+rdx-$10] movaps xmm3, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm3, xmm7, 221 pshufd xmm7, xmm3, $93 movups xmm12, xmmword ptr [r9+rdx-$40] movups xmm13, xmmword ptr [r9+rdx-$30] movaps xmm11, xmm12 shufps xmm12, xmm13, 136 shufps xmm11, xmm13, 221 movaps xmm13, xmm11 movups xmm14, xmmword ptr [r9+rdx-$20] movups xmm15, xmmword ptr [r9+rdx-$10] movaps xmm11, xmm14 shufps xmm14, xmm15, 136 pshufd xmm14, xmm14, $93 shufps xmm11, xmm15, 221 pshufd xmm15, xmm11, $93 movaps xmm3, xmmword ptr [rsp] movaps xmm11, xmmword ptr [rsp+$10] pinsrd xmm3, eax, 3 pinsrd xmm11, eax, 3 mov al, 7 @L05L09: paddd xmm0, xmm4 paddd xmm8, xmm12 movaps xmmword ptr [rsp+$20], xmm4 movaps xmmword ptr [rsp+$30], xmm12 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 movaps xmm12, xmmword ptr [ROT16+rip] pshufb xmm3, xmm12 pshufb xmm11, xmm12 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 20 psrld xmm4, 12 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 20 psrld xmm4, 12 por xmm9, xmm4 paddd xmm0, xmm5 paddd xmm8, xmm13 movaps xmmword ptr [rsp+$40], xmm5 movaps xmmword ptr [rsp+$50], xmm13 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 movaps xmm13, xmmword ptr [ROT8+rip] pshufb xmm3, xmm13 pshufb xmm11, xmm13 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 25 psrld xmm4, 7 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 25 psrld xmm4, 7 por xmm9, xmm4 pshufd xmm0, xmm0, $93 pshufd xmm8, xmm8, $93 pshufd xmm3, xmm3, $4E pshufd xmm11, xmm11, $4E pshufd xmm2, xmm2, $39 pshufd xmm10, xmm10, $39 paddd xmm0, xmm6 paddd xmm8, xmm14 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 pshufb xmm3, xmm12 pshufb xmm11, xmm12 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 20 psrld xmm4, 12 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 20 psrld xmm4, 12 por xmm9, xmm4 paddd xmm0, xmm7 paddd xmm8, xmm15 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 pshufb xmm3, xmm13 pshufb xmm11, xmm13 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 25 psrld xmm4, 7 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 25 psrld xmm4, 7 por xmm9, xmm4 pshufd xmm0, xmm0, $39 pshufd xmm8, xmm8, $39 pshufd xmm3, xmm3, $4E pshufd xmm11, xmm11, $4E pshufd xmm2, xmm2, $93 pshufd xmm10, xmm10, $93 dec al je @L06L09 movdqa xmm12, xmmword ptr [rsp+$20] movdqa xmm5, xmmword ptr [rsp+$40] pshufd xmm13, xmm12, $0F shufps xmm12, xmm5, 214 pshufd xmm4, xmm12, $39 movdqa xmm12, xmm6 shufps xmm12, xmm7, 250 pblendw xmm13, xmm12, $CC movdqa xmm12, xmm7 punpcklqdq xmm12, xmm5 pblendw xmm12, xmm6, $C0 pshufd xmm12, xmm12, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmmword ptr [rsp+$20], xmm13 movdqa xmmword ptr [rsp+$40], xmm12 movdqa xmm5, xmmword ptr [rsp+$30] movdqa xmm13, xmmword ptr [rsp+$50] pshufd xmm6, xmm5, $0F shufps xmm5, xmm13, 214 pshufd xmm12, xmm5, $39 movdqa xmm5, xmm14 shufps xmm5, xmm15, 250 pblendw xmm6, xmm5, $CC movdqa xmm5, xmm15 punpcklqdq xmm5, xmm13 pblendw xmm5, xmm14, $C0 pshufd xmm5, xmm5, $78 punpckhdq xmm13, xmm15 punpckldq xmm14, xmm13 pshufd xmm15, xmm14, $1E movdqa xmm13, xmm6 movdqa xmm14, xmm5 movdqa xmm5, xmmword ptr [rsp+$20] movdqa xmm6, xmmword ptr [rsp+$40] jmp @L05L09 @L06L09: pxor xmm0, xmm2 pxor xmm1, xmm3 pxor xmm8, xmm10 pxor xmm9, xmm11 mov eax, r13d cmp rdx, r15 jne @L04L02 movups xmmword ptr [rbx], xmm0 movups xmmword ptr [rbx+$10], xmm1 movups xmmword ptr [rbx+$20], xmm8 movups xmmword ptr [rbx+$30], xmm9 movdqa xmm0, xmmword ptr [rsp+$130] movdqa xmm1, xmmword ptr [rsp+$110] movdqa xmm2, xmmword ptr [rsp+$120] movdqu xmm3, xmmword ptr [rsp+$118] movdqu xmm4, xmmword ptr [rsp+$128] // blendvps xmm1, xmm3, xmm0 DB $66, $0f, $38, $14, $cb // blendvps xmm2, xmm4, xmm0 DB $66, $0f, $38, $14, $d4 movdqa xmmword ptr [rsp+$110], xmm1 movdqa xmmword ptr [rsp+$120], xmm2 add rdi, 16 add rbx, 64 sub rsi, 2 @L07L03: test esi, $1 je @L02L04 movups xmm0, xmmword ptr [rcx] movups xmm1, xmmword ptr [rcx+$10] movd xmm13, dword ptr [rsp+$110] pinsrd xmm13, dword ptr [rsp+$120], 1 pinsrd xmm13, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 movaps xmm14, xmmword ptr [ROT8+rip] movaps xmm15, xmmword ptr [ROT16+rip] mov r8, qword ptr [rdi] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L08L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movaps xmm2, xmmword ptr [BLAKE3_IV+rip] movaps xmm3, xmm13 pinsrd xmm3, eax, 3 movups xmm4, xmmword ptr [r8+rdx-$40] movups xmm5, xmmword ptr [r8+rdx-$30] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [r8+rdx-$20] movups xmm7, xmmword ptr [r8+rdx-$10] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 mov al, 7 @L09L09: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @L0AL09 movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pblendw xmm9, xmm8, $CC movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 pblendw xmm8, xmm6, $C0 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @L09L09 @L0AL09: pxor xmm0, xmm2 pxor xmm1, xmm3 mov eax, r13d cmp rdx, r15 jne @L08L02 movups xmmword ptr [rbx], xmm0 movups xmmword ptr [rbx+$10], xmm1 jmp @L02L04 end; procedure blake3_compress_in_place_sse41(cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8 // WIN64: RCX, RDX, R8, R9, STACK asm {$IF DEFINED(WIN64)} push rsi push rdi mov rsi, rdx mov rdi, rcx mov rdx, r8 mov rcx, r9 sub rsp, 120 movdqa xmmword ptr [rsp], xmm6 movdqa xmmword ptr [rsp+$10], xmm7 movdqa xmmword ptr [rsp+$20], xmm8 movdqa xmmword ptr [rsp+$30], xmm9 movdqa xmmword ptr [rsp+$40], xmm11 movdqa xmmword ptr [rsp+$50], xmm14 movdqa xmmword ptr [rsp+$60], xmm15 movzx r8, byte ptr [rsp+$B0] {$ENDIF} movups xmm0, xmmword ptr [rdi] movups xmm1, xmmword ptr [rdi+$10] movaps xmm2, xmmword ptr [BLAKE3_IV+rip] shl r8, 32 add rdx, r8 movq xmm3, rcx movq xmm4, rdx punpcklqdq xmm3, xmm4 movups xmm4, xmmword ptr [rsi] movups xmm5, xmmword ptr [rsi+$10] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [rsi+$20] movups xmm7, xmmword ptr [rsi+$30] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 movaps xmm14, xmmword ptr [ROT8+rip] movaps xmm15, xmmword ptr [ROT16+rip] mov al, 7 @Lab: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @Laf movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pblendw xmm9, xmm8, $CC movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 pblendw xmm8, xmm6, $C0 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @Lab @Laf: pxor xmm0, xmm2 pxor xmm1, xmm3 movups xmmword ptr [rdi], xmm0 movups xmmword ptr [rdi+$10], xmm1 {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp] movdqa xmm7, xmmword ptr [rsp+$10] movdqa xmm8, xmmword ptr [rsp+$20] movdqa xmm9, xmmword ptr [rsp+$30] movdqa xmm11, xmmword ptr [rsp+$40] movdqa xmm14, xmmword ptr [rsp+$50] movdqa xmm15, xmmword ptr [rsp+$60] add rsp, 120 pop rdi pop rsi {$ENDIF} ret end; procedure blake3_compress_xof_sse41(const cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8; out_: pcuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8, R9 // WIN64: RCX, RDX, R8, R9, STACK, STACK asm {$IF DEFINED(WIN64)} push rsi push rdi mov rsi, rdx mov rdi, rcx mov rdx, r8 mov rcx, r9 sub rsp, 120 movdqa xmmword ptr [rsp], xmm6 movdqa xmmword ptr [rsp+$10], xmm7 movdqa xmmword ptr [rsp+$20], xmm8 movdqa xmmword ptr [rsp+$30], xmm9 movdqa xmmword ptr [rsp+$40], xmm11 movdqa xmmword ptr [rsp+$50], xmm14 movdqa xmmword ptr [rsp+$60], xmm15 movzx r8, byte ptr [rsp+$B0] mov r9, qword ptr [rsp+$B8] {$ENDIF} movups xmm0, xmmword ptr [rdi] movups xmm1, xmmword ptr [rdi+$10] movaps xmm2, xmmword ptr [BLAKE3_IV+rip] movzx eax, r8b movzx edx, dl shl rax, 32 add rdx, rax movq xmm3, rcx movq xmm4, rdx punpcklqdq xmm3, xmm4 movups xmm4, xmmword ptr [rsi] movups xmm5, xmmword ptr [rsi+$10] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [rsi+$20] movups xmm7, xmmword ptr [rsi+$30] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 movaps xmm14, xmmword ptr [ROT8+rip] movaps xmm15, xmmword ptr [ROT16+rip] mov al, 7 @Lab: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm15 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 pshufb xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @Laf movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pblendw xmm9, xmm8, $CC movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 pblendw xmm8, xmm6, $C0 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @Lab @Laf: movdqu xmm4, xmmword ptr [rdi] movdqu xmm5, xmmword ptr [rdi+$10] pxor xmm0, xmm2 pxor xmm1, xmm3 pxor xmm2, xmm4 pxor xmm3, xmm5 movups xmmword ptr [r9], xmm0 movups xmmword ptr [r9+$10], xmm1 movups xmmword ptr [r9+$20], xmm2 movups xmmword ptr [r9+$30], xmm3 {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp] movdqa xmm7, xmmword ptr [rsp+$10] movdqa xmm8, xmmword ptr [rsp+$20] movdqa xmm9, xmmword ptr [rsp+$30] movdqa xmm11, xmmword ptr [rsp+$40] movdqa xmm14, xmmword ptr [rsp+$50] movdqa xmm15, xmmword ptr [rsp+$60] add rsp, 120 pop rdi pop rsi {$ENDIF} ret end; function SSE41Support: LongBool; assembler; asm push rbx mov eax, 1 cpuid and ecx, $80000 mov eax, ecx pop rbx end; ������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake3_sse2.inc�����������������������������������������0000644�0001750�0000144�00000214032�15104114162�022617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$asmmode intel} const ADD0: array[0..3] of cuint32 = (0, 1, 2, 3); ADD1: array[0..3] of cuint32 = (4, 4, 4, 4); BLAKE3_BLOCK_LEN8: array[0..7] of cuint32 = (64, 64, 64, 64, 64, 64, 64, 64); BLAKE3_IV_0: array[0..7] of cuint32 = ($6A09E667, $6A09E667, $6A09E667, $6A09E667, $6A09E667, $6A09E667, $6A09E667, $6A09E667); BLAKE3_IV_1: array[0..7] of cuint32 = ($BB67AE85, $BB67AE85, $BB67AE85, $BB67AE85, $BB67AE85, $BB67AE85, $BB67AE85, $BB67AE85); BLAKE3_IV_2: array[0..7] of cuint32 = ($3C6EF372, $3C6EF372, $3C6EF372, $3C6EF372, $3C6EF372, $3C6EF372, $3C6EF372, $3C6EF372); BLAKE3_IV_3: array[0..7] of cuint32 = ($A54FF53A, $A54FF53A, $A54FF53A, $A54FF53A, $A54FF53A, $A54FF53A, $A54FF53A, $A54FF53A); CMP_MSB_MASK: array[0..7] of cuint32 = ($80000000, $80000000, $80000000, $80000000, $80000000, $80000000, $80000000, $80000000); PBLENDW_0x33_MASK: array[0..3] of cuint32 = ($FFFFFFFF, $00000000, $FFFFFFFF, $00000000); PBLENDW_0xCC_MASK: array[0..3] of cuint32 = ($00000000, $FFFFFFFF, $00000000, $FFFFFFFF); PBLENDW_0x3F_MASK: array[0..3] of cuint32 = ($FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $00000000); PBLENDW_0xC0_MASK: array[0..3] of cuint32 = ($00000000, $00000000, $00000000, $FFFFFFFF); procedure blake3_hash_many_sse2(inputs: ppcuint8; num_inputs: csize_t; blocks: csize_t; const key: pcuint32; counter: cuint64; increment_counter: boolean32; flags: cuint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8, R9, STACK, STACK, STACK, STACK // WIN64: RCX, RDX, R8, R9, STACK, STACK, STACK, STACK, STACK, STACK asm push rbp mov rbp, rsp push r15 push r14 push r13 push r12 push rbx sub rsp, 360 and rsp, $FFFFFFFFFFFFFFC0 {$IF DEFINED(WIN64)} sub rsp, 168 and rsp, $FFFFFFFFFFFFFFC0 movdqa xmmword ptr [rsp+$170], xmm6 movdqa xmmword ptr [rsp+$180], xmm7 movdqa xmmword ptr [rsp+$190], xmm8 movdqa xmmword ptr [rsp+$1A0], xmm9 movdqa xmmword ptr [rsp+$1B0], xmm10 movdqa xmmword ptr [rsp+$1C0], xmm11 movdqa xmmword ptr [rsp+$1D0], xmm12 movdqa xmmword ptr [rsp+$1E0], xmm13 movdqa xmmword ptr [rsp+$1F0], xmm14 movdqa xmmword ptr [rsp+$200], xmm15 mov qword ptr [rbp+16], rsi mov qword ptr [rbp+24], rdi mov rdi, rcx mov rsi, rdx mov rdx, r8 mov rcx, r9 mov r8, qword ptr [counter] movzx r9, dword ptr [increment_counter] {$ENDIF} neg r9d movd xmm0, r9d pshufd xmm0, xmm0, $00 movdqa xmmword ptr [rsp+$130], xmm0 movdqa xmm1, xmm0 pand xmm1, xmmword ptr [ADD0+rip] pand xmm0, xmmword ptr [ADD1+rip] movdqa xmmword ptr [rsp+$150], xmm0 movd xmm0, r8d pshufd xmm0, xmm0, $00 paddd xmm0, xmm1 movdqa xmmword ptr [rsp+$110], xmm0 pxor xmm0, xmmword ptr [CMP_MSB_MASK+rip] pxor xmm1, xmmword ptr [CMP_MSB_MASK+rip] pcmpgtd xmm1, xmm0 shr r8, 32 movd xmm2, r8d pshufd xmm2, xmm2, $00 psubd xmm2, xmm1 movdqa xmmword ptr [rsp+$120], xmm2 mov rbx, qword ptr [out_] mov r15, rdx shl r15, 6 movzx r13d, byte ptr [flags] movzx r12d, byte ptr [flags_end] cmp rsi, 4 jc @03L03 @00L02: movdqu xmm3, xmmword ptr [rcx] pshufd xmm0, xmm3, $00 pshufd xmm1, xmm3, $55 pshufd xmm2, xmm3, $AA pshufd xmm3, xmm3, $FF movdqu xmm7, xmmword ptr [rcx+$10] pshufd xmm4, xmm7, $00 pshufd xmm5, xmm7, $55 pshufd xmm6, xmm7, $AA pshufd xmm7, xmm7, $FF mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] mov r10, qword ptr [rdi+$10] mov r11, qword ptr [rdi+$18] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @01L09: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movdqu xmm8, xmmword ptr [r8+rdx-$40] movdqu xmm9, xmmword ptr [r9+rdx-$40] movdqu xmm10, xmmword ptr [r10+rdx-$40] movdqu xmm11, xmmword ptr [r11+rdx-$40] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp], xmm8 movdqa xmmword ptr [rsp+$10], xmm9 movdqa xmmword ptr [rsp+$20], xmm12 movdqa xmmword ptr [rsp+$30], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$30] movdqu xmm9, xmmword ptr [r9+rdx-$30] movdqu xmm10, xmmword ptr [r10+rdx-$30] movdqu xmm11, xmmword ptr [r11+rdx-$30] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$40], xmm8 movdqa xmmword ptr [rsp+$50], xmm9 movdqa xmmword ptr [rsp+$60], xmm12 movdqa xmmword ptr [rsp+$70], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$20] movdqu xmm9, xmmword ptr [r9+rdx-$20] movdqu xmm10, xmmword ptr [r10+rdx-$20] movdqu xmm11, xmmword ptr [r11+rdx-$20] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$80], xmm8 movdqa xmmword ptr [rsp+$90], xmm9 movdqa xmmword ptr [rsp+$A0], xmm12 movdqa xmmword ptr [rsp+$B0], xmm13 movdqu xmm8, xmmword ptr [r8+rdx-$10] movdqu xmm9, xmmword ptr [r9+rdx-$10] movdqu xmm10, xmmword ptr [r10+rdx-$10] movdqu xmm11, xmmword ptr [r11+rdx-$10] movdqa xmm12, xmm8 punpckldq xmm8, xmm9 punpckhdq xmm12, xmm9 movdqa xmm14, xmm10 punpckldq xmm10, xmm11 punpckhdq xmm14, xmm11 movdqa xmm9, xmm8 punpcklqdq xmm8, xmm10 punpckhqdq xmm9, xmm10 movdqa xmm13, xmm12 punpcklqdq xmm12, xmm14 punpckhqdq xmm13, xmm14 movdqa xmmword ptr [rsp+$C0], xmm8 movdqa xmmword ptr [rsp+$D0], xmm9 movdqa xmmword ptr [rsp+$E0], xmm12 movdqa xmmword ptr [rsp+$F0], xmm13 movdqa xmm9, xmmword ptr [BLAKE3_IV_1+rip] movdqa xmm10, xmmword ptr [BLAKE3_IV_2+rip] movdqa xmm11, xmmword ptr [BLAKE3_IV_3+rip] movdqa xmm12, xmmword ptr [rsp+$110] movdqa xmm13, xmmword ptr [rsp+$120] movdqa xmm14, xmmword ptr [BLAKE3_BLOCK_LEN8+rip] movd xmm15, eax pshufd xmm15, xmm15, $00 prefetcht0 [r8+rdx+$80] prefetcht0 [r9+rdx+$80] prefetcht0 [r10+rdx+$80] prefetcht0 [r11+rdx+$80] paddd xmm0, xmmword ptr [rsp] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$40] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [BLAKE3_IV_0+rip] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$10] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$50] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$80] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$C0] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$90] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$D0] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$20] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$70] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$60] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$10] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$90] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$B0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$E0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$30] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$D0] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$40] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$20] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$60] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$B0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$50] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$F0] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$A0] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$E0] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$70] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$30] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$40] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$50] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$80] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$C0] paddd xmm1, xmmword ptr [rsp+$90] paddd xmm2, xmmword ptr [rsp+$F0] paddd xmm3, xmmword ptr [rsp+$E0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$D0] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$A0] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$70] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$20] paddd xmm1, xmmword ptr [rsp+$30] paddd xmm2, xmmword ptr [rsp+$10] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$90] paddd xmm1, xmmword ptr [rsp+$B0] paddd xmm2, xmmword ptr [rsp+$80] paddd xmm3, xmmword ptr [rsp+$F0] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$E0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$C0] paddd xmm3, xmmword ptr [rsp+$10] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$D0] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$20] paddd xmm3, xmmword ptr [rsp+$40] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$30] paddd xmm1, xmmword ptr [rsp+$A0] paddd xmm2, xmmword ptr [rsp+$60] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$B0] paddd xmm1, xmmword ptr [rsp+$50] paddd xmm2, xmmword ptr [rsp+$10] paddd xmm3, xmmword ptr [rsp+$80] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$F0] paddd xmm1, xmmword ptr [rsp] paddd xmm2, xmmword ptr [rsp+$90] paddd xmm3, xmmword ptr [rsp+$60] paddd xmm0, xmm4 paddd xmm1, xmm5 paddd xmm2, xmm6 paddd xmm3, xmm7 pxor xmm12, xmm0 pxor xmm13, xmm1 pxor xmm14, xmm2 pxor xmm15, xmm3 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm12 paddd xmm9, xmm13 paddd xmm10, xmm14 paddd xmm11, xmm15 pxor xmm4, xmm8 pxor xmm5, xmm9 pxor xmm6, xmm10 pxor xmm7, xmm11 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 paddd xmm0, xmmword ptr [rsp+$E0] paddd xmm1, xmmword ptr [rsp+$20] paddd xmm2, xmmword ptr [rsp+$30] paddd xmm3, xmmword ptr [rsp+$70] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 pshuflw xmm15, xmm15, $B1 pshufhw xmm15, xmm15, $B1 pshuflw xmm12, xmm12, $B1 pshufhw xmm12, xmm12, $B1 pshuflw xmm13, xmm13, $B1 pshufhw xmm13, xmm13, $B1 pshuflw xmm14, xmm14, $B1 pshufhw xmm14, xmm14, $B1 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 movdqa xmmword ptr [rsp+$100], xmm8 movdqa xmm8, xmm5 psrld xmm8, 12 pslld xmm5, 20 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 12 pslld xmm6, 20 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 12 pslld xmm7, 20 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 12 pslld xmm4, 20 por xmm4, xmm8 paddd xmm0, xmmword ptr [rsp+$A0] paddd xmm1, xmmword ptr [rsp+$C0] paddd xmm2, xmmword ptr [rsp+$40] paddd xmm3, xmmword ptr [rsp+$D0] paddd xmm0, xmm5 paddd xmm1, xmm6 paddd xmm2, xmm7 paddd xmm3, xmm4 pxor xmm15, xmm0 pxor xmm12, xmm1 pxor xmm13, xmm2 pxor xmm14, xmm3 movdqa xmm8, xmm15 psrld xmm15, 8 pslld xmm8, 24 pxor xmm15, xmm8 movdqa xmm8, xmm12 psrld xmm12, 8 pslld xmm8, 24 pxor xmm12, xmm8 movdqa xmm8, xmm13 psrld xmm13, 8 pslld xmm8, 24 pxor xmm13, xmm8 movdqa xmm8, xmm14 psrld xmm14, 8 pslld xmm8, 24 pxor xmm14, xmm8 paddd xmm10, xmm15 paddd xmm11, xmm12 movdqa xmm8, xmmword ptr [rsp+$100] paddd xmm8, xmm13 paddd xmm9, xmm14 pxor xmm5, xmm10 pxor xmm6, xmm11 pxor xmm7, xmm8 pxor xmm4, xmm9 pxor xmm0, xmm8 pxor xmm1, xmm9 pxor xmm2, xmm10 pxor xmm3, xmm11 movdqa xmm8, xmm5 psrld xmm8, 7 pslld xmm5, 25 por xmm5, xmm8 movdqa xmm8, xmm6 psrld xmm8, 7 pslld xmm6, 25 por xmm6, xmm8 movdqa xmm8, xmm7 psrld xmm8, 7 pslld xmm7, 25 por xmm7, xmm8 movdqa xmm8, xmm4 psrld xmm8, 7 pslld xmm4, 25 por xmm4, xmm8 pxor xmm4, xmm12 pxor xmm5, xmm13 pxor xmm6, xmm14 pxor xmm7, xmm15 mov eax, r13d jne @01L09 movdqa xmm9, xmm0 punpckldq xmm0, xmm1 punpckhdq xmm9, xmm1 movdqa xmm11, xmm2 punpckldq xmm2, xmm3 punpckhdq xmm11, xmm3 movdqa xmm1, xmm0 punpcklqdq xmm0, xmm2 punpckhqdq xmm1, xmm2 movdqa xmm3, xmm9 punpcklqdq xmm9, xmm11 punpckhqdq xmm3, xmm11 movdqu xmmword ptr [rbx], xmm0 movdqu xmmword ptr [rbx+$20], xmm1 movdqu xmmword ptr [rbx+$40], xmm9 movdqu xmmword ptr [rbx+$60], xmm3 movdqa xmm9, xmm4 punpckldq xmm4, xmm5 punpckhdq xmm9, xmm5 movdqa xmm11, xmm6 punpckldq xmm6, xmm7 punpckhdq xmm11, xmm7 movdqa xmm5, xmm4 punpcklqdq xmm4, xmm6 punpckhqdq xmm5, xmm6 movdqa xmm7, xmm9 punpcklqdq xmm9, xmm11 punpckhqdq xmm7, xmm11 movdqu xmmword ptr [rbx+$10], xmm4 movdqu xmmword ptr [rbx+$30], xmm5 movdqu xmmword ptr [rbx+$50], xmm9 movdqu xmmword ptr [rbx+$70], xmm7 movdqa xmm1, xmmword ptr [rsp+$110] movdqa xmm0, xmm1 paddd xmm1, xmmword ptr [rsp+$150] movdqa xmmword ptr [rsp+$110], xmm1 pxor xmm0, xmmword ptr [CMP_MSB_MASK+rip] pxor xmm1, xmmword ptr [CMP_MSB_MASK+rip] pcmpgtd xmm0, xmm1 movdqa xmm1, xmmword ptr [rsp+$120] psubd xmm1, xmm0 movdqa xmmword ptr [rsp+$120], xmm1 add rbx, 128 add rdi, 32 sub rsi, 4 cmp rsi, 4 jnc @00L02 test rsi, rsi jne @03L03 @02L04: {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp+$170] movdqa xmm7, xmmword ptr [rsp+$180] movdqa xmm8, xmmword ptr [rsp+$190] movdqa xmm9, xmmword ptr [rsp+$1A0] movdqa xmm10, xmmword ptr [rsp+$1B0] movdqa xmm11, xmmword ptr [rsp+$1C0] movdqa xmm12, xmmword ptr [rsp+$1D0] movdqa xmm13, xmmword ptr [rsp+$1E0] movdqa xmm14, xmmword ptr [rsp+$1F0] movdqa xmm15, xmmword ptr [rsp+$200] mov rdi, qword ptr [rbp+24] mov rsi, qword ptr [rbp+16] {$ENDIF} mov rsp, rbp sub rsp, 40 pop rbx pop r12 pop r13 pop r14 pop r15 mov rsp, rbp pop rbp ret @03L03: test esi, $2 je @07L03 movups xmm0, xmmword ptr [rcx] movups xmm1, xmmword ptr [rcx+$10] movaps xmm8, xmm0 movaps xmm9, xmm1 movd xmm13, dword ptr [rsp+$110] movd xmm14, dword ptr [rsp+$120] punpckldq xmm13, xmm14 movaps xmmword ptr [rsp], xmm13 movd xmm14, dword ptr [rsp+$114] movd xmm13, dword ptr [rsp+$124] punpckldq xmm14, xmm13 movaps xmmword ptr [rsp+$10], xmm14 mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @04L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movaps xmm2, xmmword ptr [BLAKE3_IV+rip] movaps xmm10, xmm2 movups xmm4, xmmword ptr [r8+rdx-$40] movups xmm5, xmmword ptr [r8+rdx-$30] movaps xmm3, xmm4 shufps xmm4, xmm5, 136 shufps xmm3, xmm5, 221 movaps xmm5, xmm3 movups xmm6, xmmword ptr [r8+rdx-$20] movups xmm7, xmmword ptr [r8+rdx-$10] movaps xmm3, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm3, xmm7, 221 pshufd xmm7, xmm3, $93 movups xmm12, xmmword ptr [r9+rdx-$40] movups xmm13, xmmword ptr [r9+rdx-$30] movaps xmm11, xmm12 shufps xmm12, xmm13, 136 shufps xmm11, xmm13, 221 movaps xmm13, xmm11 movups xmm14, xmmword ptr [r9+rdx-$20] movups xmm15, xmmword ptr [r9+rdx-$10] movaps xmm11, xmm14 shufps xmm14, xmm15, 136 pshufd xmm14, xmm14, $93 shufps xmm11, xmm15, 221 pshufd xmm15, xmm11, $93 shl rax, $20 or rax, $40 movq xmm3, rax movdqa xmmword ptr [rsp+$20], xmm3 movaps xmm3, xmmword ptr [rsp] movaps xmm11, xmmword ptr [rsp+$10] punpcklqdq xmm3, xmmword ptr [rsp+$20] punpcklqdq xmm11, xmmword ptr [rsp+$20] mov al, 7 @05L09: paddd xmm0, xmm4 paddd xmm8, xmm12 movaps xmmword ptr [rsp+$20], xmm4 movaps xmmword ptr [rsp+$30], xmm12 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 pshuflw xmm11, xmm11, $B1 pshufhw xmm11, xmm11, $B1 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 20 psrld xmm4, 12 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 20 psrld xmm4, 12 por xmm9, xmm4 paddd xmm0, xmm5 paddd xmm8, xmm13 movaps xmmword ptr [rsp+$40], xmm5 movaps xmmword ptr [rsp+$50], xmm13 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 movdqa xmm13, xmm3 psrld xmm3, 8 pslld xmm13, 24 pxor xmm3, xmm13 movdqa xmm13, xmm11 psrld xmm11, 8 pslld xmm13, 24 pxor xmm11, xmm13 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 25 psrld xmm4, 7 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 25 psrld xmm4, 7 por xmm9, xmm4 pshufd xmm0, xmm0, $93 pshufd xmm8, xmm8, $93 pshufd xmm3, xmm3, $4E pshufd xmm11, xmm11, $4E pshufd xmm2, xmm2, $39 pshufd xmm10, xmm10, $39 paddd xmm0, xmm6 paddd xmm8, xmm14 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 pshuflw xmm11, xmm11, $B1 pshufhw xmm11, xmm11, $B1 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 20 psrld xmm4, 12 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 20 psrld xmm4, 12 por xmm9, xmm4 paddd xmm0, xmm7 paddd xmm8, xmm15 paddd xmm0, xmm1 paddd xmm8, xmm9 pxor xmm3, xmm0 pxor xmm11, xmm8 movdqa xmm13, xmm3 psrld xmm3, 8 pslld xmm13, 24 pxor xmm3, xmm13 movdqa xmm13, xmm11 psrld xmm11, 8 pslld xmm13, 24 pxor xmm11, xmm13 paddd xmm2, xmm3 paddd xmm10, xmm11 pxor xmm1, xmm2 pxor xmm9, xmm10 movdqa xmm4, xmm1 pslld xmm1, 25 psrld xmm4, 7 por xmm1, xmm4 movdqa xmm4, xmm9 pslld xmm9, 25 psrld xmm4, 7 por xmm9, xmm4 pshufd xmm0, xmm0, $39 pshufd xmm8, xmm8, $39 pshufd xmm3, xmm3, $4E pshufd xmm11, xmm11, $4E pshufd xmm2, xmm2, $93 pshufd xmm10, xmm10, $93 dec al je @06L09 movdqa xmm12, xmmword ptr [rsp+$20] movdqa xmm5, xmmword ptr [rsp+$40] pshufd xmm13, xmm12, $0F shufps xmm12, xmm5, 214 pshufd xmm4, xmm12, $39 movdqa xmm12, xmm6 shufps xmm12, xmm7, 250 pand xmm13, xmmword ptr [PBLENDW_0x33_MASK+rip] pand xmm12, xmmword ptr [PBLENDW_0xCC_MASK+rip] por xmm13, xmm12 movdqa xmmword ptr [rsp+$20], xmm13 movdqa xmm12, xmm7 punpcklqdq xmm12, xmm5 movdqa xmm13, xmm6 pand xmm12, xmmword ptr [PBLENDW_0x3F_MASK+rip] pand xmm13, xmmword ptr [PBLENDW_0xC0_MASK+rip] por xmm12, xmm13 pshufd xmm12, xmm12, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmmword ptr [rsp+$40], xmm12 movdqa xmm5, xmmword ptr [rsp+$30] movdqa xmm13, xmmword ptr [rsp+$50] pshufd xmm6, xmm5, $0F shufps xmm5, xmm13, 214 pshufd xmm12, xmm5, $39 movdqa xmm5, xmm14 shufps xmm5, xmm15, 250 pand xmm6, xmmword ptr [PBLENDW_0x33_MASK+rip] pand xmm5, xmmword ptr [PBLENDW_0xCC_MASK+rip] por xmm6, xmm5 movdqa xmm5, xmm15 punpcklqdq xmm5, xmm13 movdqa xmmword ptr [rsp+$30], xmm2 movdqa xmm2, xmm14 pand xmm5, xmmword ptr [PBLENDW_0x3F_MASK+rip] pand xmm2, xmmword ptr [PBLENDW_0xC0_MASK+rip] por xmm5, xmm2 movdqa xmm2, xmmword ptr [rsp+$30] pshufd xmm5, xmm5, $78 punpckhdq xmm13, xmm15 punpckldq xmm14, xmm13 pshufd xmm15, xmm14, $1E movdqa xmm13, xmm6 movdqa xmm14, xmm5 movdqa xmm5, xmmword ptr [rsp+$20] movdqa xmm6, xmmword ptr [rsp+$40] jmp @05L09 @06L09: pxor xmm0, xmm2 pxor xmm1, xmm3 pxor xmm8, xmm10 pxor xmm9, xmm11 mov eax, r13d cmp rdx, r15 jne @04L02 movups xmmword ptr [rbx], xmm0 movups xmmword ptr [rbx+$10], xmm1 movups xmmword ptr [rbx+$20], xmm8 movups xmmword ptr [rbx+$30], xmm9 mov eax, dword ptr [rsp+$130] neg eax mov r10d, dword ptr [rsp+8*rax+$110] mov r11d, dword ptr [rsp+8*rax+$120] mov dword ptr [rsp+$110], r10d mov dword ptr [rsp+$120], r11d add rdi, 16 add rbx, 64 sub rsi, 2 @07L03: test esi, $1 je @02L04 movups xmm0, xmmword ptr [rcx] movups xmm1, xmmword ptr [rcx+$10] movd xmm13, dword ptr [rsp+$110] movd xmm14, dword ptr [rsp+$120] punpckldq xmm13, xmm14 mov r8, qword ptr [rdi] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @08L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d movaps xmm2, xmmword ptr [BLAKE3_IV+rip] shl rax, 32 or rax, 64 movq xmm12, rax movdqa xmm3, xmm13 punpcklqdq xmm3, xmm12 movups xmm4, xmmword ptr [r8+rdx-$40] movups xmm5, xmmword ptr [r8+rdx-$30] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [r8+rdx-$20] movups xmm7, xmmword ptr [r8+rdx-$10] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 mov al, 7 @09L09: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @0AL09 movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pand xmm9, xmmword ptr [PBLENDW_0x33_MASK+rip] pand xmm8, xmmword ptr [PBLENDW_0xCC_MASK+rip] por xmm9, xmm8 movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 movdqa xmm10, xmm6 pand xmm8, xmmword ptr [PBLENDW_0x3F_MASK+rip] pand xmm10, xmmword ptr [PBLENDW_0xC0_MASK+rip] por xmm8, xmm10 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @09L09 @0AL09: pxor xmm0, xmm2 pxor xmm1, xmm3 mov eax, r13d cmp rdx, r15 jne @08L02 movups xmmword ptr [rbx], xmm0 movups xmmword ptr [rbx+$10], xmm1 jmp @02L04 end; procedure blake3_compress_in_place_sse2(cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8 // WIN64: RCX, RDX, R8, R9, STACK asm {$IF DEFINED(WIN64)} push rsi push rdi mov rsi, rdx mov rdi, rcx mov rdx, r8 mov rcx, r9 sub rsp, 120 movdqa xmmword ptr [rsp], xmm6 movdqa xmmword ptr [rsp+$10], xmm7 movdqa xmmword ptr [rsp+$20], xmm8 movdqa xmmword ptr [rsp+$30], xmm9 movdqa xmmword ptr [rsp+$40], xmm11 movdqa xmmword ptr [rsp+$50], xmm14 movdqa xmmword ptr [rsp+$60], xmm15 movzx r8, byte ptr [rsp+$B0] {$ENDIF} movups xmm0, xmmword ptr [rdi] movups xmm1, xmmword ptr [rdi+$10] movaps xmm2, xmmword ptr [BLAKE3_IV+rip] shl r8, 32 add rdx, r8 movq xmm3, rcx movq xmm4, rdx punpcklqdq xmm3, xmm4 movups xmm4, xmmword ptr [rsi] movups xmm5, xmmword ptr [rsi+$10] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [rsi+$20] movups xmm7, xmmword ptr [rsi+$30] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 mov al, 7 @Lab: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @Laf movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pand xmm9, xmmword ptr [PBLENDW_0x33_MASK+rip] pand xmm8, xmmword ptr [PBLENDW_0xCC_MASK+rip] por xmm9, xmm8 movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 movdqa xmm14, xmm6 pand xmm8, xmmword ptr [PBLENDW_0x3F_MASK+rip] pand xmm14, xmmword ptr [PBLENDW_0xC0_MASK+rip] por xmm8, xmm14 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @Lab @Laf: pxor xmm0, xmm2 pxor xmm1, xmm3 movups xmmword ptr [rdi], xmm0 movups xmmword ptr [rdi+$10], xmm1 {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp] movdqa xmm7, xmmword ptr [rsp+$10] movdqa xmm8, xmmword ptr [rsp+$20] movdqa xmm9, xmmword ptr [rsp+$30] movdqa xmm11, xmmword ptr [rsp+$40] movdqa xmm14, xmmword ptr [rsp+$50] movdqa xmm15, xmmword ptr [rsp+$60] add rsp, 120 pop rdi pop rsi {$ENDIF} ret end; procedure blake3_compress_xof_sse2(const cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8; out_: pcuint8); assembler; nostackframe; // UNIX RDI, RSI, RDX, RCX, R8, R9 // WIN64: RCX, RDX, R8, R9, STACK, STACK asm {$IF DEFINED(WIN64)} push rsi push rdi mov rsi, rdx mov rdi, rcx mov rdx, r8 mov rcx, r9 sub rsp, 120 movdqa xmmword ptr [rsp], xmm6 movdqa xmmword ptr [rsp+$10], xmm7 movdqa xmmword ptr [rsp+$20], xmm8 movdqa xmmword ptr [rsp+$30], xmm9 movdqa xmmword ptr [rsp+$40], xmm11 movdqa xmmword ptr [rsp+$50], xmm14 movdqa xmmword ptr [rsp+$60], xmm15 movzx r8, byte ptr [rsp+$B0] mov r9, qword ptr [rsp+$B8] {$ENDIF} movups xmm0, xmmword ptr [rdi] movups xmm1, xmmword ptr [rdi+$10] movaps xmm2, xmmword ptr [BLAKE3_IV+rip] movzx eax, r8b movzx edx, dl shl rax, 32 add rdx, rax movq xmm3, rcx movq xmm4, rdx punpcklqdq xmm3, xmm4 movups xmm4, xmmword ptr [rsi] movups xmm5, xmmword ptr [rsi+$10] movaps xmm8, xmm4 shufps xmm4, xmm5, 136 shufps xmm8, xmm5, 221 movaps xmm5, xmm8 movups xmm6, xmmword ptr [rsi+$20] movups xmm7, xmmword ptr [rsi+$30] movaps xmm8, xmm6 shufps xmm6, xmm7, 136 pshufd xmm6, xmm6, $93 shufps xmm8, xmm7, 221 pshufd xmm7, xmm8, $93 mov al, 7 @Lab: paddd xmm0, xmm4 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm5 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $93 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $39 paddd xmm0, xmm6 paddd xmm0, xmm1 pxor xmm3, xmm0 pshuflw xmm3, xmm3, $B1 pshufhw xmm3, xmm3, $B1 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 20 psrld xmm11, 12 por xmm1, xmm11 paddd xmm0, xmm7 paddd xmm0, xmm1 pxor xmm3, xmm0 movdqa xmm14, xmm3 psrld xmm3, 8 pslld xmm14, 24 pxor xmm3, xmm14 paddd xmm2, xmm3 pxor xmm1, xmm2 movdqa xmm11, xmm1 pslld xmm1, 25 psrld xmm11, 7 por xmm1, xmm11 pshufd xmm0, xmm0, $39 pshufd xmm3, xmm3, $4E pshufd xmm2, xmm2, $93 dec al jz @Laf movdqa xmm8, xmm4 shufps xmm8, xmm5, 214 pshufd xmm9, xmm4, $0F pshufd xmm4, xmm8, $39 movdqa xmm8, xmm6 shufps xmm8, xmm7, 250 pand xmm9, xmmword ptr [PBLENDW_0x33_MASK+rip] pand xmm8, xmmword ptr [PBLENDW_0xCC_MASK+rip] por xmm9, xmm8 movdqa xmm8, xmm7 punpcklqdq xmm8, xmm5 movdqa xmm14, xmm6 pand xmm8, xmmword ptr [PBLENDW_0x3F_MASK+rip] pand xmm14, xmmword ptr [PBLENDW_0xC0_MASK+rip] por xmm8, xmm14 pshufd xmm8, xmm8, $78 punpckhdq xmm5, xmm7 punpckldq xmm6, xmm5 pshufd xmm7, xmm6, $1E movdqa xmm5, xmm9 movdqa xmm6, xmm8 jmp @Lab @Laf: movdqu xmm4, xmmword ptr [rdi] movdqu xmm5, xmmword ptr [rdi+$10] pxor xmm0, xmm2 pxor xmm1, xmm3 pxor xmm2, xmm4 pxor xmm3, xmm5 movups xmmword ptr [r9], xmm0 movups xmmword ptr [r9+$10], xmm1 movups xmmword ptr [r9+$20], xmm2 movups xmmword ptr [r9+$30], xmm3 {$IF DEFINED(WIN64)} movdqa xmm6, xmmword ptr [rsp] movdqa xmm7, xmmword ptr [rsp+$10] movdqa xmm8, xmmword ptr [rsp+$20] movdqa xmm9, xmmword ptr [rsp+$30] movdqa xmm11, xmmword ptr [rsp+$40] movdqa xmm14, xmmword ptr [rsp+$50] movdqa xmm15, xmmword ptr [rsp+$60] add rsp, 120 pop rdi pop rsi {$ENDIF} ret end; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake3_pas.inc������������������������������������������0000644�0001750�0000144�00000014137�15104114162�022532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ procedure g(state: pcuint32; a, b, c, d: csize_t; x, y: cuint32); inline; begin state[a] := state[a] + state[b] + x; state[d] := RorDWord(state[d] xor state[a], 16); state[c] := state[c] + state[d]; state[b] := RorDWord(state[b] xor state[c], 12); state[a] := state[a] + state[b] + y; state[d] := RorDWord(state[d] xor state[a], 8); state[c] := state[c] + state[d]; state[b] := RorDWord(state[b] xor state[c], 7); end; procedure round_fn(state: pcuint32; const msg: pcuint32; round: csize_t); inline; var schedule: pcuint8; begin // Select the message schedule based on the round. schedule := MSG_SCHEDULE[round]; // Mix the columns. g(state, 0, 4, 8, 12, msg[schedule[0]], msg[schedule[1]]); g(state, 1, 5, 9, 13, msg[schedule[2]], msg[schedule[3]]); g(state, 2, 6, 10, 14, msg[schedule[4]], msg[schedule[5]]); g(state, 3, 7, 11, 15, msg[schedule[6]], msg[schedule[7]]); // Mix the rows. g(state, 0, 5, 10, 15, msg[schedule[8]], msg[schedule[9]]); g(state, 1, 6, 11, 12, msg[schedule[10]], msg[schedule[11]]); g(state, 2, 7, 8, 13, msg[schedule[12]], msg[schedule[13]]); g(state, 3, 4, 9, 14, msg[schedule[14]], msg[schedule[15]]); end; procedure compress_pre(state: pcuint32; const cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8); inline; var block_words: array[0..15] of cuint32; begin block_words[0] := load32(block + 4 * 0); block_words[1] := load32(block + 4 * 1); block_words[2] := load32(block + 4 * 2); block_words[3] := load32(block + 4 * 3); block_words[4] := load32(block + 4 * 4); block_words[5] := load32(block + 4 * 5); block_words[6] := load32(block + 4 * 6); block_words[7] := load32(block + 4 * 7); block_words[8] := load32(block + 4 * 8); block_words[9] := load32(block + 4 * 9); block_words[10] := load32(block + 4 * 10); block_words[11] := load32(block + 4 * 11); block_words[12] := load32(block + 4 * 12); block_words[13] := load32(block + 4 * 13); block_words[14] := load32(block + 4 * 14); block_words[15] := load32(block + 4 * 15); state[0] := cv[0]; state[1] := cv[1]; state[2] := cv[2]; state[3] := cv[3]; state[4] := cv[4]; state[5] := cv[5]; state[6] := cv[6]; state[7] := cv[7]; state[8] := BLAKE3_IV[0]; state[9] := BLAKE3_IV[1]; state[10] := BLAKE3_IV[2]; state[11] := BLAKE3_IV[3]; state[12] := Int64Rec(counter).Lo; state[13] := Int64Rec(counter).Hi; state[14] := cuint32(block_len); state[15] := cuint32(flags); round_fn(state, @block_words[0], 0); round_fn(state, @block_words[0], 1); round_fn(state, @block_words[0], 2); round_fn(state, @block_words[0], 3); round_fn(state, @block_words[0], 4); round_fn(state, @block_words[0], 5); round_fn(state, @block_words[0], 6); end; procedure blake3_compress_in_place_portable(cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8); var state: array[0..15] of cuint32; begin compress_pre(state, cv, block, block_len, counter, flags); cv[0] := state[0] xor state[8]; cv[1] := state[1] xor state[9]; cv[2] := state[2] xor state[10]; cv[3] := state[3] xor state[11]; cv[4] := state[4] xor state[12]; cv[5] := state[5] xor state[13]; cv[6] := state[6] xor state[14]; cv[7] := state[7] xor state[15]; end; procedure blake3_compress_xof_portable(const cv: pcuint32; const block: pcuint8; block_len: cuint8; counter: cuint64; flags: cuint8; out_: pcuint8); var state: array[0..15] of cuint32; begin compress_pre(state, cv, block, block_len, counter, flags); store32(@out_[0 * 4], state[0] xor state[8]); store32(@out_[1 * 4], state[1] xor state[9]); store32(@out_[2 * 4], state[2] xor state[10]); store32(@out_[3 * 4], state[3] xor state[11]); store32(@out_[4 * 4], state[4] xor state[12]); store32(@out_[5 * 4], state[5] xor state[13]); store32(@out_[6 * 4], state[6] xor state[14]); store32(@out_[7 * 4], state[7] xor state[15]); store32(@out_[8 * 4], state[8] xor cv[0]); store32(@out_[9 * 4], state[9] xor cv[1]); store32(@out_[10 * 4], state[10] xor cv[2]); store32(@out_[11 * 4], state[11] xor cv[3]); store32(@out_[12 * 4], state[12] xor cv[4]); store32(@out_[13 * 4], state[13] xor cv[5]); store32(@out_[14 * 4], state[14] xor cv[6]); store32(@out_[15 * 4], state[15] xor cv[7]); end; procedure hash_one_portable(input: pcuint8; blocks: csize_t; const key: pcuint32; counter: cuint64; flags: uint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); inline; var block_flags: cuint8; cv: array[0..7] of cuint32; begin Move(key^, cv[0], BLAKE3_KEY_LEN); block_flags := flags or flags_start; while (blocks > 0) do begin if (blocks = 1) then begin block_flags := block_flags or flags_end; end; blake3_compress_in_place_portable(cv, input, BLAKE3_BLOCK_LEN, counter, block_flags); input := @input[BLAKE3_BLOCK_LEN]; blocks -= 1; block_flags := flags; end; store_cv_words(out_, cv); end; procedure blake3_hash_many_portable(inputs: ppcuint8; num_inputs: csize_t; blocks: csize_t; const key: pcuint32; counter: cuint64; increment_counter: boolean32; flags: cuint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); begin while (num_inputs > 0) do begin hash_one_portable(inputs[0], blocks, key, counter, flags, flags_start, flags_end, out_); if (increment_counter) then begin counter += 1; end; inputs += 1; num_inputs -= 1; out_ := @out_[BLAKE3_OUT_LEN]; end; end; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake3_avx2.inc�����������������������������������������0000755�0001750�0000144�00000204171�15104114162�022631� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$asmmode intel} const ADD08: array[0..7] of cuint32 = (0, 1, 2, 3, 4, 5, 6, 7); ADD18: array[0..7] of cuint32 = (8, 8, 8, 8, 8, 8, 8, 8); procedure blake3_hash_many_avx2(inputs: ppcuint8; num_inputs: csize_t; blocks: csize_t; const key: pcuint32; counter: cuint64; increment_counter: boolean32; flags: cuint8; flags_start: cuint8; flags_end: cuint8; out_: pcuint8); assembler; nostackframe; asm push rbp mov rbp, rsp push r15 push r14 push r13 push r12 push rbx sub rsp, 880 and rsp, $FFFFFFFFFFFFFFC0 {$IF DEFINED(WIN64)} vmovdqa xmmword ptr [rsp+$2D0], xmm6 vmovdqa xmmword ptr [rsp+$2E0], xmm7 vmovdqa xmmword ptr [rsp+$2F0], xmm8 vmovdqa xmmword ptr [rsp+$300], xmm9 vmovdqa xmmword ptr [rsp+$310], xmm10 vmovdqa xmmword ptr [rsp+$320], xmm11 vmovdqa xmmword ptr [rsp+$330], xmm12 vmovdqa xmmword ptr [rsp+$340], xmm13 vmovdqa xmmword ptr [rsp+$350], xmm14 vmovdqa xmmword ptr [rsp+$360], xmm15 mov qword ptr [rbp+16], rsi mov qword ptr [rbp+24], rdi mov rdi, rcx mov rsi, rdx mov rdx, r8 mov rcx, r9 mov r8, qword ptr [counter] mov r9, dword ptr [increment_counter] {$ENDIF} neg r9d vmovd xmm0, r9d vpbroadcastd ymm0, xmm0 vmovdqa ymmword ptr [rsp+$260], ymm0 vpand ymm1, ymm0, ymmword ptr [ADD08+rip] vpand ymm2, ymm0, ymmword ptr [ADD18+rip] vmovdqa ymmword ptr [rsp+$2A0], ymm2 vmovd xmm2, r8d vpbroadcastd ymm2, xmm2 vpaddd ymm2, ymm2, ymm1 vmovdqa ymmword ptr [rsp+$220], ymm2 vpxor ymm1, ymm1, ymmword ptr [CMP_MSB_MASK+rip] vpxor ymm2, ymm2, ymmword ptr [CMP_MSB_MASK+rip] vpcmpgtd ymm2, ymm1, ymm2 shr r8, 32 vmovd xmm3, r8d vpbroadcastd ymm3, xmm3 vpsubd ymm3, ymm3, ymm2 vmovdqa ymmword ptr [rsp+$240], ymm3 shl rdx, 6 mov qword ptr [rsp+$2C0], rdx cmp rsi, 8 jc @L03L03 @L00L02: vpbroadcastd ymm0, dword ptr [rcx] vpbroadcastd ymm1, dword ptr [rcx+$4] vpbroadcastd ymm2, dword ptr [rcx+$8] vpbroadcastd ymm3, dword ptr [rcx+$C] vpbroadcastd ymm4, dword ptr [rcx+$10] vpbroadcastd ymm5, dword ptr [rcx+$14] vpbroadcastd ymm6, dword ptr [rcx+$18] vpbroadcastd ymm7, dword ptr [rcx+$1C] mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] mov r10, qword ptr [rdi+$10] mov r11, qword ptr [rdi+$18] mov r12, qword ptr [rdi+$20] mov r13, qword ptr [rdi+$28] mov r14, qword ptr [rdi+$30] mov r15, qword ptr [rdi+$38] movzx eax, byte ptr [flags] movzx ebx, byte ptr [flags_start] or eax, ebx xor edx, edx @L01L09: movzx ebx, byte ptr [flags_end] or ebx, eax add rdx, 64 cmp rdx, qword ptr [rsp+$2C0] cmove eax, ebx mov dword ptr [rsp+$200], eax vmovups xmm8, xmmword ptr [r8+rdx-$40] vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-$40], $01 vmovups xmm9, xmmword ptr [r9+rdx-$40] vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-$40], $01 vunpcklpd ymm12, ymm8, ymm9 vunpckhpd ymm13, ymm8, ymm9 vmovups xmm10, xmmword ptr [r10+rdx-$40] vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-$40], $01 vmovups xmm11, xmmword ptr [r11+rdx-$40] vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-$40], $01 vunpcklpd ymm14, ymm10, ymm11 vunpckhpd ymm15, ymm10, ymm11 vshufps ymm8, ymm12, ymm14, 136 vmovaps ymmword ptr [rsp], ymm8 vshufps ymm9, ymm12, ymm14, 221 vmovaps ymmword ptr [rsp+$20], ymm9 vshufps ymm10, ymm13, ymm15, 136 vmovaps ymmword ptr [rsp+$40], ymm10 vshufps ymm11, ymm13, ymm15, 221 vmovaps ymmword ptr [rsp+$60], ymm11 vmovups xmm8, xmmword ptr [r8+rdx-$30] vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-$30], $01 vmovups xmm9, xmmword ptr [r9+rdx-$30] vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-$30], $01 vunpcklpd ymm12, ymm8, ymm9 vunpckhpd ymm13, ymm8, ymm9 vmovups xmm10, xmmword ptr [r10+rdx-$30] vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-$30], $01 vmovups xmm11, xmmword ptr [r11+rdx-$30] vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-$30], $01 vunpcklpd ymm14, ymm10, ymm11 vunpckhpd ymm15, ymm10, ymm11 vshufps ymm8, ymm12, ymm14, 136 vmovaps ymmword ptr [rsp+$80], ymm8 vshufps ymm9, ymm12, ymm14, 221 vmovaps ymmword ptr [rsp+$A0], ymm9 vshufps ymm10, ymm13, ymm15, 136 vmovaps ymmword ptr [rsp+$C0], ymm10 vshufps ymm11, ymm13, ymm15, 221 vmovaps ymmword ptr [rsp+$E0], ymm11 vmovups xmm8, xmmword ptr [r8+rdx-$20] vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-$20], $01 vmovups xmm9, xmmword ptr [r9+rdx-$20] vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-$20], $01 vunpcklpd ymm12, ymm8, ymm9 vunpckhpd ymm13, ymm8, ymm9 vmovups xmm10, xmmword ptr [r10+rdx-$20] vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-$20], $01 vmovups xmm11, xmmword ptr [r11+rdx-$20] vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-$20], $01 vunpcklpd ymm14, ymm10, ymm11 vunpckhpd ymm15, ymm10, ymm11 vshufps ymm8, ymm12, ymm14, 136 vmovaps ymmword ptr [rsp+$100], ymm8 vshufps ymm9, ymm12, ymm14, 221 vmovaps ymmword ptr [rsp+$120], ymm9 vshufps ymm10, ymm13, ymm15, 136 vmovaps ymmword ptr [rsp+$140], ymm10 vshufps ymm11, ymm13, ymm15, 221 vmovaps ymmword ptr [rsp+$160], ymm11 vmovups xmm8, xmmword ptr [r8+rdx-$10] vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-$10], $01 vmovups xmm9, xmmword ptr [r9+rdx-$10] vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-$10], $01 vunpcklpd ymm12, ymm8, ymm9 vunpckhpd ymm13, ymm8, ymm9 vmovups xmm10, xmmword ptr [r10+rdx-$10] vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-$10], $01 vmovups xmm11, xmmword ptr [r11+rdx-$10] vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-$10], $01 vunpcklpd ymm14, ymm10, ymm11 vunpckhpd ymm15, ymm10, ymm11 vshufps ymm8, ymm12, ymm14, 136 vmovaps ymmword ptr [rsp+$180], ymm8 vshufps ymm9, ymm12, ymm14, 221 vmovaps ymmword ptr [rsp+$1A0], ymm9 vshufps ymm10, ymm13, ymm15, 136 vmovaps ymmword ptr [rsp+$1C0], ymm10 vshufps ymm11, ymm13, ymm15, 221 vmovaps ymmword ptr [rsp+$1E0], ymm11 vpbroadcastd ymm15, dword ptr [rsp+$200] prefetcht0 [r8+rdx+$80] prefetcht0 [r12+rdx+$80] prefetcht0 [r9+rdx+$80] prefetcht0 [r13+rdx+$80] prefetcht0 [r10+rdx+$80] prefetcht0 [r14+rdx+$80] prefetcht0 [r11+rdx+$80] prefetcht0 [r15+rdx+$80] vpaddd ymm0, ymm0, ymmword ptr [rsp] vpaddd ymm1, ymm1, ymmword ptr [rsp+$40] vpaddd ymm2, ymm2, ymmword ptr [rsp+$80] vpaddd ymm3, ymm3, ymmword ptr [rsp+$C0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm0, ymmword ptr [rsp+$220] vpxor ymm13, ymm1, ymmword ptr [rsp+$240] vpxor ymm14, ymm2, ymmword ptr [BLAKE3_BLOCK_LEN8+rip] vpxor ymm15, ymm3, ymm15 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [BLAKE3_IV_0+rip] vpaddd ymm9, ymm13, ymmword ptr [BLAKE3_IV_1+rip] vpaddd ymm10, ymm14, ymmword ptr [BLAKE3_IV_2+rip] vpaddd ymm11, ymm15, ymmword ptr [BLAKE3_IV_3+rip] vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$20] vpaddd ymm1, ymm1, ymmword ptr [rsp+$60] vpaddd ymm2, ymm2, ymmword ptr [rsp+$A0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$E0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$100] vpaddd ymm1, ymm1, ymmword ptr [rsp+$140] vpaddd ymm2, ymm2, ymmword ptr [rsp+$180] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1C0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$120] vpaddd ymm1, ymm1, ymmword ptr [rsp+$160] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1A0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1E0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$40] vpaddd ymm1, ymm1, ymmword ptr [rsp+$60] vpaddd ymm2, ymm2, ymmword ptr [rsp+$E0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$80] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$C0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$140] vpaddd ymm2, ymm2, ymmword ptr [rsp] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1A0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$20] vpaddd ymm1, ymm1, ymmword ptr [rsp+$180] vpaddd ymm2, ymm2, ymmword ptr [rsp+$120] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1E0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$160] vpaddd ymm1, ymm1, ymmword ptr [rsp+$A0] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1C0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$100] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$60] vpaddd ymm1, ymm1, ymmword ptr [rsp+$140] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1A0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$E0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$80] vpaddd ymm1, ymm1, ymmword ptr [rsp+$180] vpaddd ymm2, ymm2, ymmword ptr [rsp+$40] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1C0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$C0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$120] vpaddd ymm2, ymm2, ymmword ptr [rsp+$160] vpaddd ymm3, ymm3, ymmword ptr [rsp+$100] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$A0] vpaddd ymm1, ymm1, ymmword ptr [rsp] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1E0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$20] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$140] vpaddd ymm1, ymm1, ymmword ptr [rsp+$180] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1C0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1A0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$E0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$120] vpaddd ymm2, ymm2, ymmword ptr [rsp+$60] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1E0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$80] vpaddd ymm1, ymm1, ymmword ptr [rsp+$160] vpaddd ymm2, ymm2, ymmword ptr [rsp+$A0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$20] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp] vpaddd ymm1, ymm1, ymmword ptr [rsp+$40] vpaddd ymm2, ymm2, ymmword ptr [rsp+$100] vpaddd ymm3, ymm3, ymmword ptr [rsp+$C0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$180] vpaddd ymm1, ymm1, ymmword ptr [rsp+$120] vpaddd ymm2, ymm2, ymmword ptr [rsp+$1E0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1C0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$1A0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$160] vpaddd ymm2, ymm2, ymmword ptr [rsp+$140] vpaddd ymm3, ymm3, ymmword ptr [rsp+$100] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$E0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$A0] vpaddd ymm2, ymm2, ymmword ptr [rsp] vpaddd ymm3, ymm3, ymmword ptr [rsp+$C0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$40] vpaddd ymm1, ymm1, ymmword ptr [rsp+$60] vpaddd ymm2, ymm2, ymmword ptr [rsp+$20] vpaddd ymm3, ymm3, ymmword ptr [rsp+$80] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$120] vpaddd ymm1, ymm1, ymmword ptr [rsp+$160] vpaddd ymm2, ymm2, ymmword ptr [rsp+$100] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1E0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$1C0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$A0] vpaddd ymm2, ymm2, ymmword ptr [rsp+$180] vpaddd ymm3, ymm3, ymmword ptr [rsp+$20] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$1A0] vpaddd ymm1, ymm1, ymmword ptr [rsp] vpaddd ymm2, ymm2, ymmword ptr [rsp+$40] vpaddd ymm3, ymm3, ymmword ptr [rsp+$80] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$60] vpaddd ymm1, ymm1, ymmword ptr [rsp+$140] vpaddd ymm2, ymm2, ymmword ptr [rsp+$C0] vpaddd ymm3, ymm3, ymmword ptr [rsp+$E0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$160] vpaddd ymm1, ymm1, ymmword ptr [rsp+$A0] vpaddd ymm2, ymm2, ymmword ptr [rsp+$20] vpaddd ymm3, ymm3, ymmword ptr [rsp+$100] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$1E0] vpaddd ymm1, ymm1, ymmword ptr [rsp] vpaddd ymm2, ymm2, ymmword ptr [rsp+$120] vpaddd ymm3, ymm3, ymmword ptr [rsp+$C0] vpaddd ymm0, ymm0, ymm4 vpaddd ymm1, ymm1, ymm5 vpaddd ymm2, ymm2, ymm6 vpaddd ymm3, ymm3, ymm7 vpxor ymm12, ymm12, ymm0 vpxor ymm13, ymm13, ymm1 vpxor ymm14, ymm14, ymm2 vpxor ymm15, ymm15, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpshufb ymm15, ymm15, ymm8 vpaddd ymm8, ymm12, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm13 vpaddd ymm10, ymm10, ymm14 vpaddd ymm11, ymm11, ymm15 vpxor ymm4, ymm4, ymm8 vpxor ymm5, ymm5, ymm9 vpxor ymm6, ymm6, ymm10 vpxor ymm7, ymm7, ymm11 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$1C0] vpaddd ymm1, ymm1, ymmword ptr [rsp+$40] vpaddd ymm2, ymm2, ymmword ptr [rsp+$60] vpaddd ymm3, ymm3, ymmword ptr [rsp+$E0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT16+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vmovdqa ymmword ptr [rsp+$200], ymm8 vpsrld ymm8, ymm5, 12 vpslld ymm5, ymm5, 20 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 12 vpslld ymm6, ymm6, 20 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 12 vpslld ymm7, ymm7, 20 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 12 vpslld ymm4, ymm4, 20 vpor ymm4, ymm4, ymm8 vpaddd ymm0, ymm0, ymmword ptr [rsp+$140] vpaddd ymm1, ymm1, ymmword ptr [rsp+$180] vpaddd ymm2, ymm2, ymmword ptr [rsp+$80] vpaddd ymm3, ymm3, ymmword ptr [rsp+$1A0] vpaddd ymm0, ymm0, ymm5 vpaddd ymm1, ymm1, ymm6 vpaddd ymm2, ymm2, ymm7 vpaddd ymm3, ymm3, ymm4 vpxor ymm15, ymm15, ymm0 vpxor ymm12, ymm12, ymm1 vpxor ymm13, ymm13, ymm2 vpxor ymm14, ymm14, ymm3 vbroadcasti128 ymm8, xmmword ptr [ROT8+rip] vpshufb ymm15, ymm15, ymm8 vpshufb ymm12, ymm12, ymm8 vpshufb ymm13, ymm13, ymm8 vpshufb ymm14, ymm14, ymm8 vpaddd ymm10, ymm10, ymm15 vpaddd ymm11, ymm11, ymm12 vpaddd ymm8, ymm13, ymmword ptr [rsp+$200] vpaddd ymm9, ymm9, ymm14 vpxor ymm5, ymm5, ymm10 vpxor ymm6, ymm6, ymm11 vpxor ymm7, ymm7, ymm8 vpxor ymm4, ymm4, ymm9 vpxor ymm0, ymm0, ymm8 vpxor ymm1, ymm1, ymm9 vpxor ymm2, ymm2, ymm10 vpxor ymm3, ymm3, ymm11 vpsrld ymm8, ymm5, 7 vpslld ymm5, ymm5, 25 vpor ymm5, ymm5, ymm8 vpsrld ymm8, ymm6, 7 vpslld ymm6, ymm6, 25 vpor ymm6, ymm6, ymm8 vpsrld ymm8, ymm7, 7 vpslld ymm7, ymm7, 25 vpor ymm7, ymm7, ymm8 vpsrld ymm8, ymm4, 7 vpslld ymm4, ymm4, 25 vpor ymm4, ymm4, ymm8 vpxor ymm4, ymm4, ymm12 vpxor ymm5, ymm5, ymm13 vpxor ymm6, ymm6, ymm14 vpxor ymm7, ymm7, ymm15 movzx eax, byte ptr [flags] jne @L01L09 mov rbx, qword ptr [out_] vunpcklps ymm8, ymm0, ymm1 vunpcklps ymm9, ymm2, ymm3 vunpckhps ymm10, ymm0, ymm1 vunpcklps ymm11, ymm4, ymm5 vunpcklps ymm0, ymm6, ymm7 vshufps ymm12, ymm8, ymm9, 78 vblendps ymm1, ymm8, ymm12, $CC vshufps ymm8, ymm11, ymm0, 78 vunpckhps ymm13, ymm2, ymm3 vblendps ymm2, ymm11, ymm8, $CC vblendps ymm3, ymm12, ymm9, $CC vperm2f128 ymm12, ymm1, ymm2, $20 vmovups ymmword ptr [rbx], ymm12 vunpckhps ymm14, ymm4, ymm5 vblendps ymm4, ymm8, ymm0, $CC vunpckhps ymm15, ymm6, ymm7 vperm2f128 ymm7, ymm3, ymm4, $20 vmovups ymmword ptr [rbx+$20], ymm7 vshufps ymm5, ymm10, ymm13, 78 vblendps ymm6, ymm5, ymm13, $CC vshufps ymm13, ymm14, ymm15, 78 vblendps ymm10, ymm10, ymm5, $CC vblendps ymm14, ymm14, ymm13, $CC vperm2f128 ymm8, ymm10, ymm14, $20 vmovups ymmword ptr [rbx+$40], ymm8 vblendps ymm15, ymm13, ymm15, $CC vperm2f128 ymm13, ymm6, ymm15, $20 vmovups ymmword ptr [rbx+$60], ymm13 vperm2f128 ymm9, ymm1, ymm2, $31 vperm2f128 ymm11, ymm3, ymm4, $31 vmovups ymmword ptr [rbx+$80], ymm9 vperm2f128 ymm14, ymm10, ymm14, $31 vperm2f128 ymm15, ymm6, ymm15, $31 vmovups ymmword ptr [rbx+$A0], ymm11 vmovups ymmword ptr [rbx+$C0], ymm14 vmovups ymmword ptr [rbx+$E0], ymm15 vmovdqa ymm0, ymmword ptr [rsp+$2A0] vpaddd ymm1, ymm0, ymmword ptr [rsp+$220] vmovdqa ymmword ptr [rsp+$220], ymm1 vpxor ymm0, ymm0, ymmword ptr [CMP_MSB_MASK+rip] vpxor ymm2, ymm1, ymmword ptr [CMP_MSB_MASK+rip] vpcmpgtd ymm2, ymm0, ymm2 vmovdqa ymm0, ymmword ptr [rsp+$240] vpsubd ymm2, ymm0, ymm2 vmovdqa ymmword ptr [rsp+$240], ymm2 add rdi, 64 add rbx, 256 mov qword ptr [out_], rbx sub rsi, 8 cmp rsi, 8 jnc @L00L02 test rsi, rsi jnz @L03L03 @L02L04: vzeroupper {$IF DEFINED(WIN64)} vmovdqa xmm6, xmmword ptr [rsp+$2D0] vmovdqa xmm7, xmmword ptr [rsp+$2E0] vmovdqa xmm8, xmmword ptr [rsp+$2F0] vmovdqa xmm9, xmmword ptr [rsp+$300] vmovdqa xmm10, xmmword ptr [rsp+$310] vmovdqa xmm11, xmmword ptr [rsp+$320] vmovdqa xmm12, xmmword ptr [rsp+$330] vmovdqa xmm13, xmmword ptr [rsp+$340] vmovdqa xmm14, xmmword ptr [rsp+$350] vmovdqa xmm15, xmmword ptr [rsp+$360] mov rdi, qword ptr [rbp+24] mov rsi, qword ptr [rbp+16] {$ENDIF} mov rsp, rbp sub rsp, 40 pop rbx pop r12 pop r13 pop r14 pop r15 mov rsp, rbp pop rbp ret @L03L03: mov rbx, qword ptr [out_] mov r15, qword ptr [rsp+$2C0] movzx r13d, byte ptr [flags] movzx r12d, byte ptr [flags_end] test rsi, $4 je @L07L03 vbroadcasti128 ymm0, xmmword ptr [rcx] vbroadcasti128 ymm1, xmmword ptr [rcx+$10] vmovdqa ymm8, ymm0 vmovdqa ymm9, ymm1 vbroadcasti128 ymm12, xmmword ptr [rsp+$220] vbroadcasti128 ymm13, xmmword ptr [rsp+$240] vpunpckldq ymm14, ymm12, ymm13 vpunpckhdq ymm15, ymm12, ymm13 vpermq ymm14, ymm14, $50 vpermq ymm15, ymm15, $50 vbroadcasti128 ymm12, xmmword ptr [BLAKE3_BLOCK_LEN8+rip] vpblendd ymm14, ymm14, ymm12, $44 vpblendd ymm15, ymm15, ymm12, $44 vmovdqa ymmword ptr [rsp], ymm14 vmovdqa ymmword ptr [rsp+$20], ymm15 mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] mov r10, qword ptr [rdi+$10] mov r11, qword ptr [rdi+$18] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L04L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d mov dword ptr [rsp+$200], eax vmovups ymm2, ymmword ptr [r8+rdx-$40] vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-$40], $01 vmovups ymm3, ymmword ptr [r8+rdx-$30] vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-$30], $01 vshufps ymm4, ymm2, ymm3, 136 vshufps ymm5, ymm2, ymm3, 221 vmovups ymm2, ymmword ptr [r8+rdx-$20] vinsertf128 ymm2, ymm2, xmmword ptr [r9+rdx-$20], $01 vmovups ymm3, ymmword ptr [r8+rdx-$10] vinsertf128 ymm3, ymm3, xmmword ptr [r9+rdx-$10], $01 vshufps ymm6, ymm2, ymm3, 136 vshufps ymm7, ymm2, ymm3, 221 vpshufd ymm6, ymm6, $93 vpshufd ymm7, ymm7, $93 vmovups ymm10, ymmword ptr [r10+rdx-$40] vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-$40], $01 vmovups ymm11, ymmword ptr [r10+rdx-$30] vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-$30], $01 vshufps ymm12, ymm10, ymm11, 136 vshufps ymm13, ymm10, ymm11, 221 vmovups ymm10, ymmword ptr [r10+rdx-$20] vinsertf128 ymm10, ymm10, xmmword ptr [r11+rdx-$20], $01 vmovups ymm11, ymmword ptr [r10+rdx-$10] vinsertf128 ymm11, ymm11, xmmword ptr [r11+rdx-$10], $01 vshufps ymm14, ymm10, ymm11, 136 vshufps ymm15, ymm10, ymm11, 221 vpshufd ymm14, ymm14, $93 vpshufd ymm15, ymm15, $93 prefetcht0 [r8+rdx+$80] prefetcht0 [r9+rdx+$80] prefetcht0 [r10+rdx+$80] prefetcht0 [r11+rdx+$80] vpbroadcastd ymm2, dword ptr [rsp+$200] vmovdqa ymm3, ymmword ptr [rsp] vmovdqa ymm11, ymmword ptr [rsp+$20] vpblendd ymm3, ymm3, ymm2, $88 vpblendd ymm11, ymm11, ymm2, $88 vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip] vmovdqa ymm10, ymm2 mov al, 7 @L05L09: vpaddd ymm0, ymm0, ymm4 vpaddd ymm8, ymm8, ymm12 vmovdqa ymmword ptr [rsp+$40], ymm4 nop vmovdqa ymmword ptr [rsp+$60], ymm12 nop vpaddd ymm0, ymm0, ymm1 vpaddd ymm8, ymm8, ymm9 vpxor ymm3, ymm3, ymm0 vpxor ymm11, ymm11, ymm8 vbroadcasti128 ymm4, xmmword ptr [ROT16+rip] vpshufb ymm3, ymm3, ymm4 vpshufb ymm11, ymm11, ymm4 vpaddd ymm2, ymm2, ymm3 vpaddd ymm10, ymm10, ymm11 vpxor ymm1, ymm1, ymm2 vpxor ymm9, ymm9, ymm10 vpsrld ymm4, ymm1, 12 vpslld ymm1, ymm1, 20 vpor ymm1, ymm1, ymm4 vpsrld ymm4, ymm9, 12 vpslld ymm9, ymm9, 20 vpor ymm9, ymm9, ymm4 vpaddd ymm0, ymm0, ymm5 vpaddd ymm8, ymm8, ymm13 vpaddd ymm0, ymm0, ymm1 vpaddd ymm8, ymm8, ymm9 vmovdqa ymmword ptr [rsp+$80], ymm5 vmovdqa ymmword ptr [rsp+$A0], ymm13 vpxor ymm3, ymm3, ymm0 vpxor ymm11, ymm11, ymm8 vbroadcasti128 ymm4, xmmword ptr [ROT8+rip] vpshufb ymm3, ymm3, ymm4 vpshufb ymm11, ymm11, ymm4 vpaddd ymm2, ymm2, ymm3 vpaddd ymm10, ymm10, ymm11 vpxor ymm1, ymm1, ymm2 vpxor ymm9, ymm9, ymm10 vpsrld ymm4, ymm1, 7 vpslld ymm1, ymm1, 25 vpor ymm1, ymm1, ymm4 vpsrld ymm4, ymm9, 7 vpslld ymm9, ymm9, 25 vpor ymm9, ymm9, ymm4 vpshufd ymm0, ymm0, $93 vpshufd ymm8, ymm8, $93 vpshufd ymm3, ymm3, $4E vpshufd ymm11, ymm11, $4E vpshufd ymm2, ymm2, $39 vpshufd ymm10, ymm10, $39 vpaddd ymm0, ymm0, ymm6 vpaddd ymm8, ymm8, ymm14 vpaddd ymm0, ymm0, ymm1 vpaddd ymm8, ymm8, ymm9 vpxor ymm3, ymm3, ymm0 vpxor ymm11, ymm11, ymm8 vbroadcasti128 ymm4, xmmword ptr [ROT16+rip] vpshufb ymm3, ymm3, ymm4 vpshufb ymm11, ymm11, ymm4 vpaddd ymm2, ymm2, ymm3 vpaddd ymm10, ymm10, ymm11 vpxor ymm1, ymm1, ymm2 vpxor ymm9, ymm9, ymm10 vpsrld ymm4, ymm1, 12 vpslld ymm1, ymm1, 20 vpor ymm1, ymm1, ymm4 vpsrld ymm4, ymm9, 12 vpslld ymm9, ymm9, 20 vpor ymm9, ymm9, ymm4 vpaddd ymm0, ymm0, ymm7 vpaddd ymm8, ymm8, ymm15 vpaddd ymm0, ymm0, ymm1 vpaddd ymm8, ymm8, ymm9 vpxor ymm3, ymm3, ymm0 vpxor ymm11, ymm11, ymm8 vbroadcasti128 ymm4, xmmword ptr [ROT8+rip] vpshufb ymm3, ymm3, ymm4 vpshufb ymm11, ymm11, ymm4 vpaddd ymm2, ymm2, ymm3 vpaddd ymm10, ymm10, ymm11 vpxor ymm1, ymm1, ymm2 vpxor ymm9, ymm9, ymm10 vpsrld ymm4, ymm1, 7 vpslld ymm1, ymm1, 25 vpor ymm1, ymm1, ymm4 vpsrld ymm4, ymm9, 7 vpslld ymm9, ymm9, 25 vpor ymm9, ymm9, ymm4 vpshufd ymm0, ymm0, $39 vpshufd ymm8, ymm8, $39 vpshufd ymm3, ymm3, $4E vpshufd ymm11, ymm11, $4E vpshufd ymm2, ymm2, $93 vpshufd ymm10, ymm10, $93 dec al je @L06L09 vmovdqa ymm4, ymmword ptr [rsp+$40] vmovdqa ymm5, ymmword ptr [rsp+$80] vshufps ymm12, ymm4, ymm5, 214 vpshufd ymm13, ymm4, $0F vpshufd ymm4, ymm12, $39 vshufps ymm12, ymm6, ymm7, 250 vpblendd ymm13, ymm13, ymm12, $AA vpunpcklqdq ymm12, ymm7, ymm5 vpblendd ymm12, ymm12, ymm6, $88 vpshufd ymm12, ymm12, $78 vpunpckhdq ymm5, ymm5, ymm7 vpunpckldq ymm6, ymm6, ymm5 vpshufd ymm7, ymm6, $1E vmovdqa ymmword ptr [rsp+$40], ymm13 vmovdqa ymmword ptr [rsp+$80], ymm12 vmovdqa ymm12, ymmword ptr [rsp+$60] vmovdqa ymm13, ymmword ptr [rsp+$A0] vshufps ymm5, ymm12, ymm13, 214 vpshufd ymm6, ymm12, $0F vpshufd ymm12, ymm5, $39 vshufps ymm5, ymm14, ymm15, 250 vpblendd ymm6, ymm6, ymm5, $AA vpunpcklqdq ymm5, ymm15, ymm13 vpblendd ymm5, ymm5, ymm14, $88 vpshufd ymm5, ymm5, $78 vpunpckhdq ymm13, ymm13, ymm15 vpunpckldq ymm14, ymm14, ymm13 vpshufd ymm15, ymm14, $1E vmovdqa ymm13, ymm6 vmovdqa ymm14, ymm5 vmovdqa ymm5, ymmword ptr [rsp+$40] vmovdqa ymm6, ymmword ptr [rsp+$80] jmp @L05L09 @L06L09: vpxor ymm0, ymm0, ymm2 vpxor ymm1, ymm1, ymm3 vpxor ymm8, ymm8, ymm10 vpxor ymm9, ymm9, ymm11 mov eax, r13d cmp rdx, r15 jne @L04L02 vmovdqu xmmword ptr [rbx], xmm0 vmovdqu xmmword ptr [rbx+$10], xmm1 vextracti128 xmmword ptr [rbx+$20], ymm0, $01 vextracti128 xmmword ptr [rbx+$30], ymm1, $01 vmovdqu xmmword ptr [rbx+$40], xmm8 vmovdqu xmmword ptr [rbx+$50], xmm9 vextracti128 xmmword ptr [rbx+$60], ymm8, $01 vextracti128 xmmword ptr [rbx+$70], ymm9, $01 vmovaps xmm8, xmmword ptr [rsp+$260] vmovaps xmm0, xmmword ptr [rsp+$220] vmovaps xmm1, xmmword ptr [rsp+$230] vmovaps xmm2, xmmword ptr [rsp+$240] vmovaps xmm3, xmmword ptr [rsp+$250] vblendvps xmm0, xmm0, xmm1, xmm8 vblendvps xmm2, xmm2, xmm3, xmm8 vmovaps xmmword ptr [rsp+$220], xmm0 vmovaps xmmword ptr [rsp+$240], xmm2 add rbx, 128 add rdi, 32 sub rsi, 4 @L07L03: test rsi, $2 je @L0BL03 vbroadcasti128 ymm0, xmmword ptr [rcx] vbroadcasti128 ymm1, xmmword ptr [rcx+$10] vmovd xmm13, dword ptr [rsp+$220] vpinsrd xmm13, xmm13, dword ptr [rsp+$240], 1 vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 vmovd xmm14, dword ptr [rsp+$224] vpinsrd xmm14, xmm14, dword ptr [rsp+$244], 1 vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 vinserti128 ymm13, ymm13, xmm14, $01 vbroadcasti128 ymm14, xmmword ptr [ROT16+rip] vbroadcasti128 ymm15, xmmword ptr [ROT8+rip] mov r8, qword ptr [rdi] mov r9, qword ptr [rdi+$8] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L08L02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d mov dword ptr [rsp+$200], eax vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip] vpbroadcastd ymm8, dword ptr [rsp+$200] vpblendd ymm3, ymm13, ymm8, $88 vmovups ymm8, ymmword ptr [r8+rdx-$40] vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-$40], $01 vmovups ymm9, ymmword ptr [r8+rdx-$30] vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-$30], $01 vshufps ymm4, ymm8, ymm9, 136 vshufps ymm5, ymm8, ymm9, 221 vmovups ymm8, ymmword ptr [r8+rdx-$20] vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-$20], $01 vmovups ymm9, ymmword ptr [r8+rdx-$10] vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-$10], $01 vshufps ymm6, ymm8, ymm9, 136 vshufps ymm7, ymm8, ymm9, 221 vpshufd ymm6, ymm6, $93 vpshufd ymm7, ymm7, $93 mov al, 7 @L09L09: vpaddd ymm0, ymm0, ymm4 vpaddd ymm0, ymm0, ymm1 vpxor ymm3, ymm3, ymm0 vpshufb ymm3, ymm3, ymm14 vpaddd ymm2, ymm2, ymm3 vpxor ymm1, ymm1, ymm2 vpsrld ymm8, ymm1, 12 vpslld ymm1, ymm1, 20 vpor ymm1, ymm1, ymm8 vpaddd ymm0, ymm0, ymm5 vpaddd ymm0, ymm0, ymm1 vpxor ymm3, ymm3, ymm0 vpshufb ymm3, ymm3, ymm15 vpaddd ymm2, ymm2, ymm3 vpxor ymm1, ymm1, ymm2 vpsrld ymm8, ymm1, 7 vpslld ymm1, ymm1, 25 vpor ymm1, ymm1, ymm8 vpshufd ymm0, ymm0, $93 vpshufd ymm3, ymm3, $4E vpshufd ymm2, ymm2, $39 vpaddd ymm0, ymm0, ymm6 vpaddd ymm0, ymm0, ymm1 vpxor ymm3, ymm3, ymm0 vpshufb ymm3, ymm3, ymm14 vpaddd ymm2, ymm2, ymm3 vpxor ymm1, ymm1, ymm2 vpsrld ymm8, ymm1, 12 vpslld ymm1, ymm1, 20 vpor ymm1, ymm1, ymm8 vpaddd ymm0, ymm0, ymm7 vpaddd ymm0, ymm0, ymm1 vpxor ymm3, ymm3, ymm0 vpshufb ymm3, ymm3, ymm15 vpaddd ymm2, ymm2, ymm3 vpxor ymm1, ymm1, ymm2 vpsrld ymm8, ymm1, 7 vpslld ymm1, ymm1, 25 vpor ymm1, ymm1, ymm8 vpshufd ymm0, ymm0, $39 vpshufd ymm3, ymm3, $4E vpshufd ymm2, ymm2, $93 dec al jz @L0AL09 vshufps ymm8, ymm4, ymm5, 214 vpshufd ymm9, ymm4, $0F vpshufd ymm4, ymm8, $39 vshufps ymm8, ymm6, ymm7, 250 vpblendd ymm9, ymm9, ymm8, $AA vpunpcklqdq ymm8, ymm7, ymm5 vpblendd ymm8, ymm8, ymm6, $88 vpshufd ymm8, ymm8, $78 vpunpckhdq ymm5, ymm5, ymm7 vpunpckldq ymm6, ymm6, ymm5 vpshufd ymm7, ymm6, $1E vmovdqa ymm5, ymm9 vmovdqa ymm6, ymm8 jmp @L09L09 @L0AL09: vpxor ymm0, ymm0, ymm2 vpxor ymm1, ymm1, ymm3 mov eax, r13d cmp rdx, r15 jne @L08L02 vmovdqu xmmword ptr [rbx], xmm0 vmovdqu xmmword ptr [rbx+$10], xmm1 vextracti128 xmmword ptr [rbx+$20], ymm0, $01 vextracti128 xmmword ptr [rbx+$30], ymm1, $01 vmovaps ymm8, ymmword ptr [rsp+$260] vmovaps ymm0, ymmword ptr [rsp+$220] vmovups ymm1, ymmword ptr [rsp+$228] vmovaps ymm2, ymmword ptr [rsp+$240] vmovups ymm3, ymmword ptr [rsp+$248] vblendvps ymm0, ymm0, ymm1, ymm8 vblendvps ymm2, ymm2, ymm3, ymm8 vmovaps ymmword ptr [rsp+$220], ymm0 vmovaps ymmword ptr [rsp+$240], ymm2 add rbx, 64 add rdi, 16 sub rsi, 2 @L0BL03: test rsi, $1 je @L02L04 vmovdqu xmm0, xmmword ptr [rcx] vmovdqu xmm1, xmmword ptr [rcx+$10] vmovd xmm3, dword ptr [rsp+$220] vpinsrd xmm3, xmm3, dword ptr [rsp+$240], 1 vpinsrd xmm13, xmm3, dword ptr [BLAKE3_BLOCK_LEN8+rip], 2 vmovdqa xmm14, xmmword ptr [ROT16+rip] vmovdqa xmm15, xmmword ptr [ROT8+rip] mov r8, qword ptr [rdi] movzx eax, byte ptr [flags_start] or eax, r13d xor edx, edx @L0CL02: mov r14d, eax or eax, r12d add rdx, 64 cmp rdx, r15 cmovne eax, r14d vmovdqa xmm2, xmmword ptr [BLAKE3_IV+rip] vmovdqa xmm3, xmm13 vpinsrd xmm3, xmm3, eax, 3 vmovups xmm8, xmmword ptr [r8+rdx-$40] vmovups xmm9, xmmword ptr [r8+rdx-$30] vshufps xmm4, xmm8, xmm9, 136 vshufps xmm5, xmm8, xmm9, 221 vmovups xmm8, xmmword ptr [r8+rdx-$20] vmovups xmm9, xmmword ptr [r8+rdx-$10] vshufps xmm6, xmm8, xmm9, 136 vshufps xmm7, xmm8, xmm9, 221 vpshufd xmm6, xmm6, $93 vpshufd xmm7, xmm7, $93 mov al, 7 @L0DL09: vpaddd xmm0, xmm0, xmm4 vpaddd xmm0, xmm0, xmm1 vpxor xmm3, xmm3, xmm0 vpshufb xmm3, xmm3, xmm14 vpaddd xmm2, xmm2, xmm3 vpxor xmm1, xmm1, xmm2 vpsrld xmm8, xmm1, 12 vpslld xmm1, xmm1, 20 vpor xmm1, xmm1, xmm8 vpaddd xmm0, xmm0, xmm5 vpaddd xmm0, xmm0, xmm1 vpxor xmm3, xmm3, xmm0 vpshufb xmm3, xmm3, xmm15 vpaddd xmm2, xmm2, xmm3 vpxor xmm1, xmm1, xmm2 vpsrld xmm8, xmm1, 7 vpslld xmm1, xmm1, 25 vpor xmm1, xmm1, xmm8 vpshufd xmm0, xmm0, $93 vpshufd xmm3, xmm3, $4E vpshufd xmm2, xmm2, $39 vpaddd xmm0, xmm0, xmm6 vpaddd xmm0, xmm0, xmm1 vpxor xmm3, xmm3, xmm0 vpshufb xmm3, xmm3, xmm14 vpaddd xmm2, xmm2, xmm3 vpxor xmm1, xmm1, xmm2 vpsrld xmm8, xmm1, 12 vpslld xmm1, xmm1, 20 vpor xmm1, xmm1, xmm8 vpaddd xmm0, xmm0, xmm7 vpaddd xmm0, xmm0, xmm1 vpxor xmm3, xmm3, xmm0 vpshufb xmm3, xmm3, xmm15 vpaddd xmm2, xmm2, xmm3 vpxor xmm1, xmm1, xmm2 vpsrld xmm8, xmm1, 7 vpslld xmm1, xmm1, 25 vpor xmm1, xmm1, xmm8 vpshufd xmm0, xmm0, $39 vpshufd xmm3, xmm3, $4E vpshufd xmm2, xmm2, $93 dec al jz @L0EL09 vshufps xmm8, xmm4, xmm5, 214 vpshufd xmm9, xmm4, $0F vpshufd xmm4, xmm8, $39 vshufps xmm8, xmm6, xmm7, 250 vpblendd xmm9, xmm9, xmm8, $AA vpunpcklqdq xmm8, xmm7, xmm5 vpblendd xmm8, xmm8, xmm6, $88 vpshufd xmm8, xmm8, $78 vpunpckhdq xmm5, xmm5, xmm7 vpunpckldq xmm6, xmm6, xmm5 vpshufd xmm7, xmm6, $1E vmovdqa xmm5, xmm9 vmovdqa xmm6, xmm8 jmp @L0DL09 @L0EL09: vpxor xmm0, xmm0, xmm2 vpxor xmm1, xmm1, xmm3 mov eax, r13d cmp rdx, r15 jne @L0CL02 vmovdqu xmmword ptr [rbx], xmm0 vmovdqu xmmword ptr [rbx+$10], xmm1 jmp @L02L04 end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake2_sse.inc������������������������������������������0000644�0001750�0000144�00000201574�15104114162�022543� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Implementations of BLAKE2b, BLAKE2s, optimized for speed on CPUs supporting SSE2 } const blake2s_IV_2: array[0..3] of cuint32 = ( $510E527F, $9B05688C, $1F83D9AB, $5BE0CD19 ); blake2b_IV_2: array[0..1] of cint64 = ( $3c6ef372fe94f82b, $a54ff53a5f1d36f1 ); blake2b_IV_3: array[0..1] of cint64 = ( $510e527fade682d1, $9b05688c2b3e6c1f ); blake2b_IV_4: array[0..1] of cint64 = ( $1f83d9abfb41bd6b, $5be0cd19137e2179 ); function blake2s_compress_sse( S: Pblake2s_state; const block: pcuint8 ): cint; assembler; nostackframe; asm {$IF DEFINED(WINDOWS)} pushq %rdi pushq %rsi {$ELSE IF DEFINED(UNIX)} pushq %rcx movq %rdi, %rcx pushq %rdx movq %rsi, %rdx {$ENDIF} pushq %r15 pushq %r14 pushq %r12 pushq %rbp pushq %rbx subq $208, %rsp movaps %xmm6, 48(%rsp) movaps %xmm7, 64(%rsp) movaps %xmm8, 80(%rsp) movaps %xmm9, 96(%rsp) movaps %xmm10, 112(%rsp) movaps %xmm11, 128(%rsp) movaps %xmm12, 144(%rsp) movaps %xmm13, 160(%rsp) movaps %xmm14, 176(%rsp) movaps %xmm15, 192(%rsp) movdqu blake2s_IV(%rip), %xmm5 movdqu (%rcx), %xmm0 movl 16(%rdx), %ebx movdqa %xmm0, %xmm14 movdqu 16(%rcx), %xmm0 movd (%rdx), %xmm4 movdqa %xmm0, %xmm13 movd 8(%rdx), %xmm1 movaps %xmm14, (%rsp) movd 24(%rdx), %xmm7 movdqa %xmm13, %xmm15 paddd (%rsp), %xmm15 movd %ebx, %xmm12 movdqu 32(%rcx), %xmm2 movdqa %xmm4, %xmm14 movaps %xmm13, 16(%rsp) punpckldq %xmm7, %xmm12 punpckldq %xmm1, %xmm14 punpcklqdq %xmm12, %xmm14 movdqu blake2s_IV_2(%rip), %xmm0 paddd %xmm15, %xmm14 movl 12(%rdx), %eax pxor %xmm2, %xmm0 pxor %xmm14, %xmm0 movdqa %xmm0, %xmm12 movl 20(%rdx), %r9d pslld $16, %xmm12 movd 4(%rdx), %xmm11 movdqa %xmm13, %xmm2 movdqa %xmm14, %xmm15 psrld $16, %xmm0 movd 28(%rdx), %xmm10 pxor %xmm12, %xmm0 paddd %xmm0, %xmm5 movd %eax, %xmm13 movdqa %xmm11, %xmm14 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 movl 56(%rdx), %edi pslld $20, %xmm12 punpckldq %xmm13, %xmm14 movdqa %xmm14, %xmm13 movl 32(%rdx), %r11d pxor %xmm12, %xmm2 movd %r9d, %xmm12 paddd %xmm2, %xmm15 movl 40(%rdx), %r10d punpckldq %xmm10, %xmm12 punpcklqdq %xmm12, %xmm13 paddd %xmm15, %xmm13 movd 48(%rdx), %xmm6 pxor %xmm13, %xmm0 movdqa %xmm0, %xmm12 movl 60(%rdx), %ebp psrld $8, %xmm0 pslld $24, %xmm12 movdqa %xmm6, %xmm15 movd 36(%rdx), %xmm3 pxor %xmm12, %xmm0 paddd %xmm0, %xmm5 movd 52(%rdx), %xmm9 pshufd $147, %xmm0, %xmm0 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 movd 44(%rdx), %xmm8 pslld $25, %xmm12 pshufd $78, %xmm5, %xmm5 pxor %xmm12, %xmm2 movd %edi, %xmm12 pshufd $57, %xmm2, %xmm2 punpckldq %xmm12, %xmm15 movd %r11d, %xmm12 movq %xmm15, %rdx movd %r10d, %xmm15 punpckldq %xmm15, %xmm12 movq %rdx, %xmm15 punpcklqdq %xmm15, %xmm12 paddd %xmm2, %xmm12 movdqa %xmm9, %xmm15 paddd %xmm13, %xmm12 movd %ebx, %xmm13 movdqa %xmm12, %xmm14 pxor %xmm12, %xmm0 movdqa %xmm0, %xmm12 pslld $16, %xmm12 psrld $16, %xmm0 pxor %xmm12, %xmm0 paddd %xmm0, %xmm5 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movd %ebp, %xmm12 punpckldq %xmm12, %xmm15 movdqa %xmm3, %xmm12 punpckldq %xmm8, %xmm12 punpcklqdq %xmm15, %xmm12 paddd %xmm2, %xmm12 paddd %xmm14, %xmm12 pxor %xmm12, %xmm0 movdqa %xmm0, %xmm15 psrld $8, %xmm0 pslld $24, %xmm15 pxor %xmm15, %xmm0 paddd %xmm0, %xmm5 pshufd $57, %xmm0, %xmm14 movdqa %xmm3, %xmm0 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm15 psrld $7, %xmm2 punpckldq %xmm9, %xmm0 pslld $25, %xmm15 pshufd $78, %xmm5, %xmm5 pxor %xmm15, %xmm2 movd %edi, %xmm15 pshufd $147, %xmm2, %xmm2 punpckldq %xmm13, %xmm15 movdqa %xmm15, %xmm13 movq %xmm15, %r14 punpcklqdq %xmm0, %xmm13 movdqa %xmm13, %xmm0 paddd %xmm2, %xmm0 paddd %xmm0, %xmm12 movdqa %xmm14, %xmm0 pxor %xmm12, %xmm0 movdqa %xmm0, %xmm15 pslld $16, %xmm15 movdqa %xmm15, %xmm13 movdqa %xmm0, %xmm15 psrld $16, %xmm15 movdqa %xmm15, %xmm14 movd %r10d, %xmm15 pxor %xmm13, %xmm14 paddd %xmm14, %xmm5 movd %r11d, %xmm13 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm0 psrld $12, %xmm2 punpckldq %xmm13, %xmm15 pslld $20, %xmm0 movq %xmm15, %rsi pxor %xmm0, %xmm2 movd %ebp, %xmm0 punpckldq %xmm7, %xmm0 punpcklqdq %xmm0, %xmm15 movdqa %xmm15, %xmm0 paddd %xmm2, %xmm0 paddd %xmm0, %xmm12 pxor %xmm12, %xmm14 movdqa %xmm14, %xmm15 psrld $8, %xmm14 pslld $24, %xmm15 pxor %xmm15, %xmm14 paddd %xmm14, %xmm5 pshufd $147, %xmm14, %xmm14 pxor %xmm5, %xmm2 movdqa %xmm2, %xmm0 psrld $7, %xmm2 pshufd $78, %xmm5, %xmm15 pslld $25, %xmm0 movdqa %xmm8, %xmm5 pxor %xmm0, %xmm2 movd %r9d, %xmm0 pshufd $57, %xmm2, %xmm2 punpckldq %xmm0, %xmm5 movdqa %xmm11, %xmm0 punpckldq %xmm4, %xmm0 punpcklqdq %xmm5, %xmm0 paddd %xmm2, %xmm0 paddd %xmm12, %xmm0 pxor %xmm0, %xmm14 movdqa %xmm14, %xmm12 psrld $16, %xmm14 pslld $16, %xmm12 movdqa %xmm14, %xmm5 movdqa %xmm10, %xmm14 pxor %xmm12, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movd %eax, %xmm12 punpckldq %xmm12, %xmm14 movq %xmm14, %r8 movdqa %xmm14, %xmm13 movdqa %xmm6, %xmm14 punpckldq %xmm1, %xmm14 punpcklqdq %xmm13, %xmm14 paddd %xmm2, %xmm14 movdqa %xmm8, %xmm13 paddd %xmm0, %xmm14 punpckldq %xmm6, %xmm13 pxor %xmm14, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $57, %xmm5, %xmm5 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm15, %xmm0 pslld $25, %xmm12 movd %r9d, %xmm15 pxor %xmm12, %xmm2 movd %ebp, %xmm12 pshufd $147, %xmm2, %xmm2 punpckldq %xmm12, %xmm15 punpcklqdq %xmm15, %xmm13 paddd %xmm2, %xmm13 movq %xmm15, %r15 paddd %xmm14, %xmm13 movdqa %xmm1, %xmm14 movd %eax, %xmm15 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 punpckldq %xmm9, %xmm14 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movd %r11d, %xmm12 punpckldq %xmm4, %xmm12 punpcklqdq %xmm14, %xmm12 paddd %xmm2, %xmm12 movdqa %xmm10, %xmm14 paddd %xmm12, %xmm13 punpckldq %xmm3, %xmm14 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $8, %xmm5 pslld $24, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pshufd $147, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm12 pxor %xmm12, %xmm2 movd %r10d, %xmm12 pshufd $57, %xmm2, %xmm2 punpckldq %xmm15, %xmm12 punpcklqdq %xmm14, %xmm12 paddd %xmm2, %xmm12 movdqa %xmm11, %xmm14 paddd %xmm13, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm15 psrld $16, %xmm5 pslld $16, %xmm15 pxor %xmm15, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm15 psrld $12, %xmm2 pslld $20, %xmm15 pxor %xmm15, %xmm2 movd %ebx, %xmm15 punpckldq %xmm15, %xmm14 movd %edi, %xmm15 punpckldq %xmm7, %xmm15 movdqa %xmm15, %xmm13 punpcklqdq %xmm14, %xmm13 paddd %xmm2, %xmm13 movq %r8, %xmm14 paddd %xmm13, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm15 psrld $8, %xmm5 pslld $24, %xmm15 pxor %xmm15, %xmm5 paddd %xmm5, %xmm0 pshufd $57, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm15 psrld $7, %xmm2 pslld $25, %xmm15 movdqa %xmm15, %xmm13 pshufd $78, %xmm0, %xmm15 movdqa %xmm9, %xmm0 punpckldq %xmm8, %xmm0 punpcklqdq %xmm0, %xmm14 movdqa %xmm14, %xmm0 pxor %xmm13, %xmm2 pshufd $147, %xmm2, %xmm2 paddd %xmm2, %xmm0 movq %rdx, %xmm14 paddd %xmm0, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $16, %xmm5 pslld $16, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm0 psrld $12, %xmm2 pslld $20, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm3, %xmm0 punpckldq %xmm11, %xmm0 punpcklqdq %xmm14, %xmm0 paddd %xmm2, %xmm0 movd %ebx, %xmm14 paddd %xmm0, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $147, %xmm5, %xmm5 movdqa %xmm15, %xmm0 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm15 pslld $25, %xmm15 movdqa %xmm15, %xmm13 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm15 movd %ebp, %xmm0 punpckldq %xmm0, %xmm14 pxor %xmm13, %xmm2 movdqa %xmm1, %xmm0 movd %r9d, %xmm13 pshufd $57, %xmm2, %xmm2 punpckldq %xmm13, %xmm0 punpcklqdq %xmm14, %xmm0 paddd %xmm2, %xmm0 paddd %xmm12, %xmm0 movd %r11d, %xmm13 pxor %xmm0, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm4, %xmm12 punpckldq %xmm13, %xmm12 movdqa %xmm7, %xmm13 movq %xmm12, %rdx movd %r10d, %xmm12 punpckldq %xmm12, %xmm13 movq %xmm13, %r12 movdqa %xmm13, %xmm12 movq %rdx, %xmm13 punpcklqdq %xmm13, %xmm12 movdqa %xmm12, %xmm13 paddd %xmm2, %xmm13 movdqa %xmm13, %xmm12 movd %r10d, %xmm13 paddd %xmm0, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $57, %xmm5, %xmm5 movaps %xmm5, 32(%rsp) movdqa %xmm15, %xmm0 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm15 movd %r9d, %xmm5 pslld $25, %xmm15 pshufd $78, %xmm0, %xmm0 psrld $7, %xmm2 pxor %xmm15, %xmm2 movdqa %xmm1, %xmm15 pshufd $147, %xmm2, %xmm2 punpckldq %xmm13, %xmm15 movdqa %xmm3, %xmm13 punpckldq %xmm5, %xmm13 movdqa 32(%rsp), %xmm5 punpcklqdq %xmm15, %xmm13 paddd %xmm2, %xmm13 paddd %xmm12, %xmm13 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm4, %xmm12 punpckldq %xmm10, %xmm12 punpcklqdq %xmm14, %xmm12 paddd %xmm2, %xmm12 movdqa %xmm7, %xmm14 paddd %xmm12, %xmm13 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $8, %xmm5 pslld $24, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pshufd $147, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm15 pslld $25, %xmm12 pxor %xmm12, %xmm2 movd %eax, %xmm12 pshufd $57, %xmm2, %xmm2 punpckldq %xmm12, %xmm14 movd %edi, %xmm12 punpckldq %xmm8, %xmm12 punpcklqdq %xmm14, %xmm12 paddd %xmm2, %xmm12 movd %r11d, %xmm14 paddd %xmm13, %xmm12 punpckldq %xmm9, %xmm14 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $16, %xmm5 pslld $16, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm0 psrld $12, %xmm2 pslld $20, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm11, %xmm0 punpckldq %xmm6, %xmm0 punpcklqdq %xmm14, %xmm0 paddd %xmm2, %xmm0 movq %rdx, %xmm14 paddd %xmm0, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $57, %xmm5, %xmm5 movdqa %xmm15, %xmm0 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm15 pslld $25, %xmm15 movdqa %xmm15, %xmm13 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm15 movdqa %xmm1, %xmm0 pxor %xmm13, %xmm2 punpckldq %xmm7, %xmm0 pshufd $147, %xmm2, %xmm2 punpcklqdq %xmm14, %xmm0 paddd %xmm2, %xmm0 movd %eax, %xmm14 movd %r10d, %xmm13 paddd %xmm12, %xmm0 pxor %xmm0, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm8, %xmm12 punpckldq %xmm14, %xmm12 movdqa %xmm6, %xmm14 punpckldq %xmm13, %xmm14 punpcklqdq %xmm12, %xmm14 paddd %xmm2, %xmm14 movd %ebx, %xmm13 paddd %xmm0, %xmm14 punpckldq %xmm10, %xmm13 pxor %xmm14, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $147, %xmm5, %xmm5 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 pshufd $78, %xmm15, %xmm0 psrld $7, %xmm2 pslld $25, %xmm12 movd %ebp, %xmm15 punpckldq %xmm11, %xmm15 pxor %xmm12, %xmm2 punpcklqdq %xmm15, %xmm13 pshufd $57, %xmm2, %xmm2 paddd %xmm2, %xmm13 movd %r9d, %xmm15 paddd %xmm14, %xmm13 movd %edi, %xmm14 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 punpckldq %xmm3, %xmm14 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm9, %xmm12 punpckldq %xmm15, %xmm12 punpcklqdq %xmm14, %xmm12 paddd %xmm2, %xmm12 movd %r10d, %xmm14 paddd %xmm12, %xmm13 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $8, %xmm5 pslld $24, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pshufd $57, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm15 pslld $25, %xmm12 movq %r14, %xmm0 pxor %xmm12, %xmm2 movdqa %xmm6, %xmm12 pshufd $147, %xmm2, %xmm2 punpckldq %xmm11, %xmm12 punpcklqdq %xmm0, %xmm12 paddd %xmm2, %xmm12 paddd %xmm13, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $16, %xmm5 pslld $16, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm0 psrld $12, %xmm2 pslld $20, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm9, %xmm0 punpckldq %xmm14, %xmm0 movq %r15, %xmm14 punpcklqdq %xmm0, %xmm14 movdqa %xmm14, %xmm0 movdqa %xmm3, %xmm14 paddd %xmm2, %xmm0 paddd %xmm0, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $147, %xmm5, %xmm5 movdqa %xmm15, %xmm0 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm15 pslld $25, %xmm15 movdqa %xmm15, %xmm13 pshufd $78, %xmm0, %xmm15 movd %r11d, %xmm0 punpckldq %xmm0, %xmm14 psrld $7, %xmm2 movdqa %xmm4, %xmm0 pxor %xmm13, %xmm2 punpckldq %xmm7, %xmm0 pshufd $57, %xmm2, %xmm2 punpcklqdq %xmm14, %xmm0 paddd %xmm2, %xmm0 movq %r8, %xmm13 paddd %xmm12, %xmm0 pxor %xmm0, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm15 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm1, %xmm12 punpckldq %xmm8, %xmm12 punpcklqdq %xmm12, %xmm13 paddd %xmm2, %xmm13 movdqa %xmm13, %xmm14 movdqa %xmm9, %xmm13 paddd %xmm0, %xmm14 punpckldq %xmm10, %xmm13 pxor %xmm14, %xmm5 movdqa %xmm5, %xmm0 psrld $8, %xmm5 pslld $24, %xmm0 pxor %xmm0, %xmm5 paddd %xmm5, %xmm15 pshufd $57, %xmm5, %xmm5 pxor %xmm15, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm15, %xmm0 pslld $25, %xmm12 movdqa %xmm6, %xmm15 pxor %xmm12, %xmm2 movd %eax, %xmm12 pshufd $147, %xmm2, %xmm2 punpckldq %xmm12, %xmm15 punpcklqdq %xmm15, %xmm13 paddd %xmm2, %xmm13 movd %edi, %xmm15 paddd %xmm14, %xmm13 movdqa %xmm8, %xmm14 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 punpckldq %xmm15, %xmm14 pslld $16, %xmm12 movdqa %xmm14, %xmm15 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm11, %xmm12 punpckldq %xmm3, %xmm12 punpcklqdq %xmm12, %xmm15 movdqa %xmm15, %xmm12 movq %r15, %xmm15 paddd %xmm2, %xmm12 paddd %xmm12, %xmm13 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $8, %xmm5 pslld $24, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pshufd $147, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm12 pxor %xmm12, %xmm2 movd %r11d, %xmm12 pshufd $57, %xmm2, %xmm2 punpckldq %xmm1, %xmm12 punpcklqdq %xmm12, %xmm15 movdqa %xmm15, %xmm12 movd %ebx, %xmm15 paddd %xmm2, %xmm12 paddd %xmm12, %xmm13 pxor %xmm13, %xmm5 movdqa %xmm5, %xmm12 psrld $16, %xmm5 pslld $16, %xmm12 pxor %xmm12, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm12 psrld $12, %xmm2 pslld $20, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm4, %xmm12 punpckldq %xmm15, %xmm12 movq %r12, %xmm15 punpcklqdq %xmm15, %xmm12 paddd %xmm2, %xmm12 paddd %xmm13, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm15 psrld $8, %xmm5 pslld $24, %xmm15 pxor %xmm15, %xmm5 paddd %xmm5, %xmm0 movdqa %xmm8, %xmm15 movdqa %xmm7, %xmm8 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm13 psrld $7, %xmm2 punpckldq %xmm4, %xmm15 pslld $25, %xmm13 pshufd $57, %xmm5, %xmm5 pshufd $78, %xmm0, %xmm0 pxor %xmm13, %xmm2 movdqa %xmm15, %xmm13 movd %edi, %xmm15 pshufd $147, %xmm2, %xmm2 punpckldq %xmm15, %xmm8 punpcklqdq %xmm13, %xmm8 paddd %xmm2, %xmm8 movd %r11d, %xmm15 paddd %xmm8, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm8 psrld $16, %xmm5 pslld $16, %xmm8 pxor %xmm8, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm8 psrld $12, %xmm2 pslld $20, %xmm8 pxor %xmm8, %xmm2 movd %eax, %xmm8 punpckldq %xmm15, %xmm8 movd %ebp, %xmm15 punpckldq %xmm3, %xmm15 movdqa %xmm15, %xmm3 punpcklqdq %xmm8, %xmm3 movdqa %xmm3, %xmm8 movdqa %xmm11, %xmm3 paddd %xmm2, %xmm8 paddd %xmm8, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm8 psrld $8, %xmm5 pslld $24, %xmm8 pxor %xmm8, %xmm5 paddd %xmm5, %xmm0 pshufd $147, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm8 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm8 pxor %xmm8, %xmm2 movd %r10d, %xmm8 pshufd $57, %xmm2, %xmm2 punpckldq %xmm8, %xmm3 movdqa %xmm6, %xmm8 punpckldq %xmm4, %xmm6 punpcklqdq %xmm6, %xmm14 punpckldq %xmm9, %xmm8 punpcklqdq %xmm3, %xmm8 paddd %xmm2, %xmm8 movdqa (%rsp), %xmm4 paddd %xmm8, %xmm12 movaps 48(%rsp), %xmm6 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm8 psrld $16, %xmm5 pslld $16, %xmm8 pxor %xmm8, %xmm5 paddd %xmm5, %xmm0 movd %r9d, %xmm8 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm3 psrld $12, %xmm2 pslld $20, %xmm3 pxor %xmm3, %xmm2 movd %ebx, %xmm3 punpckldq %xmm8, %xmm3 movdqa %xmm1, %xmm8 punpckldq %xmm10, %xmm8 punpcklqdq %xmm3, %xmm8 paddd %xmm2, %xmm8 punpckldq %xmm11, %xmm10 paddd %xmm8, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm8 psrld $8, %xmm5 pslld $24, %xmm8 pxor %xmm8, %xmm5 paddd %xmm5, %xmm0 pshufd $57, %xmm5, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm3 psrld $7, %xmm2 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm3 movdqa %xmm3, %xmm13 movd %r9d, %xmm3 pxor %xmm2, %xmm13 movq %rsi, %xmm2 pshufd $147, %xmm13, %xmm13 punpckldq %xmm3, %xmm7 punpcklqdq %xmm10, %xmm2 paddd %xmm13, %xmm2 movd %ebx, %xmm3 paddd %xmm2, %xmm12 punpckldq %xmm3, %xmm1 punpcklqdq %xmm7, %xmm1 movdqa 16(%rsp), %xmm3 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm2 psrld $16, %xmm5 movaps 64(%rsp), %xmm7 pslld $16, %xmm2 pxor %xmm2, %xmm5 paddd %xmm5, %xmm0 pxor %xmm0, %xmm13 movdqa %xmm13, %xmm8 psrld $12, %xmm13 pslld $20, %xmm8 pxor %xmm8, %xmm13 paddd %xmm13, %xmm1 paddd %xmm1, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm1 psrld $8, %xmm5 pslld $24, %xmm1 pxor %xmm1, %xmm5 paddd %xmm5, %xmm0 pshufd $147, %xmm5, %xmm5 pxor %xmm0, %xmm13 movdqa %xmm13, %xmm1 psrld $7, %xmm13 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm1 pxor %xmm1, %xmm13 movd %eax, %xmm1 pshufd $57, %xmm13, %xmm13 punpckldq %xmm9, %xmm1 punpcklqdq %xmm1, %xmm15 paddd %xmm13, %xmm15 paddd %xmm15, %xmm12 pxor %xmm12, %xmm5 movdqa %xmm5, %xmm2 psrld $16, %xmm5 pslld $16, %xmm2 pxor %xmm5, %xmm2 paddd %xmm2, %xmm0 pxor %xmm0, %xmm13 movdqa %xmm13, %xmm1 psrld $12, %xmm13 pslld $20, %xmm1 pxor %xmm1, %xmm13 paddd %xmm13, %xmm14 movdqa %xmm13, %xmm1 paddd %xmm14, %xmm12 pxor %xmm12, %xmm2 movdqa %xmm2, %xmm5 psrld $8, %xmm2 pslld $24, %xmm5 pxor %xmm5, %xmm2 paddd %xmm2, %xmm0 pshufd $57, %xmm2, %xmm2 pxor %xmm0, %xmm1 movdqa %xmm1, %xmm5 psrld $7, %xmm1 pshufd $78, %xmm0, %xmm0 pslld $25, %xmm5 pxor %xmm0, %xmm4 pxor %xmm12, %xmm4 movups %xmm4, (%rcx) pxor %xmm5, %xmm1 pshufd $147, %xmm1, %xmm1 pxor %xmm1, %xmm3 pxor %xmm2, %xmm3 movups %xmm3, 16(%rcx) movaps 80(%rsp), %xmm8 movaps 96(%rsp), %xmm9 movaps 112(%rsp), %xmm10 movaps 128(%rsp), %xmm11 movaps 144(%rsp), %xmm12 movaps 160(%rsp), %xmm13 movaps 176(%rsp), %xmm14 movaps 192(%rsp), %xmm15 addq $208, %rsp popq %rbx popq %rbp popq %r12 popq %r14 popq %r15 {$IF DEFINED(WINDOWS)} popq %rsi popq %rdi {$ELSE IF DEFINED(UNIX)} popq %rdx popq %rcx {$ENDIF} end; procedure blake2b_compress_sse( S: Pblake2b_state; const block: pcuint8 ); assembler; nostackframe; asm {$IF DEFINED(UNIX)} pushq %rcx movq %rdi, %rcx pushq %rdx movq %rsi, %rdx {$ENDIF} subq $552, %rsp movaps %xmm6, 384(%rsp) movaps %xmm7, 400(%rsp) movaps %xmm8, 416(%rsp) movaps %xmm9, 432(%rsp) movaps %xmm10, 448(%rsp) movaps %xmm11, 464(%rsp) movaps %xmm12, 480(%rsp) movaps %xmm13, 496(%rsp) movaps %xmm14, 512(%rsp) movaps %xmm15, 528(%rsp) movq (%rdx), %rax movdqu (%rcx), %xmm7 movdqu 32(%rcx), %xmm5 movq 16(%rdx), %xmm6 movq %rax, 8(%rsp) movq 32(%rdx), %rax paddq %xmm7, %xmm5 movq 8(%rsp), %xmm1 movdqu 16(%rcx), %xmm0 movdqu 48(%rcx), %xmm4 punpcklqdq %xmm6, %xmm1 paddq %xmm1, %xmm5 movaps %xmm1, 144(%rsp) movq %rax, 40(%rsp) movq 48(%rdx), %rax movq 40(%rsp), %xmm7 paddq %xmm0, %xmm4 movdqu 64(%rcx), %xmm3 pxor blake2b_IV_3(%rip), %xmm3 pxor %xmm5, %xmm3 movdqa %xmm3, %xmm0 psllq $32, %xmm0 movdqu 80(%rcx), %xmm2 pxor blake2b_IV_4(%rip), %xmm2 movq %rax, 16(%rsp) movq 8(%rdx), %rax psrlq $32, %xmm3 movhps 16(%rsp), %xmm7 pxor %xmm0, %xmm3 movdqu 32(%rcx), %xmm9 paddq %xmm7, %xmm4 movaps %xmm7, 160(%rsp) movdqu 48(%rcx), %xmm11 pxor %xmm4, %xmm2 movdqa %xmm2, %xmm0 psrlq $32, %xmm2 movq %rax, (%rsp) movq 24(%rdx), %rax psllq $32, %xmm0 pxor %xmm0, %xmm2 movdqa blake2b_IV(%rip), %xmm0 paddq %xmm3, %xmm0 movq %rax, 24(%rsp) movq 40(%rdx), %rax movdqa %xmm0, %xmm1 movdqa blake2b_IV_2(%rip), %xmm0 pxor %xmm1, %xmm9 movdqa %xmm9, %xmm7 movdqa %xmm9, %xmm8 psllq $40, %xmm8 paddq %xmm2, %xmm0 psrlq $24, %xmm7 movq %rax, 48(%rsp) movq 56(%rdx), %rax pxor %xmm0, %xmm11 pxor %xmm8, %xmm7 movdqa %xmm11, %xmm8 psrlq $24, %xmm11 psllq $40, %xmm8 pxor %xmm8, %xmm11 movq %rax, 56(%rsp) movq (%rsp), %xmm8 movq 48(%rsp), %xmm14 movhps 24(%rsp), %xmm8 movq 64(%rdx), %rax paddq %xmm8, %xmm5 movhps 56(%rsp), %xmm14 movq 72(%rdx), %xmm10 movaps %xmm8, 176(%rsp) paddq %xmm7, %xmm5 paddq %xmm14, %xmm4 movq 104(%rdx), %xmm8 movaps %xmm14, 192(%rsp) pxor %xmm5, %xmm3 movdqa %xmm3, %xmm13 paddq %xmm11, %xmm4 psrlq $16, %xmm3 psllq $48, %xmm13 pxor %xmm4, %xmm2 movq %rax, 64(%rsp) movq 80(%rdx), %rax pxor %xmm13, %xmm3 movdqa %xmm2, %xmm13 paddq %xmm3, %xmm1 psrlq $16, %xmm2 psllq $48, %xmm13 pxor %xmm1, %xmm7 movdqa %xmm10, %xmm14 pxor %xmm13, %xmm2 movdqa %xmm7, %xmm13 paddq %xmm2, %xmm0 psrlq $63, %xmm7 psllq $1, %xmm13 pxor %xmm0, %xmm11 movq %rax, 72(%rsp) movq 96(%rdx), %rax pxor %xmm13, %xmm7 movdqa %xmm11, %xmm13 psrlq $63, %xmm11 movdqa %xmm2, %xmm12 psllq $1, %xmm13 punpcklqdq %xmm2, %xmm2 pxor %xmm13, %xmm11 movdqa %xmm3, %xmm13 punpcklqdq %xmm3, %xmm13 punpckhqdq %xmm2, %xmm3 movdqa %xmm11, %xmm2 punpckhqdq %xmm13, %xmm12 punpcklqdq %xmm11, %xmm2 movdqa %xmm7, %xmm13 punpcklqdq %xmm7, %xmm7 punpckhqdq %xmm7, %xmm11 movq 64(%rsp), %xmm7 movq %rax, 32(%rsp) punpckhqdq %xmm2, %xmm13 movdqa %xmm13, %xmm2 movq 112(%rdx), %rax movhps 72(%rsp), %xmm7 movaps %xmm7, 208(%rsp) paddq %xmm13, %xmm7 paddq %xmm7, %xmm5 movq 32(%rsp), %xmm7 movq %rax, 80(%rsp) pxor %xmm5, %xmm12 movdqa %xmm12, %xmm13 psrlq $32, %xmm12 movhps 80(%rsp), %xmm7 psllq $32, %xmm13 movq 120(%rdx), %rax movdqa %xmm7, %xmm15 pxor %xmm13, %xmm12 paddq %xmm12, %xmm0 movaps %xmm7, 112(%rsp) paddq %xmm11, %xmm15 pxor %xmm0, %xmm2 movq 88(%rdx), %xmm7 paddq %xmm15, %xmm4 pxor %xmm4, %xmm3 movdqa %xmm3, %xmm13 psrlq $32, %xmm3 punpcklqdq %xmm7, %xmm14 psllq $32, %xmm13 movq %rax, %xmm9 movq %rax, 88(%rsp) movaps %xmm14, 224(%rsp) pxor %xmm13, %xmm3 movdqa %xmm2, %xmm13 paddq %xmm3, %xmm1 psllq $40, %xmm13 pxor %xmm1, %xmm11 psrlq $24, %xmm2 pxor %xmm13, %xmm2 movdqa %xmm11, %xmm13 psrlq $24, %xmm11 psllq $40, %xmm13 pxor %xmm13, %xmm11 movdqa %xmm14, %xmm13 movdqa %xmm8, %xmm14 paddq %xmm2, %xmm13 punpcklqdq %xmm9, %xmm14 movdqa %xmm14, %xmm15 movaps %xmm14, 240(%rsp) paddq %xmm13, %xmm5 paddq %xmm11, %xmm15 movq 80(%rsp), %xmm14 pxor %xmm5, %xmm12 movdqa %xmm12, %xmm13 paddq %xmm15, %xmm4 psrlq $16, %xmm12 psllq $48, %xmm13 pxor %xmm4, %xmm3 movhps 40(%rsp), %xmm14 movaps %xmm14, 128(%rsp) pxor %xmm13, %xmm12 movdqa %xmm3, %xmm13 psrlq $16, %xmm3 psllq $48, %xmm13 paddq %xmm12, %xmm0 pxor %xmm13, %xmm3 paddq %xmm3, %xmm1 pxor %xmm0, %xmm2 pxor %xmm1, %xmm11 movdqa %xmm11, %xmm13 movdqa %xmm2, %xmm11 psllq $1, %xmm11 psrlq $63, %xmm2 pxor %xmm11, %xmm2 movdqa %xmm13, %xmm11 psrlq $63, %xmm13 psllq $1, %xmm11 pxor %xmm11, %xmm13 movdqa %xmm2, %xmm11 movdqa %xmm13, %xmm15 punpcklqdq %xmm13, %xmm13 punpcklqdq %xmm2, %xmm11 punpckhqdq %xmm13, %xmm2 movdqa %xmm3, %xmm13 punpckhqdq %xmm11, %xmm15 punpcklqdq %xmm3, %xmm13 movdqa %xmm15, %xmm11 movdqa %xmm12, %xmm15 punpcklqdq %xmm12, %xmm12 punpckhqdq %xmm12, %xmm3 movdqa %xmm14, %xmm12 punpckhqdq %xmm13, %xmm15 movdqa %xmm15, %xmm13 paddq %xmm11, %xmm12 paddq %xmm12, %xmm5 movdqa %xmm10, %xmm12 punpcklqdq %xmm8, %xmm12 movdqa %xmm12, %xmm15 pxor %xmm5, %xmm13 movaps %xmm12, 256(%rsp) paddq %xmm2, %xmm15 movdqa %xmm13, %xmm12 paddq %xmm15, %xmm4 psllq $32, %xmm12 psrlq $32, %xmm13 pxor %xmm4, %xmm3 pxor %xmm12, %xmm13 movdqa %xmm3, %xmm12 paddq %xmm13, %xmm1 psrlq $32, %xmm3 psllq $32, %xmm12 pxor %xmm1, %xmm11 pxor %xmm12, %xmm3 paddq %xmm3, %xmm0 movdqa %xmm3, %xmm14 movdqa %xmm11, %xmm3 psllq $40, %xmm3 pxor %xmm0, %xmm2 psrlq $24, %xmm11 pxor %xmm3, %xmm11 movdqa %xmm2, %xmm3 psrlq $24, %xmm2 psllq $40, %xmm3 pxor %xmm3, %xmm2 movq 72(%rsp), %xmm3 movhps 64(%rsp), %xmm3 movq 24(%rsp), %xmm9 movaps %xmm3, 272(%rsp) movdqa %xmm3, %xmm12 movq %rax, %xmm3 movhps 16(%rsp), %xmm3 paddq %xmm11, %xmm12 paddq %xmm12, %xmm5 movaps %xmm3, 288(%rsp) paddq %xmm2, %xmm3 paddq %xmm3, %xmm4 pxor %xmm5, %xmm13 movdqa %xmm13, %xmm12 psrlq $16, %xmm13 pxor %xmm4, %xmm14 psllq $48, %xmm12 movdqa %xmm13, %xmm3 movdqa %xmm14, %xmm13 psrlq $16, %xmm14 pxor %xmm12, %xmm3 paddq %xmm3, %xmm1 psllq $48, %xmm13 movdqa %xmm14, %xmm12 pxor %xmm1, %xmm11 pxor %xmm13, %xmm12 movdqa %xmm11, %xmm13 paddq %xmm12, %xmm0 psrlq $63, %xmm11 psllq $1, %xmm13 pxor %xmm0, %xmm2 movdqa %xmm12, %xmm14 punpcklqdq %xmm12, %xmm12 pxor %xmm13, %xmm11 movdqa %xmm2, %xmm13 psrlq $63, %xmm2 psllq $1, %xmm13 pxor %xmm13, %xmm2 movdqa %xmm3, %xmm13 punpcklqdq %xmm3, %xmm13 punpckhqdq %xmm12, %xmm3 movdqa %xmm2, %xmm12 punpckhqdq %xmm13, %xmm14 punpcklqdq %xmm2, %xmm12 movdqa %xmm14, %xmm13 movdqa %xmm11, %xmm14 punpcklqdq %xmm11, %xmm11 punpckhqdq %xmm11, %xmm2 movq (%rsp), %xmm11 punpckhqdq %xmm12, %xmm14 movdqa %xmm7, %xmm12 movhps 48(%rsp), %xmm12 movaps %xmm12, 320(%rsp) movhps 8(%rsp), %xmm11 paddq %xmm2, %xmm12 movaps %xmm11, 304(%rsp) paddq %xmm14, %xmm11 paddq %xmm12, %xmm4 paddq %xmm11, %xmm5 pxor %xmm4, %xmm3 pxor %xmm5, %xmm13 movdqa %xmm13, %xmm11 psrlq $32, %xmm13 psllq $32, %xmm11 pxor %xmm11, %xmm13 movdqa %xmm3, %xmm11 paddq %xmm13, %xmm0 psrlq $32, %xmm3 psllq $32, %xmm11 pxor %xmm0, %xmm14 pxor %xmm11, %xmm3 movdqa %xmm14, %xmm11 paddq %xmm3, %xmm1 psrlq $24, %xmm14 psllq $40, %xmm11 pxor %xmm1, %xmm2 pxor %xmm11, %xmm14 movdqa %xmm2, %xmm11 psrlq $24, %xmm2 psllq $40, %xmm11 pxor %xmm11, %xmm2 movdqa %xmm2, %xmm11 movq 32(%rsp), %xmm2 punpcklqdq %xmm6, %xmm2 movaps %xmm2, 336(%rsp) paddq %xmm14, %xmm2 paddq %xmm2, %xmm5 movq 56(%rsp), %xmm2 pxor %xmm5, %xmm13 punpcklqdq %xmm9, %xmm2 movdqa %xmm2, %xmm15 movaps %xmm2, 96(%rsp) movdqa %xmm13, %xmm2 paddq %xmm11, %xmm15 psllq $48, %xmm2 paddq %xmm15, %xmm4 psrlq $16, %xmm13 pxor %xmm4, %xmm3 pxor %xmm2, %xmm13 movdqa %xmm13, %xmm12 movdqa %xmm3, %xmm13 paddq %xmm12, %xmm0 psllq $48, %xmm13 psrlq $16, %xmm3 pxor %xmm0, %xmm14 movdqa %xmm14, %xmm2 pxor %xmm13, %xmm3 movdqa %xmm14, %xmm13 paddq %xmm3, %xmm1 psrlq $63, %xmm2 psllq $1, %xmm13 pxor %xmm1, %xmm11 pxor %xmm13, %xmm2 movdqa %xmm11, %xmm13 psrlq $63, %xmm11 psllq $1, %xmm13 pxor %xmm13, %xmm11 movdqa %xmm2, %xmm13 movdqa %xmm11, %xmm14 punpcklqdq %xmm11, %xmm11 punpcklqdq %xmm2, %xmm13 punpckhqdq %xmm13, %xmm14 movdqa %xmm3, %xmm13 punpckhqdq %xmm11, %xmm2 punpcklqdq %xmm3, %xmm13 movdqa %xmm13, %xmm11 movdqa %xmm12, %xmm13 punpcklqdq %xmm12, %xmm12 punpckhqdq %xmm11, %xmm13 movdqa %xmm13, %xmm11 movdqa %xmm7, %xmm13 punpckhqdq %xmm12, %xmm3 movhps 32(%rsp), %xmm13 movdqa %xmm13, %xmm12 paddq %xmm14, %xmm12 paddq %xmm5, %xmm12 movq 48(%rsp), %xmm5 pxor %xmm12, %xmm11 movhps 88(%rsp), %xmm5 movdqa %xmm5, %xmm13 movaps %xmm5, 352(%rsp) movdqa %xmm11, %xmm5 paddq %xmm2, %xmm13 psrlq $32, %xmm11 movdqa %xmm13, %xmm15 psllq $32, %xmm5 paddq %xmm4, %xmm15 movdqa %xmm3, %xmm4 movdqa %xmm11, %xmm3 pxor %xmm15, %xmm4 pxor %xmm5, %xmm3 movdqa %xmm4, %xmm5 paddq %xmm3, %xmm1 psrlq $32, %xmm4 pxor %xmm1, %xmm14 psllq $32, %xmm5 movdqa %xmm4, %xmm11 movdqa %xmm14, %xmm4 pxor %xmm5, %xmm11 psllq $40, %xmm4 paddq %xmm11, %xmm0 movq 64(%rsp), %xmm5 psrlq $24, %xmm14 pxor %xmm0, %xmm2 pxor %xmm4, %xmm14 movdqa %xmm2, %xmm4 psrlq $24, %xmm2 movhps 8(%rsp), %xmm5 psllq $40, %xmm4 paddq %xmm14, %xmm5 pxor %xmm4, %xmm2 movdqa %xmm6, %xmm4 paddq %xmm5, %xmm12 punpcklqdq %xmm8, %xmm4 movdqa %xmm4, %xmm13 pxor %xmm12, %xmm3 movdqa %xmm3, %xmm5 paddq %xmm2, %xmm13 psllq $48, %xmm5 movdqa %xmm13, %xmm4 psrlq $16, %xmm3 paddq %xmm15, %xmm4 pxor %xmm5, %xmm3 paddq %xmm3, %xmm1 pxor %xmm4, %xmm11 movdqa %xmm11, %xmm5 psrlq $16, %xmm11 pxor %xmm1, %xmm14 psllq $48, %xmm5 pxor %xmm5, %xmm11 movdqa %xmm14, %xmm5 psrlq $63, %xmm14 paddq %xmm11, %xmm0 psllq $1, %xmm5 pxor %xmm0, %xmm2 movdqa %xmm5, %xmm13 movdqa %xmm14, %xmm5 movdqa %xmm11, %xmm14 punpcklqdq %xmm11, %xmm11 pxor %xmm13, %xmm5 movdqa %xmm2, %xmm13 psrlq $63, %xmm2 psllq $1, %xmm13 pxor %xmm13, %xmm2 movdqa %xmm3, %xmm13 punpcklqdq %xmm3, %xmm13 punpckhqdq %xmm13, %xmm14 movdqa %xmm2, %xmm13 punpckhqdq %xmm11, %xmm3 punpcklqdq %xmm2, %xmm13 movdqa %xmm13, %xmm11 movdqa %xmm5, %xmm13 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm2 movq 72(%rsp), %xmm5 punpckhqdq %xmm11, %xmm13 movdqa %xmm13, %xmm11 punpcklqdq %xmm9, %xmm5 paddq %xmm13, %xmm5 movq 56(%rsp), %xmm13 paddq %xmm12, %xmm5 movq 40(%rsp), %xmm9 punpcklqdq %xmm10, %xmm13 paddq %xmm2, %xmm13 pxor %xmm5, %xmm14 paddq %xmm4, %xmm13 movdqa %xmm14, %xmm4 psllq $32, %xmm4 pxor %xmm13, %xmm3 psrlq $32, %xmm14 pxor %xmm4, %xmm14 movdqa %xmm3, %xmm4 paddq %xmm14, %xmm0 psrlq $32, %xmm3 psllq $32, %xmm4 pxor %xmm0, %xmm11 pxor %xmm4, %xmm3 movdqa %xmm11, %xmm4 paddq %xmm3, %xmm1 psrlq $24, %xmm11 psllq $40, %xmm4 pxor %xmm1, %xmm2 pxor %xmm4, %xmm11 movdqa %xmm2, %xmm4 psrlq $24, %xmm2 psllq $40, %xmm4 movdqa %xmm4, %xmm12 movdqa %xmm2, %xmm4 movq 80(%rsp), %xmm2 pxor %xmm12, %xmm4 movhps 16(%rsp), %xmm2 movdqa %xmm2, %xmm12 movq (%rsp), %xmm2 paddq %xmm11, %xmm12 paddq %xmm12, %xmm5 punpcklqdq %xmm9, %xmm2 movdqa %xmm2, %xmm15 paddq %xmm4, %xmm15 pxor %xmm5, %xmm14 movdqa %xmm14, %xmm2 paddq %xmm15, %xmm13 psllq $48, %xmm2 psrlq $16, %xmm14 pxor %xmm13, %xmm3 pxor %xmm2, %xmm14 movdqa %xmm3, %xmm2 psrlq $16, %xmm3 paddq %xmm14, %xmm0 psllq $48, %xmm2 pxor %xmm0, %xmm11 movdqa %xmm14, %xmm12 movdqa %xmm11, %xmm14 pxor %xmm2, %xmm3 paddq %xmm3, %xmm1 movdqa %xmm11, %xmm2 pxor %xmm1, %xmm4 movdqa %xmm4, %xmm11 psllq $1, %xmm14 psllq $1, %xmm11 psrlq $63, %xmm2 psrlq $63, %xmm4 pxor %xmm14, %xmm2 pxor %xmm11, %xmm4 movdqa %xmm2, %xmm11 movdqa %xmm4, %xmm14 punpcklqdq %xmm4, %xmm4 punpcklqdq %xmm2, %xmm11 punpckhqdq %xmm4, %xmm2 movdqa %xmm3, %xmm4 punpckhqdq %xmm11, %xmm14 punpcklqdq %xmm3, %xmm4 movdqa %xmm14, %xmm11 movdqa %xmm12, %xmm14 punpcklqdq %xmm12, %xmm12 punpckhqdq %xmm12, %xmm3 movdqa 96(%rsp), %xmm12 punpckhqdq %xmm4, %xmm14 movdqa %xmm14, %xmm4 paddq %xmm11, %xmm12 paddq %xmm5, %xmm12 movdqa %xmm8, %xmm5 punpcklqdq %xmm7, %xmm5 movdqa %xmm5, %xmm15 pxor %xmm12, %xmm4 movdqa %xmm4, %xmm5 paddq %xmm2, %xmm15 psllq $32, %xmm5 paddq %xmm13, %xmm15 psrlq $32, %xmm4 movdqa 112(%rsp), %xmm13 pxor %xmm15, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm1 psllq $32, %xmm5 pxor %xmm1, %xmm11 psrlq $32, %xmm3 pxor %xmm5, %xmm3 movdqa %xmm11, %xmm5 paddq %xmm3, %xmm0 psrlq $24, %xmm11 psllq $40, %xmm5 pxor %xmm0, %xmm2 pxor %xmm5, %xmm11 movdqa %xmm2, %xmm5 psrlq $24, %xmm2 psllq $40, %xmm5 pxor %xmm5, %xmm2 movdqa %xmm10, %xmm5 paddq %xmm2, %xmm13 movhps (%rsp), %xmm5 paddq %xmm13, %xmm15 movdqa %xmm5, %xmm14 pxor %xmm15, %xmm3 paddq %xmm11, %xmm14 movdqa %xmm14, %xmm5 paddq %xmm12, %xmm5 pxor %xmm5, %xmm4 movdqa %xmm4, %xmm13 psrlq $16, %xmm4 psllq $48, %xmm13 pxor %xmm13, %xmm4 movdqa %xmm3, %xmm13 paddq %xmm4, %xmm1 psrlq $16, %xmm3 psllq $48, %xmm13 pxor %xmm1, %xmm11 pxor %xmm13, %xmm3 movdqa %xmm11, %xmm13 paddq %xmm3, %xmm0 psrlq $63, %xmm11 psllq $1, %xmm13 pxor %xmm0, %xmm2 pxor %xmm13, %xmm11 movdqa %xmm2, %xmm13 psrlq $63, %xmm2 movdqa %xmm11, %xmm14 psllq $1, %xmm13 punpcklqdq %xmm11, %xmm11 pxor %xmm13, %xmm2 movdqa %xmm4, %xmm13 punpcklqdq %xmm4, %xmm13 movdqa %xmm13, %xmm12 movdqa %xmm3, %xmm13 punpcklqdq %xmm3, %xmm3 punpckhqdq %xmm3, %xmm4 movdqa %xmm2, %xmm3 punpckhqdq %xmm12, %xmm13 punpcklqdq %xmm2, %xmm3 punpckhqdq %xmm3, %xmm14 movdqa %xmm14, %xmm3 movdqa %xmm6, %xmm14 movhps 48(%rsp), %xmm14 punpckhqdq %xmm11, %xmm2 paddq %xmm3, %xmm14 paddq %xmm5, %xmm14 movdqa %xmm9, %xmm5 movhps 88(%rsp), %xmm5 pxor %xmm14, %xmm13 movdqa %xmm5, %xmm12 movdqa %xmm2, %xmm5 paddq %xmm12, %xmm5 paddq %xmm5, %xmm15 movdqa %xmm13, %xmm5 psllq $32, %xmm5 pxor %xmm15, %xmm4 psrlq $32, %xmm13 movdqa %xmm5, %xmm11 movdqa %xmm13, %xmm5 movdqa %xmm4, %xmm13 pxor %xmm11, %xmm5 psllq $32, %xmm13 paddq %xmm5, %xmm0 psrlq $32, %xmm4 pxor %xmm0, %xmm3 pxor %xmm13, %xmm4 movdqa %xmm3, %xmm13 paddq %xmm4, %xmm1 psrlq $24, %xmm3 psllq $40, %xmm13 pxor %xmm1, %xmm2 pxor %xmm13, %xmm3 movdqa %xmm2, %xmm13 psrlq $24, %xmm2 psllq $40, %xmm13 pxor %xmm13, %xmm2 movq 16(%rsp), %xmm13 movhps 72(%rsp), %xmm13 movq 8(%rsp), %xmm11 movaps %xmm13, 368(%rsp) paddq %xmm3, %xmm13 movhps 64(%rsp), %xmm11 paddq %xmm13, %xmm14 movdqa %xmm11, %xmm13 pxor %xmm14, %xmm5 paddq %xmm2, %xmm13 paddq %xmm13, %xmm15 movdqa %xmm5, %xmm13 psrlq $16, %xmm13 pxor %xmm15, %xmm4 psllq $48, %xmm5 pxor %xmm5, %xmm13 movdqa %xmm4, %xmm5 paddq %xmm13, %xmm0 psrlq $16, %xmm4 psllq $48, %xmm5 pxor %xmm0, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm1 psrlq $63, %xmm3 psllq $1, %xmm5 pxor %xmm1, %xmm2 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 psrlq $63, %xmm2 psllq $1, %xmm5 pxor %xmm5, %xmm2 movdqa %xmm3, %xmm5 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm2 punpcklqdq %xmm3, %xmm5 punpckhqdq %xmm5, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm4, %xmm9 punpckhqdq %xmm2, %xmm3 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm2 movdqa %xmm13, %xmm9 punpcklqdq %xmm13, %xmm13 punpckhqdq %xmm13, %xmm4 movdqa %xmm10, %xmm13 punpckhqdq %xmm2, %xmm9 movhps 48(%rsp), %xmm13 movdqa %xmm9, %xmm2 paddq %xmm5, %xmm13 paddq %xmm13, %xmm14 movdqa %xmm6, %xmm13 movhps 72(%rsp), %xmm13 pxor %xmm14, %xmm2 movdqa %xmm2, %xmm9 paddq %xmm3, %xmm13 psllq $32, %xmm9 paddq %xmm15, %xmm13 psrlq $32, %xmm2 movq 8(%rsp), %xmm15 pxor %xmm13, %xmm4 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm1 psllq $32, %xmm9 pxor %xmm1, %xmm5 movhps 56(%rsp), %xmm15 psrlq $32, %xmm4 pxor %xmm9, %xmm4 movdqa %xmm5, %xmm9 paddq %xmm4, %xmm0 psrlq $24, %xmm5 psllq $40, %xmm9 pxor %xmm0, %xmm3 pxor %xmm9, %xmm5 movdqa %xmm3, %xmm9 paddq %xmm5, %xmm15 psrlq $24, %xmm3 paddq %xmm15, %xmm14 psllq $40, %xmm9 pxor %xmm9, %xmm3 pxor %xmm14, %xmm2 paddq %xmm3, %xmm12 movdqa %xmm2, %xmm9 paddq %xmm12, %xmm13 psllq $48, %xmm9 psrlq $16, %xmm2 pxor %xmm13, %xmm4 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 psrlq $16, %xmm4 psllq $48, %xmm9 pxor %xmm9, %xmm4 movdqa %xmm4, %xmm12 movdqa %xmm1, %xmm4 paddq %xmm12, %xmm0 paddq %xmm2, %xmm4 movdqa %xmm12, %xmm9 punpcklqdq %xmm12, %xmm12 pxor %xmm4, %xmm5 pxor %xmm0, %xmm3 movdqa %xmm0, %xmm1 movdqa %xmm5, %xmm0 psllq $1, %xmm0 psrlq $63, %xmm5 pxor %xmm0, %xmm5 movdqa %xmm3, %xmm0 psrlq $63, %xmm3 psllq $1, %xmm0 pxor %xmm0, %xmm3 movdqa %xmm2, %xmm0 punpcklqdq %xmm2, %xmm0 punpckhqdq %xmm0, %xmm9 movdqa %xmm9, %xmm0 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm9 punpckhqdq %xmm12, %xmm2 movdqa %xmm9, %xmm12 movdqa %xmm5, %xmm9 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm3 movq 80(%rsp), %xmm5 punpckhqdq %xmm12, %xmm9 movdqa %xmm9, %xmm12 punpcklqdq %xmm7, %xmm5 movdqa %xmm5, %xmm15 movq 16(%rsp), %xmm5 paddq %xmm9, %xmm15 paddq %xmm15, %xmm14 movhps 24(%rsp), %xmm5 paddq %xmm3, %xmm5 pxor %xmm14, %xmm0 movdqa %xmm0, %xmm9 paddq %xmm5, %xmm13 psllq $32, %xmm9 psrlq $32, %xmm0 pxor %xmm13, %xmm2 pxor %xmm9, %xmm0 movdqa %xmm0, %xmm5 movdqa %xmm2, %xmm0 paddq %xmm5, %xmm1 psllq $32, %xmm0 psrlq $32, %xmm2 pxor %xmm1, %xmm12 pxor %xmm0, %xmm2 movdqa %xmm12, %xmm0 paddq %xmm2, %xmm4 psrlq $24, %xmm12 psllq $40, %xmm0 pxor %xmm4, %xmm3 pxor %xmm0, %xmm12 movdqa %xmm3, %xmm0 psrlq $24, %xmm3 psllq $40, %xmm0 pxor %xmm0, %xmm3 movq (%rsp), %xmm0 movhps 32(%rsp), %xmm0 movdqa %xmm0, %xmm15 movq 64(%rsp), %xmm0 paddq %xmm12, %xmm15 paddq %xmm15, %xmm14 punpcklqdq %xmm8, %xmm0 paddq %xmm3, %xmm0 paddq %xmm0, %xmm13 pxor %xmm14, %xmm5 movdqa %xmm5, %xmm0 psllq $48, %xmm0 pxor %xmm13, %xmm2 psrlq $16, %xmm5 pxor %xmm0, %xmm5 movdqa %xmm2, %xmm0 paddq %xmm5, %xmm1 psrlq $16, %xmm2 psllq $48, %xmm0 pxor %xmm1, %xmm12 pxor %xmm0, %xmm2 movdqa %xmm12, %xmm0 paddq %xmm2, %xmm4 psrlq $63, %xmm12 psllq $1, %xmm0 pxor %xmm4, %xmm3 pxor %xmm0, %xmm12 movdqa %xmm3, %xmm0 psrlq $63, %xmm3 psllq $1, %xmm0 pxor %xmm0, %xmm3 movdqa %xmm12, %xmm0 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm3 punpcklqdq %xmm12, %xmm0 punpckhqdq %xmm0, %xmm9 movdqa %xmm2, %xmm0 movdqa %xmm9, %xmm15 movdqa %xmm5, %xmm9 punpcklqdq %xmm2, %xmm0 punpckhqdq %xmm3, %xmm12 paddq %xmm12, %xmm11 punpckhqdq %xmm0, %xmm9 movdqa %xmm6, %xmm0 movdqa %xmm9, %xmm3 paddq %xmm11, %xmm13 movhps 16(%rsp), %xmm0 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm2 pxor %xmm13, %xmm2 paddq %xmm15, %xmm0 movq 40(%rsp), %xmm5 paddq %xmm0, %xmm14 pxor %xmm14, %xmm3 movdqa %xmm3, %xmm0 psrlq $32, %xmm3 movhps 56(%rsp), %xmm5 psllq $32, %xmm0 pxor %xmm0, %xmm3 movdqa %xmm2, %xmm0 psrlq $32, %xmm2 psllq $32, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm4, %xmm0 paddq %xmm2, %xmm1 paddq %xmm3, %xmm0 pxor %xmm1, %xmm12 pxor %xmm0, %xmm15 movdqa %xmm15, %xmm4 psrlq $24, %xmm15 psllq $40, %xmm4 pxor %xmm4, %xmm15 movdqa %xmm12, %xmm4 psrlq $24, %xmm12 psllq $40, %xmm4 pxor %xmm4, %xmm12 movq 32(%rsp), %xmm4 movhps 72(%rsp), %xmm4 paddq %xmm15, %xmm4 paddq %xmm4, %xmm14 movdqa %xmm7, %xmm4 movhps 24(%rsp), %xmm4 pxor %xmm14, %xmm3 movdqa %xmm4, %xmm11 movdqa %xmm3, %xmm4 paddq %xmm12, %xmm11 psllq $48, %xmm4 paddq %xmm11, %xmm13 psrlq $16, %xmm3 pxor %xmm4, %xmm3 pxor %xmm13, %xmm2 movdqa %xmm2, %xmm4 paddq %xmm3, %xmm0 psllq $48, %xmm4 pxor %xmm0, %xmm15 psrlq $16, %xmm2 pxor %xmm4, %xmm2 movdqa %xmm15, %xmm4 paddq %xmm2, %xmm1 psrlq $63, %xmm15 psllq $1, %xmm4 pxor %xmm1, %xmm12 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm2 pxor %xmm4, %xmm15 movdqa %xmm12, %xmm4 psrlq $63, %xmm12 psllq $1, %xmm4 pxor %xmm4, %xmm12 movdqa %xmm3, %xmm4 punpcklqdq %xmm3, %xmm4 punpckhqdq %xmm4, %xmm9 movdqa %xmm9, %xmm4 movdqa %xmm12, %xmm9 punpcklqdq %xmm12, %xmm9 punpckhqdq %xmm2, %xmm3 movdqa %xmm9, %xmm2 movdqa %xmm15, %xmm9 punpcklqdq %xmm15, %xmm15 punpckhqdq %xmm15, %xmm12 movdqa %xmm5, %xmm15 punpckhqdq %xmm2, %xmm9 paddq %xmm9, %xmm15 movq %rax, %xmm5 movdqa %xmm9, %xmm2 paddq %xmm15, %xmm14 movq (%rsp), %xmm15 pxor %xmm14, %xmm4 punpcklqdq %xmm15, %xmm5 movdqa %xmm5, %xmm11 movdqa %xmm4, %xmm5 paddq %xmm12, %xmm11 psllq $32, %xmm5 paddq %xmm11, %xmm13 psrlq $32, %xmm4 pxor %xmm13, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm1 psllq $32, %xmm5 pxor %xmm1, %xmm2 psrlq $32, %xmm3 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 paddq %xmm3, %xmm0 psrlq $24, %xmm2 psllq $40, %xmm5 pxor %xmm0, %xmm12 pxor %xmm5, %xmm2 movdqa %xmm12, %xmm5 psrlq $24, %xmm12 psllq $40, %xmm5 pxor %xmm5, %xmm12 movdqa %xmm8, %xmm5 movhps 48(%rsp), %xmm5 paddq %xmm2, %xmm5 paddq %xmm5, %xmm14 movq 80(%rsp), %xmm5 pxor %xmm14, %xmm4 punpcklqdq %xmm10, %xmm5 movdqa %xmm5, %xmm11 movdqa %xmm4, %xmm5 paddq %xmm12, %xmm11 psllq $48, %xmm5 paddq %xmm11, %xmm13 psrlq $16, %xmm4 pxor %xmm5, %xmm4 pxor %xmm13, %xmm3 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm1 psllq $48, %xmm5 pxor %xmm1, %xmm2 psrlq $16, %xmm3 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 paddq %xmm3, %xmm0 psrlq $63, %xmm2 psllq $1, %xmm5 pxor %xmm0, %xmm12 pxor %xmm5, %xmm2 movdqa %xmm12, %xmm5 psrlq $63, %xmm12 psllq $1, %xmm5 pxor %xmm5, %xmm12 movdqa %xmm2, %xmm5 movdqa %xmm12, %xmm9 punpcklqdq %xmm12, %xmm12 punpcklqdq %xmm2, %xmm5 punpckhqdq %xmm5, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm9 movdqa %xmm9, %xmm11 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm4 punpckhqdq %xmm4, %xmm3 movq 32(%rsp), %xmm4 punpckhqdq %xmm11, %xmm9 punpckhqdq %xmm12, %xmm2 movdqa 128(%rsp), %xmm11 movdqa %xmm9, %xmm12 punpcklqdq %xmm15, %xmm4 paddq %xmm5, %xmm4 movdqa 352(%rsp), %xmm15 paddq %xmm4, %xmm14 paddq %xmm2, %xmm11 pxor %xmm14, %xmm12 movdqa %xmm12, %xmm4 paddq %xmm11, %xmm13 psrlq $32, %xmm12 psllq $32, %xmm4 pxor %xmm13, %xmm3 movdqa %xmm3, %xmm9 movdqa %xmm4, %xmm11 psllq $32, %xmm9 movdqa %xmm12, %xmm4 pxor %xmm11, %xmm4 psrlq $32, %xmm3 paddq %xmm4, %xmm0 movdqa %xmm15, %xmm11 pxor %xmm9, %xmm3 pxor %xmm0, %xmm5 movdqa %xmm5, %xmm9 psrlq $24, %xmm5 psllq $40, %xmm9 paddq %xmm3, %xmm1 movdqa %xmm8, %xmm12 pxor %xmm9, %xmm5 paddq %xmm5, %xmm11 pxor %xmm1, %xmm2 movdqa %xmm2, %xmm9 paddq %xmm11, %xmm14 psrlq $24, %xmm2 movdqa %xmm8, %xmm11 movhps 72(%rsp), %xmm11 psllq $40, %xmm9 pxor %xmm14, %xmm4 movhps 56(%rsp), %xmm12 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm11 psrlq $16, %xmm4 paddq %xmm11, %xmm13 psllq $48, %xmm9 pxor %xmm9, %xmm4 pxor %xmm13, %xmm3 movdqa %xmm3, %xmm9 paddq %xmm4, %xmm0 psllq $48, %xmm9 pxor %xmm0, %xmm5 psrlq $16, %xmm3 pxor %xmm9, %xmm3 movdqa %xmm5, %xmm9 paddq %xmm3, %xmm1 psrlq $63, %xmm5 psllq $1, %xmm9 pxor %xmm1, %xmm2 pxor %xmm9, %xmm5 movdqa %xmm2, %xmm9 psrlq $63, %xmm2 psllq $1, %xmm9 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm11 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm3 punpckhqdq %xmm11, %xmm9 movdqa %xmm9, %xmm11 movdqa %xmm2, %xmm9 punpckhqdq %xmm3, %xmm4 punpcklqdq %xmm2, %xmm9 movdqa %xmm9, %xmm3 movdqa %xmm5, %xmm9 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm2 movq 8(%rsp), %xmm5 punpckhqdq %xmm3, %xmm9 movdqa %xmm9, %xmm3 movhps 16(%rsp), %xmm5 paddq %xmm9, %xmm5 paddq %xmm5, %xmm14 movdqa %xmm10, %xmm5 movhps 64(%rsp), %xmm5 pxor %xmm14, %xmm11 paddq %xmm2, %xmm5 paddq %xmm5, %xmm13 movdqa %xmm11, %xmm5 psllq $32, %xmm5 pxor %xmm13, %xmm4 psrlq $32, %xmm11 pxor %xmm5, %xmm11 movdqa %xmm4, %xmm5 paddq %xmm11, %xmm1 psrlq $32, %xmm4 psllq $32, %xmm5 pxor %xmm1, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm0 psrlq $24, %xmm3 psllq $40, %xmm5 pxor %xmm0, %xmm2 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 psrlq $24, %xmm2 psllq $40, %xmm5 pxor %xmm5, %xmm2 movdqa 96(%rsp), %xmm5 paddq %xmm3, %xmm5 paddq %xmm5, %xmm14 movdqa %xmm6, %xmm5 pxor %xmm14, %xmm11 punpcklqdq %xmm7, %xmm5 movdqa %xmm11, %xmm9 paddq %xmm2, %xmm5 paddq %xmm5, %xmm13 psllq $48, %xmm9 psrlq $16, %xmm11 pxor %xmm13, %xmm4 pxor %xmm9, %xmm11 movdqa %xmm4, %xmm9 paddq %xmm11, %xmm1 psrlq $16, %xmm4 psllq $48, %xmm9 pxor %xmm1, %xmm3 pxor %xmm9, %xmm4 movdqa %xmm3, %xmm9 paddq %xmm4, %xmm0 psrlq $63, %xmm3 psllq $1, %xmm9 pxor %xmm0, %xmm2 pxor %xmm9, %xmm3 movdqa %xmm2, %xmm9 psrlq $63, %xmm2 psllq $1, %xmm9 pxor %xmm9, %xmm2 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm2 punpckhqdq %xmm5, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm4, %xmm9 punpckhqdq %xmm2, %xmm3 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm2 movdqa %xmm11, %xmm9 punpcklqdq %xmm11, %xmm11 punpckhqdq %xmm11, %xmm4 movdqa %xmm12, %xmm11 punpckhqdq %xmm2, %xmm9 movq 32(%rsp), %xmm12 paddq %xmm5, %xmm11 movdqa %xmm9, %xmm2 movhps 24(%rsp), %xmm12 paddq %xmm11, %xmm14 movdqa %xmm12, %xmm11 pxor %xmm14, %xmm2 movdqa %xmm2, %xmm9 movdqa %xmm7, %xmm12 paddq %xmm3, %xmm11 psllq $32, %xmm9 movhps 80(%rsp), %xmm12 paddq %xmm11, %xmm13 psrlq $32, %xmm2 movdqa %xmm12, %xmm11 pxor %xmm13, %xmm4 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm0 psllq $32, %xmm9 pxor %xmm0, %xmm5 psrlq $32, %xmm4 pxor %xmm9, %xmm4 movdqa %xmm5, %xmm9 paddq %xmm4, %xmm1 psrlq $24, %xmm5 psllq $40, %xmm9 pxor %xmm1, %xmm3 pxor %xmm9, %xmm5 movdqa %xmm3, %xmm9 psrlq $24, %xmm3 psllq $40, %xmm9 pxor %xmm9, %xmm3 movdqa %xmm5, %xmm9 paddq %xmm12, %xmm9 movq (%rsp), %xmm12 paddq %xmm9, %xmm14 pxor %xmm14, %xmm2 punpcklqdq %xmm10, %xmm12 movdqa %xmm2, %xmm9 paddq %xmm3, %xmm12 paddq %xmm12, %xmm13 psllq $48, %xmm9 psrlq $16, %xmm2 pxor %xmm13, %xmm4 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm0 psrlq $16, %xmm4 psllq $48, %xmm9 pxor %xmm0, %xmm5 pxor %xmm9, %xmm4 movdqa %xmm5, %xmm9 paddq %xmm4, %xmm1 psrlq $63, %xmm5 psllq $1, %xmm9 pxor %xmm1, %xmm3 pxor %xmm9, %xmm5 movdqa %xmm3, %xmm9 psrlq $63, %xmm3 psllq $1, %xmm9 pxor %xmm9, %xmm3 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm9 movdqa %xmm9, %xmm12 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm4 punpckhqdq %xmm12, %xmm9 punpckhqdq %xmm4, %xmm2 movdqa %xmm9, %xmm12 movdqa %xmm3, %xmm4 movdqa %xmm5, %xmm9 punpcklqdq %xmm3, %xmm4 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm3 punpckhqdq %xmm4, %xmm9 paddq %xmm9, %xmm15 movdqa %xmm9, %xmm4 movq 64(%rsp), %xmm5 paddq %xmm15, %xmm14 movq 8(%rsp), %xmm15 pxor %xmm14, %xmm12 punpcklqdq %xmm6, %xmm5 movdqa %xmm12, %xmm9 paddq %xmm3, %xmm5 paddq %xmm5, %xmm13 psllq $32, %xmm9 movdqa %xmm15, %xmm5 punpcklqdq %xmm15, %xmm7 psrlq $32, %xmm12 pxor %xmm13, %xmm2 movhps 40(%rsp), %xmm5 movq %rax, %xmm15 pxor %xmm9, %xmm12 movdqa %xmm2, %xmm9 paddq %xmm12, %xmm1 psrlq $32, %xmm2 psllq $32, %xmm9 pxor %xmm1, %xmm4 punpcklqdq %xmm10, %xmm15 movdqa %xmm15, %xmm10 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 psrlq $24, %xmm4 paddq %xmm2, %xmm0 psllq $40, %xmm9 pxor %xmm0, %xmm3 pxor %xmm9, %xmm4 paddq %xmm4, %xmm5 movdqa %xmm3, %xmm9 paddq %xmm5, %xmm14 psllq $40, %xmm9 movdqa 368(%rsp), %xmm5 psrlq $24, %xmm3 pxor %xmm14, %xmm12 pxor %xmm9, %xmm3 movdqa %xmm12, %xmm9 paddq %xmm3, %xmm5 psrlq $16, %xmm12 paddq %xmm5, %xmm13 psllq $48, %xmm9 pxor %xmm9, %xmm12 pxor %xmm13, %xmm2 movdqa %xmm2, %xmm9 paddq %xmm12, %xmm1 psllq $48, %xmm9 pxor %xmm1, %xmm4 psrlq $16, %xmm2 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm0 psrlq $63, %xmm4 psllq $1, %xmm9 pxor %xmm0, %xmm3 pxor %xmm9, %xmm4 movdqa %xmm3, %xmm9 psrlq $63, %xmm3 psllq $1, %xmm9 pxor %xmm9, %xmm3 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm3 punpckhqdq %xmm5, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm2, %xmm9 punpckhqdq %xmm3, %xmm4 punpcklqdq %xmm2, %xmm9 movdqa %xmm9, %xmm3 movdqa %xmm12, %xmm9 punpcklqdq %xmm12, %xmm12 punpckhqdq %xmm12, %xmm2 movq 16(%rsp), %xmm12 punpckhqdq %xmm3, %xmm9 movdqa %xmm9, %xmm3 paddq %xmm4, %xmm7 movhps 80(%rsp), %xmm12 paddq %xmm7, %xmm13 paddq %xmm5, %xmm12 pxor %xmm13, %xmm2 paddq %xmm12, %xmm14 pxor %xmm14, %xmm3 movdqa %xmm3, %xmm9 psrlq $32, %xmm3 psllq $32, %xmm9 pxor %xmm9, %xmm3 movdqa %xmm2, %xmm9 paddq %xmm3, %xmm0 psrlq $32, %xmm2 psllq $32, %xmm9 pxor %xmm0, %xmm5 pxor %xmm9, %xmm2 movdqa %xmm5, %xmm9 paddq %xmm2, %xmm1 psrlq $24, %xmm5 psllq $40, %xmm9 pxor %xmm1, %xmm4 pxor %xmm9, %xmm5 movdqa %xmm4, %xmm9 psrlq $24, %xmm4 psllq $40, %xmm9 pxor %xmm9, %xmm4 movdqa %xmm5, %xmm9 paddq %xmm15, %xmm9 movq 24(%rsp), %xmm15 paddq %xmm9, %xmm14 movhps 64(%rsp), %xmm15 pxor %xmm14, %xmm3 movdqa %xmm3, %xmm9 movdqa %xmm15, %xmm7 psllq $48, %xmm9 paddq %xmm4, %xmm7 psrlq $16, %xmm3 paddq %xmm7, %xmm13 pxor %xmm9, %xmm3 paddq %xmm3, %xmm0 pxor %xmm13, %xmm2 movdqa %xmm2, %xmm9 psrlq $16, %xmm2 pxor %xmm0, %xmm5 psllq $48, %xmm9 pxor %xmm9, %xmm2 movdqa %xmm5, %xmm9 paddq %xmm2, %xmm1 psrlq $63, %xmm5 psllq $1, %xmm9 pxor %xmm1, %xmm4 pxor %xmm9, %xmm5 movdqa %xmm4, %xmm9 psrlq $63, %xmm4 psllq $1, %xmm9 pxor %xmm9, %xmm4 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm9 movdqa %xmm9, %xmm7 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm2 punpckhqdq %xmm7, %xmm9 movdqa %xmm9, %xmm15 movdqa %xmm4, %xmm9 punpckhqdq %xmm2, %xmm3 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm2 movdqa %xmm5, %xmm9 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm5, %xmm4 movq 32(%rsp), %xmm5 punpckhqdq %xmm2, %xmm9 movdqa %xmm9, %xmm2 punpcklqdq %xmm8, %xmm5 movdqa %xmm5, %xmm12 movq (%rsp), %xmm5 paddq %xmm9, %xmm12 movhps 72(%rsp), %xmm5 paddq %xmm12, %xmm14 movdqa %xmm5, %xmm7 pxor %xmm14, %xmm15 movdqa %xmm15, %xmm9 movdqa %xmm6, %xmm5 paddq %xmm4, %xmm7 psllq $32, %xmm9 movhps 56(%rsp), %xmm5 paddq %xmm7, %xmm13 psrlq $32, %xmm15 movdqa %xmm5, %xmm12 movq 40(%rsp), %xmm5 pxor %xmm13, %xmm3 pxor %xmm9, %xmm15 movdqa %xmm3, %xmm9 paddq %xmm15, %xmm1 psllq $32, %xmm9 pxor %xmm1, %xmm2 movhps 48(%rsp), %xmm5 movhps 40(%rsp), %xmm6 psrlq $32, %xmm3 movdqa %xmm5, %xmm7 pxor %xmm9, %xmm3 movdqa %xmm2, %xmm9 paddq %xmm3, %xmm0 psrlq $24, %xmm2 psllq $40, %xmm9 pxor %xmm0, %xmm4 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm12 psrlq $24, %xmm4 paddq %xmm12, %xmm14 psllq $40, %xmm9 movq 56(%rsp), %xmm12 pxor %xmm9, %xmm4 pxor %xmm14, %xmm15 paddq %xmm4, %xmm7 movdqa %xmm15, %xmm9 paddq %xmm7, %xmm13 psllq $48, %xmm9 movhps (%rsp), %xmm12 psrlq $16, %xmm15 pxor %xmm13, %xmm3 pxor %xmm9, %xmm15 movdqa %xmm3, %xmm9 psrlq $16, %xmm3 paddq %xmm15, %xmm1 psllq $48, %xmm9 pxor %xmm9, %xmm3 movdqa %xmm2, %xmm9 paddq %xmm3, %xmm0 pxor %xmm1, %xmm9 movdqa %xmm9, %xmm5 psllq $1, %xmm9 pxor %xmm0, %xmm4 movdqa %xmm9, %xmm2 psrlq $63, %xmm5 movdqa %xmm4, %xmm9 psllq $1, %xmm9 pxor %xmm5, %xmm2 psrlq $63, %xmm4 pxor %xmm9, %xmm4 movdqa %xmm2, %xmm9 punpcklqdq %xmm2, %xmm9 movdqa %xmm9, %xmm5 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm4 punpckhqdq %xmm4, %xmm2 movdqa %xmm3, %xmm4 punpckhqdq %xmm5, %xmm9 movdqa %xmm9, %xmm5 punpcklqdq %xmm3, %xmm4 movdqa %xmm15, %xmm9 punpcklqdq %xmm15, %xmm15 punpckhqdq %xmm15, %xmm3 movdqa 272(%rsp), %xmm15 punpckhqdq %xmm4, %xmm9 movdqa %xmm9, %xmm4 movdqa %xmm15, %xmm7 paddq %xmm5, %xmm7 paddq %xmm7, %xmm14 movdqa %xmm12, %xmm7 paddq %xmm2, %xmm7 pxor %xmm14, %xmm4 movdqa %xmm4, %xmm9 paddq %xmm7, %xmm13 psllq $32, %xmm9 psrlq $32, %xmm4 pxor %xmm13, %xmm3 pxor %xmm9, %xmm4 movdqa %xmm3, %xmm9 paddq %xmm4, %xmm0 psrlq $32, %xmm3 psllq $32, %xmm9 pxor %xmm0, %xmm5 pxor %xmm9, %xmm3 movdqa %xmm5, %xmm9 paddq %xmm3, %xmm1 psrlq $24, %xmm5 psllq $40, %xmm9 pxor %xmm1, %xmm2 pxor %xmm9, %xmm5 movdqa %xmm2, %xmm9 psrlq $24, %xmm2 paddq %xmm5, %xmm6 psllq $40, %xmm9 paddq %xmm6, %xmm14 pxor %xmm9, %xmm2 movq 16(%rsp), %xmm9 pxor %xmm14, %xmm4 movhps 48(%rsp), %xmm9 movdqa %xmm9, %xmm6 movdqa %xmm4, %xmm9 paddq %xmm2, %xmm6 psllq $48, %xmm9 paddq %xmm6, %xmm13 psrlq $16, %xmm4 pxor %xmm9, %xmm4 pxor %xmm13, %xmm3 movdqa %xmm3, %xmm9 paddq %xmm4, %xmm0 psllq $48, %xmm9 pxor %xmm0, %xmm5 psrlq $16, %xmm3 pxor %xmm9, %xmm3 movdqa %xmm5, %xmm9 paddq %xmm3, %xmm1 psrlq $63, %xmm5 psllq $1, %xmm9 pxor %xmm1, %xmm2 pxor %xmm9, %xmm5 movdqa %xmm2, %xmm9 psrlq $63, %xmm2 movdqa %xmm5, %xmm12 psllq $1, %xmm9 punpcklqdq %xmm5, %xmm5 pxor %xmm9, %xmm2 movdqa %xmm4, %xmm9 punpcklqdq %xmm4, %xmm9 movdqa %xmm9, %xmm6 movdqa %xmm3, %xmm9 punpcklqdq %xmm3, %xmm3 punpckhqdq %xmm3, %xmm4 movdqa %xmm2, %xmm3 punpckhqdq %xmm6, %xmm9 punpcklqdq %xmm2, %xmm3 punpckhqdq %xmm5, %xmm2 movq 24(%rsp), %xmm5 punpckhqdq %xmm3, %xmm12 paddq %xmm12, %xmm10 movdqa %xmm12, %xmm3 paddq %xmm10, %xmm14 punpcklqdq %xmm8, %xmm5 paddq %xmm2, %xmm5 movdqa 176(%rsp), %xmm8 paddq %xmm5, %xmm13 pxor %xmm14, %xmm9 movdqa %xmm9, %xmm5 psllq $32, %xmm5 pxor %xmm13, %xmm4 psrlq $32, %xmm9 pxor %xmm5, %xmm9 movdqa %xmm4, %xmm5 paddq %xmm9, %xmm1 psrlq $32, %xmm4 psllq $32, %xmm5 pxor %xmm1, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm0 psrlq $24, %xmm3 psllq $40, %xmm5 pxor %xmm0, %xmm2 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 psrlq $24, %xmm2 paddq %xmm3, %xmm11 psllq $40, %xmm5 paddq %xmm11, %xmm14 pxor %xmm5, %xmm2 movq 32(%rsp), %xmm5 pxor %xmm14, %xmm9 movhps 8(%rsp), %xmm5 paddq %xmm2, %xmm5 paddq %xmm5, %xmm13 movdqa %xmm9, %xmm5 psllq $48, %xmm5 pxor %xmm13, %xmm4 psrlq $16, %xmm9 pxor %xmm5, %xmm9 movdqa %xmm4, %xmm5 paddq %xmm9, %xmm1 psrlq $16, %xmm4 psllq $48, %xmm5 pxor %xmm1, %xmm3 pxor %xmm5, %xmm4 movdqa %xmm3, %xmm5 paddq %xmm4, %xmm0 psrlq $63, %xmm3 psllq $1, %xmm5 pxor %xmm0, %xmm2 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 psrlq $63, %xmm2 psllq $1, %xmm5 pxor %xmm5, %xmm2 movdqa %xmm3, %xmm5 movdqa %xmm2, %xmm10 punpcklqdq %xmm2, %xmm2 punpcklqdq %xmm3, %xmm5 punpckhqdq %xmm5, %xmm10 movdqa %xmm10, %xmm7 movdqa 144(%rsp), %xmm10 punpckhqdq %xmm2, %xmm3 movdqa %xmm9, %xmm5 movdqa %xmm4, %xmm2 punpcklqdq %xmm9, %xmm9 paddq %xmm7, %xmm10 punpcklqdq %xmm4, %xmm2 punpckhqdq %xmm2, %xmm5 movdqa %xmm5, %xmm2 paddq %xmm10, %xmm14 punpckhqdq %xmm9, %xmm4 movdqa 160(%rsp), %xmm10 pxor %xmm14, %xmm2 movdqa %xmm2, %xmm9 psrlq $32, %xmm2 paddq %xmm3, %xmm10 psllq $32, %xmm9 paddq %xmm10, %xmm13 pxor %xmm9, %xmm2 paddq %xmm2, %xmm0 movdqa 192(%rsp), %xmm10 pxor %xmm13, %xmm4 movdqa %xmm4, %xmm9 psrlq $32, %xmm4 pxor %xmm0, %xmm7 psllq $32, %xmm9 pxor %xmm9, %xmm4 movdqa %xmm7, %xmm9 paddq %xmm4, %xmm1 psrlq $24, %xmm7 psllq $40, %xmm9 pxor %xmm1, %xmm3 pxor %xmm9, %xmm7 movdqa %xmm3, %xmm9 paddq %xmm7, %xmm8 psrlq $24, %xmm3 psllq $40, %xmm9 paddq %xmm8, %xmm14 pxor %xmm9, %xmm3 paddq %xmm3, %xmm10 pxor %xmm14, %xmm2 paddq %xmm10, %xmm13 movdqa %xmm2, %xmm10 psllq $48, %xmm10 pxor %xmm13, %xmm4 psrlq $16, %xmm2 pxor %xmm10, %xmm2 movdqa %xmm4, %xmm10 paddq %xmm2, %xmm0 psrlq $16, %xmm4 psllq $48, %xmm10 pxor %xmm0, %xmm7 pxor %xmm10, %xmm4 movdqa %xmm7, %xmm10 paddq %xmm4, %xmm1 psrlq $63, %xmm7 psllq $1, %xmm10 pxor %xmm1, %xmm3 movdqa %xmm4, %xmm8 punpcklqdq %xmm4, %xmm4 pxor %xmm10, %xmm7 movdqa %xmm3, %xmm10 psrlq $63, %xmm3 psllq $1, %xmm10 pxor %xmm10, %xmm3 movdqa %xmm2, %xmm10 punpcklqdq %xmm2, %xmm10 punpckhqdq %xmm4, %xmm2 movdqa %xmm3, %xmm4 punpckhqdq %xmm10, %xmm8 punpcklqdq %xmm3, %xmm4 movdqa %xmm7, %xmm10 punpcklqdq %xmm7, %xmm7 punpckhqdq %xmm7, %xmm3 movdqa 208(%rsp), %xmm7 punpckhqdq %xmm4, %xmm10 movdqa %xmm10, %xmm4 movdqa 112(%rsp), %xmm6 movdqa 128(%rsp), %xmm11 paddq %xmm10, %xmm7 paddq %xmm7, %xmm14 paddq %xmm3, %xmm6 movdqa 320(%rsp), %xmm12 pxor %xmm14, %xmm8 movdqa %xmm8, %xmm7 paddq %xmm6, %xmm13 psrlq $32, %xmm8 psllq $32, %xmm7 pxor %xmm13, %xmm2 movdqa 224(%rsp), %xmm6 movaps 432(%rsp), %xmm9 pxor %xmm7, %xmm8 movdqa %xmm2, %xmm7 paddq %xmm8, %xmm1 psllq $32, %xmm7 pxor %xmm1, %xmm4 movaps 448(%rsp), %xmm10 psrlq $32, %xmm2 pxor %xmm7, %xmm2 movdqa %xmm4, %xmm7 psrlq $24, %xmm4 paddq %xmm2, %xmm0 psllq $40, %xmm7 pxor %xmm0, %xmm3 pxor %xmm7, %xmm4 paddq %xmm4, %xmm6 movdqa %xmm3, %xmm7 paddq %xmm6, %xmm14 psllq $40, %xmm7 movdqa 240(%rsp), %xmm6 psrlq $24, %xmm3 pxor %xmm14, %xmm8 pxor %xmm7, %xmm3 movdqa %xmm8, %xmm7 paddq %xmm3, %xmm6 psrlq $16, %xmm8 paddq %xmm6, %xmm13 psllq $48, %xmm7 movdqa 256(%rsp), %xmm6 pxor %xmm7, %xmm8 pxor %xmm13, %xmm2 movdqa %xmm2, %xmm7 paddq %xmm8, %xmm1 psllq $48, %xmm7 pxor %xmm1, %xmm4 psrlq $16, %xmm2 pxor %xmm7, %xmm2 movdqa %xmm4, %xmm7 paddq %xmm2, %xmm0 psrlq $63, %xmm4 psllq $1, %xmm7 pxor %xmm0, %xmm3 pxor %xmm7, %xmm4 movdqa %xmm3, %xmm7 psrlq $63, %xmm3 psllq $1, %xmm7 pxor %xmm7, %xmm3 movdqa %xmm4, %xmm7 punpcklqdq %xmm4, %xmm7 movdqa %xmm7, %xmm5 movdqa %xmm3, %xmm7 punpcklqdq %xmm3, %xmm3 punpckhqdq %xmm5, %xmm7 movdqa %xmm7, %xmm5 movdqa %xmm2, %xmm7 punpckhqdq %xmm3, %xmm4 punpcklqdq %xmm2, %xmm7 paddq %xmm5, %xmm11 movdqa %xmm7, %xmm3 paddq %xmm4, %xmm6 paddq %xmm11, %xmm14 movdqa %xmm8, %xmm7 paddq %xmm6, %xmm13 punpcklqdq %xmm8, %xmm8 punpckhqdq %xmm3, %xmm7 movdqa %xmm7, %xmm3 punpckhqdq %xmm8, %xmm2 pxor %xmm13, %xmm2 movdqa 304(%rsp), %xmm11 pxor %xmm14, %xmm3 movdqa %xmm3, %xmm6 psrlq $32, %xmm3 movaps 416(%rsp), %xmm8 psllq $32, %xmm6 pxor %xmm6, %xmm3 movdqa %xmm2, %xmm6 paddq %xmm3, %xmm0 psrlq $32, %xmm2 psllq $32, %xmm6 pxor %xmm0, %xmm5 pxor %xmm6, %xmm2 movdqa %xmm5, %xmm6 paddq %xmm2, %xmm1 psrlq $24, %xmm5 psllq $40, %xmm6 pxor %xmm1, %xmm4 pxor %xmm6, %xmm5 movdqa %xmm4, %xmm6 psrlq $24, %xmm4 paddq %xmm5, %xmm15 psllq $40, %xmm6 paddq %xmm15, %xmm14 movaps 528(%rsp), %xmm15 pxor %xmm6, %xmm4 pxor %xmm14, %xmm3 movdqa 288(%rsp), %xmm6 paddq %xmm4, %xmm6 paddq %xmm6, %xmm13 movdqa %xmm3, %xmm6 psllq $48, %xmm6 pxor %xmm13, %xmm2 psrlq $16, %xmm3 pxor %xmm6, %xmm3 movdqa %xmm2, %xmm6 psrlq $16, %xmm2 paddq %xmm3, %xmm0 psllq $48, %xmm6 pxor %xmm0, %xmm5 pxor %xmm6, %xmm2 paddq %xmm2, %xmm1 movdqa %xmm5, %xmm6 pxor %xmm1, %xmm4 movdqa %xmm4, %xmm7 psllq $1, %xmm6 psllq $1, %xmm7 psrlq $63, %xmm5 psrlq $63, %xmm4 pxor %xmm6, %xmm5 movdqa %xmm3, %xmm6 pxor %xmm7, %xmm4 movdqa %xmm2, %xmm7 punpcklqdq %xmm3, %xmm6 punpcklqdq %xmm2, %xmm2 punpckhqdq %xmm6, %xmm7 movdqa %xmm4, %xmm6 punpckhqdq %xmm2, %xmm3 punpcklqdq %xmm4, %xmm6 movdqa %xmm6, %xmm2 movdqa %xmm5, %xmm6 punpcklqdq %xmm5, %xmm5 punpckhqdq %xmm2, %xmm6 paddq %xmm6, %xmm11 punpckhqdq %xmm5, %xmm4 movdqa %xmm6, %xmm2 paddq %xmm11, %xmm14 paddq %xmm4, %xmm12 movdqa 96(%rsp), %xmm5 pxor %xmm14, %xmm7 movdqa %xmm7, %xmm6 paddq %xmm12, %xmm13 psrlq $32, %xmm7 psllq $32, %xmm6 pxor %xmm13, %xmm3 movdqa 336(%rsp), %xmm11 movaps 480(%rsp), %xmm12 pxor %xmm6, %xmm7 movdqa %xmm3, %xmm6 paddq %xmm7, %xmm1 psllq $32, %xmm6 pxor %xmm1, %xmm2 psrlq $32, %xmm3 pxor %xmm6, %xmm3 movdqa %xmm2, %xmm6 paddq %xmm3, %xmm0 psrlq $24, %xmm2 psllq $40, %xmm6 pxor %xmm0, %xmm4 pxor %xmm6, %xmm2 movdqa %xmm4, %xmm6 paddq %xmm2, %xmm11 psrlq $24, %xmm4 psllq $40, %xmm6 paddq %xmm14, %xmm11 movaps 512(%rsp), %xmm14 pxor %xmm6, %xmm4 paddq %xmm4, %xmm5 pxor %xmm11, %xmm7 paddq %xmm5, %xmm13 movdqa %xmm7, %xmm5 psllq $48, %xmm5 pxor %xmm13, %xmm3 psrlq $16, %xmm7 pxor %xmm5, %xmm7 movdqa %xmm3, %xmm5 paddq %xmm7, %xmm1 psrlq $16, %xmm3 psllq $48, %xmm5 pxor %xmm1, %xmm2 pxor %xmm5, %xmm3 movdqa %xmm2, %xmm5 paddq %xmm3, %xmm0 psrlq $63, %xmm2 psllq $1, %xmm5 pxor %xmm0, %xmm4 pxor %xmm5, %xmm2 movdqa %xmm4, %xmm5 psrlq $63, %xmm4 psllq $1, %xmm5 pxor %xmm5, %xmm4 movdqa %xmm2, %xmm5 movdqa %xmm4, %xmm6 punpcklqdq %xmm4, %xmm4 punpcklqdq %xmm2, %xmm5 punpckhqdq %xmm4, %xmm2 punpckhqdq %xmm5, %xmm6 movdqa %xmm3, %xmm4 movdqa %xmm6, %xmm5 movdqa %xmm7, %xmm6 punpcklqdq %xmm3, %xmm4 punpcklqdq %xmm7, %xmm7 punpckhqdq %xmm4, %xmm6 movdqa %xmm6, %xmm4 movdqu (%rcx), %xmm6 punpckhqdq %xmm7, %xmm3 pxor %xmm4, %xmm5 pxor %xmm3, %xmm2 movaps 400(%rsp), %xmm7 pxor %xmm6, %xmm11 movdqu 16(%rcx), %xmm6 pxor %xmm11, %xmm0 movups %xmm0, (%rcx) movaps 464(%rsp), %xmm11 pxor %xmm6, %xmm13 movdqu 32(%rcx), %xmm6 pxor %xmm13, %xmm1 movups %xmm1, 16(%rcx) movaps 496(%rsp), %xmm13 pxor %xmm6, %xmm5 movdqu 48(%rcx), %xmm6 movups %xmm5, 32(%rcx) pxor %xmm6, %xmm2 movaps 384(%rsp), %xmm6 movups %xmm2, 48(%rcx) addq $552, %rsp {$IF DEFINED(UNIX)} popq %rdx popq %rcx {$ENDIF} end; ������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/blake2_pas.inc������������������������������������������0000644�0001750�0000144�00000030774�15104114162�022536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Implementations of BLAKE2b, BLAKE2s, aimed at portability and simplicity Copyright (C) 2018 Alexander Koblov (alexx2000@mail.ru) Based on blake2*.pas, (C) Copyright 2017 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. } const blake2s_sigma: array[0..9] of array[0..15] of cuint8 = ( ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) , ( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) , ( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ) , ( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ) , ( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ) , ( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ) , ( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ) , ( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ) , ( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ) , ( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 ) ); const blake2b_sigma: array[0..11] of array[0..15] of cuint8 = ( ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) , ( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) , ( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ) , ( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ) , ( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ) , ( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ) , ( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ) , ( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ) , ( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ) , ( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 ) , ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) , ( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) ); function blake2s_compress_pas( S: Pblake2s_state; const block: pcuint8 ): cint; var i: csize_t; tem, round: cint32; m: array[0..15] of cuint32; v: array[0..15] of cuint32; begin for i := 0 to 15 do m[i] := load32( @block[i * sizeof( m[i] )] ); for i := 0 to 7 do v[i] := S^.h[i]; v[ 8] := blake2s_IV[0]; v[ 9] := blake2s_IV[1]; v[10] := blake2s_IV[2]; v[11] := blake2s_IV[3]; v[12] := S^.t[0] xor blake2s_IV[4]; v[13] := S^.t[1] xor blake2s_IV[5]; v[14] := S^.f[0] xor blake2s_IV[6]; v[15] := S^.f[1] xor blake2s_IV[7]; {Code contributed by EddyHawk} for round:=0 to 9 do begin {separates BLAKE2s round into quarter-rounds} {replaces the rotr with direct code} {uses tem var for xor-ed words} {moves message-additions to the front} {regroups the rest} v[ 0] := (v[ 0] + v[ 4]) + m[blake2s_sigma[round][ 0]]; v[ 1] := (v[ 1] + v[ 5]) + m[blake2s_sigma[round][ 2]]; v[ 2] := (v[ 2] + v[ 6]) + m[blake2s_sigma[round][ 4]]; v[ 3] := (v[ 3] + v[ 7]) + m[blake2s_sigma[round][ 6]]; tem := v[12] xor v[ 0]; v[12] := (tem shr 16) or (tem shl (32-16)); tem := v[13] xor v[ 1]; v[13] := (tem shr 16) or (tem shl (32-16)); tem := v[14] xor v[ 2]; v[14] := (tem shr 16) or (tem shl (32-16)); tem := v[15] xor v[ 3]; v[15] := (tem shr 16) or (tem shl (32-16)); v[ 8] := v[ 8] + v[12]; v[ 9] := v[ 9] + v[13]; v[10] := v[10] + v[14]; v[11] := v[11] + v[15]; tem := v[ 4] xor v[ 8]; v[ 4] := (tem shr 12) or (tem shl (32-12)); tem := v[ 5] xor v[ 9]; v[ 5] := (tem shr 12) or (tem shl (32-12)); tem := v[ 6] xor v[10]; v[ 6] := (tem shr 12) or (tem shl (32-12)); tem := v[ 7] xor v[11]; v[ 7] := (tem shr 12) or (tem shl (32-12)); {2nd quarter-round} v[ 0] := (v[ 0] + v[ 4]) + m[blake2s_sigma[round][ 1]]; v[ 1] := (v[ 1] + v[ 5]) + m[blake2s_sigma[round][ 3]]; v[ 2] := (v[ 2] + v[ 6]) + m[blake2s_sigma[round][ 5]]; v[ 3] := (v[ 3] + v[ 7]) + m[blake2s_sigma[round][ 7]]; tem := v[12] xor v[ 0]; v[12] := (tem shr 8) or (tem shl (32- 8)); tem := v[13] xor v[ 1]; v[13] := (tem shr 8) or (tem shl (32- 8)); tem := v[14] xor v[ 2]; v[14] := (tem shr 8) or (tem shl (32- 8)); tem := v[15] xor v[ 3]; v[15] := (tem shr 8) or (tem shl (32- 8)); v[ 8] := v[ 8] + v[12]; v[ 9] := v[ 9] + v[13]; v[10] := v[10] + v[14]; v[11] := v[11] + v[15]; tem := v[ 4] xor v[ 8]; v[ 4] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 5] xor v[ 9]; v[ 5] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 6] xor v[10]; v[ 6] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 7] xor v[11]; v[ 7] := (tem shr 7) or (tem shl (32- 7)); {3rd quarter-round} v[ 0] := (v[ 0] + v[ 5]) + m[blake2s_sigma[round][ 8]]; v[ 1] := (v[ 1] + v[ 6]) + m[blake2s_sigma[round][10]]; v[ 2] := (v[ 2] + v[ 7]) + m[blake2s_sigma[round][12]]; v[ 3] := (v[ 3] + v[ 4]) + m[blake2s_sigma[round][14]]; tem := v[15] xor v[ 0]; v[15] := (tem shr 16) or (tem shl (32-16)); tem := v[12] xor v[ 1]; v[12] := (tem shr 16) or (tem shl (32-16)); tem := v[13] xor v[ 2]; v[13] := (tem shr 16) or (tem shl (32-16)); tem := v[14] xor v[ 3]; v[14] := (tem shr 16) or (tem shl (32-16)); v[10] := v[10] + v[15]; v[11] := v[11] + v[12]; v[ 8] := v[ 8] + v[13]; v[ 9] := v[ 9] + v[14]; tem := v[ 5] xor v[10]; v[ 5] := (tem shr 12) or (tem shl (32-12)); tem := v[ 6] xor v[11]; v[ 6] := (tem shr 12) or (tem shl (32-12)); tem := v[ 7] xor v[ 8]; v[ 7] := (tem shr 12) or (tem shl (32-12)); tem := v[ 4] xor v[ 9]; v[ 4] := (tem shr 12) or (tem shl (32-12)); {4th quarter-round} v[ 0] := (v[ 0] + v[ 5]) + m[blake2s_sigma[round][ 9]]; v[ 1] := (v[ 1] + v[ 6]) + m[blake2s_sigma[round][11]]; v[ 2] := (v[ 2] + v[ 7]) + m[blake2s_sigma[round][13]]; v[ 3] := (v[ 3] + v[ 4]) + m[blake2s_sigma[round][15]]; tem := v[15] xor v[ 0]; v[15] := (tem shr 8) or (tem shl (32- 8)); tem := v[12] xor v[ 1]; v[12] := (tem shr 8) or (tem shl (32- 8)); tem := v[13] xor v[ 2]; v[13] := (tem shr 8) or (tem shl (32- 8)); tem := v[14] xor v[ 3]; v[14] := (tem shr 8) or (tem shl (32- 8)); v[10] := v[10] + v[15]; v[11] := v[11] + v[12]; v[ 8] := v[ 8] + v[13]; v[ 9] := v[ 9] + v[14]; tem := v[ 5] xor v[10]; v[ 5] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 6] xor v[11]; v[ 6] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 7] xor v[ 8]; v[ 7] := (tem shr 7) or (tem shl (32- 7)); tem := v[ 4] xor v[ 9]; v[ 4] := (tem shr 7) or (tem shl (32- 7)); end; for i := 0 to 7 do S^.h[i] := S^.h[i] xor v[i] xor v[i + 8]; Result := 0; end; procedure blake2b_compress_pas( S: Pblake2b_state; const block: pcuint8 ); var tem: cint64; i, round: csize_t; m: array[0..15] of cuint64; v: array[0..15] of cuint64; begin for i := 0 to 15 do m[i] := load64( block + i * sizeof( m[i] ) ); for i := 0 to 7 do v[i] := S^.h[i]; v[ 8] := cuint64(blake2b_IV[0]); v[ 9] := cuint64(blake2b_IV[1]); v[10] := cuint64(blake2b_IV[2]); v[11] := cuint64(blake2b_IV[3]); v[12] := cuint64(blake2b_IV[4] xor S^.t[0]); v[13] := cuint64(blake2b_IV[5] xor S^.t[1]); v[14] := cuint64(blake2b_IV[6] xor S^.f[0]); v[15] := cuint64(blake2b_IV[7] xor S^.f[1]); {do 12 rounds} for round:=0 to 11 do begin {** EddyHawk speed-ups **} {use same rearrangements as blake2s' 32/64 bit code} v[ 0] := (v[ 0] + v[ 4]) + m[blake2b_sigma[round][ 0]]; v[ 1] := (v[ 1] + v[ 5]) + m[blake2b_sigma[round][ 2]]; v[ 2] := (v[ 2] + v[ 6]) + m[blake2b_sigma[round][ 4]]; v[ 3] := (v[ 3] + v[ 7]) + m[blake2b_sigma[round][ 6]]; tem := v[12] xor v[ 0]; v[12] := (tem shr 32) or (tem shl (64-32)); tem := v[13] xor v[ 1]; v[13] := (tem shr 32) or (tem shl (64-32)); tem := v[14] xor v[ 2]; v[14] := (tem shr 32) or (tem shl (64-32)); tem := v[15] xor v[ 3]; v[15] := (tem shr 32) or (tem shl (64-32)); v[ 8] := v[ 8] + v[12]; v[ 9] := v[ 9] + v[13]; v[10] := v[10] + v[14]; v[11] := v[11] + v[15]; tem := v[ 4] xor v[ 8]; v[ 4] := (tem shr 24) or (tem shl (64-24)); tem := v[ 5] xor v[ 9]; v[ 5] := (tem shr 24) or (tem shl (64-24)); tem := v[ 6] xor v[10]; v[ 6] := (tem shr 24) or (tem shl (64-24)); tem := v[ 7] xor v[11]; v[ 7] := (tem shr 24) or (tem shl (64-24)); {---} v[ 0] := (v[ 0] + v[ 4]) + m[blake2b_sigma[round][ 1]]; v[ 1] := (v[ 1] + v[ 5]) + m[blake2b_sigma[round][ 3]]; v[ 2] := (v[ 2] + v[ 6]) + m[blake2b_sigma[round][ 5]]; v[ 3] := (v[ 3] + v[ 7]) + m[blake2b_sigma[round][ 7]]; tem := v[12] xor v[ 0]; v[12] := (tem shr 16) or (tem shl (64-16)); tem := v[13] xor v[ 1]; v[13] := (tem shr 16) or (tem shl (64-16)); tem := v[14] xor v[ 2]; v[14] := (tem shr 16) or (tem shl (64-16)); tem := v[15] xor v[ 3]; v[15] := (tem shr 16) or (tem shl (64-16)); v[ 8] := v[ 8] + v[12]; v[ 9] := v[ 9] + v[13]; v[10] := v[10] + v[14]; v[11] := v[11] + v[15]; tem := v[ 4] xor v[ 8]; v[ 4] := (tem shr 63) or (tem shl (64-63)); tem := v[ 5] xor v[ 9]; v[ 5] := (tem shr 63) or (tem shl (64-63)); tem := v[ 6] xor v[10]; v[ 6] := (tem shr 63) or (tem shl (64-63)); tem := v[ 7] xor v[11]; v[ 7] := (tem shr 63) or (tem shl (64-63)); {---} v[ 0] := (v[ 0] + v[ 5]) + m[blake2b_sigma[round][ 8]]; v[ 1] := (v[ 1] + v[ 6]) + m[blake2b_sigma[round][10]]; v[ 2] := (v[ 2] + v[ 7]) + m[blake2b_sigma[round][12]]; v[ 3] := (v[ 3] + v[ 4]) + m[blake2b_sigma[round][14]]; tem := v[15] xor v[ 0]; v[15] := (tem shr 32) or (tem shl (64-32)); tem := v[12] xor v[ 1]; v[12] := (tem shr 32) or (tem shl (64-32)); tem := v[13] xor v[ 2]; v[13] := (tem shr 32) or (tem shl (64-32)); tem := v[14] xor v[ 3]; v[14] := (tem shr 32) or (tem shl (64-32)); v[10] := v[10] + v[15]; v[11] := v[11] + v[12]; v[ 8] := v[ 8] + v[13]; v[ 9] := v[ 9] + v[14]; tem := v[ 5] xor v[10]; v[ 5] := (tem shr 24) or (tem shl (64-24)); tem := v[ 6] xor v[11]; v[ 6] := (tem shr 24) or (tem shl (64-24)); tem := v[ 7] xor v[ 8]; v[ 7] := (tem shr 24) or (tem shl (64-24)); tem := v[ 4] xor v[ 9]; v[ 4] := (tem shr 24) or (tem shl (64-24)); {---} v[ 0] := (v[ 0] + v[ 5]) + m[blake2b_sigma[round][ 9]]; v[ 1] := (v[ 1] + v[ 6]) + m[blake2b_sigma[round][11]]; v[ 2] := (v[ 2] + v[ 7]) + m[blake2b_sigma[round][13]]; v[ 3] := (v[ 3] + v[ 4]) + m[blake2b_sigma[round][15]]; tem := v[15] xor v[ 0]; v[15] := (tem shr 16) or (tem shl (64-16)); tem := v[12] xor v[ 1]; v[12] := (tem shr 16) or (tem shl (64-16)); tem := v[13] xor v[ 2]; v[13] := (tem shr 16) or (tem shl (64-16)); tem := v[14] xor v[ 3]; v[14] := (tem shr 16) or (tem shl (64-16)); v[10] := v[10] + v[15]; v[11] := v[11] + v[12]; v[ 8] := v[ 8] + v[13]; v[ 9] := v[ 9] + v[14]; tem := v[ 5] xor v[10]; v[ 5] := (tem shr 63) or (tem shl (64-63)); tem := v[ 6] xor v[11]; v[ 6] := (tem shr 63) or (tem shl (64-63)); tem := v[ 7] xor v[ 8]; v[ 7] := (tem shr 63) or (tem shl (64-63)); tem := v[ 4] xor v[ 9]; v[ 4] := (tem shr 63) or (tem shl (64-63)); end; for i := 0 to 7 do S^.h[i] := S^.h[i] xor v[i] xor v[i + 8]; end; ����doublecmd-1.1.30/components/kascrypt/Hashes/blake2_avx.inc������������������������������������������0000755�0001750�0000144�00000150476�15104114162�022556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Implementations of BLAKE2b, BLAKE2s, optimized for speed on CPUs supporting AVX } {$CODEALIGN CONSTMIN=32} const BLAKE2S_LC0: array[0..15] of cuint8 = (2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13); BLAKE2S_LC1: array[0..15] of cuint8 = (1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12); BLAKE2B_LC0: array[0..15] of cuint8 = (3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10); BLAKE2B_LC1: array[0..15] of cuint8 = (2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9); function blake2s_compress_avx( S: Pblake2s_state; const block: pcuint8 ): cint; assembler; nostackframe; asm .balign 32 {$IF DEFINED(UNIX)} pushq %rcx movq %rdi, %rcx pushq %rdx movq %rsi, %rdx {$ENDIF} subq $168, %rsp vmovaps %xmm6, (%rsp) vmovaps %xmm7, 16(%rsp) vmovaps %xmm8, 32(%rsp) vmovaps %xmm9, 48(%rsp) vmovaps %xmm10, 64(%rsp) vmovaps %xmm11, 80(%rsp) vmovaps %xmm12, 96(%rsp) vmovaps %xmm13, 112(%rsp) vmovaps %xmm14, 128(%rsp) vmovaps %xmm15, 144(%rsp) vmovdqu (%rdx), %xmm4 vmovdqu 16(%rdx), %xmm3 vmovdqu 16(%rcx), %xmm9 vpaddd (%rcx), %xmm9, %xmm1 vshufps $136, %xmm3, %xmm4, %xmm0 vmovdqu 32(%rcx), %xmm7 vshufps $221, %xmm3, %xmm4, %xmm10 vpaddd %xmm0, %xmm1, %xmm1 vpxor blake2s_IV_2(%rip), %xmm7, %xmm0 vmovdqu 32(%rdx), %xmm2 vmovdqa BLAKE2S_LC0(%rip), %xmm7 vpxor %xmm1, %xmm0, %xmm0 vpaddd %xmm10, %xmm1, %xmm1 vmovdqu 48(%rdx), %xmm5 vpsrldq $4, %xmm2, %xmm15 vpshufb %xmm7, %xmm0, %xmm0 vpaddd blake2s_IV(%rip), %xmm0, %xmm8 vpshufd $30, %xmm5, %xmm13 vpblendw $12, %xmm3, %xmm5, %xmm14 vpxor %xmm8, %xmm9, %xmm6 vpslld $20, %xmm6, %xmm11 vpsrld $12, %xmm6, %xmm6 vpxor %xmm11, %xmm6, %xmm11 vmovdqa BLAKE2S_LC1(%rip), %xmm6 vpaddd %xmm11, %xmm1, %xmm1 vpxor %xmm1, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpshufd $78, %xmm0, %xmm0 vpxor %xmm8, %xmm11, %xmm11 vpslld $25, %xmm11, %xmm10 vpshufd $57, %xmm8, %xmm8 vpsrld $7, %xmm11, %xmm11 vpxor %xmm10, %xmm11, %xmm11 vpshufd $147, %xmm1, %xmm10 vpshufd $225, %xmm2, %xmm1 vpblendw $195, %xmm13, %xmm1, %xmm12 vpaddd %xmm12, %xmm10, %xmm10 vpblendw $60, %xmm13, %xmm1, %xmm1 vpblendw $192, %xmm5, %xmm3, %xmm13 vpaddd %xmm11, %xmm10, %xmm10 vpshufd $177, %xmm1, %xmm1 vpxor %xmm10, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpxor %xmm8, %xmm11, %xmm11 vpslld $20, %xmm11, %xmm12 vpsrld $12, %xmm11, %xmm11 vpxor %xmm12, %xmm11, %xmm11 vpaddd %xmm11, %xmm1, %xmm1 vpaddd %xmm10, %xmm1, %xmm1 vpxor %xmm1, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpshufd $57, %xmm1, %xmm10 vpxor %xmm8, %xmm11, %xmm11 vpslld $25, %xmm11, %xmm12 vpshufd $78, %xmm0, %xmm0 vpshufd $147, %xmm8, %xmm8 vpsrld $7, %xmm11, %xmm11 vpxor %xmm12, %xmm11, %xmm11 vpslldq $4, %xmm5, %xmm1 vpblendw $12, %xmm2, %xmm3, %xmm12 vpblendw $240, %xmm1, %xmm12, %xmm12 vpshufd $147, %xmm12, %xmm12 vpaddd %xmm12, %xmm10, %xmm10 vpaddd %xmm11, %xmm10, %xmm10 vpxor %xmm10, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpxor %xmm8, %xmm11, %xmm12 vpslld $20, %xmm12, %xmm11 vpsrld $12, %xmm12, %xmm12 vpxor %xmm11, %xmm12, %xmm12 vpshufd $8, %xmm2, %xmm11 vpblendw $240, %xmm13, %xmm11, %xmm11 vpshufd $177, %xmm11, %xmm11 vpaddd %xmm12, %xmm11, %xmm11 vpaddd %xmm10, %xmm11, %xmm10 vpxor %xmm10, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpshufd $147, %xmm10, %xmm10 vpxor %xmm8, %xmm12, %xmm12 vpslld $25, %xmm12, %xmm11 vpshufd $78, %xmm0, %xmm0 vpshufd $57, %xmm8, %xmm8 vpsrld $7, %xmm12, %xmm12 vpxor %xmm11, %xmm12, %xmm12 vpslldq $4, %xmm3, %xmm11 vpblendw $48, %xmm11, %xmm2, %xmm11 vpblendw $240, %xmm11, %xmm4, %xmm11 vpshufd $198, %xmm11, %xmm11 vpaddd %xmm11, %xmm10, %xmm11 vpaddd %xmm12, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpxor %xmm8, %xmm12, %xmm10 vpslld $20, %xmm10, %xmm12 vpsrld $12, %xmm10, %xmm10 vpxor %xmm12, %xmm10, %xmm10 vpunpckhdq %xmm3, %xmm4, %xmm12 vpblendw $12, %xmm1, %xmm12, %xmm13 vpshufd $198, %xmm13, %xmm13 vpaddd %xmm10, %xmm13, %xmm13 vpaddd %xmm11, %xmm13, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpshufd $57, %xmm11, %xmm11 vpxor %xmm8, %xmm10, %xmm10 vpslld $25, %xmm10, %xmm13 vpshufd $78, %xmm0, %xmm0 vpshufd $147, %xmm8, %xmm8 vpsrld $7, %xmm10, %xmm10 vpxor %xmm13, %xmm10, %xmm10 vpunpckhdq %xmm5, %xmm2, %xmm13 vpblendw $15, %xmm14, %xmm13, %xmm13 vpslldq $8, %xmm5, %xmm14 vpshufd $210, %xmm13, %xmm13 vpaddd %xmm13, %xmm11, %xmm11 vpaddd %xmm10, %xmm11, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpxor %xmm8, %xmm10, %xmm10 vpslld $20, %xmm10, %xmm11 vpsrld $12, %xmm10, %xmm10 vpxor %xmm11, %xmm10, %xmm10 vpunpckldq %xmm4, %xmm2, %xmm11 vpblendw $240, %xmm4, %xmm11, %xmm11 vpblendw $192, %xmm14, %xmm11, %xmm11 vpsrldq $12, %xmm3, %xmm14 vpaddd %xmm11, %xmm10, %xmm11 vpaddd %xmm13, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpshufd $147, %xmm11, %xmm11 vpxor %xmm8, %xmm10, %xmm10 vpslld $25, %xmm10, %xmm13 vpshufd $78, %xmm0, %xmm0 vpshufd $57, %xmm8, %xmm8 vpsrld $7, %xmm10, %xmm10 vpxor %xmm13, %xmm10, %xmm10 vpblendw $60, %xmm2, %xmm4, %xmm13 vpblendw $3, %xmm14, %xmm13, %xmm13 vpunpckhdq %xmm2, %xmm12, %xmm14 vpblendw $12, %xmm5, %xmm14, %xmm14 vpshufd $57, %xmm13, %xmm13 vpaddd %xmm13, %xmm11, %xmm11 vpshufd $210, %xmm14, %xmm14 vpaddd %xmm10, %xmm11, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm8, %xmm8 vpxor %xmm8, %xmm10, %xmm10 vpslld $20, %xmm10, %xmm13 vpsrld $12, %xmm10, %xmm10 vpxor %xmm13, %xmm10, %xmm10 vpblendw $51, %xmm3, %xmm4, %xmm13 vpblendw $192, %xmm1, %xmm13, %xmm1 vpshufd $108, %xmm1, %xmm1 vpaddd %xmm10, %xmm1, %xmm1 vpaddd %xmm11, %xmm1, %xmm11 vpxor %xmm11, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm13 vpaddd %xmm13, %xmm8, %xmm8 vpshufd $57, %xmm11, %xmm11 vpxor %xmm8, %xmm10, %xmm10 vpaddd %xmm14, %xmm11, %xmm11 vpslld $25, %xmm10, %xmm0 vpshufd $78, %xmm13, %xmm13 vpsrld $7, %xmm10, %xmm10 vpshufd $147, %xmm8, %xmm8 vpxor %xmm0, %xmm10, %xmm10 vpaddd %xmm10, %xmm11, %xmm11 vpxor %xmm11, %xmm13, %xmm13 vpshufb %xmm7, %xmm13, %xmm1 vpaddd %xmm1, %xmm8, %xmm8 vpxor %xmm8, %xmm10, %xmm0 vpslld $20, %xmm0, %xmm13 vpblendw $12, %xmm4, %xmm5, %xmm10 vpsrld $12, %xmm0, %xmm0 vpxor %xmm13, %xmm0, %xmm0 vpslldq $8, %xmm2, %xmm13 vpblendw $192, %xmm13, %xmm10, %xmm10 vpshufd $135, %xmm10, %xmm10 vpaddd %xmm0, %xmm10, %xmm10 vpaddd %xmm11, %xmm10, %xmm10 vpxor %xmm10, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm14 vpaddd %xmm14, %xmm8, %xmm8 vpshufd $147, %xmm10, %xmm10 vpxor %xmm8, %xmm0, %xmm0 vpslld $25, %xmm0, %xmm13 vpshufd $57, %xmm8, %xmm8 vpshufd $78, %xmm14, %xmm14 vpsrld $7, %xmm0, %xmm0 vpxor %xmm13, %xmm0, %xmm0 vpblendw $15, %xmm3, %xmm4, %xmm13 vpblendw $192, %xmm5, %xmm13, %xmm13 vpshufd $27, %xmm13, %xmm13 vpaddd %xmm13, %xmm10, %xmm10 vpaddd %xmm0, %xmm10, %xmm11 vpalignr $4, %xmm3, %xmm4, %xmm10 vpxor %xmm11, %xmm14, %xmm14 vpshufb %xmm7, %xmm14, %xmm14 vpaddd %xmm14, %xmm8, %xmm1 vpblendw $51, %xmm2, %xmm10, %xmm10 vpxor %xmm1, %xmm0, %xmm13 vpslld $20, %xmm13, %xmm0 vpsrld $12, %xmm13, %xmm13 vpxor %xmm0, %xmm13, %xmm13 vpaddd %xmm10, %xmm13, %xmm10 vpaddd %xmm11, %xmm10, %xmm10 vpunpcklqdq %xmm2, %xmm3, %xmm11 vpxor %xmm10, %xmm14, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpunpcklqdq %xmm3, %xmm4, %xmm14 vpxor %xmm1, %xmm13, %xmm13 vpslld $25, %xmm13, %xmm8 vpshufd $57, %xmm10, %xmm10 vpshufd $78, %xmm0, %xmm0 vpsrld $7, %xmm13, %xmm13 vpshufd $147, %xmm1, %xmm1 vpxor %xmm8, %xmm13, %xmm13 vpunpckhqdq %xmm2, %xmm4, %xmm8 vpblendw $51, %xmm8, %xmm11, %xmm8 vpshufd $135, %xmm8, %xmm8 vpaddd %xmm8, %xmm10, %xmm10 vpaddd %xmm13, %xmm10, %xmm10 vpxor %xmm10, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm13, %xmm13 vpslld $20, %xmm13, %xmm8 vpsrld $12, %xmm13, %xmm13 vpxor %xmm8, %xmm13, %xmm13 vpunpckhqdq %xmm5, %xmm3, %xmm8 vpblendw $51, %xmm14, %xmm8, %xmm8 vpunpckhqdq %xmm4, %xmm2, %xmm14 vpaddd %xmm8, %xmm13, %xmm8 vpaddd %xmm10, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $147, %xmm8, %xmm8 vpxor %xmm1, %xmm13, %xmm13 vpslld $25, %xmm13, %xmm10 vpshufd $78, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpsrld $7, %xmm13, %xmm13 vpxor %xmm10, %xmm13, %xmm13 vpunpckhqdq %xmm3, %xmm5, %xmm10 vpblendw $51, %xmm10, %xmm14, %xmm14 vpblendw $3, %xmm2, %xmm4, %xmm10 vpshufd $147, %xmm14, %xmm14 vpaddd %xmm14, %xmm8, %xmm8 vpaddd %xmm13, %xmm8, %xmm14 vpxor %xmm14, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm13, %xmm13 vpslld $20, %xmm13, %xmm8 vpsrld $12, %xmm13, %xmm13 vpxor %xmm8, %xmm13, %xmm13 vpslldq $8, %xmm10, %xmm8 vpblendw $15, %xmm5, %xmm8, %xmm8 vpshufd $141, %xmm8, %xmm8 vpaddd %xmm13, %xmm8, %xmm8 vpaddd %xmm14, %xmm8, %xmm8 vpxor %xmm8, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $57, %xmm8, %xmm8 vpxor %xmm1, %xmm13, %xmm13 vpslld $25, %xmm13, %xmm14 vpshufd $78, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpsrld $7, %xmm13, %xmm13 vpxor %xmm14, %xmm13, %xmm13 vpunpckldq %xmm2, %xmm4, %xmm14 vpunpcklqdq %xmm14, %xmm12, %xmm14 vpaddd %xmm14, %xmm8, %xmm8 vpaddd %xmm13, %xmm8, %xmm8 vpblendw $15, %xmm5, %xmm12, %xmm12 vpxor %xmm8, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $141, %xmm12, %xmm12 vpxor %xmm1, %xmm13, %xmm13 vpslld $20, %xmm13, %xmm14 vpsrld $12, %xmm13, %xmm13 vpxor %xmm14, %xmm13, %xmm13 vpblendw $3, %xmm5, %xmm4, %xmm14 vpblendw $60, %xmm15, %xmm14, %xmm14 vpaddd %xmm14, %xmm13, %xmm14 vpaddd %xmm8, %xmm14, %xmm8 vpxor %xmm8, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $147, %xmm8, %xmm8 vpxor %xmm1, %xmm13, %xmm13 vpslld $25, %xmm13, %xmm15 vpshufd $78, %xmm0, %xmm0 vpshufd $57, %xmm1, %xmm1 vpsrld $7, %xmm13, %xmm13 vpxor %xmm15, %xmm13, %xmm14 vpblendw $12, %xmm4, %xmm3, %xmm15 vpsrldq $4, %xmm5, %xmm13 vpblendw $48, %xmm13, %xmm15, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddd %xmm15, %xmm8, %xmm8 vpaddd %xmm14, %xmm8, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm14, %xmm14 vpslld $20, %xmm14, %xmm13 vpsrld $12, %xmm14, %xmm14 vpxor %xmm13, %xmm14, %xmm8 vpunpcklqdq %xmm3, %xmm2, %xmm13 vpsrldq $4, %xmm13, %xmm13 vpshufd $132, %xmm5, %xmm14 vpblendw $51, %xmm13, %xmm14, %xmm13 vpaddd %xmm13, %xmm8, %xmm13 vpaddd %xmm15, %xmm13, %xmm13 vpblendw $51, %xmm5, %xmm4, %xmm15 vpxor %xmm13, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $57, %xmm13, %xmm13 vpxor %xmm1, %xmm8, %xmm8 vpslld $25, %xmm8, %xmm14 vpshufd $78, %xmm0, %xmm0 vpshufd $147, %xmm1, %xmm1 vpsrld $7, %xmm8, %xmm8 vpxor %xmm14, %xmm8, %xmm8 vpslldq $12, %xmm3, %xmm14 vpblendw $192, %xmm14, %xmm15, %xmm15 vpsrldq $4, %xmm3, %xmm14 vpaddd %xmm15, %xmm13, %xmm13 vpaddd %xmm8, %xmm13, %xmm15 vpxor %xmm15, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpxor %xmm1, %xmm8, %xmm8 vpslld $20, %xmm8, %xmm13 vpsrld $12, %xmm8, %xmm8 vpxor %xmm13, %xmm8, %xmm8 vpblendw $48, %xmm2, %xmm5, %xmm13 vpblendw $3, %xmm14, %xmm13, %xmm13 vpshufd $156, %xmm13, %xmm13 vpaddd %xmm8, %xmm13, %xmm13 vpaddd %xmm15, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufb %xmm6, %xmm0, %xmm0 vpaddd %xmm0, %xmm1, %xmm1 vpshufd $147, %xmm13, %xmm13 vpxor %xmm1, %xmm8, %xmm8 vpslld $25, %xmm8, %xmm15 vpshufd $78, %xmm0, %xmm0 vpsrld $7, %xmm8, %xmm8 vpxor %xmm15, %xmm8, %xmm8 vpshufd $57, %xmm1, %xmm15 vpunpcklqdq %xmm2, %xmm4, %xmm1 vpblendw $12, %xmm14, %xmm1, %xmm1 vpshufd $210, %xmm1, %xmm1 vpaddd %xmm1, %xmm13, %xmm13 vpunpckhdq %xmm2, %xmm3, %xmm14 vpaddd %xmm8, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm0 vpshufb %xmm7, %xmm0, %xmm1 vpaddd %xmm1, %xmm15, %xmm15 vpxor %xmm15, %xmm8, %xmm8 vpslld $20, %xmm8, %xmm0 vpsrld $12, %xmm8, %xmm8 vpxor %xmm0, %xmm8, %xmm8 vpunpckhqdq %xmm14, %xmm4, %xmm0 vpshufd $27, %xmm0, %xmm0 vpaddd %xmm8, %xmm0, %xmm0 vpaddd %xmm13, %xmm0, %xmm13 vpxor %xmm13, %xmm1, %xmm1 vpshufb %xmm6, %xmm1, %xmm1 vpaddd %xmm1, %xmm15, %xmm15 vpshufd $57, %xmm13, %xmm13 vpxor %xmm15, %xmm8, %xmm8 vpaddd %xmm12, %xmm13, %xmm13 vpslld $25, %xmm8, %xmm0 vpshufd $147, %xmm15, %xmm15 vpsrld $7, %xmm8, %xmm8 vpshufd $78, %xmm1, %xmm1 vpxor %xmm0, %xmm8, %xmm8 vpaddd %xmm8, %xmm13, %xmm13 vpxor %xmm13, %xmm1, %xmm1 vpshufb %xmm7, %xmm1, %xmm12 vpaddd %xmm12, %xmm15, %xmm0 vpsrldq $4, %xmm4, %xmm15 vpxor %xmm0, %xmm8, %xmm8 vpslld $20, %xmm8, %xmm1 vpsrld $12, %xmm8, %xmm8 vpxor %xmm8, %xmm1, %xmm8 vpblendw $48, %xmm5, %xmm2, %xmm1 vpblendw $3, %xmm15, %xmm1, %xmm1 vmovaps 144(%rsp), %xmm15 vpshufd $75, %xmm1, %xmm1 vpaddd %xmm8, %xmm1, %xmm1 vpaddd %xmm13, %xmm1, %xmm13 vpxor %xmm12, %xmm13, %xmm12 vpshufb %xmm6, %xmm12, %xmm12 vpaddd %xmm12, %xmm0, %xmm0 vpshufd $147, %xmm13, %xmm13 vpxor %xmm0, %xmm8, %xmm8 vpslld $25, %xmm8, %xmm1 vpshufd $78, %xmm12, %xmm12 vpshufd $57, %xmm0, %xmm0 vpsrld $7, %xmm8, %xmm8 vpxor %xmm8, %xmm1, %xmm8 vpunpckhqdq %xmm5, %xmm4, %xmm1 vpblendw $60, %xmm11, %xmm1, %xmm11 vpshufd $180, %xmm11, %xmm11 vpaddd %xmm13, %xmm11, %xmm13 vpaddd %xmm8, %xmm13, %xmm13 vpxor %xmm12, %xmm13, %xmm12 vpshufb %xmm7, %xmm12, %xmm1 vpaddd %xmm1, %xmm0, %xmm0 vpunpckldq %xmm3, %xmm4, %xmm12 vpxor %xmm0, %xmm8, %xmm8 vpslld $20, %xmm8, %xmm11 vpunpcklqdq %xmm14, %xmm12, %xmm12 vpshufd $147, %xmm12, %xmm12 vpsrld $12, %xmm8, %xmm8 vpxor %xmm8, %xmm11, %xmm11 vpaddd %xmm11, %xmm12, %xmm12 vpsrldq $8, %xmm2, %xmm14 vpaddd %xmm13, %xmm12, %xmm12 vpxor %xmm1, %xmm12, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm0, %xmm1 vpshufd $57, %xmm12, %xmm12 vpxor %xmm1, %xmm11, %xmm0 vpslld $25, %xmm0, %xmm13 vpshufd $78, %xmm8, %xmm8 vpshufd $147, %xmm1, %xmm1 vpsrld $7, %xmm0, %xmm11 vpunpckhdq %xmm5, %xmm3, %xmm0 vpunpcklqdq %xmm4, %xmm0, %xmm0 vpblendw $192, %xmm2, %xmm0, %xmm0 vpshufhw $78, %xmm0, %xmm0 vpaddd %xmm0, %xmm12, %xmm12 vpxor %xmm11, %xmm13, %xmm11 vpaddd %xmm11, %xmm12, %xmm12 vpxor %xmm8, %xmm12, %xmm8 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm1, %xmm11, %xmm11 vpslld $20, %xmm11, %xmm13 vpsrld $12, %xmm11, %xmm11 vpxor %xmm11, %xmm13, %xmm13 vpunpckhdq %xmm5, %xmm4, %xmm11 vpblendw $240, %xmm11, %xmm2, %xmm0 vpshufd $39, %xmm0, %xmm0 vpaddd %xmm13, %xmm0, %xmm0 vpaddd %xmm12, %xmm0, %xmm12 vpxor %xmm8, %xmm12, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpshufd $147, %xmm12, %xmm12 vpxor %xmm1, %xmm13, %xmm13 vpslld $25, %xmm13, %xmm0 vpshufd $78, %xmm8, %xmm8 vpshufd $57, %xmm1, %xmm1 vpsrld $7, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm13 vpunpcklqdq %xmm5, %xmm4, %xmm0 vpblendw $3, %xmm14, %xmm0, %xmm0 vpshufd $120, %xmm0, %xmm0 vpaddd %xmm12, %xmm0, %xmm12 vpaddd %xmm13, %xmm12, %xmm12 vpxor %xmm8, %xmm12, %xmm8 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpxor %xmm1, %xmm13, %xmm13 vpslld $20, %xmm13, %xmm0 vpsrld $12, %xmm13, %xmm13 vpxor %xmm13, %xmm0, %xmm13 vpblendw $48, %xmm4, %xmm3, %xmm0 vpshufd $57, %xmm0, %xmm0 vpaddd %xmm13, %xmm0, %xmm0 vpaddd %xmm12, %xmm0, %xmm0 vpxor %xmm8, %xmm0, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpshufd $57, %xmm0, %xmm0 vpxor %xmm1, %xmm13, %xmm14 vpslld $25, %xmm14, %xmm12 vpshufd $78, %xmm8, %xmm8 vpshufd $147, %xmm1, %xmm1 vpsrld $7, %xmm14, %xmm13 vmovaps 128(%rsp), %xmm14 vpxor %xmm13, %xmm12, %xmm13 vpblendw $48, %xmm2, %xmm3, %xmm12 vpblendw $15, %xmm10, %xmm12, %xmm10 vpshufd $114, %xmm10, %xmm10 vpaddd %xmm0, %xmm10, %xmm0 vpaddd %xmm13, %xmm0, %xmm10 vpslldq $4, %xmm4, %xmm0 vpunpckldq %xmm5, %xmm4, %xmm4 vpxor %xmm8, %xmm10, %xmm8 vpshufb %xmm7, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpblendw $192, %xmm0, %xmm3, %xmm0 vpxor %xmm1, %xmm13, %xmm13 vpslld $20, %xmm13, %xmm12 vpshufd $99, %xmm0, %xmm0 vpsrld $12, %xmm13, %xmm13 vpxor %xmm13, %xmm12, %xmm12 vpaddd %xmm12, %xmm0, %xmm0 vmovaps 112(%rsp), %xmm13 vpaddd %xmm10, %xmm0, %xmm0 vmovaps 64(%rsp), %xmm10 vpxor %xmm8, %xmm0, %xmm8 vpshufb %xmm6, %xmm8, %xmm8 vpaddd %xmm8, %xmm1, %xmm1 vpshufd $147, %xmm0, %xmm0 vpxor %xmm1, %xmm12, %xmm12 vpslld $25, %xmm12, %xmm3 vpshufd $78, %xmm8, %xmm8 vpshufd $57, %xmm1, %xmm1 vpsrld $7, %xmm12, %xmm12 vpxor %xmm12, %xmm3, %xmm12 vpunpckldq %xmm5, %xmm2, %xmm3 vpunpckhqdq %xmm3, %xmm11, %xmm11 vpshufd $39, %xmm11, %xmm11 vpaddd %xmm0, %xmm11, %xmm0 vpaddd %xmm12, %xmm0, %xmm11 vpblendw $192, %xmm2, %xmm5, %xmm0 vpxor %xmm8, %xmm11, %xmm8 vpshufb %xmm7, %xmm8, %xmm7 vpaddd %xmm7, %xmm1, %xmm1 vpblendw $15, %xmm4, %xmm0, %xmm0 vpxor %xmm1, %xmm12, %xmm12 vpslld $20, %xmm12, %xmm3 vpshufd $108, %xmm0, %xmm0 vmovaps 32(%rsp), %xmm8 vpsrld $12, %xmm12, %xmm12 vpxor %xmm12, %xmm3, %xmm3 vpaddd %xmm3, %xmm0, %xmm0 vmovaps 96(%rsp), %xmm12 vpaddd %xmm11, %xmm0, %xmm0 vmovaps 80(%rsp), %xmm11 vpxor %xmm7, %xmm0, %xmm7 vpshufb %xmm6, %xmm7, %xmm6 vpaddd %xmm6, %xmm1, %xmm1 vmovaps 16(%rsp), %xmm7 vpxor %xmm1, %xmm3, %xmm3 vpslld $25, %xmm3, %xmm2 vpshufd $78, %xmm6, %xmm6 vpxor %xmm6, %xmm9, %xmm6 vpsrld $7, %xmm3, %xmm3 vmovaps 48(%rsp), %xmm9 vpshufd $147, %xmm1, %xmm1 vpshufd $57, %xmm0, %xmm0 vpxor %xmm3, %xmm2, %xmm3 vpxor %xmm3, %xmm6, %xmm6 vmovups %xmm6, 16(%rcx) vpxor %xmm0, %xmm1, %xmm0 vmovaps (%rsp), %xmm6 vpxor (%rcx), %xmm0, %xmm0 vmovups %xmm0, (%rcx) addq $168, %rsp {$IF DEFINED(UNIX)} popq %rdx popq %rcx {$ENDIF} end; procedure blake2b_compress_avx( S: Pblake2b_state; const block: pcuint8 ); assembler; nostackframe; asm {$IF DEFINED(UNIX)} pushq %rcx movq %rdi, %rcx pushq %rdx movq %rsi, %rdx {$ENDIF} subq $568, %rsp vmovaps %xmm6, 400(%rsp) vmovaps %xmm7, 416(%rsp) vmovaps %xmm8, 432(%rsp) vmovaps %xmm9, 448(%rsp) vmovaps %xmm10, 464(%rsp) vmovaps %xmm11, 480(%rsp) vmovaps %xmm12, 496(%rsp) vmovaps %xmm13, 512(%rsp) vmovaps %xmm14, 528(%rsp) vmovaps %xmm15, 544(%rsp) vmovdqu 112(%rdx), %xmm5 vmovdqu 16(%rdx), %xmm1 vmovdqu (%rdx), %xmm4 vmovdqu 32(%rcx), %xmm3 vpaddq (%rcx), %xmm3, %xmm9 vmovdqu 32(%rdx), %xmm13 vmovaps %xmm5, 80(%rsp) vpunpcklqdq %xmm1, %xmm4, %xmm2 vmovdqu 48(%rdx), %xmm12 vpaddq %xmm2, %xmm9, %xmm9 vmovaps %xmm4, 48(%rsp) vpunpckhqdq %xmm1, %xmm4, %xmm4 vmovdqa BLAKE2B_LC0(%rip), %xmm5 vmovaps %xmm1, (%rsp) vmovdqu 48(%rcx), %xmm11 vpaddq 16(%rcx), %xmm11, %xmm11 vpunpcklqdq %xmm12, %xmm13, %xmm0 vmovaps %xmm2, 272(%rsp) vmovdqu 64(%rcx), %xmm14 vpxor blake2b_IV_3(%rip), %xmm14, %xmm2 vpxor %xmm9, %xmm2, %xmm2 vmovaps %xmm0, 288(%rsp) vpaddq %xmm0, %xmm11, %xmm11 vpshufd $177, %xmm2, %xmm2 vmovdqu 80(%rdx), %xmm6 vpaddq blake2b_IV(%rip), %xmm2, %xmm3 vpxor 32(%rcx), %xmm3, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vpaddq %xmm4, %xmm0, %xmm1 vmovaps %xmm4, 304(%rsp) vmovdqu 64(%rdx), %xmm7 vmovaps %xmm12, 16(%rsp) vpaddq %xmm9, %xmm1, %xmm9 vpunpckhqdq %xmm12, %xmm13, %xmm12 vmovdqu 80(%rcx), %xmm14 vpxor blake2b_IV_4(%rip), %xmm14, %xmm10 vpxor %xmm11, %xmm10, %xmm10 vpshufd $177, %xmm10, %xmm10 vmovdqu 96(%rdx), %xmm15 vpxor %xmm2, %xmm9, %xmm2 vpaddq blake2b_IV_2(%rip), %xmm10, %xmm14 vpxor 48(%rcx), %xmm14, %xmm8 vmovdqa BLAKE2B_LC1(%rip), %xmm4 vpshufb %xmm5, %xmm8, %xmm8 vpaddq %xmm12, %xmm8, %xmm1 vmovaps %xmm12, 320(%rsp) vpaddq %xmm11, %xmm1, %xmm11 vmovaps %xmm13, 64(%rsp) vpshufb %xmm4, %xmm2, %xmm2 vmovdqa %xmm2, %xmm12 vpaddq %xmm2, %xmm3, %xmm2 vpxor %xmm10, %xmm11, %xmm10 vpxor %xmm0, %xmm2, %xmm0 vpshufb %xmm4, %xmm10, %xmm10 vpsrlq $63, %xmm0, %xmm3 vmovdqa %xmm10, %xmm13 vpaddq %xmm0, %xmm0, %xmm0 vpaddq %xmm10, %xmm14, %xmm10 vpunpcklqdq %xmm6, %xmm7, %xmm14 vmovaps %xmm14, 112(%rsp) vmovdqa %xmm15, %xmm14 vmovdqa 80(%rsp), %xmm15 vpxor %xmm3, %xmm0, %xmm1 vpxor %xmm8, %xmm10, %xmm8 vpsrlq $63, %xmm8, %xmm0 vpaddq %xmm8, %xmm8, %xmm8 vmovaps %xmm14, 32(%rsp) vpunpcklqdq %xmm15, %xmm14, %xmm3 vpxor %xmm0, %xmm8, %xmm8 vpalignr $8, %xmm1, %xmm8, %xmm0 vpalignr $8, %xmm8, %xmm1, %xmm1 vpalignr $8, %xmm12, %xmm13, %xmm8 vpalignr $8, %xmm13, %xmm12, %xmm12 vmovdqa %xmm3, %xmm13 vpaddq 112(%rsp), %xmm0, %xmm3 vmovaps %xmm13, 128(%rsp) vpaddq %xmm9, %xmm3, %xmm9 vpaddq %xmm13, %xmm1, %xmm3 vpunpckhqdq %xmm15, %xmm14, %xmm13 vmovaps %xmm13, 144(%rsp) vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm12, %xmm9, %xmm12 vpshufd $177, %xmm12, %xmm12 vpaddq %xmm12, %xmm10, %xmm10 vpxor %xmm8, %xmm11, %xmm8 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm2, %xmm3 vpxor %xmm0, %xmm10, %xmm0 vpunpckhqdq %xmm6, %xmm7, %xmm2 vpshufb %xmm5, %xmm0, %xmm0 vpxor %xmm1, %xmm3, %xmm1 vpaddq %xmm2, %xmm0, %xmm13 vpshufb %xmm5, %xmm1, %xmm1 vpaddq %xmm9, %xmm13, %xmm9 vpunpcklqdq 64(%rsp), %xmm15, %xmm15 vmovaps %xmm2, 336(%rsp) vpaddq 144(%rsp), %xmm1, %xmm2 vpxor %xmm12, %xmm9, %xmm12 vpshufb %xmm4, %xmm12, %xmm12 vpaddq %xmm12, %xmm10, %xmm10 vpxor %xmm0, %xmm10, %xmm0 vmovdqa %xmm12, %xmm13 vmovaps %xmm15, 160(%rsp) vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm8, %xmm11, %xmm2 vpshufb %xmm4, %xmm2, %xmm2 vmovdqa %xmm2, %xmm8 vpaddq %xmm2, %xmm3, %xmm2 vpsrlq $63, %xmm0, %xmm3 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm1, %xmm2, %xmm1 vpxor %xmm3, %xmm0, %xmm12 vpsrlq $63, %xmm1, %xmm3 vpaddq %xmm1, %xmm1, %xmm1 vpxor %xmm3, %xmm1, %xmm0 vpalignr $8, %xmm0, %xmm12, %xmm3 vpalignr $8, %xmm8, %xmm13, %xmm1 vpalignr $8, %xmm12, %xmm0, %xmm0 vpalignr $8, %xmm13, %xmm8, %xmm8 vpunpckhqdq %xmm14, %xmm7, %xmm13 vmovaps %xmm13, 176(%rsp) vpaddq %xmm15, %xmm3, %xmm13 vpaddq 176(%rsp), %xmm0, %xmm15 vpaddq %xmm9, %xmm13, %xmm9 vpunpcklqdq %xmm7, %xmm6, %xmm13 vmovaps %xmm13, 192(%rsp) vpxor %xmm8, %xmm9, %xmm8 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm2, %xmm2 vpaddq %xmm11, %xmm15, %xmm11 vmovdqa 16(%rsp), %xmm15 vpxor %xmm3, %xmm2, %xmm3 vpalignr $8, 80(%rsp), %xmm15, %xmm12 vpxor %xmm1, %xmm11, %xmm1 vpshufd $177, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vpshufb %xmm5, %xmm3, %xmm3 vmovdqa %xmm12, %xmm15 vpaddq %xmm13, %xmm3, %xmm13 vpxor %xmm0, %xmm10, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vmovaps %xmm15, 208(%rsp) vpaddq %xmm9, %xmm13, %xmm9 vpaddq 208(%rsp), %xmm0, %xmm15 vpxor %xmm8, %xmm9, %xmm13 vpshufb %xmm4, %xmm13, %xmm13 vpaddq %xmm13, %xmm2, %xmm2 vmovdqa %xmm13, %xmm8 vpaddq %xmm11, %xmm15, %xmm11 vpxor %xmm3, %xmm2, %xmm3 vpsrlq $63, %xmm3, %xmm13 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm1, %xmm11, %xmm1 vpshufb %xmm4, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vmovdqa %xmm1, %xmm12 vpxor %xmm0, %xmm10, %xmm0 vpxor %xmm13, %xmm3, %xmm1 vpsrlq $63, %xmm0, %xmm3 vpaddq %xmm0, %xmm0, %xmm0 vpunpckhqdq 64(%rsp), %xmm6, %xmm13 vpxor %xmm3, %xmm0, %xmm0 vmovdqa %xmm13, %xmm15 vpalignr $8, %xmm1, %xmm0, %xmm3 vmovaps %xmm15, 352(%rsp) vpalignr $8, %xmm0, %xmm1, %xmm1 vpalignr $8, %xmm8, %xmm12, %xmm0 vpaddq %xmm15, %xmm1, %xmm15 vpalignr $8, %xmm12, %xmm8, %xmm8 vpshufd $78, 48(%rsp), %xmm12 vpaddq %xmm11, %xmm15, %xmm11 vmovaps %xmm12, 224(%rsp) vpaddq 224(%rsp), %xmm3, %xmm13 vpxor %xmm0, %xmm11, %xmm0 vpshufd $177, %xmm0, %xmm0 vpaddq %xmm0, %xmm2, %xmm2 vmovdqa 16(%rsp), %xmm12 vpxor %xmm1, %xmm2, %xmm1 vpshufb %xmm5, %xmm1, %xmm1 vpaddq %xmm9, %xmm13, %xmm9 vmovdqa (%rsp), %xmm13 vpxor %xmm8, %xmm9, %xmm8 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm10, %xmm10 vpunpcklqdq %xmm13, %xmm14, %xmm14 vmovdqa %xmm14, %xmm15 vpxor %xmm3, %xmm10, %xmm3 vpunpckhqdq %xmm13, %xmm12, %xmm14 vpshufb %xmm5, %xmm3, %xmm3 vpaddq %xmm15, %xmm3, %xmm13 vmovaps %xmm14, 96(%rsp) vmovaps %xmm15, 368(%rsp) vpaddq %xmm9, %xmm13, %xmm13 vpaddq %xmm14, %xmm1, %xmm15 vpaddq %xmm11, %xmm15, %xmm11 vpxor %xmm8, %xmm13, %xmm8 vpshufb %xmm4, %xmm8, %xmm8 vpaddq %xmm8, %xmm10, %xmm10 vpxor %xmm3, %xmm10, %xmm3 vpxor %xmm0, %xmm11, %xmm0 vmovdqa %xmm8, %xmm9 vpshufb %xmm4, %xmm0, %xmm0 vpsrlq $63, %xmm3, %xmm12 vpaddq %xmm0, %xmm2, %xmm2 vpaddq %xmm3, %xmm3, %xmm3 vmovdqa 64(%rsp), %xmm15 vpxor %xmm12, %xmm3, %xmm8 vpxor %xmm1, %xmm2, %xmm1 vpsrlq $63, %xmm1, %xmm3 vpaddq %xmm1, %xmm1, %xmm1 vmovdqa %xmm0, %xmm14 vpxor %xmm3, %xmm1, %xmm0 vmovdqa 32(%rsp), %xmm1 vpalignr $8, %xmm0, %xmm8, %xmm3 vpalignr $8, %xmm8, %xmm0, %xmm0 vpalignr $8, %xmm6, %xmm1, %xmm12 vpunpckhqdq 80(%rsp), %xmm15, %xmm1 vpaddq %xmm1, %xmm0, %xmm15 vmovaps %xmm1, 240(%rsp) vpalignr $8, %xmm14, %xmm9, %xmm8 vpaddq %xmm12, %xmm3, %xmm12 vpaddq %xmm11, %xmm15, %xmm15 vpalignr $8, %xmm9, %xmm14, %xmm14 vpxor %xmm8, %xmm15, %xmm8 vpaddq %xmm13, %xmm12, %xmm9 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm10, %xmm1 vmovdqa (%rsp), %xmm10 vpxor %xmm14, %xmm9, %xmm14 vpshufd $177, %xmm14, %xmm14 vpaddq %xmm14, %xmm2, %xmm2 vpunpcklqdq 48(%rsp), %xmm7, %xmm12 vpxor %xmm0, %xmm1, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vpblendw $240, 32(%rsp), %xmm10, %xmm13 vpxor %xmm3, %xmm2, %xmm3 vpshufb %xmm5, %xmm3, %xmm3 vpaddq %xmm3, %xmm12, %xmm12 vpaddq %xmm9, %xmm12, %xmm12 vpaddq %xmm13, %xmm0, %xmm13 vpblendw $240, (%rsp), %xmm6, %xmm9 vpaddq %xmm15, %xmm13, %xmm11 vpxor %xmm14, %xmm12, %xmm13 vpshufb %xmm4, %xmm13, %xmm13 vpaddq %xmm13, %xmm2, %xmm2 vpxor %xmm3, %xmm2, %xmm3 vpxor %xmm8, %xmm11, %xmm8 vpshufb %xmm4, %xmm8, %xmm8 vmovdqa %xmm8, %xmm10 vpaddq %xmm8, %xmm1, %xmm1 vpsrlq $63, %xmm3, %xmm8 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm0, %xmm1, %xmm0 vpxor %xmm8, %xmm3, %xmm3 vpsrlq $63, %xmm0, %xmm8 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm8, %xmm0, %xmm0 vpalignr $8, %xmm3, %xmm0, %xmm14 vpalignr $8, %xmm0, %xmm3, %xmm3 vmovdqa 16(%rsp), %xmm0 vpaddq %xmm9, %xmm14, %xmm9 vpaddq %xmm12, %xmm9, %xmm12 vpalignr $8, %xmm13, %xmm10, %xmm8 vmovdqa 80(%rsp), %xmm9 vpunpcklqdq 16(%rsp), %xmm9, %xmm9 vpunpckhqdq %xmm7, %xmm0, %xmm15 vpalignr $8, %xmm10, %xmm13, %xmm10 vpaddq %xmm3, %xmm15, %xmm15 vpaddq %xmm11, %xmm15, %xmm13 vpxor %xmm10, %xmm12, %xmm10 vmovdqa 64(%rsp), %xmm11 vpshufd $177, %xmm10, %xmm10 vpalignr $8, 48(%rsp), %xmm11, %xmm11 vpaddq %xmm10, %xmm1, %xmm1 vpxor %xmm8, %xmm13, %xmm8 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm2, %xmm0 vpxor %xmm14, %xmm1, %xmm2 vpshufb %xmm5, %xmm2, %xmm2 vpaddq %xmm2, %xmm9, %xmm9 vpaddq %xmm12, %xmm9, %xmm9 vpxor %xmm3, %xmm0, %xmm3 vpshufb %xmm5, %xmm3, %xmm3 vpaddq %xmm3, %xmm11, %xmm11 vpaddq %xmm13, %xmm11, %xmm15 vpxor %xmm10, %xmm9, %xmm10 vpshufb %xmm4, %xmm10, %xmm10 vpaddq %xmm10, %xmm1, %xmm1 vmovdqa %xmm10, %xmm12 vpxor %xmm2, %xmm1, %xmm2 vpxor %xmm8, %xmm15, %xmm8 vpsrlq $63, %xmm2, %xmm10 vpshufb %xmm4, %xmm8, %xmm8 vpaddq %xmm2, %xmm2, %xmm2 vpaddq %xmm8, %xmm0, %xmm0 vmovdqa %xmm8, %xmm13 vpxor %xmm3, %xmm0, %xmm3 vpxor %xmm10, %xmm2, %xmm8 vpsrlq $63, %xmm3, %xmm10 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm10, %xmm3, %xmm2 vpalignr $8, %xmm2, %xmm8, %xmm3 vpaddq 96(%rsp), %xmm3, %xmm14 vpalignr $8, %xmm8, %xmm2, %xmm2 vmovdqa 32(%rsp), %xmm8 vpalignr $8, %xmm13, %xmm12, %xmm10 vpaddq %xmm9, %xmm14, %xmm14 vpunpckhqdq %xmm6, %xmm8, %xmm11 vpalignr $8, %xmm12, %xmm13, %xmm13 vpaddq %xmm2, %xmm11, %xmm11 vpunpckhqdq 48(%rsp), %xmm7, %xmm8 vpaddq %xmm15, %xmm11, %xmm11 vpxor %xmm13, %xmm14, %xmm13 vpshufd $177, %xmm13, %xmm13 vpaddq %xmm13, %xmm0, %xmm0 vpxor %xmm10, %xmm11, %xmm10 vpxor %xmm3, %xmm0, %xmm3 vpshufd $177, %xmm10, %xmm10 vpshufb %xmm5, %xmm3, %xmm3 vpaddq %xmm10, %xmm1, %xmm1 vpaddq %xmm3, %xmm8, %xmm8 vpaddq %xmm14, %xmm8, %xmm9 vpxor %xmm2, %xmm1, %xmm2 vpshufb %xmm5, %xmm2, %xmm2 vpaddq 128(%rsp), %xmm2, %xmm8 vpxor %xmm13, %xmm9, %xmm12 vpshufb %xmm4, %xmm12, %xmm12 vpaddq %xmm12, %xmm0, %xmm0 vmovdqa 48(%rsp), %xmm13 vpaddq %xmm11, %xmm8, %xmm11 vpxor %xmm3, %xmm0, %xmm3 vpxor %xmm10, %xmm11, %xmm10 vpshufb %xmm4, %xmm10, %xmm10 vmovdqa %xmm10, %xmm8 vpaddq %xmm10, %xmm1, %xmm1 vpsrlq $63, %xmm3, %xmm10 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm2, %xmm1, %xmm2 vpxor %xmm10, %xmm3, %xmm3 vpsrlq $63, %xmm2, %xmm10 vpaddq %xmm2, %xmm2, %xmm2 vpxor %xmm10, %xmm2, %xmm10 vpalignr $8, %xmm12, %xmm8, %xmm14 vpalignr $8, %xmm3, %xmm10, %xmm2 vpalignr $8, %xmm8, %xmm12, %xmm15 vmovdqa (%rsp), %xmm8 vpalignr $8, %xmm10, %xmm3, %xmm3 vmovdqa 64(%rsp), %xmm10 vpblendw $240, %xmm10, %xmm8, %xmm12 vpblendw $240, 80(%rsp), %xmm10, %xmm10 vpaddq %xmm12, %xmm2, %xmm12 vpaddq %xmm9, %xmm12, %xmm8 vmovdqa 16(%rsp), %xmm12 vpaddq %xmm10, %xmm3, %xmm9 vpaddq %xmm11, %xmm9, %xmm11 vpxor %xmm15, %xmm8, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm1, %xmm1 vpunpcklqdq %xmm6, %xmm12, %xmm9 vmovdqa %xmm9, %xmm12 vpxor %xmm14, %xmm11, %xmm14 vpxor %xmm2, %xmm1, %xmm2 vpshufd $177, %xmm14, %xmm14 vpshufb %xmm5, %xmm2, %xmm2 vpaddq %xmm14, %xmm0, %xmm0 vpunpcklqdq %xmm7, %xmm13, %xmm9 vmovaps %xmm12, 384(%rsp) vpaddq %xmm12, %xmm2, %xmm12 vpxor %xmm3, %xmm0, %xmm3 vpshufb %xmm5, %xmm3, %xmm3 vpaddq %xmm8, %xmm12, %xmm12 vpaddq %xmm3, %xmm9, %xmm8 vpaddq %xmm11, %xmm8, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufb %xmm4, %xmm15, %xmm15 vpaddq %xmm15, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm2 vpxor %xmm14, %xmm11, %xmm14 vpshufb %xmm4, %xmm14, %xmm14 vmovdqa %xmm14, %xmm8 vpaddq %xmm14, %xmm0, %xmm14 vpsrlq $63, %xmm2, %xmm0 vpaddq %xmm2, %xmm2, %xmm2 vmovdqa %xmm15, %xmm13 vpxor %xmm3, %xmm14, %xmm3 vpxor %xmm0, %xmm2, %xmm15 vpsrlq $63, %xmm3, %xmm0 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm0, %xmm3, %xmm2 vpalignr $8, %xmm8, %xmm13, %xmm3 vpalignr $8, %xmm2, %xmm15, %xmm0 vpalignr $8, %xmm13, %xmm8, %xmm8 vmovdqa (%rsp), %xmm13 vpalignr $8, %xmm15, %xmm2, %xmm2 vpunpckhqdq 64(%rsp), %xmm7, %xmm15 vpaddq %xmm0, %xmm15, %xmm15 vpaddq %xmm12, %xmm15, %xmm12 vpunpcklqdq %xmm6, %xmm13, %xmm13 vpaddq %xmm2, %xmm13, %xmm13 vpaddq %xmm11, %xmm13, %xmm11 vpxor %xmm8, %xmm12, %xmm8 vpshufd $177, %xmm8, %xmm8 vpaddq %xmm8, %xmm14, %xmm14 vpxor %xmm3, %xmm11, %xmm3 vpxor %xmm0, %xmm14, %xmm0 vpshufd $177, %xmm3, %xmm13 vpshufb %xmm5, %xmm0, %xmm3 vmovdqa 48(%rsp), %xmm0 vpaddq %xmm13, %xmm1, %xmm1 vpxor %xmm2, %xmm1, %xmm2 vpshufb %xmm5, %xmm2, %xmm2 vpaddq %xmm2, %xmm10, %xmm10 vpblendw $240, 16(%rsp), %xmm0, %xmm15 vpaddq %xmm11, %xmm10, %xmm11 vpaddq %xmm15, %xmm3, %xmm15 vpxor %xmm13, %xmm11, %xmm13 vpshufb %xmm4, %xmm13, %xmm13 vpaddq %xmm13, %xmm1, %xmm1 vpaddq %xmm12, %xmm15, %xmm12 vmovdqa %xmm13, %xmm15 vpxor %xmm8, %xmm12, %xmm8 vpshufb %xmm4, %xmm8, %xmm8 vmovdqa %xmm8, %xmm10 vpaddq %xmm8, %xmm14, %xmm14 vpxor %xmm2, %xmm1, %xmm8 vpsrlq $63, %xmm8, %xmm0 vpaddq %xmm8, %xmm8, %xmm2 vpxor %xmm3, %xmm14, %xmm3 vmovdqa 80(%rsp), %xmm8 vpsrlq $63, %xmm3, %xmm13 vpaddq %xmm3, %xmm3, %xmm3 vpxor %xmm0, %xmm2, %xmm2 vpxor %xmm13, %xmm3, %xmm3 vmovdqa (%rsp), %xmm13 vpalignr $8, %xmm3, %xmm2, %xmm0 vpalignr $8, %xmm2, %xmm3, %xmm2 vpalignr $8, %xmm10, %xmm15, %xmm3 vpalignr $8, %xmm15, %xmm10, %xmm10 vpblendw $240, %xmm6, %xmm8, %xmm15 vmovdqa 16(%rsp), %xmm8 vpaddq %xmm15, %xmm0, %xmm15 vpblendw $240, %xmm13, %xmm8, %xmm8 vpaddq %xmm12, %xmm15, %xmm12 vpaddq %xmm8, %xmm2, %xmm8 vpxor %xmm10, %xmm12, %xmm10 vpshufd $177, %xmm10, %xmm10 vpaddq %xmm10, %xmm1, %xmm1 vpaddq %xmm11, %xmm8, %xmm11 vmovdqa 32(%rsp), %xmm8 vpxor %xmm0, %xmm1, %xmm0 vpalignr $8, 48(%rsp), %xmm8, %xmm15 vpshufb %xmm5, %xmm0, %xmm0 vpblendw $240, 32(%rsp), %xmm7, %xmm8 vpxor %xmm3, %xmm11, %xmm3 vpshufd $177, %xmm3, %xmm3 vpaddq %xmm0, %xmm15, %xmm15 vpaddq %xmm3, %xmm14, %xmm14 vpaddq %xmm12, %xmm15, %xmm12 vpxor %xmm2, %xmm14, %xmm2 vpshufb %xmm5, %xmm2, %xmm2 vpaddq %xmm8, %xmm2, %xmm8 vpaddq %xmm11, %xmm8, %xmm11 vpxor %xmm10, %xmm12, %xmm10 vpshufb %xmm4, %xmm10, %xmm10 vpaddq %xmm10, %xmm1, %xmm1 vmovdqa %xmm10, %xmm15 vpxor %xmm3, %xmm11, %xmm3 vpxor %xmm0, %xmm1, %xmm0 vpshufb %xmm4, %xmm3, %xmm8 vpsrlq $63, %xmm0, %xmm10 vpaddq %xmm8, %xmm14, %xmm14 vpaddq %xmm0, %xmm0, %xmm0 vmovdqa %xmm8, %xmm3 vpxor %xmm2, %xmm14, %xmm2 vpxor %xmm10, %xmm0, %xmm8 vpsrlq $63, %xmm2, %xmm0 vpaddq %xmm2, %xmm2, %xmm2 vmovdqa 16(%rsp), %xmm10 vpxor %xmm0, %xmm2, %xmm2 vpalignr $8, %xmm2, %xmm8, %xmm0 vpalignr $8, %xmm8, %xmm2, %xmm2 vpaddq %xmm2, %xmm9, %xmm9 vpalignr $8, %xmm3, %xmm15, %xmm8 vpaddq %xmm11, %xmm9, %xmm11 vpalignr $8, %xmm15, %xmm3, %xmm15 vpunpcklqdq %xmm10, %xmm13, %xmm3 vpaddq %xmm0, %xmm3, %xmm3 vpaddq %xmm12, %xmm3, %xmm12 vpxor %xmm8, %xmm11, %xmm8 vpshufd $177, %xmm8, %xmm9 vpaddq %xmm9, %xmm1, %xmm1 vmovdqa 32(%rsp), %xmm8 vpxor %xmm15, %xmm12, %xmm15 vpunpckhqdq %xmm13, %xmm6, %xmm3 vpxor %xmm2, %xmm1, %xmm2 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm14, %xmm14 vpshufb %xmm5, %xmm2, %xmm2 vpaddq %xmm2, %xmm3, %xmm3 vpxor %xmm0, %xmm14, %xmm0 vpunpcklqdq %xmm6, %xmm8, %xmm8 vpshufb %xmm5, %xmm0, %xmm0 vpaddq %xmm0, %xmm8, %xmm8 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufb %xmm4, %xmm15, %xmm13 vpaddq %xmm13, %xmm14, %xmm14 vpxor %xmm9, %xmm11, %xmm9 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm4, %xmm9, %xmm9 vpsrlq $63, %xmm0, %xmm8 vpaddq %xmm9, %xmm1, %xmm1 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm2, %xmm1, %xmm2 vmovdqa 64(%rsp), %xmm15 vpalignr $8, %xmm9, %xmm13, %xmm3 vpxor %xmm8, %xmm0, %xmm0 vpsrlq $63, %xmm2, %xmm8 vpaddq %xmm2, %xmm2, %xmm2 vpxor %xmm8, %xmm2, %xmm2 vpalignr $8, %xmm0, %xmm2, %xmm8 vpblendw $240, 16(%rsp), %xmm15, %xmm10 vpalignr $8, %xmm2, %xmm0, %xmm0 vpaddq %xmm10, %xmm8, %xmm10 vpalignr $8, %xmm13, %xmm9, %xmm2 vmovdqa 80(%rsp), %xmm9 vpaddq %xmm12, %xmm10, %xmm12 vpunpckhqdq 48(%rsp), %xmm9, %xmm9 vpaddq %xmm0, %xmm9, %xmm9 vpxor %xmm3, %xmm12, %xmm3 vpshufd $177, %xmm3, %xmm3 vpaddq %xmm3, %xmm1, %xmm1 vpaddq %xmm11, %xmm9, %xmm11 vmovdqa 32(%rsp), %xmm9 vpxor %xmm8, %xmm1, %xmm8 vpshufb %xmm5, %xmm8, %xmm8 vpxor %xmm2, %xmm11, %xmm2 vpshufd $177, %xmm2, %xmm2 vpaddq %xmm2, %xmm14, %xmm14 vpunpckhqdq %xmm15, %xmm9, %xmm10 vmovdqa 80(%rsp), %xmm9 vpaddq %xmm8, %xmm10, %xmm10 vpxor %xmm0, %xmm14, %xmm0 vpaddq %xmm12, %xmm10, %xmm12 vpshufb %xmm5, %xmm0, %xmm0 vpblendw $240, %xmm7, %xmm9, %xmm9 vpxor %xmm3, %xmm12, %xmm3 vpshufb %xmm4, %xmm3, %xmm3 vpaddq %xmm3, %xmm1, %xmm1 vpaddq %xmm9, %xmm0, %xmm9 vpxor %xmm8, %xmm1, %xmm8 vmovdqa %xmm3, %xmm10 vpaddq %xmm11, %xmm9, %xmm11 vpsrlq $63, %xmm8, %xmm9 vpaddq %xmm8, %xmm8, %xmm8 vpxor %xmm2, %xmm11, %xmm2 vpshufb %xmm4, %xmm2, %xmm13 vpaddq %xmm13, %xmm14, %xmm14 vpxor %xmm9, %xmm8, %xmm3 vpxor %xmm0, %xmm14, %xmm0 vpsrlq $63, %xmm0, %xmm9 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm9, %xmm0, %xmm8 vmovdqa 32(%rsp), %xmm9 vpalignr $8, %xmm8, %xmm3, %xmm0 vpalignr $8, %xmm13, %xmm10, %xmm15 vpblendw $240, 48(%rsp), %xmm9, %xmm2 vpalignr $8, %xmm3, %xmm8, %xmm8 vpaddq %xmm2, %xmm0, %xmm2 vpalignr $8, %xmm10, %xmm13, %xmm10 vpaddq %xmm12, %xmm2, %xmm12 vpaddq 160(%rsp), %xmm8, %xmm2 vpxor %xmm10, %xmm12, %xmm10 vpshufd $177, %xmm10, %xmm10 vpaddq %xmm10, %xmm14, %xmm14 vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm0, %xmm14, %xmm0 vpalignr $8, 32(%rsp), %xmm6, %xmm2 vpshufb %xmm5, %xmm0, %xmm0 vpaddq 240(%rsp), %xmm0, %xmm3 vpxor %xmm15, %xmm11, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm1, %xmm1 vpxor %xmm8, %xmm1, %xmm8 vpshufb %xmm5, %xmm8, %xmm8 vpaddq %xmm8, %xmm2, %xmm2 vpaddq %xmm12, %xmm3, %xmm12 vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm10, %xmm12, %xmm10 vpshufb %xmm4, %xmm10, %xmm13 vpaddq %xmm13, %xmm14, %xmm14 vpxor %xmm15, %xmm11, %xmm15 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm4, %xmm15, %xmm15 vpsrlq $63, %xmm0, %xmm3 vpaddq %xmm15, %xmm1, %xmm1 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm8, %xmm1, %xmm8 vpalignr $8, %xmm15, %xmm13, %xmm2 vpxor %xmm3, %xmm0, %xmm0 vpsrlq $63, %xmm8, %xmm3 vpaddq %xmm8, %xmm8, %xmm8 vpxor %xmm3, %xmm8, %xmm8 vpalignr $8, %xmm0, %xmm8, %xmm9 vpshufd $78, %xmm7, %xmm3 vpalignr $8, %xmm8, %xmm0, %xmm0 vpalignr $8, %xmm13, %xmm15, %xmm8 vmovdqa 48(%rsp), %xmm13 vpaddq %xmm3, %xmm0, %xmm3 vpunpcklqdq 16(%rsp), %xmm13, %xmm10 vpaddq %xmm9, %xmm10, %xmm10 vpaddq %xmm11, %xmm3, %xmm11 vpaddq %xmm12, %xmm10, %xmm12 vmovdqa (%rsp), %xmm10 vpxor %xmm8, %xmm11, %xmm8 vpshufd $177, %xmm8, %xmm8 vpxor %xmm2, %xmm12, %xmm2 vpshufd $177, %xmm2, %xmm2 vpaddq %xmm2, %xmm1, %xmm1 vpaddq %xmm8, %xmm14, %xmm14 vpblendw $240, %xmm6, %xmm10, %xmm3 vpxor %xmm9, %xmm1, %xmm9 vpshufb %xmm5, %xmm9, %xmm9 vpaddq 96(%rsp), %xmm9, %xmm10 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vpaddq %xmm3, %xmm0, %xmm3 vpaddq %xmm12, %xmm10, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm2, %xmm12, %xmm2 vpshufb %xmm4, %xmm2, %xmm15 vpaddq %xmm15, %xmm1, %xmm1 vpxor %xmm8, %xmm11, %xmm8 vpxor %xmm9, %xmm1, %xmm9 vpshufb %xmm4, %xmm8, %xmm8 vpsrlq $63, %xmm9, %xmm10 vpaddq %xmm8, %xmm14, %xmm14 vpaddq %xmm9, %xmm9, %xmm9 vmovdqa %xmm8, %xmm2 vpxor %xmm0, %xmm14, %xmm0 vpxor %xmm10, %xmm9, %xmm8 vpsrlq $63, %xmm0, %xmm10 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm10, %xmm0, %xmm9 vpalignr $8, %xmm9, %xmm8, %xmm0 vpalignr $8, %xmm2, %xmm15, %xmm10 vpalignr $8, %xmm8, %xmm9, %xmm9 vpalignr $8, %xmm15, %xmm2, %xmm3 vmovdqa 32(%rsp), %xmm2 vmovdqa %xmm13, %xmm15 vpunpckhqdq 16(%rsp), %xmm2, %xmm8 vpaddq %xmm0, %xmm8, %xmm8 vpaddq %xmm12, %xmm8, %xmm12 vmovdqa 80(%rsp), %xmm8 vpblendw $240, (%rsp), %xmm2, %xmm2 vpaddq %xmm2, %xmm9, %xmm2 vpxor %xmm3, %xmm12, %xmm3 vpshufd $177, %xmm3, %xmm3 vpaddq %xmm3, %xmm14, %xmm14 vpalignr $8, %xmm6, %xmm8, %xmm8 vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vmovaps %xmm8, 256(%rsp) vpxor %xmm10, %xmm11, %xmm10 vpshufd $177, %xmm10, %xmm10 vpaddq %xmm10, %xmm1, %xmm1 vpaddq 256(%rsp), %xmm0, %xmm8 vpunpckhqdq %xmm7, %xmm13, %xmm2 vpxor %xmm9, %xmm1, %xmm9 vpshufb %xmm5, %xmm9, %xmm9 vpaddq %xmm9, %xmm2, %xmm2 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm3, %xmm12, %xmm3 vpshufb %xmm4, %xmm3, %xmm8 vpaddq %xmm8, %xmm14, %xmm14 vmovdqa %xmm8, %xmm2 vpxor %xmm0, %xmm14, %xmm0 vpxor %xmm10, %xmm11, %xmm10 vpsrlq $63, %xmm0, %xmm8 vpshufb %xmm4, %xmm10, %xmm10 vpaddq %xmm0, %xmm0, %xmm0 vpaddq %xmm10, %xmm1, %xmm1 vpunpcklqdq (%rsp), %xmm7, %xmm3 vpxor %xmm9, %xmm1, %xmm9 vpxor %xmm8, %xmm0, %xmm0 vpsrlq $63, %xmm9, %xmm8 vpaddq %xmm9, %xmm9, %xmm9 vpxor %xmm8, %xmm9, %xmm9 vpalignr $8, %xmm0, %xmm9, %xmm13 vpaddq 240(%rsp), %xmm13, %xmm8 vpalignr $8, %xmm9, %xmm0, %xmm0 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm2, %xmm10, %xmm9 vpaddq %xmm0, %xmm3, %xmm3 vpalignr $8, %xmm10, %xmm2, %xmm2 vpaddq %xmm11, %xmm3, %xmm11 vpunpcklqdq 64(%rsp), %xmm15, %xmm3 vpxor %xmm2, %xmm12, %xmm2 vpshufd $177, %xmm2, %xmm2 vpaddq %xmm2, %xmm1, %xmm1 vpxor %xmm9, %xmm11, %xmm9 vpxor %xmm13, %xmm1, %xmm13 vpshufd $177, %xmm9, %xmm9 vpshufb %xmm5, %xmm13, %xmm13 vpaddq %xmm9, %xmm14, %xmm14 vpaddq %xmm13, %xmm3, %xmm3 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vpaddq %xmm12, %xmm3, %xmm12 vpaddq 384(%rsp), %xmm0, %xmm3 vpxor %xmm2, %xmm12, %xmm2 vpshufb %xmm4, %xmm2, %xmm10 vpaddq %xmm10, %xmm1, %xmm1 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm13, %xmm1, %xmm13 vpxor %xmm9, %xmm11, %xmm9 vpshufb %xmm4, %xmm9, %xmm9 vmovdqa %xmm9, %xmm2 vpaddq %xmm9, %xmm14, %xmm14 vpsrlq $63, %xmm13, %xmm9 vpaddq %xmm13, %xmm13, %xmm13 vpxor %xmm0, %xmm14, %xmm0 vpxor %xmm9, %xmm13, %xmm8 vpsrlq $63, %xmm0, %xmm9 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm9, %xmm0, %xmm13 vmovdqa 48(%rsp), %xmm9 vpalignr $8, %xmm13, %xmm8, %xmm0 vpalignr $8, %xmm2, %xmm10, %xmm15 vpalignr $8, %xmm8, %xmm13, %xmm13 vpalignr $8, %xmm10, %xmm2, %xmm3 vmovdqa 16(%rsp), %xmm10 vpunpcklqdq 80(%rsp), %xmm10, %xmm8 vpaddq %xmm0, %xmm8, %xmm8 vpalignr $8, %xmm6, %xmm9, %xmm2 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm2, %xmm13, %xmm2 vpxor %xmm3, %xmm12, %xmm3 vpshufd $177, %xmm3, %xmm3 vpaddq %xmm3, %xmm14, %xmm14 vpaddq %xmm11, %xmm2, %xmm11 vpxor %xmm0, %xmm14, %xmm0 vpshufb %xmm5, %xmm0, %xmm0 vpalignr $8, %xmm9, %xmm6, %xmm6 vpxor %xmm15, %xmm11, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm1, %xmm10 vmovdqa 80(%rsp), %xmm1 vpxor %xmm13, %xmm10, %xmm13 vpshufb %xmm5, %xmm13, %xmm13 vpunpckhqdq %xmm7, %xmm1, %xmm8 vpalignr $8, (%rsp), %xmm7, %xmm7 vpaddq %xmm0, %xmm8, %xmm1 vpaddq %xmm12, %xmm1, %xmm12 vpaddq %xmm13, %xmm7, %xmm7 vpxor %xmm3, %xmm12, %xmm3 vpshufb %xmm4, %xmm3, %xmm3 vpaddq %xmm3, %xmm14, %xmm14 vpaddq %xmm11, %xmm7, %xmm11 vpxor %xmm0, %xmm14, %xmm0 vpsrlq $63, %xmm0, %xmm7 vpaddq %xmm0, %xmm0, %xmm0 vpxor %xmm15, %xmm11, %xmm15 vpshufb %xmm4, %xmm15, %xmm15 vpaddq %xmm15, %xmm10, %xmm10 vpxor %xmm7, %xmm0, %xmm0 vmovdqa %xmm3, %xmm2 vpxor %xmm13, %xmm10, %xmm3 vpsrlq $63, %xmm3, %xmm7 vpaddq %xmm3, %xmm3, %xmm13 vpxor %xmm7, %xmm13, %xmm13 vpalignr $8, %xmm0, %xmm13, %xmm7 vpaddq 32(%rsp), %xmm7, %xmm1 vmovdqa %xmm9, %xmm3 vpalignr $8, %xmm13, %xmm0, %xmm13 vmovdqa (%rsp), %xmm9 vpaddq %xmm13, %xmm6, %xmm6 vpalignr $8, %xmm2, %xmm15, %xmm0 vpaddq %xmm12, %xmm1, %xmm12 vpaddq %xmm11, %xmm6, %xmm11 vpalignr $8, %xmm15, %xmm2, %xmm2 vpblendw $240, 16(%rsp), %xmm9, %xmm1 vpxor %xmm2, %xmm12, %xmm2 vpxor %xmm0, %xmm11, %xmm0 vpshufd $177, %xmm2, %xmm2 vpshufd $177, %xmm0, %xmm0 vpaddq %xmm2, %xmm10, %xmm10 vpaddq %xmm0, %xmm14, %xmm14 vpxor %xmm7, %xmm10, %xmm7 vpxor %xmm13, %xmm14, %xmm13 vpshufb %xmm5, %xmm7, %xmm7 vpshufb %xmm5, %xmm13, %xmm13 vpaddq %xmm1, %xmm7, %xmm1 vpaddq 64(%rsp), %xmm13, %xmm6 vpaddq %xmm12, %xmm1, %xmm12 vpaddq %xmm11, %xmm6, %xmm11 vpxor %xmm2, %xmm12, %xmm2 vpshufb %xmm4, %xmm2, %xmm15 vpaddq %xmm15, %xmm10, %xmm10 vpxor %xmm7, %xmm10, %xmm7 vpxor %xmm0, %xmm11, %xmm0 vpsrlq $63, %xmm7, %xmm1 vpshufb %xmm4, %xmm0, %xmm0 vpaddq %xmm7, %xmm7, %xmm7 vpaddq %xmm0, %xmm14, %xmm14 vmovdqa %xmm0, %xmm2 vpxor %xmm1, %xmm7, %xmm7 vpxor %xmm13, %xmm14, %xmm13 vpsrlq $63, %xmm13, %xmm1 vpaddq %xmm13, %xmm13, %xmm13 vpxor %xmm1, %xmm13, %xmm0 vmovdqa 16(%rsp), %xmm13 vpalignr $8, %xmm0, %xmm7, %xmm9 vpaddq 192(%rsp), %xmm9, %xmm6 vpalignr $8, %xmm7, %xmm0, %xmm0 vpalignr $8, %xmm2, %xmm15, %xmm1 vpaddq %xmm12, %xmm6, %xmm12 vmovdqa (%rsp), %xmm6 vpalignr $8, %xmm15, %xmm2, %xmm2 vmovdqa %xmm3, %xmm15 vpunpckhqdq %xmm3, %xmm13, %xmm3 vpaddq %xmm0, %xmm3, %xmm3 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm2, %xmm12, %xmm2 vpshufd $177, %xmm2, %xmm2 vpaddq %xmm2, %xmm14, %xmm14 vpxor %xmm1, %xmm11, %xmm1 vpshufd $177, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vpxor %xmm9, %xmm14, %xmm9 vpxor %xmm0, %xmm10, %xmm0 vpshufb %xmm5, %xmm0, %xmm7 vmovdqa 64(%rsp), %xmm0 vpshufb %xmm5, %xmm9, %xmm9 vpblendw $240, %xmm0, %xmm13, %xmm3 vpunpcklqdq %xmm0, %xmm6, %xmm6 vpaddq %xmm9, %xmm6, %xmm6 vpaddq %xmm3, %xmm7, %xmm3 vpaddq %xmm12, %xmm6, %xmm12 vmovdqa (%rsp), %xmm6 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm2, %xmm12, %xmm2 vpshufb %xmm4, %xmm2, %xmm2 vpaddq %xmm2, %xmm14, %xmm14 vpxor %xmm1, %xmm11, %xmm1 vpshufb %xmm4, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vmovdqa %xmm2, %xmm3 vpxor %xmm9, %xmm14, %xmm9 vpxor %xmm7, %xmm10, %xmm7 vpsrlq $63, %xmm9, %xmm0 vpaddq %xmm9, %xmm9, %xmm9 vpsrlq $63, %xmm7, %xmm2 vpaddq %xmm7, %xmm7, %xmm7 vmovdqa %xmm1, %xmm13 vpxor %xmm0, %xmm9, %xmm1 vpxor %xmm2, %xmm7, %xmm7 vpalignr $8, %xmm1, %xmm7, %xmm9 vpaddq %xmm9, %xmm8, %xmm8 vpalignr $8, %xmm7, %xmm1, %xmm7 vmovdqa 32(%rsp), %xmm1 vpalignr $8, %xmm3, %xmm13, %xmm0 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm13, %xmm3, %xmm13 vpunpckhqdq %xmm1, %xmm6, %xmm3 vpaddq %xmm7, %xmm3, %xmm3 vpxor %xmm13, %xmm12, %xmm13 vpshufd $177, %xmm13, %xmm13 vpaddq %xmm13, %xmm10, %xmm10 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm9, %xmm10, %xmm9 vpshufb %xmm5, %xmm9, %xmm9 vpxor %xmm0, %xmm11, %xmm0 vpunpcklqdq %xmm15, %xmm1, %xmm3 vpaddq 256(%rsp), %xmm9, %xmm8 vpshufd $177, %xmm0, %xmm0 vpaddq %xmm0, %xmm14, %xmm14 vpxor %xmm7, %xmm14, %xmm7 vpshufb %xmm5, %xmm7, %xmm7 vpaddq %xmm7, %xmm3, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm13, %xmm12, %xmm13 vpshufb %xmm4, %xmm13, %xmm13 vpaddq %xmm13, %xmm10, %xmm10 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm9, %xmm10, %xmm9 vpshufb %xmm4, %xmm0, %xmm0 vmovdqa %xmm0, %xmm15 vpaddq %xmm0, %xmm14, %xmm14 vpsrlq $63, %xmm9, %xmm0 vpaddq %xmm9, %xmm9, %xmm9 vpxor %xmm7, %xmm14, %xmm7 vpxor %xmm0, %xmm9, %xmm9 vpsrlq $63, %xmm7, %xmm0 vpaddq %xmm7, %xmm7, %xmm7 vpxor %xmm0, %xmm7, %xmm7 vpalignr $8, %xmm7, %xmm9, %xmm6 vpaddq 272(%rsp), %xmm6, %xmm8 vpalignr $8, %xmm9, %xmm7, %xmm7 vpaddq 288(%rsp), %xmm7, %xmm3 vpalignr $8, %xmm15, %xmm13, %xmm0 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm13, %xmm15, %xmm15 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm14, %xmm14 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm6, %xmm14, %xmm6 vpshufd $177, %xmm0, %xmm9 vpshufb %xmm5, %xmm6, %xmm6 vpaddq %xmm9, %xmm10, %xmm10 vpaddq 304(%rsp), %xmm6, %xmm8 vpxor %xmm7, %xmm10, %xmm7 vpshufb %xmm5, %xmm7, %xmm7 vpaddq 320(%rsp), %xmm7, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufb %xmm4, %xmm15, %xmm15 vpaddq %xmm15, %xmm14, %xmm14 vpxor %xmm9, %xmm11, %xmm9 vpxor %xmm6, %xmm14, %xmm6 vpshufb %xmm4, %xmm9, %xmm9 vpsrlq $63, %xmm6, %xmm3 vpaddq %xmm9, %xmm10, %xmm10 vpaddq %xmm6, %xmm6, %xmm6 vpxor %xmm7, %xmm10, %xmm7 vpalignr $8, %xmm9, %xmm15, %xmm1 vpxor %xmm3, %xmm6, %xmm0 vpsrlq $63, %xmm7, %xmm3 vpaddq %xmm7, %xmm7, %xmm7 vpxor %xmm3, %xmm7, %xmm7 vpalignr $8, %xmm0, %xmm7, %xmm6 vpaddq 112(%rsp), %xmm6, %xmm8 vpalignr $8, %xmm7, %xmm0, %xmm7 vpaddq 128(%rsp), %xmm7, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm15, %xmm9, %xmm0 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm1, %xmm12, %xmm1 vpshufd $177, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm6, %xmm10, %xmm6 vpshufd $177, %xmm0, %xmm0 vpshufb %xmm5, %xmm6, %xmm6 vpaddq 336(%rsp), %xmm6, %xmm8 vpaddq %xmm0, %xmm14, %xmm14 vpxor %xmm7, %xmm14, %xmm7 vpshufb %xmm5, %xmm7, %xmm7 vpaddq 144(%rsp), %xmm7, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm1, %xmm12, %xmm1 vpshufb %xmm4, %xmm1, %xmm1 vpaddq %xmm1, %xmm10, %xmm10 vmovdqa %xmm1, %xmm2 vpxor %xmm6, %xmm10, %xmm6 vpxor %xmm0, %xmm11, %xmm0 vpsrlq $63, %xmm6, %xmm1 vpshufb %xmm4, %xmm0, %xmm0 vpaddq %xmm6, %xmm6, %xmm6 vpaddq %xmm0, %xmm14, %xmm14 vmovdqa %xmm0, %xmm13 vpxor %xmm7, %xmm14, %xmm7 vpxor %xmm1, %xmm6, %xmm0 vpsrlq $63, %xmm7, %xmm1 vpaddq %xmm7, %xmm7, %xmm7 vpxor %xmm1, %xmm7, %xmm7 vpalignr $8, %xmm7, %xmm0, %xmm6 vpaddq 160(%rsp), %xmm6, %xmm8 vpalignr $8, %xmm0, %xmm7, %xmm7 vpaddq 176(%rsp), %xmm7, %xmm3 vpalignr $8, %xmm13, %xmm2, %xmm0 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm2, %xmm13, %xmm13 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm13, %xmm12, %xmm13 vpshufd $177, %xmm13, %xmm13 vpaddq %xmm13, %xmm14, %xmm14 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm6, %xmm14, %xmm6 vpshufd $177, %xmm0, %xmm9 vpshufb %xmm5, %xmm6, %xmm6 vpaddq %xmm9, %xmm10, %xmm10 vpaddq 192(%rsp), %xmm6, %xmm8 vpxor %xmm7, %xmm10, %xmm7 vpshufb %xmm5, %xmm7, %xmm7 vpaddq 208(%rsp), %xmm7, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm13, %xmm12, %xmm13 vpshufb %xmm4, %xmm13, %xmm13 vpaddq %xmm13, %xmm14, %xmm14 vpxor %xmm9, %xmm11, %xmm9 vpxor %xmm6, %xmm14, %xmm6 vpshufb %xmm4, %xmm9, %xmm9 vpsrlq $63, %xmm6, %xmm1 vpaddq %xmm9, %xmm10, %xmm10 vpaddq %xmm6, %xmm6, %xmm6 vpxor %xmm7, %xmm10, %xmm7 vpalignr $8, %xmm9, %xmm13, %xmm15 vpxor %xmm1, %xmm6, %xmm0 vpsrlq $63, %xmm7, %xmm1 vpaddq %xmm7, %xmm7, %xmm7 vpxor %xmm1, %xmm7, %xmm7 vpalignr $8, %xmm0, %xmm7, %xmm6 vpaddq 224(%rsp), %xmm6, %xmm8 vpalignr $8, %xmm7, %xmm0, %xmm7 vpaddq 352(%rsp), %xmm7, %xmm3 vpaddq %xmm12, %xmm8, %xmm12 vpalignr $8, %xmm13, %xmm9, %xmm0 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufd $177, %xmm15, %xmm15 vpaddq %xmm15, %xmm10, %xmm10 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm6, %xmm10, %xmm6 vpshufd $177, %xmm0, %xmm0 vpshufb %xmm5, %xmm6, %xmm6 vpaddq 368(%rsp), %xmm6, %xmm8 vpaddq %xmm0, %xmm14, %xmm14 vpxor %xmm7, %xmm14, %xmm7 vpshufb %xmm5, %xmm7, %xmm5 vpaddq 96(%rsp), %xmm5, %xmm3 vmovaps 416(%rsp), %xmm7 vpaddq %xmm12, %xmm8, %xmm12 vpaddq %xmm11, %xmm3, %xmm11 vpxor %xmm15, %xmm12, %xmm15 vpshufb %xmm4, %xmm15, %xmm15 vpaddq %xmm15, %xmm10, %xmm10 vpxor %xmm0, %xmm11, %xmm0 vpxor %xmm6, %xmm10, %xmm6 vpshufb %xmm4, %xmm0, %xmm4 vpsrlq $63, %xmm6, %xmm0 vpaddq %xmm4, %xmm14, %xmm14 vpaddq %xmm6, %xmm6, %xmm6 vpalignr $8, %xmm4, %xmm15, %xmm2 vpxor %xmm10, %xmm11, %xmm11 vpxor %xmm0, %xmm6, %xmm6 vpxor %xmm5, %xmm14, %xmm5 vpsrlq $63, %xmm5, %xmm0 vpaddq %xmm5, %xmm5, %xmm5 vpalignr $8, %xmm15, %xmm4, %xmm1 vpxor %xmm0, %xmm5, %xmm5 vpxor 16(%rcx), %xmm11, %xmm11 vpxor %xmm14, %xmm12, %xmm12 vpalignr $8, %xmm5, %xmm6, %xmm0 vpxor (%rcx), %xmm12, %xmm12 vmovups %xmm11, 16(%rcx) vmovaps 432(%rsp), %xmm8 vpalignr $8, %xmm6, %xmm5, %xmm5 vmovups %xmm12, (%rcx) vpxor %xmm0, %xmm1, %xmm1 vmovaps 400(%rsp), %xmm6 vpxor 32(%rcx), %xmm1, %xmm1 vpxor %xmm5, %xmm2, %xmm5 vmovups %xmm1, 32(%rcx) vpxor 48(%rcx), %xmm5, %xmm5 vmovups %xmm5, 48(%rcx) vmovaps 448(%rsp), %xmm9 vmovaps 464(%rsp), %xmm10 vmovaps 480(%rsp), %xmm11 vmovaps 496(%rsp), %xmm12 vmovaps 512(%rsp), %xmm13 vmovaps 528(%rsp), %xmm14 vmovaps 544(%rsp), %xmm15 addq $568, %rsp {$IF DEFINED(UNIX)} popq %rdx popq %rcx {$ENDIF} end; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/argon2.pas����������������������������������������������0000644�0001750�0000144�00000104503�15104114162�021725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ /* * Argon2 reference source code package - reference C implementations * * Copyright 2015 * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves * * Pascal tranlastion in 2018 by Alexander Koblov (alexx2000@mail.ru) * * You may use this work under the terms of a Creative Commons CC0 1.0 * License/Waiver or the Apache Public License 2.0, at your option. The terms of * these licenses can be found at: * * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 * * You should have received a copy of both of these licenses along with this * software. If not, they may be obtained at the above URLs. */ } unit Argon2; {$mode objfpc}{$H+} {$define USE_MTPROCS} {.$define GENKAT} interface uses CTypes, DCblake2; const //* Number of synchronization points between lanes per pass */ ARGON2_SYNC_POINTS = cuint32(4); //* Flags to determine which fields are securely wiped (default = no wipe). */ ARGON2_DEFAULT_FLAGS = cuint32(0); ARGON2_FLAG_CLEAR_PASSWORD = (cuint32(1) shl 0); ARGON2_FLAG_CLEAR_SECRET = (cuint32(1) shl 1); const //* Error codes */ ARGON2_OK = 0; ARGON2_MEMORY_ALLOCATION_ERROR = -22; ARGON2_INCORRECT_PARAMETER = -25; type Pargon2_context = ^Targon2_context; Targon2_context = record out_: pcuint8; //* output array */ outlen: cuint32; //* digest length */ pwd: pcuint8; //* password array */ pwdlen: cuint32; //* password length */ salt: pcuint8; //* salt array */ saltlen: cuint32; //* salt length */ secret: pcuint8; //* key array */ secretlen: cuint32; //* key length */ ad: pcuint8; //* associated data array */ adlen: cuint32; //* associated data length */ t_cost: cuint32; //* number of passes */ m_cost: cuint32; //* amount of memory requested (KB) */ lanes: cuint32; //* number of lanes */ threads: cuint32; //* maximum number of threads */ version: cuint32; //* version number */ flags: cuint32; //* array of bool options */ end; //* Argon2 primitive type */ Targon2_type = ( Argon2_d = 0, Argon2_i = 1, Argon2_id = 2 ); //* Version of the algorithm */ Targon2_version = ( ARGON2_VERSION_10 = $10, ARGON2_VERSION_13 = $13, ARGON2_VERSION_NUMBER = ARGON2_VERSION_13 ); function argon2id_kdf(const t_cost, m_cost, parallelism: cuint32; const pwd: pansichar; const pwdlen: csize_t; const salt: pansichar; const saltlen: csize_t; hash: Pointer; const hashlen: csize_t): cint; function argon2_hash(const t_cost, m_cost, parallelism: cuint32; const pwd: pansichar; const pwdlen: csize_t; const salt: pansichar; const saltlen: csize_t; const secret: pansichar; const secretlen: csize_t; const ad: pansichar; const adlen: csize_t; hash: Pointer; const hashlen: csize_t; type_: Targon2_type; version: Targon2_version): cint; function argon2_selftest: Boolean; implementation {$R-}{$Q-} uses Math, Hash, SysUtils, StrUtils {$IF DEFINED(USE_MTPROCS)} , MTProcs {$ENDIF} ; //**********************Argon2 internal constants*******************************/ const //* Memory block size in bytes */ ARGON2_BLOCK_SIZE = 1024; ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE div 8; (* Number of pseudo-random values generated by one call to Blake in Argon2i to generate reference block positions *) ARGON2_ADDRESSES_IN_BLOCK = 128; //* Pre-hashing digest length and its extension*/ ARGON2_PREHASH_DIGEST_LENGTH = 64; ARGON2_PREHASH_SEED_LENGTH = 72; //*************************Argon2 internal data types***********************/ type (* * Structure for the (1KB) memory block implemented as 128 64-bit words. * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no * bounds checking). *) Pblock = ^Tblock; Tblock = packed record v: packed array [0..ARGON2_QWORDS_IN_BLOCK-1] of cuint64; end; (* * Argon2 instance: memory pointer, number of passes, amount of memory, type, * and derived values. * Used to evaluate the number and location of blocks to construct in each * thread *) Pargon2_instance_t = ^Targon2_instance_t; Targon2_instance_t = record memory: Pblock; //* Memory pointer */ version: Targon2_version; passes: cuint32; //* Number of passes */ memory_blocks: cuint32; //* Number of blocks in memory */ segment_length: cuint32; lane_length: cuint32; lanes: cuint32; threads: cuint32; type_: Targon2_type; print_internals: cint; //* whether to print the memory blocks */ context_ptr: Pargon2_context; //* points back to original context */ end; (* * Argon2 position: where we construct the block right now. Used to distribute * work between threads. *) Pargon2_position_t = ^Targon2_position_t; Targon2_position_t = record pass: cuint32; slice: cuint8; index: cuint32; instance_ptr: Pargon2_instance_t; end; {$IFDEF GENKAT} procedure initial_kat(const blockhash: pcuint8; const context: Pargon2_context; type_: Targon2_type); var i: cuint32; begin if (blockhash <> nil) and (context <> nil) then begin WriteLn('======================================='); WriteLn(Format('%d version number %d', [type_, context^.version])); WriteLn('======================================='); WriteLn(Format('Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag length: %u bytes', [context^.m_cost, context^.t_cost, context^.lanes, context^.outlen])); Write(Format('Password[%u]: ', [context^.pwdlen])); if (context^.flags and ARGON2_FLAG_CLEAR_PASSWORD <> 0) then begin WriteLn('CLEARED'); end else begin for i := 0 to context^.pwdlen - 1 do Write(Format('%2.2x ', [context^.pwd[i]])); WriteLn; end; Write(Format('Salt[%u]: ', [context^.saltlen])); for i := 0 to context^.saltlen - 1 do begin Write(Format('%2.2x ', [context^.salt[i]])); end; WriteLn; (* printf("Secret[%u]: ", context->secretlen); if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { printf("CLEARED\n"); } else { for (i = 0; i < context->secretlen; ++i) { printf("%2.2x ", ((unsigned char )context->secret)[i]); } printf("\n"); } printf("Associated data[%u]: ", context->adlen); for (i = 0; i < context->adlen; ++i) { printf("%2.2x ", ((unsigned char )context->ad)[i]); } printf("\n"); printf("Pre-hashing digest: "); for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) { printf("%2.2x ", ((unsigned char )blockhash)[i]); } printf("\n"); *) end; end; procedure print_tag(const out_: pcuint8; outlen: cuint32); var i: cuint32; begin if (out_ <> nil) then begin Write('Tag: '); for i := 0 to outlen - 1 do begin Write(Format('%2.2x ', [out_[i]])); end; WriteLn; end; end; procedure internal_kat(const instance: Pargon2_instance_t; pass: cuint32); var i, j: cuint32; how_many_words: cuint32; begin if (instance <> nil) then begin WriteLn(Format('After pass %u:', [pass])); for i := 0 to instance^.memory_blocks - 1 do begin how_many_words := IfThen(instance^.memory_blocks > ARGON2_QWORDS_IN_BLOCK, 1, ARGON2_QWORDS_IN_BLOCK); for j := 0 to how_many_words - 1 do WriteLn(Format('Block %.4u [%3u]: %s', [i, j, HexStr(instance^.memory[i].v[j], 16)])); end; end; end; {$ENDIF} function load32( const src: Pointer ): cuint32; inline; begin Result := NtoLE(pcuint32(src)^); end; function load64( const src: pointer ): cuint64; inline; begin Result := NtoLE(pcuint64(src)^); end; procedure store32( dst: pointer; w: cuint32 ); inline; begin pcuint32(dst)^ := LEtoN(w); end; procedure store64( dst: pointer; w: cuint64 ); inline; begin pcuint64(dst)^ := LEtoN(w); end; //* designed by the Lyra PHC team */ function fBlaMka(x, y: cuint64): cuint64; inline; const m = cuint64($FFFFFFFF); begin Result:= x + y + 2 * ((x and m) * (y and m)); end; procedure G(var a, b, c, d: cuint64); inline; begin a := fBlaMka(a, b); d := RorQWord(d xor a, 32); c := fBlaMka(c, d); b := RorQWord(b xor c, 24); a := fBlaMka(a, b); d := RorQWord(d xor a, 16); c := fBlaMka(c, d); b := RorQWord(b xor c, 63); end; procedure BLAKE2_ROUND_NOMSG(var v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15: cuint64); inline; begin G(v0, v4, v8, v12); G(v1, v5, v9, v13); G(v2, v6, v10, v14); G(v3, v7, v11, v15); G(v0, v5, v10, v15); G(v1, v6, v11, v12); G(v2, v7, v8, v13); G(v3, v4, v9, v14); end; //***************Instance and Position constructors**********/ procedure init_block_value(b: Pblock; in_: cuint8); inline; begin FillChar(b^, SizeOf(Tblock), in_); end; procedure copy_block(dst: Pblock; const src: Pblock); inline; begin Move(src^, dst^, SizeOf(Tblock)); end; procedure xor_block(dst: Pblock; const src: Pblock); var i: cint; begin for i := 0 to ARGON2_QWORDS_IN_BLOCK - 1 do dst^.v[i] := dst^.v[i] xor src^.v[i]; end; procedure load_block(dst: Pblock; const input: PByte); inline; begin Move(input^, dst^, SizeOf(Tblock)); end; procedure store_block(output: PByte; const src: Pblock); inline; begin Move(src^, output^, SizeOf(Tblock)); end; //***************Memory functions*****************/ procedure secure_wipe_memory(v: Pointer; n: csize_t); {$OPTIMIZATION OFF} begin FillChar(v^, n, 0); end; {$OPTIMIZATION DEFAULT} procedure clear_internal_memory(v: Pointer; n: csize_t); begin if (v <> nil) then secure_wipe_memory(v, n); end; function allocate_memory(memory: PPByte; num, size: csize_t): cint; var memory_size: csize_t; begin memory_size := num * size; if (memory = nil) then begin Exit(ARGON2_MEMORY_ALLOCATION_ERROR); end; //* Check for multiplication overflow */ if (size <> 0) and (memory_size div size <> num) then begin Exit(ARGON2_MEMORY_ALLOCATION_ERROR); end; memory^ := GetMem(memory_size); if (memory^ = nil) then begin Exit(ARGON2_MEMORY_ALLOCATION_ERROR); end; Result:= ARGON2_OK; end; procedure free_memory(memory: pcuint8; num, size: csize_t); var memory_size: csize_t; begin memory_size := num * size; clear_internal_memory(memory, memory_size); FreeMem(memory); end; (* * Function fills a new memory block and optionally XORs the old block over the new one. * @next_block must be initialized. * @param prev_block Pointer to the previous block * @param ref_block Pointer to the reference block * @param next_block Pointer to the block to be constructed * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) * @pre all block pointers must be valid *) procedure fill_block(const prev_block: Pblock; const ref_block: Pblock; next_block: Pblock; with_xor: boolean); var i: cuint32; blockR, block_tmp: Tblock; begin copy_block(@blockR, ref_block); xor_block(@blockR, prev_block); copy_block(@block_tmp, @blockR); //* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block */ if (with_xor) then begin //* Saving the next block contents for XOR over: */ xor_block(@block_tmp, next_block); (* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block + next_block *) end; (* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then (16,17,..31)... finally (112,113,...127) *) for i := 0 to 7 do begin BLAKE2_ROUND_NOMSG( blockR.v[16 * i], blockR.v[16 * i + 1], blockR.v[16 * i + 2], blockR.v[16 * i + 3], blockR.v[16 * i + 4], blockR.v[16 * i + 5], blockR.v[16 * i + 6], blockR.v[16 * i + 7], blockR.v[16 * i + 8], blockR.v[16 * i + 9], blockR.v[16 * i + 10], blockR.v[16 * i + 11], blockR.v[16 * i + 12], blockR.v[16 * i + 13], blockR.v[16 * i + 14], blockR.v[16 * i + 15]); end; (* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) *) for i := 0 to 7 do begin BLAKE2_ROUND_NOMSG( blockR.v[2 * i], blockR.v[2 * i + 1], blockR.v[2 * i + 16], blockR.v[2 * i + 17], blockR.v[2 * i + 32], blockR.v[2 * i + 33], blockR.v[2 * i + 48], blockR.v[2 * i + 49], blockR.v[2 * i + 64], blockR.v[2 * i + 65], blockR.v[2 * i + 80], blockR.v[2 * i + 81], blockR.v[2 * i + 96], blockR.v[2 * i + 97], blockR.v[2 * i + 112], blockR.v[2 * i + 113]); end; copy_block(next_block, @block_tmp); xor_block(next_block, @blockR); end; function blake2b(out_: pcuint8; outlen: csize_t; const in_: pcuint8; inlen: csize_t): cint; var S: blake2b_state; begin if (blake2b_init(@S, outlen) = 0) then begin blake2b_update(@S, in_, inlen); blake2b_final(@S, out_, outlen); Exit(0); end; Result:= -1; end; procedure blake2b_long(pout: pointer; outlen: csize_t; const in_: pointer; inlen: csize_t); var out_: pcuint8; toproduce: cuint32; blake_state: blake2b_state; outlen_bytes: array [0..sizeof(cuint32)-1] of cuint8; in_buffer: array[0..Pred(BLAKE2B_OUTBYTES)] of cuint8; out_buffer: array[0..Pred(BLAKE2B_OUTBYTES)] of cuint8; begin out_:= pout; //* Ensure little-endian byte order! */ store32(@outlen_bytes[0], cuint32(outlen)); if (outlen <= BLAKE2B_OUTBYTES) then begin blake2b_init(@blake_state, outlen); blake2b_update(@blake_state, outlen_bytes, sizeof(outlen_bytes)); blake2b_update(@blake_state, in_, inlen); blake2b_final(@blake_state, out_, outlen); end else begin blake2b_init(@blake_state, BLAKE2B_OUTBYTES); blake2b_update(@blake_state, outlen_bytes, sizeof(outlen_bytes)); blake2b_update(@blake_state, in_, inlen); blake2b_final(@blake_state, out_buffer, BLAKE2B_OUTBYTES); Move(out_buffer[0], out_^, BLAKE2B_OUTBYTES div 2); out_ += BLAKE2B_OUTBYTES div 2; toproduce := cuint32(outlen) - BLAKE2B_OUTBYTES div 2; while (toproduce > BLAKE2B_OUTBYTES) do begin Move(out_buffer[0], in_buffer[0], BLAKE2B_OUTBYTES); blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer, BLAKE2B_OUTBYTES); Move(out_buffer[0], out_^, BLAKE2B_OUTBYTES div 2); out_ += BLAKE2B_OUTBYTES div 2; toproduce -= BLAKE2B_OUTBYTES div 2; end; Move(out_buffer[0], in_buffer[0], BLAKE2B_OUTBYTES); blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES); Move(out_buffer[0], out_^, toproduce); end; clear_internal_memory(@blake_state, sizeof(blake_state)); end; procedure next_addresses(address_block, input_block: Pblock; const zero_block: Pblock); begin Inc(input_block^.v[6]); fill_block(zero_block, input_block, address_block, false); fill_block(zero_block, address_block, address_block, false); end; function index_alpha(const instance: Pargon2_instance_t; const position: Pargon2_position_t; pseudo_rand: cuint32; same_lane: boolean): cuint32; var reference_area_size: cuint32; relative_position: cuint64; start_position, absolute_position: cuint32; begin (* * Pass 0: * This lane : all already finished segments plus already constructed * blocks in this segment * Other lanes : all already finished segments * Pass 1+: * This lane : (SYNC_POINTS - 1) last segments plus already constructed * blocks in this segment * Other lanes : (SYNC_POINTS - 1) last segments *) if (0 = position^.pass) then begin //* First pass */ if (0 = position^.slice) then begin //* First slice */ reference_area_size := position^.index - 1; //* all but the previous */ end else begin if (same_lane) then begin //* The same lane => add current segment */ reference_area_size := position^.slice * instance^.segment_length + position^.index - 1; end else begin reference_area_size := position^.slice * instance^.segment_length + IfThen((position^.index = 0), (-1), 0); end; end end else begin //* Second pass */ if (same_lane) then begin reference_area_size := instance^.lane_length - instance^.segment_length + position^.index - 1; end else begin reference_area_size := instance^.lane_length - instance^.segment_length + IfThen((position^.index = 0), (-1), 0); end; end; (* 1.2.4. Mapping pseudo_rand to 0..<reference_area_size-1> and produce * relative position *) relative_position := pseudo_rand; relative_position := relative_position * relative_position shr 32; relative_position := reference_area_size - 1 - (reference_area_size * relative_position shr 32); //* 1.2.5 Computing starting position */ start_position := 0; if (0 <> position^.pass) then begin start_position := IfThen(position^.slice = ARGON2_SYNC_POINTS - 1, 0, (position^.slice + 1) * instance^.segment_length); end; //* 1.2.6. Computing absolute position */ absolute_position := (start_position + relative_position) mod instance^.lane_length; //* absolute position */ Result:= absolute_position; end; procedure fill_segment(position_lane: PtrInt; Data: Pointer; {%H-}Item: TObject); var ref_block: Pblock = nil; curr_block: Pblock = nil; address_block, input_block, zero_block: Tblock; pseudo_rand, ref_index, ref_lane: cuint64; prev_offset, curr_offset: cuint32; starting_index: cuint32; i: cuint32; data_independent_addressing: boolean; position: Targon2_position_t; instance: Pargon2_instance_t absolute position.instance_ptr; begin if (Data = nil) then Exit; position := Pargon2_position_t(Data)^; data_independent_addressing := (instance^.type_ = Argon2_i) or ((instance^.type_ = Argon2_id) and (position.pass = 0) and (position.slice < ARGON2_SYNC_POINTS div 2)); if (data_independent_addressing) then begin init_block_value(@zero_block, 0); init_block_value(@input_block, 0); input_block.v[0] := position.pass; input_block.v[1] := position_lane; input_block.v[2] := position.slice; input_block.v[3] := instance^.memory_blocks; input_block.v[4] := instance^.passes; input_block.v[5] := cuint64(instance^.type_); end; position.index := 0; starting_index := 0; if ((0 = position.pass) and (0 = position.slice)) then begin starting_index := 2; //* we have already generated the first two blocks */ //* Don't forget to generate the first block of addresses: */ if (data_independent_addressing) then begin next_addresses(@address_block, @input_block, @zero_block); end; end; //* Offset of the current block */ curr_offset := position_lane * instance^.lane_length + position.slice * instance^.segment_length + starting_index; if (0 = curr_offset mod instance^.lane_length) then begin //* Last block in this lane */ prev_offset := curr_offset + instance^.lane_length - 1; end else begin //* Previous block */ prev_offset := curr_offset - 1; end; for i := starting_index to instance^.segment_length - 1 do begin //*1.1 Rotating prev_offset if needed */ if (curr_offset mod instance^.lane_length = 1) then begin prev_offset := curr_offset - 1; end; //* 1.2 Computing the index of the reference block */ //* 1.2.1 Taking pseudo-random value from the previous block */ if (data_independent_addressing) then begin if (i mod ARGON2_ADDRESSES_IN_BLOCK = 0) then begin next_addresses(@address_block, @input_block, @zero_block); end; pseudo_rand := address_block.v[i mod ARGON2_ADDRESSES_IN_BLOCK]; end else begin pseudo_rand := instance^.memory[prev_offset].v[0]; end; //* 1.2.2 Computing the lane of the reference block */ ref_lane := ((pseudo_rand shr 32)) mod instance^.lanes; if ((position.pass = 0) and (position.slice = 0)) then begin //* Can not reference other lanes yet */ ref_lane := position_lane; end; //* 1.2.3 Computing the number of possible reference block within the lane. */ position.index := i; ref_index := index_alpha(instance, @position, pseudo_rand and $FFFFFFFF, ref_lane = position_lane); //* 2 Creating a new block */ ref_block := instance^.memory + instance^.lane_length * ref_lane + ref_index; curr_block := instance^.memory + curr_offset; if (ARGON2_VERSION_10 = instance^.version) then begin //* version 1.2.1 and earlier: overwrite, not XOR */ fill_block(instance^.memory + prev_offset, ref_block, curr_block, false); end else begin if (0 = position.pass) then begin fill_block(instance^.memory + prev_offset, ref_block, curr_block, false); end else begin fill_block(instance^.memory + prev_offset, ref_block, curr_block, true); end; end; Inc(curr_offset); Inc(prev_offset); end; end; procedure finalize(const context: Pargon2_context; instance: Pargon2_instance_t); var l: cuint32; blockhash: Tblock; last_block_in_lane: cuint32; blockhash_bytes: array [0..ARGON2_BLOCK_SIZE-1] of cuint8; begin if (context <> nil) and (instance <> nil) then begin copy_block(@blockhash, instance^.memory + instance^.lane_length - 1); //* XOR the last blocks */ for l := 1 to instance^.lanes - 1 do begin last_block_in_lane := l * instance^.lane_length + (instance^.lane_length - 1); xor_block(@blockhash, instance^.memory + last_block_in_lane); end; //* Hash the result */ begin store_block(@blockhash_bytes[0], @blockhash); blake2b_long(context^.out_, context^.outlen, @blockhash_bytes[0], ARGON2_BLOCK_SIZE); //* clear blockhash and blockhash_bytes */ clear_internal_memory(@blockhash.v[0], ARGON2_BLOCK_SIZE); clear_internal_memory(@blockhash_bytes[0], ARGON2_BLOCK_SIZE); end; {$IFDEF GENKAT} print_tag(context^.out_, context^.outlen); {$ENDIF} free_memory(pcuint8(instance^.memory), instance^.memory_blocks, sizeof(Tblock)); end; end; function fill_memory_blocks(instance: Pargon2_instance_t): cint; var r, s, l: cuint32; position: Targon2_position_t; begin if (instance = nil) or (instance^.lanes = 0) then begin Exit(ARGON2_INCORRECT_PARAMETER); end; position.instance_ptr:= instance; for r := 0 to instance^.passes - 1 do begin position.pass:= r; for s := 0 to ARGON2_SYNC_POINTS - 1 do begin position.slice:= s; {$IF DEFINED(USE_MTPROCS)} if instance^.lanes > 1 then ProcThreadPool.DoParallel(TMTProcedure(@fill_segment), 0, instance^.lanes - 1, @position) else {$ENDIF} for l := 0 to instance^.lanes - 1 do fill_segment(l, @position, nil); end; {$IFDEF GENKAT} internal_kat(instance, r); ///* Print all memory blocks */ {$ENDIF} end; Result:= ARGON2_OK; end; procedure fill_first_blocks(blockhash: pcuint8; const instance: pargon2_instance_t); var l: cuint32; blockhash_bytes: array[0..ARGON2_BLOCK_SIZE-1] of cuint8; begin //* Make the first and second block in each lane as G(H0||0||i) or G(H0||1||i) */ for l := 0 to instance^.lanes - 1 do begin store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0); store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l); blake2b_long(@blockhash_bytes[0], ARGON2_BLOCK_SIZE, blockhash, ARGON2_PREHASH_SEED_LENGTH); load_block(@instance^.memory[l * instance^.lane_length + 0], blockhash_bytes); store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1); blake2b_long(@blockhash_bytes[0], ARGON2_BLOCK_SIZE, blockhash, ARGON2_PREHASH_SEED_LENGTH); load_block(@instance^.memory[l * instance^.lane_length + 1], blockhash_bytes); end; clear_internal_memory(@blockhash_bytes[0], ARGON2_BLOCK_SIZE); end; procedure initial_hash(blockhash: pcuint8; context: Pargon2_context; type_: Targon2_type); var BlakeHash: blake2b_state; value: array[0..sizeof(cuint32)-1] of cuint8; begin if (nil = context) or (nil = blockhash) then Exit; blake2b_init(@BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH); store32(@value[0], context^.lanes); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], context^.outlen); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], context^.m_cost); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], context^.t_cost); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], context^.version); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], cuint32(type_)); blake2b_update(@BlakeHash, @value[0], sizeof(value)); store32(@value[0], context^.pwdlen); blake2b_update(@BlakeHash, @value[0], sizeof(value)); if (context^.pwd <> nil) then begin blake2b_update(@BlakeHash, context^.pwd, context^.pwdlen); if (context^.flags and ARGON2_FLAG_CLEAR_PASSWORD <> 0) then begin secure_wipe_memory(context^.pwd, context^.pwdlen); context^.pwdlen := 0; end; end; store32(@value[0], context^.saltlen); blake2b_update(@BlakeHash, @value[0], sizeof(value)); if (context^.salt <> nil) then begin blake2b_update(@BlakeHash, context^.salt, context^.saltlen); end; store32(@value[0], context^.secretlen); blake2b_update(@BlakeHash, @value[0], sizeof(value)); if (context^.secret <> nil) then begin blake2b_update(@BlakeHash, context^.secret, context^.secretlen); if (context^.flags and ARGON2_FLAG_CLEAR_SECRET <> 0) then begin secure_wipe_memory(context^.secret, context^.secretlen); context^.secretlen := 0; end; end; store32(@value[0], context^.adlen); blake2b_update(@BlakeHash, @value[0], sizeof(value)); if (context^.ad <> nil) then begin blake2b_update(@BlakeHash, context^.ad, context^.adlen); end; blake2b_final(@BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH); end; function initialize(instance: Pargon2_instance_t; context: Pargon2_context): cint; var blockhash: array[0..ARGON2_PREHASH_SEED_LENGTH-1] of cuint8; begin instance^.context_ptr := context; //* 1. Memory allocation */ result := allocate_memory(@(instance^.memory), instance^.memory_blocks, sizeof(Tblock)); if (result <> ARGON2_OK) then Exit; (* 2. Initial hashing */ /* H_0 + 8 extra bytes to produce the first blocks */ /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */ /* Hashing all inputs *) initial_hash(blockhash, context, instance^.type_); //* Zeroing 8 extra bytes */ clear_internal_memory(@blockhash[ARGON2_PREHASH_DIGEST_LENGTH], ARGON2_PREHASH_SEED_LENGTH - ARGON2_PREHASH_DIGEST_LENGTH); {$IFDEF GENKAT} initial_kat(blockhash, context, instance^.type_); {$ENDIF} //* 3. Creating first blocks, we always have at least two blocks in a slice */ fill_first_blocks(blockhash, instance); //* Clearing the hash */ clear_internal_memory(@blockhash[0], ARGON2_PREHASH_SEED_LENGTH); Result:= ARGON2_OK; end; function argon2_ctx(context: Pargon2_context; type_: Targon2_type): cint; var memory_blocks, segment_length: cuint32; instance: Targon2_instance_t; begin (* //* 1. Validate all inputs */ int result = validate_inputs(context); if (ARGON2_OK != result) { return result; } if (Argon2_d != type && Argon2_i != type && Argon2_id != type) { return ARGON2_INCORRECT_TYPE; } *) //* 2. Align memory size */ //* Minimum memory_blocks = 8L blocks, where L is the number of lanes */ memory_blocks := context^.m_cost; if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context^.lanes) then begin memory_blocks := 2 * ARGON2_SYNC_POINTS * context^.lanes; end; segment_length := memory_blocks div (context^.lanes * ARGON2_SYNC_POINTS); //* Ensure that all segments have equal length */ memory_blocks := segment_length * (context^.lanes * ARGON2_SYNC_POINTS); instance.version := Targon2_version(context^.version); instance.memory := nil; instance.passes := context^.t_cost; instance.memory_blocks := memory_blocks; instance.segment_length := segment_length; instance.lane_length := segment_length * ARGON2_SYNC_POINTS; instance.lanes := context^.lanes; instance.threads := context^.threads; instance.type_ := type_; if (instance.threads > instance.lanes) then begin instance.threads := instance.lanes; end; //* 3. Initialization: Hashing inputs, allocating memory, filling first blocks */ result := initialize(@instance, context); if (ARGON2_OK <> result) then Exit; //* 4. Filling memory */ result := fill_memory_blocks(@instance); if (ARGON2_OK <> result) then Exit; //* 5. Finalization */ finalize(context, @instance); Result:= ARGON2_OK; end; function argon2_hash(const t_cost, m_cost, parallelism: cuint32; const pwd: pansichar; const pwdlen: csize_t; const salt: pansichar; const saltlen: csize_t; const secret: pansichar; const secretlen: csize_t; const ad: pansichar; const adlen: csize_t; hash: Pointer; const hashlen: csize_t; type_: Targon2_type; version: Targon2_version): cint; var context: Targon2_context; begin (* if (pwdlen > ARGON2_MAX_PWD_LENGTH) { return ARGON2_PWD_TOO_LONG; } if (saltlen > ARGON2_MAX_SALT_LENGTH) { return ARGON2_SALT_TOO_LONG; } if (hashlen > ARGON2_MAX_OUTLEN) { return ARGON2_OUTPUT_TOO_LONG; } if (hashlen < ARGON2_MIN_OUTLEN) { return ARGON2_OUTPUT_TOO_SHORT; } *) context.out_ := GetMem(hashlen); if (context.out_ = nil) then begin Exit(ARGON2_MEMORY_ALLOCATION_ERROR); end; context.outlen := cuint32(hashlen); context.pwd := pcuint8(pwd); context.pwdlen := cuint32(pwdlen); context.salt := pcuint8(salt); context.saltlen := cuint32(saltlen); context.secret := pcuint8(secret); context.secretlen := secretlen; context.ad := pcuint8(ad); context.adlen := adlen; context.t_cost := t_cost; context.m_cost := m_cost; context.lanes := parallelism; context.threads := parallelism; context.flags := ARGON2_DEFAULT_FLAGS; context.version := cuint32(version); result := argon2_ctx(@context, type_); //* if raw hash requested, write it */ if (result = ARGON2_OK) and (hash <> nil) then begin Move(context.out_^, hash^, hashlen); end; clear_internal_memory(context.out_, hashlen); FreeMem(context.out_); end; function argon2id_kdf(const t_cost, m_cost, parallelism: cuint32; const pwd: pansichar; const pwdlen: csize_t; const salt: pansichar; const saltlen: csize_t; hash: Pointer; const hashlen: csize_t): cint; begin Result:= argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, nil, 0, nil, 0, hash, hashlen, Argon2_id, ARGON2_VERSION_NUMBER); end; function argon2_selftest: Boolean; function hash_test(version: Targon2_version; type_: Targon2_type; t, m, p: cuint32; pwd, salt, hex: String): Boolean; var Q: QWord; out_: String; out_hex: String; out_len: Integer; begin out_len:= Length(hex) div 2; WriteLn(Format('Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s, result=%d', [version, t, m, p, pwd, salt, out_len])); SetLength(out_, out_len); Q:= GetTickCount64; argon2_hash(t, 1 shl m, p, Pointer(pwd), Length(pwd), Pointer(salt), Length(salt), nil, 0, nil, 0, Pointer(out_), OUT_LEN, type_, version); WriteLn('Time: ', GetTickCount64 - Q); SetLength(out_hex, OUT_LEN * 2); BinToHex(PAnsiChar(out_), PAnsiChar(out_hex), OUT_LEN); Result:= SameText(hex, out_hex); WriteLn('Must: ', hex); WriteLn('Have: ', out_hex); WriteLn('Result: ', Result); WriteLn('------------------------------------------------------------'); end; begin Result:= True; // Test Argon2i Result:= Result and hash_test(ARGON2_VERSION_10, Argon2_i, 2, 16, 1, 'password', 'somesalt', 'f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694'); Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_i, 2, 16, 1, 'password', 'somesalt', 'c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0'); Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_i, 2, 16, 1, 'differentpassword', 'somesalt', '14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee'); Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_i, 2, 16, 1, 'password', 'diffsalt', 'b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271'); // Test Argon2d Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_d, 2, 16, 1, 'password', 'somesalt', '955e5d5b163a1b60bba35fc36d0496474fba4f6b59ad53628666f07fb2f93eaf'); // Test Argon2id Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_id, 2, 16, 1, 'password', 'somesalt', '09316115d5cf24ed5a15a31a3ba326e5cf32edc24702987c02b6566f61913cf7'); Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_id, 2, 16, 2, 'password', 'somesalt', '6f681ac1c3384a90119d2763a683f9ac79532d999abfab5644aa8aafd3d0d234'); // Recommended parameters (the running time about 125ms on Intel Core i5-7400 64 bit) Result:= Result and hash_test(ARGON2_VERSION_NUMBER, Argon2_id, 2, 16, 4, 'password','123456789012345678901234567890xy', 'c80142cbb6076b2d6be20137ddf24679cfc70eb4cde0f242a342e9e63636292eb2efcd907873fc19ca0bee0b7d7e992a7f68ce24a2da379bc41d5eb235f76eaa17220a6fa82d2d4a2e168b021dbfa5ba5a9f232ea0a1e24d'); WriteLn('Result: ', Result); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�021437� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/std.inc�����������������������������������������0000644�0001750�0000144�00000040100�15104114162�022717� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(************************************************************************* DESCRIPTION : Standard definitions and options REQUIREMENTS : TP5-7, D1-D7/D9-D12/D14-D24, FPC, VP, (TPW1.0/1.5,BCB3/4) Version Date Author Modification ------- -------- ------- ------------------------------------------ 1.00 05.10.03 W.Ehrhardt Initial version 1.01 05.10.03 we X_OPT, removed TP4 1.02 30.10.03 we WINCRT 1.03 09.12.03 we {$R+,S+} {$ifdef debug} 1.04 26.12.03 we VP: {&Optimise+,SmartLink+,Speed+} ifndef debug 1.05 28.12.03 we DELPHI = Delphi32 (no Delphi 1!) 1.06 12.04.04 we Delphi 7 1.07 26.09.04 we Record starting values of important options 1.08 10.10.04 we RESULT for Result pseudo variable 1.09 02.01.05 we BIT16: default $F- 1.10 26.02.05 we StrictLong 1.11 05.05.05 we D9 aka Delphi 2005 1.12 22.05.05 we StrictLong for FPC 2.0 1.13 27.05.05 we {$goto on} for FPC 1.14 27.05.05 we moved {$goto on} to default settings 1.15 29.05.05 we HAS_INT64, HAS_MSG, _STD_INC_ 1.16 06.08.05 we J_OPT, N_OPT, HAS_INLINE 1.17 17.08.05 we HAS_ASSERT 1.18 08.11.05 we APPCONS, partial TMT,TPW15 support 1.19 20.11.05 we Default option {$B-} 1.20 08.01.06 we ABSTRACT/DEFAULT 1.21 08.02.06 we Fix Scanhelp quirk 1.22 11.02.06 we VER5X 1.23 15.04.06 we HAS_XTYPES 1.24 08.05.06 we D10 aka Delphi 2006 1.25 25.05.06 we Define RESULT if FPC_OBJFPC is defined 1.26 08.09.06 we Define RESULT/DEFAULT if FPC_DELPHI is defined 1.27 14.11.06 we HAS_ASSERT for FPC VER1 and VER2 1.28 28.11.06 we HAS_UNSAFE, $warn SYMBOL_../UNSAFE_.. OFF 1.29 25.05.07 we D11 aka Delphi 2007, FPC2.1.4 1.30 23.06.07 we FPC_ProcVar: Helper for procedure variables 1.31 18.09.07 we HAS_INLINE for FPC VER2 1.32 04.10.07 we FPC Intel ASMmode only if CPUI386 is defined 1.33 22.11.07 we Record value of $X option, undef RESULT if $X- 1.34 19.05.08 we HAS_UINT64 1.35 21.06.08 we V7PLUS, HAS_UINT64 for FPC VER2_2 1.36 07.09.08 we HAS_CARD32 1.37 21.11.08 we D12 aka D2009 1.38 19.02.09 we TPW 1.0 adjustments 1.39 05.07.09 we D12Plus 1.40 17.10.09 we BASM (BASM16 or Bit32) 1.41 21.10.09 we HAS_OVERLOAD 1.42 07.04.10 we HAS_DENORM_LIT (Denormalised extended literals, e.g. -1.23e-4942) 1.43 20.06.10 we D14 (VER210) 1.45 16.10.10 we WIN16 1.46 05.11.10 we FPC VER2_4 1.47 12.11.11 we FPC VER2_6 1.48 01.01.12 we HAS_UINT64 for FPC VER2_6 1.49 12.01.12 we BIT64, WIN32or64, Bit32or64 1.50 13.01.12 we EXT64 (64 bit extended = double) 1.51 19.01.12 we Define EXT64 if SIMULATE_EXT64 1.52 05.09.12 we Basic support for D14, D15(XE), D16(XE2), D17(XE3) 1.53 01.12.12 we Simplified FPC 2.X.Y definitions 1.54 17.12.12 we UNIT_SCOPE (D16/D17) 1.55 25.12.12 we J_OPT for BIT64 1.56 25.04.13 we D18/XE4 (VER250) 1.57 28.09.13 we Basic support for D19/XE5 (VER260) 1.58 17.04.14 we Basic support for D20/XE6 (VER270) 1.59 06.05.14 we FPC/CPUARM: $define EXT64, i.e. no FP 80-bit extended 1.60 13.09.14 we Basic support for D21/XE7 (VER280) 1.61 22.10.14 we HAS_OUT 1.62 13.01.15 we FPC VER3 (FPC3.0.1/3.1.1), FPC2Plus, FPC271or3 1.63 22.04.15 we Basic support for D22/XE8 (VER290) 1.64 25.04.15 we HAS_INTXX, HAS_PINTXX 1.65 01.09.15 we Basic support for D23 (VER300) 'Seattle' 1.66 26.04.16 we Basic support for D24 (VER310) 'Berlin' **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2002-2016 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$ifndef _STD_INC_} {$define _STD_INC_} {include STD.INC only once} {.$undef BIT16} {16 Bit code, Pascal / D1} {.$undef BIT32} {32 Bit code} {.$undef BIT64} {64 Bit code} {.$undef DELPHI} {Delphi2+ and BCB++} {.$undef G_OPT} {G+ option support} {.$undef D4PLUS} {Delphi 4 or higher} {.$undef BASM16} {16 Bit BASM} {.$undef LoadArgs} {Register params} {.$undef WINCRT} {Use WinCRT for console} {.$undef WIN16} {Compiler for 16-bit windows} {.$undef WIN32or64} {Compiler for 32/64-bit windows} {.$undef RESULT} {Result pseudo variable} {.$undef StrictLong} {Warning for longint const with MS bit} {.$undef HAS_INT64} { int64 integer type available} {.$undef HAS_UINT64} {uint64 integer type available} {.$undef HAS_CARD32} {Has 32 bit cardinal} {.$undef HAS_MSG} {Has message directive} {.$undef HAS_INLINE} {Has inline procs/funcs (D9)} {.$undef HAS_OUT} {Has OUT parameters: D3+, FPC2+ Delphi/ObjFPC} {.$undef ABSTRACT} {Has abstract methods} {.$undef DEFAULT} {Support default parameters} {.$undef VER5X} {TP5 or TP55} {.$undef HAS_XTYPES} {Xtra types in system: pByte, pLongint etc} {.$undef HAS_UNSAFE} {UNSAFE warnings} {.$undef APPCONS} {Needs "Apptype console" for console application} {.$undef FPC_ProcVar} {FPC handling of @ and proc variables} {.$undef FPC2Plus} {FPC 2 or newer} {.$undef FPC271or3} {FPC 271 or 3 (less accurate for 64 bit or SSE2)} {.$undef D12PLUS} {Delphi 12 or higher} {.$undef HAS_OVERLOAD} {Overloading of procedures and functions} {.$undef HAS_DENORM_LIT} {Denormalised (extended) literals, e.g. -1.23e-4942} {.$undef EXT64} {64 bit extended = double} {.$undef UNIT_SCOPE} {Unit scope name, D16+} {.$undef HAS_INTXX} {Int8 .. Int32, UInt8 .. UInt32} {.$undef HAS_PINTXX} {pInt8 .. pInt32, pUInt8 .. pUInt32} {$define CONST} {const in proc declaration} {$define Q_OPT} {Q- option support} {$define X_OPT} {X+ option support} {$define N_OPT} {N+ option support} {$define BASM} {BASM16 or BIT32} {$define V7PLUS} {TP7 or higher} {$ifdef VER10} {TPW 1.0} {$define BIT16} {$define BASM16} {$define WINCRT} {$define G_OPT} {$undef CONST} {$undef Q_OPT} {$undef V7PLUS} {$endif} {$ifdef VER15} {TPW 1.5} {$define BIT16} {$define BASM16} {$define WINCRT} {$define G_OPT} {$undef CONST} {$undef Q_OPT} {$undef V7PLUS} {$endif} {$ifdef VER50 } {$define BIT16} {$define VER5X} {$undef BASM} {$undef CONST} {$undef Q_OPT} {$undef X_OPT} {$undef V7PLUS} {$endif} {$ifdef VER55 } {$define BIT16} {$define VER5X} {$undef BASM} {$undef CONST} {$undef Q_OPT} {$undef X_OPT} {$undef V7PLUS} {$endif} {$ifdef VER60 } {$define BIT16} {$undef CONST} {$undef Q_OPT} {$define G_OPT} {$define BASM16} {$undef V7PLUS} {$endif} {$ifdef VER70 } {$define BIT16} {$define G_OPT} {$define BASM16} {$endif} {$ifdef VER80} {.$define DELPHI} {D1} {*we V1.05} {$define BIT16 } {$define G_OPT } {$define BASM16} {$define WINCRT} {$define RESULT} {$endif} {$ifdef VER90 } {$define DELPHI} {D2} {$endif} {$ifdef VER93 } {$define DELPHI} {BCB++1} {$endif} {$ifdef VER100} {$define DELPHI} {D3} {$define HAS_ASSERT} {$define HAS_OUT} {$endif} {$ifdef VER110} {$define DELPHI} {BCB3} {$define HAS_OUT} {$endif} {$ifdef VER120} {$define DELPHI} {D4} {$define D4PLUS} {$endif} {$ifdef VER125} {$define DELPHI} {BCB4} {$define D4PLUS} {$endif} {$ifdef VER130} {$define DELPHI} {D5} {$define D4PLUS} {$endif} {$ifdef VER140} {$define DELPHI} {D6} {$define D4PLUS} {$endif} {$ifdef VER150} {$define DELPHI} {D7} {$define D4PLUS} {$define HAS_UNSAFE} {$define HAS_UINT64} {$endif} {$ifdef VER170} {$define DELPHI} {D9} {$define D4PLUS} {$define HAS_INLINE} {$define HAS_UNSAFE} {$define HAS_UINT64} {$endif} {$ifdef VER180} {$define DELPHI} {D10, D11 ifdef VER185} {$define D4PLUS} {$define HAS_INLINE} {$define HAS_UNSAFE} {$define HAS_UINT64} {$endif} {$ifdef VER200} {$define DELPHI} {D12} {$define D12PLUS} {$endif} {$ifdef VER210} {$define DELPHI} {D14} {$define D12PLUS} {$endif} {$ifdef VER220} {$define DELPHI} {D15 - XE} {$define D12PLUS} {$endif} {$ifdef VER230} {$define DELPHI} {D16 - XE2} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER240} {$define DELPHI} {D17 - XE3} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER250} {$define DELPHI} {D18 - XE4} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER260} {$define DELPHI} {D19 - XE5} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER270} {$define DELPHI} {D20 - XE6} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER280} {$define DELPHI} {D21 - XE7} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER290} {$define DELPHI} {D22 - XE8} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER300} {$define DELPHI} {D23} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef VER310} {$define DELPHI} {D24} {$define D12PLUS} {$define UNIT_SCOPE} {$endif} {$ifdef CONDITIONALEXPRESSIONS} {D6+} {$ifndef D4PLUS} {$define D4PLUS} {$endif} {$define HAS_MSG} {$define HAS_XTYPES} {$ifdef CPUX64} {$define BIT64} {$endif} {$endif} {$ifdef VER70} {$ifdef windows} {$define WINCRT} {$endif} {$endif} {$ifdef VirtualPascal} {$define G_OPT} {$define RESULT} {$define LoadArgs} {$endif} {$ifdef WIN32} {$define J_OPT} {$endif} {$ifdef BIT64} {$define J_OPT} {$endif} {$ifdef FPC} {$define FPC_ProcVar} {$define ABSTRACT} {$define HAS_XTYPES} {$define HAS_OVERLOAD} {$undef N_OPT} {$ifdef VER1} {$undef J_OPT} {$define HAS_INT64} {$define HAS_CARD32} {$define HAS_MSG} {$define HAS_ASSERT} {$ifndef VER1_0} {FPC 1.9.x} {$define StrictLong} {$else} {$define LoadArgs} {$endif} {$endif} {$ifdef VER2} {$define FPC2Plus} {$define HAS_ASSERT} {$define HAS_INT64} {$define HAS_CARD32} {$define HAS_MSG} {$define HAS_INLINE} {Remember to use -Si} {$define StrictLong} {$ifdef FPC_OBJFPC} {$define DEFAULT} {$endif} {$ifdef FPC_DELPHI} {$define DEFAULT} {$endif} {$ifndef VER2_0} {$ifndef VER2_1} {$define HAS_UINT64} {2.2+} {$endif} {$define HAS_DENORM_LIT} {2.1+} {$endif} {$ifdef VER2_7_1} {$define FPC271or3} {$endif} {$ifdef VER2_6_2} {$define HAS_INTXX} {$endif} {$ifdef VER2_6_4} {$define HAS_INTXX} {$define HAS_PINTXX} {$endif} {$endif} {$ifdef VER3} {$define FPC2Plus} {$define FPC271or3} {$define HAS_ASSERT} {$define HAS_INT64} {$define HAS_CARD32} {$define HAS_MSG} {$define HAS_INLINE} {$define HAS_UINT64} {$define HAS_DENORM_LIT} {$define StrictLong} {$define HAS_INTXX} {$define HAS_PINTXX} {$ifdef FPC_OBJFPC} {$define DEFAULT} {$endif} {$ifdef FPC_DELPHI} {$define DEFAULT} {$endif} {$endif} {Note: Mode detection does not work for -Sxxx and version < 2.0.2} {$ifdef FPC_OBJFPC} {$define RESULT} {$define HAS_OUT} {$endif} {$ifdef FPC_DELPHI} {$define RESULT} {$define HAS_OUT} {$undef FPC_ProcVar} {$endif} {$ifdef FPC_TP} {$undef FPC_ProcVar} {$endif} {$ifdef FPC_GPC} {$undef FPC_ProcVar} {$endif} {$ifdef CPU64} {$define BIT64} {$endif} {$ifdef CPUARM} {$define EXT64} {No extended for ARM} {$endif} {$endif} {$ifdef __TMT__} {$undef N_OPT} {$define RESULT} {$define HAS_INT64} {$define LoadArgs} {$ifdef __WIN32__} {$define WIN32} {$endif} {$endif} {$ifndef BIT16} {$define Bit32or64} {$ifndef BIT64} {$define BIT32} {$endif} {$endif} {$ifdef BIT16} {$ifdef WINDOWS} {$define WIN16} {$endif} {$endif} {$ifdef Delphi} {$define RESULT} {$define ABSTRACT} {$define HAS_DENORM_LIT} {$endif} {$ifdef D12Plus} {$ifndef D4PLUS} {$define D4PLUS} {$endif} {$define HAS_INLINE} {$define HAS_UNSAFE} {$define HAS_UINT64} {$define HAS_INTXX} {$endif} {$ifdef D4Plus} {$define HAS_OUT} {$define HAS_INT64} {$define HAS_CARD32} {$define StrictLong} {$define HAS_ASSERT} {$define DEFAULT} {$define HAS_OVERLOAD} {$endif} {$ifdef WIN32} {$define WIN32or64} {$ifndef VirtualPascal} {$define APPCONS} {$endif} {$endif} {$ifdef WIN64} {$define BIT64} {$define WIN32or64} {$define EXT64} {$define APPCONS} {$endif} {$ifdef BIT64} {$undef BASM} {$endif} {-- Default options --} {$ifndef FPC} {$B-} {short-circuit boolean expression evaluation, FPC has always B-!} {$endif} {$ifdef FPC} {$ifdef CPUI386} {$ASMmode intel} {$endif} {$goto on} {$endif} {$ifdef VirtualPascal} {$ifndef debug} {&Optimise+,SmartLink+,Speed+} {$endif} {$endif} {$ifdef G_OPT} {$G+} {$endif} {$ifdef Q_OPT} {Most Crypto and CRC/Hash units need Q-, define Q+ locally if needed} {$Q-} {$endif} {$ifdef debug} {$R+,S+} {Note: D9+ needs $R- for StrictLong setting!} {$else} {$R-,S-} {$endif} {$ifdef SIMULATE_EXT64} {$define EXT64} {$endif} {$ifdef BIT16} {$F-} {$endif} {-- Record the starting values of important local options --} {$ifopt A+} {$define Align_on} {$endif} {$ifopt B+} {$define BoolEval_on} {$endif} {$ifopt D+} {$define DebugInfo_on} {$endif} {$ifopt I+} {$define IOChecks_on} {$endif} {$ifopt R+} {$define RangeChecks_on} {$endif} {$ifopt V+} {$define VarStringChecks_on} {$endif} {$ifdef Q_OPT} {$ifopt P+} {$define OpenStrings_on} {$endif} {$ifopt Q+} {$define OverflowChecks_on} {$endif} {$endif} {-- Note that X option is GLOBAL --} {$ifdef X_OPT} {$ifopt X+} {$define ExtendedSyntax_on} {$endif} {$ifopt X-} {$undef RESULT} {$endif} {$endif} {$ifdef CONDITIONALEXPRESSIONS} {$warn SYMBOL_PLATFORM OFF} {$warn SYMBOL_DEPRECATED OFF} {$warn SYMBOL_LIBRARY OFF} {$warn UNIT_DEPRECATED OFF} {$warn UNIT_LIBRARY OFF} {$warn UNIT_PLATFORM OFF} {$ifdef HAS_UNSAFE} {$warn UNSAFE_TYPE OFF} {$warn UNSAFE_CODE OFF} {$warn UNSAFE_CAST OFF} {$endif} {$endif} {$else} {$ifdef HAS_MSG} {$message 'std.inc included more than once'} {$endif} {$endif} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/sha3_512.pas������������������������������������0000644�0001750�0000144�00000033223�15104114162�023374� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SHA3_512; {SHA3-512 - 512 bit Secure Hash Function} interface (************************************************************************* DESCRIPTION : SHA3-512 - 512 bit Secure Hash Function REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18/D25S, FPC, VP EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : - FIPS 202 SHA-3 Standard: 'Permutation-Based Hash and Extendable-Output Functions' available from http://csrc.nist.gov/publications/PubsFIPS.html or http://dx.doi.org/10.6028/NIST.FIPS.202 or http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf - Test vectors and intermediate values: http://csrc.nist.gov/groups/ST/toolkit/examples.html Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 10.08.15 W.Ehrhardt Initial BP version using SHA3-256 layout 0.11 17.08.15 we Updated references 0.12 15.05.17 we adjust OID to new MaxOIDLen **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2015-2017 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$i STD.INC} uses BTypes,Hash,SHA3; procedure SHA3_512Init(var Context: THashContext); {-initialize context} procedure SHA3_512Update(var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} procedure SHA3_512UpdateXL(var Context: THashContext; Msg: pointer; Len: longint); {-update context with Msg data} procedure SHA3_512Final(var Context: THashContext; var Digest: TSHA3_512Digest); {-finalize SHA3-512 calculation, clear context} procedure SHA3_512FinalEx(var Context: THashContext; var Digest: THashDigest); {-finalize SHA3-512 calculation, clear context} procedure SHA3_512FinalBitsEx(var Context: THashContext; var Digest: THashDigest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (big-endian), clear context} procedure SHA3_512FinalBits(var Context: THashContext; var Digest: TSHA3_512Digest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (big-endian), clear context} procedure SHA3_512FinalBits_LSB(var Context: THashContext; var Digest: TSHA3_512Digest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (LSB format), clear context} function SHA3_512SelfTest: boolean; {-self test for string from SHA3-512 documents} procedure SHA3_512Full(var Digest: TSHA3_512Digest; Msg: pointer; Len: word); {-SHA3-512 of Msg with init/update/final} procedure SHA3_512FullXL(var Digest: TSHA3_512Digest; Msg: pointer; Len: longint); {-SHA3-512 of Msg with init/update/final} procedure SHA3_512File({$ifdef CONST} const {$endif} fname: Str255; var Digest: TSHA3_512Digest; var buf; bsize: word; var Err: word); {-SHA3-512 of file, buf: buffer with at least bsize bytes} implementation const SHA3_512_BlockLen = 72; {Rate / 8, used only for HMAC} {FIPS202, Tab.3} {http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html} {2.16.840.1.101.3.4.2.8} {joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) hashAlgs(2) SHA3-512(10)} const SHA3_512_OID : TOID_Vec = (2,16,840,1,101,3,4,2,10,-1,-1); {Len=9} {??? NIST claims it has reserved SHA3-512(10), but e.g.} {http://www.oid-info.com/ does not know it 2015-08-10. } {$ifndef VER5X} const SHA3_512_Desc: THashDesc = ( HSig : C_HashSig; HDSize : sizeof(THashDesc); HDVersion : C_HashVers; HBlockLen : SHA3_512_BlockLen; HDigestlen: sizeof(TSHA3_512Digest); {$ifdef FPC_ProcVar} HInit : @SHA3_512Init; HFinal : @SHA3_512FinalEx; HUpdateXL : @SHA3_512UpdateXL; {$else} HInit : SHA3_512Init; HFinal : SHA3_512FinalEx; HUpdateXL : SHA3_512UpdateXL; {$endif} HAlgNum : longint(_SHA3_512); HName : 'SHA3-512'; HPtrOID : @SHA3_512_OID; HLenOID : 9; HFill : 0; {$ifdef FPC_ProcVar} HFinalBit : @SHA3_512FinalBitsEx; {$else} HFinalBit : SHA3_512FinalBitsEx; {$endif} HReserved : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) ); {$else} var SHA3_512_Desc: THashDesc; {$endif} {$ifdef BIT16} {$F-} {$endif} {---------------------------------------------------------------------------} procedure SHA3_512Init(var Context: THashContext); {-initialize context} begin {Clear context} SHA3_LastError := SHA3_Init(TSHA3State(Context),__SHA3_512); end; {---------------------------------------------------------------------------} procedure SHA3_512UpdateXL(var Context: THashContext; Msg: pointer; Len: longint); {-update context with Msg data} begin SHA3_LastError := SHA3_UpdateXL(TSHA3State(Context), Msg, Len); end; {---------------------------------------------------------------------------} procedure SHA3_512Update(var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} begin SHA3_LastError := SHA3_UpdateXL(TSHA3State(Context), Msg, Len); end; {---------------------------------------------------------------------------} procedure SHA3_512FinalBitsEx(var Context: THashContext; var Digest: THashDigest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (big-endian), clear context} begin SHA3_LastError := SHA3_FinalBit(TSHA3State(Context), BData, bitlen, @Digest[0], 8*sizeof(Digest)); end; {---------------------------------------------------------------------------} procedure SHA3_512FinalBits(var Context: THashContext; var Digest: TSHA3_512Digest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (big-endian), clear context} begin SHA3_LastError := SHA3_FinalBit(TSHA3State(Context), BData, bitlen, @Digest[0], 8*sizeof(Digest)); end; {---------------------------------------------------------------------------} procedure SHA3_512FinalBits_LSB(var Context: THashContext; var Digest: TSHA3_512Digest; BData: byte; bitlen: integer); {-finalize SHA3-512 calculation with bitlen bits from BData (LSB format), clear context} begin SHA3_LastError := SHA3_FinalBit_LSB(TSHA3State(Context), BData, bitlen, @Digest[0], 8*sizeof(Digest)); end; {---------------------------------------------------------------------------} procedure SHA3_512FinalEx(var Context: THashContext; var Digest: THashDigest); {-finalize SHA3-512 calculation, clear context} begin SHA3_LastError := SHA3_FinalHash(TSHA3State(Context), @Digest[0]); end; {---------------------------------------------------------------------------} procedure SHA3_512Final(var Context: THashContext; var Digest: TSHA3_512Digest); {-finalize SHA3-512 calculation, clear context} begin SHA3_LastError := SHA3_FinalHash(TSHA3State(Context), @Digest[0]); end; {---------------------------------------------------------------------------} function SHA3_512SelfTest: boolean; {-self test for string from SHA3-512 documents} const Bl1 = 0; dig1: TSHA3_512Digest = ($A6,$9F,$73,$CC,$A2,$3A,$9A,$C5, $C8,$B5,$67,$DC,$18,$5A,$75,$6E, $97,$C9,$82,$16,$4F,$E2,$58,$59, $E0,$D1,$DC,$C1,$47,$5C,$80,$A6, $15,$B2,$12,$3A,$F1,$F5,$F9,$4C, $11,$E3,$E9,$40,$2C,$3A,$C5,$58, $F5,$00,$19,$9D,$95,$B6,$D3,$E3, $01,$75,$85,$86,$28,$1D,$CD,$26); BL2 = 5; msg2: array[0..0] of byte = ($13); dig2: TSHA3_512Digest = ($A1,$3E,$01,$49,$41,$14,$C0,$98, $00,$62,$2A,$70,$28,$8C,$43,$21, $21,$CE,$70,$03,$9D,$75,$3C,$AD, $D2,$E0,$06,$E4,$D9,$61,$CB,$27, $54,$4C,$14,$81,$E5,$81,$4B,$DC, $EB,$53,$BE,$67,$33,$D5,$E0,$99, $79,$5E,$5E,$81,$91,$8A,$DD,$B0, $58,$E2,$2A,$9F,$24,$88,$3F,$37); BL3 = 30; msg3: array[0..3] of byte = ($53,$58,$7B,$19); dig3: TSHA3_512Digest = ($98,$34,$C0,$5A,$11,$E1,$C5,$D3, $DA,$9C,$74,$0E,$1C,$10,$6D,$9E, $59,$0A,$0E,$53,$0B,$6F,$6A,$AA, $78,$30,$52,$5D,$07,$5C,$A5,$DB, $1B,$D8,$A6,$AA,$98,$1A,$28,$61, $3A,$C3,$34,$93,$4A,$01,$82,$3C, $D4,$5F,$45,$E4,$9B,$6D,$7E,$69, $17,$F2,$F1,$67,$78,$06,$7B,$AB); {https://github.com/gvanas/KeccakCodePackage, SKat len=200} BL4 = 200; msg4: array[0..24] of byte = ($aa,$fd,$c9,$24,$3d,$3d,$4a,$09, $65,$58,$a3,$60,$cc,$27,$c8,$d8, $62,$f0,$be,$73,$db,$5e,$88,$aa,$55); dig4: TSHA3_512Digest = ($62,$86,$c3,$db,$87,$d3,$b4,$5c, $fd,$4d,$e8,$5a,$7a,$dd,$18,$e0, $7a,$e2,$2f,$1f,$0f,$46,$75,$e1, $d4,$e1,$fc,$77,$63,$37,$34,$d7, $96,$28,$18,$a9,$f3,$b9,$6b,$37, $fe,$77,$4f,$c2,$6d,$ea,$78,$74, $85,$31,$7b,$96,$22,$27,$5f,$63, $a7,$dd,$6d,$62,$d6,$50,$d3,$07); var Context: THashContext; Digest : TSHA3_512Digest; function SingleTest(Msg: pointer; BL: word; TDig: TSHA3_512Digest): boolean; var bytes: word; begin SingleTest := false; SHA3_512Init(Context); if SHA3_LastError<>0 then exit; if BL=0 then SHA3_512Final(Context,Digest) else begin if BL>7 then begin bytes := BL shr 3; SHA3_512Update(Context, Msg, BL shr 3); if SHA3_LastError<>0 then exit; inc(Ptr2Inc(Msg), bytes); end; SHA3_512FinalBits_LSB(Context, Digest, pByte(Msg)^, BL and 7); end; if SHA3_LastError<>0 then exit; SingleTest := HashSameDigest(@SHA3_512_Desc, PHashDigest(@TDig), PHashDigest(@Digest)); end; begin SHA3_512SelfTest := SingleTest(nil, BL1, dig1) and SingleTest(@msg2, BL2, dig2) and SingleTest(@msg3, BL3, dig3) and SingleTest(@msg4, BL4, dig4); end; {---------------------------------------------------------------------------} procedure SHA3_512FullXL(var Digest: TSHA3_512Digest; Msg: pointer; Len: longint); {-SHA3-512 of Msg with init/update/final} var Context: THashContext; begin SHA3_512Init(Context); if SHA3_LastError=0 then SHA3_512UpdateXL(Context, Msg, Len); SHA3_512Final(Context, Digest); end; {---------------------------------------------------------------------------} procedure SHA3_512Full(var Digest: TSHA3_512Digest; Msg: pointer; Len: word); {-SHA3-512 of Msg with init/update/final} begin SHA3_512FullXL(Digest, Msg, Len); end; {---------------------------------------------------------------------------} procedure SHA3_512File({$ifdef CONST} const {$endif} fname: Str255; var Digest: TSHA3_512Digest; var buf; bsize: word; var Err: word); {-SHA3-512 of file, buf: buffer with at least bsize bytes} var tmp: THashDigest; begin HashFile(fname, @SHA3_512_Desc, tmp, buf, bsize, Err); move(tmp, Digest, sizeof(Digest)); end; begin {$ifdef VER5X} fillchar(SHA3_512_Desc, sizeof(SHA3_512_Desc), 0); with SHA3_512_Desc do begin HSig := C_HashSig; HDSize := sizeof(THashDesc); HDVersion := C_HashVers; HBlockLen := SHA3_512_BlockLen; HDigestlen:= sizeof(TSHA3_512Digest); HInit := SHA3_512Init; HFinal := SHA3_512FinalEx; HUpdateXL := SHA3_512UpdateXL; HAlgNum := longint(_SHA3_512); HName := 'SHA3-512'; HPtrOID := @SHA3_512_OID; HLenOID := 9; HFinalBit := SHA3_512FinalBitsEx; end; {$endif} RegisterHash(_SHA3_512, @SHA3_512_Desc); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/sha3.pas����������������������������������������0000644�0001750�0000144�00000052076�15104114162�023014� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SHA3; {SHA3 functions (including SHAKE) based on Keccak} interface {$i STD.INC} {$ifdef FPC} {$ifdef CPUI386} {$define USE_MMXCODE} {$endif} {$ifdef CPU64} {$define USE_64BITCODE} {$endif} {$endif} {.$define USE_64BITCODE} {Use 64-bit for Keccak permutation} {.$define USE_MMXCODE } {Use MMX for Keccak permutation, contributed by Eric Grange} {.$define USE_MMX_AKP } {Use MMX for Keccak permutation, contributed by Anna Kaliszewicz / payl} (************************************************************************* DESCRIPTION : SHA3 functions (including SHAKE) based on Keccak REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18, FPC, VP EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : SHA3: FIPS 202 SHA-3 Standard: 'Permutation-Based Hash and Extendable-Output Functions' available from http://csrc.nist.gov/publications/PubsFIPS.html or http://dx.doi.org/10.6028/NIST.FIPS.202 or http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf Keccak: https://github.com/gvanas/KeccakCodePackage http://keccak.noekeon.org/KeccakReferenceAndOptimized-3.2.zip http://keccak.noekeon.org/KeccakKAT-3.zip (17MB) http://csrc.nist.gov/groups/ST/hash/documents/SHA3-C-API.pdf REMARKS : 1. For 32-bit compilers with int64 (FPC, D6+) there are conditional defines to optionally use MMX or 64-bit code. 2. The current implementation needs little-endian machines Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.01 17.10.12 W.Ehrhardt Initial BP7 version from Keccak-simple32BI.c 0.02 18.10.12 we Fixed buf in xorIntoState 0.03 18.10.12 we Other compilers 0.04 19.10.12 we Separate unit 0.05 20.10.12 we Functions from KeccakSponge 0.06 21.10.12 we Functions from KeccakNISTInterface 0.07 21.10.12 we D2-D6 with ASM RotL function 0.08 22.10.12 we Include files keccperm.i16 and .i32 0.09 22.10.12 we __P2I type casts removed 0.10 22.10.12 we References, comments, remarks 0.11 25.10.12 we Make partialBlock longint 0.12 30.10.12 we Packed arrays, type TKDQueue 0.13 31.10.12 we Partially unrolled 64-bit code from Keccak-inplace.c 0.14 01.11.12 we Compact 64-bit code from Botan 0.15 02.11.12 we 64-bit code about 20% faster with local data 0.16 09.11.12 we KeccakFullBytes, TKeccakMaxDigest 0.17 12.11.12 we USE32BIT forces skipping of 64-bit code 0.18 12.04.14 we Unit renamed to SHA3, SHA3 type definitions 0.19 12.04.14 we SHA3_Init, SHA3_Update, SHA3_FinalEx 0.20 13.04.14 we SHA3_UpdateXL, SHA3_FinalHash, byte sized messages work 0.21 14.04.14 we LSB bit sized messages, SHA3_FinalBit_LSB, working SHAKE 0.22 11.05.14 we Fix duplicate return result and a few typos 0.23 08.08.15 we TSpongeState with words and Fill3, assert HASHCTXSIZE 0.24 09.08.15 we SHA3_FinalBit update final bits in MSB format 0.25 09.08.15 we Removed unused Keccak leftovers 0.26 09.08.15 we Error field in context, rewrite error handling 0.27 16.08.15 we Some code cleanup 0.28 17.08.15 we Updated references 0.29 26.08.15 we $defines USE_64BITCODE, USE_MMXCODE 0.30 23.04.16 we USE_MMX_AKP *************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2012-2016 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------- *NOTE FROM THE DESIGNERS OF KECCAK* The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, Michael Peeters and Gilles Van Assche. For more information, feedback or questions, please refer to our website: http://keccak.noekeon.org/ Implementation by the designers (and Ronny Van Keer), hereby denoted as "the implementer". To the extent possible under law, the implementer has waived all copyright and related or neighboring rights to the source code in this file. http://creativecommons.org/publicdomain/zero/1.0/ ----------------------------------------------------------------------------*) uses BTypes, Hash; const SHA3_ERR_INVALID_ALG = 1; SHA3_ERR_WRONG_FINAL = 2; const KeccakPermutationSize = 1600; KeccakMaximumRate = 1536; KeccakPermutationSizeInBytes = KeccakPermutationSize div 8; KeccakMaximumRateInBytes = KeccakMaximumRate div 8; type TState_B = packed array[0..KeccakPermutationSizeInBytes-1] of byte; TState_L = packed array[0..(KeccakPermutationSizeInBytes) div 4 - 1] of longint; TKDQueue = packed array[0..KeccakMaximumRateInBytes-1] of byte; type TSpongeState = packed record state: TState_B; dataQueue: TKDQueue; rate: word; capacity: word; bitsInQueue: word; fixedOutputLength: word; bitsAvailableForSqueezing: word; squeezing: word; Error: int16; Fill3: packed array[407..HASHCTXSIZE] of byte; end; {---------------------------------------------------------------------------} {------------------ S H A 3 / S H A K E functions -----------------------} {---------------------------------------------------------------------------} type TSHA3State = TSpongeState; {Hash state context} type TSHA3_Algo = (__SHA3_224, __SHA3_256, __SHA3_384, __SHA3_512, __SHAKE_128, __SHAKE_256); function SHA3_Init(var state: TSHA3State; algo: TSHA3_Algo): integer; {-Initialize the state of the Keccak[r, c] sponge function. The rate r and the} { capacity c values are determined from the SHA3 algorithm. Result 0=success. } function SHA3_UpdateXL(var state: TSHA3State; Msg: pointer; Len: longint): integer; {-Update context with Msg data of Len bytes} function SHA3_Update(var state: TSHA3State; Msg: pointer; Len: word): integer; {-Update context with Msg data of Len bytes} function SHA3_FinalHash(var state: TSHA3State; digest: pointer): integer; {-Compute SHA3 hash digest and store into hashval. Only for hash} { algorithms, result WRONG_FINAL if called for SHAKE functions. } function SHA3_FinalBit_LSB(var state: TSHA3State; bits: byte; bitlen: integer; hashval: pointer; numbits: longint): integer; {-Update final bits in LSB format, pad, and compute hashval} function SHA3_FinalBit(var state: TSHA3State; bits: byte; bitlen: integer; hashval: pointer; numbits: longint): integer; {-Update final bits in MSB format, pad, and compute hashval} {SHA3_LastError is set by SHA-3 functions which return an error code, where other} {units/algorithms use procedures. Note that the error variable should be treated } {as dummy because it is shared over all contexts/threads etc. The context field } {TSHA3State.error is used to handle context related errors. It will be set to } {0=no error during context initialization.} var SHA3_LastError: integer; implementation const cKeccakNumberOfRounds = 24; {---------------------------------------------------------------------------} {Helper types} {$ifndef BIT16} type TBABytes = array[0..MaxLongint-1] of byte; {$else} type TBABytes = array[0..$FFF0-1] of byte; {$endif} type PBA = ^TBABytes; {---------------------------------------------------------------------------} {$ifndef BIT16} {$ifdef BIT64} {$define USE_64BITCODE} {$else} {$ifndef FPC} {$ifndef CONDITIONALEXPRESSIONS} {Delphi 5 or lower} {$undef USE_MMXCODE} {$undef USE_MMX_AKP} {$endif} {$endif} {$endif} {$ifdef USE_64BITCODE} {$i kperm_64.inc} {$ifdef HAS_MSG} {.$message '* using 64-bit code'} {$endif} {$else} {$ifdef USE_MMXCODE} {$i kperm_mx.inc} {$ifdef HAS_MSG} {$message '* using mmx code (32Bit/eg)'} {$endif} {$else} {$ifdef USE_MMX_AKP} {$i kperm_mp.inc} {$ifdef HAS_MSG} {$message '* using mmx code (32Bit/akp)'} {$endif} {$else} {$i kperm_32.inc} {$endif} {$endif} {$endif} {$else} {$i kperm_16.inc} {$endif} {---------------------------------------------------------------------------} procedure KeccakAbsorb(var state: TState_B; data: pointer; laneCount: integer); begin xorIntoState(TState_L(state),data,laneCount); KeccakPermutation(TState_L(state)); end; {---------------------------------------------------------------------------} function InitSponge(var state: TSpongeState; rate, capacity: integer): integer; {-Function to initialize the state of the Keccak sponge function.} { The sponge function is set to the absorbing phase. Result=0 if } { success, 1 if rate and/or capacity are invalid.} begin InitSponge := 1; {This is the only place where state.error is reset to 0 = SUCCESS} fillchar(state, sizeof(state),0); if (rate+capacity <> 1600) or (rate <= 0) or (rate >= 1600) or ((rate and 63) <> 0) then begin state.error := 1; exit; end; state.rate := rate; state.capacity := capacity; InitSponge := 0; end; {---------------------------------------------------------------------------} procedure AbsorbQueue(var state: TSpongeState); {-Absorb remaining bits from queue} begin {state.bitsInQueue is assumed to be equal to state.rate} KeccakAbsorb(state.state, @state.dataQueue, state.rate div 64); state.bitsInQueue := 0; end; {---------------------------------------------------------------------------} function Absorb(var state: TSpongeState; data: pointer; databitlen: longint): integer; {-Function to give input data for the sponge function to absorb} var i, j, wholeBlocks, partialBlock: longint; partialByte: integer; curData: pByte; begin Absorb := 1; if state.error<>0 then exit; {No further action} if (state.bitsInQueue and 7 <> 0) or (state.squeezing<>0) then begin {Only the last call may contain a partial byte} {and additional input if squeezing} state.error := 1; exit; end; i := 0; while i < databitlen do begin if ((state.bitsInQueue=0) and (databitlen >= state.rate) and (i <= (databitlen-state.rate))) then begin wholeBlocks := (databitlen-i) div state.rate; curData := @PBA(data)^[i div 8]; j := 0; while j<wholeBlocks do begin KeccakAbsorb(state.state, curData, state.rate div 64); inc(j); inc(Ptr2Inc(curData), state.rate div 8); end; inc(i, wholeBlocks*state.rate); end else begin partialBlock := databitlen - i; if partialBlock+state.bitsInQueue > state.rate then begin partialBlock := state.rate - state.bitsInQueue; end; partialByte := partialBlock and 7; dec(partialBlock, partialByte); move(PBA(data)^[i div 8], state.dataQueue[state.bitsInQueue div 8], partialBlock div 8); inc(state.bitsInQueue, partialBlock); inc(i, partialBlock); if state.bitsInQueue=state.rate then AbsorbQueue(state); if partialByte > 0 then begin state.dataQueue[state.bitsInQueue div 8] := PBA(data)^[i div 8] and ((1 shl partialByte)-1); inc(state.bitsInQueue, partialByte); inc(i, partialByte); end; end; end; Absorb := 0; end; {---------------------------------------------------------------------------} procedure PadAndSwitchToSqueezingPhase(var state: TSpongeState); var i: integer; begin {Note: the bits are numbered from 0=LSB to 7=MSB} if (state.bitsInQueue + 1 = state.rate) then begin i := state.bitsInQueue div 8; state.dataQueue[i] := state.dataQueue[i] or (1 shl (state.bitsInQueue and 7)); AbsorbQueue(state); fillchar(state.dataQueue, state.rate div 8, 0); end else begin i := state.bitsInQueue div 8; fillchar(state.dataQueue[(state.bitsInQueue+7) div 8], state.rate div 8 - (state.bitsInQueue+7) div 8,0); state.dataQueue[i] := state.dataQueue[i] or (1 shl (state.bitsInQueue and 7)); end; i := (state.rate-1) div 8; state.dataQueue[i] := state.dataQueue[i] or (1 shl ((state.rate-1) and 7)); AbsorbQueue(state); extractFromState(@state.dataQueue, TState_L(state.state), state.rate div 64); state.bitsAvailableForSqueezing := state.rate; state.squeezing := 1; end; {---------------------------------------------------------------------------} function Squeeze(var state: TSpongeState; output: pointer; outputLength: longint): integer; {-Squeeze output data from the sponge function. If the sponge function was } { in the absorbing phase, this function switches it to the squeezing phase.} { Returns 0 if successful, 1 otherwise. output: pointer to the buffer where} { to store the output data; outputLength: number of output bits desired, } { must be a multiple of 8.} var i: longint; partialBlock: integer; begin Squeeze := 1; if state.error<>0 then exit; {No further action} if state.squeezing=0 then PadAndSwitchToSqueezingPhase(state); if outputLength and 7 <> 0 then begin {Only multiple of 8 bits are allowed, truncation can be done at user level} state.error := 1; exit; end; i := 0; while i < outputLength do begin if state.bitsAvailableForSqueezing=0 then begin KeccakPermutation(TState_L(state.state)); extractFromState(@state.dataQueue, TState_L(state.state), state.rate div 64); state.bitsAvailableForSqueezing := state.rate; end; partialBlock := state.bitsAvailableForSqueezing; if partialBlock > outputLength - i then partialBlock := outputLength - i; move(state.dataQueue[(state.rate - state.bitsAvailableForSqueezing) div 8], PBA(output)^[i div 8], partialBlock div 8); dec(state.bitsAvailableForSqueezing, partialBlock); inc(i,partialBlock); end; Squeeze := 0; end; {---------------------------------------------------------------------------} function Update(var state: TSpongeState; data: pointer; databitlen: longint): integer; {-Update state with databitlen bits from data. May be called multiple times, } { only the last databitlen may be a non-multiple of 8 (the corresponding byte} { must be MSB aligned, i.e. in the (databitlen and 7) most significant bits. } var ret: integer; lastByte: byte; begin if state.error<>0 then begin Update := state.error; exit; end; if databitlen and 7 = 0 then ret := Absorb(state, data, databitlen) else begin ret := Absorb(state, data, databitlen - (databitlen and 7)); if ret=0 then begin {Align the last partial byte to the least significant bits} lastByte := PBA(data)^[databitlen div 8] shr (8 - (databitlen and 7)); ret := Absorb(state, @lastByte, databitlen and 7); end end; update := ret; {Update error only with old error=0, i.e. do no reset a non-zero value} if state.error=0 then state.error := ret; end; {---------------------------------------------------------------------------} {---------------------------------------------------------------------------} {---------------------------------------------------------------------------} {---------------------------------------------------------------------------} function SHA3_Init(var state: TSHA3State; algo: TSHA3_Algo): integer; {-Initialize the state of the Keccak[r, c] sponge function. The rate r and the} { capacity c values are determined from the SHA3 algorithm. Result 0=success. } const FOL: array[TSHA3_Algo] of word = (224, 256, 384, 512, 0, 0); begin case algo of __SHA3_224: SHA3_Init := InitSponge(state, 1152, 448); __SHA3_256: SHA3_Init := InitSponge(state, 1088, 512); __SHA3_384: SHA3_Init := InitSponge(state, 832, 768); __SHA3_512: SHA3_Init := InitSponge(state, 576, 1024); __SHAKE_128: SHA3_Init := InitSponge(state, 1344, 256); __SHAKE_256: SHA3_Init := InitSponge(state, 1088, 512); else begin SHA3_Init := SHA3_ERR_INVALID_ALG; state.error := SHA3_ERR_INVALID_ALG; exit; end; end; state.fixedOutputLength := FOL[algo]; end; {---------------------------------------------------------------------------} function SHA3_UpdateXL(var state: TSHA3State; Msg: pointer; Len: longint): integer; {-Update context with Msg data of Len bytes} begin SHA3_UpdateXL := Absorb(state, Msg, Len*8); end; {---------------------------------------------------------------------------} function SHA3_Update(var state: TSHA3State; Msg: pointer; Len: word): integer; {-Update context with Msg data of Len bytes} begin SHA3_Update := SHA3_UpdateXL(state, Msg, Len); end; {---------------------------------------------------------------------------} function SHA3_FinalHash(var state: TSHA3State; digest: pointer): integer; {-Compute SHA3 hash digest and store into hashval. Only for hash} { algorithms, result WRONG_FINAL if called for Shake functions. } var err: integer; begin err := 1; if state.error=0 then begin if state.fixedOutputLength=0 then err := SHA3_ERR_WRONG_FINAL else err := SHA3_FinalBit_LSB(state, 0, 0, digest, state.fixedOutputLength); end; {Update error only with old error=0, i.e. do no reset a non-zero value} if state.error=0 then state.error := err; SHA3_FinalHash := err; end; {---------------------------------------------------------------------------} function SHA3_FinalBit_LSB(var state: TSHA3State; bits: byte; bitlen: integer; hashval: pointer; numbits: longint): integer; {-Update final bits in LSB format, pad, and compute hashval} var err,ll: integer; lw: word; begin {normalize bitlen and bits (zero high bits)} bitlen := bitlen and 7; if bitlen=0 then lw := 0 else lw := bits and pred(word(1) shl bitlen); {'append' (in LSB language) the domain separation bits} if state.fixedOutputLength=0 then begin {SHAKE: append four bits 1111} lw := lw or (word($F) shl bitlen); ll := bitlen+4; end else begin {SHA3: append two bits 01} lw := lw or (word($2) shl bitlen); ll := bitlen+2; end; {update state with final bits} if ll<9 then begin {0..8 bits, one call to update} lw := lw shl (8-ll); err := update(state, @lw, ll); {squeeze the digits from the sponge} if err=0 then err := Squeeze(state, hashval, numbits); end else begin {More than 8 bits, first a regular update with low byte} err := update(state, @lw, 8); if err=0 then begin {Finally update remaining last bits} dec(ll,8); lw := lw shr ll; err := update(state, @lw, ll); if err=0 then err := Squeeze(state, hashval, numbits); end; end; SHA3_FinalBit_LSB := err; if state.error=0 then state.error := err; end; {---------------------------------------------------------------------------} function SHA3_FinalBit(var state: TSHA3State; bits: byte; bitlen: integer; hashval: pointer; numbits: longint): integer; {-Update final bits in MSB format, pad, and compute hashval} var i,m: integer; r,b: byte; begin r := 0; m := bitlen and $7; if m>0 then begin {right align the m bits} b := bits shr (8-m); {store reflected bits in r} for i:=m downto 1 do begin r := r + r + (b and 1); b := b shr 1; end; end; SHA3_FinalBit := SHA3_FinalBit_LSB(state,r,bitlen,hashval,numbits); end; begin {$ifdef HAS_ASSERT} assert(sizeof(TSHA3State)=HASHCTXSIZE , '** Invalid sizeof(TSHA3State)'); {$else} if sizeof(THashContext)<>HASHCTXSIZE then RunError(227); {$endif} SHA3_LastError := 0; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/sha1.pas����������������������������������������0000644�0001750�0000144�00000077342�15104114162�023015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SHA1; {SHA1 - 160 bit Secure Hash Function} interface (************************************************************************* DESCRIPTION : SHA1 - 160 bit Secure Hash Function REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18/D25S, FPC, VP EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : - Latest specification of Secure Hash Standard: http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - Test vectors and intermediate values: http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA_All.pdf Version Date Author Modification ------- -------- ------- ------------------------------------------ 1.00 03.01.02 W.Ehrhardt BP7 implementation 1.01 14.03.02 we D1-D6, FPC, VP 1.02 14.03.02 we TP6 1.03 14.03.02 we TP6/7 386-Code 1.04 14.03.02 we TP5.5 1.10 15.03.02 we self test with 2 strings 1.11 02.01.03 we const SFA with @ for FPC 1.0.6 1.20 23.07.03 we With SHA1File, SHA1Full 1.21 26.07.03 we With SHA1Full in self test 2.00 26.07.03 we common vers., longint for word32, D4+ - warnings 2.01 03.08.03 we type TSHA1Block for HMAC 2.02 23.08.03 we SHA1Compress in interface for prng 2.10 29.08.03 we XL versions for Win32 2.20 27.09.03 we FPC/go32v2 2.30 05.10.03 we STD.INC, TP5.0 2.40 10.10.03 we common version, english comments 2.45 11.10.03 we Speedup: partial unroll, no function calls 2.50 16.11.03 we Speedup in update, don't clear W in compress 2.51 17.11.03 we BIT16: partial unroll, BIT32: inline rot 2.52 17.11.03 we ExpandMessageBlocks 2.53 18.11.03 we LRot32, RB mit inline() 2.54 20.11.03 we Full range UpdateLen 2.55 30.11.03 we BIT16: {$F-} 2.56 30.11.03 we BIT16: LRot_5, LRot_30 3.00 01.12.03 we Common version 3.0 3.01 22.12.03 we BIT16: Two INCs 3.02 22.12.03 we BASM16: asm Lrot30 3.03 22.12.03 we TP5/5.5: LRot, RA inline 3.04 22,12.03 we Changed UpdateLen: Definition and TP5/5.5 inline 3.05 05.03.04 we Update fips180-2 URL 3.06 26.02.05 we With {$ifdef StrictLong} 3.07 05.05.05 we Use longint() in SH1Init to avoid D9 errors if $R+ 3.08 17.12.05 we Force $I- in SHA1File 3.09 08.01.06 we SHA1Compress removed from interface 3.10 15.01.06 we uses Hash unit and THashDesc 3.11 18.01.06 we Descriptor fields HAlgNum, HSig 3.12 22.01.06 we Removed HSelfTest from descriptor 3.13 11.02.06 we Descriptor as typed const 3.14 26.03.06 we Round constants K1..K4, code reordering 3.15 07.08.06 we $ifdef BIT32: (const fname: shortstring...) 3.16 22.02.07 we values for OID vector 3.17 30.06.07 we Use conditional define FPC_ProcVar 3.18 04.10.07 we FPC: {$asmmode intel} 3.19 02.05.08 we Bit-API: SHA1FinalBits/Ex 3.20 05.05.08 we THashDesc constant with HFinalBit field 3.21 12.11.08 we uses BTypes, Ptr2Inc and/or Str255/Str127 3.22 12.03.10 we Fix VP feature in ExpandMessageBlocks 3.23 11.03.12 we Updated references 3.24 26.12.12 we D17 and PurePascal 3.25 16.08.15 we Removed $ifdef DLL / stdcall 3.26 15.05.17 we adjust OID to new MaxOIDLen **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2002-2017 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {NOTE: FIPS Ch and May functions can be optimized. Wei Dai (Crypto++ 3.1) credits Rich Schroeppel (rcs@cs.arizona.edu), V 5.1 does not!?} {$i STD.INC} {$ifndef CPUI386} {$ifndef PurePascal} {$define PurePascal} {$endif} {$endif} uses BTypes,Hash; procedure SHA1Init(var Context: THashContext); {-initialize context} procedure SHA1Update(var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} procedure SHA1UpdateXL(var Context: THashContext; Msg: pointer; Len: longint); {-update context with Msg data} procedure SHA1Final(var Context: THashContext; var Digest: TSHA1Digest); {-finalize SHA1 calculation, clear context} procedure SHA1FinalEx(var Context: THashContext; var Digest: THashDigest); {-finalize SHA1 calculation, clear context} procedure SHA1FinalBitsEx(var Context: THashContext; var Digest: THashDigest; BData: byte; bitlen: integer); {-finalize SHA1 calculation with bitlen bits from BData (big-endian), clear context} procedure SHA1FinalBits(var Context: THashContext; var Digest: TSHA1Digest; BData: byte; bitlen: integer); {-finalize SHA1 calculation with bitlen bits from BData (big-endian), clear context} function SHA1SelfTest: boolean; {-self test SHA1: compare with known value} procedure SHA1Full(var Digest: TSHA1Digest; Msg: pointer; Len: word); {-SHA1 of Msg with init/update/final} procedure SHA1FullXL(var Digest: TSHA1Digest; Msg: pointer; Len: longint); {-SHA1 of Msg with init/update/final} procedure SHA1File({$ifdef CONST} const {$endif} fname: Str255; var Digest: TSHA1Digest; var buf; bsize: word; var Err: word); {-SHA1 of file, buf: buffer with at least bsize bytes} implementation {$ifdef BIT16} {$F-} {$endif} const SHA1_BlockLen = 64; const {round constants} K1 = longint($5A827999); {round 00..19} K2 = longint($6ED9EBA1); {round 20..39} K3 = longint($8F1BBCDC); {round 40..59} K4 = longint($CA62C1D6); {round 60..79} {Internal types} type TWorkBuf = array[0..79] of longint; {1.3.14.3.2.26} {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) hashAlgorithmIdentifier(26)} const SHA1_OID : TOID_Vec = (1,3,14,3,2,26,-1,-1,-1,-1,-1); {Len=6} {$ifndef VER5X} const SHA1_Desc: THashDesc = ( HSig : C_HashSig; HDSize : sizeof(THashDesc); HDVersion : C_HashVers; HBlockLen : SHA1_BlockLen; HDigestlen: sizeof(TSHA1Digest); {$ifdef FPC_ProcVar} HInit : @SHA1Init; HFinal : @SHA1FinalEx; HUpdateXL : @SHA1UpdateXL; {$else} HInit : SHA1Init; HFinal : SHA1FinalEx; HUpdateXL : SHA1UpdateXL; {$endif} HAlgNum : longint(_SHA1); HName : 'SHA1'; HPtrOID : @SHA1_OID; HLenOID : 6; HFill : 0; {$ifdef FPC_ProcVar} HFinalBit : @SHA1FinalBitsEx; {$else} HFinalBit : SHA1FinalBitsEx; {$endif} HReserved : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) ); {$else} var SHA1_Desc: THashDesc; {$endif} {$ifndef BIT16} {$ifdef PurePascal} {---------------------------------------------------------------------------} procedure UpdateLen(var whi, wlo: longint; BLen: longint); {-Add BLen to 64 bit value (wlo, whi)} var tmp: int64; begin tmp := int64(cardinal(wlo))+Blen; wlo := longint(tmp and $FFFFFFFF); inc(whi,longint(tmp shr 32)); end; {---------------------------------------------------------------------------} function RB(A: longint): longint; {-reverse byte order in longint} begin RB := ((A and $FF) shl 24) or ((A and $FF00) shl 8) or ((A and $FF0000) shr 8) or ((A and longint($FF000000)) shr 24); end; {---------------------------------------------------------------------------} procedure ExpandMessageBlocks(var W: TWorkBuf; var Buf: THashBuffer); {-Calculate "expanded message blocks"} var i,T: longint; begin {Part 1: Transfer buffer with little -> big endian conversion} for i:= 0 to 15 do W[i]:= RB(THashBuf32(Buf)[i]); {Part 2: Calculate remaining "expanded message blocks"} for i:= 16 to 79 do begin T := W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]; W[i] := (T shl 1) or (T shr 31); end; end; {$else} {---------------------------------------------------------------------------} procedure UpdateLen(var whi, wlo: longint; BLen: longint); {-Add BLen to 64 bit value (wlo, whi)} begin asm mov edx, [wlo] mov ecx, [whi] mov eax, [Blen] add [edx], eax adc dword ptr [ecx], 0 end; end; {---------------------------------------------------------------------------} function RB(A: longint): longint; assembler; {-reverse byte order in longint} asm {$ifdef LoadArgs} mov eax,[A] {$endif} xchg al,ah rol eax,16 xchg al,ah end; {---------------------------------------------------------------------------} procedure ExpandMessageBlocks(var W: TWorkBuf; var Buf: THashBuffer); assembler; {-Calculate "expanded message blocks"} asm {$ifdef LoadArgs} mov edx,Buf mov ecx,W {load W before push ebx to avoid VP crash} push ebx {if compiling with no ASM stack frames} mov ebx,ecx {$else} push ebx mov ebx,eax {$endif} {part1: W[i]:= RB(TW32Buf(Buf)[i])} mov ecx,16 @@1: mov eax,[edx] xchg al,ah rol eax,16 xchg al,ah mov [ebx],eax add ebx,4 add edx,4 dec ecx jnz @@1 {part2: W[i]:= LRot_1(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]);} mov ecx,64 @@2: mov eax,[ebx- 3*4] xor eax,[ebx- 8*4] xor eax,[ebx-14*4] xor eax,[ebx-16*4] rol eax,1 mov [ebx],eax add ebx,4 dec ecx jnz @@2 pop ebx end; {$endif} {---------------------------------------------------------------------------} procedure SHA1Compress(var Data: THashContext); {-Actual hashing function} var i: integer; A, B, C, D, E: longint; W: TWorkBuf; begin ExpandMessageBlocks(W, Data.Buffer); A := Data.Hash[0]; B := Data.Hash[1]; C := Data.Hash[2]; D := Data.Hash[3]; E := Data.Hash[4]; {SHA1 compression function} {Partial unroll for more speed, full unroll is only slightly faster} {BIT32: rotateleft via inline} i := 0; while i<20 do begin inc(E, (A shl 5 or A shr 27) + (D xor (B and (C xor D))) + W[i ] + K1); B := B shr 2 or B shl 30; inc(D, (E shl 5 or E shr 27) + (C xor (A and (B xor C))) + W[i+1] + K1); A := A shr 2 or A shl 30; inc(C, (D shl 5 or D shr 27) + (B xor (E and (A xor B))) + W[i+2] + K1); E := E shr 2 or E shl 30; inc(B, (C shl 5 or C shr 27) + (A xor (D and (E xor A))) + W[i+3] + K1); D := D shr 2 or D shl 30; inc(A, (B shl 5 or B shr 27) + (E xor (C and (D xor E))) + W[i+4] + K1); C := C shr 2 or C shl 30; inc(i,5); end; while i<40 do begin inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[i ] + K2); B := B shr 2 or B shl 30; inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[i+1] + K2); A := A shr 2 or A shl 30; inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[i+2] + K2); E := E shr 2 or E shl 30; inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[i+3] + K2); D := D shr 2 or D shl 30; inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[i+4] + K2); C := C shr 2 or C shl 30; inc(i,5); end; while i<60 do begin inc(E, (A shl 5 or A shr 27) + ((B and C) or (D and (B or C))) + W[i ] + K3); B := B shr 2 or B shl 30; inc(D, (E shl 5 or E shr 27) + ((A and B) or (C and (A or B))) + W[i+1] + K3); A := A shr 2 or A shl 30; inc(C, (D shl 5 or D shr 27) + ((E and A) or (B and (E or A))) + W[i+2] + K3); E := E shr 2 or E shl 30; inc(B, (C shl 5 or C shr 27) + ((D and E) or (A and (D or E))) + W[i+3] + K3); D := D shr 2 or D shl 30; inc(A, (B shl 5 or B shr 27) + ((C and D) or (E and (C or D))) + W[i+4] + K3); C := C shr 2 or C shl 30; inc(i,5); end; while i<80 do begin inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[i ] + K4); B := B shr 2 or B shl 30; inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[i+1] + K4); A := A shr 2 or A shl 30; inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[i+2] + K4); E := E shr 2 or E shl 30; inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[i+3] + K4); D := D shr 2 or D shl 30; inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[i+4] + K4); C := C shr 2 or C shl 30; inc(i,5); end; {Calculate new working hash} inc(Data.Hash[0], A); inc(Data.Hash[1], B); inc(Data.Hash[2], C); inc(Data.Hash[3], D); inc(Data.Hash[4], E); end; {$else} {$ifdef BASM16} {TP6-7/Delphi1 for 386+} {---------------------------------------------------------------------------} procedure UpdateLen(var whi, wlo: longint; BLen: longint); assembler; {-Add BLen to 64 bit value (wlo, whi)} asm les di,[wlo] db $66; mov ax,word ptr [BLen] db $66; sub dx,dx db $66; add es:[di],ax les di,[whi] db $66; adc es:[di],dx end; {---------------------------------------------------------------------------} function LRot_5(x: longint): longint; {-Rotate left 5} inline( $66/$58/ {pop eax } $66/$C1/$C0/$05/ {rol eax,5 } $66/$8B/$D0/ {mov edx,eax} $66/$C1/$EA/$10); {shr edx,16 } {---------------------------------------------------------------------------} function RB(A: longint): longint; {-reverse byte order in longint} inline( $58/ {pop ax } $5A/ {pop dx } $86/$C6/ {xchg dh,al } $86/$E2); {xchg dl,ah } {---------------------------------------------------------------------------} procedure ExpandMessageBlocks(var W: TWorkBuf; var Buf: THashBuffer); assembler; {-Calculate "expanded message blocks"} asm push ds {part 1: W[i]:= RB(TW32Buf(Buf)[i])} les di,[Buf] lds si,[W] mov cx,16 @@1: db $66; mov ax,es:[di] xchg al,ah db $66; rol ax,16 xchg al,ah db $66; mov [si],ax add si,4 add di,4 dec cx jnz @@1 {part 2: W[i]:= LRot_1(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]);} mov cx,64 @@2: db $66; mov ax,[si- 3*4] db $66; xor ax,[si- 8*4] db $66; xor ax,[si-14*4] db $66; xor ax,[si-16*4] db $66; rol ax,1 db $66; mov [si],ax add si,4 dec cx jnz @@2 pop ds end; {---------------------------------------------------------------------------} procedure SHA1Compress(var Data: THashContext); {-Actual hashing function} var i: integer; A, B, C, D, E: longint; W: TWorkBuf; begin ExpandMessageBlocks(W, Data.Buffer); {Assign old working hash to variables A..E} A := Data.Hash[0]; B := Data.Hash[1]; C := Data.Hash[2]; D := Data.Hash[3]; E := Data.Hash[4]; {SHA1 compression function} {Partial unroll for more speed, full unroll only marginally faster} {Two INCs, LRot_30 via BASM} i := 0; while i<20 do begin inc(E,LRot_5(A)); inc(E,(D xor (B and (C xor D))) + W[i ] + K1); asm db $66; rol word[B],30 end; inc(D,LRot_5(E)); inc(D,(C xor (A and (B xor C))) + W[i+1] + K1); asm db $66; rol word[A],30 end; inc(C,LRot_5(D)); inc(C,(B xor (E and (A xor B))) + W[i+2] + K1); asm db $66; rol word[E],30 end; inc(B,LRot_5(C)); inc(B,(A xor (D and (E xor A))) + W[i+3] + K1); asm db $66; rol word[D],30 end; inc(A,LRot_5(B)); inc(A,(E xor (C and (D xor E))) + W[i+4] + K1); asm db $66; rol word[C],30 end; inc(i,5); end; while i<40 do begin inc(E,LRot_5(A)); inc(E,(B xor C xor D) + W[i ] + K2); asm db $66; rol word[B],30 end; inc(D,LRot_5(E)); inc(D,(A xor B xor C) + W[i+1] + K2); asm db $66; rol word[A],30 end; inc(C,LRot_5(D)); inc(C,(E xor A xor B) + W[i+2] + K2); asm db $66; rol word[E],30 end; inc(B,LRot_5(C)); inc(B,(D xor E xor A) + W[i+3] + K2); asm db $66; rol word[D],30 end; inc(A,LRot_5(B)); inc(A,(C xor D xor E) + W[i+4] + K2); asm db $66; rol word[C],30 end; inc(i,5); end; while i<60 do begin inc(E,LRot_5(A)); inc(E,((B and C) or (D and (B or C))) + W[i ] + K3); asm db $66; rol word[B],30 end; inc(D,LRot_5(E)); inc(D,((A and B) or (C and (A or B))) + W[i+1] + K3); asm db $66; rol word[A],30 end; inc(C,LRot_5(D)); inc(C,((E and A) or (B and (E or A))) + W[i+2] + K3); asm db $66; rol word[E],30 end; inc(B,LRot_5(C)); inc(B,((D and E) or (A and (D or E))) + W[i+3] + K3); asm db $66; rol word[D],30 end; inc(A,LRot_5(B)); inc(A,((C and D) or (E and (C or D))) + W[i+4] + K3); asm db $66; rol word[C],30 end; inc(i,5); end; while i<80 do begin inc(E,LRot_5(A)); inc(E,(B xor C xor D) + W[i ] + K4); asm db $66; rol word[B],30 end; inc(D,LRot_5(E)); inc(D,(A xor B xor C) + W[i+1] + K4); asm db $66; rol word[A],30 end; inc(C,LRot_5(D)); inc(C,(E xor A xor B) + W[i+2] + K4); asm db $66; rol word[E],30 end; inc(B,LRot_5(C)); inc(B,(D xor E xor A) + W[i+3] + K4); asm db $66; rol word[D],30 end; inc(A,LRot_5(B)); inc(A,(C xor D xor E) + W[i+4] + K4); asm db $66; rol word[C],30 end; inc(i,5); end; {Calculate new working hash} inc(Data.Hash[0], A); inc(Data.Hash[1], B); inc(Data.Hash[2], C); inc(Data.Hash[3], D); inc(Data.Hash[4], E); end; {$else} {TP5/5.5} {---------------------------------------------------------------------------} procedure UpdateLen(var whi, wlo: longint; BLen: longint); {-Add BLen to 64 bit value (wlo, whi)} inline( $58/ {pop ax } $5A/ {pop dx } $5B/ {pop bx } $07/ {pop es } $26/$01/$07/ {add es:[bx],ax } $26/$11/$57/$02/ {adc es:[bx+02],dx} $5B/ {pop bx } $07/ {pop es } $26/$83/$17/$00/ {adc es:[bx],0 } $26/$83/$57/$02/$00);{adc es:[bx+02],0 } {---------------------------------------------------------------------------} function RB(A: longint): longint; {-reverse byte order in longint} inline( $58/ { pop ax } $5A/ { pop dx } $86/$C6/ { xchg dh,al} $86/$E2); { xchg dl,ah} {---------------------------------------------------------------------------} function LRot_1(x: longint): longint; {-Rotate left 1} inline( $58/ { pop ax } $5A/ { pop dx } $2B/$C9/ { sub cx,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1); { adc ax,cx} {---------------------------------------------------------------------------} function LRot_5(x: longint): longint; {-Rotate left 5} inline( $58/ { pop ax } $5A/ { pop dx } $2B/$C9/ { sub cx,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1/ { adc ax,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1/ { adc ax,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1/ { adc ax,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1/ { adc ax,cx} $D1/$D0/ { rcl ax,1 } $D1/$D2/ { rcl dx,1 } $13/$C1); { adc ax,cx} {---------------------------------------------------------------------------} function LRot_30(x: longint): longint; {-Rotate left 30 = rot right 2} inline( $58/ { pop ax } $5A/ { pop dx } $8B/$CA/ { mov cx,dx} $D1/$E9/ { shr cx,1 } $D1/$D8/ { rcr ax,1 } $D1/$DA/ { rcr dx,1 } $8B/$CA/ { mov cx,dx} $D1/$E9/ { shr cx,1 } $D1/$D8/ { rcr ax,1 } $D1/$DA); { rcr dx,1 } {---------------------------------------------------------------------------} procedure ExpandMessageBlocks(var W: TWorkBuf; var Buf: THashBuffer); {-Calculate "expanded message blocks"} var i: integer; begin {Part 1: Transfer buffer with little -> big endian conversion} for i:= 0 to 15 do W[i]:= RB(THashBuf32(Buf)[i]); {Part 2: Calculate remaining "expanded message blocks"} for i:= 16 to 79 do W[i]:= LRot_1(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]); end; {---------------------------------------------------------------------------} procedure SHA1Compress(var Data: THashContext); {-Actual hashing function} var i: integer; A, B, C, D, E: longint; W: TWorkBuf; begin ExpandMessageBlocks(W, Data.Buffer); {Assign old working hash to variables A..E} A := Data.Hash[0]; B := Data.Hash[1]; C := Data.Hash[2]; D := Data.Hash[3]; E := Data.Hash[4]; {SHA1 compression function} {Partial unroll for more speed, full unroll only marginally faster} {BIT16: rotateleft via function call} i := 0; while i<20 do begin inc(E,LRot_5(A) + (D xor (B and (C xor D))) + W[i ] + K1); B := LRot_30(B); inc(D,LRot_5(E) + (C xor (A and (B xor C))) + W[i+1] + K1); A := LRot_30(A); inc(C,LRot_5(D) + (B xor (E and (A xor B))) + W[i+2] + K1); E := LRot_30(E); inc(B,LRot_5(C) + (A xor (D and (E xor A))) + W[i+3] + K1); D := LRot_30(D); inc(A,LRot_5(B) + (E xor (C and (D xor E))) + W[i+4] + K1); C := LRot_30(C); inc(i,5); end; while i<40 do begin inc(E,LRot_5(A) + (B xor C xor D) + W[i ] + K2); B := LRot_30(B); inc(D,LRot_5(E) + (A xor B xor C) + W[i+1] + K2); A := LRot_30(A); inc(C,LRot_5(D) + (E xor A xor B) + W[i+2] + K2); E := LRot_30(E); inc(B,LRot_5(C) + (D xor E xor A) + W[i+3] + K2); D := LRot_30(D); inc(A,LRot_5(B) + (C xor D xor E) + W[i+4] + K2); C := LRot_30(C); inc(i,5); end; while i<60 do begin inc(E,LRot_5(A) + ((B and C) or (D and (B or C))) + W[i ] + K3); B := LRot_30(B); inc(D,LRot_5(E) + ((A and B) or (C and (A or B))) + W[i+1] + K3); A := LRot_30(A); inc(C,LRot_5(D) + ((E and A) or (B and (E or A))) + W[i+2] + K3); E := LRot_30(E); inc(B,LRot_5(C) + ((D and E) or (A and (D or E))) + W[i+3] + K3); D := LRot_30(D); inc(A,LRot_5(B) + ((C and D) or (E and (C or D))) + W[i+4] + K3); C := LRot_30(C); inc(i,5); end; while i<80 do begin inc(E,LRot_5(A) + (B xor C xor D) + W[i ] + K4); B := LRot_30(B); inc(D,LRot_5(E) + (A xor B xor C) + W[i+1] + K4); A := LRot_30(A); inc(C,LRot_5(D) + (E xor A xor B) + W[i+2] + K4); E := LRot_30(E); inc(B,LRot_5(C) + (D xor E xor A) + W[i+3] + K4); D := LRot_30(D); inc(A,LRot_5(B) + (C xor D xor E) + W[i+4] + K4); C := LRot_30(C); inc(i,5); end; {Calculate new working hash} inc(Data.Hash[0], A); inc(Data.Hash[1], B); inc(Data.Hash[2], C); inc(Data.Hash[3], D); inc(Data.Hash[4], E); end; {$endif BASM16} {$endif BIT16} {---------------------------------------------------------------------------} procedure SHA1Init(var Context: THashContext); {-initialize context} begin {Clear context, buffer=0!!} fillchar(Context,sizeof(Context),0); with Context do begin Hash[0] := longint($67452301); Hash[1] := longint($EFCDAB89); Hash[2] := longint($98BADCFE); Hash[3] := longint($10325476); Hash[4] := longint($C3D2E1F0); end; end; {---------------------------------------------------------------------------} procedure SHA1UpdateXL(var Context: THashContext; Msg: pointer; Len: longint); {-update context with Msg data} var i: integer; begin {Update message bit length} if Len<=$1FFFFFFF then UpdateLen(Context.MLen[1], Context.MLen[0], Len shl 3) else begin for i:=1 to 8 do UpdateLen(Context.MLen[1], Context.MLen[0], Len) end; while Len > 0 do begin {fill block with msg data} Context.Buffer[Context.Index]:= pByte(Msg)^; inc(Ptr2Inc(Msg)); inc(Context.Index); dec(Len); if Context.Index=SHA1_BlockLen then begin {If 512 bit transferred, compress a block} Context.Index:= 0; SHA1Compress(Context); while Len>=SHA1_BlockLen do begin move(Msg^,Context.Buffer,SHA1_BlockLen); SHA1Compress(Context); inc(Ptr2Inc(Msg),SHA1_BlockLen); dec(Len,SHA1_BlockLen); end; end; end; end; {---------------------------------------------------------------------------} procedure SHA1Update(var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} begin SHA1UpdateXL(Context, Msg, Len); end; {---------------------------------------------------------------------------} procedure SHA1FinalBitsEx(var Context: THashContext; var Digest: THashDigest; BData: byte; bitlen: integer); {-finalize SHA1 calculation with bitlen bits from BData (big-endian), clear context} var i: integer; begin {Message padding} {append bits from BData and a single '1' bit} if (bitlen>0) and (bitlen<=7) then begin Context.Buffer[Context.Index]:= (BData and BitAPI_Mask[bitlen]) or BitAPI_PBit[bitlen]; UpdateLen(Context.MLen[1], Context.MLen[0], bitlen); end else Context.Buffer[Context.Index]:= $80; for i:=Context.Index+1 to 63 do Context.Buffer[i] := 0; {2. Compress if more than 448 bits, (no room for 64 bit length} if Context.Index>= 56 then begin SHA1Compress(Context); fillchar(Context.Buffer,56,0); end; {Write 64 bit msg length into the last bits of the last block} {(in big endian format) and do a final compress} THashBuf32(Context.Buffer)[14] := RB(Context.MLen[1]); THashBuf32(Context.Buffer)[15] := RB(Context.MLen[0]); SHA1Compress(Context); {Hash->Digest to little endian format} fillchar(Digest, sizeof(Digest), 0); for i:=0 to 4 do THashDig32(Digest)[i]:= RB(Context.Hash[i]); {Clear context} fillchar(Context,sizeof(Context),0); end; {---------------------------------------------------------------------------} procedure SHA1FinalBits(var Context: THashContext; var Digest: TSHA1Digest; BData: byte; bitlen: integer); {-finalize SHA1 calculation with bitlen bits from BData (big-endian), clear context} var tmp: THashDigest; begin SHA1FinalBitsEx(Context, tmp, BData, bitlen); move(tmp, Digest, sizeof(Digest)); end; {---------------------------------------------------------------------------} procedure SHA1FinalEx(var Context: THashContext; var Digest: THashDigest); {-finalize SHA1 calculation, clear context} begin SHA1FinalBitsEx(Context,Digest,0,0); end; {---------------------------------------------------------------------------} procedure SHA1Final(var Context: THashContext; var Digest: TSHA1Digest); {-finalize SHA1 calculation, clear context} var tmp: THashDigest; begin SHA1FinalBitsEx(Context, tmp, 0, 0); move(tmp, Digest, sizeof(Digest)); end; {---------------------------------------------------------------------------} function SHA1SelfTest: boolean; {-self test SHA1: compare with known value} const s1: string[ 3] = 'abc'; s2: string[56] = 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'; D1: TSHA1Digest= ($a9,$99,$3e,$36,$47,$06,$81,$6a,$ba,$3e,$25,$71,$78,$50,$c2,$6c,$9c,$d0,$d8,$9d); D2: TSHA1Digest= ($84,$98,$3E,$44,$1C,$3B,$D2,$6E,$BA,$AE,$4A,$A1,$F9,$51,$29,$E5,$E5,$46,$70,$F1); D3: TSHA1Digest= ($bb,$6b,$3e,$18,$f0,$11,$5b,$57,$92,$52,$41,$67,$6f,$5b,$1a,$e8,$87,$47,$b0,$8a); D4: TSHA1Digest= ($98,$23,$2a,$15,$34,$53,$14,$9a,$f8,$d5,$2a,$61,$50,$3a,$50,$74,$b8,$59,$70,$e8); var Context: THashContext; Digest : TSHA1Digest; function SingleTest(s: Str127; TDig: TSHA1Digest): boolean; {-do a single test, const not allowed for VER<7} { Two sub tests: 1. whole string, 2. one update per char} var i: integer; begin SingleTest := false; {1. Hash complete string} SHA1Full(Digest, @s[1],length(s)); {Compare with known value} if not HashSameDigest(@SHA1_Desc, PHashDigest(@Digest), PHashDigest(@TDig)) then exit; {2. one update call for all chars} SHA1Init(Context); for i:=1 to length(s) do SHA1Update(Context,@s[i],1); SHA1Final(Context,Digest); {Compare with known value} if not HashSameDigest(@SHA1_Desc, PHashDigest(@Digest), PHashDigest(@TDig)) then exit; SingleTest := true; end; begin SHA1SelfTest := false; {1 Zero bit from NESSIE test vectors} SHA1Init(Context); SHA1FinalBits(Context,Digest,0,1); if not HashSameDigest(@SHA1_Desc, PHashDigest(@Digest), PHashDigest(@D3)) then exit; {4 hightest bits of $50, D4 calculated with program shatest from RFC 4634} SHA1Init(Context); SHA1FinalBits(Context,Digest,$50,4); if not HashSameDigest(@SHA1_Desc, PHashDigest(@Digest), PHashDigest(@D4)) then exit; {strings from SHA1 document} SHA1SelfTest := SingleTest(s1, D1) and SingleTest(s2, D2) end; {---------------------------------------------------------------------------} procedure SHA1FullXL(var Digest: TSHA1Digest; Msg: pointer; Len: longint); {-SHA1 of Msg with init/update/final} var Context: THashContext; begin SHA1Init(Context); SHA1UpdateXL(Context, Msg, Len); SHA1Final(Context, Digest); end; {---------------------------------------------------------------------------} procedure SHA1Full(var Digest: TSHA1Digest; Msg: pointer; Len: word); {-SHA1 of Msg with init/update/final} begin SHA1FullXL(Digest, Msg, Len); end; {---------------------------------------------------------------------------} procedure SHA1File({$ifdef CONST} const {$endif} fname: Str255; var Digest: TSHA1Digest; var buf; bsize: word; var Err: word); {-SHA1 of file, buf: buffer with at least bsize bytes} var tmp: THashDigest; begin HashFile(fname, @SHA1_Desc, tmp, buf, bsize, Err); move(tmp, Digest, sizeof(Digest)); end; begin {$ifdef VER5X} fillchar(SHA1_Desc, sizeof(SHA1_Desc), 0); with SHA1_Desc do begin HSig := C_HashSig; HDSize := sizeof(THashDesc); HDVersion := C_HashVers; HBlockLen := SHA1_BlockLen; HDigestlen:= sizeof(TSHA1Digest); HInit := SHA1Init; HFinal := SHA1FinalEx; HUpdateXL := SHA1UpdateXL; HAlgNum := longint(_SHA1); HName := 'SHA1'; HPtrOID := @SHA1_OID; HLenOID := 6; HFinalBit := SHA1FinalBitsEx; end; {$endif} RegisterHash(_SHA1, @SHA1_Desc); end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/scrypt.pas��������������������������������������0000644�0001750�0000144�00000042107�15104114162�023474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit scrypt; {scrypt key derivation functions} interface {$i std.inc} uses BTypes, memh, Hash, kdf; (************************************************************************* DESCRIPTION : scrypt key derivation functions REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18, FPC, VP, WDOSX EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REMARKS : - assumes little-endian (checked for FPC) - very restricted for 16-bit because all buffer sizes must be < 64KB REFERENCES : - Colin Percival, Stronger Key Derivation via Sequential Memory-Hard Functions, http://www.tarsnap.com/scrypt/scrypt.pdf - Source code from http://www.tarsnap.com/scrypt/scrypt-1.1.6.tgz - Specification and test vectors from http://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01 Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 13.08.14 W.Ehrhardt Initial BP7, test case salsa20/8 using salsa unit 0.11 14.08.14 we Test case salsa20/8 without salsa unit 0.12 14.08.14 we blockmix_salsa8 0.13 14.08.14 we smix 0.14 14.08.14 we pbkfd2_hmac_sha256 0.15 14.08.14 we scrypt_kdf 0.16 15.08.14 we Support for other compilers 0.17 15.08.14 we Removed restriction on r*p (longint sLen, dkLen in pbkdf2) 0.18 15.08.14 we String versions scrypt_kdfs, scrypt_kdfss 0.19 15.08.14 we Allow pPW=nil or salt=nil 0.20 15.08.14 we Simply parameter checks, comments 0.21 16.08.14 we Separate unit 0.22 16.08.14 we More parameter checks 0.23 26.08.15 we Faster (reordered) salsa20/8 **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2014-2015 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) const sc_kdf_err_mem = -1; {Error from malloc} sc_kdf_err_inv_nrp = -2; {Invalid N,r,p. Note N must be a power of 2} sc_kdf_err_64KB = -3; {16-bit malloc with more than 64 KB} sc_kdf_err_big_endian = -4; {(FPC) compiling with big-endian} function scrypt_kdf(pPW: pointer; pLen: word; salt: pointer; sLen,N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password pPW and salt using scrypt with parameters N,r,p} function scrypt_kdfs(sPW: Str255; salt: pointer; sLen,N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password sPW and salt using scrypt with parameters N,r,p} function scrypt_kdfss(sPW, salt: Str255; N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password sPW and salt using scrypt with parameters N,r,p} implementation uses SHA3_512; {Register SHA3_512 for HMAC_SHA3_512} type TLA16 = array[0..15] of longint; TBA64 = array[0..63] of byte; {---------------------------------------------------------------------------} procedure salsa20_8(var B: TLA16); {-Apply the salsa20/8 core to the provided block B} var i: integer; y: longint; x: TLA16; begin {This is the PurePascal version from my salsa20 unit} x := B; {$ifdef OldOrder} for i:=0 to 3 do begin y := x[ 0] + x[12]; x[ 4] := x[ 4] xor ((y shl 07) or (y shr (32-07))); y := x[ 4] + x[ 0]; x[ 8] := x[ 8] xor ((y shl 09) or (y shr (32-09))); y := x[ 8] + x[ 4]; x[12] := x[12] xor ((y shl 13) or (y shr (32-13))); y := x[12] + x[ 8]; x[ 0] := x[ 0] xor ((y shl 18) or (y shr (32-18))); y := x[ 5] + x[ 1]; x[ 9] := x[ 9] xor ((y shl 07) or (y shr (32-07))); y := x[ 9] + x[ 5]; x[13] := x[13] xor ((y shl 09) or (y shr (32-09))); y := x[13] + x[ 9]; x[ 1] := x[ 1] xor ((y shl 13) or (y shr (32-13))); y := x[ 1] + x[13]; x[ 5] := x[ 5] xor ((y shl 18) or (y shr (32-18))); y := x[10] + x[ 6]; x[14] := x[14] xor ((y shl 07) or (y shr (32-07))); y := x[14] + x[10]; x[ 2] := x[ 2] xor ((y shl 09) or (y shr (32-09))); y := x[ 2] + x[14]; x[ 6] := x[ 6] xor ((y shl 13) or (y shr (32-13))); y := x[ 6] + x[ 2]; x[10] := x[10] xor ((y shl 18) or (y shr (32-18))); y := x[15] + x[11]; x[ 3] := x[ 3] xor ((y shl 07) or (y shr (32-07))); y := x[ 3] + x[15]; x[ 7] := x[ 7] xor ((y shl 09) or (y shr (32-09))); y := x[ 7] + x[ 3]; x[11] := x[11] xor ((y shl 13) or (y shr (32-13))); y := x[11] + x[ 7]; x[15] := x[15] xor ((y shl 18) or (y shr (32-18))); y := x[ 0] + x[ 3]; x[ 1] := x[ 1] xor ((y shl 07) or (y shr (32-07))); y := x[ 1] + x[ 0]; x[ 2] := x[ 2] xor ((y shl 09) or (y shr (32-09))); y := x[ 2] + x[ 1]; x[ 3] := x[ 3] xor ((y shl 13) or (y shr (32-13))); y := x[ 3] + x[ 2]; x[ 0] := x[ 0] xor ((y shl 18) or (y shr (32-18))); y := x[ 5] + x[ 4]; x[ 6] := x[ 6] xor ((y shl 07) or (y shr (32-07))); y := x[ 6] + x[ 5]; x[ 7] := x[ 7] xor ((y shl 09) or (y shr (32-09))); y := x[ 7] + x[ 6]; x[ 4] := x[ 4] xor ((y shl 13) or (y shr (32-13))); y := x[ 4] + x[ 7]; x[ 5] := x[ 5] xor ((y shl 18) or (y shr (32-18))); y := x[10] + x[ 9]; x[11] := x[11] xor ((y shl 07) or (y shr (32-07))); y := x[11] + x[10]; x[ 8] := x[ 8] xor ((y shl 09) or (y shr (32-09))); y := x[ 8] + x[11]; x[ 9] := x[ 9] xor ((y shl 13) or (y shr (32-13))); y := x[ 9] + x[ 8]; x[10] := x[10] xor ((y shl 18) or (y shr (32-18))); y := x[15] + x[14]; x[12] := x[12] xor ((y shl 07) or (y shr (32-07))); y := x[12] + x[15]; x[13] := x[13] xor ((y shl 09) or (y shr (32-09))); y := x[13] + x[12]; x[14] := x[14] xor ((y shl 13) or (y shr (32-13))); y := x[14] + x[13]; x[15] := x[15] xor ((y shl 18) or (y shr (32-18))); end; {$else} for i:=0 to 3 do begin y := x[ 0] + x[12]; x[ 4] := x[ 4] xor ((y shl 07) or (y shr (32-07))); y := x[ 5] + x[ 1]; x[ 9] := x[ 9] xor ((y shl 07) or (y shr (32-07))); y := x[10] + x[ 6]; x[14] := x[14] xor ((y shl 07) or (y shr (32-07))); y := x[15] + x[11]; x[ 3] := x[ 3] xor ((y shl 07) or (y shr (32-07))); y := x[ 4] + x[ 0]; x[ 8] := x[ 8] xor ((y shl 09) or (y shr (32-09))); y := x[ 9] + x[ 5]; x[13] := x[13] xor ((y shl 09) or (y shr (32-09))); y := x[14] + x[10]; x[ 2] := x[ 2] xor ((y shl 09) or (y shr (32-09))); y := x[ 3] + x[15]; x[ 7] := x[ 7] xor ((y shl 09) or (y shr (32-09))); y := x[ 8] + x[ 4]; x[12] := x[12] xor ((y shl 13) or (y shr (32-13))); y := x[13] + x[ 9]; x[ 1] := x[ 1] xor ((y shl 13) or (y shr (32-13))); y := x[ 2] + x[14]; x[ 6] := x[ 6] xor ((y shl 13) or (y shr (32-13))); y := x[ 7] + x[ 3]; x[11] := x[11] xor ((y shl 13) or (y shr (32-13))); y := x[12] + x[ 8]; x[ 0] := x[ 0] xor ((y shl 18) or (y shr (32-18))); y := x[ 1] + x[13]; x[ 5] := x[ 5] xor ((y shl 18) or (y shr (32-18))); y := x[ 6] + x[ 2]; x[10] := x[10] xor ((y shl 18) or (y shr (32-18))); y := x[11] + x[ 7]; x[15] := x[15] xor ((y shl 18) or (y shr (32-18))); y := x[ 0] + x[ 3]; x[ 1] := x[ 1] xor ((y shl 07) or (y shr (32-07))); y := x[ 5] + x[ 4]; x[ 6] := x[ 6] xor ((y shl 07) or (y shr (32-07))); y := x[10] + x[ 9]; x[11] := x[11] xor ((y shl 07) or (y shr (32-07))); y := x[15] + x[14]; x[12] := x[12] xor ((y shl 07) or (y shr (32-07))); y := x[ 1] + x[ 0]; x[ 2] := x[ 2] xor ((y shl 09) or (y shr (32-09))); y := x[ 6] + x[ 5]; x[ 7] := x[ 7] xor ((y shl 09) or (y shr (32-09))); y := x[11] + x[10]; x[ 8] := x[ 8] xor ((y shl 09) or (y shr (32-09))); y := x[12] + x[15]; x[13] := x[13] xor ((y shl 09) or (y shr (32-09))); y := x[ 2] + x[ 1]; x[ 3] := x[ 3] xor ((y shl 13) or (y shr (32-13))); y := x[ 7] + x[ 6]; x[ 4] := x[ 4] xor ((y shl 13) or (y shr (32-13))); y := x[ 8] + x[11]; x[ 9] := x[ 9] xor ((y shl 13) or (y shr (32-13))); y := x[13] + x[12]; x[14] := x[14] xor ((y shl 13) or (y shr (32-13))); y := x[ 3] + x[ 2]; x[ 0] := x[ 0] xor ((y shl 18) or (y shr (32-18))); y := x[ 4] + x[ 7]; x[ 5] := x[ 5] xor ((y shl 18) or (y shr (32-18))); y := x[ 9] + x[ 8]; x[10] := x[10] xor ((y shl 18) or (y shr (32-18))); y := x[14] + x[13]; x[15] := x[15] xor ((y shl 18) or (y shr (32-18))); end; {$endif} for i:=0 to 15 do B[i] := x[i] + B[i] end; {---------------------------------------------------------------------------} procedure xorblock(dest, src: pByte; len: longint); {-xor block dest := dest xor src} begin while len > 0 do begin dest^ := dest^ xor src^; inc(Ptr2Inc(dest)); inc(Ptr2Inc(src)); dec(len); end; end; {---------------------------------------------------------------------------} function scrypt_kdfs(sPW: Str255; salt: pointer; sLen,N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password sPW and salt using scrypt with parameters N,r,p} begin scrypt_kdfs := scrypt_kdf(@sPW[1], length(sPw), salt,sLen,N,r,p,DK,dkLen); end; {---------------------------------------------------------------------------} function scrypt_kdfss(sPW, salt: Str255; N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password sPW and salt using scrypt with parameters N,r,p} begin scrypt_kdfss := scrypt_kdf(@sPW[1],length(sPw),@salt[1],length(salt),N,r,p,DK,dkLen); end; {The following scrypt Pascal functions are based on Colin Percival's C} {function crypto_scrypt-ref.c distributed with the BSD-style license: } (*- * Copyright 2009 Colin Percival * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * This file was originally written by Colin Percival as part of the Tarsnap * online backup system. *) {---------------------------------------------------------------------------} procedure blockmix_salsa8(B, Y: pByte; r: longint); {-Compute B = BlockMix_(salsa20/8, r)(B). The input B must be 128*r} { bytes in length; the temporary space Y must also be the same size.} var i: longint; pb,py: pByte; X: TBA64; begin (* Parameters: r Block size parameter. B[0], ..., B[2*r-1] input vector of 2*r 64-byte blocks B'[0], ..., B'[2*r-1] output vector of 2*r 64-byte blocks * Algorithm: 1. X = B[2*r-1] 2. for i = 0 to 2*r-1 do T = X xor B[i] X = Salsa(T) Y[i] = X end for 3. B' = (Y[0], Y[2], ..., Y[2 * r - 2], Y[1], Y[3], ..., Y[2 * r - 1]) *) {Step 1} pb := B; inc(Ptr2Inc(pb), (2*r-1)*64); move(pb^, X, 64); pb := B; py := Y; {Steps 2} for i:= 0 to 2*r - 1 do begin xorblock(pByte(@X), pByte(pb), 64); inc(Ptr2Inc(pb), 64); salsa20_8(TLA16(X)); move(X, py^, 64); inc(Ptr2Inc(py), 64); end; {Step 3} pb := B; py := Y; for i:=0 to r-1 do begin move(py^, pb^, 64); inc(Ptr2Inc(pb), 64); inc(Ptr2Inc(py), 128); end; py := Y; inc(Ptr2Inc(py), 64); for i:=0 to r-1 do begin move(py^, pb^, 64); inc(Ptr2Inc(pb), 64); inc(Ptr2Inc(py), 128); end; end; {---------------------------------------------------------------------------} procedure smix(B: pByte; r,N: longint; V, XY: pByte); {-Compute B = SMix_r(B, N). The input B must be 128*r bytes in length; } { the temporary storage V must be 128*r*N bytes in length; the temporary} { storage XY must be 256*r bytes in length. N must be a power of 2. } var i,j,r128: longint; px,py,pv,pj: pByte; begin (* Algorithm scryptROMix Input: r Block size parameter. B Input octet vector of length 128 * r octets. N CPU/Memory cost parameter, must be larger than 1, Output: B' Output octet vector of length 128 * r octets. *) {WE: Note that the reference performs the salsa steps as: Convert to LE,} {salsa compress, convert from LE. Skipped here assuming little-endian. } r128 := 128*r; pv := V; px := XY; py := XY; inc(Ptr2Inc(py), r128); move(B^,px^,r128); for i:=0 to N-1 do begin move(px^, pv^, r128); inc(Ptr2Inc(pv), r128); blockmix_salsa8(px, py, r); end; pj := XY; inc(Ptr2Inc(pj), (2*r - 1)*64); for i:=0 to N-1 do begin {The next line is the function Integerify(X) mod N, i.e. the remainder} {of dividing the multi-precision little-endian integer B[2*r-1] by N. } {Because we assume little-endian and N must be a power of two, this } {reduces to a simple AND operation!} j := pLongint(pj)^ and (N-1); {X = blockmix(V[j] xor X)} pv := V; inc(Ptr2Inc(pv), j*r128); xorblock(px, pv, r128); blockmix_salsa8(px, py, r); end; move(px^, B^, r128); end; {---------------------------------------------------------------------------} function pbkdf2_hmac_sha3_512(pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; {-Derive key DK from password pPW using salt and iteration count C using hmac_sha3_512} var phash: PHashDesc; begin {Note: pbkdf2 will return error indicator phash=nil if _SHA3_512 is not found!} phash := FindHash_by_ID(_SHA3_512); pbkdf2_hmac_sha3_512 := pbkdf2(phash,pPW,pLen,salt,sLen,C,DK,dkLen); end; {---------------------------------------------------------------------------} function scrypt_kdf(pPW: pointer; pLen: word; salt: pointer; sLen,N,r,p: longint; var DK; dkLen: longint): integer; {-Derive key DK from password pPW and salt using scrypt with parameters N,r,p} var pB,pV,pXY,pw: pByte; sB,sV,sXY,i: longint; err: integer; begin {$ifdef ENDIAN_BIG} scrypt_kdf := sc_kdf_err_big_endian; exit; {$endif} {Check parameter values and if N is a power of two} i := MaxLongint div 128; if (r<1) or (r > i div 2) or (p<1) or (p > i div r) or (N<2) or (N and (N-1) <> 0) or (N > i div r) then begin scrypt_kdf := sc_kdf_err_inv_nrp; exit; end; {Compute and store sizes, needed for releasing memory} {sB = 128*r*p, sXY = 256*r, sV = 128*r*N} i := 128*r; {128 <= i < $40000000} sB := p*i; sXY := 2*i; sV := N*i; {Simple sanity checks for possible remaining overflows} if (sV<i) or (sXY<i) or (sB<i) then begin scrypt_kdf := sc_kdf_err_inv_nrp; exit; end; {$ifdef BIT16} if (dkLen>$FF00) or (sLen>$FF00) or (sB>$FF00) or (sXY>$FF00) or (sV>$FF00) then begin scrypt_kdf := sc_kdf_err_64KB; exit; end; {$endif} pB := malloc(sB); pV := malloc(sV); pXY := malloc(sXY); if (pB<>nil) and (pV<>nil) and (pXY<>nil) then begin err := pbkdf2_hmac_sha3_512(pPW, pLen, salt, sLen, 1, pB^, sB); if err=0 then begin pw := pB; for i:=0 to p-1 do begin smix(pw, r, N, pV, pXY); inc(Ptr2Inc(pw), r*128); end; err := pbkdf2_hmac_sha3_512(pPW, pLen, pB, sB, 1, DK, dKlen); end; scrypt_kdf := err; end else scrypt_kdf := sc_kdf_err_mem; mfree(pB,sB); mfree(pV,sV); mfree(pXY,sXY); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/memh.pas����������������������������������������0000644�0001750�0000144�00000013675�15104114162�023106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit memh; {Basic portable heap memory allocation functions} interface {$i STD.INC} (************************************************************************* DESCRIPTION : Basic portable heap memory allocation functions REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18, FPC, VP, WDOSX EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REMARK : 16-bit compilers and sizes >= $10000: alloc functions return nil, free procedures do nothing! Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 15.04.14 W.Ehrhardt Initial version with malloc/mfree 0.11 16.04.14 we calloc/cfree 0.12 16.04.14 we use untyped var p in free routines 0.13 17.04.14 we ialloc with longint size 0.14 17.04.14 we long versions 0.15 18.04.14 we remove word versions, rename long versions **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2014 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) function malloc(size: longint): pointer; {-Allocate heap, return nil if error} function calloc(size: longint): pointer; {-Allocate heap, return nil if error, clear allocated memory to 0} procedure mfree(var p; size: longint); {-Deallocate heap if p<>nil, p will be set to nil} procedure cfree(var p; size: longint); {-Deallocate heap if p<>nil, p will be set to nil, memory set to 0} implementation {$ifdef BIT16} {$F+} {--------------------------------------------------------------------------} function HeapFunc(Size: word): integer; {-Forces nil return values instead of runtime error if out of memory} begin if size>0 then HeapFunc := 1; end; {---------------------------------------------------------------------------} function ialloc(size: longint; set0: boolean): pointer; {-Allocate heap, return nil if error, clear allocated memory to 0 if set0} var p, SaveHeapError : pointer; wsize: word absolute size; type LH = packed record L,H: word; end; begin if LH(size).H<>0 then ialloc := nil else begin SaveHeapError := HeapError; HeapError := @HeapFunc; getmem(p, wsize); HeapError := SaveHeapError; if (p<>nil) and set0 then fillchar(p^,wsize,0); ialloc := p; end; end; {---------------------------------------------------------------------------} procedure ifree(var p; size: longint; set0: boolean); {-Dellocate heap if p<>nil, set p=nil, clear allocated memory to 0 if set0} var pp: pointer absolute p; wsize: word absolute size; type LH = packed record L,H: word; end; begin if (pp<>nil) and (LH(size).H=0) then begin if set0 then fillchar(pp^, wsize, 0); freemem(pp, wsize); pp := nil; end; end; {$else} {---------------------------------------------------------------------------} procedure ifree(var p; size: longint; set0: boolean); {-Dellocate heap if p<>nil, set p=nil, clear allocated memory to 0 if set0} var pp: pointer absolute p; begin if pp<>nil then begin if set0 then fillchar(pp^, size, 0); freemem(pp, size); pp := nil; end; end; {$ifdef FPC} {---------------------------------------------------------------------------} function ialloc(size: longint; set0: boolean): pointer; {-Allocate heap, return nil if error, clear allocated memory to 0 if set0} var p: pointer; sh: boolean; begin sh := ReturnNilIfGrowHeapFails; ReturnNilIfGrowHeapFails := true; getmem(p, size); ReturnNilIfGrowHeapFails := sh; if (p<>nil) and set0 then fillchar(p^,size,0); ialloc := p; end; {$else} {---------------------------------------------------------------------------} function ialloc(size: longint; set0: boolean): pointer; {-Allocate heap, return nil if error, clear allocated memory to 0 if set0} var p: pointer; begin try getmem(p, size); except p := nil; end; if (p<>nil) and set0 then fillchar(p^,size,0); ialloc := p; end; {$endif} {$endif} {---------------------------------------------------------------------------} function malloc(size: longint): pointer; {-Allocate heap, return nil if error} begin malloc := ialloc(size,false); end; {---------------------------------------------------------------------------} function calloc(size: longint): pointer; {-Allocate heap, return nil if error, clear allocated memory to 0} begin calloc := ialloc(size,true); end; {---------------------------------------------------------------------------} procedure mfree(var p; size: longint); {-Deallocate heap if p<>nil, p will be set to nil} begin ifree(p,size,false); end; {---------------------------------------------------------------------------} procedure cfree(var p; size: longint); {-Deallocate heap if p<>nil, p will be set to nil, memory set to 0} begin ifree(p,size,true); end; end. �������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/kperm_mx.inc������������������������������������0000644�0001750�0000144�00000023050�15104114162�023754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{KeccakF[1600] state permutation for 32 bit compilers with MMX/ASM support} {Compiled from Pascal source to MMX with ad-hoc compiler by Eric Grange. } {Slightly changed by WE to make it compatible with plain D6+ and FPC. } {This code is used if the symbol USE_MMCODE is defined in unit sha3, FPC } {and Delphi 6+. For the variables, structure etc see also kperm_64.inc. } {$ifdef HAS_UINT64} type u64bit = uint64; {$else} type u64bit = int64; {$endif} {$ifdef FPC} {$ASMMODE INTEL} {$endif} type pu64bit = ^u64bit; const cRoundConstants: array[0..23] of u64bit = ( u64bit($0000000000000001), u64bit($0000000000008082), u64bit($800000000000808A), u64bit($8000000080008000), u64bit($000000000000808B), u64bit($0000000080000001), u64bit($8000000080008081), u64bit($8000000000008009), u64bit($000000000000008A), u64bit($0000000000000088), u64bit($0000000080008009), u64bit($000000008000000A), u64bit($000000008000808B), u64bit($800000000000008B), u64bit($8000000000008089), u64bit($8000000000008003), u64bit($8000000000008002), u64bit($8000000000000080), u64bit($000000000000800A), u64bit($800000008000000A), u64bit($8000000080008081), u64bit($8000000000008080), u64bit($0000000080000001), u64bit($8000000080008008)); {---------------------------------------------------------------------------} procedure KeccakPermutationKernel(B, A, C: pointer); begin asm mov eax, [B] mov edx, [A] mov ecx, [C] add edx, 128 add eax, 128 // Theta movq mm2, [edx-112] movq mm0, [edx-128] pxor mm0, [edx-88] pxor mm0, [edx-48] pxor mm0, [edx-8] pxor mm0, [edx+32] movq mm1, [edx-120] movq [ecx], mm0 pxor mm2, [edx-72] pxor mm2, [edx-32] pxor mm2, [edx+8] pxor mm2, [edx+48] movq mm3, [edx-104] movq [ecx+16], mm2 pxor mm1, [edx-80] pxor mm1, [edx-40] pxor mm1, [edx] pxor mm1, [edx+40] movq mm4, [edx-96] movq [ecx+8], mm1 pxor mm3, [edx-64] pxor mm3, [edx-24] pxor mm3, [edx+16] pxor mm3, [edx+56] movq [ecx+24], mm3 pxor mm4, [edx-56] pxor mm4, [edx-16] pxor mm4, [edx+24] pxor mm4, [edx+64] movq [ecx+32], mm4 movq mm6, mm2 psllq mm2, 1 psrlq mm6, 63 por mm2, mm6 pxor mm2, mm0 movq mm7, mm0 psllq mm0, 1 psrlq mm7, 63 por mm0, mm7 pxor mm0, mm3 movq mm5, mm3 psllq mm3, 1 psrlq mm5, 63 por mm3, mm5 pxor mm3, mm1 movq mm6, mm1 psllq mm1, 1 psrlq mm6, 63 por mm1, mm6 pxor mm1, mm4 movq mm7, mm4 psllq mm4, 1 psrlq mm7, 63 por mm4, mm7 pxor mm4, [ecx+16] // Rho Pi movq mm5, [edx-24] movq mm6, [edx-80] pxor mm6, mm2 movq mm7, mm6 psllq mm6, 44 psrlq mm7, 20 por mm6, mm7 movq [eax-120], mm6 movq mm6, [edx+24] pxor mm5, mm4 movq mm7, mm5 psllq mm5, 25 psrlq mm7, 39 por mm5, mm7 movq [eax-32], mm5 movq mm5, [edx-96] pxor mm6, mm0 movq mm7, mm6 psllq mm6, 8 psrlq mm7, 56 por mm6, mm7 movq [eax-24], mm6 movq mm6, [edx-64] pxor mm5, mm0 movq mm7, mm5 psllq mm5, 27 psrlq mm7, 37 por mm5, mm7 movq [eax-8], mm5 pxor mm6, mm4 movq mm7, mm6 psllq mm6, 55 psrlq mm7, 9 por mm6, mm7 movq mm5, [edx] movq [eax+40], mm6 movq mm6, [edx-128] pxor mm6, mm1 movq [eax-128], mm6 movq mm6, [edx-88] pxor mm5, mm2 movq mm7, mm5 psllq mm5, 45 psrlq mm7, 19 por mm5, mm7 movq [eax-64], mm5 movq mm5, [edx-16] pxor mm6, mm1 movq mm7, mm6 psllq mm6, 36 psrlq mm7, 28 por mm6, mm7 movq [eax], mm6 movq mm6, [edx+8] pxor mm5, mm0 movq mm7, mm5 psllq mm5, 39 psrlq mm7, 25 por mm5, mm7 movq [eax+48], mm5 movq mm5, [edx-104] pxor mm6, mm3 movq mm7, mm6 psllq mm6, 15 psrlq mm7, 49 por mm6, mm7 movq [eax+16], mm6 movq mm6, [edx-120] pxor mm5, mm4 movq mm7, mm5 psllq mm5, 28 psrlq mm7, 36 por mm5, mm7 movq [eax-88], mm5 movq mm5, [edx-48] pxor mm6, mm2 movq mm7, mm6 psllq mm6, 1 psrlq mm7, 63 por mm6, mm7 movq [eax-48], mm6 movq mm6, [edx+56] pxor mm5, mm1 movq mm7, mm5 psllq mm5, 3 psrlq mm7, 61 por mm5, mm7 movq [eax-72], mm5 movq mm5, [edx+16] pxor mm6, mm4 movq mm7, mm6 psllq mm6, 56 psrlq mm7, 8 por mm6, mm7 movq [eax+24], mm6 movq mm6, [edx+32] pxor mm5, mm4 movq mm7, mm5 psllq mm5, 21 psrlq mm7, 43 por mm5, mm7 movq [eax-104], mm5 movq mm5, [edx+40] pxor mm6, mm1 movq mm7, mm6 psllq mm6, 18 psrlq mm7, 46 por mm6, mm7 movq [eax-16], mm6 movq mm6, [edx-72] pxor mm5, mm2 movq mm7, mm5 psllq mm5, 2 psrlq mm7, 62 por mm5, mm7 movq [eax+64], mm5 movq mm5, [edx-40] pxor mm6, mm3 movq mm7, mm6 psllq mm6, 6 psrlq mm7, 58 por mm6, mm7 movq [eax-40], mm6 movq mm6, [edx-56] pxor mm5, mm2 movq mm7, mm5 psllq mm5, 10 psrlq mm7, 54 por mm5, mm7 movq [eax+8], mm5 movq mm5, [edx-112] pxor mm6, mm0 movq mm7, mm6 psllq mm6, 20 psrlq mm7, 44 por mm6, mm7 movq [eax-80], mm6 movq mm6, [edx+48] pxor mm5, mm3 movq mm7, mm5 psllq mm5, 62 psrlq mm7, 2 por mm5, mm7 movq [eax+32], mm5 movq mm5, [edx-8] pxor mm6, mm3 movq mm7, mm6 psllq mm6, 61 psrlq mm7, 3 por mm6, mm7 movq [eax-56], mm6 movq mm6, [edx+64] pxor mm5, mm1 movq mm7, mm5 psllq mm5, 41 psrlq mm7, 23 por mm5, mm7 movq [eax+56], mm5 movq mm5, [edx-32] pxor mm6, mm0 movq mm7, mm6 psllq mm6, 14 psrlq mm7, 50 por mm6, mm7 movq [eax-96], mm6 pxor mm5, mm3 movq mm7, mm5 psllq mm5, 43 psrlq mm7, 21 por mm5, mm7 movq [eax-112], mm5 // Chi movq mm4, [eax-128] movq mm2, [eax-104] movq mm1, mm5 movq mm3, mm6 pandn mm3, mm4 pxor mm3, mm2 movq mm0, [eax-120] movq [edx-104], mm3 pandn mm1, mm2 pxor mm1, mm0 movq [edx-120], mm1 pandn mm2, mm6 pxor mm2, mm5 movq [edx-112], mm2 pandn mm0, mm5 pxor mm0, mm4 movq mm5, [eax-80] movq [edx-128], mm0 pandn mm4, [eax-120] pxor mm4, mm6 movq mm0, [eax-56] movq mm6, [eax-72] movq mm1, [eax-88] movq [edx-96], mm4 pandn mm5, mm6 pxor mm5, mm1 movq mm7, [eax-64] movq [edx-88], mm5 pandn mm0, mm1 pxor mm0, mm7 movq [edx-64], mm0 pandn mm6, mm7 pxor mm6, [eax-80] movq mm5, [eax-16] movq [edx-80], mm6 pandn mm1, [eax-80] pxor mm1, [eax-56] movq mm6, [eax-48] movq mm4, [eax-24] movq [edx-56], mm1 pandn mm5, mm6 pxor mm5, mm4 movq mm3, [eax-32] movq [edx-24], mm5 pandn mm7, [eax-56] pxor mm7, [eax-72] movq mm2, [eax-40] movq [edx-72], mm7 pandn mm3, mm4 pxor mm3, mm2 movq mm0, [eax+8] movq [edx-40], mm3 pandn mm2, [eax-32] pxor mm2, mm6 movq mm7, [eax] movq mm1, [eax+16] movq [edx-48], mm2 pandn mm0, mm1 pxor mm0, mm7 movq [edx], mm0 pandn mm6, [eax-40] pxor mm6, [eax-16] movq mm3, [eax-8] movq [edx-16], mm6 movq mm6, [eax+56] pandn mm7, [eax+8] pxor mm7, mm3 movq mm5, [eax+48] movq [edx-8], mm7 movq mm7, [eax+64] pandn mm6, mm7 pxor mm6, mm5 movq [edx+48], mm6 pandn mm4, [eax-16] pxor mm4, [eax-32] movq mm2, [eax+24] movq [edx-32], mm4 pandn mm3, [eax] pxor mm3, mm2 movq mm4, [eax+40] movq mm0, [eax+32] movq [edx+24], mm3 pandn mm7, mm0 pxor mm7, [eax+56] movq [edx+56], mm7 pandn mm4, mm5 pxor mm4, mm0 movq [edx+32], mm4 pandn mm1, mm2 pxor mm1, [eax+8] movq [edx+8], mm1 pandn mm0, [eax+40] pxor mm0, [eax+64] movq [edx+64], mm0 pandn mm5, [eax+56] pxor mm5, [eax+40] movq [edx+40], mm5 pandn mm2, [eax-8] pxor mm2, [eax+16] movq [edx+16], mm2 end; end; {---------------------------------------------------------------------------} procedure EMMS; begin asm emms end; end; {---------------------------------------------------------------------------} procedure KeccakPermutation(var state: TState_L); var A: u64bit absolute state; B: array[0..24] of u64bit; C: array[0..4] of u64bit; i: integer; begin for i:=0 to 23 do begin KeccakPermutationKernel(@B, @A, @C); A := A xor cRoundConstants[i]; end; EMMS; end; {---------------------------------------------------------------------------} procedure ExtractFromState(outp: pointer; const state: TState_L; laneCount: integer); var pI, pS: pu64bit; i: integer; begin pI := outp; pS := @state[0]; for i:=laneCount-1 downto 0 do begin pI^ := pS^; inc(pI); inc(pS); end; end; {---------------------------------------------------------------------------} procedure XorIntoState(var state: TState_L; inp: PLongint; laneCount: integer); {-Include input message data bits into the sponge state} var pI, pS: pu64bit; i: integer; begin pI := pu64bit(inp); pS := @state[0]; for i:=laneCount-1 downto 0 do begin pS^ := pS^ xor pI^; inc(pI); inc(pS); end; end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/kperm_64.inc������������������������������������0000644�0001750�0000144�00000013004�15104114162�023557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{KeccakF[1600] state permutation for 32+ bit compilers with RotL as function } {Note: This will compile with all compilers which do support int64, but it is} {better than the 32 bit code only if HAS_INLINE is available, 64-bit code is } {produced and executed on 64-bit OS. Pascal translation based on the C++ code} {keccak.cpp from the Botan library available from http://botan.randombit.net/} {$define USE_LOCALA} {With FPC64/WIN64 about 20% faster} {$ifdef HAS_UINT64} type u64bit = uint64; {$else} type u64bit = int64; {$endif} type pu64bit = ^u64bit; const RC: array[0..23] of u64bit = ( u64bit($0000000000000001), u64bit($0000000000008082), u64bit($800000000000808A), u64bit($8000000080008000), u64bit($000000000000808B), u64bit($0000000080000001), u64bit($8000000080008081), u64bit($8000000000008009), u64bit($000000000000008A), u64bit($0000000000000088), u64bit($0000000080008009), u64bit($000000008000000A), u64bit($000000008000808B), u64bit($800000000000008B), u64bit($8000000000008089), u64bit($8000000000008003), u64bit($8000000000008002), u64bit($8000000000000080), u64bit($000000000000800A), u64bit($800000008000000A), u64bit($8000000080008081), u64bit($8000000000008080), u64bit($0000000080000001), u64bit($8000000080008008)); {---------------------------------------------------------------------------} {$IFDEF FPC} {$MACRO ON} {$DEFINE RotL:= RolQWord} {$ELSE} function RotL(x: u64bit; c: integer): u64bit; {$ifdef HAS_INLINE} inline; {$endif} begin RotL := (x shl c) or (x shr (64-c)); end; {$ENDIF} {---------------------------------------------------------------------------} procedure KeccakPermutation(var state: TState_L); {$ifdef USE_LOCALA} var A: array[0..24] of u64bit; {$else} var A: packed array[0..24] of u64bit absolute state; {$endif} var B: array[0..24] of u64bit; C0, C1, C2, C3, C4, D0, D1, D2, D3, D4: u64bit; i: integer; begin {$ifdef USE_LOCALA} TState_L(A) := state; {$endif} for i:=0 to 23 do begin C0 := A[00] xor A[05] xor A[10] xor A[15] xor A[20]; C1 := A[01] xor A[06] xor A[11] xor A[16] xor A[21]; C2 := A[02] xor A[07] xor A[12] xor A[17] xor A[22]; C3 := A[03] xor A[08] xor A[13] xor A[18] xor A[23]; C4 := A[04] xor A[09] xor A[14] xor A[19] xor A[24]; D0 := RotL(C0, 1) xor C3; D1 := RotL(C1, 1) xor C4; D2 := RotL(C2, 1) xor C0; D3 := RotL(C3, 1) xor C1; D4 := RotL(C4, 1) xor C2; B[00] := A[00] xor D1; B[01] := RotL(A[06] xor D2, 44); B[02] := RotL(A[12] xor D3, 43); B[03] := RotL(A[18] xor D4, 21); B[04] := RotL(A[24] xor D0, 14); B[05] := RotL(A[03] xor D4, 28); B[06] := RotL(A[09] xor D0, 20); B[07] := RotL(A[10] xor D1, 3); B[08] := RotL(A[16] xor D2, 45); B[09] := RotL(A[22] xor D3, 61); B[10] := RotL(A[01] xor D2, 1); B[11] := RotL(A[07] xor D3, 6); B[12] := RotL(A[13] xor D4, 25); B[13] := RotL(A[19] xor D0, 8); B[14] := RotL(A[20] xor D1, 18); B[15] := RotL(A[04] xor D0, 27); B[16] := RotL(A[05] xor D1, 36); B[17] := RotL(A[11] xor D2, 10); B[18] := RotL(A[17] xor D3, 15); B[19] := RotL(A[23] xor D4, 56); B[20] := RotL(A[02] xor D3, 62); B[21] := RotL(A[08] xor D4, 55); B[22] := RotL(A[14] xor D0, 39); B[23] := RotL(A[15] xor D1, 41); B[24] := RotL(A[21] xor D2, 2); A[00] := B[00] xor ((not B[01]) and B[02]); A[01] := B[01] xor ((not B[02]) and B[03]); A[02] := B[02] xor ((not B[03]) and B[04]); A[03] := B[03] xor ((not B[04]) and B[00]); A[04] := B[04] xor ((not B[00]) and B[01]); A[05] := B[05] xor ((not B[06]) and B[07]); A[06] := B[06] xor ((not B[07]) and B[08]); A[07] := B[07] xor ((not B[08]) and B[09]); A[08] := B[08] xor ((not B[09]) and B[05]); A[09] := B[09] xor ((not B[05]) and B[06]); A[10] := B[10] xor ((not B[11]) and B[12]); A[11] := B[11] xor ((not B[12]) and B[13]); A[12] := B[12] xor ((not B[13]) and B[14]); A[13] := B[13] xor ((not B[14]) and B[10]); A[14] := B[14] xor ((not B[10]) and B[11]); A[15] := B[15] xor ((not B[16]) and B[17]); A[16] := B[16] xor ((not B[17]) and B[18]); A[17] := B[17] xor ((not B[18]) and B[19]); A[18] := B[18] xor ((not B[19]) and B[15]); A[19] := B[19] xor ((not B[15]) and B[16]); A[20] := B[20] xor ((not B[21]) and B[22]); A[21] := B[21] xor ((not B[22]) and B[23]); A[22] := B[22] xor ((not B[23]) and B[24]); A[23] := B[23] xor ((not B[24]) and B[20]); A[24] := B[24] xor ((not B[20]) and B[21]); A[00] := A[00] xor RC[i]; end; {$ifdef USE_LOCALA} state := TState_L(A); {$endif} end; {---------------------------------------------------------------------------} procedure extractFromState(outp: pointer; const state: TState_L; laneCount: integer); var pI, pS: pu64bit; i: integer; begin pI := outp; pS := @state[0]; for i:=laneCount-1 downto 0 do begin pI^ := pS^; inc(pI); inc(pS); end; end; {---------------------------------------------------------------------------} procedure xorIntoState(var state: TState_L; inp: PLongint; laneCount: integer); {-Include input message data bits into the sponge state} var pI, pS: pu64bit; i: integer; begin pI := pu64bit(inp); pS := @state[0]; for i:=laneCount-1 downto 0 do begin pS^ := pS^ xor pI^; inc(pI); inc(pS); end; end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/kperm_32.inc������������������������������������0000644�0001750�0000144�00000052361�15104114162�023563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{KeccakF[1600] state permutation for 32 bit compilers, RotL code inline} {Pascal translation from C code in Keccak-simple32BI.c by Ronny Van Keer} {---------------------------------------------------------------------------} const KeccakF1600RoundConstants_int2: array[0..2*24-1] of longint = (longint($00000001), longint($00000000), longint($00000000), longint($00000089), longint($00000000), longint($8000008b), longint($00000000), longint($80008080), longint($00000001), longint($0000008b), longint($00000001), longint($00008000), longint($00000001), longint($80008088), longint($00000001), longint($80000082), longint($00000000), longint($0000000b), longint($00000000), longint($0000000a), longint($00000001), longint($00008082), longint($00000000), longint($00008003), longint($00000001), longint($0000808b), longint($00000001), longint($8000000b), longint($00000001), longint($8000008a), longint($00000001), longint($80000081), longint($00000000), longint($80000081), longint($00000000), longint($80000008), longint($00000000), longint($00000083), longint($00000000), longint($80008003), longint($00000001), longint($80008088), longint($00000000), longint($80000088), longint($00000001), longint($00008000), longint($00000000), longint($80008082)); {---------------------------------------------------------------------------} procedure KeccakPermutation(var state: TState_L); var Aba0, Abe0, Abi0, Abo0, Abu0: longint; Aba1, Abe1, Abi1, Abo1, Abu1: longint; Aga0, Age0, Agi0, Ago0, Agu0: longint; Aga1, Age1, Agi1, Ago1, Agu1: longint; Aka0, Ake0, Aki0, Ako0, Aku0: longint; Aka1, Ake1, Aki1, Ako1, Aku1: longint; Ama0, Ame0, Ami0, Amo0, Amu0: longint; Ama1, Ame1, Ami1, Amo1, Amu1: longint; Asa0, Ase0, Asi0, Aso0, Asu0: longint; Asa1, Ase1, Asi1, Aso1, Asu1: longint; BCa0, BCe0, BCi0, BCo0, BCu0: longint; BCa1, BCe1, BCi1, BCo1, BCu1: longint; Da0, De0, Di0, Do0, Du0: longint; Da1, De1, Di1, Do1, Du1: longint; Eba0, Ebe0, Ebi0, Ebo0, Ebu0: longint; Eba1, Ebe1, Ebi1, Ebo1, Ebu1: longint; Ega0, Ege0, Egi0, Ego0, Egu0: longint; Ega1, Ege1, Egi1, Ego1, Egu1: longint; Eka0, Eke0, Eki0, Eko0, Eku0: longint; Eka1, Eke1, Eki1, Eko1, Eku1: longint; Ema0, Eme0, Emi0, Emo0, Emu0: longint; Ema1, Eme1, Emi1, Emo1, Emu1: longint; Esa0, Ese0, Esi0, Eso0, Esu0: longint; Esa1, Ese1, Esi1, Eso1, Esu1: longint; var round: integer; begin {copyFromState(A, state)} Aba0 := state[ 0]; Aba1 := state[ 1]; Abe0 := state[ 2]; Abe1 := state[ 3]; Abi0 := state[ 4]; Abi1 := state[ 5]; Abo0 := state[ 6]; Abo1 := state[ 7]; Abu0 := state[ 8]; Abu1 := state[ 9]; Aga0 := state[10]; Aga1 := state[11]; Age0 := state[12]; Age1 := state[13]; Agi0 := state[14]; Agi1 := state[15]; Ago0 := state[16]; Ago1 := state[17]; Agu0 := state[18]; Agu1 := state[19]; Aka0 := state[20]; Aka1 := state[21]; Ake0 := state[22]; Ake1 := state[23]; Aki0 := state[24]; Aki1 := state[25]; Ako0 := state[26]; Ako1 := state[27]; Aku0 := state[28]; Aku1 := state[29]; Ama0 := state[30]; Ama1 := state[31]; Ame0 := state[32]; Ame1 := state[33]; Ami0 := state[34]; Ami1 := state[35]; Amo0 := state[36]; Amo1 := state[37]; Amu0 := state[38]; Amu1 := state[39]; Asa0 := state[40]; Asa1 := state[41]; Ase0 := state[42]; Ase1 := state[43]; Asi0 := state[44]; Asi1 := state[45]; Aso0 := state[46]; Aso1 := state[47]; Asu0 := state[48]; Asu1 := state[49]; round := 0; while round < cKeccakNumberOfRounds do begin {prepareTheta} BCa0 := Aba0 xor Aga0 xor Aka0 xor Ama0 xor Asa0; BCa1 := Aba1 xor Aga1 xor Aka1 xor Ama1 xor Asa1; BCe0 := Abe0 xor Age0 xor Ake0 xor Ame0 xor Ase0; BCe1 := Abe1 xor Age1 xor Ake1 xor Ame1 xor Ase1; BCi0 := Abi0 xor Agi0 xor Aki0 xor Ami0 xor Asi0; BCi1 := Abi1 xor Agi1 xor Aki1 xor Ami1 xor Asi1; BCo0 := Abo0 xor Ago0 xor Ako0 xor Amo0 xor Aso0; BCo1 := Abo1 xor Ago1 xor Ako1 xor Amo1 xor Aso1; BCu0 := Abu0 xor Agu0 xor Aku0 xor Amu0 xor Asu0; BCu1 := Abu1 xor Agu1 xor Aku1 xor Amu1 xor Asu1; {thetaRhoPiChiIota(round, A, E)} Da0 := BCu0 xor (BCe1 shl 1) xor (BCe1 shr (32-1)); Da1 := BCu1 xor BCe0; De0 := BCa0 xor (BCi1 shl 1) xor (BCi1 shr (32-1)); De1 := BCa1 xor BCi0; Di0 := BCe0 xor (BCo1 shl 1) xor (BCo1 shr (32-1)); Di1 := BCe1 xor BCo0; Do0 := BCi0 xor (BCu1 shl 1) xor (BCu1 shr (32-1)); Do1 := BCi1 xor BCu0; Du0 := BCo0 xor (BCa1 shl 1) xor (BCa1 shr (32-1)); Du1 := BCo1 xor BCa0; Aba0 := Aba0 xor Da0; BCa0 := Aba0; Age0 := Age0 xor De0; BCe0 := (Age0 shl 22) xor (Age0 shr (32-22)); Aki1 := Aki1 xor Di1; BCi0 := (Aki1 shl 22) xor (Aki1 shr (32-22)); Amo1 := Amo1 xor Do1; BCo0 := (Amo1 shl 11) xor (Amo1 shr (32-11)); Asu0 := Asu0 xor Du0; BCu0 := (Asu0 shl 7) xor (Asu0 shr (32-7)); Eba0 := BCa0 xor ((not BCe0) and BCi0) xor KeccakF1600RoundConstants_int2[round*2+0]; Ebe0 := BCe0 xor ((not BCi0) and BCo0); Ebi0 := BCi0 xor ((not BCo0) and BCu0); Ebo0 := BCo0 xor ((not BCu0) and BCa0); Ebu0 := BCu0 xor ((not BCa0) and BCe0); Aba1 := Aba1 xor Da1; BCa1 := Aba1; Age1 := Age1 xor De1; BCe1 := (Age1 shl 22) xor (Age1 shr (32-22)); Aki0 := Aki0 xor Di0; BCi1 := (Aki0 shl 21) xor (Aki0 shr (32-21)); Amo0 := Amo0 xor Do0; BCo1 := (Amo0 shl 10) xor (Amo0 shr (32-10)); Asu1 := Asu1 xor Du1; BCu1 := (Asu1 shl 7) xor (Asu1 shr (32-7)); Eba1 := BCa1 xor ((not BCe1) and BCi1) xor KeccakF1600RoundConstants_int2[round*2+1]; Ebe1 := BCe1 xor ((not BCi1) and BCo1); Ebi1 := BCi1 xor ((not BCo1) and BCu1); Ebo1 := BCo1 xor ((not BCu1) and BCa1); Ebu1 := BCu1 xor ((not BCa1) and BCe1); Abo0 := Abo0 xor Do0; BCa0 := (Abo0 shl 14) xor (Abo0 shr (32-14)); Agu0 := Agu0 xor Du0; BCe0 := (Agu0 shl 10) xor (Agu0 shr (32-10)); Aka1 := Aka1 xor Da1; BCi0 := (Aka1 shl 2) xor (Aka1 shr (32-2)); Ame1 := Ame1 xor De1; BCo0 := (Ame1 shl 23) xor (Ame1 shr (32-23)); Asi1 := Asi1 xor Di1; BCu0 := (Asi1 shl 31) xor (Asi1 shr (32-31)); Ega0 := BCa0 xor ((not BCe0) and BCi0); Ege0 := BCe0 xor ((not BCi0) and BCo0); Egi0 := BCi0 xor ((not BCo0) and BCu0); Ego0 := BCo0 xor ((not BCu0) and BCa0); Egu0 := BCu0 xor ((not BCa0) and BCe0); Abo1 := Abo1 xor Do1; BCa1 := (Abo1 shl 14) xor (Abo1 shr (32-14)); Agu1 := Agu1 xor Du1; BCe1 := (Agu1 shl 10) xor (Agu1 shr (32-10)); Aka0 := Aka0 xor Da0; BCi1 := (Aka0 shl 1) xor (Aka0 shr (32-1)); Ame0 := Ame0 xor De0; BCo1 := (Ame0 shl 22) xor (Ame0 shr (32-22)); Asi0 := Asi0 xor Di0; BCu1 := (Asi0 shl 30) xor (Asi0 shr (32-30)); Ega1 := BCa1 xor ((not BCe1) and BCi1); Ege1 := BCe1 xor ((not BCi1) and BCo1); Egi1 := BCi1 xor ((not BCo1) and BCu1); Ego1 := BCo1 xor ((not BCu1) and BCa1); Egu1 := BCu1 xor ((not BCa1) and BCe1); Abe1 := Abe1 xor De1; BCa0 := (Abe1 shl 1) xor (Abe1 shr (32-1)); Agi0 := Agi0 xor Di0; BCe0 := (Agi0 shl 3) xor (Agi0 shr (32-3)); Ako1 := Ako1 xor Do1; BCi0 := (Ako1 shl 13) xor (Ako1 shr (32-13)); Amu0 := Amu0 xor Du0; BCo0 := (Amu0 shl 4) xor (Amu0 shr (32-4)); Asa0 := Asa0 xor Da0; BCu0 := (Asa0 shl 9) xor (Asa0 shr (32-9)); Eka0 := BCa0 xor ((not BCe0) and BCi0 ); Eke0 := BCe0 xor ((not BCi0) and BCo0 ); Eki0 := BCi0 xor ((not BCo0) and BCu0 ); Eko0 := BCo0 xor ((not BCu0) and BCa0 ); Eku0 := BCu0 xor ((not BCa0) and BCe0 ); Abe0 := Abe0 xor De0; BCa1 := Abe0; Agi1 := Agi1 xor Di1; BCe1 := (Agi1 shl 3) xor (Agi1 shr (32-3)); Ako0 := Ako0 xor Do0; BCi1 := (Ako0 shl 12) xor (Ako0 shr (32-12)); Amu1 := Amu1 xor Du1; BCo1 := (Amu1 shl 4) xor (Amu1 shr (32-4)); Asa1 := Asa1 xor Da1; BCu1 := (Asa1 shl 9) xor (Asa1 shr (32-9)); Eka1 := BCa1 xor ((not BCe1) and BCi1); Eke1 := BCe1 xor ((not BCi1) and BCo1); Eki1 := BCi1 xor ((not BCo1) and BCu1); Eko1 := BCo1 xor ((not BCu1) and BCa1); Eku1 := BCu1 xor ((not BCa1) and BCe1); Abu1 := Abu1 xor Du1; BCa0 := (Abu1 shl 14) xor (Abu1 shr (32-14)); Aga0 := Aga0 xor Da0; BCe0 := (Aga0 shl 18) xor (Aga0 shr (32-18)); Ake0 := Ake0 xor De0; BCi0 := (Ake0 shl 5) xor (Ake0 shr (32-5)); Ami1 := Ami1 xor Di1; BCo0 := (Ami1 shl 8) xor (Ami1 shr (32-8)); Aso0 := Aso0 xor Do0; BCu0 := (Aso0 shl 28) xor (Aso0 shr (32-28)); Ema0 := BCa0 xor ((not BCe0) and BCi0); Eme0 := BCe0 xor ((not BCi0) and BCo0); Emi0 := BCi0 xor ((not BCo0) and BCu0); Emo0 := BCo0 xor ((not BCu0) and BCa0); Emu0 := BCu0 xor ((not BCa0) and BCe0); Abu0 := Abu0 xor Du0; BCa1 := (Abu0 shl 13) xor (Abu0 shr (32-13)); Aga1 := Aga1 xor Da1; BCe1 := (Aga1 shl 18) xor (Aga1 shr (32-18)); Ake1 := Ake1 xor De1; BCi1 := (Ake1 shl 5) xor (Ake1 shr (32-5)); Ami0 := Ami0 xor Di0; BCo1 := (Ami0 shl 7) xor (Ami0 shr (32-7)); Aso1 := Aso1 xor Do1; BCu1 := (Aso1 shl 28) xor (Aso1 shr (32-28)); Ema1 := BCa1 xor ((not BCe1) and BCi1); Eme1 := BCe1 xor ((not BCi1) and BCo1); Emi1 := BCi1 xor ((not BCo1) and BCu1); Emo1 := BCo1 xor ((not BCu1) and BCa1); Emu1 := BCu1 xor ((not BCa1) and BCe1); Abi0 := Abi0 xor Di0; BCa0 := (Abi0 shl 31) xor (Abi0 shr (32-31)); Ago1 := Ago1 xor Do1; BCe0 := (Ago1 shl 28) xor (Ago1 shr (32-28)); Aku1 := Aku1 xor Du1; BCi0 := (Aku1 shl 20) xor (Aku1 shr (32-20)); Ama1 := Ama1 xor Da1; BCo0 := (Ama1 shl 21) xor (Ama1 shr (32-21)); Ase0 := Ase0 xor De0; BCu0 := (Ase0 shl 1) xor (Ase0 shr (32-1)); Esa0 := BCa0 xor ((not BCe0) and BCi0); Ese0 := BCe0 xor ((not BCi0) and BCo0); Esi0 := BCi0 xor ((not BCo0) and BCu0); Eso0 := BCo0 xor ((not BCu0) and BCa0); Esu0 := BCu0 xor ((not BCa0) and BCe0); Abi1 := Abi1 xor Di1; BCa1 := (Abi1 shl 31) xor (Abi1 shr (32-31)); Ago0 := Ago0 xor Do0; BCe1 := (Ago0 shl 27) xor (Ago0 shr (32-27)); Aku0 := Aku0 xor Du0; BCi1 := (Aku0 shl 19) xor (Aku0 shr (32-19)); Ama0 := Ama0 xor Da0; BCo1 := (Ama0 shl 20) xor (Ama0 shr (32-20)); Ase1 := Ase1 xor De1; BCu1 := (Ase1 shl 1) xor (Ase1 shr (32-1)); Esa1 := BCa1 xor ((not BCe1) and BCi1); Ese1 := BCe1 xor ((not BCi1) and BCo1); Esi1 := BCi1 xor ((not BCo1) and BCu1); Eso1 := BCo1 xor ((not BCu1) and BCa1); Esu1 := BCu1 xor ((not BCa1) and BCe1); {prepareTheta} BCa0 := Eba0 xor Ega0 xor Eka0 xor Ema0 xor Esa0; BCa1 := Eba1 xor Ega1 xor Eka1 xor Ema1 xor Esa1; BCe0 := Ebe0 xor Ege0 xor Eke0 xor Eme0 xor Ese0; BCe1 := Ebe1 xor Ege1 xor Eke1 xor Eme1 xor Ese1; BCi0 := Ebi0 xor Egi0 xor Eki0 xor Emi0 xor Esi0; BCi1 := Ebi1 xor Egi1 xor Eki1 xor Emi1 xor Esi1; BCo0 := Ebo0 xor Ego0 xor Eko0 xor Emo0 xor Eso0; BCo1 := Ebo1 xor Ego1 xor Eko1 xor Emo1 xor Eso1; BCu0 := Ebu0 xor Egu0 xor Eku0 xor Emu0 xor Esu0; BCu1 := Ebu1 xor Egu1 xor Eku1 xor Emu1 xor Esu1; {thetaRhoPiChiIota(round+1, E, A)} Da0 := BCu0 xor (BCe1 shl 1) xor (BCe1 shr (32-1)); Da1 := BCu1 xor BCe0; De0 := BCa0 xor (BCi1 shl 1) xor (BCi1 shr (32-1)); De1 := BCa1 xor BCi0; Di0 := BCe0 xor (BCo1 shl 1) xor (BCo1 shr (32-1)); Di1 := BCe1 xor BCo0; Do0 := BCi0 xor (BCu1 shl 1) xor (BCu1 shr (32-1)); Do1 := BCi1 xor BCu0; Du0 := BCo0 xor (BCa1 shl 1) xor (BCa1 shr (32-1)); Du1 := BCo1 xor BCa0; Eba0 := Eba0 xor Da0; BCa0 := Eba0; Ege0 := Ege0 xor De0; BCe0 := (Ege0 shl 22) xor (Ege0 shr (32-22)); Eki1 := Eki1 xor Di1; BCi0 := (Eki1 shl 22) xor (Eki1 shr (32-22)); Emo1 := Emo1 xor Do1; BCo0 := (Emo1 shl 11) xor (Emo1 shr (32-11)); Esu0 := Esu0 xor Du0; BCu0 := (Esu0 shl 7) xor (Esu0 shr (32-7)); Aba0 := BCa0 xor ((not BCe0) and BCi0) xor KeccakF1600RoundConstants_int2[round*2+2]; Abe0 := BCe0 xor ((not BCi0) and BCo0); Abi0 := BCi0 xor ((not BCo0) and BCu0); Abo0 := BCo0 xor ((not BCu0) and BCa0); Abu0 := BCu0 xor ((not BCa0) and BCe0); Eba1 := Eba1 xor Da1; BCa1 := Eba1; Ege1 := Ege1 xor De1; BCe1 := (Ege1 shl 22) xor (Ege1 shr (32-22)); Eki0 := Eki0 xor Di0; BCi1 := (Eki0 shl 21) xor (Eki0 shr (32-21)); Emo0 := Emo0 xor Do0; BCo1 := (Emo0 shl 10) xor (Emo0 shr (32-10)); Esu1 := Esu1 xor Du1; BCu1 := (Esu1 shl 7) xor (Esu1 shr (32-7)); Aba1 := BCa1 xor ((not BCe1) and BCi1) xor KeccakF1600RoundConstants_int2[round*2+3]; Abe1 := BCe1 xor ((not BCi1) and BCo1); Abi1 := BCi1 xor ((not BCo1) and BCu1); Abo1 := BCo1 xor ((not BCu1) and BCa1); Abu1 := BCu1 xor ((not BCa1) and BCe1); Ebo0 := Ebo0 xor Do0; BCa0 := (Ebo0 shl 14) xor (Ebo0 shr (32-14)); Egu0 := Egu0 xor Du0; BCe0 := (Egu0 shl 10) xor (Egu0 shr (32-10)); Eka1 := Eka1 xor Da1; BCi0 := (Eka1 shl 2) xor (Eka1 shr (32-2)); Eme1 := Eme1 xor De1; BCo0 := (Eme1 shl 23) xor (Eme1 shr (32-23)); Esi1 := Esi1 xor Di1; BCu0 := (Esi1 shl 31) xor (Esi1 shr (32-31)); Aga0 := BCa0 xor ((not BCe0) and BCi0); Age0 := BCe0 xor ((not BCi0) and BCo0); Agi0 := BCi0 xor ((not BCo0) and BCu0); Ago0 := BCo0 xor ((not BCu0) and BCa0); Agu0 := BCu0 xor ((not BCa0) and BCe0); Ebo1 := Ebo1 xor Do1; BCa1 := (Ebo1 shl 14) xor (Ebo1 shr (32-14)); Egu1 := Egu1 xor Du1; BCe1 := (Egu1 shl 10) xor (Egu1 shr (32-10)); Eka0 := Eka0 xor Da0; BCi1 := (Eka0 shl 1) xor (Eka0 shr (32-1)); Eme0 := Eme0 xor De0; BCo1 := (Eme0 shl 22) xor (Eme0 shr (32-22)); Esi0 := Esi0 xor Di0; BCu1 := (Esi0 shl 30) xor (Esi0 shr (32-30)); Aga1 := BCa1 xor ((not BCe1) and BCi1); Age1 := BCe1 xor ((not BCi1) and BCo1); Agi1 := BCi1 xor ((not BCo1) and BCu1); Ago1 := BCo1 xor ((not BCu1) and BCa1); Agu1 := BCu1 xor ((not BCa1) and BCe1); Ebe1 := Ebe1 xor De1; BCa0 := (Ebe1 shl 1) xor (Ebe1 shr (32-1)); Egi0 := Egi0 xor Di0; BCe0 := (Egi0 shl 3) xor (Egi0 shr (32-3)); Eko1 := Eko1 xor Do1; BCi0 := (Eko1 shl 13) xor (Eko1 shr (32-13)); Emu0 := Emu0 xor Du0; BCo0 := (Emu0 shl 4) xor (Emu0 shr (32-4)); Esa0 := Esa0 xor Da0; BCu0 := (Esa0 shl 9) xor (Esa0 shr (32-9)); Aka0 := BCa0 xor ((not BCe0) and BCi0); Ake0 := BCe0 xor ((not BCi0) and BCo0); Aki0 := BCi0 xor ((not BCo0) and BCu0); Ako0 := BCo0 xor ((not BCu0) and BCa0); Aku0 := BCu0 xor ((not BCa0) and BCe0); Ebe0 := Ebe0 xor De0; BCa1 := Ebe0; Egi1 := Egi1 xor Di1; BCe1 := (Egi1 shl 3) xor (Egi1 shr (32-3)); Eko0 := Eko0 xor Do0; BCi1 := (Eko0 shl 12) xor (Eko0 shr (32-12)); Emu1 := Emu1 xor Du1; BCo1 := (Emu1 shl 4) xor (Emu1 shr (32-4)); Esa1 := Esa1 xor Da1; BCu1 := (Esa1 shl 9) xor (Esa1 shr (32-9)); Aka1 := BCa1 xor ((not BCe1) and BCi1); Ake1 := BCe1 xor ((not BCi1) and BCo1); Aki1 := BCi1 xor ((not BCo1) and BCu1); Ako1 := BCo1 xor ((not BCu1) and BCa1); Aku1 := BCu1 xor ((not BCa1) and BCe1); Ebu1 := Ebu1 xor Du1; BCa0 := (Ebu1 shl 14) xor (Ebu1 shr (32-14)); Ega0 := Ega0 xor Da0; BCe0 := (Ega0 shl 18) xor (Ega0 shr (32-18)); Eke0 := Eke0 xor De0; BCi0 := (Eke0 shl 5) xor (Eke0 shr (32-5)); Emi1 := Emi1 xor Di1; BCo0 := (Emi1 shl 8) xor (Emi1 shr (32-8)); Eso0 := Eso0 xor Do0; BCu0 := (Eso0 shl 28) xor (Eso0 shr (32-28)); Ama0 := BCa0 xor ((not BCe0) and BCi0); Ame0 := BCe0 xor ((not BCi0) and BCo0); Ami0 := BCi0 xor ((not BCo0) and BCu0); Amo0 := BCo0 xor ((not BCu0) and BCa0); Amu0 := BCu0 xor ((not BCa0) and BCe0); Ebu0 := Ebu0 xor Du0; BCa1 := (Ebu0 shl 13) xor (Ebu0 shr (32-13)); Ega1 := Ega1 xor Da1; BCe1 := (Ega1 shl 18) xor (Ega1 shr (32-18)); Eke1 := Eke1 xor De1; BCi1 := (Eke1 shl 5) xor (Eke1 shr (32-5)); Emi0 := Emi0 xor Di0; BCo1 := (Emi0 shl 7) xor (Emi0 shr (32-7)); Eso1 := Eso1 xor Do1; BCu1 := (Eso1 shl 28) xor (Eso1 shr (32-28)); Ama1 := BCa1 xor ((not BCe1) and BCi1); Ame1 := BCe1 xor ((not BCi1) and BCo1); Ami1 := BCi1 xor ((not BCo1) and BCu1); Amo1 := BCo1 xor ((not BCu1) and BCa1); Amu1 := BCu1 xor ((not BCa1) and BCe1); Ebi0 := Ebi0 xor Di0; BCa0 := (Ebi0 shl 31) xor (Ebi0 shr (32-31)); Ego1 := Ego1 xor Do1; BCe0 := (Ego1 shl 28) xor (Ego1 shr (32-28)); Eku1 := Eku1 xor Du1; BCi0 := (Eku1 shl 20) xor (Eku1 shr (32-20)); Ema1 := Ema1 xor Da1; BCo0 := (Ema1 shl 21) xor (Ema1 shr (32-21)); Ese0 := Ese0 xor De0; BCu0 := (Ese0 shl 1) xor (Ese0 shr (32-1)); Asa0 := BCa0 xor ((not BCe0) and BCi0); Ase0 := BCe0 xor ((not BCi0) and BCo0); Asi0 := BCi0 xor ((not BCo0) and BCu0); Aso0 := BCo0 xor ((not BCu0) and BCa0); Asu0 := BCu0 xor ((not BCa0) and BCe0); Ebi1 := Ebi1 xor Di1; BCa1 := (Ebi1 shl 31) xor (Ebi1 shr (32-31)); Ego0 := Ego0 xor Do0; BCe1 := (Ego0 shl 27) xor (Ego0 shr (32-27)); Eku0 := Eku0 xor Du0; BCi1 := (Eku0 shl 19) xor (Eku0 shr (32-19)); Ema0 := Ema0 xor Da0; BCo1 := (Ema0 shl 20) xor (Ema0 shr (32-20)); Ese1 := Ese1 xor De1; BCu1 := (Ese1 shl 1) xor (Ese1 shr (32-1)); Asa1 := BCa1 xor ((not BCe1) and BCi1); Ase1 := BCe1 xor ((not BCi1) and BCo1); Asi1 := BCi1 xor ((not BCo1) and BCu1); Aso1 := BCo1 xor ((not BCu1) and BCa1); Asu1 := BCu1 xor ((not BCa1) and BCe1); inc(round,2); end; {copyToState(state, A)} state[ 0] := Aba0; state[ 1] := Aba1; state[ 2] := Abe0; state[ 3] := Abe1; state[ 4] := Abi0; state[ 5] := Abi1; state[ 6] := Abo0; state[ 7] := Abo1; state[ 8] := Abu0; state[ 9] := Abu1; state[10] := Aga0; state[11] := Aga1; state[12] := Age0; state[13] := Age1; state[14] := Agi0; state[15] := Agi1; state[16] := Ago0; state[17] := Ago1; state[18] := Agu0; state[19] := Agu1; state[20] := Aka0; state[21] := Aka1; state[22] := Ake0; state[23] := Ake1; state[24] := Aki0; state[25] := Aki1; state[26] := Ako0; state[27] := Ako1; state[28] := Aku0; state[29] := Aku1; state[30] := Ama0; state[31] := Ama1; state[32] := Ame0; state[33] := Ame1; state[34] := Ami0; state[35] := Ami1; state[36] := Amo0; state[37] := Amo1; state[38] := Amu0; state[39] := Amu1; state[40] := Asa0; state[41] := Asa1; state[42] := Ase0; state[43] := Ase1; state[44] := Asi0; state[45] := Asi1; state[46] := Aso0; state[47] := Aso1; state[48] := Asu0; state[49] := Asu1; end; {---------------------------------------------------------------------------} procedure extractFromState(outp: pointer; const state: TState_L; laneCount: integer); var pI, pS: PLongint; i: integer; t,x0,x1: longint; const xFFFF0000 = longint($FFFF0000); {Keep D9+ happy} begin {Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002} pI := outp; pS := @state[0]; for i:=laneCount-1 downto 0 do begin x0 := pS^; inc(Ptr2Inc(pS),sizeof(pS^)); x1 := pS^; inc(Ptr2Inc(pS),sizeof(pS^)); t := (x0 and $0000FFFF) or (x1 shl 16); x1 := (x0 shr 16) or (x1 and xFFFF0000); x0 := t; t := (x0 xor (x0 shr 8)) and $0000FF00; x0 := x0 xor t xor (t shl 8); t := (x0 xor (x0 shr 4)) and $00F000F0; x0 := x0 xor t xor (t shl 4); t := (x0 xor (x0 shr 2)) and $0C0C0C0C; x0 := x0 xor t xor (t shl 2); t := (x0 xor (x0 shr 1)) and $22222222; x0 := x0 xor t xor (t shl 1); t := (x1 xor (x1 shr 8)) and $0000FF00; x1 := x1 xor t xor (t shl 8); t := (x1 xor (x1 shr 4)) and $00F000F0; x1 := x1 xor t xor (t shl 4); t := (x1 xor (x1 shr 2)) and $0C0C0C0C; x1 := x1 xor t xor (t shl 2); t := (x1 xor (x1 shr 1)) and $22222222; x1 := x1 xor t xor (t shl 1); pI^:= x0; inc(Ptr2Inc(pI),sizeof(pI^)); pI^:= x1; inc(Ptr2Inc(pI),sizeof(pI^)); end; end; {---------------------------------------------------------------------------} procedure xorIntoState(var state: TState_L; inp: pointer; laneCount: integer); {-Include input message data bits into the sponge state} var t,x0,x1: longint; pI,pS: PLongint; i: integer; const xFFFF0000 = longint($FFFF0000); {Keep D9+ happy} begin {Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002} pI := inp; pS := @state[0]; for i:=laneCount-1 downto 0 do begin x0 := pI^; inc(Ptr2Inc(pI),sizeof(pI^)); t := (x0 xor (x0 shr 1)) and $22222222; x0 := x0 xor t xor (t shl 1); t := (x0 xor (x0 shr 2)) and $0C0C0C0C; x0 := x0 xor t xor (t shl 2); t := (x0 xor (x0 shr 4)) and $00F000F0; x0 := x0 xor t xor (t shl 4); t := (x0 xor (x0 shr 8)) and $0000FF00; x0 := x0 xor t xor (t shl 8); x1 := pI^; inc(Ptr2Inc(pI),sizeof(pI^)); t := (x1 xor (x1 shr 1)) and $22222222; x1 := x1 xor t xor (t shl 1); t := (x1 xor (x1 shr 2)) and $0C0C0C0C; x1 := x1 xor t xor (t shl 2); t := (x1 xor (x1 shr 4)) and $00F000F0; x1 := x1 xor t xor (t shl 4); t := (x1 xor (x1 shr 8)) and $0000FF00; x1 := x1 xor t xor (t shl 8); pS^ := pS^ xor ((x0 and $0000FFFF) or (x1 shl 16)); inc(Ptr2Inc(pS),sizeof(pS^)); pS^ := pS^ xor ((x0 shr 16) or (x1 and xFFFF0000)); inc(Ptr2Inc(pS),sizeof(pS^)); end; end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/kdf.pas�����������������������������������������0000644�0001750�0000144�00000037136�15104114162�022722� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit kdf; {(Password Based) Key Derivation Functions} interface (************************************************************************* DESCRIPTION : (Password Based) Key Derivation Functions REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18, FPC, VP, WDOSX EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : http://tools.ietf.org/html/rfc2898 http://tools.ietf.org/html/rfc3211 [includes test vectors] http://tools.ietf.org/html/rfc5869 [includes test vectors] http://www.di-mgt.com.au/cryptoKDFs.html [includes test vectors] Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 17.01.06 W.Ehrhardt Initial version based on keyderiv 1.29 0.11 17.01.06 we error codes 0.12 23.01.06 we new names: unit pb_kdf, functions kdf2/s 0.13 22.06.08 we Make IncMSB work with FPC -dDebug 0.14 12.07.08 we Rename old kdf2 to pbkdf2, unit kdf 0.15 12.07.08 we pbkdf1 0.16 12.07.08 we kdf1, kdf2, kdf3, mgf1 0.17 12.11.08 we uses BTypes, Ptr2Inc and/or Str255 0.18 25.04.09 we updated RFC URL(s) 0.19 19.08.10 we kdf_err_nil_input 0.20 20.08.10 we hkdf/hkdfs 0.21 15.08.14 we pbkdf2 functions with longint sLen, dkLen 0.22 16.08.15 we Removed $ifdef DLL / stdcall **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2006-2015 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$i STD.INC} uses BTypes,Hash,HMAC; const kdf_err_nil_pointer = $0001; {phash descriptor is nil} kdf_err_digestlen = $0002; {digest length from descriptor is zero} kdf_err_invalid_dKLen = $0003; {dKLen greater than hash digest length} kdf_err_nil_input = $0004; {input nil pointer and non-zero length} function kdf1(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} function kdf2(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} function kdf3(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} function mgf1(phash: PHashDesc; pSeed: pointer; sLen: word; var Mask; mLen: word): integer; {-Derive Mask from seed, hash function from phash, Mask Generation Function 1 for PKCS #1} function pbkdf1(phash: PHashDesc; pPW: pointer; pLen: word; salt: pointer; C: longint; var DK; dkLen: word): integer; {-Derive key DK from password pPW using 8 byte salt and iteration count C, uses hash function from phash} function pbkdf1s(phash: PHashDesc; sPW: Str255; salt: pointer; C: longint; var DK; dkLen: word): integer; {-Derive key DK from password string sPW using 8 byte salt and iteration count C, uses hash function from phash} function pbkdf2(phash: PHashDesc; pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; {-Derive key DK from password pPW using salt and iteration count C, uses hash function from phash} function pbkdf2s(phash: PHashDesc; sPW: Str255; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; {-Derive key DK from password string sPW using salt and iteration count C, uses hash function from phash} function hkdf(phash: PHashDesc; {Descriptor of the Hash to use} pIKM: pointer; L_IKM: word; {input key material: addr/length} salt: pointer; L_salt: word; {optional salt; can be nil: see below } info: pointer; L_info: word; {optional context/application specific information} var DK; dkLen: word): integer; {output key material: addr/length} {-Derive key DK from input key material and salt/info, uses hash function from phash} { If salt=nil then phash^.HDigestLen binary zeros will be used as salt.} function hkdfs(phash: PHashDesc; sIKM: Str255; {Hash; input key material as string} salt: pointer; L_salt: word; {optional salt; can be nil: see below } info: pointer; L_info: word; {optional context/application specific information} var DK; dkLen: word): integer; {output key material: addr/length} {-Derive key DK from input key material and salt/info, uses hash function from phash} { If salt=nil then phash^.HDigestLen binary zeros will be used as salt.} implementation {helper type} type TMSBA = array[0..3] of byte; {---------------------------------------------------------------------------} procedure IncMSB(var CTR: TMSBA); {-Increment CTR[3]..CTR[0], i.e. 32 Bit MSB counter} var j: integer; begin for j:=3 downto 0 do begin if CTR[j]=$FF then CTR[j] := 0 else begin inc(CTR[j]); exit; end; end; end; {---------------------------------------------------------------------------} function pbkdf1(phash: PHashDesc; pPW: pointer; pLen: word; salt: pointer; C: longint; var DK; dkLen: word): integer; {-Derive key DK from password pPW using 8 byte salt and iteration count C, uses hash function from phash} var ctx: THashContext; Digest: THashDigest; hlen: word; begin if (phash=nil) or (phash^.HSig<>C_HashSig) then begin pbkdf1 := kdf_err_nil_pointer; exit; end; hLen := phash^.HDigestLen; if hLen=0 then begin pbkdf1 := kdf_err_digestlen; exit; end; if hLen<dKLen then begin pbkdf1 := kdf_err_invalid_dKLen; exit; end; if ((pPW=nil) and (pLen>0)) or (salt=nil) then begin pbkdf1 := kdf_err_nil_input; exit; end; pbkdf1 := 0; {calculate T_1 = hash(PW || salt)} with phash^ do begin HInit(ctx); HUpdateXL(ctx, pPW, pLen); HUpdateXL(ctx, salt, 8); HFinal(ctx, Digest); end; while C>1 do begin HashFullXL(phash, Digest, @Digest, hlen); dec(C); end; move(Digest, DK, dKLen); end; {---------------------------------------------------------------------------} function pbkdf1s(phash: PHashDesc; sPW: Str255; salt: pointer; C: longint; var DK; dkLen: word): integer; {-Derive key DK from password string sPW using 8 byte salt and iteration count C, uses hash function from phash} begin pbkdf1s := pbkdf1(phash, @sPW[1], length(sPW), salt, C, DK, dkLen); end; {---------------------------------------------------------------------------} function pbkdf2(phash: PHashDesc; pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; {-Derive key DK from password pPW using salt and iteration count C, uses hash function from phash} var k, hLen: word; i, j, lk: longint; pDK: pByte; {pointer to DK } ii: TMSBA; {i in big endian} u, ucum: THashDigest; ctx: THMAC_Context; begin if phash=nil then begin pbkdf2 := kdf_err_nil_pointer; exit; end; if phash^.HDigestLen=0 then begin pbkdf2 := kdf_err_digestlen; exit; end; if ((pPW=nil) and (pLen>0)) or ((salt=nil) and (sLen>0)) then begin pbkdf2 := kdf_err_nil_input; exit; end; pbkdf2 := 0; hLen := phash^.HDigestLen; lk := 0; pDK := pByte(@DK); fillchar(ii, sizeof(ii), 0); for i:=1 to 1 + pred(dkLen) div hLen do begin IncMSB(ii); fillchar(ucum, sizeof(ucum),0); for j:=1 to C do begin hmac_init(ctx, phash, pPW, pLen); if j=1 then begin {U_1 = PRF(pPW, salt || ii)} hmac_updateXL(ctx, salt, sLen); hmac_updateXL(ctx, @ii, 4); end else begin {U_i = PRF(pPW, U_(i-1)} hmac_updateXL(ctx, @u, hLen); end; hmac_final(ctx, u); {update cumulative XOR U_i} for k:=0 to hLen-1 do ucum[k] := ucum[k] xor u[k]; end; {T_i = F(P,S,C,l) = ucum} for k:=0 to hLen-1 do begin {concat T_i} if lk<dkLen then begin pDK^ := ucum[k]; inc(lk); inc(Ptr2Inc(pDK)); end; end; end; end; {---------------------------------------------------------------------------} function pbkdf2s(phash: PHashDesc; sPW: Str255; salt: pointer; sLen, C: longint; var DK; dkLen: longint): integer; {-Derive key DK from password string sPW using salt and iteration count C, uses hash function from phash} begin pbkdf2s := pbkdf2(phash, @sPW[1], length(sPW), salt, sLen, C, DK, dkLen); end; {---------------------------------------------------------------------------} function kdfx(phash: PHashDesc; x: byte; Z, pOtherInfo: pointer; zLen, oLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} { Internal function for all kdf1, kdf2, kdf3, mgf1} var ctr: TMSBA; {i in big endian} ctx: THashContext; pDK: pByte; {pointer to DK } Digest: THashDigest; i, k, lk, hLen: word; begin if (phash=nil) or (phash^.HSig<>C_HashSig) then begin kdfx := kdf_err_nil_pointer; exit; end; hLen := phash^.HDigestLen; if hLen=0 then begin kdfx := kdf_err_digestlen; exit; end; if ((Z=nil) and (zLen>0)) or ((pOtherInfo=nil) and (oLen>0)) then begin kdfx := kdf_err_nil_input; exit; end; kdfx := 0; fillchar(ctr, sizeof(ctr), 0); if x=2 then IncMSB(ctr); lk := 0; pDK := pByte(@DK); for i:=1 to 1 + pred(dkLen) div hLen do begin if x=3 then begin {Hash(ctr || Z || [OtherInfo])} {x=3} phash^.HInit(ctx); phash^.HUpdateXL(ctx, @ctr, sizeof(ctr)); phash^.HUpdateXL(ctx, Z, zLen); end else begin {Hash(Z || ctr || [OtherInfo])} {x=1,2} phash^.HInit(ctx); phash^.HUpdateXL(ctx, Z, zLen); phash^.HUpdateXL(ctx, @ctr, sizeof(ctr)); end; if oLen<>0 then phash^.HUpdateXL(ctx, pOtherInfo, oLen); phash^.HFinal(ctx, Digest); for k:=0 to hLen-1 do begin {store T_i} if lk<dkLen then begin pDK^ := Digest[k]; inc(lk); inc(Ptr2Inc(pDK)); end else exit; end; IncMSB(ctr); end; end; {---------------------------------------------------------------------------} function kdf1(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} begin kdf1 := kdfx(phash, 1, Z, pOtherInfo, zLen, oiLen, DK, dkLen); end; {---------------------------------------------------------------------------} function kdf2(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} begin kdf2 := kdfx(phash, 2, Z, pOtherInfo, zLen, oiLen, DK, dkLen); end; {---------------------------------------------------------------------------} function kdf3(phash: PHashDesc; Z: pointer; zLen: word; pOtherInfo: pointer; oiLen: word; var DK; dkLen: word): integer; {-Derive key DK from shared secret Z using optional OtherInfo, hash function from phash} begin kdf3 := kdfx(phash, 3, Z, pOtherInfo, zLen, oiLen, DK, dkLen); end; {---------------------------------------------------------------------------} function mgf1(phash: PHashDesc; pSeed: pointer; sLen: word; var Mask; mLen: word): integer; {-Derive Mask from seed, hash function from phash, Mask Generation Function 1 for PKCS #1} begin mgf1 := kdfx(phash, 1, pSeed, nil, sLen, 0, Mask, mLen); end; {---------------------------------------------------------------------------} function hkdf(phash: PHashDesc; {Descriptor of the Hash to use} pIKM: pointer; L_IKM: word; {input key material: addr/length} salt: pointer; L_salt: word; {optional salt; can be nil: see below } info: pointer; L_info: word; {optional context/application specific information} var DK; dkLen: word): integer; {output key material: addr/length} {-Derive key DK from input key material and salt/info, uses hash function from phash} { If salt=nil then phash^.HDigestLen binary zeros will be used as salt.} var PRK,TI: THashDigest; ctx: THMAC_Context; i,k,hLen,lt,lk: word; ctr: byte; pDK: pByte; begin {Ref: (IETF) rfc5869 - H. Krawczyk, P. Eronen, May 2010} {HMAC-based Extract-and-Expand Key Derivation Function (HKDF)} {Check input parameters} if (phash=nil) or (phash^.HSig<>C_HashSig) then begin hkdf := kdf_err_nil_pointer; exit; end; if ((pIKM=nil) and (L_IKM>0)) or ((info=nil) and (L_info>0)) then begin hkdf := kdf_err_nil_input; exit; end; hLen := phash^.HDigestLen; if hLen=0 then begin hkdf := kdf_err_digestlen; exit; end; {Stage 1: Extract} hkdf := 0; {if salt=nil then hLen binary zeros are used} if salt=nil then begin fillchar(TI, sizeof(TI), 0); hmac_init(ctx, phash, @TI, hLen); end else hmac_init(ctx, phash, salt, L_salt); hmac_update(ctx, pIKM, L_IKM); hmac_final(ctx, PRK); {Stage 2: Expand} lt := 0; lk := 0; ctr := 1; pDK := pByte(@DK); for i:=1 to 1 + pred(dkLen) div hLen do begin {calculate T_i from T_(i-1), info, and ctr} hmac_init(ctx, phash, @PRK, hLen); hmac_update(ctx, @TI, lt); hmac_update(ctx, info, L_info); hmac_update(ctx, @ctr, 1); hmac_final(ctx, TI); for k:=0 to hLen-1 do begin {store T_i} if lk<dkLen then begin pDK^ := TI[k]; inc(lk); inc(Ptr2Inc(pDK)); end else exit; end; lt := hLen; inc(ctr); end; end; {---------------------------------------------------------------------------} function hkdfs(phash: PHashDesc; sIKM: Str255; {Hash; input key material as string} salt: pointer; L_salt: word; {optional salt; can be nil: see below } info: pointer; L_info: word; {optional context/application specific information} var DK; dkLen: word): integer; {output key material: addr/length} {-Derive key DK from input key material and salt/info, uses hash function from phash} { If salt=nil then phash^.HDigestLen binary zeros will be used as salt.} begin hkdfs := hkdf(phash,@sIKM[1],length(sIKM),salt,L_salt,info,L_info,DK,dkLen); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/hmac.pas����������������������������������������0000644�0001750�0000144�00000015234�15104114162�023061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit HMAC; {General HMAC unit} interface (************************************************************************* DESCRIPTION : General HMAC (hash message authentication) unit REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18, FPC, VP EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : - HMAC: Keyed-Hashing for Message Authentication (http://tools.ietf.org/html/rfc2104) - The Keyed-Hash Message Authentication Code (HMAC) http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf - US Secure Hash Algorithms (SHA and HMAC-SHA) (http://tools.ietf.org/html/rfc4634) REMARKS : Trailing bits in SHA3-LSB format must be converted to MSB Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 15.01.06 W.Ehrhardt Initial version based on HMACWHIR 0.11 07.05.08 we hmac_final_bits 0.12 12.11.08 we Uses BTypes, THMAC_string replaced by Str255 0.13 25.04.09 we updated RFC URL(s) 0.14 08.08.15 we type of hmacbuf changed to THMacBuffer 0.15 16.08.15 we Removed $ifdef DLL / stdcall **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2006-2015 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) uses BTypes,hash; type THMAC_Context = record hashctx: THashContext; hmacbuf: THMacBuffer; phashd : PHashDesc; end; procedure hmac_init(var ctx: THMAC_Context; phash: PHashDesc; key: pointer; klen: word); {-initialize HMAC context with hash descr phash^ and key} procedure hmac_inits(var ctx: THMAC_Context; phash: PHashDesc; skey: Str255); {-initialize HMAC context with hash descr phash^ and skey} procedure hmac_update(var ctx: THMAC_Context; data: pointer; dlen: word); {-HMAC data input, may be called more than once} procedure hmac_updateXL(var ctx: THMAC_Context; data: pointer; dlen: longint); {-HMAC data input, may be called more than once} procedure hmac_final(var ctx: THMAC_Context; var mac: THashDigest); {-end data input, calculate HMAC digest} procedure hmac_final_bits(var ctx: THMAC_Context; var mac: THashDigest; BData: byte; bitlen: integer); {-end data input with bitlen bits (MSB format) from BData, calculate HMAC digest} implementation {---------------------------------------------------------------------------} procedure hmac_init(var ctx: THMAC_Context; phash: PHashDesc; key: pointer; klen: word); {-initialize HMAC context with hash descr phash^ and key} var i,lk,bl: word; kb: THashDigest; begin fillchar(ctx, sizeof(ctx),0); if phash<>nil then with ctx do begin phashd := phash; lk := klen; bl := phash^.HBlockLen; if lk > bl then begin {Hash if key length > block length} HashFullXL(phash, kb, key, lk); lk := phash^.HDigestLen; move(kb, hmacbuf, lk); end else move(key^, hmacbuf, lk); {XOR with ipad} for i:=0 to bl-1 do hmacbuf[i] := hmacbuf[i] xor $36; {start inner hash} phash^.HInit(hashctx); phash^.HUpdateXL(hashctx, @hmacbuf, bl); end; end; {---------------------------------------------------------------------------} procedure hmac_inits(var ctx: THMAC_Context; phash: PHashDesc; skey: Str255); {-initialize HMAC context with hash descr phash^ and skey} begin if phash<>nil then hmac_init(ctx, phash, @skey[1], length(skey)); end; {---------------------------------------------------------------------------} procedure hmac_update(var ctx: THMAC_Context; data: pointer; dlen: word); {-HMAC data input, may be called more than once} begin with ctx do begin if phashd<>nil then phashd^.HUpdateXL(hashctx, data, dlen); end; end; {---------------------------------------------------------------------------} procedure hmac_updateXL(var ctx: THMAC_Context; data: pointer; dlen: longint); {-HMAC data input, may be called more than once} begin with ctx do begin if phashd<>nil then phashd^.HUpdateXL(hashctx, data, dlen); end; end; {---------------------------------------------------------------------------} procedure hmac_final(var ctx: THMAC_Context; var mac: THashDigest); {-end data input, calculate HMAC digest} var i: integer; bl: word; begin with ctx do if phashd<>nil then begin bl := phashd^.HBlockLen; {complete inner hash} phashd^.HFinal(hashctx, mac); {remove ipad from buf, XOR opad} for i:=0 to bl-1 do hmacbuf[i] := hmacbuf[i] xor ($36 xor $5c); {outer hash} phashd^.HInit(hashctx); phashd^.HUpdateXL(hashctx, @hmacbuf, bl); phashd^.HUpdateXL(hashctx, @mac, phashd^.HDigestLen); phashd^.HFinal(hashctx, mac); end; end; {---------------------------------------------------------------------------} procedure hmac_final_bits(var ctx: THMAC_Context; var mac: THashDigest; BData: byte; bitlen: integer); {-end data input with bitlen bits (MSB format) from BData, calculate HMAC digest} var i: integer; bl: word; begin with ctx do if phashd<>nil then begin bl := phashd^.HBlockLen; {complete inner hash} phashd^.HFinalBit(hashctx, mac, BData, bitlen); {remove ipad from buf, XOR opad} for i:=0 to bl-1 do hmacbuf[i] := hmacbuf[i] xor ($36 xor $5c); {outer hash} phashd^.HInit(hashctx); phashd^.HUpdateXL(hashctx, @hmacbuf, bl); phashd^.HUpdateXL(hashctx, @mac, phashd^.HDigestLen); phashd^.HFinal(hashctx, mac); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/hash.pas����������������������������������������0000644�0001750�0000144�00000037640�15104114162�023101� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit Hash; {General Hash Unit: This unit defines the common types, functions, and procedures. Via Hash descriptors and corresponding pointers, algorithms can be searched by name or by ID. More important: all supported algorithms can be used in the HMAC and KDF constructions.} interface (************************************************************************* DESCRIPTION : General hash unit: defines Algo IDs, digest types, etc REQUIREMENTS : TP5-7, D1-D7/D9-D10/D12/D17-D18/D25S, FPC, VP EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : --- REMARK : THashContext does not directly map the structure of the context for SHA3 algorithms, a typecast with TSHA3State from unit SHA3 should be used to access the fields. Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 15.01.06 W.Ehrhardt Initial version 0.11 15.01.06 we FindHash_by_ID, $ifdef DLL: stdcall 0.12 16.01.06 we FindHash_by_Name 0.13 18.01.06 we Descriptor fields HAlgNum, HSig 0.14 22.01.06 we Removed HSelfTest from descriptor 0.14 31.01.06 we RIPEMD-160, C_MinHash, C_MaxHash 0.15 11.02.06 we Fields: HDSize, HVersion, HPtrOID, HLenOID 0.16 02.08.06 we Packed arrays 0.17 07.08.06 we $ifdef BIT32: (const fname: shortstring...) 0.18 07.08.06 we C_HashVers = $00010002 0.19 10.02.07 we HashFile: no eof, XL and filemode via $ifdef 0.20 18.02.07 we MD4, C_HashVers = $00010003 0.21 22.02.07 we POID_Vec=^TOID_Vec, typed HPtrOID 0.22 24.02.07 we added some checks for HSig=C_HashSig 0.23 04.10.07 we THashContext.Index now longint 0.24 02.05.08 we type PHashDigest, function HashSameDigest 0.25 04.05.08 we BitAPI_Mask, BitAPI_PBit 0.26 05.05.08 we Descriptor with HFinalBit, C_HashVers=$00010004 0.27 20.05.08 we RMD160 as alias for RIPEMD160 0.28 12.11.08 we uses BTypes and Str255 0.29 19.07.09 we D12 fix: assign with typecast string(fname) 0.30 08.03.12 we SHA512/224 and SHA512/256, C_HashVers=$00010005 0.31 10.03.12 we HashFile: {$ifndef BIT16} instead of {$ifdef WIN32} 0.32 08.08.18 we New enlarged padded context, _SHA3_224 .. _SHA3_512 0.33 08.08.18 we THMacBuffer, assert HASHCTXSIZE 0.34 16.08.15 we Removed $ifdef DLL / stdcall 0.35 15.05.17 we Changes for Blake2s 0.36 16.05.17 we MaxOIDLen = 11 and MaxC_HashVers = $00020002 0.37 03.11.17 we TBlake2B_384/512Digest **************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2006-2015 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$i STD.INC} uses BTypes; type THashAlgorithm = (_MD4, _MD5, _RIPEMD160, _SHA1, _SHA224, _SHA256, _SHA384, _SHA512, _Whirlpool, _SHA512_224, _SHA512_256, _SHA3_224, _SHA3_256, _SHA3_384, _SHA3_512, _Blake2S_224, _Blake2S_256, _Blake2B_384, _Blake2B_512); {Supported hash algorithms} const _RMD160 = _RIPEMD160; {Alias} const MaxBlockLen = 128; {Max. block length (buffer size), multiple of 4} MaxDigestLen = 64; {Max. length of hash digest} MaxStateLen = 16; {Max. size of internal state} MaxOIDLen = 11; {Current max. OID length} C_HashSig = $3D7A; {Signature for Hash descriptor} C_HashVers = $00020002; {Version of Hash definitions} C_MinHash = _MD4; {Lowest hash in THashAlgorithm} C_MaxHash = _Blake2B_512;{Highest hash in THashAlgorithm} type THashState = packed array[0..MaxStateLen-1] of longint; {Internal state} THashBuffer = packed array[0..MaxBlockLen-1] of byte; {hash buffer block} THashDigest = packed array[0..MaxDigestLen-1] of byte; {hash digest} PHashDigest = ^THashDigest; {pointer to hash digest} THashBuf32 = packed array[0..MaxBlockLen div 4 -1] of longint; {type cast helper} THashDig32 = packed array[0..MaxDigestLen div 4 -1] of longint; {type cast helper} THMacBuffer = packed array[0..143] of byte; {hmac buffer block} const HASHCTXSIZE = 448; {Common size of enlarged padded old context} {and new padded SHA3/SHAKE/Keccak context } type THashContext = packed record Hash : THashState; {Working hash} MLen : packed array[0..3] of longint; {max 128 bit msg length} Buffer: THashBuffer; {Block buffer} Index : longint; {Index in buffer} Fill2 : packed array[213..HASHCTXSIZE] of byte; end; type TMD4Digest = packed array[0..15] of byte; {MD4 digest } TMD5Digest = packed array[0..15] of byte; {MD5 digest } TRMD160Digest = packed array[0..19] of byte; {RMD160 digest } TSHA1Digest = packed array[0..19] of byte; {SHA1 digest } TSHA224Digest = packed array[0..27] of byte; {SHA224 digest } TSHA256Digest = packed array[0..31] of byte; {SHA256 digest } TSHA384Digest = packed array[0..47] of byte; {SHA384 digest } TSHA512Digest = packed array[0..63] of byte; {SHA512 digest } TSHA5_224Digest = packed array[0..27] of byte; {SHA512/224 digest} TSHA5_256Digest = packed array[0..31] of byte; {SHA512/256 digest} TWhirlDigest = packed array[0..63] of byte; {Whirlpool digest } TSHA3_224Digest = packed array[0..27] of byte; {SHA3_224 digest } TSHA3_256Digest = packed array[0..31] of byte; {SHA3_256 digest } TSHA3_384Digest = packed array[0..47] of byte; {SHA3_384 digest } TSHA3_512Digest = packed array[0..63] of byte; {SHA3_512 digest } TBlake2S_224Digest = packed array[0..27] of byte; {Blake2S digest } TBlake2S_256Digest = packed array[0..31] of byte; {Blake2S digest } TBlake2B_384Digest = packed array[0..47] of byte; {Blake2B-384 digest} TBlake2B_512Digest = packed array[0..63] of byte; {Blake2B-512 digest} type HashInitProc = procedure(var Context: THashContext); {-initialize context} HashUpdateXLProc = procedure(var Context: THashContext; Msg: pointer; Len: longint); {-update context with Msg data} HashFinalProc = procedure(var Context: THashContext; var Digest: THashDigest); {-finalize calculation, clear context} HashFinalBitProc = procedure(var Context: THashContext; var Digest: THashDigest; BData: byte; bitlen: integer); {-finalize calculation with bitlen bits from BData, clear context} type TOID_Vec = packed array[1..MaxOIDLen] of longint; {OID vector} POID_Vec = ^TOID_Vec; {ptr to OID vector} type THashName = string[19]; {Hash algo name type } PHashDesc = ^THashDesc; {Ptr to descriptor } THashDesc = packed record HSig : word; {Signature=C_HashSig } HDSize : word; {sizeof(THashDesc) } HDVersion : longint; {THashDesc Version } HBlockLen : word; {Blocklength of hash, rate div 8 for SHA3} HDigestlen: word; {Digestlength of hash} HInit : HashInitProc; {Init procedure } HFinal : HashFinalProc; {Final procedure } HUpdateXL : HashUpdateXLProc; {Update procedure } HAlgNum : longint; {Algo ID, longint avoids problems with enum size/DLL} HName : THashName; {Name of hash algo } HPtrOID : POID_Vec; {Pointer to OID vec } HLenOID : word; {Length of OID vec } HFill : word; HFinalBit : HashFinalBitProc; {Bit-API Final proc } HReserved : packed array[0..19] of byte; end; const BitAPI_Mask: array[0..7] of byte = ($00,$80,$C0,$E0,$F0,$F8,$FC,$FE); BitAPI_PBit: array[0..7] of byte = ($80,$40,$20,$10,$08,$04,$02,$01); procedure RegisterHash(AlgId: THashAlgorithm; PHash: PHashDesc); {-Register algorithm with AlgID and Hash descriptor PHash^} function FindHash_by_ID(AlgoID: THashAlgorithm): PHashDesc; {-Return PHashDesc of AlgoID, nil if not found/registered} function FindHash_by_Name(AlgoName: THashName): PHashDesc; {-Return PHashDesc of Algo with AlgoName, nil if not found/registered} procedure HashFile({$ifdef CONST} const {$endif} fname: Str255; PHash: PHashDesc; var Digest: THashDigest; var buf; bsize: word; var Err: word); {-Calulate hash digest of file, buf: buffer with at least bsize bytes} procedure HashUpdate(PHash: PHashDesc; var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} procedure HashFullXL(PHash: PHashDesc; var Digest: THashDigest; Msg: pointer; Len: longint); {-Calulate hash digest of Msg with init/update/final} procedure HashFull(PHash: PHashDesc; var Digest: THashDigest; Msg: pointer; Len: word); {-Calulate hash digest of Msg with init/update/final} function HashSameDigest(PHash: PHashDesc; PD1, PD2: PHashDigest): boolean; {-Return true if same digests, using HDigestlen of PHash} implementation var PHashVec : array[THashAlgorithm] of PHashDesc; {Hash descriptor pointers of all defined hash algorithms} {---------------------------------------------------------------------------} procedure RegisterHash(AlgId: THashAlgorithm; PHash: PHashDesc); {-Register algorithm with AlgID and Hash descriptor PHash^} begin if (PHash<>nil) and (PHash^.HAlgNum=longint(AlgId)) and (PHash^.HSig=C_HashSig) and (PHash^.HDVersion=C_HashVers) and (PHash^.HDSize=sizeof(THashDesc)) then PHashVec[AlgId] := PHash; end; {---------------------------------------------------------------------------} function FindHash_by_ID(AlgoID: THashAlgorithm): PHashDesc; {-Return PHashDesc of AlgoID, nil if not found/registered} var p: PHashDesc; A: longint; begin A := longint(AlgoID); FindHash_by_ID := nil; if (A>=ord(C_MinHash)) and (A<=ord(C_MaxHash)) then begin p := PHashVec[AlgoID]; if (p<>nil) and (p^.HSig=C_HashSig) and (p^.HAlgNum=A) then FindHash_by_ID := p; end; end; {---------------------------------------------------------------------------} function FindHash_by_Name(AlgoName: THashName): PHashDesc; {-Return PHashDesc of Algo with AlgoName, nil if not found/registered} var algo : THashAlgorithm; phash: PHashDesc; function StrUpcase(s: THashName): THashName; {-Upcase for strings} var i: integer; begin for i:=1 to length(s) do s[i] := upcase(s[i]); StrUpcase := s; end; begin AlgoName := StrUpcase(Algoname); {Transform RMD160 alias to standard name} if AlgoName='RMD160' then AlgoName:='RIPEMD160'; FindHash_by_Name := nil; for algo := C_MinHash to C_MaxHash do begin phash := PHashVec[algo]; if (phash<>nil) and (AlgoName=StrUpcase(phash^.HName)) and (phash^.HSig=C_HashSig) and (phash^.HAlgNum=longint(algo)) then begin FindHash_by_Name := phash; exit; end; end; end; {---------------------------------------------------------------------------} procedure HashUpdate(PHash: PHashDesc; var Context: THashContext; Msg: pointer; Len: word); {-update context with Msg data} begin if PHash<>nil then with PHash^ do begin if HSig=C_HashSig then HUpdateXL(Context, Msg, Len); end; end; {---------------------------------------------------------------------------} procedure HashFullXL(PHash: PHashDesc; var Digest: THashDigest; Msg: pointer; Len: longint); {-Calulate hash digest of Msg with init/update/final} var Context: THashContext; begin if PHash<>nil then with PHash^ do begin if HSig=C_HashSig then begin HInit(Context); HUpdateXL(Context, Msg, Len); HFinal(Context, Digest); end; end; end; {---------------------------------------------------------------------------} procedure HashFull(PHash: PHashDesc; var Digest: THashDigest; Msg: pointer; Len: word); {-Calulate hash digest of Msg with init/update/final} begin {test PHash<>nil in HashFullXL} HashFullXL(PHash, Digest, Msg, Len); end; {---------------------------------------------------------------------------} function HashSameDigest(PHash: PHashDesc; PD1, PD2: PHashDigest): boolean; {-Return true if same digests, using HDigestlen of PHash} var i: integer; begin HashSameDigest := false; if PHash<>nil then with PHash^ do begin if (HSig=C_HashSig) and (HDigestlen>0) then begin for i:=0 to pred(HDigestlen) do begin if PD1^[i]<>PD2^[i] then exit; end; HashSameDigest := true; end; end; end; {$i-} {Force I-} {---------------------------------------------------------------------------} procedure HashFile({$ifdef CONST} const {$endif} fname: Str255; PHash: PHashDesc; var Digest: THashDigest; var buf; bsize: word; var Err: word); {-Calulate hash digest of file, buf: buffer with at least bsize bytes} var {$ifdef VirtualPascal} fms: word; {$else} fms: byte; {$endif} {$ifndef BIT16} L: longint; {$else} L: word; {$endif} var Context: THashContext; f: file; begin if (PHash=nil) or (Phash^.HSig<>C_HashSig) then begin Err := 204; {Invalid pointer} exit; end; fms := FileMode; {$ifdef VirtualPascal} FileMode := $40; {open_access_ReadOnly or open_share_DenyNone;} {$else} FileMode := 0; {$endif} system.assign(f,{$ifdef D12Plus} string {$endif} (fname)); system.reset(f,1); Err := IOResult; FileMode := fms; if Err<>0 then exit; with PHash^ do begin HInit(Context); L := bsize; while (Err=0) and (L=bsize) do begin system.blockread(f,buf,bsize,L); Err := IOResult; HUpdateXL(Context, @buf, L); end; system.close(f); if IOResult=0 then {}; HFinal(Context, Digest); end; end; begin {$ifdef HAS_ASSERT} assert(sizeof(THashContext)=HASHCTXSIZE , '** Invalid sizeof(THashContext)'); {$else} if sizeof(THashContext)<>HASHCTXSIZE then RunError(227); {$endif} {Paranoia: initialize all descriptor pointers to nil (should} {be done by compiler/linker because array is in global data)} fillchar(PHashVec,sizeof(PHashVec),0); end. ������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/doublecmd.diff����������������������������������0000644�0001750�0000144�00000006435�15104114162�024237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: kperm_64.inc =================================================================== --- kperm_64.inc (revision 6895) +++ kperm_64.inc (working copy) @@ -33,10 +33,14 @@ {---------------------------------------------------------------------------} +{$IFDEF FPC} + {$MACRO ON} {$DEFINE RotL:= RolQWord} +{$ELSE} function RotL(x: u64bit; c: integer): u64bit; {$ifdef HAS_INLINE} inline; {$endif} begin RotL := (x shl c) or (x shr (64-c)); end; +{$ENDIF} {---------------------------------------------------------------------------} Index: sha1.pas =================================================================== --- sha1.pas +++ sha1.pas @@ -106,7 +106,7 @@ {$i STD.INC} -{$ifdef BIT64} +{$ifndef CPUI386} {$ifndef PurePascal} {$define PurePascal} {$endif} Index: sha3.pas =================================================================== --- sha3.pas (revision 6895) +++ sha3.pas (working copy) @@ -6,6 +6,15 @@ {$i STD.INC} +{$ifdef FPC} + {$ifdef CPUI386} + {$define USE_MMXCODE} + {$endif} + {$ifdef CPU64} + {$define USE_64BITCODE} + {$endif} +{$endif} + {.$define USE_64BITCODE} {Use 64-bit for Keccak permutation} {.$define USE_MMXCODE } {Use MMX for Keccak permutation, contributed by Eric Grange} {.$define USE_MMX_AKP } {Use MMX for Keccak permutation, contributed by Anna Kaliszewicz / payl} Index: scrypt.pas =================================================================== --- scrypt.pas (revision 7740) +++ scrypt.pas (working copy) @@ -90,7 +90,7 @@ implementation uses - sha256; {Register SHA256 for HMAC-SHA256} + SHA3_512; {Register SHA3_512 for HMAC_SHA3_512} type TLA16 = array[0..15] of longint; @@ -361,14 +361,14 @@ {---------------------------------------------------------------------------} -function pbkfd2_hmac_sha256(pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; - {-Derive key DK from password pPW using salt and iteration count C using (hmac-)sha256} +function pbkdf2_hmac_sha3_512(pPW: pointer; pLen: word; salt: pointer; sLen,C: longint; var DK; dkLen: longint): integer; + {-Derive key DK from password pPW using salt and iteration count C using hmac_sha3_512} var phash: PHashDesc; begin - {Note: pbkdf2 will return error indicator phash=nil if _SHA256 is not found!} - phash := FindHash_by_ID(_SHA256); - pbkfd2_hmac_sha256 := pbkdf2(phash,pPW,pLen,salt,sLen,C,DK,dkLen); + {Note: pbkdf2 will return error indicator phash=nil if _SHA3_512 is not found!} + phash := FindHash_by_ID(_SHA3_512); + pbkdf2_hmac_sha3_512 := pbkdf2(phash,pPW,pLen,salt,sLen,C,DK,dkLen); end; @@ -418,7 +418,7 @@ pV := malloc(sV); pXY := malloc(sXY); if (pB<>nil) and (pV<>nil) and (pXY<>nil) then begin - err := pbkfd2_hmac_sha256(pPW, pLen, salt, sLen, 1, pB^, sB); + err := pbkdf2_hmac_sha3_512(pPW, pLen, salt, sLen, 1, pB^, sB); if err=0 then begin pw := pB; for i:=0 to p-1 do begin @@ -425,7 +425,7 @@ smix(pw, r, N, pV, pXY); inc(Ptr2Inc(pw), r*128); end; - err := pbkfd2_hmac_sha256(pPW, pLen, pB, sB, 1, DK, dKlen); + err := pbkdf2_hmac_sha3_512(pPW, pLen, pB, sB, 1, DK, dKlen); end; scrypt_kdf := err; end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/btypes.pas��������������������������������������0000644�0001750�0000144�00000013445�15104114162�023461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit BTypes; {Common basic type definitions} interface {$i STD.INC} (************************************************************************* DESCRIPTION : Common basic type definitions REQUIREMENTS : TP5-7, D1-D7/D9-D12/D17-D22, FPC, VP, WDOSX EXTERNAL DATA : --- MEMORY USAGE : --- DISPLAY MODE : --- REFERENCES : --- Version Date Author Modification ------- -------- ------- ------------------------------------------ 0.10 15.04.06 W.Ehrhardt Initial version 0.11 15.04.06 we With $ifdef HAS_XTYPES 0.12 15.04.06 we FPC1_0 and pShortInt 0.13 09.09.08 we UInt32 = cardinal $ifdef HAS_CARD32 0.14 12.11.08 we Str127, Ptr2Inc 0.15 14.11.08 we BString, char8 0.16 21.11.08 we __P2I: type cast pointer to integer for masking etc 0.17 02.12.08 we Use pchar and pAnsiChar for pchar8 if possible 0.18 27.02.09 we pBoolean 0.19 14.02.12 we extended = double $ifdef SIMULATE_EXT64 0.20 06.05.14 we extended = double $ifdef SIMULATE_EXT64 OR EXT64 0.21 25.04.15 we With $ifdef HAS_INTXX, HAS_PINTXX *************************************************************************) (*------------------------------------------------------------------------- (C) Copyright 2006-2015 Wolfgang Ehrhardt This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------------------------*) {$ifdef BIT16} type Int8 = ShortInt; { 8 bit signed integer} Int16 = Integer; {16 bit signed integer} Int32 = Longint; {32 bit signed integer} UInt8 = Byte; { 8 bit unsigned integer} UInt16 = Word; {16 bit unsigned integer} UInt32 = Longint; {32 bit unsigned integer} Smallint = Integer; Shortstring = string; pByte = ^Byte; pBoolean = ^Boolean; pShortInt = ^ShortInt; pWord = ^Word; pSmallInt = ^SmallInt; pLongint = ^Longint; {$else} {$ifndef HAS_INTXX} type Int8 = ShortInt; { 8 bit signed integer} Int16 = SmallInt; {16 bit signed integer} Int32 = Longint; {32 bit signed integer} UInt8 = Byte; { 8 bit unsigned integer} UInt16 = Word; {16 bit unsigned integer} {$ifdef HAS_CARD32} UInt32 = Cardinal; {32 bit unsigned integer} {$else} UInt32 = Longint; {32 bit unsigned integer} {$endif} {$endif} {$ifndef HAS_XTYPES} type pByte = ^Byte; pBoolean = ^Boolean; pShortInt = ^ShortInt; pWord = ^Word; pSmallInt = ^SmallInt; pLongint = ^Longint; {$endif} {$ifdef FPC} {$ifdef VER1_0} type pBoolean = ^Boolean; pShortInt = ^ShortInt; {$endif} {$endif} {$endif} {BIT16} type Str255 = string[255]; {Handy type to avoid problems with 32 bit and/or unicode} Str127 = string[127]; type {$ifndef HAS_PINTXX} pInt8 = ^Int8; pInt16 = ^Int16; pInt32 = ^Int32; pUInt8 = ^UInt8; pUInt16 = ^UInt16; pUInt32 = ^UInt32; {$endif} pStr255 = ^Str255; pStr127 = ^Str127; {$ifdef BIT16} {$ifdef V7Plus} type BString = string[255]; {String of 8 bit characters} pBString = ^BString; char8 = char; {8 bit characters} pchar8 = pchar; {$else} type BString = string[255]; {String of 8 bit characters} pBString = ^BString; char8 = char; {8 bit characters} pchar8 = ^char; {$endif} {$else} {$ifdef UNICODE} type BString = AnsiString; {String of 8 bit characters} pBString = pAnsiString; char8 = AnsiChar; {8 bit characters} pchar8 = pAnsiChar; {$else} type BString = AnsiString; {String of 8 bit characters} pBString = pAnsiString; char8 = AnsiChar; {8 bit characters} pchar8 = pAnsiChar; {$endif} {$endif} {$ifdef V7Plus} type Ptr2Inc = pByte; {Type cast to increment untyped pointer} {$else} type Ptr2Inc = Longint; {Type cast to increment untyped pointer} {$endif} {$ifdef FPC} {$ifdef VER1} type __P2I = longint; {Type cast pointer to integer for masking etc} {$else} type __P2I = PtrUInt; {Type cast pointer to integer for masking etc} {$endif} {$else} {$ifdef BIT64} type __P2I = NativeInt; {Type cast pointer to integer for masking etc} {$else} type __P2I = longint; {Type cast pointer to integer for masking etc} {$endif} {$endif} {$ifdef EXT64} type extended = double; {Force 64-bit 'extended'} {$else} {$ifdef SIMULATE_EXT64} type extended = double; {Debug simulation EXT64} {$endif} {$endif} implementation end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/README.txt��������������������������������������0000644�0001750�0000144�00000000243�15104114162�023134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CRC / HASH / HMAC http://www.wolfgang-ehrhardt.de/crchash_en.html crc_hash_2016-05-01.zip Some modifications done for Double Commander (see doublecmd.diff). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/Private/COPYING.txt�������������������������������������0000644�0001750�0000144�00000004100�15104114162�023303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(C) Copyright 2002-2016 Wolfgang Ehrhardt Based on "The zlib/libpng License": http://www.opensource.org/licenses/zlib-license.php __________________ COPYING CONDITIONS This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. _______________________________________ Bedingungen fuer Nutzung und Weitergabe Die Software (Quellcodes und Binaerdateien) wird ohne jegliche Zusagen oder Garantien bezueglich Funktionalitaet oder Funktionsfaehigkeit abgegeben. Die Autoren uebernehmen keine Verantwortung fuer Schaeden, die durch die Benutzung der Software verursacht werden. Die Software darf frei verwendet und weitergegeben werden (kommerzielle Nutzung/Weitergabe ist erlaubt), vorausgesetzt die folgenden Bedingungen werden eingehalten: 1. Die Herkunft der Software darf nicht falsch angegeben werden; es ist nicht erlaubt, die Software als Werk eines anderen auszugeben. Wird die Software in Teilen oder als Ganzes in einem Produkt benutzt, so ist Hinweis auf die Herkunft in der Dokumentation erwuenscht, aber nicht notwendig. 2. Geaenderte Quellcodes muessen deutlich als solche gekennzeichnet werden und duerfen nicht als die Originalsoftware ausgegeben werden. 3. Die Bedingungen ueber die Nutzung/Weitergabe duerfen nicht entfernt oder geaendert werden. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Hashes/DCPtiger.inc��������������������������������������������0000644�0001750�0000144�00000055221�15104114162�022166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const t1: array[0..255] of int64= ( $02AAB17CF7E90C5E, $AC424B03E243A8EC, $72CD5BE30DD5FCD3, $6D019B93F6F97F3A, $CD9978FFD21F9193, $7573A1C9708029E2, $B164326B922A83C3, $46883EEE04915870, $EAACE3057103ECE6, $C54169B808A3535C, $4CE754918DDEC47C, $0AA2F4DFDC0DF40C, $10B76F18A74DBEFA, $C6CCB6235AD1AB6A, $13726121572FE2FF, $1A488C6F199D921E, $4BC9F9F4DA0007CA, $26F5E6F6E85241C7, $859079DBEA5947B6, $4F1885C5C99E8C92, $D78E761EA96F864B, $8E36428C52B5C17D, $69CF6827373063C1, $B607C93D9BB4C56E, $7D820E760E76B5EA, $645C9CC6F07FDC42, $BF38A078243342E0, $5F6B343C9D2E7D04, $F2C28AEB600B0EC6, $6C0ED85F7254BCAC, $71592281A4DB4FE5, $1967FA69CE0FED9F, $FD5293F8B96545DB, $C879E9D7F2A7600B, $860248920193194E, $A4F9533B2D9CC0B3, $9053836C15957613, $DB6DCF8AFC357BF1, $18BEEA7A7A370F57, $037117CA50B99066, $6AB30A9774424A35, $F4E92F02E325249B, $7739DB07061CCAE1, $D8F3B49CECA42A05, $BD56BE3F51382F73, $45FAED5843B0BB28, $1C813D5C11BF1F83, $8AF0E4B6D75FA169, $33EE18A487AD9999, $3C26E8EAB1C94410, $B510102BC0A822F9, $141EEF310CE6123B, $FC65B90059DDB154, $E0158640C5E0E607, $884E079826C3A3CF, $930D0D9523C535FD, $35638D754E9A2B00, $4085FCCF40469DD5, $C4B17AD28BE23A4C, $CAB2F0FC6A3E6A2E, $2860971A6B943FCD, $3DDE6EE212E30446, $6222F32AE01765AE, $5D550BB5478308FE, $A9EFA98DA0EDA22A, $C351A71686C40DA7, $1105586D9C867C84, $DCFFEE85FDA22853, $CCFBD0262C5EEF76, $BAF294CB8990D201, $E69464F52AFAD975, $94B013AFDF133E14, $06A7D1A32823C958, $6F95FE5130F61119, $D92AB34E462C06C0, $ED7BDE33887C71D2, $79746D6E6518393E, $5BA419385D713329, $7C1BA6B948A97564, $31987C197BFDAC67, $DE6C23C44B053D02, $581C49FED002D64D, $DD474D6338261571, $AA4546C3E473D062, $928FCE349455F860, $48161BBACAAB94D9, $63912430770E6F68, $6EC8A5E602C6641C, $87282515337DDD2B, $2CDA6B42034B701B, $B03D37C181CB096D, $E108438266C71C6F, $2B3180C7EB51B255, $DF92B82F96C08BBC, $5C68C8C0A632F3BA, $5504CC861C3D0556, $ABBFA4E55FB26B8F, $41848B0AB3BACEB4, $B334A273AA445D32, $BCA696F0A85AD881, $24F6EC65B528D56C, $0CE1512E90F4524A, $4E9DD79D5506D35A, $258905FAC6CE9779, $2019295B3E109B33, $F8A9478B73A054CC, $2924F2F934417EB0, $3993357D536D1BC4, $38A81AC21DB6FF8B, $47C4FBF17D6016BF, $1E0FAADD7667E3F5, $7ABCFF62938BEB96, $A78DAD948FC179C9, $8F1F98B72911E50D, $61E48EAE27121A91, $4D62F7AD31859808, $ECEBA345EF5CEAEB, $F5CEB25EBC9684CE, $F633E20CB7F76221, $A32CDF06AB8293E4, $985A202CA5EE2CA4, $CF0B8447CC8A8FB1, $9F765244979859A3, $A8D516B1A1240017, $0BD7BA3EBB5DC726, $E54BCA55B86ADB39, $1D7A3AFD6C478063, $519EC608E7669EDD, $0E5715A2D149AA23, $177D4571848FF194, $EEB55F3241014C22, $0F5E5CA13A6E2EC2, $8029927B75F5C361, $AD139FABC3D6E436, $0D5DF1A94CCF402F, $3E8BD948BEA5DFC8, $A5A0D357BD3FF77E, $A2D12E251F74F645, $66FD9E525E81A082, $2E0C90CE7F687A49, $C2E8BCBEBA973BC5, $000001BCE509745F, $423777BBE6DAB3D6, $D1661C7EAEF06EB5, $A1781F354DAACFD8, $2D11284A2B16AFFC, $F1FC4F67FA891D1F, $73ECC25DCB920ADA, $AE610C22C2A12651, $96E0A810D356B78A, $5A9A381F2FE7870F, $D5AD62EDE94E5530, $D225E5E8368D1427, $65977B70C7AF4631, $99F889B2DE39D74F, $233F30BF54E1D143, $9A9675D3D9A63C97, $5470554FF334F9A8, $166ACB744A4F5688, $70C74CAAB2E4AEAD, $F0D091646F294D12, $57B82A89684031D1, $EFD95A5A61BE0B6B, $2FBD12E969F2F29A, $9BD37013FEFF9FE8, $3F9B0404D6085A06, $4940C1F3166CFE15, $09542C4DCDF3DEFB, $B4C5218385CD5CE3, $C935B7DC4462A641, $3417F8A68ED3B63F, $B80959295B215B40, $F99CDAEF3B8C8572, $018C0614F8FCB95D, $1B14ACCD1A3ACDF3, $84D471F200BB732D, $C1A3110E95E8DA16, $430A7220BF1A82B8, $B77E090D39DF210E, $5EF4BD9F3CD05E9D, $9D4FF6DA7E57A444, $DA1D60E183D4A5F8, $B287C38417998E47, $FE3EDC121BB31886, $C7FE3CCC980CCBEF, $E46FB590189BFD03, $3732FD469A4C57DC, $7EF700A07CF1AD65, $59C64468A31D8859, $762FB0B4D45B61F6, $155BAED099047718, $68755E4C3D50BAA6, $E9214E7F22D8B4DF, $2ADDBF532EAC95F4, $32AE3909B4BD0109, $834DF537B08E3450, $FA209DA84220728D, $9E691D9B9EFE23F7, $0446D288C4AE8D7F, $7B4CC524E169785B, $21D87F0135CA1385, $CEBB400F137B8AA5, $272E2B66580796BE, $3612264125C2B0DE, $057702BDAD1EFBB2, $D4BABB8EACF84BE9, $91583139641BC67B, $8BDC2DE08036E024, $603C8156F49F68ED, $F7D236F7DBEF5111, $9727C4598AD21E80, $A08A0896670A5FD7, $CB4A8F4309EBA9CB, $81AF564B0F7036A1, $C0B99AA778199ABD, $959F1EC83FC8E952, $8C505077794A81B9, $3ACAAF8F056338F0, $07B43F50627A6778, $4A44AB49F5ECCC77, $3BC3D6E4B679EE98, $9CC0D4D1CF14108C, $4406C00B206BC8A0, $82A18854C8D72D89, $67E366B35C3C432C, $B923DD61102B37F2, $56AB2779D884271D, $BE83E1B0FF1525AF, $FB7C65D4217E49A9, $6BDBE0E76D48E7D4, $08DF828745D9179E, $22EA6A9ADD53BD34, $E36E141C5622200A, $7F805D1B8CB750EE, $AFE5C7A59F58E837, $E27F996A4FB1C23C, $D3867DFB0775F0D0, $D0E673DE6E88891A, $123AEB9EAFB86C25, $30F1D5D5C145B895, $BB434A2DEE7269E7, $78CB67ECF931FA38, $F33B0372323BBF9C, $52D66336FB279C74, $505F33AC0AFB4EAA, $E8A5CD99A2CCE187, $534974801E2D30BB, $8D2D5711D5876D90, $1F1A412891BC038E, $D6E2E71D82E56648, $74036C3A497732B7, $89B67ED96361F5AB, $FFED95D8F1EA02A2, $E72B3BD61464D43D, $A6300F170BDC4820, $EBC18760ED78A77A); t2: array[0..255] of int64= ( $E6A6BE5A05A12138, $B5A122A5B4F87C98, $563C6089140B6990, $4C46CB2E391F5DD5, $D932ADDBC9B79434, $08EA70E42015AFF5, $D765A6673E478CF1, $C4FB757EAB278D99, $DF11C6862D6E0692, $DDEB84F10D7F3B16, $6F2EF604A665EA04, $4A8E0F0FF0E0DFB3, $A5EDEEF83DBCBA51, $FC4F0A2A0EA4371E, $E83E1DA85CB38429, $DC8FF882BA1B1CE2, $CD45505E8353E80D, $18D19A00D4DB0717, $34A0CFEDA5F38101, $0BE77E518887CAF2, $1E341438B3C45136, $E05797F49089CCF9, $FFD23F9DF2591D14, $543DDA228595C5CD, $661F81FD99052A33, $8736E641DB0F7B76, $15227725418E5307, $E25F7F46162EB2FA, $48A8B2126C13D9FE, $AFDC541792E76EEA, $03D912BFC6D1898F, $31B1AAFA1B83F51B, $F1AC2796E42AB7D9, $40A3A7D7FCD2EBAC, $1056136D0AFBBCC5, $7889E1DD9A6D0C85, $D33525782A7974AA, $A7E25D09078AC09B, $BD4138B3EAC6EDD0, $920ABFBE71EB9E70, $A2A5D0F54FC2625C, $C054E36B0B1290A3, $F6DD59FF62FE932B, $3537354511A8AC7D, $CA845E9172FADCD4, $84F82B60329D20DC, $79C62CE1CD672F18, $8B09A2ADD124642C, $D0C1E96A19D9E726, $5A786A9B4BA9500C, $0E020336634C43F3, $C17B474AEB66D822, $6A731AE3EC9BAAC2, $8226667AE0840258, $67D4567691CAECA5, $1D94155C4875ADB5, $6D00FD985B813FDF, $51286EFCB774CD06, $5E8834471FA744AF, $F72CA0AEE761AE2E, $BE40E4CDAEE8E09A, $E9970BBB5118F665, $726E4BEB33DF1964, $703B000729199762, $4631D816F5EF30A7, $B880B5B51504A6BE, $641793C37ED84B6C, $7B21ED77F6E97D96, $776306312EF96B73, $AE528948E86FF3F4, $53DBD7F286A3F8F8, $16CADCE74CFC1063, $005C19BDFA52C6DD, $68868F5D64D46AD3, $3A9D512CCF1E186A, $367E62C2385660AE, $E359E7EA77DCB1D7, $526C0773749ABE6E, $735AE5F9D09F734B, $493FC7CC8A558BA8, $B0B9C1533041AB45, $321958BA470A59BD, $852DB00B5F46C393, $91209B2BD336B0E5, $6E604F7D659EF19F, $B99A8AE2782CCB24, $CCF52AB6C814C4C7, $4727D9AFBE11727B, $7E950D0C0121B34D, $756F435670AD471F, $F5ADD442615A6849, $4E87E09980B9957A, $2ACFA1DF50AEE355, $D898263AFD2FD556, $C8F4924DD80C8FD6, $CF99CA3D754A173A, $FE477BACAF91BF3C, $ED5371F6D690C12D, $831A5C285E687094, $C5D3C90A3708A0A4, $0F7F903717D06580, $19F9BB13B8FDF27F, $B1BD6F1B4D502843, $1C761BA38FFF4012, $0D1530C4E2E21F3B, $8943CE69A7372C8A, $E5184E11FEB5CE66, $618BDB80BD736621, $7D29BAD68B574D0B, $81BB613E25E6FE5B, $071C9C10BC07913F, $C7BEEB7909AC2D97, $C3E58D353BC5D757, $EB017892F38F61E8, $D4EFFB9C9B1CC21A, $99727D26F494F7AB, $A3E063A2956B3E03, $9D4A8B9A4AA09C30, $3F6AB7D500090FB4, $9CC0F2A057268AC0, $3DEE9D2DEDBF42D1, $330F49C87960A972, $C6B2720287421B41, $0AC59EC07C00369C, $EF4EAC49CB353425, $F450244EEF0129D8, $8ACC46E5CAF4DEB6, $2FFEAB63989263F7, $8F7CB9FE5D7A4578, $5BD8F7644E634635, $427A7315BF2DC900, $17D0C4AA2125261C, $3992486C93518E50, $B4CBFEE0A2D7D4C3, $7C75D6202C5DDD8D, $DBC295D8E35B6C61, $60B369D302032B19, $CE42685FDCE44132, $06F3DDB9DDF65610, $8EA4D21DB5E148F0, $20B0FCE62FCD496F, $2C1B912358B0EE31, $B28317B818F5A308, $A89C1E189CA6D2CF, $0C6B18576AAADBC8, $B65DEAA91299FAE3, $FB2B794B7F1027E7, $04E4317F443B5BEB, $4B852D325939D0A6, $D5AE6BEEFB207FFC, $309682B281C7D374, $BAE309A194C3B475, $8CC3F97B13B49F05, $98A9422FF8293967, $244B16B01076FF7C, $F8BF571C663D67EE, $1F0D6758EEE30DA1, $C9B611D97ADEB9B7, $B7AFD5887B6C57A2, $6290AE846B984FE1, $94DF4CDEACC1A5FD, $058A5BD1C5483AFF, $63166CC142BA3C37, $8DB8526EB2F76F40, $E10880036F0D6D4E, $9E0523C9971D311D, $45EC2824CC7CD691, $575B8359E62382C9, $FA9E400DC4889995, $D1823ECB45721568, $DAFD983B8206082F, $AA7D29082386A8CB, $269FCD4403B87588, $1B91F5F728BDD1E0, $E4669F39040201F6, $7A1D7C218CF04ADE, $65623C29D79CE5CE, $2368449096C00BB1, $AB9BF1879DA503BA, $BC23ECB1A458058E, $9A58DF01BB401ECC, $A070E868A85F143D, $4FF188307DF2239E, $14D565B41A641183, $EE13337452701602, $950E3DCF3F285E09, $59930254B9C80953, $3BF299408930DA6D, $A955943F53691387, $A15EDECAA9CB8784, $29142127352BE9A0, $76F0371FFF4E7AFB, $0239F450274F2228, $BB073AF01D5E868B, $BFC80571C10E96C1, $D267088568222E23, $9671A3D48E80B5B0, $55B5D38AE193BB81, $693AE2D0A18B04B8, $5C48B4ECADD5335F, $FD743B194916A1CA, $2577018134BE98C4, $E77987E83C54A4AD, $28E11014DA33E1B9, $270CC59E226AA213, $71495F756D1A5F60, $9BE853FB60AFEF77, $ADC786A7F7443DBF, $0904456173B29A82, $58BC7A66C232BD5E, $F306558C673AC8B2, $41F639C6B6C9772A, $216DEFE99FDA35DA, $11640CC71C7BE615, $93C43694565C5527, $EA038E6246777839, $F9ABF3CE5A3E2469, $741E768D0FD312D2, $0144B883CED652C6, $C20B5A5BA33F8552, $1AE69633C3435A9D, $97A28CA4088CFDEC, $8824A43C1E96F420, $37612FA66EEEA746, $6B4CB165F9CF0E5A, $43AA1C06A0ABFB4A, $7F4DC26FF162796B, $6CBACC8E54ED9B0F, $A6B7FFEFD2BB253E, $2E25BC95B0A29D4F, $86D6A58BDEF1388C, $DED74AC576B6F054, $8030BDBC2B45805D, $3C81AF70E94D9289, $3EFF6DDA9E3100DB, $B38DC39FDFCC8847, $123885528D17B87E, $F2DA0ED240B1B642, $44CEFADCD54BF9A9, $1312200E433C7EE6, $9FFCC84F3A78C748, $F0CD1F72248576BB, $EC6974053638CFE4, $2BA7B67C0CEC4E4C, $AC2F4DF3E5CE32ED, $CB33D14326EA4C11, $A4E9044CC77E58BC, $5F513293D934FCEF, $5DC9645506E55444, $50DE418F317DE40A, $388CB31A69DDE259, $2DB4A83455820A86, $9010A91E84711AE9, $4DF7F0B7B1498371, $D62A2EABC0977179, $22FAC097AA8D5C0E); t3: array[0..255] of int64= ( $F49FCC2FF1DAF39B, $487FD5C66FF29281, $E8A30667FCDCA83F, $2C9B4BE3D2FCCE63, $DA3FF74B93FBBBC2, $2FA165D2FE70BA66, $A103E279970E93D4, $BECDEC77B0E45E71, $CFB41E723985E497, $B70AAA025EF75017, $D42309F03840B8E0, $8EFC1AD035898579, $96C6920BE2B2ABC5, $66AF4163375A9172, $2174ABDCCA7127FB, $B33CCEA64A72FF41, $F04A4933083066A5, $8D970ACDD7289AF5, $8F96E8E031C8C25E, $F3FEC02276875D47, $EC7BF310056190DD, $F5ADB0AEBB0F1491, $9B50F8850FD58892, $4975488358B74DE8, $A3354FF691531C61, $0702BBE481D2C6EE, $89FB24057DEDED98, $AC3075138596E902, $1D2D3580172772ED, $EB738FC28E6BC30D, $5854EF8F63044326, $9E5C52325ADD3BBE, $90AA53CF325C4623, $C1D24D51349DD067, $2051CFEEA69EA624, $13220F0A862E7E4F, $CE39399404E04864, $D9C42CA47086FCB7, $685AD2238A03E7CC, $066484B2AB2FF1DB, $FE9D5D70EFBF79EC, $5B13B9DD9C481854, $15F0D475ED1509AD, $0BEBCD060EC79851, $D58C6791183AB7F8, $D1187C5052F3EEE4, $C95D1192E54E82FF, $86EEA14CB9AC6CA2, $3485BEB153677D5D, $DD191D781F8C492A, $F60866BAA784EBF9, $518F643BA2D08C74, $8852E956E1087C22, $A768CB8DC410AE8D, $38047726BFEC8E1A, $A67738B4CD3B45AA, $AD16691CEC0DDE19, $C6D4319380462E07, $C5A5876D0BA61938, $16B9FA1FA58FD840, $188AB1173CA74F18, $ABDA2F98C99C021F, $3E0580AB134AE816, $5F3B05B773645ABB, $2501A2BE5575F2F6, $1B2F74004E7E8BA9, $1CD7580371E8D953, $7F6ED89562764E30, $B15926FF596F003D, $9F65293DA8C5D6B9, $6ECEF04DD690F84C, $4782275FFF33AF88, $E41433083F820801, $FD0DFE409A1AF9B5, $4325A3342CDB396B, $8AE77E62B301B252, $C36F9E9F6655615A, $85455A2D92D32C09, $F2C7DEA949477485, $63CFB4C133A39EBA, $83B040CC6EBC5462, $3B9454C8FDB326B0, $56F56A9E87FFD78C, $2DC2940D99F42BC6, $98F7DF096B096E2D, $19A6E01E3AD852BF, $42A99CCBDBD4B40B, $A59998AF45E9C559, $366295E807D93186, $6B48181BFAA1F773, $1FEC57E2157A0A1D, $4667446AF6201AD5, $E615EBCACFB0F075, $B8F31F4F68290778, $22713ED6CE22D11E, $3057C1A72EC3C93B, $CB46ACC37C3F1F2F, $DBB893FD02AAF50E, $331FD92E600B9FCF, $A498F96148EA3AD6, $A8D8426E8B6A83EA, $A089B274B7735CDC, $87F6B3731E524A11, $118808E5CBC96749, $9906E4C7B19BD394, $AFED7F7E9B24A20C, $6509EADEEB3644A7, $6C1EF1D3E8EF0EDE, $B9C97D43E9798FB4, $A2F2D784740C28A3, $7B8496476197566F, $7A5BE3E6B65F069D, $F96330ED78BE6F10, $EEE60DE77A076A15, $2B4BEE4AA08B9BD0, $6A56A63EC7B8894E, $02121359BA34FEF4, $4CBF99F8283703FC, $398071350CAF30C8, $D0A77A89F017687A, $F1C1A9EB9E423569, $8C7976282DEE8199, $5D1737A5DD1F7ABD, $4F53433C09A9FA80, $FA8B0C53DF7CA1D9, $3FD9DCBC886CCB77, $C040917CA91B4720, $7DD00142F9D1DCDF, $8476FC1D4F387B58, $23F8E7C5F3316503, $032A2244E7E37339, $5C87A5D750F5A74B, $082B4CC43698992E, $DF917BECB858F63C, $3270B8FC5BF86DDA, $10AE72BB29B5DD76, $576AC94E7700362B, $1AD112DAC61EFB8F, $691BC30EC5FAA427, $FF246311CC327143, $3142368E30E53206, $71380E31E02CA396, $958D5C960AAD76F1, $F8D6F430C16DA536, $C8FFD13F1BE7E1D2, $7578AE66004DDBE1, $05833F01067BE646, $BB34B5AD3BFE586D, $095F34C9A12B97F0, $247AB64525D60CA8, $DCDBC6F3017477D1, $4A2E14D4DECAD24D, $BDB5E6D9BE0A1EEB, $2A7E70F7794301AB, $DEF42D8A270540FD, $01078EC0A34C22C1, $E5DE511AF4C16387, $7EBB3A52BD9A330A, $77697857AA7D6435, $004E831603AE4C32, $E7A21020AD78E312, $9D41A70C6AB420F2, $28E06C18EA1141E6, $D2B28CBD984F6B28, $26B75F6C446E9D83, $BA47568C4D418D7F, $D80BADBFE6183D8E, $0E206D7F5F166044, $E258A43911CBCA3E, $723A1746B21DC0BC, $C7CAA854F5D7CDD3, $7CAC32883D261D9C, $7690C26423BA942C, $17E55524478042B8, $E0BE477656A2389F, $4D289B5E67AB2DA0, $44862B9C8FBBFD31, $B47CC8049D141365, $822C1B362B91C793, $4EB14655FB13DFD8, $1ECBBA0714E2A97B, $6143459D5CDE5F14, $53A8FBF1D5F0AC89, $97EA04D81C5E5B00, $622181A8D4FDB3F3, $E9BCD341572A1208, $1411258643CCE58A, $9144C5FEA4C6E0A4, $0D33D06565CF620F, $54A48D489F219CA1, $C43E5EAC6D63C821, $A9728B3A72770DAF, $D7934E7B20DF87EF, $E35503B61A3E86E5, $CAE321FBC819D504, $129A50B3AC60BFA6, $CD5E68EA7E9FB6C3, $B01C90199483B1C7, $3DE93CD5C295376C, $AED52EDF2AB9AD13, $2E60F512C0A07884, $BC3D86A3E36210C9, $35269D9B163951CE, $0C7D6E2AD0CDB5FA, $59E86297D87F5733, $298EF221898DB0E7, $55000029D1A5AA7E, $8BC08AE1B5061B45, $C2C31C2B6C92703A, $94CC596BAF25EF42, $0A1D73DB22540456, $04B6A0F9D9C4179A, $EFFDAFA2AE3D3C60, $F7C8075BB49496C4, $9CC5C7141D1CD4E3, $78BD1638218E5534, $B2F11568F850246A, $EDFABCFA9502BC29, $796CE5F2DA23051B, $AAE128B0DC93537C, $3A493DA0EE4B29AE, $B5DF6B2C416895D7, $FCABBD25122D7F37, $70810B58105DC4B1, $E10FDD37F7882A90, $524DCAB5518A3F5C, $3C9E85878451255B, $4029828119BD34E2, $74A05B6F5D3CECCB, $B610021542E13ECA, $0FF979D12F59E2AC, $6037DA27E4F9CC50, $5E92975A0DF1847D, $D66DE190D3E623FE, $5032D6B87B568048, $9A36B7CE8235216E, $80272A7A24F64B4A, $93EFED8B8C6916F7, $37DDBFF44CCE1555, $4B95DB5D4B99BD25, $92D3FDA169812FC0, $FB1A4A9A90660BB6, $730C196946A4B9B2, $81E289AA7F49DA68, $64669A0F83B1A05F, $27B3FF7D9644F48B, $CC6B615C8DB675B3, $674F20B9BCEBBE95, $6F31238275655982, $5AE488713E45CF05, $BF619F9954C21157, $EABAC46040A8EAE9, $454C6FE9F2C0C1CD, $419CF6496412691C, $D3DC3BEF265B0F70, $6D0E60F5C3578A9E); t4: array[0..255] of int64= ( $5B0E608526323C55, $1A46C1A9FA1B59F5, $A9E245A17C4C8FFA, $65CA5159DB2955D7, $05DB0A76CE35AFC2, $81EAC77EA9113D45, $528EF88AB6AC0A0D, $A09EA253597BE3FF, $430DDFB3AC48CD56, $C4B3A67AF45CE46F, $4ECECFD8FBE2D05E, $3EF56F10B39935F0, $0B22D6829CD619C6, $17FD460A74DF2069, $6CF8CC8E8510ED40, $D6C824BF3A6ECAA7, $61243D581A817049, $048BACB6BBC163A2, $D9A38AC27D44CC32, $7FDDFF5BAAF410AB, $AD6D495AA804824B, $E1A6A74F2D8C9F94, $D4F7851235DEE8E3, $FD4B7F886540D893, $247C20042AA4BFDA, $096EA1C517D1327C, $D56966B4361A6685, $277DA5C31221057D, $94D59893A43ACFF7, $64F0C51CCDC02281, $3D33BCC4FF6189DB, $E005CB184CE66AF1, $FF5CCD1D1DB99BEA, $B0B854A7FE42980F, $7BD46A6A718D4B9F, $D10FA8CC22A5FD8C, $D31484952BE4BD31, $C7FA975FCB243847, $4886ED1E5846C407, $28CDDB791EB70B04, $C2B00BE2F573417F, $5C9590452180F877, $7A6BDDFFF370EB00, $CE509E38D6D9D6A4, $EBEB0F00647FA702, $1DCC06CF76606F06, $E4D9F28BA286FF0A, $D85A305DC918C262, $475B1D8732225F54, $2D4FB51668CCB5FE, $A679B9D9D72BBA20, $53841C0D912D43A5, $3B7EAA48BF12A4E8, $781E0E47F22F1DDF, $EFF20CE60AB50973, $20D261D19DFFB742, $16A12B03062A2E39, $1960EB2239650495, $251C16FED50EB8B8, $9AC0C330F826016E, $ED152665953E7671, $02D63194A6369570, $5074F08394B1C987, $70BA598C90B25CE1, $794A15810B9742F6, $0D5925E9FCAF8C6C, $3067716CD868744E, $910AB077E8D7731B, $6A61BBDB5AC42F61, $93513EFBF0851567, $F494724B9E83E9D5, $E887E1985C09648D, $34B1D3C675370CFD, $DC35E433BC0D255D, $D0AAB84234131BE0, $08042A50B48B7EAF, $9997C4EE44A3AB35, $829A7B49201799D0, $263B8307B7C54441, $752F95F4FD6A6CA6, $927217402C08C6E5, $2A8AB754A795D9EE, $A442F7552F72943D, $2C31334E19781208, $4FA98D7CEAEE6291, $55C3862F665DB309, $BD0610175D53B1F3, $46FE6CB840413F27, $3FE03792DF0CFA59, $CFE700372EB85E8F, $A7BE29E7ADBCE118, $E544EE5CDE8431DD, $8A781B1B41F1873E, $A5C94C78A0D2F0E7, $39412E2877B60728, $A1265EF3AFC9A62C, $BCC2770C6A2506C5, $3AB66DD5DCE1CE12, $E65499D04A675B37, $7D8F523481BFD216, $0F6F64FCEC15F389, $74EFBE618B5B13C8, $ACDC82B714273E1D, $DD40BFE003199D17, $37E99257E7E061F8, $FA52626904775AAA, $8BBBF63A463D56F9, $F0013F1543A26E64, $A8307E9F879EC898, $CC4C27A4150177CC, $1B432F2CCA1D3348, $DE1D1F8F9F6FA013, $606602A047A7DDD6, $D237AB64CC1CB2C7, $9B938E7225FCD1D3, $EC4E03708E0FF476, $FEB2FBDA3D03C12D, $AE0BCED2EE43889A, $22CB8923EBFB4F43, $69360D013CF7396D, $855E3602D2D4E022, $073805BAD01F784C, $33E17A133852F546, $DF4874058AC7B638, $BA92B29C678AA14A, $0CE89FC76CFAADCD, $5F9D4E0908339E34, $F1AFE9291F5923B9, $6E3480F60F4A265F, $EEBF3A2AB29B841C, $E21938A88F91B4AD, $57DFEFF845C6D3C3, $2F006B0BF62CAAF2, $62F479EF6F75EE78, $11A55AD41C8916A9, $F229D29084FED453, $42F1C27B16B000E6, $2B1F76749823C074, $4B76ECA3C2745360, $8C98F463B91691BD, $14BCC93CF1ADE66A, $8885213E6D458397, $8E177DF0274D4711, $B49B73B5503F2951, $10168168C3F96B6B, $0E3D963B63CAB0AE, $8DFC4B5655A1DB14, $F789F1356E14DE5C, $683E68AF4E51DAC1, $C9A84F9D8D4B0FD9, $3691E03F52A0F9D1, $5ED86E46E1878E80, $3C711A0E99D07150, $5A0865B20C4E9310, $56FBFC1FE4F0682E, $EA8D5DE3105EDF9B, $71ABFDB12379187A, $2EB99DE1BEE77B9C, $21ECC0EA33CF4523, $59A4D7521805C7A1, $3896F5EB56AE7C72, $AA638F3DB18F75DC, $9F39358DABE9808E, $B7DEFA91C00B72AC, $6B5541FD62492D92, $6DC6DEE8F92E4D5B, $353F57ABC4BEEA7E, $735769D6DA5690CE, $0A234AA642391484, $F6F9508028F80D9D, $B8E319A27AB3F215, $31AD9C1151341A4D, $773C22A57BEF5805, $45C7561A07968633, $F913DA9E249DBE36, $DA652D9B78A64C68, $4C27A97F3BC334EF, $76621220E66B17F4, $967743899ACD7D0B, $F3EE5BCAE0ED6782, $409F753600C879FC, $06D09A39B5926DB6, $6F83AEB0317AC588, $01E6CA4A86381F21, $66FF3462D19F3025, $72207C24DDFD3BFB, $4AF6B6D3E2ECE2EB, $9C994DBEC7EA08DE, $49ACE597B09A8BC4, $B38C4766CF0797BA, $131B9373C57C2A75, $B1822CCE61931E58, $9D7555B909BA1C0C, $127FAFDD937D11D2, $29DA3BADC66D92E4, $A2C1D57154C2ECBC, $58C5134D82F6FE24, $1C3AE3515B62274F, $E907C82E01CB8126, $F8ED091913E37FCB, $3249D8F9C80046C9, $80CF9BEDE388FB63, $1881539A116CF19E, $5103F3F76BD52457, $15B7E6F5AE47F7A8, $DBD7C6DED47E9CCF, $44E55C410228BB1A, $B647D4255EDB4E99, $5D11882BB8AAFC30, $F5098BBB29D3212A, $8FB5EA14E90296B3, $677B942157DD025A, $FB58E7C0A390ACB5, $89D3674C83BD4A01, $9E2DA4DF4BF3B93B, $FCC41E328CAB4829, $03F38C96BA582C52, $CAD1BDBD7FD85DB2, $BBB442C16082AE83, $B95FE86BA5DA9AB0, $B22E04673771A93F, $845358C9493152D8, $BE2A488697B4541E, $95A2DC2DD38E6966, $C02C11AC923C852B, $2388B1990DF2A87B, $7C8008FA1B4F37BE, $1F70D0C84D54E503, $5490ADEC7ECE57D4, $002B3C27D9063A3A, $7EAEA3848030A2BF, $C602326DED2003C0, $83A7287D69A94086, $C57A5FCB30F57A8A, $B56844E479EBE779, $A373B40F05DCBCE9, $D71A786E88570EE2, $879CBACDBDE8F6A0, $976AD1BCC164A32F, $AB21E25E9666D78B, $901063AAE5E5C33C, $9818B34448698D90, $E36487AE3E1E8ABB, $AFBDF931893BDCB4, $6345A0DC5FBBD519, $8628FE269B9465CA, $1E5D01603F9C51EC, $4DE44006A15049B7, $BF6C70E5F776CBB1, $411218F2EF552BED, $CB0C0708705A36A3, $E74D14754F986044, $CD56D9430EA8280E, $C12591D7535F5065, $C83223F1720AEF96, $C3A0396F7363A51F); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Docs/����������������������������������������������������������0000755�0001750�0000144�00000000000�15104114162�017502� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Docs/osi-certified-120x100.png���������������������������������0000644�0001750�0000144�00000015517�15104114162�023660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���x���d���ce���tIME,k59��IDATx}ytwUwLϞd$@@E\P6]{W ЏEP,-ʚe!Lf魾?wM ΄Nt=US~ꩥk BG䁵[p(>Q}DG %m@PEY^^q WjJE)J%lo½KtLՙ_/WTT^^:nG$!!ajRm1Z-i]KKHq o^vSąreB '0�! @! ȋ< @AJ?ўdw=Z"B?~hYmc-Z&*T (#q0KOX;:8oԛze|faQ$վ rʯNIi(R(u<+01�R`��B�K#~_[>h D=O}ƦFN}@Kר$Đ@A�!8D<}\=M!C<"[;؎D8.Ԕ!Moґ$�A OTy]n;;s̬OLDZv*ۍl0^o04��1sr\vyO{|L"4{O߯Uʘ&¥kŷ!�SI7vnYݖQ^f;ha<ڶZ}lI )6@k9RS>{Y="M+I4˱ӖLݾdKys#)!iݼG]G/%5n4TQb� "WL\w9J�$zW5z۬NT!>}Nb11]zW]^WԴG#R,=b5)TYD0KXS/QS luﮙsA) Jo$ 0tJ~ktFW^4br! "GdULW#^'z}lt1yF@{߁R Օ+6/-G>XΘWǑHh�3e4͗?~_#0D:ЙCX%HR%tNsODh IkKxIQ+rB�q)0bBiuGw:}We \:u?kmnX.H q5+ 0y$ Lj5GJ#:A;q'e'ݜ!F?}~%Q BVRf6MCPSaP!;.L5`)Y][E pġ藜\nKQTĎzjkKU6u.IHl%QRőTssniPU뮨 *B8hHT }wר5�/Wn\qe^ʹ8Ka*dU8߰<}0rDG3<vv-*C!EVlffO ykWg~� B)Ӝgn1tO6G:QEs$)Rq~:!��~quN Cz xɸ/^wjD2*6gch܅kTjRaTb8U.^bǙmκCa LWx5B"Bco'%@$ Eg'|9u5^0aVq_95ġB`XWC<"B,*Wb! q99o`N?t|HJw>`2 $�!&xa IiLv9#Tx- l2lϮ-ɡ}0_#x)A#8A]Pa<(` <!2Gyጇ5!FϹ 1`P$ a8 xDP(szFRy I7BA "8@XS^QN<{/#"B4I AA:aW6 $P7Dhq\⤐[4JT*OU3iyr&JL(I%Qu}zAD6bI)"C�HH Ҩ=VU[޲#;�j !c! EP>6TA""D'TJ "Bꔐz6AcVX?_cPj$$"'($sRHJGD6jɖd >T tfCن廃e83ExZTTzbzh YiY~9P,I@rV<v>^;y!`c]~gLy0!R]NFm2L 7/z7fԥ\Sx1Ҿ.ё/Ӡ7l1u9$w Ceu֗GN)),i5ʅVtgQ!gyPa_T~C|nbXZp%nPG_[ik._}YlNWo"#2V^WrD ⑂!0a,e��\1KO�Sj'\ CJIjKBG;0eL.1!>b1:wq~g 0㤂l8hdfXm$JU/'{$KZbM{t8ޗ`kXԌ>k^o6 oԺ?6aDJk05>/:}dQ1ĉ!?K< <YdB6/D hy!]U(Q}G)248,EgČ %B8k,Vr1uz ?ddwЦQgRa^ OtT|o IC"?{㇏2^)@!,n!aX}:Jw+Q}GRclm tvջr2s=>=X?kyzWI� (guNwm t)^ U諌SR7iQk &]"DtSkZguލ+b8z]n=6 \Ԁ$IV3,B~[yg<C] J'o϶Sv\2;R$Ak$>w)+,^wJ6s-4mr؝#\^wDA>J?PBe|5 |)!6! ' oz}ކc6/Tr>3ֶСWv/fZmHH@#4df.}m }^~`ۡ3$$y}޷?}r?UaUwDĐϽ9id~y.~ >Ⱦ0v@) 66]k|7?3�jiߟX1,ze{Sʚmvk9~Q i5w9deO=룭G]. "|niPC վ}ڦ]x$BT;w4ɜu:ssn~ͣgA'x75s#ϭ?E@ (!p8hu493[K恅c3b[咕VN55c3p1륆Vy@�`wFjTH@kqܴ'.-!쁵uCf=3m+l3o?Mܻg>PC ?[>uJV>15 3O;ֳZH;+]4MwLK<=d'TT\H*ɒ>] K{YU)Uշ~]ٺOgeu%)Z\E4^k߶zZ[W,t4*W=h4O|z٩ތ߮PZ띴Scjr7iZRA{aﰹ'cm]{7Z/i+ZNUmUG<^E 8DPqO-ږۊaئloŬ3?È^ßL߇F{h^WpgѶ 5Dj1;lsD?K %':J݀|ݺu߿?I%m6۞={Ν;G4ayyyEEE¢(8qcR B;wd'hjtT\xϟo6Geee-7lؐ&̜͛7M&a$I<yMFmml˗7ۄ��s�PxS#z~D /ꉩ. e œ\z,Рh��W0 baSN0iΙ3gZmFF OΙ3 0$ɠ޸qc܏?x˖-oVovJKK�@Ǐ_ZZzȑÇ/_<..Nt!Р� ĉU#T,_W_/ �߰AQugEQ ={l@7|pׯGڵK{-ٿNKOO}>j7l��:tAرcV-;CaΜ9#_ϙ3'6!֨QJJJv�8q /PWw^EQl4gϞSN_ɓnݺ3 zѵkמ={d21_ зo߽{߿eɓ'�*++yJ5{lVf? qyWՁ/[,999<v5kq\AAI:us�***vEtIII޽ouNSnwA?~EY\ӦMCɤ h;[Nw2A,]TNqW ZRR$ �?7?{7nܐ!CV!TTj"|Xqƍ 64554 �(((u �_TT�0L?C˗+JR111˗/2dFp:A#GZrMOjjj}t�qqq 3gΖ-['1..h4۷!$IW_}e2ƌ#IٳgU*UaaիWB~>��L:!vcbb:ubŊӧO{< xh$I|Wv2p?rE 4H^��lٲE$PyyyrrlF۷Bعs}\_~eРA8?hO?Եk6ߕ?}ߞh7o^~!4o<�CT*0LLL AGm.@4AÆ EQ<}tZZZ+**|> }%� g�V\4i�Ժxg*z}-[555~_N~].rl6�so555��A*++baY)%%ѣyvn֬BðZ �ϗݿR]] �0UUUr!BB�;Wj4@^�@bbbNNαcm|Z֛L)SL2a+W>}6mr8�UV͞=bV7NQ@AB $P &_ 6iժU֭ -"Ir_"IB[ A,*I0-<m(k׮]v}ǎ;tPh#ѷ\78��0SSS}>CKL8QjJƴFKju$I6m*.2C��>t{y9J8 t;/f*6E�УG6~6U$)O/oNhsz-P*#F-XaǏ;Vv[Jr�m۶ 8pǎ_-[&(ϝ;W|d�TUU5 Y9ŋS;P(,Keeebbb��Νk~f:T�nZ{!�ښTh/==y9sȒ.]j233͒zdX;&)++饗B�z(-YjBr5ɚW^�,\PD,^>+++++8YyQ,$YZZ*/;v8p]~sssz0 *qĉ6id52=fqw H6oBkʯȑ# qɒ%!IN �{l޽{7Kaaa2�NSL :999)))@t<(7ѣG͜9SY`ѢE*j3f��8-|g}699YP`222Fx_t]rrرcSSS 0L՚L{lɒ%'Nl��yyy{G[;܁�Ο?O#.]yGv/\@QԸqV\ٽ{w9uz0t>Sݻc!y_~y-zaŋm6-Z~~ 6eʔ Re6KJJYeYVcv=$�r!3n_F %':JOtp(>QAH����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Docs/MIT_license.txt�������������������������������������������0000644�0001750�0000144�00000002106�15104114162�022375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The MIT License Copyright (c) <year> <copyright holders> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-1.1.30/components/kascrypt/Docs/Index.html������������������������������������������������0000644�0001750�0000144�00000025324�15104114162�021445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>DCPcrypt v2: Users Guide - Index

DCPcrypt Cryptographic Component Library v2 Beta 3
Copyright © 1999-2002 David Barton
http://www.cityinthesky.co.uk/
crypto@cityinthesky.co.uk

Introduction

DCPcrypt is a collection of cryptographic components for the Borland Delphi(tm), C++ Builder(tm) and Kylix(tm) programming languages. The supported versions are Delphi 4, 5, 6 and 7, C++ Builder (3?), 4, 5, 6 and Kylix 1 (untested) and 2.

The idea behind DCPcrypt is that it should be possible to "drop in" any algorithm implementation to replace another with minimum or no code changes. To aid in this goal all cryptographic components are descended from one of several base classes, TDCP_cipher for encryption algorithms and TDCP_hash for message digest algorithms.

DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. However, I am currently a student and if you are making money from my software I would really appreciate a donation of some sort, whether financial or a license for the software you develop (or if anyone wants to sponsor a Mathematical Modelling (Masters) student for their final year...). Please note THIS IS NOT COMPULSORY IN ANY WAY. See http://www.cityinthesky.co.uk/cryptography.html for details on donations.

This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative.

If you maintain a website then a link to my page at http://www.cityinthesky.co.uk/ would be great!

 

What's New

Changes since DCPcrypt v2 Beta 2:

  • Corrected C++ Builder compilation problem.

Changes since DCPcrypt v2 Beta 1:

  • Renamed source code files for hashes and ciphers to DCPxxx.pas
  • Change the format of Cipher.InitStr so that the hash algorithm used to generate the key is explicitly specified. In order to get the same functionality as before, use TDCP_sha1. e.g. Cipher.InitStr('Hello World',TDCP_sha1);
  • Block ciphers are now inherited from an intermediate component that implements the block size specific chaining mode encryption routines.
  • Remove the internal component registration, it was more hassle than it was worth. If there is a demand for this to be put back then I might...
  • Added the full range of operation modes for Haval. By changing the defines at the top of DCPhaval.pas you can specify the number of passes and the output hash size.
  • Added the Tiger hash algorithm (192bit digest).
  • Changed the name of the file containing TDCP_ripemd160 for consistency to DCPripemd160 from DCPrmd160.
  • GOST no longer appears on the component palette pending verifying what the actual standard is (the code is still included however).
  • Added the RipeMD-128 hash algorithm (128bit digest).
  • Added the Serpent block cipher (AES finalist).
  • Added the SHA-256,384,512 hash algorithms (256, 384, 512bit digest respectively).
  • Added CTR chaining mode to all block ciphers.

 

Installation

Delphi Open the appropriate package, DCPdelphiX.dpk where X is your version of Delphi (either 4, 5 or 6). Then press the install button.
C++ Builder Create a new design time package and add all the .pas files from the DCPcrypt2.zip archive including all those in the Ciphers and Hashes subdirectories. Then press the install button.
Kylix Open the DCPkylix.dpk package and then press the install button (note: Kylix 1 users may need to create a new package as with C++ Builder as this is a Kylix 2 package).

You may need to add the directory containing DCPcrypt (and the Ciphers and Hashes subdirectories) to your library search path (found under Environment Options).

Once installed you will find two extra pages of components on your component palette, namely DCPciphers and DCPhashes. You can now place these components onto the form of your application to start using the algorithms.

 

Usage

Please note that an appreciation of the basic principles of encryption/decryption and key management is needed to ensure the correct usage of the ciphers implemented within this package. A good introduction on this subject is provided by Bruce Schneier's "Applied Cryptography" (ISBN: 0-471-11709-9) also see the NIST publication SP800-38A for information on the block cipher chaining modes.

  • Ciphers - the basic building block of DCPcrypt, the TDCP_cipher component.
  • Block Ciphers - the base of all block ciphers, the TDCP_blockcipher component.
  • Hashes - the base of all hash algorithms, the TDCP_hash component.

DCPcrypt v2 contains the following ciphers and hash algorithms:

Ciphers
Name Patents Block Size Max Key Size*
Blowfish None 64 bits 448 bits
Cast-128 None 64 bits 128 bits
Cast-256 Patented? 128 bits 256 bits
DES None 64 bits** 64 bits
3DES None 64 bits 192 bits
Ice None? 64 bits 64 bits
Thin Ice None? 64 bits 64 bits
Ice 2 None? 64 bits 128 bits
IDEA Free for non-commercial use 64 bits 128 bits
MARS Patented? 128 bits 1248 bits
Misty1 Free for non-commercial use 64 bits 128 bits
RC2 None 64 bits 1024 bits
RC4 None N/A 2048 bits
RC5 Patented 64 bits 2048 bits
RC6 Patented 128 bits 2048 bits
Rijndael (AES) None 128 bits 256 bits
Serpent None 128 bits 256 bits
TEA None 64 bits 128 bits
Twofish None 128 bits 256 bits

* although the quoted maximum key size may extremely large it doen't mean that the algorithm is secure to the same level.
** a 64bit key is used for DES then every 8th bit is discarded (parity) so the effective size is 56 bits.

Hash Algorithms
Name Patents Digest Size
Haval None 128, 160, 192, 224, 256 bits*
MD4 None 128 bits
MD5 None 128 bits
RipeMD-128 None 128 bits
RipeMD-160 None 160 bits
SHA-1 None 160 bits
SHA-256 None 256 bits
SHA-384 None 384 bits
SHA-512 None 512 bits
Tiger None 192 bits

* The different digest sizes of Haval can be accessed by uncommenting the $defines at the start of DCPhaval.pas.

 

Contact

I appreciate knowing what DCPcrypt is being used for and also if you have any queries or bug reports please email me at crypto@cityinthesky.co.uk.

 

DCPcrypt is copyrighted © 1999-2003 David Barton.
All trademarks are property of their respective owners.
doublecmd-1.1.30/components/kascrypt/Docs/Hashes.html0000644000175000001440000001443215104114162021607 0ustar alexxusers DCPcrypt v2: Users Guide - Hash Algorithms

DCPcrypt Cryptographic Component Library v2
Copyright © 1999-2002 David Barton
http://www.cityinthesky.co.uk/
crypto@cityinthesky.co.uk

Hash Algorithms - TDCP_hash

All hashes are derived from the TDCP_hash component. It provides a range of functions to allow the hashing of virtually every type of data.

Functions available are:

      property Initialized: boolean;
      property Id: integer;
      property Algorithm: string;
      property HashSize: integer;
  
      class function SelfTest: boolean; 
  
      procedure Init; 
      procedure Final(var Digest); 
      procedure Burn; 
  
      procedure Update(const Buffer; Size: longword); 
      procedure UpdateStream(Stream: TStream; Size: longword);
      procedure UpdateStr(const Str: string);
    

Example usage:


property Initialized: boolean;

This is set to true after Init has been called.

property Id: integer;

Every algorithm I implement gets given a unique ID number so that if I use several different algorithms within a program I can determine which one was used. This is a purely arbitrary numbering system.

property Algorithm: string;

This is the name of the algorithm implemented in the component.

property HashSize: integer;

This is the size of the output of the hash algorithm in BITS.

class function SelfTest: boolean;

In order to test whether the implementations have all been compiled correctly you can call the SelfTest function. This compares the results of several hash operations with known results for the algorithms (so called test vectors). If all the tests are passed then true is returned. If ANY of the tests are failed then false is returned. You may want to run this function for all the components when you first install the DCPcrypt package and again if you modify any of the source files, you don't need to run this everytime your program is run. Note: this only performs a selection of tests, it is not exhaustive.

procedure Init;

Call this procedure to initialize the hash algorithm, this must be called before using the Update procedure.

procedure Final(var Digest);

This procedure returns the final message digest (hash) in Digest. This variable must be the same size as the hash size. This procedure also calls Burn to clear any stored information.

procedure Burn;

Call this procedure if you want to abort the hashing operation (normally Final is used). This clears all information stored within the hash. Before the hash can be used again Init must be called.

procedure Update(const Buffer; Size: longword);

This procedure hashes Size bytes of Buffer. To get the hash result call Final.

Update example:

  procedure HashBuffer(const Buffer; Size: longint; var Output);
  var
    Hash: TDCP_ripemd160;
  begin
    Hash:= TDCP_ripemd160.Create(nil);
    Hash.Init;
    Hash.Update(Buffer,Size);
    Hash.Final(Output);
    Hash.Free;
  end;
    

procedure UpdateStream(Stream: TStream; Size: longword);

This procedure hashes Size bytes from Stream. To get the hash result call Final.

procedure UpdateStr(const Str: string);

This procedure hashes the string Str. To get the hash result call Final.


Example 1 - File hashing

This example shows how you can hash the contents of a file

  procedure TForm1.Button1Click(Sender: TObject);
  var
    Hash: TDCP_ripemd160;
    Digest: array[0..19] of byte;  // RipeMD-160 produces a 160bit digest (20bytes)
    Source: TFileStream;
    i: integer;
    s: string;
  begin
    Source:= nil;
    try
      Source:= TFileStream.Create(Edit1.Text,fmOpenRead);  // open the file specified by Edit1
    except
      MessageDlg('Unable to open file',mtError,[mbOK],0);
    end;
    if Source <> nil then
    begin
      Hash:= TDCP_ripemd160.Create(Self);          // create the hash
      Hash.Init;                                   // initialize it
      Hash.UpdateStream(Source,Source.Size);       // hash the stream contents
      Hash.Final(Digest);                          // produce the digest
      Source.Free;
      s:= '';
      for i:= 0 to 19 do
        s:= s + IntToHex(Digest[i],2);
      Edit2.Text:= s;                              // display the digest
    end;
  end;
    

 

Index, Ciphers, Block Ciphers

 

DCPcrypt is copyrighted © 1999-2002 David Barton.
All trademarks are property of their respective owners.
doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/0000755000175000001440000000000015104114162021304 5ustar alexxusersdoublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_TIGER.bmp0000644000175000001440000000062615104114162023474 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_SHA512.bmp0000644000175000001440000000062615104114162023465 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_SHA384.bmp0000644000175000001440000000062615104114162023474 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_SHA256.bmp0000644000175000001440000000062615104114162023472 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_SHA1.bmp0000644000175000001440000000062615104114162023316 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_RIPEMD160.bmp0000644000175000001440000000062615104114162024031 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_RIPEMD128.bmp0000644000175000001440000000062615104114162024035 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_MD5.bmp0000644000175000001440000000062615104114162023207 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_MD4.bmp0000644000175000001440000000062615104114162023206 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPhashes/TDCP_HAVAL.bmp0000644000175000001440000000062615104114162023455 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/0000755000175000001440000000000015104114162021466 5ustar alexxusersdoublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_TWOFISH.bmp0000644000175000001440000000062615104114162024127 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_THINICE.bmp0000644000175000001440000000062615104114162024067 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_TEA.bmp0000644000175000001440000000062615104114162023415 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_SERPENT.bmp0000644000175000001440000000062615104114162024124 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_RIJNDAEL.bmp0000644000175000001440000000062615104114162024174 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_RC6.bmp0000644000175000001440000000062615104114162023376 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_RC5.bmp0000644000175000001440000000062615104114162023375 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_RC4.bmp0000644000175000001440000000062615104114162023374 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_RC2.bmp0000644000175000001440000000062615104114162023372 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_MISTY1.bmp0000644000175000001440000000062615104114162023772 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_MARS.bmp0000644000175000001440000000062615104114162023546 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_IDEA.bmp0000644000175000001440000000062615104114162023506 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_ICE2.bmp0000644000175000001440000000062615104114162023466 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_ICE.bmp0000644000175000001440000000062615104114162023404 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_GOST.bmp0000644000175000001440000000062615104114162023560 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_DES.bmp0000644000175000001440000000062615104114162023417 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_CAST256.bmp0000644000175000001440000000062615104114162023773 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_CAST128.bmp0000644000175000001440000000062615104114162023771 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_BLOWFISH.bmp0000644000175000001440000000062615104114162024221 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/DCPciphers/TDCP_3DES.bmp0000644000175000001440000000062615104114162023502 0ustar alexxusersBMv( doublecmd-1.1.30/components/kascrypt/Docs/Ciphers.html0000644000175000001440000004207115104114162021771 0ustar alexxusers DCPcrypt v2: Users Guide - Ciphers

DCPcrypt Cryptographic Component Library v2
Copyright © 1999-2002 David Barton
http://www.cityinthesky.co.uk/
crypto@cityinthesky.co.uk

Ciphers - TDCP_cipher

All ciphers are inherited from the TDCP_cipher component either directly for stream ciphers (such as RC4) or via the TDCP_blockcipher component.

The TDCP_cipher component implements key initialisation features and the basic encryption/decryption interface. Functions available are:

      property Initialized: boolean;
      property Id: integer;
      property Algorithm: string;
      property MaxKeySize: integer;
  
      class function SelfTest: boolean;
  
      procedure Init(const Key; Size: longword; InitVector: pointer); 
      procedure InitStr(const Key: string; HashType: TDCP_hashclass);
      procedure Burn; 
      procedure Reset;
      procedure Encrypt(const Indata; var Outdata; Size: longword); 
      procedure Decrypt(const Indata; var Outdata; Size: longword); 
      function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
      function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
      function EncryptString(const Str: string): string; 
      function DecryptString(const Str: string): string; 
    

Example usage:


Function descriptions

property Initialized: boolean;

Once key initialization has been performed this property is set to true, otherwise it is set to false. Calling Burn will immediately set this to false.

property Id: integer;

Every algorithm I implement gets given a unique ID number so that if I use several different algorithms within a program I can determine which one was used. This is a purely arbitrary numbering system.

property Algorithm: string;

This contains the name of the algorithm implemented within the component.

property MaxKeySize: integer;

This is the maximum size of key you can pass to the cipher (in bits!).

class function SelfTest: boolean;

In order to test whether the implementations have all been compiled correctly you can call the SelfTest function. This compares the results of several encryption/decryption operations with known results for the algorithms (so called test vectors). If all the tests are passed then true is returned. If ANY of the tests are failed then false is returned. You may want to run this function for all the components when you first install the DCPcrypt package and again if you modify any of the source files, you don't need to run this everytime your program is run. Note: this only performs a selection of tests, it is not exhaustive.

procedure Init(const Key; Size: longword; InitVector: pointer);

This procedure initializes the cipher with the keying material supplied in Key. The Size of the keying material is specified in BITS. The InitVector is a pointer to chaining information (only used for block ciphers). The variable that this points to should be equal to the block size of the algorithm. If nil is specified then (if necessary) an initialization vector is automatically generated from the key. Note: the method for generating automatic IVs is different from DCPcrypt v1.31, if this is a problem uncomment the DCPcrypt v1.31 compatibility mode line in DCPcrypt2.pas.

Init example: use the hash of a string to initialize the cipher

  procedure TForm1.Button1Click(Sender: TObject);
  var
    Cipher: TDCP_rc4;
    Hash: TDCP_sha1;
    Digest: array[0..19] of byte;  // SHA-1 produces a 160bit (20byte) output
  begin
    Hash:= TDCP_sha1.Create(Self);
    Hash.Init;                     // initialize the hash
    Hash.UpdateStr(Edit1.Text);    // generate a hash of Edit1.Text
    Hash.Final(Digest);            // save the hash in Digest
    Hash.Free;
    Cipher:= TDCP_rc4.Create(Self);
    Cipher.Init(Digest,Sizeof(Digest)*8,nil);  // remember size is in BITS (hence sizeof*8)
    ...
    

procedure InitStr(const Key: string; HashType: TDCP_hashclass);

This procedure initializes the cipher with a hash of the key string using the specified hash type (in a way similar to the example above). To replicate the behaviour from DCPcrypt v2 Beta 1 use Cipher.InitStr(KeyStr,TDCP_sha1).

InitStr example: prompt the user for a passphrase to initialize the cipher

  procedure TForm1.Button1Click(Sender: TObject);
  var
    Cipher: TDCP_rc4;
  begin
    Cipher:= TDCP_rc4.Create(Self);
    Cipher.InitStr(InputBox('Passphrase','Enter a passphrase',''),TDCP_sha1); // prompt for a passphrase
    ...
    

procedure Burn;

Once you have finished encrypting/decrypting all your data call Burn to erase all keying information. This is automatically called once the cipher is freed, however it is a good habit to call this procedure explicitly.

procedure Reset;

Stream ciphers (and block ciphers in chaining modes) generally store chaining information that is dependant on the information already encrypted. Consequently decrypting a block of information immediately after encrypting it won't result in the original information because when you called the decrypt procedure the chaining information was different from when you called the encrypt procedure. Hence use Reset to restore the chaining information to it's original state.

Remember that calling EncryptString, DecryptString, EncryptStream and DecryptStream will also affect the chaining information.

Reset example: encrypting and decrypting

  function TestCipher: boolean;
  const
    InData: array[0..9] of byte= ($01,$23,$45,$56,$67,$78,$89,$10,$AB,$FF);
  var
    Cipher: TDCP_rc4;
    Data: array[0..9] of byte;
  begin
    Cipher:= TDCP_rc4.Create(nil);
    Cipher.InitStr('Hello World',TDCP_sha1);   // initialize the cipher
    Cipher.Encrypt(InData,Data,Sizeof(Data));  // encrypt some known data
    Cipher.Decrypt(Data,Data,Sizeof(Data));    // now decrypt it
    Cipher.Burn;                               // clear keying information
    Cipher.Free;
    Result:= CompareMem(@InData,@Data,Sizeof(Data));  // compare input and output
  end;
    
The above will ALWAYS result in false due to the chaining information.
  function TestCipher: boolean;
  const
    InData: array[0..9] of byte= ($01,$23,$45,$56,$67,$78,$89,$10,$AB,$FF);
  var
    Cipher: TDCP_rc4;
    Data: array[0..9] of byte;
  begin
    Cipher:= TDCP_rc4.Create(nil);
    Cipher.InitStr('Hello World',TDCP_sha1);   // initialize the cipher
    Cipher.Encrypt(InData,Data,Sizeof(Data));  // encrypt some known data
    Cipher.Reset;                              // reset chaining information
    Cipher.Decrypt(Data,Data,Sizeof(Data));    // now decrypt it
    Cipher.Burn;                               // clear keying information
    Cipher.Free;
    Result:= CompareMem(@InData,@Data,Sizeof(Data));  // compare input and output
  end;
    
The above should always return true.

procedure Encrypt(const Indata; var Outdata; Size: longword);

Encrypt Size bytes from Indata and place it in Outdata. Block ciphers encrypt the data using the method specified by the CipherMode property. Also see the notes on Reset.

procedure Decrypt(const Indata; var Outdata; Size: longword);

Decrypt Size bytes from Indata and place it in Outdata. Block ciphers decrypt the data using the method specified by the CipherMode property. Also see the notes on Reset.

function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;

Encrypt Size bytes from the InStream and place it in the OutStream, returns the number of bytes read from the InStream. Encryption is done by calling the Encrypt procedure. Also see the notes on Reset.

function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;

Decrypt Size bytes from the InStream and place it in the OutStream, returns the number of bytes read from the InStream. Decryption is done by calling the Decrypt procedure. Also see the notes on Reset.

function EncryptString(const Str: string): string;

Encrypt the string Str then Base64 encode it and return the result. For stream ciphers the Encrypt procedure is called to do the encryption, for block ciphers the CFB8bit method is always used. Base64 encoding is used to ensure that the output string doesn't contain non-printing characters.

function DecryptString(const Str: string): string;

Base64 decode the string then decrypt it and return the result. For stream ciphers the Decrypt procedure is called to do the decryption, for block ciphers the CFB8bit method is always used.


Example 1: String encryption

This example shows how you can encrypt the contents of a TMemo and leave the contents printable.

  procedure TForm1.btnEncryptClick(Sender: TObject);
  var
    i: integer;
    Cipher: TDCP_rc4;
    KeyStr: string;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      Cipher:= TDCP_rc4.Create(Self);
      Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
      for i:= 0 to Memo1.Lines.Count-1 do       // encrypt the contents of the memo
        Memo1.Lines[i]:= Cipher.EncryptString(Memo1.Lines[i]);
      Cipher.Burn;
      Cipher.Free;
    end;
  end;
  
  procedure TForm1.btnDecryptClick(Sender: TObject);
  var
    i: integer;
    Cipher: TDCP_rc4;
    KeyStr: string;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      Cipher:= TDCP_rc4.Create(Self);
      Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
      for i:= 0 to Memo1.Lines.Count-1 do       // decrypt the contents of the memo
        Memo1.Lines[i]:= Cipher.DecryptString(Memo1.Lines[i]);
      Cipher.Burn;
      Cipher.Free;
    end;
  end;
    

Example 2: File encryption

This example shows how you can encrypt the contents of a file, takes the input and output file names from two edit boxes: boxInputFile and boxOutputFile.

  procedure TForm1.btnEncryptClick(Sender: TObject);
  var
    Cipher: TDCP_rc4;
    KeyStr: string;
    Source, Dest: TFileStream;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      try
        Source:= TFileStream.Create(boxInputFile.Text,fmOpenRead);
        Dest:= TFileStream.Create(boxOutputFile.Text,fmCreate);
        Cipher:= TDCP_rc4.Create(Self);
        Cipher.InitStr(KeyStr,TDCP_sha1);              // initialize the cipher with a hash of the passphrase
        Cipher.EncryptStream(Source,Dest,Source.Size); // encrypt the contents of the file
        Cipher.Burn;
        Cipher.Free;
        Dest.Free;
        Source.Free;
        MessageDlg('File encrypted',mtInformation,[mbOK],0);
      except
        MessageDlg('File IO error',mtError,[mbOK],0);
      end;
    end;
  end;
  
  procedure TForm1.btnDecryptClick(Sender: TObject);
  var
    Cipher: TDCP_rc4;
    KeyStr: string;
    Source, Dest: TFileStream;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      try
        Source:= TFileStream.Create(boxInputFile.Text,fmOpenRead);
        Dest:= TFileStream.Create(boxOutputFile.Text,fmCreate);
        Cipher:= TDCP_rc4.Create(Self);
        Cipher.InitStr(KeyStr,TDCP_sha1);              // initialize the cipher with a hash of the passphrase
        Cipher.DecryptStream(Source,Dest,Source.Size); // decrypt the contents of the file
        Cipher.Burn;
        Cipher.Free;
        Dest.Free;
        Source.Free;
        MessageDlg('File decrypted',mtInformation,[mbOK],0);
      except
        MessageDlg('File IO error',mtError,[mbOK],0);
      end;
    end;
  end;
    

Example 3: General encryption

This hypothetical example shows how you might encrypt a packet of information before transmission across a network.

  type
    TSomePacket= record
      Date: double;
      ToUserID: integer;
      FromUserID: integer;
      MsgLen: integer;
      Msg: string;
    end;
    
  procedure EncryptPacket(Cipher: TDCP_cipher; var Packet: TSomePacket);
  // encrypt the information packet with the cipher
  // if the cipher isn't initialized then prompt for passphrase
  begin
    if Cipher= nil then
      raise Exception.Create('Cipher hasn''t been created!')
    else
    begin
      if not Cipher.Initialized then        // check the cipher has been initialized
        Cipher.InitStr(InputBox('Passphrase','Enter passphrase',''),TDCP_sha1);
      if Cipher is TDCP_blockcipher then    // if a block cipher use CFB 8bit as encrypting small packets
        TDCP_blockcipher(Cipher).CipherMode:= cmCFB8bit; 
      // encrypt the record part by part, could do this in one go if it was a packed record
      Cipher.Encrypt(Packet.Date,Packet.Date,Sizeof(Packet.Date));  
      Cipher.Encrypt(Packet.ToUserID,Packet.ToUserID,Sizeof(Packet.ToUserID));
      Cipher.Encrypt(Packet.FromUserID,Packet.FromUserID,Sizeof(Packet.FromUserID));
      Cipher.Encrypt(Packet.MsgLen,Packet.MsgLen,Sizeof(Packet.MsgLen));
      Cipher.Encrypt(Packet.Msg[1],Packet.Msg[1],Length(Packet.Msg));  // slightly different for strings
      // don't bother resetting the cipher, instead keep the chaining information
    end;  
  end;
    

 

Index, Block Ciphers, Hashes

 

DCPcrypt is copyrighted © 1999-2002 David Barton.
All trademarks are property of their respective owners.
doublecmd-1.1.30/components/kascrypt/Docs/BlockCiphers.html0000644000175000001440000001604715104114162022750 0ustar alexxusers DCPcrypt v2: Users Guide - Block Ciphers

DCPcrypt Cryptographic Component Library v2
Copyright © 1999-2002 David Barton
http://www.cityinthesky.co.uk/
crypto@cityinthesky.co.uk

Block Ciphers - TDCP_blockcipher

All block ciphers are inherited from the TDCP_blockcipher component via either the TDCP_blockcipher64 and TDCP_blockcipher128 components (the latter implement the block size specific code).

The TDCP_blockcipher component extends the TDCP_cipher component to provide chaining mode functions. Functions available are:

      property Initialized: boolean;
      property Id: integer;
      property Algorithm: string;
      property MaxKeySize: integer;
      property BlockSize: integer;
      property CipherMode: TDCP_ciphermode;
  
      class function SelfTest: boolean;
 
      procedure SetIV(const Value);
      procedure GetIV(var Value);
 
      procedure Init(const Key; Size: longword; InitVector: pointer); 
      procedure InitStr(const Key: string; HashType: TDCP_hashclass);
      procedure Burn; 
      procedure Reset;
      procedure Encrypt(const Indata; var Outdata; Size: longword); 
      procedure Decrypt(const Indata; var Outdata; Size: longword); 
      function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
      function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
      function EncryptString(const Str: string): string; 
      function DecryptString(const Str: string): string; 
      procedure EncryptECB(const Indata; var Outdata);
      procedure DecryptECB(const Indata; var Outdata);
      procedure EncryptCBC(const Indata; var Outdata; Size: longword);
      procedure DecryptCBC(const Indata; var Outdata; Size: longword);
      procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword);
      procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword);
      procedure EncryptCFBblock(const Indata; var Outdata; Size: longword);
      procedure DecryptCFBblock(const Indata; var Outdata; Size: longword);
      procedure EncryptOFB(const Indata; var Outdata; Size: longword);
      procedure DecryptOFB(const Indata; var Outdata; Size: longword);
      procedure EncryptCTR(const Indata; var Outdata; Size: longword);
      procedure DecryptCTR(const Indata; var Outdata; Size: longword);
    

Function descriptions

property BlockSize: integer;

This contains the block size of the cipher in BITS.

property CipherMode: TDCP_ciphermode;

This is the current chaining mode used when Encrypt is called. The available modes are:

  • cmCBC - Cipher block chaining.
  • cmCFB8bit - 8bit cipher feedback.
  • cmCFBblock - Cipher feedback (using the block size of the algorithm).
  • cmOFB - Output feedback.
  • cmCTR - Counter.

Each chaining mode has it's own pro's and cons. See any good book on cryptography or the NIST publication SP800-38A for details on each.

procedure SetIV(const Value);

Use this procedure to set the current chaining mode information to Value. This variable should be the same size as the block size. When Reset is called subsequent to this, the chaining information will be set back to Value.

procedure GetIV(var Value);

This returns in Value the current chaining mode information, to get the initial chaining mode information you need to call Reset before calling GetIV. The variable passed in Value must be at least the same size as the block size otherwise you will get a buffer overflow.

procedure EncryptCBC(const Indata; var Outdata; Size: longword);
procedure DecryptCBC(const Indata; var Outdata; Size: longword);
procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword);
procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword);
procedure EncryptCFBblock(const Indata; var Outdata; Size: longword);
procedure DecryptCFBblock(const Indata; var Outdata; Size: longword);
procedure EncryptOFB(const Indata; var Outdata; Size: longword);
procedure DecryptOFB(const Indata; var Outdata; Size: longword);
procedure EncryptCTR(const Indata; var Outdata; Size: longword);
procedure DecryptCTR(const Indata; var Outdata; Size: longword);

These procedures encrypt/decrypt Size bytes of data from Indata and places the result in Outdata. These all employ chaining mode methods of encryption/decryption and so may need to be used inconjunction with Reset. The CBC method uses short block encryption as specified in Bruce Schneier's "Applied Cryptography" for data blocks that are not multiples of the block size.

 

Index, Ciphers, Hashes

 

DCPcrypt is copyrighted © 1999-2002 David Barton.
All trademarks are property of their respective owners.
doublecmd-1.1.30/components/kascrypt/Ciphers/0000755000175000001440000000000015104114162020207 5ustar alexxusersdoublecmd-1.1.30/components/kascrypt/Ciphers/dcprijndael.pas0000644000175000001440000003061615104114162023201 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of Rijndael *****************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPrijndael; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst, DCPblockciphers; const BC= 4; MAXROUNDS= 14; type TDCP_rijndael= class(TDCP_blockcipher128) protected numrounds: longword; rk, drk: array[0..MAXROUNDS,0..7] of DWord; procedure InitKey(const Key; Size: longword); override; public class function GetID: integer; override; class function GetAlgorithm: string; override; class function GetMaxKeySize: integer; override; class function SelfTest: boolean; override; procedure Burn; override; procedure EncryptECB(const InData; var OutData); override; procedure DecryptECB(const InData; var OutData); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$I DCPrijndael.inc} class function TDCP_rijndael.GetMaxKeySize: integer; begin Result:= 256; end; class function TDCP_rijndael.GetID: integer; begin Result:= DCP_rijndael; end; class function TDCP_rijndael.GetAlgorithm: string; begin Result:= 'Rijndael'; end; class function TDCP_rijndael.SelfTest: boolean; const Key1: array[0..15] of byte= ($00,$01,$02,$03,$05,$06,$07,$08,$0A,$0B,$0C,$0D,$0F,$10,$11,$12); InData1: array[0..15] of byte= ($50,$68,$12,$A4,$5F,$08,$C8,$89,$B9,$7F,$59,$80,$03,$8B,$83,$59); OutData1: array[0..15] of byte= ($D8,$F5,$32,$53,$82,$89,$EF,$7D,$06,$B5,$06,$A4,$FD,$5B,$E9,$C9); Key2: array[0..23] of byte= ($A0,$A1,$A2,$A3,$A5,$A6,$A7,$A8,$AA,$AB,$AC,$AD,$AF,$B0,$B1,$B2, $B4,$B5,$B6,$B7,$B9,$BA,$BB,$BC); InData2: array[0..15] of byte= ($4F,$1C,$76,$9D,$1E,$5B,$05,$52,$C7,$EC,$A8,$4D,$EA,$26,$A5,$49); OutData2: array[0..15] of byte= ($F3,$84,$72,$10,$D5,$39,$1E,$23,$60,$60,$8E,$5A,$CB,$56,$05,$81); Key3: array[0..31] of byte= ($00,$01,$02,$03,$05,$06,$07,$08,$0A,$0B,$0C,$0D,$0F,$10,$11,$12, $14,$15,$16,$17,$19,$1A,$1B,$1C,$1E,$1F,$20,$21,$23,$24,$25,$26); InData3: array[0..15] of byte= ($5E,$25,$CA,$78,$F0,$DE,$55,$80,$25,$24,$D3,$8D,$A3,$FE,$44,$56); OutData3: array[0..15] of byte= ($E8,$B7,$2B,$4E,$8B,$E2,$43,$43,$8C,$9F,$FF,$1F,$0E,$20,$58,$72); var Block: array[0..15] of byte; Cipher: TDCP_rijndael; begin dcpFillChar(Block, SizeOf(Block), 0); Cipher:= TDCP_rijndael.Create(nil); Cipher.Init(Key1,Sizeof(Key1)*8,nil); Cipher.EncryptECB(InData1,Block); Result:= boolean(CompareMem(@Block,@OutData1,16)); Cipher.DecryptECB(Block,Block); Cipher.Burn; Result:= Result and boolean(CompareMem(@Block,@InData1,16)); Cipher.Init(Key2,Sizeof(Key2)*8,nil); Cipher.EncryptECB(InData2,Block); Result:= Result and boolean(CompareMem(@Block,@OutData2,16)); Cipher.DecryptECB(Block,Block); Cipher.Burn; Result:= Result and boolean(CompareMem(@Block,@InData2,16)); Cipher.Init(Key3,Sizeof(Key3)*8,nil); Cipher.EncryptECB(InData3,Block); Result:= Result and boolean(CompareMem(@Block,@OutData3,16)); Cipher.DecryptECB(Block,Block); Cipher.Burn; Result:= Result and boolean(CompareMem(@Block,@InData3,16)); Cipher.Free; end; procedure InvMixColumn(a: PByteArray; BC: byte); var j: longword; begin for j:= 0 to (BC-1) do PDWord(@(a^[j*4]))^:= PDWord(@U1[a^[j*4+0]])^ xor PDWord(@U2[a^[j*4+1]])^ xor PDWord(@U3[a^[j*4+2]])^ xor PDWord(@U4[a^[j*4+3]])^; end; procedure TDCP_rijndael.InitKey(const Key; Size: longword); var KC, ROUNDS, j, r, t, rconpointer: longword; tk: array[0..MAXKC-1,0..3] of byte; begin Size:= Size div 8; dcpFillChar(tk,Sizeof(tk),0); Move(Key,tk,Size); if Size<= 16 then begin KC:= 4; Rounds:= 10; end else if Size<= 24 then begin KC:= 6; Rounds:= 12; end else begin KC:= 8; Rounds:= 14; end; numrounds:= rounds; r:= 0; t:= 0; j:= 0; while (j< KC) and (r< (rounds+1)) do begin while (j< KC) and (t< BC) do begin rk[r,t]:= PDWord(@tk[j])^; Inc(j); Inc(t); end; if t= BC then begin t:= 0; Inc(r); end; end; rconpointer:= 0; while (r< (rounds+1)) do begin tk[0,0]:= tk[0,0] xor S[tk[KC-1,1]]; tk[0,1]:= tk[0,1] xor S[tk[KC-1,2]]; tk[0,2]:= tk[0,2] xor S[tk[KC-1,3]]; tk[0,3]:= tk[0,3] xor S[tk[KC-1,0]]; tk[0,0]:= tk[0,0] xor rcon[rconpointer]; Inc(rconpointer); if KC<> 8 then begin for j:= 1 to (KC-1) do PDWord(@tk[j])^:= PDWord(@tk[j])^ xor PDWord(@tk[j-1])^; end else begin for j:= 1 to ((KC div 2)-1) do PDWord(@tk[j])^:= PDWord(@tk[j])^ xor PDWord(@tk[j-1])^; tk[KC div 2,0]:= tk[KC div 2,0] xor S[tk[KC div 2 - 1,0]]; tk[KC div 2,1]:= tk[KC div 2,1] xor S[tk[KC div 2 - 1,1]]; tk[KC div 2,2]:= tk[KC div 2,2] xor S[tk[KC div 2 - 1,2]]; tk[KC div 2,3]:= tk[KC div 2,3] xor S[tk[KC div 2 - 1,3]]; for j:= ((KC div 2) + 1) to (KC-1) do PDWord(@tk[j])^:= PDWord(@tk[j])^ xor PDWord(@tk[j-1])^; end; j:= 0; while (j< KC) and (r< (rounds+1)) do begin while (j< KC) and (t< BC) do begin rk[r,t]:= PDWord(@tk[j])^; Inc(j); Inc(t); end; if t= BC then begin Inc(r); t:= 0; end; end; end; Move(rk,drk,Sizeof(rk)); for r:= 1 to (numrounds-1) do InvMixColumn(@drk[r],BC); end; procedure TDCP_rijndael.Burn; begin numrounds:= 0; FillChar(rk,Sizeof(rk),0); FillChar(drk,Sizeof(drk),0); inherited Burn; end; procedure TDCP_rijndael.EncryptECB(const InData; var OutData); var r: longword; tempb: array[0..MAXBC-1,0..3] of byte; a: array[0..MAXBC,0..3] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); PDword(@a[0,0])^:= PDword(@InData)^; PDword(@a[1,0])^:= PDword(pointer(@InData)+4)^; PDword(@a[2,0])^:= PDword(pointer(@InData)+8)^; PDword(@a[3,0])^:= PDword(pointer(@InData)+12)^; for r:= 0 to (numrounds-2) do begin PDWord(@tempb[0])^:= PDWord(@a[0])^ xor rk[r,0]; PDWord(@tempb[1])^:= PDWord(@a[1])^ xor rk[r,1]; PDWord(@tempb[2])^:= PDWord(@a[2])^ xor rk[r,2]; PDWord(@tempb[3])^:= PDWord(@a[3])^ xor rk[r,3]; PDWord(@a[0])^:= PDWord(@T1[tempb[0,0]])^ xor PDWord(@T2[tempb[1,1]])^ xor PDWord(@T3[tempb[2,2]])^ xor PDWord(@T4[tempb[3,3]])^; PDWord(@a[1])^:= PDWord(@T1[tempb[1,0]])^ xor PDWord(@T2[tempb[2,1]])^ xor PDWord(@T3[tempb[3,2]])^ xor PDWord(@T4[tempb[0,3]])^; PDWord(@a[2])^:= PDWord(@T1[tempb[2,0]])^ xor PDWord(@T2[tempb[3,1]])^ xor PDWord(@T3[tempb[0,2]])^ xor PDWord(@T4[tempb[1,3]])^; PDWord(@a[3])^:= PDWord(@T1[tempb[3,0]])^ xor PDWord(@T2[tempb[0,1]])^ xor PDWord(@T3[tempb[1,2]])^ xor PDWord(@T4[tempb[2,3]])^; end; PDWord(@tempb[0])^:= PDWord(@a[0])^ xor rk[numrounds-1,0]; PDWord(@tempb[1])^:= PDWord(@a[1])^ xor rk[numrounds-1,1]; PDWord(@tempb[2])^:= PDWord(@a[2])^ xor rk[numrounds-1,2]; PDWord(@tempb[3])^:= PDWord(@a[3])^ xor rk[numrounds-1,3]; a[0,0]:= T1[tempb[0,0],1]; a[0,1]:= T1[tempb[1,1],1]; a[0,2]:= T1[tempb[2,2],1]; a[0,3]:= T1[tempb[3,3],1]; a[1,0]:= T1[tempb[1,0],1]; a[1,1]:= T1[tempb[2,1],1]; a[1,2]:= T1[tempb[3,2],1]; a[1,3]:= T1[tempb[0,3],1]; a[2,0]:= T1[tempb[2,0],1]; a[2,1]:= T1[tempb[3,1],1]; a[2,2]:= T1[tempb[0,2],1]; a[2,3]:= T1[tempb[1,3],1]; a[3,0]:= T1[tempb[3,0],1]; a[3,1]:= T1[tempb[0,1],1]; a[3,2]:= T1[tempb[1,2],1]; a[3,3]:= T1[tempb[2,3],1]; PDWord(@a[0])^:= PDWord(@a[0])^ xor rk[numrounds,0]; PDWord(@a[1])^:= PDWord(@a[1])^ xor rk[numrounds,1]; PDWord(@a[2])^:= PDWord(@a[2])^ xor rk[numrounds,2]; PDWord(@a[3])^:= PDWord(@a[3])^ xor rk[numrounds,3]; PDword(@OutData)^:= PDword(@a[0,0])^; PDword(pointer(@OutData)+4)^:= PDword(@a[1,0])^; PDword(pointer(@OutData)+8)^:= PDword(@a[2,0])^; PDword(pointer(@OutData)+12)^:= PDword(@a[3,0])^; end; procedure TDCP_rijndael.DecryptECB(const InData; var OutData); var r: longword; tempb: array[0..MAXBC-1,0..3] of byte; a: array[0..MAXBC,0..3] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); PDword(@a[0,0])^:= PDword(@InData)^; PDword(@a[1,0])^:= PDword(pointer(@InData)+4)^; PDword(@a[2,0])^:= PDword(pointer(@InData)+8)^; PDword(@a[3,0])^:= PDword(pointer(@InData)+12)^; for r:= NumRounds downto 2 do begin PDWord(@tempb[0])^:= PDWord(@a[0])^ xor drk[r,0]; PDWord(@tempb[1])^:= PDWord(@a[1])^ xor drk[r,1]; PDWord(@tempb[2])^:= PDWord(@a[2])^ xor drk[r,2]; PDWord(@tempb[3])^:= PDWord(@a[3])^ xor drk[r,3]; PDWord(@a[0])^:= PDWord(@T5[tempb[0,0]])^ xor PDWord(@T6[tempb[3,1]])^ xor PDWord(@T7[tempb[2,2]])^ xor PDWord(@T8[tempb[1,3]])^; PDWord(@a[1])^:= PDWord(@T5[tempb[1,0]])^ xor PDWord(@T6[tempb[0,1]])^ xor PDWord(@T7[tempb[3,2]])^ xor PDWord(@T8[tempb[2,3]])^; PDWord(@a[2])^:= PDWord(@T5[tempb[2,0]])^ xor PDWord(@T6[tempb[1,1]])^ xor PDWord(@T7[tempb[0,2]])^ xor PDWord(@T8[tempb[3,3]])^; PDWord(@a[3])^:= PDWord(@T5[tempb[3,0]])^ xor PDWord(@T6[tempb[2,1]])^ xor PDWord(@T7[tempb[1,2]])^ xor PDWord(@T8[tempb[0,3]])^; end; PDWord(@tempb[0])^:= PDWord(@a[0])^ xor drk[1,0]; PDWord(@tempb[1])^:= PDWord(@a[1])^ xor drk[1,1]; PDWord(@tempb[2])^:= PDWord(@a[2])^ xor drk[1,2]; PDWord(@tempb[3])^:= PDWord(@a[3])^ xor drk[1,3]; a[0,0]:= S5[tempb[0,0]]; a[0,1]:= S5[tempb[3,1]]; a[0,2]:= S5[tempb[2,2]]; a[0,3]:= S5[tempb[1,3]]; a[1,0]:= S5[tempb[1,0]]; a[1,1]:= S5[tempb[0,1]]; a[1,2]:= S5[tempb[3,2]]; a[1,3]:= S5[tempb[2,3]]; a[2,0]:= S5[tempb[2,0]]; a[2,1]:= S5[tempb[1,1]]; a[2,2]:= S5[tempb[0,2]]; a[2,3]:= S5[tempb[3,3]]; a[3,0]:= S5[tempb[3,0]]; a[3,1]:= S5[tempb[2,1]]; a[3,2]:= S5[tempb[1,2]]; a[3,3]:= S5[tempb[0,3]]; PDWord(@a[0])^:= PDWord(@a[0])^ xor drk[0,0]; PDWord(@a[1])^:= PDWord(@a[1])^ xor drk[0,1]; PDWord(@a[2])^:= PDWord(@a[2])^ xor drk[0,2]; PDWord(@a[3])^:= PDWord(@a[3])^ xor drk[0,3]; PDword(@OutData)^:= PDword(@a[0,0])^; PDword(pointer(@OutData)+4)^:= PDword(@a[1,0])^; PDword(pointer(@OutData)+8)^:= PDword(@a[2,0])^; PDword(pointer(@OutData)+12)^:= PDword(@a[3,0])^; end; end. doublecmd-1.1.30/components/kascrypt/Ciphers/DCPrijndael.inc0000644000175000001440000017736715104114162023046 0ustar alexxusersconst MAXBC= 8; MAXKC= 8; S: array[0..255] of byte= ( 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22); T1: array[0..255,0..3] of byte= ( ($c6,$63,$63,$a5), ($f8,$7c,$7c,$84), ($ee,$77,$77,$99), ($f6,$7b,$7b,$8d), ($ff,$f2,$f2,$0d), ($d6,$6b,$6b,$bd), ($de,$6f,$6f,$b1), ($91,$c5,$c5,$54), ($60,$30,$30,$50), ($02,$01,$01,$03), ($ce,$67,$67,$a9), ($56,$2b,$2b,$7d), ($e7,$fe,$fe,$19), ($b5,$d7,$d7,$62), ($4d,$ab,$ab,$e6), ($ec,$76,$76,$9a), ($8f,$ca,$ca,$45), ($1f,$82,$82,$9d), ($89,$c9,$c9,$40), ($fa,$7d,$7d,$87), ($ef,$fa,$fa,$15), ($b2,$59,$59,$eb), ($8e,$47,$47,$c9), ($fb,$f0,$f0,$0b), ($41,$ad,$ad,$ec), ($b3,$d4,$d4,$67), ($5f,$a2,$a2,$fd), ($45,$af,$af,$ea), ($23,$9c,$9c,$bf), ($53,$a4,$a4,$f7), ($e4,$72,$72,$96), ($9b,$c0,$c0,$5b), ($75,$b7,$b7,$c2), ($e1,$fd,$fd,$1c), ($3d,$93,$93,$ae), ($4c,$26,$26,$6a), ($6c,$36,$36,$5a), ($7e,$3f,$3f,$41), ($f5,$f7,$f7,$02), ($83,$cc,$cc,$4f), ($68,$34,$34,$5c), ($51,$a5,$a5,$f4), ($d1,$e5,$e5,$34), ($f9,$f1,$f1,$08), ($e2,$71,$71,$93), ($ab,$d8,$d8,$73), ($62,$31,$31,$53), ($2a,$15,$15,$3f), ($08,$04,$04,$0c), ($95,$c7,$c7,$52), ($46,$23,$23,$65), ($9d,$c3,$c3,$5e), ($30,$18,$18,$28), ($37,$96,$96,$a1), ($0a,$05,$05,$0f), ($2f,$9a,$9a,$b5), ($0e,$07,$07,$09), ($24,$12,$12,$36), ($1b,$80,$80,$9b), ($df,$e2,$e2,$3d), ($cd,$eb,$eb,$26), ($4e,$27,$27,$69), ($7f,$b2,$b2,$cd), ($ea,$75,$75,$9f), ($12,$09,$09,$1b), ($1d,$83,$83,$9e), ($58,$2c,$2c,$74), ($34,$1a,$1a,$2e), ($36,$1b,$1b,$2d), ($dc,$6e,$6e,$b2), ($b4,$5a,$5a,$ee), ($5b,$a0,$a0,$fb), ($a4,$52,$52,$f6), ($76,$3b,$3b,$4d), ($b7,$d6,$d6,$61), ($7d,$b3,$b3,$ce), ($52,$29,$29,$7b), ($dd,$e3,$e3,$3e), ($5e,$2f,$2f,$71), ($13,$84,$84,$97), ($a6,$53,$53,$f5), ($b9,$d1,$d1,$68), ($00,$00,$00,$00), ($c1,$ed,$ed,$2c), ($40,$20,$20,$60), ($e3,$fc,$fc,$1f), ($79,$b1,$b1,$c8), ($b6,$5b,$5b,$ed), ($d4,$6a,$6a,$be), ($8d,$cb,$cb,$46), ($67,$be,$be,$d9), ($72,$39,$39,$4b), ($94,$4a,$4a,$de), ($98,$4c,$4c,$d4), ($b0,$58,$58,$e8), ($85,$cf,$cf,$4a), ($bb,$d0,$d0,$6b), ($c5,$ef,$ef,$2a), ($4f,$aa,$aa,$e5), ($ed,$fb,$fb,$16), ($86,$43,$43,$c5), ($9a,$4d,$4d,$d7), ($66,$33,$33,$55), ($11,$85,$85,$94), ($8a,$45,$45,$cf), ($e9,$f9,$f9,$10), ($04,$02,$02,$06), ($fe,$7f,$7f,$81), ($a0,$50,$50,$f0), ($78,$3c,$3c,$44), ($25,$9f,$9f,$ba), ($4b,$a8,$a8,$e3), ($a2,$51,$51,$f3), ($5d,$a3,$a3,$fe), ($80,$40,$40,$c0), ($05,$8f,$8f,$8a), ($3f,$92,$92,$ad), ($21,$9d,$9d,$bc), ($70,$38,$38,$48), ($f1,$f5,$f5,$04), ($63,$bc,$bc,$df), ($77,$b6,$b6,$c1), ($af,$da,$da,$75), ($42,$21,$21,$63), ($20,$10,$10,$30), ($e5,$ff,$ff,$1a), ($fd,$f3,$f3,$0e), ($bf,$d2,$d2,$6d), ($81,$cd,$cd,$4c), ($18,$0c,$0c,$14), ($26,$13,$13,$35), ($c3,$ec,$ec,$2f), ($be,$5f,$5f,$e1), ($35,$97,$97,$a2), ($88,$44,$44,$cc), ($2e,$17,$17,$39), ($93,$c4,$c4,$57), ($55,$a7,$a7,$f2), ($fc,$7e,$7e,$82), ($7a,$3d,$3d,$47), ($c8,$64,$64,$ac), ($ba,$5d,$5d,$e7), ($32,$19,$19,$2b), ($e6,$73,$73,$95), ($c0,$60,$60,$a0), ($19,$81,$81,$98), ($9e,$4f,$4f,$d1), ($a3,$dc,$dc,$7f), ($44,$22,$22,$66), ($54,$2a,$2a,$7e), ($3b,$90,$90,$ab), ($0b,$88,$88,$83), ($8c,$46,$46,$ca), ($c7,$ee,$ee,$29), ($6b,$b8,$b8,$d3), ($28,$14,$14,$3c), ($a7,$de,$de,$79), ($bc,$5e,$5e,$e2), ($16,$0b,$0b,$1d), ($ad,$db,$db,$76), ($db,$e0,$e0,$3b), ($64,$32,$32,$56), ($74,$3a,$3a,$4e), ($14,$0a,$0a,$1e), ($92,$49,$49,$db), ($0c,$06,$06,$0a), ($48,$24,$24,$6c), ($b8,$5c,$5c,$e4), ($9f,$c2,$c2,$5d), ($bd,$d3,$d3,$6e), ($43,$ac,$ac,$ef), ($c4,$62,$62,$a6), ($39,$91,$91,$a8), ($31,$95,$95,$a4), ($d3,$e4,$e4,$37), ($f2,$79,$79,$8b), ($d5,$e7,$e7,$32), ($8b,$c8,$c8,$43), ($6e,$37,$37,$59), ($da,$6d,$6d,$b7), ($01,$8d,$8d,$8c), ($b1,$d5,$d5,$64), ($9c,$4e,$4e,$d2), ($49,$a9,$a9,$e0), ($d8,$6c,$6c,$b4), ($ac,$56,$56,$fa), ($f3,$f4,$f4,$07), ($cf,$ea,$ea,$25), ($ca,$65,$65,$af), ($f4,$7a,$7a,$8e), ($47,$ae,$ae,$e9), ($10,$08,$08,$18), ($6f,$ba,$ba,$d5), ($f0,$78,$78,$88), ($4a,$25,$25,$6f), ($5c,$2e,$2e,$72), ($38,$1c,$1c,$24), ($57,$a6,$a6,$f1), ($73,$b4,$b4,$c7), ($97,$c6,$c6,$51), ($cb,$e8,$e8,$23), ($a1,$dd,$dd,$7c), ($e8,$74,$74,$9c), ($3e,$1f,$1f,$21), ($96,$4b,$4b,$dd), ($61,$bd,$bd,$dc), ($0d,$8b,$8b,$86), ($0f,$8a,$8a,$85), ($e0,$70,$70,$90), ($7c,$3e,$3e,$42), ($71,$b5,$b5,$c4), ($cc,$66,$66,$aa), ($90,$48,$48,$d8), ($06,$03,$03,$05), ($f7,$f6,$f6,$01), ($1c,$0e,$0e,$12), ($c2,$61,$61,$a3), ($6a,$35,$35,$5f), ($ae,$57,$57,$f9), ($69,$b9,$b9,$d0), ($17,$86,$86,$91), ($99,$c1,$c1,$58), ($3a,$1d,$1d,$27), ($27,$9e,$9e,$b9), ($d9,$e1,$e1,$38), ($eb,$f8,$f8,$13), ($2b,$98,$98,$b3), ($22,$11,$11,$33), ($d2,$69,$69,$bb), ($a9,$d9,$d9,$70), ($07,$8e,$8e,$89), ($33,$94,$94,$a7), ($2d,$9b,$9b,$b6), ($3c,$1e,$1e,$22), ($15,$87,$87,$92), ($c9,$e9,$e9,$20), ($87,$ce,$ce,$49), ($aa,$55,$55,$ff), ($50,$28,$28,$78), ($a5,$df,$df,$7a), ($03,$8c,$8c,$8f), ($59,$a1,$a1,$f8), ($09,$89,$89,$80), ($1a,$0d,$0d,$17), ($65,$bf,$bf,$da), ($d7,$e6,$e6,$31), ($84,$42,$42,$c6), ($d0,$68,$68,$b8), ($82,$41,$41,$c3), ($29,$99,$99,$b0), ($5a,$2d,$2d,$77), ($1e,$0f,$0f,$11), ($7b,$b0,$b0,$cb), ($a8,$54,$54,$fc), ($6d,$bb,$bb,$d6), ($2c,$16,$16,$3a)); T2: array[0..255,0..3] of byte= ( ($a5,$c6,$63,$63), ($84,$f8,$7c,$7c), ($99,$ee,$77,$77), ($8d,$f6,$7b,$7b), ($0d,$ff,$f2,$f2), ($bd,$d6,$6b,$6b), ($b1,$de,$6f,$6f), ($54,$91,$c5,$c5), ($50,$60,$30,$30), ($03,$02,$01,$01), ($a9,$ce,$67,$67), ($7d,$56,$2b,$2b), ($19,$e7,$fe,$fe), ($62,$b5,$d7,$d7), ($e6,$4d,$ab,$ab), ($9a,$ec,$76,$76), ($45,$8f,$ca,$ca), ($9d,$1f,$82,$82), ($40,$89,$c9,$c9), ($87,$fa,$7d,$7d), ($15,$ef,$fa,$fa), ($eb,$b2,$59,$59), ($c9,$8e,$47,$47), ($0b,$fb,$f0,$f0), ($ec,$41,$ad,$ad), ($67,$b3,$d4,$d4), ($fd,$5f,$a2,$a2), ($ea,$45,$af,$af), ($bf,$23,$9c,$9c), ($f7,$53,$a4,$a4), ($96,$e4,$72,$72), ($5b,$9b,$c0,$c0), ($c2,$75,$b7,$b7), ($1c,$e1,$fd,$fd), ($ae,$3d,$93,$93), ($6a,$4c,$26,$26), ($5a,$6c,$36,$36), ($41,$7e,$3f,$3f), ($02,$f5,$f7,$f7), ($4f,$83,$cc,$cc), ($5c,$68,$34,$34), ($f4,$51,$a5,$a5), ($34,$d1,$e5,$e5), ($08,$f9,$f1,$f1), ($93,$e2,$71,$71), ($73,$ab,$d8,$d8), ($53,$62,$31,$31), ($3f,$2a,$15,$15), ($0c,$08,$04,$04), ($52,$95,$c7,$c7), ($65,$46,$23,$23), ($5e,$9d,$c3,$c3), ($28,$30,$18,$18), ($a1,$37,$96,$96), ($0f,$0a,$05,$05), ($b5,$2f,$9a,$9a), ($09,$0e,$07,$07), ($36,$24,$12,$12), ($9b,$1b,$80,$80), ($3d,$df,$e2,$e2), ($26,$cd,$eb,$eb), ($69,$4e,$27,$27), ($cd,$7f,$b2,$b2), ($9f,$ea,$75,$75), ($1b,$12,$09,$09), ($9e,$1d,$83,$83), ($74,$58,$2c,$2c), ($2e,$34,$1a,$1a), ($2d,$36,$1b,$1b), ($b2,$dc,$6e,$6e), ($ee,$b4,$5a,$5a), ($fb,$5b,$a0,$a0), ($f6,$a4,$52,$52), ($4d,$76,$3b,$3b), ($61,$b7,$d6,$d6), ($ce,$7d,$b3,$b3), ($7b,$52,$29,$29), ($3e,$dd,$e3,$e3), ($71,$5e,$2f,$2f), ($97,$13,$84,$84), ($f5,$a6,$53,$53), ($68,$b9,$d1,$d1), ($00,$00,$00,$00), ($2c,$c1,$ed,$ed), ($60,$40,$20,$20), ($1f,$e3,$fc,$fc), ($c8,$79,$b1,$b1), ($ed,$b6,$5b,$5b), ($be,$d4,$6a,$6a), ($46,$8d,$cb,$cb), ($d9,$67,$be,$be), ($4b,$72,$39,$39), ($de,$94,$4a,$4a), ($d4,$98,$4c,$4c), ($e8,$b0,$58,$58), ($4a,$85,$cf,$cf), ($6b,$bb,$d0,$d0), ($2a,$c5,$ef,$ef), ($e5,$4f,$aa,$aa), ($16,$ed,$fb,$fb), ($c5,$86,$43,$43), ($d7,$9a,$4d,$4d), ($55,$66,$33,$33), ($94,$11,$85,$85), ($cf,$8a,$45,$45), ($10,$e9,$f9,$f9), ($06,$04,$02,$02), ($81,$fe,$7f,$7f), ($f0,$a0,$50,$50), ($44,$78,$3c,$3c), ($ba,$25,$9f,$9f), ($e3,$4b,$a8,$a8), ($f3,$a2,$51,$51), ($fe,$5d,$a3,$a3), ($c0,$80,$40,$40), ($8a,$05,$8f,$8f), ($ad,$3f,$92,$92), ($bc,$21,$9d,$9d), ($48,$70,$38,$38), ($04,$f1,$f5,$f5), ($df,$63,$bc,$bc), ($c1,$77,$b6,$b6), ($75,$af,$da,$da), ($63,$42,$21,$21), ($30,$20,$10,$10), ($1a,$e5,$ff,$ff), ($0e,$fd,$f3,$f3), ($6d,$bf,$d2,$d2), ($4c,$81,$cd,$cd), ($14,$18,$0c,$0c), ($35,$26,$13,$13), ($2f,$c3,$ec,$ec), ($e1,$be,$5f,$5f), ($a2,$35,$97,$97), ($cc,$88,$44,$44), ($39,$2e,$17,$17), ($57,$93,$c4,$c4), ($f2,$55,$a7,$a7), ($82,$fc,$7e,$7e), ($47,$7a,$3d,$3d), ($ac,$c8,$64,$64), ($e7,$ba,$5d,$5d), ($2b,$32,$19,$19), ($95,$e6,$73,$73), ($a0,$c0,$60,$60), ($98,$19,$81,$81), ($d1,$9e,$4f,$4f), ($7f,$a3,$dc,$dc), ($66,$44,$22,$22), ($7e,$54,$2a,$2a), ($ab,$3b,$90,$90), ($83,$0b,$88,$88), ($ca,$8c,$46,$46), ($29,$c7,$ee,$ee), ($d3,$6b,$b8,$b8), ($3c,$28,$14,$14), ($79,$a7,$de,$de), ($e2,$bc,$5e,$5e), ($1d,$16,$0b,$0b), ($76,$ad,$db,$db), ($3b,$db,$e0,$e0), ($56,$64,$32,$32), ($4e,$74,$3a,$3a), ($1e,$14,$0a,$0a), ($db,$92,$49,$49), ($0a,$0c,$06,$06), ($6c,$48,$24,$24), ($e4,$b8,$5c,$5c), ($5d,$9f,$c2,$c2), ($6e,$bd,$d3,$d3), ($ef,$43,$ac,$ac), ($a6,$c4,$62,$62), ($a8,$39,$91,$91), ($a4,$31,$95,$95), ($37,$d3,$e4,$e4), ($8b,$f2,$79,$79), ($32,$d5,$e7,$e7), ($43,$8b,$c8,$c8), ($59,$6e,$37,$37), ($b7,$da,$6d,$6d), ($8c,$01,$8d,$8d), ($64,$b1,$d5,$d5), ($d2,$9c,$4e,$4e), ($e0,$49,$a9,$a9), ($b4,$d8,$6c,$6c), ($fa,$ac,$56,$56), ($07,$f3,$f4,$f4), ($25,$cf,$ea,$ea), ($af,$ca,$65,$65), ($8e,$f4,$7a,$7a), ($e9,$47,$ae,$ae), ($18,$10,$08,$08), ($d5,$6f,$ba,$ba), ($88,$f0,$78,$78), ($6f,$4a,$25,$25), ($72,$5c,$2e,$2e), ($24,$38,$1c,$1c), ($f1,$57,$a6,$a6), ($c7,$73,$b4,$b4), ($51,$97,$c6,$c6), ($23,$cb,$e8,$e8), ($7c,$a1,$dd,$dd), ($9c,$e8,$74,$74), ($21,$3e,$1f,$1f), ($dd,$96,$4b,$4b), ($dc,$61,$bd,$bd), ($86,$0d,$8b,$8b), ($85,$0f,$8a,$8a), ($90,$e0,$70,$70), ($42,$7c,$3e,$3e), ($c4,$71,$b5,$b5), ($aa,$cc,$66,$66), ($d8,$90,$48,$48), ($05,$06,$03,$03), ($01,$f7,$f6,$f6), ($12,$1c,$0e,$0e), ($a3,$c2,$61,$61), ($5f,$6a,$35,$35), ($f9,$ae,$57,$57), ($d0,$69,$b9,$b9), ($91,$17,$86,$86), ($58,$99,$c1,$c1), ($27,$3a,$1d,$1d), ($b9,$27,$9e,$9e), ($38,$d9,$e1,$e1), ($13,$eb,$f8,$f8), ($b3,$2b,$98,$98), ($33,$22,$11,$11), ($bb,$d2,$69,$69), ($70,$a9,$d9,$d9), ($89,$07,$8e,$8e), ($a7,$33,$94,$94), ($b6,$2d,$9b,$9b), ($22,$3c,$1e,$1e), ($92,$15,$87,$87), ($20,$c9,$e9,$e9), ($49,$87,$ce,$ce), ($ff,$aa,$55,$55), ($78,$50,$28,$28), ($7a,$a5,$df,$df), ($8f,$03,$8c,$8c), ($f8,$59,$a1,$a1), ($80,$09,$89,$89), ($17,$1a,$0d,$0d), ($da,$65,$bf,$bf), ($31,$d7,$e6,$e6), ($c6,$84,$42,$42), ($b8,$d0,$68,$68), ($c3,$82,$41,$41), ($b0,$29,$99,$99), ($77,$5a,$2d,$2d), ($11,$1e,$0f,$0f), ($cb,$7b,$b0,$b0), ($fc,$a8,$54,$54), ($d6,$6d,$bb,$bb), ($3a,$2c,$16,$16)); T3: array[0..255,0..3] of byte= ( ($63,$a5,$c6,$63), ($7c,$84,$f8,$7c), ($77,$99,$ee,$77), ($7b,$8d,$f6,$7b), ($f2,$0d,$ff,$f2), ($6b,$bd,$d6,$6b), ($6f,$b1,$de,$6f), ($c5,$54,$91,$c5), ($30,$50,$60,$30), ($01,$03,$02,$01), ($67,$a9,$ce,$67), ($2b,$7d,$56,$2b), ($fe,$19,$e7,$fe), ($d7,$62,$b5,$d7), ($ab,$e6,$4d,$ab), ($76,$9a,$ec,$76), ($ca,$45,$8f,$ca), ($82,$9d,$1f,$82), ($c9,$40,$89,$c9), ($7d,$87,$fa,$7d), ($fa,$15,$ef,$fa), ($59,$eb,$b2,$59), ($47,$c9,$8e,$47), ($f0,$0b,$fb,$f0), ($ad,$ec,$41,$ad), ($d4,$67,$b3,$d4), ($a2,$fd,$5f,$a2), ($af,$ea,$45,$af), ($9c,$bf,$23,$9c), ($a4,$f7,$53,$a4), ($72,$96,$e4,$72), ($c0,$5b,$9b,$c0), ($b7,$c2,$75,$b7), ($fd,$1c,$e1,$fd), ($93,$ae,$3d,$93), ($26,$6a,$4c,$26), ($36,$5a,$6c,$36), ($3f,$41,$7e,$3f), ($f7,$02,$f5,$f7), ($cc,$4f,$83,$cc), ($34,$5c,$68,$34), ($a5,$f4,$51,$a5), ($e5,$34,$d1,$e5), ($f1,$08,$f9,$f1), ($71,$93,$e2,$71), ($d8,$73,$ab,$d8), ($31,$53,$62,$31), ($15,$3f,$2a,$15), ($04,$0c,$08,$04), ($c7,$52,$95,$c7), ($23,$65,$46,$23), ($c3,$5e,$9d,$c3), ($18,$28,$30,$18), ($96,$a1,$37,$96), ($05,$0f,$0a,$05), ($9a,$b5,$2f,$9a), ($07,$09,$0e,$07), ($12,$36,$24,$12), ($80,$9b,$1b,$80), ($e2,$3d,$df,$e2), ($eb,$26,$cd,$eb), ($27,$69,$4e,$27), ($b2,$cd,$7f,$b2), ($75,$9f,$ea,$75), ($09,$1b,$12,$09), ($83,$9e,$1d,$83), ($2c,$74,$58,$2c), ($1a,$2e,$34,$1a), ($1b,$2d,$36,$1b), ($6e,$b2,$dc,$6e), ($5a,$ee,$b4,$5a), ($a0,$fb,$5b,$a0), ($52,$f6,$a4,$52), ($3b,$4d,$76,$3b), ($d6,$61,$b7,$d6), ($b3,$ce,$7d,$b3), ($29,$7b,$52,$29), ($e3,$3e,$dd,$e3), ($2f,$71,$5e,$2f), ($84,$97,$13,$84), ($53,$f5,$a6,$53), ($d1,$68,$b9,$d1), ($00,$00,$00,$00), ($ed,$2c,$c1,$ed), ($20,$60,$40,$20), ($fc,$1f,$e3,$fc), ($b1,$c8,$79,$b1), ($5b,$ed,$b6,$5b), ($6a,$be,$d4,$6a), ($cb,$46,$8d,$cb), ($be,$d9,$67,$be), ($39,$4b,$72,$39), ($4a,$de,$94,$4a), ($4c,$d4,$98,$4c), ($58,$e8,$b0,$58), ($cf,$4a,$85,$cf), ($d0,$6b,$bb,$d0), ($ef,$2a,$c5,$ef), ($aa,$e5,$4f,$aa), ($fb,$16,$ed,$fb), ($43,$c5,$86,$43), ($4d,$d7,$9a,$4d), ($33,$55,$66,$33), ($85,$94,$11,$85), ($45,$cf,$8a,$45), ($f9,$10,$e9,$f9), ($02,$06,$04,$02), ($7f,$81,$fe,$7f), ($50,$f0,$a0,$50), ($3c,$44,$78,$3c), ($9f,$ba,$25,$9f), ($a8,$e3,$4b,$a8), ($51,$f3,$a2,$51), ($a3,$fe,$5d,$a3), ($40,$c0,$80,$40), ($8f,$8a,$05,$8f), ($92,$ad,$3f,$92), ($9d,$bc,$21,$9d), ($38,$48,$70,$38), ($f5,$04,$f1,$f5), ($bc,$df,$63,$bc), ($b6,$c1,$77,$b6), ($da,$75,$af,$da), ($21,$63,$42,$21), ($10,$30,$20,$10), ($ff,$1a,$e5,$ff), ($f3,$0e,$fd,$f3), ($d2,$6d,$bf,$d2), ($cd,$4c,$81,$cd), ($0c,$14,$18,$0c), ($13,$35,$26,$13), ($ec,$2f,$c3,$ec), ($5f,$e1,$be,$5f), ($97,$a2,$35,$97), ($44,$cc,$88,$44), ($17,$39,$2e,$17), ($c4,$57,$93,$c4), ($a7,$f2,$55,$a7), ($7e,$82,$fc,$7e), ($3d,$47,$7a,$3d), ($64,$ac,$c8,$64), ($5d,$e7,$ba,$5d), ($19,$2b,$32,$19), ($73,$95,$e6,$73), ($60,$a0,$c0,$60), ($81,$98,$19,$81), ($4f,$d1,$9e,$4f), ($dc,$7f,$a3,$dc), ($22,$66,$44,$22), ($2a,$7e,$54,$2a), ($90,$ab,$3b,$90), ($88,$83,$0b,$88), ($46,$ca,$8c,$46), ($ee,$29,$c7,$ee), ($b8,$d3,$6b,$b8), ($14,$3c,$28,$14), ($de,$79,$a7,$de), ($5e,$e2,$bc,$5e), ($0b,$1d,$16,$0b), ($db,$76,$ad,$db), ($e0,$3b,$db,$e0), ($32,$56,$64,$32), ($3a,$4e,$74,$3a), ($0a,$1e,$14,$0a), ($49,$db,$92,$49), ($06,$0a,$0c,$06), ($24,$6c,$48,$24), ($5c,$e4,$b8,$5c), ($c2,$5d,$9f,$c2), ($d3,$6e,$bd,$d3), ($ac,$ef,$43,$ac), ($62,$a6,$c4,$62), ($91,$a8,$39,$91), ($95,$a4,$31,$95), ($e4,$37,$d3,$e4), ($79,$8b,$f2,$79), ($e7,$32,$d5,$e7), ($c8,$43,$8b,$c8), ($37,$59,$6e,$37), ($6d,$b7,$da,$6d), ($8d,$8c,$01,$8d), ($d5,$64,$b1,$d5), ($4e,$d2,$9c,$4e), ($a9,$e0,$49,$a9), ($6c,$b4,$d8,$6c), ($56,$fa,$ac,$56), ($f4,$07,$f3,$f4), ($ea,$25,$cf,$ea), ($65,$af,$ca,$65), ($7a,$8e,$f4,$7a), ($ae,$e9,$47,$ae), ($08,$18,$10,$08), ($ba,$d5,$6f,$ba), ($78,$88,$f0,$78), ($25,$6f,$4a,$25), ($2e,$72,$5c,$2e), ($1c,$24,$38,$1c), ($a6,$f1,$57,$a6), ($b4,$c7,$73,$b4), ($c6,$51,$97,$c6), ($e8,$23,$cb,$e8), ($dd,$7c,$a1,$dd), ($74,$9c,$e8,$74), ($1f,$21,$3e,$1f), ($4b,$dd,$96,$4b), ($bd,$dc,$61,$bd), ($8b,$86,$0d,$8b), ($8a,$85,$0f,$8a), ($70,$90,$e0,$70), ($3e,$42,$7c,$3e), ($b5,$c4,$71,$b5), ($66,$aa,$cc,$66), ($48,$d8,$90,$48), ($03,$05,$06,$03), ($f6,$01,$f7,$f6), ($0e,$12,$1c,$0e), ($61,$a3,$c2,$61), ($35,$5f,$6a,$35), ($57,$f9,$ae,$57), ($b9,$d0,$69,$b9), ($86,$91,$17,$86), ($c1,$58,$99,$c1), ($1d,$27,$3a,$1d), ($9e,$b9,$27,$9e), ($e1,$38,$d9,$e1), ($f8,$13,$eb,$f8), ($98,$b3,$2b,$98), ($11,$33,$22,$11), ($69,$bb,$d2,$69), ($d9,$70,$a9,$d9), ($8e,$89,$07,$8e), ($94,$a7,$33,$94), ($9b,$b6,$2d,$9b), ($1e,$22,$3c,$1e), ($87,$92,$15,$87), ($e9,$20,$c9,$e9), ($ce,$49,$87,$ce), ($55,$ff,$aa,$55), ($28,$78,$50,$28), ($df,$7a,$a5,$df), ($8c,$8f,$03,$8c), ($a1,$f8,$59,$a1), ($89,$80,$09,$89), ($0d,$17,$1a,$0d), ($bf,$da,$65,$bf), ($e6,$31,$d7,$e6), ($42,$c6,$84,$42), ($68,$b8,$d0,$68), ($41,$c3,$82,$41), ($99,$b0,$29,$99), ($2d,$77,$5a,$2d), ($0f,$11,$1e,$0f), ($b0,$cb,$7b,$b0), ($54,$fc,$a8,$54), ($bb,$d6,$6d,$bb), ($16,$3a,$2c,$16)); T4: array[0..255,0..3] of byte= ( ($63,$63,$a5,$c6), ($7c,$7c,$84,$f8), ($77,$77,$99,$ee), ($7b,$7b,$8d,$f6), ($f2,$f2,$0d,$ff), ($6b,$6b,$bd,$d6), ($6f,$6f,$b1,$de), ($c5,$c5,$54,$91), ($30,$30,$50,$60), ($01,$01,$03,$02), ($67,$67,$a9,$ce), ($2b,$2b,$7d,$56), ($fe,$fe,$19,$e7), ($d7,$d7,$62,$b5), ($ab,$ab,$e6,$4d), ($76,$76,$9a,$ec), ($ca,$ca,$45,$8f), ($82,$82,$9d,$1f), ($c9,$c9,$40,$89), ($7d,$7d,$87,$fa), ($fa,$fa,$15,$ef), ($59,$59,$eb,$b2), ($47,$47,$c9,$8e), ($f0,$f0,$0b,$fb), ($ad,$ad,$ec,$41), ($d4,$d4,$67,$b3), ($a2,$a2,$fd,$5f), ($af,$af,$ea,$45), ($9c,$9c,$bf,$23), ($a4,$a4,$f7,$53), ($72,$72,$96,$e4), ($c0,$c0,$5b,$9b), ($b7,$b7,$c2,$75), ($fd,$fd,$1c,$e1), ($93,$93,$ae,$3d), ($26,$26,$6a,$4c), ($36,$36,$5a,$6c), ($3f,$3f,$41,$7e), ($f7,$f7,$02,$f5), ($cc,$cc,$4f,$83), ($34,$34,$5c,$68), ($a5,$a5,$f4,$51), ($e5,$e5,$34,$d1), ($f1,$f1,$08,$f9), ($71,$71,$93,$e2), ($d8,$d8,$73,$ab), ($31,$31,$53,$62), ($15,$15,$3f,$2a), ($04,$04,$0c,$08), ($c7,$c7,$52,$95), ($23,$23,$65,$46), ($c3,$c3,$5e,$9d), ($18,$18,$28,$30), ($96,$96,$a1,$37), ($05,$05,$0f,$0a), ($9a,$9a,$b5,$2f), ($07,$07,$09,$0e), ($12,$12,$36,$24), ($80,$80,$9b,$1b), ($e2,$e2,$3d,$df), ($eb,$eb,$26,$cd), ($27,$27,$69,$4e), ($b2,$b2,$cd,$7f), ($75,$75,$9f,$ea), ($09,$09,$1b,$12), ($83,$83,$9e,$1d), ($2c,$2c,$74,$58), ($1a,$1a,$2e,$34), ($1b,$1b,$2d,$36), ($6e,$6e,$b2,$dc), ($5a,$5a,$ee,$b4), ($a0,$a0,$fb,$5b), ($52,$52,$f6,$a4), ($3b,$3b,$4d,$76), ($d6,$d6,$61,$b7), ($b3,$b3,$ce,$7d), ($29,$29,$7b,$52), ($e3,$e3,$3e,$dd), ($2f,$2f,$71,$5e), ($84,$84,$97,$13), ($53,$53,$f5,$a6), ($d1,$d1,$68,$b9), ($00,$00,$00,$00), ($ed,$ed,$2c,$c1), ($20,$20,$60,$40), ($fc,$fc,$1f,$e3), ($b1,$b1,$c8,$79), ($5b,$5b,$ed,$b6), ($6a,$6a,$be,$d4), ($cb,$cb,$46,$8d), ($be,$be,$d9,$67), ($39,$39,$4b,$72), ($4a,$4a,$de,$94), ($4c,$4c,$d4,$98), ($58,$58,$e8,$b0), ($cf,$cf,$4a,$85), ($d0,$d0,$6b,$bb), ($ef,$ef,$2a,$c5), ($aa,$aa,$e5,$4f), ($fb,$fb,$16,$ed), ($43,$43,$c5,$86), ($4d,$4d,$d7,$9a), ($33,$33,$55,$66), ($85,$85,$94,$11), ($45,$45,$cf,$8a), ($f9,$f9,$10,$e9), ($02,$02,$06,$04), ($7f,$7f,$81,$fe), ($50,$50,$f0,$a0), ($3c,$3c,$44,$78), ($9f,$9f,$ba,$25), ($a8,$a8,$e3,$4b), ($51,$51,$f3,$a2), ($a3,$a3,$fe,$5d), ($40,$40,$c0,$80), ($8f,$8f,$8a,$05), ($92,$92,$ad,$3f), ($9d,$9d,$bc,$21), ($38,$38,$48,$70), ($f5,$f5,$04,$f1), ($bc,$bc,$df,$63), ($b6,$b6,$c1,$77), ($da,$da,$75,$af), ($21,$21,$63,$42), ($10,$10,$30,$20), ($ff,$ff,$1a,$e5), ($f3,$f3,$0e,$fd), ($d2,$d2,$6d,$bf), ($cd,$cd,$4c,$81), ($0c,$0c,$14,$18), ($13,$13,$35,$26), ($ec,$ec,$2f,$c3), ($5f,$5f,$e1,$be), ($97,$97,$a2,$35), ($44,$44,$cc,$88), ($17,$17,$39,$2e), ($c4,$c4,$57,$93), ($a7,$a7,$f2,$55), ($7e,$7e,$82,$fc), ($3d,$3d,$47,$7a), ($64,$64,$ac,$c8), ($5d,$5d,$e7,$ba), ($19,$19,$2b,$32), ($73,$73,$95,$e6), ($60,$60,$a0,$c0), ($81,$81,$98,$19), ($4f,$4f,$d1,$9e), ($dc,$dc,$7f,$a3), ($22,$22,$66,$44), ($2a,$2a,$7e,$54), ($90,$90,$ab,$3b), ($88,$88,$83,$0b), ($46,$46,$ca,$8c), ($ee,$ee,$29,$c7), ($b8,$b8,$d3,$6b), ($14,$14,$3c,$28), ($de,$de,$79,$a7), ($5e,$5e,$e2,$bc), ($0b,$0b,$1d,$16), ($db,$db,$76,$ad), ($e0,$e0,$3b,$db), ($32,$32,$56,$64), ($3a,$3a,$4e,$74), ($0a,$0a,$1e,$14), ($49,$49,$db,$92), ($06,$06,$0a,$0c), ($24,$24,$6c,$48), ($5c,$5c,$e4,$b8), ($c2,$c2,$5d,$9f), ($d3,$d3,$6e,$bd), ($ac,$ac,$ef,$43), ($62,$62,$a6,$c4), ($91,$91,$a8,$39), ($95,$95,$a4,$31), ($e4,$e4,$37,$d3), ($79,$79,$8b,$f2), ($e7,$e7,$32,$d5), ($c8,$c8,$43,$8b), ($37,$37,$59,$6e), ($6d,$6d,$b7,$da), ($8d,$8d,$8c,$01), ($d5,$d5,$64,$b1), ($4e,$4e,$d2,$9c), ($a9,$a9,$e0,$49), ($6c,$6c,$b4,$d8), ($56,$56,$fa,$ac), ($f4,$f4,$07,$f3), ($ea,$ea,$25,$cf), ($65,$65,$af,$ca), ($7a,$7a,$8e,$f4), ($ae,$ae,$e9,$47), ($08,$08,$18,$10), ($ba,$ba,$d5,$6f), ($78,$78,$88,$f0), ($25,$25,$6f,$4a), ($2e,$2e,$72,$5c), ($1c,$1c,$24,$38), ($a6,$a6,$f1,$57), ($b4,$b4,$c7,$73), ($c6,$c6,$51,$97), ($e8,$e8,$23,$cb), ($dd,$dd,$7c,$a1), ($74,$74,$9c,$e8), ($1f,$1f,$21,$3e), ($4b,$4b,$dd,$96), ($bd,$bd,$dc,$61), ($8b,$8b,$86,$0d), ($8a,$8a,$85,$0f), ($70,$70,$90,$e0), ($3e,$3e,$42,$7c), ($b5,$b5,$c4,$71), ($66,$66,$aa,$cc), ($48,$48,$d8,$90), ($03,$03,$05,$06), ($f6,$f6,$01,$f7), ($0e,$0e,$12,$1c), ($61,$61,$a3,$c2), ($35,$35,$5f,$6a), ($57,$57,$f9,$ae), ($b9,$b9,$d0,$69), ($86,$86,$91,$17), ($c1,$c1,$58,$99), ($1d,$1d,$27,$3a), ($9e,$9e,$b9,$27), ($e1,$e1,$38,$d9), ($f8,$f8,$13,$eb), ($98,$98,$b3,$2b), ($11,$11,$33,$22), ($69,$69,$bb,$d2), ($d9,$d9,$70,$a9), ($8e,$8e,$89,$07), ($94,$94,$a7,$33), ($9b,$9b,$b6,$2d), ($1e,$1e,$22,$3c), ($87,$87,$92,$15), ($e9,$e9,$20,$c9), ($ce,$ce,$49,$87), ($55,$55,$ff,$aa), ($28,$28,$78,$50), ($df,$df,$7a,$a5), ($8c,$8c,$8f,$03), ($a1,$a1,$f8,$59), ($89,$89,$80,$09), ($0d,$0d,$17,$1a), ($bf,$bf,$da,$65), ($e6,$e6,$31,$d7), ($42,$42,$c6,$84), ($68,$68,$b8,$d0), ($41,$41,$c3,$82), ($99,$99,$b0,$29), ($2d,$2d,$77,$5a), ($0f,$0f,$11,$1e), ($b0,$b0,$cb,$7b), ($54,$54,$fc,$a8), ($bb,$bb,$d6,$6d), ($16,$16,$3a,$2c)); T5: array[0..255,0..3] of byte= ( ($51,$f4,$a7,$50), ($7e,$41,$65,$53), ($1a,$17,$a4,$c3), ($3a,$27,$5e,$96), ($3b,$ab,$6b,$cb), ($1f,$9d,$45,$f1), ($ac,$fa,$58,$ab), ($4b,$e3,$03,$93), ($20,$30,$fa,$55), ($ad,$76,$6d,$f6), ($88,$cc,$76,$91), ($f5,$02,$4c,$25), ($4f,$e5,$d7,$fc), ($c5,$2a,$cb,$d7), ($26,$35,$44,$80), ($b5,$62,$a3,$8f), ($de,$b1,$5a,$49), ($25,$ba,$1b,$67), ($45,$ea,$0e,$98), ($5d,$fe,$c0,$e1), ($c3,$2f,$75,$02), ($81,$4c,$f0,$12), ($8d,$46,$97,$a3), ($6b,$d3,$f9,$c6), ($03,$8f,$5f,$e7), ($15,$92,$9c,$95), ($bf,$6d,$7a,$eb), ($95,$52,$59,$da), ($d4,$be,$83,$2d), ($58,$74,$21,$d3), ($49,$e0,$69,$29), ($8e,$c9,$c8,$44), ($75,$c2,$89,$6a), ($f4,$8e,$79,$78), ($99,$58,$3e,$6b), ($27,$b9,$71,$dd), ($be,$e1,$4f,$b6), ($f0,$88,$ad,$17), ($c9,$20,$ac,$66), ($7d,$ce,$3a,$b4), ($63,$df,$4a,$18), ($e5,$1a,$31,$82), ($97,$51,$33,$60), ($62,$53,$7f,$45), ($b1,$64,$77,$e0), ($bb,$6b,$ae,$84), ($fe,$81,$a0,$1c), ($f9,$08,$2b,$94), ($70,$48,$68,$58), ($8f,$45,$fd,$19), ($94,$de,$6c,$87), ($52,$7b,$f8,$b7), ($ab,$73,$d3,$23), ($72,$4b,$02,$e2), ($e3,$1f,$8f,$57), ($66,$55,$ab,$2a), ($b2,$eb,$28,$07), ($2f,$b5,$c2,$03), ($86,$c5,$7b,$9a), ($d3,$37,$08,$a5), ($30,$28,$87,$f2), ($23,$bf,$a5,$b2), ($02,$03,$6a,$ba), ($ed,$16,$82,$5c), ($8a,$cf,$1c,$2b), ($a7,$79,$b4,$92), ($f3,$07,$f2,$f0), ($4e,$69,$e2,$a1), ($65,$da,$f4,$cd), ($06,$05,$be,$d5), ($d1,$34,$62,$1f), ($c4,$a6,$fe,$8a), ($34,$2e,$53,$9d), ($a2,$f3,$55,$a0), ($05,$8a,$e1,$32), ($a4,$f6,$eb,$75), ($0b,$83,$ec,$39), ($40,$60,$ef,$aa), ($5e,$71,$9f,$06), ($bd,$6e,$10,$51), ($3e,$21,$8a,$f9), ($96,$dd,$06,$3d), ($dd,$3e,$05,$ae), ($4d,$e6,$bd,$46), ($91,$54,$8d,$b5), ($71,$c4,$5d,$05), ($04,$06,$d4,$6f), ($60,$50,$15,$ff), ($19,$98,$fb,$24), ($d6,$bd,$e9,$97), ($89,$40,$43,$cc), ($67,$d9,$9e,$77), ($b0,$e8,$42,$bd), ($07,$89,$8b,$88), ($e7,$19,$5b,$38), ($79,$c8,$ee,$db), ($a1,$7c,$0a,$47), ($7c,$42,$0f,$e9), ($f8,$84,$1e,$c9), ($00,$00,$00,$00), ($09,$80,$86,$83), ($32,$2b,$ed,$48), ($1e,$11,$70,$ac), ($6c,$5a,$72,$4e), ($fd,$0e,$ff,$fb), ($0f,$85,$38,$56), ($3d,$ae,$d5,$1e), ($36,$2d,$39,$27), ($0a,$0f,$d9,$64), ($68,$5c,$a6,$21), ($9b,$5b,$54,$d1), ($24,$36,$2e,$3a), ($0c,$0a,$67,$b1), ($93,$57,$e7,$0f), ($b4,$ee,$96,$d2), ($1b,$9b,$91,$9e), ($80,$c0,$c5,$4f), ($61,$dc,$20,$a2), ($5a,$77,$4b,$69), ($1c,$12,$1a,$16), ($e2,$93,$ba,$0a), ($c0,$a0,$2a,$e5), ($3c,$22,$e0,$43), ($12,$1b,$17,$1d), ($0e,$09,$0d,$0b), ($f2,$8b,$c7,$ad), ($2d,$b6,$a8,$b9), ($14,$1e,$a9,$c8), ($57,$f1,$19,$85), ($af,$75,$07,$4c), ($ee,$99,$dd,$bb), ($a3,$7f,$60,$fd), ($f7,$01,$26,$9f), ($5c,$72,$f5,$bc), ($44,$66,$3b,$c5), ($5b,$fb,$7e,$34), ($8b,$43,$29,$76), ($cb,$23,$c6,$dc), ($b6,$ed,$fc,$68), ($b8,$e4,$f1,$63), ($d7,$31,$dc,$ca), ($42,$63,$85,$10), ($13,$97,$22,$40), ($84,$c6,$11,$20), ($85,$4a,$24,$7d), ($d2,$bb,$3d,$f8), ($ae,$f9,$32,$11), ($c7,$29,$a1,$6d), ($1d,$9e,$2f,$4b), ($dc,$b2,$30,$f3), ($0d,$86,$52,$ec), ($77,$c1,$e3,$d0), ($2b,$b3,$16,$6c), ($a9,$70,$b9,$99), ($11,$94,$48,$fa), ($47,$e9,$64,$22), ($a8,$fc,$8c,$c4), ($a0,$f0,$3f,$1a), ($56,$7d,$2c,$d8), ($22,$33,$90,$ef), ($87,$49,$4e,$c7), ($d9,$38,$d1,$c1), ($8c,$ca,$a2,$fe), ($98,$d4,$0b,$36), ($a6,$f5,$81,$cf), ($a5,$7a,$de,$28), ($da,$b7,$8e,$26), ($3f,$ad,$bf,$a4), ($2c,$3a,$9d,$e4), ($50,$78,$92,$0d), ($6a,$5f,$cc,$9b), ($54,$7e,$46,$62), ($f6,$8d,$13,$c2), ($90,$d8,$b8,$e8), ($2e,$39,$f7,$5e), ($82,$c3,$af,$f5), ($9f,$5d,$80,$be), ($69,$d0,$93,$7c), ($6f,$d5,$2d,$a9), ($cf,$25,$12,$b3), ($c8,$ac,$99,$3b), ($10,$18,$7d,$a7), ($e8,$9c,$63,$6e), ($db,$3b,$bb,$7b), ($cd,$26,$78,$09), ($6e,$59,$18,$f4), ($ec,$9a,$b7,$01), ($83,$4f,$9a,$a8), ($e6,$95,$6e,$65), ($aa,$ff,$e6,$7e), ($21,$bc,$cf,$08), ($ef,$15,$e8,$e6), ($ba,$e7,$9b,$d9), ($4a,$6f,$36,$ce), ($ea,$9f,$09,$d4), ($29,$b0,$7c,$d6), ($31,$a4,$b2,$af), ($2a,$3f,$23,$31), ($c6,$a5,$94,$30), ($35,$a2,$66,$c0), ($74,$4e,$bc,$37), ($fc,$82,$ca,$a6), ($e0,$90,$d0,$b0), ($33,$a7,$d8,$15), ($f1,$04,$98,$4a), ($41,$ec,$da,$f7), ($7f,$cd,$50,$0e), ($17,$91,$f6,$2f), ($76,$4d,$d6,$8d), ($43,$ef,$b0,$4d), ($cc,$aa,$4d,$54), ($e4,$96,$04,$df), ($9e,$d1,$b5,$e3), ($4c,$6a,$88,$1b), ($c1,$2c,$1f,$b8), ($46,$65,$51,$7f), ($9d,$5e,$ea,$04), ($01,$8c,$35,$5d), ($fa,$87,$74,$73), ($fb,$0b,$41,$2e), ($b3,$67,$1d,$5a), ($92,$db,$d2,$52), ($e9,$10,$56,$33), ($6d,$d6,$47,$13), ($9a,$d7,$61,$8c), ($37,$a1,$0c,$7a), ($59,$f8,$14,$8e), ($eb,$13,$3c,$89), ($ce,$a9,$27,$ee), ($b7,$61,$c9,$35), ($e1,$1c,$e5,$ed), ($7a,$47,$b1,$3c), ($9c,$d2,$df,$59), ($55,$f2,$73,$3f), ($18,$14,$ce,$79), ($73,$c7,$37,$bf), ($53,$f7,$cd,$ea), ($5f,$fd,$aa,$5b), ($df,$3d,$6f,$14), ($78,$44,$db,$86), ($ca,$af,$f3,$81), ($b9,$68,$c4,$3e), ($38,$24,$34,$2c), ($c2,$a3,$40,$5f), ($16,$1d,$c3,$72), ($bc,$e2,$25,$0c), ($28,$3c,$49,$8b), ($ff,$0d,$95,$41), ($39,$a8,$01,$71), ($08,$0c,$b3,$de), ($d8,$b4,$e4,$9c), ($64,$56,$c1,$90), ($7b,$cb,$84,$61), ($d5,$32,$b6,$70), ($48,$6c,$5c,$74), ($d0,$b8,$57,$42)); T6: array[0..255,0..3] of byte= ( ($50,$51,$f4,$a7), ($53,$7e,$41,$65), ($c3,$1a,$17,$a4), ($96,$3a,$27,$5e), ($cb,$3b,$ab,$6b), ($f1,$1f,$9d,$45), ($ab,$ac,$fa,$58), ($93,$4b,$e3,$03), ($55,$20,$30,$fa), ($f6,$ad,$76,$6d), ($91,$88,$cc,$76), ($25,$f5,$02,$4c), ($fc,$4f,$e5,$d7), ($d7,$c5,$2a,$cb), ($80,$26,$35,$44), ($8f,$b5,$62,$a3), ($49,$de,$b1,$5a), ($67,$25,$ba,$1b), ($98,$45,$ea,$0e), ($e1,$5d,$fe,$c0), ($02,$c3,$2f,$75), ($12,$81,$4c,$f0), ($a3,$8d,$46,$97), ($c6,$6b,$d3,$f9), ($e7,$03,$8f,$5f), ($95,$15,$92,$9c), ($eb,$bf,$6d,$7a), ($da,$95,$52,$59), ($2d,$d4,$be,$83), ($d3,$58,$74,$21), ($29,$49,$e0,$69), ($44,$8e,$c9,$c8), ($6a,$75,$c2,$89), ($78,$f4,$8e,$79), ($6b,$99,$58,$3e), ($dd,$27,$b9,$71), ($b6,$be,$e1,$4f), ($17,$f0,$88,$ad), ($66,$c9,$20,$ac), ($b4,$7d,$ce,$3a), ($18,$63,$df,$4a), ($82,$e5,$1a,$31), ($60,$97,$51,$33), ($45,$62,$53,$7f), ($e0,$b1,$64,$77), ($84,$bb,$6b,$ae), ($1c,$fe,$81,$a0), ($94,$f9,$08,$2b), ($58,$70,$48,$68), ($19,$8f,$45,$fd), ($87,$94,$de,$6c), ($b7,$52,$7b,$f8), ($23,$ab,$73,$d3), ($e2,$72,$4b,$02), ($57,$e3,$1f,$8f), ($2a,$66,$55,$ab), ($07,$b2,$eb,$28), ($03,$2f,$b5,$c2), ($9a,$86,$c5,$7b), ($a5,$d3,$37,$08), ($f2,$30,$28,$87), ($b2,$23,$bf,$a5), ($ba,$02,$03,$6a), ($5c,$ed,$16,$82), ($2b,$8a,$cf,$1c), ($92,$a7,$79,$b4), ($f0,$f3,$07,$f2), ($a1,$4e,$69,$e2), ($cd,$65,$da,$f4), ($d5,$06,$05,$be), ($1f,$d1,$34,$62), ($8a,$c4,$a6,$fe), ($9d,$34,$2e,$53), ($a0,$a2,$f3,$55), ($32,$05,$8a,$e1), ($75,$a4,$f6,$eb), ($39,$0b,$83,$ec), ($aa,$40,$60,$ef), ($06,$5e,$71,$9f), ($51,$bd,$6e,$10), ($f9,$3e,$21,$8a), ($3d,$96,$dd,$06), ($ae,$dd,$3e,$05), ($46,$4d,$e6,$bd), ($b5,$91,$54,$8d), ($05,$71,$c4,$5d), ($6f,$04,$06,$d4), ($ff,$60,$50,$15), ($24,$19,$98,$fb), ($97,$d6,$bd,$e9), ($cc,$89,$40,$43), ($77,$67,$d9,$9e), ($bd,$b0,$e8,$42), ($88,$07,$89,$8b), ($38,$e7,$19,$5b), ($db,$79,$c8,$ee), ($47,$a1,$7c,$0a), ($e9,$7c,$42,$0f), ($c9,$f8,$84,$1e), ($00,$00,$00,$00), ($83,$09,$80,$86), ($48,$32,$2b,$ed), ($ac,$1e,$11,$70), ($4e,$6c,$5a,$72), ($fb,$fd,$0e,$ff), ($56,$0f,$85,$38), ($1e,$3d,$ae,$d5), ($27,$36,$2d,$39), ($64,$0a,$0f,$d9), ($21,$68,$5c,$a6), ($d1,$9b,$5b,$54), ($3a,$24,$36,$2e), ($b1,$0c,$0a,$67), ($0f,$93,$57,$e7), ($d2,$b4,$ee,$96), ($9e,$1b,$9b,$91), ($4f,$80,$c0,$c5), ($a2,$61,$dc,$20), ($69,$5a,$77,$4b), ($16,$1c,$12,$1a), ($0a,$e2,$93,$ba), ($e5,$c0,$a0,$2a), ($43,$3c,$22,$e0), ($1d,$12,$1b,$17), ($0b,$0e,$09,$0d), ($ad,$f2,$8b,$c7), ($b9,$2d,$b6,$a8), ($c8,$14,$1e,$a9), ($85,$57,$f1,$19), ($4c,$af,$75,$07), ($bb,$ee,$99,$dd), ($fd,$a3,$7f,$60), ($9f,$f7,$01,$26), ($bc,$5c,$72,$f5), ($c5,$44,$66,$3b), ($34,$5b,$fb,$7e), ($76,$8b,$43,$29), ($dc,$cb,$23,$c6), ($68,$b6,$ed,$fc), ($63,$b8,$e4,$f1), ($ca,$d7,$31,$dc), ($10,$42,$63,$85), ($40,$13,$97,$22), ($20,$84,$c6,$11), ($7d,$85,$4a,$24), ($f8,$d2,$bb,$3d), ($11,$ae,$f9,$32), ($6d,$c7,$29,$a1), ($4b,$1d,$9e,$2f), ($f3,$dc,$b2,$30), ($ec,$0d,$86,$52), ($d0,$77,$c1,$e3), ($6c,$2b,$b3,$16), ($99,$a9,$70,$b9), ($fa,$11,$94,$48), ($22,$47,$e9,$64), ($c4,$a8,$fc,$8c), ($1a,$a0,$f0,$3f), ($d8,$56,$7d,$2c), ($ef,$22,$33,$90), ($c7,$87,$49,$4e), ($c1,$d9,$38,$d1), ($fe,$8c,$ca,$a2), ($36,$98,$d4,$0b), ($cf,$a6,$f5,$81), ($28,$a5,$7a,$de), ($26,$da,$b7,$8e), ($a4,$3f,$ad,$bf), ($e4,$2c,$3a,$9d), ($0d,$50,$78,$92), ($9b,$6a,$5f,$cc), ($62,$54,$7e,$46), ($c2,$f6,$8d,$13), ($e8,$90,$d8,$b8), ($5e,$2e,$39,$f7), ($f5,$82,$c3,$af), ($be,$9f,$5d,$80), ($7c,$69,$d0,$93), ($a9,$6f,$d5,$2d), ($b3,$cf,$25,$12), ($3b,$c8,$ac,$99), ($a7,$10,$18,$7d), ($6e,$e8,$9c,$63), ($7b,$db,$3b,$bb), ($09,$cd,$26,$78), ($f4,$6e,$59,$18), ($01,$ec,$9a,$b7), ($a8,$83,$4f,$9a), ($65,$e6,$95,$6e), ($7e,$aa,$ff,$e6), ($08,$21,$bc,$cf), ($e6,$ef,$15,$e8), ($d9,$ba,$e7,$9b), ($ce,$4a,$6f,$36), ($d4,$ea,$9f,$09), ($d6,$29,$b0,$7c), ($af,$31,$a4,$b2), ($31,$2a,$3f,$23), ($30,$c6,$a5,$94), ($c0,$35,$a2,$66), ($37,$74,$4e,$bc), ($a6,$fc,$82,$ca), ($b0,$e0,$90,$d0), ($15,$33,$a7,$d8), ($4a,$f1,$04,$98), ($f7,$41,$ec,$da), ($0e,$7f,$cd,$50), ($2f,$17,$91,$f6), ($8d,$76,$4d,$d6), ($4d,$43,$ef,$b0), ($54,$cc,$aa,$4d), ($df,$e4,$96,$04), ($e3,$9e,$d1,$b5), ($1b,$4c,$6a,$88), ($b8,$c1,$2c,$1f), ($7f,$46,$65,$51), ($04,$9d,$5e,$ea), ($5d,$01,$8c,$35), ($73,$fa,$87,$74), ($2e,$fb,$0b,$41), ($5a,$b3,$67,$1d), ($52,$92,$db,$d2), ($33,$e9,$10,$56), ($13,$6d,$d6,$47), ($8c,$9a,$d7,$61), ($7a,$37,$a1,$0c), ($8e,$59,$f8,$14), ($89,$eb,$13,$3c), ($ee,$ce,$a9,$27), ($35,$b7,$61,$c9), ($ed,$e1,$1c,$e5), ($3c,$7a,$47,$b1), ($59,$9c,$d2,$df), ($3f,$55,$f2,$73), ($79,$18,$14,$ce), ($bf,$73,$c7,$37), ($ea,$53,$f7,$cd), ($5b,$5f,$fd,$aa), ($14,$df,$3d,$6f), ($86,$78,$44,$db), ($81,$ca,$af,$f3), ($3e,$b9,$68,$c4), ($2c,$38,$24,$34), ($5f,$c2,$a3,$40), ($72,$16,$1d,$c3), ($0c,$bc,$e2,$25), ($8b,$28,$3c,$49), ($41,$ff,$0d,$95), ($71,$39,$a8,$01), ($de,$08,$0c,$b3), ($9c,$d8,$b4,$e4), ($90,$64,$56,$c1), ($61,$7b,$cb,$84), ($70,$d5,$32,$b6), ($74,$48,$6c,$5c), ($42,$d0,$b8,$57)); T7: array[0..255,0..3] of byte= ( ($a7,$50,$51,$f4), ($65,$53,$7e,$41), ($a4,$c3,$1a,$17), ($5e,$96,$3a,$27), ($6b,$cb,$3b,$ab), ($45,$f1,$1f,$9d), ($58,$ab,$ac,$fa), ($03,$93,$4b,$e3), ($fa,$55,$20,$30), ($6d,$f6,$ad,$76), ($76,$91,$88,$cc), ($4c,$25,$f5,$02), ($d7,$fc,$4f,$e5), ($cb,$d7,$c5,$2a), ($44,$80,$26,$35), ($a3,$8f,$b5,$62), ($5a,$49,$de,$b1), ($1b,$67,$25,$ba), ($0e,$98,$45,$ea), ($c0,$e1,$5d,$fe), ($75,$02,$c3,$2f), ($f0,$12,$81,$4c), ($97,$a3,$8d,$46), ($f9,$c6,$6b,$d3), ($5f,$e7,$03,$8f), ($9c,$95,$15,$92), ($7a,$eb,$bf,$6d), ($59,$da,$95,$52), ($83,$2d,$d4,$be), ($21,$d3,$58,$74), ($69,$29,$49,$e0), ($c8,$44,$8e,$c9), ($89,$6a,$75,$c2), ($79,$78,$f4,$8e), ($3e,$6b,$99,$58), ($71,$dd,$27,$b9), ($4f,$b6,$be,$e1), ($ad,$17,$f0,$88), ($ac,$66,$c9,$20), ($3a,$b4,$7d,$ce), ($4a,$18,$63,$df), ($31,$82,$e5,$1a), ($33,$60,$97,$51), ($7f,$45,$62,$53), ($77,$e0,$b1,$64), ($ae,$84,$bb,$6b), ($a0,$1c,$fe,$81), ($2b,$94,$f9,$08), ($68,$58,$70,$48), ($fd,$19,$8f,$45), ($6c,$87,$94,$de), ($f8,$b7,$52,$7b), ($d3,$23,$ab,$73), ($02,$e2,$72,$4b), ($8f,$57,$e3,$1f), ($ab,$2a,$66,$55), ($28,$07,$b2,$eb), ($c2,$03,$2f,$b5), ($7b,$9a,$86,$c5), ($08,$a5,$d3,$37), ($87,$f2,$30,$28), ($a5,$b2,$23,$bf), ($6a,$ba,$02,$03), ($82,$5c,$ed,$16), ($1c,$2b,$8a,$cf), ($b4,$92,$a7,$79), ($f2,$f0,$f3,$07), ($e2,$a1,$4e,$69), ($f4,$cd,$65,$da), ($be,$d5,$06,$05), ($62,$1f,$d1,$34), ($fe,$8a,$c4,$a6), ($53,$9d,$34,$2e), ($55,$a0,$a2,$f3), ($e1,$32,$05,$8a), ($eb,$75,$a4,$f6), ($ec,$39,$0b,$83), ($ef,$aa,$40,$60), ($9f,$06,$5e,$71), ($10,$51,$bd,$6e), ($8a,$f9,$3e,$21), ($06,$3d,$96,$dd), ($05,$ae,$dd,$3e), ($bd,$46,$4d,$e6), ($8d,$b5,$91,$54), ($5d,$05,$71,$c4), ($d4,$6f,$04,$06), ($15,$ff,$60,$50), ($fb,$24,$19,$98), ($e9,$97,$d6,$bd), ($43,$cc,$89,$40), ($9e,$77,$67,$d9), ($42,$bd,$b0,$e8), ($8b,$88,$07,$89), ($5b,$38,$e7,$19), ($ee,$db,$79,$c8), ($0a,$47,$a1,$7c), ($0f,$e9,$7c,$42), ($1e,$c9,$f8,$84), ($00,$00,$00,$00), ($86,$83,$09,$80), ($ed,$48,$32,$2b), ($70,$ac,$1e,$11), ($72,$4e,$6c,$5a), ($ff,$fb,$fd,$0e), ($38,$56,$0f,$85), ($d5,$1e,$3d,$ae), ($39,$27,$36,$2d), ($d9,$64,$0a,$0f), ($a6,$21,$68,$5c), ($54,$d1,$9b,$5b), ($2e,$3a,$24,$36), ($67,$b1,$0c,$0a), ($e7,$0f,$93,$57), ($96,$d2,$b4,$ee), ($91,$9e,$1b,$9b), ($c5,$4f,$80,$c0), ($20,$a2,$61,$dc), ($4b,$69,$5a,$77), ($1a,$16,$1c,$12), ($ba,$0a,$e2,$93), ($2a,$e5,$c0,$a0), ($e0,$43,$3c,$22), ($17,$1d,$12,$1b), ($0d,$0b,$0e,$09), ($c7,$ad,$f2,$8b), ($a8,$b9,$2d,$b6), ($a9,$c8,$14,$1e), ($19,$85,$57,$f1), ($07,$4c,$af,$75), ($dd,$bb,$ee,$99), ($60,$fd,$a3,$7f), ($26,$9f,$f7,$01), ($f5,$bc,$5c,$72), ($3b,$c5,$44,$66), ($7e,$34,$5b,$fb), ($29,$76,$8b,$43), ($c6,$dc,$cb,$23), ($fc,$68,$b6,$ed), ($f1,$63,$b8,$e4), ($dc,$ca,$d7,$31), ($85,$10,$42,$63), ($22,$40,$13,$97), ($11,$20,$84,$c6), ($24,$7d,$85,$4a), ($3d,$f8,$d2,$bb), ($32,$11,$ae,$f9), ($a1,$6d,$c7,$29), ($2f,$4b,$1d,$9e), ($30,$f3,$dc,$b2), ($52,$ec,$0d,$86), ($e3,$d0,$77,$c1), ($16,$6c,$2b,$b3), ($b9,$99,$a9,$70), ($48,$fa,$11,$94), ($64,$22,$47,$e9), ($8c,$c4,$a8,$fc), ($3f,$1a,$a0,$f0), ($2c,$d8,$56,$7d), ($90,$ef,$22,$33), ($4e,$c7,$87,$49), ($d1,$c1,$d9,$38), ($a2,$fe,$8c,$ca), ($0b,$36,$98,$d4), ($81,$cf,$a6,$f5), ($de,$28,$a5,$7a), ($8e,$26,$da,$b7), ($bf,$a4,$3f,$ad), ($9d,$e4,$2c,$3a), ($92,$0d,$50,$78), ($cc,$9b,$6a,$5f), ($46,$62,$54,$7e), ($13,$c2,$f6,$8d), ($b8,$e8,$90,$d8), ($f7,$5e,$2e,$39), ($af,$f5,$82,$c3), ($80,$be,$9f,$5d), ($93,$7c,$69,$d0), ($2d,$a9,$6f,$d5), ($12,$b3,$cf,$25), ($99,$3b,$c8,$ac), ($7d,$a7,$10,$18), ($63,$6e,$e8,$9c), ($bb,$7b,$db,$3b), ($78,$09,$cd,$26), ($18,$f4,$6e,$59), ($b7,$01,$ec,$9a), ($9a,$a8,$83,$4f), ($6e,$65,$e6,$95), ($e6,$7e,$aa,$ff), ($cf,$08,$21,$bc), ($e8,$e6,$ef,$15), ($9b,$d9,$ba,$e7), ($36,$ce,$4a,$6f), ($09,$d4,$ea,$9f), ($7c,$d6,$29,$b0), ($b2,$af,$31,$a4), ($23,$31,$2a,$3f), ($94,$30,$c6,$a5), ($66,$c0,$35,$a2), ($bc,$37,$74,$4e), ($ca,$a6,$fc,$82), ($d0,$b0,$e0,$90), ($d8,$15,$33,$a7), ($98,$4a,$f1,$04), ($da,$f7,$41,$ec), ($50,$0e,$7f,$cd), ($f6,$2f,$17,$91), ($d6,$8d,$76,$4d), ($b0,$4d,$43,$ef), ($4d,$54,$cc,$aa), ($04,$df,$e4,$96), ($b5,$e3,$9e,$d1), ($88,$1b,$4c,$6a), ($1f,$b8,$c1,$2c), ($51,$7f,$46,$65), ($ea,$04,$9d,$5e), ($35,$5d,$01,$8c), ($74,$73,$fa,$87), ($41,$2e,$fb,$0b), ($1d,$5a,$b3,$67), ($d2,$52,$92,$db), ($56,$33,$e9,$10), ($47,$13,$6d,$d6), ($61,$8c,$9a,$d7), ($0c,$7a,$37,$a1), ($14,$8e,$59,$f8), ($3c,$89,$eb,$13), ($27,$ee,$ce,$a9), ($c9,$35,$b7,$61), ($e5,$ed,$e1,$1c), ($b1,$3c,$7a,$47), ($df,$59,$9c,$d2), ($73,$3f,$55,$f2), ($ce,$79,$18,$14), ($37,$bf,$73,$c7), ($cd,$ea,$53,$f7), ($aa,$5b,$5f,$fd), ($6f,$14,$df,$3d), ($db,$86,$78,$44), ($f3,$81,$ca,$af), ($c4,$3e,$b9,$68), ($34,$2c,$38,$24), ($40,$5f,$c2,$a3), ($c3,$72,$16,$1d), ($25,$0c,$bc,$e2), ($49,$8b,$28,$3c), ($95,$41,$ff,$0d), ($01,$71,$39,$a8), ($b3,$de,$08,$0c), ($e4,$9c,$d8,$b4), ($c1,$90,$64,$56), ($84,$61,$7b,$cb), ($b6,$70,$d5,$32), ($5c,$74,$48,$6c), ($57,$42,$d0,$b8)); T8: array[0..255,0..3] of byte= ( ($f4,$a7,$50,$51), ($41,$65,$53,$7e), ($17,$a4,$c3,$1a), ($27,$5e,$96,$3a), ($ab,$6b,$cb,$3b), ($9d,$45,$f1,$1f), ($fa,$58,$ab,$ac), ($e3,$03,$93,$4b), ($30,$fa,$55,$20), ($76,$6d,$f6,$ad), ($cc,$76,$91,$88), ($02,$4c,$25,$f5), ($e5,$d7,$fc,$4f), ($2a,$cb,$d7,$c5), ($35,$44,$80,$26), ($62,$a3,$8f,$b5), ($b1,$5a,$49,$de), ($ba,$1b,$67,$25), ($ea,$0e,$98,$45), ($fe,$c0,$e1,$5d), ($2f,$75,$02,$c3), ($4c,$f0,$12,$81), ($46,$97,$a3,$8d), ($d3,$f9,$c6,$6b), ($8f,$5f,$e7,$03), ($92,$9c,$95,$15), ($6d,$7a,$eb,$bf), ($52,$59,$da,$95), ($be,$83,$2d,$d4), ($74,$21,$d3,$58), ($e0,$69,$29,$49), ($c9,$c8,$44,$8e), ($c2,$89,$6a,$75), ($8e,$79,$78,$f4), ($58,$3e,$6b,$99), ($b9,$71,$dd,$27), ($e1,$4f,$b6,$be), ($88,$ad,$17,$f0), ($20,$ac,$66,$c9), ($ce,$3a,$b4,$7d), ($df,$4a,$18,$63), ($1a,$31,$82,$e5), ($51,$33,$60,$97), ($53,$7f,$45,$62), ($64,$77,$e0,$b1), ($6b,$ae,$84,$bb), ($81,$a0,$1c,$fe), ($08,$2b,$94,$f9), ($48,$68,$58,$70), ($45,$fd,$19,$8f), ($de,$6c,$87,$94), ($7b,$f8,$b7,$52), ($73,$d3,$23,$ab), ($4b,$02,$e2,$72), ($1f,$8f,$57,$e3), ($55,$ab,$2a,$66), ($eb,$28,$07,$b2), ($b5,$c2,$03,$2f), ($c5,$7b,$9a,$86), ($37,$08,$a5,$d3), ($28,$87,$f2,$30), ($bf,$a5,$b2,$23), ($03,$6a,$ba,$02), ($16,$82,$5c,$ed), ($cf,$1c,$2b,$8a), ($79,$b4,$92,$a7), ($07,$f2,$f0,$f3), ($69,$e2,$a1,$4e), ($da,$f4,$cd,$65), ($05,$be,$d5,$06), ($34,$62,$1f,$d1), ($a6,$fe,$8a,$c4), ($2e,$53,$9d,$34), ($f3,$55,$a0,$a2), ($8a,$e1,$32,$05), ($f6,$eb,$75,$a4), ($83,$ec,$39,$0b), ($60,$ef,$aa,$40), ($71,$9f,$06,$5e), ($6e,$10,$51,$bd), ($21,$8a,$f9,$3e), ($dd,$06,$3d,$96), ($3e,$05,$ae,$dd), ($e6,$bd,$46,$4d), ($54,$8d,$b5,$91), ($c4,$5d,$05,$71), ($06,$d4,$6f,$04), ($50,$15,$ff,$60), ($98,$fb,$24,$19), ($bd,$e9,$97,$d6), ($40,$43,$cc,$89), ($d9,$9e,$77,$67), ($e8,$42,$bd,$b0), ($89,$8b,$88,$07), ($19,$5b,$38,$e7), ($c8,$ee,$db,$79), ($7c,$0a,$47,$a1), ($42,$0f,$e9,$7c), ($84,$1e,$c9,$f8), ($00,$00,$00,$00), ($80,$86,$83,$09), ($2b,$ed,$48,$32), ($11,$70,$ac,$1e), ($5a,$72,$4e,$6c), ($0e,$ff,$fb,$fd), ($85,$38,$56,$0f), ($ae,$d5,$1e,$3d), ($2d,$39,$27,$36), ($0f,$d9,$64,$0a), ($5c,$a6,$21,$68), ($5b,$54,$d1,$9b), ($36,$2e,$3a,$24), ($0a,$67,$b1,$0c), ($57,$e7,$0f,$93), ($ee,$96,$d2,$b4), ($9b,$91,$9e,$1b), ($c0,$c5,$4f,$80), ($dc,$20,$a2,$61), ($77,$4b,$69,$5a), ($12,$1a,$16,$1c), ($93,$ba,$0a,$e2), ($a0,$2a,$e5,$c0), ($22,$e0,$43,$3c), ($1b,$17,$1d,$12), ($09,$0d,$0b,$0e), ($8b,$c7,$ad,$f2), ($b6,$a8,$b9,$2d), ($1e,$a9,$c8,$14), ($f1,$19,$85,$57), ($75,$07,$4c,$af), ($99,$dd,$bb,$ee), ($7f,$60,$fd,$a3), ($01,$26,$9f,$f7), ($72,$f5,$bc,$5c), ($66,$3b,$c5,$44), ($fb,$7e,$34,$5b), ($43,$29,$76,$8b), ($23,$c6,$dc,$cb), ($ed,$fc,$68,$b6), ($e4,$f1,$63,$b8), ($31,$dc,$ca,$d7), ($63,$85,$10,$42), ($97,$22,$40,$13), ($c6,$11,$20,$84), ($4a,$24,$7d,$85), ($bb,$3d,$f8,$d2), ($f9,$32,$11,$ae), ($29,$a1,$6d,$c7), ($9e,$2f,$4b,$1d), ($b2,$30,$f3,$dc), ($86,$52,$ec,$0d), ($c1,$e3,$d0,$77), ($b3,$16,$6c,$2b), ($70,$b9,$99,$a9), ($94,$48,$fa,$11), ($e9,$64,$22,$47), ($fc,$8c,$c4,$a8), ($f0,$3f,$1a,$a0), ($7d,$2c,$d8,$56), ($33,$90,$ef,$22), ($49,$4e,$c7,$87), ($38,$d1,$c1,$d9), ($ca,$a2,$fe,$8c), ($d4,$0b,$36,$98), ($f5,$81,$cf,$a6), ($7a,$de,$28,$a5), ($b7,$8e,$26,$da), ($ad,$bf,$a4,$3f), ($3a,$9d,$e4,$2c), ($78,$92,$0d,$50), ($5f,$cc,$9b,$6a), ($7e,$46,$62,$54), ($8d,$13,$c2,$f6), ($d8,$b8,$e8,$90), ($39,$f7,$5e,$2e), ($c3,$af,$f5,$82), ($5d,$80,$be,$9f), ($d0,$93,$7c,$69), ($d5,$2d,$a9,$6f), ($25,$12,$b3,$cf), ($ac,$99,$3b,$c8), ($18,$7d,$a7,$10), ($9c,$63,$6e,$e8), ($3b,$bb,$7b,$db), ($26,$78,$09,$cd), ($59,$18,$f4,$6e), ($9a,$b7,$01,$ec), ($4f,$9a,$a8,$83), ($95,$6e,$65,$e6), ($ff,$e6,$7e,$aa), ($bc,$cf,$08,$21), ($15,$e8,$e6,$ef), ($e7,$9b,$d9,$ba), ($6f,$36,$ce,$4a), ($9f,$09,$d4,$ea), ($b0,$7c,$d6,$29), ($a4,$b2,$af,$31), ($3f,$23,$31,$2a), ($a5,$94,$30,$c6), ($a2,$66,$c0,$35), ($4e,$bc,$37,$74), ($82,$ca,$a6,$fc), ($90,$d0,$b0,$e0), ($a7,$d8,$15,$33), ($04,$98,$4a,$f1), ($ec,$da,$f7,$41), ($cd,$50,$0e,$7f), ($91,$f6,$2f,$17), ($4d,$d6,$8d,$76), ($ef,$b0,$4d,$43), ($aa,$4d,$54,$cc), ($96,$04,$df,$e4), ($d1,$b5,$e3,$9e), ($6a,$88,$1b,$4c), ($2c,$1f,$b8,$c1), ($65,$51,$7f,$46), ($5e,$ea,$04,$9d), ($8c,$35,$5d,$01), ($87,$74,$73,$fa), ($0b,$41,$2e,$fb), ($67,$1d,$5a,$b3), ($db,$d2,$52,$92), ($10,$56,$33,$e9), ($d6,$47,$13,$6d), ($d7,$61,$8c,$9a), ($a1,$0c,$7a,$37), ($f8,$14,$8e,$59), ($13,$3c,$89,$eb), ($a9,$27,$ee,$ce), ($61,$c9,$35,$b7), ($1c,$e5,$ed,$e1), ($47,$b1,$3c,$7a), ($d2,$df,$59,$9c), ($f2,$73,$3f,$55), ($14,$ce,$79,$18), ($c7,$37,$bf,$73), ($f7,$cd,$ea,$53), ($fd,$aa,$5b,$5f), ($3d,$6f,$14,$df), ($44,$db,$86,$78), ($af,$f3,$81,$ca), ($68,$c4,$3e,$b9), ($24,$34,$2c,$38), ($a3,$40,$5f,$c2), ($1d,$c3,$72,$16), ($e2,$25,$0c,$bc), ($3c,$49,$8b,$28), ($0d,$95,$41,$ff), ($a8,$01,$71,$39), ($0c,$b3,$de,$08), ($b4,$e4,$9c,$d8), ($56,$c1,$90,$64), ($cb,$84,$61,$7b), ($32,$b6,$70,$d5), ($6c,$5c,$74,$48), ($b8,$57,$42,$d0)); S5: array[0..255] of byte= ( $52,$09,$6a,$d5, $30,$36,$a5,$38, $bf,$40,$a3,$9e, $81,$f3,$d7,$fb, $7c,$e3,$39,$82, $9b,$2f,$ff,$87, $34,$8e,$43,$44, $c4,$de,$e9,$cb, $54,$7b,$94,$32, $a6,$c2,$23,$3d, $ee,$4c,$95,$0b, $42,$fa,$c3,$4e, $08,$2e,$a1,$66, $28,$d9,$24,$b2, $76,$5b,$a2,$49, $6d,$8b,$d1,$25, $72,$f8,$f6,$64, $86,$68,$98,$16, $d4,$a4,$5c,$cc, $5d,$65,$b6,$92, $6c,$70,$48,$50, $fd,$ed,$b9,$da, $5e,$15,$46,$57, $a7,$8d,$9d,$84, $90,$d8,$ab,$00, $8c,$bc,$d3,$0a, $f7,$e4,$58,$05, $b8,$b3,$45,$06, $d0,$2c,$1e,$8f, $ca,$3f,$0f,$02, $c1,$af,$bd,$03, $01,$13,$8a,$6b, $3a,$91,$11,$41, $4f,$67,$dc,$ea, $97,$f2,$cf,$ce, $f0,$b4,$e6,$73, $96,$ac,$74,$22, $e7,$ad,$35,$85, $e2,$f9,$37,$e8, $1c,$75,$df,$6e, $47,$f1,$1a,$71, $1d,$29,$c5,$89, $6f,$b7,$62,$0e, $aa,$18,$be,$1b, $fc,$56,$3e,$4b, $c6,$d2,$79,$20, $9a,$db,$c0,$fe, $78,$cd,$5a,$f4, $1f,$dd,$a8,$33, $88,$07,$c7,$31, $b1,$12,$10,$59, $27,$80,$ec,$5f, $60,$51,$7f,$a9, $19,$b5,$4a,$0d, $2d,$e5,$7a,$9f, $93,$c9,$9c,$ef, $a0,$e0,$3b,$4d, $ae,$2a,$f5,$b0, $c8,$eb,$bb,$3c, $83,$53,$99,$61, $17,$2b,$04,$7e, $ba,$77,$d6,$26, $e1,$69,$14,$63, $55,$21,$0c,$7d); U1: array[0..255,0..3] of byte= ( ($00,$00,$00,$00), ($0e,$09,$0d,$0b), ($1c,$12,$1a,$16), ($12,$1b,$17,$1d), ($38,$24,$34,$2c), ($36,$2d,$39,$27), ($24,$36,$2e,$3a), ($2a,$3f,$23,$31), ($70,$48,$68,$58), ($7e,$41,$65,$53), ($6c,$5a,$72,$4e), ($62,$53,$7f,$45), ($48,$6c,$5c,$74), ($46,$65,$51,$7f), ($54,$7e,$46,$62), ($5a,$77,$4b,$69), ($e0,$90,$d0,$b0), ($ee,$99,$dd,$bb), ($fc,$82,$ca,$a6), ($f2,$8b,$c7,$ad), ($d8,$b4,$e4,$9c), ($d6,$bd,$e9,$97), ($c4,$a6,$fe,$8a), ($ca,$af,$f3,$81), ($90,$d8,$b8,$e8), ($9e,$d1,$b5,$e3), ($8c,$ca,$a2,$fe), ($82,$c3,$af,$f5), ($a8,$fc,$8c,$c4), ($a6,$f5,$81,$cf), ($b4,$ee,$96,$d2), ($ba,$e7,$9b,$d9), ($db,$3b,$bb,$7b), ($d5,$32,$b6,$70), ($c7,$29,$a1,$6d), ($c9,$20,$ac,$66), ($e3,$1f,$8f,$57), ($ed,$16,$82,$5c), ($ff,$0d,$95,$41), ($f1,$04,$98,$4a), ($ab,$73,$d3,$23), ($a5,$7a,$de,$28), ($b7,$61,$c9,$35), ($b9,$68,$c4,$3e), ($93,$57,$e7,$0f), ($9d,$5e,$ea,$04), ($8f,$45,$fd,$19), ($81,$4c,$f0,$12), ($3b,$ab,$6b,$cb), ($35,$a2,$66,$c0), ($27,$b9,$71,$dd), ($29,$b0,$7c,$d6), ($03,$8f,$5f,$e7), ($0d,$86,$52,$ec), ($1f,$9d,$45,$f1), ($11,$94,$48,$fa), ($4b,$e3,$03,$93), ($45,$ea,$0e,$98), ($57,$f1,$19,$85), ($59,$f8,$14,$8e), ($73,$c7,$37,$bf), ($7d,$ce,$3a,$b4), ($6f,$d5,$2d,$a9), ($61,$dc,$20,$a2), ($ad,$76,$6d,$f6), ($a3,$7f,$60,$fd), ($b1,$64,$77,$e0), ($bf,$6d,$7a,$eb), ($95,$52,$59,$da), ($9b,$5b,$54,$d1), ($89,$40,$43,$cc), ($87,$49,$4e,$c7), ($dd,$3e,$05,$ae), ($d3,$37,$08,$a5), ($c1,$2c,$1f,$b8), ($cf,$25,$12,$b3), ($e5,$1a,$31,$82), ($eb,$13,$3c,$89), ($f9,$08,$2b,$94), ($f7,$01,$26,$9f), ($4d,$e6,$bd,$46), ($43,$ef,$b0,$4d), ($51,$f4,$a7,$50), ($5f,$fd,$aa,$5b), ($75,$c2,$89,$6a), ($7b,$cb,$84,$61), ($69,$d0,$93,$7c), ($67,$d9,$9e,$77), ($3d,$ae,$d5,$1e), ($33,$a7,$d8,$15), ($21,$bc,$cf,$08), ($2f,$b5,$c2,$03), ($05,$8a,$e1,$32), ($0b,$83,$ec,$39), ($19,$98,$fb,$24), ($17,$91,$f6,$2f), ($76,$4d,$d6,$8d), ($78,$44,$db,$86), ($6a,$5f,$cc,$9b), ($64,$56,$c1,$90), ($4e,$69,$e2,$a1), ($40,$60,$ef,$aa), ($52,$7b,$f8,$b7), ($5c,$72,$f5,$bc), ($06,$05,$be,$d5), ($08,$0c,$b3,$de), ($1a,$17,$a4,$c3), ($14,$1e,$a9,$c8), ($3e,$21,$8a,$f9), ($30,$28,$87,$f2), ($22,$33,$90,$ef), ($2c,$3a,$9d,$e4), ($96,$dd,$06,$3d), ($98,$d4,$0b,$36), ($8a,$cf,$1c,$2b), ($84,$c6,$11,$20), ($ae,$f9,$32,$11), ($a0,$f0,$3f,$1a), ($b2,$eb,$28,$07), ($bc,$e2,$25,$0c), ($e6,$95,$6e,$65), ($e8,$9c,$63,$6e), ($fa,$87,$74,$73), ($f4,$8e,$79,$78), ($de,$b1,$5a,$49), ($d0,$b8,$57,$42), ($c2,$a3,$40,$5f), ($cc,$aa,$4d,$54), ($41,$ec,$da,$f7), ($4f,$e5,$d7,$fc), ($5d,$fe,$c0,$e1), ($53,$f7,$cd,$ea), ($79,$c8,$ee,$db), ($77,$c1,$e3,$d0), ($65,$da,$f4,$cd), ($6b,$d3,$f9,$c6), ($31,$a4,$b2,$af), ($3f,$ad,$bf,$a4), ($2d,$b6,$a8,$b9), ($23,$bf,$a5,$b2), ($09,$80,$86,$83), ($07,$89,$8b,$88), ($15,$92,$9c,$95), ($1b,$9b,$91,$9e), ($a1,$7c,$0a,$47), ($af,$75,$07,$4c), ($bd,$6e,$10,$51), ($b3,$67,$1d,$5a), ($99,$58,$3e,$6b), ($97,$51,$33,$60), ($85,$4a,$24,$7d), ($8b,$43,$29,$76), ($d1,$34,$62,$1f), ($df,$3d,$6f,$14), ($cd,$26,$78,$09), ($c3,$2f,$75,$02), ($e9,$10,$56,$33), ($e7,$19,$5b,$38), ($f5,$02,$4c,$25), ($fb,$0b,$41,$2e), ($9a,$d7,$61,$8c), ($94,$de,$6c,$87), ($86,$c5,$7b,$9a), ($88,$cc,$76,$91), ($a2,$f3,$55,$a0), ($ac,$fa,$58,$ab), ($be,$e1,$4f,$b6), ($b0,$e8,$42,$bd), ($ea,$9f,$09,$d4), ($e4,$96,$04,$df), ($f6,$8d,$13,$c2), ($f8,$84,$1e,$c9), ($d2,$bb,$3d,$f8), ($dc,$b2,$30,$f3), ($ce,$a9,$27,$ee), ($c0,$a0,$2a,$e5), ($7a,$47,$b1,$3c), ($74,$4e,$bc,$37), ($66,$55,$ab,$2a), ($68,$5c,$a6,$21), ($42,$63,$85,$10), ($4c,$6a,$88,$1b), ($5e,$71,$9f,$06), ($50,$78,$92,$0d), ($0a,$0f,$d9,$64), ($04,$06,$d4,$6f), ($16,$1d,$c3,$72), ($18,$14,$ce,$79), ($32,$2b,$ed,$48), ($3c,$22,$e0,$43), ($2e,$39,$f7,$5e), ($20,$30,$fa,$55), ($ec,$9a,$b7,$01), ($e2,$93,$ba,$0a), ($f0,$88,$ad,$17), ($fe,$81,$a0,$1c), ($d4,$be,$83,$2d), ($da,$b7,$8e,$26), ($c8,$ac,$99,$3b), ($c6,$a5,$94,$30), ($9c,$d2,$df,$59), ($92,$db,$d2,$52), ($80,$c0,$c5,$4f), ($8e,$c9,$c8,$44), ($a4,$f6,$eb,$75), ($aa,$ff,$e6,$7e), ($b8,$e4,$f1,$63), ($b6,$ed,$fc,$68), ($0c,$0a,$67,$b1), ($02,$03,$6a,$ba), ($10,$18,$7d,$a7), ($1e,$11,$70,$ac), ($34,$2e,$53,$9d), ($3a,$27,$5e,$96), ($28,$3c,$49,$8b), ($26,$35,$44,$80), ($7c,$42,$0f,$e9), ($72,$4b,$02,$e2), ($60,$50,$15,$ff), ($6e,$59,$18,$f4), ($44,$66,$3b,$c5), ($4a,$6f,$36,$ce), ($58,$74,$21,$d3), ($56,$7d,$2c,$d8), ($37,$a1,$0c,$7a), ($39,$a8,$01,$71), ($2b,$b3,$16,$6c), ($25,$ba,$1b,$67), ($0f,$85,$38,$56), ($01,$8c,$35,$5d), ($13,$97,$22,$40), ($1d,$9e,$2f,$4b), ($47,$e9,$64,$22), ($49,$e0,$69,$29), ($5b,$fb,$7e,$34), ($55,$f2,$73,$3f), ($7f,$cd,$50,$0e), ($71,$c4,$5d,$05), ($63,$df,$4a,$18), ($6d,$d6,$47,$13), ($d7,$31,$dc,$ca), ($d9,$38,$d1,$c1), ($cb,$23,$c6,$dc), ($c5,$2a,$cb,$d7), ($ef,$15,$e8,$e6), ($e1,$1c,$e5,$ed), ($f3,$07,$f2,$f0), ($fd,$0e,$ff,$fb), ($a7,$79,$b4,$92), ($a9,$70,$b9,$99), ($bb,$6b,$ae,$84), ($b5,$62,$a3,$8f), ($9f,$5d,$80,$be), ($91,$54,$8d,$b5), ($83,$4f,$9a,$a8), ($8d,$46,$97,$a3)); U2: array[0..255,0..3] of byte= ( ($00,$00,$00,$00), ($0b,$0e,$09,$0d), ($16,$1c,$12,$1a), ($1d,$12,$1b,$17), ($2c,$38,$24,$34), ($27,$36,$2d,$39), ($3a,$24,$36,$2e), ($31,$2a,$3f,$23), ($58,$70,$48,$68), ($53,$7e,$41,$65), ($4e,$6c,$5a,$72), ($45,$62,$53,$7f), ($74,$48,$6c,$5c), ($7f,$46,$65,$51), ($62,$54,$7e,$46), ($69,$5a,$77,$4b), ($b0,$e0,$90,$d0), ($bb,$ee,$99,$dd), ($a6,$fc,$82,$ca), ($ad,$f2,$8b,$c7), ($9c,$d8,$b4,$e4), ($97,$d6,$bd,$e9), ($8a,$c4,$a6,$fe), ($81,$ca,$af,$f3), ($e8,$90,$d8,$b8), ($e3,$9e,$d1,$b5), ($fe,$8c,$ca,$a2), ($f5,$82,$c3,$af), ($c4,$a8,$fc,$8c), ($cf,$a6,$f5,$81), ($d2,$b4,$ee,$96), ($d9,$ba,$e7,$9b), ($7b,$db,$3b,$bb), ($70,$d5,$32,$b6), ($6d,$c7,$29,$a1), ($66,$c9,$20,$ac), ($57,$e3,$1f,$8f), ($5c,$ed,$16,$82), ($41,$ff,$0d,$95), ($4a,$f1,$04,$98), ($23,$ab,$73,$d3), ($28,$a5,$7a,$de), ($35,$b7,$61,$c9), ($3e,$b9,$68,$c4), ($0f,$93,$57,$e7), ($04,$9d,$5e,$ea), ($19,$8f,$45,$fd), ($12,$81,$4c,$f0), ($cb,$3b,$ab,$6b), ($c0,$35,$a2,$66), ($dd,$27,$b9,$71), ($d6,$29,$b0,$7c), ($e7,$03,$8f,$5f), ($ec,$0d,$86,$52), ($f1,$1f,$9d,$45), ($fa,$11,$94,$48), ($93,$4b,$e3,$03), ($98,$45,$ea,$0e), ($85,$57,$f1,$19), ($8e,$59,$f8,$14), ($bf,$73,$c7,$37), ($b4,$7d,$ce,$3a), ($a9,$6f,$d5,$2d), ($a2,$61,$dc,$20), ($f6,$ad,$76,$6d), ($fd,$a3,$7f,$60), ($e0,$b1,$64,$77), ($eb,$bf,$6d,$7a), ($da,$95,$52,$59), ($d1,$9b,$5b,$54), ($cc,$89,$40,$43), ($c7,$87,$49,$4e), ($ae,$dd,$3e,$05), ($a5,$d3,$37,$08), ($b8,$c1,$2c,$1f), ($b3,$cf,$25,$12), ($82,$e5,$1a,$31), ($89,$eb,$13,$3c), ($94,$f9,$08,$2b), ($9f,$f7,$01,$26), ($46,$4d,$e6,$bd), ($4d,$43,$ef,$b0), ($50,$51,$f4,$a7), ($5b,$5f,$fd,$aa), ($6a,$75,$c2,$89), ($61,$7b,$cb,$84), ($7c,$69,$d0,$93), ($77,$67,$d9,$9e), ($1e,$3d,$ae,$d5), ($15,$33,$a7,$d8), ($08,$21,$bc,$cf), ($03,$2f,$b5,$c2), ($32,$05,$8a,$e1), ($39,$0b,$83,$ec), ($24,$19,$98,$fb), ($2f,$17,$91,$f6), ($8d,$76,$4d,$d6), ($86,$78,$44,$db), ($9b,$6a,$5f,$cc), ($90,$64,$56,$c1), ($a1,$4e,$69,$e2), ($aa,$40,$60,$ef), ($b7,$52,$7b,$f8), ($bc,$5c,$72,$f5), ($d5,$06,$05,$be), ($de,$08,$0c,$b3), ($c3,$1a,$17,$a4), ($c8,$14,$1e,$a9), ($f9,$3e,$21,$8a), ($f2,$30,$28,$87), ($ef,$22,$33,$90), ($e4,$2c,$3a,$9d), ($3d,$96,$dd,$06), ($36,$98,$d4,$0b), ($2b,$8a,$cf,$1c), ($20,$84,$c6,$11), ($11,$ae,$f9,$32), ($1a,$a0,$f0,$3f), ($07,$b2,$eb,$28), ($0c,$bc,$e2,$25), ($65,$e6,$95,$6e), ($6e,$e8,$9c,$63), ($73,$fa,$87,$74), ($78,$f4,$8e,$79), ($49,$de,$b1,$5a), ($42,$d0,$b8,$57), ($5f,$c2,$a3,$40), ($54,$cc,$aa,$4d), ($f7,$41,$ec,$da), ($fc,$4f,$e5,$d7), ($e1,$5d,$fe,$c0), ($ea,$53,$f7,$cd), ($db,$79,$c8,$ee), ($d0,$77,$c1,$e3), ($cd,$65,$da,$f4), ($c6,$6b,$d3,$f9), ($af,$31,$a4,$b2), ($a4,$3f,$ad,$bf), ($b9,$2d,$b6,$a8), ($b2,$23,$bf,$a5), ($83,$09,$80,$86), ($88,$07,$89,$8b), ($95,$15,$92,$9c), ($9e,$1b,$9b,$91), ($47,$a1,$7c,$0a), ($4c,$af,$75,$07), ($51,$bd,$6e,$10), ($5a,$b3,$67,$1d), ($6b,$99,$58,$3e), ($60,$97,$51,$33), ($7d,$85,$4a,$24), ($76,$8b,$43,$29), ($1f,$d1,$34,$62), ($14,$df,$3d,$6f), ($09,$cd,$26,$78), ($02,$c3,$2f,$75), ($33,$e9,$10,$56), ($38,$e7,$19,$5b), ($25,$f5,$02,$4c), ($2e,$fb,$0b,$41), ($8c,$9a,$d7,$61), ($87,$94,$de,$6c), ($9a,$86,$c5,$7b), ($91,$88,$cc,$76), ($a0,$a2,$f3,$55), ($ab,$ac,$fa,$58), ($b6,$be,$e1,$4f), ($bd,$b0,$e8,$42), ($d4,$ea,$9f,$09), ($df,$e4,$96,$04), ($c2,$f6,$8d,$13), ($c9,$f8,$84,$1e), ($f8,$d2,$bb,$3d), ($f3,$dc,$b2,$30), ($ee,$ce,$a9,$27), ($e5,$c0,$a0,$2a), ($3c,$7a,$47,$b1), ($37,$74,$4e,$bc), ($2a,$66,$55,$ab), ($21,$68,$5c,$a6), ($10,$42,$63,$85), ($1b,$4c,$6a,$88), ($06,$5e,$71,$9f), ($0d,$50,$78,$92), ($64,$0a,$0f,$d9), ($6f,$04,$06,$d4), ($72,$16,$1d,$c3), ($79,$18,$14,$ce), ($48,$32,$2b,$ed), ($43,$3c,$22,$e0), ($5e,$2e,$39,$f7), ($55,$20,$30,$fa), ($01,$ec,$9a,$b7), ($0a,$e2,$93,$ba), ($17,$f0,$88,$ad), ($1c,$fe,$81,$a0), ($2d,$d4,$be,$83), ($26,$da,$b7,$8e), ($3b,$c8,$ac,$99), ($30,$c6,$a5,$94), ($59,$9c,$d2,$df), ($52,$92,$db,$d2), ($4f,$80,$c0,$c5), ($44,$8e,$c9,$c8), ($75,$a4,$f6,$eb), ($7e,$aa,$ff,$e6), ($63,$b8,$e4,$f1), ($68,$b6,$ed,$fc), ($b1,$0c,$0a,$67), ($ba,$02,$03,$6a), ($a7,$10,$18,$7d), ($ac,$1e,$11,$70), ($9d,$34,$2e,$53), ($96,$3a,$27,$5e), ($8b,$28,$3c,$49), ($80,$26,$35,$44), ($e9,$7c,$42,$0f), ($e2,$72,$4b,$02), ($ff,$60,$50,$15), ($f4,$6e,$59,$18), ($c5,$44,$66,$3b), ($ce,$4a,$6f,$36), ($d3,$58,$74,$21), ($d8,$56,$7d,$2c), ($7a,$37,$a1,$0c), ($71,$39,$a8,$01), ($6c,$2b,$b3,$16), ($67,$25,$ba,$1b), ($56,$0f,$85,$38), ($5d,$01,$8c,$35), ($40,$13,$97,$22), ($4b,$1d,$9e,$2f), ($22,$47,$e9,$64), ($29,$49,$e0,$69), ($34,$5b,$fb,$7e), ($3f,$55,$f2,$73), ($0e,$7f,$cd,$50), ($05,$71,$c4,$5d), ($18,$63,$df,$4a), ($13,$6d,$d6,$47), ($ca,$d7,$31,$dc), ($c1,$d9,$38,$d1), ($dc,$cb,$23,$c6), ($d7,$c5,$2a,$cb), ($e6,$ef,$15,$e8), ($ed,$e1,$1c,$e5), ($f0,$f3,$07,$f2), ($fb,$fd,$0e,$ff), ($92,$a7,$79,$b4), ($99,$a9,$70,$b9), ($84,$bb,$6b,$ae), ($8f,$b5,$62,$a3), ($be,$9f,$5d,$80), ($b5,$91,$54,$8d), ($a8,$83,$4f,$9a), ($a3,$8d,$46,$97)); U3: array[0..255,0..3] of byte= ( ($00,$00,$00,$00), ($0d,$0b,$0e,$09), ($1a,$16,$1c,$12), ($17,$1d,$12,$1b), ($34,$2c,$38,$24), ($39,$27,$36,$2d), ($2e,$3a,$24,$36), ($23,$31,$2a,$3f), ($68,$58,$70,$48), ($65,$53,$7e,$41), ($72,$4e,$6c,$5a), ($7f,$45,$62,$53), ($5c,$74,$48,$6c), ($51,$7f,$46,$65), ($46,$62,$54,$7e), ($4b,$69,$5a,$77), ($d0,$b0,$e0,$90), ($dd,$bb,$ee,$99), ($ca,$a6,$fc,$82), ($c7,$ad,$f2,$8b), ($e4,$9c,$d8,$b4), ($e9,$97,$d6,$bd), ($fe,$8a,$c4,$a6), ($f3,$81,$ca,$af), ($b8,$e8,$90,$d8), ($b5,$e3,$9e,$d1), ($a2,$fe,$8c,$ca), ($af,$f5,$82,$c3), ($8c,$c4,$a8,$fc), ($81,$cf,$a6,$f5), ($96,$d2,$b4,$ee), ($9b,$d9,$ba,$e7), ($bb,$7b,$db,$3b), ($b6,$70,$d5,$32), ($a1,$6d,$c7,$29), ($ac,$66,$c9,$20), ($8f,$57,$e3,$1f), ($82,$5c,$ed,$16), ($95,$41,$ff,$0d), ($98,$4a,$f1,$04), ($d3,$23,$ab,$73), ($de,$28,$a5,$7a), ($c9,$35,$b7,$61), ($c4,$3e,$b9,$68), ($e7,$0f,$93,$57), ($ea,$04,$9d,$5e), ($fd,$19,$8f,$45), ($f0,$12,$81,$4c), ($6b,$cb,$3b,$ab), ($66,$c0,$35,$a2), ($71,$dd,$27,$b9), ($7c,$d6,$29,$b0), ($5f,$e7,$03,$8f), ($52,$ec,$0d,$86), ($45,$f1,$1f,$9d), ($48,$fa,$11,$94), ($03,$93,$4b,$e3), ($0e,$98,$45,$ea), ($19,$85,$57,$f1), ($14,$8e,$59,$f8), ($37,$bf,$73,$c7), ($3a,$b4,$7d,$ce), ($2d,$a9,$6f,$d5), ($20,$a2,$61,$dc), ($6d,$f6,$ad,$76), ($60,$fd,$a3,$7f), ($77,$e0,$b1,$64), ($7a,$eb,$bf,$6d), ($59,$da,$95,$52), ($54,$d1,$9b,$5b), ($43,$cc,$89,$40), ($4e,$c7,$87,$49), ($05,$ae,$dd,$3e), ($08,$a5,$d3,$37), ($1f,$b8,$c1,$2c), ($12,$b3,$cf,$25), ($31,$82,$e5,$1a), ($3c,$89,$eb,$13), ($2b,$94,$f9,$08), ($26,$9f,$f7,$01), ($bd,$46,$4d,$e6), ($b0,$4d,$43,$ef), ($a7,$50,$51,$f4), ($aa,$5b,$5f,$fd), ($89,$6a,$75,$c2), ($84,$61,$7b,$cb), ($93,$7c,$69,$d0), ($9e,$77,$67,$d9), ($d5,$1e,$3d,$ae), ($d8,$15,$33,$a7), ($cf,$08,$21,$bc), ($c2,$03,$2f,$b5), ($e1,$32,$05,$8a), ($ec,$39,$0b,$83), ($fb,$24,$19,$98), ($f6,$2f,$17,$91), ($d6,$8d,$76,$4d), ($db,$86,$78,$44), ($cc,$9b,$6a,$5f), ($c1,$90,$64,$56), ($e2,$a1,$4e,$69), ($ef,$aa,$40,$60), ($f8,$b7,$52,$7b), ($f5,$bc,$5c,$72), ($be,$d5,$06,$05), ($b3,$de,$08,$0c), ($a4,$c3,$1a,$17), ($a9,$c8,$14,$1e), ($8a,$f9,$3e,$21), ($87,$f2,$30,$28), ($90,$ef,$22,$33), ($9d,$e4,$2c,$3a), ($06,$3d,$96,$dd), ($0b,$36,$98,$d4), ($1c,$2b,$8a,$cf), ($11,$20,$84,$c6), ($32,$11,$ae,$f9), ($3f,$1a,$a0,$f0), ($28,$07,$b2,$eb), ($25,$0c,$bc,$e2), ($6e,$65,$e6,$95), ($63,$6e,$e8,$9c), ($74,$73,$fa,$87), ($79,$78,$f4,$8e), ($5a,$49,$de,$b1), ($57,$42,$d0,$b8), ($40,$5f,$c2,$a3), ($4d,$54,$cc,$aa), ($da,$f7,$41,$ec), ($d7,$fc,$4f,$e5), ($c0,$e1,$5d,$fe), ($cd,$ea,$53,$f7), ($ee,$db,$79,$c8), ($e3,$d0,$77,$c1), ($f4,$cd,$65,$da), ($f9,$c6,$6b,$d3), ($b2,$af,$31,$a4), ($bf,$a4,$3f,$ad), ($a8,$b9,$2d,$b6), ($a5,$b2,$23,$bf), ($86,$83,$09,$80), ($8b,$88,$07,$89), ($9c,$95,$15,$92), ($91,$9e,$1b,$9b), ($0a,$47,$a1,$7c), ($07,$4c,$af,$75), ($10,$51,$bd,$6e), ($1d,$5a,$b3,$67), ($3e,$6b,$99,$58), ($33,$60,$97,$51), ($24,$7d,$85,$4a), ($29,$76,$8b,$43), ($62,$1f,$d1,$34), ($6f,$14,$df,$3d), ($78,$09,$cd,$26), ($75,$02,$c3,$2f), ($56,$33,$e9,$10), ($5b,$38,$e7,$19), ($4c,$25,$f5,$02), ($41,$2e,$fb,$0b), ($61,$8c,$9a,$d7), ($6c,$87,$94,$de), ($7b,$9a,$86,$c5), ($76,$91,$88,$cc), ($55,$a0,$a2,$f3), ($58,$ab,$ac,$fa), ($4f,$b6,$be,$e1), ($42,$bd,$b0,$e8), ($09,$d4,$ea,$9f), ($04,$df,$e4,$96), ($13,$c2,$f6,$8d), ($1e,$c9,$f8,$84), ($3d,$f8,$d2,$bb), ($30,$f3,$dc,$b2), ($27,$ee,$ce,$a9), ($2a,$e5,$c0,$a0), ($b1,$3c,$7a,$47), ($bc,$37,$74,$4e), ($ab,$2a,$66,$55), ($a6,$21,$68,$5c), ($85,$10,$42,$63), ($88,$1b,$4c,$6a), ($9f,$06,$5e,$71), ($92,$0d,$50,$78), ($d9,$64,$0a,$0f), ($d4,$6f,$04,$06), ($c3,$72,$16,$1d), ($ce,$79,$18,$14), ($ed,$48,$32,$2b), ($e0,$43,$3c,$22), ($f7,$5e,$2e,$39), ($fa,$55,$20,$30), ($b7,$01,$ec,$9a), ($ba,$0a,$e2,$93), ($ad,$17,$f0,$88), ($a0,$1c,$fe,$81), ($83,$2d,$d4,$be), ($8e,$26,$da,$b7), ($99,$3b,$c8,$ac), ($94,$30,$c6,$a5), ($df,$59,$9c,$d2), ($d2,$52,$92,$db), ($c5,$4f,$80,$c0), ($c8,$44,$8e,$c9), ($eb,$75,$a4,$f6), ($e6,$7e,$aa,$ff), ($f1,$63,$b8,$e4), ($fc,$68,$b6,$ed), ($67,$b1,$0c,$0a), ($6a,$ba,$02,$03), ($7d,$a7,$10,$18), ($70,$ac,$1e,$11), ($53,$9d,$34,$2e), ($5e,$96,$3a,$27), ($49,$8b,$28,$3c), ($44,$80,$26,$35), ($0f,$e9,$7c,$42), ($02,$e2,$72,$4b), ($15,$ff,$60,$50), ($18,$f4,$6e,$59), ($3b,$c5,$44,$66), ($36,$ce,$4a,$6f), ($21,$d3,$58,$74), ($2c,$d8,$56,$7d), ($0c,$7a,$37,$a1), ($01,$71,$39,$a8), ($16,$6c,$2b,$b3), ($1b,$67,$25,$ba), ($38,$56,$0f,$85), ($35,$5d,$01,$8c), ($22,$40,$13,$97), ($2f,$4b,$1d,$9e), ($64,$22,$47,$e9), ($69,$29,$49,$e0), ($7e,$34,$5b,$fb), ($73,$3f,$55,$f2), ($50,$0e,$7f,$cd), ($5d,$05,$71,$c4), ($4a,$18,$63,$df), ($47,$13,$6d,$d6), ($dc,$ca,$d7,$31), ($d1,$c1,$d9,$38), ($c6,$dc,$cb,$23), ($cb,$d7,$c5,$2a), ($e8,$e6,$ef,$15), ($e5,$ed,$e1,$1c), ($f2,$f0,$f3,$07), ($ff,$fb,$fd,$0e), ($b4,$92,$a7,$79), ($b9,$99,$a9,$70), ($ae,$84,$bb,$6b), ($a3,$8f,$b5,$62), ($80,$be,$9f,$5d), ($8d,$b5,$91,$54), ($9a,$a8,$83,$4f), ($97,$a3,$8d,$46)); U4: array[0..255,0..3] of byte= ( ($00,$00,$00,$00), ($09,$0d,$0b,$0e), ($12,$1a,$16,$1c), ($1b,$17,$1d,$12), ($24,$34,$2c,$38), ($2d,$39,$27,$36), ($36,$2e,$3a,$24), ($3f,$23,$31,$2a), ($48,$68,$58,$70), ($41,$65,$53,$7e), ($5a,$72,$4e,$6c), ($53,$7f,$45,$62), ($6c,$5c,$74,$48), ($65,$51,$7f,$46), ($7e,$46,$62,$54), ($77,$4b,$69,$5a), ($90,$d0,$b0,$e0), ($99,$dd,$bb,$ee), ($82,$ca,$a6,$fc), ($8b,$c7,$ad,$f2), ($b4,$e4,$9c,$d8), ($bd,$e9,$97,$d6), ($a6,$fe,$8a,$c4), ($af,$f3,$81,$ca), ($d8,$b8,$e8,$90), ($d1,$b5,$e3,$9e), ($ca,$a2,$fe,$8c), ($c3,$af,$f5,$82), ($fc,$8c,$c4,$a8), ($f5,$81,$cf,$a6), ($ee,$96,$d2,$b4), ($e7,$9b,$d9,$ba), ($3b,$bb,$7b,$db), ($32,$b6,$70,$d5), ($29,$a1,$6d,$c7), ($20,$ac,$66,$c9), ($1f,$8f,$57,$e3), ($16,$82,$5c,$ed), ($0d,$95,$41,$ff), ($04,$98,$4a,$f1), ($73,$d3,$23,$ab), ($7a,$de,$28,$a5), ($61,$c9,$35,$b7), ($68,$c4,$3e,$b9), ($57,$e7,$0f,$93), ($5e,$ea,$04,$9d), ($45,$fd,$19,$8f), ($4c,$f0,$12,$81), ($ab,$6b,$cb,$3b), ($a2,$66,$c0,$35), ($b9,$71,$dd,$27), ($b0,$7c,$d6,$29), ($8f,$5f,$e7,$03), ($86,$52,$ec,$0d), ($9d,$45,$f1,$1f), ($94,$48,$fa,$11), ($e3,$03,$93,$4b), ($ea,$0e,$98,$45), ($f1,$19,$85,$57), ($f8,$14,$8e,$59), ($c7,$37,$bf,$73), ($ce,$3a,$b4,$7d), ($d5,$2d,$a9,$6f), ($dc,$20,$a2,$61), ($76,$6d,$f6,$ad), ($7f,$60,$fd,$a3), ($64,$77,$e0,$b1), ($6d,$7a,$eb,$bf), ($52,$59,$da,$95), ($5b,$54,$d1,$9b), ($40,$43,$cc,$89), ($49,$4e,$c7,$87), ($3e,$05,$ae,$dd), ($37,$08,$a5,$d3), ($2c,$1f,$b8,$c1), ($25,$12,$b3,$cf), ($1a,$31,$82,$e5), ($13,$3c,$89,$eb), ($08,$2b,$94,$f9), ($01,$26,$9f,$f7), ($e6,$bd,$46,$4d), ($ef,$b0,$4d,$43), ($f4,$a7,$50,$51), ($fd,$aa,$5b,$5f), ($c2,$89,$6a,$75), ($cb,$84,$61,$7b), ($d0,$93,$7c,$69), ($d9,$9e,$77,$67), ($ae,$d5,$1e,$3d), ($a7,$d8,$15,$33), ($bc,$cf,$08,$21), ($b5,$c2,$03,$2f), ($8a,$e1,$32,$05), ($83,$ec,$39,$0b), ($98,$fb,$24,$19), ($91,$f6,$2f,$17), ($4d,$d6,$8d,$76), ($44,$db,$86,$78), ($5f,$cc,$9b,$6a), ($56,$c1,$90,$64), ($69,$e2,$a1,$4e), ($60,$ef,$aa,$40), ($7b,$f8,$b7,$52), ($72,$f5,$bc,$5c), ($05,$be,$d5,$06), ($0c,$b3,$de,$08), ($17,$a4,$c3,$1a), ($1e,$a9,$c8,$14), ($21,$8a,$f9,$3e), ($28,$87,$f2,$30), ($33,$90,$ef,$22), ($3a,$9d,$e4,$2c), ($dd,$06,$3d,$96), ($d4,$0b,$36,$98), ($cf,$1c,$2b,$8a), ($c6,$11,$20,$84), ($f9,$32,$11,$ae), ($f0,$3f,$1a,$a0), ($eb,$28,$07,$b2), ($e2,$25,$0c,$bc), ($95,$6e,$65,$e6), ($9c,$63,$6e,$e8), ($87,$74,$73,$fa), ($8e,$79,$78,$f4), ($b1,$5a,$49,$de), ($b8,$57,$42,$d0), ($a3,$40,$5f,$c2), ($aa,$4d,$54,$cc), ($ec,$da,$f7,$41), ($e5,$d7,$fc,$4f), ($fe,$c0,$e1,$5d), ($f7,$cd,$ea,$53), ($c8,$ee,$db,$79), ($c1,$e3,$d0,$77), ($da,$f4,$cd,$65), ($d3,$f9,$c6,$6b), ($a4,$b2,$af,$31), ($ad,$bf,$a4,$3f), ($b6,$a8,$b9,$2d), ($bf,$a5,$b2,$23), ($80,$86,$83,$09), ($89,$8b,$88,$07), ($92,$9c,$95,$15), ($9b,$91,$9e,$1b), ($7c,$0a,$47,$a1), ($75,$07,$4c,$af), ($6e,$10,$51,$bd), ($67,$1d,$5a,$b3), ($58,$3e,$6b,$99), ($51,$33,$60,$97), ($4a,$24,$7d,$85), ($43,$29,$76,$8b), ($34,$62,$1f,$d1), ($3d,$6f,$14,$df), ($26,$78,$09,$cd), ($2f,$75,$02,$c3), ($10,$56,$33,$e9), ($19,$5b,$38,$e7), ($02,$4c,$25,$f5), ($0b,$41,$2e,$fb), ($d7,$61,$8c,$9a), ($de,$6c,$87,$94), ($c5,$7b,$9a,$86), ($cc,$76,$91,$88), ($f3,$55,$a0,$a2), ($fa,$58,$ab,$ac), ($e1,$4f,$b6,$be), ($e8,$42,$bd,$b0), ($9f,$09,$d4,$ea), ($96,$04,$df,$e4), ($8d,$13,$c2,$f6), ($84,$1e,$c9,$f8), ($bb,$3d,$f8,$d2), ($b2,$30,$f3,$dc), ($a9,$27,$ee,$ce), ($a0,$2a,$e5,$c0), ($47,$b1,$3c,$7a), ($4e,$bc,$37,$74), ($55,$ab,$2a,$66), ($5c,$a6,$21,$68), ($63,$85,$10,$42), ($6a,$88,$1b,$4c), ($71,$9f,$06,$5e), ($78,$92,$0d,$50), ($0f,$d9,$64,$0a), ($06,$d4,$6f,$04), ($1d,$c3,$72,$16), ($14,$ce,$79,$18), ($2b,$ed,$48,$32), ($22,$e0,$43,$3c), ($39,$f7,$5e,$2e), ($30,$fa,$55,$20), ($9a,$b7,$01,$ec), ($93,$ba,$0a,$e2), ($88,$ad,$17,$f0), ($81,$a0,$1c,$fe), ($be,$83,$2d,$d4), ($b7,$8e,$26,$da), ($ac,$99,$3b,$c8), ($a5,$94,$30,$c6), ($d2,$df,$59,$9c), ($db,$d2,$52,$92), ($c0,$c5,$4f,$80), ($c9,$c8,$44,$8e), ($f6,$eb,$75,$a4), ($ff,$e6,$7e,$aa), ($e4,$f1,$63,$b8), ($ed,$fc,$68,$b6), ($0a,$67,$b1,$0c), ($03,$6a,$ba,$02), ($18,$7d,$a7,$10), ($11,$70,$ac,$1e), ($2e,$53,$9d,$34), ($27,$5e,$96,$3a), ($3c,$49,$8b,$28), ($35,$44,$80,$26), ($42,$0f,$e9,$7c), ($4b,$02,$e2,$72), ($50,$15,$ff,$60), ($59,$18,$f4,$6e), ($66,$3b,$c5,$44), ($6f,$36,$ce,$4a), ($74,$21,$d3,$58), ($7d,$2c,$d8,$56), ($a1,$0c,$7a,$37), ($a8,$01,$71,$39), ($b3,$16,$6c,$2b), ($ba,$1b,$67,$25), ($85,$38,$56,$0f), ($8c,$35,$5d,$01), ($97,$22,$40,$13), ($9e,$2f,$4b,$1d), ($e9,$64,$22,$47), ($e0,$69,$29,$49), ($fb,$7e,$34,$5b), ($f2,$73,$3f,$55), ($cd,$50,$0e,$7f), ($c4,$5d,$05,$71), ($df,$4a,$18,$63), ($d6,$47,$13,$6d), ($31,$dc,$ca,$d7), ($38,$d1,$c1,$d9), ($23,$c6,$dc,$cb), ($2a,$cb,$d7,$c5), ($15,$e8,$e6,$ef), ($1c,$e5,$ed,$e1), ($07,$f2,$f0,$f3), ($0e,$ff,$fb,$fd), ($79,$b4,$92,$a7), ($70,$b9,$99,$a9), ($6b,$ae,$84,$bb), ($62,$a3,$8f,$b5), ($5d,$80,$be,$9f), ($54,$8d,$b5,$91), ($4f,$9a,$a8,$83), ($46,$97,$a3,$8d)); rcon: array[0..29] of cardinal= ( $01, $02, $04, $08, $10, $20, $40, $80, $1b, $36, $6c, $d8, $ab, $4d, $9a, $2f, $5e, $bc, $63, $c6, $97, $35, $6a, $d4, $b3, $7d, $fa, $ef, $c5, $91); doublecmd-1.1.30/components/gifanim/0000755000175000001440000000000015104114162016364 5ustar alexxusersdoublecmd-1.1.30/components/gifanim/tgifanim.xpm0000644000175000001440000000234115104114162020710 0ustar alexxusers/* XPM */ static char * gifanim_xpm[] = { "24 24 31 1", " c None", ". c #959595", "+ c #E1E1E1", "@ c #919191", "# c #848484", "$ c #888888", "% c #EEEEEE", "& c #E6E9EC", "* c #D6DFE8", "= c #FFFFFF", "- c #E7F0F9", "; c #3783CE", "> c #FFF7F7", ", c #FFEFEF", "' c #F7F2F5", ") c #F7FAFD", "! c #FF5757", "~ c #FFDFDF", "{ c #FF4F4F", "] c #FFD7D7", "^ c #FF4747", "/ c #FF3F3F", "( c #8D8D8D", "_ c #EEE6E6", ": c #EED6D6", "< c #EECECE", "[ c #FAFAFA", "} c #F2F2F2", "| c #F6F6F6", "1 c #A2A2A2", "2 c #FAF2F2", " .++@ @++. ", " @@@##$$$$$$$$$$$$##@@@ ", " .++$#$$$$$$$$$$$$#$++. ", " .++@+%%&**&&**&%%+@++. ", " @@@@%==-;;--;;-==%@@@@ ", " .++.%==-;;--;;-==%.++. ", " .++.%>,'--))--',>%.++. ", " @@@@%,!~>====>~!,%@@@@ ", " .++.%>~{]~~~~]{~>%.++. ", " .++.%=>~^////^~>=%.++. ", " @@@(+%%_:<<<<:_%%+(@@@ ", " .++$#$$$$$$$$$$$$#$++. ", " .++$#$$$$$$$$$$$$#$++. ", " @@@(+%%&**&%%%%%%+(@@@ ", " .++.%==-;;-[}}[==%.++. ", " .++.%==-;;-|11|==%.++. ", " @@@@%>,'--)[}}2,>%@@@@ ", " .++.%,!~>====>~!,%.++. ", " .++.%>~{]~~~~]{~>%.++. ", " @@@@%=>~^////^~>=%@@@@ ", " .++@+%%_:<<<<:_%%+@++. ", " .++$#$$$$$$$$$$$$#$++. ", " @@@##$$$$$$$$$$$$##@@@ ", " .++@ @++. "}; doublecmd-1.1.30/components/gifanim/ressource-file.txt0000644000175000001440000000075215104114162022060 0ustar alexxusers 1) Gif in ressource file ------------------------- - Create ressource file with lazres ex : lazres mygif.lrs gif1.gif gif2.gif - Put TGifAnim on your form - In the FormCreate add (see down) [code] procedure TForm1.FormCreate(Sender: TObject); begin GifAnim1.LoadFromLazarusResource('gif1'); GifAnim2.LoadFromLazarusResource('gif2'); end; [/code] - And insert ressouce file in initialization section (see down) [code] initialization {$I unit1.lrs} {$I mesgif.lrs} [/code] doublecmd-1.1.30/components/gifanim/readme.txt0000644000175000001440000000024715104114162020365 0ustar alexxusersGifAnim http://wile64.perso.neuf.fr/download/download.php?cat=4&id=8 Version 1.4 (14/09/2009) Some modifications done for Double Commander (see doublecmd.diff). doublecmd-1.1.30/components/gifanim/pkg_gifanim_dsgn.pas0000644000175000001440000000061715104114162022363 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit pkg_gifanim_dsgn; interface uses GifAnimDsgn, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnimDsgn', @GifAnimDsgn.Register); end; initialization RegisterPackage('pkg_gifanim_dsgn', @Register); end. doublecmd-1.1.30/components/gifanim/pkg_gifanim_dsgn.lpk0000644000175000001440000000245015104114162022363 0ustar alexxusers doublecmd-1.1.30/components/gifanim/pkg_gifanim.pas0000644000175000001440000000054415104114162021347 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit pkg_gifanim; interface uses GifAnim, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnim', @GifAnim.Register); end; initialization RegisterPackage('pkg_gifanim', @Register); end. doublecmd-1.1.30/components/gifanim/pkg_gifanim.lpk0000644000175000001440000000305015104114162021345 0ustar alexxusers doublecmd-1.1.30/components/gifanim/gifanimdsgn.pas0000644000175000001440000000137415104114162021364 0ustar alexxusersunit GifAnimDsgn; {$mode objfpc}{$H+} interface uses LazIDEIntf, PropEdits; Type TGifFileNamePropertyEditor = class(TFileNamePropertyEditor) protected function GetFilter: String; override; function GetInitialDirectory: string; override; end; procedure Register; implementation uses SysUtils, GifAnim; function TGifFileNamePropertyEditor.GetFilter: String; begin Result := 'GIF|*.gif'; end; function TGifFileNamePropertyEditor.GetInitialDirectory: string; begin Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); end; procedure Register; begin RegisterPropertyEditor(TypeInfo(String), TGifAnim, 'FileName', TGifFileNamePropertyEditor); end; end. doublecmd-1.1.30/components/gifanim/gifanim.pas0000644000175000001440000007024415104114162020512 0ustar alexxusers{ Copyright (C) 2009 Laurent Jacques Copyright (C) 2012-2022 Alexander Koblov This source is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This code 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 General Public License for more details. A copy of the GNU General Public License is available on the World Wide Web at . You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } unit GifAnim; {$mode objfpc}{$H+} interface uses Classes, LCLProc, Lresources, SysUtils, Controls, Graphics, ExtCtrls, IntfGraphics, FPimage, Contnrs, GraphType, dialogs, types; const EXT_INTRODUCER = $21; EXT_GRAPHICS_CONTROL = $F9; EXT_PLAIN_TEXT = $01; EXT_APPLICATION = $FF; EXT_COMMENT = $FE; DSC_LOCAL_IMAGE = $2C; ID_TRANSPARENT = $01; ID_COLOR_TABLE_SIZE = $07; ID_SORT = $20; ID_INTERLACED = $40; ID_COLOR_TABLE = $80; ID_IMAGE_DESCRIPTOR = $2C; ID_TRAILER = $3B; CODE_TABLE_SIZE = 4096; type TRGB = packed record Red, Green, Blue: byte; end; TGIFHeader = packed record Signature: array[0..2] of char; //* Header Signature (always "GIF") */ Version: array[0..2] of char; //* GIF format version("87a" or "89a") */ ScreenWidth: word; //* Width of Display Screen in Pixels */ ScreenHeight: word; //* Height of Display Screen in Pixels */ Packedbit, //* Screen and Color Map Information */ BackgroundColor, //* Background Color Index */ AspectRatio: byte; //* Pixel Aspect Ratio */ end; TGifImageDescriptor = packed record Left, //* X position of image on the display */ Top, //* Y position of image on the display */ Width, //* Width of the image in pixels */ Height: word; //* Height of the image in pixels */ Packedbit: byte; //* Image and Color Table Data Information */ end; TGifGraphicsControlExtension = packed record BlockSize, //* Size of remaining fields (always 04h) */ Packedbit: byte; //* Method of graphics disposal to use */ DelayTime: word; //* Hundredths of seconds to wait */ ColorIndex, //* Transparent Color Index */ Terminator: byte; //* Block Terminator (always 0) */ end; TGifAnim = class; { TGifImage } TGifImage = class private FBitmap: TBitmap; FPosX: word; FPosY: word; FDelay: word; FMethod: byte; public constructor Create; destructor Destroy; override; property Bitmap: TBitmap Read FBitmap; property Delay: word Read FDelay; property Method: byte Read FMethod; property PosX: word Read FPosX; property PosY: word Read FPosY; end; { TGifList } TGifList = class(TObjectList) private protected function GetItems(Index: integer): TGifImage; procedure SetItems(Index: integer; AGifImage: TGifImage); public function Add(AGifImage: TGifImage): integer; function Extract(Item: TGifImage): TGifImage; function Remove(AGifImage: TGifImage): integer; function IndexOf(AGifImage: TGifImage): integer; function First: TGifImage; function Last: TGifImage; procedure Insert(Index: integer; AGifImage: TGifImage); property Items[Index: integer]: TGifImage Read GetItems Write SetItems; default; end; { TGifLoader } TGifLoader = class private FGifHeader: TGIFHeader; FGifDescriptor: TGifImageDescriptor; FGifGraphicsCtrlExt: TGifGraphicsControlExtension; FGifUseGraphCtrlExt: boolean; FGifBackgroundColor: byte; FInterlaced: boolean; FScanLine: PByte; FLineSize: integer; FDisposalMethod: byte; FEmpty: boolean; FFileName: string; FHeight: integer; FIsTransparent: boolean; FWidth: integer; FPalette: TFPPalette; FLocalHeight: integer; FLocalWidth: integer; procedure ReadPalette(Stream: TStream; Size: integer); procedure ReadScanLine(Stream: TStream); procedure ReadHeader(Stream: TStream); procedure ReadGlobalPalette(Stream: TStream); procedure ReadGraphCtrlExt; procedure SetInterlaced(const AValue: boolean); procedure SetTransparent(const AValue: boolean); function SkipBlock(Stream: TStream): byte; procedure WriteScanLine(Img: TFPCustomImage); procedure ReadGifBitmap(Stream: TStream); public constructor Create(const FileName: string); destructor Destroy; override; function LoadFromStream(GifStream: TStream; var AGifList: TGifList): boolean; function LoadAllBitmap(var AGifList: TGifList): boolean; function LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean; function LoadFirstBitmap(var ABitmap: TBitmap): boolean; property Empty: boolean Read FEmpty; property Height: integer Read FHeight; property Width: integer Read FWidth; property IsTransparent: boolean Read FIsTransparent Write SetTransparent; property Interlaced: boolean Read FInterlaced Write SetInterlaced; end; { TGifAnim } TGifAnim = class(TGraphicControl) private { Private declarations } FAnimate: boolean; FEmpty: boolean; FFileName: string; FGifBitmaps: TGifList; FOnFrameChanged: TNotifyEvent; FOnStart: TNotifyEvent; FOnStop: TNotifyEvent; FWait: TTimer; FCurrentImage: integer; FGifHeight: integer; FGifWidth: integer; procedure OnTime(Sender: TObject); procedure SetAnimate(const AValue: boolean); procedure SetFileName(const AValue: string); procedure DefineSize(AWidth, AHeight: integer); protected { Protected declarations } BufferImg: TBitmap; CurrentView: TBitmap; procedure CalculatePreferredSize( var PreferredWidth, PreferredHeight: integer; WithThemeSpace: boolean); override; procedure DoAutoSize; override; procedure DoStartAnim; procedure DoStopAnim; class function GetControlClassDefaultSize: TSize; override; procedure GifChanged; procedure LoadFromFile(const Filename: string); virtual; procedure Paint; override; procedure ResetImage; procedure SetColor(Value: TColor); override; public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure NextFrame; procedure PriorFrame; property Empty: boolean Read FEmpty; property GifBitmaps: TGifList Read FGifBitmaps; property GifIndex: integer Read FCurrentImage; function LoadFromLazarusResource(const ResName: String): boolean; published { Published declarations } property Anchors; property AutoSize default True; property Animate: boolean Read FAnimate Write SetAnimate default True; property BorderSpacing; property Color default clBtnFace; property Constraints; property FileName: string Read FFileName Write SetFileName; property Height; property OnClick; property OnDblClick; property OnFrameChanged: TNotifyEvent Read FOnFrameChanged Write FOnFrameChanged; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartAnim: TNotifyEvent Read FOnStart Write FOnStart; property OnStopAnim: TNotifyEvent Read FOnStop Write FOnStop; property ParentShowHint; property ShowHint; property Visible; property Width; end; procedure Register; implementation procedure Register; begin RegisterComponents('Wile64', [TGifAnim]); end; { TGifAnim } constructor TGifAnim.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks]; AutoSize := True; SetInitialBounds(0, 0, GetControlClassDefaultSize.CX, GetControlClassDefaultSize.CY); FEmpty := True; FCurrentImage := 0; CurrentView := TBitmap.Create; if not (csDesigning in ComponentState) then begin BufferImg := TBitmap.Create; FWait := TTimer.Create(Self); with FWait do begin Interval := 100; OnTimer := @OnTime; Enabled := False; end; end; Animate := True; end; destructor TGifAnim.Destroy; begin inherited Destroy; if assigned(FGifBitmaps) then FreeAndNil(FGifBitmaps); BufferImg.Free; CurrentView.Free; end; procedure TGifAnim.NextFrame; begin if (not FEmpty) and Visible and (not FAnimate) then begin if FCurrentImage >= GifBitmaps.Count - 1 then FCurrentImage := 0 else Inc(FCurrentImage); if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; procedure TGifAnim.PriorFrame; var DesiredImage: Integer; begin if (not FEmpty) and Visible and (not FAnimate) then begin if FCurrentImage = 0 then DesiredImage:= GifBitmaps.Count - 1 else DesiredImage:= FCurrentImage - 1; // For proper display repaint image from first frame to desired frame FCurrentImage:= 0; while FCurrentImage < DesiredImage do begin with GifBitmaps.Items[FCurrentImage] do begin BufferImg.Canvas.Brush.Color := (Self.Color); if FCurrentImage = 0 then BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); if Delay <> 0 then FWait.Interval := Delay * 10; BufferImg.Canvas.Draw(PosX, PosY, Bitmap); case Method of //0 : Not specified... //1 : No change Background 2: BufferImg.Canvas.FillRect( Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; Inc(FCurrentImage); end; if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; function TGifAnim.LoadFromLazarusResource(const ResName: String): boolean; var GifLoader: TGifLoader; StateAnimate: boolean; Resource: TLResource; begin Result:=false; StateAnimate:= Animate; FWait.Enabled:= false; ResetImage; Resource:=nil; Resource:=LazarusResources.Find(ResName); if Resource <> nil then if CompareText(LazarusResources.Find(ResName).ValueType, 'gif')=0 then begin GifLoader := TGifLoader.Create(Filename); FEmpty := not GifLoader.LoadFromLazarusResource(ResName, FGifBitmaps); DefineSize(GifLoader.Width, GifLoader.Height); GifLoader.Free; Result:= FEmpty; end; if not Empty then GifChanged; FWait.Enabled:= StateAnimate; end; procedure TGifAnim.LoadFromFile(const Filename: string); var GifLoader: TGifLoader; begin FEmpty := True; if not FileExists(Filename) then Exit; GifLoader := TGifLoader.Create(Filename); if (csDesigning in ComponentState) then FEmpty := not GifLoader.LoadFirstBitmap(CurrentView) else FEmpty := not GifLoader.LoadAllBitmap(FGifBitmaps); DefineSize(GifLoader.Width, GifLoader.Height); GifLoader.Free; end; procedure TGifAnim.OnTime(Sender: TObject); begin if (not Empty) and Visible then begin if FCurrentImage >= GifBitmaps.Count - 1 then FCurrentImage := 0 else Inc(FCurrentImage); if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; procedure TGifAnim.SetAnimate(const AValue: boolean); begin if FAnimate = AValue then exit; FAnimate := AValue; if not (csDesigning in ComponentState) then begin FWait.Enabled := Animate; if Animate then DoStartAnim else DoStopAnim; end; end; procedure TGifAnim.SetFileName(const AValue: string); begin if (FFileName = AValue) then Exit; FFileName := AValue; ResetImage; if (FFileName = '') then Exit; LoadFromFile(FFileName); if not Empty then GifChanged; end; procedure TGifAnim.DefineSize(AWidth, AHeight: integer); begin if (AWidth = FGifWidth) and (AHeight = FGifHeight) then Exit; FGifWidth := AWidth; FGifHeight := AHeight; Height := FGifHeight; Width := FGifWidth; if not (csDesigning in ComponentState) then begin BufferImg.Height := Height; BufferImg.Width := Width; end; end; procedure TGifAnim.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: boolean); begin PreferredWidth := FGifWidth; PreferredHeight := FGifHeight; end; procedure TGifAnim.DoAutoSize; var ModifyWidth, ModifyHeight: boolean; NewWidth: integer; NewHeight: integer; begin if AutoSizing then Exit; // we shouldn't come here in the first place BeginAutoSizing; try GetPreferredSize(NewWidth, NewHeight); ModifyWidth := [akLeft, akRight] * (Anchors + AnchorAlign[Align]) <> [akLeft, akRight]; ModifyHeight := [akTop, akBottom] * (Anchors + AnchorAlign[Align]) <> [akTop, akBottom]; if not ModifyWidth then NewWidth := Width; if not ModifyHeight then NewHeight := Height; if (NewWidth <> Width) or (NewHeight <> Height) then begin SetBounds(Left, Top, NewWidth, NewHeight); end; finally EndAutoSizing; end; end; class function TGifAnim.GetControlClassDefaultSize: TSize; begin Result.CX := 90; Result.CY := 90; end; procedure TGifAnim.GifChanged; begin if not (csDesigning in ComponentState) then begin BufferImg.Canvas.Brush.Color := (self.Color); BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); with GifBitmaps.Items[FCurrentImage] do BufferImg.Canvas.Draw(PosX, PosY, Bitmap); CurrentView.Assign(BufferImg); end; InvalidatePreferredSize; AdjustSize; end; procedure TGifAnim.Paint; begin if (not Empty) and Visible then begin if not (csDesigning in ComponentState) then begin if (FCurrentImage < GifBitmaps.Count) then with GifBitmaps.Items[FCurrentImage] do begin BufferImg.Canvas.Brush.Color := (self.Color); if FCurrentImage = 0 then BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); if Delay <> 0 then FWait.Interval := Delay * 10; BufferImg.Canvas.Draw(PosX, PosY, Bitmap); CurrentView.Assign(BufferImg); case Method of //0 : Not specified... //1 : No change Background 2: BufferImg.Canvas.FillRect( Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; end else begin Canvas.Brush.Color := (self.Color); Canvas.FillRect(Rect(0, 0, Width, Height)); end; Canvas.Draw(0, 0, CurrentView); end; inherited Paint; end; procedure TGifAnim.ResetImage; begin if assigned(FGifBitmaps) then FreeAndNil(FGifBitmaps); FCurrentImage:=0; with CurrentView do begin Canvas.Brush.Color := (self.Color); Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; procedure TGifAnim.SetColor(Value: TColor); begin inherited SetColor(Value); end; procedure TGifAnim.DoStartAnim; begin if assigned(OnStartAnim) then OnStartAnim(Self); end; procedure TGifAnim.DoStopAnim; begin if assigned(OnStopAnim) then OnStartAnim(Self); end; { TGifLoader } constructor TGifLoader.Create(const FileName: string); begin FFileName := FileName; FGifUseGraphCtrlExt := False; FPalette := TFPPalette.Create(0); FHeight := 20; FWidth := 20; end; destructor TGifLoader.Destroy; begin inherited Destroy; FPalette.Free; end; function TGifLoader.LoadFromStream(GifStream: TStream; var AGifList: TGifList): boolean; var Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; GifBitmap: TGifImage; begin Result := False; if not Assigned(AGifList) then AGifList := TGifList.Create(True); GifStream.Position := 0; ReadHeader(GifStream); if (FGifHeader.Version <> '89a') then Exit; // skip first block extention if exist repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size); repeat ReadGifBitmap(GifStream); // decode Gif bitmap in Scanline buffer ReadScanLine(GifStream); // Create temp Fp Image for put scanline pixel FPImage := TLazIntfImage.Create(FLocalWidth, FLocalHeight); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(FLocalWidth, FLocalHeight); FPImage.DataDescription := ImgFormatDescription; WriteScanLine(FPImage); GifBitmap := TGifImage.Create; GifBitmap.FBitmap.LoadFromIntfImage(FPImage); GifBitmap.FPosX := FGifDescriptor.Left; GifBitmap.FPosY := FGifDescriptor.Top; GifBitmap.FMethod := FDisposalMethod; GifBitmap.FDelay := FGifGraphicsCtrlExt.DelayTime; AGifList.Add(GifBitmap); FPImage.Free; FreeMem(FScanLine, FLineSize); // reset FGifUseGraphCtrlExt flag FGifUseGraphCtrlExt := False; repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size); until (Introducer = ID_TRAILER) or (GifStream.Position = GifStream.Size); Result := True; end; function TGifLoader.LoadAllBitmap(var AGifList: TGifList): boolean; var GifStream: TMemoryStream; begin Result := False; if not FileExists(FFileName) then Exit; GifStream := TMemoryStream.Create; try GifStream.LoadFromFile(FFileName); Result := LoadFromStream(GifStream, AGifList); finally GifStream.Free; end; end; function TGifLoader.LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean; var GifStream: TLazarusResourceStream; begin Result := False; GifStream := TLazarusResourceStream.Create(ResName, nil); try Result := LoadFromStream(GifStream, AGifList); finally GifStream.Free; end; end; function TGifLoader.LoadFirstBitmap(var ABitmap: TBitmap): boolean; var GifStream: TMemoryStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; begin Result := False; if not FileExists(FFileName) then exit; if not assigned(ABitmap) then ABitmap := TBitmap.Create; GifStream := TMemoryStream.Create; GifStream.LoadFromFile(FFileName); GifStream.Position := 0; ReadHeader(GifStream); if (FGifHeader.Version <> '89a') then Exit; // skip first block extention if exist repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); ReadGifBitmap(GifStream); // decode Gif bitmap in Scanline buffer ReadScanLine(GifStream); // Create temp Fp Image for put scanline pixel FPImage := TLazIntfImage.Create(FLocalWidth, FLocalHeight); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(FLocalWidth, FLocalHeight); FPImage.DataDescription := ImgFormatDescription; WriteScanLine(FPImage); ABitmap.LoadFromIntfImage(FPImage); FPImage.Free; FreeMem(FScanLine, FLineSize); // reset FGifUseGraphCtrlExt flag FGifUseGraphCtrlExt := False; GifStream.Free; Result := True; end; procedure TGifLoader.SetTransparent(const AValue: boolean); begin if FIsTransparent = AValue then exit; FIsTransparent := AValue; end; function TGifLoader.SkipBlock(Stream: TStream): byte; var Introducer, Labels, SkipByte: byte; begin Introducer := 0; Labels := 0; SkipByte := 0; Stream.Read(Introducer, 1); if Introducer = EXT_INTRODUCER then begin Stream.Read(Labels, 1); case Labels of EXT_COMMENT, EXT_APPLICATION: while True do begin Stream.Read(SkipByte, 1); if SkipByte = 0 then Break; Stream.Seek(SkipByte, soFromCurrent); end; EXT_GRAPHICS_CONTROL: begin Stream.Read(FGifGraphicsCtrlExt, SizeOf(FGifGraphicsCtrlExt)); FGifUseGraphCtrlExt := True; end; EXT_PLAIN_TEXT: begin Stream.Read(SkipByte, 1); Stream.Seek(SkipByte, soFromCurrent); while True do begin Stream.Read(SkipByte, 1); if SkipByte = 0 then Break; Stream.Seek(SkipByte, soFromCurrent); end; end; end; end; Result := Introducer; end; procedure TGifLoader.ReadScanLine(Stream: TStream); var OldPos, UnpackedSize, PackedSize: longint; I: integer; Data, Bits, Code: cardinal; SourcePtr: PByte; InCode: cardinal; CodeSize: cardinal; CodeMask: cardinal; FreeCode: cardinal; OldCode: cardinal; Prefix: array[0..CODE_TABLE_SIZE - 1] of cardinal; Suffix, Stack: array [0..CODE_TABLE_SIZE - 1] of byte; StackPointer: PByte; DataComp, Target: PByte; B, FInitialCodeSize, FirstChar: byte; ClearCode, EOICode: word; begin FInitialCodeSize := 0; B := 0; DataComp := nil; // initialisation du dictionnaire de decompression Stream.Read(FInitialCodeSize, 1); // Recherche la taille des donnes compresser OldPos := Stream.Position; PackedSize := 0; repeat Stream.Read(B, 1); if B > 0 then begin Inc(PackedSize, B); Stream.Seek(B, soFromCurrent); end; until B = 0; Getmem(DataComp, PackedSize); // lecture des donnes conpresser SourcePtr := DataComp; Stream.Position := OldPos; repeat Stream.Read(B, 1); if B > 0 then begin Stream.ReadBuffer(SourcePtr^, B); Inc(SourcePtr, B); end; until B = 0; SourcePtr := DataComp; Target := FScanLine; CodeSize := FInitialCodeSize + 1; ClearCode := 1 shl FInitialCodeSize; EOICode := ClearCode + 1; FreeCode := ClearCode + 2; OldCode := CODE_TABLE_SIZE; CodeMask := (1 shl CodeSize) - 1; UnpackedSize := FLocalWidth * FLocalHeight; for I := 0 to ClearCode - 1 do begin Prefix[I] := CODE_TABLE_SIZE; Suffix[I] := I; end; StackPointer := @Stack; FirstChar := 0; Data := 0; Bits := 0; //Decompression LZW gif while (UnpackedSize > 0) and (PackedSize > 0) do begin Inc(Data, SourcePtr^ shl Bits); Inc(Bits, 8); while Bits >= CodeSize do begin Code := Data and CodeMask; Data := Data shr CodeSize; Dec(Bits, CodeSize); if Code = EOICode then Break; if Code = ClearCode then begin CodeSize := FInitialCodeSize + 1; CodeMask := (1 shl CodeSize) - 1; FreeCode := ClearCode + 2; OldCode := CODE_TABLE_SIZE; Continue; end; if Code > FreeCode then Break; if OldCode = CODE_TABLE_SIZE then begin FirstChar := Suffix[Code]; Target^ := FirstChar; Inc(Target); Dec(UnpackedSize); OldCode := Code; Continue; end; InCode := Code; if Code = FreeCode then begin StackPointer^ := FirstChar; Inc(StackPointer); Code := OldCode; end; while Code > ClearCode do begin StackPointer^ := Suffix[Code]; Inc(StackPointer); Code := Prefix[Code]; end; FirstChar := Suffix[Code]; StackPointer^ := FirstChar; Inc(StackPointer); Prefix[FreeCode] := OldCode; Suffix[FreeCode] := FirstChar; if (FreeCode = CodeMask) and (CodeSize < 12) then begin Inc(CodeSize); CodeMask := (1 shl CodeSize) - 1; end; if FreeCode < CODE_TABLE_SIZE - 1 then Inc(FreeCode); OldCode := InCode; repeat Dec(StackPointer); Target^ := StackPointer^; Inc(Target); Dec(UnpackedSize); until StackPointer = @Stack; end; Inc(SourcePtr); Dec(PackedSize); end; FreeMem(DataComp); end; procedure TGifLoader.ReadHeader(Stream: TStream); begin Stream.Read(FGifHeader, SizeOf(FGifHeader)); with FGifHeader do begin FGifBackgroundColor := BackgroundColor; FWidth := ScreenWidth; FHeight := ScreenHeight; FLocalWidth := ScreenWidth; FLocalHeight := ScreenHeight; IsTransparent := False; end; ReadGlobalPalette(Stream); end; procedure TGifLoader.ReadGlobalPalette(Stream: TStream); var ColorTableSize: integer; begin if (FGifHeader.Packedbit and ID_COLOR_TABLE) <> 0 then begin ColorTableSize := FGifHeader.Packedbit and ID_COLOR_TABLE_SIZE + 1; ReadPalette(Stream, 1 shl ColorTableSize); end; end; procedure TGifLoader.ReadGraphCtrlExt; var C: TFPColor; begin IsTransparent := (FGifGraphicsCtrlExt.Packedbit and ID_TRANSPARENT) <> 0; FDisposalMethod := (FGifGraphicsCtrlExt.Packedbit and $1C) shr 2; if IsTransparent then begin // if Transparent bitmap change alpha channel FGifBackgroundColor := FGifGraphicsCtrlExt.ColorIndex; C := FPalette[FGifBackgroundColor]; C.alpha := alphaTransparent; FPalette[FGifBackgroundColor] := C; end; end; procedure TGifLoader.SetInterlaced(const AValue: boolean); begin if FInterlaced = AValue then exit; FInterlaced := AValue; end; procedure TGifLoader.ReadPalette(Stream: TStream; Size: integer); var RGBEntry: TRGB; I: integer; C: TFPColor; begin FPalette.Clear; FPalette.Count := 0; Fillchar(RGBEntry, SizeOf(RGBEntry), 0); for I := 0 to Size - 1 do begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); with C do begin Red := RGBEntry.Red or (RGBEntry.Red shl 8); Green := RGBEntry.Green or (RGBEntry.Green shl 8); Blue := RGBEntry.Blue or (RGBEntry.Blue shl 8); Alpha := alphaOpaque; end; FPalette.Add(C); end; end; procedure TGifLoader.WriteScanLine(Img: TFPCustomImage); var Row, Col: integer; Pass, Every: byte; P: PByte; begin P := FScanLine; if Interlaced then begin for Pass := 1 to 4 do begin case Pass of 1: begin Row := 0; Every := 8; end; 2: begin Row := 4; Every := 8; end; 3: begin Row := 2; Every := 4; end; 4: begin Row := 1; Every := 2; end; end; repeat for Col := 0 to FLocalWidth - 1 do begin Img.Colors[Col, Row] := FPalette[P^]; Inc(P); end; Inc(Row, Every); until Row >= FLocalHeight; end; end else begin for Row := 0 to FLocalHeight - 1 do for Col := 0 to FLocalWidth - 1 do begin Img.Colors[Col, Row] := FPalette[P^]; Inc(P); end; end; end; procedure TGifLoader.ReadGifBitmap(Stream: TStream); var ColorTableSize: integer; begin Stream.Read(FGifDescriptor, SizeOf(FGifDescriptor)); with FGifDescriptor do begin FLocalWidth := Width; FLocalHeight := Height; Interlaced := (Packedbit and ID_INTERLACED = ID_INTERLACED); end; FLineSize := FLocalWidth * (FLocalHeight + 1); GetMem(FScanLine, FLineSize); if (FGifDescriptor.Packedbit and ID_COLOR_TABLE) <> 0 then begin ColorTableSize := FGifDescriptor.Packedbit and ID_COLOR_TABLE_SIZE + 1; ReadPalette(Stream, 1 shl ColorTableSize); end; if FGifUseGraphCtrlExt then ReadGraphCtrlExt; end; { TGifImage } constructor TGifImage.Create; begin FBitmap := TBitmap.Create; FPosX := 0; FPosY := 0; FDelay := 0; FMethod := 0; end; destructor TGifImage.Destroy; begin inherited Destroy; FBitmap.Free; end; { TGifList } function TGifList.GetItems(Index: integer): TGifImage; begin Result := TGifImage(inherited Items[Index]); end; procedure TGifList.SetItems(Index: integer; AGifImage: TGifImage); begin Put(Index, AGifImage); end; function TGifList.Add(AGifImage: TGifImage): integer; begin Result := inherited Add(AGifImage); end; function TGifList.Extract(Item: TGifImage): TGifImage; begin Result := TGifImage(inherited Extract(Item)); end; function TGifList.Remove(AGifImage: TGifImage): integer; begin Result := inherited Remove(AGifImage); end; function TGifList.IndexOf(AGifImage: TGifImage): integer; begin Result := inherited IndexOf(AGifImage); end; function TGifList.First: TGifImage; begin Result := TGifImage(inherited First); end; function TGifList.Last: TGifImage; begin Result := TGifImage(inherited Last); end; procedure TGifList.Insert(Index: integer; AGifImage: TGifImage); begin inherited Insert(Index, AGifImage); end; initialization {$I gifanim.lrs} end. doublecmd-1.1.30/components/gifanim/gifanim.lrs0000644000175000001440000000351415104114162020523 0ustar alexxusersLazarusResources.Add('tgifanim','XPM',[ '/* XPM */'#13#10'static char * gifanim_xpm[] = {'#13#10'"24 24 31 1",'#13#10 +'" '#9'c None",'#13#10'".'#9'c #959595",'#13#10'"+'#9'c #E1E1E1",'#13#10'"@' +#9'c #919191",'#13#10'"#'#9'c #848484",'#13#10'"$'#9'c #888888",'#13#10'"%'#9 +'c #EEEEEE",'#13#10'"&'#9'c #E6E9EC",'#13#10'"*'#9'c #D6DFE8",'#13#10'"='#9 +'c #FFFFFF",'#13#10'"-'#9'c #E7F0F9",'#13#10'";'#9'c #3783CE",'#13#10'">'#9 +'c #FFF7F7",'#13#10'",'#9'c #FFEFEF",'#13#10'"'''#9'c #F7F2F5",'#13#10'")'#9 +'c #F7FAFD",'#13#10'"!'#9'c #FF5757",'#13#10'"~'#9'c #FFDFDF",'#13#10'"{'#9 +'c #FF4F4F",'#13#10'"]'#9'c #FFD7D7",'#13#10'"^'#9'c #FF4747",'#13#10'"/'#9 +'c #FF3F3F",'#13#10'"('#9'c #8D8D8D",'#13#10'"_'#9'c #EEE6E6",'#13#10'":'#9 +'c #EED6D6",'#13#10'"<'#9'c #EECECE",'#13#10'"['#9'c #FAFAFA",'#13#10'"}'#9 +'c #F2F2F2",'#13#10'"|'#9'c #F6F6F6",'#13#10'"1'#9'c #A2A2A2",'#13#10'"2'#9 +'c #FAF2F2",'#13#10'" .++@ @++. ",'#13#10'" @@@##$$$$$$$$$$$$##' +'@@@ ",'#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" .++@+%%&**&&**&%%+@++. "' +','#13#10'" @@@@%==-;;--;;-==%@@@@ ",'#13#10'" .++.%==-;;--;;-==%.++. ",'#13 +#10'" .++.%>,''--))--'',>%.++. ",'#13#10'" @@@@%,!~>====>~!,%@@@@ ",'#13#10 +'" .++.%>~{]~~~~]{~>%.++. ",'#13#10'" .++.%=>~^////^~>=%.++. ",'#13#10'" @@@' +'(+%%_:<<<<:_%%+(@@@ ",'#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" .++$#$$$' +'$$$$$$$$$#$++. ",'#13#10'" @@@(+%%&**&%%%%%%+(@@@ ",'#13#10'" .++.%==-;;-[}' +'}[==%.++. ",'#13#10'" .++.%==-;;-|11|==%.++. ",'#13#10'" @@@@%>,''--)[}}2,>' +'%@@@@ ",'#13#10'" .++.%,!~>====>~!,%.++. ",'#13#10'" .++.%>~{]~~~~]{~>%.++.' +' ",'#13#10'" @@@@%=>~^////^~>=%@@@@ ",'#13#10'" .++@+%%_:<<<<:_%%+@++. ",' +#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" @@@##$$$$$$$$$$$$##@@@ ",'#13#10 +'" .++@ @++. "};'#13#10 ]); doublecmd-1.1.30/components/gifanim/doublecmd.diff0000644000175000001440000002410215104114162021153 0ustar alexxusersIndex: gifanim.pas =================================================================== --- gifanim.pas (revision none) +++ gifanim.pas (working copy) @@ -26,7 +26,7 @@ uses Classes, LCLProc, Lresources, SysUtils, Controls, Graphics, ExtCtrls, - IntfGraphics, FPimage, Contnrs, GraphType, dialogs; + IntfGraphics, FPimage, Contnrs, GraphType, dialogs, types; const @@ -193,7 +193,7 @@ procedure DoAutoSize; override; procedure DoStartAnim; procedure DoStopAnim; - class function GetControlClassDefaultSize: TPoint; override; + class function GetControlClassDefaultSize: TSize; override; procedure GifChanged; procedure LoadFromFile(const Filename: string); virtual; procedure Paint; override; @@ -203,6 +203,8 @@ { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; + procedure NextFrame; + procedure PriorFrame; property Empty: boolean Read FEmpty; property GifBitmaps: TGifList Read FGifBitmaps; property GifIndex: integer Read FCurrentImage; @@ -237,28 +239,9 @@ implementation -uses LazIDEIntf, propedits; -Type - TGifFileNamePropertyEditor=class(TFileNamePropertyEditor) - protected - function GetFilter: String; override; - function GetInitialDirectory: string; override; - end; -function TGifFileNamePropertyEditor.GetFilter: String; -begin - Result := 'GIF|*.gif'; -end; - -function TGifFileNamePropertyEditor.GetInitialDirectory: string; -begin - Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); -end; - procedure Register; begin RegisterComponents('Wile64', [TGifAnim]); - RegisterPropertyEditor(TypeInfo(String), - TGifAnim, 'FileName', TGifFileNamePropertyEditor); end; { TGifAnim } @@ -268,7 +251,7 @@ inherited Create(AOwner); ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks]; AutoSize := True; - SetInitialBounds(0, 0, GetControlClassDefaultSize.X, GetControlClassDefaultSize.Y); + SetInitialBounds(0, 0, GetControlClassDefaultSize.CX, GetControlClassDefaultSize.CY); FEmpty := True; FCurrentImage := 0; CurrentView := TBitmap.Create; @@ -295,6 +278,59 @@ CurrentView.Free; end; +procedure TGifAnim.NextFrame; +begin + if (not FEmpty) and Visible and (not FAnimate) then + begin + if FCurrentImage >= GifBitmaps.Count - 1 then + FCurrentImage := 0 + else + Inc(FCurrentImage); + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; + end; +end; + +procedure TGifAnim.PriorFrame; +var + DesiredImage: Integer; +begin + if (not FEmpty) and Visible and (not FAnimate) then + begin + if FCurrentImage = 0 then + DesiredImage:= GifBitmaps.Count - 1 + else + DesiredImage:= FCurrentImage - 1; + // For proper display repaint image from first frame to desired frame + FCurrentImage:= 0; + while FCurrentImage < DesiredImage do + begin + with GifBitmaps.Items[FCurrentImage] do + begin + BufferImg.Canvas.Brush.Color := (Self.Color); + if FCurrentImage = 0 then + BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); + if Delay <> 0 then + FWait.Interval := Delay * 10; + BufferImg.Canvas.Draw(PosX, PosY, Bitmap); + case Method of + //0 : Not specified... + //1 : No change Background + 2: BufferImg.Canvas.FillRect( + Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); + + 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); + end; + end; + Inc(FCurrentImage); + end; + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; + end; +end; + function TGifAnim.LoadFromLazarusResource(const ResName: String): boolean; var GifLoader: TGifLoader; @@ -340,12 +376,13 @@ begin if (not Empty) and Visible then begin - if FCurrentImage > GifBitmaps.Count - 1 then - FCurrentImage := 0; - if assigned(FOnFrameChanged) then - FOnFrameChanged(self); - Paint; - Inc(FCurrentImage); + if FCurrentImage >= GifBitmaps.Count - 1 then + FCurrentImage := 0 + else + Inc(FCurrentImage); + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; end; end; @@ -365,27 +402,12 @@ end; procedure TGifAnim.SetFileName(const AValue: string); -var - fn: string; begin - - if (FFileName = AValue) then - exit; + if (FFileName = AValue) then Exit; FFileName := AValue; ResetImage; - if (FFileName = '') then exit; - if (csDesigning in ComponentState) then - begin - fn:= ExtractFileName(AValue); - FFileName:= ExtractFilePath(AValue); - FFileName:= ExtractRelativepath(ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile) ,FFileName); - FFileName:=FFileName+fn; - LoadFromFile(FFileName+fn); - end - else begin - FFileName := AValue; - LoadFromFile(FFileName); - end; + if (FFileName = '') then Exit; + LoadFromFile(FFileName); if not Empty then GifChanged; end; @@ -441,10 +463,10 @@ end; end; -class function TGifAnim.GetControlClassDefaultSize: TPoint; +class function TGifAnim.GetControlClassDefaultSize: TSize; begin - Result.X := 90; - Result.Y := 90; + Result.CX := 90; + Result.CY := 90; end; procedure TGifAnim.GifChanged; Index: gifanimdsgn.pas =================================================================== --- gifanimdsgn.pas (revision 0) +++ gifanimdsgn.pas (revision 0) @@ -0,0 +1,41 @@ +unit GifAnimDsgn; + +{$mode objfpc}{$H+} + +interface + +uses + LazIDEIntf, PropEdits; + +Type + TGifFileNamePropertyEditor = class(TFileNamePropertyEditor) + protected + function GetFilter: String; override; + function GetInitialDirectory: string; override; + end; + +procedure Register; + +implementation + +uses + SysUtils, GifAnim; + +function TGifFileNamePropertyEditor.GetFilter: String; +begin + Result := 'GIF|*.gif'; +end; + +function TGifFileNamePropertyEditor.GetInitialDirectory: string; +begin + Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); +end; + +procedure Register; +begin + RegisterPropertyEditor(TypeInfo(String), TGifAnim, + 'FileName', TGifFileNamePropertyEditor); +end; + +end. + Index: pkg_gifanim.lpk =================================================================== --- pkg_gifanim.lpk (revision none) +++ pkg_gifanim.lpk (working copy) @@ -1,15 +1,21 @@ - + - + + - + - + + + + + + @@ -33,15 +39,16 @@ - + - + + - + Index: pkg_gifanim_dsgn.lpk =================================================================== --- pkg_gifanim_dsgn.lpk (revision 0) +++ pkg_gifanim_dsgn.lpk (revision 0) @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: pkg_gifanim_dsgn.pas =================================================================== --- pkg_gifanim_dsgn.pas (revision 0) +++ pkg_gifanim_dsgn.pas (revision 0) @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit pkg_gifanim_dsgn; + +interface + +uses + GifAnimDsgn, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('GifAnimDsgn', @GifAnimDsgn.Register); +end; + +initialization + RegisterPackage('pkg_gifanim_dsgn', @Register); +end. doublecmd-1.1.30/components/doublecmd/0000755000175000001440000000000015104114162016710 5ustar alexxusersdoublecmd-1.1.30/components/doublecmd/iconvenc/0000755000175000001440000000000015104114162020514 5ustar alexxusersdoublecmd-1.1.30/components/doublecmd/iconvenc/dc_iconvert.inc0000644000175000001440000000225515104114162023512 0ustar alexxusersfunction Iconvert(S: string; var Res: string; const FromEncoding, ToEncoding: string): cint; var InLen, OutLen, Offset: size_t; Src, Dst: pchar; H: iconv_t; lerr: cint; iconvres: size_t; begin H := iconv_open(PChar(ToEncoding), PChar(FromEncoding)); if h=Iconv_t(-1) then begin Res := S; exit(-1); end; try InLen:=Length(s); outlen:=InLen; setlength(res,outlen); Src := PChar(S); Dst := PChar(Res); while InLen > 0 do begin iconvres := iconv(H, @Src, @InLen, @Dst, @OutLen); if iconvres = size_t(-1) then begin lerr := cerrno; if lerr = ESysEILSEQ then // unknown char, skip begin Inc(Src); Dec(InLen); end else if lerr = ESysE2BIG then begin Offset := Dst - PChar(Res); SetLength(Res, Length(Res)+InLen*2+5); // 5 is minimally one utf-8 char Dst := PChar(Res) + Offset; OutLen := Length(Res) - Offset; end else exit(-1) end; end; finally setlength(Res,Length(Res) - Outlen); iconv_close(H); end; Result := 0; end; doublecmd-1.1.30/components/doublecmd/iconvenc/dc_iconvenc_dyn.pas0000644000175000001440000000567415104114162024361 0ustar alexxusers{ This file is part of the Free Pascal run time library. Copyright (c) 2000 by Marco van de Voort(marco@freepascal.org) member of the Free Pascal development team libiconv header translation + a helper routine http://wiki.freepascal.org/iconvenc Dynamic version See the file COPYING.FPC, included in this distribution, for details about the copyright. (LGPL) 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. } unit dc_iconvenc_dyn; interface {$mode objfpc}{$H+} uses ctypes,unixtype,baseunix, dl, initc; const n = 1; {$ifdef beos} ESysEILSEQ = EILSEQ; {$endif} type piconv_t = ^iconv_t; iconv_t = pointer; Ticonv_open = function(__tocode: pchar; __fromcode: pchar): iconv_t; cdecl; Ticonv = function(__cd: iconv_t; __inbuf: ppchar; __inbytesleft: psize_t; __outbuf: ppchar; __outbytesleft: psize_t): size_t; cdecl; Ticonv_close = function(__cd: iconv_t): cint; cdecl; var iconv_lib: pointer; iconv_open: Ticonv_open; iconv: Ticonv; iconv_close: Ticonv_close; IconvLibFound: boolean = False; function TryLoadLib(LibName: string; var error: string): boolean; // can be used to load non standard libname function Iconvert(s: string; var res: string; const FromEncoding, ToEncoding: string): cint; function InitIconv(var error: string): boolean; implementation function TryLoadLib(LibName: string; var error: string): boolean; function resolvesymbol (var funcptr; symbol: string): Boolean; begin pointer(funcptr) := pointer(dlsym(iconv_lib, pchar(symbol))); result := assigned(pointer(funcptr)); if not result then error := error+#13#10+dlerror(); end; var res: boolean; begin result := false; Error := Error+#13#10'Trying '+LibName; iconv_lib := dlopen(pchar(libname), RTLD_NOW); if Assigned(iconv_lib) then begin result := true; result := result and resolvesymbol(pointer(iconv),'iconv'); result := result and resolvesymbol(pointer(iconv_open),'iconv_open'); result := result and resolvesymbol(pointer(iconv_close),'iconv_close'); if not result then begin result:=true; result := result and resolvesymbol(pointer(iconv),'libiconv'); result := result and resolvesymbol(pointer(iconv_open),'libiconv_open'); result := result and resolvesymbol(pointer(iconv_close),'libiconv_close'); end; // if not res then // dlclose(iconv_lib); end else error:=error+#13#10+dlerror(); end; function InitIconv(var error: string): boolean; begin result := true; error := ''; if not TryLoadLib('libc.so.6', error) then if not TryLoadLib('libiconv.so', error) then {$if defined(haiku)} if not TryLoadLib('libtextencoding.so', error) then {$ifend} result := false; iconvlibfound := iconvlibfound or result; end; {$i dc_iconvert.inc} end. doublecmd-1.1.30/components/doublecmd/doublecmd_common.pas0000644000175000001440000000066315104114162022730 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit doublecmd_common; {$warn 5023 off : no warning about unused units} interface uses DCClassesUtf8, DCOSUtils, DCStrUtils, DCBasicTypes, DCFileAttributes, DCConvertEncoding, DCDateTimeUtils, DCXmlConfig, DCProcessUtf8, DCUnicodeUtils, DCStringHashListUtf8, DCJsonConfig; implementation end. doublecmd-1.1.30/components/doublecmd/doublecmd_common.lpk0000644000175000001440000000615015104114162022730 0ustar alexxusers doublecmd-1.1.30/components/doublecmd/dcxmlconfig.pas0000755000175000001440000006412515104114162021725 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implementation of configuration file in XML. Based on XmlConf from fcl-xml package. Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2013-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit DCXmlConfig; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Laz2_DOM, Laz2_XMLRead, Laz2_XMLWrite; type // Define type aliases so we don't have to include DOM if we want to use config. TXmlNode = TDOMNode; TXmlPath = DOMString; { TXmlConfig } TXmlConfig = class private FFileName: String; FDoc: TXMLDocument; function GetRootNode: TXmlNode; procedure SplitPathToNodeAndAttr(const Path: DOMString; out NodePath: DOMString; out AttrName: DOMString); public constructor Create; virtual; constructor Create(const AFileName: String; AutoLoad: Boolean = False); virtual; destructor Destroy; override; procedure Clear; function AddNode(const RootNode: TDOMNode; const ValueName: DOMString): TDOMNode; procedure DeleteNode(const RootNode: TDOMNode; const Path: DOMString); procedure DeleteNode(const Node: TDOMNode); procedure ClearNode(const Node: TDOMNode); function FindNode(const RootNode: TDOMNode; const Path: DOMString; bCreate: Boolean = False): TDOMNode; function GetContent(const Node: TDOMNode): String; function IsEmpty: Boolean; procedure SetContent(const Node: TDOMNode; const AValue: String); // ------------------------------------------------------------------------ function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; function GetValue(const RootNode: TDOMNode; const Path: DOMString; constref ADefault: TRect): TRect; // The Try... functions return True if the attribute/node was found and only then set AValue. function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; // ------------------------------------------------------------------------ // AddValue functions always add a new node. procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: String); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Boolean); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Integer); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Int64); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Double); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: String); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Boolean); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Integer); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Int64); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Double); // SetValue functions can only set values for unique paths. procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; constref AValue: TRect); // ------------------------------------------------------------------------ procedure GetFont(const aNode: TXmlNode; Path: TXmlPath; var Name: String; var Size: Integer; var Style, Quality: Integer; const DefName: String; const DefSize: Integer; const DefStyle, DefQuality: Integer); procedure SetFont(const aNode: TXmlNode; Path: TXmlPath; const Name: String; const Size: Integer; const Style, Quality: Integer); // ------------------------------------------------------------------------ procedure ReadFromFile(const AFilename: String); procedure ReadFromStream(AStream: TStream); procedure WriteToFile(const AFilename: String); procedure WriteToStream(AStream: TStream); function Load: Boolean; function LoadBypassingErrors: Boolean; function Save: Boolean; {en Get path of form "//...". } function GetPathFromNode(aNode: TDOMNode): String; property FileName: String read FFileName write FFileName; property RootNode: TXmlNode read GetRootNode; end; EXmlConfigEmpty = class(EFilerError); EXmlConfigNotFound = class(EFilerError); implementation uses LazLogger, DCBasicTypes, DCOSUtils, DCClassesUtf8, URIParser; const XML_READER_FLAGS = [xrfAllowSpecialCharsInAttributeValue]; const BoolStrings: array[Boolean] of DOMString = ('False', 'True'); constructor TXmlConfig.Create; begin Clear; end; constructor TXmlConfig.Create(const AFileName: String; AutoLoad: Boolean); begin FFileName := AFileName; if not (AutoLoad and LoadBypassingErrors) then Clear; end; destructor TXmlConfig.Destroy; begin FreeAndNil(FDoc); inherited Destroy; end; procedure TXmlConfig.Clear; begin FreeAndNil(FDoc); FDoc := TXMLDocument.Create; FDoc.AppendChild(FDoc.CreateElement(ApplicationName)); end; function TXmlConfig.GetRootNode: TXmlNode; begin Result := FDoc.DocumentElement; end; // ------------------------------------------------------------------------ function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; var Node: TDOMNode; Attr: TDOMAttr; NodePath, AttrName: DOMString; begin SplitPathToNodeAndAttr(Path, NodePath, AttrName); if NodePath <> EmptyStr then begin Node := FindNode(RootNode, NodePath, False); if not Assigned(Node) then Exit(False); end else Node := RootNode; Attr := TDOMElement(Node).GetAttributeNode(AttrName); Result := Assigned(Attr); if Result then AValue := Attr.Value; end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue); if Result then begin if SameText(sValue, 'TRUE') then AValue := True else if SameText(sValue, 'FALSE') then AValue := False else Result := False; // If other text then return not found. end; end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToInt(sValue, AValue); end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToInt64(sValue, AValue); end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToFloat(sValue, AValue); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; var Node: TDOMNode; begin Node := FindNode(RootNode, Path, False); if Assigned(Node) then Result := Node.TextContent else Result := ADefault; end; function TXmlConfig.IsEmpty: Boolean; begin Result := RootNode.ChildNodes.Count = 0; end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; var sValue: String; begin sValue := GetValue(RootNode, Path, ''); if SameText(sValue, 'TRUE') then Result := True else if SameText(sValue, 'FALSE') then Result := False else Result := ADefault; end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; begin Result := StrToIntDef(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; begin Result := StrToInt64Def(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; begin Result := StrToFloatDef(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; constref ADefault: TRect): TRect; var I: Integer; ARect: TStringArray; begin ARect:= GetValue(RootNode, Path, '').Split(['|']); if Length(ARect) <> 4 then Result:= ADefault else begin for I:= 0 to 3 do Result.Vector[I]:= StrToIntDef(ARect[I], ADefault.Vector[I]); end; end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; var Node: TDOMNode; begin Node := FindNode(RootNode, Path, False); Result := Assigned(Node); if Result then AValue := Node.TextContent; end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue); if Result then begin if SameText(sValue, 'TRUE') then AValue := True else if SameText(sValue, 'FALSE') then AValue := False else Result := False; // If other text then return not found. end; end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToInt(sValue, AValue); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToInt64(sValue, AValue); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToFloat(sValue, AValue); end; // ---------------------------------------------------------------------------- procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: String); var Node: TDOMNode; begin Node := RootNode.AppendChild(FDoc.CreateElement(ValueName)); Node.TextContent := AValue; end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Boolean); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Double); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Int64); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Integer); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: String); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Boolean); begin AddValue(RootNode, ValueName, BoolStrings[AValue]); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Integer); begin AddValue(RootNode, ValueName, IntToStr(AValue)); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Int64); begin AddValue(RootNode, ValueName, IntToStr(AValue)); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Double); begin AddValue(RootNode, ValueName, FloatToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); var Node: TDOMNode; NodePath, AttrName: DOMString; begin SplitPathToNodeAndAttr(Path, NodePath, AttrName); if NodePath <> EmptyStr then begin Node := FindNode(RootNode, NodePath, True); TDOMElement(Node)[AttrName] := AValue; end else TDOMElement(RootNode)[AttrName] := AValue; end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); begin SetAttr(RootNode, Path, BoolStrings[AValue]); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); begin SetAttr(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); begin SetAttr(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); begin SetAttr(RootNode, Path, FloatToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); var Node: TDOMNode; begin Node := FindNode(RootNode, Path, True); Node.TextContent := AValue; end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); begin SetValue(RootNode, Path, BoolStrings[AValue]); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); begin SetValue(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); begin SetValue(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); begin SetValue(RootNode, Path, FloatToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; constref AValue: TRect); var S: String; begin S:= IntToStr(AValue.Vector[0]) + '|' + IntToStr(AValue.Vector[1]) + '|' + IntToStr(AValue.Vector[2]) + '|' + IntToStr(AValue.Vector[3]); SetValue(RootNode, Path, S); end; // ---------------------------------------------------------------------------- procedure TXmlConfig.ReadFromFile(const AFilename: String); var FileStream: TStream; TmpDoc: TXMLDocument; begin FileStream := TFileStreamEx.Create(AFilename, fmOpenRead or fmShareDenyWrite); try if FileStream.Size = 0 then raise EXmlConfigEmpty.Create(''); ReadXMLFile(TmpDoc, FileStream, FilenameToURI(AFilename), XML_READER_FLAGS); if TmpDoc.DocumentElement.NodeName <> ApplicationName then raise EXMLReadError.Create('Root element is not <' + ApplicationName + '>.'); FDoc.Free; FDoc := TmpDoc; finally FileStream.Free; end; end; procedure TXmlConfig.ReadFromStream(AStream: TStream); var TmpDoc: TXMLDocument; begin if AStream.Size = 0 then raise EXmlConfigEmpty.Create(''); ReadXMLFile(TmpDoc, AStream, XML_READER_FLAGS); FDoc.Free; FDoc := TmpDoc; end; procedure TXmlConfig.WriteToFile(const AFilename: String); var FileStream: TFileStreamEx; begin FileStream := TFileStreamEx.Create(AFilename, fmCreate or fmShareDenyWrite); try WriteToStream(FileStream); FileStream.Flush; finally FileStream.Free; end; end; procedure TXmlConfig.WriteToStream(AStream: TStream); var Position: Int64; MemoryStream: TMemoryStream; begin MemoryStream:= TMemoryStream.Create; try WriteXMLFile(FDoc, MemoryStream); Position:= AStream.Position; AStream.Size:= MemoryStream.Size; AStream.Position:= Position; MemoryStream.SaveToStream(AStream); finally MemoryStream.Free; end; end; function TXmlConfig.Load: Boolean; begin Result := False; if FFileName = '' then Exit; if not mbFileExists(FileName) then raise EXmlConfigNotFound.Create(''); if not mbFileAccess(FileName, fmOpenRead or fmShareDenyWrite) then raise EFOpenError.Create(SysErrorMessage(GetLastOSError)); ReadFromFile(FileName); Result := True; end; function TXmlConfig.LoadBypassingErrors: Boolean; var ErrMsg: String; begin try Result := Load; except on e: Exception do begin ErrMsg := 'Error loading configuration file ' + FileName; if e.Message <> EmptyStr then ErrMsg := ErrMsg + ': ' + e.Message; DebugLogger.DebugLn(ErrMsg); Result := False; end; end; end; function TXmlConfig.Save: Boolean; var AFileName: String; dwAttr: TFileAttrs; bFileExists: Boolean; sTmpConfigFileName: String; begin Result := False; if FFileName = '' then Exit; dwAttr := mbFileGetAttr(FileName); bFileExists := (dwAttr <> faInvalidAttributes) and (not FPS_ISDIR(dwAttr)); if bFileExists and FPS_ISLNK(dwAttr) then AFileName := mbReadAllLinks(FileName) else begin AFileName := FileName; end; // Write to temporary file and if successfully written rename to proper name. if (not bFileExists) or mbFileAccess(AFileName, fmOpenWrite or fmShareDenyWrite) then begin sTmpConfigFileName := GetTempName(AFileName); try WriteToFile(sTmpConfigFileName); if bFileExists then begin mbFileCopyAttr(AFileName, sTmpConfigFileName, [caoCopyOwnership, caoCopyPermissions]); end; if not mbRenameFile(sTmpConfigFileName, AFileName) then begin mbDeleteFile(sTmpConfigFileName); DebugLogger.Debugln('Cannot save configuration file ', FileName); end else Result := True; except on e: EStreamError do begin mbDeleteFile(sTmpConfigFileName); DebugLogger.Debugln('Error saving configuration file ', FileName, ': ' + e.Message); end; end; end else begin DebugLogger.Debugln('Cannot save configuration file ', FileName, ' - check permissions'); end; end; procedure TXmlConfig.SplitPathToNodeAndAttr(const Path: DOMString; out NodePath: DOMString; out AttrName: DOMString); var AttrSepPos: Integer; begin // Last part of the path is the attr name. AttrSepPos := Length(Path); while (AttrSepPos > 0) and (Path[AttrSepPos] <> '/') do Dec(AttrSepPos); if (AttrSepPos = 0) or (AttrSepPos = Length(Path)) then begin NodePath := EmptyStr; AttrName := Path; end else begin NodePath := Copy(Path, 1, AttrSepPos - 1); AttrName := Copy(Path, AttrSepPos + 1, Length(Path) - AttrSepPos); end; end; function TXmlConfig.AddNode(const RootNode: TDOMNode; const ValueName: DOMString): TDOMNode; begin Result := RootNode.AppendChild(FDoc.CreateElement(ValueName)); end; procedure TXmlConfig.DeleteNode(const RootNode: TDOMNode; const Path: DOMString); begin DeleteNode(FindNode(RootNode, Path, False)); end; procedure TXmlConfig.DeleteNode(const Node: TDOMNode); begin if Assigned(Node) and Assigned(Node.ParentNode) then Node.ParentNode.DetachChild(Node); end; procedure TXmlConfig.ClearNode(const Node: TDOMNode); var Attr: TDOMAttr; begin while Assigned(Node.FirstChild) do Node.RemoveChild(Node.FirstChild); if Node.HasAttributes then begin Attr := TDOMAttr(Node.Attributes[0]); while Assigned(Attr) do begin TDOMElement(Node).RemoveAttributeNode(Attr); Attr := TDOMAttr(Attr.NextSibling); end; end; end; function TXmlConfig.FindNode(const RootNode: TDOMNode; const Path: DOMString; bCreate: Boolean = False): TDOMNode; var StartPos, EndPos: Integer; PathLen: Integer; Child: TDOMNode; function CompareDOMStrings(const s1, s2: DOMPChar; l1, l2: integer): integer; var i: integer; begin Result:=l1-l2; i:=0; while (i '/') do Inc(EndPos); Child := Result.FirstChild; while Assigned(Child) and not ((Child.NodeType = ELEMENT_NODE) and (0 = CompareDOMStrings(DOMPChar(Child.NodeName), @Path[StartPos], Length(Child.NodeName), EndPos-StartPos))) do Child := Child.NextSibling; if not Assigned(Child) and bCreate then begin Child := FDoc.CreateElementBuf(@Path[StartPos], EndPos-StartPos); Result.AppendChild(Child); end; Result := Child; StartPos := EndPos + 1; if StartPos > PathLen then Break; end; end; function TXmlConfig.GetContent(const Node: TDOMNode): String; begin Result := Node.TextContent; end; procedure TXmlConfig.SetContent(const Node: TDOMNode; const AValue: String); begin Node.TextContent := AValue; end; function TXmlConfig.GetPathFromNode(aNode: TDOMNode): String; begin Result := aNode.NodeName; aNode := aNode.ParentNode; while Assigned(aNode) and (aNode <> RootNode) do begin Result := aNode.NodeName + '/' + Result; aNode := aNode.ParentNode; end; end; procedure TXmlConfig.GetFont(const aNode: TXmlNode; Path: TXmlPath; var Name: String; var Size: Integer; var Style, Quality: Integer; const DefName: String; const DefSize: Integer; const DefStyle, DefQuality: Integer); begin if Path <> '' then Path := Path + '/'; Name := GetValue(aNode, Path + 'Name', DefName); Size := GetValue(aNode, Path + 'Size', DefSize); Style := GetValue(aNode, Path + 'Style', DefStyle); Quality := GetValue(aNode, Path + 'Quality', DefQuality); end; procedure TXmlConfig.SetFont(const aNode: TXmlNode; Path: TXmlPath; const Name: String; const Size: Integer; const Style, Quality: Integer); begin if Path <> '' then Path := Path + '/'; SetValue(aNode, Path + 'Name', Name); SetValue(aNode, Path + 'Size', Size); SetValue(aNode, Path + 'Style', Style); SetValue(aNode, Path + 'Quality', Quality); end; end. doublecmd-1.1.30/components/doublecmd/dcwindows.pas0000644000175000001440000002215315104114162021421 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- This unit contains Windows specific functions Copyright (C) 2015-2019 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCWindows; {$mode objfpc}{$H+} interface uses Windows; {en Converts file name in UTF-8 encoding to file name with UTF-16 encoding with extended-length path prefix } function UTF16LongName(const FileName: String): UnicodeString; {en Enable a privilege @param(hToken Access token handle) @param(lpszPrivilege Name of privilege to enable) @returns(The function returns @true if successful, @false otherwise) } function EnablePrivilege(hToken: HANDLE; lpszPrivilege: LPCTSTR): Boolean; {en Copy permissions specific to the NTFS file system, like read and write permissions, and the file owner } function CopyNtfsPermissions(const Source, Target: String): Boolean; {en Copy extended attributes specific to the NTFS file system, like FILE_ATTRIBUTE_COMPRESSED } function mbFileCopyXattr(const Source, Target: String): Boolean; {en Retrieves the final path for the specified file } function GetFinalPathNameByHandle(hFile: THandle): UnicodeString; {en Retrieves the file system type name } function GetFileSystemType(const Path: String): UnicodeString; implementation uses SysUtils, JwaAclApi, JwaWinNT, JwaAccCtrl, JwaWinBase, JwaWinType, JwaNative, JwaNtStatus, DCConvertEncoding; var GetFinalPathNameByHandleW: function(hFile: HANDLE; lpszFilePath: LPWSTR; cchFilePath: DWORD; dwFlags: DWORD): DWORD; stdcall; NtQueryObject: function(ObjectHandle : HANDLE; ObjectInformationClass : OBJECT_INFORMATION_CLASS; ObjectInformation : PVOID; ObjectInformationLength : ULONG; ReturnLength : PULONG): NTSTATUS; stdcall; function UTF16LongName(const FileName: String): UnicodeString; var Temp: PWideChar; begin if Pos('\\', FileName) = 0 then Result := '\\?\' + CeUtf8ToUtf16(FileName) else begin Result := '\\?\UNC\' + CeUtf8ToUtf16(Copy(FileName, 3, MaxInt)); end; Temp := Pointer(Result) + 4; while Temp^ <> #0 do begin if Temp^ = '/' then Temp^:= '\'; Inc(Temp); end; if ((Temp - 1)^ = DriveSeparator) then Result:= Result + '\'; end; function EnablePrivilege(hToken: HANDLE; lpszPrivilege: LPCTSTR): Boolean; var tp: TTokenPrivileges; luid: TLuid = (LowPart: 0; HighPart: 0); begin if (not LookupPrivilegeValue(nil, lpszPrivilege, luid)) then Exit(False); tp.PrivilegeCount:= 1; tp.Privileges[0].Luid:= luid; tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED; // Enable privilege in the specified access token if (not AdjustTokenPrivileges(hToken, False, @tp, SizeOf(TTokenPrivileges), nil, nil)) then Exit(False); // Not all privileges or groups referenced are assigned to the caller Result:= not (GetLastError() = ERROR_NOT_ALL_ASSIGNED); end; function CopyNtfsPermissions(const Source, Target: String): Boolean; const DisabledPrivilege: Boolean = True; var Dacl, Sacl: PACL; lpdwRevision: DWORD = 0; ProcessToken: HANDLE = 0; SidOwner, SidGroup: PSID; SecDescPtr: PSECURITY_DESCRIPTOR = nil; SecDescCtl: SECURITY_DESCRIPTOR_CONTROL = 0; SecurityInfo: SECURITY_INFORMATION = DACL_SECURITY_INFORMATION or SACL_SECURITY_INFORMATION or OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION; begin if DisabledPrivilege then begin DisabledPrivilege:= False; Result:= OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ProcessToken); if not Result then Exit(False) else begin EnablePrivilege(ProcessToken, SE_BACKUP_NAME); EnablePrivilege(ProcessToken, SE_RESTORE_NAME); EnablePrivilege(ProcessToken, SE_SECURITY_NAME); CloseHandle(ProcessToken); end; end; Result:= GetNamedSecurityInfoW(PWideChar(CeUtf8ToUtf16(Source)), SE_FILE_OBJECT, SecurityInfo, @SidOwner, @SidGroup, @Dacl, @Sacl, SecDescPtr) = ERROR_SUCCESS; if Result then begin if GetSecurityDescriptorControl(SecDescPtr, SecDescCtl, lpdwRevision) then begin // Need to copy DACL inheritance if (SecDescCtl and SE_DACL_PROTECTED <> 0) then SecurityInfo:= SecurityInfo or PROTECTED_DACL_SECURITY_INFORMATION else begin SecurityInfo:= SecurityInfo or UNPROTECTED_DACL_SECURITY_INFORMATION; end; // Need to copy SACL inheritance if (SecDescCtl and SE_SACL_PROTECTED <> 0) then SecurityInfo:= SecurityInfo or PROTECTED_SACL_SECURITY_INFORMATION else begin SecurityInfo:= SecurityInfo or UNPROTECTED_SACL_SECURITY_INFORMATION; end; Result:= SetNamedSecurityInfoW(PWideChar(CeUtf8ToUtf16(Target)), SE_FILE_OBJECT, SecurityInfo, SidOwner, SidGroup, Dacl, Sacl) = ERROR_SUCCESS; end; {$PUSH}{$HINTS OFF}{$WARNINGS OFF} LocalFree(HLOCAL(SecDescPtr)); {$POP} end; end; function mbFileCopyXattr(const Source, Target: String): Boolean; const FSCTL_SET_COMPRESSION = $9C040; COMPRESSION_FORMAT_DEFAULT = 1; var dwFlags: DWORD; Handle: THandle; LastError: DWORD; BytesReturned: DWORD; dwFileAttributes: DWORD; Format: UInt16 = COMPRESSION_FORMAT_DEFAULT; lpszVolumePathName: array[0..maxSmallint] of WideChar; begin Result:= True; dwFileAttributes:= GetFileAttributesW(PWideChar(UTF16LongName(Source))); if (dwFileAttributes and FILE_ATTRIBUTE_COMPRESSED <> 0) then begin if (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0) then dwFlags:= FILE_FLAG_BACKUP_SEMANTICS else begin dwFlags:= 0; end; dwFileAttributes:= GetFileAttributesW(PWideChar(UTF16LongName(Target))); if (dwFileAttributes and FILE_ATTRIBUTE_COMPRESSED <> 0) or (dwFileAttributes and FILE_ATTRIBUTE_ENCRYPTED <> 0) then Exit; if GetVolumePathNameW(PWideChar(UTF16LongName(Target)), PWideChar(lpszVolumePathName), maxSmallint) then begin if GetVolumeInformationW(lpszVolumePathName, nil, 0, nil, LastError, dwFileAttributes, nil, 0) then begin if (dwFileAttributes and FILE_FILE_COMPRESSION = 0) then Exit; end; end; Handle:= CreateFileW(PWideChar(UTF16LongName(Target)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, dwFlags, 0); if Handle <> INVALID_HANDLE_VALUE then begin Result:= DeviceIoControl(Handle, FSCTL_SET_COMPRESSION, @Format, SizeOf(Format), nil, 0, @BytesReturned, nil); if not Result then LastError:= GetLastError; CloseHandle(Handle); end; end; if not Result then SetLastError(LastError); end; function GetFinalPathNameByHandle(hFile: THandle): UnicodeString; const VOLUME_NAME_NT = $02; MAX_SIZE = SizeOf(TObjectNameInformation) + MAXWORD; var ReturnLength : ULONG; ObjectInformation : PObjectNameInformation; begin if (Win32MajorVersion > 5) then begin SetLength(Result, maxSmallint + 1); SetLength(Result, GetFinalPathNameByHandleW(hFile, PWideChar(Result), maxSmallint, VOLUME_NAME_NT)); end else begin ObjectInformation:= GetMem(MAX_SIZE); if (NtQueryObject(hFile, ObjectNameInformation, ObjectInformation, MAXWORD, @ReturnLength) <> STATUS_SUCCESS) then Result:= EmptyWideStr else begin SetLength(Result, ObjectInformation^.Name.Length div SizeOf(WideChar)); Move(ObjectInformation^.Name.Buffer^, Result[1], ObjectInformation^.Name.Length); end; FreeMem(ObjectInformation); end; end; function GetFileSystemType(const Path: String): UnicodeString; var lpFileSystemFlags: DWORD = 0; lpMaximumComponentLength: DWORD = 0; lpFileSystemNameBuffer: array [Byte] of WideChar; begin if GetVolumeInformationW(PWideChar(CeUtf8ToUtf16(ExtractFileDrive(Path)) + PathDelim), nil, 0, nil, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, SizeOf(lpFileSystemNameBuffer)) then Result:= lpFileSystemNameBuffer else Result:= EmptyWideStr; end; procedure Initialize; begin if Win32MajorVersion < 6 then Pointer(NtQueryObject):= GetProcAddress(GetModuleHandleW(ntdll), 'NtQueryObject') else begin Pointer(GetFinalPathNameByHandleW):= GetProcAddress(GetModuleHandleW(kernel32), 'GetFinalPathNameByHandleW'); end; end; initialization Initialize; end. doublecmd-1.1.30/components/doublecmd/dcunix.pas0000644000175000001440000004233415104114162020715 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- This unit contains Unix specific functions Copyright (C) 2015-2024 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Notes: 1. TDarwinStat64 is the workaround for the bug of BaseUnix.Stat in FPC. on MacOS with x86_64, Stat64 should be used instead of Stat. and lstat64() should be called instead of lstat(). } unit DCUnix; {$mode objfpc}{$H+} {$modeswitch advancedrecords} {$packrecords c} interface uses InitC, BaseUnix, UnixType, DCBasicTypes, SysUtils; const {$IF DEFINED(LINUX)} FD_CLOEXEC = 1; O_CLOEXEC = &02000000; O_PATH = &010000000; _SC_NPROCESSORS_ONLN = 84; {$ELSEIF DEFINED(FREEBSD)} O_CLOEXEC = &04000000; _SC_NPROCESSORS_ONLN = 58; CLOSE_RANGE_CLOEXEC = (1 << 2); {$ELSEIF DEFINED(NETBSD)} O_CLOEXEC = $00400000; {$ELSEIF DEFINED(HAIKU)} FD_CLOEXEC = 1; O_CLOEXEC = $00000040; {$ELSEIF DEFINED(DARWIN)} F_NOCACHE = 48; O_CLOEXEC = $1000000; _SC_NPROCESSORS_ONLN = 58; {$ELSE} O_CLOEXEC = 0; {$ENDIF} {$IF DEFINED(LINUX)} {$I dclinuxmagic.inc} {$ENDIF} type {$IF DEFINED(LINUX)} TUnixTime = {$IF DEFINED(CPUAARCH64)} Int64 {$ELSEIF DEFINED(CPUMIPS)} LongInt {$ELSE}UIntPtr{$ENDIF}; TUnixMode = {$IF DEFINED(CPUPOWERPC)} LongInt {$ELSE}Cardinal{$ENDIF}; {$ELSE} TUnixTime = TTime; TUnixMode = TMode; {$ENDIF} type PTimeStruct = ^TTimeStruct; TTimeStruct = record tm_sec: cint; //* Seconds. [0-60] (1 leap second) tm_min: cint; //* Minutes. [0-59] tm_hour: cint; //* Hours. [0-23] tm_mday: cint; //* Day. [1-31] tm_mon: cint; //* Month. [0-11] tm_year: cint; //* Year - 1900. tm_wday: cint; //* Day of week. [0-6] tm_yday: cint; //* Days in year. [0-365] tm_isdst: cint; //* DST. [-1/0/1] tm_gmtoff: clong; //* Seconds east of UTC. tm_zone: pansichar; //* Timezone abbreviation. end; type //en Password file entry record passwd = record pw_name: PChar; //en< user name pw_passwd: PChar; //en< user password pw_uid: uid_t; //en< user ID pw_gid: gid_t; //en< group ID {$IF DEFINED(BSD)} pw_change: time_t; //en< password change time pw_class: PChar; //en< user access class {$ENDIF} {$IF NOT DEFINED(HAIKU)} pw_gecos: PChar; //en< real name {$ENDIF} pw_dir: PChar; //en< home directory pw_shell: PChar; //en< shell program {$IF DEFINED(HAIKU)} pw_gecos: PChar; //en< real name {$ENDIF} {$IF DEFINED(BSD)} pw_expire: time_t; //en< account expiration pw_fields: cint; //en< internal: fields filled in {$ENDIF} end; TPasswordRecord = passwd; PPasswordRecord = ^TPasswordRecord; //en Group file entry record group = record gr_name: PChar; //en< group name gr_passwd: PChar; //en< group password gr_gid: gid_t; //en< group ID gr_mem: ^PChar; //en< group members end; TGroupRecord = group; PGroupRecord = ^TGroupRecord; type {$IF DEFINED(DARWIN)} TDarwinStat64 = record { the types are real} st_dev : dev_t; // inode's device st_mode : mode_t; // inode protection mode st_nlink : nlink_t; // number of hard links st_ino : cuint64; // inode's number st_uid : uid_t; // user ID of the file's owner st_gid : gid_t; // group ID of the file's group st_rdev : dev_t; // device type st_atime : time_t; // time of last access st_atimensec : clong; // nsec of last access st_mtime : time_t; // time of last data modification st_mtimensec : clong; // nsec of last data modification st_ctime : time_t; // time of last file status change st_ctimensec : clong; // nsec of last file status change st_birthtime : time_t; // File creation time st_birthtimensec : clong; // nsec of file creation time st_size : off_t; // file size, in bytes st_blocks : cint64; // blocks allocated for file st_blksize : cuint32; // optimal blocksize for I/O st_flags : cuint32; // user defined flags for file st_gen : cuint32; // file generation number st_lspare : cint32; st_qspare : array[0..1] Of cint64; end; TDCStat = TDarwinStat64; {$ELSE} TDCStat = BaseUnix.Stat; {$ENDIF} PDCStat = ^TDCStat; TDCStatHelper = record Helper for TDCStat Public function birthtime: TFileTimeEx; inline; function mtime: TFileTimeEx; inline; function atime: TFileTimeEx; inline; function ctime: TFileTimeEx; inline; end; Function DC_fpLstat( const path:RawByteString; var Info:TDCStat ): cint; inline; // nanoseconds supported function DC_FileSetTime(const FileName: String; const mtime : TFileTimeEx; const birthtime: TFileTimeEx; const atime : TFileTimeEx ): Boolean; {en Set the close-on-exec flag to all } procedure FileCloseOnExecAll; {en Set the close-on-exec (FD_CLOEXEC) flag } procedure FileCloseOnExec(Handle: System.THandle); inline; {en Find mount point of file system where file is located @param(FileName File name) @returns(Mount point of file system) } function FindMountPointPath(const FileName: String): String; {en Change owner and group of a file (does not follow symbolic links) @param(path Full path to file) @param(owner User ID) @param(group Group ID) @returns(On success, zero is returned. On error, -1 is returned, and errno is set appropriately) } function fpLChown(path : String; owner : TUid; group : TGid): cInt; {en Set process group ID for job control } function setpgid(pid, pgid: pid_t): cint; cdecl; external clib; {en The getenv() function searches the environment list to find the environment variable name, and returns a pointer to the corresponding value string. } function getenv(name: PAnsiChar): PAnsiChar; cdecl; external clib; {en Change or add an environment variable @param(name Environment variable name) @param(value Environment variable value) @param(overwrite Overwrite environment variable if exist) @returns(The function returns zero on success, or -1 if there was insufficient space in the environment) } function setenv(const name, value: PAnsiChar; overwrite: cint): cint; cdecl; external clib; {en Remove an environment variable @param(name Environment variable name) @returns(The function returns zero on success, or -1 on error) } function unsetenv(const name: PAnsiChar): cint; cdecl; external clib; {en Get password file entry @param(uid User ID) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user ID) } function getpwuid(uid: uid_t): PPasswordRecord; cdecl; external clib; {en Get password file entry @param(name User name) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user name) } function getpwnam(const name: PChar): PPasswordRecord; cdecl; external clib; {en Get group file entry @param(gid Group ID) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the group database that matches the group ID) } function getgrgid(gid: gid_t): PGroupRecord; cdecl; external clib; {en Get group file entry @param(name Group name) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the group database that matches the group name) } function getgrnam(name: PChar): PGroupRecord; cdecl; external clib; {en Get configuration information at run time } function sysconf(name: cint): clong; cdecl; external clib; function FileLock(Handle: System.THandle; Mode: cInt): System.THandle; function fpMkTime(tm: PTimeStruct): TTime; function fpLocalTime(timer: PTime; tp: PTimeStruct): PTimeStruct; {$IF DEFINED(LINUX)} var KernVersion: UInt16; function fpFDataSync(fd: cint): cint; function fpCloneFile(src_fd, dst_fd: cint): Boolean; function fpFAllocate(fd: cint; mode: cint; offset, len: coff_t): cint; {$ENDIF} {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} function fnmatch(const pattern: PAnsiChar; const str: PAnsiChar; flags: cint): cint; cdecl; external clib; {$ENDIF} implementation uses Unix, DCConvertEncoding, LazUTF8 {$IF DEFINED(DARWIN)} , DCDarwin {$ELSEIF DEFINED(LINUX)} , Dos, DCLinux, DCOSUtils {$ELSEIF DEFINED(FREEBSD)} , DCOSUtils {$ENDIF} ; {$IF not DEFINED(LINUX)} function TDCStatHelper.birthtime: TFileTimeEx; begin {$IF DEFINED(HAIKU)} Result.sec:= st_crtime; Result.nanosec:= st_crtimensec; {$ELSE} Result.sec:= st_birthtime; Result.nanosec:= st_birthtimensec; {$ENDIF} end; function TDCStatHelper.mtime: TFileTimeEx; begin Result.sec:= st_mtime; Result.nanosec:= st_mtimensec; end; function TDCStatHelper.atime: TFileTimeEx; begin Result.sec:= st_atime; Result.nanosec:= st_atimensec; end; function TDCStatHelper.ctime: TFileTimeEx; begin Result.sec:= st_ctime; Result.nanosec:= st_ctimensec; end; {$ELSE} function TDCStatHelper.birthtime: TFileTimeEx; begin Result:= TFileTimeExNull; end; function TDCStatHelper.mtime: TFileTimeEx; begin Result.sec:= Int64(st_mtime); Result.nanosec:= Int64(st_mtime_nsec); end; function TDCStatHelper.atime: TFileTimeEx; begin Result.sec:= Int64(st_atime); Result.nanosec:= Int64(st_atime_nsec); end; function TDCStatHelper.ctime: TFileTimeEx; begin Result.sec:= Int64(st_ctime); Result.nanosec:= Int64(st_ctime_nsec); end; {$ENDIF} {$IF DEFINED(DARWIN)} Function fpLstat64( path:pchar; Info:pstat ): cint; cdecl; external clib name 'lstat64'; Function DC_fpLstat( const path:RawByteString; var Info:TDCStat ): cint; inline; var SystemPath: RawByteString; begin SystemPath:=ToSingleByteFileSystemEncodedFileName( path ); Result:= fpLstat64( pchar(SystemPath), @info ); end; {$ELSE} Function DC_fpLstat( const path:RawByteString; var Info:TDCStat ): cint; inline; begin Result:= fpLstat( path, info ); end; {$ENDIF} function fputimes( path:pchar; times:Array of UnixType.timeval ): cint; cdecl; external clib name 'utimes'; function DC_FileSetTime(const FileName: String; const mtime : TFileTimeEx; const birthtime: TFileTimeEx; const atime : TFileTimeEx ): Boolean; var timevals: Array[0..1] of UnixType.timeval; begin Result:= false; // last access time timevals[0].tv_sec:= atime.sec; timevals[0].tv_usec:= round( Extended(atime.nanosec) / 1000.0 ); // last modification time timevals[1].tv_sec:= mtime.sec; timevals[1].tv_usec:= round( Extended(mtime.nanosec) / 1000.0 ); if fputimes(pchar(UTF8ToSys(FileName)), timevals) <> 0 then exit; {$IF not DEFINED(DARWIN)} Result:= true; {$ELSE} Result:= MacosFileSetCreationTime( FileName, birthtime ); {$ENDIF} end; {$IF DEFINED(BSD)} type rlim_t = Int64; {$ENDIF} const {$IF DEFINED(LINUX)} _SC_OPEN_MAX = 4; FICLONE = $40049409; RLIM_INFINITY = rlim_t(-1); {$ELSEIF DEFINED(BSD)} _SC_OPEN_MAX = 5; RLIM_INFINITY = rlim_t(High(QWord) shr 1); {$ELSEIF DEFINED(HAIKU)} _SC_OPEN_MAX = 20; RLIMIT_NOFILE = 4; RLIM_INFINITY = $ffffffff; {$ENDIF} procedure tzset(); cdecl; external clib; function mktime(tp: PTimeStruct): TTime; cdecl; external clib; function localtime_r(timer: PTime; tp: PTimeStruct): PTimeStruct; cdecl; external clib; function lchown(path : PChar; owner : TUid; group : TGid): cInt; cdecl; external clib; {$IF DEFINED(LINUX)} function fdatasync(fd: cint): cint; cdecl; external clib; function fallocate(fd: cint; mode: cint; offset, len: coff_t): cint; cdecl; external clib; {$ENDIF} {$IF DEFINED(LINUX) OR DEFINED(FREEBSD)} var hLibC: TLibHandle = NilHandle; procedure LoadCLibrary; begin hLibC:= mbLoadLibrary(mbGetModuleName(@tzset)); end; {$ENDIF} {$IF DEFINED(LINUX) OR DEFINED(BSD)} var close_range: function(first: cuint; last: cuint; flags: cint): cint; cdecl = nil; {$ENDIF} procedure FileCloseOnExecAll; const MAX_FD = 1024; var fd: cint; p: TRLimit; fd_max: rlim_t = RLIM_INFINITY; begin {$IF DEFINED(LINUX) OR DEFINED(BSD)} if Assigned(close_range) then begin close_range(3, High(Int32), CLOSE_RANGE_CLOEXEC); Exit; end; {$ENDIF} if (FpGetRLimit(RLIMIT_NOFILE, @p) = 0) and (p.rlim_cur <> RLIM_INFINITY) then fd_max:= p.rlim_cur else begin {$IF DECLARED(_SC_OPEN_MAX)} fd_max:= sysconf(_SC_OPEN_MAX); {$ENDIF} end; if (fd_max = RLIM_INFINITY) or (fd_max > MAX_FD) then fd_max:= MAX_FD; for fd:= 3 to cint(fd_max) do FileCloseOnExec(fd); end; procedure FileCloseOnExec(Handle: System.THandle); begin {$IF DECLARED(FD_CLOEXEC)} FpFcntl(Handle, F_SETFD, FpFcntl(Handle, F_GETFD) or FD_CLOEXEC); {$ENDIF} end; function FindMountPointPath(const FileName: String): String; var I, J: LongInt; sTemp: String; recStat: Stat; st_dev: QWord; begin // Set root directory as mount point by default Result:= PathDelim; // Get stat info for original file if (fpLStat(FileName, recStat) < 0) then Exit; // Save device ID of original file st_dev:= recStat.st_dev; J:= Length(FileName); for I:= J downto 1 do begin if FileName[I] = PathDelim then begin if (I = 1) then sTemp:= PathDelim else sTemp:= Copy(FileName, 1, I - 1); // Stat for current directory if (fpLStat(sTemp, recStat) < 0) then Continue; // If it is a link then checking link destination if fpS_ISLNK(recStat.st_mode) then begin sTemp:= fpReadlink(sTemp); Result:= FindMountPointPath(sTemp); Exit; end; // Check device ID if (recStat.st_dev <> st_dev) then begin Result:= Copy(FileName, 1, J); Exit; end; J:= I; end; end; end; function fpLChown(path: String; owner: TUid; group: TGid): cInt; begin Result := lchown(PAnsiChar(CeUtf8ToSys(path)), owner, group); if Result = -1 then fpseterrno(fpgetCerrno); end; function FileLock(Handle: System.THandle; Mode: cInt): System.THandle; var lockop: cint; lockres: cint; lockerr: cint; {$IFDEF LINUX} Sbfs: TStatFS; {$ENDIF} begin Result:= Handle; case (Mode and $F0) of fmShareCompat, fmShareExclusive: lockop:= LOCK_EX or LOCK_NB; fmShareDenyWrite: lockop:= LOCK_SH or LOCK_NB; else Exit; end; {$IFDEF LINUX} if (fpFStatFS(Handle, @Sbfs) = 0) then begin case UInt32(Sbfs.fstype) of NFS_SUPER_MAGIC, SMB_SUPER_MAGIC, SMB2_MAGIC_NUMBER, CIFS_MAGIC_NUMBER: Exit; end; end; {$ENDIF} repeat lockres:= fpFlock(Handle, lockop); until (lockres = 0) or (fpgeterrno <> ESysEIntr); lockerr:= fpgeterrno; { Only return an error if locks are working and the file was already locked. Not if locks are simply unsupported (e.g., on Angstrom Linux you always get ESysNOLCK in the default configuration) } if (lockres <> 0) and ((lockerr = ESysEAGAIN) or (lockerr = ESysEDEADLK)) then begin Result:= -1; FileClose(Handle); end; end; function fpMkTime(tm: PTimeStruct): TTime; begin Result := mktime(tm); if (Result = TTime(-1)) then fpseterrno(fpgetCerrno); end; function fpLocalTime(timer: PTime; tp: PTimeStruct): PTimeStruct; begin Result := localtime_r(timer, tp); if (Result = nil) then fpseterrno(fpgetCerrno); end; {$IF DEFINED(LINUX)} function fpFDataSync(fd: cint): cint; begin Result := fdatasync(fd); if Result = -1 then fpseterrno(fpgetCerrno); end; function fpCloneFile(src_fd, dst_fd: cint): Boolean; var ASource: Pointer absolute src_fd; begin Result:= (FpIOCtl(dst_fd, FICLONE, ASource) = 0); end; function fpFAllocate(fd: cint; mode: cint; offset, len: coff_t): cint; begin Result := fallocate(fd, mode, offset, len); if Result = -1 then fpseterrno(fpgetCerrno); end; {$ENDIF} procedure Initialize; begin tzset(); {$IF DEFINED(LINUX) OR DEFINED(FREEBSD)} LoadCLibrary; {$IF DEFINED(LINUX)} KernVersion:= BEtoN(DosVersion); // Linux kernel >= 5.11 if KernVersion >= $50B then {$ENDIF} begin Pointer(close_range):= GetProcAddress(hLibC, 'close_range'); end; {$ELSEIF DEFINED(DARWIN)} close_range:= @CloseRange; {$ENDIF} end; initialization Initialize; end. doublecmd-1.1.30/components/doublecmd/dcunicodeutils.pas0000644000175000001440000003612715104114162022444 0ustar alexxusers{ Most of this code is based on similar functions from Lazarus LCLProc. } unit DCUnicodeUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils; {en Retrieves length in bytes of the next UTF-8 character. @param(P Pointer to the UTF-8 characters.) @param(aMaxBytes States how many bytes from P can be read.) @param(InvalidCharLen If an invalid UTF-8 character was found then InvalidCharLen has the number of bytes this character spans. If the character was valid InvalidCharLen is zero.) } function SafeUTF8NextCharLen(P: PByte; aMaxBytes: IntPtr; out InvalidCharLen: Integer): Integer; {en Retrieves length in bytes of the previous UTF-8 character. It does not read from P, but rather from memory locations before P. @param(P Pointer to the UTF-8 characters.) @param(aMaxBytes States how many bytes from P *backwards* can be read. So, to safely read 3 bytes backwards ([p-1], [p-2], [p-3]) this parameter should be at least 3.) @param(InvalidCharLen If an invalid UTF-8 character was found then InvalidCharLen has the number of bytes this character spans. If the character was valid InvalidCharLen is zero.) } function SafeUTF8PrevCharLen(P: PByte; aMaxBytes: IntPtr; out InvalidCharLen: Integer): Integer; function SafeUTF8NextCharStart(UTF8Str: PByte; Len: PtrInt): PByte; function SafeUTF8PrevCharEnd(UTF8Str: PByte; Len: PtrInt): PByte; {en Returns UTF-16 character length, which is either 1 or 2. @param(utf16char Any UTF-16 char or one of the surrogate pairs.) } function UTF16CharLen(utf16char: Word): Integer; {en Converts an UTF-16 surrogate pair into a unicode character. } function utf16PairToUnicode(u1, u2: Word): Cardinal; function Utf16LEToUtf8(const s: string): string; // UTF16-LE 2 or 4 byte little endian function Utf16BEToUtf8(const s: string): string; // UTF16-BE 2 or 4 byte big endian function Utf32LEToUtf8(const s: string): string; // UTF32-LE 4 byte little endian function Utf32BEToUtf8(const s: string): string; // UTF32-BE 4 byte big endian function Utf8ToUtf16LE(const s: string): string; // UTF16-LE 2 or 4 byte little endian function Utf8ToUtf16BE(const s: string): string; // UTF16-BE 2 or 4 byte big endian function UTF8ToUCS4(const UTF8Text: String): UCS4String; {en Replaces invalid UTF-8 characters with '?'. } function Utf8ReplaceBroken(const s: String): String; {en Replaces invalid UTF-8 characters with 0x1A (SUBSTITUTE). } procedure Utf8FixBroken(var S: String); procedure Utf16SwapEndian(var S: UnicodeString); implementation uses LazUTF8; const maxUTF8Len = 7; // really is 4, but this includes any invalid characters up to length 7 function SafeUTF8NextCharLen(P: PByte; aMaxBytes: IntPtr; out InvalidCharLen: Integer): Integer; var BytesLen: Integer; i: Integer; begin if (p=nil) or (aMaxBytes = 0) then begin InvalidCharLen := 0; Result := 0; end else if p^<%10000000 then begin // regular single byte character InvalidCharLen := 0; Result := 1; end else if p^<%11000000 then begin // invalid single byte character InvalidCharLen := 1; Result := 1; end else begin // Read length of UTF-8 character in bytes. if ((p^ and %11100000) = %11000000) then BytesLen := 2 else if ((p^ and %11110000) = %11100000) then BytesLen := 3 else if ((p^ and %11111000) = %11110000) then BytesLen := 4 else if ((p^ and %11111100) = %11111000) then BytesLen := 5 else if ((p^ and %11111110) = %11111100) then BytesLen := 6 else if ((p^ and %11111111) = %11111110) then BytesLen := 7 else begin InvalidCharLen := 1; exit(1); end; // Check if the next bytes are from the middle of a character. for i := 1 to BytesLen - 1 do begin if (aMaxBytes < i) or ((p[i] and %11000000) <> %10000000) then begin InvalidCharLen := i; exit(1); end; end; InvalidCharLen := 0; Result := BytesLen; end; end; function SafeUTF8PrevCharLen(P: PByte; aMaxBytes: IntPtr; out InvalidCharLen: Integer): Integer; var BytesLen: Integer; signature: Byte; begin if (p=nil) or (aMaxBytes = 0) then begin InvalidCharLen := 0; Result := 0; end else if p[-1]<%10000000 then begin // regular single byte character InvalidCharLen := 0; Result := 1; end else begin for BytesLen := 1 to maxUTF8Len do begin if (aMaxBytes < BytesLen) then begin InvalidCharLen := aMaxBytes; exit(1); end; // Move past all the bytes in the middle of a character. if (p[-BytesLen] and %11000000) <> %10000000 then break; if BytesLen = maxUTF8Len then begin InvalidCharLen := BytesLen; exit(1); end; end; if p[-BytesLen]<%11000000 then begin // invalid first byte of a character InvalidCharLen := BytesLen; Result := 1; end else begin signature := Byte($FF shl (7 - BytesLen)); if (p[-BytesLen] and signature) = Byte(signature shl 1) then begin // Correct first byte of a character. InvalidCharLen := 0; Result := BytesLen; end else begin // Invalid first byte of a character, or p is in the middle of a character. InvalidCharLen := BytesLen; Result := 1; end; end; end; end; function SafeUTF8NextCharStart(UTF8Str: PByte; Len: PtrInt): PByte; var CharLen: LongInt; InvalidCharLen: Integer; begin Result:=UTF8Str; if Result<>nil then begin while (Len>0) do begin CharLen := SafeUTF8NextCharLen(Result, Len, InvalidCharLen); if InvalidCharLen > 0 then begin dec(Len,InvalidCharLen); inc(Result,InvalidCharLen); end else if CharLen = 0 then exit(nil) else exit(Result); end; Result:=nil; end; end; function SafeUTF8PrevCharEnd(UTF8Str: PByte; Len: PtrInt): PByte; var CharLen: LongInt; InvalidCharLen: Integer; begin Result:=UTF8Str; if Result<>nil then begin while (Len>0) do begin CharLen := SafeUTF8PrevCharLen(Result, Len, InvalidCharLen); if InvalidCharLen > 0 then begin dec(Len,InvalidCharLen); dec(Result,InvalidCharLen); end else if CharLen = 0 then exit(nil) else exit(Result); // Result is the character beginning end; Result:=nil; end; end; function UTF16CharLen(utf16char: Word): Integer; inline; begin if (utf16char < $D800) or (utf16char > $DFFF) then Result := 1 else Result := 2; end; function utf16PairToUnicode(u1, u2: Word): Cardinal; begin if (u1 >= $D800) and (u1 <= $DBFF) then begin if (u2 >= $DC00) and (u2 <= $DFFF) then Result := (Cardinal(u1 - $D800) shl 10) + Cardinal(u2 - $DC00) + $10000 else Result := 0; end else Result := u1; end; function Utf16LEToUtf8(const s: string): string; var len: Integer; Src, Limit: PWord; Dest: PAnsiChar; u: Cardinal; begin if Length(s) < 2 then begin Result:=''; exit; end; Src:=PWord(Pointer(s)); Limit := PWord(Pointer(Src) + Length(s)); SetLength(Result, length(s) * 2); Dest:=PAnsiChar(Result); while Src + 1 <= Limit do begin len := UTF16CharLen(Src^); if len = 1 then u := LEtoN(Src^) else begin if Src + 2 <= Limit then u := utf16PairToUnicode(LEtoN(Src[0]), LEtoN(Src[1])) else break; end; inc(Src, len); if u<128 then begin Dest^:=chr(u); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(u,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); Assert(len <= length(Result)); SetLength(Result,len); end; function Utf16BEToUtf8(const s: string): string; var len: Integer; Src, Limit: PWord; Dest: PAnsiChar; u: Cardinal; begin if Length(s) < 2 then begin Result:=''; exit; end; Src:=PWord(Pointer(s)); Limit := PWord(Pointer(Src) + Length(s)); SetLength(Result, length(s) * 2); Dest:=PAnsiChar(Result); while Src + 1 <= Limit do begin len := UTF16CharLen(swap(Src^)); if len = 1 then u := BEtoN(Src^) else begin if Src + 2 <= Limit then u := utf16PairToUnicode(BEtoN(Src[0]), BEtoN(Src[1])) else break; end; inc(Src, len); if u<128 then begin Dest^:=chr(u); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(u,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); Assert(len <= length(Result)); SetLength(Result,len); end; function Utf32LEToUtf8(const s: string): string; var len: Integer; Src: PLongWord; Dest: PAnsiChar; i: Integer; c: LongWord; begin if Length(s) < 4 then begin Result:=''; exit; end; len:=length(s) div 4; SetLength(Result,len*4); Src:=PLongWord(Pointer(s)); Dest:=PAnsiChar(Result); for i:=1 to len do begin c:=LEtoN(Src^); inc(Src); if c<128 then begin Dest^:=chr(c); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(c,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); Assert(len <= length(Result)); SetLength(Result,len); end; function Utf32BEToUtf8(const s: string): string; var len: Integer; Src: PLongWord; Dest: PAnsiChar; i: Integer; c: LongWord; begin if Length(s) < 4 then begin Result:=''; exit; end; len:=length(s) div 4; SetLength(Result,len*4); Src:=PLongWord(Pointer(s)); Dest:=PAnsiChar(Result); for i:=1 to len do begin c:=BEtoN(Src^); inc(Src); if c<128 then begin Dest^:=chr(c); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(c,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); Assert(len <= length(Result)); SetLength(Result,len); end; function Utf8ToUtf16LE(const s: string): string; var L: SizeUInt; {$IF DEFINED(ENDIAN_BIG)} P: PWord; I: SizeInt; {$ENDIF} begin if Length(S) = 0 then begin Result := ''; Exit; end; // Wide chars of UTF-16 <= bytes of UTF-8 string SetLength(Result, Length(S) * SizeOf(WideChar)); if ConvertUTF8ToUTF16(PWideChar(PAnsiChar(Result)), Length(Result) + SizeOf(WideChar), PAnsiChar(S), Length(S), [toInvalidCharToSymbol], L) <> trNoError then Result := '' else begin SetLength(Result, (L - 1) * SizeOf(WideChar)); // Swap endian if needed {$IF DEFINED(ENDIAN_BIG)} P := PWord(PAnsiChar(Result)); for I := 0 to SizeInt(L) - 1 do begin P[I] := SwapEndian(P[I]); end; {$ENDIF} end; end; function Utf8ToUtf16BE(const s: string): string; var L: SizeUInt; {$IF DEFINED(ENDIAN_LITTLE)} P: PWord; I: SizeInt; {$ENDIF} begin if Length(S) = 0 then begin Result := ''; Exit; end; // Wide chars of UTF-16 <= bytes of UTF-8 string SetLength(Result, Length(S) * SizeOf(WideChar)); if ConvertUTF8ToUTF16(PWideChar(PAnsiChar(Result)), Length(Result) + SizeOf(WideChar), PAnsiChar(S), Length(S), [toInvalidCharToSymbol], L) <> trNoError then Result := '' else begin SetLength(Result, (L - 1) * SizeOf(WideChar)); // Swap endian if needed {$IF DEFINED(ENDIAN_LITTLE)} P := PWord(PAnsiChar(Result)); for I := 0 to SizeInt(L) - 1 do begin P[I] := SwapEndian(P[I]); end; {$ENDIF} end; end; function UTF8ToUCS4(const UTF8Text: String): UCS4String; var Len: PtrInt; Index: Integer; CharLen: Integer; SrcPos: PAnsiChar; begin Len:= Length(UTF8Text); SetLength(Result, Len); if Len = 0 then Exit; Index:= 0; SrcPos:= PAnsiChar(UTF8Text); while Len > 0 do begin Result[Index]:= UTF8CodepointToUnicode(SrcPos, CharLen); Inc(SrcPos, CharLen); Dec(Len, CharLen); Inc(Index); end; SetLength(Result, Index); end; function Utf8ReplaceBroken(const s: String): String; var Src, Dst, LastGoodPos: PByte; BytesLeft: Integer; InvalidCharLen: Integer; CharLen: Integer; begin if Length(s) = 0 then Exit(s); BytesLeft := Length(s); SetLength(Result, BytesLeft); // at most the same length Src := PByte(s); Dst := PByte(Result); LastGoodPos := Src; while BytesLeft > 0 do begin CharLen := SafeUTF8NextCharLen(Src, BytesLeft, InvalidCharLen); if InvalidCharLen > 0 then begin if LastGoodPos < Src then begin System.Move(LastGoodPos^, Dst^, Src - LastGoodPos); Inc(Dst, Src - LastGoodPos); end; Inc(Src, InvalidCharLen); Dec(BytesLeft, InvalidCharLen); LastGoodPos := Src; Dst^ := ord('?'); Inc(Dst); end else begin Inc(Src, CharLen); Dec(BytesLeft, CharLen); end; end; if LastGoodPos = PByte(s) then Result := s // All characters are good. else begin if LastGoodPos < Src then begin System.Move(LastGoodPos^, Dst^, Src - LastGoodPos); Inc(Dst, Src - LastGoodPos); end; SetLength(Result, Dst - PByte(Result)); end; end; procedure Utf8FixBroken(var S: String); var P: PAnsiChar; C, L: Integer; begin L:= Length(S); P:= Pointer(S); while (L > 0) do begin if Ord(P^) < %10000000 then begin // Regular single byte character C:= 1; end else if Ord(P^) < %11000000 then begin // Invalid character C:= 1; P^:= #26; end else if ((Ord(P^) and %11100000) = %11000000) then begin // Should be 2 byte character if (L > 1) and ((Ord(P[1]) and %11000000) = %10000000) then C:= 2 else begin // Invalid character C:= 1; P^:= #26; end; end else if ((Ord(P^) and %11110000) = %11100000) then begin // Should be 3 byte character if (L > 2) and ((Ord(P[1]) and %11000000) = %10000000) and ((Ord(P[2]) and %11000000) = %10000000) then C:= 3 else begin // Invalid character C:= 1; P^:= #26; end end else if ((Ord(P^) and %11111000) = %11110000) then begin // Should be 4 byte character if (L > 3) and ((Ord(P[1]) and %11000000) = %10000000) and ((Ord(P[2]) and %11000000) = %10000000) and ((Ord(P[3]) and %11000000) = %10000000) then C:= 4 else begin // Invalid character C:= 1; P^:= #26; end end else begin // Invalid character C:= 1; P^:= #26; end; Dec(L, C); Inc(P, C); end; end; procedure Utf16SwapEndian(var S: UnicodeString); var P: PWord; I, L: Integer; begin L:= Length(S); P:= PWord(PWideChar(S)); for I:= 0 to L - 1 do begin P[I]:= SwapEndian(P[I]); end; end; end. doublecmd-1.1.30/components/doublecmd/dcstrutils.pas0000644000175000001440000012251315104114162021621 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Useful functions dealing with strings. Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit DCStrUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, LazUtf8; const NoQuotesSpecialChars = [' ', '"', '''', '(', ')', ':', '&', '!', '$', '*', '?', '=', '`', '\', '|', ';', #10]; DoubleQuotesSpecialChars = ['$', '\', '`', '"', #10]; type TPathType = (ptNone, ptRelative, ptAbsolute); {en Checks if StringToCheck contains any of the single characters in PossibleCharacters. Only ASCII can be searched. } function ContainsOneOf(StringToCheck: String; PossibleCharacters: String): Boolean; {en Convert known directory separators to the current directory separator. } function NormalizePathDelimiters(const Path: String): String; {en Convert known directory separators to user defined directory separator. } function ReplaceDirectorySeparator(const Path: String; const Separator : Char): String; {en Get last directory name in path @returns(Last directory name in path) } function GetLastDir(Path : String) : String; {en Retrieves the root directory for a path. @param(sPath Absolute path to a directory or a file.) @returns(Root directory or an empty string if the path is not absolute.) } function GetRootDir(sPath : String) : String; {en Retrieves parent directory for a path (removes the last subdirectory in the path). @param(sPath Absolute or relative path to a directory or a file.) @returns(Parent directory or an empty string if the path does not have a parent directory.) } function GetParentDir(sPath : String) : String; {en Gets the deepest (longest) path that exist. } function GetDeepestExistingPath(const sPath : String) : String; function GetSplitFileName(var sFileName, sPath : String) : String; function MakeFileName(const sPath, sFileNameDef : String) : String; {en Split path into list of directories @param(DirName Path) @param(Dirs List of directories names) @returns(The function returns the number of directories found, or -1 if none were found.) } function GetDirs (DirName : String; var Dirs : TStringList) : Longint; {en Get absolute file name from relative file name @param(sPath Current path) @param(sRelativeFileName Relative file name) @returns(Absolute file name) } function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; {en Checks if a path to a directory or file is absolute or relative. @returns(ptNone if a path is just a directory or file name (MyDir) ptRelative if a path is relative (MyDir/MySubDir) ptAbsolute if a path is absolute) (/root/MyDir) } function GetPathType(const sPath : String): TPathType; function ExtractFileDirEx(const FileName: String): String; function ExtractFilePathEx(const FileName: String): String; function ExtractFileNameEx(const FileName: String): String; {en Get file name without path and extension @param(FileName File name) @returns(File name without path and extension) } function ExtractOnlyFileName(const FileName: string): string; {en Get file extension without the '.' at the front. } function ExtractOnlyFileExt(const FileName: string): string; {en Remove file extension with the '.' from file name. } function RemoveFileExt(const FileName: String): String; function ReplaceInvalidChars(const FileName: String): String; function RemoveInvalidCharsFromFileName(const FileName: String): String; function ContainsWildcards(const Path: String): Boolean; {en Expands an absolute file path by removing all relative references. Processes '/../' and '/./'. Example: /home/user/files/../somedirectory/./file.txt = /home/user/somedirectory/file.txt @param(Path path to expand.) } function ExpandAbsolutePath(const Path: String): String; function HasPathInvalidCharacters(Path: String): Boolean; {en Checks if a file or directory belongs in the specified path. Only strings are compared, no file-system checks are done. @param(sBasePath Absolute path where the path to check should be in.) @param(sPathToCheck Absolute path to file or directory to check.) @param(AllowSubDirs If @true, allows the sPathToCheck to point to a file or directory in some subdirectory of sBasePath. If @false, only allows the sPathToCheck to point directly to a file or directory in sBasePath.) @param(AllowSame If @true, returns @true if sBasePath = sPathToCheck. If @false, returns @false if sBasePath = sPathToCheck.) @return(@true if sPathToCheck points to a directory or file in sBasePath. @false otherwise.) Examples: IsInPath('/home', '/home/somedir/somefile', True, False) = True IsInPath('/home', '/home/somedir/somefile', False, False) = False IsInPath('/home', '/home/somedir/', False, False) = True IsInPath('/home', '/home', False, False) = False IsInPath('/home', '/home', False, True) = True } function IsInPath(sBasePath : String; sPathToCheck : String; AllowSubDirs : Boolean; AllowSame : Boolean) : Boolean; {en Changes a path to be relative to some parent directory. @param(sPrefix Absolute path that is a parent of sPath.) @param(sPath Path to change. Must be a subpath of sPrefix, otherwise no change is made.) Examples: ExtractDirLevel('/home', '/home/somedir/somefile') = '/somedir/somefile' } function ExtractDirLevel(const sPrefix, sPath: String): String; {en Adds a path delimiter at the beginning of the string, if it not exists. } function IncludeFrontPathDelimiter(s: String): String; {en Removes a path delimiter at the beginning of the string, if it exists. } function ExcludeFrontPathDelimiter(s: String): String; {en Removes a path delimiter at the ending of the string, if it exists. Doesn't remove path delimiter if it is the only character in the path (root dir), so it is safer to use than ExcludeTrailingPathDelimiter, especially on Unix. } function ExcludeBackPathDelimiter(const Path: String): String; {en Return position of character in string begun from start position @param(C character) @param(S String) @param(StartPos Start position) @returns(Position of character in string) } function CharPos(C: Char; const S: string; StartPos: Integer = 1): Integer; {en Return position of any of tag-characters in string T in string S begun from start position @param(T set of characters) @param(S String) @param(StartPos Start position) @param(SearchBackward set @True if need search backwards) @returns(Position of character in string) } function TagPos(T: string; const S: string; StartPos: Integer;SearchBackward: boolean=False): Integer; {en Split file name on name and extension @param(sFileName File name) @param(n Name) @param(e Extension) } procedure DivFileName(const sFileName:String; out n,e:String); {en Split ';' separated path list to array @param(Path Path list to split) @returns(Path array) } function SplitPath(const Path: String): TDynamicStringArray; {en Split file mask on name mask and extension mask @param(DestMask File mask) @param(DestNameMask Name mask) @param(DestExtMask Extension mask) } procedure SplitFileMask(const DestMask: String; out DestNameMask: String; out DestExtMask: String); {en Apply name and extension mask to the file name @param(aFileName File name) @param(NameMask Name mask) @param(ExtMask Extension mask) } function ApplyRenameMask(aFileName: String; NameMask: String; ExtMask: String): String; {en Get count of character in string @param(Char Character) @param(S String) @returns(Count of character) } function NumCountChars(const Char: Char; const S: String): Integer; {en Trim the leading and ending spaces } function TrimPath(const Path: String): String; {en Remove last line ending in text @param(sText Text) @param(TextLineBreakStyle Text line break style) } function TrimRightLineEnding(const sText: String; TextLineBreakStyle: TTextLineBreakStyle): String; function mbCompareText(const s1, s2: String): PtrInt; function StrNewW(const mbString: String): PWideChar; procedure StrDisposeW(var pStr : PWideChar); function StrLCopyW(Dest, Source: PWideChar; MaxLen: SizeInt): PWideChar; function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar; function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar; function RPos(const Substr : UnicodeString; const Source : UnicodeString) : Integer; overload; {en Checks if a string begins with another string. @returns(@true if StringToCheck begins with StringToMatch. StringToCheck may be longer than StringToMatch.) } function StrBegins(const StringToCheck, StringToMatch: String): Boolean; {en Checks if a string ends with another string. @returns(@true if StringToCheck ends with StringToMatch. StringToCheck may be longer than StringToMatch.) } function StrEnds(const StringToCheck, StringToMatch: String): Boolean; {en Adds a string to another string. If the source string is not empty adds a separator before adding the string. } procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: Char = ' '); procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: String); procedure ParseLineToList(sLine: String; ssItems: TStrings); function ParseLineToFileFilter(sFilterPair: array of string): string; {en Convert a number specified as an octal number to it's decimal value. @param(Value Octal number as string) @returns(Decimal number) } function OctToDec(Value: String): LongInt; {en Convert a number specified as an decimal number to it's octal value. @param(Value Decimal number) @returns(Octal number as string) } function DecToOct(Value: LongInt): String; procedure AddString(var anArray: TDynamicStringArray; const sToAdd: String); {en Splits a string into different parts delimited by the specified delimiter character. } function SplitString(const S: String; Delimiter: AnsiChar): TDynamicStringArray; {en Checks if the second array is the beginning of first. If BothWays is @true then also checks the other way around, if the first array is the beginning of second. For Array1=[1,2] Array2=[1,2] returns @true. For Array1=[1,2,...] Array2=[1,2] returns @true. For Array1=[1,3,...] Array2=[1,2] returns @false. If BothWays = True then also For Array1=[1] Array2=[1,2] returns @true. For Array1=[1] Array2=[2] returns @false. } function ArrBegins(const Array1, Array2: array of String; BothWays: Boolean): Boolean; function ArrayToString(const anArray: TDynamicStringArray; const Separator: Char = ' '): String; {en Compares length and contents of the arrays. If lengths differ or individual elements differ returns @false, otherwise @true. } function Compare(const Array1, Array2: array of String): Boolean; {en Copies open array to dynamic array. } function CopyArray(const anArray: array of String): TDynamicStringArray; function ContainsOneOf(const ArrayToSearch, StringsToSearch: array of String): Boolean; function Contains(const ArrayToSearch: array of String; const StringToSearch: String): Boolean; procedure DeleteString(var anArray: TDynamicStringArray; const Index: Integer); procedure DeleteString(var anArray: TDynamicStringArray; const sToDelete: String); function GetArrayFromStrings(Strings: TStrings): TDynamicStringArray; procedure SetStringsFromArray(Strings: TStrings; const anArray: TDynamicStringArray); {en Replaces old value of Key or adds a new Key=NewValue string to the array. } procedure SetValue(var anArray: TDynamicStringArray; Key, NewValue: String); procedure SetValue(var anArray: TDynamicStringArray; Key: String; NewValue: Boolean); function ShortcutsToText(const Shortcuts: TDynamicStringArray): String; function GetDateTimeInStrEZSortable(DateTime:TDateTime):string; function WrapTextSimple(const S: String; MaxCol: Integer = 100): String; {en Escapes characters to be inserted between single quotes (') and passed to shell command line. The resulting string is not enclosed with '', only escaped. For example needs to be escaped with this function: sh -c '' "" } function EscapeSingleQuotes(const Str: String): String; {en Escapes characters to be inserted between double quotes (") and passed to shell command line. The resulting string is not enclosed with "", only escaped. For example needs to be escaped with this function: sh -c '' "" } function EscapeDoubleQuotes(const Str: String): String; {en Escapes characters to be passed to shell command line when no quoting is used. For example needs to be escaped with this function: sh -c '' "" } function EscapeNoQuotes(const Str: String): String; {en Reads a line of text from a string @param(Value Input text string) @param(S Output text line) @param(N Current position in the input text string) @returns(@true if line-ending found, @false otherwise) } function GetNextLine(const Value: String; var S: String; var N: Integer): Boolean; implementation uses DCOSUtils, DCConvertEncoding, StrUtils; function ReplaceDirectorySeparator(const Path: String; const Separator : Char): String; const AllowPathDelimiters : set of char = ['\','/']; var I : LongInt; begin Result := Path; if (Separator in AllowPathDelimiters) then begin for I:= 1 to Length(Path) do if Path[I] in AllowPathDelimiters then Result[I]:= Separator end end; function NormalizePathDelimiters(const Path: String): String; {$IFDEF UNIX} begin Result:= Path; end; {$ELSE} const AllowPathDelimiters : set of char = ['\','/']; var I : LongInt; uriPos : Integer; begin Result:= Path; // If path is not URI uriPos := Pos('://', Result); if (uriPos = 0) {$IF DEFINED(MSWINDOWS)} or ( (uriPos = 2) and (Path[1] in ['A'..'z']) ) {$ENDIF} then begin for I:= 1 to Length(Path) do if Path[I] in AllowPathDelimiters then Result[I]:= DirectorySeparator; end; end; {$ENDIF} function GetLastDir(Path : String) : String; begin Result:= ExtractFileName(ExcludeTrailingPathDelimiter(Path)); if Result = '' then Result:= ExtractFileDrive(Path); if Result = '' then Result:= PathDelim; end; function GetRootDir(sPath : String) : String; begin {$IF DEFINED(MSWINDOWS)} Result := ExtractFileDrive(sPath); if Result <> '' then Result := Result + PathDelim; {$ELSEIF DEFINED(UNIX)} Result := PathDelim; // Hardcoded {$ELSE} Result := ''; {$ENDIF} end; function GetParentDir(sPath : String) : String; var i : Integer; begin Result := ''; sPath := ExcludeTrailingPathDelimiter(sPath); // Start from one character before last. for i := length(sPath) - 1 downto 1 do if sPath[i] = DirectorySeparator then begin Result := Copy(sPath, 1, i); Break; end; end; function GetDeepestExistingPath(const sPath : String) : String; begin Result := sPath; while Result <> EmptyStr do begin if not mbDirectoryExists(Result) then Result := GetParentDir(Result) else Break; end; end; function GetSplitFileName(var sFileName, sPath : String) : String; begin if Pos(PathDelim, sFileName) <> 0 then begin Result := sFileName; sPath := ExtractFilePath(sFileName); sFileName := ExtractFileName(sFileName); end else Result := sPath + sFileName; end; function MakeFileName(const sPath, sFileNameDef : String) : String; begin Result:= ExtractFileName(ExcludeTrailingBackslash(sPath)); if Result = EmptyStr then Result:= sFileNameDef; end; function GetDirs (DirName : String; var Dirs : TStringList) : Longint; var I : Longint; len : Integer; sDir : String; begin I:= 1; Result:= -1; len := Length(DirName); while I <= len do begin if DirName[I]=PathDelim then begin Inc(Result); sDir := Copy(DirName, 1, len - (len - I + 1)); if dirs.IndexOf(sDir) < 0 then dirs.Add(sDir); end; Inc(I); end; if Result > -1 then inc(Result); end; function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; begin case GetPathType(sRelativeFileName) of ptNone: Result := sPath + sRelativeFileName; ptRelative: Result := ExpandAbsolutePath(sPath + sRelativeFileName); ptAbsolute: Result := sRelativeFileName; end; end; function GetPathType(const sPath : String): TPathType; begin if sPath <> EmptyStr then begin {$IFDEF MSWINDOWS} { Absolute path in Windows } if { X:\... [Disk] ":" is reserved otherwise } ( Pos( DriveDelim, sPath ) > 0 ) or { \\... [UNC] \... [Root of current drive] } ( sPath[1] = PathDelim ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (sPath[1] = PathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative else if (sPath = '..') then Result := ptRelative else Result := ptNone; end else Result := ptNone; end; function ExtractFileDirEx(const FileName: String): String; var i : longint; begin I := Length(FileName); while (I > 0) and not CharInSet(FileName[I],AllowDirectorySeparators) do Dec(I); if (I > 1) and CharInSet(FileName[I],AllowDirectorySeparators) and not CharInSet(FileName[I - 1],AllowDirectorySeparators) then Dec(I); Result := Copy(FileName, 1, I); end; function ExtractFilePathEx(const FileName: String): String; var i : longint; begin i := Length(FileName); while (i > 0) and not CharInSet(FileName[i],AllowDirectorySeparators) do Dec(i); If I>0 then Result := Copy(FileName, 1, i) else Result:=''; end; function ExtractFileNameEx(const FileName: String): String; var i : longint; begin I := Length(FileName); while (I > 0) and not CharInSet(FileName[I],AllowDirectorySeparators) do Dec(I); Result := Copy(FileName, I + 1, MaxInt); end; function ExtractOnlyFileName(const FileName: string): string; var SOF : Boolean; I, Index : LongInt; EndSep : Set of Char; begin Index := MaxInt; // Find a dot index I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then begin SOF:= (I = 1) or (FileName[I - 1] in AllowDirectorySeparators); if (not SOF) or FirstDotAtFileNameStartIsExtension then Index := I end; // Find file name index EndSep := EndSep - [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); Result := Copy(FileName, I + 1, Index - I - 1); end; function ExtractOnlyFileExt(const FileName: string): string; var I : LongInt; SOF : Boolean; EndSep : Set of Char; begin Result := EmptyStr; I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then begin SOF:= (I = 1) or (FileName[I - 1] in AllowDirectorySeparators); if (not SOF) or FirstDotAtFileNameStartIsExtension then Result := Copy(FileName, I + 1, MaxInt) end; end; function RemoveFileExt(const FileName: String): String; var I : LongInt; SOF : Boolean; EndSep : Set of Char; begin Result := FileName; I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then begin SOF:= (I = 1) or (FileName[I - 1] in AllowDirectorySeparators); if (not SOF) or FirstDotAtFileNameStartIsExtension then Result := Copy(FileName, 1, I - 1) end; end; function ContainsWildcards(const Path: String): Boolean; begin Result := ContainsOneOf(Path, '*?'); end; function ReplaceInvalidChars(const FileName: String): String; const {$IFDEF MSWINDOWS} ForbiddenChars : set of char = [#00..#31, '<','>',':','"','/','|','?','*']; {$ELSE} ForbiddenChars : set of char = [#0]; {$ENDIF} var I : LongInt; begin Result:= EmptyStr; for I:= 1 to Length(FileName) do begin if not (FileName[I] in ForbiddenChars) then Result:= Result + FileName[I] else Result+= '%' + HexStr(Ord(FileName[I]), 2); end; end; { RemoveInvalidCharsFromFileName } function RemoveInvalidCharsFromFileName(const FileName: String): String; const {$IFDEF MSWINDOWS} ForbiddenChars : set of char = [#00..#31, '<','>',':','"','/','\','|','?','*']; {$ELSE} ForbiddenChars : set of char = ['/']; {$ENDIF} var I : LongInt; begin Result:= ''; for I:= 1 to Length(FileName) do if not (FileName[I] in ForbiddenChars) then Result:=Result+FileName[I]; end; function ExpandAbsolutePath(const Path: String): String; const PATH_DELIM_POS = {$IFDEF MSWINDOWS}3{$ELSE}1{$ENDIF}; var I, J: Integer; begin Result := Path; // Remove all references to '\.\' I := Pos(DirectorySeparator + '.' + DirectorySeparator, Result); while I <> 0 do begin Delete(Result, I, 2); I := Pos(DirectorySeparator + '.' + DirectorySeparator, Result, I); end; // Remove all references to '\..\' I := Pos(DirectorySeparator + '..' + DirectorySeparator, Result); while I <> 0 do begin J := Pred(I); while (J > 0) and (Result[J] <> DirectorySeparator) do Dec (J); Delete(Result, J + 1, I - J + 3); I := Pos(DirectorySeparator + '..' + DirectorySeparator, Result); end; // Remove a reference to '\..' at the end of line if StrEnds(Result, DirectorySeparator + '..') then begin J := Length(Result) - 3; while (J > 0) and (Result[J] <> DirectorySeparator) do Dec(J); if (J = 0) then Result := EmptyStr else if (J > PATH_DELIM_POS) then Delete(Result, J, MaxInt) else Delete(Result, J + 1, MaxInt); end; // Remove a reference to '\.' at the end of line if Length(Result) = 1 then begin if Result[1] = '.' then Result := EmptyStr; end else if StrEnds(Result, DirectorySeparator + '.') then begin if Length(Result) = (PATH_DELIM_POS + 1) then Delete(Result, Length(Result), 1) else Delete(Result, Length(Result) - 1, 2); end; end; function HasPathInvalidCharacters(Path: String): Boolean; begin Result := ContainsOneOf(Path, '*?'); end; function IsInPath(sBasePath : String; sPathToCheck : String; AllowSubDirs : Boolean; AllowSame : Boolean) : Boolean; var BasePathLength, PathToCheckLength: Integer; DelimiterPos: Integer; begin if sBasePath = '' then Exit(False); sBasePath := IncludeTrailingPathDelimiter(sBasePath); BasePathLength := Length(sBasePath); PathToCheckLength := Length(sPathToCheck); if PathToCheckLength > BasePathLength then begin if mbCompareFileNames(Copy(sPathToCheck, 1, BasePathLength), sBasePath) then begin if AllowSubDirs then Result := True else begin // Additionally check if the remaining path is a relative path. // Look for a path delimiter in the middle of the filepath. sPathToCheck := Copy(sPathToCheck, 1 + BasePathLength, PathToCheckLength - BasePathLength); DelimiterPos := Pos(DirectorySeparator, sPathToCheck); // If no delimiter was found or it was found at then end (directories // may end with it), then the 'sPathToCheck' is in 'sBasePath'. Result := (DelimiterPos = 0) or (DelimiterPos = PathToCheckLength - BasePathLength); end; end else Result := False; end else Result := AllowSame and (((PathToCheckLength = BasePathLength) and (mbCompareFileNames(sPathToCheck, sBasePath))) or ((PathToCheckLength = BasePathLength - 1) and (mbCompareFileNames(Copy(sBasePath, 1, PathToCheckLength), sPathToCheck)))); end; function ExtractDirLevel(const sPrefix, sPath: String): String; var PrefixLength: Integer; begin if IsInPath(sPrefix, sPath, True, True) then begin PrefixLength := Length(sPrefix); Result := Copy(sPath, 1 + PrefixLength, Length(sPath) - PrefixLength) end else Result := sPath; end; function IncludeFrontPathDelimiter(s: String): String; begin if (Length(s) > 0) and (s[1] = PathDelim) then Result:= s else Result:= PathDelim + s; end; function ExcludeFrontPathDelimiter(s: String): String; begin if (Length(s) > 0) and (s[1] = PathDelim) then Result := Copy(s, 2, Length(s) - 1) else Result := s; end; function ExcludeBackPathDelimiter(const Path: String): String; var L: Integer; begin L:= Length(Path); if (L > 1) and (Path[L] in AllowDirectorySeparators) and (Path[L - 1] <> DriveSeparator) then Result:= Copy(Path, 1, L - 1) else Result:= Path; end; procedure DivFileName(const sFileName:String; out n,e:String); var i:Integer; begin for i:= length(sFileName) downto 1 do if sFileName[i]='.' then begin // if i>1 then // hidden files?? e:=Copy(sFileName,i,Length(sFileName)-i+1); n:=Copy(sFileName,1,i-1); Exit; end; e:=''; n:=sFileName; end; function SplitPath(const Path: String): TDynamicStringArray; const cDelta = {$IF DEFINED(UNIX)}1{$ELSE}2{$ENDIF}; cDelimiter = {$IF DEFINED(UNIX)}'/'{$ELSE}':'{$ENDIF}; var L, F: Integer; S: Integer = 1; begin L:= Length(Path); SetLength(Result, 0); for F:= 1 to L - cDelta do begin if (Path[F] = ';') and (Path[F + cDelta] = cDelimiter) then begin AddString(Result, Copy(Path, S, F - S)); S:= F + 1; end; end; if S <= L then begin AddString(Result, Copy(Path, S, L - S + 1)); end; end; procedure SplitFileMask(const DestMask: String; out DestNameMask: String; out DestExtMask: String); var iPos: LongInt; begin // Special case for mask that contains '*.*' ('*.*.old' for example) iPos:= Pos('*.*', DestMask); if (iPos = 0) then DivFileName(DestMask, DestNameMask, DestExtMask) else begin DestNameMask := Copy(DestMask, 1, iPos); DestExtMask := Copy(DestMask, iPos + 1, MaxInt); end; // Treat empty mask as '*.*'. if (DestNameMask = '') and (DestExtMask = '') then begin DestNameMask := '*'; DestExtMask := '.*'; end; end; function ApplyRenameMask(aFileName: String; NameMask: String; ExtMask: String): String; function ApplyMask(const TargetString, Mask: String): String; var I: Integer; ALen: Integer; begin Result:= EmptyStr; ALen:= UTF8Length(TargetString); for I:= 1 to Length(Mask) do begin if Mask[I] = '?' then begin if I <= ALen then Result:= Result + UTF8Copy(TargetString, I, 1) else Exit(TargetString); end else if Mask[I] = '*' then Result:= Result + UTF8Copy(TargetString, I, MaxInt) else Result:= Result + Mask[I]; end; end; var sDstExt: String; sDstName: String; begin if ((NameMask = '*') and (ExtMask = '.*')) then Result := aFileName else begin DivFileName(aFileName, sDstName, sDstExt); sDstName := ApplyMask(sDstName, NameMask); sDstExt := ApplyMask(sDstExt, ExtMask); Result := sDstName; if sDstExt <> '.' then Result := Result + sDstExt; end; end; function CharPos(C: Char; const S: string; StartPos: Integer = 1): Integer; var sNewStr : String; begin if StartPos <> 1 then begin sNewStr := Copy(S, StartPos, Length(S) - StartPos + 1); Result := Pos(C, sNewStr); if Result <> 0 then Result := Result + StartPos - 1; end else Result := Pos(C, S); end; function TagPos(T: string; const S: string; StartPos: Integer; SearchBackward: boolean): Integer; var ch: AnsiChar; i, cnt: Integer; begin Result:= 0; i:= StartPos; if i = 0 then i:= 1; cnt:= UTF8Length(S); if SearchBackward then begin while (i > 0) do begin ch:= S[UTF8CharToByteIndex(PAnsiChar(S), Length(S), i)]; if Pos(ch, T) = 0 then Dec(i) else Break; end; end else while (i <= cnt) do begin ch:= S[UTF8CharToByteIndex(PAnsiChar(S), Length(S), i)]; if Pos(ch, T) = 0 then Inc(i) else Break; end; Result:= i; end; function NumCountChars(const Char: char; const S: String): Integer; var I : Integer; begin Result := 0; if Length(S) > 0 then for I := 1 to Length(S) do if S[I] = Char then Inc(Result); end; function TrimPath(const Path: String): String; const WhiteSpace = [#0..' '{$IFDEF MSWINDOWS},'.'{$ENDIF}]; var Index: Integer; S: TStringArray; begin S:= TrimRightSet(Path, WhiteSpace).Split([PathDelim]); if Length(S) = 0 then Result:= EmptyStr else begin Result:= TrimRightSet(S[0], WhiteSpace); for Index := Low(S) + 1 to High(S) do begin Result+= PathDelim + TrimRightSet(S[Index], WhiteSpace); end; end; end; function TrimRightLineEnding(const sText: String; TextLineBreakStyle: TTextLineBreakStyle): String; const TextLineBreakArray: array[TTextLineBreakStyle] of Integer = (1, 2, 1); var I, L: Integer; begin L:= Length(sText); I:= TextLineBreakArray[TextLineBreakStyle]; Result:= Copy(sText, 1, L - I); // Copy without last line ending end; function mbCompareText(const s1, s2: String): PtrInt; inline; begin // From 0.9.31 LazUtils can be used but this package does not exist in 0.9.30. // Result := LazUTF8.UTF8CompareText(s1, s2); Result := WideCompareText(CeUtf8ToUtf16(s1), CeUtf8ToUtf16(s2)); end; function StrNewW(const mbString: String): PWideChar; var wsString: WideString; iLength: PtrInt; begin Result:= nil; wsString:= CeUtf8ToUtf16(mbString); iLength:= (Length(wsString) * SizeOf(WideChar)) + 1; Result:= GetMem(iLength); if Result <> nil then Move(PWideChar(wsString)^, Result^, iLength); end; procedure StrDisposeW(var pStr : PWideChar); begin FreeMem(pStr); pStr := nil; end; function StrLCopyW(Dest, Source: PWideChar; MaxLen: SizeInt): PWideChar; var I: SizeInt; begin Result := Dest; for I:= 0 to MaxLen - 1 do begin if Source^ = #0 then Break; Dest^ := Source^; Inc(Source); Inc(Dest); end; Dest^ := #0; end; function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar; begin Result := StrLCopyW(Dest, PWideChar(Source), Length(Source)); end; function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar; begin Result := StrLCopyW(Dest, PWideChar(Source), MaxLen); end; function RPos(const Substr: UnicodeString; const Source: UnicodeString): Integer; var c : WideChar; pc, pc2 : PWideChar; MaxLen, llen : Integer; begin Result:= 0; llen:= Length(SubStr); maxlen:= Length(Source); if (llen > 0) and (maxlen > 0) and (llen <= maxlen) then begin pc:= @Source[maxlen]; pc2:= @Source[llen - 1]; c:= Substr[llen]; while pc >= pc2 do begin if (c = pc^) and (CompareByte(Substr[1], PByte(pc - llen + 1)^, llen * SizeOf(WideChar)) = 0) then begin Result:= PWideChar(pc - llen + 1) - PWideChar(@source[1]) + 1; Exit; end; Dec(pc); end; end; end; function StrBegins(const StringToCheck, StringToMatch: String): Boolean; begin Result := (Length(StringToMatch) > 0) and (Length(StringToCheck) >= Length(StringToMatch)) and (CompareChar(StringToCheck[1], StringToMatch[1], Length(StringToMatch)) = 0); end; function StrEnds(const StringToCheck, StringToMatch: String): Boolean; begin Result := (Length(StringToMatch) > 0) and (Length(StringToCheck) >= Length(StringToMatch)) and (CompareChar(StringToCheck[1 + Length(StringToCheck) - Length(StringToMatch)], StringToMatch[1], Length(StringToMatch)) = 0); end; procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: Char); begin if (Length(SourceString) > 0) and (Length(StringToAdd) > 0) then SourceString := SourceString + Separator; SourceString := SourceString + StringToAdd; end; procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: String); begin if (Length(SourceString) > 0) and (Length(StringToAdd) > 0) then SourceString := SourceString + Separator; SourceString := SourceString + StringToAdd; end; procedure ParseLineToList(sLine: String; ssItems: TStrings); var xPos: Integer; begin ssItems.Clear; while sLine <> '' do begin xPos:= Pos(';', sLine); if xPos > 0 then begin ssItems.Add(Copy(sLine, 1, xPos - 1)); Delete(sLine, 1, xPos); end else begin ssItems.Add(sLine); Exit; end; end; end; function ParseLineToFileFilter(sFilterPair: array of string): string; var iPairIndex: integer; begin result:=''; for iPairIndex := 0 to pred(length(sFilterPair) div 2) do result := result + sFilterPair[iPairIndex*2] + '|' + sFilterPair[succ(iPairIndex*2)] + '|'; if length(result)>0 then result := LeftStr(result, pred(length(result))); end; function ContainsOneOf(StringToCheck: String; PossibleCharacters: String): Boolean; var i, j: SizeInt; pc : PChar; begin pc := Pointer(StringToCheck); for i := 1 to Length(StringToCheck) do begin for j := 1 to Length(PossibleCharacters) do if pc^ = PossibleCharacters[j] then Exit(True); Inc(pc); end; Result := False; end; function OctToDec(Value: String): LongInt; var I: Integer; begin Result:= 0; for I:= 1 to Length(Value) do Result:= Result * 8 + StrToInt(Copy(Value, I, 1)); end; function DecToOct(Value: LongInt): String; var iMod: Integer; begin Result := ''; while Value >= 8 do begin iMod:= Value mod 8; Value:= Value div 8; Result:= IntToStr(iMod) + Result; end; Result:= IntToStr(Value) + Result; end; procedure AddString(var anArray: TDynamicStringArray; const sToAdd: String); var Len: Integer; begin Len := Length(anArray); SetLength(anArray, Len + 1); anArray[Len] := sToAdd; end; function SplitString(const S: String; Delimiter: AnsiChar): TDynamicStringArray; var Start: Integer = 1; Len, Finish: Integer; begin Len:= Length(S); SetLength(Result, 0); for Finish:= 1 to Len do begin if S[Finish] = Delimiter then begin AddString(Result, Copy(S, Start, Finish - Start)); Start:= Finish + 1; end; end; if Start <= Len then begin AddString(Result, Copy(S, Start, Len - Start + 1)); end; end; function ArrBegins(const Array1, Array2: array of String; BothWays: Boolean): Boolean; var Len1, Len2: Integer; i: Integer; begin Len1 := Length(Array1); Len2 := Length(Array2); if not BothWays and (Len1 < Len2) then Result := False else begin if Len1 > Len2 then Len1 := Len2; for i := 0 to Len1 - 1 do if Array1[i] <> Array2[i] then Exit(False); Result := True; end; end; function ArrayToString(const anArray: TDynamicStringArray; const Separator: Char): String; var i: Integer; begin Result := ''; for i := Low(anArray) to High(anArray) do AddStrWithSep(Result, anArray[i], Separator); end; function Compare(const Array1, Array2: array of String): Boolean; var Len1, Len2: Integer; i: Integer; begin Len1 := Length(Array1); Len2 := Length(Array2); if Len1 <> Len2 then Result := False else begin for i := 0 to Len1 - 1 do if Array1[i] <> Array2[i] then Exit(False); Result := True; end; end; function CopyArray(const anArray: array of String): TDynamicStringArray; var i: Integer; begin SetLength(Result, Length(anArray)); for i := Low(anArray) to High(anArray) do Result[i] := anArray[i]; end; function ContainsOneOf(const ArrayToSearch, StringsToSearch: array of String): Boolean; var i: Integer; begin for i := Low(StringsToSearch) to High(StringsToSearch) do if Contains(ArrayToSearch, StringsToSearch[i]) then Exit(True); Result := False; end; function Contains(const ArrayToSearch: array of String; const StringToSearch: String): Boolean; var i: Integer; begin for i := Low(ArrayToSearch) to High(ArrayToSearch) do if ArrayToSearch[i] = StringToSearch then Exit(True); Result := False; end; procedure DeleteString(var anArray: TDynamicStringArray; const Index: Integer); var Len: Integer; i: Integer; begin Len := Length(anArray); for i := Index + 1 to Len - 1 do anArray[i - 1] := anArray[i]; SetLength(anArray, Len - 1); end; procedure DeleteString(var anArray: TDynamicStringArray; const sToDelete: String); var i: Integer; begin for i := Low(anArray) to High(anArray) do if anArray[i] = sToDelete then begin DeleteString(anArray, i); Exit; end; end; function GetArrayFromStrings(Strings: TStrings): TDynamicStringArray; var LinesCount: Integer; i: Integer; begin LinesCount := Strings.Count; if LinesCount > 0 then begin if Strings[LinesCount-1] = '' then Dec(LinesCount); SetLength(Result, LinesCount); for i := 0 to LinesCount - 1 do Result[i] := Strings[i]; end; end; procedure SetStringsFromArray(Strings: TStrings; const anArray: TDynamicStringArray); var s: String; begin Strings.Clear; for s in anArray do Strings.Add(s); end; procedure SetValue(var anArray: TDynamicStringArray; Key, NewValue: String); var i: Integer; begin Key := Key + '='; for i := Low(anArray) to High(anArray) do if StrBegins(anArray[i], Key) then begin anArray[i] := Key + NewValue; Exit; end; AddString(anArray, Key + NewValue); end; procedure SetValue(var anArray: TDynamicStringArray; Key: String; NewValue: Boolean); begin if NewValue then SetValue(anArray, Key, 'true') else SetValue(anArray, Key, 'false'); end; function ShortcutsToText(const Shortcuts: TDynamicStringArray): String; begin Result := ArrayToString(Shortcuts, ' '); end; { GetDateTimeInStrEZSortable: Return the date and time in string format with YYYY-MM-DD@HH-MM-SS so it can be integrate in a filename. Also, because of the order of the terms, it make it useful when things are sorted BECAUSE it will also sort by date/time at the same time} function GetDateTimeInStrEZSortable(DateTime:TDateTime):string; var MyYear, MyMonth, MyDay, MyHour, MyMin, MySec, MyMilSec: word; begin DecodeDate(DateTime, MyYear, MyMonth, MyDay); DecodeTime(DateTime, MyHour, MyMin, MySec, MyMilSec); result:=Format('%d-%2.2d-%2.2d@%2.2d-%2.2d-%2.2d', [MyYear, MyMonth, MyDay, MyHour, MyMin, MySec]); end; function WrapTextSimple(const S: String; MaxCol: Integer): String; var Len, Index: Integer; begin Index:= 1; Result:= EmptyStr; Len:= UTF8Length(S); while (Len > 0) do begin Result:= Result + UTF8Copy(S, Index, MaxCol) + LineEnding; Inc(Index, MaxCol); Dec(Len, MaxCol); end; SetLength(Result, Length(Result) - Length(LineEnding)); end; function EscapeString(const Str: String; const EscapeChars: TCharSet; const EscapeWith: String): String; var StartPos: Integer = 1; CurPos: Integer = 1; begin Result := ''; while CurPos <= Length(Str) do begin if Str[CurPos] in EscapeChars then begin Result := Result + Copy(Str, StartPos, CurPos - StartPos) + EscapeWith; // The character being quoted will be copied later. StartPos := CurPos; end; Inc(CurPos); end; Result := Result + Copy(Str, StartPos, CurPos - StartPos); end; function EscapeSingleQuotes(const Str: String): String; begin // Single quotes are strong quotes - no special characters are recognized // inside those quotes, so only ' needs to be escaped. Result := EscapeString(Str, [''''], '''\'''); end; function EscapeDoubleQuotes(const Str: String): String; begin // Double quotes are weak quotes and a few special characters are allowed // which need to be escaped. Result := EscapeString(Str, DoubleQuotesSpecialChars, '\'); end; function EscapeNoQuotes(const Str: String): String; begin // When neither single nor double quotes are used several special characters // need to be escaped with backslash (single character quote). Result := EscapeString(Str, NoQuotesSpecialChars, '\'); end; function GetNextLine(const Value: String; var S: String; var N: Integer): Boolean; var PS: PChar; IP, L, P, K: Integer; begin P:= N; S:= ''; Result:= False; L:= Length(Value); if ((L - P) < 0) then Exit; if ((L - P) = 0) and (not (Value[P] in [#10, #13])) then Exit; PS:= PChar(Value) + P - 1; IP:= P; while ((L - P) >= 0) and (not (PS^ in [#10, #13])) do begin P:= P + 1; Inc(PS); end; K:= P; // Point to character after #13 if (P <= L) and (Value[P] = #13) then begin Inc(P); Result:= True; end; // Point to character after #10 if (P <= L) and (Value[P] = #10) then begin Inc(P); Result:= True; end; if Result then begin N:= P; SetLength(S, K - IP); System.Move(Value[IP], Pointer(S)^, K - IP); end; end; end. doublecmd-1.1.30/components/doublecmd/dcstringhashlistutf8.pas0000644000175000001440000002266015104114162023607 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Modified version of StringHashList unit with UTF-8 support Copyright (C) 2019 Alexander Koblov (alexx2000@mail.ru) This file is based on stringhashlist.pas from the LazUtils package See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the copyright. 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. } unit DCStringHashListUtf8; {$mode objfpc}{$H+} interface uses Classes, SysUtils, // LazUtils LazUtilsStrConsts; type PStringHashItem = ^TStringHashItem; TStringHashItem = record HashValue: Cardinal; Key: String; Data: Pointer; end; PStringHashItemList = ^PStringHashItem; { TStringHashListUtf8 } TStringHashListUtf8 = class(TObject) private FList: PStringHashItemList; FCount: Integer; fCaseSensitive: Boolean; function BinarySearch(HashValue: Cardinal): Integer; function CompareString(const Low, Key: String): Boolean; function CompareValue(const Value1, Value2: Cardinal): Integer; procedure FindHashBoundaries(HashValue: Cardinal; StartFrom: Integer; out First, Last: Integer); function GetData(const S: String): Pointer; procedure SetCaseSensitive(const Value: Boolean); procedure Delete(Index: Integer); procedure SetData(const S: String; const AValue: Pointer); protected function HashOf(const Key: string): Cardinal; procedure Insert(Index: Integer; Item: PStringHashItem); public constructor Create(CaseSensitivity: boolean); destructor Destroy; override; function Add(const S: String): Integer; function Add(const S: String; ItemData: Pointer): Integer; procedure Clear; procedure Remove(Index: Integer); function Find(const S: String): Integer; function Find(const S: String; Data: Pointer): Integer; function Remove(const S: String): Integer; function Remove(const S: String; Data: Pointer): Integer; procedure FindBoundaries(StartFrom: Integer; out First, Last: Integer); property CaseSensitive: Boolean read fCaseSensitive write SetCaseSensitive; property Count: Integer read FCount; property Data[const S: String]: Pointer read GetData write SetData; default; property List: PStringHashItemList read FList; end; implementation uses LazUTF8; { TStringHashListUtf8 } function TStringHashListUtf8.Add(const S: String): Integer; begin Result:=Add(S,nil); end; function TStringHashListUtf8.Add(const S: String; ItemData: Pointer): Integer; var Text: String; Item: PStringHashItem; First, Last, I: Integer; Val: Cardinal; Larger: boolean; begin if fCaseSensitive then Text := S else begin Text:= UTF8LowerCase(S); end; New(Item); Val:= HashOf(Text); Item^.HashValue := Val; Item^.Key := S; Item^.Data := ItemData; if FCount > 0 then begin First:=0; Last:= FCount-1; Larger:=False; while First<=Last do begin I:=(First+Last)shr 1; Case CompareValue(Val, fList[I]^.HashValue)<=0 of True: begin Last:=I-1; Larger:=False; end; False: begin First:=I+1; Larger:=True; end; end; end; Case Larger of True: Result:=I+1; False: Result:=I; end; end else Result:=0; Insert(Result,Item); end; function TStringHashListUtf8.BinarySearch(HashValue: Cardinal): Integer; var First, Last, Temp: Integer; begin Result:= -1; First:= 0; Last:= Count -1; while First <= Last do begin Temp:= (First + Last) div 2; case CompareValue(HashValue, FList[Temp]^.HashValue) of 1: First:= Temp + 1; 0: exit(Temp); -1: Last:= Temp-1; end; end; end; procedure TStringHashListUtf8.Clear; var I: Integer; begin for I:= 0 to fCount -1 do Dispose(fList[I]); if FList<>nil then begin FreeMem(FList); FList:=nil; end; fCount:= 0; end; procedure TStringHashListUtf8.Remove(Index: Integer); begin if (Index >= 0) and (Index < FCount) then begin Dispose(fList[Index]); Delete(Index); end; end; function TStringHashListUtf8.CompareString(const Low, Key: String): Boolean; var P: Pointer; Len: Integer; LKey: String; begin P:= Pointer(Low); Len:= Length(Low); if fCaseSensitive then begin Result:= (Len = Length(Key)); if Result then Result:= (CompareByte(P^, Pointer(Key)^, Len) = 0); end else begin LKey:= UTF8LowerCase(Key); Result:= (Len = Length(LKey)); if Result then Result:= (CompareByte(P^, Pointer(LKey)^, Len) = 0); end; end; function TStringHashListUtf8.CompareValue(const Value1, Value2: Cardinal): Integer; begin Result:= 0; if Value1 > Value2 then Result:= 1 else if Value1 < Value2 then Result:= -1; end; function TStringHashListUtf8.GetData(const S: String): Pointer; var i: integer; begin i:=Find(S); if i>=0 then Result:=FList[i]^.Data else Result:=nil; end; procedure TStringHashListUtf8.Delete(Index: Integer); begin if (Index >= 0) and (Index < FCount) then begin dec(FCount); if Index < FCount then System.Move(FList[Index + 1], FList[Index], (FCount - Index) * SizeOf(PStringHashItem)); end; end; procedure TStringHashListUtf8.SetData(const S: String; const AValue: Pointer); var i: integer; begin i:=Find(S); if i>=0 then FList[i]^.Data:=AValue else Add(S,AValue); end; destructor TStringHashListUtf8.Destroy; begin Clear; inherited Destroy; end; function TStringHashListUtf8.Find(const S: String): Integer; var Text: String; Value: Cardinal; First, Last, I: Integer; begin if fCaseSensitive then Text := S else begin Text:= UTF8LowerCase(S); end; Value:= HashOf(Text); Result:= BinarySearch(Value); if (Result <> -1) and not CompareString(Text, FList[Result]^.Key) then begin FindHashBoundaries(Value, Result, First, Last); Result:= -1; for I := First to Last do if CompareString(Text, FList[I]^.Key) then begin Result:= I; Exit; end; end; end; function TStringHashListUtf8.Find(const S: String; Data: Pointer): Integer; var Text: String; Value: Cardinal; First, Last, I: Integer; begin if fCaseSensitive then Text := S else begin Text:= UTF8LowerCase(S); end; Value:= HashOf(Text); Result:= BinarySearch(Value); if (Result <> -1) and not (CompareString(Text, FList[Result]^.Key) and (FList[Result]^.Data = Data)) then begin FindHashBoundaries(Value, Result, First, Last); Result:= -1; for I := First to Last do if CompareString(Text, FList[I]^.Key) and (FList[I]^.Data = Data) then begin Result:= I; Exit; end; end; end; procedure TStringHashListUtf8.FindHashBoundaries(HashValue: Cardinal; StartFrom: Integer; out First, Last: Integer); begin First:= StartFrom -1; //Find first matching hash index while (First >= 0) and (CompareValue(HashValue, FList[First]^.HashValue) = 0) do dec(First); if (First < 0) or ((CompareValue(HashValue, FList[First]^.HashValue) <> 0)) then inc(First); //Find the last matching hash index Last:= StartFrom +1; while (Last <= (FCount - 1)) and (CompareValue(HashValue, FList[Last]^.HashValue) = 0) do inc(Last); if (Last > (FCount - 1)) or (CompareValue(HashValue, FList[Last]^.HashValue) <> 0) then dec(Last); end; function TStringHashListUtf8.HashOf(const Key: string): Cardinal; var P: PAnsiChar; I, Len: Integer; begin P:= PAnsiChar(Key); Len:= Length(Key); Result := Len; {$PUSH}{$R-}{$Q-} // no range, no overflow checks for I := Len - 1 downto 0 do Inc(Result, Cardinal(Ord(P[I])) shl I); {$POP} end; procedure TStringHashListUtf8.Insert(Index: Integer; Item: PStringHashItem); begin ReallocMem(FList, (fCount +1) * SizeOf(PStringHashItem)); if Index > fCount then Index:= fCount; if Index < 0 then Index:= 0; if Index < FCount then System.Move(FList[Index], FList[Index + 1], (FCount - Index) * SizeOf(PStringHashItem)); FList[Index] := Item; Inc(FCount); end; constructor TStringHashListUtf8.Create(CaseSensitivity: boolean); begin fCaseSensitive:=CaseSensitivity; inherited Create; end; function TStringHashListUtf8.Remove(const S: String): Integer; begin Result:= Find(S); if Result > -1 then begin Dispose(fList[Result]); Delete(Result); end; end; function TStringHashListUtf8.Remove(const S: String; Data: Pointer): Integer; begin Result:= Find(S, Data); if Result > -1 then begin Dispose(fList[Result]); Delete(Result); end; end; procedure TStringHashListUtf8.FindBoundaries(StartFrom: Integer; out First, Last: Integer); begin FindHashBoundaries(FList[StartFrom]^.HashValue, StartFrom, First, Last); end; procedure TStringHashListUtf8.SetCaseSensitive(const Value: Boolean); begin if fCaseSensitive <> Value then begin if Count > 0 then begin raise EListError.Create(lrsListMustBeEmpty); exit; end; fCaseSensitive := Value; end; end; end. doublecmd-1.1.30/components/doublecmd/dcprocessutf8.pas0000644000175000001440000002435015104114162022215 0ustar alexxusers{ Based on process.inc from the Free Component Library (FCL) Copyright (c) 1999-2008 by the Free Pascal development team See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. } unit DCProcessUtf8; {$mode objfpc}{$H+} interface uses Classes, SysUtils {$IF DEFINED(MSWINDOWS)} , Process, Windows, Pipes, DCConvertEncoding {$ELSEIF DEFINED(UNIX)} , BaseUnix, Process, UTF8Process, DCUnix {$ENDIF} ; type { TProcessUtf8 } {$IF DEFINED(UNIX)} TProcessUtf8 = class(UTF8Process.TProcessUTF8) private procedure DoForkEvent(Sender : TObject); public constructor Create(AOwner : TComponent); override; procedure Execute; override; function Resume : Integer; override; function Suspend : Integer; override; function Terminate (AExitCode : Integer): Boolean; override; end; {$ELSEIF DEFINED(MSWINDOWS) AND (FPC_FULLVERSION < 30301)} TProcessUtf8 = class(TProcess) public procedure Execute; override; end; {$ELSE} TProcessUtf8 = class(TProcess); {$ENDIF} implementation {$IF DEFINED(UNIX)} { TProcessUtf8 } procedure TProcessUtf8.DoForkEvent(Sender: TObject); begin FileCloseOnExecAll; if (poNewProcessGroup in Options) then if (setpgid(0, 0) < 0) then fpExit(127); end; constructor TProcessUtf8.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IF (FPC_FULLVERSION >= 30000)} OnForkEvent:= @DoForkEvent; {$ELSE} OnForkEvent:= @FileCloseOnExecAll; {$ENDIF} end; procedure TProcessUtf8.Execute; begin inherited Execute; if (poNewProcessGroup in Options) then PInteger(@ProcessId)^:= -ProcessId; end; function TProcessUtf8.Resume: Integer; begin if fpKill(ProcessId, SIGCONT) <> 0 then Result:= -1 else Result:= 0; end; function TProcessUtf8.Suspend: Integer; begin if fpKill(ProcessId, SIGSTOP) <> 0 then Result:= -1 else Result:= 1; end; function TProcessUtf8.Terminate(AExitCode: Integer): Boolean; begin Result:= fpKill(ProcessId, SIGTERM) = 0; if Result then begin if Running then Result:= fpKill(ProcessId, SIGKILL) = 0; end; if Result then WaitOnExit; end; {$ELSEIF DEFINED(MSWINDOWS) AND (FPC_FULLVERSION < 30301)} {$WARN SYMBOL_DEPRECATED OFF} {$IF FPC_FULLVERSION < 30000} type TStartupInfoW = TStartupInfo; {$ENDIF} resourcestring SNoCommandLine = 'Cannot execute empty command-line'; SErrCannotExecute = 'Failed to execute %s : %d'; const PriorityConstants: array [TProcessPriority] of Cardinal = (HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS {$IF FPC_FULLVERSION >= 30200} , BELOW_NORMAL_PRIORITY_CLASS,ABOVE_NORMAL_PRIORITY_CLASS {$ENDIF} ); function GetStartupFlags(P: TProcess): Cardinal; begin with P do begin Result := 0; if poUsePipes in Options then Result := Result or Startf_UseStdHandles; if suoUseShowWindow in StartupOptions then Result := Result or startf_USESHOWWINDOW; if suoUSESIZE in StartupOptions then Result := Result or startf_usesize; if suoUsePosition in StartupOptions then Result := Result or startf_USEPOSITION; if suoUSECOUNTCHARS in StartupOptions then Result := Result or startf_usecountchars; if suoUsefIllAttribute in StartupOptions then Result := Result or startf_USEFILLATTRIBUTE; end; end; function GetCreationFlags(P: TProcess): Cardinal; begin with P do begin Result := 0; if poNoConsole in Options then Result := Result or Detached_Process; if poNewConsole in Options then Result := Result or Create_new_console; if poNewProcessGroup in Options then Result := Result or CREATE_NEW_PROCESS_GROUP; if poRunSuspended in Options then Result := Result or Create_Suspended; if poDebugProcess in Options then Result := Result or DEBUG_PROCESS; if poDebugOnlyThisProcess in Options then Result := Result or DEBUG_ONLY_THIS_PROCESS; if poDefaultErrorMode in Options then Result := Result or CREATE_DEFAULT_ERROR_MODE; Result := Result or PriorityConstants[Priority]; end; end; function StringsToPWideChars(List: TStrings): Pointer; var I: Integer; EnvBlock: WideString; begin EnvBlock := ''; for I := 0 to List.Count - 1 do EnvBlock := EnvBlock + CeUtf8ToUtf16(List[I]) + #0; EnvBlock := EnvBlock + #0; GetMem(Result, Length(EnvBlock) * SizeOf(Widechar)); CopyMemory(Result, @EnvBlock[1], Length(EnvBlock) * SizeOf(Widechar)); end; procedure InitProcessAttributes(P: TProcess; var PA: TSecurityAttributes); begin FillChar(PA, SizeOf(PA), 0); PA.nLength := SizeOf(PA); end; procedure InitThreadAttributes(P: TProcess; var TA: TSecurityAttributes); begin FillChar(TA, SizeOf(TA), 0); TA.nLength := SizeOf(TA); end; procedure InitStartupInfo(P: TProcess; var SI: TStartupInfoW); const SWC: array [TShowWindowOptions] of Cardinal = (0, SW_HIDE, SW_Maximize, SW_Minimize, SW_Restore, SW_Show, SW_ShowDefault, SW_ShowMaximized, SW_ShowMinimized, SW_showMinNOActive, SW_ShowNA, SW_ShowNoActivate, SW_ShowNormal); begin FillChar(SI, SizeOf(SI), 0); with SI do begin dwFlags := GetStartupFlags(P); if P.ShowWindow <> swoNone then dwFlags := dwFlags or Startf_UseShowWindow else dwFlags := dwFlags and not Startf_UseShowWindow; wShowWindow := SWC[P.ShowWindow]; if (poUsePipes in P.Options) then begin dwFlags := dwFlags or Startf_UseStdHandles; end; if P.FillAttribute <> 0 then begin dwFlags := dwFlags or Startf_UseFillAttribute; dwFillAttribute := P.FillAttribute; end; dwXCountChars := P.WindowColumns; dwYCountChars := P.WindowRows; dwYsize := P.WindowHeight; dwXsize := P.WindowWidth; dwy := P.WindowTop; dwX := P.WindowLeft; end; end; { The handles that are to be passed to the child process must be inheritable. On the other hand, only non-inheritable handles allow the sending of EOF when the write-end is closed. This function is used to duplicate the child process's ends of the handles into inheritable ones, leaving the parent-side handles non-inheritable. } function DuplicateHandleFP(var Handle: THandle): Boolean; var oldHandle: THandle; begin oldHandle := Handle; Result := DuplicateHandle(GetCurrentProcess(), oldHandle, GetCurrentProcess(), @Handle, 0, True, DUPLICATE_SAME_ACCESS); if Result then Result := CloseHandle(oldHandle); end; procedure CreatePipes(var HI, HO, HE: THandle; var SI: TStartupInfoW; CE: Boolean; APipeBufferSize: Cardinal); begin CreatePipeHandles(SI.hStdInput, HI, APipeBufferSize); DuplicateHandleFP(SI.hStdInput); CreatePipeHandles(HO, Si.hStdOutput, APipeBufferSize); DuplicateHandleFP(Si.hStdOutput); if CE then begin CreatePipeHandles(HE, SI.hStdError, APipeBufferSize); DuplicateHandleFP(SI.hStdError); end else begin SI.hStdError := SI.hStdOutput; HE := HO; end; end; function MaybeQuote(const S: String): String; begin if (Pos(' ', S) <> 0) then Result := '"' + S + '"' else Result := S; end; function MaybeQuoteIfNotQuoted(const S: String): String; begin if (Pos(' ', S) <> 0) and (pos('"', S) = 0) then Result := '"' + S + '"' else Result := S; end; { TProcessUtf8 } procedure TProcessUtf8.Execute; var I: Integer; PName, PDir, PCommandLine: PWideChar; FEnv: Pointer; FCreationFlags: Cardinal; FProcessAttributes: TSecurityAttributes; FThreadAttributes: TSecurityAttributes; FProcessInformation: TProcessInformation; FStartupInfo: TStartupInfoW; HI, HO, HE: THandle; Cmd: String; begin InheritHandles := True; PName := nil; PCommandLine := nil; PDir := nil; if (ApplicationName = '') and (CommandLine = '') and (Executable = '') then raise EProcess.Create(SNoCommandline); if (ApplicationName <> '') then begin PName := PWideChar(CeUtf8ToUtf16(ApplicationName)); PCommandLine := PWideChar(CeUtf8ToUtf16(CommandLine)); end else if (CommandLine <> '') then PCommandLine := PWideChar(CeUtf8ToUtf16(CommandLine)) else if (Executable <> '') then begin Cmd := MaybeQuoteIfNotQuoted(Executable); for I := 0 to Parameters.Count - 1 do Cmd := Cmd + ' ' + MaybeQuoteIfNotQuoted(Parameters[I]); PCommandLine := PWideChar(CeUtf8ToUtf16(Cmd)); end; if CurrentDirectory <> '' then PDir := PWideChar(CeUtf8ToUtf16(CurrentDirectory)); if Environment.Count <> 0 then FEnv := StringsToPWideChars(Environment) else FEnv := nil; try FCreationFlags := GetCreationFlags(Self); InitProcessAttributes(Self, FProcessAttributes); InitThreadAttributes(Self, FThreadAttributes); InitStartupInfo(Self, FStartUpInfo); if poUsePipes in Options then CreatePipes(HI, HO, HE, FStartupInfo, not (poStdErrToOutPut in Options), PipeBufferSize); try if not CreateProcessW(PName, PCommandLine, @FProcessAttributes, @FThreadAttributes, InheritHandles, FCreationFlags, FEnv, PDir, FStartupInfo, FProcessInformation) then raise EProcess.CreateFmt(SErrCannotExecute, [CommandLine, GetLastError]); PHandle(@ProcessHandle)^ := FProcessInformation.hProcess; PHandle(@ThreadHandle)^ := FProcessInformation.hThread; PInteger(@ProcessID)^ := FProcessINformation.dwProcessID; finally if poUsePipes in Options then begin FileClose(FStartupInfo.hStdInput); FileClose(FStartupInfo.hStdOutput); if not (poStdErrToOutPut in Options) then FileClose(FStartupInfo.hStdError); CreateStreams(HI, HO, HE); end; end; FRunning := True; finally if FEnv <> nil then FreeMem(FEnv); end; if not (csDesigning in ComponentState) and // This would hang the IDE ! (poWaitOnExit in Options) and not (poRunSuspended in Options) then WaitOnExit; end; {$ENDIF} end. doublecmd-1.1.30/components/doublecmd/dcosutils.pas0000644000175000001440000017000615104114162021432 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains platform dependent functions dealing with operating system. Copyright (C) 2006-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit DCOSUtils; {$mode objfpc}{$H+} {$modeswitch advancedrecords} interface uses SysUtils, Classes, DynLibs, DCClassesUtf8, DCBasicTypes, DCConvertEncoding {$IFDEF UNIX} , BaseUnix, DCUnix {$ENDIF} {$IFDEF LINUX} , DCLinux {$ENDIF} {$IFDEF HAIKU} , DCHaiku {$ENDIF} {$IFDEF MSWINDOWS} , JwaWinBase, Windows {$ENDIF} ; const fmOpenSync = $10000; fmOpenDirect = $20000; fmOpenNoATime = $40000; {$IF DEFINED(UNIX)} ERROR_NOT_SAME_DEVICE = ESysEXDEV; {$ELSE} ERROR_NOT_SAME_DEVICE = Windows.ERROR_NOT_SAME_DEVICE; {$ENDIF} type TFileMapRec = record FileHandle : System.THandle; FileSize : Int64; {$IFDEF MSWINDOWS} MappingHandle : System.THandle; {$ENDIF} MappedFile : Pointer; end; TFileAttributeData = packed record Size: Int64; {$IF DEFINED(UNIX)} FindData: BaseUnix.Stat; property Attr: TUnixMode read FindData.st_mode; property PlatformTime: TUnixTime read FindData.st_ctime; property LastWriteTime: TUnixTime read FindData.st_mtime; property LastAccessTime: TUnixTime read FindData.st_atime; {$ELSE} case Boolean of True: ( FindData: Windows.TWin32FileAttributeData; ); False: ( Attr: TFileAttrs; PlatformTime: DCBasicTypes.TFileTime; LastAccessTime: DCBasicTypes.TFileTime; LastWriteTime: DCBasicTypes.TFileTime; ); {$ENDIF} end; TCopyAttributesOption = (caoCopyAttributes, caoCopyTime, caoCopyOwnership, caoCopyPermissions, caoCopyXattributes, // Modifiers caoCopyTimeEx, caoCopyAttrEx, caoRemoveReadOnlyAttr); TCopyAttributesOptions = set of TCopyAttributesOption; TCopyAttributesResult = array[TCopyAttributesOption] of Integer; PCopyAttributesResult = ^TCopyAttributesResult; const faInvalidAttributes = TFileAttrs(-1); CopyAttributesOptionCopyAll = [caoCopyAttributes, caoCopyTime, caoCopyOwnership]; {en Is file a directory @param(iAttr File attributes) @returns(@true if file is a directory, @false otherwise) } function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; {en Is file a symbolic link @param(iAttr File attributes) @returns(@true if file is a symbolic link, @false otherwise) } function FPS_ISLNK(iAttr: TFileAttrs) : Boolean; {en Is file a regular file @param(iAttr File attributes) @returns(@true if file is a regular file, @false otherwise) } function FPS_ISREG(iAttr: TFileAttrs) : Boolean; {en Is file executable @param(sFileName File name) @returns(@true if file is executable, @false otherwise) } function FileIsExeLib(const sFileName : String) : Boolean; {en Is file console executable @param(sFileName File name) @returns(@true if file is console executable, @false otherwise) } function FileIsConsoleExe(const FileName: String): Boolean; {en Copies a file attributes (attributes, date/time, owner & group, permissions). @param(sSrc String expression that specifies the name of the file to be copied) @param(sDst String expression that specifies the target file name) @param(bDropReadOnlyFlag Drop read only attribute if @true) @returns(The function returns @true if successful, @false otherwise) } function FileIsReadOnly(iAttr: TFileAttrs): Boolean; inline; {en Returns path to a temporary name. It ensures that returned path doesn't exist, i.e., there is no filesystem entry by that name. If it could not create a unique temporary name then it returns empty string. @param(PathPrefix This parameter is added at the beginning of each path that is tried. The directories in this path are not created if they don't exist. If it is empty then the system temporary directory is used. For example: If PathPrefix is '/tmp/myfile' then files '/tmp/myfile~XXXXXX.tmp' are tried. The path '/tmp' must already exist.) } function GetTempName(PathPrefix: String; Extension: String = 'tmp'): String; {en Find file in the system PATH } function FindInSystemPath(var FileName: String): Boolean; {en Extract file root directory @param(FileName File name) } function ExtractRootDir(const FileName: String): String; (* File mapping/unmapping routines *) {en Create memory map of a file @param(sFileName Name of file to mapping) @param(FileMapRec TFileMapRec structure) @returns(The function returns @true if successful, @false otherwise) } function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boolean; {en Unmap previously mapped file @param(FileMapRec TFileMapRec structure) } procedure UnMapFile(var FileMapRec : TFileMapRec); {en Convert from console to UTF8 encoding. } function ConsoleToUTF8(const Source: String): RawByteString; { File handling functions} function mbFileOpen(const FileName: String; Mode: LongWord): System.THandle; function mbFileCreate(const FileName: String): System.THandle; overload; inline; function mbFileCreate(const FileName: String; Mode: LongWord): System.THandle; overload; inline; function mbFileCreate(const FileName: String; Mode, Rights: LongWord): System.THandle; overload; function mbFileAge(const FileName: String): DCBasicTypes.TFileTime; function mbFileGetTime(const FileName: String): DCBasicTypes.TFileTimeEx; // On success returns True. // nanoseconds supported function mbFileGetTime(const FileName: String; var ModificationTime: DCBasicTypes.TFileTimeEx; var CreationTime : DCBasicTypes.TFileTimeEx; var LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean; // On success returns True. function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean; // nanoseconds supported function mbFileSetTimeEx(const FileName: String; ModificationTime: DCBasicTypes.TFileTimeEx; CreationTime : DCBasicTypes.TFileTimeEx; LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean; {en Checks if a given file exists - it can be a real file or a link to a file, but it can be opened and read from. Even if the result is @false, we can't be sure a file by that name can be created, because there may still exist a directory or link by that name. } function mbFileExists(const FileName: String): Boolean; function mbFileAccess(const FileName: String; Mode: Word): Boolean; function mbFileGetAttr(const FileName: String): TFileAttrs; overload; function mbFileGetAttr(const FileName: String; out Attr: TFileAttributeData): Boolean; overload; function mbFileSetAttr(const FileName: String; Attr: TFileAttrs): Boolean; {en If any operation in Options is performed and does not succeed it is included in the result set. If all performed operations succeed the function returns empty set. For example for Options=[caoCopyTime, caoCopyOwnership] setting ownership doesn't succeed then the function returns [caoCopyOwnership]. } function mbFileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions; Errors: PCopyAttributesResult = nil): TCopyAttributesOptions; // Returns True on success. function mbFileSetReadOnly(const FileName: String; ReadOnly: Boolean): Boolean; function mbDeleteFile(const FileName: String): Boolean; function mbRenameFile(const OldName: String; NewName: String): Boolean; function mbFileSize(const FileName: String): Int64; function FileGetSize(Handle: System.THandle): Int64; function FileFlush(Handle: System.THandle): Boolean; function FileFlushData(Handle: System.THandle): Boolean; function FileIsReadOnlyEx(Handle: System.THandle): Boolean; function FileAllocate(Handle: System.THandle; Size: Int64): Boolean; { Directory handling functions} function mbGetCurrentDir: String; function mbSetCurrentDir(const NewDir: String): Boolean; {en Checks if a given directory exists - it may be a real directory or a link to directory. Even if the result is @false, we can't be sure a directory by that name can be created, because there may still exist a file or link by that name. } function mbDirectoryExists(const Directory : String) : Boolean; function mbCreateDir(const NewDir: String): Boolean; function mbRemoveDir(const Dir: String): Boolean; {en Checks if any file system entry exists at given path. It can be file, directory, link, etc. (links are not followed). } function mbFileSystemEntryExists(const Path: String): Boolean; function mbCompareFileNames(const FileName1, FileName2: String): Boolean; function mbFileSame(const FileName1, FileName2: String): Boolean; function mbFileSameVolume(const FileName1, FileName2: String) : Boolean; { Other functions } function mbGetEnvironmentString(Index : Integer) : String; {en Expands environment-variable strings and replaces them with the values defined for the current user } function mbExpandEnvironmentStrings(const FileName: String): String; function mbGetEnvironmentVariable(const sName: String): String; function mbSetEnvironmentVariable(const sName, sValue: String): Boolean; function mbUnsetEnvironmentVariable(const sName: String): Boolean; function mbSysErrorMessage: String; overload; inline; function mbSysErrorMessage(ErrorCode: Integer): String; overload; {en Get current module name } function mbGetModuleName(Address: Pointer = nil): String; function mbLoadLibrary(const Name: String): TLibHandle; function mbLoadLibraryEx(const Name: String): TLibHandle; function SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer; {en Reads the concrete file's name that the link points to. If the link points to a link then it's resolved recursively until a valid file name that is not a link is found. @param(PathToLink Name of symbolic link (absolute path)) @returns(The absolute filename the symbolic link name is pointing to, or an empty string when the link is invalid or the file it points to does not exist.) } function mbReadAllLinks(const PathToLink : String) : String; {en If PathToLink points to a link then it returns file that the link points to (recursively). If PathToLink does not point to a link then PathToLink value is returned. } function mbCheckReadLinks(const PathToLink : String) : String; {en Same as mbFileGetAttr, but dereferences any encountered links. } function mbFileGetAttrNoLinks(const FileName: String): TFileAttrs; {en Create a hard link to a file @param(Path Name of file) @param(LinkName Name of hard link) @returns(The function returns @true if successful, @false otherwise) } function CreateHardLink(const Path, LinkName: String) : Boolean; {en Create a symbolic link @param(Path Name of file) @param(LinkName Name of symbolic link) @returns(The function returns @true if successful, @false otherwise) } function CreateSymLink(const Path, LinkName: string; Attr: UInt32 = faInvalidAttributes) : Boolean; {en Read destination of symbolic link @param(LinkName Name of symbolic link) @returns(The file name/path the symbolic link name is pointing to. The path may be relative to link's location.) } function ReadSymLink(const LinkName : String) : String; {en Sets the last-error code for the calling thread } procedure SetLastOSError(LastError: Integer); function GetTickCountEx: UInt64; implementation uses {$IF DEFINED(MSWINDOWS)} DCDateTimeUtils, DCWindows, DCNtfsLinks, {$ENDIF} {$IF DEFINED(UNIX)} Unix, dl, {$ENDIF} DCStrUtils, LazUTF8; {$IFDEF UNIX} function SetModeReadOnly(mode: TMode; ReadOnly: Boolean): TMode; begin mode := mode and not (S_IWUSR or S_IWGRP or S_IWOTH); if ReadOnly = False then begin if (mode AND S_IRUSR) = S_IRUSR then mode := mode or S_IWUSR; if (mode AND S_IRGRP) = S_IRGRP then mode := mode or S_IWGRP; if (mode AND S_IROTH) = S_IROTH then mode := mode or S_IWOTH; end; Result := mode; end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} const AccessModes: array[0..2] of DWORD = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); ShareModes: array[0..4] of DWORD = ( 0, 0, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE); OpenFlags: array[0..3] of DWORD = ( 0, FILE_FLAG_WRITE_THROUGH, FILE_FLAG_NO_BUFFERING, FILE_FLAG_WRITE_THROUGH or FILE_FLAG_NO_BUFFERING); var CurrentDirectory: String; PerformanceFrequency: LARGE_INTEGER; {$ELSEIF DEFINED(UNIX)} const {$IF NOT DECLARED(O_SYNC)} O_SYNC = 0; {$ENDIF} {$IF NOT DECLARED(O_DIRECT)} O_DIRECT = 0; {$ENDIF} AccessModes: array[0..2] of cInt = ( O_RdOnly, O_WrOnly, O_RdWr); OpenFlags: array[0..3] of cInt = ( 0, O_SYNC, O_DIRECT, O_SYNC or O_DIRECT); {$ENDIF} function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_DIRECTORY <> 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISDIR(TMode(iAttr)); end; {$ENDIF} function FPS_ISLNK(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_REPARSE_POINT <> 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISLNK(TMode(iAttr)); end; {$ENDIF} function FPS_ISREG(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_DIRECTORY = 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISREG(TMode(iAttr)); end; {$ENDIF} function FileIsExeLib(const sFileName : String) : Boolean; var fsExeLib : TFileStreamEx; {$IFDEF MSWINDOWS} Sign : Word; {$ELSE} Sign : DWord; {$ENDIF} begin Result := False; if mbFileExists(sFileName) and (mbFileSize(sFileName) >= SizeOf(Sign)) then try fsExeLib := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try {$IFDEF MSWINDOWS} Sign := fsExeLib.ReadWord; Result := (Sign = $5A4D); {$ELSE} Sign := fsExeLib.ReadDWord; Result := (Sign = $464C457F); {$ENDIF} finally fsExeLib.Free; end; except Result := False; end; end; function FileIsConsoleExe(const FileName: String): Boolean; {$IF DEFINED(UNIX)} begin Result:= True; end; {$ELSE} var fsFileStream: TFileStreamEx; begin Result:= False; try fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try if fsFileStream.ReadWord = IMAGE_DOS_SIGNATURE then begin fsFileStream.Seek(60, soBeginning); fsFileStream.Seek(fsFileStream.ReadDWord, soBeginning); if fsFileStream.ReadDWord = IMAGE_NT_SIGNATURE then begin fsFileStream.Seek(88, soCurrent); Result:= (fsFileStream.ReadWord = IMAGE_SUBSYSTEM_WINDOWS_CUI); end; end; finally fsFileStream.Free; end; except Result:= False; end; end; {$ENDIF} function FileIsReadOnly(iAttr: TFileAttrs): Boolean; {$IFDEF MSWINDOWS} begin Result:= (iAttr and (faReadOnly or faHidden or faSysFile)) <> 0; end; {$ELSE} begin Result:= (((iAttr AND S_IRUSR) = S_IRUSR) and ((iAttr AND S_IWUSR) <> S_IWUSR)); end; {$ENDIF} function mbFileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions; Errors: PCopyAttributesResult ): TCopyAttributesOptions; {$IFDEF MSWINDOWS} var Attr: TWin32FileAttributeData; Option: TCopyAttributesOption; ModificationTime, CreationTime, LastAccessTime: DCBasicTypes.TFileTime; begin Result := []; if not GetFileAttributesExW(PWideChar(UTF16LongName(sSrc)), GetFileExInfoStandard, @Attr) then begin Result := Options; if Assigned(Errors) then begin for Option in Result do Errors^[Option]:= GetLastOSError; end; Exit; end; if [caoCopyAttributes, caoCopyAttrEx] * Options <> [] then begin if (not (caoCopyAttributes in Options)) and (Attr.dwFileAttributes and faDirectory = 0) then Attr.dwFileAttributes := (Attr.dwFileAttributes or faArchive); if (caoRemoveReadOnlyAttr in Options) and ((Attr.dwFileAttributes and faReadOnly) <> 0) then Attr.dwFileAttributes := (Attr.dwFileAttributes and not faReadOnly); if not mbFileSetAttr(sDst, Attr.dwFileAttributes) then begin Include(Result, caoCopyAttributes); if Assigned(Errors) then Errors^[caoCopyAttributes]:= GetLastOSError; end; end; if not FPS_ISLNK(Attr.dwFileAttributes) then begin if (caoCopyXattributes in Options) then begin if not mbFileCopyXattr(sSrc, sDst) then begin Include(Result, caoCopyXattributes); if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError; end; end; if ([caoCopyTime, caoCopyTimeEx] * Options <> []) then begin if not (caoCopyTime in Options) then begin CreationTime:= 0; LastAccessTime:= 0; end else begin CreationTime:= DCBasicTypes.TFileTime(Attr.ftCreationTime); LastAccessTime:= DCBasicTypes.TFileTime(Attr.ftLastAccessTime); end; ModificationTime:= DCBasicTypes.TFileTime(Attr.ftLastWriteTime); if not mbFileSetTime(sDst, ModificationTime, CreationTime, LastAccessTime) then begin Include(Result, caoCopyTime); if Assigned(Errors) then Errors^[caoCopyTime]:= GetLastOSError; end; end; end; if caoCopyPermissions in Options then begin if not CopyNtfsPermissions(sSrc, sDst) then begin Include(Result, caoCopyPermissions); if Assigned(Errors) then Errors^[caoCopyPermissions]:= GetLastOSError; end; end; end; {$ELSE} // *nix var Option: TCopyAttributesOption; StatInfo : TDCStat; modificationTime: TFileTimeEx; creationTime: TFileTimeEx; lastAccessTime: TFileTimeEx; mode : TMode; begin if DC_fpLStat(UTF8ToSys(sSrc), StatInfo) < 0 then begin Result := Options; if Assigned(Errors) then begin for Option in Result do Errors^[Option]:= GetLastOSError; end; end else begin Result := []; if FPS_ISLNK(StatInfo.st_mode) then begin if caoCopyOwnership in Options then begin // Only group/owner can be set for links. if fpLChown(sDst, StatInfo.st_uid, StatInfo.st_gid) = -1 then begin Include(Result, caoCopyOwnership); if Assigned(Errors) then Errors^[caoCopyOwnership]:= GetLastOSError; end; end; {$IF DEFINED(HAIKU)} if caoCopyXattributes in Options then begin if not mbFileCopyXattr(sSrc, sDst) then begin Include(Result, caoCopyXattributes); if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError; end; end; {$ENDIF} end else begin if caoCopyTime in Options then begin modificationTime:= StatInfo.mtime; lastAccessTime:= StatInfo.atime; creationTime:= StatInfo.birthtime; if DC_FileSetTime(sDst, modificationTime, creationTime, lastAccessTime) = false then begin Include(Result, caoCopyTime); if Assigned(Errors) then Errors^[caoCopyTime]:= GetLastOSError; end; end; if caoCopyOwnership in Options then begin if fpChown(PChar(UTF8ToSys(sDst)), StatInfo.st_uid, StatInfo.st_gid) = -1 then begin Include(Result, caoCopyOwnership); if Assigned(Errors) then Errors^[caoCopyOwnership]:= GetLastOSError; end; end; if caoCopyAttributes in Options then begin mode := StatInfo.st_mode; if caoRemoveReadOnlyAttr in Options then mode := SetModeReadOnly(mode, False); if fpChmod(UTF8ToSys(sDst), mode) = -1 then begin Include(Result, caoCopyAttributes); if Assigned(Errors) then Errors^[caoCopyAttributes]:= GetLastOSError; end; end; {$IF DEFINED(LINUX) or DEFINED(HAIKU)} if caoCopyXattributes in Options then begin if not mbFileCopyXattr(sSrc, sDst) then begin Include(Result, caoCopyXattributes); if Assigned(Errors) then Errors^[caoCopyXattributes]:= GetLastOSError; end; end; {$ENDIF} end; end; end; {$ENDIF} function GetTempName(PathPrefix: String; Extension: String): String; const MaxTries = 100; var FileName: String; TryNumber: Integer = 0; begin if PathPrefix = '' then PathPrefix := GetTempDir else begin FileName:= ExtractOnlyFileName(PathPrefix); PathPrefix:= ExtractFilePath(PathPrefix); // Generated file name should be less the maximum file name length if (Length(FileName) > 0) then PathPrefix += UTF8Copy(FileName, 1, 48) + '~'; end; if (Length(Extension) > 0) then begin if (not StrBegins(Extension, ExtensionSeparator)) then Extension := ExtensionSeparator + Extension; end; repeat Result := PathPrefix + IntToStr(System.Random(MaxInt)) + Extension; Inc(TryNumber); if TryNumber = MaxTries then Exit(''); until not mbFileSystemEntryExists(Result); end; function FindInSystemPath(var FileName: String): Boolean; var I: Integer; Path, FullName: String; Value: TDynamicStringArray; begin Path:= mbGetEnvironmentVariable('PATH'); Value:= SplitString(Path, PathSeparator); for I:= Low(Value) to High(Value) do begin FullName:= IncludeTrailingPathDelimiter(Value[I]) + FileName; if mbFileExists(FullName) then begin FileName:= FullName; Exit(True); end; end; Result:= False; end; function ExtractRootDir(const FileName: String): String; {$IFDEF UNIX} begin Result:= ExcludeTrailingPathDelimiter(FindMountPointPath(ExcludeTrailingPathDelimiter(FileName))); end; {$ELSE} begin Result:= ExtractFileDrive(FileName); end; {$ENDIF} function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boolean; {$IFDEF MSWINDOWS} begin Result := False; with FileMapRec do begin MappedFile := nil; MappingHandle := 0; FileHandle := mbFileOpen(sFileName, fmOpenRead); if FileHandle = feInvalidHandle then Exit; Int64Rec(FileSize).Lo := GetFileSize(FileHandle, @Int64Rec(FileSize).Hi); if FileSize = 0 then // Cannot map empty files begin UnMapFile(FileMapRec); Exit; end; MappingHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil); if MappingHandle = 0 then begin UnMapFile(FileMapRec); Exit; end; MappedFile := MapViewOfFile(MappingHandle, FILE_MAP_READ, 0, 0, 0); if not Assigned(MappedFile) then begin UnMapFile(FileMapRec); Exit; end; end; Result := True; end; {$ELSE} var StatInfo: BaseUnix.Stat; begin Result:= False; with FileMapRec do begin MappedFile := nil; FileHandle:= mbFileOpen(sFileName, fmOpenRead); if FileHandle = feInvalidHandle then Exit; if fpfstat(FileHandle, StatInfo) <> 0 then begin UnMapFile(FileMapRec); Exit; end; FileSize := StatInfo.st_size; if FileSize = 0 then // Cannot map empty files begin UnMapFile(FileMapRec); Exit; end; MappedFile:= fpmmap(nil,FileSize,PROT_READ, MAP_PRIVATE{SHARED},FileHandle,0 ); if MappedFile = MAP_FAILED then begin MappedFile := nil; UnMapFile(FileMapRec); Exit; end; end; Result := True; end; {$ENDIF} procedure UnMapFile(var FileMapRec : TFileMapRec); {$IFDEF MSWINDOWS} begin with FileMapRec do begin if Assigned(MappedFile) then begin UnmapViewOfFile(MappedFile); MappedFile := nil; end; if MappingHandle <> 0 then begin CloseHandle(MappingHandle); MappingHandle := 0; end; if FileHandle <> feInvalidHandle then begin FileClose(FileHandle); FileHandle := feInvalidHandle; end; end; end; {$ELSE} begin with FileMapRec do begin if FileHandle <> feInvalidHandle then begin fpClose(FileHandle); FileHandle := feInvalidHandle; end; if Assigned(MappedFile) then begin fpmunmap(MappedFile,FileSize); MappedFile := nil; end; end; end; {$ENDIF} function ConsoleToUTF8(const Source: String): RawByteString; {$IFDEF MSWINDOWS} begin Result:= CeOemToUtf8(Source); end; {$ELSE} begin Result:= CeSysToUtf8(Source); end; {$ENDIF} function mbFileOpen(const FileName: String; Mode: LongWord): System.THandle; {$IFDEF MSWINDOWS} const ft: TFileTime = ( dwLowDateTime: $FFFFFFFF; dwHighDateTime: $FFFFFFFF; ); begin Result:= CreateFileW(PWideChar(UTF16LongName(FileName)), AccessModes[Mode and 3] or ((Mode and fmOpenNoATime) shr 10), ShareModes[(Mode and $F0) shr 4], nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, OpenFlags[(Mode shr 16) and 3]); if (Mode and fmOpenNoATime <> 0) then begin if (Result <> feInvalidHandle) then SetFileTime(Result, nil, @ft, @ft) else if GetLastError = ERROR_ACCESS_DENIED then Result := mbFileOpen(FileName, Mode and not fmOpenNoATime); end; end; {$ELSE} begin repeat Result:= fpOpen(UTF8ToSys(FileName), AccessModes[Mode and 3] or OpenFlags[(Mode shr 16) and 3] or O_CLOEXEC); until (Result <> -1) or (fpgeterrno <> ESysEINTR); if Result <> feInvalidHandle then begin FileCloseOnExec(Result); {$IF DEFINED(DARWIN)} if (Mode and (fmOpenSync or fmOpenDirect) <> 0) then begin if (FpFcntl(Result, F_NOCACHE, 1) = -1) then begin FileClose(Result); Exit(feInvalidHandle); end; end; {$ENDIF} end; end; {$ENDIF} function mbFileCreate(const FileName: String): System.THandle; begin Result:= mbFileCreate(FileName, fmShareDenyWrite); end; function mbFileCreate(const FileName: String; Mode: LongWord): System.THandle; begin Result:= mbFileCreate(FileName, Mode, 438); // 438 = 666 octal end; function mbFileCreate(const FileName: String; Mode, Rights: LongWord): System.THandle; {$IFDEF MSWINDOWS} begin Result:= CreateFileW(PWideChar(UTF16LongName(FileName)), GENERIC_READ or GENERIC_WRITE, ShareModes[(Mode and $F0) shr 4], nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, OpenFlags[(Mode shr 16) and 3]); end; {$ELSE} begin repeat Result:= fpOpen(UTF8ToSys(FileName), O_Creat or O_RdWr or O_Trunc or OpenFlags[(Mode shr 16) and 3] or O_CLOEXEC, Rights); until (Result <> -1) or (fpgeterrno <> ESysEINTR); if Result <> feInvalidHandle then begin FileCloseOnExec(Result); {$IF DEFINED(DARWIN)} if (Mode and (fmOpenSync or fmOpenDirect) <> 0) then begin if (FpFcntl(Result, F_NOCACHE, 1) = -1) then begin FileClose(Result); Exit(feInvalidHandle); end; end; {$ENDIF} end; end; {$ENDIF} function mbFileAge(const FileName: String): DCBasicTypes.TFileTime; {$IFDEF MSWINDOWS} var Handle: System.THandle; FindData: TWin32FindDataW; begin Handle := FindFirstFileW(PWideChar(UTF16LongName(FileName)), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then Exit(DCBasicTypes.TWinFileTime(FindData.ftLastWriteTime)); end; Result:= DCBasicTypes.TFileTime(-1); end; {$ELSE} var Info: BaseUnix.Stat; begin Result:= DCBasicTypes.TFileTime(-1); if fpStat(UTF8ToSys(FileName), Info) >= 0 then {$PUSH}{$R-} Result := Info.st_mtime; {$POP} end; {$ENDIF} function mbFileGetTime(const FileName: String): DCBasicTypes.TFileTimeEx; var CreationTime, LastAccessTime: DCBasicTypes.TFileTimeEx; begin if not mbFileGetTime(FileName, Result, CreationTime, LastAccessTime) then Result:= TFileTimeExNull; end; function mbFileGetTime(const FileName: String; var ModificationTime: DCBasicTypes.TFileTimeEx; var CreationTime : DCBasicTypes.TFileTimeEx; var LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean; {$IFDEF MSWINDOWS} var Handle: System.THandle; begin Handle := CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, // needed for opening directories 0); if Handle <> INVALID_HANDLE_VALUE then begin Result := Windows.GetFileTime(Handle, @CreationTime, @LastAccessTime, @ModificationTime); CloseHandle(Handle); end else Result := False; end; {$ELSE} var StatInfo : TDCStat; begin Result := DC_fpLStat(UTF8ToSys(FileName), StatInfo) >= 0; if Result then begin ModificationTime:= StatInfo.mtime; LastAccessTime:= StatInfo.atime; {$IF DEFINED(DARWIN)} CreationTime:= StatInfo.birthtime; {$ELSE} CreationTime:= StatInfo.ctime; {$ENDIF} end; end; {$ENDIF} function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean; {$IFDEF MSWINDOWS} begin Result:= mbFileSetTimeEx(FileName, ModificationTime, CreationTime, LastAccessTime); end; {$ELSE} var NewModificationTime: DCBasicTypes.TFileTimeEx; NewCreationTime : DCBasicTypes.TFileTimeEx; NewLastAccessTime : DCBasicTypes.TFileTimeEx; begin NewModificationTime:= specialize IfThen(ModificationTime<>0, TFileTimeEx.create(ModificationTime), TFileTimeExNull); NewCreationTime:= specialize IfThen(CreationTime<>0, TFileTimeEx.create(CreationTime), TFileTimeExNull); NewLastAccessTime:= specialize IfThen(LastAccessTime<>0, TFileTimeEx.create(LastAccessTime), TFileTimeExNull); Result:= mbFileSetTimeEx(FileName, NewModificationTime, NewCreationTime, NewLastAccessTime); end; {$ENDIF} function mbFileSetTimeEx(const FileName: String; ModificationTime: DCBasicTypes.TFileTimeEx; CreationTime : DCBasicTypes.TFileTimeEx; LastAccessTime : DCBasicTypes.TFileTimeEx): Boolean; {$IFDEF MSWINDOWS} var Handle: System.THandle; PWinModificationTime: Windows.LPFILETIME = nil; PWinCreationTime: Windows.LPFILETIME = nil; PWinLastAccessTime: Windows.LPFILETIME = nil; begin Handle := CreateFileW(PWideChar(UTF16LongName(FileName)), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, // needed for opening directories 0); if Handle <> INVALID_HANDLE_VALUE then begin if ModificationTime <> 0 then begin PWinModificationTime := @ModificationTime; end; if CreationTime <> 0 then begin PWinCreationTime := @CreationTime; end; if LastAccessTime <> 0 then begin PWinLastAccessTime := @LastAccessTime; end; Result := Windows.SetFileTime(Handle, PWinCreationTime, PWinLastAccessTime, PWinModificationTime); CloseHandle(Handle); end else Result := False; end; {$ELSE} var CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime: DCBasicTypes.TFileTimeEx; begin if mbFileGetTime(FileName, CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime) then begin if ModificationTime<>TFileTimeExNull then CurrentModificationTime:= ModificationTime; if CreationTime<>TFileTimeExNull then CurrentCreationTime:= CreationTime; if LastAccessTime<>TFileTimeExNull then CurrentLastAccessTime:= LastAccessTime; Result := DC_FileSetTime(FileName, CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime); end else begin Result:=False; end; end; {$ENDIF} function mbFileExists(const FileName: String) : Boolean; {$IFDEF MSWINDOWS} var Attr: DWORD; begin Attr:= GetFileAttributesW(PWideChar(UTF16LongName(FileName))); if Attr <> DWORD(-1) then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) = 0 else Result:=False; end; {$ELSE} var Info: BaseUnix.Stat; begin // Can use fpStat, because link to an existing filename can be opened as if it were a real file. if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result:= fpS_ISREG(Info.st_mode) else Result:= False; end; {$ENDIF} function mbFileAccess(const FileName: String; Mode: Word): Boolean; {$IFDEF MSWINDOWS} const AccessMode: array[0..2] of DWORD = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); var hFile: System.THandle; dwDesiredAccess: DWORD; dwShareMode: DWORD = 0; begin dwDesiredAccess := AccessMode[Mode and 3]; if Mode = fmOpenRead then // If checking Read mode no sharing mode given Mode := Mode or fmShareDenyNone; dwShareMode := ShareModes[(Mode and $F0) shr 4]; hFile:= CreateFileW(PWideChar(UTF16LongName(FileName)), dwDesiredAccess, dwShareMode, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); Result := hFile <> INVALID_HANDLE_VALUE; if Result then FileClose(hFile); end; {$ELSE} const AccessMode: array[0..2] of LongInt = ( R_OK, W_OK, R_OK or W_OK); begin Result:= fpAccess(UTF8ToSys(FileName), AccessMode[Mode and 3]) = 0; end; {$ENDIF} {$IFOPT R+} {$DEFINE uOSUtilsRangeCheckOn} {$R-} {$ENDIF} function mbFileGetAttr(const FileName: String): TFileAttrs; {$IFDEF MSWINDOWS} begin Result := GetFileAttributesW(PWideChar(UTF16LongName(FileName))); end; {$ELSE} var Info: BaseUnix.Stat; begin if fpLStat(UTF8ToSys(FileName), @Info) >= 0 then Result:= Info.st_mode else Result:= faInvalidAttributes; end; {$ENDIF} function mbFileGetAttr(const FileName: String; out Attr: TFileAttributeData): Boolean; {$IFDEF MSWINDOWS} var Handle: THandle; fInfoLevelId: FINDEX_INFO_LEVELS; FileInfo: Windows.TWin32FindDataW; begin if CheckWin32Version(6, 1) then fInfoLevelId:= FindExInfoBasic else begin fInfoLevelId:= FindExInfoStandard; end; Handle:= FindFirstFileExW(PWideChar(UTF16LongName(FileName)), fInfoLevelId, @FileInfo, FindExSearchNameMatch, nil, 0); Result:= Handle <> INVALID_HANDLE_VALUE; if Result then begin FindClose(Handle); // If a reparse point tag is not a name surrogate then remove reparse point attribute // Fixes bug: http://doublecmd.sourceforge.net/mantisbt/view.php?id=531 if (FileInfo.dwFileAttributes and FILE_ATTRIBUTE_REPARSE_POINT <> 0) then begin if (FileInfo.dwReserved0 and $20000000 = 0) then FileInfo.dwFileAttributes-= FILE_ATTRIBUTE_REPARSE_POINT; end; Int64Rec(Attr.Size).Lo:= FileInfo.nFileSizeLow; Int64Rec(Attr.Size).Hi:= FileInfo.nFileSizeHigh; Move(FileInfo, Attr.FindData, SizeOf(TWin32FileAttributeData)); end; end; {$ELSE} begin Result:= fpLStat(UTF8ToSys(FileName), Attr.FindData) >= 0; if Result then begin Attr.Size:= Attr.FindData.st_size; end; end; {$ENDIF} function mbFileSetAttr(const FileName: String; Attr: TFileAttrs): Boolean; {$IFDEF MSWINDOWS} begin Result:= SetFileAttributesW(PWideChar(UTF16LongName(FileName)), Attr); end; {$ELSE} begin Result:= fpchmod(UTF8ToSys(FileName), Attr) = 0; end; {$ENDIF} {$IFDEF uOSUtilsRangeCheckOn} {$R+} {$UNDEF uOSUtilsRangeCheckOn} {$ENDIF} function mbFileSetReadOnly(const FileName: String; ReadOnly: Boolean): Boolean; {$IFDEF MSWINDOWS} var iAttr: DWORD; wFileName: UnicodeString; begin wFileName:= UTF16LongName(FileName); iAttr := GetFileAttributesW(PWideChar(wFileName)); if iAttr = DWORD(-1) then Exit(False); if ReadOnly then iAttr:= iAttr or faReadOnly else iAttr:= iAttr and not (faReadOnly or faHidden or faSysFile); Result:= SetFileAttributesW(PWideChar(wFileName), iAttr) = True; end; {$ELSE} var StatInfo: BaseUnix.Stat; mode: TMode; begin if fpStat(UTF8ToSys(FileName), StatInfo) <> 0 then Exit(False); mode := SetModeReadOnly(StatInfo.st_mode, ReadOnly); Result:= fpchmod(UTF8ToSys(FileName), mode) = 0; end; {$ENDIF} function mbDeleteFile(const FileName: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= Windows.DeleteFileW(PWideChar(UTF16LongName(FileName))); if not Result then Result:= (GetLastError = ERROR_FILE_NOT_FOUND); end; {$ELSE} begin Result:= fpUnLink(UTF8ToSys(FileName)) = 0; if not Result then Result:= (fpgetErrNo = ESysENOENT); end; {$ENDIF} function mbRenameFile(const OldName: String; NewName: String): Boolean; {$IFDEF MSWINDOWS} var wTmpName, wOldName, wNewName: UnicodeString; begin wNewName:= UTF16LongName(NewName); wOldName:= UTF16LongName(OldName); // Workaround: Windows >= 10 can't change only filename case on the FAT if (Win32MajorVersion >= 10) and UnicodeSameText(wOldName, wNewName) then begin wTmpName:= GetFileSystemType(OldName); if UnicodeSameText('FAT32', wTmpName) or UnicodeSameText('exFAT', wTmpName) then begin wTmpName:= UTF16LongName(GetTempName(OldName)); Result:= MoveFileExW(PWChar(wOldName), PWChar(wTmpName), 0); if Result then begin Result:= MoveFileExW(PWChar(wTmpName), PWChar(wNewName), 0); if not Result then MoveFileExW(PWChar(wTmpName), PWChar(wOldName), 0); end; Exit; end; end; Result:= MoveFileExW(PWChar(wOldName), PWChar(wNewName), MOVEFILE_REPLACE_EXISTING); end; {$ELSE} var tmpFileName: String; OldFileStat, NewFileStat: stat; begin if GetPathType(NewName) <> ptAbsolute then NewName := ExtractFilePath(OldName) + NewName; if OldName = NewName then Exit(True); if fpLstat(UTF8ToSys(OldName), OldFileStat) <> 0 then Exit(False); // Check if target file exists. if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // Check if source and target are the same files (same inode and same device). if (OldFileStat.st_ino = NewFileStat.st_ino) and (OldFileStat.st_dev = NewFileStat.st_dev) then begin // Check number of links. // If it is 1 then source and target names most probably differ only // by case on a case-insensitive filesystem. Direct rename() in such case // fails on Linux, so we use a temporary file name and rename in two stages. // If number of links is more than 1 then it's enough to simply unlink // the source file, since both files are technically identical. // (On Linux rename() returns success but doesn't do anything // if renaming a file to its hard link.) // We cannot use st_nlink for directories because it means "number of // subdirectories" ("number of all entries" under macOS) in that directory, // plus its special entries '.' and '..'; // hard links to directories are not supported on Linux // or Windows anyway (on macOS they are). Therefore we always treat // directories as if they were a single link and rename them using temporary name. if (NewFileStat.st_nlink = 1) or BaseUnix.fpS_ISDIR(NewFileStat.st_mode) then begin tmpFileName := GetTempName(OldName); if FpRename(UTF8ToSys(OldName), UTF8ToSys(tmpFileName)) = 0 then begin if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // We have renamed the old file but the new file name still exists, // so this wasn't a single file on a case-insensitive filesystem // accessible by two names that differ by case. FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. Result := False; end else if FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(NewName)) = 0 then begin Result := True; end else begin FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. Result := False; end; end else Result := False; end else begin // Multiple links - simply unlink the source file. Result := (fpUnLink(UTF8ToSys(OldName)) = 0); end; Exit; end; end; Result := FpRename(UTF8ToSys(OldName), UTF8ToSys(NewName)) = 0; end; {$ENDIF} function mbFileSize(const FileName: String): Int64; {$IFDEF MSWINDOWS} var Handle: System.THandle; FindData: TWin32FindDataW; begin Result:= 0; Handle := FindFirstFileW(PWideChar(UTF16LongName(FileName)), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then begin Int64Rec(Result).Lo:= FindData.nFileSizeLow; Int64Rec(Result).Hi:= FindData.nFileSizeHigh; end; end; end; {$ELSE} var Info: BaseUnix.Stat; begin Result:= 0; if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result:= Info.st_size; end; {$ENDIF} function FileGetSize(Handle: System.THandle): Int64; {$IFDEF MSWINDOWS} begin Int64Rec(Result).Lo := GetFileSize(Handle, @Int64Rec(Result).Hi); end; {$ELSE} var Info: BaseUnix.Stat; begin if fpFStat(Handle, Info) < 0 then Result := -1 else Result := Info.st_size; end; {$ENDIF} function FileFlush(Handle: System.THandle): Boolean; inline; {$IFDEF MSWINDOWS} begin Result:= FlushFileBuffers(Handle); end; {$ELSE} begin Result:= (fpfsync(Handle) = 0); end; {$ENDIF} function FileFlushData(Handle: System.THandle): Boolean; inline; {$IF DEFINED(LINUX)} begin Result:= (fpFDataSync(Handle) = 0); end; {$ELSE} begin Result:= FileFlush(Handle); end; {$ENDIF} function FileIsReadOnlyEx(Handle: System.THandle): Boolean; {$IF DEFINED(MSWINDOWS)} var Info: BY_HANDLE_FILE_INFORMATION; begin if GetFileInformationByHandle(Handle, Info) then Result:= (Info.dwFileAttributes and (faReadOnly or faHidden or faSysFile) <> 0) else Result:= False; end; {$ELSEIF DEFINED(LINUX)} var Flags: UInt32; begin if FileGetFlags(Handle, Flags) then begin if (Flags and (FS_IMMUTABLE_FL or FS_APPEND_FL) <> 0) then Exit(True); end; Result:= False; end; {$ELSE} begin Result:= False; end; {$ENDIF} function FileAllocate(Handle: System.THandle; Size: Int64): Boolean; {$IF DEFINED(LINUX)} var Ret: cint; Sta: TStat; StaFS: TStatFS; begin if (Size > 0) then begin repeat Ret:= fpfStatFS(Handle, @StaFS); until (Ret <> -1) or (fpgeterrno <> ESysEINTR); // FAT32 does not support a fast allocation if (StaFS.fstype = MSDOS_SUPER_MAGIC) then Exit(False); repeat Ret:= fpFStat(Handle, Sta); until (Ret <> -1) or (fpgeterrno <> ESysEINTR); if (Ret = 0) and (Sta.st_size < Size) then begin // New size should be aligned to block size Sta.st_size:= (Size + Sta.st_blksize - 1) and not (Sta.st_blksize - 1); repeat Ret:= fpFAllocate(Handle, 0, 0, Sta.st_size); until (Ret <> -1) or (fpgeterrno <> ESysEINTR); end; end; Result:= FileTruncate(Handle, Size); end; {$ELSE} begin Result:= FileTruncate(Handle, Size); end; {$ENDIF} function mbGetCurrentDir: String; {$IFDEF MSWINDOWS} var dwSize: DWORD; wsDir: UnicodeString; begin if Length(CurrentDirectory) > 0 then Result:= CurrentDirectory else begin dwSize:= GetCurrentDirectoryW(0, nil); if dwSize = 0 then Result:= EmptyStr else begin SetLength(wsDir, dwSize + 1); SetLength(wsDir, GetCurrentDirectoryW(dwSize, PWideChar(wsDir))); Result:= UTF16ToUTF8(wsDir); end; end; end; {$ELSE} begin GetDir(0, Result); Result := SysToUTF8(Result); end; {$ENDIF} function mbSetCurrentDir(const NewDir: String): Boolean; {$IFDEF MSWINDOWS} var Handle: THandle; wsNewDir: UnicodeString; FindData: TWin32FindDataW; begin if (Pos('\\', NewDir) = 1) then Result:= True else begin wsNewDir:= UTF16LongName(IncludeTrailingBackslash(NewDir)) + '*'; Handle:= FindFirstFileW(PWideChar(wsNewDir), FindData); Result:= (Handle <> INVALID_HANDLE_VALUE) or (GetLastError = ERROR_FILE_NOT_FOUND); if (Handle <> INVALID_HANDLE_VALUE) then FindClose(Handle); end; if Result then CurrentDirectory:= NewDir; end; {$ELSE} begin Result:= fpChDir(UTF8ToSys(NewDir)) = 0; end; {$ENDIF} function mbDirectoryExists(const Directory: String) : Boolean; {$IFDEF MSWINDOWS} var Attr: DWORD; begin Attr:= GetFileAttributesW(PWideChar(UTF16LongName(Directory))); if Attr <> DWORD(-1) then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) > 0 else Result:= False; end; {$ELSE} var Info: BaseUnix.Stat; begin // We can use fpStat here instead of fpLstat, so that True is returned // when target is a directory or a link to an existing directory. // Note that same behaviour would be achieved by passing paths // that end with path delimiter to fpLstat. // Paths with links can be used the same way as if they were real directories. if fpStat(UTF8ToSys(Directory), Info) >= 0 then Result:= fpS_ISDIR(Info.st_mode) else Result:= False; end; {$ENDIF} function mbCreateDir(const NewDir: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= CreateDirectoryW(PWideChar(UTF16LongName(NewDir)), nil); end; {$ELSE} begin Result:= fpMkDir(UTF8ToSys(NewDir), $1FF) = 0; // $1FF = &0777 end; {$ENDIF} function mbRemoveDir(const Dir: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= RemoveDirectoryW(PWideChar(UTF16LongName(Dir))); if not Result then Result:= (GetLastError = ERROR_FILE_NOT_FOUND); end; {$ELSE} begin Result:= fpRmDir(UTF8ToSys(Dir)) = 0; if not Result then Result:= (fpgetErrNo = ESysENOENT); end; {$ENDIF} function mbFileSystemEntryExists(const Path: String): Boolean; begin Result := mbFileGetAttr(Path) <> faInvalidAttributes; end; function mbCompareFileNames(const FileName1, FileName2: String): Boolean; inline; {$IF DEFINED(WINDOWS) OR DEFINED(DARWIN)} begin Result:= (UnicodeCompareText(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0); end; {$ELSE} begin Result:= (UnicodeCompareStr(CeUtf8ToUtf16(FileName1), CeUtf8ToUtf16(FileName2)) = 0); end; {$ENDIF} function mbFileSame(const FileName1, FileName2: String): Boolean; {$IF DEFINED(MSWINDOWS)} var Device1, Device2: TStringArray; FileHandle1, FileHandle2: System.THandle; FileInfo1, FileInfo2: BY_HANDLE_FILE_INFORMATION; begin Result := mbCompareFileNames(FileName1, FileName2); if not Result then begin FileHandle1 := CreateFileW(PWideChar(UTF16LongName(FileName1)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); if FileHandle1 <> INVALID_HANDLE_VALUE then begin FileHandle2 := CreateFileW(PWideChar(UTF16LongName(FileName2)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); if FileHandle2 <> INVALID_HANDLE_VALUE then begin if GetFileInformationByHandle(FileHandle1, FileInfo1) and GetFileInformationByHandle(FileHandle2, FileInfo2) then begin // Check if both files have the same index on the same volume. // This check is valid only while both files are open. Result := (FileInfo1.dwVolumeSerialNumber = FileInfo2.dwVolumeSerialNumber) and (FileInfo1.nFileIndexHigh = FileInfo2.nFileIndexHigh) and (FileInfo1.nFileIndexLow = FileInfo2.nFileIndexLow); // Check that both files on the same physical drive (bug 0001774) if Result then begin Device1:= AnsiString(GetFinalPathNameByHandle(FileHandle1)).Split([PathDelim]); Device2:= AnsiString(GetFinalPathNameByHandle(FileHandle2)).Split([PathDelim]); Result:= (Length(Device1) > 2) and (Length(Device2) > 2) and (Device1[2] = Device2[2]); end; end; CloseHandle(FileHandle2); end; CloseHandle(FileHandle1); end end; end; {$ELSEIF DEFINED(UNIX)} var File1Stat, File2Stat: stat; begin Result := mbCompareFileNames(FileName1, FileName2) or ( (fpLstat(UTF8ToSys(FileName1), File1Stat) = 0) and (fpLstat(UTF8ToSys(FileName2), File2Stat) = 0) and (File1Stat.st_ino = File2Stat.st_ino) and (File1Stat.st_dev = File2Stat.st_dev) ); end; {$ENDIF} function mbFileSameVolume(const FileName1, FileName2: String): Boolean; {$IF DEFINED(MSWINDOWS)} var lpszVolumePathName1: array[0..maxSmallint] of WideChar; lpszVolumePathName2: array[0..maxSmallint] of WideChar; begin Result:= GetVolumePathNameW(PWideChar(UTF16LongName(FileName1)), PWideChar(lpszVolumePathName1), maxSmallint) and GetVolumePathNameW(PWideChar(UTF16LongName(FileName2)), PWideChar(lpszVolumePathName2), maxSmallint) and WideSameText(ExtractFileDrive(lpszVolumePathName1), ExtractFileDrive(lpszVolumePathName2)); end; {$ELSE} var Stat1, Stat2: Stat; begin Result:= (fpLStat(UTF8ToSys(FileName1), Stat1) = 0) and (fpLStat(UTF8ToSys(FileName2), Stat2) = 0) and (Stat1.st_dev = Stat2.st_dev); end; {$ENDIF} function mbGetEnvironmentString(Index: Integer): String; {$IFDEF MSWINDOWS} var hp, p: PWideChar; begin Result:= ''; p:= GetEnvironmentStringsW; hp:= p; if (hp <> nil) then begin while (hp^ <> #0) and (Index > 1) do begin Dec(Index); hp:= hp + lstrlenW(hp) + 1; end; if (hp^ <> #0) then Result:= UTF16ToUTF8(UnicodeString(hp)); end; FreeEnvironmentStringsW(p); end; {$ELSE} begin Result:= SysToUTF8(GetEnvironmentString(Index)); end; {$ENDIF} function mbExpandEnvironmentStrings(const FileName: String): String; {$IF DEFINED(MSWINDOWS)} var dwSize: DWORD; wsResult: UnicodeString; begin SetLength(wsResult, MaxSmallInt + 1); dwSize:= ExpandEnvironmentStringsW(PWideChar(CeUtf8ToUtf16(FileName)), PWideChar(wsResult), MaxSmallInt); if (dwSize = 0) or (dwSize > MaxSmallInt) then Result:= FileName else begin SetLength(wsResult, dwSize - 1); Result:= UTF16ToUTF8(wsResult); end; end; {$ELSE} var Index: Integer = 1; EnvCnt, EqualPos: Integer; EnvVar, EnvName, EnvValue: String; begin Result:= FileName; EnvCnt:= GetEnvironmentVariableCount; while (Index <= EnvCnt) and (Pos('$', Result) > 0) do begin EnvVar:= mbGetEnvironmentString(Index); EqualPos:= Pos('=', EnvVar); if EqualPos = 0 then Continue; EnvName:= Copy(EnvVar, 1, EqualPos - 1); EnvValue:= Copy(EnvVar, EqualPos + 1, MaxInt); Result:= StringReplace(Result, '$' + EnvName, EnvValue, [rfReplaceAll]); Inc(Index); end; end; {$ENDIF} function mbGetEnvironmentVariable(const sName: String): String; {$IFDEF MSWINDOWS} var wsName: UnicodeString; smallBuf: array[0..1023] of WideChar; largeBuf: PWideChar; dwResult: DWORD; begin Result := EmptyStr; wsName := CeUtf8ToUtf16(sName); dwResult := GetEnvironmentVariableW(PWideChar(wsName), @smallBuf[0], Length(smallBuf)); if dwResult > Length(smallBuf) then begin // Buffer not large enough. largeBuf := GetMem(SizeOf(WideChar) * dwResult); if Assigned(largeBuf) then try dwResult := GetEnvironmentVariableW(PWideChar(wsName), largeBuf, dwResult); if dwResult > 0 then Result := UTF16ToUTF8(UnicodeString(largeBuf)); finally FreeMem(largeBuf); end; end else if dwResult > 0 then Result := UTF16ToUTF8(UnicodeString(smallBuf)); end; {$ELSE} begin Result:= CeSysToUtf8(getenv(PAnsiChar(CeUtf8ToSys(sName)))); end; {$ENDIF} function mbSetEnvironmentVariable(const sName, sValue: String): Boolean; {$IFDEF MSWINDOWS} var wsName, wsValue: UnicodeString; begin wsName:= CeUtf8ToUtf16(sName); wsValue:= CeUtf8ToUtf16(sValue); Result:= SetEnvironmentVariableW(PWideChar(wsName), PWideChar(wsValue)); end; {$ELSE} begin Result:= (setenv(PAnsiChar(CeUtf8ToSys(sName)), PAnsiChar(CeUtf8ToSys(sValue)), 1) = 0); end; {$ENDIF} function mbUnsetEnvironmentVariable(const sName: String): Boolean; {$IFDEF MSWINDOWS} var wsName: UnicodeString; begin wsName:= CeUtf8ToUtf16(sName); Result:= SetEnvironmentVariableW(PWideChar(wsName), NIL); end; {$ELSE} begin Result:= (unsetenv(PAnsiChar(CeUtf8ToSys(sName))) = 0); end; {$ENDIF} function mbSysErrorMessage: String; begin Result := mbSysErrorMessage(GetLastOSError); end; function mbSysErrorMessage(ErrorCode: Integer): String; begin Result := SysErrorMessage(ErrorCode); {$IF (FPC_FULLVERSION < 30004)} Result := CeSysToUtf8(Result); {$ENDIF} end; function mbGetModuleName(Address: Pointer): String; const Dummy: Boolean = False; {$IFDEF UNIX} var dlinfo: dl_info; begin if Address = nil then Address:= @Dummy; FillChar({%H-}dlinfo, SizeOf(dlinfo), #0); if dladdr(Address, @dlinfo) = 0 then Result:= EmptyStr else begin Result:= CeSysToUtf8(dlinfo.dli_fname); end; end; {$ELSE} var ModuleName: UnicodeString; lpBuffer: TMemoryBasicInformation; begin if Address = nil then Address:= @Dummy; if VirtualQuery(Address, @lpBuffer, SizeOf(lpBuffer)) <> SizeOf(lpBuffer) then Result:= EmptyStr else begin SetLength(ModuleName, MAX_PATH + 1); SetLength(ModuleName, GetModuleFileNameW({%H-}THandle(lpBuffer.AllocationBase), PWideChar(ModuleName), MAX_PATH)); Result:= UTF16ToUTF8(ModuleName); end; end; {$ENDIF} function mbLoadLibrary(const Name: String): TLibHandle; {$IFDEF MSWINDOWS} var dwMode: DWORD; dwErrCode: DWORD; sRememberPath: String; begin dwMode:= SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOOPENFILEERRORBOX); try // Some plugins using DLL(s) in their directory are loaded correctly only if "CurrentDir" is poining their location. // Also, TC switch "CurrentDir" to their directory when loading them. So let's do the same. sRememberPath:= GetCurrentDir; SetCurrentDir(ExtractFileDir(Name)); Result:= SafeLoadLibrary(CeUtf8ToUtf16(Name)); dwErrCode:= GetLastError; finally SetErrorMode(dwMode); SetCurrentDir(sRememberPath); SetLastError(dwErrCode); end; end; {$ELSE} begin Result:= SafeLoadLibrary(CeUtf8ToSys(Name)); end; {$ENDIF} function mbLoadLibraryEx(const Name: String): TLibHandle; {$IF DEFINED(MSWINDOWS)} const PATH_ENV = 'PATH'; var dwFlags:DWORD; APath: String; APathType: TPathType; usName: UnicodeString; begin usName:= CeUtf8ToUtf16(Name); APathType:= GetPathType(Name); if CheckWin32Version(10) or (GetProcAddress(GetModuleHandleW(Kernel32), 'AddDllDirectory') <> nil) then begin if APathType <> ptAbsolute then dwFlags:= 0 else begin dwFlags:= LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR; end; Result:= LoadLibraryExW(PWideChar(usName), 0, dwFlags or LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); end else begin APath:= mbGetEnvironmentVariable(PATH_ENV); try if APathType <> ptAbsolute then SetDllDirectoryW(PWideChar('')) else begin SetDllDirectoryW(PWideChar(ExtractFileDir(usName))); end; try SetEnvironmentVariableW(PATH_ENV, nil); Result:= LoadLibraryW(PWideChar(usName)); finally SetDllDirectoryW(nil); end; finally mbSetEnvironmentVariable(PATH_ENV, APath); end; end; end; {$ELSE} begin Result:= SafeLoadLibrary(CeUtf8ToSys(Name)); end; {$ENDIF} function SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer; begin Result:= GetProcedureAddress(Lib, ProcName); if (Result = nil) then raise Exception.Create(ProcName); end; function mbReadAllLinks(const PathToLink: String) : String; var Attrs: TFileAttrs; LinkTargets: TStringList; // A list of encountered filenames (for detecting cycles) function mbReadAllLinksRec(const PathToLink: String): String; begin Result := ReadSymLink(PathToLink); if Result <> '' then begin if GetPathType(Result) <> ptAbsolute then Result := GetAbsoluteFileName(ExtractFilePath(PathToLink), Result); if LinkTargets.IndexOf(Result) >= 0 then begin // Link already encountered - links form a cycle. Result := ''; {$IFDEF UNIX} fpseterrno(ESysELOOP); {$ENDIF} Exit; end; Attrs := mbFileGetAttr(Result); if (Attrs <> faInvalidAttributes) then begin if FPS_ISLNK(Attrs) then begin // Points to a link - read recursively. LinkTargets.Add(Result); Result := mbReadAllLinksRec(Result); end; // else points to a file/dir end else begin Result := ''; // Target of link doesn't exist {$IFDEF UNIX} fpseterrno(ESysENOENT); {$ENDIF} end; end; end; begin LinkTargets := TStringList.Create; try Result := mbReadAllLinksRec(PathToLink); finally FreeAndNil(LinkTargets); end; end; function mbCheckReadLinks(const PathToLink : String): String; var Attrs: TFileAttrs; begin Attrs := mbFileGetAttr(PathToLink); if (Attrs <> faInvalidAttributes) and FPS_ISLNK(Attrs) then Result := mbReadAllLinks(PathToLink) else Result := PathToLink; end; function mbFileGetAttrNoLinks(const FileName: String): TFileAttrs; {$IFDEF UNIX} var Info: BaseUnix.Stat; begin if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result := Info.st_mode else Result := faInvalidAttributes; end; {$ELSE} var LinkTarget: String; begin LinkTarget := mbReadAllLinks(FileName); if LinkTarget <> '' then Result := mbFileGetAttr(LinkTarget) else Result := faInvalidAttributes; end; {$ENDIF} function CreateHardLink(const Path, LinkName: String) : Boolean; {$IFDEF MSWINDOWS} var wsPath, wsLinkName: UnicodeString; begin wsPath:= UTF16LongName(Path); wsLinkName:= UTF16LongName(LinkName); Result:= DCNtfsLinks.CreateHardlink(wsPath, wsLinkName); end; {$ELSE} begin Result := (fplink(PAnsiChar(CeUtf8ToSys(Path)),PAnsiChar(CeUtf8ToSys(LinkName)))=0); end; {$ENDIF} function CreateSymLink(const Path, LinkName: string; Attr: UInt32): Boolean; {$IFDEF MSWINDOWS} var wsPath, wsLinkName: UnicodeString; begin wsPath:= CeUtf8ToUtf16(Path); wsLinkName:= UTF16LongName(LinkName); Result:= DCNtfsLinks.CreateSymlink(wsPath, wsLinkName, Attr); end; {$ELSE} begin Result := (fpsymlink(PAnsiChar(CeUtf8ToSys(Path)), PAnsiChar(CeUtf8ToSys(LinkName)))=0); end; {$ENDIF} function ReadSymLink(const LinkName : String) : String; {$IFDEF MSWINDOWS} var wsLinkName, wsTarget: UnicodeString; begin wsLinkName:= UTF16LongName(LinkName); if DCNtfsLinks.ReadSymLink(wsLinkName, wsTarget) then Result := UTF16ToUTF8(wsTarget) else Result := EmptyStr; end; {$ELSE} begin Result := SysToUTF8(fpReadlink(UTF8ToSys(LinkName))); end; {$ENDIF} procedure SetLastOSError(LastError: Integer); {$IFDEF MSWINDOWS} begin SetLastError(UInt32(LastError)); end; {$ELSE} begin fpseterrno(LastError); end; {$ENDIF} function GetTickCountEx: UInt64; begin {$IF DEFINED(MSWINDOWS)} if QueryPerformanceCounter(PLARGE_INTEGER(@Result)) then Result:= Result div PerformanceFrequency.QuadPart else {$ENDIF} begin Result:= SysUtils.GetTickCount64; end; end; {$IFDEF MSWINDOWS} initialization if QueryPerformanceFrequency(@PerformanceFrequency) then PerformanceFrequency.QuadPart := PerformanceFrequency.QuadPart div 1000; {$ENDIF} end. doublecmd-1.1.30/components/doublecmd/dcntfslinks.pas0000644000175000001440000004112415104114162021741 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains functions to work with hard and symbolic links on the NTFS file system. Copyright (C) 2012-2025 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 library. If not, see . } unit DCNtfsLinks; {$mode delphi} interface uses Windows, SysUtils; const // CreateSymbolicLink flags SYMBOLIC_LINK_FLAG_FILE = 0; SYMBOLIC_LINK_FLAG_DIRECTORY = 1; // CreateFile flags FILE_FLAG_OPEN_REPARSE_POINT = $00200000; // DeviceIoControl control codes FSCTL_SET_REPARSE_POINT = $000900A4; FSCTL_GET_REPARSE_POINT = $000900A8; FSCTL_DELETE_REPARSE_POINT = $000900AC; // WSL and Cygwin symbolic link IO_REPARSE_TAG_LX_SYMLINK = $A000001D; const REPARSE_DATA_HEADER_SIZE = 8; MOUNT_POINT_HEADER_SIZE = 8; FILE_DOES_NOT_EXIST = DWORD(-1); wsLongFileNamePrefix = UnicodeString('\\?\'); wsNativeFileNamePrefix = UnicodeString('\??\'); wsNetworkFileNamePrefix = UnicodeString('\??\UNC\'); type {$packrecords c} TSymbolicLinkReparseBuffer = record SubstituteNameOffset: USHORT; SubstituteNameLength: USHORT; PrintNameOffset: USHORT; PrintNameLength: USHORT; Flags: ULONG; PathBuffer: array[0..0] of WCHAR; end; TMountPointReparseBuffer = record SubstituteNameOffset: USHORT; SubstituteNameLength: USHORT; PrintNameOffset: USHORT; PrintNameLength: USHORT; PathBuffer: array[0..0] of WCHAR; end; TLxSymlinkReparseBuffer = record FileType: DWORD; PathBuffer: array[0..0] of AnsiChar; end; TGenericReparseBuffer = record DataBuffer: array[0..0] of UCHAR; end; REPARSE_DATA_BUFFER = record ReparseTag: ULONG; ReparseDataLength: USHORT; Reserved: USHORT; case Integer of 0: (SymbolicLinkReparseBuffer: TSymbolicLinkReparseBuffer); 1: (MountPointReparseBuffer: TMountPointReparseBuffer); 2: (LxSymlinkReparseBuffer: TLxSymlinkReparseBuffer); 3: (GenericReparseBuffer: TGenericReparseBuffer); end; TReparseDataBuffer = REPARSE_DATA_BUFFER; PReparseDataBuffer = ^REPARSE_DATA_BUFFER; {$packrecords default} {en Creates a symbolic link. This function is only supported on the NTFS file system. On Windows 2000/XP it works for directories only On Windows Vista/Seven it works for directories and files (for files it works only with Administrator rights) @param(AFileName The name of the existing file) @param(ALinkName The name of the symbolic link) @returns(The function returns @true if successful, @false otherwise) } function CreateSymLink(const ATargetName, ALinkName: UnicodeString; Attr: UInt32): Boolean; {en Established a hard link beetwen an existing file and new file. This function is only supported on the NTFS file system, and only for files, not directories. @param(AFileName The name of the existing file) @param(ALinkName The name of the new hard link) @returns(The function returns @true if successful, @false otherwise) } function CreateHardLink(const AFileName, ALinkName: UnicodeString): Boolean; {en Reads a symbolic link target. This function is only supported on the NTFS file system. @param(aSymlinkFileName The name of the symbolic link) @param(aTargetFileName The name of the target file/directory) @returns(The function returns @true if successful, @false otherwise) } function ReadSymLink(const aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean; implementation const ERROR_DIRECTORY_NOT_SUPPORTED = 336; type TCreateSymbolicLinkW = function( pwcSymlinkFileName, pwcTargetFileName: PWideChar; dwFlags: DWORD): BOOL; stdcall; TCreateHardLinkW = function ( lpFileName, lpExistingFileName: LPCWSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall; var HasNewApi: Boolean = False; MayCreateSymLink: Boolean = False; CreateHardLinkW: TCreateHardLinkW = nil; CreateSymbolicLinkW: TCreateSymbolicLinkW = nil; function _CreateHardLink_New(AFileName : UnicodeString; ALinkName: UnicodeString): Boolean; begin if Assigned(CreateHardLinkW) then Result:= CreateHardLinkW(PWideChar(ALinkName), PWideChar(AFileName), nil) else begin Result:= False; SetLastError(ERROR_NOT_SUPPORTED); end; end; function _CreateHardLink_Old(aExistingFileName, aFileName: UnicodeString): Boolean; var hFile: THandle; lpBuffer: TWin32StreamId; wcFileName: array[0..MAX_PATH] of WideChar; dwNumberOfBytesWritten: DWORD = 0; lpContext: LPVOID = nil; lpFilePart: LPWSTR = nil; begin Result:= GetFullPathNameW(PWideChar(aFileName), MAX_PATH, wcFileName, lpFilePart) > 0; if Result then begin hFile:= CreateFileW(PWideChar(aExistingFileName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); Result:= (hFile <> INVALID_HANDLE_VALUE); end; if Result then try ZeroMemory(@lpBuffer, SizeOf(TWin32StreamId)); with lpBuffer do begin dwStreamId:= BACKUP_LINK; Size.LowPart:= (Length(aFileName) + 1) * SizeOf(WideChar); end; // Write stream header Result:= BackupWrite(hFile, @lpBuffer, SizeOf(TWin32StreamId) - SizeOf(PWideChar), dwNumberOfBytesWritten, False, False, lpContext); if not Result then Exit; // Write file name buffer Result:= BackupWrite(hFile, @wcFileName, lpBuffer.Size.LowPart, dwNumberOfBytesWritten, False, False, lpContext); if not Result then Exit; // Finish write operation Result:= BackupWrite(hFile, nil, 0, dwNumberOfBytesWritten, True, False, lpContext); finally CloseHandle(hFile); end; end; function CreateHardLink(const AFileName, ALinkName: UnicodeString): Boolean; var dwAttributes: DWORD; begin dwAttributes := Windows.GetFileAttributesW(PWideChar(AFileName)); if dwAttributes = FILE_DOES_NOT_EXIST then Exit(False); if (dwAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then begin SetLastError(ERROR_DIRECTORY_NOT_SUPPORTED); Exit(False); end; dwAttributes := Windows.GetFileAttributesW(PWideChar(ALinkName)); if dwAttributes <> FILE_DOES_NOT_EXIST then begin SetLastError(ERROR_FILE_EXISTS); Exit(False); end; if HasNewApi then Result:= _CreateHardLink_New(AFileName, ALinkName) else Result:= _CreateHardLink_Old(AFileName, ALinkName) end; function _CreateSymLink_New(const ATargetFileName, ASymlinkFileName: UnicodeString; dwFlags: DWORD): Boolean; begin if not Assigned(CreateSymbolicLinkW) then begin Result:= False; SetLastError(ERROR_NOT_SUPPORTED); end // CreateSymbolicLinkW under Windows 10 1903 does not return error if user doesn't have // SeCreateSymbolicLinkPrivilege, so we make manual check and return error in this case else begin if MayCreateSymLink then Result:= CreateSymbolicLinkW(PWideChar(ASymlinkFileName), PWideChar(ATargetFileName), dwFlags) else begin Result:= False; SetLastError(ERROR_PRIVILEGE_NOT_HELD); end end; end; function _CreateSymLink_Old(aTargetFileName, aSymlinkFileName: UnicodeString): Boolean; var hDevice: THandle; lpInBuffer: PReparseDataBuffer; dwLastError, nInBufferSize, dwPathBufferSize: DWORD; wsNativeFileName: UnicodeString; lpBytesReturned: DWORD = 0; begin Result:= CreateDirectoryW(PWideChar(aSymlinkFileName), nil); if Result then try hDevice:= CreateFileW(PWideChar(aSymlinkFileName), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OPEN_REPARSE_POINT, 0); if hDevice = INVALID_HANDLE_VALUE then begin dwLastError:= GetLastError; Exit(False); end; if Pos(wsLongFileNamePrefix, aTargetFileName) <> 1 then wsNativeFileName:= wsNativeFileNamePrefix + aTargetFileName else begin wsNativeFileName:= wsNativeFileNamePrefix + Copy(aTargetFileName, 5, MaxInt); end; // File name length with trailing zero and zero for empty PrintName dwPathBufferSize:= Length(wsNativeFileName) * SizeOf(WideChar) + 4; nInBufferSize:= REPARSE_DATA_HEADER_SIZE + MOUNT_POINT_HEADER_SIZE + dwPathBufferSize; lpInBuffer:= GetMem(nInBufferSize); ZeroMemory(lpInBuffer, nInBufferSize); with lpInBuffer^, lpInBuffer^.MountPointReparseBuffer do begin ReparseTag:= IO_REPARSE_TAG_MOUNT_POINT; ReparseDataLength:= MOUNT_POINT_HEADER_SIZE + dwPathBufferSize; SubstituteNameLength:= Length(wsNativeFileName) * SizeOf(WideChar); PrintNameOffset:= SubstituteNameOffset + SubstituteNameLength + SizeOf(WideChar); CopyMemory(@PathBuffer[0], @wsNativeFileName[1], SubstituteNameLength); end; Result:= DeviceIoControl(hDevice, // handle to file or directory FSCTL_SET_REPARSE_POINT, // dwIoControlCode lpInBuffer, // input buffer nInBufferSize, // size of input buffer nil, // lpOutBuffer 0, // nOutBufferSize lpBytesReturned, // lpBytesReturned nil); // OVERLAPPED structure if not Result then dwLastError:= GetLastError; FreeMem(lpInBuffer); CloseHandle(hDevice); finally if not Result then begin RemoveDirectoryW(PWideChar(aSymlinkFileName)); SetLastError(dwLastError); end; end; end; function CreateSymLink(const ATargetName, ALinkName: UnicodeString; Attr: UInt32): Boolean; var dwAttributes: DWORD; lpFilePart: LPWSTR = nil; AFileName, AFullPathName: UnicodeString; begin Result:= False; if (Length(ATargetName) > 1) and CharInSet(ATargetName[2], [':', '\']) then AFullPathName:= ATargetName else begin SetLength(AFullPathName, MaxSmallint); AFileName:= ExtractFilePath(ALinkName) + ATargetName; dwAttributes:= GetFullPathNameW(PWideChar(AFileName), MaxSmallint, PWideChar(AFullPathName), lpFilePart); if dwAttributes > 0 then SetLength(AFullPathName, dwAttributes) else begin AFullPathName:= ATargetName; end; end; if (Attr <> FILE_DOES_NOT_EXIST) then dwAttributes:= Attr else begin dwAttributes:= Windows.GetFileAttributesW(PWideChar(AFullPathName)); end; if dwAttributes = FILE_DOES_NOT_EXIST then Exit; if HasNewApi = False then begin if (dwAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then Result:= _CreateSymLink_Old(AFullPathName, ALinkName) else SetLastError(ERROR_NOT_SUPPORTED); end else begin if (dwAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then Result:= _CreateSymLink_New(ATargetName, ALinkName, SYMBOLIC_LINK_FLAG_FILE) else begin if (not MayCreateSymLink) and (Pos('\\', AFullPathName) = 0) then Result:= _CreateSymLink_Old(AFullPathName, ALinkName) else begin Result:= _CreateSymLink_New(ATargetName, ALinkName, SYMBOLIC_LINK_FLAG_DIRECTORY); end; end; end; end; function ReadSymLink(const aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean; var L: Integer; hDevice: THandle; dwFileAttributes: DWORD; caOutBuffer: array[0..MaxSmallint] of Byte; lpOutBuffer: TReparseDataBuffer absolute caOutBuffer; pwcTargetFileName: PWideChar; lpBytesReturned: DWORD = 0; dwFlagsAndAttributes: DWORD; begin dwFileAttributes:= GetFileAttributesW(PWideChar(aSymlinkFileName)); Result:= dwFileAttributes <> FILE_DOES_NOT_EXIST; if Result then begin if (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then dwFlagsAndAttributes:= FILE_FLAG_OPEN_REPARSE_POINT else dwFlagsAndAttributes:= FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OPEN_REPARSE_POINT; // Open reparse point hDevice:= CreateFileW(PWideChar(aSymlinkFileName), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, dwFlagsAndAttributes, 0); Result:= hDevice <> INVALID_HANDLE_VALUE; if not Result then Exit; Result:= DeviceIoControl(hDevice, // handle to file or directory FSCTL_GET_REPARSE_POINT, // dwIoControlCode nil, // input buffer 0, // size of input buffer @caOutBuffer, // lpOutBuffer SizeOf(caOutBuffer), // nOutBufferSize lpBytesReturned, // lpBytesReturned nil); // OVERLAPPED structure CloseHandle(hDevice); if Result then begin case lpOutBuffer.ReparseTag of IO_REPARSE_TAG_SYMLINK: with lpOutBuffer.SymbolicLinkReparseBuffer do begin pwcTargetFileName:= @PathBuffer[0]; pwcTargetFileName:= pwcTargetFileName + SubstituteNameOffset div SizeOf(WideChar); SetLength(aTargetFileName, SubstituteNameLength div SizeOf(WideChar)); CopyMemory(PWideChar(aTargetFileName), pwcTargetFileName, SubstituteNameLength); end; IO_REPARSE_TAG_MOUNT_POINT: with lpOutBuffer.MountPointReparseBuffer do begin pwcTargetFileName:= @PathBuffer[0]; pwcTargetFileName:= pwcTargetFileName + SubstituteNameOffset div SizeOf(WideChar); SetLength(aTargetFileName, SubstituteNameLength div SizeOf(WideChar)); CopyMemory(PWideChar(aTargetFileName), pwcTargetFileName, SubstituteNameLength); end; IO_REPARSE_TAG_LX_SYMLINK: with lpOutBuffer.LxSymlinkReparseBuffer do begin L:= lpOutBuffer.ReparseDataLength - SizeOf(FileType); SetLength(aTargetFileName, L + 1); SetLength(aTargetFileName, MultiByteToWideChar(CP_UTF8, 0, @PathBuffer[0], L, PWideChar(aTargetFileName), L + 1)); end; end; if Pos(wsNetworkFileNamePrefix, aTargetFileName) = 1 then Delete(aTargetFileName, 2, Length(wsNetworkFileNamePrefix) - 2) else if Pos(wsNativeFileNamePrefix, aTargetFileName) = 1 then Delete(aTargetFileName, 1, Length(wsNativeFileNamePrefix)); end; end; end; function MayCreateSymbolicLink: Boolean; const SE_CREATE_SYMBOLIC_LINK_NAME = 'SeCreateSymbolicLinkPrivilege'; var I: Integer; hProcess: HANDLE; dwLength: DWORD = 0; seCreateSymbolicLink: LUID = 0; TokenInformation: array [0..1023] of Byte; Privileges: TTokenPrivileges absolute TokenInformation; begin hProcess:= GetCurrentProcess(); if (OpenProcessToken(hProcess, TOKEN_READ, hProcess)) then try if (LookupPrivilegeValueW(nil, SE_CREATE_SYMBOLIC_LINK_NAME, seCreateSymbolicLink)) then begin if (GetTokenInformation(hProcess, TokenPrivileges, @Privileges, SizeOf(TokenInformation), dwLength)) then begin {$PUSH}{$R-} for I:= 0 to Int32(Privileges.PrivilegeCount) - 1 do begin if Privileges.Privileges[I].Luid = seCreateSymbolicLink then Exit(True); end; {$POP} end; end; finally CloseHandle(hProcess); end; Result:= False; end; procedure Initialize; var AHandle: HMODULE; begin MayCreateSymLink:= MayCreateSymbolicLink; HasNewApi:= (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6); if HasNewApi then begin AHandle:= GetModuleHandle('kernel32.dll'); CreateHardLinkW:= TCreateHardLinkW(GetProcAddress(AHandle, 'CreateHardLinkW')); CreateSymbolicLinkW:= TCreateSymbolicLinkW(GetProcAddress(AHandle, 'CreateSymbolicLinkW')); end; end; initialization Initialize; end. doublecmd-1.1.30/components/doublecmd/dclinuxmagic.inc0000644000175000001440000000521015104114162022050 0ustar alexxusers{ /usr/include/linux/magic.h } const ADFS_SUPER_MAGIC = $adf5; AFFS_SUPER_MAGIC = $adff; AFS_SUPER_MAGIC = $5346414F; AUTOFS_SUPER_MAGIC = $0187; CODA_SUPER_MAGIC = $73757245; { some random number } CRAMFS_MAGIC = $28cd3d45; { magic number with the wrong endianess } CRAMFS_MAGIC_WEND = $453dcd28; DEBUGFS_MAGIC = $64626720; SECURITYFS_MAGIC = $73636673; SELINUX_MAGIC = $f97cff8c; { "SMAC" } SMACK_MAGIC = $43415d53; { some random number } RAMFS_MAGIC = $858458f6; TMPFS_MAGIC = $01021994; { some random number } HUGETLBFS_MAGIC = $958458f6; SQUASHFS_MAGIC = $73717368; ECRYPTFS_SUPER_MAGIC = $f15f; EFS_SUPER_MAGIC = $414A53; EXT2_SUPER_MAGIC = $EF53; EXT3_SUPER_MAGIC = $EF53; XENFS_SUPER_MAGIC = $abba1974; EXT4_SUPER_MAGIC = $EF53; BTRFS_SUPER_MAGIC = $9123683E; NILFS_SUPER_MAGIC = $3434; F2FS_SUPER_MAGIC = $F2F52010; HPFS_SUPER_MAGIC = $f995e849; ISOFS_SUPER_MAGIC = $9660; JFFS2_SUPER_MAGIC = $72b6; PSTOREFS_MAGIC = $6165676C; EFIVARFS_MAGIC = $de5e81e4; HOSTFS_SUPER_MAGIC = $00c0ffee; OVERLAYFS_SUPER_MAGIC = $794c7630; { minix v1 fs, 14 char names } MINIX_SUPER_MAGIC = $137F; { minix v1 fs, 30 char names } MINIX_SUPER_MAGIC2 = $138F; { minix v2 fs, 14 char names } MINIX2_SUPER_MAGIC = $2468; { minix v2 fs, 30 char names } MINIX2_SUPER_MAGIC2 = $2478; { minix v3 fs, 60 char names } MINIX3_SUPER_MAGIC = $4d5a; { MD } MSDOS_SUPER_MAGIC = $4d44; { Guess, what 0x564c is :-) } NCP_SUPER_MAGIC = $564c; NFS_SUPER_MAGIC = $6969; OCFS2_SUPER_MAGIC = $7461636f; OPENPROM_SUPER_MAGIC = $9fa1; { qnx4 fs detection } QNX4_SUPER_MAGIC = $002f; { qnx6 fs detection } QNX6_SUPER_MAGIC = $68191122; AFS_FS_MAGIC = $6B414653; { used by gcc } REISERFS_SUPER_MAGIC = $52654973; SMB_SUPER_MAGIC = $517B; CGROUP_SUPER_MAGIC = $27e0eb; CGROUP2_SUPER_MAGIC = $63677270; RDTGROUP_SUPER_MAGIC = $7655821; STACK_END_MAGIC = $57AC6E9D; TRACEFS_MAGIC = $74726163; V9FS_MAGIC = $01021997; BDEVFS_MAGIC = $62646576; DAXFS_MAGIC = $64646178; BINFMTFS_MAGIC = $42494e4d; DEVPTS_SUPER_MAGIC = $1cd1; FUTEXFS_SUPER_MAGIC = $BAD1DEA; PIPEFS_MAGIC = $50495045; PROC_SUPER_MAGIC = $9fa0; SOCKFS_MAGIC = $534F434B; SYSFS_MAGIC = $62656572; USBDEVICE_SUPER_MAGIC = $9fa2; MTD_INODE_FS_MAGIC = $11307854; ANON_INODE_FS_MAGIC = $09041934; BTRFS_TEST_MAGIC = $73727279; NSFS_MAGIC = $6e736673; BPF_FS_MAGIC = $cafe4a11; AAFS_MAGIC = $5a3c69f0; { Since UDF 2.01 is ISO 13346 based... } UDF_SUPER_MAGIC = $15013346; BALLOON_KVM_MAGIC = $13661366; ZSMALLOC_MAGIC = $58295829; { manually added } SMB2_MAGIC_NUMBER = $fe534d42; CIFS_MAGIC_NUMBER = $ff534d42; doublecmd-1.1.30/components/doublecmd/dclinux.pas0000644000175000001440000001410415104114162021063 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains Linux specific functions Copyright (C) 2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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, see } unit DCLinux; {$mode objfpc}{$H+} {$packrecords c} interface uses Classes, SysUtils, BaseUnix, Unix; const CLOSE_RANGE_CLOEXEC = (1 << 2); const FS_IOC_GETFLAGS = $80086601; FS_IOC_SETFLAGS = $40086602; (* * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS) *) FS_SECRM_FL = $00000001; //* Secure deletion */ FS_UNRM_FL = $00000002; //* Undelete */ FS_COMPR_FL = $00000004; //* Compress file */ FS_SYNC_FL = $00000008; //* Synchronous updates */ FS_IMMUTABLE_FL = $00000010; //* Immutable file */ FS_APPEND_FL = $00000020; //* Writes to file may only append */ FS_NODUMP_FL = $00000040; //* Do not dump file */ FS_NOATIME_FL = $00000080; //* Do not update atime */ FS_FL_USER_VISIBLE = $0003DFFF; //* User visible flags */ FS_FL_USER_MODIFIABLE = $000380FF; //* User modifiable flags */ type TFlagName = record Flag: UInt32; Name: AnsiChar; end; const FlagsName: array[1..8] of TFlagName = ( (Flag: FS_SECRM_FL; Name: 's'), (Flag: FS_UNRM_FL; Name: 'u'), (Flag: FS_SYNC_FL; Name: 'S'), (Flag: FS_IMMUTABLE_FL; Name: 'i'), (Flag: FS_APPEND_FL; Name: 'a'), (Flag: FS_NODUMP_FL; Name: 'd'), (Flag: FS_NOATIME_FL; Name: 'A'), (Flag: FS_COMPR_FL; Name: 'c') ); function FormatFileFlags(Flags: UInt32): String; function FileGetFlags(Handle: THandle; out Flags: UInt32): Boolean; function mbFileGetFlags(const FileName: String; out Flags: UInt32): Boolean; function mbFileGetXattr(const FileName: String): TStringArray; function mbFileCopyXattr(const Source, Target: String): Boolean; implementation uses InitC, DCConvertEncoding, DCOSUtils; function lremovexattr(const path, name: PAnsiChar): cint; cdecl; external clib; function llistxattr(const path: PAnsiChar; list: PAnsiChar; size: csize_t): ssize_t; cdecl; external clib; function lgetxattr(const path, name: PAnsiChar; value: Pointer; size: csize_t): ssize_t; cdecl; external clib; function lsetxattr(const path, name: PAnsiChar; const value: Pointer; size: csize_t; flags: cint): cint; cdecl; external clib; function FormatFileFlags(Flags: UInt32): String; var Index: Integer; begin Result:=StringOfChar('-', Length(FlagsName)); for Index:= 1 to High(FlagsName) do begin if Flags and FlagsName[Index].Flag <> 0 then begin Result[Index]:= FlagsName[Index].Name; end; end; end; function FileGetFlags(Handle: THandle; out Flags: UInt32): Boolean; begin Result:= (FpIOCtl(Handle, FS_IOC_GETFLAGS, @Flags) >= 0); end; function mbFileGetFlags(const FileName: String; out Flags: UInt32): Boolean; var Handle: THandle; begin Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); Result:= Handle <> feInvalidHandle; if Result then begin Result:= (FpIOCtl(Handle, FS_IOC_GETFLAGS, @Flags) >= 0); FileClose(Handle); end; end; function mbFileGetXattr(const FileName: String): TStringArray; var AList: String; ALength: ssize_t; AFileName: String; begin SetLength(AList, MaxSmallint); Result:= Default(TStringArray); AFileName:= CeUtf8ToSys(FileName); ALength:= llistxattr(PAnsiChar(AFileName), Pointer(AList), Length(AList)); if (ALength < 0) then begin if (fpgetCerrno <> ESysERANGE) then begin fpseterrno(fpgetCerrno); Exit; end else begin ALength:= llistxattr(PAnsiChar(AFileName), nil, 0); if ALength < 0 then begin fpseterrno(fpgetCerrno); Exit; end; SetLength(AList, ALength); ALength:= llistxattr(PAnsiChar(AFileName), Pointer(AList), ALength); if ALength < 0 then begin fpseterrno(fpgetCerrno); Exit; end; end; end; if (ALength > 0) then begin SetLength(AList, ALength - 1); Result:= AList.Split(#0); end; end; function mbFileCopyXattr(const Source, Target: String): Boolean; var Value: String; Index: Integer; ALength: ssize_t; Names: TStringArray; ASource, ATarget: String; begin Result:= True; ASource:= CeUtf8ToSys(Source); ATarget:= CeUtf8ToSys(Target); // Remove attributes from target Names:= mbFileGetXattr(Target); for Index:= 0 to High(Names) do begin lremovexattr(PAnsiChar(ATarget), PAnsiChar(Names[Index])); end; SetLength(Value, MaxSmallint); Names:= mbFileGetXattr(Source); for Index:= 0 to High(Names) do begin ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), Pointer(Value), Length(Value)); if (ALength < 0) then begin if (fpgetCerrno <> ESysERANGE) then begin fpseterrno(fpgetCerrno); Exit(False); end else begin ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), nil, 0); if ALength < 0 then begin fpseterrno(fpgetCerrno); Exit(False); end; SetLength(Value, ALength); ALength:= lgetxattr(PAnsiChar(ASource), PAnsiChar(Names[Index]), Pointer(Value), Length(Value)); if ALength < 0 then begin fpseterrno(fpgetCerrno); Exit(False); end; end; end; if (lsetxattr(PAnsiChar(ATarget), PAnsiChar(Names[Index]), Pointer(Value), ALength, 0) < 0) then begin fpseterrno(fpgetCerrno); Exit(fpgeterrno = ESysEOPNOTSUPP); end; end; end; end. doublecmd-1.1.30/components/doublecmd/dcjsonconfig.pas0000644000175000001440000000222715104114162022066 0ustar alexxusersunit DCJsonConfig; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fpJson; type { TJsonConfig } TJsonConfig = class private FRoot: TJSONObject; public constructor Create; destructor Destroy; override; procedure SaveToFile(const FileName: String); procedure LoadFromFile(const FileName: String); property Root: TJSONObject read FRoot; end; implementation uses DCClassesUtf8; { TJsonConfig } constructor TJsonConfig.Create; begin FRoot:= TJSONObject.Create; end; destructor TJsonConfig.Destroy; begin inherited Destroy; FRoot.Free; end; procedure TJsonConfig.SaveToFile(const FileName: String); begin with TStringListEx.Create do try Text:= FRoot.FormatJSON([foDoNotQuoteMembers]); SaveToFile(FileName); finally Free; end; end; procedure TJsonConfig.LoadFromFile(const FileName: String); var AStream: TFileStreamEx; begin AStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try FreeAndNil(FRoot); FRoot:= GetJSON(AStream, True) as TJSONObject; finally AStream.Free; end; end; end. doublecmd-1.1.30/components/doublecmd/dchaiku.pas0000644000175000001440000001734315104114162021035 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains Haiku specific functions Copyright (C) 2022 Alexander Koblov (alexx2000@mail.ru) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. } unit DCHaiku; {$mode objfpc}{$H+} {$packrecords c} interface uses Classes, SysUtils, BaseUnix, Unix; // fcntl.h const O_NOTRAVERSE = $2000; // TypeConstants.h const B_STRING_TYPE = $43535452; // 'CSTR' // fs_attr.h type attr_info = record type_: cuint32; size: coff_t; end; Tattr_info = attr_info; Pattr_info = ^attr_info; function fs_remove_attr(fd: cint; attribute: PAnsiChar): cint; cdecl; external clib; function fs_stat_attr(fd: cint; attribute: pansichar; attrInfo: Pattr_info): cint; cdecl; external clib; function fs_open_attr(path: pansichar; attribute: pansichar; type_: cuint32; openMode: cint): cint; cdecl; external clib; function fs_fopen_attr(fd: cint; attribute: pansichar; type_: cuint32; openMode: cint): cint; cdecl; external clib; function fs_close_attr(fd: cint): cint; cdecl; external clib; function fs_open_attr_dir(path: pansichar): pDir; cdecl; external clib; function fs_lopen_attr_dir(path: pansichar): pDir; cdecl; external clib; function fs_fopen_attr_dir(fd: cint): pDir; cdecl; external clib; function fs_close_attr_dir(dir: pDir): cint; cdecl; external clib; function fs_read_attr_dir(dir: pDir): pDirent; cdecl; external clib; // OS.h const B_OS_NAME_LENGTH = 32; // StorageDefs.h const B_FILE_NAME_LENGTH = 256; // fs_info.h const B_FS_IS_READONLY = $00000001; B_FS_IS_REMOVABLE = $00000002; B_FS_IS_PERSISTENT = $00000004; B_FS_IS_SHARED = $00000008; type Tfs_info = record dev: dev_t; root: ino_t; flags: cuint32; block_size: coff_t; io_size: coff_t; total_blocks: coff_t; free_blocks: coff_t; total_nodes: coff_t; free_nodes: coff_t; device_name: array[0..127] of AnsiChar; volume_name: array[0..Pred(B_FILE_NAME_LENGTH)] of AnsiChar; fsh_name: array[0..Pred(B_OS_NAME_LENGTH)] of AnsiChar; end; Pfs_info = ^Tfs_info; function dev_for_path(path: PAnsiChar): dev_t; cdecl; external clib; function next_dev(pos: pcint32): dev_t; cdecl; external clib; function fs_stat_dev(dev: dev_t; info: Pfs_info): cint; cdecl; external clib; // FindDirectory.h const B_TRASH_DIRECTORY = 1; B_USER_DIRECTORY = 3000; B_USER_SETTINGS_DIRECTORY = 3006; B_USER_DATA_DIRECTORY = 3012; B_USER_CACHE_DIRECTORY = 3013; function find_directory(which: cuint32; volume: dev_t; createIt: cbool; pathString: PAnsiChar; length: cint32): status_t; cdecl; external clib; function mbFileCopyXattr(const Source, Target: String): Boolean; function mbFileWriteXattr(const FileName, AttrName, Value: String): Boolean; function mbFindDirectory(which: cuint32; volume: dev_t; createIt: cbool; out pathString: String): Boolean; implementation uses DCUnix, DCConvertEncoding; function mbFileOpen(const FileName: String; Flags: cInt): THandle; begin repeat Result:= fpOpen(FileName, Flags or O_CLOEXEC); until (Result <> -1) or (fpgeterrno <> ESysEINTR); end; function mbFileGetXattr(hFile: THandle): TStringArray; var DirPtr: pDir; PtrDirEnt: pDirent; Index: Integer = 0; begin Result:= Default(TStringArray); DirPtr:= fs_fopen_attr_dir(hFile); if Assigned(DirPtr) then try SetLength(Result, 512); PtrDirEnt:= fs_read_attr_dir(DirPtr); while PtrDirEnt <> nil do begin Result[Index]:= StrPas(PtrDirEnt^.d_name); Inc(Index); if (Index > High(Result)) then begin SetLength(Result, Length(Result) * 2); end; PtrDirEnt:= fs_read_attr_dir(DirPtr); end; finally fs_close_attr_dir(DirPtr); end; SetLength(Result, Index); end; function mbFileWriteXattr(const FileName, AttrName, Value: String): Boolean; var hAttr: cint; ALen: Integer; hTarget: THandle; begin hTarget:= mbFileOpen(FileName, O_RDWR or O_NOTRAVERSE); Result:= (hTarget <> feInvalidHandle); if Result then begin hAttr:= fs_fopen_attr(hTarget, PAnsiChar(AttrName), B_STRING_TYPE, O_CREAT or O_TRUNC or O_WRONLY); Result:= (hAttr <> feInvalidHandle); if Result then begin ALen:= Length(Value) + 1; Result:= (FileWrite(hAttr, PAnsiChar(Value)^, ALen) = ALen); fs_close_attr(hAttr); end; FileClose(hTarget); end; end; function mbFileCopyXattr(const Source, Target: String): Boolean; var AData: TBytes; Index: Integer; Names: TStringArray; AttrName: PAnsiChar; AttrInfo: Tattr_info; hSource, hTarget: THandle; function ReadAttr(hFile: cint; attribute: pansichar): Boolean; var hAttr: THandle; begin hAttr:= fs_fopen_attr(hFile, attribute, attrInfo.type_, O_RDONLY); Result:= (hAttr <> feInvalidHandle); if Result then begin Result:= (FileRead(hAttr, AData[0], attrInfo.size) = attrInfo.size); fs_close_attr(hAttr); end; end; function WriteAttr(hFile: cint; attribute: pansichar): Boolean; var hAttr: THandle; begin hAttr:= fs_fopen_attr(hFile, attribute, attrInfo.type_, O_CREAT or O_WRONLY); Result:= (hAttr <> feInvalidHandle); if Result then begin Result:= (FileWrite(hAttr, AData[0], attrInfo.size) = attrInfo.size); fs_close_attr(hAttr); end; end; begin hSource:= mbFileOpen(Source, O_RDONLY or O_NOTRAVERSE); Result:= (hSource <> feInvalidHandle); if Result then begin hTarget:= mbFileOpen(Target, O_RDWR or O_NOTRAVERSE); Result:= (hTarget <> feInvalidHandle); if Result then begin // Remove attributes from target Names:= mbFileGetXattr(hTarget); for Index:= 0 to High(Names) do begin fs_remove_attr(hTarget, PAnsiChar(Names[Index])); end; SetLength(AData, $FFFF); Names:= mbFileGetXattr(hSource); for Index:= 0 to High(Names) do begin AttrName:= PAnsiChar(Names[Index]); if (fs_stat_attr(hSource, AttrName, @AttrInfo) >= 0) then begin if (AttrInfo.size > Length(AData)) then begin SetLength(AData, AttrInfo.size); end; Result:= ReadAttr(hSource, AttrName); if Result then begin Result:= WriteAttr(hTarget, AttrName); if not Result then Break; end; end; end; FileClose(hTarget); end; FileClose(hSource); end; end; function mbFindDirectory(which: cuint32; volume: dev_t; createIt: cbool; out pathString: String): Boolean; var APath: array[0..MAX_PATH] of AnsiChar; begin Result:= find_directory(which, volume, createIt, APath, MAX_PATH) >= 0; if Result then begin pathString:= CeSysToUtf8(APath); end; end; end. doublecmd-1.1.30/components/doublecmd/dcfileattributes.pas0000644000175000001440000003310015104114162022747 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Functions handling file attributes. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit DCFileAttributes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; const // Windows attributes FILE_ATTRIBUTE_READONLY = $0001; FILE_ATTRIBUTE_HIDDEN = $0002; FILE_ATTRIBUTE_SYSTEM = $0004; FILE_ATTRIBUTE_VOLUME = $0008; FILE_ATTRIBUTE_DIRECTORY = $0010; FILE_ATTRIBUTE_ARCHIVE = $0020; FILE_ATTRIBUTE_DEVICE = $0040; FILE_ATTRIBUTE_NORMAL = $0080; FILE_ATTRIBUTE_TEMPORARY = $0100; FILE_ATTRIBUTE_SPARSE_FILE = $0200; FILE_ATTRIBUTE_REPARSE_POINT = $0400; FILE_ATTRIBUTE_COMPRESSED = $0800; FILE_ATTRIBUTE_OFFLINE = $1000; FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $2000; FILE_ATTRIBUTE_ENCRYPTED = $4000; FILE_ATTRIBUTE_VIRTUAL = $10000; FILE_ATTRIBUTE_PINNED = $80000; FILE_ATTRIBUTE_UNPINNED = $100000; FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = $400000; // Unix attributes { attributes mask } S_IFMT = $F000; { first-in/first-out (FIFO/pipe) } S_IFIFO = $1000; { character-special file (tty/console) } S_IFCHR = $2000; { directory } S_IFDIR = $4000; { blocking device (unused) } S_IFBLK = $6000; { regular } S_IFREG = $8000; { symbolic link (unused) } S_IFLNK = $A000; { Berkeley socket } S_IFSOCK = $C000; { mode_t possible values } S_IRUSR = %0100000000; { Read permission for owner } S_IWUSR = %0010000000; { Write permission for owner } S_IXUSR = %0001000000; { Exec permission for owner } S_IRGRP = %0000100000; { Read permission for group } S_IWGRP = %0000010000; { Write permission for group } S_IXGRP = %0000001000; { Exec permission for group } S_IROTH = %0000000100; { Read permission for world } S_IWOTH = %0000000010; { Write permission for world } S_IXOTH = %0000000001; { Exec permission for world } S_IRWXU = S_IRUSR or S_IWUSR or S_IXUSR; S_IRWXG = S_IRGRP or S_IWGRP or S_IXGRP; S_IRWXO = S_IROTH or S_IWOTH or S_IXOTH; S_IXUGO = S_IXUSR or S_IXGRP or S_IXOTH; { POSIX setuid(), setgid(), and sticky bit } S_ISUID = $0800; S_ISGID = $0400; S_ISVTX = $0200; // Generic attributes {$IF DEFINED(MSWINDOWS)} GENERIC_ATTRIBUTE_FILE = FILE_ATTRIBUTE_ARCHIVE; GENERIC_ATTRIBUTE_FOLDER = GENERIC_ATTRIBUTE_FILE or FILE_ATTRIBUTE_DIRECTORY; {$ELSEIF DEFINED(UNIX)} GENERIC_ATTRIBUTE_FILE = S_IRUSR or S_IWUSR or S_IRGRP or S_IROTH; GENERIC_ATTRIBUTE_FOLDER = GENERIC_ATTRIBUTE_FILE or S_IFDIR or S_IXUGO; {$ENDIF} function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs; function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs; function UnixToWcxFileAttr(Attr: TFileAttrs): TFileAttrs; function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs; function SingleStrToFileAttr(sAttr: String): TFileAttrs; function WinSingleStrToFileAttr(sAttr: String): TFileAttrs; function UnixSingleStrToFileAttr(sAttr: String): TFileAttrs; {en Convert file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function StrToFileAttr(sAttr: String): TFileAttrs; {en Convert file attributes to string in the format of "attr1+attr2+attr3+". @param(Attributes File attributes) @returns(File attributes as string) } function FileAttrToStr(Attr: TFileAttrs): String; {en Convert Windows file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function WinStrToFileAttr(sAttr: String): TFileAttrs; {en Convert Unix file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function UnixStrToFileAttr(sAttr: String): TFileAttrs; function FormatNtfsAttributes(iAttr: TFileAttrs): String; function FormatUnixAttributes(iAttr: TFileAttrs): String; function FormatUnixModeOctal(iAttr: TFileAttrs): String; implementation uses DCStrUtils; type TAttrStrToFileAttr = record Str: String; Attr: TFileAttrs; end; const WinAttrStrToFileAttr: array[0..9] of TAttrStrToFileAttr = ( (Str: 'r'; Attr: FILE_ATTRIBUTE_READONLY), (Str: 'h'; Attr: FILE_ATTRIBUTE_HIDDEN), (Str: 's'; Attr: FILE_ATTRIBUTE_SYSTEM), (Str: 'd'; Attr: FILE_ATTRIBUTE_DIRECTORY), (Str: 'a'; Attr: FILE_ATTRIBUTE_ARCHIVE), (Str: 't'; Attr: FILE_ATTRIBUTE_TEMPORARY), (Str: 'p'; Attr: FILE_ATTRIBUTE_SPARSE_FILE), (Str: 'l'; Attr: FILE_ATTRIBUTE_REPARSE_POINT), (Str: 'c'; Attr: FILE_ATTRIBUTE_COMPRESSED), (Str: 'e'; Attr: FILE_ATTRIBUTE_ENCRYPTED)); UnixAttrStrToFileAttr: array[0..18] of TAttrStrToFileAttr = ( // Permissions (Str: 'ur'; Attr: S_IRUSR), (Str: 'uw'; Attr: S_IWUSR), (Str: 'ux'; Attr: S_IXUSR), (Str: 'gr'; Attr: S_IRGRP), (Str: 'gw'; Attr: S_IWGRP), (Str: 'gx'; Attr: S_IXGRP), (Str: 'or'; Attr: S_IROTH), (Str: 'ow'; Attr: S_IWOTH), (Str: 'ox'; Attr: S_IXOTH), (Str: 'us'; Attr: S_ISUID), (Str: 'gs'; Attr: S_ISGID), (Str: 'sb'; Attr: S_ISVTX), // File types (Str: 'f'; Attr: S_IFIFO), (Str: 'c'; Attr: S_IFCHR), (Str: 'd'; Attr: S_IFDIR), (Str: 'b'; Attr: S_IFBLK), (Str: 'r'; Attr: S_IFREG), (Str: 'l'; Attr: S_IFLNK), (Str: 's'; Attr: S_IFSOCK)); function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs; begin Result := S_IRUSR or S_IRGRP or S_IROTH; if (Attr and faDirectory) <> 0 then Result := Result or S_IFDIR or S_IXUGO or S_IWUSR else begin Result := Result or S_IFREG; if (Attr and faReadOnly) = 0 then Result := Result or S_IWUSR; end; end; function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs; begin Result := 0; case (Attr and S_IFMT) of 0, S_IFREG: Result := faArchive; S_IFLNK: Result := Result or faSymLink; S_IFDIR: Result := Result or faDirectory; S_IFIFO, S_IFCHR, S_IFBLK, S_IFSOCK: Result := Result or faSysFile; end; if (Attr and S_IWUSR) = 0 then Result := Result or faReadOnly; end; function UnixToWcxFileAttr(Attr: TFileAttrs): TFileAttrs; begin {$IF DEFINED(MSWINDOWS)} Result := UnixToWinFileAttr(Attr); {$ELSEIF DEFINED(UNIX)} Result := Attr; {$ELSE} Result := 0; {$ENDIF} end; function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs; begin Result := UnixToWinFileAttr(Attr); if (Length(FileName) > 1) and (FileName[1] = '.') and (FileName[2] <> '.') then Result := Result or faHidden; end; function SingleStrToFileAttr(sAttr: String): TFileAttrs; begin {$IF DEFINED(MSWINDOWS)} Result := WinSingleStrToFileAttr(sAttr); {$ELSEIF DEFINED(UNIX)} Result := UnixSingleStrToFileAttr(sAttr); {$ENDIF} end; function WinSingleStrToFileAttr(sAttr: String): TFileAttrs; var i: Integer; begin for i := Low(WinAttrStrToFileAttr) to High(WinAttrStrToFileAttr) do begin if sAttr = WinAttrStrToFileAttr[i].Str then Exit(WinAttrStrToFileAttr[i].Attr); end; Result := 0; end; function UnixSingleStrToFileAttr(sAttr: String): TFileAttrs; var i: Integer; begin if Length(sAttr) > 0 then begin if sAttr[1] in ['0'..'7'] then begin // Octal representation. Exit(TFileAttrs(OctToDec(sAttr))); end else begin for i := Low(UnixAttrStrToFileAttr) to High(UnixAttrStrToFileAttr) do begin if sAttr = UnixAttrStrToFileAttr[i].Str then Exit(UnixAttrStrToFileAttr[i].Attr); end; end; end; Result := 0; end; function StrToFileAttr(sAttr: String): TFileAttrs; inline; begin {$IF DEFINED(MSWINDOWS)} Result := WinStrToFileAttr(sAttr); {$ELSEIF DEFINED(UNIX)} Result := UnixStrToFileAttr(sAttr); {$ENDIF} end; function FileAttrToStr(Attr: TFileAttrs): String; var i: Integer; begin Result := ''; {$IF DEFINED(MSWINDOWS)} for i := Low(WinAttrStrToFileAttr) to High(WinAttrStrToFileAttr) do begin if Attr and WinAttrStrToFileAttr[i].Attr <> 0 then Result := Result + WinAttrStrToFileAttr[i].Str + '+'; end; {$ELSEIF DEFINED(UNIX)} for i := Low(UnixAttrStrToFileAttr) to High(UnixAttrStrToFileAttr) do begin if Attr and UnixAttrStrToFileAttr[i].Attr <> 0 then Result := Result + UnixAttrStrToFileAttr[i].Str + '+'; end; {$ENDIF} end; function WinStrToFileAttr(sAttr: String): TFileAttrs; var I: LongInt; begin Result:= 0; sAttr:= LowerCase(sAttr); for I:= 1 to Length(sAttr) do case sAttr[I] of 'd': Result := Result or FILE_ATTRIBUTE_DIRECTORY; 'l': Result := Result or FILE_ATTRIBUTE_REPARSE_POINT; 'r': Result := Result or FILE_ATTRIBUTE_READONLY; 'a': Result := Result or FILE_ATTRIBUTE_ARCHIVE; 'h': Result := Result or FILE_ATTRIBUTE_HIDDEN; 's': Result := Result or FILE_ATTRIBUTE_SYSTEM; end; end; function UnixStrToFileAttr(sAttr: String): TFileAttrs; begin Result:= 0; if Length(sAttr) < 10 then Exit; if sAttr[1] = 'd' then Result:= Result or S_IFDIR; if sAttr[1] = 'l' then Result:= Result or S_IFLNK; if sAttr[1] = 's' then Result:= Result or S_IFSOCK; if sAttr[1] = 'f' then Result:= Result or S_IFIFO; if sAttr[1] = 'b' then Result:= Result or S_IFBLK; if sAttr[1] = 'c' then Result:= Result or S_IFCHR; if sAttr[2] = 'r' then Result:= Result or S_IRUSR; if sAttr[3] = 'w' then Result:= Result or S_IWUSR; if sAttr[4] = 'x' then Result:= Result or S_IXUSR; if sAttr[5] = 'r' then Result:= Result or S_IRGRP; if sAttr[6] = 'w' then Result:= Result or S_IWGRP; if sAttr[7] = 'x' then Result:= Result or S_IXGRP; if sAttr[8] = 'r' then Result:= Result or S_IROTH; if sAttr[9] = 'w' then Result:= Result or S_IWOTH; if sAttr[10] = 'x' then Result:= Result or S_IXOTH; if sAttr[4] = 'S' then Result:= Result or S_ISUID; if sAttr[7] = 'S' then Result:= Result or S_ISGID; if sAttr[10] = 'T' then Result:= Result or S_ISVTX; if sAttr[4] = 's' then Result:= Result or S_IXUSR or S_ISUID; if sAttr[7] = 's' then Result:= Result or S_IXGRP or S_ISGID; if sAttr[10] = 't' then Result:= Result or S_IXOTH or S_ISVTX; end; function FormatNtfsAttributes(iAttr: TFileAttrs): String; begin Result:= '--------'; if (iAttr and FILE_ATTRIBUTE_DIRECTORY ) <> 0 then Result[1] := 'd'; if (iAttr and FILE_ATTRIBUTE_REPARSE_POINT) <> 0 then Result[1] := 'l'; if (iAttr and FILE_ATTRIBUTE_READONLY ) <> 0 then Result[2] := 'r'; if (iAttr and FILE_ATTRIBUTE_ARCHIVE ) <> 0 then Result[3] := 'a'; if (iAttr and FILE_ATTRIBUTE_HIDDEN ) <> 0 then Result[4] := 'h'; if (iAttr and FILE_ATTRIBUTE_SYSTEM ) <> 0 then Result[5] := 's'; // These two are exclusive on NTFS. if (iAttr and FILE_ATTRIBUTE_COMPRESSED ) <> 0 then Result[6] := 'c'; if (iAttr and FILE_ATTRIBUTE_ENCRYPTED ) <> 0 then Result[6] := 'e'; if (iAttr and FILE_ATTRIBUTE_TEMPORARY ) <> 0 then Result[7] := 't'; if (iAttr and FILE_ATTRIBUTE_SPARSE_FILE ) <> 0 then Result[8] := 'p'; end; function FormatUnixAttributes(iAttr: TFileAttrs): String; begin Result:= '----------'; if ((iAttr and S_IFMT) = S_IFDIR) then Result[1] := 'd'; if ((iAttr and S_IFMT) = S_IFLNK) then Result[1] := 'l'; if ((iAttr and S_IFMT) = S_IFSOCK) then Result[1] := 's'; if ((iAttr and S_IFMT) = S_IFIFO) then Result[1] := 'f'; if ((iAttr and S_IFMT) = S_IFBLK) then Result[1] := 'b'; if ((iAttr and S_IFMT) = S_IFCHR) then Result[1] := 'c'; if ((iAttr and S_IRUSR) = S_IRUSR) then Result[2] := 'r'; if ((iAttr and S_IWUSR) = S_IWUSR) then Result[3] := 'w'; if ((iAttr and S_IXUSR) = S_IXUSR) then Result[4] := 'x'; if ((iAttr and S_IRGRP) = S_IRGRP) then Result[5] := 'r'; if ((iAttr and S_IWGRP) = S_IWGRP) then Result[6] := 'w'; if ((iAttr and S_IXGRP) = S_IXGRP) then Result[7] := 'x'; if ((iAttr and S_IROTH) = S_IROTH) then Result[8] := 'r'; if ((iAttr and S_IWOTH) = S_IWOTH) then Result[9] := 'w'; if ((iAttr and S_IXOTH) = S_IXOTH) then Result[10] := 'x'; if ((iAttr and S_ISUID) = S_ISUID) then begin if Result[4] = 'x' then Result[4] := 's' else Result[4] := 'S'; end; if ((iAttr and S_ISGID) = S_ISGID) then begin if Result[7] = 'x' then Result[7] := 's' else Result[7] := 'S'; end; if ((iAttr and S_ISVTX) = S_ISVTX) then begin if Result[10] = 'x' then Result[10] := 't' else Result[10] := 'T'; end; end; function FormatUnixModeOctal(iAttr: TFileAttrs): String; begin Result:= DecToOct(iAttr and $0FFF); Result:= StringOfChar('0', 4 - Length(Result)) + Result; end; end. doublecmd-1.1.30/components/doublecmd/dcdatetimeutils.pas0000644000175000001440000006026215104114162022607 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Date and time functions. Copyright (C) 2009-2012 Przemysław Nagay (cobines@gmail.com) Copyright (C) 2017-2025 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit DCDateTimeUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes {$IF DEFINED(MSWINDOWS)} , Windows {$ELSEIF DEFINED(UNIX)} , Unix, UnixUtil, DCUnix {$ENDIF} ; const DATE_TIME_NULL = TDateTime(2958466.0); function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime; function FileTimeToDateTimeEx(FileTime : DCBasicTypes.TFileTimeEx) : TDateTime; function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; function DateTimeToFileTimeEx(DateTime : TDateTime) : DCBasicTypes.TFileTimeEx; function FileTimeToWinFileTime(FileTime : DCBasicTypes.TFileTime) : TWinFileTime; function FileTimeExToWinFileTime(FileTime : DCBasicTypes.TFileTimeEx) : TWinFileTime; function WinFileTimeToFileTimeEx(FileTime: TWinFileTime) : DCBasicTypes.TFileTimeEx; {en Converts system specific UTC time to local time. } function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime; out LocalFileTime: DCBasicTypes.TFileTime): LongBool; {en Converts system specific local time to UTC time. } function LocalFileTimeToFileTime(const LocalFileTime: DCBasicTypes.TFileTime; out FileTime: DCBasicTypes.TFileTime): LongBool; {en Converts Windows UTC file time to Windows local file time. @param(lpFileTime TWinFileTime structure containing the UTC-based file time) @param(lpLocalFileTime TWinFileTime structure to receive the converted local file time) @returns(The function returns @true if successful, @false otherwise) } function WinFileTimeToLocalFileTime(const FileTime: TWinFileTime; out LocalFileTime: TWinFileTime): LongBool; {en Converts Windows local file time to Windows UTC file time. @param(lpLocalFileTime TWinFileTime structure that specifies the local file time) @param(lpFileTime TWinFileTime structure to receive the converted UTC-based file time) @returns(The function returns @true if successful, @false otherwise) } function WinLocalFileTimeToFileTime(const LocalFileTime: TWinFileTime; out FileTime: TWinFileTime): LongBool; {en Converts Windows UTC file time to a file time in TDateTime format. @param(ft TWinFileTime structure containing the UTC-based file time) @returns(File time in TDateTime format) } function WinFileTimeToDateTime(ft : TWinFileTime) : TDateTime; {en Converts a file time in TDateTime format to Windows UTC file time. @param(dt File time in TDateTime format) @returns(Windows UTC-based file time) } function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime; function DosFileTimeToDateTime(const DosTime: TDosFileTime): TDateTime; function DateTimeToDosFileTime(const DateTime: TDateTime): TDosFileTime; {$IFDEF MSWINDOWS} function VariantTimeToDateTime(VarTime: Double): TDateTime; function WinFileTimeToDateTime(ft : Windows.FILETIME) : TDateTime; inline; overload; function WinToDosTime(const WinTime: Windows.FILETIME; var DosTime: TDosFileTime): LongBool; overload; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: Windows.FILETIME): LongBool; overload; function WinToDosTime(const WinTime: TWinFileTime; var DosTime: TDosFileTime): LongBool; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: TWinFileTime): LongBool; {$ENDIF} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; {$IFDEF UNIX} function UnixFileTimeToDateTimeEx(UnixTime: DCBasicTypes.TFileTimeEx) : TDateTime; {$ENDIF} function DateTimeToUnixFileTime(DateTime: TDateTime) : TUnixFileTime; function DateTimeToUnixFileTimeEx(DateTime: TDateTime) : DCBasicTypes.TFileTimeEx; function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime; function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; function DosTimeToUnixFileTime(DosTime: TDosFileTime): TUnixFileTime; function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime; function WinFileTimeToUnixTime(WinTime: TWinFileTime) : TUnixFileTime; function WinFileTimeToDosTime(FileTime: TWinFileTime): TDosFileTime; function DosTimeToWinFileTime(FileTime: TDosFileTime): TWinFileTime; function WcxFileTimeToFileTime(WcxTime: LongInt): DCBasicTypes.TFileTime; inline; function FileTimeToWcxFileTime(FileTime: DCBasicTypes.TFileTime): LongInt; inline; function WcxFileTimeToDateTime(WcxTime: LongInt): TDateTime; function UnixFileTimeToWcxTime(UnixTime: TUnixFileTime): LongInt; function GetTimeZoneBias: LongInt; {en Converts a month short name to month number. @param(ShortMonthName Month short name) @param(Default Default month number) @returns(Month number) } function MonthToNumberDef(const ShortMonthName: String; Default: Word): Word; {en Converts a year short record to year long record if need (10 -> 2010). @param(Year Year short record) @returns(Year long record) } function YearShortToLong(Year: Word): Word; function TwelveToTwentyFour(Hour: Word; Modifier: AnsiString): Word; function FileTimeCompare(SourceTime, TargetTime: TDateTime; NtfsShift: Boolean): Integer; type EDateOutOfRange = class(EConvertError) private FDateTime: TDateTime; public constructor Create(ADateTime: TDateTime); property DateTime: TDateTime read FDateTime; end; implementation uses DateUtils; const UnixWinEpoch = TWinFileTime($019DB1DED53E8000); // Unix epoch start MinWinUnixSec = (0 - TUnixFileTime(UnixWinEpoch div 10000000 - 1)); MaxWinUnixSec = TUnixFileTime(High(TWinFileTime) div 10000000 - 1); const { Short names of months. } ShortMonthNames: TMonthNameArray = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'); {$IF DEFINED(MSWINDOWS)} var WinTimeZoneBias: LongInt; TzSpecificLocalTimeToSystemTime: function(lpTimeZoneInformation: PTimeZoneInformation; lpLocalTime, lpUniversalTime: PSystemtime): BOOL; stdcall; {$ENDIF} function AdjustUnixFileTime(const FileTime: DCBasicTypes.TFileTime; out AdjustedFileTime: DCBasicTypes.TFileTime; AdjustValue: Int64): Boolean; begin if AdjustValue < 0 then begin if FileTime < DCBasicTypes.TFileTime(-AdjustValue) then begin AdjustedFileTime := 0; Result := False; end else begin AdjustedFileTime := FileTime - DCBasicTypes.TFileTime(-AdjustValue); Result := True; end; end else begin if High(FileTime) - FileTime < DCBasicTypes.TFileTime(AdjustValue) then begin AdjustedFileTime := High(FileTime); Result := False; end else begin AdjustedFileTime := FileTime + DCBasicTypes.TFileTime(AdjustValue); Result := True; end; end; end; function AdjustWinFileTime(const FileTime: TWinFileTime; out AdjustedFileTime: TWinFileTime; AdjustValue: Int64): Boolean; begin if AdjustValue < 0 then begin if FileTime < DCBasicTypes.TWinFileTime(-AdjustValue) then begin AdjustedFileTime := 0; Result := False; end else begin AdjustedFileTime := FileTime - DCBasicTypes.TWinFileTime(-AdjustValue); Result := True; end; end else begin if High(FileTime) - FileTime < DCBasicTypes.TWinFileTime(AdjustValue) then begin AdjustedFileTime := High(FileTime); Result := False; end else begin AdjustedFileTime := FileTime + DCBasicTypes.TWinFileTime(AdjustValue); Result := True; end; end; end; function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime; inline; {$IF DEFINED(MSWINDOWS)} begin Result := WinFileTimeToDateTime(FileTime); end; {$ELSEIF DEFINED(UNIX)} begin Result := UnixFileTimeToDateTime(FileTime); end; {$ELSE} begin Result := 0; end; {$ENDIF} function FileTimeToDateTimeEx(FileTime : DCBasicTypes.TFileTimeEx) : TDateTime; {$IF DEFINED(MSWINDOWS)} begin Result := WinFileTimeToDateTime(FileTime); end; {$ELSEIF DEFINED(UNIX)} begin Result := UnixFileTimeToDateTimeEx(FileTime); end; {$ELSE} begin Result := 0; end; {$ENDIF} function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; inline; {$IF DEFINED(MSWINDOWS)} begin Result := DateTimeToWinFileTime(DateTime); end; {$ELSEIF DEFINED(UNIX)} begin Result := DateTimeToUnixFileTime(DateTime); end; {$ELSE} begin Result := 0; end; {$ENDIF} function DateTimeToFileTimeEx(DateTime : TDateTime) : DCBasicTypes.TFileTimeEx; inline; {$IF DEFINED(MSWINDOWS)} begin Result := DateTimeToWinFileTime(DateTime); end; {$ELSEIF DEFINED(UNIX)} begin Result := DateTimeToUnixFileTimeEx(DateTime); end; {$ELSE} begin Result := 0; end; {$ENDIF} function FileTimeToWinFileTime(FileTime: DCBasicTypes.TFileTime): TWinFileTime; inline; {$IF DEFINED(MSWINDOWS)} begin Result:= TWinFileTime(FileTime) end; {$ELSEIF DEFINED(UNIX)} begin Result:= UnixFileTimeToWinTime(TUnixFileTime(FileTime)); end; {$ENDIF} function FileTimeExToWinFileTime(FileTime: DCBasicTypes.TFileTimeEx): TWinFileTime; {$IF DEFINED(MSWINDOWS)} begin Result:= TWinFileTime(FileTime) end; {$ELSEIF DEFINED(UNIX)} begin if (FileTime.Sec > MaxWinUnixSec) then Result:= High(TWinFileTime) else if (FileTime.Sec < MinWinUnixSec) then Result:= Low(TWinFileTime) else begin Result:= UnixWinEpoch + FileTime.sec * 10000000 + FileTime.nanosec div 100; end; end; {$ENDIF} function WinFileTimeToFileTimeEx(FileTime: TWinFileTime): DCBasicTypes.TFileTimeEx; {$IF DEFINED(MSWINDOWS)} begin Result := TFileTimeEx(FileTime); end; {$ELSEIF DEFINED(UNIX)} begin Result.Sec:= Int64((FileTime - UnixWinEpoch) div 10000000); Result.NanoSec:= Int64((FileTime - UnixWinEpoch) mod 10000000) * 100; end; {$ENDIF} function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime; out LocalFileTime: DCBasicTypes.TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.FileTimeToLocalFileTime(@Windows.FILETIME(FileTime), @Windows.FILETIME(LocalFileTime)); end; {$ELSE} begin Result := AdjustUnixFileTime(FileTime, LocalFileTime, Tzseconds); end; {$ENDIF} function LocalFileTimeToFileTime(const LocalFileTime: DCBasicTypes.TFileTime; out FileTime: DCBasicTypes.TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.LocalFileTimeToFileTime(@Windows.FILETIME(LocalFileTime), @Windows.FILETIME(FileTime)); end; {$ELSE} begin Result := AdjustUnixFileTime(LocalFileTime, FileTime, -Tzseconds); end; {$ENDIF} function WinFileTimeToLocalFileTime(const FileTime: TWinFileTime; out LocalFileTime: TWinFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.FileTimeToLocalFileTime(@Windows.FILETIME(FileTime), @Windows.FILETIME(LocalFileTime)); end; {$ELSE} begin Result := AdjustWinFileTime(FileTime, LocalFileTime, 10000000 * Int64(TZSeconds)); end; {$ENDIF} function WinLocalFileTimeToFileTime(const LocalFileTime: TWinFileTime; out FileTime: TWinFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.LocalFileTimeToFileTime(@Windows.FILETIME(LocalFileTime), @Windows.FILETIME(FileTime)); end; {$ELSE} begin Result := AdjustWinFileTime(LocalFileTime, FileTime, -10000000 * Int64(TZSeconds)); end; {$ENDIF} function WinFileTimeToDateTime(ft : TWinFileTime) : TDateTime; {$IF DEFINED(MSWINDOWS)} var lpUniversalTime, lpLocalTime: TSystemTime; begin if (Win32MajorVersion > 5) then begin FileTimeToSystemTime(@ft, @lpUniversalTime); SystemTimeToTzSpecificLocalTime(nil, @lpUniversalTime, @lpLocalTime); Result := SystemTimeToDateTime(lpLocalTime); end else begin WinFileTimeToLocalFileTime(ft,ft); Result := (ft / 864000000000.0) - 109205.0; end; end; {$ELSE} begin Result := FileTimeToDateTimeEx(WinFileTimeToFileTimeEx(ft)); end; {$ENDIF} function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime; {$IF DEFINED(MSWINDOWS)} var lpUniversalTime, lpLocalTime: TSystemTime; begin if (Win32MajorVersion > 5) then begin DateTimeToSystemTime(dt, lpLocalTime); TzSpecificLocalTimeToSystemTime(nil, @lpLocalTime, @lpUniversalTime); SystemTimeToFileTime(@lpUniversalTime, @Result); end else begin Result := Round((Extended(dt) + 109205.0) * 864000000000.0); WinLocalFileTimeToFileTime(Result, Result); end; end; {$ELSE} begin Result := FileTimeExToWinFileTime(DateTimeToFileTimeEx(dt)); end; {$ENDIF} function DosFileTimeToDateTime(const DosTime: TDosFileTime): TDateTime; var Yr, Mo, Dy : Word; Hr, Mn, S : Word; FileDate, FileTime : Word; begin FileDate := LongRec(DosTime).Hi; FileTime := LongRec(DosTime).Lo; Yr := FileDate shr 9 + 1980; Mo := FileDate shr 5 and 15; if Mo < 1 then Mo := 1; if Mo > 12 then Mo := 12; Dy := FileDate and 31; if Dy < 1 then Dy := 1; if Dy > DaysInAMonth(Yr, Mo) then Dy := DaysInAMonth(Yr, Mo); Hr := FileTime shr 11; if Hr > 23 then Hr := 23; Mn := FileTime shr 5 and 63; if Mn > 59 then Mn := 59; S := FileTime and 31 shl 1; if S > 59 then S := 59; Result := ComposeDateTime(EncodeDate(Yr, Mo, Dy), EncodeTime(Hr, Mn, S, 0)); end; function DateTimeToDosFileTime(const DateTime: TDateTime): TDosFileTime; var Yr, Mo, Dy : Word; Hr, Mn, S, MS: Word; begin DecodeDate(DateTime, Yr, Mo, Dy); DecodeTime(DateTime, Hr, Mn, S, MS); // Outside DOS file date year range if (Yr < 1980) then Yr := 1980 else if (Yr > 2107) then begin Yr := 2107; end; LongRec(Result).Lo := (S shr 1) or (Mn shl 5) or (Hr shl 11); LongRec(Result).Hi := Dy or (Mo shl 5) or (Word(Yr - 1980) shl 9); end; {$IFDEF MSWINDOWS} function VariantTimeToDateTime(VarTime: Double): TDateTime; var lpUniversalTime, lpLocalTime: TSystemTime; begin if (Win32MajorVersion > 5) then begin DateTimeToSystemTime(VarTime, lpUniversalTime); SystemTimeToTzSpecificLocalTime(nil, @lpUniversalTime, @lpLocalTime); Result := SystemTimeToDateTime(lpLocalTime); end else begin Result := IncMinute(VarTime, -WinTimeZoneBias); end; end; function WinFileTimeToDateTime(ft : Windows.FILETIME) : TDateTime; begin Result := WinFileTimeToDateTime(TWinFileTime(ft)); end; function WinToDosTime(const WinTime: Windows.FILETIME; var DosTime: TDosFileTime): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: Windows.FILETIME): LongBool; var lft : Windows.TFILETIME; begin Result := Windows.DosDateTimeToFileTime(LongRec(DosTime).Hi, LongRec(DosTime).Lo, @lft) and Windows.LocalFileTimeToFileTime(@lft, @Windows.FILETIME(WinTime)); end; function WinToDosTime(const WinTime: TWinFileTime; var DosTime: TDosFileTime): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: TWinFileTime): LongBool; var lft : Windows.TFILETIME; begin Result := Windows.DosDateTimeToFileTime(LongRec(DosTime).Hi, LongRec(DosTime).Lo, @lft) and Windows.LocalFileTimeToFileTime(@lft, @Windows.FILETIME(WinTime)); end; {$ENDIF} {$IF DEFINED(UNIX)} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; var filetime: DCBasicTypes.TFileTimeEx; begin filetime:= TFileTimeEx.create(UnixTime); Result:= UnixFileTimeToDateTimeEx(filetime); end; function UnixFileTimeToDateTimeEx(UnixTime: DCBasicTypes.TFileTimeEx) : TDateTime; var ATime: TTimeStruct; Milliseconds: Word; begin if (fpLocalTime(@UnixTime.sec, @ATime) = nil) then Exit(UnixEpoch); ATime.tm_mon += 1; ATime.tm_year += 1900; if (ATime.tm_year < 1) then ATime.tm_year := 1 else if (ATime.tm_year > 9999) then ATime.tm_year := 9999; if ATime.tm_sec > 59 then ATime.tm_sec := 59; if (UnixTime.nanosec > 999000000) then Milliseconds := 999 else begin Milliseconds := Round( Extended(UnixTime.nanosec) / (1000.0 * 1000.0) ); end; Result := ComposeDateTime(EncodeDate(ATime.tm_year, ATime.tm_mon, ATime.tm_mday), EncodeTime(ATime.tm_hour, ATime.tm_min, ATime.tm_sec, milliseconds)); end; {$ELSE} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; var WinFileTime: TWinFileTime; begin WinFileTime:= UnixFileTimeToWinTime(UnixTime); Result:= WinFileTimeToDateTime(WinFileTime); end; {$ENDIF} function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime; {$IF DEFINED(UNIX)} var AUnixTime: TTime; ATime: TTimeStruct; Year, Month, Day: Word; Hour, Minute, Second, MilliSecond: Word; begin DecodeDate(DateTime, Year, Month, Day); DecodeTime(DateTime, Hour, Minute, Second, MilliSecond); ATime.tm_isdst:= -1; ATime.tm_year:= Year - 1900; ATime.tm_mon:= Month - 1; ATime.tm_mday:= Day; ATime.tm_hour:= Hour; ATime.tm_min:= Minute; ATime.tm_sec:= Second; AUnixTime:= fpMkTime(@ATime); if (AUnixTime = -1) then Result:= 0 else begin Result:= TUnixFileTime(AUnixTime); end; end; {$ELSE} var WinFileTime: TWinFileTime; begin WinFileTime:= DateTimeToWinFileTime(DateTime); Result:= WinFileTimeToUnixTime(WinFileTime); end; {$ENDIF} function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeEx; {$IF DEFINED(UNIX)} var AUnixTime: TTime; ATime: TTimeStruct; Year, Month, Day: Word; Hour, Minute, Second, MilliSecond: Word; begin if DateTime < UnixEpoch then raise EDateOutOfRange.Create(DateTime); DecodeDate(DateTime, Year, Month, Day); DecodeTime(DateTime, Hour, Minute, Second, MilliSecond); ATime.tm_isdst:= -1; ATime.tm_year:= Year - 1900; ATime.tm_mon:= Month - 1; ATime.tm_mday:= Day; ATime.tm_hour:= Hour; ATime.tm_min:= Minute; ATime.tm_sec:= Second; AUnixTime:= fpMkTime(@ATime); if (AUnixTime = -1) then Result:= TFileTimeExNull else begin Result:= TFileTimeEx.Create(AUnixTime, MilliSecond * 1000 * 1000); end; end; {$ELSE} var WinFileTime: TWinFileTime; begin WinFileTime:= DateTimeToWinFileTime(DateTime); Result:= WinFileTimeToUnixTime(WinFileTime); end; {$ENDIF} function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime; inline; begin {$IF DEFINED(MSWINDOWS)} Result:= UnixFileTimeToWinTime(UnixTime); {$ELSE} Result:= UnixTime; {$ENDIF} end; function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; begin Result := DateTimeToDosFileTime(UnixFileTimeToDateTime(UnixTime)); end; function DosTimeToUnixFileTime(DosTime: TDosFileTime): TUnixFileTime; begin Result:= DateTimeToUnixFileTime(DosFileTimeToDateTime(DosTime)); end; function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime; var WinFileTime: TWinFileTime; begin WinFileTime := UnixWinEpoch; if not AdjustWinFileTime(WinFileTime, Result, 10000000 * Int64(UnixTime)) then Result := WinFileTime; end; function WinFileTimeToUnixTime(WinTime: TWinFileTime): TUnixFileTime; begin if (WinTime < UnixWinEpoch) then Result:= 0 else Result:= TUnixFileTime((WinTime - UnixWinEpoch) div 10000000); end; function WinFileTimeToDosTime(FileTime: TWinFileTime): TDosFileTime; begin Result := DateTimeToDosFileTime(WinFileTimeToDateTime(FileTime)); end; function DosTimeToWinFileTime(FileTime: TDosFileTime): TWinFileTime; begin Result := DateTimeToWinFileTime(DosFileTimeToDateTime(FileTime)); end; function WcxFileTimeToFileTime(WcxTime: LongInt): DCBasicTypes.TFileTime; begin {$IF DEFINED(MSWINDOWS)} DosToWinTime(TDosFileTime(WcxTime), Result); {$ELSE} Result := TFileTime(WcxTime); {$ENDIF} end; function FileTimeToWcxFileTime(FileTime: DCBasicTypes.TFileTime): LongInt; begin {$IF DEFINED(MSWINDOWS)} WinToDosTime(FileTime, Result); {$ELSE} Result := LongInt(FileTime); {$ENDIF} end; function WcxFileTimeToDateTime(WcxTime: LongInt): TDateTime; begin {$IF DEFINED(MSWINDOWS)} Result := DosFileTimeToDateTime(WcxTime); {$ELSEIF DEFINED(UNIX)} {$PUSH}{$R-} Result := FileTimeToDateTime(WcxTime); {$POP} {$ELSE} Result := 0; {$ENDIF} end; function UnixFileTimeToWcxTime(UnixTime: TUnixFileTime): LongInt; begin {$IF DEFINED(MSWINDOWS)} Result := UnixFileTimeToDosTime(UnixTime); {$ELSEIF DEFINED(UNIX)} {$PUSH}{$R-} Result := UnixTime; {$POP} {$ELSE} Result := 0; {$ENDIF} end; function GetTimeZoneBias: LongInt; begin {$IF DEFINED(MSWINDOWS)} Result := WinTimeZoneBias; {$ELSEIF DEFINED(UNIX)} Result := -Tzseconds div 60; {$ELSE} Result := 0; {$ENDIF} end; function MonthToNumberDef(const ShortMonthName: String; Default: Word): Word; var I: Word; begin Result:= Default; if ShortMonthName = EmptyStr then Exit; for I:= 1 to 12 do if SameText(ShortMonthName, ShortMonthNames[I]) then Exit(I); end; function YearShortToLong(Year: Word): Word; begin Result:= Year; if (Year < 100) then begin if (Year < 80) then Result:= Year + 2000 else Result:= Year + 1900; end; end; function TwelveToTwentyFour(Hour: Word; Modifier: AnsiString): Word; begin Result:= Hour; if Length(Modifier) > 0 then begin case LowerCase(Modifier[1]) of 'a': begin if (Hour = 12) then Result:= 0; end; 'p': begin if (Hour < 12) then Result:= Hour + 12; end; end; end; end; function FileTimeCompare(SourceTime, TargetTime: TDateTime; NtfsShift: Boolean): Integer; const TimeDiff = 3100 / MSecsPerDay; NtfsDiff:TDateTime = (1/HoursPerDay); var FileTimeDiff, NtfsTimeDiff: TDateTime; begin FileTimeDiff:= SourceTime - TargetTime; if NtfsShift then begin NtfsTimeDiff:= FileTimeDiff - NtfsDiff; if (NtfsTimeDiff > -TimeDiff) and (NtfsTimeDiff < TimeDiff) then Exit(0); NtfsTimeDiff:= FileTimeDiff + NtfsDiff; if (NtfsTimeDiff > -TimeDiff) and (NtfsTimeDiff < TimeDiff) then Exit(0); end; if (FileTimeDiff > -TimeDiff) and (FileTimeDiff < TimeDiff) then Result:= 0 else if FileTimeDiff > 0 then Result:= +1 else if FileTimeDiff < 0 then Result:= -1; end; { EDateOutOfRange } constructor EDateOutOfRange.Create(ADateTime: TDateTime); begin inherited Create(EmptyStr); FDateTime := ADateTime; end; {$IF DEFINED(MSWINDOWS)} initialization WinTimeZoneBias := GetLocalTimeOffset; if (Win32MajorVersion > 5) then begin Pointer(TzSpecificLocalTimeToSystemTime):= GetProcAddress(GetModuleHandle(Kernel32), 'TzSpecificLocalTimeToSystemTime'); end; {$ENDIF} end. doublecmd-1.1.30/components/doublecmd/dcdarwin.pas0000644000175000001440000000442015104114162021210 0ustar alexxusersunit DCDarwin; {$mode delphi} {$packrecords c} {$pointermath on} {$modeswitch objectivec1} interface uses Classes, SysUtils, DCBasicTypes, CocoaAll, BaseUnix; const CLOSE_RANGE_CLOEXEC = (1 << 2); function CloseRange(first: cuint; last: cuint; flags: cint): cint; cdecl; // MacOS File Utils function MacosFileSetCreationTime( const path:String; const birthtime:TFileTimeEx ): Boolean; implementation uses DCUnix; type proc_fdinfo = record proc_fd: Int32; proc_fdtype: UInt32; end; Pproc_fdinfo = ^proc_fdinfo; const PROC_PIDLISTFDS = 1; PROC_PIDLISTFD_SIZE = SizeOf(proc_fdinfo); function proc_pidinfo(pid: cint; flavor: cint; arg: cuint64; buffer: pointer; buffersize: cint): cint; cdecl; external 'proc'; function CloseRange(first: cuint; last: cuint; flags: cint): cint; cdecl; var I: cint; Handle: cint; ProcessId: TPid; bufferSize: cint; pidInfo: Pproc_fdinfo; begin Result:= -1; ProcessId:= FpGetpid; bufferSize:= proc_pidinfo(ProcessId, PROC_PIDLISTFDS, 0, nil, 0); pidInfo:= GetMem(bufferSize); if Assigned(pidInfo) then begin bufferSize:= proc_pidinfo(ProcessId, PROC_PIDLISTFDS, 0, pidInfo, bufferSize); for I:= 0 to (bufferSize div PROC_PIDLISTFD_SIZE) - 1 do begin Handle:= pidInfo[I].proc_fd; if (Handle >= first) and (Handle <= last) then begin if (flags and CLOSE_RANGE_CLOEXEC <> 0) then FileCloseOnExec(Handle) else begin FileClose(Handle); end; end; end; Result:= 0; FreeMem(pidInfo); end; end; function StringToNSString(const S: String): NSString; begin Result:= NSString(NSString.stringWithUTF8String(PAnsiChar(S))); end; function MacosFileSetCreationTime( const path:String; const birthtime:TFileTimeEx ): Boolean; var seconds: Double; attrs: NSMutableDictionary; nsPath: NSString; begin Result:= true; if birthtime = TFileTimeExNull then exit; seconds:= birthtime.sec.ToDouble + birthtime.nanosec.ToDouble / (1000.0*1000.0*1000.0); attrs:= NSMutableDictionary.dictionaryWithCapacity( 1 ); attrs.setValue_forKey( NSDate.dateWithTimeIntervalSince1970(seconds), NSFileCreationDate ); nsPath:= StringToNSString( path ); Result:= NSFileManager.defaultManager.setAttributes_ofItemAtPath_error( attrs, nsPath, nil ); end; end. doublecmd-1.1.30/components/doublecmd/dcconvertencoding.pas0000644000175000001440000004121715104114162023120 0ustar alexxusersunit DCConvertEncoding; {$mode objfpc}{$H+} {$IF DEFINED(DARWIN)} {$modeswitch objectivec1} {$ENDIF} interface uses Classes, SysUtils; {$IF NOT DECLARED(RawByteString)} type RawByteString = AnsiString; {$IFEND} var {en Convert from OEM to System encoding, if needed } CeOemToSys: function (const Source: String): RawByteString; CeSysToOem: function (const Source: String): RawByteString; {en Convert from OEM to UTF-8 encoding, if needed } CeOemToUtf8: function (const Source: String): RawByteString; CeUtf8ToOem: function (const Source: String): RawByteString; {en Convert from Ansi to System encoding, if needed } CeAnsiToSys: function (const Source: String): RawByteString; CeSysToAnsi: function (const Source: String): RawByteString; {en Convert from ANSI to UTF-8 encoding, if needed } CeAnsiToUtf8: function (const Source: String): RawByteString; CeUtf8ToAnsi: function (const Source: String): RawByteString; {en Convert from Utf8 to System encoding, if needed } CeUtf8ToSys: function (const Source: String): RawByteString; CeSysToUtf8: function (const Source: String): RawByteString; function CeRawToUtf8(const Source: String): RawByteString; function CeUtf8ToUtf16(const Source: String): UnicodeString; function CeUtf16ToUtf8(const Source: UnicodeString): RawByteString; {$IF DEFINED(MSWINDOWS)} function CeTryEncode(const aValue: UnicodeString; aCodePage: Cardinal; aAllowBestFit: Boolean; out aResult: AnsiString): Boolean; function CeTryDecode(const aValue: AnsiString; aCodePage: Cardinal; out aResult: UnicodeString): Boolean; {$ELSEIF DEFINED(UNIX)} var SystemEncodingUtf8: Boolean = False; SystemEncoding, SystemLocale: String; {$ENDIF} var SystemLanguage: String; implementation uses {$IF DEFINED(UNIX)} LazUTF8 {$IF DEFINED(DARWIN)} , dc_iconvenc_dyn, MacOSAll, CocoaAll, StrUtils {$ELSE} , iconvenc_dyn, UnixCP {$ENDIF} {$ELSEIF DEFINED(MSWINDOWS)} Windows {$ENDIF} ; {$IF DEFINED(FPC_HAS_CPSTRING)} var FileSystemCodePage: TSystemCodePage; {$ENDIF} function UTF8CharacterStrictLength(P: PAnsiChar): integer; begin if p=nil then exit(0); if ord(p^)<%10000000 then begin // regular single byte character exit(1); end else if ord(p^)<%11000000 then begin // invalid single byte character exit(0); end else if ((ord(p^) and %11100000) = %11000000) then begin // should be 2 byte character if (ord(p[1]) and %11000000) = %10000000 then exit(2) else exit(0); end else if ((ord(p^) and %11110000) = %11100000) then begin // should be 3 byte character if ((ord(p[1]) and %11000000) = %10000000) and ((ord(p[2]) and %11000000) = %10000000) then exit(3) else exit(0); end else if ((ord(p^) and %11111000) = %11110000) then begin // should be 4 byte character if ((ord(p[1]) and %11000000) = %10000000) and ((ord(p[2]) and %11000000) = %10000000) and ((ord(p[3]) and %11000000) = %10000000) then exit(4) else exit(0); end else exit(0); end; function CeRawToUtf8(const Source: String): RawByteString; var P: PAnsiChar; I, L: LongInt; begin L:= Length(Source); // Try UTF-8 (this includes ASCII) P:= PAnsiChar(Source); repeat if Ord(P^) < 128 then begin // ASCII if (P^ = #0) and (P - PAnsiChar(Source) >= L) then begin Result:= Source; Exit; end; Inc(P); end else begin I:= UTF8CharacterStrictLength(P); if I = 0 then Break; Inc(P, I); end; until False; Result:= CeSysToUtf8(Source); end; function CeUtf8ToUtf16(const Source: String): UnicodeString; {$IF DEFINED(MSWINDOWS)} var L: SizeUInt; begin L:= Length(Source); if L = 0 then Exit(''); SetLength(Result, L + 1); // wide chars of UTF-16 <= bytes of UTF-8 string SetLength(Result, MultiByteToWideChar(CP_UTF8, 0, PAnsiChar(Source), L, PWideChar(Result), L + 1)); end; {$ELSE} var L: SizeUInt; begin L:= Length(Source); if L = 0 then Exit(''); SetLength(Result, L + 1); if (ConvertUTF8ToUTF16(PUnicodeChar(Result), L + 1, PAnsiChar(Source), L, [toInvalidCharToSymbol], L) = trNoError) then begin SetLength(Result, L - 1); end else begin SetLength(Result, 0); end; end; {$ENDIF} function CeUtf16ToUtf8(const Source: UnicodeString): RawByteString; {$IF DEFINED(MSWINDOWS)} var L: SizeUInt; begin L:= Length(Source); if (L = 0) then Exit(''); SetLength(Result, L * 3); // bytes of UTF-8 <= 3 * wide chars of UTF-16 string // e.g. %11100000 10100000 10000000 (UTF-8) is $0800 (UTF-16) SetLength(Result, WideCharToMultiByte(CP_UTF8, 0, PWideChar(Source), L, PAnsiChar(Result), Length(Result), nil, nil)); end; {$ELSE} var L: SizeUInt; begin L:= Length(Source); if (L = 0) then Exit(''); SetLength(Result, L * 3); if (ConvertUTF16ToUTF8(PAnsiChar(Result), Length(Result) + 1, PUnicodeChar(Source), L, [toInvalidCharToSymbol], L) = trNoError) then begin SetLength(Result, L - 1); end else begin SetLength(Result, 0); end; end; {$ENDIF} function Dummy(const Source: String): RawByteString; begin Result:= Source; end; {$IF DEFINED(FPC_HAS_CPSTRING)} function Sys2UTF8(const Source: String): RawByteString; begin Result:= Source; SetCodePage(Result, FileSystemCodePage, False); SetCodePage(Result, CP_UTF8, True); // Prevent another codepage appear in the strings // we don't need codepage conversion magic in our code SetCodePage(Result, DefaultSystemCodePage, False); end; function UTF82Sys(const Source: String): RawByteString; begin Result:= Source; SetCodePage(Result, CP_UTF8, False); SetCodePage(Result, FileSystemCodePage, True); // Prevent another codepage appear in the strings // we don't need codepage conversion magic in our code SetCodePage(Result, DefaultSystemCodePage, False); end; {$ELSE} function Sys2UTF8(const Source: String): RawByteString; begin Result:= UTF8Encode(Source); end; function UTF82Sys(const Source: String): RawByteString; begin Result:= UTF8Decode(Source); end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} function CeTryEncode(const aValue: UnicodeString; aCodePage: Cardinal; aAllowBestFit: Boolean; out aResult: AnsiString): Boolean; // Try to encode the given Unicode string as the requested codepage const WC_NO_BEST_FIT_CHARS = $00000400; Flags: array[Boolean] of DWORD = (WC_NO_BEST_FIT_CHARS, 0); var UsedDefault: BOOL; begin if not aAllowBestFit and not CheckWin32Version(4, 1) then Result := False else begin SetLength(aResult, WideCharToMultiByte(aCodePage, Flags[aAllowBestFit], PWideChar(aValue), Length(aValue), nil, 0, nil, @UsedDefault)); SetLength(aResult, WideCharToMultiByte(aCodePage, Flags[aAllowBestFit], PWideChar(aValue), Length(aValue), PAnsiChar(aResult), Length(aResult), nil, @UsedDefault)); Result := not UsedDefault; end; end; function CeTryDecode(const aValue: AnsiString; aCodePage: Cardinal; out aResult: UnicodeString): Boolean; begin SetLength(aResult, MultiByteToWideChar(aCodePage, MB_ERR_INVALID_CHARS, LPCSTR(aValue), Length(aValue), nil, 0) * SizeOf(UnicodeChar)); SetLength(aResult, MultiByteToWideChar(aCodePage, MB_ERR_INVALID_CHARS, LPCSTR(aValue), Length(aValue), PWideChar(aResult), Length(aResult))); Result := Length(aResult) > 0; end; function Oem2Utf8(const Source: String): RawByteString; var UnicodeResult: UnicodeString; begin if CeTryDecode(Source, CP_OEMCP, UnicodeResult) then Result:= CeUtf16ToUtf8(UnicodeResult) else Result:= Source; end; function Utf82Oem(const Source: String): RawByteString; var AnsiResult: AnsiString; begin if CeTryEncode(CeUtf8ToUtf16(Source), CP_OEMCP, False, AnsiResult) then Result:= AnsiResult else Result:= Source; end; function OEM2Ansi(const Source: String): RawByteString; var Dst: PAnsiChar; begin Result:= Source; Dst:= AllocMem((Length(Result) + 1) * SizeOf(AnsiChar)); if OEMToChar(PAnsiChar(Result), Dst) then Result:= StrPas(Dst); FreeMem(Dst); end; function Ansi2OEM(const Source: String): RawByteString; var Dst: PAnsiChar; begin Result := Source; Dst := AllocMem((Length(Result) + 1) * SizeOf(AnsiChar)); if CharToOEM(PAnsiChar(Result), Dst) then Result := StrPas(Dst); FreeMem(Dst); end; procedure Initialize; var Buffer: array[1..4] of AnsiChar; begin CeOemToSys:= @OEM2Ansi; CeSysToOem:= @Ansi2OEM; CeOemToUtf8:= @Oem2Utf8; CeUtf8ToOem:= @Utf82Oem; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeAnsiToUtf8:= @Sys2UTF8; CeUtf8ToAnsi:= @UTF82Sys; CeSysToUtf8:= @Sys2UTF8; CeUtf8ToSys:= @UTF82Sys; if GetLocaleInfo(GetUserDefaultLCID, LOCALE_SABBREVLANGNAME, @Buffer[1], 4) > 0 then SystemLanguage := LowerCase(Copy(Buffer, 1, 2)); end; {$ELSEIF DEFINED(UNIX)} {$I dcconvertencoding.inc} const EncodingUTF8 = 'UTF-8'; // UTF-8 Encoding var EncodingOEM, // OEM Encoding EncodingANSI: String; // ANSI Encoding function GetSystemEncoding: Boolean; {$IF DEFINED(DARWIN)} var Country: String; CurrentLocale: NSLocale; LanguageCFRef: CFStringRef = nil; LanguageCFArray: CFArrayRef = nil; begin // System encoding SystemEncoding:= EncodingUTF8; // Get system language LanguageCFArray:= CFLocaleCopyPreferredLanguages; try Result:= CFArrayGetCount(LanguageCFArray) > 0; if Result then begin LanguageCFRef:= CFArrayGetValueAtIndex(LanguageCFArray, 0); SetLength(SystemLanguage, MAX_PATH); Result:= CFStringGetCString(LanguageCFRef, PAnsiChar(SystemLanguage), MAX_PATH, kCFStringEncodingUTF8 ); end; finally CFRelease(LanguageCFArray); end; if Result then begin // Crop to terminating zero SystemLanguage:= PAnsiChar(SystemLanguage); SystemLanguage:= Copy2Symb(SystemLanguage, '-'); // Get system country CurrentLocale:= NSLocale.currentLocale(); Country:= NSString(CurrentLocale.objectForKey(NSLocaleCountryCode)).UTF8String; // Combine system locale if (Length(SystemLanguage) > 0) and (Length(Country) > 0) then begin SystemLocale:= SystemLanguage + '_' + Country; end; end; end; {$ELSE} var I: Integer; Lang: String; begin Result:= True; Lang:= SysUtils.GetEnvironmentVariable('LC_ALL'); if Length(Lang) = 0 then begin Lang:= SysUtils.GetEnvironmentVariable('LC_CTYPE'); if Length(Lang) = 0 then begin Lang:= SysUtils.GetEnvironmentVariable('LANG'); if Length(Lang) = 0 then Exit(False); end; end; I:= Pos('_', Lang); if (I = 0) then SystemLanguage:= Lang else begin SystemLanguage:= Copy(Lang, 1, I - 1); end; I:= System.Pos('.', Lang); if (I > 0) then begin SystemLocale:= Copy(Lang, 1, I - 1); SystemEncoding:= Copy(Lang, I + 1, Length(Lang) - I); end else begin SystemLocale:= Lang; SystemEncoding:= EncodingUTF8; end; end; {$ENDIF} {$IF DEFINED(DARWIN)} function InitIconv(var Error: String): Boolean; begin Error:= EmptyStr; Result:= TryLoadLib('libiconv.dylib', Error); IconvLibFound:= IconvLibFound or Result; end; {$ELSEIF DEFINED(FPC_HAS_CPSTRING)} var AManager : TUnicodeStringManager; function GetStandardCodePage(const stdcp: TStandardCodePageEnum): TSystemCodePage; begin Result:= UnixCP.GetSystemCodepage; end; procedure SetStdIOCodePage(var T: Text); inline; begin case TextRec(T).Mode of fmInput: TextRec(T).CodePage:= GetStandardCodePage(scpConsoleInput); fmOutput: TextRec(T).CodePage:= GetStandardCodePage(scpConsoleOutput); end; end; procedure SetStdIOCodePages; inline; begin SetStdIOCodePage(Input); SetStdIOCodePage(Output); SetStdIOCodePage(ErrOutput); SetStdIOCodePage(StdOut); SetStdIOCodePage(StdErr); end; {$ENDIF} function FindEncoding: Boolean; var Index: Integer; begin // Try to find by language and country for Index:= Low(charset_relation) to High(charset_relation) do begin if CompareStr(charset_relation[Index, 1], SystemLocale) = 0 then begin EncodingANSI:= charset_relation[Index, 2]; EncodingOEM:= charset_relation[Index, 3]; Exit(True); end; end; // Try to find by language only for Index:= Low(charset_relation) to High(charset_relation) do begin if CompareStr(charset_relation[Index, 0], SystemLanguage) = 0 then begin EncodingANSI:= charset_relation[Index, 2]; EncodingOEM:= charset_relation[Index, 3]; Exit(True); end; end; Result:= False; end; function Oem2Utf8(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingOEM, EncodingUTF8); end; function Utf82Oem(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingUTF8, EncodingOEM); end; function OEM2Sys(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingOEM, SystemEncoding); end; function Sys2OEM(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), SystemEncoding, EncodingOEM); end; function Ansi2Sys(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingANSI, SystemEncoding); end; function Sys2Ansi(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), SystemEncoding, EncodingANSI); end; function Ansi2Utf8(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingANSI, EncodingUTF8); end; function Utf82Ansi(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingUTF8, EncodingANSI); end; procedure Initialize; var Error: String = ''; begin CeOemToSys:= @Dummy; CeSysToOem:= @Dummy; CeOemToUtf8:= @Dummy; CeUtf8ToOem:= @Dummy; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeUtf8ToSys:= @Dummy; CeSysToUtf8:= @Dummy; CeAnsiToUtf8:= @Dummy; CeUtf8ToAnsi:= @Dummy; {$IF DEFINED(FPC_HAS_CPSTRING) and NOT DEFINED(DARWIN)} { If locale does not exists then nl_langinfo (called by cwstring unit) returns ANSI_X3.4-1968 (CP_ASCII) as system encoding. Try to find correct encoding by using environment variables LC_ALL, LC_CTYPE, LANG in this case. } if DefaultFileSystemCodePage = CP_ASCII then begin DefaultFileSystemCodePage:= UnixCP.GetSystemCodepage; // Use CP_UTF8 if cannot determine system encoding if DefaultFileSystemCodePage = CP_ASCII then DefaultFileSystemCodePage:= CP_UTF8 else begin GetWideStringManager(AManager); AManager.GetStandardCodePageProc:= @GetStandardCodePage; SetWideStringManager(AManager); end; SetStdIOCodePages; FileSystemCodePage:= DefaultFileSystemCodePage; DefaultSystemCodePage:= DefaultFileSystemCodePage; DefaultRTLFileSystemCodePage:= DefaultFileSystemCodePage; end; {$ENDIF} // Try to get system encoding and initialize Iconv library if not (GetSystemEncoding and InitIconv(Error)) then WriteLn(Error) else begin SystemEncodingUtf8:= (SysUtils.CompareText(SystemEncoding, 'UTF-8') = 0) or (SysUtils.CompareText(SystemEncoding, 'UTF8') = 0); if FindEncoding then begin if (Length(EncodingOEM) > 0) then begin CeOemToSys:= @OEM2Sys; CeSysToOem:= @Sys2OEM; CeOemToUtf8:= @Oem2Utf8; CeUtf8ToOem:= @Utf82Oem; end; if (Length(EncodingANSI) > 0) then begin CeAnsiToSys:= @Ansi2Sys; CeSysToAnsi:= @Sys2Ansi; CeAnsiToUtf8:= @Ansi2Utf8; CeUtf8ToAnsi:= @Utf82Ansi; end; end; if not SystemEncodingUtf8 then begin CeUtf8ToSys:= @UTF82Sys; CeSysToUtf8:= @Sys2UTF8; end; end; WriteLn('SystemLocale ', SystemLocale); WriteLn('SystemLanguage ', SystemLanguage); WriteLn('SystemEncoding ', SystemEncoding); WriteLn('DefaultSystemCodePage ', DefaultSystemCodePage); WriteLn('DefaultFileSystemCodePage ', DefaultFileSystemCodePage); WriteLn('DefaultRTLFileSystemCodePage ', DefaultRTLFileSystemCodePage); end; {$ELSE} procedure Initialize; begin CeOemToSys:= @Dummy; CeSysToOem:= @Dummy; CeOemToUtf8:= @Dummy; CeUtf8ToOem:= @Dummy; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeUtf8ToSys:= @Dummy; CeSysToUtf8:= @Dummy; CeAnsiToUtf8:= @Dummy; CeUtf8ToAnsi:= @Dummy; end; {$ENDIF} initialization {$IF DEFINED(FPC_HAS_CPSTRING)} {$IF DEFINED(MSWINDOWS)} FileSystemCodePage:= Windows.GetACP; {$ELSE} FileSystemCodePage:= WideStringManager.GetStandardCodePageProc(scpFileSystemSingleByte); {$ENDIF} {$ENDIF} Initialize; end. doublecmd-1.1.30/components/doublecmd/dcconvertencoding.inc0000644000175000001440000004141315104114162023104 0ustar alexxusers{ Do not edit this file! It is autogenerated from C program natspec.c } const charset_relation: array[0..253, 0..3] of String = ( ('C' , 'C' , 'CP1252' , 'IBM437' ), ('POSIX' , 'POSIX' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_DJ' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ER' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ER@saaho' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ET' , 'CP1252' , 'IBM437' ), ('af' , 'af_ZA' , 'CP1252' , 'IBM850' ), ('am' , 'am_ET' , 'CP1252' , 'IBM437' ), ('an' , 'an_ES' , 'CP1252' , 'IBM437' ), ('ar' , 'ar_AE' , 'CP1256' , '' ), ('ar' , 'ar_BH' , 'CP1256' , '' ), ('ar' , 'ar_DZ' , 'CP1256' , '' ), ('ar' , 'ar_EG' , 'CP1256' , '' ), ('ar' , 'ar_IN' , 'CP1256' , '' ), ('ar' , 'ar_IQ' , 'CP1256' , '' ), ('ar' , 'ar_JO' , 'CP1256' , '' ), ('ar' , 'ar_KW' , 'CP1256' , '' ), ('ar' , 'ar_LB' , 'CP1256' , '' ), ('ar' , 'ar_LY' , 'CP1256' , '' ), ('ar' , 'ar_MA' , 'CP1256' , '' ), ('ar' , 'ar_OM' , 'CP1256' , '' ), ('ar' , 'ar_QA' , 'CP1256' , '' ), ('ar' , 'ar_SA' , 'CP1256' , '' ), ('ar' , 'ar_SD' , 'CP1256' , '' ), ('ar' , 'ar_SY' , 'CP1256' , '' ), ('ar' , 'ar_TN' , 'CP1256' , '' ), ('ar' , 'ar_YE' , 'CP1256' , '' ), ('as' , 'as_IN' , 'CP1252' , 'IBM437' ), ('ast' , 'ast_ES' , 'CP1252' , 'IBM437' ), ('az' , 'az_AZ' , 'CP1254' , 'IBM857' ), ('be' , 'be_BY' , 'CP1251' , 'IBM849' ), ('be' , 'be_BY@latin' , 'CP1251' , 'IBM849' ), ('ber' , 'ber_DZ' , 'CP1252' , 'IBM437' ), ('ber' , 'ber_MA' , 'CP1252' , 'IBM437' ), ('bg' , 'bg_BG' , 'CP1251' , 'IBM866' ), ('bn' , 'bn_BD' , 'CP1252' , 'IBM437' ), ('bn' , 'bn_IN' , 'CP1252' , 'IBM437' ), ('bo' , 'bo_CN' , 'CP1252' , 'IBM437' ), ('bo' , 'bo_IN' , 'CP1252' , 'IBM437' ), ('br' , 'br_FR' , 'CP1252' , 'IBM850' ), ('br' , 'br_FR@euro' , 'CP1252' , 'IBM850' ), ('bs' , 'bs_BA' , 'CP1252' , 'IBM437' ), ('byn' , 'byn_ER' , 'CP1252' , 'IBM437' ), ('ca' , 'ca_AD' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_ES' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_ES@euro' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_FR' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_IT' , 'CP1252' , 'IBM850' ), ('crh' , 'crh_UA' , 'CP1252' , 'IBM437' ), ('cs' , 'cs_CZ' , 'CP1250' , 'IBM852' ), ('csb' , 'csb_PL' , 'CP1252' , 'IBM437' ), ('cy' , 'cy_GB' , 'ISO885914' , 'IBM850' ), ('da' , 'da_DK' , 'CP1252' , 'IBM850' ), ('de' , 'de_AT' , 'CP1252' , 'IBM850' ), ('de' , 'de_AT@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_BE' , 'CP1252' , 'IBM850' ), ('de' , 'de_BE@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_CH' , 'CP1252' , 'IBM850' ), ('de' , 'de_DE' , 'CP1252' , 'IBM850' ), ('de' , 'de_DE@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_LU' , 'CP1252' , 'IBM850' ), ('de' , 'de_LU@euro' , 'CP1252' , 'IBM850' ), ('dz' , 'dz_BT' , 'CP1252' , 'IBM437' ), ('el' , 'el_CY' , 'CP1253' , '' ), ('el' , 'el_GR' , 'CP1253' , '' ), ('en' , 'en_AG' , 'CP1252' , 'IBM437' ), ('en' , 'en_AU' , 'CP1252' , 'IBM850' ), ('en' , 'en_BW' , 'CP1252' , 'IBM437' ), ('en' , 'en_CA' , 'CP1252' , 'IBM850' ), ('en' , 'en_DK' , 'CP1252' , 'IBM437' ), ('en' , 'en_GB' , 'CP1252' , 'IBM850' ), ('en' , 'en_HK' , 'CP1252' , 'IBM437' ), ('en' , 'en_IE' , 'CP1252' , 'IBM850' ), ('en' , 'en_IE@euro' , 'CP1252' , 'IBM850' ), ('en' , 'en_IN' , 'CP1252' , 'IBM437' ), ('en' , 'en_NG' , 'CP1252' , 'IBM437' ), ('en' , 'en_NZ' , 'CP1252' , 'IBM850' ), ('en' , 'en_PH' , 'CP1252' , 'IBM437' ), ('en' , 'en_SG' , 'CP1252' , 'IBM437' ), ('en' , 'en_US' , 'CP1252' , 'IBM437' ), ('en' , 'en_ZA' , 'CP1252' , 'IBM437' ), ('en' , 'en_ZW' , 'CP1252' , 'IBM437' ), ('es' , 'es_AR' , 'CP1252' , 'IBM850' ), ('es' , 'es_BO' , 'CP1252' , 'IBM850' ), ('es' , 'es_CL' , 'CP1252' , 'IBM850' ), ('es' , 'es_CO' , 'CP1252' , 'IBM850' ), ('es' , 'es_CR' , 'CP1252' , 'IBM850' ), ('es' , 'es_DO' , 'CP1252' , 'IBM850' ), ('es' , 'es_EC' , 'CP1252' , 'IBM850' ), ('es' , 'es_ES' , 'CP1252' , 'IBM850' ), ('es' , 'es_ES@euro' , 'CP1252' , 'IBM850' ), ('es' , 'es_GT' , 'CP1252' , 'IBM850' ), ('es' , 'es_HN' , 'CP1252' , 'IBM850' ), ('es' , 'es_MX' , 'CP1252' , 'IBM850' ), ('es' , 'es_NI' , 'CP1252' , 'IBM850' ), ('es' , 'es_PA' , 'CP1252' , 'IBM850' ), ('es' , 'es_PE' , 'CP1252' , 'IBM850' ), ('es' , 'es_PR' , 'CP1252' , 'IBM850' ), ('es' , 'es_PY' , 'CP1252' , 'IBM850' ), ('es' , 'es_SV' , 'CP1252' , 'IBM850' ), ('es' , 'es_US' , 'CP1252' , 'IBM850' ), ('es' , 'es_UY' , 'CP1252' , 'IBM850' ), ('es' , 'es_VE' , 'CP1252' , 'IBM850' ), ('et' , 'et_EE' , 'CP1257' , '' ), ('eu' , 'eu_ES' , 'CP1252' , 'IBM850' ), ('eu' , 'eu_ES@euro' , 'CP1252' , 'IBM850' ), ('fa' , 'fa_IR' , 'CP1256' , '' ), ('fi' , 'fi_FI' , 'CP1252' , 'IBM850' ), ('fi' , 'fi_FI@euro' , 'CP1252' , 'IBM850' ), ('fil' , 'fil_PH' , 'CP1252' , 'IBM437' ), ('fo' , 'fo_FO' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_BE' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_BE@euro' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_CA' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_CH' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_FR' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_FR@euro' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_LU' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_LU@euro' , 'CP1252' , 'IBM850' ), ('fur' , 'fur_IT' , 'CP1252' , 'IBM437' ), ('fy' , 'fy_DE' , 'CP1252' , 'IBM437' ), ('fy' , 'fy_NL' , 'CP1252' , 'IBM437' ), ('ga' , 'ga_IE' , 'CP1252' , 'IBM437' ), ('ga' , 'ga_IE@euro' , 'CP1252' , 'IBM437' ), ('gd' , 'gd_GB' , 'CP1252' , 'IBM850' ), ('gez' , 'gez_ER' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ER@abegede' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ET' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ET@abegede' , 'CP1252' , 'IBM437' ), ('gl' , 'gl_ES' , 'CP1252' , 'IBM850' ), ('gl' , 'gl_ES@euro' , 'CP1252' , 'IBM850' ), ('gv' , 'gv_GB' , 'CP1252' , 'IBM850' ), ('ha' , 'ha_NG' , 'CP1252' , 'IBM437' ), ('he' , 'he_IL' , 'CP1255' , 'IBM862' ), ('hne' , 'hne_IN' , 'CP1252' , 'IBM437' ), ('hr' , 'hr_HR' , 'CP1250' , 'IBM852' ), ('hsb' , 'hsb_DE' , 'CP1252' , 'IBM437' ), ('ht' , 'ht_HT' , 'CP1252' , 'IBM437' ), ('hu' , 'hu_HU' , 'CP1250' , 'IBM852' ), ('hy' , 'hy_AM' , 'CP1252' , 'IBM437' ), ('id' , 'id_ID' , 'CP1252' , 'IBM850' ), ('ig' , 'ig_NG' , 'CP1252' , 'IBM437' ), ('ik' , 'ik_CA' , 'CP1252' , 'IBM437' ), ('is' , 'is_IS' , 'CP1252' , 'IBM850' ), ('it' , 'it_CH' , 'CP1252' , 'IBM850' ), ('it' , 'it_IT' , 'CP1252' , 'IBM850' ), ('it' , 'it_IT@euro' , 'CP1252' , 'IBM850' ), ('iu' , 'iu_CA' , 'CP1252' , 'IBM437' ), ('iw' , 'iw_IL' , 'CP1252' , 'IBM437' ), ('ja' , 'ja_JP' , 'CP932' , 'CP932' ), ('kk' , 'kk_KZ' , 'CP1251' , 'IBM866' ), ('kl' , 'kl_GL' , 'CP1252' , 'IBM437' ), ('km' , 'km_KH' , 'CP1252' , 'IBM437' ), ('ko' , 'ko_KR' , 'CP949' , 'CP949' ), ('ks' , 'ks_IN' , 'CP1252' , 'IBM437' ), ('ks' , 'ks_IN@devanagari' , 'CP1252' , 'IBM437' ), ('ku' , 'ku_TR' , 'CP1252' , 'IBM437' ), ('kw' , 'kw_GB' , 'CP1252' , 'IBM850' ), ('ky' , 'ky_KG' , 'CP1251' , 'IBM866' ), ('lg' , 'lg_UG' , 'CP1252' , 'IBM437' ), ('li' , 'li_BE' , 'CP1252' , 'IBM437' ), ('li' , 'li_NL' , 'CP1252' , 'IBM437' ), ('lo' , 'lo_LA' , 'CP1252' , 'IBM437' ), ('lt' , 'lt_LT' , 'CP1257' , '' ), ('lv' , 'lv_LV' , 'CP1257' , '' ), ('mai' , 'mai_IN' , 'CP1252' , 'IBM437' ), ('mg' , 'mg_MG' , 'CP1252' , 'IBM437' ), ('mi' , 'mi_NZ' , 'CP1252' , 'IBM437' ), ('mk' , 'mk_MK' , 'CP1251' , 'IBM866' ), ('ml' , 'ml_IN' , 'CP1252' , 'IBM437' ), ('mn' , 'mn_MN' , 'CP1251' , 'IBM866' ), ('ms' , 'ms_MY' , 'CP1252' , 'IBM850' ), ('mt' , 'mt_MT' , 'CP1252' , 'IBM437' ), ('nan' , 'nan_TW@latin' , 'CP1252' , 'IBM437' ), ('nb' , 'nb_NO' , 'CP1252' , 'IBM850' ), ('nds' , 'nds_DE' , 'CP1252' , 'IBM437' ), ('nds' , 'nds_NL' , 'CP1252' , 'IBM437' ), ('ne' , 'ne_NP' , 'CP1252' , 'IBM437' ), ('nl' , 'nl_AW' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_BE' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_BE@euro' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_NL' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_NL@euro' , 'CP1252' , 'IBM850' ), ('nn' , 'nn_NO' , 'CP1252' , 'IBM850' ), ('no' , 'no_NO' , 'CP1252' , 'IBM437' ), ('nr' , 'nr_ZA' , 'CP1252' , 'IBM437' ), ('nso' , 'nso_ZA' , 'CP1252' , 'IBM437' ), ('oc' , 'oc_FR' , 'CP1252' , 'IBM437' ), ('om' , 'om_ET' , 'CP1252' , 'IBM437' ), ('om' , 'om_KE' , 'CP1252' , 'IBM437' ), ('or' , 'or_IN' , 'CP1252' , 'IBM437' ), ('pap' , 'pap_AN' , 'CP1252' , 'IBM437' ), ('pl' , 'pl_PL' , 'CP1250' , 'IBM852' ), ('pt' , 'pt_BR' , 'CP1252' , 'IBM850' ), ('pt' , 'pt_PT' , 'CP1252' , 'IBM850' ), ('pt' , 'pt_PT@euro' , 'CP1252' , 'IBM850' ), ('ro' , 'ro_RO' , 'CP1250' , 'IBM852' ), ('ru' , 'ru_RU' , 'CP1251' , 'IBM866' ), ('ru' , 'ru_UA' , 'CP1251' , 'IBM866' ), ('rw' , 'rw_RW' , 'CP1252' , 'IBM437' ), ('sc' , 'sc_IT' , 'CP1252' , 'IBM437' ), ('sd' , 'sd_IN' , 'CP1252' , 'IBM437' ), ('sd' , 'sd_IN@devanagari' , 'CP1252' , 'IBM437' ), ('se' , 'se_NO' , 'CP1252' , 'IBM437' ), ('shs' , 'shs_CA' , 'CP1252' , 'IBM437' ), ('si' , 'si_LK' , 'CP1252' , 'IBM437' ), ('sid' , 'sid_ET' , 'CP1252' , 'IBM437' ), ('sk' , 'sk_SK' , 'CP1250' , 'IBM852' ), ('sl' , 'sl_SI' , 'CP1250' , 'IBM852' ), ('so' , 'so_DJ' , 'CP1252' , 'IBM437' ), ('so' , 'so_ET' , 'CP1252' , 'IBM437' ), ('so' , 'so_KE' , 'CP1252' , 'IBM437' ), ('so' , 'so_SO' , 'CP1252' , 'IBM437' ), ('sq' , 'sq_AL' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_ME' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_RS' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_RS@latin' , 'CP1250' , 'IBM852' ), ('ss' , 'ss_ZA' , 'CP1252' , 'IBM437' ), ('st' , 'st_ZA' , 'CP1252' , 'IBM437' ), ('sv' , 'sv_FI' , 'CP1252' , 'IBM850' ), ('sv' , 'sv_FI@euro' , 'CP1252' , 'IBM850' ), ('sv' , 'sv_SE' , 'CP1252' , 'IBM850' ), ('tg' , 'tg_TJ' , 'CP1252' , 'IBM437' ), ('th' , 'th_TH' , 'IBM874' , 'IBM874' ), ('ti' , 'ti_ER' , 'CP1252' , 'IBM437' ), ('ti' , 'ti_ET' , 'CP1252' , 'IBM437' ), ('tig' , 'tig_ER' , 'CP1252' , 'IBM437' ), ('tk' , 'tk_TM' , 'CP1252' , 'IBM437' ), ('tl' , 'tl_PH' , 'CP1252' , 'IBM437' ), ('tn' , 'tn_ZA' , 'CP1252' , 'IBM437' ), ('tr' , 'tr_CY' , 'CP1254' , 'IBM857' ), ('tr' , 'tr_TR' , 'CP1254' , 'IBM857' ), ('ts' , 'ts_ZA' , 'CP1252' , 'IBM437' ), ('tt' , 'tt_RU' , 'CP1251' , 'IBM866' ), ('tt' , 'tt_RU@iqtelif' , 'CP1251' , 'IBM866' ), ('ug' , 'ug_CN' , 'CP1252' , 'IBM437' ), ('uk' , 'uk_UA' , 'CP1251' , 'CP1125' ), ('ur' , 'ur_PK' , 'CP1256' , '' ), ('uz' , 'uz_UZ' , 'CP1251' , 'IBM866' ), ('uz' , 'uz_UZ@cyrillic' , 'CP1254' , 'IBM857' ), ('ve' , 've_ZA' , 'CP1252' , 'IBM437' ), ('vi' , 'vi_VN' , 'CP1258' , 'CP1258' ), ('wa' , 'wa_BE' , 'CP1252' , 'IBM850' ), ('wa' , 'wa_BE@euro' , 'CP1252' , 'IBM850' ), ('wo' , 'wo_SN' , 'CP1252' , 'IBM437' ), ('xh' , 'xh_ZA' , 'CP1252' , 'IBM437' ), ('yi' , 'yi_US' , 'CP1252' , 'IBM437' ), ('yo' , 'yo_NG' , 'CP1252' , 'IBM437' ), ('zh' , 'zh_CN' , 'CP936' , 'CP936' ), ('zh' , 'zh_HK' , 'BIG5' , 'BIG5' ), ('zh' , 'zh_SG' , 'CP936' , 'CP936' ), ('zh' , 'zh_TW' , 'BIG5' , 'BIG5' ), ('zu' , 'zu_ZA' , 'CP1252' , 'IBM437' ), ('POSIX' , 'POSIX' , 'CP1252' , 'IBM437' ) ); doublecmd-1.1.30/components/doublecmd/dcclassesutf8.pas0000755000175000001440000002007215104114162022174 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- This module contains classes with UTF8 file names support. Copyright (C) 2008-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit DCClassesUtf8; {$mode objfpc}{$H+} interface uses Classes, RtlConsts, SysUtils, IniFiles; type { TFileStreamEx class } TFileStreamEx = class(THandleStream) private FDirty: Int64; FAutoSync: Boolean; FDirtyLimit: Int64; procedure SetAutoSync(AValue: Boolean); protected FFileName: String; procedure Sync(AWritten: Int64); procedure SetCapacity(const NewCapacity: Int64); public constructor Create(const AFileName: String; Mode: LongWord); virtual; overload; destructor Destroy; override; function Flush: Boolean; function Read(var Buffer; Count: LongInt): LongInt; override; function Write(const Buffer; Count: LongInt): LongInt; override; property DirtyLimit: Int64 read FDirtyLimit write FDirtyLimit; property AutoSync: Boolean read FAutoSync write SetAutoSync; property Capacity: Int64 write SetCapacity; property FileName: String read FFileName; end; { TStringListEx } TStringListEx = class(TStringList) protected function DoCompareText(const S1, S2: String): PtrInt; override; public function IndexOfValue(const Value: String): Integer; procedure LoadFromFile(const FileName: String); override; procedure SaveToFile(const FileName: String); override; end; { TIniFileEx } TIniFileEx = class(TMemIniFile) private FReadOnly: Boolean; public constructor Create(const AFileName: String; Mode: Word; AOptions: TIniFileOptions = []); virtual; constructor Create(const AFileName: String; AOptions: TIniFileOptions = []); override; procedure UpdateFile; override; public property ReadOnly: Boolean read FReadOnly; end; implementation uses DCOSUtils, LazUTF8; { TFileStreamEx } procedure TFileStreamEx.SetAutoSync(AValue: Boolean); const DIRTY_LIMIT = 1024 * 1024; begin FAutoSync:= AValue; if AValue and (FDirtyLimit = 0) then begin FDirtyLimit:= DIRTY_LIMIT; end; end; procedure TFileStreamEx.Sync(AWritten: Int64); const TARGET_LATENCY_LOW = 900; TARGET_LATENCY_HIGH = 1100; DIRTY_LIMIT_LOW = 512 * 1024; DIRTY_LIMIT_HIGH = MaxLongInt + 1; var T1, T2: QWord; Elapsed: Double; Slowdown: Double; begin FDirty+= AWritten; if FDirty < FDirtyLimit then Exit; FDirty:= 0; T1:= GetTickCount64; if not FileFlushData(Handle) then Exit; T2:= GetTickCount64; Elapsed:= (T2 - T1); if (Elapsed > TARGET_LATENCY_HIGH) then begin if (FDirtyLimit > DIRTY_LIMIT_LOW) then begin Slowdown:= Elapsed / TARGET_LATENCY_HIGH; if (Slowdown > 2) then FDirtyLimit := Round(FDirtyLimit / Slowdown) else begin FDirtyLimit := Round(FDirtyLimit * 0.7); end; if (FDirtyLimit < DIRTY_LIMIT_LOW) then FDirtyLimit := DIRTY_LIMIT_LOW else begin FDirtyLimit := (FDirtyLimit div 4096 * 4096); end; end; end else if (Elapsed < TARGET_LATENCY_LOW) then begin if FDirtyLimit < DIRTY_LIMIT_HIGH then begin FDirtyLimit := Round(FDirtyLimit * 1.3); if (FDirtyLimit > DIRTY_LIMIT_HIGH) then FDirtyLimit := DIRTY_LIMIT_HIGH else begin FDirtyLimit := (FDirtyLimit div 4096 * 4096); end; end; end; end; procedure TFileStreamEx.SetCapacity(const NewCapacity: Int64); begin FileAllocate(Handle, NewCapacity); end; constructor TFileStreamEx.Create(const AFileName: String; Mode: LongWord); var AHandle: System.THandle; begin if (Mode and fmCreate) <> 0 then begin AHandle:= mbFileCreate(AFileName, Mode); if AHandle = feInvalidHandle then raise EFCreateError.CreateFmt(SFCreateError + LineEnding + mbSysErrorMessage, [AFileName]) else inherited Create(AHandle); end else begin AHandle:= mbFileOpen(AFileName, Mode); if AHandle = feInvalidHandle then raise EFOpenError.CreateFmt(SFOpenError + LineEnding + mbSysErrorMessage , [AFilename]) else inherited Create(AHandle); end; FFileName:= AFileName; end; destructor TFileStreamEx.Destroy; begin inherited Destroy; // Close handle after destroying the base object, because it may use Handle in Destroy. if Handle <> feInvalidHandle then FileClose(Handle); end; function TFileStreamEx.Flush: Boolean; begin Result:= FileFlush(Handle); end; function TFileStreamEx.Read(var Buffer; Count: LongInt): LongInt; begin Result:= FileRead(Handle, Buffer, Count); if Result = -1 then raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); end; function TFileStreamEx.Write(const Buffer; Count: LongInt): LongInt; begin Result:= inherited Write(Buffer, Count); if FAutoSync and (Result > 0) then Sync(Result); end; { TStringListEx } function TStringListEx.DoCompareText(const S1, S2: String): PtrInt; begin if CaseSensitive then Result:= UTF8CompareStr(S1, S2) else Result:= UTF8CompareText(S1, S2); end; function TStringListEx.IndexOfValue(const Value: String): Integer; var iStart: LongInt; sTemp: String; begin CheckSpecialChars; Result:= 0; while (Result < Count) do begin sTemp:= Strings[Result]; iStart:= Pos(NameValueSeparator, sTemp) + 1; if (iStart > 0) and (DoCompareText(Value, Copy(sTemp, iStart, MaxInt)) = 0) then Exit; Inc(result); end; Result:= -1; end; procedure TStringListEx.LoadFromFile(const FileName: String); var fsFileStream: TFileStreamEx; begin fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try LoadFromStream(fsFileStream); finally fsFileStream.Free; end; end; procedure TStringListEx.SaveToFile(const FileName: String); var AMode: LongWord; fsFileStream: TFileStreamEx; begin if not mbFileExists(FileName) then AMode:= fmCreate else begin AMode:= fmOpenWrite or fmShareDenyWrite; end; fsFileStream:= TFileStreamEx.Create(FileName, AMode); try SaveToStream(fsFileStream); if (AMode <> fmCreate) then fsFileStream.Size:= fsFileStream.Position; finally fsFileStream.Free; end; end; { TIniFileEx } constructor TIniFileEx.Create(const AFileName: String; Mode: Word; AOptions: TIniFileOptions); var slLines : TStringListEx; begin FReadOnly := ((Mode and $03) = fmOpenRead); inherited Create(EmptyStr, AOptions); if ((Mode and $03) <> fmOpenWrite) then begin if mbFileExists(AFileName) then begin slLines := TStringListEx.Create; try slLines.LoadFromFile(AFileName); SetStrings(slLines); finally slLines.Free; end; end; end; Rename(AFileName, False); end; constructor TIniFileEx.Create(const AFileName: String; AOptions: TIniFileOptions); var Mode: Word; begin if not mbFileExists(AFileName) then Mode := fmOpenWrite or fmShareDenyWrite else if mbFileAccess(AFileName, fmOpenReadWrite or fmShareDenyWrite) then Mode := fmOpenReadWrite or fmShareDenyWrite else begin Mode := fmOpenRead or fmShareDenyNone; end; Create(AFileName, Mode, AOptions); end; procedure TIniFileEx.UpdateFile; var slLines: TStringListEx; begin if not FReadOnly then begin slLines := TStringListEx.Create; try GetStrings(slLines); slLines.SaveToFile(FileName); PBoolean(@Dirty)^:= False; finally slLines.Free; end; end; end; end. doublecmd-1.1.30/components/doublecmd/dcbasictypes.pas0000644000175000001440000000424515104114162022077 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Definitions of basic types. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit DCBasicTypes; {$mode objfpc}{$H+} {$modeswitch advancedrecords} interface type TDynamicStringArray = array of String; TCharSet = set of Char; TFileAttrs = Cardinal; // file attributes type regardless of system TWinFileTime = QWord; // NTFS time (UTC) (2 x DWORD) TDosFileTime = LongInt; // MS-DOS time (local) TUnixFileTime = Int64; // UNIX time (UTC) {$IFDEF MSWINDOWS} TFileTime = TWinFileTime; TFileTimeEx = TFileTime; {$ELSE} TFileTime = TUnixFileTime; TFileTimeEx = record public sec: int64; nanosec: int64; public constructor create( aSec:int64; aNanosec:int64=0 ); class operator =(l,r : TFileTimeEx): Boolean; end; {$ENDIF} PFileTime = ^TFileTime; PWinFileTime = ^TWinFileTime; const TFileTimeExNull: TFileTimeEx = {$IFDEF MSWINDOWS} 0 {$ELSE} (sec:0; nanosec:-1) {$ENDIF}; implementation {$IF not DEFINED(MSWINDOWS)} constructor TFileTimeEx.Create(aSec: Int64; aNanosec: Int64); begin Self.sec:= aSec; Self.nanosec:= aNanosec; if Self.nanosec < 0 then Self.nanosec := 0 else if Self.nanosec > 999999999 then begin Self.nanosec := 999999999; end; end; class operator TFileTimeEx.=(l,r : TFileTimeEx): Boolean; begin Result:= (l.sec=r.sec) and (l.nanosec=r.nanosec); end; {$ENDIF} end. doublecmd-1.1.30/components/chsdet/0000755000175000001440000000000015104114162016224 5ustar alexxusersdoublecmd-1.1.30/components/chsdet/src/0000755000175000001440000000000015104114162017013 5ustar alexxusersdoublecmd-1.1.30/components/chsdet/src/stat/0000755000175000001440000000000015104114162017766 5ustar alexxusersdoublecmd-1.1.30/components/chsdet/src/stat/GB2312Statistics.inc0000644000175000001440000001207215104114162023336 0ustar alexxusersconst GB2312Stat: rEUCStatistics = ( mFirstByteFreq: ( 0.011628, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.011628, // FreqH[b0] 0.012403, // FreqH[b1] 0.009302, // FreqH[b2] 0.003876, // FreqH[b3] 0.017829, // FreqH[b4] 0.037209, // FreqH[b5] 0.008527, // FreqH[b6] 0.010078, // FreqH[b7] 0.019380, // FreqH[b8] 0.054264, // FreqH[b9] 0.010078, // FreqH[ba] 0.041085, // FreqH[bb] 0.020930, // FreqH[bc] 0.018605, // FreqH[bd] 0.010078, // FreqH[be] 0.013178, // FreqH[bf] 0.016279, // FreqH[c0] 0.006202, // FreqH[c1] 0.009302, // FreqH[c2] 0.017054, // FreqH[c3] 0.011628, // FreqH[c4] 0.008527, // FreqH[c5] 0.004651, // FreqH[c6] 0.006202, // FreqH[c7] 0.017829, // FreqH[c8] 0.024806, // FreqH[c9] 0.020155, // FreqH[ca] 0.013953, // FreqH[cb] 0.032558, // FreqH[cc] 0.035659, // FreqH[cd] 0.068217, // FreqH[ce] 0.010853, // FreqH[cf] 0.036434, // FreqH[d0] 0.117054, // FreqH[d1] 0.027907, // FreqH[d2] 0.100775, // FreqH[d3] 0.010078, // FreqH[d4] 0.017829, // FreqH[d5] 0.062016, // FreqH[d6] 0.012403, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000000, // FreqH[de] 0.000000, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.001550, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.020081; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.586533; // Lead Byte Weight mSecoundByteFreq: ( 0.006202, // FreqL[a1] 0.031008, // FreqL[a2] 0.005426, // FreqL[a3] 0.003101, // FreqL[a4] 0.001550, // FreqL[a5] 0.003101, // FreqL[a6] 0.082171, // FreqL[a7] 0.014729, // FreqL[a8] 0.006977, // FreqL[a9] 0.001550, // FreqL[aa] 0.013953, // FreqL[ab] 0.000000, // FreqL[ac] 0.013953, // FreqL[ad] 0.010078, // FreqL[ae] 0.008527, // FreqL[af] 0.006977, // FreqL[b0] 0.004651, // FreqL[b1] 0.003101, // FreqL[b2] 0.003101, // FreqL[b3] 0.003101, // FreqL[b4] 0.008527, // FreqL[b5] 0.003101, // FreqL[b6] 0.005426, // FreqL[b7] 0.005426, // FreqL[b8] 0.005426, // FreqL[b9] 0.003101, // FreqL[ba] 0.001550, // FreqL[bb] 0.006202, // FreqL[bc] 0.014729, // FreqL[bd] 0.010853, // FreqL[be] 0.000000, // FreqL[bf] 0.011628, // FreqL[c0] 0.000000, // FreqL[c1] 0.031783, // FreqL[c2] 0.013953, // FreqL[c3] 0.030233, // FreqL[c4] 0.039535, // FreqL[c5] 0.008527, // FreqL[c6] 0.015504, // FreqL[c7] 0.000000, // FreqL[c8] 0.003101, // FreqL[c9] 0.008527, // FreqL[ca] 0.016279, // FreqL[cb] 0.005426, // FreqL[cc] 0.001550, // FreqL[cd] 0.013953, // FreqL[ce] 0.013953, // FreqL[cf] 0.044961, // FreqL[d0] 0.003101, // FreqL[d1] 0.004651, // FreqL[d2] 0.006977, // FreqL[d3] 0.001550, // FreqL[d4] 0.005426, // FreqL[d5] 0.012403, // FreqL[d6] 0.001550, // FreqL[d7] 0.015504, // FreqL[d8] 0.000000, // FreqL[d9] 0.006202, // FreqL[da] 0.001550, // FreqL[db] 0.000000, // FreqL[dc] 0.007752, // FreqL[dd] 0.006977, // FreqL[de] 0.001550, // FreqL[df] 0.009302, // FreqL[e0] 0.011628, // FreqL[e1] 0.004651, // FreqL[e2] 0.010853, // FreqL[e3] 0.012403, // FreqL[e4] 0.017829, // FreqL[e5] 0.005426, // FreqL[e6] 0.024806, // FreqL[e7] 0.000000, // FreqL[e8] 0.006202, // FreqL[e9] 0.000000, // FreqL[ea] 0.082171, // FreqL[eb] 0.015504, // FreqL[ec] 0.004651, // FreqL[ed] 0.000000, // FreqL[ee] 0.006977, // FreqL[ef] 0.004651, // FreqL[f0] 0.000000, // FreqL[f1] 0.008527, // FreqL[f2] 0.012403, // FreqL[f3] 0.004651, // FreqL[f4] 0.003876, // FreqL[f5] 0.003101, // FreqL[f6] 0.022481, // FreqL[f7] 0.024031, // FreqL[f8] 0.001550, // FreqL[f9] 0.047287, // FreqL[fa] 0.009302, // FreqL[fb] 0.001550, // FreqL[fc] 0.005426, // FreqL[fd] 0.017054 // FreqL[fe] ); mSecoundByteStdDev: 0.014156; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.413467 // Trial Byte Weight ); doublecmd-1.1.30/components/chsdet/src/stat/EUCTWStatistics.inc0000644000175000001440000001207115104114162023424 0ustar alexxusersconst EUCKTWtat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.000000, // FreqH[b0] 0.000000, // FreqH[b1] 0.000000, // FreqH[b2] 0.000000, // FreqH[b3] 0.000000, // FreqH[b4] 0.000000, // FreqH[b5] 0.000000, // FreqH[b6] 0.000000, // FreqH[b7] 0.000000, // FreqH[b8] 0.000000, // FreqH[b9] 0.000000, // FreqH[ba] 0.000000, // FreqH[bb] 0.000000, // FreqH[bc] 0.000000, // FreqH[bd] 0.000000, // FreqH[be] 0.000000, // FreqH[bf] 0.000000, // FreqH[c0] 0.000000, // FreqH[c1] 0.000000, // FreqH[c2] 0.000000, // FreqH[c3] 0.119286, // FreqH[c4] 0.052233, // FreqH[c5] 0.044126, // FreqH[c6] 0.052494, // FreqH[c7] 0.045906, // FreqH[c8] 0.019038, // FreqH[c9] 0.032465, // FreqH[ca] 0.026252, // FreqH[cb] 0.025502, // FreqH[cc] 0.015963, // FreqH[cd] 0.052493, // FreqH[ce] 0.019256, // FreqH[cf] 0.015137, // FreqH[d0] 0.031782, // FreqH[d1] 0.017370, // FreqH[d2] 0.018494, // FreqH[d3] 0.015575, // FreqH[d4] 0.016621, // FreqH[d5] 0.007444, // FreqH[d6] 0.011642, // FreqH[d7] 0.013916, // FreqH[d8] 0.019159, // FreqH[d9] 0.016445, // FreqH[da] 0.007851, // FreqH[db] 0.011079, // FreqH[dc] 0.022842, // FreqH[dd] 0.015513, // FreqH[de] 0.010033, // FreqH[df] 0.009950, // FreqH[e0] 0.010347, // FreqH[e1] 0.013103, // FreqH[e2] 0.015371, // FreqH[e3] 0.012502, // FreqH[e4] 0.007436, // FreqH[e5] 0.018253, // FreqH[e6] 0.014134, // FreqH[e7] 0.008907, // FreqH[e8] 0.005411, // FreqH[e9] 0.009570, // FreqH[ea] 0.013598, // FreqH[eb] 0.006092, // FreqH[ec] 0.007409, // FreqH[ed] 0.008432, // FreqH[ee] 0.005816, // FreqH[ef] 0.009349, // FreqH[f0] 0.005472, // FreqH[f1] 0.007170, // FreqH[f2] 0.007420, // FreqH[f3] 0.003681, // FreqH[f4] 0.007523, // FreqH[f5] 0.004610, // FreqH[f6] 0.006154, // FreqH[f7] 0.003348, // FreqH[f8] 0.005074, // FreqH[f9] 0.005922, // FreqH[fa] 0.005254, // FreqH[fb] 0.004682, // FreqH[fc] 0.002093, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.016681; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.715599; // Lead Byte Weight mSecoundByteFreq: ( 0.028933, // FreqL[a1] 0.011371, // FreqL[a2] 0.011053, // FreqL[a3] 0.007232, // FreqL[a4] 0.010192, // FreqL[a5] 0.004093, // FreqL[a6] 0.015043, // FreqL[a7] 0.011752, // FreqL[a8] 0.022387, // FreqL[a9] 0.008410, // FreqL[aa] 0.012448, // FreqL[ab] 0.007473, // FreqL[ac] 0.003594, // FreqL[ad] 0.007139, // FreqL[ae] 0.018912, // FreqL[af] 0.006083, // FreqL[b0] 0.003302, // FreqL[b1] 0.010215, // FreqL[b2] 0.008791, // FreqL[b3] 0.024236, // FreqL[b4] 0.014107, // FreqL[b5] 0.014108, // FreqL[b6] 0.010303, // FreqL[b7] 0.009728, // FreqL[b8] 0.007877, // FreqL[b9] 0.009719, // FreqL[ba] 0.007952, // FreqL[bb] 0.021028, // FreqL[bc] 0.005764, // FreqL[bd] 0.009341, // FreqL[be] 0.006591, // FreqL[bf] 0.012517, // FreqL[c0] 0.005921, // FreqL[c1] 0.008982, // FreqL[c2] 0.008771, // FreqL[c3] 0.012802, // FreqL[c4] 0.005926, // FreqL[c5] 0.008342, // FreqL[c6] 0.003086, // FreqL[c7] 0.006843, // FreqL[c8] 0.007576, // FreqL[c9] 0.004734, // FreqL[ca] 0.016404, // FreqL[cb] 0.008803, // FreqL[cc] 0.008071, // FreqL[cd] 0.005349, // FreqL[ce] 0.008566, // FreqL[cf] 0.010840, // FreqL[d0] 0.015401, // FreqL[d1] 0.031904, // FreqL[d2] 0.008670, // FreqL[d3] 0.011479, // FreqL[d4] 0.010936, // FreqL[d5] 0.007617, // FreqL[d6] 0.008995, // FreqL[d7] 0.008114, // FreqL[d8] 0.008658, // FreqL[d9] 0.005934, // FreqL[da] 0.010452, // FreqL[db] 0.009142, // FreqL[dc] 0.004519, // FreqL[dd] 0.008339, // FreqL[de] 0.007476, // FreqL[df] 0.007027, // FreqL[e0] 0.006025, // FreqL[e1] 0.021804, // FreqL[e2] 0.024248, // FreqL[e3] 0.015895, // FreqL[e4] 0.003768, // FreqL[e5] 0.010171, // FreqL[e6] 0.010007, // FreqL[e7] 0.010178, // FreqL[e8] 0.008316, // FreqL[e9] 0.006832, // FreqL[ea] 0.006364, // FreqL[eb] 0.009141, // FreqL[ec] 0.009148, // FreqL[ed] 0.012081, // FreqL[ee] 0.011914, // FreqL[ef] 0.004464, // FreqL[f0] 0.014257, // FreqL[f1] 0.006907, // FreqL[f2] 0.011292, // FreqL[f3] 0.018622, // FreqL[f4] 0.008149, // FreqL[f5] 0.004636, // FreqL[f6] 0.006612, // FreqL[f7] 0.013478, // FreqL[f8] 0.012614, // FreqL[f9] 0.005186, // FreqL[fa] 0.048285, // FreqL[fb] 0.006816, // FreqL[fc] 0.006743, // FreqL[fd] 0.008671 // FreqL[fe] ); mSecoundByteStdDev: 0.006630; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.284401 // Trial Byte Weight ); doublecmd-1.1.30/components/chsdet/src/stat/EUCKRStatistics.inc0000644000175000001440000001207115104114162023406 0ustar alexxusersconst EUCKRStat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000412, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.057502, // FreqH[b0] 0.033182, // FreqH[b1] 0.002267, // FreqH[b2] 0.016076, // FreqH[b3] 0.014633, // FreqH[b4] 0.032976, // FreqH[b5] 0.004122, // FreqH[b6] 0.011336, // FreqH[b7] 0.058533, // FreqH[b8] 0.024526, // FreqH[b9] 0.025969, // FreqH[ba] 0.054411, // FreqH[bb] 0.019580, // FreqH[bc] 0.063273, // FreqH[bd] 0.113974, // FreqH[be] 0.029885, // FreqH[bf] 0.150041, // FreqH[c0] 0.059151, // FreqH[c1] 0.002679, // FreqH[c2] 0.009893, // FreqH[c3] 0.014839, // FreqH[c4] 0.026381, // FreqH[c5] 0.015045, // FreqH[c6] 0.069456, // FreqH[c7] 0.089860, // FreqH[c8] 0.000000, // FreqH[c9] 0.000000, // FreqH[ca] 0.000000, // FreqH[cb] 0.000000, // FreqH[cc] 0.000000, // FreqH[cd] 0.000000, // FreqH[ce] 0.000000, // FreqH[cf] 0.000000, // FreqH[d0] 0.000000, // FreqH[d1] 0.000000, // FreqH[d2] 0.000000, // FreqH[d3] 0.000000, // FreqH[d4] 0.000000, // FreqH[d5] 0.000000, // FreqH[d6] 0.000000, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000000, // FreqH[de] 0.000000, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.000000, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.025593; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.647437; // Lead Byte Weight mSecoundByteFreq: ( 0.016694, // FreqL[a1] 0.000000, // FreqL[a2] 0.012778, // FreqL[a3] 0.030091, // FreqL[a4] 0.002679, // FreqL[a5] 0.006595, // FreqL[a6] 0.001855, // FreqL[a7] 0.000824, // FreqL[a8] 0.005977, // FreqL[a9] 0.004740, // FreqL[aa] 0.003092, // FreqL[ab] 0.000824, // FreqL[ac] 0.019580, // FreqL[ad] 0.037304, // FreqL[ae] 0.008244, // FreqL[af] 0.014633, // FreqL[b0] 0.001031, // FreqL[b1] 0.000000, // FreqL[b2] 0.003298, // FreqL[b3] 0.002061, // FreqL[b4] 0.006183, // FreqL[b5] 0.005977, // FreqL[b6] 0.000824, // FreqL[b7] 0.021847, // FreqL[b8] 0.014839, // FreqL[b9] 0.052968, // FreqL[ba] 0.017312, // FreqL[bb] 0.007626, // FreqL[bc] 0.000412, // FreqL[bd] 0.000824, // FreqL[be] 0.011129, // FreqL[bf] 0.000000, // FreqL[c0] 0.000412, // FreqL[c1] 0.001649, // FreqL[c2] 0.005977, // FreqL[c3] 0.065746, // FreqL[c4] 0.020198, // FreqL[c5] 0.021434, // FreqL[c6] 0.014633, // FreqL[c7] 0.004122, // FreqL[c8] 0.001649, // FreqL[c9] 0.000824, // FreqL[ca] 0.000824, // FreqL[cb] 0.051937, // FreqL[cc] 0.019580, // FreqL[cd] 0.023289, // FreqL[ce] 0.026381, // FreqL[cf] 0.040396, // FreqL[d0] 0.009068, // FreqL[d1] 0.001443, // FreqL[d2] 0.003710, // FreqL[d3] 0.007420, // FreqL[d4] 0.001443, // FreqL[d5] 0.013190, // FreqL[d6] 0.002885, // FreqL[d7] 0.000412, // FreqL[d8] 0.003298, // FreqL[d9] 0.025969, // FreqL[da] 0.000412, // FreqL[db] 0.000412, // FreqL[dc] 0.006183, // FreqL[dd] 0.003298, // FreqL[de] 0.066983, // FreqL[df] 0.002679, // FreqL[e0] 0.002267, // FreqL[e1] 0.011129, // FreqL[e2] 0.000412, // FreqL[e3] 0.010099, // FreqL[e4] 0.015251, // FreqL[e5] 0.007626, // FreqL[e6] 0.043899, // FreqL[e7] 0.003710, // FreqL[e8] 0.002679, // FreqL[e9] 0.001443, // FreqL[ea] 0.010923, // FreqL[eb] 0.002885, // FreqL[ec] 0.009068, // FreqL[ed] 0.019992, // FreqL[ee] 0.000412, // FreqL[ef] 0.008450, // FreqL[f0] 0.005153, // FreqL[f1] 0.000000, // FreqL[f2] 0.010099, // FreqL[f3] 0.000000, // FreqL[f4] 0.001649, // FreqL[f5] 0.012160, // FreqL[f6] 0.011542, // FreqL[f7] 0.006595, // FreqL[f8] 0.001855, // FreqL[f9] 0.010923, // FreqL[fa] 0.000412, // FreqL[fb] 0.023702, // FreqL[fc] 0.003710, // FreqL[fd] 0.001855 // FreqL[fe] ); mSecoundByteStdDev: 0.013937; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.352563 // Trial Byte Weight ); doublecmd-1.1.30/components/chsdet/src/stat/EUCJPStatistics.inc0000644000175000001440000001207115104114162023403 0ustar alexxusersconst EUCJPStat: rEUCStatistics = ( mFirstByteFreq: ( 0.364808, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.145325, // FreqH[a4] 0.304891, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.001835, // FreqH[b0] 0.010771, // FreqH[b1] 0.006462, // FreqH[b2] 0.001157, // FreqH[b3] 0.002114, // FreqH[b4] 0.003231, // FreqH[b5] 0.001356, // FreqH[b6] 0.007420, // FreqH[b7] 0.004189, // FreqH[b8] 0.003231, // FreqH[b9] 0.003032, // FreqH[ba] 0.033190, // FreqH[bb] 0.006303, // FreqH[bc] 0.006064, // FreqH[bd] 0.009973, // FreqH[be] 0.002354, // FreqH[bf] 0.003670, // FreqH[c0] 0.009135, // FreqH[c1] 0.001675, // FreqH[c2] 0.002792, // FreqH[c3] 0.002194, // FreqH[c4] 0.014720, // FreqH[c5] 0.011928, // FreqH[c6] 0.000878, // FreqH[c7] 0.013124, // FreqH[c8] 0.001077, // FreqH[c9] 0.009295, // FreqH[ca] 0.003471, // FreqH[cb] 0.002872, // FreqH[cc] 0.002433, // FreqH[cd] 0.000957, // FreqH[ce] 0.001636, // FreqH[cf] 0.000000, // FreqH[d0] 0.000000, // FreqH[d1] 0.000000, // FreqH[d2] 0.000000, // FreqH[d3] 0.000000, // FreqH[d4] 0.000000, // FreqH[d5] 0.000000, // FreqH[d6] 0.000000, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000080, // FreqH[de] 0.000279, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.000000, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000080, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.050407; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.640871; // Lead Byte Weight mSecoundByteFreq: ( 0.002473, // FreqL[a1] 0.039134, // FreqL[a2] 0.152745, // FreqL[a3] 0.009694, // FreqL[a4] 0.000359, // FreqL[a5] 0.022180, // FreqL[a6] 0.000758, // FreqL[a7] 0.004308, // FreqL[a8] 0.000160, // FreqL[a9] 0.002513, // FreqL[aa] 0.003072, // FreqL[ab] 0.001316, // FreqL[ac] 0.003830, // FreqL[ad] 0.001037, // FreqL[ae] 0.003590, // FreqL[af] 0.000957, // FreqL[b0] 0.000160, // FreqL[b1] 0.000239, // FreqL[b2] 0.006462, // FreqL[b3] 0.001596, // FreqL[b4] 0.031554, // FreqL[b5] 0.001316, // FreqL[b6] 0.002194, // FreqL[b7] 0.016555, // FreqL[b8] 0.003271, // FreqL[b9] 0.000678, // FreqL[ba] 0.000598, // FreqL[bb] 0.206438, // FreqL[bc] 0.000718, // FreqL[bd] 0.001077, // FreqL[be] 0.003710, // FreqL[bf] 0.001356, // FreqL[c0] 0.001356, // FreqL[c1] 0.000439, // FreqL[c2] 0.004388, // FreqL[c3] 0.005704, // FreqL[c4] 0.000878, // FreqL[c5] 0.010172, // FreqL[c6] 0.007061, // FreqL[c7] 0.014680, // FreqL[c8] 0.000638, // FreqL[c9] 0.025730, // FreqL[ca] 0.002792, // FreqL[cb] 0.000718, // FreqL[cc] 0.001795, // FreqL[cd] 0.091551, // FreqL[ce] 0.000758, // FreqL[cf] 0.003909, // FreqL[d0] 0.000558, // FreqL[d1] 0.031195, // FreqL[d2] 0.007061, // FreqL[d3] 0.001316, // FreqL[d4] 0.022579, // FreqL[d5] 0.006981, // FreqL[d6] 0.007260, // FreqL[d7] 0.001117, // FreqL[d8] 0.000239, // FreqL[d9] 0.012127, // FreqL[da] 0.000878, // FreqL[db] 0.003790, // FreqL[dc] 0.001077, // FreqL[dd] 0.000758, // FreqL[de] 0.002114, // FreqL[df] 0.002234, // FreqL[e0] 0.000678, // FreqL[e1] 0.002992, // FreqL[e2] 0.003311, // FreqL[e3] 0.023416, // FreqL[e4] 0.001237, // FreqL[e5] 0.002753, // FreqL[e6] 0.005146, // FreqL[e7] 0.002194, // FreqL[e8] 0.007021, // FreqL[e9] 0.008497, // FreqL[ea] 0.013763, // FreqL[eb] 0.011768, // FreqL[ec] 0.006303, // FreqL[ed] 0.001915, // FreqL[ee] 0.000638, // FreqL[ef] 0.008776, // FreqL[f0] 0.000918, // FreqL[f1] 0.003431, // FreqL[f2] 0.057603, // FreqL[f3] 0.000439, // FreqL[f4] 0.000439, // FreqL[f5] 0.000758, // FreqL[f6] 0.002872, // FreqL[f7] 0.001675, // FreqL[f8] 0.011050, // FreqL[f9] 0.000000, // FreqL[fa] 0.000279, // FreqL[fb] 0.012127, // FreqL[fc] 0.000718, // FreqL[fd] 0.007380 // FreqL[fe] ); mSecoundByteStdDev: 0.028247; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.359129 // Trial Byte Weight ); doublecmd-1.1.30/components/chsdet/src/stat/Big5Statistics.inc0000644000175000001440000001207015104114162023322 0ustar alexxusersconst Big5Stat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.114427, // FreqH[a4] 0.061058, // FreqH[a5] 0.075598, // FreqH[a6] 0.048386, // FreqH[a7] 0.063966, // FreqH[a8] 0.027094, // FreqH[a9] 0.095787, // FreqH[aa] 0.029525, // FreqH[ab] 0.031331, // FreqH[ac] 0.036915, // FreqH[ad] 0.021805, // FreqH[ae] 0.019349, // FreqH[af] 0.037496, // FreqH[b0] 0.018068, // FreqH[b1] 0.012760, // FreqH[b2] 0.030053, // FreqH[b3] 0.017339, // FreqH[b4] 0.016731, // FreqH[b5] 0.019501, // FreqH[b6] 0.011240, // FreqH[b7] 0.032973, // FreqH[b8] 0.016658, // FreqH[b9] 0.015872, // FreqH[ba] 0.021458, // FreqH[bb] 0.012378, // FreqH[bc] 0.017003, // FreqH[bd] 0.020802, // FreqH[be] 0.012454, // FreqH[bf] 0.009239, // FreqH[c0] 0.012829, // FreqH[c1] 0.007922, // FreqH[c2] 0.010079, // FreqH[c3] 0.009815, // FreqH[c4] 0.010104, // FreqH[c5] 0.000000, // FreqH[c6] 0.000000, // FreqH[c7] 0.000000, // FreqH[c8] 0.000053, // FreqH[c9] 0.000035, // FreqH[ca] 0.000105, // FreqH[cb] 0.000031, // FreqH[cc] 0.000088, // FreqH[cd] 0.000027, // FreqH[ce] 0.000027, // FreqH[cf] 0.000026, // FreqH[d0] 0.000035, // FreqH[d1] 0.000024, // FreqH[d2] 0.000034, // FreqH[d3] 0.000375, // FreqH[d4] 0.000025, // FreqH[d5] 0.000028, // FreqH[d6] 0.000020, // FreqH[d7] 0.000024, // FreqH[d8] 0.000028, // FreqH[d9] 0.000031, // FreqH[da] 0.000059, // FreqH[db] 0.000040, // FreqH[dc] 0.000030, // FreqH[dd] 0.000079, // FreqH[de] 0.000037, // FreqH[df] 0.000040, // FreqH[e0] 0.000023, // FreqH[e1] 0.000030, // FreqH[e2] 0.000027, // FreqH[e3] 0.000064, // FreqH[e4] 0.000020, // FreqH[e5] 0.000027, // FreqH[e6] 0.000025, // FreqH[e7] 0.000074, // FreqH[e8] 0.000019, // FreqH[e9] 0.000023, // FreqH[ea] 0.000021, // FreqH[eb] 0.000018, // FreqH[ec] 0.000017, // FreqH[ed] 0.000035, // FreqH[ee] 0.000021, // FreqH[ef] 0.000019, // FreqH[f0] 0.000025, // FreqH[f1] 0.000017, // FreqH[f2] 0.000037, // FreqH[f3] 0.000018, // FreqH[f4] 0.000018, // FreqH[f5] 0.000019, // FreqH[f6] 0.000022, // FreqH[f7] 0.000033, // FreqH[f8] 0.000032, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.020606; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.675261; // Lead Byte Weight mSecoundByteFreq: ( 0.020256, // FreqL[a1] 0.003293, // FreqL[a2] 0.045811, // FreqL[a3] 0.016650, // FreqL[a4] 0.007066, // FreqL[a5] 0.004146, // FreqL[a6] 0.009229, // FreqL[a7] 0.007333, // FreqL[a8] 0.003296, // FreqL[a9] 0.005239, // FreqL[aa] 0.008282, // FreqL[ab] 0.003791, // FreqL[ac] 0.006116, // FreqL[ad] 0.003536, // FreqL[ae] 0.004024, // FreqL[af] 0.016654, // FreqL[b0] 0.009334, // FreqL[b1] 0.005429, // FreqL[b2] 0.033392, // FreqL[b3] 0.006121, // FreqL[b4] 0.008983, // FreqL[b5] 0.002801, // FreqL[b6] 0.004221, // FreqL[b7] 0.010357, // FreqL[b8] 0.014695, // FreqL[b9] 0.077937, // FreqL[ba] 0.006314, // FreqL[bb] 0.004020, // FreqL[bc] 0.007331, // FreqL[bd] 0.007150, // FreqL[be] 0.005341, // FreqL[bf] 0.009195, // FreqL[c0] 0.005350, // FreqL[c1] 0.005698, // FreqL[c2] 0.004472, // FreqL[c3] 0.007242, // FreqL[c4] 0.004039, // FreqL[c5] 0.011154, // FreqL[c6] 0.016184, // FreqL[c7] 0.004741, // FreqL[c8] 0.012814, // FreqL[c9] 0.007679, // FreqL[ca] 0.008045, // FreqL[cb] 0.016631, // FreqL[cc] 0.009451, // FreqL[cd] 0.016487, // FreqL[ce] 0.007287, // FreqL[cf] 0.012688, // FreqL[d0] 0.017421, // FreqL[d1] 0.013205, // FreqL[d2] 0.031480, // FreqL[d3] 0.003404, // FreqL[d4] 0.009149, // FreqL[d5] 0.008921, // FreqL[d6] 0.007514, // FreqL[d7] 0.008683, // FreqL[d8] 0.008203, // FreqL[d9] 0.031403, // FreqL[da] 0.011733, // FreqL[db] 0.015617, // FreqL[dc] 0.015306, // FreqL[dd] 0.004004, // FreqL[de] 0.010899, // FreqL[df] 0.009961, // FreqL[e0] 0.008388, // FreqL[e1] 0.010920, // FreqL[e2] 0.003925, // FreqL[e3] 0.008585, // FreqL[e4] 0.009108, // FreqL[e5] 0.015546, // FreqL[e6] 0.004659, // FreqL[e7] 0.006934, // FreqL[e8] 0.007023, // FreqL[e9] 0.020252, // FreqL[ea] 0.005387, // FreqL[eb] 0.024704, // FreqL[ec] 0.006963, // FreqL[ed] 0.002625, // FreqL[ee] 0.009512, // FreqL[ef] 0.002971, // FreqL[f0] 0.008233, // FreqL[f1] 0.010000, // FreqL[f2] 0.011973, // FreqL[f3] 0.010553, // FreqL[f4] 0.005945, // FreqL[f5] 0.006349, // FreqL[f6] 0.009401, // FreqL[f7] 0.008577, // FreqL[f8] 0.008186, // FreqL[f9] 0.008159, // FreqL[fa] 0.005033, // FreqL[fb] 0.008714, // FreqL[fc] 0.010614, // FreqL[fd] 0.006554 // FreqL[fe] ); mSecoundByteStdDev: 0.009909; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.324739 // Trial Byte Weight ); doublecmd-1.1.30/components/chsdet/src/sbseq/0000755000175000001440000000000015104114162020130 5ustar alexxusersdoublecmd-1.1.30/components/chsdet/src/sbseq/LangHebrewModel.pas0000644000175000001440000002670715104114162023650 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangHebrewModel.pas,v 1.1 2007/05/20 15:46:20 ya_nick Exp $ unit LangHebrewModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) //Windows-1255 language model //Character Mapping Table: const win1255_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, //40 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, //50 253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, //60 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, //70 124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, 215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, 106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, 238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253 ); //Model Table: //total sequences: 100% //first 512 sequences: 98.4004% //first 1024 sequences: 1.5981% //rest sequences: 0.087% //negative sequences: 0.0015% HebrewLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, 3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, 1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, 1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, 1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, 1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, 0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, 0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, 0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, 0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, 0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, 0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, 0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, 0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, 1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, 0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, 0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, 0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, 2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, 0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, 1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, 1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, 2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, 0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, 0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0 ); Win1255Model: SequenceModel = ( charToOrderMap: @win1255_CharToOrderMap; precedenceMatrix: @HebrewLangModel; mTypicalPositiveRatio: 0.984004; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1255_CHARSET; ); implementation end. doublecmd-1.1.30/components/chsdet/src/sbseq/LangGreekModel.pas0000644000175000001440000003161315104114162023461 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangGreekModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangGreekModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) const //Character Mapping Table: Latin7_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 +253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, //b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253 //f0 ); win1253_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 +253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, //b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253 //f0 ); //Model Table: //total sequences: 100% //first 512 sequences: 98.2851% //first 1024 sequences:1.7001% //rest sequences: 0.0359% //negative sequences: 0.0148% GreekLangModel: array [0..Pred(32*128)] of byte = ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, 2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, 2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, 2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, 0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, 3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, 2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, 0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, 0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, 0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, 0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, 0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, 0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, 0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, 0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, 0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, 0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, 0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, 0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, 0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, 0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, 0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, 0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, 0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, 0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ); Latin7Model: SequenceModel = ( charToOrderMap: @Latin7_CharToOrderMap; precedenceMatrix: @GreekLangModel; mTypicalPositiveRatio: 0.982851; keepEnglishLetter: FALSE; CharsetID: ISO_8859_7_CHARSET; ); Win1253Model: SequenceModel = ( charToOrderMap: @win1253_CharToOrderMap; precedenceMatrix: @GreekLangModel; mTypicalPositiveRatio: 0.982851; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1253_CHARSET; ); implementation end. doublecmd-1.1.30/components/chsdet/src/sbseq/LangCyrillicModel.pas0000644000175000001440000004345415104114162024204 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangCyrillicModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangCyrillicModel; interface uses nsCore, nsSBCharSetProber; (*KOI8-R language model*) const KOI8R_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, //80 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, //90 223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, //a0 238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, //b0 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, //c0 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, //d0 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, //e0 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70 //f0 ); win1251_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16 ); latin5_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255 ); macCyrillic_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255 ); IBM855_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, 206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, 220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, 230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, 250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255 ); IBM866_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255 ); //Model Table: //total sequences: 100% //first 512 sequences: 97.6601% //first 1024 sequences: 2.3389% //rest sequences: 0.1237% //negative sequences: 0.0009% RussianLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, 3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, 1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, 1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, 2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, 3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, 1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, 2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, 1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, 1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, 1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, 1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, 3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, 1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, 2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, 1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, 2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, 1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, 1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, 1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, 3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, 3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, 1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, 1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, 0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, 1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, 1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, 1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, 2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, 1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, 1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, 2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, 1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, 1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, 0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, 0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, 2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, 0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 ); Koi8rModel: SequenceModel = ( charToOrderMap: @KOI8R_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: KOI8_R_CHARSET; ); Win1251Model: SequenceModel = ( charToOrderMap: @win1251_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1251_CHARSET; ); Latin5Model: SequenceModel = ( charToOrderMap: @latin5_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: ISO_8859_5_CHARSET; ); MacCyrillicModel: SequenceModel = ( charToOrderMap: @macCyrillic_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: X_MAC_CYRILLIC_CHARSET; ); Ibm866Model: SequenceModel = ( charToOrderMap: @IBM866_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: IBM866_CHARSET; ); Ibm855Model: SequenceModel = ( charToOrderMap: @IBM855_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: IBM855_CHARSET; ); implementation end. doublecmd-1.1.30/components/chsdet/src/sbseq/LangBulgarianModel.pas0000644000175000001440000003201315104114162024323 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangBulgarianModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangBulgarianModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) //Character Mapping Table: //this talbe is modified base on win1251BulgarianCharToOrderMap, so //only number <64 is sure valid const Latin5_BulgarianCharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, //80 210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, //90 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, //a0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //b0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, //c0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //d0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, //e0 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253 //f0 ); win1251BulgarianCharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, //80 221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, //90 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, //a0 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, //b0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //c0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, //d0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //e0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16 //f0 ); //Model Table: //total sequences: 100% //first 512 sequences: 96.9392% //first 1024 sequences:3.0618% //rest sequences: 0.2992% //negative sequences: 0.0020% BulgarianLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, 3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, 0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, 0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, 0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, 2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, 3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, 1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, 3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, 1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, 2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, 2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, 3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, 1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, 2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, 2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, 1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, 2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, 2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, 2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, 1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, 2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, 1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, 3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, 1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, 3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, 1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, 2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, 1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, 2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, 1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, 2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, 1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, 2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, 1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, 0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, 1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, 1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, 1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, 0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, 1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, 1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ); Latin5BulgarianModel: SequenceModel = ( charToOrderMap: @Latin5_BulgarianCharToOrderMap; precedenceMatrix: @BulgarianLangModel; mTypicalPositiveRatio: 0.969392; keepEnglishLetter: FALSE; CharsetID: ISO_8859_5_CHARSET; ); Win1251BulgarianModel: SequenceModel = ( charToOrderMap: @win1251BulgarianCharToOrderMap; precedenceMatrix: @BulgarianLangModel; mTypicalPositiveRatio: 0.969392; keepEnglishLetter: FALSE; CharsetID: WINDOWS_BULGARIAN_CHARSET; ); implementation end. doublecmd-1.1.30/components/chsdet/src/nsUniversalDetector.pas0000644000175000001440000002550515104114162023532 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsUniversalDetector.pas,v 1.7 2013/05/16 15:41:14 ya_nick Exp $ unit nsUniversalDetector; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUM_OF_CHARSET_PROBERS = 4; type eInputState = ( isPureAscii = 0, isEscAscii = 1, isHighbyte = 2 ); TnsUniversalDetector = class(TObject) protected mInputState: eInputState; mDone: Boolean; mStart: Boolean; mGotData: Boolean; mLastChar: AnsiChar; mDetectedCharset: eInternalCharsetID; mCharSetProbers: array[0..Pred(NUM_OF_CHARSET_PROBERS)] of TCustomDetector; mEscCharSetProber: TCustomDetector; mDetectedBOM: eBOMKind; procedure Report(aCharsetID: eInternalCharsetID); function CheckBOM(aBuf: pAnsiChar; aLen: integer): integer; function GetCharsetID(CodePage: integer): eInternalCharsetID; procedure DoEnableCharset(Charset: eInternalCharsetID; SetEnabledTo: Boolean); public constructor Create; destructor Destroy; override; procedure Reset; function HandleData(aBuf: pAnsiChar; aLen: integer): nsResult; procedure DataEnd; function GetDetectedCharsetInfo: nsCore.rCharsetInfo; function GetKnownCharset(out KnownCharsets: String): integer; procedure GetAbout(out About: rAboutHolder); procedure DisableCharset(CodePage: integer); property Done: Boolean read mDone; property BOMDetected: eBOMKind read mDetectedBOM; end; implementation uses SysUtils, nsGroupProber, nsMBCSMultiProber, nsSBCSGroupProber, nsEscCharsetProber, nsLatin1Prober, MBUnicodeMultiProber; const MINIMUM_THRESHOLD: float = 0.20; AboutInfo: rAboutHolder = ( MajorVersionNr: 0; MinorVersionNr: 2; BuildVersionNr: 8; About: 'Charset Detector Library. Copyright (C) 2006 - 2013, Nick Yakowlew. http://chsdet.sourceforge.net'; ); { TnsUniversalDetector } constructor TnsUniversalDetector.Create; begin inherited Create; mCharSetProbers[0] := TnsMBCSMultiProber.Create; mCharSetProbers[1] := TnsSBCSGroupProber.Create; mCharSetProbers[2] := TnsLatin1Prober.Create; mCharSetProbers[3] := TMBUnicodeMultiProber.Create; mEscCharSetProber := TnsEscCharSetProber.Create; Reset; end; destructor TnsUniversalDetector.Destroy; var i: integer; begin for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do mCharSetProbers[i].Free; mEscCharSetProber.Free; inherited; end; procedure TnsUniversalDetector.DataEnd; var proberConfidence: float; maxProberConfidence: float; maxProber: int32; i: integer; begin if not mGotData then (* we haven't got any data yet, return immediately *) (* caller program sometimes call DataEnd before anything has been sent to detector*) exit; if mDetectedCharset <> UNKNOWN_CHARSET then begin mDone := TRUE; Report(mDetectedCharset); exit; end; case mInputState of isHighbyte: begin maxProberConfidence := 0.0; maxProber := 0; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin proberConfidence := mCharSetProbers[i].GetConfidence; if proberConfidence > maxProberConfidence then begin maxProberConfidence := proberConfidence; maxProber := i; end; end; (*do not report anything because we are not confident of it, that's in fact a negative answer*) if maxProberConfidence > MINIMUM_THRESHOLD then Report(mCharSetProbers[maxProber].GetDetectedCharset); end; isEscAscii: begin mDetectedCharset := mEscCharSetProber.GetDetectedCharset; end; else begin mDetectedCharset := PURE_ASCII_CHARSET; end; end; {case} {$IFDEF DEBUG_chardet} AddDump('Universal detector - DataEnd'); {$ENDIF} end; function TnsUniversalDetector.HandleData(aBuf: pAnsiChar; aLen: integer): nsResult; var i: integer; st: eProbingState; begin if mDone then begin Result := NS_OK; exit; end; if aLen > 0 then mGotData := TRUE; (*If the data starts with BOM, we know it is UTF*) if mStart then begin mStart := FALSE; if CheckBOM(aBuf, aLen) > 0 then begin case mDetectedBOM of BOM_UTF8: mDetectedCharset := UTF8_CHARSET; BOM_UTF16_LE: mDetectedCharset := UTF16_LE_CHARSET; BOM_UTF16_BE: mDetectedCharset := UTF16_BE_CHARSET; BOM_UCS4_LE: mDetectedCharset := UTF32_LE_CHARSET; BOM_UCS4_BE: mDetectedCharset := UTF32_BE_CHARSET; BOM_UCS4_2143: mDetectedCharset := UCS4_LE_CHARSET; BOM_UCS4_3412: mDetectedCharset := UCS4_BE_CHARSET end; mDone := TRUE; Result := NS_OK; Exit; end; end; {if mStart} for i := 0 to Pred(aLen) do (*other than 0xa0, if every othe character is ascii, the page is ascii*) if (aBuf[i] > #$80) and (aBuf[i] <> #$A0) then begin (*Since many Ascii only page contains NBSP *) (*we got a non-ascii byte (high-byte)*) if mInputState <> isHighbyte then begin (*adjust state*) mInputState := isHighbyte; end; end else begin (*ok, just pure ascii so *) if (mInputState = isPureAscii) and ((aBuf[i] = #$1B) or (aBuf[i] = '{') and (mLastChar = '~')) then (*found escape character or HZ "~{"*) mInputState := isEscAscii; mLastChar := aBuf[i]; end; case mInputState of isEscAscii: begin {$IFDEF DEBUG_chardet} AddDump('Universal detector - Escape Detector started'); {$ENDIF} st := mEscCharSetProber.HandleData(aBuf, aLen); if st = psFoundIt then begin mDone := TRUE; mDetectedCharset := mEscCharSetProber.GetDetectedCharset; end; end; isHighbyte: begin {$IFDEF DEBUG_chardet} AddDump('Universal detector - HighByte Detector started'); {$ENDIF} for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin st := mCharSetProbers[i].HandleData(aBuf, aLen); if st = psFoundIt then begin mDone := TRUE; mDetectedCharset := mCharSetProbers[i].GetDetectedCharset; break; end; end; end; else (*pure ascii*) begin (*do nothing here*) end; end; {case} Result := NS_OK; end; procedure TnsUniversalDetector.Report(aCharsetID: eInternalCharsetID); begin if (aCharsetID <> UNKNOWN_CHARSET) and (mDetectedCharset = UNKNOWN_CHARSET) then mDetectedCharset := aCharsetID; end; procedure TnsUniversalDetector.Reset; var i: integer; begin mDone := FALSE; mStart := TRUE; mDetectedCharset := UNKNOWN_CHARSET; mGotData := FALSE; mInputState := isPureAscii; mLastChar := #0; (*illegal value as signal*) mEscCharSetProber.Reset; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do mCharSetProbers[i].Reset; mDetectedBOM := BOM_Not_Found; end; function TnsUniversalDetector.GetDetectedCharsetInfo: nsCore.rCharsetInfo; begin Result := KNOWN_CHARSETS[mDetectedCharset]; end; function TnsUniversalDetector.GetKnownCharset(out KnownCharsets: String): integer; var i: eInternalCharsetID; begin KnownCharsets := ''; for i := low(KNOWN_CHARSETS) to high(KNOWN_CHARSETS) do KnownCharsets := KnownCharsets + #10 + KNOWN_CHARSETS[i].Name + ' - ' + IntToStr(KNOWN_CHARSETS[i].CodePage); Result := Length(KnownCharsets); end; procedure TnsUniversalDetector.GetAbout(out About: rAboutHolder); begin About := AboutInfo; end; function TnsUniversalDetector.CheckBOM(aBuf: pAnsiChar; aLen: integer): integer; var bom: eBOMKind; i: integer; same: Boolean; begin Result := 0; mDetectedBOM := BOM_Not_Found; for bom := Succ(low(eBOMKind)) to high(eBomKind) do if aLen > KNOWN_BOM[bom].Length then begin same := true; for i := 0 to KNOWN_BOM[bom].Length - 1 do if (aBuf[i] <> KNOWN_BOM[bom].BOM[i]) then begin same := false; break; end; if same then begin mDetectedBOM := bom; Result := KNOWN_BOM[bom].Length; exit; end; end; end; procedure TnsUniversalDetector.DisableCharset(CodePage: integer); begin DoEnableCharset(GetCharsetID(CodePage), false); end; function TnsUniversalDetector.GetCharsetID(CodePage: integer): eInternalCharsetID; var i: integer; begin for i := integer(low(KNOWN_CHARSETS)) + 1 to integer(high(KNOWN_CHARSETS)) do if (KNOWN_CHARSETS[eInternalCharsetID(i)].CodePage = CodePage) then begin Result := eInternalCharsetID(i); exit; end; Result := UNKNOWN_CHARSET; end; procedure TnsUniversalDetector.DoEnableCharset(Charset: eInternalCharsetID; SetEnabledTo: Boolean); var i: integer; begin if Charset = UNKNOWN_CHARSET then exit; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin if (mCharSetProbers[i] is TnsGroupProber) then begin if TnsGroupProber(mCharSetProbers[i]).EnableCharset(Charset, SetEnabledTo) then exit; end; if (mCharSetProbers[i] is TnsEscCharSetProber) then begin TnsEscCharSetProber(mCharSetProbers[i]).Enabled := SetEnabledTo; end; if (mCharSetProbers[i] is TCustomDetector) then begin if TCustomDetector(mCharSetProbers[i]).GetDetectedCharset = Charset then TCustomDetector(mCharSetProbers[i]).Enabled := SetEnabledTo; end; end; end; end. doublecmd-1.1.30/components/chsdet/src/nsSBCharSetProber.pas0000644000175000001440000001622015104114162023012 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsSBCharSetProber.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsSBCharSetProber; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUMBER_OF_SEQ_CAT = 4; type SequenceModel = record charToOrderMap: pAnsiChar; (* [256] table use to find a char's order*) precedenceMatrix: pAnsiChar; (* [SAMPLE_SIZE][SAMPLE_SIZE]; table to find a 2-char sequence's frequency*) mTypicalPositiveRatio: float; (* = freqSeqs / totalSeqs *) keepEnglishLetter: Boolean; (* says if this script contains English characters (not implemented)*) CharsetID: eInternalCharsetID; end; TnsSingleByteCharSetProber = class(TCustomDetector) protected mModel: SequenceModel; mReversed: Boolean; (* TRUE if we need to reverse every pair in the model lookup*) mLastOrder: byte; (*char order of last character*) mTotalSeqs: uInt32; mSeqCounters: array [0..Pred(NUMBER_OF_SEQ_CAT)] of uInt32; mTotalChar: uInt32; (*characters that fall in our sampling range*) mFreqChar: uInt32; (* Optional auxiliary prober for name decision. created and destroyed by the GroupProber*) mNameProber: TCustomDetector; public constructor Create(model: SequenceModel; reversed: Boolean = FALSE; nameProber: TCustomDetector = nil); reintroduce; destructor Destroy; override; function GetDetectedCharset: eInternalCharsetID; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; procedure Reset; override; function GetConfidence: float; override; (* This feature is not implemented yet. any current language model*) (* contain this parameter as PR_FALSE. No one is looking at this*) (* parameter or calling this method.*) (* Moreover, the nsSBCSGroupProber which calls the HandleData of this*) (* prober has a hard-coded call to FilterWithoutEnglishLetters which gets rid*) (* of the English letters.*) function KeepEnglishLetters: Boolean; virtual; (* (not implemented)*) end; implementation {$ifdef DEBUG_chardet} uses TypInfo, SysUtils; {$endif} const SAMPLE_SIZE: byte = 64; SB_ENOUGH_REL_THRESHOLD = 1024; POSITIVE_SHORTCUT_THRESHOLD = SHORTCUT_THRESHOLD; NEGATIVE_SHORTCUT_THRESHOLD = 1 - POSITIVE_SHORTCUT_THRESHOLD; SYMBOL_CAT_ORDER: byte = 250; POSITIVE_CAT = (NUMBER_OF_SEQ_CAT-1); (*#define NEGATIVE_APPROACH 1*) {$ifdef NEGATIVE_APPROACH} NEGATIVE_CAT = 0; {$endif} { TnsSingleByteCharSetProber } constructor TnsSingleByteCharSetProber.Create(model: SequenceModel; reversed: Boolean = FALSE; nameProber: TCustomDetector = nil); begin inherited Create; mModel := model; mReversed := reversed; mNameProber := nameProber; Reset; end; destructor TnsSingleByteCharSetProber.Destroy; begin inherited; end; function TnsSingleByteCharSetProber.GetDetectedCharset: eInternalCharsetID; begin if mNameProber = nil then begin Result := mModel.CharsetID; exit; end; Result := mNameProber.GetDetectedCharset; end; (*#define NEGATIVE_APPROACH 1*) function TnsSingleByteCharSetProber.GetConfidence: float; var r: float; begin {$ifdef NEGATIVE_APPROACH} if mTotalSeqs > 0 then if mTotalSeqs > mSeqCounters[NEGATIVE_CAT] * 10 then begin Result := (mTotalSeqs-mSeqCounters[NEGATIVE_CAT] * 10) / mTotalSeqs * mFreqChar / mTotalChar; exit; end; Result := SURE_NO; {$else} (*POSITIVE_APPROACH*) if mTotalSeqs > 0 then begin r := (1.0) * mSeqCounters[POSITIVE_CAT] / mTotalSeqs / mModel.mTypicalPositiveRatio; r := r * mFreqChar / mTotalChar; if r >= 1.0 then r := SURE_YES; Result := r; exit; end; Result := SURE_NO; {$endif} end; function TnsSingleByteCharSetProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var order: byte; i: integer; cf: float; begin Result := inherited HandleData(aBuf, aLen); if Result = psNotMe then exit; // TODO - move here call to FilterWithoutEnglishLetters from nsSBCSGroupProber.pas // if not mModel.keepEnglishLetter then ... for i := 0 to Pred(aLen) do begin order := byte(mModel.charToOrderMap[byte(aBuf[i])]); if order < SYMBOL_CAT_ORDER then inc(mTotalChar); if order < SAMPLE_SIZE then begin inc(mFreqChar); if mLastOrder < SAMPLE_SIZE then begin inc(mTotalSeqs); {$ifdef DEBUG_chardet} //if ((mLastOrder * SAMPLE_SIZE + order) >= 4096) then AddDump(Format('oredr %4d for byte %4d last order %4d'+#10#13+ 'array index %4d array high %8d'+#10#13+ 'LangModel %s', [order,byte(aBuf[i]),mLastOrder, (mLastOrder * SAMPLE_SIZE + order),4096, getEnumName(TypeInfo(eInternalCharsetID), integer(mModel.CharsetID))])); {$endif} if not mReversed then inc(mSeqCounters[cardinal(mModel.precedenceMatrix[mLastOrder * SAMPLE_SIZE + order])]) else inc(mSeqCounters[cardinal(mModel.precedenceMatrix[order * SAMPLE_SIZE + mLastOrder])]); (* reverse the order of the letters in the lookup*) end; end; mLastOrder:= order; end; if mState = psDetecting then if mTotalSeqs > SB_ENOUGH_REL_THRESHOLD then begin cf := GetConfidence; if cf > POSITIVE_SHORTCUT_THRESHOLD then mState:= psFoundIt else if cf < NEGATIVE_SHORTCUT_THRESHOLD then mState:= psNotMe; end; Result := mState; end; function TnsSingleByteCharSetProber.KeepEnglishLetters: Boolean; begin Result := mModel.keepEnglishLetter; end; procedure TnsSingleByteCharSetProber.Reset; var i: integer; begin if mEnabled then mState := psDetecting else mState := psNotMe; mLastOrder := 255; for i := 0 to Pred(NUMBER_OF_SEQ_CAT) do mSeqCounters[i] := 0; mTotalSeqs := 0; mTotalChar := 0; mFreqChar := 0; end; end.doublecmd-1.1.30/components/chsdet/src/nsSBCSGroupProber.pas0000644000175000001440000001231515104114162023004 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsSBCSGroupProber.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsSBCSGroupProber; interface uses nsCore, nsGroupProber; type TnsSBCSGroupProber = class(TnsGroupProber) public constructor Create; reintroduce; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; // {$ifdef DEBUG_chardet} // procedure DumpStatus; override; // {$endif} end; implementation uses SysUtils, nsHebrewProber, nsSBCharSetProber, LangCyrillicModel, LangGreekModel, LangBulgarianModel, LangHebrewModel; { TnsSBCSGroupProber } const NUM_OF_PROBERS = 13; constructor TnsSBCSGroupProber.Create; var hebprober: TnsHebrewProber; i: integer; begin mNumOfProbers := NUM_OF_PROBERS; SetLength(mProbers, NUM_OF_PROBERS); SetLength(mIsActive, NUM_OF_PROBERS); SetLength(mProberStates, NUM_OF_PROBERS); mProbers[0] := TnsSingleByteCharSetProber.Create(Win1251Model); mProbers[1] := TnsSingleByteCharSetProber.Create(Koi8rModel); mProbers[2] := TnsSingleByteCharSetProber.Create(Latin5Model); mProbers[3] := TnsSingleByteCharSetProber.Create(MacCyrillicModel); mProbers[4] := TnsSingleByteCharSetProber.Create(Ibm866Model); mProbers[5] := TnsSingleByteCharSetProber.Create(Ibm855Model); mProbers[6] := TnsSingleByteCharSetProber.Create(Latin7Model); mProbers[7] := TnsSingleByteCharSetProber.Create(Win1253Model); mProbers[8] := TnsSingleByteCharSetProber.Create(Latin5BulgarianModel); mProbers[9] := TnsSingleByteCharSetProber.Create(Win1251BulgarianModel); hebprober := TnsHebrewProber.Create; // Notice: Any change in these indexes - 10,11,12 must be reflected // in the code below as well. mProbers[10]:= hebprober; mProbers[11]:= TnsSingleByteCharSetProber.Create(Win1255Model,FALSE,hebprober);(* Logical Hebrew*) mProbers[12]:= TnsSingleByteCharSetProber.Create(Win1255Model,TRUE,hebprober); (* Visual Hebrew*) (* Tell the Hebrew prober about the logical and visual probers*) if (mProbers[10]<>nil)and(mProbers[11]<>nil)and(mProbers[12]<>nil) then (* all are not null*) hebprober.SetModelProbers(mProbers[11],mProbers[12]) else (* One or more is null. avoid any Hebrew probing, null them all*) for i := 10 to 12 do begin mProbers[i].Free; mProbers[i] := nil; end; inherited Create; (* disable latin2 before latin1 is available, otherwise all latin1 *) (* will be detected as latin2 because of their similarity.*) // mProbers[10] = new nsSingleByteCharSetProber(&Latin2HungarianModel); // mProbers[11] = new nsSingleByteCharSetProber(&Win1250HungarianModel); end; function TnsSBCSGroupProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var newBuf1: pAnsiChar; newLen1: integer; begin newBuf1 := AllocMem(aLen); newLen1 := 0; (*apply filter to original buffer, and we got new buffer back*) (*depend on what script it is, we will feed them the new buffer *) (*we got after applying proper filter*) (*this is done without any consideration to KeepEnglishLetters*) (*of each prober since as of now, there are no probers here which*) (*recognize languages with English characters.*) Result := mState; try if (not FilterWithoutEnglishLetters(aBuf,aLen,newBuf1,newLen1)) or (newLen1 = 0) then exit; (* Nothing to see here, move on.*) inherited HandleData(newBuf1, newLen1); finally FreeMem(newBuf1, aLen); end; Result:= mState; end; {$ifdef DEBUG_chardet} procedure TnsSBCSGroupProber.DumpStatus; var i: integer; cf: float; i: integer; begin cf := GetConfidence; printf(' SBCS Group Prober --------begin status r'#13#10''); for i := 0 to Pred(NUM_OF_SBCS_PROBERS) do begin if 0 = mIsActive[i] then printf(' inactive: [%s] (i.e. confidence is too low).r'#13#10'',mProbers[i].GetCharSetName) else mProbers[i].DumpStatus; end; printf(' SBCS Group found best match [%s] confidence %f.r'#13#10'',mProbers[mBestGuess].GetCharSetName,cf); end; {$endif} end.doublecmd-1.1.30/components/chsdet/src/nsPkg.pas0000644000175000001440000000524715104114162020612 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsPkg.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit nsPkg; interface uses nsCore; type nsIdxSft = ( eIdxSft4bits = 3 // NOT used // eIdxSft8bits = 2, // eIdxSft16bits = 1 ); nsSftMsk = ( eSftMsk4bits = 7 // NOT used // eSftMsk8bits = 3, // eSftMsk16bits = 1 ); nsBitSft = ( eBitSft4bits = 2 // NOT used // eBitSft8bits = 3, // eBitSft16bits = 4 ); nsUnitMsk = ( eUnitMsk4bits = $0000000F // NOT used // eUnitMsk8bits = $000000FF, // eUnitMsk16bits = $0000FFFF ); nsPkgInt = record idxsft: nsIdxSft; sftmsk: nsSftMsk; bitsft: nsBitSft; unitmsk: nsUnitMsk; data: puInt32; end; pnsPkgInt = ^nsPkgInt; function PCK4BITS(a, b, c, d, e, f, g, h: integer): integer; function GETFROMPCK(i: integer; c: pnsPkgInt): integer; implementation function PCK16BITS(a: integer; b: integer): integer; begin Result:= ((b shl 16) or a); end; function PCK8BITS(a, b, c, d: integer): integer; begin Result:= PCK16BITS(((b shl 8) or a), ((d shl 8) or c)); end; function PCK4BITS(a, b, c, d, e, f, g, h: integer): integer; begin Result:= PCK8BITS(((b shl 4) or a), ((d shl 4) or c), ((f shl 4) or e), ((h shl 4) or g)); end; function GETFROMPCK(i: integer; c: pnsPkgInt): integer; begin Result:= (((auInt32(c^.data)[i shr integer(c^.idxsft)]) shr (i and integer(c^.sftmsk) shl integer(c^.bitsft))) and integer(c^.unitmsk)); end; end.doublecmd-1.1.30/components/chsdet/src/nsMBCSMultiProber.pas0000644000175000001440000002157215104114162023001 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsMBCSMultiProber.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit nsMBCSMultiProber; interface uses {$I dbg.inc} nsCore, MultiModelProber, JpCntx, CharDistribution; type TnsMBCSMultiProber = class (TMultiModelProber) private mDistributionAnalysis: array of TCharDistributionAnalysis; mContextAnalysis: array of TJapaneseContextAnalysis; mBestGuess: integer; function RunStatAnalyse(aBuf: pAnsiChar; aLen: integer): eProbingState; function GetConfidenceFor(index: integer): double; reintroduce; public constructor Create; reintroduce; destructor Destroy; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; function GetConfidence: double; override; procedure Reset; override; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} end; implementation uses SysUtils, nsCodingStateMachine {$ifdef DEBUG_chardet} ,TypInfo {$endif} ; {$I '.\mbclass\SJISLangModel.inc'} {$I '.\mbclass\EUCJPLangModel.inc'} {$I '.\mbclass\GB18030LangModel.inc'} {$I '.\mbclass\EUCKRLangModel.inc'} {$I '.\mbclass\Big5LangModel.inc'} {$I '.\mbclass\EUCTWLangModel.inc'} { TnsMBCSMultiProber } const NUM_OF_PROBERS = 6; constructor TnsMBCSMultiProber.Create; begin inherited Create; SetLength(mDistributionAnalysis, NUM_OF_PROBERS); SetLength(mContextAnalysis, NUM_OF_PROBERS); AddCharsetModel(SJISLangModel); mDistributionAnalysis[0] := TSJISDistributionAnalysis.Create; mContextAnalysis[0] := TSJISContextAnalysis.Create; AddCharsetModel(EUCJPLangModel); mDistributionAnalysis[1] := TEUCKRDistributionAnalysis.Create; mContextAnalysis[1] := nil; AddCharsetModel(GB18030LangModel); mDistributionAnalysis[2] := TGB2312DistributionAnalysis.Create; mContextAnalysis[2] := nil; AddCharsetModel(EUCKRLangModel); mDistributionAnalysis[3] := TEUCKRDistributionAnalysis.Create; mContextAnalysis[3] := nil; AddCharsetModel(Big5LangModel); mDistributionAnalysis[4] := TBig5DistributionAnalysis.Create; mContextAnalysis[4] := nil; AddCharsetModel(EUCTWLangModel); mDistributionAnalysis[5] := TEUCTWDistributionAnalysis.Create; mContextAnalysis[5] := nil; end; destructor TnsMBCSMultiProber.Destroy; var i: integer; begin inherited; for i := 0 to Pred(mCharsetsCount) do begin if mDistributionAnalysis[i] <> nil then mDistributionAnalysis[i].Free; if mContextAnalysis[i] <> nil then mContextAnalysis[i].Free; end; SetLength(mDistributionAnalysis, 0); SetLength(mContextAnalysis, 0); end; {$ifdef DEBUG_chardet} procedure TnsMBCSMultiProber.DumpStatus(Dump: string); var i: integer; begin AddDump(Dump + ' Current state ' + GetEnumName(TypeInfo(eProbingState), integer(mState))); AddDump(Format('%30s - %10s - %5s', ['Prober', 'State', 'Conf'])); for i := 0 to Pred(mCharsetsCount) do AddDump(Format('%30s - %10s - %1.5f', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mCodingSM[i].GetCharsetID)), GetEnumName(TypeInfo(eProbingState), integer(mSMState[i])), GetConfidenceFor(i) ])); end; {$endif} function TnsMBCSMultiProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: pAnsiChar; hptr: pAnsiChar; keepNext: Boolean; begin keepNext := TRUE; (*assume previous is not ascii, it will do no harm except add some noise*) highbyteBuf := AllocMem(aLen); try hptr:= highbyteBuf; if hptr = nil then begin Result := mState; exit; end; for i:=0 to Pred(aLen) do begin if (Byte(aBuf[i]) > $80) then begin hptr^ := aBuf[i]; inc(hptr); keepNext:= TRUE; end else begin (*if previous is highbyte, keep this even it is a ASCII*) if keepNext = TRUE then begin hptr^ := aBuf[i]; inc(hptr); keepNext:= FALSE; end; end; end; {$IFDEF DEBUG_chardet} AddDump('MultiByte - HandleData - start'); {$endif} inherited HandleData(highbyteBuf, hptr - highbyteBuf); {$IFDEF DEBUG_chardet} AddDump('MultiByte - HandleData - end'); {$endif} finally FreeMem(highbyteBuf, aLen); end; // if we have more when one candidat then // try statisic analyse if (mState <> psFoundIt) or (mState <> psNotMe) then RunStatAnalyse(aBuf, aLen); Result := mState; end; function TnsMBCSMultiProber.RunStatAnalyse(aBuf: pAnsiChar; aLen: integer): eProbingState; var i, c: integer; codingState: nsSMState; charLen: byte; mLastChar: array [0..1] of AnsiChar; begin {$IFDEF DEBUG_chardet} AddDump('MultiByte - Stat Analyse - start'); {$endif} for i := 0 to Pred(mCharsetsCount) do begin if (mSMState[i] = psFoundIt) or (mSMState[i] = psNotMe) then continue; if mDistributionAnalysis[i] = nil then continue; for c := 0 to Pred(aLen) do begin codingState := mCodingSM[i].NextState(aBuf[c]); if codingState = eStart then begin charLen := mCodingSM[i].GetCurrentCharLen; if c = 0 then begin mLastChar[1] := aBuf[0]; if mContextAnalysis[i] <> nil then mContextAnalysis[i].HandleOneChar(mLastChar,charLen); mDistributionAnalysis[i].HandleOneChar(mLastChar,charLen); end else begin if mContextAnalysis[i] <> nil then mContextAnalysis[i].HandleOneChar(aBuf+c-1,charLen); mDistributionAnalysis[i].HandleOneChar(aBuf+c-1,charLen); end; end; if (mContextAnalysis[i] <> nil) then if mContextAnalysis[i].GotEnoughData and (GetConfidenceFor(i) > SHORTCUT_THRESHOLD) then begin mState := psFoundIt; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end; end; {$IFDEF DEBUG_chardet} AddDump('MultiByte - Stat Analyse - EXIT'); {$endif} Result := mState; end; function TnsMBCSMultiProber.GetConfidenceFor(index: integer): double; var contxtCf: double; distribCf: double; begin if mContextAnalysis[index] <> nil then contxtCf := mContextAnalysis[index].GetConfidence else contxtCf := -1; distribCf := mDistributionAnalysis[index].GetConfidence; if contxtCf > distribCf then Result := contxtCf else Result := distribCf; end; function TnsMBCSMultiProber.GetConfidence: double; var i: integer; conf, bestConf: double; begin mBestGuess := -1; bestConf := SURE_NO; for i := 0 to Pred(mCharsetsCount) do begin if (mSMState[i] = psFoundIt) or (mSMState[i] = psNotMe) then continue; if mDistributionAnalysis[i] = nil then continue; conf := GetConfidenceFor(i); if conf > bestConf then begin mBestGuess := i; bestConf := conf; end; end; Result := bestConf; if mBestGuess > -1 then mDetectedCharset := mCodingSM[mBestGuess].GetCharsetID else mDetectedCharset := UNKNOWN_CHARSET; end; procedure TnsMBCSMultiProber.Reset; var i: integer; begin inherited Reset; for i := 0 to Pred(mCharsetsCount) do begin if mDistributionAnalysis[i] <> nil then mDistributionAnalysis[i].Reset; if mContextAnalysis[i] <> nil then mContextAnalysis[i].Reset; end; end; end.doublecmd-1.1.30/components/chsdet/src/nsLatin1Prober.pas0000644000175000001440000001542115104114162022366 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsLatin1Prober.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsLatin1Prober; interface uses nsCore, CustomDetector; type TnsLatin1Prober = class(TCustomDetector) private mLastCharClass: AnsiChar; mFreqCounter: array of uInt32; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function GetConfidence: float; override; {$ifdef DEBUG_chardet} procedure DumpStatus; override; {$endif} end; implementation uses SysUtils; const FREQ_CAT_NUM = 4; UDF = 0; (* undefined*) OTH = 1; (*other*) ASC = 2; (* ascii capital letter*) ASS = 3; (* ascii small letter*) ACV = 4; (* accent capital vowel*) ACO = 5; (* accent capital other*) ASV = 6; (* accent small vowel*) ASO = 7; (* accent small other*) CLASS_NUM = 8; (* total classes*) Latin1_CharToClass: array [0..255] of byte = ( OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 00 - 07 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 08 - 0F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 10 - 17 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 18 - 1F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 20 - 27 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 28 - 2F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 30 - 37 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 38 - 3F OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 40 - 47 ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 48 - 4F ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 50 - 57 ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, // 58 - 5F OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 60 - 67 ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 68 - 6F ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 70 - 77 ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, // 78 - 7F OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, // 80 - 87 OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, // 88 - 8F UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 90 - 97 OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, // 98 - 9F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A0 - A7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A8 - AF OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B0 - B7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B8 - BF ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, // C0 - C7 ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, // C8 - CF ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, // D0 - D7 ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, // D8 - DF ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, // E0 - E7 ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, // E8 - EF ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, // F0 - F7 ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO // F8 - FF ); (* 0 : illegal 1 : very unlikely 2 : normal 3 : very likely *) Latin1ClassModel: array [0..63] of byte = ( (* UDF OTH ASC ASS ACV ACO ASV ASO *) (*UDF*) 0, 0, 0, 0, 0, 0, 0, 0, (*OTH*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASC*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASS*) 0, 3, 3, 3, 1, 1, 3, 3, (*ACV*) 0, 3, 3, 3, 1, 2, 1, 2, (*ACO*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASV*) 0, 3, 1, 3, 1, 1, 1, 3, (*ASO*) 0, 3, 1, 3, 1, 1, 3, 3 ); { TnsLatin1Prober } constructor TnsLatin1Prober.Create; begin inherited Create; SetLength(mFreqCounter, FREQ_CAT_NUM); Reset; end; destructor TnsLatin1Prober.Destroy; begin SetLength(mFreqCounter, 0); inherited; end; {$ifdef DEBUG_chardet} procedure TnsLatin1Prober.DumpStatus; begin printf(' Latin1Prober: %1.3f [%s]r'#13#10'',GetConfidence,GetCharSetName); end; {$endif} function TnsLatin1Prober.GetDetectedCharset: eInternalCharsetID; begin Result := WINDOWS_1252_CHARSET; end; function TnsLatin1Prober.GetConfidence: float; var confidence: float; total: cardinal; i: integer; begin if mState = psNotMe then begin Result := SURE_NO; exit; end; total := 0; for i := 0 to Pred(FREQ_CAT_NUM) do total := total + mFreqCounter[i]; if total = 0 then confidence := 0.0 else begin confidence := mFreqCounter[3] * 1.0 / total; confidence := confidence - (mFreqCounter[1] * 20.0 /total); end; if confidence < 0.0 then confidence := 0.0; confidence := confidence * (0.50); (* lower the confidence of latin1 so that other more accurate detector *) (* can take priority.*) Result := confidence; end; function TnsLatin1Prober.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var newBuf1: pAnsiChar; newLen1: integer; charClass: AnsiChar; freq: byte; i: integer; begin Result := inherited HandleData(aBuf, aLen); if Result = psNotMe then exit; newBuf1 := nil; newLen1 := 0; newBuf1 := AllocMem(aLen); try if not FilterWithEnglishLetters(aBuf,aLen,newBuf1,newLen1) then begin newBuf1 := aBuf; newLen1 := aLen; end; for i := 0 to Pred(newLen1) do begin charClass := AnsiChar(Latin1_CharToClass[integer(newBuf1[i])]); freq := Latin1ClassModel[byte(mLastCharClass) * CLASS_NUM + byte(charClass)]; if freq = 0 then begin mState:= psNotMe; break; end; inc(mFreqCounter[freq]); mLastCharClass := charClass; end; finally FreeMem(newBuf1, aLen); end; Result := mState; end; procedure TnsLatin1Prober.Reset; var i: integer; begin mState := psDetecting; mLastCharClass := AnsiChar(OTH); for i := 0 to Pred(FREQ_CAT_NUM) do mFreqCounter[i] := 0; end; end.doublecmd-1.1.30/components/chsdet/src/nsHebrewProber.pas0000644000175000001440000003547515104114162022465 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsHebrewProber.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsHebrewProber; interface uses nsCore, CustomDetector; (* This prober doesn't actually recognize a language or a charset.*) (* It is a helper prober for the use of the Hebrew model probers*) type TnsHebrewProber = class(TCustomDetector) protected mFinalCharLogicalScore: int32; mFinalCharVisualScore: int32; (* The two last characters seen in the previous buffer.*) mPrev: AnsiChar; mBeforePrev: AnsiChar; (* These probers are owned by the group prober.*) mLogicalProb: TCustomDetector; mVisualProb: TCustomDetector; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function GetState: eProbingState; override; procedure SetModelProbers(logicalPrb: TCustomDetector; visualPrb: TCustomDetector); {$ifdef DEBUG_chardet} procedure DumpStatus; override; {$endif} function isFinal(c: AnsiChar): Boolean; function isNonFinal(c: AnsiChar): Boolean; function GetConfidence: float; override; end; implementation (* windows-1255 / ISO-8859-8 code points of interest*) const FINAL_KAF = (#$ea); NORMAL_KAF = (#$eb); FINAL_MEM = (#$ed); NORMAL_MEM = (#$ee); FINAL_NUN = (#$ef); NORMAL_NUN = (#$f0); FINAL_PE = (#$f3); NORMAL_PE = (#$f4); FINAL_TSADI = (#$f5); // YaN - Not used // NORMAL_TSADI = (#$f6); (* Minimum Visual vs Logical final letter score difference.*) (* If the difference is below this, don't rely solely on the final letter score distance.*) MIN_FINAL_CHAR_DISTANCE = (5); (* Minimum Visual vs Logical model score difference.*) (* If the difference is below this, don't rely at all on the model score distance.*) MIN_MODEL_DISTANCE = (0.01); var VISUAL_HEBREW_CHARSET, LOGICAL_HEBREW_CHARSET: eInternalCharsetID; { TnsHebrewProber } constructor TnsHebrewProber.Create; begin inherited Create; mLogicalProb := nil; mVisualProb := nil; VISUAL_HEBREW_CHARSET := ISO_8859_8_CHARSET; LOGICAL_HEBREW_CHARSET := WINDOWS_1255_CHARSET; Reset; end; destructor TnsHebrewProber.Destroy; begin inherited; end; {$ifdef DEBUG_chardet} procedure TnsHebrewProber.DumpStatus; begin printf(' HEB: %d - %d [Logical-Visual score]r'#13#10'',mFinalCharLogicalScore,mFinalCharVisualScore); end; {$endif} (* Make the decision: is it Logical or Visual?*) function TnsHebrewProber.GetDetectedCharset: eInternalCharsetID; var finalsub: int32; modelsub: float; begin (* If the final letter score distance is dominant enough, rely on it.*) finalsub := mFinalCharLogicalScore-mFinalCharVisualScore; if finalsub >= MIN_FINAL_CHAR_DISTANCE then begin Result := LOGICAL_HEBREW_CHARSET; exit; end; if finalsub <= -(MIN_FINAL_CHAR_DISTANCE) then begin Result:= VISUAL_HEBREW_CHARSET; exit; end; (* It's not dominant enough, try to rely on the model scores instead.*) modelsub := mLogicalProb.GetConfidence - mVisualProb.GetConfidence; if modelsub > MIN_MODEL_DISTANCE then begin Result := LOGICAL_HEBREW_CHARSET; exit; end; if modelsub < -(MIN_MODEL_DISTANCE) then begin Result := VISUAL_HEBREW_CHARSET; exit; end; (* Still no good, back to final letter distance, maybe it'll save the day.*) if finalsub < 0 then begin Result := VISUAL_HEBREW_CHARSET; exit; end; (* (finalsub > 0 - Logical) or (don't know what to do) default to Logical.*) Result:= LOGICAL_HEBREW_CHARSET; end; function TnsHebrewProber.GetConfidence: float; begin Result := 0.0; end; function TnsHebrewProber.GetState: eProbingState; begin (* Remain active as long as any of the model probers are active.*) if (mLogicalProb.GetState = psNotMe) and (mVisualProb.GetState = psNotMe) then begin Result := psNotMe; exit; end; Result := psDetecting; end; function TnsHebrewProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; (* * Final letter analysis for logical-visual decision. * Look for evidence that the received buffer is either logical Hebrew or * visual Hebrew. * The following cases are checked: * 1) A word longer than 1 letter, ending with a final letter. This is an * indication that the text is laid out "naturally" since the final letter * really appears at the end. +1 for logical score. * 2) A word longer than 1 letter, ending with a Non-Final letter. In normal * Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with * the Non-Final form of that letter. Exceptions to this rule are mentioned * above in isNonFinal(). This is an indication that the text is laid out * backwards. +1 for visual score * 3) A word longer than 1 letter, starting with a final letter. Final letters * should not appear at the beginning of a word. This is an indication that * the text is laid out backwards. +1 for visual score. * * The visual score and logical score are accumulated throughout the text and * are finally checked against each other in GetCharSetName(). * No checking for final letters in the middle of words is done since that case * is not an indication for either Logical or Visual text. * * The input buffer should not contain any white spaces that are not (' ') * or any low-ascii punctuation marks. *) var curPtr: pAnsiChar; endPtr: pAnsiChar; cur: AnsiChar; begin (* check prober enabled*) inherited HandleData(aBuf, aLen); (* Both model probers say it's not them. No reason to continue.*) if GetState = psNotMe then begin Result:= psNotMe; exit; end; endPtr := aBuf + aLen; curPtr := aBuf; while curPtr < endPtr do begin cur := curPtr^; if cur = ' ' then begin (* We stand on a space - a word just ended*) if mBeforePrev <> ' ' then begin (* *(curPtr-2) was not a space so prev is not a 1 letter word*) if isFinal(mPrev) then inc(mFinalCharLogicalScore) else (* case (1) [-2:not space][-1:final letter][cur:space]*) if isNonFinal(mPrev) then inc(mFinalCharVisualScore); (* case (2) [-2:not space][-1:Non-Final letter][cur:space]*) end; end else begin (* Not standing on a space*) if (mBeforePrev = ' ') and isFinal(mPrev) and (cur <> ' ') then inc(mFinalCharVisualScore); (* case (3) [-2:space][-1:final letter][cur:not space]*) end; mBeforePrev := mPrev; mPrev := cur; inc(curPtr); end; (* Forever detecting, till the end or until both model probers return psNotMe (handled above).*) Result := psDetecting; end; function TnsHebrewProber.isFinal(c: AnsiChar): Boolean; begin Result := ((c=FINAL_KAF))or((c=FINAL_MEM))or((c=FINAL_NUN))or((c=FINAL_PE))or((c=FINAL_TSADI)); end; function TnsHebrewProber.isNonFinal(c: AnsiChar): Boolean; begin Result:= ((c=NORMAL_KAF))or((c=NORMAL_MEM))or((c=NORMAL_NUN))or((c=NORMAL_PE)); (* The normal Tsadi is not a good Non-Final letter due to words like *) (* 'lechotet' (to chat) containing an apostrophe after the tsadi. This *) (* apostrophe is converted to a space in FilterWithoutEnglishLetters causing *) (* the Non-Final tsadi to appear at an end of a word even though this is not *) (* the case in the original text.*) (* The letters Pe and Kaf rarely display a related behavior of not being a *) (* good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for *) (* example legally end with a Non-Final Pe or Kaf. However, the benefit of *) (* these letters as Non-Final letters outweighs the damage since these words *) (* are quite rare.*) end; procedure TnsHebrewProber.Reset; begin mFinalCharLogicalScore := 0; mFinalCharVisualScore := 0; mPrev := ' '; mBeforePrev := ' '; (* mPrev and mBeforePrev are initialized to space in order to simulate a word *) (* delimiter at the beginning of the data*) end; procedure TnsHebrewProber.SetModelProbers(logicalPrb, visualPrb: TCustomDetector); begin mLogicalProb := logicalPrb; mVisualProb := visualPrb; end; (** * ** General ideas of the Hebrew charset recognition ** * * Four main charsets exist in Hebrew: * "ISO-8859-8" - Visual Hebrew * "windows-1255" - Logical Hebrew * "ISO-8859-8-I" - Logical Hebrew * "x-mac-hebrew" - ?? Logical Hebrew ?? * * Both "ISO" charsets use a completely identical set of code points, whereas * "windows-1255" and "x-mac-hebrew" are two different proper supersets of * these code points. windows-1255 defines additional characters in the range * 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific * diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. * x-mac-hebrew defines similar additional code points but with a different * mapping. * * As as an average Hebrew text with no diacritics is concerned, all four * charsets are identical with respect to code points. Meaning that for the * main Hebrew alphabet, all four map the same values to all 27 Hebrew letters * (including final letters). * * The dominant difference between these charsets is their directionality. * "Visual" directionality means that the text is ordered as if the renderer is * not aware of a BIDI rendering algorithm. The renderer sees the text and * draws it from left to right. The text itself when ordered naturally is read * backwards. A buffer of Visual Hebrew generally looks like so: * "[last word of first line spelled backwards] [whole line ordered backwards * and spelled backwards] [first word of first line spelled backwards] * [end of line] [last word of second line] ... etc' " * adding punctuation marks, numbers and English text to visual text is * naturally also "visual" and from left to right. * * "Logical" directionality means the text is ordered "naturally" according to * the order it is read. It is the responsibility of the renderer to display * the text from right to left. A BIDI algorithm is used to place general * punctuation marks, numbers and English text in the text. * * Texts in x-mac-hebrew are almost impossible to find on the Internet. From * what little evidence I could find, it seems that its general directionality * is Logical. * * To sum up all of the above, the Hebrew probing mechanism knows about two * charsets: * Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are * backwards while line order is natural. For charset recognition purposes * the line order is unimportant (In fact, for this implementation, even * word order is unimportant). * Logical Hebrew - "windows-1255" - normal, naturally ordered text. * * "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be * specifically identified. * "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew * that contain special punctuation marks or diacritics is displayed with * some unconverted characters showing as question marks. This problem might * be corrected using another model prober for x-mac-hebrew. Due to the fact * that x-mac-hebrew texts are so rare, writing another model prober isn't * worth the effort and performance hit. * * *** The Prober *** * * The prober is divided between two nsSBCharSetProbers and an nsHebrewProber, * all of which are managed, created, fed data, inquired and deleted by the * nsSBCSGroupProber. The two nsSBCharSetProbers identify that the text is in * fact some kind of Hebrew, Logical or Visual. The final decision about which * one is it is made by the nsHebrewProber by combining final-letter scores * with the scores of the two nsSBCharSetProbers to produce a final answer. * * The nsSBCSGroupProber is responsible for stripping the original text of HTML * tags, English characters, numbers, low-ASCII punctuation characters, spaces * and new lines. It reduces any sequence of such characters to a single space. * The buffer fed to each prober in the SBCS group prober is pure text in * high-ASCII. * The two nsSBCharSetProbers (model probers) share the same language model: * Win1255Model. * The first nsSBCharSetProber uses the model normally as any other * nsSBCharSetProber does, to recognize windows-1255, upon which this model was * built. The second nsSBCharSetProber is told to make the pair-of-letter * lookup in the language model backwards. This in practice exactly simulates * a visual Hebrew model using the windows-1255 logical Hebrew model. * * The nsHebrewProber is not using any language model. All it does is look for * final-letter evidence suggesting the text is either logical Hebrew or visual * Hebrew. Disjointed from the model probers, the results of the nsHebrewProber * alone are meaningless. nsHebrewProber always returns 0.00 as confidence * since it never identifies a charset by itself. Instead, the pointer to the * nsHebrewProber is passed to the model probers as a helper "Name Prober". * When the Group prober receives a positive identification from any prober, * it asks for the name of the charset identified. If the prober queried is a * Hebrew model prober, the model prober forwards the call to the * nsHebrewProber to make the final decision. In the nsHebrewProber, the * decision is made according to the final-letters scores maintained and Both * model probers scores. The answer is returned in the form of the name of the * charset identified, either "windows-1255" or "ISO-8859-8". * *) end.doublecmd-1.1.30/components/chsdet/src/nsGroupProber.pas0000644000175000001440000001411515104114162022331 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsGroupProber.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit nsGroupProber; interface uses {$I dbg.inc} nsCore, CustomDetector; type TnsGroupProber = class(TCustomDetector) protected mNumOfProbers: integer; mProbers: array of TCustomDetector; mIsActive: array of Boolean; mBestGuess: integer; mActiveNum: integer; mProberStates: array of eProbingState; public constructor Create; override; destructor Destroy; override; procedure Reset; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; function GetConfidence: float; override; function EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} end; implementation uses SysUtils {$ifdef DEBUG_chardet} ,TypInfo {$endif} ; { TnsGroupProber } constructor TnsGroupProber.Create; begin inherited Create; Self.Reset; end; destructor TnsGroupProber.Destroy; var i: integer; begin for i := 0 to Pred(mNumOfProbers) do if mProbers[i] <> nil then mProbers[i].Free; SetLength(mProbers, 0); SetLength(mProberStates, 0); SetLength(mIsActive, 0); inherited; end; function TnsGroupProber.GetDetectedCharset: eInternalCharsetID; begin (*if we have no answer yet*) if mBestGuess = -1 then begin GetConfidence; (*no charset seems positive*) if mBestGuess = -1 then mBestGuess:= 0; (*we will use default.*) end; Result := mProbers[mBestGuess].GetDetectedCharset; end; function TnsGroupProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var i: integer; begin {$IFDEF DEBUG_chardet} AddDump('Group Prober - HandleData - start'); {$endif} for i:=0 to Pred(mNumOfProbers) do begin if (mProberStates[i] = psNotMe) or (mProberStates[i] = psFoundIt) then continue; mProberStates[i] := mProbers[i].HandleData(aBuf, aLen); if mProberStates[i] = psFoundIt then begin mBestGuess := i; mState := psFoundIt; break; end else if mProberStates[i] = psNotMe then begin mIsActive[i] := FALSE; dec(mActiveNum); if mActiveNum <= 0 then begin mState := psNotMe; break; end; end; end; Result := mState; {$IFDEF DEBUG_chardet} DumpStatus('Group Prober - HandleData - exit'); {$endif} end; procedure TnsGroupProber.Reset; var i: integer; begin mActiveNum := 0; for i := 0 to Pred(mNumOfProbers) do begin if mProbers[i] <> nil then begin mProbers[i].Reset; mIsActive[i] := mProbers[i].Enabled; if mProbers[i].Enabled then begin mProberStates[i] := psDetecting; inc(mActiveNum); end else mProberStates[i] := psNotMe; end else mIsActive[i] := FALSE; end; mBestGuess := -1; mEnabled := (mActiveNum > 0); if mEnabled then mState := psDetecting else mState := psNotMe; end; function TnsGroupProber.GetConfidence: float; var i: integer; bestConf: float; cf: float; begin bestConf := 0.0; case mState of psFoundIt: begin Result := SURE_YES; (*sure yes*) exit; end; psNotMe: begin Result := SURE_NO; (*sure no*) exit; end; else for i := 0 to Pred(mNumOfProbers) do begin if not mIsActive[i] then continue; cf := mProbers[i].GetConfidence; if bestConf < cf then begin bestConf := cf; mBestGuess := i; end; end; end;{case} {$IFDEF DEBUG_chardet} DumpStatus('Group Prober - GetConfidience'); {$endif} Result := bestConf; end; function TnsGroupProber.EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; var i: integer; begin for i := 0 to Pred(mNumOfProbers) do if mProbers[i].GetDetectedCharset = Charset then begin Result := true; mProbers[i].Enabled := NewValue; exit; end; Result := false; end; {$ifdef DEBUG_chardet} procedure TnsGroupProber.DumpStatus(Dump: string); var i: integer; begin inherited DumpStatus(Dump); inherited DumpStatus(Format('%30s - %5s - %5s', ['Prober', 'Active', 'Conf'])); for i := 0 to Pred(mNumOfProbers) do inherited DumpStatus(Format('%30s - %5s - %1.5f', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mProbers[i].GetDetectedCharset)), BoolToStr(mIsActive[i], True), mProbers[i].GetConfidence])); end; {$endif} end. doublecmd-1.1.30/components/chsdet/src/nsEscCharsetProber.pas0000644000175000001440000000444715104114162023270 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsEscCharsetProber.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsEscCharsetProber; interface uses nsCore, MultiModelProber; type TnsEscCharSetProber = class (TMultiModelProber) public constructor Create; override; function GetConfidence: float; override; end; implementation uses nsCodingStateMachine, CustomDetector; {$I '.\mbclass\ISO2022KRLangModel.inc'} {$I '.\mbclass\ISO2022JPLangModel.inc'} {$I '.\mbclass\ISO2022CNLangModel.inc'} {$I '.\mbclass\HZLangModel.inc'} { TnsEscCharSetProber } const NUM_OF_ESC_CHARSETS = 4; constructor TnsEscCharSetProber.Create; begin inherited; AddCharsetModel(HZSMModel); AddCharsetModel(ISO2022CNSMModel); AddCharsetModel(ISO2022JPSMModel); AddCharsetModel(ISO2022KRSMModel); Reset; end; function TnsEscCharSetProber.GetConfidence: float; begin case mState of psFoundIt: Result := SURE_YES; psNotMe: Result := SURE_NO; psDetecting: Result := (SURE_YES + SURE_NO) / 2; else Result := 1.1 * SURE_NO; end; end; end. doublecmd-1.1.30/components/chsdet/src/nsCore.pas0000644000175000001440000002740115104114162020755 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsCore.pas,v 1.5 2013/04/23 19:47:10 ya_nick Exp $ unit nsCore; interface type int16 = smallint; int32 = integer; uInt32 = cardinal; aByteArray = array of Byte; puInt32 = ^uInt32; auInt32 = array of uInt32; pInt16 = ^int16; aInt16 = array of int16; const SURE_YES: double = 0.99; SURE_NO: double = 0.01; const ENOUGH_DATA_THRESHOLD: cardinal = 1024; SHORTCUT_THRESHOLD = 0.95; type eProbingState = ( psDetecting = 0, //We are still detecting, no sure answer yet, but caller can ask for confidence. psFoundIt = 1, //That's a positive answer psNotMe = 2 //Negative answer ); type nsResult = uInt32; const NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; type float = double; rAboutHolder = record MajorVersionNr: Cardinal; MinorVersionNr: Cardinal; BuildVersionNr: Cardinal; About: pChar; end; eBOMKind = ( BOM_Not_Found, BOM_UCS4_BE, // 00 00 FE FF UCS-4, big-endian machine (1234 order) BOM_UCS4_LE, // FF FE 00 00 UCS-4, little-endian machine (4321 order) BOM_UCS4_2143, // 00 00 FF FE UCS-4, unusual octet order (2143) BOM_UCS4_3412, // FE FF 00 00 UCS-4, unusual octet order (3412) BOM_UTF16_BE, // FE FF ## ## UTF-16, big-endian BOM_UTF16_LE, // FF FE ## ## UTF-16, little-endian BOM_UTF8 // EF BB BF UTF-8 ); rBOMDef = record Length: integer; BOM: array [0..3] of AnsiChar; end; const KNOWN_BOM: array [eBOMKind] of rBOMDef = ( (Length: 00; BOM: (#$00, #$00, #$00, #$00)), (Length: 04; BOM: (#$00, #$00, #$FE, #$FF)), (Length: 04; BOM: (#$FF, #$FE, #$00, #$00)), (Length: 04; BOM: (#$00, #$00, #$FF, #$FE)), (Length: 04; BOM: (#$FE, #$FF, #$00, #$00)), (Length: 02; BOM: (#$FE, #$FF, #$00, #$00)), (Length: 02; BOM: (#$FF, #$FE, #$00, #$00)), (Length: 03; BOM: (#$EF, #$BB, #$BF, #$00)) ); // "extended" charset info type rCharsetInfo = record Name: PAnsiChar; CodePage: Integer; Language: PAnsiChar; end; eInternalCharsetID = ( UNKNOWN_CHARSET = 000, PURE_ASCII_CHARSET = 001, UTF8_CHARSET = 002, UCS4_BE_CHARSET = 003, UTF16_BE_CHARSET = 004, UTF32_BE_CHARSET = 005, UCS4_LE_CHARSET = 006, UTF32_LE_CHARSET = 007, UTF16_LE_CHARSET = 008, LATIN5_BULGARIAN_CHARSET = 009, WINDOWS_BULGARIAN_CHARSET = 010, KOI8_R_CHARSET = 011, WINDOWS_1251_CHARSET = 012, ISO_8859_5_CHARSET = 013, X_MAC_CYRILLIC_CHARSET = 014, IBM866_CHARSET = 015, IBM855_CHARSET = 016, ISO_8859_7_CHARSET = 017, WINDOWS_1253_CHARSET = 018, ISO_8859_8_CHARSET = 019, WINDOWS_1255_CHARSET = 020, BIG5_CHARSET = 021, ISO_2022_CN_CHARSET = 022, ISO_2022_JP_CHARSET = 023, ISO_2022_KR_CHARSET = 024, EUC_JP_CHARSET = 025, EUC_KR_CHARSET = 026, X_EUC_TW_CHARSET = 027, SHIFT_JIS_CHARSET = 028, GB18030_CHARSET = 029, HZ_GB_2312_CHARSET = 030, WINDOWS_1252_CHARSET = 031 ); const KNOWN_CHARSETS: array [eInternalCharsetID] of rCharsetInfo = ( // UNKNOWN_CHARSET ( Name: 'Unknown'; CodePage: -1; Language: 'Unknown' ), // PURE_ASCII_CHARSET ( Name: 'ASCII'; CodePage: 0; Language: 'ASCII' ), // UTF8_CHARSET ( Name: 'UTF-8'; CodePage: 65001; Language: 'Unicode' ), // UCS4_BE_CHARSET ( Name: 'X-ISO-10646-UCS-4-3412'; CodePage: 12001; Language: 'Unicode' ), // UTF16_BE_CHARSET ( Name: 'UTF-16BE'; CodePage: 1201; Language: 'Unicode' ), // UTF32_BE_CHARSET ( Name: 'UTF-32BE'; CodePage: 12001; Language: 'Unicode' ), // UCS4_LE_CHARSET ( Name: 'X-ISO-10646-UCS-4-2143'; CodePage: 12000; Language: 'Unicode' ), // UTF32_LE_CHARSET ( Name: 'UTF-32LE'; CodePage: 12000; Language: 'Unicode' ), // UTF16_LE_CHARSET ( Name: 'UTF-16LE'; CodePage: 1200; Language: 'Unicode' ), // LATIN5_BULGARIAN_CHARSET ( Name: 'ISO-8859-5'; CodePage: 28595; Language: 'Bulgarian' ), // WINDOWS_BULGARIAN_CHARSET ( Name: 'windows-1251'; CodePage: 1251; Language: 'Bulgarian' ), // KOI8_R_CHARSET ( Name: 'KOI8-R'; CodePage: 20866; Language: 'russian' ), // WINDOWS_1251_CHARSET ( Name: 'windows-1251'; CodePage: 1251; Language: 'russian' ), // ISO_8859_5_CHARSET ( Name: 'ISO-8859-5'; CodePage: 28595; Language: 'russian' ), // X_MAC_CYRILLIC_CHARSET ( Name: 'x-mac-cyrillic'; CodePage: 10007; Language: 'russian' ), // IBM866_CHARSET ( Name: 'IBM866'; CodePage: 866; Language: 'russian' ), // IBM855_CHARSET ( Name: 'IBM855'; CodePage: 855; Language: 'russian' ), // ISO_8859_7_CHARSET ( Name: 'ISO-8859-7'; CodePage: 28597; Language: 'greek' ), // WINDOWS_1253_CHARSET ( Name: 'windows-1253'; CodePage: 1253; Language: 'greek' ), // ISO_8859_8_CHARSET ( Name: 'ISO-8859-8'; CodePage: 28598; Language: 'hebrew' ), // WINDOWS_1255_CHARSET ( Name: 'windows-1255'; CodePage: 1255; Language: 'hebrew' ), // BIG5_CHARSET ( Name: 'Big5'; CodePage: 950; Language: 'ch' ), // ISO_2022_CN_CHARSET ( Name: 'ISO-2022-CN'; CodePage: 50227; Language: 'ch'; ), // ISO_2022_JP_CHARSET ( Name: 'ISO-2022-JP'; CodePage: 50222; Language: 'japanese'; ), // ISO_2022_KR_CHARSET ( Name: 'ISO-2022-KR'; CodePage: 50225; Language: 'kr'; ), // EUC_JP_CHARSET ( Name: 'EUC-JP'; CodePage: 51932; Language: 'japanese'; ), // EUC_KR_CHARSET ( Name: 'EUC-KR'; CodePage: 51949; Language: 'kr'; ), // X_EUC_TW_CHARSET ( Name: 'x-euc-tw'; CodePage: 51936; Language: 'ch'; ), // SHIFT_JIS_CHARSET ( Name: 'Shift_JIS'; CodePage: 932; Language: 'japanese'; ), // GB18030_CHARSET ( Name: 'GB18030'; CodePage: 54936; Language: 'ch'; ), // HZ_GB_2312_CHARSET ( Name: 'HZ-GB-2312'; CodePage: 52936; Language: 'ch'; ), // WINDOWS_1252_CHARSET ( Name: 'windows-1252'; CodePage: 1252; Language: 'eu'; ) ); (* Helper functions used in the Latin1 and Group probers.*) (* both functions Allocate a new buffer for newBuf. This buffer should be *) (* freed by the caller using PR_FREEIF.*) (* Both functions return PR_FALSE in case of memory allocation failure.*) function FilterWithoutEnglishLetters(aBuf: pAnsiChar; aLen: integer; var newBuf: pAnsiChar; var newLen: integer): Boolean; function FilterWithEnglishLetters(aBuf: pAnsiChar; aLen: integer; var newBuf: pAnsiChar; var newLen: integer): Boolean; implementation function FilterWithEnglishLetters(aBuf: pAnsiChar; aLen: integer; var newBuf: pAnsiChar; var newLen: integer): Boolean; var newptr: pAnsiChar; prevPtr: pAnsiChar; curPtr: pAnsiChar; isInTag: Boolean; begin //do filtering to reduce load to probers isInTag := FALSE; newLen := 0; newptr := newBuf; if (newptr = nil) then begin Result := FALSE; exit; end; prevPtr := aBuf; curPtr := prevPtr; while (curPtr < aBuf+aLen) do begin if (curPtr^ = '>') then isInTag := FALSE else if (curPtr^ = '<') then isInTag := TRUE; if ((curPtr^ < #$80) and ((curPtr^ < 'A') or ((curPtr^ > 'Z') and (curPtr^ < 'a')) or (curPtr^ > 'z')) ) then begin if ((curPtr > prevPtr) and (not isInTag)) then // Current segment contains more than just a symbol // and it is not inside a tag, keep it. begin while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; inc(prevPtr); newptr^ := ' '; inc(newptr); end else prevPtr := curPtr+1; end; inc(curPtr); end; // If the current segment contains more than just a symbol // and it is not inside a tag then keep it. if ( not isInTag) then while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; newLen := newptr - newBuf; Result := TRUE; end; function FilterWithoutEnglishLetters(aBuf: pAnsiChar; aLen: integer; var newBuf: pAnsiChar; var newLen: integer): Boolean; var newPtr: pAnsiChar; prevPtr: pAnsiChar; curPtr: pAnsiChar; meetMSB: Boolean; begin (*This filter applies to all scripts which do not use English characters*) Result := FALSE; newLen := 0; meetMSB:= FALSE; if newBuf = nil then exit; newPtr := newBuf; curPtr := aBuf; prevPtr := curPtr; while curPtr < aBuf+aLen do begin if curPtr^ > #$80 then meetMSB := TRUE else if ((curPtr^ < 'A') or ((curPtr^ > 'Z') and (curPtr^ < 'a')) or (curPtr^ > 'z')) then begin //current char is a symbol, most likely a punctuation. we treat it as segment delimiter if (meetMSB and (curPtr > prevPtr)) then //this segment contains more than single symbol, and it has upper ASCII, we need to keep it begin while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; inc(prevPtr); newptr^ := ' '; inc(newptr); meetMSB := FALSE; end else //ignore current segment. (either because it is just a symbol or just an English word) prevPtr := curPtr+1; end; inc(curPtr); end; if (meetMSB and (curPtr > prevPtr)) then while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; newLen := newptr - newBuf; Result := TRUE; end; end. doublecmd-1.1.30/components/chsdet/src/nsCodingStateMachine.pas0000644000175000001440000000707615104114162023564 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsCodingStateMachine.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit nsCodingStateMachine; {$R-} interface uses nsCore; type nsSMState = ( eStart = 0, eError = 1, eItsMe = 2 ); (*state machine model*) type SMModel = record classTable: Pointer; //nsPkgInt; classFactor: uInt32; stateTable: Pointer; //nsPkgInt; charLenTable: Pointer; // aByteArray; // array of byte; // puInt32; CharsetID: eInternalCharsetID; end; pSMModel = ^SMModel; type TnsCodingStateMachine = class (TObject) protected mCurrentState: nsSMState; mCurrentCharLen: uInt32; mCurrentBytePos: uInt32; mModel: SMModel; public Enabled: Boolean; constructor Create(sm: SMModel); destructor Destroy; override; function NextState(c: AnsiChar): nsSMState; function GetCurrentCharLen: uInt32; procedure Reset; function GetCharsetID: eInternalCharsetID; property LangModel: SMModel read mModel; end; implementation { TnsCodingStateMachine } constructor TnsCodingStateMachine.Create(sm: SMModel); begin mCurrentState:= eStart; mModel := sm; Enabled := true; end; destructor TnsCodingStateMachine.Destroy; begin mModel.classTable := nil; mModel.stateTable := nil; mModel.charLenTable := nil; inherited; end; function TnsCodingStateMachine.NextState(c: AnsiChar): nsSMState; var byteCls: uInt32; begin if not Enabled then begin Result := eError; exit; end; (*for each byte we get its class , if it is first byte, we also get byte length*) byteCls := aByteArray(mModel.classTable)[integer(c)]; if mCurrentState = eStart then begin mCurrentBytePos := 0; mCurrentCharLen := aByteArray(mModel.charLenTable)[byteCls]; end; (*from byte's class and stateTable, we get its next state*) mCurrentState := nsSMState(aByteArray(mModel.stateTable)[cardinal(mCurrentState) * mModel.classFactor + byteCls]); inc(mCurrentBytePos); //if mCurrentBytePos > mCurrentCharLen then // mCurrentState := eError; Result:= mCurrentState; end; function TnsCodingStateMachine.GetCurrentCharLen: uInt32; begin Result:= mCurrentCharLen; end; procedure TnsCodingStateMachine.Reset; begin mCurrentState:= eStart; end; function TnsCodingStateMachine.GetCharsetID: eInternalCharsetID; begin Result:= mModel.CharsetID; end; end.doublecmd-1.1.30/components/chsdet/src/mbclass/0000755000175000001440000000000015104114162020437 5ustar alexxusersdoublecmd-1.1.30/components/chsdet/src/mbclass/UTF8LangModel.inc0000644000175000001440000001015415104114162023444 0ustar alexxusersconst UTF8_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 //allow 0x00 as a legal value 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 1,1,1,1,1,1,1,1, // 40 - 47 1,1,1,1,1,1,1,1, // 48 - 4f 1,1,1,1,1,1,1,1, // 50 - 57 1,1,1,1,1,1,1,1, // 58 - 5f 1,1,1,1,1,1,1,1, // 60 - 67 1,1,1,1,1,1,1,1, // 68 - 6f 1,1,1,1,1,1,1,1, // 70 - 77 1,1,1,1,1,1,1,1, // 78 - 7f 2,2,2,2,3,3,3,3, // 80 - 87 4,4,4,4,4,4,4,4, // 88 - 8f 4,4,4,4,4,4,4,4, // 90 - 97 4,4,4,4,4,4,4,4, // 98 - 9f 5,5,5,5,5,5,5,5, // a0 - a7 5,5,5,5,5,5,5,5, // a8 - af 5,5,5,5,5,5,5,5, // b0 - b7 5,5,5,5,5,5,5,5, // b8 - bf 0,0,6,6,6,6,6,6, // c0 - c7 6,6,6,6,6,6,6,6, // c8 - cf 6,6,6,6,6,6,6,6, // d0 - d7 6,6,6,6,6,6,6,6, // d8 - df 7,8,8,8,8,8,8,8, // e0 - e7 8,8,8,8,8,9,8,8, // e8 - ef 10,11,11,11,11,11,11,11, // f0 - f7 12,13,13,13,14,15,0,0 // f8 - ff ); UTF8CharLenTable: array [0..15] of byte = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6 ); UTF8_st: array [0..207] of byte = ( byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError),byte(eError), 12, 10,//00-07 9, 11, 8, 7, 6, 5, 4, 3,//08-0f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//10-17 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//18-1f byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),//20-27 byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),//28-2f byte(eError),byte(eError), 5, 5, 5, 5,byte(eError),byte(eError),//30-37 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//38-3f byte(eError),byte(eError),byte(eError), 5, 5, 5,byte(eError),byte(eError),//40-47 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//48-4f byte(eError),byte(eError), 7, 7, 7, 7,byte(eError),byte(eError),//50-57 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//58-5f byte(eError),byte(eError),byte(eError),byte(eError), 7, 7,byte(eError),byte(eError),//60-67 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//68-6f byte(eError),byte(eError), 9, 9, 9, 9,byte(eError),byte(eError),//70-77 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//78-7f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), 9,byte(eError),byte(eError),//80-87 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//88-8f byte(eError),byte(eError), 12, 12, 12, 12,byte(eError),byte(eError),//90-97 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//98-9f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), 12,byte(eError),byte(eError),//a0-a7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//a8-af byte(eError),byte(eError), 12, 12, 12,byte(eError),byte(eError),byte(eError),//b0-b7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//b8-bf byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eError),byte(eError),//c0-c7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError) //c8-cf ); UTF8LangModel: SMModel = ( classTable: @UTF8_cls; classFactor: 16; stateTable: @UTF8_st; charLenTable: @UTF8CharLenTable; CharsetID: UTF8_CHARSET; ); doublecmd-1.1.30/components/chsdet/src/mbclass/UCS2LELangModel.inc0000644000175000001440000000402615104114162023654 0ustar alexxusersconst UCS2LECharLenTable: array [0..5] of uInt32 = (2, 2, 2, 2, 2, 2); UCS2LE_cls: array [AnsiChar] of Byte = ( 0,0,0,0,0,0,0,0, // 00 - 07 //allow 0x00 as a legal value 0,0,1,0,0,2,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,3,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,3,3,3,3,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,0,0,0,0,0,0,0, // a0 - a7 0,0,0,0,0,0,0,0, // a8 - af 0,0,0,0,0,0,0,0, // b0 - b7 0,0,0,0,0,0,0,0, // b8 - bf 0,0,0,0,0,0,0,0, // c0 - c7 0,0,0,0,0,0,0,0, // c8 - cf 0,0,0,0,0,0,0,0, // d0 - d7 0,0,0,0,0,0,0,0, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,4,5 // f8 - ff ); UCS2LE_st: array [0..55] of Byte = ( 6, 6, 7, 6, 4, 3,integer(eError),integer(eError),//00-07 integer(eError),integer(eError),integer(eError),integer(eError),integer(eItsMe),integer(eItsMe),integer(eItsMe),integer(eItsMe),//08-0f integer(eItsMe),integer(eItsMe), 5, 5, 5,integer(eError),integer(eItsMe),integer(eError),//10-17 5, 5, 5,integer(eError), 5,integer(eError), 6, 6,//18-1f 7, 6, 8, 8, 5, 5, 5,integer(eError),//20-27 5, 5, 5,integer(eError),integer(eError),integer(eError), 5, 5,//28-2f 5, 5, 5,integer(eError), 5,integer(eError),integer(eStart),integer(eStart) //30-37 ); UCS2LELangModel: SMModel = ( classTable: @UCS2LE_cls; classFactor: 6; stateTable: @UCS2LE_st; charLenTable: @UCS2LECharLenTable; CharsetID: UTF16_LE_CHARSET; ); doublecmd-1.1.30/components/chsdet/src/mbclass/UCS2BELangModel.inc0000644000175000001440000000411315104114162023637 0ustar alexxusersconst UCS2BECharLenTable: array [0..5] of Byte = (2, 2, 2, 2, 2, 2); UCS2BE_cls: array [AnsiChar] of Byte = ( 0,0,0,0,0,0,0,0, // 00 - 07 //allow 0x00 as a legal value 0,0,1,0,0,2,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,3,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,3,3,3,3,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,0,0,0,0,0,0,0, // a0 - a7 0,0,0,0,0,0,0,0, // a8 - af 0,0,0,0,0,0,0,0, // b0 - b7 0,0,0,0,0,0,0,0, // b8 - bf 0,0,0,0,0,0,0,0, // c0 - c7 0,0,0,0,0,0,0,0, // c8 - cf 0,0,0,0,0,0,0,0, // d0 - d7 0,0,0,0,0,0,0,0, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,4,5 // f8 - ff ); UCS2BE_st: array [0..55] of Byte = ( 5, 7, 7,integer(eError), 4, 3,integer(eError),integer(eError),//00-07 integer(eError),integer(eError),integer(eError),integer(eError),integer(eItsMe),integer(eItsMe),integer(eItsMe),integer(eItsMe),//08-0f integer(eItsMe),integer(eItsMe), 6, 6, 6, 6,integer(eError),integer(eError),//10-17 6, 6, 6, 6, 6,integer(eItsMe), 6, 6,//18-1f 6, 6, 6, 6, 5, 7, 7,integer(eError),//20-27 5, 8, 6, 6,integer(eError), 6, 6, 6,//28-2f 6, 6, 6, 6,integer(eError),integer(eError),integer(eStart),integer(eStart) //30-37 ); UCS2BELangModel: SMModel = ( classTable: @UCS2BE_cls; classFactor: 6; stateTable: @UCS2BE_st; charLenTable: @UCS2BECharLenTable; CharsetID: UTF16_BE_CHARSET; );doublecmd-1.1.30/components/chsdet/src/mbclass/SJISLangModel.inc0000644000175000001440000000443415104114162023472 0ustar alexxusersconst SJIS_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,1, // 78 - 7f 3,3,3,3,3,3,3,3, // 80 - 87 3,3,3,3,3,3,3,3, // 88 - 8f 3,3,3,3,3,3,3,3, // 90 - 97 3,3,3,3,3,3,3,3, // 98 - 9f //0xa0 is illegal in sjis encoding, but some pages does //contain such byte. We need to be more error forgiven. 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,4,4,4, // e8 - ef 4,4,4,4,4,4,4,4, // f0 - f7 4,4,4,4,4,0,0,0 // f8 - ff ); SJIS_st: array [0..23] of byte = ( byte(eError),byte(eStart),byte(eStart), 3,byte(eError),byte(eError),byte(eError),byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //10-17 ); SJISCharLenTable: array [0..5] of byte = (0, 1, 1, 2, 0, 0); SJISLangModel: SMModel = ( classTable: @SJIS_cls; classFactor: 6; stateTable: @SJIS_st; charLenTable: @SJISCharLenTable; CharsetID: SHIFT_JIS_CHARSET; ); // SJISLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @SJIS_cls; // ); // classFactor: 6; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @SJIS_st; // ); // charLenTable: @SJISCharLenTable; // CharsetID: SHIFT_JIS_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/mbclass/ISO2022KRLangModel.inc0000644000175000001440000000373015104114162024115 0ustar alexxusersconst ISO2022KRCharLenTable: array [0..5] of uInt32 = (0, 0, 0, 0, 0, 0); ISO2022KR_cls: array [AnsiChar] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,3,0,0,0, // 20 - 27 0,4,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,5,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022KR_st: array [0..39] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),Byte(eError),//10-17 Byte(eError),Byte(eError),Byte(eError),Byte(eError), 5,Byte(eError),Byte(eError),Byte(eError),//18-1f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //20-27 ); ISO2022KRSMModel: SMModel = ( classTable: @ISO2022KR_cls; classFactor: 6; stateTable: @ISO2022KR_st; charLenTable: @ISO2022KRCharLenTable; CharsetID: ISO_2022_KR_CHARSET; ); doublecmd-1.1.30/components/chsdet/src/mbclass/ISO2022JPLangModel.inc0000644000175000001440000000464515104114162024120 0ustar alexxusersconst ISO2022JPCharLenTable: array [0..7] of uInt32 = (0, 0, 0, 0, 0, 0, 0, 0); ISO2022JP_cls: array [AnsiChar] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,2,2, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,7,0,0,0, // 20 - 27 3,0,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 6,0,4,0,8,0,0,0, // 40 - 47 0,9,5,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022JP_st: array [0..71] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),//00-07 Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//08-0f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//10-17 Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),//18-1f Byte(eError), 5,Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),Byte(eError),//20-27 Byte(eError),Byte(eError),Byte(eError), 6,Byte(eItsMe),Byte(eError),Byte(eItsMe),Byte(eError),//28-2f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),//30-37 Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//38-3f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eStart),Byte(eStart)//40-47 ); ISO2022JPSMModel: SMModel = ( classTable: @ISO2022JP_cls; classFactor: 10; stateTable: @ISO2022JP_st; charLenTable: @ISO2022JPCharLenTable; CharsetID: ISO_2022_JP_CHARSET; ); doublecmd-1.1.30/components/chsdet/src/mbclass/ISO2022CNLangModel.inc0000644000175000001440000000446215104114162024104 0ustar alexxusersconst ISO2022CNCharLenTable: array [0..8] of uInt32 = (0, 0, 0, 0, 0, 0, 0, 0, 0); ISO2022CN_cls: array [AnsiChar] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,4,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022CN_st: array [0..63] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),//00-07 Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//08-0f Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//10-17 Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),//18-1f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//20-27 5, 6,Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//28-2f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//30-37 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eStart) //38-3f ); ISO2022CNSMModel: SMModel = ( classTable: @ISO2022CN_cls; classFactor: 9; stateTable: @ISO2022CN_st; charLenTable: @ISO2022CNCharLenTable; CharsetID: ISO_2022_CN_CHARSET; );doublecmd-1.1.30/components/chsdet/src/mbclass/HZLangModel.inc0000644000175000001440000000366615104114162023251 0ustar alexxusersconst HZCharLenTable: array [0..5] of uInt32 = (0, 0, 0, 0, 0, 0); HZ_cls: array [0..255] of Byte = ( 1,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,0,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,4,0,5,2,0, // 78 - 7f 1,1,1,1,1,1,1,1, // 80 - 87 1,1,1,1,1,1,1,1, // 88 - 8f 1,1,1,1,1,1,1,1, // 90 - 97 1,1,1,1,1,1,1,1, // 98 - 9f 1,1,1,1,1,1,1,1, // a0 - a7 1,1,1,1,1,1,1,1, // a8 - af 1,1,1,1,1,1,1,1, // b0 - b7 1,1,1,1,1,1,1,1, // b8 - bf 1,1,1,1,1,1,1,1, // c0 - c7 1,1,1,1,1,1,1,1, // c8 - cf 1,1,1,1,1,1,1,1, // d0 - d7 1,1,1,1,1,1,1,1, // d8 - df 1,1,1,1,1,1,1,1, // e0 - e7 1,1,1,1,1,1,1,1, // e8 - ef 1,1,1,1,1,1,1,1, // f0 - f7 1,1,1,1,1,1,1,1 // f8 - ff ); HZ_st: array [0..47] of Byte = ( Byte(eStart),Byte(eError), 3,Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eStart),Byte(eStart), 4,Byte(eError),//10-17 5,Byte(eError), 6,Byte(eError), 5, 5, 4,Byte(eError),//18-1f 4,Byte(eError), 4, 4, 4,Byte(eError), 4,Byte(eError),//20-27 4,Byte(eItsMe),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart)//28-2f ); HZSMModel: SMModel = ( classTable: @HZ_cls; classFactor: 6; stateTable: @HZ_st; charLenTable: @HZCharLenTable; CharsetID: HZ_GB_2312_CHARSET; );doublecmd-1.1.30/components/chsdet/src/mbclass/GB18030LangModel.inc0000644000175000001440000000471015104114162023603 0ustar alexxusersconst GB18030CharLenTable: array [0..6] of byte = (0, 1, 1, 1, 1, 1, 2); GB18030_cls: array [0..255] of Byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 3,3,3,3,3,3,3,3, // 30 - 37 3,3,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,4, // 78 - 7f 5,6,6,6,6,6,6,6, // 80 - 87 6,6,6,6,6,6,6,6, // 88 - 8f 6,6,6,6,6,6,6,6, // 90 - 97 6,6,6,6,6,6,6,6, // 98 - 9f 6,6,6,6,6,6,6,6, // a0 - a7 6,6,6,6,6,6,6,6, // a8 - af 6,6,6,6,6,6,6,6, // b0 - b7 6,6,6,6,6,6,6,6, // b8 - bf 6,6,6,6,6,6,6,6, // c0 - c7 6,6,6,6,6,6,6,6, // c8 - cf 6,6,6,6,6,6,6,6, // d0 - d7 6,6,6,6,6,6,6,6, // d8 - df 6,6,6,6,6,6,6,6, // e0 - e7 6,6,6,6,6,6,6,6, // e8 - ef 6,6,6,6,6,6,6,6, // f0 - f7 6,6,6,6,6,6,6,0 // f8 - ff ); GB18030_st: array [0..47] of byte = ( byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart), 3,byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),//10-17 4,byte(eError),byte(eStart),byte(eStart),byte(eError),byte(eError),byte(eError),byte(eError),//18-1f byte(eError),byte(eError), 5,byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eError),//20-27 byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //28-2f ); GB18030LangModel: SMModel = ( classTable: @GB18030_cls; classFactor: 7; stateTable: @GB18030_st; charLenTable: @GB18030CharLenTable; CharsetID: GB18030_CHARSET; ); // GB18030LangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @GB18030_cls; // ); // classFactor: 7; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @GB18030_st; // ); // charLenTable: @GB18030CharLenTable; // CharsetID: GB18030_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/mbclass/EUCTWLangModel.inc0000644000175000001440000000473515104114162023615 0ustar alexxusersconst EUCTWCharLenTable: array [0..6] of Byte = (0, 0, 1, 2, 2, 2, 3); //PCK4BITS(0,2,2,2,2,2,2,2, // 00 - 07 EUCTW_cls: array [0..255] of Byte = ( 2,2,2,2,2,2,2,2, // 00 - 07 2,2,2,2,2,2,0,0, // 08 - 0f 2,2,2,2,2,2,2,2, // 10 - 17 2,2,2,0,2,2,2,2, // 18 - 1f 2,2,2,2,2,2,2,2, // 20 - 27 2,2,2,2,2,2,2,2, // 28 - 2f 2,2,2,2,2,2,2,2, // 30 - 37 2,2,2,2,2,2,2,2, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,2, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,6,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,3,4,4,4,4,4,4, // a0 - a7 5,5,1,1,1,1,1,1, // a8 - af 1,1,1,1,1,1,1,1, // b0 - b7 1,1,1,1,1,1,1,1, // b8 - bf 1,1,3,1,3,3,3,3, // c0 - c7 3,3,3,3,3,3,3,3, // c8 - cf 3,3,3,3,3,3,3,3, // d0 - d7 3,3,3,3,3,3,3,3, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,3,3,3, // e8 - ef 3,3,3,3,3,3,3,3, // f0 - f7 3,3,3,3,3,3,3,0 // f8 - ff ); EUCTW_st: array [0..47] of Byte = ( Byte(eError),Byte(eError),Byte(eStart), 3, 3, 3, 4,Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eStart),Byte(eError),//10-17 Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//18-1f 5,Byte(eError),Byte(eError),Byte(eError),Byte(eStart),Byte(eError),Byte(eStart),Byte(eStart),//20-27 Byte(eStart),Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //28-2f ); EUCTWLangModel: SMModel = ( classTable: @EUCTW_cls; classFactor: 7; stateTable: @EUCTW_st; charLenTable: @EUCTWCharLenTable; CharsetID: X_EUC_TW_CHARSET; ); // EUCTWLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCTW_cls; // ); // classFactor: 7; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCTW_st; // ); // charLenTable: @EUCTWCharLenTable; // CharsetID: X_EUC_TW_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/mbclass/EUCKRLangModel.inc0000644000175000001440000000402615104114162023570 0ustar alexxusersconst EUCKRCharLenTable: array [0..3] of byte = (0, 1, 2, 0); //PCK4BITS(0,1,1,1,1,1,1,1, // 00 - 07 EUCKR_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 1,1,1,1,1,1,1,1, // 40 - 47 1,1,1,1,1,1,1,1, // 48 - 4f 1,1,1,1,1,1,1,1, // 50 - 57 1,1,1,1,1,1,1,1, // 58 - 5f 1,1,1,1,1,1,1,1, // 60 - 67 1,1,1,1,1,1,1,1, // 68 - 6f 1,1,1,1,1,1,1,1, // 70 - 77 1,1,1,1,1,1,1,1, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,3,3,3, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,3,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,0 // f8 - ff ); EUCKR_st: array [0..15] of byte = ( byte(eError),byte(eStart), 3,byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), //00-07 byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),byte(eStart) //08-0f ); EUCKRLangModel: SMModel =( classTable: @EUCKR_cls; classFactor: 4; stateTable: @EUCKR_st; charLenTable: @EUCKRCharLenTable; CharsetID: EUC_KR_CHARSET; ); // EUCKRLangModel: SMModel =( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCKR_cls; // ); // classFactor: 4; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCKR_st; // ); // charLenTable: @EUCKRCharLenTable; // CharsetID: EUC_KR_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/mbclass/EUCJPLangModel.inc0000644000175000001440000000453315104114162023570 0ustar alexxusersconst EUCJPCharLenTable: array [0..5] of byte = (2, 2, 2, 3, 1, 0); //PCK4BITS(5,4,4,4,4,4,4,4), // 00 - 07 EUCJP_cls: array [0..255] of byte = ( 4,4,4,4,4,4,4,4, // 00 - 07 4,4,4,4,4,4,5,5, // 08 - 0f 4,4,4,4,4,4,4,4, // 10 - 17 4,4,4,5,4,4,4,4, // 18 - 1f 4,4,4,4,4,4,4,4, // 20 - 27 4,4,4,4,4,4,4,4, // 28 - 2f 4,4,4,4,4,4,4,4, // 30 - 37 4,4,4,4,4,4,4,4, // 38 - 3f 4,4,4,4,4,4,4,4, // 40 - 47 4,4,4,4,4,4,4,4, // 48 - 4f 4,4,4,4,4,4,4,4, // 50 - 57 4,4,4,4,4,4,4,4, // 58 - 5f 4,4,4,4,4,4,4,4, // 60 - 67 4,4,4,4,4,4,4,4, // 68 - 6f 4,4,4,4,4,4,4,4, // 70 - 77 4,4,4,4,4,4,4,4, // 78 - 7f 5,5,5,5,5,5,5,5, // 80 - 87 5,5,5,5,5,5,1,3, // 88 - 8f 5,5,5,5,5,5,5,5, // 90 - 97 5,5,5,5,5,5,5,5, // 98 - 9f 5,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,0,5 // f8 - ff ); EUCJP_st: array [0..39] of byte = ( 3, 4, 3, 5,byte(eStart),byte(eError),byte(eError),byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eStart),byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError),//10-17 byte(eError),byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError), 3,byte(eError),//18-1f 3,byte(eError),byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //20-27 ); EUCJPLangModel: SMModel = ( classTable: @EUCJP_cls; classFactor: 6; stateTable: @EUCJP_st; charLenTable: @EUCJPCharLenTable; CharsetID: EUC_JP_CHARSET; ); // EUCJPLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCJP_cls; // ); // classFactor: 6; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCJP_st; // ); // charLenTable: @EUCJPCharLenTable; // CharsetID: EUC_JP_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/mbclass/Big5LangModel.inc0000644000175000001440000000421715104114162023507 0ustar alexxusersconst Big5CharLenTable: array [0..4] of Byte = (0, 1, 1, 2, 0); BIG5_cls: array [0..255] of Byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 //allow 0x00 as legal value 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,1, // 78 - 7f 4,4,4,4,4,4,4,4, // 80 - 87 4,4,4,4,4,4,4,4, // 88 - 8f 4,4,4,4,4,4,4,4, // 90 - 97 4,4,4,4,4,4,4,4, // 98 - 9f 4,3,3,3,3,3,3,3, // a0 - a7 3,3,3,3,3,3,3,3, // a8 - af 3,3,3,3,3,3,3,3, // b0 - b7 3,3,3,3,3,3,3,3, // b8 - bf 3,3,3,3,3,3,3,3, // c0 - c7 3,3,3,3,3,3,3,3, // c8 - cf 3,3,3,3,3,3,3,3, // d0 - d7 3,3,3,3,3,3,3,3, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,3,3,3, // e8 - ef 3,3,3,3,3,3,3,3, // f0 - f7 3,3,3,3,3,3,3,0 // f8 - ff ); BIG5_st: array [0..23] of Byte = ( Byte(eError),Byte(eStart),Byte(eStart), 3,Byte(eError),Byte(eError),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),//08-0f Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //10-17 ); Big5LangModel: SMModel = ( classTable: @BIG5_cls; classFactor: 5; stateTable: @BIG5_st; charLenTable: @Big5CharLenTable; CharsetID: BIG5_CHARSET; ); // Big5LangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @BIG5_cls; // ); // classFactor: 5; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @BIG5_st; // ); // charLenTable: @Big5CharLenTable; // CharsetID: BIG5_CHARSET; // ); doublecmd-1.1.30/components/chsdet/src/dbg.inc0000644000175000001440000000015015104114162020236 0ustar alexxusers{.$DEFINE DEBUG_chardet} // Uncomment this for debug dump.*) {$ifdef DEBUG_chardet} Dump, {$endif} doublecmd-1.1.30/components/chsdet/src/MultiModelProber.pas0000644000175000001440000001332315104114162022747 0ustar alexxusersunit MultiModelProber; interface uses {$I dbg.inc} nsCore, CustomDetector, nsCodingStateMachine; type TMultiModelProber = class (TCustomDetector) private protected mDetectedCharset: eInternalCharsetID; mActiveSM: integer; mCharsetsCount: integer; mSMState: array of eProbingState; mCodingSM: array of TnsCodingStateMachine; procedure AddCharsetModel(Model: SMModel); public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} function GetConfidence: float; override; end; implementation {$ifdef DEBUG_chardet} uses SysUtils, TypInfo; {$endif} { TMultiModelProber } constructor TMultiModelProber.Create; begin inherited; mCharsetsCount := 0; end; destructor TMultiModelProber.Destroy; var i: integer; begin for i := 0 to Pred(mCharsetsCount) do begin mCodingSM[i].Free; mCodingSM[i] := nil; end; SetLength(mCodingSM, 0); inherited; end; procedure TMultiModelProber.AddCharsetModel(Model: SMModel); begin inc(mCharsetsCount); SetLength(mCodingSM, mCharsetsCount); SetLength(mSMState, mCharsetsCount); mCodingSM[Pred(mCharsetsCount)] := TnsCodingStateMachine.Create(Model); mSMState[Pred(mCharsetsCount)] := psDetecting; Reset; end; function TMultiModelProber.GetDetectedCharset: eInternalCharsetID; begin Result := mDetectedCharset; end; function TMultiModelProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var codingState: nsSMState; j: integer; i: integer; begin {$IFDEF DEBUG_chardet} AddDump('Multi Model - HandleData - start'); {$endif} Result := mState; for i := 0 to Pred(aLen) do begin // if mState = psDetecting then // break; for j := mCharsetsCount - 1 downto 0 do begin // skip disabled if (not mCodingSM[j].Enabled) or (mSMState[j] = psNotMe) then continue; (*byte is feed to all active state machine *) codingState := mCodingSM[j].NextState(aBuf[i]); if codingState = eError then begin (*got negative answer for this state machine, make it inactive*) mSMState[j] := psNotMe; dec(mActiveSM); if mActiveSM = 0 then begin mState:= psNotMe; Result:= mState; {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - NOT ME!'); {$endif} exit; end; end else if codingState = eItsMe then begin {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - FOUND IT!'); {$endif} mSMState[j] := psFoundIt; mState := psFoundIt; mDetectedCharset := mCodingSM[j].GetCharsetID; Result:= mState; exit; end; end; // if codingState = eError end; if mActiveSM = 1 then begin for i := 0 to Pred(mCharsetsCount) do if (mSMState[i] <> psNotMe) then begin // TODO - set confidience ? or.... // signalised that it's not sure if GetConfidence > SURE_NO then begin mSMState[i] := psFoundIt; mState := psFoundIt; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end; end else Result := mState; {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - EXIT.'); {$endif} end; procedure TMultiModelProber.Reset; var i: integer; begin mState:= psDetecting; for i := 0 to Pred(mCharsetsCount) do begin mCodingSM[i].Reset; if mCodingSM[i].Enabled then mSMState[i] := psDetecting else mSMState[i] := psNotMe; end; mActiveSM := mCharsetsCount; mDetectedCharset := UNKNOWN_CHARSET; end; function TMultiModelProber.EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; var i: integer; begin for i := 0 to Pred(mCharsetsCount) do if mCodingSM[i].GetCharsetID = Charset then begin Result := true; mCodingSM[i].Enabled := NewValue; exit; end; Result := false; end; function TMultiModelProber.GetConfidence: float; var i: integer; begin Result := SURE_NO; case mState of psNotMe: begin Result := SURE_NO; mDetectedCharset := UNKNOWN_CHARSET; end; else for i := 0 to Pred(mCharsetsCount) do if (mSMState[i] = psFoundIt) or ((mSMState[i] = psDetecting) and (mActiveSM = 1)) then begin Result := SURE_YES; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end;{case} end; {$ifdef DEBUG_chardet} procedure TMultiModelProber.DumpStatus(Dump: string); var i: integer; begin inherited DumpStatus(Dump + ' Current state ' + GetEnumName(TypeInfo(eProbingState), integer(mState))); inherited DumpStatus(Format('%30s - %5s', ['Prober', 'State' ])); for i := 0 to Pred(mCharsetsCount) do inherited DumpStatus(Format('%30s - %5s', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mCodingSM[i].GetCharsetID)), GetEnumName(TypeInfo(eProbingState), integer(mSMState[i])) ])); end; {$endif} end. doublecmd-1.1.30/components/chsdet/src/MBUnicodeMultiProber.pas0000644000175000001440000000774715104114162023531 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: MBUnicodeMultiProber.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit MBUnicodeMultiProber; interface uses {$I dbg.inc} nsCore, MultiModelProber; type TMBUnicodeMultiProber = class (TMultiModelProber) public constructor Create; reintroduce; destructor Destroy; override; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; override; // function GetConfidence: double; override; end; implementation uses SysUtils, nsCodingStateMachine; {$I '.\mbclass\UTF8LangModel.inc'} {$I '.\mbclass\UCS2BELangModel.inc'} {$I '.\mbclass\UCS2LELangModel.inc'} { TMBUnicodeMultiProber } const NUM_OF_PROBERS = 3; {$IFDEF FPC}{$NOTES OFF}{$ENDIF} ONE_CHAR_PROB: float = 0.50; {$ifdef DEBUG_chardet} {$endif} constructor TMBUnicodeMultiProber.Create; begin inherited Create; AddCharsetModel(UTF8LangModel); // AddCharsetModel(UCS2BELangModel); // AddCharsetModel(UCS2LELangModel); end; destructor TMBUnicodeMultiProber.Destroy; begin inherited; end; function TMBUnicodeMultiProber.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: pAnsiChar; hptr: pAnsiChar; keepNext: Boolean; begin keepNext := TRUE; (*assume previous is not ascii, it will do no harm except add some noise*) highbyteBuf := AllocMem(aLen); try hptr:= highbyteBuf; if hptr = nil then begin Result := mState; exit; end; for i:=0 to Pred(aLen) do begin if (Byte(aBuf[i]) > $80) then begin hptr^ := aBuf[i]; inc(hptr); keepNext:= TRUE; end else begin (*if previous is highbyte, keep this even it is a ASCII*) if keepNext = TRUE then begin hptr^ := aBuf[i]; inc(hptr); keepNext:= FALSE; end; end; end; // inherited HandleData(highbyteBuf, hptr - highbyteBuf); inherited HandleData(aBuf, aLen); finally FreeMem(highbyteBuf, aLen); end; Result := mState; end; //function TMBUnicodeMultiProber.GetConfidence: double; //var // i: integer; // conf, // bestConf: double; //begin // mBestGuess := -1; // bestConf := SURE_NO; // for i := 0 to Pred(mCharsetsCount) do // begin // if (mSMState[i] = psFoundIt) or // (mSMState[i] = psNotMe) then // continue; // // if conf > bestConf then // begin // mBestGuess := i; // bestConf := conf; // end; // end; // Result := bestConf; // if mBestGuess > 0 then // mDetectedCharset := mCodingSM[mBestGuess].GetCharsetID // else // mDetectedCharset := UNKNOWN_CHARSET; //end; end. doublecmd-1.1.30/components/chsdet/src/JpCntx.pas0000644000175000001440000005264715104114162020744 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: JpCntx.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit JpCntx; interface uses nsCore; {$HINTS OFF} // Kylix gives an invalid unused hint for TJapaneseContextAnalysis.GetOrder(str: pAnsiChar) const NUM_OF_CATEGORY = 6; type TJapaneseContextAnalysis = class (TObject) private (*category counters, each interger counts sequence in its category*) mRelSample: array [0..Pred(NUM_OF_CATEGORY)] of uInt32; (*total sequence received*) mTotalRel: uInt32; (*The order of previous char*) mLastCharOrder: integer; (*if last byte in current buffer is not the last byte of a character, we*) (*need to know how many byte to skip in next buffer.*) mNeedToSkipCharNum: integer; (*If this flag is set to PR_TRUE, detection is done and conclusion has been made*) mDone: Boolean; function GetOrder(str: pAnsiChar; charLen: puInt32): int32; overload; virtual; abstract; function GetOrder(str: pAnsiChar): int32; overload; virtual; abstract; public constructor Create; destructor Destroy; override; procedure Reset; procedure HandleData(const aBuf: pAnsiChar; aLen: integer); procedure HandleOneChar(aStr: pAnsiChar; aCharLen: integer); function GotEnoughData: Boolean; function GetConfidence: float; end; TSJISContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: pAnsiChar; charLen: puInt32): int32; overload; override; function GetOrder(str: pAnsiChar): int32; overload; override; end; TEUCJPContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: pAnsiChar; charLen: puInt32): int32; overload; override; (*We only interested in Hiragana, so first byte is '\244'*) function GetOrder(str: pAnsiChar): int32; overload; override; end; implementation const ENOUGH_REL_THRESHOLD = 100; MAX_REL_THRESHOLD = 1000; MINIMUM_DATA_THRESHOLD = 4; DONT_KNOW: float = -1; (*hiragana frequency category table*) //This is hiragana 2-char sequence table, the number in each cell represents its frequency category jp2CharContext: array [0..82, 0..82] of byte = ( ( 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), ( 2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), ( 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), ( 0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), ( 1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), ( 0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), ( 0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), ( 0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), ( 0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), ( 0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), ( 2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), ( 0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), ( 0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), ( 0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), ( 2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), ( 0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), ( 1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), ( 0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), ( 0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), ( 0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), ( 0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), ( 0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), ( 0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), ( 0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), ( 0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), ( 0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), ( 0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), ( 0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), ( 0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), ( 1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), ( 0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), ( 0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), ( 0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), ( 0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), ( 0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), ( 2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), ( 0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), ( 0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), ( 0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), ( 0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), ( 0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), ( 0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), ( 0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), ( 0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), ( 0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), ( 0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), ( 0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), ( 0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), ( 0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), ( 0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), ( 0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), ( 0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), ( 0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), ( 0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), ( 0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), ( 2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), ( 0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), ( 0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), ( 0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), ( 0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), ( 1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), ( 0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), ( 0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), ( 0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), ( 0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), ( 0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), ( 0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), ( 0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), ( 0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), ( 1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), ( 0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), ( 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), ( 0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), ( 0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1) ); constructor TJapaneseContextAnalysis.Create; begin inherited Create; Reset; end; destructor TJapaneseContextAnalysis.Destroy; begin inherited; end; procedure TJapaneseContextAnalysis.HandleOneChar(aStr: pAnsiChar; aCharLen: integer); var order: int32; (*if we received enough data, stop here *) begin if mTotalRel > MAX_REL_THRESHOLD then mDone:= TRUE; if mDone then exit; (*Only 2-bytes characters are of our interest*) if (aCharLen=2) then order := GetOrder(aStr) else order := -1; if (order <> -1) and (mLastCharOrder <> -1) then begin inc(mTotalRel); inc(mRelSample[jp2CharContext[mLastCharOrder][order]]); (*count this sequence to its category counter*) end; mLastCharOrder:= order; end; function TJapaneseContextAnalysis.GotEnoughData: Boolean; begin Result := mTotalRel > ENOUGH_REL_THRESHOLD; end; function TJapaneseContextAnalysis.GetConfidence: float; begin (*This is just one way to calculate confidence. It works well for me.*) if mTotalRel > MINIMUM_DATA_THRESHOLD then Result := (mTotalRel - mRelSample[0]) div mTotalRel else Result := DONT_KNOW; end; procedure TJapaneseContextAnalysis.HandleData(const aBuf: pAnsiChar; aLen: integer); var charLen: uInt32; order: int32; i: integer; begin if mDone then exit; (*The buffer we got is byte oriented, and a character may span in more than one*) (*buffers. In case the last one or two byte in last buffer is not complete, we *) (*record how many byte needed to complete that character and skip these bytes here.*) (*We can choose to record those bytes as well and analyse the character once it *) (*is complete, but since a character will not make much difference, by simply skipping*) (*this character will simply our logic and improve performance.*) i := mNeedToSkipCharNum; while i < integer(aLen) do begin order := GetOrder(aBuf+i, @charLen); i := i + integer(charLen); if i > integer(aLen) then begin mNeedToSkipCharNum := i - aLen; mLastCharOrder := -1; end else begin if (order <> -1) and (mLastCharOrder <> -1) then begin inc(mTotalRel); if mTotalRel > MAX_REL_THRESHOLD then begin mDone:= TRUE; break; {<= !!!b possible in "switch" - then remove this line} end; inc(mRelSample[jp2CharContext[mLastCharOrder][order]]); end; mLastCharOrder:= order; end; end; end; procedure TJapaneseContextAnalysis.Reset; var i: integer; begin mTotalRel := 0; for i := 0 to Pred(NUM_OF_CATEGORY) do mRelSample[i] := 0; mNeedToSkipCharNum := 0; mLastCharOrder := -1; mDone := FALSE; end; { TSJISContextAnalysis } function TSJISContextAnalysis.GetOrder(str: pAnsiChar; charLen: puInt32): int32; begin (*find out current char's byte length*) if (byte(str^) >= $81) and (byte(str^) <= $9f) or (byte(str^) >= $e0) and (byte(str^) <= $fc) then charLen^:=2 else charLen^:=1; (*return its order if it is hiragana*) if (str^ = #$82) and (byte((str+1)^) >= $9f) and (byte((str+1)^) <= $f1) then Result := byte((str+1)^) - $9f else Result:= -1; end; function TSJISContextAnalysis.GetOrder(str: pAnsiChar): int32; begin (*We only interested in Hiragana, so first byte is '\202'*) if (str[0]=#$82) and (byte(str[1]) >= $9f) and (byte(str[1]) <= $f1) then Result := byte(str[1]) - $9f else Result := -1; end; { TEUCJPContextAnalysis } function TEUCJPContextAnalysis.GetOrder(str: pAnsiChar; charLen: puInt32): int32; begin (*find out current char's byte length*) if (byte(str^) = $8e) or (byte(str^) >= $a1) and (byte(str^) <= $fe) then charLen^ := 2 else if byte(str^) = $8f then charLen^ := 3 else charLen^ := 1; (*return its order if it is hiragana*) if (byte(str^) = $a4) and (byte((str+1)^) >= $a1) and (byte((str+1)^) <= $f3) then Result := byte((str+1)^) - $a1 else Result:= -1; end; function TEUCJPContextAnalysis.GetOrder(str: pAnsiChar): int32; begin if (str[0]=#$A4) and (byte(str[1]) >= $a1) and (byte(str[1]) <= $f3) then Result := byte(str[1]) - $a1 else Result := -1; end; end.doublecmd-1.1.30/components/chsdet/src/JISFreq.pas0000644000175000001440000013666515104114162021004 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: JISFreq.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit JISFreq; //Sampling from about 20M text materials include literature and computer technology // Japanese frequency table, applied to both S-JIS and EUC-JP //They are sorted in order. (****************************************************************************** * 128 --> 0.77094 * 256 --> 0.85710 * 512 --> 0.92635 * 1024 --> 0.97130 * 2048 --> 0.99431 * * Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 * Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 * * Typical Distribution Ratio, 25% of IDR *****************************************************************************) interface uses nsCore; const JIS_TYPICAL_DISTRIBUTION_RATIO: double = 3.0; //Char to FreqOrder table , JIS_TABLE_SIZE = 4368; JISCharToFreqOrder: array [0..JIS_TABLE_SIZE-1] of int16 = ( 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, // 16 3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, // 32 1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, // 48 2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, // 64 2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, // 80 5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, // 96 1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, // 112 5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, // 128 5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, // 144 5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, // 160 5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, // 176 5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, // 192 5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, // 208 1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, // 224 1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, // 240 1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, // 256 2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, // 272 3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, // 288 3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, // 304 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, // 320 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, // 336 1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, // 352 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, // 368 5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, // 384 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, // 400 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, // 416 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, // 432 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, // 448 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, // 464 5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, // 480 5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, // 496 5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, // 512 4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, // 528 5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, // 544 5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, // 560 5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, // 576 5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, // 592 5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, // 608 5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, // 624 5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, // 640 5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, // 656 5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, // 672 3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, // 688 5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, // 704 5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, // 720 5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, // 736 5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, // 752 5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, // 768 5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, // 784 5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, // 800 5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, // 816 5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, // 832 5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, // 848 5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, // 864 5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, // 880 5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, // 896 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, // 912 5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, // 928 5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, // 944 5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, // 960 5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, // 976 5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, // 992 5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, // 1008 5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, // 1024 5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, // 1040 5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, // 1056 5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, // 1072 5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, // 1088 5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, // 1104 5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, // 1120 5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, // 1136 5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, // 1152 5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, // 1168 5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, // 1184 5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, // 1200 5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, // 1216 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, // 1232 5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, // 1248 5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, // 1264 5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, // 1280 5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, // 1296 6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, // 1312 6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, // 1328 6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, // 1344 6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, // 1360 6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, // 1376 6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, // 1392 6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, // 1408 6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, // 1424 4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, // 1440 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, // 1456 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, // 1472 1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, // 1488 1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, // 1504 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, // 1520 3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, // 1536 3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, // 1552 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, // 1568 3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, // 1584 3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, // 1600 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, // 1616 2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, // 1632 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, // 1648 3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, // 1664 1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, // 1680 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, // 1696 1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, // 1712 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, // 1728 2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, // 1744 2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, // 1760 2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, // 1776 2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, // 1792 1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, // 1808 1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, // 1824 1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, // 1840 1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, // 1856 2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, // 1872 1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, // 1888 2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, // 1904 1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, // 1920 1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, // 1936 1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, // 1952 1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, // 1968 1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, // 1984 1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, // 2000 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, // 2016 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, // 2032 1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, // 2048 2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, // 2064 2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, // 2080 2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, // 2096 3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, // 2112 3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, // 2128 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, // 2144 3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, // 2160 1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, // 2176 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, // 2192 2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, // 2208 1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, // 2224 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, // 2240 3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, // 2256 4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, // 2272 2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, // 2288 1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, // 2304 2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, // 2320 1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, // 2336 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, // 2352 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, // 2368 1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, // 2384 2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, // 2400 2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, // 2416 2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, // 2432 3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, // 2448 1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, // 2464 2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, // 2480 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, // 2496 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, // 2512 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, // 2528 1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, // 2544 2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, // 2560 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, // 2576 1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, // 2592 1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, // 2608 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, // 2624 1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, // 2640 1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, // 2656 1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, // 2672 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, // 2688 2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, // 2704 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, // 2720 2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, // 2736 3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, // 2752 2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, // 2768 1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, // 2784 6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, // 2800 1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, // 2816 2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, // 2832 1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, // 2848 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, // 2864 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, // 2880 3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, // 2896 3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, // 2912 1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, // 2928 1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, // 2944 1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, // 2960 1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, // 2976 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, // 2992 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, // 3008 2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, // 3024 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, // 3040 3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, // 3056 2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, // 3072 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, // 3088 1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, // 3104 2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, // 3120 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, // 3136 1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, // 3152 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, // 3168 4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, // 3184 2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, // 3200 1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, // 3216 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, // 3232 1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, // 3248 2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, // 3264 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, // 3280 6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, // 3296 1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, // 3312 1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, // 3328 2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, // 3344 3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, // 3360 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, // 3376 3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, // 3392 1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, // 3408 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, // 3424 1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, // 3440 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, // 3456 3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, // 3472 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, // 3488 2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, // 3504 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, // 3520 4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, // 3536 2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, // 3552 1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, // 3568 1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, // 3584 1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, // 3600 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, // 3616 1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, // 3632 3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, // 3648 1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, // 3664 3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, // 3680 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, // 3696 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, // 3712 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, // 3728 2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, // 3744 1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, // 3760 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, // 3776 1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, // 3792 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, // 3808 1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, // 3824 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, // 3840 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, // 3856 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, // 3872 1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, // 3888 1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, // 3904 2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, // 3920 4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, // 3936 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, // 3952 1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, // 3968 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, // 3984 1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, // 4000 3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, // 4016 1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, // 4032 2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, // 4048 2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, // 4064 1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, // 4080 1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, // 4096 2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, // 4112 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, // 4128 2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, // 4144 1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, // 4160 1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, // 4176 1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, // 4192 1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, // 4208 3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, // 4224 2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, // 4240 2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, // 4256 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, // 4272 3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, // 4288 3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, // 4304 1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, // 4320 2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, // 4336 1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, // 4352 2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137 // 4368 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, // 4384 6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, // 4400 6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, // 4416 6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, // 4432 6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, // 4448 4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, // 4464 4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, // 4480 3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, // 4496 3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, // 4512 4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, // 4528 3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, // 4544 6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, // 4560 4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, // 4576 6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, // 4592 6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, // 4608 6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, // 4624 6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, // 4640 6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, // 4656 6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, // 4672 3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, // 4688 3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, // 4704 6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, // 4720 2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, // 4736 4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, // 4752 4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, // 4768 4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, // 4784 6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, // 4800 3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, // 4816 4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, // 4832 4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, // 4848 6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, // 4864 4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, // 4880 6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, // 4896 3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, // 4912 2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, // 4928 4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, // 4944 2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, // 4960 6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, // 4976 4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, // 4992 6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, // 5008 6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, // 5024 6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, // 5040 4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, // 5056 6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, // 5072 2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, // 5088 6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, // 5104 4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, // 5120 6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, // 5136 4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, // 5152 4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, // 5168 6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, // 5184 6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, // 5200 6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, // 5216 3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, // 5232 1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, // 5248 3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, // 5264 3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, // 5280 4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, // 5296 6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, // 5312 3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, // 5328 6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, // 5344 3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, // 5360 3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, // 5376 2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, // 5392 6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, // 5408 6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, // 5424 3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, // 5440 6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, // 5456 3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, // 5472 6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, // 5488 6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, // 5504 6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, // 5520 4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, // 5536 6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, // 5552 4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, // 5568 3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, // 5584 3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, // 5600 6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, // 5616 6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, // 5632 4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, // 5648 6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, // 5664 6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, // 5680 6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, // 5696 6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, // 5712 6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, // 5728 6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, // 5744 4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, // 5760 4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, // 5776 3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, // 5792 6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, // 5808 4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, // 5824 2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, // 5840 6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, // 5856 6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, // 5872 4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, // 5888 2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, // 5904 4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, // 5920 2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, // 5936 4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, // 5952 4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, // 5968 4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, // 5984 6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, // 6000 3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, // 6016 6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, // 6032 3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, // 6048 6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, // 6064 2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, // 6080 3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, // 6096 7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, // 6112 2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, // 6128 3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, // 6144 3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, // 6160 3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, // 6176 3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, // 6192 7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, // 6208 7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, // 6224 7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, // 6240 7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, // 6256 7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, // 6272 4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, // 6288 3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, // 6304 3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, // 6320 4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, // 6336 3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, // 6352 3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, // 6368 7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, // 6384 4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, // 6400 7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, // 6416 7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, // 6432 7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, // 6448 7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, // 6464 7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, // 6480 4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, // 6496 4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, // 6512 7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, // 6528 3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, // 6544 4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, // 6560 7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, // 6576 7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, // 6592 4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, // 6608 3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, // 6624 3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, // 6640 7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, // 6656 4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, // 6672 4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, // 6688 4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, // 6704 4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, // 6720 4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, // 6736 4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, // 6752 7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, // 6768 7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, // 6784 7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, // 6800 7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, // 6816 7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, // 6832 2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, // 6848 3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, // 6864 7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, // 6880 7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, // 6896 3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, // 6912 4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, // 6928 3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, // 6944 3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, // 6960 2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, // 6976 7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, // 6992 7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, // 7008 4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, // 7024 3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, // 7040 3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, // 7056 7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, // 7072 7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, // 7088 7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, // 7104 4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, // 7120 7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, // 7136 2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, // 7152 3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, // 7168 4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, // 7184 7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, // 7200 4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, // 7216 4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, // 7232 7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, // 7248 7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, // 7264 5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, // 7280 7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, // 7296 7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, // 7312 7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, // 7328 7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, // 7344 7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, // 7360 5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, // 7376 5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, // 7392 7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, // 7408 3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, // 7424 7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, // 7440 7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, // 7456 3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, // 7472 7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, // 7488 7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, // 7504 1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, // 7520 3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, // 7536 4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, // 7552 2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, // 7568 3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, // 7584 2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, // 7600 5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, // 7616 4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, // 7632 4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, // 7648 5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, // 7664 7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, // 7680 7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, // 7696 7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, // 7712 7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, // 7728 3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, // 7744 7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, // 7760 3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, // 7776 7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, // 7792 4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, // 7808 7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, // 7824 7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7840 7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, // 7856 7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, // 7872 7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, // 7888 7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, // 7904 7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, // 7920 7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, // 7936 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, // 7952 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, // 7968 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, // 7984 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, // 8000 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, // 8016 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, // 8032 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, // 8048 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, // 8064 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, // 8080 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, // 8096 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, // 8112 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, // 8128 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, // 8144 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, // 8160 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, // 8176 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, // 8192 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, // 8208 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, // 8224 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, // 8240 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, // 8256 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, // 8272 ****************************************************************************************) ); implementation end.doublecmd-1.1.30/components/chsdet/src/GB2312Freq.pas0000644000175000001440000010760615104114162021150 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: GB2312Freq.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit GB2312Freq; //GB2312 most frequently used character table //Char to FreqOrder table , from hz6763 (****************************************************************************** * 512 --> 0.79 -- 0.79 * 1024 --> 0.92 -- 0.13 * 2048 --> 0.98 -- 0.06 * 6768 --> 1.00 -- 0.02 * * Idea Distribution Ratio = 0.79135/(1-0.79135) = 3.79 * Random Distribution Ration = 512 / (3755 - 512) = 0.157 * * Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR *****************************************************************************) interface uses nsCore; const GB2312_TYPICAL_DISTRIBUTION_RATIO: float = 0.9; GB2312_TABLE_SIZE = 3760; GB2312CharToFreqOrder: array [0..GB2312_TABLE_SIZE-1] of int16 = ( 1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, 2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, 2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, 1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, 1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, 1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, 2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, 3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, 1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, 2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, 2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, 1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, 3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, 1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, 2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, 1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, 3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, 1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, 2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, 1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, 3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, 3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, 3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, 1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, 3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, 2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, 1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, 1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, 4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, 3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, 3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, 1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, 2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, 1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, 1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, 3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, 3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, 4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, 3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, 1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, 1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, 4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, 3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, 1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, 1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, 2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, 3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, 4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, 3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, 2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, 2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, 2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, 2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, 3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, 2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, 2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, 1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, 2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, 1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, 1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, 1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, 2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, 3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, 2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, 2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, 2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, 3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, 1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, 1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, 2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, 1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, 3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, 1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, 1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, 3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, 2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, 1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, 4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, 1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, 1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, 3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, 1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, 1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, 1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, 1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, 3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, 4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, 3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, 2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, 2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, 1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, 3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, 2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, 1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, 1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, 2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, 2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, 3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, 4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, 3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, 3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, 2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, 1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, 3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, 4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, 2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, 1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, 1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, 1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, 3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, 1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, 1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, 2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, 2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, 2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, 1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, 1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, 2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, 1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, 1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, 2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, 2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, 3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, 1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, 4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, 3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, 1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, 3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, 1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, 4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, 1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, 2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, 1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, 1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, 3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, 2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, 1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, 1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, 1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, 3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, 2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, 3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, 3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, 3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, 2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, 2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, 1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, 1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, 3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, 3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, 1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, 1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, 3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, 2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, 2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, 1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, 3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, 4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, 1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, 2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, 3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, 3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, 1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, 2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, 1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, 1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, 1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, 1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, 1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, 1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, 5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, 5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, 3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, 4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, 5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, 5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, 4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, 4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, 4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, 4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, 3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, 6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, 4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, 6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, 4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, 4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, 4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, 5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, 3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, 4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, 3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, 4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, 4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, 6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, 6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, 5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, 4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, 6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, 4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, 5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, 5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, 5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, 6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, 3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, 6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, 4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, 5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, 6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, 6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, 4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, 5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, 4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, 5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, 5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, 4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, 4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, 5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, 4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, 4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, 5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, 4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, 4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, 4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, 5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, 5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, 4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, 3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, 4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, 6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, 5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, 5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, 4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, 6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, 5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, 6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, 4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, 5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, 5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, 3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, 5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, 6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, 4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, 6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, 4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, 4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, 6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, 3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, 6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, 4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, 3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, 3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, 3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, 4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, 2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, 5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, 4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, 5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, 5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, 5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, 4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, 5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, 4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, 5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, 1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, 3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, 4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, 4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, 6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, 4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, 5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, 3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, 5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, 5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, 5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, 3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, 5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, 5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, 3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, 5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, 5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, 5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, 6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, 4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, 6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, 4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, 3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, 4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, 5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, 5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, 5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, 3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, 3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, 6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, 6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, 5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, 6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, 6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, 6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, 6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, 6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, 5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, 6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, 6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, 3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, 3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, 4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, 4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, 3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, 5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, 5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, 5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, 5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, 5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, 4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, 5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, 6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, 5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, 4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, 4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, 6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, 3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, 4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, 4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, 5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, 6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, 6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, 4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, 6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, 5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, 5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, 5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, 5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, 5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, 4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, 5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, 5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, 5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, 5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, 6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, 4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, 5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, 4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, 4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, 6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, 4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, 6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, 3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, 5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, 6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, 6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, 6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, 5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, 6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, 6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, 3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, 5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, 4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767, *******************************************************************************) ); implementation end. doublecmd-1.1.30/components/chsdet/src/EUCTWFreq.pas0000644000175000001440000010626715104114162021241 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: EUCTWFreq.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit EUCTWFreq; // EUCTW frequency table // Converted from big5 work // by Taiwan's Mandarin Promotion Council // (****************************************************************************** * 128 --> 0.42261 * 256 --> 0.57851 * 512 --> 0.74851 * 1024 --> 0.89384 * 2048 --> 0.97583 * * Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 * Random Distribution Ration = 512/(5401-512)=0.105 * * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR *****************************************************************************) interface uses nsCore; const EUCTW_TYPICAL_DISTRIBUTION_RATIO: float = 0.75; //Char to FreqOrder table , EUCTW_TABLE_SIZE = 8102-2742+16; EUCTWCharToFreqOrder: array [0..EUCTW_TABLE_SIZE-1] of int16 = ( 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, // 2742 3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, // 2758 1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, // 2774 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, // 2790 3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, // 2806 4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, // 2822 7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, // 2838 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, // 2854 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, // 2870 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, // 2886 2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, // 2902 1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, // 2918 3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, // 2934 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, // 2950 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, // 2966 3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, // 2982 2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, // 2998 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, // 3014 3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, // 3030 1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, // 3046 7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, // 3062 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, // 3078 7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, // 3094 1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, // 3110 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, // 3126 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, // 3142 3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, // 3158 3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, // 3174 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, // 3190 2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, // 3206 2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, // 3222 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, // 3238 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, // 3254 3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, // 3270 1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, // 3286 1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, // 3302 1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, // 3318 2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, // 3334 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, // 3350 4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, // 3366 1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, // 3382 7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, // 3398 2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, // 3414 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, // 3430 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, // 3446 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, // 3462 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, // 3478 7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, // 3494 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, // 3510 1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, // 3526 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, // 3542 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, // 3558 7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, // 3574 1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, // 3590 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, // 3606 3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, // 3622 4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, // 3638 3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, // 3654 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, // 3670 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, // 3686 1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, // 3702 4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, // 3718 3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, // 3734 3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, // 3750 2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, // 3766 7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, // 3782 3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, // 3798 7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, // 3814 1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, // 3830 2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, // 3846 1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, // 3862 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, // 3878 1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, // 3894 4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, // 3910 3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, // 3926 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, // 3942 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, // 3958 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, // 3974 2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, // 3990 7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, // 4006 1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, // 4022 2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, // 4038 1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, // 4054 1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, // 4070 7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, // 4086 7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, // 4102 7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, // 4118 3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, // 4134 4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, // 4150 1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, // 4166 7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, // 4182 2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, // 4198 7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, // 4214 3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, // 4230 3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, // 4246 7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, // 4262 2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, // 4278 7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, // 4294 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, // 4310 4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, // 4326 2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, // 4342 7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, // 4358 3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, // 4374 2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, // 4390 2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, // 4406 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, // 4422 2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, // 4438 1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, // 4454 1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, // 4470 2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, // 4486 1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, // 4502 7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, // 4518 7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, // 4534 2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, // 4550 4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, // 4566 1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, // 4582 7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, // 4598 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, // 4614 4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, // 4630 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, // 4646 2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, // 4662 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, // 4678 1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, // 4694 1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, // 4710 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, // 4726 3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, // 4742 3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, // 4758 1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, // 4774 3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, // 4790 7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, // 4806 7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, // 4822 1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, // 4838 2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, // 4854 1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, // 4870 3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, // 4886 2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, // 4902 3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, // 4918 2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, // 4934 4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, // 4950 4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, // 4966 3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, // 4982 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, // 4998 3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, // 5014 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, // 5030 3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, // 5046 3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, // 5062 3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, // 5078 1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, // 5094 7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, // 5110 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, // 5126 7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, // 5142 1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, // 5158 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, // 5174 4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, // 5190 3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, // 5206 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, // 5222 2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, // 5238 2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, // 5254 3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, // 5270 1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, // 5286 4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, // 5302 2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, // 5318 1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, // 5334 1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, // 5350 2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, // 5366 3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, // 5382 1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, // 5398 7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, // 5414 1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, // 5430 4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, // 5446 1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, // 5462 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, // 5478 1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, // 5494 3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, // 5510 3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, // 5526 2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, // 5542 1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, // 5558 4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, // 5574 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, // 5590 7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, // 5606 2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, // 5622 3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, // 5638 4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, // 5654 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, // 5670 7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, // 5686 7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, // 5702 1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, // 5718 4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, // 5734 3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, // 5750 2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, // 5766 3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, // 5782 3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, // 5798 2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, // 5814 1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, // 5830 4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, // 5846 3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, // 5862 3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, // 5878 2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, // 5894 4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, // 5910 7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, // 5926 3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, // 5942 2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, // 5958 3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, // 5974 1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, // 5990 2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, // 6006 3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, // 6022 4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, // 6038 2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, // 6054 2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, // 6070 7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, // 6086 1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, // 6102 2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, // 6118 1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, // 6134 3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, // 6150 4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, // 6166 2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, // 6182 3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, // 6198 3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, // 6214 2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, // 6230 4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, // 6246 2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, // 6262 3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, // 6278 4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, // 6294 7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, // 6310 3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, // 6326 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, // 6342 1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, // 6358 4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, // 6374 1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, // 6390 4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, // 6406 7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, // 6422 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, // 6438 7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, // 6454 2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, // 6470 1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, // 6486 1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, // 6502 3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, // 6518 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, // 6534 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, // 6550 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, // 6566 3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, // 6582 2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, // 6598 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, // 6614 7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, // 6630 1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, // 6646 3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, // 6662 7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, // 6678 1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, // 6694 7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, // 6710 4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, // 6726 1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, // 6742 2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, // 6758 2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, // 6774 4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, // 6790 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, // 6806 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, // 6822 3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, // 6838 3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, // 6854 1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, // 6870 2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, // 6886 7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, // 6902 1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, // 6918 1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, // 6934 3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, // 6950 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, // 6966 1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, // 6982 4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, // 6998 7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, // 7014 2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, // 7030 3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, // 7046 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, // 7062 1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, // 7078 2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, // 7094 2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, // 7110 7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, // 7126 7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, // 7142 7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, // 7158 2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, // 7174 2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, // 7190 1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, // 7206 4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, // 7222 3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, // 7238 3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, // 7254 4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, // 7270 4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, // 7286 2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, // 7302 2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, // 7318 7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, // 7334 4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, // 7350 7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, // 7366 2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, // 7382 1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, // 7398 3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, // 7414 4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, // 7430 2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, // 7446 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, // 7462 2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, // 7478 1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, // 7494 2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, // 7510 2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, // 7526 4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, // 7542 7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, // 7558 1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, // 7574 3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, // 7590 7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, // 7606 1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, // 7622 8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, // 7638 2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, // 7654 8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, // 7670 2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, // 7686 2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, // 7702 8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, // 7718 8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, // 7734 8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, // 7750 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, // 7766 8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, // 7782 4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, // 7798 3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, // 7814 8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, // 7830 1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, // 7846 8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, // 7862 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, // 7878 1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, // 7894 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, // 7910 4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, // 7926 1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, // 7942 4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, // 7958 1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, // 7974 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, // 7990 3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, // 8006 4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, // 8022 8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, // 8038 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, // 8054 3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, // 8070 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, // 8086 2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118 // 8102 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, // 8118 2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, // 8134 8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, // 8150 8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, // 8166 8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, // 8182 8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, // 8198 8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, // 8214 8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, // 8230 8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, // 8246 8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, // 8262 8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, // 8278 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, // 8294 8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, // 8310 8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, // 8326 8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, // 8342 8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, // 8358 8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, // 8374 8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, // 8390 8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, // 8406 8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, // 8422 8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, // 8438 8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, // 8454 8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, // 8470 8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, // 8486 8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, // 8502 8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, // 8518 8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, // 8534 8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, // 8550 8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, // 8566 8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, // 8582 8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, // 8598 8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, // 8614 8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, // 8630 8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, // 8646 8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, // 8662 8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, // 8678 8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, // 8694 8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, // 8710 8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, // 8726 8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741, // 8742 //13973 ****************************************************************************************) ); implementation end.doublecmd-1.1.30/components/chsdet/src/EUCSampler.pas0000644000175000001440000001003415104114162021456 0ustar alexxusersunit EUCSampler; interface const FreqSize = 94; type rEUCStatistics = record mFirstByteFreq: array[0..Pred(FreqSize)] of Double; mFirstByteStdDev, mFirstByteMean, mFirstByteWeight: Double; mSecoundByteFreq: array [0..Pred(FreqSize)] of Double; mSecoundByteStdDev, mSecoundByteMean, mSecoundByteWeight: Double; end; prEUCStatistics = ^rEUCStatistics; type TEUCSampler = class (TObject) private mTotal, mThreshold, mState: integer; mFirstByteCnt: array [0..Pred(FreqSize)] of integer; mSecondByteCnt: array [0..Pred(FreqSize)] of integer; mFirstByteFreq: array [0..Pred(FreqSize)] of double; mSecondByteFreq: array [0..Pred(FreqSize)] of double; public constructor Create; destructor Destroy; override; function Sample(aIn: pAnsiChar; aLen: integer): Boolean; function GetSomeData: Boolean; function EnoughData: Boolean; procedure CalFreq; function GetScore(const aFirstByteFreq: array of Double; aFirstByteWeight: Double; const aSecondByteFreq: array of Double; aSecondByteWeight: Double): double; overload; virtual; function GetScore(const array1, array2: array of Double): double; overload; virtual; procedure Reset; end; implementation { TEUCSampler } procedure TEUCSampler.CalFreq; var i: integer; begin for i := 0 to Pred(FreqSize) do begin mFirstByteFreq[i] := mFirstByteCnt[i] / mTotal; mSecondByteFreq[i] := mSecondByteCnt[i] / mTotal; end; end; constructor TEUCSampler.Create; begin inherited; Reset; end; destructor TEUCSampler.Destroy; begin inherited; end; function TEUCSampler.EnoughData: Boolean; begin Result := mTotal > mThreshold; end; function TEUCSampler.GetScore(const aFirstByteFreq: array of Double; aFirstByteWeight: Double; const aSecondByteFreq: array of Double; aSecondByteWeight: Double): double; begin Result := aFirstByteWeight * GetScore(aFirstByteFreq, mFirstByteFreq) + aSecondByteWeight * GetScore(aSecondByteFreq, mSecondByteFreq); end; function TEUCSampler.GetScore(const array1, array2: array of Double): double; var s, sum: Double; i: integer; begin sum := 0.0; for i := 0 to Pred(FreqSize) do begin s := array1[i] - array2[i]; sum := sum + s * s; end; Result := sqrt(sum) / (FreqSize*1.0); end; function TEUCSampler.GetSomeData: Boolean; begin Result := mTotal > 1; end; procedure TEUCSampler.Reset; var i: integer; begin mTotal := 0; mThreshold := 200; mState := 0; for i := 0 to Pred(FreqSize) do begin mFirstByteCnt[i] := 0; mSecondByteCnt[i] := 0; end; end; function TEUCSampler.Sample(aIn: pAnsiChar; aLen: integer): Boolean; const MAX_LENGTH: integer = MaxInt;// $80000000; var i: integer; p: pAnsiChar; begin if (mState = 1) then begin Result := FALSE; exit; end; p := aIn; if (aLen + mTotal > MAX_LENGTH) then aLen := MAX_LENGTH - mTotal; i := 0; while (i < aLen) and (mState <> 1) do begin case mState of 0: if (byte(p^) and $0080) > 0 then begin if (byte(p^) = $00ff) or ( byte(p^) < $00a1) then mState := 1 else begin Inc(mTotal); Inc(mFirstByteCnt[byte(p^) - $00a1]); mState := 2; end; end; 1: begin end; 2: if ( byte(p^) and $0080) > 0 then begin if(byte(p^) = $00ff) or (byte(p^) < $00a1) then mState := 1 else begin Inc(mTotal); Inc(mSecondByteCnt[byte(p^) - $00a1]); mState := 0; end; end else mState := 1; else mState := 1; end; Inc(i); Inc(p); end; Result := ( mState <> 1 ); end; end.doublecmd-1.1.30/components/chsdet/src/EUCKRFreq.pas0000644000175000001440000013316215104114162021215 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: EUCKRFreq.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit EUCKRFreq; interface //Sampling from about 20M text materials include literature and computer technology (****************************************************************************** * 128 --> 0.79 * 256 --> 0.92 * 512 --> 0.986 * 1024 --> 0.99944 * 2048 --> 0.99999 * * Ideal Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 * Random Distribution Ration = 512 / (2350-512) = 0.279. * * Typical Distribution Ratio *****************************************************************************) uses nsCore; const EUCKR_TYPICAL_DISTRIBUTION_RATIO: float = 6.0; EUCKR_TABLE_SIZE = 2352; //Char to FreqOrder table , EUCKRCharToFreqOrder: array [0..EUCKR_TABLE_SIZE-1] of int16 = ( 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, 1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, 1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, 1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, 1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, 1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, 1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, 1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, 1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, 1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, 1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, 1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, 1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, 1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, 1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, 1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, 1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, 1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, 1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, 1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, 1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, 1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, 1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, 1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, 1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, 1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, 1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, 1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, 1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, 2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, 2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, 2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, 2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, 2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, 1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, 2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, 1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, 2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, 2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, 1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, 2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, 2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, 2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, 1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, 2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, 2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, 2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, 2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, 2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, 2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, 1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, 2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, 2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, 2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, 2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, 2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, 1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, 1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, 2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, 1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, 2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, 1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, 2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, 2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, 2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, 2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, 2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, 1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, 1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, 2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, 1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, 2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, 2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, 1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, 2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, 1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, 2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, 1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, 2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, 2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, 1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, 1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, 2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, 2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, 2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, 2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, 2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, 2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, 1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, 2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, 2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, 2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, 2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, 2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, 2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, 1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, 2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642 //512, 256 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, 2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, 2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, 2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, 2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, 2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, 2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, 2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, 2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, 2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, 2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, 2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, 2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, 2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, 1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, 2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, 2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, 2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, 2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, 2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, 2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, 2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, 2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, 2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, 3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, 3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, 3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, 3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, 3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, 3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, 3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, 3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, 3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, 3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, 3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, 3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, 3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, 3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, 3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, 3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, 3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, 3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, 3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, 3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, 3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, 3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, 3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, 3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, 3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, 3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, 3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, 3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, 3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, 3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, 3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, 3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, 1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, 1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, 3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, 3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, 3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, 3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, 3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, 3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, 3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, 3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, 3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, 3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, 3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, 3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, 3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, 1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, 3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, 3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, 3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, 3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, 3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, 3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, 3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, 1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, 3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, 3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, 3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, 3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, 1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, 3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, 3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, 3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, 3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, 3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, 3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, 3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, 4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, 4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, 1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, 4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, 4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, 4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, 4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, 4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, 4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, 4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, 4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, 4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, 4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, 4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, 4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, 4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, 4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, 4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, 4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, 4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, 4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, 4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, 4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, 4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, 4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, 4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, 4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, 4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, 4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, 4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, 4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, 4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, 4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, 4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, 4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, 4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, 4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, 4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, 4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, 4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, 4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, 4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, 4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, 4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, 4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, 1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, 4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, 4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, 4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, 4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, 4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, 4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, 4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, 4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, 4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, 4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, 4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, 4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, 4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, 4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, 4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, 4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, 4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, 4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, 4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, 4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, 5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, 5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, 1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, 5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, 5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, 5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, 5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, 5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, 1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, 5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, 5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, 5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, 5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, 5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, 1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, 5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, 5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, 5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, 5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, 5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, 5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, 5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, 5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, 5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, 5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, 5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, 5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, 5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, 5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, 5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, 5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, 5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, 5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, 5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, 5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, 5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, 5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, 1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, 5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, 5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, 5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, 5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, 1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, 5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, 5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, 5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, 5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, 5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, 1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, 5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, 1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, 5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, 5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, 5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, 5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, 5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, 5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, 5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, 5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, 5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, 5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, 5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, 5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, 5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, 5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, 6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, 6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, 6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, 6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, 6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, 6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, 6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, 6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, 6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, 6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, 6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, 6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, 6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, 6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, 6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, 6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, 6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, //1024 6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, 6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, 6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, 6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, 6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, 6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, 6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, 6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, 6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, 6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, 6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, 6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, 6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, 6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, 6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, 6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, 6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, 6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, 1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, 6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, 6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, 6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, 6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, 6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, 1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, 6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, 1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, 6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, 6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, 6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, 1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, 6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, 6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, 6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, 6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, 6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, 6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, 6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, 6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, 6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, 6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, 6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, 6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, 6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, 6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, 6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, 6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, 6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, 7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, 7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, 7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, 7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, 7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, 7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, 7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, 7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, 7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, 7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, 7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, 7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, 7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, 7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, 7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, 7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, 7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, 7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, 7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, 7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, 7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, 7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, 7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, 7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, 7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, 7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, 7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, 7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, 7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, 7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, 7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, 7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, 7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, 7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, 7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, 7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, 7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, 7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, 7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, 7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, 7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, 7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, 7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, 7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, 7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, 7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, 7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, 7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, 7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, 7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, 7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, 7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, 7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, 7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, 7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, 7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, 7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, 8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, 8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, 8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, 8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, 8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, 8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, 8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, 8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, 8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, 8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, 8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, 8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, 8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, 8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, 8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, 8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, 8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, 8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, 8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, 8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, 8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, 8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, 8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, 8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, 8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, 8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, 8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, 8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, 8736,8737,8738,8739,8740,8741 ****************************************************************************************) ); implementation end. doublecmd-1.1.30/components/chsdet/src/Dump.pas0000644000175000001440000000056415104114162020432 0ustar alexxusersunit Dump; interface uses Classes ; procedure AddDump(Dump: string); procedure SetDumpOutput(DumpOutput: TStrings); implementation var _DumpOutput: TStrings = nil; procedure SetDumpOutput(DumpOutput: TStrings); begin _DumpOutput := DumpOutput; end; procedure AddDump(Dump: string); begin if (_DumpOutput <> nil) then _DumpOutput.Add(Dump); end; end. doublecmd-1.1.30/components/chsdet/src/CustomDetector.pas0000644000175000001440000000300315104114162022460 0ustar alexxusersunit CustomDetector; interface uses {$I dbg.inc} nscore; type TCustomDetector = class(TObject) protected mState: eProbingState; mEnabled: Boolean; // procedure Init; virtual; abstract; procedure SetEnabled(NewValue: Boolean); virtual; function GetEnabled: Boolean; virtual; public constructor Create; virtual; function GetDetectedCharset: eInternalCharsetID; virtual; abstract; function HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; virtual; function GetState: eProbingState; virtual; function GetConfidence: float; virtual; abstract; procedure Reset; virtual; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); virtual; {$endif} property Enabled: Boolean read GetEnabled write SetEnabled; end; implementation { TCustomDetector } constructor TCustomDetector.Create; begin mEnabled := true; end; function TCustomDetector.GetEnabled: Boolean; begin Result := mEnabled; end; procedure TCustomDetector.SetEnabled(NewValue: Boolean); begin mEnabled := NewValue; end; function TCustomDetector.GetState: eProbingState; begin Result := mState; end; function TCustomDetector.HandleData(aBuf: pAnsiChar; aLen: integer): eProbingState; begin if not mEnabled then begin mState := psNotMe; end; Result := mState; end; procedure TCustomDetector.Reset; begin mState := psDetecting; end; {$ifdef DEBUG_chardet} procedure TCustomDetector.DumpStatus(Dump: string); begin addDump(Dump); end; {$endif} end. doublecmd-1.1.30/components/chsdet/src/CharDistribution.pas0000644000175000001440000002355415104114162023006 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: CharDistribution.pas,v 1.4 2013/04/23 19:47:10 ya_nick Exp $ unit CharDistribution; {$R-} interface uses nsCore; type TCharDistributionAnalysis = class (TObject) protected //mDone: PRBool; (*If this flag is set to PR_TRUE, detection is done and conclusion has been made*) // YaN: nice idea. Unfortunately is not implemented :(( mFreqChars: uInt32; (*The number of characters whose frequency order is less than 512*) mTotalChars: uInt32; (*Total character encounted.*) mCharToFreqOrder: pInt16; (*Mapping table to get frequency order from char order (get from GetOrder())*) mTableSize: uInt32; (*Size of above table*) mTypicalDistributionRatio: double;(*This is a constant value varies from language to language, it is used in calculating confidence. See my paper for further detail.*) //we do not handle character base on its original encoding string, but //convert this encoding string to a number, here called order. //This allow multiple encoding of a language to share one frequency table function GetOrder(str: pAnsiChar): int32; virtual; abstract; (*feed a block of data and do distribution analysis*) // function HandleData(const aBuf: pAnsiChar; aLen: uInt32): eProbingState; virtual; abstract; public destructor Destroy; override; (*This function is for future extension. Caller can use this function to control analyser's behavior*) // procedure SetOpion(); virtual; abstract; (*return confidence base on existing data*) function GetConfidence: float; virtual; (*Reset analyser, clear any state *) procedure Reset; virtual; (*It is not necessary to receive all data to draw conclusion. For charset detection, certain amount of data is enough*) function GotEnoughData: Boolean; (*Feed a character with known length*) procedure HandleOneChar(aStr: pAnsiChar; aCharLen: uInt32); virtual; end; TEUCTWDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-TW encoding, we are interested *) (* first byte range: 0xc4 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; TEUCKRDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-KR encoding, we are interested *) (* first byte range: 0xb0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; TGB2312DistributionAnalysis = class (TCharDistributionAnalysis) (*for GB2312 encoding, we are interested *) (* first byte range: 0xb0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; TBig5DistributionAnalysis = class (TCharDistributionAnalysis) (*for big5 encoding, we are interested *) (* first byte range: 0xa4 -- 0xfe*) (* second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; TSJISDistributionAnalysis = class (TCharDistributionAnalysis) (*for sjis encoding, we are interested *) (* first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe*) (* second byte range: 0x40 -- 0x7e, 0x81 -- oxfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; TEUCJPDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-JP encoding, we are interested *) (* first byte range: 0xa0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: pAnsiChar): int32; override; public constructor Create; reintroduce; end; implementation uses JISFreq, Big5Freq, EUCKRFreq, EUCTWFreq, GB2312Freq; destructor TCharDistributionAnalysis.Destroy; begin mCharToFreqOrder := nil; inherited; end; procedure TCharDistributionAnalysis.HandleOneChar(aStr: pAnsiChar; aCharLen: uInt32); var order: integer; begin (*we only care about 2-bytes character in our distribution analysis*) if (aCharLen=2) then order := GetOrder(aStr) else order := -1; if order >= 0 then begin inc(mTotalChars); (*order is valid*) if order < integer(mTableSize) then begin if 512 > aInt16(mCharToFreqOrder)[order] then inc(mFreqChars); end; end; end; function TCharDistributionAnalysis.GetConfidence: float; var r: float; begin (*if we didn't receive any character in our consideration range, return negative answer*) if mTotalChars <= 0 then begin Result := SURE_NO; exit; end; if mTotalChars <> mFreqChars then begin r := mFreqChars / ((mTotalChars - mFreqChars) * mTypicalDistributionRatio); if r < SURE_YES then begin Result := r; exit; end; end; (*normalize confidence, (we don't want to be 100% sure)*) Result := SURE_YES; end; procedure TCharDistributionAnalysis.Reset; begin mTotalChars := 0; mFreqChars := 0; end; function TCharDistributionAnalysis.GotEnoughData: Boolean; begin Result := (mTotalChars > ENOUGH_DATA_THRESHOLD); end; constructor TEUCTWDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @EUCTWCharToFreqOrder; mTableSize := EUCTW_TABLE_SIZE; mTypicalDistributionRatio := EUCTW_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCTWDistributionAnalysis.GetOrder(str: pAnsiChar): int32; begin if byte(str^) >= $c4 then Result := 94 * (byte(str[0]) - $c4) + byte(str[1]) - byte($a1) else Result := -1; end; constructor TEUCKRDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @EUCKRCharToFreqOrder; mTableSize := EUCKR_TABLE_SIZE; mTypicalDistributionRatio := EUCKR_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCKRDistributionAnalysis.GetOrder(str: pAnsiChar): int32; begin if byte(str^) >= $b0 then Result := 94 * (byte(str[0]) - $b0) + byte(str[1]) - $a1 else Result := -1; end; constructor TGB2312DistributionAnalysis.Create; begin inherited; mCharToFreqOrder := @GB2312CharToFreqOrder; mTableSize := GB2312_TABLE_SIZE; mTypicalDistributionRatio := GB2312_TYPICAL_DISTRIBUTION_RATIO; end; function TGB2312DistributionAnalysis.GetOrder(str: pAnsiChar): int32; begin if (byte(str[0]) >= $b0) and (byte(str[1]) >= $a1) then Result := 94 * (byte(str[0]) - $b0) + byte(str[1]) - $a1 else Result := -1; end; constructor TBig5DistributionAnalysis.Create; begin inherited; mCharToFreqOrder := @Big5CharToFreqOrder; mTableSize := BIG5_TABLE_SIZE; mTypicalDistributionRatio := BIG5_TYPICAL_DISTRIBUTION_RATIO; end; function TBig5DistributionAnalysis.GetOrder(str: pAnsiChar): int32; begin if byte(str[0]) >= $a4 then begin if byte(str[1]) >= $a1 then Result := 157 * (byte(str[0]) - $a4) + byte(str[1]) - $a1 + 63 else Result := 157 * (byte(str[0]) - $a4) + byte(str[1]) - $40; end else Result:= -1; end; constructor TSJISDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @JISCharToFreqOrder; mTableSize := JIS_TABLE_SIZE; mTypicalDistributionRatio := JIS_TYPICAL_DISTRIBUTION_RATIO; end; function TSJISDistributionAnalysis.GetOrder(str: pAnsiChar): int32; var order: int32; begin if (byte(str[0]) >= $81) and (byte(str[0]) <= $9f) then order := 188 * (byte(str[0]) - $81) else if (byte(str[0]) >= $e0) and (byte(str[0]) <= $ef) then order := 188 * (byte(str[0]) - $e0 + 31) else begin Result:= -1; exit; end; order := order + (byte((str+1)^) - $40); if byte(str[1]) > $7f then dec(order); Result := order; end; constructor TEUCJPDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @JISCharToFreqOrder; mTableSize := JIS_TABLE_SIZE; mTypicalDistributionRatio := JIS_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCJPDistributionAnalysis.GetOrder(str: pAnsiChar): int32; begin if byte(str[0]) >= $a0 then Result := 94 * (byte(str[0]) - $a1) + byte(str[1]) - $a1 else Result:= -1; end; end.doublecmd-1.1.30/components/chsdet/src/Big5Freq.pas0000644000175000001440000024435715104114162021143 0ustar alexxusers// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library is free software; you can redistribute it and/or modify | // | it under the terms of the GNU General Public License as published by | // | the Free Software Foundation; either version 2 of the License, or | // | (at your option) any later version. | // | This library 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. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: Big5Freq.pas,v 1.3 2013/04/23 19:47:10 ya_nick Exp $ unit Big5Freq; // Big5 frequency table // by Taiwan's Mandarin Promotion Council // (****************************************************************************** * 128 --> 0.42261 * 256 --> 0.57851 * 512 --> 0.74851 * 1024 --> 0.89384 * 2048 --> 0.97583 * * Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 * Random Distribution Ration = 512/(5401-512)=0.105 * * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR *****************************************************************************) interface uses nsCore; const BIG5_TYPICAL_DISTRIBUTION_RATIO: float = 0.75; //Char to FreqOrder table , BIG5_TABLE_SIZE = 5376; Big5CharToFreqOrder: array [0..BIG5_TABLE_SIZE-1] of int16 = ( 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, // 16 3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, // 32 1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, // 48 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, // 64 3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, // 80 4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, // 96 5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, // 112 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, // 128 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, // 144 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, // 160 2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, // 176 1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, // 192 3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, // 208 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, // 224 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, // 240 3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, // 256 2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, // 272 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, // 288 3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, // 304 1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, // 320 5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, // 336 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, // 352 5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, // 368 1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, // 384 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, // 400 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, // 416 3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, // 432 3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, // 448 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, // 464 2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, // 480 2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, // 496 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, // 512 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, // 528 3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, // 544 1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, // 560 1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, // 576 1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, // 592 2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, // 608 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, // 624 4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, // 640 1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, // 656 5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, // 672 2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, // 688 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, // 704 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, // 720 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, // 736 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, // 752 5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, // 768 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, // 784 1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, // 800 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, // 816 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, // 832 5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, // 848 1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, // 864 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, // 880 3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, // 896 4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, // 912 3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, // 928 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, // 944 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, // 960 1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, // 976 4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, // 992 3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, // 1008 3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, // 1024 2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, // 1040 5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, // 1056 3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, // 1072 5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, // 1088 1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, // 1104 2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, // 1120 1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, // 1136 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, // 1152 1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, // 1168 4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, // 1184 3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, // 1200 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, // 1216 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, // 1232 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, // 1248 2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, // 1264 5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, // 1280 1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, // 1296 2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, // 1312 1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, // 1328 1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, // 1344 5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, // 1360 5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, // 1376 5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, // 1392 3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, // 1408 4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, // 1424 4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, // 1440 2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, // 1456 5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, // 1472 3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, // 1488 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, // 1504 5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, // 1520 5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, // 1536 1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, // 1552 2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, // 1568 3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, // 1584 4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, // 1600 5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, // 1616 3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, // 1632 4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, // 1648 1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, // 1664 1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, // 1680 4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, // 1696 1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, // 1712 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, // 1728 1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, // 1744 1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, // 1760 3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, // 1776 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, // 1792 5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, // 1808 2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, // 1824 1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, // 1840 1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, // 1856 5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, // 1872 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, // 1888 4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, // 1904 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, // 1920 2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, // 1936 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, // 1952 1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, // 1968 1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, // 1984 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, // 2000 4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, // 2016 4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, // 2032 1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, // 2048 3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, // 2064 5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, // 2080 5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, // 2096 1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, // 2112 2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, // 2128 1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, // 2144 3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, // 2160 2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, // 2176 3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, // 2192 2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, // 2208 4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, // 2224 4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, // 2240 3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, // 2256 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, // 2272 3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, // 2288 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, // 2304 3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, // 2320 4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, // 2336 3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, // 2352 1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, // 2368 5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, // 2384 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, // 2400 5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, // 2416 1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, // 2432 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, // 2448 4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, // 2464 4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, // 2480 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, // 2496 2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, // 2512 2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, // 2528 3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, // 2544 1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, // 2560 4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, // 2576 2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, // 2592 1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, // 2608 1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, // 2624 2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, // 2640 3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, // 2656 1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, // 2672 5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, // 2688 1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, // 2704 4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, // 2720 1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, // 2736 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, // 2752 1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, // 2768 4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, // 2784 4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, // 2800 2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, // 2816 1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, // 2832 4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, // 2848 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, // 2864 5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, // 2880 2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, // 2896 3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, // 2912 4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, // 2928 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, // 2944 5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, // 2960 5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, // 2976 1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, // 2992 4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, // 3008 4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, // 3024 2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, // 3040 3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, // 3056 3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, // 3072 2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, // 3088 1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, // 3104 4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, // 3120 3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, // 3136 3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, // 3152 2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, // 3168 4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, // 3184 5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, // 3200 3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, // 3216 2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, // 3232 3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, // 3248 1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, // 3264 2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, // 3280 3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, // 3296 4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, // 3312 2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, // 3328 2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, // 3344 5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, // 3360 1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, // 3376 2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, // 3392 1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, // 3408 3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, // 3424 4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, // 3440 2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, // 3456 3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, // 3472 3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, // 3488 2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, // 3504 4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, // 3520 2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, // 3536 3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, // 3552 4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, // 3568 5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, // 3584 3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, // 3600 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, // 3616 1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, // 3632 4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, // 3648 1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, // 3664 4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, // 3680 5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, // 3696 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, // 3712 5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, // 3728 5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, // 3744 2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, // 3760 3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, // 3776 2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, // 3792 2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, // 3808 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, // 3824 1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, // 3840 4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, // 3856 3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, // 3872 3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, // 3888 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, // 3904 2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, // 3920 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, // 3936 2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, // 3952 4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, // 3968 1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, // 3984 4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, // 4000 1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, // 4016 3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, // 4032 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, // 4048 3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, // 4064 5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, // 4080 5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, // 4096 3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, // 4112 3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, // 4128 1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, // 4144 2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, // 4160 5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, // 4176 1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, // 4192 1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, // 4208 3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, // 4224 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, // 4240 1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, // 4256 4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, // 4272 5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, // 4288 2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, // 4304 3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, // 4320 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, // 4336 1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, // 4352 2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, // 4368 2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, // 4384 5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, // 4400 5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, // 4416 5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, // 4432 2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, // 4448 2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, // 4464 1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, // 4480 4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, // 4496 3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, // 4512 3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, // 4528 4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, // 4544 4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, // 4560 2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, // 4576 2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, // 4592 5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, // 4608 4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, // 4624 5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, // 4640 4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, // 4656 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, // 4672 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, // 4688 1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, // 4704 3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, // 4720 4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, // 4736 1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, // 4752 5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, // 4768 2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, // 4784 2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, // 4800 3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, // 4816 5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, // 4832 1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, // 4848 3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, // 4864 5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, // 4880 1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, // 4896 5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, // 4912 2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, // 4928 3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, // 4944 2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, // 4960 3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, // 4976 3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, // 4992 3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, // 5008 4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, // 5024 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, // 5040 2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, // 5056 4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, // 5072 3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, // 5088 5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, // 5104 1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, // 5120 5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, // 5136 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, // 5152 1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, // 5168 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, // 5184 4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, // 5200 1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, // 5216 4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, // 5232 1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, // 5248 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, // 5264 3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, // 5280 4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, // 5296 5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, // 5312 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, // 5328 3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, // 5344 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, // 5360 2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798 // 5376 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, // 5392 2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, // 5408 5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, // 5424 5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, // 5440 5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, // 5456 5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, // 5472 5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, // 5488 5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, // 5504 5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, // 5520 5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, // 5536 5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, // 5552 5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, // 5568 5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, // 5584 5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, // 5600 6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, // 5616 6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, // 5632 6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, // 5648 6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, // 5664 6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, // 5680 6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, // 5696 6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, // 5712 6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, // 5728 6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, // 5744 6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, // 5760 6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, // 5776 6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, // 5792 6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, // 5808 6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, // 5824 6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, // 5840 6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, // 5856 6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, // 5872 6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, // 5888 6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, // 5904 6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, // 5920 6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, // 5936 6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, // 5952 6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, // 5968 6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, // 5984 6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, // 6000 6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, // 6016 6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, // 6032 6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, // 6048 6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, // 6064 6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, // 6080 6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, // 6096 6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, // 6112 6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, // 6128 6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, // 6144 6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, // 6160 6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, // 6176 6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, // 6192 6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, // 6208 6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, // 6224 6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, // 6240 6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, // 6256 3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, // 6272 6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, // 6288 6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, // 6304 3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, // 6320 6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, // 6336 6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, // 6352 6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, // 6368 6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, // 6384 6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, // 6400 6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, // 6416 6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, // 6432 4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, // 6448 6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, // 6464 6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, // 6480 3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, // 6496 6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, // 6512 6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, // 6528 6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, // 6544 6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, // 6560 6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, // 6576 6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, // 6592 6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, // 6608 6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, // 6624 6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, // 6640 6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, // 6656 6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, // 6672 7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, // 6688 7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, // 6704 7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, // 6720 7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, // 6736 7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, // 6752 7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, // 6768 7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, // 6784 7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, // 6800 7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, // 6816 7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, // 6832 7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, // 6848 7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, // 6864 7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, // 6880 7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, // 6896 7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, // 6912 7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, // 6928 7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, // 6944 7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, // 6960 7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, // 6976 7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, // 6992 7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, // 7008 7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, // 7024 7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, // 7040 7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, // 7056 7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, // 7072 7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, // 7088 7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, // 7104 7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, // 7120 7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, // 7136 7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, // 7152 7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, // 7168 7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, // 7184 7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, // 7200 7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, // 7216 7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, // 7232 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, // 7248 7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, // 7264 7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, // 7280 7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, // 7296 7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, // 7312 7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, // 7328 7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, // 7344 7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, // 7360 7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, // 7376 7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, // 7392 7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, // 7408 7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, // 7424 7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, // 7440 3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, // 7456 7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, // 7472 7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, // 7488 7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, // 7504 7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, // 7520 4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7536 7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, // 7552 7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, // 7568 7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, // 7584 7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, // 7600 7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, // 7616 7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, // 7632 7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, // 7648 7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, // 7664 7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, // 7680 7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, // 7696 7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, // 7712 8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, // 7728 8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, // 7744 8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, // 7760 8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, // 7776 8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, // 7792 8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, // 7808 8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, // 7824 8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, // 7840 8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, // 7856 8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, // 7872 8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, // 7888 8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, // 7904 8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, // 7920 8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, // 7936 8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, // 7952 8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, // 7968 8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, // 7984 8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, // 8000 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, // 8016 8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, // 8032 8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, // 8048 8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, // 8064 8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, // 8080 8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, // 8096 8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, // 8112 8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, // 8128 8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, // 8144 8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, // 8160 8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, // 8176 8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, // 8192 8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, // 8208 8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, // 8224 8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, // 8240 8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, // 8256 8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, // 8272 8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, // 8288 8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, // 8304 8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, // 8320 8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, // 8336 8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, // 8352 8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, // 8368 8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, // 8384 8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, // 8400 8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, // 8416 8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, // 8432 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, // 8448 8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, // 8464 8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, // 8480 8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, // 8496 8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, // 8512 8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, // 8528 8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, // 8544 8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, // 8560 8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, // 8576 8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, // 8592 8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, // 8608 8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, // 8624 8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, // 8640 8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, // 8656 8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, // 8672 8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, // 8688 4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, // 8704 8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, // 8720 8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, // 8736 8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, // 8752 8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, // 8768 9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, // 8784 9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, // 8800 9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, // 8816 9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, // 8832 9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, // 8848 9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, // 8864 9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, // 8880 9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, // 8896 9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, // 8912 9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, // 8928 9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, // 8944 9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, // 8960 9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, // 8976 9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, // 8992 9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, // 9008 9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, // 9024 9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, // 9040 9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, // 9056 9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, // 9072 9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, // 9088 9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, // 9104 9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, // 9120 9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, // 9136 9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, // 9152 9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, // 9168 9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, // 9184 9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, // 9200 9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, // 9216 9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, // 9232 9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, // 9248 9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, // 9264 9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, // 9280 9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, // 9296 9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, // 9312 9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, // 9328 9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, // 9344 9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, // 9360 9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, // 9376 3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, // 9392 9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, // 9408 9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, // 9424 9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, // 9440 4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, // 9456 9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, // 9472 9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, // 9488 9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, // 9504 9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, // 9520 9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, // 9536 9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, // 9552 9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, // 9568 9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, // 9584 9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, // 9600 9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, // 9616 9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, // 9632 9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, // 9648 9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, // 9664 9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, // 9680 9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, // 9696 9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, // 9712 9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, // 9728 9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, // 9744 9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, // 9760 9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, // 9776 9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, // 9792 9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, // 9808 9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, // 9824 10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, // 9840 10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, // 9856 10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, // 9872 10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, // 9888 10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, // 9904 10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, // 9920 10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, // 9936 10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, // 9952 10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, // 9968 4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, // 9984 10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, //10000 10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, //10016 10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, //10032 10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, //10048 10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, //10064 10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, //10080 10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, //10096 10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, //10112 4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, //10128 10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, //10144 10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, //10160 10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, //10176 10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, //10192 10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, //10208 10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, //10224 10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, //10240 10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, //10256 10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, //10272 10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, //10288 10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, //10304 10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, //10320 10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, //10336 10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, //10352 10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, //10368 10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, //10384 10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, //10400 4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, //10416 10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, //10432 10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, //10448 10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, //10464 10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, //10480 10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, //10496 10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, //10512 10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, //10528 10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, //10544 10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, //10560 10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, //10576 10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, //10592 10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, //10608 10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, //10624 10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, //10640 10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, //10656 10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, //10672 10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, //10688 10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, //10704 10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, //10720 10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, //10736 10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, //10752 10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, //10768 10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, //10784 10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, //10800 10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, //10816 10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, //10832 10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, //10848 10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, //10864 10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, //10880 10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, //10896 11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, //10912 11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, //10928 11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, //10944 4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, //10960 11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, //10976 11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, //10992 11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, //11008 11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, //11024 11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, //11040 11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, //11056 11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, //11072 11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, //11088 11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, //11104 11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, //11120 11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, //11136 11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, //11152 11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, //11168 11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, //11184 11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, //11200 11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, //11216 11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, //11232 11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, //11248 11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, //11264 11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, //11280 11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, //11296 11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, //11312 11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, //11328 11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, //11344 11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, //11360 11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, //11376 11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, //11392 11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, //11408 11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, //11424 11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, //11440 11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, //11456 11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, //11472 4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, //11488 11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, //11504 11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, //11520 11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, //11536 11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, //11552 11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, //11568 11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, //11584 11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, //11600 11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, //11616 11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, //11632 11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, //11648 11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, //11664 11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, //11680 11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, //11696 11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, //11712 11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, //11728 11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, //11744 11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, //11760 11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, //11776 11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, //11792 11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, //11808 11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, //11824 11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, //11840 11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, //11856 11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, //11872 11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, //11888 11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, //11904 11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, //11920 11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, //11936 12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, //11952 12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, //11968 12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, //11984 12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, //12000 12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, //12016 12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, //12032 12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, //12048 12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, //12064 12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, //12080 12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, //12096 12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, //12112 12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, //12128 12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, //12144 12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, //12160 12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, //12176 4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, //12192 4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, //12208 4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, //12224 12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, //12240 12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, //12256 12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, //12272 12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, //12288 12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, //12304 12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, //12320 12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, //12336 12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, //12352 12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, //12368 12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, //12384 12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, //12400 12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, //12416 12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, //12432 12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, //12448 12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, //12464 12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, //12480 12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, //12496 12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, //12512 12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, //12528 12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, //12544 12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, //12560 12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, //12576 12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, //12592 12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, //12608 12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, //12624 12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, //12640 12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, //12656 12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, //12672 12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, //12688 12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, //12704 12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, //12720 12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, //12736 12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, //12752 12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, //12768 12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, //12784 12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, //12800 12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, //12816 12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, //12832 12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, //12848 12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, //12864 12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, //12880 12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, //12896 12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, //12912 12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, //12928 12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, //12944 12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, //12960 12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, //12976 4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, //12992 13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, //13008 13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, //13024 13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, //13040 13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, //13056 13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, //13072 13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, //13088 13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, //13104 4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, //13120 13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, //13136 13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, //13152 13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, //13168 13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, //13184 13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, //13200 13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, //13216 13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, //13232 13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, //13248 13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, //13264 13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, //13280 13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, //13296 13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, //13312 13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, //13328 13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, //13344 13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, //13360 5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, //13376 13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, //13392 13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, //13408 13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, //13424 13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, //13440 13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, //13456 13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, //13472 13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, //13488 13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, //13504 13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, //13520 13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, //13536 13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, //13552 13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, //13568 13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, //13584 13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, //13600 13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, //13616 13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, //13632 13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, //13648 13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, //13664 13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, //13680 13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, //13696 13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, //13712 13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, //13728 13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, //13744 13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, //13760 13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, //13776 13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, //13792 13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, //13808 13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, //13824 13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, //13840 13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, //13856 13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, //13872 13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, //13888 13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, //13904 13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, //13920 13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, //13936 13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, //13952 13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, //13968 13968,13969,13970,13971,13972, //13973 ****************************************************************************************) ); implementation end.doublecmd-1.1.30/components/chsdet/chsdet.pas0000644000175000001440000000112715104114162020204 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit chsdet; interface uses Big5Freq, CharDistribution, CustomDetector, EUCKRFreq, EUCSampler, EUCTWFreq, GB2312Freq, JISFreq, JpCntx, MBUnicodeMultiProber, MultiModelProber, nsCodingStateMachine, nsCore, nsEscCharsetProber, nsGroupProber, nsHebrewProber, nsLatin1Prober, nsMBCSMultiProber, nsPkg, nsSBCharSetProber, nsSBCSGroupProber, nsUniversalDetector, LangBulgarianModel, LangCyrillicModel, LangGreekModel, LangHebrewModel; implementation end. doublecmd-1.1.30/components/chsdet/chsdet.lpk0000644000175000001440000001547015104114162020215 0ustar alexxusers doublecmd-1.1.30/components/chsdet/ReadMe.txt0000644000175000001440000001020615104114162020121 0ustar alexxusers-----------Summary Charset Detector - as the name says - is a stand alone component for automatic charset detection of a given text. It can be useful for internationalisation support in multilingual applications such as web-script editors or Unicode editors. Given input buffer will be analysed to guess used encoding. The result can be used as control parameter for charset conversation procedure. Based on Mozilla's i18n component - https://dxr.mozilla.org/mozilla/source/extensions/universalchardet/. -----------State Version 0.2.9 stable. Copyright (C) 2011-2019 Alexander Koblov The latest version can be found at https://github.com/doublecmd/doublecmd/tree/master/components/chsdet/. -----------Original Based on Charset Detector - http://chsdet.sourceforge.net Copyright (C) 2006-2013 Nikolaj Yakowlew -----------Requirements Charset Detector doesn't need any external components. -----------Output As result you will get guessed charset as MS Windows Code Page id and charset name. -----------Licence Charset Detector is open source project and distributed under GNU LGPL. See the GNU Lesser General Public License for more details - https://opensource.org/licenses/LGPL-2.1 -----------Supported charsets +-----------+---------------------------+------------------------+ | Code pade | Name | Note | +-----------+---------------------------+------------------------+ | 0 | ASCII | Pseudo code page. | | 855 | IBM855 | | | 866 | IBM866 | | | 932 | Shift_JIS | | | 950 | Big5 | | | 1200 | UTF-16LE | | | 1201 | UTF-16BE | | | 1251 | windows-1251 | | | 1252 | windows-1252 | | | 1253 | windows-1253 | | | 1255 | windows-1255 | | | 10007 | x-mac-cyrillic | | | 12000 | X-ISO-10646-UCS-4-2143 | | | 12000 | UTF-32LE | | | 12001 | X-ISO-10646-UCS-4-3412 | | | 12001 | UTF-32BE | | | 20866 | KOI8-R | | | 28595 | ISO-8859-5 | | | 28595 | ISO-8859-5 | | | 28597 | ISO-8859-7 | | | 28598 | ISO-8859-8 | | | 50222 | ISO-2022-JP | | | 50225 | ISO-2022-KR | | | 50227 | ISO-2022-CN | | | 51932 | EUC-JP | | | 51936 | x-euc-tw | | | 51949 | EUC-KR | | | 52936 | HZ-GB-2312 | | | 54936 | GB18030 | | | 65001 | UTF-8 | | +-----------+---------------------------+------------------------+ -----------Types Return values NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; Returned types rCharsetInfo = record Name: PAnsiChar; // Charset GNU canonical name CodePage: Integer; // MS Windows CodePage ID Language: PAnsiChar; end; -----------Usage sample Below is a small usage sample in Free Pascal. function DetectEncoding(const S: String): rCharsetInfo; var Detector: TnsUniversalDetector; begin Detector:= TnsUniversalDetector.Create; try Detector.Reset; Detector.HandleData(PAnsiChar(S), Length(S)); if not Detector.Done then Detector.DataEnd; Result:= Detector.GetDetectedCharsetInfo; finally FreeAndNil(Detector); end; end; doublecmd-1.1.30/components/chsdet/Licence.txt0000644000175000001440000005750515104114162020343 0ustar alexxusers GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS doublecmd-1.1.30/components/build.sh0000755000175000001440000000177015104114162016415 0ustar alexxusers#!/bin/sh set -e # Compiling components # Do not execute this script directly. # This script is called from ../build.sh. # Get processor architecture if [ -z $CPU_TARGET ] ; then export CPU_TARGET=$(fpc -iTP) fi # Generate PIC code if [ "$CPU_TARGET" != "arm" ] ; then if [ -f /etc/fpc.cfg ] ; then cp /etc/fpc.cfg ./ echo "-fPIC" >> fpc.cfg export PPC_CONFIG_PATH=$(pwd) fi fi # Build components basedir=$(pwd) cd components $lazbuild chsdet/chsdet.lpk $DC_ARCH $lazbuild multithreadprocs/multithreadprocslaz.lpk $DC_ARCH $lazbuild kascrypt/kascrypt.lpk $DC_ARCH $lazbuild doublecmd/doublecmd_common.lpk $DC_ARCH $lazbuild Image32/Image32.lpk $DC_ARCH $lazbuild KASToolBar/kascomp.lpk $DC_ARCH $lazbuild viewer/viewerpackage.lpk $DC_ARCH $lazbuild gifanim/pkg_gifanim.lpk $DC_ARCH $lazbuild synunihighlighter/synuni.lpk $DC_ARCH $lazbuild virtualterminal/virtualterminal.lpk $DC_ARCH cd $basedir # Remove temporary file if [ -f fpc.cfg ] ; then rm -f fpc.cfg export PPC_CONFIG_PATH= fi doublecmd-1.1.30/components/build.bat0000644000175000001440000000116015104114162016537 0ustar alexxusers@echo off rem Compiling components rem Do not execute this script directly. rem This script is called from ..\build.bat. pushd components lazbuild chsdet\chsdet.lpk %DC_ARCH% lazbuild multithreadprocs\multithreadprocslaz.lpk %DC_ARCH% lazbuild kascrypt\kascrypt.lpk %DC_ARCH% lazbuild doublecmd\doublecmd_common.lpk %DC_ARCH% lazbuild Image32\Image32.lpk %DC_ARCH% lazbuild KASToolBar\kascomp.lpk %DC_ARCH% lazbuild viewer\viewerpackage.lpk %DC_ARCH% lazbuild gifanim\pkg_gifanim.lpk %DC_ARCH% lazbuild synunihighlighter\synuni.lpk %DC_ARCH% lazbuild virtualterminal\virtualterminal.lpk %DC_ARCH% popd doublecmd-1.1.30/components/KASToolBar/0000755000175000001440000000000015104114162016653 5ustar alexxusersdoublecmd-1.1.30/components/KASToolBar/kastoolpanel.pas0000644000175000001440000000154315104114162022057 0ustar alexxusersunit KASToolPanel; {$mode delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Toolwin; type { TKASToolPanel } TKASToolPanel = class(TToolWindow) public constructor Create(TheOwner: TComponent); override; published property Align default alNone; property Anchors; property AutoSize; property BorderSpacing; property ChildSizing; property EdgeBorders default [ebTop]; property EdgeInner; property EdgeOuter; property TabOrder; property Visible; end; procedure Register; implementation procedure Register; begin RegisterComponents('KASComponents',[TKASToolPanel]); end; { TKASToolPanel } constructor TKASToolPanel.Create(TheOwner: TComponent); begin inherited Create(TheOwner); EdgeBorders:= [ebTop]; end; end. doublecmd-1.1.30/components/KASToolBar/kastoolitems.pas0000644000175000001440000003662515104114162022112 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Basic tool items types for KASToolBar Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit KASToolItems; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCXmlConfig, DCBasicTypes; type TKASToolBarItems = class; TKASToolItem = class; TOnLoadToolItem = procedure (Item: TKASToolItem) of object; {$interfaces corba} IToolOwner = interface ['{A7908D38-1E13-4E8D-8FA7-8830A2FF9290}'] function ExecuteToolItem(Item: TKASToolItem): Boolean; function GetToolItemShortcutsHint(Item: TKASToolItem): String; end; {$interfaces default} { TKASToolBarLoader } TKASToolBarLoader = class protected function CreateItem(Node: TXmlNode): TKASToolItem; virtual; public procedure Load(Config: TXmlConfig; RootNode: TXmlNode; OnLoadToolItem: TOnLoadToolItem); virtual; end; { TKASToolItem } TKASToolItem = class private FToolOwner: IToolOwner; FUserData: Pointer; protected FAction: TBasicAction; property ToolOwner: IToolOwner read FToolOwner; public function ActionHint: Boolean; virtual; procedure Assign(OtherItem: TKASToolItem); virtual; function CheckExecute(ToolItemID: String): Boolean; virtual; function Clone: TKASToolItem; virtual; abstract; function ConfigNodeName: String; virtual; abstract; function GetEffectiveHint: String; virtual; abstract; function GetEffectiveText: String; virtual; abstract; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); virtual; abstract; procedure Save(Config: TXmlConfig; Node: TXmlNode); procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); virtual; abstract; procedure SetToolOwner(AToolOwner: IToolOwner); virtual; property UserData: Pointer read FUserData write FUserData; property Action: TBasicAction read FAction; end; TKASToolItemClass = class of TKASToolItem; { TKASSeparatorItem } TKASSeparatorItem = class(TKASToolItem) public Style: Boolean; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; function GetEffectiveHint: String; override; function GetEffectiveText: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; end; { TKASNormalItem } TKASNormalItem = class(TKASToolItem) private FShortcutsHint: Boolean; strict private FID: String; // Unique identificator of the button function GetID: String; strict protected procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); virtual; procedure SaveIcon(Config: TXmlConfig; Node: TXmlNode); virtual; procedure SaveText(Config: TXmlConfig; Node: TXmlNode); virtual; public Icon: String; Text: String; Hint: String; function ActionHint: Boolean; override; procedure Assign(OtherItem: TKASToolItem); override; function CheckExecute(ToolItemID: String): Boolean; override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; function GetEffectiveHint: String; override; function GetEffectiveText: String; override; function GetShortcutsHint: String; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; property ID: String read GetID; end; { TKASMenuItem } TKASMenuItem = class(TKASNormalItem) procedure ToolItemLoaded(Item: TKASToolItem); private FItems: TKASToolBarItems; public constructor Create; reintroduce; destructor Destroy; override; procedure Assign(OtherItem: TKASToolItem); override; function CheckExecute(ToolItemID: String): Boolean; override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; procedure SetToolOwner(AToolOwner: IToolOwner); override; property SubItems: TKASToolBarItems read FItems; end; { TKASToolBarItems } TKASToolBarItems = class private FButtons: TFPList; function GetButton(Index: Integer): TKASToolItem; function GetButtonCount: Integer; procedure SetButton(Index: Integer; const AValue: TKASToolItem); public constructor Create; destructor Destroy; override; function Add(Item: TKASToolItem): Integer; procedure Clear; function Insert(InsertAt: Integer; Item: TKASToolItem): Integer; procedure Move(FromIndex, ToIndex: Integer); {en Returns the item at Index, removes it from the list but does not free it like Remove. } function ReleaseItem(Index: Integer): TKASToolItem; procedure Remove(Index: Integer); property Count: Integer read GetButtonCount; property Items[Index: Integer]: TKASToolItem read GetButton write SetButton; default; end; { TKASToolBarSerializer } TKASToolBarSerializer = class private FDeserializedItem: TKASToolItem; procedure SetDeserializedItem(Item: TKASToolItem); public function Deserialize(Stream: TStream; Loader: TKASToolBarLoader): TKASToolItem; procedure Serialize(Stream: TStream; Item: TKASToolItem); end; const MenuItemConfigNode = 'Menu'; NormalItemConfigNode = 'Normal'; SeparatorItemConfigNode = 'Separator'; implementation uses DCStrUtils; { TKASToolItem } function TKASToolItem.ActionHint: Boolean; begin Result := True; end; procedure TKASToolItem.Assign(OtherItem: TKASToolItem); begin FUserData := OtherItem.FUserData; end; function TKASToolItem.CheckExecute(ToolItemID: String): Boolean; begin Result := False; end; procedure TKASToolItem.Save(Config: TXmlConfig; Node: TXmlNode); begin Node := Config.AddNode(Node, ConfigNodeName); SaveContents(Config, Node); end; procedure TKASToolItem.SetToolOwner(AToolOwner: IToolOwner); begin FToolOwner := AToolOwner; end; { TKASToolBarSerializer } function TKASToolBarSerializer.Deserialize(Stream: TStream; Loader: TKASToolBarLoader): TKASToolItem; var Config: TXmlConfig; begin Result := nil; FDeserializedItem := nil; Config := TXmlConfig.Create; try Config.ReadFromStream(Stream); Loader.Load(Config, Config.RootNode, @SetDeserializedItem); Result := FDeserializedItem; finally Config.Free; end; end; procedure TKASToolBarSerializer.Serialize(Stream: TStream; Item: TKASToolItem); var Config: TXmlConfig; begin Config := TXmlConfig.Create; try Item.Save(Config, Config.RootNode); Config.WriteToStream(Stream); finally Config.Free; end; end; procedure TKASToolBarSerializer.SetDeserializedItem(Item: TKASToolItem); begin FDeserializedItem := Item; end; { TKASToolBarLoader } function TKASToolBarLoader.CreateItem(Node: TXmlNode): TKASToolItem; begin if Node.CompareName(MenuItemConfigNode) = 0 then Result := TKASMenuItem.Create else if Node.CompareName(NormalItemConfigNode) = 0 then Result := TKASNormalItem.Create else if Node.CompareName(SeparatorItemConfigNode) = 0 then Result := TKASSeparatorItem.Create else Result := nil; end; procedure TKASToolBarLoader.Load(Config: TXmlConfig; RootNode: TXmlNode; OnLoadToolItem: TOnLoadToolItem); var Node: TXmlNode; Item: TKASToolItem; begin Node := RootNode.FirstChild; while Assigned(Node) do begin Item := CreateItem(Node); if Assigned(Item) then try Item.Load(Config, Node, Self); OnLoadToolItem(Item); Item := nil; finally FreeAndNil(Item); end; Node := Node.NextSibling; end; end; { TKASMenuItem } procedure TKASMenuItem.Assign(OtherItem: TKASToolItem); var MenuItem: TKASMenuItem; Item: TKASToolItem; I: Integer; begin inherited Assign(OtherItem); if OtherItem is TKASMenuItem then begin MenuItem := TKASMenuItem(OtherItem); FItems.Clear; for I := 0 to MenuItem.SubItems.Count - 1 do begin Item := MenuItem.SubItems.Items[I].Clone; Item.SetToolOwner(ToolOwner); FItems.Add(Item); end; end; end; function TKASMenuItem.CheckExecute(ToolItemID: String): Boolean; var I: Integer; begin Result := inherited CheckExecute(ToolItemID); if not Result then begin for I := 0 to SubItems.Count - 1 do begin if SubItems[I].CheckExecute(ToolItemID) then Exit(True); end; end; end; function TKASMenuItem.Clone: TKASToolItem; begin Result := TKASMenuItem.Create; Result.Assign(Self); end; function TKASMenuItem.ConfigNodeName: String; begin Result := MenuItemConfigNode; end; constructor TKASMenuItem.Create; begin FItems := TKASToolBarItems.Create; end; destructor TKASMenuItem.Destroy; begin inherited Destroy; FItems.Free; end; procedure TKASMenuItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); SubItems.Clear; Node := Config.FindNode(Node, 'MenuItems', False); if Assigned(Node) then Loader.Load(Config, Node, @ToolItemLoaded); end; procedure TKASMenuItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); var I: Integer; begin inherited SaveContents(Config, Node); if SubItems.Count > 0 then begin Node := Config.AddNode(Node, 'MenuItems'); for I := 0 to SubItems.Count - 1 do SubItems.Items[I].Save(Config, Node); end; end; procedure TKASMenuItem.SetToolOwner(AToolOwner: IToolOwner); var I: Integer; begin inherited SetToolOwner(AToolOwner); for I := 0 to SubItems.Count - 1 do SubItems.Items[I].SetToolOwner(ToolOwner); end; procedure TKASMenuItem.ToolItemLoaded(Item: TKASToolItem); begin Item.SetToolOwner(ToolOwner); SubItems.Add(Item); end; { TKASDividerItem } procedure TKASSeparatorItem.Assign(OtherItem: TKASToolItem); begin inherited Assign(OtherItem); if OtherItem is TKASSeparatorItem then Style := TKASSeparatorItem(OtherItem).Style; end; function TKASSeparatorItem.Clone: TKASToolItem; begin Result := TKASSeparatorItem.Create; Result.Assign(Self); end; function TKASSeparatorItem.ConfigNodeName: String; begin Result := SeparatorItemConfigNode; end; function TKASSeparatorItem.GetEffectiveHint: String; begin Result := ''; end; function TKASSeparatorItem.GetEffectiveText: String; begin Result := ''; end; procedure TKASSeparatorItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin Style := Config.GetValue(Node, 'Style', False); end; procedure TKASSeparatorItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValue(Node, 'Style', Style); end; { TKASNormalItem } procedure TKASNormalItem.Assign(OtherItem: TKASToolItem); var NormalItem: TKASNormalItem; begin inherited Assign(OtherItem); if OtherItem is TKASNormalItem then begin // Don't copy ID. NormalItem := TKASNormalItem(OtherItem); Icon := NormalItem.Icon; Text := NormalItem.Text; Hint := NormalItem.Hint; end; end; function TKASNormalItem.CheckExecute(ToolItemID: String): Boolean; begin Result := (ID = ToolItemID); if Result and Assigned(FToolOwner) then FToolOwner.ExecuteToolItem(Self); end; function TKASNormalItem.Clone: TKASToolItem; begin Result := TKASNormalItem.Create; Result.Assign(Self); end; function TKASNormalItem.ConfigNodeName: String; begin Result := NormalItemConfigNode; end; function TKASNormalItem.GetEffectiveHint: String; var ShortcutsHint: String; begin Result := Hint; ShortcutsHint := GetShortcutsHint; if ShortcutsHint <> '' then AddStrWithSep(Result, '(' + ShortcutsHint + ')', ' '); end; function TKASNormalItem.GetEffectiveText: String; begin Result := Text; end; function TKASNormalItem.GetID: String; var Guid: TGuid; begin if FID = EmptyStr then begin if CreateGUID(Guid) = 0 then FID := GUIDToString(Guid) else FID := IntToStr(Random(MaxInt)); end; Result := FID; end; function TKASNormalItem.GetShortcutsHint: String; begin if Assigned(FToolOwner) then Result := FToolOwner.GetToolItemShortcutsHint(Self) else begin Result := ''; end; FShortcutsHint := (Length(Result) > 0); end; procedure TKASNormalItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('ID') = 0 then FID := Config.GetContent(Node) else if Node.CompareName('Text') = 0 then Text := Config.GetContent(Node) else if Node.CompareName('Icon') = 0 then Icon := Config.GetContent(Node) else if Node.CompareName('Hint') = 0 then Hint := Config.GetContent(Node); Node := Node.NextSibling; end; end; procedure TKASNormalItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValue(Node, 'ID', ID); SaveText(Config, Node); SaveIcon(Config, Node); SaveHint(Config, Node); end; procedure TKASNormalItem.SaveHint(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Hint', Hint, ''); end; procedure TKASNormalItem.SaveIcon(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Icon', Icon, ''); end; procedure TKASNormalItem.SaveText(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Text', Text, ''); end; function TKASNormalItem.ActionHint: Boolean; begin Result := not FShortcutsHint; end; { TKASToolBarItems } constructor TKASToolBarItems.Create; begin FButtons := TFPList.Create; end; destructor TKASToolBarItems.Destroy; begin Clear; inherited Destroy; FButtons.Free; end; function TKASToolBarItems.Insert(InsertAt: Integer; Item: TKASToolItem): Integer; begin FButtons.Insert(InsertAt, Item); Result := InsertAt; end; procedure TKASToolBarItems.Move(FromIndex, ToIndex: Integer); begin FButtons.Move(FromIndex, ToIndex); end; function TKASToolBarItems.ReleaseItem(Index: Integer): TKASToolItem; begin Result := TKASToolItem(FButtons[Index]); FButtons.Delete(Index); end; function TKASToolBarItems.Add(Item: TKASToolItem): Integer; begin Result := FButtons.Add(Item); end; procedure TKASToolBarItems.Remove(Index: Integer); begin TKASToolItem(FButtons[Index]).Free; FButtons.Delete(Index); end; procedure TKASToolBarItems.Clear; var i: Integer; begin for i := 0 to FButtons.Count - 1 do TKASToolItem(FButtons[i]).Free; FButtons.Clear; end; function TKASToolBarItems.GetButtonCount: Integer; begin Result := FButtons.Count; end; function TKASToolBarItems.GetButton(Index: Integer): TKASToolItem; begin Result := TKASToolItem(FButtons[Index]); end; procedure TKASToolBarItems.SetButton(Index: Integer; const AValue: TKASToolItem); begin TKASToolItem(FButtons[Index]).Free; FButtons[Index] := AValue; end; end. doublecmd-1.1.30/components/KASToolBar/kastoolbar.pas0000644000175000001440000010601415104114162021523 0ustar alexxusers{ Double Commander components ------------------------------------------------------------------------- Toolbar panel class Copyright (C) 2006-2023 Alexander Koblov (alexx2000@mail.ru) contributors: 2012 Przemyslaw Nagay (cobines@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASToolBar; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, ComCtrls, Graphics, Dialogs, ExtCtrls, Buttons, FileUtil, Menus, DCXmlConfig, KASToolItems, LCLVersion, LMessages; type TOnToolButtonClick = procedure (Sender: TObject) of object; TOnToolButtonMouseUpDown = procedure (Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer) of object; TOnToolButtonMouseMove = procedure (Sender: TObject; Shift:TShiftState; X,Y:Integer; NumberOfButton: Integer) of object; TOnToolButtonDragOver = procedure(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer) of object; TOnToolButtonDragDrop = procedure(Sender, Source: TObject; X, Y: Integer) of object; TOnToolButtonEndDrag = procedure(Sender, Target: TObject; X,Y: Integer) of object; TOnLoadButtonGlyph = function (ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap of object; TOnToolItemExecute = procedure (ToolItem: TKASToolItem) of object; TOnConfigLoadItem = function (Config: TXmlConfig; Node: TXmlNode): TKASToolItem of object; TOnToolItemShortcutsHint = function (Sender: TObject; ToolItem: TKASNormalItem): String of object; TTypeOfConfigurationLoad = (tocl_FlushCurrentToolbarContent, tocl_AddToCurrentToolbarContent); TKASToolBar = class; { TKASToolButton } TKASToolButton = class(TSpeedButton) private FOverlay: TBitmap; FToolItem: TKASToolItem; function GetToolBar: TKASToolBar; protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; function DrawGlyph(ACanvas: TCanvas; const AClient: TRect; const AOffset: TPoint; AState: TButtonState; ATransparent: Boolean; BiDiFlags: Longint): TRect; override; procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override; procedure CMHintShow(var Message: TLMessage); message CM_HINTSHOW; public constructor Create(AOwner: TComponent; Item: TKASToolItem); reintroduce; destructor Destroy; override; procedure Click; override; public property ToolBar: TKASToolBar read GetToolBar; property ToolItem: TKASToolItem read FToolItem; end; { TKASToolDivider } TKASToolDivider = class(TKASToolButton) protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; procedure Paint; override; end; { TKASToolBar } TKASToolBar = class(TToolBar, IToolOwner) private FButtonHeight: Integer; FButtonWidth: Integer; FFlat: Boolean; FGlyphSize: Integer; FRadioToolBar: Boolean; FRowHeight, FRowWidth: Integer; FShowDividerAsButton: Boolean; FToolItemExecutors: TFPList; FToolItems: TKASToolBarItems; FToolPopupMenu: TPopupMenu; FOwnsToolItems: Boolean; {$if lcl_fullversion < 1010000} FUpdateCount: Integer; {$endif} FOnToolButtonClick: TOnToolButtonClick; FOnToolButtonMouseDown: TOnToolButtonMouseUpDown; FOnToolButtonMouseUp: TOnToolButtonMouseUpDown; FOnToolButtonMouseMove: TOnToolButtonMouseMove; FOnToolButtonDragOver: TOnToolButtonDragOver; FOnToolButtonDragDrop: TOnToolButtonDragDrop; FOnToolButtonEndDrag: TOnToolButtonEndDrag; FOnLoadButtonGlyph: TOnLoadButtonGlyph; FOnLoadButtonOverlay: TOnLoadButtonGlyph; FOnToolItemExecute: TOnToolItemExecute; FOnToolItemShortcutsHint: TOnToolItemShortcutsHint; FKASToolBarFlags: TToolBarFlags; FResizeButtonsNeeded: Boolean; procedure AssignToolButtonProperties(ToolButton: TKASToolButton); procedure ClearExecutors; function CreateButton(Item: TKASToolItem): TKASToolButton; function ExecuteToolItem(Item: TKASToolItem): Boolean; function FindButton(Button: TKASToolButton): Integer; function GetToolItemShortcutsHint(Item: TKASToolItem): String; function LoadBtnIcon(IconPath: String): TBitMap; function GetButton(Index: Integer): TKASToolButton; procedure InsertButton(InsertAt: Integer; ToolButton: TKASToolButton); procedure SetButtonHeight(const AValue: Integer); procedure SetButtonWidth(const AValue: Integer); procedure SetChangePath(const {%H-}AValue: String); procedure SetEnvVar(const {%H-}AValue: String); procedure SetFlat(const AValue: Boolean); procedure SetGlyphSize(const AValue: Integer); procedure ShowMenu(ToolButton: TKASToolButton); procedure ToolButtonClick(Sender: TObject); procedure ToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); procedure ToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); procedure ToolButtonMouseMove(Sender: TObject; Shift:TShiftState; X,Y:Integer); procedure ToolButtonDragOver(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); procedure ToolButtonDragDrop(Sender, Source: TObject; X,Y: Integer); procedure ToolButtonEndDrag(Sender, Target: TObject; X, Y: Integer); procedure ToolItemLoaded(Item: TKASToolItem); procedure ToolMenuClicked(Sender: TObject); procedure UpdateButtonsTags; protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure AlignControls(AControl: TControl; var RemainingClientRect: TRect); override; procedure FontChanged(Sender: TObject); override; function WrapButtons(UseWidth: integer; out NewWidth, NewHeight: Integer; Simulate: boolean): Boolean; procedure ResizeButtons; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; function AddButton(Item: TKASToolItem): TKASToolButton; procedure AddToolItemExecutor(ToolItemClass: TKASToolItemClass; ExecuteFunction: TOnToolItemExecute); procedure Clear; procedure ClickItem(ToolItemID: String); overload; function InsertButton(InsertAt: Integer; Item: TKASToolItem): TKASToolButton; function InsertButton(InsertAt: TKASToolButton; Item: TKASToolItem): TKASToolButton; procedure MoveButton(ButtonIndex, MovePosition: Integer); procedure MoveButton(SourceButton: TKASToolButton; TargetToolBar: TKASToolBar; InsertAt: TKASToolButton); procedure RemoveButton(Index: Integer); procedure RemoveButton(Button: TKASToolButton); procedure RemoveToolItemExecutor(ExecuteFunction: TOnToolItemExecute); procedure UncheckAllButtons; procedure UpdateIcon(ToolButton: TKASToolButton); procedure UseItems(AItems: TKASToolBarItems); procedure LoadConfiguration(Config: TXmlConfig; RootNode: TXmlNode; Loader: TKASToolBarLoader; ConfigurationLoadType:TTypeOfConfigurationLoad); procedure SaveConfiguration(Config: TXmlConfig; RootNode: TXmlNode); procedure BeginUpdate; override; procedure EndUpdate; override; procedure SetButtonSize(NewButtonWidth, NewButtonHeight: Integer); function PublicExecuteToolItem(Item: TKASToolItem): Boolean; property Buttons[Index: Integer]: TKASToolButton read GetButton; published property OnLoadButtonGlyph : TOnLoadButtonGlyph read FOnLoadButtonGlyph write FOnLoadButtonGlyph; property OnToolButtonClick: TOnToolButtonClick read FOnToolButtonClick write FOnToolButtonClick; property OnLoadButtonOverlay: TOnLoadButtonGlyph read FOnLoadButtonOverlay write FOnLoadButtonOverlay; property OnToolButtonMouseDown: TOnToolButtonMouseUpDown read FOnToolButtonMouseDown write FOnToolButtonMouseDown; property OnToolButtonMouseUp: TOnToolButtonMouseUpDown read FOnToolButtonMouseUp write FOnToolButtonMouseUp; property OnToolButtonMouseMove: TOnToolButtonMouseMove read FOnToolButtonMouseMove write FOnToolButtonMouseMove; property OnToolButtonDragDrop: TOnToolButtonDragDrop read FOnToolButtonDragDrop write FOnToolButtonDragDrop; property OnToolButtonEndDrag: TOnToolButtonEndDrag read FOnToolButtonEndDrag write FOnToolButtonEndDrag; property OnToolButtonDragOver: TOnToolButtonDragOver read FOnToolButtonDragOver write FOnToolButtonDragOver; property OnToolItemExecute: TOnToolItemExecute read FOnToolItemExecute write FOnToolItemExecute; property OnToolItemShortcutsHint: TOnToolItemShortcutsHint read FOnToolItemShortcutsHint write FOnToolItemShortcutsHint; property RadioToolBar: Boolean read FRadioToolBar write FRadioToolBar default False; property Flat: Boolean read FFlat write SetFlat default False; property GlyphSize: Integer read FGlyphSize write SetGlyphSize; property ButtonHeight: Integer read FButtonHeight write SetButtonHeight default 22; property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 23; property ShowDividerAsButton: Boolean read FShowDividerAsButton write FShowDividerAsButton default False; end; procedure Register; implementation uses Themes, Types, Math, ActnList, DCOSUtils; type PToolItemExecutor = ^TToolItemExecutor; TToolItemExecutor = record ToolItemClass: TKASToolItemClass; ToolItemExecute: TOnToolItemExecute; end; procedure Register; begin RegisterComponents('KASComponents',[TKASToolBar]); end; { TKASToolBar } procedure TKASToolBar.InsertButton(InsertAt: Integer; ToolButton: TKASToolButton); begin if InsertAt < 0 then InsertAt:= 0; if InsertAt > ButtonList.Count then InsertAt:= ButtonList.Count; ButtonList.Insert(InsertAt, ToolButton); FToolItems.Insert(InsertAt, ToolButton.ToolItem); UpdateButtonsTags; ResizeButtons; end; function TKASToolBar.InsertButton(InsertAt: TKASToolButton; Item: TKASToolItem): TKASToolButton; var Index: Integer; begin Index := ButtonList.IndexOf(InsertAt); if Index < 0 then Index := ButtonCount; Result := InsertButton(Index, Item); end; procedure TKASToolBar.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); begin WrapButtons(Width, PreferredWidth, PreferredHeight, True); end; procedure TKASToolBar.AlignControls(AControl: TControl; var RemainingClientRect: TRect); var NewWidth, NewHeight: integer; begin if tbfPlacingControls in FKASToolBarFlags then exit; Include(FKASToolBarFlags, tbfPlacingControls); DisableAlign; try AdjustClientRect(RemainingClientRect); if IsVertical then WrapButtons(Height, NewWidth, NewHeight, False) else WrapButtons(Width, NewWidth, NewHeight, False); finally Exclude(FKASToolBarFlags, tbfPlacingControls); EnableAlign; end; end; procedure TKASToolBar.FontChanged(Sender: TObject); begin inherited FontChanged(Sender); ResizeButtons; end; function TKASToolBar.WrapButtons(UseWidth: integer; out NewWidth, NewHeight: Integer; Simulate: boolean): Boolean; var ARect: TRect; x: Integer; y: Integer; CurControl: TControl; StartX, StartY: Integer; procedure CalculatePosition; var NewBounds: TRect; begin if IsVertical then begin NewBounds := Bounds(x, y, FRowWidth, CurControl.Height); repeat if (not Wrapable) or (NewBounds.Bottom <= ARect.Bottom) or (NewBounds.Top = StartY) then begin // control fits into the column x := NewBounds.Left; y := NewBounds.Top; break; end; // try next column NewBounds.Top := StartY; NewBounds.Bottom := NewBounds.Top + CurControl.Height; inc(NewBounds.Left, FRowWidth); inc(NewBounds.Right, FRowWidth); until false; end else begin NewBounds := Bounds(x, y, CurControl.Width, FRowHeight); repeat if (not Wrapable) or (NewBounds.Right <= ARect.Right) or (NewBounds.Left = StartX) then begin // control fits into the row x := NewBounds.Left; y := NewBounds.Top; break; end; // try next row NewBounds.Left := StartX; NewBounds.Right := NewBounds.Left + CurControl.Width; inc(NewBounds.Top, FRowHeight); inc(NewBounds.Bottom, FRowHeight); until false; end; end; var CurClientRect: TRect; AdjustClientFrame: TRect; i: Integer; w, h: Longint; begin Result := True; NewWidth := 0; NewHeight := 0; DisableAlign; BeginUpdate; try CurClientRect := ClientRect; inc(CurClientRect.Right, UseWidth - Width); ARect := CurClientRect; AdjustClientRect(ARect); AdjustClientFrame.Left := ARect.Left - CurClientRect.Left; AdjustClientFrame.Top := ARect.Top - CurClientRect.Top; AdjustClientFrame.Right := CurClientRect.Right - ARect.Right; AdjustClientFrame.Bottom := CurClientRect.Bottom - ARect.Bottom; //DebugLn(['TToolBar.WrapButtons ',DbgSName(Self),' ARect=',dbgs(ARect)]); // important: top, left button must start in the AdjustClientRect top, left // otherwise Toolbar.AutoSize=true will create an endless loop StartX := ARect.Left; StartY := ARect.Top; x := StartX; y := StartY; for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); if not CurControl.IsControlVisible then Continue; CalculatePosition; w := CurControl.Width; h := CurControl.Height; if (not Simulate) and ((CurControl.Left <> x) or (CurControl.Top <> y)) then begin CurControl.SetBounds(x,y,w,h); // Note: do not use SetBoundsKeepBase end; // adjust NewWidth, NewHeight NewWidth := Max(NewWidth, x + w + AdjustClientFrame.Right); NewHeight := Max(NewHeight, y + h + AdjustClientFrame.Bottom); // step to next position if IsVertical then Inc(y, h) else Inc(x, w); end; finally EndUpdate; EnableAlign; end; end; procedure TKASToolBar.ResizeButtons; var w, h: LongInt; i: Integer; CurControl: TControl; begin if FUpdateCount > 0 then begin FResizeButtonsNeeded := True; Exit; end; InvalidatePreferredChildSizes; FRowWidth := ButtonWidth; FRowHeight := ButtonHeight; // Row height is at least initial button height // First recalculate RowWidth & RowHeight for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); w := ButtonWidth; h := ButtonHeight; CurControl.GetPreferredSize(w, h); if FRowWidth < w then FRowWidth := w; if FRowHeight < h then FRowHeight := h; end; FResizeButtonsNeeded := False; // Now resize buttons. DisableAlign; BeginUpdate; try for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); if IsVertical then begin w := FRowWidth; h := ButtonHeight; end else begin w := ButtonWidth; h := FRowHeight; end; CurControl.GetPreferredSize(w, h); if (CurControl.Width <> w) or (CurControl.Height <> h) then CurControl.SetBounds(CurControl.Left, CurControl.Top, w, h); end; InvalidatePreferredSize; AdjustSize; finally EndUpdate; EnableAlign; end; end; procedure TKASToolBar.SaveConfiguration(Config: TXmlConfig; RootNode: TXmlNode); var Node: TXmlNode; Item: TKASToolItem; i: Integer; begin if ButtonCount > 0 then begin Node := Config.AddNode(RootNode, 'Row'); for i := 0 to ButtonCount - 1 do begin Item := TKASToolButton(Buttons[i]).ToolItem; Item.Save(Config, Node); end; end; end; function TKASToolBar.LoadBtnIcon(IconPath: String): TBitMap; var picture: TPicture; begin if (IconPath = '') or (not mbFileExists(IconPath)) then Exit(nil); Picture := TPicture.Create; try Picture.LoadFromFile(IconPath); Result := TBitmap.Create; Result.Assign(Picture.Bitmap); finally FreeAndNil(Picture); end; end; procedure TKASToolBar.LoadConfiguration(Config: TXmlConfig; RootNode: TXmlNode; Loader: TKASToolBarLoader; ConfigurationLoadType:TTypeOfConfigurationLoad); var Node: TXmlNode; begin BeginUpdate; if ConfigurationLoadType=tocl_FlushCurrentToolbarContent then begin Clear; end; try Node := Config.FindNode(RootNode, 'Row', False); if Assigned(Node) then Loader.Load(Config, Node, @ToolItemLoaded); finally EndUpdate; end; end; procedure TKASToolBar.AssignToolButtonProperties(ToolButton: TKASToolButton); begin ToolButton.OnClick:= @ToolButtonClick; ToolButton.OnMouseDown:= @ToolButtonMouseDown; ToolButton.OnMouseUp:= @ToolButtonMouseUp; ToolButton.OnMouseMove:= @ToolButtonMouseMove; ToolButton.OnDragDrop:= @ToolButtonDragDrop; ToolButton.OnDragOver:= @ToolButtonDragOver; ToolButton.OnEndDrag:= @ToolButtonEndDrag; end; function TKASToolBar.GetToolItemShortcutsHint(Item: TKASToolItem): String; begin Result := ''; if Assigned(FOnToolItemShortcutsHint) and (Item is TKASNormalItem) then Result := FOnToolItemShortcutsHint(Self, TKASNormalItem(Item)); end; function TKASToolBar.GetButton(Index: Integer): TKASToolButton; begin Result:= TKASToolButton(ButtonList.Items[Index]); end; procedure TKASToolBar.SetChangePath(const AValue: String); begin end; procedure TKASToolBar.SetEnvVar(const AValue: String); begin end; procedure TKASToolBar.SetFlat(const AValue: Boolean); var I: Integer; begin FFlat:= AValue; for I:= 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Flat:= FFlat; end; procedure TKASToolBar.SetGlyphSize(const AValue: Integer); var I: Integer; begin if FGlyphSize = AValue then Exit; FGlyphSize:= AValue; BeginUpdate; try for I := 0 to ButtonList.Count - 1 do UpdateIcon(TKASToolButton(ButtonList[i])); finally EndUpdate; end; end; procedure TKASToolBar.ShowMenu(ToolButton: TKASToolButton); procedure MakeMenu(PopupMenu: TMenuItem; MenuItem: TKASMenuItem); var I: Integer; Item: TKASToolItem; PopupMenuItem: TMenuItem; BitmapTmp: TBitmap = nil; sText: String; begin for I := 0 to MenuItem.SubItems.Count - 1 do begin Item := MenuItem.SubItems.Items[I]; if Item is TKASSeparatorItem then begin PopupMenu.AddSeparator; end else begin PopupMenuItem := TMenuItem.Create(PopupMenu); sText := Item.GetEffectiveText; if sText = '' then sText := Item.GetEffectiveHint; PopupMenuItem.Caption := StringReplace(StringReplace(sText, #$0A, ' | ', [rfReplaceAll]), ' | ----', '', [rfReplaceAll]); if Item is TKASNormalItem then begin if Assigned(FOnLoadButtonGlyph) then BitmapTmp := FOnLoadButtonGlyph(Item, 16, clMenu); if not Assigned(BitmapTmp) then BitmapTmp := LoadBtnIcon(TKASNormalItem(Item).Icon); PopupMenuItem.Bitmap := BitmapTmp; FreeAndNil(BitmapTmp); end; PopupMenuItem.Tag := PtrInt(Item); PopupMenuItem.OnClick := TNotifyEvent(@ToolMenuClicked); PopupMenu.Add(PopupMenuItem); if Item is TKASMenuItem then MakeMenu(PopupMenuItem, TKASMenuItem(Item)); end; end; end; var Point: TPoint; begin FToolPopupMenu.Free; FToolPopupMenu := TPopupMenu.Create(Self); MakeMenu(FToolPopupMenu.Items, ToolButton.ToolItem as TKASMenuItem); Point.x := ToolButton.Left; Point.y := ToolButton.Top + ToolButton.Height; Point := Self.ClientToScreen(Point); FToolPopupMenu.PopUp(Point.x, Point.y); end; procedure TKASToolBar.ToolButtonClick(Sender: TObject); var Button: TKASToolButton; begin Button := Sender as TKASToolButton; // Do not allow depressing down buttons. if FRadioToolBar and not Button.Down then Button.Down := True; if not ExecuteToolItem(Button.ToolItem) then begin if Assigned(FOnToolButtonClick) then FOnToolButtonClick(Button) else if Button.ToolItem is TKASMenuItem then begin ShowMenu(Button); end; end; end; procedure TKASToolBar.ToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseDown) then FOnToolButtonMouseDown(Sender, Button, Shift, X,Y); end; procedure TKASToolBar.ToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseUp) then FOnToolButtonMouseUp(Sender, Button, Shift, X,Y); end; procedure TKASToolBar.ToolItemLoaded(Item: TKASToolItem); begin AddButton(Item); end; procedure TKASToolBar.ToolMenuClicked(Sender: TObject); begin ExecuteToolItem(TKASToolItem((Sender as TMenuItem).Tag)); end; procedure TKASToolBar.ToolButtonMouseMove(Sender: TObject; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseMove) then FOnToolButtonMouseMove(Sender, Shift, X,Y, (Sender as TSpeedButton).Tag); end; procedure TKASToolBar.ToolButtonDragOver(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); begin if Assigned(FOnToolButtonDragOver) then FOnToolButtonDragOver(Sender, Source, X,Y, State, Accept, (Sender as TSpeedButton).Tag); end; procedure TKASToolBar.ToolButtonDragDrop(Sender, Source: TObject; X,Y: Integer); begin if Assigned(FOnToolButtonDragDrop) then FOnToolButtonDragDrop(Sender, Source, X, Y); end; procedure TKASToolBar.ToolButtonEndDrag(Sender, Target: TObject; X, Y: Integer); begin if Assigned(FOnToolButtonEndDrag) then FOnToolButtonEndDrag(Sender, Target, X, Y); end; procedure TKASToolBar.MoveButton(ButtonIndex, MovePosition: Integer); begin ButtonList.Move(ButtonIndex, MovePosition); FToolItems.Move(ButtonIndex, MovePosition); UpdateButtonsTags; ResizeButtons; end; procedure TKASToolBar.MoveButton(SourceButton: TKASToolButton; TargetToolBar: TKASToolBar; InsertAt: TKASToolButton); var Index: Integer; begin Index := FindButton(SourceButton); if (Index <> -1) and (FToolItems[Index] = SourceButton.ToolItem) then begin SourceButton.FToolItem := nil; TargetToolBar.InsertButton(InsertAt, FToolItems.ReleaseItem(Index)); ButtonList.Delete(Index); Application.ReleaseComponent(SourceButton); // Free later UpdateButtonsTags; Resize; end; end; procedure TKASToolBar.UpdateButtonsTags; var I: Integer; begin for I:= 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Tag:= I; end; procedure TKASToolBar.UpdateIcon(ToolButton: TKASToolButton); var Bitmap: TBitmap = nil; begin try if Assigned(FOnLoadButtonGlyph) then Bitmap := FOnLoadButtonGlyph(ToolButton.ToolItem, FGlyphSize, clBtnFace); if not Assigned(Bitmap) and (ToolButton.ToolItem is TKASNormalItem) then Bitmap := LoadBtnIcon(TKASNormalItem(ToolButton.ToolItem).Icon); try if Assigned(Bitmap) and Assigned(FOnLoadButtonOverlay) and (not (ToolButton.ToolItem is TKASSeparatorItem)) then begin FreeAndNil(ToolButton.FOverlay); ToolButton.FOverlay := FOnLoadButtonOverlay(ToolButton.ToolItem, FGlyphSize div 2, clBtnFace); end; ToolButton.Glyph.Assign(Bitmap); finally Bitmap.Free; end; except // Ignore end; end; procedure TKASToolBar.UseItems(AItems: TKASToolBarItems); var i: Integer; Button: TKASToolButton; begin if Assigned(AItems) then begin BeginUpdate; Clear; if FOwnsToolItems then FToolItems.Free; FToolItems := AItems; FOwnsToolItems := False; // Insert the existing items as buttons. for i := 0 to FToolItems.Count - 1 do begin Button := CreateButton(FToolItems.Items[i]); if Assigned(Button) then ButtonList.Insert(ButtonCount, Button); end; UpdateButtonsTags; ResizeButtons; EndUpdate; end; end; procedure TKASToolBar.Clear; var I: Integer; begin BeginUpdate; for I := 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Free; ButtonList.Clear; if Assigned(FToolItems) then FToolItems.Clear; EndUpdate; end; procedure TKASToolBar.ClearExecutors; var I: Integer; begin for I := 0 to FToolItemExecutors.Count - 1 do Dispose(PToolItemExecutor(FToolItemExecutors[I])); FToolItemExecutors.Clear; end; procedure TKASToolBar.ClickItem(ToolItemID: String); var I: Integer; Button: TKASToolButton; NormalItem: TKASNormalItem; begin for I := 0 to ButtonList.Count - 1 do begin Button := TKASToolButton(ButtonList.Items[I]); if Button.ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(Button.ToolItem); if NormalItem.ID = ToolItemID then begin Button.Click; Break; end; if Button.ToolItem.CheckExecute(ToolItemID) then Break; end; end; end; procedure TKASToolBar.SetButtonHeight(const AValue: Integer); begin SetButtonSize(ButtonWidth, AValue); end; procedure TKASToolBar.SetButtonWidth(const AValue: Integer); begin SetButtonSize(AValue, ButtonHeight); end; constructor TKASToolBar.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FGlyphSize:= 16; // by default FUpdateCount:= 0; FButtonWidth := 23; FButtonHeight := 22; FKASToolBarFlags := []; FToolItemExecutors := TFPList.Create; FToolItems := TKASToolBarItems.Create; FOwnsToolItems := True; end; function TKASToolBar.CreateButton(Item: TKASToolItem): TKASToolButton; begin if Assigned(Item) then begin if FOwnsToolItems then Item.SetToolOwner(Self); if Item is TKASSeparatorItem then begin Result := TKASToolDivider.Create(Self, Item); end else begin Result := TKASToolButton.Create(Self, Item); Result.ShowHint := True; Result.Caption := Item.GetEffectiveText; Result.Hint := Item.GetEffectiveHint; if ShowCaptions and (Result.Caption = '') then Result.Caption := Result.Hint; if Assigned(Item.Action) then begin Result.AllowAllUp := True; Result.Action := Item.Action; end; end; Result.Flat := FFlat; if FRadioToolBar then begin Result.GroupIndex := 1; Result.AllowAllUp := True; end; Result.ShowCaption := ShowCaptions; UpdateIcon(Result); AssignToolButtonProperties(Result); Result.Parent := Self; end else Result := nil; end; destructor TKASToolBar.Destroy; begin if not FOwnsToolItems then FToolItems := nil; // Unassign before Clear so that items are not cleared. Clear; inherited Destroy; ClearExecutors; FToolItemExecutors.Free; if FOwnsToolItems then FToolItems.Free; end; function TKASToolBar.ExecuteToolItem(Item: TKASToolItem): Boolean; var I: Integer; Executor: PToolItemExecutor; BestMatch: PToolItemExecutor = nil; begin for I := 0 to FToolItemExecutors.Count - 1 do begin Executor := PToolItemExecutor(FToolItemExecutors[I]); if Assigned(Executor^.ToolItemExecute) and Item.InheritsFrom(Executor^.ToolItemClass) and (not Assigned(BestMatch) or (Executor^.ToolItemClass.InheritsFrom(BestMatch^.ToolItemClass))) then begin BestMatch := Executor; end; end; Result := Assigned(BestMatch); if Result then BestMatch^.ToolItemExecute(Item); end; { TKASToolBar.PublicExecuteToolItem } function TKASToolBar.PublicExecuteToolItem(Item: TKASToolItem): Boolean; begin result:=ExecuteToolItem(Item); end; procedure TKASToolBar.BeginUpdate; begin {$if lcl_fullversion < 1010000} Inc(FUpdateCount); {$endif} inherited BeginUpdate; DisableAutoSizing; end; procedure TKASToolBar.EndUpdate; begin EnableAutoSizing; inherited EndUpdate; {$if lcl_fullversion < 1010000} Dec(FUpdateCount); {$endif} if (FUpdateCount = 0) and FResizeButtonsNeeded then ResizeButtons; end; function TKASToolBar.FindButton(Button: TKASToolButton): Integer; var I: Integer; begin for I := 0 to ButtonList.Count - 1 do if TKASToolButton(ButtonList[I]) = Button then Exit(I); Result := -1; end; procedure TKASToolBar.SetButtonSize(NewButtonWidth, NewButtonHeight: Integer); begin FButtonWidth := NewButtonWidth; FButtonHeight := NewButtonHeight; ResizeButtons; end; function TKASToolBar.AddButton(Item: TKASToolItem): TKASToolButton; begin Result := InsertButton(ButtonCount, Item); end; procedure TKASToolBar.AddToolItemExecutor(ToolItemClass: TKASToolItemClass; ExecuteFunction: TOnToolItemExecute); var Executor: PToolItemExecutor; begin New(Executor); FToolItemExecutors.Add(Executor); Executor^.ToolItemClass := ToolItemClass; Executor^.ToolItemExecute := ExecuteFunction; end; function TKASToolBar.InsertButton(InsertAt: Integer; Item: TKASToolItem): TKASToolButton; begin Result := CreateButton(Item); if Assigned(Result) then InsertButton(InsertAt, Result); end; procedure TKASToolBar.RemoveButton(Index: Integer); var Button: TKASToolButton; begin Button := TKASToolButton(ButtonList.Items[Index]); ButtonList.Delete(Index); Button.Free; FToolItems.Remove(Index); UpdateButtonsTags; Resize; end; procedure TKASToolBar.RemoveButton(Button: TKASToolButton); var Index: Integer; begin Index := FindButton(Button); if Index <> -1 then RemoveButton(Index); end; procedure TKASToolBar.RemoveToolItemExecutor(ExecuteFunction: TOnToolItemExecute); var Executor: PToolItemExecutor; I: Integer; begin for I := FToolItemExecutors.Count - 1 downto 0 do begin Executor := PToolItemExecutor(FToolItemExecutors[I]); if (TMethod(Executor^.ToolItemExecute).Code = TMethod(ExecuteFunction).Code) and (TMethod(Executor^.ToolItemExecute).Data = TMethod(ExecuteFunction).Data) then begin Dispose(Executor); FToolItemExecutors.Delete(I); end; end; end; procedure TKASToolBar.UncheckAllButtons; var I: Integer; begin for I:= 0 to ButtonCount - 1 do Buttons[I].Down:= False; end; { TKASToolButton } procedure TKASToolButton.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); var TextSize: TSize; begin if (Parent = nil) then inherited else begin if ToolBar.IsVertical then begin PreferredWidth := ToolBar.FRowWidth; PreferredHeight := ToolBar.ButtonHeight; end else begin PreferredWidth := ToolBar.ButtonWidth; PreferredHeight := ToolBar.FRowHeight; end; if ShowCaption and (Caption <> EmptyStr) then begin // Size to extent of the icon + caption. TextSize := Canvas.TextExtent(Caption); PreferredWidth := Max(TextSize.cx + Glyph.Width + 16, PreferredWidth); PreferredHeight := Max(TextSize.cy + 4, PreferredHeight); end; end; end; function TKASToolButton.DrawGlyph(ACanvas: TCanvas; const AClient: TRect; const AOffset: TPoint; AState: TButtonState; ATransparent: Boolean; BiDiFlags: Longint): TRect; var X, Y: Integer; AWidth : Integer; begin Result := inherited DrawGlyph(ACanvas, AClient, AOffset, AState, ATransparent, BiDiFlags); if Assigned(FOverlay) then begin AWidth := FOverlay.Width; X := AClient.Left + AOffset.X + ToolBar.FGlyphSize - AWidth; Y := AClient.Top + AOffset.Y + ToolBar.FGlyphSize - AWidth; Canvas.Draw(X, Y, FOverlay); end; end; procedure TKASToolButton.ActionChange(Sender: TObject; CheckDefaults: Boolean); begin if Sender is TCustomAction then begin with TCustomAction(Sender) do begin if CheckDefaults or (Self.GroupIndex = 0) then Self.GroupIndex := GroupIndex; if not CheckDefaults or Enabled then Self.Enabled := Enabled; if not CheckDefaults or Visible then Self.Visible := Visible; if not CheckDefaults or Checked then Self.Down := Checked; end; end; end; procedure TKASToolButton.CMHintShow(var Message: TLMessage); begin if (ActionLink <> nil) and FToolItem.ActionHint then begin inherited CMHintShow(Message); end else begin DoOnShowHint(TCMHintShow(Message).HintInfo); end; end; constructor TKASToolButton.Create(AOwner: TComponent; Item: TKASToolItem); begin inherited Create(AOwner); FToolItem := Item; end; destructor TKASToolButton.Destroy; begin inherited Destroy; FOverlay.Free; end; procedure TKASToolButton.Click; begin if Assigned(OnClick) then OnClick(Self); end; function TKASToolButton.GetToolBar: TKASToolBar; begin Result := Parent as TKASToolBar; end; { TKASToolDivider } procedure TKASToolDivider.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if Assigned(Parent) and (Parent is TKASToolBar) and (not TKASSeparatorItem(FToolItem).Style) and (not TKASToolBar(Parent).FShowDividerAsButton) then begin if ToolBar.IsVertical then begin PreferredHeight := 5; PreferredWidth := ToolBar.FRowWidth; end else begin PreferredWidth := 5; PreferredHeight := ToolBar.FRowHeight; end; end else inherited; end; procedure TKASToolDivider.Paint; var DividerRect: TRect; Details: TThemedElementDetails; begin if Assigned(Parent) and (Parent is TKASToolBar) and not TKASToolBar(Parent).FShowDividerAsButton then begin if TKASSeparatorItem(FToolItem).Style then Exit; DividerRect:= ClientRect; if ToolBar.IsVertical then begin Details:= ThemeServices.GetElementDetails(ttbSeparatorVertNormal); // Theme services have no strict rule to draw divider in the center, // so we should calculate rectangle here // on windows 7 divider can't be less than 4 pixels if (DividerRect.Bottom - DividerRect.Top) > 5 then begin DividerRect.Top := (DividerRect.Top + DividerRect.Bottom) div 2 - 3; DividerRect.Bottom := DividerRect.Top + 5; end; if not ThemeServices.ThemesEnabled then begin InflateRect(DividerRect, -2, 0); Canvas.Pen.Color := clBtnShadow; Canvas.Line(DividerRect.Left, DividerRect.Top + 1, DividerRect.Right, DividerRect.Top + 1); Canvas.Pen.Color := clBtnHighlight; Canvas.Line(DividerRect.Left, DividerRect.Top + 2, DividerRect.Right, DividerRect.Top + 2); Exit; end; end else begin Details:= ThemeServices.GetElementDetails(ttbSeparatorNormal); // Theme services have no strict rule to draw divider in the center, // so we should calculate rectangle here // on windows 7 divider can't be less than 4 pixels if (DividerRect.Right - DividerRect.Left) > 5 then begin DividerRect.Left := (DividerRect.Left + DividerRect.Right) div 2 - 3; DividerRect.Right := DividerRect.Left + 5; end; end; ThemeServices.DrawElement(Canvas.GetUpdatedHandle([csBrushValid, csPenValid]), Details, DividerRect); end else inherited Paint; end; end. doublecmd-1.1.30/components/KASToolBar/kasstatusbar.pas0000644000175000001440000000151115104114162022065 0ustar alexxusersunit KASStatusBar; {$mode delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls; type { TKASStatusBar } TKASStatusBar = class(TStatusBar) public procedure InvalidatePanel(PanelIndex: Integer; PanelParts: TPanelParts); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('KASComponents', [TKASStatusBar]); end; { TKASStatusBar } procedure TKASStatusBar.InvalidatePanel(PanelIndex: Integer; PanelParts: TPanelParts); begin if (PanelIndex >= 0) and (ppText in PanelParts) then begin if Length(Panels[PanelIndex].Text) > 0 then Panels[PanelIndex].Width:= Canvas.TextWidth('WW' + Panels[PanelIndex].Text); end; inherited InvalidatePanel(PanelIndex, PanelParts); end; end. doublecmd-1.1.30/components/KASToolBar/kasprogressbar.pas0000644000175000001440000001355115104114162022415 0ustar alexxusers{ Double Commander Components ------------------------------------------------------------------------- Extended ProgressBar class Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2011-2018 Alexander Koblov (alexx2000@mail.ru) Windows 7 implementation based on "Windows 7 Component Library" by Daniel Wischnewski (http://www.gumpi.com/blog) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit KASProgressBar; {$mode objfpc}{$H+} interface uses LCLType, Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls {$IFDEF LCLWIN32} , InterfaceBase, ComObj, LMessages, Windows, Themes, dwTaskbarList {$ENDIF} {$IFDEF LCLGTK2} , Gtk2 {$ENDIF} {$IFDEF LCLQT} , qt4, qtwidgets {$ENDIF} {$IFDEF LCLQT5} , qt5, qtwidgets {$ENDIF} {$IFDEF LCLQT6} , qt6, qtwidgets {$ENDIF} ; type { TKASProgressBar } TKASProgressBar = class(TProgressBar) private FShowInTaskbar: Boolean; {$IFDEF LCLWIN32} FBarText: String; FTaskBarEntryHandle: HWND; FTaskbarList: ITaskbarList; FTaskbarList3: ITaskbarList3; {$ENDIF} protected {$IFDEF LCLWIN32} procedure InitializeWnd; override; procedure WMPaint(var Msg: TLMPaint); message LM_PAINT; {$ENDIF} procedure DoOnResize; override; public constructor Create(AOwner: TComponent); override; procedure SetProgress(CurrentValue: Int64; MaxValue: Int64; BarText: String = ''); published property ShowInTaskbar: Boolean read FShowInTaskbar write FShowInTaskbar default False; end; procedure Register; implementation procedure Register; begin RegisterComponents('KASComponents',[TKASProgressBar]); end; { TKASProgressBar } {$IFDEF LCLWIN32} procedure TKASProgressBar.InitializeWnd; var aOwnerForm: TWinControl; begin inherited InitializeWnd; if CheckWin32Version(6, 1) then begin aOwnerForm:= GetParentForm(Self); if Assigned(aOwnerForm) and (aOwnerForm <> Application.MainForm) then FTaskBarEntryHandle := aOwnerForm.Handle else FTaskBarEntryHandle := Widgetset.AppHandle; end; BarShowText:= BarShowText and CheckWin32Version(8); end; procedure TKASProgressBar.WMPaint(var Msg: TLMPaint); var OldFont: HFONT; OldBkMode: Integer; Details: TThemedElementDetails; begin inherited WMPaint(Msg); if BarShowText and ThemeServices.ThemesEnabled then begin OldBkMode:= SetBkMode(Msg.DC, TRANSPARENT); Details:= ThemeServices.GetElementDetails(tpBar); OldFont:= SelectObject(Msg.DC, Font.Reference.Handle); ThemeServices.DrawText(Msg.DC, Details, FBarText, Msg.PaintStruct^.rcPaint, DT_SINGLELINE or DT_CENTER or DT_VCENTER, 0); SelectObject(Msg.DC, OldFont); SetBkMode(Msg.DC, OldBkMode); end; end; {$ENDIF} procedure TKASProgressBar.DoOnResize; begin inherited; Max := Width; end; constructor TKASProgressBar.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IFDEF LCLWIN32} FTaskbarList3 := nil; FTaskBarEntryHandle := INVALID_HANDLE_VALUE; // Works only under Windows 7 and higher if CheckWin32Version(6, 1) then try FTaskbarList := ITaskbarList(CreateComObject(CLSID_TaskbarList)); FTaskbarList.HrInit; FTaskbarList.QueryInterface(CLSID_TaskbarList3, FTaskbarList3); except FTaskbarList3 := nil; end; {$ENDIF} {$IFDEF LCLGTK2} // Have to disable LCLGTK2 default progress bar text // set in TGtk2WSProgressBar.UpdateProgressBarText. BarShowText := False; {$ENDIF} end; procedure TKASProgressBar.SetProgress(CurrentValue: Int64; MaxValue: Int64; BarText: String); {$IFDEF LCLGTK2} var wText: String; {$ENDIF} {$IF DEFINED(LCLQT) OR DEFINED(LCLQT5) OR DEFINED(LCLQT6)} var wText: WideString; {$ENDIF} begin if MaxValue <> 0 then Position := Round(CurrentValue * Max / MaxValue) else Position := 0; {$IFDEF LCLWIN32} if BarShowText then begin if MaxValue = 0 then FBarText := BarText else if BarText = '' then FBarText := FloatToStrF((CurrentValue / MaxValue) * 100, ffFixed, 0, 0) + '%' else FBarText := BarText + ' (' + FloatToStrF((CurrentValue / MaxValue) * 100, ffFixed, 0, 0) + '%)'; end; if FShowInTaskbar and (FTaskBarEntryHandle <> INVALID_HANDLE_VALUE) and Assigned(FTaskbarList3) then begin FTaskbarList3.SetProgressValue(FTaskBarEntryHandle, Position, Max); end; {$ENDIF} {$IFDEF LCLGTK2} { %v - the current progress value. %l - the lower bound for the progress value. %u - the upper bound for the progress value. %p - the current progress percentage. } if BarText <> '' then wText := BarText + ' (%p%%)' else wText := '%p%%'; gtk_progress_set_format_string(PGtkProgress(Self.Handle), PChar(wText)); // Have to reset 'show_text' every time because LCLGTK2 will set it according to BarShowText. gtk_progress_set_show_text(PGtkProgress(Self.Handle), True); {$ENDIF} {$IF DEFINED(LCLQT) OR DEFINED(LCLQT5) OR DEFINED(LCLQT6)} { %p - is replaced by the percentage completed. %v - is replaced by the current value. %m - is replaced by the total number of steps. } if BarText <> '' then wText := WideString(BarText) + ' (%p%)' else wText := '%p%'; QProgressBar_setFormat(QProgressBarH(TQtProgressBar(Self.Handle).Widget), @wText); //QProgressBar_setTextVisible(QProgressBarH(TQtProgressBar(Self.Handle).Widget), True); {$ENDIF} end; end. doublecmd-1.1.30/components/KASToolBar/kaspathedit.pas0000644000175000001440000003245515104114162021672 0ustar alexxusers{ Double Commander Components ------------------------------------------------------------------------- Path edit class with auto complete feature Copyright (C) 2012-2022 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit KASPathEdit; {$mode delphi} {$IF DEFINED(LCLCOCOA)} {$modeswitch objectivec1} {$ENDIF} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ShellCtrls, LCLType, LCLVersion {$IF DEFINED(LCLCOCOA)} , CocoaAll, CocoaWindows {$ENDIF} ; type { TKASPathEdit } TKASPathEdit = class(TEdit) private FKeyDown: Word; FBasePath: String; FListBox: TListBox; FPanel: THintWindow; FAutoComplete: Boolean; FStringList: TStringList; FObjectTypes: TObjectTypes; FFileSortType: TFileSortType; private procedure setTextAndSelect( newText:String ); procedure handleSpecialKeys( var Key: Word ); procedure handleUpKey; procedure handleDownKey; procedure AutoComplete(const Path: String); procedure SetObjectTypes(const AValue: TObjectTypes); procedure FormChangeBoundsEvent(Sender: TObject); procedure ListBoxClick(Sender: TObject); procedure ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private function isShowingListBox(): Boolean; inline; procedure ShowListBox; procedure HideListBox; protected {$IF DEFINED(LCLWIN32)} procedure CreateWnd; override; {$ENDIF} {$IF DEFINED(LCLCOCOA)} procedure TextChanged; override; {$ENDIF} procedure DoExit; override; procedure VisibleChanged; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyUpAfterInterface(var Key: Word; Shift: TShiftState); override; public onKeyESCAPE: TNotifyEvent; onKeyRETURN: TNotifyEvent; constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property ObjectTypes: TObjectTypes read FObjectTypes write SetObjectTypes; property FileSortType: TFileSortType read FFileSortType write FFileSortType; end; procedure Register; implementation uses LazUTF8, Math, LazFileUtils, Masks {$IF DEFINED(LCLWIN32)} , ComObj {$ENDIF} {$IF DEFINED(MSWINDOWS)} , Windows {$ENDIF} ; {$IF DEFINED(LCLWIN32)} const SHACF_AUTOAPPEND_FORCE_ON = $40000000; SHACF_AUTOSUGGEST_FORCE_ON = $10000000; SHACF_FILESYS_ONLY = $00000010; SHACF_FILESYS_DIRS = $00000020; function SHAutoComplete(hwndEdit: HWND; dwFlags: DWORD): HRESULT; stdcall; external 'shlwapi.dll'; function SHAutoCompleteX(hwndEdit: HWND; ObjectTypes: TObjectTypes): Boolean; var dwFlags: DWORD; begin if (ObjectTypes = []) then Exit(False); dwFlags := SHACF_AUTOAPPEND_FORCE_ON or SHACF_AUTOSUGGEST_FORCE_ON; if (otNonFolders in ObjectTypes) then dwFlags := dwFlags or SHACF_FILESYS_ONLY else if (otFolders in ObjectTypes) then dwFlags := dwFlags or SHACF_FILESYS_DIRS; Result:= (SHAutoComplete(hwndEdit, dwFlags) = 0); end; {$ENDIF} procedure Register; begin RegisterComponents('KASComponents', [TKASPathEdit]); end; function FilesSortAlphabet(List: TStringList; Index1, Index2: Integer): Integer; begin Result:= CompareFilenames(List[Index1], List[Index2]); end; function FilesSortFoldersFirst(List: TStringList; Index1, Index2: Integer): Integer; var Attr1, Attr2: IntPtr; begin Attr1:= IntPtr(List.Objects[Index1]); Attr2:= IntPtr(List.Objects[Index2]); if (Attr1 and faDirectory <> 0) and (Attr2 and faDirectory <> 0) then Result:= CompareFilenames(List[Index1], List[Index2]) else begin if (Attr1 and faDirectory <> 0) then Result:= -1 else begin Result:= 1; end; end; end; procedure GetFilesInDir(const ABaseDir: String; AMask: String; AObjectTypes: TObjectTypes; AResult: TStringList; AFileSortType: TFileSortType); var ExcludeAttr: Integer; SearchRec: TSearchRec; {$IF DEFINED(MSWINDOWS)} ErrMode : LongWord; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} ErrMode:= SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOALIGNMENTFAULTEXCEPT or SEM_NOGPFAULTERRORBOX or SEM_NOOPENFILEERRORBOX); try {$ENDIF} if FindFirst(ABaseDir + AMask, faAnyFile, SearchRec) = 0 then begin ExcludeAttr:= 0; if not (otHidden in AObjectTypes) then ExcludeAttr:= ExcludeAttr or faHidden; if not (otFolders in AObjectTypes) then ExcludeAttr:= ExcludeAttr or faDirectory; repeat if (SearchRec.Attr and ExcludeAttr <> 0) then Continue; if (SearchRec.Name = '.') or (SearchRec.Name = '..')then Continue; if (SearchRec.Attr and faDirectory = 0) and not (otNonFolders in AObjectTypes) then Continue; AResult.AddObject(SearchRec.Name, TObject(IntPtr(SearchRec.Attr))); until FindNext(SearchRec) <> 0; if AResult.Count > 0 then begin case AFileSortType of fstAlphabet: AResult.CustomSort(@FilesSortAlphabet); fstFoldersFirst: AResult.CustomSort(@FilesSortFoldersFirst); end; end; end; SysUtils.FindClose(SearchRec); {$IF DEFINED(MSWINDOWS)} finally SetErrorMode(ErrMode); end; {$ENDIF} end; { TKASPathEdit } function TKASPathEdit.isShowingListBox(): Boolean; begin Result:= FPanel<>nil; end; procedure TKASPathEdit.AutoComplete(const Path: String); {$IF LCL_FULLVERSION < 4990000} const AFlags: array[Boolean] of TMaskOptions = ( [moDisableSets], [moDisableSets, moCaseSensitive] ); {$ENDIF} var I: Integer; AMask: TMask; BasePath: String; begin FListBox.Clear; if Pos(PathDelim, Path) = 0 then HideListBox else begin BasePath:= ExtractFilePath(Path); if CompareFilenames(FBasePath, BasePath) <> 0 then begin FStringList.Clear; FBasePath:= BasePath; GetFilesInDir(BasePath, AllFilesMask, FObjectTypes, FStringList, FFileSortType); end; if (FStringList.Count > 0) then begin FListBox.Items.BeginUpdate; try // Check mask and make absolute file name AMask:= TMask.Create(ExtractFileName(Path) + '*', {$IF LCL_FULLVERSION < 4990000} AFlags[FileNameCaseSensitive] {$ELSE} FileNameCaseSensitive {$ENDIF} ); for I:= 0 to FStringList.Count - 1 do begin if AMask.Matches(FStringList[I]) then FListBox.Items.Add(BasePath + FStringList[I]); end; AMask.Free; finally FListBox.Items.EndUpdate; end; if FListBox.Items.Count = 0 then HideListBox; if FListBox.Items.Count > 0 then begin ShowListBox; // Calculate ListBox height with FListBox.ItemRect(0) do I:= Bottom - Top; // TListBox.ItemHeight sometimes don't work under GTK2 with FListBox do begin {$IF NOT DEFINED(LCLCOCOA)} if Items.Count = 1 then FPanel.ClientHeight:= Self.Height else FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1); {$ELSE} FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1) + trunc(i/2); {$ENDIF} end; end; end; end; end; procedure TKASPathEdit.SetObjectTypes(const AValue: TObjectTypes); begin if FObjectTypes = AValue then Exit; FObjectTypes:= AValue; {$IF DEFINED(LCLWIN32)} if HandleAllocated then RecreateWnd(Self); if FAutoComplete then {$ENDIF} FAutoComplete:= (FObjectTypes <> []); end; procedure TKASPathEdit.FormChangeBoundsEvent(Sender: TObject); begin HideListBox; end; procedure TKASPathEdit.ListBoxClick(Sender: TObject); begin if FListBox.ItemIndex >= 0 then begin setTextAndSelect( FListBox.Items[FListBox.ItemIndex] ); HideListBox; SetFocus; end; end; procedure TKASPathEdit.ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin FListBox.ItemIndex:= FListBox.ItemAtPos(Classes.Point(X, Y), True); end; {$IF DEFINED(LCLCOCOA)} procedure cocoaNeedMouseEvent( hintWindow: THintWindow ); var cnt: TCocoaWindowContent; begin cnt:= TCocoaWindowContent( hintWindow.Handle ); cnt.window.setIgnoresMouseEvents( false ); end; {$ENDIF} procedure TKASPathEdit.ShowListBox; begin if not isShowingListBox() then begin FPanel:= THintWindow.Create(Self); {$IF DEFINED(LCLCOCOA)} cocoaNeedMouseEvent(FPanel); {$ENDIF} FPanel.Color:= clDefault; FListBox.Parent:= FPanel; with Parent.ClientToScreen(CLasses.Point(Left, Top)) do begin FPanel.Left:= X; FPanel.Top:= Y + Height; end; FPanel.Width:= Width; FPanel.Visible:= True; Application.AddOnDeactivateHandler(FormChangeBoundsEvent, True); GetParentForm(Self).AddHandlerOnChangeBounds(FormChangeBoundsEvent, True); end; end; procedure TKASPathEdit.HideListBox; begin if isShowingListBox() then begin FPanel.Visible:= False; FListBox.Parent:= nil; FreeAndNil(FPanel); Application.RemoveOnDeactivateHandler(FormChangeBoundsEvent); GetParentForm(Self).RemoveHandlerOnChangeBounds(FormChangeBoundsEvent); end; end; {$IF DEFINED(LCLWIN32)} procedure TKASPathEdit.CreateWnd; begin inherited CreateWnd; FAutoComplete:= not SHAutoCompleteX(Handle, FObjectTypes); end; {$ENDIF} {$IF DEFINED(LCLCOCOA)} procedure TKASPathEdit.TextChanged; begin Inherited; if not Modified then Exit; if FAutoComplete then AutoComplete(Text); end; {$ENDIF} procedure TKASPathEdit.setTextAndSelect( newText:String ); var start: Integer; begin if Pos(Text,newText) > 0 then start:= UTF8Length(Text) else start:= UTF8Length(ExtractFilePath(Text)); Text:= newText; SelStart:= start; SelLength:= UTF8Length(Text)-SelStart; end; procedure TKASPathEdit.DoExit; begin HideListBox; inherited DoExit; end; procedure TKASPathEdit.VisibleChanged; begin FBasePath:= EmptyStr; inherited VisibleChanged; end; procedure TKASPathEdit.handleSpecialKeys( var Key: Word ); begin if isShowingListBox() then begin HideListBox; Key:= 0; end else begin if Key=VK_ESCAPE then begin if Assigned(onKeyESCAPE) then begin onKeyESCAPE( self ); Key:= 0; end; end else begin if Assigned(onKeyRETURN) then begin onKeyRETURN( self ); Key:= 0; end; end; end; end; procedure TKASPathEdit.handleUpKey; begin if FListBox.ItemIndex = -1 then FListBox.ItemIndex:= FListBox.Items.Count - 1 else if FListBox.ItemIndex - 1 < 0 then FListBox.ItemIndex:= - 1 else FListBox.ItemIndex:= FListBox.ItemIndex - 1; if FListBox.ItemIndex >= 0 then setTextAndSelect( FListBox.Items[FListBox.ItemIndex] ) else setTextAndSelect( ExtractFilePath(Text) ); end; procedure TKASPathEdit.handleDownKey; begin if FListBox.ItemIndex + 1 >= FListBox.Items.Count then FListBox.ItemIndex:= -1 else if FListBox.ItemIndex = -1 then FListBox.ItemIndex:= IfThen(FListBox.Items.Count > 0, 0, -1) else FListBox.ItemIndex:= FListBox.ItemIndex + 1; if FListBox.ItemIndex >= 0 then setTextAndSelect( FListBox.Items[FListBox.ItemIndex] ) else setTextAndSelect( ExtractFilePath(Text) ); end; procedure TKASPathEdit.KeyDown(var Key: Word; Shift: TShiftState); begin FKeyDown:= Key; case Key of VK_ESCAPE, VK_RETURN, VK_SELECT: handleSpecialKeys( Key ); VK_UP: if isShowingListBox() then begin Key:= 0; handleUpKey(); end; VK_DOWN: if isShowingListBox() then begin Key:= 0; handleDownKey(); end; end; inherited KeyDown(Key, Shift); {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then Key:= 0; {$ENDIF} end; procedure TKASPathEdit.KeyUpAfterInterface(var Key: Word; Shift: TShiftState); begin {$IF not DEFINED(LCLCOCOA)} if (FKeyDown = Key) and FAutoComplete and not (Key in [VK_ESCAPE, VK_RETURN, VK_SELECT, VK_UP, VK_DOWN]) then begin if Modified then begin Modified:= False; AutoComplete(Text); end; end; {$ENDIF} inherited KeyUpAfterInterface(Key, Shift); {$IF DEFINED(LCLWIN32)} // Windows auto-completer eats the TAB so LCL doesn't get it and doesn't move to next control. if not FAutoComplete and (Key = VK_TAB) then GetParentForm(Self).SelectNext(Self, True, True); {$ENDIF} end; constructor TKASPathEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FStringList:= TStringList.Create; FListBox:= TListBox.Create(Self); FListBox.TabStop:= False; FListBox.Align:= alClient; FListBox.ParentFont:= False; FListBox.ClickOnSelChange:= False; FListBox.OnClick:= ListBoxClick; FListBox.OnMouseMove:= ListBoxMouseMove; FAutoComplete:= True; FFileSortType:= fstFoldersFirst; FObjectTypes:= [otNonFolders, otFolders]; end; destructor TKASPathEdit.Destroy; begin inherited Destroy; FStringList.Free; end; end. doublecmd-1.1.30/components/KASToolBar/kascomp.pas0000644000175000001440000000202115104114162021010 0ustar alexxusers{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit KASComp; {$warn 5023 off : no warning about unused units} interface uses KASToolBar, KASProgressBar, KASPathEdit, KASToolItems, KASComboBox, KASCDEdit, KASStatusBar, KASToolPanel, KASButton, KASButtonPanel, KASComCtrls, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('KASToolBar', @KASToolBar.Register); RegisterUnit('KASProgressBar', @KASProgressBar.Register); RegisterUnit('KASPathEdit', @KASPathEdit.Register); RegisterUnit('KASComboBox', @KASComboBox.Register); RegisterUnit('KASCDEdit', @KASCDEdit.Register); RegisterUnit('KASStatusBar', @KASStatusBar.Register); RegisterUnit('KASToolPanel', @KASToolPanel.Register); RegisterUnit('KASButton', @KASButton.Register); RegisterUnit('KASButtonPanel', @KASButtonPanel.Register); RegisterUnit('KASComCtrls', @KASComCtrls.Register); end; initialization RegisterPackage('KASComp', @Register); end. doublecmd-1.1.30/components/KASToolBar/kascomp.lpk0000644000175000001440000000617415104114162021030 0ustar alexxusers doublecmd-1.1.30/components/KASToolBar/kascomctrls.pas0000644000175000001440000002001715104114162021705 0ustar alexxusersunit KASComCtrls; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ComCtrls, Graphics, Dialogs; type { TToolButtonClr } TToolButtonClr = class(TToolButton) private FButtonColor: TColor; FColorDialog: TColorDialog; procedure SetButtonColor(AValue: TColor); protected procedure Paint; override; procedure ShowColorDialog; public constructor Create(TheOwner: TComponent); override; procedure Click; override; property ButtonColor: TColor read FButtonColor write SetButtonColor; end; { TToolBarAdv } TToolBarAdv = class(TToolBar) private FToolBarFlags: TToolBarFlags; protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; {%H-}WithThemeSpace: Boolean); override; procedure AlignControls({%H-}AControl: TControl; var RemainingClientRect: TRect); override; function WrapButtons(UseSize: Integer; out NewWidth, NewHeight: Integer; Simulate: Boolean): Boolean; end; procedure Register; implementation uses Math; { TToolButtonClr } procedure TToolButtonClr.SetButtonColor(AValue: TColor); begin if FButtonColor <> AValue then begin FButtonColor:= AValue; Invalidate; end; end; procedure TToolButtonClr.Paint; var ARect, IconRect: TRect; begin inherited Paint; if (FToolBar <> nil) and (ClientWidth > 0) and (ClientHeight > 0) then begin ARect:= ClientRect; IconRect.Left:= (ARect.Width - FToolBar.ImagesWidth) div 2; IconRect.Top:= (ARect.Height - FToolBar.ImagesWidth) div 2; IconRect.Right:= IconRect.Left + FToolBar.ImagesWidth; IconRect.Bottom:= IconRect.Top + FToolBar.ImagesWidth; if Enabled then begin Canvas.Brush.Style:= bsSolid; Canvas.Brush.Color:= FButtonColor end else begin Canvas.Brush.Color:= clGrayText; Canvas.Brush.Style:= bsDiagCross; end; Canvas.Pen.Color:= clBtnText; Canvas.Rectangle(IconRect); end; end; procedure TToolButtonClr.ShowColorDialog; begin if not Enabled then Exit; if (FColorDialog = nil) then begin FColorDialog := TColorDialog.Create(Self); end; FColorDialog.Color := ButtonColor; if FColorDialog.Execute then begin ButtonColor := FColorDialog.Color; end; end; constructor TToolButtonClr.Create(TheOwner: TComponent); begin FButtonColor:= clRed; inherited Create(TheOwner); end; procedure TToolButtonClr.Click; begin inherited Click; ShowColorDialog; end; { TToolBarAdv } procedure TToolBarAdv.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); begin if IsVertical then WrapButtons(Height, PreferredWidth, PreferredHeight, True) else WrapButtons(Width, PreferredWidth, PreferredHeight, True); end; procedure TToolBarAdv.AlignControls(AControl: TControl; var RemainingClientRect: TRect); var NewWidth, NewHeight: integer; begin if tbfPlacingControls in FToolBarFlags then exit; Include(FToolBarFlags, tbfPlacingControls); DisableAlign; try AdjustClientRect(RemainingClientRect); if IsVertical then WrapButtons(Height, NewWidth, NewHeight, False) else WrapButtons(Width, NewWidth, NewHeight, False); finally Exclude(FToolBarFlags, tbfPlacingControls); EnableAlign; end; end; function TToolBarAdv.WrapButtons(UseSize: Integer; out NewWidth, NewHeight: Integer; Simulate: Boolean): Boolean; var ARect: TRect; X, Y: Integer; Vertical: Boolean; LeftToRight: Boolean; CurControl: TControl; StartX, StartY: Integer; FRowWidth, FRowHeight: Integer; procedure CalculatePosition; var NewBounds: TRect; StartedAtRowStart: Boolean; begin if IsVertical then begin NewBounds := Bounds(X, Y, FRowWidth, CurControl.Height); repeat if (not Wrapable) or (NewBounds.Top = StartY) or (NewBounds.Bottom <= ARect.Bottom) then begin // control fits into the column X := NewBounds.Left; Y := NewBounds.Top; Break; end; // try next column NewBounds.Top := StartY; NewBounds.Bottom := NewBounds.Top + CurControl.Height; Inc(NewBounds.Left, FRowWidth); Inc(NewBounds.Right, FRowWidth); until False; end else begin StartedAtRowStart := (X = StartX); if LeftToRight then NewBounds := Bounds(X, Y, CurControl.Width, FRowHeight) else begin NewBounds := Bounds(X - CurControl.Width, Y, CurControl.Width, FRowHeight); end; repeat if (not Wrapable) or (StartedAtRowStart) or (LeftToRight and ((NewBounds.Left = StartX) or (NewBounds.Right <= ARect.Right))) or ((not LeftToRight) and ((NewBounds.Right = StartX) or (NewBounds.Left >= ARect.Left))) then begin // control fits into the row X := NewBounds.Left; Y := NewBounds.Top; Break; end; StartedAtRowStart := True; // try next row if LeftToRight then begin NewBounds.Left := StartX; NewBounds.Right := NewBounds.Left + CurControl.Width; end else begin NewBounds.Right := StartX; NewBounds.Left := NewBounds.Right - CurControl.Width; end; Inc(NewBounds.Top, FRowHeight); Inc(NewBounds.Bottom, FRowHeight); until False; end; end; var I: Integer; W, H: Integer; CurClientRect: TRect; AdjustClientFrame: TRect; begin NewWidth := 0; NewHeight := 0; Result := True; Vertical := IsVertical; FRowWidth:= ButtonWidth; FRowHeight:= ButtonHeight; if Vertical then begin LeftToRight := True; end else begin LeftToRight := not UseRightToLeftAlignment; end; DisableAlign; BeginUpdate; try CurClientRect := ClientRect; if Vertical then Inc(CurClientRect.Bottom, UseSize - Height) else begin Inc(CurClientRect.Right, UseSize - Width); end; ARect := CurClientRect; AdjustClientRect(ARect); AdjustClientFrame.Left := ARect.Left - CurClientRect.Left; AdjustClientFrame.Top := ARect.Top - CurClientRect.Top; AdjustClientFrame.Right := CurClientRect.Right - ARect.Right; AdjustClientFrame.Bottom := CurClientRect.Bottom - ARect.Bottom; //DebugLn(['TToolBar.WrapButtons ',DbgSName(Self),' ARect=',dbgs(ARect)]); // important: top, left button must start in the AdjustClientRect top, left // otherwise Toolbar.AutoSize=true will create an endless loop if Vertical or LeftToRight then StartX := ARect.Left else begin StartX := ARect.Right; end; StartY := ARect.Top; X := StartX; Y := StartY; for I := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[I]); if not CurControl.IsControlVisible then Continue; CalculatePosition; W := CurControl.Width; H := CurControl.Height; if (not Simulate) and ((CurControl.Left <> X) or (CurControl.Top <> Y)) then begin CurControl.SetBounds(X, Y, W, H); // Note: do not use SetBoundsKeepBase end; // adjust NewWidth, NewHeight if LeftToRight then NewWidth := Max(NewWidth, X + W + AdjustClientFrame.Right) else begin NewWidth := Max(NewWidth, ARect.Right - X + ARect.Left + AdjustClientFrame.Right); end; NewHeight := Max(NewHeight, Y + H + AdjustClientFrame.Bottom); // step to next position if IsVertical then Inc(Y, H) else if LeftToRight then Inc(X, W); end; finally EndUpdate; EnableAlign; end; end; procedure Register; begin RegisterComponents('KASComponents', [TToolBarAdv]); RegisterNoIcon([TToolButtonClr]); end; end. doublecmd-1.1.30/components/KASToolBar/kascombobox.pas0000644000175000001440000002735515104114162021703 0ustar alexxusers{ Double Commander Components ------------------------------------------------------------------------- Extended ComboBox classes Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015-2023 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit KASComboBox; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ColorBox, Buttons, LMessages, Types, KASButton; const DEF_COLOR_STYLE = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]; type { TComboBoxWithDelItems } {en Combo box that allows removing items with Shift+Delete. } TComboBoxWithDelItems = class(TComboBox) protected procedure KeyDown(var Key: Word; Shift: TShiftState); override; end; { TComboBoxAutoWidth } TComboBoxAutoWidth = class(TComboBox) protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; end; { TKASColorBox } TKASColorBox = class(TColorBox) protected procedure SetCustomColor(AColor: TColor); function PickCustomColor: Boolean; override; procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); override; public constructor Create(AOwner: TComponent); override; published property DefaultColorColor default clNone; property Style default DEF_COLOR_STYLE; end; { TKASColorBoxButton } TKASColorBoxButton = class(TCustomControl) private function GetSelected: TColor; function GetStyle: TColorBoxStyle; function GetOnChange: TNotifyEvent; function GetColorDialog: TColorDialog; procedure SetSelected(AValue: TColor); procedure SetStyle(AValue: TColorBoxStyle); procedure SetOnChange(AValue: TNotifyEvent); procedure SetColorDialog(AValue: TColorDialog); protected FButton: TKASButton; FColorBox: TKASColorBox; procedure DoAutoSize; override; procedure EnabledChanged; override; procedure ButtonClick(Sender: TObject); class function GetControlClassDefaultSize: TSize; override; procedure CMParentColorChanged(var Message: TLMessage); message CM_PARENTCOLORCHANGED; public constructor Create(AOwner: TComponent); override; procedure SetFocus; override; function Focused: Boolean; override; property Selected: TColor read GetSelected write SetSelected default clBlack; published property Align; property Anchors; property TabOrder; property Constraints; property BorderSpacing; property AutoSize default True; property OnChange: TNotifyEvent read GetOnChange write SetOnChange; property ColorDialog: TColorDialog read GetColorDialog write SetColorDialog; property Style: TColorBoxStyle read GetStyle write SetStyle default DEF_COLOR_STYLE; end; procedure Register; implementation uses LCLType, LCLIntf; procedure Register; begin RegisterComponents('KASComponents',[TComboBoxWithDelItems, TComboBoxAutoWidth, TKASColorBox, TKASColorBoxButton]); end; procedure CalculateSize(ComboBox: TCustomComboBox; var PreferredWidth: Integer; PreferredHeight: Integer); var DC: HDC; R: TRect; I, M: Integer; Flags: Cardinal; OldFont: HGDIOBJ; MaxWidth: Integer; LabelText: String; Idx: Integer = -1; begin with ComboBox do begin MaxWidth:= Constraints.MinMaxWidth(10000); if Items.Count = 0 then LabelText:= Text else begin M := Canvas.TextWidth(Text); for I := 0 to Items.Count - 1 do begin Flags := Canvas.TextWidth(Items[I]); if Flags > M then begin M := Flags; Idx := I; end; end; if Idx < 0 then LabelText := Text else begin LabelText := Items[Idx]; end; end; if LabelText = '' then begin PreferredWidth := 1; Exit; end; DC := GetDC(Parent.Handle); try LabelText:= LabelText + 'W'; R := Rect(0, 0, MaxWidth, 10000); OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle)); Flags := DT_CALCRECT or DT_EXPANDTABS; DrawText(DC, PChar(LabelText), Length(LabelText), R, Flags); SelectObject(DC, OldFont); PreferredWidth := (R.Right - R.Left) + PreferredHeight; finally ReleaseDC(Parent.Handle, DC); end; end; end; function CalculateHeight(ComboBox: TCustomComboBox): Integer; var DC: HDC; R: TRect; Flags: Cardinal; OldFont: HGDIOBJ; LabelText: String; MaxHeight: Integer; begin with ComboBox do begin MaxHeight:= Constraints.MinMaxHeight(10000); DC := GetDC(Parent.Handle); try LabelText:= Items.Text; R := Rect(0, 0, 10000, MaxHeight); OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle)); Flags := DT_CALCRECT or DT_EXPANDTABS or DT_SINGLELINE; DrawText(DC, PChar(LabelText), Length(LabelText), R, Flags); SelectObject(DC, OldFont); Result := (R.Bottom - R.Top); finally ReleaseDC(Parent.Handle, DC); end; end; end; { TComboBoxWithDelItems } procedure TComboBoxWithDelItems.KeyDown(var Key: Word; Shift: TShiftState); var Index: Integer; begin if DroppedDown and (Key = VK_DELETE) and (Shift = [ssShift]) then begin Index := ItemIndex; if (Index >= 0) and (Index < Items.Count) then begin Items.Delete(Index); ItemIndex := Index; Key := 0; end; end; inherited KeyDown(Key, Shift); end; { TComboBoxAutoWidth } procedure TComboBoxAutoWidth.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); begin inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); if csDesigning in ComponentState then Exit; if (Parent = nil) or (not Parent.HandleAllocated) then Exit; CalculateSize(Self, PreferredWidth, PreferredHeight); end; procedure TComboBoxAutoWidth.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin // Don't auto adjust horizontal layout inherited DoAutoAdjustLayout(AMode, 1.0, AYProportion); end; { TKASColorBox } procedure TKASColorBox.SetCustomColor(AColor: TColor); var Index: Integer; begin for Index:= Ord(cbCustomColor in Style) to Items.Count - 1 do begin if Colors[Index] = AColor then begin Selected:= AColor; Exit; end; end; if cbCustomColor in Style then begin Items.Objects[0]:= TObject(PtrInt(AColor)); end; Items.AddObject('$' + HexStr(AColor, 8), TObject(PtrInt(AColor))); Selected:= AColor; end; function TKASColorBox.PickCustomColor: Boolean; begin Result:= inherited PickCustomColor; SetCustomColor(Colors[0]); end; procedure TKASColorBox.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); begin inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); if csDesigning in ComponentState then Exit; if (Parent = nil) or (not Parent.HandleAllocated) then Exit; if (csSubComponent in ComponentStyle) then begin ItemHeight:= CalculateHeight(Self); if (Parent.Anchors * [akLeft, akRight] = [akLeft, akRight]) then Exit; end; CalculateSize(Self, PreferredWidth, PreferredHeight); PreferredWidth+= ColorRectWidth + ColorRectOffset; end; procedure TKASColorBox.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double); begin if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then begin if ColorRectWidthStored then ColorRectWidth:= Round(ColorRectWidth * AXProportion); end; // Don't auto adjust horizontal layout inherited DoAutoAdjustLayout(AMode, 1.0, AYProportion); end; constructor TKASColorBox.Create(AOwner: TComponent); begin inherited Create(AOwner); Style:= DEF_COLOR_STYLE; DefaultColorColor:= clNone; end; { TKASColorBoxButton } function TKASColorBoxButton.GetSelected: TColor; begin Result:= FColorBox.Selected; end; function TKASColorBoxButton.GetStyle: TColorBoxStyle; begin Result:= FColorBox.Style; end; function TKASColorBoxButton.GetOnChange: TNotifyEvent; begin Result:= FColorBox.OnChange; end; function TKASColorBoxButton.GetColorDialog: TColorDialog; begin Result:= FColorBox.ColorDialog; end; procedure TKASColorBoxButton.SetSelected(AValue: TColor); begin FColorBox.SetCustomColor(AValue); end; procedure TKASColorBoxButton.SetStyle(AValue: TColorBoxStyle); begin FColorBox.Style:= AValue; end; procedure TKASColorBoxButton.SetOnChange(AValue: TNotifyEvent); begin FColorBox.OnChange:= AValue; end; procedure TKASColorBoxButton.SetColorDialog(AValue: TColorDialog); begin FColorBox.ColorDialog:= AValue; end; procedure TKASColorBoxButton.DoAutoSize; begin inherited DoAutoSize; FButton.Constraints.MinWidth:= FButton.Height; end; procedure TKASColorBoxButton.EnabledChanged; begin if Enabled then FColorBox.Font.Color:= clDefault else begin FColorBox.Font.Color:= clGrayText; end; inherited EnabledChanged; end; procedure TKASColorBoxButton.ButtonClick(Sender: TObject); Var FreeDialog: Boolean; begin if csDesigning in ComponentState then Exit; with FColorBox do begin FreeDialog:= (ColorDialog = nil); if FreeDialog then begin ColorDialog:= TColorDialog.Create(GetTopParent); end; try with ColorDialog do begin Color:= FColorBox.Selected; if Execute Then begin FColorBox.SetCustomColor(Color); Invalidate; end; end; finally if FreeDialog Then begin ColorDialog.Free; ColorDialog:= nil; end; end; end; end; class function TKASColorBoxButton.GetControlClassDefaultSize: TSize; begin Result:= TKASColorBox.GetControlClassDefaultSize; Result.cx += Result.cy; end; procedure TKASColorBoxButton.CMParentColorChanged(var Message: TLMessage); begin if inherited ParentColor then begin inherited SetColor(Parent.Color); inherited ParentColor:= True; end; end; constructor TKASColorBoxButton.Create(AOwner: TComponent); begin FButton:= TKASButton.Create(Self); FColorBox:= TKASColorBox.Create(Self); inherited Create(AOwner); ControlStyle:= ControlStyle + [csNoFocus]; BorderStyle:= bsNone; TabStop:= True; inherited TabStop:= False; with FColorBox do begin SetSubComponent(True); Align:= alClient; ParentColor:= False; ParentFont:= True; Parent:= Self; end; with FButton do begin Align:= alRight; Caption:= '..'; BorderSpacing.Left:= 2; OnClick:= @ButtonClick; Parent:= Self; end; AutoSize:= True; Color:= clWindow; inherited ParentColor:= True; end; procedure TKASColorBoxButton.SetFocus; begin FColorBox.SetFocus; end; function TKASColorBoxButton.Focused: Boolean; begin Result:= FColorBox.Focused; end; end. doublecmd-1.1.30/components/KASToolBar/kascdedit.pas0000644000175000001440000003276615104114162021331 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Custom edit control with the look and feel like TLabel Copyright (C) 2017-2024 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . } unit KASCDEdit; {$mode delphi} interface uses Classes, SysUtils, LResources, Controls, Graphics, Dialogs, Types, Menus, CustomDrawnControls, CustomDrawnDrawers, CustomDrawn_Common; type { TKASCDEdit } TKASCDEdit = class(TCDEdit) private FDragDropStarted: Boolean; FEditMenu: TPopupMenu; static; private procedure CreatePopupMenu; procedure ShowMenu(Data: PtrInt); procedure MenuCopy(Sender: TObject); procedure MenuSelectAll(Sender: TObject); function MousePosToCaretPos(X, Y: Integer): TPoint; protected procedure RealSetText(const Value: TCaption); override; procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure CalculateSize(MaxWidth: Integer; var NeededWidth, NeededHeight: Integer); procedure KeyDown(var Key: word; Shift: TShiftState); override; public constructor Create(AOwner: TComponent); override; procedure MouseMove(Shift: TShiftState; X, Y: integer); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; public procedure SelectAll; procedure CopyToClipboard; published property Color default clDefault; property Cursor default crIBeam; property ReadOnly default True; property OnMouseDown; property OnMouseMove; property OnMouseUp; end; { TKASCDDrawer } TKASCDDrawer = class(TCDDrawerCommon) public function GetMeasures(AMeasureID: Integer): Integer; override; procedure DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx); override; procedure DrawEdit(ADest: TCanvas; ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx); override; end; procedure Register; implementation uses Math, Forms, Clipbrd, LCLType, LCLIntf, LazUTF8; resourcestring rsMnuCopyToClipboard = 'Copy'; rsMnuSelectAll = 'Select &All'; procedure Register; begin RegisterComponents('KASComponents', [TKASCDEdit]); end; { TKASCDDrawer } function TKASCDDrawer.GetMeasures(AMeasureID: Integer): Integer; begin case AMeasureID of TCDEDIT_LEFT_TEXT_SPACING: Result := 0; TCDEDIT_RIGHT_TEXT_SPACING: Result := 0; else Result:= inherited GetMeasures(AMeasureID); end; end; procedure TKASCDDrawer.DrawEditBackground(ADest: TCanvas; ADestPos: TPoint; ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx); begin // None end; procedure TKASCDDrawer.DrawEdit(ADest: TCanvas; ASize: TSize; AState: TCDControlState; AStateEx: TCDEditStateEx); var lVisibleText, lControlText: TCaption; lSelLeftPos, lSelLength, lSelRightPos: Integer; lLineHeight, lLineTop: Integer; lControlTextLen: PtrInt; lTextLeftSpacing, lTextTopSpacing, lTextBottomSpacing: Integer; lTextColor: TColor; i, lVisibleLinesCount: Integer; AClipRect: TRect; begin // General text configurations which apply to all lines // Configure the text color if csfEnabled in AState then lTextColor := AStateEx.Font.Color else lTextColor := clGrayText; ADest.Brush.Style := bsClear; ADest.Font.Assign(AStateEx.Font); ADest.Font.Color := lTextColor; lTextLeftSpacing := GetMeasures(TCDEDIT_LEFT_TEXT_SPACING); //lTextRightSpacing := GetMeasures(TCDEDIT_RIGHT_TEXT_SPACING); lTextTopSpacing := GetMeasures(TCDEDIT_TOP_TEXT_SPACING); lTextBottomSpacing := GetMeasures(TCDEDIT_BOTTOM_TEXT_SPACING); lLineHeight := ADest.TextHeight(cddTestStr)+2; lLineHeight := Min(ASize.cy-lTextBottomSpacing, lLineHeight); // Fill this to be used in other parts AStateEx.LineHeight := lLineHeight; AStateEx.FullyVisibleLinesCount := ASize.cy - lTextTopSpacing - lTextBottomSpacing; AStateEx.FullyVisibleLinesCount := AStateEx.FullyVisibleLinesCount div lLineHeight; AStateEx.FullyVisibleLinesCount := Min(AStateEx.FullyVisibleLinesCount, AStateEx.Lines.Count); // Calculate how many lines to draw if AStateEx.Multiline then lVisibleLinesCount := AStateEx.FullyVisibleLinesCount + 1 else lVisibleLinesCount := 1; lVisibleLinesCount := Min(lVisibleLinesCount, AStateEx.Lines.Count); // Now draw each line for i := 0 to lVisibleLinesCount - 1 do begin lControlText := AStateEx.Lines.Strings[AStateEx.VisibleTextStart.Y+i]; lControlText := VisibleText(lControlText, AStateEx.PasswordChar); lControlTextLen := UTF8Length(lControlText); lLineTop := lTextTopSpacing + i * lLineHeight; // The text ADest.Pen.Style := psClear; ADest.Brush.Style := bsClear; lVisibleText := UTF8Copy(lControlText, AStateEx.VisibleTextStart.X, lControlTextLen); // ToDo: Implement multi-line selection if (AStateEx.SelLength = 0) or (AStateEx.SelStart.Y <> AStateEx.VisibleTextStart.Y+i) then begin ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText); end // Text and Selection else begin lSelLeftPos := AStateEx.SelStart.X; if AStateEx.SelLength < 0 then lSelLeftPos := lSelLeftPos + AStateEx.SelLength; lSelRightPos := AStateEx.SelStart.X; if AStateEx.SelLength > 0 then lSelRightPos := lSelRightPos + AStateEx.SelLength; lSelLength := AStateEx.SelLength; if lSelLength < 0 then lSelLength := lSelLength * -1; // Draw a normal text ADest.Font.Color := lTextColor; ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText); // Draw a selected text ADest.Brush.Color := clHighlight; ADest.Font.Color := clHighlightText; // Calculate a clip rect AClipRect := ADest.ClipRect; AClipRect.Left := ADest.TextWidth(UTF8Copy(lVisibleText, 1, lSelLeftPos)); AClipRect.Right := ADest.TextWidth(UTF8Copy(lVisibleText, 1, lSelLeftPos + lSelLength)); IntersectClipRect(ADest.Handle, AClipRect.Left, AClipRect.Top, AClipRect.Right, AClipRect.Bottom); ADest.TextOut(lTextLeftSpacing, lLineTop, lVisibleText); end; end; // And the caret DrawCaret(ADest, Point(0, 0), ASize, AState, AStateEx); end; { TKASCDEdit } procedure TKASCDEdit.CreatePopupMenu; var MenuItem: TMenuItem; begin if not Assigned(FEditMenu) then begin FEditMenu:= TPopupMenu.Create(Application); MenuItem:= TMenuItem.Create(FEditMenu); MenuItem.Caption:= rsMnuCopyToClipboard; MenuItem.OnClick:= MenuCopy; FEditMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(FEditMenu); MenuItem.Caption:= '-'; FEditMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(FEditMenu); MenuItem.Caption:= rsMnuSelectAll; MenuItem.OnClick:= MenuSelectAll; FEditMenu.Items.Add(MenuItem); end; end; procedure TKASCDEdit.ShowMenu(Data: PtrInt); begin FEditMenu.Tag:= Data; FEditMenu.PopUp; end; procedure TKASCDEdit.MenuCopy(Sender: TObject); begin TKASCDEdit(TMenuItem(Sender).Owner.Tag).CopyToClipboard; end; procedure TKASCDEdit.MenuSelectAll(Sender: TObject); begin TKASCDEdit(TMenuItem(Sender).Owner.Tag).SelectAll; end; function TKASCDEdit.MousePosToCaretPos(X, Y: Integer): TPoint; var lStrLen, i: PtrInt; lBeforeStr: String; lTextLeftSpacing: Integer; lVisibleStr, lCurChar: String; lPos: Integer; lBestDiff: Cardinal = $FFFFFFFF; lLastDiff: Cardinal = $FFFFFFFF; lCurDiff, lBestMatch: Integer; begin // Find the best Y position lPos := Y - FDrawer.GetMeasures(TCDEDIT_TOP_TEXT_SPACING); Result.Y := lPos div FEditState.LineHeight; Result.Y := Min(Result.Y, FEditState.FullyVisibleLinesCount); Result.Y := Min(Result.Y, FEditState.Lines.Count-1); if Result.Y < 0 then begin Result.X := 1; Result.Y := 0; Exit; end; // Find the best X position Canvas.Font := Font; lVisibleStr := Lines.Strings[Result.Y]; lVisibleStr := LazUTF8.UTF8Copy(lVisibleStr, FEditState.VisibleTextStart.X, Length(lVisibleStr)); lVisibleStr := TCDDrawer.VisibleText(lVisibleStr, FEditState.PasswordChar); lStrLen := LazUTF8.UTF8Length(lVisibleStr); lTextLeftSpacing := FDrawer.GetMeasures(TCDEDIT_LEFT_TEXT_SPACING); lBestMatch := 0; lBeforeStr := EmptyStr; lPos := lTextLeftSpacing; for i := 0 to lStrLen do begin lCurDiff := X - lPos; if lCurDiff < 0 then lCurDiff := lCurDiff * -1; if lCurDiff < lBestDiff then begin lBestDiff := lCurDiff; lBestMatch := i; end; // When the diff starts to grow we already found the caret pos, so exit if lCurDiff > lLastDiff then Break else lLastDiff := lCurDiff; if i <> lStrLen then begin lCurChar := LazUTF8.UTF8Copy(lVisibleStr, i + 1, 1); lBeforeStr := lBeforeStr + lCurChar; lPos := lTextLeftSpacing + Canvas.TextWidth(lBeforeStr); end; end; Result.X := lBestMatch+(FEditState.VisibleTextStart.X-1); Result.X := Min(Result.X, FEditState.VisibleTextStart.X+lStrLen-1); end; procedure TKASCDEdit.RealSetText(const Value: TCaption); begin Lines.Text := Value; inherited RealSetText(Value); end; procedure TKASCDEdit.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); var AWidth: Integer; begin if (Parent = nil) or (not Parent.HandleAllocated) then Exit; AWidth := Constraints.MinMaxWidth(10000); CalculateSize(AWidth, PreferredWidth, PreferredHeight); end; procedure TKASCDEdit.CalculateSize(MaxWidth: Integer; var NeededWidth, NeededHeight: Integer); var DC: HDC; R: TRect; Flags: Cardinal; OldFont: HGDIOBJ; LabelText: String; lTextLeftSpacing, lTextTopSpacing, lTextBottomSpacing, lTextRightSpacing: Integer; begin LabelText := Text; if LabelText = '' then begin NeededWidth:= 1; NeededHeight:= 1; Exit; end; lTextLeftSpacing := FDrawer.GetMeasures(TCDEDIT_LEFT_TEXT_SPACING); lTextTopSpacing := FDrawer.GetMeasures(TCDEDIT_TOP_TEXT_SPACING); lTextRightSpacing := FDrawer.GetMeasures(TCDEDIT_RIGHT_TEXT_SPACING); lTextBottomSpacing := FDrawer.GetMeasures(TCDEDIT_BOTTOM_TEXT_SPACING); DC := GetDC(Parent.Handle); try R := Rect(0, 0, MaxWidth, 10000); OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle)); Flags := DT_CALCRECT or DT_EXPANDTABS; if not MultiLine then Flags := Flags or DT_SINGLELINE; DrawText(DC, PAnsiChar(LabelText), Length(LabelText), R, Flags); SelectObject(DC, OldFont); NeededWidth := R.Right - R.Left + lTextLeftSpacing + lTextRightSpacing; NeededHeight := R.Bottom - R.Top + lTextTopSpacing + lTextBottomSpacing; finally ReleaseDC(Parent.Handle, DC); end; end; procedure TKASCDEdit.KeyDown(var Key: word; Shift: TShiftState); begin if (ssModifier in Shift) then begin case Key of VK_A: begin SelectAll; Key:= 0; end; VK_C: begin CopyToClipboard; Key:= 0; end; end; end; if ReadOnly and (Key in [VK_BACK, VK_DELETE]) then begin Key:= 0; end; inherited KeyDown(Key, Shift); end; constructor TKASCDEdit.Create(AOwner: TComponent); begin CreatePopupMenu; inherited Create(AOwner); ReadOnly:= True; Cursor:= crIBeam; Color:= clDefault; DrawStyle:= dsExtra1; ControlStyle:= ControlStyle + [csParentBackground] - [csOpaque]; end; procedure TKASCDEdit.MouseMove(Shift: TShiftState; X, Y: integer); begin inherited MouseMove(Shift, X, Y); // Mouse dragging selection if FDragDropStarted then begin FEditState.CaretPos := MousePosToCaretPos(X, Y); FEditState.SelLength := FEditState.CaretPos.X - FEditState.SelStart.X; Invalidate; end; end; procedure TKASCDEdit.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin if (Button = mbLeft) or (GetSelLength = 0) then begin inherited MouseDown(Button, Shift, X, Y); FDragDropStarted := True; // Caret positioning FEditState.CaretPos := MousePosToCaretPos(X, Y); FEditState.SelStart.X := FEditState.CaretPos.X; FEditState.SelStart.Y := FEditState.CaretPos.Y; Invalidate; end else if Assigned(OnMouseDown) then begin OnMouseDown(Self, Button, Shift, X, Y); end; end; procedure TKASCDEdit.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); FDragDropStarted := False; if Button = mbRight then begin Application.QueueAsyncCall(ShowMenu, PtrInt(Self)); end; end; procedure TKASCDEdit.SelectAll; begin FEditState.SelStart.X:= 0; FEditState.SelLength:= UTF8Length(Text); Invalidate; end; procedure TKASCDEdit.CopyToClipboard; begin if (FEditState.SelLength >= 0) then Clipboard.AsText:= UTF8Copy(Text, FEditState.SelStart.X + 1, FEditState.SelLength) else begin Clipboard.AsText:= UTF8Copy(Text, FEditState.SelStart.X + FEditState.SelLength + 1, -FEditState.SelLength); end; end; initialization RegisterDrawer(TKASCDDrawer.Create, dsExtra1); end. doublecmd-1.1.30/components/KASToolBar/kasbuttonpanel.pas0000644000175000001440000000362315104114162022416 0ustar alexxusersunit KASButtonPanel; {$mode Delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls; type { TKASButtonPanel } TKASButtonPanel = class(TPanel) private FSameWidth: Boolean; FSameHeight: Boolean; protected procedure ButtonsAutoSize; procedure DoAutoSize; override; public constructor Create(TheOwner: TComponent); override; published property SameWidth: Boolean read FSameWidth write FSameWidth default True; property SameHeight: Boolean read FSameHeight write FSameHeight default True; end; procedure Register; implementation uses StdCtrls; procedure Register; begin RegisterComponents('KASComponents', [TKASButtonPanel]); end; { TKASButtonPanel } procedure TKASButtonPanel.ButtonsAutoSize; var Index: Integer; AControl: TControl; AMaxWidth, AMaxHeight: Integer; begin AMaxWidth:= 0; AMaxHeight:= 0; for Index:= 0 to ControlCount - 1 do begin AControl:= Controls[Index]; if AControl is TCustomButton then begin if FSameWidth and (AControl.Width > AMaxWidth) then AMaxWidth:= AControl.Width; if FSameHeight and (AControl.Height > AMaxHeight) then AMaxHeight:= AControl.Height; end; end; for Index:= 0 to ControlCount - 1 do begin AControl:= Controls[Index]; if AControl is TCustomButton then begin if FSameWidth then AControl.Constraints.MinWidth:= AMaxWidth; if FSameHeight then AControl.Constraints.MinHeight:= AMaxHeight; end; end; end; procedure TKASButtonPanel.DoAutoSize; begin inherited DoAutoSize; if csDesigning in ComponentState then Exit; if AutoSize and (FSameWidth or FSameHeight) then ButtonsAutosize; end; constructor TKASButtonPanel.Create(TheOwner: TComponent); begin FSameWidth:= True; FSameHeight:= True; inherited Create(TheOwner); end; end. doublecmd-1.1.30/components/KASToolBar/kasbutton.pas0000644000175000001440000002011215104114162021366 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Control like TButton which does not steal focus on click Copyright (C) 2021-2023 Alexander Koblov (alexx2000@mail.ru) This library 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 library 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 General Public License along with this program. If not, see . } unit KASButton; {$mode delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Themes, Types; type { TKASButton } TKASButton = class(TPanel) private FState: TButtonState; FShowCaption: Boolean; FButtonGlyph: TButtonGlyph; function GetGlyph: TBitmap; function IsGlyphStored: Boolean; procedure SetGlyph(AValue: TBitmap); procedure SetShowCaption(AValue: Boolean); function GetDrawDetails: TThemedElementDetails; protected procedure Paint; override; procedure DoExit; override; procedure DoEnter; override; procedure MouseEnter; override; procedure MouseLeave; override; procedure KeyUp(var Key: Word; Shift: TShiftState); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; protected procedure GlyphChanged(Sender: TObject); class function GetControlClassDefaultSize: TSize; override; procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override; procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; published property Action; property Glyph: TBitmap read GetGlyph write SetGlyph stored IsGlyphStored; property ShowCaption: Boolean read FShowCaption write SetShowCaption default True; end; procedure Register; implementation uses LCLType, LCLProc, LCLIntf, ActnList; procedure Register; begin RegisterComponents('KASComponents',[TKASButton]); end; { TKASButton } procedure TKASButton.DoEnter; begin inherited DoEnter; FState:= bsExclusive; Invalidate; end; procedure TKASButton.DoExit; begin inherited DoExit; FState:= bsUp; Invalidate; end; function TKASButton.GetDrawDetails: TThemedElementDetails; var Detail: TThemedButton; begin if not IsEnabled then Detail := tbPushButtonDisabled else if FState = bsDown then Detail := tbPushButtonPressed else if FState = bsHot then Detail := tbPushButtonHot else if FState = bsExclusive then Detail := tbPushButtonDefaulted else begin Detail := tbPushButtonNormal; end; Result := ThemeServices.GetElementDetails(Detail) end; procedure TKASButton.SetShowCaption(AValue: Boolean); begin if FShowCaption = AValue then Exit; FShowCaption:= AValue; Invalidate; end; function TKASButton.GetGlyph: TBitmap; begin Result:= FButtonGlyph.Glyph; end; function TKASButton.IsGlyphStored: Boolean; var Act: TCustomAction; begin if Action <> nil then begin Result:= True; Act:= TCustomAction(Action); if (Act.ActionList <> nil) and (Act.ActionList.Images <> nil) and (Act.ImageIndex >= 0) and (Act.ImageIndex < Act.ActionList.Images.Count) then Result := False; end else Result:= (FButtonGlyph.Glyph <> nil) and (not FButtonGlyph.Glyph.Empty) and (FButtonGlyph.Glyph.Width > 0) and (FButtonGlyph.Glyph.Height > 0); end; procedure TKASButton.SetGlyph(AValue: TBitmap); begin FButtonGlyph.Glyph := AValue; InvalidatePreferredSize; AdjustSize; end; procedure TKASButton.Paint; var APoint: TPoint; SysFont: TFont; PaintRect: TRect; TextFlags: Integer; Details: TThemedElementDetails; begin PaintRect:= ClientRect; Details:= GetDrawDetails; ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect); PaintRect := ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect); if FShowCaption and (Caption <> EmptyStr) then begin TextFlags := DT_CENTER or DT_VCENTER; if UseRightToLeftReading then begin TextFlags := TextFlags or DT_RTLREADING; end; SysFont := Screen.SystemFont; if (SysFont.Color = Font.Color) and ((SysFont.Name = Font.Name) or IsFontNameDefault(Font.Name)) and (SysFont.Pitch = Font.Pitch) and (SysFont.Style = Font.Style) then begin ThemeServices.DrawText(Canvas, Details, Caption, PaintRect, TextFlags, 0); end else begin Canvas.Brush.Style := bsClear; DrawText(Canvas.Handle, PChar(Caption), Length(Caption), PaintRect, TextFlags); end; end else if not FButtonGlyph.Glyph.Empty then begin APoint.X:= (PaintRect.Width - FButtonGlyph.Width) div 2; APoint.Y:= (PaintRect.Height - FButtonGlyph.Height) div 2; FButtonGlyph.Draw(Canvas, PaintRect, APoint, FState, True, 0); end; end; procedure TKASButton.MouseEnter; begin inherited MouseEnter; FState:= bsHot; Invalidate; end; procedure TKASButton.MouseLeave; begin inherited MouseLeave; FState:= bsUp; Invalidate; end; procedure TKASButton.KeyUp(var Key: Word; Shift: TShiftState); begin inherited KeyUp(Key, Shift); if (Key in [VK_SPACE, VK_RETURN]) and (Shift = []) then begin FState:= bsUp; Invalidate; Click; end; end; procedure TKASButton.KeyDown(var Key: Word; Shift: TShiftState); begin inherited KeyDown(Key, Shift); if (Key in [VK_SPACE, VK_RETURN]) and (Shift = []) then begin FState:= bsDown; Invalidate; end; end; procedure TKASButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y); FState:= bsUp; Invalidate; end; procedure TKASButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseDown(Button, Shift, X, Y); FState:= bsDown; Invalidate; end; procedure TKASButton.GlyphChanged(Sender: TObject); begin InvalidatePreferredSize; AdjustSize; end; class function TKASButton.GetControlClassDefaultSize: TSize; begin Result.CX := 23; Result.CY := 22; end; procedure TKASButton.ActionChange(Sender: TObject; CheckDefaults: Boolean); begin inherited ActionChange(Sender, CheckDefaults); if Sender is TCustomAction then begin with TCustomAction(Sender) do begin if (Glyph.Empty) and (ActionList <> nil) and (ActionList.Images <> nil) and (ImageIndex >= 0) and (ImageIndex < ActionList.Images.Count) then ActionList.Images.GetBitmap(ImageIndex, Glyph); end; end; end; procedure TKASButton.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); var PaintRect: TRect; ClientRect: TRect; Details: TThemedElementDetails; begin inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); if (not FButtonGlyph.Glyph.Empty) then begin Details:= GetDrawDetails; PaintRect:= TRect.Create(0, 0, 32, 32); ClientRect:= ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect); PreferredWidth:= Abs(PaintRect.Width - ClientRect.Width) + FButtonGlyph.Width; PreferredHeight:= Abs(PaintRect.Height - ClientRect.Height) + FButtonGlyph.Height; end; end; constructor TKASButton.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FButtonGlyph := TButtonGlyph.Create; FButtonGlyph.NumGlyphs := 1; FButtonGlyph.OnChange := GlyphChanged; FButtonGlyph.IsDesigning := csDesigning in ComponentState; FShowCaption:= True; TabStop:= True; end; destructor TKASButton.Destroy; begin FreeAndNil(FButtonGlyph); inherited Destroy; end; end. doublecmd-1.1.30/components/KASToolBar/dwtaskbarlist.pas0000644000175000001440000001446615104114162022251 0ustar alexxusersunit dwTaskbarList; {$mode delphi}{$H+} interface uses Messages , Windows ; const CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11D0-958A-006097C9A090}'; CLSID_TaskbarList2: TGUID = '{602D4995-B13A-429B-A66E-1935E44F4317}'; CLSID_TaskbarList3: TGUID = '{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'; const THBF_ENABLED = $0000; THBF_DISABLED = $0001; THBF_DISMISSONCLICK = $0002; THBF_NOBACKGROUND = $0004; THBF_HIDDEN = $0008; const THB_BITMAP = $0001; THB_ICON = $0002; THB_TOOLTIP = $0004; THB_FLAGS = $0008; const THBN_CLICKED = $1800; const TBPF_NOPROGRESS = $00; TBPF_INDETERMINATE = $01; TBPF_NORMAL = $02; TBPF_ERROR= $04; TBPF_PAUSED = $08; const TBATF_USEMDITHUMBNAIL: DWORD = $00000001; TBATF_USEMDILIVEPREVIEW: DWORD = $00000002; const WM_DWMSENDICONICTHUMBNAIL = $0323; WM_DWMSENDICONICLIVEPREVIEWBITMAP = $0326; type TTipString = array[0..259] of WideChar; PTipString = ^TTipString; tagTHUMBBUTTON = packed record dwMask : DWORD; iId , iBitmap : UINT; hIcon : HICON; szTip : TTipString; dwFlags : DWORD; end; THUMBBUTTON = tagTHUMBBUTTON; THUMBBUTTONLIST = ^THUMBBUTTON; TThumbButton = THUMBBUTTON; TThumbButtonList = array of TThumbButton; type ITaskbarList = interface ['{56FDF342-FD6D-11D0-958A-006097C9A090}'] procedure HrInit; safecall; procedure AddTab(hwnd: HWND); safecall; procedure DeleteTab(hwnd: HWND); safecall; procedure ActivateTab(hwnd: HWND); safecall; procedure SetActiveAlt(hwnd: HWND); safecall; end; ITaskbarList2 = interface(ITaskbarList) ['{602D4995-B13A-429B-A66E-1935E44F4317}'] procedure MarkFullscreenWindow(hwnd: HWND; fFullscreen: Bool); safecall; end; ITaskbarList3 = interface(ITaskbarList2) ['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'] procedure SetProgressValue(hwnd: HWND; ullCompleted, ullTotal: ULONGLONG); safecall; procedure SetProgressState(hwnd: HWND; tbpFlags: DWORD); safecall; procedure RegisterTab(hwndTab: HWND; hwndMDI: HWND); safecall; procedure UnregisterTab(hwndTab: HWND); safecall; procedure SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND); safecall; procedure SetTabActive(hwndTab: HWND; hwndMDI: HWND; tbatFlags: DWORD); safecall; procedure ThumbBarAddButtons(hwnd: HWND; cButtons: UINT; Button: THUMBBUTTONLIST); safecall; procedure ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT; pButton: THUMBBUTTONLIST); safecall; procedure ThumbBarSetImageList(hwnd: HWND; himl: HIMAGELIST); safecall; procedure SetOverlayIcon(hwnd: HWND; hIcon: HICON; pszDescription: LPCWSTR); safecall; procedure SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR); safecall; procedure SetThumbnailClip(hwnd: HWND; prcClip: PRect); safecall; end; const DWM_SIT_DISPLAYFRAME = $00000001; // Display a window frame around the provided bitmap DWMWA_FORCE_ICONIC_REPRESENTATION = 7; // [set] Force this window to display iconic thumbnails. DWMWA_HAS_ICONIC_BITMAP = 10; // [set] Indicates an available bitmap when there is no better thumbnail representation. DWMWA_DISALLOW_PEEK = 11; // [set] Don't invoke Peek on the window. type TWMDwmSendIconicLivePreviewBitmap = TWMNoParams; TWMDwmSendIconicThumbnail = packed record Msg : Cardinal; Unused : Integer; Height , Width : Word; Result : LongInt; end; function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT; function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; implementation var hDWMAPI: HMODULE; _DwmInvalidateIconicBitmaps: function(hwnd: HWND): HRESULT; stdcall; _DwmSetIconicThumbnail: function(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; stdcall; _DwmSetIconicLivePreviewBitmap: function(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; stdcall; _DwmSetWindowAttribute: function(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall; _PrintWindow: function(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall; procedure InitDwmApi; begin if hDWMAPI = 0 then begin hDWMAPI := LoadLibrary('DWMAPI.DLL'); if hDWMAPI = 0 then begin hDWMAPI := THandle(-1); end else begin _DwmInvalidateIconicBitmaps := GetProcAddress(hDWMAPI, 'DwmInvalidateIconicBitmaps'); _DwmSetIconicLivePreviewBitmap := GetProcAddress(hDWMAPI, 'DwmSetIconicLivePreviewBitmap'); _DwmSetIconicThumbnail := GetProcAddress(hDWMAPI, 'DwmSetIconicThumbnail'); _DwmSetWindowAttribute := GetProcAddress(hDWMAPI, 'DwmSetWindowAttribute'); end; end; end; function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT; begin InitDwmApi; if Assigned(_DwmInvalidateIconicBitmaps) then Result := _DwmInvalidateIconicBitmaps(hwnd) else Result := E_NOTIMPL; end; function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetIconicLivePreviewBitmap) then Result := _DwmSetIconicLivePreviewBitmap(hwnd, hbmp, pptClient, dwSITFlags) else Result := E_NOTIMPL; end; function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetIconicThumbnail) then Result := _DwmSetIconicThumbnail(hWnd, hBmp, dwSITFlags) else Result := E_NOTIMPL; end; function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetWindowAttribute) then Result := _DwmSetWindowAttribute(hwnd, dwAttribute, pvAttribute, cbAttribute) else Result := E_NOTIMPL; end; {-----------------------------------------------} function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; begin if Assigned(_PrintWindow) then begin Result := _PrintWindow(hwnd, hdcBlt, nFlags); end else begin _PrintWindow := GetProcAddress(GetModuleHandle('user32.dll'), 'PrintWindow'); Result := Assigned(_PrintWindow) and _PrintWindow(hwnd, hdcBlt, nFlags); end; end; end. doublecmd-1.1.30/components/Image32/0000755000175000001440000000000015104114162016141 5ustar alexxusersdoublecmd-1.1.30/components/Image32/source/0000755000175000001440000000000015104114162017441 5ustar alexxusersdoublecmd-1.1.30/components/Image32/source/Img32.pas0000644000175000001440000041741115104114162021037 0ustar alexxusersunit Img32; (******************************************************************************* * Author : Angus Johnson * * Version : 4.8 * * Date : 10 January 2025 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2019-2025 * * Purpose : The core module of the Image32 library * * License : http://www.boost.org/LICENSE_1_0.txt * *******************************************************************************) interface {$I Img32.inc} uses Types, SysUtils, Classes, {$IFDEF MSWINDOWS} Windows,{$ENDIF} {$IFDEF USING_VCL_LCL} {$IFDEF USES_NAMESPACES} Vcl.Graphics, Vcl.Forms, {$ELSE}Graphics, Forms, {$ENDIF} {$ENDIF} {$IFDEF XPLAT_GENERICS} Generics.Collections, Generics.Defaults, Character, {$ENDIF} {$IFDEF UITYPES} UITypes,{$ENDIF} Math; type {$IF not declared(SizeInt)} // FPC has SizeInt {$IF CompilerVersion < 20.0} SizeInt = Integer; // Delphi 7-2007 can't use NativeInt with "FOR" SizeUInt = Cardinal; // Delphi 7-2007 can't use NativeUInt with "FOR" {$ELSE} SizeInt = NativeInt; SizeUInt = NativeUInt; {$IFEND} {$IFEND} TRect = Types.TRect; TColor32 = type Cardinal; TPointD = record X, Y: double; end; PARGB = ^TARGB; TARGB = packed record case boolean of false: (B: Byte; G: Byte; R: Byte; A: Byte); true : (Color: TColor32); end; TArrayOfARGB = array of TARGB; const clNone32 = TColor32($00000000); clAqua32 = TColor32($FF00FFFF); clBlack32 = TColor32($FF000000); clBlue32 = TColor32($FF0000FF); clFuchsia32 = TColor32($FFFF00FF); clGray32 = TColor32($FF808080); clGreen32 = TColor32($FF008000); clGrey32 = TColor32($FF808080); clLime32 = TColor32($FF00FF00); clMaroon32 = TColor32($FF800000); clNavy32 = TColor32($FF000080); clOlive32 = TColor32($FF7F7F00); clOrange32 = TColor32($FFFF7F00); clPurple32 = TColor32($FF7F00FF); clRed32 = TColor32($FFFF0000); clSilver32 = TColor32($FFC0C0C0); clTeal32 = TColor32($FF007F7F); clWhite32 = TColor32($FFFFFFFF); clYellow32 = TColor32($FFFFFF00); //custom gray colors clDarkGray32 = TColor32($FF505050); clDarkGrey32 = TColor32($FF505050); //clGray32 = TColor32($FF808080); //clSilver32 = TColor32($FFC0C0C0); clLiteGray32 = TColor32($FFD3D3D3); clLiteGrey32 = TColor32($FFD3D3D3); clPaleGray32 = TColor32($FFE0E0E0); clPaleGrey32 = TColor32($FFE0E0E0); clDarkBtn32 = TColor32($FFE8E8E8); clBtnFace32 = TColor32($FFF0F0F0); clLiteBtn32 = TColor32($FFF8F8F8); defaultCompression = -1; {$IFDEF ZEROBASEDSTR} {$ZEROBASEDSTRINGS OFF} {$ENDIF} RT_BITMAP = PChar(2); type {$IFDEF SUPPORTS_POINTERMATH} // Works for Delphi 2009 and newer. For FPC, POINTERMATH is // a requirement for negative indices. Otherwise 32bit and 64bit // code would behave differently since FPC doesn't otherwise // sign-extend the index variable of type Integer when it's used // as an array-index into an array with an unsigned index range. // i32:=-1; i64:=-1 => i32=i64 but @arr[i32] <> @arr[i64] PByteArray = PByte; // PByte already has PointerMath {$POINTERMATH ON} PDoubleArray = ^Double; PInt64Array = ^Int64; PColor32Array = ^TColor32; PARGBArray = ^TARGB; {$POINTERMATH OFF} {$ELSE} // Delphi 7-2007 PByteArray = ^TStaticByteArray; TStaticByteArray = array[0..MaxInt div SizeOf(byte) - 1] of byte; PDoubleArray = ^TStaticDoubleArray; TStaticDoubleArray = array[0..MaxInt div SizeOf(double) - 1] of double; PInt64Array = ^TStaticInt64Array; TStaticInt64Array = array[0..MaxInt div SizeOf(int64) - 1] of int64; PColor32Array = ^TStaticColor32Array; TStaticColor32Array = array[0..MaxInt div SizeOf(TColor32) - 1] of TColor32; PARGBArray = ^TStaticARGBArray; TStaticARGBArray = array[0..MaxInt div SizeOf(TARGB) - 1] of TARGB; {$ENDIF} TArrayOfByte = array of Byte; TArrayOfWord = array of WORD; TArrayOfInteger = array of Integer; TArrayOfDouble = array of double; PColor32 = ^TColor32; TArrayOfColor32 = array of TColor32; TArrayOfArrayOfColor32 = array of TArrayOfColor32; TArrayOfString = array of string; TClipboardPriority = (cpLow, cpMedium, cpHigh); TImg32Notification = (inStateChange, inDestroy); //A INotifyRecipient receives change notifications though a property //interface from a single NotifySender (eg a Font property). //A NotifySender can send change notificatons to multiple NotifyRecipients //(eg where multiple object use the same font property). NotifyRecipients can //still receive change notificatons from mulitple NotifySenders, but it //must use a separate property for each NotifySender. (Also there's little //benefit in using INotifySender and INotifyRecipient interfaces where there //will only be one receiver - eg scroll - scrolling window.) INotifyRecipient = interface ['{95F50C62-D321-46A4-A42C-8E9D0E3149B5}'] procedure ReceiveNotification(Sender: TObject; notify: TImg32Notification); end; TRecipients = array of INotifyRecipient; INotifySender = interface ['{52072382-8B2F-481D-BE0A-E1C0A216B03E}'] procedure AddRecipient(recipient: INotifyRecipient); procedure DeleteRecipient(recipient: INotifyRecipient); end; TInterfacedObj = class(TObject, IInterface) public {$IFDEF FPC} function _AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; function _Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; function QueryInterface( {$IFDEF FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} iid : tguid; out obj) : longint; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; {$ELSE} function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; {$ENDIF} end; TImage32 = class; TImageFormatClass = class of TImageFormat; //TImageFormat: Abstract base class for loading and saving images in TImage32.
//This class is overridden to provide support for separate //file storage formats (eg BMP, PNG, GIF & JPG).
//Derived classes register with TImage32 using TImage32.RegisterImageFormatClass. TImageFormat = class public class function IsValidImageStream(stream: TStream): Boolean; virtual; abstract; procedure SaveToStream(stream: TStream; img32: TImage32; quality: integer = 0); virtual; abstract; function SaveToFile(const filename: string; img32: TImage32; quality: integer = 0): Boolean; virtual; function LoadFromStream(stream: TStream; img32: TImage32; imgIndex: integer = 0): Boolean; virtual; abstract; function LoadFromFile(const filename: string; img32: TImage32): Boolean; virtual; class function GetImageCount(stream: TStream): integer; virtual; class function CanCopyToClipboard: Boolean; virtual; class function CopyToClipboard(img32: TImage32): Boolean; virtual; abstract; class function CanPasteFromClipboard: Boolean; virtual; abstract; class function PasteFromClipboard(img32: TImage32): Boolean; virtual; abstract; end; TBlendFunction = function(bgColor, fgColor: TColor32): TColor32; TBlendLineFunction = procedure(bgColor, fgColor: PColor32; width: nativeint); TCompareFunction = function(master, current: TColor32; data: integer): Boolean; TCompareFunctionEx = function(master, current: TColor32): Byte; TTileFillStyle = (tfsRepeat, tfsMirrorHorz, tfsMirrorVert, tfsRotate180); TResamplerFunction = function(img: TImage32; x, y: double): TColor32; TGrayscaleMode = (gsmSaturation, gsmLinear, gsmColorimetric); TImage32 = class(TObject) private fWidth: integer; fHeight: Integer; fResampler: integer; fIsPremultiplied: Boolean; fColorCount: integer; fPixels: TArrayOfColor32; fOnChange: TNotifyEvent; fOnResize: TNotifyEvent; fUpdateCnt: integer; fAntiAliased: Boolean; fNotifyBlockCnt: integer; function GetPixel(x,y: Integer): TColor32; procedure SetPixel(x,y: Integer; color: TColor32); function GetIsBlank: Boolean; function GetIsEmpty: Boolean; function GetPixelBase: PColor32; function GetPixelRow(row: Integer): PColor32; procedure RotateLeft90; procedure RotateRight90; procedure Rotate180; function GetColorCount: Integer; function GetHasTransparency: Boolean; function GetBounds: TRect; function GetMidPoint: TPointD; protected procedure ResetColorCount; function RectHasTransparency(const rec: TRect): Boolean; function CopyPixels(const rec: TRect): TArrayOfColor32; //CopyInternal: Internal routine (has no scaling or bounds checking) procedure CopyInternal(src: TImage32; const srcRec, dstRec: TRect; blendFunc: TBlendFunction); procedure CopyInternalLine(src: TImage32; const srcRec, dstRec: TRect; blendLineFunc: TBlendLineFunction); function CopyBlendInternal(src: TImage32; const srcRec: TRect; dstRec: TRect; blendFunc: TBlendFunction = nil; blendLineFunc: TBlendLineFunction = nil): Boolean; overload; procedure Changed; virtual; procedure Resized; virtual; function SetPixels(const newPixels: TArrayOfColor32): Boolean; property UpdateCount: integer read fUpdateCnt; public constructor Create(width: Integer = 0; height: Integer = 0); overload; //Create(src:array, width, height): Uses the specified array for the pixels. // Uses src for the pixels without copying it. constructor Create(const src: TArrayOfColor32; width: Integer; height: Integer); overload; constructor Create(src: TImage32); overload; constructor Create(src: TImage32; const srcRec: TRect); overload; destructor Destroy; override; //BeginUpdate/EndUpdate: postpones calls to OnChange event (can be nested) procedure BeginUpdate; procedure EndUpdate; //BlockUpdate/UnBlockUpdate: blocks calls to OnChange event (can be nested) procedure BlockNotify; procedure UnblockNotify; procedure Assign(src: TImage32); procedure AssignTo(dst: TImage32); procedure AssignSettings(src: TImage32); //AssignPixelArray: Replaces the content and takes ownership of src. // Uses src for the pixels without copying it. procedure AssignPixelArray(const src: TArrayOfColor32; width: Integer; height: Integer); //SetSize: Erases any current image, and fills with the specified color. procedure SetSize(newWidth, newHeight: Integer; color: TColor32 = 0); //Resize: is very similar to Scale() procedure Resize(newWidth, newHeight: Integer); procedure ResizeTo(targetImg: TImage32; newWidth, newHeight: Integer); //ScaleToFit: The image will be scaled proportionally procedure ScaleToFit(width, height: integer); //ScaleToFitCentered: The new image will be scaled and also centred procedure ScaleToFitCentered(width, height: integer); overload; procedure ScaleToFitCentered(const rect: TRect); overload; procedure Scale(s: double); overload; procedure Scale(sx, sy: double); overload; procedure ScaleTo(targetImg: TImage32; s: double); overload; procedure ScaleTo(targetImg: TImage32; sx, sy: double); overload; function Copy(src: TImage32; srcRec, dstRec: TRect): Boolean; //CopyBlend: Copies part or all of another image (src) on top of the //existing image. If no blend function is provided, then the function //will behave exactly as the Copy function above. However, when a blend //function is specified, that function will determine how the images will //be blended. If srcRec and dstRec have different widths or heights, //then the image in srcRec will also be stretched to fit dstRec. function CopyBlend(src: TImage32; const srcRec, dstRec: TRect; blendFunc: TBlendFunction = nil): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function CopyBlend(src: TImage32; const srcRec, dstRec: TRect; blendLineFunc: TBlendLineFunction): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} {$IFDEF MSWINDOWS} //CopyFromDC: Copies an image from a Windows device context, erasing //any current image in TImage32. (eg copying from TBitmap.canvas.handle) procedure CopyFromDC(srcDc: HDC; const srcRect: TRect); //CopyToDc: Copies the image into a Windows device context procedure CopyToDc(dstDc: HDC; x: Integer = 0; y: Integer = 0; transparent: Boolean = true); overload; procedure CopyToDc(const srcRect: TRect; dstDc: HDC; x: Integer = 0; y: Integer = 0; transparent: Boolean = true); overload; procedure CopyToDc(const srcRect, dstRect: TRect; dstDc: HDC; transparent: Boolean = true); overload; {$ENDIF} {$IF DEFINED(USING_VCL_LCL)} procedure CopyFromBitmap(bmp: TBitmap); procedure CopyToBitmap(bmp: TBitmap); {$IFEND} function CopyToClipBoard: Boolean; class function CanPasteFromClipBoard: Boolean; function PasteFromClipBoard: Boolean; procedure Crop(const rec: TRect); //SetBackgroundColor: Assumes the current image is semi-transparent. procedure SetBackgroundColor(bgColor: TColor32); procedure Clear(color: TColor32 = 0); overload; procedure Clear(const rec: TRect; color: TColor32 = 0); overload; procedure FillRect(const rec: TRect; color: TColor32); procedure ConvertToBoolMask(reference: TColor32; tolerance: integer; colorFunc: TCompareFunction; maskBg: TColor32 = clWhite32; maskFg: TColor32 = clBlack32); procedure ConvertToAlphaMask(reference: TColor32; colorFunc: TCompareFunctionEx); procedure FlipVertical; procedure FlipHorizontal; procedure PreMultiply; //SetAlpha: Sets 'alpha' to the alpha byte of every pixel in the image procedure SetAlpha(alpha: Byte); procedure ReduceOpacity(opacity: Byte); overload; procedure ReduceOpacity(opacity: Byte; rec: TRect); overload; //SetRGB: Sets the RGB channels leaving the alpha channel unchanged procedure SetRGB(rgbColor: TColor32); overload; procedure SetRGB(rgbColor: TColor32; rec: TRect); overload; //Grayscale: Only changes color channels. The alpha channel is untouched. procedure Grayscale(mode: TGrayscaleMode = gsmSaturation; linearAmountPercentage: double = 1.0); procedure InvertColors; procedure InvertAlphas; procedure AdjustHue(percent: Integer); //ie +/- 100% procedure AdjustLuminance(percent: Integer); //ie +/- 100% procedure AdjustSaturation(percent: Integer); //ie +/- 100% function GetOpaqueBounds: TRect; //CropTransparentPixels: Trims transparent edges until each edge contains //at least one opaque or semi-opaque pixel. function CropTransparentPixels: TRect; procedure Rotate(angleRads: double); //RotateRect: Rotates part of an image, but also clips those parts of the //rotated image that fall outside rec. The eraseColor parameter indicates //the color to fill those uncovered pixels in rec following rotation. procedure RotateRect(const rec: TRect; angleRads: double; eraseColor: TColor32 = 0); procedure Skew(dx,dy: double); //ScaleAlpha: Scales the alpha byte of every pixel by the specified amount. procedure ScaleAlpha(scale: double); class procedure RegisterImageFormatClass(ext: string; bm32ExClass: TImageFormatClass; clipPriority: TClipboardPriority); class function GetImageFormatClass(const ext: string): TImageFormatClass; overload; class function GetImageFormatClass(stream: TStream): TImageFormatClass; overload; class function IsRegisteredFormat(const ext: string): Boolean; function SaveToFile(filename: string; compressionQuality: integer = defaultCompression): Boolean; function SaveToStream(stream: TStream; const FmtExt: string; compressionQuality: integer = defaultCompression): Boolean; function LoadFromFile(const filename: string): Boolean; function LoadFromStream(stream: TStream; imgIdx: integer = 0): Boolean; function LoadFromResource(const resName: string; resType: PChar): Boolean; //properties ... property AntiAliased: Boolean read fAntiAliased write fAntiAliased; property Width: Integer read fWidth; property Height: Integer read fHeight; property Bounds: TRect read GetBounds; property IsBlank: Boolean read GetIsBlank; property IsEmpty: Boolean read GetIsEmpty; property IsPreMultiplied: Boolean read fIsPremultiplied; property MidPoint: TPointD read GetMidPoint; property Pixel[x,y: Integer]: TColor32 read GetPixel write SetPixel; property Pixels: TArrayOfColor32 read fPixels; property PixelBase: PColor32 read GetPixelBase; property PixelRow[row: Integer]: PColor32 read GetPixelRow; property ColorCount: Integer read GetColorCount; //HasTransparency: Returns true if any pixel's alpha byte < 255. property HasTransparency: Boolean read GetHasTransparency; //Resampler: is used in scaling and rotation transforms property Resampler: integer read fResampler write fResampler; property OnChange: TNotifyEvent read fOnChange write fOnChange; property OnResize: TNotifyEvent read fOnResize write fOnResize; end; TImageList32 = class private {$IFDEF XPLAT_GENERICS} fList: TList; {$ELSE} fList: TList; {$ENDIF} fIsImageOwner: Boolean; function GetImage(index: integer): TImage32; procedure SetImage(index: integer; img: TIMage32); function GetLast: TImage32; public constructor Create; destructor Destroy; override; procedure Clear; function Count: integer; procedure Add(image: TImage32); overload; function Add(width, height: integer): TImage32; overload; procedure Insert(index: integer; image: TImage32); procedure Move(currentIndex, newIndex: integer); procedure Delete(index: integer); property Image[index: integer]: TImage32 read GetImage write SetImage; default; property IsImageOwner: Boolean read fIsImageOwner write fIsImageOwner; property Last: TImage32 read GetLast; end; THsl = packed record hue : byte; sat : byte; lum : byte; alpha: byte; end; PHsl = ^THsl; TArrayofHSL = array of THsl; TTriState = (tsUnknown = 0, tsYes = 1, tsChecked = 1, tsNo = 2, tsUnchecked = 2); PPointD = ^TPointD; TPathD = array of TPointD; //nb: watch for ambiguity with Clipper.pas TPathsD = array of TPathD; //nb: watch for ambiguity with Clipper.pas TArrayOfPathsD = array of TPathsD; TRectD = {$IFDEF RECORD_METHODS} record {$ELSE} object {$ENDIF} {$IFNDEF RECORD_METHODS} Left, Top, Right, Bottom: Double; function TopLeft: TPointD; function BottomRight: TPointD; {$ENDIF} function IsEmpty: Boolean; function Width: double; function Height: double; //Normalize: Returns True if swapping top & bottom or left & right function Normalize: Boolean; function Contains(const Pt: TPoint): Boolean; overload; function Contains(const Pt: TPointD): Boolean; overload; function MidPoint: TPointD; {$IFDEF RECORD_METHODS} case Integer of 0: (Left, Top, Right, Bottom: Double); 1: (TopLeft, BottomRight: TPointD); {$ENDIF} end; {$IFNDEF PBYTE} PByte = type PChar; {$ENDIF} //BLEND FUNCTIONS ( see TImage32.CopyBlend() ) //BlendToOpaque: Blends a semi-transparent image onto an opaque background function BlendToOpaque(bgColor, fgColor: TColor32): TColor32; //BlendToAlpha: Blends two semi-transparent images (slower than BlendToOpaque) function BlendToAlpha(bgColor, fgColor: TColor32): TColor32; function BlendToAlpha3(bgColor, fgColor: TColor32; blendOpacity: Byte): TColor32; procedure BlendToAlphaLine(bgColor, fgColor: PColor32; width: nativeint); //BlendMask: Whereever the mask is, preserves the background function BlendMask(bgColor, alphaMask: TColor32): TColor32; procedure BlendMaskLine(bgColor, alphaMask: PColor32; width: nativeint); function BlendAltMask(bgColor, alphaMask: TColor32): TColor32; function BlendDifference(color1, color2: TColor32): TColor32; function BlendSubtract(bgColor, fgColor: TColor32): TColor32; function BlendLighten(bgColor, fgColor: TColor32): TColor32; function BlendDarken(bgColor, fgColor: TColor32): TColor32; function BlendInvertedMask(bgColor, alphaMask: TColor32): TColor32; procedure BlendInvertedMaskLine(bgColor, alphaMask: PColor32; width: nativeint); //BlendBlueChannel: typically useful for white color masks function BlendBlueChannel(bgColor, blueMask: TColor32): TColor32; procedure BlendBlueChannelLine(bgColor, blueMask: PColor32; width: nativeint); //COMPARE COLOR FUNCTIONS (ConvertToBoolMask, FloodFill, Vectorize etc.) function CompareRGB(master, current: TColor32; tolerance: Integer): Boolean; function CompareHue(master, current: TColor32; tolerance: Integer): Boolean; function CompareAlpha(master, current: TColor32; tolerance: Integer): Boolean; //CompareEx COLOR FUNCTIONS (see ConvertToAlphaMask) function CompareRgbEx(master, current: TColor32): Byte; function CompareAlphaEx(master, current: TColor32): Byte; //MISCELLANEOUS FUNCTIONS ... function GetBoolMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunction; tolerance: Integer): TArrayOfByte; function GetByteMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunctionEx): TArrayOfByte; function GetColorMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunction; tolerance: Integer): TArrayOfColor32; {$IFDEF MSWINDOWS} //Color32: Converts a Graphics.TColor value into a TColor32 value. function Color32(rgbColor: Integer): TColor32; overload; {$IFDEF INLINE} inline; {$ENDIF} procedure FixPalette(p: PARGB; count: integer); {$ENDIF} function Color32(a, r, g, b: Byte): TColor32; overload; {$IFDEF INLINE} inline; {$ENDIF} //RGBColor: Converts a TColor32 value into a COLORREF value function RGBColor(color: TColor32): Cardinal; {$IFDEF INLINE} inline; {$ENDIF} function InvertColor(color: TColor32): TColor32; {$IFDEF INLINE} inline; {$ENDIF} //RgbToHsl: See https://en.wikipedia.org/wiki/HSL_and_HSV function RgbToHsl(color: TColor32): THsl; //HslToRgb: See https://en.wikipedia.org/wiki/HSL_and_HSV function HslToRgb(hslColor: THsl): TColor32; function AdjustHue(color: TColor32; percent: Integer): TColor32; function ArrayOfColor32ToArrayHSL(const clr32Arr: TArrayOfColor32): TArrayofHSL; function ArrayOfHSLToArrayColor32(const hslArr: TArrayofHSL): TArrayOfColor32; function GetAlpha(color: TColor32): Byte; {$IFDEF INLINE} inline; {$ENDIF} function PointD(const X, Y: Double): TPointD; overload; {$IFDEF INLINE} inline; {$ENDIF} function PointD(const pt: TPoint): TPointD; overload; {$IFDEF INLINE} inline; {$ENDIF} function RectD(left, top, right, bottom: double): TRectD; overload; function RectD(const rec: TRect): TRectD; overload; function ClampByte(val: Integer): byte; overload; {$IFDEF INLINE} inline; {$ENDIF} function ClampByte(val: double): byte; overload; {$IFDEF INLINE} inline; {$ENDIF} function ClampRange(val, min, max: Integer): Integer; overload; {$IFDEF INLINE} inline; {$ENDIF} function ClampRange(val, min, max: double): double; overload; {$IFDEF INLINE} inline; {$ENDIF} function IncPColor32(pc: Pointer; cnt: Integer): PColor32; {$IFDEF INLINE} inline; {$ENDIF} procedure NormalizeAngle(var angle: double; tolerance: double = Pi/360); function GrayScale(color: TColor32): TColor32; {$IFDEF INLINE} inline; {$ENDIF} //DPIAware: Useful for DPIAware sizing of images and their container controls. //It scales values relative to the display's resolution (PixelsPerInch). //See https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-DPIAware-desktop-application-development-on-windows function DPIAware(val: Integer): Integer; overload; {$IFDEF INLINE} inline; {$ENDIF} function DPIAware(val: double): double; overload; {$IFDEF INLINE} inline; {$ENDIF} function DPIAware(const pt: TPoint): TPoint; overload; function DPIAware(const pt: TPointD): TPointD; overload; function DPIAware(const rec: TRect): TRect; overload; function DPIAware(const rec: TRectD): TRectD; overload; {$IFDEF MSWINDOWS} {$IFDEF FPC} function AlphaBlend(DC: HDC; p2, p3, p4, p5: Integer; DC6: HDC; p7, p8, p9, p10: Integer; p11: Windows.TBlendFunction): BOOL; stdcall; external 'msimg32.dll' name 'AlphaBlend'; {$ENDIF} {$ENDIF} //CreateResourceStream: handles both numeric and string names and types function CreateResourceStream(const resName: string; resType: PChar): TResourceStream; function GetResampler(id: integer): TResamplerFunction; function RegisterResampler(func: TResamplerFunction; const name: string): integer; procedure GetResamplerList(stringList: TStringList); const TwoPi = Pi *2; angle0 = 0; angle1 = Pi/180; angle15 = Pi /12; angle30 = angle15 *2; angle45 = angle15 *3; angle60 = angle15 *4; angle75 = angle15 *5; angle90 = Pi /2; angle105 = Pi - angle75; angle120 = Pi - angle60; angle135 = Pi - angle45; angle150 = Pi - angle30; angle165 = Pi - angle15; angle180 = Pi; angle195 = Pi + angle15; angle210 = Pi + angle30; angle225 = Pi + angle45; angle240 = Pi + angle60; angle255 = Pi + angle75; angle270 = TwoPi - angle90; angle285 = TwoPi - angle75; angle300 = TwoPi - angle60; angle315 = TwoPi - angle45; angle330 = TwoPi - angle30; angle345 = TwoPi - angle15; angle360 = TwoPi; div255: Double = 1 / 255; var //Resampling function identifiers (initialized in Img32.Resamplers) rNearestResampler : integer; rBilinearResampler: integer; rBicubicResampler : integer; rWeightedBilinear : integer; DefaultResampler: Integer = 0; //Both MulTable and DivTable are used in blend functions //MulTable[a,b] = a * b / 255 MulTable: array [Byte,Byte] of Byte; //DivTable[a,b] = a * 255/b (for a <= b) DivTable: array [Byte,Byte] of Byte; //Sigmoid: weight byte values towards each end Sigmoid: array[Byte] of Byte; dpiAware1 : integer = 1; DpiAwareOne : double = 1.0; //AND BECAUSE OLDER DELPHI COMPILERS (OLDER THAN D2006) //DON'T SUPPORT RECORD METHODS procedure RectWidthHeight(const rec: TRect; out width, height: Integer); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure RectWidthHeight(const rec: TRectD; out width, height: double); overload; {$IFDEF INLINE} inline; {$ENDIF} function RectWidth(const rec: TRect): Integer; {$IFDEF INLINE} inline; {$ENDIF} function RectHeight(const rec: TRect): Integer; {$IFDEF INLINE} inline; {$ENDIF} function IsEmptyRect(const rec: TRect): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function IsEmptyRect(const rec: TRectD): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function SwapRedBlue(color: TColor32): TColor32; overload; procedure SwapRedBlue(color: PColor32; count: integer); overload; function MulBytes(b1, b2: Byte) : Byte; function __Trunc(Value: Double): Integer; {$IFNDEF CPUX86} {$IFDEF INLINE} inline; {$ENDIF} {$ENDIF} // NewColor32Array creates a new "array of TColor32". "a" is nil'ed // before allocating the array. If "count" is zero or negative "a" will // be nil. If "uninitialized" is True, the memory will not be zero'ed. procedure NewColor32Array(var a: TArrayOfColor32; count: nativeint; uninitialized: boolean = False); procedure NewIntegerArray(var a: TArrayOfInteger; count: nativeint; uninitialized: boolean = False); procedure NewByteArray(var a: TArrayOfByte; count: nativeint; uninitialized: boolean = False); procedure NewPointDArray(var a: TPathD; count: nativeint; uninitialized: boolean = False); // SetLengthUninit changes the dyn. array's length but does not initialize // the new elements with zeros. It can be used as a replacement for // SetLength where the zero-initialitation is not required. procedure SetLengthUninit(var a: TArrayOfColor32; count: nativeint); overload; procedure SetLengthUninit(var a: TArrayOfInteger; count: nativeint); overload; procedure SetLengthUninit(var a: TArrayOfByte; count: nativeint); overload; procedure SetLengthUninit(var a: TPathD; count: nativeint); overload; implementation uses Img32.Vector, Img32.Resamplers, Img32.Transform {$IF DEFINED(USING_VCL_LCL)} , Img32.Fmt.BMP {$ENDIF} ; resourcestring rsImageTooLarge = 'Image32 error: the image is too large.'; rsInvalidImageArrayData = 'Image32 error: the specified pixels array and the size does not match.'; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ {$IFDEF CPUX86} const // Use faster Trunc for x86 code in this unit. Trunc: function(Value: Double): Integer = __Trunc; {$ENDIF CPUX86} type TImgFmtRec = record Fmt: string; SortOrder: TClipboardPriority; Obj: TImageFormatClass; end; PImgFmtRec = ^TImgFmtRec; TResamplerObj = class id: integer; name: string; func: TResamplerFunction; end; PDynArrayRec = ^TDynArrayRec; {$IFDEF FPC} tdynarrayindex = sizeint; TDynArrayRec = packed record refcount: ptrint; high: tdynarrayindex; Data: record end; end; {$ELSE} TDynArrayRec = packed record {$IFDEF CPU64BITS} _Padding: Integer; {$ENDIF} RefCnt: Integer; Length: NativeInt; Data: record end; end; {$ENDIF} var {$IFDEF XPLAT_GENERICS} ImageFormatClassList: TList; //list of supported file extensions ResamplerList: TList; //list of resampler functions {$ELSE} ImageFormatClassList: TList; ResamplerList: TList; {$ENDIF} //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ function NewSimpleDynArray(count: nativeint; elemSize: integer; uninitialized: boolean = False): Pointer; var p: PDynArrayRec; begin Result := nil; if (count > 0) and (elemSize > 0) then begin if uninitialized then GetMem(Pointer(p), SizeOf(TDynArrayRec) + count * elemSize) else p := AllocMem(SizeOf(TDynArrayRec) + count * elemSize); {$IFDEF FPC} p.refcount := 1; p.high := count -1; {$ELSE} p.RefCnt := 1; p.Length := count; {$ENDIF} Result := @p.Data; end; end; //------------------------------------------------------------------------------ function InternSetSimpleDynArrayLengthUninit(a: Pointer; count: nativeint; elemSize: integer): Pointer; var p: PDynArrayRec; oldCount: nativeint; begin if a = nil then Result := NewSimpleDynArray(count, elemSize) else if (count > 0) and (elemSize > 0) then begin p := PDynArrayRec(PByte(a) - SizeOf(TDynArrayRec)); {$IFDEF FPC} oldCount := p.high + 1; if p.refcount = 1 then {$ELSE} oldCount := p.Length; if p.RefCnt = 1 then {$ENDIF} begin // There is only one reference to this array and that is "a", // so we can use ReallocMem to change the array's length. if oldCount = count then begin Result := a; Exit; end; ReallocMem(Pointer(p), SizeOf(TDynArrayRec) + count * elemSize); end else begin // SetLength makes a copy of the dyn array to get RefCnt=1 GetMem(Pointer(p), SizeOf(TDynArrayRec) + count * elemSize); if oldCount < 0 then oldCount := 0; // data corruption detected if oldCount > count then oldCount := count; Move(a^, p.Data, oldCount * elemSize); TArrayOfByte(a) := nil; // use a non-managed dyn.array type end; {$IFDEF FPC} p.refcount := 1; p.high := count -1; {$ELSE} p.RefCnt := 1; p.Length := count; {$ENDIF} Result := @p.Data; end else begin TArrayOfByte(a) := nil; // use a non-managed dyn.array type Result := nil; end; end; //------------------------------------------------------------------------------ function CanReuseDynArray(a: Pointer; count: nativeint): Boolean; // returns True if RefCnt=1 and Length=count begin //Assert(a <> nil); a := PByte(a) - SizeOf(TDynArrayRec); Result := {$IFDEF FPC} (PDynArrayRec(a).refcount = 1) and (PDynArrayRec(a).high = count - 1); {$ELSE} (PDynArrayRec(a).RefCnt = 1) and (PDynArrayRec(a).Length = count); {$ENDIF} end; //------------------------------------------------------------------------------ procedure NewColor32Array(var a: TArrayOfColor32; count: nativeint; uninitialized: boolean); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} if a <> nil then begin if uninitialized and CanReuseDynArray(a, count) then Exit; a := nil; end; Pointer(a) := NewSimpleDynArray(count, SizeOf(TColor32), uninitialized); {$IFEND} end; //------------------------------------------------------------------------------ procedure NewIntegerArray(var a: TArrayOfInteger; count: nativeint; uninitialized: boolean); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} if a <> nil then begin if uninitialized and CanReuseDynArray(a, count) then Exit; a := nil; end; Pointer(a) := NewSimpleDynArray(count, SizeOf(Integer), uninitialized); {$IFEND} end; //------------------------------------------------------------------------------ procedure NewByteArray(var a: TArrayOfByte; count: nativeint; uninitialized: boolean); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} if a <> nil then begin if uninitialized and CanReuseDynArray(a, count) then Exit; a := nil; end; Pointer(a) := NewSimpleDynArray(count, SizeOf(Byte), uninitialized); {$IFEND} end; //------------------------------------------------------------------------------ procedure NewPointDArray(var a: TPathD; count: nativeint; uninitialized: boolean); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} if a <> nil then begin if uninitialized and CanReuseDynArray(a, count) then Exit; a := nil; end; Pointer(a) := NewSimpleDynArray(count, SizeOf(TPointD), uninitialized); {$IFEND} end; //------------------------------------------------------------------------------ procedure SetLengthUninit(var a: TArrayOfColor32; count: nativeint); begin SetLength(a, count); // Pointer(a) := InternSetSimpleDynArrayLengthUninit(Pointer(a), count, SizeOf(TColor32)); end; //------------------------------------------------------------------------------ procedure SetLengthUninit(var a: TArrayOfInteger; count: nativeint); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} Pointer(a) := InternSetSimpleDynArrayLengthUninit(Pointer(a), count, SizeOf(Integer)); {$IFEND} end; //------------------------------------------------------------------------------ procedure SetLengthUninit(var a: TArrayOfByte; count: nativeint); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} Pointer(a) := InternSetSimpleDynArrayLengthUninit(Pointer(a), count, SizeOf(Byte)); {$IFEND} end; //------------------------------------------------------------------------------ procedure SetLengthUninit(var a: TPathD; count: nativeint); begin {$IF COMPILERVERSION < 16} SetLength(a, count); {$ELSE} Pointer(a) := InternSetSimpleDynArrayLengthUninit(Pointer(a), count, SizeOf(TPointD)); {$IFEND} end; //------------------------------------------------------------------------------ procedure CreateImageFormatList; begin if Assigned(ImageFormatClassList) then Exit; {$IFDEF XPLAT_GENERICS} ImageFormatClassList := TList.Create; {$ELSE} ImageFormatClassList := TList.Create; {$ENDIF} end; //------------------------------------------------------------------------------ function FMod(const ANumerator, ADenominator: Double): Double; begin Result := ANumerator - Trunc(ANumerator / ADenominator) * ADenominator; end; //------------------------------------------------------------------------------ procedure NormalizeAngle(var angle: double; tolerance: double = Pi/360); var aa: double; begin angle := FMod(angle, angle360); if angle < -Angle180 then angle := angle + angle360 else if angle > angle180 then angle := angle - angle360; aa := Abs(angle); if aa < tolerance then angle := 0 else if aa > angle180 - tolerance then angle := angle180 else if (aa < angle90 - tolerance) or (aa > angle90 + tolerance) then Exit else if angle < 0 then angle := -angle90 else angle := angle90; end; //------------------------------------------------------------------------------ {$IFDEF CPUX86} { Trunc with FPU code is very slow because the x87 ControlWord has to be changed and then there is Delphi's Default8087CW variable that is not thread-safe. } //__Trunc: An efficient Trunc() algorithm (ie rounds toward zero) function __Trunc(Value: Double): Integer; var exp: integer; i64: UInt64 absolute Value; valueBytes: array[0..7] of Byte absolute Value; begin // https://en.wikipedia.org/wiki/Double-precision_floating-point_format // 52 bit fractional value, 11bit ($7FF) exponent, and 1bit sign Result := 0; if i64 = 0 then Exit; exp := Integer(Cardinal(i64 shr 52) and $7FF) - 1023; // nb: when exp == 1024 then Value == INF or NAN. if exp < 0 then Exit //else if exp > 52 then // ie only for 64bit int results // Result := ((i64 and $1FFFFFFFFFFFFF) shl (exp - 52)) or (1 shl exp) //else if exp > 31 then // alternatively, range check for 32bit ints ???? // raise Exception.Create(rsIntegerOverflow) else Result := Integer((i64 and $1FFFFFFFFFFFFF) shr (52 - exp)) or (1 shl exp); // Check for the sign bit without loading Value into the FPU. if valueBytes[7] and $80 <> 0 then Result := -Result; end; //------------------------------------------------------------------------------ {$ELSE} function __Trunc(Value: Double): Integer; begin // Uses fast SSE2 instruction Result := System.Trunc(Value); end; //------------------------------------------------------------------------------ {$ENDIF CPUX86} function SwapRedBlue(color: TColor32): TColor32; var c: array[0..3] of byte absolute color; r: array[0..3] of byte absolute Result; begin result := color; r[0] := c[2]; r[2] := c[0]; end; //------------------------------------------------------------------------------ procedure SwapRedBlue(color: PColor32; count: integer); var i: integer; begin for i := 1 to count do begin color^ := SwapRedBlue(color^); inc(color); end; end; //------------------------------------------------------------------------------ function MulBytes(b1, b2: Byte) : Byte; {$IFDEF INLINE} inline; {$ENDIF} begin Result := MulTable[b1, b2]; end; //------------------------------------------------------------------------------ function ImageFormatClassListSort(item1, item2: Pointer): integer; var imgFmtRec1: PImgFmtRec absolute item1; imgFmtRec2: PImgFmtRec absolute item2; begin Result := Integer(imgFmtRec1.SortOrder) - Integer(imgFmtRec2.SortOrder); end; //------------------------------------------------------------------------------ function ClampByte(val: Integer): byte; begin if val < 0 then result := 0 else if val > 255 then result := 255 else result := val; end; //------------------------------------------------------------------------------ function ClampByte(val: double): byte; begin if val <= 0 then result := 0 else if val >= 255 then result := 255 else result := Round(val); end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // Blend functions - used by TImage32.CopyBlend() //------------------------------------------------------------------------------ function BlendToOpaque(bgColor, fgColor: TColor32): TColor32; var fgA: byte; fw,bw: PByteArray; begin fgA := fgColor shr 24; if fgA = 0 then Result := bgColor else if fgA = 255 then Result := fgColor else begin //assuming bg.A = 255, use just fg.A for color weighting fw := PByteArray(@MulTable[fgA]); //ie weight of foreground bw := PByteArray(@MulTable[not fgA]); //ie weight of background Result := $FF000000 or (TColor32(Byte(fw[Byte(fgColor shr 16)] + bw[Byte(bgColor shr 16)])) shl 16) or (TColor32(Byte(fw[Byte(fgColor shr 8 )] + bw[Byte(bgColor shr 8)])) shl 8) or (TColor32(Byte(fw[Byte(fgColor )] + bw[Byte(bgColor )])) ); end; end; //------------------------------------------------------------------------------ function BlendToAlpha(bgColor, fgColor: TColor32): TColor32; var fgWeight: byte; R, InvR: PByteArray; bgA, fgA: byte; begin //(see https://en.wikipedia.org/wiki/Alpha_compositing) fgA := fgColor shr 24; bgA := bgColor shr 24; if fgA = 0 then Result := bgColor else if (bgA = 0) or (fgA = 255) then Result := fgColor else begin //combine alphas ... bgA := not MulTable[not fgA, not bgA]; fgWeight := DivTable[fgA, bgA]; // fgWeight = amount foreground color // contibutes to the result color R := PByteArray(@MulTable[fgWeight]); // ie weight of foreground InvR := PByteArray(@MulTable[not fgWeight]); // ie weight of background Result := bgA shl 24 or (TColor32(R[Byte(fgColor shr 16)] + InvR[Byte(bgColor shr 16)]) shl 16) or (TColor32(R[Byte(fgColor shr 8 )] + InvR[Byte(bgColor shr 8)]) shl 8) or (TColor32(R[Byte(fgColor) ] + InvR[Byte(bgColor) ]) ); end; end; //------------------------------------------------------------------------------ function BlendToAlpha3(bgColor, fgColor: TColor32; blendOpacity: Byte): TColor32; var fgWeight: byte; R, InvR: PByteArray; bgA, fgA: byte; begin fgA := MulTable[blendOpacity, fgColor shr 24]; bgA := bgColor shr 24; if fgA = 0 then Result := bgColor // must do first else if (bgA = 0) or (fgA = 255) then Result := (fgA shl 24) or (fgColor and $FFFFFF) else begin //combine alphas ... bgA := not MulTable[not fgA, not bgA]; fgWeight := DivTable[fgA, bgA]; // fgWeight = amount foreground color // contibutes to the result color R := PByteArray(@MulTable[fgWeight]); // ie weight of foreground InvR := PByteArray(@MulTable[not fgWeight]); // ie weight of background Result := bgA shl 24 or (TColor32(R[Byte(fgColor shr 16)] + InvR[Byte(bgColor shr 16)]) shl 16) or (TColor32(R[Byte(fgColor shr 8 )] + InvR[Byte(bgColor shr 8)]) shl 8) or (TColor32(R[Byte(fgColor) ] + InvR[Byte(bgColor) ]) ); end; end; //------------------------------------------------------------------------------ {$RANGECHECKS OFF} // negative array index is used {$IFNDEF CPUX64} function BlendToAlphaLineX86(bgColorArr, fgColorArr: PColor32Array; idx: nativeint): nativeint; // Helper function for x86 code, reduces the CPU register pressure in // BlendToAlphaLine(). var fgWeight: byte; R, InvR: PByteArray; fgA, bgA, newBgA: byte; fgCol, bgCol: TColor32; begin fgCol := fgColorArr[idx]; bgCol := bgColorArr[idx]; Result := idx; // idx - negative offset into color arrays while True do begin fgA := fgCol shr 24; bgA := bgCol shr 24; //combine alphas ... newBgA := not MulTable[not fgA, not bgA]; fgWeight := DivTable[fgA, newBgA]; //fgWeight = amount foreground color //contibutes to total (result) color R := PByteArray(@MulTable[fgWeight]); //ie weight of foreground InvR := PByteArray(@MulTable[not fgWeight]); //ie weight of foreground while True do begin bgColorArr[Result] := TColor32(newBgA) shl 24 or (TColor32(R[Byte(fgCol shr 16)] + InvR[Byte(bgCol shr 16)]) shl 16) or (TColor32(R[Byte(fgCol shr 8 )] + InvR[Byte(bgCol shr 8)]) shl 8) or (TColor32(R[Byte(fgCol) ] + InvR[Byte(bgCol) ]) ); inc(Result); if Result = 0 then exit; fgCol := fgColorArr[Result]; bgCol := bgColorArr[Result]; // if both alpha channels are the same in the new pixels, we // can use the already calculated R/InvR tables. if (fgCol shr 24 <> fgA) or (bgCol shr 24 <> bgA) then break; end; // return if we have alpha channel values for which we have special code if (fgCol and $FF000000 = 0) or (fgCol and $FF000000 = $FF000000) or (bgCol and $FF000000 = 0) then exit; end; end; //------------------------------------------------------------------------------ {$ENDIF ~CPUX64} procedure BlendToAlphaLine(bgColor, fgColor: PColor32; width: nativeint); label LabelBgAlphaIsZero; var bgColorArr, fgColorArr: PColor32Array; bgCol, fgCol: TColor32; {$IFDEF CPUX64} fgWeight, fgA, bgA: byte; R, InvR: PByteArray; {$ENDIF CPUX64} begin //(see https://en.wikipedia.org/wiki/Alpha_compositing) // Use the negative offset trick to only increment the array "width" // until it reaches zero. And by offsetting the arrays by "width", // the negative "width" values also becomes the index into these arrays. inc(bgColor, width); inc(fgColor, width); width := -width; bgColorArr := PColor32Array(bgColor); fgColorArr := PColor32Array(fgColor); while width < 0 do begin bgCol := bgColorArr[width]; fgCol := fgColorArr[width]; // bgColor.A is zero => change bgColor to fgColor while bgCol shr 24 = 0 do begin LabelBgAlphaIsZero: bgColorArr[width] := fgCol; inc(width); if width = 0 then exit; fgCol := fgColorArr[width]; bgCol := bgColorArr[width]; end; // fgColor.A is zero => don't change bgColor while fgCol shr 24 = 0 do begin // bgColorArr[w] := bgColorArr[w]; inc(width); if width = 0 then exit; fgCol := fgColorArr[width]; bgCol := bgColorArr[width]; if bgCol shr 24 = 0 then goto LabelBgAlphaIsZero; end; // fgColor.A is 255 => change bgColor to fgColor while fgCol shr 24 = 255 do begin bgColorArr[width] := fgCol; inc(width); if width = 0 then exit; fgCol := fgColorArr[width]; bgCol := bgColorArr[width]; if bgCol shr 24 = 0 then goto LabelBgAlphaIsZero; end; {$IFDEF CPUX64} // x64 has more CPU registers than x86 and calling BlendToAlphaLineX86 // is slower, so we inline it. //combine alphas ... fgA := fgCol shr 24; bgA := bgCol shr 24; bgA := not MulTable[not fgA, not bgA]; fgWeight := DivTable[fgA, bgA]; //fgWeight = amount foreground color //contibutes to total (result) color R := PByteArray(@MulTable[fgWeight]); //ie weight of foreground InvR := PByteArray(@MulTable[not fgWeight]); //ie weight of foreground bgColorArr[width] := TColor32(bgA) shl 24 or (TColor32(R[Byte(fgCol shr 16)] + InvR[Byte(bgCol shr 16)]) shl 16) or (TColor32(R[Byte(fgCol shr 8 )] + InvR[Byte(bgCol shr 8)]) shl 8) or (TColor32(R[Byte(fgCol) ] + InvR[Byte(bgCol) ]) ); inc(width); {$ELSE} // x86 has not enough CPU registers and the loops above will suffer if we // inline the code. So we let the compiler use a "new set" of CPU registers // by calling a function. width := BlendToAlphaLineX86(bgColorArr, fgColorArr, width); {$ENDIF CPUX64} end; end; //------------------------------------------------------------------------------ { // reference implementation procedure BlendToAlphaLine(bgColor, fgColor: PColor32; width: nativeint); var fgWeight: byte; R, InvR: PByteArray; bgA, fgA: Byte; bgColorArr, fgColorArr: PColor32Array; bgCol, fgCol: TColor32; begin //(see https://en.wikipedia.org/wiki/Alpha_compositing) // Use the negative offset trick to only increment the array "width" // until it reaches zero. And by offsetting the arrays by "width", // the negative "width" values also becomes the index into these arrays. inc(bgColor, width); inc(fgColor, width); width := -width; bgColorArr := PColor32Array(bgColor); fgColorArr := PColor32Array(fgColor); while width < 0 do begin bgCol := bgColorArr[width]; fgCol := fgColorArr[width]; bgA := bgCol shr 24; if bgA = 0 then bgColorArr[width] := fgCol else begin fgA := fgCol shr 24; if fgA > 0 then begin if fgA = 255 then bgColorArr[width] := fgCol else if fgA > 0 then begin //combine alphas ... bgA := not MulTable[not fgA, not bgA]; fgWeight := DivTable[fgA, bgA]; //fgWeight = amount foreground color //contibutes to total (result) color R := PByteArray(@MulTable[fgWeight]); //ie weight of foreground InvR := PByteArray(@MulTable[not fgWeight]); //ie weight of foreground bgColorArr[width] := TColor32(bgA) shl 24 or (TColor32(R[Byte(fgCol shr 16)] + InvR[Byte(bgCol shr 16)]) shl 16) or (TColor32(R[Byte(fgCol shr 8 )] + InvR[Byte(bgCol shr 8)]) shl 8) or (TColor32(R[Byte(fgCol) ] + InvR[Byte(bgCol) ]) ); end; end; end; inc(width); end; end;} {$IFDEF RANGECHECKS_ENABLED} {$RANGECHECKS ON} {$ENDIF} //------------------------------------------------------------------------------ function BlendMask(bgColor, alphaMask: TColor32): TColor32; var a: byte; begin a := MulTable[bgColor shr 24, alphaMask shr 24]; if a <> 0 then Result := (TColor32(a) shl 24) or (bgColor and $00FFFFFF) else Result := 0; end; //------------------------------------------------------------------------------ {$RANGECHECKS OFF} // negative array index is used procedure BlendMaskLine(bgColor, alphaMask: PColor32; width: nativeint); label SkipNone32; var a: byte; begin // Use the negative offset trick to only increment the array "width" // until it reaches zero. And by offsetting the arrays by "width", // the negative "width" values also becomes the index into these arrays. inc(bgColor, width); inc(alphaMask, width); width := -width; // Handle special cases Alpha=0 or 255 as those are the most // common values. while width < 0 do begin // MulTable[0, fgA] -> 0, if bgColor is already 0 => skip while PARGBArray(bgColor)[width].Color = 0 do begin SkipNone32: inc(width); if width = 0 then exit; end; a := PARGBArray(bgColor)[width].A; // MulTable[0, fgA] -> 0 => replace color with 0 while a = 0 do begin PColor32Array(bgColor)[width] := 0; inc(width); if width = 0 then exit; if PARGBArray(bgColor)[width].Color = 0 then goto SkipNone32; a := PARGBArray(bgColor)[width].A; end; // MulTable[255, fgA] -> fgA => replace alpha with fgA while a = 255 do begin PARGBArray(bgColor)[width].A := PARGBArray(alphaMask)[width].A; inc(width); if width = 0 then exit; a := PARGBArray(bgColor)[width].A; end; a := PARGBArray(alphaMask)[width].A; // MulTable[bgA, 0] -> 0 => replace color with 0 while a = 0 do begin PColor32Array(bgColor)[width] := 0; inc(width); if width = 0 then exit; a := PARGBArray(alphaMask)[width].A; end; // MulTable[bgA, 255] -> bgA => nothing to do while a = 255 do begin inc(width); if width = 0 then exit; a := PARGBArray(alphaMask)[width].A; end; a := MulTable[PARGBArray(bgColor)[width].A, a]; if a <> 0 then PARGBArray(bgColor)[width].A := a else PColor32Array(bgColor)[width] := 0; inc(width); end; end; //------------------------------------------------------------------------------ { // reference implementation procedure BlendMaskLine(bgColor, alphaMask: PColor32; width: nativeint); var a: byte; begin // Use the negative offset trick to only increment the array "width" // until it reaches zero. And by offsetting the arrays by "width", // the negative "width" values also becomes the index into these arrays. inc(bgColor, width); inc(alphaMask, width); width := -width; while width < 0 do begin a := MulTable[PARGBArray(bgColor)[width].A, PARGBArray(alphaMask)[width].A]; if a = 0 then PColor32Array(bgColor)[width] := 0 else PARGBArray(bgColor)[width].A := a; inc(width); end; end;} {$IFDEF RANGECHECKS_ENABLED} {$RANGECHECKS ON} {$ENDIF} //------------------------------------------------------------------------------ function BlendAltMask(bgColor, alphaMask: TColor32): TColor32; var a: byte; begin a := MulTable[bgColor shr 24, (alphaMask shr 24) xor 255]; if a <> 0 then Result := (TColor32(a) shl 24) or (bgColor and $00FFFFFF) else Result := 0; end; //------------------------------------------------------------------------------ function BlendDifference(color1, color2: TColor32): TColor32; var fgA, bgA: byte; begin fgA := color2 shr 24; bgA := color1 shr 24; if fgA = 0 then Result := color1 else if bgA = 0 then Result := color2 else begin Result := TColor32(MulTable[(fgA xor 255), (bgA xor 255)] xor 255) shl 24 or (TColor32(Abs(Byte(color2 shr 16) - Byte(color1 shr 16))) shl 16) or (TColor32(Abs(Byte(color2 shr 8) - Byte(color1 shr 8))) shl 8) or (TColor32(Abs(Byte(color2 ) - Byte(color1 ))) ); end; end; //------------------------------------------------------------------------------ function BlendSubtract(bgColor, fgColor: TColor32): TColor32; var fgA, bgA: byte; begin fgA := fgColor shr 24; bgA := bgColor shr 24; if fgA = 0 then Result := bgColor else if bgA = 0 then Result := fgColor else begin Result := TColor32(MulTable[(fgA xor 255), (bgA xor 255)] xor 255) shl 24 or (TColor32(ClampByte(Byte(fgColor shr 16) - Byte(bgColor shr 16))) shl 16) or (TColor32(ClampByte(Byte(fgColor shr 8 ) - Byte(bgColor shr 8))) shl 8) or (TColor32(ClampByte(Byte(fgColor ) - Byte(bgColor ))) ); end; end; //------------------------------------------------------------------------------ function BlendLighten(bgColor, fgColor: TColor32): TColor32; var fgA, bgA: byte; begin fgA := fgColor shr 24; bgA := bgColor shr 24; if fgA = 0 then Result := bgColor else if bgA = 0 then Result := fgColor else begin Result := TColor32(MulTable[(fgA xor 255), (bgA xor 255)] xor 255) shl 24 or (TColor32(Max(Byte(fgColor shr 16), Byte(bgColor shr 16))) shl 16) or (TColor32(Max(Byte(fgColor shr 8 ), Byte(bgColor shr 8))) shl 8) or (TColor32(Max(Byte(fgColor ), Byte(bgColor ))) ); end; end; //------------------------------------------------------------------------------ function BlendDarken(bgColor, fgColor: TColor32): TColor32; var fgA, bgA: byte; begin fgA := fgColor shr 24; bgA := bgColor shr 24; if fgA = 0 then Result := bgColor else if bgA = 0 then Result := fgColor else begin Result := TColor32(MulTable[(fgA xor 255), (bgA xor 255)] xor 255) shl 24 or (TColor32(Min(Byte(fgColor shr 16), Byte(bgColor shr 16))) shl 16) or (TColor32(Min(Byte(fgColor shr 8 ), Byte(bgColor shr 8))) shl 8) or (TColor32(Min(Byte(fgColor ), Byte(bgColor ))) ); end; end; //------------------------------------------------------------------------------ function BlendBlueChannel(bgColor, blueMask: TColor32): TColor32; begin Result := (bgColor and $00FFFFFF) or (TColor32(MulTable[bgColor shr 24, Byte(blueMask)]) shl 24); end; //------------------------------------------------------------------------------ function BlendInvertedMask(bgColor, alphaMask: TColor32): TColor32; var a: byte; begin a := MulTable[bgColor shr 24, (alphaMask shr 24) xor 255]; if a < 2 then Result := 0 else Result := (bgColor and $00FFFFFF) or (TColor32(a) shl 24); end; //------------------------------------------------------------------------------ {$RANGECHECKS OFF} // negative array index is used procedure BlendBlueChannelLine(bgColor, blueMask: PColor32; width: nativeint); begin inc(bgColor, width); inc(blueMask, width); width := -width; while width < 0 do begin PARGBArray(bgColor)[width].A := MulTable[PARGBArray(bgColor)[width].A, PARGBArray(blueMask)[width].B]; inc(width); end; end; //------------------------------------------------------------------------------ procedure BlendInvertedMaskLine(bgColor, alphaMask: PColor32; width: nativeint); var a: byte; begin // Use the negative offset trick to only increment the array "width" // until it reaches zero. And by offsetting the arrays by "width", // the negative "width" values also becomes the index into these arrays. inc(bgColor, width); inc(alphaMask, width); width := -width; while width < 0 do begin a := MulTable[PARGBArray(bgColor)[width].A, PARGBArray(alphaMask)[width].A xor 255]; if a < 2 then PColor32Array(bgColor)[width] := 0 else PARGBArray(bgColor)[width].A := a; inc(width); end; end; {$IFDEF RANGECHECKS_ENABLED} {$RANGECHECKS ON} {$ENDIF} //------------------------------------------------------------------------------ // Compare functions (see ConvertToBoolMask, FloodFill & Vectorize) //------------------------------------------------------------------------------ function CompareRGB(master, current: TColor32; tolerance: Integer): Boolean; var mast: TARGB absolute master; curr: TARGB absolute current; begin if curr.A < $80 then Result := false else if (master and $FFFFFF) = (current and $FFFFFF) then Result := true else if tolerance = 0 then Result := false else result := (Abs(curr.R - mast.R) <= tolerance) and (Abs(curr.G - mast.G) <= tolerance) and (Abs(curr.B - mast.B) <= tolerance); end; //------------------------------------------------------------------------------ function CompareAlpha(master, current: TColor32; tolerance: Integer): Boolean; var mast: TARGB absolute master; curr: TARGB absolute current; begin if mast.A = curr.A then Result := true else if tolerance = 0 then Result := false else result := Abs(curr.A - mast.A) <= tolerance; end; //------------------------------------------------------------------------------ function CompareHue(master, current: TColor32; tolerance: Integer): Boolean; var curr, mast: THsl; val: Integer; begin if TARGB(current).A < $80 then begin Result := false; Exit; end; curr := RgbToHsl(current); mast := RgbToHsl(master); if curr.hue > mast.hue then begin val := curr.hue - mast.hue; if val > 127 then val := mast.hue - curr.hue + 255; end else begin val := mast.hue - curr.hue; if val > 127 then val := curr.hue - mast.hue + 255; end; result := val <= tolerance; end; //------------------------------------------------------------------------------ // CompareEx functions (see ConvertToAlphaMask) //------------------------------------------------------------------------------ function CompareRgbEx(master, current: TColor32): Byte; var mast: TARGB absolute master; curr: TARGB absolute current; res: Cardinal; begin res := Sqr(mast.R - curr.R) + Sqr(mast.G - curr.G) + Sqr(mast.B - curr.B); if res >= 65025 then result := 255 else result := Round(Sqrt(res)); end; //------------------------------------------------------------------------------ function CompareAlphaEx(master, current: TColor32): Byte; var mast: TARGB absolute master; curr: TARGB absolute current; begin Result := abs(mast.A - curr.A); end; //------------------------------------------------------------------------------ // Miscellaneous functions ... //------------------------------------------------------------------------------ function IsAlphaChar(c: Char): Boolean; begin Result := ((c >= 'A') and (c <= 'Z')) or ((c >= 'a') and (c <= 'z')); end; //------------------------------------------------------------------------------ procedure RectWidthHeight(const rec: TRect; out width, height: Integer); begin width := rec.Right - rec.Left; height := rec.Bottom - rec.Top; end; //------------------------------------------------------------------------------ procedure RectWidthHeight(const rec: TRectD; out width, height: double); begin width := rec.Right - rec.Left; height := rec.Bottom - rec.Top; end; //------------------------------------------------------------------------------ function RectWidth(const rec: TRect): Integer; begin Result := rec.Right - rec.Left; end; //------------------------------------------------------------------------------ function RectHeight(const rec: TRect): Integer; begin Result := rec.Bottom - rec.Top; end; //------------------------------------------------------------------------------ function IsEmptyRect(const rec: TRect): Boolean; begin Result := (rec.Right <= rec.Left) or (rec.Bottom <= rec.Top); end; //------------------------------------------------------------------------------ function IsEmptyRect(const rec: TRectD): Boolean; begin Result := (rec.Right <= rec.Left) or (rec.Bottom <= rec.Top); end; //------------------------------------------------------------------------------ function InvertColor(color: TColor32): TColor32; begin Result := color xor $00FFFFFF; end; //------------------------------------------------------------------------------ function GetAlpha(color: TColor32): Byte; begin Result := Byte(color shr 24); end; //------------------------------------------------------------------------------ function RGBColor(color: TColor32): Cardinal; var c : TARGB absolute color; res: TARGB absolute Result; begin res.R := c.B; res.G := c.G; res.B := c.R; res.A := 0; end; //------------------------------------------------------------------------------ function Color32(a, r, g, b: Byte): TColor32; var res: TARGB absolute Result; begin res.A := a; res.R := r; res.G := g; res.B := b; end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} function Color32(rgbColor: Integer): TColor32; var res: TARGB absolute Result; begin if rgbColor < 0 then result := GetSysColor(rgbColor and $FFFFFF) else result := rgbColor; res.A := res.B; res.B := res.R; res.R := res.A; //byte swap res.A := 255; end; //------------------------------------------------------------------------------ procedure FixPalette(p: PARGB; count: integer); var i: integer; begin for i := 1 to count do begin p.Color := SwapRedBlue(p.Color); p.A := 255; inc(p); end; end; //------------------------------------------------------------------------------ function Get32bitBitmapInfoHeader(width, height: Integer): TBitmapInfoHeader; begin FillChar(Result, sizeof(Result), #0); Result.biSize := sizeof(TBitmapInfoHeader); Result.biWidth := width; Result.biHeight := height; Result.biPlanes := 1; Result.biBitCount := 32; Result.biSizeImage := width * Abs(height) * SizeOf(TColor32); Result.biCompression := BI_RGB; end; //------------------------------------------------------------------------------ {$ENDIF} function DPIAware(val: Integer): Integer; begin result := Round(val * DpiAwareOne); end; //------------------------------------------------------------------------------ function DPIAware(val: double): double; begin result := val * DpiAwareOne; end; //------------------------------------------------------------------------------ function DPIAware(const pt: TPoint): TPoint; begin result.X := Round(pt.X * DpiAwareOne); result.Y := Round(pt.Y * DpiAwareOne); end; //------------------------------------------------------------------------------ function DPIAware(const pt: TPointD): TPointD; begin result.X := pt.X * DpiAwareOne; result.Y := pt.Y * DpiAwareOne; end; //------------------------------------------------------------------------------ function DPIAware(const rec: TRect): TRect; begin result.Left := Round(rec.Left * DpiAwareOne); result.Top := Round(rec.Top * DpiAwareOne); result.Right := Round(rec.Right * DpiAwareOne); result.Bottom := Round(rec.Bottom * DpiAwareOne); end; //------------------------------------------------------------------------------ function DPIAware(const rec: TRectD): TRectD; begin result.Left := rec.Left * DpiAwareOne; result.Top := rec.Top * DpiAwareOne; result.Right := rec.Right * DpiAwareOne; result.Bottom := rec.Bottom * DpiAwareOne; end; //------------------------------------------------------------------------------ function GrayScale(color: TColor32): TColor32; var c: TARGB absolute color; r: TARGB absolute result; g: Byte; begin //https://www.w3.org/TR/AERT/#color-contrast g := ClampByte(0.299 * c.R + 0.587 * c.G + 0.114 * c.B); r.A := c.A; r.R := g; r.G := g; r.B := g; end; //------------------------------------------------------------------------------ function ClampRange(val, min, max: Integer): Integer; begin if val < min then result := min else if val > max then result := max else result := val; end; //------------------------------------------------------------------------------ function ClampRange(val, min, max: double): double; begin if val < min then result := min else if val > max then result := max else result := val; end; //------------------------------------------------------------------------------ procedure ScaleRect(var rec: TRect; x,y: double); begin rec.Right := rec.Left + Round((rec.Right - rec.Left) * x); rec.Bottom := rec.Top + Round((rec.Bottom - rec.Top) * y); end; //------------------------------------------------------------------------------ function IncPColor32(pc: Pointer; cnt: Integer): PColor32; begin result := PColor32(PByte(pc) + cnt * SizeOf(TColor32)); end; //------------------------------------------------------------------------------ function PointD(const X, Y: Double): TPointD; begin Result.X := X; Result.Y := Y; end; //------------------------------------------------------------------------------ function PointD(const pt: TPoint): TPointD; begin Result.X := pt.X; Result.Y := pt.Y; end; //------------------------------------------------------------------------------ function GetBoolMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunction; tolerance: Integer): TArrayOfByte; var i: integer; pa: PByte; pc: PColor32; begin result := nil; if not assigned(img) or img.IsEmpty then Exit; if not Assigned(compareFunc) then compareFunc := CompareRGB; NewByteArray(Result, img.Width * img.Height, True); pa := @Result[0]; pc := img.PixelBase; for i := 0 to img.Width * img.Height -1 do begin if compareFunc(reference, pc^, tolerance) then {$IFDEF PBYTE} pa^ := 1 else pa^ := 0; {$ELSE} pa^ := #1 else pa^ := #0; {$ENDIF} inc(pc); inc(pa); end; end; //------------------------------------------------------------------------------ function GetColorMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunction; tolerance: Integer): TArrayOfColor32; var i: integer; pDstPxl: PColor32; pSrcPxl: PColor32; begin result := nil; if not assigned(img) or img.IsEmpty then Exit; if not Assigned(compareFunc) then compareFunc := CompareRGB; NewColor32Array(Result, img.Width * img.Height, True); pDstPxl := @Result[0]; pSrcPxl := img.PixelBase; for i := 0 to img.Width * img.Height -1 do begin if compareFunc(reference, pSrcPxl^, tolerance) then pDstPxl^ := clWhite32 else pDstPxl^ := clBlack32; inc(pSrcPxl); inc(pDstPxl); end; end; //------------------------------------------------------------------------------ function GetAlphaEx(master, current: TColor32): Byte; {$IFDEF INLINE} inline; {$ENDIF} var curr: TARGB absolute current; begin result := curr.A; //nb: 'master' is ignored end; //------------------------------------------------------------------------------ function GetByteMask(img: TImage32; reference: TColor32; compareFunc: TCompareFunctionEx): TArrayOfByte; var i: integer; pa: PByte; pc: PColor32; begin result := nil; if not assigned(img) or img.IsEmpty then Exit; if not Assigned(compareFunc) then compareFunc := GetAlphaEx; NewByteArray(Result, img.Width * img.Height, True); pa := @Result[0]; pc := img.PixelBase; for i := 0 to img.Width * img.Height -1 do begin {$IFDEF PBYTE} pa^ := compareFunc(reference, pc^); {$ELSE} pa^ := Char(compareFunc(reference, pc^)); {$ENDIF} inc(pc); inc(pa); end; end; //------------------------------------------------------------------------------ function RgbToHsl(color: TColor32): THsl; var rgba: TARGB absolute color; hsl: THsl absolute result; r,g,b: byte; maxRGB, minRGB, mAdd, mSub: Integer; begin //https://en.wikipedia.org/wiki/HSL_and_HSV and //http://en.wikipedia.org/wiki/HSL_color_space {$IF DEFINED(ANDROID)} color := SwapRedBlue(color); {$IFEND} r := rgba.R; g := rgba.G; b := rgba.B; maxRGB := Max(r, Max(g, b)); minRGB := Min(r, Min(g, b)); mAdd := maxRGB + minRGB; hsl.lum := mAdd shr 1; hsl.alpha := rgba.A; if maxRGB = minRGB then begin hsl.hue := 0; //hsl.hue is undefined when gray hsl.sat := 0; Exit; end; mSub := maxRGB - minRGB; if mAdd <= 255 then hsl.sat := DivTable[mSub, mAdd] else hsl.sat := DivTable[mSub, 511 - mAdd]; mSub := mSub * 6; if r = maxRGB then begin if g >= b then hsl.hue := (g - b) * 255 div mSub else hsl.hue := 255 - ((b - g) * 255 div mSub); end else if G = maxRGB then begin if b > r then hsl.hue := 85 + (b - r) * 255 div mSub else hsl.hue := 85 - (r - b) * 255 div mSub; end else begin if r > g then hsl.hue := 170 + (r - g) * 255 div mSub else hsl.hue := 170 - (g - r) * 255 div mSub; end; end; //------------------------------------------------------------------------------ function HslToRgb(hslColor: THsl): TColor32; var rgba: TARGB absolute result; hsl: THsl absolute hslColor; c, x, m, a: Integer; begin //formula from https://www.rapidtables.com/convert/color/hsl-to-rgb.html c := ((255 - abs(2 * hsl.lum - 255)) * hsl.sat) shr 8; a := 252 - (hsl.hue mod 85) * 6; x := (c * (255 - abs(a))) shr 8; m := hsl.lum - c shr 1{div 2}; // Delphi's 64bit compiler can't optimize this rgba.A := hsl.alpha; case (hsl.hue * 6) shr 8 of 0: begin rgba.R := c + m; rgba.G := x + m; rgba.B := 0 + m; end; 1: begin rgba.R := x + m; rgba.G := c + m; rgba.B := 0 + m; end; 2: begin rgba.R := 0 + m; rgba.G := c + m; rgba.B := x + m; end; 3: begin rgba.R := 0 + m; rgba.G := x + m; rgba.B := c + m; end; 4: begin rgba.R := x + m; rgba.G := 0 + m; rgba.B := c + m; end; 5: begin rgba.R := c + m; rgba.G := 0 + m; rgba.B := x + m; end; end; {$IF DEFINED(ANDROID)} Result := SwapRedBlue(Result); {$IFEND} end; //------------------------------------------------------------------------------ function AdjustHue(color: TColor32; percent: Integer): TColor32; var hsl: THsl; begin percent := percent mod 100; if percent < 0 then inc(percent, 100); hsl := RgbToHsl(color); hsl.hue := (hsl.hue + Round(percent*255/100)) mod 256; result := HslToRgb(hsl); end; //------------------------------------------------------------------------------ function ArrayOfColor32ToArrayHSL(const clr32Arr: TArrayOfColor32): TArrayofHSL; var i, len: Integer; begin len := length(clr32Arr); setLength(result, len); for i := 0 to len -1 do result[i] := RgbToHsl(clr32Arr[i]); end; //------------------------------------------------------------------------------ function ArrayOfHSLToArrayColor32(const hslArr: TArrayofHSL): TArrayOfColor32; var i, len: Integer; begin len := length(hslArr); NewColor32Array(result, len, True); for i := 0 to len -1 do result[i] := HslToRgb(hslArr[i]); end; //------------------------------------------------------------------------------ function NameToId(Name: PChar): Longint; begin if Name < Pointer(30) then begin Result := Longint(Name) end else begin if Name^ = '#' then inc(Name); Result := StrToIntDef(Name, 0); if Result > 65535 then Result := 0; end; end; //------------------------------------------------------------------------------ function CreateResourceStream(const resName: string; resType: PChar): TResourceStream; var nameId, typeId: Cardinal; begin Result := nil; typeId := NameToId(resType); if (typeId > 0) then resType := PChar(typeId) else if (resType = 'BMP') then resType := RT_BITMAP; nameId := NameToId(PChar(resName)); if nameId > 0 then begin if FindResource(hInstance, PChar(nameId), resType) <> 0 then Result := TResourceStream.CreateFromID(hInstance, nameId, resType); end else begin if FindResource(hInstance, PChar(resName), resType) <> 0 then Result := TResourceStream.Create(hInstance, PChar(resName), resType); end; end; //------------------------------------------------------------------------------ // TRectD methods (and helpers) //------------------------------------------------------------------------------ function TRectD.IsEmpty: Boolean; begin result := (right <= left) or (bottom <= top); end; //------------------------------------------------------------------------------ function TRectD.Width: double; begin result := Max(0, right - left); end; //------------------------------------------------------------------------------ function TRectD.Height: double; begin result := Max(0, bottom - top); end; //------------------------------------------------------------------------------ function TRectD.MidPoint: TPointD; begin Result.X := (Right + Left)/2; Result.Y := (Bottom + Top)/2; end; //------------------------------------------------------------------------------ {$IFNDEF RECORD_METHODS} function TRectD.TopLeft: TPointD; begin Result.X := Left; Result.Y := Top; end; //------------------------------------------------------------------------------ function TRectD.BottomRight: TPointD; begin Result.X := Right; Result.Y := Bottom; end; //------------------------------------------------------------------------------ {$ENDIF} function TRectD.Normalize: Boolean; var d: double; begin Result := false; if Left > Right then begin d := Left; Left := Right; Right := d; Result := True; end; if Top > Bottom then begin d := Top; Top := Bottom; Bottom := d; Result := True; end; end; //------------------------------------------------------------------------------ function TRectD.Contains(const Pt: TPoint): Boolean; begin Result := (pt.X >= Left) and (pt.X < Right) and (pt.Y >= Top) and (pt.Y < Bottom); end; //------------------------------------------------------------------------------ function TRectD.Contains(const Pt: TPointD): Boolean; begin Result := (pt.X >= Left) and (pt.X < Right) and (pt.Y >= Top) and (pt.Y < Bottom); end; //------------------------------------------------------------------------------ function RectD(left, top, right, bottom: double): TRectD; begin result.Left := left; result.Top := top; result.Right := right; result.Bottom := bottom; end; //------------------------------------------------------------------------------ function RectD(const rec: TRect): TRectD; begin with rec do begin result.Left := left; result.Top := top; result.Right := right; result.Bottom := bottom; end; end; //------------------------------------------------------------------------------ // TImage32 methods //------------------------------------------------------------------------------ constructor TImage32.Create(width: Integer; height: Integer); begin fAntiAliased := true; fResampler := DefaultResampler; fwidth := Max(0, width); fheight := Max(0, height); NewColor32Array(fPixels, fwidth * fheight); end; //------------------------------------------------------------------------------ constructor TImage32.Create(const src: TArrayOfColor32; width: Integer; height: Integer); begin fAntiAliased := true; fResampler := DefaultResampler; width := Max(0, width); height := Max(0, height); if Length(src) <> width * height then raise Exception.Create(rsInvalidImageArrayData); fWidth := width; fHeight := height; fPixels := src; end; //------------------------------------------------------------------------------ constructor TImage32.Create(src: TImage32); begin Assign(src); end; //------------------------------------------------------------------------------ constructor TImage32.Create(src: TImage32; const srcRec: TRect); var rec: TRect; begin fAntiAliased := src.AntiAliased; fResampler := src.fResampler; types.IntersectRect(rec, src.Bounds, srcRec); RectWidthHeight(rec, fWidth, fHeight); if (fWidth = 0) or (fheight = 0) then Exit; fPixels := src.CopyPixels(rec); end; //------------------------------------------------------------------------------ destructor TImage32.Destroy; begin fPixels := nil; inherited; end; //------------------------------------------------------------------------------ class function TImage32.IsRegisteredFormat(const ext: string): Boolean; begin result := Assigned(TImage32.GetImageFormatClass(ext)); end; //------------------------------------------------------------------------------ class procedure TImage32.RegisterImageFormatClass(ext: string; bm32ExClass: TImageFormatClass; clipPriority: TClipboardPriority); var i: Integer; imgFmtRec: PImgFmtRec; isNewFormat: Boolean; begin if not Assigned(ImageFormatClassList) then CreateImageFormatList; if (ext = '') or (ext = '.') then Exit; if (ext[1] = '.') then Delete(ext, 1,1); if not IsAlphaChar(ext[1]) then Exit; isNewFormat := true; // avoid duplicates but still allow overriding for i := 0 to imageFormatClassList.count -1 do begin imgFmtRec := PImgFmtRec(imageFormatClassList[i]); if SameText(imgFmtRec.Fmt, ext) then begin imgFmtRec.Obj := bm32ExClass; // replace prior class if imgFmtRec.SortOrder = clipPriority then Exit; // re-sorting isn't required imgFmtRec.SortOrder := clipPriority; isNewFormat := false; Break; end; end; if isNewFormat then begin new(imgFmtRec); imgFmtRec.Fmt := ext; imgFmtRec.SortOrder := clipPriority; imgFmtRec.Obj := bm32ExClass; ImageFormatClassList.Add(imgFmtRec); end; // Sort with lower priority before higher. // Sorting here is arguably inefficient but, with so few // entries, this inefficiency will be inconsequential. {$IFDEF XPLAT_GENERICS} ImageFormatClassList.Sort(TComparer.Construct( function(const imgFmtRec1, imgFmtRec2: PImgFmtRec): Integer begin Result := Integer(imgFmtRec1.SortOrder) - Integer(imgFmtRec2.SortOrder); end)); {$ELSE} ImageFormatClassList.Sort(ImageFormatClassListSort); {$ENDIF} end; //------------------------------------------------------------------------------ class function TImage32.GetImageFormatClass(const ext: string): TImageFormatClass; var i: Integer; pattern: string; imgFmtRec: PImgFmtRec; begin Result := nil; pattern := ext; if (pattern = '') or (pattern = '.') then Exit; if pattern[1] = '.' then Delete(pattern, 1,1); //try for highest priority first for i := imageFormatClassList.count -1 downto 0 do begin imgFmtRec := PImgFmtRec(imageFormatClassList[i]); if not SameText(imgFmtRec.Fmt, pattern) then Continue; Result := imgFmtRec.Obj; break; end; end; //------------------------------------------------------------------------------ class function TImage32.GetImageFormatClass(stream: TStream): TImageFormatClass; var i: integer; begin Result := nil; for i := 0 to imageFormatClassList.count -1 do with PImgFmtRec(imageFormatClassList[i])^ do if Obj.IsValidImageStream(stream) then begin Result := Obj; break; end; end; //------------------------------------------------------------------------------ procedure TImage32.Assign(src: TImage32); begin if assigned(src) then src.AssignTo(self); end; //------------------------------------------------------------------------------ procedure TImage32.AssignTo(dst: TImage32); begin if dst = self then Exit; dst.BeginUpdate; try dst.AssignSettings(Self); try dst.fPixels := System.Copy(fPixels, 0, Length(fPixels)); dst.fWidth := fWidth; dst.fHeight := fHeight; dst.Resized; except dst.SetSize(0,0); end; finally dst.EndUpdate; end; dst.fColorCount := fColorCount; // dst.EndUpdate called ResetColorCount end; //------------------------------------------------------------------------------ procedure TImage32.AssignSettings(src: TImage32); begin if assigned(src) and (src <> Self) then begin BeginUpdate; try fResampler := src.fResampler; fIsPremultiplied := src.fIsPremultiplied; fAntiAliased := src.fAntiAliased; ResetColorCount; finally EndUpdate; end; end; end; //------------------------------------------------------------------------------ procedure TImage32.AssignPixelArray(const src: TArrayOfColor32; width: Integer; height: Integer); var wasResized: Boolean; begin width := Max(0, width); height := Max(0, height); if Length(src) <> width * height then raise Exception.Create(rsInvalidImageArrayData); wasResized := (fWidth <> width) or (fHeight <> height); BeginUpdate; try fWidth := width; fHeight := height; fPixels := src; finally EndUpdate; end; if wasResized then Resized; end; //------------------------------------------------------------------------------ procedure TImage32.Changed; begin if fUpdateCnt <> 0 then Exit; ResetColorCount; if Assigned(fOnChange) then fOnChange(Self); end; //------------------------------------------------------------------------------ procedure TImage32.Resized; begin if fUpdateCnt <> 0 then Exit else if Assigned(fOnResize) then fOnResize(Self) else Changed; end; //------------------------------------------------------------------------------ function TImage32.SetPixels(const newPixels: TArrayOfColor32): Boolean; var len: integer; begin len := Length(newPixels); Result := (len > 0)and (len = Width * height); if Result then fPixels := System.Copy(newPixels, 0, len); end; //------------------------------------------------------------------------------ procedure TImage32.BeginUpdate; begin if fNotifyBlockCnt > 0 then Exit; inc(fUpdateCnt); end; //------------------------------------------------------------------------------ procedure TImage32.EndUpdate; begin if fNotifyBlockCnt > 0 then Exit; dec(fUpdateCnt); if fUpdateCnt = 0 then Changed; end; //------------------------------------------------------------------------------ procedure TImage32.BlockNotify; begin inc(fNotifyBlockCnt); inc(fUpdateCnt); end; //------------------------------------------------------------------------------ procedure TImage32.UnblockNotify; begin dec(fNotifyBlockCnt); dec(fUpdateCnt); end; //------------------------------------------------------------------------------ procedure TImage32.SetBackgroundColor(bgColor: TColor32); var i: Integer; pc: PColor32; begin pc := Pixelbase; for i := 0 to high(fPixels) do begin pc^ := BlendToOpaque(bgColor, pc^); inc(pc); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.Clear(color: TColor32); var i: Integer; pc: PColor32; begin fIsPremultiplied := false; if IsEmpty then Exit; if color = clNone32 then FillChar(fPixels[0], Width * Height * SizeOf(TColor32), 0) else begin pc := PixelBase; for i := 0 to Width * Height -1 do begin pc^ := color; inc(pc); end; end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.Clear(const rec: TRect; color: TColor32 = 0); begin FillRect(rec, color); end; //------------------------------------------------------------------------------ procedure TImage32.FillRect(const rec: TRect; color: TColor32); var i,j, rw, w: Integer; c: PColor32; r: TRect; begin Types.IntersectRect(r, rec, bounds); if IsEmptyRect(r) then Exit; rw := RectWidth(r); w := Width; c := @Pixels[r.Top * w + r.Left]; if (color = 0) and (w = rw) then FillChar(c^, (r.Bottom - r.Top) * rw * SizeOf(TColor32), 0) else if rw = 1 then begin for i := r.Top to r.Bottom -1 do begin c^ := color; inc(c, w); end; end else if (color = 0) and (rw > 15) then begin for i := r.Top to r.Bottom -1 do begin FillChar(c^, rw * SizeOf(TColor32), 0); inc(c, w); end; end else begin for i := r.Top to r.Bottom -1 do begin for j := 1 to rw do begin c^ := color; inc(c); end; inc(c, w - rw); end; end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.ResetColorCount; begin fColorCount := 0; end; //------------------------------------------------------------------------------ {$RANGECHECKS OFF} // negative array index is used function TImage32.RectHasTransparency(const rec: TRect): Boolean; var i, j, rw: Integer; lineByteOffset: nativeint; c: PARGB; r: TRect; begin Result := True; Types.IntersectRect(r, rec, bounds); if IsEmptyRect(r) then Exit; rw := RectWidth(r); c := @Pixels[r.Top * Width + r.Left]; if rw = Width then // we can use one loop begin i := (r.Bottom - r.Top) * rw; inc(c, i); i := -i; while i < 0 do begin if PARGBArray(c)[i].A < 254 then Exit; inc(i); end; end else begin lineByteOffset := (Width - rw) * SizeOf(TColor32); for i := r.Top to r.Bottom -1 do begin for j := 1 to rw do begin if c.A < 254 then Exit; inc(c); end; inc(PByte(c), lineByteOffset); end; end; Result := False; end; {$IFDEF RANGECHECKS_ENABLED} {$RANGECHECKS ON} {$ENDIF} //------------------------------------------------------------------------------ procedure CheckBlendFill(pc: PColor32; color: TColor32); {$IFDEF INLINE} inline; {$ENDIF} begin if not assigned(pc) then Exit; pc^ := BlendToAlpha(pc^, color); end; //------------------------------------------------------------------------------ function TImage32.CopyPixels(const rec: TRect): TArrayOfColor32; var i, clipW, w,h: Integer; pSrc, pDst, pDst2: PColor32; recClipped: TRect; begin RectWidthHeight(rec, w,h); NewColor32Array(result, w * h, True); if w * h = 0 then Exit; Types.IntersectRect(recClipped, rec, Bounds); //if recClipped is wholely outside the bounds of the image ... if IsEmptyRect(recClipped) then begin //rec is considered valid even when completely outside the image bounds, //and so when that happens we simply return a fully transparent image ... FillChar(Result[0], w * h * SizeOf(TColor32), 0); Exit; end; //if recClipped is wholely within the bounds of the image ... if RectsEqual(recClipped, rec) then begin pDst := @Result[0]; pSrc := @fPixels[recClipped.Top * Width + rec.Left]; for i := recClipped.Top to recClipped.Bottom -1 do begin Move(pSrc^, pDst^, w * SizeOf(TColor32)); inc(pSrc, Width); inc(pDst, w); end; Exit; end; //a part of 'rec' must be outside the bounds of the image ... pDst := @Result[0]; for i := rec.Top to -1 do begin FillChar(pDst^, w * SizeOf(TColor32), 0); inc(pDst, w); end; pSrc := @fPixels[recClipped.Top * Width + Max(0,rec.Left)]; if (rec.Left < 0) or (rec.Right > Width) then begin clipW := RectWidth(recClipped); pDst2 := IncPColor32(pDst, -Min(0, rec.Left)); for i := recClipped.Top to recClipped.Bottom -1 do begin //when rec.left < 0 or rec.right > width it's simplest to //start with a prefilled row of transparent pixels FillChar(pDst^, w * SizeOf(TColor32), 0); Move(pSrc^, pDst2^, clipW * SizeOf(TColor32)); inc(pDst, w); inc(pDst2, w); inc(pSrc, Width); end; end else begin //things are simpler when there's no part of 'rec' is //outside the image, at least not on the left or right sides ... for i := recClipped.Top to recClipped.Bottom -1 do begin Move(pSrc^, pDst^, w * SizeOf(TColor32)); inc(pSrc, Width); inc(pDst, w); end; end; for i := Height to rec.Bottom -1 do begin FillChar(pDst^, w * SizeOf(TColor32), 0); inc(pDst, w); end; end; //------------------------------------------------------------------------------ procedure TImage32.Crop(const rec: TRect); var newPixels: TArrayOfColor32; w,h: integer; begin RectWidthHeight(rec, w, h); if (w = Width) and (h = Height) then Exit; newPixels := CopyPixels(rec); // get pixels **before** resizing BlockNotify; try SetSize(w, h); if not IsEmptyRect(rec) then fPixels := newPixels; finally UnblockNotify; end; Resized; end; //------------------------------------------------------------------------------ function TImage32.GetBounds: TRect; begin result := Types.Rect(0, 0, Width, Height); end; //------------------------------------------------------------------------------ function TImage32.GetMidPoint: TPointD; begin Result := PointD(fWidth * 0.5, fHeight * 0.5); end; //------------------------------------------------------------------------------ procedure TImage32.SetSize(newWidth, newHeight: Integer; color: TColor32); begin //very large images are usually due to a bug if (newWidth > 20000) or (newHeight > 20000) then raise Exception.Create(rsImageTooLarge); fwidth := Max(0, newWidth); fheight := Max(0, newHeight); fPixels := nil; //forces a blank image NewColor32Array(fPixels, fwidth * fheight, True); fIsPremultiplied := false; BlockNotify; Clear(color); UnblockNotify; Resized; end; //------------------------------------------------------------------------------ procedure TImage32.Resize(newWidth, newHeight: Integer); begin ResizeTo(Self, newWidth, newHeight); end; //------------------------------------------------------------------------------ procedure TImage32.ResizeTo(targetImg: TImage32; newWidth, newHeight: Integer); begin if (newWidth <= 0) or (newHeight <= 0) then begin targetImg.SetSize(0, 0); Exit; end else if (newWidth = fwidth) and (newHeight = fheight) then begin if targetImg <> Self then targetImg.Assign(Self); Exit end else if IsEmpty then begin targetImg.SetSize(newWidth, newHeight); Exit; end; targetImg.BlockNotify; try if targetImg.fResampler <= rNearestResampler then NearestNeighborResize(Self, targetImg, newWidth, newHeight) else ResamplerResize(Self, targetImg, newWidth, newHeight); finally targetImg.UnblockNotify; end; targetImg.Resized; end; //------------------------------------------------------------------------------ procedure TImage32.Scale(s: double); begin Scale(s, s); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleTo(targetImg: TImage32; s: double); begin ScaleTo(targetImg, s, s); end; //------------------------------------------------------------------------------ procedure TImage32.Scale(sx, sy: double); begin if (sx > 0) and (sy > 0) then Resize(Round(width * sx), Round(height * sy)); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleTo(targetImg: TImage32; sx, sy: double); begin if (sx > 0) and (sy > 0) then ResizeTo(targetImg, Round(width * sx), Round(height * sy)); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleToFit(width, height: integer); var sx, sy: double; begin if IsEmpty or (width < 2) or (height < 2) then Exit; sx := width / self.Width; sy := height / self.Height; if sx <= sy then Scale(sx) else Scale(sy); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleToFitCentered(const rect: TRect); begin ScaleToFitCentered(RectWidth(rect), RectHeight(rect)); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleToFitCentered(width, height: integer); var sx, sy: double; tmp: TImage32; rec2: TRect; begin if IsEmpty or (width <= 0) or (height <= 0) or ((width = self.Width) and (height = self.Height)) then Exit; sx := width / self.Width; sy := height / self.Height; BlockNotify; try if sx <= sy then begin Scale(sx); if height = self.Height then Exit; rec2 := Bounds; TranslateRect(rec2, 0, (height - self.Height) div 2); tmp := TImage32.Create(self); try SetSize(width, height); CopyInternal(tmp, tmp.Bounds, rec2, nil); finally tmp.Free; end; end else begin Scale(sy); if width = self.Width then Exit; rec2 := Bounds; TranslateRect(rec2, (width - self.Width) div 2, 0); tmp := TImage32.Create(self); try SetSize(width, height); CopyInternal(tmp, tmp.Bounds, rec2, nil); finally tmp.Free; end; end; finally UnblockNotify; end; Resized; end; //------------------------------------------------------------------------------ procedure TImage32.RotateLeft90; var x,y, xx: Integer; src, dst: PColor32; tmp: TImage32; begin if IsEmpty then Exit; BeginUpdate; tmp := TImage32.create(Self); try SetSize(Height, Width); xx := (width - 1) * Height; dst := PixelBase; for y := 0 to Height -1 do begin src := @tmp.Pixels[xx + y]; for x := 0 to Width -1 do begin dst^ := src^; inc(dst); dec(src, Height); end; end; finally tmp.Free; EndUpdate; end; end; //------------------------------------------------------------------------------ procedure TImage32.RotateRight90; var x,y: Integer; src, dst: PColor32; tmp: TImage32; begin if IsEmpty then Exit; BeginUpdate; tmp := TImage32.create(Self); try SetSize(Height, Width); dst := PixelBase; for y := 0 to Height -1 do begin src := @tmp.Pixels[Height -1 - y]; for x := 0 to Width -1 do begin dst^ := src^; inc(dst); inc(src, Height); end; end; finally tmp.Free; EndUpdate; end; end; //------------------------------------------------------------------------------ procedure TImage32.Rotate180; var x,y: Integer; src, dst: PColor32; tmp: TImage32; begin if IsEmpty then Exit; tmp := TImage32.create(Self); try dst := PixelBase; src := @tmp.Pixels[Width * Height -1]; for y := 0 to Height -1 do begin for x := 0 to Width -1 do begin dst^ := src^; inc(dst); dec(src); end; end; finally tmp.Free; end; Changed; end; //------------------------------------------------------------------------------ function TImage32.GetColorCount: Integer; var allColors: PByteArray; i: Integer; c: PColor32; const cube256 = 256 * 256 * 256; begin result := 0; if IsEmpty then Exit; if fColorCount > 0 then begin result := fColorCount; Exit; end; //because 'allColors' uses quite a chunk of memory, it's //allocated on the heap rather than the stack allColors := AllocMem(cube256); //nb: zero initialized try c := PixelBase; for i := 0 to Width * Height -1 do begin //ignore colors with signifcant transparency if GetAlpha(c^) > $80 then allColors[c^ and $FFFFFF] := 1; inc(c); end; for i := 0 to cube256 -1 do if allColors[i] = 1 then inc(Result); finally FreeMem(allColors); end; fColorCount := Result; //avoids repeating the above unnecessarily end; //------------------------------------------------------------------------------ function TImage32.GetHasTransparency: Boolean; var i: Integer; pc: PARGB; begin result := true; If IsEmpty then Exit; pc := PARGB(PixelBase); for i := 0 to Width * Height -1 do begin if pc.A < 128 then Exit; inc(pc); end; result := false; end; //------------------------------------------------------------------------------ function TImage32.SaveToFile(filename: string; compressionQuality: integer): Boolean; var fileFormatClass: TImageFormatClass; begin result := false; if IsEmpty or (length(filename) < 5) then Exit; //use the process's current working directory if no path supplied ... if ExtractFilePath(filename) = '' then filename := GetCurrentDir + '\'+ filename; fileFormatClass := GetImageFormatClass(ExtractFileExt(filename)); if assigned(fileFormatClass) then with fileFormatClass.Create do try result := SaveToFile(filename, self, compressionQuality); finally free; end; end; //------------------------------------------------------------------------------ function TImage32.SaveToStream(stream: TStream; const FmtExt: string; compressionQuality: integer): Boolean; var fileFormatClass: TImageFormatClass; begin result := false; fileFormatClass := GetImageFormatClass(FmtExt); if assigned(fileFormatClass) then with fileFormatClass.Create do try SaveToStream(stream, self, compressionQuality); result := true; finally free; end; end; //------------------------------------------------------------------------------ function TImage32.LoadFromFile(const filename: string): Boolean; var stream: TFileStream; begin Result := false; if not FileExists(filename) then Exit; stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); try result := LoadFromStream(stream); finally stream.Free; end; end; //------------------------------------------------------------------------------ function TImage32.LoadFromStream(stream: TStream; imgIdx: integer): Boolean; var ifc: TImageFormatClass; begin ifc := GetImageFormatClass(stream); Result := Assigned(ifc); if not Result then Exit; with ifc.Create do try result := LoadFromStream(stream, self, imgIdx); finally free; end; end; //------------------------------------------------------------------------------ function TImage32.GetPixel(x, y: Integer): TColor32; begin if (x < 0) or (x >= Width) or (y < 0) or (y >= Height) then result := clNone32 else result := fPixels[y * width + x]; end; //------------------------------------------------------------------------------ procedure TImage32.SetPixel(x,y: Integer; color: TColor32); begin if (x < 0) or (x >= Width) or (y < 0) or (y >= Height) then Exit; fPixels[y * width + x] := color; //nb: no notify event here end; //------------------------------------------------------------------------------ function TImage32.GetIsBlank: Boolean; var i: integer; pc: PARGB; begin result := IsEmpty; if result then Exit; pc := PARGB(PixelBase); for i := 0 to width * height -1 do begin if pc.A > 0 then Exit; inc(pc); end; result := true; end; //------------------------------------------------------------------------------ function TImage32.GetIsEmpty: Boolean; begin result := fPixels = nil; end; //------------------------------------------------------------------------------ function TImage32.GetPixelBase: PColor32; begin if IsEmpty then result := nil else result := @fPixels[0]; end; //------------------------------------------------------------------------------ function TImage32.GetPixelRow(row: Integer): PColor32; begin if IsEmpty then result := nil else result := @fPixels[row * Width]; end; //------------------------------------------------------------------------------ procedure TImage32.CopyInternal(src: TImage32; const srcRec, dstRec: TRect; blendFunc: TBlendFunction); var i, j: integer; srcRecWidth, srcRecHeight: nativeint; srcWidth, dstWidth: nativeint; s, d: PColor32; begin // occasionally, due to rounding, srcRec and dstRec // don't have exactly the same widths and heights, so ... srcRecWidth := Min(srcRec.Right - srcRec.Left, dstRec.Right - dstRec.Left); srcRecHeight := Min(srcRec.Bottom - srcRec.Top, dstRec.Bottom - dstRec.Top); srcWidth := src.Width; dstWidth := Width; s := @src.Pixels[srcRec.Top * srcWidth + srcRec.Left]; d := @Pixels[dstRec.top * dstWidth + dstRec.Left]; if assigned(blendFunc) then begin srcWidth := (srcWidth - srcRecWidth) * SizeOf(TColor32); dstWidth := (dstWidth - srcRecWidth) * SizeOf(TColor32); for i := 1 to srcRecHeight do begin for j := 1 to srcRecWidth do begin d^ := blendFunc(d^, s^); inc(s); inc(d); end; inc(PByte(s), srcWidth); // byte offset to the next s line inc(PByte(d), dstWidth); // byte offset to the next d line end; end //simply overwrite src with dst (ie without blending) else if (srcRecWidth = dstWidth) and (srcWidth = dstWidth) then move(s^, d^, srcRecWidth * srcRecHeight * SizeOf(TColor32)) else begin srcWidth := srcWidth * SizeOf(TColor32); dstWidth := dstWidth * SizeOf(TColor32); srcRecWidth := srcRecWidth * SizeOf(TColor32); for i := 1 to srcRecHeight do begin move(s^, d^, srcRecWidth); inc(PByte(s), srcWidth); // srcWidth is in bytes inc(PByte(d), dstWidth); // dstWidth is in bytes end; end; end; //------------------------------------------------------------------------------ procedure TImage32.CopyInternalLine(src: TImage32; const srcRec, dstRec: TRect; blendLineFunc: TBlendLineFunction); var i: integer; srcRecWidth, srcRecHeight: nativeint; srcWidth, dstWidth: nativeint; s, d: PColor32; begin if not Assigned(blendLineFunc) then begin CopyInternal(src, srcRec, dstRec, nil); Exit; end; // occasionally, due to rounding, srcRec and dstRec // don't have exactly the same widths and heights, so ... srcRecWidth := Min(srcRec.Right - srcRec.Left, dstRec.Right - dstRec.Left); srcRecHeight := Min(srcRec.Bottom - srcRec.Top, dstRec.Bottom - dstRec.Top); srcWidth := src.Width; dstWidth := Width; s := @src.Pixels[srcRec.Top * srcWidth + srcRec.Left]; d := @Pixels[dstRec.top * dstWidth + dstRec.Left]; if (srcRecWidth = dstWidth) and (srcWidth = dstWidth) then blendLineFunc(d, s, srcRecWidth * srcRecHeight) else begin srcWidth := srcWidth * SizeOf(TColor32); dstWidth := dstWidth * SizeOf(TColor32); for i := 1 to srcRecHeight do begin blendLineFunc(d, s, srcRecWidth); inc(PByte(s), srcWidth); // srcWidth is in bytes inc(PByte(d), dstWidth); // dstWidth is in bytes end; end; end; //------------------------------------------------------------------------------ function TImage32.Copy(src: TImage32; srcRec, dstRec: TRect): Boolean; begin Result := CopyBlendInternal(src, srcRec, dstRec, nil, nil); end; //------------------------------------------------------------------------------ function TImage32.CopyBlend(src: TImage32; const srcRec, dstRec: TRect; blendFunc: TBlendFunction): Boolean; begin Result := CopyBlendInternal(src, srcRec, dstRec, blendFunc, nil); end; //------------------------------------------------------------------------------ function TImage32.CopyBlend(src: TImage32; const srcRec, dstRec: TRect; blendLineFunc: TBlendLineFunction): Boolean; begin Result := CopyBlendInternal(src, srcRec, dstRec, nil, blendLineFunc); end; //------------------------------------------------------------------------------ function TImage32.CopyBlendInternal(src: TImage32; const srcRec: TRect; dstRec: TRect; blendFunc: TBlendFunction; blendLineFunc: TBlendLineFunction): Boolean; var tmp: TImage32; srcRecClipped, dstRecClipped, r: TRect; scaleX, scaleY: double; w,h, dstW,dstH, srcW,srcH: integer; begin result := false; if IsEmptyRect(srcRec) or IsEmptyRect(dstRec) then Exit; Types.IntersectRect(srcRecClipped, srcRec, src.Bounds); //get the scaling amount (if any) before //dstRec might be adjusted due to clipping ... RectWidthHeight(dstRec, dstW, dstH); RectWidthHeight(srcRec, srcW, srcH); //watching out for insignificant scaling if Abs(dstW - srcW) < 2 then scaleX := 1 else scaleX := dstW / srcW; if Abs(dstH - srcH) < 2 then scaleY := 1 else scaleY := dstH / srcH; //check if the source rec has been clipped ... if not RectsEqual(srcRecClipped, srcRec) then begin if IsEmptyRect(srcRecClipped) then Exit; //the source has been clipped so clip the destination too ... RectWidthHeight(srcRecClipped, w, h); RectWidthHeight(srcRec, srcW, srcH); ScaleRect(dstRec, w / srcW, h / srcH); TranslateRect(dstRec, srcRecClipped.Left - srcRec.Left, srcRecClipped.Top - srcRec.Top); end; if (scaleX <> 1.0) or (scaleY <> 1.0) then begin //scale source (tmp) to the destination then call CopyBlend() again ...^ tmp := TImage32.Create; try tmp.AssignSettings(src); src.ScaleTo(tmp, scaleX, scaleY); ScaleRect(srcRecClipped, scaleX, scaleY); result := CopyBlendInternal(tmp, srcRecClipped, dstRec, blendFunc, blendLineFunc); finally tmp.Free; end; Exit; end; Types.IntersectRect(dstRecClipped, dstRec, Bounds); if IsEmptyRect(dstRecClipped) then Exit; //there's no scaling if we get here, but further clipping may be needed if //the destination rec is partially outside the destination image's bounds if not RectsEqual(dstRecClipped, dstRec) then begin //the destination rec has been clipped so clip the source too ... RectWidthHeight(dstRecClipped, w, h); RectWidthHeight(dstRec, dstW, dstH); ScaleRect(srcRecClipped, w / dstW, h / dstH); TranslateRect(srcRecClipped, dstRecClipped.Left - dstRec.Left, dstRecClipped.Top - dstRec.Top); end; //when copying to self and srcRec & dstRec overlap then //copy srcRec to a temporary image and use it as the source ... if (src = self) and Types.IntersectRect(r, srcRecClipped, dstRecClipped) then begin tmp := TImage32.Create(self, srcRecClipped); try result := src.CopyBlendInternal(tmp, tmp.Bounds, dstRecClipped, blendFunc, blendLineFunc); finally tmp.Free; end; Exit; end; if Assigned(blendLineFunc) then CopyInternalLine(src, srcRecClipped, dstRecClipped, blendLineFunc) else CopyInternal(src, srcRecClipped, dstRecClipped, blendFunc); result := true; Changed; end; //------------------------------------------------------------------------------ function TImage32.LoadFromResource(const resName: string; resType: PChar): Boolean; var resStream: TResourceStream; begin resStream := CreateResourceStream(resName, resType); try Result := assigned(resStream) and LoadFromStream(resStream); finally resStream.Free; end; end; //------------------------------------------------------------------------------ {$IF DEFINED (MSWINDOWS)} procedure TImage32.CopyFromDC(srcDc: HDC; const srcRect: TRect); var bi: TBitmapInfoHeader; bm, oldBm: HBitmap; dc, memDc: HDC; pixels: Pointer; w,h: integer; begin BeginUpdate; try RectWidthHeight(srcRect, w,h); SetSize(w, h); bi := Get32bitBitmapInfoHeader(w, -h); // -h => avoids need to flip image dc := GetDC(0); memDc := CreateCompatibleDC(dc); try bm := CreateDIBSection(dc, PBITMAPINFO(@bi)^, DIB_RGB_COLORS, pixels, 0, 0); if bm = 0 then Exit; try oldBm := SelectObject(memDc, bm); BitBlt(memDc, 0, 0, w, h, srcDc, srcRect.Left,srcRect.Top, SRCCOPY); Move(pixels^, fPixels[0], w * h * sizeOf(TColor32)); SelectObject(memDc, oldBm); finally DeleteObject(bm); end; finally DeleteDc(memDc); ReleaseDc(0, dc); end; if IsBlank then SetAlpha(255); //FlipVertical; finally EndUpdate; end; end; //------------------------------------------------------------------------------ procedure TImage32.CopyToDc(dstDc: HDC; x,y: Integer; transparent: Boolean); begin CopyToDc(Bounds, Types.Rect(x,y, x+Width, y+Height), dstDc, transparent); end; //------------------------------------------------------------------------------ procedure TImage32.CopyToDc(const srcRect: TRect; dstDc: HDC; x: Integer = 0; y: Integer = 0; transparent: Boolean = true); var recW, recH: integer; begin RectWidthHeight(srcRect, recW, recH); CopyToDc(srcRect, Types.Rect(x,y, x+recW, y+recH), dstDc, transparent); end; //------------------------------------------------------------------------------ procedure TImage32.CopyToDc(const srcRect, dstRect: TRect; dstDc: HDC; transparent: Boolean = true); var i, x,y, wSrc ,hSrc, wDest, hDest, wBytes: integer; rec: TRect; bi: TBitmapInfoHeader; bm, oldBm: HBitmap; dibBits: Pointer; pDst, pSrc: PARGB; memDc: HDC; isTransparent: Boolean; bf: BLENDFUNCTION; oldStretchBltMode: integer; begin Types.IntersectRect(rec, srcRect, Bounds); if IsEmpty or IsEmptyRect(rec) or IsEmptyRect(dstRect) then Exit; RectWidthHeight(rec, wSrc, hSrc); RectWidthHeight(dstRect, wDest, hDest); x := dstRect.Left; y := dstRect.Top; inc(x, rec.Left - srcRect.Left); inc(y, rec.Top - srcRect.Top); bi := Get32bitBitmapInfoHeader(wSrc, hSrc); isTransparent := transparent and RectHasTransparency(srcRect); memDc := CreateCompatibleDC(dstDc); try bm := CreateDIBSection(memDc, PBITMAPINFO(@bi)^, DIB_RGB_COLORS, dibBits, 0, 0); if bm = 0 then Exit; try //copy Image to dibBits (with vertical flip) wBytes := wSrc * SizeOf(TColor32); pDst := dibBits; pSrc := PARGB(PixelRow[rec.Bottom -1]); inc(pSrc, rec.Left); if isTransparent and not IsPremultiplied then begin //premultiplied alphas are required when alpha blending for i := rec.Bottom -1 downto rec.Top do begin PremultiplyAlpha(pSrc, pDst, wSrc); dec(pSrc, Width); inc(pDst, wSrc); end; end else begin for i := rec.Bottom -1 downto rec.Top do begin Move(pSrc^, pDst^, wBytes); dec(pSrc, Width); inc(pDst, wSrc); end; end; oldBm := SelectObject(memDC, bm); if isTransparent then begin //premultiplied alphas are required when alpha blending bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.SourceConstantAlpha := 255; bf.AlphaFormat := AC_SRC_ALPHA; AlphaBlend(dstDc, x,y, wDest,hDest, memDC, 0,0, wSrc,hSrc, bf); end else if (wDest = wSrc) and (hDest = hSrc) then begin BitBlt(dstDc, x,y, wSrc, hSrc, memDc, 0,0, SRCCOPY) end else begin oldStretchBltMode := SetStretchBltMode(dstDc, COLORONCOLOR); StretchBlt(dstDc, x,y, wDest, hDest, memDc, 0,0, wSrc,hSrc, SRCCOPY); if oldStretchBltMode <> COLORONCOLOR then // restore mode SetStretchBltMode(dstDc, oldStretchBltMode); end; SelectObject(memDC, oldBm); finally DeleteObject(bm); end; finally DeleteDc(memDc); end; end; {$IFEND} //------------------------------------------------------------------------------ {$IF DEFINED(USING_VCL_LCL)} procedure TImage32.CopyFromBitmap(bmp: TBitmap); var ms: TMemoryStream; bmpFormat: TImageFormat_BMP; begin ms := TMemoryStream.create; bmpFormat := TImageFormat_BMP.Create; try bmp.SaveToStream(ms); ms.Position := 0; bmpFormat.LoadFromStream(ms, self); finally ms.Free; bmpFormat.Free; end; end; //------------------------------------------------------------------------------ procedure TImage32.CopyToBitmap(bmp: TBitmap); var ms: TMemoryStream; bmpFormat: TImageFormat_BMP; begin ms := TMemoryStream.create; bmpFormat := TImageFormat_BMP.Create; try bmpFormat.IncludeFileHeaderInSaveStream := true; bmpFormat.SaveToStream(ms, self); ms.Position := 0; bmp.PixelFormat := pf32bit; {$IF DEFINED(USING_VCL) AND DEFINED(ALPHAFORMAT)} bmp.AlphaFormat := afDefined; {$IFEND} bmp.LoadFromStream(ms); finally ms.Free; bmpFormat.Free; end; end; //------------------------------------------------------------------------------ {$IFEND} function TImage32.CopyToClipBoard: Boolean; var i: Integer; formatClass: TImageFormatClass; begin //Sadly with CF_DIB (and even CF_DIBV5) clipboard formats, transparency is //usually lost, so we'll copy all available formats including CF_PNG, that //is if it's registered. result := not IsEmpty; if not result then Exit; result := false; for i := ImageFormatClassList.Count -1 downto 0 do begin formatClass := PImgFmtRec(ImageFormatClassList[i]).Obj; if not formatClass.CanCopyToClipboard then Continue; with formatClass.Create do try result := CopyToClipboard(self); finally free; end; end; end; //------------------------------------------------------------------------------ class function TImage32.CanPasteFromClipBoard: Boolean; var i: Integer; formatClass: TImageFormatClass; begin result := false; for i := ImageFormatClassList.Count -1 downto 0 do begin formatClass := PImgFmtRec(ImageFormatClassList[i]).Obj; if formatClass.CanPasteFromClipboard then begin result := true; Exit; end; end; end; //------------------------------------------------------------------------------ function TImage32.PasteFromClipBoard: Boolean; var i: Integer; formatClass: TImageFormatClass; begin result := false; for i := ImageFormatClassList.Count -1 downto 0 do begin formatClass := PImgFmtRec(ImageFormatClassList[i]).Obj; if not formatClass.CanPasteFromClipboard then Continue; with formatClass.Create do try result := PasteFromClipboard(self); if not Result then Continue; finally free; end; Changed; Break; end; end; //------------------------------------------------------------------------------ procedure TImage32.ConvertToBoolMask(reference: TColor32; tolerance: integer; colorFunc: TCompareFunction; maskBg: TColor32; maskFg: TColor32); var i: Integer; mask: TArrayOfByte; c: PColor32; b: PByte; begin if IsEmpty then Exit; mask := GetBoolMask(self, reference, colorFunc, tolerance); c := PixelBase; b := @mask[0]; for i := 0 to Width * Height -1 do begin {$IFDEF PBYTE} if b^ = 0 then c^ := maskBg else c^ := maskFg; {$ELSE} if b^ = #0 then c^ := maskBg else c^ := maskFg; {$ENDIF} inc(c); inc(b); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.ConvertToAlphaMask(reference: TColor32; colorFunc: TCompareFunctionEx); var i: Integer; mask: TArrayOfByte; c: PColor32; b: PByte; begin if IsEmpty then Exit; mask := GetByteMask(self, reference, colorFunc); c := PixelBase; b := @mask[0]; for i := 0 to Width * Height -1 do begin {$IFDEF PBYTE} c^ := b^ shl 24; {$ELSE} c^ := Ord(b^) shl 24; {$ENDIF} inc(c); inc(b); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.FlipVertical; var i: Integer; a: TArrayOfColor32; src, dst: PColor32; begin if IsEmpty then Exit; NewColor32Array(a, fWidth * fHeight, True); src := @fPixels[(height-1) * width]; dst := @a[0]; for i := 0 to fHeight -1 do begin move(src^, dst^, fWidth * SizeOf(TColor32)); dec(src, fWidth); inc(dst, fWidth); end; fPixels := a; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.FlipHorizontal; var i,j, widthLess1: Integer; a: TArrayOfColor32; row: PColor32; begin if IsEmpty then Exit; NewColor32Array(a, fWidth, True); widthLess1 := fWidth -1; row := @fPixels[(height-1) * width]; //top row for i := 0 to fHeight -1 do begin move(row^, a[0], fWidth * SizeOf(TColor32)); for j := 0 to widthLess1 do begin row^ := a[widthLess1 - j]; inc(row); end; dec(row, fWidth *2); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.PreMultiply; begin if IsEmpty or fIsPremultiplied then Exit; fIsPremultiplied := true; PremultiplyAlpha(PARGB(PixelBase), PARGB(PixelBase), Width * Height); //nb: no OnChange notify event here end; //------------------------------------------------------------------------------ procedure TImage32.SetRGB(rgbColor: TColor32); var i: Integer; pc: PColor32; c: TColor32; begin //this method leaves the alpha channel untouched if IsEmpty then Exit; pc := PixelBase; rgbColor := rgbColor and $00FFFFFF; for i := 0 to Width * Height - 1 do begin c := pc^; if c and $FF000000 = 0 then pc^ := 0 else pc^ := c and $FF000000 or rgbColor; inc(pc); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.SetRGB(rgbColor: TColor32; rec: TRect); var i,j, dx: Integer; pc: PColor32; begin Types.IntersectRect(rec, rec, bounds); if IsEmptyRect(rec) then Exit; rgbColor := rgbColor and $00FFFFFF; pc := PixelBase; inc(pc, rec.Left); dx := Width - RectWidth(rec); for i := rec.Top to rec.Bottom -1 do begin for j := rec.Left to rec.Right -1 do begin pc^ := pc^ and $FF000000 or rgbColor; inc(pc); end; inc(pc, dx); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.SetAlpha(alpha: Byte); var i: Integer; c: PARGB; begin //this method only changes the alpha channel if IsEmpty then Exit; c := PARGB(PixelBase); for i := 0 to Width * Height -1 do begin c.A := alpha; inc(c); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.ReduceOpacity(opacity: Byte); var i: Integer; c: PARGB; a: Byte; begin if opacity = 255 then Exit; c := PARGB(PixelBase); for i := 0 to Width * Height -1 do begin a := c.A; if a <> 0 then c.A := MulTable[a, opacity]; inc(c); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.ReduceOpacity(opacity: Byte; rec: TRect); var i,j, rw: Integer; c: PARGB; a: Byte; lineOffsetInBytes: integer; begin Types.IntersectRect(rec, rec, bounds); if IsEmptyRect(rec) then Exit; rw := RectWidth(rec); c := @Pixels[rec.Top * Width + rec.Left]; lineOffsetInBytes := (Width - rw) * SizeOf(TARGB); for i := rec.Top to rec.Bottom - 1 do begin for j := 1 to rw do begin a := c.A; if a <> 0 then c.A := MulTable[a, opacity]; inc(c); end; inc(PByte(c), lineOffsetInBytes); end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.Grayscale(mode: TGrayscaleMode; linearAmountPercentage: double); var i: SizeInt; cLinear: double; c, lastC, grayC: TColor32; p: PColor32Array; amountCalc: Boolean; oneMinusAmount: double; begin if mode = gsmSaturation then begin // linearAmountPercentage has no effect here AdjustSaturation(-100); Exit; end; // Colorimetric (perceptual luminance-preserving) conversion to grayscale // See https://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale if IsEmpty then Exit; if linearAmountPercentage <= 0.0 then Exit; amountCalc := linearAmountPercentage < 1.0; oneMinusAmount := 1.0 - linearAmountPercentage; p := PColor32Array(PixelBase); lastC := 0; grayC := 0; for i := 0 to high(fPixels) do begin c := p[i] and $00FFFFFF; if c <> 0 then begin if c <> lastC then // only do the calculation if the color channels changed begin lastC := c; {$IF DEFINED(ANDROID)} c := SwapRedBlue(c); {$IFEND} // We don't divide by 255 here, so can skip some division and multiplications. // That means cLinear is actually "cLinear * 255" cLinear := (0.2126 * Byte(c shr 16)) + (0.7152 * Byte(c shr 8)) + (0.0722 * Byte(c)); //cLinear := (0.2126 * TARGB(c).R) + (0.7152 * TARGB(c).G) + (0.0722 * TARGB(c).B); if mode = gsmLinear then c := ClampByte(cLinear) else //if mode = gsmColorimetric then begin if cLinear <= (0.0031308 * 255) then // adjust for cLinear being "cLiniear * 255" c := ClampByte(Integer(Round(12.92 * cLinear))) else // for Power we must divide by 255 and then later multipy by 255 //c := ClampByte(Integer(Round((1.055 * 255) * Power(cLinear / 255, 1/2.4) - (0.055 * 255)))); end; if not amountCalc then grayC := (c shl 16) or (c shl 8) or c else begin cLinear := c * linearAmountPercentage; grayC := ClampByte(Integer(Round(Byte(lastC shr 16) * oneMinusAmount + cLinear))) shl 16 or ClampByte(Integer(Round(Byte(lastC shr 8) * oneMinusAmount + cLinear))) shl 8 or ClampByte(Integer(Round(Byte(lastC ) * oneMinusAmount + cLinear))); end; {$IF DEFINED(ANDROID)} grayC := SwapRedBlue(grayC); {$IFEND} end; p[i] := (p[i] and $FF000000) or grayC; end; end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.InvertColors; var pc: PColor32Array; i: SizeInt; begin pc := PColor32Array(PixelBase); for i := 0 to Width * Height -1 do pc[i] := pc[i] xor $00FFFFFF; // keep the alpha channel untouched Changed; end; //------------------------------------------------------------------------------ procedure TImage32.InvertAlphas; var pc: PColor32Array; i: SizeInt; begin pc := PColor32Array(PixelBase); for i := 0 to Width * Height -1 do pc[i] := pc[i] xor $FF000000; // keep the color channels untouched Changed; end; //------------------------------------------------------------------------------ procedure TImage32.AdjustHue(percent: Integer); var i: SizeInt; hsl: THsl; lut: array [byte] of byte; c, lastC, newC: TColor32; p: PColor32Array; begin percent := percent mod 100; if percent < 0 then inc(percent, 100); percent := Round(percent * 255 / 100); if (percent = 0) or IsEmpty then Exit; for i := 0 to 255 do lut[i] := (i + percent) mod 255; lastC := 0; newC := 0; p := PColor32Array(fPixels); for i := 0 to high(fPixels) do begin c := p[i]; c := c and $00FFFFFF; if c <> 0 then begin if c <> lastC then // only do the calculation if the color channels changed begin lastC := C; hsl := RgbToHsl(c); hsl.hue := lut[hsl.hue]; newC := HslToRgb(hsl); end; p[i] := (p[i] and $FF000000) or newC; // keep the alpha channel end; end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.AdjustLuminance(percent: Integer); var i: SizeInt; hsl: THsl; pc: double; lut: array [byte] of byte; c, lastC, newC: TColor32; p: PColor32Array; begin if (percent = 0) or IsEmpty then Exit; percent := percent mod 101; pc := percent / 100; if pc > 0 then for i := 0 to 255 do lut[i] := Round(i + (255 - i) * pc) else for i := 0 to 255 do lut[i] := Round(i + (i * pc)); lastC := 0; newC := 0; p := PColor32Array(fPixels); for i := 0 to high(fPixels) do begin c := p[i]; c := c and $00FFFFFF; if c <> 0 then begin if c <> lastC then // only do the calculation if the color channels changed begin lastC := C; hsl := RgbToHsl(c); hsl.lum := lut[hsl.lum]; newC := HslToRgb(hsl); end; p[i] := (p[i] and $FF000000) or newC; // keep the alpha channel end; end; Changed; end; //------------------------------------------------------------------------------ procedure TImage32.AdjustSaturation(percent: Integer); var i: SizeInt; hsl: THsl; lut: array [byte] of byte; pc: double; c, lastC, newC: TColor32; p: PColor32Array; begin if (percent = 0) or IsEmpty then Exit; percent := percent mod 101; pc := percent / 100; if pc > 0 then for i := 0 to 255 do lut[i] := Round(i + (255 - i) * pc) else for i := 0 to 255 do lut[i] := Round(i + (i * pc)); lastC := 0; newC := 0; p := PColor32Array(fPixels); for i := 0 to high(fPixels) do begin c := p[i]; c := c and $00FFFFFF; if c <> 0 then begin if c <> lastC then // only do the calculation if the color channels changed begin lastC := C; hsl := RgbToHsl(c); hsl.sat := lut[hsl.sat]; newC := HslToRgb(hsl); end; p[i] := (p[i] and $FF000000) or newC; // keep the alpha channel end; end; Changed; end; //------------------------------------------------------------------------------ function TImage32.GetOpaqueBounds: TRect; var x,y, x1,x2,y1,y2: Integer; found: Boolean; begin y1 := 0; y2 := 0; found := false; Result := NullRect; for y := 0 to Height -1 do begin for x := 0 to Width -1 do if TARGB(fPixels[y * Width + x]).A > 0 then begin y1 := y; found := true; break; end; if found then break; end; if not found then Exit; found := false; for y := Height -1 downto 0 do begin for x := 0 to Width -1 do if TARGB(fPixels[y * Width + x]).A > 0 then begin y2 := y; found := true; break; end; if found then break; end; x1 := Width; x2 := 0; for y := y1 to y2 do for x := 0 to Width -1 do if TARGB(fPixels[y * Width + x]).A > 0 then begin if x < x1 then x1 := x; if x > x2 then x2 := x; end; Result := Types.Rect(x1, y1, x2+1, y2+1); end; //------------------------------------------------------------------------------ function TImage32.CropTransparentPixels: TRect; begin Result := GetOpaqueBounds; if IsEmptyRect(Result) then SetSize(0,0) else Crop(Result); end; //------------------------------------------------------------------------------ procedure TImage32.Rotate(angleRads: double); var mat: TMatrixD; begin {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angleRads := -angleRads; {$ENDIF} //nb: There's no point rotating about a specific point //since the rotated image will be recentered. NormalizeAngle(angleRads); if IsEmpty or (angleRads = 0) then Exit; if angleRads = angle180 then begin Rotate180; //because we've excluded 0 & 360 deg angles end else if angleRads = angle90 then begin RotateRight90; end else if angleRads = -angle90 then begin RotateLeft90; end else begin mat := IdentityMatrix; // the rotation point isn't important // because AffineTransformImage() will // will resize and recenter the image MatrixRotate(mat, NullPointD, angleRads); AffineTransformImage(self, mat); end; end; //------------------------------------------------------------------------------ procedure TImage32.RotateRect(const rec: TRect; angleRads: double; eraseColor: TColor32 = 0); var tmp: TImage32; rec2: TRect; recWidth, recHeight: integer; begin recWidth := rec.Right - rec.Left; recHeight := rec.Bottom - rec.Top; //create a tmp image with a copy of the pixels inside rec ... tmp := TImage32.Create(self, rec); try tmp.Rotate(angleRads); //since rotating also resizes, get a centered //(clipped) rect of the rotated pixels ... rec2.Left := (tmp.Width - recWidth) div 2; rec2.Top := (tmp.Height - recHeight) div 2; rec2.Right := rec2.Left + recWidth; rec2.Bottom := rec2.Top + recHeight; //finally move the rotated rec back to the image ... FillRect(rec, eraseColor); CopyBlend(tmp, rec2, rec); finally tmp.Free; end; end; //------------------------------------------------------------------------------ procedure TImage32.Skew(dx,dy: double); var mat: TMatrixD; begin if IsEmpty or ((dx = 0) and (dy = 0)) then Exit; //limit skewing to twice the image's width and/or height dx := ClampRange(dx, -2.0, 2.0); dy := ClampRange(dy, -2.0, 2.0); mat := IdentityMatrix; MatrixSkew(mat, dx, dy); AffineTransformImage(self, mat); end; //------------------------------------------------------------------------------ procedure TImage32.ScaleAlpha(scale: double); var i: Integer; pb: PARGB; begin pb := PARGB(PixelBase); for i := 0 to Width * Height - 1 do begin pb.A := ClampByte(Integer(Round(pb.A * scale))); inc(pb); end; Changed; end; //------------------------------------------------------------------------------ // TImageList32 //------------------------------------------------------------------------------ constructor TImageList32.Create; begin {$IFDEF XPLAT_GENERICS} fList := TList.Create; {$ELSE} fList := TList.Create; {$ENDIF} fIsImageOwner := true; end; //------------------------------------------------------------------------------ destructor TImageList32.Destroy; begin Clear; fList.Free; inherited; end; //------------------------------------------------------------------------------ function TImageList32.Count: integer; begin result := fList.Count; end; //------------------------------------------------------------------------------ procedure TImageList32.Clear; var i: integer; begin if IsImageOwner then for i := 0 to fList.Count -1 do TImage32(fList[i]).Free; fList.Clear; end; //------------------------------------------------------------------------------ function TImageList32.GetImage(index: integer): TImage32; begin result := TImage32(fList[index]); end; //------------------------------------------------------------------------------ procedure TImageList32.SetImage(index: integer; img: TIMage32); begin if fIsImageOwner then TImage32(fList[index]).Free; fList[index] := img; end; //------------------------------------------------------------------------------ function TImageList32.GetLast: TImage32; begin if Count = 0 then Result := nil else Result := TImage32(fList[Count -1]); end; //------------------------------------------------------------------------------ procedure TImageList32.Add(image: TImage32); begin fList.Add(image); end; //------------------------------------------------------------------------------ function TImageList32.Add(width, height: integer): TImage32; begin Result := TImage32.create(width, height); fList.Add(Result); end; //------------------------------------------------------------------------------ procedure TImageList32.Insert(index: integer; image: TImage32); begin fList.Insert(index, image); end; //------------------------------------------------------------------------------ procedure TImageList32.Move(currentIndex, newIndex: integer); begin fList.Move(currentIndex, newIndex); end; //------------------------------------------------------------------------------ procedure TImageList32.Delete(index: integer); begin if fIsImageOwner then TImage32(fList[index]).Free; fList.Delete(index); end; //------------------------------------------------------------------------------ // TImageFormat methods //------------------------------------------------------------------------------ function TImageFormat.LoadFromFile(const filename: string; img32: TImage32): Boolean; var fs: TFileStream; begin result := FileExists(filename); if not result then Exit; fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite); try Result := LoadFromStream(fs, img32); finally fs.Free; end; end; //------------------------------------------------------------------------------ function TImageFormat.SaveToFile(const filename: string; img32: TImage32; quality: integer): Boolean; var fs: TFileStream; begin result := (pos('.', filename) = 1) or DirectoryExists(ExtractFilePath(filename)); if not result then Exit; fs := TFileStream.Create(filename, fmCreate); try SaveToStream(fs, img32, quality); finally fs.Free; end; end; //------------------------------------------------------------------------------ class function TImageFormat.CanCopyToClipboard: Boolean; begin Result := false; end; //------------------------------------------------------------------------------ class function TImageFormat.GetImageCount(stream: TStream): integer; begin Result := 1; end; //------------------------------------------------------------------------------ // TInterfacedObj //------------------------------------------------------------------------------ {$IFDEF FPC} function TInterfacedObj._AddRef: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; begin Result := -1; end; //------------------------------------------------------------------------------ function TInterfacedObj._Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF}; begin Result := -1; end; //------------------------------------------------------------------------------ function TInterfacedObj.QueryInterface( {$IFDEF FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} iid : tguid; out obj) : longint; begin if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE; end; {$ELSE} function TInterfacedObj._AddRef: Integer; stdcall; begin Result := -1; end; //------------------------------------------------------------------------------ function TInterfacedObj._Release: Integer; stdcall; begin Result := -1; end; //------------------------------------------------------------------------------ function TInterfacedObj.QueryInterface(const IID: TGUID; out Obj): HResult; begin if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE; end; {$ENDIF} //------------------------------------------------------------------------------ // Initialization and Finalization functions //------------------------------------------------------------------------------ procedure MakeBlendTables; var i,j: Integer; begin for j := 0 to 255 do MulTable[0, j] := 0; for i := 0 to 255 do MulTable[i, 0] := 0; for j := 0 to 255 do DivTable[0, j] := 0; for i := 0 to 255 do DivTable[i, 0] := 0; for i := 1 to 255 do begin for j := 1 to 255 do begin MulTable[i, j] := Round(i * j * div255); if i >= j then DivTable[i, j] := 255 else DivTable[i, j] := Round(i * $FF / j); end; end; Sigmoid[128] := 128; for i := 1 to 127 do Sigmoid[128+i] := 128 + Round(127 * sin(angle90 * i/127)); for i := 0 to 127 do Sigmoid[i] := 255- Sigmoid[255-i]; end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} procedure GetScreenScale; var dc: HDC; ScreenPixelsY: integer; begin dc := GetDC(0); try ScreenPixelsY := GetDeviceCaps(dc, LOGPIXELSY); DpiAwareOne := ScreenPixelsY / 96; finally ReleaseDC(0, dc); end; dpiAware1 := Round(DpiAwareOne); end; {$ENDIF} //------------------------------------------------------------------------------ procedure CleanUpImageFormatClassList; var i: integer; begin for i := ImageFormatClassList.Count -1 downto 0 do Dispose(PImgFmtRec(ImageFormatClassList[i])); ImageFormatClassList.Free; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ procedure CreateResamplerList; begin {$IFDEF XPLAT_GENERICS} ResamplerList := TList.Create; {$ELSE} ResamplerList := TList.Create; {$ENDIF} end; //------------------------------------------------------------------------------ function GetResampler(id: integer): TResamplerFunction; var i: integer; begin result := nil; if not Assigned(ResamplerList) then Exit; for i := ResamplerList.Count -1 downto 0 do if TResamplerObj(ResamplerList[i]).id = id then begin Result := TResamplerObj(ResamplerList[i]).func; Break; end; end; //------------------------------------------------------------------------------ function RegisterResampler(func: TResamplerFunction; const name: string): integer; var resampleObj: TResamplerObj; begin if not Assigned(ResamplerList) then CreateResamplerList; resampleObj := TResamplerObj.Create; Result := ResamplerList.Add(resampleObj) +1; resampleObj.id := Result; resampleObj.name := name; resampleObj.func := func; end; //------------------------------------------------------------------------------ procedure GetResamplerList(stringList: TStringList); var i: integer; resampleObj: TResamplerObj; begin stringList.Clear; stringList.Capacity := ResamplerList.Count; for i := 0 to ResamplerList.Count -1 do begin resampleObj := ResamplerList[i]; stringList.AddObject(resampleObj.name, resampleObj); end; end; //------------------------------------------------------------------------------ procedure CleanUpResamplerClassList; var i: integer; begin if not Assigned(ResamplerList) then Exit; for i := ResamplerList.Count -1 downto 0 do TResamplerObj(ResamplerList[i]).Free; ResamplerList.Free; end; //------------------------------------------------------------------------------ initialization CreateImageFormatList; MakeBlendTables; {$IFDEF MSWINDOWS} GetScreenScale; {$ENDIF} finalization CleanUpImageFormatClassList; CleanUpResamplerClassList; end. doublecmd-1.1.30/components/Image32/source/Img32.inc0000644000175000001440000001235515104114162021023 0ustar alexxusers// While "storage" is still technically experimental, // it does allow file system storage of layered objects etc // Comment out the following preprocessor define if you do wish to // use storage (eg to compile the experimental 'CtrlDemo' in Examples). {$DEFINE NO_STORAGE} // default rotation direction is clockwise with positive angles {.$DEFINE CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} // Image downsampling occurs when images are reduced in size, and the default downsampling // function is 'BoxDownSampling'. When downsampling, this function generally produces much // clearer images than general purpose resamplers (which are much better at upsampling, // and doing other affine transformations). However, if for some reason you do wish to use // a general purpose resampler while downsampling, then comment out (ie disable) this define. {$DEFINE USE_DOWNSAMPLER_AUTOMATICALLY} // The SimplifyPath and SimplifyPaths functions have changed. Specifically the last // parameter has changed from IsOpenPath to IsClosedPath, though the default has also // changed from false to true which should minimise any inconvenience. This change was // made to remove an inconsistency with other functions that all contain an IsClosedPath // parameter. However, if this change is going to create havoc for some reason, then // the following (somewhat temporary) define can be enabled. {.$DEFINE USE_OLD_SIMPLIFYPATHS} //USING_VCL_LCL - using either Delphi Visual Component Library or Lazarus Component Library //is required if using the TImage32Panel component //and adds a few extra library features (eg copying to and from TBitmap objects) {$IF DEFINED(FPC)} {$MACRO ON} {$DEFINE USING_LCL} {.$DEFINE USING_VCL_LCL} {$DEFINE COMPILERVERSION:= 17} {$ELSEIF declared(FireMonkeyVersion) OR DEFINED(FRAMEWORK_FMX)} {$DEFINE USING_FMX} {$ELSE} {$DEFINE USING_VCL} {$DEFINE USING_VCL_LCL} {$IFEND} {$IFDEF FPC} {$MODE DELPHI} {$DEFINE ABSTRACT_CLASSES} {$DEFINE RECORD_METHODS} {$DEFINE PBYTE} {$DEFINE NEWPOSFUNC} {$DEFINE SUPPORTS_POINTERMATH} {$DEFINE CLASS_STATIC} {.$DEFINE UITYPES} {$DEFINE NESTED_TYPES} {$IFNDEF DEBUG} {$DEFINE INLINE} {$DEFINE INLINE_COMPATIBLE} {$ENDIF} {$DEFINE DELPHI_PNG} {$IFDEF WINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ELSE} {$IF COMPILERVERSION < 15} Your version of Delphi is not supported (Image32 requires Delphi version 7 or above) {$IFEND} {$IF COMPILERVERSION < 23} {$DEFINE CPUX86} // CPUX86 was added in Delphi XE2 (added Win64 compiler) {$IFEND} {$IF COMPILERVERSION >= 17} //Delphi 2005 {$IFNDEF DEBUG} {$DEFINE INLINE} //added inlining {$ENDIF} {$DEFINE NESTED_TYPES} //added nested types & nested constants {$IF COMPILERVERSION >= 18} //Delphi 2006 {$DEFINE ABSTRACT_CLASSES} //added abstract classes {$DEFINE REPORTMEMORYLEAKS} //added ReportMemoryLeaksOnShutdown {$WARN SYMBOL_PLATFORM OFF} {$DEFINE SETSIZE} //added TBitmap.SetSize {$IF COMPILERVERSION >= 18.5} //Delphi 2007 {$DEFINE RECORD_METHODS} //added records with methods {$DEFINE DELPHI_PNG} //added PNG support {$DEFINE DELPHI_GIF} //added GIF support {$DEFINE MAINFORMONTASKBAR} //added TApplication.MainFormOnTaskbar {$if CompilerVersion >= 20} //Delphi 2009 {$DEFINE PBYTE} //added PByte {$DEFINE CHARINSET} //added CharInSet function {$DEFINE EXIT_PARAM} //added Exit(value) {$DEFINE ALPHAFORMAT} //added TBitmap.AlphaFormat property {$DEFINE SUPPORTS_POINTERMATH} //added {$POINTERMATH ON/OFF} {$DEFINE CLASS_STATIC} //added class static methods {$IF COMPILERVERSION >= 21} //Delphi 2010 {$IFNDEF DEBUG} {$DEFINE INLINE_COMPATIBLE} //avoid compiler bug with INLINE in Delphi 2005-2009 ("incompatible type") {$ENDIF} {$DEFINE GESTURES} //added screen gesture support {$IF COMPILERVERSION >= 23} //DelphiXE2 {$DEFINE USES_NAMESPACES} {$DEFINE FORMATSETTINGS} {$DEFINE TROUNDINGMODE} {$DEFINE UITYPES} //added UITypes unit {$DEFINE XPLAT_GENERICS} //cross-platform generics support {$DEFINE STYLESERVICES} //added StyleServices unit {$IF COMPILERVERSION >= 24} //DelphiXE3 {$LEGACYIFEND ON} {$DEFINE NEWPOSFUNC} {$DEFINE ZEROBASEDSTR} {$IF COMPILERVERSION >= 25} //DelphiXE4 {$LEGACYIFEND ON} //avoids compiler warning {$IFEND} {$IFEND} {$IFEND} {$IFEND} {$IFEND} {$IFEND} {$IFEND} {$IFEND} {$ENDIF} {$IFOPT Q+} {$DEFINE OVERFLOWCHECKS_ENABLED} {$ENDIF} {$IFOPT R+} {$DEFINE RANGECHECKS_ENABLED} {$ENDIF} doublecmd-1.1.30/components/Image32/source/Img32.Vector.pas0000644000175000001440000037363015104114162022304 0ustar alexxusersunit Img32.Vector; (******************************************************************************* * Author : Angus Johnson * * Version : 4.7 * * Date : 6 January 2025 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2019-2025 * * * * Purpose : Vector drawing for TImage32 * * * * License : Use, modification & distribution is subject to * * Boost Software License Ver 1 * * http://www.boost.org/LICENSE_1_0.txt * *******************************************************************************) interface {$I Img32.inc} uses SysUtils, Classes, Math, Types, Img32; type TArrowStyle = (asNone, asSimple, asFancy, asDiamond, asCircle, asTail); // TJoinStyle: // jsSquare - Convex joins will be truncated using a 'squaring' edge. // The mid-points of these squaring edges will also be exactly the offset // (ie delta) distance away from their origins (ie the starting vertices). // jsButt - joins are similar to 'squared' joins except that squaring // won't occur at a fixed distance. While bevelled joins may not be as // pretty as squared joins, bevelling will be much faster than squaring. // And perhaps this is why bevelling (rather than squaring) is preferred // in numerous graphics display formats (including SVG & PDF documents). TJoinStyle = (jsAuto, jsSquare, jsButt, jsMiter, jsRound); TEndStyle = (esPolygon = 0, esClosed = 0, esButt, esSquare, esRound); TPathEnd = (peStart, peEnd, peBothEnds); TSplineType = (stQuadratic, stCubic); TFillRule = (frEvenOdd, frNonZero, frPositive, frNegative); TImg32FillRule = TFillRule; //useful whenever there's ambiguity with Clipper TSizeD = {$IFDEF RECORD_METHODS} record {$ELSE} object {$ENDIF} cx : double; cy : double; function average: double; property Width: Double read cx write cx; property Height: Double read cy write cy; end; TRectWH = {$IFDEF RECORD_METHODS} record {$ELSE} object {$ENDIF} public Left, Top, Width, Height: double; function IsEmpty: Boolean; function IsValid: Boolean; function Right: double; function Bottom: double; function Contains(const Pt: TPoint): Boolean; overload; function Contains(const Pt: TPointD): Boolean; overload; function MidPoint: TPointD; function RectD: TRectD; function Rect: TRect; end; function RectWH(left, top, width, height: integer): TRectWH; overload; function RectWH(left, top, width, height: double ): TRectWH; overload; function RectWH(const rec: TRectD): TRectWH; overload; //InflateRect: missing in Delphi 7 procedure InflateRect(var rec: TRect; dx, dy: integer); overload; procedure InflateRect(var rec: TRectD; dx, dy: double); overload; function NormalizeRect(var rect: TRect): Boolean; function PrePendPoint(const pt: TPointD; const p: TPathD): TPathD; overload; procedure PrePendPoint(const pt: TPointD; const p: TPathD; var Result: TPathD); overload; function PrePendPoints(const pt1, pt2: TPointD; const p: TPathD): TPathD; function Rectangle(const rec: TRect): TPathD; overload; function Rectangle(const rec: TRectD): TPathD; overload; function Rectangle(l, t, r, b: double): TPathD; overload; function RoundRect(const rec: TRect; radius: integer): TPathD; overload; function RoundRect(const rec: TRectD; radius: double): TPathD; overload; function RoundRect(const rec: TRect; radius: TPoint): TPathD; overload; function RoundRect(const rec: TRectD; radius: TPointD): TPathD; overload; function Ellipse(const rec: TRect; steps: integer = 0): TPathD; overload; function Ellipse(const rec: TRectD; steps: integer = 0): TPathD; overload; function Ellipse(const rec: TRectD; pendingScale: double): TPathD; overload; function RotatedEllipse(const rec: TRectD; angle: double; steps: integer = 0): TPathD; overload; function RotatedEllipse(const rec: TRectD; angle: double; pendingScale: double): TPathD; overload; function AngleToEllipticalAngle(const ellRec: TRectD; angle: double): double; function EllipticalAngleToAngle(const ellRec: TRectD; angle: double): double; function Circle(const pt: TPoint; radius: double): TPathD; overload; function Circle(const pt: TPointD; radius: double): TPathD; overload; function Circle(const pt: TPointD; radius: double; pendingScale: double): TPathD; overload; function CalcCircleFrom3Points(const p1,p2,p3: TPointD; out centre: TPointD; out radius: double): Boolean; function Star(const rec: TRectD; points: integer; indentFrac: double = 0.4): TPathD; overload; function Star(const focalPt: TPointD; innerRadius, outerRadius: double; points: integer): TPathD; overload; function Arc(const rec: TRectD; startAngle, endAngle: double; scale: double = 0): TPathD; function Pie(const rec: TRectD; StartAngle, EndAngle: double; scale: double = 0): TPathD; function FlattenQBezier(const pt1, pt2, pt3: TPointD; tolerance: double = 0.0): TPathD; overload; function FlattenQBezier(const pts: TPathD; tolerance: double = 0.0): TPathD; overload; function FlattenQBezier(const firstPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; function GetPointInQuadBezier(const a,b,c: TPointD; t: double): TPointD; function FlattenCBezier(const pt1, pt2, pt3, pt4: TPointD; tolerance: double = 0.0): TPathD; overload; function FlattenCBezier(const path: TPathD; tolerance: double = 0.0): TPathD; overload; function FlattenCBezier(const paths: TPathsD; tolerance: double = 0.0): TPathsD; overload; function FlattenCBezier(const firstPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; function GetPointInCubicBezier(const a,b,c,d: TPointD; t: double): TPointD; //FlattenCSpline: Approximates the 'S' command inside the 'd' property of an //SVG path. (See https://www.w3.org/TR/SVG/paths.html#DProperty) function FlattenCSpline(const pts: TPathD; tolerance: double = 0.0): TPathD; overload; function FlattenCSpline(const priorCtrlPt, startPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; //FlattenQSpline: Approximates the 'T' command inside the 'd' property of an //SVG path. (See https://www.w3.org/TR/SVG/paths.html#DProperty) function FlattenQSpline(const pts: TPathD; tolerance: double = 0.0): TPathD; overload; function FlattenQSpline(const priorCtrlPt, startPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; //ArrowHead: The ctrlPt's only function is to control the angle of the arrow. function ArrowHead(const arrowTip, ctrlPt: TPointD; size: double; arrowStyle: TArrowStyle): TPathD; function GetDefaultArrowHeadSize(lineWidth: double): double; procedure AdjustPoint(var pt: TPointD; const referencePt: TPointD; delta: double); function ShortenPath(const path: TPathD; pathEnd: TPathEnd; amount: double): TPathD; //GetDashPath: Returns a polyline (not polygons) function GetDashedPath(const path: TPathD; closed: Boolean; const pattern: TArrayOfDouble; patternOffset: PDouble): TPathsD; function GetDashedOutLine(const path: TPathD; closed: Boolean; const pattern: TArrayOfDouble; patternOffset: PDouble; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle): TPathsD; function TranslatePoint(const pt: TPoint; dx, dy: integer): TPoint; overload; function TranslatePoint(const pt: TPointD; dx, dy: double): TPointD; overload; function TranslatePath(const path: TPathD; dx, dy: double): TPathD; overload; function TranslatePath(const paths: TPathsD; dx, dy: double): TPathsD; overload; function TranslatePath(const ppp: TArrayOfPathsD; dx, dy: double): TArrayOfPathsD; overload; function Paths(const path: TPathD): TPathsD; {$IFDEF INLINING} inline; {$ENDIF} //CopyPath: note that only dynamic string arrays are copy-on-write function CopyPath(const path: TPathD): TPathD; {$IFDEF INLINING} inline; {$ENDIF} function CopyPaths(const paths: TPathsD): TPathsD; function ScalePoint(const pt: TPointD; scale: double): TPointD; overload; {$IFDEF INLINING} inline; {$ENDIF} function ScalePoint(const pt: TPointD; sx, sy: double): TPointD; overload; {$IFDEF INLINING} inline; {$ENDIF} function ScalePath(const path: TPathD; sx, sy: double): TPathD; overload; function ScalePath(const path: TPathD; scale: double): TPathD; overload; function ScalePath(const paths: TPathsD; sx, sy: double): TPathsD; overload; function ScalePath(const paths: TPathsD; scale: double): TPathsD; overload; function ScaleRect(const rec: TRect; scale: double): TRect; overload; function ScaleRect(const rec: TRectD; scale: double): TRectD; overload; function ScaleRect(const rec: TRect; sx, sy: double): TRect; overload; function ScaleRect(const rec: TRectD; sx, sy: double): TRectD; overload; function ScalePathToFit(const path: TPathD; const rec: TRect): TPathD; function ScalePathsToFit(const paths: TPathsD; const rec: TRect): TPathsD; function ReversePath(const path: TPathD): TPathD; overload; function ReversePath(const paths: TPathsD): TPathsD; overload; function OpenPathToFlatPolygon(const path: TPathD): TPathD; procedure AppendPoint(var path: TPathD; const extra: TPointD); // AppendPath - adds TPathD & TPathsD objects to the end of // TPathsD (or TArrayOfPathsD) objects procedure AppendPath(var paths: TPathsD; const extra: TPathD); overload; procedure AppendPath(var paths: TPathsD; const extra: TPathsD); overload; procedure AppendPath(var ppp: TArrayOfPathsD; const extra: TPathsD); overload; // ConcatPaths - concats multiple paths into a single path. // It also avoids point duplicates where path joins procedure ConcatPaths(var dstPath: TPathD; const path: TPathD); overload; procedure ConcatPaths(var dstPath: TPathD; const paths: TPathsD); overload; function GetAngle(const origin, pt: TPoint): double; overload; function GetAngle(const origin, pt: TPointD): double; overload; function GetAngle(const a, b, c: TPoint): double; overload; function GetAngle(const a, b, c: TPointD): double; overload; procedure GetSinCos(angle: double; out sinA, cosA: double); function GetPointAtAngleAndDist(const origin: TPointD; angle, distance: double): TPointD; function IntersectPoint(const ln1a, ln1b, ln2a, ln2b: TPointD): TPointD; overload; function IntersectPoint(const ln1a, ln1b, ln2a, ln2b: TPointD; out ip: TPointD): Boolean; overload; function SegmentIntersectPt(const ln1a, ln1b, ln2a, ln2b: TPointD): TPointD; function SegmentsIntersect(const ln1a, ln1b, ln2a, ln2b: TPointD; out ip: TPointD): Boolean; procedure RotatePoint(var pt: TPointD; const focalPoint: TPointD; sinA, cosA: double); overload; procedure RotatePoint(var pt: TPointD; const focalPoint: TPointD; angleRad: double); overload; function RotatePath(const path: TPathD; const focalPoint: TPointD; angleRads: double): TPathD; overload; function RotatePath(const paths: TPathsD; const focalPoint: TPointD; angleRads: double): TPathsD; overload; //function MakePath(const pts: array of integer): TPathD; overload; function MakePath(const pts: array of double): TPathD; overload; function MakePath(const pt: TPointD): TPathD; overload; function GetBounds(const path: TPathD): TRect; overload; function GetBounds(const paths: TPathsD): TRect; overload; function GetBoundsD(const path: TPathD): TRectD; overload; function GetBoundsD(const paths: TPathsD): TRectD; overload; function GetBoundsD(const paths: TArrayOfPathsD): TRectD; overload; function GetRotatedRectBounds(const rec: TRect; angle: double): TRect; overload; function GetRotatedRectBounds(const rec: TRectD; angle: double): TRectD; overload; function Rect(const recD: TRectD): TRect; overload; function Rect(const left,top,right,bottom: integer): TRect; overload; function PtInRect(const rec: TRectD; const pt: TPointD): Boolean; overload; function Size(cx, cy: integer): TSize; function SizeD(cx, cy: double): TSizeD; function IsClockwise(const path: TPathD): Boolean; // IsSimpleRectanglePath returns true if the specified path has only one polygon // with 4 points that describe a rectangle. function IsSimpleRectanglePath(const paths: TPathsD; var R: TRect): Boolean; overload; function IsSimpleRectanglePath(const path: TPathD; var R: TRect): Boolean; overload; function Area(const path: TPathD): Double; overload; function RectsEqual(const rec1, rec2: TRect): Boolean; procedure TranslateRect(var rec: TRect; dx, dy: integer); overload; procedure TranslateRect(var rec: TRectD; dx, dy: double); overload; function MakeSquare(rec: TRect): TRect; function IsValid(value: integer): Boolean; overload; function IsValid(value: double): Boolean; overload; function IsValid(const pt: TPoint): Boolean; overload; function IsValid(const pt: TPointD): Boolean; overload; function IsValid(const rec: TRect): Boolean; overload; function Point(X,Y: Integer): TPoint; overload; function Point(const pt: TPointD): TPoint; overload; function PointsEqual(const pt1, pt2: TPointD): Boolean; overload; {$IFDEF INLINING} inline; {$ENDIF} function PointsNearEqual(const pt1, pt2: TPoint; dist: integer): Boolean; overload; function PointsNearEqual(const pt1, pt2: TPointD; distSqrd: double): Boolean; overload; {$IFDEF INLINING} inline; {$ENDIF} function StripNearDuplicates(const path: TPathD; minDist: double; isClosedPath: Boolean): TPathD; overload; function StripNearDuplicates(const paths: TPathsD; minLength: double; isClosedPaths: Boolean): TPathsD; overload; function MidPoint(const rec: TRect): TPoint; overload; function MidPoint(const rec: TRectD): TPointD; overload; function MidPoint(const pt1, pt2: TPoint): TPoint; overload; function MidPoint(const pt1, pt2: TPointD): TPointD; overload; function Average(val1, val2: integer): integer; overload; function Average(val1, val2: double): double; overload; function ReflectPoint(const pt, pivot: TPointD): TPointD; {$IFDEF INLINING} inline; {$ENDIF} function RectsOverlap(const rec1, rec2: TRect): Boolean; function IsSameRect(const rec1, rec2: TRect): Boolean; function RectsIntersect(const rec1, rec2: TRect): Boolean; overload; function RectsIntersect(const rec1, rec2: TRectD): Boolean; overload; function IntersectRect(const rec1, rec2: TRectD): TRectD; overload; // UnionRect: this behaves differently to types.UnionRect // in that if either parameter is empty the other parameter is returned function UnionRect(const rec1, rec2: TRect): TRect; overload; function UnionRect(const rec1, rec2: TRectD): TRectD; overload; //these 2 functions are only needed to support older versions of Delphi function MakeArrayOfInteger(const ints: array of integer): TArrayOfInteger; function MakeArrayOfDouble(const doubles: array of double): TArrayOfDouble; function CrossProduct(const vector1, vector2: TPointD): double; overload; {$IFDEF INLINING} inline; {$ENDIF} function CrossProduct(const pt1, pt2, pt3: TPointD): double; overload; {$IFDEF INLINING} inline; {$ENDIF} function CrossProduct(const pt1, pt2, pt3, pt4: TPointD): double; overload; {$IFDEF INLINING} inline; {$ENDIF} function DotProduct(const vector1, vector2: TPointD): double; overload; {$IFDEF INLINING} inline; {$ENDIF} function DotProduct(const pt1, pt2, pt3: TPointD): double; overload; {$IFDEF INLINING} inline; {$ENDIF} function TurnsLeft(const pt1, pt2, pt3: TPointD): boolean; {$IFDEF INLINING} inline; {$ENDIF} function TurnsRight(const pt1, pt2, pt3: TPointD): boolean; {$IFDEF INLINING} inline; {$ENDIF} function IsPathConvex(const path: TPathD): Boolean; function NormalizeVector(const vec: TPointD): TPointD; {$IFDEF INLINING} inline; {$ENDIF} //GetUnitVector: Used internally function GetUnitVector(const pt1, pt2: TPointD): TPointD; //GetUnitNormal: Used internally function GetUnitNormal(const pt1, pt2: TPointD): TPointD; overload; {$IFDEF INLINING} inline; {$ENDIF} function GetUnitNormal(const pt1, pt2: TPointD; out norm: TPointD): Boolean; overload; {$IFDEF INLINING} inline; {$ENDIF} function GetAvgUnitVector(const vec1, vec2: TPointD): TPointD; {$IFDEF INLINING} inline; {$ENDIF} //GetVectors: Used internally function GetVectors(const path: TPathD): TPathD; //GetNormals: Used internally function GetNormals(const path: TPathD): TPathD; //DistanceSqrd: Used internally function DistanceSqrd(const pt1, pt2: TPoint): double; overload; {$IFDEF INLINE} inline; {$ENDIF} //DistanceSqrd: Used internally function DistanceSqrd(const pt1, pt2: TPointD): double; overload; {$IFDEF INLINE} inline; {$ENDIF} function Distance(const pt1, pt2: TPoint): double; overload; {$IFDEF INLINE} inline; {$ENDIF} function Distance(const pt1, pt2: TPointD): double; overload; {$IFDEF INLINE} inline; {$ENDIF} function Distance(const path: TPathD; stopAt: integer = 0): double; overload; function GetDistances(const path: TPathD): TArrayOfDouble; function GetCumulativeDistances(const path: TPathD): TArrayOfDouble; function PerpendicularDistSqrd(const pt, line1, line2: TPointD): double; function PointInPolygon(const pt: TPointD; const polygon: TPathD; fillRule: TFillRule): Boolean; function PointInPolygons(const pt: TPointD; const polygons: TPathsD; fillRule: TFillRule): Boolean; function PerpendicularDist(const pt, line1, line2: TPointD): double; function ClosestPointOnLine(const pt, linePt1, linePt2: TPointD): TPointD; function ClosestPointOnSegment(const pt, segPt1, segPt2: TPointD): TPointD; function IsPointInEllipse(const ellipseRec: TRect; const pt: TPoint): Boolean; //GetLineEllipseIntersects: Gets the intersection of a line and //an ellipse. The function succeeds when the line either touches //tangentially or passes through the ellipse. If the line touches //tangentially, the coordintates returned in pt1 and pt2 will match. function GetLineEllipseIntersects(const ellipseRec: TRect; var linePt1, linePt2: TPointD): Boolean; function GetPtOnEllipseFromAngle(const ellipseRect: TRectD; angle: double): TPointD; function GetPtOnRotatedEllipseFromAngle(const ellipseRect: TRectD; ellipseRotAngle, angle: double): TPointD; function GetEllipticalAngleFromPoint(const ellipseRect: TRectD; const pt: TPointD): double; function GetRotatedEllipticalAngleFromPoint(const ellipseRect: TRectD; ellipseRotAngle: double; pt: TPointD): double; function GetClosestPtOnRotatedEllipse(const ellipseRect: TRectD; ellipseRotation: double; const pt: TPointD): TPointD; // RoughOutline: outlines are **rough** because they will contain numerous // self-intersections and negative area regions. (This untidiness will be // hidden as long as the NonZero fill rule is applied when rendering, and // this function will be **much** faster than Img32.Clipper.InflatePaths.) // The 'scale' parameter doesn't actually scale the returned outline, it's // only a warning of future scaling and used to guide the returned precision. // RoughOutline is intended mostly for internal use. function RoughOutline(const line: TPathD; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle; miterLim: double = 0; scale: double = 1.0): TPathsD; overload; function RoughOutline(const lines: TPathsD; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle; miterLim: double = 0; scale: double = 1.0): TPathsD; overload; // Grow: For the same reasons stated in RoughOutline's comments above, // this function is also intended mostly for internal use function Grow(const path, normals: TPathD; delta: double; joinStyle: TJoinStyle; miterLim: double = 0; scale: double = 1.0; isOpen: Boolean = false): TPathD; function ValueAlmostZero(val: double; epsilon: double = 0.001): Boolean; function ValueAlmostOne(val: double; epsilon: double = 0.001): Boolean; const Invalid = -MaxInt; InvalidD = -Infinity; NullPoint : TPoint = (X: 0; Y: 0); NullPointD : TPointD = (X: 0; Y: 0); InvalidPoint : TPoint = (X: -MaxInt; Y: -MaxInt); InvalidPointD : TPointD = (X: -Infinity; Y: -Infinity); NullRect : TRect = (left: 0; top: 0; right: 0; Bottom: 0); NullRectD : TRectD = (left: 0; top: 0; right: 0; Bottom: 0); InvalidRect : TRect = (left: MaxInt; top: MaxInt; right: 0; Bottom: 0); BezierTolerance: double = 0.25; DoubleTolerance: double = 1.0e-12; var //AutoWidthThreshold: When JoinStyle = jsAuto, this is the threshold at //which line joins will be rounded instead of squared. With wider strokes, //rounded joins generally look better, but as rounding is more complex it //also requries more processing and hence is slower to execute. AutoWidthThreshold: double = 5.0; //When lines are too narrow, they become too faint to sensibly draw MinStrokeWidth: double = 0.5; //Miter limit avoids excessive spikes when line offsetting DefaultMiterLimit: double = 4.0; resourcestring rsInvalidMatrix = 'Invalid matrix.'; //nb: always start with IdentityMatrix implementation uses Img32.Transform; resourcestring rsInvalidQBezier = 'Invalid number of control points for a QBezier'; rsInvalidCBezier = 'Invalid number of control points for a CBezier'; const BuffSize = 64; {$IFDEF CPUX86} // Use faster Trunc for x86 code in this unit. Trunc: function(Value: Double): Integer = __Trunc; {$ENDIF CPUX86} //------------------------------------------------------------------------------ // TSizeD //------------------------------------------------------------------------------ function TSizeD.average: double; begin Result := (cx + cy) * 0.5; end; //------------------------------------------------------------------------------ // TRectWH record/object. //------------------------------------------------------------------------------ function TRectWH.IsEmpty: Boolean; begin Result := (Width <= 0) or (Height <= 0); end; //------------------------------------------------------------------------------ function TRectWH.IsValid: Boolean; begin Result := (Left <> InvalidD) and (Top <> InvalidD) and (Width >= 0) and (Height >= 0); end; //------------------------------------------------------------------------------ function TRectWH.Right: double; begin Result := Left + Width; end; //------------------------------------------------------------------------------ function TRectWH.Bottom: double; begin Result := Top + Height; end; //------------------------------------------------------------------------------ function TRectWH.Contains(const Pt: TPoint): Boolean; begin Result := (pt.X >= Left) and (pt.X <= Left + Width) and (pt.Y >= Top) and (pt.Y <= Top + Height) end; //------------------------------------------------------------------------------ function TRectWH.Contains(const Pt: TPointD): Boolean; begin Result := (pt.X >= Left) and (pt.X <= Left + Width) and (pt.Y >= Top) and (pt.Y <= Top + Height) end; //------------------------------------------------------------------------------ function TRectWH.MidPoint: TPointD; begin Result := PointD(left + Width * 0.5, top + Height * 0.5); end; //------------------------------------------------------------------------------ function TRectWH.RectD: TRectD; begin Result := Img32.RectD(left, top, left + Width, top + Height); end; //------------------------------------------------------------------------------ function TRectWH.Rect: TRect; begin Result := Img32.Vector.Rect(RectD); end; //------------------------------------------------------------------------------ function RectWH(left, top, width, height: integer): TRectWH; begin Result.Left := left; Result.Top := top; Result.Width := width; Result.Height := height; end; //------------------------------------------------------------------------------ function RectWH(left, top, width, height: double): TRectWH; begin Result.Left := left; Result.Top := top; Result.Width := width; Result.Height := height; end; //------------------------------------------------------------------------------ function RectWH(const rec: TRectD): TRectWH; begin Result.Left := rec.left; Result.Top := rec.top; Result.Width := rec.width; Result.Height := rec.height; end; //------------------------------------------------------------------------------ function RectsEqual(const rec1, rec2: TRect): Boolean; begin result := (rec1.Left = rec2.Left) and (rec1.Top = rec2.Top) and (rec1.Right = rec2.Right) and (rec1.Bottom = rec2.Bottom); end; //------------------------------------------------------------------------------ function Rect(const left, top, right, bottom: integer): TRect; begin Result.Left := left; Result.Top := top; Result.Right := right; Result.Bottom := bottom; end; //------------------------------------------------------------------------------ function IsValid(value: integer): Boolean; begin Result := value <> -MaxInt; end; //------------------------------------------------------------------------------ function IsValid(value: double): Boolean; begin Result := value <> InvalidD; end; //------------------------------------------------------------------------------ function IsValid(const pt: TPoint): Boolean; begin result := (pt.X <> Invalid) and (pt.Y <> Invalid); end; //------------------------------------------------------------------------------ function IsValid(const pt: TPointD): Boolean; begin result := (pt.X <> -Infinity) and (pt.Y <> -Infinity); end; //------------------------------------------------------------------------------ function IsValid(const rec: TRect): Boolean; begin result := (rec.Left <> MaxInt) and (rec.Top <> MaxInt); end; //------------------------------------------------------------------------------ function Point(X,Y: Integer): TPoint; begin result.X := X; result.Y := Y; end; //------------------------------------------------------------------------------ function Point(const pt: TPointD): TPoint; begin result.X := Round(pt.x); result.Y := Round(pt.y); end; //------------------------------------------------------------------------------ function PointsEqual(const pt1, pt2: TPointD): Boolean; begin result := (pt1.X = pt2.X) and (pt1.Y = pt2.Y); end; //------------------------------------------------------------------------------ function PointsNearEqual(const pt1, pt2: TPoint; dist: integer): Boolean; begin Result := (Abs(pt1.X - pt2.X) <= dist) and (Abs(pt1.Y - pt2.Y) < dist); end; //------------------------------------------------------------------------------ function PointsNearEqual(const pt1, pt2: TPointD; distSqrd: double): Boolean; begin Result := Sqr(pt1.X - pt2.X) + Sqr(pt1.Y - pt2.Y) < distSqrd; end; //------------------------------------------------------------------------------ function StripNearDuplicates(const path: TPathD; minDist: double; isClosedPath: Boolean): TPathD; var i,j, len: integer; begin len := length(path); NewPointDArray(Result, len, True); if len = 0 then Exit; Result[0] := path[0]; j := 0; minDist := minDist * minDist; for i := 1 to len -1 do if not PointsNearEqual(Result[j], path[i], minDist) then begin inc(j); Result[j] := path[i]; end; if isClosedPath and PointsNearEqual(Result[j], Result[0], minDist) then dec(j); SetLength(Result, j +1); end; //------------------------------------------------------------------------------ function StripNearDuplicates(const paths: TPathsD; minLength: double; isClosedPaths: Boolean): TPathsD; var i, len: integer; begin len := Length(paths); SetLength(Result, len); for i := 0 to len -1 do Result[i] := StripNearDuplicates(paths[i], minLength, isClosedPaths); end; //------------------------------------------------------------------------------ function ValueAlmostZero(val: double; epsilon: double = 0.001): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin Result := Abs(val) < epsilon; end; //------------------------------------------------------------------------------ function ValueAlmostOne(val: double; epsilon: double = 0.001): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin Result := Abs(val-1) < epsilon; end; //------------------------------------------------------------------------------ procedure GetSinCos(angle: double; out sinA, cosA: double); {$IFDEF INLINE} inline; {$ENDIF} {$IFNDEF FPC} var s, c: extended; {$ENDIF} begin {$IFDEF FPC} Math.SinCos(angle, sinA, cosA); {$ELSE} Math.SinCos(angle, s, c); sinA := s; cosA := c; {$ENDIF} end; //------------------------------------------------------------------------------ function GetRotatedRectBounds(const rec: TRect; angle: double): TRect; var p: TPathD; mp: TPointD; begin p := Rectangle(rec); mp := PointD((rec.Left + rec.Right)/2, (rec.Top + rec.Bottom)/2); if angle <> 0 then p := RotatePath(p, mp, angle); Result := GetBounds(p); end; //------------------------------------------------------------------------------ function GetRotatedRectBounds(const rec: TRectD; angle: double): TRectD; var p: TPathD; mp: TPointD; begin p := Rectangle(rec); mp := PointD((rec.Left + rec.Right)/2, (rec.Top + rec.Bottom)/2); if angle <> 0 then p := RotatePath(p, mp, angle); Result := GetBoundsD(p); end; //------------------------------------------------------------------------------ function Rect(const recD: TRectD): TRect; begin // see https://github.com/AngusJohnson/Image32/issues/15 Result.Left := Floor(recD.Left + DoubleTolerance); Result.Top := Floor(recD.Top + DoubleTolerance); Result.Right := Ceil(recD.Right - DoubleTolerance); Result.Bottom := Ceil(recD.Bottom - DoubleTolerance); end; //------------------------------------------------------------------------------ function PtInRect(const rec: TRectD; const pt: TPointD): Boolean; begin Result := (pt.X >= rec.Left) and (pt.X < rec.Right) and (pt.Y >= rec.Top) and (pt.Y < rec.Bottom); end; //------------------------------------------------------------------------------ function Size(cx, cy: integer): TSize; begin Result.cx := cx; Result.cy := cy; end; //------------------------------------------------------------------------------ function SizeD(cx, cy: double): TSizeD; begin Result.cx := cx; Result.cy := cy; end; //------------------------------------------------------------------------------ function IsClockwise(const path: TPathD): Boolean; begin Result := Area(path) > 0; end; //------------------------------------------------------------------------------ function IsSimpleRectanglePath(const path: TPathD; var R: TRect): Boolean; type TLastMatch = (lmX, lmY); var i: Integer; lastMatch: TLastMatch; begin Result := False; // If we have a single path with 4 points, it could be a rectangle if Length(path) = 4 then begin // For a rectangle the X and Y coordinates of the points alternate // in being equal if path[0].X = path[3].X then lastMatch := lmX else if path[0].Y = path[3].Y then lastMatch := lmY else Exit; R.Left := Trunc(path[0].X); R.Top := Trunc(path[0].Y); R.Right := Ceil(path[0].X); R.Bottom := Ceil(path[0].Y); for i := 1 to 3 do begin case lastMatch of lmY: // now the X-coordinates must be equal begin if path[i].X <> path[i - 1].X then Exit; lastMatch := lmX; R.Top := Min(R.Top, Trunc(path[i].Y)); R.Bottom := Max(R.Bottom, Ceil(path[i].Y)); end; lmX: // now the Y-coordinates must be equal begin if path[i].Y <> path[i - 1].Y then Exit; lastMatch := lmY; R.Left := Min(R.Left, Trunc(path[i].X)); R.Right := Max(R.Right, Ceil(path[i].X)); end; end; end; Result := True; end; end; //------------------------------------------------------------------------------ function IsSimpleRectanglePath(const paths: TPathsD; var R: TRect): Boolean; begin if (Length(paths) = 1) and (Length(paths[0]) = 4) then Result := IsSimpleRectanglePath(paths[0], r) else Result := False; end; //------------------------------------------------------------------------------ function Area(const path: TPathD): Double; var i, j, highI: Integer; d: Double; begin Result := 0.0; highI := High(path); if (highI < 2) then Exit; j := highI; for i := 0 to highI do begin d := (path[j].X + path[i].X); Result := Result + d * (path[j].Y - path[i].Y); j := i; end; Result := -Result * 0.5; end; //------------------------------------------------------------------------------ procedure TranslateRect(var rec: TRect; dx, dy: integer); begin rec.Left := rec.Left + dx; rec.Top := rec.Top + dy; rec.Right := rec.Right + dx; rec.Bottom := rec.Bottom + dy; end; //------------------------------------------------------------------------------ procedure TranslateRect(var rec: TRectD; dx, dy: double); begin rec.Left := rec.Left + dx; rec.Top := rec.Top + dy; rec.Right := rec.Right + dx; rec.Bottom := rec.Bottom + dy; end; //------------------------------------------------------------------------------ function MakeSquare(rec: TRect): TRect; var i: integer; begin Result := rec; i := ((rec.Right - rec.Left) + (rec.Bottom - rec.Top)) div 2; Result.Right := Result.Left + i; Result.Bottom := Result.Top + i; end; //------------------------------------------------------------------------------ function MidPoint(const rec: TRect): TPoint; begin Result.X := (rec.Left + rec.Right) div 2; Result.Y := (rec.Top + rec.Bottom) div 2; end; //------------------------------------------------------------------------------ function MidPoint(const rec: TRectD): TPointD; begin Result.X := (rec.Left + rec.Right) * 0.5; Result.Y := (rec.Top + rec.Bottom) * 0.5; end; //------------------------------------------------------------------------------ function MidPoint(const pt1, pt2: TPoint): TPoint; begin Result.X := (pt1.X + pt2.X) div 2; Result.Y := (pt1.Y + pt2.Y) div 2; end; //------------------------------------------------------------------------------ function MidPoint(const pt1, pt2: TPointD): TPointD; begin Result.X := (pt1.X + pt2.X) * 0.5; Result.Y := (pt1.Y + pt2.Y) * 0.5; end; //------------------------------------------------------------------------------ function Average(val1, val2: integer): integer; begin Result := (val1 + val2) div 2; end; //------------------------------------------------------------------------------ function Average(val1, val2: double): double; begin Result := (val1 + val2) * 0.5; end; //------------------------------------------------------------------------------ function RectsOverlap(const rec1, rec2: TRect): Boolean; begin Result := (rec1.Left < rec2.Right) and (rec1.Right > rec2.Left) and (rec1.Top < rec2.Bottom) and (rec1.Bottom > rec2.Top); end; //------------------------------------------------------------------------------ function IsSameRect(const rec1, rec2: TRect): Boolean; begin Result := (rec1.Left = rec2.Left) and (rec1.Top = rec2.Top) and (rec1.Right = rec2.Right) and (rec1.Bottom = rec2.Bottom); end; //------------------------------------------------------------------------------ function RectsIntersect(const rec1, rec2: TRect): Boolean; var dummy: TRect; begin Result := Types.IntersectRect(dummy, rec1, rec2); end; //------------------------------------------------------------------------------ function RectsIntersect(const rec1, rec2: TRectD): Boolean; begin Result := not IntersectRect(rec1, rec2).IsEmpty; end; //------------------------------------------------------------------------------ function IntersectRect(const rec1, rec2: TRectD): TRectD; begin result.Left := Max(rec1.Left, rec2.Left); result.Top := Max(rec1.Top, rec2.Top); result.Right := Min(rec1.Right, rec2.Right); result.Bottom := Min(rec1.Bottom, rec2.Bottom); end; //------------------------------------------------------------------------------ function UnionRect(const rec1, rec2: TRect): TRect; begin if IsEmptyRect(rec1) then Result := rec2 else if IsEmptyRect(rec2) then Result := rec1 else begin result.Left := Min(rec1.Left, rec2.Left); result.Top := Min(rec1.Top, rec2.Top); result.Right := Max(rec1.Right, rec2.Right); result.Bottom := Max(rec1.Bottom, rec2.Bottom); end; end; //------------------------------------------------------------------------------ function UnionRect(const rec1, rec2: TRectD): TRectD; begin if IsEmptyRect(rec1) then Result := rec2 else if IsEmptyRect(rec2) then Result := rec1 else begin result.Left := Min(rec1.Left, rec2.Left); result.Top := Min(rec1.Top, rec2.Top); result.Right := Max(rec1.Right, rec2.Right); result.Bottom := Max(rec1.Bottom, rec2.Bottom); end; end; //------------------------------------------------------------------------------ function MakeArrayOfInteger(const ints: array of integer): TArrayOfInteger; var i, len: integer; begin len := Length(ints); NewIntegerArray(Result, len, True); for i := 0 to len -1 do Result[i] := ints[i]; end; //------------------------------------------------------------------------------ function MakeArrayOfDouble(const doubles: array of double): TArrayOfDouble; var i, len: integer; begin len := Length(doubles); SetLength(Result, len); for i := 0 to len -1 do Result[i] := doubles[i]; end; //------------------------------------------------------------------------------ function CrossProduct(const vector1, vector2: TPointD): double; begin result := vector1.X * vector2.Y - vector2.X * vector1.Y; end; //------------------------------------------------------------------------------ function CrossProduct(const pt1, pt2, pt3: TPointD): double; var x1,x2,y1,y2: double; begin x1 := pt2.X - pt1.X; y1 := pt2.Y - pt1.Y; x2 := pt3.X - pt2.X; y2 := pt3.Y - pt2.Y; result := (x1 * y2 - y1 * x2); end; //--------------------------------------------------------------------------- function CrossProduct(const pt1, pt2, pt3, pt4: TPointD): double; var x1,x2,y1,y2: double; begin x1 := pt2.X - pt1.X; y1 := pt2.Y - pt1.Y; x2 := pt4.X - pt3.X; y2 := pt4.Y - pt3.Y; result := (x1 * y2 - y1 * x2); end; //--------------------------------------------------------------------------- function DotProduct(const vector1, vector2: TPointD): double; begin result := vector1.X * vector2.X + vector1.Y * vector2.Y; end; //------------------------------------------------------------------------------ function DotProduct(const pt1, pt2, pt3: TPointD): double; var x1,x2,y1,y2: double; begin x1 := pt2.X - pt1.X; y1 := pt2.Y - pt1.Y; x2 := pt2.X - pt3.X; y2 := pt2.Y - pt3.Y; result := (x1 * x2 + y1 * y2); end; //------------------------------------------------------------------------------ function TurnsLeft(const pt1, pt2, pt3: TPointD): boolean; begin result := CrossProduct(pt1, pt2, pt3) < 0; end; //------------------------------------------------------------------------------ function TurnsRight(const pt1, pt2, pt3: TPointD): boolean; begin result := CrossProduct(pt1, pt2, pt3) > 0; end; //------------------------------------------------------------------------------ function IsPathConvex(const path: TPathD): Boolean; var i, pathLen: integer; dir: boolean; begin result := false; pathLen := length(path); if pathLen < 3 then Exit; //get the winding direction of the first angle dir := TurnsRight(path[0], path[1], path[2]); //check that each other angle has the same winding direction for i := 1 to pathLen -1 do if TurnsRight(path[i], path[(i+1) mod pathLen], path[(i+2) mod pathLen]) <> dir then Exit; result := true; end; //------------------------------------------------------------------------------ function GetUnitVector(const pt1, pt2: TPointD): TPointD; var dx, dy, inverseHypot: Double; begin if (pt1.x = pt2.x) and (pt1.y = pt2.y) then begin Result.X := 0; Result.Y := 0; Exit; end; dx := (pt2.X - pt1.X); dy := (pt2.Y - pt1.Y); inverseHypot := 1 / Hypot(dx, dy); dx := dx * inverseHypot; dy := dy * inverseHypot; Result.X := dx; Result.Y := dy; end; //------------------------------------------------------------------------------ function GetUnitNormal(const pt1, pt2: TPointD): TPointD; begin if not GetUnitNormal(pt1, pt2, Result) then Result := NullPointD; end; //------------------------------------------------------------------------------ function GetUnitNormal(const pt1, pt2: TPointD; out norm: TPointD): Boolean; var dx, dy, inverseHypot: Double; begin result := not PointsNearEqual(pt1, pt2, 0.001); if not result then Exit; dx := (pt2.X - pt1.X); dy := (pt2.Y - pt1.Y); inverseHypot := 1 / Hypot(dx, dy); dx := dx * inverseHypot; dy := dy * inverseHypot; norm.X := dy; norm.Y := -dx end; //------------------------------------------------------------------------------ function NormalizeVector(const vec: TPointD): TPointD; var h, inverseHypot: Double; begin h := Hypot(vec.X, vec.Y); if ValueAlmostZero(h, 0.001) then begin Result := NullPointD; Exit; end; inverseHypot := 1 / h; Result.X := vec.X * inverseHypot; Result.Y := vec.Y * inverseHypot; end; //------------------------------------------------------------------------------ function GetAvgUnitVector(const vec1, vec2: TPointD): TPointD; begin Result := NormalizeVector(PointD(vec1.X + vec2.X, vec1.Y + vec2.Y)); end; //------------------------------------------------------------------------------ function Paths(const path: TPathD): TPathsD; begin SetLength(Result, 1); result[0] := Copy(path, 0, length(path)); end; //------------------------------------------------------------------------------ function CopyPath(const path: TPathD): TPathD; begin Result := Copy(path, 0, Length(path)); end; //------------------------------------------------------------------------------ function CopyPaths(const paths: TPathsD): TPathsD; var i, len1: integer; begin len1 := length(paths); setLength(result, len1); for i := 0 to len1 -1 do result[i] := Copy(paths[i], 0, length(paths[i])); end; //------------------------------------------------------------------------------ function TranslatePoint(const pt: TPoint; dx, dy: integer): TPoint; begin result.x := pt.x + dx; result.y := pt.y + dy; end; //------------------------------------------------------------------------------ function TranslatePoint(const pt: TPointD; dx, dy: double): TPointD; begin result.x := pt.x + dx; result.y := pt.y + dy; end; //------------------------------------------------------------------------------ function TranslatePath(const path: TPathD; dx, dy: double): TPathD; var i, len: integer; begin len := length(path); NewPointDArray(result, len, True); for i := 0 to len -1 do begin result[i].x := path[i].x + dx; result[i].y := path[i].y + dy; end; end; //------------------------------------------------------------------------------ function TranslatePath(const paths: TPathsD; dx, dy: double): TPathsD; var i,len: integer; begin len := length(paths); setLength(result, len); for i := 0 to len -1 do result[i] := TranslatePath(paths[i], dx, dy); end; //------------------------------------------------------------------------------ function TranslatePath(const ppp: TArrayOfPathsD; dx, dy: double): TArrayOfPathsD; var i,len: integer; begin len := length(ppp); setLength(result, len); for i := 0 to len -1 do result[i] := TranslatePath(ppp[i], dx, dy); end; //------------------------------------------------------------------------------ function ScalePoint(const pt: TPointD; scale: double): TPointD; begin Result.X := pt.X * scale; Result.Y := pt.Y * scale; end; //------------------------------------------------------------------------------ function ScalePoint(const pt: TPointD; sx, sy: double): TPointD; begin Result.X := pt.X * sx; Result.Y := pt.Y * sy; end; //------------------------------------------------------------------------------ function ScalePath(const path: TPathD; sx, sy: double): TPathD; var i, len: integer; begin if (sx = 0) or (sy = 0) then Result := nil else if ((sx = 1) and (sy = 1)) then begin Result := Copy(path, 0, Length(path)); end else begin len := length(path); NewPointDArray(result, len, True); for i := 0 to len -1 do begin result[i].x := path[i].x * sx; result[i].y := path[i].y * sy; end; end; end; //------------------------------------------------------------------------------ function ScalePath(const path: TPathD; scale: double): TPathD; begin result := ScalePath(path, scale, scale); end; //------------------------------------------------------------------------------ function ScalePath(const paths: TPathsD; sx, sy: double): TPathsD; var i,len: integer; begin len := length(paths); setLength(result, len); for i := 0 to len -1 do result[i] := ScalePath(paths[i], sx, sy); end; //------------------------------------------------------------------------------ function ScalePath(const paths: TPathsD; scale: double): TPathsD; begin result := ScalePath(paths, scale, scale); end; //------------------------------------------------------------------------------ function ScaleRect(const rec: TRect; scale: double): TRect; begin result := rec; Result.Left := Round(Result.Left * scale); Result.Top := Round(Result.Top * scale); Result.Right := Round(Result.Right * scale); Result.Bottom := Round(Result.Bottom * scale); end; //------------------------------------------------------------------------------ function ScaleRect(const rec: TRect; sx, sy: double): TRect; begin result := rec; Result.Left := Round(Result.Left * sx); Result.Top := Round(Result.Top * sy); Result.Right := Round(Result.Right * sx); Result.Bottom := Round(Result.Bottom * sy); end; //------------------------------------------------------------------------------ function ScaleRect(const rec: TRectD; scale: double): TRectD; begin result := rec; Result.Left := Result.Left * scale; Result.Top := Result.Top * scale; Result.Right := Result.Right * scale; Result.Bottom := Result.Bottom * scale; end; //------------------------------------------------------------------------------ function ScaleRect(const rec: TRectD; sx, sy: double): TRectD; begin result := rec; Result.Left := Result.Left * sx; Result.Top := Result.Top * sy; Result.Right := Result.Right * sx; Result.Bottom := Result.Bottom * sy; end; //------------------------------------------------------------------------------ function ScalePathToFit(const path: TPathD; const rec: TRect): TPathD; var pathWidth, pathHeight, outHeight, outWidth: integer; pathBounds: TRect; scale: double; begin pathBounds := GetBounds(path); RectWidthHeight(pathBounds, pathWidth, pathHeight); RectWidthHeight(rec, outWidth, outHeight); Result := TranslatePath(path, rec.Left - pathBounds.Left, rec.Top - pathBounds.Top); if outWidth / pathWidth < outHeight / pathHeight then scale := outWidth / pathWidth else scale := outHeight / pathHeight; Result := ScalePath(Result, scale, scale); end; //------------------------------------------------------------------------------ function ScalePathsToFit(const paths: TPathsD; const rec: TRect): TPathsD; var pathWidth, pathHeight, outHeight, outWidth: integer; pathBounds: TRect; scale: double; begin pathBounds := GetBounds(paths); RectWidthHeight(pathBounds, pathWidth, pathHeight); RectWidthHeight(rec, outWidth, outHeight); Result := TranslatePath(paths, rec.Left - pathBounds.Left, rec.Top - pathBounds.Top); if outWidth / pathWidth < outHeight / pathHeight then scale := outWidth / pathWidth else scale := outHeight / pathHeight; Result := ScalePath(Result, scale, scale); end; //------------------------------------------------------------------------------ function ReversePath(const path: TPathD): TPathD; var i, highI: integer; begin highI := High(path); NewPointDArray(result, highI +1, True); for i := 0 to highI do result[i] := path[highI -i]; end; //------------------------------------------------------------------------------ function ReversePath(const paths: TPathsD): TPathsD; var i, len: integer; begin len := Length(paths); SetLength(result, len); for i := 0 to len -1 do result[i] := ReversePath(paths[i]); end; //------------------------------------------------------------------------------ function OpenPathToFlatPolygon(const path: TPathD): TPathD; var i, len, len2: integer; begin len := Length(path); len2 := Max(0, len - 2); NewPointDArray(Result, len + len2, True); if len = 0 then Exit; Move(path[0], Result[0], len * SizeOf(TPointD)); if len2 = 0 then Exit; for i := 0 to len - 3 do result[len + i] := path[len - 2 -i]; end; //------------------------------------------------------------------------------ function GetVectors(const path: TPathD): TPathD; var i,j, len: cardinal; pt: TPointD; begin len := length(path); NewPointDArray(result, len, True); if len = 0 then Exit; pt := path[0]; //skip duplicates i := len -1; while (i > 0) and (path[i].X = pt.X) and (path[i].Y = pt.Y) do dec(i); if (i = 0) then begin //all points are equal! for i := 0 to len -1 do result[i] := PointD(0,0); Exit; end; result[i] := GetUnitVector(path[i], pt); //fix up any duplicates at the end of the path for j := i +1 to len -1 do result[j] := result[j-1]; //with at least one valid vector, we can now //safely get the remaining vectors pt := path[i]; for i := i -1 downto 0 do begin if (path[i].X <> pt.X) or (path[i].Y <> pt.Y) then begin result[i] := GetUnitVector(path[i], pt); pt := path[i]; end else result[i] := result[i+1] end; end; //------------------------------------------------------------------------------ function GetNormals(const path: TPathD): TPathD; var i, highI: integer; last: TPointD; begin highI := High(path); NewPointDArray(result, highI+1, True); if highI < 0 then Exit; last := NullPointD; for i := 0 to highI -1 do begin if GetUnitNormal(path[i], path[i+1], result[i]) then last := result[i] else result[i] := last; end; if GetUnitNormal(path[highI], path[0], result[highI]) then last := result[highI]; for i := 0 to highI do begin if (result[i].X <> 0) or (result[i].Y <> 0) then Break; result[i] := last; end; end; //------------------------------------------------------------------------------ function DistanceSqrd(const pt1, pt2: TPoint): double; begin result := Sqr(pt1.X - pt2.X) + Sqr(pt1.Y - pt2.Y); end; //------------------------------------------------------------------------------ function DistanceSqrd(const pt1, pt2: TPointD): double; begin result := Sqr(pt1.X - pt2.X) + Sqr(pt1.Y - pt2.Y); end; //------------------------------------------------------------------------------ function Distance(const pt1, pt2: TPoint): double; begin Result := Sqrt(DistanceSqrd(pt1, pt2)); end; //------------------------------------------------------------------------------ function Distance(const pt1, pt2: TPointD): double; begin Result := Sqrt(DistanceSqrd(pt1, pt2)); end; //------------------------------------------------------------------------------ function Distance(const path: TPathD; stopAt: integer): double; var i, highI: integer; begin Result := 0; highI := High(path); if (stopAt > 0) and (stopAt < HighI) then highI := stopAt; for i := 1 to highI do Result := Result + Distance(path[i-1],path[i]); end; //------------------------------------------------------------------------------ function GetDistances(const path: TPathD): TArrayOfDouble; var i, len: integer; begin len := Length(path); SetLength(Result, len); if len = 0 then Exit; Result[0] := 0; for i := 1 to len -1 do Result[i] := Distance(path[i-1], path[i]); end; //------------------------------------------------------------------------------ function GetCumulativeDistances(const path: TPathD): TArrayOfDouble; var i, len: integer; begin len := Length(path); SetLength(Result, len); if len = 0 then Exit; Result[0] := 0; for i := 1 to len -1 do Result[i] := Result[i-1] + Distance(path[i-1], path[i]); end; //------------------------------------------------------------------------------ function PerpendicularDistSqrd(const pt, line1, line2: TPointD): double; var a,b,c,d: double; begin if PointsEqual(line1, line2) then begin Result := DistanceSqrd(pt, line1); end else begin a := pt.X - line1.X; b := pt.Y - line1.Y; c := line2.X - line1.X; d := line2.Y - line1.Y; if (c = 0) and (d = 0) then result := 0 else result := Sqr(a * d - c * b) / (c * c + d * d); end; end; //------------------------------------------------------------------------------ function PointInPolyWindingCount(const pt: TPointD; const path: TPathD; out PointOnEdgeDir: integer): integer; var i, len: integer; prevPt: TPointD; isAbove: Boolean; crossProd: double; begin //nb: PointOnEdgeDir == 0 unless 'pt' is on 'path' Result := 0; PointOnEdgeDir := 0; i := 0; len := Length(path); if len = 0 then Exit; prevPt := path[len-1]; while (i < len) and (path[i].Y = prevPt.Y) do inc(i); if i = len then Exit; isAbove := (prevPt.Y < pt.Y); while (i < len) do begin if isAbove then begin while (i < len) and (path[i].Y < pt.Y) do inc(i); if i = len then break else if i > 0 then prevPt := path[i -1]; crossProd := CrossProduct(prevPt, path[i], pt); if crossProd = 0 then begin PointOnEdgeDir := -1; //nb: could safely exit here with frNonZero or frEvenOdd fill rules end else if crossProd < 0 then dec(Result); end else begin while (i < len) and (path[i].Y > pt.Y) do inc(i); if i = len then break else if i > 0 then prevPt := path[i -1]; crossProd := CrossProduct(prevPt, path[i], pt); if crossProd = 0 then begin PointOnEdgeDir := 1; //nb: could safely exit here with frNonZero or frEvenOdd fill rules end else if crossProd > 0 then inc(Result); end; inc(i); isAbove := not isAbove; end; end; //------------------------------------------------------------------------------ function PointInPolygon(const pt: TPointD; const polygon: TPathD; fillRule: TFillRule): Boolean; var wc: integer; PointOnEdgeDir: integer; begin wc := PointInPolyWindingCount(pt, polygon, PointOnEdgeDir); case fillRule of frEvenOdd: result := (PointOnEdgeDir <> 0) or Odd(wc); frNonZero: result := (PointOnEdgeDir <> 0) or (wc <> 0); frPositive: result := (PointOnEdgeDir + wc > 0); else {frNegative} result := (PointOnEdgeDir + wc < 0); end; end; //------------------------------------------------------------------------------ function PointInPolysWindingCount(const pt: TPointD; const paths: TPathsD; out PointOnEdgeDir: integer): integer; var i,j, len: integer; p: TPathD; prevPt: TPointD; isAbove: Boolean; crossProd: double; begin //nb: PointOnEdgeDir == 0 unless 'pt' is on 'path' Result := 0; PointOnEdgeDir := 0; for i := 0 to High(paths) do begin j := 0; p := paths[i]; len := Length(p); if len < 3 then Continue; prevPt := p[len-1]; while (j < len) and (p[j].Y = prevPt.Y) do inc(j); if j = len then continue; isAbove := (prevPt.Y < pt.Y); while (j < len) do begin if isAbove then begin while (j < len) and (p[j].Y < pt.Y) do inc(j); if j = len then break else if j > 0 then prevPt := p[j -1]; crossProd := CrossProduct(prevPt, p[j], pt); if crossProd = 0 then PointOnEdgeDir := -1 else if crossProd < 0 then dec(Result); end else begin while (j < len) and (p[j].Y > pt.Y) do inc(j); if j = len then break else if j > 0 then prevPt := p[j -1]; crossProd := CrossProduct(prevPt, p[j], pt); if crossProd = 0 then PointOnEdgeDir := 1 else if crossProd > 0 then inc(Result); end; inc(j); isAbove := not isAbove; end; end; end; //------------------------------------------------------------------------------ function PointInPolygons(const pt: TPointD; const polygons: TPathsD; fillRule: TFillRule): Boolean; var wc: integer; PointOnEdgeDir: integer; begin wc := PointInPolysWindingCount(pt, polygons, PointOnEdgeDir); case fillRule of frEvenOdd: result := (PointOnEdgeDir <> 0) or Odd(wc); frNonZero: result := (PointOnEdgeDir <> 0) or (wc <> 0); frPositive: result := (PointOnEdgeDir + wc > 0); else {frNegative} result := (PointOnEdgeDir + wc < 0); end; end; //------------------------------------------------------------------------------ function PerpendicularDist(const pt, line1, line2: TPointD): double; var a,b,c,d: double; begin //given: cross product of 2 vectors = area of parallelogram //and given: area of parallelogram = length base * height //height (ie perpendic. dist.) = cross product of 2 vectors / length base a := pt.X - line1.X; b := pt.Y - line1.Y; c := line2.X - line1.X; d := line2.Y - line1.Y; result := abs(a * d - c * b) / Sqrt(c * c + d * d); end; //------------------------------------------------------------------------------ function ClosestPoint(const pt, linePt1, linePt2: TPointD; constrainToSegment: Boolean): TPointD; var q: double; begin if (linePt1.X = linePt2.X) and (linePt1.Y = linePt2.Y) then begin Result := linePt1; end else begin q := ((pt.X-linePt1.X)*(linePt2.X-linePt1.X) + (pt.Y-linePt1.Y)*(linePt2.Y-linePt1.Y)) / (sqr(linePt2.X-linePt1.X) + sqr(linePt2.Y-linePt1.Y)); if constrainToSegment then begin if q < 0 then q := 0 else if q > 1 then q := 1; end; Result.X := (1-q)*linePt1.X + q*linePt2.X; Result.Y := (1-q)*linePt1.Y + q*linePt2.Y; end; end; //------------------------------------------------------------------------------ function ClosestPointOnLine(const pt, linePt1, linePt2: TPointD): TPointD; begin result := ClosestPoint(pt, linePt1, linePt2, false); end; //------------------------------------------------------------------------------ function ClosestPointOnSegment(const pt, segPt1, segPt2: TPointD): TPointD; begin result := ClosestPoint(pt, segPt1, segPt2, true); end; //------------------------------------------------------------------------------ function GetPtOnEllipseFromAngle(const ellipseRect: TRectD; angle: double): TPointD; var sn, co: double; begin NormalizeAngle(angle); GetSinCos(angle, sn, co); Result.X := ellipseRect.MidPoint.X + ellipseRect.Width/2 * co; Result.Y := ellipseRect.MidPoint.Y + ellipseRect.Height/2 * sn; end; //------------------------------------------------------------------------------ function GetEllipticalAngleFromPoint(const ellipseRect: TRectD; const pt: TPointD): double; begin with ellipseRect do Result := ArcTan2(Width/Height * (pt.Y - MidPoint.Y), (pt.X - MidPoint.X)); end; //------------------------------------------------------------------------------ function GetRotatedEllipticalAngleFromPoint(const ellipseRect: TRectD; ellipseRotAngle: double; pt: TPointD): double; begin Result := 0; if ellipseRect.IsEmpty then Exit; RotatePoint(pt, ellipseRect.MidPoint, -ellipseRotAngle); Result := GetEllipticalAngleFromPoint(ellipseRect, pt); end; //------------------------------------------------------------------------------ function GetPtOnRotatedEllipseFromAngle(const ellipseRect: TRectD; ellipseRotAngle, angle: double): TPointD; begin Result := GetPtOnEllipseFromAngle(ellipseRect, angle); if ellipseRotAngle <> 0 then img32.Vector.RotatePoint(Result, ellipseRect.MidPoint, ellipseRotAngle); end; //------------------------------------------------------------------------------ function GetClosestPtOnRotatedEllipse(const ellipseRect: TRectD; ellipseRotation: double; const pt: TPointD): TPointD; var pt2: TPointD; angle: double; begin pt2 := pt; Img32.Vector.RotatePoint(pt2, ellipseRect.MidPoint, -ellipseRotation); angle := GetEllipticalAngleFromPoint(ellipseRect, pt2); Result := GetPtOnEllipseFromAngle(ellipseRect, angle); Img32.Vector.RotatePoint(Result, ellipseRect.MidPoint, ellipseRotation); end; //------------------------------------------------------------------------------ function IsPointInEllipse(const ellipseRec: TRect; const pt: TPoint): Boolean; var rec: TRectD; w,h: integer; x,y, y2, a,b, dx,dy: double; begin RectWidthHeight(ellipseRec, w, h); a := w * 0.5; b := h * 0.5; dx := ellipseRec.Left + a; dy := ellipseRec.Top + b; rec := RectD(ellipseRec); TranslateRect(rec, -dx, -dy); x := pt.X -dx; y := pt.Y -dy; //first make sure pt is inside rect Result := (abs(x) <= a) and (abs(y) <= b); if not result then Exit; //given (x*x)/(a*a) + (y*y)/(b*b) = 1 //then y*y = b*b(1 - (x*x)/(a*a)) //nb: contents of Sqrt below will always be positive //since the substituted x must be within ellipseRec bounds y2 := Sqrt((b*b*(1 - (x*x)/(a*a)))); Result := (y >= -y2) and (y <= y2); end; //------------------------------------------------------------------------------ function GetLineEllipseIntersects(const ellipseRec: TRect; var linePt1, linePt2: TPointD): Boolean; var dx, dy, m,a,b,c,q: double; qa,qb,qc,qs: double; rec: TRectD; pt1, pt2: TPointD; begin rec := RectD(ellipseRec); a := rec.Width *0.5; b := rec.Height *0.5; //offset ellipseRect so it's centered over the coordinate origin dx := ellipseRec.Left + a; dy := ellipseRec.Top + b; TranslateRect(rec, -dx, -dy); pt1 := TranslatePoint(linePt1, -dx, -dy); pt2 := TranslatePoint(linePt2, -dx, -dy); //equation of ellipse = (x*x)/(a*a) + (y*y)/(b*b) = 1 //equation of line = y = mx + c; if (pt1.X = pt2.X) then //vertical line (ie infinite slope) begin //given x = K, then y*y = b*b(1 - (x*x)/(a*a)) q := (b*b)*(1 - Sqr(pt1.X)/(a*a)); result := q >= 0; if not result then Exit; q := Sqrt(q); pt1.Y := q; pt2.Y := -q; end else begin //using simultaneous equations and substitution //given y = mx + c m := (pt1.Y - pt2.Y)/(pt1.X - pt2.X); c := pt1.Y - m * pt1.X; //given (x*x)/(a*a) + (y*y)/(b*b) = 1 //(x*x)/(a*a)*(b*b) + (y*y) = (b*b) //(b*b)/(a*a) *(x*x) + Sqr(m*x +c) = (b*b) //(b*b)/(a*a) *(x*x) + (m*m)*(x*x) + 2*m*x*c +c*c = b*b //((b*b)/(a*a) +(m*m)) *(x*x) + 2*m*c*(x) + (c*c) - (b*b) = 0 //solving quadratic equation qa := ((b*b)/(a*a) +(m*m)); qb := 2*m*c; qc := (c*c) - (b*b); qs := (qb*qb) - 4*qa*qc; Result := qs >= 0; if not result then Exit; qs := Sqrt(qs); pt1.X := (-qb +qs)/(2 * qa); pt1.Y := m * pt1.X + c; pt2.X := (-qb -qs)/(2 * qa); pt2.Y := m * pt2.X + c; end; //finally reverse initial offset linePt1 := TranslatePoint(pt1, dx, dy); linePt2 := TranslatePoint(pt2, dx, dy); end; //------------------------------------------------------------------------------ function Sign(const value: Double): integer; {$IFDEF INLINE} inline; {$ENDIF} begin if value < 0 then Result := -1 else if value > 0 then Result := 1 else Result := 0; end; //------------------------------------------------------------------------------ function ApplyNormal(const pt, norm: TPointD; delta: double): TPointD; {$IFDEF INLINE} inline; {$ENDIF} begin result := PointD(pt.X + norm.X * delta, pt.Y + norm.Y * delta); end; //------------------------------------------------------------------------------ procedure AppendPoint(var path: TPathD; const extra: TPointD); var len: integer; begin len := length(path); SetLengthUninit(path, len +1); path[len] := extra; end; //------------------------------------------------------------------------------ procedure AppendPath(var paths: TPathsD; const extra: TPathD); var len1, len2: integer; begin len2 := length(extra); if len2 = 0 then Exit; len1 := length(paths); setLength(paths, len1 + 1); paths[len1] := Copy(extra, 0, len2); end; //------------------------------------------------------------------------------ procedure AppendPath(var paths: TPathsD; const extra: TPathsD); var i, len1, len2: integer; begin len2 := length(extra); if len2 = 0 then Exit; len1 := length(paths); setLength(paths, len1 + len2); for i := 0 to len2 -1 do paths[len1+i] := Copy(extra[i], 0, length(extra[i])); end; //------------------------------------------------------------------------------ procedure AppendPath(var ppp: TArrayOfPathsD; const extra: TPathsD); var len: integer; begin len := length(ppp); setLength(ppp, len + 1); if Assigned(extra) then AppendPath(ppp[len], extra) else ppp[len] := nil; end; //------------------------------------------------------------------------------ procedure ConcatPaths(var dstPath: TPathD; const path: TPathD); overload; var len, pathLen: integer; begin // calculate the length of the final array len := Length(dstPath); pathLen := Length(path); if pathLen = 0 then Exit; // Avoid point duplicates where paths join if (len > 0) and PointsEqual(dstPath[len -1], path[0]) then dec(len); // fill the array SetLengthUninit(dstPath, len + pathLen); Move(path[0], dstPath[len], pathLen * SizeOf(TPointD)); end; //------------------------------------------------------------------------------ procedure ConcatPaths(var dstPath: TPathD; const paths: TPathsD); var i, len, pathLen, offset: integer; begin // calculate the length of the final array len := 0; for i := 0 to high(paths) do begin pathLen := Length(paths[i]); if pathLen > 0 then begin // Skip the start-point if it matches the previous path's end-point if (i > 0) and PointsEqual(paths[i][0], paths[i -1][high(paths[i -1])]) then dec(pathLen); inc(len, pathLen); end; end; SetLengthUninit(dstPath, len); // fill the array len := 0; for i := 0 to high(paths) do begin pathLen := Length(paths[i]); if pathLen > 0 then begin offset := 0; // Skip the start-point if it matches the previous path's end-point if (i > 0) and PointsEqual(paths[i][0], paths[i -1][high(paths[i -1])]) then begin dec(pathLen); offset := 1; end; // Skip if we have a path with only one point and that point also matches // the previous path's end-point. if pathLen > 0 then begin Move(paths[i][offset], dstPath[len], pathLen * SizeOf(TPointD)); inc(len, pathLen); end; end; end; end; //------------------------------------------------------------------------------ procedure RotatePoint(var pt: TPointD; const focalPoint: TPointD; sinA, cosA: double); var tmpX, tmpY: double; begin tmpX := pt.X-focalPoint.X; tmpY := pt.Y-focalPoint.Y; pt.X := tmpX * cosA - tmpY * sinA + focalPoint.X; pt.Y := tmpX * sinA + tmpY * cosA + focalPoint.Y; end; //------------------------------------------------------------------------------ procedure RotatePoint(var pt: TPointD; const focalPoint: TPointD; angleRad: double); var sinA, cosA: double; begin if angleRad = 0 then Exit; {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angleRad := -angleRad; {$ENDIF} GetSinCos(angleRad, sinA, cosA); RotatePoint(pt, focalPoint, sinA, cosA); end; //------------------------------------------------------------------------------ function RotatePathInternal(const path: TPathD; const focalPoint: TPointD; sinA, cosA: double): TPathD; var i: integer; x,y: double; begin NewPointDArray(Result, length(path), True); for i := 0 to high(path) do begin x := path[i].X - focalPoint.X; y := path[i].Y - focalPoint.Y; Result[i].X := x * cosA - y * sinA + focalPoint.X; Result[i].Y := x * sinA + y * cosA + focalPoint.Y; end; end; //------------------------------------------------------------------------------ function RotatePath(const path: TPathD; const focalPoint: TPointD; angleRads: double): TPathD; var sinA, cosA: double; begin if angleRads = 0 then begin Result := path; Exit; end; {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angleRads := -angleRads; {$ENDIF} GetSinCos(angleRads, sinA, cosA); Result := RotatePathInternal(path, focalPoint, sinA, cosA); end; //------------------------------------------------------------------------------ function RotatePath(const paths: TPathsD; const focalPoint: TPointD; angleRads: double): TPathsD; var i: integer; sinA, cosA: double; fp: TPointD; begin Result := paths; if not IsValid(angleRads) then Exit; NormalizeAngle(angleRads); if angleRads = 0 then Exit; {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angleRads := -angleRads; {$ENDIF} GetSinCos(angleRads, sinA, cosA); SetLength(Result, length(paths)); if IsValid(focalPoint) then fp := focalPoint else fp := GetBoundsD(paths).MidPoint; for i := 0 to high(paths) do Result[i] := RotatePathInternal(paths[i], fp, sinA, cosA); end; //------------------------------------------------------------------------------ function GetAngle(const origin, pt: TPoint): double; var x,y: double; begin x := pt.X - origin.X; y := pt.Y - origin.Y; if x = 0 then begin if y > 0 then result := angle90 else result := -angle90; end else if y = 0 then begin if x > 0 then result := 0 else result := angle180; end else result := arctan2(y, x); //range between -Pi and Pi {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} Result := -Result; {$ENDIF} end; //------------------------------------------------------------------------------ function GetAngle(const origin, pt: TPointD): double; var x,y: double; begin x := pt.X - origin.X; y := pt.Y - origin.Y; if x = 0 then begin if y > 0 then result := angle90 else result := -angle90; end else if y = 0 then begin if x > 0 then result := 0 else result := angle180; end else result := arctan2(y, x); //range between -Pi and Pi {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} Result := -Result; {$ENDIF} end; //------------------------------------------------------------------------------ function GetAngle(const a, b, c: TPoint): double; var ab, bc: TPointD; dp, cp: double; begin //https://stackoverflow.com/a/3487062/359538 ab := PointD(b.x - a.x, b.y - a.y); bc := PointD(b.x - c.x, b.y - c.y); dp := (ab.x * bc.x + ab.y * bc.y); cp := (ab.x * bc.y - ab.y * bc.x); Result := arctan2(cp, dp); //range between -Pi and Pi {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} Result := -Result; {$ENDIF} end; //------------------------------------------------------------------------------ function GetAngle(const a, b, c: TPointD): double; var ab, bc: TPointD; dp, cp: double; begin //https://stackoverflow.com/a/3487062/359538 ab := PointD(b.x - a.x, b.y - a.y); bc := PointD(b.x - c.x, b.y - c.y); dp := (ab.x * bc.x + ab.y * bc.y); cp := (ab.x * bc.y - ab.y * bc.x); Result := arctan2(cp, dp); //range between -Pi and Pi {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} Result := -Result; {$ENDIF} end; //------------------------------------------------------------------------------ function GetPointAtAngleAndDist(const origin: TPointD; angle, distance: double): TPointD; begin Result := origin; Result.X := Result.X + distance; RotatePoint(Result, origin, angle); end; //------------------------------------------------------------------------------ function IntersectPoint(const ln1a, ln1b, ln2a, ln2b: TPointD): TPointD; var m1,b1,m2,b2: double; begin result := InvalidPointD; //see http://paulbourke.net/geometry/pointlineplane/ if (ln1B.X = ln1A.X) then begin if (ln2B.X = ln2A.X) then exit; //parallel lines m2 := (ln2B.Y - ln2A.Y)/(ln2B.X - ln2A.X); b2 := ln2A.Y - m2 * ln2A.X; Result.X := ln1A.X; Result.Y := m2*ln1A.X + b2; end else if (ln2B.X = ln2A.X) then begin m1 := (ln1B.Y - ln1A.Y)/(ln1B.X - ln1A.X); b1 := ln1A.Y - m1 * ln1A.X; Result.X := ln2A.X; Result.Y := m1*ln2A.X + b1; end else begin m1 := (ln1B.Y - ln1A.Y)/(ln1B.X - ln1A.X); b1 := ln1A.Y - m1 * ln1A.X; m2 := (ln2B.Y - ln2A.Y)/(ln2B.X - ln2A.X); b2 := ln2A.Y - m2 * ln2A.X; if m1 = m2 then exit; //parallel lines Result.X := (b2 - b1)/(m1 - m2); Result.Y := m1 * Result.X + b1; end; end; //------------------------------------------------------------------------------ function IntersectPoint(const ln1a, ln1b, ln2a, ln2b: TPointD; out ip: TPointD): Boolean; begin ip := IntersectPoint(ln1a, ln1b, ln2a, ln2b); Result := IsValid(ip); end; //------------------------------------------------------------------------------ function SegmentIntersectPt(const ln1a, ln1b, ln2a, ln2b: TPointD): TPointD; var pqd,r,s : TPointD; //scalar vectors; rs, t : double; begin //https://stackoverflow.com/a/565282/359538 Result := InvalidPointD; r := PointD(ln1b.X - ln1a.X, ln1b.Y - ln1a.Y); s := PointD(ln2b.X - ln2a.X, ln2b.Y - ln2a.Y); rs := CrossProduct(r,s); if Abs(rs) < 1 then Exit; pqd.X := ln2a.X - ln1a.X; pqd.y := ln2a.Y - ln1a.Y; t := CrossProduct(pqd, s) / rs; if (t < -0.025) or (t > 1.025) then Exit; Result.X := ln1a.X + t * r.X; Result.Y := ln1a.Y + t * r.Y; // pqd.X := -pqd.X; pqd.Y := -pqd.Y; // u := CrossProduct(pqd, r) / rs; // if (u < -0.05) or (u > 1.05) then Exit; end; //------------------------------------------------------------------------------ function SegmentsIntersect(const ln1a, ln1b, ln2a, ln2b: TPointD; out ip: TPointD): Boolean; begin ip := SegmentIntersectPt(ln1a, ln1b, ln2a, ln2b); Result := IsValid(ip); end; //------------------------------------------------------------------------------ function CalcRoundingSteps(radius: double): double; begin //the results of this function have been derived empirically //and may need further adjustment if radius < 0.55 then result := 4 else result := Pi * Sqrt(radius *2); end; //------------------------------------------------------------------------------ function Grow(const path, normals: TPathD; delta: double; joinStyle: TJoinStyle; miterLim: double; scale: double; isOpen: Boolean): TPathD; var resCnt, resCap : integer; norms : TPathD; stepsPerRadian : double; stepSin, stepCos : double; asin, acos : double; procedure AddPoint(const pt: TPointD); begin if resCnt >= resCap then begin inc(resCap, 64); SetLengthUninit(result, resCap); end; result[resCnt] := pt; inc(resCnt); end; procedure DoMiter(j, k: Integer; cosA: Double); var q: Double; begin q := delta / (cosA +1); AddPoint(PointD( path[j].X + (norms[k].X + norms[j].X) *q, path[j].Y + (norms[k].Y + norms[j].Y) *q)); end; procedure DoBevel(j, k: Integer); var absDelta: double; begin if k = j then begin absDelta := Abs(delta); AddPoint(PointD( path[j].x - absDelta * norms[j].x, path[j].y - absDelta * norms[j].y)); AddPoint(PointD( path[j].x + absDelta * norms[j].x, path[j].y + absDelta * norms[j].y)); end else begin AddPoint(PointD( path[j].x + delta * norms[k].x, path[j].y + delta * norms[k].y)); AddPoint(PointD( path[j].x + delta * norms[j].x, path[j].y + delta * norms[j].y)); end; end; procedure DoSquare(j, k: Integer); var vec, ptQ, ptR, ptS, ptT, ptU, ip: TPointD; absDelta: double; begin if k = j then begin vec.X := norms[j].Y; //squaring a line end vec.Y := -norms[j].X; end else begin // using the reciprocal of unit normals (as unit vectors) // get the average unit vector ... vec := GetAvgUnitVector( PointD(-norms[k].Y, norms[k].X), PointD(norms[j].Y, -norms[j].X)); end; absDelta := Abs(delta); ptQ := PointD(path[j].X + absDelta * vec.X, path[j].Y + absDelta * vec.Y); ptR := PointD(ptQ.X + delta * vec.Y, ptQ.Y + delta * -vec.X); ptS := ReflectPoint(ptR, ptQ); // get 2 vertices along one edge offset ptT := PointD( path[k].X + norms[k].X * delta, path[k].Y + norms[k].Y * delta); if (j = k) then begin ptU.X := ptT.X + vec.X * delta; ptU.Y := ptT.Y + vec.Y * delta; ip := IntersectPoint(ptR, ptS, ptT, ptU); AddPoint(ReflectPoint(ip, ptQ)); AddPoint(ip); end else begin ptU := PointD( path[j].X + norms[k].X * delta, path[j].Y + norms[k].Y * delta); ip := IntersectPoint(ptR, ptS, ptT, ptU); AddPoint(ip); AddPoint(ReflectPoint(ip, ptQ)); end; end; procedure DoRound(j, k: Integer); var i, steps: Integer; pt: TPointD; dx, dy, oldDx: double; angle: double; begin // nb: angles may be negative but this will always be a convex join pt := path[j]; if j = k then begin dx := -norms[k].X * delta; dy := -norms[k].Y * delta; end else begin dx := norms[k].X * delta; dy := norms[k].Y * delta; end; AddPoint(PointD(pt.X + dx, pt.Y + dy)); angle := ArcTan2(asin, acos); steps := Ceil(stepsPerRadian * abs(angle)); for i := 2 to steps do begin oldDx := dx; dx := oldDx * stepCos - stepSin * dy; dy := oldDx * stepSin + stepCos * dy; AddPoint(PointD(pt.X + dx, pt.Y + dy)); end; AddPoint(PointD( pt.X + norms[j].X * delta, pt.Y + norms[j].Y * delta)); end; var j, k : cardinal; len : cardinal; steps : double; highI : cardinal; iLo,iHi : cardinal; absDelta : double; begin Result := nil; if not Assigned(path) then exit; len := Length(path); if not isOpen then while (len > 2) and PointsNearEqual(path[len -1], path[0], 0.001) do dec(len); if len < 2 then Exit; if scale = 0 then scale := 1.0; absDelta := Abs(delta); if absDelta * scale < 1 then joinStyle := jsButt else if joinStyle = jsAuto then begin if delta < AutoWidthThreshold / 2 then joinStyle := jsSquare else joinStyle := jsRound; end; if absDelta < MinStrokeWidth/2 then begin if delta < 0 then delta := -MinStrokeWidth/2 else delta := MinStrokeWidth/2; end; if assigned(normals) then norms := normals else norms := GetNormals(path); highI := len -1; stepsPerRadian := 0; if joinStyle = jsRound then begin steps := CalcRoundingSteps(delta * scale); stepSin := sin(TwoPi/steps); stepCos := cos(TwoPi/steps); if (delta < 0) then stepSin := -stepSin; stepsPerRadian := steps / TwoPi; end; if miterLim <= 0 then miterLim := DefaultMiterLimit else if miterLim < 2 then miterLim := 2; miterLim := 2 /(sqr(miterLim)); resCnt := 0; resCap := 0; if isOpen then begin iLo := 1; iHi := highI -1; k := 0; AddPoint(PointD( path[0].X + norms[0].X * delta, path[0].Y + norms[0].Y * delta)); end else begin iLo := 0; iHi := highI; k := highI; end; for j := iLo to iHi do begin if PointsNearEqual(path[j], path[k], 0.01) then begin k := j; // todo - check if needed Continue; end; asin := CrossProduct(norms[k], norms[j]); if (asin > 1.0) then asin := 1.0 else if (asin < -1.0) then asin := -1.0; acos := DotProduct(norms[k], norms[j]); if (acos > -0.999) and (asin * delta < 0) then begin // is concave AddPoint(PointD( path[j].X + norms[k].X * delta, path[j].Y + norms[k].Y * delta)); AddPoint(path[j]); AddPoint(PointD( path[j].X + norms[j].X * delta, path[j].Y + norms[j].Y * delta)); end else if (acos > 0.999) and (joinStyle <> jsRound) then begin // almost straight - less than 2.5 degree, so miter DoMiter(j, k, acos); end else if (joinStyle = jsMiter) then begin if (1 + acos > miterLim) then DoMiter(j, k, acos) else DoSquare(j, k); end else if (joinStyle = jsRound) then DoRound(j, k) else if (joinStyle = jsSquare) then DoSquare(j, k) else DoBevel(j, k); k := j; end; if isOpen then AddPoint(PointD( path[highI].X + norms[highI].X * delta, //todo - check this !!! path[highI].Y + norms[highI].Y * delta)); SetLength(Result, resCnt); end; //------------------------------------------------------------------------------ function GrowOpenLine(const line: TPathD; delta: double; joinStyle: TJoinStyle; endStyle: TEndStyle; miterLim: double = 0; scale: double = 1.0): TPathD; var len : integer; resCnt, resCap : integer; asin, acos : double; stepSin, stepCos : double; stepsPerRadian : double; path, norms : TPathD; procedure AddPoint(const pt: TPointD); begin if resCnt >= resCap then begin inc(resCap, 64); SetLengthUninit(result, resCap); end; result[resCnt] := pt; inc(resCnt); end; procedure DoMiter(j, k: Integer; cosA: Double); var q: Double; begin q := delta / (cosA +1); AddPoint(PointD( path[j].X + (norms[k].X + norms[j].X) *q, path[j].Y + (norms[k].Y + norms[j].Y) *q)); end; procedure DoBevel(j, k: Integer); var absDelta: double; begin if k = j then begin absDelta := Abs(delta); AddPoint(PointD( path[j].x - absDelta * norms[j].x, path[j].y - absDelta * norms[j].y)); AddPoint(PointD( path[j].x + absDelta * norms[j].x, path[j].y + absDelta * norms[j].y)); end else begin AddPoint(PointD( path[j].x + delta * norms[k].x, path[j].y + delta * norms[k].y)); AddPoint(PointD( path[j].x + delta * norms[j].x, path[j].y + delta * norms[j].y)); end; end; procedure DoSquare(j, k: Integer); var vec, ptQ, ptR, ptS, ptT, ptU, ip: TPointD; absDelta: double; begin if k = j then begin vec.X := norms[j].Y; //squaring a line end vec.Y := -norms[j].X; end else begin // using the reciprocal of unit normals (as unit vectors) // get the average unit vector ... vec := GetAvgUnitVector( PointD(-norms[k].Y, norms[k].X), PointD(norms[j].Y, -norms[j].X)); end; absDelta := Abs(delta); ptQ := PointD(path[j].X + absDelta * vec.X, path[j].Y + absDelta * vec.Y); ptR := PointD(ptQ.X + delta * vec.Y, ptQ.Y + delta * -vec.X); ptS := ReflectPoint(ptR, ptQ); // get 2 vertices along one edge offset ptT := PointD( path[k].X + norms[k].X * delta, path[k].Y + norms[k].Y * delta); if (j = k) then begin ptU.X := ptT.X + vec.X * delta; ptU.Y := ptT.Y + vec.Y * delta; ip := IntersectPoint(ptR, ptS, ptT, ptU); AddPoint(ReflectPoint(ip, ptQ)); AddPoint(ip); end else begin ptU := PointD( path[j].X + norms[k].X * delta, path[j].Y + norms[k].Y * delta); ip := IntersectPoint(ptR, ptS, ptT, ptU); AddPoint(ip); AddPoint(ReflectPoint(ip, ptQ)); end; end; procedure DoRound(j, k: Integer); var i, steps: Integer; pt: TPointD; dx, dy, oldDx: double; angle: double; begin // nb: angles may be negative but this will always be a convex join pt := path[j]; if j = k then begin dx := -norms[k].X * delta; dy := -norms[k].Y * delta; angle := PI; end else begin dx := norms[k].X * delta; dy := norms[k].Y * delta; angle := ArcTan2(asin, acos); end; AddPoint(PointD(pt.X + dx, pt.Y + dy)); steps := Ceil(stepsPerRadian * abs(angle)); for i := 2 to steps do begin oldDx := dx; dx := oldDx * stepCos - stepSin * dy; dy := oldDx * stepSin + stepCos * dy; AddPoint(PointD(pt.X + dx, pt.Y + dy)); end; AddPoint(PointD( pt.X + norms[j].X * delta, pt.Y + norms[j].Y * delta)); end; procedure DoPoint(j: Cardinal; var k: Cardinal); begin asin := CrossProduct(norms[k], norms[j]); if (asin > 1.0) then asin := 1.0 else if (asin < -1.0) then asin := -1.0; acos := DotProduct(norms[k], norms[j]); if (acos > -0.999) and (asin * delta < 0) then begin // is concave AddPoint(PointD( path[j].X + norms[k].X * delta, path[j].Y + norms[k].Y * delta)); AddPoint(path[j]); AddPoint(PointD( path[j].X + norms[j].X * delta, path[j].Y + norms[j].Y * delta)); end else if (acos > 0.999) and (joinStyle <> jsRound) then // almost straight - less than 2.5 degree, so miter DoMiter(j, k, acos) else if (joinStyle = jsMiter) then begin if (1 + acos > miterLim) then DoMiter(j, k, acos) else DoSquare(j, k); end else if (joinStyle = jsRound) then DoRound(j, k) else if (joinStyle = jsSquare) then DoSquare(j, k) else DoBevel(j, k); k := j; end; var highJ : cardinal; j, k : cardinal; steps : double; begin Result := nil; path := StripNearDuplicates(line, 0.1, false); len := length(path); if (len = 0) or (delta <= 0) then Exit; // don't specify a minimum delta as this path may be scaled later // if delta < MinStrokeWidth then // delta := MinStrokeWidth; delta := delta * 0.5; if len = 1 then begin with path[0] do result := Ellipse(RectD(x-delta, y-delta, x+delta, y+delta)); Exit; end; //Assert(endStyle <> esClosed); //with very narrow lines, don't get fancy with joins and line ends if (delta <= 1) then begin if (joinStyle = jsRound) and (delta * scale <= 1) then joinStyle := jsButt; if (endStyle = esRound) and (delta * scale <= 1) then endStyle := esSquare; end else if joinStyle = jsAuto then begin if (endStyle = esRound) and (delta * scale >= AutoWidthThreshold) then joinStyle := jsRound else joinStyle := jsSquare; end; stepsPerRadian := 0; if (joinStyle = jsRound) or (endStyle = esRound) then begin steps := CalcRoundingSteps(delta * scale); stepSin := sin(TwoPi/steps); stepCos := cos(TwoPi/steps); if (delta < 0) then stepSin := -stepSin; stepsPerRadian := steps / TwoPi; end; if miterLim <= 0 then miterLim := DefaultMiterLimit else if miterLim < 2 then miterLim := 2; miterLim := 2 /(sqr(miterLim)); norms := GetNormals(path); resCnt := 0; resCap := 0; case endStyle of esButt: DoBevel(0,0); esRound: DoRound(0,0); else DoSquare(0, 0); end; // offset the left side going **forward** k := 0; highJ := len -1; for j := 1 to highJ -1 do DoPoint(j,k); // reverse the normals ... for j := highJ downto 1 do begin norms[j].X := -norms[j-1].X; norms[j].Y := -norms[j-1].Y; end; norms[0] := norms[len -1]; case endStyle of esButt: DoBevel(highJ,highJ); esRound: DoRound(highJ,highJ); else DoSquare(highJ,highJ); end; // offset the left side going **backward** k := highJ; for j := highJ -1 downto 1 do DoPoint(j, k); SetLength(Result, resCnt); end; //------------------------------------------------------------------------------ function GrowClosedLine(const line: TPathD; width: double; joinStyle: TJoinStyle; miterLim: double = 0; scale: double = 1.0): TPathsD; var norms: TPathD; rec: TRectD; skipHole: Boolean; begin rec := GetBoundsD(line); skipHole := (rec.Width <= width) or (rec.Height <= width); if skipHole then begin SetLength(Result, 1); norms := GetNormals(line); Result[0] := Grow(line, norms, width/2, joinStyle, miterLim, scale, false); end else begin SetLength(Result, 2); norms := GetNormals(line); Result[0] := Grow(line, norms, width/2, joinStyle, miterLim, scale, false); Result[1] := ReversePath( Grow(line, norms, -width/2, joinStyle, miterLim, scale, false)); end; end; //------------------------------------------------------------------------------ function RoughOutline(const line: TPathD; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle; miterLim: double = 0; scale: double = 1.0): TPathsD; var lines: TPathsD; begin SetLength(lines,1); lines[0] := line; Result := RoughOutline(lines, lineWidth, joinStyle, endStyle, miterLim, scale); end; //------------------------------------------------------------------------------ function RoughOutline(const lines: TPathsD; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle; miterLim: double = 0; scale: double = 1.0): TPathsD; var i: integer; lwDiv2: double; p: TPathD; begin result := nil; if not assigned(lines) then exit; if joinStyle = jsAuto then begin if endStyle in [esPolygon, esRound] then joinStyle := jsRound else joinStyle := jsSquare; end; if scale = 0 then scale := 1; if endStyle = esPolygon then begin for i := 0 to high(lines) do begin if Length(lines[i]) = 1 then begin lwDiv2 := lineWidth/2; with lines[i][0] do AppendPath(Result, Ellipse(RectD(x-lwDiv2, y-lwDiv2, x+lwDiv2, y+lwDiv2))); end else begin p := StripNearDuplicates(lines[i], 0.1, true); if Length(p) = 2 then AppendPoint(p, p[0]); AppendPath(Result, GrowClosedLine(p, lineWidth, joinStyle, miterLim, scale)); end; end; end else begin SetLength(Result, Length(lines)); for i := 0 to high(lines) do Result[i] := GrowOpenLine(lines[i], lineWidth, joinStyle, endStyle, miterLim, scale); end; end; //------------------------------------------------------------------------------ function Rectangle(const rec: TRect): TPathD; begin NewPointDArray(Result, 4, True); with rec do begin result[0] := PointD(left, top); result[1] := PointD(right, top); result[2] := PointD(right, bottom); result[3] := PointD(left, bottom); end; end; //------------------------------------------------------------------------------ function Rectangle(const rec: TRectD): TPathD; begin NewPointDArray(Result, 4, True); with rec do begin result[0] := PointD(left, top); result[1] := PointD(right, top); result[2] := PointD(right, bottom); result[3] := PointD(left, bottom); end; end; //------------------------------------------------------------------------------ function Rectangle(l, t, r, b: double): TPathD; begin NewPointDArray(Result, 4, True); result[0] := PointD(l, t); result[1] := PointD(r, t); result[2] := PointD(r, b); result[3] := PointD(l, b); end; //------------------------------------------------------------------------------ procedure InflateRect(var rec: TRect; dx, dy: integer); begin rec.Left := rec.Left - dx; rec.Top := rec.Top - dy; rec.Right := rec.Right + dx; rec.Bottom := rec.Bottom + dy; end; //------------------------------------------------------------------------------ procedure InflateRect(var rec: TRectD; dx, dy: double); begin rec.Left := rec.Left - dx; rec.Top := rec.Top - dy; rec.Right := rec.Right + dx; rec.Bottom := rec.Bottom + dy; end; //------------------------------------------------------------------------------ function NormalizeRect(var rect: TRect): Boolean; var i: integer; begin Result := False; with rect do begin if Left > Right then begin i := Left; Left := Right; Right := i; Result := True; end; if Top > Bottom then begin i := Top; Top := Bottom; Bottom := i; Result := True; end; end; end; //------------------------------------------------------------------------------ function RoundRect(const rec: TRect; radius: integer): TPathD; begin Result := RoundRect(RectD(rec), PointD(radius, radius)); end; //------------------------------------------------------------------------------ function RoundRect(const rec: TRect; radius: TPoint): TPathD; begin Result := RoundRect(RectD(rec), PointD(radius)); end; //------------------------------------------------------------------------------ function RoundRect(const rec: TRectD; radius: double): TPathD; begin Result := RoundRect(rec, PointD(radius, radius)); end; //------------------------------------------------------------------------------ function RoundRect(const rec: TRectD; radius: TPointD): TPathD; var i,j : integer; corners : TPathD; bezPts : TPathD; magic : TPointD; const magicC: double = 0.55228475; // =4/3 * (sqrt(2)-1) begin Result := nil; if rec.IsEmpty then Exit; radius.X := Min(radius.X, rec.Width/2); radius.Y := Min(radius.Y, rec.Height/2); if (radius.X < 1) and (radius.Y < 1) then begin Result := Rectangle(rec); Exit; end; magic.X := radius.X * magicC; magic.Y := radius.Y * magicC; NewPointDArray(Corners, 4, True); with rec do begin corners[0] := PointD(Right, Top); corners[1] := BottomRight; corners[2] := PointD(Left, Bottom); corners[3] := TopLeft; end; NewPointDArray(Result, 1, True); Result[0].X := corners[3].X + radius.X; Result[0].Y := corners[3].Y; NewPointDArray(bezPts, 4, True); for i := 0 to High(corners) do begin for j := 0 to 3 do bezPts[j] := corners[i]; case i of 3: begin bezPts[0].Y := bezPts[0].Y + radius.Y; bezPts[1].Y := bezPts[0].Y - magic.Y; bezPts[3].X := bezPts[3].X + radius.X; bezPts[2].X := bezPts[3].X - magic.X; end; 0: begin bezPts[0].X := bezPts[0].X - radius.X; bezPts[1].X := bezPts[0].X + magic.X; bezPts[3].Y := bezPts[3].Y + radius.Y; bezPts[2].Y := bezPts[3].Y - magic.Y; end; 1: begin bezPts[0].Y := bezPts[0].Y - radius.Y; bezPts[1].Y := bezPts[0].Y + magic.Y; bezPts[3].X := bezPts[3].X - radius.X; bezPts[2].X := bezPts[3].X + magic.X; end; 2: begin bezPts[0].X := bezPts[0].X + radius.X; bezPts[1].X := bezPts[0].X - magic.X; bezPts[3].Y := bezPts[3].Y - radius.Y; bezPts[2].Y := bezPts[3].Y + magic.Y; end; end; ConcatPaths(Result, FlattenCBezier(bezPts)); end; end; //------------------------------------------------------------------------------ function Circle(const pt: TPoint; radius: double): TPathD; var rec: TRectD; begin rec.Left := pt.X - radius; rec.Right := pt.X + radius; rec.Top := pt.Y - radius; rec.Bottom := pt.Y + radius; Result := Ellipse(rec); end; //------------------------------------------------------------------------------ function Circle(const pt: TPointD; radius: double): TPathD; var rec: TRectD; begin rec.Left := pt.X - radius; rec.Right := pt.X + radius; rec.Top := pt.Y - radius; rec.Bottom := pt.Y + radius; Result := Ellipse(rec); end; //------------------------------------------------------------------------------ function Circle(const pt: TPointD; radius: double; pendingScale: double): TPathD; var rec: TRectD; begin rec.Left := pt.X - radius; rec.Right := pt.X + radius; rec.Top := pt.Y - radius; rec.Bottom := pt.Y + radius; Result := Ellipse(rec, pendingScale); end; //------------------------------------------------------------------------------ function CalcCircleFrom3Points(const p1,p2,p3: TPointD; out centre: TPointD; out radius: double): Boolean; var mat11, mat12, mat13, mat14: TMatrixD; m11,m12,m13,m14: double; begin mat11 := Matrix(p1.X, p1.Y, 1, p2.X, p2.Y, 1, p3.X, p3.Y, 1); m11 := MatrixDeterminant(mat11); Result := m11 <> 0; if not Result then Exit; mat12 := Matrix(Sqr(p1.X)+Sqr(p1.Y), p1.Y, 1, Sqr(p2.X)+Sqr(p2.Y), p2.Y, 1, Sqr(p3.X)+Sqr(p3.Y), p3.Y, 1); mat12 := Matrix(2, 1, 1, 20, 4, 1, 34, 3, 1); m12 := MatrixDeterminant(mat12); mat13 := Matrix(Sqr(p1.X)+Sqr(p1.Y), p1.X, 1, Sqr(p2.X)+Sqr(p2.Y), p2.X, 1, Sqr(p3.X)+Sqr(p3.Y), p3.X, 1); m13 := MatrixDeterminant(mat13); mat14 := Matrix(Sqr(p1.X)+Sqr(p1.Y), p1.X, p1.Y, Sqr(p2.X)+Sqr(p2.Y), p2.X, p2.Y, Sqr(p3.X)+Sqr(p3.Y), p3.X, p3.Y); m14 := MatrixDeterminant(mat14); centre.X := 0.5 * m12/m11; centre.Y := -0.5 * m13/m11; radius := Sqrt(Sqr(centre.X) + Sqr(centre.Y) + m14/m11); end; //------------------------------------------------------------------------------ function Ellipse(const rec: TRectD; pendingScale: double): TPathD; var steps: integer; begin if pendingScale <= 0 then pendingScale := 1; steps := Round(CalcRoundingSteps((rec.width + rec.Height) * pendingScale)); Result := Ellipse(rec, steps); end; //------------------------------------------------------------------------------ function Ellipse(const rec: TRect; steps: integer): TPathD; begin Result := Ellipse(RectD(rec), steps); end; //------------------------------------------------------------------------------ function Ellipse(const rec: TRectD; steps: integer): TPathD; var i: Integer; sinA, cosA: double; centre, radius, delta: TPointD; begin result := nil; if rec.IsEmpty then Exit; with rec do begin centre := rec.MidPoint; radius := PointD(Width * 0.5, Height * 0.5); end; if steps < 4 then steps := Round(CalcRoundingSteps(rec.width + rec.height)); GetSinCos(2 * Pi / Steps, sinA, cosA); delta.x := cosA; delta.y := sinA; NewPointDArray(Result, Steps, True); Result[0] := PointD(centre.X + radius.X, centre.Y); for i := 1 to steps -1 do begin Result[i] := PointD(centre.X + radius.X * delta.x, centre.Y + radius.y * delta.y); delta := PointD(delta.X * cosA - delta.Y * sinA, delta.Y * cosA + delta.X * sinA); end; //rotates clockwise end; //------------------------------------------------------------------------------ function RotatedEllipse(const rec: TRectD; angle: double; steps: integer = 0): TPathD; begin Result := Ellipse(rec, steps); if angle = 0 then Exit; Result := RotatePath(Result, rec.MidPoint, angle); end; //------------------------------------------------------------------------------ function RotatedEllipse(const rec: TRectD; angle: double; pendingScale: double): TPathD; begin Result := Ellipse(rec, pendingScale); if angle = 0 then Exit; Result := RotatePath(Result, rec.MidPoint, angle); end; //------------------------------------------------------------------------------ function AngleToEllipticalAngle(const ellRec: TRectD; angle: double): double; begin Result := arctan2(ellRec.Height/ellRec.Width * sin(angle), cos(angle)); end; //------------------------------------------------------------------------------ function EllipticalAngleToAngle(const ellRec: TRectD; angle: double): double; begin Result := ArcTan2(sin(angle) *ellRec.Width, cos(angle) * ellRec.Height); end; //------------------------------------------------------------------------------ function Star(const rec: TRectD; points: integer; indentFrac: double): TPathD; var i: integer; innerOff: double; p, p2: TPathD; rec2: TRectD; begin Result := nil; if points < 5 then points := 5 else if points > 15 then points := 15; if indentFrac < 0.2 then indentFrac := 0.2 else if indentFrac > 0.8 then indentFrac := 0.8; innerOff := Min(rec.Width, rec.Height) * indentFrac * 0.5; if not Odd(points) then inc(points); p := Ellipse(rec, points); if not Assigned(p) then Exit; rec2 := rec; Img32.Vector.InflateRect(rec2, -innerOff, -innerOff); if rec2.IsEmpty then p2 := Ellipse(rec, points*2) else p2 := Ellipse(rec2, points*2); NewPointDArray(Result, points*2, True); for i := 0 to points -1 do begin Result[i*2] := p[i]; Result[i*2+1] := p2[i*2+1]; end; end; //------------------------------------------------------------------------------ function Star(const focalPt: TPointD; innerRadius, outerRadius: double; points: integer): TPathD; var i: Integer; sinA, cosA: double; delta: TPointD; begin result := nil; if (innerRadius <= 0) or (outerRadius <= 0) then Exit; if points <= 5 then points := 10 else points := points * 2; GetSinCos(2 * Pi / points, sinA, cosA); delta.x := cosA; delta.y := sinA; NewPointDArray(Result, points, True); Result[0] := PointD(focalPt.X + innerRadius, focalPt.Y); for i := 1 to points -1 do begin if Odd(i) then Result[i] := PointD(focalPt.X + outerRadius * delta.x, focalPt.Y + outerRadius * delta.y) else Result[i] := PointD(focalPt.X + innerRadius * delta.x, focalPt.Y + innerRadius * delta.y); delta := PointD(delta.X * cosA - delta.Y * sinA, delta.Y * cosA + delta.X * sinA); end; end; //------------------------------------------------------------------------------ function Arc(const rec: TRectD; startAngle, endAngle: double; scale: double): TPathD; var i, steps: Integer; angle: double; sinA, cosA: double; centre, radius: TPointD; deltaX, deltaX2, deltaY: double; const qtrDeg = PI/1440; begin Result := nil; if (endAngle = startAngle) or IsEmptyRect(rec) then Exit; if scale <= 0 then scale := 4.0; {$IFDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} startAngle := -startAngle; endAngle := -endAngle; {$ENDIF} NormalizeAngle(startAngle, qtrDeg); NormalizeAngle(endAngle, qtrDeg); with rec do begin centre := MidPoint; radius := PointD(Width * 0.5, Height * 0.5); end; if endAngle < startAngle then angle := endAngle - startAngle + angle360 else angle := endAngle - startAngle; //steps = (No. steps for a whole ellipse) * angle/(2*Pi) steps := Round(CalcRoundingSteps((rec.width + rec.height)/2 * scale)); steps := steps div 2; ///////////////////////////////// if steps < 2 then steps := 2; NewPointDArray(Result, Steps +1, True); //angle of the first step ... GetSinCos(startAngle, deltaY, deltaX); Result[0].X := centre.X + radius.X * deltaX; Result[0].Y := centre.Y + radius.y * deltaY; //angle of each subsequent step ... GetSinCos(angle / Steps, sinA, cosA); for i := 1 to steps do begin deltaX2 := deltaX * cosA - deltaY * sinA; deltaY := deltaY * cosA + deltaX * sinA; deltaX := deltaX2; Result[i].X := centre.X + radius.X * deltaX; Result[i].Y := centre.Y + radius.y * deltaY; end; //progresses clockwise from start to end end; //------------------------------------------------------------------------------ function Pie(const rec: TRectD; StartAngle, EndAngle: double; scale: double): TPathD; var len: integer; begin result := Arc(rec, StartAngle, EndAngle, scale); len := length(result); SetLengthUninit(result, len +1); result[len] := PointD((rec.Left + rec.Right)/2, (rec.Top + rec.Bottom)/2); end; //------------------------------------------------------------------------------ function ArrowHead(const arrowTip, ctrlPt: TPointD; size: double; arrowStyle: TArrowStyle): TPathD; var unitVec, basePt: TPointD; sDiv40, sDiv50, sDiv60, sDiv120: double; begin result := nil; sDiv40 := size * 0.40; sDiv50 := size * 0.50; sDiv60 := size * 0.60; sDiv120 := sDiv60 * 2; unitVec := GetUnitVector(ctrlPt, arrowTip); case arrowStyle of asNone: Exit; asSimple: begin NewPointDArray(result, 3, True); basePt := TranslatePoint(arrowTip, -unitVec.X * size, -unitVec.Y * size); result[0] := arrowTip; result[1] := TranslatePoint(basePt, -unitVec.Y * sDiv50, unitVec.X * sDiv50); result[2] := TranslatePoint(basePt, unitVec.Y * sDiv50, -unitVec.X * sDiv50); end; asFancy: begin NewPointDArray(result, 4, True); basePt := TranslatePoint(arrowTip, -unitVec.X * sDiv120, -unitVec.Y * sDiv120); result[0] := TranslatePoint(basePt, -unitVec.Y *sDiv50, unitVec.X *sDiv50); result[1] := TranslatePoint(arrowTip, -unitVec.X *size, -unitVec.Y *size); result[2] := TranslatePoint(basePt, unitVec.Y *sDiv50, -unitVec.X *sDiv50); result[3] := arrowTip; end; asDiamond: begin NewPointDArray(result, 4, True); basePt := TranslatePoint(arrowTip, -unitVec.X * sDiv60, -unitVec.Y * sDiv60); result[0] := arrowTip; result[1] := TranslatePoint(basePt, -unitVec.Y * sDiv50, unitVec.X * sDiv50); result[2] := TranslatePoint(arrowTip, -unitVec.X * sDiv120, -unitVec.Y * sDiv120); result[3] := TranslatePoint(basePt, unitVec.Y * sDiv50, -unitVec.X * sDiv50); end; asCircle: begin basePt := TranslatePoint(arrowTip, -unitVec.X * sDiv50, -unitVec.Y * sDiv50); with Point(basePt) do result := Ellipse(RectD(x - sDiv50, y - sDiv50, x + sDiv50, y + sDiv50)); end; asTail: begin NewPointDArray(result, 6, True); basePt := TranslatePoint(arrowTip, -unitVec.X * sDiv60, -unitVec.Y * sDiv60); result[0] := TranslatePoint(arrowTip, -unitVec.X * sDiv50, -unitVec.Y * sDiv50); result[1] := TranslatePoint(arrowTip, -unitVec.Y * sDiv40, unitVec.X * sDiv40); result[2] := TranslatePoint(basePt, -unitVec.Y * sDiv40, unitVec.X * sDiv40); result[3] := TranslatePoint(arrowTip, -unitVec.X * sDiv120, -unitVec.Y * sDiv120); result[4] := TranslatePoint(basePt, unitVec.Y * sDiv40, -unitVec.X * sDiv40); result[5] := TranslatePoint(arrowTip, unitVec.Y * sDiv40, -unitVec.X * sDiv40); end; end; end; //------------------------------------------------------------------------------ function GetDefaultArrowHeadSize(lineWidth: double): double; begin Result := lineWidth *3 + 7; end; //------------------------------------------------------------------------------ procedure AdjustPoint(var pt: TPointD; const referencePt: TPointD; delta: double); var vec: TPointD; begin //Positive delta moves pt away from referencePt, and //negative delta moves pt toward referencePt. vec := GetUnitVector(referencePt, pt); pt.X := pt.X + (vec.X * delta); pt.Y := pt.Y + (vec.Y * delta); end; //------------------------------------------------------------------------------ function ShortenPath(const path: TPathD; pathEnd: TPathEnd; amount: double): TPathD; var len, amount2: double; vec: TPointD; i, highPath: integer; begin result := path; highPath := high(path); if highPath < 1 then Exit; amount2 := amount; if pathEnd <> peEnd then begin //shorten start i := 0; while (i < highPath) do begin len := Distance(result[i], result[i+1]); if (len >= amount) then Break; amount := amount - len; inc(i); end; if i > 0 then begin Move(path[i], Result[0], (highPath - i +1) * SizeOf(TPointD)); dec(highPath, i); SetLength(Result, highPath +1); end; if amount > 0 then begin vec := GetUnitVector(result[0], result[1]); result[0].X := result[0].X + vec.X * amount; result[0].Y := result[0].Y + vec.Y * amount; end; end; if pathEnd <> peStart then begin //shorten end while (highPath > 1) do begin len := Distance(result[highPath], result[highPath -1]); if (len >= amount2) then Break; amount2 := amount2 - len; dec(highPath); end; SetLength(Result, highPath +1); if amount2 > 0 then begin vec := GetUnitVector(result[highPath], result[highPath -1]); result[highPath].X := result[highPath].X + vec.X * amount2; result[highPath].Y := result[highPath].Y + vec.Y * amount2; end; end; end; //------------------------------------------------------------------------------ function GetDashedPath(const path: TPathD; closed: Boolean; const pattern: TArrayOfDouble; patternOffset: PDouble): TPathsD; var i, highI, paIdx: integer; vecs, path2, dash: TPathD; patCnt: integer; patLen: double; dashCapacity, dashCnt, ptsCapacity, ptsCnt: integer; segLen, residualPat, patOff: double; filling: Boolean; pt, pt2: TPointD; procedure NewDash; begin if ptsCnt = 1 then ptsCnt := 0; if ptsCnt = 0 then Exit; if dashCnt = dashCapacity then begin inc(dashCapacity, BuffSize); setLength(result, dashCapacity); end; result[dashCnt] := Copy(dash, 0, ptsCnt); inc(dashCnt); ptsCapacity := BuffSize; setLength(dash, ptsCapacity); ptsCnt := 0; end; procedure ExtendDash(const pt: TPointD); begin if ptsCnt = ptsCapacity then begin inc(ptsCapacity, BuffSize); setLength(dash, ptsCapacity); end; dash[ptsCnt] := pt; inc(ptsCnt); end; begin Result := nil; paIdx := 0; patCnt := length(pattern); path2 := path; highI := high(path2); if (highI < 1) or (patCnt = 0) then Exit; if closed and ((path2[highI].X <> path2[0].X) or (path2[highI].Y <> path2[0].Y)) then begin inc(highI); setLength(path2, highI +2); path2[highI] := path2[0]; end; vecs := GetVectors(path2); if (vecs[0].X = 0) and (vecs[0].Y = 0) then Exit; //not a line if not assigned(patternOffset) then patOff := 0 else patOff := patternOffset^; patLen := 0; for i := 0 to patCnt -1 do patLen := patLen + pattern[i]; if patOff < 0 then begin patOff := patLen + patOff; while patOff < 0 do patOff := patOff + patLen; end else while patOff > patLen do patOff := patOff - patLen; //nb: each dash is made up of 2 or more pts dashCnt := 0; dashCapacity := 0; ptsCnt := 0; ptsCapacity := 0; filling := true; while patOff >= pattern[paIdx] do begin filling := not filling; patOff := patOff - pattern[paIdx]; paIdx := (paIdx + 1) mod patCnt; end; residualPat := pattern[paIdx] - patOff; pt := path2[0]; ExtendDash(pt); i := 0; while (i < highI) do begin segLen := Distance(pt, path2[i+1]); if residualPat > segLen then begin if filling then ExtendDash(path2[i+1]); residualPat := residualPat - segLen; pt := path2[i+1]; inc(i); end else begin pt2.X := pt.X + vecs[i].X * residualPat; pt2.Y := pt.Y + vecs[i].Y * residualPat; if filling then ExtendDash(pt2); filling := not filling; NewDash; paIdx := (paIdx + 1) mod patCnt; residualPat := pattern[paIdx]; pt := pt2; ExtendDash(pt); end; end; NewDash; SetLength(Result, dashCnt); if not assigned(patternOffset) then Exit; patOff := 0; for i := 0 to paIdx -1 do patOff := patOff + pattern[i]; patternOffset^ := patOff + (pattern[paIdx] - residualPat); end; //------------------------------------------------------------------------------ function GetDashedOutLine(const path: TPathD; closed: Boolean; const pattern: TArrayOfDouble; patternOffset: PDouble; lineWidth: double; joinStyle: TJoinStyle; endStyle: TEndStyle): TPathsD; var i: integer; tmp: TPathsD; begin Result := nil; for i := 0 to High(pattern) do if pattern[i] <= 0 then pattern[i] := 1; tmp := GetDashedPath(path, closed, pattern, patternOffset); for i := 0 to high(tmp) do // AppendPath(Result, GrowOpenLine(tmp[i], // lineWidth, joinStyle, endStyle, 2)); AppendPath(Result, GrowClosedLine(tmp[i], lineWidth, joinStyle, 2)); end; //------------------------------------------------------------------------------ function GetBoundsD(const paths: TArrayOfPathsD): TRectD; var i, len: integer; rec: TRectD; begin len := Length(paths); i := 0; while (i < len) do begin rec := GetBoundsD(paths[i]); if not IsEmptyRect(rec) then Break; inc(i); end; if i = len then begin Result := NullRectD; Exit; end; Result := rec; for i := i + 1 to len -1 do begin rec := GetBoundsD(paths[i]); if IsEmptyRect(rec) then Continue; Result := UnionRect(Result, rec); end; end; //------------------------------------------------------------------------------ function GetBoundsD(const paths: TPathsD): TRectD; var i,j: integer; p: PPointD; {$IFDEF CPUX64} l,t,r,b,x,y: double; {$ENDIF CPUX64} begin if paths = nil then begin Result := NullRectD; Exit; end; {$IFDEF CPUX64} l := MaxDouble; t := l; r := -MaxDouble; b := r; {$ELSE} Result.Left := MaxDouble; Result.Top := MaxDouble; Result.Right := -MaxDouble; Result.Bottom := -MaxDouble; {$ENDIF CPUX64} for i := 0 to high(paths) do begin p := PPointD(paths[i]); if not assigned(p) then Continue; for j := 0 to high(paths[i]) do begin {$IFDEF CPUX64} // load p.X and p.Y into xmm registers x := p.X; y := p.Y; if x < l then l := x; if x > r then r := x; if y < t then t := y; if y > b then b := y; {$ELSE} // If we must use the FPU and memory then we should write directly // to the target memory. if p.x < Result.Left then Result.Left := p.x; if p.x > Result.Right then Result.Right := p.x; if p.y < Result.Top then Result.Top := p.y; if p.y > Result.Bottom then Result.Bottom := p.y; {$ENDIF CPUX64} inc(p); end; end; {$IFDEF CPUX64} if r < l then Result := NullRectD else begin // Inline the RectD() call by hand Result.Left := l; Result.Top := t; Result.Right := r; Result.Bottom := b; end; {$ELSE} if Result.Right < Result.Left then Result := NullRectD; {$ENDIF CPUX64} end; //------------------------------------------------------------------------------ function GetBoundsD(const path: TPathD): TRectD; var i,highI: integer; p: PPointD; {$IFDEF CPUX64} l,t,r,b,x,y: double; {$ENDIF CPUX64} begin highI := High(path); if highI < 0 then begin Result := NullRectD; Exit; end; {$IFDEF CPUX64} l := path[0].X; r := l; t := path[0].Y; b := t; p := PPointD(path); for i := 1 to highI do begin inc(p); // load p.X and p.Y into xmm registers x := p.X; y := p.Y; if x < l then l := x; if x > r then r := x; if y < t then t := y; if y > b then b := y; end; // Inline the RectD() call by hand Result.Left := l; Result.Top := t; Result.Right := r; Result.Bottom := b; {$ELSE} // If we must use the FPU and memory then we should write directly // to the target memory. {$IFDEF RECORD_METHODS} Result.TopLeft := path[0]; // uses "rep movsd" Result.BottomRight := Result.TopLeft; {$ELSE} Result.Left := path[0].X; // uses "fld" and "fstp" Result.Top := path[0].Y; Result.Right := Result.Left; Result.Bottom := Result.Right; {$ENDIF RECORD_METHODS} p := PPointD(path); for i := 1 to highI do begin inc(p); if p.x < Result.Left then Result.Left := p.x; if p.x > Result.Right then Result.Right := p.x; if p.y < Result.Top then Result.Top := p.y; if p.y > Result.Bottom then Result.Bottom := p.y; end; {$ENDIF CPUX64} end; //------------------------------------------------------------------------------ function GetBounds(const path: TPathD): TRect; var recD: TRectD; begin recD := GetBoundsD(path); Result := Rect(recD); end; //------------------------------------------------------------------------------ function GetBounds(const paths: TPathsD): TRect; var recD: TRectD; begin recD := GetBoundsD(paths); Result := Rect(recD); end; //------------------------------------------------------------------------------ procedure PrePendPoint(const pt: TPointD; const p: TPathD; var Result: TPathD); var len: integer; begin len := Length(p); SetLengthUninit(Result, len +1); Result[0] := pt; if len > 0 then Move(p[0], Result[1], len * SizeOf(TPointD)); end; //------------------------------------------------------------------------------ function PrePendPoint(const pt: TPointD; const p: TPathD): TPathD; begin PrePendPoint(pt, p, Result); end; //------------------------------------------------------------------------------ function PrePendPoints(const pt1, pt2: TPointD; const p: TPathD): TPathD; var len: integer; begin len := Length(p); NewPointDArray(Result, len +2, True); Result[0] := pt1; Result[1] := pt2; if len > 0 then Move(p[0], Result[2], len * SizeOf(TPointD)); end; //------------------------------------------------------------------------------ function GetPointInQuadBezier(const a,b,c: TPointD; t: double): TPointD; var omt: double; begin if t > 1 then t := 1 else if t < 0 then t := 0; omt := 1 - t; Result.X := a.X*omt*omt + b.X*2*omt*t + c.X*t*t; Result.Y := a.Y*omt*omt + b.Y*2*omt*t + c.Y*t*t; end; //------------------------------------------------------------------------------ function FlattenQBezier(const firstPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; begin if tolerance <= 0.0 then tolerance := BezierTolerance; Result := FlattenQBezier(PrePendPoint(firstPt, pts), tolerance); end; //------------------------------------------------------------------------------ function FlattenQBezier(const pts: TPathD; tolerance: double = 0.0): TPathD; var i, highI: integer; p: TPathD; begin Result := nil; highI := high(pts); if highI < 0 then Exit; if (highI < 2) or Odd(highI) then raise Exception.CreateRes(@rsInvalidQBezier); if tolerance <= 0.0 then tolerance := BezierTolerance; NewPointDArray(Result, 1, True); Result[0] := pts[0]; for i := 0 to (highI div 2) -1 do begin if PointsEqual(pts[i*2], pts[i*2+1]) and PointsEqual(pts[i*2+1], pts[i*2+2]) then begin AppendPoint(Result, pts[i*2]); AppendPoint(Result, pts[i*2 +2]); end else begin p := FlattenQBezier(pts[i*2], pts[i*2+1], pts[i*2+2], tolerance); ConcatPaths(Result, Copy(p, 1, Length(p) -1)); end; end; end; //------------------------------------------------------------------------------ function FlattenQBezier(const pt1, pt2, pt3: TPointD; tolerance: double = 0.0): TPathD; var resultCnt, resultLen: integer; procedure AddPoint(const pt: TPointD); begin if resultCnt = resultLen then begin inc(resultLen, BuffSize); SetLengthUninit(result, resultLen); end; result[resultCnt] := pt; inc(resultCnt); end; procedure DoCurve(const p1, p2, p3: TPointD); var p12, p23, p123: TPointD; begin if (abs(p1.x + p3.x - 2 * p2.x) + abs(p1.y + p3.y - 2 * p2.y) < tolerance) then begin AddPoint(p3); end else begin P12.X := (P1.X + P2.X) * 0.5; P12.Y := (P1.Y + P2.Y) * 0.5; P23.X := (P2.X + P3.X) * 0.5; P23.Y := (P2.Y + P3.Y) * 0.5; P123.X := (P12.X + P23.X) * 0.5; P123.Y := (P12.Y + P23.Y) * 0.5; DoCurve(p1, p12, p123); DoCurve(p123, p23, p3); end; end; begin resultLen := 0; resultCnt := 0; if tolerance <= 0.0 then tolerance := BezierTolerance; AddPoint(pt1); if ((pt1.X = pt2.X) and (pt1.Y = pt2.Y)) or ((pt2.X = pt3.X) and (pt2.Y = pt3.Y)) then begin AddPoint(pt3) end else DoCurve(pt1, pt2, pt3); SetLength(result, resultCnt); end; //------------------------------------------------------------------------------ function GetPointInCubicBezier(const a,b,c,d: TPointD; t: double): TPointD; var omt: double; begin if t > 1 then t := 1 else if t < 0 then t := 0; omt := 1 - t; Result.X := a.X*omt*omt*omt +b.X*3*omt*omt*t +c.X*3*omt*t*t +d.X*t*t*t; Result.Y := a.Y*omt*omt*omt +b.Y*3*omt*omt*t +c.Y*3*omt*t*t +d.Y*t*t*t; end; //------------------------------------------------------------------------------ function FlattenCBezier(const firstPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; overload; begin Result := FlattenCBezier(PrePendPoint(firstPt, pts), tolerance); end; //------------------------------------------------------------------------------ function FlattenCBezier(const path: TPathD; tolerance: double = 0.0): TPathD; var i, len: integer; p: TPathD; begin Result := nil; len := Length(path) -1; if len < 0 then Exit; if (len < 3) or (len mod 3 <> 0) then raise Exception.Create(rsInvalidCBezier); if tolerance <= 0.0 then tolerance := BezierTolerance; NewPointDArray(Result, 1, True); Result[0] := path[0]; for i := 0 to (len div 3) -1 do begin if PointsEqual(path[i*3], path[i*3+1]) and PointsEqual(path[i*3+2], path[i*3+3]) then begin AppendPoint(Result, path[i*3]); AppendPoint(Result, path[i*3 +3]); end else begin p := FlattenCBezier(path[i*3], path[i*3+1], path[i*3+2], path[i*3+3], tolerance); ConcatPaths(Result, Copy(p, 1, Length(p) -1)); end; end; end; //------------------------------------------------------------------------------ function FlattenCBezier(const paths: TPathsD; tolerance: double): TPathsD; var i, len: integer; begin len := Length(paths); SetLength(Result, len); for i := 0 to len -1 do Result[i] := FlattenCBezier(paths[i], tolerance); end; //------------------------------------------------------------------------------ function FlattenCBezier(const pt1, pt2, pt3, pt4: TPointD; tolerance: double = 0.0): TPathD; var resultCnt, resultLen: integer; procedure AddPoint(const pt: TPointD); begin if resultCnt = resultLen then begin inc(resultLen, BuffSize); SetLengthUninit(result, resultLen); end; result[resultCnt] := pt; inc(resultCnt); end; procedure DoCurve(const p1, p2, p3, p4: TPointD); var p12, p23, p34, p123, p234, p1234: TPointD; begin if ((abs(p1.x +p3.x - 2*p2.x) < tolerance) and (abs(p2.x +p4.x - 2*p3.x) < tolerance)) and ((abs(p1.y +p3.y - 2*p2.y) < tolerance) and (abs(p2.y +p4.y - 2*p3.y) < tolerance)) then begin AddPoint(p4); end else begin p12.X := (p1.X + p2.X) / 2; p12.Y := (p1.Y + p2.Y) / 2; p23.X := (p2.X + p3.X) / 2; p23.Y := (p2.Y + p3.Y) / 2; p34.X := (p3.X + p4.X) / 2; p34.Y := (p3.Y + p4.Y) / 2; p123.X := (p12.X + p23.X) / 2; p123.Y := (p12.Y + p23.Y) / 2; p234.X := (p23.X + p34.X) / 2; p234.Y := (p23.Y + p34.Y) / 2; p1234.X := (p123.X + p234.X) / 2; p1234.Y := (p123.Y + p234.Y) / 2; DoCurve(p1, p12, p123, p1234); DoCurve(p1234, p234, p34, p4); end; end; begin result := nil; resultLen := 0; resultCnt := 0; if tolerance <= 0.0 then tolerance := BezierTolerance; AddPoint(pt1); if ValueAlmostZero(pt1.X - pt2.X) and ValueAlmostZero(pt1.Y - pt2.Y) and ValueAlmostZero(pt3.X - pt4.X) and ValueAlmostZero(pt3.Y - pt4.Y) then begin AddPoint(pt4) end else DoCurve(pt1, pt2, pt3, pt4); SetLength(result,resultCnt); end; //------------------------------------------------------------------------------ function ReflectPoint(const pt, pivot: TPointD): TPointD; begin Result.X := pivot.X + (pivot.X - pt.X); Result.Y := pivot.Y + (pivot.Y - pt.Y); end; //------------------------------------------------------------------------------ function FlattenCSpline(const priorCtrlPt, startPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; var p: TPathD; len: integer; begin len := Length(pts); NewPointDArray(p, len + 2, True); p[0] := startPt; p[1] := ReflectPoint(priorCtrlPt, startPt); if len > 0 then Move(pts[0], p[2], len * SizeOf(TPointD)); Result := FlattenCSpline(p, tolerance); end; //------------------------------------------------------------------------------ function FlattenCSpline(const pts: TPathD; tolerance: double = 0.0): TPathD; var resultCnt, resultLen: integer; procedure AddPoint(const pt: TPointD); begin if resultCnt = resultLen then begin inc(resultLen, BuffSize); SetLengthUninit(result, resultLen); end; result[resultCnt] := pt; inc(resultCnt); end; procedure DoCurve(const p1, p2, p3, p4: TPointD); var p12, p23, p34, p123, p234, p1234: TPointD; begin if (abs(p1.x + p3.x - 2*p2.x) + abs(p2.x + p4.x - 2*p3.x) + abs(p1.y + p3.y - 2*p2.y) + abs(p2.y + p4.y - 2*p3.y)) < tolerance then begin AddPoint(p4); end else begin p12.X := (p1.X + p2.X) / 2; p12.Y := (p1.Y + p2.Y) / 2; p23.X := (p2.X + p3.X) / 2; p23.Y := (p2.Y + p3.Y) / 2; p34.X := (p3.X + p4.X) / 2; p34.Y := (p3.Y + p4.Y) / 2; p123.X := (p12.X + p23.X) / 2; p123.Y := (p12.Y + p23.Y) / 2; p234.X := (p23.X + p34.X) / 2; p234.Y := (p23.Y + p34.Y) / 2; p1234.X := (p123.X + p234.X) / 2; p1234.Y := (p123.Y + p234.Y) / 2; DoCurve(p1, p12, p123, p1234); DoCurve(p1234, p234, p34, p4); end; end; var i, len: integer; p: PPointD; pt1,pt2,pt3,pt4: TPointD; begin result := nil; len := Length(pts); resultLen := 0; resultCnt := 0; if (len < 4) then Exit; if tolerance <= 0.0 then tolerance := BezierTolerance; //ignore incomplete trailing control points if Odd(len) then dec(len); p := @pts[0]; AddPoint(p^); pt1 := p^; inc(p); pt2 := p^; inc(p); for i := 0 to (len shr 1) - 2 do begin pt3 := p^; inc(p); pt4 := p^; inc(p); DoCurve(pt1, pt2, pt3, pt4); pt1 := pt4; pt2 := ReflectPoint(pt3, pt1); end; SetLength(result,resultCnt); end; //------------------------------------------------------------------------------ function FlattenQSpline(const priorCtrlPt, startPt: TPointD; const pts: TPathD; tolerance: double = 0.0): TPathD; var p: TPathD; len: integer; begin len := Length(pts); NewPointDArray(p, len + 2, True); p[0] := startPt; p[1] := ReflectPoint(priorCtrlPt, startPt); if len > 0 then Move(pts[0], p[2], len * SizeOf(TPointD)); Result := FlattenQSpline(p, tolerance); end; //------------------------------------------------------------------------------ function FlattenQSpline(const pts: TPathD; tolerance: double = 0.0): TPathD; var resultCnt, resultLen: integer; procedure AddPoint(const pt: TPointD); begin if resultCnt = resultLen then begin inc(resultLen, BuffSize); SetLengthUninit(result, resultLen); end; result[resultCnt] := pt; inc(resultCnt); end; procedure DoCurve(const p1, p2, p3: TPointD); var p12, p23, p123: TPointD; begin if (abs(p1.x + p3.x - 2 * p2.x) + abs(p1.y + p3.y - 2 * p2.y) < tolerance) then begin AddPoint(p3); end else begin P12.X := (P1.X + P2.X) * 0.5; P12.Y := (P1.Y + P2.Y) * 0.5; P23.X := (P2.X + P3.X) * 0.5; P23.Y := (P2.Y + P3.Y) * 0.5; P123.X := (P12.X + P23.X) * 0.5; P123.Y := (P12.Y + P23.Y) * 0.5; DoCurve(p1, p12, p123); DoCurve(p123, p23, p3); end; end; var i, len: integer; p: PPointD; pt1, pt2, pt3: TPointD; begin result := nil; len := Length(pts); if (len < 3) then Exit; resultLen := 0; resultCnt := 0; if tolerance <= 0.0 then tolerance := BezierTolerance; p := @pts[0]; AddPoint(p^); pt1 := p^; inc(p); pt2 := p^; inc(p); for i := 0 to len - 3 do begin pt3 := p^; inc(p); DoCurve(pt1, pt2, pt3); pt1 := pt3; pt2 := ReflectPoint(pt2, pt1); end; SetLength(result,resultCnt); end; //------------------------------------------------------------------------------ function MakePath(const pts: array of double): TPathD; var i, len: Integer; x,y: double; begin Result := nil; len := length(pts) div 2; if len = 0 then Exit; NewPointDArray(Result, len, True); Result[0].X := pts[0]; Result[0].Y := pts[1]; for i := 1 to len -1 do begin x := pts[i*2]; y := pts[i*2 +1]; Result[i].X := x; Result[i].Y := y; end; end; //------------------------------------------------------------------------------ function MakePath(const pt: TPointD): TPathD; begin SetLengthUninit(Result, 1); Result[0] := pt; end; //------------------------------------------------------------------------------ end. doublecmd-1.1.30/components/Image32/source/Img32.Transform.pas0000644000175000001440000012400015104114162022776 0ustar alexxusersunit Img32.Transform; (******************************************************************************* * Author : Angus Johnson * * Version : 4.7 * * Date : 6 January 2025 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2019-2025 * * Purpose : Affine and projective transformation routines for TImage32 * * License : http://www.boost.org/LICENSE_1_0.txt * *******************************************************************************) interface {$I Img32.inc} uses SysUtils, Classes, Math, Types, Img32, Img32.Vector; type TMatrixD = array [0..2, 0..2] of double; //Matrix functions function IsIdentityMatrix(const matrix: TMatrixD): Boolean; {$IFDEF INLINE} inline; {$ENDIF} function IsValidMatrix(const matrix: TMatrixD): Boolean; {$IFDEF INLINE} inline; {$ENDIF} function Matrix(const m00, m01, m02, m10, m11, m12, m20, m21, m22: double): TMatrixD; function MatrixDeterminant(const matrix: TMatrixD): double; function MatrixAdjugate(const matrix: TMatrixD): TMatrixD; function MatrixInvert(var matrix: TMatrixD): Boolean; // Note: Matrix multiplication IS NOT commutative hence ... procedure MatrixMultiply(var matrix1: TMatrixD; const matrix2: TMatrixD); procedure MatrixMultiply2(const matrix1: TMatrixD; var matrix2: TMatrixD); procedure MatrixApply(const matrix: TMatrixD; var x, y: double); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure MatrixApply(const matrix: TMatrixD; var pt: TPointD); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure MatrixApply(const matrix: TMatrixD; var rec: TRect); overload; procedure MatrixApply(const matrix: TMatrixD; var rec: TRectD); overload; procedure MatrixApply(const matrix: TMatrixD; var path: TPathD); overload; procedure MatrixApply(const matrix: TMatrixD; var paths: TPathsD); overload; procedure MatrixApply(const matrix: TMatrixD; img: TImage32; scaleAdjust: Boolean = false); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure MatrixApply(const matrix: TMatrixD; img, targetImg: TImage32; scaleAdjust: Boolean = false); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure MatrixSkew(var matrix: TMatrixD; angleX, angleY: double); procedure MatrixScale(var matrix: TMatrixD; scale: double); overload; procedure MatrixScale(var matrix: TMatrixD; scaleX, scaleY: double); overload; procedure MatrixRotate(var matrix: TMatrixD; angRad: double); overload; procedure MatrixRotate(var matrix: TMatrixD; const center: TPointD; angRad: double); overload; procedure MatrixTranslate(var matrix: TMatrixD; dx, dy: double); // The following MatrixExtract routines assume here is no skew procedure MatrixExtractScale(const mat: TMatrixD; out scale: double); overload; procedure MatrixExtractScale(const mat: TMatrixD; out X, Y: double); overload; procedure MatrixExtractTranslation(const mat: TMatrixD; out dx, dy: double); procedure MatrixExtractRotation(const mat: TMatrixD; out angle: double); // MatrixExtractAll - except skew :) function MatrixExtractAll(const mat: TMatrixD; out angle: double; out scale, trans: TPointD): Boolean; // AffineTransformImage: will automagically translate the image // Note: when the "scaleAdjust" parameter is enabled, it prevents antialiasing // from extending way outside of images when they are being enlarged // significantly (> 2 times) and rotated concurrently function AffineTransformImage(img: TImage32; matrix: TMatrixD; scaleAdjust: Boolean = false): TPoint; overload; {$IFDEF INLINE} inline; {$ENDIF} function AffineTransformImage(img, targetImg: TImage32; matrix: TMatrixD; scaleAdjust: Boolean = false): TPoint; overload; // ProjectiveTransform: // srcPts, dstPts => each path must contain 4 points // margins => the margins around dstPts (in the dest. projective). // Margins are only meaningful when srcPts are inside the image. function ProjectiveTransform(img: TImage32; const srcPts, dstPts: TPathD; const margins: TRect): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function ProjectiveTransform(img, targetImg: TImage32; const srcPts, dstPts: TPathD; const margins: TRect): Boolean; overload; function SplineVertTransform(img: TImage32; const topSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function SplineVertTransform(img, targetImg: TImage32; const topSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; overload; function SplineHorzTransform(img: TImage32; const leftSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; overload; {$IFDEF INLINE} inline; {$ENDIF} function SplineHorzTransform(img, targetImg: TImage32; const leftSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; overload; type PWeightedColor = ^TWeightedColor; TWeightedColor = {$IFDEF RECORD_METHODS} record {$ELSE} object {$ENDIF} private fAddCount : Integer; fAlphaTot : Int64; fColorTotR: Int64; fColorTotG: Int64; fColorTotB: Int64; function GetColor: TColor32; public procedure Reset; overload; {$IFDEF INLINE} inline; {$ENDIF} procedure Reset(c: TColor32; w: Integer = 1); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure Add(c: TColor32; w: Integer); overload; {$IFDEF INLINE_COMPATIBLE} inline; {$ENDIF} procedure Add(c: TColor32); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure Add(const other: TWeightedColor); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure Subtract(c: TColor32; w: Integer); overload; procedure Subtract(c: TColor32); overload; {$IFDEF INLINE} inline; {$ENDIF} procedure Subtract(const other: TWeightedColor); overload; {$IFDEF INLINE} inline; {$ENDIF} function AddSubtract(addC, subC: TColor32): Boolean; {$IFDEF INLINE_COMPATIBLE} inline; {$ENDIF} function AddNoneSubtract(c: TColor32): Boolean; {$IFDEF INLINE_COMPATIBLE} inline; {$ENDIF} procedure AddWeight(w: Integer); {$IFDEF INLINE} inline; {$ENDIF} property AddCount: Integer read fAddCount; property Color: TColor32 read GetColor; property Weight: integer read fAddCount; end; TArrayOfWeightedColor = array of TWeightedColor; const IdentityMatrix: TMatrixD = ((1, 0, 0),(0, 1, 0),(0, 0, 1)); implementation uses Img32.Resamplers; resourcestring rsInvalidScale = 'Invalid matrix scaling factor (0)'; const DivOneByXTableSize = 1024; {$IFDEF CPUX86} // Use faster Trunc for x86 code in this unit. Trunc: function(Value: Double): Integer = __Trunc; {$ENDIF CPUX86} var // DivOneByXTable[x] = 1/x DivOneByXTable: array[0 .. DivOneByXTableSize -1] of Double; //------------------------------------------------------------------------------ // Matrix functions //------------------------------------------------------------------------------ function IsIdentityMatrix(const matrix: TMatrixD): Boolean; begin result := (matrix[0,0] = 1) and (matrix[0,1] = 0) and (matrix[0,2] = 0) and (matrix[1,0] = 0) and (matrix[1,1] = 1) and (matrix[1,2] = 0) and (matrix[2,0] = 0) and (matrix[2,1] = 0) and (matrix[2,2] = 1); end; //------------------------------------------------------------------------------ function IsValidMatrix(const matrix: TMatrixD): Boolean; begin result := matrix[2][2] = 1.0; end; //------------------------------------------------------------------------------ function Matrix(const m00, m01, m02, m10, m11, m12, m20, m21, m22: double): TMatrixD; begin Result[0,0] := m00; Result[0,1] := m01; Result[0,2] := m02; Result[1,0] := m10; Result[1,1] := m11; Result[1,2] := m12; Result[2,0] := m20; Result[2,1] := m21; Result[2,2] := m22; end; //------------------------------------------------------------------------------ function Det4(a1, a2, b1, b2: double): double; {$IFDEF INLINE} inline; {$ENDIF} begin Result := a1 * b2 - a2 * b1; end; //------------------------------------------------------------------------------ function Det9(a1, a2, a3, b1, b2, b3, c1, c2, c3: double): double; {$IFDEF INLINE} inline; {$ENDIF} begin Result := a1 * Det4(b2, b3, c2, c3) - b1 * Det4(a2, a3, c2, c3) + c1 * Det4(a2, a3, b2, b3); end; //------------------------------------------------------------------------------ function MatrixDeterminant(const matrix: TMatrixD): double; {$IFDEF INLINE} inline; {$ENDIF} begin Result := Det9(matrix[0,0], matrix[1,0], matrix[2,0], matrix[0,1], matrix[1,1], matrix[2,1], matrix[0,2], matrix[1,2], matrix[2,2]); end; //------------------------------------------------------------------------------ function MatrixAdjugate(const matrix: TMatrixD): TMatrixD; begin //https://en.wikipedia.org/wiki/Adjugate_matrix Result[0,0] := Det4(matrix[1,1], matrix[1,2], matrix[2,1], matrix[2,2]); Result[0,1] := -Det4(matrix[0,1], matrix[0,2], matrix[2,1], matrix[2,2]); Result[0,2] := Det4(matrix[0,1], matrix[0,2], matrix[1,1], matrix[1,2]); Result[1,0] := -Det4(matrix[1,0], matrix[1,2], matrix[2,0], matrix[2,2]); Result[1,1] := Det4(matrix[0,0], matrix[0,2], matrix[2,0], matrix[2,2]); Result[1,2] := -Det4(matrix[0,0], matrix[0,2], matrix[1,0], matrix[1,2]); Result[2,0] := Det4(matrix[1,0], matrix[1,1], matrix[2,0], matrix[2,1]); Result[2,1] := -Det4(matrix[0,0], matrix[0,1], matrix[2,0], matrix[2,1]); Result[2,2] := Det4(matrix[0,0], matrix[0,1], matrix[1,0], matrix[1,1]); end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var x, y: double); var tmpX: double; begin tmpX := x; x := tmpX * matrix[0, 0] + y * matrix[1, 0] + matrix[2, 0]; y := tmpX * matrix[0, 1] + y * matrix[1, 1] + matrix[2, 1]; end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var pt: TPointD); var tmpX: double; begin tmpX := pt.x; pt.X := tmpX * matrix[0, 0] + pt.Y * matrix[1, 0] + matrix[2, 0]; pt.Y := tmpX * matrix[0, 1] + pt.Y * matrix[1, 1] + matrix[2, 1]; end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var rec: TRect); var path: TPathD; begin if not IsValidMatrix(matrix) then Exit; path := Rectangle(rec); MatrixApply(matrix, path); rec := GetBounds(path); end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var rec: TRectD); var path: TPathD; begin if not IsValidMatrix(matrix) then Exit; path := Rectangle(rec); MatrixApply(matrix, path); rec := GetBoundsD(path); end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var path: TPathD); var i, len: integer; tmpX: double; pp: PPointD; begin len := Length(path); if (len = 0) or IsIdentityMatrix(matrix) or not IsValidMatrix(matrix) then Exit; pp := @path[0]; for i := 0 to len -1 do begin tmpX := pp.X; pp.X := tmpX * matrix[0, 0] + pp.Y * matrix[1, 0] + matrix[2, 0]; pp.Y := tmpX * matrix[0, 1] + pp.Y * matrix[1, 1] + matrix[2, 1]; inc(pp); end; end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; var paths: TPathsD); var i,j,len: integer; tmpX: double; pp: PPointD; begin if not Assigned(paths) or IsIdentityMatrix(matrix) or not IsValidMatrix(matrix) then Exit; for i := 0 to High(paths) do begin len := Length(paths[i]); if len = 0 then Continue; pp := @paths[i][0]; for j := 0 to High(paths[i]) do begin tmpX := pp.X; pp.X := tmpX * matrix[0, 0] + pp.Y * matrix[1, 0] + matrix[2, 0]; pp.Y := tmpX * matrix[0, 1] + pp.Y * matrix[1, 1] + matrix[2, 1]; inc(pp); end; end; end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; img: TImage32; scaleAdjust: Boolean); begin AffineTransformImage(img, matrix, scaleAdjust); end; //------------------------------------------------------------------------------ procedure MatrixApply(const matrix: TMatrixD; img, targetImg: TImage32; scaleAdjust: Boolean); begin AffineTransformImage(img, targetImg, matrix, scaleAdjust); end; //------------------------------------------------------------------------------ procedure MatrixMultiply(var matrix1: TMatrixD; const matrix2: TMatrixD); var i, j: Integer; m: TMatrixD; begin for i := 0 to 2 do for j := 0 to 2 do m[i, j] := (matrix1[i, 0] * matrix2[0, j]) + (matrix1[i, 1] * matrix2[1, j]) + (matrix1[i, 2] * matrix2[2, j]); matrix1 := m; end; //------------------------------------------------------------------------------ procedure MatrixMultiply2(const matrix1: TMatrixD; var matrix2: TMatrixD); var i, j: Integer; m: TMatrixD; begin for i := 0 to 2 do for j := 0 to 2 do m[i, j] := (matrix1[i, 0] * matrix2[0, j]) + (matrix1[i, 1] * matrix2[1, j]) + (matrix1[i, 2] * matrix2[2, j]); matrix2 := m; end; //------------------------------------------------------------------------------ procedure MatrixScale(var matrix: TMatrixD; scaleX, scaleY: double); var m: TMatrixD; begin m := IdentityMatrix; if (scaleX = 0) or (scaleY = 0) then raise Exception(rsInvalidScale); if ValueAlmostOne(scaleX) and ValueAlmostOne(scaleY) then Exit; m[0, 0] := scaleX; m[1, 1] := scaleY; MatrixMultiply(matrix, m); end; //------------------------------------------------------------------------------ procedure MatrixScale(var matrix: TMatrixD; scale: double); begin if (scale = 0) or (scale = 1) then Exit; MatrixScale(matrix, scale, scale); end; //------------------------------------------------------------------------------ procedure MatrixRotate(var matrix: TMatrixD; const center: TPointD; angRad: double); var m: TMatrixD; sinA, cosA: double; begin if not PointsEqual(center, NullPointD) then begin NormalizeAngle(angRad); if angRad = 0 then Exit; {$IFNDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angRad := -angRad; //negated angle because of inverted Y-axis. {$ENDIF} m := IdentityMatrix; MatrixTranslate(matrix, -center.X, -center.Y); GetSinCos(angRad, sinA, cosA); m := IdentityMatrix; m[0, 0] := cosA; m[1, 0] := sinA; m[0, 1] := -sinA; m[1, 1] := cosA; MatrixMultiply(matrix, m); MatrixTranslate(matrix, center.X, center.Y); end else MatrixRotate(matrix, angRad) end; //------------------------------------------------------------------------------ procedure MatrixRotate(var matrix: TMatrixD; angRad: double); var m: TMatrixD; sinA, cosA: double; begin NormalizeAngle(angRad); if angRad = 0 then Exit; {$IFNDEF CLOCKWISE_ROTATION_WITH_NEGATIVE_ANGLES} angRad := -angRad; //negated angle because of inverted Y-axis. {$ENDIF} m := IdentityMatrix; GetSinCos(angRad, sinA, cosA); m := IdentityMatrix; m[0, 0] := cosA; m[1, 0] := sinA; m[0, 1] := -sinA; m[1, 1] := cosA; MatrixMultiply(matrix, m); end; //------------------------------------------------------------------------------ procedure MatrixTranslate(var matrix: TMatrixD; dx, dy: double); var m: TMatrixD; begin if ValueAlmostZero(dx) and ValueAlmostZero(dy) then Exit; m := IdentityMatrix; m[2, 0] := dx; m[2, 1] := dy; MatrixMultiply(matrix, m); end; //------------------------------------------------------------------------------ procedure ScaleInternal(var matrix: TMatrixD; s: double); var i, j: Integer; begin for i := 0 to 2 do for j := 0 to 2 do matrix[i,j] := matrix[i,j] * s; end; //------------------------------------------------------------------------------ function MatrixInvert(var matrix: TMatrixD): Boolean; var d: double; const tolerance = 1.0E-5; begin d := MatrixDeterminant(matrix); Result := abs(d) > tolerance; if Result then begin matrix := MatrixAdjugate(matrix); ScaleInternal(matrix, 1/d); end; end; //------------------------------------------------------------------------------ procedure MatrixSkew(var matrix: TMatrixD; angleX, angleY: double); var m: TMatrixD; begin if ValueAlmostZero(angleX) and ValueAlmostZero(angleY) then Exit; m := IdentityMatrix; m[1, 0] := tan(angleX); m[0, 1] := tan(angleY); MatrixMultiply(matrix, m); end; //------------------------------------------------------------------------------ procedure MatrixExtractScale(const mat: TMatrixD; out X, Y: double); begin // https://stackoverflow.com/a/32125700/359538 X := Sqrt(Sqr(mat[0,0]) + Sqr(mat[0,1])); //Y := Sqrt(Sqr(mat[1,0]) + Sqr(mat[1,1])); Y := Abs((mat[0,0] * mat[1,1] - mat[1,0] * mat[0,1]) / X); end; //------------------------------------------------------------------------------ procedure MatrixExtractScale(const mat: TMatrixD; out scale: double); var x,y: double; begin MatrixExtractScale(mat, x, y); scale := Average(x,y); end; //------------------------------------------------------------------------------ procedure MatrixExtractTranslation(const mat: TMatrixD; out dx, dy: double); begin dx := mat[2,0]; dy := mat[2,1]; end; //------------------------------------------------------------------------------ procedure MatrixExtractRotation(const mat: TMatrixD; out angle: double); begin angle := ArcTan2(mat[0,1], mat[0,0]); end; //------------------------------------------------------------------------------ function MatrixExtractAll(const mat: TMatrixD; out angle: double; out scale, trans: TPointD): Boolean; var m00, m01, m10, m11: double; begin m00 := mat[0][0]; m10 := mat[1][0]; m01 := mat[0][1]; m11 := mat[1][1]; trans.X := mat[2][0]; trans.Y := mat[2][1]; angle := 0; scale := PointD(1,1); Result := (m00 <> 0) or (m01 <> 0); if not Result then Exit; angle := ArcTan2(m01, m00); // https://stackoverflow.com/a/32125700/359538 scale.X := Sqrt(Sqr(mat[0,0]) + Sqr(mat[0,1])); scale.Y := (m00 * m11 - m10 * m01) / scale.X; end; //------------------------------------------------------------------------------ {$IFDEF USE_DOWNSAMPLER_AUTOMATICALLY} function CanUseBoxDownsampler(const mat: TMatrixD; sx, sy: double): Boolean; begin // If the matrix looks like this after removing the scale, // the box downsampler can be used. (only translation and scaling) // cos(0) -sin(0) tx 1 0 tx // sin(0) cos(0) ty => 0 1 ty // 0 0 1 0 0 1 { Result := (mat[0,0]/sx = 1) and (mat[0,1]/sx = 0) and (mat[1,0]/sy = 0) and (mat[1,1]/sy = 1) and (mat[2,0] = 0) and (mat[2,1] = 0) and (mat[2,2] = 1); } // We can skip the divisions, because m/s is only zero if m is zero // and m/s=1 is the same as m=s Result := (SameValue(mat[0,0], sx)) and (mat[0,1] = 0) and (mat[1,0] = 0) and (SameValue(mat[1,1], sy)) and (mat[2,0] = 0) and (mat[2,1] = 0) and (mat[2,2] = 1); end; {$ENDIF USE_DOWNSAMPLER_AUTOMATICALLY} //------------------------------------------------------------------------------ // Affine Transformation //------------------------------------------------------------------------------ function GetTransformBounds(img: TImage32; const matrix: TMatrixD): TRect; var pts: TPathD; begin pts := Rectangle(img.Bounds); MatrixApply(matrix, pts); Result := GetBounds(pts); end; //------------------------------------------------------------------------------ function AffineTransformImage(img: TImage32; matrix: TMatrixD; scaleAdjust: Boolean): TPoint; begin Result := AffineTransformImage(img, img, matrix, scaleAdjust); end; //------------------------------------------------------------------------------ function AffineTransformImage(img, targetImg: TImage32; matrix: TMatrixD; scaleAdjust: Boolean): TPoint; var i, j: integer; newWidth, newHeight: integer; sx, sy, x,y: double; xLimLo, yLimLo, xLimHi, yLimHi: double; pc: PColor32; tmp: TArrayOfColor32; dstRec: TRect; resampler: TResamplerFunction; {$IFDEF USE_DOWNSAMPLER_AUTOMATICALLY} useBoxDownsampler: Boolean; {$ENDIF} begin Result := NullPoint; if IsIdentityMatrix(matrix) or img.IsEmpty or (targetImg.Resampler = 0) then begin if targetImg <> img then targetImg.Assign(img); Exit; end; resampler := GetResampler(targetImg.Resampler); if not Assigned(resampler) then begin if targetImg <> img then targetImg.Assign(img); Exit; end; //auto-resize the image so it'll fit transformed image dstRec := img.Bounds; MatrixApply(matrix, dstRec); RectWidthHeight(dstRec, newWidth, newHeight); MatrixExtractScale(matrix, sx, sy); {$IFDEF USE_DOWNSAMPLER_AUTOMATICALLY} if (sx < 1.0) and (sy < 1.0) then begin //only use box downsampling when downsizing useBoxDownsampler := CanUseBoxDownsampler(matrix, sx, sy); end else useBoxDownsampler := false; if useBoxDownsampler then begin BoxDownSampling(img, targetImg, sx, sy); Exit; end; {$ENDIF} if scaleAdjust then begin sx := Max(1, sx * 0.5); sy := Max(1, sy * 0.5); end; //auto-translate the image too Result := dstRec.TopLeft; //starting with the result pixel coords, reverse lookup //the fractional coordinates in the untransformed image if not MatrixInvert(matrix) then begin if targetImg <> img then targetImg.Assign(img); Exit; end; NewColor32Array(tmp, newWidth * newHeight, True); pc := @tmp[0]; xLimLo := -0.5/sx; xLimHi := img.Width + 0.5/sx; yLimLo := -0.5/sy; yLimHi := img.Height + 0.5/sy; for i := dstRec.Top to dstRec.Bottom -1 do begin for j := dstRec.Left to dstRec.Right -1 do begin x := j; y := i; MatrixApply(matrix, x, y); if (x <= xLimLo) or (x >= xLimHi) or (y <= yLimLo) or (y >= yLimHi) then pc^ := clNone32 else // nb: -0.5 below is needed to properly center the transformed image // (and this is most obviously needed when there is large scaling) pc^ := resampler(img, x - 0.5, y - 0.5); inc(pc); end; end; targetImg.AssignPixelArray(tmp, newWidth, newHeight); end; //------------------------------------------------------------------------------ // Projective Transformation //------------------------------------------------------------------------------ procedure MatrixMulCoord(const matrix: TMatrixD; var x,y,z: double); {$IFDEF INLINE} inline; {$ENDIF} var xx, yy: double; begin xx := x; yy := y; x := matrix[0,0] *xx + matrix[0,1] *yy + matrix[0,2] *z; y := matrix[1,0] *xx + matrix[1,1] *yy + matrix[1,2] *z; z := matrix[2,0] *xx + matrix[2,1] *yy + matrix[2,2] *z; end; //------------------------------------------------------------------------------ function BasisToPoints(x1, y1, x2, y2, x3, y3, x4, y4: double): TMatrixD; var m2: TMatrixD; z4: double; begin Result := Matrix(x1, x2, x3, y1, y2, y3, 1, 1, 1); m2 := MatrixAdjugate(Result); z4 := 1; MatrixMulCoord(m2, x4, y4, z4); m2 := Matrix(x4, 0, 0, 0, y4, 0, 0, 0, z4); MatrixMultiply(Result, m2); end; //------------------------------------------------------------------------------ procedure GetSrcCoords256(const matrix: TMatrixD; var x, y: integer); {$IFDEF INLINE} inline; {$ENDIF} var xx,yy,zz: double; const Q: integer = MaxInt div 256; begin //returns coords multiplied by 256 in anticipation of the following //GetWeightedPixel function call which in turn expects the lower 8bits //of the integer coord value to represent a fraction. xx := x; yy := y; zz := 1; MatrixMulCoord(matrix, xx, yy, zz); if zz = 0 then begin if xx >= 0 then x := Q else x := -MaxInt; if yy >= 0 then y := Q else y := -MaxInt; end else begin xx := xx/zz; if xx > Q then x := MaxInt else if xx < -Q then x := -MaxInt else x := Round(xx *256); yy := yy/zz; if yy > Q then y := MaxInt else if yy < -Q then y := -MaxInt else y := Round(yy *256); end; end; //------------------------------------------------------------------------------ procedure GetSrcCoords(const matrix: TMatrixD; var x, y: double); {$IFDEF INLINE} inline; {$ENDIF} var zz: double; const Q: integer = MaxInt div 256; begin //returns coords multiplied by 256 in anticipation of the following //GetWeightedPixel function call which in turn expects the lower 8bits //of the integer coord value to represent a fraction. zz := 1; MatrixMulCoord(matrix, x, y, zz); if zz = 0 then begin if x >= 0 then x := Q else x := -MaxDouble; if y >= 0 then y := Q else y := -MaxDouble; end else begin x := x/zz; if x > Q then x := MaxDouble else if x < -Q then x := -MaxDouble; y := y/zz; if y > Q then y := MaxDouble else if y < -Q then y := -MaxDouble end; end; //------------------------------------------------------------------------------ function GetProjectionMatrix(const srcPts, dstPts: TPathD): TMatrixD; var dstMat: TMatrixD; begin if (length(srcPts) <> 4) or (length(dstPts) <> 4) then begin Result := IdentityMatrix; Exit; end; Result := BasisToPoints(srcPts[0].X, srcPts[0].Y, srcPts[1].X, srcPts[1].Y, srcPts[2].X, srcPts[2].Y, srcPts[3].X, srcPts[3].Y); dstMat := BasisToPoints(dstPts[0].X, dstPts[0].Y, dstPts[1].X, dstPts[1].Y, dstPts[2].X, dstPts[2].Y, dstPts[3].X, dstPts[3].Y); MatrixMultiply(Result, MatrixAdjugate(dstMat)); end; //------------------------------------------------------------------------------ function ProjectiveTransform(img: TImage32; const srcPts, dstPts: TPathD; const margins: TRect): Boolean; begin Result := ProjectiveTransform(img, img, srcPts, dstPts, margins); end; //------------------------------------------------------------------------------ function ProjectiveTransform(img, targetImg: TImage32; const srcPts, dstPts: TPathD; const margins: TRect): Boolean; var w,h,i,j: integer; x,y: double; xLimLo, yLimLo, xLimHi, yLimHi: double; rec: TRect; dstPts2: TPathD; mat: TMatrixD; tmp: TArrayOfColor32; pc: PColor32; resampler: TResamplerFunction; begin //https://math.stackexchange.com/a/339033/384709 if targetImg.Resampler = 0 then resampler := nil else resampler := GetResampler(targetImg.Resampler); Result := Assigned(resampler) and not img.IsEmpty and (Length(dstPts) = 4) and IsPathConvex(dstPts); if not Result then begin if targetImg <> img then targetImg.Assign(img); Exit; end; rec := GetBounds(dstPts); dec(rec.Left, margins.Left); dec(rec.Top, margins.Top); inc(rec.Right, margins.Right); inc(rec.Bottom, margins.Bottom); dstPts2 := TranslatePath(dstPts, -rec.Left, -rec.Top); xLimLo := -0.5; xLimHi := img.Width + 0.5; yLimLo := -0.5; yLimHi := img.Height + 0.5; mat := GetProjectionMatrix(srcPts, dstPts2); RectWidthHeight(rec, w, h); NewColor32Array(tmp, w * h, True); pc := @tmp[0]; for i := 0 to h -1 do for j := 0 to w -1 do begin x := j; y := i; GetSrcCoords(mat, x, y); if (x <= xLimLo) or (x >= xLimHi) or (y <= yLimLo) or (y >= yLimHi) then pc^ := clNone32 else pc^ := resampler(img, x -0.5, y -0.5); inc(pc); end; targetImg.BlockNotify; targetImg.AssignPixelArray(tmp, w, h); targetImg.UnblockNotify; end; //------------------------------------------------------------------------------ // Spline transformations //------------------------------------------------------------------------------ function ReColor(color, newColor: TColor32): TColor32; {$IFDEF INLINE} inline; {$ENDIF} begin Result := (color and $FF000000) or newColor; end; //------------------------------------------------------------------------------ function InterpolateSegX(const pt1, pt2: TPointD): TPathD; var i, x1, x2: integer; xo,dydx: double; begin Result := nil; if pt2.X > pt1.X then begin x1 := Ceil(pt1.X); x2 := Ceil(pt2.X); if x1 = x2 then Exit; dydx := (pt2.Y - pt1.Y)/(pt2.X - pt1.X); xo := x1 -pt1.X; NewPointDArray(Result, x2-x1, True); for i:= 0 to x2 - x1 -1 do begin Result[i].X := x1 +i; Result[i].Y := pt1.Y + dydx * (xo +i); end; end else begin x1 := Floor(pt1.X); x2 := Floor(pt2.X); if x1 = x2 then Exit; dydx := (pt2.Y - pt1.Y)/(pt2.X - pt1.X); xo := x1 -pt1.X; NewPointDArray(Result, x1-x2, True); for i:= 0 to x1 - x2 -1 do begin Result[i].X := x1 -i; Result[i].Y := pt1.Y + dydx * (xo -i); end; end; end; //------------------------------------------------------------------------------ function InterpolateSegY(const pt1, pt2: TPointD): TPathD; var i, y1,y2: integer; yo,dxdy: double; begin Result := nil; if pt2.Y > pt1.Y then begin y1 := Ceil(pt1.Y); y2 := Ceil(pt2.Y); if y1 = y2 then Exit; dxdy := (pt2.X - pt1.X)/(pt2.Y - pt1.Y); yo := y1 -pt1.Y; NewPointDArray(Result, y2-y1, True); for i:= 0 to y2 - y1 -1 do begin Result[i].Y := y1 +i; Result[i].X := pt1.X + dxdy * (yo +i); end; end else begin y1 := Floor(pt1.Y); y2 := Floor(pt2.Y); if y1 = y2 then Exit; dxdy := (pt2.X - pt1.X)/(pt2.Y - pt1.Y); yo := y1 -pt1.Y; NewPointDArray(Result, y1-y2, True); for i:= 0 to y1 - y2 -1 do begin Result[i].Y := y1 -i; Result[i].X := pt1.X + dxdy * (yo -i); end; end; end; //------------------------------------------------------------------------------ function InterpolatePathForX(const path: TPathD): TPathD; var i,len: integer; tmp: TPathD; begin Result := nil; len := length(path); if len < 2 then Exit; for i := 1 to len -1 do begin tmp := InterpolateSegX(path[i-1], path[i]); ConcatPaths(Result, tmp); end; end; //------------------------------------------------------------------------------ function InterpolatePathForY(const path: TPathD): TPathD; var i, len: integer; tmp: TPathD; begin Result := nil; len := length(path); if len < 2 then Exit; for i := 1 to len -1 do begin tmp := InterpolateSegY(path[i-1], path[i]); ConcatPaths(Result, tmp); end; end; //------------------------------------------------------------------------------ function SplineVertTransform(img: TImage32; const topSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; begin Result := SplineVertTransform(img, img, topSpline, splineType, backColor, offset); end; //------------------------------------------------------------------------------ function SplineVertTransform(img, targetImg: TImage32; const topSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; var i,j, w,h, len: integer; x,y, yy, q: double; yLimLo, yLimHi: double; distances: TArrayOfDouble; pc: PColor32; rec: TRect; tmp: TArrayOfColor32; topPath: TPathD; prevX: double; resampler: TResamplerFunction; backColoring, allowBackColoring: Boolean; begin offset := NullPoint; if targetImg.Resampler = 0 then resampler := nil else resampler := GetResampler(targetImg.Resampler); //convert the top spline control points into a flattened path if splineType = stQuadratic then topPath := FlattenQSpline(topSpline) else topPath := FlattenCSpline(topSpline); rec := GetBounds(topPath); //return false if the spline is invalid or there's no vertical transformation Result := Assigned(resampler) and not IsEmptyRect(rec); if not Result then begin if targetImg <> img then targetImg.Assign(img); Exit; end; offset := rec.TopLeft; topPath := InterpolatePathForX(topPath); len := Length(topPath); inc(rec.Bottom, img.Height); RectWidthHeight(rec, w, h); NewColor32Array(tmp, (w+1) * h, False); prevX := topPath[0].X; allowBackColoring := GetAlpha(backColor) > 2; backColor := backColor and $00FFFFFF; distances := GetCumulativeDistances(topPath); q := img.Width / distances[High(distances)]; yLimLo := -0.5; yLimHi := img.Height + 0.5; for i := 0 to len -1 do begin pc := @tmp[Round(topPath[i].X)-rec.Left]; backColoring := allowBackColoring and (prevX >= topPath[i].X); prevX := topPath[i].X; yy := topPath[i].Y; for j := rec.top to rec.bottom -1 do begin x := Distances[i]*q; y := j - yy; if (y < yLimLo) or (y > yLimHi) then // do nothing ! else if backColoring then pc^ := BlendToAlpha(pc^, ReColor(resampler(img, x -0.5, y -0.5), backColor)) else pc^ := BlendToAlpha(pc^, resampler(img, x -0.5, y -0.5)); inc(pc, w); end; end; // tmp was creates with "(w+1)*h". We take advantage of the // memory manager's inplace shrink. SetLength(tmp, w * h); targetImg.AssignPixelArray(tmp, w, h); end; //------------------------------------------------------------------------------ function SplineHorzTransform(img: TImage32; const leftSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; begin Result := SplineHorzTransform(img, img, leftSpline, splineType, backColor, offset); end; //------------------------------------------------------------------------------ function SplineHorzTransform(img, targetImg: TImage32; const leftSpline: TPathD; splineType: TSplineType; backColor: TColor32; out offset: TPoint): Boolean; var i,j, len, w,h: integer; x,y, xx, q, prevY: double; xLimLo, xLimHi: double; leftPath: TPathD; distances: TArrayOfDouble; rec: TRect; pc: PColor32; tmp: TArrayOfColor32; backColoring, allowBackColoring: Boolean; resampler: TResamplerFunction; begin offset := NullPoint; if targetImg.Resampler = 0 then resampler := nil else resampler := GetResampler(targetImg.Resampler); //convert the left spline control points into a flattened path if splineType = stQuadratic then leftPath := FlattenQSpline(leftSpline) else leftPath := FlattenCSpline(leftSpline); rec := GetBounds(leftPath); //return false if the spline is invalid or there's no horizontal transformation Result := Assigned(resampler) and not IsEmptyRect(rec); if not Result then begin if targetImg <> img then targetImg.Assign(img); Exit; end; offset := rec.TopLeft; leftPath := InterpolatePathForY(leftPath); len := Length(leftPath); inc(rec.Right, img.Width); RectWidthHeight(rec, w, h); NewColor32Array(tmp, w * (h+1), False); prevY := leftPath[0].Y; allowBackColoring := GetAlpha(backColor) > 2; backColor := backColor and $00FFFFFF; distances := GetCumulativeDistances(leftPath); q := img.Height / distances[High(distances)];; xLimLo := -0.5; xLimHi := img.Width + 0.5; for i := 0 to len -1 do begin pc := @tmp[Round(leftPath[i].Y - rec.Top) * w]; backColoring := allowBackColoring and (prevY >= leftPath[i].Y); prevY := leftPath[i].Y; xx := leftPath[i].X; y := Distances[i]*q; for j := rec.left to rec.right -1 do begin x := j - xx; if (x < xLimLo) or (x > xLimHi) then // do nothing ! else if backColoring then pc^ := BlendToAlpha(pc^, ReColor(resampler(img, x -0.5, y -0.5), backColor)) else pc^ := BlendToAlpha(pc^, resampler(img, x -0.5, y -0.5)); inc(pc); end; end; // tmp was creates with "w*(h+1)". We take advantage of the // memory manager's inplace shrink. SetLength(tmp, w * h); targetImg.AssignPixelArray(tmp, w, h); end; //------------------------------------------------------------------------------ // Miscellaneous WeightedColor function //------------------------------------------------------------------------------ function LimitByte(val: Cardinal): byte; {$IFDEF INLINE} inline; {$ENDIF} begin if val > 255 then result := 255 else result := val; end; //------------------------------------------------------------------------------ // TWeightedColor //------------------------------------------------------------------------------ procedure TWeightedColor.Reset; {$IFDEF CPUX64} var Zero: Int64; {$ENDIF CPUX64} begin {$IFDEF CPUX64} Zero := 0; fAddCount := Zero; fAlphaTot := Zero; fColorTotR := Zero; fColorTotG := Zero; fColorTotB := Zero; {$ELSE} fAddCount := 0; fAlphaTot := 0; fColorTotR := 0; fColorTotG := 0; fColorTotB := 0; {$ENDIF CPUX64} end; //------------------------------------------------------------------------------ procedure TWeightedColor.Reset(c: TColor32; w: Integer); var a: Cardinal; begin fAddCount := w; a := w * Byte(c shr 24); if a = 0 then begin fAlphaTot := 0; fColorTotB := 0; fColorTotG := 0; fColorTotR := 0; end else begin fAlphaTot := a; fColorTotB := (a * Byte(c)); fColorTotG := (a * Byte(c shr 8)); fColorTotR := (a * Byte(c shr 16)); end; end; //------------------------------------------------------------------------------ procedure TWeightedColor.AddWeight(w: Integer); begin inc(fAddCount, w); end; //------------------------------------------------------------------------------ procedure TWeightedColor.Add(c: TColor32; w: Integer); var a: Int64; begin inc(fAddCount, w); a := Byte(c shr 24); if a <> 0 then begin a := a * Cardinal(w); inc(fAlphaTot, a); inc(fColorTotB, (a * Byte(c))); inc(fColorTotG, (a * Byte(c shr 8))); inc(fColorTotR, (a * Byte(c shr 16))); end; end; //------------------------------------------------------------------------------ procedure TWeightedColor.Add(c: TColor32); // Optimized for w=1 var a: Int64; begin inc(fAddCount); a := Byte(c shr 24); if a = 0 then Exit; inc(fAlphaTot, a); inc(fColorTotB, (a * Byte(c))); inc(fColorTotG, (a * Byte(c shr 8))); inc(fColorTotR, (a * Byte(c shr 16))); end; //------------------------------------------------------------------------------ procedure TWeightedColor.Add(const other: TWeightedColor); begin inc(fAddCount, other.fAddCount); inc(fAlphaTot, other.fAlphaTot); inc(fColorTotR, other.fColorTotR); inc(fColorTotG, other.fColorTotG); inc(fColorTotB, other.fColorTotB); end; //------------------------------------------------------------------------------ procedure TWeightedColor.Subtract(c: TColor32; w: Integer); var a: Int64; begin dec(fAddCount, w); a := w * Byte(c shr 24); if a = 0 then Exit; dec(fAlphaTot, a); dec(fColorTotB, (a * Byte(c))); dec(fColorTotG, (a * Byte(c shr 8))); dec(fColorTotR, (a * Byte(c shr 16))); end; //------------------------------------------------------------------------------ procedure TWeightedColor.Subtract(c: TColor32); // Optimized for w=1 var a: Int64; begin dec(fAddCount); a := Byte(c shr 24); if a = 0 then Exit; dec(fAlphaTot, a); dec(fColorTotB, (a * Byte(c))); dec(fColorTotG, (a * Byte(c shr 8))); dec(fColorTotR, (a * Byte(c shr 16))); end; //------------------------------------------------------------------------------ procedure TWeightedColor.Subtract(const other: TWeightedColor); begin dec(fAddCount, other.fAddCount); dec(fAlphaTot, other.fAlphaTot); dec(fColorTotR, other.fColorTotR); dec(fColorTotG, other.fColorTotG); dec(fColorTotB, other.fColorTotB); end; //------------------------------------------------------------------------------ function TWeightedColor.AddSubtract(addC, subC: TColor32): Boolean; var a: Int64; begin // add+subtract => fAddCount stays the same // skip identical colors Result := False; if addC = subC then Exit; a := Byte(addC shr 24); if a > 0 then begin inc(fAlphaTot, a); inc(fColorTotB, (a * Byte(addC))); inc(fColorTotG, (a * Byte(addC shr 8))); inc(fColorTotR, (a * Byte(addC shr 16))); Result := True; end; a := Byte(subC shr 24); if a > 0 then begin dec(fAlphaTot, a); dec(fColorTotB, (a * Byte(subC))); dec(fColorTotG, (a * Byte(subC shr 8))); dec(fColorTotR, (a * Byte(subC shr 16))); Result := True; end; end; //------------------------------------------------------------------------------ function TWeightedColor.AddNoneSubtract(c: TColor32): Boolean; var a: Int64; begin // add+subtract => fAddCount stays the same a := Byte(c shr 24); if a > 0 then begin dec(fAlphaTot, a); dec(fColorTotB, (a * Byte(c))); dec(fColorTotG, (a * Byte(c shr 8))); dec(fColorTotR, (a * Byte(c shr 16))); Result := True; end else Result := False; end; //------------------------------------------------------------------------------ function TWeightedColor.GetColor: TColor32; var oneDivAlphaTot: double; alpha: Integer; begin result := clNone32; if (fAlphaTot <= 0) or (fAddCount <= 0) then Exit; {$IFDEF CPUX86} if fAlphaTot and $FFFFFFFF80000000 = 0 then // small, so can avoid _lldiv call alpha := (Cardinal(fAlphaTot) + (Cardinal(fAddCount) shr 1)) div Cardinal(fAddCount) else {$ENDIF CPUX86} alpha := (fAlphaTot + (Cardinal(fAddCount) shr 1)) div Cardinal(fAddCount); result := TColor32(Min(255, alpha)) shl 24; // alpha weighting has been applied to color channels, so div by fAlphaTot if fAlphaTot < DivOneByXTableSize then // use precalculated 1/X values oneDivAlphaTot := DivOneByXTable[fAlphaTot] else oneDivAlphaTot := 1/(fAlphaTot); // 1. Skip zero calculations. // 2. LimitByte(Integer): Values can't be less than 0, so don't use ClampByte. // 3. x86: Round expects the value in the st(0)/xmm1 FPU register. // Thus we need to do the calculation and Round call in one expression. // Otherwise the compiler will use a temporary double variable on // the stack that will cause unnecessary store and load operations. if fColorTotB > 0 then result := result or LimitByte(System.Round(fColorTotB * oneDivAlphaTot)); if fColorTotG > 0 then result := result or LimitByte(System.Round(fColorTotG * oneDivAlphaTot)) shl 8; if fColorTotR > 0 then result := result or LimitByte(System.Round(fColorTotR * oneDivAlphaTot)) shl 16; end; //------------------------------------------------------------------------------ // Initialization //------------------------------------------------------------------------------ procedure MakeDivOneByXTable; var i: Integer; begin DivOneByXTable[0] := 0; // NaN for i := 1 to High(DivOneByXTable) do DivOneByXTable[i] := 1/i; end; initialization MakeDivOneByXTable; end. doublecmd-1.1.30/components/Image32/source/Img32.Text.pas0000644000175000001440000041551015104114162021760 0ustar alexxusersunit Img32.Text; (******************************************************************************* * Author : Angus Johnson * * Version : 4.8 * * Date : 22 January 2025 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2019-2025 * * Purpose : TrueType fonts for TImage32 (without Windows dependencies) * * License : http://www.boost.org/LICENSE_1_0.txt * *******************************************************************************) interface {$I Img32.inc} uses {$IFDEF MSWINDOWS} Windows, ShlObj, ActiveX, {$ENDIF} Types, SysUtils, Classes, Math, {$IFDEF XPLAT_GENERICS} Generics.Collections, Generics.Defaults,{$ENDIF} Img32, Img32.Draw, Img32.Vector; type TFixed = type single; Int16 = type SmallInt; TFontFormat = (ffInvalid, ffTrueType, ffCompact); TFontFamily = (tfUnknown, tfSerif, tfSansSerif, tfMonospace); TFontReader = class; {$IFDEF MSWINDOWS} PArrayOfEnumLogFontEx = ^TArrayOfEnumLogFontEx; TArrayOfEnumLogFontEx = array of TEnumLogFontEx; // TFontReaderFamily - a custom (Image32) record TFontReaderFamily = record regularFR : TFontReader; boldFR : TFontReader; italicFR : TFontReader; boldItalicFR : TFontReader; end; {$ENDIF} {$IFNDEF Unicode} UnicodeString = WideString; {$ENDIF} TMacStyle = (msBold, msItalic, msUnderline, msOutline, msShadow, msCondensed, msExtended); TMacStyles = set of TMacStyle; TTextAlign = (taLeft, taRight, taCenter, taJustify); TTextVAlign = (tvaTop, tvaMiddle, tvaBottom); // nb: Avoid "packed" records as these cause problems with Android TFontHeaderTable = record sfntVersion : Cardinal; // $10000 or 'OTTO' numTables : WORD; searchRange : WORD; entrySelector : WORD; rangeShift : WORD; end; TFontTable = record tag : Cardinal; checkSum : Cardinal; offset : Cardinal; length : Cardinal; end; TFontTable_Cmap = record version : WORD; numTables : WORD; end; TCmapTblRec = record platformID : WORD; // Unicode = 0; Windows = 3 (obsolete); encodingID : WORD; offset : Cardinal; end; TCmapFormat0 = record format : WORD; // 0 length : WORD; language : WORD; end; TCmapFormat4 = record format : WORD; // 4 length : WORD; language : WORD; segCountX2 : WORD; searchRange : WORD; entrySelector : WORD; rangeShift : WORD; //endCodes : array of WORD; // last = $FFFF //reserved : WORD; // 0 //startCodes : array of WORD; end; TFormat4Rec = record startCode : WORD; endCode : WORD; idDelta : WORD; rangeOffset : WORD; end; TCmapFormat6 = record format : WORD; // 6 length : WORD; language : WORD; firstCode : WORD; entryCount : WORD; end; TCmapFormat12 = record format : WORD; // 12 reserved : WORD; // 0 length : DWORD; language : DWORD; nGroups : DWORD; //array[nGroups] of TFormat12Group; end; TFormat12Rec = record startCode : WORD; endCode : WORD; idDelta : WORD; rangeOffset : WORD; end; TFormat12Group = record startCharCode : DWORD; endCharCode : DWORD; startGlyphCode: DWORD; end; TFontTable_Kern = record version : WORD; numTables : WORD; end; TKernSubTbl = record version : WORD; length : WORD; coverage : WORD; end; TFormat0KernHdr = record nPairs : WORD; searchRange : WORD; entrySelector : WORD; rangeShift : WORD; end; TFormat0KernRec = record left : WORD; right : WORD; value : int16; end; TArrayOfKernRecs = array of TFormat0KernRec; TFontTable_Name = record format : WORD; count : WORD; stringOffset : WORD; //nameRecords[] end; TNameRec = record platformID : WORD; encodingID : WORD; languageID : WORD; nameID : WORD; length : WORD; offset : WORD; end; TFontTable_Head = record majorVersion : WORD; minorVersion : WORD; fontRevision : TFixed; checkSumAdjust : Cardinal; magicNumber : Cardinal; // $5F0F3CF5 flags : WORD; unitsPerEm : WORD; dateCreated : UInt64; dateModified : UInt64; xMin : Int16; yMin : Int16; xMax : Int16; yMax : Int16; macStyle : WORD; // see TMacStyles lowestRecPPEM : WORD; fontDirHint : Int16; // left to right, right to left indexToLocFmt : Int16; glyphDataFmt : Int16; end; TFontTable_Maxp = record version : TFixed; numGlyphs : WORD; maxPoints : WORD; maxContours : WORD; end; TFontTable_Glyf = record numContours : Int16; xMin : Int16; yMin : Int16; xMax : Int16; yMax : Int16; end; TFontTable_Hhea = record version : TFixed; ascent : Int16; descent : Int16; lineGap : Int16; advWidthMax : WORD; minLSB : Int16; minRSB : Int16; xMaxExtent : Int16; caretSlopeRise : Int16; caretSlopeRun : Int16; caretOffset : Int16; reserved : UInt64; metricDataFmt : Int16; numLongHorMets : WORD; end; TFontTable_Hmtx = record advanceWidth : WORD; leftSideBearing : Int16; end; TFontTable_Post = record majorVersion : WORD; minorVersion : WORD; italicAngle : TFixed; underlinePos : Int16; underlineWidth : Int16; isFixedPitch : Cardinal; //minMemType42 : Cardinal; //maxMemType42 : Cardinal; //minMemType1 : Cardinal; //maxMemType1 : Cardinal; end; ArrayOfUtf8String = array of Utf8String; // TFontInfo: a custom summary record TFontInfo = record fontFormat : TFontFormat; family : TFontFamily; familyNames : ArrayOfUtf8String; faceName : Utf8String; fullFaceName : Utf8String; style : Utf8String; copyright : Utf8String; manufacturer : Utf8String; dateCreated : TDatetime; dateModified : TDatetime; macStyles : TMacStyles; glyphCount : integer; unitsPerEm : integer; xMin : integer; yMin : integer; xMax : integer; yMax : integer; ascent : integer; descent : integer; lineGap : integer; advWidthMax : integer; minLSB : integer; minRSB : integer; xMaxExtent : integer; end; TKern = record rightGlyphIdx : integer; kernValue : integer; end; TArrayOfTKern = array of TKern; /////////////////////////////////////////// // the following point structures are only // used internally by the TFontReader class TPointEx = record pt: TPointD; flag: byte; end; TPathEx = array of TPointEx; TPathsEx = array of TPathEx; /////////////////////////////////////////// PGlyphInfo = ^TGlyphInfo; // TGlyphInfo: another custom record TGlyphInfo = record codepoint : integer; glyphIdx : WORD; unitsPerEm : integer; glyf : TFontTable_Glyf; hmtx : TFontTable_Hmtx; kernList : TArrayOfTKern; paths : TPathsD; end; TFontTableArray = array of TFontTable; TArrayOfWord = array of WORD; TArrayOfCardinal = array of Cardinal; TArrayOfCmapTblRec = array of TCmapTblRec; TTableName = (tblName, tblHead, tblHhea, tblCmap, tblMaxp, tblLoca, tblGlyf, tblHmtx, tblKern, tblPost); {$IFDEF ZEROBASEDSTR} {$ZEROBASEDSTRINGS OFF} {$ENDIF} TLoadFontResult = (lfrSuccess, lfrDuplicate, lfrInvalid); TFontManager = class private fMaxFonts: integer; {$IFDEF XPLAT_GENERICS} fFontList: TList; {$ELSE} fFontList: TList; {$ENDIF} procedure SetMaxFonts(value: integer); procedure SortFontListOnLastUse; procedure DeleteOldestFont; function ValidateFontLoad(var fr: TFontReader): TLoadFontResult; function FindDuplicate(fr: TFontReader): integer; public constructor Create; destructor Destroy; override; procedure Clear; {$IFDEF MSWINDOWS} // LoadFontReaderFamily: call will fail if the fonts have already been // loaded, or if the font family hasn't been installed in the PC. function LoadFontReaderFamily(const fontFamily: string): TLoadFontResult; overload; function LoadFontReaderFamily(const fontFamily: string; out fontReaderFamily: TFontReaderFamily): TLoadFontResult; overload; function LoadFontReader(const fontName: string): TFontReader; {$ENDIF} function LoadFromStream(stream: TStream): TFontReader; function LoadFromResource(const resName: string; resType: PChar): TFontReader; function LoadFromFile(const filename: string): TFontReader; function GetBestMatchFont(const fontInfo: TFontInfo): TFontReader; overload; function GetBestMatchFont(const styles: TMacStyles): TFontReader; overload; // FindReaderContainingGlyph: returns a TFontReader object containing the // specified glyph, otherwise nil. If a fontfamily is spedified, then the // search is limited to within that font family. If a TFontReader is found // then the out 'glyphIdx' parameter contains the index to the glyph // matching the supplied codepoint. function FindReaderContainingGlyph(codepoint: Cardinal; fntFamily: TFontFamily; out glyphIdx: WORD): TFontReader; function Delete(fontReader: TFontReader): Boolean; property MaxFonts: integer read fMaxFonts write SetMaxFonts; end; TFontReader = class(TInterfacedObj, INotifySender) private fFontManager : TFontManager; fDestroying : Boolean; fUpdateCount : integer; fRecipientList : TRecipients; fLastUsedTime : TDateTime; fStream : TMemoryStream; fFontWeight : integer; fFontInfo : TFontInfo; fTables : TFontTableArray; fTblIdxes : array[TTableName] of integer; fTbl_name : TFontTable_Name; fTbl_head : TFontTable_Head; fTbl_hhea : TFontTable_Hhea; fTbl_cmap : TFontTable_Cmap; fTbl_maxp : TFontTable_Maxp; fTbl_post : TFontTable_Post; fTbl_loca2 : TArrayOfWord; fTbl_loca4 : TArrayOfCardinal; fKernTable : TArrayOfKernRecs; fFormat0CodeMap : array of byte; fFormat4CodeMap : array of TFormat4Rec; fFormat12CodeMap : array of TFormat12Group; fFormat4Offset : integer; function GetTables: Boolean; function GetTable_name: Boolean; function GetTable_cmap: Boolean; function GetTable_maxp: Boolean; function GetTable_head: Boolean; function GetTable_loca: Boolean; function IsValidFontTable(const tbl : TFontTable): Boolean; {$IFDEF INLINE} inline; {$ENDIF} function GetTable_hhea: Boolean; procedure GetTable_kern; procedure GetTable_post; procedure GetFontFamily; function GetGlyphPaths(glyphIdx: WORD; var tbl_hmtx: TFontTable_Hmtx; out tbl_glyf: TFontTable_Glyf): TPathsEx; function GetGlyphIdxUsingCmap(codePoint: Cardinal): WORD; function GetSimpleGlyph(tbl_glyf: TFontTable_Glyf): TPathsEx; function GetCompositeGlyph(var tbl_glyf: TFontTable_Glyf; var tbl_hmtx: TFontTable_Hmtx): TPathsEx; function ConvertSplinesToBeziers(const pathsEx: TPathsEx): TPathsEx; procedure GetPathCoords(var paths: TPathsEx); function GetGlyphHorzMetrics(glyphIdx: WORD): TFontTable_Hmtx; function GetFontInfo: TFontInfo; function GetGlyphKernList(glyphIdx: WORD): TArrayOfTKern; function GetGlyphInfoInternal(glyphIdx: WORD): TGlyphInfo; function GetWeight: integer; procedure BeginUpdate; procedure EndUpdate; procedure NotifyRecipients(notifyFlag: TImg32Notification); protected property LastUsedTime: TDatetime read fLastUsedTime write fLastUsedTime; property PostTable: TFontTable_Post read fTbl_post; public constructor Create; overload; constructor CreateFromResource(const resName: string; resType: PChar); {$IFDEF MSWINDOWS} constructor Create(const fontname: string); overload; {$ENDIF} destructor Destroy; override; procedure Clear; procedure AddRecipient(recipient: INotifyRecipient); procedure DeleteRecipient(recipient: INotifyRecipient); function IsValidFontFormat: Boolean; function HasGlyph(codepoint: Cardinal): Boolean; function LoadFromStream(stream: TStream): Boolean; function LoadFromResource(const resName: string; resType: PChar): Boolean; function LoadFromFile(const filename: string): Boolean; {$IFDEF MSWINDOWS} function Load(const FontName: string): Boolean; overload; function Load(const logFont: TLogFont): Boolean; overload; function LoadUsingFontHdl(hdl: HFont): Boolean; {$ENDIF} function GetGlyphInfo(codepoint: Cardinal; out nextX: integer; out glyphInfo: TGlyphInfo): Boolean; property FontFamily: TFontFamily read fFontInfo.family; property FontInfo: TFontInfo read GetFontInfo; property Weight: integer read GetWeight; // range 100-900 end; TPageTextMetrics = record bounds : TRect; lineCount : integer; lineHeight : double; topLinePxOffset : integer; nextChuckIdx : integer; startOfLineIdx : TArrayOfInteger; justifyDeltas : TArrayOfDouble; lineWidths : TArrayOfDouble; end; TFontCache = class; TChunkedText = class; TTextChunk = class public owner : TChunkedText; index : integer; text : UnicodeString; left : double; top : double; width : double; height : double; backColor : TColor32; fontColor : TColor32; ascent : double; userData : Pointer; glyphOffsets : TArrayOfDouble; arrayOfPaths : TArrayOfPathsD; constructor Create(owner: TChunkedText; const chunk: UnicodeString; index: integer; fontCache: TFontCache; fontColor: TColor32; backColor: TColor32 = clNone32); end; TDrawChunkEvent = procedure(chunk: TTextChunk; const chunkRec: TRectD) of object; // TChunkedText: A font formatted list of text 'chunks' (usually space // seperated words) that will greatly speed up displaying word-wrapped text. TChunkedText = class private fSpaceWidth : double; fLastFont : TFontCache; {$IFDEF XPLAT_GENERICS} fList : TList; {$ELSE} fList : TList; {$ENDIF} fDrawChunkEvent: TDrawChunkEvent; function GetChunk(index: integer): TTextChunk; function GetText: UnicodeString; function GetCount: integer; protected function GetGlyphsOrDrawInternal(image: TImage32; const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double; out paths: TPathsD): TPageTextMetrics; public constructor Create; overload; constructor Create(const text: string; font: TFontCache; fontColor: TColor32 = clBlack32; backColor: TColor32 = clNone32); overload; destructor Destroy; override; procedure Clear; procedure DeleteChunk(Index: Integer); procedure DeleteChunkRange(startIdx, endIdx: Integer); procedure AddNewline(font: TFontCache); procedure AddSpace(font: TFontCache); overload; function GetPageMetrics(const rec: TRect; lineHeight: double; startingChunkIdx: integer): TPageTextMetrics; function GetChunkAndGlyphOffsetAtPt(const ptm: TPageTextMetrics; const pt: TPoint; out glyphIdx, chunkChrOff: integer): Boolean; function InsertTextChunk(font: TFontCache; index: integer; const chunk: UnicodeString; fontColor: TColor32 = clBlack32; backColor: TColor32 = clNone32): TTextChunk; function AddTextChunk(font: TFontCache; const chunk: UnicodeString; fontColor: TColor32 = clBlack32; backColor: TColor32 = clNone32): TTextChunk; procedure SetText(const text: UnicodeString; font: TFontCache; fontColor: TColor32 = clBlack32; backColor: TColor32 = clNone32); // DrawText: see Examples/FMX2, Examples/Text & Examples/Experimental apps. function DrawText(image: TImage32; const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double = 0.0): TPageTextMetrics; function GetTextGlyphs(const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double = 0.0): TPathsD; procedure ApplyNewFont(font: TFontCache); property Count: integer read GetCount; property Chunk[index: integer]: TTextChunk read GetChunk; default; property Text: UnicodeString read GetText; property OnDrawChunk: TDrawChunkEvent read fDrawChunkEvent write fDrawChunkEvent; end; // TFontCache: speeds up text rendering by parsing font files only once // for each accessed character. It can also scale glyphs to a specified // font height and invert glyphs too (which is necessary on Windows PCs). TFontCache = class(TInterfacedObj, INotifySender, INotifyRecipient) private {$IFDEF XPLAT_GENERICS} fGlyphInfoList : TList; {$ELSE} fGlyphInfoList : TList; {$ENDIF} fFontReader : TFontReader; fRecipientList : TRecipients; fSorted : Boolean; fScale : double; fUseKerning : Boolean; fFontHeight : double; fFlipVert : Boolean; fUnderlined : Boolean; fStrikeOut : Boolean; procedure NotifyRecipients(notifyFlag: TImg32Notification); function FoundInList(charOrdinal: Cardinal): Boolean; function AddGlyph(codepoint: Cardinal): PGlyphInfo; procedure VerticalFlip(var paths: TPathsD); procedure SetFlipVert(value: Boolean); procedure SetFontHeight(newHeight: double); procedure SetFontReader(newFontReader: TFontReader); procedure UpdateScale; procedure Sort; procedure GetMissingGlyphs(const ordinals: TArrayOfCardinal); function IsValidFont: Boolean; function GetAscent: double; function GetDescent: double; function GetGap: double; function GetLineHeight: double; function GetYyHeight: double; function GetTextOutlineInternal(x, y: double; const text: UnicodeString; underlineIdx: integer; out glyphs: TArrayOfPathsD; out offsets: TArrayOfDouble; out nextX: double): Boolean; overload; procedure UpdateFontReaderLastUsedTime; public constructor Create(fontReader: TFontReader = nil; fontHeight: double = 10); overload; destructor Destroy; override; procedure Clear; // TFontCache is both an INotifySender and an INotifyRecipient. // It receives notifications from a TFontReader object and it sends // notificiations to any number of TFontCache object users procedure ReceiveNotification(Sender: TObject; notify: TImg32Notification); procedure AddRecipient(recipient: INotifyRecipient); procedure DeleteRecipient(recipient: INotifyRecipient); function GetGlyphInfo(codepoint: Cardinal): PGlyphInfo; function GetTextOutline(x, y: double; const text: UnicodeString): TPathsD; overload; function GetTextOutline(const rec: TRectD; const text: UnicodeString; ta: TTextAlign; tav: TTextVAlign; underlineIdx: integer = 0): TPathsD; overload; function GetTextOutline(x, y: double; const text: UnicodeString; out nextX: double; underlineIdx: integer = 0): TPathsD; overload; // GetUnderlineOutline - another way to underline text. 'y' indicates the // text baseline, and 'dy' is the offset from that baseline. // if dy = InvalidD then the default offset is used (& based on linewidth). function GetUnderlineOutline(leftX, rightX, y: double; dy: double = invalidD; wavy: Boolean = false; strokeWidth: double = 0): TPathD; function GetVerticalTextOutline(x, y: double; const text: UnicodeString; lineHeight: double = 0.0): TPathsD; function GetAngledTextGlyphs(x, y: double; const text: UnicodeString; angleRadians: double; const rotatePt: TPointD; out nextPt: TPointD): TPathsD; // GetGlyphOffsets - there isn't always a one-to-one relationship between // text characters and glyphs since text can on occasions contain // "surrogate paired" characters (eg emoji characters). function GetGlyphOffsets(const text: UnicodeString; interCharSpace: double = 0): TArrayOfDouble; // As per the comment above, there isn't always a one-to-one relationship // between text characters and their codepoints (2 byte chars vs 4 bytes) function GetTextCodePoints(const text: UnicodeString): TArrayOfCardinal; function GetTextWidth(const text: UnicodeString): double; function CountCharsThatFit(const text: UnicodeString; maxWidth: double): integer; function GetSpaceWidth: double; property Ascent : double read GetAscent; property Descent : double read GetDescent; property LineGap : double read GetGap; property FontHeight : double read fFontHeight write SetFontHeight; property FontReader : TFontReader read fFontReader write SetFontReader; property InvertY : boolean read fFlipVert write SetFlipVert; property Kerning : boolean read fUseKerning write fUseKerning; property LineHeight : double read GetLineHeight; property YyHeight : double read GetYyHeight; property Scale : double read fScale; property Underlined : Boolean read fUnderlined write fUnderlined; property StrikeOut : Boolean read fStrikeOut write fStrikeOut; end; function DrawText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32): double; overload; procedure DrawText(image: TImage32; const rec: TRectD; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32; align: TTextAlign = taCenter; valign: TTextVAlign = tvaMiddle); overload; function DrawText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; renderer: TCustomRenderer): double; overload; function DrawAngledText(image: TImage32; x, y: double; angleRadians: double; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32): TPointD; procedure DrawVerticalText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; lineHeight: double = 0.0; textColor: TColor32 = clBlack32); function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; x, y: double; charSpacing: double; out charsThatFit: integer; out outX: double): TPathsD; overload; function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; perpendicOffset: integer = 0; charSpacing: double = 0): TPathsD; overload; function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; perpendicOffset: integer; charSpacing: double; out charsThatFit: integer): TPathsD; overload; function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; x, y: integer; charSpacing: double; out outX: double): TPathsD; overload; {$IFDEF MSWINDOWS} procedure FontHeightToFontSize(var logFontHeight: integer); procedure FontSizeToFontHeight(var logFontHeight: integer); function GetFontPixelHeight(logFontHeight: integer): double; function GetFontFolder: string; function GetInstalledTtfFilenames: TArrayOfString; // GetLogFonts: using DEFAULT_CHARSET will get logfonts // for ALL charsets that match the specified faceName. function GetLogFonts(const faceName: string; charSet: byte = DEFAULT_CHARSET): TArrayOfEnumLogFontEx; // GetLogFontFromEnumThatMatchesStyles: // will return false when no style match is found function GetLogFontFromEnumThatMatchesStyles(LogFonts: TArrayOfEnumLogFontEx; styles: TMacStyles; out logFont: TLogFont): Boolean; {$ENDIF} function FontManager: TFontManager; implementation uses Img32.Transform; resourcestring rsChunkedTextRangeError = 'TChunkedText: range error.'; rsFontCacheError = 'TFontCache error: notification received from the wrong TFontReader'; rsChunkedTextFontError = 'TChunkedText: invalid font error.'; var aFontManager: TFontManager; const lineFrac = 0.05; SPACE = ' '; //------------------------------------------------------------------------------ // Miscellaneous functions //------------------------------------------------------------------------------ // GetMeaningfulDateTime: returns UTC date & time procedure GetMeaningfulDateTime(const secsSince1904: Uint64; out yy,mo,dd, hh,mi,ss: cardinal); const dayInYrAtMthStart: array[boolean, 0..12] of cardinal = ((0,31,59,90,120,151,181,212,243,273,304,334,365), // non-leap year (0,31,60,91,121,152,182,213,244,274,305,335,366)); // leap year var isLeapYr: Boolean; const maxValidYear = 2100; secsPerHour = 3600; secsPerDay = 86400; secsPerNormYr = 31536000; secsPerLeapYr = secsPerNormYr + secsPerDay; secsPer4Years = secsPerNormYr * 3 + secsPerLeapYr; // 126230400; begin // Leap years are divisble by 4, except for centuries which are not // leap years unless they are divisble by 400. (Hence 2000 was a leap year, // but 1900 was not. But 1904 was a leap year because it's divisble by 4.) // Validate at http://www.mathcats.com/explore/elapsedtime.html ss := (secsSince1904 div secsPer4Years); // count '4years' since 1904 // manage invalid dates if (secsSince1904 = 0) or (ss > (maxValidYear-1904) div 4) then begin yy := 1904; mo := 1; dd := 1; hh := 0; mi := 0; ss := 0; Exit; end; yy := 1904 + (ss * 4); ss := secsSince1904 mod secsPer4Years; // secs since last leap yr isLeapYr := ss < secsPerLeapYr; if not isLeapYr then begin dec(ss, secsPerLeapYr); yy := yy + (ss div secsPerNormYr) + 1; ss := ss mod secsPerNormYr; // remaining secs in final year end; dd := 1 + ss div secsPerDay; // day number in final year mo := 1; // 1, because mo is base 1 while dayInYrAtMthStart[isLeapYr, mo] < dd do inc(mo); // remaining secs in month ss := ss - (dayInYrAtMthStart[isLeapYr, mo -1] * secsPerDay); dd := 1 + (ss div secsPerDay); // because dd is base 1 too ss := ss mod secsPerDay; hh := ss div secsPerHour; ss := ss mod secsPerHour; mi := ss div 60; ss := ss mod 60; end; //------------------------------------------------------------------------------ function MergeArrayOfPaths(const pa: TArrayOfPathsD): TPathsD; var i, j: integer; resultCount: integer; begin Result := nil; // Preallocate the Result-Array resultCount := 0; for i := 0 to High(pa) do inc(resultCount, Length(pa[i])); SetLength(Result, resultCount); resultCount := 0; for i := 0 to High(pa) do begin for j := 0 to High(pa[i]) do begin Result[resultCount] := pa[i][j]; inc(resultCount); end; end; end; //------------------------------------------------------------------------------ // MergeArrayOfPathsEx - merges AND translates/offsets paths function MergeArrayOfPathsEx(const pa: TArrayOfPathsD; dx, dy: double): TPathsD; var i, j: integer; resultCount: integer; begin Result := nil; // Preallocate the Result-Array resultCount := 0; for i := 0 to High(pa) do inc(resultCount, Length(pa[i])); SetLength(Result, resultCount); resultCount := 0; for i := 0 to High(pa) do begin for j := 0 to High(pa[i]) do begin Result[resultCount] := TranslatePath(pa[i][j], dx, dy); inc(resultCount); end; end; end; //------------------------------------------------------------------------------ function WordSwap(val: WORD): WORD; {$IFDEF ASM_X86} asm rol ax,8; end; {$ELSE} var v: array[0..1] of byte absolute val; r: array[0..1] of byte absolute result; begin r[0] := v[1]; r[1] := v[0]; end; {$ENDIF} //------------------------------------------------------------------------------ function Int16Swap(val: Int16): Int16; {$IFDEF ASM_X86} asm rol ax,8; end; {$ELSE} var v: array[0..1] of byte absolute val; r: array[0..1] of byte absolute result; begin r[0] := v[1]; r[1] := v[0]; end; {$ENDIF} //------------------------------------------------------------------------------ function Int32Swap(val: integer): integer; {$IFDEF ASM_X86} asm bswap eax end; {$ELSE} var i: integer; v: array[0..3] of byte absolute val; r: array[0..3] of byte absolute Result; // warning: do not inline begin for i := 0 to 3 do r[3-i] := v[i]; end; {$ENDIF} //------------------------------------------------------------------------------ function UInt64Swap(val: UInt64): UInt64; {$IFDEF ASM_X86} asm MOV EDX, val.Int64Rec.Lo BSWAP EDX MOV EAX, val.Int64Rec.Hi BSWAP EAX end; {$ELSE} var i: integer; v: array[0..7] of byte absolute val; r: array[0..7] of byte absolute Result; begin for i := 0 to 7 do r[7-i] := v[i]; end; {$ENDIF} //------------------------------------------------------------------------------ procedure GetByte(stream: TStream; out value: byte); {$IFDEF INLINE} inline; {$ENDIF} begin stream.Read(value, 1); end; //------------------------------------------------------------------------------ procedure GetShortInt(stream: TStream; out value: ShortInt); {$IFDEF INLINE} inline; {$ENDIF} begin stream.Read(value, 1); end; //------------------------------------------------------------------------------ function GetWord(stream: TStream; out value: WORD): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin result := stream.Position + SizeOf(value) < stream.Size; if not Result then Exit; stream.Read(value, SizeOf(value)); value := WordSwap(value); end; //------------------------------------------------------------------------------ function GetInt16(stream: TStream; out value: Int16): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin result := stream.Position + SizeOf(value) < stream.Size; if not Result then Exit; stream.Read(value, SizeOf(value)); value := Int16Swap(value); end; //------------------------------------------------------------------------------ function GetCardinal(stream: TStream; out value: Cardinal): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin result := stream.Position + SizeOf(value) < stream.Size; if not Result then Exit; stream.Read(value, SizeOf(value)); value := Cardinal(Int32Swap(Integer(value))); end; //------------------------------------------------------------------------------ function GetInt(stream: TStream; out value: integer): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin result := stream.Position + SizeOf(value) < stream.Size; if not Result then Exit; stream.Read(value, SizeOf(value)); value := Int32Swap(value); end; //------------------------------------------------------------------------------ function GetUInt64(stream: TStream; out value: UInt64): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin result := stream.Position + SizeOf(value) < stream.Size; if not Result then Exit; stream.Read(value, SizeOf(value)); value := UInt64Swap(value); end; //------------------------------------------------------------------------------ function Get2Dot14(stream: TStream; out value: single): Boolean; var val: Int16; begin result := GetInt16(stream, val); if result then value := val * 6.103515625e-5; // 16384; end; //------------------------------------------------------------------------------ function GetFixed(stream: TStream; out value: TFixed): Boolean; var val: integer; begin result := GetInt(stream, val); value := val * 1.52587890625e-5; // 1/35536 end; //------------------------------------------------------------------------------ function GetWideString(stream: TStream; len: integer): Utf8String; var i: integer; w: WORD; s: UnicodeString; begin len := len div 2; setLength(s, len); for i := 1 to len do begin GetWord(stream, w); if w = 0 then begin SetLength(s, i -1); break; end; s[i] := WideChar(w); end; Result := Utf8String(s); end; //------------------------------------------------------------------------------ function GetUtf8String(stream: TStream; len: integer): Utf8String; var i: integer; begin setLength(Result, len+1); Result[len+1] := #0; stream.Read(Result[1], len); for i := 1 to length(Result) do if Result[i] = #0 then begin SetLength(Result, i -1); break; end; end; //------------------------------------------------------------------------------ function SameText(const text1, text2: Utf8String): Boolean; overload; var len: integer; begin len := Length(text1); Result := (Length(text2) = len) and ((len = 0) or CompareMem(@text1[1], @text2[1], len)); end; //------------------------------------------------------------------------------ // TTrueTypeReader //------------------------------------------------------------------------------ constructor TFontReader.Create; begin fStream := TMemoryStream.Create; end; //------------------------------------------------------------------------------ constructor TFontReader.CreateFromResource(const resName: string; resType: PChar); begin Create; LoadFromResource(resName, resType); end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} constructor TFontReader.Create(const fontname: string); begin Create; Load(fontname); end; //------------------------------------------------------------------------------ {$ENDIF} destructor TFontReader.Destroy; begin Clear; NotifyRecipients(inDestroy); fStream.Free; if Assigned(fFontManager) then begin fDestroying := true; fFontManager.Delete(self); end; inherited; end; //------------------------------------------------------------------------------ procedure TFontReader.Clear; begin fTables := nil; fFormat4CodeMap := nil; fFormat12CodeMap := nil; fKernTable := nil; FillChar(fTbl_post, SizeOf(fTbl_post), 0); fFontInfo.fontFormat := ffInvalid; fFontInfo.family := tfUnknown; fFontWeight := 0; fStream.Clear; NotifyRecipients(inStateChange); end; //------------------------------------------------------------------------------ procedure TFontReader.BeginUpdate; begin inc(fUpdateCount); end; //------------------------------------------------------------------------------ procedure TFontReader.EndUpdate; begin dec(fUpdateCount); if fUpdateCount = 0 then NotifyRecipients(inStateChange); end; //------------------------------------------------------------------------------ procedure TFontReader.NotifyRecipients(notifyFlag: TImg32Notification); var i: integer; begin if fUpdateCount > 0 then Exit; for i := High(fRecipientList) downto 0 do try // try .. except block because when TFontReader is destroyed in a // finalization section, it's possible for recipients to have been // destroyed without calling their destructors. fRecipientList[i].ReceiveNotification(self, notifyFlag); except end; end; //------------------------------------------------------------------------------ procedure TFontReader.AddRecipient(recipient: INotifyRecipient); var len: integer; begin len := Length(fRecipientList); SetLength(fRecipientList, len+1); fRecipientList[len] := Recipient; end; //------------------------------------------------------------------------------ procedure TFontReader.DeleteRecipient(recipient: INotifyRecipient); var i, highI: integer; begin highI := High(fRecipientList); i := highI; while (i >= 0) and (fRecipientList[i] <> Recipient) do dec(i); if i < 0 then Exit; if i < highI then Move(fRecipientList[i+1], fRecipientList[i], (highI - i) * SizeOf(INotifyRecipient)); SetLength(fRecipientList, highI); end; //------------------------------------------------------------------------------ function TFontReader.IsValidFontFormat: Boolean; begin result := fFontInfo.fontFormat = ffTrueType; end; //------------------------------------------------------------------------------ function TFontReader.LoadFromStream(stream: TStream): Boolean; begin BeginUpdate; try Clear; fStream.CopyFrom(stream, 0); fStream.Position := 0; result := GetTables; if not result then Clear; finally EndUpdate; end; end; //------------------------------------------------------------------------------ function TFontReader.LoadFromResource(const resName: string; resType: PChar): Boolean; var rs: TResourceStream; begin BeginUpdate; rs := CreateResourceStream(resName, resType); try Result := assigned(rs) and LoadFromStream(rs); finally rs.free; EndUpdate; end; end; //------------------------------------------------------------------------------ function TFontReader.LoadFromFile(const filename: string): Boolean; var fs: TFileStream; begin try fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); try Result := LoadFromStream(fs); finally fs.free; end; except Result := False; end; end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} function GetFontMemStreamFromFontHdl(hdl: HFont; memStream: TMemoryStream): Boolean; var memDc: HDC; cnt: DWORD; begin result := false; if not Assigned(memStream) or (hdl = 0) then Exit; memDc := CreateCompatibleDC(0); try if SelectObject(memDc, hdl) = 0 then Exit; // get the required size of the font data (file) cnt := Windows.GetFontData(memDc, 0, 0, nil, 0); result := cnt <> $FFFFFFFF; if not Result then Exit; // copy the font data into the memory stream memStream.SetSize(cnt); Windows.GetFontData(memDc, 0, 0, memStream.Memory, cnt); finally DeleteDC(memDc); end; end; //------------------------------------------------------------------------------ function TFontReader.LoadUsingFontHdl(hdl: HFont): Boolean; var ms: TMemoryStream; begin ms := TMemoryStream.Create; try Result := GetFontMemStreamFromFontHdl(hdl, ms) and LoadFromStream(ms); finally ms.Free; end; end; //------------------------------------------------------------------------------ function TFontReader.Load(const FontName: string): Boolean; var lf: TLogFont; begin Result := false; if fontname = '' then Exit; FillChar(lf, sizeof(TLogFont), 0); lf.lfCharSet := DEFAULT_CHARSET; Move(fontname[1], lf.lfFaceName[0], Length(fontname) * SizeOf(Char)); Result := Load(lf); end; //------------------------------------------------------------------------------ function TFontReader.Load(const logFont: TLogFont): Boolean; var hdl: HFont; begin Result := false; hdl := CreateFontIndirect({$IFDEF FPC}@{$ENDIF}logfont); if hdl > 0 then try Result := LoadUsingFontHdl(hdl); finally DeleteObject(hdl); end; end; //------------------------------------------------------------------------------ {$ENDIF} function GetHeaderTable(stream: TStream; out headerTable: TFontHeaderTable): Boolean; begin result := stream.Position < stream.Size - SizeOf(TFontHeaderTable); if not result then Exit; GetCardinal(stream, headerTable.sfntVersion); GetWord(stream, headerTable.numTables); GetWord(stream, headerTable.searchRange); GetWord(stream, headerTable.entrySelector); GetWord(stream, headerTable.rangeShift); end; //------------------------------------------------------------------------------ function TFontReader.IsValidFontTable(const tbl : TFontTable): Boolean; begin Result := (fStream.Size >= tbl.offset + tbl.length); end; //------------------------------------------------------------------------------ function TFontReader.GetTables: Boolean; var i, tblCount: integer; tbl: TTableName; headerTable: TFontHeaderTable; begin result := false; if not GetHeaderTable(fStream, headerTable) then Exit; tblCount := headerTable.numTables; result := fStream.Position < fStream.Size - SizeOf(TFontTable) * tblCount; if not result then Exit; for tbl := low(TTableName) to High(TTableName) do fTblIdxes[tbl] := -1; SetLength(fTables, tblCount); for i := 0 to tblCount -1 do begin GetCardinal(fStream, fTables[i].tag); GetCardinal(fStream, fTables[i].checkSum); GetCardinal(fStream, fTables[i].offset); GetCardinal(fStream, fTables[i].length); case fTables[i].tag of $6E616D65: fTblIdxes[tblName] := i; $68656164: fTblIdxes[tblHead] := i; $676C7966: fTblIdxes[tblGlyf] := i; $6C6F6361: fTblIdxes[tblLoca] := i; $6D617870: fTblIdxes[tblMaxp] := i; $636D6170: fTblIdxes[tblCmap] := i; $68686561: fTblIdxes[tblHhea] := i; $686D7478: fTblIdxes[tblHmtx] := i; $6B65726E: fTblIdxes[tblKern] := i; $706F7374: fTblIdxes[tblPost] := i; end; end; if fTblIdxes[tblName] < 0 then fFontInfo.fontFormat := ffInvalid else if fTblIdxes[tblGlyf] < 0 then fFontInfo.fontFormat := ffCompact else fFontInfo.fontFormat := ffTrueType; result := (fFontInfo.fontFormat = ffTrueType) and (fTblIdxes[tblName] >= 0) and GetTable_name and (fTblIdxes[tblHead] >= 0) and GetTable_head and (fTblIdxes[tblHhea] >= 0) and GetTable_hhea and (fTblIdxes[tblMaxp] >= 0) and GetTable_maxp and (fTblIdxes[tblLoca] >= 0) and GetTable_loca and // loca must follow maxp (fTblIdxes[tblCmap] >= 0) and GetTable_cmap and (fTblIdxes[tblHmtx] >= 0) and IsValidFontTable(fTables[fTblIdxes[tblHmtx]]); if not Result then Exit; if (fTblIdxes[tblKern] >= 0) then GetTable_kern; if (fTblIdxes[tblPost] >= 0) then GetTable_post; GetFontFamily; end; //------------------------------------------------------------------------------ function TFontReader.GetTable_cmap: Boolean; var i,j : integer; segCount : integer; format : WORD; reserved : WORD; format4Rec : TCmapFormat4; format12Rec : TCmapFormat12; cmapTbl : TFontTable; cmapTblRecs : array of TCmapTblRec; label format4Error; begin Result := false; cmapTbl := fTables[fTblIdxes[tblCmap]]; if (fStream.Size < cmapTbl.offset + cmapTbl.length) then Exit; fStream.Position := cmapTbl.offset; GetWord(fStream, fTbl_cmap.version); GetWord(fStream, fTbl_cmap.numTables); // only use the unicode table (0: always first) SetLength(cmapTblRecs, fTbl_cmap.numTables); for i := 0 to fTbl_cmap.numTables -1 do begin GetWord(fStream, cmapTblRecs[i].platformID); GetWord(fStream, cmapTblRecs[i].encodingID); GetCardinal(fStream, cmapTblRecs[i].offset); end; for i := 0 to fTbl_cmap.numTables -1 do begin with cmapTblRecs[i] do if (platformID = 0) or (platformID = 3) then fStream.Position := cmapTbl.offset + offset else Continue; GetWord(fStream, format); case format of 0: begin if Assigned(fFormat0CodeMap) then Continue; GetWord(fStream, format4Rec.length); GetWord(fStream, format4Rec.language); SetLength(fFormat0CodeMap, 256); for j := 0 to 255 do GetByte(fStream, fFormat0CodeMap[j]); fFontInfo.glyphCount := 255; end; 4: // USC-2 begin if Assigned(fFormat4CodeMap) then Continue; GetWord(fStream, format4Rec.length); GetWord(fStream, format4Rec.language); fFontInfo.glyphCount := 0; GetWord(fStream, format4Rec.segCountX2); segCount := format4Rec.segCountX2 shr 1; GetWord(fStream, format4Rec.searchRange); GetWord(fStream, format4Rec.entrySelector); GetWord(fStream, format4Rec.rangeShift); SetLength(fFormat4CodeMap, segCount); for j := 0 to segCount -1 do GetWord(fStream, fFormat4CodeMap[j].endCode); if fFormat4CodeMap[segCount-1].endCode <> $FFFF then GoTo format4Error; GetWord(fStream, reserved); if reserved <> 0 then GoTo format4Error; for j := 0 to segCount -1 do GetWord(fStream, fFormat4CodeMap[j].startCode); if fFormat4CodeMap[segCount-1].startCode <> $FFFF then GoTo format4Error; for j := 0 to segCount -1 do GetWord(fStream, fFormat4CodeMap[j].idDelta); fFormat4Offset := fStream.Position; for j := 0 to segCount -1 do GetWord(fStream, fFormat4CodeMap[j].rangeOffset); if Assigned(fFormat12CodeMap) then Break else Continue; format4Error: fFormat4CodeMap := nil; end; 12: // USC-4 begin if Assigned(fFormat12CodeMap) then Continue; GetWord(fStream, reserved); GetCardinal(fStream, format12Rec.length); GetCardinal(fStream, format12Rec.language); GetCardinal(fStream, format12Rec.nGroups); SetLength(fFormat12CodeMap, format12Rec.nGroups); for j := 0 to format12Rec.nGroups -1 do with fFormat12CodeMap[j] do begin GetCardinal(fStream, startCharCode); GetCardinal(fStream, endCharCode); GetCardinal(fStream, startGlyphCode); end; if Assigned(fFormat4CodeMap) then Break; end; end; end; Result := Assigned(fFormat4CodeMap) or Assigned(fFormat12CodeMap); end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphIdxUsingCmap(codePoint: Cardinal): WORD; var i: integer; w: WORD; begin result := 0; // default to the 'missing' glyph if (codePoint < 256) and Assigned(fFormat0CodeMap) then Result := fFormat0CodeMap[codePoint] else if Assigned(fFormat12CodeMap) then begin for i := 0 to High(fFormat12CodeMap) do with fFormat12CodeMap[i] do if codePoint <= endCharCode then begin if codePoint < startCharCode then Break; result := (startGlyphCode + WORD(codePoint - startCharCode)); Break; end; end else if (codePoint < $FFFF) and Assigned(fFormat4CodeMap) then begin for i := 0 to High(fFormat4CodeMap) do with fFormat4CodeMap[i] do if codePoint <= endCode then begin if codePoint < startCode then Break; if rangeOffset > 0 then begin fStream.Position := fFormat4Offset + rangeOffset + 2 * (i + WORD(codePoint - startCode)); GetWord(fStream, w); if w < fTbl_maxp.numGlyphs then Result := w; end else result := (idDelta + codePoint) and $FFFF; Break; end; end; end; //------------------------------------------------------------------------------ function TFontReader.GetTable_maxp: Boolean; var maxpTbl: TFontTable; begin maxpTbl := fTables[fTblIdxes[tblMaxp]]; Result := (fStream.Size >= maxpTbl.offset + maxpTbl.length) and (maxpTbl.length >= SizeOf(TFixed) + SizeOf(WORD)); if not Result then Exit; fStream.Position := maxpTbl.offset; GetFixed(fStream, fTbl_maxp.version); GetWord(fStream, fTbl_maxp.numGlyphs); if fTbl_maxp.version >= 1 then begin GetWord(fStream, fTbl_maxp.maxPoints); GetWord(fStream, fTbl_maxp.maxContours); fFontInfo.glyphCount := fTbl_maxp.numGlyphs; end else Result := false; end; //------------------------------------------------------------------------------ function TFontReader.GetTable_loca: Boolean; var i: integer; locaTbl: TFontTable; begin locaTbl := fTables[fTblIdxes[tblLoca]]; Result := fStream.Size >= locaTbl.offset + locaTbl.length; if not Result then Exit; fStream.Position := locaTbl.offset; if fTbl_head.indexToLocFmt = 0 then begin SetLength(fTbl_loca2, fTbl_maxp.numGlyphs +1); for i := 0 to fTbl_maxp.numGlyphs do GetWord(fStream, fTbl_loca2[i]); end else begin SetLength(fTbl_loca4, fTbl_maxp.numGlyphs +1); for i := 0 to fTbl_maxp.numGlyphs do GetCardinal(fStream, fTbl_loca4[i]); end; end; //------------------------------------------------------------------------------ function IsUnicode(platformID: WORD): Boolean; begin Result := (platformID = 0) or (platformID = 3); end; //------------------------------------------------------------------------------ function GetNameRecString(stream: TStream; const nameRec: TNameRec; offset: cardinal): Utf8String; var sPos, len: integer; begin sPos := stream.Position; stream.Position := offset + nameRec.offset; if IsUnicode(nameRec.platformID) then Result := GetWideString(stream, nameRec.length) else Result := GetUtf8String(stream, nameRec.length); len := Length(Result); if (len > 0) and (Result[len] = #0) then SetLength(Result, len -1); stream.Position := sPos; end; //------------------------------------------------------------------------------ function TFontReader.GetTable_name: Boolean; var i: integer; offset: cardinal; nameRec: TNameRec; nameTbl: TFontTable; begin fFontInfo.faceName := ''; fFontInfo.fullFaceName := ''; fFontInfo.style := ''; nameTbl := fTables[fTblIdxes[tblName]]; Result := IsValidFontTable(nameTbl) and (nameTbl.length >= SizeOf(TFontTable_Name)); if not Result then Exit; fStream.Position := nameTbl.offset; GetWord(fStream, fTbl_name.format); GetWord(fStream, fTbl_name.count); GetWord(fStream, fTbl_name.stringOffset); offset := nameTbl.offset + fTbl_name.stringOffset; for i := 1 to fTbl_name.count do begin GetWord(fStream, nameRec.platformID); GetWord(fStream, nameRec.encodingID); GetWord(fStream, nameRec.languageID); GetWord(fStream, nameRec.nameID); GetWord(fStream, nameRec.length); GetWord(fStream, nameRec.offset); case nameRec.nameID of 0: fFontInfo.copyright := GetNameRecString(fStream, nameRec, offset); 1: fFontInfo.faceName := GetNameRecString(fStream, nameRec, offset); 2: fFontInfo.style := GetNameRecString(fStream, nameRec, offset); 3: continue; 4: fFontInfo.fullFaceName := GetNameRecString(fStream, nameRec, offset); 5..7: continue; 8: fFontInfo.manufacturer := GetNameRecString(fStream, nameRec, offset); end; end; end; //------------------------------------------------------------------------------ function TFontReader.GetTable_head: Boolean; var headTbl: TFontTable; yy,mo,dd,hh,mi,ss: cardinal; begin headTbl := fTables[fTblIdxes[tblHead]]; Result := IsValidFontTable(headTbl) and (headTbl.length >= 54); if not Result then Exit; fStream.Position := headTbl.offset; GetWord(fStream, fTbl_head.majorVersion); GetWord(fStream, fTbl_head.minorVersion); GetFixed(fStream, fTbl_head.fontRevision); GetCardinal(fStream, fTbl_head.checkSumAdjust); GetCardinal(fStream, fTbl_head.magicNumber); GetWord(fStream, fTbl_head.flags); GetWord(fStream, fTbl_head.unitsPerEm); GetUInt64(fStream, fTbl_head.dateCreated); GetMeaningfulDateTime(fTbl_head.dateCreated, yy,mo,dd,hh,mi,ss); fFontInfo.dateCreated := EncodeDate(yy,mo,dd) + EncodeTime(hh,mi,ss, 0); GetUInt64(fStream, fTbl_head.dateModified); GetMeaningfulDateTime(fTbl_head.dateModified, yy,mo,dd,hh,mi,ss); fFontInfo.dateModified := EncodeDate(yy,mo,dd) + EncodeTime(hh,mi,ss, 0); GetInt16(fStream, fTbl_head.xMin); GetInt16(fStream, fTbl_head.yMin); GetInt16(fStream, fTbl_head.xMax); GetInt16(fStream, fTbl_head.yMax); GetWord(fStream, fTbl_head.macStyle); fFontInfo.macStyles := TMacStyles(Byte(fTbl_head.macStyle)); GetWord(fStream, fTbl_head.lowestRecPPEM); GetInt16(fStream, fTbl_head.fontDirHint); GetInt16(fStream, fTbl_head.indexToLocFmt); GetInt16(fStream, fTbl_head.glyphDataFmt); result := fTbl_head.magicNumber = $5F0F3CF5 end; //------------------------------------------------------------------------------ function TFontReader.GetTable_hhea: Boolean; var hheaTbl: TFontTable; begin hheaTbl := fTables[fTblIdxes[tblHhea]]; Result := IsValidFontTable(hheaTbl) and (hheaTbl.length >= 36); if not Result then Exit; fStream.Position := hheaTbl.offset; GetFixed(fStream, fTbl_hhea.version); GetInt16(fStream, fTbl_hhea.ascent); GetInt16(fStream, fTbl_hhea.descent); GetInt16(fStream, fTbl_hhea.lineGap); GetWord(fStream, fTbl_hhea.advWidthMax); GetInt16(fStream, fTbl_hhea.minLSB); GetInt16(fStream, fTbl_hhea.minRSB); GetInt16(fStream, fTbl_hhea.xMaxExtent); GetInt16(fStream, fTbl_hhea.caretSlopeRise); GetInt16(fStream, fTbl_hhea.caretSlopeRun); GetInt16(fStream, fTbl_hhea.caretOffset); GetUInt64(fStream, fTbl_hhea.reserved); GetInt16(fStream, fTbl_hhea.metricDataFmt); GetWord(fStream, fTbl_hhea.numLongHorMets); end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphHorzMetrics(glyphIdx: WORD): TFontTable_Hmtx; var tbl : TFontTable; begin tbl := fTables[fTblIdxes[tblHmtx]]; if glyphIdx < fTbl_hhea.numLongHorMets then begin fStream.Position := Integer(tbl.offset) + glyphIdx * 4; GetWord(fStream, Result.advanceWidth); GetInt16(fStream, Result.leftSideBearing); end else begin fStream.Position := Integer(tbl.offset) + Integer(fTbl_hhea.numLongHorMets -1) * 4; GetWord(fStream, Result.advanceWidth); fStream.Position := Integer(tbl.offset + fTbl_hhea.numLongHorMets * 4) + 2 * (glyphIdx - Integer(fTbl_hhea.numLongHorMets)); GetInt16(fStream, Result.leftSideBearing); end; end; //------------------------------------------------------------------------------ procedure TFontReader.GetTable_kern; var i : integer; tbl : TFontTable; tbl_kern : TFontTable_Kern; kernSub : TKernSubTbl; format0KernHdr : TFormat0KernHdr; begin if fTblIdxes[tblKern] < 0 then Exit; tbl := fTables[fTblIdxes[tblKern]]; if not IsValidFontTable(tbl) then Exit; fStream.Position := Integer(tbl.offset); GetWord(fStream, tbl_kern.version); GetWord(fStream, tbl_kern.numTables); if tbl_kern.numTables = 0 then Exit; // assume there's only one kern table GetWord(fStream, kernSub.version); GetWord(fStream, kernSub.length); GetWord(fStream, kernSub.coverage); // we're currently only interested in Format0 horizontal kerning if kernSub.coverage <> 1 then Exit; GetWord(fStream, format0KernHdr.nPairs); GetWord(fStream, format0KernHdr.searchRange); GetWord(fStream, format0KernHdr.entrySelector); GetWord(fStream, format0KernHdr.rangeShift); SetLength(fKernTable, format0KernHdr.nPairs); for i := 0 to format0KernHdr.nPairs -1 do begin GetWord(fStream, fKernTable[i].left); GetWord(fStream, fKernTable[i].right); GetInt16(fStream, fKernTable[i].value); end; end; //------------------------------------------------------------------------------ procedure TFontReader.GetTable_post; var tbl: TFontTable; begin if fTblIdxes[tblPost] < 0 then Exit; tbl := fTables[fTblIdxes[tblPost]]; if not IsValidFontTable(tbl) then Exit; fStream.Position := Integer(tbl.offset); GetWord(fStream, fTbl_post.majorVersion); GetWord(fStream, fTbl_post.minorVersion); GetFixed(fStream, fTbl_post.italicAngle); GetInt16(fStream, fTbl_post.underlinePos); GetInt16(fStream, fTbl_post.underlineWidth); GetCardinal(fStream, fTbl_post.isFixedPitch); end; //------------------------------------------------------------------------------ function FindKernInTable(glyphIdx: WORD; const kernTable: TArrayOfKernRecs): integer; var i,l,r: integer; begin l := 0; r := High(kernTable); while l <= r do begin Result := (l + r) shr 1; i := kernTable[Result].left - glyphIdx; if i < 0 then begin l := Result +1 end else begin if i = 0 then begin // found a match! Now find the very first one ... while (Result > 0) and (kernTable[Result-1].left = glyphIdx) do dec(Result); Exit; end; r := Result -1; end; end; Result := -1; end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphKernList(glyphIdx: WORD): TArrayOfTKern; var i,j,len: integer; begin result := nil; i := FindKernInTable(glyphIdx, fKernTable); if i < 0 then Exit; len := Length(fKernTable); j := i +1; while (j < len) and (fKernTable[j].left = glyphIdx) do inc(j); SetLength(Result, j - i); for j := 0 to High(Result) do with fKernTable[i+j] do begin Result[j].rightGlyphIdx := right; Result[j].kernValue := value; end; end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphPaths(glyphIdx: WORD; var tbl_hmtx: TFontTable_Hmtx; out tbl_glyf: TFontTable_Glyf): TPathsEx; var offset: cardinal; glyfTbl: TFontTable; begin result := nil; if fTbl_head.indexToLocFmt = 0 then begin offset := fTbl_loca2[glyphIdx] *2; if offset = fTbl_loca2[glyphIdx+1] *2 then Exit; // no contours end else begin offset := fTbl_loca4[glyphIdx]; if offset = fTbl_loca4[glyphIdx+1] then Exit; // no contours end; glyfTbl := fTables[fTblIdxes[tblGlyf]]; if offset >= glyfTbl.length then Exit; inc(offset, glyfTbl.offset); fStream.Position := offset; GetInt16(fStream, tbl_glyf.numContours); GetInt16(fStream, tbl_glyf.xMin); GetInt16(fStream, tbl_glyf.yMin); GetInt16(fStream, tbl_glyf.xMax); GetInt16(fStream, tbl_glyf.yMax); if tbl_glyf.numContours < 0 then result := GetCompositeGlyph(tbl_glyf, tbl_hmtx) else result := GetSimpleGlyph(tbl_glyf); end; //------------------------------------------------------------------------------ const // glyf flags - simple ON_CURVE = $1; X_SHORT_VECTOR = $2; Y_SHORT_VECTOR = $4; REPEAT_FLAG = $8; X_DELTA = $10; Y_DELTA = $20; //------------------------------------------------------------------------------ function TFontReader.GetSimpleGlyph(tbl_glyf: TFontTable_Glyf): TPathsEx; var i,j, len: integer; instructLen: WORD; flag, repeats: byte; contourEnds: TArrayOfWord; begin SetLength(contourEnds, tbl_glyf.numContours); for i := 0 to High(contourEnds) do GetWord(fStream, contourEnds[i]); // hints are currently ignored GetWord(fStream, instructLen); fStream.Position := fStream.Position + instructLen; setLength(result, tbl_glyf.numContours); repeats := 0; flag := 0; // help the compiler with "flag isn't initialized" for i := 0 to High(result) do begin if i = 0 then len := contourEnds[0] +1 else len := contourEnds[i] - contourEnds[i-1]; setLength(result[i], len); for j := 0 to len -1 do begin if repeats = 0 then begin GetByte(fStream, flag); if flag and REPEAT_FLAG = REPEAT_FLAG then GetByte(fStream, repeats); end else dec(repeats); result[i][j].flag := flag; end; end; if tbl_glyf.numContours > 0 then GetPathCoords(result); end; //------------------------------------------------------------------------------ procedure TFontReader.GetPathCoords(var paths: TPathsEx); var i,j: integer; xi,yi: Int16; flag, xb,yb: byte; pt: TPoint; begin // get X coords pt := Point(0,0); xi := 0; for i := 0 to high(paths) do begin for j := 0 to high(paths[i]) do begin flag := paths[i][j].flag; if flag and X_SHORT_VECTOR = X_SHORT_VECTOR then begin GetByte(fStream, xb); if (flag and X_DELTA) = 0 then dec(pt.X, xb) else inc(pt.X, xb); end else begin if flag and X_DELTA = 0 then begin if GetInt16(fStream, xi) then pt.X := pt.X + xi; end; end; paths[i][j].pt.X := pt.X; end; end; // get Y coords yi := 0; for i := 0 to high(paths) do begin for j := 0 to high(paths[i]) do begin flag := paths[i][j].flag; if flag and Y_SHORT_VECTOR = Y_SHORT_VECTOR then begin GetByte(fStream, yb); if (flag and Y_DELTA) = 0 then dec(pt.Y, yb) else inc(pt.Y, yb); end else begin if flag and Y_DELTA = 0 then begin if GetInt16(fStream, yi) then pt.Y := pt.Y + yi; end; end; paths[i][j].pt.Y := pt.Y; end; end; end; //------------------------------------------------------------------------------ function OnCurve(flag: byte): Boolean; begin result := flag and ON_CURVE <> 0; end; //------------------------------------------------------------------------------ function MidPoint(const pt1, pt2: TPointEx): TPointEx; begin Result.pt.X := (pt1.pt.X + pt2.pt.X) / 2; Result.pt.Y := (pt1.pt.Y + pt2.pt.Y) / 2; Result.flag := ON_CURVE; end; //------------------------------------------------------------------------------ function TFontReader.ConvertSplinesToBeziers(const pathsEx: TPathsEx): TPathsEx; var i,j,k: integer; pt: TPointEx; prevOnCurve: Boolean; begin SetLength(Result, Length(pathsEx)); for i := 0 to High(pathsEx) do begin SetLength(Result[i], Length(pathsEx[i]) *2); Result[i][0] := pathsEx[i][0]; k := 1; prevOnCurve := true; for j := 1 to High(pathsEx[i]) do begin if OnCurve(pathsEx[i][j].flag) then begin prevOnCurve := true; end else if not prevOnCurve then begin pt := MidPoint(pathsEx[i][j-1], pathsEx[i][j]); Result[i][k] := pt; inc(k); end else prevOnCurve := false; Result[i][k] := pathsEx[i][j]; inc(k); end; SetLength(Result[i], k); end; end; //------------------------------------------------------------------------------ procedure AppendPathsEx(var paths: TPathsEx; const extra: TPathsEx); var i, len1, len2: integer; begin len2 := length(extra); len1 := length(paths); setLength(paths, len1 + len2); for i := 0 to len2 -1 do paths[len1+i] := Copy(extra[i], 0, length(extra[i])); end; //------------------------------------------------------------------------------ procedure AffineTransform(const a,b,c,d,e,f: double; var pathsEx: TPathsEx); var i,j: integer; mat: TMatrixD; begin // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html if ((a = 0) and (b = 0)) or ((c = 0) and (d = 0)) then begin if (e = 0) and (f = 0) then Exit; for i := 0 to High(pathsEx) do for j := 0 to High(pathsEx[i]) do with pathsEx[i][j].pt do begin X := X + e; y := Y + f; end; end else begin mat[0,0] := a; mat[0,1] := b; mat[1,0] := c; mat[1,1] := d; mat[2][0] := e; mat[2][1] := f; for i := 0 to High(pathsEx) do for j := 0 to High(pathsEx[i]) do MatrixApply(mat, pathsEx[i][j].pt); end; end; //------------------------------------------------------------------------------ function TFontReader.GetCompositeGlyph(var tbl_glyf: TFontTable_Glyf; var tbl_hmtx: TFontTable_Hmtx): TPathsEx; var streamPos: integer; flag, glyphIndex: WORD; arg1_i8, arg2_i8: ShortInt; arg1_i16, arg2_i16: Int16; tmp_single: single; a,b,c,d,e,f: double; componentPaths: TPathsEx; component_tbl_glyf: TFontTable_Glyf; component_tbl_hmtx: TFontTable_Hmtx; const ARG_1_AND_2_ARE_WORDS = $1; ARGS_ARE_XY_VALUES = $2; ROUND_XY_TO_GRID = $4; WE_HAVE_A_SCALE = $8; MORE_COMPONENTS = $20; WE_HAVE_AN_X_AND_Y_SCALE = $40; WE_HAVE_A_TWO_BY_TWO = $80; WE_HAVE_INSTRUCTIONS = $100; USE_MY_METRICS = $200; begin result := nil; flag := MORE_COMPONENTS; while (flag and MORE_COMPONENTS <> 0) do begin glyphIndex := 0; a := 0; b := 0; c := 0; d := 0; e := 0; f := 0; GetWord(fStream, flag); GetWord(fStream, glyphIndex); if (flag and ARG_1_AND_2_ARE_WORDS <> 0) then begin GetInt16(fStream, arg1_i16); GetInt16(fStream, arg2_i16); if (flag and ARGS_ARE_XY_VALUES <> 0) then begin e := arg1_i16; f := arg2_i16; end; end else begin GetShortInt(fStream, arg1_i8); GetShortInt(fStream, arg2_i8); if (flag and ARGS_ARE_XY_VALUES <> 0) then begin e := arg1_i8; f := arg2_i8; end; end; if (flag and WE_HAVE_A_SCALE <> 0) then begin Get2Dot14(fStream, tmp_single); a := tmp_single; d := tmp_single; end else if (flag and WE_HAVE_AN_X_AND_Y_SCALE <> 0) then begin Get2Dot14(fStream, tmp_single); a := tmp_single; Get2Dot14(fStream, tmp_single); d := tmp_single; end else if (flag and WE_HAVE_A_TWO_BY_TWO <> 0) then begin Get2Dot14(fStream, tmp_single); a := tmp_single; Get2Dot14(fStream, tmp_single); b := tmp_single; Get2Dot14(fStream, tmp_single); c := tmp_single; Get2Dot14(fStream, tmp_single); d := tmp_single; end; component_tbl_hmtx := tbl_hmtx; // GetGlyphPaths() will change the stream position, so save it. streamPos := fStream.Position; componentPaths := GetGlyphPaths(glyphIndex, component_tbl_hmtx, component_tbl_glyf); // return to saved stream position fStream.Position := streamPos; if (flag and ARGS_ARE_XY_VALUES <> 0) then AffineTransform(a,b,c,d,e,f, componentPaths); // (#131) if (flag and USE_MY_METRICS <> 0) then tbl_hmtx := component_tbl_hmtx; // (#24) if component_tbl_glyf.numContours > 0 then begin if tbl_glyf.numContours < 0 then tbl_glyf.numContours := 0; inc(tbl_glyf.numContours, component_tbl_glyf.numContours); tbl_glyf.xMin := Min(tbl_glyf.xMin, component_tbl_glyf.xMin); tbl_glyf.xMax := Max(tbl_glyf.xMax, component_tbl_glyf.xMax); tbl_glyf.yMin := Min(tbl_glyf.yMin, component_tbl_glyf.yMin); tbl_glyf.yMax := Max(tbl_glyf.yMax, component_tbl_glyf.yMax); end; AppendPathsEx(result, componentPaths); end; end; //------------------------------------------------------------------------------ function TFontReader.HasGlyph(codepoint: Cardinal): Boolean; begin Result := GetGlyphIdxUsingCmap(codepoint) > 0; end; //------------------------------------------------------------------------------ function FlattenPathExBeziers(pathsEx: TPathsEx): TPathsD; var i,j : integer; pt2: TPointEx; bez: TPathD; begin setLength(Result, length(pathsEx)); for i := 0 to High(pathsEx) do begin SetLength(Result[i],1); Result[i][0] := pathsEx[i][0].pt; for j := 1 to High(pathsEx[i]) do begin if OnCurve(pathsEx[i][j].flag) then begin AppendPoint(Result[i], pathsEx[i][j].pt); end else begin if j = High(pathsEx[i]) then pt2 := pathsEx[i][0] else pt2 := pathsEx[i][j+1]; bez := FlattenQBezier(pathsEx[i][j-1].pt, pathsEx[i][j].pt, pt2.pt); ConcatPaths(Result[i], bez); end; end; end; end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphInfo(codepoint: Cardinal; out nextX: integer; out glyphInfo: TGlyphInfo): Boolean; var glyphIdx: WORD; begin Result := IsValidFontFormat; if not Result then Exit; glyphIdx := GetGlyphIdxUsingCmap(codepoint); glyphInfo := GetGlyphInfoInternal(glyphIdx); glyphInfo.hmtx := GetGlyphHorzMetrics(glyphIdx); nextX := glyphInfo.hmtx.advanceWidth; glyphInfo.codepoint := codepoint; end; //------------------------------------------------------------------------------ function TFontReader.GetFontInfo: TFontInfo; begin if not IsValidFontFormat then begin FillChar(Result, SizeOf(Result), 0); Exit; end; result := fFontInfo; if result.unitsPerEm > 0 then Exit; // and updated the record with everything except the strings result.unitsPerEm := fTbl_head.unitsPerEm; result.xMin := fTbl_head.xMin; result.xMax := fTbl_head.xMax; result.yMin := fTbl_head.yMin; result.yMax := fTbl_head.yMax; // note: the following three fields "represent the design // intentions of the font's creator rather than any computed value" // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6hhea.html result.ascent := fTbl_hhea.ascent; result.descent := abs(fTbl_hhea.descent); result.lineGap := fTbl_hhea.lineGap; result.advWidthMax := fTbl_hhea.advWidthMax; result.minLSB := fTbl_hhea.minLSB; result.minRSB := fTbl_hhea.minRSB; result.xMaxExtent := fTbl_hhea.xMaxExtent; end; //------------------------------------------------------------------------------ function TFontReader.GetGlyphInfoInternal(glyphIdx: WORD): TGlyphInfo; var pathsEx: TPathsEx; begin FillChar(result, sizeOf(Result), 0); if not IsValidFontFormat then Exit; result.glyphIdx := glyphIdx; result.unitsPerEm := fTbl_head.unitsPerEm; // get raw splines pathsEx := GetGlyphPaths(glyphIdx, result.hmtx, result.glyf); if Assigned(pathsEx) then begin pathsEx := ConvertSplinesToBeziers(pathsEx); result.paths := FlattenPathExBeziers(PathsEx); end; Result.kernList := GetGlyphKernList(glyphIdx); end; //------------------------------------------------------------------------------ function TFontReader.GetWeight: integer; var i, dummy: integer; accum: Cardinal; gm: TGlyphInfo; rec: TRectD; img: TImage32; p: PARGB; const imgSize = 16; k = 5; // an empirical constant begin // get an empirical weight based on the character 'G' result := 0; if not IsValidFontFormat then Exit; if fFontWeight > 0 then begin Result := fFontWeight; Exit; end; GetGlyphInfo(Ord('G'),dummy, gm); rec := GetBoundsD(gm.paths); gm.paths := Img32.Vector.TranslatePath(gm.paths, -rec.Left, -rec.Top); gm.paths := Img32.Vector.ScalePath(gm.paths, imgSize/rec.Width, imgSize/rec.Height); img := TImage32.Create(imgSize,imgSize); try DrawPolygon(img, gm.paths, frEvenOdd, clBlack32); accum := 0; p := PARGB(img.PixelBase); for i := 0 to imgSize * imgSize do begin inc(accum, p.A); inc(p); end; finally img.Free; end; fFontWeight := Max(100, Min(900, Round(k * accum / (imgSize * imgSize * 100)) * 100)); Result := fFontWeight; end; //------------------------------------------------------------------------------ procedure TFontReader.GetFontFamily; var giT, giI, giM: integer; gmT: TGlyphInfo; hmtxI, hmtxM: TFontTable_Hmtx; begin fFontInfo.family := tfUnknown; if (fTbl_post.majorVersion > 0) and (fTbl_post.isFixedPitch <> 0) then begin fFontInfo.family := tfMonospace; Exit; end; // use glyph metrics for 'T', 'i' & 'm' to determine the font family // if the widths of 'i' & 'm' are equal, then assume a monospace font // else if the number of vertices used to draw 'T' is greater than 10 // then assume a serif font otherwise assume a sans serif font. giT := GetGlyphIdxUsingCmap(Ord('T')); giI := GetGlyphIdxUsingCmap(Ord('i')); giM := GetGlyphIdxUsingCmap(Ord('m')); if (giT = 0) or (giI = 0) or (giM = 0) then Exit; hmtxI := GetGlyphHorzMetrics(giI); hmtxM := GetGlyphHorzMetrics(giM); if hmtxI.advanceWidth = hmtxM.advanceWidth then begin fFontInfo.family := tfMonospace; Exit; end; gmT := GetGlyphInfoInternal(giT); if Assigned(gmT.paths) and (Length(gmT.paths[0]) > 10) then fFontInfo.family := tfSerif else fFontInfo.family := tfSansSerif; end; //------------------------------------------------------------------------------ // TFontCache //------------------------------------------------------------------------------ constructor TFontCache.Create(fontReader: TFontReader; fontHeight: double); begin {$IFDEF XPLAT_GENERICS} fGlyphInfoList := TList.Create; {$ELSE} fGlyphInfoList := TList.Create; {$ENDIF} fSorted := false; fUseKerning := true; fFlipVert := true; fFontHeight := fontHeight; SetFontReader(fontReader); end; //------------------------------------------------------------------------------ destructor TFontCache.Destroy; begin SetFontReader(nil); Clear; NotifyRecipients(inDestroy); fGlyphInfoList.Free; inherited; end; //------------------------------------------------------------------------------ procedure TFontCache.ReceiveNotification(Sender: TObject; notify: TImg32Notification); begin if Sender <> fFontReader then raise Exception.Create(rsFontCacheError); if notify = inStateChange then begin Clear; UpdateScale; end else SetFontReader(nil); end; //------------------------------------------------------------------------------ procedure TFontCache.NotifyRecipients(notifyFlag: TImg32Notification); var i: integer; begin for i := High(fRecipientList) downto 0 do try // try .. except block because when TFontCache is destroyed in a // finalization section, it's possible for recipients to have been // destroyed without calling their destructors. fRecipientList[i].ReceiveNotification(self, notifyFlag); except end; end; //------------------------------------------------------------------------------ procedure TFontCache.AddRecipient(recipient: INotifyRecipient); var len: integer; begin len := Length(fRecipientList); SetLength(fRecipientList, len+1); fRecipientList[len] := Recipient; end; //------------------------------------------------------------------------------ procedure TFontCache.DeleteRecipient(recipient: INotifyRecipient); var i, highI: integer; begin highI := High(fRecipientList); i := highI; while (i >= 0) and (fRecipientList[i] <> Recipient) do dec(i); if i < 0 then Exit; if i < highI then Move(fRecipientList[i+i], fRecipientList[i], (highI - i) * SizeOf(INotifyRecipient)); SetLength(fRecipientList, highI); end; //------------------------------------------------------------------------------ procedure TFontCache.Clear; var i: integer; begin for i := 0 to fGlyphInfoList.Count -1 do Dispose(PGlyphInfo(fGlyphInfoList[i])); fGlyphInfoList.Clear; fSorted := false; end; //------------------------------------------------------------------------------ {$IFDEF XPLAT_GENERICS} function FindInSortedList(charOrdinal: Cardinal; glyphList: TList): integer; {$ELSE} function FindInSortedList(charOrdinal: Cardinal; glyphList: TList): integer; {$ENDIF} var i,l,r: integer; begin // binary search the sorted list ... l := 0; r := glyphList.Count -1; while l <= r do begin Result := (l + r) shr 1; i := integer(PGlyphInfo(glyphList[Result]).codepoint) - integer(charOrdinal); if i < 0 then begin l := Result +1 end else begin if i = 0 then Exit; r := Result -1; end; end; Result := -1; end; //------------------------------------------------------------------------------ function TFontCache.FoundInList(charOrdinal: Cardinal): Boolean; begin if not fSorted then Sort; result := FindInSortedList(charOrdinal, fGlyphInfoList) >= 0; end; //------------------------------------------------------------------------------ procedure TFontCache.GetMissingGlyphs(const ordinals: TArrayOfCardinal); var i, len: integer; begin if not IsValidFont then Exit; len := Length(ordinals); for i := 0 to len -1 do begin if ordinals[i] < 32 then continue else if not FoundInList(ordinals[i]) then AddGlyph(ordinals[i]); end; end; //------------------------------------------------------------------------------ function TFontCache.IsValidFont: Boolean; begin Result := assigned(fFontReader) and fFontReader.IsValidFontFormat; end; //------------------------------------------------------------------------------ function TFontCache.GetAscent: double; begin if not IsValidFont then Result := 0 else with fFontReader.FontInfo do Result := Max(ascent, yMax) * fScale; end; //------------------------------------------------------------------------------ function TFontCache.GetDescent: double; begin if not IsValidFont then Result := 0 else with fFontReader.FontInfo do Result := Max(descent, -yMin) * fScale; end; //------------------------------------------------------------------------------ function TFontCache.GetGap: double; begin if not IsValidFont then Result := 0 else Result := fFontReader.FontInfo.lineGap * fScale; end; //------------------------------------------------------------------------------ function TFontCache.GetLineHeight: double; begin if not IsValidFont then Result := 0 else Result := Ascent + Descent + LineGap; end; //------------------------------------------------------------------------------ function TFontCache.GetYyHeight: double; var minY, maxY: double; begin // nb: non-inverted Y coordinates. maxY := GetGlyphInfo(ord('Y')).glyf.yMax; minY := GetGlyphInfo(ord('y')).glyf.yMin; Result := (maxY - minY) * fScale; end; //------------------------------------------------------------------------------ procedure TFontCache.VerticalFlip(var paths: TPathsD); var i,j: integer; begin for i := 0 to High(paths) do for j := 0 to High(paths[i]) do with paths[i][j] do Y := -Y; end; //------------------------------------------------------------------------------ function FindInKernList(glyphIdx: WORD; const kernList: TArrayOfTKern): integer; var i,l,r: integer; begin l := 0; r := High(kernList); while l <= r do begin Result := (l + r) shr 1; i := kernList[Result].rightGlyphIdx - glyphIdx; if i < 0 then begin l := Result +1 end else begin if i = 0 then Exit; // found! r := Result -1; end; end; Result := -1; end; //------------------------------------------------------------------------------ function TFontCache.GetGlyphInfo(codepoint: Cardinal): PGlyphInfo; var listIdx: integer; begin Result := nil; if not IsValidFont then Exit; if not fSorted then Sort; listIdx := FindInSortedList(codepoint, fGlyphInfoList); if listIdx < 0 then Result := AddGlyph(codepoint) else Result := PGlyphInfo(fGlyphInfoList[listIdx]); end; //------------------------------------------------------------------------------ function IsSurrogate(c: WideChar): Boolean; {$IFDEF INLINE} inline; {$ENDIF} begin Result := (c >= #$D800) and (c <= #$DFFF); end; //------------------------------------------------------------------------------ function ConvertSurrogatePair(hiSurrogate, loSurrogate: Cardinal): Cardinal; {$IFDEF INLINE} inline; {$ENDIF} begin Result := ((hiSurrogate - $D800) shl 10) + (loSurrogate - $DC00) + $10000; end; //------------------------------------------------------------------------------ function TFontCache.GetTextCodePoints(const text: UnicodeString): TArrayOfCardinal; var i,j, len: integer; inSurrogate: Boolean; begin len := Length(text); setLength(Result, len); inSurrogate := false; j := 0; for i := 1 to len do begin if inSurrogate then begin Result[j] := ConvertSurrogatePair(Ord(text[i -1]), Ord(text[i])); inSurrogate := false; end else if IsSurrogate(text[i]) then begin inSurrogate := true; Continue; end else Result[j] := Ord(WideChar(text[i])); inc(j); end; setLength(Result, j); end; //------------------------------------------------------------------------------ function TFontCache.GetGlyphOffsets(const text: UnicodeString; interCharSpace: double): TArrayOfDouble; var i,j, len: integer; codePoints: TArrayOfCardinal; glyphInfo: PGlyphInfo; thisX: double; prevGlyphKernList: TArrayOfTKern; begin codePoints := GetTextCodePoints(text); len := Length(codePoints); SetLength(Result, len +1); Result[0] := 0; if len = 0 then Exit; GetMissingGlyphs(codePoints); thisX := 0; prevGlyphKernList := nil; for i := 0 to High(codePoints) do begin glyphInfo := GetGlyphInfo(codePoints[i]); if not assigned(glyphInfo) then Break; if fUseKerning and assigned(prevGlyphKernList) then begin j := FindInKernList(glyphInfo.glyphIdx, prevGlyphKernList); if (j >= 0) then thisX := thisX + prevGlyphKernList[j].kernValue*fScale; end; Result[i] := thisX; thisX := thisX + glyphInfo.hmtx.advanceWidth*fScale +interCharSpace; prevGlyphKernList := glyphInfo.kernList; end; Result[len] := thisX - interCharSpace; end; //------------------------------------------------------------------------------ function TFontCache.GetTextWidth(const text: UnicodeString): double; var offsets: TArrayOfDouble; begin Result := 0; if not IsValidFont then Exit; offsets := GetGlyphOffsets(text); Result := offsets[high(offsets)]; end; //------------------------------------------------------------------------------ function TFontCache.CountCharsThatFit(const text: UnicodeString; maxWidth: double): integer; var offsets: TArrayOfDouble; begin Result := 0; if not IsValidFont then Exit; offsets := GetGlyphOffsets(text); Result := Length(offsets); while offsets[Result -1] > maxWidth do Dec(Result); end; //------------------------------------------------------------------------------ function TFontCache.GetSpaceWidth: double; begin Result := GetGlyphInfo(32).hmtx.advanceWidth * fScale; end; //------------------------------------------------------------------------------ function TFontCache.GetTextOutline(x, y: double; const text: UnicodeString): TPathsD; var dummy: double; begin Result := GetTextOutline(x, y, text, dummy); end; //------------------------------------------------------------------------------ function TFontCache.GetTextOutline(x, y: double; const text: UnicodeString; out nextX: double; underlineIdx: integer): TPathsD; var arrayOfGlyphs: TArrayOfPathsD; dummy: TArrayOfDouble; begin Result := nil; if not GetTextOutlineInternal(x, y, text, underlineIdx, arrayOfGlyphs, dummy, nextX) then Exit; Result := MergeArrayOfPaths(arrayOfGlyphs); end; //------------------------------------------------------------------------------ function TFontCache.GetTextOutline(const rec: TRectD; const text: UnicodeString; ta: TTextAlign; tav: TTextVAlign; underlineIdx: integer): TPathsD; var dummy2, dx, dy: double; arrayOfGlyphs: TArrayOfPathsD; dummy1: TArrayOfDouble; rec2: TRectD; begin Result := nil; if not GetTextOutlineInternal(0, 0, text, underlineIdx, arrayOfGlyphs, dummy1, dummy2) or (arrayOfGlyphs = nil) then Exit; rec2 := GetBoundsD(arrayOfGlyphs); case ta of taRight: dx := rec.Right - rec2.Width; taCenter: dx := rec.Left + (rec.Width - rec2.Width)/ 2; else dx := rec.Left; end; case tav of tvaMiddle: dy := rec.Top - rec2.Top + (rec.Height - rec2.Height)/ 2; tvaBottom: dy := rec.Bottom - Descent; else dy := rec.Top + Ascent; end; Result := MergeArrayOfPathsEx(arrayOfGlyphs, dx, dy); end; //------------------------------------------------------------------------------ function TFontCache.GetUnderlineOutline(leftX, rightX, y: double; dy: double; wavy: Boolean; strokeWidth: double): TPathD; var i, cnt: integer; dx: double; wavyPath: TPathD; begin if strokeWidth <= 0 then strokeWidth := LineHeight * lineFrac; if dy = InvalidD then y := y + 1.5 * (1 + strokeWidth) else y := y + dy; if wavy then begin Result := nil; cnt := Ceil((rightX - leftX) / (strokeWidth *4)); if cnt < 2 then Exit; dx := (rightX - leftX)/ cnt; SetLength(wavyPath, cnt +2); wavyPath[0] := PointD(leftX, y + strokeWidth/2); wavyPath[1] := PointD(leftX + dx/2, y-(strokeWidth *2)); for i := 1 to cnt do wavyPath[i+1] := PointD(leftX + dx * i, y + strokeWidth/2); Result := FlattenQSpline(wavyPath); wavyPath := ReversePath(Result); wavyPath := TranslatePath(wavyPath, 0, strokeWidth *1.5); ConcatPaths(Result, wavyPath); end else Result := Rectangle(leftX, y, rightX, y + strokeWidth); end; //------------------------------------------------------------------------------ function TFontCache.GetVerticalTextOutline(x, y: double; const text: UnicodeString; lineHeight: double): TPathsD; var i, cnt, xxMax: integer; glyphInfo: PGlyphInfo; dx: double; codePoints: TArrayOfCardinal; glyphInfos: array of PGlyphInfo; begin Result := nil; if not IsValidFont then Exit; codePoints := GetTextCodePoints(text); xxMax := 0; cnt := Length(codePoints); SetLength(glyphInfos, cnt); for i := 0 to cnt -1 do begin glyphInfos[i] := GetGlyphInfo(codePoints[i]); if not assigned(glyphInfos[i]) then Exit; with glyphInfos[i].glyf do if xMax > xxMax then xxMax := xMax; end; if lineHeight = 0.0 then lineHeight := self.LineHeight; for i := 0 to cnt -1 do begin glyphInfo := glyphInfos[i]; with glyphInfo.glyf do dx := (xxMax - xMax) * 0.5 * scale; AppendPath(Result, TranslatePath(glyphInfo.paths, x + dx, y)); y := y + lineHeight; end; UpdateFontReaderLastUsedTime; end; //------------------------------------------------------------------------------ function TFontCache.GetTextOutlineInternal(x, y: double; const text: UnicodeString; underlineIdx: integer; out glyphs: TArrayOfPathsD; out offsets: TArrayOfDouble; out nextX: double): Boolean; var i,j, len : integer; dx,y2,w : double; codepoints : TArrayOfCardinal; glyphInfo : PGlyphInfo; currGlyph : TPathsD; prevGlyphKernList: TArrayOfTKern; begin Result := true; codePoints := GetTextCodePoints(text); len := Length(codepoints); GetMissingGlyphs(codepoints); SetLength(offsets, len); nextX := x; prevGlyphKernList := nil; for i := 0 to len -1 do begin offsets[i] := nextX; glyphInfo := GetGlyphInfo(codepoints[i]); if not assigned(glyphInfo) then Break; if fUseKerning and assigned(prevGlyphKernList) then begin j := FindInKernList(glyphInfo.glyphIdx, prevGlyphKernList); if (j >= 0) then nextX := nextX + prevGlyphKernList[j].kernValue * fScale; end; currGlyph := TranslatePath(glyphInfo.paths, nextX, y); dx := glyphInfo.hmtx.advanceWidth * fScale; AppendPath(glyphs, currGlyph); if not fUnderlined and (underlineIdx -1 = i) then begin w := LineHeight * lineFrac; y2 := y + 1.5 * (1 + w); SetLength(currGlyph, 1); currGlyph[0] := Rectangle(nextX, y2, nextX +dx, y2 + w); AppendPath(glyphs, currGlyph); end; nextX := nextX + dx; prevGlyphKernList := glyphInfo.kernList; end; if fUnderlined then begin w := LineHeight * lineFrac; y2 := y + 1.5 * (1 + w); SetLength(currGlyph, 1); currGlyph[0] := Rectangle(x, y2, nextX, y2 + w); AppendPath(glyphs, currGlyph); end; if fStrikeOut then begin w := LineHeight * lineFrac; y2 := y - LineHeight * 0.22; SetLength(currGlyph, 1); currGlyph[0] := Rectangle(x, y2, nextX, y2 + w); AppendPath(glyphs, currGlyph); end; UpdateFontReaderLastUsedTime; end; //------------------------------------------------------------------------------ function TFontCache.GetAngledTextGlyphs(x, y: double; const text: UnicodeString; angleRadians: double; const rotatePt: TPointD; out nextPt: TPointD): TPathsD; begin nextPt.Y := y; Result := GetTextOutline(x,y, text, nextPt.X); if not Assigned(Result) then Exit; Result := RotatePath(Result, rotatePt, angleRadians); RotatePoint(nextPt, PointD(x,y), angleRadians); UpdateFontReaderLastUsedTime; end; //------------------------------------------------------------------------------ procedure TFontCache.UpdateFontReaderLastUsedTime; begin if Assigned(fFontReader) then fFontReader.LastUsedTime := now; end; //------------------------------------------------------------------------------ procedure TFontCache.SetFontReader(newFontReader: TFontReader); begin if newFontReader = fFontReader then Exit; if Assigned(fFontReader) then begin fFontReader.DeleteRecipient(self as INotifyRecipient); Clear; end; fFontReader := newFontReader; if Assigned(fFontReader) then fFontReader.AddRecipient(self as INotifyRecipient); UpdateScale; end; //------------------------------------------------------------------------------ procedure TFontCache.UpdateScale; begin if IsValidFont and (fFontHeight > 0) then fScale := fFontHeight / fFontReader.FontInfo.unitsPerEm else fScale := 1; NotifyRecipients(inStateChange); end; //------------------------------------------------------------------------------ procedure TFontCache.SetFontHeight(newHeight: double); begin newHeight := abs(newHeight); // manage point - pixel conversions externally if fFontHeight = newHeight then Exit; fFontHeight := newHeight; Clear; UpdateScale; end; //------------------------------------------------------------------------------ procedure FlipVert(var paths: TPathsD); var i,j: integer; begin for i := 0 to High(paths) do for j := 0 to High(paths[i]) do paths[i][j].Y := -paths[i][j].Y; end; //------------------------------------------------------------------------------ procedure TFontCache.SetFlipVert(value: Boolean); var i: integer; glyphInfo: PGlyphInfo; begin if fFlipVert = value then Exit; for i := 0 to fGlyphInfoList.Count -1 do begin glyphInfo := PGlyphInfo(fGlyphInfoList[i]); FlipVert(glyphInfo.paths); end; fFlipVert := value; end; //------------------------------------------------------------------------------ function GlyphSorter(glyph1, glyph2: pointer): integer; begin Result := PGlyphInfo(glyph1).codepoint - PGlyphInfo(glyph2).codepoint; end; //------------------------------------------------------------------------------ procedure TFontCache.Sort; begin {$IFDEF XPLAT_GENERICS} fGlyphInfoList.Sort(TComparer.Construct( function (const glyph1, glyph2: PGlyphInfo): integer begin Result := glyph1.codepoint - glyph2.codepoint; end)); {$ELSE} fGlyphInfoList.Sort(GlyphSorter); {$ENDIF} fSorted := true; end; //------------------------------------------------------------------------------ function TFontCache.AddGlyph(codepoint: Cardinal): PGlyphInfo; var dummy: integer; altFontReader: TFontReader; glyphIdx: WORD; scale: double; const minLength = 0.1; begin New(Result); Result.codepoint := codepoint; if not fFontReader.GetGlyphInfo(codepoint, dummy, Result^) or (Result.glyphIdx = 0) then begin // to get here the unicode char is not supported by fFontReader altFontReader := aFontManager.FindReaderContainingGlyph(codepoint, tfUnknown, glyphIdx); if Assigned(altFontReader) then begin altFontReader.GetGlyphInfo(codepoint, dummy, Result^); altFontReader.LastUsedTime := now; scale := fFontReader.FontInfo.unitsPerEm / altFontReader.FontInfo.unitsPerEm; if scale <> 1.0 then Result.paths := ScalePath(Result.paths, scale); end; end; fGlyphInfoList.Add(Result); if fFontHeight > 0 then begin Result.paths := ScalePath(Result.paths, fScale); // text rendering is about twice as fast when excess detail is removed Result.paths := StripNearDuplicates(Result.paths, minLength, true); end; if fFlipVert then VerticalFlip(Result.paths); fSorted := false; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ function AppendSlash(const foldername: string): string; begin Result := foldername; if (Result = '') or (Result[Length(Result)] = '\') then Exit; Result := Result + '\'; end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} procedure FontHeightToFontSize(var logFontHeight: integer); const _72Div96 = 72/96; begin if logFontHeight < 0 then logFontHeight := -Round(logFontHeight * _72Div96 / dpiAware1); end; //------------------------------------------------------------------------------ procedure FontSizeToFontHeight(var logFontHeight: integer); const _96Div72 = 96/72; begin if logFontHeight > 0 then logFontHeight := -Round(DpiAware(logFontHeight * _96Div72)); end; //------------------------------------------------------------------------------ function GetFontPixelHeight(logFontHeight: integer): double; const _96Div72 = 96/72; begin if logFontHeight > 0 then Result := DPIAware(logFontHeight * _96Div72) else Result := DPIAware(-logFontHeight); end; //------------------------------------------------------------------------------ function GetFontFolder: string; var pidl: PItemIDList; path: array[0..MAX_PATH] of char; begin SHGetSpecialFolderLocation(0, CSIDL_FONTS, pidl); SHGetPathFromIDList(pidl, path); CoTaskMemFree(pidl); result := path; end; //------------------------------------------------------------------------------ function GetInstalledTtfFilenames: TArrayOfString; var cnt, buffLen: integer; fontFolder: string; sr: TSearchRec; res: integer; begin cnt := 0; buffLen := 1024; SetLength(Result, buffLen); fontFolder := AppendSlash(GetFontFolder); res := FindFirst(fontFolder + '*.ttf', faAnyFile, sr); while res = 0 do begin if cnt = buffLen then begin inc(buffLen, 128); SetLength(Result, buffLen); end; Result[cnt] := fontFolder + sr.Name; inc(cnt); res := FindNext(sr); end; FindClose(sr); SetLength(Result, cnt); end; //------------------------------------------------------------------------------ function EnumFontProc(LogFont: PEnumLogFontEx; TextMetric: PNewTextMetric; FontType: DWORD; userDefined: LPARAM): Integer; stdcall; var len: integer; alf: PArrayOfEnumLogFontEx absolute userDefined; begin if (FontType = TRUETYPE_FONTTYPE) then begin len := Length(alf^); SetLength(alf^, len +1); Move(LogFont^, alf^[len], SizeOf(TEnumLogFontEx)); end; Result := 1; end; //------------------------------------------------------------------------------ function GetLogFonts(const faceName: string; charSet: byte): TArrayOfEnumLogFontEx; var lf: TLogFont; dc: HDC; begin Result := nil; if faceName = '' then Exit; FillChar(lf, sizeof(lf), 0); lf.lfCharSet := charSet; Move(faceName[1], lf.lfFaceName[0], Length(faceName) * SizeOf(Char)); dc := CreateCompatibleDC(0); try EnumFontFamiliesEx(dc, lf, @EnumFontProc, LParam(@Result), 0); finally DeleteDC(dc); end; end; //------------------------------------------------------------------------------ function GetLogFontFromEnumThatMatchesStyles(LogFonts: TArrayOfEnumLogFontEx; styles: TMacStyles; out logFont: TLogFont): Boolean; var i: integer; styles2: TMacStyles; begin Result := False; if not Assigned(LogFonts) then Exit; for i := 0 to High(LogFonts) do begin styles2 := []; if LogFonts[i].elfLogFont.lfWeight > 500 then Include(styles2, msBold); if LogFonts[i].elfLogFont.lfItalic <> 0 then Include(styles2, msItalic); if styles <> styles2 then Continue; logFont := LogFonts[i].elfLogFont; Result := true; Exit; end; end; //------------------------------------------------------------------------------ {$ENDIF} //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ function DrawText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32): double; var glyphs: TPathsD; begin Result := 0; if (text = '') or not assigned(font) or not font.IsValidFont then Exit; glyphs := font.GetTextOutline(x,y, text, Result); DrawPolygon(image, glyphs, frNonZero, textColor); end; //------------------------------------------------------------------------------ function DrawText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; renderer: TCustomRenderer): double; var glyphs: TPathsD; begin Result := 0; if (text = '') or not assigned(font) or not font.IsValidFont then Exit; glyphs := font.GetTextOutline(x,y, text, Result); DrawPolygon(image, glyphs, frNonZero, renderer); end; //------------------------------------------------------------------------------ procedure DrawText(image: TImage32; const rec: TRectD; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32; align: TTextAlign = taCenter; valign: TTextVAlign = tvaMiddle); var glyphs: TPathsD; dx,dy: double; rec2: TRectD; chunkedText: TChunkedText; begin if (text = '') or not assigned(font) or not font.IsValidFont then Exit; if align = taJustify then begin chunkedText := TChunkedText.Create(text, font, textColor); try chunkedText.DrawText( image, Rect(rec), taJustify, valign, 0); finally chunkedText.Free; end; Exit; end; glyphs := font.GetTextOutline(0,0, text); rec2 := GetBoundsD(glyphs); case align of taRight: dx := rec.Right - rec2.Right; taCenter: dx := (rec.Left + rec.Right - rec2.Right) * 0.5; else dx := rec.Left; end; case valign of tvaMiddle: dy := (rec.Top + rec.Bottom - rec2.Top) * 0.5; tvaBottom: dy := rec.Bottom - rec2.Bottom; else dy := rec.Top + font.Ascent; end; glyphs := TranslatePath(glyphs, dx, dy); DrawPolygon(image, glyphs, frNonZero, textColor); end; //------------------------------------------------------------------------------ function DrawAngledText(image: TImage32; x, y: double; angleRadians: double; const text: UnicodeString; font: TFontCache; textColor: TColor32 = clBlack32): TPointD; var glyphs: TPathsD; rotatePt: TPointD; begin rotatePt := PointD(x,y); if not assigned(font) or not font.IsValidFont then begin Result := NullPointD; Exit; end; glyphs := font.GetAngledTextGlyphs(x, y, text, angleRadians, rotatePt, Result); DrawPolygon(image, glyphs, frNonZero, textColor); end; //------------------------------------------------------------------------------ procedure DrawVerticalText(image: TImage32; x, y: double; const text: UnicodeString; font: TFontCache; lineHeight: double; textColor: TColor32); var glyphs: TPathsD; cr: TCustomRenderer; begin if not assigned(font) or not font.IsValidFont or (text = '') then Exit; glyphs := font.GetVerticalTextOutline(x,y, text, lineHeight); if image.AntiAliased then cr := TColorRenderer.Create(textColor) else cr := TAliasedColorRenderer.Create(textColor); try DrawPolygon(image, glyphs, frNonZero, cr); finally cr.Free; end; end; //------------------------------------------------------------------------------ function FindLastSpace(const text: string; StartAt: integer): integer; begin Result := StartAt; while (Result > 0) and (text[Result] <> SPACE) do Dec(Result); end; //------------------------------------------------------------------------------ function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; x, y: double; charSpacing: double; out charsThatFit: integer; out outX: double): TPathsD; var pathLen, pathLenMin1: integer; cummDists: TArrayOfDouble; // cummulative distances i, currentPathIdx: integer; textWidth, glyphCenterX, glyphCenterOnPath, dist, dx: double; glyph: PGlyphInfo; CharOffsets: TArrayOfDouble; unitVector: TPointD; tmpPaths: TPathsD; begin Result := nil; pathLen := Length(path); pathLenMin1 := pathLen -1; charsThatFit := Length(text); if (pathLen < 2) or (charsThatFit = 0) then Exit; CharOffsets := font.GetGlyphOffsets(text, charSpacing); textWidth := CharOffsets[charsThatFit]; setLength(cummDists, pathLen +1); cummDists[0] := 0; dist := 0; for i:= 1 to pathLen -1 do begin dist := dist + Distance(path[i-1], path[i]); cummDists[i] := dist; end; // truncate text that doesn't fit ... if textWidth > dist then begin Dec(charsThatFit); while CharOffsets[charsThatFit] > dist do Dec(charsThatFit); // if possible, break text at a SPACE char i := FindLastSpace(text, charsThatFit); if i > 0 then charsThatFit := i; end; case textAlign of taCenter: x := (dist - textWidth) * 0.5; taRight : x := dist - textWidth; // else use user defined starting x end; Result := nil; currentPathIdx := 0; for i := 1 to charsThatFit do begin glyph := font.GetGlyphInfo(Ord(text[i])); with glyph^ do glyphCenterX := (glyf.xMax - glyf.xMin) * font.Scale * 0.5; glyphCenterOnPath := x + glyphCenterX; while (currentPathIdx < pathLenMin1) and (cummDists[currentPathIdx +1] < glyphCenterOnPath) do inc(currentPathIdx); if currentPathIdx = pathLenMin1 then begin charsThatFit := i; // nb 1 base vs 0 base :) Break; end; x := x + glyph.hmtx.advanceWidth * font.Scale + charSpacing; unitVector := GetUnitVector(path[currentPathIdx], path[currentPathIdx +1]); tmpPaths := RotatePath(glyph.paths, PointD(glyphCenterX, -y), GetAngle(NullPointD, unitVector)); dx := glyphCenterOnPath - cummDists[currentPathIdx]; tmpPaths := TranslatePath(tmpPaths, path[currentPathIdx].X + unitVector.X * dx - glyphCenterX, path[currentPathIdx].Y + unitVector.Y * dx + y); AppendPath(Result, tmpPaths); end; outX := x; end; //------------------------------------------------------------------------------ function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; perpendicOffset: integer; charSpacing: double; out charsThatFit: integer): TPathsD; var dummy: double; begin Result := GetTextOutlineOnPath(text, path, font, textAlign, 0, perpendicOffset, charSpacing, charsThatFit, dummy); end; //------------------------------------------------------------------------------ function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; textAlign: TTextAlign; perpendicOffset: integer = 0; charSpacing: double = 0): TPathsD; var dummy: integer; begin Result := GetTextOutlineOnPath(text, path, font, textAlign, perpendicOffset, charSpacing, dummy); end; //------------------------------------------------------------------------------ function GetTextOutlineOnPath(const text: UnicodeString; const path: TPathD; font: TFontCache; x, y: integer; charSpacing: double; out outX: double): TPathsD; var dummy: integer; begin Result := GetTextOutlineOnPath(text, path, font, taLeft, x, y, charSpacing, dummy, outX); end; //------------------------------------------------------------------------------ // TTextChunk class //------------------------------------------------------------------------------ constructor TTextChunk.Create(owner: TChunkedText; const chunk: UnicodeString; index: integer; fontCache: TFontCache; fontColor, backColor: TColor32); var i, listCnt: integer; begin Self.owner := owner; listCnt := owner.fList.Count; if index < 0 then index := 0 else if index > listCnt then index := listCnt; self.index := index; self.text := chunk; self.fontColor := fontColor; self.backColor := backColor; if Assigned(fontCache) then begin fontCache.GetTextOutlineInternal(0,0, chunk, 0, self.arrayOfPaths, self.glyphOffsets, self.width); self.height := fontCache.LineHeight; self.ascent := fontCache.Ascent; end else begin self.arrayOfPaths := nil; SetLength(self.glyphOffsets, 1); self.glyphOffsets[0] := 0; self.width := 0; self.height := 0; self.ascent := 0; end; owner.fList.Insert(index, self); // reindex any trailing chunks if index < listCnt then for i := index +1 to listCnt do TTextChunk(owner.fList[i]).index := i; end; //------------------------------------------------------------------------------ // TChunkedText //------------------------------------------------------------------------------ constructor TChunkedText.Create; begin inherited; {$IFDEF XPLAT_GENERICS} fList := TList.Create; {$ELSE} fList := TList.Create; {$ENDIF} end; //------------------------------------------------------------------------------ constructor TChunkedText.Create(const text: string; font: TFontCache; fontColor: TColor32; backColor: TColor32); begin Create; SetText(text, font, fontColor, backColor); end; //------------------------------------------------------------------------------ destructor TChunkedText.Destroy; begin Clear; fList.Free; inherited; end; //------------------------------------------------------------------------------ function TChunkedText.GetChunk(index: integer): TTextChunk; begin if (index < 0) or (index >= fList.Count) then raise Exception.Create(rsChunkedTextRangeError); Result := TTextChunk(fList.Items[index]); end; //------------------------------------------------------------------------------ function TChunkedText.GetText: UnicodeString; var i: integer; begin Result := ''; for i := 0 to Count -1 do Result := Result + TTextChunk(fList.Items[i]).text; end; //------------------------------------------------------------------------------ procedure TChunkedText.AddNewline(font: TFontCache); var nlChunk: TTextChunk; begin if not Assigned(font) or not font.IsValidFont then raise Exception.Create(rsChunkedTextFontError); if (fLastFont = font) then begin // this is much faster as it bypasses font.GetTextOutlineInternal nlChunk := InsertTextChunk(nil, MaxInt, #10, clNone32); nlChunk.height := fLastFont.LineHeight; nlChunk.ascent := fLastFont.Ascent; end else begin nlChunk := InsertTextChunk(font, MaxInt, SPACE, clNone32); nlChunk.text := #10; fSpaceWidth := nlChunk.width; fLastFont := font; end; end; //------------------------------------------------------------------------------ procedure TChunkedText.AddSpace(font: TFontCache); var spaceChunk: TTextChunk; begin if not Assigned(font) or not font.IsValidFont then raise Exception.Create(rsChunkedTextFontError); if (fLastFont = font) then begin // this is much faster as it bypasses font.GetTextOutlineInternal spaceChunk := InsertTextChunk(nil, MaxInt, SPACE, clNone32); spaceChunk.width := fSpaceWidth; spaceChunk.height := fLastFont.LineHeight; spaceChunk.ascent := fLastFont.Ascent; end else begin spaceChunk := InsertTextChunk(font, MaxInt, SPACE, clNone32); fLastFont := font; fSpaceWidth := spaceChunk.width; end; end; //------------------------------------------------------------------------------ function TChunkedText.AddTextChunk(font: TFontCache; const chunk: UnicodeString; fontColor: TColor32; backColor: TColor32): TTextChunk; begin Result := InsertTextChunk(font, MaxInt, chunk, fontColor, backColor); end; //------------------------------------------------------------------------------ function TChunkedText.InsertTextChunk(font: TFontCache; index: integer; const chunk: UnicodeString; fontColor: TColor32; backColor: TColor32): TTextChunk; begin Result := TTextChunk.Create(self, chunk, index, font, fontColor, backColor); end; //------------------------------------------------------------------------------ function TChunkedText.GetCount: integer; begin Result := fList.Count; end; //------------------------------------------------------------------------------ procedure TChunkedText.Clear; var i: integer; begin for i := 0 to fList.Count -1 do TTextChunk(fList.Items[i]).Free; fList.Clear; end; //------------------------------------------------------------------------------ procedure TChunkedText.DeleteChunk(Index: Integer); var i: integer; begin if (index < 0) or (index >= fList.Count) then raise Exception.Create(rsChunkedTextRangeError); TTextChunk(fList.Items[index]).Free; fList.Delete(index); // reindex for i := Index to fList.Count -1 do dec(TTextChunk(fList.Items[i]).index); end; //------------------------------------------------------------------------------ procedure TChunkedText.DeleteChunkRange(startIdx, endIdx: Integer); var i, cnt: Integer; begin cnt := endIdx - startIdx +1; if (startIdx < 0) or (endIdx >= fList.Count) or (cnt <= 0) then raise Exception.Create(rsChunkedTextRangeError); for i := startIdx to endIdx do TTextChunk(fList.Items[i]).Free; // reindex for i := startIdx to fList.Count -1 do dec(TTextChunk(fList.Items[i]).index, cnt); end; //------------------------------------------------------------------------------ procedure TChunkedText.SetText(const text: UnicodeString; font: TFontCache; fontColor: TColor32; backColor: TColor32); var len: integer; p, p2, pEnd: PWideChar; s: UnicodeString; begin if not Assigned(font) then Exit; Clear; p := PWideChar(text); pEnd := p; Inc(pEnd, Length(text)); while p < pEnd do begin if (p^ <= SPACE) then begin if (p^ = SPACE) then AddSpace(font) else if (p^ = #10) then AddNewline(font); inc(p); end else begin p2 := p; inc(p); while (p < pEnd) and (p^ > SPACE) do inc(p); len := p - p2; SetLength(s, len); Move(p2^, s[1], len * SizeOf(Char)); AddTextChunk(font, s, fontColor, backColor); end; end; end; //------------------------------------------------------------------------------ function TChunkedText.GetPageMetrics(const rec: TRect; lineHeight: double; startingChunkIdx: integer): TPageTextMetrics; var pageWidth, pageHeight : integer; lh, priorSplitWidth : double; currentX : double; arrayCnt, arrayCap : integer; chunkIdxAtStartOfLine : integer; currentChunkIdx : integer; linesFinished : Boolean; procedure SetResultLength(len: integer); begin SetLength(Result.startOfLineIdx, len); SetLength(Result.justifyDeltas, len); SetLength(Result.lineWidths, len); end; procedure CheckArrayCap; begin if arrayCnt < arrayCap then Exit; inc(arrayCap, 16); SetResultLength(arrayCap); end; function IsRoomForCurrentLine: Boolean; begin Result := (arrayCnt + 1) * lh <= pageHeight; end; function CheckLineHeight(currentChunk: TTextChunk): Boolean; begin // unless a user-defined lineHeight has been assigned (lineHeight > 0), // get the largest lineHeight of all displayed chunks and use that // lineHeight for *every* line that's being displayed ... if (lineHeight = 0) and (currentChunk.height > lh) then begin // first make sure that this chunk will fit Result := (arrayCnt + 1) * currentChunk.height <= pageHeight; if Result then lh := currentChunk.height; end else Result := IsRoomForCurrentLine; end; procedure AddLine; var i, spcCnt, ChunkIdxAtEndOfLine: integer; x: double; chnk: TTextChunk; begin CheckArrayCap; ChunkIdxAtEndOfLine := currentChunkIdx -1; // ignore spaces at the end of lines while (ChunkIdxAtEndOfLine > chunkIdxAtStartOfLine) and (Chunk[ChunkIdxAtEndOfLine].text = SPACE) do Dec(ChunkIdxAtEndOfLine); x := -priorSplitWidth; spcCnt := 0; for i := chunkIdxAtStartOfLine to ChunkIdxAtEndOfLine do begin chnk := Chunk[i]; if chnk.text = SPACE then inc(spcCnt); x := x + chnk.width; end; Result.lineWidths[arrayCnt] := x; Result.lineHeight := lh; Result.startOfLineIdx[arrayCnt] := chunkIdxAtStartOfLine; if spcCnt = 0 then Result.justifyDeltas[arrayCnt] := 0 else Result.justifyDeltas[arrayCnt] := (pageWidth - x)/spcCnt; inc(arrayCnt); chunkIdxAtStartOfLine := currentChunkIdx; currentX := 0; priorSplitWidth := 0; end; procedure AddSplitChunkLines(glyphOffset: integer); var highI: integer; residualWidth: double; chnk: TTextChunk; begin chnk := Chunk[chunkIdxAtStartOfLine]; priorSplitWidth := chnk.glyphOffsets[glyphOffset]; highI := High(chnk.glyphOffsets); residualWidth := chnk.width - priorSplitWidth; while (highI >= glyphOffset) and (residualWidth > pageWidth) do begin residualWidth := chnk.glyphOffsets[highI] - priorSplitWidth; Dec(highI); end; if highI < glyphOffset then begin // oops, even a single character won't fit !! linesFinished := true; currentChunkIdx := chunkIdxAtStartOfLine; end else if not IsRoomForCurrentLine then begin linesFinished := true; currentChunkIdx := chunkIdxAtStartOfLine; end else begin CheckArrayCap; Result.lineWidths[arrayCnt] := residualWidth; Result.lineHeight := lh; Result.startOfLineIdx[arrayCnt] := chunkIdxAtStartOfLine; Result.justifyDeltas[arrayCnt] := 0; if (highI = High(chnk.glyphOffsets)) then begin currentX := residualWidth; inc(currentChunkIdx); end else begin inc(arrayCnt); AddSplitChunkLines(highI +1); // note recursion end; end; end; var chnk: TTextChunk; begin FillChar(Result, SizeOf(Result), 0); arrayCnt := 0; arrayCap := 0; if (startingChunkIdx < 0) then startingChunkIdx := 0; if (Count = 0) or (startingChunkIdx >= Count) then Exit; lh := lineHeight; RectWidthHeight(rec, pageWidth, pageHeight); currentChunkIdx := startingChunkIdx; chunkIdxAtStartOfLine := startingChunkIdx; currentX := 0; priorSplitWidth := 0; linesFinished := false; while (currentChunkIdx < Count) do begin chnk := Chunk[currentChunkIdx]; if not CheckLineHeight(chnk) then break; if (chnk.text = #10) then begin AddLine; if arrayCnt > 0 then Result.justifyDeltas[arrayCnt-1] := 0; inc(currentChunkIdx); chunkIdxAtStartOfLine := currentChunkIdx; end else if (currentX + chnk.width > pageWidth) then begin if (currentChunkIdx = chunkIdxAtStartOfLine) then begin // a single chunk is too wide for 'pageWidth' AddSplitChunkLines(0); if linesFinished or (currentChunkIdx = Count) then Break; end else begin AddLine; // don't allow spaces to wrap to the front of the following line while (currentChunkIdx < Count) and (self.chunk[currentChunkIdx].text = SPACE) do inc(currentChunkIdx); chunkIdxAtStartOfLine := currentChunkIdx; end; end else begin currentX := currentX + chnk.width; inc(currentChunkIdx); end; end; if not linesFinished and (currentChunkIdx > chunkIdxAtStartOfLine) then AddLine; Result.lineCount := arrayCnt; SetResultLength(arrayCnt); Result.nextChuckIdx := currentChunkIdx; if (arrayCnt > 0) and (Result.nextChuckIdx = Count) then Result.justifyDeltas[arrayCnt-1] := 0; end; //------------------------------------------------------------------------------ function TChunkedText.GetChunkAndGlyphOffsetAtPt(const ptm: TPageTextMetrics; const pt: TPoint; out glyphIdx, chunkChrOff: integer): Boolean; var x,y, maxY, maxIdx: integer; x2 : Double; chnk: TTextChunk; begin Result := false; x := pt.X - ptm.bounds.Left; y := Trunc((pt.Y - ptm.bounds.Top - ptm.topLinePxOffset) / ptm.lineHeight); maxY := ptm.lineCount -1; if (x < 0) or (x > ptm.bounds.right - ptm.bounds.Left) or (y < 0) or (y > maxY) then Exit; if y = maxY then maxIdx := ptm.nextChuckIdx -1 else maxIdx := ptm.startOfLineIdx[y +1] -1; glyphIdx := ptm.startOfLineIdx[y]; chunkChrOff := 0; x2 := x; // get chunkIdx within line 'y' ... while (glyphIdx < maxIdx) do begin if Chunk[glyphIdx].text = space then begin if x2 < Chunk[glyphIdx].width + ptm.justifyDeltas[y] then Break; x2 := x2 - Chunk[glyphIdx].width - ptm.justifyDeltas[y]; end else begin if x2 < Chunk[glyphIdx].width then Break; x2 := x2 - Chunk[glyphIdx].width; end; inc(glyphIdx); end; // get chunkChrOffset within Chunk[chunkIdx] ... chnk := Chunk[glyphIdx]; while x2 >= chnk.glyphOffsets[chunkChrOff +1] do Inc(chunkChrOff); Result := true; end; //------------------------------------------------------------------------------ function TChunkedText.GetGlyphsOrDrawInternal(image: TImage32; const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double; out paths: TPathsD): TPageTextMetrics; var i,j, highJ,k, recWidth, recHeight: integer; a,b, chrIdx, lastLine: integer; x,y, totalHeight, lineWidth, spcDx: double; consumedWidth: double; pp: TPathsD; top: double; chnk: TTextChunk; begin paths := nil; FillChar(Result, SizeOf(Result), 0); Result.nextChuckIdx := startChunk; if Count = 0 then Exit; RectWidthHeight(rec, recWidth, recHeight); // LINE HEIGHTS ............... // Getting lineheights based on a given font's ascent and descent values // works well only when a single font is used. Unfortunately, when using // multiple fonts, line spacing becomes uneven and looks ugly. // An alternative approach is to measure the highest and lowest bounds of all // the glyphs in a line, and use these and a fixed inter line space // to derive variable line heights. But this approach also has problems, // especially when lines contain no glyphs, or when they only contain glyphs // with minimal heights (----------). So this too can look ugly. // A third approach, is to get the maximum of every lines' height and use // that value for every line. But this approach tends to produce undesirably // large line heights. // A fourth approach is to use the height of the very first text chunk. // And a final approach ia simply to use a user defined line height if lineHeight = 0 then lineHeight := Chunk[0].height; Result := GetPageMetrics(rec, lineHeight, startChunk); if (Result.lineCount = 0) or (lineHeight > recHeight) then Exit; // only return glyphs for visible lines totalHeight := lineHeight * Result.lineCount; i := Result.startOfLineIdx[0]; top := rec.Top + Chunk[i].ascent; case textAlignV of tvaMiddle: y := top + (RecHeight - totalHeight) /2 -1; tvaBottom: y := rec.bottom - totalHeight + Chunk[i].ascent; else y := top; end; Result.bounds := rec; Result.topLinePxOffset := Round(y - top); chrIdx := 0; lastLine := Result.lineCount -1; for i := 0 to lastLine do begin a := Result.startOfLineIdx[i]; if i = lastLine then begin if (chunk[a].width - chunk[a].glyphOffsets[chrIdx] > recWidth) then b := a -1 // flag getting glyphs for a partial chunk else if Result.nextChuckIdx = 0 then b := Count -1 else b := Result.nextChuckIdx -1; end else b := Result.startOfLineIdx[i+1] -1; if textAlign = taJustify then spcDx := Result.justifyDeltas[i] else spcDx := 0; lineWidth := Result.lineWidths[i]; if (b < a) then begin // chunk[a] width exceeds recWidth chnk := chunk[a]; consumedWidth := chnk.glyphOffsets[chrIdx]; highJ := High(chnk.glyphOffsets); j := chrIdx; while (j < highJ) and (chnk.glyphOffsets[j+1] -consumedWidth < lineWidth) do inc(j); pp := nil; for k := chrIdx to j do AppendPath(pp, chnk.arrayOfPaths[k]); pp := TranslatePath(pp, rec.Left - consumedWidth, y); chnk.left := rec.Left; chnk.top := y - chnk.ascent; if Assigned(image) then begin if Assigned(fDrawChunkEvent) then fDrawChunkEvent(chnk, RectD(rec.Left, chnk.top, rec.Left + consumedWidth, chnk.top + chnk.height)); DrawPolygon(image, pp, frNonZero, chnk.fontColor); end else AppendPath(paths, pp); y := y + lineHeight; chrIdx := j +1; Continue; end else if chrIdx > 0 then begin // finish the partially processed chunk before continuing to next one chnk := chunk[a]; highJ := High(chnk.glyphOffsets); consumedWidth := chnk.glyphOffsets[chrIdx]; j := chrIdx; while (j < highJ) and (chnk.glyphOffsets[j+1] -consumedWidth < lineWidth) do inc(j); pp := nil; for k := chrIdx to j do AppendPath(pp, chnk.arrayOfPaths[k]); pp := TranslatePath(pp, rec.Left - consumedWidth, y); if Assigned(image) then DrawPolygon(image, pp, frNonZero, chnk.fontColor) else AppendPath(paths, pp); if (j = chrIdx) and (j < highJ) then break // oops, even a character is too wide for 'rec' ! else if j < HighJ then begin chrIdx := j; Continue; end else begin chrIdx := 0; x := rec.Left + chnk.width - consumedWidth; inc(a); end; end else begin case textAlign of taRight : x := rec.Left + (recWidth - lineWidth); taCenter : x := rec.Left + (recWidth - lineWidth) / 2; else x := rec.Left; end; end; // ignore trailing spaces while (b >= a) do if Chunk[b].text <= SPACE then dec(b) else break; for j := a to b do begin chnk := GetChunk(j); chnk.left := x; chnk.top := y - chnk.ascent; if chnk.text > SPACE then begin pp := MergeArrayOfPathsEx(chnk.arrayOfPaths, x, y); if Assigned(image) then begin if (GetAlpha(chnk.backColor) > 0) then image.FillRect(Img32.Vector.Rect(RectD(x, chnk.top, x + chnk.width, chnk.top + chnk.height)), chnk.backColor); if Assigned(fDrawChunkEvent) then fDrawChunkEvent(chnk, RectD(x, chnk.top, x + chnk.width, chnk.top + chnk.height)); DrawPolygon(image, pp, frNonZero, chnk.fontColor); end else AppendPath(paths, pp); x := x + chnk.width; end else begin if (GetAlpha(chnk.backColor) > 0) then image.FillRect(Img32.Vector.Rect(RectD(x, chnk.top, x + chnk.width + spcDx, chnk.top + chnk.height)), chnk.backColor); if Assigned(image) and Assigned(fDrawChunkEvent) then fDrawChunkEvent(chnk, RectD(x, chnk.top, x + chnk.width + spcDx, chnk.top + chnk.height)); x := x + chnk.width + spcDx; end; end; y := y + lineHeight; end; end; //------------------------------------------------------------------------------ function TChunkedText.DrawText(image: TImage32; const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double): TPageTextMetrics; var dummy: TPathsD; begin Result := GetGlyphsOrDrawInternal(image, rec, textAlign, textAlignV, startChunk, lineHeight, dummy); end; //------------------------------------------------------------------------------ function TChunkedText.GetTextGlyphs(const rec: TRect; textAlign: TTextAlign; textAlignV: TTextVAlign; startChunk: integer; lineHeight: double = 0.0): TPathsD; begin GetGlyphsOrDrawInternal(nil, rec, textAlign, textAlignV, startChunk, lineHeight, Result); end; //------------------------------------------------------------------------------ procedure TChunkedText.ApplyNewFont(font: TFontCache); var i: integer; begin if not Assigned(font) then Exit; for i := 0 to Count -1 do with Chunk[i] do begin font.GetTextOutlineInternal(0,0, text, 0, arrayOfPaths, glyphOffsets, width); height := font.LineHeight; ascent := font.Ascent; end; end; //------------------------------------------------------------------------------ // TFontManager //------------------------------------------------------------------------------ constructor TFontManager.Create; begin fMaxFonts := 32; {$IFDEF XPLAT_GENERICS} fFontList := TList.Create; {$ELSE} fFontList:= TList.Create; {$ENDIF} end; //------------------------------------------------------------------------------ destructor TFontManager.Destroy; begin Clear; fFontList.Free; inherited; end; //------------------------------------------------------------------------------ procedure TFontManager.Clear; var i: integer; begin for i := 0 to fFontList.Count -1 do with TFontReader(fFontList[i]) do begin fFontManager := nil; Free; end; fFontList.Clear; end; //------------------------------------------------------------------------------ function TFontManager.FindDuplicate(fr: TFontReader): integer; var fi, fi2: TFontInfo; begin fi := fr.FontInfo; for Result := 0 to fFontList.Count -1 do begin fi2 := TFontReader(fFontList[Result]).FontInfo; if SameText(fi.fullFaceName, fi2.fullFaceName) and (fi.macStyles = fi2.macStyles) then Exit; end; Result := -1; end; //------------------------------------------------------------------------------ {$IFDEF MSWINDOWS} function TFontManager.LoadFontReaderFamily(const fontFamily: string): TLoadFontResult; var frf: TFontReaderFamily; begin Result := LoadFontReaderFamily(fontFamily, frf); end; //------------------------------------------------------------------------------ function TFontManager.LoadFontReaderFamily(const fontFamily: string; out fontReaderFamily: TFontReaderFamily): TLoadFontResult; var arrayEnumLogFont: TArrayOfEnumLogFontEx; lf: TLogFont; fontInfo: TFontInfo; function FontInfoNamesAndSytlesMatch(const fontInfo1, fontInfo2: TFontInfo): Boolean; begin Result := (fontInfo1.faceName = fontInfo2.faceName) and (fontInfo1.macStyles = fontInfo2.macStyles); end; begin Result := lfrInvalid; fontReaderFamily.regularFR := nil; fontReaderFamily.boldFR := nil; fontReaderFamily.italicFR := nil; fontReaderFamily.boldItalicFR := nil; if (fontFamily = '') or (Length(fontFamily) > LF_FACESIZE) then Exit; arrayEnumLogFont := GetLogFonts(fontFamily, DEFAULT_CHARSET); //ANSI_CHARSET); FillChar(lf, SizeOf(TLogFont), 0); Move(fontFamily[1], lf.lfFaceName[0], Length(fontFamily) * SizeOf(Char)); if not GetLogFontFromEnumThatMatchesStyles(arrayEnumLogFont, [], lf) then Exit; // make room for 4 new fontreaders while fFontList.Count > fMaxFonts - 4 do DeleteOldestFont; fontReaderFamily.regularFR := TFontReader.Create; fontReaderFamily.regularFR.Load(lf); Result := ValidateFontLoad(fontReaderFamily.regularFR); case Result of lfrInvalid: Exit; lfrDuplicate: begin fontInfo := fontReaderFamily.regularFR.FontInfo; fontInfo.macStyles := [msBold]; fontReaderFamily.boldFR := GetBestMatchFont(fontInfo); if not FontInfoNamesAndSytlesMatch(FontInfo, fontReaderFamily.boldFR.FontInfo) then fontReaderFamily.boldFR := nil; fontInfo.macStyles := [msItalic]; fontReaderFamily.italicFR := GetBestMatchFont(fontInfo); if not FontInfoNamesAndSytlesMatch(FontInfo, fontReaderFamily.italicFR.FontInfo) then fontReaderFamily.italicFR := nil; fontInfo.macStyles := [msBold, msItalic]; fontReaderFamily.boldItalicFR := GetBestMatchFont(fontInfo); if not FontInfoNamesAndSytlesMatch(FontInfo, fontReaderFamily.boldItalicFR.FontInfo) then fontReaderFamily.boldItalicFR := nil; end; else begin if GetLogFontFromEnumThatMatchesStyles(arrayEnumLogFont, [msBold], lf) then begin fontReaderFamily.boldFR := TFontReader.Create; fontReaderFamily.boldFR.Load(lf); ValidateFontLoad(fontReaderFamily.boldFR); end; if GetLogFontFromEnumThatMatchesStyles(arrayEnumLogFont, [msItalic], lf) then begin fontReaderFamily.italicFR := TFontReader.Create; fontReaderFamily.italicFR.Load(lf); ValidateFontLoad(fontReaderFamily.italicFR); end; if GetLogFontFromEnumThatMatchesStyles(arrayEnumLogFont, [msBold, msItalic], lf) then begin fontReaderFamily.boldItalicFR := TFontReader.Create; fontReaderFamily.boldItalicFR.Load(lf); ValidateFontLoad(fontReaderFamily.boldItalicFR); end; end; end; end; //------------------------------------------------------------------------------ function TFontManager.LoadFontReader(const fontName: string): TFontReader; begin Result := nil; if (fontName = '') or (Length(fontName) > LF_FACESIZE) then Exit; if fFontList.Count >= fMaxFonts then DeleteOldestFont; Result := TFontReader.Create(fontName); ValidateFontLoad(Result); end; //------------------------------------------------------------------------------ {$ENDIF} function TFontManager.LoadFromStream(stream: TStream): TFontReader; begin if fFontList.Count >= fMaxFonts then DeleteOldestFont; Result := TFontReader.Create; try if not Result.LoadFromStream(stream) then FreeAndNil(Result) else ValidateFontLoad(Result); except FreeAndNil(Result); end; end; //------------------------------------------------------------------------------ function TFontManager.LoadFromResource(const resName: string; resType: PChar): TFontReader; begin if fFontList.Count >= fMaxFonts then DeleteOldestFont; Result := TFontReader.Create; try if not Result.LoadFromResource(resName, resType) then FreeAndNil(Result) else ValidateFontLoad(Result); except FreeAndNil(Result); end; end; //------------------------------------------------------------------------------ function TFontManager.LoadFromFile(const filename: string): TFontReader; begin if fFontList.Count >= fMaxFonts then DeleteOldestFont; Result := TFontReader.Create; try if not Result.LoadFromFile(filename) then FreeAndNil(Result) else ValidateFontLoad(Result); except FreeAndNil(Result); end; end; //------------------------------------------------------------------------------ function TFontManager.ValidateFontLoad(var fr: TFontReader): TLoadFontResult; var dupIdx: integer; begin if not fr.IsValidFontFormat then begin FreeAndNil(fr); result := lfrInvalid; Exit; end; dupIdx := FindDuplicate(fr); if dupIdx >= 0 then begin FreeAndNil(fr); result := lfrDuplicate; fr := fFontList[dupIdx]; end else begin Result := lfrSuccess; fFontList.Add(fr); fr.fFontManager := self; end; end; //------------------------------------------------------------------------------ function TFontManager.Delete(fontReader: TFontReader): Boolean; var i: integer; begin for i := 0 to fFontList.Count -1 do if TFontReader(fFontList[i]) = fontReader then begin // make sure the FontReader object isn't destroying itself externally if not fontReader.fDestroying then fontReader.Free; fFontList.Delete(i); Result := true; Exit; end; Result := false; end; //------------------------------------------------------------------------------ function StylesToInt(macstyles: TMacStyles): integer; {$IFDEF INLINE} inline; {$ENDIF} begin if msBold in macStyles then Result := 1 else Result := 0; if msItalic in macStyles then inc(Result, 2); end; //------------------------------------------------------------------------------ function FontFamilyToInt(family: TFontFamily): integer; {$IFDEF INLINE} inline; {$ENDIF} begin Result := Ord(family) +1; end; //------------------------------------------------------------------------------ function TFontManager.GetBestMatchFont(const fontInfo: TFontInfo): TFontReader; function GetStyleDiff(const macstyles1, macstyles2: TMacStyles): integer; {$IFDEF INLINE} inline; {$ENDIF} begin // top priority Result := (((Byte(macstyles1) xor $FF) or (Byte(macstyles2) xor $FF)) and $3) * 256; end; function GetFontFamilyDiff(const family1, family2: TFontFamily): integer; {$IFDEF INLINE} inline; {$ENDIF} begin // second priority if family1 = tfUnknown then Result := 0 else Result := Abs(FontFamilyToInt(family1) - FontFamilyToInt(family2)) * 8; end; function GetShortNameDiff(const name1, name2: Utf8String): integer; {$IFDEF INLINE} inline; {$ENDIF} begin // third priority (shl 3) if name1 = '' then Result := 0 else if SameText(name1, name2) then Result := 0 else Result := 4; end; function GetFullNameDiff(const fiToMatch: TFontInfo; const candidateName: Utf8String): integer; var i: integer; begin // lowest priority Result := 0; if Assigned(fiToMatch.familyNames) then begin for i := 0 to High(fiToMatch.familyNames) do if SameText(fiToMatch.familyNames[i], candidateName) then Exit; end else if SameText(fiToMatch.faceName, candidateName) then Exit; Result := 2; end; function CompareFontInfos(const fiToMatch, fiCandidate: TFontInfo): integer; begin Result := GetStyleDiff(fiToMatch.macStyles, fiCandidate.macStyles) + GetFontFamilyDiff(fiToMatch.family, fiCandidate.family) + GetShortNameDiff(fiToMatch.faceName, fiCandidate.faceName) + GetFullNameDiff(fiToMatch, fiCandidate.fullFaceName); end; var i, bestDiff, currDiff: integer; fr: TFontReader; begin Result := nil; bestDiff := MaxInt; for i := 0 to fFontList.Count -1 do begin fr := TFontReader(fFontList[i]); currDiff := CompareFontInfos(fontInfo, fr.fFontInfo); if (currDiff < bestDiff) then begin Result := fr; if currDiff = 0 then Break; // can't do better :) bestDiff := currDiff; end; end; end; //------------------------------------------------------------------------------ function TFontManager.GetBestMatchFont(const styles: TMacStyles): TFontReader; var i, bestDiff, currDiff: integer; fr: TFontReader; begin Result := nil; bestDiff := MaxInt; for i := 0 to fFontList.Count -1 do begin fr := TFontReader(fFontList[i]); currDiff := (((Byte(styles) xor $FF) or (Byte(fr.fFontInfo.macStyles) xor $FF)) and $3); if (currDiff < bestDiff) then begin Result := fr; if currDiff = 0 then Break; // can't do any better :) bestDiff := currDiff; end; end; end; //------------------------------------------------------------------------------ function TFontManager.FindReaderContainingGlyph(codepoint: Cardinal; fntFamily: TFontFamily; out glyphIdx: WORD): TFontReader; var i: integer; reader: TFontReader; begin result := nil; for i := 0 to fFontList.Count -1 do begin reader := TFontReader(fFontList[i]); glyphIdx := reader.GetGlyphIdxUsingCmap(codepoint); // if a font family is specified, then only return true // when finding the glyph within that font family if (glyphIdx > 0) and ((fntFamily = tfUnknown) or (reader.FontFamily = tfUnknown) or (fntFamily = reader.FontFamily)) then begin Result := reader; Exit; end; end; glyphIdx := 0; end; //------------------------------------------------------------------------------ procedure TFontManager.SetMaxFonts(value: integer); begin if value < 0 then value := 0; if value <= 0 then Clear else while value > fFontList.Count do Delete(TFontReader(fFontList[0])); fMaxFonts := value; end; //------------------------------------------------------------------------------ function FontSorterProc(fontreader1, fontreader2: Pointer): integer; var fr1: TFontReader absolute fontreader1; fr2: TFontReader absolute fontreader2; begin if fr1.fLastUsedTime > fr2.fLastUsedTime then Result := -1 else if fr1.fLastUsedTime < fr2.fLastUsedTime then Result := 1 else Result := 0; end; //------------------------------------------------------------------------------ procedure TFontManager.SortFontListOnLastUse; begin {$IFDEF XPLAT_GENERICS} fFontList.Sort(TComparer.Construct( function (const fr1, fr2: TFontReader): integer begin if fr1.fLastUsedTime > fr2.fLastUsedTime then Result := -1 else if fr1.fLastUsedTime < fr2.fLastUsedTime then Result := 1 else Result := 0; end)); {$ELSE} fFontList.Sort(FontSorterProc); {$ENDIF} end; //------------------------------------------------------------------------------ procedure TFontManager.DeleteOldestFont; var cnt: integer; begin cnt := fFontList.Count; if cnt = 0 then Exit; SortFontListOnLastUse; TFontReader(fFontList[cnt -1]).Free; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ function FontManager: TFontManager; begin result := aFontManager; end; //------------------------------------------------------------------------------ initialization aFontManager := TFontManager.Create; finalization aFontManager.Free; end. doublecmd-1.1.30/components/Image32/source/Img32.SVG.Reader.pas0000644000175000001440000053573515104114162022710 0ustar alexxusersunit Img32.SVG.Reader; (******************************************************************************* * Author : Angus Johnson * * Version : 4.8 * * Date : 12 January 2025 * * Website : http://www.angusj.com * * Copyright : Angus Johnson 2019-2025 * * * * Purpose : Read SVG 2.0 files * * * * License : Use, modification & distribution is subject to * * Boost Software License Ver 1 * * http://www.boost.org/LICENSE_1_0.txt * *******************************************************************************) interface {$I Img32.inc} uses SysUtils, Classes, Types, Math, {$IFDEF XPLAT_GENERICS} Generics.Collections, Generics.Defaults,{$ENDIF} Img32, Img32.SVG.Core, Img32.SVG.Path, Img32.Vector, Img32.Draw, Img32.Text, Img32.Transform; {$IFDEF ZEROBASEDSTR} {$ZEROBASEDSTRINGS OFF} {$ENDIF} type TBaseElement = class; TElementClass = class of TBaseElement; TDrawData = record currentColor : TColor32; fillColor : TColor32; fillOpacity : double; fillRule : TFillRule; fillEl : UTF8String; strokeColor : TColor32; strokeOpacity : double; strokeWidth : TValue; strokeCap : TEndStyle; strokeJoin : TJoinStyle; strokeMitLim : double; strokeEl : UTF8String; dashArray : TArrayOfDouble; dashOffset : double; fontInfo : TSVGFontInfo; markerStart : UTF8String; markerMiddle : UTF8String; markerEnd : UTF8String; filterElRef : UTF8String; maskElRef : UTF8String; clipElRef : UTF8String; matrix : TMatrixD; visible : Boolean; useEl : TBaseElement; // to check for and prevent recursion bounds : TRectD; end; PSvgIdNameHashMapItem = ^TSvgIdNameHashMapItem; TSvgIdNameHashMapItem = record Hash: Cardinal; Next: Integer; Name: UTF8String; Element: TBaseElement; end; TSvgIdNameHashMap = class(TObject) private FItems: array of TSvgIdNameHashMapItem; FBuckets: TArrayOfInteger; FCount: Integer; FMod: Cardinal; procedure Grow; function FindItemIndex(const Name: UTF8String): Integer; public procedure AddOrIgnore(const idName: UTF8String; element: TBaseElement); function FindElement(const idName: UTF8String): TBaseElement; procedure Clear; end; TSvgReader = class; TBaseElement = class private fParent : TBaseElement; fXmlEl : TSvgXmlEl; fSvgReader : TSvgReader; {$IFDEF XPLAT_GENERICS} fChilds : TList; {$ELSE} fChilds : TList; {$ENDIF} fId : UTF8String; fDrawData : TDrawData; // currently both static and dynamic vars function FindRefElement(const refname: UTF8String): TBaseElement; function GetChildCount: integer; function GetChild(index: integer): TBaseElement; function FindChild(const idName: UTF8String): TBaseElement; protected elRectWH : TValueRecWH; // multifunction variable function IsFirstChild: Boolean; procedure LoadAttributes; procedure LoadAttribute(attrib: PSvgAttrib); function LoadContent: Boolean; virtual; // GetRelFracLimit: ie when to assume untyped vals are relative vals function GetRelFracLimit: double; virtual; procedure Draw(image: TImage32; drawDat: TDrawData); virtual; procedure DrawChildren(image: TImage32; const drawDat: TDrawData); public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); virtual; destructor Destroy; override; property Child[index: integer]: TBaseElement read GetChild; default; property ChildCount: integer read GetChildCount; property DrawData: TDrawData read fDrawData write fDrawData; property Id: UTF8String read fId; end; TShapeElement = class(TBaseElement) protected hasPaths : Boolean; pathsLoaded : Boolean; drawPathsO : TPathsD; //open only drawPathsC : TPathsD; //closed only function GetBounds: TRectD; virtual; function HasMarkers: Boolean; procedure GetPaths(const drawDat: TDrawData); virtual; // GetSimplePath: is only required for markers function GetSimplePath(const drawDat: TDrawData): TPathsD; virtual; procedure DrawFilled(img: TImage32; const paths: TPathsD; drawDat: TDrawData); procedure DrawStroke(img: TImage32; const paths: TPathsD; drawDat: TDrawData; isClosed: Boolean); procedure DrawMarkers(img: TImage32; drawDat: TDrawData); procedure Draw(image: TImage32; drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TSvgElement = class(TShapeElement) protected procedure Draw(image: TImage32; drawDat: TDrawData); override; public viewboxWH : TRectWH; function Width : TValue; function Height : TValue; end; TSvgReader = class private fSvgParser : TSvgParser; fBkgndColor : TColor32; fBackgndImage : TImage32; fTempImage : TImage32; fBlurQuality : integer; fIdList : TSvgIdNameHashMap; fLinGradRenderer : TLinearGradientRenderer; fRadGradRenderer : TSvgRadialGradientRenderer; fCustomRendererCache: TCustomRendererCache; fRootElement : TSvgElement; fFontCache : TFontCache; fUsePropScale : Boolean; fSimpleDraw : Boolean; fSimpleDrawList : TList; function LoadInternal: Boolean; function GetIsEmpty: Boolean; function GetTempImage: TImage32; procedure SetBlurQuality(quality: integer); protected userSpaceBounds : TRectD; currentColor : TColor32; procedure GetBestFont(const svgFontInfo: TSVGFontInfo); property RadGradRenderer: TSvgRadialGradientRenderer read fRadGradRenderer; property LinGradRenderer: TLinearGradientRenderer read fLinGradRenderer; property BackgndImage : TImage32 read fBackgndImage; property TempImage : TImage32 read GetTempImage; public constructor Create; destructor Destroy; override; procedure Clear; procedure DrawImage(img: TImage32; scaleToImage: Boolean); function LoadFromStream(stream: TStream): Boolean; function LoadFromFile(const filename: string): Boolean; function LoadFromString(const str: string): Boolean; // The following two methods are deprecated and intended only for ... // https://github.com/EtheaDev/SVGIconImageList procedure SetOverrideFillColor(color: TColor32); //deprecated; procedure SetOverrideStrokeColor(color: TColor32); //deprecated; function FindElement(const idName: UTF8String): TBaseElement; property BackgroundColor : TColor32 read fBkgndColor write fBkgndColor; property BlurQuality : integer read fBlurQuality write SetBlurQuality; property IsEmpty : Boolean read GetIsEmpty; // KeepAspectRatio: this property has also been added for the convenience of // the third-party SVGIconImageList. (IMHO it should always = true) property KeepAspectRatio: Boolean read fUsePropScale write fUsePropScale; property RootElement : TSvgElement read fRootElement; // RecordSimpleDraw: record simple drawing instructions property RecordSimpleDraw: Boolean read fSimpleDraw write fSimpleDraw; // SimpleDrawList: list of PSimpleDrawData records; property SimpleDrawList : TList read fSimpleDrawList; end; PSimpleDrawData = ^TSimpleDrawData; TSimpleDrawData = record paths : TPathsD; fillRule : TFillRule; color : TColor32; tag : integer; end; var // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/width defaultSvgWidth: integer = 300; // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/height defaultSvgHeight: integer = 150; implementation uses Img32.Extra, Img32.Clipper2; type TFourDoubles = array [0..3] of double; TDefsElement = class(TBaseElement) public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TStyleElement = class(TBaseElement) public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; // TImageElement only supports *embedded* jpg & png images. // And it requires Img32.Fmt.JPG & Img32.Fmt.PNG to be included // in the USES clause of at least one of the application's units. // (nb: If using the FMX framework, then add Img32.FMX instead of // Img32.Fmt.JPG & Img32.Fmt.PNG to the USES clause.) TImageElement = class(TBaseElement) private fRefEl: UTF8String; fImage: TImage32; fTransparent: Boolean; protected procedure Draw(image: TImage32; drawDat: TDrawData); override; public destructor Destroy; override; end; TGroupElement = class(TShapeElement) protected procedure Draw(image: TImage32; drawDat: TDrawData); override; end; TSwitchElement = class(TShapeElement) protected procedure Draw(image: TImage32; drawDat: TDrawData); override; end; TUseElement = class(TShapeElement) private callerUse: TBaseElement; function ValidateNonRecursion(el: TBaseElement): Boolean; protected fRefEl: UTF8String; procedure GetPaths(const drawDat: TDrawData); override; procedure Draw(img: TImage32; drawDat: TDrawData); override; end; TMaskElement = class(TShapeElement) protected maskRec: TRect; procedure GetPaths(const drawDat: TDrawData); override; procedure ApplyMask(img: TImage32; const drawDat: TDrawData); end; TSymbolElement = class(TShapeElement) protected viewboxWH: TRectWH; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; //------------------------------------- TPathElement = class(TShapeElement) private fSvgPaths : TSvgPath; procedure Flatten(index: integer; scalePending: double; out path: TPathD; out isClosed: Boolean); protected function GetBounds: TRectD; override; procedure ParseDAttrib(const value: UTF8String); procedure GetPaths(const drawDat: TDrawData); override; function GetSimplePath(const drawDat: TDrawData): TPathsD; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; destructor Destroy; override; end; TPolyElement = class(TShapeElement) //polyline or polygon protected path : TPathD; function GetBounds: TRectD; override; procedure ParsePoints(const value: UTF8String); procedure GetPaths(const drawDat: TDrawData); override; function GetSimplePath(const drawDat: TDrawData): TPathsD; override; end; TLineElement = class(TShapeElement) protected path : TPathD; function GetBounds: TRectD; override; procedure GetPaths(const drawDat: TDrawData); override; function GetSimplePath(const drawDat: TDrawData): TPathsD; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TCircleElement = class(TShapeElement) protected bounds : TRectD; centerPt : TValuePt; radius : TValue; function GetBounds: TRectD; override; procedure GetPaths(const drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TEllipseElement = class(TShapeElement) protected bounds : TRectD; centerPt : TValuePt; radius : TValuePt; function GetBounds: TRectD; override; procedure GetPaths(const drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TRectElement = class(TShapeElement) protected radius : TValuePt; function GetBounds: TRectD; override; procedure GetPaths(const drawDat: TDrawData); override; function GetSimplePath(const drawDat: TDrawData): TPathsD; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TTSpanElement = class; // TTextElement: although a TShapeElement descendant, it's really just // a container for other TShapeElements (, etc). TTextElement = class(TShapeElement) protected offset : TValuePt; textDx : double; angle : TArrayOfDouble; currentPt : TPointD; currSpanEl : TTSpanElement; //the current 'real' lastChrSpc : Boolean; procedure Draw(img: TImage32; drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TTextSubElement = class(TShapeElement) protected offset : TValuePt; textEl : TTextElement; function GetTextEl: TTextElement; end; TTSpanElement = class(TTextSubElement) protected chunkDx : double; angle : TArrayOfDouble; procedure GetPaths(const drawDat: TDrawData); override; public procedure Draw(image: TImage32; drawDat: TDrawData); override; end; TTextPathElement = class(TTextSubElement) private pathEl: TPathElement; scale: double; protected pathName : UTF8String; //name (id) of path element procedure GetPathsInternal(el: TBaseElement; const drawDat: TDrawData); procedure GetPaths(const drawDat: TDrawData); override; function GetBounds: TRectD; override; public procedure Draw(image: TImage32; drawDat: TDrawData); override; end; TTextAreaElement = class(TShapeElement) protected procedure GetPaths(const drawDat: TDrawData); override; end; TMarkerElement = class(TShapeElement) private fPoints : TPathD; protected refPt : TValuePt; angle : double; angle2 : double; markerBoxWH : TRectWH; autoStartReverse : Boolean; procedure SetEndPoint(const pt: TPointD; angle: double); function SetMiddlePoints(const points: TPathD): Boolean; procedure Draw(img: TImage32; drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TSvgColorStop = record offset : double; color : TColor32; end; TSvgColorStops = array of TSvgColorStop; TFillElement = class(TBaseElement) protected refEl : UTF8String; units : Cardinal; function GetRelFracLimit: double; override; end; TPatternElement = class(TFillElement) protected ImgRenderer : TImageRenderer; pattBoxWH : TRectWH; function PrepareRenderer(renderer: TImageRenderer; drawDat: TDrawData): Boolean; virtual; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; destructor Destroy; override; end; //nb: gradients with objectBoundingBox should not be applied to //elements without width and height. TGradientElement = class(TFillElement) protected stops : TSvgColorStops; spreadMethod : TGradientFillStyle; function LoadContent: Boolean; override; procedure AddStop(color: TColor32; offset: double); procedure AssignTo(other: TBaseElement); virtual; function PrepareRenderer(renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; virtual; procedure AddColorStopsToRenderer(renderer: TCustomGradientRenderer); end; TRadGradElement = class(TGradientElement) protected radius: TValuePt; F, C: TValuePt; procedure AssignTo(other: TBaseElement); override; function PrepareRenderer(renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TLinGradElement = class(TGradientElement) protected startPt, endPt: TValuePt; procedure AssignTo(other: TBaseElement); override; function PrepareRenderer(renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TGradStopElement = class(TBaseElement) protected offset: double; color: TColor32; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TFilterElement = class(TBaseElement) private fSrcImg : TImage32; fLastImg : TImage32; fScale : double; fFilterBounds : TRect; fObjectBounds : TRect; fImages : array of TImage32; fNames : array of UTF8String; protected procedure Clear; function GetRelFracLimit: double; override; function GetAdjustedBounds(const bounds: TRectD): TRectD; function FindNamedImage(const name: UTF8String): TImage32; function AddNamedImage(const name: UTF8String): TImage32; function GetNamedImage(const name: UTF8String; isIn: Boolean): TImage32; procedure Apply(img: TImage32; const filterBounds: TRect; const matrix: TMatrixD); public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; destructor Destroy; override; end; TFeBaseElement = class(TBaseElement) private function GetParentAsFilterEl: TFilterElement; protected in1: UTF8String; in2: UTF8String; res: UTF8String; srcImg, dstImg: TImage32; srcRec, dstRec: TRect; function GetSrcAndDst: Boolean; function GetBounds(img: TImage32): TRect; procedure Apply; virtual; abstract; property ParentFilterEl: TFilterElement read GetParentAsFilterEl; end; TFeBlendElement = class(TFeBaseElement) protected procedure Apply; override; end; TFeImageElement = class(TFeBaseElement) private refEl: UTF8String; fImage: TImage32; protected procedure Apply; override; public destructor Destroy; override; end; TCompositeOp = (coOver, coIn, coOut, coAtop, coXOR, coArithmetic); TFeCompositeElement = class(TFeBaseElement) protected fourKs: TFourDoubles; //arithmetic constants compositeOp: TCompositeOp; procedure Apply; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TFeColorMatrixElement = class(TFeBaseElement) protected values: TArrayOfDouble; procedure Apply; override; end; TFuncType = (ftIdentity, ftTable, ftDiscrete, ftLinear, ftGamma); TFeComponentTransferElement = class(TFeBaseElement) protected procedure Apply; override; end; TFeComponentTransferChild = class(TBaseElement) protected bytes: TArrayOfByte; protected funcType: TFuncType; intercept: double; slope: double; tableValues: TArrayOfDouble; end; TFeFuncRElement = class(TFeComponentTransferChild) end; TFeFuncGElement = class(TFeComponentTransferChild) end; TFeFuncBElement = class(TFeComponentTransferChild) end; TFeFuncAElement = class(TFeComponentTransferChild) end; TFeDefuseLightElement = class(TFeBaseElement) protected color : TColor32; surfaceScale : double; diffuseConst : double; kernelSize : integer; procedure Apply; override; end; TFeDropShadowElement = class(TFeBaseElement) protected stdDev : double; offset : TValuePt; floodColor : TColor32; procedure Apply; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TFeFloodElement = class(TFeBaseElement) protected floodColor : TColor32; procedure Apply; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TFeGaussElement = class(TFeBaseElement) protected stdDev: double; procedure Apply; override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; TFeMergeElement = class(TFeBaseElement) protected procedure Apply; override; end; TFeMergeNodeElement = class(TFeBaseElement) protected procedure Apply; override; end; TFeOffsetElement = class(TFeBaseElement) protected offset : TValuePt; procedure Apply; override; end; TFePointLightElement = class(TFeBaseElement) protected z : double; end; TFeSpecLightElement = class(TFeBaseElement) protected exponent : double; color : TColor32; procedure Apply; override; end; TClipPathElement = class(TShapeElement) protected units: Cardinal; procedure GetPaths(const drawDat: TDrawData); override; public constructor Create(parent: TBaseElement; svgEl: TSvgXmlEl); override; end; //------------------------------------- const buffSize = 32; clAlphaSet = $00010101; SourceImage : UTF8String = 'SourceGraphic'; //SourceAlpha : UTF8String = 'SourceAlpha'; tmpFilterImg : UTF8String = 'tmp'; //https://www.w3.org/TR/css-fonts-3/#font-family-prop emptyDrawInfo: TDrawData = (currentColor: clInvalid; fillColor: clInvalid; fillOpacity: InvalidD; fillRule: frNegative; fillEl: ''; strokeColor: clInvalid; strokeOpacity: InvalidD; strokeWidth: (rawVal: InvalidD; unitType: utNumber); strokeCap: esPolygon; strokeJoin: jsMiter; strokeMitLim: 0.0; strokeEl : ''; dashArray: nil; dashOffset: 0; fontInfo: (family: tfUnknown; familyNames: nil; size: 0; spacing: 0.0; spacesInText: sitUndefined; textLength: 0; italic: sfsUndefined; weight: -1; align: staUndefined; decoration: fdUndefined; baseShift: (rawVal: InvalidD; unitType: utNumber)); markerStart: ''; markerMiddle: ''; markerEnd: ''; filterElRef: ''; maskElRef: ''; clipElRef: ''; matrix: ((1, 0, 0),(0, 1, 0),(0, 0, 1)); visible: true; useEl: nil; bounds: (Left:0; Top:0; Right:0; Bottom:0)); var //defaultFontHeight: this size will be used to retrieve ALL glyph contours //(and later scaled as necessary). This relatively large default ensures //that contours will have adequate detail. defaultFontHeight: double = 20.0; //------------------------------------------------------------------------------ // Miscellaneous functions ... //------------------------------------------------------------------------------ function HashToElementClass(hash: Cardinal): TElementClass; begin case hash of hClippath : Result := TClipPathElement; hCircle : Result := TCircleElement; hDefs : Result := TDefsElement; hEllipse : Result := TEllipseElement; hFilter : Result := TFilterElement; hfeBlend : Result := TFeBlendElement; hfeColorMatrix : Result := TFeColorMatrixElement; hFeComponentTransfer : Result := TFeComponentTransferElement; hFeFuncR : Result := TFeFuncRElement; hFeFuncG : Result := TFeFuncGElement; hFeFuncB : Result := TFeFuncBElement; hFeFuncA : Result := TFeFuncAElement; hfeComposite : Result := TFeCompositeElement; hfeDefuseLighting : Result := TFeDefuseLightElement; hfeDropShadow : Result := TFeDropShadowElement; hfeFlood : Result := TFeFloodElement; hFeGaussianBlur : Result := TFeGaussElement; hFeImage : Result := TFeImageElement; hfeMerge : Result := TFeMergeElement; hfeMergeNode : Result := TFeMergeNodeElement; hfeOffset : Result := TFeOffsetElement; hfePointLight : Result := TFePointLightElement; hfeSpecularLighting : Result := TFeSpecLightElement; hG : Result := TGroupElement; hImage : Result := TImageElement; hLine : Result := TLineElement; hLineargradient : Result := TLinGradElement; hMarker : Result := TMarkerElement; hMask : Result := TMaskElement; hPath : Result := TPathElement; hPattern : Result := TPatternElement; hPolyline : Result := TPolyElement; hPolygon : Result := TPolyElement; hRadialgradient : Result := TRadGradElement; hRect : Result := TRectElement; hStop : Result := TGradStopElement; hStyle : Result := TStyleElement; hSvg : Result := TSvgElement; hSwitch : Result := TSwitchElement; hSymbol : Result := TSymbolElement; hText : Result := TTextElement; hTextArea : Result := TTextAreaElement; hTextPath : Result := TTextPathElement; hTSpan : Result := TTSpanElement; hUse : Result := TUseElement; else Result := TBaseElement; //use generic class end; end; //------------------------------------------------------------------------------ procedure UpdateDrawInfo(var drawDat: TDrawData; thisElement: TBaseElement); begin with thisElement.fDrawData do begin if currentColor <> clInvalid then thisElement.fSvgReader.currentColor := currentColor; if fillRule <> frNegative then drawDat.fillRule := fillRule; if (fillColor = clCurrent) then drawDat.fillColor := thisElement.fSvgReader.currentColor else if (fillColor <> clInvalid) then drawDat.fillColor := fillColor; if fillOpacity <> InvalidD then drawDat.fillOpacity := fillOpacity; if (fillEl <> '') then drawDat.fillEl := fillEl; if (strokeColor = clCurrent) then drawDat.strokeColor := thisElement.fSvgReader.currentColor else if strokeColor <> clInvalid then drawDat.strokeColor := strokeColor; if strokeOpacity <> InvalidD then drawDat.strokeOpacity := strokeOpacity; if strokeWidth.IsValid then drawDat.strokeWidth := strokeWidth; if strokeCap = esPolygon then drawDat.strokeCap := strokeCap; if strokeJoin <> jsMiter then drawDat.strokeJoin := strokeJoin; if strokeMitLim > 0 then drawDat.strokeMitLim := strokeMitLim; if Assigned(dashArray) then drawDat.dashArray := Copy(dashArray, 0, Length(dashArray)); if dashOffset <> 0 then drawDat.dashOffset := dashOffset; if (strokeEl <> '') then drawDat.strokeEl := strokeEl; if (clipElRef <> '') then drawDat.clipElRef := clipElRef; if (maskElRef <> '') then drawDat.maskElRef := maskElRef; if (filterElRef <> '') then drawDat.filterElRef := filterElRef; if not IsIdentityMatrix(matrix) then MatrixMultiply2(matrix, drawDat.matrix); end; end; //------------------------------------------------------------------------------ procedure UpdateFontInfo(var drawDat: TDrawData; thisElement: TBaseElement); begin with thisElement.fDrawData do begin if fontInfo.family <> tfUnknown then begin drawDat.fontInfo.family := fontInfo.family; drawDat.fontInfo.familyNames := nil; end; if Assigned(fontInfo.familyNames) then drawDat.fontInfo.familyNames := fontInfo.familyNames; if fontInfo.size > 0 then drawDat.fontInfo.size := fontInfo.size; if fontInfo.spacing <> 0 then drawDat.fontInfo.spacing := fontInfo.spacing; if fontInfo.textLength > 0 then drawDat.fontInfo.textLength := fontInfo.textLength; if (fontInfo.italic <> sfsUndefined) then drawDat.fontInfo.italic := fontInfo.italic; if (fontInfo.weight <> -1) then drawDat.fontInfo.weight := fontInfo.weight; if fontInfo.align <> staUndefined then drawDat.fontInfo.align := fontInfo.align; if fontInfo.spacesInText <> sitUndefined then drawDat.fontInfo.spacesInText := fontInfo.spacesInText; if (thisElement is TTextElement) or (fontInfo.decoration <> fdUndefined) then drawDat.fontInfo.decoration := fontInfo.decoration; if fontInfo.baseShift.IsValid then drawDat.fontInfo.baseShift := fontInfo.baseShift; end; end; //------------------------------------------------------------------------------ function IsFilled(const drawDat: TDrawData): Boolean; begin with drawDat do Result := (fillOpacity <> 0) and ((fillColor <> clNone32) or (fillEl <> '')); end; //------------------------------------------------------------------------------ function IsStroked(const drawDat: TDrawData): Boolean; begin with drawDat do if (strokeOpacity = 0) then Result := false else if (strokeEl = '') and ((strokeColor = clNone32) or (strokeColor = clInvalid)) then Result := false else Result := ((strokeWidth.rawVal = InvalidD) or (strokeWidth.rawVal > 0)); end; //------------------------------------------------------------------------------ function MergeColorAndOpacity(color: TColor32; opacity: double): TColor32; begin if (opacity < 0) or (opacity >= 1.0) then Result := color or $FF000000 else if opacity = 0 then Result := clNone32 else Result := (color and $FFFFFF) + Round(opacity * 255) shl 24; end; //------------------------------------------------------------------------------ function UTF8StringToFloat(const ansiValue: UTF8String; out value: double): Boolean; var c: PUTF8Char; begin c := PUTF8Char(ansiValue); Result := ParseNextNum(c, c + Length(ansiValue), false, value); end; //------------------------------------------------------------------------------ function UTF8StringToFloatEx(const ansiValue: UTF8String; var value: double; out measureUnit: TUnitType): Boolean; var c: PUTF8Char; begin c := PUTF8Char(ansiValue); Result := ParseNextNumEx(c, c + Length(ansiValue), false, value, measureUnit); end; //------------------------------------------------------------------------------ procedure UTF8StringToOpacity(const ansiValue: UTF8String; var color: TColor32); var opacity: double; begin if color = clNone32 then begin color := clAlphaSet; Exit; end; if color = clInvalid then color := clNone32; if not UTF8StringToFloat(ansiValue, opacity) then Exit; with TARGB(color) do if (opacity <= 0) then begin if Color = clNone32 then Color := clAlphaSet else A := 0; end else if (opacity >= 1) then A := 255 else A := Round(255 * opacity); end; //------------------------------------------------------------------------------ // Note: This MatrixApply() is a function, whereas in Img32.Transform it's a procedure. function MatrixApply(const paths: TPathsD; const matrix: TMatrixD): TPathsD; overload; var i,j,len,len2: integer; pp,rr: PPointD; begin if not Assigned(paths) then Result := nil else if IsIdentityMatrix(matrix) then Result := CopyPaths(paths) else begin len := Length(paths); SetLength(Result, len); for i := 0 to len -1 do begin len2 := Length(paths[i]); NewPointDArray(Result[i], len2, True); if len2 = 0 then Continue; pp := @paths[i][0]; rr := @Result[i][0]; for j := 0 to High(paths[i]) do begin rr.X := pp.X * matrix[0, 0] + pp.Y * matrix[1, 0] + matrix[2, 0]; rr.Y := pp.X * matrix[0, 1] + pp.Y * matrix[1, 1] + matrix[2, 1]; inc(pp); inc(rr); end; end; end; end; //------------------------------------------------------------------------------ function FixSpaces(const text: UnicodeString; trimLeadingSpace: Boolean): UnicodeString; var i,j, len: integer; begin //changes \r\n\t chars to spaces //and trims consecutive spaces len := Length(text); SetLength(Result, len); if len = 0 then Exit; if trimLeadingSpace then begin i := 1; while (i <= len) and (text[i] <= #32) do inc(i); if i > len then begin Result := ''; Exit; end; Result[1] := text[i]; inc(i); end else begin // allow a single leading space char if text[1] <= #32 then Result[1] := #32 else Result[1] := text[1]; i := 2; end; j := 1; for i := i to len do begin if (text[i] <= #32) then begin if (Result[j] = #32) then Continue; inc(j); Result[j] := #32; end else begin inc(j); Result[j] := text[i]; end; end; SetLength(Result, j); end; //------------------------------------------------------------------------------ function IsBlankText(const text: UnicodeString): Boolean; var i: integer; begin Result := false; for i := 1 to Length(text) do if (text[i] > #32) and (text[i] <> #160) then Exit; Result := true; end; //------------------------------------------------------------------------------ function SvgTextAlignToTextAlign(svgAlign: TSvgTextAlign): TTextAlign; begin case svgAlign of staCenter: Result := taCenter; staRight: Result := taRight; staJustify: Result := taJustify; else Result := taLeft; end; end; //------------------------------------------------------------------------------ // TSvgIdNameHashMap //------------------------------------------------------------------------------ procedure TSvgIdNameHashMap.Grow; var Len, I: Integer; Index: Integer; begin Len := Length(FItems); if Len < 5 then Len := 5 else Len := Len * 2; SetLength(FItems, Len); FMod := Cardinal(Len); if not Odd(FMod) then Inc(FMod); SetLengthUninit(FBuckets, FMod); FillChar(FBuckets[0], FMod * SizeOf(FBuckets[0]), $FF); // Rehash for I := 0 to FCount - 1 do begin Index := (FItems[I].Hash and $7FFFFFFF) mod FMod; FItems[I].Next := FBuckets[Index]; FBuckets[Index] := I; end; end; //------------------------------------------------------------------------------ function TSvgIdNameHashMap.FindItemIndex(const Name: UTF8String): Integer; var hash: Cardinal; begin Result := -1; if FMod = 0 then Exit; Hash := GetHash(Name); Result := FBuckets[(Hash and $7FFFFFFF) mod FMod]; while (Result <> -1) and ((FItems[Result].Hash <> Hash) or not IsSameUTF8String(FItems[Result].Name, Name)) do Result := FItems[Result].Next; end; //------------------------------------------------------------------------------ procedure TSvgIdNameHashMap.AddOrIgnore(const idName: UTF8String; element: TBaseElement); var Index: Integer; Hash: Cardinal; Item: PSvgIdNameHashMapItem; Bucket: PInteger; begin Index := FindItemIndex(idName); if Index >= 0 then Exit; // already exists so ignore; // add new item if FCount = Length(FItems) then Grow; Index := FCount; Inc(FCount); Hash := GetHash(idName); Bucket := @FBuckets[(Hash and $7FFFFFFF) mod FMod]; Item := @FItems[Index]; Item.Next := Bucket^; Item.Hash := Hash; Item.Name := idName; Item.Element := element; Bucket^ := Index; end; //------------------------------------------------------------------------------ function TSvgIdNameHashMap.FindElement(const idName: UTF8String): TBaseElement; var Index: Integer; begin if FCount = 0 then Result := nil else begin Index := FindItemIndex(idName); if Index < 0 then Result := nil else Result := FItems[Index].Element end; end; //------------------------------------------------------------------------------ procedure TSvgIdNameHashMap.Clear; begin FCount := 0; FMod := 0; FItems := nil; FBuckets := nil; end; //------------------------------------------------------------------------------ // TDefsElement //------------------------------------------------------------------------------ constructor TDefsElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fDrawData.visible := false; end; //------------------------------------------------------------------------------ // TStyleElement //------------------------------------------------------------------------------ constructor TStyleElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fDrawData.visible := false; // See ParseStyleElementContent in Img32.Core. end; //------------------------------------------------------------------------------ // TImageElement //------------------------------------------------------------------------------ function TrimAnySpaces(const s: UTF8String): UTF8String; var i, j, len: integer; dst: PUTF8Char; begin len := Length(s); SetLength(Result, len); dst := PUTF8Char(Pointer(Result)); j := 0; for i := 1 to len do if s[i] > #32 then begin dst[j] := s[i]; inc(j); end; if j <> len then SetLength(Result, j); end; //------------------------------------------------------------------------------ procedure ReadRefElImage(const refEl: UTF8String; out img: TImage32); var len, offset: integer; s: UTF8String; ms: TMemoryStream; c: PUTF8Char; begin img := nil; // unfortunately white spaces are sometimes found inside encoded base64 s := TrimAnySpaces(refEl); len := Length(s); // currently only accepts **embedded** images if (len = 0) then Exit; c := PUTF8Char(s); if not Match(c, 'data:image/') then Exit; if Match(@c[11], 'jpg;base64,') then offset := 22 else if Match(@c[11], 'jpeg;base64,') then offset := 23 else if Match(@c[11], 'png;base64,') then offset := 22 else Exit; ms := TMemoryStream.Create; try if not Base64Decode(@c[offset], len -offset, ms) then Exit; img := TImage32.Create; if not img.LoadFromStream(ms) then begin FreeAndNil(img); Exit; end; finally ms.Free; end; end; //------------------------------------------------------------------------------ // TImageElement //------------------------------------------------------------------------------ destructor TImageElement.Destroy; begin if Assigned(fImage) then fImage.Free; inherited Destroy; end; //------------------------------------------------------------------------------ procedure TImageElement.Draw(image: TImage32; drawDat: TDrawData); var dstRecD: TRectD; tmp: TImage32; tmpScale: TPointD; begin dstRecD := Self.elRectWH.GetRectD(0,0); MatrixMultiply2(fDrawData.matrix, drawDat.matrix); MatrixApply(drawDat.matrix, dstRecD); if (fRefEl <> '') and not Assigned(fImage) then begin ReadRefElImage(fRefEl, fImage); if Assigned(fImage) then begin fRefEl := ''; // ie avoid reloading fImage fTransparent := fImage.HasTransparency; end; end; if fImage <> nil then begin if elRectWH.IsValid then begin tmpScale.X := elRectWH.width.rawVal / fImage.Width; tmpScale.Y := elRectWH.Height.rawVal / fImage.Height; MatrixScale(drawDat.matrix, tmpScale.X, tmpScale.Y); end; tmp := TImage32.Create(); try tmp.AssignSettings(fImage); MatrixApply(drawDat.matrix, fImage, tmp); // CopyBlend is slower than Copy, so only use it if we have a // transparent image. if fTransparent then image.CopyBlend(tmp, tmp.Bounds, Rect(dstRecD), BlendToAlphaLine) else image.Copy(tmp, tmp.Bounds, Rect(dstRecD)); finally tmp.Free; end; end; end; //------------------------------------------------------------------------------ // TGroupElement //------------------------------------------------------------------------------ procedure TGroupElement.Draw(image: TImage32; drawDat: TDrawData); var clipEl : TClipPathElement; maskEl : TMaskElement; tmpImg : TImage32; clipPaths : TPathsD; clipRec : TRect; dstClipRec: TRect; offsetX, offsetY: integer; fr: TFillRule; begin if fChilds.Count = 0 then Exit; UpdateDrawInfo(drawDat, self); UpdateFontInfo(drawDat, self); if drawDat.fillRule = frNegative then drawDat.fillRule := frNonZero; maskEl := TMaskElement(FindRefElement(drawDat.maskElRef)); clipEl := TClipPathElement(FindRefElement(drawDat.clipElRef)); if Assigned(clipEl) then begin drawDat.clipElRef := ''; with clipEl do begin GetPaths(drawDat); clipPaths := CopyPaths(drawPathsC); AppendPath(clipPaths, drawPathsO); MatrixApply(drawDat.matrix, clipPaths); clipRec := Img32.Vector.GetBounds(clipPaths); end; if IsEmptyRect(clipRec) then Exit; dstClipRec := clipRec; // save for blending tmpImg to image // Translate the clipPaths, clipRec and matrix // to minimize the size of the mask image. offsetX := clipRec.Left; offsetY := clipRec.Top; if offsetX < 0 then offsetX := 0; if offsetY < 0 then offsetY := 0; if (offsetX > 0) or (offsetY > 0) then begin MatrixTranslate(drawDat.matrix, -offsetX, -offsetY); // for DrawChildren clipPaths := TranslatePath(clipPaths, -offsetX, -offsetY); TranslateRect(clipRec, -offsetX, -offsetY); end; //nb: it's not safe to use fReader.TempImage when calling DrawChildren tmpImg := TImage32.Create(Min(image.Width, clipRec.Right), Min(image.Height, clipRec.Bottom)); try DrawChildren(tmpImg, drawDat); if clipEl.fDrawData.fillRule = frNegative then fr := frNonZero else fr := clipEl.fDrawData.fillRule; EraseOutsidePaths(tmpImg, clipPaths, fr, clipRec, fSvgReader.fCustomRendererCache); image.CopyBlend(tmpImg, clipRec, dstClipRec, BlendToAlphaLine); finally tmpImg.Free; end; end else if Assigned(maskEl) then begin drawDat.maskElRef := ''; with maskEl do begin GetPaths(drawDat); clipRec := maskRec; end; // Translate the maskRec, the matix and the clipRec to minimize // the size of the mask image. dstClipRec := clipRec; // save for blending tmpImg to image offsetX := -clipRec.Left; offsetY := -clipRec.Top; if offsetX > 0 then offsetX := 0; if offsetY > 0 then offsetY := 0; if (offsetX < 0) or (offsetY < 0) then begin MatrixTranslate(drawDat.matrix, offsetX, offsetY); // for DrawChildren TranslateRect(clipRec, offsetX, offsetY); TranslateRect(maskEl.maskRec, offsetX, offsetY); end; tmpImg := TImage32.Create(Min(image.Width, clipRec.Right), Min(image.Height, clipRec.Bottom)); try DrawChildren(tmpImg, drawDat); TMaskElement(maskEl).ApplyMask(tmpImg, drawDat); image.CopyBlend(tmpImg, clipRec, dstClipRec, BlendToAlphaLine); finally tmpImg.Free; end; end else DrawChildren(image, drawDat); end; //------------------------------------------------------------------------------ // TSwitchElement //------------------------------------------------------------------------------ procedure TSwitchElement.Draw(image: TImage32; drawDat: TDrawData); var i: integer; begin for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TShapeElement then with TShapeElement(fChilds[i]) do if fDrawData.visible then begin Draw(image, drawDat); break; //break after the first successful drawing end; end; //------------------------------------------------------------------------------ // TUseElement //------------------------------------------------------------------------------ procedure TUseElement.GetPaths(const drawDat: TDrawData); var el: TBaseElement; dx, dy: double; begin if pathsLoaded or (fRefEl = '') then Exit; el := FindRefElement(fRefEl); if not Assigned(el) or not (el is TShapeElement) then Exit; pathsLoaded := true; with TShapeElement(el) do begin GetPaths(drawDat); self.drawPathsC := CopyPaths(drawPathsC); self.drawPathsO := CopyPaths(drawPathsO); end; if elRectWH.left.IsValid then dx := elRectWH.left.rawVal else dx := 0; if elRectWH.top.IsValid then dy := elRectWH.top.rawVal else dy := 0; if (dx <> 0) or (dy <> 0) then begin drawPathsC := TranslatePath(drawPathsC, dx, dy); drawPathsO := TranslatePath(drawPathsO, dx, dy); end; end; //------------------------------------------------------------------------------ function TUseElement.ValidateNonRecursion(el: TBaseElement): Boolean; begin Result := false; while assigned(el) do begin if (el = Self) then Exit; if not (el is TUseElement) then break; //shouldn't happen el := TUseElement(el).callerUse; end; Result := true; end; //------------------------------------------------------------------------------ procedure TUseElement.Draw(img: TImage32; drawDat: TDrawData); var el: TBaseElement; s, dx, dy: double; scale, scale2: TPointD; mat: TMatrixD; begin //make sure there's not recursion, either directly or indirectly if not ValidateNonRecursion(drawDat.useEl) then Exit; callerUse := drawDat.useEl; drawDat.useEl := self; el := FindRefElement(fRefEl); if not Assigned(el) then Exit; UpdateDrawInfo(drawDat, self); //nb: attribs override el's. MatrixExtractScale(drawDat.matrix, scale.X, scale.Y); if elRectWH.left.IsValid then dx := elRectWH.left.rawVal else dx := 0; if elRectWH.top.IsValid then dy := elRectWH.top.rawVal else dy := 0; if (dx <> 0) or (dy <> 0) then begin mat := IdentityMatrix; MatrixTranslate(mat, dx, dy); MatrixMultiply2(mat, drawDat.matrix); end; if el is TSymbolElement then begin with TSymbolElement(el) do begin if not viewboxWH.IsEmpty then begin //scale the symbol according to its width and height attributes if elRectWH.width.IsValid and elRectWH.height.IsValid then begin scale2.X := elRectWH.width.rawVal / viewboxWH.Width; scale2.Y := elRectWH.height.rawVal / viewboxWH.Height; if scale2.Y < scale2.X then s := scale2.Y else s := scale2.X; //the following 3 lines will scale without translating mat := IdentityMatrix; MatrixScale(mat, s, s); MatrixMultiply2(mat, drawDat.matrix); drawDat.bounds := RectD(0,0,viewboxWH.Width, viewboxWH.Height); end; if self.elRectWH.width.IsValid and self.elRectWH.height.IsValid then begin with viewboxWH do begin dx := -Left/Width * self.elRectWH.width.rawVal; dy := -Top/Height * self.elRectWH.height.rawVal; //scale proportionally to fill the element scale2.X := self.elRectWH.width.rawVal / Width; scale2.Y := self.elRectWH.height.rawVal / Height; if scale2.Y < scale2.X then s := scale2.Y else s := scale2.X; end; mat := IdentityMatrix; MatrixScale(mat, s, s); MatrixTranslate(mat, dx, dy); MatrixMultiply2(mat, drawDat.matrix); //now center after scaling if scale2.X > scale2.Y then begin if scale2.X > 1 then begin s := (self.elRectWH.width.rawVal - viewboxWH.Width) * 0.5; MatrixTranslate(drawDat.matrix, s * scale.X, 0); end; end else if scale2.Y > 1 then begin s := (self.elRectWH.height.rawVal - viewboxWH.Height) * 0.5; MatrixTranslate(drawDat.matrix, 0, s * scale.Y); end; end; end; DrawChildren(img, drawDat); end; end else if el is TImageElement then el.Draw(img, drawDat) else if el is TShapeElement then el.Draw(img, drawDat); end; //------------------------------------------------------------------------------ // TMaskElement //------------------------------------------------------------------------------ procedure TMaskElement.GetPaths(const drawDat: TDrawData); var i : integer; el : TShapeElement; begin maskRec := NullRect; for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TShapeElement then begin el := TShapeElement(fChilds[i]); el.GetPaths(drawDat); maskRec := Img32.Vector.UnionRect(maskRec, Img32.Vector.GetBounds(el.drawPathsC)); Img32.Vector.UnionRect(maskRec, Img32.Vector.GetBounds(el.drawPathsO)); end; MatrixApply(drawDat.matrix, maskRec); end; //------------------------------------------------------------------------------ procedure TMaskElement.ApplyMask(img: TImage32; const drawDat: TDrawData); var tmpImg: TImage32; begin tmpImg := TImage32.Create(Min(img.Width, maskRec.Right), Min(img.Height, maskRec.Bottom)); try DrawChildren(tmpImg, drawDat); img.CopyBlend(tmpImg, maskRec, maskRec, BlendBlueChannelLine); finally tmpImg.Free; end; end; //------------------------------------------------------------------------------ // TSymbolElement //------------------------------------------------------------------------------ constructor TSymbolElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fDrawData.visible := false; end; //------------------------------------------------------------------------------ // TGradElement //------------------------------------------------------------------------------ function TGradientElement.LoadContent: Boolean; var i: integer; begin Result := inherited LoadContent; for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TGradStopElement then with TGradStopElement(fChilds[i]) do AddStop(color, offset); end; //------------------------------------------------------------------------------ procedure TGradientElement.AddStop(color: TColor32; offset: double); var len: integer; begin //if a stop is less than previous stops, it is set equal to the largest stop. //If two stops are equal the last stop controls the color from that point. len := Length(stops); if (len > 0) and (stops[len-1].offset > offset) then offset := stops[len-1].offset; setLength(stops, len+1); stops[len].offset := Min(1,Max(0, offset)); stops[len].color := color; end; //------------------------------------------------------------------------------ procedure TGradientElement.AssignTo(other: TBaseElement); var i, len: integer; begin if not Assigned(other) or not (other is TGradientElement) then Exit; inherited; with TGradientElement(other) do begin if units = 0 then units := Self.units; if Length(stops) = 0 then begin len := Length(self.stops); SetLength(stops, len); for i := 0 to len -1 do stops[i] := Self.stops[i]; end; if IsIdentityMatrix(fDrawData.matrix) then fDrawData.matrix := self.fDrawData.matrix; end; end; //------------------------------------------------------------------------------ function TGradientElement.PrepareRenderer( renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; var el: TBaseElement; begin if (refEl <> '') then begin el := FindRefElement(refEl); if Assigned(el) and (el is TGradientElement) then TGradientElement(el).AssignTo(self); end; Result := Length(stops) > 0; end; //------------------------------------------------------------------------------ procedure TGradientElement.AddColorStopsToRenderer(renderer: TCustomGradientRenderer); var i, hiStops: Integer; begin hiStops := High(stops); if (hiStops = 0) or (renderer = nil) then Exit; // If vector boundary-stops are implicit, then boundary // and adjacent inner stop (explicit) should have the // same color if stops[0].offset > 0 then with stops[0] do renderer.InsertColorStop(offset, color); for i := 1 to hiStops -1 do with stops[i] do renderer.InsertColorStop(offset, color); // If vector boundary-stops are implicit, then boundary // and adjacent inner stop (explicit) should have the // same color if stops[hiStops].offset < 1 then with stops[hiStops] do renderer.InsertColorStop(offset, color); end; //------------------------------------------------------------------------------ // TRadGradElement //------------------------------------------------------------------------------ constructor TRadGradElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; radius.Init; F.Init; C.Init; end; //------------------------------------------------------------------------------ procedure TRadGradElement.AssignTo(other: TBaseElement); begin if not Assigned(other) or not (other is TGradientElement) then Exit; inherited; if other is TRadGradElement then with TRadGradElement(other) do begin if not radius.IsValid then radius := self.radius; if not C.IsValid then C := self.C; if not F.IsValid then F := self.F; end; end; //------------------------------------------------------------------------------ function TRadGradElement.PrepareRenderer(renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; var hiStops: integer; cp, fp, r: TPointD; scale, scale2: TPointD; rec2, rec3: TRectD; begin inherited PrepareRenderer(renderer, drawDat); hiStops := High(stops); Result := hiStops >= 0; if not Result then Exit; if units = hUserSpaceOnUse then rec2 := fSvgReader.userSpaceBounds else rec2 := drawDat.bounds; if radius.IsValid then begin if radius.X.HasFontUnits then r := radius.GetPoint(drawDat.fontInfo.size, GetRelFracLimit) else r := radius.GetPoint(rec2, GetRelFracLimit); end else begin r.X := rec2.Width * 0.5; r.Y := rec2.Height * 0.5; end; MatrixExtractScale(drawDat.matrix, scale.X, scale.Y); MatrixExtractScale(fDrawData.matrix, scale2.X, scale2.Y); r := ScalePoint(r, scale.X * scale2.X, scale.Y * scale2.Y); if C.IsValid then begin if C.X.HasFontUnits then cp := C.GetPoint(drawDat.fontInfo.size, GetRelFracLimit) else cp := C.GetPoint(rec2, GetRelFracLimit); cp := TranslatePoint(cp, rec2.Left, rec2.Top); end else cp := rec2.MidPoint; MatrixApply(fDrawData.matrix, cp); MatrixApply(drawDat.matrix, cp); rec3 := RectD(cp.X-r.X, cp.Y-r.Y, cp.X+r.X, cp.Y+r.Y); if F.IsValid then begin if F.X.HasFontUnits then fp := F.GetPoint(drawDat.fontInfo.size, GetRelFracLimit) else fp := F.GetPoint(rec2, GetRelFracLimit); fp := TranslatePoint(fp, rec2.Left, rec2.Top); MatrixApply(fDrawData.matrix, fp); MatrixApply(drawDat.matrix, fp); end else fp := MidPoint(rec3); with renderer as TSvgRadialGradientRenderer do begin SetParameters(Rect(rec3), Point(fp), stops[0].color, stops[hiStops].color, spreadMethod); AddColorStopsToRenderer(renderer); end; end; //------------------------------------------------------------------------------ // TLinGradElement //------------------------------------------------------------------------------ constructor TLinGradElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; startPt.Init; endPt.Init; end; //------------------------------------------------------------------------------ procedure TLinGradElement.AssignTo(other: TBaseElement); begin if not Assigned(other) or not (other is TGradientElement) then Exit; inherited; if other is TLinGradElement then with TLinGradElement(other) do begin if not startPt.IsValid then startPt := self.startPt; if not endPt.IsValid then endPt := self.endPt; end; end; //------------------------------------------------------------------------------ function TLinGradElement.PrepareRenderer( renderer: TCustomGradientRenderer; drawDat: TDrawData): Boolean; var pt1, pt2: TPointD; hiStops: integer; rec2: TRectD; begin inherited PrepareRenderer(renderer, drawDat); hiStops := High(stops); Result := (hiStops >= 0); if not Result then Exit; //w3c-coords-units-01-b.svg //if gradientUnits=objectBoundingBox (default) then all values must be //percentages. Also... when the object's bounding box is not square, the //gradient may render non-perpendicular relative to the gradient vector //unless the gradient vector is vertical or horizontal. //https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientUnits if units = hUserSpaceOnUse then rec2 := fSvgReader.userSpaceBounds else rec2 := drawDat.bounds; with TLinearGradientRenderer(renderer) do begin if startPt.X.HasFontUnits then pt1 := startPt.GetPoint(drawDat.fontInfo.size, GetRelFracLimit) else pt1 := startPt.GetPoint(rec2, GetRelFracLimit); if (startPt.X.unitType <> utPixel) or (units <> hUserSpaceOnUse) then pt1.X := pt1.X + rec2.Left; if (startPt.Y.unitType <> utPixel) or (units <> hUserSpaceOnUse) then pt1.Y := pt1.Y + rec2.Top; MatrixApply(fDrawData.matrix, pt1); MatrixApply(drawDat.matrix, pt1); if not endPt.X.IsValid then pt2.X := rec2.Width else pt2.X := endPt.X.GetValue(rec2.Width, GetRelFracLimit); pt2.Y := endPt.Y.GetValue(rec2.Height, GetRelFracLimit); pt2 := TranslatePoint(pt2, rec2.Left, rec2.Top); MatrixApply(fDrawData.matrix, pt2); MatrixApply(drawDat.matrix, pt2); if (units <> hUserSpaceOnUse) and ((pt2.X <> pt1.X) or (pt2.Y <> pt1.Y)) then begin //skew the gradient end; SetParameters(pt1, pt2, stops[0].color, stops[hiStops].color, spreadMethod); AddColorStopsToRenderer(renderer); end; end; //------------------------------------------------------------------------------ // TGradStopElement //------------------------------------------------------------------------------ constructor TGradStopElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; color := clBlack32; end; //------------------------------------------------------------------------------ // TFilterElement //------------------------------------------------------------------------------ constructor TFilterElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fDrawData.visible := false; elRectWH.Init; end; //------------------------------------------------------------------------------ destructor TFilterElement.Destroy; begin Clear; inherited; end; //------------------------------------------------------------------------------ procedure TFilterElement.Clear; var i: integer; begin for i := 0 to High(fImages) do fImages[i].Free; fImages := nil; fNames := nil; fLastImg := nil; end; //------------------------------------------------------------------------------ function TFilterElement.GetRelFracLimit: double; begin // assume fractional values below 2.5 are always relative Result := 2.5; end; //------------------------------------------------------------------------------ function TFilterElement.GetAdjustedBounds(const bounds: TRectD): TRectD; var recWH: TRectWH; delta: TSizeD; d: double; pt: TPointD; i: integer; hasOffset: Boolean; begin fObjectBounds := Rect(bounds); if elRectWH.IsValid then begin recWH := elRectWH.GetRectWH(bounds, GetRelFracLimit); Result.Left := bounds.Left + recWH.Left; Result.Top := bounds.Top + recWH.Top; Result.Right := Result.Left + recWH.Width; Result.Bottom := Result.Top + recWH.Height; end else begin Result := bounds; //when the filter's width and height are undefined then limit the filter //margin to 20% of the bounds when just blurring, not also offsetting. hasOffset := false; delta.cx := 0; delta.cy := 0; for i := 0 to ChildCount -1 do begin if Child[i] is TFeGaussElement then begin d := TFeGaussElement(Child[i]).stdDev * 3 * fScale; delta.cx := delta.cx + d; delta.cy := delta.cy + d; end else if Child[i] is TFeDropShadowElement then with TFeDropShadowElement(Child[i]) do begin d := stdDev * 0.75 * fScale; pt := offset.GetPoint(bounds, 1); delta.cx := delta.cx + d + Abs(pt.X) * fScale; delta.cy := delta.cy + d + Abs(pt.Y) * fScale; hasOffset := true; end else if Child[i] is TFeOffsetElement then with TFeOffsetElement(Child[i]) do begin pt := offset.GetPoint(bounds, 1); delta.cx := delta.cx + Abs(pt.X) * fScale; delta.cy := delta.cy + Abs(pt.Y) * fScale; hasOffset := true; end; end; if (delta.cx = InvalidD) or (delta.cy = InvalidD) then Exit; //limit the filter margin to 20% if only blurring if not hasOffset then with delta, bounds do begin if cx > Width * 0.2 then cx := Width * 0.2; if cy > Height * 0.2 then cy := Height * 0.2; end; Img32.Vector.InflateRect(Result, delta.cx, delta.cy); end; end; //------------------------------------------------------------------------------ function TFilterElement.FindNamedImage(const name: UTF8String): TImage32; var i, len: integer; begin Result := nil; len := Length(fNames); for i := 0 to len -1 do if name = fNames[i] then begin Result := fImages[i]; Break; end; end; //------------------------------------------------------------------------------ function TFilterElement.AddNamedImage(const name: UTF8String): TImage32; var len, w, h: integer; begin len := Length(fNames); SetLength(fNames, len+1); SetLength(fImages, len+1); RectWidthHeight(fFilterBounds, w, h); Result := TImage32.Create(w, h); fImages[len] := Result; fNames[len] := name; end; //------------------------------------------------------------------------------ function TFilterElement.GetNamedImage(const name: UTF8String; isIn: Boolean): TImage32; begin Result := FindNamedImage(name); if not Assigned(Result) then Result := AddNamedImage(name) else if not isIn then Exit; case GetHash(name) of hBackgroundImage: Result.Copy(fSvgReader.BackgndImage, fFilterBounds, Result.Bounds); hBackgroundAlpha: begin Result.Copy(fSvgReader.BackgndImage, fFilterBounds, Result.Bounds); Result.SetRGB(clNone32, Result.Bounds); end; hSourceGraphic: Result.Copy(fSrcImg, fFilterBounds, Result.Bounds); hSourceAlpha: begin Result.Copy(fSrcImg, fFilterBounds, Result.Bounds); Result.SetRGB(clBlack32, Result.Bounds); end; end; end; //------------------------------------------------------------------------------ procedure TFilterElement.Apply(img: TImage32; const filterBounds: TRect; const matrix: TMatrixD); var i: integer; begin MatrixExtractScale(matrix, fScale); fFilterBounds := filterBounds; Types.IntersectRect(fObjectBounds, fObjectBounds, img.Bounds); fSrcImg := img; try for i := 0 to fChilds.Count -1 do begin case TBaseElement(fChilds[i]).fXmlEl.hash of hfeBlend : TFeBlendElement(fChilds[i]).Apply; hfeColorMatrix : TFeColorMatrixElement(fChilds[i]).Apply; hFeComponentTransfer : TFeComponentTransferElement(fChilds[i]).Apply; hfeComposite : TFeCompositeElement(fChilds[i]).Apply; hfeDefuseLighting : TFeDefuseLightElement(fChilds[i]).Apply; hfeDropShadow : TFeDropShadowElement(fChilds[i]).Apply; hfeFlood : TFeFloodElement(fChilds[i]).Apply; hfeImage : TFeImageElement(fChilds[i]).Apply; hFeGaussianBlur : TFeGaussElement(fChilds[i]).Apply; hfeMerge : TFeMergeElement(fChilds[i]).Apply; hfeOffset : TFeOffsetElement(fChilds[i]).Apply; hfeSpecularLighting : TFeSpecLightElement(fChilds[i]).Apply; end; end; if Assigned(fLastImg) then fSrcImg.Copy(fLastImg, fLastImg.Bounds, fFilterBounds); finally Clear; end; end; //------------------------------------------------------------------------------ // TFeBaseElement //------------------------------------------------------------------------------ function TFeBaseElement.GetParentAsFilterEl: TFilterElement; var el: TBaseElement; begin el := fParent; while Assigned(el) and not (el is TFilterElement) do el := el.fParent; if not Assigned(el) then Result := nil else Result := TFilterElement(el); end; //------------------------------------------------------------------------------ function TFeBaseElement.GetBounds(img: TImage32): TRect; var pfe: TFilterElement; begin pfe := ParentFilterEl; if img = pfe.fSrcImg then Result := pfe.fFilterBounds else Result := img.Bounds; end; //------------------------------------------------------------------------------ function TFeBaseElement.GetSrcAndDst: Boolean; var pfe: TFilterElement; begin pfe := ParentFilterEl; if (in1 <> '') then srcImg := pfe.GetNamedImage(in1, true) else if Assigned(pfe.fLastImg) then srcImg := pfe.fLastImg else srcImg := pfe.GetNamedImage(SourceImage, false); if (res <> '') then dstImg := pfe.GetNamedImage(res, false) else dstImg := pfe.GetNamedImage(SourceImage, false); Result := Assigned(srcImg) and Assigned(dstImg); if not Result then Exit; pfe.fLastImg := dstImg; srcRec := GetBounds(srcImg); dstRec := GetBounds(dstImg); end; //------------------------------------------------------------------------------ // TFeBlendElement //------------------------------------------------------------------------------ procedure TFeBlendElement.Apply; var pfe: TFilterElement; srcImg2, dstImg2: TImage32; srcRec2, dstRec2: TRect; begin if not GetSrcAndDst then Exit; pfe := ParentFilterEl; if (in2 = '') then Exit; if dstImg = srcImg then dstImg2 := pfe.AddNamedImage(tmpFilterImg) else dstImg2 := dstImg; dstRec2 := GetBounds(dstImg2); srcImg2 := pfe.GetNamedImage(in2, true); srcRec2 := GetBounds(srcImg2); dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendToAlphaLine); dstImg2.CopyBlend(srcImg, srcRec, dstRec2, BlendToAlphaLine); if dstImg = srcImg then dstImg.Copy(dstImg2, dstRec2, dstRec); end; //------------------------------------------------------------------------------ // TFeImageElement //------------------------------------------------------------------------------ destructor TFeImageElement.Destroy; begin fImage.Free; inherited Destroy; end; //------------------------------------------------------------------------------ procedure TFeImageElement.Apply; begin if GetSrcAndDst then begin if refEl <> '' then ReadRefElImage(refEl, fImage); // also clears refEl if fImage <> nil then dstImg.Copy(fImage, fImage.Bounds, dstRec); end; end; //------------------------------------------------------------------------------ // TFeCompositeElement //------------------------------------------------------------------------------ constructor TFeCompositeElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fourKs[0] := InvalidD; fourKs[1] := InvalidD; fourKs[2] := InvalidD; fourKs[3] := InvalidD; end; //------------------------------------------------------------------------------ procedure Arithmetic(p1, p2, r: PColor32; const ks: array of byte); var c1 : PARGB absolute p1; c2 : PARGB absolute p2; res : PARGB absolute r; begin res.A := (((c1.A xor 255) * (c2.A xor 255)) shr 8) xor 255; res.R := ClampByte((ks[0] * c1.R * c2.R + ks[1] * c1.R * 255 + ks[2] * c2.R * 255 + ks[3] * 65025) shr 16); res.G := ClampByte((ks[0] * c1.G * c2.G + ks[1] * c1.G * 255 + ks[2] * c2.G * 255 + ks[3] * 65025) shr 16); res.B := ClampByte((ks[0] * c1.B * c2.B + ks[1] * c1.B * 255 + ks[2] * c2.B * 255 + ks[3] * 65025) shr 16); end; //------------------------------------------------------------------------------ procedure ArithmeticBlend(src1, src2, dst: TImage32; const recS1, recS2, recDst: TRect; const ks: TFourDoubles); var kk: array[0..3] of byte; w,h, w2,h2, w3,h3, i,j: integer; p1,p2,r: PColor32; begin RectWidthHeight(recS1, w, h); RectWidthHeight(recS2, w2, h2); RectWidthHeight(recDst, w3, h3); if (w2 <> w) or (w3 <> w) or (h2 <> h) or (h3 <> h) or (ks[0] = InvalidD) or (ks[1] = InvalidD) or (ks[2] = InvalidD) or (ks[3] = InvalidD) then Exit; for i := 0 to 3 do kk[i] := ClampByte(ks[i]*255); for i := 0 to h -1 do begin p1 := @src1.Pixels[(recS1.Top + i) * src1.Width + recS1.Left]; p2 := @src2.Pixels[(recS2.Top + i) * src2.Width + recS2.Left]; r := @dst.Pixels[(recDst.Top + i) * dst.Width + recDst.Left]; for j := 0 to w -1 do begin Arithmetic(p1, p2, r, kk); inc(p1); inc(p2); inc(r); end; end; end; //------------------------------------------------------------------------------ procedure TFeCompositeElement.Apply; var pfe: TFilterElement; srcImg2, dstImg2: TImage32; srcRec2, dstRec2: TRect; begin if not GetSrcAndDst then Exit; pfe := ParentFilterEl; if (in2 = '') then Exit; srcImg2 := pfe.GetNamedImage(in2, true); srcRec2 := GetBounds(srcImg2); //either filter bounds or image bounds if (dstImg = srcImg) or (dstImg = srcImg2) then dstImg2 := pfe.AddNamedImage(tmpFilterImg) else dstImg2 := dstImg; dstRec2 := GetBounds(dstImg2); //either filter bounds or image bounds case compositeOp of coIn: begin dstImg2.Copy(srcImg, srcRec, dstRec2); dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendMaskLine); end; coOut: begin dstImg2.Copy(srcImg, srcRec, dstRec2); dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendInvertedMaskLine); end; coAtop: begin dstImg2.Copy(srcImg2, srcRec2, dstRec2); dstImg2.CopyBlend(srcImg, srcRec, dstRec2, BlendToAlphaLine); dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendMaskLine); end; coXOR: begin dstImg2.Copy(srcImg2, srcRec2, dstRec2); dstImg2.CopyBlend(srcImg, srcRec, dstRec2, BlendToAlphaLine); dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendInvertedMaskLine); end; coArithmetic: begin ArithmeticBlend(srcImg, srcImg2, dstImg2, srcRec, srcRec2, dstRec2, fourKs); end; else //coOver begin dstImg2.CopyBlend(srcImg2, srcRec2, dstRec2, BlendToAlphaLine); dstImg2.CopyBlend(srcImg, srcRec, dstRec2, BlendToAlphaLine); end; end; if (dstImg <> dstImg2) then dstImg.Copy(dstImg2, dstRec2, dstRec); end; //------------------------------------------------------------------------------ // TFeColorMatrixElement //------------------------------------------------------------------------------ type TColorMatrix = array[0..19] of Byte; function ApplyColorMatrix(color: TColor32; const mat: TColorMatrix): TColor32; var clrIn : TARGB absolute color; clrOut: TARGB absolute Result; begin clrOut.R := ClampByte(MulBytes(mat[0],clrIn.R) + MulBytes(mat[1],clrIn.G) + MulBytes(mat[2],clrIn.B) + MulBytes(mat[3],clrIn.A) + mat[4]); clrOut.G := ClampByte(MulBytes(mat[5],clrIn.R) + MulBytes(mat[6],clrIn.G) + MulBytes(mat[7],clrIn.B) + MulBytes(mat[8],clrIn.A) + mat[9]); clrOut.B := ClampByte(MulBytes(mat[10],clrIn.R) + MulBytes(mat[11],clrIn.G) + MulBytes(mat[12],clrIn.B) + MulBytes(mat[13],clrIn.A) + mat[14]); clrOut.A := ClampByte(MulBytes(mat[15],clrIn.R) + MulBytes(mat[16],clrIn.G) + MulBytes(mat[17],clrIn.B) + MulBytes(mat[18],clrIn.A) + mat[19]); end; //------------------------------------------------------------------------------ procedure TFeColorMatrixElement.Apply; var i,j, dx1,dx2: integer; colorMatrix: TColorMatrix; p1, p2: PColor32; begin if not GetSrcAndDst or not Assigned(values) then Exit; for i := 0 to 19 do colorMatrix[i] := ClampByte(Integer(Round(values[i]*255))); dx1 := srcImg.Width - RectWidth(srcRec); dx2 := dstImg.Width - RectWidth(dstRec); p1 := @srcImg.Pixels[srcRec.Top * srcImg.Width + srcRec.Left]; p2 := @dstImg.Pixels[dstRec.Top * dstImg.Width + dstRec.Left]; for i := srcRec.Top to srcRec.Bottom -1 do begin for j := srcRec.Left to srcRec.Right -1 do begin p2^ := ApplyColorMatrix(p1^, colorMatrix); inc(p1); inc(p2); end; inc(p1, dx1); inc(p2, dx2); end; end; //------------------------------------------------------------------------------ // TFeComponentTransferElement //------------------------------------------------------------------------------ procedure TFeComponentTransferElement.Apply; var i,j,k, dx1,dx2: integer; d: double; rangeSize: integer; p1: PColor32; p2: PARGB; childFuncs: array[0..3] of TFeComponentTransferChild; begin if not GetSrcAndDst or (ChildCount = 0) then Exit; for i := 0 to 3 do childFuncs[i] := nil; for i := 0 to ChildCount -1 do begin if Child[i] is TFeFuncBElement then childFuncs[0] := TFeFuncBElement(Child[i]) else if Child[i] is TFeFuncGElement then childFuncs[1] := TFeFuncGElement(Child[i]) else if Child[i] is TFeFuncRElement then childFuncs[2] := TFeFuncRElement(Child[i]) else if Child[i] is TFeFuncAElement then childFuncs[3] := TFeFuncAElement(Child[i]); end; // build each childFuncs' bytes array for k := 0 to 3 do with childFuncs[k] do begin if not Assigned(childFuncs[k]) then Continue; case funcType of ftDiscrete: begin if Length(tableValues) = 0 then Continue; SetLength(bytes, 256); rangeSize := 256 div Length(tableValues); for i:= 0 to High(tableValues) do for j:= 0 to rangeSize -1 do bytes[i*rangeSize + j] := ClampByte(tableValues[i] * 255); end; ftTable: begin if Length(tableValues) < 2 then Continue; SetLength(bytes, 256); rangeSize := 256 div (Length(tableValues) -1); for i:= 0 to High(tableValues) -1 do begin intercept := tableValues[i]; slope := (tableValues[i+1] - intercept) / rangeSize; for j:= 0 to rangeSize -1 do bytes[i*rangeSize + j] := ClampByte((j * slope + intercept) * 255); end; end; ftLinear: begin SetLength(bytes, 256); d := intercept * 255; for i:= 0 to 255 do bytes[i] := ClampByte(i * slope + d); end; end; end; for k := 0 to 3 do if Assigned(childFuncs[k]) and not Assigned(childFuncs[k].bytes) then childFuncs[k] := nil; dx1 := srcImg.Width - RectWidth(srcRec); dx2 := dstImg.Width - RectWidth(dstRec); p1 := @srcImg.Pixels[srcRec.Top * srcImg.Width + srcRec.Left]; p2 := @dstImg.Pixels[dstRec.Top * dstImg.Width + dstRec.Left]; for i := srcRec.Top to srcRec.Bottom -1 do begin for j := srcRec.Left to srcRec.Right -1 do begin p2.Color := p1^; if Assigned(childFuncs[0]) then p2.B := childFuncs[0].bytes[p2.B]; if Assigned(childFuncs[1]) then p2.G := childFuncs[1].bytes[p2.G]; if Assigned(childFuncs[2]) then p2.R := childFuncs[2].bytes[p2.R]; if Assigned(childFuncs[3]) then p2.A := childFuncs[3].bytes[p2.A]; inc(p1); inc(p2); end; inc(p1, dx1); inc(p2, dx2); end; end; //------------------------------------------------------------------------------ // TFeDefuseLightElement //------------------------------------------------------------------------------ procedure TFeDefuseLightElement.Apply; begin //not implemented if not GetSrcAndDst then Exit; if srcImg <> dstImg then dstImg.Copy(srcImg, srcRec, dstRec); end; //------------------------------------------------------------------------------ // TFeDropShadowElement //------------------------------------------------------------------------------ constructor TFeDropShadowElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; stdDev := InvalidD; floodColor := clInvalid; offset.X.SetValue(0); offset.Y.SetValue(0); end; //------------------------------------------------------------------------------ procedure TFeDropShadowElement.Apply; var alpha: Byte; off: TPointD; dstOffRec: TRect; pfe: TFilterElement; dropShadImg: TImage32; begin if not GetSrcAndDst then Exit; pfe := ParentFilterEl; dropShadImg := pfe.GetNamedImage(tmpFilterImg, false); dropShadImg.Copy(srcImg, srcRec, dropShadImg.Bounds); off := offset.GetPoint(RectD(pfe.fObjectBounds), GetRelFracLimit); off := ScalePoint(off, pfe.fScale); dstOffRec := dstRec; with Point(off) do TranslateRect(dstOffRec, X, Y); dstImg.Copy(srcImg, srcRec, dstOffRec); dstImg.SetRGB(floodColor); alpha := GetAlpha(floodColor); if (alpha > 0) and (alpha < 255) then dstImg.ReduceOpacity(alpha); if stdDev > 0 then FastGaussianBlur(dstImg, dstRec, Ceil(stdDev *0.75 * ParentFilterEl.fScale) , 1); dstImg.CopyBlend(dropShadImg, dropShadImg.Bounds, dstRec, BlendToAlphaLine); end; //------------------------------------------------------------------------------ // TFeFloodElement //------------------------------------------------------------------------------ constructor TFeFloodElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; floodColor := clInvalid; end; //------------------------------------------------------------------------------ procedure TFeFloodElement.Apply; var rec: TRect; begin if not GetSrcAndDst then Exit; if elRectWH.IsValid then rec := Rect(elRectWH.GetRectD(RectD(srcRec), GetRelFracLimit)) else rec := dstRec; dstImg.FillRect(rec, floodColor); end; //------------------------------------------------------------------------------ // TFeGaussElement //------------------------------------------------------------------------------ constructor TFeGaussElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; stdDev := InvalidD; end; //------------------------------------------------------------------------------ procedure TFeGaussElement.Apply; begin if (stdDev = InvalidD) or not GetSrcAndDst then Exit; if srcImg <> dstImg then dstImg.Copy(srcImg, srcRec, dstRec); //GaussianBlur(dstImg, dstRec, Round(stdDev * ParentFilterEl.fScale)); // FastGaussianBlur is a very good approximation and also much faster. // However, empirically stdDev/2 more closely emulates other renderers. FastGaussianBlur(dstImg, dstRec, Ceil(stdDev/2 * ParentFilterEl.fScale)); end; //------------------------------------------------------------------------------ // TFeMergeElement //------------------------------------------------------------------------------ procedure TFeMergeElement.Apply; var i: integer; tmpImg: TImage32; pfe: TFilterElement; begin tmpImg := nil; if not GetSrcAndDst then Exit; pfe := ParentFilterEl; for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TFeMergeNodeElement then with TFeMergeNodeElement(fChilds[i]) do begin if not GetSrcAndDst then Continue; if Assigned(tmpImg) then tmpImg.CopyBlend(srcImg, srcRec, tmpImg.Bounds, BlendToAlphaLine) else if srcImg = pfe.fSrcImg then tmpImg := pfe.GetNamedImage(SourceImage, false) else tmpImg := srcImg; end; dstImg.Copy(tmpImg, tmpImg.Bounds, dstRec); pfe.fLastImg := dstImg; end; //------------------------------------------------------------------------------ // TFeMergeNodeElement //------------------------------------------------------------------------------ procedure TFeMergeNodeElement.Apply; begin //should never get here ;) end; //------------------------------------------------------------------------------ // TFeOffsetElement //------------------------------------------------------------------------------ procedure TFeOffsetElement.Apply; var off: TPointD; dstOffRec: TRect; tmpImg: TImage32; pfe: TFilterElement; begin if not GetSrcAndDst then Exit; pfe := ParentFilterEl; off := offset.GetPoint(RectD(pfe.fObjectBounds), GetRelFracLimit); off := ScalePoint(off, pfe.fScale); dstOffRec := dstRec; with Point(off) do TranslateRect(dstOffRec, X, Y); if srcImg = dstImg then begin tmpImg := pfe.GetNamedImage(tmpFilterImg, false); tmpImg.Copy(srcImg, srcRec, tmpImg.Bounds); dstImg.Clear(dstRec); dstImg.Copy(tmpImg, tmpImg.Bounds, dstOffRec); end else begin dstImg.Clear(dstRec); dstImg.Copy(srcImg, srcRec, dstOffRec); end; end; //------------------------------------------------------------------------------ // TFeSpecLightElement //------------------------------------------------------------------------------ procedure TFeSpecLightElement.Apply; begin //not implemented if not GetSrcAndDst then Exit; if srcImg <> dstImg then dstImg.Copy(srcImg, srcRec, dstRec); end; //------------------------------------------------------------------------------ // TClipPathElement //------------------------------------------------------------------------------ constructor TClipPathElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fDrawData.visible := false; end; //------------------------------------------------------------------------------ procedure TClipPathElement.GetPaths(const drawDat: TDrawData); var i: integer; begin if pathsLoaded then Exit; pathsLoaded := true; for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TShapeElement then with TShapeElement(fChilds[i]) do begin GetPaths(drawDat); AppendPath(self.drawPathsO, drawPathsO); AppendPath(self.drawPathsC, drawPathsC); // apply child's matrix ... MatrixApply(DrawData.matrix, self.drawPathsC); MatrixApply(DrawData.matrix, self.drawPathsO); end; // apply 's matrix ... MatrixApply(DrawData.matrix, drawPathsC); MatrixApply(DrawData.matrix, drawPathsO); end; //------------------------------------------------------------------------------ // TShapeElement //------------------------------------------------------------------------------ constructor TShapeElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; elRectWH.Init; hasPaths := true; fDrawData.visible := true; if fXmlEl.name = '' then Exit; end; //------------------------------------------------------------------------------ function TShapeElement.GetBounds: TRectD; var i: integer; begin Result := UnionRect(GetBoundsD(drawPathsC), GetBoundsD(drawPathsO)); if Result.IsEmpty then begin Result := NullRectD; for i := 0 to fChilds.Count -1 do if TBaseElement(Child[i]) is TShapeElement then Result := UnionRect(Result, TShapeElement(Child[i]).GetBounds); end; end; //------------------------------------------------------------------------------ function TShapeElement.HasMarkers: Boolean; begin Result := IsStroked(fDrawData) and ((fDrawData.markerStart <> '') or (fDrawData.markerMiddle <> '') or (fDrawData.markerEnd <> '')); end; //------------------------------------------------------------------------------ procedure TShapeElement.Draw(image: TImage32; drawDat: TDrawData); var d : double; img : TImage32; stroked : Boolean; filled : Boolean; tmpRec : TRectD; clipRec : TRectD; clipRec2 : TRect; clipPathEl : TBaseElement; filterEl : TBaseElement; maskEl : TBaseElement; clipPaths : TPathsD; fillPaths : TPathsD; di : TDrawData; useTmpImage : Boolean; begin UpdateDrawInfo(drawDat, self); filled := IsFilled(drawDat); stroked := IsStroked(drawDat); GetPaths(drawDat); if not (filled or stroked) or not hasPaths then begin inherited; Exit; end; tmpRec := GetBounds; if not tmpRec.IsEmpty then drawDat.bounds := tmpRec; img := image; clipRec2 := NullRect; maskEl := FindRefElement(drawDat.maskElRef); clipPathEl := FindRefElement(drawDat.clipElRef); filterEl := FindRefElement(drawDat.filterElRef); useTmpImage := Assigned(clipPathEl) or Assigned(filterEl) or Assigned(maskEl); if useTmpImage then begin img := fSvgReader.TempImage; //get special effects bounds if Assigned(clipPathEl) then begin drawDat.clipElRef := ''; di := drawDat; with TClipPathElement(clipPathEl) do begin GetPaths(di); clipPaths := drawPathsC; AppendPath(clipPaths, drawPathsO); clipPaths := MatrixApply(clipPaths, di.matrix); clipRec := GetBoundsD(clipPaths); end; end else if Assigned(maskEl) then begin drawDat.maskElRef := ''; with TMaskElement(maskEl) do begin GetPaths(drawDat); clipRec := RectD(maskRec); end; end else begin clipRec := drawDat.bounds; if clipRec.IsEmpty and (drawDat.fontInfo.textLength > 0) and (self is TTextPathElement) then begin clipRec.Left := fParent.elRectWH.left.rawVal; clipRec.Bottom := fParent.elRectWH.top.rawVal; clipRec.Right := clipRec.Left + drawDat.fontInfo.textLength; clipRec.Top := clipRec.Bottom - drawDat.fontInfo.size; end; if stroked and drawDat.strokeWidth.IsValid then begin with drawDat.strokeWidth do if HasFontUnits then d := GetValue(drawDat.fontInfo.size, GetRelFracLimit) else d := GetValueXY(clipRec, GetRelFracLimit); Img32.Vector.InflateRect(clipRec, d * 0.5, d * 0.5); end; if Assigned(filterEl) then begin drawDat.filterElRef := ''; with TFilterElement(filterEl) do begin MatrixExtractScale(DrawData.matrix, fScale); clipRec := GetAdjustedBounds(clipRec); end; end; MatrixApply(drawDat.matrix, clipRec); end; clipRec2 := Rect(clipRec); Types.IntersectRect(clipRec2, clipRec2, img.Bounds); if IsEmptyRect(clipRec2) then Exit; if image <> fSvgReader.TempImage then img.Clear(clipRec2); end; if not IsValidMatrix(drawDat.matrix) then raise Exception.Create('Invalid matrix found when drawing element'); if Assigned(drawPathsC) or Assigned(drawPathsO) then begin if filled then begin // it's slightly more efficient to apply the matrix here // rather than inside DrawFilled(). fillPaths := drawPathsC; if Assigned(drawPathsO) then AppendPath(fillPaths, drawPathsO); fillPaths := MatrixApply(fillPaths, drawDat.matrix); DrawFilled(img, fillPaths, drawDat); end; if stroked then begin // it's slightly more efficient to apply the matrix // inside DrawStroke() rather than here. if Assigned(drawPathsC) then DrawStroke(img, drawPathsC, drawDat, true); if stroked and Assigned(drawPathsO) then DrawStroke(img, drawPathsO, drawDat, false); end; end; if Assigned(filterEl) then with TFilterElement(filterEl) do Apply(img, clipRec2, drawDat.matrix); if Assigned(maskEl) then TMaskElement(maskEl).ApplyMask(img, drawDat) else if Assigned(clipPathEl) then with TClipPathElement(clipPathEl) do begin if fDrawData.fillRule = frNegative then EraseOutsidePaths(img, clipPaths, frNonZero, clipRec2, fSvgReader.fCustomRendererCache) else EraseOutsidePaths(img, clipPaths, fDrawData.fillRule, clipRec2, fSvgReader.fCustomRendererCache); end; if useTmpImage and (img <> image) then image.CopyBlend(img, clipRec2, clipRec2, BlendToAlphaLine); //todo: enable "paint-order" to change filled/stroked/marker paint order if HasMarkers then DrawMarkers(img, drawDat); inherited; // DrawChildren end; //------------------------------------------------------------------------------ procedure TShapeElement.DrawMarkers(img: TImage32; drawDat: TDrawData); var i,j: integer; scale, sw: double; markerEl: TBaseElement; markerPaths: TPathsD; pt1, pt2: TPointD; di: TDrawData; begin markerPaths := GetSimplePath(drawDat); markerPaths := StripNearDuplicates(markerPaths, 0.01, false); if not Assigned(markerPaths) then Exit; MatrixApply(drawDat.matrix, markerPaths); di := emptyDrawInfo; //prepare to scale the markers by the stroke width with fDrawData.strokeWidth do if not IsValid then sw := 1 else if HasFontUnits then sw := GetValue(drawDat.fontInfo.size, GetRelFracLimit) else sw := GetValueXY(drawDat.bounds, GetRelFracLimit); MatrixExtractScale(drawDat.matrix, scale); MatrixScale(di.matrix, sw * scale); if (fDrawData.markerStart <> '') then begin markerEl := FindRefElement(fDrawData.markerStart); if Assigned(markerEl) and (markerEl is TMarkerElement) then with TMarkerElement(markerEl) do begin for i := 0 to High(markerPaths) do begin if Length(markerPaths[i]) < 2 then Continue; pt1 := markerPaths[i][0]; pt2 := markerPaths[i][1]; if autoStartReverse then SetEndPoint(pt1, GetAngle(pt2, pt1)) else SetEndPoint(pt1, GetAngle(pt1, pt2)); Draw(img, di); end; end; end; if (fDrawData.markerMiddle <> '') then begin markerEl := FindRefElement(fDrawData.markerMiddle); if Assigned(markerEl) and (markerEl is TMarkerElement) then with TMarkerElement(markerEl) do for i := 0 to High(markerPaths) do if SetMiddlePoints(markerPaths[i]) then Draw(img, di); end; if (fDrawData.markerEnd <> '') then begin markerEl := FindRefElement(fDrawData.markerEnd); if Assigned(markerEl) and (markerEl is TMarkerElement) then with TMarkerElement(markerEl) do begin for i := 0 to High(markerPaths) do begin j := High(markerPaths[i]); if j < 1 then Continue; pt1 := markerPaths[i][j]; pt2 := markerPaths[i][j-1]; SetEndPoint(pt1, GetAngle(pt2, pt1)); Draw(img, di); end; end; end; end; //------------------------------------------------------------------------------ procedure TShapeElement.GetPaths(const drawDat: TDrawData); var i: integer; begin for i := 0 to fChilds.Count -1 do if TBaseElement(fChilds[i]) is TShapeElement then TShapeElement(fChilds[i]).GetPaths(drawDat); end; //------------------------------------------------------------------------------ function TShapeElement.GetSimplePath(const drawDat: TDrawData): TPathsD; begin Result := nil; end; //------------------------------------------------------------------------------ procedure TShapeElement.DrawFilled(img: TImage32; const paths: TPathsD; drawDat: TDrawData); var refEl: TBaseElement; rec: TRect; opacity: Byte; begin if not assigned(paths) then Exit; if drawDat.fillColor = clCurrent then drawDat.fillColor := fSvgReader.currentColor; if drawDat.fillRule = frNegative then drawDat.fillRule := frNonZero; if not IsValid(drawDat.fillOpacity) then opacity := 255 else opacity := ClampByte(drawDat.fillOpacity * 255); if (drawDat.fillEl <> '') then begin refEl := FindRefElement(drawDat.fillEl); if Assigned(refEl) and (refEl is TFillElement) then begin if refEl is TRadGradElement then begin with TRadGradElement(refEl) do begin fSvgReader.RadGradRenderer.Opacity := opacity; if PrepareRenderer(fSvgReader.RadGradRenderer, drawDat) then DrawPolygon(img, paths, drawDat.fillRule, fSvgReader.RadGradRenderer); end; end else if refEl is TLinGradElement then begin with TLinGradElement(refEl) do begin fSvgReader.LinGradRenderer.Opacity := opacity; if PrepareRenderer(fSvgReader.LinGradRenderer, drawDat) then DrawPolygon(img, paths, drawDat.fillRule, fSvgReader.LinGradRenderer); end; end else if refEl is TPatternElement then begin with TPatternElement(refEl) do if PrepareRenderer(ImgRenderer, drawDat) then begin rec := img32.Vector.GetBounds(paths); ImgRenderer.Offset := rec.TopLeft; DrawPolygon(img, paths, drawDat.fillRule, ImgRenderer); end; end; end; end else if drawDat.fillColor = clInvalid then begin DrawPolygon(img, paths, drawDat.fillRule, MergeColorAndOpacity(clBlack32, drawDat.fillOpacity), fSvgReader.fCustomRendererCache); end else with drawDat do begin DrawPolygon(img, paths, fillRule, MergeColorAndOpacity(fillColor, fillOpacity), fSvgReader.fCustomRendererCache); end; end; //------------------------------------------------------------------------------ procedure TShapeElement.DrawStroke(img: TImage32; const paths: TPathsD; drawDat: TDrawData; isClosed: Boolean); var i: integer; dashOffset, sw: double; dashArray: TArrayOfDouble; miterLim, scale: Double; strokeClr: TColor32; strokePaths: TPathsD; refEl: TBaseElement; endStyle: TEndStyle; joinStyle: TJoinStyle; bounds: TRectD; paths2: TPathsD; opacity: Byte; begin if not Assigned(paths) then Exit; MatrixExtractScale(drawDat.matrix, scale); joinStyle := fDrawData.strokeJoin; bounds := fSvgReader.userSpaceBounds; with drawDat.strokeWidth do begin if not IsValid then sw := 1 else if HasFontUnits then sw := GetValue(drawDat.fontInfo.size, GetRelFracLimit) else sw := GetValueXY(bounds, 0); end; miterLim := drawDat.strokeMitLim; if drawDat.strokeColor = clCurrent then drawDat.strokeColor := fSvgReader.currentColor; if Length(drawDat.dashArray) > 0 then dashArray := ScaleDashArray(drawDat.dashArray, scale) else dashArray := nil; dashOffset := drawDat.dashOffset; with drawDat do strokeClr := MergeColorAndOpacity(strokeColor, strokeOpacity); if not IsValid(drawDat.strokeOpacity) then opacity := 255 else opacity := ClampByte(drawDat.strokeOpacity * 255); if isClosed then begin if Assigned(dashArray) then begin if joinStyle = jsRound then endStyle := esRound else endStyle := esButt; dashArray := ScaleDashArray(drawDat.dashArray, 1); // ie. don't scale yet! strokePaths := nil; for i := 0 to High(paths) do begin paths2 := GetDashedPath(paths[i], true, dashArray, @dashOffset); AppendPath(strokePaths, paths2); end; strokePaths := RoughOutline(strokePaths, sw, joinStyle, endStyle, miterLim, scale); end else begin endStyle := esPolygon; strokePaths := RoughOutline(paths, sw, joinStyle, endStyle, miterLim, scale); end; end else begin if fDrawData.strokeCap = esPolygon then endStyle := esButt else endStyle := fDrawData.strokeCap; if Assigned(dashArray) then begin strokePaths := MatrixApply(paths, drawDat.matrix); DrawDashedLine(img, strokePaths, dashArray, @dashOffset, sw * scale, strokeClr, endStyle, jsAuto, fSvgReader.fCustomRendererCache); Exit; end; strokePaths := RoughOutline(paths, sw, joinStyle, endStyle, miterLim, scale); end; strokePaths := MatrixApply(strokePaths, drawDat.matrix); if (drawDat.strokeEl <> '') then begin refEl := FindRefElement(drawDat.strokeEl); if not Assigned(refEl) then Exit; if refEl is TRadGradElement then begin with TRadGradElement(refEl) do begin fSvgReader.RadGradRenderer.Opacity := opacity; PrepareRenderer(fSvgReader.RadGradRenderer, drawDat); end; DrawPolygon(img, strokePaths, frNonZero, fSvgReader.RadGradRenderer); end else if refEl is TLinGradElement then begin with TLinGradElement(refEl) do begin fSvgReader.LinGradRenderer.Opacity := opacity; PrepareRenderer(fSvgReader.LinGradRenderer, drawDat); end; DrawPolygon(img, strokePaths, frNonZero, fSvgReader.LinGradRenderer); end else if refEl is TPatternElement then with TPatternElement(refEl) do begin imgRenderer.Opacity := opacity; PrepareRenderer(imgRenderer, drawDat); DrawLine(img, strokePaths, 1, imgRenderer, esPolygon, joinStyle, scale); DrawPolygon(img, strokePaths, frNonZero, imgRenderer); end; end else begin DrawPolygon(img, strokePaths, frNonZero, strokeClr, fSvgReader.fCustomRendererCache); end; end; //------------------------------------------------------------------------------ // TPathElement //------------------------------------------------------------------------------ constructor TPathElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; fSvgPaths := TSvgPath.Create; end; //------------------------------------------------------------------------------ destructor TPathElement.Destroy; begin fSvgPaths.Free; inherited; end; //------------------------------------------------------------------------------ function TPathElement.GetBounds: TRectD; var i: integer; begin Result := NullRectD; for i := 0 to fSvgPaths.Count -1 do Result := UnionRect(Result, fSvgPaths[i].GetBounds); end; //------------------------------------------------------------------------------ procedure TPathElement.ParseDAttrib(const value: UTF8String); begin fSvgPaths.Parse(value); end; //------------------------------------------------------------------------------ procedure TPathElement.Flatten(index: integer; scalePending: double; out path: TPathD; out isClosed: Boolean); begin isClosed := fSvgPaths[index].isClosed; path := fSvgPaths[index].GetFlattenedPath(scalePending); end; //------------------------------------------------------------------------------ procedure TPathElement.GetPaths(const drawDat: TDrawData); var i: integer; scalePending: double; isClosed: Boolean; path: TPathD; begin if pathsLoaded then Exit; pathsLoaded := true; MatrixExtractScale(drawDat.matrix, scalePending); for i := 0 to fSvgPaths.Count -1 do begin Flatten(i, scalePending, path, isClosed); if not Assigned(path) then Continue; if isClosed then AppendPath(drawPathsC, path) else AppendPath(drawPathsO, path); end; end; //------------------------------------------------------------------------------ function TPathElement.GetSimplePath(const drawDat: TDrawData): TPathsD; var i: integer; begin Result := nil; SetLength(Result, fSvgPaths.Count); for i := 0 to fSvgPaths.Count -1 do Result[i] := fSvgPaths[i].GetSimplePath; end; //------------------------------------------------------------------------------ // TPolyElement //------------------------------------------------------------------------------ function TPolyElement.GetBounds: TRectD; begin Result := GetBoundsD(path); end; //------------------------------------------------------------------------------ procedure TPolyElement.GetPaths(const drawDat: TDrawData); begin if pathsLoaded or not Assigned(path) then Exit; pathsLoaded := true; if (fXmlEl.hash = hPolygon) then begin AppendPath(drawPathsC, path); //hPolygon end else begin AppendPath(drawPathsO, path); //hPolyline end; end; //------------------------------------------------------------------------------ function TPolyElement.GetSimplePath(const drawDat: TDrawData): TPathsD; begin Result := nil; AppendPath(Result, path); end; //------------------------------------------------------------------------------ procedure TPolyElement.ParsePoints(const value: UTF8String); var currCnt, currCap: integer; procedure AddPoint(const pt: TPointD); begin if currCnt = currCap then begin currCap := currCap + buffSize; SetLength(path, currCap); end; path[currCnt] := pt; inc(currCnt); end; var pt: TPointD; c, endC: PUTF8Char; begin currCnt := 0; currCap := buffSize; c := PUTF8Char(value); endC := c + Length(value); SetLength(path, currCap); while IsNumPending(c, endC, true) and ParseNextNum(c, endC, true, pt.X) and ParseNextNum(c, endC, true, pt.Y) do AddPoint(pt); SetLength(path, currCnt); end; //------------------------------------------------------------------------------ // TLineElement //------------------------------------------------------------------------------ constructor TLineElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; NewPointDArray(path, 2, True); path[0] := NullPointD; path[1] := NullPointD; end; //------------------------------------------------------------------------------ function TLineElement.GetBounds: TRectD; begin Result := GetBoundsD(path); end; //------------------------------------------------------------------------------ procedure TLineElement.GetPaths(const drawDat: TDrawData); begin if pathsLoaded then Exit; pathsLoaded := true; AppendPath(drawPathsO, path); end; //------------------------------------------------------------------------------ function TLineElement.GetSimplePath(const drawDat: TDrawData): TPathsD; begin Result := nil; AppendPath(Result, path); end; //------------------------------------------------------------------------------ // TCircleElement //------------------------------------------------------------------------------ constructor TCircleElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; bounds := NullRectD; centerPt.Init; radius.Init; end; //------------------------------------------------------------------------------ function TCircleElement.GetBounds: TRectD; begin Result := bounds; end; //------------------------------------------------------------------------------ procedure TCircleElement.GetPaths(const drawDat: TDrawData); var scalePending : double; pt : TPointD; path : TPathD; r: double; begin if pathsLoaded or not radius.IsValid then Exit; pathsLoaded := true; r := radius.GetValueXY(drawDat.bounds, GetRelFracLimit); pt := centerPt.GetPoint(drawDat.bounds, GetRelFracLimit); MatrixExtractScale(drawDat.matrix, scalePending); bounds := RectD(pt.X -r, pt.Y -r, pt.X +r, pt.Y +r); path := Ellipse(bounds, scalePending); AppendPath(drawPathsC, path); end; //------------------------------------------------------------------------------ // TEllipseElement //------------------------------------------------------------------------------ constructor TEllipseElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; centerPt.Init; radius.Init; end; //------------------------------------------------------------------------------ function TEllipseElement.GetBounds: TRectD; begin Result := bounds; end; //------------------------------------------------------------------------------ procedure TEllipseElement.GetPaths(const drawDat: TDrawData); var scalePending : double; path : TPathD; rad : TPointD; centPt : TPointD; begin if pathsLoaded then Exit; pathsLoaded := true; rad := radius.GetPoint(drawDat.bounds, GetRelFracLimit); centPt := centerPt.GetPoint(drawDat.bounds, GetRelFracLimit); with centPt do bounds := RectD(X -rad.X, Y -rad.Y, X +rad.X, Y +rad.Y); MatrixExtractScale(drawDat.matrix, scalePending); path := Ellipse(bounds, scalePending); AppendPath(drawPathsC, path); end; //------------------------------------------------------------------------------ // TRectElement //------------------------------------------------------------------------------ constructor TRectElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; radius.Init; elRectWH.width.SetValue(100, utPercent); elRectWH.height.SetValue(100, utPercent); end; //------------------------------------------------------------------------------ function TRectElement.GetBounds: TRectD; begin Result := elRectWH.GetRectD(NullRectD, GetRelFracLimit); end; //------------------------------------------------------------------------------ procedure TRectElement.GetPaths(const drawDat: TDrawData); var radXY : TPointD; bounds: TRectD; path : TPathD; begin if pathsLoaded then Exit; if elRectWH.width.HasFontUnits then bounds := elRectWH.GetRectD(drawDat.fontInfo.size, GetRelFracLimit) else bounds := elRectWH.GetRectD(drawDat.bounds, GetRelFracLimit); if bounds.IsEmpty then Exit; pathsLoaded := true; radXY := radius.GetPoint(bounds, GetRelFracLimit); if (radXY.X > 0) or (radXY.Y > 0) then begin if (radXY.X <= 0) then radXY.X := radXY.Y else if (radXY.Y <= 0) then radXY.Y := radXY.X; path := RoundRect(bounds, radXY); end else path := Rectangle(bounds); AppendPath(drawPathsC, path); end; //------------------------------------------------------------------------------ function TRectElement.GetSimplePath(const drawDat: TDrawData): TPathsD; var rec: TRectD; begin Result := nil; rec := elRectWH.GetRectD(drawDat.bounds, GetRelFracLimit); if not rec.IsEmpty then AppendPath(Result, Rectangle(rec)); end; //------------------------------------------------------------------------------ // TTextElement //------------------------------------------------------------------------------ constructor TTextElement.Create(parent: TBaseElement; svgEl: TSvgXmlEl); begin inherited; offset.Init; hasPaths := false; end; //------------------------------------------------------------------------------ procedure TTextElement.Draw(img: TImage32; drawDat: TDrawData); begin UpdateDrawInfo(drawDat, self); UpdateFontInfo(drawDat, self); fSvgReader.GetBestFont(drawDat.FontInfo); if not Assigned(fSvgReader.fFontCache) then Exit; if drawDat.fontInfo.size = 0 then drawDat.fontInfo.size := 16; if offset.X.IsValid then currentPt.X := offset.X.rawVal else if elRectWH.left.IsValid then currentPt.X := elRectWH.left.rawVal else currentPt.X := 0; if offset.Y.IsValid then currentPt.Y := offset.Y.rawVal else if elRectWH.top.IsValid then currentPt.Y := elRectWH.top.rawVal else currentPt.Y := 0; lastChrSpc := false; textDx := 0; currSpanEl := nil; //get child paths (which also updates currentPt) GetPaths(drawDat); DrawChildren(img, drawDat); end; //------------------------------------------------------------------------------ // TTextSubElement //------------------------------------------------------------------------------ function TTextSubElement.GetTextEl: TTextElement; var el: TBaseElement; begin if not Assigned(textEl) then begin el := fParent; while Assigned(el) and not (el is TTextElement) do el := el.fParent; if Assigned(el) then textEl := TTextElement(el); end; Result := textEl; end; //------------------------------------------------------------------------------ // TTSpanElement //------------------------------------------------------------------------------ procedure TTSpanElement.GetPaths(const drawDat: TDrawData); var tmpX, startX, fontScale, fontSize, bs: double; i,j, len : integer; di : TDrawData; s : UnicodeString; mat : TMatrixD; tmpPaths : TPathsD; codepoints: TArrayOfCardinal; angles : TArrayOfDouble; glyphInfo : PGlyphInfo; glyphRec : TRectD; begin // 1. We only want to process this method once even though it's called twice, // first indirectly by TTextElement.Draw, and then by TTSpanElement.Draw. // 2. This method isn't called when is a sub-element of . if pathsLoaded then Exit; pathsLoaded := true; di := drawDat; if ChildCount > 0 then begin UpdateDrawInfo(di, self); UpdateFontInfo(di, self); end; if drawDat.FontInfo.size = 0 then fontSize := 16.0 else fontSize := drawDat.FontInfo.size; fSvgReader.GetBestFont(di.FontInfo); if not Assigned(fSvgReader.fFontCache) then Exit; GetTextEl; if not Assigned(textEl) or (textEl.currentPt.X = InvalidD) or (textEl.currentPt.Y = InvalidD) then Exit; //by not changing the fontCache.FontHeight, the quality of //small font render improves very significantly (though of course //this requires additional glyph scaling and offsetting). fontScale := fontSize / fSvgReader.fFontCache.FontHeight; if elRectWH.left.IsValid then textEl.currentPt.X := elRectWH.left.rawVal; if elRectWH.top.IsValid then textEl.currentPt.Y := elRectWH.top.rawVal; if offset.X.IsValid then textEl.currentPt.X := textEl.currentPt.X + offset.X.GetValue(0, 0); if offset.Y.IsValid then textEl.currentPt.Y := textEl.currentPt.Y + offset.Y.GetValue(0, 0); // only 'virtual' (dummy) elements are self-closing, and // mostly their parents are 'real' elements. However, // virtual elements can also have element parents. if not fXmlEl.selfClosed then begin textEl.currSpanEl := self; angles := nil; end else if (fParent is TTSpanElement) then begin if Assigned(TTSpanElement(fParent).angle) then angles := TTSpanElement(fParent).angle else angles := textEl.angle; end else begin angles := textEl.angle; textEl.currSpanEl := nil; end; chunkDx := 0; if (Length(fXmlEl.text) > 0) and (fontSize > 1) then begin // this should be a virtual (dummy) element //assert(fXmlEl.selfClosed); s := DecodeUtf8ToUnicode(HtmlDecode(fXmlEl.text)); // don't allow a dup. spaces or a space at the beginning of a text s := FixSpaces(s, textEl.lastChrSpc or ((fParent = textEl) and (self = textEl.Child[0]))); if IsBlankText(s) then begin drawPathsC := nil; // don't allow duplicate spaces or a space at the beginning of text if textEl.lastChrSpc or (self = textEl.Child[0]) then Exit; tmpX := fSvgReader.fFontCache.GetSpaceWidth; textEl.lastChrSpc := true; end else if Assigned(angles) then begin drawPathsC := nil; tmpPaths := nil; tmpX := 0; codepoints := fSvgReader.fFontCache.GetTextCodePoints(s); // make sure 'angles' is at least the length of codepoints len := Length(codepoints); if len > Length(angles) then begin j := High(angles); SetLength(angles, len); // extend angles for i := j +1 to len -1 do angles[i] := angles[j]; end; textEl.lastChrSpc := (codepoints[len -1] = 32); // now get each rotated glyph and append to drawPathsC ... for i := 0 to len -1 do begin glyphInfo := fSvgReader.fFontCache.GetGlyphInfo(codepoints[i]); if Assigned(glyphInfo.paths) then begin glyphRec := GetBoundsD(glyphInfo.paths); tmpPaths := RotatePath(glyphInfo.paths, glyphRec.MidPoint, angles[i]); if i > 0 then tmpPaths := TranslatePath(tmpPaths, tmpX, 0); AppendPath(drawPathsC, tmpPaths); end; tmpX := tmpX + glyphInfo.hmtx.advanceWidth * fSvgReader.fFontCache.Scale; end; end else begin drawPathsC := fSvgReader.fFontCache.GetTextOutline(0, 0, s, tmpX); textEl.lastChrSpc := s[length(s)] = space; end; chunkDx := tmpX * fontScale; if Assigned(textEl.currSpanEl) then with textEl.currSpanEl do chunkDx := chunkDx + self.chunkDx; textEl.textDx := textEl.textDx + chunkDx; with textEl.currentPt do begin startX := X; X := X + chunkDx; end; if Assigned(drawPathsC) then // eg. unassigned if a space char begin with drawDat.fontInfo do if not baseShift.IsValid then bs := 0 else bs := baseShift.GetValue(size, GetRelFracLimit); mat := IdentityMatrix; MatrixScale(mat, fontScale); MatrixTranslate(mat, startX, textEl.currentPt.Y - bs); MatrixApply(mat, drawPathsC); end; end; // nested elements are always possible, // except when self is a pseudo 'selfClosed' element inherited GetPaths(di); // gets any children paths end; //------------------------------------------------------------------------------ procedure TTSpanElement.Draw(image: TImage32; drawDat: TDrawData); var stroked : Boolean; filled : Boolean; tmpRec : TRect; fillPaths : TPathsD; begin if ChildCount = 0 then fDrawData := fParent.fDrawData else begin UpdateDrawInfo(drawDat, self); UpdateFontInfo(drawDat, self); end; if not fXmlEl.selfClosed then begin // DrawChildren and exit ... inherited; Exit; end; filled := IsFilled(drawDat); stroked := IsStroked(drawDat); if Assigned(drawPathsC) and Assigned(textEl) then begin // a element that contains text (and a path) must be virtual. // But its parent may be another , or a or a